07070100000000000081A4000000000000000000000001645E367C00000107000000000000000000000000000000000000002200000000elemental-cli-0.3.1/.codecov.yaml github_checks:
  annotations: false
coverage:
  status:
    project:
      default: false
      cli:
        paths:
         - "cmd/"
        target: 75%
        informational: true
      pkg:
        paths:
          - "pkg/"
        target: 75%
    patch: false 07070100000001000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000001C00000000elemental-cli-0.3.1/.github   07070100000002000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000002600000000elemental-cli-0.3.1/.github/workflows 07070100000003000081A4000000000000000000000001645E367C0000019D000000000000000000000000000000000000003100000000elemental-cli-0.3.1/.github/workflows/build.yaml  name: Build
on:
    pull_request:
    push:
        branches:
            - main
jobs:
    build:
        runs-on: ubuntu-latest
        steps:
            - name: Checkout code
              uses: actions/checkout@v3.1.0
            - name: Install Go
              uses: actions/setup-go@v3.3.1
              with:
                go-version-file: go.mod
            - name: Build
              run: make build
   07070100000004000081A4000000000000000000000001645E367C00000AE7000000000000000000000000000000000000003100000000elemental-cli-0.3.1/.github/workflows/codeql.yml  # For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"

on:
  push:
    branches: [ "main" ]
  pull_request:
    # The branches below must be a subset of the branches above
    branches: [ "main" ]
  schedule:
    - cron: '30 11 * * 0'

jobs:
  analyze:
    name: Analyze
    runs-on: ubuntu-latest
    permissions:
      actions: read
      contents: read
      security-events: write

    strategy:
      fail-fast: false
      matrix:
        language: [ 'go' ]
        # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
        # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support

    steps:
    - name: Checkout repository
      uses: actions/checkout@v3

    # Initializes the CodeQL tools for scanning.
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v2
      with:
        languages: ${{ matrix.language }}
        # If you wish to specify custom queries, you can do so here or in a config file.
        # By default, queries listed here will override any specified in a config file.
        # Prefix the list here with "+" to use these queries and those in the config file.
        
        # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
        # queries: security-extended,security-and-quality

        
    # Autobuild attempts to build any compiled languages  (C/C++, C#, Go, or Java).
    # If this step fails, then you should remove it and run the build manually (see below)
    - name: Autobuild
      uses: github/codeql-action/autobuild@v2

    # ℹ️ Command-line programs to run using the OS shell.
    # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun

    #   If the Autobuild fails above, remove it and uncomment the following three lines. 
    #   modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.

    # - run: |
    #   echo "Run, Build Application using script"
    #   ./location_of_script_within_repo/buildscript.sh

    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@v2
      with:
        category: "/language:${{matrix.language}}"
 07070100000005000081A4000000000000000000000001645E367C00000375000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/.github/workflows/dependency-review.yml   # Dependency Review Action
#
# This Action will scan dependency manifest files that change as part of a Pull Request, surfacing known-vulnerable versions of the packages declared or updated in the PR. Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable packages will be blocked from merging.
#
# Source repository: https://github.com/actions/dependency-review-action
# Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement
name: 'Dependency Review'
on: [pull_request]

permissions:
  contents: read

jobs:
  dependency-review:
    runs-on: ubuntu-latest
    steps:
      - name: 'Checkout Repository'
        uses: actions/checkout@v3
      - name: 'Dependency Review'
        uses: actions/dependency-review-action@v2
   07070100000006000081A4000000000000000000000001645E367C00000922000000000000000000000000000000000000003900000000elemental-cli-0.3.1/.github/workflows/docker-master.yaml  name: Docker build and push
on:
  push:
    branches:
      - main

env:
  DOCKER_REPO: quay.io/costoolkit/elemental-cli-ci
jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      id-token: write  # undocumented OIDC support.
      contents: write
    steps:
      - name: Checkout code
        uses: actions/checkout@v3.1.0
        with:
          fetch-depth: 0
      - name: cosign-installer
        uses: sigstore/cosign-installer@v2.8.0
      - name: Export tag
        id: export_tag
        run: |
          echo "Using tag $(git describe --tags `git rev-list --tags --max-count=1`  2>/dev/null || echo 'v0.0.1')"
          TAG=$(git describe --tags `git rev-list --tags --max-count=1` 2>/dev/null || echo "v0.0.1")
          echo "elemental_tag=$TAG" >> $GITHUB_OUTPUT
      - name: Docker meta for master/PR
        id: meta
        uses: docker/metadata-action@v4.1.1
        with:
          images: |
            ${{ env.DOCKER_REPO }}
          tags: |
            type=sha,format=short,prefix=${{ steps.export_tag.outputs.elemental_tag }}-
            type=raw,value=latest
      - name: Set up Docker Buildx
        id: buildx
        uses: docker/setup-buildx-action@v2.4.1
      - name: Login to Quay
        if: github.event_name != 'pull_request'
        uses: docker/login-action@v2.1.0
        with:
          registry: quay.io
          username: ${{ secrets.QUAY_USERNAME }}
          password: ${{ secrets.QUAY_TOKEN }}
      - name: Push image  # should be a free build as everything has been cached and loaded
        uses: docker/build-push-action@v3.2.0
        if: ${{ github.event_name != 'pull_request' }}  # push on main merge
        with:
          context: .
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          # cache into GitHub actions cache, nice
          cache-from: type=gha
          cache-to: type=gha,mode=max
          target: elemental
          build-args: |
            ELEMENTAL_VERSION=${{ steps.export_tag.outputs.elemental_tag }}
            ELEMENTAL_COMMIT=${{ github.sha }}
      - name: Sign image
        env:
          COSIGN_EXPERIMENTAL: 1
        run: |
          cosign sign -y ${{ env.DOCKER_REPO }}:latest
          
          cosign sign -y ${{ env.DOCKER_REPO }}:${{ steps.export_tag.outputs.elemental_tag }}-${GITHUB_SHA::7}
          
  07070100000007000081A4000000000000000000000001645E367C00000835000000000000000000000000000000000000003600000000elemental-cli-0.3.1/.github/workflows/docker-tag.yaml name: Docker build and push on tag
on:
  push:
    tags:
      - 'v*'
env:
  DOCKER_REPO: quay.io/costoolkit/elemental-cli
jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: write
    steps:
      - name: Checkout code
        uses: actions/checkout@v3.1.0
        with:
          fetch-depth: 0
      - name: cosign-installer
        uses: sigstore/cosign-installer@v2.8.0
      - name: Export tag
        id: export_tag
        run: |
          echo "Using tag $(git describe --tags `git rev-list --tags --max-count=1`  2>/dev/null || echo 'v0.0.1')"
          TAG=$(git describe --tags `git rev-list --tags --max-count=1` 2>/dev/null || echo "v0.0.1")
          echo "elemental_tag=$TAG" >> $GITHUB_OUTPUT
      - name: Docker meta for tag
        id: meta
        uses: docker/metadata-action@v4.1.1
        with:
          images: |
            ${{ env.DOCKER_REPO }}
          tags: |
            type=semver,pattern=v{{version}}
            type=raw,value=latest
      - name: Set up Docker Buildx
        id: buildx
        uses: docker/setup-buildx-action@v2.2.1
      - name: Login to Quay
        uses: docker/login-action@v2.1.0
        with:
          registry: quay.io
          username: ${{ secrets.QUAY_USERNAME }}
          password: ${{ secrets.QUAY_TOKEN }}
      - name: Push image  # should be a free build as everything has been cached and loaded
        uses: docker/build-push-action@v4
        with:
          context: .
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          # cache into GitHub actions cache, nice
          cache-from: type=gha
          cache-to: type=gha,mode=max
          target: elemental
          build-args: |
            ELEMENTAL_VERSION=${{ steps.export_tag.outputs.elemental_tag }}
            ELEMENTAL_COMMIT=${{ github.sha }}
      - name: Sign image
        env:
          COSIGN_EXPERIMENTAL: 1
        run: |
          cosign sign -y ${{ env.DOCKER_REPO }}:latest
          
          cosign sign -y ${{ env.DOCKER_REPO }}:${{ steps.export_tag.outputs.elemental_tag }}
   07070100000008000081A4000000000000000000000001645E367C000001AC000000000000000000000000000000000000003000000000elemental-cli-0.3.1/.github/workflows/docs.yaml   name: Docs build
on:
    pull_request:
    push:
        branches:
            - main
jobs:
    docs_build:
        runs-on: ubuntu-latest
        steps:
            - name: Checkout code
              uses: actions/checkout@v3.1.0
            - name: Install Go
              uses: actions/setup-go@v3.3.1
              with:
                go-version-file: go.mod
            - name: Build
              run: make build_docs
07070100000009000081A4000000000000000000000001645E367C000001E2000000000000000000000000000000000000003000000000elemental-cli-0.3.1/.github/workflows/lint.yaml   name: Lint
on:
    pull_request:
    push:
        branches:
            - main
jobs:
    lint:
        runs-on: ubuntu-latest
        steps:
            - name: Checkout code
              uses: actions/checkout@v3.1.0
            - name: Install Go
              uses: actions/setup-go@v3.3.1
              with:
                go-version-file: go.mod
            - name: Analysis
              uses: golangci/golangci-lint-action@v3
              with:
                args: -v
  0707010000000A000081A4000000000000000000000001645E367C0000037B000000000000000000000000000000000000003300000000elemental-cli-0.3.1/.github/workflows/release.yaml    name: goreleaser
on:
    push:
        tags:
            - 'v*'
jobs:
    goreleaser:
        runs-on: ubuntu-latest
        permissions:
            id-token: write # undocumented OIDC support.
            contents: write
        env:
            COSIGN_EXPERIMENTAL: 1
        steps:
            - name: Checkout
              uses: actions/checkout@v3.1.0
              with:
                fetch-depth: 0
            - name: Set up Go
              uses: actions/setup-go@v3.3.1
              with:
                go-version-file: go.mod
            - name: Set up cosign
              uses: sigstore/cosign-installer@v2.8.0
            - name: Run GoReleaser
              uses: goreleaser/goreleaser-action@v3.2.0
              with:
                version: latest
                args: release --rm-dist
              env:
                GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 0707010000000B000081A4000000000000000000000001645E367C00000662000000000000000000000000000000000000003000000000elemental-cli-0.3.1/.github/workflows/test.yaml   name: Test
on:
    pull_request:
    push:
        branches:
            - main
jobs:
    test:
        runs-on: ubuntu-latest
        steps:
            - name: Checkout code
              uses: actions/checkout@v3.1.0
              with:
                fetch-depth: 0
            - name: Check if only Dockerfile has changed
              id: changed-docker-files
              uses: tj-actions/changed-files@v33
              with:
                files: |
                    Dockerfile
                    .github/workflows/docker.yaml
            - name: Install Go
              if: steps.changed-docker-files.outputs.only_changed == 'false'
              uses: actions/setup-go@v3.3.1
              with:
                go-version-file: go.mod
            - name: Deps
              if: steps.changed-docker-files.outputs.only_changed == 'false'
              run: make test_deps
            - name: Run tests
              if: steps.changed-docker-files.outputs.only_changed == 'false'
              run: |
                make test
                sudo env PATH="$PATH" make test_root
            - name: Merge coverage
              if: steps.changed-docker-files.outputs.only_changed == 'false'
              run: |
                echo "mode: atomic" > coverage.out
                grep -v "mode: atomic" coverage.txt >> coverage.out
                grep -v "mode: atomic" coverage_root.txt >> coverage.out
            - name: Codecov
              if: steps.changed-docker-files.outputs.only_changed == 'false'
              uses: codecov/codecov-action@v3.1.1
              with:
                file: ./coverage.out
  0707010000000C000081A4000000000000000000000001645E367C000002D2000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/.github/workflows/update-cmd-docs.yaml    name: Update cmd docs
on:
  push:
    branches:
      - main
jobs:
  createPullRequest:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3.1.0
      - name: Install Go
        uses: actions/setup-go@v3.3.1
        with:
          go-version-file: go.mod

      - name: Build
        run: make build_docs
      - name: Create Pull Request
        id: pr
        uses: peter-evans/create-pull-request@v4
        with:
          commit-message: "[auto] Update cmd docs"
          token: ${{ secrets.ELEMENTAL_BOT_GITHUB_TOKEN }}
          push-to-fork: elemental-ci/elemental-cli
          signoff: true
          title: "[auto] Update cmd docs"
          delete-branch: true
  0707010000000D000081A4000000000000000000000001645E367C00000350000000000000000000000000000000000000003500000000elemental-cli-0.3.1/.github/workflows/updatecli.yaml  ---
name: Updatecli

on:
  workflow_dispatch:
  schedule:
    # * is a special character in YAML so you have to quote this string
    # Run once a day 
    - cron: '0 0 * * *'

jobs:
  updatecli:
    runs-on: "ubuntu-latest"
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Setup Go
        uses: actions/setup-go@v3
        with: 
          go-version: 'stable'

      - name: Set the value
        id: step_one
        run: |
          echo "GOPATH=$(go env GOPATH)" >> $GITHUB_ENV

      - name: Install Updatecli in the runner
        uses: updatecli/updatecli-action@v2

      - name: Run golang update
        run: "updatecli apply --config .updatecli.d/golang-version.yaml"
        env:
          ELEMENTAL_BOT_GITHUB_TOKEN: "${{ secrets.ELEMENTAL_BOT_GITHUB_TOKEN }}"
          GOPATH: "${{ env.GOPATH }}"
0707010000000E000081A4000000000000000000000001645E367C00000021000000000000000000000000000000000000001F00000000elemental-cli-0.3.1/.gitignore    .vscode/
bin/
coverage.txt
dist/
   0707010000000F000081A4000000000000000000000001645E367C0000044F000000000000000000000000000000000000002200000000elemental-cli-0.3.1/.golangci.yml run:
  timeout: 5m
  tests: false
output:
  format: github-actions
linters:
  enable:
    - revive # replacement for golint
    - dupl # check duplicated code
    - goconst # check strings that can turn into constants
    - gofmt # check fmt
    - goheader # Check license headers, only checks files in current year
    - goimports # check imports
    - gocyclo # check complexity
linters-settings:
  gocyclo:
    min-complexity: 30
  goheader:
    template: |-
      Copyright © 2022 - {{year}} SUSE LLC
      
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
      
          http://www.apache.org/licenses/LICENSE-2.0
      
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      See the License for the specific language governing permissions and
      limitations under the License.
 07070100000010000081A4000000000000000000000001645E367C000004D2000000000000000000000000000000000000002500000000elemental-cli-0.3.1/.goreleaser.yaml  project_name: elemental
builds:
  - env:
      - CGO_ENABLED=0
    ldflags:
      - -s -w
      - -X github.com/rancher/elemental-cli/internal/version.version={{.Tag}}
      - -X github.com/rancher/elemental-cli/internal/version.gitCommit={{.Commit}}
    goos:
      - linux
    goarch:
      - amd64
      - arm
      - arm64
    goarm:
      - 6
      - 7
signs:
  - cmd: cosign
    signature: "${artifact}.sig"
    certificate: "${artifact}.pem"
    args: ["sign-blob", "--oidc-issuer=https://token.actions.githubusercontent.com", "--output-certificate=${certificate}", "--output-signature=${signature}", "${artifact}"]
    artifacts: all
source:
  enabled: true
  name_template: '{{ .ProjectName }}-{{ .Tag }}-source'
archives:
  # Default template uses underscores instead of -
  - name_template: "{{ .ProjectName }}-{{ .Tag }}-{{ .Os }}-{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}"
    replacements:
      darwin: Darwin
      linux: Linux
      windows: Windows
      386: i386
      amd64: x86_64
checksum:
  name_template: '{{ .ProjectName }}-{{ .Tag }}-checksums.txt'
snapshot:
  name_template: "{{ .Tag }}-next"
changelog:
  sort: asc
  filters:
    exclude:
      - '^docs:'
      - '^test:'
      - '^Merge pull request'  07070100000011000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000001900000000elemental-cli-0.3.1/.obs  07070100000012000081A4000000000000000000000001645E367C000001CE000000000000000000000000000000000000002300000000elemental-cli-0.3.1/.obs/README.md    # Open Build Service integration files

This folder includes specific files to integrate with the [Open Build Service](https://build.opensuse.org) (OBS) by
[openSUSE](https://www.opensuse.org). Includes the workflows definition file (`workflows.yml`) that defines
actions for pull request, push tag and commit events.

In addition it also includes any required spec file or Dockerfile, usually these
are adapted to OBS and can't be used outside the OBS context.
  07070100000013000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000002400000000elemental-cli-0.3.1/.obs/dockerfile   07070100000014000081A4000000000000000000000001645E367C00000546000000000000000000000000000000000000002F00000000elemental-cli-0.3.1/.obs/dockerfile/Dockerfile    # SPDX-License-Identifier: Apache-2.0
# Define the names/tags of the container
#!BuildTag: rancher/elemental-builder-image/5.3:latest
#!BuildTag: rancher/elemental-builder-image/5.3:%VERSION%
#!BuildTag: rancher/elemental-builder-image/5.3:%VERSION%-%RELEASE%
#

FROM suse/sle15:15.4

RUN zypper in -y elemental-cli xfsprogs parted e2fsprogs udev rsync grub2 dosfstools squashfs mtools xorriso lvm2

# Define labels according to https://en.opensuse.org/Building_derived_containers
# labelprefix=com.rancher.elemental
LABEL org.opencontainers.image.title="Rancher Elemental Builder"
LABEL org.opencontainers.image.description="Provides Elemental Client and required dependencies for installation media building"
LABEL org.opencontainers.image.version="%VERSION%"
LABEL org.opencontainers.image.url="https://github.com/rancher/elemental-cli"
LABEL org.opencontainers.image.created="%BUILDTIME%"
LABEL org.opencontainers.image.vendor="SUSE LLC"
LABEL org.opensuse.reference="%%IMG_REPO%%/rancher/elemental-builder-image/5.3"
LABEL org.openbuildservice.disturl="%DISTURL%"
LABEL com.suse.supportlevel="techpreview"
# endlabelprefix

# Fix for blkid only using udev on opensuse
RUN echo "EVALUATE=scan" >> /etc/blkid.conf

# Save some space
RUN zypper clean --all && \
    rm -rf /var/log/update* && \
    >/var/log/lastlog && \
    rm -rf /boot/vmlinux*
  07070100000015000081A4000000000000000000000001645E367C0000006E000000000000000000000000000000000000003100000000elemental-cli-0.3.1/.obs/dockerfile/_constraints  <constraints>
  <hardware>
    <disk>
      <size unit="G">10</size>
    </disk>
  </hardware>
</constraints>
  07070100000016000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000002200000000elemental-cli-0.3.1/.obs/specfile 07070100000017000081A4000000000000000000000001645E367C000007BD000000000000000000000000000000000000003500000000elemental-cli-0.3.1/.obs/specfile/elemental-cli.spec  #
# spec file for package elemental-cli
#
# Copyright (c) 2022 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via http://bugs.opensuse.org/
#


Name:           elemental-cli
Version:        0
Release:        0
Summary:        The command line client for Elemental
License:        Apache-2.0
Group:          System/Management
Url:            https://github.com/rancher-sandbox/%{name}
Source:         %{name}-%{version}.tar
Source1:        %{name}.obsinfo

Requires:       dosfstools
Requires:       e2fsprogs
# for blkdeactivate
Requires: lvm2
Requires:       parted
Requires:       rsync
Requires:       udev
Requires:       xfsprogs

Recommends:     xorriso

BuildRequires:  golang(API) >= 1.16
BuildRequires:  golang-packaging
BuildRequires:  xz

BuildRoot:      %{_tmppath}/%{name}-%{version}-build
%{go_provides}

%description
This package provides a universal command line client to access
Elemental functionality

%prep
%setup -q
cp %{S:1} .

%build
export GIT_TAG=`echo "%{version}" | cut -d "+" -f 1`
GIT_COMMIT=$(cat %{name}.obsinfo | grep commit: | cut -d" " -f 2)
export GIT_COMMIT=${GIT_COMMIT:0:8}
MTIME=$(cat %{name}.obsinfo | grep mtime: | cut -d" " -f 2)
export COMMITDATE=$(date -d @${MTIME} +%Y%m%d)
make build


%install
mkdir -p %{buildroot}%{_bindir}
install -m755 bin/elemental %{buildroot}%{_bindir}

%files
%defattr(-,root,root,-)
%license LICENSE
%{_bindir}/*

%changelog
   07070100000018000081A4000000000000000000000001645E367C000004AB000000000000000000000000000000000000002700000000elemental-cli-0.3.1/.obs/workflows.yml    push_workflow:
  steps:
    - trigger_services:
        project: isv:Rancher:Elemental:Dev
        package: elemental-cli
    - trigger_services:
        project: isv:Rancher:Elemental:Dev:Teal53
        package: builder-image
  filters:
    branches:
      only:
        - main
    event: push

tag_workflow:
  steps:
    - trigger_services:
        project: isv:Rancher:Elemental:Staging
        package: elemental-cli
    - trigger_services:
        project: isv:Rancher:Elemental:Dev
        package: elemental-cli
    - trigger_services:
        project: isv:Rancher:Elemental:Staging:Teal53
        package: builder-image
    - trigger_services:
        project: isv:Rancher:Elemental:Dev:Teal53
        package: builder-image
  filters:
    event: tag_push

pr_workflow:
  steps:
    - branch_package:
        source_project: isv:Rancher:Elemental:Dev
        source_package: elemental-cli
        target_project: isv:Rancher:Elemental:PR
    - branch_package:
        source_project: isv:Rancher:Elemental:Dev:Teal53
        source_package: builder-image
        target_project: isv:Rancher:Elemental:PR:Teal53
  filters:
    event: pull_request
    branches:
      only:
        - main
 07070100000019000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000002100000000elemental-cli-0.3.1/.updatecli.d  0707010000001A000081A4000000000000000000000001645E367C000006D9000000000000000000000000000000000000003500000000elemental-cli-0.3.1/.updatecli.d/golang-version.yaml  name: Elemental CLI update

actions:
  pull-request:
    title: Bump Go version to {{ source "goversion" }}
    kind: github/pullrequest
    scmid: ci
    spec:
      parent: true

scms:
  ci:
    kind: github
    spec:
      user: "Elemental CI [bot]"
      email: elemental@suse.de
      owner: elemental-ci
      repository: elemental-cli
      token: '{{ requiredEnv "ELEMENTAL_BOT_GITHUB_TOKEN" }}'
      username: 'elemental-ci-bot'
      branch: "main"

sources:
  gomod:
    dependson:
      - goversion
    name: Update go.mod
    scmid: ci
    kind: shell
    spec:
      command: |
        go mod edit -go={{ source "goversion" }}
        go mod tidy
        go mod vendor
        cat go.mod
      environments:
        - name: PATH
        - name: GOPATH
  goversion:
    name: Get latest major Go release
    kind: githubrelease
    transformers:
      - find: 1\.(\d*)
    spec:
      owner: golang
      repository: go
      token: '{{ requiredEnv "ELEMENTAL_BOT_GITHUB_TOKEN" }}'
      username: 'elemental-ci-bot'
      versionfilter:
        kind: regex
        pattern: go1\.(\d*)\.(\d*)$

conditions:
  dockerTag:
      name: Is docker image golang:{{ source "goversion" }} published
      kind: dockerimage
      spec:
          image: golang
          tag: '{{ source "goversion" }}-alpine'
      sourceid: goversion

targets:
  go.mod:
    name: '[go.mod] Update Golang version to {{ source "goversion" }}'
    kind: file
    spec:
        file: go.mod
    scmid: ci
    sourceid: gomod
  Dockerfile:
    name: "Update the value of ARG GO_VERSION in the Dockerfile"
    sourceid: goversion
    scmid: ci
    kind: dockerfile
    spec:
      file: Dockerfile
      instruction:
        keyword: "ARG"
        matcher: "GO_VERSION"
   0707010000001B000081A4000000000000000000000001645E367C0000008B000000000000000000000000000000000000001F00000000elemental-cli-0.3.1/CODEOWNERS    # These owners will be the default owners for everything in
# the repo. Unless a later match takes precedence.

*       @rancher/elemental
 0707010000001C000081A4000000000000000000000001645E367C0000067A000000000000000000000000000000000000001F00000000elemental-cli-0.3.1/Dockerfile    ARG GO_VERSION=1.20
ARG COSIGN_VERSION=1.4.1-5
ARG LEAP_VERSION=15.4

FROM quay.io/costoolkit/releases-green:cosign-toolchain-$COSIGN_VERSION AS cosign-bin

FROM golang:${GO_VERSION}-alpine as elemental-bin
ENV CGO_ENABLED=0
WORKDIR /src/
# Add specific dirs to the image so cache is not invalidated when modifying non go files
ADD go.mod .
ADD go.sum .
RUN go mod download
ADD cmd cmd
ADD internal internal
ADD tests tests
ADD pkg pkg
ADD main.go .
# Set arg/env after go mod download, otherwise we invalidate the cached layers due to the commit changing easily
ARG ELEMENTAL_VERSION=0.0.1
ARG ELEMENTAL_COMMIT=""
ENV ELEMENTAL_VERSION=${ELEMENTAL_VERSION}
ENV ELEMENTAL_COMMIT=${ELEMENTAL_COMMIT}
RUN go build \
    -ldflags "-w -s \
    -X github.com/rancher/elemental-cli/internal/version.version=$ELEMENTAL_VERSION \
    -X github.com/rancher/elemental-cli/internal/version.gitCommit=$ELEMENTAL_COMMIT" \
    -o /usr/bin/elemental

FROM opensuse/leap:$LEAP_VERSION AS elemental
# This helps invalidate the cache on each build so the following steps are really run again getting the latest packages
# versions, as long as the elemental commit has changed
ARG ELEMENTAL_COMMIT=""
ENV ELEMENTAL_COMMIT=${ELEMENTAL_COMMIT}
RUN zypper ref && zypper dup -y
RUN zypper ref && zypper in -y xfsprogs parted util-linux-systemd e2fsprogs util-linux udev rsync grub2 dosfstools grub2-x86_64-efi squashfs mtools xorriso lvm2
COPY --from=elemental-bin /usr/bin/elemental /usr/bin/elemental
COPY --from=cosign-bin /usr/bin/cosign /usr/bin/cosign
# Fix for blkid only using udev on opensuse
RUN echo "EVALUATE=scan" >> /etc/blkid.conf
ENTRYPOINT ["/usr/bin/elemental"]
  0707010000001D000081A4000000000000000000000001645E367C00002C5E000000000000000000000000000000000000001C00000000elemental-cli-0.3.1/LICENSE   
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
  0707010000001E000081A4000000000000000000000001645E367C000008A8000000000000000000000000000000000000001D00000000elemental-cli-0.3.1/Makefile  GIT_COMMIT ?= $(shell git rev-parse HEAD)
GIT_COMMIT_SHORT ?= $(shell git rev-parse --short HEAD)
GIT_TAG ?= $(shell git describe --abbrev=0 --tags 2>/dev/null || echo "v0.0.1" )

PKG        := ./...
LDFLAGS    := -w -s
LDFLAGS += -X "github.com/rancher/elemental-cli/internal/version.version=${GIT_TAG}"
LDFLAGS += -X "github.com/rancher/elemental-cli/internal/version.gitCommit=${GIT_COMMIT}"


GINKGO?=$(shell which ginkgo 2> /dev/null)
ifeq ("$(GINKGO)","")
GINKGO="/usr/bin/ginkgo"
endif

$(GINKGO):
	@echo "'ginkgo' not found."
	@exit 1

build:
	go build -ldflags '$(LDFLAGS)' -o bin/elemental

docker_build:
	DOCKER_BUILDKIT=1 docker build --build-arg ELEMENTAL_VERSION=${GIT_TAG} --build-arg ELEMENTAL_COMMIT=${GIT_COMMIT} --target elemental -t elemental-cli:${GIT_TAG}-${GIT_COMMIT_SHORT} .

vet:
	go vet ${PKG}

fmt:
ifneq ($(shell go fmt ${PKG}),)
	@echo "Please commit the changes from 'make fmt'"
	@exit 1
else
	@echo "All files formatted"
	@exit 0
endif

test_deps:
	go mod download
	go install github.com/onsi/gomega/...
	go install github.com/onsi/ginkgo/v2/ginkgo

test: $(GINKGO)
	ginkgo run --label-filter '!root' --fail-fast --slow-spec-threshold 30s --race --covermode=atomic --coverprofile=coverage.txt --coverpkg=github.com/rancher/elemental-cli/... -p -r ${PKG}

test_root: $(GINKGO)
ifneq ($(shell id -u), 0)
	@echo "This tests require root/sudo to run."
	@exit 1
else
	ginkgo run --label-filter root --fail-fast --slow-spec-threshold 30s --race --covermode=atomic --coverprofile=coverage_root.txt --coverpkg=github.com/rancher/elemental-cli/... -procs=1 -r ${PKG}
endif

# Useful test run for local dev. It does not run tests that require root and it does not run tests that require systemctl checks
# which results in a escalation prompt for privileges. This can block a run until a password or the prompt is cancelled
test_no_root_no_systemctl:
	ginkgo run --label-filter '!root && !systemctl' --fail-fast --slow-spec-threshold 30s --race --covermode=atomic --coverprofile=coverage.txt --coverpkg=github.com/rancher/elemental-cli/... -p -r ${PKG}


license-check:
	@.github/license_check.sh

build_docs:
	cd docs && go run generate_docs.go

lint: fmt vet

all: build_docs lint test build
0707010000001F000081A4000000000000000000000001645E367C000000A1000000000000000000000000000000000000001E00000000elemental-cli-0.3.1/README.md See [docs](docs/elemental.md) for more information
See [Exit codes](docs/elemental_exit-codes.md) for more information about possible exit codes of elemental-cli   07070100000020000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000001800000000elemental-cli-0.3.1/cmd   07070100000021000081A4000000000000000000000001645E367C000016C7000000000000000000000000000000000000002500000000elemental-cli-0.3.1/cmd/build-iso.go  /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cmd

import (
	"fmt"
	"os/exec"

	"github.com/spf13/cobra"
	"github.com/spf13/viper"
	"k8s.io/mount-utils"

	"github.com/rancher/elemental-cli/cmd/config"
	"github.com/rancher/elemental-cli/pkg/action"
	elementalError "github.com/rancher/elemental-cli/pkg/error"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	"github.com/rancher/elemental-cli/pkg/utils"
)

// NewBuildISO returns a new instance of the buid-iso subcommand and appends it to
// the root command. requireRoot is to initiate it with or without the CheckRoot
// pre-run check. This method is mostly used for testing purposes.
func NewBuildISO(root *cobra.Command, addCheckRoot bool) *cobra.Command {
	c := &cobra.Command{
		Use:   "build-iso SOURCE",
		Short: "Build bootable installation media ISOs",
		Long: "Build bootable installation media ISOs\n\n" +
			"SOURCE - should be provided as uri in following format <sourceType>:<sourceName>\n" +
			"    * <sourceType> - might be [\"dir\", \"file\", \"oci\", \"docker\", \"channel\"], as default is \"docker\"\n" +
			"    * <sourceName> - is path to file or directory, image name with tag version or channel name",
		Args: cobra.MaximumNArgs(1),
		PreRunE: func(cmd *cobra.Command, args []string) error {
			if addCheckRoot {
				return CheckRoot()
			}
			return nil
		},
		RunE: func(cmd *cobra.Command, args []string) error {
			path, err := exec.LookPath("mount")
			if err != nil {
				return elementalError.NewFromError(err, elementalError.StatFile)
			}
			mounter := mount.New(path)

			cfg, err := config.ReadConfigBuild(viper.GetString("config-dir"), cmd.Flags(), mounter)
			if err != nil {
				cfg.Logger.Errorf("Error reading config: %s\n", err)
				return elementalError.NewFromError(err, elementalError.ReadingBuildConfig)
			}

			flags := cmd.Flags()
			err = validateCosignFlags(cfg.Logger, flags)
			if err != nil {
				return elementalError.NewFromError(err, elementalError.CosignWrongFlags)
			}

			// Set this after parsing of the flags, so it fails on parsing and prints usage properly
			cmd.SilenceUsage = true
			cmd.SilenceErrors = true // Do not propagate errors down the line, we control them
			spec, err := config.ReadBuildISO(cfg, flags)
			if err != nil {
				cfg.Logger.Errorf("invalid install command setup %v", err)
				return elementalError.NewFromError(err, elementalError.ReadingSpecConfig)
			}

			if len(args) == 1 {
				imgSource, err := v1.NewSrcFromURI(args[0])
				if err != nil {
					cfg.Logger.Errorf("not a valid rootfs source image argument: %s", args[0])
					return elementalError.NewFromError(err, elementalError.IdentifySource)
				}
				spec.RootFS = []*v1.ImageSource{imgSource}
			} else if len(spec.RootFS) == 0 {
				errmsg := "rootfs source image for building ISO was not provided"
				cfg.Logger.Errorf(errmsg)
				return elementalError.New(errmsg, elementalError.NoSourceProvided)
			}

			// Repos and overlays can't be unmarshaled directly as they require
			// to be merged on top and flags do not match any config value key
			oRootfs, _ := flags.GetString("overlay-rootfs")
			oUEFI, _ := flags.GetString("overlay-uefi")
			oISO, _ := flags.GetString("overlay-iso")

			if oRootfs != "" {
				if ok, err := utils.Exists(cfg.Fs, oRootfs); ok {
					spec.RootFS = append(spec.RootFS, v1.NewDirSrc(oRootfs))
				} else {
					msg := fmt.Sprintf("Invalid path '%s': %v", oRootfs, err)
					cfg.Logger.Errorf(msg)
					return elementalError.New(msg, elementalError.StatFile)
				}
			}
			if oUEFI != "" {
				if ok, err := utils.Exists(cfg.Fs, oUEFI); ok {
					spec.UEFI = append(spec.UEFI, v1.NewDirSrc(oUEFI))
				} else {
					msg := fmt.Sprintf("Invalid path '%s': %v", oUEFI, err)
					cfg.Logger.Errorf(msg)
					return elementalError.New(msg, elementalError.StatFile)
				}
			}
			if oISO != "" {
				if ok, err := utils.Exists(cfg.Fs, oISO); ok {
					spec.Image = append(spec.Image, v1.NewDirSrc(oISO))
				} else {
					msg := fmt.Sprintf("Invalid path '%s': %v", oISO, err)
					cfg.Logger.Errorf(msg)
					return elementalError.New(msg, elementalError.StatFile)
				}
			}

			buildISO := action.NewBuildISOAction(cfg, spec)
			return buildISO.ISORun()
		},
	}

	firmType := newEnumFlag([]string{v1.EFI, v1.BIOS}, v1.EFI)

	root.AddCommand(c)
	c.Flags().StringP("name", "n", "", "Basename of the generated ISO file")
	c.Flags().StringP("output", "o", "", "Output directory (defaults to current directory)")
	c.Flags().Bool("date", false, "Adds a date suffix into the generated ISO file")
	c.Flags().String("overlay-rootfs", "", "Path of the overlayed rootfs data")
	c.Flags().String("overlay-uefi", "", "Path of the overlayed uefi data")
	c.Flags().String("overlay-iso", "", "Path of the overlayed iso data")
	c.Flags().String("label", "", "Label of the ISO volume")
	c.Flags().Bool("bootloader-in-rootfs", false, "Fetch ISO bootloader binaries from the rootfs")
	c.Flags().Var(firmType, "firmware", "Firmware to install for: 'efi' or 'bios'. (defaults to 'efi')")
	_ = c.Flags().MarkDeprecated("firmware", "'firmware' is deprecated. 'bios' firmware support is deprecated.")
	addPlatformFlags(c)
	addCosignFlags(c)
	addSquashFsCompressionFlags(c)
	addLocalImageFlag(c)
	return c
}

// register the subcommand into rootCmd
var _ = NewBuildISO(rootCmd, true)
 07070100000022000081A4000000000000000000000001645E367C00000A8E000000000000000000000000000000000000002A00000000elemental-cli-0.3.1/cmd/build-iso_test.go /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cmd

import (
	"bytes"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/spf13/viper"
)

var _ = Describe("BuidISO", Label("iso", "cmd"), func() {
	var buf *bytes.Buffer
	BeforeEach(func() {
		rootCmd = NewRootCmd()
		_ = NewBuildISO(rootCmd, false)
		buf = new(bytes.Buffer)
		rootCmd.SetOut(buf)
		rootCmd.SetErr(buf)
	})
	AfterEach(func() {
		viper.Reset()
	})
	It("Errors out setting consign-key without setting cosign", Label("flags"), func() {
		_, _, err := executeCommandC(rootCmd, "build-iso", "--cosign-key", "pubKey.url")
		Expect(err).ToNot(BeNil())
		Expect(buf.String()).To(ContainSubstring("Usage:"))
		Expect(err.Error()).To(ContainSubstring("'cosign-key' requires 'cosign' option to be enabled"))
	})
	It("Errors out if no rootfs sources are defined", Label("flags"), func() {
		_, _, err := executeCommandC(rootCmd, "build-iso")
		Expect(err).ToNot(BeNil())
		Expect(err.Error()).To(ContainSubstring("rootfs source image for building ISO was not provided"))
	})
	It("Errors out if rootfs is a non valid argument", Label("flags"), func() {
		_, _, err := executeCommandC(rootCmd, "build-iso", "/no/image/reference")
		Expect(err).ToNot(BeNil())
		Expect(err.Error()).To(ContainSubstring("invalid image reference"))
	})
	It("Errors out if overlay roofs path does not exist", Label("flags"), func() {
		_, _, err := executeCommandC(
			rootCmd, "build-iso", "system/cos", "--overlay-rootfs", "/nonexistingpath",
		)
		Expect(err).ToNot(BeNil())
		Expect(err.Error()).To(ContainSubstring("Invalid path"))
	})
	It("Errors out if overlay uefi path does not exist", Label("flags"), func() {
		_, _, err := executeCommandC(
			rootCmd, "build-iso", "someimage:latest", "--overlay-uefi", "/nonexistingpath",
		)
		Expect(err).ToNot(BeNil())
		Expect(err.Error()).To(ContainSubstring("Invalid path"))
	})
	It("Errors out if overlay iso path does not exist", Label("flags"), func() {
		_, _, err := executeCommandC(
			rootCmd, "build-iso", "some/image:latest", "--overlay-iso", "/nonexistingpath",
		)
		Expect(err).ToNot(BeNil())
		Expect(err.Error()).To(ContainSubstring("Invalid path"))
	})
})
  07070100000023000081A4000000000000000000000001645E367C0000088A000000000000000000000000000000000000002600000000elemental-cli-0.3.1/cmd/cloud-init.go /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cmd

import (
	"io"
	"os"

	"k8s.io/mount-utils"

	"github.com/rancher/elemental-cli/cmd/config"
	elementalError "github.com/rancher/elemental-cli/pkg/error"

	"github.com/mudler/yip/pkg/schema"
	"github.com/spf13/cobra"
	"github.com/spf13/viper"
)

func NewCloudInitCmd(root *cobra.Command) *cobra.Command {
	c := &cobra.Command{
		Use:   "cloud-init",
		Short: "Run cloud-init",
		Args:  cobra.MinimumNArgs(1),
		PreRun: func(cmd *cobra.Command, args []string) {
			_ = viper.BindPFlags(cmd.Flags())
		},
		RunE: func(cmd *cobra.Command, args []string) error {
			cfg, err := config.ReadConfigRun(viper.GetString("config-dir"), cmd.Flags(), &mount.FakeMounter{})
			if err != nil {
				return elementalError.NewFromError(err, elementalError.ReadingRunConfig)
			}

			stage, _ := cmd.Flags().GetString("stage")
			dot, _ := cmd.Flags().GetBool("dotnotation")

			fromStdin := len(args) == 1 && args[0] == "-"

			if dot {
				cfg.CloudInitRunner.SetModifier(schema.DotNotationModifier)
			}

			if fromStdin {
				std, err := io.ReadAll(os.Stdin)
				if err != nil {
					return elementalError.NewFromError(err, elementalError.ReadFile)
				}

				args = []string{string(std)}
			}

			err = cfg.CloudInitRunner.Run(stage, args...)
			return elementalError.NewFromError(err, elementalError.CloudInitRunStage)
		},
	}
	root.AddCommand(c)
	c.PersistentFlags().StringP("stage", "s", "default", "Stage to apply")
	c.PersistentFlags().BoolP("dotnotation", "d", false, "Parse input in dotnotation ( e.g. `stages.foo.name=..` ) ")
	return c
}

// register the subcommand into rootCmd
var _ = NewCloudInitCmd(rootCmd)
  07070100000024000081A4000000000000000000000001645E367C00000687000000000000000000000000000000000000002B00000000elemental-cli-0.3.1/cmd/cloud-init_test.go    /*
Copyright © 2021 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cmd

import (
	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

var _ = Describe("cloud-init", Label("cloud-init", "cmd"), func() {
	Describe("execution", func() {
		When("invoked with inline yaml", Label("inline", "yaml"), func() {
			BeforeEach(func() {
				rootCmd = NewRootCmd()
				_ = NewCloudInitCmd(rootCmd)
			})

			It("executes command correctly", func() {
				_, out, err := executeCommandC(
					rootCmd,
					"cloud-init",
					"-s",
					"tests",
					"-d",
					"'stages.tests[0].commands[0]=\"echo foobarz\"'",
				)
				Expect(err).ToNot(HaveOccurred())
				Expect(out).To(ContainSubstring("foobarz"))
			})

			It("fails when a malformed yaml is given", Label("args"), func() {
				_, _, err := executeCommandC(
					rootCmd,
					"cloud-init",
					"-s",
					"tests",
					"-d",
					"'stages.tests=foo'",
				)
				Expect(err).To(HaveOccurred())
			})

			It("ignores empty input", Label("args"), func() {
				_, _, err := executeCommandC(
					rootCmd,
					"cloud-init",
					"-s",
					"tests",
					"-",
				)
				Expect(err).ToNot(HaveOccurred())
			})
		})
	})
})
 07070100000025000081A4000000000000000000000001645E367C000002F6000000000000000000000000000000000000002A00000000elemental-cli-0.3.1/cmd/cmd_suite_test.go /*
Copyright © 2021 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cmd

import (
	"testing"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

func TestWhitebox(t *testing.T) {
	RegisterFailHandler(Fail)
	RunSpecs(t, "CLI whitebox test suite")
}
  07070100000026000081A4000000000000000000000001645E367C00000501000000000000000000000000000000000000002800000000elemental-cli-0.3.1/cmd/command_test.go   /*
Copyright © 2021 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cmd

import (
	"io/ioutil"
	"os"

	"github.com/spf13/cobra"
)

func executeCommandC(cmd *cobra.Command, args ...string) (c *cobra.Command, output string, err error) {
	// Set args to command
	cmd.SetArgs(args)
	// store old stdout
	oldStdout := os.Stdout
	r, w, _ := os.Pipe()
	// Change stdout to our pipe
	os.Stdout = w
	// run the command
	c, err = cmd.ExecuteC()
	if err != nil {
		// Remember to restore stdout!
		os.Stdout = oldStdout
		return nil, "", err
	}
	err = w.Close()
	if err != nil {
		// Remember to restore stdout!
		os.Stdout = oldStdout
		return nil, "", err
	}
	// Read output from our pipe
	out, _ := ioutil.ReadAll(r)
	// restore stdout
	os.Stdout = oldStdout

	return c, string(out), nil
}
   07070100000027000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000001F00000000elemental-cli-0.3.1/cmd/config    07070100000028000081A4000000000000000000000001645E367C000029E3000000000000000000000000000000000000002900000000elemental-cli-0.3.1/cmd/config/config.go  /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package config

import (
	"fmt"
	"io"
	"io/fs"
	"os"
	"path/filepath"
	"reflect"
	"strings"

	"github.com/mitchellh/mapstructure"
	"github.com/sanity-io/litter"
	"github.com/sirupsen/logrus"
	"github.com/spf13/pflag"
	"github.com/spf13/viper"
	"k8s.io/mount-utils"

	"github.com/rancher/elemental-cli/internal/version"
	"github.com/rancher/elemental-cli/pkg/config"
	"github.com/rancher/elemental-cli/pkg/constants"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	"github.com/rancher/elemental-cli/pkg/utils"
)

var decodeHook = viper.DecodeHook(
	mapstructure.ComposeDecodeHookFunc(
		UnmarshalerHook(),
		mapstructure.StringToTimeDurationHookFunc(),
		mapstructure.StringToSliceHookFunc(","),
	),
)

type Unmarshaler interface {
	CustomUnmarshal(interface{}) (bool, error)
}

func UnmarshalerHook() mapstructure.DecodeHookFunc {
	return func(from reflect.Value, to reflect.Value) (interface{}, error) {
		// get the destination object address if it is not passed by reference
		if to.CanAddr() {
			to = to.Addr()
		}
		// If the destination implements the unmarshaling interface
		u, ok := to.Interface().(Unmarshaler)
		if !ok {
			return from.Interface(), nil
		}
		// If it is nil and a pointer, create and assign the target value first
		if to.IsNil() && to.Type().Kind() == reflect.Ptr {
			to.Set(reflect.New(to.Type().Elem()))
			u = to.Interface().(Unmarshaler)
		}
		// Call the custom unmarshaling method
		cont, err := u.CustomUnmarshal(from.Interface())
		if cont {
			// Continue with the decoding stack
			return from.Interface(), err
		}
		// Decoding finalized
		return to.Interface(), err
	}
}

// setDecoder sets ZeroFields mastructure attribute to true
func setDecoder(config *mapstructure.DecoderConfig) {
	// Make sure we zero fields before applying them, this is relevant for slices
	// so we do not merge with any already present value and directly apply whatever
	// we got form configs.
	config.ZeroFields = true
}

// BindGivenFlags binds to viper only passed flags, ignoring any non provided flag
func bindGivenFlags(vp *viper.Viper, flagSet *pflag.FlagSet) {
	if flagSet != nil {
		flagSet.VisitAll(func(f *pflag.Flag) {
			if f.Changed {
				_ = vp.BindPFlag(f.Name, f)
			}
		})
	}
}

func ReadConfigBuild(configDir string, flags *pflag.FlagSet, mounter mount.Interface) (*v1.BuildConfig, error) {
	logger := v1.NewLogger()

	cfg := config.NewBuildConfig(
		config.WithLogger(logger),
		config.WithMounter(mounter),
		config.WithOCIImageExtractor(),
	)

	configLogger(cfg.Logger, cfg.Fs)
	if configDir == "" {
		configDir = "."
		cfg.Logger.Info("reading configuration from current directory")
	} else {
		cfg.Logger.Infof("reading configuration from '%s'", configDir)
	}

	// merge yaml config files on top of default runconfig
	if exists, _ := utils.Exists(cfg.Fs, filepath.Join(configDir, "manifest.yaml")); exists {
		viper.AddConfigPath(configDir)
		viper.SetConfigType("yaml")
		viper.SetConfigName("manifest")
		// If a config file is found, read it in.
		err := viper.MergeInConfig()
		if err != nil {
			cfg.Logger.Error("error merging config files: %s", err)
			return cfg, err
		}
	}

	// Bind buildconfig flags
	bindGivenFlags(viper.GetViper(), flags)
	// merge environment variables on top for rootCmd
	viperReadEnv(viper.GetViper(), "BUILD", constants.GetBuildKeyEnvMap())

	// unmarshal all the vars into the config object
	err := viper.Unmarshal(cfg, setDecoder, decodeHook)
	if err != nil {
		cfg.Logger.Warnf("error unmarshalling config: %s", err)
	}

	err = cfg.Sanitize()
	cfg.Logger.Debugf("Full config loaded: %s", litter.Sdump(cfg))
	return cfg, err
}

func ReadConfigRun(configDir string, flags *pflag.FlagSet, mounter mount.Interface) (*v1.RunConfig, error) {
	cfg := config.NewRunConfig(
		config.WithLogger(v1.NewLogger()),
		config.WithMounter(mounter),
		config.WithOCIImageExtractor(),
	)
	configLogger(cfg.Logger, cfg.Fs)
	if configDir == "" {
		configDir = constants.ConfigDir
	}
	cfg.Logger.Infof("reading configuration form '%s'", configDir)

	const cfgDefault = "/etc/os-release"
	if exists, _ := utils.Exists(cfg.Fs, cfgDefault); exists {
		viper.SetConfigFile(cfgDefault)
		viper.SetConfigType("env")

		err := viper.MergeInConfig()
		if err != nil {
			cfg.Logger.Errorf("error merging os-release file: %s", err)
			return cfg, err
		}
	}

	// merge yaml config files on top of default runconfig
	if exists, _ := utils.Exists(cfg.Fs, filepath.Join(configDir, "config.yaml")); exists {
		viper.AddConfigPath(configDir)
		viper.SetConfigType("yaml")
		viper.SetConfigName("config")
		// If a config file is found, read it in.
		err := viper.MergeInConfig()
		if err != nil {
			cfg.Logger.Errorf("error merging config files: %s", err)
			return cfg, err
		}
	}

	// Load extra config files on configdir/config.d/ so we can override config values
	cfgExtra := filepath.Join(configDir, "config.d")
	if exists, _ := utils.Exists(cfg.Fs, cfgExtra); exists {
		viper.AddConfigPath(cfgExtra)
		err := filepath.WalkDir(cfgExtra, func(path string, d fs.DirEntry, err error) error {
			if !d.IsDir() && filepath.Ext(d.Name()) == ".yaml" {
				viper.SetConfigType("yaml")
				viper.SetConfigName(strings.TrimSuffix(d.Name(), ".yaml"))
				return viper.MergeInConfig()
			}
			return nil
		})

		if err != nil {
			cfg.Logger.Errorf("error merging extra config files: %s", err)
			return cfg, err
		}
	}

	// Bind runconfig flags
	bindGivenFlags(viper.GetViper(), flags)
	// merge environment variables on top for rootCmd
	viperReadEnv(viper.GetViper(), "", constants.GetRunKeyEnvMap())

	// unmarshal all the vars into the RunConfig object
	err := viper.Unmarshal(cfg, setDecoder, decodeHook)
	if err != nil {
		cfg.Logger.Warnf("error unmarshalling RunConfig: %s", err)
	}

	err = cfg.Sanitize()
	cfg.Logger.Debugf("Full config loaded: %s", litter.Sdump(cfg))
	return cfg, err
}

func ReadInstallSpec(r *v1.RunConfig, flags *pflag.FlagSet) (*v1.InstallSpec, error) {
	install := config.NewInstallSpec(r.Config)
	vp := viper.Sub("install")
	if vp == nil {
		vp = viper.New()
	}
	// Bind install cmd flags
	bindGivenFlags(vp, flags)
	// Bind install env vars
	viperReadEnv(vp, "INSTALL", constants.GetInstallKeyEnvMap())

	err := vp.Unmarshal(install, setDecoder, decodeHook)
	if err != nil {
		r.Logger.Warnf("error unmarshalling InstallSpec: %s", err)
	}
	err = install.Sanitize()
	r.Logger.Debugf("Loaded install spec: %s", litter.Sdump(install))
	return install, err
}

func ReadResetSpec(r *v1.RunConfig, flags *pflag.FlagSet) (*v1.ResetSpec, error) {
	reset, err := config.NewResetSpec(r.Config)
	if err != nil {
		return nil, fmt.Errorf("failed initializing reset spec: %v", err)
	}
	vp := viper.Sub("reset")
	if vp == nil {
		vp = viper.New()
	}
	// Bind reset cmd flags
	bindGivenFlags(vp, flags)
	// Bind reset env vars
	viperReadEnv(vp, "RESET", constants.GetResetKeyEnvMap())

	err = vp.Unmarshal(reset, setDecoder, decodeHook)
	if err != nil {
		r.Logger.Warnf("error unmarshalling ResetSpec: %s", err)
	}
	err = reset.Sanitize()
	r.Logger.Debugf("Loaded reset spec: %s", litter.Sdump(reset))
	return reset, err
}

func ReadUpgradeSpec(r *v1.RunConfig, flags *pflag.FlagSet) (*v1.UpgradeSpec, error) {
	upgrade, err := config.NewUpgradeSpec(r.Config)
	if err != nil {
		return nil, fmt.Errorf("failed initializing upgrade spec: %v", err)
	}
	vp := viper.Sub("upgrade")
	if vp == nil {
		vp = viper.New()
	}
	// Bind upgrade cmd flags
	bindGivenFlags(vp, flags)
	// Bind upgrade env vars
	viperReadEnv(vp, "UPGRADE", constants.GetUpgradeKeyEnvMap())

	err = vp.Unmarshal(upgrade, setDecoder, decodeHook)
	if err != nil {
		r.Logger.Warnf("error unmarshalling UpgradeSpec: %s", err)
	}
	err = upgrade.Sanitize()
	r.Logger.Debugf("Loaded upgrade UpgradeSpec: %s", litter.Sdump(upgrade))
	return upgrade, err
}

func ReadBuildISO(b *v1.BuildConfig, flags *pflag.FlagSet) (*v1.LiveISO, error) {
	iso := config.NewISO()
	vp := viper.Sub("iso")
	if vp == nil {
		vp = viper.New()
	}
	// Bind build-iso cmd flags
	bindGivenFlags(vp, flags)
	// Bind build-iso env vars
	viperReadEnv(vp, "ISO", constants.GetISOKeyEnvMap())

	err := vp.Unmarshal(iso, setDecoder, decodeHook)
	if err != nil {
		b.Logger.Warnf("error unmarshalling LiveISO: %s", err)
	}
	err = iso.Sanitize()
	b.Logger.Debugf("Loaded LiveISO: %s", litter.Sdump(iso))
	return iso, err
}

func configLogger(log v1.Logger, vfs v1.FS) {
	// Set debug level
	if viper.GetBool("debug") {
		log.SetLevel(v1.DebugLevel())
	}

	// Set formatter so both file and stdout format are equal
	log.SetFormatter(&logrus.TextFormatter{
		ForceColors:      true,
		DisableColors:    false,
		DisableTimestamp: false,
		FullTimestamp:    true,
	})

	// Logfile
	logfile := viper.GetString("logfile")
	if logfile != "" {
		o, err := vfs.OpenFile(logfile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, fs.ModePerm)

		if err != nil {
			log.Errorf("Could not open %s for logging to file: %s", logfile, err.Error())
		}

		if viper.GetBool("quiet") { // if quiet is set, only set the log to the file
			log.SetOutput(o)
		} else { // else set it to both stdout and the file
			mw := io.MultiWriter(os.Stdout, o)
			log.SetOutput(mw)
		}
	} else { // no logfile
		if viper.GetBool("quiet") { // quiet is enabled so discard all logging
			log.SetOutput(io.Discard)
		} else { // default to stdout
			log.SetOutput(os.Stdout)
		}
	}

	v := version.Get()
	if log.GetLevel() == logrus.DebugLevel {
		log.Debugf("Starting elemental version %s on commit %s", v.Version, v.GitCommit)
	} else {
		log.Infof("Starting elemental version %s", v.Version)
	}
}

func viperReadEnv(vp *viper.Viper, prefix string, keyMap map[string]string) {
	// If we expect to override complex keys in the config, i.e. configs
	// that are nested, we probably need to manually do the env stuff
	// ourselves, as this will only match keys in the config root
	replacer := strings.NewReplacer("-", "_")
	vp.SetEnvKeyReplacer(replacer)

	if prefix == "" {
		prefix = "ELEMENTAL"
	} else {
		prefix = fmt.Sprintf("ELEMENTAL_%s", prefix)
	}

	// Manually bind keys to env variable if custom names are needed.
	for k, v := range keyMap {
		_ = vp.BindEnv(k, fmt.Sprintf("%s_%s", prefix, v))
	}
}
 07070100000029000081A4000000000000000000000001645E367C00003971000000000000000000000000000000000000002E00000000elemental-cli-0.3.1/cmd/config/config_test.go /*
Copyright © 2021 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package config_test

import (
	"bytes"
	"fmt"
	"os"
	"runtime"
	"strings"

	"github.com/sanity-io/litter"

	. "github.com/rancher/elemental-cli/cmd/config"

	"github.com/jaypipes/ghw/pkg/block"
	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/sirupsen/logrus"
	"github.com/spf13/pflag"
	"github.com/spf13/viper"
	"github.com/twpayne/go-vfs"
	"github.com/twpayne/go-vfs/vfst"

	"github.com/rancher/elemental-cli/pkg/constants"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	v1mock "github.com/rancher/elemental-cli/tests/mocks"
)

var _ = Describe("Config", Label("config"), func() {
	var mounter *v1mock.ErrorMounter

	BeforeEach(func() {
		mounter = &v1mock.ErrorMounter{}
	})
	AfterEach(func() {
		viper.Reset()
	})

	Context("From fixtures", func() {
		Describe("read all specs", Label("install"), func() {
			It("reads values correctly", func() {
				cfg, err := ReadConfigRun("../../tests/fixtures/simple/", nil, mounter)
				Expect(err).ShouldNot(HaveOccurred())

				Expect(cfg.Config.Cosign).To(BeTrue(), litter.Sdump(cfg))

				up, err := ReadUpgradeSpec(cfg, nil)
				Expect(err).Should(HaveOccurred(), litter.Sdump(cfg))

				Expect(up.GrubDefEntry).To(Equal("so"))
				Expect(up.Active.Size).To(Equal(uint(2000)), litter.Sdump(up))

				inst, err := ReadInstallSpec(cfg, nil)
				Expect(err).Should(HaveOccurred(), litter.Sdump(cfg))

				Expect(inst.GrubDefEntry).To(Equal("mockme"))
				Expect(inst.Active.Size).To(Equal(uint(2000)), litter.Sdump(up))
			})
		})
	})

	Describe("Build config with arch", Label("build"), func() {
		var flags *pflag.FlagSet
		BeforeEach(func() {
			flags = pflag.NewFlagSet("testflags", 1)
			flags.String("arch", "", "testing flag")
			flags.Set("arch", "arm64")
		})
		It("values filled if config path valid", Label("path", "values"), func() {
			cfg, err := ReadConfigBuild("../../tests/fixtures/config/", flags, mounter)
			Expect(err).To(BeNil())
			Expect(viper.GetString("name")).To(Equal("cOS-0"))
			Expect(cfg.Name).To(Equal("cOS-0"))
			hasSuffix := strings.HasSuffix(viper.ConfigFileUsed(), "config/manifest.yaml")
			Expect(hasSuffix).To(BeTrue())
			Expect(cfg.Platform.String()).To(Equal("linux/arm64"))
		})
	})

	Describe("Build config", Label("build"), func() {
		var flags *pflag.FlagSet
		BeforeEach(func() {
			flags = pflag.NewFlagSet("testflags", 1)
			flags.String("platform", "", "testing flag")
			flags.Set("platform", "linux/arm64")
		})
		It("values empty if config path not valid", Label("path", "values"), func() {
			cfg, err := ReadConfigBuild("/none/", flags, mounter)
			Expect(err).To(BeNil())
			Expect(viper.GetString("name")).To(Equal(""))
			Expect(cfg.Name).To(Equal("elemental"))
			Expect(cfg.Platform.String()).To(Equal("linux/arm64"))
		})
		It("values filled if config path valid", Label("path", "values"), func() {
			cfg, err := ReadConfigBuild("../../tests/fixtures/config/", flags, mounter)
			Expect(err).To(BeNil())
			Expect(viper.GetString("name")).To(Equal("cOS-0"))
			Expect(cfg.Name).To(Equal("cOS-0"))
			hasSuffix := strings.HasSuffix(viper.ConfigFileUsed(), "config/manifest.yaml")
			Expect(hasSuffix).To(BeTrue())
			Expect(cfg.Platform.String()).To(Equal("linux/arm64"))
		})

		It("overrides values with env values", Label("env", "values"), func() {
			_ = os.Setenv("ELEMENTAL_BUILD_NAME", "randomname")
			cfg, err := ReadConfigBuild("../../tests/fixtures/config/", flags, mounter)
			Expect(err).To(BeNil())
			Expect(cfg.Name).To(Equal("randomname"))
		})
		It("fails on bad yaml manifest file", func() {
			_, err := ReadConfigBuild("../../tests/fixtures/badconfig/", nil, mounter)
			Expect(err).Should(HaveOccurred())
		})
	})

	Describe("Read build specs", Label("build"), func() {
		var cfg *v1.BuildConfig
		var runner *v1mock.FakeRunner
		var fs vfs.FS
		var logger v1.Logger
		var mounter *v1mock.ErrorMounter
		var syscall *v1mock.FakeSyscall
		var client *v1mock.FakeHTTPClient
		var cloudInit *v1mock.FakeCloudInitRunner
		var cleanup func()
		var memLog *bytes.Buffer
		var err error

		BeforeEach(func() {
			runner = v1mock.NewFakeRunner()
			syscall = &v1mock.FakeSyscall{}
			mounter = v1mock.NewErrorMounter()
			client = &v1mock.FakeHTTPClient{}
			memLog = &bytes.Buffer{}
			logger = v1.NewBufferLogger(memLog)
			cloudInit = &v1mock.FakeCloudInitRunner{}

			fs, cleanup, err = vfst.NewTestFS(map[string]interface{}{})
			Expect(err).Should(BeNil())

			cfg, err = ReadConfigBuild("../../tests/fixtures/config/", nil, mounter)
			Expect(err).Should(BeNil())
			// From defaults
			Expect(cfg.Platform.String()).To(Equal("linux/amd64"))

			cfg.Fs = fs
			cfg.Runner = runner
			cfg.Logger = logger
			cfg.Mounter = mounter
			cfg.Syscall = syscall
			cfg.Client = client
			cfg.CloudInitRunner = cloudInit
		})
		AfterEach(func() {
			cleanup()
		})
		Describe("LiveISO spec", Label("iso"), func() {
			It("initiates a LiveISO spec", func() {
				iso, err := ReadBuildISO(cfg, nil)
				Expect(err).ShouldNot(HaveOccurred())

				// From config file
				Expect(iso.Image[0].Value()).To(Equal("recovery/cos-img:latest"))
				Expect(iso.Label).To(Equal("LIVE_LABEL"))
			})
		})
	})
	Describe("Run config", Label("run"), func() {
		var flags *pflag.FlagSet
		BeforeEach(func() {
			flags = pflag.NewFlagSet("testflags", 1)
			flags.Bool("cosign", false, "testing flag")
			flags.String("cosign-key", "", "testing flag")
			flags.Set("cosign", "true")
			flags.Set("cosign-key", "someOtherKey")
		})
		It("fails on bad yaml config file", func() {
			_, err := ReadConfigRun("../../tests/fixtures/badconfig/", nil, mounter)
			Expect(err).Should(HaveOccurred())

			_, err = ReadConfigRun("../../tests/fixtures/badextraconfig/", nil, mounter)
			Expect(err).Should(HaveOccurred())
		})
		It("uses defaults if no configs are provided", func() {
			cfg, err := ReadConfigRun("", nil, mounter)
			Expect(err).ShouldNot(HaveOccurred())
			Expect(cfg.Platform.String()).To(Equal(fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH)))
			// Uses given mounter
			Expect(cfg.Mounter == mounter).To(BeTrue())
			// Sets a RealRunner instance by default
			Expect(cfg.Runner != nil).To(BeTrue())
			_, ok := cfg.Runner.(*v1.RealRunner)
			Expect(ok).To(BeTrue())
		})
		It("uses provided configs and flags, flags have priority", func() {
			cfg, err := ReadConfigRun("../../tests/fixtures/config/", flags, mounter)
			Expect(err).To(BeNil())
			Expect(cfg.Cosign).To(BeTrue())
			// Flags overwrite the cosign-key set in config
			Expect(cfg.CosignPubKey == "someOtherKey").To(BeTrue())
			// Config.d overwrites the main config.yaml
			Expect(cfg.CloudInitPaths).To(Equal(append(constants.GetCloudInitPaths(), "some/other/path")))
		})
		It("sets log level debug based on debug flag", func() {
			// Default value
			cfg, err := ReadConfigRun("../../tests/fixtures/config/", nil, mounter)
			Expect(err).To(BeNil())
			debug := viper.GetBool("debug")
			Expect(cfg.Logger.GetLevel()).ToNot(Equal(logrus.DebugLevel))
			Expect(debug).To(BeFalse())

			// Set it via viper, like the flag
			viper.Set("debug", true)
			cfg, err = ReadConfigRun("../../tests/fixtures/config/", nil, mounter)
			Expect(err).To(BeNil())
			debug = viper.GetBool("debug")
			Expect(debug).To(BeTrue())
			Expect(cfg.Logger.GetLevel()).To(Equal(logrus.DebugLevel))
		})
	})
	Describe("Read runtime specs", Label("spec"), func() {
		var cfg *v1.RunConfig
		var runner *v1mock.FakeRunner
		var fs vfs.FS
		var logger v1.Logger
		var mounter *v1mock.ErrorMounter
		var syscall *v1mock.FakeSyscall
		var client *v1mock.FakeHTTPClient
		var cloudInit *v1mock.FakeCloudInitRunner
		var cleanup func()
		var memLog *bytes.Buffer
		var err error

		BeforeEach(func() {
			runner = v1mock.NewFakeRunner()
			syscall = &v1mock.FakeSyscall{}
			mounter = v1mock.NewErrorMounter()
			client = &v1mock.FakeHTTPClient{}
			memLog = &bytes.Buffer{}
			logger = v1.NewBufferLogger(memLog)
			cloudInit = &v1mock.FakeCloudInitRunner{}

			fs, cleanup, err = vfst.NewTestFS(map[string]interface{}{})
			Expect(err).Should(BeNil())

			cfg, err = ReadConfigRun("../../tests/fixtures/config/", nil, mounter)
			Expect(err).Should(BeNil())

			cfg.Fs = fs
			cfg.Runner = runner
			cfg.Logger = logger
			cfg.Mounter = mounter
			cfg.Syscall = syscall
			cfg.Client = client
			cfg.CloudInitRunner = cloudInit
		})
		AfterEach(func() {
			cleanup()
		})
		Describe("Read InstallSpec", Label("install"), func() {
			var flags *pflag.FlagSet

			BeforeEach(func() {
				flags = pflag.NewFlagSet("testflags", 1)
				flags.String("system.uri", "", "testing flag")
				flags.Set("system.uri", "docker:image/from:flag")
			})
			It("inits a default install spec if no configs are provided", func() {
				spec, err := ReadInstallSpec(cfg, nil)
				Expect(err).ShouldNot(HaveOccurred())
				Expect(spec.Target == "")
				Expect(spec.PartTable == v1.GPT)
				Expect(spec.Firmware == v1.BIOS)
				Expect(spec.NoFormat == false)
			})
			It("inits an install spec according to given configs", func() {
				err := os.Setenv("ELEMENTAL_INSTALL_TARGET", "/env/disk")
				Expect(err).ShouldNot(HaveOccurred())
				err = os.Setenv("ELEMENTAL_INSTALL_SYSTEM", "itwillbeignored")
				Expect(err).ShouldNot(HaveOccurred())
				err = os.Setenv("ELEMENTAL_INSTALL_CLOUD_INIT", "path/to/file1.yaml,/absolute/path/to/file2.yaml")
				Expect(err).ShouldNot(HaveOccurred())
				err = os.Setenv("ELEMENTAL_INSTALL_DISABLE_BOOT_ENTRY", "true")
				Expect(err).ShouldNot(HaveOccurred())

				spec, err := ReadInstallSpec(cfg, flags)
				Expect(err).ShouldNot(HaveOccurred())
				// Overwrites target from environment variables
				Expect(spec.Target == "/env/disk")
				// Overwrites system image, flags have priority over files and env vars
				Expect(spec.Active.Source.Value() == "image/from:flag")
				// Overwerites default value for DisableBootEntry from an env var
				Expect(spec.DisableBootEntry).To(BeTrue())
				// Uses recovery and no-format defined in confing.yaml
				Expect(spec.Recovery.Source.Value() == "recovery/image:latest")
				Expect(spec.NoFormat == true)
				// Gets multiple cloud-init files from env vars as comma separated values
				Expect(len(spec.CloudInit)).To(Equal(2))
				Expect(spec.CloudInit[0]).To(Equal("path/to/file1.yaml"))
				Expect(spec.CloudInit[1]).To(Equal("/absolute/path/to/file2.yaml"))
			})
		})
		Describe("Read ResetSpec", Label("install"), func() {
			var flags *pflag.FlagSet
			var bootedFrom string
			var ghwTest v1mock.GhwMock

			BeforeEach(func() {
				bootedFrom = constants.RecoveryImgFile
				flags = pflag.NewFlagSet("testflags", 1)
				flags.String("system.uri", "", "testing flag")
				flags.Set("system.uri", "docker:image/from:flag")

				runner.SideEffect = func(cmd string, args ...string) ([]byte, error) {
					switch cmd {
					case "cat":
						return []byte(bootedFrom), nil
					default:
						return []byte{}, nil
					}
				}
				mainDisk := block.Disk{
					Name: "device",
					Partitions: []*block.Partition{
						{
							Name:            "device1",
							FilesystemLabel: "COS_RECOVERY",
							Type:            "ext4",
							MountPoint:      constants.RunningStateDir,
						},
						{
							Name:            "device2",
							FilesystemLabel: "COS_STATE",
							Type:            "ext4",
							MountPoint:      constants.RunningStateDir,
						},
					},
				}
				ghwTest = v1mock.GhwMock{}
				ghwTest.AddDisk(mainDisk)
				ghwTest.CreateDevices()
			})
			AfterEach(func() {
				ghwTest.Clean()
			})
			It("can't init reset spec if not booted from recovery", func() {
				// Disable recovery boot detection
				bootedFrom = ""

				_, err := ReadResetSpec(cfg, nil)
				Expect(err).Should(HaveOccurred())
				Expect(err.Error()).To(ContainSubstring("reset can only be called from the recovery system"))
			})
			It("inits a reset spec according to given configs", func() {
				err := os.Setenv("ELEMENTAL_RESET_TARGET", "/special/disk")
				Expect(err).ShouldNot(HaveOccurred())
				err = os.Setenv("ELEMENTAL_RESET_SYSTEM", "docker:alpine:latest")
				Expect(err).ShouldNot(HaveOccurred())
				spec, err := ReadResetSpec(cfg, nil)
				Expect(err).ShouldNot(HaveOccurred())
				// Overwrites target from environment variables
				Expect(spec.Target == "/special/disk")
				// Overwrites system image, flags have priority over files and env vars
				Expect(spec.Active.Source.Value() == "image/from:flag")
				// From config files
				Expect(spec.DisableBootEntry).To(BeTrue())
			})
		})
		Describe("Read UpgradeSpec", Label("install"), func() {
			var flags *pflag.FlagSet
			var ghwTest v1mock.GhwMock

			BeforeEach(func() {
				flags = pflag.NewFlagSet("testflags", 1)
				flags.String("recovery-system.uri", "", "testing flag")
				flags.Set("recovery-system.uri", "docker:image/from:flag")
			})
			It("can't init upgrade spec if partitions are not found", func() {
				_, err := ReadUpgradeSpec(cfg, nil)
				Expect(err).Should(HaveOccurred())
				Expect(err.Error()).To(ContainSubstring("undefined state partition"))
			})
			It("inits an upgrade spec according to given configs", func() {
				mainDisk := block.Disk{
					Name: "device",
					Partitions: []*block.Partition{
						{
							Name:            "device2",
							FilesystemLabel: "COS_STATE",
							Type:            "ext4",
							MountPoint:      constants.RunningStateDir,
						},
						{
							Name:            "device3",
							FilesystemLabel: "COS_RECOVERY",
							Type:            "ext4",
							MountPoint:      constants.RunningStateDir,
						},
					},
				}
				ghwTest = v1mock.GhwMock{}
				ghwTest.AddDisk(mainDisk)
				ghwTest.CreateDevices()
				defer ghwTest.Clean()

				err := os.Setenv("ELEMENTAL_UPGRADE_RECOVERY", "true")
				spec, err := ReadUpgradeSpec(cfg, nil)
				Expect(err).ShouldNot(HaveOccurred())
				// Overwrites recovery-system image, flags have priority over files and env vars
				Expect(spec.Recovery.Source.Value() == "image/from:flag")
				// System image from config files
				Expect(spec.Active.Source.Value() == "system/cos")
				// Sets recovery upgrade from environment variables
				Expect(spec.RecoveryUpgrade).To(BeTrue())
			})
		})

	})
})
   0707010000002A000081A4000000000000000000000001645E367C000002FA000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/cmd/config/suite_test.go  /*
Copyright © 2021 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package config_test

import (
	"testing"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

func TestConfig(t *testing.T) {
	RegisterFailHandler(Fail)
	RunSpecs(t, "config cmd test suite")
}
  0707010000002B000081A4000000000000000000000001645E367C000018F7000000000000000000000000000000000000002100000000elemental-cli-0.3.1/cmd/flags.go  /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cmd

import (
	"errors"
	"fmt"
	"runtime"
	"strings"

	"github.com/spf13/cobra"
	"github.com/spf13/pflag"

	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
)

// addCosignFlags adds flags related to cosign
func addCosignFlags(cmd *cobra.Command) {
	cmd.Flags().Bool("cosign", false, "Enable cosign verification (requires images with signatures)")
	cmd.Flags().String("cosign-key", "", "Sets the URL of the public key to be used by cosign validation")
}

// addPowerFlags adds flags related to power
func addPowerFlags(cmd *cobra.Command) {
	cmd.Flags().Bool("reboot", false, "Reboot the system after install")
	cmd.Flags().Bool("poweroff", false, "Shutdown the system after install")
}

// addSharedInstallUpgradeFlags add flags shared between install, upgrade and reset
func addSharedInstallUpgradeFlags(cmd *cobra.Command) {
	addResetFlags(cmd)
	cmd.Flags().String("recovery-system.uri", "", "Sets the recovery image source and its type (e.g. 'docker:registry.org/image:tag')")
	addSquashFsCompressionFlags(cmd)
}

// addResetFlags add flags shared between reset, install and upgrade
func addResetFlags(cmd *cobra.Command) {
	cmd.Flags().String("directory", "", "Use directory as source to install from")
	_ = cmd.Flags().MarkDeprecated("directory", "'directory' is deprecated please use 'system' instead")

	cmd.Flags().StringP("docker-image", "d", "", "Install a specified container image")
	_ = cmd.Flags().MarkDeprecated("docker-image", "'docker-image' is deprecated please use 'system' instead")

	cmd.Flags().String("system.uri", "", "Sets the system image source and its type (e.g. 'docker:registry.org/image:tag')")
	cmd.Flags().Bool("verify", false, "Enable mtree checksum verification (requires images manifests generated with mtree separately)")
	cmd.Flags().Bool("strict", false, "Enable strict check of hooks (They need to exit with 0)")

	addCosignFlags(cmd)
	addPowerFlags(cmd)
}

// addLocalImageFlag add local image flag shared between install, pull-image, upgrade
func addLocalImageFlag(cmd *cobra.Command) {
	cmd.Flags().Bool("local", false, "Use an image from local cache")
}

func adaptDockerImageAndDirectoryFlagsToSystem(flags *pflag.FlagSet) {
	systemFlag := "system.uri"
	doc, _ := flags.GetString("docker-image")
	if doc != "" {
		_ = flags.Set(systemFlag, fmt.Sprintf("docker:%s", doc))
	}
	dir, _ := flags.GetString("directory")
	if dir != "" {
		_ = flags.Set(systemFlag, fmt.Sprintf("dir:%s", dir))
	}
}

func adaptEFIAndGPTFlags(flags *pflag.FlagSet) {
	efi, _ := flags.GetBool("force-efi")
	if efi {
		_ = flags.Set("firmware", v1.EFI)
	}
	gpt, _ := flags.GetBool("force-gpt")
	if gpt {
		_ = flags.Set("part-table", v1.GPT)
	}
}

func validateCosignFlags(log v1.Logger, flags *pflag.FlagSet) error {
	cosignKey, _ := flags.GetString("cosign-key")
	cosign, _ := flags.GetBool("cosign")

	if cosignKey != "" && !cosign {
		return errors.New("'cosign-key' requires 'cosign' option to be enabled")
	}

	if cosign && cosignKey == "" {
		log.Warnf("No 'cosign-key' option set, keyless cosign verification is experimental")
	}
	return nil
}

func validateSourceFlags(_ v1.Logger, flags *pflag.FlagSet) error {
	msg := "flags docker-image, directory and system are mutually exclusive, please only set one of them"
	system, _ := flags.GetString("system.uri")
	directory, _ := flags.GetString("directory")
	dockerImg, _ := flags.GetString("docker-image")
	// docker-image, directory and system are mutually exclusive. Can't have your cake and eat it too.
	if system != "" && (directory != "" || dockerImg != "") {
		return errors.New(msg)
	}
	if directory != "" && dockerImg != "" {
		return errors.New(msg)
	}
	return nil
}

func validatePowerFlags(_ v1.Logger, flags *pflag.FlagSet) error {
	reboot, _ := flags.GetBool("reboot")
	poweroff, _ := flags.GetBool("poweroff")
	if reboot && poweroff {
		return errors.New("'reboot' and 'poweroff' are mutually exclusive options")
	}
	return nil
}

// validateUpgradeFlags is a helper call to check all the flags for the upgrade command
func validateInstallUpgradeFlags(log v1.Logger, flags *pflag.FlagSet) error {
	if err := validateSourceFlags(log, flags); err != nil {
		return err
	}
	if err := validateCosignFlags(log, flags); err != nil {
		return err
	}
	return validatePowerFlags(log, flags)
}

// addPlatformFlags adds the arch flag for build commands
func addPlatformFlags(cmd *cobra.Command) {
	cmd.Flags().String("arch", "", "Arch to build the image for")
	_ = cmd.Flags().MarkDeprecated("arch", "'arch' is deprecated please use 'platform' instead")
	cmd.Flags().String("platform", fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH), "Platform to build the image for")
}

type enum struct {
	Allowed []string
	Value   string
}

// newEnum give a list of allowed flag parameters, where the second argument is the default
func newEnumFlag(allowed []string, d string) *enum {
	return &enum{
		Allowed: allowed,
		Value:   d,
	}
}

func (a enum) String() string {
	return a.Value
}

func (a *enum) Set(p string) error {
	isIncluded := func(opts []string, val string) bool {
		for _, opt := range opts {
			if val == opt {
				return true
			}
		}
		return false
	}
	if !isIncluded(a.Allowed, p) {
		return fmt.Errorf("%s is not included in %s", p, strings.Join(a.Allowed, ","))
	}
	a.Value = p
	return nil
}

func (a *enum) Type() string {
	return "string"
}

func addSquashFsCompressionFlags(cmd *cobra.Command) {
	cmd.Flags().StringArrayP("squash-compression", "x", []string{}, "cmd options for compression to pass to mksquashfs. Full cmd including --comp as the whole values will be passed to mksquashfs. For a full list of options please check mksquashfs manual. (default value: '-comp xz -Xbcj ARCH')")
	cmd.Flags().Bool("squash-no-compression", false, "Disable squashfs compression. Overrides any values on squash-compression")
}
 0707010000002C000081A4000000000000000000000001645E367C0000037D000000000000000000000000000000000000002300000000elemental-cli-0.3.1/cmd/helpers.go    /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cmd

import (
	"os"

	errors "github.com/rancher/elemental-cli/pkg/error"
)

// CheckRoot is a helper to return on PreRunE, so we can add it to commands that require root
func CheckRoot() error {
	if os.Geteuid() != 0 {
		return errors.New("this command requires root privileges", errors.RequiresRoot)
	}
	return nil
}
   0707010000002D000081A4000000000000000000000001645E367C0000127F000000000000000000000000000000000000002300000000elemental-cli-0.3.1/cmd/install.go    /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cmd

import (
	"os/exec"

	"github.com/spf13/cobra"
	"github.com/spf13/viper"
	"k8s.io/mount-utils"

	"github.com/rancher/elemental-cli/cmd/config"
	"github.com/rancher/elemental-cli/pkg/action"
	elementalError "github.com/rancher/elemental-cli/pkg/error"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
)

// NewInstallCmd returns a new instance of the install subcommand and appends it to
// the root command. requireRoot is to initiate it with or without the CheckRoot
// pre-run check. This method is mostly used for testing purposes.
func NewInstallCmd(root *cobra.Command, addCheckRoot bool) *cobra.Command {
	c := &cobra.Command{
		Use:   "install DEVICE",
		Short: "Elemental installer",
		Args:  cobra.MaximumNArgs(1),
		PreRunE: func(cmd *cobra.Command, args []string) error {
			if addCheckRoot {
				return CheckRoot()
			}
			return nil
		},
		RunE: func(cmd *cobra.Command, args []string) error {
			path, err := exec.LookPath("mount")
			if err != nil {
				return err
			}
			mounter := mount.New(path)

			cfg, err := config.ReadConfigRun(viper.GetString("config-dir"), cmd.Flags(), mounter)
			if err != nil {
				cfg.Logger.Errorf("Error reading config: %s\n", err)
				return elementalError.NewFromError(err, elementalError.ReadingRunConfig)
			}

			if err := validateInstallUpgradeFlags(cfg.Logger, cmd.Flags()); err != nil {
				cfg.Logger.Errorf("Error reading install/upgrade flags: %s\n", err)
				return elementalError.NewFromError(err, elementalError.ReadingInstallUpgradeFlags)
			}

			// Manage deprecated flags
			// Adapt 'docker-image' and 'directory'  deprecated flags to 'system' syntax
			adaptDockerImageAndDirectoryFlagsToSystem(cmd.Flags())

			//Adapt 'force-efi' and 'force-gpt' to 'firmware' and 'part-table'
			adaptEFIAndGPTFlags(cmd.Flags())

			cmd.SilenceUsage = true
			spec, err := config.ReadInstallSpec(cfg, cmd.Flags())
			if err != nil {
				cfg.Logger.Errorf("invalid install command setup %v", err)
				return elementalError.NewFromError(err, elementalError.ReadingSpecConfig)
			}

			if len(args) == 1 {
				spec.Target = args[0]
			}

			if spec.Target == "" {
				return elementalError.New("at least a target device must be supplied", elementalError.InvalidTarget)
			}

			cfg.Logger.Infof("Install called")
			install := action.NewInstallAction(cfg, spec)
			return install.Run()
		},
	}
	firmType := newEnumFlag([]string{v1.EFI, v1.BIOS}, v1.EFI)
	pTableType := newEnumFlag([]string{v1.GPT, v1.MSDOS}, v1.GPT)

	root.AddCommand(c)
	c.Flags().StringSliceP("cloud-init", "c", []string{}, "Cloud-init config files")
	c.Flags().StringP("iso", "i", "", "Performs an installation from the ISO url")
	c.Flags().StringP("partition-layout", "p", "", "Partitioning layout file")
	_ = c.Flags().MarkDeprecated("partition-layout", "'partition-layout' is deprecated and ignored please use a config file instead")
	c.Flags().Bool("no-format", false, "Don’t format disks. It is implied that COS_STATE, COS_RECOVERY, COS_PERSISTENT, COS_OEM are already existing")

	c.Flags().Bool("force-efi", false, "Forces an EFI installation")
	_ = c.Flags().MarkDeprecated("force-efi", "'force-efi' is deprecated please use 'firmware' instead")
	c.Flags().Var(firmType, "firmware", "Firmware to install for: 'efi' or 'bios'. (defaults to 'efi')")

	c.Flags().Bool("force-gpt", false, "Forces a GPT partition table")
	_ = c.Flags().MarkDeprecated("force-gpt", "'force-gpt' is deprecated please use 'part-table' instead")
	c.Flags().Var(pTableType, "part-table", "Partition table type to use")

	c.Flags().String("tty", "", "Add named tty to grub")
	_ = c.Flags().MarkDeprecated("tty", "'tty' is deprecated and ignored please set console as part of the extra kernel command line arguments as grub2 variables")
	c.Flags().Bool("force", false, "Force install")
	c.Flags().Bool("eject-cd", false, "Try to eject the cd on reboot, only valid if booting from iso")
	c.Flags().Bool("disable-boot-entry", false, "Dont create an EFI entry for the system install.")
	addSharedInstallUpgradeFlags(c)
	addLocalImageFlag(c)
	addPlatformFlags(c)
	return c
}

// register the subcommand into rootCmd
var _ = NewInstallCmd(rootCmd, true)
 0707010000002E000081A4000000000000000000000001645E367C00000BD1000000000000000000000000000000000000002800000000elemental-cli-0.3.1/cmd/install_test.go   /*
Copyright © 2021 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cmd

import (
	"bytes"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/spf13/viper"

	elementalError "github.com/rancher/elemental-cli/pkg/error"
)

var _ = Describe("Install", Label("install", "cmd"), func() {
	var buf *bytes.Buffer
	BeforeEach(func() {
		rootCmd = NewRootCmd()
		_ = NewInstallCmd(rootCmd, false)
		buf = new(bytes.Buffer)
		rootCmd.SetOut(buf)
		rootCmd.SetErr(buf)
	})
	AfterEach(func() {
		viper.Reset()
	})
	It("Errors out setting consign-key without setting cosign", Label("flags"), func() {
		_, _, err := executeCommandC(rootCmd, "install", "--cosign-key", "pubKey.url", "/dev/whatever")
		Expect(err).ToNot(BeNil())
		Expect(buf.String()).To(ContainSubstring("Usage:"))
		Expect(err.Error()).To(ContainSubstring("'cosign-key' requires 'cosign' option to be enabled"))
	})
	It("Errors out setting directory and docker-image at the same time", Label("flags"), func() {
		_, _, err := executeCommandC(rootCmd, "install", "--directory", "dir", "--docker-image", "image", "/dev/whatever")
		Expect(err).ToNot(BeNil())
		Expect(buf.String()).To(ContainSubstring("Usage:"))
		Expect(err.Error()).To(ContainSubstring("flags docker-image, directory and system are mutually exclusive"))
		Expect(err.(*elementalError.ElementalError)).ToNot(BeNil())
		Expect(err.(*elementalError.ElementalError).ExitCode()).To(Equal(elementalError.ReadingInstallUpgradeFlags))
	})
	It("Errors out if no installation source is defined", Label("args"), func() {
		_, _, err := executeCommandC(rootCmd, "install")
		Expect(err).ToNot(BeNil())
		Expect(buf.String()).To(ContainSubstring("undefined system source to install"))
	})
	It("Errors out if no installation target is defined", Label("args"), func() {
		_, _, err := executeCommandC(rootCmd, "install", "--directory", "dir")
		Expect(err).ToNot(BeNil())
		Expect(buf.String()).To(ContainSubstring("at least a target device must be supplied"))
		Expect(err.(*elementalError.ElementalError)).ToNot(BeNil())
		Expect(err.(*elementalError.ElementalError).ExitCode()).To(Equal(elementalError.InvalidTarget))
	})
	It("Errors out setting reboot and poweroff at the same time", Label("flags"), func() {
		_, _, err := executeCommandC(rootCmd, "install", "--reboot", "--poweroff", "/dev/whatever")
		Expect(err).ToNot(BeNil())
		Expect(buf.String()).To(ContainSubstring("Usage:"))
		Expect(err.Error()).To(ContainSubstring("'reboot' and 'poweroff' are mutually exclusive options"))
	})
})
   0707010000002F000081A4000000000000000000000001645E367C00000A41000000000000000000000000000000000000002600000000elemental-cli-0.3.1/cmd/pull-image.go /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cmd

import (
	"path/filepath"

	"github.com/spf13/cobra"
	"github.com/spf13/viper"
	"k8s.io/mount-utils"

	"github.com/rancher/elemental-cli/cmd/config"
	elementalError "github.com/rancher/elemental-cli/pkg/error"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
)

func NewPullImageCmd(root *cobra.Command, addCheckRoot bool) *cobra.Command {
	c := &cobra.Command{
		Use:   "pull-image IMAGE DESTINATION",
		Short: "Pull remote image to local file",
		Args:  cobra.ExactArgs(2),
		PreRunE: func(cmd *cobra.Command, args []string) error {
			if addCheckRoot {
				return CheckRoot()
			}
			return nil
		},
		RunE: func(cmd *cobra.Command, args []string) error {
			cfg, err := config.ReadConfigRun(viper.GetString("config-dir"), cmd.Flags(), &mount.FakeMounter{})
			if err != nil {
				cfg.Logger.Errorf("Error reading config: %s\n", err)
				return elementalError.NewFromError(err, elementalError.ReadingRunConfig)
			}

			image := args[0]
			destination, err := filepath.Abs(args[1])
			if err != nil {
				cfg.Logger.Errorf("Invalid path %s", destination)
				return elementalError.NewFromError(err, elementalError.StatFile)
			}

			local, err := cmd.Flags().GetBool("local")
			if err != nil {
				cfg.Logger.Errorf("Invalid local-flag %s", err.Error())
				return elementalError.NewFromError(err, elementalError.ReadingBuildConfig)
			}

			// Set this after parsing of the flags, so it fails on parsing and prints usage properly
			cmd.SilenceUsage = true
			cmd.SilenceErrors = true // Do not propagate errors down the line, we control them

			cfg.Logger.Infof("Pulling image %s platform %s", image, cfg.Platform.String())

			e := v1.OCIImageExtractor{}
			if err = e.ExtractImage(image, destination, cfg.Platform.String(), local); err != nil {
				cfg.Logger.Error(err.Error())
				return elementalError.NewFromError(err, elementalError.UnpackImage)
			}

			return nil
		},
	}
	root.AddCommand(c)
	addPlatformFlags(c)
	addLocalImageFlag(c)
	return c
}

// register the subcommand into rootCmd
var _ = NewPullImageCmd(rootCmd, true)
   07070100000030000081A4000000000000000000000001645E367C00000634000000000000000000000000000000000000002B00000000elemental-cli-0.3.1/cmd/pull-image_test.go    /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cmd

import (
	"os"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/spf13/viper"
)

var _ = Describe("pull-image", Label("pull-image", "cmd", "root"), func() {
	Describe("execution", func() {
		BeforeEach(func() {
			rootCmd = NewRootCmd()
			_ = NewPullImageCmd(rootCmd, true)
		})
		AfterEach(func() {
			viper.Reset()
		})
		It("executes command correctly", func() {
			d, err := os.MkdirTemp("", "elemental")
			Expect(err).ToNot(HaveOccurred())
			defer os.RemoveAll(d)

			_, _, err = executeCommandC(
				rootCmd,
				"pull-image",
				"alpine",
				d,
			)
			Expect(err).ToNot(HaveOccurred())
		})
		It("fails when image is missing", Label("args"), func() {
			_, _, err := executeCommandC(
				rootCmd,
				"pull-image",
			)
			Expect(err).To(HaveOccurred())
		})
		It("fails when image is not an image", Label("args"), func() {
			_, _, err := executeCommandC(
				rootCmd,
				"pull-image",
				"fakeImage",
				"fakeDest",
			)
			Expect(err).To(HaveOccurred())
		})

	})
})
07070100000031000081A4000000000000000000000001645E367C00000AEB000000000000000000000000000000000000002100000000elemental-cli-0.3.1/cmd/reset.go  /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cmd

import (
	"os/exec"

	"github.com/spf13/cobra"
	"github.com/spf13/viper"
	"k8s.io/mount-utils"

	"github.com/rancher/elemental-cli/cmd/config"
	"github.com/rancher/elemental-cli/pkg/action"
	elementalError "github.com/rancher/elemental-cli/pkg/error"
)

func NewResetCmd(root *cobra.Command, addCheckRoot bool) *cobra.Command {
	c := &cobra.Command{
		Use:   "reset",
		Short: "Reset OS",
		Args:  cobra.ExactArgs(0),
		PreRunE: func(cmd *cobra.Command, args []string) error {
			if addCheckRoot {
				return CheckRoot()
			}
			return nil
		},
		RunE: func(cmd *cobra.Command, args []string) error {
			path, err := exec.LookPath("mount")
			if err != nil {
				return err
			}
			mounter := mount.New(path)

			cfg, err := config.ReadConfigRun(viper.GetString("config-dir"), cmd.Flags(), mounter)
			if err != nil {
				cfg.Logger.Errorf("Error reading config: %s\n", err)
				return elementalError.NewFromError(err, elementalError.ReadingRunConfig)
			}

			if err := validateInstallUpgradeFlags(cfg.Logger, cmd.Flags()); err != nil {
				return elementalError.NewFromError(err, elementalError.ReadingInstallUpgradeFlags)
			}

			// Adapt 'docker-image' and 'directory'  deprecated flags to 'system' syntax
			adaptDockerImageAndDirectoryFlagsToSystem(cmd.Flags())

			cmd.SilenceUsage = true
			spec, err := config.ReadResetSpec(cfg, cmd.Flags())
			if err != nil {
				cfg.Logger.Errorf("invalid reset command setup %v", err)
				return elementalError.NewFromError(err, elementalError.ReadingSpecConfig)
			}

			cfg.Logger.Infof("Reset called")
			reset := action.NewResetAction(cfg, spec)
			return reset.Run()
		},
	}
	root.AddCommand(c)
	c.Flags().BoolP("tty", "", false, "Add named tty to grub")
	_ = c.Flags().MarkDeprecated("tty", "'tty' is deprecated and ignored please set console as part of the extra kernel command line arguments as grub2 variables")
	c.Flags().BoolP("reset-persistent", "", false, "Clear persistent partitions")
	c.Flags().BoolP("reset-oem", "", false, "Clear OEM partitions")
	c.Flags().Bool("disable-boot-entry", false, "Dont create an EFI entry for the system install.")

	addResetFlags(c)
	return c
}

// register the subcommand into rootCmd
var _ = NewResetCmd(rootCmd, true)
 07070100000032000081A4000000000000000000000001645E367C00000800000000000000000000000000000000000000002600000000elemental-cli-0.3.1/cmd/reset_test.go /*
Copyright © 2021 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cmd

import (
	"bytes"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/spf13/viper"
)

var _ = Describe("Reset", Label("reset", "cmd"), func() {
	var buf *bytes.Buffer
	BeforeEach(func() {
		rootCmd = NewRootCmd()
		_ = NewResetCmd(rootCmd, false)
		buf = new(bytes.Buffer)
		rootCmd.SetOut(buf)
		rootCmd.SetErr(buf)
	})
	AfterEach(func() {
		viper.Reset()
	})
	It("Errors out setting reboot and poweroff at the same time", Label("flags"), func() {
		_, _, err := executeCommandC(rootCmd, "reset", "--reboot", "--poweroff")
		Expect(err).ToNot(BeNil())
		Expect(buf.String()).To(ContainSubstring("Usage:"))
		Expect(err.Error()).To(ContainSubstring("'reboot' and 'poweroff' are mutually exclusive options"))
	})
	It("Errors out setting consign-key without setting cosign", Label("flags"), func() {
		_, _, err := executeCommandC(rootCmd, "reset", "--cosign-key", "pubKey.url")
		Expect(err).ToNot(BeNil())
		Expect(buf.String()).To(ContainSubstring("Usage:"))
		Expect(err.Error()).To(ContainSubstring("'cosign-key' requires 'cosign' option to be enabled"))
	})
	It("Errors out setting directory and docker-image at the same time", Label("flags"), func() {
		_, _, err := executeCommandC(rootCmd, "reset", "--directory", "dir", "--docker-image", "image")
		Expect(err).ToNot(BeNil())
		Expect(buf.String()).To(ContainSubstring("Usage:"))
		Expect(err.Error()).To(ContainSubstring("flags docker-image, directory and system are mutually exclusive"))
	})
})
07070100000033000081A4000000000000000000000001645E367C00000722000000000000000000000000000000000000002000000000elemental-cli-0.3.1/cmd/root.go   /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cmd

import (
	"os"

	eleError "github.com/rancher/elemental-cli/pkg/error"
	"github.com/spf13/cobra"
	"github.com/spf13/viper"
)

func NewRootCmd() *cobra.Command {
	cmd := &cobra.Command{
		Use:   "elemental",
		Short: "Elemental",
	}
	cmd.PersistentFlags().Bool("debug", false, "Enable debug output")
	cmd.PersistentFlags().String("config-dir", "", "Set config dir")
	cmd.PersistentFlags().String("logfile", "", "Set logfile")
	cmd.PersistentFlags().Bool("quiet", false, "Do not output to stdout")
	_ = viper.BindPFlag("debug", cmd.PersistentFlags().Lookup("debug"))
	_ = viper.BindPFlag("config-dir", cmd.PersistentFlags().Lookup("config-dir"))
	_ = viper.BindPFlag("logfile", cmd.PersistentFlags().Lookup("logfile"))
	_ = viper.BindPFlag("quiet", cmd.PersistentFlags().Lookup("quiet"))
	return cmd
}

// rootCmd represents the base command when called without any subcommands
var rootCmd = NewRootCmd()

// Execute adds all child commands to the root command and sets flags appropriately.
// This is called by main.main(). It only needs to happen once to the rootCmd.
func Execute() {
	err := rootCmd.Execute()
	if err != nil {
		switch t := err.(type) {
		case *eleError.ElementalError:
			os.Exit(t.ExitCode())
		default:
			os.Exit(1)
		}
	}
}
  07070100000034000081A4000000000000000000000001645E367C000006C9000000000000000000000000000000000000002500000000elemental-cli-0.3.1/cmd/run-stage.go  /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cmd

import (
	"github.com/spf13/cobra"
	"github.com/spf13/viper"
	"k8s.io/mount-utils"

	"github.com/rancher/elemental-cli/cmd/config"
	elementalError "github.com/rancher/elemental-cli/pkg/error"
	"github.com/rancher/elemental-cli/pkg/utils"
)

func NewRunStage(root *cobra.Command) *cobra.Command {
	c := &cobra.Command{
		Use:   "run-stage STAGE",
		Short: "Run stage from cloud-init",
		Args:  cobra.MinimumNArgs(1),
		PreRun: func(cmd *cobra.Command, args []string) {

		},
		RunE: func(cmd *cobra.Command, args []string) error {
			cfg, err := config.ReadConfigRun(viper.GetString("config-dir"), cmd.Flags(), &mount.FakeMounter{})
			if err != nil {
				cfg.Logger.Errorf("Error reading config: %s\n", err)
				return elementalError.NewFromError(err, elementalError.ReadingRunConfig)
			}

			err = utils.RunStage(&cfg.Config, args[0], cfg.Strict, cfg.CloudInitPaths...)
			return elementalError.NewFromError(err, elementalError.CloudInitRunStage)
		},
	}
	root.AddCommand(c)
	c.Flags().Bool("strict", false, "Set strict checking for errors, i.e. fail if errors were found")
	return c
}

// register the subcommand into rootCmd
var _ = NewRunStage(rootCmd)
   07070100000035000081A4000000000000000000000001645E367C000006FF000000000000000000000000000000000000002A00000000elemental-cli-0.3.1/cmd/run-stage_test.go /*
Copyright © 2021 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cmd

import (
	"os"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/spf13/viper"
)

var _ = Describe("run-stage", Label("run-stage", "cmd"), func() {
	When("execution", func() {
		BeforeEach(func() {
			rootCmd = NewRootCmd()
			_ = NewRunStage(rootCmd)
		})
		AfterEach(func() {
			viper.Reset()
		})
		It("executes command correctly", func() {
			_, out, err := executeCommandC(
				rootCmd,
				"run-stage",
				"test",
			)
			Expect(err).ToNot(HaveOccurred())
			Expect(out).To(ContainSubstring("test"))
			Expect(out).To(ContainSubstring("test.before"))
			Expect(out).To(ContainSubstring("test.after"))
		})
		// This requires fixing the env vars, otherwise it wont work
		It("picks extra paths correctly", Pending, Label("env"), func() {
			d, _ := os.MkdirTemp("", "elemental")
			defer os.RemoveAll(d)
			_ = os.Setenv("ELEMENTAL_CLOUD_INIT_PATHS", d)
			_, out, err := executeCommandC(
				rootCmd,
				"run-stage",
				"test",
			)
			Expect(err).ToNot(HaveOccurred())
			Expect(out).To(ContainSubstring(d))
		})
		It("fails when stage is missing", Label("args"), func() {
			_, _, err := executeCommandC(
				rootCmd,
				"run-stage",
			)
			Expect(err).To(HaveOccurred())
		})
	})
})
 07070100000036000081A4000000000000000000000001645E367C00000B7C000000000000000000000000000000000000002300000000elemental-cli-0.3.1/cmd/upgrade.go    /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cmd

import (
	"os/exec"

	"github.com/spf13/cobra"
	"github.com/spf13/viper"
	"k8s.io/mount-utils"

	"github.com/rancher/elemental-cli/cmd/config"
	"github.com/rancher/elemental-cli/pkg/action"
	elementalError "github.com/rancher/elemental-cli/pkg/error"
)

// NewUpgradeCmd returns a new instance of the upgrade subcommand and appends it to
// the root command. requireRoot is to initiate it with or without the CheckRoot
// pre-run check. This method is mostly used for testing purposes.
func NewUpgradeCmd(root *cobra.Command, addCheckRoot bool) *cobra.Command {
	c := &cobra.Command{
		Use:   "upgrade",
		Short: "Upgrade the system",
		Args:  cobra.ExactArgs(0),
		PreRunE: func(cmd *cobra.Command, args []string) error {
			if addCheckRoot {
				return CheckRoot()
			}
			return nil
		},

		RunE: func(cmd *cobra.Command, args []string) error {
			path, err := exec.LookPath("mount")
			if err != nil {
				return err
			}
			mounter := mount.New(path)

			cfg, err := config.ReadConfigRun(viper.GetString("config-dir"), cmd.Flags(), mounter)
			if err != nil {
				cfg.Logger.Errorf("Error reading config: %s\n", err)
				return elementalError.NewFromError(err, elementalError.ReadingRunConfig)
			}

			if err := validateInstallUpgradeFlags(cfg.Logger, cmd.Flags()); err != nil {
				cfg.Logger.Errorf("Error reading install/upgrade flags: %s\n", err)
				return elementalError.NewFromError(err, elementalError.ReadingInstallUpgradeFlags)
			}

			// Adapt 'docker-image' and 'directory'  deprecated flags to 'system' syntax
			adaptDockerImageAndDirectoryFlagsToSystem(cmd.Flags())

			// Set this after parsing of the flags, so it fails on parsing and prints usage properly
			cmd.SilenceUsage = true
			cmd.SilenceErrors = true // Do not propagate errors down the line, we control them

			spec, err := config.ReadUpgradeSpec(cfg, cmd.Flags())
			if err != nil {
				cfg.Logger.Errorf("Invalid upgrade command setup %v", err)
				return elementalError.NewFromError(err, elementalError.ReadingSpecConfig)
			}

			cfg.Logger.Infof("Upgrade called")
			upgrade := action.NewUpgradeAction(cfg, spec)
			return upgrade.Run()
		},
	}
	root.AddCommand(c)
	c.Flags().Bool("recovery", false, "Upgrade the recovery")
	addSharedInstallUpgradeFlags(c)
	addLocalImageFlag(c)
	return c
}

// register the subcommand into rootCmd
var _ = NewUpgradeCmd(rootCmd, true)
07070100000037000081A4000000000000000000000001645E367C0000044F000000000000000000000000000000000000002800000000elemental-cli-0.3.1/cmd/upgrade_test.go   /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cmd

import (
	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/spf13/viper"
)

var _ = Describe("Upgrade", Label("upgrade", "cmd"), func() {
	BeforeEach(func() {
		rootCmd = NewRootCmd()
		_ = NewUpgradeCmd(rootCmd, false)
	})
	AfterEach(func() {
		viper.Reset()
	})
	It("Returns error if both --docker-image and --directory flags are used", Label("flags"), func() {
		_, _, err := executeCommandC(rootCmd, "upgrade", "--docker-image", "img", "--directory", "/tmp")
		Expect(err).To(HaveOccurred())
	})
})
 07070100000038000081A4000000000000000000000001645E367C00000503000000000000000000000000000000000000002300000000elemental-cli-0.3.1/cmd/version.go    /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cmd

import (
	"fmt"

	"github.com/spf13/cobra"

	"github.com/rancher/elemental-cli/internal/version"
)

func NewVersionCmd(root *cobra.Command) *cobra.Command {
	c := &cobra.Command{
		Use:   "version",
		Args:  cobra.ExactArgs(0),
		Short: "Print the version",
		Run: func(cmd *cobra.Command, args []string) {
			v := version.Get()
			commit := v.GitCommit
			if len(commit) > 7 {
				commit = v.GitCommit[:7]
			}
			if cmd.Flag("long").Changed {
				fmt.Printf("%#v\n", v)
			} else {
				fmt.Printf("%s+g%s\n", v.Version, commit)
			}
		},
	}
	root.AddCommand(c)
	c.Flags().Bool("long", false, "Show long version info")
	return c
}

// register the subcommand into rootCmd
var _ = NewVersionCmd(rootCmd)
 07070100000039000081A4000000000000000000000001645E367C00000588000000000000000000000000000000000000002800000000elemental-cli-0.3.1/cmd/version_test.go   /*
Copyright © 2021 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cmd

import (
	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/rancher/elemental-cli/internal/version"
)

var _ = Describe("Version", Label("version", "cmd"), func() {
	BeforeEach(func() {
		rootCmd = NewRootCmd()
		_ = NewVersionCmd(rootCmd)
	})
	It("Reports the version", func() {
		_, output, err := executeCommandC(rootCmd, "version")
		Expect(err).To(BeNil())
		v := version.Get().Version
		Expect(output).To(ContainSubstring(v))
	})
	It("Reports the version in long format", Label("flags"), func() {
		_, output, err := executeCommandC(rootCmd, "version", "--long")
		Expect(err).To(BeNil())
		v := version.Get().Version
		Expect(output).To(ContainSubstring(v))
		Expect(output).To(ContainSubstring("Version"))
		Expect(output).To(ContainSubstring("GitCommit"))
		Expect(output).To(ContainSubstring("GoVersion"))
	})
})
0707010000003A000081A4000000000000000000000001645E367C0000104D000000000000000000000000000000000000002800000000elemental-cli-0.3.1/config.yaml.example   # DISCLAIMER: this document show most of all available options. Elemental
# uses defaults if any of this value is missing. Values shown here
# only represent an example and they should not be used as defaults.

# installation configuration for 'install' command
install:
  # target is the only value that has no default, it must be provided by
  # config, flags or env variables.
  target: /dev/sda

  # basic disk configs for partitioning ('efi|bios' and 'gpt|msdos')
  firmware: efi
  part-table: gpt

  # partitions setup
  # setting a partition size key to 0 means that the partition will take over the rest of the free space on the disk
  # after creating the rest of the partitions
  # by default the persistent partition has a value of 0
  # if you want any of the extra partitions to fill the rest of the space you will need to set the persistent partition
  # size to a different value, for example
  # partitions:
  #   persistent:
  #     size: 300

  # default partitions
  # only 'oem', 'recovery', 'state' and 'persistent' objects allowed
  # size in MiB
  partitions:
    oem:
      label: COS_OEM
      size: 60
      fs: ext4
    recovery:
      label: COS_RECOVERY
      size: 4096
      fs: ext4

  # extra partitions to create during install
  # only size, label and fs are used
  # if no fs is given the partition will be created but not formatted
  # This partitions are not automounted only created and formatted
  extra-partitions:
    - Name: myPartition
      size: 100
      fs: ext4
      label: EXTRA_PARTITION
    - Name: myOtherPartition
      size: 0
      fs: ext4
      label: EXTRA_PARTITION

  # no-format: true skips any disk partitioning and formatting
  # if set to true installation procedure will error out if expected
  # partitions are not already present within the disk.
  no-format: false

  # if no-format is used and elemental is running over an existing deployment
  # force cane be used to force installation.
  force: false

  # use this iso as installation media (overwrites 'system.uri' and 'recoverys-system.uri'
  # according to the ISO contents.
  iso: https://my.domain.org/some/powerful.iso

  # main OS image
  # size in MiB
  system:
    label: COS_ACTIVE
    size: 1024
    fs: ext2
    uri: docker:some.registry.org/cos/image:latest

  # recovery OS image
  recovery-system:
    fs: squashfs
    uri: channel:recovery/cos

  # filesystem label of the passive backup image
  passive.label: COS_PASSIVE

  # extra cloud-init config file URI to include during the installation
  cloud-init: "https://some.cloud-init.org/my-config-file"

  # grub menu entry, this is the string that will be displayed
  grub-entry-name: cOS

  # tty console to add into the kernel parameters
  tty: ttyS0

# configuration for the 'reset' command
reset:
  # if set to true it will format persistent partitions ('oem 'and 'persistent')
  reset-persistent: false
  reset-oem: false

  # OS image used to reset disk
  # size in MiB
  system:
    label: COS_ACTIVE
    size: 1024
    fs: ext2
    uri: docker:some.registry.org/cos/image:latest

  # filesystem label of the passive backup image
  passive.label: COS_PASSIVE

  # grub menu entry, this is the string that will be displayed
  grub-entry-name: cOS

  # tty console to add into the kernel parameters
  tty: ttyS0

# configuration used for the 'ugrade' command
upgrade:
  # if set to true upgrade command will upgrade recovery system instead
  # of main active system
  recovery: false

  # image used to upgrade main OS
  # size in MiB
  system:
    uri: channel:system/cos

  # image used to upgrade recovery OS
  # recovery images can be set to use squashfs
  recovery-system:
    fs: squashfs
    uri: channel:recovery/cos

  # grub menu entry, this is the string that will be displayed
  grub-entry-name: cOS

# use cosing to validate images from container registries
cosign: true
# cosign key to used for validation
cosign-key: myKey

# attempt a verify process
no-verify: false

# fail on cloud-init hooks errors
strict: false

# Additional paths for look for cloud-init files
cloud-init-paths:
- "/some/path"

# reboot/power off when done
reboot: false
poweroff: false
   0707010000003B000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000001900000000elemental-cli-0.3.1/docs  0707010000003C000081A4000000000000000000000001645E367C0000035E000000000000000000000000000000000000002600000000elemental-cli-0.3.1/docs/elemental.md ## elemental

Elemental

### Options

```
      --config-dir string   Set config dir
      --debug               Enable debug output
  -h, --help                help for elemental
      --logfile string      Set logfile
      --quiet               Do not output to stdout
```

### SEE ALSO

* [elemental build-iso](elemental_build-iso.md)	 - Build bootable installation media ISOs
* [elemental cloud-init](elemental_cloud-init.md)	 - Run cloud-init
* [elemental install](elemental_install.md)	 - Elemental installer
* [elemental pull-image](elemental_pull-image.md)	 - Pull remote image to local file
* [elemental reset](elemental_reset.md)	 - Reset OS
* [elemental run-stage](elemental_run-stage.md)	 - Run stage from cloud-init
* [elemental upgrade](elemental_upgrade.md)	 - Upgrade the system
* [elemental version](elemental_version.md)	 - Print the version

  0707010000003D000081A4000000000000000000000001645E367C0000088F000000000000000000000000000000000000003000000000elemental-cli-0.3.1/docs/elemental_build-iso.md   ## elemental build-iso

Build bootable installation media ISOs

### Synopsis

Build bootable installation media ISOs

SOURCE - should be provided as uri in following format <sourceType>:<sourceName>
    * <sourceType> - might be ["dir", "file", "oci", "docker", "channel"], as default is "docker"
    * <sourceName> - is path to file or directory, image name with tag version or channel name

```
elemental build-iso SOURCE [flags]
```

### Options

```
      --bootloader-in-rootfs             Fetch ISO bootloader binaries from the rootfs
      --cosign                           Enable cosign verification (requires images with signatures)
      --cosign-key string                Sets the URL of the public key to be used by cosign validation
      --date                             Adds a date suffix into the generated ISO file
  -h, --help                             help for build-iso
      --label string                     Label of the ISO volume
      --local                            Use an image from local cache
  -n, --name string                      Basename of the generated ISO file
  -o, --output string                    Output directory (defaults to current directory)
      --overlay-iso string               Path of the overlayed iso data
      --overlay-rootfs string            Path of the overlayed rootfs data
      --overlay-uefi string              Path of the overlayed uefi data
      --platform string                  Platform to build the image for (default "linux/amd64")
  -x, --squash-compression stringArray   cmd options for compression to pass to mksquashfs. Full cmd including --comp as the whole values will be passed to mksquashfs. For a full list of options please check mksquashfs manual. (default value: '-comp xz -Xbcj ARCH')
      --squash-no-compression            Disable squashfs compression. Overrides any values on squash-compression
```

### Options inherited from parent commands

```
      --config-dir string   Set config dir
      --debug               Enable debug output
      --logfile string      Set logfile
      --quiet               Do not output to stdout
```

### SEE ALSO

* [elemental](elemental.md)	 - Elemental

 0707010000003E000081A4000000000000000000000001645E367C00000273000000000000000000000000000000000000003100000000elemental-cli-0.3.1/docs/elemental_cloud-init.md  ## elemental cloud-init

Run cloud-init

```
elemental cloud-init [flags]
```

### Options

```
  -d, --dotnotation stages.foo.name=..   Parse input in dotnotation ( e.g. stages.foo.name=.. ) 
  -h, --help                             help for cloud-init
  -s, --stage string                     Stage to apply (default "default")
```

### Options inherited from parent commands

```
      --config-dir string   Set config dir
      --debug               Enable debug output
      --logfile string      Set logfile
      --quiet               Do not output to stdout
```

### SEE ALSO

* [elemental](elemental.md)	 - Elemental

 0707010000003F000081A4000000000000000000000001645E367C00000296000000000000000000000000000000000000003300000000elemental-cli-0.3.1/docs/elemental_convert-disk.md    ## elemental convert-disk

converts between a raw disk and a cloud operator disk image (azure,gce)

```
elemental convert-disk RAW_DISK [flags]
```

### Options

```
  -h, --help          help for convert-disk
      --keep-source   Keep the source image, otherwise it will delete it once transformed.
  -t, --type string   Type of image to create (default "azure")
```

### Options inherited from parent commands

```
      --config-dir string   Set config dir
      --debug               Enable debug output
      --logfile string      Set logfile
      --quiet               Do not output to stdout
```

### SEE ALSO

* [elemental](elemental.md)	 - Elemental

  07070100000040000081A4000000000000000000000001645E367C00000B51000000000000000000000000000000000000003100000000elemental-cli-0.3.1/docs/elemental_exit-codes.md  # Exit codes for elemental CLI


| Exit code | Meaning |
| :----: | :---- |
| 10 | Error closing a file|
| 11 | Error running a command|
| 12 | Error copying data|
| 13 | Error copying a file|
| 14 | Wrong cosign flags used in cmd|
| 15 | Error creating a dir|
| 16 | Error creating a file|
| 17 | Error creating a temporal dir|
| 18 | Error dumping the source|
| 19 | Error creating a gzip writer|
| 20 | Error trying to identify the source|
| 21 | Error calling mkfs|
| 22 | There is not packages for the given architecture|
| 23 | No luet repositories configured|
| 24 | Error opening a file|
| 25 | Output file already exists|
| 26 | Error reading the build config|
| 27 | Error reading the build-disk config|
| 28 | Error running stat on a file|
| 29 | Error creating a tar archive|
| 30 | Error truncating a file|
| 31 | Error reading the run config|
| 32 | Error reading the install/upgrade flags|
| 33 | Error reading the config for the command|
| 34 | Error mounting state partition|
| 35 | Error mounting recovery partition|
| 36 | Error during before-upgrade hook|
| 37 | Error during before-upgrade-chroot hook|
| 38 | Error during after-upgrade hook|
| 39 | Error during after-upgrade-chroot hook|
| 40 | Error moving file|
| 41 | Error occurred during cleanup|
| 42 | Error occurred trying to reboot|
| 43 | Error occurred trying to shutdown|
| 44 | Error occurred when labeling partition|
| 45 | Error setting default grub entry|
| 46 | Error occurred during selinux relabeling|
| 47 | Error invalid device specified|
| 48 | Error deploying image to file|
| 49 | Error installing GRUB|
| 50 | Error during before-install hook|
| 51 | Error during after-install hook|
| 52 | Error during after-install-chroot hook|
| 53 | Error during file download|
| 54 | Error mounting partitions|
| 55 | Error deactivating active devices|
| 56 | Error during device partitioning|
| 57 | Device already contains an install|
| 58 | Command requires root privileges|
| 59 | Error occurred when unmounting partitions|
| 60 | Error occurred when formatting partitions|
| 61 | Error during before-reset hook|
| 62 | Error during after-reset-chroot hook|
| 63 | Error during after-reset hook|
| 64 | Unsupported flavor|
| 65 | Error encountered during cloud-init run-stage|
| 66 | Error unpacking image|
| 67 | Error reading file|
| 68 | No source was provided for the command|
| 69 | Error removing a file|
| 70 | Error calculating checksum|
| 71 | Error occurred when unmounting image|
| 72 | Error occurred during post-upgrade hook|
| 73 | Error occurred during post-reset hook|
| 74 | Error occurred during post-install hook|
| 75 | Error occurred while preparing the image root tree|
| 76 | Error occurred while creating the OS filesystem image|
| 77 | Error occurred while copying the filesystem image and setting new labels|
| 78 | Error setting persistent GRUB variables|
| 255 | Unknown error|
   07070100000041000081A4000000000000000000000001645E367C00000A1E000000000000000000000000000000000000002E00000000elemental-cli-0.3.1/docs/elemental_install.md ## elemental install

Elemental installer

```
elemental install DEVICE [flags]
```

### Options

```
  -c, --cloud-init strings               Cloud-init config files
      --cosign                           Enable cosign verification (requires images with signatures)
      --cosign-key string                Sets the URL of the public key to be used by cosign validation
      --disable-boot-entry               Dont create an EFI entry for the system install.
      --eject-cd                         Try to eject the cd on reboot, only valid if booting from iso
      --firmware string                  Firmware to install for: 'efi' or 'bios'. (defaults to 'efi') (default "efi")
      --force                            Force install
  -h, --help                             help for install
  -i, --iso string                       Performs an installation from the ISO url
      --local                            Use an image from local cache
      --no-format                        Don’t format disks. It is implied that COS_STATE, COS_RECOVERY, COS_PERSISTENT, COS_OEM are already existing
      --part-table string                Partition table type to use (default "gpt")
      --platform string                  Platform to build the image for (default "linux/amd64")
      --poweroff                         Shutdown the system after install
      --reboot                           Reboot the system after install
      --recovery-system.uri string       Sets the recovery image source and its type (e.g. 'docker:registry.org/image:tag')
  -x, --squash-compression stringArray   cmd options for compression to pass to mksquashfs. Full cmd including --comp as the whole values will be passed to mksquashfs. For a full list of options please check mksquashfs manual. (default value: '-comp xz -Xbcj ARCH')
      --squash-no-compression            Disable squashfs compression. Overrides any values on squash-compression
      --strict                           Enable strict check of hooks (They need to exit with 0)
      --system.uri string                Sets the system image source and its type (e.g. 'docker:registry.org/image:tag')
      --verify                           Enable mtree checksum verification (requires images manifests generated with mtree separately)
```

### Options inherited from parent commands

```
      --config-dir string   Set config dir
      --debug               Enable debug output
      --logfile string      Set logfile
      --quiet               Do not output to stdout
```

### SEE ALSO

* [elemental](elemental.md)	 - Elemental

  07070100000042000081A4000000000000000000000001645E367C000001F8000000000000000000000000000000000000002A00000000elemental-cli-0.3.1/docs/elemental_new.md ## elemental new

Create skeleton Dockerfile for a derivative

```
elemental new FLAVOR [flags]
```

### Options

```
      --arch string   X86_64 or aarch64 architectures
  -h, --help          help for new
```

### Options inherited from parent commands

```
      --config-dir string   Set config dir
      --debug               Enable debug output
      --logfile string      Set logfile
      --quiet               Do not output to stdout
```

### SEE ALSO

* [elemental](elemental.md)	 - Elemental

07070100000043000081A4000000000000000000000001645E367C00000264000000000000000000000000000000000000003100000000elemental-cli-0.3.1/docs/elemental_pull-image.md  ## elemental pull-image

Pull remote image to local file

```
elemental pull-image IMAGE DESTINATION [flags]
```

### Options

```
  -h, --help              help for pull-image
      --local             Use an image from local cache
      --platform string   Platform to build the image for (default "linux/amd64")
```

### Options inherited from parent commands

```
      --config-dir string   Set config dir
      --debug               Enable debug output
      --logfile string      Set logfile
      --quiet               Do not output to stdout
```

### SEE ALSO

* [elemental](elemental.md)	 - Elemental

07070100000044000081A4000000000000000000000001645E367C000004CF000000000000000000000000000000000000002C00000000elemental-cli-0.3.1/docs/elemental_reset.md   ## elemental reset

Reset OS

```
elemental reset [flags]
```

### Options

```
      --cosign               Enable cosign verification (requires images with signatures)
      --cosign-key string    Sets the URL of the public key to be used by cosign validation
      --disable-boot-entry   Dont create an EFI entry for the system install.
  -h, --help                 help for reset
      --poweroff             Shutdown the system after install
      --reboot               Reboot the system after install
      --reset-oem            Clear OEM partitions
      --reset-persistent     Clear persistent partitions
      --strict               Enable strict check of hooks (They need to exit with 0)
      --system.uri string    Sets the system image source and its type (e.g. 'docker:registry.org/image:tag')
      --verify               Enable mtree checksum verification (requires images manifests generated with mtree separately)
```

### Options inherited from parent commands

```
      --config-dir string   Set config dir
      --debug               Enable debug output
      --logfile string      Set logfile
      --quiet               Do not output to stdout
```

### SEE ALSO

* [elemental](elemental.md)	 - Elemental

 07070100000045000081A4000000000000000000000001645E367C0000020C000000000000000000000000000000000000003000000000elemental-cli-0.3.1/docs/elemental_run-stage.md   ## elemental run-stage

Run stage from cloud-init

```
elemental run-stage STAGE [flags]
```

### Options

```
  -h, --help     help for run-stage
      --strict   Set strict checking for errors, i.e. fail if errors were found
```

### Options inherited from parent commands

```
      --config-dir string   Set config dir
      --debug               Enable debug output
      --logfile string      Set logfile
      --quiet               Do not output to stdout
```

### SEE ALSO

* [elemental](elemental.md)	 - Elemental

07070100000046000081A4000000000000000000000001645E367C00000703000000000000000000000000000000000000002E00000000elemental-cli-0.3.1/docs/elemental_upgrade.md ## elemental upgrade

Upgrade the system

```
elemental upgrade [flags]
```

### Options

```
      --cosign                           Enable cosign verification (requires images with signatures)
      --cosign-key string                Sets the URL of the public key to be used by cosign validation
  -h, --help                             help for upgrade
      --local                            Use an image from local cache
      --poweroff                         Shutdown the system after install
      --reboot                           Reboot the system after install
      --recovery                         Upgrade the recovery
      --recovery-system.uri string       Sets the recovery image source and its type (e.g. 'docker:registry.org/image:tag')
  -x, --squash-compression stringArray   cmd options for compression to pass to mksquashfs. Full cmd including --comp as the whole values will be passed to mksquashfs. For a full list of options please check mksquashfs manual. (default value: '-comp xz -Xbcj ARCH')
      --squash-no-compression            Disable squashfs compression. Overrides any values on squash-compression
      --strict                           Enable strict check of hooks (They need to exit with 0)
      --system.uri string                Sets the system image source and its type (e.g. 'docker:registry.org/image:tag')
      --verify                           Enable mtree checksum verification (requires images manifests generated with mtree separately)
```

### Options inherited from parent commands

```
      --config-dir string   Set config dir
      --debug               Enable debug output
      --logfile string      Set logfile
      --quiet               Do not output to stdout
```

### SEE ALSO

* [elemental](elemental.md)	 - Elemental

 07070100000047000081A4000000000000000000000001645E367C000001CC000000000000000000000000000000000000002E00000000elemental-cli-0.3.1/docs/elemental_version.md ## elemental version

Print the version

```
elemental version [flags]
```

### Options

```
  -h, --help   help for version
      --long   Show long version info
```

### Options inherited from parent commands

```
      --config-dir string   Set config dir
      --debug               Enable debug output
      --logfile string      Set logfile
      --quiet               Do not output to stdout
```

### SEE ALSO

* [elemental](elemental.md)	 - Elemental

07070100000048000081A4000000000000000000000001645E367C00000C04000000000000000000000000000000000000002A00000000elemental-cli-0.3.1/docs/generate_docs.go /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package main

import (
	"fmt"
	"go/ast"
	godoc "go/doc"
	"go/parser"
	"go/token"
	"os"
	"sort"
	"strconv"
	"strings"

	"github.com/spf13/cobra"
	"github.com/spf13/cobra/doc"

	"github.com/rancher/elemental-cli/cmd"
)

func main() {
	rootCmd := cmd.NewRootCmd()
	for _, command := range []*cobra.Command{
		rootCmd,
		cmd.NewBuildISO(rootCmd, false),
		cmd.NewCloudInitCmd(rootCmd),
		cmd.NewInstallCmd(rootCmd, false),
		cmd.NewPullImageCmd(rootCmd, false),
		cmd.NewResetCmd(rootCmd, false),
		cmd.NewRunStage(rootCmd),
		cmd.NewUpgradeCmd(rootCmd, false),
		cmd.NewVersionCmd(rootCmd),
	} {
		// Disables the line AUTOGENERATED BY ... ON DATE
		command.DisableAutoGenTag = true
		err := doc.GenMarkdownTree(command, ".")
		if err != nil {
			fmt.Print(err)
			os.Exit(1)
		}
	}

	if err := generateExitCodes(); err != nil {
		fmt.Printf("error generating exit-codes: %v\n", err)
		os.Exit(1)
	}
}

func generateExitCodes() error {
	fset := token.NewFileSet()
	files := []*ast.File{
		mustParse(fset, "../pkg/error/exit-codes.go"),
	}
	p, err := godoc.NewFromFiles(fset, files, "github.com/rancher/elemental-cli")
	if err != nil {
		panic(err)
	}
	var (
		exitCodes []*ErrorCode
		used      map[int]bool
	)

	used = make(map[int]bool)

	for _, c := range p.Consts {
		// Cast it, its safe as these are constants
		v := c.Decl.Specs[0].(*ast.ValueSpec)
		val := v.Values[0].(*ast.BasicLit)
		code, _ := strconv.Atoi(val.Value)

		if _, ok := used[code]; ok {
			return fmt.Errorf("duplicate exit-code found: %v", code)
		}

		used[code] = true
		exitCodes = append(exitCodes, &ErrorCode{code: code, doc: c.Doc})
	}

	sort.Slice(exitCodes[:], func(i, j int) bool {
		return exitCodes[i].code < exitCodes[j].code
	})

	exitCodesFile, err := os.Create("elemental_exit-codes.md")

	if err != nil {
		fmt.Print(err)
		return err
	}

	defer func() {
		_ = exitCodesFile.Close()
	}()

	_, _ = exitCodesFile.WriteString("# Exit codes for elemental CLI\n\n\n")
	_, _ = exitCodesFile.WriteString("| Exit code | Meaning |\n")
	_, _ = exitCodesFile.WriteString("| :----: | :---- |\n")
	for _, code := range exitCodes {
		_, err = exitCodesFile.WriteString(fmt.Sprintf("| %d | %s|\n", code.code, strings.Replace(code.doc, "\n", "", 1)))
		if err != nil {
			return err
		}
	}

	return nil
}

func mustParse(fset *token.FileSet, filename string) *ast.File {
	f, err := parser.ParseFile(fset, filename, nil, parser.ParseComments)
	if err != nil {
		panic(err)
	}
	return f
}

type ErrorCode struct {
	code int
	doc  string
}
07070100000049000081A4000000000000000000000001645E367C00001B0B000000000000000000000000000000000000001B00000000elemental-cli-0.3.1/go.mod    module github.com/rancher/elemental-cli

go 1.20

// until https://github.com/zloylos/grsync/pull/20 is merged we need to use our fork
replace github.com/zloylos/grsync v1.6.1 => github.com/rancher-sandbox/grsync v1.6.2-0.20220526080038-4032e9b0e97c

require (
	github.com/canonical/go-efilib v0.3.1-0.20220324150059-04e254148b45
	github.com/cavaliergopher/grab/v3 v3.0.1
	github.com/containerd/containerd v1.7.0
	github.com/distribution/distribution v2.8.1+incompatible
	github.com/google/go-containerregistry v0.14.0
	github.com/hashicorp/go-multierror v1.1.1
	github.com/jaypipes/ghw v0.9.1-0.20220511134554-dac2f19e1c76
	github.com/joho/godotenv v1.5.1
	github.com/mitchellh/mapstructure v1.5.0
	github.com/mudler/yip v1.1.0
	github.com/onsi/ginkgo/v2 v2.9.2
	github.com/onsi/gomega v1.27.6
	github.com/sanity-io/litter v1.5.5
	github.com/sirupsen/logrus v1.9.0
	github.com/spf13/cobra v1.7.0
	github.com/spf13/pflag v1.0.5
	github.com/spf13/viper v1.15.0
	github.com/twpayne/go-vfs v1.7.2
	github.com/zloylos/grsync v1.6.1
	gopkg.in/yaml.v3 v3.0.1
	k8s.io/mount-utils v0.23.0
)

require (
	github.com/Masterminds/goutils v1.1.1 // indirect
	github.com/Masterminds/semver/v3 v3.2.1 // indirect
	github.com/Masterminds/sprig/v3 v3.2.3 // indirect
	github.com/Microsoft/go-winio v0.6.1 // indirect
	github.com/Microsoft/hcsshim v0.10.0-rc.7 // indirect
	github.com/ProtonMail/go-crypto v0.0.0-20220623141421-5afb4c282135 // indirect
	github.com/StackExchange/wmi v1.2.1 // indirect
	github.com/acomagu/bufpipe v1.0.3 // indirect
	github.com/cavaliergopher/grab v2.0.0+incompatible // indirect
	github.com/containerd/cgroups v1.1.0 // indirect
	github.com/containerd/continuity v0.3.0 // indirect
	github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect
	github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
	github.com/davidcassany/linuxkit/pkg/metadata v0.0.0-20230124104020-93ac9dd5b8e1 // indirect
	github.com/denisbrodbeck/machineid v1.0.1 // indirect
	github.com/diskfs/go-diskfs v1.3.0 // indirect
	github.com/docker/cli v23.0.4+incompatible // indirect
	github.com/docker/distribution v2.8.2+incompatible // indirect
	github.com/docker/docker v23.0.4+incompatible // indirect
	github.com/docker/docker-credential-helpers v0.7.0 // indirect
	github.com/docker/go-connections v0.4.0 // indirect
	github.com/docker/go-units v0.5.0 // indirect
	github.com/emirpasic/gods v1.18.1 // indirect
	github.com/fsnotify/fsnotify v1.6.0 // indirect
	github.com/ghodss/yaml v1.0.0 // indirect
	github.com/go-git/gcfg v1.5.0 // indirect
	github.com/go-git/go-billy/v5 v5.3.1 // indirect
	github.com/go-git/go-git/v5 v5.4.2 // indirect
	github.com/go-logr/logr v1.2.3 // indirect
	github.com/go-ole/go-ole v1.2.6 // indirect
	github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
	github.com/gogo/protobuf v1.3.2 // indirect
	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
	github.com/google/go-cmp v0.5.9 // indirect
	github.com/google/pprof v0.0.0-20230323073829-e72429f035bd // indirect
	github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
	github.com/google/uuid v1.3.0 // indirect
	github.com/hashicorp/errwrap v1.1.0 // indirect
	github.com/hashicorp/hcl v1.0.0 // indirect
	github.com/huandu/xstrings v1.4.0 // indirect
	github.com/imdario/mergo v0.3.15 // indirect
	github.com/inconshreveable/mousetrap v1.1.0 // indirect
	github.com/itchyny/gojq v0.12.12 // indirect
	github.com/itchyny/timefmt-go v0.1.5 // indirect
	github.com/jaypipes/pcidb v1.0.0 // indirect
	github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
	github.com/kendru/darwin/go/depgraph v0.0.0-20221105232959-877d6a81060c // indirect
	github.com/kevinburke/ssh_config v1.2.0 // indirect
	github.com/klauspost/compress v1.16.5 // indirect
	github.com/kr/pretty v0.3.1 // indirect
	github.com/magiconair/properties v1.8.7 // indirect
	github.com/mitchellh/copystructure v1.2.0 // indirect
	github.com/mitchellh/go-homedir v1.1.0 // indirect
	github.com/mitchellh/reflectwalk v1.0.2 // indirect
	github.com/moby/moby v23.0.4+incompatible // indirect
	github.com/moby/sys/sequential v0.5.0 // indirect
	github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 // indirect
	github.com/mudler/entities v0.0.0-20220905203055-68348bae0f49 // indirect
	github.com/onsi/ginkgo v1.16.5 // indirect
	github.com/opencontainers/go-digest v1.0.0 // indirect
	github.com/opencontainers/image-spec v1.1.0-rc3 // indirect
	github.com/packethost/packngo v0.29.0 // indirect
	github.com/pelletier/go-toml/v2 v2.0.7 // indirect
	github.com/phayes/permbits v0.0.0-20190612203442-39d7c581d2ee // indirect
	github.com/pierrec/lz4 v2.6.1+incompatible // indirect
	github.com/pkg/errors v0.9.1 // indirect
	github.com/pkg/xattr v0.4.9 // indirect
	github.com/rancher-sandbox/linuxkit v1.0.0 // indirect
	github.com/rogpeppe/go-internal v1.10.0 // indirect
	github.com/russross/blackfriday/v2 v2.1.0 // indirect
	github.com/samber/lo v1.37.0 // indirect
	github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b // indirect
	github.com/sergi/go-diff v1.2.0 // indirect
	github.com/shopspring/decimal v1.3.1 // indirect
	github.com/spectrocloud-labs/herd v0.4.2 // indirect
	github.com/spf13/afero v1.9.5 // indirect
	github.com/spf13/cast v1.5.0 // indirect
	github.com/spf13/jwalterweatherman v1.1.0 // indirect
	github.com/subosito/gotenv v1.4.2 // indirect
	github.com/tredoe/osutil/v2 v2.0.0-rc.16 // indirect
	github.com/ulikunitz/xz v0.5.11 // indirect
	github.com/vbatts/tar-split v0.11.3 // indirect
	github.com/vishvananda/netlink v1.2.1-beta.2 // indirect
	github.com/vishvananda/netns v0.0.4 // indirect
	github.com/vmware/vmw-guestinfo v0.0.0-20220317130741-510905f0efa3 // indirect
	github.com/willdonnelly/passwd v0.0.0-20141013001024-7935dab3074c // indirect
	github.com/xanzy/ssh-agent v0.3.1 // indirect
	github.com/zcalusic/sysinfo v0.9.5 // indirect
	go.mozilla.org/pkcs7 v0.0.0-20210826202110-33d05740a352 // indirect
	go.opencensus.io v0.24.0 // indirect
	golang.org/x/crypto v0.8.0 // indirect
	golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561 // indirect
	golang.org/x/mod v0.10.0 // indirect
	golang.org/x/net v0.9.0 // indirect
	golang.org/x/sync v0.1.0 // indirect
	golang.org/x/sys v0.8.0 // indirect
	golang.org/x/text v0.9.0 // indirect
	golang.org/x/tools v0.8.0 // indirect
	golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
	google.golang.org/protobuf v1.30.0 // indirect
	gopkg.in/djherbis/times.v1 v1.3.0 // indirect
	gopkg.in/ini.v1 v1.67.0 // indirect
	gopkg.in/warnings.v0 v0.1.2 // indirect
	gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0 // indirect
	gopkg.in/yaml.v2 v2.4.0 // indirect
	howett.net/plist v1.0.0 // indirect
	k8s.io/klog/v2 v2.90.1 // indirect
	k8s.io/utils v0.0.0-20230220204549-a5ecb0141aa5 // indirect
	pault.ag/go/modprobe v0.1.2 // indirect
	pault.ag/go/topsort v0.1.1 // indirect
)
 0707010000004A000081A4000000000000000000000001645E367C000172F2000000000000000000000000000000000000001B00000000elemental-cli-0.3.1/go.sum    cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI=
cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=
cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8=
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI=
github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ=
github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0=
github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ=
github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA=
github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM=
github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0=
github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
github.com/Microsoft/hcsshim v0.10.0-rc.7 h1:HBytQPxcv8Oy4244zbQbe6hnOnx544eL5QPUqhJldz8=
github.com/Microsoft/hcsshim v0.10.0-rc.7/go.mod h1:ILuwjA+kNW+MrN/w5un7n3mTqkwsFu4Bp05/okFUZlE=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo=
github.com/ProtonMail/go-crypto v0.0.0-20220623141421-5afb4c282135 h1:xDc/cFH/hwyr9KyWc0sm26lpsscqtfZBvU8NpRLHwJ0=
github.com/ProtonMail/go-crypto v0.0.0-20220623141421-5afb4c282135/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo=
github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA=
github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8=
github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk=
github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA=
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c=
github.com/apex/log v1.9.0 h1:FHtw/xuaM8AgmvDDTI9fiwoAL25Sq2cxojnZICUU8l0=
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/canonical/go-efilib v0.3.1-0.20220324150059-04e254148b45 h1:vNz7eEqoD04D6aqty3yS8BacBwIUiLVGFDfrBHKgWCo=
github.com/canonical/go-efilib v0.3.1-0.20220324150059-04e254148b45/go.mod h1:9b2PNAuPcZsB76x75/uwH99D8CyH/A2y4rq1/+bvplg=
github.com/cavaliergopher/grab v2.0.0+incompatible h1:XLeGNAc7MIRTMb8RlRbN76uO8vx1/AeNMWWN7FYpDw8=
github.com/cavaliergopher/grab v2.0.0+incompatible/go.mod h1:6ICNRTQPwkMP0m2sKIDv/9XkhFJJwiEOQyZ+8E4H7Yg=
github.com/cavaliergopher/grab/v3 v3.0.1 h1:4z7TkBfmPjmLAAmkkAZNX/6QJ1nNFdv3SdIHXju0Fr4=
github.com/cavaliergopher/grab/v3 v3.0.1/go.mod h1:1U/KNnD+Ft6JJiYoYBAimKH2XrYptb8Kl3DFGmsjpq4=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM=
github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw=
github.com/containerd/containerd v1.7.0 h1:G/ZQr3gMZs6ZT0qPUZ15znx5QSdQdASW11nXTLTM2Pg=
github.com/containerd/containerd v1.7.0/go.mod h1:QfR7Efgb/6X2BDpTPJRvPTYDE9rsF0FsXX9J8sIs/sc=
github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg=
github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM=
github.com/containerd/stargz-snapshotter/estargz v0.14.3 h1:OqlDCK3ZVUO6C3B/5FSkDwbkEETK84kQgEeFwDC+62k=
github.com/containerd/stargz-snapshotter/estargz v0.14.3/go.mod h1:KY//uOCIkSuNAHhJogcZtrNHdKrA99/FCCRjE3HD36o=
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w=
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davidcassany/linuxkit/pkg/metadata v0.0.0-20230124104020-93ac9dd5b8e1 h1:658b9hLexzki3Bs8YHpqYU1ozt/nmGjbRSuNdz+zWy4=
github.com/davidcassany/linuxkit/pkg/metadata v0.0.0-20230124104020-93ac9dd5b8e1/go.mod h1:nOQ2dN24sH/49+aJuiDZSNnI76M68oO6i3EPMpAfU+g=
github.com/denisbrodbeck/machineid v1.0.1 h1:geKr9qtkB876mXguW2X6TU4ZynleN6ezuMSRhl4D7AQ=
github.com/denisbrodbeck/machineid v1.0.1/go.mod h1:dJUwb7PTidGDeYyUBmXZ2GphQBbjJCrnectwCyxcUSI=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
github.com/diskfs/go-diskfs v1.2.1-0.20230123115902-fce1828bbbfa h1:IjMOtaIqh7PYR3Pw06fMJp0UaWp4g1meiNTwcmH0Aho=
github.com/diskfs/go-diskfs v1.2.1-0.20230123115902-fce1828bbbfa/go.mod h1:3pUpCAz75Q11om5RsGpVKUgXp2Z+ATw1xV500glmCP0=
github.com/diskfs/go-diskfs v1.3.0 h1:D3IVe1y7ybB5SjCO0pOmkWThL9lZEWeanp8rRa0q0sk=
github.com/diskfs/go-diskfs v1.3.0/go.mod h1:3pUpCAz75Q11om5RsGpVKUgXp2Z+ATw1xV500glmCP0=
github.com/distribution/distribution v2.8.1+incompatible h1:8iXUoOqRPx30bhzIEPUmNIqlmBlWdrieW1bqr6LrX30=
github.com/distribution/distribution v2.8.1+incompatible/go.mod h1:EgLm2NgWtdKgzF9NpMzUKgzmR7AMmb0VQi2B+ZzDRjc=
github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
github.com/docker/cli v23.0.4+incompatible h1:xClB7PsiATttDHj8ce5qvJcikiApNy7teRR1XkoBZGs=
github.com/docker/cli v23.0.4+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8=
github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
github.com/docker/docker v23.0.4+incompatible h1:Kd3Bh9V/rO+XpTP/BLqM+gx8z7+Yb0AA2Ibj+nNo4ek=
github.com/docker/docker v23.0.4+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A=
github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0=
github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o=
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
github.com/frankban/quicktest v1.13.0/go.mod h1:qLE0fzW0VuyUAJgPU19zByoIr0HtCHN/r/VLSOOIySU=
github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0=
github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4=
github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E=
github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0=
github.com/go-git/go-billy/v5 v5.3.1 h1:CPiOUAzKtMRvolEKw+bG1PLRpT7D3LIs3/3ey4Aiu34=
github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0=
github.com/go-git/go-git-fixtures/v4 v4.2.1 h1:n9gGL1Ct/yIw+nfsfr8s4+sbhT+Ncu2SubfXjIWgci8=
github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0=
github.com/go-git/go-git/v5 v5.4.2 h1:BXyZu9t0VkbiHtqrsvdq39UDhGJTl1h55VW6CSC4aY4=
github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM=
github.com/go-test/deep v1.0.8/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-containerregistry v0.14.0 h1:z58vMqHxuwvAsVwvKEkmVBz2TlgBgH5k6koEXBtlYkw=
github.com/google/go-containerregistry v0.14.0/go.mod h1:aiJ2fp/SXvkWgmYHioXnbMdlgB8eXiiYOY55gfN91Wk=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20230323073829-e72429f035bd h1:r8yyd+DJDmsUhGrRBxH5Pj7KeFK5l+Y3FsgT8keqKtk=
github.com/google/pprof v0.0.0-20230323073829-e72429f035bd/go.mod h1:79YE0hCXdHag9sBkw2o+N/YnZtTkXi0UT9Nnixa5eYk=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU=
github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM=
github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/itchyny/gojq v0.12.12 h1:x+xGI9BXqKoJQZkr95ibpe3cdrTbY8D9lonrK433rcA=
github.com/itchyny/gojq v0.12.12/go.mod h1:j+3sVkjxwd7A7Z5jrbKibgOLn0ZfLWkV+Awxr/pyzJE=
github.com/itchyny/timefmt-go v0.1.5 h1:G0INE2la8S6ru/ZI5JecgyzbbJNs5lG1RcBqa7Jm6GE=
github.com/itchyny/timefmt-go v0.1.5/go.mod h1:nEP7L+2YmAbT2kZ2HfSs1d8Xtw9LY8D2stDBckWakZ8=
github.com/jaypipes/ghw v0.9.1-0.20220511134554-dac2f19e1c76 h1:ZbHBKyBTqelK2yYAvBt0CbdNY4Q0HCVoM1//avrnXCU=
github.com/jaypipes/ghw v0.9.1-0.20220511134554-dac2f19e1c76/go.mod h1:dXMo19735vXOjpIBDyDYSp31sB2u4hrtRCMxInqQ64k=
github.com/jaypipes/pcidb v1.0.0 h1:vtZIfkiCUE42oYbJS0TAq9XSfSmcsgo9IdxSm9qzYU8=
github.com/jaypipes/pcidb v1.0.0/go.mod h1:TnYUvqhPBzCKnH34KrIX22kAeEbDCSRJ9cqLRCuNDfk=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4=
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/kendru/darwin/go/depgraph v0.0.0-20221105232959-877d6a81060c h1:eKb4PqwAMhlqwXw0W3atpKaYaPGlXE/Fwh+xpCEYaPk=
github.com/kendru/darwin/go/depgraph v0.0.0-20221105232959-877d6a81060c/go.mod h1:VOfm8h1NySetVlpHDSnbpCMsvCgYaU+YDn4XezUy2+4=
github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=
github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI=
github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A=
github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA=
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/moby/moby v23.0.4+incompatible h1:A/pe8vi9KIKhNbzR0G3wW4ACKDsMgXILBveMqiJNa8M=
github.com/moby/moby v23.0.4+incompatible/go.mod h1:fDXVQ6+S340veQPv35CzDahGBmHsiclFwfEygB/TWMc=
github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78=
github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc=
github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo=
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 h1:dcztxKSvZ4Id8iPpHERQBbIJfabdt4wUm5qy3wOL2Zc=
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw=
github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
github.com/mudler/entities v0.0.0-20220905203055-68348bae0f49 h1:P1QgHLh0hX935j6m9K6rlSxc0mkD1UuIAOQEu+1VCW4=
github.com/mudler/entities v0.0.0-20220905203055-68348bae0f49/go.mod h1:qquFT9tYp+/NO7tTotto4BT9zSRYSMDxo2PGZwujpFA=
github.com/mudler/yip v1.0.3-0.20230331083237-3caf7670fe8d h1:q0EKqmTPbOpcaw0SsbSKxqbmfQH3f6MsOY4DWoCi31A=
github.com/mudler/yip v1.0.3-0.20230331083237-3caf7670fe8d/go.mod h1:KiB8gN85AeDnWUno7reaixYDyOdtMZZROZNG98LUvpQ=
github.com/mudler/yip v1.1.0 h1:QQLQhD5FQ7ojaP7s7dIll6pSGnwnIplL1zGMSg5lsHQ=
github.com/mudler/yip v1.1.0/go.mod h1:GIzGnY6+tP7kaNBsmtisdyuo4cgn/4y6bEOS3GZNtkY=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg=
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
github.com/onsi/ginkgo v1.16.1/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E=
github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc=
github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
github.com/onsi/ginkgo/v2 v2.9.2 h1:BA2GMJOtfGAfagzYtrAlufIP0lq6QERkFmHLMLPwFSU=
github.com/onsi/ginkgo/v2 v2.9.2/go.mod h1:WHcJJG2dIlcCqVfBAwUCrJxSPFb6v4azBwgxeMeDuts=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA=
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
github.com/onsi/gomega v1.11.0/go.mod h1:azGKhqFUon9Vuj0YmTfLSmx0FUwqXYSTl5re8lQLTUg=
github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE=
github.com/onsi/gomega v1.27.6/go.mod h1:PIQNjfQwkP3aQAH7lf7j87O/5FiNr+ZR8+ipb+qQlhg=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
github.com/opencontainers/image-spec v1.1.0-rc3 h1:fzg1mXZFj8YdPeNkRXMg+zb88BFV0Ys52cJydRwBkb8=
github.com/opencontainers/image-spec v1.1.0-rc3/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8=
github.com/packethost/packngo v0.1.0/go.mod h1:otzZQXgoO96RTzDB/Hycg0qZcXZsWJGJRSXbmEIJ+4M=
github.com/packethost/packngo v0.29.0 h1:gRIhciVZQ/zLNrIdIdbOUyB/Tw5IgoaXyhP4bvE+D2s=
github.com/packethost/packngo v0.29.0/go.mod h1:/UHguFdPs6Lf6FOkkSEPnRY5tgS0fsVM+Zv/bvBrmt0=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/pelletier/go-toml/v2 v2.0.7 h1:muncTPStnKRos5dpVKULv2FVd4bMOhNePj9CjgDb8Us=
github.com/pelletier/go-toml/v2 v2.0.7/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek=
github.com/phayes/permbits v0.0.0-20190612203442-39d7c581d2ee h1:P6U24L02WMfj9ymZTxl7CxS73JC99x3ukk+DBkgQGQs=
github.com/phayes/permbits v0.0.0-20190612203442-39d7c581d2ee/go.mod h1:3uODdxMgOaPYeWU7RzZLxVtJHZ/x1f/iHkBZuKJDzuY=
github.com/pierrec/lz4 v2.3.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM=
github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
github.com/pkg/xattr v0.4.1/go.mod h1:W2cGD0TBEus7MkUgv0tNZ9JutLtVO3cXu+IBRuHqnFs=
github.com/pkg/xattr v0.4.9 h1:5883YPCtkSd8LFbs13nXplj9g9tlrwoJRjgpgMu1/fE=
github.com/pkg/xattr v0.4.9/go.mod h1:di8WF84zAKk8jzR1UBTEWh9AUlIZZ7M/JNt8e9B6ktU=
github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
github.com/rancher-sandbox/grsync v1.6.2-0.20220526080038-4032e9b0e97c h1:0/+U+enNsv4oF++X1bYJPDV2hzHLKBDiYBshgPmFMqs=
github.com/rancher-sandbox/grsync v1.6.2-0.20220526080038-4032e9b0e97c/go.mod h1:0Ue43fnWwx3doC5GkfmwmUwCAvQ54h06FRHXXX3ZWls=
github.com/rancher-sandbox/linuxkit v1.0.0 h1:ejEKyLWfByMkwzpmcSQLc5/RL3FtiKRpIgY+TUjFpaM=
github.com/rancher-sandbox/linuxkit v1.0.0/go.mod h1:n6Fkjc5qoMeWrnLSA5oqUF8ZzFKMrM960CtBwfvH1ZM=
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/samber/lo v1.37.0 h1:XjVcB8g6tgUp8rsPsJ2CvhClfImrpL04YpQHXeHPhRw=
github.com/samber/lo v1.37.0/go.mod h1:9vaz2O4o8oOnK23pd2TrXufcbdbJIa3b6cstBWKpopA=
github.com/sanity-io/litter v1.5.5 h1:iE+sBxPBzoK6uaEP5Lt3fHNgpKcHXc/A2HGETy0uJQo=
github.com/sanity-io/litter v1.5.5/go.mod h1:9gzJgR2i4ZpjZHsKvUXIRQVk7P+yM3e+jAF7bU2UI5U=
github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b h1:gQZ0qzfKHQIybLANtM3mBXNUtOfsCFXeTsnBqCsx1KM=
github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ=
github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8=
github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spectrocloud-labs/herd v0.4.2 h1:90cYZmW0yxNw4PEbqNGSerrtqKSx1nvRbSwAwjc/5AY=
github.com/spectrocloud-labs/herd v0.4.2/go.mod h1:WBlMIs1QZ7XtVrt9rAAFZpkh/fZYA4l2gGOCUS1LDHE=
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM=
github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ=
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/cobra v0.0.6/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I=
github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0=
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU=
github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v0.0.0-20161117074351-18a02ba4a312/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8=
github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/tredoe/osutil/v2 v2.0.0-rc.16 h1:5A2SKvyB2c3lhPYUIHyFtu6jbaXlaA3Hu5gWIam8Pik=
github.com/tredoe/osutil/v2 v2.0.0-rc.16/go.mod h1:uLRVx/3pb7Y4RQhG8cQFbPE9ha5r81e6MXpBsxbTAYc=
github.com/twpayne/go-vfs v1.7.2 h1:ZNYMAXcu2Av8c109USrSGYm8dIIIV0xPlG19I2088Kw=
github.com/twpayne/go-vfs v1.7.2/go.mod h1:1eni2ntkiiAHZG27xfLOO4CYvMR4Kw8V7rYiLeeolsQ=
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8=
github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
github.com/urfave/cli v1.22.12/go.mod h1:sSBEIC79qR6OvcmsD4U3KABeOTxDqQtdDnaFuUN30b8=
github.com/vbatts/tar-split v0.11.3 h1:hLFqsOLQ1SsppQNTMpkpPXClLDfC2A3Zgy9OUU+RVck=
github.com/vbatts/tar-split v0.11.3/go.mod h1:9QlHN18E+fEH7RdG+QAJJcuya3rqT7eXSTY7wGrAokY=
github.com/vishvananda/netlink v0.0.0-20170808154308-f5a6f697a596/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk=
github.com/vishvananda/netlink v1.2.1-beta.2 h1:Llsql0lnQEbHj0I1OuKyp8otXp0r3q0mPkuhwHfStVs=
github.com/vishvananda/netlink v1.2.1-beta.2/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho=
github.com/vishvananda/netns v0.0.0-20170707011535-86bef332bfc3/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI=
github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0=
github.com/vishvananda/netns v0.0.4 h1:Oeaw1EM2JMxD51g9uhtC0D7erkIjgmj8+JZc26m1YX8=
github.com/vishvananda/netns v0.0.4/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM=
github.com/vmware/vmw-guestinfo v0.0.0-20220317130741-510905f0efa3 h1:v6jG/tdl4O07LNVp74Nt7/OyL+1JsIW1M2f/nSvQheY=
github.com/vmware/vmw-guestinfo v0.0.0-20220317130741-510905f0efa3/go.mod h1:CSBTxrhePCm0cmXNKDGeu+6bOQzpaEklfCqEpn89JWk=
github.com/willdonnelly/passwd v0.0.0-20141013001024-7935dab3074c h1:4+NVyrLUuEmvE3r3Xst7gPuKhAP6X04ACpMmPvtK0M0=
github.com/willdonnelly/passwd v0.0.0-20141013001024-7935dab3074c/go.mod h1:xcvfY9pOw6s4wyrhilFSbMthL6KzgrfCIETHHUOQ/fQ=
github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0=
github.com/xanzy/ssh-agent v0.3.1 h1:AmzO1SSWxw73zxFZPRwaMN1MohDw8UyHnmuxyceTEGo=
github.com/xanzy/ssh-agent v0.3.1/go.mod h1:QIE4lCeL7nkC25x+yA3LBIYfwCc1TFziCtG7cBAac6w=
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/zcalusic/sysinfo v0.9.5 h1:ivoHyj9aIAYkwzo1+8QgJ5s4oeE6Etx9FmZtqa4wJjQ=
github.com/zcalusic/sysinfo v0.9.5/go.mod h1:Z/gPVufBrFc8X5sef3m6kkw3r3nlNFp+I6bvASfvBZQ=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk=
go.mozilla.org/pkcs7 v0.0.0-20210826202110-33d05740a352 h1:CCriYyAfq1Br1aIYettdHZTy8mBTIPo7We18TuO/bak=
go.mozilla.org/pkcs7 v0.0.0-20210826202110-33d05740a352/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200420201142-3c4aac89819a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
golang.org/x/crypto v0.8.0 h1:pd9TJtTueMTVQXzk8E2XESSMQDj/U7OUu0PqJqPXQjQ=
golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561 h1:MDc5xs78ZrZr3HMQugiXOAkSZtfTpbJLDr/lwfgO53E=
golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk=
golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM=
golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181021155630-eda9bb28ed51/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200102141924-c96a22e43c9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201223074533-0d417f636930/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220906165534-d0df966e6959/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU=
golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
golang.org/x/term v0.7.0 h1:BEvjmm5fURWqcfbSKTdpkDXYBrUS1c0m8agp14W48vQ=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.1.0 h1:xYY+Bajn2a7VBmTM5GikTmnK8ZuX8YgnQCqZpbBNtmA=
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE=
golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.8.0 h1:vSDcovVPld282ceKgDimkRSC8kpaH1dgyc9UMzlt84Y=
golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk=
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg=
google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE=
google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/djherbis/times.v1 v1.2.0/go.mod h1:AQlg6unIsrsCEdQYhTzERy542dz6SFdQFZFv6mUY0P8=
gopkg.in/djherbis/times.v1 v1.3.0 h1:uxMS4iMtH6Pwsxog094W0FYldiNnfY/xba00vq6C2+o=
gopkg.in/djherbis/times.v1 v1.3.0/go.mod h1:AQlg6unIsrsCEdQYhTzERy542dz6SFdQFZFv6mUY0P8=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo=
gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0 h1:POO/ycCATvegFmVuPpQzZFJ+pGZeX22Ufu6fibxDVjU=
gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg=
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk=
gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
howett.net/plist v1.0.0 h1:7CrbWYbPPO/PyNy38b2EB/+gYbjCe2DXBxgtOOZbSQM=
howett.net/plist v1.0.0/go.mod h1:lqaXoTrLY4hg8tnEzNru53gicrbv7rrk+2xJA/7hw9g=
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw=
k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
k8s.io/mount-utils v0.23.0 h1:8sGMlbbQOA268SidZVoL7wOgEcbByoa6+bvFZCywhbg=
k8s.io/mount-utils v0.23.0/go.mod h1:9pFhzVjxle1osJUo++9MFDat9HPkQUOoHCn+eExZ3Ew=
k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
k8s.io/utils v0.0.0-20230220204549-a5ecb0141aa5 h1:kmDqav+P+/5e1i9tFfHq1qcF3sOrDp+YEkVDAHu7Jwk=
k8s.io/utils v0.0.0-20230220204549-a5ecb0141aa5/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
pault.ag/go/modprobe v0.1.2 h1:bblunaPhqpTxGDJ5TVFW/4gheohBPleF2dIV6j6sWkI=
pault.ag/go/modprobe v0.1.2/go.mod h1:afr2STC/2Maz/qi4+Bma1s0dszZgO/PcM8AKar9DWhM=
pault.ag/go/topsort v0.0.0-20160530003732-f98d2ad46e1a/go.mod h1:INqx0ClF7kmPAMk2zVTX8DRnhZ/yaA/Mg52g8KFKE7k=
pault.ag/go/topsort v0.1.1 h1:L0QnhUly6LmTv0e3DEzbN2q6/FGgAcQvaEw65S53Bg4=
pault.ag/go/topsort v0.1.1/go.mod h1:r1kc/L0/FZ3HhjezBIPaNVhkqv8L0UJ9bxRuHRVZ0q4=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
  0707010000004B000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000001D00000000elemental-cli-0.3.1/internal  0707010000004C000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000002500000000elemental-cli-0.3.1/internal/version  0707010000004D000081A4000000000000000000000001645E367C000004CF000000000000000000000000000000000000003000000000elemental-cli-0.3.1/internal/version/version.go   /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package version

import (
	"runtime"
)

var (
	version = "v0.0.1"
	// gitCommit is the git sha1
	gitCommit = ""
)

// BuildInfo describes the compile time information.
type BuildInfo struct {
	// Version is the current semver.
	Version string `json:"version,omitempty"`
	// GitCommit is the git sha1.
	GitCommit string `json:"git_commit,omitempty"`
	// GoVersion is the version of the Go compiler used.
	GoVersion string `json:"go_version,omitempty"`
}

func GetVersion() string {
	return version
}

// Get returns build info
func Get() BuildInfo {
	v := BuildInfo{
		Version:   GetVersion(),
		GitCommit: gitCommit,
		GoVersion: runtime.Version(),
	}

	return v
}
 0707010000004E000081A4000000000000000000000001645E367C00000292000000000000000000000000000000000000001C00000000elemental-cli-0.3.1/main.go   /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package main

import "github.com/rancher/elemental-cli/cmd"

func main() {
	cmd.Execute()
}
  0707010000004F000041ED00000000000000000000000E645E367C00000000000000000000000000000000000000000000001800000000elemental-cli-0.3.1/pkg   07070100000050000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000001F00000000elemental-cli-0.3.1/pkg/action    07070100000051000081A4000000000000000000000001645E367C000002FF000000000000000000000000000000000000003400000000elemental-cli-0.3.1/pkg/action/action_suite_test.go   /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

	http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package action_test

import (
	"testing"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

func TestActionSuite(t *testing.T) {
	RegisterFailHandler(Fail)
	RunSpecs(t, "Actions test suite")
}
 07070100000052000081A4000000000000000000000001645E367C00002338000000000000000000000000000000000000002C00000000elemental-cli-0.3.1/pkg/action/build-iso.go   /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package action

import (
	"fmt"
	"path/filepath"
	"time"

	"github.com/rancher/elemental-cli/pkg/constants"
	"github.com/rancher/elemental-cli/pkg/elemental"
	elementalError "github.com/rancher/elemental-cli/pkg/error"
	"github.com/rancher/elemental-cli/pkg/live"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	"github.com/rancher/elemental-cli/pkg/utils"
)

type LiveBootloader interface {
	PrepareEFI(rootDir, uefiDir string) error
	PrepareISO(rootDir, isoDir string) error
}

type BuildISOAction struct {
	liveBoot LiveBootloader
	cfg      *v1.BuildConfig
	spec     *v1.LiveISO
	e        *elemental.Elemental
}

type BuildISOActionOption func(a *BuildISOAction)

func WithLiveBoot(l LiveBootloader) BuildISOActionOption {
	return func(a *BuildISOAction) {
		a.liveBoot = l
	}
}

func NewBuildISOAction(cfg *v1.BuildConfig, spec *v1.LiveISO, opts ...BuildISOActionOption) *BuildISOAction {
	b := &BuildISOAction{
		cfg:      cfg,
		e:        elemental.NewElemental(&cfg.Config),
		spec:     spec,
		liveBoot: live.NewGreenLiveBootLoader(cfg, spec),
	}
	for _, opt := range opts {
		opt(b)
	}
	return b
}

// BuildISORun will install the system from a given configuration
func (b *BuildISOAction) ISORun() error {
	cleanup := utils.NewCleanStack()
	var err error
	defer func() { err = cleanup.Cleanup(err) }()

	isoTmpDir, err := utils.TempDir(b.cfg.Fs, "", "elemental-iso")
	if err != nil {
		return elementalError.NewFromError(err, elementalError.CreateTempDir)
	}
	cleanup.Push(func() error { return b.cfg.Fs.RemoveAll(isoTmpDir) })

	rootDir := filepath.Join(isoTmpDir, "rootfs")
	err = utils.MkdirAll(b.cfg.Fs, rootDir, constants.DirPerm)
	if err != nil {
		b.cfg.Logger.Errorf("Failed creating rootfs dir: %s", rootDir)
		return elementalError.NewFromError(err, elementalError.CreateDir)
	}

	uefiDir := filepath.Join(isoTmpDir, "uefi")
	err = utils.MkdirAll(b.cfg.Fs, uefiDir, constants.DirPerm)
	if err != nil {
		b.cfg.Logger.Errorf("Failed creating uefi dir: %s", uefiDir)
		return elementalError.NewFromError(err, elementalError.CreateDir)
	}

	isoDir := filepath.Join(isoTmpDir, "iso")
	err = utils.MkdirAll(b.cfg.Fs, isoDir, constants.DirPerm)
	if err != nil {
		b.cfg.Logger.Errorf("Failed creating iso dir: %s", isoDir)
		return elementalError.NewFromError(err, elementalError.CreateDir)
	}

	if b.cfg.OutDir != "" {
		err = utils.MkdirAll(b.cfg.Fs, b.cfg.OutDir, constants.DirPerm)
		if err != nil {
			b.cfg.Logger.Errorf("Failed creating output dir: %s", b.cfg.OutDir)
			return elementalError.NewFromError(err, elementalError.CreateDir)
		}
	}

	b.cfg.Logger.Infof("Preparing squashfs root (%v source)...", len(b.spec.RootFS))
	err = b.applySources(rootDir, b.spec.RootFS...)
	if err != nil {
		b.cfg.Logger.Errorf("Failed installing OS packages: %v", err)
		return err
	}
	err = utils.CreateDirStructure(b.cfg.Fs, rootDir)
	if err != nil {
		b.cfg.Logger.Errorf("Failed creating root directory structure: %v", err)
		return elementalError.NewFromError(err, elementalError.CreateDir)
	}

	if b.spec.Firmware == v1.EFI {
		b.cfg.Logger.Infof("Preparing EFI image...")
		if b.spec.BootloaderInRootFs {
			err = b.liveBoot.PrepareEFI(rootDir, uefiDir)
			if err != nil {
				b.cfg.Logger.Errorf("Failed fetching EFI data: %v", err)
				return elementalError.NewFromError(err, elementalError.CopyData)
			}
		}
		err = b.applySources(uefiDir, b.spec.UEFI...)
		if err != nil {
			b.cfg.Logger.Errorf("Failed installing EFI packages: %v", err)
			return err
		}
	}

	b.cfg.Logger.Infof("Preparing ISO image root tree...")
	if b.spec.BootloaderInRootFs {
		err = b.liveBoot.PrepareISO(rootDir, isoDir)
		if err != nil {
			b.cfg.Logger.Errorf("Failed fetching bootloader binaries: %v", err)
			return elementalError.NewFromError(err, elementalError.CreateFile)
		}
	}
	err = b.applySources(isoDir, b.spec.Image...)
	if err != nil {
		b.cfg.Logger.Errorf("Failed installing ISO image packages: %v", err)
		return err
	}

	err = b.prepareISORoot(isoDir, rootDir)
	if err != nil {
		b.cfg.Logger.Errorf("Failed preparing ISO's root tree: %v", err)
		return err
	}

	if b.spec.Firmware == v1.EFI {
		b.cfg.Logger.Info("Creating EFI image...")
		err = b.createEFI(uefiDir, filepath.Join(isoTmpDir, constants.ISOEFIImg))
		if err != nil {
			return err
		}
	}

	b.cfg.Logger.Infof("Creating ISO image...")
	err = b.burnISO(isoDir, filepath.Join(isoTmpDir, constants.ISOEFIImg))
	if err != nil {
		b.cfg.Logger.Errorf("Failed burning ISO file: %v", err)
		return err
	}

	return err
}

func (b BuildISOAction) prepareISORoot(isoDir string, rootDir string) error {
	kernel, initrd, err := b.e.FindKernelInitrd(rootDir)
	if err != nil {
		b.cfg.Logger.Error("Could not find kernel and/or initrd")
		return elementalError.NewFromError(err, elementalError.StatFile)
	}
	err = utils.MkdirAll(b.cfg.Fs, filepath.Join(isoDir, "boot"), constants.DirPerm)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.CreateDir)
	}
	//TODO document boot/kernel and boot/initrd expectation in bootloader config
	b.cfg.Logger.Debugf("Copying Kernel file %s to iso root tree", kernel)
	err = utils.CopyFile(b.cfg.Fs, kernel, filepath.Join(isoDir, constants.ISOKernelPath))
	if err != nil {
		return elementalError.NewFromError(err, elementalError.CopyFile)
	}

	b.cfg.Logger.Debugf("Copying initrd file %s to iso root tree", initrd)
	err = utils.CopyFile(b.cfg.Fs, initrd, filepath.Join(isoDir, constants.ISOInitrdPath))
	if err != nil {
		return elementalError.NewFromError(err, elementalError.CopyFile)
	}

	b.cfg.Logger.Info("Creating squashfs...")
	squashOptions := append(constants.GetDefaultSquashfsOptions(), b.cfg.SquashFsCompressionConfig...)
	err = utils.CreateSquashFS(b.cfg.Runner, b.cfg.Logger, rootDir, filepath.Join(isoDir, constants.ISORootFile), squashOptions)
	return elementalError.NewFromError(err, elementalError.MKFSCall)
}

func (b BuildISOAction) createEFI(root string, img string) error {
	efiSize, err := utils.DirSize(b.cfg.Fs, root)
	if err != nil {
		return err
	}

	// align efiSize to the next 4MB slot
	align := int64(4 * 1024 * 1024)
	efiSizeMB := (efiSize/align*align + align) / (1024 * 1024)

	err = b.e.CreateFileSystemImage(&v1.Image{
		File:  img,
		Size:  uint(efiSizeMB),
		FS:    constants.EfiFs,
		Label: constants.EfiLabel,
	})
	if err != nil {
		return err
	}

	files, err := b.cfg.Fs.ReadDir(root)
	if err != nil {
		return err
	}

	for _, f := range files {
		_, err = b.cfg.Runner.Run("mcopy", "-s", "-i", img, filepath.Join(root, f.Name()), "::")
		if err != nil {
			return err
		}
	}

	return nil
}

func (b BuildISOAction) burnISO(root, efiImg string) error {
	cmd := "xorriso"
	var outputFile string
	var isoFileName string

	if b.cfg.Date {
		currTime := time.Now()
		isoFileName = fmt.Sprintf("%s.%s.iso", b.cfg.Name, currTime.Format("20060102"))
	} else {
		isoFileName = fmt.Sprintf("%s.iso", b.cfg.Name)
	}

	outputFile = isoFileName
	if b.cfg.OutDir != "" {
		outputFile = filepath.Join(b.cfg.OutDir, outputFile)
	}

	if exists, _ := utils.Exists(b.cfg.Fs, outputFile); exists {
		b.cfg.Logger.Warnf("Overwriting already existing %s", outputFile)
		err := b.cfg.Fs.Remove(outputFile)
		if err != nil {
			return elementalError.NewFromError(err, elementalError.RemoveFile)
		}
	}

	args := []string{
		"-volid", b.spec.Label /*"-joliet", "on"*/, "-padding", "0",
		"-outdev", outputFile, "-map", root, "/", "-chmod", "0755", "--",
	}
	args = append(args, live.XorrisoBooloaderArgs(root, efiImg, b.spec.Firmware)...)

	out, err := b.cfg.Runner.Run(cmd, args...)
	b.cfg.Logger.Debugf("Xorriso: %s", string(out))
	if err != nil {
		return elementalError.NewFromError(err, elementalError.CommandRun)
	}

	checksum, err := utils.CalcFileChecksum(b.cfg.Fs, outputFile)
	if err != nil {
		b.cfg.Logger.Errorf("checksum computation failed: %v", err)
		return elementalError.NewFromError(err, elementalError.CalculateChecksum)
	}
	err = b.cfg.Fs.WriteFile(fmt.Sprintf("%s.sha256", outputFile), []byte(fmt.Sprintf("%s %s\n", checksum, isoFileName)), 0644)
	if err != nil {
		b.cfg.Logger.Errorf("cannot write checksum file: %v", err)
		return elementalError.NewFromError(err, elementalError.CreateFile)
	}

	return nil
}

func (b BuildISOAction) applySources(target string, sources ...*v1.ImageSource) error {
	for _, src := range sources {
		_, err := b.e.DumpSource(target, src)
		if err != nil {
			return elementalError.NewFromError(err, elementalError.DumpSource)
		}
	}
	return nil
}
07070100000053000081A4000000000000000000000001645E367C00001D92000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/pkg/action/build_test.go  /*
   Copyright © 2022 - 2023 SUSE LLC

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package action_test

import (
	"bytes"
	"errors"
	"path/filepath"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/sirupsen/logrus"
	"github.com/twpayne/go-vfs"
	"github.com/twpayne/go-vfs/vfst"

	"github.com/rancher/elemental-cli/pkg/action"
	"github.com/rancher/elemental-cli/pkg/config"
	"github.com/rancher/elemental-cli/pkg/constants"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	"github.com/rancher/elemental-cli/pkg/utils"
	v1mock "github.com/rancher/elemental-cli/tests/mocks"
)

var _ = Describe("Runtime Actions", func() {
	var cfg *v1.BuildConfig
	var runner *v1mock.FakeRunner
	var fs vfs.FS
	var logger v1.Logger
	var mounter *v1mock.ErrorMounter
	var syscall *v1mock.FakeSyscall
	var client *v1mock.FakeHTTPClient
	var cloudInit *v1mock.FakeCloudInitRunner
	var extractor *v1mock.FakeImageExtractor
	var cleanup func()
	var memLog *bytes.Buffer
	BeforeEach(func() {
		runner = v1mock.NewFakeRunner()
		syscall = &v1mock.FakeSyscall{}
		mounter = v1mock.NewErrorMounter()
		client = &v1mock.FakeHTTPClient{}
		memLog = &bytes.Buffer{}
		logger = v1.NewBufferLogger(memLog)
		logger.SetLevel(logrus.DebugLevel)
		extractor = v1mock.NewFakeImageExtractor(logger)
		cloudInit = &v1mock.FakeCloudInitRunner{}
		fs, cleanup, _ = vfst.NewTestFS(map[string]interface{}{})
		cfg = config.NewBuildConfig(
			config.WithFs(fs),
			config.WithRunner(runner),
			config.WithLogger(logger),
			config.WithMounter(mounter),
			config.WithSyscall(syscall),
			config.WithClient(client),
			config.WithCloudInitRunner(cloudInit),
			config.WithImageExtractor(extractor),
			config.WithPlatform("linux/amd64"),
		)

	})
	AfterEach(func() {
		cleanup()
	})
	Describe("Build ISO", Label("iso"), func() {
		var iso *v1.LiveISO
		BeforeEach(func() {
			iso = config.NewISO()

			tmpDir, err := utils.TempDir(fs, "", "test")
			Expect(err).ShouldNot(HaveOccurred())

			cfg.Date = false
			cfg.OutDir = tmpDir

			runner.SideEffect = func(cmd string, args ...string) ([]byte, error) {
				switch cmd {
				case "xorriso":
					err := fs.WriteFile(filepath.Join(tmpDir, "elemental.iso"), []byte("profound thoughts"), constants.FilePerm)
					return []byte{}, err
				default:
					return []byte{}, nil
				}
			}
		})
		It("Successfully builds an ISO from an OCI image", func() {
			rootSrc, _ := v1.NewSrcFromURI("oci:elementalos:latest")
			iso.RootFS = []*v1.ImageSource{rootSrc}

			extractor.SideEffect = func(_, destination, platform string, _ bool) error {
				bootDir := filepath.Join(destination, "boot")
				logger.Debugf("Creating %s", bootDir)
				err := utils.MkdirAll(fs, bootDir, constants.DirPerm)
				if err != nil {
					return err
				}
				_, err = fs.Create(filepath.Join(bootDir, "vmlinuz"))
				if err != nil {
					return err
				}

				_, err = fs.Create(filepath.Join(bootDir, "initrd"))
				return err
			}

			buildISO := action.NewBuildISOAction(cfg, iso)
			err := buildISO.ISORun()

			Expect(err).ShouldNot(HaveOccurred())
		})
		It("Successfully builds an ISO using self contained binaries and including overlayed files", func() {
			rootFs := []string{"dir:/overlay/dir"}
			for _, src := range rootFs {
				rootSrc, _ := v1.NewSrcFromURI(src)
				iso.RootFS = append(iso.RootFS, rootSrc)
			}

			err := utils.MkdirAll(fs, "/overlay/dir/boot", constants.DirPerm)
			Expect(err).ShouldNot(HaveOccurred())
			_, err = fs.Create("/overlay/dir/boot/vmlinuz")
			Expect(err).ShouldNot(HaveOccurred())
			_, err = fs.Create("/overlay/dir/boot/initrd")
			Expect(err).ShouldNot(HaveOccurred())

			liveBoot := &v1mock.LiveBootLoaderMock{}
			buildISO := action.NewBuildISOAction(cfg, iso, action.WithLiveBoot(liveBoot))
			err = buildISO.ISORun()

			Expect(err).ShouldNot(HaveOccurred())
		})
		It("Fails on prepare EFI", func() {
			iso.BootloaderInRootFs = true

			rootSrc, _ := v1.NewSrcFromURI("oci:elementalos:latest")
			iso.RootFS = append(iso.RootFS, rootSrc)

			liveBoot := &v1mock.LiveBootLoaderMock{ErrorEFI: true}
			buildISO := action.NewBuildISOAction(cfg, iso, action.WithLiveBoot(liveBoot))
			err := buildISO.ISORun()

			Expect(err).Should(HaveOccurred())
		})
		It("Fails on prepare ISO", func() {
			iso.BootloaderInRootFs = true

			rootSrc, _ := v1.NewSrcFromURI("channel:system/elemental")
			iso.RootFS = append(iso.RootFS, rootSrc)

			liveBoot := &v1mock.LiveBootLoaderMock{ErrorISO: true}
			buildISO := action.NewBuildISOAction(cfg, iso, action.WithLiveBoot(liveBoot))
			err := buildISO.ISORun()

			Expect(err).Should(HaveOccurred())
		})
		It("Fails if kernel or initrd is not found in rootfs", func() {
			rootSrc, _ := v1.NewSrcFromURI("dir:/local/dir")
			iso.RootFS = []*v1.ImageSource{rootSrc}

			err := utils.MkdirAll(fs, "/local/dir/boot", constants.DirPerm)
			Expect(err).ShouldNot(HaveOccurred())

			By("fails without kernel")
			buildISO := action.NewBuildISOAction(cfg, iso)
			err = buildISO.ISORun()
			Expect(err).Should(HaveOccurred())

			By("fails without initrd")
			_, err = fs.Create("/local/dir/boot/vmlinuz")
			Expect(err).ShouldNot(HaveOccurred())
			buildISO = action.NewBuildISOAction(cfg, iso)
			err = buildISO.ISORun()
			Expect(err).Should(HaveOccurred())
		})
		It("Fails installing rootfs sources", func() {
			rootSrc, _ := v1.NewSrcFromURI("channel:system/elemental")
			iso.RootFS = []*v1.ImageSource{rootSrc}

			buildISO := action.NewBuildISOAction(cfg, iso)
			err := buildISO.ISORun()
			Expect(err).Should(HaveOccurred())
		})
		It("Fails installing uefi sources", func() {
			rootSrc, _ := v1.NewSrcFromURI("docker:elemental:latest")
			iso.RootFS = []*v1.ImageSource{rootSrc}
			uefiSrc, _ := v1.NewSrcFromURI("channel:live/efi")
			iso.UEFI = []*v1.ImageSource{uefiSrc}

			buildISO := action.NewBuildISOAction(cfg, iso)
			err := buildISO.ISORun()
			Expect(err).Should(HaveOccurred())
		})
		It("Fails installing image sources", func() {
			rootSrc, _ := v1.NewSrcFromURI("docker:elemental:latest")
			iso.RootFS = []*v1.ImageSource{rootSrc}
			uefiSrc, _ := v1.NewSrcFromURI("docker:registry.suse.com/custom-uefi:v0.1")
			iso.UEFI = []*v1.ImageSource{uefiSrc}

			buildISO := action.NewBuildISOAction(cfg, iso)
			err := buildISO.ISORun()
			Expect(err).Should(HaveOccurred())
		})
		It("Fails on ISO filesystem creation", func() {
			rootSrc, _ := v1.NewSrcFromURI("dir:/local/dir")
			iso.RootFS = []*v1.ImageSource{rootSrc}

			err := utils.MkdirAll(fs, "/local/dir/boot", constants.DirPerm)
			Expect(err).ShouldNot(HaveOccurred())
			_, err = fs.Create("/local/dir/boot/vmlinuz")
			Expect(err).ShouldNot(HaveOccurred())
			_, err = fs.Create("/local/dir/boot/initrd")
			Expect(err).ShouldNot(HaveOccurred())

			runner.SideEffect = func(command string, args ...string) ([]byte, error) {
				if command == "xorriso" {
					return []byte{}, errors.New("Burn ISO error")
				}
				return []byte{}, nil
			}

			buildISO := action.NewBuildISOAction(cfg, iso)
			err = buildISO.ISORun()

			Expect(err).Should(HaveOccurred())
		})
	})
})
  07070100000054000081A4000000000000000000000001645E367C000008BA000000000000000000000000000000000000002900000000elemental-cli-0.3.1/pkg/action/common.go  /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package action

import (
	"github.com/sirupsen/logrus"

	elementalError "github.com/rancher/elemental-cli/pkg/error"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	"github.com/rancher/elemental-cli/pkg/utils"
)

// Hook is RunStage wrapper that only adds logic to ignore errors
// in case v1.RunConfig.Strict is set to false
func Hook(config *v1.Config, hook string, strict bool, cloudInitPaths ...string) error {
	config.Logger.Infof("Running %s hook", hook)
	oldLevel := config.Logger.GetLevel()
	config.Logger.SetLevel(logrus.ErrorLevel)
	err := utils.RunStage(config, hook, strict, cloudInitPaths...)
	config.Logger.SetLevel(oldLevel)
	if !strict {
		err = nil
	}
	return err
}

// ChrootHook executes Hook inside a chroot environment
func ChrootHook(config *v1.Config, hook string, strict bool, chrootDir string, bindMounts map[string]string, cloudInitPaths ...string) (err error) {
	callback := func() error {
		return Hook(config, hook, strict, cloudInitPaths...)
	}
	return utils.ChrootedCallback(config, chrootDir, bindMounts, callback)
}

// PowerAction executes a power-action (Reboot/PowerOff) after completed
// install or upgrade and returns any encountered error.
func PowerAction(cfg *v1.RunConfig) error {
	// Reboot, poweroff or nothing
	var (
		err  error
		code int
	)

	if cfg.Reboot {
		cfg.Logger.Infof("Rebooting in 5 seconds")
		if err = utils.Reboot(cfg.Runner, 5); err != nil {
			code = elementalError.Reboot
		}
	} else if cfg.PowerOff {
		cfg.Logger.Infof("Shutting down in 5 seconds")
		if err = utils.Shutdown(cfg.Runner, 5); err != nil {
			code = elementalError.PowerOff
		}
	}

	return elementalError.NewFromError(err, code)
}
  07070100000055000081A4000000000000000000000001645E367C00002728000000000000000000000000000000000000002A00000000elemental-cli-0.3.1/pkg/action/install.go /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package action

import (
	"fmt"
	"path/filepath"
	"time"

	cnst "github.com/rancher/elemental-cli/pkg/constants"
	"github.com/rancher/elemental-cli/pkg/elemental"
	elementalError "github.com/rancher/elemental-cli/pkg/error"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	"github.com/rancher/elemental-cli/pkg/utils"
)

func (i *InstallAction) installHook(hook string) error {
	return Hook(&i.cfg.Config, hook, i.cfg.Strict, i.cfg.CloudInitPaths...)
}

func (i *InstallAction) installChrootHook(hook string, root string) error {
	extraMounts := map[string]string{}
	persistent := i.spec.Partitions.Persistent
	if persistent != nil && persistent.MountPoint != "" {
		extraMounts[persistent.MountPoint] = cnst.UsrLocalPath
	}
	oem := i.spec.Partitions.OEM
	if oem != nil && oem.MountPoint != "" {
		extraMounts[oem.MountPoint] = cnst.OEMPath
	}
	return ChrootHook(&i.cfg.Config, hook, i.cfg.Strict, root, extraMounts, i.cfg.CloudInitPaths...)
}

func (i *InstallAction) createInstallStateYaml(sysMeta, recMeta interface{}) error {
	if i.spec.Partitions.State == nil || i.spec.Partitions.Recovery == nil {
		return fmt.Errorf("undefined state or recovery partition")
	}

	// If recovery image is a copyied file from active reuse the same source and metadata
	recSource := i.spec.Recovery.Source
	if i.spec.Recovery.Source.IsFile() && i.spec.Active.File == i.spec.Recovery.Source.Value() {
		recMeta = sysMeta
		recSource = i.spec.Active.Source
	}

	installState := &v1.InstallState{
		Date: time.Now().Format(time.RFC3339),
		Partitions: map[string]*v1.PartitionState{
			cnst.StatePartName: {
				FSLabel: i.spec.Partitions.State.FilesystemLabel,
				Images: map[string]*v1.ImageState{
					cnst.ActiveImgName: {
						Source:         i.spec.Active.Source,
						SourceMetadata: sysMeta,
						Label:          i.spec.Active.Label,
						FS:             i.spec.Active.FS,
					},
					cnst.PassiveImgName: {
						Source:         i.spec.Active.Source,
						SourceMetadata: sysMeta,
						Label:          i.spec.Passive.Label,
						FS:             i.spec.Passive.FS,
					},
				},
			},
			cnst.RecoveryPartName: {
				FSLabel: i.spec.Partitions.Recovery.FilesystemLabel,
				Images: map[string]*v1.ImageState{
					cnst.RecoveryImgName: {
						Source:         recSource,
						SourceMetadata: recMeta,
						Label:          i.spec.Recovery.Label,
						FS:             i.spec.Recovery.FS,
					},
				},
			},
		},
	}
	if i.spec.Partitions.OEM != nil {
		installState.Partitions[cnst.OEMPartName] = &v1.PartitionState{
			FSLabel: i.spec.Partitions.OEM.FilesystemLabel,
		}
	}
	if i.spec.Partitions.Persistent != nil {
		installState.Partitions[cnst.PersistentPartName] = &v1.PartitionState{
			FSLabel: i.spec.Partitions.Persistent.FilesystemLabel,
		}
	}
	if i.spec.Partitions.EFI != nil {
		installState.Partitions[cnst.EfiPartName] = &v1.PartitionState{
			FSLabel: i.spec.Partitions.EFI.FilesystemLabel,
		}
	}

	return i.cfg.WriteInstallState(
		installState,
		filepath.Join(i.spec.Partitions.State.MountPoint, cnst.InstallStateFile),
		filepath.Join(i.spec.Partitions.Recovery.MountPoint, cnst.InstallStateFile),
	)
}

type InstallAction struct {
	cfg  *v1.RunConfig
	spec *v1.InstallSpec
}

func NewInstallAction(cfg *v1.RunConfig, spec *v1.InstallSpec) *InstallAction {
	return &InstallAction{cfg: cfg, spec: spec}
}

// InstallRun will install the system from a given configuration
func (i InstallAction) Run() (err error) {
	e := elemental.NewElemental(&i.cfg.Config)
	cleanup := utils.NewCleanStack()
	defer func() { err = cleanup.Cleanup(err) }()

	// Set installation sources from a downloaded ISO
	if i.spec.Iso != "" {
		isoCleaner, err := e.UpdateSourceFormISO(i.spec.Iso, &i.spec.Active)
		cleanup.Push(isoCleaner)
		if err != nil {
			return elementalError.NewFromError(err, elementalError.Unknown)
		}
	}

	// Partition and format device if needed
	err = i.prepareDevice(e)
	if err != nil {
		return err
	}

	err = e.MountPartitions(i.spec.Partitions.PartitionsByMountPoint(false))
	if err != nil {
		return elementalError.NewFromError(err, elementalError.MountPartitions)
	}
	cleanup.Push(func() error {
		return e.UnmountPartitions(i.spec.Partitions.PartitionsByMountPoint(true))
	})

	// Before install hook happens after partitioning but before the image OS is applied
	err = i.installHook(cnst.BeforeInstallHook)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.HookBeforeInstall)
	}

	// Deploy active image
	systemMeta, treeCleaner, err := e.DeployImgTree(&i.spec.Active, cnst.WorkingImgDir)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.DeployImgTree)
	}
	cleanup.Push(func() error { return treeCleaner() })

	// Copy cloud-init if any
	err = e.CopyCloudConfig(i.spec.CloudInit)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.CopyFile)
	}
	// Install grub
	grub := utils.NewGrub(&i.cfg.Config)
	err = grub.Install(
		i.spec.Target,
		cnst.WorkingImgDir,
		i.spec.Partitions.State.MountPoint,
		i.spec.GrubConf,
		i.spec.Firmware == v1.EFI,
		i.spec.Partitions.State.FilesystemLabel,
		i.spec.DisableBootEntry,
		true,
	)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.InstallGrub)
	}

	// Relabel SELinux
	err = i.applySelinuxLabels(e)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.SelinuxRelabel)
	}

	err = i.installChrootHook(cnst.AfterInstallChrootHook, cnst.WorkingImgDir)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.HookAfterInstallChroot)
	}
	err = i.installHook(cnst.AfterInstallHook)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.HookAfterInstall)
	}

	grubVars := i.spec.GetGrubLabels()
	err = grub.SetPersistentVariables(
		filepath.Join(i.spec.Partitions.State.MountPoint, cnst.GrubOEMEnv),
		grubVars,
	)
	if err != nil {
		i.cfg.Logger.Error("Error setting GRUB labels: %s", err)
		return elementalError.NewFromError(err, elementalError.SetGrubVariables)
	}

	// Installation rebrand (only grub for now)
	err = e.SetDefaultGrubEntry(
		i.spec.Partitions.State.MountPoint,
		cnst.WorkingImgDir,
		i.spec.GrubDefEntry,
	)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.SetDefaultGrubEntry)
	}

	err = e.CreateImgFromTree(cnst.WorkingImgDir, &i.spec.Active, treeCleaner)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.CreateImgFromTree)
	}

	// Install Recovery
	var recoveryMeta interface{}
	if i.spec.Recovery.Source.IsFile() && i.spec.Active.File == i.spec.Recovery.Source.Value() && i.spec.Active.FS == i.spec.Recovery.FS {
		// Reuse image file from active image
		err := e.CopyFileImg(&i.spec.Recovery)
		if err != nil {
			return elementalError.NewFromError(err, elementalError.CopyFileImg)
		}
	} else {
		recoveryMeta, err = e.DeployImage(&i.spec.Recovery)
		if err != nil {
			return elementalError.NewFromError(err, elementalError.DeployImage)
		}
	}

	// Install Passive
	err = e.CopyFileImg(&i.spec.Passive)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.DeployImage)
	}

	err = i.installHook(cnst.PostInstallHook)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.HookPostInstall)
	}

	// Add state.yaml file on state and recovery partitions
	err = i.createInstallStateYaml(systemMeta, recoveryMeta)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.CreateFile)
	}

	// Do not reboot/poweroff on cleanup errors
	err = cleanup.Cleanup(err)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.Cleanup)
	}

	// If we want to eject the cd, create the required executable so the cd is ejected at shutdown
	if i.cfg.EjectCD && utils.BootedFrom(i.cfg.Runner, "cdroot") {
		i.cfg.Logger.Infof("Writing eject script")
		err = i.cfg.Fs.WriteFile("/usr/lib/systemd/system-shutdown/eject", []byte(cnst.EjectScript), 0744)
		if err != nil {
			i.cfg.Logger.Warnf("Could not write eject script, cdrom wont be ejected automatically: %s", err)
		}
	}

	return PowerAction(i.cfg)
}

// applySelinuxLabels sets SELinux extended attributes to the root-tree being installed
func (i *InstallAction) applySelinuxLabels(e *elemental.Elemental) error {
	binds := map[string]string{}
	if mnt, _ := utils.IsMounted(&i.cfg.Config, i.spec.Partitions.Persistent); mnt {
		binds[i.spec.Partitions.Persistent.MountPoint] = cnst.UsrLocalPath
	}
	if mnt, _ := utils.IsMounted(&i.cfg.Config, i.spec.Partitions.OEM); mnt {
		binds[i.spec.Partitions.OEM.MountPoint] = cnst.OEMPath
	}
	return utils.ChrootedCallback(
		&i.cfg.Config, cnst.WorkingImgDir, binds, func() error { return e.SelinuxRelabel("/", true) },
	)
}

func (i *InstallAction) prepareDevice(e *elemental.Elemental) error {
	if i.spec.NoFormat {
		// Check force flag against current device
		labels := []string{i.spec.Active.Label, i.spec.Recovery.Label}
		if e.CheckActiveDeployment(labels) && !i.spec.Force {
			return elementalError.New("use `force` flag to run an installation over the current running deployment", elementalError.AlreadyInstalled)
		}
	} else {
		// Deactivate any active volume on target
		err := e.DeactivateDevices()
		if err != nil {
			return elementalError.NewFromError(err, elementalError.DeactivatingDevices)
		}
		// Partition device
		err = e.PartitionAndFormatDevice(i.spec)
		if err != nil {
			return elementalError.NewFromError(err, elementalError.PartitioningDevice)
		}
	}
	return nil
}
07070100000056000081A4000000000000000000000001645E367C00003245000000000000000000000000000000000000002F00000000elemental-cli-0.3.1/pkg/action/install_test.go    /*
   Copyright © 2022 - 2023 SUSE LLC

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package action_test

import (
	"bytes"
	"errors"
	"fmt"
	"os"
	"path/filepath"
	"strings"

	"github.com/jaypipes/ghw/pkg/block"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/twpayne/go-vfs"
	"github.com/twpayne/go-vfs/vfst"

	"github.com/rancher/elemental-cli/pkg/action"
	conf "github.com/rancher/elemental-cli/pkg/config"
	"github.com/rancher/elemental-cli/pkg/constants"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	"github.com/rancher/elemental-cli/pkg/utils"
	v1mock "github.com/rancher/elemental-cli/tests/mocks"
)

const printOutput = `BYT;
/dev/loop0:50593792s:loopback:512:512:gpt:Loopback device:;`
const partTmpl = `
%d:%ss:%ss:2048s:ext4::type=83;`

var _ = Describe("Install action tests", func() {
	var config *v1.RunConfig
	var runner *v1mock.FakeRunner
	var fs vfs.FS
	var logger v1.Logger
	var mounter *v1mock.ErrorMounter
	var syscall *v1mock.FakeSyscall
	var client *v1mock.FakeHTTPClient
	var cloudInit *v1mock.FakeCloudInitRunner
	var extractor *v1mock.FakeImageExtractor
	var cleanup func()
	var memLog *bytes.Buffer
	var ghwTest v1mock.GhwMock

	BeforeEach(func() {
		runner = v1mock.NewFakeRunner()
		syscall = &v1mock.FakeSyscall{}
		mounter = v1mock.NewErrorMounter()
		client = &v1mock.FakeHTTPClient{}
		memLog = &bytes.Buffer{}
		logger = v1.NewBufferLogger(memLog)
		logger.SetLevel(v1.DebugLevel())
		extractor = v1mock.NewFakeImageExtractor(logger)
		var err error
		fs, cleanup, err = vfst.NewTestFS(map[string]interface{}{})
		Expect(err).Should(BeNil())

		cloudInit = &v1mock.FakeCloudInitRunner{}
		config = conf.NewRunConfig(
			conf.WithFs(fs),
			conf.WithRunner(runner),
			conf.WithLogger(logger),
			conf.WithMounter(mounter),
			conf.WithSyscall(syscall),
			conf.WithClient(client),
			conf.WithCloudInitRunner(cloudInit),
			conf.WithImageExtractor(extractor),
			conf.WithPlatform("linux/amd64"),
		)
	})

	AfterEach(func() {
		cleanup()
	})

	Describe("Install Action", Label("install"), func() {
		var device, cmdFail string
		var err error
		var cmdline func() ([]byte, error)
		var spec *v1.InstallSpec
		var installer *action.InstallAction

		BeforeEach(func() {
			device = "/some/device"
			err = utils.MkdirAll(fs, filepath.Dir(device), constants.DirPerm)
			Expect(err).To(BeNil())
			_, err = fs.Create(device)
			Expect(err).ShouldNot(HaveOccurred())

			partNum := 0
			partedOut := printOutput
			cmdFail = ""
			runner.SideEffect = func(cmd string, args ...string) ([]byte, error) {
				if cmdFail == cmd {
					return []byte{}, errors.New(fmt.Sprintf("failed on %s", cmd))
				}
				switch cmd {
				case "parted":
					idx := 0
					for i, arg := range args {
						if arg == "mkpart" {
							idx = i
							break
						}
					}
					if idx > 0 {
						partNum++
						partedOut += fmt.Sprintf(partTmpl, partNum, args[idx+3], args[idx+4])
						_, _ = fs.Create(fmt.Sprintf("/some/device%d", partNum))
					}
					return []byte(partedOut), nil
				case "lsblk":
					return []byte(`{
"blockdevices":
    [
        {"label": "COS_ACTIVE", "type": "loop", "path": "/some/loop0"},
        {"label": "COS_OEM", "type": "part", "path": "/some/device1"},
        {"label": "COS_RECOVERY", "type": "part", "path": "/some/device2"},
        {"label": "COS_STATE", "type": "part", "path": "/some/device3"},
        {"label": "COS_PERSISTENT", "type": "part", "path": "/some/device4"}
    ]
}`), nil
				case "cat":
					if args[0] == "/proc/cmdline" {
						return cmdline()
					}
					return []byte{}, nil
				case "grub2-editenv":
					if args[1] == "set" {
						f, err := fs.OpenFile(args[0], os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)

						Expect(err).To(BeNil())

						_, err = f.Write([]byte(fmt.Sprintf("%s\n", args[2])))
						Expect(err).To(BeNil())
					}
					return []byte{}, nil
				default:
					return []byte{}, nil
				}
			}
			// Need to create the IsoBaseTree, like if we are booting from iso
			err = utils.MkdirAll(fs, constants.ISOBaseTree, constants.DirPerm)
			Expect(err).To(BeNil())

			spec = conf.NewInstallSpec(config.Config)
			spec.Active.Size = 16

			grubCfg := filepath.Join(constants.WorkingImgDir, constants.GrubConf)
			err = utils.MkdirAll(fs, filepath.Dir(grubCfg), constants.DirPerm)
			Expect(err).To(BeNil())
			_, err = fs.Create(grubCfg)
			Expect(err).To(BeNil())

			// Set default cmdline function so we dont panic :o
			cmdline = func() ([]byte, error) {
				return []byte{}, nil
			}
			mainDisk := block.Disk{
				Name: "device",
				Partitions: []*block.Partition{
					{
						Name:            "device1",
						FilesystemLabel: "COS_GRUB",
						Type:            "ext4",
					},
					{
						Name:            "device2",
						FilesystemLabel: "COS_STATE",
						Type:            "ext4",
					},
					{
						Name:            "device3",
						FilesystemLabel: "COS_PERSISTENT",
						Type:            "ext4",
					},
					{
						Name:            "device4",
						FilesystemLabel: "COS_ACTIVE",
						Type:            "ext4",
					},
					{
						Name:            "device5",
						FilesystemLabel: "COS_PASSIVE",
						Type:            "ext4",
					},
					{
						Name:            "device5",
						FilesystemLabel: "COS_RECOVERY",
						Type:            "ext4",
					},
					{
						Name:            "device6",
						FilesystemLabel: "COS_OEM",
						Type:            "ext4",
					},
				},
			}
			ghwTest = v1mock.GhwMock{}
			ghwTest.AddDisk(mainDisk)
			ghwTest.CreateDevices()

			installer = action.NewInstallAction(config, spec)
		})
		AfterEach(func() {
			ghwTest.Clean()
		})

		It("Successfully installs", func() {
			spec.Target = device
			config.Reboot = true
			Expect(installer.Run()).To(BeNil())
			Expect(runner.IncludesCmds([][]string{{"reboot", "-f"}}))
		})

		It("Sets the executable /run/cos/ejectcd so systemd can eject the cd on restart", func() {
			_ = utils.MkdirAll(fs, "/usr/lib/systemd/system-shutdown", constants.DirPerm)
			_, err := fs.Stat("/usr/lib/systemd/system-shutdown/eject")
			Expect(err).To(HaveOccurred())
			// Override cmdline to return like we are booting from cd
			cmdline = func() ([]byte, error) {
				return []byte("cdroot"), nil
			}
			spec.Target = device
			config.EjectCD = true
			Expect(installer.Run()).To(BeNil())
			_, err = fs.Stat("/usr/lib/systemd/system-shutdown/eject")
			Expect(err).ToNot(HaveOccurred())
			file, err := fs.ReadFile("/usr/lib/systemd/system-shutdown/eject")
			Expect(err).ToNot(HaveOccurred())
			Expect(file).To(ContainSubstring(constants.EjectScript))
		})

		It("ejectcd does nothing if we are not booting from cd", func() {
			_ = utils.MkdirAll(fs, "/usr/lib/systemd/system-shutdown", constants.DirPerm)
			_, err := fs.Stat("/usr/lib/systemd/system-shutdown/eject")
			Expect(err).To(HaveOccurred())
			spec.Target = device
			config.EjectCD = true
			Expect(installer.Run()).To(BeNil())
			_, err = fs.Stat("/usr/lib/systemd/system-shutdown/eject")
			Expect(err).To(HaveOccurred())
		})

		It("Successfully installs despite hooks failure", Label("hooks"), func() {
			cloudInit.Error = true
			spec.Target = device
			config.PowerOff = true
			Expect(installer.Run()).To(BeNil())
			Expect(runner.IncludesCmds([][]string{{"poweroff", "-f"}}))
		})

		It("Successfully installs without formatting despite detecting a previous installation", Label("no-format", "disk"), func() {
			spec.NoFormat = true
			spec.Force = true
			spec.Target = device
			Expect(installer.Run()).To(BeNil())
		})

		It("Successfully installs a docker image", Label("docker"), func() {
			spec.Target = device
			spec.Active.Source = v1.NewDockerSrc("my/image:latest")
			Expect(installer.Run()).To(BeNil())
		})

		It("Successfully sets GRUB labels", Label("grub"), func() {
			spec.Target = device
			Expect(installer.Run()).To(BeNil())

			grubOemEnvPath := filepath.Join(constants.StateDir, "grub_oem_env")
			Expect(utils.Exists(fs, grubOemEnvPath)).To(BeTrue())

			actualBytes, err := fs.ReadFile(filepath.Join(constants.StateDir, "grub_oem_env"))
			Expect(err).To(BeNil())

			expected := map[string]string{
				"state_label":      "COS_STATE",
				"active_label":     "COS_ACTIVE",
				"passive_label":    "COS_PASSIVE",
				"recovery_label":   "COS_RECOVERY",
				"system_label":     "COS_SYSTEM",
				"oem_label":        "COS_OEM",
				"persistent_label": "COS_PERSISTENT",
			}

			lines := strings.Split(string(actualBytes), "\n")

			Expect(len(lines) - 1).To(Equal(len(expected)))

			for _, line := range lines {
				if line == "" {
					continue
				}

				split := strings.SplitN(line, "=", 2)

				Expect(split[1]).To(Equal(expected[split[0]]))
			}
		})

		It("Successfully installs and adds remote cloud-config", Label("cloud-config"), func() {
			spec.Target = device
			spec.CloudInit = []string{"http://my.config.org"}
			utils.MkdirAll(fs, constants.OEMDir, constants.DirPerm)
			_, err := fs.Create(filepath.Join(constants.OEMDir, "90_custom.yaml"))
			Expect(err).ShouldNot(HaveOccurred())
			Expect(installer.Run()).To(BeNil())
			Expect(client.WasGetCalledWith("http://my.config.org")).To(BeTrue())
		})

		It("Fails if disk doesn't exist", Label("disk"), func() {
			spec.Target = "nonexistingdisk"
			Expect(installer.Run()).NotTo(BeNil())
		})

		It("Fails if some hook fails and strict is set", Label("strict"), func() {
			spec.Target = device
			config.Strict = true
			cloudInit.Error = true
			Expect(installer.Run()).NotTo(BeNil())
		})

		It("Fails to install from ISO if the ISO is not found", Label("iso"), func() {
			spec.Iso = "nonexistingiso"
			spec.Target = device
			Expect(installer.Run()).NotTo(BeNil())
		})

		It("Fails to install from ISO as rsync can't find the temporary root tree", Label("iso"), func() {
			fs.Create("cOS.iso")
			spec.Iso = "cOS.iso"
			spec.Target = device
			Expect(installer.Run()).NotTo(BeNil())
			Expect(spec.Active.Source.Value()).To(ContainSubstring("/rootfs"))
			Expect(spec.Active.Source.IsDir()).To(BeTrue())
		})

		It("Fails to install without formatting if a previous install is detected", Label("no-format", "disk"), func() {
			spec.NoFormat = true
			spec.Force = false
			spec.Target = device
			Expect(installer.Run()).NotTo(BeNil())
		})

		It("Fails to mount partitions", Label("disk", "mount"), func() {
			spec.Target = device
			mounter.ErrorOnMount = true
			Expect(installer.Run()).NotTo(BeNil())
		})

		It("Fails on blkdeactivate errors", Label("disk", "partitions"), func() {
			spec.Target = device
			cmdFail = "blkdeactivate"
			Expect(installer.Run()).NotTo(BeNil())
			Expect(runner.MatchMilestones([][]string{{"parted"}}))
		})

		It("Fails on parted errors", Label("disk", "partitions"), func() {
			spec.Target = device
			cmdFail = "parted"
			Expect(installer.Run()).NotTo(BeNil())
			Expect(runner.MatchMilestones([][]string{{"parted"}}))
		})

		It("Fails to unmount partitions", Label("disk", "partitions"), func() {
			spec.Target = device
			mounter.ErrorOnUnmount = true
			Expect(installer.Run()).NotTo(BeNil())
		})

		It("Fails to create a filesystem image", Label("disk", "image"), func() {
			spec.Target = device
			config.Fs = vfs.NewReadOnlyFS(fs)
			Expect(installer.Run()).NotTo(BeNil())
		})

		It("Fails if requested remote cloud config can't be downloaded", Label("cloud-config"), func() {
			spec.Target = device
			spec.CloudInit = []string{"http://my.config.org"}
			client.Error = true
			Expect(installer.Run()).NotTo(BeNil())
			Expect(client.WasGetCalledWith("http://my.config.org")).To(BeTrue())
		})

		It("Fails on grub2-install errors", Label("grub"), func() {
			spec.Target = device
			cmdFail = "grub2-install"
			Expect(installer.Run()).NotTo(BeNil())
			Expect(runner.MatchMilestones([][]string{{"grub2-install"}}))
		})

		It("Fails copying Passive image", Label("copy", "active"), func() {
			spec.Target = device
			cmdFail = "tune2fs"
			Expect(installer.Run()).NotTo(BeNil())
			Expect(runner.MatchMilestones([][]string{{"tune2fs", "-L", constants.PassiveLabel}}))
		})

		It("Fails setting the grub default entry", Label("grub"), func() {
			spec.Target = device
			spec.GrubDefEntry = "cOS"
			cmdFail = "grub2-editenv"
			Expect(installer.Run()).NotTo(BeNil())
			Expect(runner.MatchMilestones([][]string{{"grub2-editenv", filepath.Join(constants.StateDir, constants.GrubOEMEnv)}}))
		})
	})
})
   07070100000057000081A4000000000000000000000001645E367C00001FEC000000000000000000000000000000000000002800000000elemental-cli-0.3.1/pkg/action/reset.go   /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package action

import (
	"fmt"
	"path/filepath"
	"time"

	cnst "github.com/rancher/elemental-cli/pkg/constants"
	"github.com/rancher/elemental-cli/pkg/elemental"
	elementalError "github.com/rancher/elemental-cli/pkg/error"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	"github.com/rancher/elemental-cli/pkg/utils"
)

func (r *ResetAction) resetHook(hook string) error {
	return Hook(&r.cfg.Config, hook, r.cfg.Strict, r.cfg.CloudInitPaths...)
}

func (r *ResetAction) resetChrootHook(hook string, root string) error {
	extraMounts := map[string]string{}
	persistent := r.spec.Partitions.Persistent
	if persistent != nil && persistent.MountPoint != "" {
		extraMounts[persistent.MountPoint] = cnst.UsrLocalPath
	}
	oem := r.spec.Partitions.OEM
	if oem != nil && oem.MountPoint != "" {
		extraMounts[oem.MountPoint] = cnst.OEMPath
	}
	return ChrootHook(&r.cfg.Config, hook, r.cfg.Strict, root, extraMounts, r.cfg.CloudInitPaths...)
}

type ResetAction struct {
	cfg  *v1.RunConfig
	spec *v1.ResetSpec
}

func NewResetAction(cfg *v1.RunConfig, spec *v1.ResetSpec) *ResetAction {
	return &ResetAction{cfg: cfg, spec: spec}
}

func (r *ResetAction) updateInstallState(e *elemental.Elemental, cleanup *utils.CleanStack, meta interface{}) error {
	if r.spec.Partitions.Recovery == nil || r.spec.Partitions.State == nil {
		return fmt.Errorf("undefined state or recovery partition")
	}

	installState := &v1.InstallState{
		Date: time.Now().Format(time.RFC3339),
		Partitions: map[string]*v1.PartitionState{
			cnst.StatePartName: {
				FSLabel: r.spec.Partitions.State.FilesystemLabel,
				Images: map[string]*v1.ImageState{
					cnst.ActiveImgName: {
						Source:         r.spec.Active.Source,
						SourceMetadata: meta,
						Label:          r.spec.Active.Label,
						FS:             r.spec.Active.FS,
					},
					cnst.PassiveImgName: {
						Source:         r.spec.Active.Source,
						SourceMetadata: meta,
						Label:          r.spec.Passive.Label,
						FS:             r.spec.Passive.FS,
					},
				},
			},
		},
	}
	if r.spec.Partitions.OEM != nil {
		installState.Partitions[cnst.OEMPartName] = &v1.PartitionState{
			FSLabel: r.spec.Partitions.OEM.FilesystemLabel,
		}
	}
	if r.spec.Partitions.Persistent != nil {
		installState.Partitions[cnst.PersistentPartName] = &v1.PartitionState{
			FSLabel: r.spec.Partitions.Persistent.FilesystemLabel,
		}
	}
	if r.spec.State != nil && r.spec.State.Partitions != nil {
		installState.Partitions[cnst.RecoveryPartName] = r.spec.State.Partitions[cnst.RecoveryPartName]
	}

	umount, err := e.MountRWPartition(r.spec.Partitions.Recovery)
	if err != nil {
		return err
	}
	cleanup.Push(umount)

	return r.cfg.WriteInstallState(
		installState,
		filepath.Join(r.spec.Partitions.State.MountPoint, cnst.InstallStateFile),
		filepath.Join(r.spec.Partitions.Recovery.MountPoint, cnst.InstallStateFile),
	)
}

// ResetRun will reset the cos system to by following several steps
func (r ResetAction) Run() (err error) {
	e := elemental.NewElemental(&r.cfg.Config)
	cleanup := utils.NewCleanStack()
	defer func() { err = cleanup.Cleanup(err) }()

	// Unmount partitions if any is already mounted before formatting
	err = e.UnmountPartitions(r.spec.Partitions.PartitionsByMountPoint(true, r.spec.Partitions.Recovery))
	if err != nil {
		return elementalError.NewFromError(err, elementalError.UnmountPartitions)
	}

	// Reformat state partition
	err = e.FormatPartition(r.spec.Partitions.State)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.FormatPartitions)
	}

	// Reformat persistent partition
	if r.spec.FormatPersistent {
		persistent := r.spec.Partitions.Persistent
		if persistent != nil {
			err = e.FormatPartition(persistent)
			if err != nil {
				return elementalError.NewFromError(err, elementalError.FormatPartitions)
			}
		}
	}

	// Reformat OEM
	if r.spec.FormatOEM {
		oem := r.spec.Partitions.OEM
		if oem != nil {
			err = e.FormatPartition(oem)
			if err != nil {
				return elementalError.NewFromError(err, elementalError.FormatPartitions)
			}
		}
	}
	// Mount configured partitions
	err = e.MountPartitions(r.spec.Partitions.PartitionsByMountPoint(false, r.spec.Partitions.Recovery))
	if err != nil {
		return elementalError.NewFromError(err, elementalError.MountPartitions)
	}
	cleanup.Push(func() error {
		return e.UnmountPartitions(r.spec.Partitions.PartitionsByMountPoint(true, r.spec.Partitions.Recovery))
	})

	// Before reset hook happens once partitions are aready and before deploying the OS image
	err = r.resetHook(cnst.BeforeResetHook)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.HookBeforeReset)
	}

	// Deploy active image
	meta, treeCleaner, err := e.DeployImgTree(&r.spec.Active, cnst.WorkingImgDir)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.DeployImgTree)
	}
	cleanup.Push(func() error { return treeCleaner() })

	// install grub
	grub := utils.NewGrub(&r.cfg.Config)
	err = grub.Install(
		r.spec.Target,
		cnst.WorkingImgDir,
		r.spec.Partitions.State.MountPoint,
		r.spec.GrubConf,
		r.spec.Efi,
		r.spec.Partitions.State.FilesystemLabel,
		r.spec.DisableBootEntry,
		false,
	)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.InstallGrub)
	}

	// Relabel SELinux
	// TODO probably relabelling persistent volumes should be an opt in feature, it could
	// have undesired effects in case of failures
	binds := map[string]string{}
	if mnt, _ := utils.IsMounted(&r.cfg.Config, r.spec.Partitions.Persistent); mnt {
		binds[r.spec.Partitions.Persistent.MountPoint] = cnst.UsrLocalPath
	}
	if mnt, _ := utils.IsMounted(&r.cfg.Config, r.spec.Partitions.OEM); mnt {
		binds[r.spec.Partitions.OEM.MountPoint] = cnst.OEMPath
	}
	err = utils.ChrootedCallback(
		&r.cfg.Config, cnst.WorkingImgDir, binds,
		func() error { return e.SelinuxRelabel("/", true) },
	)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.SelinuxRelabel)
	}

	err = r.resetChrootHook(cnst.AfterResetChrootHook, cnst.WorkingImgDir)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.HookAfterResetChroot)
	}
	err = r.resetHook(cnst.AfterResetHook)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.HookAfterReset)
	}

	grubVars := r.spec.GetGrubLabels()
	err = grub.SetPersistentVariables(
		filepath.Join(r.spec.Partitions.State.MountPoint, cnst.GrubOEMEnv),
		grubVars,
	)
	if err != nil {
		r.cfg.Logger.Error("Error setting GRUB labels: %s", err)
		return elementalError.NewFromError(err, elementalError.SetGrubVariables)
	}

	// installation rebrand (only grub for now)
	err = e.SetDefaultGrubEntry(
		r.spec.Partitions.State.MountPoint,
		cnst.WorkingImgDir,
		r.spec.GrubDefEntry,
	)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.SetDefaultGrubEntry)
	}

	err = e.CreateImgFromTree(cnst.WorkingImgDir, &r.spec.Active, treeCleaner)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.CreateImgFromTree)
	}

	// Install Passive
	err = e.CopyFileImg(&r.spec.Passive)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.DeployImage)
	}

	err = r.resetHook(cnst.PostResetHook)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.HookPostReset)
	}

	err = r.updateInstallState(e, cleanup, meta)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.CreateFile)
	}

	// Do not reboot/poweroff on cleanup errors
	err = cleanup.Cleanup(err)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.Cleanup)
	}

	return PowerAction(r.cfg)
}
07070100000058000081A4000000000000000000000001645E367C00001EA3000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/pkg/action/reset_test.go  /*
   Copyright © 2022 - 2023 SUSE LLC

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package action_test

import (
	"bytes"
	"errors"
	"fmt"
	"os"
	"path/filepath"
	"strings"

	"github.com/jaypipes/ghw/pkg/block"
	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/twpayne/go-vfs"
	"github.com/twpayne/go-vfs/vfst"

	"github.com/rancher/elemental-cli/pkg/action"
	conf "github.com/rancher/elemental-cli/pkg/config"
	"github.com/rancher/elemental-cli/pkg/constants"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	"github.com/rancher/elemental-cli/pkg/utils"
	v1mock "github.com/rancher/elemental-cli/tests/mocks"
)

var _ = Describe("Reset action tests", func() {
	var config *v1.RunConfig
	var runner *v1mock.FakeRunner
	var fs vfs.FS
	var logger v1.Logger
	var mounter *v1mock.ErrorMounter
	var syscall *v1mock.FakeSyscall
	var client *v1mock.FakeHTTPClient
	var cloudInit *v1mock.FakeCloudInitRunner
	var extractor *v1mock.FakeImageExtractor
	var cleanup func()
	var memLog *bytes.Buffer
	var ghwTest v1mock.GhwMock

	BeforeEach(func() {
		runner = v1mock.NewFakeRunner()
		syscall = &v1mock.FakeSyscall{}
		mounter = v1mock.NewErrorMounter()
		client = &v1mock.FakeHTTPClient{}
		memLog = &bytes.Buffer{}
		logger = v1.NewBufferLogger(memLog)
		extractor = v1mock.NewFakeImageExtractor(logger)
		var err error
		fs, cleanup, err = vfst.NewTestFS(map[string]interface{}{})
		Expect(err).Should(BeNil())

		cloudInit = &v1mock.FakeCloudInitRunner{}
		config = conf.NewRunConfig(
			conf.WithFs(fs),
			conf.WithRunner(runner),
			conf.WithLogger(logger),
			conf.WithMounter(mounter),
			conf.WithSyscall(syscall),
			conf.WithClient(client),
			conf.WithCloudInitRunner(cloudInit),
			conf.WithImageExtractor(extractor),
		)
	})

	AfterEach(func() { cleanup() })

	Describe("Reset Action", Label("reset"), func() {
		var spec *v1.ResetSpec
		var reset *action.ResetAction
		var cmdFail, bootedFrom string
		var err error
		BeforeEach(func() {

			Expect(err).ShouldNot(HaveOccurred())
			cmdFail = ""
			recoveryImg := filepath.Join(constants.RunningStateDir, "cOS", constants.RecoveryImgFile)
			err = utils.MkdirAll(fs, filepath.Dir(recoveryImg), constants.DirPerm)
			Expect(err).To(BeNil())
			_, err = fs.Create(recoveryImg)
			Expect(err).To(BeNil())

			mainDisk := block.Disk{
				Name: "device",
				Partitions: []*block.Partition{
					{
						Name:            "device1",
						FilesystemLabel: "COS_GRUB",
						Type:            "ext4",
					},
					{
						Name:            "device2",
						FilesystemLabel: "COS_STATE",
						Type:            "ext4",
					},
					{
						Name:            "device3",
						FilesystemLabel: "COS_PERSISTENT",
						Type:            "ext4",
					},
					{
						Name:            "device4",
						FilesystemLabel: "COS_OEM",
						Type:            "ext4",
					},
					{
						Name:            "device5",
						FilesystemLabel: "COS_RECOVERY",
						Type:            "ext4",
					},
				},
			}
			ghwTest = v1mock.GhwMock{}
			ghwTest.AddDisk(mainDisk)
			ghwTest.CreateDevices()

			fs.Create(constants.EfiDevice)
			bootedFrom = constants.RecoveryImgFile
			runner.SideEffect = func(cmd string, args ...string) ([]byte, error) {
				if cmd == cmdFail {
					return []byte{}, errors.New("Command failed")
				}
				switch cmd {
				case "cat":
					return []byte(bootedFrom), nil
				default:
					return []byte{}, nil
				}
			}

			spec, err = conf.NewResetSpec(config.Config)
			Expect(err).ShouldNot(HaveOccurred())
			Expect(spec.Active.Source.IsEmpty()).To(BeFalse())

			spec.Active.Size = 16

			grubCfg := filepath.Join(constants.WorkingImgDir, spec.GrubConf)
			err = utils.MkdirAll(fs, filepath.Dir(grubCfg), constants.DirPerm)
			Expect(err).To(BeNil())
			_, err = fs.Create(grubCfg)
			Expect(err).To(BeNil())

			runner.SideEffect = func(cmd string, args ...string) ([]byte, error) {
				if cmdFail == cmd {
					return []byte{}, errors.New("Command failed")
				}
				if cmd == "grub2-editenv" && args[1] == "set" {
					f, err := fs.OpenFile(args[0], os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
					Expect(err).To(BeNil())

					_, err = f.Write([]byte(fmt.Sprintf("%s\n", args[2])))
					Expect(err).To(BeNil())
				}
				return []byte{}, nil
			}
			reset = action.NewResetAction(config, spec)
		})

		AfterEach(func() {
			ghwTest.Clean()
		})

		It("Successfully resets on non-squashfs recovery", func() {
			config.Reboot = true
			Expect(reset.Run()).To(BeNil())
			Expect(runner.IncludesCmds([][]string{{"reboot", "-f"}}))
		})
		It("Successfully resets on non-squashfs recovery including persistent data", func() {
			config.PowerOff = true
			spec.FormatPersistent = true
			spec.FormatOEM = true
			Expect(reset.Run()).To(BeNil())
			Expect(runner.IncludesCmds([][]string{{"poweroff", "-f"}}))
		})
		It("Successfully resets from a squashfs recovery image", Label("channel"), func() {
			err := utils.MkdirAll(config.Fs, constants.ISOBaseTree, constants.DirPerm)
			Expect(err).ShouldNot(HaveOccurred())
			spec.Active.Source = v1.NewDirSrc(constants.ISOBaseTree)
			Expect(reset.Run()).To(BeNil())
		})
		It("Successfully resets despite having errors on hooks", func() {
			cloudInit.Error = true
			Expect(reset.Run()).To(BeNil())
		})
		It("Successfully writes GRUB labels to oem_env file", func() {
			Expect(reset.Run()).To(BeNil())

			actualBytes, err := fs.ReadFile(filepath.Join(constants.StateDir, "grub_oem_env"))
			Expect(err).To(BeNil())

			expected := map[string]string{
				"state_label":        "COS_STATE",
				"active_label":       "COS_ACTIVE",
				"passive_label":      "COS_PASSIVE",
				"recovery_label":     "COS_RECOVERY",
				"system_label":       "COS_SYSTEM",
				"oem_label":          "COS_OEM",
				"persistent_label":   "COS_PERSISTENT",
				"default_menu_entry": "cOS",
			}

			lines := strings.Split(string(actualBytes), "\n")

			By(string(actualBytes))

			Expect(len(lines)).To(Equal(len(expected)))

			for _, line := range lines {
				if line == "" {
					continue
				}

				split := strings.SplitN(line, "=", 2)

				Expect(split[1]).To(Equal(expected[split[0]]))
			}
		})
		It("Successfully resets from a docker image", Label("docker"), func() {
			spec.Active.Source = v1.NewDockerSrc("my/image:latest")
			Expect(reset.Run()).To(BeNil())
		})
		It("Successfully resets from a channel package", Label("channel"), func() {
			Expect(reset.Run()).To(BeNil())
		})
		It("Fails installing grub", func() {
			cmdFail = "grub2-install"
			Expect(reset.Run()).NotTo(BeNil())
			Expect(runner.IncludesCmds([][]string{{"grub2-install"}}))
		})
		It("Fails formatting state partition", func() {
			cmdFail = "mkfs.ext4"
			Expect(reset.Run()).NotTo(BeNil())
			Expect(runner.IncludesCmds([][]string{{"mkfs.ext4"}}))
		})
		It("Fails setting the active label on non-squashfs recovery", func() {
			cmdFail = "tune2fs"
			Expect(reset.Run()).NotTo(BeNil())
		})
		It("Fails setting the passive label on squashfs recovery", func() {
			cmdFail = "tune2fs"
			Expect(reset.Run()).NotTo(BeNil())
			Expect(runner.IncludesCmds([][]string{{"tune2fs"}}))
		})
		It("Fails mounting partitions", func() {
			mounter.ErrorOnMount = true
			Expect(reset.Run()).NotTo(BeNil())
		})
		It("Fails unmounting partitions", func() {
			mounter.ErrorOnUnmount = true
			Expect(reset.Run()).NotTo(BeNil())
		})
	})
})
 07070100000059000081A4000000000000000000000001645E367C00002CCA000000000000000000000000000000000000002A00000000elemental-cli-0.3.1/pkg/action/upgrade.go /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package action

import (
	"fmt"
	"path/filepath"
	"time"

	"github.com/rancher/elemental-cli/pkg/constants"
	"github.com/rancher/elemental-cli/pkg/elemental"
	elementalError "github.com/rancher/elemental-cli/pkg/error"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	"github.com/rancher/elemental-cli/pkg/utils"
)

// UpgradeAction represents the struct that will run the upgrade from start to finish
type UpgradeAction struct {
	config *v1.RunConfig
	spec   *v1.UpgradeSpec
}

func NewUpgradeAction(config *v1.RunConfig, spec *v1.UpgradeSpec) *UpgradeAction {
	return &UpgradeAction{config: config, spec: spec}
}

func (u UpgradeAction) Info(s string, args ...interface{}) {
	u.config.Logger.Infof(s, args...)
}

func (u UpgradeAction) Debug(s string, args ...interface{}) {
	u.config.Logger.Debugf(s, args...)
}

func (u UpgradeAction) Error(s string, args ...interface{}) {
	u.config.Logger.Errorf(s, args...)
}

func (u UpgradeAction) upgradeHook(hook string) error {
	u.Info("Applying '%s' hook", hook)
	return Hook(&u.config.Config, hook, u.config.Strict, u.config.CloudInitPaths...)
}

func (u UpgradeAction) upgradeChrootHook(hook string, root string) error {
	u.Info("Applying '%s' hook", hook)
	mountPoints := map[string]string{}

	oemDevice := u.spec.Partitions.OEM
	if oemDevice != nil && oemDevice.MountPoint != "" {
		mountPoints[oemDevice.MountPoint] = constants.OEMPath
	}

	persistentDevice := u.spec.Partitions.Persistent
	if persistentDevice != nil && persistentDevice.MountPoint != "" {
		mountPoints[persistentDevice.MountPoint] = constants.UsrLocalPath
	}

	return ChrootHook(&u.config.Config, hook, u.config.Strict, root, mountPoints, u.config.CloudInitPaths...)
}

func (u *UpgradeAction) upgradeInstallStateYaml(meta interface{}, img v1.Image) error {
	if u.spec.Partitions.Recovery == nil || u.spec.Partitions.State == nil {
		return fmt.Errorf("undefined state or recovery partition")
	}

	if u.spec.State == nil {
		u.spec.State = &v1.InstallState{
			Partitions: map[string]*v1.PartitionState{},
		}
	}

	u.spec.State.Date = time.Now().Format(time.RFC3339)
	imgState := &v1.ImageState{
		Source:         img.Source,
		SourceMetadata: meta,
		Label:          img.Label,
		FS:             img.FS,
	}
	if u.spec.RecoveryUpgrade {
		recoveryPart := u.spec.State.Partitions[constants.RecoveryPartName]
		if recoveryPart == nil {
			recoveryPart = &v1.PartitionState{
				Images:  map[string]*v1.ImageState{},
				FSLabel: u.spec.Partitions.Recovery.FilesystemLabel,
			}
			u.spec.State.Partitions[constants.RecoveryPartName] = recoveryPart
		}
		recoveryPart.Images[constants.RecoveryImgName] = imgState
	} else {
		statePart := u.spec.State.Partitions[constants.StatePartName]
		if statePart == nil {
			statePart = &v1.PartitionState{
				Images:  map[string]*v1.ImageState{},
				FSLabel: u.spec.Partitions.State.FilesystemLabel,
			}
			u.spec.State.Partitions[constants.StatePartName] = statePart
		}
		if statePart.Images[constants.PassiveImgName] == nil {
			statePart.Images[constants.PassiveImgName] = &v1.ImageState{
				Label: u.spec.Passive.Label,
			}
		}
		if statePart.Images[constants.ActiveImgName] != nil {
			// Do not copy the label from the old active image
			statePart.Images[constants.PassiveImgName].Source = statePart.Images[constants.ActiveImgName].Source
			statePart.Images[constants.PassiveImgName].SourceMetadata = statePart.Images[constants.ActiveImgName].SourceMetadata
			statePart.Images[constants.PassiveImgName].FS = statePart.Images[constants.ActiveImgName].FS
		}
		statePart.Images[constants.ActiveImgName] = imgState
	}

	return u.config.WriteInstallState(
		u.spec.State,
		filepath.Join(u.spec.Partitions.State.MountPoint, constants.InstallStateFile),
		filepath.Join(u.spec.Partitions.Recovery.MountPoint, constants.InstallStateFile),
	)
}

func (u *UpgradeAction) Run() (err error) {
	var upgradeImg v1.Image
	var finalImageFile string

	cleanup := utils.NewCleanStack()
	defer func() {
		err = cleanup.Cleanup(err)
	}()

	e := elemental.NewElemental(&u.config.Config)

	if u.spec.RecoveryUpgrade {
		upgradeImg = u.spec.Recovery
		finalImageFile = filepath.Join(u.spec.Partitions.Recovery.MountPoint, "cOS", constants.RecoveryImgFile)
	} else {
		upgradeImg = u.spec.Active
		finalImageFile = filepath.Join(u.spec.Partitions.State.MountPoint, "cOS", constants.ActiveImgFile)
	}

	umount, err := e.MountRWPartition(u.spec.Partitions.State)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.MountStatePartition)
	}
	cleanup.Push(umount)
	umount, err = e.MountRWPartition(u.spec.Partitions.Recovery)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.MountRecoveryPartition)
	}
	cleanup.Push(umount)

	// Cleanup transition image file before leaving
	cleanup.Push(func() error { return u.remove(upgradeImg.File) })

	// Recovery does not mount persistent, so try to mount it. Ignore errors, as it's not mandatory.
	persistentPart := u.spec.Partitions.Persistent
	if persistentPart != nil {
		// Create the dir otherwise the check for mounted dir fails
		_ = utils.MkdirAll(u.config.Fs, persistentPart.MountPoint, constants.DirPerm)
		if mnt, err := utils.IsMounted(&u.config.Config, persistentPart); !mnt && err == nil {
			u.Debug("mounting persistent partition")
			umount, err = e.MountRWPartition(persistentPart)
			if err != nil {
				u.config.Logger.Warn("could not mount persistent partition: %s", err.Error())
			} else {
				cleanup.Push(umount)
			}
		}
	}

	// before upgrade hook happens once partitions are RW mounted, just before image OS is deployed
	err = u.upgradeHook(constants.BeforeUpgradeHook)
	if err != nil {
		u.Error("Error while running hook before-upgrade: %s", err)
		return elementalError.NewFromError(err, elementalError.HookBeforeUpgrade)
	}

	u.Info("deploying image %s to %s", upgradeImg.Source.Value(), upgradeImg.File)
	// Deploy active image
	upgradeMeta, treeCleaner, err := e.DeployImgTree(&upgradeImg, constants.WorkingImgDir)
	if err != nil {
		u.Error("Failed deploying image to file '%s': %s", upgradeImg.File, err)
		return elementalError.NewFromError(err, elementalError.DeployImgTree)
	}
	cleanup.Push(func() error { return treeCleaner() })

	// Selinux relabel
	// Doesn't make sense to relabel a readonly filesystem
	if upgradeImg.FS != constants.SquashFs {
		// Relabel SELinux
		// TODO probably relabelling persistent volumes should be an opt in feature, it could
		// have undesired effects in case of failures
		binds := map[string]string{}
		if mnt, _ := utils.IsMounted(&u.config.Config, u.spec.Partitions.Persistent); mnt {
			binds[u.spec.Partitions.Persistent.MountPoint] = constants.UsrLocalPath
		}
		if mnt, _ := utils.IsMounted(&u.config.Config, u.spec.Partitions.OEM); mnt {
			binds[u.spec.Partitions.OEM.MountPoint] = constants.OEMPath
		}
		err = utils.ChrootedCallback(
			&u.config.Config, constants.WorkingImgDir, binds,
			func() error { return e.SelinuxRelabel("/", true) },
		)
		if err != nil {
			return elementalError.NewFromError(err, elementalError.SelinuxRelabel)
		}
	}

	err = u.upgradeChrootHook(constants.AfterUpgradeChrootHook, constants.WorkingImgDir)
	if err != nil {
		u.Error("Error running hook after-upgrade-chroot: %s", err)
		return elementalError.NewFromError(err, elementalError.HookAfterUpgradeChroot)
	}
	err = u.upgradeHook(constants.AfterUpgradeHook)
	if err != nil {
		u.Error("Error running hook after-upgrade: %s", err)
		return elementalError.NewFromError(err, elementalError.HookAfterUpgrade)
	}

	grubVars := u.spec.GetGrubLabels()
	err = utils.NewGrub(&u.config.Config).SetPersistentVariables(
		filepath.Join(u.spec.Partitions.State.MountPoint, constants.GrubOEMEnv),
		grubVars,
	)
	if err != nil {
		u.Error("Error setting GRUB labels: %s", err)
		return elementalError.NewFromError(err, elementalError.SetGrubVariables)
	}

	// Only apply rebrand stage for system upgrades
	if !u.spec.RecoveryUpgrade {
		u.Info("rebranding")

		err = e.SetDefaultGrubEntry(u.spec.Partitions.State.MountPoint, constants.WorkingImgDir, u.spec.GrubDefEntry)
		if err != nil {
			u.Error("failed setting default entry")
			return elementalError.NewFromError(err, elementalError.SetDefaultGrubEntry)
		}
	}

	err = e.CreateImgFromTree(constants.WorkingImgDir, &upgradeImg, treeCleaner)
	if err != nil {
		u.Error("failed creating transition image")
		return elementalError.NewFromError(err, elementalError.CreateImgFromTree)
	}

	// If not upgrading recovery, backup active into passive
	if !u.spec.RecoveryUpgrade {
		//TODO this step could be part of elemental package
		// backup current active.img to passive.img before overwriting the active.img
		u.Info("Backing up current active image")
		source := filepath.Join(u.spec.Partitions.State.MountPoint, "cOS", constants.ActiveImgFile)
		u.Info("Moving %s to %s", source, u.spec.Passive.File)
		_, err := u.config.Runner.Run("mv", "-f", source, u.spec.Passive.File)
		if err != nil {
			u.Error("Failed to move %s to %s: %s", source, u.spec.Passive.File, err)
			return elementalError.NewFromError(err, elementalError.MoveFile)
		}
		u.Info("Finished moving %s to %s", source, u.spec.Passive.File)
		// Label the image to passive!
		out, err := u.config.Runner.Run("tune2fs", "-L", u.spec.Passive.Label, u.spec.Passive.File)
		if err != nil {
			u.Error("Error while labeling the passive image %s: %s", u.spec.Passive.File, err)
			u.Debug("Error while labeling the passive image %s, command output: %s", out)
			return elementalError.NewFromError(err, elementalError.LabelImage)
		}
		_, _ = u.config.Runner.Run("sync")
	}

	u.Info("Moving %s to %s", upgradeImg.File, finalImageFile)
	_, err = u.config.Runner.Run("mv", "-f", upgradeImg.File, finalImageFile)
	if err != nil {
		u.Error("Failed to move %s to %s: %s", upgradeImg.File, finalImageFile, err)
		return elementalError.NewFromError(err, elementalError.MoveFile)
	}
	u.Info("Finished moving %s to %s", upgradeImg.File, finalImageFile)

	_, _ = u.config.Runner.Run("sync")

	err = u.upgradeHook(constants.PostUpgradeHook)
	if err != nil {
		u.Error("Error running hook post-upgrade: %s", err)
		return elementalError.NewFromError(err, elementalError.HookPostUpgrade)
	}

	// Update state.yaml file on recovery and state partitions
	err = u.upgradeInstallStateYaml(upgradeMeta, upgradeImg)
	if err != nil {
		u.Error("failed upgrading installation metadata")
		return err
	}

	u.Info("Upgrade completed")

	// Do not reboot/poweroff on cleanup errors
	err = cleanup.Cleanup(err)
	if err != nil {
		return elementalError.NewFromError(err, elementalError.Cleanup)
	}

	return PowerAction(u.config)
}

// remove attempts to remove the given path. Does nothing if it doesn't exist
func (u *UpgradeAction) remove(path string) error {
	if exists, _ := utils.Exists(u.config.Fs, path); exists {
		u.Debug("[Cleanup] Removing %s", path)
		return u.config.Fs.RemoveAll(path)
	}
	return nil
}
  0707010000005A000081A4000000000000000000000001645E367C000079CF000000000000000000000000000000000000002F00000000elemental-cli-0.3.1/pkg/action/upgrade_test.go    /*
   Copyright © 2022 - 2023 SUSE LLC

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package action_test

import (
	"bytes"
	"fmt"
	"os"
	"path/filepath"
	"strings"

	"github.com/jaypipes/ghw/pkg/block"
	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/sirupsen/logrus"
	"github.com/twpayne/go-vfs"
	"github.com/twpayne/go-vfs/vfst"

	"github.com/rancher/elemental-cli/pkg/action"
	conf "github.com/rancher/elemental-cli/pkg/config"
	"github.com/rancher/elemental-cli/pkg/constants"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	"github.com/rancher/elemental-cli/pkg/utils"
	v1mock "github.com/rancher/elemental-cli/tests/mocks"
)

var _ = Describe("Runtime Actions", func() {
	var config *v1.RunConfig
	var runner *v1mock.FakeRunner
	var fs vfs.FS
	var logger v1.Logger
	var mounter *v1mock.ErrorMounter
	var syscall *v1mock.FakeSyscall
	var client *v1mock.FakeHTTPClient
	var cloudInit *v1mock.FakeCloudInitRunner
	var extractor *v1mock.FakeImageExtractor
	var cleanup func()
	var memLog *bytes.Buffer
	var ghwTest v1mock.GhwMock

	BeforeEach(func() {
		runner = v1mock.NewFakeRunner()
		syscall = &v1mock.FakeSyscall{}
		mounter = v1mock.NewErrorMounter()
		client = &v1mock.FakeHTTPClient{}
		memLog = &bytes.Buffer{}
		logger = v1.NewBufferLogger(memLog)
		extractor = v1mock.NewFakeImageExtractor(logger)
		var err error
		fs, cleanup, err = vfst.NewTestFS(map[string]interface{}{})
		Expect(err).Should(BeNil())

		cloudInit = &v1mock.FakeCloudInitRunner{}
		config = conf.NewRunConfig(
			conf.WithFs(fs),
			conf.WithRunner(runner),
			conf.WithLogger(logger),
			conf.WithMounter(mounter),
			conf.WithSyscall(syscall),
			conf.WithClient(client),
			conf.WithCloudInitRunner(cloudInit),
			conf.WithImageExtractor(extractor),
		)
		Expect(config.Sanitize()).To(Succeed())
	})

	AfterEach(func() { cleanup() })

	Describe("Upgrade Action", Label("upgrade"), func() {
		var spec *v1.UpgradeSpec
		var upgrade *action.UpgradeAction
		var memLog *bytes.Buffer
		activeImg := fmt.Sprintf("%s/cOS/%s", constants.RunningStateDir, constants.ActiveImgFile)
		passiveImg := fmt.Sprintf("%s/cOS/%s", constants.RunningStateDir, constants.PassiveImgFile)

		recoveryImg := fmt.Sprintf("%s/cOS/%s", constants.LiveDir, constants.RecoveryImgFile)

		BeforeEach(func() {
			memLog = &bytes.Buffer{}
			logger = v1.NewBufferLogger(memLog)
			config.Logger = logger
			logger.SetLevel(logrus.DebugLevel)

			// Create paths used by tests
			utils.MkdirAll(fs, fmt.Sprintf("%s/cOS", constants.RunningStateDir), constants.DirPerm)
			utils.MkdirAll(fs, fmt.Sprintf("%s/cOS", constants.LiveDir), constants.DirPerm)

			mainDisk := block.Disk{
				Name: "device",
				Partitions: []*block.Partition{
					{
						Name:            "device1",
						FilesystemLabel: "COS_GRUB",
						Type:            "ext4",
					},
					{
						Name:            "device2",
						FilesystemLabel: "COS_STATE",
						Type:            "ext4",
						MountPoint:      constants.RunningStateDir,
					},
					{
						Name:            "loop0",
						FilesystemLabel: "COS_ACTIVE",
						Type:            "ext4",
					},
					{
						Name:            "device5",
						FilesystemLabel: "COS_RECOVERY",
						Type:            "ext4",
						MountPoint:      constants.LiveDir,
					},
					{
						Name:            "device6",
						FilesystemLabel: "COS_OEM",
						Type:            "ext4",
					},
				},
			}
			ghwTest = v1mock.GhwMock{}
			ghwTest.AddDisk(mainDisk)
			ghwTest.CreateDevices()
		})
		AfterEach(func() {
			ghwTest.Clean()
		})
		Describe(fmt.Sprintf("Booting from %s", constants.ActiveLabel), Label("active_label"), func() {
			var err error
			BeforeEach(func() {
				spec, err = conf.NewUpgradeSpec(config.Config)
				Expect(err).ShouldNot(HaveOccurred())

				spec.Active.Source = v1.NewDockerSrc("alpine")
				spec.Active.Size = 16

				err = utils.MkdirAll(config.Fs, filepath.Join(constants.WorkingImgDir, "etc"), constants.DirPerm)
				Expect(err).ShouldNot(HaveOccurred())

				err = fs.WriteFile(
					filepath.Join(constants.WorkingImgDir, "etc", "os-release"),
					[]byte("GRUB_ENTRY_NAME=TESTOS"),
					constants.FilePerm,
				)
				Expect(err).ShouldNot(HaveOccurred())

				runner.SideEffect = func(command string, args ...string) ([]byte, error) {
					if command == "cat" && args[0] == "/proc/cmdline" {
						return []byte(constants.ActiveLabel), nil
					}
					if command == "mv" && args[0] == "-f" && args[1] == activeImg && args[2] == passiveImg {
						// we doing backup, do the "move"
						source, _ := fs.ReadFile(activeImg)
						_ = fs.WriteFile(passiveImg, source, constants.FilePerm)
						_ = fs.RemoveAll(activeImg)
					}
					if command == "mv" && args[0] == "-f" && args[1] == spec.Active.File && args[2] == activeImg {
						// we doing the image substitution, do the "move"
						source, _ := fs.ReadFile(spec.Active.File)
						_ = fs.WriteFile(activeImg, source, constants.FilePerm)
						_ = fs.RemoveAll(spec.Active.File)
					}
					if command == "grub2-editenv" && args[1] == "set" {
						f, err := fs.OpenFile(args[0], os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
						Expect(err).To(BeNil())

						_, err = f.Write([]byte(fmt.Sprintf("%s\n", args[2])))
						Expect(err).To(BeNil())
					}

					return []byte{}, nil
				}
				config.Runner = runner
				// Create fake active/passive files
				_ = fs.WriteFile(activeImg, []byte("active"), constants.FilePerm)
				_ = fs.WriteFile(passiveImg, []byte("passive"), constants.FilePerm)
				// Mount state partition as it is expected to be mounted when booting from active
				mounter.Mount("device2", constants.RunningStateDir, "auto", []string{"ro"})
			})
			AfterEach(func() {
				_ = fs.RemoveAll(activeImg)
				_ = fs.RemoveAll(passiveImg)
			})
			It("Fails if some hook fails and strict is set", func() {
				runner.SideEffect = func(command string, args ...string) ([]byte, error) {
					if command == "cat" && args[0] == "/proc/cmdline" {
						return []byte(constants.ActiveLabel), nil
					}
					return []byte{}, nil
				}
				config.Strict = true
				cloudInit.Error = true
				upgrade = action.NewUpgradeAction(config, spec)
				err := upgrade.Run()
				Expect(err).To(HaveOccurred())
				// Make sure is a cloud init error!
				Expect(err.Error()).To(ContainSubstring("cloud init"))
			})
			It("Successfully upgrades from docker image with custom labels", Label("docker"), func() {
				// Create installState with previous install state
				statePath := filepath.Join(constants.RunningStateDir, constants.InstallStateFile)
				installState := &v1.InstallState{
					Partitions: map[string]*v1.PartitionState{
						constants.StatePartName: {
							FSLabel: "COS_STATE",
							Images: map[string]*v1.ImageState{
								constants.ActiveImgName: {
									Label: "CUSTOM_ACTIVE_LABEL",
									FS:    constants.LinuxImgFs,
								},
								constants.PassiveImgName: {
									Label: "CUSTOM_PASSIVE_LABEL",
									FS:    constants.LinuxImgFs,
								},
							},
						},
					},
				}
				err = config.WriteInstallState(installState, statePath, statePath)
				Expect(err).ShouldNot(HaveOccurred())

				// Create a new spec to load state yaml
				spec, err = conf.NewUpgradeSpec(config.Config)
				spec.Active.Size = 16
				Expect(err).ShouldNot(HaveOccurred())

				spec.Active.Source = v1.NewDockerSrc("alpine")
				upgrade = action.NewUpgradeAction(config, spec)
				err := upgrade.Run()
				Expect(err).ToNot(HaveOccurred())

				// Check that the rebrand worked with our os-release value
				Expect(memLog).To(ContainSubstring("default_menu_entry=TESTOS"))

				// This should be the new image
				info, err := fs.Stat(activeImg)
				Expect(err).ToNot(HaveOccurred())
				// Image size should be the config.ImgSize as its truncated from the upgrade
				Expect(info.Size()).To(BeNumerically("==", int64(spec.Active.Size*1024*1024)))
				Expect(info.IsDir()).To(BeFalse())

				// Should have backed up active to passive
				info, err = fs.Stat(passiveImg)
				Expect(err).ToNot(HaveOccurred())
				// Should be a tiny image as it should only contain our text
				// As this was generated by us at the start test and moved by the upgrade from active.iomg
				Expect(info.Size()).To(BeNumerically(">", 0))
				Expect(info.Size()).To(BeNumerically("<", int64(spec.Active.Size*1024*1024)))
				f, _ := fs.ReadFile(passiveImg)
				// This should be a backup so it should read active
				Expect(f).To(ContainSubstring("active"))

				// Expect transition image to be gone
				_, err = fs.Stat(spec.Active.File)
				Expect(err).To(HaveOccurred())

				// An upgraded state yaml file should exist
				state, err := config.LoadInstallState()
				Expect(err).ShouldNot(HaveOccurred())
				Expect(
					state.Partitions[constants.StatePartName].
						Images[constants.ActiveImgName].Source.String()).
					To(Equal("oci://alpine:latest"))
				Expect(
					state.Partitions[constants.StatePartName].
						Images[constants.ActiveImgName].Label).
					To(Equal("CUSTOM_ACTIVE_LABEL"))
				Expect(
					state.Partitions[constants.StatePartName].
						Images[constants.PassiveImgName].Label).
					To(Equal("CUSTOM_PASSIVE_LABEL"))
			})
			It("Writes filesystem labels to GRUB oem env file", Label("grub"), func() {
				statePath := filepath.Join(constants.RunningStateDir, constants.InstallStateFile)
				installState := &v1.InstallState{
					Partitions: map[string]*v1.PartitionState{
						constants.RecoveryPartName: {
							FSLabel: "COS_RECOVERY",
							Images: map[string]*v1.ImageState{
								constants.RecoveryImgName: {
									Label: "CUSTOM_RECOVERYIMG_LABEL",
									FS:    constants.LinuxImgFs,
								},
							},
						},
						constants.StatePartName: {
							FSLabel: "COS_STATE",
							Images: map[string]*v1.ImageState{
								constants.ActiveImgName: {
									Label: "CUSTOM_ACTIVE_LABEL",
									FS:    constants.LinuxImgFs,
								},
								constants.PassiveImgName: {
									Label: "CUSTOM_PASSIVE_LABEL",
									FS:    constants.LinuxImgFs,
								},
							},
						},
					},
				}

				err = config.WriteInstallState(installState, statePath, statePath)
				Expect(err).ShouldNot(HaveOccurred())

				spec, err = conf.NewUpgradeSpec(config.Config)
				spec.Active.Source = v1.NewDockerSrc("alpine")
				upgrade = action.NewUpgradeAction(config, spec)
				err := upgrade.Run()
				Expect(err).ToNot(HaveOccurred())

				actualBytes, err := fs.ReadFile(filepath.Join(constants.RunningStateDir, "grub_oem_env"))
				Expect(err).To(BeNil())

				expected := map[string]string{
					"state_label":        "COS_STATE",
					"active_label":       "CUSTOM_ACTIVE_LABEL",
					"passive_label":      "CUSTOM_PASSIVE_LABEL",
					"recovery_label":     "COS_RECOVERY",
					"system_label":       "CUSTOM_RECOVERYIMG_LABEL",
					"oem_label":          "COS_OEM",
					"persistent_label":   "COS_PERSISTENT",
					"default_menu_entry": "TESTOS",
				}

				lines := strings.Split(string(actualBytes), "\n")

				By(string(actualBytes))

				Expect(len(lines)).To(Equal(len(expected)))

				for _, line := range lines {
					if line == "" {
						continue
					}

					split := strings.SplitN(line, "=", 2)

					Expect(split[1]).To(Equal(expected[split[0]]))
				}
			})
			It("Successfully reboots after upgrade from docker image", Label("docker"), func() {
				spec.Active.Source = v1.NewDockerSrc("alpine")
				config.Reboot = true
				upgrade = action.NewUpgradeAction(config, spec)
				err := upgrade.Run()
				Expect(err).ToNot(HaveOccurred())

				// Check that the rebrand worked with our os-release value
				Expect(memLog).To(ContainSubstring("default_menu_entry=TESTOS"))

				// This should be the new image
				info, err := fs.Stat(activeImg)
				Expect(err).ToNot(HaveOccurred())
				// Image size should be the config.ImgSize as its truncated from the upgrade
				Expect(info.Size()).To(BeNumerically("==", int64(spec.Active.Size*1024*1024)))
				Expect(info.IsDir()).To(BeFalse())

				// Should have backed up active to passive
				info, err = fs.Stat(passiveImg)
				Expect(err).ToNot(HaveOccurred())
				// Should be a tiny image as it should only contain our text
				// As this was generated by us at the start test and moved by the upgrade from active.iomg
				Expect(info.Size()).To(BeNumerically(">", 0))
				Expect(info.Size()).To(BeNumerically("<", int64(spec.Active.Size*1024*1024)))
				f, _ := fs.ReadFile(passiveImg)
				// This should be a backup so it should read active
				Expect(f).To(ContainSubstring("active"))

				// Expect transition image to be gone
				_, err = fs.Stat(spec.Active.File)
				Expect(err).To(HaveOccurred())
				Expect(runner.IncludesCmds([][]string{{"reboot", "-f"}})).To(BeNil())
			})
			It("Successfully powers off after upgrade from docker image", Label("docker"), func() {
				spec.Active.Source = v1.NewDockerSrc("alpine")
				config.PowerOff = true
				upgrade = action.NewUpgradeAction(config, spec)
				err := upgrade.Run()
				Expect(err).ToNot(HaveOccurred())

				// Check that the rebrand worked with our os-release value
				Expect(memLog).To(ContainSubstring("default_menu_entry=TESTOS"))

				// This should be the new image
				info, err := fs.Stat(activeImg)
				Expect(err).ToNot(HaveOccurred())
				// Image size should be the config.ImgSize as its truncated from the upgrade
				Expect(info.Size()).To(BeNumerically("==", int64(spec.Active.Size*1024*1024)))
				Expect(info.IsDir()).To(BeFalse())

				// Should have backed up active to passive
				info, err = fs.Stat(passiveImg)
				Expect(err).ToNot(HaveOccurred())
				// Should be a tiny image as it should only contain our text
				// As this was generated by us at the start test and moved by the upgrade from active.iomg
				Expect(info.Size()).To(BeNumerically(">", 0))
				Expect(info.Size()).To(BeNumerically("<", int64(spec.Active.Size*1024*1024)))
				f, _ := fs.ReadFile(passiveImg)
				// This should be a backup so it should read active
				Expect(f).To(ContainSubstring("active"))

				// Expect transition image to be gone
				_, err = fs.Stat(spec.Active.File)
				Expect(err).To(HaveOccurred())
				Expect(runner.IncludesCmds([][]string{{"poweroff", "-f"}})).To(BeNil())

				// An upgraded state yaml file should exist
				state, err := config.LoadInstallState()
				Expect(err).ShouldNot(HaveOccurred())
				Expect(
					state.Partitions[constants.StatePartName].
						Images[constants.ActiveImgName].Source.String()).
					To(Equal("oci://alpine:latest"))
				Expect(
					state.Partitions[constants.StatePartName].
						Images[constants.PassiveImgName].Label).
					To(Equal(constants.PassiveLabel))
			})
			It("Successfully upgrades from directory", Label("directory"), func() {
				dirSrc, _ := utils.TempDir(fs, "", "elementalupgrade")
				// Create the dir on real os as rsync works on the real os
				defer fs.RemoveAll(dirSrc)
				spec.Active.Source = v1.NewDirSrc(dirSrc)
				// create a random file on it
				err := fs.WriteFile(fmt.Sprintf("%s/file.file", dirSrc), []byte("something"), constants.FilePerm)
				Expect(err).ToNot(HaveOccurred())

				upgrade = action.NewUpgradeAction(config, spec)
				err = upgrade.Run()
				Expect(err).ToNot(HaveOccurred())

				// Check that the rebrand worked with our os-release value
				Expect(memLog).To(ContainSubstring("default_menu_entry=TESTOS"))

				// Not much that we can create here as the dir copy was done on the real os, but we do the rest of the ops on a mem one
				// This should be the new image
				info, err := fs.Stat(activeImg)
				Expect(err).ToNot(HaveOccurred())
				// Image size should not be empty
				Expect(info.Size()).To(BeNumerically("==", int64(spec.Active.Size*1024*1024)))
				Expect(info.IsDir()).To(BeFalse())

				// Should have backed up active to passive
				info, err = fs.Stat(passiveImg)
				Expect(err).ToNot(HaveOccurred())
				// Should be a tiny image as it should only contain our text
				// As this was generated by us at the start test and moved by the upgrade from active.img
				Expect(info.Size()).To(BeNumerically(">", 0))
				Expect(info.Size()).To(BeNumerically("<", int64(spec.Active.Size*1024*1024)))
				f, _ := fs.ReadFile(passiveImg)
				// This should be a backup so it should read active
				Expect(f).To(ContainSubstring("active"))

				// Expect transition image to be gone
				_, err = fs.Stat(spec.Active.File)
				Expect(err).To(HaveOccurred())

			})
			It("Successfully upgrades from channel upgrade", Label("channel"), func() {
				upgrade = action.NewUpgradeAction(config, spec)
				err := upgrade.Run()
				Expect(err).ToNot(HaveOccurred())

				// Check that the rebrand worked with our os-release value
				Expect(memLog).To(ContainSubstring("default_menu_entry=TESTOS"))

				// Not much that we can create here as the dir copy was done on the real os, but we do the rest of the ops on a mem one
				// This should be the new image
				// Should probably do well in mounting the image and checking contents to make sure everything worked
				info, err := fs.Stat(activeImg)
				Expect(err).ToNot(HaveOccurred())
				// Image size should not be empty
				Expect(info.Size()).To(BeNumerically("==", int64(spec.Active.Size*1024*1024)))
				Expect(info.IsDir()).To(BeFalse())

				// Should have backed up active to passive
				info, err = fs.Stat(passiveImg)
				Expect(err).ToNot(HaveOccurred())
				// Should be an really small image as it should only contain our text
				// As this was generated by us at the start test and moved by the upgrade from active.iomg
				Expect(info.Size()).To(BeNumerically(">", 0))
				Expect(info.Size()).To(BeNumerically("<", int64(spec.Active.Size*1024*1024)))
				f, _ := fs.ReadFile(passiveImg)
				// This should be a backup so it should read active
				Expect(f).To(ContainSubstring("active"))

				// Expect transition image to be gone
				_, err = fs.Stat(spec.Active.File)
				Expect(err).To(HaveOccurred())
			})
			It("Successfully upgrades with cosign", Pending, Label("channel", "cosign"), func() {})
			It("Successfully upgrades with mtree", Pending, Label("channel", "mtree"), func() {})
			It("Successfully upgrades with strict", Pending, Label("channel", "strict"), func() {})
		})
		Describe(fmt.Sprintf("Booting from %s", constants.PassiveLabel), Label("passive_label"), func() {
			var err error
			BeforeEach(func() {
				spec, err = conf.NewUpgradeSpec(config.Config)
				Expect(err).ShouldNot(HaveOccurred())

				spec.Active.Source = v1.NewDockerSrc("elementalos:latest")
				spec.Active.Size = 16

				err = utils.MkdirAll(config.Fs, filepath.Join(constants.WorkingImgDir, "etc"), constants.DirPerm)
				Expect(err).ShouldNot(HaveOccurred())

				err = fs.WriteFile(
					filepath.Join(constants.WorkingImgDir, "etc", "os-release"),
					[]byte("GRUB_ENTRY_NAME=TESTOS"),
					constants.FilePerm,
				)
				Expect(err).ShouldNot(HaveOccurred())

				runner.SideEffect = func(command string, args ...string) ([]byte, error) {
					if command == "cat" && args[0] == "/proc/cmdline" {
						return []byte(constants.PassiveLabel), nil
					}
					if command == "mv" && args[0] == "-f" && args[1] == spec.Active.File && args[2] == activeImg {
						// we doing the image substitution, do the "move"
						source, _ := fs.ReadFile(spec.Active.File)
						_ = fs.WriteFile(activeImg, source, constants.FilePerm)
						_ = fs.RemoveAll(spec.Active.File)
					}
					return []byte{}, nil
				}
				config.Runner = runner
				// Create fake active/passive files
				_ = fs.WriteFile(activeImg, []byte("active"), constants.FilePerm)
				_ = fs.WriteFile(passiveImg, []byte("passive"), constants.FilePerm)
				// Mount state partition as it is expected to be mounted when booting from active
				mounter.Mount("device2", constants.RunningStateDir, "auto", []string{"ro"})
			})
			AfterEach(func() {
				_ = fs.RemoveAll(activeImg)
				_ = fs.RemoveAll(passiveImg)
			})
			It("does not backup active img to passive", Label("docker"), func() {
				spec.Active.Source = v1.NewDockerSrc("alpine")
				upgrade = action.NewUpgradeAction(config, spec)
				err := upgrade.Run()
				Expect(err).ToNot(HaveOccurred())

				// Check that the rebrand worked with our os-release value
				Expect(memLog).To(ContainSubstring("default_menu_entry=TESTOS"))

				// This should be the new image
				info, err := fs.Stat(activeImg)
				Expect(err).ToNot(HaveOccurred())
				// Image size should not be empty
				Expect(info.Size()).To(BeNumerically("==", int64(spec.Active.Size*1024*1024)))
				Expect(info.IsDir()).To(BeFalse())

				// Passive should have not been touched
				info, err = fs.Stat(passiveImg)
				Expect(err).ToNot(HaveOccurred())
				// Should be a tiny image as it should only contain our text
				// As this was generated by us at the start test and moved by the upgrade from active.iomg
				Expect(info.Size()).To(BeNumerically(">", 0))
				Expect(info.Size()).To(BeNumerically("<", int64(spec.Active.Size*1024*1024)))
				f, _ := fs.ReadFile(passiveImg)
				Expect(f).To(ContainSubstring("passive"))

				// Expect transition image to be gone
				_, err = fs.Stat(spec.Active.File)
				Expect(err).To(HaveOccurred())

			})
		})
		Describe(fmt.Sprintf("Booting from %s", constants.RecoveryLabel), Label("recovery_label"), func() {
			Describe("Using squashfs", Label("squashfs"), func() {
				var err error
				BeforeEach(func() {
					// Mount recovery partition as it is expected to be mounted when booting from recovery
					mounter.Mount("device5", constants.LiveDir, "auto", []string{"ro"})
					// Create installState with squashed recovery
					statePath := filepath.Join(constants.RunningStateDir, constants.InstallStateFile)
					installState := &v1.InstallState{
						Partitions: map[string]*v1.PartitionState{
							constants.RecoveryPartName: {
								FSLabel: constants.RecoveryLabel,
								Images: map[string]*v1.ImageState{
									constants.RecoveryImgName: {
										FS: constants.SquashFs,
									},
								},
							},
						},
					}
					err = config.WriteInstallState(installState, statePath, statePath)
					Expect(err).ShouldNot(HaveOccurred())
					err = fs.WriteFile(recoveryImg, []byte("recovery"), constants.FilePerm)
					Expect(err).ShouldNot(HaveOccurred())

					spec, err = conf.NewUpgradeSpec(config.Config)
					Expect(err).ShouldNot(HaveOccurred())

					spec.RecoveryUpgrade = true
					spec.Recovery.Source = v1.NewDockerSrc("alpine")
					spec.Recovery.Size = 16

					runner.SideEffect = func(command string, args ...string) ([]byte, error) {
						if command == "cat" && args[0] == "/proc/cmdline" {
							return []byte(constants.RecoveryLabel), nil
						}
						if command == "mksquashfs" && args[1] == spec.Recovery.File {
							// create the transition img for squash to fake it
							_, _ = fs.Create(spec.Recovery.File)
						}
						if command == "mv" && args[0] == "-f" && args[1] == spec.Recovery.File && args[2] == recoveryImg {
							// fake "move"
							f, _ := fs.ReadFile(spec.Recovery.File)
							_ = fs.WriteFile(recoveryImg, f, constants.FilePerm)
							_ = fs.RemoveAll(spec.Recovery.File)
						}
						return []byte{}, nil
					}
					config.Runner = runner
				})
				It("Successfully upgrades recovery from docker image", Label("docker"), func() {
					// This should be the old image
					info, err := fs.Stat(recoveryImg)
					Expect(err).ToNot(HaveOccurred())
					// Image size should be empty
					Expect(info.Size()).To(BeNumerically(">", 0))
					Expect(info.IsDir()).To(BeFalse())
					f, _ := fs.ReadFile(recoveryImg)
					Expect(f).To(ContainSubstring("recovery"))

					spec.Recovery.Source = v1.NewDockerSrc("alpine")
					upgrade = action.NewUpgradeAction(config, spec)
					err = upgrade.Run()
					Expect(err).ToNot(HaveOccurred())

					// This should be the new image
					info, err = fs.Stat(recoveryImg)
					Expect(err).ToNot(HaveOccurred())
					// Image size should be empty
					Expect(info.Size()).To(BeNumerically("==", 0))
					Expect(info.IsDir()).To(BeFalse())
					f, _ = fs.ReadFile(recoveryImg)
					Expect(f).ToNot(ContainSubstring("recovery"))

					// Transition squash should not exist
					info, err = fs.Stat(spec.Recovery.File)
					Expect(err).To(HaveOccurred())

				})
				It("Successfully upgrades recovery from directory", Label("directory"), func() {
					srcDir, _ := utils.TempDir(fs, "", "elemental")
					// create a random file on it
					_ = fs.WriteFile(fmt.Sprintf("%s/file.file", srcDir), []byte("something"), constants.FilePerm)

					spec.Recovery.Source = v1.NewDirSrc(srcDir)
					upgrade = action.NewUpgradeAction(config, spec)
					err := upgrade.Run()
					Expect(err).ToNot(HaveOccurred())

					// This should be the new image
					info, err := fs.Stat(recoveryImg)
					Expect(err).ToNot(HaveOccurred())
					// Image size should be empty
					Expect(info.Size()).To(BeNumerically("==", 0))
					Expect(info.IsDir()).To(BeFalse())

					// Transition squash should not exist
					info, err = fs.Stat(spec.Recovery.File)
					Expect(err).To(HaveOccurred())

				})
				It("Successfully upgrades recovery from channel upgrade", Label("channel"), func() {
					// This should be the old image
					info, err := fs.Stat(recoveryImg)
					Expect(err).ToNot(HaveOccurred())
					// Image size should be empty
					Expect(info.Size()).To(BeNumerically(">", 0))
					Expect(info.IsDir()).To(BeFalse())
					f, _ := fs.ReadFile(recoveryImg)
					Expect(f).To(ContainSubstring("recovery"))

					upgrade = action.NewUpgradeAction(config, spec)
					err = upgrade.Run()
					Expect(err).ToNot(HaveOccurred())

					// This should be the new image
					info, err = fs.Stat(recoveryImg)
					Expect(err).ToNot(HaveOccurred())
					// Image size should be empty
					Expect(info.Size()).To(BeNumerically("==", 0))
					Expect(info.IsDir()).To(BeFalse())
					f, _ = fs.ReadFile(recoveryImg)
					Expect(f).ToNot(ContainSubstring("recovery"))

					// Transition squash should not exist
					info, err = fs.Stat(spec.Recovery.File)
					Expect(err).To(HaveOccurred())
				})
			})
			Describe("Not using squashfs", Label("non-squashfs"), func() {
				var err error
				BeforeEach(func() {
					// Create recoveryImg so it identifies that we are using nonsquash recovery
					err = fs.WriteFile(recoveryImg, []byte("recovery"), constants.FilePerm)
					Expect(err).ShouldNot(HaveOccurred())

					spec, err = conf.NewUpgradeSpec(config.Config)
					Expect(err).ShouldNot(HaveOccurred())

					spec.RecoveryUpgrade = true
					spec.Recovery.Source = v1.NewDockerSrc("alpine")
					spec.Recovery.Size = 16

					runner.SideEffect = func(command string, args ...string) ([]byte, error) {
						if command == "cat" && args[0] == "/proc/cmdline" {
							return []byte(constants.RecoveryLabel), nil
						}
						if command == "mv" && args[0] == "-f" && args[1] == spec.Recovery.File && args[2] == recoveryImg {
							// fake "move"
							f, _ := fs.ReadFile(spec.Recovery.File)
							_ = fs.WriteFile(recoveryImg, f, constants.FilePerm)
							_ = fs.RemoveAll(spec.Recovery.File)
						}
						return []byte{}, nil
					}
					config.Runner = runner
					_ = fs.WriteFile(recoveryImg, []byte("recovery"), constants.FilePerm)
					// Mount recovery partition as it is expected to be mounted when booting from recovery
					mounter.Mount("device5", constants.LiveDir, "auto", []string{"ro"})
				})
				It("Successfully upgrades recovery from docker image", Label("docker"), func() {
					// This should be the old image
					info, err := fs.Stat(recoveryImg)
					Expect(err).ToNot(HaveOccurred())
					// Image size should not be empty
					Expect(info.Size()).To(BeNumerically(">", 0))
					Expect(info.Size()).To(BeNumerically("<", int64(spec.Recovery.Size*1024*1024)))
					Expect(info.IsDir()).To(BeFalse())
					f, _ := fs.ReadFile(recoveryImg)
					Expect(f).To(ContainSubstring("recovery"))

					spec.Recovery.Source = v1.NewDockerSrc("apline")

					upgrade = action.NewUpgradeAction(config, spec)
					err = upgrade.Run()
					Expect(err).ToNot(HaveOccurred())

					// Should have created recovery image
					info, err = fs.Stat(recoveryImg)
					Expect(err).ToNot(HaveOccurred())
					// Image size should be default size
					Expect(info.Size()).To(BeNumerically("==", int64(spec.Recovery.Size*1024*1024)))

					// Expect the rest of the images to not be there
					for _, img := range []string{activeImg, passiveImg} {
						_, err := fs.Stat(img)
						Expect(err).To(HaveOccurred())
					}
				})
				It("Successfully upgrades recovery from directory", Label("directory"), func() {
					srcDir, _ := utils.TempDir(fs, "", "elemental")
					// create a random file on it
					_ = fs.WriteFile(fmt.Sprintf("%s/file.file", srcDir), []byte("something"), constants.FilePerm)

					spec.Recovery.Source = v1.NewDirSrc(srcDir)

					upgrade = action.NewUpgradeAction(config, spec)
					err := upgrade.Run()
					Expect(err).ToNot(HaveOccurred())

					// This should be the new image
					info, err := fs.Stat(recoveryImg)
					Expect(err).ToNot(HaveOccurred())
					// Image size should be default size
					Expect(info.Size()).To(BeNumerically("==", int64(spec.Recovery.Size*1024*1024)))
					Expect(info.IsDir()).To(BeFalse())

					// Transition should not exist
					info, err = fs.Stat(spec.Recovery.File)
					Expect(err).To(HaveOccurred())

					// An upgraded state yaml file should exist
					state, err := config.LoadInstallState()
					Expect(err).ShouldNot(HaveOccurred())
					Expect(
						state.Partitions[constants.RecoveryPartName].
							Images[constants.RecoveryImgName].Source.String()).
						To(Equal(spec.Recovery.Source.String()))
				})
				It("Successfully upgrades recovery from channel upgrade", Label("channel"), func() {
					// This should be the old image
					info, err := fs.Stat(recoveryImg)
					Expect(err).ToNot(HaveOccurred())
					// Image size should not be empty
					Expect(info.Size()).To(BeNumerically(">", 0))
					Expect(info.Size()).To(BeNumerically("<", int64(spec.Recovery.Size*1024*1024)))
					Expect(info.IsDir()).To(BeFalse())
					f, _ := fs.ReadFile(recoveryImg)
					Expect(f).To(ContainSubstring("recovery"))

					upgrade = action.NewUpgradeAction(config, spec)
					err = upgrade.Run()
					Expect(err).ToNot(HaveOccurred())

					// Should have created recovery image
					info, err = fs.Stat(recoveryImg)
					Expect(err).ToNot(HaveOccurred())
					// Should have default image size
					Expect(info.Size()).To(BeNumerically("==", int64(spec.Recovery.Size*1024*1024)))

					// Expect the rest of the images to not be there
					for _, img := range []string{activeImg, passiveImg} {
						_, err := fs.Stat(img)
						Expect(err).To(HaveOccurred())
					}
				})
			})
		})
	})
})
 0707010000005B000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000002200000000elemental-cli-0.3.1/pkg/cloudinit 0707010000005C000081A4000000000000000000000001645E367C00000896000000000000000000000000000000000000002F00000000elemental-cli-0.3.1/pkg/cloudinit/cloudinit.go    /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cloudinit

import (
	"github.com/mudler/yip/pkg/executor"
	"github.com/mudler/yip/pkg/plugins"
	"github.com/mudler/yip/pkg/schema"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	"github.com/twpayne/go-vfs"
)

type YipCloudInitRunner struct {
	exec    executor.Executor
	fs      vfs.FS
	console plugins.Console
}

// NewYipCloudInitRunner returns a default yip cloud init executor with the Elemental plugin set.
// It accepts a logger which is used inside the runner.
func NewYipCloudInitRunner(l v1.Logger, r v1.Runner, fs vfs.FS) *YipCloudInitRunner {
	exec := executor.NewExecutor(
		executor.WithConditionals(
			plugins.NodeConditional,
			plugins.IfConditional,
		),
		executor.WithLogger(l),
		executor.WithPlugins(
			// Note, the plugin execution order depends on the order passed here
			plugins.DNS,
			plugins.Download,
			plugins.Git,
			plugins.Entities,
			plugins.EnsureDirectories,
			plugins.EnsureFiles,
			plugins.Commands,
			plugins.DeleteEntities,
			plugins.Hostname,
			plugins.Sysctl,
			plugins.User,
			plugins.SSH,
			plugins.LoadModules,
			plugins.Timesyncd,
			plugins.Systemctl,
			plugins.Environment,
			plugins.SystemdFirstboot,
			plugins.DataSources,
			layoutPlugin,
		),
	)
	return &YipCloudInitRunner{
		exec: exec, fs: fs,
		console: newCloudInitConsole(l, r),
	}
}

func (ci YipCloudInitRunner) Run(stage string, args ...string) error {
	return ci.exec.Run(stage, ci.fs, ci.console, args...)
}

func (ci *YipCloudInitRunner) SetModifier(m schema.Modifier) {
	ci.exec.Modifier(m)
}

// Useful for testing purposes
func (ci *YipCloudInitRunner) SetFs(fs vfs.FS) {
	ci.fs = fs
}
  0707010000005D000081A4000000000000000000000001645E367C00000307000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/pkg/cloudinit/cloudinit_suite_test.go /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cloudinit_test

import (
	"testing"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

func TestTypes(t *testing.T) {
	RegisterFailHandler(Fail)
	RunSpecs(t, "cloudinit type test suite")
}
 0707010000005E000081A4000000000000000000000001645E367C00001E8A000000000000000000000000000000000000003400000000elemental-cli-0.3.1/pkg/cloudinit/cloudinit_test.go   /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cloudinit_test

import (
	"errors"
	"fmt"
	"io/ioutil"
	"log"
	"os"

	"github.com/jaypipes/ghw/pkg/block"

	. "github.com/rancher/elemental-cli/pkg/cloudinit"
	"github.com/rancher/elemental-cli/pkg/constants"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	"github.com/rancher/elemental-cli/pkg/utils"
	v1mock "github.com/rancher/elemental-cli/tests/mocks"
	"github.com/twpayne/go-vfs/vfst"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

// Parted print sample output
const printOutput = `BYT;
/dev/loop0:50593792s:loopback:512:512:msdos:Loopback device:;
1:2048s:98303s:96256s:ext4::type=83;
2:98304s:29394943s:29296640s:ext4::boot, type=83;
3:29394944s:45019135s:15624192s:ext4::type=83;`

var _ = Describe("CloudRunner", Label("CloudRunner", "types", "cloud-init"), func() {
	// unit test stolen from yip
	Describe("loading yaml files", func() {
		logger := v1.NewNullLogger()

		It("executes commands", func() {

			fs2, cleanup2, err := vfst.NewTestFS(map[string]interface{}{})
			Expect(err).Should(BeNil())
			temp := fs2.TempDir()

			defer cleanup2()

			fs, cleanup, err := vfst.NewTestFS(map[string]interface{}{
				"/some/yip/01_first.yaml": `
stages:
  test:
  - commands:
    - sed -i 's/boo/bar/g' ` + temp + `/tmp/test/bar
`,
				"/some/yip/02_second.yaml": `
stages:
  test:
  - commands:
    - sed -i 's/bar/baz/g' ` + temp + `/tmp/test/bar
`,
			})
			Expect(err).Should(BeNil())
			defer cleanup()

			err = fs2.Mkdir("/tmp", os.ModePerm)
			Expect(err).Should(BeNil())
			err = fs2.Mkdir("/tmp/test", os.ModePerm)
			Expect(err).Should(BeNil())

			err = fs2.WriteFile("/tmp/test/bar", []byte(`boo`), os.ModePerm)
			Expect(err).Should(BeNil())

			runner := NewYipCloudInitRunner(logger, &v1.RealRunner{}, fs)

			err = runner.Run("test", "/some/yip")
			Expect(err).Should(BeNil())
			file, err := os.Open(temp + "/tmp/test/bar")
			Expect(err).ShouldNot(HaveOccurred())

			b, err := ioutil.ReadAll(file)
			if err != nil {
				log.Fatal(err)
			}

			Expect(string(b)).Should(Equal("baz"))
		})
	})
	Describe("layout plugin execution", func() {
		var runner *v1mock.FakeRunner
		var afs *vfst.TestFS
		var device, cmdFail string
		var partNum int
		var cleanup func()
		logger := v1.NewNullLogger()
		BeforeEach(func() {
			afs, cleanup, _ = vfst.NewTestFS(nil)
			err := utils.MkdirAll(afs, "/some/yip", constants.DirPerm)
			Expect(err).To(BeNil())
			_ = utils.MkdirAll(afs, "/dev", constants.DirPerm)
			device = "/dev/device"
			_, err = afs.Create(device)
			Expect(err).To(BeNil())

			runner = v1mock.NewFakeRunner()

			runner.SideEffect = func(cmd string, args ...string) ([]byte, error) {
				if cmd == cmdFail {
					return []byte{}, errors.New("command error")
				}
				switch cmd {
				case "parted":
					return []byte(printOutput), nil
				default:
					return []byte{}, nil
				}
			}
		})
		AfterEach(func() {
			cleanup()
		})
		It("Does nothing if no changes are defined", func() {
			err := afs.WriteFile("/some/yip/layout.yaml", []byte(fmt.Sprintf(`
stages:
  test:
  - name: Nothing to do
    layout:
  - name: Empty device, does nothing
    layout:
      device:
        label: ""
        path: ""
  - name: Defined device without partitions, does nothing
    layout:
      device:
        path: %s
  - name: Defined already existing partition, does nothing
    layout:
      device:
        label: DEV_LABEL
      add_partitions:
      - fsLabel: DEV_LABEL
        pLabel: partLabel
`, device)), constants.FilePerm)
			Expect(err).To(BeNil())
			ghwTest := v1mock.GhwMock{}
			disk := block.Disk{Name: "device", Partitions: []*block.Partition{
				{
					Name:            "device1",
					FilesystemLabel: "DEV_LABEL",
				},
			}}
			ghwTest.AddDisk(disk)
			ghwTest.CreateDevices()
			defer ghwTest.Clean()
			cloudRunner := NewYipCloudInitRunner(logger, runner, afs)
			Expect(cloudRunner.Run("test", "/some/yip")).To(BeNil())
		})
		It("Expands last partition on a MSDOS disk", func() {
			partNum = 3
			_, err := afs.Create(fmt.Sprintf("%s%d", device, partNum))
			Expect(err).To(BeNil())
			err = afs.WriteFile("/some/yip/layout.yaml", []byte(fmt.Sprintf(`
stages:
  test:
  - name: Expanding last partition
    layout:
      device:
        path: %s
      expand_partition:
        size: 0
`, device)), constants.FilePerm)
			Expect(err).To(BeNil())
			ghwTest := v1mock.GhwMock{}
			disk := block.Disk{Name: "device", Partitions: []*block.Partition{
				{
					Name: fmt.Sprintf("device%d", partNum),
					Type: "ext4",
				},
			}}
			ghwTest.AddDisk(disk)
			ghwTest.CreateDevices()
			defer ghwTest.Clean()
			cloudRunner := NewYipCloudInitRunner(logger, runner, afs)
			Expect(cloudRunner.Run("test", "/some/yip")).To(BeNil())
		})
		It("Adds a partition on a MSDOS disk", func() {
			partNum = 4
			_, err := afs.Create(fmt.Sprintf("%s%d", device, partNum))
			Expect(err).To(BeNil())
			err = afs.WriteFile("/some/yip/layout.yaml", []byte(fmt.Sprintf(`
stages:
  test:
  - name: Adding new partition
    layout:
      device:
        path: %s
      add_partitions: 
      - fsLabel: SOMELABEL
        pLabel: somelabel
`, device)), constants.FilePerm)
			Expect(err).To(BeNil())
			cloudRunner := NewYipCloudInitRunner(logger, runner, afs)
			Expect(cloudRunner.Run("test", "/some/yip")).To(BeNil())
		})
		It("Fails to add a partition on a MSDOS disk", func() {
			cmdFail = "mkfs.ext4"
			partNum = 4
			_, err := afs.Create(fmt.Sprintf("%s%d", device, partNum))
			Expect(err).To(BeNil())
			err = afs.WriteFile("/some/yip/layout.yaml", []byte(fmt.Sprintf(`
stages:
  test:
  - name: Adding new partition
    layout:
      device:
        path: %s
      add_partitions: 
      - fsLabel: SOMELABEL
        pLabel: somelabel
`, device)), constants.FilePerm)
			Expect(err).To(BeNil())
			cloudRunner := NewYipCloudInitRunner(logger, runner, afs)
			Expect(cloudRunner.Run("test", "/some/yip")).NotTo(BeNil())
		})
		It("Fails to expand last partition", func() {
			partNum = 3
			cmdFail = "resize2fs"
			_, err := afs.Create(fmt.Sprintf("%s%d", device, partNum))
			Expect(err).To(BeNil())
			err = afs.WriteFile("/some/yip/layout.yaml", []byte(fmt.Sprintf(`
stages:
  test:
  - name: Expanding last partition
    layout:
      device:
        path: %s
      expand_partition:
        size: 0
`, device)), constants.FilePerm)
			Expect(err).To(BeNil())
			cloudRunner := NewYipCloudInitRunner(logger, runner, afs)
			Expect(cloudRunner.Run("test", "/some/yip")).NotTo(BeNil())
		})
		It("Fails to find device by path", func() {
			err := afs.WriteFile("/some/yip/layout.yaml", []byte(`
stages:
  test:
  - name: Missing device path
    layout:
      device:
        path: /whatever
`), constants.FilePerm)
			Expect(err).To(BeNil())
			cloudRunner := NewYipCloudInitRunner(logger, runner, afs)
			Expect(cloudRunner.Run("test", "/some/yip")).NotTo(BeNil())
		})
		It("Fails to find device by label", func() {
			err := afs.WriteFile("/some/yip/layout.yaml", []byte(`
stages:
  test:
  - name: Missing device label
    layout:
      device:
        label: IM_NOT_THERE
`), constants.FilePerm)
			Expect(err).To(BeNil())
			cloudRunner := NewYipCloudInitRunner(logger, runner, afs)
			Expect(cloudRunner.Run("test", "/some/yip")).NotTo(BeNil())
		})
	})
})
  0707010000005F000081A4000000000000000000000001645E367C00000948000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/pkg/cloudinit/console.go  /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cloudinit

import (
	"fmt"
	"os/exec"

	"github.com/hashicorp/go-multierror"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
)

// cloudInitConsole represents a yip's Console implementations using
// the elemental v1.Runner interface.
type cloudInitConsole struct {
	runner v1.Runner
	logger v1.Logger
}

// newCloudInitConsole returns an instance of the cloudInitConsole based on the
// given v1.Runner and v1.Logger.
func newCloudInitConsole(l v1.Logger, r v1.Runner) *cloudInitConsole {
	return &cloudInitConsole{logger: l, runner: r}
}

// getRunner returns the internal runner used within this Console
func (c cloudInitConsole) getRunner() v1.Runner {
	return c.runner
}

// Run runs a command using the v1.Runner internal instance
func (c cloudInitConsole) Run(command string, opts ...func(cmd *exec.Cmd)) (string, error) {
	c.logger.Debugf("running command `%s`", command)
	cmd := c.runner.InitCmd("sh", "-c", command)
	for _, o := range opts {
		o(cmd)
	}
	out, err := c.runner.RunCmd(cmd)
	if err != nil {
		return string(out), fmt.Errorf("failed to run %s: %v", command, err)
	}

	return string(out), err
}

// Start runs a non blocking command using the v1.Runner internal instance
func (c cloudInitConsole) Start(cmd *exec.Cmd, opts ...func(cmd *exec.Cmd)) error {
	c.logger.Debugf("running command `%s`", cmd)
	for _, o := range opts {
		o(cmd)
	}
	return cmd.Run()
}

// RunTemplate runs a sequence of non-blocking templated commands using the v1.Runner internal instance
func (c cloudInitConsole) RunTemplate(st []string, template string) error {
	var errs error

	for _, svc := range st {
		out, err := c.Run(fmt.Sprintf(template, svc))
		if err != nil {
			c.logger.Error(out)
			c.logger.Error(err.Error())
			errs = multierror.Append(errs, err)
			continue
		}
	}
	return errs
}
07070100000060000081A4000000000000000000000001645E367C00000CD9000000000000000000000000000000000000003300000000elemental-cli-0.3.1/pkg/cloudinit/layout_plugin.go    /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cloudinit

import (
	"errors"
	"fmt"
	"strings"

	"github.com/mudler/yip/pkg/logger"
	"github.com/mudler/yip/pkg/plugins"
	"github.com/mudler/yip/pkg/schema"
	"github.com/rancher/elemental-cli/pkg/constants"
	"github.com/rancher/elemental-cli/pkg/partitioner"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	"github.com/rancher/elemental-cli/pkg/utils"
	"github.com/twpayne/go-vfs"
)

// layoutPlugin is the elemental's implementation of Layout yip's plugin based
// on partitioner package
func layoutPlugin(l logger.Interface, s schema.Stage, fs vfs.FS, console plugins.Console) (err error) {
	if s.Layout.Device == nil {
		return nil
	}

	var dev *partitioner.Disk
	elemConsole, ok := console.(*cloudInitConsole)
	if !ok {
		return errors.New("provided console is not an instance of 'cloudInitConsole' type")
	}
	runner := elemConsole.getRunner()
	log, ok := l.(v1.Logger)
	if !ok {
		return errors.New("provided logger is not implementing v1.Logger interface")
	}

	if len(strings.TrimSpace(s.Layout.Device.Label)) > 0 {
		partDevice, err := utils.GetFullDeviceByLabel(runner, s.Layout.Device.Label, 5)
		if err != nil {
			l.Errorf("Exiting, disk not found:\n %s", err.Error())
			return err
		}
		dev = partitioner.NewDisk(
			partDevice.Disk,
			partitioner.WithRunner(runner),
			partitioner.WithLogger(log),
			partitioner.WithFS(fs),
		)
	} else if len(strings.TrimSpace(s.Layout.Device.Path)) > 0 {
		dev = partitioner.NewDisk(
			s.Layout.Device.Path,
			partitioner.WithRunner(runner),
			partitioner.WithLogger(log),
			partitioner.WithFS(fs),
		)
	} else {
		l.Warnf("No target device defined, nothing to do")
		return nil
	}

	if !dev.Exists() {
		l.Errorf("Exiting, disk not found:\n %s", s.Layout.Device.Path)
		return errors.New("Target disk not found")
	}

	if s.Layout.Expand != nil {
		l.Infof("Extending last partition up to %d MiB", s.Layout.Expand.Size)
		out, err := dev.ExpandLastPartition(s.Layout.Expand.Size)
		if err != nil {
			l.Error(out)
			return err
		}
	}

	for _, part := range s.Layout.Parts {
		_, err := utils.GetFullDeviceByLabel(runner, part.FSLabel, 1)
		if err == nil {
			l.Warnf("Partition with FSLabel: %s already exists, ignoring", part.FSLabel)
			continue
		}

		// Set default filesystem
		if part.FileSystem == "" {
			part.FileSystem = constants.LinuxFs
		}

		l.Infof("Creating %s partition", part.FSLabel)
		partNum, err := dev.AddPartition(part.Size, part.FileSystem, part.PLabel)
		if err != nil {
			return fmt.Errorf("Failed creating partitions: %w", err)
		}
		out, err := dev.FormatPartition(partNum, part.FileSystem, part.FSLabel)
		if err != nil {
			return fmt.Errorf("Formatting partition failed: %s\nError: %w", out, err)
		}
	}
	return nil
}
   07070100000061000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000001F00000000elemental-cli-0.3.1/pkg/config    07070100000062000081A4000000000000000000000001645E367C000034A2000000000000000000000000000000000000002900000000elemental-cli-0.3.1/pkg/config/config.go  /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package config

import (
	"fmt"
	"path/filepath"
	"runtime"

	"github.com/twpayne/go-vfs"
	"k8s.io/mount-utils"

	"github.com/rancher/elemental-cli/pkg/cloudinit"
	"github.com/rancher/elemental-cli/pkg/constants"
	"github.com/rancher/elemental-cli/pkg/http"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	"github.com/rancher/elemental-cli/pkg/utils"
)

type GenericOptions func(a *v1.Config) error

func WithFs(fs v1.FS) func(r *v1.Config) error {
	return func(r *v1.Config) error {
		r.Fs = fs
		return nil
	}
}

func WithLogger(logger v1.Logger) func(r *v1.Config) error {
	return func(r *v1.Config) error {
		r.Logger = logger
		return nil
	}
}

func WithSyscall(syscall v1.SyscallInterface) func(r *v1.Config) error {
	return func(r *v1.Config) error {
		r.Syscall = syscall
		return nil
	}
}

func WithMounter(mounter mount.Interface) func(r *v1.Config) error {
	return func(r *v1.Config) error {
		r.Mounter = mounter
		return nil
	}
}

func WithRunner(runner v1.Runner) func(r *v1.Config) error {
	return func(r *v1.Config) error {
		r.Runner = runner
		return nil
	}
}

func WithClient(client v1.HTTPClient) func(r *v1.Config) error {
	return func(r *v1.Config) error {
		r.Client = client
		return nil
	}
}

func WithCloudInitRunner(ci v1.CloudInitRunner) func(r *v1.Config) error {
	return func(r *v1.Config) error {
		r.CloudInitRunner = ci
		return nil
	}
}

func WithPlatform(platform string) func(r *v1.Config) error {
	return func(r *v1.Config) error {
		p, err := v1.ParsePlatform(platform)
		r.Platform = p
		return err
	}
}

func WithOCIImageExtractor() func(r *v1.Config) error {
	return func(r *v1.Config) error {
		r.ImageExtractor = v1.OCIImageExtractor{}
		return nil
	}
}

func WithImageExtractor(extractor v1.ImageExtractor) func(r *v1.Config) error {
	return func(r *v1.Config) error {
		r.ImageExtractor = extractor
		return nil
	}
}

func NewConfig(opts ...GenericOptions) *v1.Config {
	log := v1.NewLogger()

	defaultPlatform, err := v1.NewPlatformFromArch(runtime.GOARCH)
	if err != nil {
		log.Errorf("error parsing default platform (%s): %s", runtime.GOARCH, err.Error())
		return nil
	}

	c := &v1.Config{
		Fs:                        vfs.OSFS,
		Logger:                    log,
		Syscall:                   &v1.RealSyscall{},
		Client:                    http.NewClient(),
		Platform:                  defaultPlatform,
		SquashFsCompressionConfig: constants.GetDefaultSquashfsCompressionOptions(),
	}
	for _, o := range opts {
		err := o(c)
		if err != nil {
			log.Errorf("error applying config option: %s", err.Error())
			return nil
		}
	}

	// delay runner creation after we have run over the options in case we use WithRunner
	if c.Runner == nil {
		c.Runner = &v1.RealRunner{Logger: c.Logger}
	}

	// Now check if the runner has a logger inside, otherwise point our logger into it
	// This can happen if we set the WithRunner option as that doesn't set a logger
	if c.Runner.GetLogger() == nil {
		c.Runner.SetLogger(c.Logger)
	}

	// Delay the yip runner creation, so we set the proper logger instead of blindly setting it to the logger we create
	// at the start of NewRunConfig, as WithLogger can be passed on init, and that would result in 2 different logger
	// instances, on the config.Logger and the other on config.CloudInitRunner
	if c.CloudInitRunner == nil {
		c.CloudInitRunner = cloudinit.NewYipCloudInitRunner(c.Logger, c.Runner, vfs.OSFS)
	}

	if c.Mounter == nil {
		c.Mounter = mount.New(constants.MountBinary)
	}

	return c
}

func NewRunConfig(opts ...GenericOptions) *v1.RunConfig {
	config := NewConfig(opts...)
	r := &v1.RunConfig{
		Config: *config,
	}
	return r
}

// NewInstallSpec returns an InstallSpec struct all based on defaults and basic host checks (e.g. EFI vs BIOS)
func NewInstallSpec(cfg v1.Config) *v1.InstallSpec {
	var firmware string
	var recoveryImg, activeImg, passiveImg v1.Image

	// Check if current host has EFI firmware
	efiExists, _ := utils.Exists(cfg.Fs, constants.EfiDevice)
	// Check the default ISO installation media is available
	isoRootExists, _ := utils.Exists(cfg.Fs, constants.ISOBaseTree)

	if efiExists {
		firmware = v1.EFI
	} else {
		firmware = v1.BIOS
	}

	activeImg.Label = constants.ActiveLabel
	activeImg.Size = constants.ImgSize
	activeImg.File = filepath.Join(constants.StateDir, "cOS", constants.ActiveImgFile)
	activeImg.FS = constants.LinuxImgFs
	activeImg.MountPoint = constants.ActiveDir
	if isoRootExists {
		activeImg.Source = v1.NewDirSrc(constants.ISOBaseTree)
	} else {
		activeImg.Source = v1.NewEmptySrc()
	}

	recoveryImg.Source = v1.NewFileSrc(activeImg.File)
	recoveryImg.FS = constants.LinuxImgFs
	recoveryImg.Label = constants.SystemLabel
	recoveryImg.File = filepath.Join(constants.RecoveryDir, "cOS", constants.RecoveryImgFile)

	passiveImg = v1.Image{
		File:   filepath.Join(constants.StateDir, "cOS", constants.PassiveImgFile),
		Label:  constants.PassiveLabel,
		Source: v1.NewFileSrc(activeImg.File),
		FS:     constants.LinuxImgFs,
	}

	return &v1.InstallSpec{
		Firmware:   firmware,
		PartTable:  v1.GPT,
		Partitions: NewInstallElementalParitions(),
		GrubConf:   constants.GrubConf,
		Active:     activeImg,
		Recovery:   recoveryImg,
		Passive:    passiveImg,
	}
}

func NewInstallElementalParitions() v1.ElementalPartitions {
	partitions := v1.ElementalPartitions{}
	partitions.OEM = &v1.Partition{
		FilesystemLabel: constants.OEMLabel,
		Size:            constants.OEMSize,
		Name:            constants.OEMPartName,
		FS:              constants.LinuxFs,
		MountPoint:      constants.OEMDir,
		Flags:           []string{},
	}

	partitions.Recovery = &v1.Partition{
		FilesystemLabel: constants.RecoveryLabel,
		Size:            constants.RecoverySize,
		Name:            constants.RecoveryPartName,
		FS:              constants.LinuxFs,
		MountPoint:      constants.RecoveryDir,
		Flags:           []string{},
	}

	partitions.State = &v1.Partition{
		FilesystemLabel: constants.StateLabel,
		Size:            constants.StateSize,
		Name:            constants.StatePartName,
		FS:              constants.LinuxFs,
		MountPoint:      constants.StateDir,
		Flags:           []string{},
	}

	partitions.Persistent = &v1.Partition{
		FilesystemLabel: constants.PersistentLabel,
		Size:            constants.PersistentSize,
		Name:            constants.PersistentPartName,
		FS:              constants.LinuxFs,
		MountPoint:      constants.PersistentDir,
		Flags:           []string{},
	}
	return partitions
}

// getActivePassiveAndRecovery returns active, passive and recovery states from a given install state. It
// returns default values for any missing field.
func getActivePassiveAndRecoveryState(state *v1.InstallState) (active, passive, recovery *v1.ImageState) {
	recovery = &v1.ImageState{
		FS:    constants.LinuxImgFs,
		Label: constants.SystemLabel,
	}
	passive = &v1.ImageState{
		FS:    constants.LinuxImgFs,
		Label: constants.PassiveLabel,
	}
	active = &v1.ImageState{
		FS:    constants.LinuxImgFs,
		Label: constants.ActiveLabel,
	}

	if state != nil {
		sPart := state.Partitions[constants.StatePartName]
		if sPart != nil {
			if sPart.Images[constants.ActiveImgName] != nil {
				active = sPart.Images[constants.ActiveImgName]
			}
			if sPart.Images[constants.PassiveImgName] != nil {
				passive = sPart.Images[constants.PassiveImgName]
			}
		}
		rPart := state.Partitions[constants.RecoveryPartName]
		if rPart != nil {
			if rPart.Images[constants.RecoveryImgName] != nil {
				recovery = rPart.Images[constants.RecoveryImgName]
			}
		}
	}

	return active, passive, recovery
}

// NewUpgradeSpec returns an UpgradeSpec struct all based on defaults and current host state
func NewUpgradeSpec(cfg v1.Config) (*v1.UpgradeSpec, error) {
	var aState, pState, rState *v1.ImageState
	var active, passive, recovery v1.Image

	installState, err := cfg.LoadInstallState()
	if err != nil {
		cfg.Logger.Warnf("failed reading installation state: %s", err.Error())
	}

	aState, pState, rState = getActivePassiveAndRecoveryState(installState)

	parts, err := utils.GetAllPartitions()
	if err != nil {
		return nil, fmt.Errorf("could not read host partitions")
	}
	ep := v1.NewElementalPartitionsFromList(parts, installState)

	if ep.Recovery != nil {
		if ep.Recovery.MountPoint == "" {
			ep.Recovery.MountPoint = constants.RecoveryDir
		}

		recovery = v1.Image{
			File:       filepath.Join(ep.Recovery.MountPoint, "cOS", constants.TransitionImgFile),
			Size:       constants.ImgSize,
			Label:      rState.Label,
			FS:         rState.FS,
			MountPoint: constants.TransitionDir,
			Source:     v1.NewEmptySrc(),
		}
	}

	if ep.State != nil {
		if ep.State.MountPoint == "" {
			ep.State.MountPoint = constants.StateDir
		}

		active = v1.Image{
			File:       filepath.Join(ep.State.MountPoint, "cOS", constants.TransitionImgFile),
			Size:       constants.ImgSize,
			Label:      aState.Label,
			FS:         aState.FS,
			MountPoint: constants.TransitionDir,
			Source:     v1.NewEmptySrc(),
		}

		passive = v1.Image{
			File:   filepath.Join(ep.State.MountPoint, "cOS", constants.PassiveImgFile),
			Label:  pState.Label,
			Source: v1.NewFileSrc(active.File),
			FS:     active.FS,
		}
	}

	// This is needed if we want to use the persistent as tmpdir for the upgrade images
	// as tmpfs is 25% of the total RAM, we cannot rely on the tmp dir having enough space for our image
	// This enables upgrades on low ram devices
	if ep.Persistent != nil {
		if ep.Persistent.MountPoint == "" {
			ep.Persistent.MountPoint = constants.PersistentDir
		}
	}

	return &v1.UpgradeSpec{
		Active:     active,
		Recovery:   recovery,
		Passive:    passive,
		Partitions: ep,
		State:      installState,
	}, nil
}

// NewResetSpec returns a ResetSpec struct all based on defaults and current host state
func NewResetSpec(cfg v1.Config) (*v1.ResetSpec, error) {
	var imgSource *v1.ImageSource
	var aState, pState *v1.ImageState

	if !utils.BootedFrom(cfg.Runner, constants.RecoveryImgFile) {
		return nil, fmt.Errorf("reset can only be called from the recovery system")
	}

	efiExists, _ := utils.Exists(cfg.Fs, constants.EfiDevice)

	installState, err := cfg.LoadInstallState()
	if err != nil {
		cfg.Logger.Warnf("failed reading installation state: %s", err.Error())
	}
	aState, pState, _ = getActivePassiveAndRecoveryState(installState)

	parts, err := utils.GetAllPartitions()
	if err != nil {
		return nil, fmt.Errorf("could not read host partitions")
	}
	ep := v1.NewElementalPartitionsFromList(parts, installState)

	if efiExists {
		if ep.EFI == nil {
			return nil, fmt.Errorf("EFI partition not found")
		}
		if ep.EFI.MountPoint == "" {
			ep.EFI.MountPoint = constants.EfiDir
		}
		ep.EFI.Name = constants.EfiPartName
	}

	if ep.State == nil {
		return nil, fmt.Errorf("state partition not found")
	}
	if ep.State.MountPoint == "" {
		ep.State.MountPoint = constants.StateDir
	}
	ep.State.Name = constants.StatePartName

	if ep.Recovery == nil {
		return nil, fmt.Errorf("recovery partition not found")
	}
	if ep.Recovery.MountPoint == "" {
		ep.Recovery.MountPoint = constants.RecoveryDir
	}

	target := ep.State.Disk

	// OEM partition is not a hard requirement
	if ep.OEM != nil {
		if ep.OEM.MountPoint == "" {
			ep.OEM.MountPoint = constants.OEMDir
		}
		ep.OEM.Name = constants.OEMPartName
	} else {
		cfg.Logger.Warnf("no OEM partition found")
	}

	// Persistent partition is not a hard requirement
	if ep.Persistent != nil {
		if ep.Persistent.MountPoint == "" {
			ep.Persistent.MountPoint = constants.PersistentDir
		}
		ep.Persistent.Name = constants.PersistentPartName
	} else {
		cfg.Logger.Warnf("no Persistent partition found")
	}

	recoveryImg := filepath.Join(constants.RunningStateDir, "cOS", constants.RecoveryImgFile)

	if exists, _ := utils.Exists(cfg.Fs, recoveryImg); exists {
		imgSource = v1.NewFileSrc(recoveryImg)
	} else {
		imgSource = v1.NewEmptySrc()
	}

	activeFile := filepath.Join(ep.State.MountPoint, "cOS", constants.ActiveImgFile)
	return &v1.ResetSpec{
		Target:       target,
		Partitions:   ep,
		Efi:          efiExists,
		GrubDefEntry: constants.GrubDefEntry,
		GrubConf:     constants.GrubConf,
		Active: v1.Image{
			Label:      aState.Label,
			Size:       constants.ImgSize,
			File:       activeFile,
			FS:         aState.FS,
			Source:     imgSource,
			MountPoint: constants.ActiveDir,
		},
		Passive: v1.Image{
			File:   filepath.Join(ep.State.MountPoint, "cOS", constants.PassiveImgFile),
			Label:  pState.Label,
			Source: v1.NewFileSrc(activeFile),
			FS:     aState.FS,
		},
		State: installState,
	}, nil
}

func NewISO() *v1.LiveISO {
	return &v1.LiveISO{
		Label:     constants.ISOLabel,
		GrubEntry: constants.GrubDefEntry,
		UEFI:      []*v1.ImageSource{},
		Image:     []*v1.ImageSource{},
		Firmware:  v1.EFI,
	}
}

func NewBuildConfig(opts ...GenericOptions) *v1.BuildConfig {
	b := &v1.BuildConfig{
		Config: *NewConfig(opts...),
		Name:   constants.BuildImgName,
	}
	return b
}
  07070100000063000081A4000000000000000000000001645E367C00000308000000000000000000000000000000000000003400000000elemental-cli-0.3.1/pkg/config/config_suite_test.go   /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package config_test

import (
	"testing"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

func TestTypes(t *testing.T) {
	RegisterFailHandler(Fail)
	RunSpecs(t, "config initializer test suite")
}
07070100000064000081A4000000000000000000000001645E367C0000376A000000000000000000000000000000000000002E00000000elemental-cli-0.3.1/pkg/config/config_test.go /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package config_test

import (
	"path/filepath"

	"github.com/jaypipes/ghw/pkg/block"
	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/twpayne/go-vfs/vfst"
	"k8s.io/mount-utils"

	"github.com/rancher/elemental-cli/pkg/config"
	"github.com/rancher/elemental-cli/pkg/constants"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	"github.com/rancher/elemental-cli/pkg/utils"
	v1mock "github.com/rancher/elemental-cli/tests/mocks"
)

var _ = Describe("Types", Label("types", "config"), func() {
	Describe("Config", func() {
		var err error
		var cleanup func()
		var fs *vfst.TestFS
		var mounter *v1mock.ErrorMounter
		var runner *v1mock.FakeRunner
		var client *v1mock.FakeHTTPClient
		var sysc *v1mock.FakeSyscall
		var logger v1.Logger
		var ci *v1mock.FakeCloudInitRunner
		var c *v1.Config
		BeforeEach(func() {
			fs, cleanup, err = vfst.NewTestFS(nil)
			Expect(err).ToNot(HaveOccurred())
			mounter = v1mock.NewErrorMounter()
			runner = v1mock.NewFakeRunner()
			client = &v1mock.FakeHTTPClient{}
			sysc = &v1mock.FakeSyscall{}
			logger = v1.NewNullLogger()
			ci = &v1mock.FakeCloudInitRunner{}
			c = config.NewConfig(
				config.WithFs(fs),
				config.WithMounter(mounter),
				config.WithRunner(runner),
				config.WithSyscall(sysc),
				config.WithLogger(logger),
				config.WithCloudInitRunner(ci),
				config.WithClient(client),
			)
		})
		AfterEach(func() {
			cleanup()
		})
		Describe("ConfigOptions", func() {
			It("Sets the proper interfaces in the config struct", func() {
				Expect(c.Fs).To(Equal(fs))
				Expect(c.Mounter).To(Equal(mounter))
				Expect(c.Runner).To(Equal(runner))
				Expect(c.Syscall).To(Equal(sysc))
				Expect(c.Logger).To(Equal(logger))
				Expect(c.CloudInitRunner).To(Equal(ci))
				Expect(c.Client).To(Equal(client))
			})
			It("Sets the runner if we dont pass one", func() {
				fs, cleanup, err := vfst.NewTestFS(nil)
				defer cleanup()
				Expect(err).ToNot(HaveOccurred())
				c := config.NewConfig(
					config.WithFs(fs),
					config.WithMounter(mounter),
				)
				Expect(c.Fs).To(Equal(fs))
				Expect(c.Mounter).To(Equal(mounter))
				Expect(c.Runner).ToNot(BeNil())
			})
		})
		Describe("ConfigOptions no mounter specified", Label("mount", "mounter"), func() {
			It("should use the default mounter", Label("systemctl"), func() {
				runner := v1mock.NewFakeRunner()
				sysc := &v1mock.FakeSyscall{}
				logger := v1.NewNullLogger()
				c := config.NewConfig(
					config.WithRunner(runner),
					config.WithSyscall(sysc),
					config.WithLogger(logger),
				)
				Expect(c.Mounter).To(Equal(mount.New(constants.MountBinary)))
			})
		})
		Describe("RunConfig", func() {
			cfg := config.NewRunConfig(config.WithMounter(mounter))
			Expect(cfg.Mounter).To(Equal(mounter))
			Expect(cfg.Runner).NotTo(BeNil())
		})
		Describe("InstallSpec", func() {
			It("sets installation defaults from install efi media with recovery", Label("install", "efi"), func() {
				// Set EFI firmware detection
				err = utils.MkdirAll(fs, filepath.Dir(constants.EfiDevice), constants.DirPerm)
				Expect(err).ShouldNot(HaveOccurred())
				_, err = fs.Create(constants.EfiDevice)
				Expect(err).ShouldNot(HaveOccurred())

				// Set ISO base tree detection
				err = utils.MkdirAll(fs, filepath.Dir(constants.ISOBaseTree), constants.DirPerm)
				Expect(err).ShouldNot(HaveOccurred())
				_, err = fs.Create(constants.ISOBaseTree)
				Expect(err).ShouldNot(HaveOccurred())

				spec := config.NewInstallSpec(*c)
				Expect(spec.Firmware).To(Equal(v1.EFI))
				Expect(spec.Active.Source.Value()).To(Equal(constants.ISOBaseTree))
				Expect(spec.Recovery.Source.Value()).To(Equal(spec.Active.File))
				Expect(spec.PartTable).To(Equal(v1.GPT))

				// No firmware partitions added yet
				Expect(spec.Partitions.EFI).To(BeNil())

				// Adding firmware partitions
				err = spec.Partitions.SetFirmwarePartitions(spec.Firmware, spec.PartTable)
				Expect(err).ShouldNot(HaveOccurred())
				Expect(spec.Partitions.EFI).NotTo(BeNil())
			})
			It("sets installation defaults from install bios media without recovery", Label("install", "bios"), func() {
				// Set ISO base tree detection
				err = utils.MkdirAll(fs, filepath.Dir(constants.ISOBaseTree), constants.DirPerm)
				Expect(err).ShouldNot(HaveOccurred())
				_, err = fs.Create(constants.ISOBaseTree)
				Expect(err).ShouldNot(HaveOccurred())

				spec := config.NewInstallSpec(*c)
				Expect(spec.Firmware).To(Equal(v1.BIOS))
				Expect(spec.Active.Source.Value()).To(Equal(constants.ISOBaseTree))
				Expect(spec.Recovery.Source.Value()).To(Equal(spec.Active.File))
				Expect(spec.PartTable).To(Equal(v1.GPT))

				// No firmware partitions added yet
				Expect(spec.Partitions.BIOS).To(BeNil())

				// Adding firmware partitions
				err = spec.Partitions.SetFirmwarePartitions(spec.Firmware, spec.PartTable)
				Expect(err).ShouldNot(HaveOccurred())
				Expect(spec.Partitions.BIOS).NotTo(BeNil())
			})
			It("sets installation defaults without being on installation media", Label("install"), func() {
				spec := config.NewInstallSpec(*c)
				Expect(spec.Firmware).To(Equal(v1.BIOS))
				Expect(spec.Active.Source.IsEmpty()).To(BeTrue())
				Expect(spec.Recovery.Source.Value()).To(Equal(spec.Active.File))
				Expect(spec.PartTable).To(Equal(v1.GPT))
			})
		})
		Describe("ResetSpec", Label("reset"), func() {
			Describe("Successful executions", func() {
				var ghwTest v1mock.GhwMock
				BeforeEach(func() {
					mainDisk := block.Disk{
						Name: "device",
						Partitions: []*block.Partition{
							{
								Name:            "device1",
								FilesystemLabel: constants.EfiLabel,
								Type:            "vfat",
							},
							{
								Name:            "device2",
								FilesystemLabel: constants.OEMLabel,
								Type:            "ext4",
							},
							{
								Name:            "device3",
								FilesystemLabel: constants.RecoveryLabel,
								Type:            "ext4",
							},
							{
								Name:            "device4",
								FilesystemLabel: constants.StateLabel,
								Type:            "ext4",
							},
							{
								Name:            "device5",
								FilesystemLabel: constants.PersistentLabel,
								Type:            "ext4",
							},
						},
					}
					ghwTest = v1mock.GhwMock{}
					ghwTest.AddDisk(mainDisk)
					ghwTest.CreateDevices()

					runner.SideEffect = func(cmd string, args ...string) ([]byte, error) {
						switch cmd {
						case "cat":
							return []byte(constants.RecoveryImgFile), nil
						default:
							return []byte{}, nil
						}
					}
				})
				AfterEach(func() {
					ghwTest.Clean()
				})
				It("sets reset defaults on efi from squashed recovery", func() {
					// Set EFI firmware detection
					err = utils.MkdirAll(fs, filepath.Dir(constants.EfiDevice), constants.DirPerm)
					Expect(err).ShouldNot(HaveOccurred())
					_, err = fs.Create(constants.EfiDevice)
					Expect(err).ShouldNot(HaveOccurred())

					// Set squashfs detection
					err = utils.MkdirAll(fs, filepath.Dir(constants.ISOBaseTree), constants.DirPerm)
					Expect(err).ShouldNot(HaveOccurred())
					_, err = fs.Create(constants.ISOBaseTree)
					Expect(err).ShouldNot(HaveOccurred())

					spec, err := config.NewResetSpec(*c)
					Expect(err).ShouldNot(HaveOccurred())
					Expect(spec.Partitions.EFI.MountPoint).To(Equal(constants.EfiDir))
				})
				It("sets reset defaults on bios from non-squashed recovery", func() {
					// Set non-squashfs recovery image detection
					recoveryImg := filepath.Join(constants.RunningStateDir, "cOS", constants.RecoveryImgFile)
					err = utils.MkdirAll(fs, filepath.Dir(recoveryImg), constants.DirPerm)
					Expect(err).ShouldNot(HaveOccurred())
					_, err = fs.Create(recoveryImg)
					Expect(err).ShouldNot(HaveOccurred())

					spec, err := config.NewResetSpec(*c)
					Expect(err).ShouldNot(HaveOccurred())
					Expect(spec.Active.Source.Value()).To(Equal(recoveryImg))
				})
				It("sets reset defaults on bios from unknown recovery", func() {
					spec, err := config.NewResetSpec(*c)
					Expect(err).ShouldNot(HaveOccurred())
					Expect(spec.Active.Source.IsEmpty()).To(BeTrue())
				})
			})
			Describe("Failures", func() {
				var bootedFrom string
				var ghwTest v1mock.GhwMock
				BeforeEach(func() {
					bootedFrom = ""
					runner.SideEffect = func(cmd string, args ...string) ([]byte, error) {
						switch cmd {
						case "cat":
							return []byte(bootedFrom), nil
						default:
							return []byte{}, nil
						}
					}

					// Set an empty disk for tests, otherwise reads the hosts hardware
					mainDisk := block.Disk{
						Name: "device",
						Partitions: []*block.Partition{
							{
								Name:            "device4",
								FilesystemLabel: constants.StateLabel,
								Type:            "ext4",
							},
						},
					}
					ghwTest = v1mock.GhwMock{}
					ghwTest.AddDisk(mainDisk)
					ghwTest.CreateDevices()
				})
				AfterEach(func() {
					ghwTest.Clean()
				})
				It("fails to set defaults if not booted from recovery", func() {
					_, err := config.NewResetSpec(*c)
					Expect(err).Should(HaveOccurred())
					Expect(err.Error()).To(ContainSubstring("reset can only be called from the recovery system"))
				})
				It("fails to set defaults if no recovery partition detected", func() {
					bootedFrom = constants.RecoveryImgFile
					_, err := config.NewResetSpec(*c)
					Expect(err).Should(HaveOccurred())
					Expect(err.Error()).To(ContainSubstring("recovery partition not found"))
				})
				It("fails to set defaults if no state partition detected", func() {
					mainDisk := block.Disk{
						Name:       "device",
						Partitions: []*block.Partition{},
					}
					ghwTest = v1mock.GhwMock{}
					ghwTest.AddDisk(mainDisk)
					ghwTest.CreateDevices()
					defer ghwTest.Clean()

					bootedFrom = constants.RecoveryImgFile
					_, err := config.NewResetSpec(*c)
					Expect(err).Should(HaveOccurred())
					Expect(err.Error()).To(ContainSubstring("state partition not found"))
				})
				It("fails to set defaults if no efi partition on efi firmware", func() {
					// Set EFI firmware detection
					err = utils.MkdirAll(fs, filepath.Dir(constants.EfiDevice), constants.DirPerm)
					Expect(err).ShouldNot(HaveOccurred())
					_, err = fs.Create(constants.EfiDevice)
					Expect(err).ShouldNot(HaveOccurred())

					bootedFrom = constants.RecoveryImgFile
					_, err := config.NewResetSpec(*c)
					Expect(err).Should(HaveOccurred())
					Expect(err.Error()).To(ContainSubstring("EFI partition not found"))
				})
			})
		})
		Describe("UpgradeSpec", Label("upgrade"), func() {
			Describe("Successful executions", func() {
				var ghwTest v1mock.GhwMock
				BeforeEach(func() {
					mainDisk := block.Disk{
						Name: "device",
						Partitions: []*block.Partition{
							{
								Name:            "device1",
								FilesystemLabel: constants.EfiLabel,
								Type:            "vfat",
							},
							{
								Name:            "device2",
								FilesystemLabel: constants.OEMLabel,
								Type:            "ext4",
							},
							{
								Name:            "device3",
								FilesystemLabel: constants.RecoveryLabel,
								Type:            "ext4",
								MountPoint:      constants.LiveDir,
							},
							{
								Name:            "device4",
								FilesystemLabel: constants.StateLabel,
								Type:            "ext4",
							},
							{
								Name:            "device5",
								FilesystemLabel: constants.PersistentLabel,
								Type:            "ext4",
							},
						},
					}
					ghwTest = v1mock.GhwMock{}
					ghwTest.AddDisk(mainDisk)
					ghwTest.CreateDevices()
				})
				AfterEach(func() {
					ghwTest.Clean()
				})
				It("sets upgrade defaults for active upgrade", func() {
					spec, err := config.NewUpgradeSpec(*c)
					Expect(err).ShouldNot(HaveOccurred())
					Expect(spec.Active.Source.IsEmpty()).To(BeTrue())
				})
				It("sets upgrade defaults for non-squashed recovery upgrade", func() {
					spec, err := config.NewUpgradeSpec(*c)
					Expect(err).ShouldNot(HaveOccurred())
					Expect(spec.Recovery.Source.IsEmpty()).To(BeTrue())
					Expect(spec.Recovery.FS).To(Equal(constants.LinuxImgFs))
				})
				It("sets upgrade defaults for squashed recovery upgrade", func() {
					//Set squashed recovery detection
					// Create installState with squashed recovery
					Expect(utils.MkdirAll(c.Fs, constants.RunningStateDir, constants.DirPerm)).To(Succeed())
					statePath := filepath.Join(constants.RunningStateDir, constants.InstallStateFile)
					installState := &v1.InstallState{
						Partitions: map[string]*v1.PartitionState{
							constants.RecoveryPartName: {
								FSLabel: constants.RecoveryLabel,
								Images: map[string]*v1.ImageState{
									constants.RecoveryImgName: {
										FS: constants.SquashFs,
									},
								},
							},
						},
					}
					err = c.WriteInstallState(installState, statePath, statePath)
					Expect(err).ShouldNot(HaveOccurred())

					spec, err := config.NewUpgradeSpec(*c)
					Expect(err).ShouldNot(HaveOccurred())
					Expect(spec.Recovery.Source.IsEmpty()).To(BeTrue())
					Expect(spec.Recovery.FS).To(Equal(constants.SquashFs))
				})
			})
		})
		Describe("BuildConfig", Label("build"), func() {
			It("initiates a new build config", func() {
				build := config.NewBuildConfig()
				Expect(build.Name).To(Equal(constants.BuildImgName))
			})
		})
		Describe("LiveISO", Label("iso"), func() {
			It("initiates a new LiveISO", func() {
				iso := config.NewISO()
				Expect(iso.Label).To(Equal(constants.ISOLabel))
				Expect(len(iso.UEFI)).To(Equal(0))
				Expect(len(iso.Image)).To(Equal(0))
			})
		})
	})
})
  07070100000065000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000002200000000elemental-cli-0.3.1/pkg/constants 07070100000066000081A4000000000000000000000001645E367C00001AA8000000000000000000000000000000000000002F00000000elemental-cli-0.3.1/pkg/constants/constants.go    /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package constants

import (
	"os"
	"runtime"
)

const (
	GrubConf           = "/etc/cos/grub.cfg"
	GrubOEMEnv         = "grub_oem_env"
	GrubDefEntry       = "cOS"
	DefaultTty         = "tty1"
	BiosPartName       = "bios"
	EfiLabel           = "COS_GRUB"
	EfiPartName        = "efi"
	ActiveLabel        = "COS_ACTIVE"
	PassiveLabel       = "COS_PASSIVE"
	SystemLabel        = "COS_SYSTEM"
	RecoveryLabel      = "COS_RECOVERY"
	RecoveryPartName   = "recovery"
	StateLabel         = "COS_STATE"
	StatePartName      = "state"
	InstallStateFile   = "state.yaml"
	PersistentLabel    = "COS_PERSISTENT"
	PersistentPartName = "persistent"
	OEMLabel           = "COS_OEM"
	OEMPartName        = "oem"
	ActiveImgName      = "active"
	PassiveImgName     = "passive"
	RecoveryImgName    = "recovery"
	MountBinary        = "/usr/bin/mount"
	EfiDevice          = "/sys/firmware/efi"
	LinuxFs            = "ext4"
	LinuxImgFs         = "ext2"
	SquashFs           = "squashfs"
	EfiFs              = "vfat"
	BiosFs             = ""
	EfiSize            = uint(64)
	OEMSize            = uint(64)
	StateSize          = uint(8192)
	RecoverySize       = uint(4096)
	PersistentSize     = uint(0)
	BiosSize           = uint(1)
	ImgSize            = uint(0)
	ImgOverhead        = uint(256)
	HTTPTimeout        = 60
	CosSetup           = "/usr/bin/cos-setup"
	GPT                = "gpt"
	BuildImgName       = "elemental"
	UsrLocalPath       = "/usr/local"
	OEMPath            = "/oem"
	ConfigDir          = "/etc/elemental"

	// Mountpoints of images and partitions
	RecoveryDir     = "/run/cos/recovery"
	StateDir        = "/run/cos/state"
	OEMDir          = "/run/cos/oem"
	PersistentDir   = "/run/cos/persistent"
	ActiveDir       = "/run/cos/active"
	TransitionDir   = "/run/cos/transition"
	EfiDir          = "/run/cos/efi"
	ImgSrcDir       = "/run/cos/imgsrc"
	WorkingImgDir   = "/run/cos/workingtree"
	RunningStateDir = "/run/initramfs/cos-state" // TODO: converge this constant with StateDir/RecoveryDir in dracut module from cos-toolkit

	// Live image mountpoints
	ISOBaseTree = "/run/rootfsbase"
	LiveDir     = "/run/initramfs/live"

	// Image file names
	ActiveImgFile     = "active.img"
	PassiveImgFile    = "passive.img"
	RecoveryImgFile   = "recovery.img"
	TransitionImgFile = "transition.img"

	// Yip stages evaluated on reset/upgrade/install action
	AfterInstallChrootHook = "after-install-chroot"
	AfterInstallHook       = "after-install"
	PostInstallHook        = "post-install"
	BeforeInstallHook      = "before-install"
	AfterResetChrootHook   = "after-reset-chroot"
	AfterResetHook         = "after-reset"
	PostResetHook          = "post-reset"
	BeforeResetHook        = "before-reset"
	AfterUpgradeChrootHook = "after-upgrade-chroot"
	AfterUpgradeHook       = "after-upgrade"
	PostUpgradeHook        = "post-upgrade"
	BeforeUpgradeHook      = "before-upgrade"

	// SELinux targeted policy paths
	SELinuxTargetedPath        = "/etc/selinux/targeted"
	SELinuxTargetedContextFile = SELinuxTargetedPath + "/contexts/files/file_contexts"
	SELinuxTargetedPolicyPath  = SELinuxTargetedPath + "/policy"

	// Kernel and initrd paths are arbitrary and coupled to grub.cfg
	ISOKernelPath    = "/boot/kernel"
	ISOInitrdPath    = "/boot/initrd"
	ISORootFile      = "rootfs.squashfs"
	ISOEFIImg        = "uefi.img"
	ISOLabel         = "COS_LIVE"
	ISOCloudInitPath = LiveDir + "/iso-config"

	// Default directory and file fileModes
	DirPerm        = os.ModeDir | os.ModePerm
	FilePerm       = 0666
	NoWriteDirPerm = 0555 | os.ModeDir
	TempDirPerm    = os.ModePerm | os.ModeSticky | os.ModeDir

	// Eject script
	EjectScript = "#!/bin/sh\n/usr/bin/eject -rmF"

	ArchAmd64 = "amd64"
	Archx86   = "x86_64"
	ArchArm64 = "arm64"

	Fedora = "fedora"
	Ubuntu = "ubuntu"
	Suse   = "suse"
)

func GetCloudInitPaths() []string {
	return []string{"/system/oem", "/oem/", "/usr/local/cloud-config/"}
}

// GetDefaultSquashfsOptions returns the default options to use when creating a squashfs
func GetDefaultSquashfsOptions() []string {
	return []string{"-b", "1024k"}
}

func GetDefaultSquashfsCompressionOptions() []string {
	options := []string{"-comp", "xz", "-Xbcj"}
	// Set the filter based on arch for best compression results
	if runtime.GOARCH == "arm64" {
		options = append(options, "arm")
	} else {
		options = append(options, "x86")
	}
	return options
}

// GetRunKeyEnvMap returns environment variable bindings to RunConfig data
func GetRunKeyEnvMap() map[string]string {
	return map[string]string{
		"poweroff": "POWEROFF",
		"reboot":   "REBOOT",
		"strict":   "STRICT",
		"eject-cd": "EJECT_CD",
	}
}

// GetInstallKeyEnvMap returns environment variable bindings to InstallSpec data
func GetInstallKeyEnvMap() map[string]string {
	return map[string]string{
		"target":              "TARGET",
		"system.uri":          "SYSTEM",
		"recovery-system.uri": "RECOVERY_SYSTEM",
		"cloud-init":          "CLOUD_INIT",
		"iso":                 "ISO",
		"firmware":            "FIRMWARE",
		"part-table":          "PART_TABLE",
		"no-format":           "NO_FORMAT",
		"tty":                 "TTY",
		"grub-entry-name":     "GRUB_ENTRY_NAME",
		"disable-boot-entry":  "DISABLE_BOOT_ENTRY",
	}
}

// GetResetKeyEnvMap returns environment variable bindings to ResetSpec data
func GetResetKeyEnvMap() map[string]string {
	return map[string]string{
		"target":          "TARGET",
		"system.uri":      "SYSTEM",
		"tty":             "TTY",
		"grub-entry-name": "GRUB_ENTRY_NAME",
	}
}

// GetUpgradeKeyEnvMap returns environment variable bindings to UpgradeSpec data
func GetUpgradeKeyEnvMap() map[string]string {
	return map[string]string{
		"recovery":            "RECOVERY",
		"system.uri":          "SYSTEM",
		"recovery-system.uri": "RECOVERY_SYSTEM",
	}
}

// GetBuildKeyEnvMap returns environment variable bindings to BuildConfig data
func GetBuildKeyEnvMap() map[string]string {
	return map[string]string{
		"name": "NAME",
	}
}

// GetISOKeyEnvMap returns environment variable bindings to LiveISO data
func GetISOKeyEnvMap() map[string]string {
	// None for the time being
	return map[string]string{}
}

// GetDiskKeyEnvMap returns environment variable bindings to RawDisk data
func GetDiskKeyEnvMap() map[string]string {
	// None for the time being
	return map[string]string{}
}
07070100000067000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000001C00000000elemental-cli-0.3.1/pkg/efi   07070100000068000081A4000000000000000000000001645E367C00001616000000000000000000000000000000000000002700000000elemental-cli-0.3.1/pkg/efi/manager.go    // nolint:goheader

// This file is part of nullboot
// Copyright 2021 Canonical Ltd.
// SPDX-License-Identifier: GPL-3.0-only

// Package efi contains a boot management library
package efi

import (
	"bytes"
	"encoding/binary"
	"fmt"
	"path"

	efi "github.com/canonical/go-efilib"
	efilinux "github.com/canonical/go-efilib/linux"
)

const (
	maxBootEntries = 65535 // Maximum number of boot entries we can hold
)

// NewBootManagerForVariables returns a boot manager for the given EFIVariables manager
func NewBootManagerForVariables(efivars Variables) (BootManager, error) {
	var err error
	bm := BootManager{}
	bm.efivars = efivars

	if !VariablesSupported(efivars) {
		return BootManager{}, fmt.Errorf("variables not supported")
	}

	bootOrderBytes, bootOrderAttrs, err := bm.efivars.GetVariable(efi.GlobalVariable, "BootOrder")
	if err != nil {
		bootOrderBytes = nil
		bootOrderAttrs = efi.AttributeNonVolatile | efi.AttributeBootserviceAccess | efi.AttributeRuntimeAccess
	}
	bm.bootOrder = make([]int, len(bootOrderBytes)/2)
	bm.bootOrderAttrs = bootOrderAttrs
	for i := 0; i < len(bootOrderBytes); i += 2 {
		// FIXME: It's probably not valid to assume little-endian here?
		bm.bootOrder[i/2] = int(binary.LittleEndian.Uint16(bootOrderBytes[i : i+2]))
	}

	bm.entries = make(map[int]BootEntryVariable)
	names, err := GetVariableNames(bm.efivars, efi.GlobalVariable)
	if err != nil {
		return BootManager{}, fmt.Errorf("cannot obtain list of global variables: %v", err)
	}
	for _, name := range names {
		var entry BootEntryVariable
		if parsed, err := fmt.Sscanf(name, "Boot%04X", &entry.BootNumber); len(name) != 8 || parsed != 1 || err != nil {
			continue
		}
		entry.Data, entry.Attributes, err = bm.efivars.GetVariable(efi.GlobalVariable, name)
		if err != nil {
			return BootManager{}, fmt.Errorf("cannot read %s: %v", name, err)
		}
		entry.LoadOption, err = efi.ReadLoadOption(bytes.NewReader(entry.Data))
		if err != nil {
			return bm, err
		}

		bm.entries[entry.BootNumber] = entry
	}

	return bm, nil
}

// FindOrCreateEntry finds a matching entry in the boot device selection menu,
// or creates one if it is missing.
//
// It returns the number of the entry created, or -1 on failure, with error set.
//
// The argument relativeTo specifies the directory entry.Filename is in.
func (bm *BootManager) FindOrCreateEntry(entry BootEntry, relativeTo string) (int, error) {
	bootNext, err := bm.NextFreeEntry()
	if err != nil {
		return -1, err
	}
	variable := fmt.Sprintf("Boot%04X", bootNext)

	dp, err := bm.efivars.NewFileDevicePath(path.Join(relativeTo, entry.Filename), efilinux.ShortFormPathHD)
	if err != nil {
		return -1, err
	}

	optionalData := new(bytes.Buffer)
	_ = binary.Write(optionalData, binary.LittleEndian, efi.ConvertUTF8ToUCS2(entry.Options+"\x00"))

	loadoption := &efi.LoadOption{
		Attributes:   efi.LoadOptionActive,
		Description:  entry.Label,
		FilePath:     dp,
		OptionalData: optionalData.Bytes()}

	loadoptionBytes, err := loadoption.Bytes()
	if err != nil {
		return -1, fmt.Errorf("cannot encode load option: %v", err)
	}

	entryVar := BootEntryVariable{
		BootNumber: bootNext,
		Data:       loadoptionBytes,
		Attributes: efi.AttributeNonVolatile | efi.AttributeBootserviceAccess | efi.AttributeRuntimeAccess,
		LoadOption: loadoption,
	}

	// Detect duplicates and ignore
	for _, existingVar := range bm.entries {
		if bytes.Equal(existingVar.Data, entryVar.Data) && existingVar.Attributes == entryVar.Attributes {
			return existingVar.BootNumber, nil
		}
	}

	if err := bm.efivars.SetVariable(efi.GlobalVariable, variable, entryVar.Data, entryVar.Attributes); err != nil {
		return -1, err
	}

	bm.entries[bootNext] = entryVar

	return bootNext, nil
}

// NextFreeEntry returns the number of the next free Boot variable.
func (bm *BootManager) NextFreeEntry() (int, error) {
	for i := 0; i < maxBootEntries; i++ {
		if _, ok := bm.entries[i]; !ok {
			return i, nil
		}
	}

	return -1, fmt.Errorf("maximum number of boot entries exceeded")
}

// PrependAndSetBootOrder commits a new boot order or returns an error.
//
// The boot order specified is prepended to the existing one, and the order
// is deduplicated before committing.
func (bm *BootManager) PrependAndSetBootOrder(head []int) error {
	var newOrder []int

	// Combine head with existing boot order, filter out duplicates and non-existing entries
	for _, num := range append(append([]int(nil), head...), bm.bootOrder...) {
		isDuplicate := false
		for _, otherNum := range newOrder {
			if otherNum == num {
				isDuplicate = true
			}
		}
		if _, ok := bm.entries[num]; ok && !isDuplicate {
			newOrder = append(newOrder, num)
		}
	}

	// Encode the boot order to bytes
	var output []byte
	for _, num := range newOrder {
		var numBytes [2]byte
		binary.LittleEndian.PutUint16(numBytes[0:], uint16(num))
		output = append(output, numBytes[0], numBytes[1])
	}

	// Set the boot order and update our cache
	if err := bm.efivars.SetVariable(efi.GlobalVariable, "BootOrder", output, bm.bootOrderAttrs); err != nil {
		return err
	}

	bm.bootOrder = newOrder
	return nil

}

// VariablesSupported indicates whether variables can be accessed.
func VariablesSupported(efiVars Variables) bool {
	_, err := efiVars.ListVariables()
	return err == nil
}

// GetVariableNames returns the names of every variable with the specified GUID.
func GetVariableNames(efiVars Variables, filterGUID efi.GUID) (names []string, err error) {
	vars, err := efiVars.ListVariables()
	if err != nil {
		return nil, err
	}
	for _, entry := range vars {
		if entry.GUID != filterGUID {
			continue
		}
		names = append(names, entry.Name)
	}
	return names, nil
}
  07070100000069000081A4000000000000000000000001645E367C000013F4000000000000000000000000000000000000002500000000elemental-cli-0.3.1/pkg/efi/types.go  // nolint:goheader

// This file is part of nullboot
// Copyright 2021 Canonical Ltd.
// SPDX-License-Identifier: GPL-3.0-only

package efi

import (
	"encoding/base64"
	"encoding/binary"
	"encoding/json"
	"strings"

	efi "github.com/canonical/go-efilib"
	efi_linux "github.com/canonical/go-efilib/linux"
	"github.com/twpayne/go-vfs"
)

// Variables abstracts away the host-specific bits of the efivars module
type Variables interface {
	ListVariables() ([]efi.VariableDescriptor, error)
	GetVariable(guid efi.GUID, name string) (data []byte, attrs efi.VariableAttributes, err error)
	SetVariable(guid efi.GUID, name string, data []byte, attrs efi.VariableAttributes) error
	NewFileDevicePath(filepath string, mode efi_linux.FileDevicePathMode) (efi.DevicePath, error)
	DelVariable(guid efi.GUID, name string) error
}

// RealEFIVariables provides the real implementation of efivars
type RealEFIVariables struct{}

func (v RealEFIVariables) DelVariable(guid efi.GUID, name string) error {
	_, attrs, err := v.GetVariable(guid, name)
	if err != nil {
		return err
	}
	return v.SetVariable(guid, name, nil, attrs)
}

func (v RealEFIVariables) NewFileDevicePath(filepath string, mode efi_linux.FileDevicePathMode) (efi.DevicePath, error) {
	return efi_linux.NewFileDevicePath(filepath, mode)
}

// ListVariables proxy
func (RealEFIVariables) ListVariables() ([]efi.VariableDescriptor, error) {
	return efi.ListVariables()
}

// GetVariable proxy
func (RealEFIVariables) GetVariable(guid efi.GUID, name string) (data []byte, attrs efi.VariableAttributes, err error) {
	return efi.ReadVariable(name, guid)
}

// SetVariable proxy
func (RealEFIVariables) SetVariable(guid efi.GUID, name string, data []byte, attrs efi.VariableAttributes) error {
	return efi.WriteVariable(name, guid, attrs, data)
}

type mockEFIVariable struct {
	data  []byte
	attrs efi.VariableAttributes
}

// MockEFIVariables implements an in-memory variable store.
type MockEFIVariables struct {
	store map[efi.VariableDescriptor]mockEFIVariable
}

func (m MockEFIVariables) DelVariable(_ efi.GUID, _ string) error {
	return nil
}

// ListVariables implements EFIVariables
func (m MockEFIVariables) ListVariables() (out []efi.VariableDescriptor, err error) {
	for k := range m.store {
		out = append(out, k)
	}
	return out, nil
}

// GetVariable implements EFIVariables
func (m MockEFIVariables) GetVariable(guid efi.GUID, name string) (data []byte, attrs efi.VariableAttributes, err error) {
	out, ok := m.store[efi.VariableDescriptor{Name: name, GUID: guid}]
	if !ok {
		return nil, 0, efi.ErrVarNotExist
	}
	return out.data, out.attrs, nil
}

// SetVariable implements EFIVariables
func (m *MockEFIVariables) SetVariable(guid efi.GUID, name string, data []byte, attrs efi.VariableAttributes) error {
	if m.store == nil {
		m.store = make(map[efi.VariableDescriptor]mockEFIVariable)
	}
	if len(data) == 0 {
		delete(m.store, efi.VariableDescriptor{Name: name, GUID: guid})
	} else {
		m.store[efi.VariableDescriptor{Name: name, GUID: guid}] = mockEFIVariable{data, attrs}
	}
	return nil
}

// JSON renders the MockEFIVariables as an Azure JSON config
func (m MockEFIVariables) JSON() ([]byte, error) {
	payload := make(map[string]map[string]string)

	var numBytes [2]byte
	for key, entry := range m.store {
		entryID := key.Name
		entryBase64 := base64.StdEncoding.EncodeToString(entry.data)
		guidBase64 := base64.StdEncoding.EncodeToString(key.GUID[0:])
		binary.LittleEndian.PutUint16(numBytes[0:], uint16(entry.attrs))
		entryAttrBase64 := base64.StdEncoding.EncodeToString(numBytes[0:])

		payload[entryID] = map[string]string{
			"guid":       guidBase64,
			"attributes": entryAttrBase64,
			"value":      entryBase64,
		}
	}

	return json.MarshalIndent(payload, "", "  ")
}

func (m MockEFIVariables) NewFileDevicePath(fpath string, _ efi_linux.FileDevicePathMode) (efi.DevicePath, error) {
	file, err := vfs.OSFS.Open(fpath)
	if err != nil {
		return nil, err
	}
	file.Close()

	const espLocation = "/boot/efi/"
	fpath = strings.TrimPrefix(fpath, espLocation)

	return efi.DevicePath{
		efi.NewFilePathDevicePathNode(fpath),
	}, nil
}

// BootManager manages the boot device selection menu entries (Boot0000...BootFFFF).
type BootManager struct {
	efivars        Variables                 // EFIVariables implementation
	entries        map[int]BootEntryVariable // The Boot<number> variables
	bootOrder      []int                     // The BootOrder variable, parsed
	bootOrderAttrs efi.VariableAttributes    // The attributes of BootOrder variable
}

// BootEntryVariable defines a boot entry variable
type BootEntryVariable struct {
	BootNumber int                    // number of the Boot variable, for example, for Boot0004 this is 4
	Data       []byte                 // the data of the variable
	Attributes efi.VariableAttributes // any attributes set on the variable
	LoadOption *efi.LoadOption        // the data of the variable parsed as a load option, if it is a valid load option
}

// BootEntry is a boot entry.
type BootEntry struct {
	Filename    string
	Label       string
	Options     string
	Description string
}
0707010000006A000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000002200000000elemental-cli-0.3.1/pkg/elemental 0707010000006B000081A4000000000000000000000001645E367C00005004000000000000000000000000000000000000002F00000000elemental-cli-0.3.1/pkg/elemental/elemental.go    /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package elemental

import (
	"errors"
	"fmt"
	"path/filepath"
	"strings"

	cnst "github.com/rancher/elemental-cli/pkg/constants"
	"github.com/rancher/elemental-cli/pkg/partitioner"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	"github.com/rancher/elemental-cli/pkg/utils"
)

// Elemental is the struct meant to self-contain most utils and actions related to Elemental, like installing or applying selinux
type Elemental struct {
	config *v1.Config
}

func NewElemental(config *v1.Config) *Elemental {
	return &Elemental{
		config: config,
	}
}

// FormatPartition will format an already existing partition
func (e *Elemental) FormatPartition(part *v1.Partition, opts ...string) error {
	e.config.Logger.Infof("Formatting '%s' partition", part.Name)
	return partitioner.FormatDevice(e.config.Runner, part.Path, part.FS, part.FilesystemLabel, opts...)
}

// PartitionAndFormatDevice creates a new empty partition table on target disk
// and applies the configured disk layout by creating and formatting all
// required partitions
func (e *Elemental) PartitionAndFormatDevice(i *v1.InstallSpec) error {
	disk := partitioner.NewDisk(
		i.Target,
		partitioner.WithRunner(e.config.Runner),
		partitioner.WithFS(e.config.Fs),
		partitioner.WithLogger(e.config.Logger),
	)

	if !disk.Exists() {
		e.config.Logger.Errorf("Disk %s does not exist", i.Target)
		return fmt.Errorf("disk %s does not exist", i.Target)
	}

	e.config.Logger.Infof("Partitioning device...")
	out, err := disk.NewPartitionTable(i.PartTable)
	if err != nil {
		e.config.Logger.Errorf("Failed creating new partition table: %s", out)
		return err
	}

	parts := i.Partitions.PartitionsByInstallOrder(i.ExtraPartitions)
	return e.createPartitions(disk, parts)
}

func (e *Elemental) createAndFormatPartition(disk *partitioner.Disk, part *v1.Partition) error {
	e.config.Logger.Debugf("Adding partition %s", part.Name)
	num, err := disk.AddPartition(part.Size, part.FS, part.Name, part.Flags...)
	if err != nil {
		e.config.Logger.Errorf("Failed creating %s partition", part.Name)
		return err
	}
	partDev, err := disk.FindPartitionDevice(num)
	if err != nil {
		return err
	}
	if part.FS != "" {
		e.config.Logger.Debugf("Formatting partition with label %s", part.FilesystemLabel)
		err = partitioner.FormatDevice(e.config.Runner, partDev, part.FS, part.FilesystemLabel)
		if err != nil {
			e.config.Logger.Errorf("Failed formatting partition %s", part.Name)
			return err
		}
	} else {
		e.config.Logger.Debugf("Wipe file system on %s", part.Name)
		err = disk.WipeFsOnPartition(partDev)
		if err != nil {
			e.config.Logger.Errorf("Failed to wipe filesystem of partition %s", partDev)
			return err
		}
	}
	part.Path = partDev
	return nil
}

func (e *Elemental) createPartitions(disk *partitioner.Disk, parts v1.PartitionList) error {
	for _, part := range parts {
		err := e.createAndFormatPartition(disk, part)
		if err != nil {
			return err
		}
	}
	return nil
}

// MountPartitions mounts configured partitions. Partitions with an unset mountpoint are not mounted.
// Note umounts must be handled by caller logic.
func (e Elemental) MountPartitions(parts v1.PartitionList) error {
	e.config.Logger.Infof("Mounting disk partitions")
	var err error

	for _, part := range parts {
		if part.MountPoint != "" {
			err = e.MountPartition(part, "rw")
			if err != nil {
				_ = e.UnmountPartitions(parts)
				return err
			}
		}
	}

	return err
}

// UnmountPartitions unmounts configured partitiosn. Partitions with an unset mountpoint are not unmounted.
func (e Elemental) UnmountPartitions(parts v1.PartitionList) error {
	e.config.Logger.Infof("Unmounting disk partitions")
	var err error
	errMsg := ""
	failure := false

	// If there is an early error we still try to unmount other partitions
	for _, part := range parts {
		if part.MountPoint != "" {
			err = e.UnmountPartition(part)
			if err != nil {
				errMsg += fmt.Sprintf("Failed to unmount %s\n", part.MountPoint)
				failure = true
			}
		}
	}
	if failure {
		return errors.New(errMsg)
	}
	return nil
}

// MountRWPartition mounts, or remounts if needed, a partition with RW permissions
func (e Elemental) MountRWPartition(part *v1.Partition) (umount func() error, err error) {
	if mnt, _ := utils.IsMounted(e.config, part); mnt {
		err = e.MountPartition(part, "remount", "rw")
		if err != nil {
			e.config.Logger.Errorf("failed mounting %s partition: %v", part.Name, err)
			return nil, err
		}
		umount = func() error { return e.MountPartition(part, "remount", "ro") }
	} else {
		err = e.MountPartition(part, "rw")
		if err != nil {
			e.config.Logger.Error("failed mounting %s partition: %v", part.Name, err)
			return nil, err
		}
		umount = func() error { return e.UnmountPartition(part) }
	}
	return umount, nil
}

// MountPartition mounts a partition with the given mount options
func (e Elemental) MountPartition(part *v1.Partition, opts ...string) error {
	e.config.Logger.Debugf("Mounting partition %s", part.FilesystemLabel)
	err := utils.MkdirAll(e.config.Fs, part.MountPoint, cnst.DirPerm)
	if err != nil {
		return err
	}
	if part.Path == "" {
		// Lets error out only after 10 attempts to find the device
		device, err := utils.GetDeviceByLabel(e.config.Runner, part.FilesystemLabel, 10)
		if err != nil {
			e.config.Logger.Errorf("Could not find a device with label %s", part.FilesystemLabel)
			return err
		}
		part.Path = device
	}
	err = e.config.Mounter.Mount(part.Path, part.MountPoint, "auto", opts)
	if err != nil {
		e.config.Logger.Errorf("Failed mounting device %s with label %s", part.Path, part.FilesystemLabel)
		return err
	}
	return nil
}

// UnmountPartition unmounts the given partition or does nothing if not mounted
func (e Elemental) UnmountPartition(part *v1.Partition) error {
	if mnt, _ := utils.IsMounted(e.config, part); !mnt {
		e.config.Logger.Debugf("Not unmounting partition, %s doesn't look like mountpoint", part.MountPoint)
		return nil
	}
	e.config.Logger.Debugf("Unmounting partition %s", part.FilesystemLabel)
	return e.config.Mounter.Unmount(part.MountPoint)
}

// MountImage mounts an image with the given mount options
func (e Elemental) MountImage(img *v1.Image, opts ...string) error {
	e.config.Logger.Debugf("Mounting image %s", img.Label)
	err := utils.MkdirAll(e.config.Fs, img.MountPoint, cnst.DirPerm)
	if err != nil {
		return err
	}
	out, err := e.config.Runner.Run("losetup", "--show", "-f", img.File)
	if err != nil {
		return err
	}
	loop := strings.TrimSpace(string(out))
	err = e.config.Mounter.Mount(loop, img.MountPoint, "auto", opts)
	if err != nil {
		_, _ = e.config.Runner.Run("losetup", "-d", loop)
		return err
	}
	img.LoopDevice = loop
	return nil
}

// UnmountImage unmounts the given image or does nothing if not mounted
func (e Elemental) UnmountImage(img *v1.Image) error {
	// Using IsLikelyNotMountPoint seams to be safe as we are not checking
	// for bind mounts here
	if notMnt, _ := e.config.Mounter.IsLikelyNotMountPoint(img.MountPoint); notMnt {
		e.config.Logger.Debugf("Not unmounting image, %s doesn't look like mountpoint", img.MountPoint)
		return nil
	}

	e.config.Logger.Debugf("Unmounting image %s", img.Label)
	err := e.config.Mounter.Unmount(img.MountPoint)
	if err != nil {
		return err
	}
	_, err = e.config.Runner.Run("losetup", "-d", img.LoopDevice)
	img.LoopDevice = ""
	return err
}

// CreateFileSystemImage creates the image file for the given image
func (e Elemental) CreateFileSystemImage(img *v1.Image) error {
	e.config.Logger.Infof("Creating file system image %s", img.File)
	err := utils.MkdirAll(e.config.Fs, filepath.Dir(img.File), cnst.DirPerm)
	if err != nil {
		return err
	}
	actImg, err := e.config.Fs.Create(img.File)
	if err != nil {
		return err
	}

	err = actImg.Truncate(int64(img.Size * 1024 * 1024))
	if err != nil {
		actImg.Close()
		_ = e.config.Fs.RemoveAll(img.File)
		return err
	}
	err = actImg.Close()
	if err != nil {
		_ = e.config.Fs.RemoveAll(img.File)
		return err
	}

	mkfs := partitioner.NewMkfsCall(img.File, img.FS, img.Label, e.config.Runner)
	_, err = mkfs.Apply()
	if err != nil {
		_ = e.config.Fs.RemoveAll(img.File)
		return err
	}
	return nil
}

// DeployImgTree will deploy the given image into the given root tree. Returns source metadata in info,
// a tree cleaner function and error. The given root will be a bind mount of a temporary directory into the same
// filesystem of img.File, this is helpful to make the deployment easily accessible in after-* hooks.
func (e *Elemental) DeployImgTree(img *v1.Image, root string) (info interface{}, cleaner func() error, err error) {
	// We prepare the rootTree next to the target image file, in the same base path
	e.config.Logger.Infof("Preparing root tree for image: %s", img.File)
	tmp := strings.TrimSuffix(img.File, filepath.Ext(img.File))
	tmp += ".imgTree"
	err = utils.MkdirAll(e.config.Fs, tmp, cnst.DirPerm)
	if err != nil {
		return nil, nil, err
	}

	err = utils.MkdirAll(e.config.Fs, root, cnst.DirPerm)
	if err != nil {
		_ = e.config.Fs.RemoveAll(tmp)
		return nil, nil, err
	}
	err = e.config.Mounter.Mount(tmp, root, "bind", []string{"bind"})
	if err != nil {
		_ = e.config.Fs.RemoveAll(tmp)
		_ = e.config.Fs.RemoveAll(root)
		return nil, nil, err
	}

	cleaner = func() error {
		_ = e.config.Mounter.Unmount(root)
		err := e.config.Fs.RemoveAll(root)
		if err != nil {
			return err
		}
		return e.config.Fs.RemoveAll(tmp)
	}

	info, err = e.DumpSource(root, img.Source)
	if err != nil {
		_ = cleaner()
		return nil, nil, err
	}
	err = utils.CreateDirStructure(e.config.Fs, root)
	if err != nil {
		_ = cleaner()
		return nil, nil, err
	}

	return info, cleaner, err
}

// CreateImgFromTree creates the given image from with the contents of the tree for the given root.
func (e *Elemental) CreateImgFromTree(root string, img *v1.Image, cleaner func() error) (err error) {
	if cleaner != nil {
		defer func() {
			cErr := cleaner()
			if cErr != nil && err == nil {
				err = cErr
			}
		}()
	}

	if img.FS == cnst.SquashFs {
		e.config.Logger.Infof("Creating squashed image: %s", img.File)
		squashOptions := append(cnst.GetDefaultSquashfsOptions(), e.config.SquashFsCompressionConfig...)
		err = utils.CreateSquashFS(e.config.Runner, e.config.Logger, root, img.File, squashOptions)
		if err != nil {
			return err
		}
	} else {
		e.config.Logger.Infof("Creating filesystem image: %s", img.File)
		if img.Size == 0 {
			size, err := utils.DirSizeMB(e.config.Fs, root)
			if err != nil {
				return err
			}
			img.Size = size + cnst.ImgOverhead
		}
		err = e.CreateFileSystemImage(img)
		if err != nil {
			return err
		}
		err = e.MountImage(img, "rw")
		if err != nil {
			return err
		}
		defer func() {
			mErr := e.UnmountImage(img)
			if err == nil && mErr != nil {
				err = mErr
			}
		}()
		err = utils.SyncData(e.config.Logger, e.config.Fs, root, img.MountPoint)
		if err != nil {
			return err
		}
	}
	return err
}

// CopyFileImg copies the files target as the source of this image. It also applies the img label over the copied image.
func (e *Elemental) CopyFileImg(img *v1.Image) error {
	if !img.Source.IsFile() {
		return fmt.Errorf("Copying a file image requires an image source of file type")
	}

	err := utils.MkdirAll(e.config.Fs, filepath.Dir(img.File), cnst.DirPerm)
	if err != nil {
		return err
	}

	e.config.Logger.Infof("Copying image %s to %s", img.Source.Value(), img.File)
	err = utils.CopyFile(e.config.Fs, img.Source.Value(), img.File)
	if err != nil {
		return err
	}

	if img.FS != cnst.SquashFs && img.Label != "" {
		e.config.Logger.Infof("Setting label: %s ", img.Label)
		_, err = e.config.Runner.Run("tune2fs", "-L", img.Label, img.File)
	}
	return err
}

// DeployImage will deploy the given image into the target. This method
// creates the filesystem image file and fills it with the correspondant data
func (e *Elemental) DeployImage(img *v1.Image) (interface{}, error) {
	e.config.Logger.Infof("Deploying image: %s", img.File)
	info, cleaner, err := e.DeployImgTree(img, cnst.WorkingImgDir)
	if err != nil {
		return nil, err
	}

	err = e.CreateImgFromTree(cnst.WorkingImgDir, img, cleaner)
	if err != nil {
		return nil, err
	}
	return info, nil
}

// DumpSource sets the image data according to the image source type
func (e *Elemental) DumpSource(target string, imgSrc *v1.ImageSource) (info interface{}, err error) { // nolint:gocyclo
	e.config.Logger.Infof("Copying %s source...", imgSrc.Value())

	if imgSrc.IsImage() {
		if e.config.Cosign {
			e.config.Logger.Infof("Running cosing verification for %s", imgSrc.Value())
			out, err := utils.CosignVerify(
				e.config.Fs, e.config.Runner, imgSrc.Value(),
				e.config.CosignPubKey, v1.IsDebugLevel(e.config.Logger),
			)
			if err != nil {
				e.config.Logger.Errorf("Cosign verification failed: %s", out)
				return nil, err
			}
		}

		err = e.config.ImageExtractor.ExtractImage(imgSrc.Value(), target, e.config.Platform.String(), e.config.LocalImage)
		if err != nil {
			return nil, err
		}
	} else if imgSrc.IsDir() {
		excludes := []string{"/mnt", "/proc", "/sys", "/dev", "/tmp", "/host", "/run"}
		err = utils.SyncData(e.config.Logger, e.config.Fs, imgSrc.Value(), target, excludes...)
		if err != nil {
			return nil, err
		}
	} else if imgSrc.IsFile() {
		err = utils.MkdirAll(e.config.Fs, cnst.ImgSrcDir, cnst.DirPerm)
		if err != nil {
			return nil, err
		}
		img := &v1.Image{File: imgSrc.Value(), MountPoint: cnst.ImgSrcDir}
		err = e.MountImage(img, "auto", "ro")
		if err != nil {
			return nil, err
		}
		defer e.UnmountImage(img) // nolint:errcheck
		excludes := []string{"/mnt", "/proc", "/sys", "/dev", "/tmp", "/host", "/run"}
		err = utils.SyncData(e.config.Logger, e.config.Fs, cnst.ImgSrcDir, target, excludes...)
		if err != nil {
			return nil, err
		}
	} else {
		return nil, fmt.Errorf("unknown image source type")
	}
	e.config.Logger.Infof("Finished copying %s into %s", imgSrc.Value(), target)
	return info, nil
}

// CopyCloudConfig will check if there is a cloud init in the config and store it on the target
func (e *Elemental) CopyCloudConfig(cloudInit []string) (err error) {
	for i, ci := range cloudInit {
		customConfig := filepath.Join(cnst.OEMDir, fmt.Sprintf("9%d_custom.yaml", i))
		err = utils.GetSource(e.config, ci, customConfig)
		if err != nil {
			return err
		}
		if err = e.config.Fs.Chmod(customConfig, cnst.FilePerm); err != nil {
			return err
		}
		e.config.Logger.Infof("Finished copying cloud config file %s to %s", cloudInit, customConfig)
	}
	return nil
}

// SelinuxRelabel will relabel the system if it finds the binary and the context
func (e *Elemental) SelinuxRelabel(rootDir string, raiseError bool) error {
	policyFile, err := utils.FindFileWithPrefix(e.config.Fs, filepath.Join(rootDir, cnst.SELinuxTargetedPolicyPath), "policy.")
	contextFile := filepath.Join(rootDir, cnst.SELinuxTargetedContextFile)
	contextExists, _ := utils.Exists(e.config.Fs, contextFile)

	if err == nil && contextExists && e.config.Runner.CommandExists("setfiles") {
		var out []byte
		var err error
		if rootDir == "/" || rootDir == "" {
			out, err = e.config.Runner.Run("setfiles", "-c", policyFile, "-e", "/dev", "-e", "/proc", "-e", "/sys", "-F", contextFile, "/")
		} else {
			out, err = e.config.Runner.Run("setfiles", "-c", policyFile, "-F", "-r", rootDir, contextFile, rootDir)
		}
		e.config.Logger.Debugf("SELinux setfiles output: %s", string(out))
		if err != nil && raiseError {
			return err
		}
	} else {
		e.config.Logger.Debugf("No files relabelling as SELinux utilities are not found")
	}

	return nil
}

// CheckActiveDeployment returns true if at least one of the provided filesystem labels is found within the system
func (e *Elemental) CheckActiveDeployment(labels []string) bool {
	e.config.Logger.Infof("Checking for active deployment")

	for _, label := range labels {
		found, _ := utils.GetDeviceByLabel(e.config.Runner, label, 1)
		if found != "" {
			e.config.Logger.Debug("there is already an active deployment in the system")
			return true
		}
	}
	return false
}

// UpdateSourceISO downloads an ISO in a temporary folder, mounts it and updates active image to use the ISO squashfs image as
// source. Returns a cleaner method to unmount and remove the temporary folder afterwards.
func (e Elemental) UpdateSourceFormISO(iso string, activeImg *v1.Image) (func() error, error) {
	nilErr := func() error { return nil }

	tmpDir, err := utils.TempDir(e.config.Fs, "", "elemental")
	if err != nil {
		return nilErr, err
	}

	cleanTmpDir := func() error { return e.config.Fs.RemoveAll(tmpDir) }

	tmpFile := filepath.Join(tmpDir, "elemental.iso")
	err = utils.GetSource(e.config, iso, tmpFile)
	if err != nil {
		return cleanTmpDir, err
	}

	isoMnt := filepath.Join(tmpDir, "iso")
	err = utils.MkdirAll(e.config.Fs, isoMnt, cnst.DirPerm)
	if err != nil {
		return cleanTmpDir, err
	}

	e.config.Logger.Infof("Mounting iso %s into %s", tmpFile, isoMnt)
	err = e.config.Mounter.Mount(tmpFile, isoMnt, "auto", []string{"loop"})
	if err != nil {
		return cleanTmpDir, err
	}

	cleanAll := func() error {
		cErr := e.config.Mounter.Unmount(isoMnt)
		if cErr != nil {
			return cErr
		}
		return cleanTmpDir()
	}

	squashfsImg := filepath.Join(isoMnt, cnst.ISORootFile)
	ok, _ := utils.Exists(e.config.Fs, squashfsImg)
	if !ok {
		return cleanAll, fmt.Errorf("squashfs image not found in ISO: %s", squashfsImg)
	}
	activeImg.Source = v1.NewFileSrc(squashfsImg)

	return cleanAll, nil
}

// SetDefaultGrubEntry Sets the default_meny_entry value in RunConfig.GrubOEMEnv file at in
// State partition mountpoint. If there is not a custom value in the os-release file, we do nothing
// As the grub config already has a sane default
func (e Elemental) SetDefaultGrubEntry(partMountPoint string, imgMountPoint string, defaultEntry string) error {
	var configEntry string
	osRelease, err := utils.LoadEnvFile(e.config.Fs, filepath.Join(imgMountPoint, "etc", "os-release"))
	e.config.Logger.Debugf("Looking for GRUB_ENTRY_NAME name in %s", filepath.Join(imgMountPoint, "etc", "os-release"))
	if err != nil {
		e.config.Logger.Warnf("Could not load os-release file: %v", err)
	} else {
		configEntry = osRelease["GRUB_ENTRY_NAME"]
		// If its not empty override the defaultEntry and set the one set on the os-release file
		if configEntry != "" {
			defaultEntry = configEntry
		}
	}

	if defaultEntry == "" {
		e.config.Logger.Warn("No default entry name for grub, not setting a name")
		return nil
	}

	e.config.Logger.Infof("Setting default grub entry to %s", defaultEntry)
	grub := utils.NewGrub(e.config)
	return grub.SetPersistentVariables(
		filepath.Join(partMountPoint, cnst.GrubOEMEnv),
		map[string]string{"default_menu_entry": defaultEntry},
	)
}

// FindKernelInitrd finds for kernel and intird files inside the /boot directory of a given
// root tree path. It assumes kernel and initrd files match certain file name prefixes.
func (e Elemental) FindKernelInitrd(rootDir string) (kernel string, initrd string, err error) {
	kernelNames := []string{"uImage", "Image", "zImage", "vmlinuz", "image"}
	initrdNames := []string{"initrd", "initramfs"}
	kernel, err = utils.FindFileWithPrefix(e.config.Fs, filepath.Join(rootDir, "boot"), kernelNames...)
	if err != nil {
		e.config.Logger.Errorf("No Kernel file found")
		return "", "", err
	}
	initrd, err = utils.FindFileWithPrefix(e.config.Fs, filepath.Join(rootDir, "boot"), initrdNames...)
	if err != nil {
		e.config.Logger.Errorf("No initrd file found")
		return "", "", err
	}
	return kernel, initrd, nil
}

// DeactivateDevice deactivates unmounted the block devices present within the system.
// Useful to deactivate LVM volumes, if any, related to the target device.
func (e Elemental) DeactivateDevices() error {
	out, err := e.config.Runner.Run(
		"blkdeactivate", "--lvmoptions", "retry,wholevg",
		"--dmoptions", "force,retry", "--errors",
	)
	e.config.Logger.Debugf("blkdeactivate command output: %s", string(out))
	return err
}
0707010000006C000081A4000000000000000000000001645E367C00009031000000000000000000000000000000000000003400000000elemental-cli-0.3.1/pkg/elemental/elemental_test.go   /*
   Copyright © 2021 SUSE LLC

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package elemental_test

import (
	"errors"
	"fmt"
	"os"
	"path/filepath"
	"testing"

	"github.com/jaypipes/ghw/pkg/block"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/twpayne/go-vfs"
	"github.com/twpayne/go-vfs/vfst"
	"k8s.io/mount-utils"

	conf "github.com/rancher/elemental-cli/pkg/config"
	"github.com/rancher/elemental-cli/pkg/constants"
	"github.com/rancher/elemental-cli/pkg/elemental"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	"github.com/rancher/elemental-cli/pkg/utils"
	v1mock "github.com/rancher/elemental-cli/tests/mocks"
)

const printOutput = `BYT;
/dev/loop0:50593792s:loopback:512:512:gpt:Loopback device:;`
const partTmpl = `
%d:%ss:%ss:2048s:ext4::type=83;`

func TestElementalSuite(t *testing.T) {
	RegisterFailHandler(Fail)
	RunSpecs(t, "Elemental test suite")
}

var _ = Describe("Elemental", Label("elemental"), func() {
	var config *v1.Config
	var runner *v1mock.FakeRunner
	var logger v1.Logger
	var syscall v1.SyscallInterface
	var client *v1mock.FakeHTTPClient
	var mounter *v1mock.ErrorMounter
	var extractor *v1mock.FakeImageExtractor
	var fs *vfst.TestFS
	var cleanup func()
	BeforeEach(func() {
		runner = v1mock.NewFakeRunner()
		syscall = &v1mock.FakeSyscall{}
		mounter = v1mock.NewErrorMounter()
		client = &v1mock.FakeHTTPClient{}
		logger = v1.NewNullLogger()
		extractor = v1mock.NewFakeImageExtractor(logger)
		fs, cleanup, _ = vfst.NewTestFS(nil)
		config = conf.NewConfig(
			conf.WithFs(fs),
			conf.WithRunner(runner),
			conf.WithLogger(logger),
			conf.WithMounter(mounter),
			conf.WithSyscall(syscall),
			conf.WithClient(client),
			conf.WithImageExtractor(extractor),
		)
	})
	AfterEach(func() { cleanup() })
	Describe("MountRWPartition", Label("mount"), func() {
		var el *elemental.Elemental
		var parts v1.ElementalPartitions
		BeforeEach(func() {
			parts = conf.NewInstallElementalParitions()

			err := utils.MkdirAll(fs, "/some", constants.DirPerm)
			Expect(err).ToNot(HaveOccurred())
			_, err = fs.Create("/some/device")
			Expect(err).ToNot(HaveOccurred())

			parts.OEM.Path = "/dev/device1"

			el = elemental.NewElemental(config)
		})

		It("Mounts and umounts a partition with RW", func() {
			umount, err := el.MountRWPartition(parts.OEM)
			Expect(err).To(BeNil())
			lst, _ := mounter.List()
			Expect(len(lst)).To(Equal(1))
			Expect(lst[0].Opts).To(Equal([]string{"rw"}))

			Expect(umount()).ShouldNot(HaveOccurred())
			lst, _ = mounter.List()
			Expect(len(lst)).To(Equal(0))
		})
		It("Remounts a partition with RW", func() {
			err := el.MountPartition(parts.OEM)
			Expect(err).To(BeNil())
			lst, _ := mounter.List()
			Expect(len(lst)).To(Equal(1))

			umount, err := el.MountRWPartition(parts.OEM)
			Expect(err).To(BeNil())
			lst, _ = mounter.List()
			// fake mounter is not merging remounts it just appends
			Expect(len(lst)).To(Equal(2))
			Expect(lst[1].Opts).To(Equal([]string{"remount", "rw"}))

			Expect(umount()).ShouldNot(HaveOccurred())
			lst, _ = mounter.List()
			// Increased once more to remount read-onply
			Expect(len(lst)).To(Equal(3))
			Expect(lst[2].Opts).To(Equal([]string{"remount", "ro"}))
		})
		It("Fails to mount a partition", func() {
			mounter.ErrorOnMount = true
			_, err := el.MountRWPartition(parts.OEM)
			Expect(err).Should(HaveOccurred())
		})
		It("Fails to remount a partition", func() {
			err := el.MountPartition(parts.OEM)
			Expect(err).To(BeNil())
			lst, _ := mounter.List()
			Expect(len(lst)).To(Equal(1))

			mounter.ErrorOnMount = true
			_, err = el.MountRWPartition(parts.OEM)
			Expect(err).Should(HaveOccurred())
			lst, _ = mounter.List()
			Expect(len(lst)).To(Equal(1))
		})
	})
	Describe("MountPartitions", Label("MountPartitions", "disk", "partition", "mount"), func() {
		var el *elemental.Elemental
		var parts v1.ElementalPartitions
		BeforeEach(func() {
			parts = conf.NewInstallElementalParitions()

			err := utils.MkdirAll(fs, "/some", constants.DirPerm)
			Expect(err).ToNot(HaveOccurred())
			_, err = fs.Create("/some/device")
			Expect(err).ToNot(HaveOccurred())

			parts.OEM.Path = "/dev/device2"
			parts.Recovery.Path = "/dev/device3"
			parts.State.Path = "/dev/device4"
			parts.Persistent.Path = "/dev/device5"

			el = elemental.NewElemental(config)
		})

		It("Mounts disk partitions", func() {
			err := el.MountPartitions(parts.PartitionsByMountPoint(false))
			Expect(err).To(BeNil())
			lst, _ := mounter.List()
			Expect(len(lst)).To(Equal(4))
		})

		It("Mounts disk partitions excluding recovery", func() {
			err := el.MountPartitions(parts.PartitionsByMountPoint(false, parts.Recovery))
			Expect(err).To(BeNil())
			lst, _ := mounter.List()
			for _, i := range lst {
				Expect(i.Path).NotTo(Equal("/dev/device3"))
			}
		})

		It("Fails if some partition resists to mount ", func() {
			mounter.ErrorOnMount = true
			err := el.MountPartitions(parts.PartitionsByMountPoint(false))
			Expect(err).NotTo(BeNil())
		})

		It("Fails if oem partition is not found ", func() {
			parts.OEM.Path = ""
			err := el.MountPartitions(parts.PartitionsByMountPoint(false))
			Expect(err).NotTo(BeNil())
		})
	})

	Describe("UnmountPartitions", Label("UnmountPartitions", "disk", "partition", "unmount"), func() {
		var el *elemental.Elemental
		var parts v1.ElementalPartitions
		BeforeEach(func() {
			parts = conf.NewInstallElementalParitions()

			err := utils.MkdirAll(fs, "/some", constants.DirPerm)
			Expect(err).ToNot(HaveOccurred())
			_, err = fs.Create("/some/device")
			Expect(err).ToNot(HaveOccurred())

			parts.OEM.Path = "/dev/device2"
			parts.Recovery.Path = "/dev/device3"
			parts.State.Path = "/dev/device4"
			parts.Persistent.Path = "/dev/device5"

			el = elemental.NewElemental(config)
			err = el.MountPartitions(parts.PartitionsByMountPoint(false))
			Expect(err).ToNot(HaveOccurred())
		})

		It("Unmounts disk partitions", func() {
			err := el.UnmountPartitions(parts.PartitionsByMountPoint(true))
			Expect(err).To(BeNil())
			lst, _ := mounter.List()
			Expect(len(lst)).To(Equal(0))
		})

		It("Fails to unmount disk partitions", func() {
			mounter.ErrorOnUnmount = true
			err := el.UnmountPartitions(parts.PartitionsByMountPoint(true))
			Expect(err).NotTo(BeNil())
		})
	})

	Describe("MountImage", Label("MountImage", "mount", "image"), func() {
		var el *elemental.Elemental
		var img *v1.Image
		BeforeEach(func() {
			el = elemental.NewElemental(config)
			img = &v1.Image{MountPoint: "/some/mountpoint"}
		})

		It("Mounts file system image", func() {
			runner.ReturnValue = []byte("/dev/loop")
			Expect(el.MountImage(img)).To(BeNil())
			Expect(img.LoopDevice).To(Equal("/dev/loop"))
		})

		It("Fails to set a loop device", Label("loop"), func() {
			runner.ReturnError = errors.New("failed to set a loop device")
			Expect(el.MountImage(img)).NotTo(BeNil())
			Expect(img.LoopDevice).To(Equal(""))
		})

		It("Fails to mount a loop device", Label("loop"), func() {
			runner.ReturnValue = []byte("/dev/loop")
			mounter.ErrorOnMount = true
			Expect(el.MountImage(img)).NotTo(BeNil())
			Expect(img.LoopDevice).To(Equal(""))
		})
	})

	Describe("UnmountImage", Label("UnmountImage", "mount", "image"), func() {
		var el *elemental.Elemental
		var img *v1.Image
		BeforeEach(func() {
			runner.ReturnValue = []byte("/dev/loop")
			el = elemental.NewElemental(config)
			img = &v1.Image{MountPoint: "/some/mountpoint"}
			Expect(el.MountImage(img)).To(BeNil())
			Expect(img.LoopDevice).To(Equal("/dev/loop"))
		})

		It("Unmounts file system image", func() {
			Expect(el.UnmountImage(img)).To(BeNil())
			Expect(img.LoopDevice).To(Equal(""))
		})

		It("Fails to unmount a mountpoint", func() {
			mounter.ErrorOnUnmount = true
			Expect(el.UnmountImage(img)).NotTo(BeNil())
		})

		It("Fails to unset a loop device", Label("loop"), func() {
			runner.ReturnError = errors.New("failed to unset a loop device")
			Expect(el.UnmountImage(img)).NotTo(BeNil())
		})
	})

	Describe("CreateFileSystemImage", Label("CreateFileSystemImage", "image"), func() {
		var el *elemental.Elemental
		var img *v1.Image
		BeforeEach(func() {
			img = &v1.Image{
				Label:      constants.ActiveLabel,
				Size:       32,
				File:       filepath.Join(constants.StateDir, "cOS", constants.ActiveImgFile),
				FS:         constants.LinuxImgFs,
				MountPoint: constants.ActiveDir,
				Source:     v1.NewDirSrc(constants.ISOBaseTree),
			}
			_ = utils.MkdirAll(fs, constants.ISOBaseTree, constants.DirPerm)
			el = elemental.NewElemental(config)
		})

		It("Creates a new file system image", func() {
			_, err := fs.Stat(img.File)
			Expect(err).NotTo(BeNil())
			err = el.CreateFileSystemImage(img)
			Expect(err).To(BeNil())
			stat, err := fs.Stat(img.File)
			Expect(err).To(BeNil())
			Expect(stat.Size()).To(Equal(int64(32 * 1024 * 1024)))
		})

		It("Fails formatting a file system image", Label("format"), func() {
			runner.ReturnError = errors.New("run error")
			_, err := fs.Stat(img.File)
			Expect(err).NotTo(BeNil())
			err = el.CreateFileSystemImage(img)
			Expect(err).NotTo(BeNil())
			_, err = fs.Stat(img.File)
			Expect(err).NotTo(BeNil())
		})
	})

	Describe("FormatPartition", Label("FormatPartition", "partition", "format"), func() {
		It("Reformats an already existing partition", func() {
			el := elemental.NewElemental(config)
			part := &v1.Partition{
				Path:            "/dev/device1",
				FS:              "ext4",
				FilesystemLabel: "MY_LABEL",
			}
			Expect(el.FormatPartition(part)).To(BeNil())
		})

	})
	Describe("PartitionAndFormatDevice", Label("PartitionAndFormatDevice", "partition", "format"), func() {
		var el *elemental.Elemental
		var cInit *v1mock.FakeCloudInitRunner
		var partNum int
		var printOut string
		var failPart bool
		var install *v1.InstallSpec

		BeforeEach(func() {
			cInit = &v1mock.FakeCloudInitRunner{ExecStages: []string{}, Error: false}
			config.CloudInitRunner = cInit
			el = elemental.NewElemental(config)
			install = conf.NewInstallSpec(*config)
			install.Target = "/some/device"

			err := utils.MkdirAll(fs, "/some", constants.DirPerm)
			Expect(err).ToNot(HaveOccurred())
			_, err = fs.Create("/some/device")
			Expect(err).ToNot(HaveOccurred())
		})

		Describe("Successful run", func() {
			var runFunc func(cmd string, args ...string) ([]byte, error)
			var efiPartCmds, partCmds, biosPartCmds [][]string
			BeforeEach(func() {
				partNum, printOut = 0, printOutput
				err := utils.MkdirAll(fs, "/some", constants.DirPerm)
				Expect(err).To(BeNil())
				efiPartCmds = [][]string{
					{
						"parted", "--script", "--machine", "--", "/some/device", "unit", "s",
						"mklabel", "gpt",
					}, {
						"parted", "--script", "--machine", "--", "/some/device", "unit", "s",
						"mkpart", "efi", "fat32", "2048", "133119", "set", "1", "esp", "on",
					}, {"mkfs.vfat", "-n", "COS_GRUB", "/some/device1"},
				}
				biosPartCmds = [][]string{
					{
						"parted", "--script", "--machine", "--", "/some/device", "unit", "s",
						"mklabel", "gpt",
					}, {
						"parted", "--script", "--machine", "--", "/some/device", "unit", "s",
						"mkpart", "bios", "", "2048", "4095", "set", "1", "bios_grub", "on",
					}, {"wipefs", "--all", "/some/device1"},
				}
				// These commands are only valid for EFI case
				partCmds = [][]string{
					{
						"parted", "--script", "--machine", "--", "/some/device", "unit", "s",
						"mkpart", "oem", "ext4", "133120", "264191",
					}, {"mkfs.ext4", "-L", "COS_OEM", "/some/device2"}, {
						"parted", "--script", "--machine", "--", "/some/device", "unit", "s",
						"mkpart", "recovery", "ext4", "264192", "8652799",
					}, {"mkfs.ext4", "-L", "COS_RECOVERY", "/some/device3"}, {
						"parted", "--script", "--machine", "--", "/some/device", "unit", "s",
						"mkpart", "state", "ext4", "8652800", "25430015",
					}, {"mkfs.ext4", "-L", "COS_STATE", "/some/device4"}, {
						"parted", "--script", "--machine", "--", "/some/device", "unit", "s",
						"mkpart", "persistent", "ext4", "25430016", "100%",
					}, {"mkfs.ext4", "-L", "COS_PERSISTENT", "/some/device5"},
				}

				runFunc = func(cmd string, args ...string) ([]byte, error) {
					switch cmd {
					case "parted":
						idx := 0
						for i, arg := range args {
							if arg == "mkpart" {
								idx = i
								break
							}
						}
						if idx > 0 {
							partNum++
							printOut += fmt.Sprintf(partTmpl, partNum, args[idx+3], args[idx+4])
							_, _ = fs.Create(fmt.Sprintf("/some/device%d", partNum))
						}
						return []byte(printOut), nil
					default:
						return []byte{}, nil
					}
				}
				runner.SideEffect = runFunc
			})

			It("Successfully creates partitions and formats them, EFI boot", func() {
				install.PartTable = v1.GPT
				install.Firmware = v1.EFI
				install.Partitions.SetFirmwarePartitions(v1.EFI, v1.GPT)
				Expect(el.PartitionAndFormatDevice(install)).To(BeNil())
				Expect(runner.MatchMilestones(append(efiPartCmds, partCmds...))).To(BeNil())
			})

			It("Successfully creates partitions and formats them, BIOS boot", func() {
				install.PartTable = v1.GPT
				install.Firmware = v1.BIOS
				install.Partitions.SetFirmwarePartitions(v1.BIOS, v1.GPT)
				Expect(el.PartitionAndFormatDevice(install)).To(BeNil())
				Expect(runner.MatchMilestones(biosPartCmds)).To(BeNil())
			})
		})

		Describe("Run with failures", func() {
			var runFunc func(cmd string, args ...string) ([]byte, error)
			BeforeEach(func() {
				err := utils.MkdirAll(fs, "/some", constants.DirPerm)
				Expect(err).To(BeNil())
				partNum, printOut = 0, printOutput
				runFunc = func(cmd string, args ...string) ([]byte, error) {
					switch cmd {
					case "parted":
						idx := 0
						for i, arg := range args {
							if arg == "mkpart" {
								idx = i
								break
							}
						}
						if idx > 0 {
							partNum++
							printOut += fmt.Sprintf(partTmpl, partNum, args[idx+3], args[idx+4])
							if failPart {
								return []byte{}, errors.New("Failure")
							}
							_, _ = fs.Create(fmt.Sprintf("/some/device%d", partNum))
						}
						return []byte(printOut), nil
					case "mkfs.ext4", "wipefs", "mkfs.vfat":
						return []byte{}, errors.New("Failure")
					default:
						return []byte{}, nil
					}
				}
				runner.SideEffect = runFunc
			})

			It("Fails creating efi partition", func() {
				failPart = true
				Expect(el.PartitionAndFormatDevice(install)).NotTo(BeNil())
				// Failed to create first partition
				Expect(partNum).To(Equal(1))
			})

			It("Fails formatting efi partition", func() {
				failPart = false
				Expect(el.PartitionAndFormatDevice(install)).NotTo(BeNil())
				// Failed to format first partition
				Expect(partNum).To(Equal(1))
			})
		})
	})
	Describe("DumpSource", Label("dump"), func() {
		var e *elemental.Elemental
		var destDir string
		BeforeEach(func() {
			var err error
			e = elemental.NewElemental(config)
			destDir, err = utils.TempDir(fs, "", "elemental")
			Expect(err).ShouldNot(HaveOccurred())
		})
		It("Copies files from a directory source", func() {
			sourceDir, err := utils.TempDir(fs, "", "elemental")
			Expect(err).ShouldNot(HaveOccurred())
			_, err = e.DumpSource(destDir, v1.NewDirSrc(sourceDir))
			Expect(err).To(BeNil())
		})
		It("Fails if source directory does not exist", func() {
			_, err := e.DumpSource(destDir, v1.NewDirSrc("/welp"))
			Expect(err).ToNot(BeNil())
		})
		It("Unpacks a docker image to target", Label("docker"), func() {
			_, err := e.DumpSource(destDir, v1.NewDockerSrc("docker/image:latest"))
			Expect(err).To(BeNil())
		})
		It("Unpacks a docker image to target with cosign validation", Label("docker", "cosign"), func() {
			config.Cosign = true
			_, err := e.DumpSource(destDir, v1.NewDockerSrc("docker/image:latest"))
			Expect(err).To(BeNil())
			Expect(runner.CmdsMatch([][]string{{"cosign", "verify", "docker/image:latest"}}))
		})
		It("Fails cosign validation", Label("cosign"), func() {
			runner.ReturnError = errors.New("cosign error")
			config.Cosign = true
			_, err := e.DumpSource(destDir, v1.NewDockerSrc("docker/image:latest"))
			Expect(err).NotTo(BeNil())
			Expect(runner.CmdsMatch([][]string{{"cosign", "verify", "docker/image:latest"}}))
		})
		It("Fails to unpack a docker image to target", Label("docker"), func() {
			unpackErr := errors.New("failed to unpack")
			extractor.SideEffect = func(_, _, _ string, _ bool) error { return unpackErr }
			_, err := e.DumpSource(destDir, v1.NewDockerSrc("docker/image:latest"))
			Expect(err).To(Equal(unpackErr))
		})
		It("Copies image file to target", func() {
			sourceImg := "/source.img"
			_, err := fs.Create(sourceImg)
			Expect(err).To(BeNil())
			destFile := filepath.Join(destDir, "active.img")
			_, err = fs.Stat(destFile)
			Expect(err).NotTo(BeNil())
			_, err = e.DumpSource(destFile, v1.NewFileSrc(sourceImg))
			Expect(err).To(BeNil())
			_, err = fs.Stat(destFile)
			Expect(err).To(BeNil())
		})
		It("Fails to copy, source can't be mounted", func() {
			mounter.ErrorOnMount = true
			_, err := e.DumpSource("whatever", v1.NewFileSrc("/source.img"))
			Expect(err).To(HaveOccurred())
		})
		It("Fails to copy, no write permissions", func() {
			sourceImg := "/source.img"
			_, err := fs.Create(sourceImg)
			Expect(err).To(BeNil())
			config.Fs = vfs.NewReadOnlyFS(fs)
			_, err = e.DumpSource("whatever", v1.NewFileSrc("/source.img"))
			Expect(err).To(HaveOccurred())
		})
	})
	Describe("DeployImgTree", Label("deployImgTree"), func() {
		var e *elemental.Elemental
		var imgFile, srcDir, root string
		var img *v1.Image

		BeforeEach(func() {
			e = elemental.NewElemental(config)

			imgFile = "/statePart/dst.img"
			root = "/workingDir"

			srcDir = "/srcDir"
			Expect(utils.MkdirAll(fs, srcDir, constants.DirPerm)).To(Succeed())

			img = &v1.Image{
				File:   imgFile,
				Source: v1.NewDirSrc(srcDir),
			}
		})
		It("Creates an image including including the root tree contents", func() {
			_, cleaner, err := e.DeployImgTree(img, root)
			Expect(err).ShouldNot(HaveOccurred())
			exists, _ := utils.Exists(fs, root)
			Expect(exists).To(BeTrue())
			Expect(cleaner()).To(Succeed())
			exists, _ = utils.Exists(fs, root)
			Expect(exists).To(BeFalse())
		})
		It("Fails without write permissions", func() {
			config.Fs = vfs.NewReadOnlyFS(fs)
			_, _, err := e.DeployImgTree(img, root)
			Expect(err).Should(HaveOccurred())
		})
		It("Fails setting a bind mount to root", func() {
			mounter.ErrorOnMount = true
			_, _, err := e.DeployImgTree(img, root)
			Expect(err).Should(HaveOccurred())
		})
		It("Fails dumping source if image source does not exist", func() {
			img.Source = v1.NewDirSrc("/nonexistingdir")
			_, _, err := e.DeployImgTree(img, root)
			Expect(err).Should(HaveOccurred())
		})
	})
	Describe("CreateImgFromTree", Label("createImg"), func() {
		var e *elemental.Elemental
		var imgFile, root string
		var img *v1.Image
		var cleaned bool

		BeforeEach(func() {
			cleaned = false
			e = elemental.NewElemental(config)
			destDir, err := utils.TempDir(fs, "", "test")
			Expect(err).ShouldNot(HaveOccurred())
			root, err = utils.TempDir(fs, "", "test")
			Expect(err).ShouldNot(HaveOccurred())

			imgFile = filepath.Join(destDir, "dst.img")
			sf, err := fs.Create(filepath.Join(root, "somefile"))
			Expect(err).ShouldNot(HaveOccurred())
			Expect(sf.Truncate(32 * 1024 * 1024)).To(Succeed())
			Expect(sf.Close()).To(Succeed())

			Expect(err).ShouldNot(HaveOccurred())
			img = &v1.Image{
				FS:         constants.LinuxImgFs,
				File:       imgFile,
				MountPoint: "/some/mountpoint",
			}
		})
		It("Creates an image including including the root tree contents", func() {
			cleaner := func() error {
				cleaned = true
				return nil
			}
			err := e.CreateImgFromTree(root, img, cleaner)
			Expect(err).ShouldNot(HaveOccurred())
			Expect(img.Size).To(Equal(32 + constants.ImgOverhead + 1))
			exists, _ := utils.Exists(fs, "/some/mountpoint/somefile")
			Expect(exists).To(BeTrue())
			Expect(cleaned).To(BeTrue())
		})
		It("Creates an squashfs image", func() {
			img.FS = constants.SquashFs
			err := e.CreateImgFromTree(root, img, nil)
			Expect(err).ShouldNot(HaveOccurred())
			Expect(img.Size).To(Equal(uint(0)))
			Expect(runner.IncludesCmds([][]string{{"mksquashfs"}}))
		})
		It("Creates an image of an specific size including including the root tree contents", func() {
			img.Size = 64
			err := e.CreateImgFromTree(root, img, nil)
			Expect(err).ShouldNot(HaveOccurred())
			Expect(img.Size).To(Equal(uint(64)))
			exists, _ := utils.Exists(fs, "/some/mountpoint/somefile")
			Expect(exists).To(BeTrue())
		})
		It("Fails to mount created filesystem image", func() {
			mounter.ErrorOnMount = true
			err := e.CreateImgFromTree(root, img, nil)
			Expect(err).Should(HaveOccurred())
			Expect(img.Size).To(Equal(32 + constants.ImgOverhead + 1))
			Expect(cleaned).To(BeFalse())
		})
		It("Fails to mount created filesystem image", func() {
			mounter.ErrorOnUnmount = true
			err := e.CreateImgFromTree(root, img, nil)
			Expect(err).Should(HaveOccurred())
			Expect(img.Size).To(Equal(32 + constants.ImgOverhead + 1))
			Expect(cleaned).To(BeFalse())
			exists, _ := utils.Exists(fs, "/some/mountpoint/somefile")
			Expect(exists).To(BeTrue())
		})
		It("Fails to create image, no write permissions", func() {
			config.Fs = vfs.NewReadOnlyFS(fs)
			err := e.CreateImgFromTree(root, img, nil)
			Expect(err).Should(HaveOccurred())
			Expect(img.Size).To(Equal(32 + constants.ImgOverhead + 1))
		})
	})
	Describe("DeployImage", Label("deployImg"), func() {
		var e *elemental.Elemental
		var imgFile, srcDir string
		var img *v1.Image

		BeforeEach(func() {
			e = elemental.NewElemental(config)
			destDir, err := utils.TempDir(fs, "", "test")
			Expect(err).ShouldNot(HaveOccurred())
			srcDir, err = utils.TempDir(fs, "", "test")
			Expect(err).ShouldNot(HaveOccurred())

			imgFile = filepath.Join(destDir, "dst.img")

			sf, err := fs.Create(filepath.Join(srcDir, "somefile"))
			Expect(err).ShouldNot(HaveOccurred())
			Expect(sf.Truncate(32 * 1024 * 1024)).To(Succeed())
			Expect(sf.Close()).To(Succeed())

			Expect(err).ShouldNot(HaveOccurred())
			img = &v1.Image{
				FS:         constants.LinuxImgFs,
				File:       imgFile,
				MountPoint: "/some/mountpoint",
				Source:     v1.NewDirSrc(srcDir),
			}
		})
		It("Deploys image source into a filesystem image", func() {
			_, err := e.DeployImage(img)
			Expect(err).ShouldNot(HaveOccurred())
			Expect(runner.IncludesCmds([][]string{{"mkfs.ext2"}})).To(Succeed())
			Expect(img.Size).To(Equal(32 + constants.ImgOverhead + 1))
		})
		It("Fails to dump source without write permissions", func() {
			config.Fs = vfs.NewReadOnlyFS(fs)
			_, err := e.DeployImage(img)
			Expect(err).Should(HaveOccurred())
			Expect(runner.IncludesCmds([][]string{{"mkfs.ext2"}})).NotTo(Succeed())
		})
		It("Fails to create filesystem", func() {
			runner.SideEffect = func(cmd string, args ...string) ([]byte, error) {
				if cmd == "mkfs.ext2" {
					return []byte{}, fmt.Errorf("Failed calling mkfs.ext2")
				}
				return []byte{}, nil
			}
			_, err := e.DeployImage(img)
			Expect(err).Should(HaveOccurred())
			Expect(err.Error()).To(ContainSubstring("calling mkfs.ext2"))
			Expect(runner.IncludesCmds([][]string{{"mkfs.ext2"}})).To(Succeed())
		})
	})
	Describe("CopyImgFile", Label("copyimg"), func() {
		var e *elemental.Elemental
		var imgFile, srcFile string
		var img *v1.Image
		var fileContent []byte
		BeforeEach(func() {
			e = elemental.NewElemental(config)
			destDir, err := utils.TempDir(fs, "", "test")
			Expect(err).ShouldNot(HaveOccurred())
			imgFile = filepath.Join(destDir, "dst.img")
			srcFile = filepath.Join(destDir, "src.img")
			fileContent = []byte("imagefile")
			err = fs.WriteFile(srcFile, fileContent, constants.FilePerm)
			Expect(err).ShouldNot(HaveOccurred())
			img = &v1.Image{
				Label:  "myLabel",
				FS:     constants.LinuxImgFs,
				File:   imgFile,
				Source: v1.NewFileSrc(srcFile),
			}
		})
		It("Copies image file and sets new label", func() {
			err := e.CopyFileImg(img)
			Expect(err).ShouldNot(HaveOccurred())
			Expect(runner.IncludesCmds([][]string{{"tune2fs", "-L", img.Label, img.File}})).To(BeNil())
			data, err := fs.ReadFile(imgFile)
			Expect(err).ShouldNot(HaveOccurred())
			Expect(data).To(Equal(fileContent))
		})
		It("Copies image file and without setting a new label", func() {
			img.FS = constants.SquashFs
			err := e.CopyFileImg(img)
			Expect(err).ShouldNot(HaveOccurred())
			Expect(runner.IncludesCmds([][]string{{"tune2fs", "-L", img.Label, img.File}})).NotTo(BeNil())
			data, err := fs.ReadFile(imgFile)
			Expect(err).ShouldNot(HaveOccurred())
			Expect(data).To(Equal(fileContent))
		})
		It("Fails to copy image if source is not of file type", func() {
			img.Source = v1.NewEmptySrc()
			err := e.CopyFileImg(img)
			Expect(err).Should(HaveOccurred())
		})
		It("Fails to copy image if source does not exist", func() {
			img.Source = v1.NewFileSrc("whatever")
			err := e.CopyFileImg(img)
			Expect(err).Should(HaveOccurred())
		})
		It("Fails to copy image if it can't create target dir", func() {
			img.File = "/new/path.img"
			config.Fs = vfs.NewReadOnlyFS(fs)
			err := e.CopyFileImg(img)
			Expect(err).Should(HaveOccurred())
		})
		It("Fails to copy image if it can't write a new file", func() {
			config.Fs = vfs.NewReadOnlyFS(fs)
			err := e.CopyFileImg(img)
			Expect(err).Should(HaveOccurred())
		})
	})
	Describe("CheckActiveDeployment", Label("check"), func() {
		It("deployment found", func() {
			ghwTest := v1mock.GhwMock{}
			disk := block.Disk{Name: "device", Partitions: []*block.Partition{
				{
					Name:            "device1",
					FilesystemLabel: constants.ActiveLabel,
				},
			}}
			ghwTest.AddDisk(disk)
			ghwTest.CreateDevices()
			defer ghwTest.Clean()
			runner.ReturnValue = []byte(
				fmt.Sprintf(
					`{"blockdevices": [{"label": "%s", "type": "loop", "path": "/some/device"}]}`,
					constants.ActiveLabel,
				),
			)
			e := elemental.NewElemental(config)
			Expect(e.CheckActiveDeployment([]string{constants.ActiveLabel, constants.PassiveLabel})).To(BeTrue())
		})

		It("Should not error out", func() {
			runner.ReturnValue = []byte("")
			e := elemental.NewElemental(config)
			Expect(e.CheckActiveDeployment([]string{constants.ActiveLabel, constants.PassiveLabel})).To(BeFalse())
		})
	})
	Describe("SelinuxRelabel", Label("SelinuxRelabel", "selinux"), func() {
		var policyFile string
		var relabelCmd []string
		BeforeEach(func() {
			// to mock the existance of setfiles command on non selinux hosts
			err := utils.MkdirAll(fs, "/usr/sbin", constants.DirPerm)
			Expect(err).ShouldNot(HaveOccurred())
			sbin, err := fs.RawPath("/usr/sbin")
			Expect(err).ShouldNot(HaveOccurred())

			path := os.Getenv("PATH")
			os.Setenv("PATH", fmt.Sprintf("%s:%s", sbin, path))
			_, err = fs.Create("/usr/sbin/setfiles")
			Expect(err).ShouldNot(HaveOccurred())
			err = fs.Chmod("/usr/sbin/setfiles", 0777)
			Expect(err).ShouldNot(HaveOccurred())

			// to mock SELinux policy files
			policyFile = filepath.Join(constants.SELinuxTargetedPolicyPath, "policy.31")
			err = utils.MkdirAll(fs, filepath.Dir(constants.SELinuxTargetedContextFile), constants.DirPerm)
			Expect(err).ShouldNot(HaveOccurred())
			_, err = fs.Create(constants.SELinuxTargetedContextFile)
			Expect(err).ShouldNot(HaveOccurred())
			err = utils.MkdirAll(fs, constants.SELinuxTargetedPolicyPath, constants.DirPerm)
			Expect(err).ShouldNot(HaveOccurred())
			_, err = fs.Create(policyFile)
			Expect(err).ShouldNot(HaveOccurred())

			relabelCmd = []string{
				"setfiles", "-c", policyFile, "-e", "/dev", "-e", "/proc", "-e", "/sys",
				"-F", constants.SELinuxTargetedContextFile, "/",
			}
		})
		It("does nothing if the context file is not found", func() {
			err := fs.Remove(constants.SELinuxTargetedContextFile)
			Expect(err).ShouldNot(HaveOccurred())

			c := elemental.NewElemental(config)
			Expect(c.SelinuxRelabel("/", true)).To(BeNil())
			Expect(runner.CmdsMatch([][]string{{}}))
		})
		It("does nothing if the policy file is not found", func() {
			err := fs.Remove(policyFile)
			Expect(err).ShouldNot(HaveOccurred())

			c := elemental.NewElemental(config)
			Expect(c.SelinuxRelabel("/", true)).To(BeNil())
			Expect(runner.CmdsMatch([][]string{{}}))
		})
		It("relabels the current root", func() {
			c := elemental.NewElemental(config)
			Expect(c.SelinuxRelabel("", true)).To(BeNil())
			Expect(runner.CmdsMatch([][]string{relabelCmd})).To(BeNil())

			runner.ClearCmds()
			Expect(c.SelinuxRelabel("/", true)).To(BeNil())
			Expect(runner.CmdsMatch([][]string{relabelCmd})).To(BeNil())
		})
		It("fails to relabel the current root", func() {
			runner.ReturnError = errors.New("setfiles failure")
			c := elemental.NewElemental(config)
			Expect(c.SelinuxRelabel("", true)).NotTo(BeNil())
			Expect(runner.CmdsMatch([][]string{relabelCmd})).To(BeNil())
		})
		It("ignores relabel failures", func() {
			runner.ReturnError = errors.New("setfiles failure")
			c := elemental.NewElemental(config)
			Expect(c.SelinuxRelabel("", false)).To(BeNil())
			Expect(runner.CmdsMatch([][]string{relabelCmd})).To(BeNil())
		})
		It("relabels the given root-tree path", func() {
			contextFile := filepath.Join("/root", constants.SELinuxTargetedContextFile)
			err := utils.MkdirAll(fs, filepath.Dir(contextFile), constants.DirPerm)
			Expect(err).ShouldNot(HaveOccurred())
			_, err = fs.Create(contextFile)
			Expect(err).ShouldNot(HaveOccurred())
			policyFile = filepath.Join("/root", policyFile)
			err = utils.MkdirAll(fs, filepath.Join("/root", constants.SELinuxTargetedPolicyPath), constants.DirPerm)
			Expect(err).ShouldNot(HaveOccurred())
			_, err = fs.Create(policyFile)
			Expect(err).ShouldNot(HaveOccurred())

			relabelCmd = []string{
				"setfiles", "-c", policyFile, "-F", "-r", "/root", contextFile, "/root",
			}

			c := elemental.NewElemental(config)
			Expect(c.SelinuxRelabel("/root", true)).To(BeNil())
			Expect(runner.CmdsMatch([][]string{relabelCmd})).To(BeNil())
		})
	})
	Describe("GetIso", Label("GetIso", "iso"), func() {
		var e *elemental.Elemental
		var activeImg *v1.Image
		BeforeEach(func() {
			activeImg = &v1.Image{}
			e = elemental.NewElemental(config)
		})
		It("Gets the iso, mounts it and updates image source", func() {
			tmpDir, err := utils.TempDir(fs, "", "elemental-test")
			Expect(err).To(BeNil())
			err = fs.WriteFile(fmt.Sprintf("%s/fake.iso", tmpDir), []byte("Hi"), constants.FilePerm)
			Expect(err).To(BeNil())
			iso := fmt.Sprintf("%s/fake.iso", tmpDir)

			// Create the internal ISO file structure
			rootfsImg := filepath.Join(os.TempDir(), "/elemental/iso", constants.ISORootFile)
			Expect(utils.MkdirAll(fs, filepath.Dir(rootfsImg), constants.DirPerm)).To(Succeed())
			Expect(fs.WriteFile(rootfsImg, []byte{}, constants.FilePerm)).To(Succeed())

			isoClean, err := e.UpdateSourceFormISO(iso, activeImg)
			Expect(err).To(BeNil())
			Expect(activeImg.Source.IsFile()).To(BeTrue())
			Expect(isoClean()).To(Succeed())
		})
		It("Fails if it cant find the iso", func() {
			iso := "whatever"
			e := elemental.NewElemental(config)
			isoClean, err := e.UpdateSourceFormISO(iso, activeImg)
			Expect(err).ToNot(BeNil())
			Expect(isoClean()).To(Succeed())
		})
		It("Fails creating the mountpoint", func() {
			tmpDir, err := utils.TempDir(fs, "", "elemental-test")
			Expect(err).To(BeNil())
			err = fs.WriteFile(fmt.Sprintf("%s/fake.iso", tmpDir), []byte("Hi"), constants.FilePerm)
			Expect(err).To(BeNil())
			iso := fmt.Sprintf("%s/fake.iso", tmpDir)
			config.Fs = vfs.NewReadOnlyFS(fs)

			isoClean, err := e.UpdateSourceFormISO(iso, activeImg)
			Expect(err).ToNot(BeNil())
			Expect(isoClean()).To(Succeed())
		})
		It("Fails if it cannot mount the iso", func() {
			mounter.ErrorOnMount = true
			tmpDir, err := utils.TempDir(fs, "", "elemental-test")
			Expect(err).To(BeNil())
			err = fs.WriteFile(fmt.Sprintf("%s/fake.iso", tmpDir), []byte("Hi"), constants.FilePerm)
			Expect(err).To(BeNil())
			iso := fmt.Sprintf("%s/fake.iso", tmpDir)
			isoClean, err := e.UpdateSourceFormISO(iso, activeImg)
			Expect(err).ToNot(BeNil())
			Expect(err.Error()).To(ContainSubstring("mount error"))
			Expect(isoClean()).To(Succeed())
		})
	})
	Describe("CloudConfig", Label("CloudConfig", "cloud-config"), func() {
		var e *elemental.Elemental
		BeforeEach(func() {
			e = elemental.NewElemental(config)
		})
		It("Copies the cloud config file", func() {
			testString := "In a galaxy far far away..."
			cloudInit := []string{"/config.yaml"}
			err := fs.WriteFile(cloudInit[0], []byte(testString), constants.FilePerm)
			Expect(err).To(BeNil())
			Expect(err).To(BeNil())

			err = e.CopyCloudConfig(cloudInit)
			Expect(err).To(BeNil())
			copiedFile, err := fs.ReadFile(fmt.Sprintf("%s/90_custom.yaml", constants.OEMDir))
			Expect(err).To(BeNil())
			Expect(copiedFile).To(ContainSubstring(testString))
		})
		It("Doesnt do anything if the config file is not set", func() {
			err := e.CopyCloudConfig([]string{})
			Expect(err).To(BeNil())
		})
	})
	Describe("SetDefaultGrubEntry", Label("SetDefaultGrubEntry", "grub"), func() {
		It("Sets the default grub entry without issues", func() {
			el := elemental.NewElemental(config)
			Expect(el.SetDefaultGrubEntry("/mountpoint", "/imgMountpoint", "default_entry")).To(BeNil())
		})
		It("does nothing on empty default entry and no /etc/os-release", func() {
			el := elemental.NewElemental(config)
			Expect(el.SetDefaultGrubEntry("/mountpoint", "/imgMountPoint", "")).To(BeNil())
			// No grub2-editenv command called
			Expect(runner.CmdsMatch([][]string{{"grub2-editenv"}})).NotTo(BeNil())
		})
		It("loads /etc/os-release on empty default entry", func() {
			err := utils.MkdirAll(config.Fs, "/imgMountPoint/etc", constants.DirPerm)
			Expect(err).ShouldNot(HaveOccurred())
			err = config.Fs.WriteFile("/imgMountPoint/etc/os-release", []byte("GRUB_ENTRY_NAME=test"), constants.FilePerm)
			Expect(err).ShouldNot(HaveOccurred())

			el := elemental.NewElemental(config)
			Expect(el.SetDefaultGrubEntry("/mountpoint", "/imgMountPoint", "")).To(BeNil())
			// Calls grub2-editenv with the loaded content from /etc/os-release
			Expect(runner.CmdsMatch([][]string{
				{"grub2-editenv", "/mountpoint/grub_oem_env", "set", "default_menu_entry=test"},
			})).To(BeNil())
		})
		It("Fails setting grubenv", func() {
			runner.ReturnError = errors.New("failure")
			el := elemental.NewElemental(config)
			Expect(el.SetDefaultGrubEntry("/mountpoint", "/imgMountPoint", "default_entry")).NotTo(BeNil())
		})
	})
	Describe("FindKernelInitrd", Label("find"), func() {
		BeforeEach(func() {
			err := utils.MkdirAll(fs, "/path/boot", constants.DirPerm)
			Expect(err).ShouldNot(HaveOccurred())
		})
		It("finds kernel and initrd files", func() {
			_, err := fs.Create("/path/boot/initrd")
			Expect(err).ShouldNot(HaveOccurred())

			_, err = fs.Create("/path/boot/vmlinuz")
			Expect(err).ShouldNot(HaveOccurred())

			el := elemental.NewElemental(config)
			k, i, err := el.FindKernelInitrd("/path")
			Expect(err).ShouldNot(HaveOccurred())
			Expect(k).To(Equal("/path/boot/vmlinuz"))
			Expect(i).To(Equal("/path/boot/initrd"))
		})
		It("fails if no initrd is found", func() {
			_, err := fs.Create("/path/boot/vmlinuz")
			Expect(err).ShouldNot(HaveOccurred())

			el := elemental.NewElemental(config)
			_, _, err = el.FindKernelInitrd("/path")
			Expect(err).Should(HaveOccurred())
		})
		It("fails if no kernel is found", func() {
			_, err := fs.Create("/path/boot/initrd")
			Expect(err).ShouldNot(HaveOccurred())

			el := elemental.NewElemental(config)
			_, _, err = el.FindKernelInitrd("/path")
			Expect(err).Should(HaveOccurred())
		})
	})
	Describe("DeactivateDevices", Label("blkdeactivate"), func() {
		It("calls blkdeactivat", func() {
			el := elemental.NewElemental(config)
			err := el.DeactivateDevices()
			Expect(err).ShouldNot(HaveOccurred())
			Expect(runner.CmdsMatch([][]string{{
				"blkdeactivate", "--lvmoptions", "retry,wholevg",
				"--dmoptions", "force,retry", "--errors",
			}})).To(BeNil())
		})
	})
})

// PathInMountPoints will check if the given path is in the mountPoints list
func pathInMountPoints(mounter mount.Interface, path string) bool {
	mountPoints, _ := mounter.List()
	for _, m := range mountPoints {
		if path == m.Path {
			return true
		}
	}
	return false
}
   0707010000006D000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000001E00000000elemental-cli-0.3.1/pkg/error 0707010000006E000081A4000000000000000000000001645E367C000004F8000000000000000000000000000000000000003100000000elemental-cli-0.3.1/pkg/error/elemental-error.go  /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package error

// ElementalError is our custom error to pass around exit codes in the error
type ElementalError struct {
	err  string
	code int
}

func (e *ElementalError) Error() string {
	return e.err
}

func (e *ElementalError) ExitCode() int {
	return e.code
}

// NewFromError generates an ElementalError from an existing error,
// maintaining its error message
func NewFromError(err error, code int) error {
	if err == nil {
		return nil
	}

	errorMsg := ""
	if err.Error() != "" {
		errorMsg = err.Error()
	}
	return &ElementalError{err: errorMsg, code: code}
}

// New generates an ElementalError from a string
func New(err string, code int) error {
	return &ElementalError{err: err, code: code}
}
0707010000006F000081A4000000000000000000000001645E367C00001520000000000000000000000000000000000000002C00000000elemental-cli-0.3.1/pkg/error/exit-codes.go   /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

// provides a custom error interface and exit codes to use on the elemental-cli
package error

//
// Provided exit codes for elemental-cli

// To make it easy to generate them you have to respect the structure:
//
// comment that explains the error
// const NamedConstant = ERRORCODE
//
// This way you can later run `make build_docs` to generate the elemental_exit-codes.md in the docs dir automatically
// And they will be generated into a Markdown list of EXITCODE -> COMMENT

// Error closing a file
const CloseFile = 10

// Error running a command
const CommandRun = 11

// Error copying data
const CopyData = 12

// Error copying a file
const CopyFile = 13

// Wrong cosign flags used in cmd
const CosignWrongFlags = 14

// Error creating a dir
const CreateDir = 15

// Error creating a file
const CreateFile = 16

// Error creating a temporal dir
const CreateTempDir = 17

// Error dumping the source
const DumpSource = 18

// Error creating a gzip writer
const GzipWriter = 19

// Error trying to identify the source
const IdentifySource = 20

// Error calling mkfs
const MKFSCall = 21

// There is not packages for the given architecture
const NoPackagesForArch = 22

// No luet repositories configured
const NoReposConfigured = 23

// Error opening a file
const OpenFile = 24

// Output file already exists
const OutFileExists = 25

// Error reading the build config
const ReadingBuildConfig = 26

// Error reading the build-disk config
const ReadingBuildDiskConfig = 27

// Error running stat on a file
const StatFile = 28

// Error creating a tar archive
const TarHeader = 29

// Error truncating a file
const TruncateFile = 30

// Error reading the run config
const ReadingRunConfig = 31

// Error reading the install/upgrade flags
const ReadingInstallUpgradeFlags = 32

// Error reading the config for the command
const ReadingSpecConfig = 33

// Error mounting state partition
const MountStatePartition = 34

// Error mounting recovery partition
const MountRecoveryPartition = 35

// Error during before-upgrade hook
const HookBeforeUpgrade = 36

// Error during before-upgrade-chroot hook
const HookBeforeUpgradeChroot = 37

// Error during after-upgrade hook
const HookAfterUpgrade = 38

// Error during after-upgrade-chroot hook
const HookAfterUpgradeChroot = 39

// Error moving file
const MoveFile = 40

// Error occurred during cleanup
const Cleanup = 41

// Error occurred trying to reboot
const Reboot = 42

// Error occurred trying to shutdown
const PowerOff = 43

// Error occurred when labeling partition
const LabelImage = 44

// Error setting default grub entry
const SetDefaultGrubEntry = 45

// Error occurred during selinux relabeling
const SelinuxRelabel = 46

// Error invalid device specified
const InvalidTarget = 47

// Error deploying image to file
const DeployImage = 48

// Error installing GRUB
const InstallGrub = 49

// Error during before-install hook
const HookBeforeInstall = 50

// Error during after-install hook
const HookAfterInstall = 51

// Error during after-install-chroot hook
const HookAfterInstallChroot = 52

// Error during file download
const DownloadFile = 53

// Error mounting partitions
const MountPartitions = 54

// Error deactivating active devices
const DeactivatingDevices = 55

// Error during device partitioning
const PartitioningDevice = 56

// Device already contains an install
const AlreadyInstalled = 57

// Command requires root privileges
const RequiresRoot = 58

// Error occurred when unmounting partitions
const UnmountPartitions = 59

// Error occurred when formatting partitions
const FormatPartitions = 60

// Error during before-reset hook
const HookBeforeReset = 61

// Error during after-reset-chroot hook
const HookAfterResetChroot = 62

// Error during after-reset hook
const HookAfterReset = 63

// Unsupported flavor
const UnsupportedFlavor = 64

// Error encountered during cloud-init run-stage
const CloudInitRunStage = 65

// Error unpacking image
const UnpackImage = 66

// Error reading file
const ReadFile = 67

// No source was provided for the command
const NoSourceProvided = 68

// Error removing a file
const RemoveFile = 69

// Error calculating checksum
const CalculateChecksum = 70

// Error occurred when unmounting image
const UnmountImage = 71

// Error occurred during post-upgrade hook
const HookPostUpgrade = 72

// Error occurred during post-reset hook
const HookPostReset = 73

// Error occurred during post-install hook
const HookPostInstall = 74

// Error occurred while preparing the image root tree
const DeployImgTree = 75

// Error occurred while creating the OS filesystem image
const CreateImgFromTree = 76

// Error occurred while copying the filesystem image and setting new labels
const CopyFileImg = 77

// Error setting persistent GRUB variables
const SetGrubVariables = 78

// Unknown error
const Unknown int = 255
07070100000070000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000001D00000000elemental-cli-0.3.1/pkg/http  07070100000071000081A4000000000000000000000001645E367C00000750000000000000000000000000000000000000002700000000elemental-cli-0.3.1/pkg/http/client.go    /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package http

import (
	"net/http"
	"time"

	"github.com/cavaliergopher/grab/v3"
	"github.com/rancher/elemental-cli/pkg/constants"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
)

type Client struct {
	client *grab.Client
}

func NewClient() *Client {
	client := grab.NewClient()
	client.HTTPClient = &http.Client{Timeout: time.Second * constants.HTTPTimeout}
	return &Client{client: client}
}

// GetURL attempts to download the contents of the given URL to the given destination
func (c Client) GetURL(log v1.Logger, url string, destination string) error { // nolint:revive
	req, err := grab.NewRequest(destination, url)
	if err != nil {
		log.Errorf("Failed creating a request to '%s'", url)
		return err
	}

	// start download
	log.Infof("Downloading %v...\n", req.URL())
	resp := c.client.Do(req)

	// start UI loop
	t := time.NewTicker(500 * time.Millisecond)
	defer t.Stop()

Loop:
	for {
		select {
		case <-t.C:
			log.Debugf("  transferred %v / %v bytes (%.2f%%)\n",
				resp.BytesComplete(),
				resp.Size,
				100*resp.Progress())

		case <-resp.Done:
			// download is complete
			break Loop
		}
	}

	// check for errors
	if err := resp.Err(); err != nil {
		log.Errorf("Download failed: %v\n", err)
		return err
	}

	log.Debugf("Download saved to ./%v \n", resp.Filename)
	return nil
}
07070100000072000081A4000000000000000000000001645E367C000008EB000000000000000000000000000000000000002C00000000elemental-cli-0.3.1/pkg/http/client_test.go   /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package http_test

import (
	"os"
	"path/filepath"

	"github.com/rancher/elemental-cli/pkg/http"
	"github.com/rancher/elemental-cli/pkg/types/v1"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

const source = "https://github.com/rancher/elemental-cli/releases/download/v0.0.13/elemental-v0.0.13-Linux-x86_64.tar.gz"

var _ = Describe("HTTPClient", Label("http"), func() {
	var client *http.Client
	var log v1.Logger
	var destDir string
	BeforeEach(func() {
		client = http.NewClient()
		log = v1.NewNullLogger()
		destDir, _ = os.MkdirTemp("", "elemental-test")
	})
	AfterEach(func() {
		os.RemoveAll(destDir)
	})
	It("Downloads a test file to destination folder", func() {
		// Download a public elemental release
		_, err := os.Stat(filepath.Join(destDir, "elemental-v0.0.13-Linux-x86_64.tar.gz"))
		Expect(err).NotTo(BeNil())
		Expect(client.GetURL(log, source, destDir)).To(BeNil())
		_, err = os.Stat(filepath.Join(destDir, "elemental-v0.0.13-Linux-x86_64.tar.gz"))
		Expect(err).To(BeNil())
	})
	It("Downloads a test file to some specified destination file", func() {
		// Download a public elemental release
		_, err := os.Stat(filepath.Join(destDir, "testfile"))
		Expect(err).NotTo(BeNil())
		Expect(client.GetURL(log, source, filepath.Join(destDir, "testfile"))).To(BeNil())
		_, err = os.Stat(filepath.Join(destDir, "testfile"))
		Expect(err).To(BeNil())
	})
	It("Fails to download a non existing url", func() {
		source := "http://nonexisting.stuff"
		Expect(client.GetURL(log, source, destDir)).NotTo(BeNil())
	})
	It("Fails to download a broken url", func() {
		source := "scp://23412342341234.wqer.234|@#~ł€@¶|@~#"
		Expect(client.GetURL(log, source, destDir)).NotTo(BeNil())
	})
})
 07070100000073000081A4000000000000000000000001645E367C000002FD000000000000000000000000000000000000003000000000elemental-cli-0.3.1/pkg/http/http_suite_test.go   /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package http_test

import (
	"testing"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

func TestTypes(t *testing.T) {
	RegisterFailHandler(Fail)
	RunSpecs(t, "http type test suite")
}
   07070100000074000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000001D00000000elemental-cli-0.3.1/pkg/live  07070100000075000081A4000000000000000000000001645E367C00000F1A000000000000000000000000000000000000002700000000elemental-cli-0.3.1/pkg/live/common.go    /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package live

import (
	"fmt"

	"github.com/rancher/elemental-cli/pkg/constants"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
)

const (
	efiBootPath    = "/EFI/BOOT"
	efiImgX86      = "bootx64.efi"
	efiImgArm64    = "bootaa64.efi"
	grubCfg        = "grub.cfg"
	grubPrefixDir  = "/boot/grub2"
	isoBootCatalog = "/boot/boot.catalog"

	// TODO document any custom BIOS bootloader must match this setup as these are not configurable
	// and coupled with the xorriso call
	isoLoaderPath = "/boot/x86_64/loader"
	isoHybridMBR  = isoLoaderPath + "/boot_hybrid.img"
	isoBootFile   = isoLoaderPath + "/eltorito.img"

	//TODO use some identifer known to be unique
	grubEfiCfg = "search --no-floppy --file --set=root " + constants.ISOKernelPath +
		"\nset prefix=($root)" + grubPrefixDir +
		"\nconfigfile $prefix/" + grubCfg

	// TODO not convinced having such a config here is the best idea
	grubCfgTemplate = `search --no-floppy --file --set=root /boot/kernel
	set default=0
	set timeout=10
	set timeout_style=menu
	set linux=linux
	set initrd=initrd
	if [ "${grub_cpu}" = "x86_64" -o "${grub_cpu}" = "i386" -o "${grub_cpu}" = "arm64" ];then
		if [ "${grub_platform}" = "efi" ]; then
			if [ "${grub_cpu}" != "arm64" ]; then
				set linux=linuxefi
				set initrd=initrdefi
			fi
		fi
	fi
	if [ "${grub_platform}" = "efi" ]; then
		echo "Please press 't' to show the boot menu on this console"
	fi

	menuentry "%s" --class os --unrestricted {
		echo Loading kernel...
		$linux ($root)` + constants.ISOKernelPath + ` cdroot root=live:CDLABEL=%s rd.live.dir=/ rd.live.squashimg=rootfs.squashfs console=tty1 console=ttyS0 rd.cos.disable cos.setup=` + constants.ISOCloudInitPath + `
		echo Loading initrd...
		$initrd ($root)` + constants.ISOInitrdPath + `
	}                                                                               
																					
	if [ "${grub_platform}" = "efi" ]; then                                         
		hiddenentry "Text mode" --hotkey "t" {                                      
			set textmode=true                                                       
			terminal_output console                                                 
		}                                                                           
	fi`
)

func XorrisoBooloaderArgs(root, efiImg, firmware string) []string {
	switch firmware {
	case v1.EFI:
		args := []string{
			"-append_partition", "2", "0xef", efiImg,
			"-boot_image", "any", fmt.Sprintf("cat_path=%s", isoBootCatalog),
			"-boot_image", "any", "cat_hidden=on",
			"-boot_image", "any", "efi_path=--interval:appended_partition_2:all::",
			"-boot_image", "any", "platform_id=0xef",
			"-boot_image", "any", "appended_part_as=gpt",
			"-boot_image", "any", "partition_offset=16",
		}
		return args
	case v1.BIOS:
		args := []string{
			"-boot_image", "grub", fmt.Sprintf("bin_path=%s", isoBootFile),
			"-boot_image", "grub", fmt.Sprintf("grub2_mbr=%s/%s", root, isoHybridMBR),
			"-boot_image", "grub", "grub2_boot_info=on",
			"-boot_image", "any", "partition_offset=16",
			"-boot_image", "any", fmt.Sprintf("cat_path=%s", isoBootCatalog),
			"-boot_image", "any", "cat_hidden=on",
			"-boot_image", "any", "boot_info_table=on",
			"-boot_image", "any", "platform_id=0x00",
		}
		return args
	default:
		return []string{}
	}
}
  07070100000076000081A4000000000000000000000001645E367C000016AF000000000000000000000000000000000000002600000000elemental-cli-0.3.1/pkg/live/green.go /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package live

import (
	"fmt"
	"path/filepath"

	"strings"

	"github.com/rancher/elemental-cli/pkg/constants"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	"github.com/rancher/elemental-cli/pkg/utils"
)

type GreenLiveBootLoader struct {
	buildCfg *v1.BuildConfig
	spec     *v1.LiveISO
}

func NewGreenLiveBootLoader(cfg *v1.BuildConfig, spec *v1.LiveISO) *GreenLiveBootLoader {
	return &GreenLiveBootLoader{buildCfg: cfg, spec: spec}
}

func (g *GreenLiveBootLoader) PrepareEFI(rootDir, uefiDir string) error {
	const (
		grubEfiImageX86   = "/usr/share/grub2/x86_64-efi/grub.efi"
		grubEfiImageArm64 = "/usr/share/grub2/arm64-efi/grub.efi"
		shimBasePathX86   = "/usr/share/efi/x86_64"
		shimBasePathArm64 = "/usr/share/efi/aarch64"
		shimImg           = "shim.efi"
		mokManager        = "MokManager.efi"
	)

	err := utils.MkdirAll(g.buildCfg.Fs, filepath.Join(uefiDir, efiBootPath), constants.DirPerm)
	if err != nil {
		return err
	}

	// _, arch, _, err := v1.ParsePlatform(g.buildCfg.Platform)
	// if err != nil {
	// 	return err
	// }

	switch g.buildCfg.Platform.Arch {
	case constants.ArchAmd64, constants.Archx86:
		err = g.copyEfiFiles(
			uefiDir,
			filepath.Join(rootDir, shimBasePathX86, shimImg),
			filepath.Join(rootDir, shimBasePathX86, mokManager),
			filepath.Join(rootDir, grubEfiImageX86),
			efiImgX86,
		)
	case constants.ArchArm64:
		err = g.copyEfiFiles(
			uefiDir,
			filepath.Join(rootDir, shimBasePathArm64, shimImg),
			filepath.Join(rootDir, shimBasePathArm64, mokManager),
			filepath.Join(rootDir, grubEfiImageArm64),
			efiImgArm64,
		)
	default:
		err = fmt.Errorf("Not supported architecture: %v", g.buildCfg.Platform.Arch)
	}
	if err != nil {
		return err
	}

	return g.buildCfg.Fs.WriteFile(filepath.Join(uefiDir, efiBootPath, grubCfg), []byte(grubEfiCfg), constants.FilePerm)
}

func (g *GreenLiveBootLoader) copyEfiFiles(uefiDir, shimImg, mokManager, grubImg, efiImg string) error {
	err := utils.CopyFile(g.buildCfg.Fs, shimImg, filepath.Join(uefiDir, efiBootPath, efiImg))
	if err != nil {
		return err
	}
	err = utils.CopyFile(g.buildCfg.Fs, grubImg, filepath.Join(uefiDir, efiBootPath))
	if err != nil {
		return err
	}
	return utils.CopyFile(g.buildCfg.Fs, mokManager, filepath.Join(uefiDir, efiBootPath))
}

func (g *GreenLiveBootLoader) PrepareISO(rootDir, imageDir string) error {
	const (
		grubBootHybridImg = "/usr/share/grub2/i386-pc/boot_hybrid.img"
		syslinuxFiles     = "/usr/share/syslinux/isolinux.bin " +
			"/usr/share/syslinux/menu.c32 " +
			"/usr/share/syslinux/chain.c32 " +
			"/usr/share/syslinux/mboot.c32"
	)

	err := utils.MkdirAll(g.buildCfg.Fs, filepath.Join(imageDir, grubPrefixDir), constants.DirPerm)
	if err != nil {
		return err
	}

	if g.spec.Firmware == v1.BIOS {
		// Create eltorito image
		eltorito, err := g.BuildEltoritoImg(rootDir)
		if err != nil {
			return err
		}

		// Create loaders folder
		loaderDir := filepath.Join(imageDir, isoLoaderPath)
		err = utils.MkdirAll(g.buildCfg.Fs, loaderDir, constants.DirPerm)
		if err != nil {
			return err
		}
		// Inlude loaders in expected paths
		loaderFiles := []string{eltorito, grubBootHybridImg}
		loaderFiles = append(loaderFiles, strings.Split(syslinuxFiles, " ")...)
		for _, f := range loaderFiles {
			err = utils.CopyFile(
				g.buildCfg.Fs,
				filepath.Join(rootDir, f),
				filepath.Join(imageDir, isoLoaderPath),
			)
			if err != nil {
				return err
			}
		}
	}

	// Write grub.cfg file
	err = g.buildCfg.Fs.WriteFile(
		filepath.Join(imageDir, grubPrefixDir, grubCfg),
		[]byte(fmt.Sprintf(grubCfgTemplate, g.spec.GrubEntry, g.spec.Label)),
		constants.FilePerm,
	)
	if err != nil {
		return err
	}

	if g.spec.Firmware == v1.EFI {
		// Include EFI contents in iso root too
		return g.PrepareEFI(rootDir, imageDir)
	}

	return nil
}

func (g *GreenLiveBootLoader) BuildEltoritoImg(rootDir string) (string, error) {
	const (
		grubBiosTarget  = "i386-pc"
		grubI386BinDir  = "/usr/share/grub2/i386-pc"
		grubBiosImg     = grubI386BinDir + "/core.img"
		grubBiosCDBoot  = grubI386BinDir + "/cdboot.img"
		grubEltoritoImg = grubI386BinDir + "/eltorito.img"
		//TODO this list could be optimized
		grubModules = "ext2 iso9660 linux echo configfile search_label search_fs_file search search_fs_uuid " +
			"ls normal gzio png fat gettext font minicmd gfxterm gfxmenu all_video xfs btrfs lvm luks " +
			"gcry_rijndael gcry_sha256 gcry_sha512 crypto cryptodisk test true loadenv part_gpt " +
			"part_msdos biosdisk vga vbe chain boot"
	)
	var args []string
	args = append(args, "-O", grubBiosTarget)
	args = append(args, "-o", grubBiosImg)
	args = append(args, "-p", grubPrefixDir)
	args = append(args, "-d", grubI386BinDir)
	args = append(args, strings.Split(grubModules, " ")...)

	chRoot := utils.NewChroot(rootDir, &g.buildCfg.Config)
	out, err := chRoot.Run("grub2-mkimage", args...)
	if err != nil {
		g.buildCfg.Logger.Errorf("grub2-mkimage failed: %s", string(out))
		g.buildCfg.Logger.Errorf("Error: %v", err)
		return "", err
	}

	concatFiles := func() error {
		return utils.ConcatFiles(
			g.buildCfg.Fs, []string{grubBiosCDBoot, grubBiosImg},
			grubEltoritoImg,
		)
	}
	err = chRoot.RunCallback(concatFiles)
	if err != nil {
		return "", err
	}
	return grubEltoritoImg, nil
}
 07070100000077000081A4000000000000000000000001645E367C00002B4D000000000000000000000000000000000000002B00000000elemental-cli-0.3.1/pkg/live/green_test.go    /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package live_test

import (
	"bytes"
	"fmt"
	"path/filepath"

	"github.com/sirupsen/logrus"
	"github.com/twpayne/go-vfs"
	"github.com/twpayne/go-vfs/vfst"

	"github.com/rancher/elemental-cli/pkg/config"
	"github.com/rancher/elemental-cli/pkg/constants"
	"github.com/rancher/elemental-cli/pkg/live"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	"github.com/rancher/elemental-cli/pkg/utils"
	v1mock "github.com/rancher/elemental-cli/tests/mocks"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

var _ = Describe("GreenLiveBootloader", Label("green", "live"), func() {
	var cfg *v1.BuildConfig
	var runner *v1mock.FakeRunner
	var fs vfs.FS
	var logger v1.Logger
	var mounter *v1mock.ErrorMounter
	var syscall *v1mock.FakeSyscall
	var client *v1mock.FakeHTTPClient
	var cloudInit *v1mock.FakeCloudInitRunner
	var cleanup func()
	var memLog *bytes.Buffer
	var iso *v1.LiveISO
	var rootDir, imageDir, uefiDir string
	var i386BinChrootPath string
	BeforeEach(func() {
		var err error
		runner = v1mock.NewFakeRunner()
		syscall = &v1mock.FakeSyscall{}
		mounter = v1mock.NewErrorMounter()
		client = &v1mock.FakeHTTPClient{}
		memLog = &bytes.Buffer{}
		logger = v1.NewBufferLogger(memLog)
		logger.SetLevel(logrus.DebugLevel)
		cloudInit = &v1mock.FakeCloudInitRunner{}
		fs, cleanup, _ = vfst.NewTestFS(map[string]interface{}{})
		cfg = config.NewBuildConfig(
			config.WithFs(fs),
			config.WithRunner(runner),
			config.WithLogger(logger),
			config.WithMounter(mounter),
			config.WithSyscall(syscall),
			config.WithClient(client),
			config.WithCloudInitRunner(cloudInit),
		)
		iso = config.NewISO()

		rootDir, err = utils.TempDir(fs, "", "rootDir")
		Expect(err).ShouldNot(HaveOccurred())
		imageDir, err = utils.TempDir(fs, "", "imageDir")
		Expect(err).ShouldNot(HaveOccurred())
		uefiDir, err = utils.TempDir(fs, "", "uefiDir")
		Expect(err).ShouldNot(HaveOccurred())

		// Create mock EFI files
		err = utils.MkdirAll(fs, filepath.Join(rootDir, "/usr/share/grub2/x86_64-efi"), constants.DirPerm)
		Expect(err).ShouldNot(HaveOccurred())
		err = fs.WriteFile(
			filepath.Join(rootDir, "/usr/share/grub2/x86_64-efi/grub.efi"),
			[]byte("x86_64_efi"), constants.FilePerm,
		)
		Expect(err).ShouldNot(HaveOccurred())

		err = utils.MkdirAll(fs, filepath.Join(rootDir, "/usr/share/efi/x86_64"), constants.DirPerm)
		Expect(err).ShouldNot(HaveOccurred())
		err = fs.WriteFile(
			filepath.Join(rootDir, "/usr/share/efi/x86_64/shim.efi"),
			[]byte("shim"), constants.FilePerm,
		)
		Expect(err).ShouldNot(HaveOccurred())
		err = fs.WriteFile(
			filepath.Join(rootDir, "/usr/share/efi/x86_64/MokManager.efi"),
			[]byte("mokmanager"), constants.FilePerm,
		)
		Expect(err).ShouldNot(HaveOccurred())

		// Create mock BIOS files
		i386BinChrootPath = "/usr/share/grub2/i386-pc"
		err = utils.MkdirAll(fs, i386BinChrootPath, constants.DirPerm)
		Expect(err).ShouldNot(HaveOccurred())

		err = fs.WriteFile(filepath.Join(i386BinChrootPath, "cdboot.img"), []byte("cdboot.img"), constants.FilePerm)
		Expect(err).ShouldNot(HaveOccurred())

		i386BinPath := filepath.Join(rootDir, i386BinChrootPath)
		err = utils.MkdirAll(fs, i386BinPath, constants.DirPerm)
		Expect(err).ShouldNot(HaveOccurred())

		err = fs.WriteFile(filepath.Join(i386BinPath, "eltorito.img"), []byte("eltorito"), constants.FilePerm)
		Expect(err).ShouldNot(HaveOccurred())
		err = fs.WriteFile(filepath.Join(i386BinPath, "boot_hybrid.img"), []byte("boot_hybrid"), constants.FilePerm)
		Expect(err).ShouldNot(HaveOccurred())

		syslinuxPath := filepath.Join(rootDir, "/usr/share/syslinux")
		err = utils.MkdirAll(fs, syslinuxPath, constants.DirPerm)
		Expect(err).ShouldNot(HaveOccurred())

		err = fs.WriteFile(filepath.Join(syslinuxPath, "isolinux.bin"), []byte("isolinux"), constants.FilePerm)
		Expect(err).ShouldNot(HaveOccurred())
		err = fs.WriteFile(filepath.Join(syslinuxPath, "menu.c32"), []byte("menu"), constants.FilePerm)
		Expect(err).ShouldNot(HaveOccurred())
		err = fs.WriteFile(filepath.Join(syslinuxPath, "chain.c32"), []byte("chain"), constants.FilePerm)
		Expect(err).ShouldNot(HaveOccurred())
		err = fs.WriteFile(filepath.Join(syslinuxPath, "mboot.c32"), []byte("mboot"), constants.FilePerm)
		Expect(err).ShouldNot(HaveOccurred())
	})
	AfterEach(func() {
		cleanup()
	})
	It("Creates eltorito image", func() {
		runner.SideEffect = func(cmd string, args ...string) ([]byte, error) {
			switch cmd {
			case "grub2-mkimage":
				err := fs.WriteFile(filepath.Join(i386BinChrootPath, "core.img"), []byte("core.img"), constants.FilePerm)
				return []byte{}, err
			default:
				return []byte{}, nil
			}
		}
		green := live.NewGreenLiveBootLoader(cfg, iso)
		eltorito, err := green.BuildEltoritoImg(rootDir)
		Expect(err).ShouldNot(HaveOccurred())
		Expect(eltorito).To(Equal("/usr/share/grub2/i386-pc/eltorito.img"))
		out, err := fs.ReadFile(eltorito)
		Expect(err).ShouldNot(HaveOccurred())
		Expect(string(out)).To(Equal("cdboot.imgcore.img"))
	})
	It("Fails creating eltorito image, grub2-mkimage failure", func() {
		runner.SideEffect = func(cmd string, args ...string) ([]byte, error) {
			switch cmd {
			case "grub2-mkimage":
				return []byte{}, fmt.Errorf("failed creating core image")
			default:
				return []byte{}, nil
			}
		}
		green := live.NewGreenLiveBootLoader(cfg, iso)
		_, err := green.BuildEltoritoImg(rootDir)
		Expect(err).Should(HaveOccurred())
	})
	It("Fails creating eltorito image, concatenating files failure", func() {
		// fake runner does not create a fake core.img
		green := live.NewGreenLiveBootLoader(cfg, iso)
		_, err := green.BuildEltoritoImg(rootDir)
		Expect(err).Should(HaveOccurred())
	})
	It("Copies the EFI image binaries for x86_64", func() {
		green := live.NewGreenLiveBootLoader(cfg, iso)
		err := green.PrepareEFI(rootDir, uefiDir)
		Expect(err).ShouldNot(HaveOccurred())
		exists, _ := utils.Exists(fs, filepath.Join(uefiDir, "EFI/BOOT/grub.cfg"))
		Expect(exists).To(BeTrue())
	})
	It("Fails to copy the EFI image binaries if there is no shim", func() {
		// Missing shim image
		err := fs.RemoveAll(filepath.Join(rootDir, "/usr/share/efi/x86_64"))
		Expect(err).ShouldNot(HaveOccurred())

		green := live.NewGreenLiveBootLoader(cfg, iso)
		err = green.PrepareEFI(rootDir, uefiDir)
		Expect(err).Should(HaveOccurred())
	})
	It("Fails to copy the EFI image binaries if there is no grub", func() {
		// Missing grub image
		err := fs.RemoveAll(filepath.Join(rootDir, "/usr/share/grub2"))
		Expect(err).ShouldNot(HaveOccurred())

		green := live.NewGreenLiveBootLoader(cfg, iso)
		err = green.PrepareEFI(rootDir, uefiDir)
		Expect(err).Should(HaveOccurred())
	})
	It("Fails to copy the EFI image binaries for unsupported arch", func() {
		cfg.Platform = &v1.Platform{Arch: "unknown"}

		green := live.NewGreenLiveBootLoader(cfg, iso)
		err := green.PrepareEFI(rootDir, uefiDir)
		Expect(err).Should(HaveOccurred())
	})
	It("Copies the EFI image binaries for arm64", func() {
		platform, err := v1.NewPlatformFromArch(constants.ArchArm64)
		Expect(err).ShouldNot(HaveOccurred())
		cfg.Platform = platform
		err = utils.MkdirAll(fs, filepath.Join(rootDir, "/usr/share/grub2/arm64-efi"), constants.DirPerm)
		Expect(err).ShouldNot(HaveOccurred())
		err = fs.WriteFile(
			filepath.Join(rootDir, "/usr/share/grub2/arm64-efi/grub.efi"),
			[]byte("arm64-efi"), constants.FilePerm,
		)
		Expect(err).ShouldNot(HaveOccurred())

		err = utils.MkdirAll(fs, filepath.Join(rootDir, "/usr/share/efi/aarch64"), constants.DirPerm)
		Expect(err).ShouldNot(HaveOccurred())
		err = fs.WriteFile(
			filepath.Join(rootDir, "/usr/share/efi/aarch64/shim.efi"),
			[]byte("shim"), constants.FilePerm,
		)
		Expect(err).ShouldNot(HaveOccurred())
		err = fs.WriteFile(
			filepath.Join(rootDir, "/usr/share/efi/aarch64/MokManager.efi"),
			[]byte("mokmanager"), constants.FilePerm,
		)
		Expect(err).ShouldNot(HaveOccurred())

		green := live.NewGreenLiveBootLoader(cfg, iso)
		err = green.PrepareEFI(rootDir, uefiDir)
		Expect(err).ShouldNot(HaveOccurred())
		exists, _ := utils.Exists(fs, filepath.Join(uefiDir, "EFI/BOOT/grub.cfg"))
		Expect(exists).To(BeTrue())
	})
	It("Prepares ISO root with BIOS bootloader files", func() {
		runner.SideEffect = func(cmd string, args ...string) ([]byte, error) {
			switch cmd {
			case "grub2-mkimage":
				err := fs.WriteFile(filepath.Join(i386BinChrootPath, "core.img"), []byte("core.img"), constants.FilePerm)
				return []byte{}, err
			default:
				return []byte{}, nil
			}
		}
		iso.Firmware = v1.BIOS
		green := live.NewGreenLiveBootLoader(cfg, iso)
		err := green.PrepareISO(rootDir, imageDir)
		Expect(err).ShouldNot(HaveOccurred())

		exists, _ := utils.Exists(fs, filepath.Join(imageDir, "EFI/BOOT"))
		Expect(exists).To(BeFalse())
		exists, _ = utils.Exists(fs, filepath.Join(imageDir, "boot/grub2/grub.cfg"))
		Expect(exists).To(BeTrue())
	})
	It("Failes to prepare ISO root with BIOS bootloader building grub image", func() {
		runner.SideEffect = func(cmd string, args ...string) ([]byte, error) {
			switch cmd {
			case "grub2-mkimage":
				return []byte{}, fmt.Errorf("failed building image")
			default:
				return []byte{}, nil
			}
		}
		iso.Firmware = v1.BIOS
		green := live.NewGreenLiveBootLoader(cfg, iso)
		err := green.PrepareISO(rootDir, imageDir)
		Expect(err).Should(HaveOccurred())
	})
	It("Failes to prepare ISO root with BIOS bootloader files on missing syslinux loaders", func() {
		// Missing grub image
		err := fs.RemoveAll(filepath.Join(rootDir, "/usr/share/syslinux"))
		Expect(err).ShouldNot(HaveOccurred())

		runner.SideEffect = func(cmd string, args ...string) ([]byte, error) {
			switch cmd {
			case "grub2-mkimage":
				err := fs.WriteFile(filepath.Join(i386BinChrootPath, "core.img"), []byte("core.img"), constants.FilePerm)
				return []byte{}, err
			default:
				return []byte{}, nil
			}
		}
		iso.Firmware = v1.BIOS
		green := live.NewGreenLiveBootLoader(cfg, iso)
		err = green.PrepareISO(rootDir, imageDir)
		Expect(err).Should(HaveOccurred())
	})
	It("Prepares ISO root with EFI bootloader files", func() {
		green := live.NewGreenLiveBootLoader(cfg, iso)
		err := green.PrepareISO(rootDir, imageDir)
		Expect(err).ShouldNot(HaveOccurred())

		exists, _ := utils.Exists(fs, filepath.Join(imageDir, "EFI/BOOT/bootx64.efi"))
		Expect(exists).To(BeTrue())
		exists, _ = utils.Exists(fs, filepath.Join(imageDir, "EFI/BOOT/MokManager.efi"))
		Expect(exists).To(BeTrue())
		exists, _ = utils.Exists(fs, filepath.Join(imageDir, "boot/grub2/grub.cfg"))
		Expect(exists).To(BeTrue())
	})
})
   07070100000078000081A4000000000000000000000001645E367C000002F8000000000000000000000000000000000000003000000000elemental-cli-0.3.1/pkg/live/live_suite_test.go   /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package live_test

import (
	"testing"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

func TestTypes(t *testing.T) {
	RegisterFailHandler(Fail)
	RunSpecs(t, "live test suite")
}
07070100000079000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000002400000000elemental-cli-0.3.1/pkg/partitioner   0707010000007A000081A4000000000000000000000001645E367C000029AD000000000000000000000000000000000000002C00000000elemental-cli-0.3.1/pkg/partitioner/disk.go   /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package partitioner

import (
	"errors"
	"fmt"
	"os"
	"regexp"
	"strings"
	"time"

	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	"github.com/rancher/elemental-cli/pkg/utils"
	"github.com/twpayne/go-vfs"
)

const (
	partitionTries = 10
	// Parted warning substring for expanded disks without fixing GPT headers
	partedWarn = "Not all of the space available"
)

var unallocatedRegexp = regexp.MustCompile(partedWarn)

type Disk struct {
	device  string
	sectorS uint
	lastS   uint
	parts   []Partition
	label   string
	runner  v1.Runner
	fs      v1.FS
	logger  v1.Logger
}

func MiBToSectors(size uint, sectorSize uint) uint {
	return size * 1048576 / sectorSize
}

func NewDisk(device string, opts ...DiskOptions) *Disk {
	dev := &Disk{device: device}

	for _, opt := range opts {
		if err := opt(dev); err != nil {
			return nil
		}
	}

	if dev.runner == nil {
		dev.runner = &v1.RealRunner{}
	}

	if dev.fs == nil {
		dev.fs = vfs.OSFS
	}

	if dev.logger == nil {
		dev.logger = v1.NewLogger()
	}

	return dev
}

// FormatDevice formats a block device with the given parameters
func FormatDevice(runner v1.Runner, device string, fileSystem string, label string, opts ...string) error {
	mkfs := MkfsCall{fileSystem: fileSystem, label: label, customOpts: opts, dev: device, runner: runner}
	_, err := mkfs.Apply()
	return err
}

func (dev Disk) String() string {
	return dev.device
}

func (dev Disk) GetSectorSize() uint {
	return dev.sectorS
}

func (dev Disk) GetLastSector() uint {
	return dev.lastS
}

func (dev Disk) GetLabel() string {
	return dev.label
}

func (dev *Disk) Exists() bool {
	fi, err := dev.fs.Stat(dev.device)
	if err != nil {
		return false
	}
	// resolve symlink if any
	if fi.Mode()&os.ModeSymlink != 0 {
		d, err := dev.fs.Readlink(dev.device)
		if err != nil {
			return false
		}
		dev.device = d
	}
	return true
}

func (dev *Disk) Reload() error {
	pc := NewPartedCall(dev.String(), dev.runner)
	prnt, err := pc.Print()
	if err != nil {
		return err
	}

	// if the unallocated space warning is found it is assumed GPT headers
	// are not properly located to match disk size, so we use sgdisk
	// to expand the partition table to fully match disk size.
	// It is expected that in upcoming parted releases (>3.4) there will be
	// --fix flag to solve this issue transparently on the fly on any parted call.
	// However this option is not yet present in all major distros.
	if unallocatedRegexp.Match([]byte(prnt)) {
		// Parted has not a proper way to doing it in non interactive mode,
		// because of that we use sgdisk for that...
		_, err = dev.runner.Run("sgdisk", "-e", dev.device)
		if err != nil {
			return err
		}
		// Reload disk data with fixed headers
		prnt, err = pc.Print()
		if err != nil {
			return err
		}
	}

	sectorS, err := pc.GetSectorSize(prnt)
	if err != nil {
		return err
	}
	lastS, err := pc.GetLastSector(prnt)
	if err != nil {
		return err
	}
	label, err := pc.GetPartitionTableLabel(prnt)
	if err != nil {
		return err
	}
	partitions := pc.GetPartitions(prnt)
	dev.sectorS = sectorS
	dev.lastS = lastS
	dev.parts = partitions
	dev.label = label
	return nil
}

// Size is expressed in MiB here
func (dev *Disk) CheckDiskFreeSpaceMiB(minSpace uint) bool {
	freeS, err := dev.GetFreeSpace()
	if err != nil {
		dev.logger.Warnf("Could not calculate disk free space")
		return false
	}
	minSec := MiBToSectors(minSpace, dev.sectorS)

	return freeS >= minSec
}

func (dev *Disk) GetFreeSpace() (uint, error) {
	//Check we have loaded partition table data
	if dev.sectorS == 0 {
		err := dev.Reload()
		if err != nil {
			dev.logger.Errorf("Failed analyzing disk: %v\n", err)
			return 0, err
		}
	}

	return dev.computeFreeSpace(), nil
}

func (dev Disk) computeFreeSpace() uint {
	if len(dev.parts) > 0 {
		lastPart := dev.parts[len(dev.parts)-1]
		return dev.lastS - (lastPart.StartS + lastPart.SizeS - 1)
	}
	// First partition starts at a 1MiB offset
	return dev.lastS - (1*1024*1024/dev.sectorS - 1)
}

func (dev Disk) computeFreeSpaceWithoutLast() uint {
	if len(dev.parts) > 1 {
		part := dev.parts[len(dev.parts)-2]
		return dev.lastS - (part.StartS + part.SizeS - 1)
	}
	// Assume first partitions is alined to 1MiB
	return dev.lastS - (1024*1024/dev.sectorS - 1)
}

func (dev *Disk) NewPartitionTable(label string) (string, error) {
	match, _ := regexp.MatchString("msdos|gpt", label)
	if !match {
		return "", errors.New("Invalid partition table type, only msdos and gpt are supported")
	}
	pc := NewPartedCall(dev.String(), dev.runner)
	pc.SetPartitionTableLabel(label)
	pc.WipeTable(true)
	out, err := pc.WriteChanges()
	if err != nil {
		return out, err
	}
	err = dev.Reload()
	if err != nil {
		dev.logger.Errorf("Failed analyzing disk: %v\n", err)
		return "", err
	}
	return out, nil
}

// AddPartition adds a partition. Size is expressed in MiB here
// Size is expressed in MiB here
func (dev *Disk) AddPartition(size uint, fileSystem string, pLabel string, flags ...string) (int, error) {
	pc := NewPartedCall(dev.String(), dev.runner)

	//Check we have loaded partition table data
	if dev.sectorS == 0 {
		err := dev.Reload()
		if err != nil {
			dev.logger.Errorf("Failed analyzing disk: %v\n", err)
			return 0, err
		}
	}

	pc.SetPartitionTableLabel(dev.label)

	var partNum int
	var startS uint
	if len(dev.parts) > 0 {
		lastP := len(dev.parts) - 1
		partNum = dev.parts[lastP].Number
		startS = dev.parts[lastP].StartS + dev.parts[lastP].SizeS
	} else {
		//First partition is aligned at 1MiB
		startS = 1024 * 1024 / dev.sectorS
	}

	size = MiBToSectors(size, dev.sectorS)
	freeS := dev.computeFreeSpace()
	if size > freeS {
		return 0, fmt.Errorf("not enough free space in disk. Required: %d sectors; Available %d sectors", size, freeS)
	}

	partNum++
	var part = Partition{
		Number:     partNum,
		StartS:     startS,
		SizeS:      size,
		PLabel:     pLabel,
		FileSystem: fileSystem,
	}

	pc.CreatePartition(&part)
	for _, flag := range flags {
		pc.SetPartitionFlag(partNum, flag, true)
	}

	out, err := pc.WriteChanges()
	dev.logger.Debugf("partitioner output: %s", out)
	if err != nil {
		dev.logger.Errorf("Failed creating partition: %v", err)
		return 0, err
	}

	// Reload new partition in dev
	err = dev.Reload()
	if err != nil {
		dev.logger.Errorf("Failed analyzing disk: %v\n", err)
		return 0, err
	}
	return partNum, nil
}

func (dev Disk) FormatPartition(partNum int, fileSystem string, label string) (string, error) {
	pDev, err := dev.FindPartitionDevice(partNum)
	if err != nil {
		return "", err
	}

	mkfs := MkfsCall{fileSystem: fileSystem, label: label, customOpts: []string{}, dev: pDev, runner: dev.runner}
	return mkfs.Apply()
}

func (dev Disk) WipeFsOnPartition(device string) error {
	_, err := dev.runner.Run("wipefs", "--all", device)
	return err
}

func (dev Disk) FindPartitionDevice(partNum int) (string, error) {
	re := regexp.MustCompile(`.*\d+$`)
	var device string

	if match := re.Match([]byte(dev.device)); match {
		device = fmt.Sprintf("%sp%d", dev.device, partNum)
	} else {
		device = fmt.Sprintf("%s%d", dev.device, partNum)
	}

	for tries := 0; tries <= partitionTries; tries++ {
		dev.logger.Debugf("Trying to find the partition device %d of device %s (try number %d)", partNum, dev, tries+1)
		_, _ = dev.runner.Run("udevadm", "settle")
		if exists, _ := utils.Exists(dev.fs, device); exists {
			return device, nil
		}
		time.Sleep(1 * time.Second)
	}
	return "", fmt.Errorf("could not find partition device '%s' for partition %d", device, partNum)
}

// ExpandLastPartition expands the latest partition in the disk. Size is expressed in MiB here
// Size is expressed in MiB here
func (dev *Disk) ExpandLastPartition(size uint) (string, error) {
	pc := NewPartedCall(dev.String(), dev.runner)

	//Check we have loaded partition table data
	if dev.sectorS == 0 {
		err := dev.Reload()
		if err != nil {
			dev.logger.Errorf("Failed analyzing disk: %v\n", err)
			return "", err
		}
	}

	pc.SetPartitionTableLabel(dev.label)

	if len(dev.parts) == 0 {
		return "", errors.New("There is no partition to expand")
	}

	part := dev.parts[len(dev.parts)-1]
	if size > 0 {
		size = MiBToSectors(size, dev.sectorS)
		part := dev.parts[len(dev.parts)-1]
		if size < part.SizeS {
			return "", errors.New("Layout plugin can only expand a partition, not shrink it")
		}
		freeS := dev.computeFreeSpaceWithoutLast()
		if size > freeS {
			return "", fmt.Errorf("not enough free space for to expand last partition up to %d sectors", size)
		}
	}
	part.SizeS = size
	pc.DeletePartition(part.Number)
	pc.CreatePartition(&part)
	out, err := pc.WriteChanges()
	if err != nil {
		return out, err
	}
	err = dev.Reload()
	if err != nil {
		return "", err
	}
	pDev, err := dev.FindPartitionDevice(part.Number)
	if err != nil {
		return "", err
	}
	return dev.expandFilesystem(pDev)
}

func (dev Disk) expandFilesystem(device string) (string, error) {
	var out []byte
	var err error

	fs, err := utils.GetPartitionFS(device)
	if err != nil {
		return fs, err
	}

	switch strings.TrimSpace(fs) {
	case "ext2", "ext3", "ext4":
		out, err = dev.runner.Run("e2fsck", "-fy", device)
		if err != nil {
			return string(out), err
		}
		out, err = dev.runner.Run("resize2fs", device)

		if err != nil {
			return string(out), err
		}
	case "xfs":
		// to grow an xfs fs it needs to be mounted :/
		tmpDir, err := utils.TempDir(dev.fs, "", "partitioner")
		defer func(fs v1.FS, path string) {
			_ = fs.RemoveAll(path)
		}(dev.fs, tmpDir)

		if err != nil {
			return string(out), err
		}
		out, err = dev.runner.Run("mount", "-t", "xfs", device, tmpDir)
		if err != nil {
			return string(out), err
		}
		_, err = dev.runner.Run("xfs_growfs", tmpDir)
		if err != nil {
			// If we error out, try to umount the dir to not leave it hanging
			out, err2 := dev.runner.Run("umount", tmpDir)
			if err2 != nil {
				return string(out), err2
			}
			return string(out), err
		}
		out, err = dev.runner.Run("umount", tmpDir)
		if err != nil {
			return string(out), err
		}
	default:
		return "", fmt.Errorf("could not find filesystem for %s, not resizing the filesystem", device)
	}

	return "", nil
}
   0707010000007B000081A4000000000000000000000001645E367C000007E3000000000000000000000000000000000000002C00000000elemental-cli-0.3.1/pkg/partitioner/mkfs.go   /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package partitioner

import (
	"fmt"
	"regexp"

	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
)

type MkfsCall struct {
	fileSystem string
	label      string
	customOpts []string
	dev        string
	runner     v1.Runner
}

func NewMkfsCall(dev string, fileSystem string, label string, runner v1.Runner, customOpts ...string) *MkfsCall {
	return &MkfsCall{dev: dev, fileSystem: fileSystem, label: label, runner: runner, customOpts: customOpts}
}

func (mkfs MkfsCall) buildOptions() ([]string, error) {
	opts := []string{}

	linuxFS, _ := regexp.MatchString("ext[2-4]|xfs", mkfs.fileSystem)
	fatFS, _ := regexp.MatchString("fat|vfat", mkfs.fileSystem)

	switch {
	case linuxFS:
		if mkfs.label != "" {
			opts = append(opts, "-L")
			opts = append(opts, mkfs.label)
		}
		if len(mkfs.customOpts) > 0 {
			opts = append(opts, mkfs.customOpts...)
		}
		opts = append(opts, mkfs.dev)
	case fatFS:
		if mkfs.label != "" {
			opts = append(opts, "-n")
			opts = append(opts, mkfs.label)
		}
		if len(mkfs.customOpts) > 0 {
			opts = append(opts, mkfs.customOpts...)
		}
		opts = append(opts, mkfs.dev)
	default:
		return []string{}, fmt.Errorf("unsupported filesystem: %s", mkfs.fileSystem)
	}
	return opts, nil
}

func (mkfs MkfsCall) Apply() (string, error) {
	opts, err := mkfs.buildOptions()
	if err != nil {
		return "", err
	}
	tool := fmt.Sprintf("mkfs.%s", mkfs.fileSystem)
	out, err := mkfs.runner.Run(tool, opts...)
	return string(out), err
}
 0707010000007C000081A4000000000000000000000001645E367C00000413000000000000000000000000000000000000002F00000000elemental-cli-0.3.1/pkg/partitioner/options.go    /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package partitioner

import (
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
)

type DiskOptions func(d *Disk) error

func WithFS(fs v1.FS) func(d *Disk) error {
	return func(d *Disk) error {
		d.fs = fs
		return nil
	}
}

func WithRunner(runner v1.Runner) func(d *Disk) error {
	return func(d *Disk) error {
		d.runner = runner
		return nil
	}
}

func WithLogger(logger v1.Logger) func(d *Disk) error {
	return func(d *Disk) error {
		d.logger = logger
		return nil
	}
}
 0707010000007D000081A4000000000000000000000001645E367C000017CA000000000000000000000000000000000000002E00000000elemental-cli-0.3.1/pkg/partitioner/parted.go /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package partitioner

import (
	"bufio"
	"errors"
	"fmt"
	"regexp"
	"strconv"
	"strings"

	"github.com/rancher/elemental-cli/pkg/constants"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
)

type PartedCall struct {
	dev       string
	wipe      bool
	parts     []*Partition
	deletions []int
	label     string
	runner    v1.Runner
	flags     []partFlag
}

type partFlag struct {
	flag   string
	active bool
	number int
}

// We only manage sizes in sectors unit for the Partition structre in parted wrapper
// FileSystem here is only used by parted to determine the partition ID or type
type Partition struct {
	Number     int
	StartS     uint
	SizeS      uint
	PLabel     string
	FileSystem string
}

func NewPartedCall(dev string, runner v1.Runner) *PartedCall {
	return &PartedCall{dev: dev, wipe: false, parts: []*Partition{}, deletions: []int{}, label: "", runner: runner, flags: []partFlag{}}
}

func (pc PartedCall) optionsBuilder() []string {
	opts := []string{}
	label := pc.label
	match, _ := regexp.MatchString(fmt.Sprintf("msdos|%s", constants.GPT), label)
	// Fallback to gpt if label is empty or invalid
	if !match {
		label = constants.GPT
	}

	if pc.wipe {
		opts = append(opts, "mklabel", label)
	}

	for _, partnum := range pc.deletions {
		opts = append(opts, "rm", fmt.Sprintf("%d", partnum))
	}

	isFat, _ := regexp.Compile("fat|vfat")
	for _, part := range pc.parts {
		var pLabel string
		if label == constants.GPT && part.PLabel != "" {
			pLabel = part.PLabel
		} else if label == constants.GPT {
			pLabel = fmt.Sprintf("part%d", part.Number)
		} else {
			pLabel = "primary"
		}

		opts = append(opts, "mkpart", pLabel)

		if isFat.MatchString(part.FileSystem) {
			opts = append(opts, "fat32")
		} else {
			opts = append(opts, part.FileSystem)
		}

		if part.SizeS == 0 {
			// Size set to zero means is interperted as all space available
			opts = append(opts, fmt.Sprintf("%d", part.StartS), "100%")
		} else {
			opts = append(opts, fmt.Sprintf("%d", part.StartS), fmt.Sprintf("%d", part.StartS+part.SizeS-1))
		}
	}

	for _, flag := range pc.flags {
		opts = append(opts, "set", fmt.Sprintf("%d", flag.number), flag.flag)
		if flag.active {
			opts = append(opts, "on")
		} else {
			opts = append(opts, "off")
		}
	}

	if len(opts) == 0 {
		return nil
	}

	return append([]string{"--script", "--machine", "--", pc.dev, "unit", "s"}, opts...)
}

func (pc *PartedCall) WriteChanges() (string, error) {
	opts := pc.optionsBuilder()
	if len(opts) == 0 {
		return "", nil
	}

	out, err := pc.runner.Run("parted", opts...)
	pc.wipe = false
	pc.parts = []*Partition{}
	pc.deletions = []int{}
	return string(out), err
}

func (pc *PartedCall) SetPartitionTableLabel(label string) {
	pc.label = label
}

func (pc *PartedCall) CreatePartition(p *Partition) {
	pc.parts = append(pc.parts, p)
}

func (pc *PartedCall) DeletePartition(num int) {
	pc.deletions = append(pc.deletions, num)
}

func (pc *PartedCall) SetPartitionFlag(num int, flag string, active bool) {
	pc.flags = append(pc.flags, partFlag{flag: flag, active: active, number: num})
}

func (pc *PartedCall) WipeTable(wipe bool) {
	pc.wipe = wipe
}

func (pc PartedCall) Print() (string, error) {
	out, err := pc.runner.Run("parted", "--script", "--machine", "--", pc.dev, "unit", "s", "print")
	return string(out), err
}

// Parses the output of a PartedCall.Print call
func (pc PartedCall) parseHeaderFields(printOut string, field int) (string, error) {
	re := regexp.MustCompile(`^(.*):(\d+)s:(.*):(\d+):(\d+):(.*):(.*):(.*);$`)

	scanner := bufio.NewScanner(strings.NewReader(strings.TrimSpace(printOut)))
	for scanner.Scan() {
		match := re.FindStringSubmatch(strings.TrimSpace(scanner.Text()))
		if match != nil {
			return match[field], nil
		}
	}
	return "", errors.New("failed parsing parted header data")
}

// Parses the output of a PartedCall.Print call
func (pc PartedCall) GetLastSector(printOut string) (uint, error) {
	field, err := pc.parseHeaderFields(printOut, 2)
	if err != nil {
		return 0, errors.New("Failed parsing last sector")
	}
	lastSec, err := strconv.ParseUint(field, 10, 0)
	return uint(lastSec), err
}

// Parses the output of a PartedCall.Print call
func (pc PartedCall) GetSectorSize(printOut string) (uint, error) {
	field, err := pc.parseHeaderFields(printOut, 4)
	if err != nil {
		return 0, errors.New("Failed parsing sector size")
	}
	secSize, err := strconv.ParseUint(field, 10, 0)
	return uint(secSize), err
}

// Parses the output of a PartedCall.Print call
func (pc PartedCall) GetPartitionTableLabel(printOut string) (string, error) {
	return pc.parseHeaderFields(printOut, 6)
}

// Parses the output of a GdiskCall.Print call
func (pc PartedCall) GetPartitions(printOut string) []Partition {
	re := regexp.MustCompile(`^(\d+):(\d+)s:(\d+)s:(\d+)s:(.*):(.*):(.*);$`)
	var start uint
	var end uint
	var size uint
	var pLabel string
	var partNum int
	var partitions []Partition

	scanner := bufio.NewScanner(strings.NewReader(strings.TrimSpace(printOut)))
	for scanner.Scan() {
		match := re.FindStringSubmatch(strings.TrimSpace(scanner.Text()))
		if match != nil {
			partNum, _ = strconv.Atoi(match[1])
			parsed, _ := strconv.ParseUint(match[2], 10, 0)
			start = uint(parsed)
			parsed, _ = strconv.ParseUint(match[3], 10, 0)
			end = uint(parsed)
			size = end - start + 1
			pLabel = match[6]

			partitions = append(partitions, Partition{
				Number:     partNum,
				StartS:     start,
				SizeS:      size,
				PLabel:     pLabel,
				FileSystem: "",
			})
		}
	}

	return partitions
}
  0707010000007E000081A4000000000000000000000001645E367C00003538000000000000000000000000000000000000003800000000elemental-cli-0.3.1/pkg/partitioner/partitioner_test.go   /*
Copyright © 2021 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package partitioner_test

import (
	"errors"
	"testing"

	"github.com/jaypipes/ghw/pkg/block"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/rancher/elemental-cli/pkg/constants"
	part "github.com/rancher/elemental-cli/pkg/partitioner"
	"github.com/rancher/elemental-cli/pkg/utils"
	mocks "github.com/rancher/elemental-cli/tests/mocks"
	"github.com/twpayne/go-vfs"
	"github.com/twpayne/go-vfs/vfst"
)

const printOutput = `BYT;
/dev/loop0:50593792s:loopback:512:512:msdos:Loopback device:;
1:2048s:98303s:96256s:ext4::type=83;
2:98304s:29394943s:29296640s:ext4::boot, type=83;
3:29394944s:45019135s:15624192s:ext4::type=83;
4:45019136s:50331647s:5312512s:ext4::type=83;`

func TestElementalSuite(t *testing.T) {
	RegisterFailHandler(Fail)
	RunSpecs(t, "Partitioner test suite")
}

var _ = Describe("Partitioner", Label("disk", "partition", "partitioner"), func() {
	var runner *mocks.FakeRunner
	BeforeEach(func() {
		runner = mocks.NewFakeRunner()
	})
	Describe("Parted tests", Label("parted"), func() {
		var pc *part.PartedCall
		BeforeEach(func() {
			pc = part.NewPartedCall("/dev/device", runner)
		})
		It("Write changes does nothing with empty setup", func() {
			pc := part.NewPartedCall("/dev/device", runner)
			_, err := pc.WriteChanges()
			Expect(err).To(BeNil())
		})
		It("Runs complex command", func() {
			cmds := [][]string{{
				"parted", "--script", "--machine", "--", "/dev/device",
				"unit", "s", "mklabel", "gpt", "mkpart", "p.efi", "fat32",
				"2048", "206847", "mkpart", "p.root", "ext4", "206848", "100%",
			}}
			part1 := part.Partition{
				Number: 0, StartS: 2048, SizeS: 204800,
				PLabel: "p.efi", FileSystem: "vfat",
			}
			pc.CreatePartition(&part1)
			part2 := part.Partition{
				Number: 0, StartS: 206848, SizeS: 0,
				PLabel: "p.root", FileSystem: "ext4",
			}
			pc.CreatePartition(&part2)
			pc.WipeTable(true)
			_, err := pc.WriteChanges()
			Expect(err).To(BeNil())
			Expect(runner.CmdsMatch(cmds)).To(BeNil())
		})
		It("Set a new partition label", func() {
			cmds := [][]string{{
				"parted", "--script", "--machine", "--", "/dev/device",
				"unit", "s", "mklabel", "msdos",
			}}
			pc.SetPartitionTableLabel("msdos")
			pc.WipeTable(true)
			_, err := pc.WriteChanges()
			Expect(err).To(BeNil())
			Expect(runner.CmdsMatch(cmds)).To(BeNil())
		})
		It("Creates a new partition", func() {
			cmds := [][]string{{
				"parted", "--script", "--machine", "--", "/dev/device",
				"unit", "s", "mkpart", "p.root", "ext4", "2048", "206847",
			}, {
				"parted", "--script", "--machine", "--", "/dev/device",
				"unit", "s", "mkpart", "p.root", "ext4", "2048", "100%",
			}}
			partition := part.Partition{
				Number: 0, StartS: 2048, SizeS: 204800,
				PLabel: "p.root", FileSystem: "ext4",
			}
			pc.CreatePartition(&partition)
			_, err := pc.WriteChanges()
			Expect(err).To(BeNil())
			partition = part.Partition{
				Number: 0, StartS: 2048, SizeS: 0,
				PLabel: "p.root", FileSystem: "ext4",
			}
			pc.CreatePartition(&partition)
			_, err = pc.WriteChanges()
			Expect(err).To(BeNil())
			Expect(runner.CmdsMatch(cmds)).To(BeNil())
		})
		It("Deletes a partition", func() {
			cmd := []string{
				"parted", "--script", "--machine", "--", "/dev/device",
				"unit", "s", "rm", "1", "rm", "2",
			}
			pc.DeletePartition(1)
			pc.DeletePartition(2)
			_, err := pc.WriteChanges()
			Expect(err).To(BeNil())
			Expect(runner.CmdsMatch([][]string{cmd})).To(BeNil())
		})
		It("Set a partition flag", func() {
			cmds := [][]string{{
				"parted", "--script", "--machine", "--", "/dev/device",
				"unit", "s", "set", "1", "flag", "on", "set", "2", "flag", "off",
			}}
			pc.SetPartitionFlag(1, "flag", true)
			pc.SetPartitionFlag(2, "flag", false)
			_, err := pc.WriteChanges()
			Expect(err).To(BeNil())
			Expect(runner.CmdsMatch(cmds)).To(BeNil())
		})
		It("Wipes partition table creating a new one", func() {
			cmd := []string{
				"parted", "--script", "--machine", "--", "/dev/device",
				"unit", "s", "mklabel", "gpt",
			}
			pc.WipeTable(true)
			_, err := pc.WriteChanges()
			Expect(err).To(BeNil())
			Expect(runner.CmdsMatch([][]string{cmd})).To(BeNil())
		})
		It("Prints partitin table info", func() {
			cmd := []string{
				"parted", "--script", "--machine", "--", "/dev/device",
				"unit", "s", "print",
			}
			_, err := pc.Print()
			Expect(err).To(BeNil())
			Expect(runner.CmdsMatch([][]string{cmd})).To(BeNil())
		})
		It("Gets last sector of the disk", func() {
			lastSec, _ := pc.GetLastSector(printOutput)
			Expect(lastSec).To(Equal(uint(50593792)))
			_, err := pc.GetLastSector("invalid parted print output")
			Expect(err).NotTo(BeNil())
		})
		It("Gets sector size of the disk", func() {
			secSize, _ := pc.GetSectorSize(printOutput)
			Expect(secSize).To(Equal(uint(512)))
			_, err := pc.GetSectorSize("invalid parted print output")
			Expect(err).NotTo(BeNil())
		})
		It("Gets partition table label", func() {
			label, _ := pc.GetPartitionTableLabel(printOutput)
			Expect(label).To(Equal("msdos"))
			_, err := pc.GetPartitionTableLabel("invalid parted print output")
			Expect(err).NotTo(BeNil())
		})
		It("Gets partitions info of the disk", func() {
			parts := pc.GetPartitions(printOutput)
			Expect(len(parts)).To(Equal(4))
			Expect(parts[1].StartS).To(Equal(uint(98304)))
		})
	})
	Describe("Mkfs tests", Label("mkfs", "filesystem"), func() {
		It("Successfully formats a partition with xfs", func() {
			mkfs := part.NewMkfsCall("/dev/device", "xfs", "OEM", runner)
			_, err := mkfs.Apply()
			Expect(err).To(BeNil())
			cmds := [][]string{{"mkfs.xfs", "-L", "OEM", "/dev/device"}}
			Expect(runner.CmdsMatch(cmds)).To(BeNil())
		})
		It("Successfully formats a partition with vfat", func() {
			mkfs := part.NewMkfsCall("/dev/device", "vfat", "EFI", runner)
			_, err := mkfs.Apply()
			Expect(err).To(BeNil())
			cmds := [][]string{{"mkfs.vfat", "-n", "EFI", "/dev/device"}}
			Expect(runner.CmdsMatch(cmds)).To(BeNil())
		})
		It("Fails for unsupported filesystem", func() {
			mkfs := part.NewMkfsCall("/dev/device", "btrfs", "OEM", runner)
			_, err := mkfs.Apply()
			Expect(err).NotTo(BeNil())
		})
	})
	Describe("Disk tests", Label("mkfs", "filesystem"), func() {
		var dev *part.Disk
		var cmds [][]string
		var printCmd []string
		var fs vfs.FS
		var cleanup func()

		BeforeEach(func() {
			fs, cleanup, _ = vfst.NewTestFS(nil)

			err := utils.MkdirAll(fs, "/dev", constants.DirPerm)
			Expect(err).To(BeNil())
			_, err = fs.Create("/dev/device")
			Expect(err).To(BeNil())

			dev = part.NewDisk("/dev/device", part.WithRunner(runner), part.WithFS(fs))
			printCmd = []string{
				"parted", "--script", "--machine", "--", "/dev/device",
				"unit", "s", "print",
			}
			cmds = [][]string{printCmd}
		})
		AfterEach(func() { cleanup() })
		It("Creates a default disk", func() {
			dev = part.NewDisk("/dev/device")
		})
		Describe("Load data without changes", func() {
			BeforeEach(func() {
				runner.ReturnValue = []byte(printOutput)
			})
			It("Loads disk layout data", func() {
				Expect(dev.Reload()).To(BeNil())
				Expect(dev.String()).To(Equal("/dev/device"))
				Expect(dev.GetSectorSize()).To(Equal(uint(512)))
				Expect(dev.GetLastSector()).To(Equal(uint(50593792)))
				Expect(runner.CmdsMatch(cmds)).To(BeNil())
			})
			It("Computes available free space", func() {
				Expect(dev.GetFreeSpace()).To(Equal(uint(262145)))
				Expect(runner.CmdsMatch(cmds)).To(BeNil())
			})
			It("Checks it has at least 128MB of free space", func() {
				Expect(dev.CheckDiskFreeSpaceMiB(128)).To(Equal(true))
				Expect(runner.CmdsMatch(cmds)).To(BeNil())
			})
			It("Checks it has less than 130MB of free space", func() {
				Expect(dev.CheckDiskFreeSpaceMiB(130)).To(Equal(false))
				Expect(runner.CmdsMatch(cmds)).To(BeNil())
			})
			It("Get partition label", func() {
				dev.Reload()
				Expect(dev.GetLabel()).To(Equal("msdos"))
			})
			It("It fixes GPT headers if the disk was expanded", func() {
				runner.ReturnValue = []byte("Warning: Not all of the space available to /dev/loop0...\n" + printOutput)
				Expect(dev.Reload()).To(BeNil())
				Expect(runner.MatchMilestones([][]string{
					{"parted", "--script", "--machine", "--", "/dev/device", "unit", "s", "print"},
					{"sgdisk", "-e", "/dev/device"},
					{"parted", "--script", "--machine", "--", "/dev/device", "unit", "s", "print"},
				})).To(BeNil())
			})
		})
		Describe("Modify disk", func() {
			It("Format an already existing partition", func() {
				err := part.FormatDevice(runner, "/dev/device1", "ext4", "MY_LABEL")
				Expect(err).To(BeNil())
				Expect(runner.CmdsMatch([][]string{
					{"mkfs.ext4", "-L", "MY_LABEL", "/dev/device1"},
				})).To(BeNil())
			})
			It("Fails to create an unsupported partition table label", func() {
				runner.ReturnValue = []byte(printOutput)
				_, err := dev.NewPartitionTable("invalidLabel")
				Expect(err).NotTo(BeNil())
			})
			It("Creates new partition table label", func() {
				cmds = [][]string{{
					"parted", "--script", "--machine", "--", "/dev/device",
					"unit", "s", "mklabel", "gpt",
				}, printCmd}
				runner.ReturnValue = []byte(printOutput)
				_, err := dev.NewPartitionTable("gpt")
				Expect(err).To(BeNil())
				Expect(runner.CmdsMatch(cmds)).To(BeNil())
			})
			It("Adds a new partition", func() {
				cmds = [][]string{printCmd, {
					"parted", "--script", "--machine", "--", "/dev/device",
					"unit", "s", "mkpart", "primary", "ext4", "50331648", "100%",
					"set", "5", "boot", "on",
				}, printCmd}
				runner.ReturnValue = []byte(printOutput)
				num, err := dev.AddPartition(0, "ext4", "ignored", "boot")
				Expect(err).To(BeNil())
				Expect(num).To(Equal(5))
				Expect(runner.CmdsMatch(cmds)).To(BeNil())
			})
			It("Fails to a new partition if there is not enough space available", func() {
				cmds = [][]string{printCmd}
				runner.ReturnValue = []byte(printOutput)
				_, err := dev.AddPartition(130, "ext4", "ignored")
				Expect(err).NotTo(BeNil())
				Expect(runner.CmdsMatch(cmds)).To(BeNil())
			})
			It("Finds device for a given partition number", func() {
				_, err := fs.Create("/dev/device4")
				Expect(err).To(BeNil())
				cmds = [][]string{{"udevadm", "settle"}}
				Expect(dev.FindPartitionDevice(4)).To(Equal("/dev/device4"))
				Expect(runner.CmdsMatch(cmds)).To(BeNil())
			})
			It("Does not find device for a given partition number", func() {
				dev := part.NewDisk("/dev/lp0")
				_, err := dev.FindPartitionDevice(4)
				Expect(err).NotTo(BeNil())
			})
			It("Formats a partition", func() {
				_, err := fs.Create("/dev/device4")
				Expect(err).To(BeNil())
				cmds = [][]string{
					{"udevadm", "settle"},
					{"mkfs.xfs", "-L", "OEM", "/dev/device4"},
				}
				_, err = dev.FormatPartition(4, "xfs", "OEM")
				Expect(err).To(BeNil())
				Expect(runner.CmdsMatch(cmds)).To(BeNil())
			})
			It("Clears filesystem header from a partition", func() {
				cmds = [][]string{
					{"wipefs", "--all", "/dev/device1"},
				}
				Expect(dev.WipeFsOnPartition("/dev/device1")).To(BeNil())
				Expect(runner.CmdsMatch(cmds)).To(BeNil())
			})
			It("Fails while removing file system header", func() {
				runner.ReturnError = errors.New("some error")
				Expect(dev.WipeFsOnPartition("/dev/device1")).NotTo(BeNil())
			})
			Describe("Expanding partitions", func() {
				BeforeEach(func() {
					cmds = [][]string{
						printCmd, {
							"parted", "--script", "--machine", "--", "/dev/device",
							"unit", "s", "rm", "4", "mkpart", "primary", "", "45019136", "100%",
						}, printCmd, {"udevadm", "settle"},
					}
					runFunc := func(cmd string, args ...string) ([]byte, error) {
						switch cmd {
						case "parted":
							return []byte(printOutput), nil
						default:
							return []byte{}, nil
						}
					}
					runner.SideEffect = runFunc
				})
				It("Expands ext4 partition", func() {
					_, err := fs.Create("/dev/device4")
					Expect(err).To(BeNil())
					extCmds := [][]string{
						{"e2fsck", "-fy", "/dev/device4"}, {"resize2fs", "/dev/device4"},
					}
					ghwTest := mocks.GhwMock{}
					disk := block.Disk{Name: "device", Partitions: []*block.Partition{
						{
							Name: "device4",
							Type: "ext4",
						},
					}}
					ghwTest.AddDisk(disk)
					ghwTest.CreateDevices()
					defer ghwTest.Clean()
					_, err = dev.ExpandLastPartition(0)
					Expect(err).To(BeNil())
					Expect(runner.CmdsMatch(append(cmds, extCmds...))).To(BeNil())
				})
				It("Expands xfs partition", func() {
					_, err := fs.Create("/dev/device4")
					Expect(err).To(BeNil())
					xfsCmds := [][]string{
						{"mount", "-t", "xfs"}, {"xfs_growfs"}, {"umount"},
					}
					ghwTest := mocks.GhwMock{}
					disk := block.Disk{Name: "device", Partitions: []*block.Partition{
						{
							Name: "device4",
							Type: "xfs",
						},
					}}
					ghwTest.AddDisk(disk)
					ghwTest.CreateDevices()
					defer ghwTest.Clean()
					_, err = dev.ExpandLastPartition(0)
					Expect(err).To(BeNil())
					Expect(runner.CmdsMatch(append(cmds, xfsCmds...))).To(BeNil())
				})
			})
		})
	})
})
0707010000007F000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000001E00000000elemental-cli-0.3.1/pkg/types 07070100000080000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000002100000000elemental-cli-0.3.1/pkg/types/v1  07070100000081000081A4000000000000000000000001645E367C000002D1000000000000000000000000000000000000003600000000elemental-cli-0.3.1/pkg/types/v1/cloud-init-runner.go /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1

import (
	"github.com/mudler/yip/pkg/schema"
)

type CloudInitRunner interface {
	Run(string, ...string) error
	SetModifier(schema.Modifier)
}
   07070100000082000081A4000000000000000000000001645E367C00000C09000000000000000000000000000000000000002B00000000elemental-cli-0.3.1/pkg/types/v1/common.go    /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1

import (
	"fmt"
	"net/url"
	"path/filepath"

	"gopkg.in/yaml.v3"

	"github.com/distribution/distribution/reference"
)

const (
	docker = "docker"
	oci    = "oci"
	file   = "file"
	dir    = "dir"
)

// ImageSource represents the source from where an image is created for easy identification
type ImageSource struct {
	source  string
	srcType string
}

func (i ImageSource) Value() string {
	return i.source
}

func (i ImageSource) IsImage() bool {
	return i.srcType == oci
}

func (i ImageSource) IsDir() bool {
	return i.srcType == dir
}

func (i ImageSource) IsFile() bool {
	return i.srcType == file
}

func (i ImageSource) IsEmpty() bool {
	if i.srcType == "" {
		return true
	}
	if i.source == "" {
		return true
	}
	return false
}

func (i ImageSource) String() string {
	if i.IsEmpty() {
		return ""
	}
	return fmt.Sprintf("%s://%s", i.srcType, i.source)
}

func (i ImageSource) MarshalYAML() (interface{}, error) {
	return i.String(), nil
}

func (i *ImageSource) UnmarshalYAML(value *yaml.Node) error {
	return i.updateFromURI(value.Value)
}

func (i *ImageSource) CustomUnmarshal(data interface{}) (bool, error) {
	src, ok := data.(string)
	if !ok {
		return false, fmt.Errorf("can't unmarshal %+v to an ImageSource type", data)
	}
	err := i.updateFromURI(src)
	return false, err
}

func (i *ImageSource) updateFromURI(uri string) error {
	u, err := url.Parse(uri)
	if err != nil {
		return err
	}
	scheme := u.Scheme
	value := u.Opaque
	if value == "" {
		value = filepath.Join(u.Host, u.Path)
	}
	switch scheme {
	case oci, docker:
		return i.parseImageReference(value)
	case dir:
		i.srcType = dir
		i.source = value
	case file:
		i.srcType = file
		i.source = value
	default:
		return i.parseImageReference(uri)
	}
	return nil
}

func (i *ImageSource) parseImageReference(ref string) error {
	n, err := reference.ParseNormalizedNamed(ref)
	if err != nil {
		return fmt.Errorf("invalid image reference %s", ref)
	} else if reference.IsNameOnly(n) {
		ref += ":latest"
	}
	i.srcType = oci
	i.source = ref
	return nil
}

func NewSrcFromURI(uri string) (*ImageSource, error) {
	src := ImageSource{}
	err := src.updateFromURI(uri)
	return &src, err
}

func NewEmptySrc() *ImageSource {
	return &ImageSource{}
}

func NewDockerSrc(src string) *ImageSource {
	return &ImageSource{source: src, srcType: oci}
}

func NewFileSrc(src string) *ImageSource {
	return &ImageSource{source: src, srcType: file}
}

func NewDirSrc(src string) *ImageSource {
	return &ImageSource{source: src, srcType: dir}
}
   07070100000083000081A4000000000000000000000001645E367C0000108E000000000000000000000000000000000000003000000000elemental-cli-0.3.1/pkg/types/v1/common_test.go   /*
Copyright © 2021 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1_test

import (
	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"

	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
)

var _ = Describe("Types", Label("types", "common"), func() {
	Describe("Source", func() {
		It("initiates each type as expected", func() {
			o := &v1.ImageSource{}
			Expect(o.Value()).To(Equal(""))
			Expect(o.IsDir()).To(BeFalse())
			Expect(o.IsImage()).To(BeFalse())
			Expect(o.IsFile()).To(BeFalse())
			o = v1.NewDirSrc("dir")
			Expect(o.IsDir()).To(BeTrue())
			o = v1.NewFileSrc("file")
			Expect(o.IsFile()).To(BeTrue())
			o = v1.NewDockerSrc("image")
			Expect(o.IsImage()).To(BeTrue())
			o = v1.NewEmptySrc()
			Expect(o.IsEmpty()).To(BeTrue())
			o, err := v1.NewSrcFromURI("registry.company.org/image")
			Expect(o.IsImage()).To(BeTrue())
			Expect(err).ShouldNot(HaveOccurred())
			Expect(o.Value()).To(Equal("registry.company.org/image:latest"))
			o, err = v1.NewSrcFromURI("oci://registry.company.org/image:tag")
			Expect(o.IsImage()).To(BeTrue())
			Expect(err).ShouldNot(HaveOccurred())
			Expect(o.Value()).To(Equal("registry.company.org/image:tag"))
		})
		It("unmarshals each type as expected", func() {
			o := v1.NewEmptySrc()
			_, err := o.CustomUnmarshal("docker://some/image")
			Expect(err).ShouldNot(HaveOccurred())
			Expect(o.IsImage()).To(BeTrue())
			_, err = o.CustomUnmarshal("dir:///some/absolute/path")
			Expect(err).ShouldNot(HaveOccurred())
			Expect(o.IsDir()).To(BeTrue())
			Expect(o.Value() == "/some/absolute/path").To(BeTrue())
			_, err = o.CustomUnmarshal("file://some/relative/path")
			Expect(err).ShouldNot(HaveOccurred())
			Expect(o.IsFile()).To(BeTrue())
			Expect(o.Value() == "some/relative/path").To(BeTrue())

			// Opaque URI
			_, err = o.CustomUnmarshal("docker:some/image")
			Expect(err).ShouldNot(HaveOccurred())
			Expect(o.IsImage()).To(BeTrue())

			// No scheme is parsed as an image reference and
			// defaults to latest tag if none
			_, err = o.CustomUnmarshal("registry.company.org/my/image")
			Expect(err).ShouldNot(HaveOccurred())
			Expect(o.IsImage()).To(BeTrue())
			Expect(o.Value()).To(Equal("registry.company.org/my/image:latest"))

			_, err = o.CustomUnmarshal("registry.company.org/my/image:tag")
			Expect(err).ShouldNot(HaveOccurred())
			Expect(o.IsImage()).To(BeTrue())
			Expect(o.Value()).To(Equal("registry.company.org/my/image:tag"))
		})
		It("convertion to string URI works are expected", func() {
			o := v1.NewDirSrc("/some/dir")
			Expect(o.IsDir()).To(BeTrue())
			Expect(o.String()).To(Equal("dir:///some/dir"))
			o = v1.NewFileSrc("filename")
			Expect(o.IsFile()).To(BeTrue())
			Expect(o.String()).To(Equal("file://filename"))
			o = v1.NewDockerSrc("container/image")
			Expect(o.IsImage()).To(BeTrue())
			Expect(o.String()).To(Equal("oci://container/image"))
			o = v1.NewEmptySrc()
			Expect(o.IsEmpty()).To(BeTrue())
			Expect(o.String()).To(Equal(""))
			o, err := v1.NewSrcFromURI("registry.company.org/image")
			Expect(o.IsImage()).To(BeTrue())
			Expect(err).ShouldNot(HaveOccurred())
			Expect(o.String()).To(Equal("oci://registry.company.org/image:latest"))
		})
		It("fails to unmarshal non string types", func() {
			o := v1.NewEmptySrc()
			_, err := o.CustomUnmarshal(map[string]string{})
			Expect(err).Should(HaveOccurred())
		})
		It("fails to unmarshal unknown scheme and invalid image reference", func() {
			o := v1.NewEmptySrc()
			_, err := o.CustomUnmarshal("scheme://some.uri.org")
			Expect(err).Should(HaveOccurred())
		})
		It("fails to unmarshal invalid uri", func() {
			o := v1.NewEmptySrc()
			_, err := o.CustomUnmarshal("jp#afs://insanity")
			Expect(err).Should(HaveOccurred())
		})
	})

})
  07070100000084000081A4000000000000000000000001645E367C000053FA000000000000000000000000000000000000002B00000000elemental-cli-0.3.1/pkg/types/v1/config.go    /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1

import (
	"fmt"
	"path/filepath"
	"runtime"
	"sort"

	"gopkg.in/yaml.v3"
	"k8s.io/mount-utils"

	"github.com/rancher/elemental-cli/pkg/constants"
)

const (
	GPT   = "gpt"
	BIOS  = "bios"
	MSDOS = "msdos"
	EFI   = "efi"
	esp   = "esp"
	bios  = "bios_grub"
	boot  = "boot"
)

// Config is the struct that includes basic and generic configuration of elemental binary runtime.
// It mostly includes the interfaces used around many methods in elemental code
type Config struct {
	Logger                    Logger
	Fs                        FS
	Mounter                   mount.Interface
	Runner                    Runner
	Syscall                   SyscallInterface
	CloudInitRunner           CloudInitRunner
	ImageExtractor            ImageExtractor
	Client                    HTTPClient
	Platform                  *Platform `yaml:"platform,omitempty" mapstructure:"platform"`
	Cosign                    bool      `yaml:"cosign,omitempty" mapstructure:"cosign"`
	Verify                    bool      `yaml:"verify,omitempty" mapstructure:"verify"`
	CosignPubKey              string    `yaml:"cosign-key,omitempty" mapstructure:"cosign-key"`
	LocalImage                bool      `yaml:"local,omitempty" mapstructure:"local"`
	Arch                      string    `yaml:"arch,omitempty" mapstructure:"arch"`
	SquashFsCompressionConfig []string  `yaml:"squash-compression,omitempty" mapstructure:"squash-compression"`
	SquashFsNoCompression     bool      `yaml:"squash-no-compression,omitempty" mapstructure:"squash-no-compression"`
	CloudInitPaths            []string  `yaml:"cloud-init-paths,omitempty" mapstructure:"cloud-init-paths"`
	Strict                    bool      `yaml:"strict,omitempty" mapstructure:"strict"`
}

// WriteInstallState writes the state.yaml file to the given state and recovery paths
func (c Config) WriteInstallState(i *InstallState, statePath, recoveryPath string) error {
	data, err := yaml.Marshal(i)
	if err != nil {
		return err
	}

	data = append([]byte("# Autogenerated file by elemental client, do not edit\n\n"), data...)

	err = c.Fs.WriteFile(statePath, data, constants.FilePerm)
	if err != nil {
		return err
	}

	err = c.Fs.WriteFile(recoveryPath, data, constants.FilePerm)
	if err != nil {
		return err
	}

	return nil
}

// LoadInstallState loads the state.yaml file and unmarshals it to an InstallState object
func (c Config) LoadInstallState() (*InstallState, error) {
	installState := &InstallState{}
	data, err := c.Fs.ReadFile(filepath.Join(constants.RunningStateDir, constants.InstallStateFile))
	if err != nil {
		return nil, err
	}
	err = yaml.Unmarshal(data, installState)
	if err != nil {
		return nil, err
	}
	return installState, nil
}

// Sanitize checks the consistency of the struct, returns error
// if unsolvable inconsistencies are found
func (c *Config) Sanitize() error {
	// If no squashcompression is set, zero the compression parameters
	// By default on NewConfig the SquashFsCompressionConfig is set to the default values, and then override
	// on config unmarshall.
	if c.SquashFsNoCompression {
		c.SquashFsCompressionConfig = []string{}
	}

	if c.Arch != "" {
		p, err := NewPlatformFromArch(c.Arch)
		if err != nil {
			return err
		}
		c.Platform = p
	}

	if c.Platform == nil {
		p, err := NewPlatformFromArch(runtime.GOARCH)
		if err != nil {
			return err
		}
		c.Platform = p
	}

	return nil
}

type RunConfig struct {
	Reboot   bool `yaml:"reboot,omitempty" mapstructure:"reboot"`
	PowerOff bool `yaml:"poweroff,omitempty" mapstructure:"poweroff"`
	EjectCD  bool `yaml:"eject-cd,omitempty" mapstructure:"eject-cd"`

	// 'inline' and 'squash' labels ensure config fields
	// are embedded from a yaml and map PoV
	Config `yaml:",inline" mapstructure:",squash"`
}

// Sanitize checks the consistency of the struct, returns error
// if unsolvable inconsistencies are found
func (r *RunConfig) Sanitize() error {
	// Always include default cloud-init paths
	r.CloudInitPaths = append(constants.GetCloudInitPaths(), r.CloudInitPaths...)
	return r.Config.Sanitize()
}

// InstallSpec struct represents all the installation action details
type InstallSpec struct {
	Target           string              `yaml:"target,omitempty" mapstructure:"target"`
	Firmware         string              `yaml:"firmware,omitempty" mapstructure:"firmware"`
	PartTable        string              `yaml:"part-table,omitempty" mapstructure:"part-table"`
	Partitions       ElementalPartitions `yaml:"partitions,omitempty" mapstructure:"partitions"`
	ExtraPartitions  PartitionList       `yaml:"extra-partitions,omitempty" mapstructure:"extra-partitions"`
	NoFormat         bool                `yaml:"no-format,omitempty" mapstructure:"no-format"`
	Force            bool                `yaml:"force,omitempty" mapstructure:"force"`
	CloudInit        []string            `yaml:"cloud-init,omitempty" mapstructure:"cloud-init"`
	Iso              string              `yaml:"iso,omitempty" mapstructure:"iso"`
	GrubDefEntry     string              `yaml:"grub-entry-name,omitempty" mapstructure:"grub-entry-name"`
	Active           Image               `yaml:"system,omitempty" mapstructure:"system"`
	Recovery         Image               `yaml:"recovery-system,omitempty" mapstructure:"recovery-system"`
	Passive          Image
	GrubConf         string
	DisableBootEntry bool `yaml:"disable-boot-entry,omitempty" mapstructure:"disable-boot-entry"`
}

// Sanitize checks the consistency of the struct, returns error
// if unsolvable inconsistencies are found
func (i *InstallSpec) Sanitize() error {
	if i.Active.Source.IsEmpty() && i.Iso == "" {
		return fmt.Errorf("undefined system source to install")
	}
	if i.Partitions.State == nil || i.Partitions.State.MountPoint == "" {
		return fmt.Errorf("undefined state partition")
	}

	// Unset labels for squashfs filesystem
	if i.Active.FS == constants.SquashFs {
		i.Active.Label = ""
		i.Passive.Label = ""
	}
	if i.Recovery.FS == constants.SquashFs {
		i.Recovery.Label = ""
	}

	// Check for extra partitions having set its size to 0
	extraPartsSizeCheck := 0
	for _, p := range i.ExtraPartitions {
		if p.Size == 0 {
			extraPartsSizeCheck++
		}
	}

	if extraPartsSizeCheck > 1 {
		return fmt.Errorf("more than one extra partition has its size set to 0. Only one partition can have its size set to 0 which means that it will take all the available disk space in the device")
	}
	// Check for both an extra partition and the persistent partition having size set to 0
	if extraPartsSizeCheck == 1 && i.Partitions.Persistent.Size == 0 {
		return fmt.Errorf("both persistent partition and extra partitions have size set to 0. Only one partition can have its size set to 0 which means that it will take all the available disk space in the device")
	}
	return i.Partitions.SetFirmwarePartitions(i.Firmware, i.PartTable)
}

// ResetSpec struct represents all the reset action details
type ResetSpec struct {
	FormatPersistent bool `yaml:"reset-persistent,omitempty" mapstructure:"reset-persistent"`
	FormatOEM        bool `yaml:"reset-oem,omitempty" mapstructure:"reset-oem"`

	GrubDefEntry     string `yaml:"grub-entry-name,omitempty" mapstructure:"grub-entry-name"`
	Active           Image  `yaml:"system,omitempty" mapstructure:"system"`
	Passive          Image
	Partitions       ElementalPartitions
	Target           string
	Efi              bool
	GrubConf         string
	State            *InstallState
	DisableBootEntry bool `yaml:"disable-boot-entry,omitempty" mapstructure:"disable-boot-entry"`
}

// Sanitize checks the consistency of the struct, returns error
// if unsolvable inconsistencies are found
func (r *ResetSpec) Sanitize() error {
	if r.Active.Source.IsEmpty() {
		return fmt.Errorf("undefined system source to reset to")
	}
	if r.Partitions.State == nil || r.Partitions.State.MountPoint == "" {
		return fmt.Errorf("undefined state partition")
	}
	// Unset labels for squashfs filesystem
	if r.Active.FS == constants.SquashFs {
		r.Active.Label = ""
		r.Passive.Label = ""
	}
	return nil
}

type UpgradeSpec struct {
	RecoveryUpgrade bool   `yaml:"recovery,omitempty" mapstructure:"recovery"`
	Active          Image  `yaml:"system,omitempty" mapstructure:"system"`
	Recovery        Image  `yaml:"recovery-system,omitempty" mapstructure:"recovery-system"`
	GrubDefEntry    string `yaml:"grub-entry-name,omitempty" mapstructure:"grub-entry-name"`
	Passive         Image
	Partitions      ElementalPartitions
	State           *InstallState
}

// Sanitize checks the consistency of the struct, returns error
// if unsolvable inconsistencies are found
func (u *UpgradeSpec) Sanitize() error {
	if u.RecoveryUpgrade {
		if u.Partitions.Recovery == nil || u.Partitions.Recovery.MountPoint == "" {
			return fmt.Errorf("undefined recovery partition")
		}
		if u.Recovery.Source.IsEmpty() {
			return fmt.Errorf("undefined upgrade source")
		}
	} else {
		if u.Partitions.State == nil || u.Partitions.State.MountPoint == "" {
			return fmt.Errorf("undefined state partition")
		}
		if u.Active.Source.IsEmpty() {
			return fmt.Errorf("undefined upgrade source")
		}
	}
	// Unset labels for squashfs filesystem
	if u.Active.FS == constants.SquashFs {
		u.Active.Label = ""
		u.Passive.Label = ""
	}
	if u.Recovery.FS == constants.SquashFs {
		u.Recovery.Label = ""
	}
	return nil
}

// Partition struct represents a partition with its commonly configurable values, size in MiB
type Partition struct {
	Name            string
	FilesystemLabel string   `yaml:"label,omitempty" mapstructure:"label"`
	Size            uint     `yaml:"size,omitempty" mapstructure:"size"`
	FS              string   `yaml:"fs,omitempty" mapstructure:"fs"`
	Flags           []string `yaml:"flags,omitempty" mapstructure:"flags"`
	MountPoint      string
	Path            string
	Disk            string
}

type PartitionList []*Partition

// GetByName gets a partitions by its name from the PartitionList
func (pl PartitionList) GetByName(name string) *Partition {
	var part *Partition

	for _, p := range pl {
		if p.Name == name {
			part = p
			if part.MountPoint != "" {
				return part
			}
		}
	}
	return part
}

// GetByLabel gets a partition by its label from the PartitionList
func (pl PartitionList) GetByLabel(label string) *Partition {
	var part *Partition

	for _, p := range pl {
		if p.FilesystemLabel == label {
			part = p
			if part.MountPoint != "" {
				return part
			}
		}
	}
	return part
}

// GetByNameOrLabel gets a partition by its name or label. It tries by name first
func (pl PartitionList) GetByNameOrLabel(name, label string) *Partition {
	part := pl.GetByName(name)
	if part == nil {
		part = pl.GetByLabel(label)
	}
	return part
}

type ElementalPartitions struct {
	BIOS       *Partition
	EFI        *Partition
	OEM        *Partition `yaml:"oem,omitempty" mapstructure:"oem"`
	Recovery   *Partition `yaml:"recovery,omitempty" mapstructure:"recovery"`
	State      *Partition `yaml:"state,omitempty" mapstructure:"state"`
	Persistent *Partition `yaml:"persistent,omitempty" mapstructure:"persistent"`
}

// SetFirmwarePartitions sets firmware partitions for a given firmware and partition table type
func (ep *ElementalPartitions) SetFirmwarePartitions(firmware string, partTable string) error {
	if firmware == EFI && partTable == GPT {
		ep.EFI = &Partition{
			FilesystemLabel: constants.EfiLabel,
			Size:            constants.EfiSize,
			Name:            constants.EfiPartName,
			FS:              constants.EfiFs,
			MountPoint:      constants.EfiDir,
			Flags:           []string{esp},
		}
		ep.BIOS = nil
	} else if firmware == BIOS && partTable == GPT {
		ep.BIOS = &Partition{
			FilesystemLabel: "",
			Size:            constants.BiosSize,
			Name:            constants.BiosPartName,
			FS:              "",
			MountPoint:      "",
			Flags:           []string{bios},
		}
		ep.EFI = nil
	} else {
		if ep.State == nil {
			return fmt.Errorf("nil state partition")
		}
		ep.State.Flags = []string{boot}
		ep.EFI = nil
		ep.BIOS = nil
	}
	return nil
}

// NewElementalPartitionsFromList fills an ElementalPartitions instance from given
// partitions list. First tries to match partitions by partition label, if not,
// it tries to match partitions by filesystem label
func NewElementalPartitionsFromList(pl PartitionList, state *InstallState) ElementalPartitions {
	ep := ElementalPartitions{}

	lm := map[string]string{
		constants.EfiPartName:        constants.EfiLabel,
		constants.OEMPartName:        constants.OEMLabel,
		constants.RecoveryPartName:   constants.RecoveryLabel,
		constants.StatePartName:      constants.StateLabel,
		constants.PersistentPartName: constants.PersistentLabel,
	}
	if state != nil {
		for k := range lm {
			if state.Partitions[k] != nil {
				lm[k] = state.Partitions[k].FSLabel
			}
		}
	}

	ep.BIOS = pl.GetByName(constants.BiosPartName)
	ep.EFI = pl.GetByNameOrLabel(constants.EfiPartName, lm[constants.EfiPartName])
	ep.OEM = pl.GetByNameOrLabel(constants.OEMPartName, lm[constants.OEMPartName])
	ep.Recovery = pl.GetByNameOrLabel(constants.RecoveryPartName, lm[constants.RecoveryPartName])
	ep.State = pl.GetByNameOrLabel(constants.StatePartName, lm[constants.StatePartName])
	ep.Persistent = pl.GetByNameOrLabel(constants.PersistentPartName, lm[constants.PersistentPartName])

	return ep
}

// PartitionsByInstallOrder sorts partitions according to the default layout
// nil partitons are ignored
// partition with 0 size is set last
func (ep ElementalPartitions) PartitionsByInstallOrder(extraPartitions PartitionList, excludes ...*Partition) PartitionList {
	partitions := PartitionList{}
	var lastPartition *Partition

	inExcludes := func(part *Partition, list ...*Partition) bool {
		for _, p := range list {
			if part == p {
				return true
			}
		}
		return false
	}

	if ep.BIOS != nil && !inExcludes(ep.BIOS, excludes...) {
		partitions = append(partitions, ep.BIOS)
	}
	if ep.EFI != nil && !inExcludes(ep.EFI, excludes...) {
		partitions = append(partitions, ep.EFI)
	}
	if ep.OEM != nil && !inExcludes(ep.OEM, excludes...) {
		partitions = append(partitions, ep.OEM)
	}
	if ep.Recovery != nil && !inExcludes(ep.Recovery, excludes...) {
		partitions = append(partitions, ep.Recovery)
	}
	if ep.State != nil && !inExcludes(ep.State, excludes...) {
		partitions = append(partitions, ep.State)
	}
	if ep.Persistent != nil && !inExcludes(ep.Persistent, excludes...) {
		// Check if we have to set this partition the latest due size == 0
		if ep.Persistent.Size == 0 {
			lastPartition = ep.Persistent
		} else {
			partitions = append(partitions, ep.Persistent)
		}
	}
	for _, p := range extraPartitions {
		// Check if we have to set this partition the latest due size == 0
		// Also check that we didn't set already the persistent to last in which case ignore this
		// InstallConfig.Sanitize should have already taken care of failing if this is the case, so this is extra protection
		if p.Size == 0 {
			if lastPartition != nil {
				// Ignore this part, we are not setting 2 parts to have 0 size!
				continue
			}
			lastPartition = p
		} else {
			partitions = append(partitions, p)
		}
	}

	// Set the last partition in the list the partition which has 0 size, so it grows to use the rest of free space
	if lastPartition != nil {
		partitions = append(partitions, lastPartition)
	}

	return partitions
}

// PartitionsByMountPoint sorts partitions according to its mountpoint, ignores nil
// partitions or partitions with an empty mountpoint
func (ep ElementalPartitions) PartitionsByMountPoint(descending bool, excludes ...*Partition) PartitionList {
	mountPointKeys := map[string]*Partition{}
	mountPoints := []string{}
	partitions := PartitionList{}

	for _, p := range ep.PartitionsByInstallOrder([]*Partition{}, excludes...) {
		if p.MountPoint != "" {
			mountPointKeys[p.MountPoint] = p
			mountPoints = append(mountPoints, p.MountPoint)
		}
	}

	if descending {
		sort.Sort(sort.Reverse(sort.StringSlice(mountPoints)))
	} else {
		sort.Strings(mountPoints)
	}

	for _, mnt := range mountPoints {
		partitions = append(partitions, mountPointKeys[mnt])
	}
	return partitions
}

// Image struct represents a file system image with its commonly configurable values, size in MiB
type Image struct {
	File       string
	Label      string       `yaml:"label,omitempty" mapstructure:"label"`
	Size       uint         `yaml:"size,omitempty" mapstructure:"size"`
	FS         string       `yaml:"fs,omitempty" mapstructure:"fs"`
	Source     *ImageSource `yaml:"uri,omitempty" mapstructure:"uri"`
	MountPoint string
	LoopDevice string
}

// LiveISO represents the configurations needed for a live ISO image
type LiveISO struct {
	RootFS             []*ImageSource `yaml:"rootfs,omitempty" mapstructure:"rootfs"`
	UEFI               []*ImageSource `yaml:"uefi,omitempty" mapstructure:"uefi"`
	Image              []*ImageSource `yaml:"image,omitempty" mapstructure:"image"`
	Label              string         `yaml:"label,omitempty" mapstructure:"label"`
	GrubEntry          string         `yaml:"grub-entry-name,omitempty" mapstructure:"grub-entry-name"`
	BootloaderInRootFs bool           `yaml:"bootloader-in-rootfs" mapstructure:"bootloader-in-rootfs"`
	Firmware           string         `yaml:"firmware,omitempty" mapstructure:"firmware"`
}

// Sanitize checks the consistency of the struct, returns error
// if unsolvable inconsistencies are found
func (i *LiveISO) Sanitize() error {
	for _, src := range i.RootFS {
		if src == nil {
			return fmt.Errorf("wrong name of source package for rootfs")
		}
	}
	for _, src := range i.UEFI {
		if src == nil {
			return fmt.Errorf("wrong name of source package for uefi")
		}
	}
	for _, src := range i.Image {
		if src == nil {
			return fmt.Errorf("wrong name of source package for image")
		}
	}

	return nil
}

// Repository represents the basic configuration for a package repository
type Repository struct {
	Name        string `yaml:"name,omitempty" mapstructure:"name"`
	Priority    int    `yaml:"priority,omitempty" mapstructure:"priority"`
	URI         string `yaml:"uri,omitempty" mapstructure:"uri"`
	Type        string `yaml:"type,omitempty" mapstructure:"type"`
	Arch        string `yaml:"arch,omitempty" mapstructure:"arch"`
	ReferenceID string `yaml:"reference,omitempty" mapstructure:"reference"`
}

// BuildConfig represents the config we need for building isos, raw images, artifacts
type BuildConfig struct {
	Date   bool   `yaml:"date,omitempty" mapstructure:"date"`
	Name   string `yaml:"name,omitempty" mapstructure:"name"`
	OutDir string `yaml:"output,omitempty" mapstructure:"output"`

	// 'inline' and 'squash' labels ensure config fields
	// are embedded from a yaml and map PoV
	Config `yaml:",inline" mapstructure:",squash"`
}

// Sanitize checks the consistency of the struct, returns error
// if unsolvable inconsistencies are found
func (b *BuildConfig) Sanitize() error {
	return b.Config.Sanitize()
}

// InstallState tracks the installation data of the whole system
type InstallState struct {
	Date       string                     `yaml:"date,omitempty"`
	Partitions map[string]*PartitionState `yaml:",omitempty,inline"`
}

// PartState tracks installation data of a partition
type PartitionState struct {
	FSLabel string                 `yaml:"label,omitempty"`
	Images  map[string]*ImageState `yaml:",omitempty,inline"`
}

// ImageState represents data of a deployed image
type ImageState struct {
	Source         *ImageSource `yaml:"source,omitempty"`
	SourceMetadata interface{}  `yaml:"source-metadata,omitempty"`
	Label          string       `yaml:"label,omitempty"`
	FS             string       `yaml:"fs,omitempty"`
}

func (i *ImageState) UnmarshalYAML(value *yaml.Node) error {
	type iState ImageState
	var srcMeta *yaml.Node
	var err error

	err = value.Decode((*iState)(i))
	if err != nil {
		return err
	}

	if i.SourceMetadata != nil {
		for i, n := range value.Content {
			if n.Value == "source-metadata" && n.Kind == yaml.ScalarNode {
				if len(value.Content) >= i+1 && value.Content[i+1].Kind == yaml.MappingNode {
					srcMeta = value.Content[i+1]
				}
				break
			}
		}
	}

	i.SourceMetadata = nil
	if srcMeta != nil {
		d := &DockerImageMeta{}
		err = srcMeta.Decode(d)
		if err == nil && (d.Digest != "" || d.Size != 0) {
			i.SourceMetadata = d
			return nil
		}
		c := &ChannelImageMeta{}
		err = srcMeta.Decode(c)
		if err == nil && c.Name != "" {
			i.SourceMetadata = c
		}
	}

	return err
}

// DockerImageMeta represents metadata of a docker container image type
type DockerImageMeta struct {
	Digest string `yaml:"digest,omitempty"`
	Size   int64  `yaml:"size,omitempty"`
}

// ChannelImageMeta represents metadata of a channel image type
type ChannelImageMeta struct {
	Category    string       `yaml:"category,omitempty"`
	Name        string       `yaml:"name,omitempty"`
	Version     string       `yaml:"version,omitempty"`
	FingerPrint string       `yaml:"finger-print,omitempty"`
	Repos       []Repository `yaml:"repositories,omitempty"`
}
  07070100000085000081A4000000000000000000000001645E367C00004263000000000000000000000000000000000000003000000000elemental-cli-0.3.1/pkg/types/v1/config_test.go   /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1_test

import (
	"path/filepath"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/twpayne/go-vfs"
	"github.com/twpayne/go-vfs/vfst"

	"github.com/rancher/elemental-cli/pkg/config"
	conf "github.com/rancher/elemental-cli/pkg/config"
	"github.com/rancher/elemental-cli/pkg/constants"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	"github.com/rancher/elemental-cli/pkg/utils"
	v1mocks "github.com/rancher/elemental-cli/tests/mocks"
)

var _ = Describe("Types", Label("types", "config"), func() {
	Describe("Write and load installation state", func() {
		var config *v1.RunConfig
		var runner *v1mocks.FakeRunner
		var fs vfs.FS
		var mounter *v1mocks.ErrorMounter
		var cleanup func()
		var err error
		var dockerState, channelState *v1.ImageState
		var installState *v1.InstallState
		var statePath, recoveryPath string

		BeforeEach(func() {
			runner = v1mocks.NewFakeRunner()
			mounter = v1mocks.NewErrorMounter()
			fs, cleanup, err = vfst.NewTestFS(map[string]interface{}{})
			Expect(err).Should(BeNil())

			config = conf.NewRunConfig(
				conf.WithFs(fs),
				conf.WithRunner(runner),
				conf.WithMounter(mounter),
			)
			dockerState = &v1.ImageState{
				Source: v1.NewDockerSrc("registry.org/my/image:tag"),
				Label:  "active_label",
				FS:     "ext2",
				SourceMetadata: &v1.DockerImageMeta{
					Digest: "adadgadg",
					Size:   23452345,
				},
			}
			installState = &v1.InstallState{
				Date: "somedate",
				Partitions: map[string]*v1.PartitionState{
					"state": {
						FSLabel: "state_label",
						Images: map[string]*v1.ImageState{
							"active": dockerState,
						},
					},
					"recovery": {
						FSLabel: "state_label",
						Images: map[string]*v1.ImageState{
							"recovery": channelState,
						},
					},
				},
			}

			statePath = filepath.Join(constants.RunningStateDir, constants.InstallStateFile)
			recoveryPath = "/recoverypart/state.yaml"
			err = utils.MkdirAll(fs, filepath.Dir(recoveryPath), constants.DirPerm)
			Expect(err).ShouldNot(HaveOccurred())
			err = utils.MkdirAll(fs, filepath.Dir(statePath), constants.DirPerm)
			Expect(err).ShouldNot(HaveOccurred())
		})
		AfterEach(func() {
			cleanup()
		})
		It("Writes and loads an installation data", func() {
			err = config.WriteInstallState(installState, statePath, recoveryPath)
			Expect(err).ShouldNot(HaveOccurred())
			loadedInstallState, err := config.LoadInstallState()
			Expect(err).ShouldNot(HaveOccurred())

			Expect(*loadedInstallState).To(Equal(*installState))
		})
		It("Fails writing to state partition", func() {
			err = fs.RemoveAll(filepath.Dir(statePath))
			Expect(err).ShouldNot(HaveOccurred())
			err = config.WriteInstallState(installState, statePath, recoveryPath)
			Expect(err).Should(HaveOccurred())
		})
		It("Fails writing to recovery partition", func() {
			err = fs.RemoveAll(filepath.Dir(statePath))
			Expect(err).ShouldNot(HaveOccurred())
			err = config.WriteInstallState(installState, statePath, recoveryPath)
			Expect(err).Should(HaveOccurred())
		})
		It("Fails loading state file", func() {
			err = config.WriteInstallState(installState, statePath, recoveryPath)
			Expect(err).ShouldNot(HaveOccurred())
			err = fs.RemoveAll(filepath.Dir(statePath))
			_, err = config.LoadInstallState()
			Expect(err).Should(HaveOccurred())
		})
	})
	Describe("ElementalPartitions", func() {
		var p v1.PartitionList
		var ep v1.ElementalPartitions
		BeforeEach(func() {
			ep = v1.ElementalPartitions{}
			p = v1.PartitionList{
				&v1.Partition{
					FilesystemLabel: "COS_OEM",
					Size:            0,
					Name:            "oem",
					FS:              "",
					Flags:           nil,
					MountPoint:      "/some/path/nested",
					Path:            "",
					Disk:            "",
				},
				&v1.Partition{
					FilesystemLabel: "COS_CUSTOM",
					Size:            0,
					Name:            "persistent",
					FS:              "",
					Flags:           nil,
					MountPoint:      "/some/path",
					Path:            "",
					Disk:            "",
				},
				&v1.Partition{
					FilesystemLabel: "SOMETHING",
					Size:            0,
					Name:            "somename",
					FS:              "",
					Flags:           nil,
					MountPoint:      "",
					Path:            "",
					Disk:            "",
				},
			}
		})
		It("sets firmware partitions on efi", func() {
			Expect(ep.EFI == nil && ep.BIOS == nil).To(BeTrue())
			err := ep.SetFirmwarePartitions(v1.EFI, v1.GPT)
			Expect(err).ShouldNot(HaveOccurred())
			Expect(ep.EFI != nil && ep.BIOS == nil).To(BeTrue())
		})
		It("sets firmware partitions on bios", func() {
			Expect(ep.EFI == nil && ep.BIOS == nil).To(BeTrue())
			err := ep.SetFirmwarePartitions(v1.BIOS, v1.GPT)
			Expect(err).ShouldNot(HaveOccurred())
			Expect(ep.EFI == nil && ep.BIOS != nil).To(BeTrue())
		})
		It("sets firmware partitions on msdos", func() {
			ep.State = &v1.Partition{}
			Expect(ep.EFI == nil && ep.BIOS == nil).To(BeTrue())
			err := ep.SetFirmwarePartitions(v1.BIOS, v1.MSDOS)
			Expect(err).ShouldNot(HaveOccurred())
			Expect(ep.EFI == nil && ep.BIOS == nil).To(BeTrue())
			Expect(ep.State.Flags != nil && ep.State.Flags[0] == "boot").To(BeTrue())
		})
		It("fails to set firmware partitions of state is not defined on msdos", func() {
			Expect(ep.EFI == nil && ep.BIOS == nil).To(BeTrue())
			err := ep.SetFirmwarePartitions(v1.BIOS, v1.MSDOS)
			Expect(err).Should(HaveOccurred())
		})
		It("initializes an ElementalPartitions from a PartitionList", func() {
			// Use custom label for recovery partition
			ep := v1.NewElementalPartitionsFromList(p, &v1.InstallState{
				Partitions: map[string]*v1.PartitionState{
					constants.RecoveryPartName: {
						FSLabel: "SOMETHING",
					},
				},
			})
			Expect(ep.Persistent != nil).To(BeTrue())
			Expect(ep.OEM != nil).To(BeTrue())
			Expect(ep.BIOS == nil).To(BeTrue())
			Expect(ep.EFI == nil).To(BeTrue())
			Expect(ep.State == nil).To(BeTrue())
			Expect(ep.Recovery != nil).To(BeTrue())
		})
		Describe("returns a partition list by install order", func() {
			It("with no extra parts", func() {
				ep := v1.NewElementalPartitionsFromList(p, nil)
				lst := ep.PartitionsByInstallOrder([]*v1.Partition{})
				Expect(len(lst)).To(Equal(2))
				Expect(lst[0].Name == "oem").To(BeTrue())
				Expect(lst[1].Name == "persistent").To(BeTrue())
			})
			It("with extra parts with size > 0", func() {
				// Use custom label for state partition
				ep := v1.NewElementalPartitionsFromList(p, &v1.InstallState{
					Partitions: map[string]*v1.PartitionState{
						constants.StatePartName: {
							FSLabel: "SOMETHING",
						},
					},
				})
				var extraParts []*v1.Partition
				extraParts = append(extraParts, &v1.Partition{Name: "extra", Size: 5})

				lst := ep.PartitionsByInstallOrder(extraParts)
				Expect(len(lst)).To(Equal(4))
				Expect(lst[0].Name == "oem").To(BeTrue())
				Expect(lst[1].Name == "somename").To(BeTrue())
				Expect(lst[2].Name == "extra").To(BeTrue())
				Expect(lst[3].Name == "persistent").To(BeTrue())
			})
			It("with extra part with size == 0 and persistent.Size == 0", func() {
				ep := v1.NewElementalPartitionsFromList(p, &v1.InstallState{})
				var extraParts []*v1.Partition
				extraParts = append(extraParts, &v1.Partition{Name: "extra", Size: 0})
				lst := ep.PartitionsByInstallOrder(extraParts)
				// Should ignore the wrong partition had have the persistent over it
				Expect(len(lst)).To(Equal(2))
				Expect(lst[0].Name == "oem").To(BeTrue())
				Expect(lst[1].Name == "persistent").To(BeTrue())
			})
			It("with extra part with size == 0 and persistent.Size > 0", func() {
				ep := v1.NewElementalPartitionsFromList(p, nil)
				ep.Persistent.Size = 10
				var extraParts []*v1.Partition
				extraParts = append(extraParts, &v1.Partition{Name: "extra", FilesystemLabel: "LABEL", Size: 0})
				lst := ep.PartitionsByInstallOrder(extraParts)
				// Will have our size == 0 partition the latest
				Expect(len(lst)).To(Equal(3))
				Expect(lst[0].Name == "oem").To(BeTrue())
				Expect(lst[1].Name == "persistent").To(BeTrue())
				Expect(lst[2].Name == "extra").To(BeTrue())
			})
			It("with several extra parts with size == 0 and persistent.Size > 0", func() {
				ep := v1.NewElementalPartitionsFromList(p, nil)
				ep.Persistent.Size = 10
				var extraParts []*v1.Partition
				extraParts = append(extraParts, &v1.Partition{Name: "extra1", Size: 0})
				extraParts = append(extraParts, &v1.Partition{Name: "extra2", Size: 0})
				lst := ep.PartitionsByInstallOrder(extraParts)
				// Should ignore the wrong partition had have the first partition with size 0 added last
				Expect(len(lst)).To(Equal(3))
				Expect(lst[0].Name == "oem").To(BeTrue())
				Expect(lst[1].Name == "persistent").To(BeTrue())
				Expect(lst[2].Name == "extra1").To(BeTrue())
			})
		})

		It("returns a partition list by mount order", func() {
			ep := v1.NewElementalPartitionsFromList(p, nil)
			lst := ep.PartitionsByMountPoint(false)
			Expect(len(lst)).To(Equal(2))
			Expect(lst[0].Name == "persistent").To(BeTrue())
			Expect(lst[1].Name == "oem").To(BeTrue())
		})
		It("returns a partition list by mount reverse order", func() {
			ep := v1.NewElementalPartitionsFromList(p, nil)
			lst := ep.PartitionsByMountPoint(true)
			Expect(len(lst)).To(Equal(2))
			Expect(lst[0].Name == "oem").To(BeTrue())
			Expect(lst[1].Name == "persistent").To(BeTrue())
		})
	})
	Describe("Partitionlist", func() {
		var p v1.PartitionList
		BeforeEach(func() {
			p = v1.PartitionList{
				&v1.Partition{
					FilesystemLabel: "ONE",
					Size:            0,
					Name:            "one",
					FS:              "",
					Flags:           nil,
					MountPoint:      "",
					Path:            "",
					Disk:            "",
				},
				&v1.Partition{
					FilesystemLabel: "TWO",
					Size:            0,
					Name:            "two",
					FS:              "",
					Flags:           nil,
					MountPoint:      "",
					Path:            "",
					Disk:            "",
				},
			}
		})
		It("returns partitions by name", func() {
			Expect(p.GetByName("two")).To(Equal(&v1.Partition{
				FilesystemLabel: "TWO",
				Size:            0,
				Name:            "two",
				FS:              "",
				Flags:           nil,
				MountPoint:      "",
				Path:            "",
				Disk:            "",
			}))
		})
		It("returns nil if partiton name not found", func() {
			Expect(p.GetByName("nonexistent")).To(BeNil())
		})
		It("returns partitions by filesystem label", func() {
			Expect(p.GetByLabel("TWO")).To(Equal(&v1.Partition{
				FilesystemLabel: "TWO",
				Size:            0,
				Name:            "two",
				FS:              "",
				Flags:           nil,
				MountPoint:      "",
				Path:            "",
				Disk:            "",
			}))
		})
		It("returns nil if filesystem label not found", func() {
			Expect(p.GetByName("nonexistent")).To(BeNil())
		})
	})
	Describe("InstallSpec", func() {
		var spec *v1.InstallSpec

		BeforeEach(func() {
			cfg := config.NewConfig(config.WithMounter(v1mocks.NewErrorMounter()))
			spec = config.NewInstallSpec(*cfg)
		})
		Describe("sanitize", func() {
			It("runs method", func() {
				Expect(spec.Partitions.EFI).To(BeNil())
				Expect(spec.Active.Source.IsEmpty()).To(BeTrue())

				// Creates firmware partitions
				spec.Active.Source = v1.NewDirSrc("/dir")
				spec.Firmware = v1.EFI
				err := spec.Sanitize()
				Expect(err).ShouldNot(HaveOccurred())
				Expect(spec.Partitions.EFI).NotTo(BeNil())

				// Sets image labels to empty string on squashfs
				spec.Active.FS = constants.SquashFs
				spec.Recovery.FS = constants.SquashFs
				err = spec.Sanitize()
				Expect(err).ShouldNot(HaveOccurred())
				Expect(spec.Recovery.Label).To(BeEmpty())
				Expect(spec.Active.Label).To(BeEmpty())
				Expect(spec.Passive.Label).To(BeEmpty())

				// Fails without state partition
				spec.Partitions.State = nil
				err = spec.Sanitize()
				Expect(err).Should(HaveOccurred())

				// Fails without an install source
				spec.Active.Source = v1.NewEmptySrc()
				err = spec.Sanitize()
				Expect(err).Should(HaveOccurred())
			})
			Describe("with extra partitions", func() {
				BeforeEach(func() {
					// Set a source for the install
					spec.Active.Source = v1.NewDirSrc("/dir")
				})
				It("fails if persistent and an extra partition have size == 0", func() {
					spec.ExtraPartitions = append(spec.ExtraPartitions, &v1.Partition{Size: 0})
					err := spec.Sanitize()
					Expect(err).Should(HaveOccurred())
					Expect(err.Error()).To(ContainSubstring("both persistent partition and extra partitions have size set to 0"))
				})
				It("fails if more than one extra partition has size == 0", func() {
					spec.Partitions.Persistent.Size = 10
					spec.ExtraPartitions = append(spec.ExtraPartitions, &v1.Partition{Name: "1", Size: 0})
					spec.ExtraPartitions = append(spec.ExtraPartitions, &v1.Partition{Name: "2", Size: 0})
					err := spec.Sanitize()
					Expect(err).To(HaveOccurred())
					Expect(err.Error()).To(ContainSubstring("more than one extra partition has its size set to 0"))
				})
				It("does not fail if persistent size is > 0 and an extra partition has size == 0", func() {
					spec.ExtraPartitions = append(spec.ExtraPartitions, &v1.Partition{Size: 0})
					spec.Partitions.Persistent.Size = 10
					err := spec.Sanitize()
					Expect(err).ToNot(HaveOccurred())
				})
			})
		})
	})
	Describe("ResetSpec", func() {
		It("runs sanitize method", func() {
			spec := &v1.ResetSpec{
				Active: v1.Image{
					Source: v1.NewDirSrc("/dir"),
				},
				Partitions: v1.ElementalPartitions{
					State: &v1.Partition{
						MountPoint: "mountpoint",
					},
				},
			}
			err := spec.Sanitize()
			Expect(err).ShouldNot(HaveOccurred())

			// Sets image labels to empty string on squashfs
			spec.Active.FS = constants.SquashFs
			err = spec.Sanitize()
			Expect(err).ShouldNot(HaveOccurred())
			Expect(spec.Active.Label).To(BeEmpty())
			Expect(spec.Passive.Label).To(BeEmpty())

			//Fails on missing state partition
			spec.Partitions.State = nil
			err = spec.Sanitize()
			Expect(err).Should(HaveOccurred())

			//Fails on empty source
			spec.Active.Source = v1.NewEmptySrc()
			err = spec.Sanitize()
			Expect(err).Should(HaveOccurred())
		})
	})
	Describe("UpgradeSpec", func() {
		It("runs sanitize method", func() {
			spec := &v1.UpgradeSpec{
				Active: v1.Image{
					Source: v1.NewDirSrc("/dir"),
				},
				Recovery: v1.Image{
					Source: v1.NewDirSrc("/dir"),
				},
				Partitions: v1.ElementalPartitions{
					State: &v1.Partition{
						MountPoint: "mountpoint",
					},
					Recovery: &v1.Partition{
						MountPoint: "mountpoint",
					},
				},
			}
			err := spec.Sanitize()
			Expect(err).ShouldNot(HaveOccurred())

			// Sets image labels to empty string on squashfs
			spec.Active.FS = constants.SquashFs
			spec.Recovery.FS = constants.SquashFs
			err = spec.Sanitize()
			Expect(err).ShouldNot(HaveOccurred())
			Expect(spec.Recovery.Label).To(BeEmpty())
			Expect(spec.Active.Label).To(BeEmpty())
			Expect(spec.Passive.Label).To(BeEmpty())

			//Fails on empty source for active upgrade
			spec.Active.Source = v1.NewEmptySrc()
			err = spec.Sanitize()
			Expect(err).Should(HaveOccurred())

			//Fails on missing state partition for active upgrade
			spec.Partitions.State = nil
			err = spec.Sanitize()
			Expect(err).Should(HaveOccurred())

			//Fails on empty source for recovery upgrade
			spec.RecoveryUpgrade = true
			spec.Recovery.Source = v1.NewEmptySrc()
			err = spec.Sanitize()
			Expect(err).Should(HaveOccurred())

			//Fails on missing recovery partition for recovery upgrade
			spec.Partitions.Recovery = nil
			err = spec.Sanitize()
			Expect(err).Should(HaveOccurred())
		})
	})
	Describe("LiveISO", func() {
		It("runs sanitize method", func() {
			iso := config.NewISO()
			Expect(iso.Sanitize()).ShouldNot(HaveOccurred())

			//Success when properly provided source packages
			spec := &v1.LiveISO{
				RootFS: []*v1.ImageSource{
					v1.NewDirSrc("/system/os"),
				},
			}
			spec.BootloaderInRootFs = true
			Expect(spec.Sanitize()).ShouldNot(HaveOccurred())
			Expect(iso.Sanitize()).ShouldNot(HaveOccurred())

			//Fails when packages were provided in incorrect format
			spec = &v1.LiveISO{
				RootFS: []*v1.ImageSource{
					nil,
				},
				UEFI: []*v1.ImageSource{
					nil,
				},
				Image: []*v1.ImageSource{
					nil,
				},
			}
			Expect(spec.Sanitize()).Should(HaveOccurred())
		})
	})
})
 07070100000086000081A4000000000000000000000001645E367C00000306000000000000000000000000000000000000002B00000000elemental-cli-0.3.1/pkg/types/v1/errors.go    /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1

// SourceNotFound is the error to raise when we can't find a source for install/upgrade
type SourceNotFound struct {
}

func (s *SourceNotFound) Error() string {
	return "could not find source"
}
  07070100000087000081A4000000000000000000000001645E367C000004F7000000000000000000000000000000000000002700000000elemental-cli-0.3.1/pkg/types/v1/fs.go    /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1

import (
	"io/fs"
	"os"
)

type FS interface {
	Open(name string) (*os.File, error)
	Chmod(name string, mode os.FileMode) error
	Create(name string) (*os.File, error)
	Mkdir(name string, perm os.FileMode) error
	Stat(name string) (os.FileInfo, error)
	Lstat(name string) (os.FileInfo, error)
	RemoveAll(path string) error
	ReadFile(filename string) ([]byte, error)
	Readlink(name string) (string, error)
	RawPath(name string) (string, error)
	ReadDir(dirname string) ([]os.FileInfo, error)
	Remove(name string) error
	OpenFile(name string, flag int, perm fs.FileMode) (*os.File, error)
	WriteFile(filename string, data []byte, perm os.FileMode) error
	Symlink(oldname, newname string) error
}
 07070100000088000081A4000000000000000000000001645E367C00000969000000000000000000000000000000000000002900000000elemental-cli-0.3.1/pkg/types/v1/grub.go  /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1

import (
	"github.com/rancher/elemental-cli/pkg/constants"
)

func (i InstallSpec) GetGrubLabels() map[string]string {
	grubEnv := map[string]string{
		"state_label":    i.Partitions.State.FilesystemLabel,
		"active_label":   i.Active.Label,
		"passive_label":  i.Passive.Label,
		"recovery_label": i.Partitions.Recovery.FilesystemLabel,
		"system_label":   i.Recovery.Label,
		"oem_label":      i.Partitions.OEM.FilesystemLabel,
	}

	if i.Partitions.Persistent != nil {
		grubEnv["persistent_label"] = i.Partitions.Persistent.FilesystemLabel
	}

	return grubEnv
}

func (u UpgradeSpec) GetGrubLabels() map[string]string {
	grubVars := map[string]string{
		"state_label":    u.Partitions.State.FilesystemLabel,
		"active_label":   u.Active.Label,
		"passive_label":  u.Passive.Label,
		"recovery_label": u.Partitions.Recovery.FilesystemLabel,
		"system_label":   u.Recovery.Label,
		"oem_label":      u.Partitions.OEM.FilesystemLabel,
	}

	if u.Partitions.Persistent != nil {
		grubVars["persistent_label"] = u.Partitions.Persistent.FilesystemLabel
	}

	return grubVars
}

func (r ResetSpec) GetGrubLabels() map[string]string {
	grubVars := map[string]string{
		"state_label":    r.Partitions.State.FilesystemLabel,
		"active_label":   r.Active.Label,
		"passive_label":  r.Passive.Label,
		"recovery_label": r.Partitions.Recovery.FilesystemLabel,
		"oem_label":      r.Partitions.OEM.FilesystemLabel,
	}

	if r.State != nil {
		if recoveryPart, ok := r.State.Partitions[constants.RecoveryPartName]; ok {
			grubVars["recovery_label"] = recoveryPart.FSLabel
			if recoveryImg, ok := recoveryPart.Images[constants.RecoveryImgName]; ok {
				grubVars["system_label"] = recoveryImg.Label
			}
		}
	}

	if r.Partitions.Persistent != nil {
		grubVars["persistent_label"] = r.Partitions.Persistent.FilesystemLabel
	}

	return grubVars
}
   07070100000089000081A4000000000000000000000001645E367C0000029A000000000000000000000000000000000000002900000000elemental-cli-0.3.1/pkg/types/v1/http.go  /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1

type HTTPClient interface {
	GetURL(log Logger, url string, destination string) error
}
  0707010000008A000081A4000000000000000000000001645E367C0000077D000000000000000000000000000000000000002A00000000elemental-cli-0.3.1/pkg/types/v1/image.go /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1

import (
	"context"
	"net/http"

	"github.com/containerd/containerd/archive"
	"github.com/google/go-containerregistry/pkg/authn"
	"github.com/google/go-containerregistry/pkg/name"
	v1 "github.com/google/go-containerregistry/pkg/v1"
	"github.com/google/go-containerregistry/pkg/v1/daemon"
	"github.com/google/go-containerregistry/pkg/v1/mutate"
	"github.com/google/go-containerregistry/pkg/v1/remote"
)

type ImageExtractor interface {
	ExtractImage(imageRef, destination, platformRef string, local bool) error
}

type OCIImageExtractor struct{}

var _ ImageExtractor = OCIImageExtractor{}

func (e OCIImageExtractor) ExtractImage(imageRef, destination, platformRef string, local bool) error {
	platform, err := v1.ParsePlatform(platformRef)
	if err != nil {
		return err
	}

	ref, err := name.ParseReference(imageRef)
	if err != nil {
		return err
	}

	image, err := image(ref, *platform, local)
	if err != nil {
		return err
	}

	reader := mutate.Extract(image)

	_, err = archive.Apply(context.Background(), destination, reader)
	return err
}

func image(ref name.Reference, platform v1.Platform, local bool) (v1.Image, error) {
	if local {
		return daemon.Image(ref)
	}

	return remote.Image(ref,
		remote.WithTransport(http.DefaultTransport),
		remote.WithPlatform(platform),
		remote.WithAuthFromKeychain(authn.DefaultKeychain),
	)
}
   0707010000008B000081A4000000000000000000000001645E367C00001047000000000000000000000000000000000000002B00000000elemental-cli-0.3.1/pkg/types/v1/logger.go    /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1

import (
	"bytes"
	"fmt"
	"io"
	"regexp"
	"strings"

	log "github.com/sirupsen/logrus"
)

// Logger is the interface we want for our logger, so we can plug different ones easily
type Logger interface {
	Info(...interface{})
	Warn(...interface{})
	Debug(...interface{})
	Error(...interface{})
	Fatal(...interface{})
	Success(...interface{})
	Warning(...interface{})
	Panic(...interface{})
	Trace(...interface{})
	Infof(string, ...interface{})
	Warnf(string, ...interface{})
	Debugf(string, ...interface{})
	Errorf(string, ...interface{})
	Fatalf(string, ...interface{})
	Panicf(string, ...interface{})
	Tracef(string, ...interface{})
	SetLevel(level log.Level)
	GetLevel() log.Level
	SetOutput(writer io.Writer)
	SetFormatter(formatter log.Formatter)

	SetContext(string)
	SpinnerStop()
	Spinner()
	Ask() bool
	Screen(string)
}

func DebugLevel() log.Level {
	l, _ := log.ParseLevel("debug")
	return l
}

func IsDebugLevel(l Logger) bool {
	return l.GetLevel() == DebugLevel()
}

type LoggerOptions func(l Logger) error

func NewLogger() Logger {
	return newLogrusWrapper(log.New())
}

// NewNullLogger will return a logger that discards all logs, used mainly for testing
func NewNullLogger() Logger {
	logger := log.New()
	logger.SetOutput(io.Discard)
	return newLogrusWrapper(logger)
}

// NewBufferLogger will return a logger that stores all logs in a buffer, used mainly for testing
func NewBufferLogger(b *bytes.Buffer) Logger {
	logger := log.New()
	logger.SetOutput(b)
	return newLogrusWrapper(logger)
}

type logrusWrapper struct {
	*log.Logger
}

func newLogrusWrapper(l *log.Logger) Logger {
	return &logrusWrapper{Logger: l}
}

func (w *logrusWrapper) Ask() bool {
	var input string
	w.Info("Do you want to continue with this operation? [y/N]: ")
	_, err := fmt.Scanln(&input)
	if err != nil {
		return false
	}
	input = strings.ToLower(input)

	if input == "y" || input == "yes" {
		return true
	}
	return false
}

func (w *logrusWrapper) Success(r ...interface{}) {
	// Will redirect to the Info method below and be cleaned there
	w.Info(r...)
}

var emojiStrip = regexp.MustCompile(`[:][\w]+[:]`)

func (w *logrusWrapper) Debug(args ...interface{}) {
	converted := convert(args)
	w.Logger.Debug(converted)
}

func (w *logrusWrapper) Info(args ...interface{}) {
	converted := convert(args)
	w.Logger.Info(converted)
}

func (w *logrusWrapper) Warn(args ...interface{}) {
	converted := convert(args)
	w.Logger.Warn(converted)
}

func (w *logrusWrapper) Error(args ...interface{}) {
	converted := convert(args)
	w.Logger.Error(converted)
}

func (w *logrusWrapper) Fatal(args ...interface{}) {
	converted := convert(args)
	w.Logger.Fatal(converted)
}

// convert changes a list of interfaces into a proper joined string ready to log
func convert(args []interface{}) string {
	var together []string
	// Matches a :WORD: and any extra space after that and the next word to remove emojis
	// which are like ":house: realMessageStartsHere"
	emojiStrip = regexp.MustCompile(`[:][\w]+[:]\s`)
	for _, a := range args {
		toClean := fmt.Sprintf("%v", a)                     // coerce into string
		cleaned := emojiStrip.ReplaceAllString(toClean, "") // remove any emoji
		trimmed := strings.Trim(cleaned, " ")               // trim any spaces in prefix/suffix
		together = append(together, trimmed)
	}
	return strings.Join(together, " ") // return them nicely joined with spaces like a normal phrase
}

func (w *logrusWrapper) SetContext(string) {}
func (w *logrusWrapper) Spinner()          {}
func (w *logrusWrapper) SpinnerStop()      {}
func (w *logrusWrapper) Screen(_ string)   {}
 0707010000008C000081A4000000000000000000000001645E367C0000070D000000000000000000000000000000000000003000000000elemental-cli-0.3.1/pkg/types/v1/logger_test.go   /*
Copyright © 2021 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1_test

import (
	"bytes"
	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	"github.com/sirupsen/logrus"
	"reflect"
)

var _ = Describe("logger", Label("log", "logger", "types"), func() {
	It("TestNewLogger returns a logger interface", func() {
		l1 := v1.NewLogger()
		l2 := logrus.New()
		Expect(reflect.TypeOf(l1).Kind()).To(Equal(reflect.TypeOf(l2).Kind()))
	})
	It("TestNewNullLogger returns logger interface", func() {
		l1 := v1.NewNullLogger()
		l2 := logrus.New()
		Expect(reflect.TypeOf(l1).Kind()).To(Equal(reflect.TypeOf(l2).Kind()))
	})
	It("DebugLevel returns the proper log level for debug output", func() {
		Expect(v1.DebugLevel()).To(Equal(logrus.DebugLevel))
	})
	It("Returns true on IsDebugLevel when log level is set to debug", func() {
		l := v1.NewLogger()
		l.SetLevel(v1.DebugLevel())
		Expect(v1.IsDebugLevel(l)).To(BeTrue())
	})
	It("Returns false on IsDebugLevel when log level is not set to debug", func() {
		Expect(v1.IsDebugLevel(v1.NewLogger())).To(BeFalse())
	})
	It("NewBufferLogger stores content in a buffer", func() {
		b := &bytes.Buffer{}
		l1 := v1.NewBufferLogger(b)
		l1.Info("TEST")
		Expect(b).To(ContainSubstring("TEST"))
	})
})
   0707010000008D000081A4000000000000000000000001645E367C00000B4C000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/pkg/types/v1/platform.go  /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1

import (
	"fmt"
	"strings"

	registry "github.com/google/go-containerregistry/pkg/v1"
	"gopkg.in/yaml.v3"

	"github.com/rancher/elemental-cli/pkg/constants"
)

type Platform struct {
	OS         string
	Arch       string
	GolangArch string
}

func NewPlatform(os, arch string) (*Platform, error) {
	golangArch, err := archToGolangArch(arch)
	if err != nil {
		return nil, err
	}

	arch, err = golangArchToArch(arch)
	if err != nil {
		return nil, err
	}

	return &Platform{
		OS:         os,
		Arch:       arch,
		GolangArch: golangArch,
	}, nil
}

func NewPlatformFromArch(arch string) (*Platform, error) {
	return NewPlatform("linux", arch)
}

func ParsePlatform(platform string) (*Platform, error) {
	p, err := registry.ParsePlatform(platform)
	if err != nil {
		return nil, err
	}

	return NewPlatform(p.OS, p.Architecture)
}

func (p *Platform) updateFrom(platform *Platform) {
	if platform == nil || p == nil {
		return
	}

	p.OS = platform.OS
	p.Arch = platform.Arch
	p.GolangArch = platform.GolangArch
}

func (p *Platform) String() string {
	if p == nil {
		return ""
	}

	return fmt.Sprintf("%s/%s", p.OS, p.GolangArch)
}

func (p Platform) MarshalYAML() (interface{}, error) {
	return p.String(), nil
}

func (p *Platform) UnmarshalYAML(value *yaml.Node) error {
	parsed, err := ParsePlatform(value.Value)
	if err != nil {
		return err
	}
	p.updateFrom(parsed)
	return nil
}

func (p *Platform) CustomUnmarshal(data interface{}) (bool, error) {
	str, ok := data.(string)
	if !ok {
		return false, fmt.Errorf("can't unmarshal %+v to a Platform type", data)
	}

	parsed, err := ParsePlatform(str)
	p.updateFrom(parsed)
	return false, err
}

var errInvalidArch = fmt.Errorf("invalid arch")

func archToGolangArch(arch string) (string, error) {
	switch strings.ToLower(arch) {
	case constants.ArchAmd64:
		return constants.ArchAmd64, nil
	case constants.Archx86:
		return constants.ArchAmd64, nil
	case constants.ArchArm64:
		return constants.ArchArm64, nil
	default:
		return "", errInvalidArch
	}
}

func golangArchToArch(arch string) (string, error) {
	switch strings.ToLower(arch) {
	case constants.Archx86:
		return constants.Archx86, nil
	case constants.ArchAmd64:
		return constants.Archx86, nil
	case constants.ArchArm64:
		return constants.ArchArm64, nil
	default:
		return "", errInvalidArch
	}
}
0707010000008E000081A4000000000000000000000001645E367C00000654000000000000000000000000000000000000003200000000elemental-cli-0.3.1/pkg/types/v1/platform_test.go /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1_test

import (
	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"

	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
)

var _ = Describe("Platform", Label("types", "platform"), func() {
	Describe("Source", func() {
		It("initiates platform as expected", func() {
			platform, err := v1.NewPlatform("linux", "x86_64")
			Expect(err).To(BeNil())
			Expect(platform.OS).To(Equal("linux"))
			Expect(platform.Arch).To(Equal("x86_64"))
			Expect(platform.GolangArch).To(Equal("amd64"))
		})
		It("parses platform as expected", func() {
			platform, err := v1.ParsePlatform("linux/amd64")
			Expect(err).To(BeNil())
			Expect(platform.OS).To(Equal("linux"))
			Expect(platform.Arch).To(Equal("x86_64"))
			Expect(platform.GolangArch).To(Equal("amd64"))
		})
		It("initiates arm64 platform as expected", func() {
			platform, err := v1.NewPlatformFromArch("arm64")
			Expect(err).To(BeNil())
			Expect(platform.OS).To(Equal("linux"))
			Expect(platform.Arch).To(Equal("arm64"))
			Expect(platform.GolangArch).To(Equal("arm64"))
		})
	})
})
0707010000008F000081A4000000000000000000000001645E367C0000072F000000000000000000000000000000000000002B00000000elemental-cli-0.3.1/pkg/types/v1/runner.go    /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1

import (
	"fmt"
	"os/exec"
	"strings"
)

type Runner interface {
	InitCmd(string, ...string) *exec.Cmd
	Run(string, ...string) ([]byte, error)
	RunCmd(cmd *exec.Cmd) ([]byte, error)
	CommandExists(command string) bool
	GetLogger() Logger
	SetLogger(logger Logger)
}

type RealRunner struct {
	Logger Logger
}

func (r RealRunner) CommandExists(command string) bool {
	_, err := exec.LookPath(command)
	return err == nil
}

func (r RealRunner) InitCmd(command string, args ...string) *exec.Cmd {
	return exec.Command(command, args...)
}

func (r RealRunner) RunCmd(cmd *exec.Cmd) ([]byte, error) {
	return cmd.CombinedOutput()
}

func (r RealRunner) Run(command string, args ...string) ([]byte, error) {
	r.debug(fmt.Sprintf("Running cmd: '%s %s'", command, strings.Join(args, " ")))
	cmd := r.InitCmd(command, args...)
	out, err := r.RunCmd(cmd)
	if err != nil {
		r.error(fmt.Sprintf("Error running command: %s", err.Error()))
	}
	return out, err
}

func (r RealRunner) GetLogger() Logger {
	return r.Logger
}

func (r *RealRunner) SetLogger(logger Logger) {
	r.Logger = logger
}

func (r RealRunner) error(msg string) {
	if r.Logger != nil {
		r.Logger.Error(msg)
	}
}

func (r RealRunner) debug(msg string) {
	if r.Logger != nil {
		r.Logger.Debug(msg)
	}
}
 07070100000090000081A4000000000000000000000001645E367C000009C1000000000000000000000000000000000000003000000000elemental-cli-0.3.1/pkg/types/v1/runner_test.go   /*
Copyright © 2021 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1_test

import (
	"bytes"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	v1mock "github.com/rancher/elemental-cli/tests/mocks"
	"github.com/sirupsen/logrus"
)

var _ = Describe("Runner", Label("types", "runner"), func() {
	It("Runs commands on the real Runner", func() {
		r := v1.RealRunner{}
		_, err := r.Run("pwd")
		Expect(err).To(BeNil())
	})
	It("Runs commands on the fake runner", func() {
		r := v1mock.NewFakeRunner()
		_, err := r.Run("pwd")
		Expect(err).To(BeNil())
	})
	It("Sets and gets the logger on the fake runner", func() {
		r := v1mock.NewFakeRunner()
		Expect(r.GetLogger()).To(BeNil())
		logger := v1.NewNullLogger()
		r.SetLogger(logger)
		Expect(r.GetLogger()).To(Equal(logger))
	})
	It("Sets and gets the logger on the real runner", func() {
		r := v1.RealRunner{}
		Expect(r.GetLogger()).To(BeNil())
		logger := v1.NewNullLogger()
		r.SetLogger(logger)
		Expect(r.GetLogger()).To(Equal(logger))
	})

	It("logs the command when on debug", func() {
		memLog := &bytes.Buffer{}
		logger := v1.NewBufferLogger(memLog)
		logger.SetLevel(logrus.DebugLevel)
		r := v1.RealRunner{Logger: logger}
		_, err := r.Run("echo", "-n", "Some message")
		Expect(err).To(BeNil())
		Expect(memLog.String()).To(ContainSubstring("echo -n Some message"))
	})
	It("logs when command is not found", func() {
		memLog := &bytes.Buffer{}
		logger := v1.NewBufferLogger(memLog)
		r := v1.RealRunner{Logger: logger}
		_, err := r.Run("IAmMissing")
		Expect(err).NotTo(BeNil())
		Expect(memLog.String()).To(ContainSubstring("not found"))
	})
	It("returns false if command does not exists", func() {
		r := v1.RealRunner{}
		exists := r.CommandExists("THISCOMMANDSHOULDNOTBETHERECOMEON")
		Expect(exists).To(BeFalse())
	})
	It("returns true if command exists", func() {
		r := v1.RealRunner{}
		exists := r.CommandExists("true")
		Expect(exists).To(BeTrue())
	})
})
   07070100000091000081A4000000000000000000000001645E367C00000365000000000000000000000000000000000000002C00000000elemental-cli-0.3.1/pkg/types/v1/syscall.go   /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1

import (
	"syscall"
)

type SyscallInterface interface {
	Chroot(string) error
	Chdir(string) error
}

type RealSyscall struct{}

func (r *RealSyscall) Chroot(path string) error {
	return syscall.Chroot(path)
}

func (r *RealSyscall) Chdir(path string) error {
	return syscall.Chdir(path)
}
   07070100000092000081A4000000000000000000000001645E367C00000657000000000000000000000000000000000000003100000000elemental-cli-0.3.1/pkg/types/v1/syscall_test.go  /*
Copyright © 2021 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1_test

import (
	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	v1mock "github.com/rancher/elemental-cli/tests/mocks"
)

// unit test stolen from yip
var _ = Describe("Syscall", Label("types", "syscall"), func() {
	It("Calling chroot on the real syscall should fail", func() {
		r := v1.RealSyscall{}
		err := r.Chroot("/tmp/")
		// We need elevated privs to chroot so this should fail
		Expect(err).ToNot(BeNil())
	})

	It("Calling chroot on the fake syscall should not fail", func() {
		r := v1mock.FakeSyscall{}
		err := r.Chroot("/tmp/")
		// We need elevated privs to chroot so this should fail
		Expect(err).To(BeNil())
	})

	It("Calling chdir on the real syscall should not fail", func() {
		r := v1.RealSyscall{}
		err := r.Chdir("/tmp/")
		Expect(err).To(BeNil())
	})

	It("Calling chroot on the fake syscall should not fail", func() {
		r := v1mock.FakeSyscall{}
		err := r.Chdir("/tmp/")
		// We need elevated privs to chroot so this should fail
		Expect(err).To(BeNil())
	})
})
 07070100000093000081A4000000000000000000000001645E367C000002F3000000000000000000000000000000000000003500000000elemental-cli-0.3.1/pkg/types/v1/types_suite_test.go  /*
Copyright © 2021 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1_test

import (
	"testing"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

func TestTypes(t *testing.T) {
	RegisterFailHandler(Fail)
	RunSpecs(t, "v1 types test suite")
}
 07070100000094000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000001E00000000elemental-cli-0.3.1/pkg/utils 07070100000095000081A4000000000000000000000001645E367C00001614000000000000000000000000000000000000002800000000elemental-cli-0.3.1/pkg/utils/chroot.go   /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package utils

import (
	"errors"
	"fmt"
	"os"
	"sort"
	"strings"

	"github.com/rancher/elemental-cli/pkg/constants"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
)

// Chroot represents the struct that will allow us to run commands inside a given chroot
type Chroot struct {
	path          string
	defaultMounts []string
	extraMounts   map[string]string
	activeMounts  []string
	config        *v1.Config
}

func NewChroot(path string, config *v1.Config) *Chroot {
	return &Chroot{
		path:          path,
		defaultMounts: []string{"/dev", "/dev/pts", "/proc", "/sys"},
		extraMounts:   map[string]string{},
		activeMounts:  []string{},
		config:        config,
	}
}

// ChrootedCallback runs the given callback in a chroot environment
func ChrootedCallback(cfg *v1.Config, path string, bindMounts map[string]string, callback func() error) error {
	chroot := NewChroot(path, cfg)
	chroot.SetExtraMounts(bindMounts)
	return chroot.RunCallback(callback)
}

// Sets additional bind mounts for the chroot enviornment. They are represented
// in a map where the key is the path outside the chroot and the value is the
// path inside the chroot.
func (c *Chroot) SetExtraMounts(extraMounts map[string]string) {
	c.extraMounts = extraMounts
}

// Prepare will mount the defaultMounts as bind mounts, to be ready when we run chroot
func (c *Chroot) Prepare() error {
	var err error
	keys := []string{}
	mountOptions := []string{"bind"}

	if len(c.activeMounts) > 0 {
		return errors.New("There are already active mountpoints for this instance")
	}

	defer func() {
		if err != nil {
			c.Close()
		}
	}()

	for _, mnt := range c.defaultMounts {
		mountPoint := fmt.Sprintf("%s%s", strings.TrimSuffix(c.path, "/"), mnt)
		err = MkdirAll(c.config.Fs, mountPoint, constants.DirPerm)
		if err != nil {
			return err
		}
		err = c.config.Mounter.Mount(mnt, mountPoint, "bind", mountOptions)
		if err != nil {
			return err
		}
		c.activeMounts = append(c.activeMounts, mountPoint)
	}

	for k := range c.extraMounts {
		keys = append(keys, k)
	}
	sort.Strings(keys)
	for _, k := range keys {
		mountPoint := fmt.Sprintf("%s%s", strings.TrimSuffix(c.path, "/"), c.extraMounts[k])
		err = MkdirAll(c.config.Fs, mountPoint, constants.DirPerm)
		if err != nil {
			return err
		}
		err = c.config.Mounter.Mount(k, mountPoint, "bind", mountOptions)
		if err != nil {
			return err
		}
		c.activeMounts = append(c.activeMounts, mountPoint)
	}

	return nil
}

// Close will unmount all active mounts created in Prepare on reverse order
func (c *Chroot) Close() error {
	failures := []string{}
	for len(c.activeMounts) > 0 {
		curr := c.activeMounts[len(c.activeMounts)-1]
		c.config.Logger.Debugf("Unmounting %s from chroot", curr)
		c.activeMounts = c.activeMounts[:len(c.activeMounts)-1]
		err := c.config.Mounter.Unmount(curr)
		if err != nil {
			c.config.Logger.Errorf("Error unmounting %s: %s", curr, err)
			failures = append(failures, curr)
		}
	}
	if len(failures) > 0 {
		c.activeMounts = failures
		return fmt.Errorf("failed closing chroot environment. Unmount failures: %v", failures)
	}
	return nil
}

// RunCallback runs the given callback in a chroot environment
func (c *Chroot) RunCallback(callback func() error) (err error) {
	var currentPath string
	var oldRootF *os.File

	// Store current path
	currentPath, err = os.Getwd()
	if err != nil {
		c.config.Logger.Error("Failed to get current path")
		return err
	}
	defer func() {
		tmpErr := os.Chdir(currentPath)
		if err == nil && tmpErr != nil {
			err = tmpErr
		}
	}()

	// Store current root
	oldRootF, err = c.config.Fs.Open("/")
	if err != nil {
		c.config.Logger.Errorf("Can't open current root")
		return err
	}
	defer oldRootF.Close()

	if len(c.activeMounts) == 0 {
		err = c.Prepare()
		if err != nil {
			c.config.Logger.Errorf("Can't mount default mounts")
			return err
		}
		defer func() {
			tmpErr := c.Close()
			if err == nil {
				err = tmpErr
			}
		}()
	}
	// Change to new dir before running chroot!
	err = c.config.Syscall.Chdir(c.path)
	if err != nil {
		c.config.Logger.Errorf("Can't chdir %s: %s", c.path, err)
		return err
	}

	err = c.config.Syscall.Chroot(c.path)
	if err != nil {
		c.config.Logger.Errorf("Can't chroot %s: %s", c.path, err)
		return err
	}

	// Restore to old root
	defer func() {
		tmpErr := oldRootF.Chdir()
		if tmpErr != nil {
			c.config.Logger.Errorf("Can't change to old root dir")
			if err == nil {
				err = tmpErr
			}
		} else {
			tmpErr = c.config.Syscall.Chroot(".")
			if tmpErr != nil {
				c.config.Logger.Errorf("Can't chroot back to old root")
				if err == nil {
					err = tmpErr
				}
			}
		}
	}()

	return callback()
}

// Run executes a command inside a chroot
func (c *Chroot) Run(command string, args ...string) (out []byte, err error) {
	callback := func() error {
		out, err = c.config.Runner.Run(command, args...)
		return err
	}
	err = c.RunCallback(callback)
	if err != nil {
		c.config.Logger.Errorf("Cant run command %s with args %v on chroot: %s", command, args, err)
		c.config.Logger.Debugf("Output from command: %s", out)
	}
	return out, err
}
07070100000096000081A4000000000000000000000001645E367C00000643000000000000000000000000000000000000002C00000000elemental-cli-0.3.1/pkg/utils/cleanstack.go   /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package utils

import (
	"github.com/hashicorp/go-multierror"
)

type CleanJob func() error

// NewCleanStack returns a new stack.
func NewCleanStack() *CleanStack {
	return &CleanStack{}
}

// Stack is a basic LIFO stack that resizes as needed.
type CleanStack struct {
	jobs  []CleanJob
	count int
}

// Push adds a node to the stack
func (clean *CleanStack) Push(job CleanJob) {
	clean.jobs = append(clean.jobs[:clean.count], job)
	clean.count++
}

// Pop removes and returns a node from the stack in last to first order.
func (clean *CleanStack) Pop() CleanJob {
	if clean.count == 0 {
		return nil
	}
	clean.count--
	return clean.jobs[clean.count]
}

// Cleanup runs the whole cleanup stack. In case of error it runs all jobs
// and returns the first error occurrence.
func (clean *CleanStack) Cleanup(err error) error {
	var errs error
	if err != nil {
		errs = multierror.Append(errs, err)
	}
	for clean.count > 0 {
		job := clean.Pop()
		err = job()
		if err != nil {
			errs = multierror.Append(errs, err)
		}
	}
	return errs
}
 07070100000097000081A4000000000000000000000001645E367C00003BD9000000000000000000000000000000000000002800000000elemental-cli-0.3.1/pkg/utils/common.go   /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package utils

import (
	"bufio"
	"crypto/sha256"
	"errors"
	"fmt"
	"io"
	"io/fs"
	"math/rand"
	"net/url"
	"os"
	"path/filepath"
	"strconv"
	"strings"
	"time"

	"github.com/distribution/distribution/reference"
	"github.com/joho/godotenv"
	"github.com/twpayne/go-vfs"
	"github.com/zloylos/grsync"

	cnst "github.com/rancher/elemental-cli/pkg/constants"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
)

// BootedFrom will check if we are booting from the given label
func BootedFrom(runner v1.Runner, label string) bool {
	out, _ := runner.Run("cat", "/proc/cmdline")
	return strings.Contains(string(out), label)
}

// GetDeviceByLabel will try to return the device that matches the given label.
// attempts value sets the number of attempts to find the device, it
// waits a second between attempts.
func GetDeviceByLabel(runner v1.Runner, label string, attempts int) (string, error) {
	part, err := GetFullDeviceByLabel(runner, label, attempts)
	if err != nil {
		return "", err
	}
	return part.Path, nil
}

// GetFullDeviceByLabel works like GetDeviceByLabel, but it will try to get as much info as possible from the existing
// partition and return a v1.Partition object
func GetFullDeviceByLabel(runner v1.Runner, label string, attempts int) (*v1.Partition, error) {
	for tries := 0; tries < attempts; tries++ {
		_, _ = runner.Run("udevadm", "settle")
		parts, err := GetAllPartitions()
		if err != nil {
			return nil, err
		}
		part := parts.GetByLabel(label)
		if part != nil {
			return part, nil
		}
		time.Sleep(1 * time.Second)
	}
	return nil, errors.New("no device found")
}

// CopyFile Copies source file to target file using Fs interface. If target
// is  directory source is copied into that directory using source name file.
// File mode is preserved
func CopyFile(fs v1.FS, source string, target string) error {
	return ConcatFiles(fs, []string{source}, target)
}

// ConcatFiles Copies source files to target file using Fs interface.
// Source files are concatenated into target file in the given order.
// If target is a directory source is copied into that directory using
// 1st source name file. The result keeps the file mode of the 1st source.
func ConcatFiles(fs v1.FS, sources []string, target string) (err error) {
	if len(sources) == 0 {
		return fmt.Errorf("Empty sources list")
	}
	if dir, _ := IsDir(fs, target); dir {
		target = filepath.Join(target, filepath.Base(sources[0]))
	}
	fInf, err := fs.Stat(sources[0])
	if err != nil {
		return err
	}

	targetFile, err := fs.Create(target)
	if err != nil {
		return err
	}
	defer func() {
		if err == nil {
			err = targetFile.Close()
		} else {
			_ = fs.Remove(target)
		}
	}()

	var sourceFile *os.File
	for _, source := range sources {
		sourceFile, err = fs.Open(source)
		if err != nil {
			return err
		}
		_, err = io.Copy(targetFile, sourceFile)
		if err != nil {
			return err
		}
		err = sourceFile.Close()
		if err != nil {
			return err
		}
	}

	return fs.Chmod(target, fInf.Mode())
}

// CreateDirStructure creates essentials directories under the root tree that might not be present
// within a container image (/dev, /run, etc.)
func CreateDirStructure(fs v1.FS, target string) error {
	for _, dir := range []string{"/run", "/dev", "/boot", "/usr/local", "/oem"} {
		err := MkdirAll(fs, filepath.Join(target, dir), cnst.DirPerm)
		if err != nil {
			return err
		}
	}
	for _, dir := range []string{"/proc", "/sys"} {
		err := MkdirAll(fs, filepath.Join(target, dir), cnst.NoWriteDirPerm)
		if err != nil {
			return err
		}
	}
	err := MkdirAll(fs, filepath.Join(target, "/tmp"), cnst.DirPerm)
	if err != nil {
		return err
	}
	// Set /tmp permissions regardless the umask setup
	err = fs.Chmod(filepath.Join(target, "/tmp"), cnst.TempDirPerm)
	if err != nil {
		return err
	}
	return nil
}

// SyncData rsync's source folder contents to a target folder content,
// both are expected to exist before hand.
func SyncData(log v1.Logger, fs v1.FS, source string, target string, excludes ...string) error {
	if fs != nil {
		if s, err := fs.RawPath(source); err == nil {
			source = s
		}
		if t, err := fs.RawPath(target); err == nil {
			target = t
		}
	}

	if !strings.HasSuffix(source, "/") {
		source = fmt.Sprintf("%s/", source)
	}

	if !strings.HasSuffix(target, "/") {
		target = fmt.Sprintf("%s/", target)
	}

	task := grsync.NewTask(
		source,
		target,
		grsync.RsyncOptions{
			Quiet:   false,
			Archive: true,
			XAttrs:  true,
			ACLs:    true,
			Exclude: excludes,
		},
	)

	quit := make(chan bool)
	go func() {
		for {
			select {
			case <-quit:
				return
			case <-time.After(5 * time.Second):
				state := task.State()
				log.Debugf(
					"progress rsync %s to %s: %.2f / rem. %d / tot. %d / sp. %s",
					source,
					target,
					state.Progress,
					state.Remain,
					state.Total,
					state.Speed,
				)
			}
		}
	}()

	err := task.Run()
	quit <- true
	if err != nil {
		return fmt.Errorf("%w: %s", err, strings.Join([]string{task.Log().Stderr, task.Log().Stdout}, "\n"))
	}

	return nil
}

// Reboot reboots the system afater the given delay (in seconds) time passed.
func Reboot(runner v1.Runner, delay time.Duration) error {
	time.Sleep(delay * time.Second)
	_, err := runner.Run("reboot", "-f")
	return err
}

// Shutdown halts the system afater the given delay (in seconds) time passed.
func Shutdown(runner v1.Runner, delay time.Duration) error {
	time.Sleep(delay * time.Second)
	_, err := runner.Run("poweroff", "-f")
	return err
}

// CosignVerify runs a cosign validation for the give image and given public key. If no
// key is provided then it attempts a keyless validation (experimental feature).
func CosignVerify(fs v1.FS, runner v1.Runner, image string, publicKey string, debug bool) (string, error) {
	args := []string{}

	if debug {
		args = append(args, "-d=true")
	}
	if publicKey != "" {
		args = append(args, "-key", publicKey)
	} else {
		os.Setenv("COSIGN_EXPERIMENTAL", "1")
		defer os.Unsetenv("COSIGN_EXPERIMENTAL")
	}
	args = append(args, image)

	// Give each cosign its own tuf dir so it doesnt collide with others accessing the same files at the same time
	tmpDir, err := TempDir(fs, "", "cosign-tuf-")
	if err != nil {
		return "", err
	}
	_ = os.Setenv("TUF_ROOT", tmpDir)
	defer func(fs v1.FS, path string) {
		_ = fs.RemoveAll(path)
	}(fs, tmpDir)
	defer func() {
		_ = os.Unsetenv("TUF_ROOT")
	}()

	out, err := runner.Run("cosign", args...)
	return string(out), err
}

// CreateSquashFS creates a squash file at destination from a source, with options
// TODO: Check validity of source maybe?
func CreateSquashFS(runner v1.Runner, logger v1.Logger, source string, destination string, options []string) error {
	// create args
	args := []string{source, destination}
	// append options passed to args in order to have the correct order
	// protect against options passed together in the same string , i.e. "-x add" instead of "-x", "add"
	var optionsExpanded []string
	for _, op := range options {
		optionsExpanded = append(optionsExpanded, strings.Split(op, " ")...)
	}
	args = append(args, optionsExpanded...)
	out, err := runner.Run("mksquashfs", args...)
	if err != nil {
		logger.Debugf("Error running squashfs creation, stdout: %s", out)
		logger.Errorf("Error while creating squashfs from %s to %s: %s", source, destination, err)
		return err
	}
	return nil
}

// LoadEnvFile will try to parse the file given and return a map with the kye/values
func LoadEnvFile(fs v1.FS, file string) (map[string]string, error) {
	var envMap map[string]string
	var err error

	f, err := fs.Open(file)
	if err != nil {
		return envMap, err
	}
	defer f.Close()

	envMap, err = godotenv.Parse(f)
	if err != nil {
		return envMap, err
	}

	return envMap, err
}

func IsMounted(config *v1.Config, part *v1.Partition) (bool, error) {
	if part == nil {
		return false, fmt.Errorf("nil partition")
	}

	if part.MountPoint == "" {
		return false, nil
	}
	// Using IsLikelyNotMountPoint seams to be safe as we are not checking
	// for bind mounts here
	notMnt, err := config.Mounter.IsLikelyNotMountPoint(part.MountPoint)
	if err != nil {
		return false, err
	}
	return !notMnt, nil
}

// GetTempDir returns the dir for storing related temporal files
// It will respect TMPDIR and use that if exists, fallback to try the persistent partition if its mounted
// and finally the default /tmp/ dir
// suffix is what is appended to the dir name elemental-suffix. If empty it will randomly generate a number
func GetTempDir(config *v1.Config, suffix string) string {
	// if we got a TMPDIR var, respect and use that
	if suffix == "" {
		random := rand.New(rand.NewSource(time.Now().UnixNano()))
		suffix = strconv.Itoa(int(random.Uint32()))
	}
	elementalTmpDir := fmt.Sprintf("elemental-%s", suffix)
	dir := os.Getenv("TMPDIR")
	if dir != "" {
		config.Logger.Debugf("Got tmpdir from TMPDIR var: %s", dir)
		return filepath.Join(dir, elementalTmpDir)
	}
	parts, err := GetAllPartitions()
	if err != nil {
		config.Logger.Debug("Could not get partitions, defaulting to /tmp")
		return filepath.Join("/", "tmp", elementalTmpDir)
	}
	// Check persistent and if its mounted
	state, _ := config.LoadInstallState()
	ep := v1.NewElementalPartitionsFromList(parts, state)
	persistent := ep.Persistent
	if persistent != nil {
		if mnt, _ := IsMounted(config, persistent); mnt {
			config.Logger.Debugf("Using tmpdir on persistent volume: %s", persistent.MountPoint)
			return filepath.Join(persistent.MountPoint, "tmp", elementalTmpDir)
		}
	}
	config.Logger.Debug("Could not get any valid tmpdir, defaulting to /tmp")
	return filepath.Join("/", "tmp", elementalTmpDir)
}

// IsLocalURI returns true if the uri has "file" scheme or no scheme and URI is
// not prefixed with a domain (container registry style). Returns false otherwise.
// Error is not nil only if the url can't be parsed.
func IsLocalURI(uri string) (bool, error) {
	u, err := url.Parse(uri)
	if err != nil {
		return false, err
	}
	if u.Scheme == "file" {
		return true, nil
	}
	if u.Scheme == "" {
		// Check first part of the path is not a domain (e.g. registry.suse.com/elemental)
		// reference.ParsedNamed expects a <domain>[:<port>]/<path>[:<tag>] form.
		if _, err = reference.ParseNamed(uri); err != nil {
			return true, nil
		}
	}
	return false, nil
}

// IsHTTPURI returns true if the uri has "http" or "https" scheme, returns false otherwise.
// Error is not nil only if the url can't be parsed.
func IsHTTPURI(uri string) (bool, error) {
	u, err := url.Parse(uri)
	if err != nil {
		return false, err
	}
	if u.Scheme == "http" || u.Scheme == "https" {
		return true, nil
	}
	return false, nil
}

// GetSource copies given source to destination, if source is a local path it simply
// copies files, if source is a remote URL it tries to download URL to destination.
func GetSource(config *v1.Config, source string, destination string) error {
	local, err := IsLocalURI(source)
	if err != nil {
		config.Logger.Errorf("Not a valid url: %s", source)
		return err
	}

	err = vfs.MkdirAll(config.Fs, filepath.Dir(destination), cnst.DirPerm)
	if err != nil {
		return err
	}
	if local {
		u, _ := url.Parse(source)
		err = CopyFile(config.Fs, u.Path, destination)
		if err != nil {
			return err
		}
	} else {
		err = config.Client.GetURL(config.Logger, source, destination)
		if err != nil {
			return err
		}
	}
	return nil
}

// ValidContainerReferece returns true if the given string matches
// a container registry reference, false otherwise
func ValidContainerReference(ref string) bool {
	if _, err := reference.ParseNormalizedNamed(ref); err != nil {
		return false
	}
	return true
}

// ValidTaggedContainerReferece returns true if the given string matches
// a container registry reference including a tag, false otherwise.
func ValidTaggedContainerReference(ref string) bool {
	n, err := reference.ParseNormalizedNamed(ref)
	if err != nil {
		return false
	}
	if reference.IsNameOnly(n) {
		return false
	}
	return true
}

// FindFileWithPrefix looks for a file in the given path matching one of the given
// prefixes. Returns the found file path including the given path. It does not
// check subfolders recusively
func FindFileWithPrefix(fs v1.FS, path string, prefixes ...string) (string, error) {
	files, err := fs.ReadDir(path)
	if err != nil {
		return "", err
	}
	for _, f := range files {
		if f.IsDir() {
			continue
		}
		for _, p := range prefixes {
			if strings.HasPrefix(f.Name(), p) {
				if f.Mode()&os.ModeSymlink == os.ModeSymlink {
					found, err := fs.Readlink(filepath.Join(path, f.Name()))
					if err == nil {
						if !filepath.IsAbs(found) {
							found = filepath.Join(path, found)
						}
						if exists, _ := Exists(fs, found); exists {
							return found, nil
						}
					}
				} else {
					return filepath.Join(path, f.Name()), nil
				}
			}
		}
	}
	return "", fmt.Errorf("No file found with prefixes: %v", prefixes)
}

// CalcFileChecksum opens the given file and returns the sha256 checksum of it.
func CalcFileChecksum(fs v1.FS, fileName string) (string, error) {
	f, err := fs.Open(fileName)
	if err != nil {
		return "", err
	}
	defer f.Close()

	h := sha256.New()
	if _, err := io.Copy(h, f); err != nil {
		return "", err
	}

	return fmt.Sprintf("%x", h.Sum(nil)), nil
}

// IdentifySourceSystem tries to find the os-release file in a given dir and identify the system based on the data in there
func IdentifySourceSystem(vfs v1.FS, path string) (string, error) {
	var system string
	var found bool
	err := WalkDirFs(vfs, path, func(path string, d fs.DirEntry, err error) error {
		if err != nil {
			return err
		}
		if d.Name() == "os-release" {
			osRelease, err := parseOsRelease(vfs, path)
			if err != nil {
				return err
			}
			switch osRelease["ID"] {
			case cnst.Fedora:
				system = cnst.Fedora
			case cnst.Ubuntu:
				system = cnst.Ubuntu
			default:
				system = cnst.Suse
			}
			found = true
		}
		return err
	})
	if !found {
		err = fmt.Errorf("could not find os-release file under %s", path)
	}
	return system, err
}

func parseOsRelease(fs v1.FS, filename string) (osrelease map[string]string, err error) {
	var lines []string
	osrelease = map[string]string{}
	file, err := fs.Open(filename)
	if err != nil {
		return
	}
	defer func(file *os.File) {
		_ = file.Close()
	}(file)

	scanner := bufio.NewScanner(file)
	for scanner.Scan() {
		lines = append(lines, scanner.Text())
	}
	for _, line := range lines {
		//key, value, err := parseOsReleaseLine(v)
		if len(line) == 0 {
			continue
		}
		if line[0] == '#' {
			continue
		}
		splitted := strings.SplitN(line, "=", 2)
		if len(splitted) != 2 {
			continue
		}

		key := strings.Trim(strings.TrimSpace(splitted[0]), "\"")
		value := strings.Trim(strings.TrimSpace(splitted[1]), "\"")
		osrelease[key] = value
	}
	return
}
   07070100000098000081A4000000000000000000000001645E367C000018A8000000000000000000000000000000000000002400000000elemental-cli-0.3.1/pkg/utils/fs.go   // nolint:goheader

/*
Copyright © 2022 spf13/afero
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package utils

import (
	"fmt"
	"io/fs"
	"os"
	"path/filepath"
	"sort"
	"strconv"
	"strings"
	"sync"
	"syscall"
	"time"

	"github.com/twpayne/go-vfs"
	"github.com/twpayne/go-vfs/vfst"

	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
)

// DirSize returns the accumulated size of all files in folder. Result in bytes
func DirSize(fs v1.FS, path string) (int64, error) {
	var size int64
	err := vfs.Walk(fs, path, func(_ string, info os.FileInfo, err error) error {
		if err != nil {
			return err
		}
		if !info.IsDir() {
			size += info.Size()
		}
		return err
	})
	return size, err
}

// DirSizeMB returns the accumulated size of all files in folder. Result in Megabytes
func DirSizeMB(fs v1.FS, path string) (uint, error) {
	size, err := DirSize(fs, path)
	if err != nil {
		return 0, err
	}

	MB := int64(1024 * 1024)
	sizeMB := (size/MB*MB + MB) / MB
	if sizeMB > 0 {
		return uint(sizeMB), nil
	}
	return 0, fmt.Errorf("Negative size calculation: %d", sizeMB)
}

// Check if a file or directory exists.
func Exists(fs v1.FS, path string) (bool, error) {
	_, err := fs.Stat(path)
	if err == nil {
		return true, nil
	}
	if os.IsNotExist(err) {
		return false, nil
	}
	return false, err
}

// IsDir check if the path is a dir
func IsDir(fs v1.FS, path string) (bool, error) {
	fi, err := fs.Stat(path)
	if err != nil {
		return false, err
	}
	return fi.IsDir(), nil
}

// MkdirAll directory and all parents if not existing
func MkdirAll(fs v1.FS, name string, mode os.FileMode) (err error) {
	if _, isReadOnly := fs.(*vfs.ReadOnlyFS); isReadOnly {
		return permError("mkdir", name)
	}
	if name, err = fs.RawPath(name); err != nil {
		return &os.PathError{Op: "mkdir", Path: name, Err: err}
	}
	return os.MkdirAll(name, mode)
}

// permError returns an *os.PathError with Err syscall.EPERM.
func permError(op, path string) error {
	return &os.PathError{
		Op:   op,
		Path: path,
		Err:  syscall.EPERM,
	}
}

// Random number state.
// We generate random temporary file names so that there's a good
// chance the file doesn't exist yet - keeps the number of tries in
// TempFile to a minimum.
var (
	randSeed uint32
	randmu   sync.Mutex
)

func reseed() uint32 {
	return uint32(time.Now().UnixNano() + int64(os.Getpid()))
}

func nextRandom() string {
	randmu.Lock()
	r := randSeed
	if r == 0 {
		r = reseed()
	}
	r = r*1664525 + 1013904223 // constants from Numerical Recipes
	randSeed = r
	randmu.Unlock()
	return strconv.Itoa(int(1e9 + r%1e9))[1:]
}

// TempDir creates a temp file in the virtual fs
// Took from afero.FS code and adapted
func TempDir(fs v1.FS, dir, prefix string) (name string, err error) {
	if dir == "" {
		dir = os.TempDir()
	}
	// This skips adding random stuff to the created temp dir so the temp dir created is predictable for testing
	if _, isTestFs := fs.(*vfst.TestFS); isTestFs {
		err = MkdirAll(fs, filepath.Join(dir, prefix), 0700)
		if err != nil {
			return "", err
		}
		name = filepath.Join(dir, prefix)
		return
	}
	nconflict := 0
	for i := 0; i < 10000; i++ {
		try := filepath.Join(dir, prefix+nextRandom())
		err = MkdirAll(fs, try, 0700)
		if os.IsExist(err) {
			if nconflict++; nconflict > 10 {
				randmu.Lock()
				randSeed = reseed()
				randmu.Unlock()
			}
			continue
		}
		if err == nil {
			name = try
		}
		break
	}
	return
}

// TempFile creates a temp file in the virtual fs
// Took from afero.FS code and adapted
func TempFile(fs v1.FS, dir, pattern string) (f *os.File, err error) {
	if dir == "" {
		dir = os.TempDir()
	}

	var prefix, suffix string
	if pos := strings.LastIndex(pattern, "*"); pos != -1 {
		prefix, suffix = pattern[:pos], pattern[pos+1:]
	} else {
		prefix = pattern
	}

	nconflict := 0
	for i := 0; i < 10000; i++ {
		name := filepath.Join(dir, prefix+nextRandom()+suffix)
		f, err = fs.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0600)
		if os.IsExist(err) {
			if nconflict++; nconflict > 10 {
				randmu.Lock()
				randSeed = reseed()
				randmu.Unlock()
			}
			continue
		}
		break
	}
	return
}

// Walkdir with an FS implementation
type statDirEntry struct {
	info fs.FileInfo
}

func (d *statDirEntry) Name() string               { return d.info.Name() }
func (d *statDirEntry) IsDir() bool                { return d.info.IsDir() }
func (d *statDirEntry) Type() fs.FileMode          { return d.info.Mode().Type() }
func (d *statDirEntry) Info() (fs.FileInfo, error) { return d.info, nil }

// WalkDirFs is the same as filepath.WalkDir but accepts a v1.Fs so it can be run on any v1.Fs type
func WalkDirFs(fs v1.FS, root string, fn fs.WalkDirFunc) error {
	info, err := fs.Stat(root)
	if err != nil {
		err = fn(root, nil, err)
	} else {
		err = walkDir(fs, root, &statDirEntry{info}, fn)
	}
	if err == filepath.SkipDir {
		return nil
	}
	return err
}

func walkDir(fs v1.FS, path string, d fs.DirEntry, walkDirFn fs.WalkDirFunc) error {
	if err := walkDirFn(path, d, nil); err != nil || !d.IsDir() {
		if err == filepath.SkipDir && d.IsDir() {
			// Successfully skipped directory.
			err = nil
		}
		return err
	}

	dirs, err := readDir(fs, path)
	if err != nil {
		// Second call, to report ReadDir error.
		err = walkDirFn(path, d, err)
		if err != nil {
			return err
		}
	}

	for _, d1 := range dirs {
		path1 := filepath.Join(path, d1.Name())
		if err := walkDir(fs, path1, d1, walkDirFn); err != nil {
			if err == filepath.SkipDir {
				break
			}
			return err
		}
	}
	return nil
}

func readDir(fs v1.FS, dirname string) ([]fs.DirEntry, error) {
	f, err := fs.Open(dirname)
	if err != nil {
		return nil, err
	}
	dirs, err := f.ReadDir(-1)
	f.Close()
	if err != nil {
		return nil, err
	}
	sort.Slice(dirs, func(i, j int) bool { return dirs[i].Name() < dirs[j].Name() })
	return dirs, nil
}
07070100000099000081A4000000000000000000000001645E367C00000A23000000000000000000000000000000000000002F00000000elemental-cli-0.3.1/pkg/utils/getpartitions.go    /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package utils

import (
	"fmt"
	"path/filepath"
	"strings"

	"github.com/jaypipes/ghw"
	"github.com/jaypipes/ghw/pkg/block"
	ghwUtil "github.com/jaypipes/ghw/pkg/util"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
)

// ghwPartitionToInternalPartition transforms a block.Partition from ghw lib to our v1.Partition type
func ghwPartitionToInternalPartition(partition *block.Partition) *v1.Partition {
	return &v1.Partition{
		FilesystemLabel: partition.FilesystemLabel,
		Size:            uint(partition.SizeBytes / (1024 * 1024)), // Converts B to MB
		Name:            partition.Label,
		FS:              partition.Type,
		Flags:           nil,
		MountPoint:      partition.MountPoint,
		Path:            filepath.Join("/dev", partition.Name),
		Disk:            filepath.Join("/dev", partition.Disk.Name),
	}
}

// GetAllPartitions returns all partitions in the system for all disks
func GetAllPartitions() (v1.PartitionList, error) {
	var parts []*v1.Partition
	blockDevices, err := block.New(ghw.WithDisableTools(), ghw.WithDisableWarnings())
	if err != nil {
		return nil, err
	}
	for _, d := range blockDevices.Disks {
		for _, part := range d.Partitions {
			parts = append(parts, ghwPartitionToInternalPartition(part))
		}
	}
	return parts, nil
}

// GetPartitionFS gets the FS of a partition given
func GetPartitionFS(partition string) (string, error) {
	// We want to have the device always prefixed with a /dev
	if !strings.HasPrefix(partition, "/dev") {
		partition = filepath.Join("/dev", partition)
	}
	blockDevices, err := block.New(ghw.WithDisableTools(), ghw.WithDisableWarnings())
	if err != nil {
		return "", err
	}

	for _, disk := range blockDevices.Disks {
		for _, part := range disk.Partitions {
			if filepath.Join("/dev", part.Name) == partition {
				if part.Type == ghwUtil.UNKNOWN {
					return "", fmt.Errorf("could not find filesystem for partition %s", partition)
				}
				return part.Type, nil
			}
		}
	}
	return "", fmt.Errorf("could not find filesystem for partition %s", partition)
}
 0707010000009A000081A4000000000000000000000001645E367C00003113000000000000000000000000000000000000002600000000elemental-cli-0.3.1/pkg/utils/grub.go /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package utils

import (
	"bytes"
	"fmt"
	"io/fs"
	"path/filepath"
	"regexp"
	"strings"

	efilib "github.com/canonical/go-efilib"

	cnst "github.com/rancher/elemental-cli/pkg/constants"
	eleefi "github.com/rancher/elemental-cli/pkg/efi"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
)

const (
	bootEntryName   = "elemental-shim"
	grubConfDir     = "grub2"
	entryEFIPath    = "/EFI/elemental"
	fallbackEFIPath = "/EFI/boot"
	grubCfgFile     = "grub.cfg"

	grubEFICfgTmpl = `
search --no-floppy --label --set=root %s
set prefix=($root)/` + grubConfDir + `
configfile ($root)/` + grubConfDir + `/%s
`
)

// Grub is the struct that will allow us to install grub to the target device
type Grub struct {
	config *v1.Config
}

func NewGrub(config *v1.Config) *Grub {
	g := &Grub{
		config: config,
	}

	return g
}

// InstallBIOS runs grub2-install for legacy BIOS firmware
func (g Grub) InstallBIOS(target, rootDir, bootDir string) error {
	var grubargs []string

	g.config.Logger.Info("Installing GRUB..")

	grubargs = append(
		grubargs,
		fmt.Sprintf("--root-directory=%s", rootDir),
		fmt.Sprintf("--boot-directory=%s", bootDir),
		"--target=i386-pc",
		target,
	)
	g.config.Logger.Debugf("Running grub with the following args: %s", grubargs)

	// TODOS:
	//   * should be executed in a chroot (host might have a different grub version or different bootloader)
	//   * should find the proper binary grub2-install vs grub-install
	out, err := g.config.Runner.Run("grub2-install", grubargs...)
	if err != nil {
		g.config.Logger.Errorf(string(out))
		return err
	}
	g.config.Logger.Infof("Grub install to device %s complete", target)

	return nil
}

// InstallConfig installs grub configuraton files to the expected location.  rootDir is the root
// of the OS image, bootDir is the folder grub read the configuration from, usually state partition mountpoint
func (g Grub) InstallConfig(rootDir, bootDir, grubConf string) error {
	grubFile := filepath.Join(rootDir, grubConf)
	dstGrubFile := filepath.Join(bootDir, grubConfDir, grubCfgFile)

	g.config.Logger.Infof("Using grub config file %s", grubFile)

	// Create Needed dir under state partition to store the grub.cfg and any needed modules
	err := MkdirAll(g.config.Fs, filepath.Join(bootDir, grubConfDir), cnst.DirPerm)
	if err != nil {
		return fmt.Errorf("error creating grub dir: %s", err)
	}

	g.config.Logger.Infof("Copying grub config file from %s to %s", grubFile, dstGrubFile)
	err = CopyFile(g.config.Fs, grubFile, dstGrubFile)
	if err != nil {
		g.config.Logger.Errorf("Failed copying grub config file: %s", err)
	}
	return err
}

// DoEFIEntries creates clears any previous entry if requested and creates a new one with the given shim name.
func (g Grub) DoEFIEntries(shimName, efiDir string, clearBootEntries bool) error {
	efivars := eleefi.RealEFIVariables{}
	if clearBootEntries {
		err := g.ClearBootEntry()
		if err != nil {
			return err
		}
	}
	return g.CreateBootEntry(shimName, filepath.Join(efiDir, entryEFIPath), efivars)
}

// InstallEFI installs EFI binaries into the EFI location
func (g Grub) InstallEFI(rootDir, bootDir, efiDir, deviceLabel string) (string, error) {
	// Copy required extra modules to boot dir under the state partition
	// otherwise if we insmod it will fail to find them
	// We no longer call grub-install here so the modules are not setup automatically in the state partition
	// as they were before. We now use the bundled grub.efi provided by the shim package
	var err error
	g.config.Logger.Infof("Generating grub files for efi on %s", efiDir)

	// Create Needed dir under state partition to store the grub.cfg and any needed modules
	err = MkdirAll(g.config.Fs, filepath.Join(bootDir, grubConfDir, fmt.Sprintf("%s-efi", g.config.Platform.Arch)), cnst.DirPerm)
	if err != nil {
		return "", fmt.Errorf("error creating grub dir: %s", err)
	}

	var foundModules bool
	var foundEfi bool
	for _, m := range []string{"loopback.mod", "squash4.mod", "xzio.mod"} {
		err = WalkDirFs(g.config.Fs, rootDir, func(path string, d fs.DirEntry, err error) error {
			if err != nil {
				return err
			}
			if d.Name() == m && strings.Contains(path, g.config.Platform.Arch) {
				fileWriteName := filepath.Join(bootDir, grubConfDir, fmt.Sprintf("%s-efi", g.config.Platform.Arch), m)
				g.config.Logger.Debugf("Copying %s to %s", path, fileWriteName)
				err = CopyFile(g.config.Fs, path, fileWriteName)
				if err != nil {
					return fmt.Errorf("error copying %s to %s: %s", path, fileWriteName, err.Error())
				}
				foundModules = true
				return nil
			}
			return err
		})
		if !foundModules {
			return "", fmt.Errorf("did not find grub modules under %s (err: %s)", rootDir, err)
		}
	}

	err = MkdirAll(g.config.Fs, filepath.Join(efiDir, fallbackEFIPath), cnst.DirPerm)
	if err != nil {
		g.config.Logger.Errorf("Error creating dirs: %s", err)
		return "", err
	}
	err = MkdirAll(g.config.Fs, filepath.Join(efiDir, entryEFIPath), cnst.DirPerm)
	if err != nil {
		g.config.Logger.Errorf("Error creating dirs: %s", err)
		return "", err
	}

	// Copy needed files for efi boot
	system, err := IdentifySourceSystem(g.config.Fs, rootDir)
	if err != nil {
		return "", err
	}
	g.config.Logger.Infof("Identified source system as %s", system)

	var shimFiles []string
	var shimName string

	switch system {
	case cnst.Fedora:
		switch g.config.Platform.Arch {
		case cnst.ArchArm64:
			shimFiles = []string{"shimaa64.efi", "mmaa64.efi", "grubx64.efi"}
			shimName = "shimaa64.efi"
		default:
			shimFiles = []string{"shimx64.efi", "mmx64.efi", "grubx64.efi"}
			shimName = "shimx64.efi"
		}
	case cnst.Ubuntu:
		switch g.config.Platform.Arch {
		case cnst.ArchArm64:
			shimFiles = []string{"shimaa64.efi.signed", "mmaa64.efi", "grubx64.efi.signed"}
			shimName = "shimaa64.efi.signed"
		default:
			shimFiles = []string{"shimx64.efi.signed", "mmx64.efi", "grubx64.efi.signed"}
			shimName = "shimx64.efi.signed"
		}
	case cnst.Suse:
		shimFiles = []string{"shim.efi", "MokManager.efi", "grub.efi"}
		shimName = "shim.efi"
	}

	for _, f := range shimFiles {
		_ = WalkDirFs(g.config.Fs, rootDir, func(path string, d fs.DirEntry, err error) error {
			if err != nil {
				return err
			}

			if d.Name() == f {
				// Copy to fallback dir
				fileWriteName := filepath.Join(efiDir, fallbackEFIPath, f)
				g.config.Logger.Debugf("Copying %s to %s", path, fileWriteName)
				err = CopyFile(g.config.Fs, path, fileWriteName)
				if err != nil {
					return fmt.Errorf("failed copying %s to %s: %s", path, fileWriteName, err.Error())
				}

				// Copy to proper dir
				fileWriteName = filepath.Join(efiDir, entryEFIPath, f)
				g.config.Logger.Debugf("Copying %s to %s", path, fileWriteName)
				err = CopyFile(g.config.Fs, path, fileWriteName)
				if err != nil {
					return fmt.Errorf("failed copying %s to %s: %s", path, fileWriteName, err.Error())
				}

				foundEfi = true
				return nil
			}
			return err
		})
		if !foundEfi {
			return "", fmt.Errorf("did not find efi artifacts under %s", rootDir)
		}
	}

	// Rename the shimName to the fallback name so the system boots from fallback. This means that we do not create
	// any bootloader entries, so our recent installation has the lower priority if something else is on the bootloader
	writeShim := "bootx64.efi"

	if g.config.Platform.Arch == cnst.ArchArm64 {
		writeShim = "bootaa64.efi"
	}

	err = CopyFile(g.config.Fs, filepath.Join(efiDir, fallbackEFIPath, shimName), filepath.Join(efiDir, fallbackEFIPath, writeShim))
	if err != nil {
		return "", fmt.Errorf("failed copying shim %s: %s", writeShim, err.Error())
	}

	// Add grub.cfg in EFI that chainloads the grub.cfg in recovery
	// Notice that we set the config to /grub2/grub.cfg which means the above we need to copy the file from
	// the installation source into that dir
	grubCfgContent := []byte(fmt.Sprintf(grubEFICfgTmpl, deviceLabel, grubCfgFile))
	// Fallback
	err = g.config.Fs.WriteFile(filepath.Join(efiDir, fallbackEFIPath, grubCfgFile), grubCfgContent, cnst.FilePerm)
	if err != nil {
		return "", fmt.Errorf("error writing %s: %s", filepath.Join(efiDir, fallbackEFIPath, grubCfgFile), err)
	}
	// Proper efi dir
	err = g.config.Fs.WriteFile(filepath.Join(efiDir, entryEFIPath, grubCfgFile), grubCfgContent, cnst.FilePerm)
	if err != nil {
		return "", fmt.Errorf("error writing %s: %s", filepath.Join(efiDir, entryEFIPath, grubCfgFile), err)
	}

	return shimName, nil
}

// Install installs grub into the device, copy the config file and add any extra TTY to grub
func (g Grub) Install(target, rootDir, bootDir, grubConf string, efi bool, stateLabel string, disableBootEntry bool, clearBootEntries bool) (err error) {
	var shimName string

	if efi {
		shimName, err = g.InstallEFI(rootDir, bootDir, cnst.EfiDir, stateLabel)
		if err != nil {
			return err
		}

		if !disableBootEntry {
			err = g.DoEFIEntries(shimName, cnst.EfiDir, clearBootEntries)
			if err != nil {
				return err
			}
		}
	} else {
		err = g.InstallBIOS(target, rootDir, bootDir)
		if err != nil {
			return err
		}
	}

	return g.InstallConfig(rootDir, bootDir, grubConf)
}

// ClearBootEntry will go over the BootXXXX efi vars and remove any that matches our name
// Used in install as we re-create the partitions, so the UUID of those partitions is no longer valid for the old entry
// And we don't want to leave a broken entry around
func (g Grub) ClearBootEntry() error {
	variables, _ := efilib.ListVariables()
	for _, v := range variables {
		if regexp.MustCompile(`Boot[0-9a-fA-F]{4}`).MatchString(v.Name) {
			variable, _, _ := efilib.ReadVariable(v.Name, v.GUID)
			option, err := efilib.ReadLoadOption(bytes.NewReader(variable))
			if err != nil {
				continue
			}
			// TODO: Find a way to identify the old VS new partition UUID and compare them before removing?
			if option.Description == bootEntryName {
				g.config.Logger.Debugf("Entry for %s already exists, removing it: %s", bootEntryName, option.String())
				_, attrs, err := efilib.ReadVariable(v.Name, v.GUID)
				if err != nil {
					g.config.Logger.Errorf("failed to remove efi entry %s: %s", v.Name, err.Error())
					return err
				}
				err = efilib.WriteVariable(v.Name, v.GUID, attrs, nil)
				if err != nil {
					g.config.Logger.Errorf("failed to remove efi entry %s: %s", v.Name, err.Error())
					return err
				}
			}
		}
	}
	return nil
}

// CreateBootEntry will create an entry in the efi vars for our shim and set it to boot first in the bootorder
func (g Grub) CreateBootEntry(shimName string, relativeTo string, efiVariables eleefi.Variables) error {
	g.config.Logger.Debugf("Creating boot entry for elemental pointing to shim %s/%s", entryEFIPath, shimName)
	bm, err := eleefi.NewBootManagerForVariables(efiVariables)
	if err != nil {
		return err
	}

	// HINT: FindOrCreate does not find older entries if the partition UUID has changed, i.e. on a reinstall.
	bootEntryNumber, err := bm.FindOrCreateEntry(eleefi.BootEntry{
		Filename:    shimName,
		Label:       bootEntryName,
		Description: bootEntryName,
	}, relativeTo)
	if err != nil {
		g.config.Logger.Errorf("error creating boot entry: %s", err.Error())
		return err
	}
	// Commit the new boot order by prepending our entry to the current boot order
	err = bm.PrependAndSetBootOrder([]int{bootEntryNumber})
	if err != nil {
		g.config.Logger.Errorf("error setting boot order: %s", err.Error())
		return err
	}
	g.config.Logger.Infof("Entry created for %s in the EFI boot manager", bootEntryName)
	return nil
}

// Sets the given key value pairs into as grub variables into the given file
func (g Grub) SetPersistentVariables(grubEnvFile string, vars map[string]string) error {
	for key, value := range vars {
		g.config.Logger.Debugf("Running grub2-editenv with params: %s set %s=%s", grubEnvFile, key, value)
		out, err := g.config.Runner.Run("grub2-editenv", grubEnvFile, "set", fmt.Sprintf("%s=%s", key, value))
		if err != nil {
			g.config.Logger.Errorf(fmt.Sprintf("Failed setting grub variables: %s", out))
			return err
		}
	}
	return nil
}
 0707010000009B000081A4000000000000000000000001645E367C000010E4000000000000000000000000000000000000002A00000000elemental-cli-0.3.1/pkg/utils/runstage.go /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package utils

import (
	"fmt"
	"strings"

	"github.com/hashicorp/go-multierror"
	"github.com/mudler/yip/pkg/schema"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	"gopkg.in/yaml.v3"
)

func onlyYAMLPartialErrors(er error) bool {
	if merr, ok := er.(*multierror.Error); ok {
		for _, e := range merr.Errors {
			// Skip partial unmarshalling errors
			// TypeError is throwed when it is possible to read the yaml partially
			// XXX: Seems errors.Is and errors.As are not working as expected here.
			// Even if the underlying type is yaml.TypeError.
			var d *yaml.TypeError
			if fmt.Sprintf("%T", e) != fmt.Sprintf("%T", d) {
				return false
			}
		}
	}
	return true
}

func checkYAMLError(cfg *v1.Config, allErrors, err error) error {
	if !onlyYAMLPartialErrors(err) {
		// here we absorb errors only if are related to YAML unmarshalling
		// As cmdline is parsed out as a yaml file
		allErrors = multierror.Append(allErrors, err)
	} else {
		cfg.Logger.Debug("/proc/cmdline parsing returned errors while unmarshalling. Ignoring as /proc/cmdline fields are turned to a YAML document, and partial failures are valid")
		cfg.Logger.Debug(err)
	}

	return allErrors
}

// RunStage will run yip
func RunStage(cfg *v1.Config, stage string, strict bool, cloudInitPaths ...string) error {
	var allErrors error

	cfg.Logger.Debugf("Cloud-init paths set to %v", cloudInitPaths)

	stageBefore := fmt.Sprintf("%s.before", stage)
	stageAfter := fmt.Sprintf("%s.after", stage)

	// Check if the cmdline has the cos.setup key and extract its value to run yip on that given uri
	cmdLineOut, err := cfg.Fs.ReadFile("/proc/cmdline")
	if err != nil {
		allErrors = multierror.Append(allErrors, err)
	}

	cmdLineArgs := strings.Split(string(cmdLineOut), " ")
	for _, line := range cmdLineArgs {
		if strings.Contains(line, "=") {
			lineSplit := strings.Split(line, "=")
			if lineSplit[0] == "cos.setup" {
				cloudInitPaths = append(cloudInitPaths, strings.TrimSpace(lineSplit[1]))
				cfg.Logger.Debugf("Found cos.setup stanza on cmdline with value %s", lineSplit[1])
			}
		}
	}

	// Run all stages for each of the default cloud config paths + extra cloud config paths
	if len(cloudInitPaths) > 0 {
		for _, s := range []string{stageBefore, stage, stageAfter} {
			err = cfg.CloudInitRunner.Run(s, filterNonExistingLocalURIs(cfg, cloudInitPaths...)...)
			if err != nil {
				allErrors = multierror.Append(allErrors, err)
			}
		}
	}

	// Run stages encoded from /proc/cmdlines
	cfg.CloudInitRunner.SetModifier(schema.DotNotationModifier)

	for _, s := range []string{stageBefore, stage, stageAfter} {
		err = cfg.CloudInitRunner.Run(s, string(cmdLineOut))
		if err != nil {
			allErrors = checkYAMLError(cfg, allErrors, err)
		}
	}

	cfg.CloudInitRunner.SetModifier(nil)

	// We return error here only if we have been running in strict mode.
	// Cloud configs are being loaded and executed on a best-effort, so every step/config
	// gets a chance to be executed and error is being appended and reported.
	if allErrors != nil && !strict {
		cfg.Logger.Info("Some errors found but were ignored. Enable --strict mode to fail on those or --debug to see them in the log")
		cfg.Logger.Warn(allErrors)
		return nil
	}

	return allErrors
}

// filterNonExistingLocalURIs attempts to remove non existing local paths from the given URI slice.
// Returns the filtered slice.
func filterNonExistingLocalURIs(cfg *v1.Config, uris ...string) []string {
	filteredPaths := []string{}
	for _, cp := range uris {
		if local, _ := IsLocalURI(cp); local {
			if ok, _ := Exists(cfg.Fs, cp); !ok {
				cfg.Logger.Debugf("Ignoring cloud-init local config path %s. Could not find it.", cp)
				continue
			}
		}
		filteredPaths = append(filteredPaths, cp)
	}
	return filteredPaths
}
0707010000009C000081A4000000000000000000000001645E367C000018EB000000000000000000000000000000000000002F00000000elemental-cli-0.3.1/pkg/utils/runstage_test.go    /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package utils_test

import (
	"bytes"
	"fmt"
	"os"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/rancher/elemental-cli/pkg/cloudinit"
	conf "github.com/rancher/elemental-cli/pkg/config"
	"github.com/rancher/elemental-cli/pkg/constants"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	"github.com/rancher/elemental-cli/pkg/utils"
	v1mock "github.com/rancher/elemental-cli/tests/mocks"
	log "github.com/sirupsen/logrus"
	"github.com/twpayne/go-vfs"
	"github.com/twpayne/go-vfs/vfst"
)

const testingStages = `
stages:
  luke:
  - commands:
    - echo "I have a very bad feeling about this"
`

func writeCmdline(s string, fs v1.FS) error {
	if err := fs.Mkdir("/proc", os.ModePerm); err != nil {
		return err
	}
	return fs.WriteFile("/proc/cmdline", []byte(s), os.ModePerm)
}

var _ = Describe("run stage", Label("RunStage"), func() {
	var config *v1.Config
	var runner *v1mock.FakeRunner
	var logger v1.Logger
	var syscall *v1mock.FakeSyscall
	var client *v1mock.FakeHTTPClient
	var mounter *v1mock.ErrorMounter
	var fs vfs.FS
	var memLog *bytes.Buffer

	var cleanup func()
	var strict bool

	BeforeEach(func() {
		strict = false
		runner = v1mock.NewFakeRunner()
		// Use a different config with a buffer for logger, so we can check the output
		// We also use the real fs
		memLog = &bytes.Buffer{}
		logger = v1.NewBufferLogger(memLog)
		fs, cleanup, _ = vfst.NewTestFS(nil)

		config = conf.NewConfig(
			conf.WithFs(fs),
			conf.WithRunner(runner),
			conf.WithLogger(logger),
			conf.WithMounter(mounter),
			conf.WithSyscall(syscall),
			conf.WithClient(client),
		)

		config.CloudInitRunner = cloudinit.NewYipCloudInitRunner(config.Logger, config.Runner, fs)
	})
	AfterEach(func() { cleanup() })

	It("fails if strict mode is enabled", Label("strict"), func() {
		d, err := utils.TempDir(fs, "", "elemental")
		Expect(err).ToNot(HaveOccurred())
		_ = fs.WriteFile(fmt.Sprintf("%s/test.yaml", d), []byte("stages: [foo,bar]"), os.ModePerm)
		strict = true
		Expect(utils.RunStage(config, "c3po", strict, d)).ToNot(BeNil())
	})

	It("does not fail but prints errors by default", Label("strict"), func() {
		writeCmdline("stages.c3po[0].datasource", fs)

		config.Logger.SetLevel(log.DebugLevel)
		out := utils.RunStage(config, "c3po", strict)
		Expect(out).To(BeNil())
		Expect(memLog.String()).To(ContainSubstring("parsing returned errors"))
	})

	It("Goes over extra paths", func() {
		d, err := utils.TempDir(fs, "", "elemental")
		Expect(err).ToNot(HaveOccurred())
		err = fs.WriteFile(fmt.Sprintf("%s/extra.yaml", d), []byte(testingStages), os.ModePerm)
		Expect(err).ShouldNot(HaveOccurred())
		config.Logger.SetLevel(log.DebugLevel)

		Expect(utils.RunStage(config, "luke", strict, d)).To(BeNil())
		Expect(memLog.String()).To(ContainSubstring(fmt.Sprintf("Reading '%s/extra.yaml'", d)))
		Expect(memLog).To(ContainSubstring("luke"))
		Expect(memLog).To(ContainSubstring("luke.before"))
		Expect(memLog).To(ContainSubstring("luke.after"))
	})

	It("parses cmdline uri", func() {
		d, _ := utils.TempDir(fs, "", "elemental")
		_ = fs.WriteFile(fmt.Sprintf("%s/test.yaml", d), []byte(testingStages), os.ModePerm)

		writeCmdline(fmt.Sprintf("cos.setup=%s/test.yaml", d), fs)
		config.Logger.SetLevel(log.DebugLevel)

		Expect(utils.RunStage(config, "luke", strict)).To(BeNil())
		Expect(memLog).To(ContainSubstring("luke"))
		Expect(memLog).To(ContainSubstring(fmt.Sprintf("%s/test.yaml", d)))
	})

	It("parses cmdline uri with dotnotation", func() {
		writeCmdline("stages.leia[0].commands[0]='echo beepboop'", fs)
		config.Logger.SetLevel(log.DebugLevel)
		Expect(utils.RunStage(config, "leia", strict)).To(BeNil())
		Expect(memLog).To(ContainSubstring("leia"))
		Expect(memLog).To(ContainSubstring("running command `echo beepboop`"))

		// try with a non-clean cmdline
		writeCmdline("BOOT=death-star single stages.leia[0].commands[0]='echo beepboop'", fs)
		Expect(utils.RunStage(config, "leia", strict)).To(BeNil())
		Expect(memLog).To(ContainSubstring("leia"))
		Expect(memLog).To(ContainSubstring("running command `echo beepboop`"))
		Expect(memLog.String()).ToNot(ContainSubstring("/proc/cmdline parsing returned errors while unmarshalling"))
		Expect(memLog.String()).ToNot(ContainSubstring("Some errors found but were ignored. Enable --strict mode to fail on those or --debug to see them in the log"))
	})

	It("ignores YAML errors", func() {
		config.Logger.SetLevel(log.DebugLevel)
		writeCmdline("BOOT=death-star sing1!~@$%6^&**le /varlib stag_#var<Lib stages[0]='utterly broken by breaking schema'", fs)
		Expect(utils.RunStage(config, "leia", strict)).To(BeNil())
		Expect(memLog.String()).To(ContainSubstring("/proc/cmdline parsing returned errors while unmarshalling"))
		Expect(memLog.String()).ToNot(ContainSubstring("Some errors found but were ignored. Enable --strict mode to fail on those or --debug to see them in the log"))
	})

	It("ignores non existing cloud-init paths", func() {
		ci := &v1mock.FakeCloudInitRunner{}
		config.CloudInitRunner = ci
		Expect(utils.MkdirAll(fs, "/existing", constants.DirPerm)).To(Succeed())
		// Symlinks to existing directoryes are also valid
		Expect(fs.Symlink("/existing", "/symlinkToExistingDir")).To(Succeed())

		writeCmdline("cos.setup=/wrongpath", fs)

		Expect(utils.RunStage(
			config, "stage", strict, "/nonexisting", "/existing",
			"/symlinkToExistingDir", "https://my.domain.org/cloud-file",
		)).To(BeNil())

		Expect(ci.GetStageArgs("stage")).To(ContainElement("/existing"))
		Expect(ci.GetStageArgs("stage")).To(ContainElement("/symlinkToExistingDir"))
		Expect(ci.GetStageArgs("stage")).To(ContainElement("https://my.domain.org/cloud-file"))
		Expect(ci.GetStageArgs("stage")).NotTo(ContainElement("/nonexisting"))
		Expect(ci.GetStageArgs("stage")).NotTo(ContainElement("/wrongpath"))
	})
})
 0707010000009D000081A4000000000000000000000001645E367C000002F6000000000000000000000000000000000000003200000000elemental-cli-0.3.1/pkg/utils/utils_suite_test.go /*
Copyright © 2021 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package utils_test

import (
	"testing"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

func TestWhitebox(t *testing.T) {
	RegisterFailHandler(Fail)
	RunSpecs(t, "Utils test suite")
}
  0707010000009E000081A4000000000000000000000001645E367C0000CEAA000000000000000000000000000000000000002C00000000elemental-cli-0.3.1/pkg/utils/utils_test.go   /*
Copyright © 2021 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package utils_test

import (
	"bytes"
	"encoding/binary"
	"encoding/hex"
	"errors"
	"fmt"
	"os"
	"path/filepath"
	"strings"
	"time"

	eleefi "github.com/rancher/elemental-cli/pkg/efi"

	efi "github.com/canonical/go-efilib"
	"github.com/jaypipes/ghw/pkg/block"
	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/twpayne/go-vfs"
	"github.com/twpayne/go-vfs/vfst"

	conf "github.com/rancher/elemental-cli/pkg/config"
	"github.com/rancher/elemental-cli/pkg/constants"
	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
	"github.com/rancher/elemental-cli/pkg/utils"
	v1mock "github.com/rancher/elemental-cli/tests/mocks"
)

func getNamesFromListFiles(list []os.FileInfo) []string {
	var names []string
	for _, f := range list {
		names = append(names, f.Name())
	}
	return names
}

var _ = Describe("Utils", Label("utils"), func() {
	var config *v1.Config
	var runner *v1mock.FakeRunner
	var logger v1.Logger
	var syscall *v1mock.FakeSyscall
	var client *v1mock.FakeHTTPClient
	var mounter *v1mock.ErrorMounter
	var extractor *v1mock.FakeImageExtractor
	var fs vfs.FS
	var cleanup func()

	BeforeEach(func() {
		runner = v1mock.NewFakeRunner()
		syscall = &v1mock.FakeSyscall{}
		mounter = v1mock.NewErrorMounter()
		client = &v1mock.FakeHTTPClient{}
		logger = v1.NewNullLogger()
		extractor = v1mock.NewFakeImageExtractor(logger)
		// Ensure /tmp exists in the VFS
		fs, cleanup, _ = vfst.NewTestFS(nil)
		fs.Mkdir("/tmp", constants.DirPerm)
		fs.Mkdir("/run", constants.DirPerm)
		fs.Mkdir("/etc", constants.DirPerm)

		config = conf.NewConfig(
			conf.WithFs(fs),
			conf.WithRunner(runner),
			conf.WithLogger(logger),
			conf.WithMounter(mounter),
			conf.WithSyscall(syscall),
			conf.WithClient(client),
			conf.WithImageExtractor(extractor),
		)
	})
	AfterEach(func() { cleanup() })

	Describe("Chroot", Label("chroot"), func() {
		var chroot *utils.Chroot
		BeforeEach(func() {
			chroot = utils.NewChroot(
				"/whatever",
				config,
			)
		})
		Describe("ChrootedCallback method", func() {
			It("runs a callback in a chroot", func() {
				err := utils.ChrootedCallback(config, "/somepath", map[string]string{}, func() error {
					return nil
				})
				Expect(err).ShouldNot(HaveOccurred())
				err = utils.ChrootedCallback(config, "/somepath", map[string]string{}, func() error {
					return fmt.Errorf("callback error")
				})
				Expect(err).Should(HaveOccurred())
				Expect(err.Error()).To(ContainSubstring("callback error"))
			})
		})
		Describe("on success", func() {
			It("command should be called in the chroot", func() {
				_, err := chroot.Run("chroot-command")
				Expect(err).To(BeNil())
				Expect(syscall.WasChrootCalledWith("/whatever")).To(BeTrue())
			})
			It("commands should be called with a customized chroot", func() {
				chroot.SetExtraMounts(map[string]string{"/real/path": "/in/chroot/path"})
				Expect(chroot.Prepare()).To(BeNil())
				defer chroot.Close()
				_, err := chroot.Run("chroot-command")
				Expect(err).To(BeNil())
				Expect(syscall.WasChrootCalledWith("/whatever")).To(BeTrue())
				_, err = chroot.Run("chroot-another-command")
				Expect(err).To(BeNil())
			})
			It("runs a callback in a custom chroot", func() {
				called := false
				callback := func() error {
					called = true
					return nil
				}
				err := chroot.RunCallback(callback)
				Expect(err).To(BeNil())
				Expect(syscall.WasChrootCalledWith("/whatever")).To(BeTrue())
				Expect(called).To(BeTrue())
			})
		})
		Describe("on failure", func() {
			It("should return error if chroot-command fails", func() {
				runner.ReturnError = errors.New("run error")
				_, err := chroot.Run("chroot-command")
				Expect(err).NotTo(BeNil())
				Expect(syscall.WasChrootCalledWith("/whatever")).To(BeTrue())
			})
			It("should return error if callback fails", func() {
				called := false
				callback := func() error {
					called = true
					return errors.New("Callback error")
				}
				err := chroot.RunCallback(callback)
				Expect(err).NotTo(BeNil())
				Expect(syscall.WasChrootCalledWith("/whatever")).To(BeTrue())
				Expect(called).To(BeTrue())
			})
			It("should return error if preparing twice before closing", func() {
				Expect(chroot.Prepare()).To(BeNil())
				defer chroot.Close()
				Expect(chroot.Prepare()).NotTo(BeNil())
				Expect(chroot.Close()).To(BeNil())
				Expect(chroot.Prepare()).To(BeNil())
			})
			It("should return error if failed to chroot", func() {
				syscall.ErrorOnChroot = true
				_, err := chroot.Run("chroot-command")
				Expect(err).ToNot(BeNil())
				Expect(syscall.WasChrootCalledWith("/whatever")).To(BeTrue())
				Expect(err.Error()).To(ContainSubstring("chroot error"))
			})
			It("should return error if failed to mount on prepare", Label("mount"), func() {
				mounter.ErrorOnMount = true
				_, err := chroot.Run("chroot-command")
				Expect(err).ToNot(BeNil())
				Expect(err.Error()).To(ContainSubstring("mount error"))
			})
			It("should return error if failed to unmount on close", Label("unmount"), func() {
				mounter.ErrorOnUnmount = true
				_, err := chroot.Run("chroot-command")
				Expect(err).ToNot(BeNil())
				Expect(err.Error()).To(ContainSubstring("failed closing chroot"))
			})
		})
	})
	Describe("TestBootedFrom", Label("BootedFrom"), func() {
		It("returns true if we are booting from label FAKELABEL", func() {
			runner.ReturnValue = []byte("")
			Expect(utils.BootedFrom(runner, "FAKELABEL")).To(BeFalse())
		})
		It("returns false if we are not booting from label FAKELABEL", func() {
			runner.ReturnValue = []byte("FAKELABEL")
			Expect(utils.BootedFrom(runner, "FAKELABEL")).To(BeTrue())
		})
	})
	Describe("GetDeviceByLabel", Label("lsblk", "partitions"), func() {
		var cmds [][]string
		BeforeEach(func() {
			cmds = [][]string{
				{"udevadm", "settle"},
			}
		})
		It("returns found device", func() {
			ghwTest := v1mock.GhwMock{}
			disk := block.Disk{Name: "device", Partitions: []*block.Partition{
				{
					Name:            "device1",
					FilesystemLabel: "FAKE",
				},
			}}
			ghwTest.AddDisk(disk)
			ghwTest.CreateDevices()
			defer ghwTest.Clean()
			out, err := utils.GetDeviceByLabel(runner, "FAKE", 1)
			Expect(err).To(BeNil())
			Expect(out).To(Equal("/dev/device1"))
			Expect(runner.CmdsMatch(cmds)).To(BeNil())
		})
		It("fails if no device is found in two attempts", func() {
			_, err := utils.GetDeviceByLabel(runner, "FAKE", 2)
			Expect(err).NotTo(BeNil())
			Expect(runner.CmdsMatch(append(cmds, cmds...))).To(BeNil())
		})
	})
	Describe("GetAllPartitions", Label("lsblk", "partitions"), func() {
		var ghwTest v1mock.GhwMock
		BeforeEach(func() {
			ghwTest = v1mock.GhwMock{}
			disk1 := block.Disk{
				Name: "sda",
				Partitions: []*block.Partition{
					{
						Name: "sda1Test",
					},
					{
						Name: "sda2Test",
					},
				},
			}
			disk2 := block.Disk{
				Name: "sdb",
				Partitions: []*block.Partition{
					{
						Name: "sdb1Test",
					},
				},
			}
			ghwTest.AddDisk(disk1)
			ghwTest.AddDisk(disk2)
			ghwTest.CreateDevices()
		})
		AfterEach(func() {
			ghwTest.Clean()
		})
		It("returns all found partitions", func() {
			parts, err := utils.GetAllPartitions()
			Expect(err).To(BeNil())
			var devices []string
			for _, p := range parts {
				devices = append(devices, p.Path)
			}
			Expect(devices).To(ContainElement(ContainSubstring("sda1Test")))
			Expect(devices).To(ContainElement(ContainSubstring("sda2Test")))
			Expect(devices).To(ContainElement(ContainSubstring("sdb1Test")))
		})
	})
	Describe("GetPartitionFS", Label("lsblk", "partitions"), func() {
		var ghwTest v1mock.GhwMock
		BeforeEach(func() {
			ghwTest = v1mock.GhwMock{}
			disk := block.Disk{Name: "device", Partitions: []*block.Partition{
				{
					Name: "device1",
					Type: "xfs",
				},
				{
					Name: "device2",
				},
			}}
			ghwTest.AddDisk(disk)
			ghwTest.CreateDevices()
		})
		AfterEach(func() {
			ghwTest.Clean()
		})
		It("returns found device with plain partition device", func() {
			pFS, err := utils.GetPartitionFS("device1")
			Expect(err).To(BeNil())
			Expect(pFS).To(Equal("xfs"))
		})
		It("returns found device with full partition device", func() {
			pFS, err := utils.GetPartitionFS("/dev/device1")
			Expect(err).To(BeNil())
			Expect(pFS).To(Equal("xfs"))
		})
		It("fails if no partition is found", func() {
			_, err := utils.GetPartitionFS("device2")
			Expect(err).NotTo(BeNil())
		})
	})
	Describe("CosignVerify", Label("cosign"), func() {
		It("runs a keyless verification", func() {
			_, err := utils.CosignVerify(fs, runner, "some/image:latest", "", true)
			Expect(err).To(BeNil())
			Expect(runner.CmdsMatch([][]string{{"cosign", "-d=true", "some/image:latest"}})).To(BeNil())
		})
		It("runs a verification using a public key", func() {
			_, err := utils.CosignVerify(fs, runner, "some/image:latest", "https://mykey.pub", false)
			Expect(err).To(BeNil())
			Expect(runner.CmdsMatch(
				[][]string{{"cosign", "-key", "https://mykey.pub", "some/image:latest"}},
			)).To(BeNil())
		})
		It("Fails to to create temporary directories", func() {
			_, err := utils.CosignVerify(vfs.NewReadOnlyFS(fs), runner, "some/image:latest", "", true)
			Expect(err).NotTo(BeNil())
		})
	})
	Describe("Reboot and shutdown", Label("reboot", "shutdown"), func() {
		It("reboots", func() {
			start := time.Now()
			utils.Reboot(runner, 2)
			duration := time.Since(start)
			Expect(runner.CmdsMatch([][]string{{"reboot", "-f"}})).To(BeNil())
			Expect(duration.Seconds() >= 2).To(BeTrue())
		})
		It("shuts down", func() {
			start := time.Now()
			utils.Shutdown(runner, 3)
			duration := time.Since(start)
			Expect(runner.CmdsMatch([][]string{{"poweroff", "-f"}})).To(BeNil())
			Expect(duration.Seconds() >= 3).To(BeTrue())
		})
	})
	Describe("GetFullDeviceByLabel", Label("lsblk", "partitions"), func() {
		var cmds [][]string
		BeforeEach(func() {
			cmds = [][]string{
				{"udevadm", "settle"},
			}
		})
		It("returns found v1.Partition", func() {
			var flags []string
			ghwTest := v1mock.GhwMock{}
			disk := block.Disk{Name: "device", Partitions: []*block.Partition{
				{
					Name:            "device1",
					FilesystemLabel: "FAKE",
					Type:            "fakefs",
					MountPoint:      "/mnt/fake",
					SizeBytes:       0,
				},
			}}
			ghwTest.AddDisk(disk)
			ghwTest.CreateDevices()
			defer ghwTest.Clean()
			out, err := utils.GetFullDeviceByLabel(runner, "FAKE", 1)
			Expect(err).To(BeNil())
			Expect(out.FilesystemLabel).To(Equal("FAKE"))
			Expect(out.Size).To(Equal(uint(0)))
			Expect(out.FS).To(Equal("fakefs"))
			Expect(out.MountPoint).To(Equal("/mnt/fake"))
			Expect(out.Flags).To(Equal(flags))
			Expect(runner.CmdsMatch(cmds)).To(BeNil())
		})
		It("fails to run lsblk", func() {
			runner.ReturnError = errors.New("failed running lsblk")
			_, err := utils.GetFullDeviceByLabel(runner, "FAKE", 1)
			Expect(err).To(HaveOccurred())
			Expect(runner.CmdsMatch(cmds)).To(BeNil())
		})
		It("fails to parse json output", func() {
			runner.ReturnValue = []byte(`{"invalidobject": []}`)
			_, err := utils.GetFullDeviceByLabel(runner, "FAKE", 1)
			Expect(err).To(HaveOccurred())
			Expect(runner.CmdsMatch(cmds)).To(BeNil())
		})
		It("fails if no device is found in two attempts", func() {
			runner.ReturnValue = []byte(`{"blockdevices":[{"label":"something","type": "part"}]}`)
			_, err := utils.GetFullDeviceByLabel(runner, "FAKE", 2)
			Expect(err).To(HaveOccurred())
			Expect(runner.CmdsMatch(append(cmds, cmds...))).To(BeNil())
		})
	})
	Describe("CopyFile", Label("CopyFile"), func() {
		It("Copies source file to target file", func() {
			err := utils.MkdirAll(fs, "/some", constants.DirPerm)
			Expect(err).ShouldNot(HaveOccurred())
			_, err = fs.Create("/some/file")
			Expect(err).ShouldNot(HaveOccurred())
			_, err = fs.Stat("/some/otherfile")
			Expect(err).Should(HaveOccurred())
			Expect(utils.CopyFile(fs, "/some/file", "/some/otherfile")).ShouldNot(HaveOccurred())
			e, err := utils.Exists(fs, "/some/otherfile")
			Expect(err).ShouldNot(HaveOccurred())
			Expect(e).To(BeTrue())
		})
		It("Copies source file to target folder", func() {
			err := utils.MkdirAll(fs, "/some", constants.DirPerm)
			Expect(err).ShouldNot(HaveOccurred())
			err = utils.MkdirAll(fs, "/someotherfolder", constants.DirPerm)
			Expect(err).ShouldNot(HaveOccurred())
			_, err = fs.Create("/some/file")
			Expect(err).ShouldNot(HaveOccurred())
			_, err = fs.Stat("/someotherfolder/file")
			Expect(err).Should(HaveOccurred())
			Expect(utils.CopyFile(fs, "/some/file", "/someotherfolder")).ShouldNot(HaveOccurred())
			e, err := utils.Exists(fs, "/someotherfolder/file")
			Expect(err).ShouldNot(HaveOccurred())
			Expect(e).To(BeTrue())
		})
		It("Fails to open non existing file", func() {
			err := utils.MkdirAll(fs, "/some", constants.DirPerm)
			Expect(err).ShouldNot(HaveOccurred())
			Expect(utils.CopyFile(fs, "/some/file", "/some/otherfile")).NotTo(BeNil())
			_, err = fs.Stat("/some/otherfile")
			Expect(err).NotTo(BeNil())
		})
		It("Fails to copy on non writable target", func() {
			err := utils.MkdirAll(fs, "/some", constants.DirPerm)
			Expect(err).ShouldNot(HaveOccurred())
			fs.Create("/some/file")
			_, err = fs.Stat("/some/otherfile")
			Expect(err).NotTo(BeNil())
			fs = vfs.NewReadOnlyFS(fs)
			Expect(utils.CopyFile(fs, "/some/file", "/some/otherfile")).NotTo(BeNil())
			_, err = fs.Stat("/some/otherfile")
			Expect(err).NotTo(BeNil())
		})
	})
	Describe("CreateDirStructure", Label("CreateDirStructure"), func() {
		It("Creates essential directories", func() {
			dirList := []string{"sys", "proc", "dev", "tmp", "boot", "usr/local", "oem"}
			for _, dir := range dirList {
				_, err := fs.Stat(fmt.Sprintf("/my/root/%s", dir))
				Expect(err).NotTo(BeNil())
			}
			Expect(utils.CreateDirStructure(fs, "/my/root")).To(BeNil())
			for _, dir := range dirList {
				fi, err := fs.Stat(fmt.Sprintf("/my/root/%s", dir))
				Expect(err).To(BeNil())
				if fi.Name() == "tmp" {
					Expect(fmt.Sprintf("%04o", fi.Mode().Perm())).To(Equal("0777"))
					Expect(fi.Mode() & os.ModeSticky).NotTo(Equal(0))
				}
				if fi.Name() == "sys" {
					Expect(fmt.Sprintf("%04o", fi.Mode().Perm())).To(Equal("0555"))
				}
			}
		})
		It("Fails on non writable target", func() {
			fs = vfs.NewReadOnlyFS(fs)
			Expect(utils.CreateDirStructure(fs, "/my/root")).NotTo(BeNil())
		})
	})
	Describe("SyncData", Label("SyncData"), func() {
		It("Copies all files from source to target", func() {
			sourceDir, err := utils.TempDir(fs, "", "elementalsource")
			Expect(err).ShouldNot(HaveOccurred())
			destDir, err := utils.TempDir(fs, "", "elementaltarget")
			Expect(err).ShouldNot(HaveOccurred())

			for i := 0; i < 5; i++ {
				_, _ = utils.TempFile(fs, sourceDir, "file*")
			}

			Expect(utils.SyncData(logger, fs, sourceDir, destDir)).To(BeNil())

			filesDest, err := fs.ReadDir(destDir)
			Expect(err).To(BeNil())

			destNames := getNamesFromListFiles(filesDest)
			filesSource, err := fs.ReadDir(sourceDir)
			Expect(err).To(BeNil())

			SourceNames := getNamesFromListFiles(filesSource)

			// Should be the same files in both dirs now
			Expect(destNames).To(Equal(SourceNames))
		})

		It("Copies all files from source to target respecting excludes", func() {
			sourceDir, err := utils.TempDir(fs, "", "elementalsource")
			Expect(err).ShouldNot(HaveOccurred())
			destDir, err := utils.TempDir(fs, "", "elementaltarget")
			Expect(err).ShouldNot(HaveOccurred())

			utils.MkdirAll(fs, filepath.Join(sourceDir, "host"), constants.DirPerm)
			utils.MkdirAll(fs, filepath.Join(sourceDir, "run"), constants.DirPerm)

			// /tmp/run would be excluded as well, as we define an exclude without the "/" prefix
			utils.MkdirAll(fs, filepath.Join(sourceDir, "tmp", "run"), constants.DirPerm)

			for i := 0; i < 5; i++ {
				_, _ = utils.TempFile(fs, sourceDir, "file*")
			}

			Expect(utils.SyncData(logger, fs, sourceDir, destDir, "host", "run")).To(BeNil())

			filesDest, err := fs.ReadDir(destDir)
			Expect(err).To(BeNil())

			destNames := getNamesFromListFiles(filesDest)

			filesSource, err := fs.ReadDir(sourceDir)
			Expect(err).To(BeNil())

			SourceNames := getNamesFromListFiles(filesSource)

			// Shouldn't be the same
			Expect(destNames).ToNot(Equal(SourceNames))
			expected := []string{}

			for _, s := range SourceNames {
				if s != "host" && s != "run" {
					expected = append(expected, s)
				}
			}
			Expect(destNames).To(Equal(expected))

			// /tmp/run is not copied over
			Expect(utils.Exists(fs, filepath.Join(destDir, "tmp", "run"))).To(BeFalse())
		})

		It("Copies all files from source to target respecting excludes with '/' prefix", func() {
			sourceDir, err := utils.TempDir(fs, "", "elementalsource")
			Expect(err).ShouldNot(HaveOccurred())
			destDir, err := utils.TempDir(fs, "", "elementaltarget")
			Expect(err).ShouldNot(HaveOccurred())

			utils.MkdirAll(fs, filepath.Join(sourceDir, "host"), constants.DirPerm)
			utils.MkdirAll(fs, filepath.Join(sourceDir, "run"), constants.DirPerm)
			utils.MkdirAll(fs, filepath.Join(sourceDir, "var", "run"), constants.DirPerm)
			utils.MkdirAll(fs, filepath.Join(sourceDir, "tmp", "host"), constants.DirPerm)

			Expect(utils.SyncData(logger, fs, sourceDir, destDir, "/host", "/run")).To(BeNil())

			filesDest, err := fs.ReadDir(destDir)
			Expect(err).To(BeNil())

			destNames := getNamesFromListFiles(filesDest)

			filesSource, err := fs.ReadDir(sourceDir)
			Expect(err).To(BeNil())

			SourceNames := getNamesFromListFiles(filesSource)

			// Shouldn't be the same
			Expect(destNames).ToNot(Equal(SourceNames))

			Expect(utils.Exists(fs, filepath.Join(destDir, "var", "run"))).To(BeTrue())
			Expect(utils.Exists(fs, filepath.Join(destDir, "tmp", "host"))).To(BeTrue())
			Expect(utils.Exists(fs, filepath.Join(destDir, "host"))).To(BeFalse())
			Expect(utils.Exists(fs, filepath.Join(destDir, "run"))).To(BeFalse())
		})

		It("should not fail if dirs are empty", func() {
			sourceDir, err := utils.TempDir(fs, "", "elementalsource")
			Expect(err).ShouldNot(HaveOccurred())
			destDir, err := utils.TempDir(fs, "", "elementaltarget")
			Expect(err).ShouldNot(HaveOccurred())
			Expect(utils.SyncData(logger, fs, sourceDir, destDir)).To(BeNil())
		})
		It("should fail if destination does not exist", func() {
			sourceDir, err := os.MkdirTemp("", "elemental")
			Expect(err).To(BeNil())
			defer os.RemoveAll(sourceDir)
			Expect(utils.SyncData(logger, nil, sourceDir, "/welp")).NotTo(BeNil())
		})
		It("should fail if source does not exist", func() {
			destDir, err := os.MkdirTemp("", "elemental")
			Expect(err).To(BeNil())
			defer os.RemoveAll(destDir)
			Expect(utils.SyncData(logger, nil, "/welp", destDir)).NotTo(BeNil())
		})
	})
	Describe("IsLocalURI", Label("uri"), func() {
		It("Detects a local url", func() {
			local, err := utils.IsLocalURI("file://some/path")
			Expect(err).To(BeNil())
			Expect(local).To(BeTrue())
		})
		It("Detects a local path", func() {
			local, err := utils.IsLocalURI("/some/path")
			Expect(err).To(BeNil())
			Expect(local).To(BeTrue())
		})
		It("Detects a remote uri", func() {
			local, err := utils.IsLocalURI("http://something.org")
			Expect(err).To(BeNil())
			Expect(local).To(BeFalse())
		})
		It("Detects a remote uri", func() {
			local, err := utils.IsLocalURI("some.domain.org:33/some/path")
			Expect(err).To(BeNil())
			Expect(local).To(BeFalse())
			local, err = utils.IsLocalURI("some.domain.org/some/path:latest")
			Expect(err).To(BeNil())
			Expect(local).To(BeFalse())
		})
		It("Fails on invalid URL", func() {
			local, err := utils.IsLocalURI("$htt:|//insane.stuff")
			Expect(err).NotTo(BeNil())
			Expect(local).To(BeFalse())
		})
	})
	Describe("IsHTTPURI", Label("uri"), func() {
		It("Detects a http url", func() {
			local, err := utils.IsHTTPURI("http://domain.org/path")
			Expect(err).To(BeNil())
			Expect(local).To(BeTrue())
		})
		It("Detects a https url", func() {
			local, err := utils.IsHTTPURI("https://domain.org/path")
			Expect(err).To(BeNil())
			Expect(local).To(BeTrue())
		})
		It("Detects it is a non http URL", func() {
			local, err := utils.IsHTTPURI("file://path")
			Expect(err).To(BeNil())
			Expect(local).To(BeFalse())
			local, err = utils.IsHTTPURI("container.reg.org:1024/some/repository")
			Expect(err).To(BeNil())
			Expect(local).To(BeFalse())
		})
		It("Fails on invalid URL", func() {
			local, err := utils.IsLocalURI("$htt:|//insane.stuff")
			Expect(err).NotTo(BeNil())
			Expect(local).To(BeFalse())
		})
	})
	Describe("GetSource", Label("GetSource"), func() {
		It("Fails on invalid url", func() {
			Expect(utils.GetSource(config, "$htt:|//insane.stuff", "/tmp/dest")).NotTo(BeNil())
		})
		It("Fails on readonly destination", func() {
			config.Fs = vfs.NewReadOnlyFS(fs)
			Expect(utils.GetSource(config, "http://something.org", "/tmp/dest")).NotTo(BeNil())
		})
		It("Fails on non existing local source", func() {
			Expect(utils.GetSource(config, "/some/missing/file", "/tmp/dest")).NotTo(BeNil())
		})
		It("Fails on http client error", func() {
			client.Error = true
			url := "https://missing.io"
			Expect(utils.GetSource(config, url, "/tmp/dest")).NotTo(BeNil())
			client.WasGetCalledWith(url)
		})
		It("Copies local file to destination", func() {
			fs.Create("/tmp/file")
			Expect(utils.GetSource(config, "file:///tmp/file", "/tmp/dest")).To(BeNil())
			_, err := fs.Stat("/tmp/dest")
			Expect(err).To(BeNil())
		})
	})
	Describe("ValidContainerReference", Label("reference"), func() {
		It("Returns true on valid references", func() {
			Expect(utils.ValidContainerReference("opensuse/leap:15.3")).To(BeTrue())
			Expect(utils.ValidContainerReference("opensuse")).To(BeTrue())
			Expect(utils.ValidContainerReference("registry.suse.com/opensuse/something")).To(BeTrue())
			Expect(utils.ValidContainerReference("registry.suse.com:8080/something:253")).To(BeTrue())
		})
		It("Returns false on invalid references", func() {
			Expect(utils.ValidContainerReference("opensuse/leap:15+3")).To(BeFalse())
			Expect(utils.ValidContainerReference("opensusE")).To(BeFalse())
			Expect(utils.ValidContainerReference("registry.suse.com:8080/Something:253")).To(BeFalse())
			Expect(utils.ValidContainerReference("http://registry.suse.com:8080/something:253")).To(BeFalse())
		})
	})
	Describe("ValidTaggedContainerReference", Label("reference"), func() {
		It("Returns true on valid references including explicit tag", func() {
			Expect(utils.ValidTaggedContainerReference("opensuse/leap:15.3")).To(BeTrue())
			Expect(utils.ValidTaggedContainerReference("registry.suse.com/opensuse/something:latest")).To(BeTrue())
			Expect(utils.ValidTaggedContainerReference("registry.suse.com:8080/something:253")).To(BeTrue())
		})
		It("Returns false on valid references without explicit tag", func() {
			Expect(utils.ValidTaggedContainerReference("opensuse")).To(BeFalse())
			Expect(utils.ValidTaggedContainerReference("registry.suse.com/opensuse/something")).To(BeFalse())
			Expect(utils.ValidTaggedContainerReference("registry.suse.com:8080/something")).To(BeFalse())
		})
	})
	Describe("DirSize", Label("fs"), func() {
		BeforeEach(func() {
			err := utils.MkdirAll(fs, "/folder/subfolder", constants.DirPerm)
			Expect(err).ShouldNot(HaveOccurred())
			f, err := fs.Create("/folder/file")
			Expect(err).ShouldNot(HaveOccurred())
			err = f.Truncate(1024)
			Expect(err).ShouldNot(HaveOccurred())
			f, err = fs.Create("/folder/subfolder/file")
			Expect(err).ShouldNot(HaveOccurred())
			err = f.Truncate(2048)
			Expect(err).ShouldNot(HaveOccurred())
		})
		It("Returns the expected size of a test folder", func() {
			size, err := utils.DirSize(fs, "/folder")
			Expect(err).ShouldNot(HaveOccurred())
			Expect(size).To(Equal(int64(3072)))
		})
		It("Returns the expected size of a test folder", func() {
			err := fs.Chmod("/folder/subfolder", 0600)
			Expect(err).ShouldNot(HaveOccurred())
			_, err = utils.DirSize(fs, "/folder")
			Expect(err).Should(HaveOccurred())
		})
	})
	Describe("FindFileWithPrefix", Label("find"), func() {
		BeforeEach(func() {
			err := utils.MkdirAll(fs, "/path/inner", constants.DirPerm)
			Expect(err).ShouldNot(HaveOccurred())

			_, err = fs.Create("/path/onefile")
			Expect(err).ShouldNot(HaveOccurred())

			_, err = fs.Create("/path/somefile")
			Expect(err).ShouldNot(HaveOccurred())

			err = fs.Symlink("onefile", "/path/linkedfile")
			Expect(err).ShouldNot(HaveOccurred())

			err = fs.Symlink("/path/onefile", "/path/abslinkedfile")
			Expect(err).ShouldNot(HaveOccurred())
		})
		It("finds a matching file", func() {
			f, err := utils.FindFileWithPrefix(fs, "/path", "prefix", "some")
			Expect(err).ShouldNot(HaveOccurred())
			Expect(f).To(Equal("/path/somefile"))
		})
		It("finds a matching file, but returns the target of a relative symlink", func() {
			// apparently fs.Readlink returns the raw path so we need to
			// use raw paths here. This is an arguable behavior
			rawPath, err := fs.RawPath("/path")
			Expect(err).ShouldNot(HaveOccurred())

			f, err := utils.FindFileWithPrefix(vfs.OSFS, rawPath, "linked")
			Expect(err).ShouldNot(HaveOccurred())

			Expect(err).ShouldNot(HaveOccurred())
			Expect(f).To(Equal(filepath.Join(rawPath, "onefile")))
		})
		It("finds a matching file, but returns the target of an absolute symlink", func() {
			// apparently fs.Readlink returns the raw path so we need to
			// use raw paths here. This is an arguable behavior
			rawPath, err := fs.RawPath("/path")
			Expect(err).ShouldNot(HaveOccurred())

			f, err := utils.FindFileWithPrefix(vfs.OSFS, rawPath, "abslinked")
			Expect(err).ShouldNot(HaveOccurred())

			Expect(err).ShouldNot(HaveOccurred())
			Expect(f).To(Equal(filepath.Join(rawPath, "onefile")))
		})
		It("fails to read given path", func() {
			_, err := utils.FindFileWithPrefix(fs, "nonexisting", "some")
			Expect(err).Should(HaveOccurred())
		})
		It("doesn't find any matching file in path", func() {
			utils.MkdirAll(fs, "/path", constants.DirPerm)
			_, err := utils.FindFileWithPrefix(fs, "/path", "prefix", "anotherprefix")
			Expect(err).Should(HaveOccurred())
		})
	})
	Describe("CalcFileChecksum", Label("checksum"), func() {
		It("compute correct sha256 checksum", func() {
			testData := strings.Repeat("abcdefghilmnopqrstuvz\n", 20)
			testDataSHA256 := "7f182529f6362ae9cfa952ab87342a7180db45d2c57b52b50a68b6130b15a422"

			err := fs.Mkdir("/iso", constants.DirPerm)
			Expect(err).ShouldNot(HaveOccurred())
			err = fs.WriteFile("/iso/test.iso", []byte(testData), 0644)
			Expect(err).ShouldNot(HaveOccurred())

			checksum, err := utils.CalcFileChecksum(fs, "/iso/test.iso")
			Expect(err).ShouldNot(HaveOccurred())
			Expect(checksum).To(Equal(testDataSHA256))
		})
	})
	Describe("Grub", Label("grub"), func() {
		Describe("Install", func() {
			var target, rootDir, bootDir string
			var buf *bytes.Buffer
			BeforeEach(func() {
				target = "/dev/test"
				rootDir = constants.ActiveDir
				bootDir = constants.StateDir
				buf = &bytes.Buffer{}
				logger = v1.NewBufferLogger(buf)
				logger.SetLevel(v1.DebugLevel())
				config.Logger = logger

				err := utils.MkdirAll(fs, filepath.Join(bootDir, "grub2"), constants.DirPerm)
				Expect(err).ShouldNot(HaveOccurred())

				err = utils.MkdirAll(fs, filepath.Dir(filepath.Join(rootDir, constants.GrubConf)), constants.DirPerm)
				Expect(err).ShouldNot(HaveOccurred())

				err = fs.WriteFile(filepath.Join(rootDir, constants.GrubConf), []byte("console=tty1"), 0644)
				Expect(err).ShouldNot(HaveOccurred())
			})
			It("installs with default values", func() {
				grub := utils.NewGrub(config)
				err := grub.Install(target, rootDir, bootDir, constants.GrubConf, false, "", true, false)
				Expect(err).To(BeNil())

				Expect(buf).To(ContainSubstring("Installing GRUB.."))
				Expect(buf).To(ContainSubstring("Grub install to device /dev/test complete"))
				Expect(buf).ToNot(ContainSubstring("efi"))
				Expect(buf.String()).ToNot(ContainSubstring("Adding extra tty (serial) to grub.cfg"))
				targetGrub, err := fs.ReadFile(fmt.Sprintf("%s/grub2/grub.cfg", bootDir))
				Expect(err).To(BeNil())
				// Should not be modified at all
				Expect(targetGrub).To(ContainSubstring("console=tty1"))

			})
			It("installs with efi firmware", Label("efi"), func() {
				err := utils.MkdirAll(fs, filepath.Join(rootDir, "/usr/share/efi/x86_64/"), constants.DirPerm)
				Expect(err).ShouldNot(HaveOccurred())
				err = fs.WriteFile(filepath.Join(rootDir, "/usr/share/efi/x86_64/shim.efi"), []byte(""), constants.FilePerm)
				Expect(err).ShouldNot(HaveOccurred())
				err = fs.WriteFile(filepath.Join(rootDir, "/usr/share/efi/x86_64/MokManager.efi"), []byte(""), constants.FilePerm)
				Expect(err).ShouldNot(HaveOccurred())
				err = fs.WriteFile(filepath.Join(rootDir, "/usr/share/efi/x86_64/grub.efi"), []byte(""), constants.FilePerm)
				Expect(err).ShouldNot(HaveOccurred())
				err = utils.MkdirAll(fs, filepath.Join(rootDir, "/x86_64/"), constants.DirPerm)
				Expect(err).ShouldNot(HaveOccurred())
				err = fs.WriteFile(filepath.Join(rootDir, "/x86_64/loopback.mod"), []byte(""), constants.FilePerm)
				Expect(err).ShouldNot(HaveOccurred())
				err = utils.MkdirAll(fs, filepath.Join(rootDir, "/etc/"), constants.DirPerm)
				Expect(err).ShouldNot(HaveOccurred())
				err = fs.WriteFile(filepath.Join(rootDir, "/etc/os-release"), []byte("ID=\"suse\""), constants.FilePerm)
				Expect(err).ShouldNot(HaveOccurred())
				grub := utils.NewGrub(config)
				err = grub.Install(target, rootDir, bootDir, constants.GrubConf, true, "", true, false)
				Expect(err).ShouldNot(HaveOccurred())

				// Check everything was copied
				_, err = fs.ReadFile(fmt.Sprintf("%s/grub2/grub.cfg", bootDir))
				Expect(err).To(BeNil())
				_, err = fs.Stat(filepath.Join(constants.EfiDir, "EFI"))
				Expect(err).To(BeNil())
				_, err = fs.Stat(filepath.Join(constants.EfiDir, "EFI/boot"))
				Expect(err).To(BeNil())
				_, err = fs.Stat(filepath.Join(constants.EfiDir, "EFI/boot/shim.efi"))
				Expect(err).To(BeNil())
				_, err = fs.Stat(filepath.Join(constants.EfiDir, "EFI/boot/MokManager.efi"))
				Expect(err).To(BeNil())
				_, err = fs.Stat(filepath.Join(constants.EfiDir, "EFI/boot/grub.efi"))
				Expect(err).To(BeNil())
				_, err = fs.Stat(filepath.Join(constants.EfiDir, "EFI/boot/bootx64.efi"))
				Expect(err).To(BeNil())

			})
			It("fails with efi if no modules files exist", Label("efi"), func() {
				grub := utils.NewGrub(config)
				err := grub.Install(target, rootDir, bootDir, constants.GrubConf, true, "", true, false)
				Expect(err).To(HaveOccurred())
				Expect(err.Error()).To(ContainSubstring("grub"))
				Expect(err.Error()).To(ContainSubstring("modules"))
			})
			It("fails with efi if no os-release file exist", Label("efi"), func() {
				err := utils.MkdirAll(fs, filepath.Join(rootDir, "/x86_64/"), constants.DirPerm)
				Expect(err).ShouldNot(HaveOccurred())
				err = fs.WriteFile(filepath.Join(rootDir, "/x86_64/loopback.mod"), []byte(""), constants.FilePerm)
				Expect(err).ShouldNot(HaveOccurred())
				grub := utils.NewGrub(config)
				err = grub.Install(target, rootDir, bootDir, constants.GrubConf, true, "", true, false)
				Expect(err).To(HaveOccurred())
				Expect(err.Error()).To(ContainSubstring("os-release"))
			})
			It("fails with efi if no grub files exist", Label("efi"), func() {
				err := utils.MkdirAll(fs, filepath.Join(rootDir, "/x86_64/"), constants.DirPerm)
				Expect(err).ShouldNot(HaveOccurred())
				err = fs.WriteFile(filepath.Join(rootDir, "/x86_64/loopback.mod"), []byte(""), constants.FilePerm)
				Expect(err).ShouldNot(HaveOccurred())
				err = fs.WriteFile(filepath.Join(rootDir, "/etc/os-release"), []byte("ID=\"suse\""), constants.FilePerm)
				Expect(err).ShouldNot(HaveOccurred())
				grub := utils.NewGrub(config)
				err = grub.Install(target, rootDir, bootDir, constants.GrubConf, true, "", true, false)
				Expect(err).To(HaveOccurred())
				Expect(err.Error()).To(ContainSubstring("efi"))
				Expect(err.Error()).To(ContainSubstring("artifacts"))
			})
			It("Fails if it can't read grub config file", func() {
				err := fs.RemoveAll(filepath.Join(rootDir, constants.GrubConf))
				Expect(err).ShouldNot(HaveOccurred())
				grub := utils.NewGrub(config)
				Expect(grub.Install(target, rootDir, bootDir, constants.GrubConf, false, "", true, false)).NotTo(BeNil())

				Expect(buf).To(ContainSubstring("Failed copying grub config file"))
			})
		})
		Describe("SetPersistentVariables", func() {
			It("Sets the grub environment file", func() {
				grub := utils.NewGrub(config)
				Expect(grub.SetPersistentVariables(
					"somefile", map[string]string{"key1": "value1", "key2": "value2"},
				)).To(BeNil())
				Expect(runner.IncludesCmds([][]string{
					{"grub2-editenv", "somefile", "set", "key1=value1"},
					{"grub2-editenv", "somefile", "set", "key2=value2"},
				})).To(BeNil())
			})
			It("Fails running grub2-editenv", func() {
				runner.ReturnError = errors.New("grub error")
				grub := utils.NewGrub(config)
				Expect(grub.SetPersistentVariables(
					"somefile", map[string]string{"key1": "value1"},
				)).NotTo(BeNil())
				Expect(runner.CmdsMatch([][]string{
					{"grub2-editenv", "somefile", "set", "key1=value1"},
				})).To(BeNil())
			})
		})
		Describe("CreateBootEntry", Label("bootentry"), func() {
			var efivars eleefi.Variables
			var relativeTo string

			BeforeEach(func() {
				efivars = &eleefi.MockEFIVariables{}
				err := fs.Mkdir("/EFI", constants.DirPerm)
				Expect(err).ToNot(HaveOccurred())
				err = fs.WriteFile("/EFI/test.efi", []byte(""), constants.FilePerm)
				Expect(err).ToNot(HaveOccurred())
				relativeTo, _ = fs.RawPath("/EFI")

			})
			It("Sets the proper entry", func() {
				// We need to pass the relative path because bootmanager works on real paths
				grub := utils.NewGrub(config)
				err := grub.CreateBootEntry("test.efi", relativeTo, efivars)
				Expect(err).ToNot(HaveOccurred())
				vars, _ := efivars.ListVariables()
				// Only one entry should have been created
				// Second one is the BootOrder!
				Expect(len(vars)).To(Equal(2))
				// Load the options and check that its correct
				variable, _, err := efivars.GetVariable(vars[0].GUID, "Boot0000")
				option, err := efi.ReadLoadOption(bytes.NewReader(variable))
				Expect(err).ToNot(HaveOccurred())
				Expect(option.Description).To(Equal("elemental-shim"))
				Expect(option.FilePath).To(ContainSubstring("test.efi"))
				Expect(option.FilePath.String()).To(ContainSubstring(`\EFI\test.efi`))
			})
			It("Does not duplicate if an entry exists", func() {
				// We need to pass the relative path because bootmanager works on real paths
				grub := utils.NewGrub(config)
				err := grub.CreateBootEntry("test.efi", relativeTo, efivars)
				Expect(err).ToNot(HaveOccurred())
				vars, _ := efivars.ListVariables()
				// Only one entry should have been created
				// Second one is the BootOrder!
				Expect(len(vars)).To(Equal(2))
				// Load the options and check that its correct
				variable, _, err := efivars.GetVariable(vars[0].GUID, "Boot0000")
				option, err := efi.ReadLoadOption(bytes.NewReader(variable))
				Expect(err).ToNot(HaveOccurred())
				Expect(option.Description).To(Equal("elemental-shim"))
				Expect(option.FilePath).To(ContainSubstring("test.efi"))
				Expect(option.FilePath.String()).To(ContainSubstring(`\EFI\test.efi`))
				// And here we go again
				err = grub.CreateBootEntry("test.efi", relativeTo, efivars)
				// Reload vars!
				vars, _ = efivars.ListVariables()
				Expect(err).ToNot(HaveOccurred())
				Expect(len(vars)).To(Equal(2))
			})
			It("Creates a new one if the path changes", func() {
				err := fs.WriteFile("/EFI/test1.efi", []byte(""), constants.FilePerm)
				Expect(err).ToNot(HaveOccurred())
				// We need to pass the relative path because bootmanager works on real paths
				grub := utils.NewGrub(config)
				err = grub.CreateBootEntry("test.efi", relativeTo, efivars)
				Expect(err).ToNot(HaveOccurred())
				vars, _ := efivars.ListVariables()
				// Only one entry should have been created
				// Second one is the BootOrder!
				Expect(len(vars)).To(Equal(2))
				// Load the options and check that its correct
				variable, _, err := efivars.GetVariable(vars[0].GUID, "Boot0000")
				option, err := efi.ReadLoadOption(bytes.NewReader(variable))
				Expect(err).ToNot(HaveOccurred())
				Expect(option.Description).To(Equal("elemental-shim"))
				Expect(option.FilePath).To(ContainSubstring("test.efi"))
				Expect(option.FilePath.String()).To(ContainSubstring(`\EFI\test.efi`))

				// And here we go again
				err = grub.CreateBootEntry("test1.efi", relativeTo, efivars)
				Expect(err).ToNot(HaveOccurred())
				// Reload vars!
				vars, _ = efivars.ListVariables()
				Expect(len(vars)).To(Equal(3))
				// As this is the second entry generated its name is Boot0001
				variable, _, err = efivars.GetVariable(vars[0].GUID, "Boot0001")
				option, err = efi.ReadLoadOption(bytes.NewReader(variable))
				Expect(err).ToNot(HaveOccurred())
				Expect(option.Description).To(Equal("elemental-shim"))
				Expect(option.FilePath).To(ContainSubstring("test1.efi"))
				Expect(option.FilePath.String()).To(ContainSubstring(`\EFI\test1.efi`))
			})
		})
	})
	Describe("CreateSquashFS", Label("CreateSquashFS"), func() {
		It("runs with no options if none given", func() {
			err := utils.CreateSquashFS(runner, logger, "source", "dest", []string{})
			Expect(runner.IncludesCmds([][]string{
				{"mksquashfs", "source", "dest"},
			})).To(BeNil())
			Expect(err).ToNot(HaveOccurred())
		})
		It("runs with options if given", func() {
			err := utils.CreateSquashFS(runner, logger, "source", "dest", constants.GetDefaultSquashfsOptions())
			cmd := []string{"mksquashfs", "source", "dest"}
			cmd = append(cmd, constants.GetDefaultSquashfsOptions()...)
			Expect(runner.IncludesCmds([][]string{
				cmd,
			})).To(BeNil())
			Expect(err).ToNot(HaveOccurred())
		})
		It("returns an error if it fails", func() {
			runner.ReturnError = errors.New("error")
			err := utils.CreateSquashFS(runner, logger, "source", "dest", []string{})
			Expect(runner.IncludesCmds([][]string{
				{"mksquashfs", "source", "dest"},
			})).To(BeNil())
			Expect(err).To(HaveOccurred())
		})
	})
	Describe("LoadEnvFile", Label("LoadEnvFile"), func() {
		BeforeEach(func() {
			fs.Mkdir("/etc", constants.DirPerm)
		})
		It("returns proper map if file exists", func() {
			err := fs.WriteFile("/etc/envfile", []byte("TESTKEY=TESTVALUE"), constants.FilePerm)
			Expect(err).ToNot(HaveOccurred())
			envData, err := utils.LoadEnvFile(fs, "/etc/envfile")
			Expect(err).ToNot(HaveOccurred())
			Expect(envData).To(HaveKeyWithValue("TESTKEY", "TESTVALUE"))
		})
		It("returns error if file doesnt exist", func() {
			_, err := utils.LoadEnvFile(fs, "/etc/envfile")
			Expect(err).To(HaveOccurred())
		})

		It("returns error if it cant unmarshall the env file", func() {
			err := fs.WriteFile("/etc/envfile", []byte("WHAT\"WHAT"), constants.FilePerm)
			Expect(err).ToNot(HaveOccurred())
			_, err = utils.LoadEnvFile(fs, "/etc/envfile")
			Expect(err).To(HaveOccurred())
		})
	})
	Describe("IsMounted", Label("ismounted"), func() {
		It("checks a mounted partition", func() {
			part := &v1.Partition{
				MountPoint: "/some/mountpoint",
			}
			err := mounter.Mount("/some/device", "/some/mountpoint", "auto", []string{})
			Expect(err).ShouldNot(HaveOccurred())
			mnt, err := utils.IsMounted(config, part)
			Expect(err).ShouldNot(HaveOccurred())
			Expect(mnt).To(BeTrue())
		})
		It("checks a not mounted partition", func() {
			part := &v1.Partition{
				MountPoint: "/some/mountpoint",
			}
			mnt, err := utils.IsMounted(config, part)
			Expect(err).ShouldNot(HaveOccurred())
			Expect(mnt).To(BeFalse())
		})
		It("checks a partition without mountpoint", func() {
			part := &v1.Partition{}
			mnt, err := utils.IsMounted(config, part)
			Expect(err).ShouldNot(HaveOccurred())
			Expect(mnt).To(BeFalse())
		})
		It("checks a nil partitiont", func() {
			mnt, err := utils.IsMounted(config, nil)
			Expect(err).Should(HaveOccurred())
			Expect(mnt).To(BeFalse())
		})
	})
	Describe("CleanStack", Label("CleanStack"), func() {
		var cleaner *utils.CleanStack
		BeforeEach(func() {
			cleaner = utils.NewCleanStack()
		})
		It("Adds a callback to the stack and pops it", func() {
			var flag bool
			callback := func() error {
				flag = true
				return nil
			}
			Expect(cleaner.Pop()).To(BeNil())
			cleaner.Push(callback)
			poppedJob := cleaner.Pop()
			Expect(poppedJob).NotTo(BeNil())
			poppedJob()
			Expect(flag).To(BeTrue())
		})
		It("On Cleanup runs callback stack in reverse order", func() {
			result := ""
			callback1 := func() error {
				result = result + "one "
				return nil
			}
			callback2 := func() error {
				result = result + "two "
				return nil
			}
			callback3 := func() error {
				result = result + "three "
				return nil
			}
			cleaner.Push(callback1)
			cleaner.Push(callback2)
			cleaner.Push(callback3)
			cleaner.Cleanup(nil)
			Expect(result).To(Equal("three two one "))
		})
		It("On Cleanup keeps former error and all callbacks are executed", func() {
			err := errors.New("Former error")
			count := 0
			callback := func() error {
				count++
				if count == 2 {
					return errors.New("Cleanup Error")
				}
				return nil
			}
			cleaner.Push(callback)
			cleaner.Push(callback)
			cleaner.Push(callback)
			err = cleaner.Cleanup(err)
			Expect(count).To(Equal(3))
			Expect(err.Error()).To(ContainSubstring("Former error"))
		})
		It("On Cleanup error reports first error and all callbacks are executed", func() {
			var err error
			count := 0
			callback := func() error {
				count++
				if count >= 2 {
					return errors.New(fmt.Sprintf("Cleanup error %d", count))
				}
				return nil
			}
			cleaner.Push(callback)
			cleaner.Push(callback)
			cleaner.Push(callback)
			err = cleaner.Cleanup(err)
			Expect(count).To(Equal(3))
			Expect(err.Error()).To(ContainSubstring("Cleanup error 2"))
			Expect(err.Error()).To(ContainSubstring("Cleanup error 3"))
		})
	})
	Describe("VHD utils", Label("vhd"), func() {
		It("creates a valid header", func() {
			tmpDir, _ := utils.TempDir(fs, "", "")
			f, _ := fs.OpenFile(filepath.Join(tmpDir, "test.vhd"), os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600)
			utils.RawDiskToFixedVhd(f)
			_ = f.Close()
			f, _ = fs.Open(filepath.Join(tmpDir, "test.vhd"))
			info, _ := f.Stat()
			// Should only have the footer in teh file, hence 512 bytes
			Expect(info.Size()).To(BeNumerically("==", 512))
			// Dump the header from the file into our VHDHeader
			buff := make([]byte, 512)
			_, _ = f.ReadAt(buff, info.Size()-512)
			_ = f.Close()

			header := utils.VHDHeader{}
			err := binary.Read(bytes.NewBuffer(buff[:]), binary.BigEndian, &header)

			Expect(err).ToNot(HaveOccurred())
			// Just check the fields that we know the value of, that should indicate that the header is valid
			Expect(hex.EncodeToString(header.DiskType[:])).To(Equal("00000002"))
			Expect(hex.EncodeToString(header.Features[:])).To(Equal("00000002"))
			Expect(hex.EncodeToString(header.DataOffset[:])).To(Equal("ffffffffffffffff"))
			Expect(hex.EncodeToString(header.CreatorApplication[:])).To(Equal("656c656d"))
		})
		Describe("CHS calculation", func() {
			It("limits the number of sectors", func() {
				tmpDir, _ := utils.TempDir(fs, "", "")
				f, _ := fs.Create(filepath.Join(tmpDir, "test.vhd"))
				// This size would make the chs calculation break, but we have a guard for it
				f.Truncate(500 * 1024 * 1024 * 1024)
				f.Close()
				f, _ = fs.OpenFile(filepath.Join(tmpDir, "test.vhd"), os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600)
				utils.RawDiskToFixedVhd(f)
				_ = f.Close()
				f, _ = fs.Open(filepath.Join(tmpDir, "test.vhd"))
				info, _ := f.Stat()
				// Dump the header from the file into our VHDHeader
				buff := make([]byte, 512)
				_, _ = f.ReadAt(buff, info.Size()-512)
				_ = f.Close()

				header := utils.VHDHeader{}
				err := binary.Read(bytes.NewBuffer(buff[:]), binary.BigEndian, &header)

				Expect(err).ToNot(HaveOccurred())
				// Just check the fields that we know the value of, that should indicate that the header is valid
				Expect(hex.EncodeToString(header.DiskType[:])).To(Equal("00000002"))
				Expect(hex.EncodeToString(header.Features[:])).To(Equal("00000002"))
				Expect(hex.EncodeToString(header.DataOffset[:])).To(Equal("ffffffffffffffff"))
				// cylinders which is (totalSectors / sectorsPerTrack) / heads
				// and totalsectors is 65535 * 16 * 255 due to hitting the max sector
				// This turns out to be 65535 or ffff in hex or [2]byte{255,255}
				Expect(hex.EncodeToString(header.DiskGeometry[:2])).To(Equal("ffff"))
				Expect(header.DiskGeometry[2]).To(Equal(uint8(16)))  // heads
				Expect(header.DiskGeometry[3]).To(Equal(uint8(255))) // sectors per track
			})
			// The tests below test the different routes that the chs calculation can take to get the disk geometry
			// it's all based on number of sectors, so we have to try with different known sizes to see if the
			// geometry changes are properly reflected on the final VHD header
			It("sets the disk geometry correctly based on sector number", func() {
				tmpDir, _ := utils.TempDir(fs, "", "")
				f, _ := fs.Create(filepath.Join(tmpDir, "test.vhd"))
				// one route of the chs calculation
				f.Truncate(1 * 1024 * 1024)
				f.Close()
				f, _ = fs.OpenFile(filepath.Join(tmpDir, "test.vhd"), os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600)
				utils.RawDiskToFixedVhd(f)
				_ = f.Close()
				f, _ = fs.Open(filepath.Join(tmpDir, "test.vhd"))
				info, _ := f.Stat()
				// Dump the header from the file into our VHDHeader
				buff := make([]byte, 512)
				_, _ = f.ReadAt(buff, info.Size()-512)
				_ = f.Close()

				header := utils.VHDHeader{}
				err := binary.Read(bytes.NewBuffer(buff[:]), binary.BigEndian, &header)

				Expect(err).ToNot(HaveOccurred())
				// Just check the fields that we know the value of, that should indicate that the header is valid
				Expect(hex.EncodeToString(header.DiskType[:])).To(Equal("00000002"))
				Expect(hex.EncodeToString(header.Features[:])).To(Equal("00000002"))
				Expect(hex.EncodeToString(header.DataOffset[:])).To(Equal("ffffffffffffffff"))
				// should not be the max value
				Expect(hex.EncodeToString(header.DiskGeometry[:2])).ToNot(Equal("ffff"))
				Expect(header.DiskGeometry[2]).To(Equal(uint8(4)))  // heads
				Expect(header.DiskGeometry[3]).To(Equal(uint8(17))) // sectors per track
			})
			It("sets the disk geometry correctly based on sector number", func() {
				tmpDir, _ := utils.TempDir(fs, "", "")
				f, _ := fs.Create(filepath.Join(tmpDir, "test.vhd"))
				// one route of the chs calculation
				f.Truncate(1 * 1024 * 1024 * 1024)
				f.Close()
				f, _ = fs.OpenFile(filepath.Join(tmpDir, "test.vhd"), os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600)
				utils.RawDiskToFixedVhd(f)
				_ = f.Close()
				f, _ = fs.Open(filepath.Join(tmpDir, "test.vhd"))
				info, _ := f.Stat()
				// Dump the header from the file into our VHDHeader
				buff := make([]byte, 512)
				_, _ = f.ReadAt(buff, info.Size()-512)
				_ = f.Close()

				header := utils.VHDHeader{}
				err := binary.Read(bytes.NewBuffer(buff[:]), binary.BigEndian, &header)

				Expect(err).ToNot(HaveOccurred())
				// Just check the fields that we know the value of, that should indicate that the header is valid
				Expect(hex.EncodeToString(header.DiskType[:])).To(Equal("00000002"))
				Expect(hex.EncodeToString(header.Features[:])).To(Equal("00000002"))
				Expect(hex.EncodeToString(header.DataOffset[:])).To(Equal("ffffffffffffffff"))
				// should not be the max value
				Expect(hex.EncodeToString(header.DiskGeometry[:2])).ToNot(Equal("ffff"))
				Expect(header.DiskGeometry[2]).To(Equal(uint8(16))) // heads
				Expect(header.DiskGeometry[3]).To(Equal(uint8(63))) // sectors per track
			})
			It("sets the disk geometry correctly based on sector number", func() {
				tmpDir, _ := utils.TempDir(fs, "", "")
				f, _ := fs.Create(filepath.Join(tmpDir, "test.vhd"))
				// another route of the chs calculation
				f.Truncate(220 * 1024 * 1024)
				f.Close()
				f, _ = fs.OpenFile(filepath.Join(tmpDir, "test.vhd"), os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600)
				utils.RawDiskToFixedVhd(f)
				_ = f.Close()
				f, _ = fs.Open(filepath.Join(tmpDir, "test.vhd"))
				info, _ := f.Stat()
				// Dump the header from the file into our VHDHeader
				buff := make([]byte, 512)
				_, _ = f.ReadAt(buff, info.Size()-512)
				_ = f.Close()

				header := utils.VHDHeader{}
				err := binary.Read(bytes.NewBuffer(buff[:]), binary.BigEndian, &header)

				Expect(err).ToNot(HaveOccurred())
				// Just check the fields that we know the value of, that should indicate that the header is valid
				Expect(hex.EncodeToString(header.DiskType[:])).To(Equal("00000002"))
				Expect(hex.EncodeToString(header.Features[:])).To(Equal("00000002"))
				Expect(hex.EncodeToString(header.DataOffset[:])).To(Equal("ffffffffffffffff"))
				// should not be the max value
				Expect(hex.EncodeToString(header.DiskGeometry[:2])).ToNot(Equal("ffff"))
				Expect(header.DiskGeometry[2]).To(Equal(uint8(16))) // heads
				Expect(header.DiskGeometry[3]).To(Equal(uint8(31))) // sectors per track
			})
		})

	})
	Describe("IdentifySourceSystem", Label("fs", "IdentifySourceSystem"), func() {
		var rootDir string
		var buf *bytes.Buffer
		BeforeEach(func() {
			rootDir = constants.ActiveDir
			buf = &bytes.Buffer{}
			logger = v1.NewBufferLogger(buf)
			logger.SetLevel(v1.DebugLevel())
			config.Logger = logger
			err := utils.MkdirAll(fs, filepath.Join(rootDir, "/etc/"), constants.DirPerm)
			Expect(err).ShouldNot(HaveOccurred())
		})
		It("fails if os-release doesnt exist", func() {
			_, err := utils.IdentifySourceSystem(fs, rootDir)
			Expect(err).To(HaveOccurred())
			Expect(err.Error()).To(ContainSubstring("os-release"))
		})
		It("identifies fedora system", func() {
			err := fs.WriteFile(filepath.Join(rootDir, "/etc/os-release"), []byte("ID=\"fedora\""), constants.FilePerm)
			Expect(err).ShouldNot(HaveOccurred())
			system, err := utils.IdentifySourceSystem(fs, rootDir)
			Expect(err).NotTo(HaveOccurred())
			Expect(system).To(Equal(constants.Fedora))
		})
		It("identifies ubuntu system", func() {
			err := fs.WriteFile(filepath.Join(rootDir, "/etc/os-release"), []byte("ID=\"ubuntu\""), constants.FilePerm)
			Expect(err).ShouldNot(HaveOccurred())
			system, err := utils.IdentifySourceSystem(fs, rootDir)
			Expect(err).NotTo(HaveOccurred())
			Expect(system).To(Equal(constants.Ubuntu))
		})
		It("identifies suse system", func() {
			err := fs.WriteFile(filepath.Join(rootDir, "/etc/os-release"), []byte("ID=\"suse\""), constants.FilePerm)
			Expect(err).ShouldNot(HaveOccurred())
			system, err := utils.IdentifySourceSystem(fs, rootDir)
			Expect(err).NotTo(HaveOccurred())
			Expect(system).To(Equal(constants.Suse))
		})
		It("fallback into suse if its an unknown system", func() {
			err := fs.WriteFile(filepath.Join(rootDir, "/etc/os-release"), []byte("ID=\"sle-micro-for-rancher\""), constants.FilePerm)
			Expect(err).ShouldNot(HaveOccurred())
			system, err := utils.IdentifySourceSystem(fs, rootDir)
			Expect(err).NotTo(HaveOccurred())
			Expect(system).To(Equal(constants.Suse))
		})
		It("fallback into suse if os-release is empty", func() {
			err := fs.WriteFile(filepath.Join(rootDir, "/etc/os-release"), []byte(""), constants.FilePerm)
			Expect(err).ShouldNot(HaveOccurred())
			system, err := utils.IdentifySourceSystem(fs, rootDir)
			Expect(err).NotTo(HaveOccurred())
			Expect(system).To(Equal(constants.Suse))
		})
		It("identifies suse system with spaces in the file", func() {
			err := fs.WriteFile(filepath.Join(rootDir, "/etc/os-release"), []byte("\n\n\nID=\"suse\""), constants.FilePerm)
			Expect(err).ShouldNot(HaveOccurred())
			system, err := utils.IdentifySourceSystem(fs, rootDir)
			Expect(err).NotTo(HaveOccurred())
			Expect(system).To(Equal(constants.Suse))
		})
		It("identifies suse system with comments in the file", func() {
			err := fs.WriteFile(filepath.Join(rootDir, "/etc/os-release"), []byte("# this is a comment\nID=\"suse\""), constants.FilePerm)
			Expect(err).ShouldNot(HaveOccurred())
			system, err := utils.IdentifySourceSystem(fs, rootDir)
			Expect(err).NotTo(HaveOccurred())
			Expect(system).To(Equal(constants.Suse))
		})

	})
})
  0707010000009F000081A4000000000000000000000001645E367C0000189A000000000000000000000000000000000000002500000000elemental-cli-0.3.1/pkg/utils/vhd.go  /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package utils

import (
	"bytes"
	"encoding/binary"
	"encoding/hex"
	"math"
	"os"
	"time"

	uuidPkg "github.com/distribution/distribution/uuid"
)

// This file contains utils to work with VHD disks

type VHDHeader struct {
	Cookie   [8]byte // Cookies are used to uniquely identify the original creator of the hard disk image
	Features [4]byte // This is a bit field used to indicate specific feature support.
	// Can be 0x00000000 (no features), 0x00000001 (Temporary, candidate for deletion on shutdown) or 0x00000002 (Reserved)
	FileFormatVersion  [4]byte   // Divided into a major/minor version and matches the version of the specification used in creating the file.
	DataOffset         [8]byte   // For fixed disks, this field should be set to 0xFFFFFFFF.
	Timestamp          [4]byte   // Sstores the creation time of a hard disk image. This is the number of seconds since January 1, 2000 12:00:00 AM in UTC/GMT.
	CreatorApplication [4]byte   // Used to document which application created the hard disk.
	CreatorVersion     [4]byte   // This field holds the major/minor version of the application that created the hard disk image.
	CreatorHostOS      [4]byte   // This field stores the type of host operating system this disk image is created on.
	OriginalSize       [8]byte   // This field stores the size of the hard disk in bytes, from the perspective of the virtual machine, at creation time. Info only
	CurrentSize        [8]byte   // This field stores the current size of the hard disk, in bytes, from the perspective of the virtual machine.
	DiskGeometry       [4]byte   // This field stores the cylinder, heads, and sectors per track value for the hard disk.
	DiskType           [4]byte   // Fixed = 2, Dynamic = 3, Differencing = 4
	Checksum           [4]byte   // This field holds a basic checksum of the hard disk footer. It is just a one’s complement of the sum of all the bytes in the footer without the checksum field.
	UniqueID           [16]byte  // This is a 128-bit universally unique identifier (UUID).
	SavedState         [1]byte   // This field holds a one-byte flag that describes whether the system is in saved state. If the hard disk is in the saved state the value is set to 1
	Reserved           [427]byte // This field contains zeroes.
}

func newVHDFixed(size uint64) VHDHeader {
	header := VHDHeader{}
	hexToField("00000002", header.Features[:])
	hexToField("00010000", header.FileFormatVersion[:])
	hexToField("ffffffffffffffff", header.DataOffset[:])
	t := uint32(time.Now().Unix() - 946684800)
	binary.BigEndian.PutUint32(header.Timestamp[:], t)
	hexToField("656c656d", header.CreatorApplication[:]) // Cos
	hexToField("73757365", header.CreatorHostOS[:])      // SUSE
	binary.BigEndian.PutUint64(header.OriginalSize[:], size)
	binary.BigEndian.PutUint64(header.CurrentSize[:], size)
	// Divide size into 512 to get the total sectors
	totalSectors := float64(size / 512)
	geometry := chsCalculation(uint64(totalSectors))
	binary.BigEndian.PutUint16(header.DiskGeometry[:2], uint16(geometry.cylinders))
	header.DiskGeometry[2] = uint8(geometry.heads)
	header.DiskGeometry[3] = uint8(geometry.sectorsPerTrack)
	hexToField("00000002", header.DiskType[:]) // Fixed 0x00000002
	hexToField("00000000", header.Checksum[:])
	uuid := uuidPkg.Generate()
	copy(header.UniqueID[:], uuid.String())
	generateChecksum(&header)
	return header
}

// generateChecksum generates the checksum of the vhd header
// Lifted from the official VHD Format Spec
func generateChecksum(header *VHDHeader) {
	buffer := new(bytes.Buffer)
	_ = binary.Write(buffer, binary.BigEndian, header)
	checksum := 0
	bb := buffer.Bytes()
	for counter := 0; counter < 512; counter++ {
		checksum += int(bb[counter])
	}
	binary.BigEndian.PutUint32(header.Checksum[:], uint32(^checksum))
}

// hexToField decodes an hex to bytes and copies it to the given header field
func hexToField(hexs string, field []byte) {
	h, _ := hex.DecodeString(hexs)
	copy(field, h)
}

// chs is a simple struct to represent the cylinders/heads/sectors for a given sector count
type chs struct {
	cylinders       uint
	heads           uint
	sectorsPerTrack uint
}

// chsCalculation calculates the cylinders, headers and sectors per track for a given sector count
// Exactly the same code on the official VHD format spec
func chsCalculation(sectors uint64) chs {
	var sectorsPerTrack,
		heads,
		cylinderTimesHeads,
		cylinders float64
	totalSectors := float64(sectors)

	if totalSectors > 65535*16*255 {
		totalSectors = 65535 * 16 * 255
	}

	if totalSectors >= 65535*16*63 {
		sectorsPerTrack = 255
		heads = 16
		cylinderTimesHeads = math.Floor(totalSectors / sectorsPerTrack)
	} else {
		sectorsPerTrack = 17
		cylinderTimesHeads = math.Floor(totalSectors / sectorsPerTrack)
		heads = math.Floor((cylinderTimesHeads + 1023) / 1024)
		if heads < 4 {
			heads = 4
		}
		if (cylinderTimesHeads >= (heads * 1024)) || heads > 16 {
			sectorsPerTrack = 31
			heads = 16
			cylinderTimesHeads = math.Floor(totalSectors / sectorsPerTrack)
		}
		if cylinderTimesHeads >= (heads * 1024) {
			sectorsPerTrack = 63
			heads = 16
			cylinderTimesHeads = math.Floor(totalSectors / sectorsPerTrack)
		}
	}

	cylinders = cylinderTimesHeads / heads

	return chs{
		cylinders:       uint(cylinders),
		heads:           uint(heads),
		sectorsPerTrack: uint(sectorsPerTrack),
	}
}

// RawDiskToFixedVhd will write the proper header to a given os.File to convert it from a simple raw disk to a Fixed VHD
// RawDiskToFixedVhd makes no effort into opening/closing/checking if the file exists
func RawDiskToFixedVhd(diskFile *os.File) {
	info, _ := diskFile.Stat()
	size := uint64(info.Size())
	header := newVHDFixed(size)
	_ = binary.Write(diskFile, binary.BigEndian, header)
}
  070701000000A0000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000001A00000000elemental-cli-0.3.1/tests 070701000000A1000041ED000000000000000000000006645E367C00000000000000000000000000000000000000000000002300000000elemental-cli-0.3.1/tests/fixtures    070701000000A2000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/tests/fixtures/badconfig  070701000000A3000081A4000000000000000000000001645E367C00000028000000000000000000000000000000000000003900000000elemental-cli-0.3.1/tests/fixtures/badconfig/config.yaml  This is a bad yaml
It is a very bad yaml070701000000A40000A1FF0000000000000000000000016493ED1A0000000B000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/tests/fixtures/badconfig/manifest.yaml    config.yaml 070701000000A5000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003200000000elemental-cli-0.3.1/tests/fixtures/badextraconfig 070701000000A6000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/tests/fixtures/badextraconfig/config.d    070701000000A7000081A4000000000000000000000001645E367C00000028000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/tests/fixtures/badextraconfig/config.d/bad-config.yaml    This is a bad yaml
It is a very bad yaml070701000000A8000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002A00000000elemental-cli-0.3.1/tests/fixtures/config 070701000000A9000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003300000000elemental-cli-0.3.1/tests/fixtures/config/config.d    070701000000AA000081A4000000000000000000000001645E367C00000025000000000000000000000000000000000000004200000000elemental-cli-0.3.1/tests/fixtures/config/config.d/01_config.yaml cloud-init-paths:
- "some/other/path"   070701000000AB000081A4000000000000000000000001645E367C00000169000000000000000000000000000000000000003600000000elemental-cli-0.3.1/tests/fixtures/config/config.yaml cosign-key: "someKey"
cloud-init-paths:
- "some/path"
- "some/alternate/path"

install:
  target: "someDisk"

  no-format: true
  system:
    uri: docker:some/image:latest
  recovery-system:
    uri: docker:recovery/image:latest

reset:
  disable-boot-entry: true

upgrade:
  system:
    uri: some/image:latest
  recovery-system:
    uri: recovery/image:latest
   070701000000AC000081A4000000000000000000000001645E367C0000009F000000000000000000000000000000000000003800000000elemental-cli-0.3.1/tests/fixtures/config/manifest.yaml   iso:
  rootfs:
    - oci:system/cos
  uefi:
    - oci:live/grub2-efi-image
  image:
    - oci:recovery/cos-img
  label: "LIVE_LABEL"

name: "cOS-0"
date: true
 070701000000AD000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000002A00000000elemental-cli-0.3.1/tests/fixtures/simple 070701000000AE000081A4000000000000000000000001645E367C00000113000000000000000000000000000000000000003600000000elemental-cli-0.3.1/tests/fixtures/simple/config.yaml cosign: true
verify: true

install:
  grub-entry-name: "mockme"
  system:
    size: 2000
  recovery-system:
    size: 2000
upgrade:
  grub-entry-name: "so"
  recovery-system:
    size: 2000
  system:
    size: 2000
reset:
  grub-entry-name: "awesome"
  system:
    size: 2000 070701000000AF000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000002000000000elemental-cli-0.3.1/tests/mocks   070701000000B0000081A4000000000000000000000001645E367C000005D5000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/tests/mocks/cloud-init-runner_mock.go /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package mocks

import (
	"errors"

	"github.com/mudler/yip/pkg/schema"
)

type FakeCloudInitRunner struct {
	ExecStages []string
	Error      bool
	stageArgs  map[string][]string
}

func appendIfMissing(slice []string, item string) []string {
	for _, it := range slice {
		if it == item {
			return slice
		}
	}
	return append(slice, item)
}

func (ci *FakeCloudInitRunner) Run(stage string, args ...string) error {
	if ci.stageArgs == nil {
		ci.stageArgs = map[string][]string{}
	}

	// keeps a list of unique arguments passed to each stage
	for _, arg := range args {
		ci.stageArgs[stage] = appendIfMissing(ci.stageArgs[stage], arg)
	}

	ci.ExecStages = append(ci.ExecStages, stage)
	if ci.Error {
		return errors.New("cloud init failure")
	}
	return nil
}

func (ci *FakeCloudInitRunner) SetModifier(_ schema.Modifier) {
}

func (ci *FakeCloudInitRunner) GetStageArgs(stage string) []string {
	return ci.stageArgs[stage]
}
   070701000000B1000081A4000000000000000000000001645E367C00000508000000000000000000000000000000000000003200000000elemental-cli-0.3.1/tests/mocks/extractor_mock.go /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package mocks

import v1 "github.com/rancher/elemental-cli/pkg/types/v1"

type FakeImageExtractor struct {
	Logger     v1.Logger
	SideEffect func(imageRef, destination, platformRef string, local bool) error
}

var _ v1.ImageExtractor = FakeImageExtractor{}

func NewFakeImageExtractor(logger v1.Logger) *FakeImageExtractor {
	return &FakeImageExtractor{
		Logger: logger,
	}
}

func (f FakeImageExtractor) ExtractImage(imageRef, destination, platformRef string, local bool) error {
	f.Logger.Debugf("extracting %s to %s in platform %s", imageRef, destination, platformRef)
	if f.SideEffect != nil {
		f.Logger.Debugf("running sideeffect")
		return f.SideEffect(imageRef, destination, platformRef, local)
	}

	return nil
}
070701000000B2000081A4000000000000000000000001645E367C00001B84000000000000000000000000000000000000002C00000000elemental-cli-0.3.1/tests/mocks/ghw_mock.go   /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package mocks

import (
	"fmt"
	"os"
	"path/filepath"
	"strings"

	"github.com/jaypipes/ghw/pkg/block"
	"github.com/jaypipes/ghw/pkg/context"
	"github.com/jaypipes/ghw/pkg/linuxpath"
)

// GhwMock is used to construct a fake disk to present to ghw when scanning block devices
// The way this works is ghw will use the existing files in the system to determine the different disks, partitions and
// mountpoints. It uses /sys/block, /proc/self/mounts and /run/udev/data to gather everything
// It also has an entrypoint to overwrite the root dir from which the paths are constructed so that allows us to override
// it easily and make it read from a different location.
// This mock is used to construct a fake FS with all its needed files on a different chroot and just add a Disk with its
// partitions and let the struct do its thing creating files and mountpoints and such
// You can even just pass no disks to simulate a system in which there is no disk/no cos partitions
type GhwMock struct {
	chroot string
	paths  *linuxpath.Paths
	disks  []block.Disk
	mounts []string
}

// AddDisk adds a disk to GhwMock
func (g *GhwMock) AddDisk(disk block.Disk) {
	g.disks = append(g.disks, disk)
}

// AddPartitionToDisk will add a partition to the given disk and call Clean+CreateDevices, so we recreate all files
// It makes no effort checking if the disk exists
func (g *GhwMock) AddPartitionToDisk(diskName string, partition *block.Partition) {
	for _, disk := range g.disks {
		if disk.Name == diskName {
			disk.Partitions = append(disk.Partitions, partition)
			g.Clean()
			g.CreateDevices()
		}
	}
}

// CreateDevices will create a new context and paths for ghw using the Chroot value as base, then set the env var GHW_ROOT so the
// ghw library picks that up and then iterate over the disks and partitions and create the necessary files
func (g *GhwMock) CreateDevices() {
	d, _ := os.MkdirTemp("", "ghwmock")
	g.chroot = d
	ctx := context.New()
	ctx.Chroot = d
	g.paths = linuxpath.New(ctx)
	_ = os.Setenv("GHW_CHROOT", g.chroot)
	// Create the /sys/block dir
	_ = os.MkdirAll(g.paths.SysBlock, 0755)
	// Create the /run/udev/data dir
	_ = os.MkdirAll(g.paths.RunUdevData, 0755)
	// Create only the /proc/self dir, we add the mounts file afterwards
	procDir, _ := filepath.Split(g.paths.ProcMounts)
	_ = os.MkdirAll(procDir, 0755)

	for indexDisk, disk := range g.disks {
		// For each dir we create the /sys/block/DISK_NAME
		diskPath := filepath.Join(g.paths.SysBlock, disk.Name)
		_ = os.Mkdir(diskPath, 0755)
		for indexPart, partition := range disk.Partitions {
			// For each partition we create the /sys/block/DISK_NAME/PARTITION_NAME
			_ = os.Mkdir(filepath.Join(diskPath, partition.Name), 0755)
			// Create the /sys/block/DISK_NAME/PARTITION_NAME/dev file which contains the major:minor of the partition
			_ = os.WriteFile(filepath.Join(diskPath, partition.Name, "dev"), []byte(fmt.Sprintf("%d:6%d\n", indexDisk, indexPart)), 0644)
			// Create the /run/udev/data/bMAJOR:MINOR file with the data inside to mimic the udev database
			data := []string{fmt.Sprintf("E:ID_FS_LABEL=%s\n", partition.FilesystemLabel)}
			if partition.Type != "" {
				data = append(data, fmt.Sprintf("E:ID_FS_TYPE=%s\n", partition.Type))
			}
			_ = os.WriteFile(filepath.Join(g.paths.RunUdevData, fmt.Sprintf("b%d:6%d", indexDisk, indexPart)), []byte(strings.Join(data, "")), 0644)
			// If we got a mountpoint, add it to our fake /proc/self/mounts
			if partition.MountPoint != "" {
				// Check if the partition has a fs, otherwise default to ext4
				if partition.Type == "" {
					partition.Type = "ext4"
				}
				// Prepare the g.mounts with all the mount lines
				g.mounts = append(
					g.mounts,
					fmt.Sprintf("%s %s %s ro,relatime 0 0\n", filepath.Join("/dev", partition.Name), partition.MountPoint, partition.Type))
			}
		}
	}
	// Finally, write all the mounts
	_ = os.WriteFile(g.paths.ProcMounts, []byte(strings.Join(g.mounts, "")), 0644)
}

// RemoveDisk will remove the files for a disk. It makes no effort to check if the disk exists or not
func (g *GhwMock) RemoveDisk(disk string) {
	// This could be simpler I think, just removing the /sys/block/DEVICE should make ghw not find anything and not search
	// for partitions, but just in case do it properly
	var newMounts []string
	diskPath := filepath.Join(g.paths.SysBlock, disk)
	_ = os.RemoveAll(diskPath)

	// Try to find any mounts that match the disk given and remove them from the mounts
	for _, mount := range g.mounts {
		fields := strings.Fields(mount)
		// If first field does not contain the /dev/DEVICE, add it to the newmounts
		if !strings.Contains(fields[0], filepath.Join("/dev", disk)) {
			newMounts = append(newMounts, mount)
		}
	}
	g.mounts = newMounts
	// Write the mounts again
	_ = os.WriteFile(g.paths.ProcMounts, []byte(strings.Join(g.mounts, "")), 0644)
}

// RemovePartitionFromDisk will remove the files for a partition
// It makes no effort checking if the disk/partition/files exist
func (g *GhwMock) RemovePartitionFromDisk(diskName string, partitionName string) {
	var newMounts []string
	diskPath := filepath.Join(g.paths.SysBlock, diskName)
	// Read the dev major:minor
	devName, _ := os.ReadFile(filepath.Join(diskPath, partitionName, "dev"))
	// Remove the MAJOR:MINOR file from the udev database
	_ = os.RemoveAll(filepath.Join(g.paths.RunUdevData, fmt.Sprintf("b%s", devName)))
	// Remove the /sys/block/DISK/PARTITION dir
	_ = os.RemoveAll(filepath.Join(diskPath, partitionName))

	// Try to find any mounts that match the partition given and remove them from the mounts
	for _, mount := range g.mounts {
		fields := strings.Fields(mount)
		// If first field does not contain the /dev/PARTITION, add it to the newmounts
		if !strings.Contains(fields[0], filepath.Join("/dev", partitionName)) {
			newMounts = append(newMounts, mount)
		}
	}
	g.mounts = newMounts
	// Write the mounts again
	_ = os.WriteFile(g.paths.ProcMounts, []byte(strings.Join(g.mounts, "")), 0644)
	// Remove it from the partitions list
	for index, disk := range g.disks {
		if disk.Name == diskName {
			var newPartitions []*block.Partition
			for _, partition := range disk.Partitions {
				if partition.Name != partitionName {
					newPartitions = append(newPartitions, partition)
				}
			}
			g.disks[index].Partitions = newPartitions
		}
	}
}

// Clean will remove the chroot dir and unset the env var
func (g *GhwMock) Clean() {
	_ = os.Unsetenv("GHW_CHROOT")
	_ = os.RemoveAll(g.chroot)
}
070701000000B3000081A4000000000000000000000001645E367C000003CE000000000000000000000000000000000000002E00000000elemental-cli-0.3.1/tests/mocks/green_mock.go /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package mocks

import (
	"fmt"
)

type LiveBootLoaderMock struct {
	ErrorEFI bool
	ErrorISO bool
}

func (g *LiveBootLoaderMock) PrepareEFI(_, _ string) error {
	if g.ErrorEFI {
		return fmt.Errorf("failed preparing EFI binaries")
	}
	return nil
}

func (g *LiveBootLoaderMock) PrepareISO(_, _ string) error {
	if g.ErrorISO {
		return fmt.Errorf("failed preparing ISO bootloader binaries")
	}
	return nil
}
  070701000000B4000081A4000000000000000000000001645E367C000005D2000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/tests/mocks/http_mock.go  /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package mocks

import (
	"errors"

	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
)

// FakeHTTPClient is an implementation of HTTPClient interface used for testing
// It stores Get calls into ClientCalls for easy checking of what was called
type FakeHTTPClient struct {
	ClientCalls []string
	Error       bool
}

// GetURL will return a FakeHttpBody and store the url call into ClientCalls
func (m *FakeHTTPClient) GetURL(_ v1.Logger, url string, _ string) error {
	// Store calls to the mock client, so we can verify that we didnt mangled them or anything
	m.ClientCalls = append(m.ClientCalls, url)
	if m.Error {
		return errors.New("fake http error")
	}
	return nil
}

// WasGetCalledWith is a helper method to confirm that the client wazs called with the give url
func (m *FakeHTTPClient) WasGetCalledWith(url string) bool {
	for _, c := range m.ClientCalls {
		if c == url {
			return true
		}
	}
	return false
}
  070701000000B5000081A4000000000000000000000001645E367C000008DB000000000000000000000000000000000000003000000000elemental-cli-0.3.1/tests/mocks/mounter_mock.go   /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package mocks

import (
	"errors"

	"k8s.io/mount-utils"
)

// ErrorMounter is a fake mounter for tests that can error out.
type ErrorMounter struct {
	ErrorOnMount   bool
	ErrorOnUnmount bool
	FakeMounter    mount.Interface
}

// NewErrorMounter returns an ErrorMounter with an instance of FakeMounter inside so we can use its functions
func NewErrorMounter() *ErrorMounter {
	return &ErrorMounter{
		FakeMounter: &mount.FakeMounter{},
	}
}

// Mount will return an error if ErrorOnMount is true
func (e ErrorMounter) Mount(source string, target string, fstype string, options []string) error {
	if e.ErrorOnMount {
		return errors.New("mount error")
	}
	return e.FakeMounter.Mount(source, target, fstype, options)
}

// Unmount will return an error if ErrorOnUnmount is true
func (e ErrorMounter) Unmount(target string) error {
	if e.ErrorOnUnmount {
		return errors.New("unmount error")
	}
	return e.FakeMounter.Unmount(target)
}

func (e ErrorMounter) List() ([]mount.MountPoint, error) {
	return e.FakeMounter.List()
}

func (e ErrorMounter) IsLikelyNotMountPoint(file string) (bool, error) {
	mnts, _ := e.List()
	for _, mnt := range mnts {
		if file == mnt.Path {
			return false, nil
		}
	}
	return true, nil
}

// We need to have this below to fulfill the interface for mount.Interface

func (e ErrorMounter) MountSensitive(_, _, _ string, _, _ []string) error {
	return nil
}
func (e ErrorMounter) MountSensitiveWithoutSystemd(_, _, _ string, _, _ []string) error {
	return nil
}
func (e ErrorMounter) MountSensitiveWithoutSystemdWithMountFlags(_, _, _ string, _, _, _ []string) error {
	return nil
}
func (e ErrorMounter) GetMountRefs(_ string) ([]string, error) { return []string{}, nil }
 070701000000B6000081A4000000000000000000000001645E367C00001027000000000000000000000000000000000000002F00000000elemental-cli-0.3.1/tests/mocks/runner_mock.go    /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package mocks

import (
	"fmt"
	"os/exec"
	"strings"

	v1 "github.com/rancher/elemental-cli/pkg/types/v1"
)

type FakeRunner struct {
	cmds        [][]string
	ReturnValue []byte
	SideEffect  func(command string, args ...string) ([]byte, error)
	ReturnError error
	Logger      v1.Logger
	CmdNotFound string
}

func NewFakeRunner() *FakeRunner {
	return &FakeRunner{cmds: [][]string{}, ReturnValue: []byte{}, SideEffect: nil, ReturnError: nil}
}

func (r *FakeRunner) CommandExists(command string) bool {
	return command != r.CmdNotFound
}

func (r *FakeRunner) Run(command string, args ...string) ([]byte, error) {
	r.debug(fmt.Sprintf("Running cmd: '%s %s'", command, strings.Join(args, " ")))
	r.InitCmd(command, args...)
	out, err := r.RunCmd(nil)
	if err != nil {
		r.error(fmt.Sprintf("Error running command: %s", err.Error()))
	}
	return out, err
}

func (r *FakeRunner) RunCmd(_ *exec.Cmd) ([]byte, error) {
	if r.SideEffect != nil {
		if len(r.cmds) > 0 {
			lastCmd := len(r.cmds) - 1
			return r.SideEffect(r.cmds[lastCmd][0], r.cmds[lastCmd][1:]...)
		}
	}
	return r.ReturnValue, r.ReturnError
}

func (r *FakeRunner) InitCmd(command string, args ...string) *exec.Cmd {
	r.cmds = append(r.cmds, append([]string{command}, args...))
	return nil
}

func (r *FakeRunner) ClearCmds() {
	r.cmds = [][]string{}
}

// CmdsMatch matches the commands list in order. Note HasPrefix is being used to evaluate the
// match, so expecting initial part of the command is enough to get a match.
// It facilitates testing commands with dynamic arguments (aka temporary files)
func (r FakeRunner) CmdsMatch(cmdList [][]string) error {
	if len(cmdList) != len(r.cmds) {
		return fmt.Errorf("number of calls mismatch, expected %d calls but got %d", len(cmdList), len(r.cmds))
	}
	for i, cmd := range cmdList {
		expect := strings.Join(cmd[:], " ")
		got := strings.Join(r.cmds[i][:], " ")
		if !strings.HasPrefix(got, expect) {
			return fmt.Errorf("Expected command: '%s.*' got: '%s'", expect, got)
		}
	}
	return nil
}

// IncludesCmds checks the given commands were executed in any order.
// Note it uses HasPrefix to match commands, see CmdsMatch.
func (r FakeRunner) IncludesCmds(cmdList [][]string) error {
	for _, cmd := range cmdList {
		expect := strings.Join(cmd[:], " ")
		found := false
		for _, rcmd := range r.cmds {
			got := strings.Join(rcmd[:], " ")
			if strings.HasPrefix(got, expect) {
				found = true
				break
			}
		}
		if !found {
			return fmt.Errorf("command '%s.*' not found", expect)
		}
	}
	return nil
}

// MatchMilestones matches all the given commands were executed in the provided
// order. Note it uses HasPrefix to match commands, see CmdsMatch.
func (r FakeRunner) MatchMilestones(cmdList [][]string) error {
	var match string
	for _, cmd := range r.cmds {
		if len(cmdList) == 0 {
			break
		}
		got := strings.Join(cmd[:], " ")
		match = strings.Join(cmdList[0][:], " ")
		if !strings.HasPrefix(got, match) {
			continue
		}

		cmdList = cmdList[1:]
	}

	if len(cmdList) > 0 {
		return fmt.Errorf("command '%s' not executed", match)
	}

	return nil
}

// GetCmds returns the list of commands recorded by this FakeRunner instance
// this is helpful to debug tests
func (r FakeRunner) GetCmds() [][]string {
	return r.cmds
}

func (r FakeRunner) GetLogger() v1.Logger {
	return r.Logger
}

func (r *FakeRunner) SetLogger(logger v1.Logger) {
	r.Logger = logger
}

func (r FakeRunner) error(msg string) {
	if r.Logger != nil {
		r.Logger.Error(msg)
	}
}

func (r FakeRunner) debug(msg string) {
	if r.Logger != nil {
		r.Logger.Debug(msg)
	}
}
 070701000000B7000081A4000000000000000000000001645E367C0000055A000000000000000000000000000000000000003000000000elemental-cli-0.3.1/tests/mocks/syscall_mock.go   /*
Copyright © 2022 - 2023 SUSE LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package mocks

import "errors"

// FakeSyscall is a test helper method to track calls to syscall
// It can also fail on Chroot command
type FakeSyscall struct {
	chrootHistory []string // Track calls to chroot
	ErrorOnChroot bool
}

// Chroot will store the chroot call
// It can return a failure if ErrorOnChroot is true
func (f *FakeSyscall) Chroot(path string) error {
	f.chrootHistory = append(f.chrootHistory, path)
	if f.ErrorOnChroot {
		return errors.New("chroot error")
	}
	return nil
}

func (f *FakeSyscall) Chdir(_ string) error {
	return nil
}

// WasChrootCalledWith is a helper method to check if Chroot was called with the given path
func (f *FakeSyscall) WasChrootCalledWith(path string) bool {
	for _, c := range f.chrootHistory {
		if c == path {
			return true
		}
	}
	return false
}
  070701000000B8000041ED000000000000000000000009645E367C00000000000000000000000000000000000000000000001B00000000elemental-cli-0.3.1/vendor    070701000000B9000041ED000000000000000000000044645E367C00000000000000000000000000000000000000000000002600000000elemental-cli-0.3.1/vendor/github.com 070701000000BA000041ED000000000000000000000005645E367C00000000000000000000000000000000000000000000003200000000elemental-cli-0.3.1/vendor/github.com/Masterminds 070701000000BB000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/Masterminds/goutils 070701000000BC000081A4000000000000000000000001645E367C00000185000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/Masterminds/goutils/.travis.yml language: go

go:
  - 1.6
  - 1.7
  - 1.8
  - tip

script:
  - go test -v

notifications:
  webhooks:
    urls:
      - https://webhooks.gitter.im/e/06e3328629952dabe3e0
    on_success: change  # options: [always|never|change] default: always
    on_failure: always  # options: [always|never|change] default: always
    on_start: never     # options: [always|never|change] default: always
   070701000000BD000081A4000000000000000000000001645E367C0000008B000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/Masterminds/goutils/CHANGELOG.md    # 1.0.1 (2017-05-31)

## Fixed
- #21: Fix generation of alphanumeric strings (thanks @dbarranco)

# 1.0.0 (2014-04-30)

- Initial release.
 070701000000BE000081A4000000000000000000000001645E367C00002C5E000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/Masterminds/goutils/LICENSE.txt 
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
  070701000000BF000081A4000000000000000000000001645E367C00000BB0000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/Masterminds/goutils/README.md   GoUtils
===========
[![Stability: Maintenance](https://masterminds.github.io/stability/maintenance.svg)](https://masterminds.github.io/stability/maintenance.html)
[![GoDoc](https://godoc.org/github.com/Masterminds/goutils?status.png)](https://godoc.org/github.com/Masterminds/goutils) [![Build Status](https://travis-ci.org/Masterminds/goutils.svg?branch=master)](https://travis-ci.org/Masterminds/goutils) [![Build status](https://ci.appveyor.com/api/projects/status/sc2b1ew0m7f0aiju?svg=true)](https://ci.appveyor.com/project/mattfarina/goutils)


GoUtils provides users with utility functions to manipulate strings in various ways. It is a Go implementation of some
string manipulation libraries of Java Apache Commons. GoUtils includes the following Java Apache Commons classes:
* WordUtils    
* RandomStringUtils  
* StringUtils (partial implementation)

## Installation
If you have Go set up on your system, from the GOPATH directory within the command line/terminal, enter this:

	go get github.com/Masterminds/goutils

If you do not have Go set up on your system, please follow the [Go installation directions from the documenation](http://golang.org/doc/install), and then follow the instructions above to install GoUtils.


## Documentation
GoUtils doc is available here: [![GoDoc](https://godoc.org/github.com/Masterminds/goutils?status.png)](https://godoc.org/github.com/Masterminds/goutils)


## Usage
The code snippets below show examples of how to use GoUtils. Some functions return errors while others do not. The first instance below, which does not return an error, is the `Initials` function (located within the `wordutils.go` file).

    package main

    import (
        "fmt"
    	"github.com/Masterminds/goutils"
    )

    func main() {

    	// EXAMPLE 1: A goutils function which returns no errors
        fmt.Println (goutils.Initials("John Doe Foo")) // Prints out "JDF"

    }
Some functions return errors mainly due to illegal arguements used as parameters. The code example below illustrates how to deal with function that returns an error. In this instance, the function is the `Random` function (located within the `randomstringutils.go` file).

    package main

    import (
        "fmt"
        "github.com/Masterminds/goutils"
    )

    func main() {

        // EXAMPLE 2: A goutils function which returns an error
        rand1, err1 := goutils.Random (-1, 0, 0, true, true)  

        if err1 != nil {
			fmt.Println(err1) // Prints out error message because -1 was entered as the first parameter in goutils.Random(...)
		} else {
			fmt.Println(rand1)
		}

    }

## License
GoUtils is licensed under the Apache License, Version 2.0. Please check the LICENSE.txt file or visit http://www.apache.org/licenses/LICENSE-2.0 for a copy of the license.

## Issue Reporting
Make suggestions or report issues using the Git issue tracker: https://github.com/Masterminds/goutils/issues

## Website
* [GoUtils webpage](http://Masterminds.github.io/goutils/)
070701000000C0000081A4000000000000000000000001645E367C000000FF000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/Masterminds/goutils/appveyor.yml    version: build-{build}.{branch}

clone_folder: C:\gopath\src\github.com\Masterminds\goutils
shallow_clone: true

environment:
  GOPATH: C:\gopath

platform:
  - x64

build: off

install:
  - go version
  - go env

test_script:
  - go test -v

deploy: off
 070701000000C1000081A4000000000000000000000001645E367C00001D5E000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/Masterminds/goutils/cryptorandomstringutils.go  /*
Copyright 2014 Alexander Okoli

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package goutils

import (
	"crypto/rand"
	"fmt"
	"math"
	"math/big"
	"unicode"
)

/*
CryptoRandomNonAlphaNumeric creates a random string whose length is the number of characters specified.
Characters will be chosen from the set of all characters (ASCII/Unicode values between 0 to 2,147,483,647 (math.MaxInt32)).

Parameter:
	count - the length of random string to create

Returns:
	string - the random string
	error - an error stemming from an invalid parameter within underlying function, CryptoRandom(...)
*/
func CryptoRandomNonAlphaNumeric(count int) (string, error) {
	return CryptoRandomAlphaNumericCustom(count, false, false)
}

/*
CryptoRandomAscii creates a random string whose length is the number of characters specified.
Characters will be chosen from the set of characters whose ASCII value is between 32 and 126 (inclusive).

Parameter:
	count - the length of random string to create

Returns:
	string - the random string
	error - an error stemming from an invalid parameter within underlying function, CryptoRandom(...)
*/
func CryptoRandomAscii(count int) (string, error) {
	return CryptoRandom(count, 32, 127, false, false)
}

/*
CryptoRandomNumeric creates a random string whose length is the number of characters specified.
Characters will be chosen from the set of numeric characters.

Parameter:
	count - the length of random string to create

Returns:
	string - the random string
	error - an error stemming from an invalid parameter within underlying function, CryptoRandom(...)
*/
func CryptoRandomNumeric(count int) (string, error) {
	return CryptoRandom(count, 0, 0, false, true)
}

/*
CryptoRandomAlphabetic creates a random string whose length is the number of characters specified.
Characters will be chosen from the set of alpha-numeric characters as indicated by the arguments.

Parameters:
	count - the length of random string to create
	letters - if true, generated string may include alphabetic characters
	numbers - if true, generated string may include numeric characters

Returns:
	string - the random string
	error - an error stemming from an invalid parameter within underlying function, CryptoRandom(...)
*/
func CryptoRandomAlphabetic(count int) (string, error) {
	return CryptoRandom(count, 0, 0, true, false)
}

/*
CryptoRandomAlphaNumeric creates a random string whose length is the number of characters specified.
Characters will be chosen from the set of alpha-numeric characters.

Parameter:
	count - the length of random string to create

Returns:
	string - the random string
	error - an error stemming from an invalid parameter within underlying function, CryptoRandom(...)
*/
func CryptoRandomAlphaNumeric(count int) (string, error) {
	return CryptoRandom(count, 0, 0, true, true)
}

/*
CryptoRandomAlphaNumericCustom creates a random string whose length is the number of characters specified.
Characters will be chosen from the set of alpha-numeric characters as indicated by the arguments.

Parameters:
	count - the length of random string to create
	letters - if true, generated string may include alphabetic characters
	numbers - if true, generated string may include numeric characters

Returns:
	string - the random string
	error - an error stemming from an invalid parameter within underlying function, CryptoRandom(...)
*/
func CryptoRandomAlphaNumericCustom(count int, letters bool, numbers bool) (string, error) {
	return CryptoRandom(count, 0, 0, letters, numbers)
}

/*
CryptoRandom creates a random string based on a variety of options, using using golang's crypto/rand source of randomness.
If the parameters start and end are both 0, start and end are set to ' ' and 'z', the ASCII printable characters, will be used,
unless letters and numbers are both false, in which case, start and end are set to 0 and math.MaxInt32, respectively.
If chars is not nil, characters stored in chars that are between start and end are chosen.

Parameters:
	count - the length of random string to create
	start - the position in set of chars (ASCII/Unicode int) to start at
	end - the position in set of chars (ASCII/Unicode int) to end before
	letters - if true, generated string may include alphabetic characters
	numbers - if true, generated string may include numeric characters
	chars - the set of chars to choose randoms from. If nil, then it will use the set of all chars.

Returns:
	string - the random string
	error - an error stemming from invalid parameters: if count < 0; or the provided chars array is empty; or end <= start; or end > len(chars)
*/
func CryptoRandom(count int, start int, end int, letters bool, numbers bool, chars ...rune) (string, error) {
	if count == 0 {
		return "", nil
	} else if count < 0 {
		err := fmt.Errorf("randomstringutils illegal argument: Requested random string length %v is less than 0.", count) // equiv to err := errors.New("...")
		return "", err
	}
	if chars != nil && len(chars) == 0 {
		err := fmt.Errorf("randomstringutils illegal argument: The chars array must not be empty")
		return "", err
	}

	if start == 0 && end == 0 {
		if chars != nil {
			end = len(chars)
		} else {
			if !letters && !numbers {
				end = math.MaxInt32
			} else {
				end = 'z' + 1
				start = ' '
			}
		}
	} else {
		if end <= start {
			err := fmt.Errorf("randomstringutils illegal argument: Parameter end (%v) must be greater than start (%v)", end, start)
			return "", err
		}

		if chars != nil && end > len(chars) {
			err := fmt.Errorf("randomstringutils illegal argument: Parameter end (%v) cannot be greater than len(chars) (%v)", end, len(chars))
			return "", err
		}
	}

	buffer := make([]rune, count)
	gap := end - start

	// high-surrogates range, (\uD800-\uDBFF) = 55296 - 56319
	//  low-surrogates range, (\uDC00-\uDFFF) = 56320 - 57343

	for count != 0 {
		count--
		var ch rune
		if chars == nil {
			ch = rune(getCryptoRandomInt(gap) + int64(start))
		} else {
			ch = chars[getCryptoRandomInt(gap)+int64(start)]
		}

		if letters && unicode.IsLetter(ch) || numbers && unicode.IsDigit(ch) || !letters && !numbers {
			if ch >= 56320 && ch <= 57343 { // low surrogate range
				if count == 0 {
					count++
				} else {
					// Insert low surrogate
					buffer[count] = ch
					count--
					// Insert high surrogate
					buffer[count] = rune(55296 + getCryptoRandomInt(128))
				}
			} else if ch >= 55296 && ch <= 56191 { // High surrogates range (Partial)
				if count == 0 {
					count++
				} else {
					// Insert low surrogate
					buffer[count] = rune(56320 + getCryptoRandomInt(128))
					count--
					// Insert high surrogate
					buffer[count] = ch
				}
			} else if ch >= 56192 && ch <= 56319 {
				// private high surrogate, skip it
				count++
			} else {
				// not one of the surrogates*
				buffer[count] = ch
			}
		} else {
			count++
		}
	}
	return string(buffer), nil
}

func getCryptoRandomInt(count int) int64 {
	nBig, err := rand.Int(rand.Reader, big.NewInt(int64(count)))
	if err != nil {
		panic(err)
	}
	return nBig.Int64()
}
  070701000000C2000081A4000000000000000000000001645E367C00002141000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/Masterminds/goutils/randomstringutils.go    /*
Copyright 2014 Alexander Okoli

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package goutils

import (
	"fmt"
	"math"
	"math/rand"
	"time"
	"unicode"
)

// RANDOM provides the time-based seed used to generate random numbers
var RANDOM = rand.New(rand.NewSource(time.Now().UnixNano()))

/*
RandomNonAlphaNumeric creates a random string whose length is the number of characters specified.
Characters will be chosen from the set of all characters (ASCII/Unicode values between 0 to 2,147,483,647 (math.MaxInt32)).

Parameter:
	count - the length of random string to create

Returns:
	string - the random string
	error - an error stemming from an invalid parameter within underlying function, RandomSeed(...)
*/
func RandomNonAlphaNumeric(count int) (string, error) {
	return RandomAlphaNumericCustom(count, false, false)
}

/*
RandomAscii creates a random string whose length is the number of characters specified.
Characters will be chosen from the set of characters whose ASCII value is between 32 and 126 (inclusive).

Parameter:
	count - the length of random string to create

Returns:
	string - the random string
	error - an error stemming from an invalid parameter within underlying function, RandomSeed(...)
*/
func RandomAscii(count int) (string, error) {
	return Random(count, 32, 127, false, false)
}

/*
RandomNumeric creates a random string whose length is the number of characters specified.
Characters will be chosen from the set of numeric characters.

Parameter:
	count - the length of random string to create

Returns:
	string - the random string
	error - an error stemming from an invalid parameter within underlying function, RandomSeed(...)
*/
func RandomNumeric(count int) (string, error) {
	return Random(count, 0, 0, false, true)
}

/*
RandomAlphabetic creates a random string whose length is the number of characters specified.
Characters will be chosen from the set of alphabetic characters.

Parameters:
	count - the length of random string to create

Returns:
	string - the random string
	error - an error stemming from an invalid parameter within underlying function, RandomSeed(...)
*/
func RandomAlphabetic(count int) (string, error) {
	return Random(count, 0, 0, true, false)
}

/*
RandomAlphaNumeric creates a random string whose length is the number of characters specified.
Characters will be chosen from the set of alpha-numeric characters.

Parameter:
	count - the length of random string to create

Returns:
	string - the random string
	error - an error stemming from an invalid parameter within underlying function, RandomSeed(...)
*/
func RandomAlphaNumeric(count int) (string, error) {
	return Random(count, 0, 0, true, true)
}

/*
RandomAlphaNumericCustom creates a random string whose length is the number of characters specified.
Characters will be chosen from the set of alpha-numeric characters as indicated by the arguments.

Parameters:
	count - the length of random string to create
	letters - if true, generated string may include alphabetic characters
	numbers - if true, generated string may include numeric characters

Returns:
	string - the random string
	error - an error stemming from an invalid parameter within underlying function, RandomSeed(...)
*/
func RandomAlphaNumericCustom(count int, letters bool, numbers bool) (string, error) {
	return Random(count, 0, 0, letters, numbers)
}

/*
Random creates a random string based on a variety of options, using default source of randomness.
This method has exactly the same semantics as RandomSeed(int, int, int, bool, bool, []char, *rand.Rand), but
instead of using an externally supplied source of randomness, it uses the internal *rand.Rand instance.

Parameters:
	count - the length of random string to create
	start - the position in set of chars (ASCII/Unicode int) to start at
	end - the position in set of chars (ASCII/Unicode int) to end before
	letters - if true, generated string may include alphabetic characters
	numbers - if true, generated string may include numeric characters
	chars - the set of chars to choose randoms from. If nil, then it will use the set of all chars.

Returns:
	string - the random string
	error - an error stemming from an invalid parameter within underlying function, RandomSeed(...)
*/
func Random(count int, start int, end int, letters bool, numbers bool, chars ...rune) (string, error) {
	return RandomSeed(count, start, end, letters, numbers, chars, RANDOM)
}

/*
RandomSeed creates a random string based on a variety of options, using supplied source of randomness.
If the parameters start and end are both 0, start and end are set to ' ' and 'z', the ASCII printable characters, will be used,
unless letters and numbers are both false, in which case, start and end are set to 0 and math.MaxInt32, respectively.
If chars is not nil, characters stored in chars that are between start and end are chosen.
This method accepts a user-supplied *rand.Rand instance to use as a source of randomness. By seeding a single *rand.Rand instance
with a fixed seed and using it for each call, the same random sequence of strings can be generated repeatedly and predictably.

Parameters:
	count - the length of random string to create
	start - the position in set of chars (ASCII/Unicode decimals) to start at
	end - the position in set of chars (ASCII/Unicode decimals) to end before
	letters - if true, generated string may include alphabetic characters
	numbers - if true, generated string may include numeric characters
	chars - the set of chars to choose randoms from. If nil, then it will use the set of all chars.
	random - a source of randomness.

Returns:
	string - the random string
	error - an error stemming from invalid parameters: if count < 0; or the provided chars array is empty; or end <= start; or end > len(chars)
*/
func RandomSeed(count int, start int, end int, letters bool, numbers bool, chars []rune, random *rand.Rand) (string, error) {

	if count == 0 {
		return "", nil
	} else if count < 0 {
		err := fmt.Errorf("randomstringutils illegal argument: Requested random string length %v is less than 0.", count) // equiv to err := errors.New("...")
		return "", err
	}
	if chars != nil && len(chars) == 0 {
		err := fmt.Errorf("randomstringutils illegal argument: The chars array must not be empty")
		return "", err
	}

	if start == 0 && end == 0 {
		if chars != nil {
			end = len(chars)
		} else {
			if !letters && !numbers {
				end = math.MaxInt32
			} else {
				end = 'z' + 1
				start = ' '
			}
		}
	} else {
		if end <= start {
			err := fmt.Errorf("randomstringutils illegal argument: Parameter end (%v) must be greater than start (%v)", end, start)
			return "", err
		}

		if chars != nil && end > len(chars) {
			err := fmt.Errorf("randomstringutils illegal argument: Parameter end (%v) cannot be greater than len(chars) (%v)", end, len(chars))
			return "", err
		}
	}

	buffer := make([]rune, count)
	gap := end - start

	// high-surrogates range, (\uD800-\uDBFF) = 55296 - 56319
	//  low-surrogates range, (\uDC00-\uDFFF) = 56320 - 57343

	for count != 0 {
		count--
		var ch rune
		if chars == nil {
			ch = rune(random.Intn(gap) + start)
		} else {
			ch = chars[random.Intn(gap)+start]
		}

		if letters && unicode.IsLetter(ch) || numbers && unicode.IsDigit(ch) || !letters && !numbers {
			if ch >= 56320 && ch <= 57343 { // low surrogate range
				if count == 0 {
					count++
				} else {
					// Insert low surrogate
					buffer[count] = ch
					count--
					// Insert high surrogate
					buffer[count] = rune(55296 + random.Intn(128))
				}
			} else if ch >= 55296 && ch <= 56191 { // High surrogates range (Partial)
				if count == 0 {
					count++
				} else {
					// Insert low surrogate
					buffer[count] = rune(56320 + random.Intn(128))
					count--
					// Insert high surrogate
					buffer[count] = ch
				}
			} else if ch >= 56192 && ch <= 56319 {
				// private high surrogate, skip it
				count++
			} else {
				// not one of the surrogates*
				buffer[count] = ch
			}
		} else {
			count++
		}
	}
	return string(buffer), nil
}
   070701000000C3000081A4000000000000000000000001645E367C00001965000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/Masterminds/goutils/stringutils.go  /*
Copyright 2014 Alexander Okoli

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package goutils

import (
	"bytes"
	"fmt"
	"strings"
	"unicode"
)

// Typically returned by functions where a searched item cannot be found
const INDEX_NOT_FOUND = -1

/*
Abbreviate abbreviates a string using ellipses. This will turn  the string "Now is the time for all good men" into "Now is the time for..."

Specifically, the algorithm is as follows:

    - If str is less than maxWidth characters long, return it.
    - Else abbreviate it to (str[0:maxWidth - 3] + "...").
    - If maxWidth is less than 4, return an illegal argument error.
    - In no case will it return a string of length greater than maxWidth.

Parameters:
    str -  the string to check
    maxWidth - maximum length of result string, must be at least 4

Returns:
    string - abbreviated string
    error - if the width is too small
*/
func Abbreviate(str string, maxWidth int) (string, error) {
	return AbbreviateFull(str, 0, maxWidth)
}

/*
AbbreviateFull abbreviates a string using ellipses. This will turn the string "Now is the time for all good men" into "...is the time for..."
This function works like Abbreviate(string, int), but allows you to specify a "left edge" offset. Note that this left edge is not
necessarily going to be the leftmost character in the result, or the first character following the ellipses, but it will appear
somewhere in the result.
In no case will it return a string of length greater than maxWidth.

Parameters:
    str - the string to check
    offset - left edge of source string
    maxWidth - maximum length of result string, must be at least 4

Returns:
    string - abbreviated string
    error - if the width is too small
*/
func AbbreviateFull(str string, offset int, maxWidth int) (string, error) {
	if str == "" {
		return "", nil
	}
	if maxWidth < 4 {
		err := fmt.Errorf("stringutils illegal argument: Minimum abbreviation width is 4")
		return "", err
	}
	if len(str) <= maxWidth {
		return str, nil
	}
	if offset > len(str) {
		offset = len(str)
	}
	if len(str)-offset < (maxWidth - 3) { // 15 - 5 < 10 - 3 =  10 < 7
		offset = len(str) - (maxWidth - 3)
	}
	abrevMarker := "..."
	if offset <= 4 {
		return str[0:maxWidth-3] + abrevMarker, nil // str.substring(0, maxWidth - 3) + abrevMarker;
	}
	if maxWidth < 7 {
		err := fmt.Errorf("stringutils illegal argument: Minimum abbreviation width with offset is 7")
		return "", err
	}
	if (offset + maxWidth - 3) < len(str) { // 5 + (10-3) < 15 = 12 < 15
		abrevStr, _ := Abbreviate(str[offset:len(str)], (maxWidth - 3))
		return abrevMarker + abrevStr, nil // abrevMarker + abbreviate(str.substring(offset), maxWidth - 3);
	}
	return abrevMarker + str[(len(str)-(maxWidth-3)):len(str)], nil // abrevMarker + str.substring(str.length() - (maxWidth - 3));
}

/*
DeleteWhiteSpace deletes all whitespaces from a string as defined by unicode.IsSpace(rune).
It returns the string without whitespaces.

Parameter:
    str - the string to delete whitespace from, may be nil

Returns:
    the string without whitespaces
*/
func DeleteWhiteSpace(str string) string {
	if str == "" {
		return str
	}
	sz := len(str)
	var chs bytes.Buffer
	count := 0
	for i := 0; i < sz; i++ {
		ch := rune(str[i])
		if !unicode.IsSpace(ch) {
			chs.WriteRune(ch)
			count++
		}
	}
	if count == sz {
		return str
	}
	return chs.String()
}

/*
IndexOfDifference compares two strings, and returns the index at which the strings begin to differ.

Parameters:
    str1 - the first string
    str2 - the second string

Returns:
    the index where str1 and str2 begin to differ; -1 if they are equal
*/
func IndexOfDifference(str1 string, str2 string) int {
	if str1 == str2 {
		return INDEX_NOT_FOUND
	}
	if IsEmpty(str1) || IsEmpty(str2) {
		return 0
	}
	var i int
	for i = 0; i < len(str1) && i < len(str2); i++ {
		if rune(str1[i]) != rune(str2[i]) {
			break
		}
	}
	if i < len(str2) || i < len(str1) {
		return i
	}
	return INDEX_NOT_FOUND
}

/*
IsBlank checks if a string is whitespace or empty (""). Observe the following behavior:

    goutils.IsBlank("")        = true
    goutils.IsBlank(" ")       = true
    goutils.IsBlank("bob")     = false
    goutils.IsBlank("  bob  ") = false

Parameter:
    str - the string to check

Returns:
    true - if the string is whitespace or empty ("")
*/
func IsBlank(str string) bool {
	strLen := len(str)
	if str == "" || strLen == 0 {
		return true
	}
	for i := 0; i < strLen; i++ {
		if unicode.IsSpace(rune(str[i])) == false {
			return false
		}
	}
	return true
}

/*
IndexOf returns the index of the first instance of sub in str, with the search beginning from the
index start point specified. -1 is returned if sub is not present in str.

An empty string ("") will return -1 (INDEX_NOT_FOUND). A negative start position is treated as zero.
A start position greater than the string length returns -1.

Parameters:
    str - the string to check
    sub - the substring to find
    start - the start position; negative treated as zero

Returns:
    the first index where the sub string was found  (always >= start)
*/
func IndexOf(str string, sub string, start int) int {

	if start < 0 {
		start = 0
	}

	if len(str) < start {
		return INDEX_NOT_FOUND
	}

	if IsEmpty(str) || IsEmpty(sub) {
		return INDEX_NOT_FOUND
	}

	partialIndex := strings.Index(str[start:len(str)], sub)
	if partialIndex == -1 {
		return INDEX_NOT_FOUND
	}
	return partialIndex + start
}

// IsEmpty checks if a string is empty (""). Returns true if empty, and false otherwise.
func IsEmpty(str string) bool {
	return len(str) == 0
}

// Returns either the passed in string, or if the string is empty, the value of defaultStr.
func DefaultString(str string, defaultStr string) string {
	if IsEmpty(str) {
		return defaultStr
	}
	return str
}

// Returns either the passed in string, or if the string is whitespace, empty (""), the value of defaultStr.
func DefaultIfBlank(str string, defaultStr string) string {
	if IsBlank(str) {
		return defaultStr
	}
	return str
}
   070701000000C4000081A4000000000000000000000001645E367C0000263C000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/Masterminds/goutils/wordutils.go    /*
Copyright 2014 Alexander Okoli

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

/*
Package goutils provides utility functions to manipulate strings in various ways.
The code snippets below show examples of how to use goutils. Some functions return
errors while others do not, so usage would vary as a result.

Example:

    package main

    import (
        "fmt"
        "github.com/aokoli/goutils"
    )

    func main() {

        // EXAMPLE 1: A goutils function which returns no errors
        fmt.Println (goutils.Initials("John Doe Foo")) // Prints out "JDF"



        // EXAMPLE 2: A goutils function which returns an error
        rand1, err1 := goutils.Random (-1, 0, 0, true, true)

        if err1 != nil {
            fmt.Println(err1) // Prints out error message because -1 was entered as the first parameter in goutils.Random(...)
        } else {
            fmt.Println(rand1)
        }
    }
*/
package goutils

import (
	"bytes"
	"strings"
	"unicode"
)

// VERSION indicates the current version of goutils
const VERSION = "1.0.0"

/*
Wrap wraps a single line of text, identifying words by ' '.
New lines will be separated by '\n'. Very long words, such as URLs will not be wrapped.
Leading spaces on a new line are stripped. Trailing spaces are not stripped.

Parameters:
    str - the string to be word wrapped
    wrapLength - the column (a column can fit only one character) to wrap the words at, less than 1 is treated as 1

Returns:
    a line with newlines inserted
*/
func Wrap(str string, wrapLength int) string {
	return WrapCustom(str, wrapLength, "", false)
}

/*
WrapCustom wraps a single line of text, identifying words by ' '.
Leading spaces on a new line are stripped. Trailing spaces are not stripped.

Parameters:
    str - the string to be word wrapped
    wrapLength - the column number (a column can fit only one character) to wrap the words at, less than 1 is treated as 1
    newLineStr - the string to insert for a new line, "" uses '\n'
    wrapLongWords - true if long words (such as URLs) should be wrapped

Returns:
    a line with newlines inserted
*/
func WrapCustom(str string, wrapLength int, newLineStr string, wrapLongWords bool) string {

	if str == "" {
		return ""
	}
	if newLineStr == "" {
		newLineStr = "\n" // TODO Assumes "\n" is seperator. Explore SystemUtils.LINE_SEPARATOR from Apache Commons
	}
	if wrapLength < 1 {
		wrapLength = 1
	}

	inputLineLength := len(str)
	offset := 0

	var wrappedLine bytes.Buffer

	for inputLineLength-offset > wrapLength {

		if rune(str[offset]) == ' ' {
			offset++
			continue
		}

		end := wrapLength + offset + 1
		spaceToWrapAt := strings.LastIndex(str[offset:end], " ") + offset

		if spaceToWrapAt >= offset {
			// normal word (not longer than wrapLength)
			wrappedLine.WriteString(str[offset:spaceToWrapAt])
			wrappedLine.WriteString(newLineStr)
			offset = spaceToWrapAt + 1

		} else {
			// long word or URL
			if wrapLongWords {
				end := wrapLength + offset
				// long words are wrapped one line at a time
				wrappedLine.WriteString(str[offset:end])
				wrappedLine.WriteString(newLineStr)
				offset += wrapLength
			} else {
				// long words aren't wrapped, just extended beyond limit
				end := wrapLength + offset
				index := strings.IndexRune(str[end:len(str)], ' ')
				if index == -1 {
					wrappedLine.WriteString(str[offset:len(str)])
					offset = inputLineLength
				} else {
					spaceToWrapAt = index + end
					wrappedLine.WriteString(str[offset:spaceToWrapAt])
					wrappedLine.WriteString(newLineStr)
					offset = spaceToWrapAt + 1
				}
			}
		}
	}

	wrappedLine.WriteString(str[offset:len(str)])

	return wrappedLine.String()

}

/*
Capitalize capitalizes all the delimiter separated words in a string. Only the first letter of each word is changed.
To convert the rest of each word to lowercase at the same time, use CapitalizeFully(str string, delimiters ...rune).
The delimiters represent a set of characters understood to separate words. The first string character
and the first non-delimiter character after a delimiter will be capitalized. A "" input string returns "".
Capitalization uses the Unicode title case, normally equivalent to upper case.

Parameters:
    str - the string to capitalize
    delimiters - set of characters to determine capitalization, exclusion of this parameter means whitespace would be delimeter

Returns:
    capitalized string
*/
func Capitalize(str string, delimiters ...rune) string {

	var delimLen int

	if delimiters == nil {
		delimLen = -1
	} else {
		delimLen = len(delimiters)
	}

	if str == "" || delimLen == 0 {
		return str
	}

	buffer := []rune(str)
	capitalizeNext := true
	for i := 0; i < len(buffer); i++ {
		ch := buffer[i]
		if isDelimiter(ch, delimiters...) {
			capitalizeNext = true
		} else if capitalizeNext {
			buffer[i] = unicode.ToTitle(ch)
			capitalizeNext = false
		}
	}
	return string(buffer)

}

/*
CapitalizeFully converts all the delimiter separated words in a string into capitalized words, that is each word is made up of a
titlecase character and then a series of lowercase characters. The delimiters represent a set of characters understood
to separate words. The first string character and the first non-delimiter character after a delimiter will be capitalized.
Capitalization uses the Unicode title case, normally equivalent to upper case.

Parameters:
    str - the string to capitalize fully
    delimiters - set of characters to determine capitalization, exclusion of this parameter means whitespace would be delimeter

Returns:
    capitalized string
*/
func CapitalizeFully(str string, delimiters ...rune) string {

	var delimLen int

	if delimiters == nil {
		delimLen = -1
	} else {
		delimLen = len(delimiters)
	}

	if str == "" || delimLen == 0 {
		return str
	}
	str = strings.ToLower(str)
	return Capitalize(str, delimiters...)
}

/*
Uncapitalize uncapitalizes all the whitespace separated words in a string. Only the first letter of each word is changed.
The delimiters represent a set of characters understood to separate words. The first string character and the first non-delimiter
character after a delimiter will be uncapitalized. Whitespace is defined by unicode.IsSpace(char).

Parameters:
    str - the string to uncapitalize fully
    delimiters - set of characters to determine capitalization, exclusion of this parameter means whitespace would be delimeter

Returns:
    uncapitalized string
*/
func Uncapitalize(str string, delimiters ...rune) string {

	var delimLen int

	if delimiters == nil {
		delimLen = -1
	} else {
		delimLen = len(delimiters)
	}

	if str == "" || delimLen == 0 {
		return str
	}

	buffer := []rune(str)
	uncapitalizeNext := true // TODO Always makes capitalize/un apply to first char.
	for i := 0; i < len(buffer); i++ {
		ch := buffer[i]
		if isDelimiter(ch, delimiters...) {
			uncapitalizeNext = true
		} else if uncapitalizeNext {
			buffer[i] = unicode.ToLower(ch)
			uncapitalizeNext = false
		}
	}
	return string(buffer)
}

/*
SwapCase swaps the case of a string using a word based algorithm.

Conversion algorithm:

    Upper case character converts to Lower case
    Title case character converts to Lower case
    Lower case character after Whitespace or at start converts to Title case
    Other Lower case character converts to Upper case
    Whitespace is defined by unicode.IsSpace(char).

Parameters:
    str - the string to swap case

Returns:
    the changed string
*/
func SwapCase(str string) string {
	if str == "" {
		return str
	}
	buffer := []rune(str)

	whitespace := true

	for i := 0; i < len(buffer); i++ {
		ch := buffer[i]
		if unicode.IsUpper(ch) {
			buffer[i] = unicode.ToLower(ch)
			whitespace = false
		} else if unicode.IsTitle(ch) {
			buffer[i] = unicode.ToLower(ch)
			whitespace = false
		} else if unicode.IsLower(ch) {
			if whitespace {
				buffer[i] = unicode.ToTitle(ch)
				whitespace = false
			} else {
				buffer[i] = unicode.ToUpper(ch)
			}
		} else {
			whitespace = unicode.IsSpace(ch)
		}
	}
	return string(buffer)
}

/*
Initials extracts the initial letters from each word in the string. The first letter of the string and all first
letters after the defined delimiters are returned as a new string. Their case is not changed. If the delimiters
parameter is excluded, then Whitespace is used. Whitespace is defined by unicode.IsSpacea(char). An empty delimiter array returns an empty string.

Parameters:
    str - the string to get initials from
    delimiters - set of characters to determine words, exclusion of this parameter means whitespace would be delimeter
Returns:
    string of initial letters
*/
func Initials(str string, delimiters ...rune) string {
	if str == "" {
		return str
	}
	if delimiters != nil && len(delimiters) == 0 {
		return ""
	}
	strLen := len(str)
	var buf bytes.Buffer
	lastWasGap := true
	for i := 0; i < strLen; i++ {
		ch := rune(str[i])

		if isDelimiter(ch, delimiters...) {
			lastWasGap = true
		} else if lastWasGap {
			buf.WriteRune(ch)
			lastWasGap = false
		}
	}
	return buf.String()
}

// private function (lower case func name)
func isDelimiter(ch rune, delimiters ...rune) bool {
	if delimiters == nil {
		return unicode.IsSpace(ch)
	}
	for _, delimiter := range delimiters {
		if ch == delimiter {
			return true
		}
	}
	return false
}
070701000000C5000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/Masterminds/semver  070701000000C6000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/Masterminds/semver/v3   070701000000C7000081A4000000000000000000000001645E367C00000006000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/Masterminds/semver/v3/.gitignore    _fuzz/  070701000000C8000081A4000000000000000000000001645E367C0000015F000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/Masterminds/semver/v3/.golangci.yml run:
  deadline: 2m

linters:
  disable-all: true
  enable:
    - misspell
    - govet
    - staticcheck
    - errcheck
    - unparam
    - ineffassign
    - nakedret
    - gocyclo
    - dupl
    - goimports
    - revive
    - gosec
    - gosimple
    - typecheck
    - unused

linters-settings:
  gofmt:
    simplify: true
  dupl:
    threshold: 600
 070701000000C9000081A4000000000000000000000001645E367C0000188A000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/Masterminds/semver/v3/CHANGELOG.md  # Changelog

## 3.2.0 (2022-11-28)

### Added

- #190: Added text marshaling and unmarshaling
- #167: Added JSON marshalling for constraints (thanks @SimonTheLeg)
- #173: Implement encoding.TextMarshaler and encoding.TextUnmarshaler on Version (thanks @MarkRosemaker)
- #179: Added New() version constructor (thanks @kazhuravlev)

### Changed

- #182/#183: Updated CI testing setup

### Fixed

- #186: Fixing issue where validation of constraint section gave false positives
- #176: Fix constraints check with *-0 (thanks @mtt0)
- #181: Fixed Caret operator (^) gives unexpected results when the minor version in constraint is 0 (thanks @arshchimni)
- #161: Fixed godoc (thanks @afirth)

## 3.1.1 (2020-11-23)

### Fixed

- #158: Fixed issue with generated regex operation order that could cause problem

## 3.1.0 (2020-04-15)

### Added

- #131: Add support for serializing/deserializing SQL (thanks @ryancurrah)

### Changed

- #148: More accurate validation messages on constraints

## 3.0.3 (2019-12-13)

### Fixed

- #141: Fixed issue with <= comparison

## 3.0.2 (2019-11-14)

### Fixed

- #134: Fixed broken constraint checking with ^0.0 (thanks @krmichelos)

## 3.0.1 (2019-09-13)

### Fixed

- #125: Fixes issue with module path for v3

## 3.0.0 (2019-09-12)

This is a major release of the semver package which includes API changes. The Go
API is compatible with ^1. The Go API was not changed because many people are using
`go get` without Go modules for their applications and API breaking changes cause
errors which we have or would need to support.

The changes in this release are the handling based on the data passed into the
functions. These are described in the added and changed sections below.

### Added

- StrictNewVersion function. This is similar to NewVersion but will return an
  error if the version passed in is not a strict semantic version. For example,
  1.2.3 would pass but v1.2.3 or 1.2 would fail because they are not strictly
  speaking semantic versions. This function is faster, performs fewer operations,
  and uses fewer allocations than NewVersion.
- Fuzzing has been performed on NewVersion, StrictNewVersion, and NewConstraint.
  The Makefile contains the operations used. For more information on you can start
  on Wikipedia at https://en.wikipedia.org/wiki/Fuzzing
- Now using Go modules

### Changed

- NewVersion has proper prerelease and metadata validation with error messages
  to signal an issue with either of them
- ^ now operates using a similar set of rules to npm/js and Rust/Cargo. If the
  version is >=1 the ^ ranges works the same as v1. For major versions of 0 the
  rules have changed. The minor version is treated as the stable version unless
  a patch is specified and then it is equivalent to =. One difference from npm/js
  is that prereleases there are only to a specific version (e.g. 1.2.3).
  Prereleases here look over multiple versions and follow semantic version
  ordering rules. This pattern now follows along with the expected and requested
  handling of this packaged by numerous users.

## 1.5.0 (2019-09-11)

### Added

- #103: Add basic fuzzing for `NewVersion()` (thanks @jesse-c)

### Changed

- #82: Clarify wildcard meaning in range constraints and update tests for it (thanks @greysteil)
- #83: Clarify caret operator range for pre-1.0.0 dependencies (thanks @greysteil)
- #72: Adding docs comment pointing to vert for a cli
- #71: Update the docs on pre-release comparator handling
- #89: Test with new go versions (thanks @thedevsaddam)
- #87: Added $ to ValidPrerelease for better validation (thanks @jeremycarroll)

### Fixed

- #78: Fix unchecked error in example code (thanks @ravron)
- #70: Fix the handling of pre-releases and the 0.0.0 release edge case
- #97: Fixed copyright file for proper display on GitHub
- #107: Fix handling prerelease when sorting alphanum and num 
- #109: Fixed where Validate sometimes returns wrong message on error

## 1.4.2 (2018-04-10)

### Changed

- #72: Updated the docs to point to vert for a console appliaction
- #71: Update the docs on pre-release comparator handling

### Fixed

- #70: Fix the handling of pre-releases and the 0.0.0 release edge case

## 1.4.1 (2018-04-02)

### Fixed

- Fixed #64: Fix pre-release precedence issue (thanks @uudashr)

## 1.4.0 (2017-10-04)

### Changed

- #61: Update NewVersion to parse ints with a 64bit int size (thanks @zknill)

## 1.3.1 (2017-07-10)

### Fixed

- Fixed #57: number comparisons in prerelease sometimes inaccurate

## 1.3.0 (2017-05-02)

### Added

- #45: Added json (un)marshaling support (thanks @mh-cbon)
- Stability marker. See https://masterminds.github.io/stability/

### Fixed

- #51: Fix handling of single digit tilde constraint (thanks @dgodd)

### Changed

- #55: The godoc icon moved from png to svg

## 1.2.3 (2017-04-03)

### Fixed

- #46: Fixed 0.x.x and 0.0.x in constraints being treated as *

## Release 1.2.2 (2016-12-13)

### Fixed

- #34: Fixed issue where hyphen range was not working with pre-release parsing.

## Release 1.2.1 (2016-11-28)

### Fixed

- #24: Fixed edge case issue where constraint "> 0" does not handle "0.0.1-alpha"
  properly.

## Release 1.2.0 (2016-11-04)

### Added

- #20: Added MustParse function for versions (thanks @adamreese)
- #15: Added increment methods on versions (thanks @mh-cbon)

### Fixed

- Issue #21: Per the SemVer spec (section 9) a pre-release is unstable and
  might not satisfy the intended compatibility. The change here ignores pre-releases
  on constraint checks (e.g., ~ or ^) when a pre-release is not part of the
  constraint. For example, `^1.2.3` will ignore pre-releases while
  `^1.2.3-alpha` will include them.

## Release 1.1.1 (2016-06-30)

### Changed

- Issue #9: Speed up version comparison performance (thanks @sdboyer)
- Issue #8: Added benchmarks (thanks @sdboyer)
- Updated Go Report Card URL to new location
- Updated Readme to add code snippet formatting (thanks @mh-cbon)
- Updating tagging to v[SemVer] structure for compatibility with other tools.

## Release 1.1.0 (2016-03-11)

- Issue #2: Implemented validation to provide reasons a versions failed a
  constraint.

## Release 1.0.1 (2015-12-31)

- Fixed #1: * constraint failing on valid versions.

## Release 1.0.0 (2015-10-20)

- Initial release
  070701000000CA000081A4000000000000000000000001645E367C00000436000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/Masterminds/semver/v3/LICENSE.txt   Copyright (C) 2014-2019, Matt Butcher and Matt Farina

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
  070701000000CB000081A4000000000000000000000001645E367C00000324000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/Masterminds/semver/v3/Makefile  GOPATH=$(shell go env GOPATH)
GOLANGCI_LINT=$(GOPATH)/bin/golangci-lint

.PHONY: lint
lint: $(GOLANGCI_LINT)
	@echo "==> Linting codebase"
	@$(GOLANGCI_LINT) run

.PHONY: test
test:
	@echo "==> Running tests"
	GO111MODULE=on go test -v

.PHONY: test-cover
test-cover:
	@echo "==> Running Tests with coverage"
	GO111MODULE=on go test -cover .

.PHONY: fuzz
fuzz:
	@echo "==> Running Fuzz Tests"
	go test -fuzz=FuzzNewVersion -fuzztime=15s .
	go test -fuzz=FuzzStrictNewVersion -fuzztime=15s .
	go test -fuzz=FuzzNewConstraint -fuzztime=15s .

$(GOLANGCI_LINT):
	# Install golangci-lint. The configuration for it is in the .golangci.yml
	# file in the root of the repository
	echo ${GOPATH}
	curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(GOPATH)/bin v1.17.1
070701000000CC000081A4000000000000000000000001645E367C000029D6000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/Masterminds/semver/v3/README.md # SemVer

The `semver` package provides the ability to work with [Semantic Versions](http://semver.org) in Go. Specifically it provides the ability to:

* Parse semantic versions
* Sort semantic versions
* Check if a semantic version fits within a set of constraints
* Optionally work with a `v` prefix

[![Stability:
Active](https://masterminds.github.io/stability/active.svg)](https://masterminds.github.io/stability/active.html)
[![](https://github.com/Masterminds/semver/workflows/Tests/badge.svg)](https://github.com/Masterminds/semver/actions)
[![GoDoc](https://img.shields.io/static/v1?label=godoc&message=reference&color=blue)](https://pkg.go.dev/github.com/Masterminds/semver/v3)
[![Go Report Card](https://goreportcard.com/badge/github.com/Masterminds/semver)](https://goreportcard.com/report/github.com/Masterminds/semver)

If you are looking for a command line tool for version comparisons please see
[vert](https://github.com/Masterminds/vert) which uses this library.

## Package Versions

Note, import `github.com/github.com/Masterminds/semver/v3` to use the latest version.

There are three major versions fo the `semver` package.

* 3.x.x is the stable and active version. This version is focused on constraint
  compatibility for range handling in other tools from other languages. It has
  a similar API to the v1 releases. The development of this version is on the master
  branch. The documentation for this version is below.
* 2.x was developed primarily for [dep](https://github.com/golang/dep). There are
  no tagged releases and the development was performed by [@sdboyer](https://github.com/sdboyer).
  There are API breaking changes from v1. This version lives on the [2.x branch](https://github.com/Masterminds/semver/tree/2.x).
* 1.x.x is the original release. It is no longer maintained. You should use the
  v3 release instead. You can read the documentation for the 1.x.x release
  [here](https://github.com/Masterminds/semver/blob/release-1/README.md).

## Parsing Semantic Versions

There are two functions that can parse semantic versions. The `StrictNewVersion`
function only parses valid version 2 semantic versions as outlined in the
specification. The `NewVersion` function attempts to coerce a version into a
semantic version and parse it. For example, if there is a leading v or a version
listed without all 3 parts (e.g. `v1.2`) it will attempt to coerce it into a valid
semantic version (e.g., 1.2.0). In both cases a `Version` object is returned
that can be sorted, compared, and used in constraints.

When parsing a version an error is returned if there is an issue parsing the
version. For example,

    v, err := semver.NewVersion("1.2.3-beta.1+build345")

The version object has methods to get the parts of the version, compare it to
other versions, convert the version back into a string, and get the original
string. Getting the original string is useful if the semantic version was coerced
into a valid form.

## Sorting Semantic Versions

A set of versions can be sorted using the `sort` package from the standard library.
For example,

```go
raw := []string{"1.2.3", "1.0", "1.3", "2", "0.4.2",}
vs := make([]*semver.Version, len(raw))
for i, r := range raw {
    v, err := semver.NewVersion(r)
    if err != nil {
        t.Errorf("Error parsing version: %s", err)
    }

    vs[i] = v
}

sort.Sort(semver.Collection(vs))
```

## Checking Version Constraints

There are two methods for comparing versions. One uses comparison methods on
`Version` instances and the other uses `Constraints`. There are some important
differences to notes between these two methods of comparison.

1. When two versions are compared using functions such as `Compare`, `LessThan`,
   and others it will follow the specification and always include prereleases
   within the comparison. It will provide an answer that is valid with the
   comparison section of the spec at https://semver.org/#spec-item-11
2. When constraint checking is used for checks or validation it will follow a
   different set of rules that are common for ranges with tools like npm/js
   and Rust/Cargo. This includes considering prereleases to be invalid if the
   ranges does not include one. If you want to have it include pre-releases a
   simple solution is to include `-0` in your range.
3. Constraint ranges can have some complex rules including the shorthand use of
   ~ and ^. For more details on those see the options below.

There are differences between the two methods or checking versions because the
comparison methods on `Version` follow the specification while comparison ranges
are not part of the specification. Different packages and tools have taken it
upon themselves to come up with range rules. This has resulted in differences.
For example, npm/js and Cargo/Rust follow similar patterns while PHP has a
different pattern for ^. The comparison features in this package follow the
npm/js and Cargo/Rust lead because applications using it have followed similar
patters with their versions.

Checking a version against version constraints is one of the most featureful
parts of the package.

```go
c, err := semver.NewConstraint(">= 1.2.3")
if err != nil {
    // Handle constraint not being parsable.
}

v, err := semver.NewVersion("1.3")
if err != nil {
    // Handle version not being parsable.
}
// Check if the version meets the constraints. The a variable will be true.
a := c.Check(v)
```

### Basic Comparisons

There are two elements to the comparisons. First, a comparison string is a list
of space or comma separated AND comparisons. These are then separated by || (OR)
comparisons. For example, `">= 1.2 < 3.0.0 || >= 4.2.3"` is looking for a
comparison that's greater than or equal to 1.2 and less than 3.0.0 or is
greater than or equal to 4.2.3.

The basic comparisons are:

* `=`: equal (aliased to no operator)
* `!=`: not equal
* `>`: greater than
* `<`: less than
* `>=`: greater than or equal to
* `<=`: less than or equal to

### Working With Prerelease Versions

Pre-releases, for those not familiar with them, are used for software releases
prior to stable or generally available releases. Examples of prereleases include
development, alpha, beta, and release candidate releases. A prerelease may be
a version such as `1.2.3-beta.1` while the stable release would be `1.2.3`. In the
order of precedence, prereleases come before their associated releases. In this
example `1.2.3-beta.1 < 1.2.3`.

According to the Semantic Version specification prereleases may not be
API compliant with their release counterpart. It says,

> A pre-release version indicates that the version is unstable and might not satisfy the intended compatibility requirements as denoted by its associated normal version.

SemVer comparisons using constraints without a prerelease comparator will skip
prerelease versions. For example, `>=1.2.3` will skip prereleases when looking
at a list of releases while `>=1.2.3-0` will evaluate and find prereleases.

The reason for the `0` as a pre-release version in the example comparison is
because pre-releases can only contain ASCII alphanumerics and hyphens (along with
`.` separators), per the spec. Sorting happens in ASCII sort order, again per the
spec. The lowest character is a `0` in ASCII sort order
(see an [ASCII Table](http://www.asciitable.com/))

Understanding ASCII sort ordering is important because A-Z comes before a-z. That
means `>=1.2.3-BETA` will return `1.2.3-alpha`. What you might expect from case
sensitivity doesn't apply here. This is due to ASCII sort ordering which is what
the spec specifies.

### Hyphen Range Comparisons

There are multiple methods to handle ranges and the first is hyphens ranges.
These look like:

* `1.2 - 1.4.5` which is equivalent to `>= 1.2 <= 1.4.5`
* `2.3.4 - 4.5` which is equivalent to `>= 2.3.4 <= 4.5`

### Wildcards In Comparisons

The `x`, `X`, and `*` characters can be used as a wildcard character. This works
for all comparison operators. When used on the `=` operator it falls
back to the patch level comparison (see tilde below). For example,

* `1.2.x` is equivalent to `>= 1.2.0, < 1.3.0`
* `>= 1.2.x` is equivalent to `>= 1.2.0`
* `<= 2.x` is equivalent to `< 3`
* `*` is equivalent to `>= 0.0.0`

### Tilde Range Comparisons (Patch)

The tilde (`~`) comparison operator is for patch level ranges when a minor
version is specified and major level changes when the minor number is missing.
For example,

* `~1.2.3` is equivalent to `>= 1.2.3, < 1.3.0`
* `~1` is equivalent to `>= 1, < 2`
* `~2.3` is equivalent to `>= 2.3, < 2.4`
* `~1.2.x` is equivalent to `>= 1.2.0, < 1.3.0`
* `~1.x` is equivalent to `>= 1, < 2`

### Caret Range Comparisons (Major)

The caret (`^`) comparison operator is for major level changes once a stable
(1.0.0) release has occurred. Prior to a 1.0.0 release the minor versions acts
as the API stability level. This is useful when comparisons of API versions as a
major change is API breaking. For example,

* `^1.2.3` is equivalent to `>= 1.2.3, < 2.0.0`
* `^1.2.x` is equivalent to `>= 1.2.0, < 2.0.0`
* `^2.3` is equivalent to `>= 2.3, < 3`
* `^2.x` is equivalent to `>= 2.0.0, < 3`
* `^0.2.3` is equivalent to `>=0.2.3 <0.3.0`
* `^0.2` is equivalent to `>=0.2.0 <0.3.0`
* `^0.0.3` is equivalent to `>=0.0.3 <0.0.4`
* `^0.0` is equivalent to `>=0.0.0 <0.1.0`
* `^0` is equivalent to `>=0.0.0 <1.0.0`

## Validation

In addition to testing a version against a constraint, a version can be validated
against a constraint. When validation fails a slice of errors containing why a
version didn't meet the constraint is returned. For example,

```go
c, err := semver.NewConstraint("<= 1.2.3, >= 1.4")
if err != nil {
    // Handle constraint not being parseable.
}

v, err := semver.NewVersion("1.3")
if err != nil {
    // Handle version not being parseable.
}

// Validate a version against a constraint.
a, msgs := c.Validate(v)
// a is false
for _, m := range msgs {
    fmt.Println(m)

    // Loops over the errors which would read
    // "1.3 is greater than 1.2.3"
    // "1.3 is less than 1.4"
}
```

## Contribute

If you find an issue or want to contribute please file an [issue](https://github.com/Masterminds/semver/issues)
or [create a pull request](https://github.com/Masterminds/semver/pulls).

## Security

Security is an important consideration for this project. The project currently
uses the following tools to help discover security issues:

* [CodeQL](https://github.com/Masterminds/semver)
* [gosec](https://github.com/securego/gosec)
* Daily Fuzz testing

If you believe you have found a security vulnerability you can privately disclose
it through the [GitHub security page](https://github.com/Masterminds/semver/security).
  070701000000CD000081A4000000000000000000000001645E367C00000222000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/Masterminds/semver/v3/SECURITY.md   # Security Policy

## Supported Versions

The following versions of semver are currently supported:

| Version | Supported          |
| ------- | ------------------ |
| 3.x     | :white_check_mark: |
| 2.x     | :x:                |
| 1.x     | :x:                |

Fixes are only released for the latest minor version in the form of a patch release.

## Reporting a Vulnerability

You can privately disclose a vulnerability through GitHubs
[private vulnerability reporting](https://github.com/Masterminds/semver/security/advisories)
mechanism.
  070701000000CE000081A4000000000000000000000001645E367C000002D9000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/Masterminds/semver/v3/collection.go package semver

// Collection is a collection of Version instances and implements the sort
// interface. See the sort package for more details.
// https://golang.org/pkg/sort/
type Collection []*Version

// Len returns the length of a collection. The number of Version instances
// on the slice.
func (c Collection) Len() int {
	return len(c)
}

// Less is needed for the sort interface to compare two Version objects on the
// slice. If checks if one is less than the other.
func (c Collection) Less(i, j int) bool {
	return c[i].LessThan(c[j])
}

// Swap is needed for the sort interface to replace the Version objects
// at two different positions in the slice.
func (c Collection) Swap(i, j int) {
	c[i], c[j] = c[j], c[i]
}
   070701000000CF000081A4000000000000000000000001645E367C000040C5000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/Masterminds/semver/v3/constraints.go    package semver

import (
	"bytes"
	"errors"
	"fmt"
	"regexp"
	"strings"
)

// Constraints is one or more constraint that a semantic version can be
// checked against.
type Constraints struct {
	constraints [][]*constraint
}

// NewConstraint returns a Constraints instance that a Version instance can
// be checked against. If there is a parse error it will be returned.
func NewConstraint(c string) (*Constraints, error) {

	// Rewrite - ranges into a comparison operation.
	c = rewriteRange(c)

	ors := strings.Split(c, "||")
	or := make([][]*constraint, len(ors))
	for k, v := range ors {

		// TODO: Find a way to validate and fetch all the constraints in a simpler form

		// Validate the segment
		if !validConstraintRegex.MatchString(v) {
			return nil, fmt.Errorf("improper constraint: %s", v)
		}

		cs := findConstraintRegex.FindAllString(v, -1)
		if cs == nil {
			cs = append(cs, v)
		}
		result := make([]*constraint, len(cs))
		for i, s := range cs {
			pc, err := parseConstraint(s)
			if err != nil {
				return nil, err
			}

			result[i] = pc
		}
		or[k] = result
	}

	o := &Constraints{constraints: or}
	return o, nil
}

// Check tests if a version satisfies the constraints.
func (cs Constraints) Check(v *Version) bool {
	// TODO(mattfarina): For v4 of this library consolidate the Check and Validate
	// functions as the underlying functions make that possible now.
	// loop over the ORs and check the inner ANDs
	for _, o := range cs.constraints {
		joy := true
		for _, c := range o {
			if check, _ := c.check(v); !check {
				joy = false
				break
			}
		}

		if joy {
			return true
		}
	}

	return false
}

// Validate checks if a version satisfies a constraint. If not a slice of
// reasons for the failure are returned in addition to a bool.
func (cs Constraints) Validate(v *Version) (bool, []error) {
	// loop over the ORs and check the inner ANDs
	var e []error

	// Capture the prerelease message only once. When it happens the first time
	// this var is marked
	var prerelesase bool
	for _, o := range cs.constraints {
		joy := true
		for _, c := range o {
			// Before running the check handle the case there the version is
			// a prerelease and the check is not searching for prereleases.
			if c.con.pre == "" && v.pre != "" {
				if !prerelesase {
					em := fmt.Errorf("%s is a prerelease version and the constraint is only looking for release versions", v)
					e = append(e, em)
					prerelesase = true
				}
				joy = false

			} else {

				if _, err := c.check(v); err != nil {
					e = append(e, err)
					joy = false
				}
			}
		}

		if joy {
			return true, []error{}
		}
	}

	return false, e
}

func (cs Constraints) String() string {
	buf := make([]string, len(cs.constraints))
	var tmp bytes.Buffer

	for k, v := range cs.constraints {
		tmp.Reset()
		vlen := len(v)
		for kk, c := range v {
			tmp.WriteString(c.string())

			// Space separate the AND conditions
			if vlen > 1 && kk < vlen-1 {
				tmp.WriteString(" ")
			}
		}
		buf[k] = tmp.String()
	}

	return strings.Join(buf, " || ")
}

// UnmarshalText implements the encoding.TextUnmarshaler interface.
func (cs *Constraints) UnmarshalText(text []byte) error {
	temp, err := NewConstraint(string(text))
	if err != nil {
		return err
	}

	*cs = *temp

	return nil
}

// MarshalText implements the encoding.TextMarshaler interface.
func (cs Constraints) MarshalText() ([]byte, error) {
	return []byte(cs.String()), nil
}

var constraintOps map[string]cfunc
var constraintRegex *regexp.Regexp
var constraintRangeRegex *regexp.Regexp

// Used to find individual constraints within a multi-constraint string
var findConstraintRegex *regexp.Regexp

// Used to validate an segment of ANDs is valid
var validConstraintRegex *regexp.Regexp

const cvRegex string = `v?([0-9|x|X|\*]+)(\.[0-9|x|X|\*]+)?(\.[0-9|x|X|\*]+)?` +
	`(-([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?` +
	`(\+([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?`

func init() {
	constraintOps = map[string]cfunc{
		"":   constraintTildeOrEqual,
		"=":  constraintTildeOrEqual,
		"!=": constraintNotEqual,
		">":  constraintGreaterThan,
		"<":  constraintLessThan,
		">=": constraintGreaterThanEqual,
		"=>": constraintGreaterThanEqual,
		"<=": constraintLessThanEqual,
		"=<": constraintLessThanEqual,
		"~":  constraintTilde,
		"~>": constraintTilde,
		"^":  constraintCaret,
	}

	ops := `=||!=|>|<|>=|=>|<=|=<|~|~>|\^`

	constraintRegex = regexp.MustCompile(fmt.Sprintf(
		`^\s*(%s)\s*(%s)\s*$`,
		ops,
		cvRegex))

	constraintRangeRegex = regexp.MustCompile(fmt.Sprintf(
		`\s*(%s)\s+-\s+(%s)\s*`,
		cvRegex, cvRegex))

	findConstraintRegex = regexp.MustCompile(fmt.Sprintf(
		`(%s)\s*(%s)`,
		ops,
		cvRegex))

	// The first time a constraint shows up will look slightly different from
	// future times it shows up due to a leading space or comma in a given
	// string.
	validConstraintRegex = regexp.MustCompile(fmt.Sprintf(
		`^(\s*(%s)\s*(%s)\s*)((?:\s+|,\s*)(%s)\s*(%s)\s*)*$`,
		ops,
		cvRegex,
		ops,
		cvRegex))
}

// An individual constraint
type constraint struct {
	// The version used in the constraint check. For example, if a constraint
	// is '<= 2.0.0' the con a version instance representing 2.0.0.
	con *Version

	// The original parsed version (e.g., 4.x from != 4.x)
	orig string

	// The original operator for the constraint
	origfunc string

	// When an x is used as part of the version (e.g., 1.x)
	minorDirty bool
	dirty      bool
	patchDirty bool
}

// Check if a version meets the constraint
func (c *constraint) check(v *Version) (bool, error) {
	return constraintOps[c.origfunc](v, c)
}

// String prints an individual constraint into a string
func (c *constraint) string() string {
	return c.origfunc + c.orig
}

type cfunc func(v *Version, c *constraint) (bool, error)

func parseConstraint(c string) (*constraint, error) {
	if len(c) > 0 {
		m := constraintRegex.FindStringSubmatch(c)
		if m == nil {
			return nil, fmt.Errorf("improper constraint: %s", c)
		}

		cs := &constraint{
			orig:     m[2],
			origfunc: m[1],
		}

		ver := m[2]
		minorDirty := false
		patchDirty := false
		dirty := false
		if isX(m[3]) || m[3] == "" {
			ver = fmt.Sprintf("0.0.0%s", m[6])
			dirty = true
		} else if isX(strings.TrimPrefix(m[4], ".")) || m[4] == "" {
			minorDirty = true
			dirty = true
			ver = fmt.Sprintf("%s.0.0%s", m[3], m[6])
		} else if isX(strings.TrimPrefix(m[5], ".")) || m[5] == "" {
			dirty = true
			patchDirty = true
			ver = fmt.Sprintf("%s%s.0%s", m[3], m[4], m[6])
		}

		con, err := NewVersion(ver)
		if err != nil {

			// The constraintRegex should catch any regex parsing errors. So,
			// we should never get here.
			return nil, errors.New("constraint Parser Error")
		}

		cs.con = con
		cs.minorDirty = minorDirty
		cs.patchDirty = patchDirty
		cs.dirty = dirty

		return cs, nil
	}

	// The rest is the special case where an empty string was passed in which
	// is equivalent to * or >=0.0.0
	con, err := StrictNewVersion("0.0.0")
	if err != nil {

		// The constraintRegex should catch any regex parsing errors. So,
		// we should never get here.
		return nil, errors.New("constraint Parser Error")
	}

	cs := &constraint{
		con:        con,
		orig:       c,
		origfunc:   "",
		minorDirty: false,
		patchDirty: false,
		dirty:      true,
	}
	return cs, nil
}

// Constraint functions
func constraintNotEqual(v *Version, c *constraint) (bool, error) {
	if c.dirty {

		// If there is a pre-release on the version but the constraint isn't looking
		// for them assume that pre-releases are not compatible. See issue 21 for
		// more details.
		if v.Prerelease() != "" && c.con.Prerelease() == "" {
			return false, fmt.Errorf("%s is a prerelease version and the constraint is only looking for release versions", v)
		}

		if c.con.Major() != v.Major() {
			return true, nil
		}
		if c.con.Minor() != v.Minor() && !c.minorDirty {
			return true, nil
		} else if c.minorDirty {
			return false, fmt.Errorf("%s is equal to %s", v, c.orig)
		} else if c.con.Patch() != v.Patch() && !c.patchDirty {
			return true, nil
		} else if c.patchDirty {
			// Need to handle prereleases if present
			if v.Prerelease() != "" || c.con.Prerelease() != "" {
				eq := comparePrerelease(v.Prerelease(), c.con.Prerelease()) != 0
				if eq {
					return true, nil
				}
				return false, fmt.Errorf("%s is equal to %s", v, c.orig)
			}
			return false, fmt.Errorf("%s is equal to %s", v, c.orig)
		}
	}

	eq := v.Equal(c.con)
	if eq {
		return false, fmt.Errorf("%s is equal to %s", v, c.orig)
	}

	return true, nil
}

func constraintGreaterThan(v *Version, c *constraint) (bool, error) {

	// If there is a pre-release on the version but the constraint isn't looking
	// for them assume that pre-releases are not compatible. See issue 21 for
	// more details.
	if v.Prerelease() != "" && c.con.Prerelease() == "" {
		return false, fmt.Errorf("%s is a prerelease version and the constraint is only looking for release versions", v)
	}

	var eq bool

	if !c.dirty {
		eq = v.Compare(c.con) == 1
		if eq {
			return true, nil
		}
		return false, fmt.Errorf("%s is less than or equal to %s", v, c.orig)
	}

	if v.Major() > c.con.Major() {
		return true, nil
	} else if v.Major() < c.con.Major() {
		return false, fmt.Errorf("%s is less than or equal to %s", v, c.orig)
	} else if c.minorDirty {
		// This is a range case such as >11. When the version is something like
		// 11.1.0 is it not > 11. For that we would need 12 or higher
		return false, fmt.Errorf("%s is less than or equal to %s", v, c.orig)
	} else if c.patchDirty {
		// This is for ranges such as >11.1. A version of 11.1.1 is not greater
		// which one of 11.2.1 is greater
		eq = v.Minor() > c.con.Minor()
		if eq {
			return true, nil
		}
		return false, fmt.Errorf("%s is less than or equal to %s", v, c.orig)
	}

	// If we have gotten here we are not comparing pre-preleases and can use the
	// Compare function to accomplish that.
	eq = v.Compare(c.con) == 1
	if eq {
		return true, nil
	}
	return false, fmt.Errorf("%s is less than or equal to %s", v, c.orig)
}

func constraintLessThan(v *Version, c *constraint) (bool, error) {
	// If there is a pre-release on the version but the constraint isn't looking
	// for them assume that pre-releases are not compatible. See issue 21 for
	// more details.
	if v.Prerelease() != "" && c.con.Prerelease() == "" {
		return false, fmt.Errorf("%s is a prerelease version and the constraint is only looking for release versions", v)
	}

	eq := v.Compare(c.con) < 0
	if eq {
		return true, nil
	}
	return false, fmt.Errorf("%s is greater than or equal to %s", v, c.orig)
}

func constraintGreaterThanEqual(v *Version, c *constraint) (bool, error) {

	// If there is a pre-release on the version but the constraint isn't looking
	// for them assume that pre-releases are not compatible. See issue 21 for
	// more details.
	if v.Prerelease() != "" && c.con.Prerelease() == "" {
		return false, fmt.Errorf("%s is a prerelease version and the constraint is only looking for release versions", v)
	}

	eq := v.Compare(c.con) >= 0
	if eq {
		return true, nil
	}
	return false, fmt.Errorf("%s is less than %s", v, c.orig)
}

func constraintLessThanEqual(v *Version, c *constraint) (bool, error) {
	// If there is a pre-release on the version but the constraint isn't looking
	// for them assume that pre-releases are not compatible. See issue 21 for
	// more details.
	if v.Prerelease() != "" && c.con.Prerelease() == "" {
		return false, fmt.Errorf("%s is a prerelease version and the constraint is only looking for release versions", v)
	}

	var eq bool

	if !c.dirty {
		eq = v.Compare(c.con) <= 0
		if eq {
			return true, nil
		}
		return false, fmt.Errorf("%s is greater than %s", v, c.orig)
	}

	if v.Major() > c.con.Major() {
		return false, fmt.Errorf("%s is greater than %s", v, c.orig)
	} else if v.Major() == c.con.Major() && v.Minor() > c.con.Minor() && !c.minorDirty {
		return false, fmt.Errorf("%s is greater than %s", v, c.orig)
	}

	return true, nil
}

// ~*, ~>* --> >= 0.0.0 (any)
// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0, <3.0.0
// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0, <2.1.0
// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0, <1.3.0
// ~1.2.3, ~>1.2.3 --> >=1.2.3, <1.3.0
// ~1.2.0, ~>1.2.0 --> >=1.2.0, <1.3.0
func constraintTilde(v *Version, c *constraint) (bool, error) {
	// If there is a pre-release on the version but the constraint isn't looking
	// for them assume that pre-releases are not compatible. See issue 21 for
	// more details.
	if v.Prerelease() != "" && c.con.Prerelease() == "" {
		return false, fmt.Errorf("%s is a prerelease version and the constraint is only looking for release versions", v)
	}

	if v.LessThan(c.con) {
		return false, fmt.Errorf("%s is less than %s", v, c.orig)
	}

	// ~0.0.0 is a special case where all constraints are accepted. It's
	// equivalent to >= 0.0.0.
	if c.con.Major() == 0 && c.con.Minor() == 0 && c.con.Patch() == 0 &&
		!c.minorDirty && !c.patchDirty {
		return true, nil
	}

	if v.Major() != c.con.Major() {
		return false, fmt.Errorf("%s does not have same major version as %s", v, c.orig)
	}

	if v.Minor() != c.con.Minor() && !c.minorDirty {
		return false, fmt.Errorf("%s does not have same major and minor version as %s", v, c.orig)
	}

	return true, nil
}

// When there is a .x (dirty) status it automatically opts in to ~. Otherwise
// it's a straight =
func constraintTildeOrEqual(v *Version, c *constraint) (bool, error) {
	// If there is a pre-release on the version but the constraint isn't looking
	// for them assume that pre-releases are not compatible. See issue 21 for
	// more details.
	if v.Prerelease() != "" && c.con.Prerelease() == "" {
		return false, fmt.Errorf("%s is a prerelease version and the constraint is only looking for release versions", v)
	}

	if c.dirty {
		return constraintTilde(v, c)
	}

	eq := v.Equal(c.con)
	if eq {
		return true, nil
	}

	return false, fmt.Errorf("%s is not equal to %s", v, c.orig)
}

// ^*      -->  (any)
// ^1.2.3  -->  >=1.2.3 <2.0.0
// ^1.2    -->  >=1.2.0 <2.0.0
// ^1      -->  >=1.0.0 <2.0.0
// ^0.2.3  -->  >=0.2.3 <0.3.0
// ^0.2    -->  >=0.2.0 <0.3.0
// ^0.0.3  -->  >=0.0.3 <0.0.4
// ^0.0    -->  >=0.0.0 <0.1.0
// ^0      -->  >=0.0.0 <1.0.0
func constraintCaret(v *Version, c *constraint) (bool, error) {
	// If there is a pre-release on the version but the constraint isn't looking
	// for them assume that pre-releases are not compatible. See issue 21 for
	// more details.
	if v.Prerelease() != "" && c.con.Prerelease() == "" {
		return false, fmt.Errorf("%s is a prerelease version and the constraint is only looking for release versions", v)
	}

	// This less than handles prereleases
	if v.LessThan(c.con) {
		return false, fmt.Errorf("%s is less than %s", v, c.orig)
	}

	var eq bool

	// ^ when the major > 0 is >=x.y.z < x+1
	if c.con.Major() > 0 || c.minorDirty {

		// ^ has to be within a major range for > 0. Everything less than was
		// filtered out with the LessThan call above. This filters out those
		// that greater but not within the same major range.
		eq = v.Major() == c.con.Major()
		if eq {
			return true, nil
		}
		return false, fmt.Errorf("%s does not have same major version as %s", v, c.orig)
	}

	// ^ when the major is 0 and minor > 0 is >=0.y.z < 0.y+1
	if c.con.Major() == 0 && v.Major() > 0 {
		return false, fmt.Errorf("%s does not have same major version as %s", v, c.orig)
	}
	// If the con Minor is > 0 it is not dirty
	if c.con.Minor() > 0 || c.patchDirty {
		eq = v.Minor() == c.con.Minor()
		if eq {
			return true, nil
		}
		return false, fmt.Errorf("%s does not have same minor version as %s. Expected minor versions to match when constraint major version is 0", v, c.orig)
	}
	// ^ when the minor is 0 and minor > 0 is =0.0.z
	if c.con.Minor() == 0 && v.Minor() > 0 {
		return false, fmt.Errorf("%s does not have same minor version as %s", v, c.orig)
	}

	// At this point the major is 0 and the minor is 0 and not dirty. The patch
	// is not dirty so we need to check if they are equal. If they are not equal
	eq = c.con.Patch() == v.Patch()
	if eq {
		return true, nil
	}
	return false, fmt.Errorf("%s does not equal %s. Expect version and constraint to equal when major and minor versions are 0", v, c.orig)
}

func isX(x string) bool {
	switch x {
	case "x", "*", "X":
		return true
	default:
		return false
	}
}

func rewriteRange(i string) string {
	m := constraintRangeRegex.FindAllStringSubmatch(i, -1)
	if m == nil {
		return i
	}
	o := i
	for _, v := range m {
		t := fmt.Sprintf(">= %s, <= %s ", v[1], v[11])
		o = strings.Replace(o, v[0], t, 1)
	}

	return o
}
   070701000000D0000081A4000000000000000000000001645E367C00001ADF000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/Masterminds/semver/v3/doc.go    /*
Package semver provides the ability to work with Semantic Versions (http://semver.org) in Go.

Specifically it provides the ability to:

  - Parse semantic versions
  - Sort semantic versions
  - Check if a semantic version fits within a set of constraints
  - Optionally work with a `v` prefix

# Parsing Semantic Versions

There are two functions that can parse semantic versions. The `StrictNewVersion`
function only parses valid version 2 semantic versions as outlined in the
specification. The `NewVersion` function attempts to coerce a version into a
semantic version and parse it. For example, if there is a leading v or a version
listed without all 3 parts (e.g. 1.2) it will attempt to coerce it into a valid
semantic version (e.g., 1.2.0). In both cases a `Version` object is returned
that can be sorted, compared, and used in constraints.

When parsing a version an optional error can be returned if there is an issue
parsing the version. For example,

	v, err := semver.NewVersion("1.2.3-beta.1+b345")

The version object has methods to get the parts of the version, compare it to
other versions, convert the version back into a string, and get the original
string. For more details please see the documentation
at https://godoc.org/github.com/Masterminds/semver.

# Sorting Semantic Versions

A set of versions can be sorted using the `sort` package from the standard library.
For example,

	    raw := []string{"1.2.3", "1.0", "1.3", "2", "0.4.2",}
	    vs := make([]*semver.Version, len(raw))
		for i, r := range raw {
			v, err := semver.NewVersion(r)
			if err != nil {
				t.Errorf("Error parsing version: %s", err)
			}

			vs[i] = v
		}

		sort.Sort(semver.Collection(vs))

# Checking Version Constraints and Comparing Versions

There are two methods for comparing versions. One uses comparison methods on
`Version` instances and the other is using Constraints. There are some important
differences to notes between these two methods of comparison.

 1. When two versions are compared using functions such as `Compare`, `LessThan`,
    and others it will follow the specification and always include prereleases
    within the comparison. It will provide an answer valid with the comparison
    spec section at https://semver.org/#spec-item-11
 2. When constraint checking is used for checks or validation it will follow a
    different set of rules that are common for ranges with tools like npm/js
    and Rust/Cargo. This includes considering prereleases to be invalid if the
    ranges does not include on. If you want to have it include pre-releases a
    simple solution is to include `-0` in your range.
 3. Constraint ranges can have some complex rules including the shorthard use of
    ~ and ^. For more details on those see the options below.

There are differences between the two methods or checking versions because the
comparison methods on `Version` follow the specification while comparison ranges
are not part of the specification. Different packages and tools have taken it
upon themselves to come up with range rules. This has resulted in differences.
For example, npm/js and Cargo/Rust follow similar patterns which PHP has a
different pattern for ^. The comparison features in this package follow the
npm/js and Cargo/Rust lead because applications using it have followed similar
patters with their versions.

Checking a version against version constraints is one of the most featureful
parts of the package.

	c, err := semver.NewConstraint(">= 1.2.3")
	if err != nil {
	    // Handle constraint not being parsable.
	}

	v, err := semver.NewVersion("1.3")
	if err != nil {
	    // Handle version not being parsable.
	}
	// Check if the version meets the constraints. The a variable will be true.
	a := c.Check(v)

# Basic Comparisons

There are two elements to the comparisons. First, a comparison string is a list
of comma or space separated AND comparisons. These are then separated by || (OR)
comparisons. For example, `">= 1.2 < 3.0.0 || >= 4.2.3"` is looking for a
comparison that's greater than or equal to 1.2 and less than 3.0.0 or is
greater than or equal to 4.2.3. This can also be written as
`">= 1.2, < 3.0.0 || >= 4.2.3"`

The basic comparisons are:

  - `=`: equal (aliased to no operator)
  - `!=`: not equal
  - `>`: greater than
  - `<`: less than
  - `>=`: greater than or equal to
  - `<=`: less than or equal to

# Hyphen Range Comparisons

There are multiple methods to handle ranges and the first is hyphens ranges.
These look like:

  - `1.2 - 1.4.5` which is equivalent to `>= 1.2, <= 1.4.5`
  - `2.3.4 - 4.5` which is equivalent to `>= 2.3.4 <= 4.5`

# Wildcards In Comparisons

The `x`, `X`, and `*` characters can be used as a wildcard character. This works
for all comparison operators. When used on the `=` operator it falls
back to the tilde operation. For example,

  - `1.2.x` is equivalent to `>= 1.2.0 < 1.3.0`
  - `>= 1.2.x` is equivalent to `>= 1.2.0`
  - `<= 2.x` is equivalent to `<= 3`
  - `*` is equivalent to `>= 0.0.0`

Tilde Range Comparisons (Patch)

The tilde (`~`) comparison operator is for patch level ranges when a minor
version is specified and major level changes when the minor number is missing.
For example,

  - `~1.2.3` is equivalent to `>= 1.2.3 < 1.3.0`
  - `~1` is equivalent to `>= 1, < 2`
  - `~2.3` is equivalent to `>= 2.3 < 2.4`
  - `~1.2.x` is equivalent to `>= 1.2.0 < 1.3.0`
  - `~1.x` is equivalent to `>= 1 < 2`

Caret Range Comparisons (Major)

The caret (`^`) comparison operator is for major level changes once a stable
(1.0.0) release has occurred. Prior to a 1.0.0 release the minor versions acts
as the API stability level. This is useful when comparisons of API versions as a
major change is API breaking. For example,

  - `^1.2.3` is equivalent to `>= 1.2.3, < 2.0.0`
  - `^1.2.x` is equivalent to `>= 1.2.0, < 2.0.0`
  - `^2.3` is equivalent to `>= 2.3, < 3`
  - `^2.x` is equivalent to `>= 2.0.0, < 3`
  - `^0.2.3` is equivalent to `>=0.2.3 <0.3.0`
  - `^0.2` is equivalent to `>=0.2.0 <0.3.0`
  - `^0.0.3` is equivalent to `>=0.0.3 <0.0.4`
  - `^0.0` is equivalent to `>=0.0.0 <0.1.0`
  - `^0` is equivalent to `>=0.0.0 <1.0.0`

# Validation

In addition to testing a version against a constraint, a version can be validated
against a constraint. When validation fails a slice of errors containing why a
version didn't meet the constraint is returned. For example,

	c, err := semver.NewConstraint("<= 1.2.3, >= 1.4")
	if err != nil {
	    // Handle constraint not being parseable.
	}

	v, _ := semver.NewVersion("1.3")
	if err != nil {
	    // Handle version not being parseable.
	}

	// Validate a version against a constraint.
	a, msgs := c.Validate(v)
	// a is false
	for _, m := range msgs {
	    fmt.Println(m)

	    // Loops over the errors which would read
	    // "1.3 is greater than 1.2.3"
	    // "1.3 is less than 1.4"
	}
*/
package semver
 070701000000D1000081A4000000000000000000000001645E367C00003EF9000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/Masterminds/semver/v3/version.go    package semver

import (
	"bytes"
	"database/sql/driver"
	"encoding/json"
	"errors"
	"fmt"
	"regexp"
	"strconv"
	"strings"
)

// The compiled version of the regex created at init() is cached here so it
// only needs to be created once.
var versionRegex *regexp.Regexp

var (
	// ErrInvalidSemVer is returned a version is found to be invalid when
	// being parsed.
	ErrInvalidSemVer = errors.New("Invalid Semantic Version")

	// ErrEmptyString is returned when an empty string is passed in for parsing.
	ErrEmptyString = errors.New("Version string empty")

	// ErrInvalidCharacters is returned when invalid characters are found as
	// part of a version
	ErrInvalidCharacters = errors.New("Invalid characters in version")

	// ErrSegmentStartsZero is returned when a version segment starts with 0.
	// This is invalid in SemVer.
	ErrSegmentStartsZero = errors.New("Version segment starts with 0")

	// ErrInvalidMetadata is returned when the metadata is an invalid format
	ErrInvalidMetadata = errors.New("Invalid Metadata string")

	// ErrInvalidPrerelease is returned when the pre-release is an invalid format
	ErrInvalidPrerelease = errors.New("Invalid Prerelease string")
)

// semVerRegex is the regular expression used to parse a semantic version.
const semVerRegex string = `v?([0-9]+)(\.[0-9]+)?(\.[0-9]+)?` +
	`(-([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?` +
	`(\+([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?`

// Version represents a single semantic version.
type Version struct {
	major, minor, patch uint64
	pre                 string
	metadata            string
	original            string
}

func init() {
	versionRegex = regexp.MustCompile("^" + semVerRegex + "$")
}

const (
	num     string = "0123456789"
	allowed string = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-" + num
)

// StrictNewVersion parses a given version and returns an instance of Version or
// an error if unable to parse the version. Only parses valid semantic versions.
// Performs checking that can find errors within the version.
// If you want to coerce a version such as 1 or 1.2 and parse it as the 1.x
// releases of semver did, use the NewVersion() function.
func StrictNewVersion(v string) (*Version, error) {
	// Parsing here does not use RegEx in order to increase performance and reduce
	// allocations.

	if len(v) == 0 {
		return nil, ErrEmptyString
	}

	// Split the parts into [0]major, [1]minor, and [2]patch,prerelease,build
	parts := strings.SplitN(v, ".", 3)
	if len(parts) != 3 {
		return nil, ErrInvalidSemVer
	}

	sv := &Version{
		original: v,
	}

	// check for prerelease or build metadata
	var extra []string
	if strings.ContainsAny(parts[2], "-+") {
		// Start with the build metadata first as it needs to be on the right
		extra = strings.SplitN(parts[2], "+", 2)
		if len(extra) > 1 {
			// build metadata found
			sv.metadata = extra[1]
			parts[2] = extra[0]
		}

		extra = strings.SplitN(parts[2], "-", 2)
		if len(extra) > 1 {
			// prerelease found
			sv.pre = extra[1]
			parts[2] = extra[0]
		}
	}

	// Validate the number segments are valid. This includes only having positive
	// numbers and no leading 0's.
	for _, p := range parts {
		if !containsOnly(p, num) {
			return nil, ErrInvalidCharacters
		}

		if len(p) > 1 && p[0] == '0' {
			return nil, ErrSegmentStartsZero
		}
	}

	// Extract the major, minor, and patch elements onto the returned Version
	var err error
	sv.major, err = strconv.ParseUint(parts[0], 10, 64)
	if err != nil {
		return nil, err
	}

	sv.minor, err = strconv.ParseUint(parts[1], 10, 64)
	if err != nil {
		return nil, err
	}

	sv.patch, err = strconv.ParseUint(parts[2], 10, 64)
	if err != nil {
		return nil, err
	}

	// No prerelease or build metadata found so returning now as a fastpath.
	if sv.pre == "" && sv.metadata == "" {
		return sv, nil
	}

	if sv.pre != "" {
		if err = validatePrerelease(sv.pre); err != nil {
			return nil, err
		}
	}

	if sv.metadata != "" {
		if err = validateMetadata(sv.metadata); err != nil {
			return nil, err
		}
	}

	return sv, nil
}

// NewVersion parses a given version and returns an instance of Version or
// an error if unable to parse the version. If the version is SemVer-ish it
// attempts to convert it to SemVer. If you want  to validate it was a strict
// semantic version at parse time see StrictNewVersion().
func NewVersion(v string) (*Version, error) {
	m := versionRegex.FindStringSubmatch(v)
	if m == nil {
		return nil, ErrInvalidSemVer
	}

	sv := &Version{
		metadata: m[8],
		pre:      m[5],
		original: v,
	}

	var err error
	sv.major, err = strconv.ParseUint(m[1], 10, 64)
	if err != nil {
		return nil, fmt.Errorf("Error parsing version segment: %s", err)
	}

	if m[2] != "" {
		sv.minor, err = strconv.ParseUint(strings.TrimPrefix(m[2], "."), 10, 64)
		if err != nil {
			return nil, fmt.Errorf("Error parsing version segment: %s", err)
		}
	} else {
		sv.minor = 0
	}

	if m[3] != "" {
		sv.patch, err = strconv.ParseUint(strings.TrimPrefix(m[3], "."), 10, 64)
		if err != nil {
			return nil, fmt.Errorf("Error parsing version segment: %s", err)
		}
	} else {
		sv.patch = 0
	}

	// Perform some basic due diligence on the extra parts to ensure they are
	// valid.

	if sv.pre != "" {
		if err = validatePrerelease(sv.pre); err != nil {
			return nil, err
		}
	}

	if sv.metadata != "" {
		if err = validateMetadata(sv.metadata); err != nil {
			return nil, err
		}
	}

	return sv, nil
}

// New creates a new instance of Version with each of the parts passed in as
// arguments instead of parsing a version string.
func New(major, minor, patch uint64, pre, metadata string) *Version {
	v := Version{
		major:    major,
		minor:    minor,
		patch:    patch,
		pre:      pre,
		metadata: metadata,
		original: "",
	}

	v.original = v.String()

	return &v
}

// MustParse parses a given version and panics on error.
func MustParse(v string) *Version {
	sv, err := NewVersion(v)
	if err != nil {
		panic(err)
	}
	return sv
}

// String converts a Version object to a string.
// Note, if the original version contained a leading v this version will not.
// See the Original() method to retrieve the original value. Semantic Versions
// don't contain a leading v per the spec. Instead it's optional on
// implementation.
func (v Version) String() string {
	var buf bytes.Buffer

	fmt.Fprintf(&buf, "%d.%d.%d", v.major, v.minor, v.patch)
	if v.pre != "" {
		fmt.Fprintf(&buf, "-%s", v.pre)
	}
	if v.metadata != "" {
		fmt.Fprintf(&buf, "+%s", v.metadata)
	}

	return buf.String()
}

// Original returns the original value passed in to be parsed.
func (v *Version) Original() string {
	return v.original
}

// Major returns the major version.
func (v Version) Major() uint64 {
	return v.major
}

// Minor returns the minor version.
func (v Version) Minor() uint64 {
	return v.minor
}

// Patch returns the patch version.
func (v Version) Patch() uint64 {
	return v.patch
}

// Prerelease returns the pre-release version.
func (v Version) Prerelease() string {
	return v.pre
}

// Metadata returns the metadata on the version.
func (v Version) Metadata() string {
	return v.metadata
}

// originalVPrefix returns the original 'v' prefix if any.
func (v Version) originalVPrefix() string {
	// Note, only lowercase v is supported as a prefix by the parser.
	if v.original != "" && v.original[:1] == "v" {
		return v.original[:1]
	}
	return ""
}

// IncPatch produces the next patch version.
// If the current version does not have prerelease/metadata information,
// it unsets metadata and prerelease values, increments patch number.
// If the current version has any of prerelease or metadata information,
// it unsets both values and keeps current patch value
func (v Version) IncPatch() Version {
	vNext := v
	// according to http://semver.org/#spec-item-9
	// Pre-release versions have a lower precedence than the associated normal version.
	// according to http://semver.org/#spec-item-10
	// Build metadata SHOULD be ignored when determining version precedence.
	if v.pre != "" {
		vNext.metadata = ""
		vNext.pre = ""
	} else {
		vNext.metadata = ""
		vNext.pre = ""
		vNext.patch = v.patch + 1
	}
	vNext.original = v.originalVPrefix() + "" + vNext.String()
	return vNext
}

// IncMinor produces the next minor version.
// Sets patch to 0.
// Increments minor number.
// Unsets metadata.
// Unsets prerelease status.
func (v Version) IncMinor() Version {
	vNext := v
	vNext.metadata = ""
	vNext.pre = ""
	vNext.patch = 0
	vNext.minor = v.minor + 1
	vNext.original = v.originalVPrefix() + "" + vNext.String()
	return vNext
}

// IncMajor produces the next major version.
// Sets patch to 0.
// Sets minor to 0.
// Increments major number.
// Unsets metadata.
// Unsets prerelease status.
func (v Version) IncMajor() Version {
	vNext := v
	vNext.metadata = ""
	vNext.pre = ""
	vNext.patch = 0
	vNext.minor = 0
	vNext.major = v.major + 1
	vNext.original = v.originalVPrefix() + "" + vNext.String()
	return vNext
}

// SetPrerelease defines the prerelease value.
// Value must not include the required 'hyphen' prefix.
func (v Version) SetPrerelease(prerelease string) (Version, error) {
	vNext := v
	if len(prerelease) > 0 {
		if err := validatePrerelease(prerelease); err != nil {
			return vNext, err
		}
	}
	vNext.pre = prerelease
	vNext.original = v.originalVPrefix() + "" + vNext.String()
	return vNext, nil
}

// SetMetadata defines metadata value.
// Value must not include the required 'plus' prefix.
func (v Version) SetMetadata(metadata string) (Version, error) {
	vNext := v
	if len(metadata) > 0 {
		if err := validateMetadata(metadata); err != nil {
			return vNext, err
		}
	}
	vNext.metadata = metadata
	vNext.original = v.originalVPrefix() + "" + vNext.String()
	return vNext, nil
}

// LessThan tests if one version is less than another one.
func (v *Version) LessThan(o *Version) bool {
	return v.Compare(o) < 0
}

// GreaterThan tests if one version is greater than another one.
func (v *Version) GreaterThan(o *Version) bool {
	return v.Compare(o) > 0
}

// Equal tests if two versions are equal to each other.
// Note, versions can be equal with different metadata since metadata
// is not considered part of the comparable version.
func (v *Version) Equal(o *Version) bool {
	return v.Compare(o) == 0
}

// Compare compares this version to another one. It returns -1, 0, or 1 if
// the version smaller, equal, or larger than the other version.
//
// Versions are compared by X.Y.Z. Build metadata is ignored. Prerelease is
// lower than the version without a prerelease. Compare always takes into account
// prereleases. If you want to work with ranges using typical range syntaxes that
// skip prereleases if the range is not looking for them use constraints.
func (v *Version) Compare(o *Version) int {
	// Compare the major, minor, and patch version for differences. If a
	// difference is found return the comparison.
	if d := compareSegment(v.Major(), o.Major()); d != 0 {
		return d
	}
	if d := compareSegment(v.Minor(), o.Minor()); d != 0 {
		return d
	}
	if d := compareSegment(v.Patch(), o.Patch()); d != 0 {
		return d
	}

	// At this point the major, minor, and patch versions are the same.
	ps := v.pre
	po := o.Prerelease()

	if ps == "" && po == "" {
		return 0
	}
	if ps == "" {
		return 1
	}
	if po == "" {
		return -1
	}

	return comparePrerelease(ps, po)
}

// UnmarshalJSON implements JSON.Unmarshaler interface.
func (v *Version) UnmarshalJSON(b []byte) error {
	var s string
	if err := json.Unmarshal(b, &s); err != nil {
		return err
	}
	temp, err := NewVersion(s)
	if err != nil {
		return err
	}
	v.major = temp.major
	v.minor = temp.minor
	v.patch = temp.patch
	v.pre = temp.pre
	v.metadata = temp.metadata
	v.original = temp.original
	return nil
}

// MarshalJSON implements JSON.Marshaler interface.
func (v Version) MarshalJSON() ([]byte, error) {
	return json.Marshal(v.String())
}

// UnmarshalText implements the encoding.TextUnmarshaler interface.
func (v *Version) UnmarshalText(text []byte) error {
	temp, err := NewVersion(string(text))
	if err != nil {
		return err
	}

	*v = *temp

	return nil
}

// MarshalText implements the encoding.TextMarshaler interface.
func (v Version) MarshalText() ([]byte, error) {
	return []byte(v.String()), nil
}

// Scan implements the SQL.Scanner interface.
func (v *Version) Scan(value interface{}) error {
	var s string
	s, _ = value.(string)
	temp, err := NewVersion(s)
	if err != nil {
		return err
	}
	v.major = temp.major
	v.minor = temp.minor
	v.patch = temp.patch
	v.pre = temp.pre
	v.metadata = temp.metadata
	v.original = temp.original
	return nil
}

// Value implements the Driver.Valuer interface.
func (v Version) Value() (driver.Value, error) {
	return v.String(), nil
}

func compareSegment(v, o uint64) int {
	if v < o {
		return -1
	}
	if v > o {
		return 1
	}

	return 0
}

func comparePrerelease(v, o string) int {
	// split the prelease versions by their part. The separator, per the spec,
	// is a .
	sparts := strings.Split(v, ".")
	oparts := strings.Split(o, ".")

	// Find the longer length of the parts to know how many loop iterations to
	// go through.
	slen := len(sparts)
	olen := len(oparts)

	l := slen
	if olen > slen {
		l = olen
	}

	// Iterate over each part of the prereleases to compare the differences.
	for i := 0; i < l; i++ {
		// Since the lentgh of the parts can be different we need to create
		// a placeholder. This is to avoid out of bounds issues.
		stemp := ""
		if i < slen {
			stemp = sparts[i]
		}

		otemp := ""
		if i < olen {
			otemp = oparts[i]
		}

		d := comparePrePart(stemp, otemp)
		if d != 0 {
			return d
		}
	}

	// Reaching here means two versions are of equal value but have different
	// metadata (the part following a +). They are not identical in string form
	// but the version comparison finds them to be equal.
	return 0
}

func comparePrePart(s, o string) int {
	// Fastpath if they are equal
	if s == o {
		return 0
	}

	// When s or o are empty we can use the other in an attempt to determine
	// the response.
	if s == "" {
		if o != "" {
			return -1
		}
		return 1
	}

	if o == "" {
		if s != "" {
			return 1
		}
		return -1
	}

	// When comparing strings "99" is greater than "103". To handle
	// cases like this we need to detect numbers and compare them. According
	// to the semver spec, numbers are always positive. If there is a - at the
	// start like -99 this is to be evaluated as an alphanum. numbers always
	// have precedence over alphanum. Parsing as Uints because negative numbers
	// are ignored.

	oi, n1 := strconv.ParseUint(o, 10, 64)
	si, n2 := strconv.ParseUint(s, 10, 64)

	// The case where both are strings compare the strings
	if n1 != nil && n2 != nil {
		if s > o {
			return 1
		}
		return -1
	} else if n1 != nil {
		// o is a string and s is a number
		return -1
	} else if n2 != nil {
		// s is a string and o is a number
		return 1
	}
	// Both are numbers
	if si > oi {
		return 1
	}
	return -1
}

// Like strings.ContainsAny but does an only instead of any.
func containsOnly(s string, comp string) bool {
	return strings.IndexFunc(s, func(r rune) bool {
		return !strings.ContainsRune(comp, r)
	}) == -1
}

// From the spec, "Identifiers MUST comprise only
// ASCII alphanumerics and hyphen [0-9A-Za-z-]. Identifiers MUST NOT be empty.
// Numeric identifiers MUST NOT include leading zeroes.". These segments can
// be dot separated.
func validatePrerelease(p string) error {
	eparts := strings.Split(p, ".")
	for _, p := range eparts {
		if containsOnly(p, num) {
			if len(p) > 1 && p[0] == '0' {
				return ErrSegmentStartsZero
			}
		} else if !containsOnly(p, allowed) {
			return ErrInvalidPrerelease
		}
	}

	return nil
}

// From the spec, "Build metadata MAY be denoted by
// appending a plus sign and a series of dot separated identifiers immediately
// following the patch or pre-release version. Identifiers MUST comprise only
// ASCII alphanumerics and hyphen [0-9A-Za-z-]. Identifiers MUST NOT be empty."
func validateMetadata(m string) error {
	eparts := strings.Split(m, ".")
	for _, p := range eparts {
		if !containsOnly(p, allowed) {
			return ErrInvalidMetadata
		}
	}
	return nil
}
   070701000000D2000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/Masterminds/sprig   070701000000D3000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/Masterminds/sprig/v3    070701000000D4000081A4000000000000000000000001645E367C00000010000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/Masterminds/sprig/v3/.gitignore vendor/
/.glide
070701000000D5000081A4000000000000000000000001645E367C000034B9000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/Masterminds/sprig/v3/CHANGELOG.md   # Changelog

## Release 3.2.3 (2022-11-29)

### Changed

- Updated docs (thanks @book987 @aJetHorn @neelayu @pellizzetti @apricote @SaigyoujiYuyuko233 @AlekSi)
- #348: Updated huandu/xstrings which fixed a snake case bug (thanks @yxxhero)
- #353: Updated masterminds/semver which included bug fixes
- #354: Updated golang.org/x/crypto which included bug fixes

## Release 3.2.2 (2021-02-04)

This is a re-release of 3.2.1 to satisfy something with the Go module system.

## Release 3.2.1 (2021-02-04)

### Changed

- Upgraded `Masterminds/goutils` to `v1.1.1`. see the [Security Advisory](https://github.com/Masterminds/goutils/security/advisories/GHSA-xg2h-wx96-xgxr)

## Release 3.2.0 (2020-12-14)

### Added

- #211: Added randInt function (thanks @kochurovro)
- #223: Added fromJson and mustFromJson functions (thanks @mholt)
- #242: Added a bcrypt function (thanks @robbiet480)
- #253: Added randBytes function (thanks @MikaelSmith)
- #254: Added dig function for dicts (thanks @nyarly)
- #257: Added regexQuoteMeta for quoting regex metadata (thanks @rheaton)
- #261: Added filepath functions osBase, osDir, osExt, osClean, osIsAbs (thanks @zugl)
- #268: Added and and all functions for testing conditions (thanks @phuslu)
- #181: Added float64 arithmetic addf, add1f, subf, divf, mulf, maxf, and minf
  (thanks @andrewmostello)
- #265: Added chunk function to split array into smaller arrays (thanks @karelbilek)
- #270: Extend certificate functions to handle non-RSA keys + add support for
  ed25519 keys (thanks @misberner)

### Changed

- Removed testing and support for Go 1.12. ed25519 support requires Go 1.13 or newer
- Using semver 3.1.1 and mergo 0.3.11

### Fixed

- #249: Fix htmlDateInZone example (thanks @spawnia)

NOTE: The dependency github.com/imdario/mergo reverted the breaking change in
0.3.9 via 0.3.10 release.

## Release 3.1.0 (2020-04-16)

NOTE: The dependency github.com/imdario/mergo made a behavior change in 0.3.9
that impacts sprig functionality. Do not use sprig with a version newer than 0.3.8.

### Added

- #225: Added support for generating htpasswd hash (thanks @rustycl0ck)
- #224: Added duration filter (thanks @frebib)
- #205: Added `seq` function (thanks @thadc23)

### Changed

- #203: Unlambda functions with correct signature (thanks @muesli)
- #236: Updated the license formatting for GitHub display purposes
- #238: Updated package dependency versions. Note, mergo not updated to 0.3.9
        as it causes a breaking change for sprig. That issue is tracked at
        https://github.com/imdario/mergo/issues/139

### Fixed

- #229: Fix `seq` example in docs (thanks @kalmant)

## Release 3.0.2 (2019-12-13)

### Fixed

- #220: Updating to semver v3.0.3 to fix issue with <= ranges
- #218: fix typo elyptical->elliptic in ecdsa key description (thanks @laverya)

## Release 3.0.1 (2019-12-08)

### Fixed

- #212: Updated semver fixing broken constraint checking with ^0.0

## Release 3.0.0 (2019-10-02)

### Added

- #187: Added durationRound function (thanks @yjp20)
- #189: Added numerous template functions that return errors rather than panic (thanks @nrvnrvn)
- #193: Added toRawJson support (thanks @Dean-Coakley)
- #197: Added get support to dicts (thanks @Dean-Coakley)

### Changed

- #186: Moving dependency management to Go modules
- #186: Updated semver to v3. This has changes in the way ^ is handled
- #194: Updated documentation on merging and how it copies. Added example using deepCopy
- #196: trunc now supports negative values (thanks @Dean-Coakley)

## Release 2.22.0 (2019-10-02)

### Added

- #173: Added getHostByName function to resolve dns names to ips (thanks @fcgravalos)
- #195: Added deepCopy function for use with dicts

### Changed

- Updated merge and mergeOverwrite documentation to explain copying and how to
  use deepCopy with it

## Release 2.21.0 (2019-09-18)

### Added

- #122: Added encryptAES/decryptAES functions (thanks @n0madic)
- #128: Added toDecimal support (thanks @Dean-Coakley)
- #169: Added list contcat (thanks @astorath)
- #174: Added deepEqual function (thanks @bonifaido)
- #170: Added url parse and join functions (thanks @astorath)

### Changed

- #171: Updated glide config for Google UUID to v1 and to add ranges to semver and testify

### Fixed

- #172: Fix semver wildcard example (thanks @piepmatz)
- #175: Fix dateInZone doc example (thanks @s3than)

## Release 2.20.0 (2019-06-18)

### Added

- #164: Adding function to get unix epoch for a time (@mattfarina)
- #166: Adding tests for date_in_zone (@mattfarina)

### Changed

- #144: Fix function comments based on best practices from Effective Go (@CodeLingoTeam)
- #150: Handles pointer type for time.Time in "htmlDate" (@mapreal19)
- #161, #157, #160,  #153, #158, #156,  #155,  #159, #152 documentation updates (@badeadan)

### Fixed

## Release 2.19.0 (2019-03-02)

IMPORTANT: This release reverts a change from 2.18.0

In the previous release (2.18), we prematurely merged a partial change to the crypto functions that led to creating two sets of crypto functions (I blame @technosophos -- since that's me). This release rolls back that change, and does what was originally intended: It alters the existing crypto functions to use secure random.

We debated whether this classifies as a change worthy of major revision, but given the proximity to the last release, we have decided that treating 2.18 as a faulty release is the correct course of action. We apologize for any inconvenience.

### Changed

- Fix substr panic 35fb796 (Alexey igrychev)
- Remove extra period 1eb7729 (Matthew Lorimor)
- Make random string functions use crypto by default 6ceff26 (Matthew Lorimor)
- README edits/fixes/suggestions 08fe136 (Lauri Apple)


## Release 2.18.0 (2019-02-12)

### Added

- Added mergeOverwrite function
- cryptographic functions that use secure random (see fe1de12)

### Changed

- Improve documentation of regexMatch function, resolves #139 90b89ce (Jan Tagscherer)
- Handle has for nil list 9c10885 (Daniel Cohen)
- Document behaviour of mergeOverwrite fe0dbe9 (Lukas Rieder)
- doc: adds missing documentation. 4b871e6 (Fernandez Ludovic)
- Replace outdated goutils imports 01893d2 (Matthew Lorimor)
- Surface crypto secure random strings from goutils fe1de12 (Matthew Lorimor)
- Handle untyped nil values as paramters to string functions 2b2ec8f (Morten Torkildsen)

### Fixed

- Fix dict merge issue and provide mergeOverwrite .dst .src1 to overwrite from src -> dst 4c59c12 (Lukas Rieder)
- Fix substr var names and comments d581f80 (Dean Coakley)
- Fix substr documentation 2737203 (Dean Coakley)

## Release 2.17.1 (2019-01-03)

### Fixed

The 2.17.0 release did not have a version pinned for xstrings, which caused compilation failures when xstrings < 1.2 was used. This adds the correct version string to glide.yaml.

## Release 2.17.0 (2019-01-03)

### Added

- adds alder32sum function and test 6908fc2 (marshallford)
- Added kebabcase function ca331a1 (Ilyes512)

### Changed

- Update goutils to 1.1.0 4e1125d (Matt Butcher)

### Fixed

- Fix 'has' documentation e3f2a85 (dean-coakley)
- docs(dict): fix typo in pick example dc424f9 (Dustin Specker)
- fixes spelling errors... not sure how that happened 4cf188a (marshallford)

## Release 2.16.0 (2018-08-13)

### Added

- add splitn function fccb0b0 (Helgi Þorbjörnsson)
- Add slice func df28ca7 (gongdo)
- Generate serial number a3bdffd (Cody Coons)
- Extract values of dict with values function df39312 (Lawrence Jones)

### Changed

- Modify panic message for list.slice ae38335 (gongdo)
- Minor improvement in code quality - Removed an unreachable piece of code at defaults.go#L26:6 - Resolve formatting issues. 5834241 (Abhishek Kashyap)
- Remove duplicated documentation 1d97af1 (Matthew Fisher)
- Test on go 1.11 49df809 (Helgi Þormar Þorbjörnsson)

### Fixed

- Fix file permissions c5f40b5 (gongdo)
- Fix example for buildCustomCert 7779e0d (Tin Lam)

## Release 2.15.0 (2018-04-02)

### Added

- #68 and #69: Add json helpers to docs (thanks @arunvelsriram)
- #66: Add ternary function (thanks @binoculars)
- #67: Allow keys function to take multiple dicts (thanks @binoculars)
- #89: Added sha1sum to crypto function (thanks @benkeil)
- #81: Allow customizing Root CA that used by genSignedCert (thanks @chenzhiwei)
- #92: Add travis testing for go 1.10
- #93: Adding appveyor config for windows testing

### Changed

- #90: Updating to more recent dependencies
- #73: replace satori/go.uuid with google/uuid (thanks @petterw)

### Fixed

- #76: Fixed documentation typos (thanks @Thiht)
- Fixed rounding issue on the `ago` function. Note, the removes support for Go 1.8 and older

## Release 2.14.1 (2017-12-01)

### Fixed

- #60: Fix typo in function name documentation (thanks @neil-ca-moore)
- #61: Removing line with {{ due to blocking github pages genertion
- #64: Update the list functions to handle int, string, and other slices for compatibility

## Release 2.14.0 (2017-10-06)

This new version of Sprig adds a set of functions for generating and working with SSL certificates.

- `genCA` generates an SSL Certificate Authority
- `genSelfSignedCert` generates an SSL self-signed certificate
- `genSignedCert` generates an SSL certificate and key based on a given CA

## Release 2.13.0 (2017-09-18)

This release adds new functions, including:

- `regexMatch`, `regexFindAll`, `regexFind`, `regexReplaceAll`, `regexReplaceAllLiteral`, and `regexSplit` to work with regular expressions
- `floor`, `ceil`, and `round` math functions
- `toDate` converts a string to a date
- `nindent` is just like `indent` but also prepends a new line
- `ago` returns the time from `time.Now`

### Added

- #40: Added basic regex functionality (thanks @alanquillin)
- #41: Added ceil floor and round functions (thanks @alanquillin)
- #48: Added toDate function (thanks @andreynering)
- #50: Added nindent function (thanks @binoculars)
- #46: Added ago function (thanks @slayer)

### Changed

- #51: Updated godocs to include new string functions (thanks @curtisallen)
- #49: Added ability to merge multiple dicts (thanks @binoculars)

## Release 2.12.0 (2017-05-17)

- `snakecase`, `camelcase`, and `shuffle` are three new string functions
- `fail` allows you to bail out of a template render when conditions are not met

## Release 2.11.0 (2017-05-02)

- Added `toJson` and `toPrettyJson`
- Added `merge`
- Refactored documentation

## Release 2.10.0 (2017-03-15)

- Added `semver` and `semverCompare` for Semantic Versions
- `list` replaces `tuple`
- Fixed issue with `join`
- Added `first`, `last`, `intial`, `rest`, `prepend`, `append`, `toString`, `toStrings`, `sortAlpha`, `reverse`, `coalesce`, `pluck`, `pick`, `compact`, `keys`, `omit`, `uniq`, `has`, `without`

## Release 2.9.0 (2017-02-23)

- Added `splitList` to split a list
- Added crypto functions of `genPrivateKey` and `derivePassword`

## Release 2.8.0 (2016-12-21)

- Added access to several path functions (`base`, `dir`, `clean`, `ext`, and `abs`)
- Added functions for _mutating_ dictionaries (`set`, `unset`, `hasKey`)

## Release 2.7.0 (2016-12-01)

- Added `sha256sum` to generate a hash of an input
- Added functions to convert a numeric or string to `int`, `int64`, `float64`

## Release 2.6.0 (2016-10-03)

- Added a `uuidv4` template function for generating UUIDs inside of a template.

## Release 2.5.0 (2016-08-19)

- New `trimSuffix`, `trimPrefix`, `hasSuffix`, and `hasPrefix` functions
- New aliases have been added for a few functions that didn't follow the naming conventions (`trimAll` and `abbrevBoth`)
- `trimall` and `abbrevboth` (notice the case) are deprecated and will be removed in 3.0.0

## Release 2.4.0 (2016-08-16)

- Adds two functions: `until` and `untilStep`

## Release 2.3.0 (2016-06-21)

- cat: Concatenate strings with whitespace separators.
- replace: Replace parts of a string: `replace " " "-" "Me First"` renders "Me-First"
- plural: Format plurals: `len "foo" | plural "one foo" "many foos"` renders "many foos"
- indent: Indent blocks of text in a way that is sensitive to "\n" characters.

## Release 2.2.0 (2016-04-21)

- Added a `genPrivateKey` function (Thanks @bacongobbler)

## Release 2.1.0 (2016-03-30)

- `default` now prints the default value when it does not receive a value down the pipeline. It is much safer now to do `{{.Foo | default "bar"}}`.
- Added accessors for "hermetic" functions. These return only functions that, when given the same input, produce the same output.

## Release 2.0.0 (2016-03-29)

Because we switched from `int` to `int64` as the return value for all integer math functions, the library's major version number has been incremented.

- `min` complements `max` (formerly `biggest`)
- `empty` indicates that a value is the empty value for its type
- `tuple` creates a tuple inside of a template: `{{$t := tuple "a", "b" "c"}}`
- `dict` creates a dictionary inside of a template `{{$d := dict "key1" "val1" "key2" "val2"}}` 
- Date formatters have been added for HTML dates (as used in `date` input fields)
- Integer math functions can convert from a number of types, including `string` (via `strconv.ParseInt`).

## Release 1.2.0 (2016-02-01)

- Added quote and squote
- Added b32enc and b32dec
- add now takes varargs
- biggest now takes varargs

## Release 1.1.0 (2015-12-29)

- Added #4: Added contains function. strings.Contains, but with the arguments
  switched to simplify common pipelines. (thanks krancour)
- Added Travis-CI testing support

## Release 1.0.0 (2015-12-23)

- Initial release
   070701000000D6000081A4000000000000000000000001645E367C00000424000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/Masterminds/sprig/v3/LICENSE.txt    Copyright (C) 2013-2020 Masterminds

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
070701000000D7000081A4000000000000000000000001645E367C000000B3000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/Masterminds/sprig/v3/Makefile   .PHONY: test
test:
	@echo "==> Running tests"
	GO111MODULE=on go test -v

.PHONY: test-cover
test-cover:
	@echo "==> Running Tests with coverage"
	GO111MODULE=on go test -cover .
 070701000000D8000081A4000000000000000000000001645E367C00000F5B000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/Masterminds/sprig/v3/README.md  # Sprig: Template functions for Go templates

[![GoDoc](https://img.shields.io/static/v1?label=godoc&message=reference&color=blue)](https://pkg.go.dev/github.com/Masterminds/sprig/v3)
[![Go Report Card](https://goreportcard.com/badge/github.com/Masterminds/sprig)](https://goreportcard.com/report/github.com/Masterminds/sprig)
[![Stability: Sustained](https://masterminds.github.io/stability/sustained.svg)](https://masterminds.github.io/stability/sustained.html)
[![](https://github.com/Masterminds/sprig/workflows/Tests/badge.svg)](https://github.com/Masterminds/sprig/actions)

The Go language comes with a [built-in template
language](http://golang.org/pkg/text/template/), but not
very many template functions. Sprig is a library that provides more than 100 commonly
used template functions.

It is inspired by the template functions found in
[Twig](http://twig.sensiolabs.org/documentation) and in various
JavaScript libraries, such as [underscore.js](http://underscorejs.org/).

## IMPORTANT NOTES

Sprig leverages [mergo](https://github.com/imdario/mergo) to handle merges. In
its v0.3.9 release, there was a behavior change that impacts merging template
functions in sprig. It is currently recommended to use v0.3.10 or later of that package.
Using v0.3.9 will cause sprig tests to fail.

## Package Versions

There are two active major versions of the `sprig` package.

* v3 is currently stable release series on the `master` branch. The Go API should
  remain compatible with v2, the current stable version. Behavior change behind
  some functions is the reason for the new major version.
* v2 is the previous stable release series. It has been more than three years since
  the initial release of v2. You can read the documentation and see the code
  on the [release-2](https://github.com/Masterminds/sprig/tree/release-2) branch.
  Bug fixes to this major version will continue for some time.

## Usage

**Template developers**: Please use Sprig's [function documentation](http://masterminds.github.io/sprig/) for
detailed instructions and code snippets for the >100 template functions available.

**Go developers**: If you'd like to include Sprig as a library in your program,
our API documentation is available [at GoDoc.org](http://godoc.org/github.com/Masterminds/sprig).

For standard usage, read on.

### Load the Sprig library

To load the Sprig `FuncMap`:

```go

import (
  "github.com/Masterminds/sprig/v3"
  "html/template"
)

// This example illustrates that the FuncMap *must* be set before the
// templates themselves are loaded.
tpl := template.Must(
  template.New("base").Funcs(sprig.FuncMap()).ParseGlob("*.html")
)


```

### Calling the functions inside of templates

By convention, all functions are lowercase. This seems to follow the Go
idiom for template functions (as opposed to template methods, which are
TitleCase). For example, this:

```
{{ "hello!" | upper | repeat 5 }}
```

produces this:

```
HELLO!HELLO!HELLO!HELLO!HELLO!
```

## Principles Driving Our Function Selection

We followed these principles to decide which functions to add and how to implement them:

- Use template functions to build layout. The following
  types of operations are within the domain of template functions:
  - Formatting
  - Layout
  - Simple type conversions
  - Utilities that assist in handling common formatting and layout needs (e.g. arithmetic)
- Template functions should not return errors unless there is no way to print
  a sensible value. For example, converting a string to an integer should not
  produce an error if conversion fails. Instead, it should display a default
  value.
- Simple math is necessary for grid layouts, pagers, and so on. Complex math
  (anything other than arithmetic) should be done outside of templates.
- Template functions only deal with the data passed into them. They never retrieve
  data from a source.
- Finally, do not override core Go template functions.
 070701000000D9000081A4000000000000000000000001645E367C000040A3000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/Masterminds/sprig/v3/crypto.go  package sprig

import (
	"bytes"
	"crypto"
	"crypto/aes"
	"crypto/cipher"
	"crypto/dsa"
	"crypto/ecdsa"
	"crypto/ed25519"
	"crypto/elliptic"
	"crypto/hmac"
	"crypto/rand"
	"crypto/rsa"
	"crypto/sha1"
	"crypto/sha256"
	"crypto/x509"
	"crypto/x509/pkix"
	"encoding/asn1"
	"encoding/base64"
	"encoding/binary"
	"encoding/hex"
	"encoding/pem"
	"errors"
	"fmt"
	"hash/adler32"
	"io"
	"math/big"
	"net"
	"time"

	"strings"

	"github.com/google/uuid"
	bcrypt_lib "golang.org/x/crypto/bcrypt"
	"golang.org/x/crypto/scrypt"
)

func sha256sum(input string) string {
	hash := sha256.Sum256([]byte(input))
	return hex.EncodeToString(hash[:])
}

func sha1sum(input string) string {
	hash := sha1.Sum([]byte(input))
	return hex.EncodeToString(hash[:])
}

func adler32sum(input string) string {
	hash := adler32.Checksum([]byte(input))
	return fmt.Sprintf("%d", hash)
}

func bcrypt(input string) string {
	hash, err := bcrypt_lib.GenerateFromPassword([]byte(input), bcrypt_lib.DefaultCost)
	if err != nil {
		return fmt.Sprintf("failed to encrypt string with bcrypt: %s", err)
	}

	return string(hash)
}

func htpasswd(username string, password string) string {
	if strings.Contains(username, ":") {
		return fmt.Sprintf("invalid username: %s", username)
	}
	return fmt.Sprintf("%s:%s", username, bcrypt(password))
}

func randBytes(count int) (string, error) {
	buf := make([]byte, count)
	if _, err := rand.Read(buf); err != nil {
		return "", err
	}
	return base64.StdEncoding.EncodeToString(buf), nil
}

// uuidv4 provides a safe and secure UUID v4 implementation
func uuidv4() string {
	return uuid.New().String()
}

var masterPasswordSeed = "com.lyndir.masterpassword"

var passwordTypeTemplates = map[string][][]byte{
	"maximum": {[]byte("anoxxxxxxxxxxxxxxxxx"), []byte("axxxxxxxxxxxxxxxxxno")},
	"long": {[]byte("CvcvnoCvcvCvcv"), []byte("CvcvCvcvnoCvcv"), []byte("CvcvCvcvCvcvno"), []byte("CvccnoCvcvCvcv"), []byte("CvccCvcvnoCvcv"),
		[]byte("CvccCvcvCvcvno"), []byte("CvcvnoCvccCvcv"), []byte("CvcvCvccnoCvcv"), []byte("CvcvCvccCvcvno"), []byte("CvcvnoCvcvCvcc"),
		[]byte("CvcvCvcvnoCvcc"), []byte("CvcvCvcvCvccno"), []byte("CvccnoCvccCvcv"), []byte("CvccCvccnoCvcv"), []byte("CvccCvccCvcvno"),
		[]byte("CvcvnoCvccCvcc"), []byte("CvcvCvccnoCvcc"), []byte("CvcvCvccCvccno"), []byte("CvccnoCvcvCvcc"), []byte("CvccCvcvnoCvcc"),
		[]byte("CvccCvcvCvccno")},
	"medium": {[]byte("CvcnoCvc"), []byte("CvcCvcno")},
	"short":  {[]byte("Cvcn")},
	"basic":  {[]byte("aaanaaan"), []byte("aannaaan"), []byte("aaannaaa")},
	"pin":    {[]byte("nnnn")},
}

var templateCharacters = map[byte]string{
	'V': "AEIOU",
	'C': "BCDFGHJKLMNPQRSTVWXYZ",
	'v': "aeiou",
	'c': "bcdfghjklmnpqrstvwxyz",
	'A': "AEIOUBCDFGHJKLMNPQRSTVWXYZ",
	'a': "AEIOUaeiouBCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwxyz",
	'n': "0123456789",
	'o': "@&%?,=[]_:-+*$#!'^~;()/.",
	'x': "AEIOUaeiouBCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwxyz0123456789!@#$%^&*()",
}

func derivePassword(counter uint32, passwordType, password, user, site string) string {
	var templates = passwordTypeTemplates[passwordType]
	if templates == nil {
		return fmt.Sprintf("cannot find password template %s", passwordType)
	}

	var buffer bytes.Buffer
	buffer.WriteString(masterPasswordSeed)
	binary.Write(&buffer, binary.BigEndian, uint32(len(user)))
	buffer.WriteString(user)

	salt := buffer.Bytes()
	key, err := scrypt.Key([]byte(password), salt, 32768, 8, 2, 64)
	if err != nil {
		return fmt.Sprintf("failed to derive password: %s", err)
	}

	buffer.Truncate(len(masterPasswordSeed))
	binary.Write(&buffer, binary.BigEndian, uint32(len(site)))
	buffer.WriteString(site)
	binary.Write(&buffer, binary.BigEndian, counter)

	var hmacv = hmac.New(sha256.New, key)
	hmacv.Write(buffer.Bytes())
	var seed = hmacv.Sum(nil)
	var temp = templates[int(seed[0])%len(templates)]

	buffer.Truncate(0)
	for i, element := range temp {
		passChars := templateCharacters[element]
		passChar := passChars[int(seed[i+1])%len(passChars)]
		buffer.WriteByte(passChar)
	}

	return buffer.String()
}

func generatePrivateKey(typ string) string {
	var priv interface{}
	var err error
	switch typ {
	case "", "rsa":
		// good enough for government work
		priv, err = rsa.GenerateKey(rand.Reader, 4096)
	case "dsa":
		key := new(dsa.PrivateKey)
		// again, good enough for government work
		if err = dsa.GenerateParameters(&key.Parameters, rand.Reader, dsa.L2048N256); err != nil {
			return fmt.Sprintf("failed to generate dsa params: %s", err)
		}
		err = dsa.GenerateKey(key, rand.Reader)
		priv = key
	case "ecdsa":
		// again, good enough for government work
		priv, err = ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
	case "ed25519":
		_, priv, err = ed25519.GenerateKey(rand.Reader)
	default:
		return "Unknown type " + typ
	}
	if err != nil {
		return fmt.Sprintf("failed to generate private key: %s", err)
	}

	return string(pem.EncodeToMemory(pemBlockForKey(priv)))
}

// DSAKeyFormat stores the format for DSA keys.
// Used by pemBlockForKey
type DSAKeyFormat struct {
	Version       int
	P, Q, G, Y, X *big.Int
}

func pemBlockForKey(priv interface{}) *pem.Block {
	switch k := priv.(type) {
	case *rsa.PrivateKey:
		return &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(k)}
	case *dsa.PrivateKey:
		val := DSAKeyFormat{
			P: k.P, Q: k.Q, G: k.G,
			Y: k.Y, X: k.X,
		}
		bytes, _ := asn1.Marshal(val)
		return &pem.Block{Type: "DSA PRIVATE KEY", Bytes: bytes}
	case *ecdsa.PrivateKey:
		b, _ := x509.MarshalECPrivateKey(k)
		return &pem.Block{Type: "EC PRIVATE KEY", Bytes: b}
	default:
		// attempt PKCS#8 format for all other keys
		b, err := x509.MarshalPKCS8PrivateKey(k)
		if err != nil {
			return nil
		}
		return &pem.Block{Type: "PRIVATE KEY", Bytes: b}
	}
}

func parsePrivateKeyPEM(pemBlock string) (crypto.PrivateKey, error) {
	block, _ := pem.Decode([]byte(pemBlock))
	if block == nil {
		return nil, errors.New("no PEM data in input")
	}

	if block.Type == "PRIVATE KEY" {
		priv, err := x509.ParsePKCS8PrivateKey(block.Bytes)
		if err != nil {
			return nil, fmt.Errorf("decoding PEM as PKCS#8: %s", err)
		}
		return priv, nil
	} else if !strings.HasSuffix(block.Type, " PRIVATE KEY") {
		return nil, fmt.Errorf("no private key data in PEM block of type %s", block.Type)
	}

	switch block.Type[:len(block.Type)-12] { // strip " PRIVATE KEY"
	case "RSA":
		priv, err := x509.ParsePKCS1PrivateKey(block.Bytes)
		if err != nil {
			return nil, fmt.Errorf("parsing RSA private key from PEM: %s", err)
		}
		return priv, nil
	case "EC":
		priv, err := x509.ParseECPrivateKey(block.Bytes)
		if err != nil {
			return nil, fmt.Errorf("parsing EC private key from PEM: %s", err)
		}
		return priv, nil
	case "DSA":
		var k DSAKeyFormat
		_, err := asn1.Unmarshal(block.Bytes, &k)
		if err != nil {
			return nil, fmt.Errorf("parsing DSA private key from PEM: %s", err)
		}
		priv := &dsa.PrivateKey{
			PublicKey: dsa.PublicKey{
				Parameters: dsa.Parameters{
					P: k.P, Q: k.Q, G: k.G,
				},
				Y: k.Y,
			},
			X: k.X,
		}
		return priv, nil
	default:
		return nil, fmt.Errorf("invalid private key type %s", block.Type)
	}
}

func getPublicKey(priv crypto.PrivateKey) (crypto.PublicKey, error) {
	switch k := priv.(type) {
	case interface{ Public() crypto.PublicKey }:
		return k.Public(), nil
	case *dsa.PrivateKey:
		return &k.PublicKey, nil
	default:
		return nil, fmt.Errorf("unable to get public key for type %T", priv)
	}
}

type certificate struct {
	Cert string
	Key  string
}

func buildCustomCertificate(b64cert string, b64key string) (certificate, error) {
	crt := certificate{}

	cert, err := base64.StdEncoding.DecodeString(b64cert)
	if err != nil {
		return crt, errors.New("unable to decode base64 certificate")
	}

	key, err := base64.StdEncoding.DecodeString(b64key)
	if err != nil {
		return crt, errors.New("unable to decode base64 private key")
	}

	decodedCert, _ := pem.Decode(cert)
	if decodedCert == nil {
		return crt, errors.New("unable to decode certificate")
	}
	_, err = x509.ParseCertificate(decodedCert.Bytes)
	if err != nil {
		return crt, fmt.Errorf(
			"error parsing certificate: decodedCert.Bytes: %s",
			err,
		)
	}

	_, err = parsePrivateKeyPEM(string(key))
	if err != nil {
		return crt, fmt.Errorf(
			"error parsing private key: %s",
			err,
		)
	}

	crt.Cert = string(cert)
	crt.Key = string(key)

	return crt, nil
}

func generateCertificateAuthority(
	cn string,
	daysValid int,
) (certificate, error) {
	priv, err := rsa.GenerateKey(rand.Reader, 2048)
	if err != nil {
		return certificate{}, fmt.Errorf("error generating rsa key: %s", err)
	}

	return generateCertificateAuthorityWithKeyInternal(cn, daysValid, priv)
}

func generateCertificateAuthorityWithPEMKey(
	cn string,
	daysValid int,
	privPEM string,
) (certificate, error) {
	priv, err := parsePrivateKeyPEM(privPEM)
	if err != nil {
		return certificate{}, fmt.Errorf("parsing private key: %s", err)
	}
	return generateCertificateAuthorityWithKeyInternal(cn, daysValid, priv)
}

func generateCertificateAuthorityWithKeyInternal(
	cn string,
	daysValid int,
	priv crypto.PrivateKey,
) (certificate, error) {
	ca := certificate{}

	template, err := getBaseCertTemplate(cn, nil, nil, daysValid)
	if err != nil {
		return ca, err
	}
	// Override KeyUsage and IsCA
	template.KeyUsage = x509.KeyUsageKeyEncipherment |
		x509.KeyUsageDigitalSignature |
		x509.KeyUsageCertSign
	template.IsCA = true

	ca.Cert, ca.Key, err = getCertAndKey(template, priv, template, priv)

	return ca, err
}

func generateSelfSignedCertificate(
	cn string,
	ips []interface{},
	alternateDNS []interface{},
	daysValid int,
) (certificate, error) {
	priv, err := rsa.GenerateKey(rand.Reader, 2048)
	if err != nil {
		return certificate{}, fmt.Errorf("error generating rsa key: %s", err)
	}
	return generateSelfSignedCertificateWithKeyInternal(cn, ips, alternateDNS, daysValid, priv)
}

func generateSelfSignedCertificateWithPEMKey(
	cn string,
	ips []interface{},
	alternateDNS []interface{},
	daysValid int,
	privPEM string,
) (certificate, error) {
	priv, err := parsePrivateKeyPEM(privPEM)
	if err != nil {
		return certificate{}, fmt.Errorf("parsing private key: %s", err)
	}
	return generateSelfSignedCertificateWithKeyInternal(cn, ips, alternateDNS, daysValid, priv)
}

func generateSelfSignedCertificateWithKeyInternal(
	cn string,
	ips []interface{},
	alternateDNS []interface{},
	daysValid int,
	priv crypto.PrivateKey,
) (certificate, error) {
	cert := certificate{}

	template, err := getBaseCertTemplate(cn, ips, alternateDNS, daysValid)
	if err != nil {
		return cert, err
	}

	cert.Cert, cert.Key, err = getCertAndKey(template, priv, template, priv)

	return cert, err
}

func generateSignedCertificate(
	cn string,
	ips []interface{},
	alternateDNS []interface{},
	daysValid int,
	ca certificate,
) (certificate, error) {
	priv, err := rsa.GenerateKey(rand.Reader, 2048)
	if err != nil {
		return certificate{}, fmt.Errorf("error generating rsa key: %s", err)
	}
	return generateSignedCertificateWithKeyInternal(cn, ips, alternateDNS, daysValid, ca, priv)
}

func generateSignedCertificateWithPEMKey(
	cn string,
	ips []interface{},
	alternateDNS []interface{},
	daysValid int,
	ca certificate,
	privPEM string,
) (certificate, error) {
	priv, err := parsePrivateKeyPEM(privPEM)
	if err != nil {
		return certificate{}, fmt.Errorf("parsing private key: %s", err)
	}
	return generateSignedCertificateWithKeyInternal(cn, ips, alternateDNS, daysValid, ca, priv)
}

func generateSignedCertificateWithKeyInternal(
	cn string,
	ips []interface{},
	alternateDNS []interface{},
	daysValid int,
	ca certificate,
	priv crypto.PrivateKey,
) (certificate, error) {
	cert := certificate{}

	decodedSignerCert, _ := pem.Decode([]byte(ca.Cert))
	if decodedSignerCert == nil {
		return cert, errors.New("unable to decode certificate")
	}
	signerCert, err := x509.ParseCertificate(decodedSignerCert.Bytes)
	if err != nil {
		return cert, fmt.Errorf(
			"error parsing certificate: decodedSignerCert.Bytes: %s",
			err,
		)
	}
	signerKey, err := parsePrivateKeyPEM(ca.Key)
	if err != nil {
		return cert, fmt.Errorf(
			"error parsing private key: %s",
			err,
		)
	}

	template, err := getBaseCertTemplate(cn, ips, alternateDNS, daysValid)
	if err != nil {
		return cert, err
	}

	cert.Cert, cert.Key, err = getCertAndKey(
		template,
		priv,
		signerCert,
		signerKey,
	)

	return cert, err
}

func getCertAndKey(
	template *x509.Certificate,
	signeeKey crypto.PrivateKey,
	parent *x509.Certificate,
	signingKey crypto.PrivateKey,
) (string, string, error) {
	signeePubKey, err := getPublicKey(signeeKey)
	if err != nil {
		return "", "", fmt.Errorf("error retrieving public key from signee key: %s", err)
	}
	derBytes, err := x509.CreateCertificate(
		rand.Reader,
		template,
		parent,
		signeePubKey,
		signingKey,
	)
	if err != nil {
		return "", "", fmt.Errorf("error creating certificate: %s", err)
	}

	certBuffer := bytes.Buffer{}
	if err := pem.Encode(
		&certBuffer,
		&pem.Block{Type: "CERTIFICATE", Bytes: derBytes},
	); err != nil {
		return "", "", fmt.Errorf("error pem-encoding certificate: %s", err)
	}

	keyBuffer := bytes.Buffer{}
	if err := pem.Encode(
		&keyBuffer,
		pemBlockForKey(signeeKey),
	); err != nil {
		return "", "", fmt.Errorf("error pem-encoding key: %s", err)
	}

	return certBuffer.String(), keyBuffer.String(), nil
}

func getBaseCertTemplate(
	cn string,
	ips []interface{},
	alternateDNS []interface{},
	daysValid int,
) (*x509.Certificate, error) {
	ipAddresses, err := getNetIPs(ips)
	if err != nil {
		return nil, err
	}
	dnsNames, err := getAlternateDNSStrs(alternateDNS)
	if err != nil {
		return nil, err
	}
	serialNumberUpperBound := new(big.Int).Lsh(big.NewInt(1), 128)
	serialNumber, err := rand.Int(rand.Reader, serialNumberUpperBound)
	if err != nil {
		return nil, err
	}
	return &x509.Certificate{
		SerialNumber: serialNumber,
		Subject: pkix.Name{
			CommonName: cn,
		},
		IPAddresses: ipAddresses,
		DNSNames:    dnsNames,
		NotBefore:   time.Now(),
		NotAfter:    time.Now().Add(time.Hour * 24 * time.Duration(daysValid)),
		KeyUsage:    x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature,
		ExtKeyUsage: []x509.ExtKeyUsage{
			x509.ExtKeyUsageServerAuth,
			x509.ExtKeyUsageClientAuth,
		},
		BasicConstraintsValid: true,
	}, nil
}

func getNetIPs(ips []interface{}) ([]net.IP, error) {
	if ips == nil {
		return []net.IP{}, nil
	}
	var ipStr string
	var ok bool
	var netIP net.IP
	netIPs := make([]net.IP, len(ips))
	for i, ip := range ips {
		ipStr, ok = ip.(string)
		if !ok {
			return nil, fmt.Errorf("error parsing ip: %v is not a string", ip)
		}
		netIP = net.ParseIP(ipStr)
		if netIP == nil {
			return nil, fmt.Errorf("error parsing ip: %s", ipStr)
		}
		netIPs[i] = netIP
	}
	return netIPs, nil
}

func getAlternateDNSStrs(alternateDNS []interface{}) ([]string, error) {
	if alternateDNS == nil {
		return []string{}, nil
	}
	var dnsStr string
	var ok bool
	alternateDNSStrs := make([]string, len(alternateDNS))
	for i, dns := range alternateDNS {
		dnsStr, ok = dns.(string)
		if !ok {
			return nil, fmt.Errorf(
				"error processing alternate dns name: %v is not a string",
				dns,
			)
		}
		alternateDNSStrs[i] = dnsStr
	}
	return alternateDNSStrs, nil
}

func encryptAES(password string, plaintext string) (string, error) {
	if plaintext == "" {
		return "", nil
	}

	key := make([]byte, 32)
	copy(key, []byte(password))
	block, err := aes.NewCipher(key)
	if err != nil {
		return "", err
	}

	content := []byte(plaintext)
	blockSize := block.BlockSize()
	padding := blockSize - len(content)%blockSize
	padtext := bytes.Repeat([]byte{byte(padding)}, padding)
	content = append(content, padtext...)

	ciphertext := make([]byte, aes.BlockSize+len(content))

	iv := ciphertext[:aes.BlockSize]
	if _, err := io.ReadFull(rand.Reader, iv); err != nil {
		return "", err
	}

	mode := cipher.NewCBCEncrypter(block, iv)
	mode.CryptBlocks(ciphertext[aes.BlockSize:], content)

	return base64.StdEncoding.EncodeToString(ciphertext), nil
}

func decryptAES(password string, crypt64 string) (string, error) {
	if crypt64 == "" {
		return "", nil
	}

	key := make([]byte, 32)
	copy(key, []byte(password))

	crypt, err := base64.StdEncoding.DecodeString(crypt64)
	if err != nil {
		return "", err
	}

	block, err := aes.NewCipher(key)
	if err != nil {
		return "", err
	}

	iv := crypt[:aes.BlockSize]
	crypt = crypt[aes.BlockSize:]
	decrypted := make([]byte, len(crypt))
	mode := cipher.NewCBCDecrypter(block, iv)
	mode.CryptBlocks(decrypted, crypt)

	return string(decrypted[:len(decrypted)-int(decrypted[len(decrypted)-1])]), nil
}
 070701000000DA000081A4000000000000000000000001645E367C00000C2D000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/Masterminds/sprig/v3/date.go    package sprig

import (
	"strconv"
	"time"
)

// Given a format and a date, format the date string.
//
// Date can be a `time.Time` or an `int, int32, int64`.
// In the later case, it is treated as seconds since UNIX
// epoch.
func date(fmt string, date interface{}) string {
	return dateInZone(fmt, date, "Local")
}

func htmlDate(date interface{}) string {
	return dateInZone("2006-01-02", date, "Local")
}

func htmlDateInZone(date interface{}, zone string) string {
	return dateInZone("2006-01-02", date, zone)
}

func dateInZone(fmt string, date interface{}, zone string) string {
	var t time.Time
	switch date := date.(type) {
	default:
		t = time.Now()
	case time.Time:
		t = date
	case *time.Time:
		t = *date
	case int64:
		t = time.Unix(date, 0)
	case int:
		t = time.Unix(int64(date), 0)
	case int32:
		t = time.Unix(int64(date), 0)
	}

	loc, err := time.LoadLocation(zone)
	if err != nil {
		loc, _ = time.LoadLocation("UTC")
	}

	return t.In(loc).Format(fmt)
}

func dateModify(fmt string, date time.Time) time.Time {
	d, err := time.ParseDuration(fmt)
	if err != nil {
		return date
	}
	return date.Add(d)
}

func mustDateModify(fmt string, date time.Time) (time.Time, error) {
	d, err := time.ParseDuration(fmt)
	if err != nil {
		return time.Time{}, err
	}
	return date.Add(d), nil
}

func dateAgo(date interface{}) string {
	var t time.Time

	switch date := date.(type) {
	default:
		t = time.Now()
	case time.Time:
		t = date
	case int64:
		t = time.Unix(date, 0)
	case int:
		t = time.Unix(int64(date), 0)
	}
	// Drop resolution to seconds
	duration := time.Since(t).Round(time.Second)
	return duration.String()
}

func duration(sec interface{}) string {
	var n int64
	switch value := sec.(type) {
	default:
		n = 0
	case string:
		n, _ = strconv.ParseInt(value, 10, 64)
	case int64:
		n = value
	}
	return (time.Duration(n) * time.Second).String()
}

func durationRound(duration interface{}) string {
	var d time.Duration
	switch duration := duration.(type) {
	default:
		d = 0
	case string:
		d, _ = time.ParseDuration(duration)
	case int64:
		d = time.Duration(duration)
	case time.Time:
		d = time.Since(duration)
	}

	u := uint64(d)
	neg := d < 0
	if neg {
		u = -u
	}

	var (
		year   = uint64(time.Hour) * 24 * 365
		month  = uint64(time.Hour) * 24 * 30
		day    = uint64(time.Hour) * 24
		hour   = uint64(time.Hour)
		minute = uint64(time.Minute)
		second = uint64(time.Second)
	)
	switch {
	case u > year:
		return strconv.FormatUint(u/year, 10) + "y"
	case u > month:
		return strconv.FormatUint(u/month, 10) + "mo"
	case u > day:
		return strconv.FormatUint(u/day, 10) + "d"
	case u > hour:
		return strconv.FormatUint(u/hour, 10) + "h"
	case u > minute:
		return strconv.FormatUint(u/minute, 10) + "m"
	case u > second:
		return strconv.FormatUint(u/second, 10) + "s"
	}
	return "0s"
}

func toDate(fmt, str string) time.Time {
	t, _ := time.ParseInLocation(fmt, str, time.Local)
	return t
}

func mustToDate(fmt, str string) (time.Time, error) {
	return time.ParseInLocation(fmt, str, time.Local)
}

func unixEpoch(date time.Time) string {
	return strconv.FormatInt(date.Unix(), 10)
}
   070701000000DB000081A4000000000000000000000001645E367C00000F15000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/Masterminds/sprig/v3/defaults.go    package sprig

import (
	"bytes"
	"encoding/json"
	"math/rand"
	"reflect"
	"strings"
	"time"
)

func init() {
	rand.Seed(time.Now().UnixNano())
}

// dfault checks whether `given` is set, and returns default if not set.
//
// This returns `d` if `given` appears not to be set, and `given` otherwise.
//
// For numeric types 0 is unset.
// For strings, maps, arrays, and slices, len() = 0 is considered unset.
// For bool, false is unset.
// Structs are never considered unset.
//
// For everything else, including pointers, a nil value is unset.
func dfault(d interface{}, given ...interface{}) interface{} {

	if empty(given) || empty(given[0]) {
		return d
	}
	return given[0]
}

// empty returns true if the given value has the zero value for its type.
func empty(given interface{}) bool {
	g := reflect.ValueOf(given)
	if !g.IsValid() {
		return true
	}

	// Basically adapted from text/template.isTrue
	switch g.Kind() {
	default:
		return g.IsNil()
	case reflect.Array, reflect.Slice, reflect.Map, reflect.String:
		return g.Len() == 0
	case reflect.Bool:
		return !g.Bool()
	case reflect.Complex64, reflect.Complex128:
		return g.Complex() == 0
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		return g.Int() == 0
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		return g.Uint() == 0
	case reflect.Float32, reflect.Float64:
		return g.Float() == 0
	case reflect.Struct:
		return false
	}
}

// coalesce returns the first non-empty value.
func coalesce(v ...interface{}) interface{} {
	for _, val := range v {
		if !empty(val) {
			return val
		}
	}
	return nil
}

// all returns true if empty(x) is false for all values x in the list.
// If the list is empty, return true.
func all(v ...interface{}) bool {
	for _, val := range v {
		if empty(val) {
			return false
		}
	}
	return true
}

// any returns true if empty(x) is false for any x in the list.
// If the list is empty, return false.
func any(v ...interface{}) bool {
	for _, val := range v {
		if !empty(val) {
			return true
		}
	}
	return false
}

// fromJson decodes JSON into a structured value, ignoring errors.
func fromJson(v string) interface{} {
	output, _ := mustFromJson(v)
	return output
}

// mustFromJson decodes JSON into a structured value, returning errors.
func mustFromJson(v string) (interface{}, error) {
	var output interface{}
	err := json.Unmarshal([]byte(v), &output)
	return output, err
}

// toJson encodes an item into a JSON string
func toJson(v interface{}) string {
	output, _ := json.Marshal(v)
	return string(output)
}

func mustToJson(v interface{}) (string, error) {
	output, err := json.Marshal(v)
	if err != nil {
		return "", err
	}
	return string(output), nil
}

// toPrettyJson encodes an item into a pretty (indented) JSON string
func toPrettyJson(v interface{}) string {
	output, _ := json.MarshalIndent(v, "", "  ")
	return string(output)
}

func mustToPrettyJson(v interface{}) (string, error) {
	output, err := json.MarshalIndent(v, "", "  ")
	if err != nil {
		return "", err
	}
	return string(output), nil
}

// toRawJson encodes an item into a JSON string with no escaping of HTML characters.
func toRawJson(v interface{}) string {
	output, err := mustToRawJson(v)
	if err != nil {
		panic(err)
	}
	return string(output)
}

// mustToRawJson encodes an item into a JSON string with no escaping of HTML characters.
func mustToRawJson(v interface{}) (string, error) {
	buf := new(bytes.Buffer)
	enc := json.NewEncoder(buf)
	enc.SetEscapeHTML(false)
	err := enc.Encode(&v)
	if err != nil {
		return "", err
	}
	return strings.TrimSuffix(buf.String(), "\n"), nil
}

// ternary returns the first value if the last value is true, otherwise returns the second value.
func ternary(vt interface{}, vf interface{}, v bool) interface{} {
	if v {
		return vt
	}

	return vf
}
   070701000000DC000081A4000000000000000000000001645E367C00000E18000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/Masterminds/sprig/v3/dict.go    package sprig

import (
	"github.com/imdario/mergo"
	"github.com/mitchellh/copystructure"
)

func get(d map[string]interface{}, key string) interface{} {
	if val, ok := d[key]; ok {
		return val
	}
	return ""
}

func set(d map[string]interface{}, key string, value interface{}) map[string]interface{} {
	d[key] = value
	return d
}

func unset(d map[string]interface{}, key string) map[string]interface{} {
	delete(d, key)
	return d
}

func hasKey(d map[string]interface{}, key string) bool {
	_, ok := d[key]
	return ok
}

func pluck(key string, d ...map[string]interface{}) []interface{} {
	res := []interface{}{}
	for _, dict := range d {
		if val, ok := dict[key]; ok {
			res = append(res, val)
		}
	}
	return res
}

func keys(dicts ...map[string]interface{}) []string {
	k := []string{}
	for _, dict := range dicts {
		for key := range dict {
			k = append(k, key)
		}
	}
	return k
}

func pick(dict map[string]interface{}, keys ...string) map[string]interface{} {
	res := map[string]interface{}{}
	for _, k := range keys {
		if v, ok := dict[k]; ok {
			res[k] = v
		}
	}
	return res
}

func omit(dict map[string]interface{}, keys ...string) map[string]interface{} {
	res := map[string]interface{}{}

	omit := make(map[string]bool, len(keys))
	for _, k := range keys {
		omit[k] = true
	}

	for k, v := range dict {
		if _, ok := omit[k]; !ok {
			res[k] = v
		}
	}
	return res
}

func dict(v ...interface{}) map[string]interface{} {
	dict := map[string]interface{}{}
	lenv := len(v)
	for i := 0; i < lenv; i += 2 {
		key := strval(v[i])
		if i+1 >= lenv {
			dict[key] = ""
			continue
		}
		dict[key] = v[i+1]
	}
	return dict
}

func merge(dst map[string]interface{}, srcs ...map[string]interface{}) interface{} {
	for _, src := range srcs {
		if err := mergo.Merge(&dst, src); err != nil {
			// Swallow errors inside of a template.
			return ""
		}
	}
	return dst
}

func mustMerge(dst map[string]interface{}, srcs ...map[string]interface{}) (interface{}, error) {
	for _, src := range srcs {
		if err := mergo.Merge(&dst, src); err != nil {
			return nil, err
		}
	}
	return dst, nil
}

func mergeOverwrite(dst map[string]interface{}, srcs ...map[string]interface{}) interface{} {
	for _, src := range srcs {
		if err := mergo.MergeWithOverwrite(&dst, src); err != nil {
			// Swallow errors inside of a template.
			return ""
		}
	}
	return dst
}

func mustMergeOverwrite(dst map[string]interface{}, srcs ...map[string]interface{}) (interface{}, error) {
	for _, src := range srcs {
		if err := mergo.MergeWithOverwrite(&dst, src); err != nil {
			return nil, err
		}
	}
	return dst, nil
}

func values(dict map[string]interface{}) []interface{} {
	values := []interface{}{}
	for _, value := range dict {
		values = append(values, value)
	}

	return values
}

func deepCopy(i interface{}) interface{} {
	c, err := mustDeepCopy(i)
	if err != nil {
		panic("deepCopy error: " + err.Error())
	}

	return c
}

func mustDeepCopy(i interface{}) (interface{}, error) {
	return copystructure.Copy(i)
}

func dig(ps ...interface{}) (interface{}, error) {
	if len(ps) < 3 {
		panic("dig needs at least three arguments")
	}
	dict := ps[len(ps)-1].(map[string]interface{})
	def := ps[len(ps)-2]
	ks := make([]string, len(ps)-2)
	for i := 0; i < len(ks); i++ {
		ks[i] = ps[i].(string)
	}

	return digFromDict(dict, def, ks)
}

func digFromDict(dict map[string]interface{}, d interface{}, ks []string) (interface{}, error) {
	k, ns := ks[0], ks[1:len(ks)]
	step, has := dict[k]
	if !has {
		return d, nil
	}
	if len(ns) == 0 {
		return step, nil
	}
	return digFromDict(step.(map[string]interface{}), d, ns)
}
070701000000DD000081A4000000000000000000000001645E367C0000029F000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/Masterminds/sprig/v3/doc.go /*
Package sprig provides template functions for Go.

This package contains a number of utility functions for working with data
inside of Go `html/template` and `text/template` files.

To add these functions, use the `template.Funcs()` method:

	t := templates.New("foo").Funcs(sprig.FuncMap())

Note that you should add the function map before you parse any template files.

	In several cases, Sprig reverses the order of arguments from the way they
	appear in the standard library. This is to make it easier to pipe
	arguments into functions.

See http://masterminds.github.io/sprig/ for more detailed documentation on each of the available functions.
*/
package sprig
 070701000000DE000081A4000000000000000000000001645E367C00002B01000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/Masterminds/sprig/v3/functions.go   package sprig

import (
	"errors"
	"html/template"
	"math/rand"
	"os"
	"path"
	"path/filepath"
	"reflect"
	"strconv"
	"strings"
	ttemplate "text/template"
	"time"

	util "github.com/Masterminds/goutils"
	"github.com/huandu/xstrings"
	"github.com/shopspring/decimal"
)

// FuncMap produces the function map.
//
// Use this to pass the functions into the template engine:
//
// 	tpl := template.New("foo").Funcs(sprig.FuncMap()))
//
func FuncMap() template.FuncMap {
	return HtmlFuncMap()
}

// HermeticTxtFuncMap returns a 'text/template'.FuncMap with only repeatable functions.
func HermeticTxtFuncMap() ttemplate.FuncMap {
	r := TxtFuncMap()
	for _, name := range nonhermeticFunctions {
		delete(r, name)
	}
	return r
}

// HermeticHtmlFuncMap returns an 'html/template'.Funcmap with only repeatable functions.
func HermeticHtmlFuncMap() template.FuncMap {
	r := HtmlFuncMap()
	for _, name := range nonhermeticFunctions {
		delete(r, name)
	}
	return r
}

// TxtFuncMap returns a 'text/template'.FuncMap
func TxtFuncMap() ttemplate.FuncMap {
	return ttemplate.FuncMap(GenericFuncMap())
}

// HtmlFuncMap returns an 'html/template'.Funcmap
func HtmlFuncMap() template.FuncMap {
	return template.FuncMap(GenericFuncMap())
}

// GenericFuncMap returns a copy of the basic function map as a map[string]interface{}.
func GenericFuncMap() map[string]interface{} {
	gfm := make(map[string]interface{}, len(genericMap))
	for k, v := range genericMap {
		gfm[k] = v
	}
	return gfm
}

// These functions are not guaranteed to evaluate to the same result for given input, because they
// refer to the environment or global state.
var nonhermeticFunctions = []string{
	// Date functions
	"date",
	"date_in_zone",
	"date_modify",
	"now",
	"htmlDate",
	"htmlDateInZone",
	"dateInZone",
	"dateModify",

	// Strings
	"randAlphaNum",
	"randAlpha",
	"randAscii",
	"randNumeric",
	"randBytes",
	"uuidv4",

	// OS
	"env",
	"expandenv",

	// Network
	"getHostByName",
}

var genericMap = map[string]interface{}{
	"hello": func() string { return "Hello!" },

	// Date functions
	"ago":              dateAgo,
	"date":             date,
	"date_in_zone":     dateInZone,
	"date_modify":      dateModify,
	"dateInZone":       dateInZone,
	"dateModify":       dateModify,
	"duration":         duration,
	"durationRound":    durationRound,
	"htmlDate":         htmlDate,
	"htmlDateInZone":   htmlDateInZone,
	"must_date_modify": mustDateModify,
	"mustDateModify":   mustDateModify,
	"mustToDate":       mustToDate,
	"now":              time.Now,
	"toDate":           toDate,
	"unixEpoch":        unixEpoch,

	// Strings
	"abbrev":     abbrev,
	"abbrevboth": abbrevboth,
	"trunc":      trunc,
	"trim":       strings.TrimSpace,
	"upper":      strings.ToUpper,
	"lower":      strings.ToLower,
	"title":      strings.Title,
	"untitle":    untitle,
	"substr":     substring,
	// Switch order so that "foo" | repeat 5
	"repeat": func(count int, str string) string { return strings.Repeat(str, count) },
	// Deprecated: Use trimAll.
	"trimall": func(a, b string) string { return strings.Trim(b, a) },
	// Switch order so that "$foo" | trimall "$"
	"trimAll":      func(a, b string) string { return strings.Trim(b, a) },
	"trimSuffix":   func(a, b string) string { return strings.TrimSuffix(b, a) },
	"trimPrefix":   func(a, b string) string { return strings.TrimPrefix(b, a) },
	"nospace":      util.DeleteWhiteSpace,
	"initials":     initials,
	"randAlphaNum": randAlphaNumeric,
	"randAlpha":    randAlpha,
	"randAscii":    randAscii,
	"randNumeric":  randNumeric,
	"swapcase":     util.SwapCase,
	"shuffle":      xstrings.Shuffle,
	"snakecase":    xstrings.ToSnakeCase,
	"camelcase":    xstrings.ToCamelCase,
	"kebabcase":    xstrings.ToKebabCase,
	"wrap":         func(l int, s string) string { return util.Wrap(s, l) },
	"wrapWith":     func(l int, sep, str string) string { return util.WrapCustom(str, l, sep, true) },
	// Switch order so that "foobar" | contains "foo"
	"contains":   func(substr string, str string) bool { return strings.Contains(str, substr) },
	"hasPrefix":  func(substr string, str string) bool { return strings.HasPrefix(str, substr) },
	"hasSuffix":  func(substr string, str string) bool { return strings.HasSuffix(str, substr) },
	"quote":      quote,
	"squote":     squote,
	"cat":        cat,
	"indent":     indent,
	"nindent":    nindent,
	"replace":    replace,
	"plural":     plural,
	"sha1sum":    sha1sum,
	"sha256sum":  sha256sum,
	"adler32sum": adler32sum,
	"toString":   strval,

	// Wrap Atoi to stop errors.
	"atoi":      func(a string) int { i, _ := strconv.Atoi(a); return i },
	"int64":     toInt64,
	"int":       toInt,
	"float64":   toFloat64,
	"seq":       seq,
	"toDecimal": toDecimal,

	//"gt": func(a, b int) bool {return a > b},
	//"gte": func(a, b int) bool {return a >= b},
	//"lt": func(a, b int) bool {return a < b},
	//"lte": func(a, b int) bool {return a <= b},

	// split "/" foo/bar returns map[int]string{0: foo, 1: bar}
	"split":     split,
	"splitList": func(sep, orig string) []string { return strings.Split(orig, sep) },
	// splitn "/" foo/bar/fuu returns map[int]string{0: foo, 1: bar/fuu}
	"splitn":    splitn,
	"toStrings": strslice,

	"until":     until,
	"untilStep": untilStep,

	// VERY basic arithmetic.
	"add1": func(i interface{}) int64 { return toInt64(i) + 1 },
	"add": func(i ...interface{}) int64 {
		var a int64 = 0
		for _, b := range i {
			a += toInt64(b)
		}
		return a
	},
	"sub": func(a, b interface{}) int64 { return toInt64(a) - toInt64(b) },
	"div": func(a, b interface{}) int64 { return toInt64(a) / toInt64(b) },
	"mod": func(a, b interface{}) int64 { return toInt64(a) % toInt64(b) },
	"mul": func(a interface{}, v ...interface{}) int64 {
		val := toInt64(a)
		for _, b := range v {
			val = val * toInt64(b)
		}
		return val
	},
	"randInt": func(min, max int) int { return rand.Intn(max-min) + min },
	"add1f": func(i interface{}) float64 {
		return execDecimalOp(i, []interface{}{1}, func(d1, d2 decimal.Decimal) decimal.Decimal { return d1.Add(d2) })
	},
	"addf": func(i ...interface{}) float64 {
		a := interface{}(float64(0))
		return execDecimalOp(a, i, func(d1, d2 decimal.Decimal) decimal.Decimal { return d1.Add(d2) })
	},
	"subf": func(a interface{}, v ...interface{}) float64 {
		return execDecimalOp(a, v, func(d1, d2 decimal.Decimal) decimal.Decimal { return d1.Sub(d2) })
	},
	"divf": func(a interface{}, v ...interface{}) float64 {
		return execDecimalOp(a, v, func(d1, d2 decimal.Decimal) decimal.Decimal { return d1.Div(d2) })
	},
	"mulf": func(a interface{}, v ...interface{}) float64 {
		return execDecimalOp(a, v, func(d1, d2 decimal.Decimal) decimal.Decimal { return d1.Mul(d2) })
	},
	"biggest": max,
	"max":     max,
	"min":     min,
	"maxf":    maxf,
	"minf":    minf,
	"ceil":    ceil,
	"floor":   floor,
	"round":   round,

	// string slices. Note that we reverse the order b/c that's better
	// for template processing.
	"join":      join,
	"sortAlpha": sortAlpha,

	// Defaults
	"default":          dfault,
	"empty":            empty,
	"coalesce":         coalesce,
	"all":              all,
	"any":              any,
	"compact":          compact,
	"mustCompact":      mustCompact,
	"fromJson":         fromJson,
	"toJson":           toJson,
	"toPrettyJson":     toPrettyJson,
	"toRawJson":        toRawJson,
	"mustFromJson":     mustFromJson,
	"mustToJson":       mustToJson,
	"mustToPrettyJson": mustToPrettyJson,
	"mustToRawJson":    mustToRawJson,
	"ternary":          ternary,
	"deepCopy":         deepCopy,
	"mustDeepCopy":     mustDeepCopy,

	// Reflection
	"typeOf":     typeOf,
	"typeIs":     typeIs,
	"typeIsLike": typeIsLike,
	"kindOf":     kindOf,
	"kindIs":     kindIs,
	"deepEqual":  reflect.DeepEqual,

	// OS:
	"env":       os.Getenv,
	"expandenv": os.ExpandEnv,

	// Network:
	"getHostByName": getHostByName,

	// Paths:
	"base":  path.Base,
	"dir":   path.Dir,
	"clean": path.Clean,
	"ext":   path.Ext,
	"isAbs": path.IsAbs,

	// Filepaths:
	"osBase":  filepath.Base,
	"osClean": filepath.Clean,
	"osDir":   filepath.Dir,
	"osExt":   filepath.Ext,
	"osIsAbs": filepath.IsAbs,

	// Encoding:
	"b64enc": base64encode,
	"b64dec": base64decode,
	"b32enc": base32encode,
	"b32dec": base32decode,

	// Data Structures:
	"tuple":              list, // FIXME: with the addition of append/prepend these are no longer immutable.
	"list":               list,
	"dict":               dict,
	"get":                get,
	"set":                set,
	"unset":              unset,
	"hasKey":             hasKey,
	"pluck":              pluck,
	"keys":               keys,
	"pick":               pick,
	"omit":               omit,
	"merge":              merge,
	"mergeOverwrite":     mergeOverwrite,
	"mustMerge":          mustMerge,
	"mustMergeOverwrite": mustMergeOverwrite,
	"values":             values,

	"append": push, "push": push,
	"mustAppend": mustPush, "mustPush": mustPush,
	"prepend":     prepend,
	"mustPrepend": mustPrepend,
	"first":       first,
	"mustFirst":   mustFirst,
	"rest":        rest,
	"mustRest":    mustRest,
	"last":        last,
	"mustLast":    mustLast,
	"initial":     initial,
	"mustInitial": mustInitial,
	"reverse":     reverse,
	"mustReverse": mustReverse,
	"uniq":        uniq,
	"mustUniq":    mustUniq,
	"without":     without,
	"mustWithout": mustWithout,
	"has":         has,
	"mustHas":     mustHas,
	"slice":       slice,
	"mustSlice":   mustSlice,
	"concat":      concat,
	"dig":         dig,
	"chunk":       chunk,
	"mustChunk":   mustChunk,

	// Crypto:
	"bcrypt":            bcrypt,
	"htpasswd":          htpasswd,
	"genPrivateKey":     generatePrivateKey,
	"derivePassword":    derivePassword,
	"buildCustomCert":   buildCustomCertificate,
	"genCA":             generateCertificateAuthority,
	"genCAWithKey":      generateCertificateAuthorityWithPEMKey,
	"genSelfSignedCert": generateSelfSignedCertificate,
	"genSelfSignedCertWithKey": generateSelfSignedCertificateWithPEMKey,
	"genSignedCert":     generateSignedCertificate,
	"genSignedCertWithKey": generateSignedCertificateWithPEMKey,
	"encryptAES":        encryptAES,
	"decryptAES":        decryptAES,
	"randBytes":         randBytes,

	// UUIDs:
	"uuidv4": uuidv4,

	// SemVer:
	"semver":        semver,
	"semverCompare": semverCompare,

	// Flow Control:
	"fail": func(msg string) (string, error) { return "", errors.New(msg) },

	// Regex
	"regexMatch":                 regexMatch,
	"mustRegexMatch":             mustRegexMatch,
	"regexFindAll":               regexFindAll,
	"mustRegexFindAll":           mustRegexFindAll,
	"regexFind":                  regexFind,
	"mustRegexFind":              mustRegexFind,
	"regexReplaceAll":            regexReplaceAll,
	"mustRegexReplaceAll":        mustRegexReplaceAll,
	"regexReplaceAllLiteral":     regexReplaceAllLiteral,
	"mustRegexReplaceAllLiteral": mustRegexReplaceAllLiteral,
	"regexSplit":                 regexSplit,
	"mustRegexSplit":             mustRegexSplit,
	"regexQuoteMeta":             regexQuoteMeta,

	// URLs:
	"urlParse": urlParse,
	"urlJoin":  urlJoin,
}
   070701000000DF000081A4000000000000000000000001645E367C00002353000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/Masterminds/sprig/v3/list.go    package sprig

import (
	"fmt"
	"math"
	"reflect"
	"sort"
)

// Reflection is used in these functions so that slices and arrays of strings,
// ints, and other types not implementing []interface{} can be worked with.
// For example, this is useful if you need to work on the output of regexs.

func list(v ...interface{}) []interface{} {
	return v
}

func push(list interface{}, v interface{}) []interface{} {
	l, err := mustPush(list, v)
	if err != nil {
		panic(err)
	}

	return l
}

func mustPush(list interface{}, v interface{}) ([]interface{}, error) {
	tp := reflect.TypeOf(list).Kind()
	switch tp {
	case reflect.Slice, reflect.Array:
		l2 := reflect.ValueOf(list)

		l := l2.Len()
		nl := make([]interface{}, l)
		for i := 0; i < l; i++ {
			nl[i] = l2.Index(i).Interface()
		}

		return append(nl, v), nil

	default:
		return nil, fmt.Errorf("Cannot push on type %s", tp)
	}
}

func prepend(list interface{}, v interface{}) []interface{} {
	l, err := mustPrepend(list, v)
	if err != nil {
		panic(err)
	}

	return l
}

func mustPrepend(list interface{}, v interface{}) ([]interface{}, error) {
	//return append([]interface{}{v}, list...)

	tp := reflect.TypeOf(list).Kind()
	switch tp {
	case reflect.Slice, reflect.Array:
		l2 := reflect.ValueOf(list)

		l := l2.Len()
		nl := make([]interface{}, l)
		for i := 0; i < l; i++ {
			nl[i] = l2.Index(i).Interface()
		}

		return append([]interface{}{v}, nl...), nil

	default:
		return nil, fmt.Errorf("Cannot prepend on type %s", tp)
	}
}

func chunk(size int, list interface{}) [][]interface{} {
	l, err := mustChunk(size, list)
	if err != nil {
		panic(err)
	}

	return l
}

func mustChunk(size int, list interface{}) ([][]interface{}, error) {
	tp := reflect.TypeOf(list).Kind()
	switch tp {
	case reflect.Slice, reflect.Array:
		l2 := reflect.ValueOf(list)

		l := l2.Len()

		cs := int(math.Floor(float64(l-1)/float64(size)) + 1)
		nl := make([][]interface{}, cs)

		for i := 0; i < cs; i++ {
			clen := size
			if i == cs-1 {
				clen = int(math.Floor(math.Mod(float64(l), float64(size))))
				if clen == 0 {
					clen = size
				}
			}

			nl[i] = make([]interface{}, clen)

			for j := 0; j < clen; j++ {
				ix := i*size + j
				nl[i][j] = l2.Index(ix).Interface()
			}
		}

		return nl, nil

	default:
		return nil, fmt.Errorf("Cannot chunk type %s", tp)
	}
}

func last(list interface{}) interface{} {
	l, err := mustLast(list)
	if err != nil {
		panic(err)
	}

	return l
}

func mustLast(list interface{}) (interface{}, error) {
	tp := reflect.TypeOf(list).Kind()
	switch tp {
	case reflect.Slice, reflect.Array:
		l2 := reflect.ValueOf(list)

		l := l2.Len()
		if l == 0 {
			return nil, nil
		}

		return l2.Index(l - 1).Interface(), nil
	default:
		return nil, fmt.Errorf("Cannot find last on type %s", tp)
	}
}

func first(list interface{}) interface{} {
	l, err := mustFirst(list)
	if err != nil {
		panic(err)
	}

	return l
}

func mustFirst(list interface{}) (interface{}, error) {
	tp := reflect.TypeOf(list).Kind()
	switch tp {
	case reflect.Slice, reflect.Array:
		l2 := reflect.ValueOf(list)

		l := l2.Len()
		if l == 0 {
			return nil, nil
		}

		return l2.Index(0).Interface(), nil
	default:
		return nil, fmt.Errorf("Cannot find first on type %s", tp)
	}
}

func rest(list interface{}) []interface{} {
	l, err := mustRest(list)
	if err != nil {
		panic(err)
	}

	return l
}

func mustRest(list interface{}) ([]interface{}, error) {
	tp := reflect.TypeOf(list).Kind()
	switch tp {
	case reflect.Slice, reflect.Array:
		l2 := reflect.ValueOf(list)

		l := l2.Len()
		if l == 0 {
			return nil, nil
		}

		nl := make([]interface{}, l-1)
		for i := 1; i < l; i++ {
			nl[i-1] = l2.Index(i).Interface()
		}

		return nl, nil
	default:
		return nil, fmt.Errorf("Cannot find rest on type %s", tp)
	}
}

func initial(list interface{}) []interface{} {
	l, err := mustInitial(list)
	if err != nil {
		panic(err)
	}

	return l
}

func mustInitial(list interface{}) ([]interface{}, error) {
	tp := reflect.TypeOf(list).Kind()
	switch tp {
	case reflect.Slice, reflect.Array:
		l2 := reflect.ValueOf(list)

		l := l2.Len()
		if l == 0 {
			return nil, nil
		}

		nl := make([]interface{}, l-1)
		for i := 0; i < l-1; i++ {
			nl[i] = l2.Index(i).Interface()
		}

		return nl, nil
	default:
		return nil, fmt.Errorf("Cannot find initial on type %s", tp)
	}
}

func sortAlpha(list interface{}) []string {
	k := reflect.Indirect(reflect.ValueOf(list)).Kind()
	switch k {
	case reflect.Slice, reflect.Array:
		a := strslice(list)
		s := sort.StringSlice(a)
		s.Sort()
		return s
	}
	return []string{strval(list)}
}

func reverse(v interface{}) []interface{} {
	l, err := mustReverse(v)
	if err != nil {
		panic(err)
	}

	return l
}

func mustReverse(v interface{}) ([]interface{}, error) {
	tp := reflect.TypeOf(v).Kind()
	switch tp {
	case reflect.Slice, reflect.Array:
		l2 := reflect.ValueOf(v)

		l := l2.Len()
		// We do not sort in place because the incoming array should not be altered.
		nl := make([]interface{}, l)
		for i := 0; i < l; i++ {
			nl[l-i-1] = l2.Index(i).Interface()
		}

		return nl, nil
	default:
		return nil, fmt.Errorf("Cannot find reverse on type %s", tp)
	}
}

func compact(list interface{}) []interface{} {
	l, err := mustCompact(list)
	if err != nil {
		panic(err)
	}

	return l
}

func mustCompact(list interface{}) ([]interface{}, error) {
	tp := reflect.TypeOf(list).Kind()
	switch tp {
	case reflect.Slice, reflect.Array:
		l2 := reflect.ValueOf(list)

		l := l2.Len()
		nl := []interface{}{}
		var item interface{}
		for i := 0; i < l; i++ {
			item = l2.Index(i).Interface()
			if !empty(item) {
				nl = append(nl, item)
			}
		}

		return nl, nil
	default:
		return nil, fmt.Errorf("Cannot compact on type %s", tp)
	}
}

func uniq(list interface{}) []interface{} {
	l, err := mustUniq(list)
	if err != nil {
		panic(err)
	}

	return l
}

func mustUniq(list interface{}) ([]interface{}, error) {
	tp := reflect.TypeOf(list).Kind()
	switch tp {
	case reflect.Slice, reflect.Array:
		l2 := reflect.ValueOf(list)

		l := l2.Len()
		dest := []interface{}{}
		var item interface{}
		for i := 0; i < l; i++ {
			item = l2.Index(i).Interface()
			if !inList(dest, item) {
				dest = append(dest, item)
			}
		}

		return dest, nil
	default:
		return nil, fmt.Errorf("Cannot find uniq on type %s", tp)
	}
}

func inList(haystack []interface{}, needle interface{}) bool {
	for _, h := range haystack {
		if reflect.DeepEqual(needle, h) {
			return true
		}
	}
	return false
}

func without(list interface{}, omit ...interface{}) []interface{} {
	l, err := mustWithout(list, omit...)
	if err != nil {
		panic(err)
	}

	return l
}

func mustWithout(list interface{}, omit ...interface{}) ([]interface{}, error) {
	tp := reflect.TypeOf(list).Kind()
	switch tp {
	case reflect.Slice, reflect.Array:
		l2 := reflect.ValueOf(list)

		l := l2.Len()
		res := []interface{}{}
		var item interface{}
		for i := 0; i < l; i++ {
			item = l2.Index(i).Interface()
			if !inList(omit, item) {
				res = append(res, item)
			}
		}

		return res, nil
	default:
		return nil, fmt.Errorf("Cannot find without on type %s", tp)
	}
}

func has(needle interface{}, haystack interface{}) bool {
	l, err := mustHas(needle, haystack)
	if err != nil {
		panic(err)
	}

	return l
}

func mustHas(needle interface{}, haystack interface{}) (bool, error) {
	if haystack == nil {
		return false, nil
	}
	tp := reflect.TypeOf(haystack).Kind()
	switch tp {
	case reflect.Slice, reflect.Array:
		l2 := reflect.ValueOf(haystack)
		var item interface{}
		l := l2.Len()
		for i := 0; i < l; i++ {
			item = l2.Index(i).Interface()
			if reflect.DeepEqual(needle, item) {
				return true, nil
			}
		}

		return false, nil
	default:
		return false, fmt.Errorf("Cannot find has on type %s", tp)
	}
}

// $list := [1, 2, 3, 4, 5]
// slice $list     -> list[0:5] = list[:]
// slice $list 0 3 -> list[0:3] = list[:3]
// slice $list 3 5 -> list[3:5]
// slice $list 3   -> list[3:5] = list[3:]
func slice(list interface{}, indices ...interface{}) interface{} {
	l, err := mustSlice(list, indices...)
	if err != nil {
		panic(err)
	}

	return l
}

func mustSlice(list interface{}, indices ...interface{}) (interface{}, error) {
	tp := reflect.TypeOf(list).Kind()
	switch tp {
	case reflect.Slice, reflect.Array:
		l2 := reflect.ValueOf(list)

		l := l2.Len()
		if l == 0 {
			return nil, nil
		}

		var start, end int
		if len(indices) > 0 {
			start = toInt(indices[0])
		}
		if len(indices) < 2 {
			end = l
		} else {
			end = toInt(indices[1])
		}

		return l2.Slice(start, end).Interface(), nil
	default:
		return nil, fmt.Errorf("list should be type of slice or array but %s", tp)
	}
}

func concat(lists ...interface{}) interface{} {
	var res []interface{}
	for _, list := range lists {
		tp := reflect.TypeOf(list).Kind()
		switch tp {
		case reflect.Slice, reflect.Array:
			l2 := reflect.ValueOf(list)
			for i := 0; i < l2.Len(); i++ {
				res = append(res, l2.Index(i).Interface())
			}
		default:
			panic(fmt.Sprintf("Cannot concat type %s as list", tp))
		}
	}
	return res
}
 070701000000E0000081A4000000000000000000000001645E367C000000D6000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/Masterminds/sprig/v3/network.go package sprig

import (
	"math/rand"
	"net"
)

func getHostByName(name string) string {
	addrs, _ := net.LookupHost(name)
	//TODO: add error handing when release v3 comes out
	return addrs[rand.Intn(len(addrs))]
}
  070701000000E1000081A4000000000000000000000001645E367C00000D31000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/Masterminds/sprig/v3/numeric.go package sprig

import (
	"fmt"
	"math"
	"strconv"
	"strings"

	"github.com/spf13/cast"
	"github.com/shopspring/decimal"
)

// toFloat64 converts 64-bit floats
func toFloat64(v interface{}) float64 {
	return cast.ToFloat64(v)
}

func toInt(v interface{}) int {
	return cast.ToInt(v)
}

// toInt64 converts integer types to 64-bit integers
func toInt64(v interface{}) int64 {
	return cast.ToInt64(v)
}

func max(a interface{}, i ...interface{}) int64 {
	aa := toInt64(a)
	for _, b := range i {
		bb := toInt64(b)
		if bb > aa {
			aa = bb
		}
	}
	return aa
}

func maxf(a interface{}, i ...interface{}) float64 {
	aa := toFloat64(a)
	for _, b := range i {
		bb := toFloat64(b)
		aa = math.Max(aa, bb)
	}
	return aa
}

func min(a interface{}, i ...interface{}) int64 {
	aa := toInt64(a)
	for _, b := range i {
		bb := toInt64(b)
		if bb < aa {
			aa = bb
		}
	}
	return aa
}

func minf(a interface{}, i ...interface{}) float64 {
	aa := toFloat64(a)
	for _, b := range i {
		bb := toFloat64(b)
		aa = math.Min(aa, bb)
	}
	return aa
}

func until(count int) []int {
	step := 1
	if count < 0 {
		step = -1
	}
	return untilStep(0, count, step)
}

func untilStep(start, stop, step int) []int {
	v := []int{}

	if stop < start {
		if step >= 0 {
			return v
		}
		for i := start; i > stop; i += step {
			v = append(v, i)
		}
		return v
	}

	if step <= 0 {
		return v
	}
	for i := start; i < stop; i += step {
		v = append(v, i)
	}
	return v
}

func floor(a interface{}) float64 {
	aa := toFloat64(a)
	return math.Floor(aa)
}

func ceil(a interface{}) float64 {
	aa := toFloat64(a)
	return math.Ceil(aa)
}

func round(a interface{}, p int, rOpt ...float64) float64 {
	roundOn := .5
	if len(rOpt) > 0 {
		roundOn = rOpt[0]
	}
	val := toFloat64(a)
	places := toFloat64(p)

	var round float64
	pow := math.Pow(10, places)
	digit := pow * val
	_, div := math.Modf(digit)
	if div >= roundOn {
		round = math.Ceil(digit)
	} else {
		round = math.Floor(digit)
	}
	return round / pow
}

// converts unix octal to decimal
func toDecimal(v interface{}) int64 {
	result, err := strconv.ParseInt(fmt.Sprint(v), 8, 64)
	if err != nil {
		return 0
	}
	return result
}

func seq(params ...int) string {
	increment := 1
	switch len(params) {
	case 0:
		return ""
	case 1:
		start := 1
		end := params[0]
		if end < start {
			increment = -1
		}
		return intArrayToString(untilStep(start, end+increment, increment), " ")
	case 3:
		start := params[0]
		end := params[2]
		step := params[1]
		if end < start {
			increment = -1
			if step > 0 {
				return ""
			}
		}
		return intArrayToString(untilStep(start, end+increment, step), " ")
	case 2:
		start := params[0]
		end := params[1]
		step := 1
		if end < start {
			step = -1
		}
		return intArrayToString(untilStep(start, end+step, step), " ")
	default:
		return ""
	}
}

func intArrayToString(slice []int, delimeter string) string {
	return strings.Trim(strings.Join(strings.Fields(fmt.Sprint(slice)), delimeter), "[]")
}

// performs a float and subsequent decimal.Decimal conversion on inputs,
// and iterates through a and b executing the mathmetical operation f
func execDecimalOp(a interface{}, b []interface{}, f func(d1, d2 decimal.Decimal) decimal.Decimal) float64 {
	prt := decimal.NewFromFloat(toFloat64(a))
	for _, x := range b {
		dx := decimal.NewFromFloat(toFloat64(x))
		prt = f(prt, dx)
	}
	rslt, _ := prt.Float64()
	return rslt
}
   070701000000E2000081A4000000000000000000000001645E367C00000224000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/Masterminds/sprig/v3/reflect.go package sprig

import (
	"fmt"
	"reflect"
)

// typeIs returns true if the src is the type named in target.
func typeIs(target string, src interface{}) bool {
	return target == typeOf(src)
}

func typeIsLike(target string, src interface{}) bool {
	t := typeOf(src)
	return target == t || "*"+target == t
}

func typeOf(src interface{}) string {
	return fmt.Sprintf("%T", src)
}

func kindIs(target string, src interface{}) bool {
	return target == kindOf(src)
}

func kindOf(src interface{}) string {
	return reflect.ValueOf(src).Kind().String()
}
070701000000E3000081A4000000000000000000000001645E367C0000075A000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/Masterminds/sprig/v3/regex.go   package sprig

import (
	"regexp"
)

func regexMatch(regex string, s string) bool {
	match, _ := regexp.MatchString(regex, s)
	return match
}

func mustRegexMatch(regex string, s string) (bool, error) {
	return regexp.MatchString(regex, s)
}

func regexFindAll(regex string, s string, n int) []string {
	r := regexp.MustCompile(regex)
	return r.FindAllString(s, n)
}

func mustRegexFindAll(regex string, s string, n int) ([]string, error) {
	r, err := regexp.Compile(regex)
	if err != nil {
		return []string{}, err
	}
	return r.FindAllString(s, n), nil
}

func regexFind(regex string, s string) string {
	r := regexp.MustCompile(regex)
	return r.FindString(s)
}

func mustRegexFind(regex string, s string) (string, error) {
	r, err := regexp.Compile(regex)
	if err != nil {
		return "", err
	}
	return r.FindString(s), nil
}

func regexReplaceAll(regex string, s string, repl string) string {
	r := regexp.MustCompile(regex)
	return r.ReplaceAllString(s, repl)
}

func mustRegexReplaceAll(regex string, s string, repl string) (string, error) {
	r, err := regexp.Compile(regex)
	if err != nil {
		return "", err
	}
	return r.ReplaceAllString(s, repl), nil
}

func regexReplaceAllLiteral(regex string, s string, repl string) string {
	r := regexp.MustCompile(regex)
	return r.ReplaceAllLiteralString(s, repl)
}

func mustRegexReplaceAllLiteral(regex string, s string, repl string) (string, error) {
	r, err := regexp.Compile(regex)
	if err != nil {
		return "", err
	}
	return r.ReplaceAllLiteralString(s, repl), nil
}

func regexSplit(regex string, s string, n int) []string {
	r := regexp.MustCompile(regex)
	return r.Split(s, n)
}

func mustRegexSplit(regex string, s string, n int) ([]string, error) {
	r, err := regexp.Compile(regex)
	if err != nil {
		return []string{}, err
	}
	return r.Split(s, n), nil
}

func regexQuoteMeta(s string) string {
	return regexp.QuoteMeta(s)
}
  070701000000E4000081A4000000000000000000000001645E367C00000191000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/Masterminds/sprig/v3/semver.go  package sprig

import (
	sv2 "github.com/Masterminds/semver/v3"
)

func semverCompare(constraint, version string) (bool, error) {
	c, err := sv2.NewConstraint(constraint)
	if err != nil {
		return false, err
	}

	v, err := sv2.NewVersion(version)
	if err != nil {
		return false, err
	}

	return c.Check(v), nil
}

func semver(version string) (*sv2.Version, error) {
	return sv2.NewVersion(version)
}
   070701000000E5000081A4000000000000000000000001645E367C0000122C000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/Masterminds/sprig/v3/strings.go package sprig

import (
	"encoding/base32"
	"encoding/base64"
	"fmt"
	"reflect"
	"strconv"
	"strings"

	util "github.com/Masterminds/goutils"
)

func base64encode(v string) string {
	return base64.StdEncoding.EncodeToString([]byte(v))
}

func base64decode(v string) string {
	data, err := base64.StdEncoding.DecodeString(v)
	if err != nil {
		return err.Error()
	}
	return string(data)
}

func base32encode(v string) string {
	return base32.StdEncoding.EncodeToString([]byte(v))
}

func base32decode(v string) string {
	data, err := base32.StdEncoding.DecodeString(v)
	if err != nil {
		return err.Error()
	}
	return string(data)
}

func abbrev(width int, s string) string {
	if width < 4 {
		return s
	}
	r, _ := util.Abbreviate(s, width)
	return r
}

func abbrevboth(left, right int, s string) string {
	if right < 4 || left > 0 && right < 7 {
		return s
	}
	r, _ := util.AbbreviateFull(s, left, right)
	return r
}
func initials(s string) string {
	// Wrap this just to eliminate the var args, which templates don't do well.
	return util.Initials(s)
}

func randAlphaNumeric(count int) string {
	// It is not possible, it appears, to actually generate an error here.
	r, _ := util.CryptoRandomAlphaNumeric(count)
	return r
}

func randAlpha(count int) string {
	r, _ := util.CryptoRandomAlphabetic(count)
	return r
}

func randAscii(count int) string {
	r, _ := util.CryptoRandomAscii(count)
	return r
}

func randNumeric(count int) string {
	r, _ := util.CryptoRandomNumeric(count)
	return r
}

func untitle(str string) string {
	return util.Uncapitalize(str)
}

func quote(str ...interface{}) string {
	out := make([]string, 0, len(str))
	for _, s := range str {
		if s != nil {
			out = append(out, fmt.Sprintf("%q", strval(s)))
		}
	}
	return strings.Join(out, " ")
}

func squote(str ...interface{}) string {
	out := make([]string, 0, len(str))
	for _, s := range str {
		if s != nil {
			out = append(out, fmt.Sprintf("'%v'", s))
		}
	}
	return strings.Join(out, " ")
}

func cat(v ...interface{}) string {
	v = removeNilElements(v)
	r := strings.TrimSpace(strings.Repeat("%v ", len(v)))
	return fmt.Sprintf(r, v...)
}

func indent(spaces int, v string) string {
	pad := strings.Repeat(" ", spaces)
	return pad + strings.Replace(v, "\n", "\n"+pad, -1)
}

func nindent(spaces int, v string) string {
	return "\n" + indent(spaces, v)
}

func replace(old, new, src string) string {
	return strings.Replace(src, old, new, -1)
}

func plural(one, many string, count int) string {
	if count == 1 {
		return one
	}
	return many
}

func strslice(v interface{}) []string {
	switch v := v.(type) {
	case []string:
		return v
	case []interface{}:
		b := make([]string, 0, len(v))
		for _, s := range v {
			if s != nil {
				b = append(b, strval(s))
			}
		}
		return b
	default:
		val := reflect.ValueOf(v)
		switch val.Kind() {
		case reflect.Array, reflect.Slice:
			l := val.Len()
			b := make([]string, 0, l)
			for i := 0; i < l; i++ {
				value := val.Index(i).Interface()
				if value != nil {
					b = append(b, strval(value))
				}
			}
			return b
		default:
			if v == nil {
				return []string{}
			}

			return []string{strval(v)}
		}
	}
}

func removeNilElements(v []interface{}) []interface{} {
	newSlice := make([]interface{}, 0, len(v))
	for _, i := range v {
		if i != nil {
			newSlice = append(newSlice, i)
		}
	}
	return newSlice
}

func strval(v interface{}) string {
	switch v := v.(type) {
	case string:
		return v
	case []byte:
		return string(v)
	case error:
		return v.Error()
	case fmt.Stringer:
		return v.String()
	default:
		return fmt.Sprintf("%v", v)
	}
}

func trunc(c int, s string) string {
	if c < 0 && len(s)+c > 0 {
		return s[len(s)+c:]
	}
	if c >= 0 && len(s) > c {
		return s[:c]
	}
	return s
}

func join(sep string, v interface{}) string {
	return strings.Join(strslice(v), sep)
}

func split(sep, orig string) map[string]string {
	parts := strings.Split(orig, sep)
	res := make(map[string]string, len(parts))
	for i, v := range parts {
		res["_"+strconv.Itoa(i)] = v
	}
	return res
}

func splitn(sep string, n int, orig string) map[string]string {
	parts := strings.SplitN(orig, sep, n)
	res := make(map[string]string, len(parts))
	for i, v := range parts {
		res["_"+strconv.Itoa(i)] = v
	}
	return res
}

// substring creates a substring of the given string.
//
// If start is < 0, this calls string[:end].
//
// If start is >= 0 and end < 0 or end bigger than s length, this calls string[start:]
//
// Otherwise, this calls string[start, end].
func substring(start, end int, s string) string {
	if start < 0 {
		return s[:end]
	}
	if end < 0 || end > len(s) {
		return s[start:]
	}
	return s[start:end]
}
070701000000E6000081A4000000000000000000000001645E367C0000067A000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/Masterminds/sprig/v3/url.go package sprig

import (
	"fmt"
	"net/url"
	"reflect"
)

func dictGetOrEmpty(dict map[string]interface{}, key string) string {
	value, ok := dict[key]
	if !ok {
		return ""
	}
	tp := reflect.TypeOf(value).Kind()
	if tp != reflect.String {
		panic(fmt.Sprintf("unable to parse %s key, must be of type string, but %s found", key, tp.String()))
	}
	return reflect.ValueOf(value).String()
}

// parses given URL to return dict object
func urlParse(v string) map[string]interface{} {
	dict := map[string]interface{}{}
	parsedURL, err := url.Parse(v)
	if err != nil {
		panic(fmt.Sprintf("unable to parse url: %s", err))
	}
	dict["scheme"] = parsedURL.Scheme
	dict["host"] = parsedURL.Host
	dict["hostname"] = parsedURL.Hostname()
	dict["path"] = parsedURL.Path
	dict["query"] = parsedURL.RawQuery
	dict["opaque"] = parsedURL.Opaque
	dict["fragment"] = parsedURL.Fragment
	if parsedURL.User != nil {
		dict["userinfo"] = parsedURL.User.String()
	} else {
		dict["userinfo"] = ""
	}

	return dict
}

// join given dict to URL string
func urlJoin(d map[string]interface{}) string {
	resURL := url.URL{
		Scheme:   dictGetOrEmpty(d, "scheme"),
		Host:     dictGetOrEmpty(d, "host"),
		Path:     dictGetOrEmpty(d, "path"),
		RawQuery: dictGetOrEmpty(d, "query"),
		Opaque:   dictGetOrEmpty(d, "opaque"),
		Fragment: dictGetOrEmpty(d, "fragment"),
	}
	userinfo := dictGetOrEmpty(d, "userinfo")
	var user *url.Userinfo
	if userinfo != "" {
		tempURL, err := url.Parse(fmt.Sprintf("proto://%s@host", userinfo))
		if err != nil {
			panic(fmt.Sprintf("unable to parse userinfo in dict: %s", err))
		}
		user = tempURL.User
	}

	resURL.User = user
	return resURL.String()
}
  070701000000E7000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000003000000000elemental-cli-0.3.1/vendor/github.com/Microsoft   070701000000E8000041ED000000000000000000000005645E367C00000000000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio  070701000000E9000081A4000000000000000000000001645E367C00000012000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/.gitattributes   * text=auto eol=lf  070701000000EA000081A4000000000000000000000001645E367C00000049000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/.gitignore   .vscode/

*.exe

# testing
testdata

# go workspaces
go.work
go.work.sum
   070701000000EB000081A4000000000000000000000001645E367C0000109E000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/.golangci.yml    run:
  skip-dirs:
    - pkg/etw/sample

linters:
  enable:
    # style
    - containedctx # struct contains a context
    - dupl # duplicate code
    - errname # erorrs are named correctly
    - nolintlint # "//nolint" directives are properly explained
    - revive # golint replacement
    - unconvert # unnecessary conversions
    - wastedassign

    # bugs, performance, unused, etc ...
    - contextcheck # function uses a non-inherited context
    - errorlint # errors not wrapped for 1.13
    - exhaustive # check exhaustiveness of enum switch statements
    - gofmt # files are gofmt'ed
    - gosec # security
    - nilerr # returns nil even with non-nil error
    - unparam # unused function params

issues:
  exclude-rules:
    # err is very often shadowed in nested scopes
    - linters:
        - govet
      text: '^shadow: declaration of "err" shadows declaration'

    # ignore long lines for skip autogen directives
    - linters:
        - revive
      text: "^line-length-limit: "
      source: "^//(go:generate|sys) "

    #TODO: remove after upgrading to go1.18
    # ignore comment spacing for nolint and sys directives
    - linters:
        - revive
      text: "^comment-spacings: no space between comment delimiter and comment text"
      source: "//(cspell:|nolint:|sys |todo)"

    # not on go 1.18 yet, so no any
    - linters:
        - revive
      text: "^use-any: since GO 1.18 'interface{}' can be replaced by 'any'"

    # allow unjustified ignores of error checks in defer statements
    - linters:
        - nolintlint
      text: "^directive `//nolint:errcheck` should provide explanation"
      source: '^\s*defer '

    # allow unjustified ignores of error lints for io.EOF
    - linters:
        - nolintlint
      text: "^directive `//nolint:errorlint` should provide explanation"
      source: '[=|!]= io.EOF'


linters-settings:
  exhaustive:
    default-signifies-exhaustive: true
  govet:
    enable-all: true
    disable:
      # struct order is often for Win32 compat
      # also, ignore pointer bytes/GC issues for now until performance becomes an issue
      - fieldalignment
    check-shadowing: true
  nolintlint:
    allow-leading-space: false
    require-explanation: true
    require-specific: true
  revive:
    # revive is more configurable than static check, so likely the preferred alternative to static-check
    # (once the perf issue is solved: https://github.com/golangci/golangci-lint/issues/2997)
    enable-all-rules:
      true
      # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md
    rules:
      # rules with required arguments
      - name: argument-limit
        disabled: true
      - name: banned-characters
        disabled: true
      - name: cognitive-complexity
        disabled: true
      - name: cyclomatic
        disabled: true
      - name: file-header
        disabled: true
      - name: function-length
        disabled: true
      - name: function-result-limit
        disabled: true
      - name: max-public-structs
        disabled: true
      # geneally annoying rules
      - name: add-constant # complains about any and all strings and integers
        disabled: true
      - name: confusing-naming # we frequently use "Foo()" and "foo()" together
        disabled: true
      - name: flag-parameter # excessive, and a common idiom we use
        disabled: true
      - name: unhandled-error # warns over common fmt.Print* and io.Close; rely on errcheck instead
        disabled: true
      # general config
      - name: line-length-limit
        arguments:
          - 140
      - name: var-naming
        arguments:
          - []
          - - CID
            - CRI
            - CTRD
            - DACL
            - DLL
            - DOS
            - ETW
            - FSCTL
            - GCS
            - GMSA
            - HCS
            - HV
            - IO
            - LCOW
            - LDAP
            - LPAC
            - LTSC
            - MMIO
            - NT
            - OCI
            - PMEM
            - PWSH
            - RX
            - SACl
            - SID
            - SMB
            - TX
            - VHD
            - VHDX
            - VMID
            - VPCI
            - WCOW
            - WIM
  070701000000EC000081A4000000000000000000000001645E367C0000001D000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/CODEOWNERS     * @microsoft/containerplat
   070701000000ED000081A4000000000000000000000001645E367C00000435000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/LICENSE  The MIT License (MIT)

Copyright (c) 2015 Microsoft

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

   070701000000EE000081A4000000000000000000000001645E367C00000EBB000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/README.md    # go-winio [![Build Status](https://github.com/microsoft/go-winio/actions/workflows/ci.yml/badge.svg)](https://github.com/microsoft/go-winio/actions/workflows/ci.yml)

This repository contains utilities for efficiently performing Win32 IO operations in
Go. Currently, this is focused on accessing named pipes and other file handles, and
for using named pipes as a net transport.

This code relies on IO completion ports to avoid blocking IO on system threads, allowing Go
to reuse the thread to schedule another goroutine. This limits support to Windows Vista and
newer operating systems. This is similar to the implementation of network sockets in Go's net
package.

Please see the LICENSE file for licensing information.

## Contributing

This project welcomes contributions and suggestions.
Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that
you have the right to, and actually do, grant us the rights to use your contribution.
For details, visit [Microsoft CLA](https://cla.microsoft.com).

When you submit a pull request, a CLA-bot will automatically determine whether you need to
provide a CLA and decorate the PR appropriately (e.g., label, comment).
Simply follow the instructions provided by the bot.
You will only need to do this once across all repos using our CLA.

Additionally, the pull request pipeline requires the following steps to be performed before
mergining.

### Code Sign-Off

We require that contributors sign their commits using [`git commit --signoff`][git-commit-s]
to certify they either authored the work themselves or otherwise have permission to use it in this project.

A range of commits can be signed off using [`git rebase --signoff`][git-rebase-s].

Please see [the developer certificate](https://developercertificate.org) for more info,
as well as to make sure that you can attest to the rules listed.
Our CI uses the DCO Github app to ensure that all commits in a given PR are signed-off.

### Linting

Code must pass a linting stage, which uses [`golangci-lint`][lint].
The linting settings are stored in [`.golangci.yaml`](./.golangci.yaml), and can be run
automatically with VSCode by adding the following to your workspace or folder settings:

```json
    "go.lintTool": "golangci-lint",
    "go.lintOnSave": "package",
```

Additional editor [integrations options are also available][lint-ide].

Alternatively, `golangci-lint` can be [installed locally][lint-install] and run from the repo root:

```shell
# use . or specify a path to only lint a package
# to show all lint errors, use flags "--max-issues-per-linter=0 --max-same-issues=0"
> golangci-lint run ./...
```

### Go Generate

The pipeline checks that auto-generated code, via `go generate`, are up to date.

This can be done for the entire repo:

```shell
> go generate ./...
```

## Code of Conduct

This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or
contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.

## Special Thanks

Thanks to [natefinch][natefinch] for the inspiration for this library.
See [npipe](https://github.com/natefinch/npipe) for another named pipe implementation.

[lint]: https://golangci-lint.run/
[lint-ide]: https://golangci-lint.run/usage/integrations/#editor-integration
[lint-install]: https://golangci-lint.run/usage/install/#local-installation

[git-commit-s]: https://git-scm.com/docs/git-commit#Documentation/git-commit.txt--s
[git-rebase-s]: https://git-scm.com/docs/git-rebase#Documentation/git-rebase.txt---signoff

[natefinch]: https://github.com/natefinch
 070701000000EF000081A4000000000000000000000001645E367C00000AC5000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/SECURITY.md  <!-- BEGIN MICROSOFT SECURITY.MD V0.0.7 BLOCK -->

## Security

Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/).

If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below.

## Reporting Security Issues

**Please do not report security vulnerabilities through public GitHub issues.**

Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report).

If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com).  If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey).

You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc). 

Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:

  * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
  * Full paths of source file(s) related to the manifestation of the issue
  * The location of the affected source code (tag/branch/commit or direct URL)
  * Any special configuration required to reproduce the issue
  * Step-by-step instructions to reproduce the issue
  * Proof-of-concept or exploit code (if possible)
  * Impact of the issue, including how an attacker might exploit the issue

This information will help us triage your report more quickly.

If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs.

## Preferred Languages

We prefer all communications to be in English.

## Policy

Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd).

<!-- END MICROSOFT SECURITY.MD BLOCK -->
   070701000000F0000081A4000000000000000000000001645E367C00002093000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/backup.go    //go:build windows
// +build windows

package winio

import (
	"encoding/binary"
	"errors"
	"fmt"
	"io"
	"os"
	"runtime"
	"syscall"
	"unicode/utf16"

	"golang.org/x/sys/windows"
)

//sys backupRead(h syscall.Handle, b []byte, bytesRead *uint32, abort bool, processSecurity bool, context *uintptr) (err error) = BackupRead
//sys backupWrite(h syscall.Handle, b []byte, bytesWritten *uint32, abort bool, processSecurity bool, context *uintptr) (err error) = BackupWrite

const (
	BackupData = uint32(iota + 1)
	BackupEaData
	BackupSecurity
	BackupAlternateData
	BackupLink
	BackupPropertyData
	BackupObjectId //revive:disable-line:var-naming ID, not Id
	BackupReparseData
	BackupSparseBlock
	BackupTxfsData
)

const (
	StreamSparseAttributes = uint32(8)
)

//nolint:revive // var-naming: ALL_CAPS
const (
	WRITE_DAC              = windows.WRITE_DAC
	WRITE_OWNER            = windows.WRITE_OWNER
	ACCESS_SYSTEM_SECURITY = windows.ACCESS_SYSTEM_SECURITY
)

// BackupHeader represents a backup stream of a file.
type BackupHeader struct {
	//revive:disable-next-line:var-naming ID, not Id
	Id         uint32 // The backup stream ID
	Attributes uint32 // Stream attributes
	Size       int64  // The size of the stream in bytes
	Name       string // The name of the stream (for BackupAlternateData only).
	Offset     int64  // The offset of the stream in the file (for BackupSparseBlock only).
}

type win32StreamID struct {
	StreamID   uint32
	Attributes uint32
	Size       uint64
	NameSize   uint32
}

// BackupStreamReader reads from a stream produced by the BackupRead Win32 API and produces a series
// of BackupHeader values.
type BackupStreamReader struct {
	r         io.Reader
	bytesLeft int64
}

// NewBackupStreamReader produces a BackupStreamReader from any io.Reader.
func NewBackupStreamReader(r io.Reader) *BackupStreamReader {
	return &BackupStreamReader{r, 0}
}

// Next returns the next backup stream and prepares for calls to Read(). It skips the remainder of the current stream if
// it was not completely read.
func (r *BackupStreamReader) Next() (*BackupHeader, error) {
	if r.bytesLeft > 0 { //nolint:nestif // todo: flatten this
		if s, ok := r.r.(io.Seeker); ok {
			// Make sure Seek on io.SeekCurrent sometimes succeeds
			// before trying the actual seek.
			if _, err := s.Seek(0, io.SeekCurrent); err == nil {
				if _, err = s.Seek(r.bytesLeft, io.SeekCurrent); err != nil {
					return nil, err
				}
				r.bytesLeft = 0
			}
		}
		if _, err := io.Copy(io.Discard, r); err != nil {
			return nil, err
		}
	}
	var wsi win32StreamID
	if err := binary.Read(r.r, binary.LittleEndian, &wsi); err != nil {
		return nil, err
	}
	hdr := &BackupHeader{
		Id:         wsi.StreamID,
		Attributes: wsi.Attributes,
		Size:       int64(wsi.Size),
	}
	if wsi.NameSize != 0 {
		name := make([]uint16, int(wsi.NameSize/2))
		if err := binary.Read(r.r, binary.LittleEndian, name); err != nil {
			return nil, err
		}
		hdr.Name = syscall.UTF16ToString(name)
	}
	if wsi.StreamID == BackupSparseBlock {
		if err := binary.Read(r.r, binary.LittleEndian, &hdr.Offset); err != nil {
			return nil, err
		}
		hdr.Size -= 8
	}
	r.bytesLeft = hdr.Size
	return hdr, nil
}

// Read reads from the current backup stream.
func (r *BackupStreamReader) Read(b []byte) (int, error) {
	if r.bytesLeft == 0 {
		return 0, io.EOF
	}
	if int64(len(b)) > r.bytesLeft {
		b = b[:r.bytesLeft]
	}
	n, err := r.r.Read(b)
	r.bytesLeft -= int64(n)
	if err == io.EOF {
		err = io.ErrUnexpectedEOF
	} else if r.bytesLeft == 0 && err == nil {
		err = io.EOF
	}
	return n, err
}

// BackupStreamWriter writes a stream compatible with the BackupWrite Win32 API.
type BackupStreamWriter struct {
	w         io.Writer
	bytesLeft int64
}

// NewBackupStreamWriter produces a BackupStreamWriter on top of an io.Writer.
func NewBackupStreamWriter(w io.Writer) *BackupStreamWriter {
	return &BackupStreamWriter{w, 0}
}

// WriteHeader writes the next backup stream header and prepares for calls to Write().
func (w *BackupStreamWriter) WriteHeader(hdr *BackupHeader) error {
	if w.bytesLeft != 0 {
		return fmt.Errorf("missing %d bytes", w.bytesLeft)
	}
	name := utf16.Encode([]rune(hdr.Name))
	wsi := win32StreamID{
		StreamID:   hdr.Id,
		Attributes: hdr.Attributes,
		Size:       uint64(hdr.Size),
		NameSize:   uint32(len(name) * 2),
	}
	if hdr.Id == BackupSparseBlock {
		// Include space for the int64 block offset
		wsi.Size += 8
	}
	if err := binary.Write(w.w, binary.LittleEndian, &wsi); err != nil {
		return err
	}
	if len(name) != 0 {
		if err := binary.Write(w.w, binary.LittleEndian, name); err != nil {
			return err
		}
	}
	if hdr.Id == BackupSparseBlock {
		if err := binary.Write(w.w, binary.LittleEndian, hdr.Offset); err != nil {
			return err
		}
	}
	w.bytesLeft = hdr.Size
	return nil
}

// Write writes to the current backup stream.
func (w *BackupStreamWriter) Write(b []byte) (int, error) {
	if w.bytesLeft < int64(len(b)) {
		return 0, fmt.Errorf("too many bytes by %d", int64(len(b))-w.bytesLeft)
	}
	n, err := w.w.Write(b)
	w.bytesLeft -= int64(n)
	return n, err
}

// BackupFileReader provides an io.ReadCloser interface on top of the BackupRead Win32 API.
type BackupFileReader struct {
	f               *os.File
	includeSecurity bool
	ctx             uintptr
}

// NewBackupFileReader returns a new BackupFileReader from a file handle. If includeSecurity is true,
// Read will attempt to read the security descriptor of the file.
func NewBackupFileReader(f *os.File, includeSecurity bool) *BackupFileReader {
	r := &BackupFileReader{f, includeSecurity, 0}
	return r
}

// Read reads a backup stream from the file by calling the Win32 API BackupRead().
func (r *BackupFileReader) Read(b []byte) (int, error) {
	var bytesRead uint32
	err := backupRead(syscall.Handle(r.f.Fd()), b, &bytesRead, false, r.includeSecurity, &r.ctx)
	if err != nil {
		return 0, &os.PathError{Op: "BackupRead", Path: r.f.Name(), Err: err}
	}
	runtime.KeepAlive(r.f)
	if bytesRead == 0 {
		return 0, io.EOF
	}
	return int(bytesRead), nil
}

// Close frees Win32 resources associated with the BackupFileReader. It does not close
// the underlying file.
func (r *BackupFileReader) Close() error {
	if r.ctx != 0 {
		_ = backupRead(syscall.Handle(r.f.Fd()), nil, nil, true, false, &r.ctx)
		runtime.KeepAlive(r.f)
		r.ctx = 0
	}
	return nil
}

// BackupFileWriter provides an io.WriteCloser interface on top of the BackupWrite Win32 API.
type BackupFileWriter struct {
	f               *os.File
	includeSecurity bool
	ctx             uintptr
}

// NewBackupFileWriter returns a new BackupFileWriter from a file handle. If includeSecurity is true,
// Write() will attempt to restore the security descriptor from the stream.
func NewBackupFileWriter(f *os.File, includeSecurity bool) *BackupFileWriter {
	w := &BackupFileWriter{f, includeSecurity, 0}
	return w
}

// Write restores a portion of the file using the provided backup stream.
func (w *BackupFileWriter) Write(b []byte) (int, error) {
	var bytesWritten uint32
	err := backupWrite(syscall.Handle(w.f.Fd()), b, &bytesWritten, false, w.includeSecurity, &w.ctx)
	if err != nil {
		return 0, &os.PathError{Op: "BackupWrite", Path: w.f.Name(), Err: err}
	}
	runtime.KeepAlive(w.f)
	if int(bytesWritten) != len(b) {
		return int(bytesWritten), errors.New("not all bytes could be written")
	}
	return len(b), nil
}

// Close frees Win32 resources associated with the BackupFileWriter. It does not
// close the underlying file.
func (w *BackupFileWriter) Close() error {
	if w.ctx != 0 {
		_ = backupWrite(syscall.Handle(w.f.Fd()), nil, nil, true, false, &w.ctx)
		runtime.KeepAlive(w.f)
		w.ctx = 0
	}
	return nil
}

// OpenForBackup opens a file or directory, potentially skipping access checks if the backup
// or restore privileges have been acquired.
//
// If the file opened was a directory, it cannot be used with Readdir().
func OpenForBackup(path string, access uint32, share uint32, createmode uint32) (*os.File, error) {
	winPath, err := syscall.UTF16FromString(path)
	if err != nil {
		return nil, err
	}
	h, err := syscall.CreateFile(&winPath[0],
		access,
		share,
		nil,
		createmode,
		syscall.FILE_FLAG_BACKUP_SEMANTICS|syscall.FILE_FLAG_OPEN_REPARSE_POINT,
		0)
	if err != nil {
		err = &os.PathError{Op: "open", Path: path, Err: err}
		return nil, err
	}
	return os.NewFile(uintptr(h), path), nil
}
 070701000000F1000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/backuptar    070701000000F2000081A4000000000000000000000001645E367C00000056000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/backuptar/doc.go // This file only exists to allow go get on non-Windows platforms.

package backuptar
  070701000000F3000081A4000000000000000000000001645E367C0000081A000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/backuptar/strconv.go //go:build windows

package backuptar

import (
	"archive/tar"
	"fmt"
	"strconv"
	"strings"
	"time"
)

// Functions copied from https://github.com/golang/go/blob/master/src/archive/tar/strconv.go
// as we need to manage the LIBARCHIVE.creationtime PAXRecord manually.
// Idea taken from containerd which did the same thing.

// parsePAXTime takes a string of the form %d.%d as described in the PAX
// specification. Note that this implementation allows for negative timestamps,
// which is allowed for by the PAX specification, but not always portable.
func parsePAXTime(s string) (time.Time, error) {
	const maxNanoSecondDigits = 9

	// Split string into seconds and sub-seconds parts.
	ss, sn := s, ""
	if pos := strings.IndexByte(s, '.'); pos >= 0 {
		ss, sn = s[:pos], s[pos+1:]
	}

	// Parse the seconds.
	secs, err := strconv.ParseInt(ss, 10, 64)
	if err != nil {
		return time.Time{}, tar.ErrHeader
	}
	if len(sn) == 0 {
		return time.Unix(secs, 0), nil // No sub-second values
	}

	// Parse the nanoseconds.
	if strings.Trim(sn, "0123456789") != "" {
		return time.Time{}, tar.ErrHeader
	}
	if len(sn) < maxNanoSecondDigits {
		sn += strings.Repeat("0", maxNanoSecondDigits-len(sn)) // Right pad
	} else {
		sn = sn[:maxNanoSecondDigits] // Right truncate
	}
	nsecs, _ := strconv.ParseInt(sn, 10, 64) // Must succeed
	if len(ss) > 0 && ss[0] == '-' {
		return time.Unix(secs, -1*nsecs), nil // Negative correction
	}
	return time.Unix(secs, nsecs), nil
}

// formatPAXTime converts ts into a time of the form %d.%d as described in the
// PAX specification. This function is capable of negative timestamps.
func formatPAXTime(ts time.Time) (s string) {
	secs, nsecs := ts.Unix(), ts.Nanosecond()
	if nsecs == 0 {
		return strconv.FormatInt(secs, 10)
	}

	// If seconds is negative, then perform correction.
	sign := ""
	if secs < 0 {
		sign = "-"             // Remember sign
		secs = -(secs + 1)     // Add a second to secs
		nsecs = -(nsecs - 1e9) // Take that second away from nsecs
	}
	return strings.TrimRight(fmt.Sprintf("%s%d.%09d", sign, secs, nsecs), "0")
}
  070701000000F4000081A4000000000000000000000001645E367C00003ED0000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/backuptar/tar.go //go:build windows
// +build windows

package backuptar

import (
	"archive/tar"
	"encoding/base64"
	"fmt"
	"io"
	"path/filepath"
	"strconv"
	"strings"
	"syscall"
	"time"

	"github.com/Microsoft/go-winio"
	"golang.org/x/sys/windows"
)

//nolint:deadcode,varcheck // keep unused constants for potential future use
const (
	cISUID  = 0004000 // Set uid
	cISGID  = 0002000 // Set gid
	cISVTX  = 0001000 // Save text (sticky bit)
	cISDIR  = 0040000 // Directory
	cISFIFO = 0010000 // FIFO
	cISREG  = 0100000 // Regular file
	cISLNK  = 0120000 // Symbolic link
	cISBLK  = 0060000 // Block special file
	cISCHR  = 0020000 // Character special file
	cISSOCK = 0140000 // Socket
)

const (
	hdrFileAttributes        = "MSWINDOWS.fileattr"
	hdrSecurityDescriptor    = "MSWINDOWS.sd"
	hdrRawSecurityDescriptor = "MSWINDOWS.rawsd"
	hdrMountPoint            = "MSWINDOWS.mountpoint"
	hdrEaPrefix              = "MSWINDOWS.xattr."

	hdrCreationTime = "LIBARCHIVE.creationtime"
)

// zeroReader is an io.Reader that always returns 0s.
type zeroReader struct{}

func (zeroReader) Read(b []byte) (int, error) {
	for i := range b {
		b[i] = 0
	}
	return len(b), nil
}

func copySparse(t *tar.Writer, br *winio.BackupStreamReader) error {
	curOffset := int64(0)
	for {
		bhdr, err := br.Next()
		if err == io.EOF { //nolint:errorlint
			err = io.ErrUnexpectedEOF
		}
		if err != nil {
			return err
		}
		if bhdr.Id != winio.BackupSparseBlock {
			return fmt.Errorf("unexpected stream %d", bhdr.Id)
		}

		// We can't seek backwards, since we have already written that data to the tar.Writer.
		if bhdr.Offset < curOffset {
			return fmt.Errorf("cannot seek back from %d to %d", curOffset, bhdr.Offset)
		}
		// archive/tar does not support writing sparse files
		// so just write zeroes to catch up to the current offset.
		if _, err = io.CopyN(t, zeroReader{}, bhdr.Offset-curOffset); err != nil {
			return fmt.Errorf("seek to offset %d: %w", bhdr.Offset, err)
		}
		if bhdr.Size == 0 {
			// A sparse block with size = 0 is used to mark the end of the sparse blocks.
			break
		}
		n, err := io.Copy(t, br)
		if err != nil {
			return err
		}
		if n != bhdr.Size {
			return fmt.Errorf("copied %d bytes instead of %d at offset %d", n, bhdr.Size, bhdr.Offset)
		}
		curOffset = bhdr.Offset + n
	}
	return nil
}

// BasicInfoHeader creates a tar header from basic file information.
func BasicInfoHeader(name string, size int64, fileInfo *winio.FileBasicInfo) *tar.Header {
	hdr := &tar.Header{
		Format:     tar.FormatPAX,
		Name:       filepath.ToSlash(name),
		Size:       size,
		Typeflag:   tar.TypeReg,
		ModTime:    time.Unix(0, fileInfo.LastWriteTime.Nanoseconds()),
		ChangeTime: time.Unix(0, fileInfo.ChangeTime.Nanoseconds()),
		AccessTime: time.Unix(0, fileInfo.LastAccessTime.Nanoseconds()),
		PAXRecords: make(map[string]string),
	}
	hdr.PAXRecords[hdrFileAttributes] = fmt.Sprintf("%d", fileInfo.FileAttributes)
	hdr.PAXRecords[hdrCreationTime] = formatPAXTime(time.Unix(0, fileInfo.CreationTime.Nanoseconds()))

	if (fileInfo.FileAttributes & syscall.FILE_ATTRIBUTE_DIRECTORY) != 0 {
		hdr.Mode |= cISDIR
		hdr.Size = 0
		hdr.Typeflag = tar.TypeDir
	}
	return hdr
}

// SecurityDescriptorFromTarHeader reads the SDDL associated with the header of the current file
// from the tar header and returns the security descriptor into a byte slice.
func SecurityDescriptorFromTarHeader(hdr *tar.Header) ([]byte, error) {
	if sdraw, ok := hdr.PAXRecords[hdrRawSecurityDescriptor]; ok {
		sd, err := base64.StdEncoding.DecodeString(sdraw)
		if err != nil {
			// Not returning sd as-is in the error-case, as base64.DecodeString
			// may return partially decoded data (not nil or empty slice) in case
			// of a failure: https://github.com/golang/go/blob/go1.17.7/src/encoding/base64/base64.go#L382-L387
			return nil, err
		}
		return sd, nil
	}
	// Maintaining old SDDL-based behavior for backward compatibility. All new
	// tar headers written by this library will have raw binary for the security
	// descriptor.
	if sddl, ok := hdr.PAXRecords[hdrSecurityDescriptor]; ok {
		return winio.SddlToSecurityDescriptor(sddl)
	}
	return nil, nil
}

// ExtendedAttributesFromTarHeader reads the EAs associated with the header of the
// current file from the tar header and returns it as a byte slice.
func ExtendedAttributesFromTarHeader(hdr *tar.Header) ([]byte, error) {
	var eas []winio.ExtendedAttribute //nolint:prealloc // len(eas) <= len(hdr.PAXRecords); prealloc is wasteful
	for k, v := range hdr.PAXRecords {
		if !strings.HasPrefix(k, hdrEaPrefix) {
			continue
		}
		data, err := base64.StdEncoding.DecodeString(v)
		if err != nil {
			return nil, err
		}
		eas = append(eas, winio.ExtendedAttribute{
			Name:  k[len(hdrEaPrefix):],
			Value: data,
		})
	}
	var eaData []byte
	var err error
	if len(eas) != 0 {
		eaData, err = winio.EncodeExtendedAttributes(eas)
		if err != nil {
			return nil, err
		}
	}
	return eaData, nil
}

// EncodeReparsePointFromTarHeader reads the ReparsePoint structure from the tar header
// and encodes it into a byte slice. The file for which this function is called must be a
// symlink.
func EncodeReparsePointFromTarHeader(hdr *tar.Header) []byte {
	_, isMountPoint := hdr.PAXRecords[hdrMountPoint]
	rp := winio.ReparsePoint{
		Target:       filepath.FromSlash(hdr.Linkname),
		IsMountPoint: isMountPoint,
	}
	return winio.EncodeReparsePoint(&rp)
}

// WriteTarFileFromBackupStream writes a file to a tar writer using data from a Win32 backup stream.
//
// This encodes Win32 metadata as tar pax vendor extensions starting with MSWINDOWS.
//
// The additional Win32 metadata is:
//
//   - MSWINDOWS.fileattr: The Win32 file attributes, as a decimal value
//   - MSWINDOWS.rawsd: The Win32 security descriptor, in raw binary format
//   - MSWINDOWS.mountpoint: If present, this is a mount point and not a symlink, even though the type is '2' (symlink)
func WriteTarFileFromBackupStream(t *tar.Writer, r io.Reader, name string, size int64, fileInfo *winio.FileBasicInfo) error {
	name = filepath.ToSlash(name)
	hdr := BasicInfoHeader(name, size, fileInfo)

	// If r can be seeked, then this function is two-pass: pass 1 collects the
	// tar header data, and pass 2 copies the data stream. If r cannot be
	// seeked, then some header data (in particular EAs) will be silently lost.
	var (
		restartPos int64
		err        error
	)
	sr, readTwice := r.(io.Seeker)
	if readTwice {
		if restartPos, err = sr.Seek(0, io.SeekCurrent); err != nil {
			readTwice = false
		}
	}

	br := winio.NewBackupStreamReader(r)
	var dataHdr *winio.BackupHeader
	for dataHdr == nil {
		bhdr, err := br.Next()
		if err == io.EOF { //nolint:errorlint
			break
		}
		if err != nil {
			return err
		}
		switch bhdr.Id {
		case winio.BackupData:
			hdr.Mode |= cISREG
			if !readTwice {
				dataHdr = bhdr
			}
		case winio.BackupSecurity:
			sd, err := io.ReadAll(br)
			if err != nil {
				return err
			}
			hdr.PAXRecords[hdrRawSecurityDescriptor] = base64.StdEncoding.EncodeToString(sd)

		case winio.BackupReparseData:
			hdr.Mode |= cISLNK
			hdr.Typeflag = tar.TypeSymlink
			reparseBuffer, _ := io.ReadAll(br)
			rp, err := winio.DecodeReparsePoint(reparseBuffer)
			if err != nil {
				return err
			}
			if rp.IsMountPoint {
				hdr.PAXRecords[hdrMountPoint] = "1"
			}
			hdr.Linkname = rp.Target

		case winio.BackupEaData:
			eab, err := io.ReadAll(br)
			if err != nil {
				return err
			}
			eas, err := winio.DecodeExtendedAttributes(eab)
			if err != nil {
				return err
			}
			for _, ea := range eas {
				// Use base64 encoding for the binary value. Note that there
				// is no way to encode the EA's flags, since their use doesn't
				// make any sense for persisted EAs.
				hdr.PAXRecords[hdrEaPrefix+ea.Name] = base64.StdEncoding.EncodeToString(ea.Value)
			}

		case winio.BackupAlternateData, winio.BackupLink, winio.BackupPropertyData, winio.BackupObjectId, winio.BackupTxfsData:
			// ignore these streams
		default:
			return fmt.Errorf("%s: unknown stream ID %d", name, bhdr.Id)
		}
	}

	err = t.WriteHeader(hdr)
	if err != nil {
		return err
	}

	if readTwice {
		// Get back to the data stream.
		if _, err = sr.Seek(restartPos, io.SeekStart); err != nil {
			return err
		}
		for dataHdr == nil {
			bhdr, err := br.Next()
			if err == io.EOF { //nolint:errorlint
				break
			}
			if err != nil {
				return err
			}
			if bhdr.Id == winio.BackupData {
				dataHdr = bhdr
			}
		}
	}

	// The logic for copying file contents is fairly complicated due to the need for handling sparse files,
	// and the weird ways they are represented by BackupRead. A normal file will always either have a data stream
	// with size and content, or no data stream at all (if empty). However, for a sparse file, the content can also
	// be represented using a series of sparse block streams following the data stream. Additionally, the way sparse
	// files are handled by BackupRead has changed in the OS recently. The specifics of the representation are described
	// in the list at the bottom of this block comment.
	//
	// Sparse files can be represented in four different ways, based on the specifics of the file.
	// - Size = 0:
	//     Previously: BackupRead yields no data stream and no sparse block streams.
	//     Recently: BackupRead yields a data stream with size = 0. There are no following sparse block streams.
	// - Size > 0, no allocated ranges:
	//     BackupRead yields a data stream with size = 0. Following is a single sparse block stream with
	//     size = 0 and offset = <file size>.
	// - Size > 0, one allocated range:
	//     BackupRead yields a data stream with size = <file size> containing the file contents. There are no
	//     sparse block streams. This is the case if you take a normal file with contents and simply set the
	//     sparse flag on it.
	// - Size > 0, multiple allocated ranges:
	//     BackupRead yields a data stream with size = 0. Following are sparse block streams for each allocated
	//     range of the file containing the range contents. Finally there is a sparse block stream with
	//     size = 0 and offset = <file size>.

	if dataHdr != nil { //nolint:nestif // todo: reduce nesting complexity
		// A data stream was found. Copy the data.
		// We assume that we will either have a data stream size > 0 XOR have sparse block streams.
		if dataHdr.Size > 0 || (dataHdr.Attributes&winio.StreamSparseAttributes) == 0 {
			if size != dataHdr.Size {
				return fmt.Errorf("%s: mismatch between file size %d and header size %d", name, size, dataHdr.Size)
			}
			if _, err = io.Copy(t, br); err != nil {
				return fmt.Errorf("%s: copying contents from data stream: %w", name, err)
			}
		} else if size > 0 {
			// As of a recent OS change, BackupRead now returns a data stream for empty sparse files.
			// These files have no sparse block streams, so skip the copySparse call if file size = 0.
			if err = copySparse(t, br); err != nil {
				return fmt.Errorf("%s: copying contents from sparse block stream: %w", name, err)
			}
		}
	}

	// Look for streams after the data stream. The only ones we handle are alternate data streams.
	// Other streams may have metadata that could be serialized, but the tar header has already
	// been written. In practice, this means that we don't get EA or TXF metadata.
	for {
		bhdr, err := br.Next()
		if err == io.EOF { //nolint:errorlint
			break
		}
		if err != nil {
			return err
		}
		switch bhdr.Id {
		case winio.BackupAlternateData:
			if (bhdr.Attributes & winio.StreamSparseAttributes) != 0 {
				// Unsupported for now, since the size of the alternate stream is not present
				// in the backup stream until after the data has been read.
				return fmt.Errorf("%s: tar of sparse alternate data streams is unsupported", name)
			}
			altName := strings.TrimSuffix(bhdr.Name, ":$DATA")
			hdr = &tar.Header{
				Format:     hdr.Format,
				Name:       name + altName,
				Mode:       hdr.Mode,
				Typeflag:   tar.TypeReg,
				Size:       bhdr.Size,
				ModTime:    hdr.ModTime,
				AccessTime: hdr.AccessTime,
				ChangeTime: hdr.ChangeTime,
			}
			err = t.WriteHeader(hdr)
			if err != nil {
				return err
			}
			_, err = io.Copy(t, br)
			if err != nil {
				return err
			}
		case winio.BackupEaData, winio.BackupLink, winio.BackupPropertyData, winio.BackupObjectId, winio.BackupTxfsData:
			// ignore these streams
		default:
			return fmt.Errorf("%s: unknown stream ID %d after data", name, bhdr.Id)
		}
	}
	return nil
}

// FileInfoFromHeader retrieves basic Win32 file information from a tar header, using the additional metadata written by
// WriteTarFileFromBackupStream.
func FileInfoFromHeader(hdr *tar.Header) (name string, size int64, fileInfo *winio.FileBasicInfo, err error) {
	name = hdr.Name
	if hdr.Typeflag == tar.TypeReg || hdr.Typeflag == tar.TypeRegA {
		size = hdr.Size
	}
	fileInfo = &winio.FileBasicInfo{
		LastAccessTime: windows.NsecToFiletime(hdr.AccessTime.UnixNano()),
		LastWriteTime:  windows.NsecToFiletime(hdr.ModTime.UnixNano()),
		ChangeTime:     windows.NsecToFiletime(hdr.ChangeTime.UnixNano()),
		// Default to ModTime, we'll pull hdrCreationTime below if present
		CreationTime: windows.NsecToFiletime(hdr.ModTime.UnixNano()),
	}
	if attrStr, ok := hdr.PAXRecords[hdrFileAttributes]; ok {
		attr, err := strconv.ParseUint(attrStr, 10, 32)
		if err != nil {
			return "", 0, nil, err
		}
		fileInfo.FileAttributes = uint32(attr)
	} else {
		if hdr.Typeflag == tar.TypeDir {
			fileInfo.FileAttributes |= syscall.FILE_ATTRIBUTE_DIRECTORY
		}
	}
	if creationTimeStr, ok := hdr.PAXRecords[hdrCreationTime]; ok {
		creationTime, err := parsePAXTime(creationTimeStr)
		if err != nil {
			return "", 0, nil, err
		}
		fileInfo.CreationTime = windows.NsecToFiletime(creationTime.UnixNano())
	}
	return name, size, fileInfo, err
}

// WriteBackupStreamFromTarFile writes a Win32 backup stream from the current tar file. Since this function may process multiple
// tar file entries in order to collect all the alternate data streams for the file, it returns the next
// tar file that was not processed, or io.EOF is there are no more.
func WriteBackupStreamFromTarFile(w io.Writer, t *tar.Reader, hdr *tar.Header) (*tar.Header, error) {
	bw := winio.NewBackupStreamWriter(w)

	sd, err := SecurityDescriptorFromTarHeader(hdr)
	if err != nil {
		return nil, err
	}
	if len(sd) != 0 {
		bhdr := winio.BackupHeader{
			Id:   winio.BackupSecurity,
			Size: int64(len(sd)),
		}
		err := bw.WriteHeader(&bhdr)
		if err != nil {
			return nil, err
		}
		_, err = bw.Write(sd)
		if err != nil {
			return nil, err
		}
	}

	eadata, err := ExtendedAttributesFromTarHeader(hdr)
	if err != nil {
		return nil, err
	}
	if len(eadata) != 0 {
		bhdr := winio.BackupHeader{
			Id:   winio.BackupEaData,
			Size: int64(len(eadata)),
		}
		err = bw.WriteHeader(&bhdr)
		if err != nil {
			return nil, err
		}
		_, err = bw.Write(eadata)
		if err != nil {
			return nil, err
		}
	}

	if hdr.Typeflag == tar.TypeSymlink {
		reparse := EncodeReparsePointFromTarHeader(hdr)
		bhdr := winio.BackupHeader{
			Id:   winio.BackupReparseData,
			Size: int64(len(reparse)),
		}
		err := bw.WriteHeader(&bhdr)
		if err != nil {
			return nil, err
		}
		_, err = bw.Write(reparse)
		if err != nil {
			return nil, err
		}
	}

	if hdr.Typeflag == tar.TypeReg || hdr.Typeflag == tar.TypeRegA {
		bhdr := winio.BackupHeader{
			Id:   winio.BackupData,
			Size: hdr.Size,
		}
		err := bw.WriteHeader(&bhdr)
		if err != nil {
			return nil, err
		}
		_, err = io.Copy(bw, t)
		if err != nil {
			return nil, err
		}
	}
	// Copy all the alternate data streams and return the next non-ADS header.
	for {
		ahdr, err := t.Next()
		if err != nil {
			return nil, err
		}
		if ahdr.Typeflag != tar.TypeReg || !strings.HasPrefix(ahdr.Name, hdr.Name+":") {
			return ahdr, nil
		}
		bhdr := winio.BackupHeader{
			Id:   winio.BackupAlternateData,
			Size: ahdr.Size,
			Name: ahdr.Name[len(hdr.Name):] + ":$DATA",
		}
		err = bw.WriteHeader(&bhdr)
		if err != nil {
			return nil, err
		}
		_, err = io.Copy(bw, t)
		if err != nil {
			return nil, err
		}
	}
}
070701000000F5000081A4000000000000000000000001645E367C00000434000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/doc.go   // This package provides utilities for efficiently performing Win32 IO operations in Go.
// Currently, this package is provides support for genreal IO and management of
//   - named pipes
//   - files
//   - [Hyper-V sockets]
//
// This code is similar to Go's [net] package, and uses IO completion ports to avoid
// blocking IO on system threads, allowing Go to reuse the thread to schedule other goroutines.
//
// This limits support to Windows Vista and newer operating systems.
//
// Additionally, this package provides support for:
//   - creating and managing GUIDs
//   - writing to [ETW]
//   - opening and manageing VHDs
//   - parsing [Windows Image files]
//   - auto-generating Win32 API code
//
// [Hyper-V sockets]: https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/user-guide/make-integration-service
// [ETW]: https://docs.microsoft.com/en-us/windows-hardware/drivers/devtest/event-tracing-for-windows--etw-
// [Windows Image files]: https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/work-with-windows-images
package winio
070701000000F6000081A4000000000000000000000001645E367C00000C6A000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/ea.go    package winio

import (
	"bytes"
	"encoding/binary"
	"errors"
)

type fileFullEaInformation struct {
	NextEntryOffset uint32
	Flags           uint8
	NameLength      uint8
	ValueLength     uint16
}

var (
	fileFullEaInformationSize = binary.Size(&fileFullEaInformation{})

	errInvalidEaBuffer = errors.New("invalid extended attribute buffer")
	errEaNameTooLarge  = errors.New("extended attribute name too large")
	errEaValueTooLarge = errors.New("extended attribute value too large")
)

// ExtendedAttribute represents a single Windows EA.
type ExtendedAttribute struct {
	Name  string
	Value []byte
	Flags uint8
}

func parseEa(b []byte) (ea ExtendedAttribute, nb []byte, err error) {
	var info fileFullEaInformation
	err = binary.Read(bytes.NewReader(b), binary.LittleEndian, &info)
	if err != nil {
		err = errInvalidEaBuffer
		return ea, nb, err
	}

	nameOffset := fileFullEaInformationSize
	nameLen := int(info.NameLength)
	valueOffset := nameOffset + int(info.NameLength) + 1
	valueLen := int(info.ValueLength)
	nextOffset := int(info.NextEntryOffset)
	if valueLen+valueOffset > len(b) || nextOffset < 0 || nextOffset > len(b) {
		err = errInvalidEaBuffer
		return ea, nb, err
	}

	ea.Name = string(b[nameOffset : nameOffset+nameLen])
	ea.Value = b[valueOffset : valueOffset+valueLen]
	ea.Flags = info.Flags
	if info.NextEntryOffset != 0 {
		nb = b[info.NextEntryOffset:]
	}
	return ea, nb, err
}

// DecodeExtendedAttributes decodes a list of EAs from a FILE_FULL_EA_INFORMATION
// buffer retrieved from BackupRead, ZwQueryEaFile, etc.
func DecodeExtendedAttributes(b []byte) (eas []ExtendedAttribute, err error) {
	for len(b) != 0 {
		ea, nb, err := parseEa(b)
		if err != nil {
			return nil, err
		}

		eas = append(eas, ea)
		b = nb
	}
	return eas, err
}

func writeEa(buf *bytes.Buffer, ea *ExtendedAttribute, last bool) error {
	if int(uint8(len(ea.Name))) != len(ea.Name) {
		return errEaNameTooLarge
	}
	if int(uint16(len(ea.Value))) != len(ea.Value) {
		return errEaValueTooLarge
	}
	entrySize := uint32(fileFullEaInformationSize + len(ea.Name) + 1 + len(ea.Value))
	withPadding := (entrySize + 3) &^ 3
	nextOffset := uint32(0)
	if !last {
		nextOffset = withPadding
	}
	info := fileFullEaInformation{
		NextEntryOffset: nextOffset,
		Flags:           ea.Flags,
		NameLength:      uint8(len(ea.Name)),
		ValueLength:     uint16(len(ea.Value)),
	}

	err := binary.Write(buf, binary.LittleEndian, &info)
	if err != nil {
		return err
	}

	_, err = buf.Write([]byte(ea.Name))
	if err != nil {
		return err
	}

	err = buf.WriteByte(0)
	if err != nil {
		return err
	}

	_, err = buf.Write(ea.Value)
	if err != nil {
		return err
	}

	_, err = buf.Write([]byte{0, 0, 0}[0 : withPadding-entrySize])
	if err != nil {
		return err
	}

	return nil
}

// EncodeExtendedAttributes encodes a list of EAs into a FILE_FULL_EA_INFORMATION
// buffer for use with BackupWrite, ZwSetEaFile, etc.
func EncodeExtendedAttributes(eas []ExtendedAttribute) ([]byte, error) {
	var buf bytes.Buffer
	for i := range eas {
		last := false
		if i == len(eas)-1 {
			last = true
		}

		err := writeEa(&buf, &eas[i], last)
		if err != nil {
			return nil, err
		}
	}
	return buf.Bytes(), nil
}
  070701000000F7000081A4000000000000000000000001645E367C0000211D000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/file.go  //go:build windows
// +build windows

package winio

import (
	"errors"
	"io"
	"runtime"
	"sync"
	"sync/atomic"
	"syscall"
	"time"

	"golang.org/x/sys/windows"
)

//sys cancelIoEx(file syscall.Handle, o *syscall.Overlapped) (err error) = CancelIoEx
//sys createIoCompletionPort(file syscall.Handle, port syscall.Handle, key uintptr, threadCount uint32) (newport syscall.Handle, err error) = CreateIoCompletionPort
//sys getQueuedCompletionStatus(port syscall.Handle, bytes *uint32, key *uintptr, o **ioOperation, timeout uint32) (err error) = GetQueuedCompletionStatus
//sys setFileCompletionNotificationModes(h syscall.Handle, flags uint8) (err error) = SetFileCompletionNotificationModes
//sys wsaGetOverlappedResult(h syscall.Handle, o *syscall.Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) = ws2_32.WSAGetOverlappedResult

type atomicBool int32

func (b *atomicBool) isSet() bool { return atomic.LoadInt32((*int32)(b)) != 0 }
func (b *atomicBool) setFalse()   { atomic.StoreInt32((*int32)(b), 0) }
func (b *atomicBool) setTrue()    { atomic.StoreInt32((*int32)(b), 1) }

//revive:disable-next-line:predeclared Keep "new" to maintain consistency with "atomic" pkg
func (b *atomicBool) swap(new bool) bool {
	var newInt int32
	if new {
		newInt = 1
	}
	return atomic.SwapInt32((*int32)(b), newInt) == 1
}

var (
	ErrFileClosed = errors.New("file has already been closed")
	ErrTimeout    = &timeoutError{}
)

type timeoutError struct{}

func (*timeoutError) Error() string   { return "i/o timeout" }
func (*timeoutError) Timeout() bool   { return true }
func (*timeoutError) Temporary() bool { return true }

type timeoutChan chan struct{}

var ioInitOnce sync.Once
var ioCompletionPort syscall.Handle

// ioResult contains the result of an asynchronous IO operation.
type ioResult struct {
	bytes uint32
	err   error
}

// ioOperation represents an outstanding asynchronous Win32 IO.
type ioOperation struct {
	o  syscall.Overlapped
	ch chan ioResult
}

func initIO() {
	h, err := createIoCompletionPort(syscall.InvalidHandle, 0, 0, 0xffffffff)
	if err != nil {
		panic(err)
	}
	ioCompletionPort = h
	go ioCompletionProcessor(h)
}

// win32File implements Reader, Writer, and Closer on a Win32 handle without blocking in a syscall.
// It takes ownership of this handle and will close it if it is garbage collected.
type win32File struct {
	handle        syscall.Handle
	wg            sync.WaitGroup
	wgLock        sync.RWMutex
	closing       atomicBool
	socket        bool
	readDeadline  deadlineHandler
	writeDeadline deadlineHandler
}

type deadlineHandler struct {
	setLock     sync.Mutex
	channel     timeoutChan
	channelLock sync.RWMutex
	timer       *time.Timer
	timedout    atomicBool
}

// makeWin32File makes a new win32File from an existing file handle.
func makeWin32File(h syscall.Handle) (*win32File, error) {
	f := &win32File{handle: h}
	ioInitOnce.Do(initIO)
	_, err := createIoCompletionPort(h, ioCompletionPort, 0, 0xffffffff)
	if err != nil {
		return nil, err
	}
	err = setFileCompletionNotificationModes(h, windows.FILE_SKIP_COMPLETION_PORT_ON_SUCCESS|windows.FILE_SKIP_SET_EVENT_ON_HANDLE)
	if err != nil {
		return nil, err
	}
	f.readDeadline.channel = make(timeoutChan)
	f.writeDeadline.channel = make(timeoutChan)
	return f, nil
}

func MakeOpenFile(h syscall.Handle) (io.ReadWriteCloser, error) {
	// If we return the result of makeWin32File directly, it can result in an
	// interface-wrapped nil, rather than a nil interface value.
	f, err := makeWin32File(h)
	if err != nil {
		return nil, err
	}
	return f, nil
}

// closeHandle closes the resources associated with a Win32 handle.
func (f *win32File) closeHandle() {
	f.wgLock.Lock()
	// Atomically set that we are closing, releasing the resources only once.
	if !f.closing.swap(true) {
		f.wgLock.Unlock()
		// cancel all IO and wait for it to complete
		_ = cancelIoEx(f.handle, nil)
		f.wg.Wait()
		// at this point, no new IO can start
		syscall.Close(f.handle)
		f.handle = 0
	} else {
		f.wgLock.Unlock()
	}
}

// Close closes a win32File.
func (f *win32File) Close() error {
	f.closeHandle()
	return nil
}

// IsClosed checks if the file has been closed.
func (f *win32File) IsClosed() bool {
	return f.closing.isSet()
}

// prepareIO prepares for a new IO operation.
// The caller must call f.wg.Done() when the IO is finished, prior to Close() returning.
func (f *win32File) prepareIO() (*ioOperation, error) {
	f.wgLock.RLock()
	if f.closing.isSet() {
		f.wgLock.RUnlock()
		return nil, ErrFileClosed
	}
	f.wg.Add(1)
	f.wgLock.RUnlock()
	c := &ioOperation{}
	c.ch = make(chan ioResult)
	return c, nil
}

// ioCompletionProcessor processes completed async IOs forever.
func ioCompletionProcessor(h syscall.Handle) {
	for {
		var bytes uint32
		var key uintptr
		var op *ioOperation
		err := getQueuedCompletionStatus(h, &bytes, &key, &op, syscall.INFINITE)
		if op == nil {
			panic(err)
		}
		op.ch <- ioResult{bytes, err}
	}
}

// todo: helsaawy - create an asyncIO version that takes a context

// asyncIO processes the return value from ReadFile or WriteFile, blocking until
// the operation has actually completed.
func (f *win32File) asyncIO(c *ioOperation, d *deadlineHandler, bytes uint32, err error) (int, error) {
	if err != syscall.ERROR_IO_PENDING { //nolint:errorlint // err is Errno
		return int(bytes), err
	}

	if f.closing.isSet() {
		_ = cancelIoEx(f.handle, &c.o)
	}

	var timeout timeoutChan
	if d != nil {
		d.channelLock.Lock()
		timeout = d.channel
		d.channelLock.Unlock()
	}

	var r ioResult
	select {
	case r = <-c.ch:
		err = r.err
		if err == syscall.ERROR_OPERATION_ABORTED { //nolint:errorlint // err is Errno
			if f.closing.isSet() {
				err = ErrFileClosed
			}
		} else if err != nil && f.socket {
			// err is from Win32. Query the overlapped structure to get the winsock error.
			var bytes, flags uint32
			err = wsaGetOverlappedResult(f.handle, &c.o, &bytes, false, &flags)
		}
	case <-timeout:
		_ = cancelIoEx(f.handle, &c.o)
		r = <-c.ch
		err = r.err
		if err == syscall.ERROR_OPERATION_ABORTED { //nolint:errorlint // err is Errno
			err = ErrTimeout
		}
	}

	// runtime.KeepAlive is needed, as c is passed via native
	// code to ioCompletionProcessor, c must remain alive
	// until the channel read is complete.
	// todo: (de)allocate *ioOperation via win32 heap functions, instead of needing to KeepAlive?
	runtime.KeepAlive(c)
	return int(r.bytes), err
}

// Read reads from a file handle.
func (f *win32File) Read(b []byte) (int, error) {
	c, err := f.prepareIO()
	if err != nil {
		return 0, err
	}
	defer f.wg.Done()

	if f.readDeadline.timedout.isSet() {
		return 0, ErrTimeout
	}

	var bytes uint32
	err = syscall.ReadFile(f.handle, b, &bytes, &c.o)
	n, err := f.asyncIO(c, &f.readDeadline, bytes, err)
	runtime.KeepAlive(b)

	// Handle EOF conditions.
	if err == nil && n == 0 && len(b) != 0 {
		return 0, io.EOF
	} else if err == syscall.ERROR_BROKEN_PIPE { //nolint:errorlint // err is Errno
		return 0, io.EOF
	} else {
		return n, err
	}
}

// Write writes to a file handle.
func (f *win32File) Write(b []byte) (int, error) {
	c, err := f.prepareIO()
	if err != nil {
		return 0, err
	}
	defer f.wg.Done()

	if f.writeDeadline.timedout.isSet() {
		return 0, ErrTimeout
	}

	var bytes uint32
	err = syscall.WriteFile(f.handle, b, &bytes, &c.o)
	n, err := f.asyncIO(c, &f.writeDeadline, bytes, err)
	runtime.KeepAlive(b)
	return n, err
}

func (f *win32File) SetReadDeadline(deadline time.Time) error {
	return f.readDeadline.set(deadline)
}

func (f *win32File) SetWriteDeadline(deadline time.Time) error {
	return f.writeDeadline.set(deadline)
}

func (f *win32File) Flush() error {
	return syscall.FlushFileBuffers(f.handle)
}

func (f *win32File) Fd() uintptr {
	return uintptr(f.handle)
}

func (d *deadlineHandler) set(deadline time.Time) error {
	d.setLock.Lock()
	defer d.setLock.Unlock()

	if d.timer != nil {
		if !d.timer.Stop() {
			<-d.channel
		}
		d.timer = nil
	}
	d.timedout.setFalse()

	select {
	case <-d.channel:
		d.channelLock.Lock()
		d.channel = make(chan struct{})
		d.channelLock.Unlock()
	default:
	}

	if deadline.IsZero() {
		return nil
	}

	timeoutIO := func() {
		d.timedout.setTrue()
		close(d.channel)
	}

	now := time.Now()
	duration := deadline.Sub(now)
	if deadline.After(now) {
		// Deadline is in the future, set a timer to wait
		d.timer = time.AfterFunc(duration, timeoutIO)
	} else {
		// Deadline is in the past. Cancel all pending IO now.
		timeoutIO()
	}
	return nil
}
   070701000000F8000081A4000000000000000000000001645E367C00000AD4000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/fileinfo.go  //go:build windows
// +build windows

package winio

import (
	"os"
	"runtime"
	"unsafe"

	"golang.org/x/sys/windows"
)

// FileBasicInfo contains file access time and file attributes information.
type FileBasicInfo struct {
	CreationTime, LastAccessTime, LastWriteTime, ChangeTime windows.Filetime
	FileAttributes                                          uint32
	_                                                       uint32 // padding
}

// GetFileBasicInfo retrieves times and attributes for a file.
func GetFileBasicInfo(f *os.File) (*FileBasicInfo, error) {
	bi := &FileBasicInfo{}
	if err := windows.GetFileInformationByHandleEx(
		windows.Handle(f.Fd()),
		windows.FileBasicInfo,
		(*byte)(unsafe.Pointer(bi)),
		uint32(unsafe.Sizeof(*bi)),
	); err != nil {
		return nil, &os.PathError{Op: "GetFileInformationByHandleEx", Path: f.Name(), Err: err}
	}
	runtime.KeepAlive(f)
	return bi, nil
}

// SetFileBasicInfo sets times and attributes for a file.
func SetFileBasicInfo(f *os.File, bi *FileBasicInfo) error {
	if err := windows.SetFileInformationByHandle(
		windows.Handle(f.Fd()),
		windows.FileBasicInfo,
		(*byte)(unsafe.Pointer(bi)),
		uint32(unsafe.Sizeof(*bi)),
	); err != nil {
		return &os.PathError{Op: "SetFileInformationByHandle", Path: f.Name(), Err: err}
	}
	runtime.KeepAlive(f)
	return nil
}

// FileStandardInfo contains extended information for the file.
// FILE_STANDARD_INFO in WinBase.h
// https://docs.microsoft.com/en-us/windows/win32/api/winbase/ns-winbase-file_standard_info
type FileStandardInfo struct {
	AllocationSize, EndOfFile int64
	NumberOfLinks             uint32
	DeletePending, Directory  bool
}

// GetFileStandardInfo retrieves ended information for the file.
func GetFileStandardInfo(f *os.File) (*FileStandardInfo, error) {
	si := &FileStandardInfo{}
	if err := windows.GetFileInformationByHandleEx(windows.Handle(f.Fd()),
		windows.FileStandardInfo,
		(*byte)(unsafe.Pointer(si)),
		uint32(unsafe.Sizeof(*si))); err != nil {
		return nil, &os.PathError{Op: "GetFileInformationByHandleEx", Path: f.Name(), Err: err}
	}
	runtime.KeepAlive(f)
	return si, nil
}

// FileIDInfo contains the volume serial number and file ID for a file. This pair should be
// unique on a system.
type FileIDInfo struct {
	VolumeSerialNumber uint64
	FileID             [16]byte
}

// GetFileID retrieves the unique (volume, file ID) pair for a file.
func GetFileID(f *os.File) (*FileIDInfo, error) {
	fileID := &FileIDInfo{}
	if err := windows.GetFileInformationByHandleEx(
		windows.Handle(f.Fd()),
		windows.FileIdInfo,
		(*byte)(unsafe.Pointer(fileID)),
		uint32(unsafe.Sizeof(*fileID)),
	); err != nil {
		return nil, &os.PathError{Op: "GetFileInformationByHandleEx", Path: f.Name(), Err: err}
	}
	runtime.KeepAlive(f)
	return fileID, nil
}
070701000000F9000081A4000000000000000000000001645E367C00003E62000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/hvsock.go    //go:build windows
// +build windows

package winio

import (
	"context"
	"errors"
	"fmt"
	"io"
	"net"
	"os"
	"syscall"
	"time"
	"unsafe"

	"golang.org/x/sys/windows"

	"github.com/Microsoft/go-winio/internal/socket"
	"github.com/Microsoft/go-winio/pkg/guid"
)

const afHVSock = 34 // AF_HYPERV

// Well known Service and VM IDs
// https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/user-guide/make-integration-service#vmid-wildcards

// HvsockGUIDWildcard is the wildcard VmId for accepting connections from all partitions.
func HvsockGUIDWildcard() guid.GUID { // 00000000-0000-0000-0000-000000000000
	return guid.GUID{}
}

// HvsockGUIDBroadcast is the wildcard VmId for broadcasting sends to all partitions.
func HvsockGUIDBroadcast() guid.GUID { // ffffffff-ffff-ffff-ffff-ffffffffffff
	return guid.GUID{
		Data1: 0xffffffff,
		Data2: 0xffff,
		Data3: 0xffff,
		Data4: [8]uint8{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
	}
}

// HvsockGUIDLoopback is the Loopback VmId for accepting connections to the same partition as the connector.
func HvsockGUIDLoopback() guid.GUID { // e0e16197-dd56-4a10-9195-5ee7a155a838
	return guid.GUID{
		Data1: 0xe0e16197,
		Data2: 0xdd56,
		Data3: 0x4a10,
		Data4: [8]uint8{0x91, 0x95, 0x5e, 0xe7, 0xa1, 0x55, 0xa8, 0x38},
	}
}

// HvsockGUIDSiloHost is the address of a silo's host partition:
//   - The silo host of a hosted silo is the utility VM.
//   - The silo host of a silo on a physical host is the physical host.
func HvsockGUIDSiloHost() guid.GUID { // 36bd0c5c-7276-4223-88ba-7d03b654c568
	return guid.GUID{
		Data1: 0x36bd0c5c,
		Data2: 0x7276,
		Data3: 0x4223,
		Data4: [8]byte{0x88, 0xba, 0x7d, 0x03, 0xb6, 0x54, 0xc5, 0x68},
	}
}

// HvsockGUIDChildren is the wildcard VmId for accepting connections from the connector's child partitions.
func HvsockGUIDChildren() guid.GUID { // 90db8b89-0d35-4f79-8ce9-49ea0ac8b7cd
	return guid.GUID{
		Data1: 0x90db8b89,
		Data2: 0xd35,
		Data3: 0x4f79,
		Data4: [8]uint8{0x8c, 0xe9, 0x49, 0xea, 0xa, 0xc8, 0xb7, 0xcd},
	}
}

// HvsockGUIDParent is the wildcard VmId for accepting connections from the connector's parent partition.
// Listening on this VmId accepts connection from:
//   - Inside silos: silo host partition.
//   - Inside hosted silo: host of the VM.
//   - Inside VM: VM host.
//   - Physical host: Not supported.
func HvsockGUIDParent() guid.GUID { // a42e7cda-d03f-480c-9cc2-a4de20abb878
	return guid.GUID{
		Data1: 0xa42e7cda,
		Data2: 0xd03f,
		Data3: 0x480c,
		Data4: [8]uint8{0x9c, 0xc2, 0xa4, 0xde, 0x20, 0xab, 0xb8, 0x78},
	}
}

// hvsockVsockServiceTemplate is the Service GUID used for the VSOCK protocol.
func hvsockVsockServiceTemplate() guid.GUID { // 00000000-facb-11e6-bd58-64006a7986d3
	return guid.GUID{
		Data2: 0xfacb,
		Data3: 0x11e6,
		Data4: [8]uint8{0xbd, 0x58, 0x64, 0x00, 0x6a, 0x79, 0x86, 0xd3},
	}
}

// An HvsockAddr is an address for a AF_HYPERV socket.
type HvsockAddr struct {
	VMID      guid.GUID
	ServiceID guid.GUID
}

type rawHvsockAddr struct {
	Family    uint16
	_         uint16
	VMID      guid.GUID
	ServiceID guid.GUID
}

var _ socket.RawSockaddr = &rawHvsockAddr{}

// Network returns the address's network name, "hvsock".
func (*HvsockAddr) Network() string {
	return "hvsock"
}

func (addr *HvsockAddr) String() string {
	return fmt.Sprintf("%s:%s", &addr.VMID, &addr.ServiceID)
}

// VsockServiceID returns an hvsock service ID corresponding to the specified AF_VSOCK port.
func VsockServiceID(port uint32) guid.GUID {
	g := hvsockVsockServiceTemplate() // make a copy
	g.Data1 = port
	return g
}

func (addr *HvsockAddr) raw() rawHvsockAddr {
	return rawHvsockAddr{
		Family:    afHVSock,
		VMID:      addr.VMID,
		ServiceID: addr.ServiceID,
	}
}

func (addr *HvsockAddr) fromRaw(raw *rawHvsockAddr) {
	addr.VMID = raw.VMID
	addr.ServiceID = raw.ServiceID
}

// Sockaddr returns a pointer to and the size of this struct.
//
// Implements the [socket.RawSockaddr] interface, and allows use in
// [socket.Bind] and [socket.ConnectEx].
func (r *rawHvsockAddr) Sockaddr() (unsafe.Pointer, int32, error) {
	return unsafe.Pointer(r), int32(unsafe.Sizeof(rawHvsockAddr{})), nil
}

// Sockaddr interface allows use with `sockets.Bind()` and `.ConnectEx()`.
func (r *rawHvsockAddr) FromBytes(b []byte) error {
	n := int(unsafe.Sizeof(rawHvsockAddr{}))

	if len(b) < n {
		return fmt.Errorf("got %d, want %d: %w", len(b), n, socket.ErrBufferSize)
	}

	copy(unsafe.Slice((*byte)(unsafe.Pointer(r)), n), b[:n])
	if r.Family != afHVSock {
		return fmt.Errorf("got %d, want %d: %w", r.Family, afHVSock, socket.ErrAddrFamily)
	}

	return nil
}

// HvsockListener is a socket listener for the AF_HYPERV address family.
type HvsockListener struct {
	sock *win32File
	addr HvsockAddr
}

var _ net.Listener = &HvsockListener{}

// HvsockConn is a connected socket of the AF_HYPERV address family.
type HvsockConn struct {
	sock          *win32File
	local, remote HvsockAddr
}

var _ net.Conn = &HvsockConn{}

func newHVSocket() (*win32File, error) {
	fd, err := syscall.Socket(afHVSock, syscall.SOCK_STREAM, 1)
	if err != nil {
		return nil, os.NewSyscallError("socket", err)
	}
	f, err := makeWin32File(fd)
	if err != nil {
		syscall.Close(fd)
		return nil, err
	}
	f.socket = true
	return f, nil
}

// ListenHvsock listens for connections on the specified hvsock address.
func ListenHvsock(addr *HvsockAddr) (_ *HvsockListener, err error) {
	l := &HvsockListener{addr: *addr}
	sock, err := newHVSocket()
	if err != nil {
		return nil, l.opErr("listen", err)
	}
	sa := addr.raw()
	err = socket.Bind(windows.Handle(sock.handle), &sa)
	if err != nil {
		return nil, l.opErr("listen", os.NewSyscallError("socket", err))
	}
	err = syscall.Listen(sock.handle, 16)
	if err != nil {
		return nil, l.opErr("listen", os.NewSyscallError("listen", err))
	}
	return &HvsockListener{sock: sock, addr: *addr}, nil
}

func (l *HvsockListener) opErr(op string, err error) error {
	return &net.OpError{Op: op, Net: "hvsock", Addr: &l.addr, Err: err}
}

// Addr returns the listener's network address.
func (l *HvsockListener) Addr() net.Addr {
	return &l.addr
}

// Accept waits for the next connection and returns it.
func (l *HvsockListener) Accept() (_ net.Conn, err error) {
	sock, err := newHVSocket()
	if err != nil {
		return nil, l.opErr("accept", err)
	}
	defer func() {
		if sock != nil {
			sock.Close()
		}
	}()
	c, err := l.sock.prepareIO()
	if err != nil {
		return nil, l.opErr("accept", err)
	}
	defer l.sock.wg.Done()

	// AcceptEx, per documentation, requires an extra 16 bytes per address.
	//
	// https://docs.microsoft.com/en-us/windows/win32/api/mswsock/nf-mswsock-acceptex
	const addrlen = uint32(16 + unsafe.Sizeof(rawHvsockAddr{}))
	var addrbuf [addrlen * 2]byte

	var bytes uint32
	err = syscall.AcceptEx(l.sock.handle, sock.handle, &addrbuf[0], 0 /* rxdatalen */, addrlen, addrlen, &bytes, &c.o)
	if _, err = l.sock.asyncIO(c, nil, bytes, err); err != nil {
		return nil, l.opErr("accept", os.NewSyscallError("acceptex", err))
	}

	conn := &HvsockConn{
		sock: sock,
	}
	// The local address returned in the AcceptEx buffer is the same as the Listener socket's
	// address. However, the service GUID reported by GetSockName is different from the Listeners
	// socket, and is sometimes the same as the local address of the socket that dialed the
	// address, with the service GUID.Data1 incremented, but othertimes is different.
	// todo: does the local address matter? is the listener's address or the actual address appropriate?
	conn.local.fromRaw((*rawHvsockAddr)(unsafe.Pointer(&addrbuf[0])))
	conn.remote.fromRaw((*rawHvsockAddr)(unsafe.Pointer(&addrbuf[addrlen])))

	// initialize the accepted socket and update its properties with those of the listening socket
	if err = windows.Setsockopt(windows.Handle(sock.handle),
		windows.SOL_SOCKET, windows.SO_UPDATE_ACCEPT_CONTEXT,
		(*byte)(unsafe.Pointer(&l.sock.handle)), int32(unsafe.Sizeof(l.sock.handle))); err != nil {
		return nil, conn.opErr("accept", os.NewSyscallError("setsockopt", err))
	}

	sock = nil
	return conn, nil
}

// Close closes the listener, causing any pending Accept calls to fail.
func (l *HvsockListener) Close() error {
	return l.sock.Close()
}

// HvsockDialer configures and dials a Hyper-V Socket (ie, [HvsockConn]).
type HvsockDialer struct {
	// Deadline is the time the Dial operation must connect before erroring.
	Deadline time.Time

	// Retries is the number of additional connects to try if the connection times out, is refused,
	// or the host is unreachable
	Retries uint

	// RetryWait is the time to wait after a connection error to retry
	RetryWait time.Duration

	rt *time.Timer // redial wait timer
}

// Dial the Hyper-V socket at addr.
//
// See [HvsockDialer.Dial] for more information.
func Dial(ctx context.Context, addr *HvsockAddr) (conn *HvsockConn, err error) {
	return (&HvsockDialer{}).Dial(ctx, addr)
}

// Dial attempts to connect to the Hyper-V socket at addr, and returns a connection if successful.
// Will attempt (HvsockDialer).Retries if dialing fails, waiting (HvsockDialer).RetryWait between
// retries.
//
// Dialing can be cancelled either by providing (HvsockDialer).Deadline, or cancelling ctx.
func (d *HvsockDialer) Dial(ctx context.Context, addr *HvsockAddr) (conn *HvsockConn, err error) {
	op := "dial"
	// create the conn early to use opErr()
	conn = &HvsockConn{
		remote: *addr,
	}

	if !d.Deadline.IsZero() {
		var cancel context.CancelFunc
		ctx, cancel = context.WithDeadline(ctx, d.Deadline)
		defer cancel()
	}

	// preemptive timeout/cancellation check
	if err = ctx.Err(); err != nil {
		return nil, conn.opErr(op, err)
	}

	sock, err := newHVSocket()
	if err != nil {
		return nil, conn.opErr(op, err)
	}
	defer func() {
		if sock != nil {
			sock.Close()
		}
	}()

	sa := addr.raw()
	err = socket.Bind(windows.Handle(sock.handle), &sa)
	if err != nil {
		return nil, conn.opErr(op, os.NewSyscallError("bind", err))
	}

	c, err := sock.prepareIO()
	if err != nil {
		return nil, conn.opErr(op, err)
	}
	defer sock.wg.Done()
	var bytes uint32
	for i := uint(0); i <= d.Retries; i++ {
		err = socket.ConnectEx(
			windows.Handle(sock.handle),
			&sa,
			nil, // sendBuf
			0,   // sendDataLen
			&bytes,
			(*windows.Overlapped)(unsafe.Pointer(&c.o)))
		_, err = sock.asyncIO(c, nil, bytes, err)
		if i < d.Retries && canRedial(err) {
			if err = d.redialWait(ctx); err == nil {
				continue
			}
		}
		break
	}
	if err != nil {
		return nil, conn.opErr(op, os.NewSyscallError("connectex", err))
	}

	// update the connection properties, so shutdown can be used
	if err = windows.Setsockopt(
		windows.Handle(sock.handle),
		windows.SOL_SOCKET,
		windows.SO_UPDATE_CONNECT_CONTEXT,
		nil, // optvalue
		0,   // optlen
	); err != nil {
		return nil, conn.opErr(op, os.NewSyscallError("setsockopt", err))
	}

	// get the local name
	var sal rawHvsockAddr
	err = socket.GetSockName(windows.Handle(sock.handle), &sal)
	if err != nil {
		return nil, conn.opErr(op, os.NewSyscallError("getsockname", err))
	}
	conn.local.fromRaw(&sal)

	// one last check for timeout, since asyncIO doesn't check the context
	if err = ctx.Err(); err != nil {
		return nil, conn.opErr(op, err)
	}

	conn.sock = sock
	sock = nil

	return conn, nil
}

// redialWait waits before attempting to redial, resetting the timer as appropriate.
func (d *HvsockDialer) redialWait(ctx context.Context) (err error) {
	if d.RetryWait == 0 {
		return nil
	}

	if d.rt == nil {
		d.rt = time.NewTimer(d.RetryWait)
	} else {
		// should already be stopped and drained
		d.rt.Reset(d.RetryWait)
	}

	select {
	case <-ctx.Done():
	case <-d.rt.C:
		return nil
	}

	// stop and drain the timer
	if !d.rt.Stop() {
		<-d.rt.C
	}
	return ctx.Err()
}

// assumes error is a plain, unwrapped syscall.Errno provided by direct syscall.
func canRedial(err error) bool {
	//nolint:errorlint // guaranteed to be an Errno
	switch err {
	case windows.WSAECONNREFUSED, windows.WSAENETUNREACH, windows.WSAETIMEDOUT,
		windows.ERROR_CONNECTION_REFUSED, windows.ERROR_CONNECTION_UNAVAIL:
		return true
	default:
		return false
	}
}

func (conn *HvsockConn) opErr(op string, err error) error {
	// translate from "file closed" to "socket closed"
	if errors.Is(err, ErrFileClosed) {
		err = socket.ErrSocketClosed
	}
	return &net.OpError{Op: op, Net: "hvsock", Source: &conn.local, Addr: &conn.remote, Err: err}
}

func (conn *HvsockConn) Read(b []byte) (int, error) {
	c, err := conn.sock.prepareIO()
	if err != nil {
		return 0, conn.opErr("read", err)
	}
	defer conn.sock.wg.Done()
	buf := syscall.WSABuf{Buf: &b[0], Len: uint32(len(b))}
	var flags, bytes uint32
	err = syscall.WSARecv(conn.sock.handle, &buf, 1, &bytes, &flags, &c.o, nil)
	n, err := conn.sock.asyncIO(c, &conn.sock.readDeadline, bytes, err)
	if err != nil {
		var eno windows.Errno
		if errors.As(err, &eno) {
			err = os.NewSyscallError("wsarecv", eno)
		}
		return 0, conn.opErr("read", err)
	} else if n == 0 {
		err = io.EOF
	}
	return n, err
}

func (conn *HvsockConn) Write(b []byte) (int, error) {
	t := 0
	for len(b) != 0 {
		n, err := conn.write(b)
		if err != nil {
			return t + n, err
		}
		t += n
		b = b[n:]
	}
	return t, nil
}

func (conn *HvsockConn) write(b []byte) (int, error) {
	c, err := conn.sock.prepareIO()
	if err != nil {
		return 0, conn.opErr("write", err)
	}
	defer conn.sock.wg.Done()
	buf := syscall.WSABuf{Buf: &b[0], Len: uint32(len(b))}
	var bytes uint32
	err = syscall.WSASend(conn.sock.handle, &buf, 1, &bytes, 0, &c.o, nil)
	n, err := conn.sock.asyncIO(c, &conn.sock.writeDeadline, bytes, err)
	if err != nil {
		var eno windows.Errno
		if errors.As(err, &eno) {
			err = os.NewSyscallError("wsasend", eno)
		}
		return 0, conn.opErr("write", err)
	}
	return n, err
}

// Close closes the socket connection, failing any pending read or write calls.
func (conn *HvsockConn) Close() error {
	return conn.sock.Close()
}

func (conn *HvsockConn) IsClosed() bool {
	return conn.sock.IsClosed()
}

// shutdown disables sending or receiving on a socket.
func (conn *HvsockConn) shutdown(how int) error {
	if conn.IsClosed() {
		return socket.ErrSocketClosed
	}

	err := syscall.Shutdown(conn.sock.handle, how)
	if err != nil {
		// If the connection was closed, shutdowns fail with "not connected"
		if errors.Is(err, windows.WSAENOTCONN) ||
			errors.Is(err, windows.WSAESHUTDOWN) {
			err = socket.ErrSocketClosed
		}
		return os.NewSyscallError("shutdown", err)
	}
	return nil
}

// CloseRead shuts down the read end of the socket, preventing future read operations.
func (conn *HvsockConn) CloseRead() error {
	err := conn.shutdown(syscall.SHUT_RD)
	if err != nil {
		return conn.opErr("closeread", err)
	}
	return nil
}

// CloseWrite shuts down the write end of the socket, preventing future write operations and
// notifying the other endpoint that no more data will be written.
func (conn *HvsockConn) CloseWrite() error {
	err := conn.shutdown(syscall.SHUT_WR)
	if err != nil {
		return conn.opErr("closewrite", err)
	}
	return nil
}

// LocalAddr returns the local address of the connection.
func (conn *HvsockConn) LocalAddr() net.Addr {
	return &conn.local
}

// RemoteAddr returns the remote address of the connection.
func (conn *HvsockConn) RemoteAddr() net.Addr {
	return &conn.remote
}

// SetDeadline implements the net.Conn SetDeadline method.
func (conn *HvsockConn) SetDeadline(t time.Time) error {
	// todo: implement `SetDeadline` for `win32File`
	if err := conn.SetReadDeadline(t); err != nil {
		return fmt.Errorf("set read deadline: %w", err)
	}
	if err := conn.SetWriteDeadline(t); err != nil {
		return fmt.Errorf("set write deadline: %w", err)
	}
	return nil
}

// SetReadDeadline implements the net.Conn SetReadDeadline method.
func (conn *HvsockConn) SetReadDeadline(t time.Time) error {
	return conn.sock.SetReadDeadline(t)
}

// SetWriteDeadline implements the net.Conn SetWriteDeadline method.
func (conn *HvsockConn) SetWriteDeadline(t time.Time) error {
	return conn.sock.SetWriteDeadline(t)
}
  070701000000FA000041ED000000000000000000000005645E367C00000000000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/internal 070701000000FB000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/internal/fs  070701000000FC000081A4000000000000000000000001645E367C00000044000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/internal/fs/doc.go   // This package contains Win32 filesystem functionality.
package fs
070701000000FD000081A4000000000000000000000001645E367C00001E89000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/internal/fs/fs.go    //go:build windows

package fs

import (
	"golang.org/x/sys/windows"

	"github.com/Microsoft/go-winio/internal/stringbuffer"
)

//go:generate go run github.com/Microsoft/go-winio/tools/mkwinsyscall -output zsyscall_windows.go fs.go

// https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilew
//sys CreateFile(name string, access AccessMask, mode FileShareMode, sa *syscall.SecurityAttributes, createmode FileCreationDisposition, attrs FileFlagOrAttribute, templatefile windows.Handle) (handle windows.Handle, err error) [failretval==windows.InvalidHandle] = CreateFileW

const NullHandle windows.Handle = 0

// AccessMask defines standard, specific, and generic rights.
//
//	Bitmask:
//	 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
//	 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
//	+---------------+---------------+-------------------------------+
//	|G|G|G|G|Resvd|A| StandardRights|         SpecificRights        |
//	|R|W|E|A|     |S|               |                               |
//	+-+-------------+---------------+-------------------------------+
//
//	GR     Generic Read
//	GW     Generic Write
//	GE     Generic Exectue
//	GA     Generic All
//	Resvd  Reserved
//	AS     Access Security System
//
// https://learn.microsoft.com/en-us/windows/win32/secauthz/access-mask
//
// https://learn.microsoft.com/en-us/windows/win32/secauthz/generic-access-rights
//
// https://learn.microsoft.com/en-us/windows/win32/fileio/file-access-rights-constants
type AccessMask = windows.ACCESS_MASK

//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API.
const (
	// Not actually any.
	//
	// For CreateFile: "query certain metadata such as file, directory, or device attributes without accessing that file or device"
	// https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilew#parameters
	FILE_ANY_ACCESS AccessMask = 0

	// Specific Object Access
	// from ntioapi.h

	FILE_READ_DATA      AccessMask = (0x0001) // file & pipe
	FILE_LIST_DIRECTORY AccessMask = (0x0001) // directory

	FILE_WRITE_DATA AccessMask = (0x0002) // file & pipe
	FILE_ADD_FILE   AccessMask = (0x0002) // directory

	FILE_APPEND_DATA          AccessMask = (0x0004) // file
	FILE_ADD_SUBDIRECTORY     AccessMask = (0x0004) // directory
	FILE_CREATE_PIPE_INSTANCE AccessMask = (0x0004) // named pipe

	FILE_READ_EA         AccessMask = (0x0008) // file & directory
	FILE_READ_PROPERTIES AccessMask = FILE_READ_EA

	FILE_WRITE_EA         AccessMask = (0x0010) // file & directory
	FILE_WRITE_PROPERTIES AccessMask = FILE_WRITE_EA

	FILE_EXECUTE  AccessMask = (0x0020) // file
	FILE_TRAVERSE AccessMask = (0x0020) // directory

	FILE_DELETE_CHILD AccessMask = (0x0040) // directory

	FILE_READ_ATTRIBUTES AccessMask = (0x0080) // all

	FILE_WRITE_ATTRIBUTES AccessMask = (0x0100) // all

	FILE_ALL_ACCESS      AccessMask = (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF)
	FILE_GENERIC_READ    AccessMask = (STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE)
	FILE_GENERIC_WRITE   AccessMask = (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE)
	FILE_GENERIC_EXECUTE AccessMask = (STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES | FILE_EXECUTE | SYNCHRONIZE)

	SPECIFIC_RIGHTS_ALL AccessMask = 0x0000FFFF

	// Standard Access
	// from ntseapi.h

	DELETE       AccessMask = 0x0001_0000
	READ_CONTROL AccessMask = 0x0002_0000
	WRITE_DAC    AccessMask = 0x0004_0000
	WRITE_OWNER  AccessMask = 0x0008_0000
	SYNCHRONIZE  AccessMask = 0x0010_0000

	STANDARD_RIGHTS_REQUIRED AccessMask = 0x000F_0000

	STANDARD_RIGHTS_READ    AccessMask = READ_CONTROL
	STANDARD_RIGHTS_WRITE   AccessMask = READ_CONTROL
	STANDARD_RIGHTS_EXECUTE AccessMask = READ_CONTROL

	STANDARD_RIGHTS_ALL AccessMask = 0x001F_0000
)

type FileShareMode uint32

//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API.
const (
	FILE_SHARE_NONE        FileShareMode = 0x00
	FILE_SHARE_READ        FileShareMode = 0x01
	FILE_SHARE_WRITE       FileShareMode = 0x02
	FILE_SHARE_DELETE      FileShareMode = 0x04
	FILE_SHARE_VALID_FLAGS FileShareMode = 0x07
)

type FileCreationDisposition uint32

//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API.
const (
	// from winbase.h

	CREATE_NEW        FileCreationDisposition = 0x01
	CREATE_ALWAYS     FileCreationDisposition = 0x02
	OPEN_EXISTING     FileCreationDisposition = 0x03
	OPEN_ALWAYS       FileCreationDisposition = 0x04
	TRUNCATE_EXISTING FileCreationDisposition = 0x05
)

// CreateFile and co. take flags or attributes together as one parameter.
// Define alias until we can use generics to allow both

// https://learn.microsoft.com/en-us/windows/win32/fileio/file-attribute-constants
type FileFlagOrAttribute uint32

//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API.
const ( // from winnt.h
	FILE_FLAG_WRITE_THROUGH       FileFlagOrAttribute = 0x8000_0000
	FILE_FLAG_OVERLAPPED          FileFlagOrAttribute = 0x4000_0000
	FILE_FLAG_NO_BUFFERING        FileFlagOrAttribute = 0x2000_0000
	FILE_FLAG_RANDOM_ACCESS       FileFlagOrAttribute = 0x1000_0000
	FILE_FLAG_SEQUENTIAL_SCAN     FileFlagOrAttribute = 0x0800_0000
	FILE_FLAG_DELETE_ON_CLOSE     FileFlagOrAttribute = 0x0400_0000
	FILE_FLAG_BACKUP_SEMANTICS    FileFlagOrAttribute = 0x0200_0000
	FILE_FLAG_POSIX_SEMANTICS     FileFlagOrAttribute = 0x0100_0000
	FILE_FLAG_OPEN_REPARSE_POINT  FileFlagOrAttribute = 0x0020_0000
	FILE_FLAG_OPEN_NO_RECALL      FileFlagOrAttribute = 0x0010_0000
	FILE_FLAG_FIRST_PIPE_INSTANCE FileFlagOrAttribute = 0x0008_0000
)

type FileSQSFlag = FileFlagOrAttribute

//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API.
const ( // from winbase.h
	SECURITY_ANONYMOUS      FileSQSFlag = FileSQSFlag(SecurityAnonymous << 16)
	SECURITY_IDENTIFICATION FileSQSFlag = FileSQSFlag(SecurityIdentification << 16)
	SECURITY_IMPERSONATION  FileSQSFlag = FileSQSFlag(SecurityImpersonation << 16)
	SECURITY_DELEGATION     FileSQSFlag = FileSQSFlag(SecurityDelegation << 16)

	SECURITY_SQOS_PRESENT     FileSQSFlag = 0x00100000
	SECURITY_VALID_SQOS_FLAGS FileSQSFlag = 0x001F0000
)

// GetFinalPathNameByHandle flags
//
// https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getfinalpathnamebyhandlew#parameters
type GetFinalPathFlag uint32

//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API.
const (
	GetFinalPathDefaultFlag GetFinalPathFlag = 0x0

	FILE_NAME_NORMALIZED GetFinalPathFlag = 0x0
	FILE_NAME_OPENED     GetFinalPathFlag = 0x8

	VOLUME_NAME_DOS  GetFinalPathFlag = 0x0
	VOLUME_NAME_GUID GetFinalPathFlag = 0x1
	VOLUME_NAME_NT   GetFinalPathFlag = 0x2
	VOLUME_NAME_NONE GetFinalPathFlag = 0x4
)

// getFinalPathNameByHandle facilitates calling the Windows API GetFinalPathNameByHandle
// with the given handle and flags. It transparently takes care of creating a buffer of the
// correct size for the call.
//
// https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getfinalpathnamebyhandlew
func GetFinalPathNameByHandle(h windows.Handle, flags GetFinalPathFlag) (string, error) {
	b := stringbuffer.NewWString()
	//TODO: can loop infinitely if Win32 keeps returning the same (or a larger) n?
	for {
		n, err := windows.GetFinalPathNameByHandle(h, b.Pointer(), b.Cap(), uint32(flags))
		if err != nil {
			return "", err
		}
		// If the buffer wasn't large enough, n will be the total size needed (including null terminator).
		// Resize and try again.
		if n > b.Cap() {
			b.ResizeTo(n)
			continue
		}
		// If the buffer is large enough, n will be the size not including the null terminator.
		// Convert to a Go string and return.
		return b.String(), nil
	}
}
   070701000000FE000081A4000000000000000000000001645E367C000001D5000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/internal/fs/security.go  package fs

// https://learn.microsoft.com/en-us/windows/win32/api/winnt/ne-winnt-security_impersonation_level
type SecurityImpersonationLevel int32 // C default enums underlying type is `int`, which is Go `int32`

// Impersonation levels
const (
	SecurityAnonymous      SecurityImpersonationLevel = 0
	SecurityIdentification SecurityImpersonationLevel = 1
	SecurityImpersonation  SecurityImpersonationLevel = 2
	SecurityDelegation     SecurityImpersonationLevel = 3
)
   070701000000FF000081A4000000000000000000000001645E367C00000765000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go  //go:build windows

// Code generated by 'go generate' using "github.com/Microsoft/go-winio/tools/mkwinsyscall"; DO NOT EDIT.

package fs

import (
	"syscall"
	"unsafe"

	"golang.org/x/sys/windows"
)

var _ unsafe.Pointer

// Do the interface allocations only once for common
// Errno values.
const (
	errnoERROR_IO_PENDING = 997
)

var (
	errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING)
	errERROR_EINVAL     error = syscall.EINVAL
)

// errnoErr returns common boxed Errno values, to prevent
// allocations at runtime.
func errnoErr(e syscall.Errno) error {
	switch e {
	case 0:
		return errERROR_EINVAL
	case errnoERROR_IO_PENDING:
		return errERROR_IO_PENDING
	}
	// TODO: add more here, after collecting data on the common
	// error values see on Windows. (perhaps when running
	// all.bat?)
	return e
}

var (
	modkernel32 = windows.NewLazySystemDLL("kernel32.dll")

	procCreateFileW = modkernel32.NewProc("CreateFileW")
)

func CreateFile(name string, access AccessMask, mode FileShareMode, sa *syscall.SecurityAttributes, createmode FileCreationDisposition, attrs FileFlagOrAttribute, templatefile windows.Handle) (handle windows.Handle, err error) {
	var _p0 *uint16
	_p0, err = syscall.UTF16PtrFromString(name)
	if err != nil {
		return
	}
	return _CreateFile(_p0, access, mode, sa, createmode, attrs, templatefile)
}

func _CreateFile(name *uint16, access AccessMask, mode FileShareMode, sa *syscall.SecurityAttributes, createmode FileCreationDisposition, attrs FileFlagOrAttribute, templatefile windows.Handle) (handle windows.Handle, err error) {
	r0, _, e1 := syscall.Syscall9(procCreateFileW.Addr(), 7, uintptr(unsafe.Pointer(name)), uintptr(access), uintptr(mode), uintptr(unsafe.Pointer(sa)), uintptr(createmode), uintptr(attrs), uintptr(templatefile), 0, 0)
	handle = windows.Handle(r0)
	if handle == windows.InvalidHandle {
		err = errnoErr(e1)
	}
	return
}
   07070100000100000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/internal/socket  07070100000101000081A4000000000000000000000001645E367C000002D3000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/internal/socket/rawaddr.go   package socket

import (
	"unsafe"
)

// RawSockaddr allows structs to be used with [Bind] and [ConnectEx]. The
// struct must meet the Win32 sockaddr requirements specified here:
// https://docs.microsoft.com/en-us/windows/win32/winsock/sockaddr-2
//
// Specifically, the struct size must be least larger than an int16 (unsigned short)
// for the address family.
type RawSockaddr interface {
	// Sockaddr returns a pointer to the RawSockaddr and its struct size, allowing
	// for the RawSockaddr's data to be overwritten by syscalls (if necessary).
	//
	// It is the callers responsibility to validate that the values are valid; invalid
	// pointers or size can cause a panic.
	Sockaddr() (unsafe.Pointer, int32, error)
}
 07070100000102000081A4000000000000000000000001645E367C000013B7000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/internal/socket/socket.go    //go:build windows

package socket

import (
	"errors"
	"fmt"
	"net"
	"sync"
	"syscall"
	"unsafe"

	"github.com/Microsoft/go-winio/pkg/guid"
	"golang.org/x/sys/windows"
)

//go:generate go run github.com/Microsoft/go-winio/tools/mkwinsyscall -output zsyscall_windows.go socket.go

//sys getsockname(s windows.Handle, name unsafe.Pointer, namelen *int32) (err error) [failretval==socketError] = ws2_32.getsockname
//sys getpeername(s windows.Handle, name unsafe.Pointer, namelen *int32) (err error) [failretval==socketError] = ws2_32.getpeername
//sys bind(s windows.Handle, name unsafe.Pointer, namelen int32) (err error) [failretval==socketError] = ws2_32.bind

const socketError = uintptr(^uint32(0))

var (
	// todo(helsaawy): create custom error types to store the desired vs actual size and addr family?

	ErrBufferSize     = errors.New("buffer size")
	ErrAddrFamily     = errors.New("address family")
	ErrInvalidPointer = errors.New("invalid pointer")
	ErrSocketClosed   = fmt.Errorf("socket closed: %w", net.ErrClosed)
)

// todo(helsaawy): replace these with generics, ie: GetSockName[S RawSockaddr](s windows.Handle) (S, error)

// GetSockName writes the local address of socket s to the [RawSockaddr] rsa.
// If rsa is not large enough, the [windows.WSAEFAULT] is returned.
func GetSockName(s windows.Handle, rsa RawSockaddr) error {
	ptr, l, err := rsa.Sockaddr()
	if err != nil {
		return fmt.Errorf("could not retrieve socket pointer and size: %w", err)
	}

	// although getsockname returns WSAEFAULT if the buffer is too small, it does not set
	// &l to the correct size, so--apart from doubling the buffer repeatedly--there is no remedy
	return getsockname(s, ptr, &l)
}

// GetPeerName returns the remote address the socket is connected to.
//
// See [GetSockName] for more information.
func GetPeerName(s windows.Handle, rsa RawSockaddr) error {
	ptr, l, err := rsa.Sockaddr()
	if err != nil {
		return fmt.Errorf("could not retrieve socket pointer and size: %w", err)
	}

	return getpeername(s, ptr, &l)
}

func Bind(s windows.Handle, rsa RawSockaddr) (err error) {
	ptr, l, err := rsa.Sockaddr()
	if err != nil {
		return fmt.Errorf("could not retrieve socket pointer and size: %w", err)
	}

	return bind(s, ptr, l)
}

// "golang.org/x/sys/windows".ConnectEx and .Bind only accept internal implementations of the
// their sockaddr interface, so they cannot be used with HvsockAddr
// Replicate functionality here from
// https://cs.opensource.google/go/x/sys/+/master:windows/syscall_windows.go

// The function pointers to `AcceptEx`, `ConnectEx` and `GetAcceptExSockaddrs` must be loaded at
// runtime via a WSAIoctl call:
// https://docs.microsoft.com/en-us/windows/win32/api/Mswsock/nc-mswsock-lpfn_connectex#remarks

type runtimeFunc struct {
	id   guid.GUID
	once sync.Once
	addr uintptr
	err  error
}

func (f *runtimeFunc) Load() error {
	f.once.Do(func() {
		var s windows.Handle
		s, f.err = windows.Socket(windows.AF_INET, windows.SOCK_STREAM, windows.IPPROTO_TCP)
		if f.err != nil {
			return
		}
		defer windows.CloseHandle(s) //nolint:errcheck

		var n uint32
		f.err = windows.WSAIoctl(s,
			windows.SIO_GET_EXTENSION_FUNCTION_POINTER,
			(*byte)(unsafe.Pointer(&f.id)),
			uint32(unsafe.Sizeof(f.id)),
			(*byte)(unsafe.Pointer(&f.addr)),
			uint32(unsafe.Sizeof(f.addr)),
			&n,
			nil, // overlapped
			0,   // completionRoutine
		)
	})
	return f.err
}

var (
	// todo: add `AcceptEx` and `GetAcceptExSockaddrs`
	WSAID_CONNECTEX = guid.GUID{ //revive:disable-line:var-naming ALL_CAPS
		Data1: 0x25a207b9,
		Data2: 0xddf3,
		Data3: 0x4660,
		Data4: [8]byte{0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e},
	}

	connectExFunc = runtimeFunc{id: WSAID_CONNECTEX}
)

func ConnectEx(
	fd windows.Handle,
	rsa RawSockaddr,
	sendBuf *byte,
	sendDataLen uint32,
	bytesSent *uint32,
	overlapped *windows.Overlapped,
) error {
	if err := connectExFunc.Load(); err != nil {
		return fmt.Errorf("failed to load ConnectEx function pointer: %w", err)
	}
	ptr, n, err := rsa.Sockaddr()
	if err != nil {
		return err
	}
	return connectEx(fd, ptr, n, sendBuf, sendDataLen, bytesSent, overlapped)
}

// BOOL LpfnConnectex(
//   [in]           SOCKET s,
//   [in]           const sockaddr *name,
//   [in]           int namelen,
//   [in, optional] PVOID lpSendBuffer,
//   [in]           DWORD dwSendDataLength,
//   [out]          LPDWORD lpdwBytesSent,
//   [in]           LPOVERLAPPED lpOverlapped
// )

func connectEx(
	s windows.Handle,
	name unsafe.Pointer,
	namelen int32,
	sendBuf *byte,
	sendDataLen uint32,
	bytesSent *uint32,
	overlapped *windows.Overlapped,
) (err error) {
	// todo: after upgrading to 1.18, switch from syscall.Syscall9 to syscall.SyscallN
	r1, _, e1 := syscall.Syscall9(connectExFunc.addr,
		7,
		uintptr(s),
		uintptr(name),
		uintptr(namelen),
		uintptr(unsafe.Pointer(sendBuf)),
		uintptr(sendDataLen),
		uintptr(unsafe.Pointer(bytesSent)),
		uintptr(unsafe.Pointer(overlapped)),
		0,
		0)
	if r1 == 0 {
		if e1 != 0 {
			err = error(e1)
		} else {
			err = syscall.EINVAL
		}
	}
	return err
}
 07070100000103000081A4000000000000000000000001645E367C00000706000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go  //go:build windows

// Code generated by 'go generate' using "github.com/Microsoft/go-winio/tools/mkwinsyscall"; DO NOT EDIT.

package socket

import (
	"syscall"
	"unsafe"

	"golang.org/x/sys/windows"
)

var _ unsafe.Pointer

// Do the interface allocations only once for common
// Errno values.
const (
	errnoERROR_IO_PENDING = 997
)

var (
	errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING)
	errERROR_EINVAL     error = syscall.EINVAL
)

// errnoErr returns common boxed Errno values, to prevent
// allocations at runtime.
func errnoErr(e syscall.Errno) error {
	switch e {
	case 0:
		return errERROR_EINVAL
	case errnoERROR_IO_PENDING:
		return errERROR_IO_PENDING
	}
	// TODO: add more here, after collecting data on the common
	// error values see on Windows. (perhaps when running
	// all.bat?)
	return e
}

var (
	modws2_32 = windows.NewLazySystemDLL("ws2_32.dll")

	procbind        = modws2_32.NewProc("bind")
	procgetpeername = modws2_32.NewProc("getpeername")
	procgetsockname = modws2_32.NewProc("getsockname")
)

func bind(s windows.Handle, name unsafe.Pointer, namelen int32) (err error) {
	r1, _, e1 := syscall.Syscall(procbind.Addr(), 3, uintptr(s), uintptr(name), uintptr(namelen))
	if r1 == socketError {
		err = errnoErr(e1)
	}
	return
}

func getpeername(s windows.Handle, name unsafe.Pointer, namelen *int32) (err error) {
	r1, _, e1 := syscall.Syscall(procgetpeername.Addr(), 3, uintptr(s), uintptr(name), uintptr(unsafe.Pointer(namelen)))
	if r1 == socketError {
		err = errnoErr(e1)
	}
	return
}

func getsockname(s windows.Handle, name unsafe.Pointer, namelen *int32) (err error) {
	r1, _, e1 := syscall.Syscall(procgetsockname.Addr(), 3, uintptr(s), uintptr(name), uintptr(unsafe.Pointer(namelen)))
	if r1 == socketError {
		err = errnoErr(e1)
	}
	return
}
  07070100000104000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/internal/stringbuffer    07070100000105000081A4000000000000000000000001645E367C00000D90000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go package stringbuffer

import (
	"sync"
	"unicode/utf16"
)

// TODO: worth exporting and using in mkwinsyscall?

// Uint16BufferSize is the buffer size in the pool, chosen somewhat arbitrarily to accommodate
// large path strings:
// MAX_PATH (260) + size of volume GUID prefix (49) + null terminator = 310.
const MinWStringCap = 310

// use *[]uint16 since []uint16 creates an extra allocation where the slice header
// is copied to heap and then referenced via pointer in the interface header that sync.Pool
// stores.
var pathPool = sync.Pool{ // if go1.18+ adds Pool[T], use that to store []uint16 directly
	New: func() interface{} {
		b := make([]uint16, MinWStringCap)
		return &b
	},
}

func newBuffer() []uint16 { return *(pathPool.Get().(*[]uint16)) }

// freeBuffer copies the slice header data, and puts a pointer to that in the pool.
// This avoids taking a pointer to the slice header in WString, which can be set to nil.
func freeBuffer(b []uint16) { pathPool.Put(&b) }

// WString is a wide string buffer ([]uint16) meant for storing UTF-16 encoded strings
// for interacting with Win32 APIs.
// Sizes are specified as uint32 and not int.
//
// It is not thread safe.
type WString struct {
	// type-def allows casting to []uint16 directly, use struct to prevent that and allow adding fields in the future.

	// raw buffer
	b []uint16
}

// NewWString returns a [WString] allocated from a shared pool with an
// initial capacity of at least [MinWStringCap].
// Since the buffer may have been previously used, its contents are not guaranteed to be empty.
//
// The buffer should be freed via [WString.Free]
func NewWString() *WString {
	return &WString{
		b: newBuffer(),
	}
}

func (b *WString) Free() {
	if b.empty() {
		return
	}
	freeBuffer(b.b)
	b.b = nil
}

// ResizeTo grows the buffer to at least c and returns the new capacity, freeing the
// previous buffer back into pool.
func (b *WString) ResizeTo(c uint32) uint32 {
	// allready sufficient (or n is 0)
	if c <= b.Cap() {
		return b.Cap()
	}

	if c <= MinWStringCap {
		c = MinWStringCap
	}
	// allocate at-least double buffer size, as is done in [bytes.Buffer] and other places
	if c <= 2*b.Cap() {
		c = 2 * b.Cap()
	}

	b2 := make([]uint16, c)
	if !b.empty() {
		copy(b2, b.b)
		freeBuffer(b.b)
	}
	b.b = b2
	return c
}

// Buffer returns the underlying []uint16 buffer.
func (b *WString) Buffer() []uint16 {
	if b.empty() {
		return nil
	}
	return b.b
}

// Pointer returns a pointer to the first uint16 in the buffer.
// If the [WString.Free] has already been called, the pointer will be nil.
func (b *WString) Pointer() *uint16 {
	if b.empty() {
		return nil
	}
	return &b.b[0]
}

// String returns the returns the UTF-8 encoding of the UTF-16 string in the buffer.
//
// It assumes that the data is null-terminated.
func (b *WString) String() string {
	// Using [windows.UTF16ToString] would require importing "golang.org/x/sys/windows"
	// and would make this code Windows-only, which makes no sense.
	// So copy UTF16ToString code into here.
	// If other windows-specific code is added, switch to [windows.UTF16ToString]

	s := b.b
	for i, v := range s {
		if v == 0 {
			s = s[:i]
			break
		}
	}
	return string(utf16.Decode(s))
}

// Cap returns the underlying buffer capacity.
func (b *WString) Cap() uint32 {
	if b.empty() {
		return 0
	}
	return b.cap()
}

func (b *WString) cap() uint32 { return uint32(cap(b.b)) }
func (b *WString) empty() bool { return b == nil || b.cap() == 0 }
07070100000106000081A4000000000000000000000001645E367C000036EE000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/pipe.go  //go:build windows
// +build windows

package winio

import (
	"context"
	"errors"
	"fmt"
	"io"
	"net"
	"os"
	"runtime"
	"syscall"
	"time"
	"unsafe"

	"golang.org/x/sys/windows"

	"github.com/Microsoft/go-winio/internal/fs"
)

//sys connectNamedPipe(pipe syscall.Handle, o *syscall.Overlapped) (err error) = ConnectNamedPipe
//sys createNamedPipe(name string, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *syscall.SecurityAttributes) (handle syscall.Handle, err error)  [failretval==syscall.InvalidHandle] = CreateNamedPipeW
//sys getNamedPipeInfo(pipe syscall.Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) = GetNamedPipeInfo
//sys getNamedPipeHandleState(pipe syscall.Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) = GetNamedPipeHandleStateW
//sys localAlloc(uFlags uint32, length uint32) (ptr uintptr) = LocalAlloc
//sys ntCreateNamedPipeFile(pipe *syscall.Handle, access uint32, oa *objectAttributes, iosb *ioStatusBlock, share uint32, disposition uint32, options uint32, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (status ntStatus) = ntdll.NtCreateNamedPipeFile
//sys rtlNtStatusToDosError(status ntStatus) (winerr error) = ntdll.RtlNtStatusToDosErrorNoTeb
//sys rtlDosPathNameToNtPathName(name *uint16, ntName *unicodeString, filePart uintptr, reserved uintptr) (status ntStatus) = ntdll.RtlDosPathNameToNtPathName_U
//sys rtlDefaultNpAcl(dacl *uintptr) (status ntStatus) = ntdll.RtlDefaultNpAcl

type ioStatusBlock struct {
	Status, Information uintptr
}

type objectAttributes struct {
	Length             uintptr
	RootDirectory      uintptr
	ObjectName         *unicodeString
	Attributes         uintptr
	SecurityDescriptor *securityDescriptor
	SecurityQoS        uintptr
}

type unicodeString struct {
	Length        uint16
	MaximumLength uint16
	Buffer        uintptr
}

type securityDescriptor struct {
	Revision byte
	Sbz1     byte
	Control  uint16
	Owner    uintptr
	Group    uintptr
	Sacl     uintptr //revive:disable-line:var-naming SACL, not Sacl
	Dacl     uintptr //revive:disable-line:var-naming DACL, not Dacl
}

type ntStatus int32

func (status ntStatus) Err() error {
	if status >= 0 {
		return nil
	}
	return rtlNtStatusToDosError(status)
}

var (
	// ErrPipeListenerClosed is returned for pipe operations on listeners that have been closed.
	ErrPipeListenerClosed = net.ErrClosed

	errPipeWriteClosed = errors.New("pipe has been closed for write")
)

type win32Pipe struct {
	*win32File
	path string
}

type win32MessageBytePipe struct {
	win32Pipe
	writeClosed bool
	readEOF     bool
}

type pipeAddress string

func (f *win32Pipe) LocalAddr() net.Addr {
	return pipeAddress(f.path)
}

func (f *win32Pipe) RemoteAddr() net.Addr {
	return pipeAddress(f.path)
}

func (f *win32Pipe) SetDeadline(t time.Time) error {
	if err := f.SetReadDeadline(t); err != nil {
		return err
	}
	return f.SetWriteDeadline(t)
}

// CloseWrite closes the write side of a message pipe in byte mode.
func (f *win32MessageBytePipe) CloseWrite() error {
	if f.writeClosed {
		return errPipeWriteClosed
	}
	err := f.win32File.Flush()
	if err != nil {
		return err
	}
	_, err = f.win32File.Write(nil)
	if err != nil {
		return err
	}
	f.writeClosed = true
	return nil
}

// Write writes bytes to a message pipe in byte mode. Zero-byte writes are ignored, since
// they are used to implement CloseWrite().
func (f *win32MessageBytePipe) Write(b []byte) (int, error) {
	if f.writeClosed {
		return 0, errPipeWriteClosed
	}
	if len(b) == 0 {
		return 0, nil
	}
	return f.win32File.Write(b)
}

// Read reads bytes from a message pipe in byte mode. A read of a zero-byte message on a message
// mode pipe will return io.EOF, as will all subsequent reads.
func (f *win32MessageBytePipe) Read(b []byte) (int, error) {
	if f.readEOF {
		return 0, io.EOF
	}
	n, err := f.win32File.Read(b)
	if err == io.EOF { //nolint:errorlint
		// If this was the result of a zero-byte read, then
		// it is possible that the read was due to a zero-size
		// message. Since we are simulating CloseWrite with a
		// zero-byte message, ensure that all future Read() calls
		// also return EOF.
		f.readEOF = true
	} else if err == syscall.ERROR_MORE_DATA { //nolint:errorlint // err is Errno
		// ERROR_MORE_DATA indicates that the pipe's read mode is message mode
		// and the message still has more bytes. Treat this as a success, since
		// this package presents all named pipes as byte streams.
		err = nil
	}
	return n, err
}

func (pipeAddress) Network() string {
	return "pipe"
}

func (s pipeAddress) String() string {
	return string(s)
}

// tryDialPipe attempts to dial the pipe at `path` until `ctx` cancellation or timeout.
func tryDialPipe(ctx context.Context, path *string, access fs.AccessMask) (syscall.Handle, error) {
	for {
		select {
		case <-ctx.Done():
			return syscall.Handle(0), ctx.Err()
		default:
			wh, err := fs.CreateFile(*path,
				access,
				0,   // mode
				nil, // security attributes
				fs.OPEN_EXISTING,
				fs.FILE_FLAG_OVERLAPPED|fs.SECURITY_SQOS_PRESENT|fs.SECURITY_ANONYMOUS,
				0, // template file handle
			)
			h := syscall.Handle(wh)
			if err == nil {
				return h, nil
			}
			if err != windows.ERROR_PIPE_BUSY { //nolint:errorlint // err is Errno
				return h, &os.PathError{Err: err, Op: "open", Path: *path}
			}
			// Wait 10 msec and try again. This is a rather simplistic
			// view, as we always try each 10 milliseconds.
			time.Sleep(10 * time.Millisecond)
		}
	}
}

// DialPipe connects to a named pipe by path, timing out if the connection
// takes longer than the specified duration. If timeout is nil, then we use
// a default timeout of 2 seconds.  (We do not use WaitNamedPipe.)
func DialPipe(path string, timeout *time.Duration) (net.Conn, error) {
	var absTimeout time.Time
	if timeout != nil {
		absTimeout = time.Now().Add(*timeout)
	} else {
		absTimeout = time.Now().Add(2 * time.Second)
	}
	ctx, cancel := context.WithDeadline(context.Background(), absTimeout)
	defer cancel()
	conn, err := DialPipeContext(ctx, path)
	if errors.Is(err, context.DeadlineExceeded) {
		return nil, ErrTimeout
	}
	return conn, err
}

// DialPipeContext attempts to connect to a named pipe by `path` until `ctx`
// cancellation or timeout.
func DialPipeContext(ctx context.Context, path string) (net.Conn, error) {
	return DialPipeAccess(ctx, path, syscall.GENERIC_READ|syscall.GENERIC_WRITE)
}

// DialPipeAccess attempts to connect to a named pipe by `path` with `access` until `ctx`
// cancellation or timeout.
func DialPipeAccess(ctx context.Context, path string, access uint32) (net.Conn, error) {
	var err error
	var h syscall.Handle
	h, err = tryDialPipe(ctx, &path, fs.AccessMask(access))
	if err != nil {
		return nil, err
	}

	var flags uint32
	err = getNamedPipeInfo(h, &flags, nil, nil, nil)
	if err != nil {
		return nil, err
	}

	f, err := makeWin32File(h)
	if err != nil {
		syscall.Close(h)
		return nil, err
	}

	// If the pipe is in message mode, return a message byte pipe, which
	// supports CloseWrite().
	if flags&windows.PIPE_TYPE_MESSAGE != 0 {
		return &win32MessageBytePipe{
			win32Pipe: win32Pipe{win32File: f, path: path},
		}, nil
	}
	return &win32Pipe{win32File: f, path: path}, nil
}

type acceptResponse struct {
	f   *win32File
	err error
}

type win32PipeListener struct {
	firstHandle syscall.Handle
	path        string
	config      PipeConfig
	acceptCh    chan (chan acceptResponse)
	closeCh     chan int
	doneCh      chan int
}

func makeServerPipeHandle(path string, sd []byte, c *PipeConfig, first bool) (syscall.Handle, error) {
	path16, err := syscall.UTF16FromString(path)
	if err != nil {
		return 0, &os.PathError{Op: "open", Path: path, Err: err}
	}

	var oa objectAttributes
	oa.Length = unsafe.Sizeof(oa)

	var ntPath unicodeString
	if err := rtlDosPathNameToNtPathName(&path16[0],
		&ntPath,
		0,
		0,
	).Err(); err != nil {
		return 0, &os.PathError{Op: "open", Path: path, Err: err}
	}
	defer localFree(ntPath.Buffer)
	oa.ObjectName = &ntPath
	oa.Attributes = windows.OBJ_CASE_INSENSITIVE

	// The security descriptor is only needed for the first pipe.
	if first {
		if sd != nil {
			l := uint32(len(sd))
			sdb := localAlloc(0, l)
			defer localFree(sdb)
			copy((*[0xffff]byte)(unsafe.Pointer(sdb))[:], sd)
			oa.SecurityDescriptor = (*securityDescriptor)(unsafe.Pointer(sdb))
		} else {
			// Construct the default named pipe security descriptor.
			var dacl uintptr
			if err := rtlDefaultNpAcl(&dacl).Err(); err != nil {
				return 0, fmt.Errorf("getting default named pipe ACL: %w", err)
			}
			defer localFree(dacl)

			sdb := &securityDescriptor{
				Revision: 1,
				Control:  windows.SE_DACL_PRESENT,
				Dacl:     dacl,
			}
			oa.SecurityDescriptor = sdb
		}
	}

	typ := uint32(windows.FILE_PIPE_REJECT_REMOTE_CLIENTS)
	if c.MessageMode {
		typ |= windows.FILE_PIPE_MESSAGE_TYPE
	}

	disposition := uint32(windows.FILE_OPEN)
	access := uint32(syscall.GENERIC_READ | syscall.GENERIC_WRITE | syscall.SYNCHRONIZE)
	if first {
		disposition = windows.FILE_CREATE
		// By not asking for read or write access, the named pipe file system
		// will put this pipe into an initially disconnected state, blocking
		// client connections until the next call with first == false.
		access = syscall.SYNCHRONIZE
	}

	timeout := int64(-50 * 10000) // 50ms

	var (
		h    syscall.Handle
		iosb ioStatusBlock
	)
	err = ntCreateNamedPipeFile(&h,
		access,
		&oa,
		&iosb,
		syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE,
		disposition,
		0,
		typ,
		0,
		0,
		0xffffffff,
		uint32(c.InputBufferSize),
		uint32(c.OutputBufferSize),
		&timeout).Err()
	if err != nil {
		return 0, &os.PathError{Op: "open", Path: path, Err: err}
	}

	runtime.KeepAlive(ntPath)
	return h, nil
}

func (l *win32PipeListener) makeServerPipe() (*win32File, error) {
	h, err := makeServerPipeHandle(l.path, nil, &l.config, false)
	if err != nil {
		return nil, err
	}
	f, err := makeWin32File(h)
	if err != nil {
		syscall.Close(h)
		return nil, err
	}
	return f, nil
}

func (l *win32PipeListener) makeConnectedServerPipe() (*win32File, error) {
	p, err := l.makeServerPipe()
	if err != nil {
		return nil, err
	}

	// Wait for the client to connect.
	ch := make(chan error)
	go func(p *win32File) {
		ch <- connectPipe(p)
	}(p)

	select {
	case err = <-ch:
		if err != nil {
			p.Close()
			p = nil
		}
	case <-l.closeCh:
		// Abort the connect request by closing the handle.
		p.Close()
		p = nil
		err = <-ch
		if err == nil || err == ErrFileClosed { //nolint:errorlint // err is Errno
			err = ErrPipeListenerClosed
		}
	}
	return p, err
}

func (l *win32PipeListener) listenerRoutine() {
	closed := false
	for !closed {
		select {
		case <-l.closeCh:
			closed = true
		case responseCh := <-l.acceptCh:
			var (
				p   *win32File
				err error
			)
			for {
				p, err = l.makeConnectedServerPipe()
				// If the connection was immediately closed by the client, try
				// again.
				if err != windows.ERROR_NO_DATA { //nolint:errorlint // err is Errno
					break
				}
			}
			responseCh <- acceptResponse{p, err}
			closed = err == ErrPipeListenerClosed //nolint:errorlint // err is Errno
		}
	}
	syscall.Close(l.firstHandle)
	l.firstHandle = 0
	// Notify Close() and Accept() callers that the handle has been closed.
	close(l.doneCh)
}

// PipeConfig contain configuration for the pipe listener.
type PipeConfig struct {
	// SecurityDescriptor contains a Windows security descriptor in SDDL format.
	SecurityDescriptor string

	// MessageMode determines whether the pipe is in byte or message mode. In either
	// case the pipe is read in byte mode by default. The only practical difference in
	// this implementation is that CloseWrite() is only supported for message mode pipes;
	// CloseWrite() is implemented as a zero-byte write, but zero-byte writes are only
	// transferred to the reader (and returned as io.EOF in this implementation)
	// when the pipe is in message mode.
	MessageMode bool

	// InputBufferSize specifies the size of the input buffer, in bytes.
	InputBufferSize int32

	// OutputBufferSize specifies the size of the output buffer, in bytes.
	OutputBufferSize int32
}

// ListenPipe creates a listener on a Windows named pipe path, e.g. \\.\pipe\mypipe.
// The pipe must not already exist.
func ListenPipe(path string, c *PipeConfig) (net.Listener, error) {
	var (
		sd  []byte
		err error
	)
	if c == nil {
		c = &PipeConfig{}
	}
	if c.SecurityDescriptor != "" {
		sd, err = SddlToSecurityDescriptor(c.SecurityDescriptor)
		if err != nil {
			return nil, err
		}
	}
	h, err := makeServerPipeHandle(path, sd, c, true)
	if err != nil {
		return nil, err
	}
	l := &win32PipeListener{
		firstHandle: h,
		path:        path,
		config:      *c,
		acceptCh:    make(chan (chan acceptResponse)),
		closeCh:     make(chan int),
		doneCh:      make(chan int),
	}
	go l.listenerRoutine()
	return l, nil
}

func connectPipe(p *win32File) error {
	c, err := p.prepareIO()
	if err != nil {
		return err
	}
	defer p.wg.Done()

	err = connectNamedPipe(p.handle, &c.o)
	_, err = p.asyncIO(c, nil, 0, err)
	if err != nil && err != windows.ERROR_PIPE_CONNECTED { //nolint:errorlint // err is Errno
		return err
	}
	return nil
}

func (l *win32PipeListener) Accept() (net.Conn, error) {
	ch := make(chan acceptResponse)
	select {
	case l.acceptCh <- ch:
		response := <-ch
		err := response.err
		if err != nil {
			return nil, err
		}
		if l.config.MessageMode {
			return &win32MessageBytePipe{
				win32Pipe: win32Pipe{win32File: response.f, path: l.path},
			}, nil
		}
		return &win32Pipe{win32File: response.f, path: l.path}, nil
	case <-l.doneCh:
		return nil, ErrPipeListenerClosed
	}
}

func (l *win32PipeListener) Close() error {
	select {
	case l.closeCh <- 1:
		<-l.doneCh
	case <-l.doneCh:
	}
	return nil
}

func (l *win32PipeListener) Addr() net.Addr {
	return pipeAddress(l.path)
}
  07070100000107000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/pkg  07070100000108000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/pkg/guid 07070100000109000081A4000000000000000000000001645E367C00001836000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/pkg/guid/guid.go // Package guid provides a GUID type. The backing structure for a GUID is
// identical to that used by the golang.org/x/sys/windows GUID type.
// There are two main binary encodings used for a GUID, the big-endian encoding,
// and the Windows (mixed-endian) encoding. See here for details:
// https://en.wikipedia.org/wiki/Universally_unique_identifier#Encoding
package guid

import (
	"crypto/rand"
	"crypto/sha1" //nolint:gosec // not used for secure application
	"encoding"
	"encoding/binary"
	"fmt"
	"strconv"
)

//go:generate go run golang.org/x/tools/cmd/stringer -type=Variant -trimprefix=Variant -linecomment

// Variant specifies which GUID variant (or "type") of the GUID. It determines
// how the entirety of the rest of the GUID is interpreted.
type Variant uint8

// The variants specified by RFC 4122 section 4.1.1.
const (
	// VariantUnknown specifies a GUID variant which does not conform to one of
	// the variant encodings specified in RFC 4122.
	VariantUnknown Variant = iota
	VariantNCS
	VariantRFC4122 // RFC 4122
	VariantMicrosoft
	VariantFuture
)

// Version specifies how the bits in the GUID were generated. For instance, a
// version 4 GUID is randomly generated, and a version 5 is generated from the
// hash of an input string.
type Version uint8

func (v Version) String() string {
	return strconv.FormatUint(uint64(v), 10)
}

var _ = (encoding.TextMarshaler)(GUID{})
var _ = (encoding.TextUnmarshaler)(&GUID{})

// NewV4 returns a new version 4 (pseudorandom) GUID, as defined by RFC 4122.
func NewV4() (GUID, error) {
	var b [16]byte
	if _, err := rand.Read(b[:]); err != nil {
		return GUID{}, err
	}

	g := FromArray(b)
	g.setVersion(4) // Version 4 means randomly generated.
	g.setVariant(VariantRFC4122)

	return g, nil
}

// NewV5 returns a new version 5 (generated from a string via SHA-1 hashing)
// GUID, as defined by RFC 4122. The RFC is unclear on the encoding of the name,
// and the sample code treats it as a series of bytes, so we do the same here.
//
// Some implementations, such as those found on Windows, treat the name as a
// big-endian UTF16 stream of bytes. If that is desired, the string can be
// encoded as such before being passed to this function.
func NewV5(namespace GUID, name []byte) (GUID, error) {
	b := sha1.New() //nolint:gosec // not used for secure application
	namespaceBytes := namespace.ToArray()
	b.Write(namespaceBytes[:])
	b.Write(name)

	a := [16]byte{}
	copy(a[:], b.Sum(nil))

	g := FromArray(a)
	g.setVersion(5) // Version 5 means generated from a string.
	g.setVariant(VariantRFC4122)

	return g, nil
}

func fromArray(b [16]byte, order binary.ByteOrder) GUID {
	var g GUID
	g.Data1 = order.Uint32(b[0:4])
	g.Data2 = order.Uint16(b[4:6])
	g.Data3 = order.Uint16(b[6:8])
	copy(g.Data4[:], b[8:16])
	return g
}

func (g GUID) toArray(order binary.ByteOrder) [16]byte {
	b := [16]byte{}
	order.PutUint32(b[0:4], g.Data1)
	order.PutUint16(b[4:6], g.Data2)
	order.PutUint16(b[6:8], g.Data3)
	copy(b[8:16], g.Data4[:])
	return b
}

// FromArray constructs a GUID from a big-endian encoding array of 16 bytes.
func FromArray(b [16]byte) GUID {
	return fromArray(b, binary.BigEndian)
}

// ToArray returns an array of 16 bytes representing the GUID in big-endian
// encoding.
func (g GUID) ToArray() [16]byte {
	return g.toArray(binary.BigEndian)
}

// FromWindowsArray constructs a GUID from a Windows encoding array of bytes.
func FromWindowsArray(b [16]byte) GUID {
	return fromArray(b, binary.LittleEndian)
}

// ToWindowsArray returns an array of 16 bytes representing the GUID in Windows
// encoding.
func (g GUID) ToWindowsArray() [16]byte {
	return g.toArray(binary.LittleEndian)
}

func (g GUID) String() string {
	return fmt.Sprintf(
		"%08x-%04x-%04x-%04x-%012x",
		g.Data1,
		g.Data2,
		g.Data3,
		g.Data4[:2],
		g.Data4[2:])
}

// FromString parses a string containing a GUID and returns the GUID. The only
// format currently supported is the `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`
// format.
func FromString(s string) (GUID, error) {
	if len(s) != 36 {
		return GUID{}, fmt.Errorf("invalid GUID %q", s)
	}
	if s[8] != '-' || s[13] != '-' || s[18] != '-' || s[23] != '-' {
		return GUID{}, fmt.Errorf("invalid GUID %q", s)
	}

	var g GUID

	data1, err := strconv.ParseUint(s[0:8], 16, 32)
	if err != nil {
		return GUID{}, fmt.Errorf("invalid GUID %q", s)
	}
	g.Data1 = uint32(data1)

	data2, err := strconv.ParseUint(s[9:13], 16, 16)
	if err != nil {
		return GUID{}, fmt.Errorf("invalid GUID %q", s)
	}
	g.Data2 = uint16(data2)

	data3, err := strconv.ParseUint(s[14:18], 16, 16)
	if err != nil {
		return GUID{}, fmt.Errorf("invalid GUID %q", s)
	}
	g.Data3 = uint16(data3)

	for i, x := range []int{19, 21, 24, 26, 28, 30, 32, 34} {
		v, err := strconv.ParseUint(s[x:x+2], 16, 8)
		if err != nil {
			return GUID{}, fmt.Errorf("invalid GUID %q", s)
		}
		g.Data4[i] = uint8(v)
	}

	return g, nil
}

func (g *GUID) setVariant(v Variant) {
	d := g.Data4[0]
	switch v {
	case VariantNCS:
		d = (d & 0x7f)
	case VariantRFC4122:
		d = (d & 0x3f) | 0x80
	case VariantMicrosoft:
		d = (d & 0x1f) | 0xc0
	case VariantFuture:
		d = (d & 0x0f) | 0xe0
	case VariantUnknown:
		fallthrough
	default:
		panic(fmt.Sprintf("invalid variant: %d", v))
	}
	g.Data4[0] = d
}

// Variant returns the GUID variant, as defined in RFC 4122.
func (g GUID) Variant() Variant {
	b := g.Data4[0]
	if b&0x80 == 0 {
		return VariantNCS
	} else if b&0xc0 == 0x80 {
		return VariantRFC4122
	} else if b&0xe0 == 0xc0 {
		return VariantMicrosoft
	} else if b&0xe0 == 0xe0 {
		return VariantFuture
	}
	return VariantUnknown
}

func (g *GUID) setVersion(v Version) {
	g.Data3 = (g.Data3 & 0x0fff) | (uint16(v) << 12)
}

// Version returns the GUID version, as defined in RFC 4122.
func (g GUID) Version() Version {
	return Version((g.Data3 & 0xF000) >> 12)
}

// MarshalText returns the textual representation of the GUID.
func (g GUID) MarshalText() ([]byte, error) {
	return []byte(g.String()), nil
}

// UnmarshalText takes the textual representation of a GUID, and unmarhals it
// into this GUID.
func (g *GUID) UnmarshalText(text []byte) error {
	g2, err := FromString(string(text))
	if err != nil {
		return err
	}
	*g = g2
	return nil
}
  0707010000010A000081A4000000000000000000000001645E367C000001BC000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/pkg/guid/guid_nonwindows.go  //go:build !windows
// +build !windows

package guid

// GUID represents a GUID/UUID. It has the same structure as
// golang.org/x/sys/windows.GUID so that it can be used with functions expecting
// that type. It is defined as its own type as that is only available to builds
// targeted at `windows`. The representation matches that used by native Windows
// code.
type GUID struct {
	Data1 uint32
	Data2 uint16
	Data3 uint16
	Data4 [8]byte
}
0707010000010B000081A4000000000000000000000001645E367C000001A4000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/pkg/guid/guid_windows.go //go:build windows
// +build windows

package guid

import "golang.org/x/sys/windows"

// GUID represents a GUID/UUID. It has the same structure as
// golang.org/x/sys/windows.GUID so that it can be used with functions expecting
// that type. It is defined as its own type so that stringification and
// marshaling can be supported. The representation matches that used by native
// Windows code.
type GUID windows.GUID
0707010000010C000081A4000000000000000000000001645E367C000002EB000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/pkg/guid/variant_string.go   // Code generated by "stringer -type=Variant -trimprefix=Variant -linecomment"; DO NOT EDIT.

package guid

import "strconv"

func _() {
	// An "invalid array index" compiler error signifies that the constant values have changed.
	// Re-run the stringer command to generate them again.
	var x [1]struct{}
	_ = x[VariantUnknown-0]
	_ = x[VariantNCS-1]
	_ = x[VariantRFC4122-2]
	_ = x[VariantMicrosoft-3]
	_ = x[VariantFuture-4]
}

const _Variant_name = "UnknownNCSRFC 4122MicrosoftFuture"

var _Variant_index = [...]uint8{0, 7, 10, 18, 27, 33}

func (i Variant) String() string {
	if i >= Variant(len(_Variant_index)-1) {
		return "Variant(" + strconv.FormatInt(int64(i), 10) + ")"
	}
	return _Variant_name[_Variant_index[i]:_Variant_index[i+1]]
}
 0707010000010D000081A4000000000000000000000001645E367C000015C8000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/privilege.go //go:build windows
// +build windows

package winio

import (
	"bytes"
	"encoding/binary"
	"fmt"
	"runtime"
	"sync"
	"syscall"
	"unicode/utf16"

	"golang.org/x/sys/windows"
)

//sys adjustTokenPrivileges(token windows.Token, releaseAll bool, input *byte, outputSize uint32, output *byte, requiredSize *uint32) (success bool, err error) [true] = advapi32.AdjustTokenPrivileges
//sys impersonateSelf(level uint32) (err error) = advapi32.ImpersonateSelf
//sys revertToSelf() (err error) = advapi32.RevertToSelf
//sys openThreadToken(thread syscall.Handle, accessMask uint32, openAsSelf bool, token *windows.Token) (err error) = advapi32.OpenThreadToken
//sys getCurrentThread() (h syscall.Handle) = GetCurrentThread
//sys lookupPrivilegeValue(systemName string, name string, luid *uint64) (err error) = advapi32.LookupPrivilegeValueW
//sys lookupPrivilegeName(systemName string, luid *uint64, buffer *uint16, size *uint32) (err error) = advapi32.LookupPrivilegeNameW
//sys lookupPrivilegeDisplayName(systemName string, name *uint16, buffer *uint16, size *uint32, languageId *uint32) (err error) = advapi32.LookupPrivilegeDisplayNameW

const (
	//revive:disable-next-line:var-naming ALL_CAPS
	SE_PRIVILEGE_ENABLED = windows.SE_PRIVILEGE_ENABLED

	//revive:disable-next-line:var-naming ALL_CAPS
	ERROR_NOT_ALL_ASSIGNED syscall.Errno = windows.ERROR_NOT_ALL_ASSIGNED

	SeBackupPrivilege   = "SeBackupPrivilege"
	SeRestorePrivilege  = "SeRestorePrivilege"
	SeSecurityPrivilege = "SeSecurityPrivilege"
)

var (
	privNames     = make(map[string]uint64)
	privNameMutex sync.Mutex
)

// PrivilegeError represents an error enabling privileges.
type PrivilegeError struct {
	privileges []uint64
}

func (e *PrivilegeError) Error() string {
	s := "Could not enable privilege "
	if len(e.privileges) > 1 {
		s = "Could not enable privileges "
	}
	for i, p := range e.privileges {
		if i != 0 {
			s += ", "
		}
		s += `"`
		s += getPrivilegeName(p)
		s += `"`
	}
	return s
}

// RunWithPrivilege enables a single privilege for a function call.
func RunWithPrivilege(name string, fn func() error) error {
	return RunWithPrivileges([]string{name}, fn)
}

// RunWithPrivileges enables privileges for a function call.
func RunWithPrivileges(names []string, fn func() error) error {
	privileges, err := mapPrivileges(names)
	if err != nil {
		return err
	}
	runtime.LockOSThread()
	defer runtime.UnlockOSThread()
	token, err := newThreadToken()
	if err != nil {
		return err
	}
	defer releaseThreadToken(token)
	err = adjustPrivileges(token, privileges, SE_PRIVILEGE_ENABLED)
	if err != nil {
		return err
	}
	return fn()
}

func mapPrivileges(names []string) ([]uint64, error) {
	privileges := make([]uint64, 0, len(names))
	privNameMutex.Lock()
	defer privNameMutex.Unlock()
	for _, name := range names {
		p, ok := privNames[name]
		if !ok {
			err := lookupPrivilegeValue("", name, &p)
			if err != nil {
				return nil, err
			}
			privNames[name] = p
		}
		privileges = append(privileges, p)
	}
	return privileges, nil
}

// EnableProcessPrivileges enables privileges globally for the process.
func EnableProcessPrivileges(names []string) error {
	return enableDisableProcessPrivilege(names, SE_PRIVILEGE_ENABLED)
}

// DisableProcessPrivileges disables privileges globally for the process.
func DisableProcessPrivileges(names []string) error {
	return enableDisableProcessPrivilege(names, 0)
}

func enableDisableProcessPrivilege(names []string, action uint32) error {
	privileges, err := mapPrivileges(names)
	if err != nil {
		return err
	}

	p := windows.CurrentProcess()
	var token windows.Token
	err = windows.OpenProcessToken(p, windows.TOKEN_ADJUST_PRIVILEGES|windows.TOKEN_QUERY, &token)
	if err != nil {
		return err
	}

	defer token.Close()
	return adjustPrivileges(token, privileges, action)
}

func adjustPrivileges(token windows.Token, privileges []uint64, action uint32) error {
	var b bytes.Buffer
	_ = binary.Write(&b, binary.LittleEndian, uint32(len(privileges)))
	for _, p := range privileges {
		_ = binary.Write(&b, binary.LittleEndian, p)
		_ = binary.Write(&b, binary.LittleEndian, action)
	}
	prevState := make([]byte, b.Len())
	reqSize := uint32(0)
	success, err := adjustTokenPrivileges(token, false, &b.Bytes()[0], uint32(len(prevState)), &prevState[0], &reqSize)
	if !success {
		return err
	}
	if err == ERROR_NOT_ALL_ASSIGNED { //nolint:errorlint // err is Errno
		return &PrivilegeError{privileges}
	}
	return nil
}

func getPrivilegeName(luid uint64) string {
	var nameBuffer [256]uint16
	bufSize := uint32(len(nameBuffer))
	err := lookupPrivilegeName("", &luid, &nameBuffer[0], &bufSize)
	if err != nil {
		return fmt.Sprintf("<unknown privilege %d>", luid)
	}

	var displayNameBuffer [256]uint16
	displayBufSize := uint32(len(displayNameBuffer))
	var langID uint32
	err = lookupPrivilegeDisplayName("", &nameBuffer[0], &displayNameBuffer[0], &displayBufSize, &langID)
	if err != nil {
		return fmt.Sprintf("<unknown privilege %s>", string(utf16.Decode(nameBuffer[:bufSize])))
	}

	return string(utf16.Decode(displayNameBuffer[:displayBufSize]))
}

func newThreadToken() (windows.Token, error) {
	err := impersonateSelf(windows.SecurityImpersonation)
	if err != nil {
		return 0, err
	}

	var token windows.Token
	err = openThreadToken(getCurrentThread(), syscall.TOKEN_ADJUST_PRIVILEGES|syscall.TOKEN_QUERY, false, &token)
	if err != nil {
		rerr := revertToSelf()
		if rerr != nil {
			panic(rerr)
		}
		return 0, err
	}
	return token, nil
}

func releaseThreadToken(h windows.Token) {
	err := revertToSelf()
	if err != nil {
		panic(err)
	}
	h.Close()
}
0707010000010E000081A4000000000000000000000001645E367C00000DC5000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/reparse.go   //go:build windows
// +build windows

package winio

import (
	"bytes"
	"encoding/binary"
	"fmt"
	"strings"
	"unicode/utf16"
	"unsafe"
)

const (
	reparseTagMountPoint = 0xA0000003
	reparseTagSymlink    = 0xA000000C
)

type reparseDataBuffer struct {
	ReparseTag           uint32
	ReparseDataLength    uint16
	Reserved             uint16
	SubstituteNameOffset uint16
	SubstituteNameLength uint16
	PrintNameOffset      uint16
	PrintNameLength      uint16
}

// ReparsePoint describes a Win32 symlink or mount point.
type ReparsePoint struct {
	Target       string
	IsMountPoint bool
}

// UnsupportedReparsePointError is returned when trying to decode a non-symlink or
// mount point reparse point.
type UnsupportedReparsePointError struct {
	Tag uint32
}

func (e *UnsupportedReparsePointError) Error() string {
	return fmt.Sprintf("unsupported reparse point %x", e.Tag)
}

// DecodeReparsePoint decodes a Win32 REPARSE_DATA_BUFFER structure containing either a symlink
// or a mount point.
func DecodeReparsePoint(b []byte) (*ReparsePoint, error) {
	tag := binary.LittleEndian.Uint32(b[0:4])
	return DecodeReparsePointData(tag, b[8:])
}

func DecodeReparsePointData(tag uint32, b []byte) (*ReparsePoint, error) {
	isMountPoint := false
	switch tag {
	case reparseTagMountPoint:
		isMountPoint = true
	case reparseTagSymlink:
	default:
		return nil, &UnsupportedReparsePointError{tag}
	}
	nameOffset := 8 + binary.LittleEndian.Uint16(b[4:6])
	if !isMountPoint {
		nameOffset += 4
	}
	nameLength := binary.LittleEndian.Uint16(b[6:8])
	name := make([]uint16, nameLength/2)
	err := binary.Read(bytes.NewReader(b[nameOffset:nameOffset+nameLength]), binary.LittleEndian, &name)
	if err != nil {
		return nil, err
	}
	return &ReparsePoint{string(utf16.Decode(name)), isMountPoint}, nil
}

func isDriveLetter(c byte) bool {
	return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')
}

// EncodeReparsePoint encodes a Win32 REPARSE_DATA_BUFFER structure describing a symlink or
// mount point.
func EncodeReparsePoint(rp *ReparsePoint) []byte {
	// Generate an NT path and determine if this is a relative path.
	var ntTarget string
	relative := false
	if strings.HasPrefix(rp.Target, `\\?\`) {
		ntTarget = `\??\` + rp.Target[4:]
	} else if strings.HasPrefix(rp.Target, `\\`) {
		ntTarget = `\??\UNC\` + rp.Target[2:]
	} else if len(rp.Target) >= 2 && isDriveLetter(rp.Target[0]) && rp.Target[1] == ':' {
		ntTarget = `\??\` + rp.Target
	} else {
		ntTarget = rp.Target
		relative = true
	}

	// The paths must be NUL-terminated even though they are counted strings.
	target16 := utf16.Encode([]rune(rp.Target + "\x00"))
	ntTarget16 := utf16.Encode([]rune(ntTarget + "\x00"))

	size := int(unsafe.Sizeof(reparseDataBuffer{})) - 8
	size += len(ntTarget16)*2 + len(target16)*2

	tag := uint32(reparseTagMountPoint)
	if !rp.IsMountPoint {
		tag = reparseTagSymlink
		size += 4 // Add room for symlink flags
	}

	data := reparseDataBuffer{
		ReparseTag:           tag,
		ReparseDataLength:    uint16(size),
		SubstituteNameOffset: 0,
		SubstituteNameLength: uint16((len(ntTarget16) - 1) * 2),
		PrintNameOffset:      uint16(len(ntTarget16) * 2),
		PrintNameLength:      uint16((len(target16) - 1) * 2),
	}

	var b bytes.Buffer
	_ = binary.Write(&b, binary.LittleEndian, &data)
	if !rp.IsMountPoint {
		flags := uint32(0)
		if relative {
			flags |= 1
		}
		_ = binary.Write(&b, binary.LittleEndian, flags)
	}

	_ = binary.Write(&b, binary.LittleEndian, ntTarget16)
	_ = binary.Write(&b, binary.LittleEndian, target16)
	return b.Bytes()
}
   0707010000010F000081A4000000000000000000000001645E367C000013D6000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/sd.go    //go:build windows
// +build windows

package winio

import (
	"errors"
	"syscall"
	"unsafe"

	"golang.org/x/sys/windows"
)

//sys lookupAccountName(systemName *uint16, accountName string, sid *byte, sidSize *uint32, refDomain *uint16, refDomainSize *uint32, sidNameUse *uint32) (err error) = advapi32.LookupAccountNameW
//sys lookupAccountSid(systemName *uint16, sid *byte, name *uint16, nameSize *uint32, refDomain *uint16, refDomainSize *uint32, sidNameUse *uint32) (err error) = advapi32.LookupAccountSidW
//sys convertSidToStringSid(sid *byte, str **uint16) (err error) = advapi32.ConvertSidToStringSidW
//sys convertStringSidToSid(str *uint16, sid **byte) (err error) = advapi32.ConvertStringSidToSidW
//sys convertStringSecurityDescriptorToSecurityDescriptor(str string, revision uint32, sd *uintptr, size *uint32) (err error) = advapi32.ConvertStringSecurityDescriptorToSecurityDescriptorW
//sys convertSecurityDescriptorToStringSecurityDescriptor(sd *byte, revision uint32, secInfo uint32, sddl **uint16, sddlSize *uint32) (err error) = advapi32.ConvertSecurityDescriptorToStringSecurityDescriptorW
//sys localFree(mem uintptr) = LocalFree
//sys getSecurityDescriptorLength(sd uintptr) (len uint32) = advapi32.GetSecurityDescriptorLength

type AccountLookupError struct {
	Name string
	Err  error
}

func (e *AccountLookupError) Error() string {
	if e.Name == "" {
		return "lookup account: empty account name specified"
	}
	var s string
	switch {
	case errors.Is(e.Err, windows.ERROR_INVALID_SID):
		s = "the security ID structure is invalid"
	case errors.Is(e.Err, windows.ERROR_NONE_MAPPED):
		s = "not found"
	default:
		s = e.Err.Error()
	}
	return "lookup account " + e.Name + ": " + s
}

func (e *AccountLookupError) Unwrap() error { return e.Err }

type SddlConversionError struct {
	Sddl string
	Err  error
}

func (e *SddlConversionError) Error() string {
	return "convert " + e.Sddl + ": " + e.Err.Error()
}

func (e *SddlConversionError) Unwrap() error { return e.Err }

// LookupSidByName looks up the SID of an account by name
//
//revive:disable-next-line:var-naming SID, not Sid
func LookupSidByName(name string) (sid string, err error) {
	if name == "" {
		return "", &AccountLookupError{name, windows.ERROR_NONE_MAPPED}
	}

	var sidSize, sidNameUse, refDomainSize uint32
	err = lookupAccountName(nil, name, nil, &sidSize, nil, &refDomainSize, &sidNameUse)
	if err != nil && err != syscall.ERROR_INSUFFICIENT_BUFFER { //nolint:errorlint // err is Errno
		return "", &AccountLookupError{name, err}
	}
	sidBuffer := make([]byte, sidSize)
	refDomainBuffer := make([]uint16, refDomainSize)
	err = lookupAccountName(nil, name, &sidBuffer[0], &sidSize, &refDomainBuffer[0], &refDomainSize, &sidNameUse)
	if err != nil {
		return "", &AccountLookupError{name, err}
	}
	var strBuffer *uint16
	err = convertSidToStringSid(&sidBuffer[0], &strBuffer)
	if err != nil {
		return "", &AccountLookupError{name, err}
	}
	sid = syscall.UTF16ToString((*[0xffff]uint16)(unsafe.Pointer(strBuffer))[:])
	localFree(uintptr(unsafe.Pointer(strBuffer)))
	return sid, nil
}

// LookupNameBySid looks up the name of an account by SID
//
//revive:disable-next-line:var-naming SID, not Sid
func LookupNameBySid(sid string) (name string, err error) {
	if sid == "" {
		return "", &AccountLookupError{sid, windows.ERROR_NONE_MAPPED}
	}

	sidBuffer, err := windows.UTF16PtrFromString(sid)
	if err != nil {
		return "", &AccountLookupError{sid, err}
	}

	var sidPtr *byte
	if err = convertStringSidToSid(sidBuffer, &sidPtr); err != nil {
		return "", &AccountLookupError{sid, err}
	}
	defer localFree(uintptr(unsafe.Pointer(sidPtr)))

	var nameSize, refDomainSize, sidNameUse uint32
	err = lookupAccountSid(nil, sidPtr, nil, &nameSize, nil, &refDomainSize, &sidNameUse)
	if err != nil && err != windows.ERROR_INSUFFICIENT_BUFFER { //nolint:errorlint // err is Errno
		return "", &AccountLookupError{sid, err}
	}

	nameBuffer := make([]uint16, nameSize)
	refDomainBuffer := make([]uint16, refDomainSize)
	err = lookupAccountSid(nil, sidPtr, &nameBuffer[0], &nameSize, &refDomainBuffer[0], &refDomainSize, &sidNameUse)
	if err != nil {
		return "", &AccountLookupError{sid, err}
	}

	name = windows.UTF16ToString(nameBuffer)
	return name, nil
}

func SddlToSecurityDescriptor(sddl string) ([]byte, error) {
	var sdBuffer uintptr
	err := convertStringSecurityDescriptorToSecurityDescriptor(sddl, 1, &sdBuffer, nil)
	if err != nil {
		return nil, &SddlConversionError{sddl, err}
	}
	defer localFree(sdBuffer)
	sd := make([]byte, getSecurityDescriptorLength(sdBuffer))
	copy(sd, (*[0xffff]byte)(unsafe.Pointer(sdBuffer))[:len(sd)])
	return sd, nil
}

func SecurityDescriptorToSddl(sd []byte) (string, error) {
	var sddl *uint16
	// The returned string length seems to include an arbitrary number of terminating NULs.
	// Don't use it.
	err := convertSecurityDescriptorToStringSecurityDescriptor(&sd[0], 1, 0xff, &sddl, nil)
	if err != nil {
		return "", err
	}
	defer localFree(uintptr(unsafe.Pointer(sddl)))
	return syscall.UTF16ToString((*[0xffff]uint16)(unsafe.Pointer(sddl))[:]), nil
}
  07070100000110000081A4000000000000000000000001645E367C0000008C000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/syscall.go   //go:build windows

package winio

//go:generate go run github.com/Microsoft/go-winio/tools/mkwinsyscall -output zsyscall_windows.go ./*.go
07070100000111000081A4000000000000000000000001645E367C0000004C000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/tools.go //go:build tools

package winio

import _ "golang.org/x/tools/cmd/stringer"
07070100000112000081A4000000000000000000000001645E367C00004496000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/go-winio/zsyscall_windows.go  //go:build windows

// Code generated by 'go generate' using "github.com/Microsoft/go-winio/tools/mkwinsyscall"; DO NOT EDIT.

package winio

import (
	"syscall"
	"unsafe"

	"golang.org/x/sys/windows"
)

var _ unsafe.Pointer

// Do the interface allocations only once for common
// Errno values.
const (
	errnoERROR_IO_PENDING = 997
)

var (
	errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING)
	errERROR_EINVAL     error = syscall.EINVAL
)

// errnoErr returns common boxed Errno values, to prevent
// allocations at runtime.
func errnoErr(e syscall.Errno) error {
	switch e {
	case 0:
		return errERROR_EINVAL
	case errnoERROR_IO_PENDING:
		return errERROR_IO_PENDING
	}
	// TODO: add more here, after collecting data on the common
	// error values see on Windows. (perhaps when running
	// all.bat?)
	return e
}

var (
	modadvapi32 = windows.NewLazySystemDLL("advapi32.dll")
	modkernel32 = windows.NewLazySystemDLL("kernel32.dll")
	modntdll    = windows.NewLazySystemDLL("ntdll.dll")
	modws2_32   = windows.NewLazySystemDLL("ws2_32.dll")

	procAdjustTokenPrivileges                                = modadvapi32.NewProc("AdjustTokenPrivileges")
	procConvertSecurityDescriptorToStringSecurityDescriptorW = modadvapi32.NewProc("ConvertSecurityDescriptorToStringSecurityDescriptorW")
	procConvertSidToStringSidW                               = modadvapi32.NewProc("ConvertSidToStringSidW")
	procConvertStringSecurityDescriptorToSecurityDescriptorW = modadvapi32.NewProc("ConvertStringSecurityDescriptorToSecurityDescriptorW")
	procConvertStringSidToSidW                               = modadvapi32.NewProc("ConvertStringSidToSidW")
	procGetSecurityDescriptorLength                          = modadvapi32.NewProc("GetSecurityDescriptorLength")
	procImpersonateSelf                                      = modadvapi32.NewProc("ImpersonateSelf")
	procLookupAccountNameW                                   = modadvapi32.NewProc("LookupAccountNameW")
	procLookupAccountSidW                                    = modadvapi32.NewProc("LookupAccountSidW")
	procLookupPrivilegeDisplayNameW                          = modadvapi32.NewProc("LookupPrivilegeDisplayNameW")
	procLookupPrivilegeNameW                                 = modadvapi32.NewProc("LookupPrivilegeNameW")
	procLookupPrivilegeValueW                                = modadvapi32.NewProc("LookupPrivilegeValueW")
	procOpenThreadToken                                      = modadvapi32.NewProc("OpenThreadToken")
	procRevertToSelf                                         = modadvapi32.NewProc("RevertToSelf")
	procBackupRead                                           = modkernel32.NewProc("BackupRead")
	procBackupWrite                                          = modkernel32.NewProc("BackupWrite")
	procCancelIoEx                                           = modkernel32.NewProc("CancelIoEx")
	procConnectNamedPipe                                     = modkernel32.NewProc("ConnectNamedPipe")
	procCreateIoCompletionPort                               = modkernel32.NewProc("CreateIoCompletionPort")
	procCreateNamedPipeW                                     = modkernel32.NewProc("CreateNamedPipeW")
	procGetCurrentThread                                     = modkernel32.NewProc("GetCurrentThread")
	procGetNamedPipeHandleStateW                             = modkernel32.NewProc("GetNamedPipeHandleStateW")
	procGetNamedPipeInfo                                     = modkernel32.NewProc("GetNamedPipeInfo")
	procGetQueuedCompletionStatus                            = modkernel32.NewProc("GetQueuedCompletionStatus")
	procLocalAlloc                                           = modkernel32.NewProc("LocalAlloc")
	procLocalFree                                            = modkernel32.NewProc("LocalFree")
	procSetFileCompletionNotificationModes                   = modkernel32.NewProc("SetFileCompletionNotificationModes")
	procNtCreateNamedPipeFile                                = modntdll.NewProc("NtCreateNamedPipeFile")
	procRtlDefaultNpAcl                                      = modntdll.NewProc("RtlDefaultNpAcl")
	procRtlDosPathNameToNtPathName_U                         = modntdll.NewProc("RtlDosPathNameToNtPathName_U")
	procRtlNtStatusToDosErrorNoTeb                           = modntdll.NewProc("RtlNtStatusToDosErrorNoTeb")
	procWSAGetOverlappedResult                               = modws2_32.NewProc("WSAGetOverlappedResult")
)

func adjustTokenPrivileges(token windows.Token, releaseAll bool, input *byte, outputSize uint32, output *byte, requiredSize *uint32) (success bool, err error) {
	var _p0 uint32
	if releaseAll {
		_p0 = 1
	}
	r0, _, e1 := syscall.Syscall6(procAdjustTokenPrivileges.Addr(), 6, uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(input)), uintptr(outputSize), uintptr(unsafe.Pointer(output)), uintptr(unsafe.Pointer(requiredSize)))
	success = r0 != 0
	if true {
		err = errnoErr(e1)
	}
	return
}

func convertSecurityDescriptorToStringSecurityDescriptor(sd *byte, revision uint32, secInfo uint32, sddl **uint16, sddlSize *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procConvertSecurityDescriptorToStringSecurityDescriptorW.Addr(), 5, uintptr(unsafe.Pointer(sd)), uintptr(revision), uintptr(secInfo), uintptr(unsafe.Pointer(sddl)), uintptr(unsafe.Pointer(sddlSize)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func convertSidToStringSid(sid *byte, str **uint16) (err error) {
	r1, _, e1 := syscall.Syscall(procConvertSidToStringSidW.Addr(), 2, uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(str)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func convertStringSecurityDescriptorToSecurityDescriptor(str string, revision uint32, sd *uintptr, size *uint32) (err error) {
	var _p0 *uint16
	_p0, err = syscall.UTF16PtrFromString(str)
	if err != nil {
		return
	}
	return _convertStringSecurityDescriptorToSecurityDescriptor(_p0, revision, sd, size)
}

func _convertStringSecurityDescriptorToSecurityDescriptor(str *uint16, revision uint32, sd *uintptr, size *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procConvertStringSecurityDescriptorToSecurityDescriptorW.Addr(), 4, uintptr(unsafe.Pointer(str)), uintptr(revision), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(size)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func convertStringSidToSid(str *uint16, sid **byte) (err error) {
	r1, _, e1 := syscall.Syscall(procConvertStringSidToSidW.Addr(), 2, uintptr(unsafe.Pointer(str)), uintptr(unsafe.Pointer(sid)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func getSecurityDescriptorLength(sd uintptr) (len uint32) {
	r0, _, _ := syscall.Syscall(procGetSecurityDescriptorLength.Addr(), 1, uintptr(sd), 0, 0)
	len = uint32(r0)
	return
}

func impersonateSelf(level uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procImpersonateSelf.Addr(), 1, uintptr(level), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func lookupAccountName(systemName *uint16, accountName string, sid *byte, sidSize *uint32, refDomain *uint16, refDomainSize *uint32, sidNameUse *uint32) (err error) {
	var _p0 *uint16
	_p0, err = syscall.UTF16PtrFromString(accountName)
	if err != nil {
		return
	}
	return _lookupAccountName(systemName, _p0, sid, sidSize, refDomain, refDomainSize, sidNameUse)
}

func _lookupAccountName(systemName *uint16, accountName *uint16, sid *byte, sidSize *uint32, refDomain *uint16, refDomainSize *uint32, sidNameUse *uint32) (err error) {
	r1, _, e1 := syscall.Syscall9(procLookupAccountNameW.Addr(), 7, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(accountName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sidSize)), uintptr(unsafe.Pointer(refDomain)), uintptr(unsafe.Pointer(refDomainSize)), uintptr(unsafe.Pointer(sidNameUse)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func lookupAccountSid(systemName *uint16, sid *byte, name *uint16, nameSize *uint32, refDomain *uint16, refDomainSize *uint32, sidNameUse *uint32) (err error) {
	r1, _, e1 := syscall.Syscall9(procLookupAccountSidW.Addr(), 7, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameSize)), uintptr(unsafe.Pointer(refDomain)), uintptr(unsafe.Pointer(refDomainSize)), uintptr(unsafe.Pointer(sidNameUse)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func lookupPrivilegeDisplayName(systemName string, name *uint16, buffer *uint16, size *uint32, languageId *uint32) (err error) {
	var _p0 *uint16
	_p0, err = syscall.UTF16PtrFromString(systemName)
	if err != nil {
		return
	}
	return _lookupPrivilegeDisplayName(_p0, name, buffer, size, languageId)
}

func _lookupPrivilegeDisplayName(systemName *uint16, name *uint16, buffer *uint16, size *uint32, languageId *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procLookupPrivilegeDisplayNameW.Addr(), 5, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buffer)), uintptr(unsafe.Pointer(size)), uintptr(unsafe.Pointer(languageId)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func lookupPrivilegeName(systemName string, luid *uint64, buffer *uint16, size *uint32) (err error) {
	var _p0 *uint16
	_p0, err = syscall.UTF16PtrFromString(systemName)
	if err != nil {
		return
	}
	return _lookupPrivilegeName(_p0, luid, buffer, size)
}

func _lookupPrivilegeName(systemName *uint16, luid *uint64, buffer *uint16, size *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procLookupPrivilegeNameW.Addr(), 4, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(luid)), uintptr(unsafe.Pointer(buffer)), uintptr(unsafe.Pointer(size)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func lookupPrivilegeValue(systemName string, name string, luid *uint64) (err error) {
	var _p0 *uint16
	_p0, err = syscall.UTF16PtrFromString(systemName)
	if err != nil {
		return
	}
	var _p1 *uint16
	_p1, err = syscall.UTF16PtrFromString(name)
	if err != nil {
		return
	}
	return _lookupPrivilegeValue(_p0, _p1, luid)
}

func _lookupPrivilegeValue(systemName *uint16, name *uint16, luid *uint64) (err error) {
	r1, _, e1 := syscall.Syscall(procLookupPrivilegeValueW.Addr(), 3, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(luid)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func openThreadToken(thread syscall.Handle, accessMask uint32, openAsSelf bool, token *windows.Token) (err error) {
	var _p0 uint32
	if openAsSelf {
		_p0 = 1
	}
	r1, _, e1 := syscall.Syscall6(procOpenThreadToken.Addr(), 4, uintptr(thread), uintptr(accessMask), uintptr(_p0), uintptr(unsafe.Pointer(token)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func revertToSelf() (err error) {
	r1, _, e1 := syscall.Syscall(procRevertToSelf.Addr(), 0, 0, 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func backupRead(h syscall.Handle, b []byte, bytesRead *uint32, abort bool, processSecurity bool, context *uintptr) (err error) {
	var _p0 *byte
	if len(b) > 0 {
		_p0 = &b[0]
	}
	var _p1 uint32
	if abort {
		_p1 = 1
	}
	var _p2 uint32
	if processSecurity {
		_p2 = 1
	}
	r1, _, e1 := syscall.Syscall9(procBackupRead.Addr(), 7, uintptr(h), uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(unsafe.Pointer(bytesRead)), uintptr(_p1), uintptr(_p2), uintptr(unsafe.Pointer(context)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func backupWrite(h syscall.Handle, b []byte, bytesWritten *uint32, abort bool, processSecurity bool, context *uintptr) (err error) {
	var _p0 *byte
	if len(b) > 0 {
		_p0 = &b[0]
	}
	var _p1 uint32
	if abort {
		_p1 = 1
	}
	var _p2 uint32
	if processSecurity {
		_p2 = 1
	}
	r1, _, e1 := syscall.Syscall9(procBackupWrite.Addr(), 7, uintptr(h), uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(unsafe.Pointer(bytesWritten)), uintptr(_p1), uintptr(_p2), uintptr(unsafe.Pointer(context)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func cancelIoEx(file syscall.Handle, o *syscall.Overlapped) (err error) {
	r1, _, e1 := syscall.Syscall(procCancelIoEx.Addr(), 2, uintptr(file), uintptr(unsafe.Pointer(o)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func connectNamedPipe(pipe syscall.Handle, o *syscall.Overlapped) (err error) {
	r1, _, e1 := syscall.Syscall(procConnectNamedPipe.Addr(), 2, uintptr(pipe), uintptr(unsafe.Pointer(o)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func createIoCompletionPort(file syscall.Handle, port syscall.Handle, key uintptr, threadCount uint32) (newport syscall.Handle, err error) {
	r0, _, e1 := syscall.Syscall6(procCreateIoCompletionPort.Addr(), 4, uintptr(file), uintptr(port), uintptr(key), uintptr(threadCount), 0, 0)
	newport = syscall.Handle(r0)
	if newport == 0 {
		err = errnoErr(e1)
	}
	return
}

func createNamedPipe(name string, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *syscall.SecurityAttributes) (handle syscall.Handle, err error) {
	var _p0 *uint16
	_p0, err = syscall.UTF16PtrFromString(name)
	if err != nil {
		return
	}
	return _createNamedPipe(_p0, flags, pipeMode, maxInstances, outSize, inSize, defaultTimeout, sa)
}

func _createNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *syscall.SecurityAttributes) (handle syscall.Handle, err error) {
	r0, _, e1 := syscall.Syscall9(procCreateNamedPipeW.Addr(), 8, uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(pipeMode), uintptr(maxInstances), uintptr(outSize), uintptr(inSize), uintptr(defaultTimeout), uintptr(unsafe.Pointer(sa)), 0)
	handle = syscall.Handle(r0)
	if handle == syscall.InvalidHandle {
		err = errnoErr(e1)
	}
	return
}

func getCurrentThread() (h syscall.Handle) {
	r0, _, _ := syscall.Syscall(procGetCurrentThread.Addr(), 0, 0, 0, 0)
	h = syscall.Handle(r0)
	return
}

func getNamedPipeHandleState(pipe syscall.Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) {
	r1, _, e1 := syscall.Syscall9(procGetNamedPipeHandleStateW.Addr(), 7, uintptr(pipe), uintptr(unsafe.Pointer(state)), uintptr(unsafe.Pointer(curInstances)), uintptr(unsafe.Pointer(maxCollectionCount)), uintptr(unsafe.Pointer(collectDataTimeout)), uintptr(unsafe.Pointer(userName)), uintptr(maxUserNameSize), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func getNamedPipeInfo(pipe syscall.Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procGetNamedPipeInfo.Addr(), 5, uintptr(pipe), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(outSize)), uintptr(unsafe.Pointer(inSize)), uintptr(unsafe.Pointer(maxInstances)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func getQueuedCompletionStatus(port syscall.Handle, bytes *uint32, key *uintptr, o **ioOperation, timeout uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procGetQueuedCompletionStatus.Addr(), 5, uintptr(port), uintptr(unsafe.Pointer(bytes)), uintptr(unsafe.Pointer(key)), uintptr(unsafe.Pointer(o)), uintptr(timeout), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func localAlloc(uFlags uint32, length uint32) (ptr uintptr) {
	r0, _, _ := syscall.Syscall(procLocalAlloc.Addr(), 2, uintptr(uFlags), uintptr(length), 0)
	ptr = uintptr(r0)
	return
}

func localFree(mem uintptr) {
	syscall.Syscall(procLocalFree.Addr(), 1, uintptr(mem), 0, 0)
	return
}

func setFileCompletionNotificationModes(h syscall.Handle, flags uint8) (err error) {
	r1, _, e1 := syscall.Syscall(procSetFileCompletionNotificationModes.Addr(), 2, uintptr(h), uintptr(flags), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func ntCreateNamedPipeFile(pipe *syscall.Handle, access uint32, oa *objectAttributes, iosb *ioStatusBlock, share uint32, disposition uint32, options uint32, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (status ntStatus) {
	r0, _, _ := syscall.Syscall15(procNtCreateNamedPipeFile.Addr(), 14, uintptr(unsafe.Pointer(pipe)), uintptr(access), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(share), uintptr(disposition), uintptr(options), uintptr(typ), uintptr(readMode), uintptr(completionMode), uintptr(maxInstances), uintptr(inboundQuota), uintptr(outputQuota), uintptr(unsafe.Pointer(timeout)), 0)
	status = ntStatus(r0)
	return
}

func rtlDefaultNpAcl(dacl *uintptr) (status ntStatus) {
	r0, _, _ := syscall.Syscall(procRtlDefaultNpAcl.Addr(), 1, uintptr(unsafe.Pointer(dacl)), 0, 0)
	status = ntStatus(r0)
	return
}

func rtlDosPathNameToNtPathName(name *uint16, ntName *unicodeString, filePart uintptr, reserved uintptr) (status ntStatus) {
	r0, _, _ := syscall.Syscall6(procRtlDosPathNameToNtPathName_U.Addr(), 4, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(ntName)), uintptr(filePart), uintptr(reserved), 0, 0)
	status = ntStatus(r0)
	return
}

func rtlNtStatusToDosError(status ntStatus) (winerr error) {
	r0, _, _ := syscall.Syscall(procRtlNtStatusToDosErrorNoTeb.Addr(), 1, uintptr(status), 0, 0)
	if r0 != 0 {
		winerr = syscall.Errno(r0)
	}
	return
}

func wsaGetOverlappedResult(h syscall.Handle, o *syscall.Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) {
	var _p0 uint32
	if wait {
		_p0 = 1
	}
	r1, _, e1 := syscall.Syscall6(procWSAGetOverlappedResult.Addr(), 5, uintptr(h), uintptr(unsafe.Pointer(o)), uintptr(unsafe.Pointer(bytes)), uintptr(_p0), uintptr(unsafe.Pointer(flags)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}
  07070100000113000041ED000000000000000000000005645E367C00000000000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim   07070100000114000081A4000000000000000000000001645E367C00000433000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/LICENSE   The MIT License (MIT)

Copyright (c) 2015 Microsoft

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. 07070100000115000041ED00000000000000000000000D645E367C00000000000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal  07070100000116000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs  07070100000117000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2  07070100000118000081A4000000000000000000000001645E367C00000408000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/attachment.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type Attachment struct {
	Type_ string `json:"Type,omitempty"`

	Path string `json:"Path,omitempty"`

	IgnoreFlushes bool `json:"IgnoreFlushes,omitempty"`

	CachingMode string `json:"CachingMode,omitempty"`

	NoWriteHardening bool `json:"NoWriteHardening,omitempty"`

	DisableExpansionOptimization bool `json:"DisableExpansionOptimization,omitempty"`

	IgnoreRelativeLocator bool `json:"IgnoreRelativeLocator,omitempty"`

	CaptureIoAttributionContext bool `json:"CaptureIoAttributionContext,omitempty"`

	ReadOnly bool `json:"ReadOnly,omitempty"`

	SupportCompressedVolumes bool `json:"SupportCompressedVolumes,omitempty"`

	AlwaysAllowSparseFiles bool `json:"AlwaysAllowSparseFiles,omitempty"`

	ExtensibleVirtualDiskType string `json:"ExtensibleVirtualDiskType,omitempty"`
}
07070100000119000081A4000000000000000000000001645E367C00000117000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/battery.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type Battery struct {
}
 0707010000011A000081A4000000000000000000000001645E367C000001D5000000000000000000000000000000000000006B00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/cache_query_stats_response.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type CacheQueryStatsResponse struct {
	L3OccupancyBytes int32 `json:"L3OccupancyBytes,omitempty"`

	L3TotalBwBytes int32 `json:"L3TotalBwBytes,omitempty"`

	L3LocalBwBytes int32 `json:"L3LocalBwBytes,omitempty"`
}
   0707010000011B000081A4000000000000000000000001645E367C000002EB000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/chipset.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type Chipset struct {
	Uefi *Uefi `json:"Uefi,omitempty"`

	IsNumLockDisabled bool `json:"IsNumLockDisabled,omitempty"`

	BaseBoardSerialNumber string `json:"BaseBoardSerialNumber,omitempty"`

	ChassisSerialNumber string `json:"ChassisSerialNumber,omitempty"`

	ChassisAssetTag string `json:"ChassisAssetTag,omitempty"`

	UseUtc bool `json:"UseUtc,omitempty"`

	// LinuxKernelDirect - Added in v2.2 Builds >=181117
	LinuxKernelDirect *LinuxKernelDirect `json:"LinuxKernelDirect,omitempty"`
}
 0707010000011C000081A4000000000000000000000001645E367C00000144000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/close_handle.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type CloseHandle struct {
	Handle string `json:"Handle,omitempty"`
}
0707010000011D000081A4000000000000000000000001645E367C000001FF000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/com_port.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

//  ComPort specifies the named pipe that will be used for the port, with empty string indicating a disconnected port.
type ComPort struct {
	NamedPipe string `json:"NamedPipe,omitempty"`

	OptimizeForDebugger bool `json:"OptimizeForDebugger,omitempty"`
}
 0707010000011E000081A4000000000000000000000001645E367C000002CA000000000000000000000000000000000000005F00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/compute_system.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type ComputeSystem struct {
	Owner string `json:"Owner,omitempty"`

	SchemaVersion *Version `json:"SchemaVersion,omitempty"`

	HostingSystemId string `json:"HostingSystemId,omitempty"`

	HostedSystem interface{} `json:"HostedSystem,omitempty"`

	Container *Container `json:"Container,omitempty"`

	VirtualMachine *VirtualMachine `json:"VirtualMachine,omitempty"`

	ShouldTerminateOnLastHandleClosed bool `json:"ShouldTerminateOnLastHandleClosed,omitempty"`
}
  0707010000011F000081A4000000000000000000000001645E367C00000843000000000000000000000000000000000000005E00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/configuration.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

import (
	"net/http"
)

// contextKeys are used to identify the type of value in the context.
// Since these are string, it is possible to get a short description of the
// context key for logging and debugging using key.String().

type contextKey string

func (c contextKey) String() string {
	return "auth " + string(c)
}

var (
	// ContextOAuth2 takes a oauth2.TokenSource as authentication for the request.
	ContextOAuth2 = contextKey("token")

	// ContextBasicAuth takes BasicAuth as authentication for the request.
	ContextBasicAuth = contextKey("basic")

	// ContextAccessToken takes a string oauth2 access token as authentication for the request.
	ContextAccessToken = contextKey("accesstoken")

	// ContextAPIKey takes an APIKey as authentication for the request
	ContextAPIKey = contextKey("apikey")
)

// BasicAuth provides basic http authentication to a request passed via context using ContextBasicAuth
type BasicAuth struct {
	UserName string `json:"userName,omitempty"`
	Password string `json:"password,omitempty"`
}

// APIKey provides API key based authentication to a request passed via context using ContextAPIKey
type APIKey struct {
	Key    string
	Prefix string
}

type Configuration struct {
	BasePath      string            `json:"basePath,omitempty"`
	Host          string            `json:"host,omitempty"`
	Scheme        string            `json:"scheme,omitempty"`
	DefaultHeader map[string]string `json:"defaultHeader,omitempty"`
	UserAgent     string            `json:"userAgent,omitempty"`
	HTTPClient    *http.Client
}

func NewConfiguration() *Configuration {
	cfg := &Configuration{
		BasePath:      "https://localhost",
		DefaultHeader: make(map[string]string),
		UserAgent:     "Swagger-Codegen/2.1.0/go",
	}
	return cfg
}

func (c *Configuration) AddDefaultHeader(key string, value string) {
	c.DefaultHeader[key] = value
}
 07070100000120000081A4000000000000000000000001645E367C0000016A000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/console_size.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type ConsoleSize struct {
	Height int32 `json:"Height,omitempty"`

	Width int32 `json:"Width,omitempty"`
}
  07070100000121000081A4000000000000000000000001645E367C0000040E000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/container.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type Container struct {
	GuestOs *GuestOs `json:"GuestOs,omitempty"`

	Storage *Storage `json:"Storage,omitempty"`

	MappedDirectories []MappedDirectory `json:"MappedDirectories,omitempty"`

	MappedPipes []MappedPipe `json:"MappedPipes,omitempty"`

	Memory *Memory `json:"Memory,omitempty"`

	Processor *Processor `json:"Processor,omitempty"`

	Networking *Networking `json:"Networking,omitempty"`

	HvSocket *HvSocket `json:"HvSocket,omitempty"`

	ContainerCredentialGuard *ContainerCredentialGuardState `json:"ContainerCredentialGuard,omitempty"`

	RegistryChanges *RegistryChanges `json:"RegistryChanges,omitempty"`

	AssignedDevices []Device `json:"AssignedDevices,omitempty"`

	AdditionalDeviceNamespace *ContainerDefinitionDevice `json:"AdditionalDeviceNamespace,omitempty"`
}
  07070100000122000081A4000000000000000000000001645E367C000001D4000000000000000000000000000000000000008000000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/container_credential_guard_add_instance_request.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type ContainerCredentialGuardAddInstanceRequest struct {
	Id             string `json:"Id,omitempty"`
	CredentialSpec string `json:"CredentialSpec,omitempty"`
	Transport      string `json:"Transport,omitempty"`
}
07070100000123000081A4000000000000000000000001645E367C000001C7000000000000000000000000000000000000008400000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/container_credential_guard_hv_socket_service_config.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type ContainerCredentialGuardHvSocketServiceConfig struct {
	ServiceId     string                 `json:"ServiceId,omitempty"`
	ServiceConfig *HvSocketServiceConfig `json:"ServiceConfig,omitempty"`
}
 07070100000124000081A4000000000000000000000001645E367C0000024B000000000000000000000000000000000000007400000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/container_credential_guard_instance.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type ContainerCredentialGuardInstance struct {
	Id              string                                         `json:"Id,omitempty"`
	CredentialGuard *ContainerCredentialGuardState                 `json:"CredentialGuard,omitempty"`
	HvSocketConfig  *ContainerCredentialGuardHvSocketServiceConfig `json:"HvSocketConfig,omitempty"`
}
 07070100000125000081A4000000000000000000000001645E367C000001D1000000000000000000000000000000000000007C00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/container_credential_guard_modify_operation.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type ContainerCredentialGuardModifyOperation string

const (
	AddInstance    ContainerCredentialGuardModifyOperation = "AddInstance"
	RemoveInstance ContainerCredentialGuardModifyOperation = "RemoveInstance"
)
   07070100000126000081A4000000000000000000000001645E367C000001ED000000000000000000000000000000000000007D00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/container_credential_guard_operation_request.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type ContainerCredentialGuardOperationRequest struct {
	Operation        ContainerCredentialGuardModifyOperation `json:"Operation,omitempty"`
	OperationDetails interface{}                             `json:"OperationDetails,omitempty"`
}
   07070100000127000081A4000000000000000000000001645E367C0000015E000000000000000000000000000000000000008300000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/container_credential_guard_remove_instance_request.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type ContainerCredentialGuardRemoveInstanceRequest struct {
	Id string `json:"Id,omitempty"`
}
  07070100000128000081A4000000000000000000000001645E367C0000032C000000000000000000000000000000000000007100000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/container_credential_guard_state.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type ContainerCredentialGuardState struct {

	//  Authentication cookie for calls to a Container Credential Guard instance.
	Cookie string `json:"Cookie,omitempty"`

	//  Name of the RPC endpoint of the Container Credential Guard instance.
	RpcEndpoint string `json:"RpcEndpoint,omitempty"`

	//  Transport used for the configured Container Credential Guard instance.
	Transport string `json:"Transport,omitempty"`

	//  Credential spec used for the configured Container Credential Guard instance.
	CredentialSpec string `json:"CredentialSpec,omitempty"`
}
07070100000129000081A4000000000000000000000001645E367C0000017D000000000000000000000000000000000000007700000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/container_credential_guard_system_info.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type ContainerCredentialGuardSystemInfo struct {
	Instances []ContainerCredentialGuardInstance `json:"Instances,omitempty"`
}
   0707010000012A000081A4000000000000000000000001645E367C000002CE000000000000000000000000000000000000006D00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/container_memory_information.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

//  memory usage as viewed from within the container
type ContainerMemoryInformation struct {
	TotalPhysicalBytes int32 `json:"TotalPhysicalBytes,omitempty"`

	TotalUsage int32 `json:"TotalUsage,omitempty"`

	CommittedBytes int32 `json:"CommittedBytes,omitempty"`

	SharedCommittedBytes int32 `json:"SharedCommittedBytes,omitempty"`

	CommitLimitBytes int32 `json:"CommitLimitBytes,omitempty"`

	PeakCommitmentBytes int32 `json:"PeakCommitmentBytes,omitempty"`
}
  0707010000012B000081A4000000000000000000000001645E367C000001B9000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/cpu_group.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

// CPU groups allow Hyper-V administrators to better manage and allocate the host's CPU resources across guest virtual machines
type CpuGroup struct {
	Id string `json:"Id,omitempty"`
}
   0707010000012C000081A4000000000000000000000001645E367C000001AC000000000000000000000000000000000000006300000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/cpu_group_affinity.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type CpuGroupAffinity struct {
	LogicalProcessorCount int32   `json:"LogicalProcessorCount,omitempty"`
	LogicalProcessors     []int32 `json:"LogicalProcessors,omitempty"`
}
0707010000012D000081A4000000000000000000000001645E367C00000253000000000000000000000000000000000000006100000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/cpu_group_config.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type CpuGroupConfig struct {
	GroupId         string             `json:"GroupId,omitempty"`
	Affinity        *CpuGroupAffinity  `json:"Affinity,omitempty"`
	GroupProperties []CpuGroupProperty `json:"GroupProperties,omitempty"`
	// Hypervisor CPU group IDs exposed to clients
	HypervisorGroupId uint64 `json:"HypervisorGroupId,omitempty"`
}
 0707010000012E000081A4000000000000000000000001645E367C000001A3000000000000000000000000000000000000006900000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/cpu_group_configurations.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

// Structure used to return cpu groups for a Service property query
type CpuGroupConfigurations struct {
	CpuGroups []CpuGroupConfig `json:"CpuGroups,omitempty"`
}
 0707010000012F000081A4000000000000000000000001645E367C000001B5000000000000000000000000000000000000006500000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/cpu_group_operations.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type CPUGroupOperation string

const (
	CreateGroup CPUGroupOperation = "CreateGroup"
	DeleteGroup CPUGroupOperation = "DeleteGroup"
	SetProperty CPUGroupOperation = "SetProperty"
)
   07070100000130000081A4000000000000000000000001645E367C0000023E000000000000000000000000000000000000006300000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/cpu_group_property.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type CPUGroupPropertyCode uint32

const (
	CPUCapacityProperty           = 0x00010000
	CPUSchedulingPriorityProperty = 0x00020000
	IdleLPReserveProperty         = 0x00030000
)

type CpuGroupProperty struct {
	PropertyCode  uint32 `json:"PropertyCode,omitempty"`
	PropertyValue uint32 `json:"PropertyValue,omitempty"`
}
  07070100000131000081A4000000000000000000000001645E367C00000210000000000000000000000000000000000000006700000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/create_group_operation.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

// Create group operation settings
type CreateGroupOperation struct {
	GroupId               string   `json:"GroupId,omitempty"`
	LogicalProcessorCount uint32   `json:"LogicalProcessorCount,omitempty"`
	LogicalProcessors     []uint32 `json:"LogicalProcessors,omitempty"`
}
07070100000132000081A4000000000000000000000001645E367C000003F4000000000000000000000000000000000000005E00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/debug_options.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type DebugOptions struct {
	// BugcheckSavedStateFileName is the path for the file in which the guest VM state will be saved when
	// the guest crashes.
	BugcheckSavedStateFileName string `json:"BugcheckSavedStateFileName,omitempty"`
	// BugcheckNoCrashdumpSavedStateFileName is the path of the file in which the guest VM state will be
	// saved when the guest crashes but the guest isn't able to generate the crash dump. This usually
	// happens in early boot failures.
	BugcheckNoCrashdumpSavedStateFileName string `json:"BugcheckNoCrashdumpSavedStateFileName,omitempty"`
	TripleFaultSavedStateFileName         string `json:"TripleFaultSavedStateFileName,omitempty"`
	FirmwareDumpFileName                  string `json:"FirmwareDumpFileName,omitempty"`
}
07070100000133000081A4000000000000000000000001645E367C00000172000000000000000000000000000000000000006700000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/delete_group_operation.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

// Delete group operation settings
type DeleteGroupOperation struct {
	GroupId string `json:"GroupId,omitempty"`
}
  07070100000134000081A4000000000000000000000001645E367C00000374000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/device.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type DeviceType string

const (
	ClassGUID        DeviceType = "ClassGuid"
	DeviceInstanceID DeviceType = "DeviceInstance"
	GPUMirror        DeviceType = "GpuMirror"
)

type Device struct {
	//  The type of device to assign to the container.
	Type DeviceType `json:"Type,omitempty"`
	//  The interface class guid of the device interfaces to assign to the  container.  Only used when Type is ClassGuid.
	InterfaceClassGuid string `json:"InterfaceClassGuid,omitempty"`
	//  The location path of the device to assign to the container.  Only used when Type is DeviceInstanceID.
	LocationPath string `json:"LocationPath,omitempty"`
}
07070100000135000081A4000000000000000000000001645E367C00000552000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/devices.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type Devices struct {
	ComPorts map[string]ComPort `json:"ComPorts,omitempty"`

	Scsi map[string]Scsi `json:"Scsi,omitempty"`

	VirtualPMem *VirtualPMemController `json:"VirtualPMem,omitempty"`

	NetworkAdapters map[string]NetworkAdapter `json:"NetworkAdapters,omitempty"`

	VideoMonitor *VideoMonitor `json:"VideoMonitor,omitempty"`

	Keyboard *Keyboard `json:"Keyboard,omitempty"`

	Mouse *Mouse `json:"Mouse,omitempty"`

	HvSocket *HvSocket2 `json:"HvSocket,omitempty"`

	EnhancedModeVideo *EnhancedModeVideo `json:"EnhancedModeVideo,omitempty"`

	GuestCrashReporting *GuestCrashReporting `json:"GuestCrashReporting,omitempty"`

	VirtualSmb *VirtualSmb `json:"VirtualSmb,omitempty"`

	Plan9 *Plan9 `json:"Plan9,omitempty"`

	Battery *Battery `json:"Battery,omitempty"`

	FlexibleIov map[string]FlexibleIoDevice `json:"FlexibleIov,omitempty"`

	SharedMemory *SharedMemoryConfiguration `json:"SharedMemory,omitempty"`

	// TODO: This is pre-release support in schema 2.3. Need to add build number
	// docs when a public build with this is out.
	VirtualPci map[string]VirtualPciDevice `json:",omitempty"`
}
  07070100000136000081A4000000000000000000000001645E367C0000016F000000000000000000000000000000000000006400000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/enhanced_mode_video.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type EnhancedModeVideo struct {
	ConnectionOptions *RdpConnectionOptions `json:"ConnectionOptions,omitempty"`
}
 07070100000137000081A4000000000000000000000001645E367C000001C1000000000000000000000000000000000000006300000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/flexible_io_device.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type FlexibleIoDevice struct {
	EmulatorId string `json:"EmulatorId,omitempty"`

	HostingModel string `json:"HostingModel,omitempty"`

	Configuration []string `json:"Configuration,omitempty"`
}
   07070100000138000081A4000000000000000000000001645E367C0000022C000000000000000000000000000000000000006100000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/guest_connection.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type GuestConnection struct {

	//  Use Vsock rather than Hyper-V sockets to communicate with the guest service.
	UseVsock bool `json:"UseVsock,omitempty"`

	//  Don't disconnect the guest connection when pausing the virtual machine.
	UseConnectedSuspend bool `json:"UseConnectedSuspend,omitempty"`
}
07070100000139000081A4000000000000000000000001645E367C000002C6000000000000000000000000000000000000006600000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/guest_connection_info.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

//  Information about the guest.
type GuestConnectionInfo struct {

	//  Each schema version x.y stands for the range of versions a.b where a==x  and b<=y. This list comes from the SupportedSchemaVersions field in  GcsCapabilities.
	SupportedSchemaVersions []Version `json:"SupportedSchemaVersions,omitempty"`

	ProtocolVersion int32 `json:"ProtocolVersion,omitempty"`

	GuestDefinedCapabilities *interface{} `json:"GuestDefinedCapabilities,omitempty"`
}
  0707010000013A000081A4000000000000000000000001645E367C00000178000000000000000000000000000000000000006600000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/guest_crash_reporting.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type GuestCrashReporting struct {
	WindowsCrashSettings *WindowsCrashReporting `json:"WindowsCrashSettings,omitempty"`
}
0707010000013B000081A4000000000000000000000001645E367C00000144000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/guest_os.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type GuestOs struct {
	HostName string `json:"HostName,omitempty"`
}
0707010000013C000081A4000000000000000000000001645E367C00000495000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/guest_state.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type GuestState struct {

	//  The path to an existing file uses for persistent guest state storage.  An empty string indicates the system should initialize new transient, in-memory guest state.
	GuestStateFilePath string `json:"GuestStateFilePath,omitempty"`

	//  The guest state file type affected by different guest isolation modes - whether a file or block storage.
	GuestStateFileType string `json:"GuestStateFileType,omitempty"`

	//  The path to an existing file for persistent runtime state storage.  An empty string indicates the system should initialize new transient, in-memory runtime state.
	RuntimeStateFilePath string `json:"RuntimeStateFilePath,omitempty"`

	//  If true, the guest state and runtime state files will be used as templates  to populate transient, in-memory state instead of using the files as persistent backing store.
	ForceTransientState bool `json:"ForceTransientState,omitempty"`
}
   0707010000013D000081A4000000000000000000000001645E367C000001F7000000000000000000000000000000000000006E00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/host_processor_modify_request.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

// Structure used to request a service processor modification
type HostProcessorModificationRequest struct {
	Operation        CPUGroupOperation `json:"Operation,omitempty"`
	OperationDetails interface{}       `json:"OperationDetails,omitempty"`
}
 0707010000013E000081A4000000000000000000000001645E367C00000189000000000000000000000000000000000000005E00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/hosted_system.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type HostedSystem struct {
	SchemaVersion *Version `json:"SchemaVersion,omitempty"`

	Container *Container `json:"Container,omitempty"`
}
   0707010000013F000081A4000000000000000000000001645E367C00000198000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/hv_socket.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type HvSocket struct {
	Config *HvSocketSystemConfig `json:"Config,omitempty"`

	EnablePowerShellDirect bool `json:"EnablePowerShellDirect,omitempty"`
}
07070100000140000081A4000000000000000000000001645E367C00000185000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/hv_socket_2.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

//  HvSocket configuration for a VM
type HvSocket2 struct {
	HvSocketConfig *HvSocketSystemConfig `json:"HvSocketConfig,omitempty"`
}
   07070100000141000081A4000000000000000000000001645E367C000001F7000000000000000000000000000000000000006200000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/hv_socket_address.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

//  This class defines address settings applied to a VM
//  by the GCS every time a VM starts or restores.
type HvSocketAddress struct {
	LocalAddress  string `json:"LocalAddress,omitempty"`
	ParentAddress string `json:"ParentAddress,omitempty"`
}
 07070100000142000081A4000000000000000000000001645E367C00000607000000000000000000000000000000000000006900000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/hv_socket_service_config.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type HvSocketServiceConfig struct {

	//  SDDL string that HvSocket will check before allowing a host process to bind  to this specific service.  If not specified, defaults to the system DefaultBindSecurityDescriptor, defined in  HvSocketSystemWpConfig in V1.
	BindSecurityDescriptor string `json:"BindSecurityDescriptor,omitempty"`

	//  SDDL string that HvSocket will check before allowing a host process to connect  to this specific service.  If not specified, defaults to the system DefaultConnectSecurityDescriptor, defined in  HvSocketSystemWpConfig in V1.
	ConnectSecurityDescriptor string `json:"ConnectSecurityDescriptor,omitempty"`

	//  If true, HvSocket will process wildcard binds for this service/system combination.  Wildcard binds are secured in the registry at  SOFTWARE/Microsoft/Windows NT/CurrentVersion/Virtualization/HvSocket/WildcardDescriptors
	AllowWildcardBinds bool `json:"AllowWildcardBinds,omitempty"`

	// Disabled controls whether the HvSocket service is accepting connection requests.
	// This set to true will make the service refuse all incoming connections as well as cancel
	// any connections already established. The service itself will still be active however
	// and can be re-enabled at a future time.
	Disabled bool `json:"Disabled,omitempty"`
}
 07070100000143000081A4000000000000000000000001645E367C000003C4000000000000000000000000000000000000006800000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/hv_socket_system_config.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

//  This is the HCS Schema version of the HvSocket configuration. The VMWP version is  located in Config.Devices.IC in V1.
type HvSocketSystemConfig struct {

	//  SDDL string that HvSocket will check before allowing a host process to bind  to an unlisted service for this specific container/VM (not wildcard binds).
	DefaultBindSecurityDescriptor string `json:"DefaultBindSecurityDescriptor,omitempty"`

	//  SDDL string that HvSocket will check before allowing a host process to connect  to an unlisted service in the VM/container.
	DefaultConnectSecurityDescriptor string `json:"DefaultConnectSecurityDescriptor,omitempty"`

	ServiceTable map[string]HvSocketServiceConfig `json:"ServiceTable,omitempty"`
}
07070100000144000081A4000000000000000000000001645E367C0000049D000000000000000000000000000000000000006A00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/interrupt_moderation_mode.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type InterruptModerationName string

// The valid interrupt moderation modes for I/O virtualization (IOV) offloading.
const (
	DefaultName  InterruptModerationName = "Default"
	AdaptiveName InterruptModerationName = "Adaptive"
	OffName      InterruptModerationName = "Off"
	LowName      InterruptModerationName = "Low"
	MediumName   InterruptModerationName = "Medium"
	HighName     InterruptModerationName = "High"
)

type InterruptModerationValue uint32

const (
	DefaultValue InterruptModerationValue = iota
	AdaptiveValue
	OffValue
	LowValue    InterruptModerationValue = 100
	MediumValue InterruptModerationValue = 200
	HighValue   InterruptModerationValue = 300
)

var InterruptModerationValueToName = map[InterruptModerationValue]InterruptModerationName{
	DefaultValue:  DefaultName,
	AdaptiveValue: AdaptiveName,
	OffValue:      OffName,
	LowValue:      LowName,
	MediumValue:   MediumName,
	HighValue:     HighName,
}
   07070100000145000081A4000000000000000000000001645E367C00000315000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/iov_settings.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type IovSettings struct {
	// The weight assigned to this port for I/O virtualization (IOV) offloading.
	// Setting this to 0 disables IOV offloading.
	OffloadWeight *uint32 `json:"OffloadWeight,omitempty"`

	// The number of queue pairs requested for this port for I/O virtualization (IOV) offloading.
	QueuePairsRequested *uint32 `json:"QueuePairsRequested,omitempty"`

	// The interrupt moderation mode for I/O virtualization (IOV) offloading.
	InterruptModeration *InterruptModerationName `json:"InterruptModeration,omitempty"`
}
   07070100000146000081A4000000000000000000000001645E367C0000039E000000000000000000000000000000000000006300000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/isolation_settings.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type IsolationSettings struct {
	// Guest isolation type options to decide virtual trust levels of virtual machine
	IsolationType string `json:"IsolationType,omitempty"`
	// Configuration to debug HCL layer for HCS VM TODO: Task 31102306: Miss the way to prevent the exposure of private debug configuration in HCS TODO: Think about the secret configurations which are private in VMMS VM (only edit by hvsedit)
	DebugHost string `json:"DebugHost,omitempty"`
	DebugPort int64  `json:"DebugPort,omitempty"`
	// Optional data passed by host on isolated virtual machine start
	LaunchData string `json:"LaunchData,omitempty"`
	HclEnabled bool   `json:"HclEnabled,omitempty"`
}
  07070100000147000081A4000000000000000000000001645E367C00000118000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/keyboard.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type Keyboard struct {
}
07070100000148000081A4000000000000000000000001645E367C000001D7000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/layer.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type Layer struct {
	Id string `json:"Id,omitempty"`

	Path string `json:"Path,omitempty"`

	PathType string `json:"PathType,omitempty"`

	//  Unspecified defaults to Enabled
	Cache string `json:"Cache,omitempty"`
}
 07070100000149000081A4000000000000000000000001645E367C000001C4000000000000000000000000000000000000006400000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/linux_kernel_direct.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.2
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type LinuxKernelDirect struct {
	KernelFilePath string `json:"KernelFilePath,omitempty"`

	InitRdPath string `json:"InitRdPath,omitempty"`

	KernelCmdLine string `json:"KernelCmdLine,omitempty"`
}
0707010000014A000081A4000000000000000000000001645E367C00000213000000000000000000000000000000000000006200000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/logical_processor.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type LogicalProcessor struct {
	LpIndex     uint32 `json:"LpIndex,omitempty"`
	NodeNumber  uint8  `json:"NodeNumber,omitempty"`
	PackageId   uint32 `json:"PackageId,omitempty"`
	CoreId      uint32 `json:"CoreId,omitempty"`
	RootVpIndex int32  `json:"RootVpIndex,omitempty"`
}
 0707010000014B000081A4000000000000000000000001645E367C000001E6000000000000000000000000000000000000006100000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/mapped_directory.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type MappedDirectory struct {
	HostPath string `json:"HostPath,omitempty"`

	HostPathType string `json:"HostPathType,omitempty"`

	ContainerPath string `json:"ContainerPath,omitempty"`

	ReadOnly bool `json:"ReadOnly,omitempty"`
}
  0707010000014C000081A4000000000000000000000001645E367C000001BD000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/mapped_pipe.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type MappedPipe struct {
	ContainerPipeName string `json:"ContainerPipeName,omitempty"`

	HostPath string `json:"HostPath,omitempty"`

	HostPathType string `json:"HostPathType,omitempty"`
}
   0707010000014D000081A4000000000000000000000001645E367C00000143000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/memory.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type Memory struct {
	SizeInMB uint64 `json:"SizeInMB,omitempty"`
}
 0707010000014E000081A4000000000000000000000001645E367C000006C7000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/memory_2.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type Memory2 struct {
	SizeInMB uint64 `json:"SizeInMB,omitempty"`

	AllowOvercommit bool `json:"AllowOvercommit,omitempty"`

	EnableHotHint bool `json:"EnableHotHint,omitempty"`

	EnableColdHint bool `json:"EnableColdHint,omitempty"`

	EnableEpf bool `json:"EnableEpf,omitempty"`

	// EnableDeferredCommit is private in the schema. If regenerated need to add back.
	EnableDeferredCommit bool `json:"EnableDeferredCommit,omitempty"`

	// EnableColdDiscardHint if enabled, then the memory cold discard hint feature is exposed
	// to the VM, allowing it to trim non-zeroed pages from the working set (if supported by
	// the guest operating system).
	EnableColdDiscardHint bool `json:"EnableColdDiscardHint,omitempty"`

	// LowMmioGapInMB is the low MMIO region allocated below 4GB.
	//
	// TODO: This is pre-release support in schema 2.3. Need to add build number
	// docs when a public build with this is out.
	LowMMIOGapInMB uint64 `json:"LowMmioGapInMB,omitempty"`

	// HighMmioBaseInMB is the high MMIO region allocated above 4GB (base and
	// size).
	//
	// TODO: This is pre-release support in schema 2.3. Need to add build number
	// docs when a public build with this is out.
	HighMMIOBaseInMB uint64 `json:"HighMmioBaseInMB,omitempty"`

	// HighMmioGapInMB is the high MMIO region.
	//
	// TODO: This is pre-release support in schema 2.3. Need to add build number
	// docs when a public build with this is out.
	HighMMIOGapInMB uint64 `json:"HighMmioGapInMB,omitempty"`
}
 0707010000014F000081A4000000000000000000000001645E367C000001ED000000000000000000000000000000000000006A00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/memory_information_for_vm.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type MemoryInformationForVm struct {
	VirtualNodeCount uint32 `json:"VirtualNodeCount,omitempty"`

	VirtualMachineMemory *VmMemory `json:"VirtualMachineMemory,omitempty"`

	VirtualNodes []VirtualNodeInfo `json:"VirtualNodes,omitempty"`
}
   07070100000150000081A4000000000000000000000001645E367C00000234000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/memory_stats.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

//  Memory runtime statistics
type MemoryStats struct {
	MemoryUsageCommitBytes uint64 `json:"MemoryUsageCommitBytes,omitempty"`

	MemoryUsageCommitPeakBytes uint64 `json:"MemoryUsageCommitPeakBytes,omitempty"`

	MemoryUsagePrivateWorkingSetBytes uint64 `json:"MemoryUsagePrivateWorkingSetBytes,omitempty"`
}
07070100000151000081A4000000000000000000000001645E367C00000170000000000000000000000000000000000000007200000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/model_container_definition_device.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type ContainerDefinitionDevice struct {
	DeviceExtension []DeviceExtension `json:"device_extension,omitempty"`
}
07070100000152000081A4000000000000000000000001645E367C0000019B000000000000000000000000000000000000006600000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/model_device_category.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type DeviceCategory struct {
	Name           string           `json:"name,omitempty"`
	InterfaceClass []InterfaceClass `json:"interface_class,omitempty"`
}
 07070100000153000081A4000000000000000000000001645E367C000001B3000000000000000000000000000000000000006700000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/model_device_extension.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type DeviceExtension struct {
	DeviceCategory *DeviceCategory           `json:"device_category,omitempty"`
	Namespace      *DeviceExtensionNamespace `json:"namespace,omitempty"`
}
 07070100000154000081A4000000000000000000000001645E367C00000219000000000000000000000000000000000000006600000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/model_device_instance.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type DeviceInstance struct {
	Id             string           `json:"id,omitempty"`
	LocationPath   string           `json:"location_path,omitempty"`
	PortName       string           `json:"port_name,omitempty"`
	InterfaceClass []InterfaceClass `json:"interface_class,omitempty"`
}
   07070100000155000081A4000000000000000000000001645E367C000001FF000000000000000000000000000000000000006700000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/model_device_namespace.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type DeviceNamespace struct {
	RequiresDriverstore bool             `json:"requires_driverstore,omitempty"`
	DeviceCategory      []DeviceCategory `json:"device_category,omitempty"`
	DeviceInstance      []DeviceInstance `json:"device_instance,omitempty"`
}
 07070100000156000081A4000000000000000000000001645E367C000001A8000000000000000000000000000000000000006600000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/model_interface_class.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type InterfaceClass struct {
	Type_      string `json:"type,omitempty"`
	Identifier string `json:"identifier,omitempty"`
	Recurse    bool   `json:"recurse,omitempty"`
}
07070100000157000081A4000000000000000000000001645E367C0000018A000000000000000000000000000000000000006000000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/model_namespace.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type DeviceExtensionNamespace struct {
	Ob     *ObjectNamespace `json:"ob,omitempty"`
	Device *DeviceNamespace `json:"device,omitempty"`
}
  07070100000158000081A4000000000000000000000001645E367C00000228000000000000000000000000000000000000006700000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/model_object_directory.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type ObjectDirectory struct {
	Name    string            `json:"name,omitempty"`
	Clonesd string            `json:"clonesd,omitempty"`
	Shadow  string            `json:"shadow,omitempty"`
	Symlink []ObjectSymlink   `json:"symlink,omitempty"`
	Objdir  []ObjectDirectory `json:"objdir,omitempty"`
}
07070100000159000081A4000000000000000000000001645E367C000001BF000000000000000000000000000000000000006700000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/model_object_namespace.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type ObjectNamespace struct {
	Shadow  string            `json:"shadow,omitempty"`
	Symlink []ObjectSymlink   `json:"symlink,omitempty"`
	Objdir  []ObjectDirectory `json:"objdir,omitempty"`
}
 0707010000015A000081A4000000000000000000000001645E367C00000208000000000000000000000000000000000000006500000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/model_object_symlink.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type ObjectSymlink struct {
	Name        string `json:"name,omitempty"`
	Path        string `json:"path,omitempty"`
	Scope       string `json:"scope,omitempty"`
	Pathtoclone string `json:"pathtoclone,omitempty"`
	AccessMask  int32  `json:"access_mask,omitempty"`
}
0707010000015B000081A4000000000000000000000001645E367C00000195000000000000000000000000000000000000006500000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/modification_request.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type ModificationRequest struct {
	PropertyType PropertyType `json:"PropertyType,omitempty"`
	Settings     interface{}  `json:"Settings,omitempty"`
}
   0707010000015C000081A4000000000000000000000001645E367C00000302000000000000000000000000000000000000006700000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/modify_setting_request.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

import "github.com/Microsoft/hcsshim/internal/protocol/guestrequest"

type ModifySettingRequest struct {
	ResourcePath string `json:"ResourcePath,omitempty"`

	RequestType guestrequest.RequestType `json:"RequestType,omitempty"` // NOTE: Swagger generated as string. Locally updated.

	Settings interface{} `json:"Settings,omitempty"` // NOTE: Swagger generated as *interface{}. Locally updated

	GuestRequest interface{} `json:"GuestRequest,omitempty"` // NOTE: Swagger generated as *interface{}. Locally updated
}
  0707010000015D000081A4000000000000000000000001645E367C00000115000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/mouse.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type Mouse struct {
}
   0707010000015E000081A4000000000000000000000001645E367C000001F4000000000000000000000000000000000000006000000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/network_adapter.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type NetworkAdapter struct {
	EndpointId string `json:"EndpointId,omitempty"`
	MacAddress string `json:"MacAddress,omitempty"`
	// The I/O virtualization (IOV) offloading configuration.
	IovSettings *IovSettings `json:"IovSettings,omitempty"`
}
0707010000015F000081A4000000000000000000000001645E367C00000283000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/networking.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type Networking struct {
	AllowUnqualifiedDnsQuery bool `json:"AllowUnqualifiedDnsQuery,omitempty"`

	DnsSearchList string `json:"DnsSearchList,omitempty"`

	NetworkSharedContainerName string `json:"NetworkSharedContainerName,omitempty"`

	//  Guid in windows; string in linux
	Namespace string `json:"Namespace,omitempty"`

	NetworkAdapters []string `json:"NetworkAdapters,omitempty"`
}
 07070100000160000081A4000000000000000000000001645E367C000001A0000000000000000000000000000000000000006300000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/pause_notification.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

//  Notification data that is indicated to components running in the Virtual Machine.
type PauseNotification struct {
	Reason string `json:"Reason,omitempty"`
}
07070100000161000081A4000000000000000000000001645E367C000001CB000000000000000000000000000000000000005E00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/pause_options.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

//  Options for HcsPauseComputeSystem
type PauseOptions struct {
	SuspensionLevel string `json:"SuspensionLevel,omitempty"`

	HostedNotification *PauseNotification `json:"HostedNotification,omitempty"`
}
 07070100000162000081A4000000000000000000000001645E367C00000144000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/plan9.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type Plan9 struct {
	Shares []Plan9Share `json:"Shares,omitempty"`
}
07070100000163000081A4000000000000000000000001645E367C0000039F000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/plan9_share.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type Plan9Share struct {
	Name string `json:"Name,omitempty"`

	//  The name by which the guest operation system can access this share, via  the aname parameter in the Plan9 protocol.
	AccessName string `json:"AccessName,omitempty"`

	Path string `json:"Path,omitempty"`

	Port int32 `json:"Port,omitempty"`

	// Flags are marked private. Until they are exported correctly
	//
	// ReadOnly      0x00000001
	// LinuxMetadata 0x00000004
	// CaseSensitive 0x00000008
	Flags int32 `json:"Flags,omitempty"`

	ReadOnly bool `json:"ReadOnly,omitempty"`

	UseShareRootIdentity bool `json:"UseShareRootIdentity,omitempty"`

	AllowedFiles []string `json:"AllowedFiles,omitempty"`
}
 07070100000164000081A4000000000000000000000001645E367C0000035F000000000000000000000000000000000000006000000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/process_details.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

import (
	"time"
)

//  Information about a process running in a container
type ProcessDetails struct {
	ProcessId int32 `json:"ProcessId,omitempty"`

	ImageName string `json:"ImageName,omitempty"`

	CreateTimestamp time.Time `json:"CreateTimestamp,omitempty"`

	UserTime100ns int32 `json:"UserTime100ns,omitempty"`

	KernelTime100ns int32 `json:"KernelTime100ns,omitempty"`

	MemoryCommitBytes int32 `json:"MemoryCommitBytes,omitempty"`

	MemoryWorkingSetPrivateBytes int32 `json:"MemoryWorkingSetPrivateBytes,omitempty"`

	MemoryWorkingSetSharedBytes int32 `json:"MemoryWorkingSetSharedBytes,omitempty"`
}
 07070100000165000081A4000000000000000000000001645E367C000001EA000000000000000000000000000000000000006700000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/process_modify_request.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

//  Passed to HcsRpc_ModifyProcess
type ProcessModifyRequest struct {
	Operation string `json:"Operation,omitempty"`

	ConsoleSize *ConsoleSize `json:"ConsoleSize,omitempty"`

	CloseHandle *CloseHandle `json:"CloseHandle,omitempty"`
}
  07070100000166000081A4000000000000000000000001645E367C00000576000000000000000000000000000000000000006300000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/process_parameters.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type ProcessParameters struct {
	ApplicationName string `json:"ApplicationName,omitempty"`

	CommandLine string `json:"CommandLine,omitempty"`

	//  optional alternative to CommandLine, currently only supported by Linux GCS
	CommandArgs []string `json:"CommandArgs,omitempty"`

	User string `json:"User,omitempty"`

	WorkingDirectory string `json:"WorkingDirectory,omitempty"`

	Environment map[string]string `json:"Environment,omitempty"`

	//  if set, will run as low-privilege process
	RestrictedToken bool `json:"RestrictedToken,omitempty"`

	//  if set, ignore StdErrPipe
	EmulateConsole bool `json:"EmulateConsole,omitempty"`

	CreateStdInPipe bool `json:"CreateStdInPipe,omitempty"`

	CreateStdOutPipe bool `json:"CreateStdOutPipe,omitempty"`

	CreateStdErrPipe bool `json:"CreateStdErrPipe,omitempty"`

	//  height then width
	ConsoleSize []int32 `json:"ConsoleSize,omitempty"`

	//  if set, find an existing session for the user and create the process in it
	UseExistingLogin bool `json:"UseExistingLogin,omitempty"`

	//  if set, use the legacy console instead of conhost
	UseLegacyConsole bool `json:"UseLegacyConsole,omitempty"`
}
  07070100000167000081A4000000000000000000000001645E367C00000208000000000000000000000000000000000000005F00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/process_status.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

//  Status of a process running in a container
type ProcessStatus struct {
	ProcessId int32 `json:"ProcessId,omitempty"`

	Exited bool `json:"Exited,omitempty"`

	ExitCode int32 `json:"ExitCode,omitempty"`

	LastWaitResult int32 `json:"LastWaitResult,omitempty"`
}
07070100000168000081A4000000000000000000000001645E367C00000193000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/processor.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type Processor struct {
	Count int32 `json:"Count,omitempty"`

	Maximum int32 `json:"Maximum,omitempty"`

	Weight int32 `json:"Weight,omitempty"`
}
 07070100000169000081A4000000000000000000000001645E367C0000027E000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/processor_2.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.5
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type Processor2 struct {
	Count int32 `json:"Count,omitempty"`

	Limit int32 `json:"Limit,omitempty"`

	Weight int32 `json:"Weight,omitempty"`

	ExposeVirtualizationExtensions bool `json:"ExposeVirtualizationExtensions,omitempty"`

	// An optional object that configures the CPU Group to which a Virtual Machine is going to bind to.
	CpuGroup *CpuGroup `json:"CpuGroup,omitempty"`
}
  0707010000016A000081A4000000000000000000000001645E367C000001F8000000000000000000000000000000000000006000000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/processor_stats.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

//  CPU runtime statistics
type ProcessorStats struct {
	TotalRuntime100ns uint64 `json:"TotalRuntime100ns,omitempty"`

	RuntimeUser100ns uint64 `json:"RuntimeUser100ns,omitempty"`

	RuntimeKernel100ns uint64 `json:"RuntimeKernel100ns,omitempty"`
}
0707010000016B000081A4000000000000000000000001645E367C000001C3000000000000000000000000000000000000006300000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/processor_topology.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type ProcessorTopology struct {
	LogicalProcessorCount uint32             `json:"LogicalProcessorCount,omitempty"`
	LogicalProcessors     []LogicalProcessor `json:"LogicalProcessors,omitempty"`
}
 0707010000016C000081A4000000000000000000000001645E367C000005BB000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/properties.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

import (
	v1 "github.com/containerd/cgroups/stats/v1"
)

type Properties struct {
	Id string `json:"Id,omitempty"`

	SystemType string `json:"SystemType,omitempty"`

	RuntimeOsType string `json:"RuntimeOsType,omitempty"`

	Name string `json:"Name,omitempty"`

	Owner string `json:"Owner,omitempty"`

	RuntimeId string `json:"RuntimeId,omitempty"`

	RuntimeTemplateId string `json:"RuntimeTemplateId,omitempty"`

	State string `json:"State,omitempty"`

	Stopped bool `json:"Stopped,omitempty"`

	ExitType string `json:"ExitType,omitempty"`

	Memory *MemoryInformationForVm `json:"Memory,omitempty"`

	Statistics *Statistics `json:"Statistics,omitempty"`

	ProcessList []ProcessDetails `json:"ProcessList,omitempty"`

	TerminateOnLastHandleClosed bool `json:"TerminateOnLastHandleClosed,omitempty"`

	HostingSystemId string `json:"HostingSystemId,omitempty"`

	SharedMemoryRegionInfo []SharedMemoryRegionInfo `json:"SharedMemoryRegionInfo,omitempty"`

	GuestConnectionInfo *GuestConnectionInfo `json:"GuestConnectionInfo,omitempty"`

	// Metrics is not part of the API for HCS but this is used for LCOW v2 to
	// return the full cgroup metrics from the guest.
	Metrics *v1.Metrics `json:"LCOWMetrics,omitempty"`
}
 0707010000016D000081A4000000000000000000000001645E367C000001CE000000000000000000000000000000000000005F00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/property_query.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

//   By default the basic properties will be returned. This query provides a way to  request specific properties.
type PropertyQuery struct {
	PropertyTypes []PropertyType `json:"PropertyTypes,omitempty"`
}
  0707010000016E000081A4000000000000000000000001645E367C00000426000000000000000000000000000000000000005E00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/property_type.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type PropertyType string

const (
	PTMemory                      PropertyType = "Memory"
	PTGuestMemory                 PropertyType = "GuestMemory"
	PTStatistics                  PropertyType = "Statistics"
	PTProcessList                 PropertyType = "ProcessList"
	PTTerminateOnLastHandleClosed PropertyType = "TerminateOnLastHandleClosed"
	PTSharedMemoryRegion          PropertyType = "SharedMemoryRegion"
	PTContainerCredentialGuard    PropertyType = "ContainerCredentialGuard" // This field is not generated by swagger. This was added manually.
	PTGuestConnection             PropertyType = "GuestConnection"
	PTICHeartbeatStatus           PropertyType = "ICHeartbeatStatus"
	PTProcessorTopology           PropertyType = "ProcessorTopology"
	PTCPUGroup                    PropertyType = "CpuGroup"
)
  0707010000016F000081A4000000000000000000000001645E367C00000187000000000000000000000000000000000000006700000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/rdp_connection_options.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type RdpConnectionOptions struct {
	AccessSids []string `json:"AccessSids,omitempty"`

	NamedPipe string `json:"NamedPipe,omitempty"`
}
 07070100000170000081A4000000000000000000000001645E367C00000190000000000000000000000000000000000000006100000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/registry_changes.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type RegistryChanges struct {
	AddValues []RegistryValue `json:"AddValues,omitempty"`

	DeleteKeys []RegistryKey `json:"DeleteKeys,omitempty"`
}
07070100000171000081A4000000000000000000000001645E367C00000192000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/registry_key.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type RegistryKey struct {
	Hive string `json:"Hive,omitempty"`

	Name string `json:"Name,omitempty"`

	Volatile bool `json:"Volatile,omitempty"`
}
  07070100000172000081A4000000000000000000000001645E367C0000030A000000000000000000000000000000000000005F00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/registry_value.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type RegistryValue struct {
	Key *RegistryKey `json:"Key,omitempty"`

	Name string `json:"Name,omitempty"`

	Type_ string `json:"Type,omitempty"`

	//  One and only one value type must be set.
	StringValue string `json:"StringValue,omitempty"`

	BinaryValue string `json:"BinaryValue,omitempty"`

	DWordValue int32 `json:"DWordValue,omitempty"`

	QWordValue int32 `json:"QWordValue,omitempty"`

	//  Only used if RegistryValueType is CustomType  The data is in BinaryValue
	CustomType int32 `json:"CustomType,omitempty"`
}
  07070100000173000081A4000000000000000000000001645E367C0000026B000000000000000000000000000000000000005E00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/restore_state.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type RestoreState struct {

	//  The path to the save state file to restore the system from.
	SaveStateFilePath string `json:"SaveStateFilePath,omitempty"`

	//  The ID of the template system to clone this new system off of. An empty  string indicates the system should not be cloned from a template.
	TemplateSystemId string `json:"TemplateSystemId,omitempty"`
}
 07070100000174000081A4000000000000000000000001645E367C000001F9000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/save_options.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type SaveOptions struct {

	//  The type of save operation to be performed.
	SaveType string `json:"SaveType,omitempty"`

	//  The path to the file that will container the saved state.
	SaveStateFilePath string `json:"SaveStateFilePath,omitempty"`
}
   07070100000175000081A4000000000000000000000001645E367C000001AB000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/scsi.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type Scsi struct {

	//  Map of attachments, where the key is the integer LUN number on the controller.
	Attachments map[string]Attachment `json:"Attachments,omitempty"`
}
 07070100000176000081A4000000000000000000000001645E367C000001D7000000000000000000000000000000000000006200000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/security_settings.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type SecuritySettings struct {
	// Enablement of Trusted Platform Module on the computer system
	EnableTpm bool               `json:"EnableTpm,omitempty"`
	Isolation *IsolationSettings `json:"Isolation,omitempty"`
}
 07070100000177000081A4000000000000000000000001645E367C00000214000000000000000000000000000000000000006300000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/service_properties.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

import "encoding/json"

type ServiceProperties struct {
	// Changed Properties field to []json.RawMessage from []interface{} to avoid having to
	// remarshal sp.Properties[n] and unmarshal into the type(s) we want.
	Properties []json.RawMessage `json:"Properties,omitempty"`
}
07070100000178000081A4000000000000000000000001645E367C00000162000000000000000000000000000000000000006C00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/shared_memory_configuration.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type SharedMemoryConfiguration struct {
	Regions []SharedMemoryRegion `json:"Regions,omitempty"`
}
  07070100000179000081A4000000000000000000000001645E367C00000225000000000000000000000000000000000000006500000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/shared_memory_region.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type SharedMemoryRegion struct {
	SectionName string `json:"SectionName,omitempty"`

	StartOffset int32 `json:"StartOffset,omitempty"`

	Length int32 `json:"Length,omitempty"`

	AllowGuestWrite bool `json:"AllowGuestWrite,omitempty"`

	HiddenFromGuest bool `json:"HiddenFromGuest,omitempty"`
}
   0707010000017A000081A4000000000000000000000001645E367C0000019E000000000000000000000000000000000000006A00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/shared_memory_region_info.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type SharedMemoryRegionInfo struct {
	SectionName string `json:"SectionName,omitempty"`

	GuestPhysicalAddress int32 `json:"GuestPhysicalAddress,omitempty"`
}
  0707010000017B000081A4000000000000000000000001645E367C0000018C000000000000000000000000000000000000006000000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/silo_properties.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

//  Silo job information
type SiloProperties struct {
	Enabled bool `json:"Enabled,omitempty"`

	JobName string `json:"JobName,omitempty"`
}
0707010000017C000081A4000000000000000000000001645E367C0000029C000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/statistics.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

import (
	"time"
)

//  Runtime statistics for a container
type Statistics struct {
	Timestamp time.Time `json:"Timestamp,omitempty"`

	ContainerStartTime time.Time `json:"ContainerStartTime,omitempty"`

	Uptime100ns uint64 `json:"Uptime100ns,omitempty"`

	Processor *ProcessorStats `json:"Processor,omitempty"`

	Memory *MemoryStats `json:"Memory,omitempty"`

	Storage *StorageStats `json:"Storage,omitempty"`
}
0707010000017D000081A4000000000000000000000001645E367C00000355000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/storage.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type Storage struct {

	//  List of layers that describe the parent hierarchy for a container's  storage. These layers combined together, presented as a disposable  and/or committable working storage, are used by the container to  record all changes done to the parent layers.
	Layers []Layer `json:"Layers,omitempty"`

	//  Path that points to the scratch space of a container, where parent  layers are combined together to present a new disposable and/or committable  layer with the changes done during its runtime.
	Path string `json:"Path,omitempty"`

	QoS *StorageQoS `json:"QoS,omitempty"`
}
   0707010000017E000081A4000000000000000000000001645E367C00000189000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/storage_qo_s.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type StorageQoS struct {
	IopsMaximum int32 `json:"IopsMaximum,omitempty"`

	BandwidthMaximum int32 `json:"BandwidthMaximum,omitempty"`
}
   0707010000017F000081A4000000000000000000000001645E367C00000236000000000000000000000000000000000000005E00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/storage_stats.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

//  Storage runtime statistics
type StorageStats struct {
	ReadCountNormalized uint64 `json:"ReadCountNormalized,omitempty"`

	ReadSizeBytes uint64 `json:"ReadSizeBytes,omitempty"`

	WriteCountNormalized uint64 `json:"WriteCountNormalized,omitempty"`

	WriteSizeBytes uint64 `json:"WriteSizeBytes,omitempty"`
}
  07070100000180000081A4000000000000000000000001645E367C00000263000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/system_time.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type SystemTime struct {
	Year int32 `json:"Year,omitempty"`

	Month int32 `json:"Month,omitempty"`

	DayOfWeek int32 `json:"DayOfWeek,omitempty"`

	Day int32 `json:"Day,omitempty"`

	Hour int32 `json:"Hour,omitempty"`

	Minute int32 `json:"Minute,omitempty"`

	Second int32 `json:"Second,omitempty"`

	Milliseconds int32 `json:"Milliseconds,omitempty"`
}
 07070100000181000081A4000000000000000000000001645E367C00000293000000000000000000000000000000000000006600000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/time_zone_information.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type TimeZoneInformation struct {
	Bias int32 `json:"Bias,omitempty"`

	StandardName string `json:"StandardName,omitempty"`

	StandardDate *SystemTime `json:"StandardDate,omitempty"`

	StandardBias int32 `json:"StandardBias,omitempty"`

	DaylightName string `json:"DaylightName,omitempty"`

	DaylightDate *SystemTime `json:"DaylightDate,omitempty"`

	DaylightBias int32 `json:"DaylightBias,omitempty"`
}
 07070100000182000081A4000000000000000000000001645E367C00000178000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/topology.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type Topology struct {
	Memory *Memory2 `json:"Memory,omitempty"`

	Processor *Processor2 `json:"Processor,omitempty"`
}
07070100000183000081A4000000000000000000000001645E367C0000023F000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/uefi.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type Uefi struct {
	EnableDebugger bool `json:"EnableDebugger,omitempty"`

	ApplySecureBootTemplate string `json:"ApplySecureBootTemplate,omitempty"`

	SecureBootTemplateId string `json:"SecureBootTemplateId,omitempty"`

	BootThis *UefiBootEntry `json:"BootThis,omitempty"`

	Console string `json:"Console,omitempty"`
}
 07070100000184000081A4000000000000000000000001645E367C0000021F000000000000000000000000000000000000006000000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/uefi_boot_entry.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type UefiBootEntry struct {
	DeviceType string `json:"DeviceType,omitempty"`

	DevicePath string `json:"DevicePath,omitempty"`

	DiskNumber int32 `json:"DiskNumber,omitempty"`

	OptionalData string `json:"OptionalData,omitempty"`

	VmbFsRootPath string `json:"VmbFsRootPath,omitempty"`
}
 07070100000185000081A4000000000000000000000001645E367C00000164000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/version.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type Version struct {
	Major int32 `json:"Major,omitempty"`

	Minor int32 `json:"Minor,omitempty"`
}
07070100000186000081A4000000000000000000000001645E367C000001F0000000000000000000000000000000000000005E00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/video_monitor.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type VideoMonitor struct {
	HorizontalResolution int32 `json:"HorizontalResolution,omitempty"`

	VerticalResolution int32 `json:"VerticalResolution,omitempty"`

	ConnectionOptions *RdpConnectionOptions `json:"ConnectionOptions,omitempty"`
}
07070100000187000081A4000000000000000000000001645E367C000003F3000000000000000000000000000000000000006000000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/virtual_machine.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type VirtualMachine struct {

	// StopOnReset is private in the schema. If regenerated need to put back.
	StopOnReset bool `json:"StopOnReset,omitempty"`

	Chipset *Chipset `json:"Chipset,omitempty"`

	ComputeTopology *Topology `json:"ComputeTopology,omitempty"`

	Devices *Devices `json:"Devices,omitempty"`

	GuestState *GuestState `json:"GuestState,omitempty"`

	RestoreState *RestoreState `json:"RestoreState,omitempty"`

	RegistryChanges *RegistryChanges `json:"RegistryChanges,omitempty"`

	StorageQoS *StorageQoS `json:"StorageQoS,omitempty"`

	GuestConnection *GuestConnection `json:"GuestConnection,omitempty"`

	SecuritySettings *SecuritySettings `json:"SecuritySettings,omitempty"`

	DebugOptions *DebugOptions `json:"DebugOptions,omitempty"`
}
 07070100000188000081A4000000000000000000000001645E367C00000224000000000000000000000000000000000000006200000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/virtual_node_info.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type VirtualNodeInfo struct {
	VirtualNodeIndex int32 `json:"VirtualNodeIndex,omitempty"`

	PhysicalNodeNumber int32 `json:"PhysicalNodeNumber,omitempty"`

	VirtualProcessorCount int32 `json:"VirtualProcessorCount,omitempty"`

	MemoryUsageInPages int32 `json:"MemoryUsageInPages,omitempty"`
}
07070100000189000081A4000000000000000000000001645E367C00000206000000000000000000000000000000000000006900000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/virtual_p_mem_controller.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type VirtualPMemController struct {
	Devices map[string]VirtualPMemDevice `json:"Devices,omitempty"`

	MaximumCount uint32 `json:"MaximumCount,omitempty"`

	MaximumSizeBytes uint64 `json:"MaximumSizeBytes,omitempty"`

	Backing string `json:"Backing,omitempty"`
}
  0707010000018A000081A4000000000000000000000001645E367C000001AE000000000000000000000000000000000000006500000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/virtual_p_mem_device.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type VirtualPMemDevice struct {
	HostPath string `json:"HostPath,omitempty"`

	ReadOnly bool `json:"ReadOnly,omitempty"`

	ImageFormat string `json:"ImageFormat,omitempty"`
}
  0707010000018B000081A4000000000000000000000001645E367C00000185000000000000000000000000000000000000006600000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/virtual_p_mem_mapping.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type VirtualPMemMapping struct {
	HostPath    string `json:"HostPath,omitempty"`
	ImageFormat string `json:"ImageFormat,omitempty"`
}
   0707010000018C000081A4000000000000000000000001645E367C000001CF000000000000000000000000000000000000006300000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/virtual_pci_device.go    /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.3
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

// TODO: This is pre-release support in schema 2.3. Need to add build number
// docs when a public build with this is out.
type VirtualPciDevice struct {
	Functions []VirtualPciFunction `json:",omitempty"`
}
 0707010000018D000081A4000000000000000000000001645E367C000001F9000000000000000000000000000000000000006500000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/virtual_pci_function.go  /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.3
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

// TODO: This is pre-release support in schema 2.3. Need to add build number
// docs when a public build with this is out.
type VirtualPciFunction struct {
	DeviceInstancePath string `json:",omitempty"`

	VirtualFunction uint16 `json:",omitempty"`
}
   0707010000018E000081A4000000000000000000000001645E367C00000195000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/virtual_smb.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type VirtualSmb struct {
	Shares []VirtualSmbShare `json:"Shares,omitempty"`

	DirectFileMappingInMB int64 `json:"DirectFileMappingInMB,omitempty"`
}
   0707010000018F000081A4000000000000000000000001645E367C000001DF000000000000000000000000000000000000006200000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/virtual_smb_share.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type VirtualSmbShare struct {
	Name string `json:"Name,omitempty"`

	Path string `json:"Path,omitempty"`

	AllowedFiles []string `json:"AllowedFiles,omitempty"`

	Options *VirtualSmbShareOptions `json:"Options,omitempty"`
}
 07070100000190000081A4000000000000000000000001645E367C0000076E000000000000000000000000000000000000006A00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/virtual_smb_share_options.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type VirtualSmbShareOptions struct {
	ReadOnly bool `json:"ReadOnly,omitempty"`

	//  convert exclusive access to shared read access
	ShareRead bool `json:"ShareRead,omitempty"`

	//  all opens will use cached I/O
	CacheIo bool `json:"CacheIo,omitempty"`

	//  disable oplock support
	NoOplocks bool `json:"NoOplocks,omitempty"`

	//  Acquire the backup privilege when attempting to open
	TakeBackupPrivilege bool `json:"TakeBackupPrivilege,omitempty"`

	//  Use the identity of the share root when opening
	UseShareRootIdentity bool `json:"UseShareRootIdentity,omitempty"`

	//  disable Direct Mapping
	NoDirectmap bool `json:"NoDirectmap,omitempty"`

	//  disable Byterange locks
	NoLocks bool `json:"NoLocks,omitempty"`

	//  disable Directory CHange Notifications
	NoDirnotify bool `json:"NoDirnotify,omitempty"`

	//  share is use for VM shared memory
	VmSharedMemory bool `json:"VmSharedMemory,omitempty"`

	//  allow access only to the files specified in AllowedFiles
	RestrictFileAccess bool `json:"RestrictFileAccess,omitempty"`

	//  disable all oplocks except Level II
	ForceLevelIIOplocks bool `json:"ForceLevelIIOplocks,omitempty"`

	//  Allow the host to reparse this base layer
	ReparseBaseLayer bool `json:"ReparseBaseLayer,omitempty"`

	//  Enable pseudo-oplocks
	PseudoOplocks bool `json:"PseudoOplocks,omitempty"`

	//  All opens will use non-cached IO
	NonCacheIo bool `json:"NonCacheIo,omitempty"`

	//  Enable pseudo directory change notifications
	PseudoDirnotify bool `json:"PseudoDirnotify,omitempty"`

	//  Block directory enumeration, renames, and deletes.
	SingleFileMapping bool `json:"SingleFileMapping,omitempty"`
}
  07070100000191000081A4000000000000000000000001645E367C000002BD000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/vm_memory.go /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type VmMemory struct {
	AvailableMemory int32 `json:"AvailableMemory,omitempty"`

	AvailableMemoryBuffer int32 `json:"AvailableMemoryBuffer,omitempty"`

	ReservedMemory uint64 `json:"ReservedMemory,omitempty"`

	AssignedMemory uint64 `json:"AssignedMemory,omitempty"`

	SlpActive bool `json:"SlpActive,omitempty"`

	BalancingEnabled bool `json:"BalancingEnabled,omitempty"`

	DmOperationInProgress bool `json:"DmOperationInProgress,omitempty"`
}
   07070100000192000081A4000000000000000000000001645E367C00000392000000000000000000000000000000000000006400000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/vm_processor_limits.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.4
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

// ProcessorLimits is used when modifying processor scheduling limits of a virtual machine.
type ProcessorLimits struct {
	// Maximum amount of host CPU resources that the virtual machine can use.
	Limit uint64 `json:"Limit,omitempty"`
	// Value describing the relative priority of this virtual machine compared to other virtual machines.
	Weight uint64 `json:"Weight,omitempty"`
	// Minimum amount of host CPU resources that the virtual machine is guaranteed.
	Reservation uint64 `json:"Reservation,omitempty"`
	// Provides the target maximum CPU frequency, in MHz, for a virtual machine.
	MaximumFrequencyMHz uint32 `json:"MaximumFrequencyMHz,omitempty"`
}
  07070100000193000081A4000000000000000000000001645E367C0000018D000000000000000000000000000000000000006800000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/windows_crash_reporting.go   /*
 * HCS API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * API version: 2.1
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */

package hcsschema

type WindowsCrashReporting struct {
	DumpFileName string `json:"DumpFileName,omitempty"`

	MaxDumpSize int64 `json:"MaxDumpSize,omitempty"`
}
   07070100000194000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcserror 07070100000195000081A4000000000000000000000001645E367C00000011000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcserror/doc.go  package hcserror
   07070100000196000081A4000000000000000000000001645E367C0000038B000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/hcserror/hcserror.go //go:build windows

package hcserror

import (
	"errors"
	"fmt"

	"golang.org/x/sys/windows"
)

type HcsError struct {
	title string
	rest  string
	Err   error
}

func (e *HcsError) Error() string {
	s := e.title
	if len(s) > 0 && s[len(s)-1] != ' ' {
		s += " "
	}
	s += fmt.Sprintf("failed in Win32: %s (0x%x)", e.Err, Win32FromError(e.Err))
	if e.rest != "" {
		if e.rest[0] != ' ' {
			s += " "
		}
		s += e.rest
	}
	return s
}

func New(err error, title, rest string) error {
	// Pass through DLL errors directly since they do not originate from HCS.
	var e *windows.DLLError
	if errors.As(err, &e) {
		return err
	}
	return &HcsError{title, rest, err}
}

func Win32FromError(err error) uint32 {
	var herr *HcsError
	if errors.As(err, &herr) {
		return Win32FromError(herr.Err)
	}
	var code windows.Errno
	if errors.As(err, &code) {
		return uint32(code)
	}
	return uint32(windows.ERROR_GEN_FAILURE)
}
 07070100000197000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/interop  07070100000198000081A4000000000000000000000001645E367C00000010000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/interop/doc.go   package interop
07070100000199000081A4000000000000000000000001645E367C00000261000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/interop/interop.go   //go:build windows

package interop

import (
	"syscall"
	"unsafe"
)

//go:generate go run github.com/Microsoft/go-winio/tools/mkwinsyscall -output zsyscall_windows.go interop.go

//sys coTaskMemFree(buffer unsafe.Pointer) = api_ms_win_core_com_l1_1_0.CoTaskMemFree

func ConvertAndFreeCoTaskMemString(buffer *uint16) string {
	str := syscall.UTF16ToString((*[1 << 29]uint16)(unsafe.Pointer(buffer))[:])
	coTaskMemFree(unsafe.Pointer(buffer))
	return str
}

func Win32FromHresult(hr uintptr) syscall.Errno {
	if hr&0x1fff0000 == 0x00070000 {
		return syscall.Errno(hr & 0xffff)
	}
	return syscall.Errno(hr)
}
   0707010000019A000081A4000000000000000000000001645E367C0000046C000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/interop/zsyscall_windows.go  //go:build windows

// Code generated by 'go generate' using "github.com/Microsoft/go-winio/tools/mkwinsyscall"; DO NOT EDIT.

package interop

import (
	"syscall"
	"unsafe"

	"golang.org/x/sys/windows"
)

var _ unsafe.Pointer

// Do the interface allocations only once for common
// Errno values.
const (
	errnoERROR_IO_PENDING = 997
)

var (
	errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING)
	errERROR_EINVAL     error = syscall.EINVAL
)

// errnoErr returns common boxed Errno values, to prevent
// allocations at runtime.
func errnoErr(e syscall.Errno) error {
	switch e {
	case 0:
		return errERROR_EINVAL
	case errnoERROR_IO_PENDING:
		return errERROR_IO_PENDING
	}
	// TODO: add more here, after collecting data on the common
	// error values see on Windows. (perhaps when running
	// all.bat?)
	return e
}

var (
	modapi_ms_win_core_com_l1_1_0 = windows.NewLazySystemDLL("api-ms-win-core-com-l1-1-0.dll")

	procCoTaskMemFree = modapi_ms_win_core_com_l1_1_0.NewProc("CoTaskMemFree")
)

func coTaskMemFree(buffer unsafe.Pointer) {
	syscall.Syscall(procCoTaskMemFree.Addr(), 1, uintptr(buffer), 0, 0)
	return
}
0707010000019B000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/log  0707010000019C000081A4000000000000000000000001645E367C00000E46000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/log/context.go   package log

import (
	"context"

	"github.com/sirupsen/logrus"
	"go.opencensus.io/trace"
)

type entryContextKeyType int

const _entryContextKey entryContextKeyType = iota

var (
	// L is the default, blank logging entry. WithField and co. all return a copy
	// of the original entry, so this will not leak fields between calls.
	//
	// Do NOT modify fields directly, as that will corrupt state for all users and
	// is not thread safe.
	// Instead, use `L.With*` or `L.Dup()`. Or `G(context.Background())`.
	L = logrus.NewEntry(logrus.StandardLogger())

	// G is an alias for GetEntry
	G = GetEntry

	// S is an alias for SetEntry
	S = SetEntry

	// U is an alias for UpdateContext
	U = UpdateContext
)

// GetEntry returns a `logrus.Entry` stored in the context, if one exists.
// Otherwise, it returns a default entry that points to the current context.
//
// Note: if the a new entry is returned, it will reference the passed in context.
// However, existing contexts may be stored in parent contexts and additionally reference
// earlier contexts.
// Use `UpdateContext` to update the entry and context.
func GetEntry(ctx context.Context) *logrus.Entry {
	entry := fromContext(ctx)

	if entry == nil {
		entry = L.WithContext(ctx)
	}

	return entry
}

// SetEntry updates the log entry in the context with the provided fields, and
// returns both. It is equivalent to:
//
//	entry := GetEntry(ctx).WithFields(fields)
//	ctx = WithContext(ctx, entry)
//
// See WithContext for more information.
func SetEntry(ctx context.Context, fields logrus.Fields) (context.Context, *logrus.Entry) {
	e := GetEntry(ctx)
	if len(fields) > 0 {
		e = e.WithFields(fields)
	}
	return WithContext(ctx, e)
}

// UpdateContext extracts the log entry from the context, and, if the entry's
// context points to a parent's of the current context, ands the entry
// to the most recent context. It is equivalent to:
//
//	entry := GetEntry(ctx)
//	ctx = WithContext(ctx, entry)
//
// This allows the entry to reference the most recent context and any new
// values (such as span contexts) added to it.
//
// See WithContext for more information.
func UpdateContext(ctx context.Context) context.Context {
	// there is no way to check its ctx (and not one of its parents) that contains `e`
	// so, at a slight cost, force add `e` to the context
	ctx, _ = WithContext(ctx, GetEntry(ctx))
	return ctx
}

// WithContext returns a context that contains the provided log entry.
// The entry can be extracted with `GetEntry` (`G`)
//
// The entry in the context is a copy of `entry` (generated by `entry.WithContext`)
func WithContext(ctx context.Context, entry *logrus.Entry) (context.Context, *logrus.Entry) {
	// regardless of the order, entry.Context != GetEntry(ctx)
	// here, the returned entry will reference the supplied context
	entry = entry.WithContext(ctx)
	ctx = context.WithValue(ctx, _entryContextKey, entry)

	return ctx, entry
}

// Copy extracts the tracing Span and logging entry from the src Context, if they
// exist, and adds them to the dst Context.
//
// This is useful to share tracing and logging between contexts, but not the
// cancellation. For example, if the src Context has been cancelled but cleanup
// operations triggered by the cancellation require a non-cancelled context to
// execute.
func Copy(dst context.Context, src context.Context) context.Context {
	if s := trace.FromContext(src); s != nil {
		dst = trace.NewContext(dst, s)
	}

	if e := fromContext(src); e != nil {
		dst, _ = WithContext(dst, e)
	}

	return dst
}

func fromContext(ctx context.Context) *logrus.Entry {
	e, _ := ctx.Value(_entryContextKey).(*logrus.Entry)
	return e
}
  0707010000019D000081A4000000000000000000000001645E367C000003D5000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/log/hook.go  package log

import (
	"github.com/Microsoft/hcsshim/internal/logfields"
	"github.com/sirupsen/logrus"
	"go.opencensus.io/trace"
)

// Hook serves to intercept and format `logrus.Entry`s before they are passed
// to the ETW hook.
//
// The containerd shim discards the (formatted) logrus output, and outputs only via ETW.
// The Linux GCS outputs logrus entries over stdout, which is consumed by the shim and
// then re-output via the ETW hook.
type Hook struct{}

var _ logrus.Hook = &Hook{}

func NewHook() *Hook {
	return &Hook{}
}

func (h *Hook) Levels() []logrus.Level {
	return logrus.AllLevels
}

func (h *Hook) Fire(e *logrus.Entry) (err error) {
	h.addSpanContext(e)

	return nil
}

func (h *Hook) addSpanContext(e *logrus.Entry) {
	ctx := e.Context
	if ctx == nil {
		return
	}
	span := trace.FromContext(ctx)
	if span == nil {
		return
	}
	sctx := span.SpanContext()
	e.Data[logfields.TraceID] = sctx.TraceID.String()
	e.Data[logfields.SpanID] = sctx.SpanID.String()
}
   0707010000019E000081A4000000000000000000000001645E367C00001218000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/log/scrub.go package log

import (
	"bytes"
	"encoding/json"
	"errors"
	"strings"
	"sync/atomic"

	hcsschema "github.com/Microsoft/hcsshim/internal/hcs/schema2"
)

// This package scrubs objects of potentially sensitive information to pass to logging

type genMap = map[string]interface{}
type scrubberFunc func(genMap) error

const _scrubbedReplacement = "<scrubbed>"

var (
	ErrUnknownType = errors.New("encoded object is of unknown type")

	// case sensitive keywords, so "env" is not a substring on "Environment"
	_scrubKeywords = [][]byte{[]byte("env"), []byte("Environment")}

	_scrub int32
)

// SetScrubbing enables scrubbing
func SetScrubbing(enable bool) {
	v := int32(0) // cant convert from bool to int32 directly
	if enable {
		v = 1
	}
	atomic.StoreInt32(&_scrub, v)
}

// IsScrubbingEnabled checks if scrubbing is enabled
func IsScrubbingEnabled() bool {
	v := atomic.LoadInt32(&_scrub)
	return v != 0
}

// ScrubProcessParameters scrubs HCS Create Process requests with config parameters of
// type internal/hcs/schema2.ScrubProcessParameters (aka hcsshema.ScrubProcessParameters)
func ScrubProcessParameters(s string) (string, error) {
	// todo: deal with v1 ProcessConfig
	b := []byte(s)
	if !IsScrubbingEnabled() || !hasKeywords(b) || !json.Valid(b) {
		return s, nil
	}

	pp := hcsschema.ProcessParameters{}
	if err := json.Unmarshal(b, &pp); err != nil {
		return "", err
	}
	pp.Environment = map[string]string{_scrubbedReplacement: _scrubbedReplacement}

	buf := bytes.NewBuffer(b[:0])
	if err := encode(buf, pp); err != nil {
		return "", err
	}
	return strings.TrimSpace(buf.String()), nil
}

// ScrubBridgeCreate scrubs requests sent over the bridge of type
// internal/gcs/protocol.containerCreate wrapping an internal/hcsoci.linuxHostedSystem
func ScrubBridgeCreate(b []byte) ([]byte, error) {
	return scrubBytes(b, scrubBridgeCreate)
}

func scrubBridgeCreate(m genMap) error {
	if !isRequestBase(m) {
		return ErrUnknownType
	}
	if ss, ok := m["ContainerConfig"]; ok {
		// ContainerConfig is a json encoded struct passed as a regular string field
		s, ok := ss.(string)
		if !ok {
			return ErrUnknownType
		}
		b, err := scrubBytes([]byte(s), scrubLinuxHostedSystem)
		if err != nil {
			return err
		}
		m["ContainerConfig"] = string(b)
		return nil
	}
	return ErrUnknownType
}

func scrubLinuxHostedSystem(m genMap) error {
	if m, ok := index(m, "OciSpecification"); ok {
		if _, ok := m["annotations"]; ok {
			m["annotations"] = map[string]string{_scrubbedReplacement: _scrubbedReplacement}
		}
		if m, ok := index(m, "process"); ok {
			if _, ok := m["env"]; ok {
				m["env"] = []string{_scrubbedReplacement}
				return nil
			}
		}
	}
	return ErrUnknownType
}

// ScrubBridgeExecProcess scrubs requests sent over the bridge of type
// internal/gcs/protocol.containerExecuteProcess
func ScrubBridgeExecProcess(b []byte) ([]byte, error) {
	return scrubBytes(b, scrubExecuteProcess)
}

func scrubExecuteProcess(m genMap) error {
	if !isRequestBase(m) {
		return ErrUnknownType
	}
	if m, ok := index(m, "Settings"); ok {
		if ss, ok := m["ProcessParameters"]; ok {
			// ProcessParameters is a json encoded struct passed as a regular sting field
			s, ok := ss.(string)
			if !ok {
				return ErrUnknownType
			}

			s, err := ScrubProcessParameters(s)
			if err != nil {
				return err
			}

			m["ProcessParameters"] = s
			return nil
		}
	}
	return ErrUnknownType
}

func scrubBytes(b []byte, scrub scrubberFunc) ([]byte, error) {
	if !IsScrubbingEnabled() || !hasKeywords(b) || !json.Valid(b) {
		return b, nil
	}

	m := make(genMap)
	if err := json.Unmarshal(b, &m); err != nil {
		return nil, err
	}

	// could use regexp, but if the env strings contain braces, the regexp fails
	// parsing into individual structs would require access to private structs
	if err := scrub(m); err != nil {
		return nil, err
	}

	buf := &bytes.Buffer{}
	if err := encode(buf, m); err != nil {
		return nil, err
	}

	return bytes.TrimSpace(buf.Bytes()), nil
}

func encode(buf *bytes.Buffer, v interface{}) error {
	enc := json.NewEncoder(buf)
	enc.SetEscapeHTML(false)
	if err := enc.Encode(v); err != nil {
		return err
	}
	return nil
}

func isRequestBase(m genMap) bool {
	// neither of these are (currently) `omitempty`
	_, a := m["ActivityId"]
	_, c := m["ContainerId"]
	return a && c
}

// combination `m, ok := m[s]` and `m, ok := m.(genMap)`
func index(m genMap, s string) (genMap, bool) {
	if m, ok := m[s]; ok {
		mm, ok := m.(genMap)
		return mm, ok
	}

	return m, false
}

func hasKeywords(b []byte) bool {
	for _, bb := range _scrubKeywords {
		if bytes.Contains(b, bb) {
			return true
		}
	}
	return false
}
0707010000019F000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/logfields    070701000001A0000081A4000000000000000000000001645E367C000003B5000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/logfields/fields.go  package logfields

const (
	// Identifiers

	Name      = "name"
	Namespace = "namespace"
	Operation = "operation"

	ID          = "id"
	SandboxID   = "sid"
	ContainerID = "cid"
	ExecID      = "eid"
	ProcessID   = "pid"
	TaskID      = "tid"
	UVMID       = "uvm-id"

	// networking and IO

	File  = "file"
	Path  = "path"
	Bytes = "bytes"
	Pipe  = "pipe"

	// Common Misc

	Attempt = "attemptNo"
	JSON    = "json"

	// Time

	StartTime = "startTime"
	EndTime   = "endTime"
	Duration  = "duration"
	Timeout   = "timeout"

	// Keys/values

	Field         = "field"
	Key           = "key"
	OCIAnnotation = "oci-annotation"
	Value         = "value"
	Options       = "options"

	// Golang type's

	ExpectedType = "expected-type"
	Bool         = "bool"
	Uint32       = "uint32"
	Uint64       = "uint64"

	// runhcs

	VMShimOperation = "vmshim-op"

	// logging and tracing

	TraceID      = "traceID"
	SpanID       = "spanID"
	ParentSpanID = "parentSpanID"
)
   070701000001A1000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/longpath 070701000001A2000081A4000000000000000000000001645E367C000001F0000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/longpath/longpath.go package longpath

import (
	"path/filepath"
	"strings"
)

// LongAbs makes a path absolute and returns it in NT long path form.
func LongAbs(path string) (string, error) {
	if strings.HasPrefix(path, `\\?\`) || strings.HasPrefix(path, `\\.\`) {
		return path, nil
	}
	if !filepath.IsAbs(path) {
		absPath, err := filepath.Abs(path)
		if err != nil {
			return "", err
		}
		path = absPath
	}
	if strings.HasPrefix(path, `\\`) {
		return `\\?\UNC\` + path[2:], nil
	}
	return `\\?\` + path, nil
}
070701000001A3000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/oc   070701000001A4000081A4000000000000000000000001645E367C0000057E000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/oc/exporter.go   package oc

import (
	"github.com/sirupsen/logrus"
	"go.opencensus.io/trace"
)

var _ = (trace.Exporter)(&LogrusExporter{})

// LogrusExporter is an OpenCensus `trace.Exporter` that exports
// `trace.SpanData` to logrus output.
type LogrusExporter struct {
}

// ExportSpan exports `s` based on the the following rules:
//
// 1. All output will contain `s.Attributes`, `s.TraceID`, `s.SpanID`,
// `s.ParentSpanID` for correlation
//
// 2. Any calls to .Annotate will not be supported.
//
// 3. The span itself will be written at `logrus.InfoLevel` unless
// `s.Status.Code != 0` in which case it will be written at `logrus.ErrorLevel`
// providing `s.Status.Message` as the error value.
func (le *LogrusExporter) ExportSpan(s *trace.SpanData) {
	// Combine all span annotations with traceID, spanID, parentSpanID
	baseEntry := logrus.WithFields(logrus.Fields(s.Attributes))
	baseEntry.Data["traceID"] = s.TraceID.String()
	baseEntry.Data["spanID"] = s.SpanID.String()
	baseEntry.Data["parentSpanID"] = s.ParentSpanID.String()
	baseEntry.Data["startTime"] = s.StartTime
	baseEntry.Data["endTime"] = s.EndTime
	baseEntry.Data["duration"] = s.EndTime.Sub(s.StartTime).String()
	baseEntry.Data["name"] = s.Name
	baseEntry.Time = s.StartTime

	level := logrus.InfoLevel
	if s.Status.Code != 0 {
		level = logrus.ErrorLevel
		baseEntry.Data[logrus.ErrorKey] = s.Status.Message
	}
	baseEntry.Log(level, "Span")
}
  070701000001A5000081A4000000000000000000000001645E367C000005FC000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/oc/span.go   package oc

import (
	"context"

	"github.com/Microsoft/hcsshim/internal/log"
	"go.opencensus.io/trace"
)

var DefaultSampler = trace.AlwaysSample()

// SetSpanStatus sets `span.SetStatus` to the proper status depending on `err`. If
// `err` is `nil` assumes `trace.StatusCodeOk`.
func SetSpanStatus(span *trace.Span, err error) {
	status := trace.Status{}
	if err != nil {
		// TODO: JTERRY75 - Handle errors in a non-generic way
		status.Code = trace.StatusCodeUnknown
		status.Message = err.Error()
	}
	span.SetStatus(status)
}

// StartSpan wraps "go.opencensus.io/trace".StartSpan, but, if the span is sampling,
// adds a log entry to the context that points to the newly created span.
func StartSpan(ctx context.Context, name string, o ...trace.StartOption) (context.Context, *trace.Span) {
	ctx, s := trace.StartSpan(ctx, name, o...)
	return update(ctx, s)
}

// StartSpanWithRemoteParent wraps "go.opencensus.io/trace".StartSpanWithRemoteParent.
//
// See StartSpan for more information.
func StartSpanWithRemoteParent(ctx context.Context, name string, parent trace.SpanContext, o ...trace.StartOption) (context.Context, *trace.Span) {
	ctx, s := trace.StartSpanWithRemoteParent(ctx, name, parent, o...)
	return update(ctx, s)
}

func update(ctx context.Context, s *trace.Span) (context.Context, *trace.Span) {
	if s.IsRecordingEvents() {
		ctx = log.UpdateContext(ctx)
	}

	return ctx, s
}

var WithServerSpanKind = trace.WithSpanKind(trace.SpanKindServer)
var WithClientSpanKind = trace.WithSpanKind(trace.SpanKindClient)
070701000001A6000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/protocol 070701000001A7000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/protocol/guestrequest    070701000001A8000081A4000000000000000000000001645E367C00000767000000000000000000000000000000000000006000000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/protocol/guestrequest/types.go   package guestrequest

// These are constants for v2 schema modify requests.

type RequestType string
type ResourceType string

// RequestType const
const (
	RequestTypeAdd    RequestType = "Add"
	RequestTypeRemove RequestType = "Remove"
	RequestTypePreAdd RequestType = "PreAdd" // For networking
	RequestTypeUpdate RequestType = "Update"
)

type SignalValueWCOW string

const (
	SignalValueWCOWCtrlC        SignalValueWCOW = "CtrlC"
	SignalValueWCOWCtrlBreak    SignalValueWCOW = "CtrlBreak"
	SignalValueWCOWCtrlClose    SignalValueWCOW = "CtrlClose"
	SignalValueWCOWCtrlLogOff   SignalValueWCOW = "CtrlLogOff"
	SignalValueWCOWCtrlShutdown SignalValueWCOW = "CtrlShutdown"
)

// ModificationRequest is for modify commands passed to the guest.
type ModificationRequest struct {
	RequestType  RequestType  `json:"RequestType,omitempty"`
	ResourceType ResourceType `json:"ResourceType,omitempty"`
	Settings     interface{}  `json:"Settings,omitempty"`
}

type NetworkModifyRequest struct {
	AdapterId   string      `json:"AdapterId,omitempty"` //nolint:stylecheck
	RequestType RequestType `json:"RequestType,omitempty"`
	Settings    interface{} `json:"Settings,omitempty"`
}

type RS4NetworkModifyRequest struct {
	AdapterInstanceId string      `json:"AdapterInstanceId,omitempty"` //nolint:stylecheck
	RequestType       RequestType `json:"RequestType,omitempty"`
	Settings          interface{} `json:"Settings,omitempty"`
}

var (
	// V5 GUIDs for SCSI controllers
	// These GUIDs are created with namespace GUID "d422512d-2bf2-4752-809d-7b82b5fcb1b4"
	// and index as names. For example, first GUID is created like this:
	// guid.NewV5("d422512d-2bf2-4752-809d-7b82b5fcb1b4", []byte("0"))
	ScsiControllerGuids = []string{
		"df6d0690-79e5-55b6-a5ec-c1e2f77f580a",
		"0110f83b-de10-5172-a266-78bca56bf50a",
		"b5d2d8d4-3a75-51bf-945b-3444dc6b8579",
		"305891a9-b251-5dfe-91a2-c25d9212275b",
	}
)
 070701000001A9000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/safefile 070701000001AA000081A4000000000000000000000001645E367C00000011000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/safefile/do.go   package safefile
   070701000001AB000081A4000000000000000000000001645E367C00002D1F000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/safefile/safeopen.go //go:build windows

package safefile

import (
	"errors"
	"io"
	"os"
	"path/filepath"
	"strings"
	"syscall"
	"unicode/utf16"
	"unsafe"

	"github.com/Microsoft/hcsshim/internal/longpath"
	"github.com/Microsoft/hcsshim/internal/winapi"

	winio "github.com/Microsoft/go-winio"
)

func OpenRoot(path string) (*os.File, error) {
	longpath, err := longpath.LongAbs(path)
	if err != nil {
		return nil, err
	}
	return winio.OpenForBackup(longpath, syscall.GENERIC_READ, syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE|syscall.FILE_SHARE_DELETE, syscall.OPEN_EXISTING)
}

func cleanGoStringRelativePath(path string) (string, error) {
	path = filepath.Clean(path)
	if strings.Contains(path, ":") {
		// Since alternate data streams must follow the file they
		// are attached to, finding one here (out of order) is invalid.
		return "", errors.New("path contains invalid character `:`")
	}
	fspath := filepath.FromSlash(path)
	if len(fspath) > 0 && fspath[0] == '\\' {
		return "", errors.New("expected relative path")
	}
	return fspath, nil
}

func ntRelativePath(path string) ([]uint16, error) {
	fspath, err := cleanGoStringRelativePath(path)
	if err != nil {
		return nil, err
	}

	path16 := utf16.Encode(([]rune)(fspath))
	if len(path16) > 32767 {
		return nil, syscall.ENAMETOOLONG
	}

	return path16, nil
}

// openRelativeInternal opens a relative path from the given root, failing if
// any of the intermediate path components are reparse points.
func openRelativeInternal(path string, root *os.File, accessMask uint32, shareFlags uint32, createDisposition uint32, flags uint32) (*os.File, error) {
	var (
		h    uintptr
		iosb winapi.IOStatusBlock
		oa   winapi.ObjectAttributes
	)

	cleanRelativePath, err := cleanGoStringRelativePath(path)
	if err != nil {
		return nil, err
	}

	if root == nil || root.Fd() == 0 {
		return nil, errors.New("missing root directory")
	}

	pathUnicode, err := winapi.NewUnicodeString(cleanRelativePath)
	if err != nil {
		return nil, err
	}

	oa.Length = unsafe.Sizeof(oa)
	oa.ObjectName = pathUnicode
	oa.RootDirectory = uintptr(root.Fd())
	oa.Attributes = winapi.OBJ_DONT_REPARSE
	status := winapi.NtCreateFile(
		&h,
		accessMask|syscall.SYNCHRONIZE,
		&oa,
		&iosb,
		nil,
		0,
		shareFlags,
		createDisposition,
		winapi.FILE_OPEN_FOR_BACKUP_INTENT|winapi.FILE_SYNCHRONOUS_IO_NONALERT|flags,
		nil,
		0,
	)
	if status != 0 {
		return nil, winapi.RtlNtStatusToDosError(status)
	}

	fullPath, err := longpath.LongAbs(filepath.Join(root.Name(), path))
	if err != nil {
		syscall.Close(syscall.Handle(h))
		return nil, err
	}

	return os.NewFile(h, fullPath), nil
}

// OpenRelative opens a relative path from the given root, failing if
// any of the intermediate path components are reparse points.
func OpenRelative(path string, root *os.File, accessMask uint32, shareFlags uint32, createDisposition uint32, flags uint32) (*os.File, error) {
	f, err := openRelativeInternal(path, root, accessMask, shareFlags, createDisposition, flags)
	if err != nil {
		err = &os.PathError{Op: "open", Path: filepath.Join(root.Name(), path), Err: err}
	}
	return f, err
}

// LinkRelative creates a hard link from oldname to newname (relative to oldroot
// and newroot), failing if any of the intermediate path components are reparse
// points.
func LinkRelative(oldname string, oldroot *os.File, newname string, newroot *os.File) error {
	// Open the old file.
	oldf, err := openRelativeInternal(
		oldname,
		oldroot,
		syscall.FILE_WRITE_ATTRIBUTES,
		syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE|syscall.FILE_SHARE_DELETE,
		winapi.FILE_OPEN,
		0,
	)
	if err != nil {
		return &os.LinkError{Op: "link", Old: filepath.Join(oldroot.Name(), oldname), New: filepath.Join(newroot.Name(), newname), Err: err}
	}
	defer oldf.Close()

	// Open the parent of the new file.
	var parent *os.File
	parentPath := filepath.Dir(newname)
	if parentPath != "." {
		parent, err = openRelativeInternal(
			parentPath,
			newroot,
			syscall.GENERIC_READ,
			syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE|syscall.FILE_SHARE_DELETE,
			winapi.FILE_OPEN,
			winapi.FILE_DIRECTORY_FILE)
		if err != nil {
			return &os.LinkError{Op: "link", Old: oldf.Name(), New: filepath.Join(newroot.Name(), newname), Err: err}
		}
		defer parent.Close()

		fi, err := winio.GetFileBasicInfo(parent)
		if err != nil {
			return err
		}
		if (fi.FileAttributes & syscall.FILE_ATTRIBUTE_REPARSE_POINT) != 0 {
			return &os.LinkError{Op: "link", Old: oldf.Name(), New: filepath.Join(newroot.Name(), newname), Err: winapi.RtlNtStatusToDosError(winapi.STATUS_REPARSE_POINT_ENCOUNTERED)}
		}
	} else {
		parent = newroot
	}

	// Issue an NT call to create the link. This will be safe because NT will
	// not open any more directories to create the link, so it cannot walk any
	// more reparse points.
	newbase := filepath.Base(newname)
	newbase16, err := ntRelativePath(newbase)
	if err != nil {
		return err
	}

	size := int(unsafe.Offsetof(winapi.FileLinkInformation{}.FileName)) + len(newbase16)*2
	linkinfoBuffer := winapi.LocalAlloc(0, size)
	defer winapi.LocalFree(linkinfoBuffer)

	linkinfo := (*winapi.FileLinkInformation)(unsafe.Pointer(linkinfoBuffer))
	linkinfo.RootDirectory = parent.Fd()
	linkinfo.FileNameLength = uint32(len(newbase16) * 2)
	copy(winapi.Uint16BufferToSlice(&linkinfo.FileName[0], len(newbase16)), newbase16)

	var iosb winapi.IOStatusBlock
	status := winapi.NtSetInformationFile(
		oldf.Fd(),
		&iosb,
		linkinfoBuffer,
		uint32(size),
		winapi.FileLinkInformationClass,
	)
	if status != 0 {
		return &os.LinkError{Op: "link", Old: oldf.Name(), New: filepath.Join(parent.Name(), newbase), Err: winapi.RtlNtStatusToDosError(status)}
	}

	return nil
}

// deleteOnClose marks a file to be deleted when the handle is closed.
func deleteOnClose(f *os.File) error {
	disposition := winapi.FileDispositionInformationEx{Flags: winapi.FILE_DISPOSITION_DELETE}
	var iosb winapi.IOStatusBlock
	status := winapi.NtSetInformationFile(
		f.Fd(),
		&iosb,
		uintptr(unsafe.Pointer(&disposition)),
		uint32(unsafe.Sizeof(disposition)),
		winapi.FileDispositionInformationExClass,
	)
	if status != 0 {
		return winapi.RtlNtStatusToDosError(status)
	}
	return nil
}

// clearReadOnly clears the readonly attribute on a file.
func clearReadOnly(f *os.File) error {
	bi, err := winio.GetFileBasicInfo(f)
	if err != nil {
		return err
	}
	if bi.FileAttributes&syscall.FILE_ATTRIBUTE_READONLY == 0 {
		return nil
	}
	sbi := winio.FileBasicInfo{
		FileAttributes: bi.FileAttributes &^ syscall.FILE_ATTRIBUTE_READONLY,
	}
	if sbi.FileAttributes == 0 {
		sbi.FileAttributes = syscall.FILE_ATTRIBUTE_NORMAL
	}
	return winio.SetFileBasicInfo(f, &sbi)
}

// RemoveRelative removes a file or directory relative to a root, failing if any
// intermediate path components are reparse points.
func RemoveRelative(path string, root *os.File) error {
	f, err := openRelativeInternal(
		path,
		root,
		winapi.FILE_READ_ATTRIBUTES|winapi.FILE_WRITE_ATTRIBUTES|winapi.DELETE,
		syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE|syscall.FILE_SHARE_DELETE,
		winapi.FILE_OPEN,
		winapi.FILE_OPEN_REPARSE_POINT)
	if err == nil {
		defer f.Close()
		err = deleteOnClose(f)
		if err == syscall.ERROR_ACCESS_DENIED {
			// Maybe the file is marked readonly. Clear the bit and retry.
			_ = clearReadOnly(f)
			err = deleteOnClose(f)
		}
	}
	if err != nil {
		return &os.PathError{Op: "remove", Path: filepath.Join(root.Name(), path), Err: err}
	}
	return nil
}

// RemoveAllRelative removes a directory tree relative to a root, failing if any
// intermediate path components are reparse points.
func RemoveAllRelative(path string, root *os.File) error {
	fi, err := LstatRelative(path, root)
	if err != nil {
		if os.IsNotExist(err) {
			return nil
		}
		return err
	}
	fileAttributes := fi.Sys().(*syscall.Win32FileAttributeData).FileAttributes
	if fileAttributes&syscall.FILE_ATTRIBUTE_DIRECTORY == 0 || fileAttributes&syscall.FILE_ATTRIBUTE_REPARSE_POINT != 0 {
		// If this is a reparse point, it can't have children. Simple remove will do.
		err := RemoveRelative(path, root)
		if err == nil || os.IsNotExist(err) {
			return nil
		}
		return err
	}

	// It is necessary to use os.Open as Readdirnames does not work with
	// OpenRelative. This is safe because the above lstatrelative fails
	// if the target is outside the root, and we know this is not a
	// symlink from the above FILE_ATTRIBUTE_REPARSE_POINT check.
	fd, err := os.Open(filepath.Join(root.Name(), path))
	if err != nil {
		if os.IsNotExist(err) {
			// Race. It was deleted between the Lstat and Open.
			// Return nil per RemoveAll's docs.
			return nil
		}
		return err
	}

	// Remove contents & return first error.
	for {
		names, err1 := fd.Readdirnames(100)
		for _, name := range names {
			err1 := RemoveAllRelative(path+string(os.PathSeparator)+name, root)
			if err == nil {
				err = err1
			}
		}
		if err1 == io.EOF {
			break
		}
		// If Readdirnames returned an error, use it.
		if err == nil {
			err = err1
		}
		if len(names) == 0 {
			break
		}
	}
	fd.Close()

	// Remove directory.
	err1 := RemoveRelative(path, root)
	if err1 == nil || os.IsNotExist(err1) {
		return nil
	}
	if err == nil {
		err = err1
	}
	return err
}

// MkdirRelative creates a directory relative to a root, failing if any
// intermediate path components are reparse points.
func MkdirRelative(path string, root *os.File) error {
	f, err := openRelativeInternal(
		path,
		root,
		0,
		syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE|syscall.FILE_SHARE_DELETE,
		winapi.FILE_CREATE,
		winapi.FILE_DIRECTORY_FILE)
	if err == nil {
		f.Close()
	} else {
		err = &os.PathError{Op: "mkdir", Path: filepath.Join(root.Name(), path), Err: err}
	}
	return err
}

// MkdirAllRelative creates each directory in the path relative to a root, failing if
// any existing intermediate path components are reparse points.
func MkdirAllRelative(path string, root *os.File) error {
	pathParts := strings.Split(filepath.Clean(path), (string)(filepath.Separator))
	for index := range pathParts {
		partialPath := filepath.Join(pathParts[0 : index+1]...)
		stat, err := LstatRelative(partialPath, root)

		if err != nil {
			if os.IsNotExist(err) {
				if err := MkdirRelative(partialPath, root); err != nil {
					return err
				}
				continue
			}
			return err
		}

		if !stat.IsDir() {
			fullPath := filepath.Join(root.Name(), partialPath)
			return &os.PathError{Op: "mkdir", Path: fullPath, Err: syscall.ENOTDIR}
		}
	}

	return nil
}

// LstatRelative performs a stat operation on a file relative to a root, failing
// if any intermediate path components are reparse points.
func LstatRelative(path string, root *os.File) (os.FileInfo, error) {
	f, err := openRelativeInternal(
		path,
		root,
		winapi.FILE_READ_ATTRIBUTES,
		syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE|syscall.FILE_SHARE_DELETE,
		winapi.FILE_OPEN,
		winapi.FILE_OPEN_REPARSE_POINT)
	if err != nil {
		return nil, &os.PathError{Op: "stat", Path: filepath.Join(root.Name(), path), Err: err}
	}
	defer f.Close()
	return f.Stat()
}

// EnsureNotReparsePointRelative validates that a given file (relative to a
// root) and all intermediate path components are not a reparse points.
func EnsureNotReparsePointRelative(path string, root *os.File) error {
	// Perform an open with OBJ_DONT_REPARSE but without specifying FILE_OPEN_REPARSE_POINT.
	f, err := OpenRelative(
		path,
		root,
		0,
		syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE|syscall.FILE_SHARE_DELETE,
		winapi.FILE_OPEN,
		0)
	if err != nil {
		return err
	}
	f.Close()
	return nil
}
 070701000001AC000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/wclayer  070701000001AD000081A4000000000000000000000001645E367C00000380000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/wclayer/activatelayer.go //go:build windows

package wclayer

import (
	"context"

	"github.com/Microsoft/hcsshim/internal/hcserror"
	"github.com/Microsoft/hcsshim/internal/oc"
	"go.opencensus.io/trace"
)

// ActivateLayer will find the layer with the given id and mount it's filesystem.
// For a read/write layer, the mounted filesystem will appear as a volume on the
// host, while a read-only layer is generally expected to be a no-op.
// An activated layer must later be deactivated via DeactivateLayer.
func ActivateLayer(ctx context.Context, path string) (err error) {
	title := "hcsshim::ActivateLayer"
	ctx, span := oc.StartSpan(ctx, title) //nolint:ineffassign,staticcheck
	defer span.End()
	defer func() { oc.SetSpanStatus(span, err) }()
	span.AddAttributes(trace.StringAttribute("path", path))

	err = activateLayer(&stdDriverInfo, path)
	if err != nil {
		return hcserror.New(err, title, "")
	}
	return nil
}
070701000001AE000081A4000000000000000000000001645E367C00001107000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/wclayer/baselayerreader.go   package wclayer

import (
	"errors"
	"io"
	"os"
	"path/filepath"
	"strings"
	"syscall"

	"github.com/Microsoft/go-winio"
	"github.com/Microsoft/hcsshim/internal/longpath"
	"github.com/Microsoft/hcsshim/internal/oc"
	"go.opencensus.io/trace"
)

type baseLayerReader struct {
	s            *trace.Span
	root         string
	result       chan *fileEntry
	proceed      chan bool
	currentFile  *os.File
	backupReader *winio.BackupFileReader
}

func newBaseLayerReader(root string, s *trace.Span) (r *baseLayerReader) {
	r = &baseLayerReader{
		s:       s,
		root:    root,
		result:  make(chan *fileEntry),
		proceed: make(chan bool),
	}
	go r.walk()
	return r
}

func (r *baseLayerReader) walkUntilCancelled() error {
	root, err := longpath.LongAbs(r.root)
	if err != nil {
		return err
	}

	r.root = root

	err = filepath.Walk(filepath.Join(r.root, filesPath), func(path string, info os.FileInfo, err error) error {
		if err != nil {
			return err
		}

		// Indirect fix for https://github.com/moby/moby/issues/32838#issuecomment-343610048.
		// Handle failure from what may be a golang bug in the conversion of
		// UTF16 to UTF8 in files which are left in the recycle bin. Os.Lstat
		// which is called by filepath.Walk will fail when a filename contains
		// unicode characters. Skip the recycle bin regardless which is goodness.
		if strings.EqualFold(path, filepath.Join(r.root, `Files\$Recycle.Bin`)) && info.IsDir() {
			return filepath.SkipDir
		}

		r.result <- &fileEntry{path, info, nil}
		if !<-r.proceed {
			return errorIterationCanceled
		}

		return nil
	})

	if err == errorIterationCanceled {
		return nil
	}

	if err != nil {
		return err
	}

	utilityVMAbsPath := filepath.Join(r.root, utilityVMPath)
	utilityVMFilesAbsPath := filepath.Join(r.root, utilityVMFilesPath)

	// Ignore a UtilityVM without Files, that's not _really_ a UtiltyVM
	if _, err = os.Lstat(utilityVMFilesAbsPath); err != nil {
		if os.IsNotExist(err) {
			return io.EOF
		}
		return err
	}

	err = filepath.Walk(utilityVMAbsPath, func(path string, info os.FileInfo, err error) error {
		if err != nil {
			return err
		}

		if path != utilityVMAbsPath && path != utilityVMFilesAbsPath && !hasPathPrefix(path, utilityVMFilesAbsPath) {
			if info.IsDir() {
				return filepath.SkipDir
			}
			return nil
		}

		r.result <- &fileEntry{path, info, nil}
		if !<-r.proceed {
			return errorIterationCanceled
		}

		return nil
	})

	if err == errorIterationCanceled {
		return nil
	}

	if err != nil {
		return err
	}

	return io.EOF
}

func (r *baseLayerReader) walk() {
	defer close(r.result)
	if !<-r.proceed {
		return
	}

	err := r.walkUntilCancelled()
	if err != nil {
		for {
			r.result <- &fileEntry{err: err}
			if !<-r.proceed {
				return
			}
		}
	}
}

func (r *baseLayerReader) reset() {
	if r.backupReader != nil {
		r.backupReader.Close()
		r.backupReader = nil
	}
	if r.currentFile != nil {
		r.currentFile.Close()
		r.currentFile = nil
	}
}

func (r *baseLayerReader) Next() (path string, size int64, fileInfo *winio.FileBasicInfo, err error) {
	r.reset()
	r.proceed <- true
	fe := <-r.result
	if fe == nil {
		err = errors.New("BaseLayerReader closed")
		return
	}
	if fe.err != nil {
		err = fe.err
		return
	}

	path, err = filepath.Rel(r.root, fe.path)
	if err != nil {
		return
	}

	f, err := openFileOrDir(fe.path, syscall.GENERIC_READ, syscall.OPEN_EXISTING)
	if err != nil {
		return
	}
	defer func() {
		if f != nil {
			f.Close()
		}
	}()

	fileInfo, err = winio.GetFileBasicInfo(f)
	if err != nil {
		return
	}

	size = fe.fi.Size()
	r.backupReader = winio.NewBackupFileReader(f, true)

	r.currentFile = f
	f = nil
	return
}

func (r *baseLayerReader) LinkInfo() (uint32, *winio.FileIDInfo, error) {
	fileStandardInfo, err := winio.GetFileStandardInfo(r.currentFile)
	if err != nil {
		return 0, nil, err
	}
	fileIDInfo, err := winio.GetFileID(r.currentFile)
	if err != nil {
		return 0, nil, err
	}
	return fileStandardInfo.NumberOfLinks, fileIDInfo, nil
}

func (r *baseLayerReader) Read(b []byte) (int, error) {
	if r.backupReader == nil {
		return 0, io.EOF
	}
	return r.backupReader.Read(b)
}

func (r *baseLayerReader) Close() (err error) {
	defer r.s.End()
	defer func() {
		oc.SetSpanStatus(r.s, err)
		close(r.proceed)
	}()
	r.proceed <- false
	// The r.result channel will be closed once walk() returns
	<-r.result
	r.reset()
	return nil
}
 070701000001AF000081A4000000000000000000000001645E367C00000FC6000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/wclayer/baselayerwriter.go   //go:build windows

package wclayer

import (
	"context"
	"errors"
	"os"
	"path/filepath"
	"syscall"

	"github.com/Microsoft/go-winio"
	"github.com/Microsoft/hcsshim/internal/hcserror"
	"github.com/Microsoft/hcsshim/internal/oc"
	"github.com/Microsoft/hcsshim/internal/safefile"
	"github.com/Microsoft/hcsshim/internal/winapi"
	"go.opencensus.io/trace"
)

type baseLayerWriter struct {
	ctx context.Context
	s   *trace.Span

	root         *os.File
	f            *os.File
	bw           *winio.BackupFileWriter
	err          error
	hasUtilityVM bool
	dirInfo      []dirInfo
}

type dirInfo struct {
	path     string
	fileInfo winio.FileBasicInfo
}

// reapplyDirectoryTimes reapplies directory modification, creation, etc. times
// after processing of the directory tree has completed. The times are expected
// to be ordered such that parent directories come before child directories.
func reapplyDirectoryTimes(root *os.File, dis []dirInfo) error {
	for i := range dis {
		di := &dis[len(dis)-i-1] // reverse order: process child directories first
		f, err := safefile.OpenRelative(di.path, root, syscall.GENERIC_READ|syscall.GENERIC_WRITE, syscall.FILE_SHARE_READ, winapi.FILE_OPEN, winapi.FILE_DIRECTORY_FILE|syscall.FILE_FLAG_OPEN_REPARSE_POINT)
		if err != nil {
			return err
		}

		err = winio.SetFileBasicInfo(f, &di.fileInfo)
		f.Close()
		if err != nil {
			return err
		}
	}
	return nil
}

func (w *baseLayerWriter) closeCurrentFile() error {
	if w.f != nil {
		err := w.bw.Close()
		err2 := w.f.Close()
		w.f = nil
		w.bw = nil
		if err != nil {
			return err
		}
		if err2 != nil {
			return err2
		}
	}
	return nil
}

func (w *baseLayerWriter) Add(name string, fileInfo *winio.FileBasicInfo) (err error) {
	defer func() {
		if err != nil {
			w.err = err
		}
	}()

	err = w.closeCurrentFile()
	if err != nil {
		return err
	}

	if filepath.ToSlash(name) == `UtilityVM/Files` {
		w.hasUtilityVM = true
	}

	var f *os.File
	defer func() {
		if f != nil {
			f.Close()
		}
	}()

	extraFlags := uint32(0)
	if fileInfo.FileAttributes&syscall.FILE_ATTRIBUTE_DIRECTORY != 0 {
		extraFlags |= winapi.FILE_DIRECTORY_FILE
		w.dirInfo = append(w.dirInfo, dirInfo{name, *fileInfo})
	}

	mode := uint32(syscall.GENERIC_READ | syscall.GENERIC_WRITE | winio.WRITE_DAC | winio.WRITE_OWNER | winio.ACCESS_SYSTEM_SECURITY)
	f, err = safefile.OpenRelative(name, w.root, mode, syscall.FILE_SHARE_READ, winapi.FILE_CREATE, extraFlags)
	if err != nil {
		return hcserror.New(err, "Failed to safefile.OpenRelative", name)
	}

	err = winio.SetFileBasicInfo(f, fileInfo)
	if err != nil {
		return hcserror.New(err, "Failed to SetFileBasicInfo", name)
	}

	w.f = f
	w.bw = winio.NewBackupFileWriter(f, true)
	f = nil
	return nil
}

func (w *baseLayerWriter) AddLink(name string, target string) (err error) {
	defer func() {
		if err != nil {
			w.err = err
		}
	}()

	err = w.closeCurrentFile()
	if err != nil {
		return err
	}

	return safefile.LinkRelative(target, w.root, name, w.root)
}

func (w *baseLayerWriter) Remove(name string) error {
	return errors.New("base layer cannot have tombstones")
}

func (w *baseLayerWriter) Write(b []byte) (int, error) {
	n, err := w.bw.Write(b)
	if err != nil {
		w.err = err
	}
	return n, err
}

func (w *baseLayerWriter) Close() (err error) {
	defer w.s.End()
	defer func() { oc.SetSpanStatus(w.s, err) }()
	defer func() {
		w.root.Close()
		w.root = nil
	}()

	err = w.closeCurrentFile()
	if err != nil {
		return err
	}
	if w.err == nil {
		// Restore the file times of all the directories, since they may have
		// been modified by creating child directories.
		err = reapplyDirectoryTimes(w.root, w.dirInfo)
		if err != nil {
			return err
		}

		err = ProcessBaseLayer(w.ctx, w.root.Name())
		if err != nil {
			return err
		}

		if w.hasUtilityVM {
			err := safefile.EnsureNotReparsePointRelative("UtilityVM", w.root)
			if err != nil {
				return err
			}
			err = ProcessUtilityVMImage(w.ctx, filepath.Join(w.root.Name(), "UtilityVM"))
			if err != nil {
				return err
			}
		}
	}
	return w.err
}
  070701000001B0000081A4000000000000000000000001645E367C000010D2000000000000000000000000000000000000005F00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/wclayer/converttobaselayer.go    package wclayer

import (
	"context"
	"fmt"
	"os"
	"path/filepath"
	"syscall"

	"github.com/Microsoft/hcsshim/internal/hcserror"
	"github.com/Microsoft/hcsshim/internal/longpath"
	"github.com/Microsoft/hcsshim/internal/oc"
	"github.com/Microsoft/hcsshim/internal/safefile"
	"github.com/Microsoft/hcsshim/internal/winapi"
	"github.com/pkg/errors"
	"go.opencensus.io/trace"
	"golang.org/x/sys/windows"
)

var hiveNames = []string{"DEFAULT", "SAM", "SECURITY", "SOFTWARE", "SYSTEM"}

// Ensure the given file exists as an ordinary file, and create a minimal hive file if not.
func ensureHive(path string, root *os.File) (err error) {
	_, err = safefile.LstatRelative(path, root)
	if err != nil && !os.IsNotExist(err) {
		return fmt.Errorf("accessing %s: %w", path, err)
	}

	version := windows.RtlGetVersion()
	if version == nil {
		return fmt.Errorf("failed to get OS version")
	}

	var fullPath string
	fullPath, err = longpath.LongAbs(filepath.Join(root.Name(), path))
	if err != nil {
		return fmt.Errorf("getting path: %w", err)
	}

	var key syscall.Handle
	err = winapi.ORCreateHive(&key)
	if err != nil {
		return fmt.Errorf("creating hive: %w", err)
	}

	defer func() {
		closeErr := winapi.ORCloseHive(key)
		if closeErr != nil && err == nil {
			err = fmt.Errorf("closing hive key: %w", closeErr)
		}
	}()

	err = winapi.ORSaveHive(key, fullPath, version.MajorVersion, version.MinorVersion)
	if err != nil {
		return fmt.Errorf("saving hive: %w", err)
	}

	return nil
}

func ensureBaseLayer(root *os.File) (hasUtilityVM bool, err error) {
	// The base layer registry hives will be copied from here
	const hiveSourcePath = "Files\\Windows\\System32\\config"
	if err = safefile.MkdirAllRelative(hiveSourcePath, root); err != nil {
		return
	}

	for _, hiveName := range hiveNames {
		hivePath := filepath.Join(hiveSourcePath, hiveName)
		if err = ensureHive(hivePath, root); err != nil {
			return
		}
	}

	stat, err := safefile.LstatRelative(utilityVMFilesPath, root)

	if os.IsNotExist(err) {
		return false, nil
	}

	if err != nil {
		return
	}

	if !stat.Mode().IsDir() {
		fullPath := filepath.Join(root.Name(), utilityVMFilesPath)
		return false, errors.Errorf("%s has unexpected file mode %s", fullPath, stat.Mode().String())
	}

	const bcdRelativePath = "EFI\\Microsoft\\Boot\\BCD"

	// Just check that this exists as a regular file. If it exists but is not a valid registry hive,
	// ProcessUtilityVMImage will complain:
	// "The registry could not read in, or write out, or flush, one of the files that contain the system's image of the registry."
	bcdPath := filepath.Join(utilityVMFilesPath, bcdRelativePath)

	stat, err = safefile.LstatRelative(bcdPath, root)
	if err != nil {
		return false, errors.Wrapf(err, "UtilityVM must contain '%s'", bcdRelativePath)
	}

	if !stat.Mode().IsRegular() {
		fullPath := filepath.Join(root.Name(), bcdPath)
		return false, errors.Errorf("%s has unexpected file mode %s", fullPath, stat.Mode().String())
	}

	return true, nil
}

func convertToBaseLayer(ctx context.Context, root *os.File) error {
	hasUtilityVM, err := ensureBaseLayer(root)

	if err != nil {
		return err
	}

	if err := ProcessBaseLayer(ctx, root.Name()); err != nil {
		return err
	}

	if !hasUtilityVM {
		return nil
	}

	err = safefile.EnsureNotReparsePointRelative(utilityVMPath, root)
	if err != nil {
		return err
	}

	utilityVMPath := filepath.Join(root.Name(), utilityVMPath)
	return ProcessUtilityVMImage(ctx, utilityVMPath)
}

// ConvertToBaseLayer processes a candidate base layer, i.e. a directory
// containing the desired file content under Files/, and optionally the
// desired file content for a UtilityVM under UtilityVM/Files/
func ConvertToBaseLayer(ctx context.Context, path string) (err error) {
	title := "hcsshim::ConvertToBaseLayer"
	ctx, span := trace.StartSpan(ctx, title)
	defer span.End()
	defer func() { oc.SetSpanStatus(span, err) }()
	span.AddAttributes(trace.StringAttribute("path", path))

	root, err := safefile.OpenRoot(path)
	if err != nil {
		return hcserror.New(err, title+" - failed", "")
	}
	defer func() {
		if err2 := root.Close(); err == nil && err2 != nil {
			err = hcserror.New(err2, title+" - failed", "")
		}
	}()

	if err = convertToBaseLayer(ctx, root); err != nil {
		return hcserror.New(err, title+" - failed", "")
	}
	return nil
}
  070701000001B1000081A4000000000000000000000001645E367C000002F8000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/wclayer/createlayer.go   //go:build windows

package wclayer

import (
	"context"

	"github.com/Microsoft/hcsshim/internal/hcserror"
	"github.com/Microsoft/hcsshim/internal/oc"
	"go.opencensus.io/trace"
)

// CreateLayer creates a new, empty, read-only layer on the filesystem based on
// the parent layer provided.
func CreateLayer(ctx context.Context, path, parent string) (err error) {
	title := "hcsshim::CreateLayer"
	ctx, span := oc.StartSpan(ctx, title) //nolint:ineffassign,staticcheck
	defer span.End()
	defer func() { oc.SetSpanStatus(span, err) }()
	span.AddAttributes(
		trace.StringAttribute("path", path),
		trace.StringAttribute("parent", parent))

	err = createLayer(&stdDriverInfo, path, parent)
	if err != nil {
		return hcserror.New(err, title, "")
	}
	return nil
}
070701000001B2000081A4000000000000000000000001645E367C000003EC000000000000000000000000000000000000005F00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/wclayer/createscratchlayer.go    //go:build windows

package wclayer

import (
	"context"
	"strings"

	"github.com/Microsoft/hcsshim/internal/hcserror"
	"github.com/Microsoft/hcsshim/internal/oc"
	"go.opencensus.io/trace"
)

// CreateScratchLayer creates and populates new read-write layer for use by a container.
// This requires the full list of paths to all parent layers up to the base
func CreateScratchLayer(ctx context.Context, path string, parentLayerPaths []string) (err error) {
	title := "hcsshim::CreateScratchLayer"
	ctx, span := oc.StartSpan(ctx, title)
	defer span.End()
	defer func() { oc.SetSpanStatus(span, err) }()
	span.AddAttributes(
		trace.StringAttribute("path", path),
		trace.StringAttribute("parentLayerPaths", strings.Join(parentLayerPaths, ", ")))

	// Generate layer descriptors
	layers, err := layerPathsToDescriptors(ctx, parentLayerPaths)
	if err != nil {
		return err
	}

	err = createSandboxLayer(&stdDriverInfo, path, 0, layers)
	if err != nil {
		return hcserror.New(err, title, "")
	}
	return nil
}
070701000001B3000081A4000000000000000000000001645E367C000002B0000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/wclayer/deactivatelayer.go   //go:build windows

package wclayer

import (
	"context"

	"github.com/Microsoft/hcsshim/internal/hcserror"
	"github.com/Microsoft/hcsshim/internal/oc"
	"go.opencensus.io/trace"
)

// DeactivateLayer will dismount a layer that was mounted via ActivateLayer.
func DeactivateLayer(ctx context.Context, path string) (err error) {
	title := "hcsshim::DeactivateLayer"
	ctx, span := oc.StartSpan(ctx, title) //nolint:ineffassign,staticcheck
	defer span.End()
	defer func() { oc.SetSpanStatus(span, err) }()
	span.AddAttributes(trace.StringAttribute("path", path))

	err = deactivateLayer(&stdDriverInfo, path)
	if err != nil {
		return hcserror.New(err, title+"- failed", "")
	}
	return nil
}
070701000001B4000081A4000000000000000000000001645E367C000002DE000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/wclayer/destroylayer.go  //go:build windows

package wclayer

import (
	"context"

	"github.com/Microsoft/hcsshim/internal/hcserror"
	"github.com/Microsoft/hcsshim/internal/oc"
	"go.opencensus.io/trace"
)

// DestroyLayer will remove the on-disk files representing the layer with the given
// path, including that layer's containing folder, if any.
func DestroyLayer(ctx context.Context, path string) (err error) {
	title := "hcsshim::DestroyLayer"
	ctx, span := oc.StartSpan(ctx, title) //nolint:ineffassign,staticcheck
	defer span.End()
	defer func() { oc.SetSpanStatus(span, err) }()
	span.AddAttributes(trace.StringAttribute("path", path))

	err = destroyLayer(&stdDriverInfo, path)
	if err != nil {
		return hcserror.New(err, title, "")
	}
	return nil
}
  070701000001B5000081A4000000000000000000000001645E367C000000B9000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/wclayer/doc.go   // Package wclayer provides bindings to HCS's legacy layer management API and
// provides a higher level interface around these calls for container layer
// management.
package wclayer
   070701000001B6000081A4000000000000000000000001645E367C00000F81000000000000000000000000000000000000005E00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/wclayer/expandscratchsize.go //go:build windows

package wclayer

import (
	"context"
	"os"
	"path/filepath"
	"syscall"
	"unsafe"

	"github.com/Microsoft/hcsshim/internal/hcserror"
	"github.com/Microsoft/hcsshim/internal/oc"
	"github.com/Microsoft/hcsshim/osversion"
	"go.opencensus.io/trace"
)

// ExpandScratchSize expands the size of a layer to at least size bytes.
func ExpandScratchSize(ctx context.Context, path string, size uint64) (err error) {
	title := "hcsshim::ExpandScratchSize"
	ctx, span := oc.StartSpan(ctx, title)
	defer span.End()
	defer func() { oc.SetSpanStatus(span, err) }()
	span.AddAttributes(
		trace.StringAttribute("path", path),
		trace.Int64Attribute("size", int64(size)))

	err = expandSandboxSize(&stdDriverInfo, path, size)
	if err != nil {
		return hcserror.New(err, title, "")
	}

	// Manually expand the volume now in order to work around bugs in 19H1 and
	// prerelease versions of Vb. Remove once this is fixed in Windows.
	if build := osversion.Build(); build >= osversion.V19H1 && build < 19020 {
		err = expandSandboxVolume(ctx, path)
		if err != nil {
			return err
		}
	}
	return nil
}

type virtualStorageType struct {
	DeviceID uint32
	VendorID [16]byte
}

type openVersion2 struct {
	GetInfoOnly    int32    // bool but 4-byte aligned
	ReadOnly       int32    // bool but 4-byte aligned
	ResiliencyGUID [16]byte // GUID
}

type openVirtualDiskParameters struct {
	Version  uint32 // Must always be set to 2
	Version2 openVersion2
}

func attachVhd(path string) (syscall.Handle, error) {
	var (
		defaultType virtualStorageType
		handle      syscall.Handle
	)
	parameters := openVirtualDiskParameters{Version: 2}
	err := openVirtualDisk(
		&defaultType,
		path,
		0,
		0,
		&parameters,
		&handle)
	if err != nil {
		return 0, &os.PathError{Op: "OpenVirtualDisk", Path: path, Err: err}
	}
	err = attachVirtualDisk(handle, 0, 0, 0, 0, 0)
	if err != nil {
		syscall.Close(handle)
		return 0, &os.PathError{Op: "AttachVirtualDisk", Path: path, Err: err}
	}
	return handle, nil
}

func expandSandboxVolume(ctx context.Context, path string) error {
	// Mount the sandbox VHD temporarily.
	vhdPath := filepath.Join(path, "sandbox.vhdx")
	vhd, err := attachVhd(vhdPath)
	if err != nil {
		return &os.PathError{Op: "OpenVirtualDisk", Path: vhdPath, Err: err}
	}
	defer syscall.Close(vhd)

	// Open the volume.
	volumePath, err := GetLayerMountPath(ctx, path)
	if err != nil {
		return err
	}
	if volumePath[len(volumePath)-1] == '\\' {
		volumePath = volumePath[:len(volumePath)-1]
	}
	volume, err := os.OpenFile(volumePath, os.O_RDWR, 0)
	if err != nil {
		return err
	}
	defer volume.Close()

	// Get the volume's underlying partition size in NTFS clusters.
	var (
		partitionSize int64
		bytes         uint32
	)
	const _IOCTL_DISK_GET_LENGTH_INFO = 0x0007405C
	err = syscall.DeviceIoControl(syscall.Handle(volume.Fd()), _IOCTL_DISK_GET_LENGTH_INFO, nil, 0, (*byte)(unsafe.Pointer(&partitionSize)), 8, &bytes, nil)
	if err != nil {
		return &os.PathError{Op: "IOCTL_DISK_GET_LENGTH_INFO", Path: volume.Name(), Err: err}
	}
	const (
		clusterSize = 4096
		sectorSize  = 512
	)
	targetClusters := partitionSize / clusterSize

	// Get the volume's current size in NTFS clusters.
	var volumeSize int64
	err = getDiskFreeSpaceEx(volume.Name()+"\\", nil, &volumeSize, nil)
	if err != nil {
		return &os.PathError{Op: "GetDiskFreeSpaceEx", Path: volume.Name(), Err: err}
	}
	volumeClusters := volumeSize / clusterSize

	// Only resize the volume if there is space to grow, otherwise this will
	// fail with invalid parameter. NTFS reserves one cluster.
	if volumeClusters+1 < targetClusters {
		targetSectors := targetClusters * (clusterSize / sectorSize)
		const _FSCTL_EXTEND_VOLUME = 0x000900F0
		err = syscall.DeviceIoControl(syscall.Handle(volume.Fd()), _FSCTL_EXTEND_VOLUME, (*byte)(unsafe.Pointer(&targetSectors)), 8, nil, 0, &bytes, nil)
		if err != nil {
			return &os.PathError{Op: "FSCTL_EXTEND_VOLUME", Path: volume.Name(), Err: err}
		}
	}
	return nil
}
   070701000001B7000081A4000000000000000000000001645E367C00000D0D000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/wclayer/exportlayer.go   //go:build windows

package wclayer

import (
	"context"
	"os"
	"strings"

	"github.com/Microsoft/go-winio"
	"github.com/Microsoft/hcsshim/internal/hcserror"
	"github.com/Microsoft/hcsshim/internal/oc"
	"go.opencensus.io/trace"
)

// ExportLayer will create a folder at exportFolderPath and fill that folder with
// the transport format version of the layer identified by layerId. This transport
// format includes any metadata required for later importing the layer (using
// ImportLayer), and requires the full list of parent layer paths in order to
// perform the export.
func ExportLayer(ctx context.Context, path string, exportFolderPath string, parentLayerPaths []string) (err error) {
	title := "hcsshim::ExportLayer"
	ctx, span := oc.StartSpan(ctx, title)
	defer span.End()
	defer func() { oc.SetSpanStatus(span, err) }()
	span.AddAttributes(
		trace.StringAttribute("path", path),
		trace.StringAttribute("exportFolderPath", exportFolderPath),
		trace.StringAttribute("parentLayerPaths", strings.Join(parentLayerPaths, ", ")))

	// Generate layer descriptors
	layers, err := layerPathsToDescriptors(ctx, parentLayerPaths)
	if err != nil {
		return err
	}

	err = exportLayer(&stdDriverInfo, path, exportFolderPath, layers)
	if err != nil {
		return hcserror.New(err, title, "")
	}
	return nil
}

// LayerReader is an interface that supports reading an existing container image layer.
type LayerReader interface {
	// Next advances to the next file and returns the name, size, and file info
	Next() (string, int64, *winio.FileBasicInfo, error)
	// LinkInfo returns the number of links and the file identifier for the current file.
	LinkInfo() (uint32, *winio.FileIDInfo, error)
	// Read reads data from the current file, in the format of a Win32 backup stream, and
	// returns the number of bytes read.
	Read(b []byte) (int, error)
	// Close finishes the layer reading process and releases any resources.
	Close() error
}

// NewLayerReader returns a new layer reader for reading the contents of an on-disk layer.
// The caller must have taken the SeBackupPrivilege privilege
// to call this and any methods on the resulting LayerReader.
func NewLayerReader(ctx context.Context, path string, parentLayerPaths []string) (_ LayerReader, err error) {
	ctx, span := oc.StartSpan(ctx, "hcsshim::NewLayerReader")
	defer func() {
		if err != nil {
			oc.SetSpanStatus(span, err)
			span.End()
		}
	}()
	span.AddAttributes(
		trace.StringAttribute("path", path),
		trace.StringAttribute("parentLayerPaths", strings.Join(parentLayerPaths, ", ")))

	if len(parentLayerPaths) == 0 {
		// This is a base layer. It gets exported differently.
		return newBaseLayerReader(path, span), nil
	}

	exportPath, err := os.MkdirTemp("", "hcs")
	if err != nil {
		return nil, err
	}
	err = ExportLayer(ctx, path, exportPath, parentLayerPaths)
	if err != nil {
		os.RemoveAll(exportPath)
		return nil, err
	}
	return &legacyLayerReaderWrapper{
		ctx:               ctx,
		s:                 span,
		legacyLayerReader: newLegacyLayerReader(exportPath),
	}, nil
}

type legacyLayerReaderWrapper struct {
	ctx context.Context
	s   *trace.Span

	*legacyLayerReader
}

func (r *legacyLayerReaderWrapper) Close() (err error) {
	defer r.s.End()
	defer func() { oc.SetSpanStatus(r.s, err) }()

	err = r.legacyLayerReader.Close()
	os.RemoveAll(r.root)
	return err
}
   070701000001B8000081A4000000000000000000000001645E367C00000636000000000000000000000000000000000000005E00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/wclayer/getlayermountpath.go //go:build windows

package wclayer

import (
	"context"
	"syscall"

	"github.com/Microsoft/hcsshim/internal/hcserror"
	"github.com/Microsoft/hcsshim/internal/log"
	"github.com/Microsoft/hcsshim/internal/oc"
	"go.opencensus.io/trace"
)

// GetLayerMountPath will look for a mounted layer with the given path and return
// the path at which that layer can be accessed.  This path may be a volume path
// if the layer is a mounted read-write layer, otherwise it is expected to be the
// folder path at which the layer is stored.
func GetLayerMountPath(ctx context.Context, path string) (_ string, err error) {
	title := "hcsshim::GetLayerMountPath"
	ctx, span := oc.StartSpan(ctx, title)
	defer span.End()
	defer func() { oc.SetSpanStatus(span, err) }()
	span.AddAttributes(trace.StringAttribute("path", path))

	var mountPathLength uintptr = 0

	// Call the procedure itself.
	log.G(ctx).Debug("Calling proc (1)")
	err = getLayerMountPath(&stdDriverInfo, path, &mountPathLength, nil)
	if err != nil {
		return "", hcserror.New(err, title, "(first call)")
	}

	// Allocate a mount path of the returned length.
	if mountPathLength == 0 {
		return "", nil
	}
	mountPathp := make([]uint16, mountPathLength)
	mountPathp[0] = 0

	// Call the procedure again
	log.G(ctx).Debug("Calling proc (2)")
	err = getLayerMountPath(&stdDriverInfo, path, &mountPathLength, &mountPathp[0])
	if err != nil {
		return "", hcserror.New(err, title, "(second call)")
	}

	mountPath := syscall.UTF16ToString(mountPathp[0:])
	span.AddAttributes(trace.StringAttribute("mountPath", mountPath))
	return mountPath, nil
}
  070701000001B9000081A4000000000000000000000001645E367C000003C6000000000000000000000000000000000000006000000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/wclayer/getsharedbaseimages.go   //go:build windows

package wclayer

import (
	"context"

	"github.com/Microsoft/hcsshim/internal/hcserror"
	"github.com/Microsoft/hcsshim/internal/interop"
	"github.com/Microsoft/hcsshim/internal/oc"
	"go.opencensus.io/trace"
)

// GetSharedBaseImages will enumerate the images stored in the common central
// image store and return descriptive info about those images for the purpose
// of registering them with the graphdriver, graph, and tagstore.
func GetSharedBaseImages(ctx context.Context) (_ string, err error) {
	title := "hcsshim::GetSharedBaseImages"
	ctx, span := oc.StartSpan(ctx, title) //nolint:ineffassign,staticcheck
	defer span.End()
	defer func() { oc.SetSpanStatus(span, err) }()

	var buffer *uint16
	err = getBaseImages(&buffer)
	if err != nil {
		return "", hcserror.New(err, title, "")
	}
	imageData := interop.ConvertAndFreeCoTaskMemString(buffer)
	span.AddAttributes(trace.StringAttribute("imageData", imageData))
	return imageData, nil
}
  070701000001BA000081A4000000000000000000000001645E367C000002C2000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/wclayer/grantvmaccess.go //go:build windows

package wclayer

import (
	"context"

	"github.com/Microsoft/hcsshim/internal/hcserror"
	"github.com/Microsoft/hcsshim/internal/oc"
	"go.opencensus.io/trace"
)

// GrantVmAccess adds access to a file for a given VM
func GrantVmAccess(ctx context.Context, vmid string, filepath string) (err error) {
	title := "hcsshim::GrantVmAccess"
	ctx, span := oc.StartSpan(ctx, title) //nolint:ineffassign,staticcheck
	defer span.End()
	defer func() { oc.SetSpanStatus(span, err) }()
	span.AddAttributes(
		trace.StringAttribute("vm-id", vmid),
		trace.StringAttribute("path", filepath))

	err = grantVmAccess(vmid, filepath)
	if err != nil {
		return hcserror.New(err, title, "")
	}
	return nil
}
  070701000001BB000081A4000000000000000000000001645E367C0000144B000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/wclayer/importlayer.go   //go:build windows

package wclayer

import (
	"context"
	"os"
	"path/filepath"
	"strings"

	"github.com/Microsoft/go-winio"
	"github.com/Microsoft/hcsshim/internal/hcserror"
	"github.com/Microsoft/hcsshim/internal/oc"
	"github.com/Microsoft/hcsshim/internal/safefile"
	"go.opencensus.io/trace"
)

// ImportLayer will take the contents of the folder at importFolderPath and import
// that into a layer with the id layerId.  Note that in order to correctly populate
// the layer and interperet the transport format, all parent layers must already
// be present on the system at the paths provided in parentLayerPaths.
func ImportLayer(ctx context.Context, path string, importFolderPath string, parentLayerPaths []string) (err error) {
	title := "hcsshim::ImportLayer"
	ctx, span := oc.StartSpan(ctx, title)
	defer span.End()
	defer func() { oc.SetSpanStatus(span, err) }()
	span.AddAttributes(
		trace.StringAttribute("path", path),
		trace.StringAttribute("importFolderPath", importFolderPath),
		trace.StringAttribute("parentLayerPaths", strings.Join(parentLayerPaths, ", ")))

	// Generate layer descriptors
	layers, err := layerPathsToDescriptors(ctx, parentLayerPaths)
	if err != nil {
		return err
	}

	err = importLayer(&stdDriverInfo, path, importFolderPath, layers)
	if err != nil {
		return hcserror.New(err, title, "")
	}
	return nil
}

// LayerWriter is an interface that supports writing a new container image layer.
type LayerWriter interface {
	// Add adds a file to the layer with given metadata.
	Add(name string, fileInfo *winio.FileBasicInfo) error
	// AddLink adds a hard link to the layer. The target must already have been added.
	AddLink(name string, target string) error
	// Remove removes a file that was present in a parent layer from the layer.
	Remove(name string) error
	// Write writes data to the current file. The data must be in the format of a Win32
	// backup stream.
	Write(b []byte) (int, error)
	// Close finishes the layer writing process and releases any resources.
	Close() error
}

type legacyLayerWriterWrapper struct {
	ctx context.Context
	s   *trace.Span

	*legacyLayerWriter
	path             string
	parentLayerPaths []string
}

func (r *legacyLayerWriterWrapper) Close() (err error) {
	defer r.s.End()
	defer func() { oc.SetSpanStatus(r.s, err) }()
	defer os.RemoveAll(r.root.Name())
	defer r.legacyLayerWriter.CloseRoots()

	err = r.legacyLayerWriter.Close()
	if err != nil {
		return err
	}

	if err = ImportLayer(r.ctx, r.destRoot.Name(), r.path, r.parentLayerPaths); err != nil {
		return err
	}
	for _, name := range r.Tombstones {
		if err = safefile.RemoveRelative(name, r.destRoot); err != nil && !os.IsNotExist(err) {
			return err
		}
	}
	// Add any hard links that were collected.
	for _, lnk := range r.PendingLinks {
		if err = safefile.RemoveRelative(lnk.Path, r.destRoot); err != nil && !os.IsNotExist(err) {
			return err
		}
		if err = safefile.LinkRelative(lnk.Target, lnk.TargetRoot, lnk.Path, r.destRoot); err != nil {
			return err
		}
	}

	// The reapplyDirectoryTimes must be called AFTER we are done with Tombstone
	// deletion and hard link creation. This is because Tombstone deletion and hard link
	// creation updates the directory last write timestamps so that will change the
	// timestamps added by the `Add` call. Some container applications depend on the
	// correctness of these timestamps and so we should change the timestamps back to
	// the original value (i.e the value provided in the Add call) after this
	// processing is done.
	err = reapplyDirectoryTimes(r.destRoot, r.changedDi)
	if err != nil {
		return err
	}

	// Prepare the utility VM for use if one is present in the layer.
	if r.HasUtilityVM {
		err := safefile.EnsureNotReparsePointRelative("UtilityVM", r.destRoot)
		if err != nil {
			return err
		}
		err = ProcessUtilityVMImage(r.ctx, filepath.Join(r.destRoot.Name(), "UtilityVM"))
		if err != nil {
			return err
		}
	}
	return nil
}

// NewLayerWriter returns a new layer writer for creating a layer on disk.
// The caller must have taken the SeBackupPrivilege and SeRestorePrivilege privileges
// to call this and any methods on the resulting LayerWriter.
func NewLayerWriter(ctx context.Context, path string, parentLayerPaths []string) (_ LayerWriter, err error) {
	ctx, span := oc.StartSpan(ctx, "hcsshim::NewLayerWriter")
	defer func() {
		if err != nil {
			oc.SetSpanStatus(span, err)
			span.End()
		}
	}()
	span.AddAttributes(
		trace.StringAttribute("path", path),
		trace.StringAttribute("parentLayerPaths", strings.Join(parentLayerPaths, ", ")))

	if len(parentLayerPaths) == 0 {
		// This is a base layer. It gets imported differently.
		f, err := safefile.OpenRoot(path)
		if err != nil {
			return nil, err
		}
		return &baseLayerWriter{
			ctx:  ctx,
			s:    span,
			root: f,
		}, nil
	}

	importPath, err := os.MkdirTemp("", "hcs")
	if err != nil {
		return nil, err
	}
	w, err := newLegacyLayerWriter(importPath, parentLayerPaths, path)
	if err != nil {
		return nil, err
	}
	return &legacyLayerWriterWrapper{
		ctx:               ctx,
		s:                 span,
		legacyLayerWriter: w,
		path:              importPath,
		parentLayerPaths:  parentLayerPaths,
	}, nil
}
 070701000001BC000081A4000000000000000000000001645E367C0000034C000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/wclayer/layerexists.go   //go:build windows

package wclayer

import (
	"context"

	"github.com/Microsoft/hcsshim/internal/hcserror"
	"github.com/Microsoft/hcsshim/internal/oc"
	"go.opencensus.io/trace"
)

// LayerExists will return true if a layer with the given id exists and is known
// to the system.
func LayerExists(ctx context.Context, path string) (_ bool, err error) {
	title := "hcsshim::LayerExists"
	ctx, span := oc.StartSpan(ctx, title) //nolint:ineffassign,staticcheck
	defer span.End()
	defer func() { oc.SetSpanStatus(span, err) }()
	span.AddAttributes(trace.StringAttribute("path", path))

	// Call the procedure itself.
	var exists uint32
	err = layerExists(&stdDriverInfo, path, &exists)
	if err != nil {
		return false, hcserror.New(err, title, "")
	}
	span.AddAttributes(trace.BoolAttribute("layer-exists", exists != 0))
	return exists != 0, nil
}
070701000001BD000081A4000000000000000000000001645E367C0000023D000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/wclayer/layerid.go   //go:build windows

package wclayer

import (
	"context"
	"path/filepath"

	"github.com/Microsoft/go-winio/pkg/guid"
	"github.com/Microsoft/hcsshim/internal/oc"
	"go.opencensus.io/trace"
)

// LayerID returns the layer ID of a layer on disk.
func LayerID(ctx context.Context, path string) (_ guid.GUID, err error) {
	title := "hcsshim::LayerID"
	ctx, span := oc.StartSpan(ctx, title)
	defer span.End()
	defer func() { oc.SetSpanStatus(span, err) }()
	span.AddAttributes(trace.StringAttribute("path", path))

	_, file := filepath.Split(path)
	return NameToGuid(ctx, file)
}
   070701000001BE000081A4000000000000000000000001645E367C00000740000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/wclayer/layerutils.go    //go:build windows

package wclayer

// This file contains utility functions to support storage (graph) related
// functionality.

import (
	"context"
	"syscall"

	"github.com/Microsoft/go-winio/pkg/guid"
	"github.com/sirupsen/logrus"
)

/*
To pass into syscall, we need a struct matching the following:

enum GraphDriverType
{
    DiffDriver,
    FilterDriver
};

struct DriverInfo {
    GraphDriverType Flavour;
    LPCWSTR HomeDir;
};
*/

type driverInfo struct {
	Flavour  int
	HomeDirp *uint16
}

var (
	utf16EmptyString uint16
	stdDriverInfo    = driverInfo{1, &utf16EmptyString}
)

/*
To pass into syscall, we need a struct matching the following:

typedef struct _WC_LAYER_DESCRIPTOR {

	//
	// The ID of the layer
	//

	GUID LayerId;

	//
	// Additional flags
	//

	union {
	    struct {
	        ULONG Reserved : 31;
	        ULONG Dirty : 1;    // Created from sandbox as a result of snapshot
	    };
	    ULONG Value;
	} Flags;

	//
	// Path to the layer root directory, null-terminated
	//

	PCWSTR Path;

} WC_LAYER_DESCRIPTOR, *PWC_LAYER_DESCRIPTOR;
*/
type WC_LAYER_DESCRIPTOR struct {
	LayerId guid.GUID
	Flags   uint32
	Pathp   *uint16
}

func layerPathsToDescriptors(ctx context.Context, parentLayerPaths []string) ([]WC_LAYER_DESCRIPTOR, error) {
	// Array of descriptors that gets constructed.
	var layers []WC_LAYER_DESCRIPTOR

	for i := 0; i < len(parentLayerPaths); i++ {
		g, err := LayerID(ctx, parentLayerPaths[i])
		if err != nil {
			logrus.WithError(err).Debug("Failed to convert name to guid")
			return nil, err
		}

		p, err := syscall.UTF16PtrFromString(parentLayerPaths[i])
		if err != nil {
			logrus.WithError(err).Debug("Failed conversion of parentLayerPath to pointer")
			return nil, err
		}

		layers = append(layers, WC_LAYER_DESCRIPTOR{
			LayerId: g,
			Flags:   0,
			Pathp:   p,
		})
	}

	return layers, nil
}
070701000001BF000081A4000000000000000000000001645E367C00004F3B000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/wclayer/legacy.go    //go:build windows

package wclayer

import (
	"bufio"
	"encoding/binary"
	"errors"
	"fmt"
	"io"
	"os"
	"path/filepath"
	"strings"
	"syscall"

	"github.com/Microsoft/go-winio"
	"github.com/Microsoft/hcsshim/internal/longpath"
	"github.com/Microsoft/hcsshim/internal/safefile"
	"github.com/Microsoft/hcsshim/internal/winapi"
)

var errorIterationCanceled = errors.New("")

var mutatedUtilityVMFiles = map[string]bool{
	`EFI\Microsoft\Boot\BCD`:      true,
	`EFI\Microsoft\Boot\BCD.LOG`:  true,
	`EFI\Microsoft\Boot\BCD.LOG1`: true,
	`EFI\Microsoft\Boot\BCD.LOG2`: true,
}

const (
	filesPath          = `Files`
	hivesPath          = `Hives`
	utilityVMPath      = `UtilityVM`
	utilityVMFilesPath = `UtilityVM\Files`
)

func openFileOrDir(path string, mode uint32, createDisposition uint32) (file *os.File, err error) {
	return winio.OpenForBackup(path, mode, syscall.FILE_SHARE_READ, createDisposition)
}

func hasPathPrefix(p, prefix string) bool {
	return strings.HasPrefix(p, prefix) && len(p) > len(prefix) && p[len(prefix)] == '\\'
}

type fileEntry struct {
	path string
	fi   os.FileInfo
	err  error
}

type legacyLayerReader struct {
	root         string
	result       chan *fileEntry
	proceed      chan bool
	currentFile  *os.File
	backupReader *winio.BackupFileReader
}

// newLegacyLayerReader returns a new LayerReader that can read the Windows
// container layer transport format from disk.
func newLegacyLayerReader(root string) *legacyLayerReader {
	r := &legacyLayerReader{
		root:    root,
		result:  make(chan *fileEntry),
		proceed: make(chan bool),
	}
	go r.walk()
	return r
}

func readTombstones(path string) (map[string]([]string), error) {
	tf, err := os.Open(filepath.Join(path, "tombstones.txt"))
	if err != nil {
		return nil, err
	}
	defer tf.Close()
	s := bufio.NewScanner(tf)
	if !s.Scan() || s.Text() != "\xef\xbb\xbfVersion 1.0" {
		return nil, errors.New("invalid tombstones file")
	}

	ts := make(map[string]([]string))
	for s.Scan() {
		t := filepath.Join(filesPath, s.Text()[1:]) // skip leading `\`
		dir := filepath.Dir(t)
		ts[dir] = append(ts[dir], t)
	}
	if err = s.Err(); err != nil {
		return nil, err
	}

	return ts, nil
}

func (r *legacyLayerReader) walkUntilCancelled() error {
	root, err := longpath.LongAbs(r.root)
	if err != nil {
		return err
	}

	r.root = root
	ts, err := readTombstones(r.root)
	if err != nil {
		return err
	}

	err = filepath.Walk(r.root, func(path string, info os.FileInfo, err error) error {
		if err != nil {
			return err
		}

		// Indirect fix for https://github.com/moby/moby/issues/32838#issuecomment-343610048.
		// Handle failure from what may be a golang bug in the conversion of
		// UTF16 to UTF8 in files which are left in the recycle bin. Os.Lstat
		// which is called by filepath.Walk will fail when a filename contains
		// unicode characters. Skip the recycle bin regardless which is goodness.
		if strings.EqualFold(path, filepath.Join(r.root, `Files\$Recycle.Bin`)) && info.IsDir() {
			return filepath.SkipDir
		}

		if path == r.root || path == filepath.Join(r.root, "tombstones.txt") || strings.HasSuffix(path, ".$wcidirs$") {
			return nil
		}

		r.result <- &fileEntry{path, info, nil}
		if !<-r.proceed {
			return errorIterationCanceled
		}

		// List all the tombstones.
		if info.IsDir() {
			relPath, err := filepath.Rel(r.root, path)
			if err != nil {
				return err
			}
			if dts, ok := ts[relPath]; ok {
				for _, t := range dts {
					r.result <- &fileEntry{filepath.Join(r.root, t), nil, nil}
					if !<-r.proceed {
						return errorIterationCanceled
					}
				}
			}
		}
		return nil
	})
	if err == errorIterationCanceled {
		return nil
	}
	if err == nil {
		return io.EOF
	}
	return err
}

func (r *legacyLayerReader) walk() {
	defer close(r.result)
	if !<-r.proceed {
		return
	}

	err := r.walkUntilCancelled()
	if err != nil {
		for {
			r.result <- &fileEntry{err: err}
			if !<-r.proceed {
				return
			}
		}
	}
}

func (r *legacyLayerReader) reset() {
	if r.backupReader != nil {
		r.backupReader.Close()
		r.backupReader = nil
	}
	if r.currentFile != nil {
		r.currentFile.Close()
		r.currentFile = nil
	}
}

func findBackupStreamSize(r io.Reader) (int64, error) {
	br := winio.NewBackupStreamReader(r)
	for {
		hdr, err := br.Next()
		if err != nil {
			if err == io.EOF {
				err = nil
			}
			return 0, err
		}
		if hdr.Id == winio.BackupData {
			return hdr.Size, nil
		}
	}
}

func (r *legacyLayerReader) Next() (path string, size int64, fileInfo *winio.FileBasicInfo, err error) {
	r.reset()
	r.proceed <- true
	fe := <-r.result
	if fe == nil {
		err = errors.New("LegacyLayerReader closed")
		return
	}
	if fe.err != nil {
		err = fe.err
		return
	}

	path, err = filepath.Rel(r.root, fe.path)
	if err != nil {
		return
	}

	if fe.fi == nil {
		// This is a tombstone. Return a nil fileInfo.
		return
	}

	if fe.fi.IsDir() && hasPathPrefix(path, filesPath) {
		fe.path += ".$wcidirs$"
	}

	f, err := openFileOrDir(fe.path, syscall.GENERIC_READ, syscall.OPEN_EXISTING)
	if err != nil {
		return
	}
	defer func() {
		if f != nil {
			f.Close()
		}
	}()

	fileInfo, err = winio.GetFileBasicInfo(f)
	if err != nil {
		return
	}

	if !hasPathPrefix(path, filesPath) {
		size = fe.fi.Size()
		r.backupReader = winio.NewBackupFileReader(f, false)
		if path == hivesPath || path == filesPath {
			// The Hives directory has a non-deterministic file time because of the
			// nature of the import process. Use the times from System_Delta.
			var g *os.File
			g, err = os.Open(filepath.Join(r.root, hivesPath, `System_Delta`))
			if err != nil {
				return
			}
			attr := fileInfo.FileAttributes
			fileInfo, err = winio.GetFileBasicInfo(g)
			g.Close()
			if err != nil {
				return
			}
			fileInfo.FileAttributes = attr
		}

		// The creation time and access time get reset for files outside of the Files path.
		fileInfo.CreationTime = fileInfo.LastWriteTime
		fileInfo.LastAccessTime = fileInfo.LastWriteTime
	} else {
		// The file attributes are written before the backup stream.
		var attr uint32
		err = binary.Read(f, binary.LittleEndian, &attr)
		if err != nil {
			return
		}
		fileInfo.FileAttributes = attr
		beginning := int64(4)

		// Find the accurate file size.
		if !fe.fi.IsDir() {
			size, err = findBackupStreamSize(f)
			if err != nil {
				err = &os.PathError{Op: "findBackupStreamSize", Path: fe.path, Err: err}
				return
			}
		}

		// Return back to the beginning of the backup stream.
		_, err = f.Seek(beginning, 0)
		if err != nil {
			return
		}
	}

	r.currentFile = f
	f = nil
	return
}

func (r *legacyLayerReader) LinkInfo() (uint32, *winio.FileIDInfo, error) {
	fileStandardInfo, err := winio.GetFileStandardInfo(r.currentFile)
	if err != nil {
		return 0, nil, err
	}
	fileIDInfo, err := winio.GetFileID(r.currentFile)
	if err != nil {
		return 0, nil, err
	}
	return fileStandardInfo.NumberOfLinks, fileIDInfo, nil
}

func (r *legacyLayerReader) Read(b []byte) (int, error) {
	if r.backupReader == nil {
		if r.currentFile == nil {
			return 0, io.EOF
		}
		return r.currentFile.Read(b)
	}
	return r.backupReader.Read(b)
}

func (r *legacyLayerReader) Seek(offset int64, whence int) (int64, error) {
	if r.backupReader == nil {
		if r.currentFile == nil {
			return 0, errors.New("no current file")
		}
		return r.currentFile.Seek(offset, whence)
	}
	return 0, errors.New("seek not supported on this stream")
}

func (r *legacyLayerReader) Close() error {
	r.proceed <- false
	<-r.result
	r.reset()
	return nil
}

type pendingLink struct {
	Path, Target string
	TargetRoot   *os.File
}

type pendingDir struct {
	Path string
	Root *os.File
}

type legacyLayerWriter struct {
	root            *os.File
	destRoot        *os.File
	parentRoots     []*os.File
	currentFile     *os.File
	bufWriter       *bufio.Writer
	currentFileName string
	currentFileRoot *os.File
	backupWriter    *winio.BackupFileWriter
	Tombstones      []string
	HasUtilityVM    bool
	changedDi       []dirInfo
	addedFiles      map[string]bool
	PendingLinks    []pendingLink
	pendingDirs     []pendingDir
	currentIsDir    bool
}

// newLegacyLayerWriter returns a LayerWriter that can write the container layer
// transport format to disk.
func newLegacyLayerWriter(root string, parentRoots []string, destRoot string) (w *legacyLayerWriter, err error) {
	w = &legacyLayerWriter{
		addedFiles: make(map[string]bool),
	}
	defer func() {
		if err != nil {
			w.CloseRoots()
			w = nil
		}
	}()
	w.root, err = safefile.OpenRoot(root)
	if err != nil {
		return
	}
	w.destRoot, err = safefile.OpenRoot(destRoot)
	if err != nil {
		return
	}
	for _, r := range parentRoots {
		f, err := safefile.OpenRoot(r)
		if err != nil {
			return w, err
		}
		w.parentRoots = append(w.parentRoots, f)
	}
	w.bufWriter = bufio.NewWriterSize(io.Discard, 65536)
	return
}

func (w *legacyLayerWriter) CloseRoots() {
	if w.root != nil {
		w.root.Close()
		w.root = nil
	}
	if w.destRoot != nil {
		w.destRoot.Close()
		w.destRoot = nil
	}
	for i := range w.parentRoots {
		_ = w.parentRoots[i].Close()
	}
	w.parentRoots = nil
}

func (w *legacyLayerWriter) initUtilityVM() error {
	if !w.HasUtilityVM {
		err := safefile.MkdirRelative(utilityVMPath, w.destRoot)
		if err != nil {
			return err
		}
		// Server 2016 does not support multiple layers for the utility VM, so
		// clone the utility VM from the parent layer into this layer. Use hard
		// links to avoid unnecessary copying, since most of the files are
		// immutable.
		err = cloneTree(w.parentRoots[0], w.destRoot, utilityVMFilesPath, mutatedUtilityVMFiles)
		if err != nil {
			return fmt.Errorf("cloning the parent utility VM image failed: %s", err)
		}
		w.HasUtilityVM = true
	}
	return nil
}

func (w *legacyLayerWriter) reset() error {
	err := w.bufWriter.Flush()
	if err != nil {
		return err
	}
	w.bufWriter.Reset(io.Discard)
	if w.currentIsDir {
		r := w.currentFile
		br := winio.NewBackupStreamReader(r)
		// Seek to the beginning of the backup stream, skipping the fileattrs
		if _, err := r.Seek(4, io.SeekStart); err != nil {
			return err
		}

		for {
			bhdr, err := br.Next()
			if err == io.EOF {
				// end of backupstream data
				break
			}
			if err != nil {
				return err
			}
			switch bhdr.Id {
			case winio.BackupReparseData:
				// The current file is a `.$wcidirs$` metadata file that
				// describes a directory reparse point. Delete the placeholder
				// directory to prevent future files being added into the
				// destination of the reparse point during the ImportLayer call
				if err := safefile.RemoveRelative(w.currentFileName, w.currentFileRoot); err != nil {
					return err
				}
				w.pendingDirs = append(w.pendingDirs, pendingDir{Path: w.currentFileName, Root: w.currentFileRoot})
			default:
				// ignore all other stream types, as we only care about directory reparse points
			}
		}
		w.currentIsDir = false
	}
	if w.backupWriter != nil {
		w.backupWriter.Close()
		w.backupWriter = nil
	}
	if w.currentFile != nil {
		w.currentFile.Close()
		w.currentFile = nil
		w.currentFileName = ""
		w.currentFileRoot = nil
	}
	return nil
}

// copyFileWithMetadata copies a file using the backup/restore APIs in order to preserve metadata
func copyFileWithMetadata(srcRoot, destRoot *os.File, subPath string, isDir bool) (fileInfo *winio.FileBasicInfo, err error) {
	src, err := safefile.OpenRelative(
		subPath,
		srcRoot,
		syscall.GENERIC_READ|winio.ACCESS_SYSTEM_SECURITY,
		syscall.FILE_SHARE_READ,
		winapi.FILE_OPEN,
		winapi.FILE_OPEN_REPARSE_POINT)
	if err != nil {
		return nil, err
	}
	defer src.Close()
	srcr := winio.NewBackupFileReader(src, true)
	defer srcr.Close()

	fileInfo, err = winio.GetFileBasicInfo(src)
	if err != nil {
		return nil, err
	}

	extraFlags := uint32(0)
	if isDir {
		extraFlags |= winapi.FILE_DIRECTORY_FILE
	}
	dest, err := safefile.OpenRelative(
		subPath,
		destRoot,
		syscall.GENERIC_READ|syscall.GENERIC_WRITE|winio.WRITE_DAC|winio.WRITE_OWNER|winio.ACCESS_SYSTEM_SECURITY,
		syscall.FILE_SHARE_READ,
		winapi.FILE_CREATE,
		extraFlags)
	if err != nil {
		return nil, err
	}
	defer dest.Close()

	err = winio.SetFileBasicInfo(dest, fileInfo)
	if err != nil {
		return nil, err
	}

	destw := winio.NewBackupFileWriter(dest, true)
	defer func() {
		cerr := destw.Close()
		if err == nil {
			err = cerr
		}
	}()

	_, err = io.Copy(destw, srcr)
	if err != nil {
		return nil, err
	}

	return fileInfo, nil
}

// cloneTree clones a directory tree using hard links. It skips hard links for
// the file names in the provided map and just copies those files.
func cloneTree(srcRoot *os.File, destRoot *os.File, subPath string, mutatedFiles map[string]bool) error {
	var di []dirInfo
	err := safefile.EnsureNotReparsePointRelative(subPath, srcRoot)
	if err != nil {
		return err
	}
	err = filepath.Walk(filepath.Join(srcRoot.Name(), subPath), func(srcFilePath string, info os.FileInfo, err error) error {
		if err != nil {
			return err
		}

		relPath, err := filepath.Rel(srcRoot.Name(), srcFilePath)
		if err != nil {
			return err
		}

		fileAttributes := info.Sys().(*syscall.Win32FileAttributeData).FileAttributes
		// Directories, reparse points, and files that will be mutated during
		// utility VM import must be copied. All other files can be hard linked.
		isReparsePoint := fileAttributes&syscall.FILE_ATTRIBUTE_REPARSE_POINT != 0
		// In go1.9, FileInfo.IsDir() returns false if the directory is also a symlink.
		// See: https://github.com/golang/go/commit/1989921aef60c83e6f9127a8448fb5ede10e9acc
		// Fixes the problem by checking syscall.FILE_ATTRIBUTE_DIRECTORY directly
		isDir := fileAttributes&syscall.FILE_ATTRIBUTE_DIRECTORY != 0

		if isDir || isReparsePoint || mutatedFiles[relPath] {
			fi, err := copyFileWithMetadata(srcRoot, destRoot, relPath, isDir)
			if err != nil {
				return err
			}
			if isDir {
				di = append(di, dirInfo{path: relPath, fileInfo: *fi})
			}
		} else {
			err = safefile.LinkRelative(relPath, srcRoot, relPath, destRoot)
			if err != nil {
				return err
			}
		}

		return nil
	})
	if err != nil {
		return err
	}

	return reapplyDirectoryTimes(destRoot, di)
}

func (w *legacyLayerWriter) Add(name string, fileInfo *winio.FileBasicInfo) error {
	if err := w.reset(); err != nil {
		return err
	}

	if name == utilityVMPath {
		return w.initUtilityVM()
	}

	if (fileInfo.FileAttributes & syscall.FILE_ATTRIBUTE_DIRECTORY) != 0 {
		w.changedDi = append(w.changedDi, dirInfo{path: name, fileInfo: *fileInfo})
	}

	name = filepath.Clean(name)
	if hasPathPrefix(name, utilityVMPath) {
		if !w.HasUtilityVM {
			return errors.New("missing UtilityVM directory")
		}
		if !hasPathPrefix(name, utilityVMFilesPath) && name != utilityVMFilesPath {
			return errors.New("invalid UtilityVM layer")
		}
		createDisposition := uint32(winapi.FILE_OPEN)
		if (fileInfo.FileAttributes & syscall.FILE_ATTRIBUTE_DIRECTORY) != 0 {
			st, err := safefile.LstatRelative(name, w.destRoot)
			if err != nil && !os.IsNotExist(err) {
				return err
			}
			if st != nil {
				// Delete the existing file/directory if it is not the same type as this directory.
				existingAttr := st.Sys().(*syscall.Win32FileAttributeData).FileAttributes
				if (uint32(fileInfo.FileAttributes)^existingAttr)&(syscall.FILE_ATTRIBUTE_DIRECTORY|syscall.FILE_ATTRIBUTE_REPARSE_POINT) != 0 {
					if err = safefile.RemoveAllRelative(name, w.destRoot); err != nil {
						return err
					}
					st = nil
				}
			}
			if st == nil {
				if err = safefile.MkdirRelative(name, w.destRoot); err != nil {
					return err
				}
			}
		} else {
			// Overwrite any existing hard link.
			err := safefile.RemoveRelative(name, w.destRoot)
			if err != nil && !os.IsNotExist(err) {
				return err
			}
			createDisposition = winapi.FILE_CREATE
		}

		f, err := safefile.OpenRelative(
			name,
			w.destRoot,
			syscall.GENERIC_READ|syscall.GENERIC_WRITE|winio.WRITE_DAC|winio.WRITE_OWNER|winio.ACCESS_SYSTEM_SECURITY,
			syscall.FILE_SHARE_READ,
			createDisposition,
			winapi.FILE_OPEN_REPARSE_POINT,
		)
		if err != nil {
			return err
		}
		defer func() {
			if f != nil {
				f.Close()
				_ = safefile.RemoveRelative(name, w.destRoot)
			}
		}()

		err = winio.SetFileBasicInfo(f, fileInfo)
		if err != nil {
			return err
		}

		w.backupWriter = winio.NewBackupFileWriter(f, true)
		w.bufWriter.Reset(w.backupWriter)
		w.currentFile = f
		w.currentFileName = name
		w.currentFileRoot = w.destRoot
		w.addedFiles[name] = true
		f = nil
		return nil
	}

	fname := name
	if (fileInfo.FileAttributes & syscall.FILE_ATTRIBUTE_DIRECTORY) != 0 {
		err := safefile.MkdirRelative(name, w.root)
		if err != nil {
			return err
		}
		fname += ".$wcidirs$"
		w.currentIsDir = true
	}

	f, err := safefile.OpenRelative(fname, w.root, syscall.GENERIC_READ|syscall.GENERIC_WRITE, syscall.FILE_SHARE_READ, winapi.FILE_CREATE, 0)
	if err != nil {
		return err
	}
	defer func() {
		if f != nil {
			f.Close()
			_ = safefile.RemoveRelative(fname, w.root)
		}
	}()

	strippedFi := *fileInfo
	strippedFi.FileAttributes = 0
	err = winio.SetFileBasicInfo(f, &strippedFi)
	if err != nil {
		return err
	}

	if hasPathPrefix(name, hivesPath) {
		w.backupWriter = winio.NewBackupFileWriter(f, false)
		w.bufWriter.Reset(w.backupWriter)
	} else {
		w.bufWriter.Reset(f)
		// The file attributes are written before the stream.
		err = binary.Write(w.bufWriter, binary.LittleEndian, uint32(fileInfo.FileAttributes))
		if err != nil {
			w.bufWriter.Reset(io.Discard)
			return err
		}
	}

	w.currentFile = f
	w.currentFileName = name
	w.currentFileRoot = w.root
	w.addedFiles[name] = true
	f = nil
	return nil
}

func (w *legacyLayerWriter) AddLink(name string, target string) error {
	if err := w.reset(); err != nil {
		return err
	}

	target = filepath.Clean(target)
	var roots []*os.File
	if hasPathPrefix(target, filesPath) {
		// Look for cross-layer hard link targets in the parent layers, since
		// nothing is in the destination path yet.
		roots = w.parentRoots
	} else if hasPathPrefix(target, utilityVMFilesPath) {
		// Since the utility VM is fully cloned into the destination path
		// already, look for cross-layer hard link targets directly in the
		// destination path.
		roots = []*os.File{w.destRoot}
	}

	if roots == nil || (!hasPathPrefix(name, filesPath) && !hasPathPrefix(name, utilityVMFilesPath)) {
		return errors.New("invalid hard link in layer")
	}

	// Try to find the target of the link in a previously added file. If that
	// fails, search in parent layers.
	var selectedRoot *os.File
	if _, ok := w.addedFiles[target]; ok {
		selectedRoot = w.destRoot
	} else {
		for _, r := range roots {
			if _, err := safefile.LstatRelative(target, r); err != nil {
				if !os.IsNotExist(err) {
					return err
				}
			} else {
				selectedRoot = r
				break
			}
		}
		if selectedRoot == nil {
			return fmt.Errorf("failed to find link target for '%s' -> '%s'", name, target)
		}
	}

	// The link can't be written until after the ImportLayer call.
	w.PendingLinks = append(w.PendingLinks, pendingLink{
		Path:       name,
		Target:     target,
		TargetRoot: selectedRoot,
	})
	w.addedFiles[name] = true
	return nil
}

func (w *legacyLayerWriter) Remove(name string) error {
	name = filepath.Clean(name)
	if hasPathPrefix(name, filesPath) {
		w.Tombstones = append(w.Tombstones, name)
	} else if hasPathPrefix(name, utilityVMFilesPath) {
		err := w.initUtilityVM()
		if err != nil {
			return err
		}
		// Make sure the path exists; os.RemoveAll will not fail if the file is
		// already gone, and this needs to be a fatal error for diagnostics
		// purposes.
		if _, err := safefile.LstatRelative(name, w.destRoot); err != nil {
			return err
		}
		err = safefile.RemoveAllRelative(name, w.destRoot)
		if err != nil {
			return err
		}
	} else {
		return fmt.Errorf("invalid tombstone %s", name)
	}

	return nil
}

func (w *legacyLayerWriter) Write(b []byte) (int, error) {
	if w.backupWriter == nil && w.currentFile == nil {
		return 0, errors.New("closed")
	}
	return w.bufWriter.Write(b)
}

func (w *legacyLayerWriter) Close() error {
	if err := w.reset(); err != nil {
		return err
	}
	if err := safefile.RemoveRelative("tombstones.txt", w.root); err != nil && !os.IsNotExist(err) {
		return err
	}
	for _, pd := range w.pendingDirs {
		err := safefile.MkdirRelative(pd.Path, pd.Root)
		if err != nil {
			return err
		}
	}
	return nil
}
 070701000001C0000081A4000000000000000000000001645E367C00000396000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/wclayer/nametoguid.go    //go:build windows

package wclayer

import (
	"context"

	"github.com/Microsoft/go-winio/pkg/guid"
	"github.com/Microsoft/hcsshim/internal/hcserror"
	"github.com/Microsoft/hcsshim/internal/oc"
	"go.opencensus.io/trace"
)

// NameToGuid converts the given string into a GUID using the algorithm in the
// Host Compute Service, ensuring GUIDs generated with the same string are common
// across all clients.
func NameToGuid(ctx context.Context, name string) (_ guid.GUID, err error) {
	title := "hcsshim::NameToGuid"
	ctx, span := oc.StartSpan(ctx, title) //nolint:ineffassign,staticcheck
	defer span.End()
	defer func() { oc.SetSpanStatus(span, err) }()
	span.AddAttributes(trace.StringAttribute("objectName", name))

	var id guid.GUID
	err = nameToGuid(name, &id)
	if err != nil {
		return guid.GUID{}, hcserror.New(err, title, "")
	}
	span.AddAttributes(trace.StringAttribute("guid", id.String()))
	return id, nil
}
  070701000001C1000081A4000000000000000000000001645E367C000005A7000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/wclayer/preparelayer.go  //go:build windows

package wclayer

import (
	"context"
	"strings"
	"sync"

	"github.com/Microsoft/hcsshim/internal/hcserror"
	"github.com/Microsoft/hcsshim/internal/oc"
	"go.opencensus.io/trace"
)

var prepareLayerLock sync.Mutex

// PrepareLayer finds a mounted read-write layer matching path and enables the
// the filesystem filter for use on that layer.  This requires the paths to all
// parent layers, and is necessary in order to view or interact with the layer
// as an actual filesystem (reading and writing files, creating directories, etc).
// Disabling the filter must be done via UnprepareLayer.
func PrepareLayer(ctx context.Context, path string, parentLayerPaths []string) (err error) {
	title := "hcsshim::PrepareLayer"
	ctx, span := oc.StartSpan(ctx, title)
	defer span.End()
	defer func() { oc.SetSpanStatus(span, err) }()
	span.AddAttributes(
		trace.StringAttribute("path", path),
		trace.StringAttribute("parentLayerPaths", strings.Join(parentLayerPaths, ", ")))

	// Generate layer descriptors
	layers, err := layerPathsToDescriptors(ctx, parentLayerPaths)
	if err != nil {
		return err
	}

	// This lock is a temporary workaround for a Windows bug. Only allowing one
	// call to prepareLayer at a time vastly reduces the chance of a timeout.
	prepareLayerLock.Lock()
	defer prepareLayerLock.Unlock()
	err = prepareLayer(&stdDriverInfo, path, layers)
	if err != nil {
		return hcserror.New(err, title, "")
	}
	return nil
}
 070701000001C2000081A4000000000000000000000001645E367C00000508000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/wclayer/processimage.go  //go:build windows

package wclayer

import (
	"context"
	"os"

	"github.com/Microsoft/hcsshim/internal/oc"
	"go.opencensus.io/trace"
)

// ProcessBaseLayer post-processes a base layer that has had its files extracted.
// The files should have been extracted to <path>\Files.
func ProcessBaseLayer(ctx context.Context, path string) (err error) {
	title := "hcsshim::ProcessBaseLayer"
	ctx, span := oc.StartSpan(ctx, title) //nolint:ineffassign,staticcheck
	defer span.End()
	defer func() { oc.SetSpanStatus(span, err) }()
	span.AddAttributes(trace.StringAttribute("path", path))

	err = processBaseImage(path)
	if err != nil {
		return &os.PathError{Op: title, Path: path, Err: err}
	}
	return nil
}

// ProcessUtilityVMImage post-processes a utility VM image that has had its files extracted.
// The files should have been extracted to <path>\Files.
func ProcessUtilityVMImage(ctx context.Context, path string) (err error) {
	title := "hcsshim::ProcessUtilityVMImage"
	ctx, span := oc.StartSpan(ctx, title) //nolint:ineffassign,staticcheck
	defer span.End()
	defer func() { oc.SetSpanStatus(span, err) }()
	span.AddAttributes(trace.StringAttribute("path", path))

	err = processUtilityImage(path)
	if err != nil {
		return &os.PathError{Op: title, Path: path, Err: err}
	}
	return nil
}
070701000001C3000081A4000000000000000000000001645E367C000002B5000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/wclayer/unpreparelayer.go    //go:build windows

package wclayer

import (
	"context"

	"github.com/Microsoft/hcsshim/internal/hcserror"
	"github.com/Microsoft/hcsshim/internal/oc"
	"go.opencensus.io/trace"
)

// UnprepareLayer disables the filesystem filter for the read-write layer with
// the given id.
func UnprepareLayer(ctx context.Context, path string) (err error) {
	title := "hcsshim::UnprepareLayer"
	ctx, span := oc.StartSpan(ctx, title) //nolint:ineffassign,staticcheck
	defer span.End()
	defer func() { oc.SetSpanStatus(span, err) }()
	span.AddAttributes(trace.StringAttribute("path", path))

	err = unprepareLayer(&stdDriverInfo, path)
	if err != nil {
		return hcserror.New(err, title, "")
	}
	return nil
}
   070701000001C4000081A4000000000000000000000001645E367C00000A71000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/wclayer/wclayer.go   //go:build windows

package wclayer

import "github.com/Microsoft/go-winio/pkg/guid"

//go:generate go run github.com/Microsoft/go-winio/tools/mkwinsyscall -output zsyscall_windows.go wclayer.go

//sys activateLayer(info *driverInfo, id string) (hr error) = vmcompute.ActivateLayer?
//sys copyLayer(info *driverInfo, srcId string, dstId string, descriptors []WC_LAYER_DESCRIPTOR) (hr error) = vmcompute.CopyLayer?
//sys createLayer(info *driverInfo, id string, parent string) (hr error) = vmcompute.CreateLayer?
//sys createSandboxLayer(info *driverInfo, id string, parent uintptr, descriptors []WC_LAYER_DESCRIPTOR) (hr error) = vmcompute.CreateSandboxLayer?
//sys expandSandboxSize(info *driverInfo, id string, size uint64) (hr error) = vmcompute.ExpandSandboxSize?
//sys deactivateLayer(info *driverInfo, id string) (hr error) = vmcompute.DeactivateLayer?
//sys destroyLayer(info *driverInfo, id string) (hr error) = vmcompute.DestroyLayer?
//sys exportLayer(info *driverInfo, id string, path string, descriptors []WC_LAYER_DESCRIPTOR) (hr error) = vmcompute.ExportLayer?
//sys getLayerMountPath(info *driverInfo, id string, length *uintptr, buffer *uint16) (hr error) = vmcompute.GetLayerMountPath?
//sys getBaseImages(buffer **uint16) (hr error) = vmcompute.GetBaseImages?
//sys importLayer(info *driverInfo, id string, path string, descriptors []WC_LAYER_DESCRIPTOR) (hr error) = vmcompute.ImportLayer?
//sys layerExists(info *driverInfo, id string, exists *uint32) (hr error) = vmcompute.LayerExists?
//sys nameToGuid(name string, guid *_guid) (hr error) = vmcompute.NameToGuid?
//sys prepareLayer(info *driverInfo, id string, descriptors []WC_LAYER_DESCRIPTOR) (hr error) = vmcompute.PrepareLayer?
//sys unprepareLayer(info *driverInfo, id string) (hr error) = vmcompute.UnprepareLayer?
//sys processBaseImage(path string) (hr error) = vmcompute.ProcessBaseImage?
//sys processUtilityImage(path string) (hr error) = vmcompute.ProcessUtilityImage?

//sys grantVmAccess(vmid string, filepath string) (hr error) = vmcompute.GrantVmAccess?

//sys openVirtualDisk(virtualStorageType *virtualStorageType, path string, virtualDiskAccessMask uint32, flags uint32, parameters *openVirtualDiskParameters, handle *syscall.Handle) (err error) [failretval != 0] = virtdisk.OpenVirtualDisk
//sys attachVirtualDisk(handle syscall.Handle, sd uintptr, flags uint32, providerFlags uint32, params uintptr, overlapped uintptr) (err error) [failretval != 0] = virtdisk.AttachVirtualDisk

//sys getDiskFreeSpaceEx(directoryName string, freeBytesAvailableToCaller *int64, totalNumberOfBytes *int64, totalNumberOfFreeBytes *int64) (err error) = GetDiskFreeSpaceExW

type _guid = guid.GUID
   070701000001C5000081A4000000000000000000000001645E367C00003EE8000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/wclayer/zsyscall_windows.go  //go:build windows

// Code generated by 'go generate' using "github.com/Microsoft/go-winio/tools/mkwinsyscall"; DO NOT EDIT.

package wclayer

import (
	"syscall"
	"unsafe"

	"golang.org/x/sys/windows"
)

var _ unsafe.Pointer

// Do the interface allocations only once for common
// Errno values.
const (
	errnoERROR_IO_PENDING = 997
)

var (
	errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING)
	errERROR_EINVAL     error = syscall.EINVAL
)

// errnoErr returns common boxed Errno values, to prevent
// allocations at runtime.
func errnoErr(e syscall.Errno) error {
	switch e {
	case 0:
		return errERROR_EINVAL
	case errnoERROR_IO_PENDING:
		return errERROR_IO_PENDING
	}
	// TODO: add more here, after collecting data on the common
	// error values see on Windows. (perhaps when running
	// all.bat?)
	return e
}

var (
	modkernel32  = windows.NewLazySystemDLL("kernel32.dll")
	modvirtdisk  = windows.NewLazySystemDLL("virtdisk.dll")
	modvmcompute = windows.NewLazySystemDLL("vmcompute.dll")

	procGetDiskFreeSpaceExW = modkernel32.NewProc("GetDiskFreeSpaceExW")
	procAttachVirtualDisk   = modvirtdisk.NewProc("AttachVirtualDisk")
	procOpenVirtualDisk     = modvirtdisk.NewProc("OpenVirtualDisk")
	procActivateLayer       = modvmcompute.NewProc("ActivateLayer")
	procCopyLayer           = modvmcompute.NewProc("CopyLayer")
	procCreateLayer         = modvmcompute.NewProc("CreateLayer")
	procCreateSandboxLayer  = modvmcompute.NewProc("CreateSandboxLayer")
	procDeactivateLayer     = modvmcompute.NewProc("DeactivateLayer")
	procDestroyLayer        = modvmcompute.NewProc("DestroyLayer")
	procExpandSandboxSize   = modvmcompute.NewProc("ExpandSandboxSize")
	procExportLayer         = modvmcompute.NewProc("ExportLayer")
	procGetBaseImages       = modvmcompute.NewProc("GetBaseImages")
	procGetLayerMountPath   = modvmcompute.NewProc("GetLayerMountPath")
	procGrantVmAccess       = modvmcompute.NewProc("GrantVmAccess")
	procImportLayer         = modvmcompute.NewProc("ImportLayer")
	procLayerExists         = modvmcompute.NewProc("LayerExists")
	procNameToGuid          = modvmcompute.NewProc("NameToGuid")
	procPrepareLayer        = modvmcompute.NewProc("PrepareLayer")
	procProcessBaseImage    = modvmcompute.NewProc("ProcessBaseImage")
	procProcessUtilityImage = modvmcompute.NewProc("ProcessUtilityImage")
	procUnprepareLayer      = modvmcompute.NewProc("UnprepareLayer")
)

func getDiskFreeSpaceEx(directoryName string, freeBytesAvailableToCaller *int64, totalNumberOfBytes *int64, totalNumberOfFreeBytes *int64) (err error) {
	var _p0 *uint16
	_p0, err = syscall.UTF16PtrFromString(directoryName)
	if err != nil {
		return
	}
	return _getDiskFreeSpaceEx(_p0, freeBytesAvailableToCaller, totalNumberOfBytes, totalNumberOfFreeBytes)
}

func _getDiskFreeSpaceEx(directoryName *uint16, freeBytesAvailableToCaller *int64, totalNumberOfBytes *int64, totalNumberOfFreeBytes *int64) (err error) {
	r1, _, e1 := syscall.Syscall6(procGetDiskFreeSpaceExW.Addr(), 4, uintptr(unsafe.Pointer(directoryName)), uintptr(unsafe.Pointer(freeBytesAvailableToCaller)), uintptr(unsafe.Pointer(totalNumberOfBytes)), uintptr(unsafe.Pointer(totalNumberOfFreeBytes)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func attachVirtualDisk(handle syscall.Handle, sd uintptr, flags uint32, providerFlags uint32, params uintptr, overlapped uintptr) (err error) {
	r1, _, e1 := syscall.Syscall6(procAttachVirtualDisk.Addr(), 6, uintptr(handle), uintptr(sd), uintptr(flags), uintptr(providerFlags), uintptr(params), uintptr(overlapped))
	if r1 != 0 {
		err = errnoErr(e1)
	}
	return
}

func openVirtualDisk(virtualStorageType *virtualStorageType, path string, virtualDiskAccessMask uint32, flags uint32, parameters *openVirtualDiskParameters, handle *syscall.Handle) (err error) {
	var _p0 *uint16
	_p0, err = syscall.UTF16PtrFromString(path)
	if err != nil {
		return
	}
	return _openVirtualDisk(virtualStorageType, _p0, virtualDiskAccessMask, flags, parameters, handle)
}

func _openVirtualDisk(virtualStorageType *virtualStorageType, path *uint16, virtualDiskAccessMask uint32, flags uint32, parameters *openVirtualDiskParameters, handle *syscall.Handle) (err error) {
	r1, _, e1 := syscall.Syscall6(procOpenVirtualDisk.Addr(), 6, uintptr(unsafe.Pointer(virtualStorageType)), uintptr(unsafe.Pointer(path)), uintptr(virtualDiskAccessMask), uintptr(flags), uintptr(unsafe.Pointer(parameters)), uintptr(unsafe.Pointer(handle)))
	if r1 != 0 {
		err = errnoErr(e1)
	}
	return
}

func activateLayer(info *driverInfo, id string) (hr error) {
	var _p0 *uint16
	_p0, hr = syscall.UTF16PtrFromString(id)
	if hr != nil {
		return
	}
	return _activateLayer(info, _p0)
}

func _activateLayer(info *driverInfo, id *uint16) (hr error) {
	hr = procActivateLayer.Find()
	if hr != nil {
		return
	}
	r0, _, _ := syscall.Syscall(procActivateLayer.Addr(), 2, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), 0)
	if int32(r0) < 0 {
		if r0&0x1fff0000 == 0x00070000 {
			r0 &= 0xffff
		}
		hr = syscall.Errno(r0)
	}
	return
}

func copyLayer(info *driverInfo, srcId string, dstId string, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
	var _p0 *uint16
	_p0, hr = syscall.UTF16PtrFromString(srcId)
	if hr != nil {
		return
	}
	var _p1 *uint16
	_p1, hr = syscall.UTF16PtrFromString(dstId)
	if hr != nil {
		return
	}
	return _copyLayer(info, _p0, _p1, descriptors)
}

func _copyLayer(info *driverInfo, srcId *uint16, dstId *uint16, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
	hr = procCopyLayer.Find()
	if hr != nil {
		return
	}
	var _p2 *WC_LAYER_DESCRIPTOR
	if len(descriptors) > 0 {
		_p2 = &descriptors[0]
	}
	r0, _, _ := syscall.Syscall6(procCopyLayer.Addr(), 5, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(srcId)), uintptr(unsafe.Pointer(dstId)), uintptr(unsafe.Pointer(_p2)), uintptr(len(descriptors)), 0)
	if int32(r0) < 0 {
		if r0&0x1fff0000 == 0x00070000 {
			r0 &= 0xffff
		}
		hr = syscall.Errno(r0)
	}
	return
}

func createLayer(info *driverInfo, id string, parent string) (hr error) {
	var _p0 *uint16
	_p0, hr = syscall.UTF16PtrFromString(id)
	if hr != nil {
		return
	}
	var _p1 *uint16
	_p1, hr = syscall.UTF16PtrFromString(parent)
	if hr != nil {
		return
	}
	return _createLayer(info, _p0, _p1)
}

func _createLayer(info *driverInfo, id *uint16, parent *uint16) (hr error) {
	hr = procCreateLayer.Find()
	if hr != nil {
		return
	}
	r0, _, _ := syscall.Syscall(procCreateLayer.Addr(), 3, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(parent)))
	if int32(r0) < 0 {
		if r0&0x1fff0000 == 0x00070000 {
			r0 &= 0xffff
		}
		hr = syscall.Errno(r0)
	}
	return
}

func createSandboxLayer(info *driverInfo, id string, parent uintptr, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
	var _p0 *uint16
	_p0, hr = syscall.UTF16PtrFromString(id)
	if hr != nil {
		return
	}
	return _createSandboxLayer(info, _p0, parent, descriptors)
}

func _createSandboxLayer(info *driverInfo, id *uint16, parent uintptr, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
	hr = procCreateSandboxLayer.Find()
	if hr != nil {
		return
	}
	var _p1 *WC_LAYER_DESCRIPTOR
	if len(descriptors) > 0 {
		_p1 = &descriptors[0]
	}
	r0, _, _ := syscall.Syscall6(procCreateSandboxLayer.Addr(), 5, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(parent), uintptr(unsafe.Pointer(_p1)), uintptr(len(descriptors)), 0)
	if int32(r0) < 0 {
		if r0&0x1fff0000 == 0x00070000 {
			r0 &= 0xffff
		}
		hr = syscall.Errno(r0)
	}
	return
}

func deactivateLayer(info *driverInfo, id string) (hr error) {
	var _p0 *uint16
	_p0, hr = syscall.UTF16PtrFromString(id)
	if hr != nil {
		return
	}
	return _deactivateLayer(info, _p0)
}

func _deactivateLayer(info *driverInfo, id *uint16) (hr error) {
	hr = procDeactivateLayer.Find()
	if hr != nil {
		return
	}
	r0, _, _ := syscall.Syscall(procDeactivateLayer.Addr(), 2, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), 0)
	if int32(r0) < 0 {
		if r0&0x1fff0000 == 0x00070000 {
			r0 &= 0xffff
		}
		hr = syscall.Errno(r0)
	}
	return
}

func destroyLayer(info *driverInfo, id string) (hr error) {
	var _p0 *uint16
	_p0, hr = syscall.UTF16PtrFromString(id)
	if hr != nil {
		return
	}
	return _destroyLayer(info, _p0)
}

func _destroyLayer(info *driverInfo, id *uint16) (hr error) {
	hr = procDestroyLayer.Find()
	if hr != nil {
		return
	}
	r0, _, _ := syscall.Syscall(procDestroyLayer.Addr(), 2, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), 0)
	if int32(r0) < 0 {
		if r0&0x1fff0000 == 0x00070000 {
			r0 &= 0xffff
		}
		hr = syscall.Errno(r0)
	}
	return
}

func expandSandboxSize(info *driverInfo, id string, size uint64) (hr error) {
	var _p0 *uint16
	_p0, hr = syscall.UTF16PtrFromString(id)
	if hr != nil {
		return
	}
	return _expandSandboxSize(info, _p0, size)
}

func _expandSandboxSize(info *driverInfo, id *uint16, size uint64) (hr error) {
	hr = procExpandSandboxSize.Find()
	if hr != nil {
		return
	}
	r0, _, _ := syscall.Syscall(procExpandSandboxSize.Addr(), 3, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(size))
	if int32(r0) < 0 {
		if r0&0x1fff0000 == 0x00070000 {
			r0 &= 0xffff
		}
		hr = syscall.Errno(r0)
	}
	return
}

func exportLayer(info *driverInfo, id string, path string, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
	var _p0 *uint16
	_p0, hr = syscall.UTF16PtrFromString(id)
	if hr != nil {
		return
	}
	var _p1 *uint16
	_p1, hr = syscall.UTF16PtrFromString(path)
	if hr != nil {
		return
	}
	return _exportLayer(info, _p0, _p1, descriptors)
}

func _exportLayer(info *driverInfo, id *uint16, path *uint16, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
	hr = procExportLayer.Find()
	if hr != nil {
		return
	}
	var _p2 *WC_LAYER_DESCRIPTOR
	if len(descriptors) > 0 {
		_p2 = &descriptors[0]
	}
	r0, _, _ := syscall.Syscall6(procExportLayer.Addr(), 5, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(_p2)), uintptr(len(descriptors)), 0)
	if int32(r0) < 0 {
		if r0&0x1fff0000 == 0x00070000 {
			r0 &= 0xffff
		}
		hr = syscall.Errno(r0)
	}
	return
}

func getBaseImages(buffer **uint16) (hr error) {
	hr = procGetBaseImages.Find()
	if hr != nil {
		return
	}
	r0, _, _ := syscall.Syscall(procGetBaseImages.Addr(), 1, uintptr(unsafe.Pointer(buffer)), 0, 0)
	if int32(r0) < 0 {
		if r0&0x1fff0000 == 0x00070000 {
			r0 &= 0xffff
		}
		hr = syscall.Errno(r0)
	}
	return
}

func getLayerMountPath(info *driverInfo, id string, length *uintptr, buffer *uint16) (hr error) {
	var _p0 *uint16
	_p0, hr = syscall.UTF16PtrFromString(id)
	if hr != nil {
		return
	}
	return _getLayerMountPath(info, _p0, length, buffer)
}

func _getLayerMountPath(info *driverInfo, id *uint16, length *uintptr, buffer *uint16) (hr error) {
	hr = procGetLayerMountPath.Find()
	if hr != nil {
		return
	}
	r0, _, _ := syscall.Syscall6(procGetLayerMountPath.Addr(), 4, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(length)), uintptr(unsafe.Pointer(buffer)), 0, 0)
	if int32(r0) < 0 {
		if r0&0x1fff0000 == 0x00070000 {
			r0 &= 0xffff
		}
		hr = syscall.Errno(r0)
	}
	return
}

func grantVmAccess(vmid string, filepath string) (hr error) {
	var _p0 *uint16
	_p0, hr = syscall.UTF16PtrFromString(vmid)
	if hr != nil {
		return
	}
	var _p1 *uint16
	_p1, hr = syscall.UTF16PtrFromString(filepath)
	if hr != nil {
		return
	}
	return _grantVmAccess(_p0, _p1)
}

func _grantVmAccess(vmid *uint16, filepath *uint16) (hr error) {
	hr = procGrantVmAccess.Find()
	if hr != nil {
		return
	}
	r0, _, _ := syscall.Syscall(procGrantVmAccess.Addr(), 2, uintptr(unsafe.Pointer(vmid)), uintptr(unsafe.Pointer(filepath)), 0)
	if int32(r0) < 0 {
		if r0&0x1fff0000 == 0x00070000 {
			r0 &= 0xffff
		}
		hr = syscall.Errno(r0)
	}
	return
}

func importLayer(info *driverInfo, id string, path string, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
	var _p0 *uint16
	_p0, hr = syscall.UTF16PtrFromString(id)
	if hr != nil {
		return
	}
	var _p1 *uint16
	_p1, hr = syscall.UTF16PtrFromString(path)
	if hr != nil {
		return
	}
	return _importLayer(info, _p0, _p1, descriptors)
}

func _importLayer(info *driverInfo, id *uint16, path *uint16, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
	hr = procImportLayer.Find()
	if hr != nil {
		return
	}
	var _p2 *WC_LAYER_DESCRIPTOR
	if len(descriptors) > 0 {
		_p2 = &descriptors[0]
	}
	r0, _, _ := syscall.Syscall6(procImportLayer.Addr(), 5, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(_p2)), uintptr(len(descriptors)), 0)
	if int32(r0) < 0 {
		if r0&0x1fff0000 == 0x00070000 {
			r0 &= 0xffff
		}
		hr = syscall.Errno(r0)
	}
	return
}

func layerExists(info *driverInfo, id string, exists *uint32) (hr error) {
	var _p0 *uint16
	_p0, hr = syscall.UTF16PtrFromString(id)
	if hr != nil {
		return
	}
	return _layerExists(info, _p0, exists)
}

func _layerExists(info *driverInfo, id *uint16, exists *uint32) (hr error) {
	hr = procLayerExists.Find()
	if hr != nil {
		return
	}
	r0, _, _ := syscall.Syscall(procLayerExists.Addr(), 3, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(exists)))
	if int32(r0) < 0 {
		if r0&0x1fff0000 == 0x00070000 {
			r0 &= 0xffff
		}
		hr = syscall.Errno(r0)
	}
	return
}

func nameToGuid(name string, guid *_guid) (hr error) {
	var _p0 *uint16
	_p0, hr = syscall.UTF16PtrFromString(name)
	if hr != nil {
		return
	}
	return _nameToGuid(_p0, guid)
}

func _nameToGuid(name *uint16, guid *_guid) (hr error) {
	hr = procNameToGuid.Find()
	if hr != nil {
		return
	}
	r0, _, _ := syscall.Syscall(procNameToGuid.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(guid)), 0)
	if int32(r0) < 0 {
		if r0&0x1fff0000 == 0x00070000 {
			r0 &= 0xffff
		}
		hr = syscall.Errno(r0)
	}
	return
}

func prepareLayer(info *driverInfo, id string, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
	var _p0 *uint16
	_p0, hr = syscall.UTF16PtrFromString(id)
	if hr != nil {
		return
	}
	return _prepareLayer(info, _p0, descriptors)
}

func _prepareLayer(info *driverInfo, id *uint16, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
	hr = procPrepareLayer.Find()
	if hr != nil {
		return
	}
	var _p1 *WC_LAYER_DESCRIPTOR
	if len(descriptors) > 0 {
		_p1 = &descriptors[0]
	}
	r0, _, _ := syscall.Syscall6(procPrepareLayer.Addr(), 4, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(_p1)), uintptr(len(descriptors)), 0, 0)
	if int32(r0) < 0 {
		if r0&0x1fff0000 == 0x00070000 {
			r0 &= 0xffff
		}
		hr = syscall.Errno(r0)
	}
	return
}

func processBaseImage(path string) (hr error) {
	var _p0 *uint16
	_p0, hr = syscall.UTF16PtrFromString(path)
	if hr != nil {
		return
	}
	return _processBaseImage(_p0)
}

func _processBaseImage(path *uint16) (hr error) {
	hr = procProcessBaseImage.Find()
	if hr != nil {
		return
	}
	r0, _, _ := syscall.Syscall(procProcessBaseImage.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0)
	if int32(r0) < 0 {
		if r0&0x1fff0000 == 0x00070000 {
			r0 &= 0xffff
		}
		hr = syscall.Errno(r0)
	}
	return
}

func processUtilityImage(path string) (hr error) {
	var _p0 *uint16
	_p0, hr = syscall.UTF16PtrFromString(path)
	if hr != nil {
		return
	}
	return _processUtilityImage(_p0)
}

func _processUtilityImage(path *uint16) (hr error) {
	hr = procProcessUtilityImage.Find()
	if hr != nil {
		return
	}
	r0, _, _ := syscall.Syscall(procProcessUtilityImage.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0)
	if int32(r0) < 0 {
		if r0&0x1fff0000 == 0x00070000 {
			r0 &= 0xffff
		}
		hr = syscall.Errno(r0)
	}
	return
}

func unprepareLayer(info *driverInfo, id string) (hr error) {
	var _p0 *uint16
	_p0, hr = syscall.UTF16PtrFromString(id)
	if hr != nil {
		return
	}
	return _unprepareLayer(info, _p0)
}

func _unprepareLayer(info *driverInfo, id *uint16) (hr error) {
	hr = procUnprepareLayer.Find()
	if hr != nil {
		return
	}
	r0, _, _ := syscall.Syscall(procUnprepareLayer.Addr(), 2, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), 0)
	if int32(r0) < 0 {
		if r0&0x1fff0000 == 0x00070000 {
			r0 &= 0xffff
		}
		hr = syscall.Errno(r0)
	}
	return
}
070701000001C6000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/winapi   070701000001C7000081A4000000000000000000000001645E367C000002E8000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/winapi/bindflt.go    package winapi

const (
	BINDFLT_FLAG_READ_ONLY_MAPPING        uint32 = 0x00000001
	BINDFLT_FLAG_MERGED_BIND_MAPPING      uint32 = 0x00000002
	BINDFLT_FLAG_USE_CURRENT_SILO_MAPPING uint32 = 0x00000004
)

// HRESULT
// BfSetupFilter(
//     _In_opt_ HANDLE JobHandle,
//     _In_ ULONG Flags,
//     _In_ LPCWSTR VirtualizationRootPath,
//     _In_ LPCWSTR VirtualizationTargetPath,
//     _In_reads_opt_( VirtualizationExceptionPathCount ) LPCWSTR* VirtualizationExceptionPaths,
//     _In_opt_ ULONG VirtualizationExceptionPathCount
// );
//
//sys BfSetupFilter(jobHandle windows.Handle, flags uint32, virtRootPath *uint16, virtTargetPath *uint16, virtExceptions **uint16, virtExceptionPathCount uint32) (hr error) = bindfltapi.BfSetupFilter?
070701000001C8000081A4000000000000000000000001645E367C00000666000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/winapi/console.go    //go:build windows

package winapi

import (
	"unsafe"

	"golang.org/x/sys/windows"
)

const PSEUDOCONSOLE_INHERIT_CURSOR = 0x1

// CreatePseudoConsole creates a windows pseudo console.
func CreatePseudoConsole(size windows.Coord, hInput windows.Handle, hOutput windows.Handle, dwFlags uint32, hpcon *windows.Handle) error {
	// We need this wrapper as the function takes a COORD struct and not a pointer to one, so we need to cast to something beforehand.
	return createPseudoConsole(*((*uint32)(unsafe.Pointer(&size))), hInput, hOutput, 0, hpcon)
}

// ResizePseudoConsole resizes the internal buffers of the pseudo console to the width and height specified in `size`.
func ResizePseudoConsole(hpcon windows.Handle, size windows.Coord) error {
	// We need this wrapper as the function takes a COORD struct and not a pointer to one, so we need to cast to something beforehand.
	return resizePseudoConsole(hpcon, *((*uint32)(unsafe.Pointer(&size))))
}

// HRESULT WINAPI CreatePseudoConsole(
//     _In_ COORD size,
//     _In_ HANDLE hInput,
//     _In_ HANDLE hOutput,
//     _In_ DWORD dwFlags,
//     _Out_ HPCON* phPC
// );
//
//sys createPseudoConsole(size uint32, hInput windows.Handle, hOutput windows.Handle, dwFlags uint32, hpcon *windows.Handle) (hr error) = kernel32.CreatePseudoConsole

// void WINAPI ClosePseudoConsole(
//     _In_ HPCON hPC
// );
//
//sys ClosePseudoConsole(hpc windows.Handle) = kernel32.ClosePseudoConsole

// HRESULT WINAPI ResizePseudoConsole(
//     _In_ HPCON hPC ,
//     _In_ COORD size
// );
//
//sys resizePseudoConsole(hPc windows.Handle, size uint32) (hr error) = kernel32.ResizePseudoConsole
  070701000001C9000081A4000000000000000000000001645E367C000002D4000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/winapi/devices.go    //go:build windows

package winapi

import "github.com/Microsoft/go-winio/pkg/guid"

//sys CMGetDeviceIDListSize(pulLen *uint32, pszFilter *byte, uFlags uint32) (hr error) = cfgmgr32.CM_Get_Device_ID_List_SizeA
//sys CMGetDeviceIDList(pszFilter *byte, buffer *byte, bufferLen uint32, uFlags uint32) (hr error)= cfgmgr32.CM_Get_Device_ID_ListA
//sys CMLocateDevNode(pdnDevInst *uint32, pDeviceID string, uFlags uint32) (hr error) = cfgmgr32.CM_Locate_DevNodeW
//sys CMGetDevNodeProperty(dnDevInst uint32, propertyKey *DevPropKey, propertyType *uint32, propertyBuffer *uint16, propertyBufferSize *uint32, uFlags uint32) (hr error) = cfgmgr32.CM_Get_DevNode_PropertyW

type DevPropKey struct {
	Fmtid guid.GUID
	Pid   uint32
}
070701000001CA000081A4000000000000000000000001645E367C0000009B000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/winapi/doc.go    // Package winapi contains various low-level bindings to Windows APIs. It can
// be thought of as an extension to golang.org/x/sys/windows.
package winapi
 070701000001CB000081A4000000000000000000000001645E367C0000009D000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/winapi/elevation.go  //go:build windows

package winapi

import (
	"golang.org/x/sys/windows"
)

func IsElevated() bool {
	return windows.GetCurrentProcessToken().IsElevated()
}
   070701000001CC000081A4000000000000000000000001645E367C00000180000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/winapi/errors.go //go:build windows

package winapi

import "syscall"

//sys RtlNtStatusToDosError(status uint32) (winerr error) = ntdll.RtlNtStatusToDosError

const (
	STATUS_REPARSE_POINT_ENCOUNTERED               = 0xC000050B
	ERROR_NO_MORE_ITEMS                            = 0x103
	ERROR_MORE_DATA                  syscall.Errno = 234
)

func NTSuccess(status uint32) bool {
	return status == 0
}
070701000001CD000081A4000000000000000000000001645E367C00000D8F000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/winapi/filesystem.go //go:build windows

package winapi

//sys CopyFileW(existingFileName *uint16, newFileName *uint16, failIfExists int32) (err error) = kernel32.CopyFileW
//sys NtCreateFile(handle *uintptr, accessMask uint32, oa *ObjectAttributes, iosb *IOStatusBlock, allocationSize *uint64, fileAttributes uint32, shareAccess uint32, createDisposition uint32, createOptions uint32, eaBuffer *byte, eaLength uint32) (status uint32) = ntdll.NtCreateFile
//sys NtSetInformationFile(handle uintptr, iosb *IOStatusBlock, information uintptr, length uint32, class uint32) (status uint32) = ntdll.NtSetInformationFile

//sys NtOpenDirectoryObject(handle *uintptr, accessMask uint32, oa *ObjectAttributes) (status uint32) = ntdll.NtOpenDirectoryObject
//sys NtQueryDirectoryObject(handle uintptr, buffer *byte, length uint32, singleEntry bool, restartScan bool, context *uint32, returnLength *uint32)(status uint32) = ntdll.NtQueryDirectoryObject

const (
	FileLinkInformationClass          = 11
	FileDispositionInformationExClass = 64

	FILE_READ_ATTRIBUTES  = 0x0080
	FILE_WRITE_ATTRIBUTES = 0x0100
	DELETE                = 0x10000

	FILE_OPEN   = 1
	FILE_CREATE = 2

	FILE_LIST_DIRECTORY          = 0x00000001
	FILE_DIRECTORY_FILE          = 0x00000001
	FILE_SYNCHRONOUS_IO_NONALERT = 0x00000020
	FILE_OPEN_FOR_BACKUP_INTENT  = 0x00004000
	FILE_OPEN_REPARSE_POINT      = 0x00200000

	FILE_DISPOSITION_DELETE = 0x00000001

	OBJ_DONT_REPARSE = 0x1000

	STATUS_MORE_ENTRIES    = 0x105
	STATUS_NO_MORE_ENTRIES = 0x8000001a
)

// Select entries from FILE_INFO_BY_HANDLE_CLASS.
//
// C declaration:
//
//	typedef enum _FILE_INFO_BY_HANDLE_CLASS {
//	    FileBasicInfo,
//	    FileStandardInfo,
//	    FileNameInfo,
//	    FileRenameInfo,
//	    FileDispositionInfo,
//	    FileAllocationInfo,
//	    FileEndOfFileInfo,
//	    FileStreamInfo,
//	    FileCompressionInfo,
//	    FileAttributeTagInfo,
//	    FileIdBothDirectoryInfo,
//	    FileIdBothDirectoryRestartInfo,
//	    FileIoPriorityHintInfo,
//	    FileRemoteProtocolInfo,
//	    FileFullDirectoryInfo,
//	    FileFullDirectoryRestartInfo,
//	    FileStorageInfo,
//	    FileAlignmentInfo,
//	    FileIdInfo,
//	    FileIdExtdDirectoryInfo,
//	    FileIdExtdDirectoryRestartInfo,
//	    FileDispositionInfoEx,
//	    FileRenameInfoEx,
//	    FileCaseSensitiveInfo,
//	    FileNormalizedNameInfo,
//	    MaximumFileInfoByHandleClass
//	} FILE_INFO_BY_HANDLE_CLASS, *PFILE_INFO_BY_HANDLE_CLASS;
//
// Documentation: https://docs.microsoft.com/en-us/windows/win32/api/minwinbase/ne-minwinbase-file_info_by_handle_class
const (
	FileIdInfo = 18
)

type FileDispositionInformationEx struct {
	Flags uintptr
}

type IOStatusBlock struct {
	Status, Information uintptr
}

type ObjectAttributes struct {
	Length             uintptr
	RootDirectory      uintptr
	ObjectName         *UnicodeString
	Attributes         uintptr
	SecurityDescriptor uintptr
	SecurityQoS        uintptr
}

type ObjectDirectoryInformation struct {
	Name     UnicodeString
	TypeName UnicodeString
}

type FileLinkInformation struct {
	ReplaceIfExists bool
	RootDirectory   uintptr
	FileNameLength  uint32
	FileName        [1]uint16
}

// C declaration:
//
//	typedef struct _FILE_ID_INFO {
//		ULONGLONG   VolumeSerialNumber;
//		FILE_ID_128 FileId;
//	} FILE_ID_INFO, *PFILE_ID_INFO;
//
// Documentation: https://docs.microsoft.com/en-us/windows/win32/api/winbase/ns-winbase-file_id_info
type FILE_ID_INFO struct {
	VolumeSerialNumber uint64
	FileID             [16]byte
}
 070701000001CE000081A4000000000000000000000001645E367C0000205E000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/winapi/jobobject.go  //go:build windows

package winapi

import (
	"unsafe"

	"golang.org/x/sys/windows"
)

// Messages that can be received from an assigned io completion port.
// https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-jobobject_associate_completion_port
const (
	JOB_OBJECT_MSG_END_OF_JOB_TIME       uint32 = 1
	JOB_OBJECT_MSG_END_OF_PROCESS_TIME   uint32 = 2
	JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT  uint32 = 3
	JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO   uint32 = 4
	JOB_OBJECT_MSG_NEW_PROCESS           uint32 = 6
	JOB_OBJECT_MSG_EXIT_PROCESS          uint32 = 7
	JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS uint32 = 8
	JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT  uint32 = 9
	JOB_OBJECT_MSG_JOB_MEMORY_LIMIT      uint32 = 10
	JOB_OBJECT_MSG_NOTIFICATION_LIMIT    uint32 = 11
)

// Access rights for creating or opening job objects.
//
// https://docs.microsoft.com/en-us/windows/win32/procthread/job-object-security-and-access-rights
const (
	JOB_OBJECT_QUERY      = 0x0004
	JOB_OBJECT_ALL_ACCESS = 0x1F001F
)

// IO limit flags
//
// https://docs.microsoft.com/en-us/windows/win32/api/jobapi2/ns-jobapi2-jobobject_io_rate_control_information
const JOB_OBJECT_IO_RATE_CONTROL_ENABLE = 0x1

const JOBOBJECT_IO_ATTRIBUTION_CONTROL_ENABLE uint32 = 0x1

// https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-jobobject_cpu_rate_control_information
const (
	JOB_OBJECT_CPU_RATE_CONTROL_ENABLE uint32 = 1 << iota
	JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED
	JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP
	JOB_OBJECT_CPU_RATE_CONTROL_NOTIFY
	JOB_OBJECT_CPU_RATE_CONTROL_MIN_MAX_RATE
)

// JobObjectInformationClass values. Used for a call to QueryInformationJobObject
//
// https://docs.microsoft.com/en-us/windows/win32/api/jobapi2/nf-jobapi2-queryinformationjobobject
const (
	JobObjectBasicAccountingInformation      uint32 = 1
	JobObjectBasicProcessIdList              uint32 = 3
	JobObjectBasicAndIoAccountingInformation uint32 = 8
	JobObjectLimitViolationInformation       uint32 = 13
	JobObjectMemoryUsageInformation          uint32 = 28
	JobObjectNotificationLimitInformation2   uint32 = 33
	JobObjectCreateSilo                      uint32 = 35
	JobObjectSiloBasicInformation            uint32 = 36
	JobObjectIoAttribution                   uint32 = 42
)

// https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-jobobject_basic_limit_information
type JOBOBJECT_BASIC_LIMIT_INFORMATION struct {
	PerProcessUserTimeLimit int64
	PerJobUserTimeLimit     int64
	LimitFlags              uint32
	MinimumWorkingSetSize   uintptr
	MaximumWorkingSetSize   uintptr
	ActiveProcessLimit      uint32
	Affinity                uintptr
	PriorityClass           uint32
	SchedulingClass         uint32
}

// https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-jobobject_cpu_rate_control_information
type JOBOBJECT_CPU_RATE_CONTROL_INFORMATION struct {
	ControlFlags uint32
	Value        uint32
}

// https://docs.microsoft.com/en-us/windows/win32/api/jobapi2/ns-jobapi2-jobobject_io_rate_control_information
type JOBOBJECT_IO_RATE_CONTROL_INFORMATION struct {
	MaxIops         int64
	MaxBandwidth    int64
	ReservationIops int64
	BaseIOSize      uint32
	VolumeName      string
	ControlFlags    uint32
}

// https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-jobobject_basic_process_id_list
type JOBOBJECT_BASIC_PROCESS_ID_LIST struct {
	NumberOfAssignedProcesses uint32
	NumberOfProcessIdsInList  uint32
	ProcessIdList             [1]uintptr
}

// AllPids returns all the process Ids in the job object.
func (p *JOBOBJECT_BASIC_PROCESS_ID_LIST) AllPids() []uintptr {
	return (*[(1 << 27) - 1]uintptr)(unsafe.Pointer(&p.ProcessIdList[0]))[:p.NumberOfProcessIdsInList:p.NumberOfProcessIdsInList]
}

// https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-jobobject_basic_accounting_information
type JOBOBJECT_BASIC_ACCOUNTING_INFORMATION struct {
	TotalUserTime             int64
	TotalKernelTime           int64
	ThisPeriodTotalUserTime   int64
	ThisPeriodTotalKernelTime int64
	TotalPageFaultCount       uint32
	TotalProcesses            uint32
	ActiveProcesses           uint32
	TotalTerminateProcesses   uint32
}

// https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-jobobject_basic_and_io_accounting_information
type JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION struct {
	BasicInfo JOBOBJECT_BASIC_ACCOUNTING_INFORMATION
	IoInfo    windows.IO_COUNTERS
}

//	typedef struct _JOBOBJECT_MEMORY_USAGE_INFORMATION {
//		ULONG64 JobMemory;
//		ULONG64 PeakJobMemoryUsed;
//	} JOBOBJECT_MEMORY_USAGE_INFORMATION, *PJOBOBJECT_MEMORY_USAGE_INFORMATION;
type JOBOBJECT_MEMORY_USAGE_INFORMATION struct {
	JobMemory         uint64
	PeakJobMemoryUsed uint64
}

//	typedef struct _JOBOBJECT_IO_ATTRIBUTION_STATS {
//		ULONG_PTR IoCount;
//		ULONGLONG TotalNonOverlappedQueueTime;
//		ULONGLONG TotalNonOverlappedServiceTime;
//		ULONGLONG TotalSize;
//	} JOBOBJECT_IO_ATTRIBUTION_STATS, *PJOBOBJECT_IO_ATTRIBUTION_STATS;
type JOBOBJECT_IO_ATTRIBUTION_STATS struct {
	IoCount                       uintptr
	TotalNonOverlappedQueueTime   uint64
	TotalNonOverlappedServiceTime uint64
	TotalSize                     uint64
}

//	typedef struct _JOBOBJECT_IO_ATTRIBUTION_INFORMATION {
//	    ULONG ControlFlags;
//	    JOBOBJECT_IO_ATTRIBUTION_STATS ReadStats;
//	    JOBOBJECT_IO_ATTRIBUTION_STATS WriteStats;
//	} JOBOBJECT_IO_ATTRIBUTION_INFORMATION, *PJOBOBJECT_IO_ATTRIBUTION_INFORMATION;
type JOBOBJECT_IO_ATTRIBUTION_INFORMATION struct {
	ControlFlags uint32
	ReadStats    JOBOBJECT_IO_ATTRIBUTION_STATS
	WriteStats   JOBOBJECT_IO_ATTRIBUTION_STATS
}

// https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-jobobject_associate_completion_port
type JOBOBJECT_ASSOCIATE_COMPLETION_PORT struct {
	CompletionKey  windows.Handle
	CompletionPort windows.Handle
}

// BOOL IsProcessInJob(
// 		HANDLE ProcessHandle,
// 		HANDLE JobHandle,
// 		PBOOL  Result
// );
//
//sys IsProcessInJob(procHandle windows.Handle, jobHandle windows.Handle, result *int32) (err error) = kernel32.IsProcessInJob

// BOOL QueryInformationJobObject(
//		HANDLE             hJob,
//		JOBOBJECTINFOCLASS JobObjectInformationClass,
//		LPVOID             lpJobObjectInformation,
//		DWORD              cbJobObjectInformationLength,
//		LPDWORD            lpReturnLength
// );
//
//sys QueryInformationJobObject(jobHandle windows.Handle, infoClass uint32, jobObjectInfo unsafe.Pointer, jobObjectInformationLength uint32, lpReturnLength *uint32) (err error) = kernel32.QueryInformationJobObject

// HANDLE OpenJobObjectW(
//		DWORD   dwDesiredAccess,
//		BOOL    bInheritHandle,
//		LPCWSTR lpName
// );
//
//sys OpenJobObject(desiredAccess uint32, inheritHandle int32, lpName *uint16) (handle windows.Handle, err error) = kernel32.OpenJobObjectW

// DWORD SetIoRateControlInformationJobObject(
//		HANDLE                                hJob,
//		JOBOBJECT_IO_RATE_CONTROL_INFORMATION *IoRateControlInfo
// );
//
//sys SetIoRateControlInformationJobObject(jobHandle windows.Handle, ioRateControlInfo *JOBOBJECT_IO_RATE_CONTROL_INFORMATION) (ret uint32, err error) = kernel32.SetIoRateControlInformationJobObject

// DWORD QueryIoRateControlInformationJobObject(
// 		HANDLE                                hJob,
// 		PCWSTR                                VolumeName,
//		JOBOBJECT_IO_RATE_CONTROL_INFORMATION **InfoBlocks,
// 		ULONG                                 *InfoBlockCount
// );
//
//sys QueryIoRateControlInformationJobObject(jobHandle windows.Handle, volumeName *uint16, ioRateControlInfo **JOBOBJECT_IO_RATE_CONTROL_INFORMATION, infoBlockCount *uint32) (ret uint32, err error) = kernel32.QueryIoRateControlInformationJobObject

// NTSTATUS
// NtOpenJobObject (
//     _Out_ PHANDLE JobHandle,
//     _In_ ACCESS_MASK DesiredAccess,
//     _In_ POBJECT_ATTRIBUTES ObjectAttributes
// );
//
//sys NtOpenJobObject(jobHandle *windows.Handle, desiredAccess uint32, objAttributes *ObjectAttributes) (status uint32) = ntdll.NtOpenJobObject

// NTSTATUS
// NTAPI
// NtCreateJobObject (
//     _Out_ PHANDLE JobHandle,
//     _In_ ACCESS_MASK DesiredAccess,
//     _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
// );
//
//sys NtCreateJobObject(jobHandle *windows.Handle, desiredAccess uint32, objAttributes *ObjectAttributes) (status uint32) = ntdll.NtCreateJobObject
  070701000001CF000081A4000000000000000000000001645E367C00000345000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/winapi/logon.go  package winapi

// BOOL LogonUserA(
// 	LPCWSTR  lpszUsername,
// 	LPCWSTR  lpszDomain,
// 	LPCWSTR  lpszPassword,
// 	DWORD   dwLogonType,
// 	DWORD   dwLogonProvider,
// 	PHANDLE phToken
// );
//
//sys LogonUser(username *uint16, domain *uint16, password *uint16, logonType uint32, logonProvider uint32, token *windows.Token) (err error) = advapi32.LogonUserW

// Logon types
const (
	LOGON32_LOGON_INTERACTIVE       uint32 = 2
	LOGON32_LOGON_NETWORK           uint32 = 3
	LOGON32_LOGON_BATCH             uint32 = 4
	LOGON32_LOGON_SERVICE           uint32 = 5
	LOGON32_LOGON_UNLOCK            uint32 = 7
	LOGON32_LOGON_NETWORK_CLEARTEXT uint32 = 8
	LOGON32_LOGON_NEW_CREDENTIALS   uint32 = 9
)

// Logon providers
const (
	LOGON32_PROVIDER_DEFAULT uint32 = 0
	LOGON32_PROVIDER_WINNT40 uint32 = 2
	LOGON32_PROVIDER_WINNT50 uint32 = 3
)
   070701000001D0000081A4000000000000000000000001645E367C0000008F000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/winapi/memory.go package winapi

//sys LocalAlloc(flags uint32, size int) (ptr uintptr) = kernel32.LocalAlloc
//sys LocalFree(ptr uintptr) = kernel32.LocalFree
 070701000001D1000081A4000000000000000000000001645E367C00000087000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/winapi/net.go    package winapi

//sys SetJobCompartmentId(handle windows.Handle, compartmentId uint32) (win32Err error) = iphlpapi.SetJobCompartmentId
 070701000001D2000081A4000000000000000000000001645E367C00000130000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/winapi/ofreg.go  package winapi

//sys ORCreateHive(key *syscall.Handle) (regerrno error) = offreg.ORCreateHive
//sys ORSaveHive(key syscall.Handle, file string, OsMajorVersion uint32, OsMinorVersion uint32) (regerrno error) = offreg.ORSaveHive
//sys ORCloseHive(key syscall.Handle) (regerrno error) = offreg.ORCloseHive
070701000001D3000081A4000000000000000000000001645E367C00000173000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/winapi/path.go   package winapi

// DWORD SearchPathW(
// 	LPCWSTR lpPath,
// 	LPCWSTR lpFileName,
// 	LPCWSTR lpExtension,
// 	DWORD   nBufferLength,
// 	LPWSTR  lpBuffer,
// 	LPWSTR  *lpFilePart
// );
//
//sys SearchPath(lpPath *uint16, lpFileName *uint16, lpExtension *uint16, nBufferLength uint32, lpBuffer *uint16, lpFilePath *uint16) (size uint32, err error) = kernel32.SearchPathW
 070701000001D4000081A4000000000000000000000001645E367C0000082A000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/winapi/process.go    package winapi

const PROCESS_ALL_ACCESS uint32 = 2097151

const (
	PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE = 0x20016
	PROC_THREAD_ATTRIBUTE_JOB_LIST      = 0x2000D
)

// ProcessVmCounters corresponds to the _VM_COUNTERS_EX and _VM_COUNTERS_EX2 structures.
const ProcessVmCounters = 3

// __kernel_entry NTSTATUS NtQueryInformationProcess(
// 	[in]            HANDLE           ProcessHandle,
// 	[in]            PROCESSINFOCLASS ProcessInformationClass,
// 	[out]           PVOID            ProcessInformation,
// 	[in]            ULONG            ProcessInformationLength,
// 	[out, optional] PULONG           ReturnLength
// );
//
//sys NtQueryInformationProcess(processHandle windows.Handle, processInfoClass uint32, processInfo unsafe.Pointer, processInfoLength uint32, returnLength *uint32) (status uint32) = ntdll.NtQueryInformationProcess

//	typedef struct _VM_COUNTERS_EX {
//		   SIZE_T PeakVirtualSize;
//		   SIZE_T VirtualSize;
//		   ULONG PageFaultCount;
//		   SIZE_T PeakWorkingSetSize;
//		   SIZE_T WorkingSetSize;
//		   SIZE_T QuotaPeakPagedPoolUsage;
//		   SIZE_T QuotaPagedPoolUsage;
//		   SIZE_T QuotaPeakNonPagedPoolUsage;
//		   SIZE_T QuotaNonPagedPoolUsage;
//		   SIZE_T PagefileUsage;
//		   SIZE_T PeakPagefileUsage;
//		   SIZE_T PrivateUsage;
//	} VM_COUNTERS_EX, *PVM_COUNTERS_EX;
type VM_COUNTERS_EX struct {
	PeakVirtualSize            uintptr
	VirtualSize                uintptr
	PageFaultCount             uint32
	PeakWorkingSetSize         uintptr
	WorkingSetSize             uintptr
	QuotaPeakPagedPoolUsage    uintptr
	QuotaPagedPoolUsage        uintptr
	QuotaPeakNonPagedPoolUsage uintptr
	QuotaNonPagedPoolUsage     uintptr
	PagefileUsage              uintptr
	PeakPagefileUsage          uintptr
	PrivateUsage               uintptr
}

//	typedef struct _VM_COUNTERS_EX2 {
//		   VM_COUNTERS_EX CountersEx;
//		   SIZE_T PrivateWorkingSetSize;
//		   SIZE_T SharedCommitUsage;
//	} VM_COUNTERS_EX2, *PVM_COUNTERS_EX2;
type VM_COUNTERS_EX2 struct {
	CountersEx            VM_COUNTERS_EX
	PrivateWorkingSetSize uintptr
	SharedCommitUsage     uintptr
}
  070701000001D5000081A4000000000000000000000001645E367C00000110000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/winapi/processor.go  package winapi

// Get count from all processor groups.
// https://docs.microsoft.com/en-us/windows/win32/procthread/processor-groups
const ALL_PROCESSOR_GROUPS = 0xFFFF

//sys GetActiveProcessorCount(groupNumber uint16) (amount uint32) = kernel32.GetActiveProcessorCount
070701000001D6000081A4000000000000000000000001645E367C00000A1E000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/winapi/system.go //go:build windows

package winapi

import "golang.org/x/sys/windows"

const SystemProcessInformation = 5

const STATUS_INFO_LENGTH_MISMATCH = 0xC0000004

// __kernel_entry NTSTATUS NtQuerySystemInformation(
// 	SYSTEM_INFORMATION_CLASS SystemInformationClass,
// 	PVOID                    SystemInformation,
// 	ULONG                    SystemInformationLength,
// 	PULONG                   ReturnLength
// );
//
//sys NtQuerySystemInformation(systemInfoClass int, systemInformation unsafe.Pointer, systemInfoLength uint32, returnLength *uint32) (status uint32) = ntdll.NtQuerySystemInformation

type SYSTEM_PROCESS_INFORMATION struct {
	NextEntryOffset              uint32         // ULONG
	NumberOfThreads              uint32         // ULONG
	WorkingSetPrivateSize        int64          // LARGE_INTEGER
	HardFaultCount               uint32         // ULONG
	NumberOfThreadsHighWatermark uint32         // ULONG
	CycleTime                    uint64         // ULONGLONG
	CreateTime                   int64          // LARGE_INTEGER
	UserTime                     int64          // LARGE_INTEGER
	KernelTime                   int64          // LARGE_INTEGER
	ImageName                    UnicodeString  // UNICODE_STRING
	BasePriority                 int32          // KPRIORITY
	UniqueProcessID              windows.Handle // HANDLE
	InheritedFromUniqueProcessID windows.Handle // HANDLE
	HandleCount                  uint32         // ULONG
	SessionID                    uint32         // ULONG
	UniqueProcessKey             *uint32        // ULONG_PTR
	PeakVirtualSize              uintptr        // SIZE_T
	VirtualSize                  uintptr        // SIZE_T
	PageFaultCount               uint32         // ULONG
	PeakWorkingSetSize           uintptr        // SIZE_T
	WorkingSetSize               uintptr        // SIZE_T
	QuotaPeakPagedPoolUsage      uintptr        // SIZE_T
	QuotaPagedPoolUsage          uintptr        // SIZE_T
	QuotaPeakNonPagedPoolUsage   uintptr        // SIZE_T
	QuotaNonPagedPoolUsage       uintptr        // SIZE_T
	PagefileUsage                uintptr        // SIZE_T
	PeakPagefileUsage            uintptr        // SIZE_T
	PrivatePageCount             uintptr        // SIZE_T
	ReadOperationCount           int64          // LARGE_INTEGER
	WriteOperationCount          int64          // LARGE_INTEGER
	OtherOperationCount          int64          // LARGE_INTEGER
	ReadTransferCount            int64          // LARGE_INTEGER
	WriteTransferCount           int64          // LARGE_INTEGER
	OtherTransferCount           int64          // LARGE_INTEGER
}
  070701000001D7000081A4000000000000000000000001645E367C0000024A000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/winapi/thread.go package winapi

// HANDLE CreateRemoteThread(
// 	HANDLE                 hProcess,
// 	LPSECURITY_ATTRIBUTES  lpThreadAttributes,
// 	SIZE_T                 dwStackSize,
// 	LPTHREAD_START_ROUTINE lpStartAddress,
// 	LPVOID                 lpParameter,
// 	DWORD                  dwCreationFlags,
// 	LPDWORD                lpThreadId
// );
//
//sys CreateRemoteThread(process windows.Handle, sa *windows.SecurityAttributes, stackSize uint32, startAddr uintptr, parameter uintptr, creationFlags uint32, threadID *uint32) (handle windows.Handle, err error) = kernel32.CreateRemoteThread
  070701000001D8000081A4000000000000000000000001645E367C00001358000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/winapi/user.go   //go:build windows

package winapi

import (
	"syscall"

	"golang.org/x/sys/windows"
)

const UserNameCharLimit = 20

const (
	USER_PRIV_GUEST uint32 = iota
	USER_PRIV_USER
	USER_PRIV_ADMIN
)

const (
	UF_NORMAL_ACCOUNT     = 0x00200
	UF_DONT_EXPIRE_PASSWD = 0x10000
)

const NERR_UserNotFound = syscall.Errno(0x8AD)

//	typedef struct _LOCALGROUP_MEMBERS_INFO_0 {
//		PSID lgrmi0_sid;
//	} LOCALGROUP_MEMBERS_INFO_0, *PLOCALGROUP_MEMBERS_INFO_0, *LPLOCALGROUP_MEMBERS_INFO_0;
type LocalGroupMembersInfo0 struct {
	Sid *windows.SID
}

//	typedef struct _LOCALGROUP_INFO_1 {
//		LPWSTR lgrpi1_name;
//		LPWSTR lgrpi1_comment;
//	} LOCALGROUP_INFO_1, *PLOCALGROUP_INFO_1, *LPLOCALGROUP_INFO_1;
type LocalGroupInfo1 struct {
	Name    *uint16
	Comment *uint16
}

//	typedef struct _USER_INFO_1 {
//		LPWSTR usri1_name;
//		LPWSTR usri1_password;
//		DWORD  usri1_password_age;
//		DWORD  usri1_priv;
//		LPWSTR usri1_home_dir;
//		LPWSTR usri1_comment;
//		DWORD  usri1_flags;
//		LPWSTR usri1_script_path;
//	} USER_INFO_1, *PUSER_INFO_1, *LPUSER_INFO_1;
type UserInfo1 struct {
	Name        *uint16
	Password    *uint16
	PasswordAge uint32
	Priv        uint32
	HomeDir     *uint16
	Comment     *uint16
	Flags       uint32
	ScriptPath  *uint16
}

// NET_API_STATUS NET_API_FUNCTION NetLocalGroupGetInfo(
// 	[in]  LPCWSTR servername,
// 	[in]  LPCWSTR groupname,
// 	[in]  DWORD   level,
// 	[out] LPBYTE  *bufptr
// );
//
//sys netLocalGroupGetInfo(serverName *uint16, groupName *uint16, level uint32, bufptr **byte) (status error) = netapi32.NetLocalGroupGetInfo

// NetLocalGroupGetInfo is a slightly go friendlier wrapper around the NetLocalGroupGetInfo function. Instead of taking in *uint16's, it takes in
// go strings and does the conversion internally.
func NetLocalGroupGetInfo(serverName, groupName string, level uint32, bufPtr **byte) (err error) {
	var (
		serverNameUTF16 *uint16
		groupNameUTF16  *uint16
	)
	if serverName != "" {
		serverNameUTF16, err = windows.UTF16PtrFromString(serverName)
		if err != nil {
			return err
		}
	}
	if groupName != "" {
		groupNameUTF16, err = windows.UTF16PtrFromString(groupName)
		if err != nil {
			return err
		}
	}
	return netLocalGroupGetInfo(
		serverNameUTF16,
		groupNameUTF16,
		level,
		bufPtr,
	)
}

// NET_API_STATUS NET_API_FUNCTION NetUserAdd(
// 	[in]  LPCWSTR servername,
// 	[in]  DWORD   level,
// 	[in]  LPBYTE  buf,
// 	[out] LPDWORD parm_err
// );
//
//sys netUserAdd(serverName *uint16, level uint32, buf *byte, parm_err *uint32) (status error) = netapi32.NetUserAdd

// NetUserAdd is a slightly go friendlier wrapper around the NetUserAdd function. Instead of taking in *uint16's, it takes in
// go strings and does the conversion internally.
func NetUserAdd(serverName string, level uint32, buf *byte, parm_err *uint32) (err error) {
	var serverNameUTF16 *uint16
	if serverName != "" {
		serverNameUTF16, err = windows.UTF16PtrFromString(serverName)
		if err != nil {
			return err
		}
	}
	return netUserAdd(
		serverNameUTF16,
		level,
		buf,
		parm_err,
	)
}

// NET_API_STATUS NET_API_FUNCTION NetUserDel(
// 	[in] LPCWSTR servername,
// 	[in] LPCWSTR username
// );
//
//sys netUserDel(serverName *uint16, username *uint16) (status error) = netapi32.NetUserDel

// NetUserDel is a slightly go friendlier wrapper around the NetUserDel function. Instead of taking in *uint16's, it takes in
// go strings and does the conversion internally.
func NetUserDel(serverName, userName string) (err error) {
	var (
		serverNameUTF16 *uint16
		userNameUTF16   *uint16
	)
	if serverName != "" {
		serverNameUTF16, err = windows.UTF16PtrFromString(serverName)
		if err != nil {
			return err
		}
	}
	if userName != "" {
		userNameUTF16, err = windows.UTF16PtrFromString(userName)
		if err != nil {
			return err
		}
	}
	return netUserDel(
		serverNameUTF16,
		userNameUTF16,
	)
}

// NET_API_STATUS NET_API_FUNCTION NetLocalGroupAddMembers(
// 	[in] LPCWSTR servername,
// 	[in] LPCWSTR groupname,
// 	[in] DWORD   level,
// 	[in] LPBYTE  buf,
// 	[in] DWORD   totalentries
// );
//
//sys netLocalGroupAddMembers(serverName *uint16, groupName *uint16, level uint32, buf *byte, totalEntries uint32) (status error) = netapi32.NetLocalGroupAddMembers

// NetLocalGroupAddMembers is a slightly go friendlier wrapper around the NetLocalGroupAddMembers function. Instead of taking in *uint16's, it takes in
// go strings and does the conversion internally.
func NetLocalGroupAddMembers(serverName, groupName string, level uint32, buf *byte, totalEntries uint32) (err error) {
	var (
		serverNameUTF16 *uint16
		groupNameUTF16  *uint16
	)
	if serverName != "" {
		serverNameUTF16, err = windows.UTF16PtrFromString(serverName)
		if err != nil {
			return err
		}
	}
	if groupName != "" {
		groupNameUTF16, err = windows.UTF16PtrFromString(groupName)
		if err != nil {
			return err
		}
	}
	return netLocalGroupAddMembers(
		serverNameUTF16,
		groupNameUTF16,
		level,
		buf,
		totalEntries,
	)
}
070701000001D9000081A4000000000000000000000001645E367C00000970000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/winapi/utils.go  //go:build windows

package winapi

import (
	"errors"
	"reflect"
	"syscall"
	"unsafe"

	"golang.org/x/sys/windows"
)

// Uint16BufferToSlice wraps a uint16 pointer-and-length into a slice
// for easier interop with Go APIs
func Uint16BufferToSlice(buffer *uint16, bufferLength int) (result []uint16) {
	hdr := (*reflect.SliceHeader)(unsafe.Pointer(&result))
	hdr.Data = uintptr(unsafe.Pointer(buffer))
	hdr.Cap = bufferLength
	hdr.Len = bufferLength

	return
}

// UnicodeString corresponds to UNICODE_STRING win32 struct defined here
// https://docs.microsoft.com/en-us/windows/win32/api/ntdef/ns-ntdef-_unicode_string
type UnicodeString struct {
	Length        uint16
	MaximumLength uint16
	Buffer        *uint16
}

// NTSTRSAFE_UNICODE_STRING_MAX_CCH is a constant defined in ntstrsafe.h. This value
// denotes the maximum number of wide chars a path can have.
const NTSTRSAFE_UNICODE_STRING_MAX_CCH = 32767

// String converts a UnicodeString to a golang string
func (uni UnicodeString) String() string {
	// UnicodeString is not guaranteed to be null terminated, therefore
	// use the UnicodeString's Length field
	return windows.UTF16ToString(Uint16BufferToSlice(uni.Buffer, int(uni.Length/2)))
}

// NewUnicodeString allocates a new UnicodeString and copies `s` into
// the buffer of the new UnicodeString.
func NewUnicodeString(s string) (*UnicodeString, error) {
	buf, err := windows.UTF16FromString(s)
	if err != nil {
		return nil, err
	}

	if len(buf) > NTSTRSAFE_UNICODE_STRING_MAX_CCH {
		return nil, syscall.ENAMETOOLONG
	}

	uni := &UnicodeString{
		// The length is in bytes and should not include the trailing null character.
		Length:        uint16((len(buf) - 1) * 2),
		MaximumLength: uint16((len(buf) - 1) * 2),
		Buffer:        &buf[0],
	}
	return uni, nil
}

// ConvertStringSetToSlice is a helper function used to convert the contents of
// `buf` into a string slice. `buf` contains a set of null terminated strings
// with an additional null at the end to indicate the end of the set.
func ConvertStringSetToSlice(buf []byte) ([]string, error) {
	var results []string
	prev := 0
	for i := range buf {
		if buf[i] == 0 {
			if prev == i {
				// found two null characters in a row, return result
				return results, nil
			}
			results = append(results, string(buf[prev:i]))
			prev = i + 1
		}
	}
	return nil, errors.New("string set malformed: missing null terminator at end of buffer")
}
070701000001DA000081A4000000000000000000000001645E367C00000079000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/winapi/winapi.go package winapi

//go:generate go run github.com/Microsoft/go-winio/tools/mkwinsyscall -output zsyscall_windows.go ./*.go
   070701000001DB000081A4000000000000000000000001645E367C000046B2000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/internal/winapi/zsyscall_windows.go   //go:build windows

// Code generated by 'go generate' using "github.com/Microsoft/go-winio/tools/mkwinsyscall"; DO NOT EDIT.

package winapi

import (
	"syscall"
	"unsafe"

	"golang.org/x/sys/windows"
)

var _ unsafe.Pointer

// Do the interface allocations only once for common
// Errno values.
const (
	errnoERROR_IO_PENDING = 997
)

var (
	errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING)
	errERROR_EINVAL     error = syscall.EINVAL
)

// errnoErr returns common boxed Errno values, to prevent
// allocations at runtime.
func errnoErr(e syscall.Errno) error {
	switch e {
	case 0:
		return errERROR_EINVAL
	case errnoERROR_IO_PENDING:
		return errERROR_IO_PENDING
	}
	// TODO: add more here, after collecting data on the common
	// error values see on Windows. (perhaps when running
	// all.bat?)
	return e
}

var (
	modadvapi32   = windows.NewLazySystemDLL("advapi32.dll")
	modbindfltapi = windows.NewLazySystemDLL("bindfltapi.dll")
	modcfgmgr32   = windows.NewLazySystemDLL("cfgmgr32.dll")
	modiphlpapi   = windows.NewLazySystemDLL("iphlpapi.dll")
	modkernel32   = windows.NewLazySystemDLL("kernel32.dll")
	modnetapi32   = windows.NewLazySystemDLL("netapi32.dll")
	modntdll      = windows.NewLazySystemDLL("ntdll.dll")
	modoffreg     = windows.NewLazySystemDLL("offreg.dll")

	procLogonUserW                             = modadvapi32.NewProc("LogonUserW")
	procBfSetupFilter                          = modbindfltapi.NewProc("BfSetupFilter")
	procCM_Get_DevNode_PropertyW               = modcfgmgr32.NewProc("CM_Get_DevNode_PropertyW")
	procCM_Get_Device_ID_ListA                 = modcfgmgr32.NewProc("CM_Get_Device_ID_ListA")
	procCM_Get_Device_ID_List_SizeA            = modcfgmgr32.NewProc("CM_Get_Device_ID_List_SizeA")
	procCM_Locate_DevNodeW                     = modcfgmgr32.NewProc("CM_Locate_DevNodeW")
	procSetJobCompartmentId                    = modiphlpapi.NewProc("SetJobCompartmentId")
	procClosePseudoConsole                     = modkernel32.NewProc("ClosePseudoConsole")
	procCopyFileW                              = modkernel32.NewProc("CopyFileW")
	procCreatePseudoConsole                    = modkernel32.NewProc("CreatePseudoConsole")
	procCreateRemoteThread                     = modkernel32.NewProc("CreateRemoteThread")
	procGetActiveProcessorCount                = modkernel32.NewProc("GetActiveProcessorCount")
	procIsProcessInJob                         = modkernel32.NewProc("IsProcessInJob")
	procLocalAlloc                             = modkernel32.NewProc("LocalAlloc")
	procLocalFree                              = modkernel32.NewProc("LocalFree")
	procOpenJobObjectW                         = modkernel32.NewProc("OpenJobObjectW")
	procQueryInformationJobObject              = modkernel32.NewProc("QueryInformationJobObject")
	procQueryIoRateControlInformationJobObject = modkernel32.NewProc("QueryIoRateControlInformationJobObject")
	procResizePseudoConsole                    = modkernel32.NewProc("ResizePseudoConsole")
	procSearchPathW                            = modkernel32.NewProc("SearchPathW")
	procSetIoRateControlInformationJobObject   = modkernel32.NewProc("SetIoRateControlInformationJobObject")
	procNetLocalGroupAddMembers                = modnetapi32.NewProc("NetLocalGroupAddMembers")
	procNetLocalGroupGetInfo                   = modnetapi32.NewProc("NetLocalGroupGetInfo")
	procNetUserAdd                             = modnetapi32.NewProc("NetUserAdd")
	procNetUserDel                             = modnetapi32.NewProc("NetUserDel")
	procNtCreateFile                           = modntdll.NewProc("NtCreateFile")
	procNtCreateJobObject                      = modntdll.NewProc("NtCreateJobObject")
	procNtOpenDirectoryObject                  = modntdll.NewProc("NtOpenDirectoryObject")
	procNtOpenJobObject                        = modntdll.NewProc("NtOpenJobObject")
	procNtQueryDirectoryObject                 = modntdll.NewProc("NtQueryDirectoryObject")
	procNtQueryInformationProcess              = modntdll.NewProc("NtQueryInformationProcess")
	procNtQuerySystemInformation               = modntdll.NewProc("NtQuerySystemInformation")
	procNtSetInformationFile                   = modntdll.NewProc("NtSetInformationFile")
	procRtlNtStatusToDosError                  = modntdll.NewProc("RtlNtStatusToDosError")
	procORCloseHive                            = modoffreg.NewProc("ORCloseHive")
	procORCreateHive                           = modoffreg.NewProc("ORCreateHive")
	procORSaveHive                             = modoffreg.NewProc("ORSaveHive")
)

func LogonUser(username *uint16, domain *uint16, password *uint16, logonType uint32, logonProvider uint32, token *windows.Token) (err error) {
	r1, _, e1 := syscall.Syscall6(procLogonUserW.Addr(), 6, uintptr(unsafe.Pointer(username)), uintptr(unsafe.Pointer(domain)), uintptr(unsafe.Pointer(password)), uintptr(logonType), uintptr(logonProvider), uintptr(unsafe.Pointer(token)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func BfSetupFilter(jobHandle windows.Handle, flags uint32, virtRootPath *uint16, virtTargetPath *uint16, virtExceptions **uint16, virtExceptionPathCount uint32) (hr error) {
	hr = procBfSetupFilter.Find()
	if hr != nil {
		return
	}
	r0, _, _ := syscall.Syscall6(procBfSetupFilter.Addr(), 6, uintptr(jobHandle), uintptr(flags), uintptr(unsafe.Pointer(virtRootPath)), uintptr(unsafe.Pointer(virtTargetPath)), uintptr(unsafe.Pointer(virtExceptions)), uintptr(virtExceptionPathCount))
	if int32(r0) < 0 {
		if r0&0x1fff0000 == 0x00070000 {
			r0 &= 0xffff
		}
		hr = syscall.Errno(r0)
	}
	return
}

func CMGetDevNodeProperty(dnDevInst uint32, propertyKey *DevPropKey, propertyType *uint32, propertyBuffer *uint16, propertyBufferSize *uint32, uFlags uint32) (hr error) {
	r0, _, _ := syscall.Syscall6(procCM_Get_DevNode_PropertyW.Addr(), 6, uintptr(dnDevInst), uintptr(unsafe.Pointer(propertyKey)), uintptr(unsafe.Pointer(propertyType)), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(unsafe.Pointer(propertyBufferSize)), uintptr(uFlags))
	if int32(r0) < 0 {
		if r0&0x1fff0000 == 0x00070000 {
			r0 &= 0xffff
		}
		hr = syscall.Errno(r0)
	}
	return
}

func CMGetDeviceIDList(pszFilter *byte, buffer *byte, bufferLen uint32, uFlags uint32) (hr error) {
	r0, _, _ := syscall.Syscall6(procCM_Get_Device_ID_ListA.Addr(), 4, uintptr(unsafe.Pointer(pszFilter)), uintptr(unsafe.Pointer(buffer)), uintptr(bufferLen), uintptr(uFlags), 0, 0)
	if int32(r0) < 0 {
		if r0&0x1fff0000 == 0x00070000 {
			r0 &= 0xffff
		}
		hr = syscall.Errno(r0)
	}
	return
}

func CMGetDeviceIDListSize(pulLen *uint32, pszFilter *byte, uFlags uint32) (hr error) {
	r0, _, _ := syscall.Syscall(procCM_Get_Device_ID_List_SizeA.Addr(), 3, uintptr(unsafe.Pointer(pulLen)), uintptr(unsafe.Pointer(pszFilter)), uintptr(uFlags))
	if int32(r0) < 0 {
		if r0&0x1fff0000 == 0x00070000 {
			r0 &= 0xffff
		}
		hr = syscall.Errno(r0)
	}
	return
}

func CMLocateDevNode(pdnDevInst *uint32, pDeviceID string, uFlags uint32) (hr error) {
	var _p0 *uint16
	_p0, hr = syscall.UTF16PtrFromString(pDeviceID)
	if hr != nil {
		return
	}
	return _CMLocateDevNode(pdnDevInst, _p0, uFlags)
}

func _CMLocateDevNode(pdnDevInst *uint32, pDeviceID *uint16, uFlags uint32) (hr error) {
	r0, _, _ := syscall.Syscall(procCM_Locate_DevNodeW.Addr(), 3, uintptr(unsafe.Pointer(pdnDevInst)), uintptr(unsafe.Pointer(pDeviceID)), uintptr(uFlags))
	if int32(r0) < 0 {
		if r0&0x1fff0000 == 0x00070000 {
			r0 &= 0xffff
		}
		hr = syscall.Errno(r0)
	}
	return
}

func SetJobCompartmentId(handle windows.Handle, compartmentId uint32) (win32Err error) {
	r0, _, _ := syscall.Syscall(procSetJobCompartmentId.Addr(), 2, uintptr(handle), uintptr(compartmentId), 0)
	if r0 != 0 {
		win32Err = syscall.Errno(r0)
	}
	return
}

func ClosePseudoConsole(hpc windows.Handle) {
	syscall.Syscall(procClosePseudoConsole.Addr(), 1, uintptr(hpc), 0, 0)
	return
}

func CopyFileW(existingFileName *uint16, newFileName *uint16, failIfExists int32) (err error) {
	r1, _, e1 := syscall.Syscall(procCopyFileW.Addr(), 3, uintptr(unsafe.Pointer(existingFileName)), uintptr(unsafe.Pointer(newFileName)), uintptr(failIfExists))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func createPseudoConsole(size uint32, hInput windows.Handle, hOutput windows.Handle, dwFlags uint32, hpcon *windows.Handle) (hr error) {
	r0, _, _ := syscall.Syscall6(procCreatePseudoConsole.Addr(), 5, uintptr(size), uintptr(hInput), uintptr(hOutput), uintptr(dwFlags), uintptr(unsafe.Pointer(hpcon)), 0)
	if int32(r0) < 0 {
		if r0&0x1fff0000 == 0x00070000 {
			r0 &= 0xffff
		}
		hr = syscall.Errno(r0)
	}
	return
}

func CreateRemoteThread(process windows.Handle, sa *windows.SecurityAttributes, stackSize uint32, startAddr uintptr, parameter uintptr, creationFlags uint32, threadID *uint32) (handle windows.Handle, err error) {
	r0, _, e1 := syscall.Syscall9(procCreateRemoteThread.Addr(), 7, uintptr(process), uintptr(unsafe.Pointer(sa)), uintptr(stackSize), uintptr(startAddr), uintptr(parameter), uintptr(creationFlags), uintptr(unsafe.Pointer(threadID)), 0, 0)
	handle = windows.Handle(r0)
	if handle == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetActiveProcessorCount(groupNumber uint16) (amount uint32) {
	r0, _, _ := syscall.Syscall(procGetActiveProcessorCount.Addr(), 1, uintptr(groupNumber), 0, 0)
	amount = uint32(r0)
	return
}

func IsProcessInJob(procHandle windows.Handle, jobHandle windows.Handle, result *int32) (err error) {
	r1, _, e1 := syscall.Syscall(procIsProcessInJob.Addr(), 3, uintptr(procHandle), uintptr(jobHandle), uintptr(unsafe.Pointer(result)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func LocalAlloc(flags uint32, size int) (ptr uintptr) {
	r0, _, _ := syscall.Syscall(procLocalAlloc.Addr(), 2, uintptr(flags), uintptr(size), 0)
	ptr = uintptr(r0)
	return
}

func LocalFree(ptr uintptr) {
	syscall.Syscall(procLocalFree.Addr(), 1, uintptr(ptr), 0, 0)
	return
}

func OpenJobObject(desiredAccess uint32, inheritHandle int32, lpName *uint16) (handle windows.Handle, err error) {
	r0, _, e1 := syscall.Syscall(procOpenJobObjectW.Addr(), 3, uintptr(desiredAccess), uintptr(inheritHandle), uintptr(unsafe.Pointer(lpName)))
	handle = windows.Handle(r0)
	if handle == 0 {
		err = errnoErr(e1)
	}
	return
}

func QueryInformationJobObject(jobHandle windows.Handle, infoClass uint32, jobObjectInfo unsafe.Pointer, jobObjectInformationLength uint32, lpReturnLength *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procQueryInformationJobObject.Addr(), 5, uintptr(jobHandle), uintptr(infoClass), uintptr(jobObjectInfo), uintptr(jobObjectInformationLength), uintptr(unsafe.Pointer(lpReturnLength)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func QueryIoRateControlInformationJobObject(jobHandle windows.Handle, volumeName *uint16, ioRateControlInfo **JOBOBJECT_IO_RATE_CONTROL_INFORMATION, infoBlockCount *uint32) (ret uint32, err error) {
	r0, _, e1 := syscall.Syscall6(procQueryIoRateControlInformationJobObject.Addr(), 4, uintptr(jobHandle), uintptr(unsafe.Pointer(volumeName)), uintptr(unsafe.Pointer(ioRateControlInfo)), uintptr(unsafe.Pointer(infoBlockCount)), 0, 0)
	ret = uint32(r0)
	if ret == 0 {
		err = errnoErr(e1)
	}
	return
}

func resizePseudoConsole(hPc windows.Handle, size uint32) (hr error) {
	r0, _, _ := syscall.Syscall(procResizePseudoConsole.Addr(), 2, uintptr(hPc), uintptr(size), 0)
	if int32(r0) < 0 {
		if r0&0x1fff0000 == 0x00070000 {
			r0 &= 0xffff
		}
		hr = syscall.Errno(r0)
	}
	return
}

func SearchPath(lpPath *uint16, lpFileName *uint16, lpExtension *uint16, nBufferLength uint32, lpBuffer *uint16, lpFilePath *uint16) (size uint32, err error) {
	r0, _, e1 := syscall.Syscall6(procSearchPathW.Addr(), 6, uintptr(unsafe.Pointer(lpPath)), uintptr(unsafe.Pointer(lpFileName)), uintptr(unsafe.Pointer(lpExtension)), uintptr(nBufferLength), uintptr(unsafe.Pointer(lpBuffer)), uintptr(unsafe.Pointer(lpFilePath)))
	size = uint32(r0)
	if size == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetIoRateControlInformationJobObject(jobHandle windows.Handle, ioRateControlInfo *JOBOBJECT_IO_RATE_CONTROL_INFORMATION) (ret uint32, err error) {
	r0, _, e1 := syscall.Syscall(procSetIoRateControlInformationJobObject.Addr(), 2, uintptr(jobHandle), uintptr(unsafe.Pointer(ioRateControlInfo)), 0)
	ret = uint32(r0)
	if ret == 0 {
		err = errnoErr(e1)
	}
	return
}

func netLocalGroupAddMembers(serverName *uint16, groupName *uint16, level uint32, buf *byte, totalEntries uint32) (status error) {
	r0, _, _ := syscall.Syscall6(procNetLocalGroupAddMembers.Addr(), 5, uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(groupName)), uintptr(level), uintptr(unsafe.Pointer(buf)), uintptr(totalEntries), 0)
	if r0 != 0 {
		status = syscall.Errno(r0)
	}
	return
}

func netLocalGroupGetInfo(serverName *uint16, groupName *uint16, level uint32, bufptr **byte) (status error) {
	r0, _, _ := syscall.Syscall6(procNetLocalGroupGetInfo.Addr(), 4, uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(groupName)), uintptr(level), uintptr(unsafe.Pointer(bufptr)), 0, 0)
	if r0 != 0 {
		status = syscall.Errno(r0)
	}
	return
}

func netUserAdd(serverName *uint16, level uint32, buf *byte, parm_err *uint32) (status error) {
	r0, _, _ := syscall.Syscall6(procNetUserAdd.Addr(), 4, uintptr(unsafe.Pointer(serverName)), uintptr(level), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(parm_err)), 0, 0)
	if r0 != 0 {
		status = syscall.Errno(r0)
	}
	return
}

func netUserDel(serverName *uint16, username *uint16) (status error) {
	r0, _, _ := syscall.Syscall(procNetUserDel.Addr(), 2, uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(username)), 0)
	if r0 != 0 {
		status = syscall.Errno(r0)
	}
	return
}

func NtCreateFile(handle *uintptr, accessMask uint32, oa *ObjectAttributes, iosb *IOStatusBlock, allocationSize *uint64, fileAttributes uint32, shareAccess uint32, createDisposition uint32, createOptions uint32, eaBuffer *byte, eaLength uint32) (status uint32) {
	r0, _, _ := syscall.Syscall12(procNtCreateFile.Addr(), 11, uintptr(unsafe.Pointer(handle)), uintptr(accessMask), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(allocationSize)), uintptr(fileAttributes), uintptr(shareAccess), uintptr(createDisposition), uintptr(createOptions), uintptr(unsafe.Pointer(eaBuffer)), uintptr(eaLength), 0)
	status = uint32(r0)
	return
}

func NtCreateJobObject(jobHandle *windows.Handle, desiredAccess uint32, objAttributes *ObjectAttributes) (status uint32) {
	r0, _, _ := syscall.Syscall(procNtCreateJobObject.Addr(), 3, uintptr(unsafe.Pointer(jobHandle)), uintptr(desiredAccess), uintptr(unsafe.Pointer(objAttributes)))
	status = uint32(r0)
	return
}

func NtOpenDirectoryObject(handle *uintptr, accessMask uint32, oa *ObjectAttributes) (status uint32) {
	r0, _, _ := syscall.Syscall(procNtOpenDirectoryObject.Addr(), 3, uintptr(unsafe.Pointer(handle)), uintptr(accessMask), uintptr(unsafe.Pointer(oa)))
	status = uint32(r0)
	return
}

func NtOpenJobObject(jobHandle *windows.Handle, desiredAccess uint32, objAttributes *ObjectAttributes) (status uint32) {
	r0, _, _ := syscall.Syscall(procNtOpenJobObject.Addr(), 3, uintptr(unsafe.Pointer(jobHandle)), uintptr(desiredAccess), uintptr(unsafe.Pointer(objAttributes)))
	status = uint32(r0)
	return
}

func NtQueryDirectoryObject(handle uintptr, buffer *byte, length uint32, singleEntry bool, restartScan bool, context *uint32, returnLength *uint32) (status uint32) {
	var _p0 uint32
	if singleEntry {
		_p0 = 1
	}
	var _p1 uint32
	if restartScan {
		_p1 = 1
	}
	r0, _, _ := syscall.Syscall9(procNtQueryDirectoryObject.Addr(), 7, uintptr(handle), uintptr(unsafe.Pointer(buffer)), uintptr(length), uintptr(_p0), uintptr(_p1), uintptr(unsafe.Pointer(context)), uintptr(unsafe.Pointer(returnLength)), 0, 0)
	status = uint32(r0)
	return
}

func NtQueryInformationProcess(processHandle windows.Handle, processInfoClass uint32, processInfo unsafe.Pointer, processInfoLength uint32, returnLength *uint32) (status uint32) {
	r0, _, _ := syscall.Syscall6(procNtQueryInformationProcess.Addr(), 5, uintptr(processHandle), uintptr(processInfoClass), uintptr(processInfo), uintptr(processInfoLength), uintptr(unsafe.Pointer(returnLength)), 0)
	status = uint32(r0)
	return
}

func NtQuerySystemInformation(systemInfoClass int, systemInformation unsafe.Pointer, systemInfoLength uint32, returnLength *uint32) (status uint32) {
	r0, _, _ := syscall.Syscall6(procNtQuerySystemInformation.Addr(), 4, uintptr(systemInfoClass), uintptr(systemInformation), uintptr(systemInfoLength), uintptr(unsafe.Pointer(returnLength)), 0, 0)
	status = uint32(r0)
	return
}

func NtSetInformationFile(handle uintptr, iosb *IOStatusBlock, information uintptr, length uint32, class uint32) (status uint32) {
	r0, _, _ := syscall.Syscall6(procNtSetInformationFile.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(iosb)), uintptr(information), uintptr(length), uintptr(class), 0)
	status = uint32(r0)
	return
}

func RtlNtStatusToDosError(status uint32) (winerr error) {
	r0, _, _ := syscall.Syscall(procRtlNtStatusToDosError.Addr(), 1, uintptr(status), 0, 0)
	if r0 != 0 {
		winerr = syscall.Errno(r0)
	}
	return
}

func ORCloseHive(key syscall.Handle) (regerrno error) {
	r0, _, _ := syscall.Syscall(procORCloseHive.Addr(), 1, uintptr(key), 0, 0)
	if r0 != 0 {
		regerrno = syscall.Errno(r0)
	}
	return
}

func ORCreateHive(key *syscall.Handle) (regerrno error) {
	r0, _, _ := syscall.Syscall(procORCreateHive.Addr(), 1, uintptr(unsafe.Pointer(key)), 0, 0)
	if r0 != 0 {
		regerrno = syscall.Errno(r0)
	}
	return
}

func ORSaveHive(key syscall.Handle, file string, OsMajorVersion uint32, OsMinorVersion uint32) (regerrno error) {
	var _p0 *uint16
	_p0, regerrno = syscall.UTF16PtrFromString(file)
	if regerrno != nil {
		return
	}
	return _ORSaveHive(key, _p0, OsMajorVersion, OsMinorVersion)
}

func _ORSaveHive(key syscall.Handle, file *uint16, OsMajorVersion uint32, OsMinorVersion uint32) (regerrno error) {
	r0, _, _ := syscall.Syscall6(procORSaveHive.Addr(), 4, uintptr(key), uintptr(unsafe.Pointer(file)), uintptr(OsMajorVersion), uintptr(OsMinorVersion), 0, 0)
	if r0 != 0 {
		regerrno = syscall.Errno(r0)
	}
	return
}
  070701000001DC000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/osversion 070701000001DD000081A4000000000000000000000001645E367C0000057F000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/osversion/osversion_windows.go    package osversion

import (
	"fmt"
	"sync"

	"golang.org/x/sys/windows"
)

// OSVersion is a wrapper for Windows version information
// https://msdn.microsoft.com/en-us/library/windows/desktop/ms724439(v=vs.85).aspx
type OSVersion struct {
	Version      uint32
	MajorVersion uint8
	MinorVersion uint8
	Build        uint16
}

var (
	osv  OSVersion
	once sync.Once
)

// Get gets the operating system version on Windows.
// The calling application must be manifested to get the correct version information.
func Get() OSVersion {
	once.Do(func() {
		var err error
		osv = OSVersion{}
		osv.Version, err = windows.GetVersion()
		if err != nil {
			// GetVersion never fails.
			panic(err)
		}
		osv.MajorVersion = uint8(osv.Version & 0xFF)
		osv.MinorVersion = uint8(osv.Version >> 8 & 0xFF)
		osv.Build = uint16(osv.Version >> 16)
	})
	return osv
}

// Build gets the build-number on Windows
// The calling application must be manifested to get the correct version information.
func Build() uint16 {
	return Get().Build
}

// String returns the OSVersion formatted as a string. It implements the
// [fmt.Stringer] interface.
func (osv OSVersion) String() string {
	return fmt.Sprintf("%d.%d.%d", osv.MajorVersion, osv.MinorVersion, osv.Build)
}

// ToString returns the OSVersion formatted as a string.
//
// Deprecated: use [OSVersion.String].
func (osv OSVersion) ToString() string {
	return osv.String()
}
 070701000001DE000081A4000000000000000000000001645E367C00000B48000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/osversion/windowsbuilds.go    package osversion

// Windows Client and Server build numbers.
//
// See:
// https://learn.microsoft.com/en-us/windows/release-health/release-information
// https://learn.microsoft.com/en-us/windows/release-health/windows-server-release-info
// https://learn.microsoft.com/en-us/windows/release-health/windows11-release-information
const (
	// RS1 (version 1607, codename "Redstone 1") corresponds to Windows Server
	// 2016 (ltsc2016) and Windows 10 (Anniversary Update).
	RS1 = 14393
	// V1607 (version 1607, codename "Redstone 1") is an alias for [RS1].
	V1607 = RS1
	// LTSC2016 (Windows Server 2016) is an alias for [RS1].
	LTSC2016 = RS1

	// RS2 (version 1703, codename "Redstone 2") was a client-only update, and
	// corresponds to Windows 10 (Creators Update).
	RS2 = 15063
	// V1703 (version 1703, codename "Redstone 2") is an alias for [RS2].
	V1703 = RS2

	// RS3 (version 1709, codename "Redstone 3") corresponds to Windows Server
	// 1709 (Semi-Annual Channel (SAC)), and Windows 10 (Fall Creators Update).
	RS3 = 16299
	// V1709 (version 1709, codename "Redstone 3") is an alias for [RS3].
	V1709 = RS3

	// RS4 (version 1803, codename "Redstone 4") corresponds to Windows Server
	// 1803 (Semi-Annual Channel (SAC)), and Windows 10 (April 2018 Update).
	RS4 = 17134
	// V1803 (version 1803, codename "Redstone 4") is an alias for [RS4].
	V1803 = RS4

	// RS5 (version 1809, codename "Redstone 5") corresponds to Windows Server
	// 2019 (ltsc2019), and Windows 10 (October 2018 Update).
	RS5 = 17763
	// V1809 (version 1809, codename "Redstone 5") is an alias for [RS5].
	V1809 = RS5
	// LTSC2019 (Windows Server 2019) is an alias for [RS5].
	LTSC2019 = RS5

	// V19H1 (version 1903, codename 19H1) corresponds to Windows Server 1903 (semi-annual
	// channel).
	V19H1 = 18362
	// V1903 (version 1903) is an alias for [V19H1].
	V1903 = V19H1

	// V19H2 (version 1909, codename 19H2) corresponds to Windows Server 1909 (semi-annual
	// channel).
	V19H2 = 18363
	// V1909 (version 1909) is an alias for [V19H2].
	V1909 = V19H2

	// V20H1 (version 2004, codename 20H1) corresponds to Windows Server 2004 (semi-annual
	// channel).
	V20H1 = 19041
	// V2004 (version 2004) is an alias for [V20H1].
	V2004 = V20H1

	// V20H2 corresponds to Windows Server 20H2 (semi-annual channel).
	V20H2 = 19042

	// V21H1 corresponds to Windows Server 21H1 (semi-annual channel).
	V21H1 = 19043

	// V21H2Win10 corresponds to Windows 10 (November 2021 Update).
	V21H2Win10 = 19044

	// V21H2Server corresponds to Windows Server 2022 (ltsc2022).
	V21H2Server = 20348
	// LTSC2022 (Windows Server 2022) is an alias for [V21H2Server]
	LTSC2022 = V21H2Server

	// V21H2Win11 corresponds to Windows 11 (original release).
	V21H2Win11 = 22000

	// V22H2Win10 corresponds to Windows 10 (2022 Update).
	V22H2Win10 = 19045

	// V22H2Win11 corresponds to Windows 11 (2022 Update).
	V22H2Win11 = 22621
)
070701000001DF000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/pkg   070701000001E0000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/pkg/ociwclayer    070701000001E1000081A4000000000000000000000001645E367C0000009E000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/pkg/ociwclayer/doc.go // Package ociwclayer provides functions for importing and exporting Windows
// container layers from and to their OCI tar representation.
package ociwclayer
  070701000001E2000081A4000000000000000000000001645E367C000009F6000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/pkg/ociwclayer/export.go  //go:build windows

package ociwclayer

import (
	"archive/tar"
	"context"
	"io"
	"path/filepath"

	"github.com/Microsoft/go-winio/backuptar"
	"github.com/Microsoft/hcsshim/internal/wclayer"
)

// ExportLayerToTar writes an OCI layer tar stream from the provided on-disk layer.
// The caller must specify the parent layers, if any, ordered from lowest to
// highest layer.
//
// The layer will be mounted for this process, so the caller should ensure that
// it is not currently mounted.
func ExportLayerToTar(ctx context.Context, w io.Writer, path string, parentLayerPaths []string) error {
	err := wclayer.ActivateLayer(ctx, path)
	if err != nil {
		return err
	}
	defer func() {
		_ = wclayer.DeactivateLayer(ctx, path)
	}()

	// Prepare and unprepare the layer to ensure that it has been initialized.
	err = wclayer.PrepareLayer(ctx, path, parentLayerPaths)
	if err != nil {
		return err
	}
	err = wclayer.UnprepareLayer(ctx, path)
	if err != nil {
		return err
	}

	r, err := wclayer.NewLayerReader(ctx, path, parentLayerPaths)
	if err != nil {
		return err
	}

	err = writeTarFromLayer(ctx, r, w)
	cerr := r.Close()
	if err != nil {
		return err
	}
	return cerr
}

func writeTarFromLayer(ctx context.Context, r wclayer.LayerReader, w io.Writer) error {
	linkRecords := make(map[[16]byte]string)

	t := tar.NewWriter(w)
	for {
		select {
		case <-ctx.Done():
			return ctx.Err()
		default:
		}

		name, size, fileInfo, err := r.Next()
		if err == io.EOF {
			break
		}
		if err != nil {
			return err
		}
		if fileInfo == nil {
			// Write a whiteout file.
			hdr := &tar.Header{
				Name: filepath.ToSlash(filepath.Join(filepath.Dir(name), whiteoutPrefix+filepath.Base(name))),
			}
			err := t.WriteHeader(hdr)
			if err != nil {
				return err
			}
		} else {
			numberOfLinks, fileIDInfo, err := r.LinkInfo()
			if err != nil {
				return err
			}
			if numberOfLinks > 1 {
				if linkName, ok := linkRecords[fileIDInfo.FileID]; ok {
					// We've seen this file before, by another name, so put a hardlink in the tar stream.
					hdr := backuptar.BasicInfoHeader(name, 0, fileInfo)
					hdr.Mode = 0644
					hdr.Typeflag = tar.TypeLink
					hdr.Linkname = linkName
					if err := t.WriteHeader(hdr); err != nil {
						return err
					}
					continue
				}

				// All subsequent names for this file will be hard-linked to this name
				linkRecords[fileIDInfo.FileID] = filepath.ToSlash(name)
			}

			err = backuptar.WriteTarFileFromBackupStream(t, r, name, size, fileInfo)
			if err != nil {
				return err
			}
		}
	}
	return t.Close()
}
  070701000001E3000081A4000000000000000000000001645E367C00000EE2000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/Microsoft/hcsshim/pkg/ociwclayer/import.go  //go:build windows

package ociwclayer

import (
	"archive/tar"
	"bufio"
	"context"
	"io"
	"os"
	"path"
	"path/filepath"
	"strings"

	winio "github.com/Microsoft/go-winio"
	"github.com/Microsoft/go-winio/backuptar"
	"github.com/Microsoft/hcsshim/internal/wclayer"
)

const whiteoutPrefix = ".wh."

var (
	// mutatedFiles is a list of files that are mutated by the import process
	// and must be backed up and restored.
	mutatedFiles = map[string]string{
		"UtilityVM/Files/EFI/Microsoft/Boot/BCD":      "bcd.bak",
		"UtilityVM/Files/EFI/Microsoft/Boot/BCD.LOG":  "bcd.log.bak",
		"UtilityVM/Files/EFI/Microsoft/Boot/BCD.LOG1": "bcd.log1.bak",
		"UtilityVM/Files/EFI/Microsoft/Boot/BCD.LOG2": "bcd.log2.bak",
	}
)

// ImportLayerFromTar  reads a layer from an OCI layer tar stream and extracts it to the
// specified path. The caller must specify the parent layers, if any, ordered
// from lowest to highest layer.
//
// The caller must ensure that the thread or process has acquired backup and
// restore privileges.
//
// This function returns the total size of the layer's files, in bytes.
func ImportLayerFromTar(ctx context.Context, r io.Reader, path string, parentLayerPaths []string) (int64, error) {
	err := os.MkdirAll(path, 0)
	if err != nil {
		return 0, err
	}
	w, err := wclayer.NewLayerWriter(ctx, path, parentLayerPaths)
	if err != nil {
		return 0, err
	}
	n, err := writeLayerFromTar(ctx, r, w, path)
	cerr := w.Close()
	if err != nil {
		return 0, err
	}
	if cerr != nil {
		return 0, cerr
	}
	return n, nil
}

func writeLayerFromTar(ctx context.Context, r io.Reader, w wclayer.LayerWriter, root string) (int64, error) {
	t := tar.NewReader(r)
	hdr, err := t.Next()
	totalSize := int64(0)
	buf := bufio.NewWriter(nil)
	for err == nil {
		select {
		case <-ctx.Done():
			return 0, ctx.Err()
		default:
		}

		base := path.Base(hdr.Name)
		if strings.HasPrefix(base, whiteoutPrefix) {
			name := path.Join(path.Dir(hdr.Name), base[len(whiteoutPrefix):])
			err = w.Remove(filepath.FromSlash(name))
			if err != nil {
				return 0, err
			}
			hdr, err = t.Next()
		} else if hdr.Typeflag == tar.TypeLink {
			err = w.AddLink(filepath.FromSlash(hdr.Name), filepath.FromSlash(hdr.Linkname))
			if err != nil {
				return 0, err
			}
			hdr, err = t.Next()
		} else {
			var (
				name     string
				size     int64
				fileInfo *winio.FileBasicInfo
			)
			name, size, fileInfo, err = backuptar.FileInfoFromHeader(hdr)
			if err != nil {
				return 0, err
			}
			err = w.Add(filepath.FromSlash(name), fileInfo)
			if err != nil {
				return 0, err
			}
			hdr, err = writeBackupStreamFromTarAndSaveMutatedFiles(buf, w, t, hdr, root)
			totalSize += size
		}
	}
	if err != io.EOF {
		return 0, err
	}
	return totalSize, nil
}

// writeBackupStreamFromTarAndSaveMutatedFiles reads data from a tar stream and
// writes it to a backup stream, and also saves any files that will be mutated
// by the import layer process to a backup location.
func writeBackupStreamFromTarAndSaveMutatedFiles(buf *bufio.Writer, w io.Writer, t *tar.Reader, hdr *tar.Header, root string) (nextHdr *tar.Header, err error) {
	var bcdBackup *os.File
	var bcdBackupWriter *winio.BackupFileWriter
	if backupPath, ok := mutatedFiles[hdr.Name]; ok {
		bcdBackup, err = os.Create(filepath.Join(root, backupPath))
		if err != nil {
			return nil, err
		}
		defer func() {
			cerr := bcdBackup.Close()
			if err == nil {
				err = cerr
			}
		}()

		bcdBackupWriter = winio.NewBackupFileWriter(bcdBackup, false)
		defer func() {
			cerr := bcdBackupWriter.Close()
			if err == nil {
				err = cerr
			}
		}()

		buf.Reset(io.MultiWriter(w, bcdBackupWriter))
	} else {
		buf.Reset(w)
	}

	defer func() {
		ferr := buf.Flush()
		if err == nil {
			err = ferr
		}
	}()

	return backuptar.WriteBackupStreamFromTarFile(buf, t, hdr)
}
  070701000001E4000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003100000000elemental-cli-0.3.1/vendor/github.com/ProtonMail  070701000001E5000041ED000000000000000000000008645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto    070701000001E6000081A4000000000000000000000001645E367C000000AE000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/AUTHORS    # This source code refers to The Go Authors for copyright purposes.
# The master list of authors is in the main Go distribution,
# visible at https://tip.golang.org/AUTHORS.
  070701000001E7000081A4000000000000000000000001645E367C000000AB000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/CONTRIBUTORS   # This source code was written by the Go contributors.
# The master list of contributors is in the main Go distribution,
# visible at https://tip.golang.org/CONTRIBUTORS.
 070701000001E8000081A4000000000000000000000001645E367C000005C7000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/LICENSE    Copyright (c) 2009 The Go Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 070701000001E9000081A4000000000000000000000001645E367C00000517000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/PATENTS    Additional IP Rights Grant (Patents)

"This implementation" means the copyrightable works distributed by
Google as part of the Go project.

Google hereby grants to You a perpetual, worldwide, non-exclusive,
no-charge, royalty-free, irrevocable (except as stated in this section)
patent license to make, have made, use, offer to sell, sell, import,
transfer and otherwise run, modify and propagate the contents of this
implementation of Go, where such license applies only to those patent
claims, both currently owned or controlled by Google and acquired in
the future, licensable by Google that are necessarily infringed by this
implementation of Go.  This grant does not include claims that would be
infringed only as a consequence of further modification of this
implementation.  If you or your agent or exclusive licensee institute or
order or agree to the institution of patent litigation against any
entity (including a cross-claim or counterclaim in a lawsuit) alleging
that this implementation of Go or any code incorporated within this
implementation of Go constitutes direct or contributory patent
infringement, or inducement of patent infringement, then any patent
rights granted to you under this License for this implementation of Go
shall terminate as of the date such litigation is filed.
 070701000001EA000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/bitcurves  070701000001EB000081A4000000000000000000000001645E367C00002F2B000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/bitcurves/bitcurve.go  package bitcurves

// Copyright 2010 The Go Authors. All rights reserved.
// Copyright 2011 ThePiachu. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package bitelliptic implements several Koblitz elliptic curves over prime
// fields.

// This package operates, internally, on Jacobian coordinates. For a given
// (x, y) position on the curve, the Jacobian coordinates are (x1, y1, z1)
// where x = x1/z1² and y = y1/z1³. The greatest speedups come when the whole
// calculation can be performed within the transform (as in ScalarMult and
// ScalarBaseMult). But even for Add and Double, it's faster to apply and
// reverse the transform than to operate in affine coordinates.

import (
	"crypto/elliptic"
	"io"
	"math/big"
	"sync"
)

// A BitCurve represents a Koblitz Curve with a=0.
// See http://www.hyperelliptic.org/EFD/g1p/auto-shortw.html
type BitCurve struct {
	Name    string
	P       *big.Int // the order of the underlying field
	N       *big.Int // the order of the base point
	B       *big.Int // the constant of the BitCurve equation
	Gx, Gy  *big.Int // (x,y) of the base point
	BitSize int      // the size of the underlying field
}

// Params returns the parameters of the given BitCurve (see BitCurve struct)
func (bitCurve *BitCurve) Params() (cp *elliptic.CurveParams) {
	cp = new(elliptic.CurveParams)
	cp.Name = bitCurve.Name
	cp.P = bitCurve.P
	cp.N = bitCurve.N
	cp.Gx = bitCurve.Gx
	cp.Gy = bitCurve.Gy
	cp.BitSize = bitCurve.BitSize
	return cp
}

// IsOnCurve returns true if the given (x,y) lies on the BitCurve.
func (bitCurve *BitCurve) IsOnCurve(x, y *big.Int) bool {
	// y² = x³ + b
	y2 := new(big.Int).Mul(y, y) //y²
	y2.Mod(y2, bitCurve.P)       //y²%P

	x3 := new(big.Int).Mul(x, x) //x²
	x3.Mul(x3, x)                //x³

	x3.Add(x3, bitCurve.B) //x³+B
	x3.Mod(x3, bitCurve.P) //(x³+B)%P

	return x3.Cmp(y2) == 0
}

// affineFromJacobian reverses the Jacobian transform. See the comment at the
// top of the file.
func (bitCurve *BitCurve) affineFromJacobian(x, y, z *big.Int) (xOut, yOut *big.Int) {
	if z.Cmp(big.NewInt(0)) == 0 {
		panic("bitcurve: Can't convert to affine with Jacobian Z = 0")
	}
	// x = YZ^2 mod P
	zinv := new(big.Int).ModInverse(z, bitCurve.P)
	zinvsq := new(big.Int).Mul(zinv, zinv)

	xOut = new(big.Int).Mul(x, zinvsq)
	xOut.Mod(xOut, bitCurve.P)
	// y = YZ^3 mod P
	zinvsq.Mul(zinvsq, zinv)
	yOut = new(big.Int).Mul(y, zinvsq)
	yOut.Mod(yOut, bitCurve.P)
	return xOut, yOut
}

// Add returns the sum of (x1,y1) and (x2,y2)
func (bitCurve *BitCurve) Add(x1, y1, x2, y2 *big.Int) (*big.Int, *big.Int) {
	z := new(big.Int).SetInt64(1)
	x, y, z := bitCurve.addJacobian(x1, y1, z, x2, y2, z)
	return bitCurve.affineFromJacobian(x, y, z)
}

// addJacobian takes two points in Jacobian coordinates, (x1, y1, z1) and
// (x2, y2, z2) and returns their sum, also in Jacobian form.
func (bitCurve *BitCurve) addJacobian(x1, y1, z1, x2, y2, z2 *big.Int) (*big.Int, *big.Int, *big.Int) {
	// See http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-add-2007-bl
	z1z1 := new(big.Int).Mul(z1, z1)
	z1z1.Mod(z1z1, bitCurve.P)
	z2z2 := new(big.Int).Mul(z2, z2)
	z2z2.Mod(z2z2, bitCurve.P)

	u1 := new(big.Int).Mul(x1, z2z2)
	u1.Mod(u1, bitCurve.P)
	u2 := new(big.Int).Mul(x2, z1z1)
	u2.Mod(u2, bitCurve.P)
	h := new(big.Int).Sub(u2, u1)
	if h.Sign() == -1 {
		h.Add(h, bitCurve.P)
	}
	i := new(big.Int).Lsh(h, 1)
	i.Mul(i, i)
	j := new(big.Int).Mul(h, i)

	s1 := new(big.Int).Mul(y1, z2)
	s1.Mul(s1, z2z2)
	s1.Mod(s1, bitCurve.P)
	s2 := new(big.Int).Mul(y2, z1)
	s2.Mul(s2, z1z1)
	s2.Mod(s2, bitCurve.P)
	r := new(big.Int).Sub(s2, s1)
	if r.Sign() == -1 {
		r.Add(r, bitCurve.P)
	}
	r.Lsh(r, 1)
	v := new(big.Int).Mul(u1, i)

	x3 := new(big.Int).Set(r)
	x3.Mul(x3, x3)
	x3.Sub(x3, j)
	x3.Sub(x3, v)
	x3.Sub(x3, v)
	x3.Mod(x3, bitCurve.P)

	y3 := new(big.Int).Set(r)
	v.Sub(v, x3)
	y3.Mul(y3, v)
	s1.Mul(s1, j)
	s1.Lsh(s1, 1)
	y3.Sub(y3, s1)
	y3.Mod(y3, bitCurve.P)

	z3 := new(big.Int).Add(z1, z2)
	z3.Mul(z3, z3)
	z3.Sub(z3, z1z1)
	if z3.Sign() == -1 {
		z3.Add(z3, bitCurve.P)
	}
	z3.Sub(z3, z2z2)
	if z3.Sign() == -1 {
		z3.Add(z3, bitCurve.P)
	}
	z3.Mul(z3, h)
	z3.Mod(z3, bitCurve.P)

	return x3, y3, z3
}

// Double returns 2*(x,y)
func (bitCurve *BitCurve) Double(x1, y1 *big.Int) (*big.Int, *big.Int) {
	z1 := new(big.Int).SetInt64(1)
	return bitCurve.affineFromJacobian(bitCurve.doubleJacobian(x1, y1, z1))
}

// doubleJacobian takes a point in Jacobian coordinates, (x, y, z), and
// returns its double, also in Jacobian form.
func (bitCurve *BitCurve) doubleJacobian(x, y, z *big.Int) (*big.Int, *big.Int, *big.Int) {
	// See http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-dbl-2009-l

	a := new(big.Int).Mul(x, x) //X1²
	b := new(big.Int).Mul(y, y) //Y1²
	c := new(big.Int).Mul(b, b) //B²

	d := new(big.Int).Add(x, b) //X1+B
	d.Mul(d, d)                 //(X1+B)²
	d.Sub(d, a)                 //(X1+B)²-A
	d.Sub(d, c)                 //(X1+B)²-A-C
	d.Mul(d, big.NewInt(2))     //2*((X1+B)²-A-C)

	e := new(big.Int).Mul(big.NewInt(3), a) //3*A
	f := new(big.Int).Mul(e, e)             //E²

	x3 := new(big.Int).Mul(big.NewInt(2), d) //2*D
	x3.Sub(f, x3)                            //F-2*D
	x3.Mod(x3, bitCurve.P)

	y3 := new(big.Int).Sub(d, x3)                  //D-X3
	y3.Mul(e, y3)                                  //E*(D-X3)
	y3.Sub(y3, new(big.Int).Mul(big.NewInt(8), c)) //E*(D-X3)-8*C
	y3.Mod(y3, bitCurve.P)

	z3 := new(big.Int).Mul(y, z) //Y1*Z1
	z3.Mul(big.NewInt(2), z3)    //3*Y1*Z1
	z3.Mod(z3, bitCurve.P)

	return x3, y3, z3
}

//TODO: double check if it is okay
// ScalarMult returns k*(Bx,By) where k is a number in big-endian form.
func (bitCurve *BitCurve) ScalarMult(Bx, By *big.Int, k []byte) (*big.Int, *big.Int) {
	// We have a slight problem in that the identity of the group (the
	// point at infinity) cannot be represented in (x, y) form on a finite
	// machine. Thus the standard add/double algorithm has to be tweaked
	// slightly: our initial state is not the identity, but x, and we
	// ignore the first true bit in |k|.  If we don't find any true bits in
	// |k|, then we return nil, nil, because we cannot return the identity
	// element.

	Bz := new(big.Int).SetInt64(1)
	x := Bx
	y := By
	z := Bz

	seenFirstTrue := false
	for _, byte := range k {
		for bitNum := 0; bitNum < 8; bitNum++ {
			if seenFirstTrue {
				x, y, z = bitCurve.doubleJacobian(x, y, z)
			}
			if byte&0x80 == 0x80 {
				if !seenFirstTrue {
					seenFirstTrue = true
				} else {
					x, y, z = bitCurve.addJacobian(Bx, By, Bz, x, y, z)
				}
			}
			byte <<= 1
		}
	}

	if !seenFirstTrue {
		return nil, nil
	}

	return bitCurve.affineFromJacobian(x, y, z)
}

// ScalarBaseMult returns k*G, where G is the base point of the group and k is
// an integer in big-endian form.
func (bitCurve *BitCurve) ScalarBaseMult(k []byte) (*big.Int, *big.Int) {
	return bitCurve.ScalarMult(bitCurve.Gx, bitCurve.Gy, k)
}

var mask = []byte{0xff, 0x1, 0x3, 0x7, 0xf, 0x1f, 0x3f, 0x7f}

//TODO: double check if it is okay
// GenerateKey returns a public/private key pair. The private key is generated
// using the given reader, which must return random data.
func (bitCurve *BitCurve) GenerateKey(rand io.Reader) (priv []byte, x, y *big.Int, err error) {
	byteLen := (bitCurve.BitSize + 7) >> 3
	priv = make([]byte, byteLen)

	for x == nil {
		_, err = io.ReadFull(rand, priv)
		if err != nil {
			return
		}
		// We have to mask off any excess bits in the case that the size of the
		// underlying field is not a whole number of bytes.
		priv[0] &= mask[bitCurve.BitSize%8]
		// This is because, in tests, rand will return all zeros and we don't
		// want to get the point at infinity and loop forever.
		priv[1] ^= 0x42
		x, y = bitCurve.ScalarBaseMult(priv)
	}
	return
}

// Marshal converts a point into the form specified in section 4.3.6 of ANSI
// X9.62.
func (bitCurve *BitCurve) Marshal(x, y *big.Int) []byte {
	byteLen := (bitCurve.BitSize + 7) >> 3

	ret := make([]byte, 1+2*byteLen)
	ret[0] = 4 // uncompressed point

	xBytes := x.Bytes()
	copy(ret[1+byteLen-len(xBytes):], xBytes)
	yBytes := y.Bytes()
	copy(ret[1+2*byteLen-len(yBytes):], yBytes)
	return ret
}

// Unmarshal converts a point, serialised by Marshal, into an x, y pair. On
// error, x = nil.
func (bitCurve *BitCurve) Unmarshal(data []byte) (x, y *big.Int) {
	byteLen := (bitCurve.BitSize + 7) >> 3
	if len(data) != 1+2*byteLen {
		return
	}
	if data[0] != 4 { // uncompressed form
		return
	}
	x = new(big.Int).SetBytes(data[1 : 1+byteLen])
	y = new(big.Int).SetBytes(data[1+byteLen:])
	return
}

//curve parameters taken from:
//http://www.secg.org/collateral/sec2_final.pdf

var initonce sync.Once
var secp160k1 *BitCurve
var secp192k1 *BitCurve
var secp224k1 *BitCurve
var secp256k1 *BitCurve

func initAll() {
	initS160()
	initS192()
	initS224()
	initS256()
}

func initS160() {
	// See SEC 2 section 2.4.1
	secp160k1 = new(BitCurve)
	secp160k1.Name = "secp160k1"
	secp160k1.P, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73", 16)
	secp160k1.N, _ = new(big.Int).SetString("0100000000000000000001B8FA16DFAB9ACA16B6B3", 16)
	secp160k1.B, _ = new(big.Int).SetString("0000000000000000000000000000000000000007", 16)
	secp160k1.Gx, _ = new(big.Int).SetString("3B4C382CE37AA192A4019E763036F4F5DD4D7EBB", 16)
	secp160k1.Gy, _ = new(big.Int).SetString("938CF935318FDCED6BC28286531733C3F03C4FEE", 16)
	secp160k1.BitSize = 160
}

func initS192() {
	// See SEC 2 section 2.5.1
	secp192k1 = new(BitCurve)
	secp192k1.Name = "secp192k1"
	secp192k1.P, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37", 16)
	secp192k1.N, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D", 16)
	secp192k1.B, _ = new(big.Int).SetString("000000000000000000000000000000000000000000000003", 16)
	secp192k1.Gx, _ = new(big.Int).SetString("DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D", 16)
	secp192k1.Gy, _ = new(big.Int).SetString("9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D", 16)
	secp192k1.BitSize = 192
}

func initS224() {
	// See SEC 2 section 2.6.1
	secp224k1 = new(BitCurve)
	secp224k1.Name = "secp224k1"
	secp224k1.P, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFE56D", 16)
	secp224k1.N, _ = new(big.Int).SetString("010000000000000000000000000001DCE8D2EC6184CAF0A971769FB1F7", 16)
	secp224k1.B, _ = new(big.Int).SetString("00000000000000000000000000000000000000000000000000000005", 16)
	secp224k1.Gx, _ = new(big.Int).SetString("A1455B334DF099DF30FC28A169A467E9E47075A90F7E650EB6B7A45C", 16)
	secp224k1.Gy, _ = new(big.Int).SetString("7E089FED7FBA344282CAFBD6F7E319F7C0B0BD59E2CA4BDB556D61A5", 16)
	secp224k1.BitSize = 224
}

func initS256() {
	// See SEC 2 section 2.7.1
	secp256k1 = new(BitCurve)
	secp256k1.Name = "secp256k1"
	secp256k1.P, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F", 16)
	secp256k1.N, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", 16)
	secp256k1.B, _ = new(big.Int).SetString("0000000000000000000000000000000000000000000000000000000000000007", 16)
	secp256k1.Gx, _ = new(big.Int).SetString("79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", 16)
	secp256k1.Gy, _ = new(big.Int).SetString("483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8", 16)
	secp256k1.BitSize = 256
}

// S160 returns a BitCurve which implements secp160k1 (see SEC 2 section 2.4.1)
func S160() *BitCurve {
	initonce.Do(initAll)
	return secp160k1
}

// S192 returns a BitCurve which implements secp192k1 (see SEC 2 section 2.5.1)
func S192() *BitCurve {
	initonce.Do(initAll)
	return secp192k1
}

// S224 returns a BitCurve which implements secp224k1 (see SEC 2 section 2.6.1)
func S224() *BitCurve {
	initonce.Do(initAll)
	return secp224k1
}

// S256 returns a BitCurve which implements bitcurves (see SEC 2 section 2.7.1)
func S256() *BitCurve {
	initonce.Do(initAll)
	return secp256k1
}
 070701000001EC000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/brainpool  070701000001ED000081A4000000000000000000000001645E367C000016FB000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/brainpool/brainpool.go // Package brainpool implements Brainpool elliptic curves.
// Implementation of rcurves is from github.com/ebfe/brainpool
// Note that these curves are implemented with naive, non-constant time operations
// and are likely not suitable for enviroments where timing attacks are a concern.
package brainpool

import (
	"crypto/elliptic"
	"math/big"
	"sync"
)

var (
	once                   sync.Once
	p256t1, p384t1, p512t1 *elliptic.CurveParams
	p256r1, p384r1, p512r1 *rcurve
)

func initAll() {
	initP256t1()
	initP384t1()
	initP512t1()
	initP256r1()
	initP384r1()
	initP512r1()
}

func initP256t1() {
	p256t1 = &elliptic.CurveParams{Name: "brainpoolP256t1"}
	p256t1.P, _ = new(big.Int).SetString("A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377", 16)
	p256t1.N, _ = new(big.Int).SetString("A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7", 16)
	p256t1.B, _ = new(big.Int).SetString("662C61C430D84EA4FE66A7733D0B76B7BF93EBC4AF2F49256AE58101FEE92B04", 16)
	p256t1.Gx, _ = new(big.Int).SetString("A3E8EB3CC1CFE7B7732213B23A656149AFA142C47AAFBC2B79A191562E1305F4", 16)
	p256t1.Gy, _ = new(big.Int).SetString("2D996C823439C56D7F7B22E14644417E69BCB6DE39D027001DABE8F35B25C9BE", 16)
	p256t1.BitSize = 256
}

func initP256r1() {
	twisted := p256t1
	params := &elliptic.CurveParams{
		Name:    "brainpoolP256r1",
		P:       twisted.P,
		N:       twisted.N,
		BitSize: twisted.BitSize,
	}
	params.Gx, _ = new(big.Int).SetString("8BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262", 16)
	params.Gy, _ = new(big.Int).SetString("547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997", 16)
	z, _ := new(big.Int).SetString("3E2D4BD9597B58639AE7AA669CAB9837CF5CF20A2C852D10F655668DFC150EF0", 16)
	p256r1 = newrcurve(twisted, params, z)
}

func initP384t1() {
	p384t1 = &elliptic.CurveParams{Name: "brainpoolP384t1"}
	p384t1.P, _ = new(big.Int).SetString("8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B412B1DA197FB71123ACD3A729901D1A71874700133107EC53", 16)
	p384t1.N, _ = new(big.Int).SetString("8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B31F166E6CAC0425A7CF3AB6AF6B7FC3103B883202E9046565", 16)
	p384t1.B, _ = new(big.Int).SetString("7F519EADA7BDA81BD826DBA647910F8C4B9346ED8CCDC64E4B1ABD11756DCE1D2074AA263B88805CED70355A33B471EE", 16)
	p384t1.Gx, _ = new(big.Int).SetString("18DE98B02DB9A306F2AFCD7235F72A819B80AB12EBD653172476FECD462AABFFC4FF191B946A5F54D8D0AA2F418808CC", 16)
	p384t1.Gy, _ = new(big.Int).SetString("25AB056962D30651A114AFD2755AD336747F93475B7A1FCA3B88F2B6A208CCFE469408584DC2B2912675BF5B9E582928", 16)
	p384t1.BitSize = 384
}

func initP384r1() {
	twisted := p384t1
	params := &elliptic.CurveParams{
		Name:    "brainpoolP384r1",
		P:       twisted.P,
		N:       twisted.N,
		BitSize: twisted.BitSize,
	}
	params.Gx, _ = new(big.Int).SetString("1D1C64F068CF45FFA2A63A81B7C13F6B8847A3E77EF14FE3DB7FCAFE0CBD10E8E826E03436D646AAEF87B2E247D4AF1E", 16)
	params.Gy, _ = new(big.Int).SetString("8ABE1D7520F9C2A45CB1EB8E95CFD55262B70B29FEEC5864E19C054FF99129280E4646217791811142820341263C5315", 16)
	z, _ := new(big.Int).SetString("41DFE8DD399331F7166A66076734A89CD0D2BCDB7D068E44E1F378F41ECBAE97D2D63DBC87BCCDDCCC5DA39E8589291C", 16)
	p384r1 = newrcurve(twisted, params, z)
}

func initP512t1() {
	p512t1 = &elliptic.CurveParams{Name: "brainpoolP512t1"}
	p512t1.P, _ = new(big.Int).SetString("AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA703308717D4D9B009BC66842AECDA12AE6A380E62881FF2F2D82C68528AA6056583A48F3", 16)
	p512t1.N, _ = new(big.Int).SetString("AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA70330870553E5C414CA92619418661197FAC10471DB1D381085DDADDB58796829CA90069", 16)
	p512t1.B, _ = new(big.Int).SetString("7CBBBCF9441CFAB76E1890E46884EAE321F70C0BCB4981527897504BEC3E36A62BCDFA2304976540F6450085F2DAE145C22553B465763689180EA2571867423E", 16)
	p512t1.Gx, _ = new(big.Int).SetString("640ECE5C12788717B9C1BA06CBC2A6FEBA85842458C56DDE9DB1758D39C0313D82BA51735CDB3EA499AA77A7D6943A64F7A3F25FE26F06B51BAA2696FA9035DA", 16)
	p512t1.Gy, _ = new(big.Int).SetString("5B534BD595F5AF0FA2C892376C84ACE1BB4E3019B71634C01131159CAE03CEE9D9932184BEEF216BD71DF2DADF86A627306ECFF96DBB8BACE198B61E00F8B332", 16)
	p512t1.BitSize = 512
}

func initP512r1() {
	twisted := p512t1
	params := &elliptic.CurveParams{
		Name:    "brainpoolP512r1",
		P:       twisted.P,
		N:       twisted.N,
		BitSize: twisted.BitSize,
	}
	params.Gx, _ = new(big.Int).SetString("81AEE4BDD82ED9645A21322E9C4C6A9385ED9F70B5D916C1B43B62EEF4D0098EFF3B1F78E2D0D48D50D1687B93B97D5F7C6D5047406A5E688B352209BCB9F822", 16)
	params.Gy, _ = new(big.Int).SetString("7DDE385D566332ECC0EABFA9CF7822FDF209F70024A57B1AA000C55B881F8111B2DCDE494A5F485E5BCA4BD88A2763AED1CA2B2FA8F0540678CD1E0F3AD80892", 16)
	z, _ := new(big.Int).SetString("12EE58E6764838B69782136F0F2D3BA06E27695716054092E60A80BEDB212B64E585D90BCE13761F85C3F1D2A64E3BE8FEA2220F01EBA5EEB0F35DBD29D922AB", 16)
	p512r1 = newrcurve(twisted, params, z)
}

// P256t1 returns a Curve which implements Brainpool P256t1 (see RFC 5639, section 3.4)
func P256t1() elliptic.Curve {
	once.Do(initAll)
	return p256t1
}

// P256r1 returns a Curve which implements Brainpool P256r1 (see RFC 5639, section 3.4)
func P256r1() elliptic.Curve {
	once.Do(initAll)
	return p256r1
}

// P384t1 returns a Curve which implements Brainpool P384t1 (see RFC 5639, section 3.6)
func P384t1() elliptic.Curve {
	once.Do(initAll)
	return p384t1
}

// P384r1 returns a Curve which implements Brainpool P384r1 (see RFC 5639, section 3.6)
func P384r1() elliptic.Curve {
	once.Do(initAll)
	return p384r1
}

// P512t1 returns a Curve which implements Brainpool P512t1 (see RFC 5639, section 3.7)
func P512t1() elliptic.Curve {
	once.Do(initAll)
	return p512t1
}

// P512r1 returns a Curve which implements Brainpool P512r1 (see RFC 5639, section 3.7)
func P512r1() elliptic.Curve {
	once.Do(initAll)
	return p512r1
}
 070701000001EE000081A4000000000000000000000001645E367C00000807000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/brainpool/rcurve.go    package brainpool

import (
	"crypto/elliptic"
	"math/big"
)

var _ elliptic.Curve = (*rcurve)(nil)

type rcurve struct {
	twisted elliptic.Curve
	params  *elliptic.CurveParams
	z       *big.Int
	zinv    *big.Int
	z2      *big.Int
	z3      *big.Int
	zinv2   *big.Int
	zinv3   *big.Int
}

var (
	two   = big.NewInt(2)
	three = big.NewInt(3)
)

func newrcurve(twisted elliptic.Curve, params *elliptic.CurveParams, z *big.Int) *rcurve {
	zinv := new(big.Int).ModInverse(z, params.P)
	return &rcurve{
		twisted: twisted,
		params:  params,
		z:       z,
		zinv:    zinv,
		z2:      new(big.Int).Exp(z, two, params.P),
		z3:      new(big.Int).Exp(z, three, params.P),
		zinv2:   new(big.Int).Exp(zinv, two, params.P),
		zinv3:   new(big.Int).Exp(zinv, three, params.P),
	}
}

func (curve *rcurve) toTwisted(x, y *big.Int) (*big.Int, *big.Int) {
	var tx, ty big.Int
	tx.Mul(x, curve.z2)
	tx.Mod(&tx, curve.params.P)
	ty.Mul(y, curve.z3)
	ty.Mod(&ty, curve.params.P)
	return &tx, &ty
}

func (curve *rcurve) fromTwisted(tx, ty *big.Int) (*big.Int, *big.Int) {
	var x, y big.Int
	x.Mul(tx, curve.zinv2)
	x.Mod(&x, curve.params.P)
	y.Mul(ty, curve.zinv3)
	y.Mod(&y, curve.params.P)
	return &x, &y
}

func (curve *rcurve) Params() *elliptic.CurveParams {
	return curve.params
}

func (curve *rcurve) IsOnCurve(x, y *big.Int) bool {
	return curve.twisted.IsOnCurve(curve.toTwisted(x, y))
}

func (curve *rcurve) Add(x1, y1, x2, y2 *big.Int) (x, y *big.Int) {
	tx1, ty1 := curve.toTwisted(x1, y1)
	tx2, ty2 := curve.toTwisted(x2, y2)
	return curve.fromTwisted(curve.twisted.Add(tx1, ty1, tx2, ty2))
}

func (curve *rcurve) Double(x1, y1 *big.Int) (x, y *big.Int) {
	return curve.fromTwisted(curve.twisted.Double(curve.toTwisted(x1, y1)))
}

func (curve *rcurve) ScalarMult(x1, y1 *big.Int, scalar []byte) (x, y *big.Int) {
	tx1, ty1 := curve.toTwisted(x1, y1)
	return curve.fromTwisted(curve.twisted.ScalarMult(tx1, ty1, scalar))
}

func (curve *rcurve) ScalarBaseMult(scalar []byte) (x, y *big.Int) {
	return curve.fromTwisted(curve.twisted.ScalarBaseMult(scalar))
} 070701000001EF000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/eax    070701000001F0000081A4000000000000000000000001645E367C00001239000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/eax/eax.go // Copyright (C) 2019 ProtonTech AG

// Package eax provides an implementation of the EAX
// (encrypt-authenticate-translate) mode of operation, as described in
// Bellare, Rogaway, and Wagner "THE EAX MODE OF OPERATION: A TWO-PASS
// AUTHENTICATED-ENCRYPTION SCHEME OPTIMIZED FOR SIMPLICITY AND EFFICIENCY."
// In FSE'04, volume 3017 of LNCS, 2004
package eax

import (
	"crypto/cipher"
	"crypto/subtle"
	"errors"
	"github.com/ProtonMail/go-crypto/internal/byteutil"
)

const (
	defaultTagSize   = 16
	defaultNonceSize = 16
)

type eax struct {
	block     cipher.Block // Only AES-{128, 192, 256} supported
	tagSize   int          // At least 12 bytes recommended
	nonceSize int
}

func (e *eax) NonceSize() int {
	return e.nonceSize
}

func (e *eax) Overhead() int {
	return e.tagSize
}

// NewEAX returns an EAX instance with AES-{KEYLENGTH} and default nonce and
// tag lengths. Supports {128, 192, 256}- bit key length.
func NewEAX(block cipher.Block) (cipher.AEAD, error) {
	return NewEAXWithNonceAndTagSize(block, defaultNonceSize, defaultTagSize)
}

// NewEAXWithNonceAndTagSize returns an EAX instance with AES-{keyLength} and
// given nonce and tag lengths in bytes. Panics on zero nonceSize and
// exceedingly long tags.
//
// It is recommended to use at least 12 bytes as tag length (see, for instance,
// NIST SP 800-38D).
//
// Only to be used for compatibility with existing cryptosystems with
// non-standard parameters. For all other cases, prefer NewEAX.
func NewEAXWithNonceAndTagSize(
	block cipher.Block, nonceSize, tagSize int) (cipher.AEAD, error) {
	if nonceSize < 1 {
		return nil, eaxError("Cannot initialize EAX with nonceSize = 0")
	}
	if tagSize > block.BlockSize() {
		return nil, eaxError("Custom tag length exceeds blocksize")
	}
	return &eax{
		block:     block,
		tagSize:   tagSize,
		nonceSize: nonceSize,
	}, nil
}

func (e *eax) Seal(dst, nonce, plaintext, adata []byte) []byte {
	if len(nonce) > e.nonceSize {
		panic("crypto/eax: Nonce too long for this instance")
	}
	ret, out := byteutil.SliceForAppend(dst, len(plaintext) + e.tagSize)
	omacNonce := e.omacT(0, nonce)
	omacAdata := e.omacT(1, adata)

	// Encrypt message using CTR mode and omacNonce as IV
	ctr := cipher.NewCTR(e.block, omacNonce)
	ciphertextData := out[:len(plaintext)]
	ctr.XORKeyStream(ciphertextData, plaintext)

	omacCiphertext := e.omacT(2, ciphertextData)

	tag := out[len(plaintext):]
	for i := 0; i < e.tagSize; i++ {
		tag[i] = omacCiphertext[i] ^ omacNonce[i] ^ omacAdata[i]
	}
	return ret
}

func (e* eax) Open(dst, nonce, ciphertext, adata []byte) ([]byte, error) {
	if len(nonce) > e.nonceSize {
		panic("crypto/eax: Nonce too long for this instance")
	}
	if len(ciphertext) < e.tagSize {
		return nil, eaxError("Ciphertext shorter than tag length")
	}
	sep := len(ciphertext) - e.tagSize

	// Compute tag
	omacNonce := e.omacT(0, nonce)
	omacAdata := e.omacT(1, adata)
	omacCiphertext := e.omacT(2, ciphertext[:sep])

	tag := make([]byte, e.tagSize)
	for i := 0; i < e.tagSize; i++ {
		tag[i] = omacCiphertext[i] ^ omacNonce[i] ^ omacAdata[i]
	}

	// Compare tags
	if subtle.ConstantTimeCompare(ciphertext[sep:], tag) != 1 {
		return nil, eaxError("Tag authentication failed")
	}

	// Decrypt ciphertext
	ret, out := byteutil.SliceForAppend(dst, len(ciphertext))
	ctr := cipher.NewCTR(e.block, omacNonce)
	ctr.XORKeyStream(out, ciphertext[:sep])

	return ret[:sep], nil
}

// Tweakable OMAC - Calls OMAC_K([t]_n || plaintext)
func (e *eax) omacT(t byte, plaintext []byte) []byte {
	blockSize := e.block.BlockSize()
	byteT := make([]byte, blockSize)
	byteT[blockSize-1] = t
	concat := append(byteT, plaintext...)
	return e.omac(concat)
}

func (e *eax) omac(plaintext []byte) []byte {
	blockSize := e.block.BlockSize()
	// L ← E_K(0^n); B ← 2L; P ← 4L
	L := make([]byte, blockSize)
	e.block.Encrypt(L, L)
	B := byteutil.GfnDouble(L)
	P := byteutil.GfnDouble(B)

	// CBC with IV = 0
	cbc := cipher.NewCBCEncrypter(e.block, make([]byte, blockSize))
	padded := e.pad(plaintext, B, P)
	cbcCiphertext := make([]byte, len(padded))
	cbc.CryptBlocks(cbcCiphertext, padded)

	return cbcCiphertext[len(cbcCiphertext)-blockSize:]
}

func (e *eax) pad(plaintext, B, P []byte) []byte {
	// if |M| in {n, 2n, 3n, ...}
	blockSize := e.block.BlockSize()
	if len(plaintext) != 0 && len(plaintext)%blockSize == 0 {
		return byteutil.RightXor(plaintext, B)
	}

	// else return (M || 1 || 0^(n−1−(|M| % n))) xor→ P
	ending := make([]byte, blockSize-len(plaintext)%blockSize)
	ending[0] = 0x80
	padded := append(plaintext, ending...)
	return byteutil.RightXor(padded, P)
}

func eaxError(err string) error {
	return errors.New("crypto/eax: " + err)
}
   070701000001F1000081A4000000000000000000000001645E367C000007DC000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/eax/eax_test_vectors.go    package eax

// Test vectors from
// https://web.cs.ucdavis.edu/~rogaway/papers/eax.pdf
var testVectors = []struct {
	msg, key, nonce, header, ciphertext string
}{
	{"",
		"233952DEE4D5ED5F9B9C6D6FF80FF478",
		"62EC67F9C3A4A407FCB2A8C49031A8B3",
		"6BFB914FD07EAE6B",
		"E037830E8389F27B025A2D6527E79D01"},
	{"F7FB",
		"91945D3F4DCBEE0BF45EF52255F095A4",
		"BECAF043B0A23D843194BA972C66DEBD",
		"FA3BFD4806EB53FA",
		"19DD5C4C9331049D0BDAB0277408F67967E5"},
	{"1A47CB4933",
		"01F74AD64077F2E704C0F60ADA3DD523",
		"70C3DB4F0D26368400A10ED05D2BFF5E",
		"234A3463C1264AC6",
		"D851D5BAE03A59F238A23E39199DC9266626C40F80"},
	{"481C9E39B1",
		"D07CF6CBB7F313BDDE66B727AFD3C5E8",
		"8408DFFF3C1A2B1292DC199E46B7D617",
		"33CCE2EABFF5A79D",
		"632A9D131AD4C168A4225D8E1FF755939974A7BEDE"},
	{"40D0C07DA5E4",
		"35B6D0580005BBC12B0587124557D2C2",
		"FDB6B06676EEDC5C61D74276E1F8E816",
		"AEB96EAEBE2970E9",
		"071DFE16C675CB0677E536F73AFE6A14B74EE49844DD"},
	{"4DE3B35C3FC039245BD1FB7D",
		"BD8E6E11475E60B268784C38C62FEB22",
		"6EAC5C93072D8E8513F750935E46DA1B",
		"D4482D1CA78DCE0F",
		"835BB4F15D743E350E728414ABB8644FD6CCB86947C5E10590210A4F"},
	{"8B0A79306C9CE7ED99DAE4F87F8DD61636",
		"7C77D6E813BED5AC98BAA417477A2E7D",
		"1A8C98DCD73D38393B2BF1569DEEFC19",
		"65D2017990D62528",
		"02083E3979DA014812F59F11D52630DA30137327D10649B0AA6E1C181DB617D7F2"},
	{"1BDA122BCE8A8DBAF1877D962B8592DD2D56",
		"5FFF20CAFAB119CA2FC73549E20F5B0D",
		"DDE59B97D722156D4D9AFF2BC7559826",
		"54B9F04E6A09189A",
		"2EC47B2C4954A489AFC7BA4897EDCDAE8CC33B60450599BD02C96382902AEF7F832A"},
	{"6CF36720872B8513F6EAB1A8A44438D5EF11",
		"A4A4782BCFFD3EC5E7EF6D8C34A56123",
		"B781FCF2F75FA5A8DE97A9CA48E522EC",
		"899A175897561D7E",
		"0DE18FD0FDD91E7AF19F1D8EE8733938B1E8E7F6D2231618102FDB7FE55FF1991700"},
	{"CA40D7446E545FFAED3BD12A740A659FFBBB3CEAB7",
		"8395FCF1E95BEBD697BD010BC766AAC3",
		"22E7ADD93CFC6393C57EC0B3C17D6B44",
		"126735FCC320D25A",
		"CB8920F87A6C75CFF39627B56E3ED197C552D295A7CFC46AFC253B4652B1AF3795B124AB6E"},
}
070701000001F2000081A4000000000000000000000001645E367C00002E49000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/eax/random_vectors.go  // These vectors include key length in {128, 192, 256}, tag size 128, and
// random nonce, header, and plaintext lengths.

// This file was automatically generated.

package eax

var randomVectors = []struct {
	key, nonce, header, plaintext, ciphertext string
}{
	{"DFDE093F36B0356E5A81F609786982E3",
		"1D8AC604419001816905BA72B14CED7E",
		"152A1517A998D7A24163FCDD146DE81AC347C8B97088F502093C1ABB8F6E33D9A219C34D7603A18B1F5ABE02E56661B7D7F67E81EC08C1302EF38D80A859486D450E94A4F26AD9E68EEBBC0C857A0FC5CF9E641D63D565A7E361BC8908F5A8DC8FD6",
		"1C8EAAB71077FE18B39730A3156ADE29C5EE824C7EE86ED2A253B775603FB237116E654F6FEC588DD27F523A0E01246FE73FE348491F2A8E9ABC6CA58D663F71CDBCF4AD798BE46C42AE6EE8B599DB44A1A48D7BBBBA0F7D2750181E1C5E66967F7D57CBD30AFBDA5727",
		"79E7E150934BBEBF7013F61C60462A14D8B15AF7A248AFB8A344EF021C1500E16666891D6E973D8BB56B71A371F12CA34660C4410C016982B20F547E3762A58B7BF4F20236CADCF559E2BE7D783B13723B2741FC7CDC8997D839E39A3DDD2BADB96743DD7049F1BDB0516A262869915B3F70498AFB7B191BF960"},
	{"F10619EF02E5D94D7550EB84ED364A21",
		"8DC0D4F2F745BBAE835CC5574B942D20",
		"FE561358F2E8DF7E1024FF1AE9A8D36EBD01352214505CB99D644777A8A1F6027FA2BDBFC529A9B91136D5F2416CFC5F0F4EC3A1AFD32BDDA23CA504C5A5CB451785FABF4DFE4CD50D817491991A60615B30286361C100A95D1712F2A45F8E374461F4CA2B",
		"D7B5A971FC219631D30EFC3664AE3127D9CF3097DAD9C24AC7905D15E8D9B25B026B31D68CAE00975CDB81EB1FD96FD5E1A12E2BB83FA25F1B1D91363457657FC03875C27F2946C5",
		"2F336ED42D3CC38FC61660C4CD60BA4BD438B05F5965D8B7B399D2E7167F5D34F792D318F94DB15D67463AC449E13D568CC09BFCE32A35EE3EE96A041927680AE329811811E27F2D1E8E657707AF99BA96D13A478D695D59"},
	{"429F514EFC64D98A698A9247274CFF45",
		"976AA5EB072F912D126ACEBC954FEC38",
		"A71D89DC5B6CEDBB7451A27C3C2CAE09126DB4C421",
		"5632FE62AB1DC549D54D3BC3FC868ACCEDEFD9ECF5E9F8",
		"848AE4306CA8C7F416F8707625B7F55881C0AB430353A5C967CDA2DA787F581A70E34DBEBB2385"},
	{"398138F309085F47F8457CDF53895A63",
		"F8A8A7F2D28E5FFF7BBC2F24353F7A36",
		"5D633C21BA7764B8855CAB586F3746E236AD486039C83C6B56EFA9C651D38A41D6B20DAEE3418BFEA44B8BD6",
		"A3BBAA91920AF5E10659818B1B3B300AC79BFC129C8329E75251F73A66D3AE0128EB91D5031E0A65C329DB7D1E9C0493E268",
		"D078097267606E5FB07CFB7E2B4B718172A82C6A4CEE65D549A4DFB9838003BD2FBF64A7A66988AC1A632FD88F9E9FBB57C5A78AD2E086EACBA3DB68511D81C2970A"},
	{"7A4151EBD3901B42CBA45DAFB2E931BA",
		"0FC88ACEE74DD538040321C330974EB8",
		"250464FB04733BAB934C59E6AD2D6AE8D662CBCFEFBE61E5A308D4211E58C4C25935B72C69107722E946BFCBF416796600542D76AEB73F2B25BF53BAF97BDEB36ED3A7A51C31E7F170EB897457E7C17571D1BA0A908954E9",
		"88C41F3EBEC23FAB8A362D969CAC810FAD4F7CA6A7F7D0D44F060F92E37E1183768DD4A8C733F71C96058D362A39876D183B86C103DE",
		"74A25B2182C51096D48A870D80F18E1CE15867778E34FCBA6BD7BFB3739FDCD42AD0F2D9F4EBA29085285C6048C15BCE5E5166F1F962D3337AA88E6062F05523029D0A7F0BF9"},
	{"BFB147E1CD5459424F8C0271FC0E0DC5",
		"EABCC126442BF373969EA3015988CC45",
		"4C0880E1D71AA2C7",
		"BE1B5EC78FBF73E7A6682B21BA7E0E5D2D1C7ABE",
		"5660D7C1380E2F306895B1402CB2D6C37876504276B414D120F4CF92FDDDBB293A238EA0"},
	{"595DD6F52D18BC2CA8EB4EDAA18D9FA3",
		"0F84B5D36CF4BC3B863313AF3B4D2E97",
		"30AE6CC5F99580F12A779D98BD379A60948020C0B6FBD5746B30BA3A15C6CD33DAF376C70A9F15B6C0EB410A93161F7958AE23",
		"8EF3687A1642B070970B0B91462229D1D76ABC154D18211F7152AA9FF368",
		"317C1DDB11417E5A9CC4DDE7FDFF6659A5AC4B31DE025212580A05CDAC6024D3E4AE7C2966E52B9129E9ECDBED86"},
	{"44E6F2DC8FDC778AD007137D11410F50",
		"270A237AD977F7187AA6C158A0BAB24F",
		"509B0F0EB12E2AA5C5BA2DE553C07FAF4CE0C9E926531AA709A3D6224FCB783ACCF1559E10B1123EBB7D52E8AB54E6B5352A9ED0D04124BF0E9D9BACFD7E32B817B2E625F5EE94A64EDE9E470DE7FE6886C19B294F9F828209FE257A78",
		"8B3D7815DF25618A5D0C55A601711881483878F113A12EC36CF64900549A3199555528559DC118F789788A55FAFD944E6E99A9CA3F72F238CD3F4D88223F7A745992B3FAED1848",
		"1CC00D79F7AD82FDA71B58D286E5F34D0CC4CEF30704E771CC1E50746BDF83E182B078DB27149A42BAE619DF0F85B0B1090AD55D3B4471B0D6F6ECCD09C8F876B30081F0E7537A9624F8AAF29DA85E324122EFB4D68A56"},
	{"BB7BC352A03044B4428D8DBB4B0701FDEC4649FD17B81452",
		"8B4BBE26CCD9859DCD84884159D6B0A4",
		"2212BEB0E78E0F044A86944CF33C8D5C80D9DBE1034BF3BCF73611835C7D3A52F5BD2D81B68FD681B68540A496EE5DA16FD8AC8824E60E1EC2042BE28FB0BFAD4E4B03596446BDD8C37D936D9B3D5295BE19F19CF5ACE1D33A46C952CE4DE5C12F92C1DD051E04AEED",
		"9037234CC44FFF828FABED3A7084AF40FA7ABFF8E0C0EFB57A1CC361E18FC4FAC1AB54F3ABFE9FF77263ACE16C3A",
		"A9391B805CCD956081E0B63D282BEA46E7025126F1C1631239C33E92AA6F92CD56E5A4C56F00FF9658E93D48AF4EF0EF81628E34AD4DB0CDAEDCD2A17EE7"},
	{"99C0AD703196D2F60A74E6B378B838B31F82EA861F06FC4E",
		"92745C018AA708ECFEB1667E9F3F1B01",
		"828C69F376C0C0EC651C67749C69577D589EE39E51404D80EBF70C8660A8F5FD375473F4A7C611D59CB546A605D67446CE2AA844135FCD78BB5FBC90222A00D42920BB1D7EEDFB0C4672554F583EF23184F89063CDECBE482367B5F9AF3ACBC3AF61392BD94CBCD9B64677",
		"A879214658FD0A5B0E09836639BF82E05EC7A5EF71D4701934BDA228435C68AC3D5CEB54997878B06A655EEACEFB1345C15867E7FE6C6423660C8B88DF128EBD6BCD85118DBAE16E9252FFB204324E5C8F38CA97759BDBF3CB0083",
		"51FE87996F194A2585E438B023B345439EA60D1AEBED4650CDAF48A4D4EEC4FC77DC71CC4B09D3BEEF8B7B7AF716CE2B4EFFB3AC9E6323C18AC35E0AA6E2BBBC8889490EB6226C896B0D105EAB42BFE7053CCF00ED66BA94C1BA09A792AA873F0C3B26C5C5F9A936E57B25"},
	{"7086816D00D648FB8304AA8C9E552E1B69A9955FB59B25D1",
		"0F45CF7F0BF31CCEB85D9DA10F4D749F",
		"93F27C60A417D9F0669E86ACC784FC8917B502DAF30A6338F11B30B94D74FEFE2F8BE1BBE2EAD10FAB7EED3C6F72B7C3ECEE1937C32ED4970A6404E139209C05",
		"877F046601F3CBE4FB1491943FA29487E738F94B99AF206262A1D6FF856C9AA0B8D4D08A54370C98F8E88FA3DCC2B14C1F76D71B2A4C7963AEE8AF960464C5BEC8357AD00DC8",
		"FE96906B895CE6A8E72BC72344E2C8BB3C63113D70EAFA26C299BAFE77A8A6568172EB447FB3E86648A0AF3512DEB1AAC0819F3EC553903BF28A9FB0F43411237A774BF9EE03E445D280FBB9CD12B9BAAB6EF5E52691"},
	{"062F65A896D5BF1401BADFF70E91B458E1F9BD4888CB2E4D",
		"5B11EA1D6008EBB41CF892FCA5B943D1",
		"BAF4FF5C8242",
		"A8870E091238355984EB2F7D61A865B9170F440BFF999A5993DD41A10F4440D21FF948DDA2BF663B2E03AC3324492DC5E40262ECC6A65C07672353BE23E7FB3A9D79FF6AA38D97960905A38DECC312CB6A59E5467ECF06C311CD43ADC0B543EDF34FE8BE611F176460D5627CA51F8F8D9FED71F55C",
		"B10E127A632172CF8AA7539B140D2C9C2590E6F28C3CB892FC498FCE56A34F732FBFF32E79C7B9747D9094E8635A0C084D6F0247F9768FB5FF83493799A9BEC6C39572120C40E9292C8C947AE8573462A9108C36D9D7112E6995AE5867E6C8BB387D1C5D4BEF524F391B9FD9F0A3B4BFA079E915BCD920185CFD38D114C558928BD7D47877"},
	{"38A8E45D6D705A11AF58AED5A1344896998EACF359F2E26A",
		"FD82B5B31804FF47D44199B533D0CF84",
		"DE454D4E62FE879F2050EE3E25853623D3E9AC52EEC1A1779A48CFAF5ECA0BFDE44749391866D1",
		"B804",
		"164BB965C05EBE0931A1A63293EDF9C38C27"},
	{"34C33C97C6D7A0850DA94D78A58DC61EC717CD7574833068",
		"343BE00DA9483F05C14F2E9EB8EA6AE8",
		"78312A43EFDE3CAE34A65796FF059A3FE15304EEA5CF1D9306949FE5BF3349D4977D4EBE76C040FE894C5949E4E4D6681153DA87FB9AC5062063CA2EA183566343362370944CE0362D25FC195E124FD60E8682E665D13F2229DDA3E4B2CB1DCA",
		"CC11BB284B1153578E4A5ED9D937B869DAF00F5B1960C23455CA9CC43F486A3BE0B66254F1041F04FDF459C8640465B6E1D2CF899A381451E8E7FCB50CF87823BE77E24B132BBEEDC72E53369B275E1D8F49ECE59F4F215230AC4FE133FC80E4F634EE80BA4682B62C86",
		"E7F703DC31A95E3A4919FF957836CB76C063D81702AEA4703E1C2BF30831E58C4609D626EC6810E12EAA5B930F049FF9EFC22C3E3F1EBD4A1FB285CB02A1AC5AD46B425199FC0A85670A5C4E3DAA9636C8F64C199F42F18AAC8EA7457FD377F322DD7752D7D01B946C8F0A97E6113F0D50106F319AFD291AAACE"},
	{"C6ECF7F053573E403E61B83052A343D93CBCC179D1E835BE",
		"E280E13D7367042E3AA09A80111B6184",
		"21486C9D7A9647",
		"5F2639AFA6F17931853791CD8C92382BBB677FD72D0AB1A080D0E49BFAA21810E963E4FACD422E92F65CBFAD5884A60CD94740DF31AF02F95AA57DA0C4401B0ED906",
		"5C51DB20755302070C45F52E50128A67C8B2E4ED0EACB7E29998CCE2E8C289DD5655913EC1A51CC3AABE5CDC2402B2BE7D6D4BF6945F266FBD70BA9F37109067157AE7530678B45F64475D4EBFCB5FFF46A5"},
	{"5EC6CF7401BC57B18EF154E8C38ACCA8959E57D2F3975FF5",
		"656B41CB3F9CF8C08BAD7EBFC80BD225",
		"6B817C2906E2AF425861A7EF59BA5801F143EE2A139EE72697CDE168B4",
		"2C0E1DDC9B1E5389BA63845B18B1F8A1DB062037151BCC56EF7C21C0BB4DAE366636BBA975685D7CC5A94AFBE89C769016388C56FB7B57CE750A12B718A8BDCF70E80E8659A8330EFC8F86640F21735E8C80E23FE43ABF23507CE3F964AE4EC99D",
		"ED780CF911E6D1AA8C979B889B0B9DC1ABE261832980BDBFB576901D9EF5AB8048998E31A15BE54B3E5845A4D136AD24D0BDA1C3006168DF2F8AC06729CB0818867398150020131D8F04EDF1923758C9EABB5F735DE5EA1758D4BC0ACFCA98AFD202E9839B8720253693B874C65586C6F0"},
	{"C92F678EB2208662F5BCF3403EC05F5961E957908A3E79421E1D25FC19054153",
		"DA0F3A40983D92F2D4C01FED33C7A192",
		"2B6E9D26DB406A0FAB47608657AA10EFC2B4AA5F459B29FF85AC9A40BFFE7AEB04F77E9A11FAAA116D7F6D4DA417671A9AB02C588E0EF59CB1BFB4B1CC931B63A3B3A159FCEC97A04D1E6F0C7E6A9CEF6B0ABB04758A69F1FE754DF4C2610E8C46B6CF413BDB31351D55BEDCB7B4A13A1C98E10984475E0F2F957853",
		"F37326A80E08",
		"83519E53E321D334F7C10B568183775C0E9AAE55F806"},
	{"6847E0491BE57E72995D186D50094B0B3593957A5146798FCE68B287B2FB37B5",
		"3EE1182AEBB19A02B128F28E1D5F7F99",
		"D9F35ABB16D776CE",
		"DB7566ED8EA95BDF837F23DB277BAFBC5E70D1105ADFD0D9EF15475051B1EF94709C67DCA9F8D5",
		"2CDCED0C9EBD6E2A508822A685F7DCD1CDD99E7A5FCA786C234E7F7F1D27EC49751AD5DCFA30C5EDA87C43CAE3B919B6BBCFE34C8EDA59"},
	{"82B019673642C08388D3E42075A4D5D587558C229E4AB8F660E37650C4C41A0A",
		"336F5D681E0410FAE7B607246092C6DC",
		"D430CBD8FE435B64214E9E9CDC5DE99D31CFCFB8C10AA0587A49DF276611",
		"998404153AD77003E1737EDE93ED79859EE6DCCA93CB40C4363AA817ABF2DBBD46E42A14A7183B6CC01E12A577888141363D0AE011EB6E8D28C0B235",
		"9BEF69EEB60BD3D6065707B7557F25292A8872857CFBD24F2F3C088E4450995333088DA50FD9121221C504DF1D0CD5EFE6A12666C5D5BB12282CF4C19906E9CFAB97E9BDF7F49DC17CFC384B"},
	{"747B2E269B1859F0622C15C8BAD6A725028B1F94B8DB7326948D1E6ED663A8BC",
		"AB91F7245DDCE3F1C747872D47BE0A8A",
		"3B03F786EF1DDD76E1D42646DA4CD2A5165DC5383CE86D1A0B5F13F910DC278A4E451EE0192CBA178E13B3BA27FDC7840DF73D2E104B",
		"6B803F4701114F3E5FE21718845F8416F70F626303F545BE197189E0A2BA396F37CE06D389EB2658BC7D56D67868708F6D0D32",
		"1570DDB0BCE75AA25D1957A287A2C36B1A5F2270186DA81BA6112B7F43B0F3D1D0ED072591DCF1F1C99BBB25621FC39B896FF9BD9413A2845363A9DCD310C32CF98E57"},
	{"02E59853FB29AEDA0FE1C5F19180AD99A12FF2F144670BB2B8BADF09AD812E0A",
		"C691294EF67CD04D1B9242AF83DD1421",
		"879334DAE3",
		"1E17F46A98FEF5CBB40759D95354",
		"FED8C3FF27DDF6313AED444A2985B36CBA268AAD6AAC563C0BA28F6DB5DB"},
	{"F6C1FB9B4188F2288FF03BD716023198C3582CF2A037FC2F29760916C2B7FCDB",
		"4228DA0678CA3534588859E77DFF014C",
		"D8153CAF35539A61DD8D05B3C9B44F01E564FB9348BCD09A1C23B84195171308861058F0A3CD2A55B912A3AAEE06FF4D356C77275828F2157C2FC7C115DA39E443210CCC56BEDB0CC99BBFB227ABD5CC454F4E7F547C7378A659EEB6A7E809101A84F866503CB18D4484E1FA09B3EC7FC75EB2E35270800AA7",
		"23B660A779AD285704B12EC1C580387A47BEC7B00D452C6570",
		"5AA642BBABA8E49849002A2FAF31DB8FC7773EFDD656E469CEC19B3206D4174C9A263D0A05484261F6"},
	{"8FF6086F1FADB9A3FBE245EAC52640C43B39D43F89526BB5A6EBA47710931446",
		"943188480C99437495958B0AE4831AA9",
		"AD5CD0BDA426F6EBA23C8EB23DC73FF9FEC173355EDBD6C9344C4C4383F211888F7CE6B29899A6801DF6B38651A7C77150941A",
		"80CD5EA8D7F81DDF5070B934937912E8F541A5301877528EB41AB60C020968D459960ED8FB73083329841A",
		"ABAE8EB7F36FCA2362551E72DAC890BA1BB6794797E0FC3B67426EC9372726ED4725D379EA0AC9147E48DCD0005C502863C2C5358A38817C8264B5"},
	{"A083B54E6B1FE01B65D42FCD248F97BB477A41462BBFE6FD591006C022C8FD84",
		"B0490F5BD68A52459556B3749ACDF40E",
		"8892E047DA5CFBBDF7F3CFCBD1BD21C6D4C80774B1826999234394BD3E513CC7C222BB40E1E3140A152F19B3802F0D036C24A590512AD0E8",
		"D7B15752789DC94ED0F36778A5C7BBB207BEC32BAC66E702B39966F06E381E090C6757653C3D26A81EC6AD6C364D66867A334C91BB0B8A8A4B6EACDF0783D09010AEBA2DD2062308FE99CC1F",
		"C071280A732ADC93DF272BF1E613B2BB7D46FC6665EF2DC1671F3E211D6BDE1D6ADDD28DF3AA2E47053FC8BB8AE9271EC8BC8B2CFFA320D225B451685B6D23ACEFDD241FE284F8ADC8DB07F456985B14330BBB66E0FB212213E05B3E"},
}
   070701000001F3000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/internal   070701000001F4000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/internal/byteutil  070701000001F5000081A4000000000000000000000001645E367C00000A39000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/internal/byteutil/byteutil.go  // Copyright (C) 2019 ProtonTech AG
// This file contains necessary tools for the aex and ocb packages.
//
// These functions SHOULD NOT be used elsewhere, since they are optimized for
// specific input nature in the EAX and OCB modes of operation.

package byteutil

// GfnDouble computes 2 * input in the field of 2^n elements.
// The irreducible polynomial in the finite field for n=128 is
// x^128 + x^7 + x^2 + x + 1 (equals 0x87)
// Constant-time execution in order to avoid side-channel attacks
func GfnDouble(input []byte) []byte {
	if len(input) != 16 {
		panic("Doubling in GFn only implemented for n = 128")
	}
	// If the first bit is zero, return 2L = L << 1
	// Else return (L << 1) xor 0^120 10000111
	shifted := ShiftBytesLeft(input)
	shifted[15] ^= ((input[0] >> 7) * 0x87)
	return shifted
}

// ShiftBytesLeft outputs the byte array corresponding to x << 1 in binary.
func ShiftBytesLeft(x []byte) []byte {
	l := len(x)
	dst := make([]byte, l)
	for i := 0; i < l-1; i++ {
		dst[i] = (x[i] << 1) | (x[i+1] >> 7)
	}
	dst[l-1] = x[l-1] << 1
	return dst
}

// ShiftNBytesLeft puts in dst the byte array corresponding to x << n in binary.
func ShiftNBytesLeft(dst, x []byte, n int) {
	// Erase first n / 8 bytes
	copy(dst, x[n/8:])

	// Shift the remaining n % 8 bits
	bits := uint(n % 8)
	l := len(dst)
	for i := 0; i < l-1; i++ {
		dst[i] = (dst[i] << bits) | (dst[i+1] >> uint(8 - bits))
	}
	dst[l-1] = dst[l-1] << bits

	// Append trailing zeroes
	dst = append(dst, make([]byte, n/8)...)
}

// XorBytesMut assumes equal input length, replaces X with X XOR Y
func XorBytesMut(X, Y []byte) {
	for i := 0; i < len(X); i++ {
		X[i] ^= Y[i]
	}
}


// XorBytes assumes equal input length, puts X XOR Y into Z
func XorBytes(Z, X, Y []byte) {
	for i := 0; i < len(X); i++ {
		Z[i] = X[i] ^ Y[i]
	}
}

// RightXor XORs smaller input (assumed Y) at the right of the larger input (assumed X)
func RightXor(X, Y []byte) []byte {
	offset := len(X) - len(Y)
	xored := make([]byte, len(X));
	copy(xored, X)
	for i := 0; i < len(Y); i++ {
		xored[offset + i] ^= Y[i]
	}
	return xored
}

// SliceForAppend takes a slice and a requested number of bytes. It returns a
// slice with the contents of the given slice followed by that many bytes and a
// second slice that aliases into it and contains only the extra bytes. If the
// original slice has sufficient capacity then no allocation is performed.
func SliceForAppend(in []byte, n int) (head, tail []byte) {
	if total := len(in) + n; cap(in) >= total {
		head = in[:total]
	} else {
		head = make([]byte, total)
		copy(head, in)
	}
	tail = head[len(in):]
	return
}

   070701000001F6000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/ocb    070701000001F7000081A4000000000000000000000001645E367C0000258C000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/ocb/ocb.go // Copyright (C) 2019 ProtonTech AG

// Package ocb provides an implementation of the OCB (offset codebook) mode of
// operation, as described in RFC-7253 of the IRTF and in Rogaway, Bellare,
// Black and Krovetz - OCB: A BLOCK-CIPHER MODE OF OPERATION FOR EFFICIENT
// AUTHENTICATED ENCRYPTION (2003).
// Security considerations (from RFC-7253): A private key MUST NOT be used to
// encrypt more than 2^48 blocks. Tag length should be at least 12 bytes (a
// brute-force forging adversary succeeds after 2^{tag length} attempts). A
// single key SHOULD NOT be used to decrypt ciphertext with different tag
// lengths. Nonces need not be secret, but MUST NOT be reused.
// This package only supports underlying block ciphers with 128-bit blocks,
// such as AES-{128, 192, 256}, but may be extended to other sizes.
package ocb

import (
	"bytes"
	"crypto/cipher"
	"crypto/subtle"
	"errors"
	"github.com/ProtonMail/go-crypto/internal/byteutil"
	"math/bits"
)

type ocb struct {
	block     cipher.Block
	tagSize   int
	nonceSize int
	mask      mask
	// Optimized en/decrypt: For each nonce N used to en/decrypt, the 'Ktop'
	// internal variable can be reused for en/decrypting with nonces sharing
	// all but the last 6 bits with N. The prefix of the first nonce used to
	// compute the new Ktop, and the Ktop value itself, are stored in
	// reusableKtop. If using incremental nonces, this saves one block cipher
	// call every 63 out of 64 OCB encryptions, and stores one nonce and one
	// output of the block cipher in memory only.
	reusableKtop reusableKtop
}

type mask struct {
	// L_*, L_$, (L_i)_{i ∈ N}
	lAst []byte
	lDol []byte
	L    [][]byte
}

type reusableKtop struct {
	noncePrefix []byte
	Ktop        []byte
}

const (
	defaultTagSize   = 16
	defaultNonceSize = 15
)

const (
	enc = iota
	dec
)

func (o *ocb) NonceSize() int {
	return o.nonceSize
}

func (o *ocb) Overhead() int {
	return o.tagSize
}

// NewOCB returns an OCB instance with the given block cipher and default
// tag and nonce sizes.
func NewOCB(block cipher.Block) (cipher.AEAD, error) {
	return NewOCBWithNonceAndTagSize(block, defaultNonceSize, defaultTagSize)
}

// NewOCBWithNonceAndTagSize returns an OCB instance with the given block
// cipher, nonce length, and tag length. Panics on zero nonceSize and
// exceedingly long tag size.
//
// It is recommended to use at least 12 bytes as tag length.
func NewOCBWithNonceAndTagSize(
	block cipher.Block, nonceSize, tagSize int) (cipher.AEAD, error) {
	if block.BlockSize() != 16 {
		return nil, ocbError("Block cipher must have 128-bit blocks")
	}
	if nonceSize < 1 {
		return nil, ocbError("Incorrect nonce length")
	}
	if nonceSize >= block.BlockSize() {
		return nil, ocbError("Nonce length exceeds blocksize - 1")
	}
	if tagSize > block.BlockSize() {
		return nil, ocbError("Custom tag length exceeds blocksize")
	}
	return &ocb{
		block:        block,
		tagSize:      tagSize,
		nonceSize:    nonceSize,
		mask:         initializeMaskTable(block),
		reusableKtop: reusableKtop{
			noncePrefix: nil,
			Ktop: nil,
		},
	}, nil
}

func (o *ocb) Seal(dst, nonce, plaintext, adata []byte) []byte {
	if len(nonce) > o.nonceSize {
		panic("crypto/ocb: Incorrect nonce length given to OCB")
	}
	ret, out := byteutil.SliceForAppend(dst, len(plaintext)+o.tagSize)
	o.crypt(enc, out, nonce, adata, plaintext)
	return ret
}

func (o *ocb) Open(dst, nonce, ciphertext, adata []byte) ([]byte, error) {
	if len(nonce) > o.nonceSize {
		panic("Nonce too long for this instance")
	}
	if len(ciphertext) < o.tagSize {
		return nil, ocbError("Ciphertext shorter than tag length")
	}
	sep := len(ciphertext) - o.tagSize
	ret, out := byteutil.SliceForAppend(dst, len(ciphertext))
	ciphertextData := ciphertext[:sep]
	tag := ciphertext[sep:]
	o.crypt(dec, out, nonce, adata, ciphertextData)
	if subtle.ConstantTimeCompare(ret[sep:], tag) == 1 {
		ret = ret[:sep]
		return ret, nil
	}
	for i := range out {
		out[i] = 0
	}
	return nil, ocbError("Tag authentication failed")
}

// On instruction enc (resp. dec), crypt is the encrypt (resp. decrypt)
// function. It returns the resulting plain/ciphertext with the tag appended.
func (o *ocb) crypt(instruction int, Y, nonce, adata, X []byte) []byte {
	//
	// Consider X as a sequence of 128-bit blocks
	//
	// Note: For encryption (resp. decryption), X is the plaintext (resp., the
	// ciphertext without the tag).
	blockSize := o.block.BlockSize()

	//
	// Nonce-dependent and per-encryption variables
	//
	// Zero out the last 6 bits of the nonce into truncatedNonce to see if Ktop
	// is already computed.
	truncatedNonce := make([]byte, len(nonce))
	copy(truncatedNonce, nonce)
	truncatedNonce[len(truncatedNonce)-1] &= 192
	Ktop := make([]byte, blockSize)
	if bytes.Equal(truncatedNonce, o.reusableKtop.noncePrefix) {
		Ktop = o.reusableKtop.Ktop
	} else {
		// Nonce = num2str(TAGLEN mod 128, 7) || zeros(120 - bitlen(N)) || 1 || N
		paddedNonce := append(make([]byte, blockSize-1-len(nonce)), 1)
		paddedNonce = append(paddedNonce, truncatedNonce...)
		paddedNonce[0] |= byte(((8 * o.tagSize) % (8 * blockSize)) << 1)
		// Last 6 bits of paddedNonce are already zero. Encrypt into Ktop
		paddedNonce[blockSize-1] &= 192
		Ktop = paddedNonce
		o.block.Encrypt(Ktop, Ktop)
		o.reusableKtop.noncePrefix = truncatedNonce
		o.reusableKtop.Ktop = Ktop
	}

	// Stretch = Ktop || ((lower half of Ktop) XOR (lower half of Ktop << 8))
	xorHalves := make([]byte, blockSize/2)
	byteutil.XorBytes(xorHalves, Ktop[:blockSize/2], Ktop[1:1+blockSize/2])
	stretch := append(Ktop, xorHalves...)
	bottom := int(nonce[len(nonce)-1] & 63)
	offset := make([]byte, len(stretch))
	byteutil.ShiftNBytesLeft(offset, stretch, bottom)
	offset = offset[:blockSize]

	//
	// Process any whole blocks
	//
	// Note: For encryption Y is ciphertext || tag, for decryption Y is
	// plaintext || tag.
	checksum := make([]byte, blockSize)
	m := len(X) / blockSize
	for i := 0; i < m; i++ {
		index := bits.TrailingZeros(uint(i + 1))
		if len(o.mask.L)-1 < index {
			o.mask.extendTable(index)
		}
		byteutil.XorBytesMut(offset, o.mask.L[bits.TrailingZeros(uint(i+1))])
		blockX := X[i*blockSize : (i+1)*blockSize]
		blockY := Y[i*blockSize : (i+1)*blockSize]
		byteutil.XorBytes(blockY, blockX, offset)
		switch instruction {
		case enc:
			o.block.Encrypt(blockY, blockY)
			byteutil.XorBytesMut(blockY, offset)
			byteutil.XorBytesMut(checksum, blockX)
		case dec:
			o.block.Decrypt(blockY, blockY)
			byteutil.XorBytesMut(blockY, offset)
			byteutil.XorBytesMut(checksum, blockY)
		}
	}
	//
	// Process any final partial block and compute raw tag
	//
	tag := make([]byte, blockSize)
	if len(X)%blockSize != 0 {
		byteutil.XorBytesMut(offset, o.mask.lAst)
		pad := make([]byte, blockSize)
		o.block.Encrypt(pad, offset)
		chunkX := X[blockSize*m:]
		chunkY := Y[blockSize*m : len(X)]
		byteutil.XorBytes(chunkY, chunkX, pad[:len(chunkX)])
		// P_* || bit(1) || zeroes(127) - len(P_*)
		switch instruction {
		case enc:
			paddedY := append(chunkX, byte(128))
			paddedY = append(paddedY, make([]byte, blockSize-len(chunkX)-1)...)
			byteutil.XorBytesMut(checksum, paddedY)
		case dec:
			paddedX := append(chunkY, byte(128))
			paddedX = append(paddedX, make([]byte, blockSize-len(chunkY)-1)...)
			byteutil.XorBytesMut(checksum, paddedX)
		}
		byteutil.XorBytes(tag, checksum, offset)
		byteutil.XorBytesMut(tag, o.mask.lDol)
		o.block.Encrypt(tag, tag)
		byteutil.XorBytesMut(tag, o.hash(adata))
		copy(Y[blockSize*m+len(chunkY):], tag[:o.tagSize])
	} else {
		byteutil.XorBytes(tag, checksum, offset)
		byteutil.XorBytesMut(tag, o.mask.lDol)
		o.block.Encrypt(tag, tag)
		byteutil.XorBytesMut(tag, o.hash(adata))
		copy(Y[blockSize*m:], tag[:o.tagSize])
	}
	return Y
}

// This hash function is used to compute the tag. Per design, on empty input it
// returns a slice of zeros, of the same length as the underlying block cipher
// block size.
func (o *ocb) hash(adata []byte) []byte {
	//
	// Consider A as a sequence of 128-bit blocks
	//
	A := make([]byte, len(adata))
	copy(A, adata)
	blockSize := o.block.BlockSize()

	//
	// Process any whole blocks
	//
	sum := make([]byte, blockSize)
	offset := make([]byte, blockSize)
	m := len(A) / blockSize
	for i := 0; i < m; i++ {
		chunk := A[blockSize*i : blockSize*(i+1)]
		index := bits.TrailingZeros(uint(i + 1))
		// If the mask table is too short
		if len(o.mask.L)-1 < index {
			o.mask.extendTable(index)
		}
		byteutil.XorBytesMut(offset, o.mask.L[index])
		byteutil.XorBytesMut(chunk, offset)
		o.block.Encrypt(chunk, chunk)
		byteutil.XorBytesMut(sum, chunk)
	}

	//
	// Process any final partial block; compute final hash value
	//
	if len(A)%blockSize != 0 {
		byteutil.XorBytesMut(offset, o.mask.lAst)
		// Pad block with 1 || 0 ^ 127 - bitlength(a)
		ending := make([]byte, blockSize-len(A)%blockSize)
		ending[0] = 0x80
		encrypted := append(A[blockSize*m:], ending...)
		byteutil.XorBytesMut(encrypted, offset)
		o.block.Encrypt(encrypted, encrypted)
		byteutil.XorBytesMut(sum, encrypted)
	}
	return sum
}

func initializeMaskTable(block cipher.Block) mask {
	//
	// Key-dependent variables
	//
	lAst := make([]byte, block.BlockSize())
	block.Encrypt(lAst, lAst)
	lDol := byteutil.GfnDouble(lAst)
	L := make([][]byte, 1)
	L[0] = byteutil.GfnDouble(lDol)

	return mask{
		lAst: lAst,
		lDol: lDol,
		L:    L,
	}
}

// Extends the L array of mask m up to L[limit], with L[i] = GfnDouble(L[i-1])
func (m *mask) extendTable(limit int) {
	for i := len(m.L); i <= limit; i++ {
		m.L = append(m.L, byteutil.GfnDouble(m.L[i-1]))
	}
}

func ocbError(err string) error {
	return errors.New("crypto/ocb: " + err)
}
070701000001F8000081A4000000000000000000000001645E367C00003097000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/ocb/random_vectors.go  // In the test vectors provided by RFC 7253, the "bottom"
// internal variable, which defines "offset" for the first time, does not
// exceed 15. However, it can attain values up to 63.

// These vectors include key length in {128, 192, 256}, tag size 128, and
// random nonce, header, and plaintext lengths.

// This file was automatically generated.

package ocb

var randomVectors = []struct {
	key, nonce, header, plaintext, ciphertext string
}{

	{"9438C5D599308EAF13F800D2D31EA7F0",
		"C38EE4801BEBFFA1CD8635BE",
		"0E507B7DADD8A98CDFE272D3CB6B3E8332B56AE583FB049C0874D4200BED16BD1A044182434E9DA0E841F182DFD5B3016B34641CED0784F1745F63AB3D0DA22D3351C9EF9A658B8081E24498EBF61FCE40DA6D8E184536",
		"962D227786FB8913A8BAD5DC3250",
		"EEDEF5FFA5986D1E3BF86DDD33EF9ADC79DCA06E215FA772CCBA814F63AD"},
	{"BA7DE631C7D6712167C6724F5B9A2B1D",
		"35263EBDA05765DC0E71F1F5",
		"0103257B4224507C0242FEFE821EA7FA42E0A82863E5F8B68F7D881B4B44FA428A2B6B21D2F591260802D8AB6D83",
		"9D6D1FC93AE8A64E7889B7B2E3521EFA9B920A8DDB692E6F833DDC4A38AFA535E5E2A3ED82CB7E26404AB86C54D01C4668F28398C2DF33D5D561CBA1C8DCFA7A912F5048E545B59483C0E3221F54B14DAA2E4EB657B3BEF9554F34CAD69B2724AE962D3D8A",
		"E93852D1985C5E775655E937FA79CE5BF28A585F2AF53A5018853B9634BE3C84499AC0081918FDCE0624494D60E25F76ACD6853AC7576E3C350F332249BFCABD4E73CEABC36BE4EDDA40914E598AE74174A0D7442149B26990899491BDDFE8FC54D6C18E83AE9E9A6FFBF5D376565633862EEAD88D"},
	{"2E74B25289F6FD3E578C24866E9C72A5",
		"FD912F15025AF8414642BA1D1D",
		"FB5FB8C26F365EEDAB5FE260C6E3CCD27806729C8335F146063A7F9EA93290E56CF84576EB446350D22AD730547C267B1F0BBB97EB34E1E2C41A",
		"6C092EBF78F76EE8C1C6E592277D9545BA16EDB67BC7D8480B9827702DC2F8A129E2B08A2CE710CA7E1DA45CE162BB6CD4B512E632116E2211D3C90871EFB06B8D4B902681C7FB",
		"6AC0A77F26531BF4F354A1737F99E49BE32ECD909A7A71AD69352906F54B08A9CE9B8CA5D724CBFFC5673437F23F630697F3B84117A1431D6FA8CC13A974FB4AD360300522E09511B99E71065D5AC4BBCB1D791E864EF4"},
	{"E7EC507C802528F790AFF5303A017B17",
		"4B97A7A568940A9E3CE7A99E93031E",
		"28349BDC5A09390C480F9B8AA3EDEA3DDB8B9D64BCA322C570B8225DF0E31190DAB25A4014BA39519E02ABFB12B89AA28BBFD29E486E7FB28734258C817B63CED9912DBAFEBB93E2798AB2890DE3B0ACFCFF906AB15563EF7823CE83D27CDB251195E22BD1337BCBDE65E7C2C427321C463C2777BFE5AEAA",
		"9455B3EA706B74",
		"7F33BA3EA848D48A96B9530E26888F43EBD4463C9399B6"},
	{"6C928AA3224736F28EE7378DE0090191",
		"8936138E2E4C6A13280017A1622D",
		"6202717F2631565BDCDC57C6584543E72A7C8BD444D0D108ED35069819633C",
		"DA0691439E5F035F3E455269D14FE5C201C8C9B0A3FE2D3F86BCC59387C868FE65733D388360B31E3CE28B4BF6A8BE636706B536D5720DB66B47CF1C7A5AFD6F61E0EF90F1726D6B0E169F9A768B2B7AE4EE00A17F630AC905FCAAA1B707FFF25B3A1AAE83B504837C64A5639B2A34002B300EC035C9B43654DA55",
		"B8804D182AB0F0EEB464FA7BD1329AD6154F982013F3765FEDFE09E26DAC078C9C1439BFC1159D6C02A25E3FF83EF852570117B315852AD5EE20E0FA3AA0A626B0E43BC0CEA38B44579DD36803455FB46989B90E6D229F513FD727AF8372517E9488384C515D6067704119C931299A0982EDDFB9C2E86A90C450C077EB222511EC9CCABC9FCFDB19F70088"},
	{"ECEA315CA4B3F425B0C9957A17805EA4",
		"664CDAE18403F4F9BA13015A44FC",
		"642AFB090D6C6DB46783F08B01A3EF2A8FEB5736B531EAC226E7888FCC8505F396818F83105065FACB3267485B9E5E4A0261F621041C08FCCB2A809A49AB5252A91D0971BCC620B9D614BD77E57A0EED2FA5",
		"6852C31F8083E20E364CEA21BB7854D67CEE812FE1C9ED2425C0932A90D3780728D1BB",
		"2ECEF962A9695A463ADABB275BDA9FF8B2BA57AEC2F52EFFB700CD9271A74D2A011C24AEA946051BD6291776429B7E681BA33E"},
	{"4EE616C4A58AAA380878F71A373461F6",
		"91B8C9C176D9C385E9C47E52",
		"CDA440B7F9762C572A718AC754EDEECC119E5EE0CCB9FEA4FFB22EEE75087C032EBF3DA9CDD8A28CC010B99ED45143B41A4BA50EA2A005473F89639237838867A57F23B0F0ED3BF22490E4501DAC9C658A9B9F",
		"D6E645FA9AE410D15B8123FD757FA356A8DBE9258DDB5BE88832E615910993F497EC",
		"B70ED7BF959FB2AAED4F36174A2A99BFB16992C8CDF369C782C4DB9C73DE78C5DB8E0615F647243B97ACDB24503BC9CADC48"},
	{"DCD475773136C830D5E3D0C5FE05B7FF",
		"BB8E1FBB483BE7616A922C4A",
		"36FEF2E1CB29E76A6EA663FC3AF66ECD7404F466382F7B040AABED62293302B56E8783EF7EBC21B4A16C3E78A7483A0A403F253A2CDC5BBF79DC3DAE6C73F39A961D8FBBE8D41B",
		"441E886EA38322B2437ECA7DEB5282518865A66780A454E510878E61BFEC3106A3CD93D2A02052E6F9E1832F9791053E3B76BF4C07EFDD6D4106E3027FABB752E60C1AA425416A87D53938163817A1051EBA1D1DEEB4B9B25C7E97368B52E5911A31810B0EC5AF547559B6142D9F4C4A6EF24A4CF75271BF9D48F62B",
		"1BE4DD2F4E25A6512C2CC71D24BBB07368589A94C2714962CD0ACE5605688F06342587521E75F0ACAFFD86212FB5C34327D238DB36CF2B787794B9A4412E7CD1410EA5DDD2450C265F29CF96013CD213FD2880657694D718558964BC189B4A84AFCF47EB012935483052399DBA5B088B0A0477F20DFE0E85DCB735E21F22A439FB837DD365A93116D063E607"},
	{"3FBA2B3D30177FFE15C1C59ED2148BB2C091F5615FBA7C07",
		"FACF804A4BEBF998505FF9DE",
		"8213B9263B2971A5BDA18DBD02208EE1",
		"15B323926993B326EA19F892D704439FC478828322AF72118748284A1FD8A6D814E641F70512FD706980337379F31DC63355974738D7FEA87AD2858C0C2EBBFBE74371C21450072373C7B651B334D7C4D43260B9D7CCD3AF9EDB",
		"6D35DC1469B26E6AAB26272A41B46916397C24C485B61162E640A062D9275BC33DDCFD3D9E1A53B6C8F51AC89B66A41D59B3574197A40D9B6DCF8A4E2A001409C8112F16B9C389E0096179DB914E05D6D11ED0005AD17E1CE105A2F0BAB8F6B1540DEB968B7A5428FF44"},
	{"53B52B8D4D748BCDF1DDE68857832FA46227FA6E2F32EFA1",
		"0B0EF53D4606B28D1398355F",
		"F23882436349094AF98BCACA8218E81581A043B19009E28EFBF2DE37883E04864148CC01D240552CA8844EC1456F42034653067DA67E80F87105FD06E14FF771246C9612867BE4D215F6D761",
		"F15030679BD4088D42CAC9BF2E9606EAD4798782FA3ED8C57EBE7F84A53236F51B25967C6489D0CD20C9EEA752F9BC",
		"67B96E2D67C3729C96DAEAEDF821D61C17E648643A2134C5621FEC621186915AD80864BFD1EB5B238BF526A679385E012A457F583AFA78134242E9D9C1B4E4"},
	{"0272DD80F23399F49BFC320381A5CD8225867245A49A7D41",
		"5C83F4896D0738E1366B1836",
		"69B0337289B19F73A12BAEEA857CCAF396C11113715D9500CCCF48BA08CFF12BC8B4BADB3084E63B85719DB5058FA7C2C11DEB096D7943CFA7CAF5",
		"C01AD10FC8B562CD17C7BC2FAB3E26CBDFF8D7F4DEA816794BBCC12336991712972F52816AABAB244EB43B0137E2BAC1DD413CE79531E78BEF782E6B439612BB3AEF154DE3502784F287958EBC159419F9EBA27916A28D6307324129F506B1DE80C1755A929F87",
		"FEFE52DD7159C8DD6E8EC2D3D3C0F37AB6CB471A75A071D17EC4ACDD8F3AA4D7D4F7BB559F3C09099E3D9003E5E8AA1F556B79CECDE66F85B08FA5955E6976BF2695EA076388A62D2AD5BAB7CBF1A7F3F4C8D5CDF37CDE99BD3E30B685D9E5EEE48C7C89118EF4878EB89747F28271FA2CC45F8E9E7601"},
	{"3EEAED04A455D6E5E5AB53CFD5AFD2F2BC625C7BF4BE49A5",
		"36B88F63ADBB5668588181D774",
		"D367E3CB3703E762D23C6533188EF7028EFF9D935A3977150361997EC9DEAF1E4794BDE26AA8B53C124980B1362EC86FCDDFC7A90073171C1BAEE351A53234B86C66E8AB92FAE99EC6967A6D3428892D80",
		"573454C719A9A55E04437BF7CBAAF27563CCCD92ADD5E515CD63305DFF0687E5EEF790C5DCA5C0033E9AB129505E2775438D92B38F08F3B0356BA142C6F694",
		"E9F79A5B432D9E682C9AAA5661CFC2E49A0FCB81A431E54B42EB73DD3BED3F377FEC556ABA81624BA64A5D739AD41467460088F8D4F442180A9382CA635745473794C382FCDDC49BA4EB6D8A44AE3C"},
	{"B695C691538F8CBD60F039D0E28894E3693CC7C36D92D79D",
		"BC099AEB637361BAC536B57618",
		"BFFF1A65AE38D1DC142C71637319F5F6508E2CB33C9DCB94202B359ED5A5ED8042E7F4F09231D32A7242976677E6F4C549BF65FADC99E5AF43F7A46FD95E16C2",
		"081DF3FD85B415D803F0BE5AC58CFF0023FDDED99788296C3731D8",
		"E50C64E3614D94FE69C47092E46ACC9957C6FEA2CCBF96BC62FBABE7424753C75F9C147C42AE26FE171531"},
	{"C9ACBD2718F0689A1BE9802A551B6B8D9CF5614DAF5E65ED",
		"B1B0AAF373B8B026EB80422051D8",
		"6648C0E61AC733C76119D23FB24548D637751387AA2EAE9D80E912B7BD486CAAD9EAF4D7A5FE2B54AAD481E8EC94BB4D558000896E2010462B70C9FED1E7273080D1",
		"189F591F6CB6D59AFEDD14C341741A8F1037DC0DF00FC57CE65C30F49E860255CEA5DC6019380CC0FE8880BC1A9E685F41C239C38F36E3F2A1388865C5C311059C0A",
		"922A5E949B61D03BE34AB5F4E58607D4504EA14017BB363DAE3C873059EA7A1C77A746FB78981671D26C2CF6D9F24952D510044CE02A10177E9DB42D0145211DFE6E84369C5E3BC2669EAB4147B2822895F9"},
	{"7A832BD2CF5BF4919F353CE2A8C86A5E406DA2D52BE16A72",
		"2F2F17CECF7E5A756D10785A3CB9DB",
		"61DA05E3788CC2D8405DBA70C7A28E5AF699863C9F72E6C6770126929F5D6FA267F005EBCF49495CB46400958A3AE80D1289D1C671",
		"44E91121195A41AF14E8CFDBD39A4B517BE0DF1A72977ED8A3EEF8EEDA1166B2EB6DB2C4AE2E74FA0F0C74537F659BFBD141E5DDEC67E64EDA85AABD3F52C85A785B9FB3CECD70E7DF",
		"BEDF596EA21288D2B84901E188F6EE1468B14D5161D3802DBFE00D60203A24E2AB62714BF272A45551489838C3A7FEAADC177B591836E73684867CCF4E12901DCF2064058726BBA554E84ADC5136F507E961188D4AF06943D3"},
	{"1508E8AE9079AA15F1CEC4F776B4D11BCCB061B58AA56C18",
		"BCA625674F41D1E3AB47672DC0C3",
		"8B12CF84F16360F0EAD2A41BC021530FFCEC7F3579CAE658E10E2D3D81870F65AFCED0C77C6C4C6E6BA424FF23088C796BA6195ABA35094BF1829E089662E7A95FC90750AE16D0C8AFA55DAC789D7735B970B58D4BE7CEC7341DA82A0179A01929C27A59C5063215B859EA43",
		"E525422519ECE070E82C",
		"B47BC07C3ED1C0A43BA52C43CBACBCDBB29CAF1001E09FDF7107"},
	{"7550C2761644E911FE9ADD119BAC07376BEA442845FEAD876D7E7AC1B713E464",
		"36D2EC25ADD33CDEDF495205BBC923",
		"7FCFE81A3790DE97FFC3DE160C470847EA7E841177C2F759571CBD837EA004A6CA8C6F4AEBFF2E9FD552D73EB8A30705D58D70C0B67AEEA280CBBF0A477358ACEF1E7508F2735CD9A0E4F9AC92B8C008F575D3B6278F1C18BD01227E3502E5255F3AB1893632AD00C717C588EF652A51A43209E7EE90",
		"2B1A62F8FDFAA3C16470A21AD307C9A7D03ADE8EF72C69B06F8D738CDE578D7AEFD0D40BD9C022FB9F580DF5394C998ACCCEFC5471A3996FB8F1045A81FDC6F32D13502EA65A211390C8D882B8E0BEFD8DD8CBEF51D1597B124E9F7F",
		"C873E02A22DB89EB0787DB6A60B99F7E4A0A085D5C4232A81ADCE2D60AA36F92DDC33F93DD8640AC0E08416B187FB382B3EC3EE85A64B0E6EE41C1366A5AD2A282F66605E87031CCBA2FA7B2DA201D975994AADE3DD1EE122AE09604AD489B84BF0C1AB7129EE16C6934850E"},
	{"A51300285E554FDBDE7F771A9A9A80955639DD87129FAEF74987C91FB9687C71",
		"81691D5D20EC818FCFF24B33DECC",
		"C948093218AA9EB2A8E44A87EEA73FC8B6B75A196819A14BD83709EA323E8DF8B491045220E1D88729A38DBCFFB60D3056DAD4564498FD6574F74512945DEB34B69329ACED9FFC05D5D59DFCD5B973E2ACAFE6AD1EF8BBBC49351A2DD12508ED89ED",
		"EB861165DAF7625F827C6B574ED703F03215",
		"C6CD1CE76D2B3679C1B5AA1CFD67CCB55444B6BFD3E22C81CBC9BB738796B83E54E3"},
	{"8CE0156D26FAEB7E0B9B800BBB2E9D4075B5EAC5C62358B0E7F6FCE610223282",
		"D2A7B94DD12CDACA909D3AD7",
		"E021A78F374FC271389AB9A3E97077D755",
		"7C26000B58929F5095E1CEE154F76C2A299248E299F9B5ADE6C403AA1FD4A67FD4E0232F214CE7B919EE7A1027D2B76C57475715CD078461",
		"C556FB38DF069B56F337B5FF5775CE6EAA16824DFA754F20B78819028EA635C3BB7AA731DE8776B2DCB67DCA2D33EEDF3C7E52EA450013722A41755A0752433ED17BDD5991AAE77A"},
	{"1E8000A2CE00A561C9920A30BF0D7B983FEF8A1014C8F04C35CA6970E6BA02BD",
		"65ED3D63F79F90BBFD19775E",
		"336A8C0B7243582A46B221AA677647FCAE91",
		"134A8B34824A290E7B",
		"914FBEF80D0E6E17F8BDBB6097EBF5FBB0554952DC2B9E5151"},
	{"53D5607BBE690B6E8D8F6D97F3DF2BA853B682597A214B8AA0EA6E598650AF15",
		"C391A856B9FE234E14BA1AC7BB40FF",
		"479682BC21349C4BE1641D5E78FE2C79EC1B9CF5470936DCAD9967A4DCD7C4EFADA593BC9EDE71E6A08829B8580901B61E274227E9D918502DE3",
		"EAD154DC09C5E26C5D26FF33ED148B27120C7F2C23225CC0D0631B03E1F6C6D96FEB88C1A4052ACB4CE746B884B6502931F407021126C6AAB8C514C077A5A38438AE88EE",
		"938821286EBB671D999B87C032E1D6055392EB564E57970D55E545FC5E8BAB90E6E3E3C0913F6320995FC636D72CD9919657CC38BD51552F4A502D8D1FE56DB33EBAC5092630E69EBB986F0E15CEE9FC8C052501"},
	{"294362FCC984F440CEA3E9F7D2C06AF20C53AAC1B3738CA2186C914A6E193ABB",
		"B15B61C8BB39261A8F55AB178EC3",
		"D0729B6B75BB",
		"2BD089ADCE9F334BAE3B065996C7D616DD0C27DF4218DCEEA0FBCA0F968837CE26B0876083327E25681FDDD620A32EC0DA12F73FAE826CC94BFF2B90A54D2651",
		"AC94B25E4E21DE2437B806966CCD5D9385EF0CD4A51AB9FA6DE675C7B8952D67802E9FEC1FDE9F5D1EAB06057498BC0EEA454804FC9D2068982A3E24182D9AC2E7AB9994DDC899A604264583F63D066B"},
	{"959DBFEB039B1A5B8CE6A44649B602AAA5F98A906DB96143D202CD2024F749D9",
		"01D7BDB1133E9C347486C1EFA6",
		"F3843955BD741F379DD750585EDC55E2CDA05CCBA8C1F4622AC2FE35214BC3A019B8BD12C4CC42D9213D1E1556941E8D8450830287FFB3B763A13722DD4140ED9846FB5FFF745D7B0B967D810A068222E10B259AF1D392035B0D83DC1498A6830B11B2418A840212599171E0258A1C203B05362978",
		"A21811232C950FA8B12237C2EBD6A7CD2C3A155905E9E0C7C120",
		"63C1CE397B22F1A03F1FA549B43178BC405B152D3C95E977426D519B3DFCA28498823240592B6EEE7A14"},
	{"096AE499F5294173F34FF2B375F0E5D5AB79D0D03B33B1A74D7D576826345DF4",
		"0C52B3D11D636E5910A4DD76D32C",
		"229E9ECA3053789E937447BC719467075B6138A142DA528DA8F0CF8DDF022FD9AF8E74779BA3AC306609",
		"8B7A00038783E8BAF6EDEAE0C4EAB48FC8FD501A588C7E4A4DB71E3604F2155A97687D3D2FFF8569261375A513CF4398CE0F87CA1658A1050F6EF6C4EA3E25",
		"C20B6CF8D3C8241825FD90B2EDAC7593600646E579A8D8DAAE9E2E40C3835FE801B2BE4379131452BC5182C90307B176DFBE2049544222FE7783147B690774F6D9D7CEF52A91E61E298E9AA15464AC"},
}
 070701000001F9000081A4000000000000000000000001645E367C00000BDA000000000000000000000000000000000000005F00000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/ocb/rfc7253_test_vectors_suite_a.go    package ocb

import (
	"encoding/hex"
)

// Test vectors from https://tools.ietf.org/html/rfc7253. Note that key is
// shared accross tests.
var testKey, _ = hex.DecodeString("000102030405060708090A0B0C0D0E0F")

var rfc7253testVectors = []struct {
	nonce, header, plaintext, ciphertext string
}{
	{"BBAA99887766554433221100",
		"",
		"",
		"785407BFFFC8AD9EDCC5520AC9111EE6"},
	{"BBAA99887766554433221101",
		"0001020304050607",
		"0001020304050607",
		"6820B3657B6F615A5725BDA0D3B4EB3A257C9AF1F8F03009"},
	{"BBAA99887766554433221102",
		"0001020304050607",
		"",
		"81017F8203F081277152FADE694A0A00"},
	{"BBAA99887766554433221103",
		"",
		"0001020304050607",
		"45DD69F8F5AAE72414054CD1F35D82760B2CD00D2F99BFA9"},
	{"BBAA99887766554433221104",
		"000102030405060708090A0B0C0D0E0F",
		"000102030405060708090A0B0C0D0E0F",
		"571D535B60B277188BE5147170A9A22C3AD7A4FF3835B8C5701C1CCEC8FC3358"},
	{"BBAA99887766554433221105",
		"000102030405060708090A0B0C0D0E0F",
		"",
		"8CF761B6902EF764462AD86498CA6B97"},
	{"BBAA99887766554433221106",
		"",
		"000102030405060708090A0B0C0D0E0F",
		"5CE88EC2E0692706A915C00AEB8B2396F40E1C743F52436BDF06D8FA1ECA343D"},
	{"BBAA99887766554433221107",
		"000102030405060708090A0B0C0D0E0F1011121314151617",
		"000102030405060708090A0B0C0D0E0F1011121314151617",
		"1CA2207308C87C010756104D8840CE1952F09673A448A122C92C62241051F57356D7F3C90BB0E07F"},
	{"BBAA99887766554433221108",
		"000102030405060708090A0B0C0D0E0F1011121314151617",
		"",
		"6DC225A071FC1B9F7C69F93B0F1E10DE"},
	{"BBAA99887766554433221109",
		"",
		"000102030405060708090A0B0C0D0E0F1011121314151617",
		"221BD0DE7FA6FE993ECCD769460A0AF2D6CDED0C395B1C3CE725F32494B9F914D85C0B1EB38357FF"},
	{"BBAA9988776655443322110A",
		"000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F",
		"000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F",
		"BD6F6C496201C69296C11EFD138A467ABD3C707924B964DEAFFC40319AF5A48540FBBA186C5553C68AD9F592A79A4240"},
	{"BBAA9988776655443322110B",
		"000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F",
		"",
		"FE80690BEE8A485D11F32965BC9D2A32"},
	{"BBAA9988776655443322110C",
		"",
		"000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F",
		"2942BFC773BDA23CABC6ACFD9BFD5835BD300F0973792EF46040C53F1432BCDFB5E1DDE3BC18A5F840B52E653444D5DF"},
	{"BBAA9988776655443322110D",
		"000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627",
		"000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627",
		"D5CA91748410C1751FF8A2F618255B68A0A12E093FF454606E59F9C1D0DDC54B65E8628E568BAD7AED07BA06A4A69483A7035490C5769E60"},
	{"BBAA9988776655443322110E",
		"000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627",
		"",
		"C5CD9D1850C141E358649994EE701B68"},
	{"BBAA9988776655443322110F",
		"",
		"000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627",
		"4412923493C57D5DE0D700F753CCE0D1D2D95060122E9F15A5DDBFC5787E50B5CC55EE507BCB084E479AD363AC366B95A98CA5F3000B1479"},
}
  070701000001FA000081A4000000000000000000000001645E367C000003D1000000000000000000000000000000000000005F00000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/ocb/rfc7253_test_vectors_suite_b.go    package ocb

// Second set of test vectors from https://tools.ietf.org/html/rfc7253
var rfc7253TestVectorTaglen96 = struct {
	key, nonce, header, plaintext, ciphertext string
}{"0F0E0D0C0B0A09080706050403020100",
		"BBAA9988776655443322110D",
		"000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627",
		"000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627",
		"1792A4E31E0755FB03E31B22116E6C2DDF9EFD6E33D536F1A0124B0A55BAE884ED93481529C76B6AD0C515F4D1CDD4FDAC4F02AA"}

var rfc7253AlgorithmTest = []struct {
	KEYLEN, TAGLEN int
	OUTPUT string }{
		{128, 128, "67E944D23256C5E0B6C61FA22FDF1EA2"},
		{192, 128, "F673F2C3E7174AAE7BAE986CA9F29E17"},
		{256, 128, "D90EB8E9C977C88B79DD793D7FFA161C"},
		{128, 96, "77A3D8E73589158D25D01209"},
		{192, 96, "05D56EAD2752C86BE6932C5E"},
		{256, 96, "5458359AC23B0CBA9E6330DD"},
		{128, 64, "192C9B7BD90BA06A"},
		{192, 64, "0066BC6E0EF34E24"},
		{256, 64, "7D4EA5D445501CBE"},
	}
   070701000001FB000041ED00000000000000000000000A645E367C00000000000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp    070701000001FC000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/aes    070701000001FD000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/aes/keywrap    070701000001FE000081A4000000000000000000000001645E367C00001202000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/aes/keywrap/keywrap.go // Copyright 2014 Matthew Endsley
// All rights reserved
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted providing that the following conditions
// are met:
// 1. Redistributions of source code must retain the above copyright
//    notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above copyright
//    notice, this list of conditions and the following disclaimer in the
//    documentation and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
// IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.

// Package keywrap is an implementation of the RFC 3394 AES key wrapping
// algorithm. This is used in OpenPGP with elliptic curve keys.
package keywrap

import (
	"crypto/aes"
	"encoding/binary"
	"errors"
)

var (
	// ErrWrapPlaintext is returned if the plaintext is not a multiple
	// of 64 bits.
	ErrWrapPlaintext = errors.New("keywrap: plainText must be a multiple of 64 bits")

	// ErrUnwrapCiphertext is returned if the ciphertext is not a
	// multiple of 64 bits.
	ErrUnwrapCiphertext = errors.New("keywrap: cipherText must by a multiple of 64 bits")

	// ErrUnwrapFailed is returned if unwrapping a key fails.
	ErrUnwrapFailed = errors.New("keywrap: failed to unwrap key")

	// NB: the AES NewCipher call only fails if the key is an invalid length.

	// ErrInvalidKey is returned when the AES key is invalid.
	ErrInvalidKey = errors.New("keywrap: invalid AES key")
)

// Wrap a key using the RFC 3394 AES Key Wrap Algorithm.
func Wrap(key, plainText []byte) ([]byte, error) {
	if len(plainText)%8 != 0 {
		return nil, ErrWrapPlaintext
	}

	c, err := aes.NewCipher(key)
	if err != nil {
		return nil, ErrInvalidKey
	}

	nblocks := len(plainText) / 8

	// 1) Initialize variables.
	var block [aes.BlockSize]byte
	// - Set A = IV, an initial value (see 2.2.3)
	for ii := 0; ii < 8; ii++ {
		block[ii] = 0xA6
	}

	// - For i = 1 to n
	// -   Set R[i] = P[i]
	intermediate := make([]byte, len(plainText))
	copy(intermediate, plainText)

	// 2) Calculate intermediate values.
	for ii := 0; ii < 6; ii++ {
		for jj := 0; jj < nblocks; jj++ {
			// - B = AES(K, A | R[i])
			copy(block[8:], intermediate[jj*8:jj*8+8])
			c.Encrypt(block[:], block[:])

			// - A = MSB(64, B) ^ t where t = (n*j)+1
			t := uint64(ii*nblocks + jj + 1)
			val := binary.BigEndian.Uint64(block[:8]) ^ t
			binary.BigEndian.PutUint64(block[:8], val)

			// - R[i] = LSB(64, B)
			copy(intermediate[jj*8:jj*8+8], block[8:])
		}
	}

	// 3) Output results.
	// - Set C[0] = A
	// - For i = 1 to n
	// -   C[i] = R[i]
	return append(block[:8], intermediate...), nil
}

// Unwrap a key using the RFC 3394 AES Key Wrap Algorithm.
func Unwrap(key, cipherText []byte) ([]byte, error) {
	if len(cipherText)%8 != 0 {
		return nil, ErrUnwrapCiphertext
	}

	c, err := aes.NewCipher(key)
	if err != nil {
		return nil, ErrInvalidKey
	}

	nblocks := len(cipherText)/8 - 1

	// 1) Initialize variables.
	var block [aes.BlockSize]byte
	// - Set A = C[0]
	copy(block[:8], cipherText[:8])

	// - For i = 1 to n
	// -   Set R[i] = C[i]
	intermediate := make([]byte, len(cipherText)-8)
	copy(intermediate, cipherText[8:])

	// 2) Compute intermediate values.
	for jj := 5; jj >= 0; jj-- {
		for ii := nblocks - 1; ii >= 0; ii-- {
			// - B = AES-1(K, (A ^ t) | R[i]) where t = n*j+1
			// - A = MSB(64, B)
			t := uint64(jj*nblocks + ii + 1)
			val := binary.BigEndian.Uint64(block[:8]) ^ t
			binary.BigEndian.PutUint64(block[:8], val)

			copy(block[8:], intermediate[ii*8:ii*8+8])
			c.Decrypt(block[:], block[:])

			// - R[i] = LSB(B, 64)
			copy(intermediate[ii*8:ii*8+8], block[8:])
		}
	}

	// 3) Output results.
	// - If A is an appropriate initial value (see 2.2.3),
	for ii := 0; ii < 8; ii++ {
		if block[ii] != 0xA6 {
			return nil, ErrUnwrapFailed
		}
	}

	// - For i = 1 to n
	// -   P[i] = R[i]
	return intermediate, nil
}
  070701000001FF000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/armor  07070100000200000081A4000000000000000000000001645E367C0000143C000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/armor/armor.go // Copyright 2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package armor implements OpenPGP ASCII Armor, see RFC 4880. OpenPGP Armor is
// very similar to PEM except that it has an additional CRC checksum.
package armor // import "github.com/ProtonMail/go-crypto/openpgp/armor"

import (
	"bufio"
	"bytes"
	"encoding/base64"
	"github.com/ProtonMail/go-crypto/openpgp/errors"
	"io"
)

// A Block represents an OpenPGP armored structure.
//
// The encoded form is:
//    -----BEGIN Type-----
//    Headers
//
//    base64-encoded Bytes
//    '=' base64 encoded checksum
//    -----END Type-----
// where Headers is a possibly empty sequence of Key: Value lines.
//
// Since the armored data can be very large, this package presents a streaming
// interface.
type Block struct {
	Type    string            // The type, taken from the preamble (i.e. "PGP SIGNATURE").
	Header  map[string]string // Optional headers.
	Body    io.Reader         // A Reader from which the contents can be read
	lReader lineReader
	oReader openpgpReader
}

var ArmorCorrupt error = errors.StructuralError("armor invalid")

const crc24Init = 0xb704ce
const crc24Poly = 0x1864cfb
const crc24Mask = 0xffffff

// crc24 calculates the OpenPGP checksum as specified in RFC 4880, section 6.1
func crc24(crc uint32, d []byte) uint32 {
	for _, b := range d {
		crc ^= uint32(b) << 16
		for i := 0; i < 8; i++ {
			crc <<= 1
			if crc&0x1000000 != 0 {
				crc ^= crc24Poly
			}
		}
	}
	return crc
}

var armorStart = []byte("-----BEGIN ")
var armorEnd = []byte("-----END ")
var armorEndOfLine = []byte("-----")

// lineReader wraps a line based reader. It watches for the end of an armor
// block and records the expected CRC value.
type lineReader struct {
	in     *bufio.Reader
	buf    []byte
	eof    bool
	crc    uint32
	crcSet bool
}

func (l *lineReader) Read(p []byte) (n int, err error) {
	if l.eof {
		return 0, io.EOF
	}

	if len(l.buf) > 0 {
		n = copy(p, l.buf)
		l.buf = l.buf[n:]
		return
	}

	line, isPrefix, err := l.in.ReadLine()
	if err != nil {
		return
	}
	if isPrefix {
		return 0, ArmorCorrupt
	}

	if bytes.HasPrefix(line, armorEnd) {
		l.eof = true
		return 0, io.EOF
	}

	if len(line) == 5 && line[0] == '=' {
		// This is the checksum line
		var expectedBytes [3]byte
		var m int
		m, err = base64.StdEncoding.Decode(expectedBytes[0:], line[1:])
		if m != 3 || err != nil {
			return
		}
		l.crc = uint32(expectedBytes[0])<<16 |
			uint32(expectedBytes[1])<<8 |
			uint32(expectedBytes[2])

		line, _, err = l.in.ReadLine()
		if err != nil && err != io.EOF {
			return
		}
		if !bytes.HasPrefix(line, armorEnd) {
			return 0, ArmorCorrupt
		}

		l.eof = true
		l.crcSet = true
		return 0, io.EOF
	}

	if len(line) > 96 {
		return 0, ArmorCorrupt
	}

	n = copy(p, line)
	bytesToSave := len(line) - n
	if bytesToSave > 0 {
		if cap(l.buf) < bytesToSave {
			l.buf = make([]byte, 0, bytesToSave)
		}
		l.buf = l.buf[0:bytesToSave]
		copy(l.buf, line[n:])
	}

	return
}

// openpgpReader passes Read calls to the underlying base64 decoder, but keeps
// a running CRC of the resulting data and checks the CRC against the value
// found by the lineReader at EOF.
type openpgpReader struct {
	lReader    *lineReader
	b64Reader  io.Reader
	currentCRC uint32
}

func (r *openpgpReader) Read(p []byte) (n int, err error) {
	n, err = r.b64Reader.Read(p)
	r.currentCRC = crc24(r.currentCRC, p[:n])

	if err == io.EOF && r.lReader.crcSet && r.lReader.crc != uint32(r.currentCRC&crc24Mask) {
		return 0, ArmorCorrupt
	}

	return
}

// Decode reads a PGP armored block from the given Reader. It will ignore
// leading garbage. If it doesn't find a block, it will return nil, io.EOF. The
// given Reader is not usable after calling this function: an arbitrary amount
// of data may have been read past the end of the block.
func Decode(in io.Reader) (p *Block, err error) {
	r := bufio.NewReaderSize(in, 100)
	var line []byte
	ignoreNext := false

TryNextBlock:
	p = nil

	// Skip leading garbage
	for {
		ignoreThis := ignoreNext
		line, ignoreNext, err = r.ReadLine()
		if err != nil {
			return
		}
		if ignoreNext || ignoreThis {
			continue
		}
		line = bytes.TrimSpace(line)
		if len(line) > len(armorStart)+len(armorEndOfLine) && bytes.HasPrefix(line, armorStart) {
			break
		}
	}

	p = new(Block)
	p.Type = string(line[len(armorStart) : len(line)-len(armorEndOfLine)])
	p.Header = make(map[string]string)
	nextIsContinuation := false
	var lastKey string

	// Read headers
	for {
		isContinuation := nextIsContinuation
		line, nextIsContinuation, err = r.ReadLine()
		if err != nil {
			p = nil
			return
		}
		if isContinuation {
			p.Header[lastKey] += string(line)
			continue
		}
		line = bytes.TrimSpace(line)
		if len(line) == 0 {
			break
		}

		i := bytes.Index(line, []byte(": "))
		if i == -1 {
			goto TryNextBlock
		}
		lastKey = string(line[:i])
		p.Header[lastKey] = string(line[i+2:])
	}

	p.lReader.in = r
	p.oReader.currentCRC = crc24Init
	p.oReader.lReader = &p.lReader
	p.oReader.b64Reader = base64.NewDecoder(base64.StdEncoding, &p.lReader)
	p.Body = &p.oReader

	return
}
07070100000201000081A4000000000000000000000001645E367C00000D40000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/armor/encode.go    // Copyright 2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package armor

import (
	"encoding/base64"
	"io"
)

var armorHeaderSep = []byte(": ")
var blockEnd = []byte("\n=")
var newline = []byte("\n")
var armorEndOfLineOut = []byte("-----\n")

// writeSlices writes its arguments to the given Writer.
func writeSlices(out io.Writer, slices ...[]byte) (err error) {
	for _, s := range slices {
		_, err = out.Write(s)
		if err != nil {
			return err
		}
	}
	return
}

// lineBreaker breaks data across several lines, all of the same byte length
// (except possibly the last). Lines are broken with a single '\n'.
type lineBreaker struct {
	lineLength  int
	line        []byte
	used        int
	out         io.Writer
	haveWritten bool
}

func newLineBreaker(out io.Writer, lineLength int) *lineBreaker {
	return &lineBreaker{
		lineLength: lineLength,
		line:       make([]byte, lineLength),
		used:       0,
		out:        out,
	}
}

func (l *lineBreaker) Write(b []byte) (n int, err error) {
	n = len(b)

	if n == 0 {
		return
	}

	if l.used == 0 && l.haveWritten {
		_, err = l.out.Write([]byte{'\n'})
		if err != nil {
			return
		}
	}

	if l.used+len(b) < l.lineLength {
		l.used += copy(l.line[l.used:], b)
		return
	}

	l.haveWritten = true
	_, err = l.out.Write(l.line[0:l.used])
	if err != nil {
		return
	}
	excess := l.lineLength - l.used
	l.used = 0

	_, err = l.out.Write(b[0:excess])
	if err != nil {
		return
	}

	_, err = l.Write(b[excess:])
	return
}

func (l *lineBreaker) Close() (err error) {
	if l.used > 0 {
		_, err = l.out.Write(l.line[0:l.used])
		if err != nil {
			return
		}
	}

	return
}

// encoding keeps track of a running CRC24 over the data which has been written
// to it and outputs a OpenPGP checksum when closed, followed by an armor
// trailer.
//
// It's built into a stack of io.Writers:
//    encoding -> base64 encoder -> lineBreaker -> out
type encoding struct {
	out       io.Writer
	breaker   *lineBreaker
	b64       io.WriteCloser
	crc       uint32
	blockType []byte
}

func (e *encoding) Write(data []byte) (n int, err error) {
	e.crc = crc24(e.crc, data)
	return e.b64.Write(data)
}

func (e *encoding) Close() (err error) {
	err = e.b64.Close()
	if err != nil {
		return
	}
	e.breaker.Close()

	var checksumBytes [3]byte
	checksumBytes[0] = byte(e.crc >> 16)
	checksumBytes[1] = byte(e.crc >> 8)
	checksumBytes[2] = byte(e.crc)

	var b64ChecksumBytes [4]byte
	base64.StdEncoding.Encode(b64ChecksumBytes[:], checksumBytes[:])

	return writeSlices(e.out, blockEnd, b64ChecksumBytes[:], newline, armorEnd, e.blockType, armorEndOfLine)
}

// Encode returns a WriteCloser which will encode the data written to it in
// OpenPGP armor.
func Encode(out io.Writer, blockType string, headers map[string]string) (w io.WriteCloser, err error) {
	bType := []byte(blockType)
	err = writeSlices(out, armorStart, bType, armorEndOfLineOut)
	if err != nil {
		return
	}

	for k, v := range headers {
		err = writeSlices(out, []byte(k), armorHeaderSep, []byte(v), newline)
		if err != nil {
			return
		}
	}

	_, err = out.Write(newline)
	if err != nil {
		return
	}

	e := &encoding{
		out:       out,
		breaker:   newLineBreaker(out, 64),
		crc:       crc24Init,
		blockType: bType,
	}
	e.b64 = base64.NewEncoder(base64.StdEncoding, e.breaker)
	return e, nil
}
07070100000202000081A4000000000000000000000001645E367C000004E2000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/canonical_text.go  // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package openpgp

import (
	"hash"
	"io"
)

// NewCanonicalTextHash reformats text written to it into the canonical
// form and then applies the hash h.  See RFC 4880, section 5.2.1.
func NewCanonicalTextHash(h hash.Hash) hash.Hash {
	return &canonicalTextHash{h, 0}
}

type canonicalTextHash struct {
	h hash.Hash
	s int
}

var newline = []byte{'\r', '\n'}

func writeCanonical(cw io.Writer, buf []byte, s *int) (int, error) {
	start := 0
	for i, c := range buf {
		switch *s {
		case 0:
			if c == '\r' {
				*s = 1
			} else if c == '\n' {
				cw.Write(buf[start:i])
				cw.Write(newline)
				start = i + 1
			}
		case 1:
			*s = 0
		}
	}

	cw.Write(buf[start:])
	return len(buf), nil
}

func (cth *canonicalTextHash) Write(buf []byte) (int, error) {
	return writeCanonical(cth.h, buf, &cth.s)
}

func (cth *canonicalTextHash) Sum(in []byte) []byte {
	return cth.h.Sum(in)
}

func (cth *canonicalTextHash) Reset() {
	cth.h.Reset()
	cth.s = 0
}

func (cth *canonicalTextHash) Size() int {
	return cth.h.Size()
}

func (cth *canonicalTextHash) BlockSize() int {
	return cth.h.BlockSize()
}
  07070100000203000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/ecdh   07070100000204000081A4000000000000000000000001645E367C000011C3000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/ecdh/ecdh.go   // Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package ecdh implements ECDH encryption, suitable for OpenPGP,
// as specified in RFC 6637, section 8.
package ecdh

import (
	"bytes"
	"crypto/elliptic"
	"errors"
	"io"
	"math/big"

	"github.com/ProtonMail/go-crypto/openpgp/aes/keywrap"
	"github.com/ProtonMail/go-crypto/openpgp/internal/algorithm"
	"github.com/ProtonMail/go-crypto/openpgp/internal/ecc"
)

type KDF struct {
	Hash   algorithm.Hash
	Cipher algorithm.Cipher
}

type PublicKey struct {
	ecc.CurveType
	elliptic.Curve
	X, Y *big.Int
	KDF
}

type PrivateKey struct {
	PublicKey
	D []byte
}

func GenerateKey(c elliptic.Curve, kdf KDF, rand io.Reader) (priv *PrivateKey, err error) {
	priv = new(PrivateKey)
	priv.PublicKey.Curve = c
	priv.PublicKey.KDF = kdf
	priv.D, priv.PublicKey.X, priv.PublicKey.Y, err = elliptic.GenerateKey(c, rand)
	return
}

func Encrypt(random io.Reader, pub *PublicKey, msg, curveOID, fingerprint []byte) (vsG, c []byte, err error) {
	if len(msg) > 40 {
		return nil, nil, errors.New("ecdh: message too long")
	}
	// the sender MAY use 21, 13, and 5 bytes of padding for AES-128,
	// AES-192, and AES-256, respectively, to provide the same number of
	// octets, 40 total, as an input to the key wrapping method.
	padding := make([]byte, 40-len(msg))
	for i := range padding {
		padding[i] = byte(40 - len(msg))
	}
	m := append(msg, padding...)

	if pub.CurveType == ecc.Curve25519 {
		return X25519Encrypt(random, pub, m, curveOID, fingerprint)
	}

	d, x, y, err := elliptic.GenerateKey(pub.Curve, random)
	if err != nil {
		return nil, nil, err
	}

	vsG = elliptic.Marshal(pub.Curve, x, y)
	zbBig, _ := pub.Curve.ScalarMult(pub.X, pub.Y, d)

	byteLen := (pub.Curve.Params().BitSize + 7) >> 3
	zb := make([]byte, byteLen)
	zbBytes := zbBig.Bytes()
	copy(zb[byteLen-len(zbBytes):], zbBytes)

	z, err := buildKey(pub, zb, curveOID, fingerprint, false, false)
	if err != nil {
		return nil, nil, err
	}

	if c, err = keywrap.Wrap(z, m); err != nil {
		return nil, nil, err
	}

	return vsG, c, nil

}

func Decrypt(priv *PrivateKey, vsG, m, curveOID, fingerprint []byte) (msg []byte, err error) {
	if priv.PublicKey.CurveType == ecc.Curve25519 {
		return X25519Decrypt(priv, vsG, m, curveOID, fingerprint)
	}
	x, y := elliptic.Unmarshal(priv.Curve, vsG)
	zbBig, _ := priv.Curve.ScalarMult(x, y, priv.D)

	byteLen := (priv.Curve.Params().BitSize + 7) >> 3
	zb := make([]byte, byteLen)
	zbBytes := zbBig.Bytes()
	copy(zb[byteLen-len(zbBytes):], zbBytes)

	z, err := buildKey(&priv.PublicKey, zb, curveOID, fingerprint, false, false)
	if err != nil {
		return nil, err
	}

	c, err := keywrap.Unwrap(z, m)
	if err != nil {
		return nil, err
	}

	return c[:len(c)-int(c[len(c)-1])], nil
}

func buildKey(pub *PublicKey, zb []byte, curveOID, fingerprint []byte, stripLeading, stripTrailing bool) ([]byte, error) {
	// Param = curve_OID_len || curve_OID || public_key_alg_ID || 03
	//         || 01 || KDF_hash_ID || KEK_alg_ID for AESKeyWrap
	//         || "Anonymous Sender    " || recipient_fingerprint;
	param := new(bytes.Buffer)
	if _, err := param.Write(curveOID); err != nil {
		return nil, err
	}
	algKDF := []byte{18, 3, 1, pub.KDF.Hash.Id(), pub.KDF.Cipher.Id()}
	if _, err := param.Write(algKDF); err != nil {
		return nil, err
	}
	if _, err := param.Write([]byte("Anonymous Sender    ")); err != nil {
		return nil, err
	}
	// For v5 keys, the 20 leftmost octets of the fingerprint are used.
	if _, err := param.Write(fingerprint[:20]); err != nil {
		return nil, err
	}
	if param.Len() - len(curveOID) != 45 {
		return nil, errors.New("ecdh: malformed KDF Param")
	}

	// MB = Hash ( 00 || 00 || 00 || 01 || ZB || Param );
	h := pub.KDF.Hash.New()
	if _, err := h.Write([]byte{0x0, 0x0, 0x0, 0x1}); err != nil {
		return nil, err
	}
	zbLen := len(zb)
	i := 0
	j := zbLen - 1
	if stripLeading {
		// Work around old go crypto bug where the leading zeros are missing.
		for ; i < zbLen && zb[i] == 0; i++ {}
	}
	if stripTrailing {
		// Work around old OpenPGP.js bug where insignificant trailing zeros in
		// this little-endian number are missing.
		// (See https://github.com/openpgpjs/openpgpjs/pull/853.)
		for ; j >= 0 && zb[j] == 0; j-- {}
	}
	if _, err := h.Write(zb[i:j+1]); err != nil {
		return nil, err
	}
	if _, err := h.Write(param.Bytes()); err != nil {
		return nil, err
	}
	mb := h.Sum(nil)

	return mb[:pub.KDF.Cipher.KeySize()], nil // return oBits leftmost bits of MB.

}
 07070100000205000081A4000000000000000000000001645E367C00001082000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/ecdh/x25519.go // Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package ecdh implements ECDH encryption, suitable for OpenPGP,
// as specified in RFC 6637, section 8.
package ecdh

import (
	"errors"
	"io"
	"math/big"

	"github.com/ProtonMail/go-crypto/openpgp/aes/keywrap"
	"github.com/ProtonMail/go-crypto/openpgp/internal/ecc"
	"golang.org/x/crypto/curve25519"
)

// Generates a private-public key-pair.
// 'priv' is a private key; a little-endian scalar belonging to the set
// 2^{254} + 8 * [0, 2^{251}), in order to avoid the small subgroup of the
// curve. 'pub' is simply 'priv' * G where G is the base point.
// See https://cr.yp.to/ecdh.html and RFC7748, sec 5.
func x25519GenerateKeyPairBytes(rand io.Reader) (priv [32]byte, pub [32]byte, err error) {
	_, err = io.ReadFull(rand, priv[:])
	if err != nil {
		return
	}

	// The following ensures that the private key is a number of the form
	// 2^{254} + 8 * [0, 2^{251}), in order to avoid the small subgroup of
	// of the curve.
	//
	// This masking is done internally to ScalarBaseMult and so is unnecessary
	// for security, but OpenPGP implementations require that private keys be
	// pre-masked.
	priv[0] &= 248
	priv[31] &= 127
	priv[31] |= 64

	curve25519.ScalarBaseMult(&pub, &priv)
	return
}

// X25519GenerateKey samples the key pair according to the correct distribution.
// It also sets the given key-derivation function and returns the *PrivateKey
// object along with an error.
func X25519GenerateKey(rand io.Reader, kdf KDF) (priv *PrivateKey, err error) {
	ci := ecc.FindByName("Curve25519")
	priv = new(PrivateKey)
	priv.PublicKey.Curve = ci.Curve
	d, pubKey, err := x25519GenerateKeyPairBytes(rand)
	if err != nil {
		return nil, err
	}
	priv.PublicKey.KDF = kdf
	priv.D = make([]byte, 32)
	copyReversed(priv.D, d[:])
	priv.PublicKey.CurveType = ci.CurveType
	priv.PublicKey.Curve = ci.Curve
	/*
	 * Note that ECPoint.point differs from the definition of public keys in
	 * [Curve25519] in two ways: (1) the byte-ordering is big-endian, which is
	 * more uniform with how big integers are represented in TLS, and (2) there
	 * is an additional length byte (so ECpoint.point is actually 33 bytes),
	 * again for uniformity (and extensibility).
	 */
	var encodedKey = make([]byte, 33)
	encodedKey[0] = 0x40
	copy(encodedKey[1:], pubKey[:])
	priv.PublicKey.X = new(big.Int).SetBytes(encodedKey[:])
	priv.PublicKey.Y = new(big.Int)
	return priv, nil
}

func X25519Encrypt(random io.Reader, pub *PublicKey, msg, curveOID, fingerprint []byte) (vsG, c []byte, err error) {
	d, ephemeralKey, err := x25519GenerateKeyPairBytes(random)
	if err != nil {
		return nil, nil, err
	}
	var pubKey [32]byte

	if pub.X.BitLen() > 33*264 {
		return nil, nil, errors.New("ecdh: invalid key")
	}
	copy(pubKey[:], pub.X.Bytes()[1:])

	var zb [32]byte
	curve25519.ScalarBaseMult(&zb, &d)
	curve25519.ScalarMult(&zb, &d, &pubKey)
	z, err := buildKey(pub, zb[:], curveOID, fingerprint, false, false)

	if err != nil {
		return nil, nil, err
	}

	if c, err = keywrap.Wrap(z, msg); err != nil {
		return nil, nil, err
	}

	var vsg [33]byte
	vsg[0] = 0x40
	copy(vsg[1:], ephemeralKey[:])

	return vsg[:], c, nil
}

func X25519Decrypt(priv *PrivateKey, vsG, m, curveOID, fingerprint []byte) (msg []byte, err error) {
	var zb, d, ephemeralKey [32]byte
	if len(vsG) != 33 || vsG[0] != 0x40 {
		return nil, errors.New("ecdh: invalid key")
	}
	copy(ephemeralKey[:], vsG[1:33])

	copyReversed(d[:], priv.D)
	curve25519.ScalarBaseMult(&zb, &d)
	curve25519.ScalarMult(&zb, &d, &ephemeralKey)

	var c []byte

	for i := 0; i < 3; i++ {
		// Try buildKey three times for compat, see comments in buildKey.
		z, err := buildKey(&priv.PublicKey, zb[:], curveOID, fingerprint, i == 1, i == 2)
		if err != nil {
			return nil, err
		}

		res, err := keywrap.Unwrap(z, m)
		if i == 2 && err != nil {
			// Only return an error after we've tried all variants of buildKey.
			return nil, err
		}

		c = res
		if err == nil {
			break
		}
	}

	return c[:len(c)-int(c[len(c)-1])], nil
}

func copyReversed(out []byte, in []byte) {
	l := len(in)
	for i := 0; i < l; i++ {
		out[i] = in[l-i-1]
	}
}
  07070100000206000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/elgamal    07070100000207000081A4000000000000000000000001645E367C00000E2B000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/elgamal/elgamal.go // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package elgamal implements ElGamal encryption, suitable for OpenPGP,
// as specified in "A Public-Key Cryptosystem and a Signature Scheme Based on
// Discrete Logarithms," IEEE Transactions on Information Theory, v. IT-31,
// n. 4, 1985, pp. 469-472.
//
// This form of ElGamal embeds PKCS#1 v1.5 padding, which may make it
// unsuitable for other protocols. RSA should be used in preference in any
// case.
package elgamal // import "github.com/ProtonMail/go-crypto/openpgp/elgamal"

import (
	"crypto/rand"
	"crypto/subtle"
	"errors"
	"io"
	"math/big"
)

// PublicKey represents an ElGamal public key.
type PublicKey struct {
	G, P, Y *big.Int
}

// PrivateKey represents an ElGamal private key.
type PrivateKey struct {
	PublicKey
	X *big.Int
}

// Encrypt encrypts the given message to the given public key. The result is a
// pair of integers. Errors can result from reading random, or because msg is
// too large to be encrypted to the public key.
func Encrypt(random io.Reader, pub *PublicKey, msg []byte) (c1, c2 *big.Int, err error) {
	pLen := (pub.P.BitLen() + 7) / 8
	if len(msg) > pLen-11 {
		err = errors.New("elgamal: message too long")
		return
	}

	// EM = 0x02 || PS || 0x00 || M
	em := make([]byte, pLen-1)
	em[0] = 2
	ps, mm := em[1:len(em)-len(msg)-1], em[len(em)-len(msg):]
	err = nonZeroRandomBytes(ps, random)
	if err != nil {
		return
	}
	em[len(em)-len(msg)-1] = 0
	copy(mm, msg)

	m := new(big.Int).SetBytes(em)

	k, err := rand.Int(random, pub.P)
	if err != nil {
		return
	}

	c1 = new(big.Int).Exp(pub.G, k, pub.P)
	s := new(big.Int).Exp(pub.Y, k, pub.P)
	c2 = s.Mul(s, m)
	c2.Mod(c2, pub.P)

	return
}

// Decrypt takes two integers, resulting from an ElGamal encryption, and
// returns the plaintext of the message. An error can result only if the
// ciphertext is invalid. Users should keep in mind that this is a padding
// oracle and thus, if exposed to an adaptive chosen ciphertext attack, can
// be used to break the cryptosystem.  See ``Chosen Ciphertext Attacks
// Against Protocols Based on the RSA Encryption Standard PKCS #1'', Daniel
// Bleichenbacher, Advances in Cryptology (Crypto '98),
func Decrypt(priv *PrivateKey, c1, c2 *big.Int) (msg []byte, err error) {
	s := new(big.Int).Exp(c1, priv.X, priv.P)
	if s.ModInverse(s, priv.P) == nil {
		return nil, errors.New("elgamal: invalid private key")
	}
	s.Mul(s, c2)
	s.Mod(s, priv.P)
	em := s.Bytes()

	firstByteIsTwo := subtle.ConstantTimeByteEq(em[0], 2)

	// The remainder of the plaintext must be a string of non-zero random
	// octets, followed by a 0, followed by the message.
	//   lookingForIndex: 1 iff we are still looking for the zero.
	//   index: the offset of the first zero byte.
	var lookingForIndex, index int
	lookingForIndex = 1

	for i := 1; i < len(em); i++ {
		equals0 := subtle.ConstantTimeByteEq(em[i], 0)
		index = subtle.ConstantTimeSelect(lookingForIndex&equals0, i, index)
		lookingForIndex = subtle.ConstantTimeSelect(equals0, 0, lookingForIndex)
	}

	if firstByteIsTwo != 1 || lookingForIndex != 0 || index < 9 {
		return nil, errors.New("elgamal: decryption error")
	}
	return em[index+1:], nil
}

// nonZeroRandomBytes fills the given slice with non-zero random octets.
func nonZeroRandomBytes(s []byte, rand io.Reader) (err error) {
	_, err = io.ReadFull(rand, s)
	if err != nil {
		return
	}

	for i := 0; i < len(s); i++ {
		for s[i] == 0 {
			_, err = io.ReadFull(rand, s[i:i+1])
			if err != nil {
				return
			}
		}
	}

	return
}
 07070100000208000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/errors 07070100000209000081A4000000000000000000000001645E367C00000CB3000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/errors/errors.go   // Copyright 2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package errors contains common error types for the OpenPGP packages.
package errors // import "github.com/ProtonMail/go-crypto/openpgp/errors"

import (
	"strconv"
)

// A StructuralError is returned when OpenPGP data is found to be syntactically
// invalid.
type StructuralError string

func (s StructuralError) Error() string {
	return "openpgp: invalid data: " + string(s)
}

// UnsupportedError indicates that, although the OpenPGP data is valid, it
// makes use of currently unimplemented features.
type UnsupportedError string

func (s UnsupportedError) Error() string {
	return "openpgp: unsupported feature: " + string(s)
}

// InvalidArgumentError indicates that the caller is in error and passed an
// incorrect value.
type InvalidArgumentError string

func (i InvalidArgumentError) Error() string {
	return "openpgp: invalid argument: " + string(i)
}

// SignatureError indicates that a syntactically valid signature failed to
// validate.
type SignatureError string

func (b SignatureError) Error() string {
	return "openpgp: invalid signature: " + string(b)
}

var ErrMDCHashMismatch error = SignatureError("MDC hash mismatch")
var ErrMDCMissing error = SignatureError("MDC packet not found")

type signatureExpiredError int

func (se signatureExpiredError) Error() string {
	return "openpgp: signature expired"
}

var ErrSignatureExpired error = signatureExpiredError(0)

type keyExpiredError int

func (ke keyExpiredError) Error() string {
	return "openpgp: key expired"
}

var ErrKeyExpired error = keyExpiredError(0)

type keyIncorrectError int

func (ki keyIncorrectError) Error() string {
	return "openpgp: incorrect key"
}

var ErrKeyIncorrect error = keyIncorrectError(0)

// KeyInvalidError indicates that the public key parameters are invalid
// as they do not match the private ones
type KeyInvalidError string

func (e KeyInvalidError) Error() string {
	return "openpgp: invalid key: " + string(e)
}

type unknownIssuerError int

func (unknownIssuerError) Error() string {
	return "openpgp: signature made by unknown entity"
}

var ErrUnknownIssuer error = unknownIssuerError(0)

type keyRevokedError int

func (keyRevokedError) Error() string {
	return "openpgp: signature made by revoked key"
}

var ErrKeyRevoked error = keyRevokedError(0)

type UnknownPacketTypeError uint8

func (upte UnknownPacketTypeError) Error() string {
	return "openpgp: unknown packet type: " + strconv.Itoa(int(upte))
}

// AEADError indicates that there is a problem when initializing or using a
// AEAD instance, configuration struct, nonces or index values.
type AEADError string

func (ae AEADError) Error() string {
	return "openpgp: aead error: " + string(ae)
}

// ErrDummyPrivateKey results when operations are attempted on a private key
// that is just a dummy key. See
// https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=blob;f=doc/DETAILS;h=fe55ae16ab4e26d8356dc574c9e8bc935e71aef1;hb=23191d7851eae2217ecdac6484349849a24fd94a#l1109
type ErrDummyPrivateKey string

func (dke ErrDummyPrivateKey) Error() string {
	return "openpgp: s2k GNU dummy key: " + string(dke)
}
 0707010000020A000041ED000000000000000000000005645E367C00000000000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/internal   0707010000020B000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/algorithm 0707010000020C000081A4000000000000000000000001645E367C000004EE000000000000000000000000000000000000005E00000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/algorithm/aead.go // Copyright (C) 2019 ProtonTech AG

package algorithm

import (
	"crypto/cipher"
	"github.com/ProtonMail/go-crypto/eax"
	"github.com/ProtonMail/go-crypto/ocb"
)

// AEADMode defines the Authenticated Encryption with Associated Data mode of
// operation.
type AEADMode uint8

// Supported modes of operation (see RFC4880bis [EAX] and RFC7253)
const (
	AEADModeEAX = AEADMode(1)
	AEADModeOCB = AEADMode(2)
	AEADModeGCM = AEADMode(100)
)

// TagLength returns the length in bytes of authentication tags.
func (mode AEADMode) TagLength() int {
	switch mode {
	case AEADModeEAX:
		return 16
	case AEADModeOCB:
		return 16
	case AEADModeGCM:
		return 16
	default:
		return 0
	}
}

// NonceLength returns the length in bytes of nonces.
func (mode AEADMode) NonceLength() int {
	switch mode {
	case AEADModeEAX:
		return 16
	case AEADModeOCB:
		return 15
	case AEADModeGCM:
		return 12
	default:
		return 0
	}
}

// New returns a fresh instance of the given mode
func (mode AEADMode) New(block cipher.Block) (alg cipher.AEAD) {
	var err error
	switch mode {
	case AEADModeEAX:
		alg, err = eax.NewEAX(block)
	case AEADModeOCB:
		alg, err = ocb.NewOCB(block)
	case AEADModeGCM:
		alg, err = cipher.NewGCM(block)
	}
	if err != nil {
		panic(err.Error())
	}
	return alg
}
  0707010000020D000081A4000000000000000000000001645E367C0000098F000000000000000000000000000000000000006000000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/algorithm/cipher.go   // Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package algorithm

import (
	"crypto/aes"
	"crypto/cipher"
	"crypto/des"

	"golang.org/x/crypto/cast5"
)

// Cipher is an official symmetric key cipher algorithm. See RFC 4880,
// section 9.2.
type Cipher interface {
	// Id returns the algorithm ID, as a byte, of the cipher.
	Id() uint8
	// KeySize returns the key size, in bytes, of the cipher.
	KeySize() int
	// BlockSize returns the block size, in bytes, of the cipher.
	BlockSize() int
	// New returns a fresh instance of the given cipher.
	New(key []byte) cipher.Block
}

// The following constants mirror the OpenPGP standard (RFC 4880).
const (
	TripleDES = CipherFunction(2)
	CAST5     = CipherFunction(3)
	AES128    = CipherFunction(7)
	AES192    = CipherFunction(8)
	AES256    = CipherFunction(9)
)

// CipherById represents the different block ciphers specified for OpenPGP. See
// http://www.iana.org/assignments/pgp-parameters/pgp-parameters.xhtml#pgp-parameters-13
var CipherById = map[uint8]Cipher{
	TripleDES.Id(): TripleDES,
	CAST5.Id():     CAST5,
	AES128.Id():    AES128,
	AES192.Id():    AES192,
	AES256.Id():    AES256,
}

type CipherFunction uint8

// ID returns the algorithm Id, as a byte, of cipher.
func (sk CipherFunction) Id() uint8 {
	return uint8(sk)
}

var keySizeByID = map[uint8]int{
	TripleDES.Id(): 24,
	CAST5.Id():     cast5.KeySize,
	AES128.Id():    16,
	AES192.Id():    24,
	AES256.Id():    32,
}

// KeySize returns the key size, in bytes, of cipher.
func (cipher CipherFunction) KeySize() int {
	switch cipher {
	case TripleDES:
		return 24
	case CAST5:
		return cast5.KeySize
	case AES128:
		return 16
	case AES192:
		return 24
	case AES256:
		return 32
	}
	return 0
}

// BlockSize returns the block size, in bytes, of cipher.
func (cipher CipherFunction) BlockSize() int {
	switch cipher {
	case TripleDES:
		return des.BlockSize
	case CAST5:
		return 8
	case AES128, AES192, AES256:
		return 16
	}
	return 0
}

// New returns a fresh instance of the given cipher.
func (cipher CipherFunction) New(key []byte) (block cipher.Block) {
	var err error
	switch cipher {
	case TripleDES:
		block, err = des.NewTripleDESCipher(key)
	case CAST5:
		block, err = cast5.NewCipher(key)
	case AES128, AES192, AES256:
		block, err = aes.NewCipher(key)
	}
	if err != nil {
		panic(err.Error())
	}
	return
}
 0707010000020E000081A4000000000000000000000001645E367C000009B7000000000000000000000000000000000000005E00000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/algorithm/hash.go // Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package algorithm

import (
	"crypto"
	"fmt"
	"hash"
)

// Hash is an official hash function algorithm. See RFC 4880, section 9.4.
type Hash interface {
	// Id returns the algorithm ID, as a byte, of Hash.
	Id() uint8
	// Available reports whether the given hash function is linked into the binary.
	Available() bool
	// HashFunc simply returns the value of h so that Hash implements SignerOpts.
	HashFunc() crypto.Hash
	// New returns a new hash.Hash calculating the given hash function. New
	// panics if the hash function is not linked into the binary.
	New() hash.Hash
	// Size returns the length, in bytes, of a digest resulting from the given
	// hash function. It doesn't require that the hash function in question be
	// linked into the program.
	Size() int
	// String is the name of the hash function corresponding to the given
	// OpenPGP hash id.
	String() string
}

// The following vars mirror the crypto/Hash supported hash functions.
var (
	MD5       Hash = cryptoHash{1, crypto.MD5}
	SHA1      Hash = cryptoHash{2, crypto.SHA1}
	RIPEMD160 Hash = cryptoHash{3, crypto.RIPEMD160}
	SHA256    Hash = cryptoHash{8, crypto.SHA256}
	SHA384    Hash = cryptoHash{9, crypto.SHA384}
	SHA512    Hash = cryptoHash{10, crypto.SHA512}
	SHA224    Hash = cryptoHash{11, crypto.SHA224}
)

// HashById represents the different hash functions specified for OpenPGP. See
// http://www.iana.org/assignments/pgp-parameters/pgp-parameters.xhtml#pgp-parameters-14
var (
	HashById = map[uint8]Hash{
		MD5.Id():       MD5,
		SHA1.Id():      SHA1,
		RIPEMD160.Id(): RIPEMD160,
		SHA256.Id():    SHA256,
		SHA384.Id():    SHA384,
		SHA512.Id():    SHA512,
		SHA224.Id():    SHA224,
	}
)

// cryptoHash contains pairs relating OpenPGP's hash identifier with
// Go's crypto.Hash type. See RFC 4880, section 9.4.
type cryptoHash struct {
	id uint8
	crypto.Hash
}

// Id returns the algorithm ID, as a byte, of cryptoHash.
func (h cryptoHash) Id() uint8 {
	return h.id
}

var hashNames = map[uint8]string{
	MD5.Id():       "MD5",
	SHA1.Id():      "SHA1",
	RIPEMD160.Id(): "RIPEMD160",
	SHA256.Id():    "SHA256",
	SHA384.Id():    "SHA384",
	SHA512.Id():    "SHA512",
	SHA224.Id():    "SHA224",
}

func (h cryptoHash) String() string {
	s, ok := hashNames[h.id]
	if !ok {
		panic(fmt.Sprintf("Unsupported hash function %d", h.id))
	}
	return s
}
 0707010000020F000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc   07070100000210000081A4000000000000000000000001645E367C00000A7B000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/curveInfo.go  package ecc

import (
	"github.com/ProtonMail/go-crypto/openpgp/internal/encoding"
	"crypto/elliptic"
	"bytes"
	"github.com/ProtonMail/go-crypto/bitcurves"
	"github.com/ProtonMail/go-crypto/brainpool"
)

type SignatureAlgorithm uint8

const (
	ECDSA SignatureAlgorithm = 1
	EdDSA SignatureAlgorithm = 2
)

type CurveInfo struct {
	Name string
	Oid *encoding.OID
	Curve elliptic.Curve
	SigAlgorithm SignatureAlgorithm
	CurveType CurveType
}

var curves = []CurveInfo{
	{
		Name: "NIST curve P-256",
		Oid: encoding.NewOID([]byte{0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07}),
		Curve: elliptic.P256(),
		CurveType: NISTCurve,
		SigAlgorithm: ECDSA,
	},
	{
		Name: "NIST curve P-384",
		Oid: encoding.NewOID([]byte{0x2B, 0x81, 0x04, 0x00, 0x22}),
		Curve: elliptic.P384(),
		CurveType: NISTCurve,
		SigAlgorithm: ECDSA,
	},
	{
		Name: "NIST curve P-521",
		Oid: encoding.NewOID([]byte{0x2B, 0x81, 0x04, 0x00, 0x23}),
		Curve: elliptic.P521(),
		CurveType: NISTCurve,
		SigAlgorithm: ECDSA,
	},
	{
		Name: "SecP256k1",
		Oid: encoding.NewOID([]byte{0x2B, 0x81, 0x04, 0x00, 0x0A}),
		Curve: bitcurves.S256(),
		CurveType: BitCurve,
		SigAlgorithm: ECDSA,
	},
	{
		Name: "Curve25519",
		Oid: encoding.NewOID([]byte{0x2B, 0x06, 0x01, 0x04, 0x01, 0x97, 0x55, 0x01, 0x05, 0x01}),
		Curve: elliptic.P256(),// filler
		CurveType: Curve25519,
		SigAlgorithm: ECDSA,
	},
	{
		Name: "Ed25519",
		Oid: encoding.NewOID([]byte{0x2B, 0x06, 0x01, 0x04, 0x01, 0xDA, 0x47, 0x0F, 0x01}),
		Curve: elliptic.P256(), // filler
		CurveType: NISTCurve,
		SigAlgorithm: EdDSA,
	},
	{
		Name: "Brainpool P256r1",
		Oid: encoding.NewOID([]byte{0x2B, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x07}),
		Curve: brainpool.P256r1(),
		CurveType: BrainpoolCurve,
		SigAlgorithm: ECDSA,
	},
	{
		Name: "BrainpoolP384r1",
		Oid: encoding.NewOID([]byte{0x2B, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x0B}),
		Curve: brainpool.P384r1(),
		CurveType: BrainpoolCurve,
		SigAlgorithm: ECDSA,
	},
	{
		Name: "BrainpoolP512r1",
		Oid: encoding.NewOID([]byte{0x2B, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x0D}),
		Curve: brainpool.P512r1(),
		CurveType: BrainpoolCurve,
		SigAlgorithm: ECDSA,
	},
}

func FindByCurve(curve elliptic.Curve) *CurveInfo {
	for _, curveInfo := range curves {
		if curveInfo.Curve == curve {
			return &curveInfo
		}
	}
	return nil
}

func FindByOid(oid encoding.Field) *CurveInfo {
	var rawBytes = oid.Bytes()
	for _, curveInfo := range curves {
		if bytes.Equal(curveInfo.Oid.Bytes(), rawBytes) {
			return &curveInfo
		}
	}
	return nil
}

func FindByName(name string) *CurveInfo {
	for _, curveInfo := range curves {
		if curveInfo.Name == name {
			return &curveInfo
		}
	}
	return nil
} 07070100000211000081A4000000000000000000000001645E367C00000098000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/curveType.go  package ecc

type CurveType uint8

const (
    NISTCurve CurveType = 1
	Curve25519 CurveType = 2
	BitCurve CurveType = 3
	BrainpoolCurve CurveType = 4
)07070100000212000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/encoding  07070100000213000081A4000000000000000000000001645E367C000002D8000000000000000000000000000000000000006100000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/encoding/encoding.go  // Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package encoding implements openpgp packet field encodings as specified in
// RFC 4880 and 6637.
package encoding

import "io"

// Field is an encoded field of an openpgp packet.
type Field interface {
	// Bytes returns the decoded data.
	Bytes() []byte

	// BitLength is the size in bits of the decoded data.
	BitLength() uint16

	// EncodedBytes returns the encoded data.
	EncodedBytes() []byte

	// EncodedLength is the size in bytes of the encoded data.
	EncodedLength() uint16

	// ReadFrom reads the next Field from r.
	ReadFrom(r io.Reader) (int64, error)
}
07070100000214000081A4000000000000000000000001645E367C00000857000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/encoding/mpi.go   // Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package encoding

import (
	"io"
	"math/big"
	"math/bits"
)

// An MPI is used to store the contents of a big integer, along with the bit
// length that was specified in the original input. This allows the MPI to be
// reserialized exactly.
type MPI struct {
	bytes     []byte
	bitLength uint16
}

// NewMPI returns a MPI initialized with bytes.
func NewMPI(bytes []byte) *MPI {
	for len(bytes) != 0 && bytes[0] == 0 {
		bytes = bytes[1:]
	}
	if len(bytes) == 0 {
		bitLength := uint16(0)
		return &MPI{bytes, bitLength}
	}
	bitLength := 8*uint16(len(bytes)-1) + uint16(bits.Len8(bytes[0]))
	return &MPI{bytes, bitLength}
}

// Bytes returns the decoded data.
func (m *MPI) Bytes() []byte {
	return m.bytes
}

// BitLength is the size in bits of the decoded data.
func (m *MPI) BitLength() uint16 {
	return m.bitLength
}

// EncodedBytes returns the encoded data.
func (m *MPI) EncodedBytes() []byte {
	return append([]byte{byte(m.bitLength >> 8), byte(m.bitLength)}, m.bytes...)
}

// EncodedLength is the size in bytes of the encoded data.
func (m *MPI) EncodedLength() uint16 {
	return uint16(2 + len(m.bytes))
}

// ReadFrom reads into m the next MPI from r.
func (m *MPI) ReadFrom(r io.Reader) (int64, error) {
	var buf [2]byte
	n, err := io.ReadFull(r, buf[0:])
	if err != nil {
		if err == io.EOF {
			err = io.ErrUnexpectedEOF
		}
		return int64(n), err
	}

	m.bitLength = uint16(buf[0])<<8 | uint16(buf[1])
	m.bytes = make([]byte, (int(m.bitLength)+7)/8)

	nn, err := io.ReadFull(r, m.bytes)
	if err == io.EOF {
		err = io.ErrUnexpectedEOF
	}

	// remove leading zero bytes from malformed GnuPG encoded MPIs:
	// https://bugs.gnupg.org/gnupg/issue1853
	// for _, b := range m.bytes {
	// 	if b != 0 {
	// 		break
	// 	}
	// 	m.bytes = m.bytes[1:]
	// 	m.bitLength -= 8
	// }

	return int64(n) + int64(nn), err
}

// SetBig initializes m with the bits from n.
func (m *MPI) SetBig(n *big.Int) *MPI {
	m.bytes = n.Bytes()
	m.bitLength = uint16(n.BitLen())
	return m
}
 07070100000215000081A4000000000000000000000001645E367C000007D8000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/encoding/oid.go   // Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package encoding

import (
	"io"

	"github.com/ProtonMail/go-crypto/openpgp/errors"
)

// OID is used to store a variable-length field with a one-octet size
// prefix. See https://tools.ietf.org/html/rfc6637#section-9.
type OID struct {
	bytes []byte
}

const (
	// maxOID is the maximum number of bytes in a OID.
	maxOID = 254
	// reservedOIDLength1 and reservedOIDLength2 are OID lengths that the RFC
	// specifies are reserved.
	reservedOIDLength1 = 0
	reservedOIDLength2 = 0xff
)

// NewOID returns a OID initialized with bytes.
func NewOID(bytes []byte) *OID {
	switch len(bytes) {
	case reservedOIDLength1, reservedOIDLength2:
		panic("encoding: NewOID argument length is reserved")
	default:
		if len(bytes) > maxOID {
			panic("encoding: NewOID argment too large")
		}
	}

	return &OID{
		bytes: bytes,
	}
}

// Bytes returns the decoded data.
func (o *OID) Bytes() []byte {
	return o.bytes
}

// BitLength is the size in bits of the decoded data.
func (o *OID) BitLength() uint16 {
	return uint16(len(o.bytes) * 8)
}

// EncodedBytes returns the encoded data.
func (o *OID) EncodedBytes() []byte {
	return append([]byte{byte(len(o.bytes))}, o.bytes...)
}

// EncodedLength is the size in bytes of the encoded data.
func (o *OID) EncodedLength() uint16 {
	return uint16(1 + len(o.bytes))
}

// ReadFrom reads into b the next OID from r.
func (o *OID) ReadFrom(r io.Reader) (int64, error) {
	var buf [1]byte
	n, err := io.ReadFull(r, buf[:])
	if err != nil {
		if err == io.EOF {
			err = io.ErrUnexpectedEOF
		}
		return int64(n), err
	}

	switch buf[0] {
	case reservedOIDLength1, reservedOIDLength2:
		return int64(n), errors.UnsupportedError("reserved for future extensions")
	}

	o.bytes = make([]byte, buf[0])

	nn, err := io.ReadFull(r, o.bytes)
	if err == io.EOF {
		err = io.ErrUnexpectedEOF
	}

	return int64(n) + int64(nn), err
}
07070100000216000081A4000000000000000000000001645E367C00002E33000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/key_generation.go  // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package openpgp

import (
	"crypto"
	"crypto/rand"
	"crypto/rsa"
	goerrors "errors"
	"io"
	"math/big"

	"github.com/ProtonMail/go-crypto/openpgp/ecdh"
	"github.com/ProtonMail/go-crypto/openpgp/errors"
	"github.com/ProtonMail/go-crypto/openpgp/internal/algorithm"
	"github.com/ProtonMail/go-crypto/openpgp/packet"
	"golang.org/x/crypto/ed25519"
)

// NewEntity returns an Entity that contains a fresh RSA/RSA keypair with a
// single identity composed of the given full name, comment and email, any of
// which may be empty but must not contain any of "()<>\x00".
// If config is nil, sensible defaults will be used.
func NewEntity(name, comment, email string, config *packet.Config) (*Entity, error) {
	creationTime := config.Now()
	keyLifetimeSecs := config.KeyLifetime()

	uid := packet.NewUserId(name, comment, email)
	if uid == nil {
		return nil, errors.InvalidArgumentError("user id field contained invalid characters")
	}

	// Generate a primary signing key
	primaryPrivRaw, err := newSigner(config)
	if err != nil {
		return nil, err
	}
	primary := packet.NewSignerPrivateKey(creationTime, primaryPrivRaw)
	if config != nil && config.V5Keys {
		primary.UpgradeToV5()
	}

	isPrimaryId := true
	selfSignature := &packet.Signature{
		Version:           primary.PublicKey.Version,
		SigType:           packet.SigTypePositiveCert,
		PubKeyAlgo:        primary.PublicKey.PubKeyAlgo,
		Hash:              config.Hash(),
		CreationTime:      creationTime,
		KeyLifetimeSecs:   &keyLifetimeSecs,
		IssuerKeyId:       &primary.PublicKey.KeyId,
		IssuerFingerprint: primary.PublicKey.Fingerprint,
		IsPrimaryId:       &isPrimaryId,
		FlagsValid:        true,
		FlagSign:          true,
		FlagCertify:       true,
		MDC:               true, // true by default, see 5.8 vs. 5.14
		AEAD:              config.AEAD() != nil,
		V5Keys:            config != nil && config.V5Keys,
	}

	// Set the PreferredHash for the SelfSignature from the packet.Config.
	// If it is not the must-implement algorithm from rfc4880bis, append that.
	selfSignature.PreferredHash = []uint8{hashToHashId(config.Hash())}
	if config.Hash() != crypto.SHA256 {
		selfSignature.PreferredHash = append(selfSignature.PreferredHash, hashToHashId(crypto.SHA256))
	}

	// Likewise for DefaultCipher.
	selfSignature.PreferredSymmetric = []uint8{uint8(config.Cipher())}
	if config.Cipher() != packet.CipherAES128 {
		selfSignature.PreferredSymmetric = append(selfSignature.PreferredSymmetric, uint8(packet.CipherAES128))
	}

	// We set CompressionNone as the preferred compression algorithm because
	// of compression side channel attacks, then append the configured
	// DefaultCompressionAlgo if any is set (to signal support for cases
	// where the application knows that using compression is safe).
	selfSignature.PreferredCompression = []uint8{uint8(packet.CompressionNone)}
	if config.Compression() != packet.CompressionNone {
		selfSignature.PreferredCompression = append(selfSignature.PreferredCompression, uint8(config.Compression()))
	}

	// And for DefaultMode.
	selfSignature.PreferredAEAD = []uint8{uint8(config.AEAD().Mode())}
	if config.AEAD().Mode() != packet.AEADModeEAX {
		selfSignature.PreferredAEAD = append(selfSignature.PreferredAEAD, uint8(packet.AEADModeEAX))
	}

	// User ID binding signature
	err = selfSignature.SignUserId(uid.Id, &primary.PublicKey, primary, config)
	if err != nil {
		return nil, err
	}

	// Generate an encryption subkey
	subPrivRaw, err := newDecrypter(config)
	if err != nil {
		return nil, err
	}
	sub := packet.NewDecrypterPrivateKey(creationTime, subPrivRaw)
	sub.IsSubkey = true
	sub.PublicKey.IsSubkey = true
	if config != nil && config.V5Keys {
		sub.UpgradeToV5()
	}

	// NOTE: No KeyLifetimeSecs here, but we will not return this subkey in EncryptionKey()
	// if the primary/master key has expired.
	subKey := Subkey{
		PublicKey:  &sub.PublicKey,
		PrivateKey: sub,
		Sig: &packet.Signature{
			Version:                   primary.PublicKey.Version,
			CreationTime:              creationTime,
			SigType:                   packet.SigTypeSubkeyBinding,
			PubKeyAlgo:                primary.PublicKey.PubKeyAlgo,
			Hash:                      config.Hash(),
			FlagsValid:                true,
			FlagEncryptStorage:        true,
			FlagEncryptCommunications: true,
			IssuerKeyId:               &primary.PublicKey.KeyId,
		},
	}

	// Subkey binding signature
	err = subKey.Sig.SignKey(subKey.PublicKey, primary, config)
	if err != nil {
		return nil, err
	}

	return &Entity{
		PrimaryKey: &primary.PublicKey,
		PrivateKey: primary,
		Identities: map[string]*Identity{
			uid.Id: &Identity{
				Name:          uid.Id,
				UserId:        uid,
				SelfSignature: selfSignature,
				Signatures:    []*packet.Signature{selfSignature},
			},
		},
		Subkeys: []Subkey{subKey},
	}, nil
}

// AddSigningSubkey adds a signing keypair as a subkey to the Entity.
// If config is nil, sensible defaults will be used.
func (e *Entity) AddSigningSubkey(config *packet.Config) error {
	creationTime := config.Now()
	keyLifetimeSecs := config.KeyLifetime()

	subPrivRaw, err := newSigner(config)
	if err != nil {
		return err
	}
	sub := packet.NewSignerPrivateKey(creationTime, subPrivRaw)

	subkey := Subkey{
		PublicKey:  &sub.PublicKey,
		PrivateKey: sub,
		Sig: &packet.Signature{
			Version:         e.PrimaryKey.Version,
			CreationTime:    creationTime,
			KeyLifetimeSecs: &keyLifetimeSecs,
			SigType:         packet.SigTypeSubkeyBinding,
			PubKeyAlgo:      e.PrimaryKey.PubKeyAlgo,
			Hash:            config.Hash(),
			FlagsValid:      true,
			FlagSign:        true,
			IssuerKeyId:     &e.PrimaryKey.KeyId,
			EmbeddedSignature: &packet.Signature{
				Version:      e.PrimaryKey.Version,
				CreationTime: creationTime,
				SigType:      packet.SigTypePrimaryKeyBinding,
				PubKeyAlgo:   sub.PublicKey.PubKeyAlgo,
				Hash:         config.Hash(),
				IssuerKeyId:  &e.PrimaryKey.KeyId,
			},
		},
	}
	if config != nil && config.V5Keys {
		subkey.PublicKey.UpgradeToV5()
	}

	err = subkey.Sig.EmbeddedSignature.CrossSignKey(subkey.PublicKey, e.PrimaryKey, subkey.PrivateKey, config)
	if err != nil {
		return err
	}

	subkey.PublicKey.IsSubkey = true
	subkey.PrivateKey.IsSubkey = true
	if err = subkey.Sig.SignKey(subkey.PublicKey, e.PrivateKey, config); err != nil {
		return err
	}

	e.Subkeys = append(e.Subkeys, subkey)
	return nil
}

// AddEncryptionSubkey adds an encryption keypair as a subkey to the Entity.
// If config is nil, sensible defaults will be used.
func (e *Entity) AddEncryptionSubkey(config *packet.Config) error {
	creationTime := config.Now()
	keyLifetimeSecs := config.KeyLifetime()

	subPrivRaw, err := newDecrypter(config)
	if err != nil {
		return err
	}
	sub := packet.NewDecrypterPrivateKey(creationTime, subPrivRaw)

	subkey := Subkey{
		PublicKey:  &sub.PublicKey,
		PrivateKey: sub,
		Sig: &packet.Signature{
			Version:                   e.PrimaryKey.Version,
			CreationTime:              creationTime,
			KeyLifetimeSecs:           &keyLifetimeSecs,
			SigType:                   packet.SigTypeSubkeyBinding,
			PubKeyAlgo:                e.PrimaryKey.PubKeyAlgo,
			Hash:                      config.Hash(),
			FlagsValid:                true,
			FlagEncryptStorage:        true,
			FlagEncryptCommunications: true,
			IssuerKeyId:               &e.PrimaryKey.KeyId,
		},
	}
	if config != nil && config.V5Keys {
		subkey.PublicKey.UpgradeToV5()
	}

	subkey.PublicKey.IsSubkey = true
	subkey.PrivateKey.IsSubkey = true
	if err = subkey.Sig.SignKey(subkey.PublicKey, e.PrivateKey, config); err != nil {
		return err
	}

	e.Subkeys = append(e.Subkeys, subkey)
	return nil
}

// Generates a signing key
func newSigner(config *packet.Config) (signer crypto.Signer, err error) {
	switch config.PublicKeyAlgorithm() {
	case packet.PubKeyAlgoRSA:
		bits := config.RSAModulusBits()
		if bits < 1024 {
			return nil, errors.InvalidArgumentError("bits must be >= 1024")
		}
		if config != nil && len(config.RSAPrimes) >= 2 {
			primes := config.RSAPrimes[0:2]
			config.RSAPrimes = config.RSAPrimes[2:]
			return generateRSAKeyWithPrimes(config.Random(), 2, bits, primes)
		}
		return rsa.GenerateKey(config.Random(), bits)
	case packet.PubKeyAlgoEdDSA:
		_, priv, err := ed25519.GenerateKey(config.Random())
		if err != nil {
			return nil, err
		}
		return &priv, nil
	default:
		return nil, errors.InvalidArgumentError("unsupported public key algorithm")
	}
}

// Generates an encryption/decryption key
func newDecrypter(config *packet.Config) (decrypter interface{}, err error) {
	switch config.PublicKeyAlgorithm() {
	case packet.PubKeyAlgoRSA:
		bits := config.RSAModulusBits()
		if bits < 1024 {
			return nil, errors.InvalidArgumentError("bits must be >= 1024")
		}
		if config != nil && len(config.RSAPrimes) >= 2 {
			primes := config.RSAPrimes[0:2]
			config.RSAPrimes = config.RSAPrimes[2:]
			return generateRSAKeyWithPrimes(config.Random(), 2, bits, primes)
		}
		return rsa.GenerateKey(config.Random(), bits)
	case packet.PubKeyAlgoEdDSA:
		fallthrough // When passing EdDSA, we generate an ECDH subkey
	case packet.PubKeyAlgoECDH:
		var kdf = ecdh.KDF{
			Hash:   algorithm.SHA512,
			Cipher: algorithm.AES256,
		}
		return ecdh.X25519GenerateKey(config.Random(), kdf)
	default:
		return nil, errors.InvalidArgumentError("unsupported public key algorithm")
	}
}

var bigOne = big.NewInt(1)

// generateRSAKeyWithPrimes generates a multi-prime RSA keypair of the
// given bit size, using the given random source and prepopulated primes.
func generateRSAKeyWithPrimes(random io.Reader, nprimes int, bits int, prepopulatedPrimes []*big.Int) (*rsa.PrivateKey, error) {
	priv := new(rsa.PrivateKey)
	priv.E = 65537

	if nprimes < 2 {
		return nil, goerrors.New("generateRSAKeyWithPrimes: nprimes must be >= 2")
	}

	if bits < 1024 {
		return nil, goerrors.New("generateRSAKeyWithPrimes: bits must be >= 1024")
	}

	primes := make([]*big.Int, nprimes)

NextSetOfPrimes:
	for {
		todo := bits
		// crypto/rand should set the top two bits in each prime.
		// Thus each prime has the form
		//   p_i = 2^bitlen(p_i) × 0.11... (in base 2).
		// And the product is:
		//   P = 2^todo × α
		// where α is the product of nprimes numbers of the form 0.11...
		//
		// If α < 1/2 (which can happen for nprimes > 2), we need to
		// shift todo to compensate for lost bits: the mean value of 0.11...
		// is 7/8, so todo + shift - nprimes * log2(7/8) ~= bits - 1/2
		// will give good results.
		if nprimes >= 7 {
			todo += (nprimes - 2) / 5
		}
		for i := 0; i < nprimes; i++ {
			var err error
			if len(prepopulatedPrimes) == 0 {
				primes[i], err = rand.Prime(random, todo/(nprimes-i))
				if err != nil {
					return nil, err
				}
			} else {
				primes[i] = prepopulatedPrimes[0]
				prepopulatedPrimes = prepopulatedPrimes[1:]
			}

			todo -= primes[i].BitLen()
		}

		// Make sure that primes is pairwise unequal.
		for i, prime := range primes {
			for j := 0; j < i; j++ {
				if prime.Cmp(primes[j]) == 0 {
					continue NextSetOfPrimes
				}
			}
		}

		n := new(big.Int).Set(bigOne)
		totient := new(big.Int).Set(bigOne)
		pminus1 := new(big.Int)
		for _, prime := range primes {
			n.Mul(n, prime)
			pminus1.Sub(prime, bigOne)
			totient.Mul(totient, pminus1)
		}
		if n.BitLen() != bits {
			// This should never happen for nprimes == 2 because
			// crypto/rand should set the top two bits in each prime.
			// For nprimes > 2 we hope it does not happen often.
			continue NextSetOfPrimes
		}

		priv.D = new(big.Int)
		e := big.NewInt(int64(priv.E))
		ok := priv.D.ModInverse(e, totient)

		if ok != nil {
			priv.Primes = primes
			priv.N = n
			break
		}
	}

	priv.Precompute()
	return priv, nil
}
 07070100000217000081A4000000000000000000000001645E367C00006474000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/keys.go    // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package openpgp

import (
	goerrors "errors"
	"io"
	"time"

	"github.com/ProtonMail/go-crypto/openpgp/armor"
	"github.com/ProtonMail/go-crypto/openpgp/errors"
	"github.com/ProtonMail/go-crypto/openpgp/packet"
)

// PublicKeyType is the armor type for a PGP public key.
var PublicKeyType = "PGP PUBLIC KEY BLOCK"

// PrivateKeyType is the armor type for a PGP private key.
var PrivateKeyType = "PGP PRIVATE KEY BLOCK"

// An Entity represents the components of an OpenPGP key: a primary public key
// (which must be a signing key), one or more identities claimed by that key,
// and zero or more subkeys, which may be encryption keys.
type Entity struct {
	PrimaryKey  *packet.PublicKey
	PrivateKey  *packet.PrivateKey
	Identities  map[string]*Identity // indexed by Identity.Name
	Revocations []*packet.Signature
	Subkeys     []Subkey
}

// An Identity represents an identity claimed by an Entity and zero or more
// assertions by other entities about that claim.
type Identity struct {
	Name          string // by convention, has the form "Full Name (comment) <email@example.com>"
	UserId        *packet.UserId
	SelfSignature *packet.Signature
	Revocations   []*packet.Signature
	Signatures    []*packet.Signature // all (potentially unverified) self-signatures, revocations, and third-party signatures
}

// A Subkey is an additional public key in an Entity. Subkeys can be used for
// encryption.
type Subkey struct {
	PublicKey   *packet.PublicKey
	PrivateKey  *packet.PrivateKey
	Sig         *packet.Signature
	Revocations []*packet.Signature
}

// A Key identifies a specific public key in an Entity. This is either the
// Entity's primary key or a subkey.
type Key struct {
	Entity        *Entity
	PublicKey     *packet.PublicKey
	PrivateKey    *packet.PrivateKey
	SelfSignature *packet.Signature
	Revocations   []*packet.Signature
}

// A KeyRing provides access to public and private keys.
type KeyRing interface {
	// KeysById returns the set of keys that have the given key id.
	KeysById(id uint64) []Key
	// KeysByIdAndUsage returns the set of keys with the given id
	// that also meet the key usage given by requiredUsage.
	// The requiredUsage is expressed as the bitwise-OR of
	// packet.KeyFlag* values.
	KeysByIdUsage(id uint64, requiredUsage byte) []Key
	// DecryptionKeys returns all private keys that are valid for
	// decryption.
	DecryptionKeys() []Key
}

// PrimaryIdentity returns an Identity, preferring non-revoked identities,
// identities marked as primary, or the latest-created identity, in that order.
func (e *Entity) PrimaryIdentity() *Identity {
	var primaryIdentity *Identity
	for _, ident := range e.Identities {
		if shouldPreferIdentity(primaryIdentity, ident) {
			primaryIdentity = ident
		}
	}
	return primaryIdentity
}

func shouldPreferIdentity(existingId, potentialNewId *Identity) bool {
	if existingId == nil {
		return true
	}

	if len(existingId.Revocations) > len(potentialNewId.Revocations) {
		return true
	}

	if len(existingId.Revocations) < len(potentialNewId.Revocations) {
		return false
	}

	if existingId.SelfSignature == nil {
		return true
	}

	if existingId.SelfSignature.IsPrimaryId != nil && *existingId.SelfSignature.IsPrimaryId &&
		!(potentialNewId.SelfSignature.IsPrimaryId != nil && *potentialNewId.SelfSignature.IsPrimaryId) {
		return false
	}

	if !(existingId.SelfSignature.IsPrimaryId != nil && *existingId.SelfSignature.IsPrimaryId) &&
		potentialNewId.SelfSignature.IsPrimaryId != nil && *potentialNewId.SelfSignature.IsPrimaryId {
		return true
	}

	return potentialNewId.SelfSignature.CreationTime.After(existingId.SelfSignature.CreationTime)
}

// EncryptionKey returns the best candidate Key for encrypting a message to the
// given Entity.
func (e *Entity) EncryptionKey(now time.Time) (Key, bool) {
	// Fail to find any encryption key if the...
	i := e.PrimaryIdentity()
	if e.PrimaryKey.KeyExpired(i.SelfSignature, now) || // primary key has expired
		i.SelfSignature == nil || // user ID has no self-signature
		i.SelfSignature.SigExpired(now) || // user ID self-signature has expired
		e.Revoked(now) || // primary key has been revoked
		i.Revoked(now) { // user ID has been revoked
		return Key{}, false
	}

	// Iterate the keys to find the newest, unexpired one
	candidateSubkey := -1
	var maxTime time.Time
	for i, subkey := range e.Subkeys {
		if subkey.Sig.FlagsValid &&
			subkey.Sig.FlagEncryptCommunications &&
			subkey.PublicKey.PubKeyAlgo.CanEncrypt() &&
			!subkey.PublicKey.KeyExpired(subkey.Sig, now) &&
			!subkey.Sig.SigExpired(now) &&
			!subkey.Revoked(now) &&
			(maxTime.IsZero() || subkey.Sig.CreationTime.After(maxTime)) {
			candidateSubkey = i
			maxTime = subkey.Sig.CreationTime
		}
	}

	if candidateSubkey != -1 {
		subkey := e.Subkeys[candidateSubkey]
		return Key{e, subkey.PublicKey, subkey.PrivateKey, subkey.Sig, subkey.Revocations}, true
	}

	// If we don't have any candidate subkeys for encryption and
	// the primary key doesn't have any usage metadata then we
	// assume that the primary key is ok. Or, if the primary key is
	// marked as ok to encrypt with, then we can obviously use it.
	if !i.SelfSignature.FlagsValid || i.SelfSignature.FlagEncryptCommunications &&
		e.PrimaryKey.PubKeyAlgo.CanEncrypt() {
		return Key{e, e.PrimaryKey, e.PrivateKey, i.SelfSignature, e.Revocations}, true
	}

	return Key{}, false
}


// CertificationKey return the best candidate Key for certifying a key with this
// Entity.
func (e *Entity) CertificationKey(now time.Time) (Key, bool) {
	return e.CertificationKeyById(now, 0)
}

// CertificationKeyById return the Key for key certification with this
// Entity and keyID.
func (e *Entity) CertificationKeyById(now time.Time, id uint64) (Key, bool) {
	return e.signingKeyByIdUsage(now, id, packet.KeyFlagCertify)
}

// SigningKey return the best candidate Key for signing a message with this
// Entity.
func (e *Entity) SigningKey(now time.Time) (Key, bool) {
	return e.SigningKeyById(now, 0)
}

// SigningKeyById return the Key for signing a message with this
// Entity and keyID.
func (e *Entity) SigningKeyById(now time.Time, id uint64) (Key, bool) {
	return e.signingKeyByIdUsage(now, id, packet.KeyFlagSign)
}

func (e *Entity) signingKeyByIdUsage(now time.Time, id uint64, flags int) (Key, bool) {
	// Fail to find any signing key if the...
	i := e.PrimaryIdentity()
	if e.PrimaryKey.KeyExpired(i.SelfSignature, now) || // primary key has expired
		i.SelfSignature == nil || // user ID has no self-signature
		i.SelfSignature.SigExpired(now) || // user ID self-signature has expired
		e.Revoked(now) || // primary key has been revoked
		i.Revoked(now) { // user ID has been revoked
		return Key{}, false
	}

	// Iterate the keys to find the newest, unexpired one
	candidateSubkey := -1
	var maxTime time.Time
	for idx, subkey := range e.Subkeys {
		if subkey.Sig.FlagsValid &&
			(flags & packet.KeyFlagCertify == 0 || subkey.Sig.FlagCertify) &&
			(flags & packet.KeyFlagSign == 0 || subkey.Sig.FlagSign) &&
			subkey.PublicKey.PubKeyAlgo.CanSign() &&
			!subkey.PublicKey.KeyExpired(subkey.Sig, now) &&
			!subkey.Sig.SigExpired(now) &&
			!subkey.Revoked(now) &&
			(maxTime.IsZero() || subkey.Sig.CreationTime.After(maxTime)) &&
			(id == 0 || subkey.PublicKey.KeyId == id) {
			candidateSubkey = idx
			maxTime = subkey.Sig.CreationTime
		}
	}

	if candidateSubkey != -1 {
		subkey := e.Subkeys[candidateSubkey]
		return Key{e, subkey.PublicKey, subkey.PrivateKey, subkey.Sig, subkey.Revocations}, true
	}

	// If we have no candidate subkey then we assume that it's ok to sign
	// with the primary key.  Or, if the primary key is marked as ok to
	// sign with, then we can use it.
	if !i.SelfSignature.FlagsValid || (
			(flags & packet.KeyFlagCertify == 0 || i.SelfSignature.FlagCertify) &&
			(flags & packet.KeyFlagSign == 0 || i.SelfSignature.FlagSign)) &&
		e.PrimaryKey.PubKeyAlgo.CanSign() &&
		(id == 0 || e.PrimaryKey.KeyId == id) {
		return Key{e, e.PrimaryKey, e.PrivateKey, i.SelfSignature, e.Revocations}, true
	}

	// No keys with a valid Signing Flag or no keys matched the id passed in
	return Key{}, false
}

func revoked(revocations []*packet.Signature, now time.Time) bool {
	for _, revocation := range revocations {
		if revocation.RevocationReason != nil && *revocation.RevocationReason == packet.KeyCompromised {
			// If the key is compromised, the key is considered revoked even before the revocation date.
			return true
		}
		if !revocation.SigExpired(now) {
			return true
		}
	}
	return false
}

// Revoked returns whether the entity has any direct key revocation signatures.
// Note that third-party revocation signatures are not supported.
// Note also that Identity and Subkey revocation should be checked separately.
func (e *Entity) Revoked(now time.Time) bool {
	return revoked(e.Revocations, now)
}

// Revoked returns whether the identity has been revoked by a self-signature.
// Note that third-party revocation signatures are not supported.
func (i *Identity) Revoked(now time.Time) bool {
	return revoked(i.Revocations, now)
}

// Revoked returns whether the subkey has been revoked by a self-signature.
// Note that third-party revocation signatures are not supported.
func (s *Subkey) Revoked(now time.Time) bool {
	return revoked(s.Revocations, now)
}

// Revoked returns whether the key or subkey has been revoked by a self-signature.
// Note that third-party revocation signatures are not supported.
// Note also that Identity revocation should be checked separately.
// Normally, it's not necessary to call this function, except on keys returned by
// KeysById or KeysByIdUsage.
func (key *Key) Revoked(now time.Time) bool {
	return revoked(key.Revocations, now)
}

// An EntityList contains one or more Entities.
type EntityList []*Entity

// KeysById returns the set of keys that have the given key id.
func (el EntityList) KeysById(id uint64) (keys []Key) {
	for _, e := range el {
		if e.PrimaryKey.KeyId == id {
			ident := e.PrimaryIdentity()
			selfSig := ident.SelfSignature
			keys = append(keys, Key{e, e.PrimaryKey, e.PrivateKey, selfSig, e.Revocations})
		}

		for _, subKey := range e.Subkeys {
			if subKey.PublicKey.KeyId == id {
				keys = append(keys, Key{e, subKey.PublicKey, subKey.PrivateKey, subKey.Sig, subKey.Revocations})
			}
		}
	}
	return
}

// KeysByIdAndUsage returns the set of keys with the given id that also meet
// the key usage given by requiredUsage.  The requiredUsage is expressed as
// the bitwise-OR of packet.KeyFlag* values.
func (el EntityList) KeysByIdUsage(id uint64, requiredUsage byte) (keys []Key) {
	for _, key := range el.KeysById(id) {
		if key.SelfSignature != nil && key.SelfSignature.FlagsValid && requiredUsage != 0 {
			var usage byte
			if key.SelfSignature.FlagCertify {
				usage |= packet.KeyFlagCertify
			}
			if key.SelfSignature.FlagSign {
				usage |= packet.KeyFlagSign
			}
			if key.SelfSignature.FlagEncryptCommunications {
				usage |= packet.KeyFlagEncryptCommunications
			}
			if key.SelfSignature.FlagEncryptStorage {
				usage |= packet.KeyFlagEncryptStorage
			}
			if usage&requiredUsage != requiredUsage {
				continue
			}
		}

		keys = append(keys, key)
	}
	return
}

// DecryptionKeys returns all private keys that are valid for decryption.
func (el EntityList) DecryptionKeys() (keys []Key) {
	for _, e := range el {
		for _, subKey := range e.Subkeys {
			if subKey.PrivateKey != nil && (!subKey.Sig.FlagsValid || subKey.Sig.FlagEncryptStorage || subKey.Sig.FlagEncryptCommunications) {
				keys = append(keys, Key{e, subKey.PublicKey, subKey.PrivateKey, subKey.Sig, subKey.Revocations})
			}
		}
	}
	return
}

// ReadArmoredKeyRing reads one or more public/private keys from an armor keyring file.
func ReadArmoredKeyRing(r io.Reader) (EntityList, error) {
	block, err := armor.Decode(r)
	if err == io.EOF {
		return nil, errors.InvalidArgumentError("no armored data found")
	}
	if err != nil {
		return nil, err
	}
	if block.Type != PublicKeyType && block.Type != PrivateKeyType {
		return nil, errors.InvalidArgumentError("expected public or private key block, got: " + block.Type)
	}

	return ReadKeyRing(block.Body)
}

// ReadKeyRing reads one or more public/private keys. Unsupported keys are
// ignored as long as at least a single valid key is found.
func ReadKeyRing(r io.Reader) (el EntityList, err error) {
	packets := packet.NewReader(r)
	var lastUnsupportedError error

	for {
		var e *Entity
		e, err = ReadEntity(packets)
		if err != nil {
			// TODO: warn about skipped unsupported/unreadable keys
			if _, ok := err.(errors.UnsupportedError); ok {
				lastUnsupportedError = err
				err = readToNextPublicKey(packets)
			} else if _, ok := err.(errors.StructuralError); ok {
				// Skip unreadable, badly-formatted keys
				lastUnsupportedError = err
				err = readToNextPublicKey(packets)
			}
			if err == io.EOF {
				err = nil
				break
			}
			if err != nil {
				el = nil
				break
			}
		} else {
			el = append(el, e)
		}
	}

	if len(el) == 0 && err == nil {
		err = lastUnsupportedError
	}
	return
}

// readToNextPublicKey reads packets until the start of the entity and leaves
// the first packet of the new entity in the Reader.
func readToNextPublicKey(packets *packet.Reader) (err error) {
	var p packet.Packet
	for {
		p, err = packets.Next()
		if err == io.EOF {
			return
		} else if err != nil {
			if _, ok := err.(errors.UnsupportedError); ok {
				err = nil
				continue
			}
			return
		}

		if pk, ok := p.(*packet.PublicKey); ok && !pk.IsSubkey {
			packets.Unread(p)
			return
		}
	}
}

// ReadEntity reads an entity (public key, identities, subkeys etc) from the
// given Reader.
func ReadEntity(packets *packet.Reader) (*Entity, error) {
	e := new(Entity)
	e.Identities = make(map[string]*Identity)

	p, err := packets.Next()
	if err != nil {
		return nil, err
	}

	var ok bool
	if e.PrimaryKey, ok = p.(*packet.PublicKey); !ok {
		if e.PrivateKey, ok = p.(*packet.PrivateKey); !ok {
			packets.Unread(p)
			return nil, errors.StructuralError("first packet was not a public/private key")
		}
		e.PrimaryKey = &e.PrivateKey.PublicKey
	}

	if !e.PrimaryKey.PubKeyAlgo.CanSign() {
		return nil, errors.StructuralError("primary key cannot be used for signatures")
	}

	var revocations []*packet.Signature
EachPacket:
	for {
		p, err := packets.Next()
		if err == io.EOF {
			break
		} else if err != nil {
			return nil, err
		}

		switch pkt := p.(type) {
		case *packet.UserId:
			if err := addUserID(e, packets, pkt); err != nil {
				return nil, err
			}
		case *packet.Signature:
			if pkt.SigType == packet.SigTypeKeyRevocation {
				revocations = append(revocations, pkt)
			} else if pkt.SigType == packet.SigTypeDirectSignature {
				// TODO: RFC4880 5.2.1 permits signatures
				// directly on keys (eg. to bind additional
				// revocation keys).
			}
			// Else, ignoring the signature as it does not follow anything
			// we would know to attach it to.
		case *packet.PrivateKey:
			if pkt.IsSubkey == false {
				packets.Unread(p)
				break EachPacket
			}
			err = addSubkey(e, packets, &pkt.PublicKey, pkt)
			if err != nil {
				return nil, err
			}
		case *packet.PublicKey:
			if pkt.IsSubkey == false {
				packets.Unread(p)
				break EachPacket
			}
			err = addSubkey(e, packets, pkt, nil)
			if err != nil {
				return nil, err
			}
		default:
			// we ignore unknown packets
		}
	}

	if len(e.Identities) == 0 {
		return nil, errors.StructuralError("entity without any identities")
	}

	for _, revocation := range revocations {
		err = e.PrimaryKey.VerifyRevocationSignature(revocation)
		if err == nil {
			e.Revocations = append(e.Revocations, revocation)
		} else {
			// TODO: RFC 4880 5.2.3.15 defines revocation keys.
			return nil, errors.StructuralError("revocation signature signed by alternate key")
		}
	}

	return e, nil
}

func addUserID(e *Entity, packets *packet.Reader, pkt *packet.UserId) error {
	// Make a new Identity object, that we might wind up throwing away.
	// We'll only add it if we get a valid self-signature over this
	// userID.
	identity := new(Identity)
	identity.Name = pkt.Id
	identity.UserId = pkt

	for {
		p, err := packets.Next()
		if err == io.EOF {
			break
		} else if err != nil {
			return err
		}

		sig, ok := p.(*packet.Signature)
		if !ok {
			packets.Unread(p)
			break
		}

		if sig.SigType != packet.SigTypeGenericCert &&
			sig.SigType != packet.SigTypePersonaCert &&
			sig.SigType != packet.SigTypeCasualCert &&
			sig.SigType != packet.SigTypePositiveCert &&
			sig.SigType != packet.SigTypeCertificationRevocation {
			return errors.StructuralError("user ID signature with wrong type")
		}

		if sig.CheckKeyIdOrFingerprint(e.PrimaryKey) {
			if err = e.PrimaryKey.VerifyUserIdSignature(pkt.Id, e.PrimaryKey, sig); err != nil {
				return errors.StructuralError("user ID self-signature invalid: " + err.Error())
			}
			if sig.SigType == packet.SigTypeCertificationRevocation {
				identity.Revocations = append(identity.Revocations, sig)
			} else if identity.SelfSignature == nil || sig.CreationTime.After(identity.SelfSignature.CreationTime) {
				identity.SelfSignature = sig
			}
			identity.Signatures = append(identity.Signatures, sig)
			e.Identities[pkt.Id] = identity
		} else {
			identity.Signatures = append(identity.Signatures, sig)
		}
	}

	return nil
}

func addSubkey(e *Entity, packets *packet.Reader, pub *packet.PublicKey, priv *packet.PrivateKey) error {
	var subKey Subkey
	subKey.PublicKey = pub
	subKey.PrivateKey = priv

	for {
		p, err := packets.Next()
		if err == io.EOF {
			break
		} else if err != nil {
			return errors.StructuralError("subkey signature invalid: " + err.Error())
		}

		sig, ok := p.(*packet.Signature)
		if !ok {
			packets.Unread(p)
			break
		}

		if sig.SigType != packet.SigTypeSubkeyBinding && sig.SigType != packet.SigTypeSubkeyRevocation {
			return errors.StructuralError("subkey signature with wrong type")
		}

		if err := e.PrimaryKey.VerifyKeySignature(subKey.PublicKey, sig); err != nil {
			return errors.StructuralError("subkey signature invalid: " + err.Error())
		}

		switch sig.SigType {
		case packet.SigTypeSubkeyRevocation:
			subKey.Revocations = append(subKey.Revocations, sig)
		case packet.SigTypeSubkeyBinding:
			if subKey.Sig == nil || sig.CreationTime.After(subKey.Sig.CreationTime) {
				subKey.Sig = sig
			}
		}
	}

	if subKey.Sig == nil {
		return errors.StructuralError("subkey packet not followed by signature")
	}

	e.Subkeys = append(e.Subkeys, subKey)

	return nil
}

// SerializePrivate serializes an Entity, including private key material, but
// excluding signatures from other entities, to the given Writer.
// Identities and subkeys are re-signed in case they changed since NewEntry.
// If config is nil, sensible defaults will be used.
func (e *Entity) SerializePrivate(w io.Writer, config *packet.Config) (err error) {
	if e.PrivateKey.Dummy() {
		return errors.ErrDummyPrivateKey("dummy private key cannot re-sign identities")
	}
	return e.serializePrivate(w, config, true)
}

// SerializePrivateWithoutSigning serializes an Entity, including private key
// material, but excluding signatures from other entities, to the given Writer.
// Self-signatures of identities and subkeys are not re-signed. This is useful
// when serializing GNU dummy keys, among other things.
// If config is nil, sensible defaults will be used.
func (e *Entity) SerializePrivateWithoutSigning(w io.Writer, config *packet.Config) (err error) {
	return e.serializePrivate(w, config, false)
}

func (e *Entity) serializePrivate(w io.Writer, config *packet.Config, reSign bool) (err error) {
	if e.PrivateKey == nil {
		return goerrors.New("openpgp: private key is missing")
	}
	err = e.PrivateKey.Serialize(w)
	if err != nil {
		return
	}
	for _, revocation := range e.Revocations {
		err := revocation.Serialize(w)
		if err != nil {
			return err
		}
	}
	for _, ident := range e.Identities {
		err = ident.UserId.Serialize(w)
		if err != nil {
			return
		}
		if reSign {
			if ident.SelfSignature == nil {
				return goerrors.New("openpgp: can't re-sign identity without valid self-signature")
			}
			err = ident.SelfSignature.SignUserId(ident.UserId.Id, e.PrimaryKey, e.PrivateKey, config)
			if err != nil {
				return
			}
		}
		for _, revocation := range ident.Revocations {
			err := revocation.Serialize(w)
			if err != nil {
				return err
			}
		}
		if ident.SelfSignature != nil {
			err = ident.SelfSignature.Serialize(w)
			if err != nil {
				return
			}
		}
	}
	for _, subkey := range e.Subkeys {
		err = subkey.PrivateKey.Serialize(w)
		if err != nil {
			return
		}
		if reSign {
			err = subkey.Sig.SignKey(subkey.PublicKey, e.PrivateKey, config)
			if err != nil {
				return
			}
			if subkey.Sig.EmbeddedSignature != nil {
				err = subkey.Sig.EmbeddedSignature.CrossSignKey(subkey.PublicKey, e.PrimaryKey,
					subkey.PrivateKey, config)
				if err != nil {
					return
				}
			}
		}
		for _, revocation := range subkey.Revocations {
			err := revocation.Serialize(w)
			if err != nil {
				return err
			}
		}
		err = subkey.Sig.Serialize(w)
		if err != nil {
			return
		}
	}
	return nil
}

// Serialize writes the public part of the given Entity to w, including
// signatures from other entities. No private key material will be output.
func (e *Entity) Serialize(w io.Writer) error {
	err := e.PrimaryKey.Serialize(w)
	if err != nil {
		return err
	}
	for _, revocation := range e.Revocations {
		err := revocation.Serialize(w)
		if err != nil {
			return err
		}
	}
	for _, ident := range e.Identities {
		err = ident.UserId.Serialize(w)
		if err != nil {
			return err
		}
		for _, sig := range ident.Signatures {
			err = sig.Serialize(w)
			if err != nil {
				return err
			}
		}
	}
	for _, subkey := range e.Subkeys {
		err = subkey.PublicKey.Serialize(w)
		if err != nil {
			return err
		}
		for _, revocation := range subkey.Revocations {
			err := revocation.Serialize(w)
			if err != nil {
				return err
			}
		}
		err = subkey.Sig.Serialize(w)
		if err != nil {
			return err
		}
	}
	return nil
}

// SignIdentity adds a signature to e, from signer, attesting that identity is
// associated with e. The provided identity must already be an element of
// e.Identities and the private key of signer must have been decrypted if
// necessary.
// If config is nil, sensible defaults will be used.
func (e *Entity) SignIdentity(identity string, signer *Entity, config *packet.Config) error {
	certificationKey, ok := signer.CertificationKey(config.Now())
	if !ok {
		return errors.InvalidArgumentError("no valid certification key found")
	}

	if certificationKey.PrivateKey.Encrypted {
		return errors.InvalidArgumentError("signing Entity's private key must be decrypted")
	}

	ident, ok := e.Identities[identity]
	if !ok {
		return errors.InvalidArgumentError("given identity string not found in Entity")
	}

	sig := &packet.Signature{
		Version:      certificationKey.PrivateKey.Version,
		SigType:      packet.SigTypeGenericCert,
		PubKeyAlgo:   certificationKey.PrivateKey.PubKeyAlgo,
		Hash:         config.Hash(),
		CreationTime: config.Now(),
		IssuerKeyId:  &certificationKey.PrivateKey.KeyId,
	}

	if config.SigLifetime() != 0 {
		sig.SigLifetimeSecs = &config.SigLifetimeSecs
	}

	signingUserID := config.SigningUserId()
	if signingUserID != "" {
		if _, ok := signer.Identities[signingUserID]; !ok {
			return errors.InvalidArgumentError("signer identity string not found in signer Entity")
		}
		sig.SignerUserId = &signingUserID
	}

	if err := sig.SignUserId(identity, e.PrimaryKey, certificationKey.PrivateKey, config); err != nil {
		return err
	}
	ident.Signatures = append(ident.Signatures, sig)
	return nil
}

// RevokeKey generates a key revocation signature (packet.SigTypeKeyRevocation) with the
// specified reason code and text (RFC4880 section-5.2.3.23).
// If config is nil, sensible defaults will be used.
func (e *Entity) RevokeKey(reason packet.ReasonForRevocation, reasonText string, config *packet.Config) error {
	revSig := &packet.Signature{
		Version:              e.PrimaryKey.Version,
		CreationTime:         config.Now(),
		SigType:              packet.SigTypeKeyRevocation,
		PubKeyAlgo:           e.PrimaryKey.PubKeyAlgo,
		Hash:                 config.Hash(),
		RevocationReason:     &reason,
		RevocationReasonText: reasonText,
		IssuerKeyId:          &e.PrimaryKey.KeyId,
	}

	if err := revSig.RevokeKey(e.PrimaryKey, e.PrivateKey, config); err != nil {
		return err
	}
	e.Revocations = append(e.Revocations, revSig)
	return nil
}

// RevokeSubkey generates a subkey revocation signature (packet.SigTypeSubkeyRevocation) for
// a subkey with the specified reason code and text (RFC4880 section-5.2.3.23).
// If config is nil, sensible defaults will be used.
func (e *Entity) RevokeSubkey(sk *Subkey, reason packet.ReasonForRevocation, reasonText string, config *packet.Config) error {
	if err := e.PrimaryKey.VerifyKeySignature(sk.PublicKey, sk.Sig); err != nil {
		return errors.InvalidArgumentError("given subkey is not associated with this key")
	}

	revSig := &packet.Signature{
		Version:              e.PrimaryKey.Version,
		CreationTime:         config.Now(),
		SigType:              packet.SigTypeSubkeyRevocation,
		PubKeyAlgo:           e.PrimaryKey.PubKeyAlgo,
		Hash:                 config.Hash(),
		RevocationReason:     &reason,
		RevocationReasonText: reasonText,
		IssuerKeyId:          &e.PrimaryKey.KeyId,
	}

	if err := revSig.RevokeSubkey(sk.PublicKey, e.PrivateKey, config); err != nil {
		return err
	}

	sk.Revocations = append(sk.Revocations, revSig)
	return nil
}
07070100000218000081A4000000000000000000000001645E367C00008F2E000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/keys_test_data.go  package openpgp

const expiringKeyHex = "c6c04d0451d0c680010800abbb021fd03ffc4e96618901180c3fdcb060ee69eeead97b91256d11420d80b5f1b51930248044130bd300605cf8a05b7a40d3d8cfb0a910be2e3db50dcd50a9c54064c2a5550801daa834ff4480b33d3d3ca495ff8a4e84a886977d17d998f881241a874083d8b995beab555b6d22b8a4817ab17ac3e7304f7d4d2c05c495fb2218348d3bc13651db1d92732e368a9dd7dcefa6eddff30b94706a9aaee47e9d39321460b740c59c6fc3c2fd8ab6c0fb868cb87c0051f0321301fe0f0e1820b15e7fb7063395769b525005c7e30a7ce85984f5cac00504e7b4fdc45d74958de8388436fd5c7ba9ea121f1c851b5911dd1b47a14d81a09e92ef37721e2325b6790011010001cd00c2c07b041001080025050251d0c680050900278d00060b09070803020415080a0203160201021901021b03021e01000a0910e7b484133a890a35ae4b0800a1beb82e7f28eaf5273d6af9d3391314f6280b2b624eaca2851f89a9ebcaf80ac589ebd509f168bc4322106ca2e2ce77a76e071a3c7444787d65216b5f05e82c77928860b92aace3b7d0327db59492f422eb9dfab7249266d37429870b091a98aba8724c2259ebf8f85093f21255eafa75aa841e31d94f2ac891b9755fed455e539044ee69fc47950b80e003fc9f298d695660f28329eaa38037c367efde1727458e514faf990d439a21461b719edaddf9296d3d0647b43ca56cb8dbf63b4fcf8b9968e7928c463470fab3b98e44d0d95645062f94b2d04fe56bd52822b71934db8ce845622c40b92fcbe765a142e7f38b61a6aa9606c8e8858dcd3b6eb1894acec04d0451d1f06b01080088bea67444e1789390e7c0335c86775502d58ec783d99c8ef4e06de235ed3dd4b0467f6f358d818c7d8989d43ec6d69fcbc8c32632d5a1b605e3fa8e41d695fcdcaa535936cd0157f9040dce362519803b908eafe838bb13216c885c6f93e9e8d5745607f0d062322085d6bdc760969149a8ff8dd9f5c18d9bfe2e6f63a06e17694cf1f67587c6fb70e9aebf90ffc528ca3b615ac7c9d4a21ea4f7c06f2e98fbbd90a859b8608bf9ea638e3a54289ce44c283110d0c45fa458de6251cd6e7baf71f80f12c8978340490fd90c92b81736ae902ed958e478dceae2835953d189c45d182aff02ea2be61b81d8e94430f041d638647b43e2fcb45fd512fbf5068b810011010001c2c06504180108000f050251d1f06b050900081095021b0c000a0910e7b484133a890a35e63407fe2ec88d6d1e6c9ce7553ece0cb2524747217bad29f251d33df84599ffcc900141a355abd62126800744068a5e05dc167056aa9205273dc7765a2ed49db15c2a83b8d6e6429c902136f1e12229086c1c10c0053242c2a4ae1930db58163387a48cad64607ff2153c320e42843dec28e3fce90e7399d63ac0affa2fee1f0adc0953c89eb3f46ef1d6c04328ed13b491669d5120a3782e3ffb7c69575fb77eebd108794f4dda9d34be2bae57e8e59ec8ebfda2f6f06104b2321be408ea146e2db482b00c5055c8618de36ac9716f80da2617e225556d0fce61b01c8cea2d1e0ea982c31711060ca370f2739366e1e708f38405d784b49d16a26cf62d152eae734327cec04d0451d1f07b010800d5af91c5e7c2fd8951c8d254eab0c97cdcb66822f868b79b78c366255059a68fd74ebca9adb9b970cd9e586690e6e0756705432306878c897b10a4b4ca0005966f99ac8fa4e6f9caf54bf8e53844544beee9872a7ac64c119cf1393d96e674254b661f61ee975633d0e8a8672531edb6bb8e211204e7754a9efa802342118eee850beea742bac95a3f706cc2024cf6037a308bb68162b2f53b9a6346a96e6d31871a2456186e24a1c7a82b82ac04afdfd57cd7fb9ba77a9c760d40b76a170f7be525e5fb6a9848cc726e806187710d9b190387df28700f321f988a392899f93815cc937f309129eb94d5299c5547cb2c085898e6639496e70d746c9d3fb9881d0011010001c2c06504180108000f050251d1f07b050900266305021b0c000a0910e7b484133a890a35bff207fd10dfe8c4a6ea1dd30568012b6fd6891a763c87ad0f7a1d112aad9e8e3239378a3b85588c235865bac2e614348cb4f216d7217f53b3ef48c192e0a4d31d64d7bfa5faccf21155965fa156e887056db644a05ad08a85cc6152d1377d9e37b46f4ff462bbe68ace2dc586ef90070314576c985d8037c2ba63f0a7dc17a62e15bd77e88bc61d9d00858979709f12304264a4cf4225c5cf86f12c8e19486cb9cdcc69f18f027e5f16f4ca8b50e28b3115eaff3a345acd21f624aef81f6ede515c1b55b26b84c1e32264754eab672d5489b287e7277ea855e0a5ff2aa9e8b8c76d579a964ec225255f4d57bf66639ccb34b64798846943e162a41096a7002ca21c7f56"
const subkeyUsageHex = "988d04533a52bc010400d26af43085558f65b9e7dbc90cb9238015259aed5e954637adcfa2181548b2d0b60c65f1f42ec5081cbf1bc0a8aa4900acfb77070837c58f26012fbce297d70afe96e759ad63531f0037538e70dbf8e384569b9720d99d8eb39d8d0a2947233ed242436cb6ac7dfe74123354b3d0119b5c235d3dd9c9d6c004f8ffaf67ad8583001101000188b7041f010200210502533b8552170c8001ce094aa433f7040bb2ddf0be3893cb843d0fe70c020700000a0910a42704b92866382aa98404009d63d916a27543da4221c60087c33f1c44bec9998c5438018ed370cca4962876c748e94b73eb39c58eb698063f3fd6346d58dd2a11c0247934c4a9d71f24754f7468f96fb24c3e791dd2392b62f626148ad724189498cbf993db2df7c0cdc2d677c35da0f16cb16c9ce7c33b4de65a4a91b1d21a130ae9cc26067718910ef8e2b417556d627261203c756d627261407379642e65642e61753e88b80413010200220502533a52bc021b03060b090807030206150802090a0b0416020301021e01021780000a0910a42704b92866382a47840400c0c2bd04f5fca586de408b395b3c280a278259c93eaaa8b79a53b97003f8ed502a8a00446dd9947fb462677e4fcac0dac2f0701847d15130aadb6cd9e0705ea0cf5f92f129136c7be21a718d46c8e641eb7f044f2adae573e11ae423a0a9ca51324f03a8a2f34b91fa40c3cc764bee4dccadedb54c768ba0469b683ea53f1c29b88d04533a52bc01040099c92a5d6f8b744224da27bc2369127c35269b58bec179de6bbc038f749344222f85a31933224f26b70243c4e4b2d242f0c4777eaef7b5502f9dad6d8bf3aaeb471210674b74de2d7078af497d55f5cdad97c7bedfbc1b41e8065a97c9c3d344b21fc81d27723af8e374bc595da26ea242dccb6ae497be26eea57e563ed517e90011010001889f0418010200090502533a52bc021b0c000a0910a42704b92866382afa1403ff70284c2de8a043ff51d8d29772602fa98009b7861c540535f874f2c230af8caf5638151a636b21f8255003997ccd29747fdd06777bb24f9593bd7d98a3e887689bf902f999915fcc94625ae487e5d13e6616f89090ebc4fdc7eb5cad8943e4056995bb61c6af37f8043016876a958ec7ebf39c43d20d53b7f546cfa83e8d2604b88d04533b8283010400c0b529316dbdf58b4c54461e7e669dc11c09eb7f73819f178ccd4177b9182b91d138605fcf1e463262fabefa73f94a52b5e15d1904635541c7ea540f07050ce0fb51b73e6f88644cec86e91107c957a114f69554548a85295d2b70bd0b203992f76eb5d493d86d9eabcaa7ef3fc7db7e458438db3fcdb0ca1cc97c638439a9170011010001889f0418010200090502533b8283021b0c000a0910a42704b92866382adc6d0400cfff6258485a21675adb7a811c3e19ebca18851533f75a7ba317950b9997fda8d1a4c8c76505c08c04b6c2cc31dc704d33da36a21273f2b388a1a706f7c3378b66d887197a525936ed9a69acb57fe7f718133da85ec742001c5d1864e9c6c8ea1b94f1c3759cebfd93b18606066c063a63be86085b7e37bdbc65f9a915bf084bb901a204533b85cd110400aed3d2c52af2b38b5b67904b0ef73d6dd7aef86adb770e2b153cd22489654dcc91730892087bb9856ae2d9f7ed1eb48f214243fe86bfe87b349ebd7c30e630e49c07b21fdabf78b7a95c8b7f969e97e3d33f2e074c63552ba64a2ded7badc05ce0ea2be6d53485f6900c7860c7aa76560376ce963d7271b9b54638a4028b573f00a0d8854bfcdb04986141568046202192263b9b67350400aaa1049dbc7943141ef590a70dcb028d730371d92ea4863de715f7f0f16d168bd3dc266c2450457d46dcbbf0b071547e5fbee7700a820c3750b236335d8d5848adb3c0da010e998908dfd93d961480084f3aea20b247034f8988eccb5546efaa35a92d0451df3aaf1aee5aa36a4c4d462c760ecd9cebcabfbe1412b1f21450f203fd126687cd486496e971a87fd9e1a8a765fe654baa219a6871ab97768596ab05c26c1aeea8f1a2c72395a58dbc12ef9640d2b95784e974a4d2d5a9b17c25fedacfe551bda52602de8f6d2e48443f5dd1a2a2a8e6a5e70ecdb88cd6e766ad9745c7ee91d78cc55c3d06536b49c3fee6c3d0b6ff0fb2bf13a314f57c953b8f4d93bf88e70418010200090502533b85cd021b0200520910a42704b92866382a47200419110200060502533b85cd000a091042ce2c64bc0ba99214b2009e26b26852c8b13b10c35768e40e78fbbb48bd084100a0c79d9ea0844fa5853dd3c85ff3ecae6f2c9dd6c557aa04008bbbc964cd65b9b8299d4ebf31f41cc7264b8cf33a00e82c5af022331fac79efc9563a822497ba012953cefe2629f1242fcdcb911dbb2315985bab060bfd58261ace3c654bdbbe2e8ed27a46e836490145c86dc7bae15c011f7e1ffc33730109b9338cd9f483e7cef3d2f396aab5bd80efb6646d7e778270ee99d934d187dd98"
const revokedKeyHex = "988d045331ce82010400c4fdf7b40a5477f206e6ee278eaef888ca73bf9128a9eef9f2f1ddb8b7b71a4c07cfa241f028a04edb405e4d916c61d6beabc333813dc7b484d2b3c52ee233c6a79b1eea4e9cc51596ba9cd5ac5aeb9df62d86ea051055b79d03f8a4fa9f38386f5bd17529138f3325d46801514ea9047977e0829ed728e68636802796801be10011010001889f04200102000905025331d0e3021d03000a0910a401d9f09a34f7c042aa040086631196405b7e6af71026b88e98012eab44aa9849f6ef3fa930c7c9f23deaedba9db1538830f8652fb7648ec3fcade8dbcbf9eaf428e83c6cbcc272201bfe2fbb90d41963397a7c0637a1a9d9448ce695d9790db2dc95433ad7be19eb3de72dacf1d6db82c3644c13eae2a3d072b99bb341debba012c5ce4006a7d34a1f4b94b444526567205265766f6b657220283c52656727732022424d204261726973746122204b657920262530305c303e5c29203c72656740626d626172697374612e636f2e61753e88b704130102002205025331ce82021b03060b090807030206150802090a0b0416020301021e01021780000a0910a401d9f09a34f7c0019c03f75edfbeb6a73e7225ad3cc52724e2872e04260d7daf0d693c170d8c4b243b8767bc7785763533febc62ec2600c30603c433c095453ede59ff2fcabeb84ce32e0ed9d5cf15ffcbc816202b64370d4d77c1e9077d74e94a16fb4fa2e5bec23a56d7a73cf275f91691ae1801a976fcde09e981a2f6327ac27ea1fecf3185df0d56889c04100102000605025331cfb5000a0910fe9645554e8266b64b4303fc084075396674fb6f778d302ac07cef6bc0b5d07b66b2004c44aef711cbac79617ef06d836b4957522d8772dd94bf41a2f4ac8b1ee6d70c57503f837445a74765a076d07b829b8111fc2a918423ddb817ead7ca2a613ef0bfb9c6b3562aec6c3cf3c75ef3031d81d95f6563e4cdcc9960bcb386c5d757b104fcca5fe11fc709df884604101102000605025331cfe7000a09107b15a67f0b3ddc0317f6009e360beea58f29c1d963a22b962b80788c3fa6c84e009d148cfde6b351469b8eae91187eff07ad9d08fcaab88d045331ce820104009f25e20a42b904f3fa555530fe5c46737cf7bd076c35a2a0d22b11f7e0b61a69320b768f4a80fe13980ce380d1cfc4a0cd8fbe2d2e2ef85416668b77208baa65bf973fe8e500e78cc310d7c8705cdb34328bf80e24f0385fce5845c33bc7943cf6b11b02348a23da0bf6428e57c05135f2dc6bd7c1ce325d666d5a5fd2fd5e410011010001889f04180102000905025331ce82021b0c000a0910a401d9f09a34f7c0418003fe34feafcbeaef348a800a0d908a7a6809cc7304017d820f70f0474d5e23cb17e38b67dc6dca282c6ca00961f4ec9edf2738d0f087b1d81e4871ef08e1798010863afb4eac4c44a376cb343be929c5be66a78cfd4456ae9ec6a99d97f4e1c3ff3583351db2147a65c0acef5c003fb544ab3a2e2dc4d43646f58b811a6c3a369d1f"
const revokedSubkeyHex = "988d04533121f6010400aefc803a3e4bb1a61c86e8a86d2726c6a43e0079e9f2713f1fa017e9854c83877f4aced8e331d675c67ea83ddab80aacbfa0b9040bb12d96f5a3d6be09455e2a76546cbd21677537db941cab710216b6d24ec277ee0bd65b910f416737ed120f6b93a9d3b306245c8cfd8394606fdb462e5cf43c551438d2864506c63367fc890011010001b41d416c696365203c616c69636540626d626172697374612e636f2e61753e88bb041301020025021b03060b090807030206150802090a0b0416020301021e01021780050253312798021901000a09104ef7e4beccde97f015a803ff5448437780f63263b0df8442a995e7f76c221351a51edd06f2063d8166cf3157aada4923dfc44aa0f2a6a4da5cf83b7fe722ba8ab416c976e77c6b5682e7f1069026673bd0de56ba06fd5d7a9f177607f277d9b55ff940a638c3e68525c67517e2b3d976899b93ca267f705b3e5efad7d61220e96b618a4497eab8d04403d23f8846041011020006050253312910000a09107b15a67f0b3ddc03d96e009f50b6365d86c4be5d5e9d0ea42d5e56f5794c617700a0ab274e19c2827780016d23417ce89e0a2c0d987d889c04100102000605025331cf7a000a0910a401d9f09a34f7c0ee970400aca292f213041c9f3b3fc49148cbda9d84afee6183c8dd6c5ff2600b29482db5fecd4303797be1ee6d544a20a858080fec43412061c9a71fae4039fd58013b4ae341273e6c66ad4c7cdd9e68245bedb260562e7b166f2461a1032f2b38c0e0e5715fb3d1656979e052b55ca827a76f872b78a9fdae64bc298170bfcebedc1271b41a416c696365203c616c696365407379646973702e6f722e61753e88b804130102002205025331278b021b03060b090807030206150802090a0b0416020301021e01021780000a09104ef7e4beccde97f06a7003fa03c3af68d272ebc1fa08aa72a03b02189c26496a2833d90450801c4e42c5b5f51ad96ce2d2c9cef4b7c02a6a2fcf1412d6a2d486098eb762f5010a201819c17fd2888aec8eda20c65a3b75744de7ee5cc8ac7bfc470cbe3cb982720405a27a3c6a8c229cfe36905f881b02ed5680f6a8f05866efb9d6c5844897e631deb949ca8846041011020006050253312910000a09107b15a67f0b3ddc0347bc009f7fa35db59147469eb6f2c5aaf6428accb138b22800a0caa2f5f0874bacc5909c652a57a31beda65eddd5889c04100102000605025331cf7a000a0910a401d9f09a34f7c0316403ff46f2a5c101256627f16384d34a38fb47a6c88ba60506843e532d91614339fccae5f884a5741e7582ffaf292ba38ee10a270a05f139bde3814b6a077e8cd2db0f105ebea2a83af70d385f13b507fac2ad93ff79d84950328bb86f3074745a8b7f9b64990fb142e2a12976e27e8d09a28dc5621f957ac49091116da410ac3cbde1b88d04533121f6010400cbd785b56905e4192e2fb62a720727d43c4fa487821203cf72138b884b78b701093243e1d8c92a0248a6c0203a5a88693da34af357499abacaf4b3309c640797d03093870a323b4b6f37865f6eaa2838148a67df4735d43a90ca87942554cdf1c4a751b1e75f9fd4ce4e97e278d6c1c7ed59d33441df7d084f3f02beb68896c70011010001889f0418010200090502533121f6021b0c000a09104ef7e4beccde97f0b98b03fc0a5ccf6a372995835a2f5da33b282a7d612c0ab2a97f59cf9fff73e9110981aac2858c41399afa29624a7fd8a0add11654e3d882c0fd199e161bdad65e5e2548f7b68a437ea64293db1246e3011cbb94dc1bcdeaf0f2539bd88ff16d95547144d97cead6a8c5927660a91e6db0d16eb36b7b49a3525b54d1644e65599b032b7eb901a204533127a0110400bd3edaa09eff9809c4edc2c2a0ebe52e53c50a19c1e49ab78e6167bf61473bb08f2050d78a5cbbc6ed66aff7b42cd503f16b4a0b99fa1609681fca9b7ce2bbb1a5b3864d6cdda4d7ef7849d156d534dea30fb0efb9e4cf8959a2b2ce623905882d5430b995a15c3b9fe92906086788b891002924f94abe139b42cbbfaaabe42f00a0b65dc1a1ad27d798adbcb5b5ad02d2688c89477b03ff4eebb6f7b15a73b96a96bed201c0e5e4ea27e4c6e2dd1005b94d4b90137a5b1cf5e01c6226c070c4cc999938101578877ee76d296b9aab8246d57049caacf489e80a3f40589cade790a020b1ac146d6f7a6241184b8c7fcde680eae3188f5dcbe846d7f7bdad34f6fcfca08413e19c1d5df83fc7c7c627d493492e009c2f52a80400a2fe82de87136fd2e8845888c4431b032ba29d9a29a804277e31002a8201fb8591a3e55c7a0d0881496caf8b9fb07544a5a4879291d0dc026a0ea9e5bd88eb4aa4947bbd694b25012e208a250d65ddc6f1eea59d3aed3b4ec15fcab85e2afaa23a40ab1ef9ce3e11e1bc1c34a0e758e7aa64deb8739276df0af7d4121f834a9b88e70418010200090502533127a0021b02005209104ef7e4beccde97f047200419110200060502533127a0000a0910dbce4ee19529437fe045009c0b32f5ead48ee8a7e98fac0dea3d3e6c0e2c552500a0ad71fadc5007cfaf842d9b7db3335a8cdad15d3d1a6404009b08e2c68fe8f3b45c1bb72a4b3278cdf3012aa0f229883ad74aa1f6000bb90b18301b2f85372ca5d6b9bf478d235b733b1b197d19ccca48e9daf8e890cb64546b4ce1b178faccfff07003c172a2d4f5ebaba9f57153955f3f61a9b80a4f5cb959908f8b211b03b7026a8a82fc612bfedd3794969bcf458c4ce92be215a1176ab88d045331d144010400a5063000c5aaf34953c1aa3bfc95045b3aab9882b9a8027fecfe2142dc6b47ba8aca667399990244d513dd0504716908c17d92c65e74219e004f7b83fc125e575dd58efec3ab6dd22e3580106998523dea42ec75bf9aa111734c82df54630bebdff20fe981cfc36c76f865eb1c2fb62c9e85bc3a6e5015a361a2eb1c8431578d0011010001889f04280102000905025331d433021d03000a09104ef7e4beccde97f02e5503ff5e0630d1b65291f4882b6d40a29da4616bb5088717d469fbcc3648b8276de04a04988b1f1b9f3e18f52265c1f8b6c85861691c1a6b8a3a25a1809a0b32ad330aec5667cb4262f4450649184e8113849b05e5ad06a316ea80c001e8e71838190339a6e48bbde30647bcf245134b9a97fa875c1d83a9862cae87ffd7e2c4ce3a1b89013d04180102000905025331d144021b0200a809104ef7e4beccde97f09d2004190102000605025331d144000a0910677815e371c2fd23522203fe22ab62b8e7a151383cea3edd3a12995693911426f8ccf125e1f6426388c0010f88d9ca7da2224aee8d1c12135998640c5e1813d55a93df472faae75bef858457248db41b4505827590aeccf6f9eb646da7f980655dd3050c6897feddddaca90676dee856d66db8923477d251712bb9b3186b4d0114daf7d6b59272b53218dd1da94a03ff64006fcbe71211e5daecd9961fba66cdb6de3f914882c58ba5beddeba7dcb950c1156d7fba18c19ea880dccc800eae335deec34e3b84ac75ffa24864f782f87815cda1c0f634b3dd2fa67cea30811d21723d21d9551fa12ccbcfa62b6d3a15d01307b99925707992556d50065505b090aadb8579083a20fe65bd2a270da9b011"

const missingCrossSignatureKey = `-----BEGIN PGP PUBLIC KEY BLOCK-----
Charset: UTF-8

mQENBFMYynYBCACVOZ3/e8Bm2b9KH9QyIlHGo/i1bnkpqsgXj8tpJ2MIUOnXMMAY
ztW7kKFLCmgVdLIC0vSoLA4yhaLcMojznh/2CcUglZeb6Ao8Gtelr//Rd5DRfPpG
zqcfUo+m+eO1co2Orabw0tZDfGpg5p3AYl0hmxhUyYSc/xUq93xL1UJzBFgYXY54
QsM8dgeQgFseSk/YvdP5SMx1ev+eraUyiiUtWzWrWC1TdyRa5p4UZg6Rkoppf+WJ
QrW6BWrhAtqATHc8ozV7uJjeONjUEq24roRc/OFZdmQQGK6yrzKnnbA6MdHhqpdo
9kWDcXYb7pSE63Lc+OBa5X2GUVvXJLS/3nrtABEBAAG0F2ludmFsaWQtc2lnbmlu
Zy1zdWJrZXlziQEoBBMBAgASBQJTnKB5AhsBAgsHAhUIAh4BAAoJEO3UDQUIHpI/
dN4H/idX4FQ1LIZCnpHS/oxoWQWfpRgdKAEM0qCqjMgiipJeEwSQbqjTCynuh5/R
JlODDz85ABR06aoF4l5ebGLQWFCYifPnJZ/Yf5OYcMGtb7dIbqxWVFL9iLMO/oDL
ioI3dotjPui5e+2hI9pVH1UHB/bZ/GvMGo6Zg0XxLPolKQODMVjpjLAQ0YJ3spew
RAmOGre6tIvbDsMBnm8qREt7a07cBJ6XK7xjxYaZHQBiHVxyEWDa6gyANONx8duW
/fhQ/zDTnyVM/ik6VO0Ty9BhPpcEYLFwh5c1ilFari1ta3e6qKo6ZGa9YMk/REhu
yBHd9nTkI+0CiQUmbckUiVjDKKe5AQ0EUxjKdgEIAJcXQeP+NmuciE99YcJoffxv
2gVLU4ZXBNHEaP0mgaJ1+tmMD089vUQAcyGRvw8jfsNsVZQIOAuRxY94aHQhIRHR
bUzBN28ofo/AJJtfx62C15xt6fDKRV6HXYqAiygrHIpEoRLyiN69iScUsjIJeyFL
C8wa72e8pSL6dkHoaV1N9ZH/xmrJ+k0vsgkQaAh9CzYufncDxcwkoP+aOlGtX1gP
WwWoIbz0JwLEMPHBWvDDXQcQPQTYQyj+LGC9U6f9VZHN25E94subM1MjuT9OhN9Y
MLfWaaIc5WyhLFyQKW2Upofn9wSFi8ubyBnv640Dfd0rVmaWv7LNTZpoZ/GbJAMA
EQEAAYkBHwQYAQIACQUCU5ygeQIbAgAKCRDt1A0FCB6SP0zCB/sEzaVR38vpx+OQ
MMynCBJrakiqDmUZv9xtplY7zsHSQjpd6xGflbU2n+iX99Q+nav0ETQZifNUEd4N
1ljDGQejcTyKD6Pkg6wBL3x9/RJye7Zszazm4+toJXZ8xJ3800+BtaPoI39akYJm
+ijzbskvN0v/j5GOFJwQO0pPRAFtdHqRs9Kf4YanxhedB4dIUblzlIJuKsxFit6N
lgGRblagG3Vv2eBszbxzPbJjHCgVLR3RmrVezKOsZjr/2i7X+xLWIR0uD3IN1qOW
CXQxLBizEEmSNVNxsp7KPGTLnqO3bPtqFirxS9PJLIMPTPLNBY7ZYuPNTMqVIUWF
4artDmrG
=7FfJ
-----END PGP PUBLIC KEY BLOCK-----`

const invalidCrossSignatureKey = `-----BEGIN PGP PUBLIC KEY BLOCK-----

mQENBFMYynYBCACVOZ3/e8Bm2b9KH9QyIlHGo/i1bnkpqsgXj8tpJ2MIUOnXMMAY
ztW7kKFLCmgVdLIC0vSoLA4yhaLcMojznh/2CcUglZeb6Ao8Gtelr//Rd5DRfPpG
zqcfUo+m+eO1co2Orabw0tZDfGpg5p3AYl0hmxhUyYSc/xUq93xL1UJzBFgYXY54
QsM8dgeQgFseSk/YvdP5SMx1ev+eraUyiiUtWzWrWC1TdyRa5p4UZg6Rkoppf+WJ
QrW6BWrhAtqATHc8ozV7uJjeONjUEq24roRc/OFZdmQQGK6yrzKnnbA6MdHhqpdo
9kWDcXYb7pSE63Lc+OBa5X2GUVvXJLS/3nrtABEBAAG0F2ludmFsaWQtc2lnbmlu
Zy1zdWJrZXlziQEoBBMBAgASBQJTnKB5AhsBAgsHAhUIAh4BAAoJEO3UDQUIHpI/
dN4H/idX4FQ1LIZCnpHS/oxoWQWfpRgdKAEM0qCqjMgiipJeEwSQbqjTCynuh5/R
JlODDz85ABR06aoF4l5ebGLQWFCYifPnJZ/Yf5OYcMGtb7dIbqxWVFL9iLMO/oDL
ioI3dotjPui5e+2hI9pVH1UHB/bZ/GvMGo6Zg0XxLPolKQODMVjpjLAQ0YJ3spew
RAmOGre6tIvbDsMBnm8qREt7a07cBJ6XK7xjxYaZHQBiHVxyEWDa6gyANONx8duW
/fhQ/zDTnyVM/ik6VO0Ty9BhPpcEYLFwh5c1ilFari1ta3e6qKo6ZGa9YMk/REhu
yBHd9nTkI+0CiQUmbckUiVjDKKe5AQ0EUxjKdgEIAIINDqlj7X6jYKc6DjwrOkjQ
UIRWbQQar0LwmNilehmt70g5DCL1SYm9q4LcgJJ2Nhxj0/5qqsYib50OSWMcKeEe
iRXpXzv1ObpcQtI5ithp0gR53YPXBib80t3bUzomQ5UyZqAAHzMp3BKC54/vUrSK
FeRaxDzNLrCeyI00+LHNUtwghAqHvdNcsIf8VRumK8oTm3RmDh0TyjASWYbrt9c8
R1Um3zuoACOVy+mEIgIzsfHq0u7dwYwJB5+KeM7ZLx+HGIYdUYzHuUE1sLwVoELh
+SHIGHI1HDicOjzqgajShuIjj5hZTyQySVprrsLKiXS6NEwHAP20+XjayJ/R3tEA
EQEAAYkCPgQYAQIBKAUCU5ygeQIbAsBdIAQZAQIABgUCU5ygeQAKCRCpVlnFZmhO
52RJB/9uD1MSa0wjY6tHOIgquZcP3bHBvHmrHNMw9HR2wRCMO91ZkhrpdS3ZHtgb
u3/55etj0FdvDo1tb8P8FGSVtO5Vcwf5APM8sbbqoi8L951Q3i7qt847lfhu6sMl
w0LWFvPTOLHrliZHItPRjOltS1WAWfr2jUYhsU9ytaDAJmvf9DujxEOsN5G1YJep
54JCKVCkM/y585Zcnn+yxk/XwqoNQ0/iJUT9qRrZWvoeasxhl1PQcwihCwss44A+
YXaAt3hbk+6LEQuZoYS73yR3WHj+42tfm7YxRGeubXfgCEz/brETEWXMh4pe0vCL
bfWrmfSPq2rDegYcAybxRQz0lF8PAAoJEO3UDQUIHpI/exkH/0vQfdHA8g/N4T6E
i6b1CUVBAkvtdJpCATZjWPhXmShOw62gkDw306vHPilL4SCvEEi4KzG72zkp6VsB
DSRcpxCwT4mHue+duiy53/aRMtSJ+vDfiV1Vhq+3sWAck/yUtfDU9/u4eFaiNok1
8/Gd7reyuZt5CiJnpdPpjCwelK21l2w7sHAnJF55ITXdOxI8oG3BRKufz0z5lyDY
s2tXYmhhQIggdgelN8LbcMhWs/PBbtUr6uZlNJG2lW1yscD4aI529VjwJlCeo745
U7pO4eF05VViUJ2mmfoivL3tkhoTUWhx8xs8xCUcCg8DoEoSIhxtOmoTPR22Z9BL
6LCg2mg=
=Dhm4
-----END PGP PUBLIC KEY BLOCK-----`

const goodCrossSignatureKey = `-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1

mI0EVUqeVwEEAMufHRrMPWK3gyvi0O0tABCs/oON9zV9KDZlr1a1M91ShCSFwCPo
7r80PxdWVWcj0V5h50/CJYtpN3eE/mUIgW2z1uDYQF1OzrQ8ubrksfsJvpAhENom
lTQEppv9mV8qhcM278teb7TX0pgrUHLYF5CfPdp1L957JLLXoQR/lwLVABEBAAG0
E2dvb2Qtc2lnbmluZy1zdWJrZXmIuAQTAQIAIgUCVUqeVwIbAwYLCQgHAwIGFQgC
CQoLBBYCAwECHgECF4AACgkQNRjL95IRWP69XQQAlH6+eyXJN4DZTLX78KGjHrsw
6FCvxxClEPtPUjcJy/1KCRQmtLAt9PbbA78dvgzjDeZMZqRAwdjyJhjyg/fkU2OH
7wq4ktjUu+dLcOBb+BFMEY+YjKZhf6EJuVfxoTVr5f82XNPbYHfTho9/OABKH6kv
X70PaKZhbwnwij8Nts65AaIEVUqftREEAJ3WxZfqAX0bTDbQPf2CMT2IVMGDfhK7
GyubOZgDFFjwUJQvHNvsrbeGLZ0xOBumLINyPO1amIfTgJNm1iiWFWfmnHReGcDl
y5mpYG60Mb79Whdcer7CMm3AqYh/dW4g6IB02NwZMKoUHo3PXmFLxMKXnWyJ0clw
R0LI/Qn509yXAKDh1SO20rqrBM+EAP2c5bfI98kyNwQAi3buu94qo3RR1ZbvfxgW
CKXDVm6N99jdZGNK7FbRifXqzJJDLcXZKLnstnC4Sd3uyfyf1uFhmDLIQRryn5m+
LBYHfDBPN3kdm7bsZDDq9GbTHiFZUfm/tChVKXWxkhpAmHhU/tH6GGzNSMXuIWSO
aOz3Rqq0ED4NXyNKjdF9MiwD/i83S0ZBc0LmJYt4Z10jtH2B6tYdqnAK29uQaadx
yZCX2scE09UIm32/w7pV77CKr1Cp/4OzAXS1tmFzQ+bX7DR+Gl8t4wxr57VeEMvl
BGw4Vjh3X8//m3xynxycQU18Q1zJ6PkiMyPw2owZ/nss3hpSRKFJsxMLhW3fKmKr
Ey2KiOcEGAECAAkFAlVKn7UCGwIAUgkQNRjL95IRWP5HIAQZEQIABgUCVUqftQAK
CRD98VjDN10SqkWrAKDTpEY8D8HC02E/KVC5YUI01B30wgCgurpILm20kXEDCeHp
C5pygfXw1DJrhAP+NyPJ4um/bU1I+rXaHHJYroYJs8YSweiNcwiHDQn0Engh/mVZ
SqLHvbKh2dL/RXymC3+rjPvQf5cup9bPxNMa6WagdYBNAfzWGtkVISeaQW+cTEp/
MtgVijRGXR/lGLGETPg2X3Afwn9N9bLMBkBprKgbBqU7lpaoPupxT61bL70=
=vtbN
-----END PGP PUBLIC KEY BLOCK-----`

const revokedUserIDKey = `-----BEGIN PGP PUBLIC KEY BLOCK-----

mQENBFsgO5EBCADhREPmcjsPkXe1z7ctvyWL0S7oa9JaoGZ9oPDHFDlQxd0qlX2e
DZJZDg0qYvVixmaULIulApq1puEsaJCn3lHUbHlb4PYKwLEywYXM28JN91KtLsz/
uaEX2KC5WqeP40utmzkNLq+oRX/xnRMgwbO7yUNVG2UlEa6eI+xOXO3YtLdmJMBW
ClQ066ZnOIzEo1JxnIwha1CDBMWLLfOLrg6l8InUqaXbtEBbnaIYO6fXVXELUjkx
nmk7t/QOk0tXCy8muH9UDqJkwDUESY2l79XwBAcx9riX8vY7vwC34pm22fAUVLCJ
x1SJx0J8bkeNp38jKM2Zd9SUQqSbfBopQ4pPABEBAAG0I0dvbGFuZyBHb3BoZXIg
PG5vLXJlcGx5QGdvbGFuZy5jb20+iQFUBBMBCgA+FiEE5Ik5JLcNx6l6rZfw1oFy
9I6cUoMFAlsgO5ECGwMFCQPCZwAFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AACgkQ
1oFy9I6cUoMIkwf8DNPeD23i4jRwd/pylbvxwZintZl1fSwTJW1xcOa1emXaEtX2
depuqhP04fjlRQGfsYAQh7X9jOJxAHjTmhqFBi5sD7QvKU00cPFYbJ/JTx0B41bl
aXnSbGhRPh63QtEZL7ACAs+shwvvojJqysx7kyVRu0EW2wqjXdHwR/SJO6nhNBa2
DXzSiOU/SUA42mmG+5kjF8Aabq9wPwT9wjraHShEweNerNMmOqJExBOy3yFeyDpa
XwEZFzBfOKoxFNkIaVf5GSdIUGhFECkGvBMB935khftmgR8APxdU4BE7XrXexFJU
8RCuPXonm4WQOwTWR0vQg64pb2WKAzZ8HhwTGbQiR29sYW5nIEdvcGhlciA8cmV2
b2tlZEBnb2xhbmcuY29tPokBNgQwAQoAIBYhBOSJOSS3Dcepeq2X8NaBcvSOnFKD
BQJbIDv3Ah0AAAoJENaBcvSOnFKDfWMIAKhI/Tvu3h8fSUxp/gSAcduT6bC1JttG
0lYQ5ilKB/58lBUA5CO3ZrKDKlzW3M8VEcvohVaqeTMKeoQd5rCZq8KxHn/KvN6N
s85REfXfniCKfAbnGgVXX3kDmZ1g63pkxrFu0fDZjVDXC6vy+I0sGyI/Inro0Pzb
tvn0QCsxjapKK15BtmSrpgHgzVqVg0cUp8vqZeKFxarYbYB2idtGRci4b9tObOK0
BSTVFy26+I/mrFGaPrySYiy2Kz5NMEcRhjmTxJ8jSwEr2O2sUR0yjbgUAXbTxDVE
/jg5fQZ1ACvBRQnB7LvMHcInbzjyeTM3FazkkSYQD6b97+dkWwb1iWG5AQ0EWyA7
kQEIALkg04REDZo1JgdYV4x8HJKFS4xAYWbIva1ZPqvDNmZRUbQZR2+gpJGEwn7z
VofGvnOYiGW56AS5j31SFf5kro1+1bZQ5iOONBng08OOo58/l1hRseIIVGB5TGSa
PCdChKKHreJI6hS3mShxH6hdfFtiZuB45rwoaArMMsYcjaezLwKeLc396cpUwwcZ
snLUNd1Xu5EWEF2OdFkZ2a1qYdxBvAYdQf4+1Nr+NRIx1u1NS9c8jp3PuMOkrQEi
bNtc1v6v0Jy52mKLG4y7mC/erIkvkQBYJdxPaP7LZVaPYc3/xskcyijrJ/5ufoD8
K71/ShtsZUXSQn9jlRaYR0EbojMAEQEAAYkBPAQYAQoAJhYhBOSJOSS3Dcepeq2X
8NaBcvSOnFKDBQJbIDuRAhsMBQkDwmcAAAoJENaBcvSOnFKDkFMIAIt64bVZ8x7+
TitH1bR4pgcNkaKmgKoZz6FXu80+SnbuEt2NnDyf1cLOSimSTILpwLIuv9Uft5Pb
OraQbYt3xi9yrqdKqGLv80bxqK0NuryNkvh9yyx5WoG1iKqMj9/FjGghuPrRaT4l
QinNAghGVkEy1+aXGFrG2DsOC1FFI51CC2WVTzZ5RwR2GpiNRfESsU1rZAUqf/2V
yJl9bD5R4SUNy8oQmhOxi+gbhD4Ao34e4W0ilibslI/uawvCiOwlu5NGd8zv5n+U
heiQvzkApQup5c+BhH5zFDFdKJ2CBByxw9+7QjMFI/wgLixKuE0Ob2kAokXf7RlB
7qTZOahrETw=
=IKnw
-----END PGP PUBLIC KEY BLOCK-----`

const keyWithFirstUserIDRevoked = `-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: OpenPGP.js v4.10.10
Comment: https://openpgpjs.org

xsBNBFsgO5EBCADhREPmcjsPkXe1z7ctvyWL0S7oa9JaoGZ9oPDHFDlQxd0q
lX2eDZJZDg0qYvVixmaULIulApq1puEsaJCn3lHUbHlb4PYKwLEywYXM28JN
91KtLsz/uaEX2KC5WqeP40utmzkNLq+oRX/xnRMgwbO7yUNVG2UlEa6eI+xO
XO3YtLdmJMBWClQ066ZnOIzEo1JxnIwha1CDBMWLLfOLrg6l8InUqaXbtEBb
naIYO6fXVXELUjkxnmk7t/QOk0tXCy8muH9UDqJkwDUESY2l79XwBAcx9riX
8vY7vwC34pm22fAUVLCJx1SJx0J8bkeNp38jKM2Zd9SUQqSbfBopQ4pPABEB
AAHNIkdvbGFuZyBHb3BoZXIgPHJldm9rZWRAZ29sYW5nLmNvbT7CwI0EMAEK
ACAWIQTkiTkktw3HqXqtl/DWgXL0jpxSgwUCWyA79wIdAAAhCRDWgXL0jpxS
gxYhBOSJOSS3Dcepeq2X8NaBcvSOnFKDfWMIAKhI/Tvu3h8fSUxp/gSAcduT
6bC1JttG0lYQ5ilKB/58lBUA5CO3ZrKDKlzW3M8VEcvohVaqeTMKeoQd5rCZ
q8KxHn/KvN6Ns85REfXfniCKfAbnGgVXX3kDmZ1g63pkxrFu0fDZjVDXC6vy
+I0sGyI/Inro0Pzbtvn0QCsxjapKK15BtmSrpgHgzVqVg0cUp8vqZeKFxarY
bYB2idtGRci4b9tObOK0BSTVFy26+I/mrFGaPrySYiy2Kz5NMEcRhjmTxJ8j
SwEr2O2sUR0yjbgUAXbTxDVE/jg5fQZ1ACvBRQnB7LvMHcInbzjyeTM3Fazk
kSYQD6b97+dkWwb1iWHNI0dvbGFuZyBHb3BoZXIgPG5vLXJlcGx5QGdvbGFu
Zy5jb20+wsCrBBMBCgA+FiEE5Ik5JLcNx6l6rZfw1oFy9I6cUoMFAlsgO5EC
GwMFCQPCZwAFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AAIQkQ1oFy9I6cUoMW
IQTkiTkktw3HqXqtl/DWgXL0jpxSgwiTB/wM094PbeLiNHB3+nKVu/HBmKe1
mXV9LBMlbXFw5rV6ZdoS1fZ16m6qE/Th+OVFAZ+xgBCHtf2M4nEAeNOaGoUG
LmwPtC8pTTRw8Vhsn8lPHQHjVuVpedJsaFE+HrdC0RkvsAICz6yHC++iMmrK
zHuTJVG7QRbbCqNd0fBH9Ik7qeE0FrYNfNKI5T9JQDjaaYb7mSMXwBpur3A/
BP3COtodKETB416s0yY6okTEE7LfIV7IOlpfARkXMF84qjEU2QhpV/kZJ0hQ
aEUQKQa8EwH3fmSF+2aBHwA/F1TgETtetd7EUlTxEK49eiebhZA7BNZHS9CD
rilvZYoDNnweHBMZzsBNBFsgO5EBCAC5INOERA2aNSYHWFeMfByShUuMQGFm
yL2tWT6rwzZmUVG0GUdvoKSRhMJ+81aHxr5zmIhluegEuY99UhX+ZK6NftW2
UOYjjjQZ4NPDjqOfP5dYUbHiCFRgeUxkmjwnQoSih63iSOoUt5kocR+oXXxb
YmbgeOa8KGgKzDLGHI2nsy8Cni3N/enKVMMHGbJy1DXdV7uRFhBdjnRZGdmt
amHcQbwGHUH+PtTa/jUSMdbtTUvXPI6dz7jDpK0BImzbXNb+r9CcudpiixuM
u5gv3qyJL5EAWCXcT2j+y2VWj2HN/8bJHMoo6yf+bn6A/Cu9f0obbGVF0kJ/
Y5UWmEdBG6IzABEBAAHCwJMEGAEKACYWIQTkiTkktw3HqXqtl/DWgXL0jpxS
gwUCWyA7kQIbDAUJA8JnAAAhCRDWgXL0jpxSgxYhBOSJOSS3Dcepeq2X8NaB
cvSOnFKDkFMIAIt64bVZ8x7+TitH1bR4pgcNkaKmgKoZz6FXu80+SnbuEt2N
nDyf1cLOSimSTILpwLIuv9Uft5PbOraQbYt3xi9yrqdKqGLv80bxqK0NuryN
kvh9yyx5WoG1iKqMj9/FjGghuPrRaT4lQinNAghGVkEy1+aXGFrG2DsOC1FF
I51CC2WVTzZ5RwR2GpiNRfESsU1rZAUqf/2VyJl9bD5R4SUNy8oQmhOxi+gb
hD4Ao34e4W0ilibslI/uawvCiOwlu5NGd8zv5n+UheiQvzkApQup5c+BhH5z
FDFdKJ2CBByxw9+7QjMFI/wgLixKuE0Ob2kAokXf7RlB7qTZOahrETw=
=+2T8
-----END PGP PUBLIC KEY BLOCK-----
`

const keyWithOnlyUserIDRevoked = `-----BEGIN PGP PUBLIC KEY BLOCK-----

mDMEYYwB7RYJKwYBBAHaRw8BAQdARimqhPPzyGAXmfQJjcqM1QVPzLtURJSzNVll
JV4tEaW0KVJldm9rZWQgUHJpbWFyeSBVc2VyIElEIDxyZXZva2VkQGtleS5jb20+
iHgEMBYIACAWIQSpyJZAXYqVEFkjyKutFcS0yeB0LQUCYYwCtgIdAAAKCRCtFcS0
yeB0LbSsAQD8OYMaaBjrdzzpwIkP1stgmPd4/kzN/ZG28Ywl6a5F5QEA5Xg7aq4e
/t6Fsb4F5iqB956kSPe6YJrikobD/tBbMwSIkAQTFggAOBYhBKnIlkBdipUQWSPI
q60VxLTJ4HQtBQJhjAHtAhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEK0V
xLTJ4HQtBaoBAPZL7luTCji+Tqhn7XNfFE/0QIahCt8k9wfO1cGlB3inAQDf8Tzw
ZGR5fNluUcNoVxQT7bUSFStbaGo3k0BaOYPbCLg4BGGMAe0SCisGAQQBl1UBBQEB
B0DLwSpveSrbIO/IVZD13yrs1XuB3FURZUnafGrRq7+jUAMBCAeIeAQYFggAIBYh
BKnIlkBdipUQWSPIq60VxLTJ4HQtBQJhjAHtAhsMAAoJEK0VxLTJ4HQtZ1oA/j9u
8+p3xTNzsmabTL6BkNbMeB/RUKCrlm6woM6AV+vxAQCcXTn3JC2sNoNrLoXuVzaA
mcG3/TwG5GSQUUPkrDsGDA==
=mFWy
-----END PGP PUBLIC KEY BLOCK-----
`

const keyWithSubKey = `-----BEGIN PGP PUBLIC KEY BLOCK-----

mI0EWyKwKQEEALwXhKBnyaaNFeK3ljfc/qn9X/QFw+28EUfgZPHjRmHubuXLE2uR
s3ZoSXY2z7Dkv+NyHYMt8p+X8q5fR7JvUjK2XbPyKoiJVnHINll83yl67DaWfKNL
EjNoO0kIfbXfCkZ7EG6DL+iKtuxniGTcnGT47e+HJSqb/STpLMnWwXjBABEBAAG0
I0dvbGFuZyBHb3BoZXIgPG5vLXJlcGx5QGdvbGFuZy5jb20+iM4EEwEKADgWIQQ/
lRafP/p9PytHbwxMvYJsOQdOOAUCWyKwKQIbAwULCQgHAwUVCgkICwUWAgMBAAIe
AQIXgAAKCRBMvYJsOQdOOOsFBAC62mXww8XuqvYLcVOvHkWLT6mhxrQOJXnlfpn7
2uBV9CMhoG/Ycd43NONsJrB95Apr9TDIqWnVszNbqPCuBhZQSGLdbiDKjxnCWBk0
69qv4RNtkpOhYB7jK4s8F5oQZqId6JasT/PmJTH92mhBYhhTQr0GYFuPX2UJdkw9
Sn9C67iNBFsisDUBBAC3A+Yo9lgCnxi/pfskyLrweYif6kIXWLAtLTsM6g/6jt7b
wTrknuCPyTv0QKGXsAEe/cK/Xq3HvX9WfXPGIHc/X56ZIsHQ+RLowbZV/Lhok1IW
FAuQm8axr/by80cRwFnzhfPc/ukkAq2Qyj4hLsGblu6mxeAhzcp8aqmWOO2H9QAR
AQABiLYEKAEKACAWIQQ/lRafP/p9PytHbwxMvYJsOQdOOAUCWyK16gIdAAAKCRBM
vYJsOQdOOB1vA/4u4uLONsE+2GVOyBsHyy7uTdkuxaR9b54A/cz6jT/tzUbeIzgx
22neWhgvIEghnUZd0vEyK9k1wy5vbDlEo6nKzHso32N1QExGr5upRERAxweDxGOj
7luDwNypI7QcifE64lS/JmlnunwRCdRWMKc0Fp+7jtRc5mpwyHN/Suf5RokBagQY
AQoAIBYhBD+VFp8/+n0/K0dvDEy9gmw5B044BQJbIrA1AhsCAL8JEEy9gmw5B044
tCAEGQEKAB0WIQSNdnkaWY6t62iX336UXbGvYdhXJwUCWyKwNQAKCRCUXbGvYdhX
JxJSA/9fCPHP6sUtGF1o3G1a3yvOUDGr1JWcct9U+QpbCt1mZoNopCNDDQAJvDWl
mvDgHfuogmgNJRjOMznvahbF+wpTXmB7LS0SK412gJzl1fFIpK4bgnhu0TwxNsO1
8UkCZWqxRMgcNUn9z6XWONK8dgt5JNvHSHrwF4CxxwjL23AAtK+FA/UUoi3U4kbC
0XnSr1Sl+mrzQi1+H7xyMe7zjqe+gGANtskqexHzwWPUJCPZ5qpIa2l8ghiUim6b
4ymJ+N8/T8Yva1FaPEqfMzzqJr8McYFm0URioXJPvOAlRxdHPteZ0qUopt/Jawxl
Xt6B9h1YpeLoJwjwsvbi98UTRs0jXwoY
=3fWu
-----END PGP PUBLIC KEY BLOCK-----`

const keyWithSubKeyAndBadSelfSigOrder = `-----BEGIN PGP PUBLIC KEY BLOCK-----

mI0EWyLLDQEEAOqIOpJ/ha1OYAGduu9tS3rBz5vyjbNgJO4sFveEM0mgsHQ0X9/L
plonW+d0gRoO1dhJ8QICjDAc6+cna1DE3tEb5m6JtQ30teLZuqrR398Cf6w7NNVz
r3lrlmnH9JaKRuXl7tZciwyovneBfZVCdtsRZjaLI1uMQCz/BToiYe3DABEBAAG0
I0dvbGFuZyBHb3BoZXIgPG5vLXJlcGx5QGdvbGFuZy5jb20+iM4EEwEKADgWIQRZ
sixZOfQcZdW0wUqmgmdsv1O9xgUCWyLLDQIbAwULCQgHAwUVCgkICwUWAgMBAAIe
AQIXgAAKCRCmgmdsv1O9xql2A/4pix98NxjhdsXtazA9agpAKeADf9tG4Za27Gj+
3DCww/E4iP2X35jZimSm/30QRB6j08uGCqd9vXkkJxtOt63y/IpVOtWX6vMWSTUm
k8xKkaYMP0/IzKNJ1qC/qYEUYpwERBKg9Z+k99E2Ql4kRHdxXUHq6OzY79H18Y+s
GdeM/riNBFsiyxsBBAC54Pxg/8ZWaZX1phGdwfe5mek27SOYpC0AxIDCSOdMeQ6G
HPk38pywl1d+S+KmF/F4Tdi+kWro62O4eG2uc/T8JQuRDUhSjX0Qa51gPzJrUOVT
CFyUkiZ/3ZDhtXkgfuso8ua2ChBgR9Ngr4v43tSqa9y6AK7v0qjxD1x+xMrjXQAR
AQABiQFxBBgBCgAmAhsCFiEEWbIsWTn0HGXVtMFKpoJnbL9TvcYFAlsizTIFCQAN
MRcAv7QgBBkBCgAdFiEEJcoVUVJIk5RWj1c/o62jUpRPICQFAlsiyxsACgkQo62j
UpRPICQq5gQApoWIigZxXFoM0uw4uJBS5JFZtirTANvirZV5RhndwHeMN6JttaBS
YnjyA4+n1D+zB2VqliD2QrsX12KJN6rGOehCtEIClQ1Hodo9nC6kMzzAwW1O8bZs
nRJmXV+bsvD4sidLZLjdwOVa3Cxh6pvq4Uur6a7/UYx121hEY0Qx0s8JEKaCZ2y/
U73GGi0D/i20VW8AWYAPACm2zMlzExKTOAV01YTQH/3vW0WLrOse53WcIVZga6es
HuO4So0SOEAvxKMe5HpRIu2dJxTvd99Bo9xk9xJU0AoFrO0vNCRnL+5y68xMlODK
lEw5/kl0jeaTBp6xX0HDQOEVOpPGUwWV4Ij2EnvfNDXaE1vK1kffiQFrBBgBCgAg
AhsCFiEEWbIsWTn0HGXVtMFKpoJnbL9TvcYFAlsi0AYAv7QgBBkBCgAdFiEEJcoV
UVJIk5RWj1c/o62jUpRPICQFAlsiyxsACgkQo62jUpRPICQq5gQApoWIigZxXFoM
0uw4uJBS5JFZtirTANvirZV5RhndwHeMN6JttaBSYnjyA4+n1D+zB2VqliD2QrsX
12KJN6rGOehCtEIClQ1Hodo9nC6kMzzAwW1O8bZsnRJmXV+bsvD4sidLZLjdwOVa
3Cxh6pvq4Uur6a7/UYx121hEY0Qx0s8JEKaCZ2y/U73GRl0EAJokkXmy4zKDHWWi
wvK9gi2gQgRkVnu2AiONxJb5vjeLhM/07BRmH6K1o+w3fOeEQp4FjXj1eQ5fPSM6
Hhwx2CTl9SDnPSBMiKXsEFRkmwQ2AAsQZLmQZvKBkLZYeBiwf+IY621eYDhZfo+G
1dh1WoUCyREZsJQg2YoIpWIcvw+a
=bNRo
-----END PGP PUBLIC KEY BLOCK-----
`

const onlySubkeyNoPrivateKey = `-----BEGIN PGP PRIVATE KEY BLOCK-----
Version: GnuPG v1

lQCVBFggvocBBAC7vBsHn7MKmS6IiiZNTXdciplVgS9cqVd+RTdIAoyNTcsiV1H0
GQ3QtodOPeDlQDNoqinqaobd7R9g3m3hS53Nor7yBZkCWQ5x9v9JxRtoAq0sklh1
I1X2zEqZk2l6YrfBF/64zWrhjnW3j23szkrAIVu0faQXbQ4z56tmZrw11wARAQAB
/gdlAkdOVQG0CUdOVSBEdW1teYi4BBMBAgAiBQJYIL6HAhsDBgsJCAcDAgYVCAIJ
CgsEFgIDAQIeAQIXgAAKCRCd1xxWp1CYAnjGA/9synn6ZXJUKAXQzySgmCZvCIbl
rqBfEpxwLG4Q/lONhm5vthAE0z49I8hj5Gc5e2tLYUtq0o0OCRdCrYHa/efOYWpJ
6RsK99bePOisVzmOABLIgZkcr022kHoMCmkPgv9CUGKP1yqbGl+zzAwQfUjRUmvD
ZIcWLHi2ge4GzPMPi50B2ARYIL6cAQQAxWHnicKejAFcFcF1/3gUSgSH7eiwuBPX
M7vDdgGzlve1o1jbV4tzrjN9jsCl6r0nJPDMfBSzgLr1auNTRG6HpJ4abcOx86ED
Ad+avDcQPZb7z3dPhH/gb2lQejZsHh7bbeOS8WMSzHV3RqCLd8J/xwWPNR5zKn1f
yp4IGfopidMAEQEAAQAD+wQOelnR82+dxyM2IFmZdOB9wSXQeCVOvxSaNMh6Y3lk
UOOkO8Nlic4x0ungQRvjoRs4wBmCuwFK/MII6jKui0B7dn/NDf51i7rGdNGuJXDH
e676By1sEY/NGkc74jr74T+5GWNU64W0vkpfgVmjSAzsUtpmhJMXsc7beBhJdnVl
AgDKCb8hZqj1alcdmLoNvb7ibA3K/V8J462CPD7bMySPBa/uayoFhNxibpoXml2r
oOtHa5izF3b0/9JY97F6rqkdAgD6GdTJ+xmlCoz1Sewoif1I6krq6xoa7gOYpIXo
UL1Afr+LiJeyAnF/M34j/kjIVmPanZJjry0kkjHE5ILjH3uvAf4/6n9np+Th8ujS
YDCIzKwR7639+H+qccOaddCep8Y6KGUMVdD/vTKEx1rMtK+hK/CDkkkxnFslifMJ
kqoqv3WUqCWJAT0EGAECAAkFAlggvpwCGwIAqAkQndccVqdQmAKdIAQZAQIABgUC
WCC+nAAKCRDmGUholQPwvQk+A/9latnSsR5s5/1A9TFki11GzSEnfLbx46FYOdkW
n3YBxZoPQGxNA1vIn8GmouxZInw9CF4jdOJxEdzLlYQJ9YLTLtN5tQEMl/19/bR8
/qLacAZ9IOezYRWxxZsyn6//jfl7A0Y+FV59d4YajKkEfItcIIlgVBSW6T+TNQT3
R+EH5HJ/A/4/AN0CmBhhE2vGzTnVU0VPrE4V64pjn1rufFdclgpixNZCuuqpKpoE
VVHn6mnBf4njKjZrAGPs5kfQ+H4NsM7v3Zz4yV6deu9FZc4O6E+V1WJ38rO8eBix
7G2jko106CC6vtxsCPVIzY7aaG3H5pjRtomw+pX7SzrQ7FUg2PGumg==
=F/T0
-----END PGP PRIVATE KEY BLOCK-----`

const ecdsaPrivateKey = `-----BEGIN PGP PRIVATE KEY BLOCK-----

xaUEX1KsSRMIKoZIzj0DAQcCAwTpYqJsnJiFhKKh+8TulWD+lVmerBFNS+Ii
B+nlG3T0xQQ4Sy5eIjJ0CExIQQzi3EElF/Z2l4F3WC5taFA11NgA/gkDCHSS
PThf1M2K4LN8F1MRcvR+sb7i0nH55ojkwuVB1DE6jqIT9m9i+mX1tzjSAS+6
lPQiweCJvG7xTC7Hs3AzRapf/r1At4TB+v+5G2/CKynNFEJpbGwgPGJpbGxA
aG9tZS5jb20+wncEEBMIAB8FAl9SrEkGCwkHCAMCBBUICgIDFgIBAhkBAhsD
Ah4BAAoJEMpwT3+q3+xqw5UBAMebZN9isEZ1ML+R/jWAAWMwa/knMugrEZ1v
Bl9+ZwM0AQCZdf80/wYY4Nve01qSRFv8OmKswLli3TvDv6FKc4cLz8epBF9S
rEkSCCqGSM49AwEHAgMEAjKnT9b5wY2bf9TpAV3d7OUfPOxKj9c4VzeVzSrH
AtQgo/MuI1cdYVURicV4i76DNjFhQHQFTk7BrC+C2u1yqQMBCAf+CQMIHImA
iYfzQtjgQWSFZYUkCFpbbwhNF0ch+3HNaZkaHCnZRIsWsRnc6FCb6lRQyK9+
Dq59kHlduE5QgY40894jfmP2JdJHU6nBdYrivbEdbMJhBBgTCAAJBQJfUqxJ
AhsMAAoJEMpwT3+q3+xqUI0BAMykhV08kQ4Ip9Qlbss6Jdufv7YrU0Vd5hou
b5TmiPd0APoDBh3qIic+aLLUcAuG3+Gt1P1AbUlmqV61ozn1WfHxfw==
=KLN8
-----END PGP PRIVATE KEY BLOCK-----`

const dsaPrivateKeyWithElGamalSubkey = `-----BEGIN PGP PRIVATE KEY BLOCK-----

lQOBBF9/MLsRCACeaF6BI0jTgDAs86t8/kXPfwlPvR2MCYzB0BCqAdcq1hV/GTYd
oNmJRna/ZJfsI/vf+d8Nv+EYOQkPheFS1MJVBitkAXjQPgm8i1tQWen1FCWZxqGk
/vwZYF4yo8GhZ+Wxi3w09W9Cp9QM/CTmyE1Xe7wpPBGe+oD+me8Zxjyt8JBS4Qx+
gvWbfHxfHnggh4pz7U8QkItlLsBNQEdX4R5+zwRN66g2ZSX/shaa/EkVnihUhD7r
njP9I51ORWucTQD6OvgooaNQZCkQ/Se9TzdakwWKS2XSIFXiY/e2E5ZgKI/pfKDU
iA/KessxddPb7nP/05OIJqg9AoDrD4vmehLzAQD+zsUS3LDU1m9/cG4LMsQbT2VK
Te4HqbGIAle+eu/asQf8DDJMrbZpiJZvADum9j0TJ0oep6VdMbzo9RSDKvlLKT9m
kG63H8oDWnCZm1a+HmGq9YIX+JHWmsLXXsFLeEouLzHO+mZo0X28eji3V2T87hyR
MmUM0wFo4k7jK8uVmkDXv3XwNp2uByWxUKZd7EnWmcEZWqIiexJ7XpCS0Pg3tRaI
zxve0SRe/dxfUPnTk/9KQ9hS6DWroBKquL182zx1Fggh4LIWWE2zq+UYn8BI0E8A
rmIDFJdF8ymFQGRrEy6g79NnkPmkrZWsgMRYY65P6v4zLVmqohJKkpm3/Uxa6QAP
CCoPh/JTOvPeCP2bOJH8z4Z9Py3ouMIjofQW8sXqRgf/RIHbh0KsINHrwwZ4gVIr
MK3RofpaYxw1ztPIWb4cMWoWZHH1Pxh7ggTGSBpAhKXkiWw2Rxat8QF5aA7e962c
bLvVv8dqsPrD/RnVJHag89cbPTzjn7gY9elE8EM8ithV3oQkwHTr4avYlpDZsgNd
hUW3YgRwGo31tdzxoG04AcpV2t+07P8XMPr9hsfWs4rHohXPi38Hseu1Ji+dBoWQ
3+1w/HH3o55s+jy4Ruaz78AIrjbmAJq+6rA2mIcCgrhw3DnzuwQAKeBvSeqn9zfS
ZC812osMBVmkycwelpaIh64WZ0vWL3GvdXDctV2kXM+qVpDTLEny0LuiXxrwCKQL
Ev4HAwK9uQBcreDEEud7pfRb8EYP5lzO2ZA7RaIvje6EWAGBvJGMRT0QQE5SGqc7
Fw5geigBdt+vVyRuNNhg3c2fdn/OBQaYu0J/8AiOogG8EaM8tCFlbGdhbWFsQGRz
YS5jb20gPGVsZ2FtYWxAZHNhLmNvbT6IkAQTEQgAOBYhBI+gnfiHQxB35/Dp0XAQ
aE/rsWC5BQJffzC7AhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEHAQaE/r
sWC5A4EA/0GcJmyPtN+Klc7b9sVT3JgKTRnB/URxOJfYJofP0hZLAQCkqyMO+adV
JvbgDH0zaITQWZSSXPqpgMpCA6juTrDsd50CawRffzC7EAgAxFFFSAAEQzWTgKU5
EBtpxxoPzHqcChawTHRxHxjcELXzmUBS5PzfA1HXSPnNqK/x3Ut5ycC3CsW41Fnt
Gm3706Wu9VFbFZVn55F9lPiplUo61n5pqMvOr1gmuQsdXiTa0t5FRa4TZ2VSiHFw
vdAVSPTUsT4ZxJ1rPyFYRtq1n3pQcvdZowd07r0JnzTMjLLMFYCKhwIowoOC4zqJ
iB8enjwOlpaqBATRm9xpVF7SJkroPF6/B1vdhj7E3c1aJyHlo0PYBAg756sSHWHg
UuLyUQ4TA0hcCVenn/L/aSY2LnbdZB1EBhlYjA7dTCgwIqsQhfQmPkjz6g64A7+Y
HbbrLwADBQgAk14QIEQ+J/VHetpQV/jt2pNsFK1kVK7mXK0spTExaC2yj2sXlHjL
Ie3bO5T/KqmIaBEB5db5fA5xK9cZt79qrQHDKsEqUetUeMUWLBx77zBsus3grIgy
bwDZKseRzQ715pwxquxQlScGoDIBKEh08HpwHkq140eIj3w+MAIfndaZaSCNaxaP
Snky7BQmJ7Wc7qrIwoQP6yrnUqyW2yNi81nJYUhxjChqaFSlwzLs/iNGryBKo0ic
BqVIRjikKHBlwBng6WyrltQo/Vt9GG8w+lqaAVXbJRlaBZJUR+2NKi/YhP3qQse3
v8fi4kns0gh5LK+2C01RvdX4T49QSExuIf4HAwLJqYIGwadA2uem5v7/765ZtFWV
oL0iZ0ueTJDby4wTFDpLVzzDi/uVcB0ZRFrGOp7w6OYcNYTtV8n3xmli2Q5Trw0c
wZVzvg+ABKWiv7faBjMczIFF8y6WZKOIeAQYEQgAIBYhBI+gnfiHQxB35/Dp0XAQ
aE/rsWC5BQJffzC7AhsMAAoJEHAQaE/rsWC5ZmIA/jhS4r4lClbvjuPWt0Yqdn7R
fss2SPMYvMrrDh42aE0OAQD8xn4G6CN8UtW9xihXOY6FpxiJ/sMc2VaneeUd34oa
4g==
=XZm8
-----END PGP PRIVATE KEY BLOCK-----`

// https://tests.sequoia-pgp.org/#Certificate_expiration
// P _ U p
const expiringPrimaryUIDKey = `-----BEGIN PGP PUBLIC KEY BLOCK-----

xsDNBF2lnPIBDAC5cL9PQoQLTMuhjbYvb4Ncuuo0bfmgPRFywX53jPhoFf4Zg6mv
/seOXpgecTdOcVttfzC8ycIKrt3aQTiwOG/ctaR4Bk/t6ayNFfdUNxHWk4WCKzdz
/56fW2O0F23qIRd8UUJp5IIlN4RDdRCtdhVQIAuzvp2oVy/LaS2kxQoKvph/5pQ/
5whqsyroEWDJoSV0yOb25B/iwk/pLUFoyhDG9bj0kIzDxrEqW+7Ba8nocQlecMF3
X5KMN5kp2zraLv9dlBBpWW43XktjcCZgMy20SouraVma8Je/ECwUWYUiAZxLIlMv
9CurEOtxUw6N3RdOtLmYZS9uEnn5y1UkF88o8Nku890uk6BrewFzJyLAx5wRZ4F0
qV/yq36UWQ0JB/AUGhHVPdFf6pl6eaxBwT5GXvbBUibtf8YI2og5RsgTWtXfU7eb
SGXrl5ZMpbA6mbfhd0R8aPxWfmDWiIOhBufhMCvUHh1sApMKVZnvIff9/0Dca3wb
vLIwa3T4CyshfT0AEQEAAc0hQm9iIEJhYmJhZ2UgPGJvYkBvcGVucGdwLmV4YW1w
bGU+wsFcBBMBCgCQBYJhesp/BYkEWQPJBQsJCAcCCRD7/MgqAV5zMEcUAAAAAAAe
ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeEOQlNyTLFkc9I/elp+BpY
495V7KatqtDmsyDr+zDAdwYVCgkICwIEFgIDAQIXgAIbAwIeARYhBNGmbhojsYLJ
mA94jPv8yCoBXnMwAABSCQv/av8hKyynMtXVKFuWOGJw0mR8auDm84WdhMFRZg8t
yTJ1L88+Ny4WUAFeqo2j7DU2yPGrm5rmuvzlEedFYFeOWt+A4adz+oumgRd0nsgG
Lf3QYUWQhLWVlz+H7zubgKqSB2A2RqV65S7mTTVro42nb2Mng6rvGWiqeKG5nrXN
/01p1mIBQGR/KnZSqYLzA2Pw2PiJoSkXT26PDz/kiEMXpjKMR6sicV4bKVlEdUvm
pIImIPBHZq1EsKXEyWtWC41w/pc+FofGE+uSFs2aef1vvEHFkj3BHSK8gRcH3kfR
eFroTET8C2q9V1AOELWm+Ys6PzGzF72URK1MKXlThuL4t4LjvXWGNA78IKW+/RQH
DzK4U0jqSO0mL6qxqVS5Ij6jjL6OTrVEGdtDf5n0vI8tcUTBKtVqYAYk+t2YGT05
ayxALtb7viVKo8f10WEcCuKshn0gdsEFMRZQzJ89uQIY3R3FbsdRCaE6OEaDgKMQ
UTFROyfhthgzRKbRxfcplMUCzsDNBF2lnPIBDADWML9cbGMrp12CtF9b2P6z9TTT
74S8iyBOzaSvdGDQY/sUtZXRg21HWamXnn9sSXvIDEINOQ6A9QxdxoqWdCHrOuW3
ofneYXoG+zeKc4dC86wa1TR2q9vW+RMXSO4uImA+Uzula/6k1DogDf28qhCxMwG/
i/m9g1c/0aApuDyKdQ1PXsHHNlgd/Dn6rrd5y2AObaifV7wIhEJnvqgFXDN2RXGj
LeCOHV4Q2WTYPg/S4k1nMXVDwZXrvIsA0YwIMgIT86Rafp1qKlgPNbiIlC1g9RY/
iFaGN2b4Ir6GDohBQSfZW2+LXoPZuVE/wGlQ01rh827KVZW4lXvqsge+wtnWlszc
selGATyzqOK9LdHPdZGzROZYI2e8c+paLNDdVPL6vdRBUnkCaEkOtl1mr2JpQi5n
TU+gTX4IeInC7E+1a9UDF/Y85ybUz8XV8rUnR76UqVC7KidNepdHbZjjXCt8/Zo+
Tec9JNbYNQB/e9ExmDntmlHEsSEQzFwzj8sxH48AEQEAAcLA9gQYAQoAIBYhBNGm
bhojsYLJmA94jPv8yCoBXnMwBQJdpZzyAhsMAAoJEPv8yCoBXnMw6f8L/26C34dk
jBffTzMj5Bdzm8MtF67OYneJ4TQMw7+41IL4rVcSKhIhk/3Ud5knaRtP2ef1+5F6
6h9/RPQOJ5+tvBwhBAcUWSupKnUrdVaZQanYmtSxcVV2PL9+QEiNN3tzluhaWO//
rACxJ+K/ZXQlIzwQVTpNhfGzAaMVV9zpf3u0k14itcv6alKY8+rLZvO1wIIeRZLm
U0tZDD5HtWDvUV7rIFI1WuoLb+KZgbYn3OWjCPHVdTrdZ2CqnZbG3SXw6awH9bzR
LV9EXkbhIMez0deCVdeo+wFFklh8/5VK2b0vk/+wqMJxfpa1lHvJLobzOP9fvrsw
sr92MA2+k901WeISR7qEzcI0Fdg8AyFAExaEK6VyjP7SXGLwvfisw34OxuZr3qmx
1Sufu4toH3XrB7QJN8XyqqbsGxUCBqWif9RSK4xjzRTe56iPeiSJJOIciMP9i2ld
I+KgLycyeDvGoBj0HCLO3gVaBe4ubVrj5KjhX2PVNEJd3XZRzaXZE2aAMQ==
=AmgT
-----END PGP PUBLIC KEY BLOCK-----`
  07070100000219000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/packet 0707010000021A000081A4000000000000000000000001645E367C00000581000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/aead_config.go  // Copyright (C) 2019 ProtonTech AG

package packet

import "math/bits"

// AEADConfig collects a number of AEAD parameters along with sensible defaults.
// A nil AEADConfig is valid and results in all default values.
type AEADConfig struct {
	// The AEAD mode of operation.
	DefaultMode AEADMode
	// Amount of octets in each chunk of data
	ChunkSize uint64
}

// Mode returns the AEAD mode of operation.
func (conf *AEADConfig) Mode() AEADMode {
	if conf == nil || conf.DefaultMode == 0 {
		return AEADModeEAX
	}
	mode := conf.DefaultMode
	if mode != AEADModeEAX && mode != AEADModeOCB &&
		mode != AEADModeExperimentalGCM {
		panic("AEAD mode unsupported")
	}
	return mode
}

// ChunkSizeByte returns the byte indicating the chunk size. The effective
// chunk size is computed with the formula uint64(1) << (chunkSizeByte + 6)
func (conf *AEADConfig) ChunkSizeByte() byte {
	if conf == nil || conf.ChunkSize == 0 {
		return 12 // 1 << (12 + 6) == 262144 bytes
	}

	chunkSize := conf.ChunkSize
	exponent := bits.Len64(chunkSize) - 1
	switch {
	case exponent < 6:
		exponent = 6
	case exponent > 27:
		exponent = 27
	}

	return byte(exponent - 6)
}

// decodeAEADChunkSize returns the effective chunk size. In 32-bit systems, the
// maximum returned value is 1 << 30.
func decodeAEADChunkSize(c byte) int {
	size := uint64(1 << (c + 6))
	if size != uint64(int(size)) {
		return 1 << 30
	}
	return int(size)
}
   0707010000021B000081A4000000000000000000000001645E367C00002D4C000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/aead_encrypted.go   // Copyright (C) 2019 ProtonTech AG

package packet

import (
	"bytes"
	"crypto/cipher"
	"crypto/rand"
	"encoding/binary"
	"io"

	"github.com/ProtonMail/go-crypto/openpgp/errors"
	"github.com/ProtonMail/go-crypto/openpgp/internal/algorithm"
)

// AEADEncrypted represents an AEAD Encrypted Packet (tag 20, RFC4880bis-5.16).
type AEADEncrypted struct {
	cipher        CipherFunction
	mode          AEADMode
	chunkSizeByte byte
	Contents      io.Reader // Encrypted chunks and tags
	initialNonce  []byte    // Referred to as IV in RFC4880-bis
}

// Only currently defined version
const aeadEncryptedVersion = 1

// An AEAD opener/sealer, its configuration, and data for en/decryption.
type aeadCrypter struct {
	aead           cipher.AEAD
	chunkSize      int
	initialNonce   []byte
	associatedData []byte       // Chunk-independent associated data
	chunkIndex     []byte       // Chunk counter
	bytesProcessed int          // Amount of plaintext bytes encrypted/decrypted
	buffer         bytes.Buffer // Buffered bytes accross chunks
}

// aeadEncrypter encrypts and writes bytes. It encrypts when necessary according
// to the AEAD block size, and buffers the extra encrypted bytes for next write.
type aeadEncrypter struct {
	aeadCrypter                // Embedded plaintext sealer
	writer      io.WriteCloser // 'writer' is a partialLengthWriter
}

// aeadDecrypter reads and decrypts bytes. It buffers extra decrypted bytes when
// necessary, similar to aeadEncrypter.
type aeadDecrypter struct {
	aeadCrypter           // Embedded ciphertext opener
	reader      io.Reader // 'reader' is a partialLengthReader
	peekedBytes []byte    // Used to detect last chunk
	eof         bool
}

func (ae *AEADEncrypted) parse(buf io.Reader) error {
	headerData := make([]byte, 4)
	if n, err := io.ReadFull(buf, headerData); n < 4 {
		return errors.AEADError("could not read aead header:" + err.Error())
	}
	// Read initial nonce
	mode := AEADMode(headerData[2])
	nonceLen := mode.NonceLength()
	if nonceLen == 0 {
		return errors.AEADError("unknown mode")
	}
	initialNonce := make([]byte, nonceLen)
	if n, err := io.ReadFull(buf, initialNonce); n < nonceLen {
		return errors.AEADError("could not read aead nonce:" + err.Error())
	}
	ae.Contents = buf
	ae.initialNonce = initialNonce
	c := headerData[1]
	if _, ok := algorithm.CipherById[c]; !ok {
		return errors.UnsupportedError("unknown cipher: " + string(c))
	}
	ae.cipher = CipherFunction(c)
	ae.mode = mode
	ae.chunkSizeByte = byte(headerData[3])
	return nil
}

// Decrypt returns a io.ReadCloser from which decrypted bytes can be read, or
// an error.
func (ae *AEADEncrypted) Decrypt(ciph CipherFunction, key []byte) (io.ReadCloser, error) {
	return ae.decrypt(key)
}

// decrypt prepares an aeadCrypter and returns a ReadCloser from which
// decrypted bytes can be read (see aeadDecrypter.Read()).
func (ae *AEADEncrypted) decrypt(key []byte) (io.ReadCloser, error) {
	blockCipher := ae.cipher.new(key)
	aead := ae.mode.new(blockCipher)
	// Carry the first tagLen bytes
	tagLen := ae.mode.TagLength()
	peekedBytes := make([]byte, tagLen)
	n, err := io.ReadFull(ae.Contents, peekedBytes)
	if n < tagLen || (err != nil && err != io.EOF) {
		return nil, errors.AEADError("Not enough data to decrypt:" + err.Error())
	}
	chunkSize := decodeAEADChunkSize(ae.chunkSizeByte)
	return &aeadDecrypter{
		aeadCrypter: aeadCrypter{
			aead:           aead,
			chunkSize:      chunkSize,
			initialNonce:   ae.initialNonce,
			associatedData: ae.associatedData(),
			chunkIndex:     make([]byte, 8),
		},
		reader:      ae.Contents,
		peekedBytes: peekedBytes}, nil
}

// Read decrypts bytes and reads them into dst. It decrypts when necessary and
// buffers extra decrypted bytes. It returns the number of bytes copied into dst
// and an error.
func (ar *aeadDecrypter) Read(dst []byte) (n int, err error) {
	// Return buffered plaintext bytes from previous calls
	if ar.buffer.Len() > 0 {
		return ar.buffer.Read(dst)
	}

	// Return EOF if we've previously validated the final tag
	if ar.eof {
		return 0, io.EOF
	}

	// Read a chunk
	tagLen := ar.aead.Overhead()
	cipherChunkBuf := new(bytes.Buffer)
	_, errRead := io.CopyN(cipherChunkBuf, ar.reader, int64(ar.chunkSize + tagLen))
	cipherChunk := cipherChunkBuf.Bytes()
	if errRead != nil && errRead != io.EOF {
		return 0, errRead
	}
	decrypted, errChunk := ar.openChunk(cipherChunk)
	if errChunk != nil {
		return 0, errChunk
	}

	// Return decrypted bytes, buffering if necessary
	if len(dst) < len(decrypted) {
		n = copy(dst, decrypted[:len(dst)])
		ar.buffer.Write(decrypted[len(dst):])
	} else {
		n = copy(dst, decrypted)
	}

	// Check final authentication tag
	if errRead == io.EOF {
		errChunk := ar.validateFinalTag(ar.peekedBytes)
		if errChunk != nil {
			return n, errChunk
		}
		ar.eof = true // Mark EOF for when we've returned all buffered data
	}
	return
}

// Close is noOp. The final authentication tag of the stream was already
// checked in the last Read call. In the future, this function could be used to
// wipe the reader and peeked, decrypted bytes, if necessary.
func (ar *aeadDecrypter) Close() (err error) {
	return nil
}

// SerializeAEADEncrypted initializes the aeadCrypter and returns a writer.
// This writer encrypts and writes bytes (see aeadEncrypter.Write()).
func SerializeAEADEncrypted(w io.Writer, key []byte, cipher CipherFunction, mode AEADMode, config *Config) (io.WriteCloser, error) {
	writeCloser := noOpCloser{w}
	writer, err := serializeStreamHeader(writeCloser, packetTypeAEADEncrypted)
	if err != nil {
		return nil, err
	}

	// Data for en/decryption: tag, version, cipher, aead mode, chunk size
	aeadConf := config.AEAD()
	prefix := []byte{
		0xD4,
		aeadEncryptedVersion,
		byte(config.Cipher()),
		byte(aeadConf.Mode()),
		aeadConf.ChunkSizeByte(),
	}
	n, err := writer.Write(prefix[1:])
	if err != nil || n < 4 {
		return nil, errors.AEADError("could not write AEAD headers")
	}
	// Sample nonce
	nonceLen := aeadConf.Mode().NonceLength()
	nonce := make([]byte, nonceLen)
	n, err = rand.Read(nonce)
	if err != nil {
		panic("Could not sample random nonce")
	}
	_, err = writer.Write(nonce)
	if err != nil {
		return nil, err
	}
	blockCipher := CipherFunction(config.Cipher()).new(key)
	alg := AEADMode(aeadConf.Mode()).new(blockCipher)

	chunkSize := decodeAEADChunkSize(aeadConf.ChunkSizeByte())
	return &aeadEncrypter{
		aeadCrypter: aeadCrypter{
			aead:           alg,
			chunkSize:      chunkSize,
			associatedData: prefix,
			chunkIndex:     make([]byte, 8),
			initialNonce:   nonce,
		},
		writer: writer}, nil
}

// Write encrypts and writes bytes. It encrypts when necessary and buffers extra
// plaintext bytes for next call. When the stream is finished, Close() MUST be
// called to append the final tag.
func (aw *aeadEncrypter) Write(plaintextBytes []byte) (n int, err error) {
	// Append plaintextBytes to existing buffered bytes
	n, err = aw.buffer.Write(plaintextBytes)
	if err != nil {
		return n, err
	}
	// Encrypt and write chunks
	for aw.buffer.Len() >= aw.chunkSize {
		plainChunk := aw.buffer.Next(aw.chunkSize)
		encryptedChunk, err := aw.sealChunk(plainChunk)
		if err != nil {
			return n, err
		}
		_, err = aw.writer.Write(encryptedChunk)
		if err != nil {
			return n, err
		}
	}
	return
}

// Close encrypts and writes the remaining buffered plaintext if any, appends
// the final authentication tag, and closes the embedded writer. This function
// MUST be called at the end of a stream.
func (aw *aeadEncrypter) Close() (err error) {
	// Encrypt and write a chunk if there's buffered data left, or if we haven't
	// written any chunks yet.
	if aw.buffer.Len() > 0 || aw.bytesProcessed == 0 {
		plainChunk := aw.buffer.Bytes()
		lastEncryptedChunk, err := aw.sealChunk(plainChunk)
		if err != nil {
			return err
		}
		_, err = aw.writer.Write(lastEncryptedChunk)
		if err != nil {
			return err
		}
	}
	// Compute final tag (associated data: packet tag, version, cipher, aead,
	// chunk size, index, total number of encrypted octets).
	adata := append(aw.associatedData[:], aw.chunkIndex[:]...)
	adata = append(adata, make([]byte, 8)...)
	binary.BigEndian.PutUint64(adata[13:], uint64(aw.bytesProcessed))
	nonce := aw.computeNextNonce()
	finalTag := aw.aead.Seal(nil, nonce, nil, adata)
	_, err = aw.writer.Write(finalTag)
	if err != nil {
		return err
	}
	return aw.writer.Close()
}

// sealChunk Encrypts and authenticates the given chunk.
func (aw *aeadEncrypter) sealChunk(data []byte) ([]byte, error) {
	if len(data) > aw.chunkSize {
		return nil, errors.AEADError("chunk exceeds maximum length")
	}
	if aw.associatedData == nil {
		return nil, errors.AEADError("can't seal without headers")
	}
	adata := append(aw.associatedData, aw.chunkIndex...)
	nonce := aw.computeNextNonce()
	encrypted := aw.aead.Seal(nil, nonce, data, adata)
	aw.bytesProcessed += len(data)
	if err := aw.aeadCrypter.incrementIndex(); err != nil {
		return nil, err
	}
	return encrypted, nil
}

// openChunk decrypts and checks integrity of an encrypted chunk, returning
// the underlying plaintext and an error. It access peeked bytes from next
// chunk, to identify the last chunk and decrypt/validate accordingly.
func (ar *aeadDecrypter) openChunk(data []byte) ([]byte, error) {
	tagLen := ar.aead.Overhead()
	// Restore carried bytes from last call
	chunkExtra := append(ar.peekedBytes, data...)
	// 'chunk' contains encrypted bytes, followed by an authentication tag.
	chunk := chunkExtra[:len(chunkExtra)-tagLen]
	ar.peekedBytes = chunkExtra[len(chunkExtra)-tagLen:]
	adata := append(ar.associatedData, ar.chunkIndex...)
	nonce := ar.computeNextNonce()
	plainChunk, err := ar.aead.Open(nil, nonce, chunk, adata)
	if err != nil {
		return nil, err
	}
	ar.bytesProcessed += len(plainChunk)
	if err = ar.aeadCrypter.incrementIndex(); err != nil {
		return nil, err
	}
	return plainChunk, nil
}

// Checks the summary tag. It takes into account the total decrypted bytes into
// the associated data. It returns an error, or nil if the tag is valid.
func (ar *aeadDecrypter) validateFinalTag(tag []byte) error {
	// Associated: tag, version, cipher, aead, chunk size, index, and octets
	amountBytes := make([]byte, 8)
	binary.BigEndian.PutUint64(amountBytes, uint64(ar.bytesProcessed))
	adata := append(ar.associatedData, ar.chunkIndex...)
	adata = append(adata, amountBytes...)
	nonce := ar.computeNextNonce()
	_, err := ar.aead.Open(nil, nonce, tag, adata)
	if err != nil {
		return err
	}
	return nil
}

// Associated data for chunks: tag, version, cipher, mode, chunk size byte
func (ae *AEADEncrypted) associatedData() []byte {
	return []byte{
		0xD4,
		aeadEncryptedVersion,
		byte(ae.cipher),
		byte(ae.mode),
		ae.chunkSizeByte}
}

// computeNonce takes the incremental index and computes an eXclusive OR with
// the least significant 8 bytes of the receivers' initial nonce (see sec.
// 5.16.1 and 5.16.2). It returns the resulting nonce.
func (wo *aeadCrypter) computeNextNonce() (nonce []byte) {
	nonce = make([]byte, len(wo.initialNonce))
	copy(nonce, wo.initialNonce)
	offset := len(wo.initialNonce) - 8
	for i := 0; i < 8; i++ {
		nonce[i+offset] ^= wo.chunkIndex[i]
	}
	return
}

// incrementIndex perfoms an integer increment by 1 of the integer represented by the
// slice, modifying it accordingly.
func (wo *aeadCrypter) incrementIndex() error {
	index := wo.chunkIndex
	if len(index) == 0 {
		return errors.AEADError("Index has length 0")
	}
	for i := len(index) - 1; i >= 0; i-- {
		if index[i] < 255 {
			index[i]++
			return nil
		}
		index[i] = 0
	}
	return errors.AEADError("cannot further increment index")
}
0707010000021C000081A4000000000000000000000001645E367C00000CE5000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/compressed.go   // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package packet

import (
	"compress/bzip2"
	"compress/flate"
	"compress/zlib"
	"github.com/ProtonMail/go-crypto/openpgp/errors"
	"io"
	"strconv"
)

// Compressed represents a compressed OpenPGP packet. The decompressed contents
// will contain more OpenPGP packets. See RFC 4880, section 5.6.
type Compressed struct {
	Body io.Reader
}

const (
	NoCompression      = flate.NoCompression
	BestSpeed          = flate.BestSpeed
	BestCompression    = flate.BestCompression
	DefaultCompression = flate.DefaultCompression
)

// CompressionConfig contains compressor configuration settings.
type CompressionConfig struct {
	// Level is the compression level to use. It must be set to
	// between -1 and 9, with -1 causing the compressor to use the
	// default compression level, 0 causing the compressor to use
	// no compression and 1 to 9 representing increasing (better,
	// slower) compression levels. If Level is less than -1 or
	// more then 9, a non-nil error will be returned during
	// encryption. See the constants above for convenient common
	// settings for Level.
	Level int
}

func (c *Compressed) parse(r io.Reader) error {
	var buf [1]byte
	_, err := readFull(r, buf[:])
	if err != nil {
		return err
	}

	switch buf[0] {
	case 1:
		c.Body = flate.NewReader(r)
	case 2:
		c.Body, err = zlib.NewReader(r)
	case 3:
		c.Body = bzip2.NewReader(r)
	default:
		err = errors.UnsupportedError("unknown compression algorithm: " + strconv.Itoa(int(buf[0])))
	}

	return err
}

// compressedWriterCloser represents the serialized compression stream
// header and the compressor. Its Close() method ensures that both the
// compressor and serialized stream header are closed. Its Write()
// method writes to the compressor.
type compressedWriteCloser struct {
	sh io.Closer      // Stream Header
	c  io.WriteCloser // Compressor
}

func (cwc compressedWriteCloser) Write(p []byte) (int, error) {
	return cwc.c.Write(p)
}

func (cwc compressedWriteCloser) Close() (err error) {
	err = cwc.c.Close()
	if err != nil {
		return err
	}

	return cwc.sh.Close()
}

// SerializeCompressed serializes a compressed data packet to w and
// returns a WriteCloser to which the literal data packets themselves
// can be written and which MUST be closed on completion. If cc is
// nil, sensible defaults will be used to configure the compression
// algorithm.
func SerializeCompressed(w io.WriteCloser, algo CompressionAlgo, cc *CompressionConfig) (literaldata io.WriteCloser, err error) {
	compressed, err := serializeStreamHeader(w, packetTypeCompressed)
	if err != nil {
		return
	}

	_, err = compressed.Write([]byte{uint8(algo)})
	if err != nil {
		return
	}

	level := DefaultCompression
	if cc != nil {
		level = cc.Level
	}

	var compressor io.WriteCloser
	switch algo {
	case CompressionZIP:
		compressor, err = flate.NewWriter(compressed, level)
	case CompressionZLIB:
		compressor, err = zlib.NewWriterLevel(compressed, level)
	default:
		s := strconv.Itoa(int(algo))
		err = errors.UnsupportedError("Unsupported compression algorithm: " + s)
	}
	if err != nil {
		return
	}

	literaldata = compressedWriteCloser{compressed, compressor}

	return
}
   0707010000021D000081A4000000000000000000000001645E367C000014F9000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/config.go   // Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package packet

import (
	"crypto"
	"crypto/rand"
	"io"
	"math/big"
	"time"
)

// Config collects a number of parameters along with sensible defaults.
// A nil *Config is valid and results in all default values.
type Config struct {
	// Rand provides the source of entropy.
	// If nil, the crypto/rand Reader is used.
	Rand io.Reader
	// DefaultHash is the default hash function to be used.
	// If zero, SHA-256 is used.
	DefaultHash crypto.Hash
	// DefaultCipher is the cipher to be used.
	// If zero, AES-128 is used.
	DefaultCipher CipherFunction
	// Time returns the current time as the number of seconds since the
	// epoch. If Time is nil, time.Now is used.
	Time func() time.Time
	// DefaultCompressionAlgo is the compression algorithm to be
	// applied to the plaintext before encryption. If zero, no
	// compression is done.
	DefaultCompressionAlgo CompressionAlgo
	// CompressionConfig configures the compression settings.
	CompressionConfig *CompressionConfig
	// S2KCount is only used for symmetric encryption. It
	// determines the strength of the passphrase stretching when
	// the said passphrase is hashed to produce a key. S2KCount
	// should be between 1024 and 65011712, inclusive. If Config
	// is nil or S2KCount is 0, the value 65536 used. Not all
	// values in the above range can be represented. S2KCount will
	// be rounded up to the next representable value if it cannot
	// be encoded exactly. When set, it is strongly encrouraged to
	// use a value that is at least 65536. See RFC 4880 Section
	// 3.7.1.3.
	S2KCount int
	// RSABits is the number of bits in new RSA keys made with NewEntity.
	// If zero, then 2048 bit keys are created.
	RSABits int
	// The public key algorithm to use - will always create a signing primary
	// key and encryption subkey.
	Algorithm PublicKeyAlgorithm
	// Some known primes that are optionally prepopulated by the caller
	RSAPrimes []*big.Int
	// AEADConfig configures the use of the new AEAD Encrypted Data Packet,
	// defined in the draft of the next version of the OpenPGP specification.
	// If a non-nil AEADConfig is passed, usage of this packet is enabled. By
	// default, it is disabled. See the documentation of AEADConfig for more
	// configuration options related to AEAD.
	// **Note: using this option may break compatibility with other OpenPGP
	// implementations, as well as future versions of this library.**
	AEADConfig *AEADConfig
	// V5Keys configures version 5 key generation. If false, this package still
	// supports version 5 keys, but produces version 4 keys.
	V5Keys bool
	// "The validity period of the key.  This is the number of seconds after
	// the key creation time that the key expires.  If this is not present
	// or has a value of zero, the key never expires.  This is found only on
	// a self-signature.""
	// https://tools.ietf.org/html/rfc4880#section-5.2.3.6
	KeyLifetimeSecs uint32
	// "The validity period of the signature.  This is the number of seconds
	// after the signature creation time that the signature expires.  If
	// this is not present or has a value of zero, it never expires."
	// https://tools.ietf.org/html/rfc4880#section-5.2.3.10
	SigLifetimeSecs uint32
	// SigningKeyId is used to specify the signing key to use (by Key ID).
	// By default, the signing key is selected automatically, preferring
	// signing subkeys if available.
	SigningKeyId uint64
	// SigningIdentity is used to specify a user ID (packet Signer's User ID, type 28)
	// when producing a generic certification signature onto an existing user ID.
	// The identity must be present in the signer Entity.
	SigningIdentity string
}

func (c *Config) Random() io.Reader {
	if c == nil || c.Rand == nil {
		return rand.Reader
	}
	return c.Rand
}

func (c *Config) Hash() crypto.Hash {
	if c == nil || uint(c.DefaultHash) == 0 {
		return crypto.SHA256
	}
	return c.DefaultHash
}

func (c *Config) Cipher() CipherFunction {
	if c == nil || uint8(c.DefaultCipher) == 0 {
		return CipherAES128
	}
	return c.DefaultCipher
}

func (c *Config) Now() time.Time {
	if c == nil || c.Time == nil {
		return time.Now()
	}
	return c.Time()
}

// KeyLifetime returns the validity period of the key.
func (c *Config) KeyLifetime() uint32 {
	if c == nil {
		return 0
	}
	return c.KeyLifetimeSecs
}

// SigLifetime returns the validity period of the signature.
func (c *Config) SigLifetime() uint32 {
	if c == nil {
		return 0
	}
	return c.SigLifetimeSecs
}

func (c *Config) Compression() CompressionAlgo {
	if c == nil {
		return CompressionNone
	}
	return c.DefaultCompressionAlgo
}

func (c *Config) PasswordHashIterations() int {
	if c == nil || c.S2KCount == 0 {
		return 0
	}
	return c.S2KCount
}

func (c *Config) RSAModulusBits() int {
	if c == nil || c.RSABits == 0 {
		return 2048
	}
	return c.RSABits
}

func (c *Config) PublicKeyAlgorithm() PublicKeyAlgorithm {
	if c == nil || c.Algorithm == 0 {
		return PubKeyAlgoRSA
	}
	return c.Algorithm
}

func (c *Config) AEAD() *AEADConfig {
	if c == nil {
		return nil
	}
	return c.AEADConfig
}

func (c *Config) SigningKey() uint64 {
	if c == nil {
		return 0
	}
	return c.SigningKeyId
}

func (c *Config) SigningUserId() string {
	if c == nil {
		return ""
	}
	return c.SigningIdentity
}
   0707010000021E000081A4000000000000000000000001645E367C00002349000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/encrypted_key.go    // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package packet

import (
	"crypto"
	"crypto/rsa"
	"encoding/binary"
	"io"
	"math/big"
	"strconv"

	"github.com/ProtonMail/go-crypto/openpgp/ecdh"
	"github.com/ProtonMail/go-crypto/openpgp/elgamal"
	"github.com/ProtonMail/go-crypto/openpgp/errors"
	"github.com/ProtonMail/go-crypto/openpgp/internal/encoding"
)

const encryptedKeyVersion = 3

// EncryptedKey represents a public-key encrypted session key. See RFC 4880,
// section 5.1.
type EncryptedKey struct {
	KeyId      uint64
	Algo       PublicKeyAlgorithm
	CipherFunc CipherFunction // only valid after a successful Decrypt
	Key        []byte         // only valid after a successful Decrypt

	encryptedMPI1, encryptedMPI2 encoding.Field
}

func (e *EncryptedKey) parse(r io.Reader) (err error) {
	var buf [10]byte
	_, err = readFull(r, buf[:])
	if err != nil {
		return
	}
	if buf[0] != encryptedKeyVersion {
		return errors.UnsupportedError("unknown EncryptedKey version " + strconv.Itoa(int(buf[0])))
	}
	e.KeyId = binary.BigEndian.Uint64(buf[1:9])
	e.Algo = PublicKeyAlgorithm(buf[9])
	switch e.Algo {
	case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly:
		e.encryptedMPI1 = new(encoding.MPI)
		if _, err = e.encryptedMPI1.ReadFrom(r); err != nil {
			return
		}
	case PubKeyAlgoElGamal:
		e.encryptedMPI1 = new(encoding.MPI)
		if _, err = e.encryptedMPI1.ReadFrom(r); err != nil {
			return
		}

		e.encryptedMPI2 = new(encoding.MPI)
		if _, err = e.encryptedMPI2.ReadFrom(r); err != nil {
			return
		}
	case PubKeyAlgoECDH:
		e.encryptedMPI1 = new(encoding.MPI)
		if _, err = e.encryptedMPI1.ReadFrom(r); err != nil {
			return
		}

		e.encryptedMPI2 = new(encoding.OID)
		if _, err = e.encryptedMPI2.ReadFrom(r); err != nil {
			return
		}
	}
	_, err = consumeAll(r)
	return
}

func checksumKeyMaterial(key []byte) uint16 {
	var checksum uint16
	for _, v := range key {
		checksum += uint16(v)
	}
	return checksum
}

// Decrypt decrypts an encrypted session key with the given private key. The
// private key must have been decrypted first.
// If config is nil, sensible defaults will be used.
func (e *EncryptedKey) Decrypt(priv *PrivateKey, config *Config) error {
	if e.KeyId != 0 && e.KeyId != priv.KeyId {
		return errors.InvalidArgumentError("cannot decrypt encrypted session key for key id " + strconv.FormatUint(e.KeyId, 16) + " with private key id " + strconv.FormatUint(priv.KeyId, 16))
	}
	if e.Algo != priv.PubKeyAlgo {
		return errors.InvalidArgumentError("cannot decrypt encrypted session key of type " + strconv.Itoa(int(e.Algo)) + " with private key of type " + strconv.Itoa(int(priv.PubKeyAlgo)))
	}
	if priv.Dummy() {
		return errors.ErrDummyPrivateKey("dummy key found")
	}

	var err error
	var b []byte

	// TODO(agl): use session key decryption routines here to avoid
	// padding oracle attacks.
	switch priv.PubKeyAlgo {
	case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly:
		// Supports both *rsa.PrivateKey and crypto.Decrypter
		k := priv.PrivateKey.(crypto.Decrypter)
		b, err = k.Decrypt(config.Random(), padToKeySize(k.Public().(*rsa.PublicKey), e.encryptedMPI1.Bytes()), nil)
	case PubKeyAlgoElGamal:
		c1 := new(big.Int).SetBytes(e.encryptedMPI1.Bytes())
		c2 := new(big.Int).SetBytes(e.encryptedMPI2.Bytes())
		b, err = elgamal.Decrypt(priv.PrivateKey.(*elgamal.PrivateKey), c1, c2)
	case PubKeyAlgoECDH:
		vsG := e.encryptedMPI1.Bytes()
		m := e.encryptedMPI2.Bytes()
		oid := priv.PublicKey.oid.EncodedBytes()
		b, err = ecdh.Decrypt(priv.PrivateKey.(*ecdh.PrivateKey), vsG, m, oid, priv.PublicKey.Fingerprint[:])
	default:
		err = errors.InvalidArgumentError("cannot decrypt encrypted session key with private key of type " + strconv.Itoa(int(priv.PubKeyAlgo)))
	}

	if err != nil {
		return err
	}

	e.CipherFunc = CipherFunction(b[0])
	e.Key = b[1 : len(b)-2]
	expectedChecksum := uint16(b[len(b)-2])<<8 | uint16(b[len(b)-1])
	checksum := checksumKeyMaterial(e.Key)
	if checksum != expectedChecksum {
		return errors.StructuralError("EncryptedKey checksum incorrect")
	}

	return nil
}

// Serialize writes the encrypted key packet, e, to w.
func (e *EncryptedKey) Serialize(w io.Writer) error {
	var mpiLen int
	switch e.Algo {
	case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly:
		mpiLen = int(e.encryptedMPI1.EncodedLength())
	case PubKeyAlgoElGamal:
		mpiLen = int(e.encryptedMPI1.EncodedLength()) + int(e.encryptedMPI2.EncodedLength())
	case PubKeyAlgoECDH:
		mpiLen = int(e.encryptedMPI1.EncodedLength()) + int(e.encryptedMPI2.EncodedLength())
	default:
		return errors.InvalidArgumentError("don't know how to serialize encrypted key type " + strconv.Itoa(int(e.Algo)))
	}

	err := serializeHeader(w, packetTypeEncryptedKey, 1 /* version */ +8 /* key id */ +1 /* algo */ +mpiLen)
	if err != nil {
		return err
	}

	w.Write([]byte{encryptedKeyVersion})
	binary.Write(w, binary.BigEndian, e.KeyId)
	w.Write([]byte{byte(e.Algo)})

	switch e.Algo {
	case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly:
		_, err := w.Write(e.encryptedMPI1.EncodedBytes())
		return err
	case PubKeyAlgoElGamal:
		if _, err := w.Write(e.encryptedMPI1.EncodedBytes()); err != nil {
			return err
		}
		_, err := w.Write(e.encryptedMPI2.EncodedBytes())
		return err
	case PubKeyAlgoECDH:
		if _, err := w.Write(e.encryptedMPI1.EncodedBytes()); err != nil {
			return err
		}
		_, err := w.Write(e.encryptedMPI2.EncodedBytes())
		return err
	default:
		panic("internal error")
	}
}

// SerializeEncryptedKey serializes an encrypted key packet to w that contains
// key, encrypted to pub.
// If config is nil, sensible defaults will be used.
func SerializeEncryptedKey(w io.Writer, pub *PublicKey, cipherFunc CipherFunction, key []byte, config *Config) error {
	var buf [10]byte
	buf[0] = encryptedKeyVersion
	binary.BigEndian.PutUint64(buf[1:9], pub.KeyId)
	buf[9] = byte(pub.PubKeyAlgo)

	keyBlock := make([]byte, 1 /* cipher type */ +len(key)+2 /* checksum */)
	keyBlock[0] = byte(cipherFunc)
	copy(keyBlock[1:], key)
	checksum := checksumKeyMaterial(key)
	keyBlock[1+len(key)] = byte(checksum >> 8)
	keyBlock[1+len(key)+1] = byte(checksum)

	switch pub.PubKeyAlgo {
	case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly:
		return serializeEncryptedKeyRSA(w, config.Random(), buf, pub.PublicKey.(*rsa.PublicKey), keyBlock)
	case PubKeyAlgoElGamal:
		return serializeEncryptedKeyElGamal(w, config.Random(), buf, pub.PublicKey.(*elgamal.PublicKey), keyBlock)
	case PubKeyAlgoECDH:
		return serializeEncryptedKeyECDH(w, config.Random(), buf, pub.PublicKey.(*ecdh.PublicKey), keyBlock, pub.oid, pub.Fingerprint)
	case PubKeyAlgoDSA, PubKeyAlgoRSASignOnly:
		return errors.InvalidArgumentError("cannot encrypt to public key of type " + strconv.Itoa(int(pub.PubKeyAlgo)))
	}

	return errors.UnsupportedError("encrypting a key to public key of type " + strconv.Itoa(int(pub.PubKeyAlgo)))
}

func serializeEncryptedKeyRSA(w io.Writer, rand io.Reader, header [10]byte, pub *rsa.PublicKey, keyBlock []byte) error {
	cipherText, err := rsa.EncryptPKCS1v15(rand, pub, keyBlock)
	if err != nil {
		return errors.InvalidArgumentError("RSA encryption failed: " + err.Error())
	}

	cipherMPI := encoding.NewMPI(cipherText)
	packetLen := 10 /* header length */ + int(cipherMPI.EncodedLength())

	err = serializeHeader(w, packetTypeEncryptedKey, packetLen)
	if err != nil {
		return err
	}
	_, err = w.Write(header[:])
	if err != nil {
		return err
	}
	_, err = w.Write(cipherMPI.EncodedBytes())
	return err
}

func serializeEncryptedKeyElGamal(w io.Writer, rand io.Reader, header [10]byte, pub *elgamal.PublicKey, keyBlock []byte) error {
	c1, c2, err := elgamal.Encrypt(rand, pub, keyBlock)
	if err != nil {
		return errors.InvalidArgumentError("ElGamal encryption failed: " + err.Error())
	}

	packetLen := 10 /* header length */
	packetLen += 2 /* mpi size */ + (c1.BitLen()+7)/8
	packetLen += 2 /* mpi size */ + (c2.BitLen()+7)/8

	err = serializeHeader(w, packetTypeEncryptedKey, packetLen)
	if err != nil {
		return err
	}
	_, err = w.Write(header[:])
	if err != nil {
		return err
	}
	if _, err = w.Write(new(encoding.MPI).SetBig(c1).EncodedBytes()); err != nil {
		return err
	}
	_, err = w.Write(new(encoding.MPI).SetBig(c2).EncodedBytes())
	return err
}

func serializeEncryptedKeyECDH(w io.Writer, rand io.Reader, header [10]byte, pub *ecdh.PublicKey, keyBlock []byte, oid encoding.Field, fingerprint []byte) error {
	vsG, c, err := ecdh.Encrypt(rand, pub, keyBlock, oid.EncodedBytes(), fingerprint)
	if err != nil {
		return errors.InvalidArgumentError("ECDH encryption failed: " + err.Error())
	}

	g := encoding.NewMPI(vsG)
	m := encoding.NewOID(c)

	packetLen := 10 /* header length */
	packetLen += int(g.EncodedLength()) + int(m.EncodedLength())

	err = serializeHeader(w, packetTypeEncryptedKey, packetLen)
	if err != nil {
		return err
	}

	_, err = w.Write(header[:])
	if err != nil {
		return err
	}
	if _, err = w.Write(g.EncodedBytes()); err != nil {
		return err
	}
	_, err = w.Write(m.EncodedBytes())
	return err
}
   0707010000021F000081A4000000000000000000000001645E367C000007A9000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/literal.go  // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package packet

import (
	"encoding/binary"
	"io"
)

// LiteralData represents an encrypted file. See RFC 4880, section 5.9.
type LiteralData struct {
	Format   uint8
	IsBinary bool
	FileName string
	Time     uint32 // Unix epoch time. Either creation time or modification time. 0 means undefined.
	Body     io.Reader
}

// ForEyesOnly returns whether the contents of the LiteralData have been marked
// as especially sensitive.
func (l *LiteralData) ForEyesOnly() bool {
	return l.FileName == "_CONSOLE"
}

func (l *LiteralData) parse(r io.Reader) (err error) {
	var buf [256]byte

	_, err = readFull(r, buf[:2])
	if err != nil {
		return
	}

	l.Format = buf[0]
	l.IsBinary = l.Format == 'b'
	fileNameLen := int(buf[1])

	_, err = readFull(r, buf[:fileNameLen])
	if err != nil {
		return
	}

	l.FileName = string(buf[:fileNameLen])

	_, err = readFull(r, buf[:4])
	if err != nil {
		return
	}

	l.Time = binary.BigEndian.Uint32(buf[:4])
	l.Body = r
	return
}

// SerializeLiteral serializes a literal data packet to w and returns a
// WriteCloser to which the data itself can be written and which MUST be closed
// on completion. The fileName is truncated to 255 bytes.
func SerializeLiteral(w io.WriteCloser, isBinary bool, fileName string, time uint32) (plaintext io.WriteCloser, err error) {
	var buf [4]byte
	buf[0] = 't'
	if isBinary {
		buf[0] = 'b'
	}
	if len(fileName) > 255 {
		fileName = fileName[:255]
	}
	buf[1] = byte(len(fileName))

	inner, err := serializeStreamHeader(w, packetTypeLiteralData)
	if err != nil {
		return
	}

	_, err = inner.Write(buf[:2])
	if err != nil {
		return
	}
	_, err = inner.Write([]byte(fileName))
	if err != nil {
		return
	}
	binary.BigEndian.PutUint32(buf[:], time)
	_, err = inner.Write(buf[:])
	if err != nil {
		return
	}

	plaintext = inner
	return
}
   07070100000220000081A4000000000000000000000001645E367C00000DC2000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/ocfb.go // Copyright 2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// OpenPGP CFB Mode. http://tools.ietf.org/html/rfc4880#section-13.9

package packet

import (
	"crypto/cipher"
)

type ocfbEncrypter struct {
	b       cipher.Block
	fre     []byte
	outUsed int
}

// An OCFBResyncOption determines if the "resynchronization step" of OCFB is
// performed.
type OCFBResyncOption bool

const (
	OCFBResync   OCFBResyncOption = true
	OCFBNoResync OCFBResyncOption = false
)

// NewOCFBEncrypter returns a cipher.Stream which encrypts data with OpenPGP's
// cipher feedback mode using the given cipher.Block, and an initial amount of
// ciphertext.  randData must be random bytes and be the same length as the
// cipher.Block's block size. Resync determines if the "resynchronization step"
// from RFC 4880, 13.9 step 7 is performed. Different parts of OpenPGP vary on
// this point.
func NewOCFBEncrypter(block cipher.Block, randData []byte, resync OCFBResyncOption) (cipher.Stream, []byte) {
	blockSize := block.BlockSize()
	if len(randData) != blockSize {
		return nil, nil
	}

	x := &ocfbEncrypter{
		b:       block,
		fre:     make([]byte, blockSize),
		outUsed: 0,
	}
	prefix := make([]byte, blockSize+2)

	block.Encrypt(x.fre, x.fre)
	for i := 0; i < blockSize; i++ {
		prefix[i] = randData[i] ^ x.fre[i]
	}

	block.Encrypt(x.fre, prefix[:blockSize])
	prefix[blockSize] = x.fre[0] ^ randData[blockSize-2]
	prefix[blockSize+1] = x.fre[1] ^ randData[blockSize-1]

	if resync {
		block.Encrypt(x.fre, prefix[2:])
	} else {
		x.fre[0] = prefix[blockSize]
		x.fre[1] = prefix[blockSize+1]
		x.outUsed = 2
	}
	return x, prefix
}

func (x *ocfbEncrypter) XORKeyStream(dst, src []byte) {
	for i := 0; i < len(src); i++ {
		if x.outUsed == len(x.fre) {
			x.b.Encrypt(x.fre, x.fre)
			x.outUsed = 0
		}

		x.fre[x.outUsed] ^= src[i]
		dst[i] = x.fre[x.outUsed]
		x.outUsed++
	}
}

type ocfbDecrypter struct {
	b       cipher.Block
	fre     []byte
	outUsed int
}

// NewOCFBDecrypter returns a cipher.Stream which decrypts data with OpenPGP's
// cipher feedback mode using the given cipher.Block. Prefix must be the first
// blockSize + 2 bytes of the ciphertext, where blockSize is the cipher.Block's
// block size. On successful exit, blockSize+2 bytes of decrypted data are written into
// prefix. Resync determines if the "resynchronization step" from RFC 4880,
// 13.9 step 7 is performed. Different parts of OpenPGP vary on this point.
func NewOCFBDecrypter(block cipher.Block, prefix []byte, resync OCFBResyncOption) cipher.Stream {
	blockSize := block.BlockSize()
	if len(prefix) != blockSize+2 {
		return nil
	}

	x := &ocfbDecrypter{
		b:       block,
		fre:     make([]byte, blockSize),
		outUsed: 0,
	}
	prefixCopy := make([]byte, len(prefix))
	copy(prefixCopy, prefix)

	block.Encrypt(x.fre, x.fre)
	for i := 0; i < blockSize; i++ {
		prefixCopy[i] ^= x.fre[i]
	}

	block.Encrypt(x.fre, prefix[:blockSize])
	prefixCopy[blockSize] ^= x.fre[0]
	prefixCopy[blockSize+1] ^= x.fre[1]

	if resync {
		block.Encrypt(x.fre, prefix[2:])
	} else {
		x.fre[0] = prefix[blockSize]
		x.fre[1] = prefix[blockSize+1]
		x.outUsed = 2
	}
	copy(prefix, prefixCopy)
	return x
}

func (x *ocfbDecrypter) XORKeyStream(dst, src []byte) {
	for i := 0; i < len(src); i++ {
		if x.outUsed == len(x.fre) {
			x.b.Encrypt(x.fre, x.fre)
			x.outUsed = 0
		}

		c := src[i]
		dst[i] = x.fre[x.outUsed] ^ src[i]
		x.fre[x.outUsed] = c
		x.outUsed++
	}
}
  07070100000221000081A4000000000000000000000001645E367C0000070A000000000000000000000000000000000000006000000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/one_pass_signature.go   // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package packet

import (
	"crypto"
	"encoding/binary"
	"github.com/ProtonMail/go-crypto/openpgp/errors"
	"github.com/ProtonMail/go-crypto/openpgp/s2k"
	"io"
	"strconv"
)

// OnePassSignature represents a one-pass signature packet. See RFC 4880,
// section 5.4.
type OnePassSignature struct {
	SigType    SignatureType
	Hash       crypto.Hash
	PubKeyAlgo PublicKeyAlgorithm
	KeyId      uint64
	IsLast     bool
}

const onePassSignatureVersion = 3

func (ops *OnePassSignature) parse(r io.Reader) (err error) {
	var buf [13]byte

	_, err = readFull(r, buf[:])
	if err != nil {
		return
	}
	if buf[0] != onePassSignatureVersion {
		err = errors.UnsupportedError("one-pass-signature packet version " + strconv.Itoa(int(buf[0])))
	}

	var ok bool
	ops.Hash, ok = s2k.HashIdToHash(buf[2])
	if !ok {
		return errors.UnsupportedError("hash function: " + strconv.Itoa(int(buf[2])))
	}

	ops.SigType = SignatureType(buf[1])
	ops.PubKeyAlgo = PublicKeyAlgorithm(buf[3])
	ops.KeyId = binary.BigEndian.Uint64(buf[4:12])
	ops.IsLast = buf[12] != 0
	return
}

// Serialize marshals the given OnePassSignature to w.
func (ops *OnePassSignature) Serialize(w io.Writer) error {
	var buf [13]byte
	buf[0] = onePassSignatureVersion
	buf[1] = uint8(ops.SigType)
	var ok bool
	buf[2], ok = s2k.HashToHashId(ops.Hash)
	if !ok {
		return errors.UnsupportedError("hash type: " + strconv.Itoa(int(ops.Hash)))
	}
	buf[3] = uint8(ops.PubKeyAlgo)
	binary.BigEndian.PutUint64(buf[4:12], ops.KeyId)
	if ops.IsLast {
		buf[12] = 1
	}

	if err := serializeHeader(w, packetTypeOnePassSignature, len(buf)); err != nil {
		return err
	}
	_, err := w.Write(buf[:])
	return err
}
  07070100000222000081A4000000000000000000000001645E367C0000101A000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/opaque.go   // Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package packet

import (
	"bytes"
	"io"
	"io/ioutil"

	"github.com/ProtonMail/go-crypto/openpgp/errors"
)

// OpaquePacket represents an OpenPGP packet as raw, unparsed data. This is
// useful for splitting and storing the original packet contents separately,
// handling unsupported packet types or accessing parts of the packet not yet
// implemented by this package.
type OpaquePacket struct {
	// Packet type
	Tag uint8
	// Reason why the packet was parsed opaquely
	Reason error
	// Binary contents of the packet data
	Contents []byte
}

func (op *OpaquePacket) parse(r io.Reader) (err error) {
	op.Contents, err = ioutil.ReadAll(r)
	return
}

// Serialize marshals the packet to a writer in its original form, including
// the packet header.
func (op *OpaquePacket) Serialize(w io.Writer) (err error) {
	err = serializeHeader(w, packetType(op.Tag), len(op.Contents))
	if err == nil {
		_, err = w.Write(op.Contents)
	}
	return
}

// Parse attempts to parse the opaque contents into a structure supported by
// this package. If the packet is not known then the result will be another
// OpaquePacket.
func (op *OpaquePacket) Parse() (p Packet, err error) {
	hdr := bytes.NewBuffer(nil)
	err = serializeHeader(hdr, packetType(op.Tag), len(op.Contents))
	if err != nil {
		op.Reason = err
		return op, err
	}
	p, err = Read(io.MultiReader(hdr, bytes.NewBuffer(op.Contents)))
	if err != nil {
		op.Reason = err
		p = op
	}
	return
}

// OpaqueReader reads OpaquePackets from an io.Reader.
type OpaqueReader struct {
	r io.Reader
}

func NewOpaqueReader(r io.Reader) *OpaqueReader {
	return &OpaqueReader{r: r}
}

// Read the next OpaquePacket.
func (or *OpaqueReader) Next() (op *OpaquePacket, err error) {
	tag, _, contents, err := readHeader(or.r)
	if err != nil {
		return
	}
	op = &OpaquePacket{Tag: uint8(tag), Reason: err}
	err = op.parse(contents)
	if err != nil {
		consumeAll(contents)
	}
	return
}

// OpaqueSubpacket represents an unparsed OpenPGP subpacket,
// as found in signature and user attribute packets.
type OpaqueSubpacket struct {
	SubType  uint8
	Contents []byte
}

// OpaqueSubpackets extracts opaque, unparsed OpenPGP subpackets from
// their byte representation.
func OpaqueSubpackets(contents []byte) (result []*OpaqueSubpacket, err error) {
	var (
		subHeaderLen int
		subPacket    *OpaqueSubpacket
	)
	for len(contents) > 0 {
		subHeaderLen, subPacket, err = nextSubpacket(contents)
		if err != nil {
			break
		}
		result = append(result, subPacket)
		contents = contents[subHeaderLen+len(subPacket.Contents):]
	}
	return
}

func nextSubpacket(contents []byte) (subHeaderLen int, subPacket *OpaqueSubpacket, err error) {
	// RFC 4880, section 5.2.3.1
	var subLen uint32
	if len(contents) < 1 {
		goto Truncated
	}
	subPacket = &OpaqueSubpacket{}
	switch {
	case contents[0] < 192:
		subHeaderLen = 2 // 1 length byte, 1 subtype byte
		if len(contents) < subHeaderLen {
			goto Truncated
		}
		subLen = uint32(contents[0])
		contents = contents[1:]
	case contents[0] < 255:
		subHeaderLen = 3 // 2 length bytes, 1 subtype
		if len(contents) < subHeaderLen {
			goto Truncated
		}
		subLen = uint32(contents[0]-192)<<8 + uint32(contents[1]) + 192
		contents = contents[2:]
	default:
		subHeaderLen = 6 // 5 length bytes, 1 subtype
		if len(contents) < subHeaderLen {
			goto Truncated
		}
		subLen = uint32(contents[1])<<24 |
			uint32(contents[2])<<16 |
			uint32(contents[3])<<8 |
			uint32(contents[4])
		contents = contents[5:]
	}
	if subLen > uint32(len(contents)) || subLen == 0 {
		goto Truncated
	}
	subPacket.SubType = contents[0]
	subPacket.Contents = contents[1:subLen]
	return
Truncated:
	err = errors.StructuralError("subpacket truncated")
	return
}

func (osp *OpaqueSubpacket) Serialize(w io.Writer) (err error) {
	buf := make([]byte, 6)
	n := serializeSubpacketLength(buf, len(osp.Contents)+1)
	buf[n] = osp.SubType
	if _, err = w.Write(buf[:n+1]); err != nil {
		return
	}
	_, err = w.Write(osp.Contents)
	return
}
  07070100000223000081A4000000000000000000000001645E367C0000359D000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/packet.go   // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package packet implements parsing and serialization of OpenPGP packets, as
// specified in RFC 4880.
package packet // import "github.com/ProtonMail/go-crypto/openpgp/packet"

import (
	"bytes"
	"crypto/cipher"
	"crypto/rsa"
	"io"

	"github.com/ProtonMail/go-crypto/openpgp/errors"
	"github.com/ProtonMail/go-crypto/openpgp/internal/algorithm"
)

// readFull is the same as io.ReadFull except that reading zero bytes returns
// ErrUnexpectedEOF rather than EOF.
func readFull(r io.Reader, buf []byte) (n int, err error) {
	n, err = io.ReadFull(r, buf)
	if err == io.EOF {
		err = io.ErrUnexpectedEOF
	}
	return
}

// readLength reads an OpenPGP length from r. See RFC 4880, section 4.2.2.
func readLength(r io.Reader) (length int64, isPartial bool, err error) {
	var buf [4]byte
	_, err = readFull(r, buf[:1])
	if err != nil {
		return
	}
	switch {
	case buf[0] < 192:
		length = int64(buf[0])
	case buf[0] < 224:
		length = int64(buf[0]-192) << 8
		_, err = readFull(r, buf[0:1])
		if err != nil {
			return
		}
		length += int64(buf[0]) + 192
	case buf[0] < 255:
		length = int64(1) << (buf[0] & 0x1f)
		isPartial = true
	default:
		_, err = readFull(r, buf[0:4])
		if err != nil {
			return
		}
		length = int64(buf[0])<<24 |
			int64(buf[1])<<16 |
			int64(buf[2])<<8 |
			int64(buf[3])
	}
	return
}

// partialLengthReader wraps an io.Reader and handles OpenPGP partial lengths.
// The continuation lengths are parsed and removed from the stream and EOF is
// returned at the end of the packet. See RFC 4880, section 4.2.2.4.
type partialLengthReader struct {
	r         io.Reader
	remaining int64
	isPartial bool
}

func (r *partialLengthReader) Read(p []byte) (n int, err error) {
	for r.remaining == 0 {
		if !r.isPartial {
			return 0, io.EOF
		}
		r.remaining, r.isPartial, err = readLength(r.r)
		if err != nil {
			return 0, err
		}
	}

	toRead := int64(len(p))
	if toRead > r.remaining {
		toRead = r.remaining
	}

	n, err = r.r.Read(p[:int(toRead)])
	r.remaining -= int64(n)
	if n < int(toRead) && err == io.EOF {
		err = io.ErrUnexpectedEOF
	}
	return
}

// partialLengthWriter writes a stream of data using OpenPGP partial lengths.
// See RFC 4880, section 4.2.2.4.
type partialLengthWriter struct {
	w          io.WriteCloser
	buf        bytes.Buffer
	lengthByte [1]byte
}

func (w *partialLengthWriter) Write(p []byte) (n int, err error) {
	bufLen := w.buf.Len()
	if bufLen > 512 {
		for power := uint(30); ; power-- {
			l := 1 << power
			if bufLen >= l {
				w.lengthByte[0] = 224 + uint8(power)
				_, err = w.w.Write(w.lengthByte[:])
				if err != nil {
					return
				}
				var m int
				m, err = w.w.Write(w.buf.Next(l))
				if err != nil {
					return
				}
				if m != l {
					return 0, io.ErrShortWrite
				}
				break
			}
		}
	}
	return w.buf.Write(p)
}

func (w *partialLengthWriter) Close() (err error) {
	len := w.buf.Len()
	err = serializeLength(w.w, len)
	if err != nil {
		return err
	}
	_, err = w.buf.WriteTo(w.w)
	if err != nil {
		return err
	}
	return w.w.Close()
}

// A spanReader is an io.LimitReader, but it returns ErrUnexpectedEOF if the
// underlying Reader returns EOF before the limit has been reached.
type spanReader struct {
	r io.Reader
	n int64
}

func (l *spanReader) Read(p []byte) (n int, err error) {
	if l.n <= 0 {
		return 0, io.EOF
	}
	if int64(len(p)) > l.n {
		p = p[0:l.n]
	}
	n, err = l.r.Read(p)
	l.n -= int64(n)
	if l.n > 0 && err == io.EOF {
		err = io.ErrUnexpectedEOF
	}
	return
}

// readHeader parses a packet header and returns an io.Reader which will return
// the contents of the packet. See RFC 4880, section 4.2.
func readHeader(r io.Reader) (tag packetType, length int64, contents io.Reader, err error) {
	var buf [4]byte
	_, err = io.ReadFull(r, buf[:1])
	if err != nil {
		return
	}
	if buf[0]&0x80 == 0 {
		err = errors.StructuralError("tag byte does not have MSB set")
		return
	}
	if buf[0]&0x40 == 0 {
		// Old format packet
		tag = packetType((buf[0] & 0x3f) >> 2)
		lengthType := buf[0] & 3
		if lengthType == 3 {
			length = -1
			contents = r
			return
		}
		lengthBytes := 1 << lengthType
		_, err = readFull(r, buf[0:lengthBytes])
		if err != nil {
			return
		}
		for i := 0; i < lengthBytes; i++ {
			length <<= 8
			length |= int64(buf[i])
		}
		contents = &spanReader{r, length}
		return
	}

	// New format packet
	tag = packetType(buf[0] & 0x3f)
	length, isPartial, err := readLength(r)
	if err != nil {
		return
	}
	if isPartial {
		contents = &partialLengthReader{
			remaining: length,
			isPartial: true,
			r:         r,
		}
		length = -1
	} else {
		contents = &spanReader{r, length}
	}
	return
}

// serializeHeader writes an OpenPGP packet header to w. See RFC 4880, section
// 4.2.
func serializeHeader(w io.Writer, ptype packetType, length int) (err error) {
	err = serializeType(w, ptype)
	if err != nil {
		return
	}
	return serializeLength(w, length)
}

// serializeType writes an OpenPGP packet type to w. See RFC 4880, section
// 4.2.
func serializeType(w io.Writer, ptype packetType) (err error) {
	var buf [1]byte
	buf[0] = 0x80 | 0x40 | byte(ptype)
	_, err = w.Write(buf[:])
	return
}

// serializeLength writes an OpenPGP packet length to w. See RFC 4880, section
// 4.2.2.
func serializeLength(w io.Writer, length int) (err error) {
	var buf [5]byte
	var n int

	if length < 192 {
		buf[0] = byte(length)
		n = 1
	} else if length < 8384 {
		length -= 192
		buf[0] = 192 + byte(length>>8)
		buf[1] = byte(length)
		n = 2
	} else {
		buf[0] = 255
		buf[1] = byte(length >> 24)
		buf[2] = byte(length >> 16)
		buf[3] = byte(length >> 8)
		buf[4] = byte(length)
		n = 5
	}

	_, err = w.Write(buf[:n])
	return
}

// serializeStreamHeader writes an OpenPGP packet header to w where the
// length of the packet is unknown. It returns a io.WriteCloser which can be
// used to write the contents of the packet. See RFC 4880, section 4.2.
func serializeStreamHeader(w io.WriteCloser, ptype packetType) (out io.WriteCloser, err error) {
	err = serializeType(w, ptype)
	if err != nil {
		return
	}
	out = &partialLengthWriter{w: w}
	return
}

// Packet represents an OpenPGP packet. Users are expected to try casting
// instances of this interface to specific packet types.
type Packet interface {
	parse(io.Reader) error
}

// consumeAll reads from the given Reader until error, returning the number of
// bytes read.
func consumeAll(r io.Reader) (n int64, err error) {
	var m int
	var buf [1024]byte

	for {
		m, err = r.Read(buf[:])
		n += int64(m)
		if err == io.EOF {
			err = nil
			return
		}
		if err != nil {
			return
		}
	}
}

// packetType represents the numeric ids of the different OpenPGP packet types. See
// http://www.iana.org/assignments/pgp-parameters/pgp-parameters.xhtml#pgp-parameters-2
type packetType uint8

const (
	packetTypeEncryptedKey              packetType = 1
	packetTypeSignature                 packetType = 2
	packetTypeSymmetricKeyEncrypted     packetType = 3
	packetTypeOnePassSignature          packetType = 4
	packetTypePrivateKey                packetType = 5
	packetTypePublicKey                 packetType = 6
	packetTypePrivateSubkey             packetType = 7
	packetTypeCompressed                packetType = 8
	packetTypeSymmetricallyEncrypted    packetType = 9
	packetTypeLiteralData               packetType = 11
	packetTypeUserId                    packetType = 13
	packetTypePublicSubkey              packetType = 14
	packetTypeUserAttribute             packetType = 17
	packetTypeSymmetricallyEncryptedMDC packetType = 18
	packetTypeAEADEncrypted             packetType = 20
)

// EncryptedDataPacket holds encrypted data. It is currently implemented by
// SymmetricallyEncrypted and AEADEncrypted.
type EncryptedDataPacket interface {
	Decrypt(CipherFunction, []byte) (io.ReadCloser, error)
}

// Read reads a single OpenPGP packet from the given io.Reader. If there is an
// error parsing a packet, the whole packet is consumed from the input.
func Read(r io.Reader) (p Packet, err error) {
	tag, _, contents, err := readHeader(r)
	if err != nil {
		return
	}

	switch tag {
	case packetTypeEncryptedKey:
		p = new(EncryptedKey)
	case packetTypeSignature:
		p = new(Signature)
	case packetTypeSymmetricKeyEncrypted:
		p = new(SymmetricKeyEncrypted)
	case packetTypeOnePassSignature:
		p = new(OnePassSignature)
	case packetTypePrivateKey, packetTypePrivateSubkey:
		pk := new(PrivateKey)
		if tag == packetTypePrivateSubkey {
			pk.IsSubkey = true
		}
		p = pk
	case packetTypePublicKey, packetTypePublicSubkey:
		isSubkey := tag == packetTypePublicSubkey
		p = &PublicKey{IsSubkey: isSubkey}
	case packetTypeCompressed:
		p = new(Compressed)
	case packetTypeSymmetricallyEncrypted:
		p = new(SymmetricallyEncrypted)
	case packetTypeLiteralData:
		p = new(LiteralData)
	case packetTypeUserId:
		p = new(UserId)
	case packetTypeUserAttribute:
		p = new(UserAttribute)
	case packetTypeSymmetricallyEncryptedMDC:
		se := new(SymmetricallyEncrypted)
		se.MDC = true
		p = se
	case packetTypeAEADEncrypted:
		p = new(AEADEncrypted)
	default:
		err = errors.UnknownPacketTypeError(tag)
	}
	if p != nil {
		err = p.parse(contents)
	}
	if err != nil {
		consumeAll(contents)
	}
	return
}

// SignatureType represents the different semantic meanings of an OpenPGP
// signature. See RFC 4880, section 5.2.1.
type SignatureType uint8

const (
	SigTypeBinary            SignatureType = 0x00
	SigTypeText                            = 0x01
	SigTypeGenericCert                     = 0x10
	SigTypePersonaCert                     = 0x11
	SigTypeCasualCert                      = 0x12
	SigTypePositiveCert                    = 0x13
	SigTypeSubkeyBinding                   = 0x18
	SigTypePrimaryKeyBinding               = 0x19
	SigTypeDirectSignature                 = 0x1F
	SigTypeKeyRevocation                   = 0x20
	SigTypeSubkeyRevocation                = 0x28
	SigTypeCertificationRevocation         = 0x30
)

// PublicKeyAlgorithm represents the different public key system specified for
// OpenPGP. See
// http://www.iana.org/assignments/pgp-parameters/pgp-parameters.xhtml#pgp-parameters-12
type PublicKeyAlgorithm uint8

const (
	PubKeyAlgoRSA     PublicKeyAlgorithm = 1
	PubKeyAlgoElGamal PublicKeyAlgorithm = 16
	PubKeyAlgoDSA     PublicKeyAlgorithm = 17
	// RFC 6637, Section 5.
	PubKeyAlgoECDH  PublicKeyAlgorithm = 18
	PubKeyAlgoECDSA PublicKeyAlgorithm = 19
	// https://www.ietf.org/archive/id/draft-koch-eddsa-for-openpgp-04.txt
	PubKeyAlgoEdDSA PublicKeyAlgorithm = 22

	// Deprecated in RFC 4880, Section 13.5. Use key flags instead.
	PubKeyAlgoRSAEncryptOnly PublicKeyAlgorithm = 2
	PubKeyAlgoRSASignOnly    PublicKeyAlgorithm = 3
)

// CanEncrypt returns true if it's possible to encrypt a message to a public
// key of the given type.
func (pka PublicKeyAlgorithm) CanEncrypt() bool {
	switch pka {
	case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoElGamal, PubKeyAlgoECDH:
		return true
	}
	return false
}

// CanSign returns true if it's possible for a public key of the given type to
// sign a message.
func (pka PublicKeyAlgorithm) CanSign() bool {
	switch pka {
	case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoDSA, PubKeyAlgoECDSA, PubKeyAlgoEdDSA:
		return true
	}
	return false
}

// CipherFunction represents the different block ciphers specified for OpenPGP. See
// http://www.iana.org/assignments/pgp-parameters/pgp-parameters.xhtml#pgp-parameters-13
type CipherFunction algorithm.CipherFunction

const (
	Cipher3DES   CipherFunction = 2
	CipherCAST5  CipherFunction = 3
	CipherAES128 CipherFunction = 7
	CipherAES192 CipherFunction = 8
	CipherAES256 CipherFunction = 9
)

// KeySize returns the key size, in bytes, of cipher.
func (cipher CipherFunction) KeySize() int {
	return algorithm.CipherFunction(cipher).KeySize()
}

// blockSize returns the block size, in bytes, of cipher.
func (cipher CipherFunction) blockSize() int {
	return algorithm.CipherFunction(cipher).BlockSize()
}

// new returns a fresh instance of the given cipher.
func (cipher CipherFunction) new(key []byte) (block cipher.Block) {
	return algorithm.CipherFunction(cipher).New(key)
}

// padToKeySize left-pads a MPI with zeroes to match the length of the
// specified RSA public.
func padToKeySize(pub *rsa.PublicKey, b []byte) []byte {
	k := (pub.N.BitLen() + 7) / 8
	if len(b) >= k {
		return b
	}
	bb := make([]byte, k)
	copy(bb[len(bb)-len(b):], b)
	return bb
}

// CompressionAlgo Represents the different compression algorithms
// supported by OpenPGP (except for BZIP2, which is not currently
// supported). See Section 9.3 of RFC 4880.
type CompressionAlgo uint8

const (
	CompressionNone CompressionAlgo = 0
	CompressionZIP  CompressionAlgo = 1
	CompressionZLIB CompressionAlgo = 2
)

// AEADMode represents the different Authenticated Encryption with Associated
// Data specified for OpenPGP.
type AEADMode algorithm.AEADMode

const (
	AEADModeEAX             AEADMode = 1
	AEADModeOCB             AEADMode = 2
	AEADModeExperimentalGCM AEADMode = 100
)

func (mode AEADMode) NonceLength() int {
	return algorithm.AEADMode(mode).NonceLength()
}

func (mode AEADMode) TagLength() int {
	return algorithm.AEADMode(mode).TagLength()
}

// new returns a fresh instance of the given mode.
func (mode AEADMode) new(block cipher.Block) cipher.AEAD {
	return algorithm.AEADMode(mode).New(block)
}

// ReasonForRevocation represents a revocation reason code as per RFC4880
// section 5.2.3.23.
type ReasonForRevocation uint8

const (
	NoReason       ReasonForRevocation = 0
	KeySuperseded  ReasonForRevocation = 1
	KeyCompromised ReasonForRevocation = 2
	KeyRetired     ReasonForRevocation = 3
)
   07070100000224000081A4000000000000000000000001645E367C00005040000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/private_key.go  // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package packet

import (
	"bytes"
	"crypto"
	"crypto/cipher"
	"crypto/dsa"
	"crypto/ecdsa"
	"crypto/elliptic"
	"crypto/rand"
	"crypto/rsa"
	"crypto/sha1"
	"fmt"
	"io"
	"io/ioutil"
	"math/big"
	"strconv"
	"time"

	"github.com/ProtonMail/go-crypto/openpgp/internal/ecc"
	"golang.org/x/crypto/curve25519"

	"github.com/ProtonMail/go-crypto/openpgp/ecdh"
	"github.com/ProtonMail/go-crypto/openpgp/elgamal"
	"github.com/ProtonMail/go-crypto/openpgp/errors"
	"github.com/ProtonMail/go-crypto/openpgp/internal/encoding"
	"github.com/ProtonMail/go-crypto/openpgp/s2k"
	"golang.org/x/crypto/ed25519"
)

// PrivateKey represents a possibly encrypted private key. See RFC 4880,
// section 5.5.3.
type PrivateKey struct {
	PublicKey
	Encrypted     bool // if true then the private key is unavailable until Decrypt has been called.
	encryptedData []byte
	cipher        CipherFunction
	s2k           func(out, in []byte)
	// An *{rsa|dsa|elgamal|ecdh|ecdsa|ed25519}.PrivateKey or
	// crypto.Signer/crypto.Decrypter (Decryptor RSA only).
	PrivateKey   interface{}
	sha1Checksum bool
	iv           []byte

	// Type of encryption of the S2K packet
	// Allowed values are 0 (Not encrypted), 254 (SHA1), or
	// 255 (2-byte checksum)
	s2kType S2KType
	// Full parameters of the S2K packet
	s2kParams *s2k.Params
}

//S2KType s2k packet type
type S2KType uint8

const (
	// S2KNON unencrypt
	S2KNON S2KType = 0
	// S2KSHA1 sha1 sum check
	S2KSHA1 S2KType = 254
	// S2KCHECKSUM sum check
	S2KCHECKSUM S2KType = 255
)

func NewRSAPrivateKey(creationTime time.Time, priv *rsa.PrivateKey) *PrivateKey {
	pk := new(PrivateKey)
	pk.PublicKey = *NewRSAPublicKey(creationTime, &priv.PublicKey)
	pk.PrivateKey = priv
	return pk
}

func NewDSAPrivateKey(creationTime time.Time, priv *dsa.PrivateKey) *PrivateKey {
	pk := new(PrivateKey)
	pk.PublicKey = *NewDSAPublicKey(creationTime, &priv.PublicKey)
	pk.PrivateKey = priv
	return pk
}

func NewElGamalPrivateKey(creationTime time.Time, priv *elgamal.PrivateKey) *PrivateKey {
	pk := new(PrivateKey)
	pk.PublicKey = *NewElGamalPublicKey(creationTime, &priv.PublicKey)
	pk.PrivateKey = priv
	return pk
}

func NewECDSAPrivateKey(creationTime time.Time, priv *ecdsa.PrivateKey) *PrivateKey {
	pk := new(PrivateKey)
	pk.PublicKey = *NewECDSAPublicKey(creationTime, &priv.PublicKey)
	pk.PrivateKey = priv
	return pk
}

func NewEdDSAPrivateKey(creationTime time.Time, priv *ed25519.PrivateKey) *PrivateKey {
	pk := new(PrivateKey)
	pub := priv.Public().(ed25519.PublicKey)
	pk.PublicKey = *NewEdDSAPublicKey(creationTime, &pub)
	pk.PrivateKey = priv
	return pk
}

func NewECDHPrivateKey(creationTime time.Time, priv *ecdh.PrivateKey) *PrivateKey {
	pk := new(PrivateKey)
	pk.PublicKey = *NewECDHPublicKey(creationTime, &priv.PublicKey)
	pk.PrivateKey = priv
	return pk
}

// NewSignerPrivateKey creates a PrivateKey from a crypto.Signer that
// implements RSA, ECDSA or EdDSA.
func NewSignerPrivateKey(creationTime time.Time, signer crypto.Signer) *PrivateKey {
	pk := new(PrivateKey)
	// In general, the public Keys should be used as pointers. We still
	// type-switch on the values, for backwards-compatibility.
	switch pubkey := signer.Public().(type) {
	case *rsa.PublicKey:
		pk.PublicKey = *NewRSAPublicKey(creationTime, pubkey)
	case rsa.PublicKey:
		pk.PublicKey = *NewRSAPublicKey(creationTime, &pubkey)
	case *ecdsa.PublicKey:
		pk.PublicKey = *NewECDSAPublicKey(creationTime, pubkey)
	case ecdsa.PublicKey:
		pk.PublicKey = *NewECDSAPublicKey(creationTime, &pubkey)
	case *ed25519.PublicKey:
		pk.PublicKey = *NewEdDSAPublicKey(creationTime, pubkey)
	case ed25519.PublicKey:
		pk.PublicKey = *NewEdDSAPublicKey(creationTime, &pubkey)
	default:
		panic("openpgp: unknown crypto.Signer type in NewSignerPrivateKey")
	}
	pk.PrivateKey = signer
	return pk
}

// NewDecrypterPrivateKey creates a PrivateKey from a *{rsa|elgamal|ecdh}.PrivateKey.
func NewDecrypterPrivateKey(creationTime time.Time, decrypter interface{}) *PrivateKey {
	pk := new(PrivateKey)
	switch priv := decrypter.(type) {
	case *rsa.PrivateKey:
		pk.PublicKey = *NewRSAPublicKey(creationTime, &priv.PublicKey)
	case *elgamal.PrivateKey:
		pk.PublicKey = *NewElGamalPublicKey(creationTime, &priv.PublicKey)
	case *ecdh.PrivateKey:
		pk.PublicKey = *NewECDHPublicKey(creationTime, &priv.PublicKey)
	default:
		panic("openpgp: unknown decrypter type in NewDecrypterPrivateKey")
	}
	pk.PrivateKey = decrypter
	return pk
}

func (pk *PrivateKey) parse(r io.Reader) (err error) {
	err = (&pk.PublicKey).parse(r)
	if err != nil {
		return
	}
	v5 := pk.PublicKey.Version == 5

	var buf [1]byte
	_, err = readFull(r, buf[:])
	if err != nil {
		return
	}
	pk.s2kType = S2KType(buf[0])
	var optCount [1]byte
	if v5 {
		if _, err = readFull(r, optCount[:]); err != nil {
			return
		}
	}

	switch pk.s2kType {
	case S2KNON:
		pk.s2k = nil
		pk.Encrypted = false
	case S2KSHA1, S2KCHECKSUM:
		if v5 && pk.s2kType == S2KCHECKSUM {
			return errors.StructuralError("wrong s2k identifier for version 5")
		}
		_, err = readFull(r, buf[:])
		if err != nil {
			return
		}
		pk.cipher = CipherFunction(buf[0])
		pk.s2kParams, err = s2k.ParseIntoParams(r)
		if err != nil {
			return
		}
		if pk.s2kParams.Dummy() {
			return
		}
		pk.s2k, err = pk.s2kParams.Function()
		if err != nil {
			return
		}
		pk.Encrypted = true
		if pk.s2kType == S2KSHA1 {
			pk.sha1Checksum = true
		}
	default:
		return errors.UnsupportedError("deprecated s2k function in private key")
	}

	if pk.Encrypted {
		blockSize := pk.cipher.blockSize()
		if blockSize == 0 {
			return errors.UnsupportedError("unsupported cipher in private key: " + strconv.Itoa(int(pk.cipher)))
		}
		pk.iv = make([]byte, blockSize)
		_, err = readFull(r, pk.iv)
		if err != nil {
			return
		}
	}

	var privateKeyData []byte
	if v5 {
		var n [4]byte /* secret material four octet count */
		_, err = readFull(r, n[:])
		if err != nil {
			return
		}
		count := uint32(uint32(n[0])<<24 | uint32(n[1])<<16 | uint32(n[2])<<8 | uint32(n[3]))
		if !pk.Encrypted {
			count = count + 2 /* two octet checksum */
		}
		privateKeyData = make([]byte, count)
		_, err = readFull(r, privateKeyData)
		if err != nil {
			return
		}
	} else {
		privateKeyData, err = ioutil.ReadAll(r)
		if err != nil {
			return
		}
	}
	if !pk.Encrypted {
		return pk.parsePrivateKey(privateKeyData)
	}

	pk.encryptedData = privateKeyData
	return
}

// Dummy returns true if the private key is a dummy key. This is a GNU extension.
func (pk *PrivateKey) Dummy() bool {
	return pk.s2kParams.Dummy()
}

func mod64kHash(d []byte) uint16 {
	var h uint16
	for _, b := range d {
		h += uint16(b)
	}
	return h
}

func (pk *PrivateKey) Serialize(w io.Writer) (err error) {
	contents := bytes.NewBuffer(nil)
	err = pk.PublicKey.serializeWithoutHeaders(contents)
	if err != nil {
		return
	}
	if _, err = contents.Write([]byte{uint8(pk.s2kType)}); err != nil {
		return
	}

	optional := bytes.NewBuffer(nil)
	if pk.Encrypted || pk.Dummy() {
		optional.Write([]byte{uint8(pk.cipher)})
		if err := pk.s2kParams.Serialize(optional); err != nil {
			return err
		}
		if pk.Encrypted {
			optional.Write(pk.iv)
		}
	}
	if pk.Version == 5 {
		contents.Write([]byte{uint8(optional.Len())})
	}
	io.Copy(contents, optional)

	if !pk.Dummy() {
		l := 0
		var priv []byte
		if !pk.Encrypted {
			buf := bytes.NewBuffer(nil)
			err = pk.serializePrivateKey(buf)
			if err != nil {
				return err
			}
			l = buf.Len()
			if pk.sha1Checksum {
				h := sha1.New()
				h.Write(buf.Bytes())
				buf.Write(h.Sum(nil))
			} else {
				checksum := mod64kHash(buf.Bytes())
				buf.Write([]byte{byte(checksum >> 8), byte(checksum)})
			}
			priv = buf.Bytes()
		} else {
			priv, l = pk.encryptedData, len(pk.encryptedData)
		}

		if pk.Version == 5 {
			contents.Write([]byte{byte(l >> 24), byte(l >> 16), byte(l >> 8), byte(l)})
		}
		contents.Write(priv)
	}

	ptype := packetTypePrivateKey
	if pk.IsSubkey {
		ptype = packetTypePrivateSubkey
	}
	err = serializeHeader(w, ptype, contents.Len())
	if err != nil {
		return
	}
	_, err = io.Copy(w, contents)
	if err != nil {
		return
	}
	return
}

func serializeRSAPrivateKey(w io.Writer, priv *rsa.PrivateKey) error {
	if _, err := w.Write(new(encoding.MPI).SetBig(priv.D).EncodedBytes()); err != nil {
		return err
	}
	if _, err := w.Write(new(encoding.MPI).SetBig(priv.Primes[1]).EncodedBytes()); err != nil {
		return err
	}
	if _, err := w.Write(new(encoding.MPI).SetBig(priv.Primes[0]).EncodedBytes()); err != nil {
		return err
	}
	_, err := w.Write(new(encoding.MPI).SetBig(priv.Precomputed.Qinv).EncodedBytes())
	return err
}

func serializeDSAPrivateKey(w io.Writer, priv *dsa.PrivateKey) error {
	_, err := w.Write(new(encoding.MPI).SetBig(priv.X).EncodedBytes())
	return err
}

func serializeElGamalPrivateKey(w io.Writer, priv *elgamal.PrivateKey) error {
	_, err := w.Write(new(encoding.MPI).SetBig(priv.X).EncodedBytes())
	return err
}

func serializeECDSAPrivateKey(w io.Writer, priv *ecdsa.PrivateKey) error {
	_, err := w.Write(new(encoding.MPI).SetBig(priv.D).EncodedBytes())
	return err
}

func serializeEdDSAPrivateKey(w io.Writer, priv *ed25519.PrivateKey) error {
	keySize := ed25519.PrivateKeySize - ed25519.PublicKeySize
	_, err := w.Write(encoding.NewMPI((*priv)[:keySize]).EncodedBytes())
	return err
}

func serializeECDHPrivateKey(w io.Writer, priv *ecdh.PrivateKey) error {
	_, err := w.Write(encoding.NewMPI(priv.D).EncodedBytes())
	return err
}

// Decrypt decrypts an encrypted private key using a passphrase.
func (pk *PrivateKey) Decrypt(passphrase []byte) error {
	if pk.Dummy() {
		return errors.ErrDummyPrivateKey("dummy key found")
	}
	if !pk.Encrypted {
		return nil
	}

	key := make([]byte, pk.cipher.KeySize())
	pk.s2k(key, passphrase)
	block := pk.cipher.new(key)
	cfb := cipher.NewCFBDecrypter(block, pk.iv)

	data := make([]byte, len(pk.encryptedData))
	cfb.XORKeyStream(data, pk.encryptedData)

	if pk.sha1Checksum {
		if len(data) < sha1.Size {
			return errors.StructuralError("truncated private key data")
		}
		h := sha1.New()
		h.Write(data[:len(data)-sha1.Size])
		sum := h.Sum(nil)
		if !bytes.Equal(sum, data[len(data)-sha1.Size:]) {
			return errors.StructuralError("private key checksum failure")
		}
		data = data[:len(data)-sha1.Size]
	} else {
		if len(data) < 2 {
			return errors.StructuralError("truncated private key data")
		}
		var sum uint16
		for i := 0; i < len(data)-2; i++ {
			sum += uint16(data[i])
		}
		if data[len(data)-2] != uint8(sum>>8) ||
			data[len(data)-1] != uint8(sum) {
			return errors.StructuralError("private key checksum failure")
		}
		data = data[:len(data)-2]
	}

	err := pk.parsePrivateKey(data)
	if _, ok := err.(errors.KeyInvalidError); ok {
		return errors.KeyInvalidError("invalid key parameters")
	}
	if err != nil {
		return err
	}

	// Mark key as unencrypted
	pk.s2kType = S2KNON
	pk.s2k = nil
	pk.Encrypted = false
	pk.encryptedData = nil

	return nil
}

// Encrypt encrypts an unencrypted private key using a passphrase.
func (pk *PrivateKey) Encrypt(passphrase []byte) error {
	priv := bytes.NewBuffer(nil)
	err := pk.serializePrivateKey(priv)
	if err != nil {
		return err
	}

	//Default config of private key encryption
	pk.cipher = CipherAES256
	s2kConfig := &s2k.Config{
		S2KMode:  3, //Iterated
		S2KCount: 65536,
		Hash:     crypto.SHA256,
	}

	pk.s2kParams, err = s2k.Generate(rand.Reader, s2kConfig)
	if err != nil {
		return err
	}
	privateKeyBytes := priv.Bytes()
	key := make([]byte, pk.cipher.KeySize())

	pk.sha1Checksum = true
	pk.s2k, err = pk.s2kParams.Function()
	if err != nil {
		return err
	}
	pk.s2k(key, passphrase)
	block := pk.cipher.new(key)
	pk.iv = make([]byte, pk.cipher.blockSize())
	_, err = rand.Read(pk.iv)
	if err != nil {
		return err
	}
	cfb := cipher.NewCFBEncrypter(block, pk.iv)

	if pk.sha1Checksum {
		pk.s2kType = S2KSHA1
		h := sha1.New()
		h.Write(privateKeyBytes)
		sum := h.Sum(nil)
		privateKeyBytes = append(privateKeyBytes, sum...)
	} else {
		pk.s2kType = S2KCHECKSUM
		var sum uint16
		for _, b := range privateKeyBytes {
			sum += uint16(b)
		}
		priv.Write([]byte{uint8(sum >> 8), uint8(sum)})
	}

	pk.encryptedData = make([]byte, len(privateKeyBytes))
	cfb.XORKeyStream(pk.encryptedData, privateKeyBytes)
	pk.Encrypted = true
	pk.PrivateKey = nil
	return err
}

func (pk *PrivateKey) serializePrivateKey(w io.Writer) (err error) {
	switch priv := pk.PrivateKey.(type) {
	case *rsa.PrivateKey:
		err = serializeRSAPrivateKey(w, priv)
	case *dsa.PrivateKey:
		err = serializeDSAPrivateKey(w, priv)
	case *elgamal.PrivateKey:
		err = serializeElGamalPrivateKey(w, priv)
	case *ecdsa.PrivateKey:
		err = serializeECDSAPrivateKey(w, priv)
	case *ed25519.PrivateKey:
		err = serializeEdDSAPrivateKey(w, priv)
	case *ecdh.PrivateKey:
		err = serializeECDHPrivateKey(w, priv)
	default:
		err = errors.InvalidArgumentError("unknown private key type")
	}
	return
}

func (pk *PrivateKey) parsePrivateKey(data []byte) (err error) {
	switch pk.PublicKey.PubKeyAlgo {
	case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoRSAEncryptOnly:
		return pk.parseRSAPrivateKey(data)
	case PubKeyAlgoDSA:
		return pk.parseDSAPrivateKey(data)
	case PubKeyAlgoElGamal:
		return pk.parseElGamalPrivateKey(data)
	case PubKeyAlgoECDSA:
		return pk.parseECDSAPrivateKey(data)
	case PubKeyAlgoECDH:
		return pk.parseECDHPrivateKey(data)
	case PubKeyAlgoEdDSA:
		return pk.parseEdDSAPrivateKey(data)
	}
	panic("impossible")
}

func (pk *PrivateKey) parseRSAPrivateKey(data []byte) (err error) {
	rsaPub := pk.PublicKey.PublicKey.(*rsa.PublicKey)
	rsaPriv := new(rsa.PrivateKey)
	rsaPriv.PublicKey = *rsaPub

	buf := bytes.NewBuffer(data)
	d := new(encoding.MPI)
	if _, err := d.ReadFrom(buf); err != nil {
		return err
	}

	p := new(encoding.MPI)
	if _, err := p.ReadFrom(buf); err != nil {
		return err
	}

	q := new(encoding.MPI)
	if _, err := q.ReadFrom(buf); err != nil {
		return err
	}

	rsaPriv.D = new(big.Int).SetBytes(d.Bytes())
	rsaPriv.Primes = make([]*big.Int, 2)
	rsaPriv.Primes[0] = new(big.Int).SetBytes(p.Bytes())
	rsaPriv.Primes[1] = new(big.Int).SetBytes(q.Bytes())
	if err := rsaPriv.Validate(); err != nil {
		return errors.KeyInvalidError(err.Error())
	}
	rsaPriv.Precompute()
	pk.PrivateKey = rsaPriv

	return nil
}

func (pk *PrivateKey) parseDSAPrivateKey(data []byte) (err error) {
	dsaPub := pk.PublicKey.PublicKey.(*dsa.PublicKey)
	dsaPriv := new(dsa.PrivateKey)
	dsaPriv.PublicKey = *dsaPub

	buf := bytes.NewBuffer(data)
	x := new(encoding.MPI)
	if _, err := x.ReadFrom(buf); err != nil {
		return err
	}

	dsaPriv.X = new(big.Int).SetBytes(x.Bytes())
	if err := validateDSAParameters(dsaPriv); err != nil {
		return err
	}
	pk.PrivateKey = dsaPriv

	return nil
}

func (pk *PrivateKey) parseElGamalPrivateKey(data []byte) (err error) {
	pub := pk.PublicKey.PublicKey.(*elgamal.PublicKey)
	priv := new(elgamal.PrivateKey)
	priv.PublicKey = *pub

	buf := bytes.NewBuffer(data)
	x := new(encoding.MPI)
	if _, err := x.ReadFrom(buf); err != nil {
		return err
	}

	priv.X = new(big.Int).SetBytes(x.Bytes())
	if err := validateElGamalParameters(priv); err != nil {
		return err
	}
	pk.PrivateKey = priv

	return nil
}

func (pk *PrivateKey) parseECDSAPrivateKey(data []byte) (err error) {
	ecdsaPub := pk.PublicKey.PublicKey.(*ecdsa.PublicKey)
	ecdsaPriv := new(ecdsa.PrivateKey)
	ecdsaPriv.PublicKey = *ecdsaPub

	buf := bytes.NewBuffer(data)
	d := new(encoding.MPI)
	if _, err := d.ReadFrom(buf); err != nil {
		return err
	}

	ecdsaPriv.D = new(big.Int).SetBytes(d.Bytes())
	if err := validateECDSAParameters(ecdsaPriv); err != nil {
		return err
	}
	pk.PrivateKey = ecdsaPriv

	return nil
}

func (pk *PrivateKey) parseECDHPrivateKey(data []byte) (err error) {
	ecdhPub := pk.PublicKey.PublicKey.(*ecdh.PublicKey)
	ecdhPriv := new(ecdh.PrivateKey)
	ecdhPriv.PublicKey = *ecdhPub

	buf := bytes.NewBuffer(data)
	d := new(encoding.MPI)
	if _, err := d.ReadFrom(buf); err != nil {
		return err
	}

	ecdhPriv.D = d.Bytes()
	if err := validateECDHParameters(ecdhPriv); err != nil {
		return err
	}
	pk.PrivateKey = ecdhPriv

	return nil
}

func (pk *PrivateKey) parseEdDSAPrivateKey(data []byte) (err error) {
	eddsaPub := pk.PublicKey.PublicKey.(*ed25519.PublicKey)
	eddsaPriv := make(ed25519.PrivateKey, ed25519.PrivateKeySize)

	buf := bytes.NewBuffer(data)
	d := new(encoding.MPI)
	if _, err := d.ReadFrom(buf); err != nil {
		return err
	}

	priv := d.Bytes()
	copy(eddsaPriv[32-len(priv):32], priv)
	copy(eddsaPriv[32:], (*eddsaPub)[:])
	if err := validateEdDSAParameters(&eddsaPriv); err != nil {
		return err
	}
	pk.PrivateKey = &eddsaPriv

	return nil
}

func validateECDSAParameters(priv *ecdsa.PrivateKey) error {
	return validateCommonECC(priv.Curve, priv.D.Bytes(), priv.X, priv.Y)
}

func validateECDHParameters(priv *ecdh.PrivateKey) error {
	if priv.CurveType != ecc.Curve25519 {
		return validateCommonECC(priv.Curve, priv.D, priv.X, priv.Y)
	}
	// Handle Curve25519
	Q := priv.X.Bytes()[1:]
	var d [32]byte
	// Copy reversed d
	l := len(priv.D)
	for i := 0; i < l; i++ {
		d[i] = priv.D[l-i-1]
	}
	var expectedQ [32]byte
	curve25519.ScalarBaseMult(&expectedQ, &d)
	if !bytes.Equal(Q, expectedQ[:]) {
		return errors.KeyInvalidError("ECDH curve25519: invalid point")
	}
	return nil
}

func validateCommonECC(curve elliptic.Curve, d []byte, X, Y *big.Int) error {
	// the public point should not be at infinity (0,0)
	zero := new(big.Int)
	if X.Cmp(zero) == 0 && Y.Cmp(zero) == 0 {
		return errors.KeyInvalidError(fmt.Sprintf("ecc (%s): infinity point", curve.Params().Name))
	}
	// re-derive the public point Q' = (X,Y) = dG
	// to compare to declared Q in public key
	expectedX, expectedY := curve.ScalarBaseMult(d)
	if X.Cmp(expectedX) != 0 || Y.Cmp(expectedY) != 0 {
		return errors.KeyInvalidError(fmt.Sprintf("ecc (%s): invalid point", curve.Params().Name))
	}
	return nil
}

func validateEdDSAParameters(priv *ed25519.PrivateKey) error {
	// In EdDSA, the serialized public point is stored as part of private key (together with the seed),
	// hence we can re-derive the key from the seed
	seed := priv.Seed()
	expectedPriv := ed25519.NewKeyFromSeed(seed)
	if !bytes.Equal(*priv, expectedPriv) {
		return errors.KeyInvalidError("eddsa: invalid point")
	}
	return nil
}

func validateDSAParameters(priv *dsa.PrivateKey) error {
	p := priv.P // group prime
	q := priv.Q // subgroup order
	g := priv.G // g has order q mod p
	x := priv.X // secret
	y := priv.Y // y == g**x mod p
	one := big.NewInt(1)
	// expect g, y >= 2 and g < p
	if g.Cmp(one) <= 0 || y.Cmp(one) <= 0 || g.Cmp(p) > 0 {
		return errors.KeyInvalidError("dsa: invalid group")
	}
	// expect p > q
	if p.Cmp(q) <= 0 {
		return errors.KeyInvalidError("dsa: invalid group prime")
	}
	// q should be large enough and divide p-1
	pSub1 := new(big.Int).Sub(p, one)
	if q.BitLen() < 150 || new(big.Int).Mod(pSub1, q).Cmp(big.NewInt(0)) != 0 {
		return errors.KeyInvalidError("dsa: invalid order")
	}
	// confirm that g has order q mod p
	if !q.ProbablyPrime(32) || new(big.Int).Exp(g, q, p).Cmp(one) != 0 {
		return errors.KeyInvalidError("dsa: invalid order")
	}
	// check y
	if new(big.Int).Exp(g, x, p).Cmp(y) != 0 {
		return errors.KeyInvalidError("dsa: mismatching values")
	}

	return nil
}

func validateElGamalParameters(priv *elgamal.PrivateKey) error {
	p := priv.P // group prime
	g := priv.G // g has order p-1 mod p
	x := priv.X // secret
	y := priv.Y // y == g**x mod p
	one := big.NewInt(1)
	// Expect g, y >= 2 and g < p
	if g.Cmp(one) <= 0 || y.Cmp(one) <= 0 || g.Cmp(p) > 0 {
		return errors.KeyInvalidError("elgamal: invalid group")
	}
	if p.BitLen() < 1024 {
		return errors.KeyInvalidError("elgamal: group order too small")
	}
	pSub1 := new(big.Int).Sub(p, one)
	if new(big.Int).Exp(g, pSub1, p).Cmp(one) != 0 {
		return errors.KeyInvalidError("elgamal: invalid group")
	}
	// Since p-1 is not prime, g might have a smaller order that divides p-1.
	// We cannot confirm the exact order of g, but we make sure it is not too small.
	gExpI := new(big.Int).Set(g)
	i := 1
	threshold := 2 << 17 // we want order > threshold
	for i < threshold {
		i++ // we check every order to make sure key validation is not easily bypassed by guessing y'
		gExpI.Mod(new(big.Int).Mul(gExpI, g), p)
		if gExpI.Cmp(one) == 0 {
			return errors.KeyInvalidError("elgamal: order too small")
		}
	}
	// Check y
	if new(big.Int).Exp(g, x, p).Cmp(y) != 0 {
		return errors.KeyInvalidError("elgamal: mismatching values")
	}

	return nil
}
07070100000225000081A4000000000000000000000001645E367C00000D07000000000000000000000000000000000000006300000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/private_key_test_data.go    package packet

// Generated with `gpg --export-secret-keys "Test Key 2"`
const privKeyRSAHex = "9501fe044cc349a8010400b70ca0010e98c090008d45d1ee8f9113bd5861fd57b88bacb7c68658747663f1e1a3b5a98f32fda6472373c024b97359cd2efc88ff60f77751adfbf6af5e615e6a1408cfad8bf0cea30b0d5f53aa27ad59089ba9b15b7ebc2777a25d7b436144027e3bcd203909f147d0e332b240cf63d3395f5dfe0df0a6c04e8655af7eacdf0011010001fe0303024a252e7d475fd445607de39a265472aa74a9320ba2dac395faa687e9e0336aeb7e9a7397e511b5afd9dc84557c80ac0f3d4d7bfec5ae16f20d41c8c84a04552a33870b930420e230e179564f6d19bb153145e76c33ae993886c388832b0fa042ddda7f133924f3854481533e0ede31d51278c0519b29abc3bf53da673e13e3e1214b52413d179d7f66deee35cac8eacb060f78379d70ef4af8607e68131ff529439668fc39c9ce6dfef8a5ac234d234802cbfb749a26107db26406213ae5c06d4673253a3cbee1fcbae58d6ab77e38d6e2c0e7c6317c48e054edadb5a40d0d48acb44643d998139a8a66bb820be1f3f80185bc777d14b5954b60effe2448a036d565c6bc0b915fcea518acdd20ab07bc1529f561c58cd044f723109b93f6fd99f876ff891d64306b5d08f48bab59f38695e9109c4dec34013ba3153488ce070268381ba923ee1eb77125b36afcb4347ec3478c8f2735b06ef17351d872e577fa95d0c397c88c71b59629a36aec"

// Generated by `gpg --export-secret-keys` followed by a manual extraction of
// the ElGamal subkey from the packets.
const privKeyElGamalHex = "9d0157044df9ee1a100400eb8e136a58ec39b582629cdadf830bc64e0a94ed8103ca8bb247b27b11b46d1d25297ef4bcc3071785ba0c0bedfe89eabc5287fcc0edf81ab5896c1c8e4b20d27d79813c7aede75320b33eaeeaa586edc00fd1036c10133e6ba0ff277245d0d59d04b2b3421b7244aca5f4a8d870c6f1c1fbff9e1c26699a860b9504f35ca1d700030503fd1ededd3b840795be6d9ccbe3c51ee42e2f39233c432b831ddd9c4e72b7025a819317e47bf94f9ee316d7273b05d5fcf2999c3a681f519b1234bbfa6d359b4752bd9c3f77d6b6456cde152464763414ca130f4e91d91041432f90620fec0e6d6b5116076c2985d5aeaae13be492b9b329efcaf7ee25120159a0a30cd976b42d7afe030302dae7eb80db744d4960c4df930d57e87fe81412eaace9f900e6c839817a614ddb75ba6603b9417c33ea7b6c93967dfa2bcff3fa3c74a5ce2c962db65b03aece14c96cbd0038fc"

// pkcs1PrivKeyHex is a PKCS#1, RSA private key.
// Generated by `openssl genrsa 1024 | openssl rsa -outform DER  | xxd -p`
const pkcs1PrivKeyHex = "3082025d02010002818100e98edfa1c3b35884a54d0b36a6a603b0290fa85e49e30fa23fc94fef9c6790bc4849928607aa48d809da326fb42a969d06ad756b98b9c1a90f5d4a2b6d0ac05953c97f4da3120164a21a679793ce181c906dc01d235cc085ddcdf6ea06c389b6ab8885dfd685959e693138856a68a7e5db263337ff82a088d583a897cf2d59e9020301000102818100b6d5c9eb70b02d5369b3ee5b520a14490b5bde8a317d36f7e4c74b7460141311d1e5067735f8f01d6f5908b2b96fbd881f7a1ab9a84d82753e39e19e2d36856be960d05ac9ef8e8782ea1b6d65aee28fdfe1d61451e8cff0adfe84322f12cf455028b581cf60eb9e0e140ba5d21aeba6c2634d7c65318b9a665fc01c3191ca21024100fa5e818da3705b0fa33278bb28d4b6f6050388af2d4b75ec9375dd91ccf2e7d7068086a8b82a8f6282e4fbbdb8a7f2622eb97295249d87acea7f5f816f54d347024100eecf9406d7dc49cdfb95ab1eff4064de84c7a30f64b2798936a0d2018ba9eb52e4b636f82e96c49cc63b80b675e91e40d1b2e4017d4b9adaf33ab3d9cf1c214f024100c173704ace742c082323066226a4655226819a85304c542b9dacbeacbf5d1881ee863485fcf6f59f3a604f9b42289282067447f2b13dfeed3eab7851fc81e0550240741fc41f3fc002b382eed8730e33c5d8de40256e4accee846667f536832f711ab1d4590e7db91a8a116ac5bff3be13d3f9243ff2e976662aa9b395d907f8e9c9024046a5696c9ef882363e06c9fa4e2f5b580906452befba03f4a99d0f873697ef1f851d2226ca7934b30b7c3e80cb634a67172bbbf4781735fe3e09263e2dd723e7"
 07070100000226000081A4000000000000000000000001645E367C00005C0C000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/public_key.go   // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package packet

import (
	"crypto"
	"crypto/dsa"
	"crypto/ecdsa"
	"crypto/elliptic"
	"crypto/rsa"
	"crypto/sha1"
	"crypto/sha256"
	_ "crypto/sha512"
	"encoding/binary"
	"fmt"
	"hash"
	"io"
	"math/big"
	"strconv"
	"time"

	"github.com/ProtonMail/go-crypto/openpgp/ecdh"
	"github.com/ProtonMail/go-crypto/openpgp/elgamal"
	"github.com/ProtonMail/go-crypto/openpgp/errors"
	"github.com/ProtonMail/go-crypto/openpgp/internal/algorithm"
	"github.com/ProtonMail/go-crypto/openpgp/internal/ecc"
	"github.com/ProtonMail/go-crypto/openpgp/internal/encoding"
	"golang.org/x/crypto/ed25519"
)

type kdfHashFunction byte
type kdfAlgorithm byte

// PublicKey represents an OpenPGP public key. See RFC 4880, section 5.5.2.
type PublicKey struct {
	Version      int
	CreationTime time.Time
	PubKeyAlgo   PublicKeyAlgorithm
	PublicKey    interface{} // *rsa.PublicKey, *dsa.PublicKey, *ecdsa.PublicKey or *eddsa.PublicKey
	Fingerprint  []byte
	KeyId        uint64
	IsSubkey     bool

	// RFC 4880 fields
	n, e, p, q, g, y encoding.Field

	// RFC 6637 fields
	// oid contains the OID byte sequence identifying the elliptic curve used
	oid encoding.Field

	// kdf stores key derivation function parameters
	// used for ECDH encryption. See RFC 6637, Section 9.
	kdf encoding.Field
}

// UpgradeToV5 updates the version of the key to v5, and updates all necessary
// fields.
func (pk *PublicKey) UpgradeToV5() {
	pk.Version = 5
	pk.setFingerprintAndKeyId()
}

// signingKey provides a convenient abstraction over signature verification
// for v3 and v4 public keys.
type signingKey interface {
	SerializeForHash(io.Writer) error
	SerializeSignaturePrefix(io.Writer)
	serializeWithoutHeaders(io.Writer) error
}

// NewRSAPublicKey returns a PublicKey that wraps the given rsa.PublicKey.
func NewRSAPublicKey(creationTime time.Time, pub *rsa.PublicKey) *PublicKey {
	pk := &PublicKey{
		Version:      4,
		CreationTime: creationTime,
		PubKeyAlgo:   PubKeyAlgoRSA,
		PublicKey:    pub,
		n:            new(encoding.MPI).SetBig(pub.N),
		e:            new(encoding.MPI).SetBig(big.NewInt(int64(pub.E))),
	}

	pk.setFingerprintAndKeyId()
	return pk
}

// NewDSAPublicKey returns a PublicKey that wraps the given dsa.PublicKey.
func NewDSAPublicKey(creationTime time.Time, pub *dsa.PublicKey) *PublicKey {
	pk := &PublicKey{
		Version:      4,
		CreationTime: creationTime,
		PubKeyAlgo:   PubKeyAlgoDSA,
		PublicKey:    pub,
		p:            new(encoding.MPI).SetBig(pub.P),
		q:            new(encoding.MPI).SetBig(pub.Q),
		g:            new(encoding.MPI).SetBig(pub.G),
		y:            new(encoding.MPI).SetBig(pub.Y),
	}

	pk.setFingerprintAndKeyId()
	return pk
}

// NewElGamalPublicKey returns a PublicKey that wraps the given elgamal.PublicKey.
func NewElGamalPublicKey(creationTime time.Time, pub *elgamal.PublicKey) *PublicKey {
	pk := &PublicKey{
		Version:      4,
		CreationTime: creationTime,
		PubKeyAlgo:   PubKeyAlgoElGamal,
		PublicKey:    pub,
		p:            new(encoding.MPI).SetBig(pub.P),
		g:            new(encoding.MPI).SetBig(pub.G),
		y:            new(encoding.MPI).SetBig(pub.Y),
	}

	pk.setFingerprintAndKeyId()
	return pk
}

func NewECDSAPublicKey(creationTime time.Time, pub *ecdsa.PublicKey) *PublicKey {
	pk := &PublicKey{
		Version:      4,
		CreationTime: creationTime,
		PubKeyAlgo:   PubKeyAlgoECDSA,
		PublicKey:    pub,
		p:            encoding.NewMPI(elliptic.Marshal(pub.Curve, pub.X, pub.Y)),
	}

	curveInfo := ecc.FindByCurve(pub.Curve)
	if curveInfo == nil {
		panic("unknown elliptic curve")
	}
	pk.oid = curveInfo.Oid
	pk.setFingerprintAndKeyId()
	return pk
}

func NewECDHPublicKey(creationTime time.Time, pub *ecdh.PublicKey) *PublicKey {
	var pk *PublicKey
	var curveInfo *ecc.CurveInfo
	var kdf = encoding.NewOID([]byte{0x1, pub.Hash.Id(), pub.Cipher.Id()})
	if pub.CurveType == ecc.Curve25519 {
		pk = &PublicKey{
			Version:      4,
			CreationTime: creationTime,
			PubKeyAlgo:   PubKeyAlgoECDH,
			PublicKey:    pub,
			p:            encoding.NewMPI(pub.X.Bytes()),
			kdf:          kdf,
		}
		curveInfo = ecc.FindByName("Curve25519")
	} else {
		pk = &PublicKey{
			Version:      4,
			CreationTime: creationTime,
			PubKeyAlgo:   PubKeyAlgoECDH,
			PublicKey:    pub,
			p:            encoding.NewMPI(elliptic.Marshal(pub.Curve, pub.X, pub.Y)),
			kdf:          kdf,
		}
		curveInfo = ecc.FindByCurve(pub.Curve)
	}
	if curveInfo == nil {
		panic("unknown elliptic curve")
	}
	pk.oid = curveInfo.Oid
	pk.setFingerprintAndKeyId()
	return pk
}

func NewEdDSAPublicKey(creationTime time.Time, pub *ed25519.PublicKey) *PublicKey {
	curveInfo := ecc.FindByName("Ed25519")
	pk := &PublicKey{
		Version:      4,
		CreationTime: creationTime,
		PubKeyAlgo:   PubKeyAlgoEdDSA,
		PublicKey:    pub,
		oid:          curveInfo.Oid,
		// Native point format, see draft-koch-eddsa-for-openpgp-04, Appendix B
		p: encoding.NewMPI(append([]byte{0x40}, *pub...)),
	}

	pk.setFingerprintAndKeyId()
	return pk
}

func (pk *PublicKey) parse(r io.Reader) (err error) {
	// RFC 4880, section 5.5.2
	var buf [6]byte
	_, err = readFull(r, buf[:])
	if err != nil {
		return
	}
	if buf[0] != 4 && buf[0] != 5 {
		return errors.UnsupportedError("public key version " + strconv.Itoa(int(buf[0])))
	}

	pk.Version = int(buf[0])
	if pk.Version == 5 {
		var n [4]byte
		_, err = readFull(r, n[:])
		if err != nil {
			return
		}
	}
	pk.CreationTime = time.Unix(int64(uint32(buf[1])<<24|uint32(buf[2])<<16|uint32(buf[3])<<8|uint32(buf[4])), 0)
	pk.PubKeyAlgo = PublicKeyAlgorithm(buf[5])
	switch pk.PubKeyAlgo {
	case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly:
		err = pk.parseRSA(r)
	case PubKeyAlgoDSA:
		err = pk.parseDSA(r)
	case PubKeyAlgoElGamal:
		err = pk.parseElGamal(r)
	case PubKeyAlgoECDSA:
		err = pk.parseECDSA(r)
	case PubKeyAlgoECDH:
		err = pk.parseECDH(r)
	case PubKeyAlgoEdDSA:
		err = pk.parseEdDSA(r)
	default:
		err = errors.UnsupportedError("public key type: " + strconv.Itoa(int(pk.PubKeyAlgo)))
	}
	if err != nil {
		return
	}

	pk.setFingerprintAndKeyId()
	return
}

func (pk *PublicKey) setFingerprintAndKeyId() {
	// RFC 4880, section 12.2
	if pk.Version == 5 {
		fingerprint := sha256.New()
		pk.SerializeForHash(fingerprint)
		pk.Fingerprint = make([]byte, 32)
		copy(pk.Fingerprint, fingerprint.Sum(nil))
		pk.KeyId = binary.BigEndian.Uint64(pk.Fingerprint[:8])
	} else {
		fingerprint := sha1.New()
		pk.SerializeForHash(fingerprint)
		pk.Fingerprint = make([]byte, 20)
		copy(pk.Fingerprint, fingerprint.Sum(nil))
		pk.KeyId = binary.BigEndian.Uint64(pk.Fingerprint[12:20])
	}
}

// parseRSA parses RSA public key material from the given Reader. See RFC 4880,
// section 5.5.2.
func (pk *PublicKey) parseRSA(r io.Reader) (err error) {
	pk.n = new(encoding.MPI)
	if _, err = pk.n.ReadFrom(r); err != nil {
		return
	}
	pk.e = new(encoding.MPI)
	if _, err = pk.e.ReadFrom(r); err != nil {
		return
	}

	if len(pk.e.Bytes()) > 3 {
		err = errors.UnsupportedError("large public exponent")
		return
	}
	rsa := &rsa.PublicKey{
		N: new(big.Int).SetBytes(pk.n.Bytes()),
		E: 0,
	}
	for i := 0; i < len(pk.e.Bytes()); i++ {
		rsa.E <<= 8
		rsa.E |= int(pk.e.Bytes()[i])
	}
	pk.PublicKey = rsa
	return
}

// parseDSA parses DSA public key material from the given Reader. See RFC 4880,
// section 5.5.2.
func (pk *PublicKey) parseDSA(r io.Reader) (err error) {
	pk.p = new(encoding.MPI)
	if _, err = pk.p.ReadFrom(r); err != nil {
		return
	}
	pk.q = new(encoding.MPI)
	if _, err = pk.q.ReadFrom(r); err != nil {
		return
	}
	pk.g = new(encoding.MPI)
	if _, err = pk.g.ReadFrom(r); err != nil {
		return
	}
	pk.y = new(encoding.MPI)
	if _, err = pk.y.ReadFrom(r); err != nil {
		return
	}

	dsa := new(dsa.PublicKey)
	dsa.P = new(big.Int).SetBytes(pk.p.Bytes())
	dsa.Q = new(big.Int).SetBytes(pk.q.Bytes())
	dsa.G = new(big.Int).SetBytes(pk.g.Bytes())
	dsa.Y = new(big.Int).SetBytes(pk.y.Bytes())
	pk.PublicKey = dsa
	return
}

// parseElGamal parses ElGamal public key material from the given Reader. See
// RFC 4880, section 5.5.2.
func (pk *PublicKey) parseElGamal(r io.Reader) (err error) {
	pk.p = new(encoding.MPI)
	if _, err = pk.p.ReadFrom(r); err != nil {
		return
	}
	pk.g = new(encoding.MPI)
	if _, err = pk.g.ReadFrom(r); err != nil {
		return
	}
	pk.y = new(encoding.MPI)
	if _, err = pk.y.ReadFrom(r); err != nil {
		return
	}

	elgamal := new(elgamal.PublicKey)
	elgamal.P = new(big.Int).SetBytes(pk.p.Bytes())
	elgamal.G = new(big.Int).SetBytes(pk.g.Bytes())
	elgamal.Y = new(big.Int).SetBytes(pk.y.Bytes())
	pk.PublicKey = elgamal
	return
}

// parseECDSA parses ECDSA public key material from the given Reader. See
// RFC 6637, Section 9.
func (pk *PublicKey) parseECDSA(r io.Reader) (err error) {
	pk.oid = new(encoding.OID)
	if _, err = pk.oid.ReadFrom(r); err != nil {
		return
	}
	pk.p = new(encoding.MPI)
	if _, err = pk.p.ReadFrom(r); err != nil {
		return
	}

	var c elliptic.Curve
	curveInfo := ecc.FindByOid(pk.oid)
	if curveInfo == nil || curveInfo.SigAlgorithm != ecc.ECDSA {
		return errors.UnsupportedError(fmt.Sprintf("unsupported oid: %x", pk.oid))
	}
	c = curveInfo.Curve
	x, y := elliptic.Unmarshal(c, pk.p.Bytes())
	if x == nil {
		return errors.UnsupportedError("failed to parse EC point")
	}
	pk.PublicKey = &ecdsa.PublicKey{Curve: c, X: x, Y: y}
	return
}

// parseECDH parses ECDH public key material from the given Reader. See
// RFC 6637, Section 9.
func (pk *PublicKey) parseECDH(r io.Reader) (err error) {
	pk.oid = new(encoding.OID)
	if _, err = pk.oid.ReadFrom(r); err != nil {
		return
	}
	pk.p = new(encoding.MPI)
	if _, err = pk.p.ReadFrom(r); err != nil {
		return
	}
	pk.kdf = new(encoding.OID)
	if _, err = pk.kdf.ReadFrom(r); err != nil {
		return
	}

	curveInfo := ecc.FindByOid(pk.oid)
	if curveInfo == nil {
		return errors.UnsupportedError(fmt.Sprintf("unsupported oid: %x", pk.oid))
	}

	c := curveInfo.Curve
	cType := curveInfo.CurveType

	var x, y *big.Int
	if cType == ecc.Curve25519 {
		x = new(big.Int)
		x.SetBytes(pk.p.Bytes())
	} else {
		x, y = elliptic.Unmarshal(c, pk.p.Bytes())
	}
	if x == nil {
		return errors.UnsupportedError("failed to parse EC point")
	}

	if kdfLen := len(pk.kdf.Bytes()); kdfLen < 3 {
		return errors.UnsupportedError("unsupported ECDH KDF length: " + strconv.Itoa(kdfLen))
	}
	if reserved := pk.kdf.Bytes()[0]; reserved != 0x01 {
		return errors.UnsupportedError("unsupported KDF reserved field: " + strconv.Itoa(int(reserved)))
	}
	kdfHash, ok := algorithm.HashById[pk.kdf.Bytes()[1]]
	if !ok {
		return errors.UnsupportedError("unsupported ECDH KDF hash: " + strconv.Itoa(int(pk.kdf.Bytes()[1])))
	}
	kdfCipher, ok := algorithm.CipherById[pk.kdf.Bytes()[2]]
	if !ok {
		return errors.UnsupportedError("unsupported ECDH KDF cipher: " + strconv.Itoa(int(pk.kdf.Bytes()[2])))
	}

	pk.PublicKey = &ecdh.PublicKey{
		CurveType: cType,
		Curve:     c,
		X:         x,
		Y:         y,
		KDF: ecdh.KDF{
			Hash:   kdfHash,
			Cipher: kdfCipher,
		},
	}
	return
}

func (pk *PublicKey) parseEdDSA(r io.Reader) (err error) {
	pk.oid = new(encoding.OID)
	if _, err = pk.oid.ReadFrom(r); err != nil {
		return
	}
	curveInfo := ecc.FindByOid(pk.oid)
	if curveInfo == nil || curveInfo.SigAlgorithm != ecc.EdDSA {
		return errors.UnsupportedError(fmt.Sprintf("unsupported oid: %x", pk.oid))
	}
	pk.p = new(encoding.MPI)
	if _, err = pk.p.ReadFrom(r); err != nil {
		return
	}

	eddsa := make(ed25519.PublicKey, ed25519.PublicKeySize)
	switch flag := pk.p.Bytes()[0]; flag {
	case 0x04:
		// TODO: see _grcy_ecc_eddsa_ensure_compact in grcypt
		return errors.UnsupportedError("unsupported EdDSA compression: " + strconv.Itoa(int(flag)))
	case 0x40:
		copy(eddsa[:], pk.p.Bytes()[1:])
	default:
		return errors.UnsupportedError("unsupported EdDSA compression: " + strconv.Itoa(int(flag)))
	}

	pk.PublicKey = &eddsa
	return
}

// SerializeForHash serializes the PublicKey to w with the special packet
// header format needed for hashing.
func (pk *PublicKey) SerializeForHash(w io.Writer) error {
	pk.SerializeSignaturePrefix(w)
	return pk.serializeWithoutHeaders(w)
}

// SerializeSignaturePrefix writes the prefix for this public key to the given Writer.
// The prefix is used when calculating a signature over this public key. See
// RFC 4880, section 5.2.4.
func (pk *PublicKey) SerializeSignaturePrefix(w io.Writer) {
	var pLength = pk.algorithmSpecificByteCount()
	if pk.Version == 5 {
		pLength += 10 // version, timestamp (4), algorithm, key octet count (4).
		w.Write([]byte{
			0x9A,
			byte(pLength >> 24),
			byte(pLength >> 16),
			byte(pLength >> 8),
			byte(pLength),
		})
		return
	}
	pLength += 6
	w.Write([]byte{0x99, byte(pLength >> 8), byte(pLength)})
}

func (pk *PublicKey) Serialize(w io.Writer) (err error) {
	length := 6 // 6 byte header
	length += pk.algorithmSpecificByteCount()
	if pk.Version == 5 {
		length += 4 // octet key count
	}
	packetType := packetTypePublicKey
	if pk.IsSubkey {
		packetType = packetTypePublicSubkey
	}
	err = serializeHeader(w, packetType, length)
	if err != nil {
		return
	}
	return pk.serializeWithoutHeaders(w)
}

func (pk *PublicKey) algorithmSpecificByteCount() int {
	length := 0
	switch pk.PubKeyAlgo {
	case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly:
		length += int(pk.n.EncodedLength())
		length += int(pk.e.EncodedLength())
	case PubKeyAlgoDSA:
		length += int(pk.p.EncodedLength())
		length += int(pk.q.EncodedLength())
		length += int(pk.g.EncodedLength())
		length += int(pk.y.EncodedLength())
	case PubKeyAlgoElGamal:
		length += int(pk.p.EncodedLength())
		length += int(pk.g.EncodedLength())
		length += int(pk.y.EncodedLength())
	case PubKeyAlgoECDSA:
		length += int(pk.oid.EncodedLength())
		length += int(pk.p.EncodedLength())
	case PubKeyAlgoECDH:
		length += int(pk.oid.EncodedLength())
		length += int(pk.p.EncodedLength())
		length += int(pk.kdf.EncodedLength())
	case PubKeyAlgoEdDSA:
		length += int(pk.oid.EncodedLength())
		length += int(pk.p.EncodedLength())
	default:
		panic("unknown public key algorithm")
	}
	return length
}

// serializeWithoutHeaders marshals the PublicKey to w in the form of an
// OpenPGP public key packet, not including the packet header.
func (pk *PublicKey) serializeWithoutHeaders(w io.Writer) (err error) {
	t := uint32(pk.CreationTime.Unix())
	if _, err = w.Write([]byte{
		byte(pk.Version),
		byte(t >> 24), byte(t >> 16), byte(t >> 8), byte(t),
		byte(pk.PubKeyAlgo),
	}); err != nil {
		return
	}

	if pk.Version == 5 {
		n := pk.algorithmSpecificByteCount()
		if _, err = w.Write([]byte{
			byte(n >> 24), byte(n >> 16), byte(n >> 8), byte(n),
		}); err != nil {
			return
		}
	}

	switch pk.PubKeyAlgo {
	case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly:
		if _, err = w.Write(pk.n.EncodedBytes()); err != nil {
			return
		}
		_, err = w.Write(pk.e.EncodedBytes())
		return
	case PubKeyAlgoDSA:
		if _, err = w.Write(pk.p.EncodedBytes()); err != nil {
			return
		}
		if _, err = w.Write(pk.q.EncodedBytes()); err != nil {
			return
		}
		if _, err = w.Write(pk.g.EncodedBytes()); err != nil {
			return
		}
		_, err = w.Write(pk.y.EncodedBytes())
		return
	case PubKeyAlgoElGamal:
		if _, err = w.Write(pk.p.EncodedBytes()); err != nil {
			return
		}
		if _, err = w.Write(pk.g.EncodedBytes()); err != nil {
			return
		}
		_, err = w.Write(pk.y.EncodedBytes())
		return
	case PubKeyAlgoECDSA:
		if _, err = w.Write(pk.oid.EncodedBytes()); err != nil {
			return
		}
		_, err = w.Write(pk.p.EncodedBytes())
		return
	case PubKeyAlgoECDH:
		if _, err = w.Write(pk.oid.EncodedBytes()); err != nil {
			return
		}
		if _, err = w.Write(pk.p.EncodedBytes()); err != nil {
			return
		}
		_, err = w.Write(pk.kdf.EncodedBytes())
		return
	case PubKeyAlgoEdDSA:
		if _, err = w.Write(pk.oid.EncodedBytes()); err != nil {
			return
		}
		_, err = w.Write(pk.p.EncodedBytes())
		return
	}
	return errors.InvalidArgumentError("bad public-key algorithm")
}

// CanSign returns true iff this public key can generate signatures
func (pk *PublicKey) CanSign() bool {
	return pk.PubKeyAlgo != PubKeyAlgoRSAEncryptOnly && pk.PubKeyAlgo != PubKeyAlgoElGamal && pk.PubKeyAlgo != PubKeyAlgoECDH
}

// VerifySignature returns nil iff sig is a valid signature, made by this
// public key, of the data hashed into signed. signed is mutated by this call.
func (pk *PublicKey) VerifySignature(signed hash.Hash, sig *Signature) (err error) {
	if !pk.CanSign() {
		return errors.InvalidArgumentError("public key cannot generate signatures")
	}
	if sig.Version == 5 && (sig.SigType == 0x00 || sig.SigType == 0x01) {
		sig.AddMetadataToHashSuffix()
	}
	signed.Write(sig.HashSuffix)
	hashBytes := signed.Sum(nil)
	if hashBytes[0] != sig.HashTag[0] || hashBytes[1] != sig.HashTag[1] {
		return errors.SignatureError("hash tag doesn't match")
	}

	if pk.PubKeyAlgo != sig.PubKeyAlgo {
		return errors.InvalidArgumentError("public key and signature use different algorithms")
	}

	switch pk.PubKeyAlgo {
	case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly:
		rsaPublicKey, _ := pk.PublicKey.(*rsa.PublicKey)
		err = rsa.VerifyPKCS1v15(rsaPublicKey, sig.Hash, hashBytes, padToKeySize(rsaPublicKey, sig.RSASignature.Bytes()))
		if err != nil {
			return errors.SignatureError("RSA verification failure")
		}
		return nil
	case PubKeyAlgoDSA:
		dsaPublicKey, _ := pk.PublicKey.(*dsa.PublicKey)
		// Need to truncate hashBytes to match FIPS 186-3 section 4.6.
		subgroupSize := (dsaPublicKey.Q.BitLen() + 7) / 8
		if len(hashBytes) > subgroupSize {
			hashBytes = hashBytes[:subgroupSize]
		}
		if !dsa.Verify(dsaPublicKey, hashBytes, new(big.Int).SetBytes(sig.DSASigR.Bytes()), new(big.Int).SetBytes(sig.DSASigS.Bytes())) {
			return errors.SignatureError("DSA verification failure")
		}
		return nil
	case PubKeyAlgoECDSA:
		ecdsaPublicKey := pk.PublicKey.(*ecdsa.PublicKey)
		if !ecdsa.Verify(ecdsaPublicKey, hashBytes, new(big.Int).SetBytes(sig.ECDSASigR.Bytes()), new(big.Int).SetBytes(sig.ECDSASigS.Bytes())) {
			return errors.SignatureError("ECDSA verification failure")
		}
		return nil
	case PubKeyAlgoEdDSA:
		eddsaPublicKey := pk.PublicKey.(*ed25519.PublicKey)

		sigR := sig.EdDSASigR.Bytes()
		sigS := sig.EdDSASigS.Bytes()

		eddsaSig := make([]byte, ed25519.SignatureSize)
		copy(eddsaSig[32-len(sigR):32], sigR)
		copy(eddsaSig[64-len(sigS):], sigS)

		if !ed25519.Verify(*eddsaPublicKey, hashBytes, eddsaSig) {
			return errors.SignatureError("EdDSA verification failure")
		}
		return nil
	default:
		return errors.SignatureError("Unsupported public key algorithm used in signature")
	}
}

// keySignatureHash returns a Hash of the message that needs to be signed for
// pk to assert a subkey relationship to signed.
func keySignatureHash(pk, signed signingKey, hashFunc crypto.Hash) (h hash.Hash, err error) {
	if !hashFunc.Available() {
		return nil, errors.UnsupportedError("hash function")
	}
	h = hashFunc.New()

	// RFC 4880, section 5.2.4
	err = pk.SerializeForHash(h)
	if err != nil {
		return nil, err
	}

	err = signed.SerializeForHash(h)
	return
}

// VerifyKeySignature returns nil iff sig is a valid signature, made by this
// public key, of signed.
func (pk *PublicKey) VerifyKeySignature(signed *PublicKey, sig *Signature) error {
	h, err := keySignatureHash(pk, signed, sig.Hash)
	if err != nil {
		return err
	}
	if err = pk.VerifySignature(h, sig); err != nil {
		return err
	}

	if sig.FlagSign {
		// Signing subkeys must be cross-signed. See
		// https://www.gnupg.org/faq/subkey-cross-certify.html.
		if sig.EmbeddedSignature == nil {
			return errors.StructuralError("signing subkey is missing cross-signature")
		}
		// Verify the cross-signature. This is calculated over the same
		// data as the main signature, so we cannot just recursively
		// call signed.VerifyKeySignature(...)
		if h, err = keySignatureHash(pk, signed, sig.EmbeddedSignature.Hash); err != nil {
			return errors.StructuralError("error while hashing for cross-signature: " + err.Error())
		}
		if err := signed.VerifySignature(h, sig.EmbeddedSignature); err != nil {
			return errors.StructuralError("error while verifying cross-signature: " + err.Error())
		}
	}

	return nil
}

func keyRevocationHash(pk signingKey, hashFunc crypto.Hash) (h hash.Hash, err error) {
	if !hashFunc.Available() {
		return nil, errors.UnsupportedError("hash function")
	}
	h = hashFunc.New()

	// RFC 4880, section 5.2.4
	err = pk.SerializeForHash(h)

	return
}

// VerifyRevocationSignature returns nil iff sig is a valid signature, made by this
// public key.
func (pk *PublicKey) VerifyRevocationSignature(sig *Signature) (err error) {
	h, err := keyRevocationHash(pk, sig.Hash)
	if err != nil {
		return err
	}
	return pk.VerifySignature(h, sig)
}

// VerifySubkeyRevocationSignature returns nil iff sig is a valid subkey revocation signature,
// made by this public key, of signed.
func (pk *PublicKey) VerifySubkeyRevocationSignature(sig *Signature, signed *PublicKey) (err error) {
	h, err := keySignatureHash(pk, signed, sig.Hash)
	if err != nil {
		return err
	}
	return pk.VerifySignature(h, sig)
}

// userIdSignatureHash returns a Hash of the message that needs to be signed
// to assert that pk is a valid key for id.
func userIdSignatureHash(id string, pk *PublicKey, hashFunc crypto.Hash) (h hash.Hash, err error) {
	if !hashFunc.Available() {
		return nil, errors.UnsupportedError("hash function")
	}
	h = hashFunc.New()

	// RFC 4880, section 5.2.4
	pk.SerializeSignaturePrefix(h)
	pk.serializeWithoutHeaders(h)

	var buf [5]byte
	buf[0] = 0xb4
	buf[1] = byte(len(id) >> 24)
	buf[2] = byte(len(id) >> 16)
	buf[3] = byte(len(id) >> 8)
	buf[4] = byte(len(id))
	h.Write(buf[:])
	h.Write([]byte(id))

	return
}

// VerifyUserIdSignature returns nil iff sig is a valid signature, made by this
// public key, that id is the identity of pub.
func (pk *PublicKey) VerifyUserIdSignature(id string, pub *PublicKey, sig *Signature) (err error) {
	h, err := userIdSignatureHash(id, pub, sig.Hash)
	if err != nil {
		return err
	}
	return pk.VerifySignature(h, sig)
}

// KeyIdString returns the public key's fingerprint in capital hex
// (e.g. "6C7EE1B8621CC013").
func (pk *PublicKey) KeyIdString() string {
	return fmt.Sprintf("%X", pk.Fingerprint[12:20])
}

// KeyIdShortString returns the short form of public key's fingerprint
// in capital hex, as shown by gpg --list-keys (e.g. "621CC013").
func (pk *PublicKey) KeyIdShortString() string {
	return fmt.Sprintf("%X", pk.Fingerprint[16:20])
}

// BitLength returns the bit length for the given public key.
func (pk *PublicKey) BitLength() (bitLength uint16, err error) {
	switch pk.PubKeyAlgo {
	case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly:
		bitLength = pk.n.BitLength()
	case PubKeyAlgoDSA:
		bitLength = pk.p.BitLength()
	case PubKeyAlgoElGamal:
		bitLength = pk.p.BitLength()
	case PubKeyAlgoECDSA:
		bitLength = pk.p.BitLength()
	case PubKeyAlgoECDH:
		bitLength = pk.p.BitLength()
	case PubKeyAlgoEdDSA:
		bitLength = pk.p.BitLength()
	default:
		err = errors.InvalidArgumentError("bad public-key algorithm")
	}
	return
}

// KeyExpired returns whether sig is a self-signature of a key that has
// expired or is created in the future.
func (pk *PublicKey) KeyExpired(sig *Signature, currentTime time.Time) bool {
	if pk.CreationTime.After(currentTime) {
		return true
	}
	if sig.KeyLifetimeSecs == nil || *sig.KeyLifetimeSecs == 0 {
		return false
	}
	expiry := pk.CreationTime.Add(time.Duration(*sig.KeyLifetimeSecs) * time.Second)
	return currentTime.After(expiry)
}
07070100000227000081A4000000000000000000000001645E367C00000F45000000000000000000000000000000000000006200000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/public_key_test_data.go package packet

const rsaFingerprintHex = "5fb74b1d03b1e3cb31bc2f8aa34d7e18c20c31bb"

const rsaPkDataHex = "988d044d3c5c10010400b1d13382944bd5aba23a4312968b5095d14f947f600eb478e14a6fcb16b0e0cac764884909c020bc495cfcc39a935387c661507bdb236a0612fb582cac3af9b29cc2c8c70090616c41b662f4da4c1201e195472eb7f4ae1ccbcbf9940fe21d985e379a5563dde5b9a23d35f1cfaa5790da3b79db26f23695107bfaca8e7b5bcd0011010001"

const dsaFingerprintHex = "eece4c094db002103714c63c8e8fbe54062f19ed"

const dsaPkDataHex = "9901a2044d432f89110400cd581334f0d7a1e1bdc8b9d6d8c0baf68793632735d2bb0903224cbaa1dfbf35a60ee7a13b92643421e1eb41aa8d79bea19a115a677f6b8ba3c7818ce53a6c2a24a1608bd8b8d6e55c5090cbde09dd26e356267465ae25e69ec8bdd57c7bbb2623e4d73336f73a0a9098f7f16da2e25252130fd694c0e8070c55a812a423ae7f00a0ebf50e70c2f19c3520a551bd4b08d30f23530d3d03ff7d0bf4a53a64a09dc5e6e6e35854b7d70c882b0c60293401958b1bd9e40abec3ea05ba87cf64899299d4bd6aa7f459c201d3fbbd6c82004bdc5e8a9eb8082d12054cc90fa9d4ec251a843236a588bf49552441817436c4f43326966fe85447d4e6d0acf8fa1ef0f014730770603ad7634c3088dc52501c237328417c31c89ed70400b2f1a98b0bf42f11fefc430704bebbaa41d9f355600c3facee1e490f64208e0e094ea55e3a598a219a58500bf78ac677b670a14f4e47e9cf8eab4f368cc1ddcaa18cc59309d4cc62dd4f680e73e6cc3e1ce87a84d0925efbcb26c575c093fc42eecf45135fabf6403a25c2016e1774c0484e440a18319072c617cc97ac0a3bb0"

const ecdsaFingerprintHex = "9892270b38b8980b05c8d56d43fe956c542ca00b"

const ecdsaPkDataHex = "9893045071c29413052b8104002304230401f4867769cedfa52c325018896245443968e52e51d0c2df8d939949cb5b330f2921711fbee1c9b9dddb95d15cb0255e99badeddda7cc23d9ddcaacbc290969b9f24019375d61c2e4e3b36953a28d8b2bc95f78c3f1d592fb24499be348656a7b17e3963187b4361afe497bc5f9f81213f04069f8e1fb9e6a6290ae295ca1a92b894396cb4"

const ecdhFingerprintHex = "722354df2475a42164d1d49faa8b938f9a201946"

const ecdhPkDataHex = "b90073044d53059212052b810400220303042faa84024a20b6735c4897efa5bfb41bf85b7eefeab5ca0cb9ffc8ea04a46acb25534a577694f9e25340a4ab5223a9dd1eda530c8aa2e6718db10d7e672558c7736fe09369ea5739a2a3554bf16d41faa50562f11c6d39bbd5dffb6b9a9ec91803010909"

const eddsaFingerprintHex = "b2d5e5ec0e6deca6bc8eeeb00907e75e1dd99ad8"

const eddsaPkDataHex = "98330456e2132b16092b06010401da470f01010740bbda39266affa511a8c2d02edf690fb784b0499c4406185811a163539ef11dc1b41d74657374696e67203c74657374696e674074657374696e672e636f6d3e8879041316080021050256e2132b021b03050b09080702061508090a0b020416020301021e01021780000a09100907e75e1dd99ad86d0c00fe39d2008359352782bc9b61ac382584cd8eff3f57a18c2287e3afeeb05d1f04ba00fe2d0bc1ddf3ff8adb9afa3e7d9287244b4ec567f3db4d60b74a9b5465ed528203"

// Source: https://sites.google.com/site/brainhub/pgpecckeys#TOC-ECC-NIST-P-384-key
const ecc384PubHex = `99006f044d53059213052b81040022030304f6b8c5aced5b84ef9f4a209db2e4a9dfb70d28cb8c10ecd57674a9fa5a67389942b62d5e51367df4c7bfd3f8e500feecf07ed265a621a8ebbbe53e947ec78c677eba143bd1533c2b350e1c29f82313e1e1108eba063be1e64b10e6950e799c2db42465635f6473615f64685f333834203c6f70656e70677040627261696e6875622e6f72673e8900cb04101309005305024d530592301480000000002000077072656665727265642d656d61696c2d656e636f64696e67407067702e636f6d7067706d696d65040b090807021901051b03000000021602051e010000000415090a08000a0910098033880f54719fca2b0180aa37350968bd5f115afd8ce7bc7b103822152dbff06d0afcda835329510905b98cb469ba208faab87c7412b799e7b633017f58364ea480e8a1a3f253a0c5f22c446e8be9a9fce6210136ee30811abbd49139de28b5bdf8dc36d06ae748579e9ff503b90073044d53059212052b810400220303042faa84024a20b6735c4897efa5bfb41bf85b7eefeab5ca0cb9ffc8ea04a46acb25534a577694f9e25340a4ab5223a9dd1eda530c8aa2e6718db10d7e672558c7736fe09369ea5739a2a3554bf16d41faa50562f11c6d39bbd5dffb6b9a9ec9180301090989008404181309000c05024d530592051b0c000000000a0910098033880f54719f80970180eee7a6d8fcee41ee4f9289df17f9bcf9d955dca25c583b94336f3a2b2d4986dc5cf417b8d2dc86f741a9e1a6d236c0e3017d1c76575458a0cfb93ae8a2b274fcc65ceecd7a91eec83656ba13219969f06945b48c56bd04152c3a0553c5f2f4bd1267`
   07070100000228000081A4000000000000000000000001645E367C000009C1000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/reader.go   // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package packet

import (
	"io"

	"github.com/ProtonMail/go-crypto/openpgp/errors"
)

// Reader reads packets from an io.Reader and allows packets to be 'unread' so
// that they result from the next call to Next.
type Reader struct {
	q       []Packet
	readers []io.Reader
}

// New io.Readers are pushed when a compressed or encrypted packet is processed
// and recursively treated as a new source of packets. However, a carefully
// crafted packet can trigger an infinite recursive sequence of packets. See
// http://mumble.net/~campbell/misc/pgp-quine
// https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2013-4402
// This constant limits the number of recursive packets that may be pushed.
const maxReaders = 32

// Next returns the most recently unread Packet, or reads another packet from
// the top-most io.Reader. Unknown packet types are skipped.
func (r *Reader) Next() (p Packet, err error) {
	if len(r.q) > 0 {
		p = r.q[len(r.q)-1]
		r.q = r.q[:len(r.q)-1]
		return
	}

	for len(r.readers) > 0 {
		p, err = Read(r.readers[len(r.readers)-1])
		if err == nil {
			return
		}
		if err == io.EOF {
			r.readers = r.readers[:len(r.readers)-1]
			continue
		}
		// TODO: Add strict mode that rejects unknown packets, instead of ignoring them.
		if _, ok := err.(errors.UnknownPacketTypeError); ok {
			continue
		}
		if _, ok := err.(errors.UnsupportedError); ok {
			switch p.(type) {
			case *SymmetricallyEncrypted, *AEADEncrypted, *Compressed, *LiteralData:
				return nil, err
			}
			continue
		}
		return nil, err
	}

	return nil, io.EOF
}

// Push causes the Reader to start reading from a new io.Reader. When an EOF
// error is seen from the new io.Reader, it is popped and the Reader continues
// to read from the next most recent io.Reader. Push returns a StructuralError
// if pushing the reader would exceed the maximum recursion level, otherwise it
// returns nil.
func (r *Reader) Push(reader io.Reader) (err error) {
	if len(r.readers) >= maxReaders {
		return errors.StructuralError("too many layers of packets")
	}
	r.readers = append(r.readers, reader)
	return nil
}

// Unread causes the given Packet to be returned from the next call to Next.
func (r *Reader) Unread(p Packet) {
	r.q = append(r.q, p)
}

func NewReader(r io.Reader) *Reader {
	return &Reader{
		q:       nil,
		readers: []io.Reader{r},
	}
}
   07070100000229000081A4000000000000000000000001645E367C000079BA000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/signature.go    // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package packet

import (
	"bytes"
	"crypto"
	"crypto/dsa"
	"crypto/ecdsa"
	"encoding/asn1"
	"encoding/binary"
	"hash"
	"io"
	"math/big"
	"strconv"
	"time"

	"github.com/ProtonMail/go-crypto/openpgp/errors"
	"github.com/ProtonMail/go-crypto/openpgp/internal/encoding"
	"github.com/ProtonMail/go-crypto/openpgp/s2k"
)

const (
	// See RFC 4880, section 5.2.3.21 for details.
	KeyFlagCertify = 1 << iota
	KeyFlagSign
	KeyFlagEncryptCommunications
	KeyFlagEncryptStorage
	KeyFlagSplitKey
	KeyFlagAuthenticate
	_
	KeyFlagGroupKey
)

// Signature represents a signature. See RFC 4880, section 5.2.
type Signature struct {
	Version    int
	SigType    SignatureType
	PubKeyAlgo PublicKeyAlgorithm
	Hash       crypto.Hash

	// HashSuffix is extra data that is hashed in after the signed data.
	HashSuffix []byte
	// HashTag contains the first two bytes of the hash for fast rejection
	// of bad signed data.
	HashTag [2]byte

	// Metadata includes format, filename and time, and is protected by v5
	// signatures of type 0x00 or 0x01. This metadata is included into the hash
	// computation; if nil, six 0x00 bytes are used instead. See section 5.2.4.
	Metadata *LiteralData

	CreationTime time.Time

	RSASignature         encoding.Field
	DSASigR, DSASigS     encoding.Field
	ECDSASigR, ECDSASigS encoding.Field
	EdDSASigR, EdDSASigS encoding.Field

	// rawSubpackets contains the unparsed subpackets, in order.
	rawSubpackets []outputSubpacket

	// The following are optional so are nil when not included in the
	// signature.

	SigLifetimeSecs, KeyLifetimeSecs                        *uint32
	PreferredSymmetric, PreferredHash, PreferredCompression []uint8
	PreferredAEAD                                           []uint8
	IssuerKeyId                                             *uint64
	IssuerFingerprint                                       []byte
	SignerUserId                                            *string
	IsPrimaryId                                             *bool

	// PolicyURI can be set to the URI of a document that describes the
	// policy under which the signature was issued. See RFC 4880, section
	// 5.2.3.20 for details.
	PolicyURI string

	// FlagsValid is set if any flags were given. See RFC 4880, section
	// 5.2.3.21 for details.
	FlagsValid                                                                                                         bool
	FlagCertify, FlagSign, FlagEncryptCommunications, FlagEncryptStorage, FlagSplitKey, FlagAuthenticate, FlagGroupKey bool

	// RevocationReason is set if this signature has been revoked.
	// See RFC 4880, section 5.2.3.23 for details.
	RevocationReason     *ReasonForRevocation
	RevocationReasonText string

	// In a self-signature, these flags are set there is a features subpacket
	// indicating that the issuer implementation supports these features
	// (section 5.2.5.25).
	MDC, AEAD, V5Keys bool

	// EmbeddedSignature, if non-nil, is a signature of the parent key, by
	// this key. This prevents an attacker from claiming another's signing
	// subkey as their own.
	EmbeddedSignature *Signature

	outSubpackets []outputSubpacket
}

func (sig *Signature) parse(r io.Reader) (err error) {
	// RFC 4880, section 5.2.3
	var buf [5]byte
	_, err = readFull(r, buf[:1])
	if err != nil {
		return
	}
	if buf[0] != 4 && buf[0] != 5 {
		err = errors.UnsupportedError("signature packet version " + strconv.Itoa(int(buf[0])))
		return
	}
	sig.Version = int(buf[0])
	_, err = readFull(r, buf[:5])
	if err != nil {
		return
	}
	sig.SigType = SignatureType(buf[0])
	sig.PubKeyAlgo = PublicKeyAlgorithm(buf[1])
	switch sig.PubKeyAlgo {
	case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoDSA, PubKeyAlgoECDSA, PubKeyAlgoEdDSA:
	default:
		err = errors.UnsupportedError("public key algorithm " + strconv.Itoa(int(sig.PubKeyAlgo)))
		return
	}

	var ok bool
	sig.Hash, ok = s2k.HashIdToHash(buf[2])
	if !ok {
		return errors.UnsupportedError("hash function " + strconv.Itoa(int(buf[2])))
	}

	hashedSubpacketsLength := int(buf[3])<<8 | int(buf[4])
	hashedSubpackets := make([]byte, hashedSubpacketsLength)
	_, err = readFull(r, hashedSubpackets)
	if err != nil {
		return
	}
	sig.buildHashSuffix(hashedSubpackets)
	err = parseSignatureSubpackets(sig, hashedSubpackets, true)
	if err != nil {
		return
	}

	_, err = readFull(r, buf[:2])
	if err != nil {
		return
	}
	unhashedSubpacketsLength := int(buf[0])<<8 | int(buf[1])
	unhashedSubpackets := make([]byte, unhashedSubpacketsLength)
	_, err = readFull(r, unhashedSubpackets)
	if err != nil {
		return
	}
	err = parseSignatureSubpackets(sig, unhashedSubpackets, false)
	if err != nil {
		return
	}

	_, err = readFull(r, sig.HashTag[:2])
	if err != nil {
		return
	}

	switch sig.PubKeyAlgo {
	case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly:
		sig.RSASignature = new(encoding.MPI)
		_, err = sig.RSASignature.ReadFrom(r)
	case PubKeyAlgoDSA:
		sig.DSASigR = new(encoding.MPI)
		if _, err = sig.DSASigR.ReadFrom(r); err != nil {
			return
		}

		sig.DSASigS = new(encoding.MPI)
		_, err = sig.DSASigS.ReadFrom(r)
	case PubKeyAlgoECDSA:
		sig.ECDSASigR = new(encoding.MPI)
		if _, err = sig.ECDSASigR.ReadFrom(r); err != nil {
			return
		}

		sig.ECDSASigS = new(encoding.MPI)
		_, err = sig.ECDSASigS.ReadFrom(r)
	case PubKeyAlgoEdDSA:
		sig.EdDSASigR = new(encoding.MPI)
		if _, err = sig.EdDSASigR.ReadFrom(r); err != nil {
			return
		}

		sig.EdDSASigS = new(encoding.MPI)
		if _, err = sig.EdDSASigS.ReadFrom(r); err != nil {
			return
		}
	default:
		panic("unreachable")
	}
	return
}

// parseSignatureSubpackets parses subpackets of the main signature packet. See
// RFC 4880, section 5.2.3.1.
func parseSignatureSubpackets(sig *Signature, subpackets []byte, isHashed bool) (err error) {
	for len(subpackets) > 0 {
		subpackets, err = parseSignatureSubpacket(sig, subpackets, isHashed)
		if err != nil {
			return
		}
	}

	if sig.CreationTime.IsZero() {
		err = errors.StructuralError("no creation time in signature")
	}

	return
}

type signatureSubpacketType uint8

const (
	creationTimeSubpacket        signatureSubpacketType = 2
	signatureExpirationSubpacket signatureSubpacketType = 3
	keyExpirationSubpacket       signatureSubpacketType = 9
	prefSymmetricAlgosSubpacket  signatureSubpacketType = 11
	issuerSubpacket              signatureSubpacketType = 16
	prefHashAlgosSubpacket       signatureSubpacketType = 21
	prefCompressionSubpacket     signatureSubpacketType = 22
	primaryUserIdSubpacket       signatureSubpacketType = 25
	policyUriSubpacket           signatureSubpacketType = 26
	keyFlagsSubpacket            signatureSubpacketType = 27
	signerUserIdSubpacket        signatureSubpacketType = 28
	reasonForRevocationSubpacket signatureSubpacketType = 29
	featuresSubpacket            signatureSubpacketType = 30
	embeddedSignatureSubpacket   signatureSubpacketType = 32
	issuerFingerprintSubpacket   signatureSubpacketType = 33
	prefAeadAlgosSubpacket       signatureSubpacketType = 34
)

// parseSignatureSubpacket parses a single subpacket. len(subpacket) is >= 1.
func parseSignatureSubpacket(sig *Signature, subpacket []byte, isHashed bool) (rest []byte, err error) {
	// RFC 4880, section 5.2.3.1
	var (
		length     uint32
		packetType signatureSubpacketType
		isCritical bool
	)
	switch {
	case subpacket[0] < 192:
		length = uint32(subpacket[0])
		subpacket = subpacket[1:]
	case subpacket[0] < 255:
		if len(subpacket) < 2 {
			goto Truncated
		}
		length = uint32(subpacket[0]-192)<<8 + uint32(subpacket[1]) + 192
		subpacket = subpacket[2:]
	default:
		if len(subpacket) < 5 {
			goto Truncated
		}
		length = uint32(subpacket[1])<<24 |
			uint32(subpacket[2])<<16 |
			uint32(subpacket[3])<<8 |
			uint32(subpacket[4])
		subpacket = subpacket[5:]
	}
	if length > uint32(len(subpacket)) {
		goto Truncated
	}
	rest = subpacket[length:]
	subpacket = subpacket[:length]
	if len(subpacket) == 0 {
		err = errors.StructuralError("zero length signature subpacket")
		return
	}
	packetType = signatureSubpacketType(subpacket[0] & 0x7f)
	isCritical = subpacket[0]&0x80 == 0x80
	subpacket = subpacket[1:]
	sig.rawSubpackets = append(sig.rawSubpackets, outputSubpacket{isHashed, packetType, isCritical, subpacket})
	switch packetType {
	case creationTimeSubpacket:
		if !isHashed {
			err = errors.StructuralError("signature creation time in non-hashed area")
			return
		}
		if len(subpacket) != 4 {
			err = errors.StructuralError("signature creation time not four bytes")
			return
		}
		t := binary.BigEndian.Uint32(subpacket)
		sig.CreationTime = time.Unix(int64(t), 0)
	case signatureExpirationSubpacket:
		// Signature expiration time, section 5.2.3.10
		if !isHashed {
			return
		}
		if len(subpacket) != 4 {
			err = errors.StructuralError("expiration subpacket with bad length")
			return
		}
		sig.SigLifetimeSecs = new(uint32)
		*sig.SigLifetimeSecs = binary.BigEndian.Uint32(subpacket)
	case keyExpirationSubpacket:
		// Key expiration time, section 5.2.3.6
		if !isHashed {
			return
		}
		if len(subpacket) != 4 {
			err = errors.StructuralError("key expiration subpacket with bad length")
			return
		}
		sig.KeyLifetimeSecs = new(uint32)
		*sig.KeyLifetimeSecs = binary.BigEndian.Uint32(subpacket)
	case prefSymmetricAlgosSubpacket:
		// Preferred symmetric algorithms, section 5.2.3.7
		if !isHashed {
			return
		}
		sig.PreferredSymmetric = make([]byte, len(subpacket))
		copy(sig.PreferredSymmetric, subpacket)
	case issuerSubpacket:
		if sig.Version > 4 {
			err = errors.StructuralError("issuer subpacket found in v5 key")
		}
		// Issuer, section 5.2.3.5
		if len(subpacket) != 8 {
			err = errors.StructuralError("issuer subpacket with bad length")
			return
		}
		sig.IssuerKeyId = new(uint64)
		*sig.IssuerKeyId = binary.BigEndian.Uint64(subpacket)
	case prefHashAlgosSubpacket:
		// Preferred hash algorithms, section 5.2.3.8
		if !isHashed {
			return
		}
		sig.PreferredHash = make([]byte, len(subpacket))
		copy(sig.PreferredHash, subpacket)
	case prefCompressionSubpacket:
		// Preferred compression algorithms, section 5.2.3.9
		if !isHashed {
			return
		}
		sig.PreferredCompression = make([]byte, len(subpacket))
		copy(sig.PreferredCompression, subpacket)
	case primaryUserIdSubpacket:
		// Primary User ID, section 5.2.3.19
		if !isHashed {
			return
		}
		if len(subpacket) != 1 {
			err = errors.StructuralError("primary user id subpacket with bad length")
			return
		}
		sig.IsPrimaryId = new(bool)
		if subpacket[0] > 0 {
			*sig.IsPrimaryId = true
		}
	case keyFlagsSubpacket:
		// Key flags, section 5.2.3.21
		if !isHashed {
			return
		}
		if len(subpacket) == 0 {
			err = errors.StructuralError("empty key flags subpacket")
			return
		}
		sig.FlagsValid = true
		if subpacket[0]&KeyFlagCertify != 0 {
			sig.FlagCertify = true
		}
		if subpacket[0]&KeyFlagSign != 0 {
			sig.FlagSign = true
		}
		if subpacket[0]&KeyFlagEncryptCommunications != 0 {
			sig.FlagEncryptCommunications = true
		}
		if subpacket[0]&KeyFlagEncryptStorage != 0 {
			sig.FlagEncryptStorage = true
		}
		if subpacket[0]&KeyFlagSplitKey != 0 {
			sig.FlagSplitKey = true
		}
		if subpacket[0]&KeyFlagAuthenticate != 0 {
			sig.FlagAuthenticate = true
		}
		if subpacket[0]&KeyFlagGroupKey != 0 {
			sig.FlagGroupKey = true
		}
	case signerUserIdSubpacket:
		userId := string(subpacket)
		sig.SignerUserId = &userId
	case reasonForRevocationSubpacket:
		// Reason For Revocation, section 5.2.3.23
		if !isHashed {
			return
		}
		if len(subpacket) == 0 {
			err = errors.StructuralError("empty revocation reason subpacket")
			return
		}
		sig.RevocationReason = new(ReasonForRevocation)
		*sig.RevocationReason = ReasonForRevocation(subpacket[0])
		sig.RevocationReasonText = string(subpacket[1:])
	case featuresSubpacket:
		// Features subpacket, section 5.2.3.24 specifies a very general
		// mechanism for OpenPGP implementations to signal support for new
		// features.
		if !isHashed {
			return
		}
		if len(subpacket) > 0 {
			if subpacket[0]&0x01 != 0 {
				sig.MDC = true
			}
			if subpacket[0]&0x02 != 0 {
				sig.AEAD = true
			}
			if subpacket[0]&0x04 != 0 {
				sig.V5Keys = true
			}
		}
	case embeddedSignatureSubpacket:
		// Only usage is in signatures that cross-certify
		// signing subkeys. section 5.2.3.26 describes the
		// format, with its usage described in section 11.1
		if sig.EmbeddedSignature != nil {
			err = errors.StructuralError("Cannot have multiple embedded signatures")
			return
		}
		sig.EmbeddedSignature = new(Signature)
		// Embedded signatures are required to be v4 signatures see
		// section 12.1. However, we only parse v4 signatures in this
		// file anyway.
		if err := sig.EmbeddedSignature.parse(bytes.NewBuffer(subpacket)); err != nil {
			return nil, err
		}
		if sigType := sig.EmbeddedSignature.SigType; sigType != SigTypePrimaryKeyBinding {
			return nil, errors.StructuralError("cross-signature has unexpected type " + strconv.Itoa(int(sigType)))
		}
	case policyUriSubpacket:
		// Policy URI, section 5.2.3.20
		if !isHashed {
			return
		}
		sig.PolicyURI = string(subpacket)
	case issuerFingerprintSubpacket:
		v, l := subpacket[0], len(subpacket[1:])
		if v == 5 && l != 32 || v != 5 && l != 20 {
			return nil, errors.StructuralError("bad fingerprint length")
		}
		sig.IssuerFingerprint = make([]byte, l)
		copy(sig.IssuerFingerprint, subpacket[1:])
		sig.IssuerKeyId = new(uint64)
		if v == 5 {
			*sig.IssuerKeyId = binary.BigEndian.Uint64(subpacket[1:9])
		} else {
			*sig.IssuerKeyId = binary.BigEndian.Uint64(subpacket[13:21])
		}
	case prefAeadAlgosSubpacket:
		// Preferred symmetric algorithms, section 5.2.3.8
		if !isHashed {
			return
		}
		sig.PreferredAEAD = make([]byte, len(subpacket))
		copy(sig.PreferredAEAD, subpacket)
	default:
		if isCritical {
			err = errors.UnsupportedError("unknown critical signature subpacket type " + strconv.Itoa(int(packetType)))
			return
		}
	}
	return

Truncated:
	err = errors.StructuralError("signature subpacket truncated")
	return
}

// subpacketLengthLength returns the length, in bytes, of an encoded length value.
func subpacketLengthLength(length int) int {
	if length < 192 {
		return 1
	}
	if length < 16320 {
		return 2
	}
	return 5
}

func (sig *Signature) CheckKeyIdOrFingerprint(pk *PublicKey) bool {
	if sig.IssuerFingerprint != nil && len(sig.IssuerFingerprint) >= 20 {
		return bytes.Equal(sig.IssuerFingerprint, pk.Fingerprint)
	}
	return sig.IssuerKeyId != nil && *sig.IssuerKeyId == pk.KeyId
}

// serializeSubpacketLength marshals the given length into to.
func serializeSubpacketLength(to []byte, length int) int {
	// RFC 4880, Section 4.2.2.
	if length < 192 {
		to[0] = byte(length)
		return 1
	}
	if length < 16320 {
		length -= 192
		to[0] = byte((length >> 8) + 192)
		to[1] = byte(length)
		return 2
	}
	to[0] = 255
	to[1] = byte(length >> 24)
	to[2] = byte(length >> 16)
	to[3] = byte(length >> 8)
	to[4] = byte(length)
	return 5
}

// subpacketsLength returns the serialized length, in bytes, of the given
// subpackets.
func subpacketsLength(subpackets []outputSubpacket, hashed bool) (length int) {
	for _, subpacket := range subpackets {
		if subpacket.hashed == hashed {
			length += subpacketLengthLength(len(subpacket.contents) + 1)
			length += 1 // type byte
			length += len(subpacket.contents)
		}
	}
	return
}

// serializeSubpackets marshals the given subpackets into to.
func serializeSubpackets(to []byte, subpackets []outputSubpacket, hashed bool) {
	for _, subpacket := range subpackets {
		if subpacket.hashed == hashed {
			n := serializeSubpacketLength(to, len(subpacket.contents)+1)
			to[n] = byte(subpacket.subpacketType)
			if subpacket.isCritical {
				to[n] |= 0x80
			}
			to = to[1+n:]
			n = copy(to, subpacket.contents)
			to = to[n:]
		}
	}
	return
}

// SigExpired returns whether sig is a signature that has expired or is created
// in the future.
func (sig *Signature) SigExpired(currentTime time.Time) bool {
	if sig.CreationTime.After(currentTime) {
		return true
	}
	if sig.SigLifetimeSecs == nil || *sig.SigLifetimeSecs == 0 {
		return false
	}
	expiry := sig.CreationTime.Add(time.Duration(*sig.SigLifetimeSecs) * time.Second)
	return currentTime.After(expiry)
}

// buildHashSuffix constructs the HashSuffix member of sig in preparation for signing.
func (sig *Signature) buildHashSuffix(hashedSubpackets []byte) (err error) {
	hash, ok := s2k.HashToHashId(sig.Hash)
	if !ok {
		sig.HashSuffix = nil
		return errors.InvalidArgumentError("hash cannot be represented in OpenPGP: " + strconv.Itoa(int(sig.Hash)))
	}

	hashedFields := bytes.NewBuffer([]byte{
		uint8(sig.Version),
		uint8(sig.SigType),
		uint8(sig.PubKeyAlgo),
		uint8(hash),
		uint8(len(hashedSubpackets) >> 8),
		uint8(len(hashedSubpackets)),
	})
	hashedFields.Write(hashedSubpackets)

	var l uint64 = uint64(6 + len(hashedSubpackets))
	if sig.Version == 5 {
		hashedFields.Write([]byte{0x05, 0xff})
		hashedFields.Write([]byte{
			uint8(l >> 56), uint8(l >> 48), uint8(l >> 40), uint8(l >> 32),
			uint8(l >> 24), uint8(l >> 16), uint8(l >> 8), uint8(l),
		})
	} else {
		hashedFields.Write([]byte{0x04, 0xff})
		hashedFields.Write([]byte{
			uint8(l >> 24), uint8(l >> 16), uint8(l >> 8), uint8(l),
		})
	}
	sig.HashSuffix = make([]byte, hashedFields.Len())
	copy(sig.HashSuffix, hashedFields.Bytes())
	return
}

func (sig *Signature) signPrepareHash(h hash.Hash) (digest []byte, err error) {
	hashedSubpacketsLen := subpacketsLength(sig.outSubpackets, true)
	hashedSubpackets := make([]byte, hashedSubpacketsLen)
	serializeSubpackets(hashedSubpackets, sig.outSubpackets, true)
	err = sig.buildHashSuffix(hashedSubpackets)
	if err != nil {
		return
	}
	if sig.Version == 5 && (sig.SigType == 0x00 || sig.SigType == 0x01) {
		sig.AddMetadataToHashSuffix()
	}

	h.Write(sig.HashSuffix)
	digest = h.Sum(nil)
	copy(sig.HashTag[:], digest)
	return
}

// Sign signs a message with a private key. The hash, h, must contain
// the hash of the message to be signed and will be mutated by this function.
// On success, the signature is stored in sig. Call Serialize to write it out.
// If config is nil, sensible defaults will be used.
func (sig *Signature) Sign(h hash.Hash, priv *PrivateKey, config *Config) (err error) {
	if priv.Dummy() {
		return errors.ErrDummyPrivateKey("dummy key found")
	}
	sig.Version = priv.PublicKey.Version
	sig.IssuerFingerprint = priv.PublicKey.Fingerprint
	sig.outSubpackets, err = sig.buildSubpackets(priv.PublicKey)
	if err != nil {
		return err
	}
	digest, err := sig.signPrepareHash(h)
	if err != nil {
		return
	}
	switch priv.PubKeyAlgo {
	case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly:
		// supports both *rsa.PrivateKey and crypto.Signer
		sigdata, err := priv.PrivateKey.(crypto.Signer).Sign(config.Random(), digest, sig.Hash)
		if err == nil {
			sig.RSASignature = encoding.NewMPI(sigdata)
		}
	case PubKeyAlgoDSA:
		dsaPriv := priv.PrivateKey.(*dsa.PrivateKey)

		// Need to truncate hashBytes to match FIPS 186-3 section 4.6.
		subgroupSize := (dsaPriv.Q.BitLen() + 7) / 8
		if len(digest) > subgroupSize {
			digest = digest[:subgroupSize]
		}
		r, s, err := dsa.Sign(config.Random(), dsaPriv, digest)
		if err == nil {
			sig.DSASigR = new(encoding.MPI).SetBig(r)
			sig.DSASigS = new(encoding.MPI).SetBig(s)
		}
	case PubKeyAlgoECDSA:
		var r, s *big.Int
		if pk, ok := priv.PrivateKey.(*ecdsa.PrivateKey); ok {
			// direct support, avoid asn1 wrapping/unwrapping
			r, s, err = ecdsa.Sign(config.Random(), pk, digest)
		} else {
			var b []byte
			b, err = priv.PrivateKey.(crypto.Signer).Sign(config.Random(), digest, sig.Hash)
			if err == nil {
				r, s, err = unwrapECDSASig(b)
			}
		}
		if err == nil {
			sig.ECDSASigR = new(encoding.MPI).SetBig(r)
			sig.ECDSASigS = new(encoding.MPI).SetBig(s)
		}
	case PubKeyAlgoEdDSA:
		sigdata, err := priv.PrivateKey.(crypto.Signer).Sign(config.Random(), digest, crypto.Hash(0))
		if err == nil {
			sig.EdDSASigR = encoding.NewMPI(sigdata[:32])
			sig.EdDSASigS = encoding.NewMPI(sigdata[32:])
		}
	default:
		err = errors.UnsupportedError("public key algorithm: " + strconv.Itoa(int(sig.PubKeyAlgo)))
	}

	return
}

// unwrapECDSASig parses the two integer components of an ASN.1-encoded ECDSA
// signature.
func unwrapECDSASig(b []byte) (r, s *big.Int, err error) {
	var ecsdaSig struct {
		R, S *big.Int
	}
	_, err = asn1.Unmarshal(b, &ecsdaSig)
	if err != nil {
		return
	}
	return ecsdaSig.R, ecsdaSig.S, nil
}

// SignUserId computes a signature from priv, asserting that pub is a valid
// key for the identity id.  On success, the signature is stored in sig. Call
// Serialize to write it out.
// If config is nil, sensible defaults will be used.
func (sig *Signature) SignUserId(id string, pub *PublicKey, priv *PrivateKey, config *Config) error {
	if priv.Dummy() {
		return errors.ErrDummyPrivateKey("dummy key found")
	}
	h, err := userIdSignatureHash(id, pub, sig.Hash)
	if err != nil {
		return err
	}
	return sig.Sign(h, priv, config)
}

// CrossSignKey computes a signature from signingKey on pub hashed using hashKey. On success,
// the signature is stored in sig. Call Serialize to write it out.
// If config is nil, sensible defaults will be used.
func (sig *Signature) CrossSignKey(pub *PublicKey, hashKey *PublicKey, signingKey *PrivateKey,
	config *Config) error {
	h, err := keySignatureHash(hashKey, pub, sig.Hash)
	if err != nil {
		return err
	}
	return sig.Sign(h, signingKey, config)
}

// SignKey computes a signature from priv, asserting that pub is a subkey. On
// success, the signature is stored in sig. Call Serialize to write it out.
// If config is nil, sensible defaults will be used.
func (sig *Signature) SignKey(pub *PublicKey, priv *PrivateKey, config *Config) error {
	if priv.Dummy() {
		return errors.ErrDummyPrivateKey("dummy key found")
	}
	h, err := keySignatureHash(&priv.PublicKey, pub, sig.Hash)
	if err != nil {
		return err
	}
	return sig.Sign(h, priv, config)
}

// RevokeKey computes a revocation signature of pub using priv. On success, the signature is
// stored in sig. Call Serialize to write it out.
// If config is nil, sensible defaults will be used.
func (sig *Signature) RevokeKey(pub *PublicKey, priv *PrivateKey, config *Config) error {
	h, err := keyRevocationHash(pub, sig.Hash)
	if err != nil {
		return err
	}
	return sig.Sign(h, priv, config)
}

// RevokeSubkey computes a subkey revocation signature of pub using priv.
// On success, the signature is stored in sig. Call Serialize to write it out.
// If config is nil, sensible defaults will be used.
func (sig *Signature) RevokeSubkey(pub *PublicKey, priv *PrivateKey, config *Config) error {
	// Identical to a subkey binding signature
	return sig.SignKey(pub, priv, config)
}

// Serialize marshals sig to w. Sign, SignUserId or SignKey must have been
// called first.
func (sig *Signature) Serialize(w io.Writer) (err error) {
	if len(sig.outSubpackets) == 0 {
		sig.outSubpackets = sig.rawSubpackets
	}
	if sig.RSASignature == nil && sig.DSASigR == nil && sig.ECDSASigR == nil && sig.EdDSASigR == nil {
		return errors.InvalidArgumentError("Signature: need to call Sign, SignUserId or SignKey before Serialize")
	}

	sigLength := 0
	switch sig.PubKeyAlgo {
	case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly:
		sigLength = int(sig.RSASignature.EncodedLength())
	case PubKeyAlgoDSA:
		sigLength = int(sig.DSASigR.EncodedLength())
		sigLength += int(sig.DSASigS.EncodedLength())
	case PubKeyAlgoECDSA:
		sigLength = int(sig.ECDSASigR.EncodedLength())
		sigLength += int(sig.ECDSASigS.EncodedLength())
	case PubKeyAlgoEdDSA:
		sigLength = int(sig.EdDSASigR.EncodedLength())
		sigLength += int(sig.EdDSASigS.EncodedLength())
	default:
		panic("impossible")
	}

	unhashedSubpacketsLen := subpacketsLength(sig.outSubpackets, false)
	length := len(sig.HashSuffix) - 6 /* trailer not included */ +
		2 /* length of unhashed subpackets */ + unhashedSubpacketsLen +
		2 /* hash tag */ + sigLength
	if sig.Version == 5 {
		length -= 4 // eight-octet instead of four-octet big endian
	}
	err = serializeHeader(w, packetTypeSignature, length)
	if err != nil {
		return
	}
	err = sig.serializeBody(w)
	if err != nil {
		return err
	}
	return
}

func (sig *Signature) serializeBody(w io.Writer) (err error) {
	hashedSubpacketsLen := uint16(uint16(sig.HashSuffix[4])<<8) | uint16(sig.HashSuffix[5])
	fields := sig.HashSuffix[:6+hashedSubpacketsLen]
	_, err = w.Write(fields)
	if err != nil {
		return
	}

	unhashedSubpacketsLen := subpacketsLength(sig.outSubpackets, false)
	unhashedSubpackets := make([]byte, 2+unhashedSubpacketsLen)
	unhashedSubpackets[0] = byte(unhashedSubpacketsLen >> 8)
	unhashedSubpackets[1] = byte(unhashedSubpacketsLen)
	serializeSubpackets(unhashedSubpackets[2:], sig.outSubpackets, false)

	_, err = w.Write(unhashedSubpackets)
	if err != nil {
		return
	}
	_, err = w.Write(sig.HashTag[:])
	if err != nil {
		return
	}

	switch sig.PubKeyAlgo {
	case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly:
		_, err = w.Write(sig.RSASignature.EncodedBytes())
	case PubKeyAlgoDSA:
		if _, err = w.Write(sig.DSASigR.EncodedBytes()); err != nil {
			return
		}
		_, err = w.Write(sig.DSASigS.EncodedBytes())
	case PubKeyAlgoECDSA:
		if _, err = w.Write(sig.ECDSASigR.EncodedBytes()); err != nil {
			return
		}
		_, err = w.Write(sig.ECDSASigS.EncodedBytes())
	case PubKeyAlgoEdDSA:
		if _, err = w.Write(sig.EdDSASigR.EncodedBytes()); err != nil {
			return
		}
		_, err = w.Write(sig.EdDSASigS.EncodedBytes())
	default:
		panic("impossible")
	}
	return
}

// outputSubpacket represents a subpacket to be marshaled.
type outputSubpacket struct {
	hashed        bool // true if this subpacket is in the hashed area.
	subpacketType signatureSubpacketType
	isCritical    bool
	contents      []byte
}

func (sig *Signature) buildSubpackets(issuer PublicKey) (subpackets []outputSubpacket, err error) {
	creationTime := make([]byte, 4)
	binary.BigEndian.PutUint32(creationTime, uint32(sig.CreationTime.Unix()))
	subpackets = append(subpackets, outputSubpacket{true, creationTimeSubpacket, false, creationTime})

	if sig.IssuerKeyId != nil && sig.Version == 4 {
		keyId := make([]byte, 8)
		binary.BigEndian.PutUint64(keyId, *sig.IssuerKeyId)
		subpackets = append(subpackets, outputSubpacket{true, issuerSubpacket, true, keyId})
	}
	if sig.IssuerFingerprint != nil {
		contents := append([]uint8{uint8(issuer.Version)}, sig.IssuerFingerprint...)
		subpackets = append(subpackets, outputSubpacket{true, issuerFingerprintSubpacket, sig.Version == 5, contents})
	}
	if sig.SignerUserId != nil {
		subpackets = append(subpackets, outputSubpacket{true, signerUserIdSubpacket, false, []byte(*sig.SignerUserId)})
	}
	if sig.SigLifetimeSecs != nil && *sig.SigLifetimeSecs != 0 {
		sigLifetime := make([]byte, 4)
		binary.BigEndian.PutUint32(sigLifetime, *sig.SigLifetimeSecs)
		subpackets = append(subpackets, outputSubpacket{true, signatureExpirationSubpacket, true, sigLifetime})
	}

	// Key flags may only appear in self-signatures or certification signatures.

	if sig.FlagsValid {
		var flags byte
		if sig.FlagCertify {
			flags |= KeyFlagCertify
		}
		if sig.FlagSign {
			flags |= KeyFlagSign
		}
		if sig.FlagEncryptCommunications {
			flags |= KeyFlagEncryptCommunications
		}
		if sig.FlagEncryptStorage {
			flags |= KeyFlagEncryptStorage
		}
		if sig.FlagSplitKey {
			flags |= KeyFlagSplitKey
		}
		if sig.FlagAuthenticate {
			flags |= KeyFlagAuthenticate
		}
		if sig.FlagGroupKey {
			flags |= KeyFlagGroupKey
		}
		subpackets = append(subpackets, outputSubpacket{true, keyFlagsSubpacket, false, []byte{flags}})
	}

	// The following subpackets may only appear in self-signatures.

	var features = byte(0x00)
	if sig.MDC {
		features |= 0x01
	}
	if sig.AEAD {
		features |= 0x02
	}
	if sig.V5Keys {
		features |= 0x04
	}

	if features != 0x00 {
		subpackets = append(subpackets, outputSubpacket{true, featuresSubpacket, false, []byte{features}})
	}

	if sig.KeyLifetimeSecs != nil && *sig.KeyLifetimeSecs != 0 {
		keyLifetime := make([]byte, 4)
		binary.BigEndian.PutUint32(keyLifetime, *sig.KeyLifetimeSecs)
		subpackets = append(subpackets, outputSubpacket{true, keyExpirationSubpacket, true, keyLifetime})
	}

	if sig.IsPrimaryId != nil && *sig.IsPrimaryId {
		subpackets = append(subpackets, outputSubpacket{true, primaryUserIdSubpacket, false, []byte{1}})
	}

	if len(sig.PreferredSymmetric) > 0 {
		subpackets = append(subpackets, outputSubpacket{true, prefSymmetricAlgosSubpacket, false, sig.PreferredSymmetric})
	}

	if len(sig.PreferredHash) > 0 {
		subpackets = append(subpackets, outputSubpacket{true, prefHashAlgosSubpacket, false, sig.PreferredHash})
	}

	if len(sig.PreferredCompression) > 0 {
		subpackets = append(subpackets, outputSubpacket{true, prefCompressionSubpacket, false, sig.PreferredCompression})
	}

	if len(sig.PolicyURI) > 0 {
		subpackets = append(subpackets, outputSubpacket{true, policyUriSubpacket, false, []uint8(sig.PolicyURI)})
	}

	if len(sig.PreferredAEAD) > 0 {
		subpackets = append(subpackets, outputSubpacket{true, prefAeadAlgosSubpacket, false, sig.PreferredAEAD})
	}

	// Revocation reason appears only in revocation signatures and is serialized as per section 5.2.3.23.
	if sig.RevocationReason != nil {
		subpackets = append(subpackets, outputSubpacket{true, reasonForRevocationSubpacket, true,
			append([]uint8{uint8(*sig.RevocationReason)}, []uint8(sig.RevocationReasonText)...)})
	}

	// EmbeddedSignature appears only in subkeys capable of signing and is serialized as per section 5.2.3.26.
	if sig.EmbeddedSignature != nil {
		var buf bytes.Buffer
		err = sig.EmbeddedSignature.serializeBody(&buf)
		if err != nil {
			return
		}
		subpackets = append(subpackets, outputSubpacket{true, embeddedSignatureSubpacket, true, buf.Bytes()})
	}

	return
}

// AddMetadataToHashSuffix modifies the current hash suffix to include metadata
// (format, filename, and time). Version 5 keys protect this data including it
// in the hash computation. See section 5.2.4.
func (sig *Signature) AddMetadataToHashSuffix() {
	if sig == nil || sig.Version != 5 {
		return
	}
	if sig.SigType != 0x00 && sig.SigType != 0x01 {
		return
	}
	lit := sig.Metadata
	if lit == nil {
		// This will translate into six 0x00 bytes.
		lit = &LiteralData{}
	}

	// Extract the current byte count
	n := sig.HashSuffix[len(sig.HashSuffix)-8:]
	l := uint64(
		uint64(n[0])<<56 | uint64(n[1])<<48 | uint64(n[2])<<40 | uint64(n[3])<<32 |
		uint64(n[4])<<24 | uint64(n[5])<<16 | uint64(n[6])<<8 | uint64(n[7]))

	suffix := bytes.NewBuffer(nil)
	suffix.Write(sig.HashSuffix[:l])

	// Add the metadata
	var buf [4]byte
	buf[0] = lit.Format
	fileName := lit.FileName
	if len(lit.FileName) > 255 {
		fileName = fileName[:255]
	}
	buf[1] = byte(len(fileName))
	suffix.Write(buf[:2])
	suffix.Write([]byte(lit.FileName))
	binary.BigEndian.PutUint32(buf[:], lit.Time)
	suffix.Write(buf[:])

	// Update the counter and restore trailing bytes
	l = uint64(suffix.Len())
	suffix.Write([]byte{0x05, 0xff})
	suffix.Write([]byte{
		uint8(l >> 56), uint8(l >> 48), uint8(l >> 40), uint8(l >> 32),
		uint8(l >> 24), uint8(l >> 16), uint8(l >> 8), uint8(l),
	})
	sig.HashSuffix = suffix.Bytes()
}
  0707010000022A000081A4000000000000000000000001645E367C00001F93000000000000000000000000000000000000006500000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetric_key_encrypted.go  // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package packet

import (
	"bytes"
	"crypto/cipher"
	"io"
	"strconv"

	"github.com/ProtonMail/go-crypto/openpgp/errors"
	"github.com/ProtonMail/go-crypto/openpgp/s2k"
)

// This is the largest session key that we'll support. Since no 512-bit cipher
// has even been seriously used, this is comfortably large.
const maxSessionKeySizeInBytes = 64

// SymmetricKeyEncrypted represents a passphrase protected session key. See RFC
// 4880, section 5.3.
type SymmetricKeyEncrypted struct {
	Version      int
	CipherFunc   CipherFunction
	Mode         AEADMode
	s2k          func(out, in []byte)
	aeadNonce    []byte
	encryptedKey []byte
}

func (ske *SymmetricKeyEncrypted) parse(r io.Reader) error {
	// RFC 4880, section 5.3.
	var buf [2]byte
	if _, err := readFull(r, buf[:]); err != nil {
		return err
	}
	ske.Version = int(buf[0])
	if ske.Version != 4 && ske.Version != 5 {
		return errors.UnsupportedError("unknown SymmetricKeyEncrypted version")
	}
	ske.CipherFunc = CipherFunction(buf[1])
	if ske.CipherFunc.KeySize() == 0 {
		return errors.UnsupportedError("unknown cipher: " + strconv.Itoa(int(buf[1])))
	}

	if ske.Version == 5 {
		mode := make([]byte, 1)
		if _, err := r.Read(mode); err != nil {
			return errors.StructuralError("cannot read AEAD octect from packet")
		}
		ske.Mode = AEADMode(mode[0])
	}

	var err error
	if ske.s2k, err = s2k.Parse(r); err != nil {
		if _, ok := err.(errors.ErrDummyPrivateKey); ok {
			return errors.UnsupportedError("missing key GNU extension in session key")
		}
		return err
	}

	if ske.Version == 5 {
		// AEAD nonce
		nonce := make([]byte, ske.Mode.NonceLength())
		_, err := readFull(r, nonce)
		if err != nil && err != io.ErrUnexpectedEOF {
			return err
		}
		ske.aeadNonce = nonce
	}

	encryptedKey := make([]byte, maxSessionKeySizeInBytes)
	// The session key may follow. We just have to try and read to find
	// out. If it exists then we limit it to maxSessionKeySizeInBytes.
	n, err := readFull(r, encryptedKey)
	if err != nil && err != io.ErrUnexpectedEOF {
		return err
	}

	if n != 0 {
		if n == maxSessionKeySizeInBytes {
			return errors.UnsupportedError("oversized encrypted session key")
		}
		ske.encryptedKey = encryptedKey[:n]
	}
	return nil
}

// Decrypt attempts to decrypt an encrypted session key and returns the key and
// the cipher to use when decrypting a subsequent Symmetrically Encrypted Data
// packet.
func (ske *SymmetricKeyEncrypted) Decrypt(passphrase []byte) ([]byte, CipherFunction, error) {
	key := make([]byte, ske.CipherFunc.KeySize())
	ske.s2k(key, passphrase)
	if len(ske.encryptedKey) == 0 {
		return key, ske.CipherFunc, nil
	}
	switch ske.Version {
	case 4:
		plaintextKey, cipherFunc, err := ske.decryptV4(key)
		return plaintextKey, cipherFunc, err
	case 5:
		plaintextKey, err := ske.decryptV5(key)
		return plaintextKey, CipherFunction(0), err
	}
	err := errors.UnsupportedError("unknown SymmetricKeyEncrypted version")
	return nil, CipherFunction(0), err
}

func (ske *SymmetricKeyEncrypted) decryptV4(key []byte) ([]byte, CipherFunction, error) {
	// the IV is all zeros
	iv := make([]byte, ske.CipherFunc.blockSize())
	c := cipher.NewCFBDecrypter(ske.CipherFunc.new(key), iv)
	plaintextKey := make([]byte, len(ske.encryptedKey))
	c.XORKeyStream(plaintextKey, ske.encryptedKey)
	cipherFunc := CipherFunction(plaintextKey[0])
	if cipherFunc.blockSize() == 0 {
		return nil, ske.CipherFunc, errors.UnsupportedError(
			"unknown cipher: " + strconv.Itoa(int(cipherFunc)))
	}
	plaintextKey = plaintextKey[1:]
	if len(plaintextKey) != cipherFunc.KeySize() {
		return nil, cipherFunc, errors.StructuralError(
			"length of decrypted key not equal to cipher keysize")
	}
	return plaintextKey, cipherFunc, nil
}

func (ske *SymmetricKeyEncrypted) decryptV5(key []byte) ([]byte, error) {
	blockCipher := CipherFunction(ske.CipherFunc).new(key)
	aead := ske.Mode.new(blockCipher)

	adata := []byte{0xc3, byte(5), byte(ske.CipherFunc), byte(ske.Mode)}
	plaintextKey, err := aead.Open(nil, ske.aeadNonce, ske.encryptedKey, adata)
	if err != nil {
		return nil, err
	}
	return plaintextKey, nil
}

// SerializeSymmetricKeyEncrypted serializes a symmetric key packet to w.
// The packet contains a random session key, encrypted by a key derived from
// the given passphrase. The session key is returned and must be passed to
// SerializeSymmetricallyEncrypted or SerializeAEADEncrypted, depending on
// whether config.AEADConfig != nil.
// If config is nil, sensible defaults will be used.
func SerializeSymmetricKeyEncrypted(w io.Writer, passphrase []byte, config *Config) (key []byte, err error) {
	cipherFunc := config.Cipher()
	keySize := cipherFunc.KeySize()
	if keySize == 0 {
		return nil, errors.UnsupportedError("unknown cipher: " + strconv.Itoa(int(cipherFunc)))
	}

	sessionKey := make([]byte, keySize)
	_, err = io.ReadFull(config.Random(), sessionKey)
	if err != nil {
		return
	}

	err = SerializeSymmetricKeyEncryptedReuseKey(w, sessionKey, passphrase, config)
	if err != nil {
		return
	}

	key = sessionKey
	return
}

// SerializeSymmetricKeyEncryptedReuseKey serializes a symmetric key packet to w.
// The packet contains the given session key, encrypted by a key derived from
// the given passphrase. The session key must be passed to
// SerializeSymmetricallyEncrypted or SerializeAEADEncrypted, depending on
// whether config.AEADConfig != nil.
// If config is nil, sensible defaults will be used.
func SerializeSymmetricKeyEncryptedReuseKey(w io.Writer, sessionKey []byte, passphrase []byte, config *Config) (err error) {
	var version int
	if config.AEAD() != nil {
		version = 5
	} else {
		version = 4
	}
	cipherFunc := config.Cipher()
	keySize := cipherFunc.KeySize()
	if keySize == 0 {
		return errors.UnsupportedError("unknown cipher: " + strconv.Itoa(int(cipherFunc)))
	}

	s2kBuf := new(bytes.Buffer)
	keyEncryptingKey := make([]byte, keySize)
	// s2k.Serialize salts and stretches the passphrase, and writes the
	// resulting key to keyEncryptingKey and the s2k descriptor to s2kBuf.
	err = s2k.Serialize(s2kBuf, keyEncryptingKey, config.Random(), passphrase, &s2k.Config{Hash: config.Hash(), S2KCount: config.PasswordHashIterations()})
	if err != nil {
		return
	}
	s2kBytes := s2kBuf.Bytes()

	var packetLength int
	switch version {
	case 4:
		packetLength = 2 /* header */ + len(s2kBytes) + 1 /* cipher type */ + keySize
	case 5:
		nonceLen := config.AEAD().Mode().NonceLength()
		tagLen := config.AEAD().Mode().TagLength()
		packetLength = 3 + len(s2kBytes) + nonceLen + keySize + tagLen
	}
	err = serializeHeader(w, packetTypeSymmetricKeyEncrypted, packetLength)
	if err != nil {
		return
	}

	buf := make([]byte, 2)
	// Symmetric Key Encrypted Version
	buf[0] = byte(version)
	// Cipher function
	buf[1] = byte(cipherFunc)

	if version == 5 {
		// AEAD mode
		buf = append(buf, byte(config.AEAD().Mode()))
	}
	_, err = w.Write(buf)
	if err != nil {
		return
	}
	_, err = w.Write(s2kBytes)
	if err != nil {
		return
	}

	switch version {
	case 4:
		iv := make([]byte, cipherFunc.blockSize())
		c := cipher.NewCFBEncrypter(cipherFunc.new(keyEncryptingKey), iv)
		encryptedCipherAndKey := make([]byte, keySize+1)
		c.XORKeyStream(encryptedCipherAndKey, buf[1:])
		c.XORKeyStream(encryptedCipherAndKey[1:], sessionKey)
		_, err = w.Write(encryptedCipherAndKey)
		if err != nil {
			return
		}
	case 5:
		blockCipher := cipherFunc.new(keyEncryptingKey)
		mode := config.AEAD().Mode()
		aead := mode.new(blockCipher)
		// Sample nonce using random reader
		nonce := make([]byte, config.AEAD().Mode().NonceLength())
		_, err = io.ReadFull(config.Random(), nonce)
		if err != nil {
			return
		}
		// Seal and write (encryptedData includes auth. tag)
		adata := []byte{0xc3, byte(5), byte(cipherFunc), byte(mode)}
		encryptedData := aead.Seal(nil, nonce, sessionKey, adata)
		_, err = w.Write(nonce)
		if err != nil {
			return
		}
		_, err = w.Write(encryptedData)
		if err != nil {
			return
		}
	}

	return
}
 0707010000022B000081A4000000000000000000000001645E367C00001C75000000000000000000000000000000000000006500000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetrically_encrypted.go  // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package packet

import (
	"crypto/cipher"
	"crypto/sha1"
	"crypto/subtle"
	"hash"
	"io"
	"strconv"

	"github.com/ProtonMail/go-crypto/openpgp/errors"
)

// SymmetricallyEncrypted represents a symmetrically encrypted byte string. The
// encrypted Contents will consist of more OpenPGP packets. See RFC 4880,
// sections 5.7 and 5.13.
type SymmetricallyEncrypted struct {
	MDC      bool // true iff this is a type 18 packet and thus has an embedded MAC.
	Contents io.Reader
	prefix   []byte
}

const symmetricallyEncryptedVersion = 1

func (se *SymmetricallyEncrypted) parse(r io.Reader) error {
	if se.MDC {
		// See RFC 4880, section 5.13.
		var buf [1]byte
		_, err := readFull(r, buf[:])
		if err != nil {
			return err
		}
		if buf[0] != symmetricallyEncryptedVersion {
			return errors.UnsupportedError("unknown SymmetricallyEncrypted version")
		}
	} else {
		return errors.UnsupportedError("Symmetrically encrypted packets without MDC are not supported")
	}
	se.Contents = r
	return nil
}

// Decrypt returns a ReadCloser, from which the decrypted Contents of the
// packet can be read. An incorrect key will only be detected after trying
// to decrypt the entire data.
func (se *SymmetricallyEncrypted) Decrypt(c CipherFunction, key []byte) (io.ReadCloser, error) {
	keySize := c.KeySize()
	if keySize == 0 {
		return nil, errors.UnsupportedError("unknown cipher: " + strconv.Itoa(int(c)))
	}
	if len(key) != keySize {
		return nil, errors.InvalidArgumentError("SymmetricallyEncrypted: incorrect key length")
	}

	if se.prefix == nil {
		se.prefix = make([]byte, c.blockSize()+2)
		_, err := readFull(se.Contents, se.prefix)
		if err != nil {
			return nil, err
		}
	} else if len(se.prefix) != c.blockSize()+2 {
		return nil, errors.InvalidArgumentError("can't try ciphers with different block lengths")
	}

	ocfbResync := OCFBResync
	if se.MDC {
		// MDC packets use a different form of OCFB mode.
		ocfbResync = OCFBNoResync
	}

	s := NewOCFBDecrypter(c.new(key), se.prefix, ocfbResync)

	plaintext := cipher.StreamReader{S: s, R: se.Contents}

	if se.MDC {
		// MDC packets have an embedded hash that we need to check.
		h := sha1.New()
		h.Write(se.prefix)
		return &seMDCReader{in: plaintext, h: h}, nil
	}

	// Otherwise, we just need to wrap plaintext so that it's a valid ReadCloser.
	return seReader{plaintext}, nil
}

// seReader wraps an io.Reader with a no-op Close method.
type seReader struct {
	in io.Reader
}

func (ser seReader) Read(buf []byte) (int, error) {
	return ser.in.Read(buf)
}

func (ser seReader) Close() error {
	return nil
}

const mdcTrailerSize = 1 /* tag byte */ + 1 /* length byte */ + sha1.Size

// An seMDCReader wraps an io.Reader, maintains a running hash and keeps hold
// of the most recent 22 bytes (mdcTrailerSize). Upon EOF, those bytes form an
// MDC packet containing a hash of the previous Contents which is checked
// against the running hash. See RFC 4880, section 5.13.
type seMDCReader struct {
	in          io.Reader
	h           hash.Hash
	trailer     [mdcTrailerSize]byte
	scratch     [mdcTrailerSize]byte
	trailerUsed int
	error       bool
	eof         bool
}

func (ser *seMDCReader) Read(buf []byte) (n int, err error) {
	if ser.error {
		err = io.ErrUnexpectedEOF
		return
	}
	if ser.eof {
		err = io.EOF
		return
	}

	// If we haven't yet filled the trailer buffer then we must do that
	// first.
	for ser.trailerUsed < mdcTrailerSize {
		n, err = ser.in.Read(ser.trailer[ser.trailerUsed:])
		ser.trailerUsed += n
		if err == io.EOF {
			if ser.trailerUsed != mdcTrailerSize {
				n = 0
				err = io.ErrUnexpectedEOF
				ser.error = true
				return
			}
			ser.eof = true
			n = 0
			return
		}

		if err != nil {
			n = 0
			return
		}
	}

	// If it's a short read then we read into a temporary buffer and shift
	// the data into the caller's buffer.
	if len(buf) <= mdcTrailerSize {
		n, err = readFull(ser.in, ser.scratch[:len(buf)])
		copy(buf, ser.trailer[:n])
		ser.h.Write(buf[:n])
		copy(ser.trailer[:], ser.trailer[n:])
		copy(ser.trailer[mdcTrailerSize-n:], ser.scratch[:])
		if n < len(buf) {
			ser.eof = true
			err = io.EOF
		}
		return
	}

	n, err = ser.in.Read(buf[mdcTrailerSize:])
	copy(buf, ser.trailer[:])
	ser.h.Write(buf[:n])
	copy(ser.trailer[:], buf[n:])

	if err == io.EOF {
		ser.eof = true
	}
	return
}

// This is a new-format packet tag byte for a type 19 (MDC) packet.
const mdcPacketTagByte = byte(0x80) | 0x40 | 19

func (ser *seMDCReader) Close() error {
	if ser.error {
		return errors.ErrMDCMissing
	}

	for !ser.eof {
		// We haven't seen EOF so we need to read to the end
		var buf [1024]byte
		_, err := ser.Read(buf[:])
		if err == io.EOF {
			break
		}
		if err != nil {
			return errors.ErrMDCMissing
		}
	}

	ser.h.Write(ser.trailer[:2])

	final := ser.h.Sum(nil)
	if subtle.ConstantTimeCompare(final, ser.trailer[2:]) != 1 {
		return errors.ErrMDCHashMismatch
	}
	// The hash already includes the MDC header, but we still check its value
	// to confirm encryption correctness
	if ser.trailer[0] != mdcPacketTagByte || ser.trailer[1] != sha1.Size {
		return errors.ErrMDCMissing
	}
	return nil
}

// An seMDCWriter writes through to an io.WriteCloser while maintains a running
// hash of the data written. On close, it emits an MDC packet containing the
// running hash.
type seMDCWriter struct {
	w io.WriteCloser
	h hash.Hash
}

func (w *seMDCWriter) Write(buf []byte) (n int, err error) {
	w.h.Write(buf)
	return w.w.Write(buf)
}

func (w *seMDCWriter) Close() (err error) {
	var buf [mdcTrailerSize]byte

	buf[0] = mdcPacketTagByte
	buf[1] = sha1.Size
	w.h.Write(buf[:2])
	digest := w.h.Sum(nil)
	copy(buf[2:], digest)

	_, err = w.w.Write(buf[:])
	if err != nil {
		return
	}
	return w.w.Close()
}

// noOpCloser is like an ioutil.NopCloser, but for an io.Writer.
type noOpCloser struct {
	w io.Writer
}

func (c noOpCloser) Write(data []byte) (n int, err error) {
	return c.w.Write(data)
}

func (c noOpCloser) Close() error {
	return nil
}

// SerializeSymmetricallyEncrypted serializes a symmetrically encrypted packet
// to w and returns a WriteCloser to which the to-be-encrypted packets can be
// written.
// If config is nil, sensible defaults will be used.
func SerializeSymmetricallyEncrypted(w io.Writer, c CipherFunction, key []byte, config *Config) (Contents io.WriteCloser, err error) {
	if c.KeySize() != len(key) {
		return nil, errors.InvalidArgumentError("SymmetricallyEncrypted.Serialize: bad key length")
	}
	writeCloser := noOpCloser{w}
	ciphertext, err := serializeStreamHeader(writeCloser, packetTypeSymmetricallyEncryptedMDC)
	if err != nil {
		return
	}

	_, err = ciphertext.Write([]byte{symmetricallyEncryptedVersion})
	if err != nil {
		return
	}

	block := c.new(key)
	blockSize := block.BlockSize()
	iv := make([]byte, blockSize)
	_, err = config.Random().Read(iv)
	if err != nil {
		return
	}
	s, prefix := NewOCFBEncrypter(block, iv, OCFBNoResync)
	_, err = ciphertext.Write(prefix)
	if err != nil {
		return
	}
	plaintext := cipher.StreamWriter{S: s, W: ciphertext}

	h := sha1.New()
	h.Write(iv)
	h.Write(iv[blockSize-2:])
	Contents = &seMDCWriter{w: plaintext, h: h}
	return
}
   0707010000022C000081A4000000000000000000000001645E367C00000A0C000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/userattribute.go    // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package packet

import (
	"bytes"
	"image"
	"image/jpeg"
	"io"
	"io/ioutil"
)

const UserAttrImageSubpacket = 1

// UserAttribute is capable of storing other types of data about a user
// beyond name, email and a text comment. In practice, user attributes are typically used
// to store a signed thumbnail photo JPEG image of the user.
// See RFC 4880, section 5.12.
type UserAttribute struct {
	Contents []*OpaqueSubpacket
}

// NewUserAttributePhoto creates a user attribute packet
// containing the given images.
func NewUserAttributePhoto(photos ...image.Image) (uat *UserAttribute, err error) {
	uat = new(UserAttribute)
	for _, photo := range photos {
		var buf bytes.Buffer
		// RFC 4880, Section 5.12.1.
		data := []byte{
			0x10, 0x00, // Little-endian image header length (16 bytes)
			0x01,       // Image header version 1
			0x01,       // JPEG
			0, 0, 0, 0, // 12 reserved octets, must be all zero.
			0, 0, 0, 0,
			0, 0, 0, 0}
		if _, err = buf.Write(data); err != nil {
			return
		}
		if err = jpeg.Encode(&buf, photo, nil); err != nil {
			return
		}
		uat.Contents = append(uat.Contents, &OpaqueSubpacket{
			SubType:  UserAttrImageSubpacket,
			Contents: buf.Bytes()})
	}
	return
}

// NewUserAttribute creates a new user attribute packet containing the given subpackets.
func NewUserAttribute(contents ...*OpaqueSubpacket) *UserAttribute {
	return &UserAttribute{Contents: contents}
}

func (uat *UserAttribute) parse(r io.Reader) (err error) {
	// RFC 4880, section 5.13
	b, err := ioutil.ReadAll(r)
	if err != nil {
		return
	}
	uat.Contents, err = OpaqueSubpackets(b)
	return
}

// Serialize marshals the user attribute to w in the form of an OpenPGP packet, including
// header.
func (uat *UserAttribute) Serialize(w io.Writer) (err error) {
	var buf bytes.Buffer
	for _, sp := range uat.Contents {
		err = sp.Serialize(&buf)
		if err != nil {
			return err
		}
	}
	if err = serializeHeader(w, packetTypeUserAttribute, buf.Len()); err != nil {
		return err
	}
	_, err = w.Write(buf.Bytes())
	return
}

// ImageData returns zero or more byte slices, each containing
// JPEG File Interchange Format (JFIF), for each photo in the
// user attribute packet.
func (uat *UserAttribute) ImageData() (imageData [][]byte) {
	for _, sp := range uat.Contents {
		if sp.SubType == UserAttrImageSubpacket && len(sp.Contents) > 16 {
			imageData = append(imageData, sp.Contents[16:])
		}
	}
	return
}
0707010000022D000081A4000000000000000000000001645E367C00000E48000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/userid.go   // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package packet

import (
	"io"
	"io/ioutil"
	"strings"
)

// UserId contains text that is intended to represent the name and email
// address of the key holder. See RFC 4880, section 5.11. By convention, this
// takes the form "Full Name (Comment) <email@example.com>"
type UserId struct {
	Id string // By convention, this takes the form "Full Name (Comment) <email@example.com>" which is split out in the fields below.

	Name, Comment, Email string
}

func hasInvalidCharacters(s string) bool {
	for _, c := range s {
		switch c {
		case '(', ')', '<', '>', 0:
			return true
		}
	}
	return false
}

// NewUserId returns a UserId or nil if any of the arguments contain invalid
// characters. The invalid characters are '\x00', '(', ')', '<' and '>'
func NewUserId(name, comment, email string) *UserId {
	// RFC 4880 doesn't deal with the structure of userid strings; the
	// name, comment and email form is just a convention. However, there's
	// no convention about escaping the metacharacters and GPG just refuses
	// to create user ids where, say, the name contains a '('. We mirror
	// this behaviour.

	if hasInvalidCharacters(name) || hasInvalidCharacters(comment) || hasInvalidCharacters(email) {
		return nil
	}

	uid := new(UserId)
	uid.Name, uid.Comment, uid.Email = name, comment, email
	uid.Id = name
	if len(comment) > 0 {
		if len(uid.Id) > 0 {
			uid.Id += " "
		}
		uid.Id += "("
		uid.Id += comment
		uid.Id += ")"
	}
	if len(email) > 0 {
		if len(uid.Id) > 0 {
			uid.Id += " "
		}
		uid.Id += "<"
		uid.Id += email
		uid.Id += ">"
	}
	return uid
}

func (uid *UserId) parse(r io.Reader) (err error) {
	// RFC 4880, section 5.11
	b, err := ioutil.ReadAll(r)
	if err != nil {
		return
	}
	uid.Id = string(b)
	uid.Name, uid.Comment, uid.Email = parseUserId(uid.Id)
	return
}

// Serialize marshals uid to w in the form of an OpenPGP packet, including
// header.
func (uid *UserId) Serialize(w io.Writer) error {
	err := serializeHeader(w, packetTypeUserId, len(uid.Id))
	if err != nil {
		return err
	}
	_, err = w.Write([]byte(uid.Id))
	return err
}

// parseUserId extracts the name, comment and email from a user id string that
// is formatted as "Full Name (Comment) <email@example.com>".
func parseUserId(id string) (name, comment, email string) {
	var n, c, e struct {
		start, end int
	}
	var state int

	for offset, rune := range id {
		switch state {
		case 0:
			// Entering name
			n.start = offset
			state = 1
			fallthrough
		case 1:
			// In name
			if rune == '(' {
				state = 2
				n.end = offset
			} else if rune == '<' {
				state = 5
				n.end = offset
			}
		case 2:
			// Entering comment
			c.start = offset
			state = 3
			fallthrough
		case 3:
			// In comment
			if rune == ')' {
				state = 4
				c.end = offset
			}
		case 4:
			// Between comment and email
			if rune == '<' {
				state = 5
			}
		case 5:
			// Entering email
			e.start = offset
			state = 6
			fallthrough
		case 6:
			// In email
			if rune == '>' {
				state = 7
				e.end = offset
			}
		default:
			// After email
		}
	}
	switch state {
	case 1:
		// ended in the name
		n.end = len(id)
	case 3:
		// ended in comment
		c.end = len(id)
	case 6:
		// ended in email
		e.end = len(id)
	}

	name = strings.TrimSpace(id[n.start:n.end])
	comment = strings.TrimSpace(id[c.start:c.end])
	email = strings.TrimSpace(id[e.start:e.end])

	// RFC 2822 3.4: alternate simple form of a mailbox
	if email == "" && strings.ContainsRune(name, '@') {
		email = name
		name = ""
	}

	return
}
0707010000022E000081A4000000000000000000000001645E367C0000425B000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/read.go    // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package openpgp implements high level operations on OpenPGP messages.
package openpgp // import "github.com/ProtonMail/go-crypto/openpgp"

import (
	"crypto"
	_ "crypto/sha256"
	"hash"
	"io"
	"strconv"

	"github.com/ProtonMail/go-crypto/openpgp/armor"
	"github.com/ProtonMail/go-crypto/openpgp/errors"
	"github.com/ProtonMail/go-crypto/openpgp/packet"
)

// SignatureType is the armor type for a PGP signature.
var SignatureType = "PGP SIGNATURE"

// readArmored reads an armored block with the given type.
func readArmored(r io.Reader, expectedType string) (body io.Reader, err error) {
	block, err := armor.Decode(r)
	if err != nil {
		return
	}

	if block.Type != expectedType {
		return nil, errors.InvalidArgumentError("expected '" + expectedType + "', got: " + block.Type)
	}

	return block.Body, nil
}

// MessageDetails contains the result of parsing an OpenPGP encrypted and/or
// signed message.
type MessageDetails struct {
	IsEncrypted              bool                // true if the message was encrypted.
	EncryptedToKeyIds        []uint64            // the list of recipient key ids.
	IsSymmetricallyEncrypted bool                // true if a passphrase could have decrypted the message.
	DecryptedWith            Key                 // the private key used to decrypt the message, if any.
	IsSigned                 bool                // true if the message is signed.
	SignedByKeyId            uint64              // the key id of the signer, if any.
	SignedBy                 *Key                // the key of the signer, if available.
	LiteralData              *packet.LiteralData // the metadata of the contents
	UnverifiedBody           io.Reader           // the contents of the message.

	// If IsSigned is true and SignedBy is non-zero then the signature will
	// be verified as UnverifiedBody is read. The signature cannot be
	// checked until the whole of UnverifiedBody is read so UnverifiedBody
	// must be consumed until EOF before the data can be trusted. Even if a
	// message isn't signed (or the signer is unknown) the data may contain
	// an authentication code that is only checked once UnverifiedBody has
	// been consumed. Once EOF has been seen, the following fields are
	// valid. (An authentication code failure is reported as a
	// SignatureError error when reading from UnverifiedBody.)
	Signature            *packet.Signature   // the signature packet itself.
	SignatureError       error               // nil if the signature is good.
	UnverifiedSignatures []*packet.Signature // all other unverified signature packets.

	decrypted io.ReadCloser
}

// A PromptFunction is used as a callback by functions that may need to decrypt
// a private key, or prompt for a passphrase. It is called with a list of
// acceptable, encrypted private keys and a boolean that indicates whether a
// passphrase is usable. It should either decrypt a private key or return a
// passphrase to try. If the decrypted private key or given passphrase isn't
// correct, the function will be called again, forever. Any error returned will
// be passed up.
type PromptFunction func(keys []Key, symmetric bool) ([]byte, error)

// A keyEnvelopePair is used to store a private key with the envelope that
// contains a symmetric key, encrypted with that key.
type keyEnvelopePair struct {
	key          Key
	encryptedKey *packet.EncryptedKey
}

// ReadMessage parses an OpenPGP message that may be signed and/or encrypted.
// The given KeyRing should contain both public keys (for signature
// verification) and, possibly encrypted, private keys for decrypting.
// If config is nil, sensible defaults will be used.
func ReadMessage(r io.Reader, keyring KeyRing, prompt PromptFunction, config *packet.Config) (md *MessageDetails, err error) {
	var p packet.Packet

	var symKeys []*packet.SymmetricKeyEncrypted
	var pubKeys []keyEnvelopePair
	// Integrity protected encrypted packet: SymmetricallyEncrypted or AEADEncrypted
	var edp packet.EncryptedDataPacket

	packets := packet.NewReader(r)
	md = new(MessageDetails)
	md.IsEncrypted = true

	// The message, if encrypted, starts with a number of packets
	// containing an encrypted decryption key. The decryption key is either
	// encrypted to a public key, or with a passphrase. This loop
	// collects these packets.
ParsePackets:
	for {
		p, err = packets.Next()
		if err != nil {
			return nil, err
		}
		switch p := p.(type) {
		case *packet.SymmetricKeyEncrypted:
			// This packet contains the decryption key encrypted with a passphrase.
			md.IsSymmetricallyEncrypted = true
			symKeys = append(symKeys, p)
		case *packet.EncryptedKey:
			// This packet contains the decryption key encrypted to a public key.
			md.EncryptedToKeyIds = append(md.EncryptedToKeyIds, p.KeyId)
			switch p.Algo {
			case packet.PubKeyAlgoRSA, packet.PubKeyAlgoRSAEncryptOnly, packet.PubKeyAlgoElGamal, packet.PubKeyAlgoECDH:
				break
			default:
				continue
			}
			if keyring != nil {
				var keys []Key
				if p.KeyId == 0 {
					keys = keyring.DecryptionKeys()
				} else {
					keys = keyring.KeysById(p.KeyId)
				}
				for _, k := range keys {
					pubKeys = append(pubKeys, keyEnvelopePair{k, p})
				}
			}
		case *packet.SymmetricallyEncrypted, *packet.AEADEncrypted:
			edp = p.(packet.EncryptedDataPacket)
			break ParsePackets
		case *packet.Compressed, *packet.LiteralData, *packet.OnePassSignature:
			// This message isn't encrypted.
			if len(symKeys) != 0 || len(pubKeys) != 0 {
				return nil, errors.StructuralError("key material not followed by encrypted message")
			}
			packets.Unread(p)
			return readSignedMessage(packets, nil, keyring, config)
		}
	}

	var candidates []Key
	var decrypted io.ReadCloser

	// Now that we have the list of encrypted keys we need to decrypt at
	// least one of them or, if we cannot, we need to call the prompt
	// function so that it can decrypt a key or give us a passphrase.
FindKey:
	for {
		// See if any of the keys already have a private key available
		candidates = candidates[:0]
		candidateFingerprints := make(map[string]bool)

		for _, pk := range pubKeys {
			if pk.key.PrivateKey == nil {
				continue
			}
			if !pk.key.PrivateKey.Encrypted {
				if len(pk.encryptedKey.Key) == 0 {
					errDec := pk.encryptedKey.Decrypt(pk.key.PrivateKey, config)
					if errDec != nil {
						continue
					}
				}
				// Try to decrypt symmetrically encrypted
				decrypted, err = edp.Decrypt(pk.encryptedKey.CipherFunc, pk.encryptedKey.Key)
				if err != nil && err != errors.ErrKeyIncorrect {
					return nil, err
				}
				if decrypted != nil {
					md.DecryptedWith = pk.key
					break FindKey
				}
			} else {
				fpr := string(pk.key.PublicKey.Fingerprint[:])
				if v := candidateFingerprints[fpr]; v {
					continue
				}
				candidates = append(candidates, pk.key)
				candidateFingerprints[fpr] = true
			}
		}

		if len(candidates) == 0 && len(symKeys) == 0 {
			return nil, errors.ErrKeyIncorrect
		}

		if prompt == nil {
			return nil, errors.ErrKeyIncorrect
		}

		passphrase, err := prompt(candidates, len(symKeys) != 0)
		if err != nil {
			return nil, err
		}

		// Try the symmetric passphrase first
		if len(symKeys) != 0 && passphrase != nil {
			for _, s := range symKeys {
				key, cipherFunc, err := s.Decrypt(passphrase)
				// On wrong passphrase, session key decryption is very likely to result in an invalid cipherFunc:
				// only for < 5% of cases we will proceed to decrypt the data
				if err == nil {
					decrypted, err = edp.Decrypt(cipherFunc, key)
					// TODO: ErrKeyIncorrect is no longer thrown on SEIP decryption,
					// but it might still be relevant for when we implement AEAD decryption (otherwise, remove?)
					if err != nil && err != errors.ErrKeyIncorrect {
						return nil, err
					}
					if decrypted != nil {
						break FindKey
					}
				}
			}
		}
	}

	md.decrypted = decrypted
	if err := packets.Push(decrypted); err != nil {
		return nil, err
	}
	mdFinal, sensitiveParsingErr := readSignedMessage(packets, md, keyring, config)
	if sensitiveParsingErr != nil {
		return nil, errors.StructuralError("parsing error")
	}
	return mdFinal, nil
}

// readSignedMessage reads a possibly signed message if mdin is non-zero then
// that structure is updated and returned. Otherwise a fresh MessageDetails is
// used.
func readSignedMessage(packets *packet.Reader, mdin *MessageDetails, keyring KeyRing, config *packet.Config) (md *MessageDetails, err error) {
	if mdin == nil {
		mdin = new(MessageDetails)
	}
	md = mdin

	var p packet.Packet
	var h hash.Hash
	var wrappedHash hash.Hash
	var prevLast bool
FindLiteralData:
	for {
		p, err = packets.Next()
		if err != nil {
			return nil, err
		}
		switch p := p.(type) {
		case *packet.Compressed:
			if err := packets.Push(p.Body); err != nil {
				return nil, err
			}
		case *packet.OnePassSignature:
			if prevLast {
				return nil, errors.UnsupportedError("nested signature packets")
			}

			if p.IsLast {
				prevLast = true
			}

			h, wrappedHash, err = hashForSignature(p.Hash, p.SigType)
			if err != nil {
				md.SignatureError = err
			}

			md.IsSigned = true
			md.SignedByKeyId = p.KeyId
			if keyring != nil {
				keys := keyring.KeysByIdUsage(p.KeyId, packet.KeyFlagSign)
				if len(keys) > 0 {
					md.SignedBy = &keys[0]
				}
			}
		case *packet.LiteralData:
			md.LiteralData = p
			break FindLiteralData
		}
	}

	if md.IsSigned && md.SignatureError == nil {
		md.UnverifiedBody = &signatureCheckReader{packets, h, wrappedHash, md, config}
	} else if md.decrypted != nil {
		md.UnverifiedBody = checkReader{md}
	} else {
		md.UnverifiedBody = md.LiteralData.Body
	}

	return md, nil
}

// hashForSignature returns a pair of hashes that can be used to verify a
// signature. The signature may specify that the contents of the signed message
// should be preprocessed (i.e. to normalize line endings). Thus this function
// returns two hashes. The second should be used to hash the message itself and
// performs any needed preprocessing.
func hashForSignature(hashId crypto.Hash, sigType packet.SignatureType) (hash.Hash, hash.Hash, error) {
	if hashId == crypto.MD5 {
		return nil, nil, errors.UnsupportedError("insecure hash algorithm: MD5")
	}
	if !hashId.Available() {
		return nil, nil, errors.UnsupportedError("hash not available: " + strconv.Itoa(int(hashId)))
	}
	h := hashId.New()

	switch sigType {
	case packet.SigTypeBinary:
		return h, h, nil
	case packet.SigTypeText:
		return h, NewCanonicalTextHash(h), nil
	}

	return nil, nil, errors.UnsupportedError("unsupported signature type: " + strconv.Itoa(int(sigType)))
}

// checkReader wraps an io.Reader from a LiteralData packet. When it sees EOF
// it closes the ReadCloser from any SymmetricallyEncrypted packet to trigger
// MDC checks.
type checkReader struct {
	md *MessageDetails
}

func (cr checkReader) Read(buf []byte) (int, error) {
	n, sensitiveParsingError := cr.md.LiteralData.Body.Read(buf)
	if sensitiveParsingError == io.EOF {
		mdcErr := cr.md.decrypted.Close()
		if mdcErr != nil {
			return n, mdcErr
		}
		return n, io.EOF
	}

	if sensitiveParsingError != nil {
		return n, errors.StructuralError("parsing error")
	}

	return n, nil
}

// signatureCheckReader wraps an io.Reader from a LiteralData packet and hashes
// the data as it is read. When it sees an EOF from the underlying io.Reader
// it parses and checks a trailing Signature packet and triggers any MDC checks.
type signatureCheckReader struct {
	packets        *packet.Reader
	h, wrappedHash hash.Hash
	md             *MessageDetails
	config         *packet.Config
}

func (scr *signatureCheckReader) Read(buf []byte) (int, error) {
	n, sensitiveParsingError := scr.md.LiteralData.Body.Read(buf)

	// Hash only if required
	if scr.md.SignedBy != nil {
		scr.wrappedHash.Write(buf[:n])
	}

	if sensitiveParsingError == io.EOF {
		var p packet.Packet
		var readError error
		var sig *packet.Signature

		p, readError = scr.packets.Next()
		for readError == nil {
			var ok bool
			if sig, ok = p.(*packet.Signature); ok {
				if sig.Version == 5 && (sig.SigType == 0x00 || sig.SigType == 0x01) {
					sig.Metadata = scr.md.LiteralData
				}

				// If signature KeyID matches
				if scr.md.SignedBy != nil && *sig.IssuerKeyId == scr.md.SignedByKeyId {
					key := scr.md.SignedBy
					signatureError := key.PublicKey.VerifySignature(scr.h, sig)
					if signatureError == nil {
						now := scr.config.Now()
						if key.Revoked(now) ||
							key.Entity.Revoked(now) || // primary key is revoked (redundant if key is the primary key)
							key.Entity.PrimaryIdentity().Revoked(now) {
							signatureError = errors.ErrKeyRevoked
						}
						if sig.SigExpired(now) {
							signatureError = errors.ErrSignatureExpired
						}
						if key.PublicKey.KeyExpired(key.SelfSignature, now) ||
							key.SelfSignature.SigExpired(now) {
							signatureError = errors.ErrKeyExpired
						}
					}
					scr.md.Signature = sig
					scr.md.SignatureError = signatureError
				} else {
					scr.md.UnverifiedSignatures = append(scr.md.UnverifiedSignatures, sig)
				}
			}

			p, readError = scr.packets.Next()
		}

		if scr.md.SignedBy != nil && scr.md.Signature == nil {
			if scr.md.UnverifiedSignatures == nil {
				scr.md.SignatureError = errors.StructuralError("LiteralData not followed by signature")
			} else {
				scr.md.SignatureError = errors.StructuralError("No matching signature found")
			}
		}

		// The SymmetricallyEncrypted packet, if any, might have an
		// unsigned hash of its own. In order to check this we need to
		// close that Reader.
		if scr.md.decrypted != nil {
			mdcErr := scr.md.decrypted.Close()
			if mdcErr != nil {
				return n, mdcErr
			}
		}
		return n, io.EOF
	}

	if sensitiveParsingError != nil {
		return n, errors.StructuralError("parsing error")
	}

	return n, nil
}

// CheckDetachedSignature takes a signed file and a detached signature and
// returns the signer if the signature is valid. If the signer isn't known,
// ErrUnknownIssuer is returned.
func CheckDetachedSignature(keyring KeyRing, signed, signature io.Reader, config *packet.Config) (signer *Entity, err error) {
	var expectedHashes []crypto.Hash
	return CheckDetachedSignatureAndHash(keyring, signed, signature, expectedHashes, config)
}

// CheckDetachedSignatureAndHash performs the same actions as
// CheckDetachedSignature and checks that the expected hash functions were used.
func CheckDetachedSignatureAndHash(keyring KeyRing, signed, signature io.Reader, expectedHashes []crypto.Hash, config *packet.Config) (signer *Entity, err error) {
	var issuerKeyId uint64
	var hashFunc crypto.Hash
	var sigType packet.SignatureType
	var keys []Key
	var p packet.Packet

	expectedHashesLen := len(expectedHashes)
	packets := packet.NewReader(signature)
	var sig *packet.Signature
	for {
		p, err = packets.Next()
		if err == io.EOF {
			return nil, errors.ErrUnknownIssuer
		}
		if err != nil {
			return nil, err
		}

		var ok bool
		sig, ok = p.(*packet.Signature)
		if !ok {
			return nil, errors.StructuralError("non signature packet found")
		}
		if sig.IssuerKeyId == nil {
			return nil, errors.StructuralError("signature doesn't have an issuer")
		}
		issuerKeyId = *sig.IssuerKeyId
		hashFunc = sig.Hash
		sigType = sig.SigType

		for i, expectedHash := range expectedHashes {
			if hashFunc == expectedHash {
				break
			}
			if i+1 == expectedHashesLen {
				return nil, errors.StructuralError("hash algorithm mismatch with cleartext message headers")
			}
		}

		keys = keyring.KeysByIdUsage(issuerKeyId, packet.KeyFlagSign)
		if len(keys) > 0 {
			break
		}
	}

	if len(keys) == 0 {
		panic("unreachable")
	}

	h, wrappedHash, err := hashForSignature(hashFunc, sigType)
	if err != nil {
		return nil, err
	}

	if _, err := io.Copy(wrappedHash, signed); err != nil && err != io.EOF {
		return nil, err
	}

	for _, key := range keys {
		err = key.PublicKey.VerifySignature(h, sig)
		if err == nil {
			now := config.Now()
			if key.Revoked(now) ||
				key.Entity.Revoked(now) || // primary key is revoked (redundant if key is the primary key)
				key.Entity.PrimaryIdentity().Revoked(now) {
				return key.Entity, errors.ErrKeyRevoked
			}
			if sig.SigExpired(now) {
				return key.Entity, errors.ErrSignatureExpired
			}
			if key.PublicKey.KeyExpired(key.SelfSignature, now) ||
				key.SelfSignature.SigExpired(now) {
				return key.Entity, errors.ErrKeyExpired
			}
			return key.Entity, nil
		}
	}

	return nil, err
}

// CheckArmoredDetachedSignature performs the same actions as
// CheckDetachedSignature but expects the signature to be armored.
func CheckArmoredDetachedSignature(keyring KeyRing, signed, signature io.Reader, config *packet.Config) (signer *Entity, err error) {
	body, err := readArmored(signature, SignatureType)
	if err != nil {
		return
	}

	return CheckDetachedSignature(keyring, signed, body, config)
}
 0707010000022F000081A4000000000000000000000001645E367C00007828000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/read_write_test_data.go    package openpgp

const testKey1KeyId = 0xA34D7E18C20C31BB
const testKey3KeyId = 0x338934250CCC0360
const testKeyP256KeyId = 0xd44a2c495918513e

const signedInput = "Signed message\nline 2\nline 3\n"
const signedTextInput = "Signed message\r\nline 2\r\nline 3\r\n"

const recipientUnspecifiedHex = "848c0300000000000000000103ff62d4d578d03cf40c3da998dfe216c074fa6ddec5e31c197c9666ba292830d91d18716a80f699f9d897389a90e6d62d0238f5f07a5248073c0f24920e4bc4a30c2d17ee4e0cae7c3d4aaa4e8dced50e3010a80ee692175fa0385f62ecca4b56ee6e9980aa3ec51b61b077096ac9e800edaf161268593eedb6cc7027ff5cb32745d250010d407a6221ae22ef18469b444f2822478c4d190b24d36371a95cb40087cdd42d9399c3d06a53c0673349bfb607927f20d1e122bde1e2bf3aa6cae6edf489629bcaa0689539ae3b718914d88ededc3b"

const detachedSignatureHex = "889c04000102000605024d449cd1000a0910a34d7e18c20c31bb167603ff57718d09f28a519fdc7b5a68b6a3336da04df85e38c5cd5d5bd2092fa4629848a33d85b1729402a2aab39c3ac19f9d573f773cc62c264dc924c067a79dfd8a863ae06c7c8686120760749f5fd9b1e03a64d20a7df3446ddc8f0aeadeaeba7cbaee5c1e366d65b6a0c6cc749bcb912d2f15013f812795c2e29eb7f7b77f39ce77"

const detachedSignatureTextHex = "889c04010102000605024d449d21000a0910a34d7e18c20c31bbc8c60400a24fbef7342603a41cb1165767bd18985d015fb72fe05db42db36cfb2f1d455967f1e491194fbf6cf88146222b23bf6ffbd50d17598d976a0417d3192ff9cc0034fd00f287b02e90418bbefe609484b09231e4e7a5f3562e199bf39909ab5276c4d37382fe088f6b5c3426fc1052865da8b3ab158672d58b6264b10823dc4b39"

const detachedSignatureDSAHex = "884604001102000605024d6c4eac000a0910338934250ccc0360f18d00a087d743d6405ed7b87755476629600b8b694a39e900a0abff8126f46faf1547c1743c37b21b4ea15b8f83"

const detachedSignatureP256Hex = "885e0400130a0006050256e5bb00000a0910d44a2c495918513edef001009841a4f792beb0befccb35c8838a6a87d9b936beaa86db6745ddc7b045eee0cf00fd1ac1f78306b17e965935dd3f8bae4587a76587e4af231efe19cc4011a8434817"

// The plaintext is https://www.gutenberg.org/cache/epub/1080/pg1080.txt
const modestProposalSha512 = "lbbrB1+WP3T9AaC9OQqBdOcCjgeEQadlulXsNPgVx0tyqPzDHwUugZ2gE7V0ESKAw6kAVfgkcuvfgxAAGaeHtw=="

const testKeys1And2Hex = "988d044d3c5c10010400b1d13382944bd5aba23a4312968b5095d14f947f600eb478e14a6fcb16b0e0cac764884909c020bc495cfcc39a935387c661507bdb236a0612fb582cac3af9b29cc2c8c70090616c41b662f4da4c1201e195472eb7f4ae1ccbcbf9940fe21d985e379a5563dde5b9a23d35f1cfaa5790da3b79db26f23695107bfaca8e7b5bcd0011010001b41054657374204b6579203120285253412988b804130102002205024d3c5c10021b03060b090807030206150802090a0b0416020301021e01021780000a0910a34d7e18c20c31bbb5b304009cc45fe610b641a2c146331be94dade0a396e73ca725e1b25c21708d9cab46ecca5ccebc23055879df8f99eea39b377962a400f2ebdc36a7c99c333d74aeba346315137c3ff9d0a09b0273299090343048afb8107cf94cbd1400e3026f0ccac7ecebbc4d78588eb3e478fe2754d3ca664bcf3eac96ca4a6b0c8d7df5102f60f6b0020003b88d044d3c5c10010400b201df61d67487301f11879d514f4248ade90c8f68c7af1284c161098de4c28c2850f1ec7b8e30f959793e571542ffc6532189409cb51c3d30dad78c4ad5165eda18b20d9826d8707d0f742e2ab492103a85bbd9ddf4f5720f6de7064feb0d39ee002219765bb07bcfb8b877f47abe270ddeda4f676108cecb6b9bb2ad484a4f0011010001889f04180102000905024d3c5c10021b0c000a0910a34d7e18c20c31bb1a03040085c8d62e16d05dc4e9dad64953c8a2eed8b6c12f92b1575eeaa6dcf7be9473dd5b24b37b6dffbb4e7c99ed1bd3cb11634be19b3e6e207bed7505c7ca111ccf47cb323bf1f8851eb6360e8034cbff8dd149993c959de89f8f77f38e7e98b8e3076323aa719328e2b408db5ec0d03936efd57422ba04f925cdc7b4c1af7590e40ab0020003988d044d3c5c33010400b488c3e5f83f4d561f317817538d9d0397981e9aef1321ca68ebfae1cf8b7d388e19f4b5a24a82e2fbbf1c6c26557a6c5845307a03d815756f564ac7325b02bc83e87d5480a8fae848f07cb891f2d51ce7df83dcafdc12324517c86d472cc0ee10d47a68fd1d9ae49a6c19bbd36d82af597a0d88cc9c49de9df4e696fc1f0b5d0011010001b42754657374204b6579203220285253412c20656e637279707465642070726976617465206b65792988b804130102002205024d3c5c33021b03060b090807030206150802090a0b0416020301021e01021780000a0910d4984f961e35246b98940400908a73b6a6169f700434f076c6c79015a49bee37130eaf23aaa3cfa9ce60bfe4acaa7bc95f1146ada5867e0079babb38804891f4f0b8ebca57a86b249dee786161a755b7a342e68ccf3f78ed6440a93a6626beb9a37aa66afcd4f888790cb4bb46d94a4ae3eb3d7d3e6b00f6bfec940303e89ec5b32a1eaaacce66497d539328b0020003b88d044d3c5c33010400a4e913f9442abcc7f1804ccab27d2f787ffa592077ca935a8bb23165bd8d57576acac647cc596b2c3f814518cc8c82953c7a4478f32e0cf645630a5ba38d9618ef2bc3add69d459ae3dece5cab778938d988239f8c5ae437807075e06c828019959c644ff05ef6a5a1dab72227c98e3a040b0cf219026640698d7a13d8538a570011010001889f04180102000905024d3c5c33021b0c000a0910d4984f961e35246b26c703ff7ee29ef53bc1ae1ead533c408fa136db508434e233d6e62be621e031e5940bbd4c08142aed0f82217e7c3e1ec8de574bc06ccf3c36633be41ad78a9eacd209f861cae7b064100758545cc9dd83db71806dc1cfd5fb9ae5c7474bba0c19c44034ae61bae5eca379383339dece94ff56ff7aa44a582f3e5c38f45763af577c0934b0020003"

const testKeys1And2PrivateHex = "9501d8044d3c5c10010400b1d13382944bd5aba23a4312968b5095d14f947f600eb478e14a6fcb16b0e0cac764884909c020bc495cfcc39a935387c661507bdb236a0612fb582cac3af9b29cc2c8c70090616c41b662f4da4c1201e195472eb7f4ae1ccbcbf9940fe21d985e379a5563dde5b9a23d35f1cfaa5790da3b79db26f23695107bfaca8e7b5bcd00110100010003ff4d91393b9a8e3430b14d6209df42f98dc927425b881f1209f319220841273a802a97c7bdb8b3a7740b3ab5866c4d1d308ad0d3a79bd1e883aacf1ac92dfe720285d10d08752a7efe3c609b1d00f17f2805b217be53999a7da7e493bfc3e9618fd17018991b8128aea70a05dbce30e4fbe626aa45775fa255dd9177aabf4df7cf0200c1ded12566e4bc2bb590455e5becfb2e2c9796482270a943343a7835de41080582c2be3caf5981aa838140e97afa40ad652a0b544f83eb1833b0957dce26e47b0200eacd6046741e9ce2ec5beb6fb5e6335457844fb09477f83b050a96be7da043e17f3a9523567ed40e7a521f818813a8b8a72209f1442844843ccc7eb9805442570200bdafe0438d97ac36e773c7162028d65844c4d463e2420aa2228c6e50dc2743c3d6c72d0d782a5173fe7be2169c8a9f4ef8a7cf3e37165e8c61b89c346cdc6c1799d2b41054657374204b6579203120285253412988b804130102002205024d3c5c10021b03060b090807030206150802090a0b0416020301021e01021780000a0910a34d7e18c20c31bbb5b304009cc45fe610b641a2c146331be94dade0a396e73ca725e1b25c21708d9cab46ecca5ccebc23055879df8f99eea39b377962a400f2ebdc36a7c99c333d74aeba346315137c3ff9d0a09b0273299090343048afb8107cf94cbd1400e3026f0ccac7ecebbc4d78588eb3e478fe2754d3ca664bcf3eac96ca4a6b0c8d7df5102f60f6b00200009d01d8044d3c5c10010400b201df61d67487301f11879d514f4248ade90c8f68c7af1284c161098de4c28c2850f1ec7b8e30f959793e571542ffc6532189409cb51c3d30dad78c4ad5165eda18b20d9826d8707d0f742e2ab492103a85bbd9ddf4f5720f6de7064feb0d39ee002219765bb07bcfb8b877f47abe270ddeda4f676108cecb6b9bb2ad484a4f00110100010003fd17a7490c22a79c59281fb7b20f5e6553ec0c1637ae382e8adaea295f50241037f8997cf42c1ce26417e015091451b15424b2c59eb8d4161b0975630408e394d3b00f88d4b4e18e2cc85e8251d4753a27c639c83f5ad4a571c4f19d7cd460b9b73c25ade730c99df09637bd173d8e3e981ac64432078263bb6dc30d3e974150dd0200d0ee05be3d4604d2146fb0457f31ba17c057560785aa804e8ca5530a7cd81d3440d0f4ba6851efcfd3954b7e68908fc0ba47f7ac37bf559c6c168b70d3a7c8cd0200da1c677c4bce06a068070f2b3733b0a714e88d62aa3f9a26c6f5216d48d5c2b5624144f3807c0df30be66b3268eeeca4df1fbded58faf49fc95dc3c35f134f8b01fd1396b6c0fc1b6c4f0eb8f5e44b8eace1e6073e20d0b8bc5385f86f1cf3f050f66af789f3ef1fc107b7f4421e19e0349c730c68f0a226981f4e889054fdb4dc149e8e889f04180102000905024d3c5c10021b0c000a0910a34d7e18c20c31bb1a03040085c8d62e16d05dc4e9dad64953c8a2eed8b6c12f92b1575eeaa6dcf7be9473dd5b24b37b6dffbb4e7c99ed1bd3cb11634be19b3e6e207bed7505c7ca111ccf47cb323bf1f8851eb6360e8034cbff8dd149993c959de89f8f77f38e7e98b8e3076323aa719328e2b408db5ec0d03936efd57422ba04f925cdc7b4c1af7590e40ab00200009501fe044d3c5c33010400b488c3e5f83f4d561f317817538d9d0397981e9aef1321ca68ebfae1cf8b7d388e19f4b5a24a82e2fbbf1c6c26557a6c5845307a03d815756f564ac7325b02bc83e87d5480a8fae848f07cb891f2d51ce7df83dcafdc12324517c86d472cc0ee10d47a68fd1d9ae49a6c19bbd36d82af597a0d88cc9c49de9df4e696fc1f0b5d0011010001fe030302e9030f3c783e14856063f16938530e148bc57a7aa3f3e4f90df9dceccdc779bc0835e1ad3d006e4a8d7b36d08b8e0de5a0d947254ecfbd22037e6572b426bcfdc517796b224b0036ff90bc574b5509bede85512f2eefb520fb4b02aa523ba739bff424a6fe81c5041f253f8d757e69a503d3563a104d0d49e9e890b9d0c26f96b55b743883b472caa7050c4acfd4a21f875bdf1258d88bd61224d303dc9df77f743137d51e6d5246b88c406780528fd9a3e15bab5452e5b93970d9dcc79f48b38651b9f15bfbcf6da452837e9cc70683d1bdca94507870f743e4ad902005812488dd342f836e72869afd00ce1850eea4cfa53ce10e3608e13d3c149394ee3cbd0e23d018fcbcb6e2ec5a1a22972d1d462ca05355d0d290dd2751e550d5efb38c6c89686344df64852bf4ff86638708f644e8ec6bd4af9b50d8541cb91891a431326ab2e332faa7ae86cfb6e0540aa63160c1e5cdd5a4add518b303fff0a20117c6bc77f7cfbaf36b04c865c6c2b42754657374204b6579203220285253412c20656e637279707465642070726976617465206b65792988b804130102002205024d3c5c33021b03060b090807030206150802090a0b0416020301021e01021780000a0910d4984f961e35246b98940400908a73b6a6169f700434f076c6c79015a49bee37130eaf23aaa3cfa9ce60bfe4acaa7bc95f1146ada5867e0079babb38804891f4f0b8ebca57a86b249dee786161a755b7a342e68ccf3f78ed6440a93a6626beb9a37aa66afcd4f888790cb4bb46d94a4ae3eb3d7d3e6b00f6bfec940303e89ec5b32a1eaaacce66497d539328b00200009d01fe044d3c5c33010400a4e913f9442abcc7f1804ccab27d2f787ffa592077ca935a8bb23165bd8d57576acac647cc596b2c3f814518cc8c82953c7a4478f32e0cf645630a5ba38d9618ef2bc3add69d459ae3dece5cab778938d988239f8c5ae437807075e06c828019959c644ff05ef6a5a1dab72227c98e3a040b0cf219026640698d7a13d8538a570011010001fe030302e9030f3c783e148560f936097339ae381d63116efcf802ff8b1c9360767db5219cc987375702a4123fd8657d3e22700f23f95020d1b261eda5257e9a72f9a918e8ef22dd5b3323ae03bbc1923dd224db988cadc16acc04b120a9f8b7e84da9716c53e0334d7b66586ddb9014df604b41be1e960dcfcbc96f4ed150a1a0dd070b9eb14276b9b6be413a769a75b519a53d3ecc0c220e85cd91ca354d57e7344517e64b43b6e29823cbd87eae26e2b2e78e6dedfbb76e3e9f77bcb844f9a8932eb3db2c3f9e44316e6f5d60e9e2a56e46b72abe6b06dc9a31cc63f10023d1f5e12d2a3ee93b675c96f504af0001220991c88db759e231b3320dcedf814dcf723fd9857e3d72d66a0f2af26950b915abdf56c1596f46a325bf17ad4810d3535fb02a259b247ac3dbd4cc3ecf9c51b6c07cebb009c1506fba0a89321ec8683e3fd009a6e551d50243e2d5092fefb3321083a4bad91320dc624bd6b5dddf93553e3d53924c05bfebec1fb4bd47e89a1a889f04180102000905024d3c5c33021b0c000a0910d4984f961e35246b26c703ff7ee29ef53bc1ae1ead533c408fa136db508434e233d6e62be621e031e5940bbd4c08142aed0f82217e7c3e1ec8de574bc06ccf3c36633be41ad78a9eacd209f861cae7b064100758545cc9dd83db71806dc1cfd5fb9ae5c7474bba0c19c44034ae61bae5eca379383339dece94ff56ff7aa44a582f3e5c38f45763af577c0934b0020000"

const dsaElGamalTestKeysHex = "9501e1044dfcb16a110400aa3e5c1a1f43dd28c2ffae8abf5cfce555ee874134d8ba0a0f7b868ce2214beddc74e5e1e21ded354a95d18acdaf69e5e342371a71fbb9093162e0c5f3427de413a7f2c157d83f5cd2f9d791256dc4f6f0e13f13c3302af27f2384075ab3021dff7a050e14854bbde0a1094174855fc02f0bae8e00a340d94a1f22b32e48485700a0cec672ac21258fb95f61de2ce1af74b2c4fa3e6703ff698edc9be22c02ae4d916e4fa223f819d46582c0516235848a77b577ea49018dcd5e9e15cff9dbb4663a1ae6dd7580fa40946d40c05f72814b0f88481207e6c0832c3bded4853ebba0a7e3bd8e8c66df33d5a537cd4acf946d1080e7a3dcea679cb2b11a72a33a2b6a9dc85f466ad2ddf4c3db6283fa645343286971e3dd700703fc0c4e290d45767f370831a90187e74e9972aae5bff488eeff7d620af0362bfb95c1a6c3413ab5d15a2e4139e5d07a54d72583914661ed6a87cce810be28a0aa8879a2dd39e52fb6fe800f4f181ac7e328f740cde3d09a05cecf9483e4cca4253e60d4429ffd679d9996a520012aad119878c941e3cf151459873bdfc2a9563472fe0303027a728f9feb3b864260a1babe83925ce794710cfd642ee4ae0e5b9d74cee49e9c67b6cd0ea5dfbb582132195a121356a1513e1bca73e5b80c58c7ccb4164453412f456c47616d616c2054657374204b65792031886204131102002205024dfcb16a021b03060b090807030206150802090a0b0416020301021e01021780000a091033af447ccd759b09fadd00a0b8fd6f5a790bad7e9f2dbb7632046dc4493588db009c087c6a9ba9f7f49fab221587a74788c00db4889ab00200009d0157044dfcb16a1004008dec3f9291205255ccff8c532318133a6840739dd68b03ba942676f9038612071447bf07d00d559c5c0875724ea16a4c774f80d8338b55fca691a0522e530e604215b467bbc9ccfd483a1da99d7bc2648b4318fdbd27766fc8bfad3fddb37c62b8ae7ccfe9577e9b8d1e77c1d417ed2c2ef02d52f4da11600d85d3229607943700030503ff506c94c87c8cab778e963b76cf63770f0a79bf48fb49d3b4e52234620fc9f7657f9f8d56c96a2b7c7826ae6b57ebb2221a3fe154b03b6637cea7e6d98e3e45d87cf8dc432f723d3d71f89c5192ac8d7290684d2c25ce55846a80c9a7823f6acd9bb29fa6cd71f20bc90eccfca20451d0c976e460e672b000df49466408d527affe0303027a728f9feb3b864260abd761730327bca2aaa4ea0525c175e92bf240682a0e83b226f97ecb2e935b62c9a133858ce31b271fa8eb41f6a1b3cd72a63025ce1a75ee4180dcc284884904181102000905024dfcb16a021b0c000a091033af447ccd759b09dd0b009e3c3e7296092c81bee5a19929462caaf2fff3ae26009e218c437a2340e7ea628149af1ec98ec091a43992b00200009501e1044dfcb1be1104009f61faa61aa43df75d128cbe53de528c4aec49ce9360c992e70c77072ad5623de0a3a6212771b66b39a30dad6781799e92608316900518ec01184a85d872365b7d2ba4bacfb5882ea3c2473d3750dc6178cc1cf82147fb58caa28b28e9f12f6d1efcb0534abed644156c91cca4ab78834268495160b2400bc422beb37d237c2300a0cac94911b6d493bda1e1fbc6feeca7cb7421d34b03fe22cec6ccb39675bb7b94a335c2b7be888fd3906a1125f33301d8aa6ec6ee6878f46f73961c8d57a3e9544d8ef2a2cbfd4d52da665b1266928cfe4cb347a58c412815f3b2d2369dec04b41ac9a71cc9547426d5ab941cccf3b18575637ccfb42df1a802df3cfe0a999f9e7109331170e3a221991bf868543960f8c816c28097e503fe319db10fb98049f3a57d7c80c420da66d56f3644371631fad3f0ff4040a19a4fedc2d07727a1b27576f75a4d28c47d8246f27071e12d7a8de62aad216ddbae6aa02efd6b8a3e2818cda48526549791ab277e447b3a36c57cefe9b592f5eab73959743fcc8e83cbefec03a329b55018b53eec196765ae40ef9e20521a603c551efe0303020950d53a146bf9c66034d00c23130cce95576a2ff78016ca471276e8227fb30b1ffbd92e61804fb0c3eff9e30b1a826ee8f3e4730b4d86273ca977b4164453412f456c47616d616c2054657374204b65792032886204131102002205024dfcb1be021b03060b090807030206150802090a0b0416020301021e01021780000a0910a86bf526325b21b22bd9009e34511620415c974750a20df5cb56b182f3b48e6600a0a9466cb1a1305a84953445f77d461593f1d42bc1b00200009d0157044dfcb1be1004009565a951da1ee87119d600c077198f1c1bceb0f7aa54552489298e41ff788fa8f0d43a69871f0f6f77ebdfb14a4260cf9fbeb65d5844b4272a1904dd95136d06c3da745dc46327dd44a0f16f60135914368c8039a34033862261806bb2c5ce1152e2840254697872c85441ccb7321431d75a747a4bfb1d2c66362b51ce76311700030503fc0ea76601c196768070b7365a200e6ddb09307f262d5f39eec467b5f5784e22abdf1aa49226f59ab37cb49969d8f5230ea65caf56015abda62604544ed526c5c522bf92bed178a078789f6c807b6d34885688024a5bed9e9f8c58d11d4b82487b44c5f470c5606806a0443b79cadb45e0f897a561a53f724e5349b9267c75ca17fe0303020950d53a146bf9c660bc5f4ce8f072465e2d2466434320c1e712272fafc20e342fe7608101580fa1a1a367e60486a7cd1246b7ef5586cf5e10b32762b710a30144f12dd17dd4884904181102000905024dfcb1be021b0c000a0910a86bf526325b21b2904c00a0b2b66b4b39ccffda1d10f3ea8d58f827e30a8b8e009f4255b2d8112a184e40cde43a34e8655ca7809370b0020000"

const signedMessageHex = "a3019bc0cbccc0c4b8d8b74ee2108fe16ec6d3ca490cbe362d3f8333d3f352531472538b8b13d353b97232f352158c20943157c71c16064626063656269052062e4e01987e9b6fccff4b7df3a34c534b23e679cbec3bc0f8f6e64dfb4b55fe3f8efa9ce110ddb5cd79faf1d753c51aecfa669f7e7aa043436596cccc3359cb7dd6bbe9ecaa69e5989d9e57209571edc0b2fa7f57b9b79a64ee6e99ce1371395fee92fec2796f7b15a77c386ff668ee27f6d38f0baa6c438b561657377bf6acff3c5947befd7bf4c196252f1d6e5c524d0300"

const signedTextMessageHex = "a3019bc0cbccc8c4b8d8b74ee2108fe16ec6d36a250cbece0c178233d3f352531472538b8b13d35379b97232f352158ca0b4312f57c71c1646462606365626906a062e4e019811591798ff99bf8afee860b0d8a8c2a85c3387e3bcf0bb3b17987f2bbcfab2aa526d930cbfd3d98757184df3995c9f3e7790e36e3e9779f06089d4c64e9e47dd6202cb6e9bc73c5d11bb59fbaf89d22d8dc7cf199ddf17af96e77c5f65f9bbed56f427bd8db7af37f6c9984bf9385efaf5f184f986fb3e6adb0ecfe35bbf92d16a7aa2a344fb0bc52fb7624f0200"

const signedEncryptedMessageHex = "c18c032a67d68660df41c70103ff5a84c9a72f80e74ef0384c2d6a9ebfe2b09e06a8f298394f6d2abf174e40934ab0ec01fb2d0ddf21211c6fe13eb238563663b017a6b44edca552eb4736c4b7dc6ed907dd9e12a21b51b64b46f902f76fb7aaf805c1db8070574d8d0431a23e324a750f77fb72340a17a42300ee4ca8207301e95a731da229a63ab9c6b44541fbd2c11d016d810b3b3b2b38f15b5b40f0a4910332829c2062f1f7cc61f5b03677d73c54cafa1004ced41f315d46444946faae571d6f426e6dbd45d9780eb466df042005298adabf7ce0ef766dfeb94cd449c7ed0046c880339599c4711af073ce649b1e237c40b50a5536283e03bdbb7afad78bd08707715c67fb43295f905b4c479178809d429a8e167a9a8c6dfd8ab20b4edebdc38d6dec879a3202e1b752690d9bb5b0c07c5a227c79cc200e713a99251a4219d62ad5556900cf69bd384b6c8e726c7be267471d0d23af956da165af4af757246c2ebcc302b39e8ef2fccb4971b234fcda22d759ddb20e27269ee7f7fe67898a9de721bfa02ab0becaa046d00ea16cb1afc4e2eab40d0ac17121c565686e5cbd0cbdfbd9d6db5c70278b9c9db5a83176d04f61fbfbc4471d721340ede2746e5c312ded4f26787985af92b64fae3f253dbdde97f6a5e1996fd4d865599e32ff76325d3e9abe93184c02988ee89a4504356a4ef3b9b7a57cbb9637ca90af34a7676b9ef559325c3cca4e29d69fec1887f5440bb101361d744ad292a8547f22b4f22b419a42aa836169b89190f46d9560824cb2ac6e8771de8223216a5e647e132ab9eebcba89569ab339cb1c3d70fe806b31f4f4c600b4103b8d7583ebff16e43dcda551e6530f975122eb8b29"

const verifiedSignatureEncryptedMessageHex = "c2b304000108000605026048f6d600210910a34d7e18c20c31bb1621045fb74b1d03b1e3cb31bc2f8aa34d7e18c20c31bb9a3b0400a32ddac1af259c1b0abab0041327ea04970944401978fb647dd1cf9aba4f164e43f0d8a9389501886474bdd4a6e77f6aea945c07dfbf87743835b44cc2c39a1f9aeecfa83135abc92e18e50396f2e6a06c44e0188b0081effbfb4160d28f118d4ff73dd199a102e47cffd8c7ff2bacd83ae72b5820c021a486766dd587b5da61"

const unverifiedSignatureEncryptedMessageHex = "c2b304000108000605026048f6d600210910a34d7e18c20c31bb1621045fb74b1d03b1e3cb31bc2f8aa34d7e18c20c31bb9a3b0400a32ddac1af259c1b0abab0041327ea04970944401978fb647dd1cf9aba4f164e43f0d8a9389501886474bdd4a6e77f6aea945c07dfbf87743835b44cc2c39a1f9aeecfa83135abc92e18e50396f2e6a06c44e0188b0081effbfb4160d28f118d4ff73dd199a102e47cffd8c7ff2bacd83ae72b5820c021a486766dd587b5da61"

const signedEncryptedMessage2Hex = "85010e03cf6a7abcd43e36731003fb057f5495b79db367e277cdbe4ab90d924ddee0c0381494112ff8c1238fb0184af35d1731573b01bc4c55ecacd2aafbe2003d36310487d1ecc9ac994f3fada7f9f7f5c3a64248ab7782906c82c6ff1303b69a84d9a9529c31ecafbcdb9ba87e05439897d87e8a2a3dec55e14df19bba7f7bd316291c002ae2efd24f83f9e3441203fc081c0c23dc3092a454ca8a082b27f631abf73aca341686982e8fbda7e0e7d863941d68f3de4a755c2964407f4b5e0477b3196b8c93d551dd23c8beef7d0f03fbb1b6066f78907faf4bf1677d8fcec72651124080e0b7feae6b476e72ab207d38d90b958759fdedfc3c6c35717c9dbfc979b3cfbbff0a76d24a5e57056bb88acbd2a901ef64bc6e4db02adc05b6250ff378de81dca18c1910ab257dff1b9771b85bb9bbe0a69f5989e6d1710a35e6dfcceb7d8fb5ccea8db3932b3d9ff3fe0d327597c68b3622aec8e3716c83a6c93f497543b459b58ba504ed6bcaa747d37d2ca746fe49ae0a6ce4a8b694234e941b5159ff8bd34b9023da2814076163b86f40eed7c9472f81b551452d5ab87004a373c0172ec87ea6ce42ccfa7dbdad66b745496c4873d8019e8c28d6b3"

const signatureEncryptedMessage2Hex = "c24604001102000605024dfd0166000a091033af447ccd759b09bae600a096ec5e63ecf0a403085e10f75cc3bab327663282009f51fad9df457ed8d2b70d8a73c76e0443eac0f377"

const symmetricallyEncryptedCompressedHex = "c32e040903085a357c1a7b5614ed00cc0d1d92f428162058b3f558a0fb0980d221ebac6c97d5eda4e0fe32f6e706e94dd263012d6ca1ef8c4bbd324098225e603a10c85ebf09cbf7b5aeeb5ce46381a52edc51038b76a8454483be74e6dcd1e50d5689a8ae7eceaeefed98a0023d49b22eb1f65c2aa1ef1783bb5e1995713b0457102ec3c3075fe871267ffa4b686ad5d52000d857"

const dsaTestKeyHex = "9901a2044d6c49de110400cb5ce438cf9250907ac2ba5bf6547931270b89f7c4b53d9d09f4d0213a5ef2ec1f26806d3d259960f872a4a102ef1581ea3f6d6882d15134f21ef6a84de933cc34c47cc9106efe3bd84c6aec12e78523661e29bc1a61f0aab17fa58a627fd5fd33f5149153fbe8cd70edf3d963bc287ef875270ff14b5bfdd1bca4483793923b00a0fe46d76cb6e4cbdc568435cd5480af3266d610d303fe33ae8273f30a96d4d34f42fa28ce1112d425b2e3bf7ea553d526e2db6b9255e9dc7419045ce817214d1a0056dbc8d5289956a4b1b69f20f1105124096e6a438f41f2e2495923b0f34b70642607d45559595c7fe94d7fa85fc41bf7d68c1fd509ebeaa5f315f6059a446b9369c277597e4f474a9591535354c7e7f4fd98a08aa60400b130c24ff20bdfbf683313f5daebf1c9b34b3bdadfc77f2ddd72ee1fb17e56c473664bc21d66467655dd74b9005e3a2bacce446f1920cd7017231ae447b67036c9b431b8179deacd5120262d894c26bc015bffe3d827ba7087ad9b700d2ca1f6d16cc1786581e5dd065f293c31209300f9b0afcc3f7c08dd26d0a22d87580b4db41054657374204b65792033202844534129886204131102002205024d6c49de021b03060b090807030206150802090a0b0416020301021e01021780000a0910338934250ccc03607e0400a0bdb9193e8a6b96fc2dfc108ae848914b504481f100a09c4dc148cb693293a67af24dd40d2b13a9e36794"

const dsaTestKeyPrivateHex = "9501bb044d6c49de110400cb5ce438cf9250907ac2ba5bf6547931270b89f7c4b53d9d09f4d0213a5ef2ec1f26806d3d259960f872a4a102ef1581ea3f6d6882d15134f21ef6a84de933cc34c47cc9106efe3bd84c6aec12e78523661e29bc1a61f0aab17fa58a627fd5fd33f5149153fbe8cd70edf3d963bc287ef875270ff14b5bfdd1bca4483793923b00a0fe46d76cb6e4cbdc568435cd5480af3266d610d303fe33ae8273f30a96d4d34f42fa28ce1112d425b2e3bf7ea553d526e2db6b9255e9dc7419045ce817214d1a0056dbc8d5289956a4b1b69f20f1105124096e6a438f41f2e2495923b0f34b70642607d45559595c7fe94d7fa85fc41bf7d68c1fd509ebeaa5f315f6059a446b9369c277597e4f474a9591535354c7e7f4fd98a08aa60400b130c24ff20bdfbf683313f5daebf1c9b34b3bdadfc77f2ddd72ee1fb17e56c473664bc21d66467655dd74b9005e3a2bacce446f1920cd7017231ae447b67036c9b431b8179deacd5120262d894c26bc015bffe3d827ba7087ad9b700d2ca1f6d16cc1786581e5dd065f293c31209300f9b0afcc3f7c08dd26d0a22d87580b4d00009f592e0619d823953577d4503061706843317e4fee083db41054657374204b65792033202844534129886204131102002205024d6c49de021b03060b090807030206150802090a0b0416020301021e01021780000a0910338934250ccc03607e0400a0bdb9193e8a6b96fc2dfc108ae848914b504481f100a09c4dc148cb693293a67af24dd40d2b13a9e36794"

const p256TestKeyHex = "98520456e5b83813082a8648ce3d030107020304a2072cd6d21321266c758cc5b83fab0510f751cb8d91897cddb7047d8d6f185546e2107111b0a95cb8ef063c33245502af7a65f004d5919d93ee74eb71a66253b424502d3235362054657374204b6579203c696e76616c6964406578616d706c652e636f6d3e8879041313080021050256e5b838021b03050b09080702061508090a0b020416020301021e01021780000a0910d44a2c495918513e54e50100dfa64f97d9b47766fc1943c6314ba3f2b2a103d71ad286dc5b1efb96a345b0c80100dbc8150b54241f559da6ef4baacea6d31902b4f4b1bdc09b34bf0502334b7754b8560456e5b83812082a8648ce3d030107020304bfe3cea9cee13486f8d518aa487fecab451f25467d2bf08e58f63e5fa525d5482133e6a79299c274b068ef0be448152ad65cf11cf764348588ca4f6a0bcf22b6030108078861041813080009050256e5b838021b0c000a0910d44a2c495918513e4a4800ff49d589fa64024ad30be363a032e3a0e0e6f5db56ba4c73db850518bf0121b8f20100fd78e065f4c70ea5be9df319ea67e493b936fc78da834a71828043d3154af56e"

const p256TestKeyPrivateHex = "94a50456e5b83813082a8648ce3d030107020304a2072cd6d21321266c758cc5b83fab0510f751cb8d91897cddb7047d8d6f185546e2107111b0a95cb8ef063c33245502af7a65f004d5919d93ee74eb71a66253fe070302f0c2bfb0b6c30f87ee1599472b8636477eab23ced13b271886a4b50ed34c9d8436af5af5b8f88921f0efba6ef8c37c459bbb88bc1c6a13bbd25c4ce9b1e97679569ee77645d469bf4b43de637f5561b424502d3235362054657374204b6579203c696e76616c6964406578616d706c652e636f6d3e8879041313080021050256e5b838021b03050b09080702061508090a0b020416020301021e01021780000a0910d44a2c495918513e54e50100dfa64f97d9b47766fc1943c6314ba3f2b2a103d71ad286dc5b1efb96a345b0c80100dbc8150b54241f559da6ef4baacea6d31902b4f4b1bdc09b34bf0502334b77549ca90456e5b83812082a8648ce3d030107020304bfe3cea9cee13486f8d518aa487fecab451f25467d2bf08e58f63e5fa525d5482133e6a79299c274b068ef0be448152ad65cf11cf764348588ca4f6a0bcf22b603010807fe0703027510012471a603cfee2968dce19f732721ddf03e966fd133b4e3c7a685b788705cbc46fb026dc94724b830c9edbaecd2fb2c662f23169516cacd1fe423f0475c364ecc10abcabcfd4bbbda1a36a1bd8861041813080009050256e5b838021b0c000a0910d44a2c495918513e4a4800ff49d589fa64024ad30be363a032e3a0e0e6f5db56ba4c73db850518bf0121b8f20100fd78e065f4c70ea5be9df319ea67e493b936fc78da834a71828043d3154af56e"

const armoredPrivateKeyBlock = `-----BEGIN PGP PRIVATE KEY BLOCK-----
Version: GnuPG v1.4.10 (GNU/Linux)

lQHYBE2rFNoBBADFwqWQIW/DSqcB4yCQqnAFTJ27qS5AnB46ccAdw3u4Greeu3Bp
idpoHdjULy7zSKlwR1EA873dO/k/e11Ml3dlAFUinWeejWaK2ugFP6JjiieSsrKn
vWNicdCS4HTWn0X4sjl0ZiAygw6GNhqEQ3cpLeL0g8E9hnYzJKQ0LWJa0QARAQAB
AAP/TB81EIo2VYNmTq0pK1ZXwUpxCrvAAIG3hwKjEzHcbQznsjNvPUihZ+NZQ6+X
0HCfPAdPkGDCLCb6NavcSW+iNnLTrdDnSI6+3BbIONqWWdRDYJhqZCkqmG6zqSfL
IdkJgCw94taUg5BWP/AAeQrhzjChvpMQTVKQL5mnuZbUCeMCAN5qrYMP2S9iKdnk
VANIFj7656ARKt/nf4CBzxcpHTyB8+d2CtPDKCmlJP6vL8t58Jmih+kHJMvC0dzn
gr5f5+sCAOOe5gt9e0am7AvQWhdbHVfJU0TQJx+m2OiCJAqGTB1nvtBLHdJnfdC9
TnXXQ6ZXibqLyBies/xeY2sCKL5qtTMCAKnX9+9d/5yQxRyrQUHt1NYhaXZnJbHx
q4ytu0eWz+5i68IYUSK69jJ1NWPM0T6SkqpB3KCAIv68VFm9PxqG1KmhSrQIVGVz
dCBLZXmIuAQTAQIAIgUCTasU2gIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AA
CgkQO9o98PRieSoLhgQAkLEZex02Qt7vGhZzMwuN0R22w3VwyYyjBx+fM3JFETy1
ut4xcLJoJfIaF5ZS38UplgakHG0FQ+b49i8dMij0aZmDqGxrew1m4kBfjXw9B/v+
eIqpODryb6cOSwyQFH0lQkXC040pjq9YqDsO5w0WYNXYKDnzRV0p4H1pweo2VDid
AdgETasU2gEEAN46UPeWRqKHvA99arOxee38fBt2CI08iiWyI8T3J6ivtFGixSqV
bRcPxYO/qLpVe5l84Nb3X71GfVXlc9hyv7CD6tcowL59hg1E/DC5ydI8K8iEpUmK
/UnHdIY5h8/kqgGxkY/T/hgp5fRQgW1ZoZxLajVlMRZ8W4tFtT0DeA+JABEBAAEA
A/0bE1jaaZKj6ndqcw86jd+QtD1SF+Cf21CWRNeLKnUds4FRRvclzTyUMuWPkUeX
TaNNsUOFqBsf6QQ2oHUBBK4VCHffHCW4ZEX2cd6umz7mpHW6XzN4DECEzOVksXtc
lUC1j4UB91DC/RNQqwX1IV2QLSwssVotPMPqhOi0ZLNY7wIA3n7DWKInxYZZ4K+6
rQ+POsz6brEoRHwr8x6XlHenq1Oki855pSa1yXIARoTrSJkBtn5oI+f8AzrnN0BN
oyeQAwIA/7E++3HDi5aweWrViiul9cd3rcsS0dEnksPhvS0ozCJiHsq/6GFmy7J8
QSHZPteedBnZyNp5jR+H7cIfVN3KgwH/Skq4PsuPhDq5TKK6i8Pc1WW8MA6DXTdU
nLkX7RGmMwjC0DBf7KWAlPjFaONAX3a8ndnz//fy1q7u2l9AZwrj1qa1iJ8EGAEC
AAkFAk2rFNoCGwwACgkQO9o98PRieSo2/QP/WTzr4ioINVsvN1akKuekmEMI3LAp
BfHwatufxxP1U+3Si/6YIk7kuPB9Hs+pRqCXzbvPRrI8NHZBmc8qIGthishdCYad
AHcVnXjtxrULkQFGbGvhKURLvS9WnzD/m1K2zzwxzkPTzT9/Yf06O6Mal5AdugPL
VrM0m72/jnpKo04=
=zNCn
-----END PGP PRIVATE KEY BLOCK-----`

const e2ePublicKey = `-----BEGIN PGP PUBLIC KEY BLOCK-----
Charset: UTF-8

xv8AAABSBAAAAAATCCqGSM49AwEHAgME1LRoXSpOxtHXDUdmuvzchyg6005qIBJ4
sfaSxX7QgH9RV2ONUhC+WiayCNADq+UMzuR/vunSr4aQffXvuGnR383/AAAAFDxk
Z2lsQHlhaG9vLWluYy5jb20+wv8AAACGBBATCAA4/wAAAAWCVGvAG/8AAAACiwn/
AAAACZC2VkQCOjdvYf8AAAAFlQgJCgv/AAAAA5YBAv8AAAACngEAAE1BAP0X8veD
24IjmI5/C6ZAfVNXxgZZFhTAACFX75jUA3oD6AEAzoSwKf1aqH6oq62qhCN/pekX
+WAsVMBhNwzLpqtCRjLO/wAAAFYEAAAAABIIKoZIzj0DAQcCAwT50ain7vXiIRv8
B1DO3x3cE/aattZ5sHNixJzRCXi2vQIA5QmOxZ6b5jjUekNbdHG3SZi1a2Ak5mfX
fRxC/5VGAwEIB8L/AAAAZQQYEwgAGP8AAAAFglRrwBz/AAAACZC2VkQCOjdvYQAA
FJAA9isX3xtGyMLYwp2F3nXm7QEdY5bq5VUcD/RJlj792VwA/1wH0pCzVLl4Q9F9
ex7En5r7rHR5xwX82Msc+Rq9dSyO
=7MrZ
-----END PGP PUBLIC KEY BLOCK-----`

const dsaKeyWithSHA512 = `9901a2044f04b07f110400db244efecc7316553ee08d179972aab87bb1214de7692593fcf5b6feb1c80fba268722dd464748539b85b81d574cd2d7ad0ca2444de4d849b8756bad7768c486c83a824f9bba4af773d11742bdfb4ac3b89ef8cc9452d4aad31a37e4b630d33927bff68e879284a1672659b8b298222fc68f370f3e24dccacc4a862442b9438b00a0ea444a24088dc23e26df7daf8f43cba3bffc4fe703fe3d6cd7fdca199d54ed8ae501c30e3ec7871ea9cdd4cf63cfe6fc82281d70a5b8bb493f922cd99fba5f088935596af087c8d818d5ec4d0b9afa7f070b3d7c1dd32a84fca08d8280b4890c8da1dde334de8e3cad8450eed2a4a4fcc2db7b8e5528b869a74a7f0189e11ef097ef1253582348de072bb07a9fa8ab838e993cef0ee203ff49298723e2d1f549b00559f886cd417a41692ce58d0ac1307dc71d85a8af21b0cf6eaa14baf2922d3a70389bedf17cc514ba0febbd107675a372fe84b90162a9e88b14d4b1c6be855b96b33fb198c46f058568817780435b6936167ebb3724b680f32bf27382ada2e37a879b3d9de2abe0c3f399350afd1ad438883f4791e2e3b4184453412068617368207472756e636174696f6e207465737488620413110a002205024f04b07f021b03060b090807030206150802090a0b0416020301021e01021780000a0910ef20e0cefca131581318009e2bf3bf047a44d75a9bacd00161ee04d435522397009a03a60d51bd8a568c6c021c8d7cf1be8d990d6417b0020003`

const unknownHashFunctionHex = `8a00000040040001990006050253863c24000a09103b4fe6acc0b21f32ffff0101010101010101010101010101010101010101010101010101010101010101010101010101`

const rsaSignatureBadMPIlength = `8a00000040040001030006050253863c24000a09103b4fe6acc0b21f32ffff0101010101010101010101010101010101010101010101010101010101010101010101010101`

const missingHashFunctionHex = `8a00000040040001030006050253863c24000a09103b4fe6acc0b21f32ffff0101010101010101010101010101010101010101010101010101010101010101010101`

const campbellQuine = `a0b001000300fcffa0b001000d00f2ff000300fcffa0b001000d00f2ff8270a01c00000500faff8270a01c00000500faff000500faff001400ebff8270a01c00000500faff000500faff001400ebff428821c400001400ebff428821c400001400ebff428821c400001400ebff428821c400001400ebff428821c400000000ffff000000ffff000b00f4ff428821c400000000ffff000000ffff000b00f4ff0233214c40000100feff000233214c40000100feff0000`

const keyV4forVerifyingSignedMessageV3 = `-----BEGIN PGP PUBLIC KEY BLOCK-----
Comment: GPGTools - https://gpgtools.org

mI0EVfxoFQEEAMBIqmbDfYygcvP6Phr1wr1XI41IF7Qixqybs/foBF8qqblD9gIY
BKpXjnBOtbkcVOJ0nljd3/sQIfH4E0vQwK5/4YRQSI59eKOqd6Fx+fWQOLG+uu6z
tewpeCj9LLHvibx/Sc7VWRnrznia6ftrXxJ/wHMezSab3tnGC0YPVdGNABEBAAG0
JEdvY3J5cHRvIFRlc3QgS2V5IDx0aGVtYXhAZ21haWwuY29tPoi5BBMBCgAjBQJV
/GgVAhsDBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQeXnQmhdGW9PFVAP+
K7TU0qX5ArvIONIxh/WAweyOk884c5cE8f+3NOPOOCRGyVy0FId5A7MmD5GOQh4H
JseOZVEVCqlmngEvtHZb3U1VYtVGE5WZ+6rQhGsMcWP5qaT4soYwMBlSYxgYwQcx
YhN9qOr292f9j2Y//TTIJmZT4Oa+lMxhWdqTfX+qMgG4jQRV/GgVAQQArhFSiij1
b+hT3dnapbEU+23Z1yTu1DfF6zsxQ4XQWEV3eR8v+8mEDDNcz8oyyF56k6UQ3rXi
UMTIwRDg4V6SbZmaFbZYCOwp/EmXJ3rfhm7z7yzXj2OFN22luuqbyVhuL7LRdB0M
pxgmjXb4tTvfgKd26x34S+QqUJ7W6uprY4sAEQEAAYifBBgBCgAJBQJV/GgVAhsM
AAoJEHl50JoXRlvT7y8D/02ckx4OMkKBZo7viyrBw0MLG92i+DC2bs35PooHR6zz
786mitjOp5z2QWNLBvxC70S0qVfCIz8jKupO1J6rq6Z8CcbLF3qjm6h1omUBf8Nd
EfXKD2/2HV6zMKVknnKzIEzauh+eCKS2CeJUSSSryap/QLVAjRnckaES/OsEWhNB
=RZia
-----END PGP PUBLIC KEY BLOCK-----
`

const signedMessageV3 = `-----BEGIN PGP MESSAGE-----
Comment: GPGTools - https://gpgtools.org

owGbwMvMwMVYWXlhlrhb9GXG03JJDKF/MtxDMjKLFYAoUaEktbhEITe1uDgxPVWP
q5NhKjMrWAVcC9evD8z/bF/uWNjqtk/X3y5/38XGRQHm/57rrDRYuGnTw597Xqka
uM3137/hH3Os+Jf2dc0fXOITKwJvXJvecPVs0ta+Vg7ZO1MLn8w58Xx+6L58mbka
DGHyU9yTueZE8D+QF/Tz28Y78dqtF56R1VPn9Xw4uJqrWYdd7b3vIZ1V6R4Nh05d
iT57d/OhWwA=
=hG7R
-----END PGP MESSAGE-----
`

// https://mailarchive.ietf.org/arch/msg/openpgp/9SheW_LENE0Kxf7haNllovPyAdY/
const v5PrivKey = `-----BEGIN PGP PRIVATE KEY BLOCK-----

lGEFXJH05BYAAAAtCSsGAQQB2kcPAQEHQFhZlVcVVtwf+21xNQPX+ecMJJBL0MPd
fj75iux+my8QAAAAAAAiAQCHZ1SnSUmWqxEsoI6facIVZQu6mph3cBFzzTvcm5lA
Ng5ctBhlbW1hLmdvbGRtYW5AZXhhbXBsZS5uZXSIlgUTFggASCIhBRk0e8mHJGQC
X5nfPsLgAA7ZiEiS4fez6kyUAJFZVptUBQJckfTkAhsDBQsJCAcCAyICAQYVCgkI
CwIEFgIDAQIeBwIXgAAA9cAA/jiR3yMsZMeEQ40u6uzEoXa6UXeV/S3wwJAXRJy9
M8s0AP9vuL/7AyTfFXwwzSjDnYmzS0qAhbLDQ643N+MXGBJ2BZxmBVyR9OQSAAAA
MgorBgEEAZdVAQUBAQdA+nysrzml2UCweAqtpDuncSPlvrcBWKU0yfU0YvYWWAoD
AQgHAAAAAAAiAP9OdAPppjU1WwpqjIItkxr+VPQRT8Zm/Riw7U3F6v3OiBFHiHoF
GBYIACwiIQUZNHvJhyRkAl+Z3z7C4AAO2YhIkuH3s+pMlACRWVabVAUCXJH05AIb
DAAAOSQBAP4BOOIR/sGLNMOfeb5fPs/02QMieoiSjIBnijhob2U5AQC+RtOHCHx7
TcIYl5/Uyoi+FOvPLcNw4hOv2nwUzSSVAw==
=IiS2
-----END PGP PRIVATE KEY BLOCK-----`

// Generated with the above private key
const v5PrivKeyMsg = `-----BEGIN PGP MESSAGE-----
Version: OpenPGP.js v4.10.7
Comment: https://openpgpjs.org

xA0DAQoWGTR7yYckZAIByxF1B21zZy50eHRfbIGSdGVzdMJ3BQEWCgAGBQJf
bIGSACMiIQUZNHvJhyRkAl+Z3z7C4AAO2YhIkuH3s+pMlACRWVabVDQvAP9G
y29VPonFXqi2zKkpZrvyvZxg+n5e8Nt9wNbuxeCd3QD/TtO2s+JvjrE4Siwv
UQdl5MlBka1QSNbMq2Bz7XwNPg4=
=6lbM
-----END PGP MESSAGE-----`
07070100000230000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/s2k    07070100000231000081A4000000000000000000000001645E367C000025BC000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/s2k/s2k.go // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package s2k implements the various OpenPGP string-to-key transforms as
// specified in RFC 4800 section 3.7.1.
package s2k // import "github.com/ProtonMail/go-crypto/openpgp/s2k"

import (
	"crypto"
	"hash"
	"io"
	"strconv"

	"github.com/ProtonMail/go-crypto/openpgp/errors"
	"github.com/ProtonMail/go-crypto/openpgp/internal/algorithm"
)

// Config collects configuration parameters for s2k key-stretching
// transformations. A nil *Config is valid and results in all default
// values. Currently, Config is used only by the Serialize function in
// this package.
type Config struct {
	// S2KMode is the mode of s2k function.
	// It can be 0 (simple), 1(salted), 3(iterated)
	// 2(reserved) 100-110(private/experimental).
	S2KMode uint8
	// Hash is the default hash function to be used. If
	// nil, SHA256 is used.
	Hash crypto.Hash
	// S2KCount is only used for symmetric encryption. It
	// determines the strength of the passphrase stretching when
	// the said passphrase is hashed to produce a key. S2KCount
	// should be between 65536 and 65011712, inclusive. If Config
	// is nil or S2KCount is 0, the value 16777216 used. Not all
	// values in the above range can be represented. S2KCount will
	// be rounded up to the next representable value if it cannot
	// be encoded exactly. See RFC 4880 Section 3.7.1.3.
	S2KCount int
}

// Params contains all the parameters of the s2k packet
type Params struct {
	// mode is the mode of s2k function.
	// It can be 0 (simple), 1(salted), 3(iterated)
	// 2(reserved) 100-110(private/experimental).
	mode uint8
	// hashId is the ID of the hash function used in any of the modes
	hashId byte
	// salt is a byte array to use as a salt in hashing process
	salt []byte
	// countByte is used to determine how many rounds of hashing are to
	// be performed in s2k mode 3. See RFC 4880 Section 3.7.1.3.
	countByte byte
}

func (c *Config) hash() crypto.Hash {
	if c == nil || uint(c.Hash) == 0 {
		return crypto.SHA256
	}

	return c.Hash
}

// EncodedCount get encoded count
func (c *Config) EncodedCount() uint8 {
	if c == nil || c.S2KCount == 0 {
		return 224 // The common case. Corresponding to 16777216
	}

	i := c.S2KCount

	switch {
	case i < 65536:
		i = 65536
	case i > 65011712:
		i = 65011712
	}

	return encodeCount(i)
}

// encodeCount converts an iterative "count" in the range 1024 to
// 65011712, inclusive, to an encoded count. The return value is the
// octet that is actually stored in the GPG file. encodeCount panics
// if i is not in the above range (encodedCount above takes care to
// pass i in the correct range). See RFC 4880 Section 3.7.7.1.
func encodeCount(i int) uint8 {
	if i < 65536 || i > 65011712 {
		panic("count arg i outside the required range")
	}

	for encoded := 96; encoded < 256; encoded++ {
		count := decodeCount(uint8(encoded))
		if count >= i {
			return uint8(encoded)
		}
	}

	return 255
}

// decodeCount returns the s2k mode 3 iterative "count" corresponding to
// the encoded octet c.
func decodeCount(c uint8) int {
	return (16 + int(c&15)) << (uint32(c>>4) + 6)
}

// Simple writes to out the result of computing the Simple S2K function (RFC
// 4880, section 3.7.1.1) using the given hash and input passphrase.
func Simple(out []byte, h hash.Hash, in []byte) {
	Salted(out, h, in, nil)
}

var zero [1]byte

// Salted writes to out the result of computing the Salted S2K function (RFC
// 4880, section 3.7.1.2) using the given hash, input passphrase and salt.
func Salted(out []byte, h hash.Hash, in []byte, salt []byte) {
	done := 0
	var digest []byte

	for i := 0; done < len(out); i++ {
		h.Reset()
		for j := 0; j < i; j++ {
			h.Write(zero[:])
		}
		h.Write(salt)
		h.Write(in)
		digest = h.Sum(digest[:0])
		n := copy(out[done:], digest)
		done += n
	}
}

// Iterated writes to out the result of computing the Iterated and Salted S2K
// function (RFC 4880, section 3.7.1.3) using the given hash, input passphrase,
// salt and iteration count.
func Iterated(out []byte, h hash.Hash, in []byte, salt []byte, count int) {
	combined := make([]byte, len(in)+len(salt))
	copy(combined, salt)
	copy(combined[len(salt):], in)

	if count < len(combined) {
		count = len(combined)
	}

	done := 0
	var digest []byte
	for i := 0; done < len(out); i++ {
		h.Reset()
		for j := 0; j < i; j++ {
			h.Write(zero[:])
		}
		written := 0
		for written < count {
			if written+len(combined) > count {
				todo := count - written
				h.Write(combined[:todo])
				written = count
			} else {
				h.Write(combined)
				written += len(combined)
			}
		}
		digest = h.Sum(digest[:0])
		n := copy(out[done:], digest)
		done += n
	}
}

// Generate generates valid parameters from given configuration.
// It will enforce salted + hashed s2k method
func Generate(rand io.Reader, c *Config) (*Params, error) {
	hashId, ok := HashToHashId(c.Hash)
	if !ok {
		return nil, errors.UnsupportedError("no such hash")
	}

	params := &Params{
		mode:      3, // Enforce iterared + salted method
		hashId:    hashId,
		salt:      make([]byte, 8),
		countByte: c.EncodedCount(),
	}

	if _, err := io.ReadFull(rand, params.salt); err != nil {
		return nil, err
	}

	return params, nil
}

// Parse reads a binary specification for a string-to-key transformation from r
// and returns a function which performs that transform. If the S2K is a special
// GNU extension that indicates that the private key is missing, then the error
// returned is errors.ErrDummyPrivateKey.
func Parse(r io.Reader) (f func(out, in []byte), err error) {
	params, err := ParseIntoParams(r)
	if err != nil {
		return nil, err
	}

	return params.Function()
}

// ParseIntoParams reads a binary specification for a string-to-key
// transformation from r and returns a struct describing the s2k parameters.
func ParseIntoParams(r io.Reader) (params *Params, err error) {
	var buf [9]byte

	_, err = io.ReadFull(r, buf[:2])
	if err != nil {
		return
	}

	params = &Params{
		mode:   buf[0],
		hashId: buf[1],
	}

	switch params.mode {
	case 0:
		return params, nil
	case 1:
		_, err = io.ReadFull(r, buf[:8])
		if err != nil {
			return nil, err
		}

		params.salt = buf[:8]
		return params, nil
	case 3:
		_, err = io.ReadFull(r, buf[:9])
		if err != nil {
			return nil, err
		}

		params.salt = buf[:8]
		params.countByte = buf[8]
		return params, nil
	case 101:
		// This is a GNU extension. See
		// https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=blob;f=doc/DETAILS;h=fe55ae16ab4e26d8356dc574c9e8bc935e71aef1;hb=23191d7851eae2217ecdac6484349849a24fd94a#l1109
		if _, err = io.ReadFull(r, buf[:4]); err != nil {
			return nil, err
		}
		if buf[0] == 'G' && buf[1] == 'N' && buf[2] == 'U' && buf[3] == 1 {
			return params, nil
		}
		return nil, errors.UnsupportedError("GNU S2K extension")
	}

	return nil, errors.UnsupportedError("S2K function")
}

func (params *Params) Dummy() bool {
	return params != nil && params.mode == 101
}

func (params *Params) Function() (f func(out, in []byte), err error) {
	if params.Dummy() {
		return nil, errors.ErrDummyPrivateKey("dummy key found")
	}
	hashObj, ok := HashIdToHash(params.hashId)
	if !ok {
		return nil, errors.UnsupportedError("hash for S2K function: " + strconv.Itoa(int(params.hashId)))
	}
	if !hashObj.Available() {
		return nil, errors.UnsupportedError("hash not available: " + strconv.Itoa(int(hashObj)))
	}

	switch params.mode {
	case 0:
		f := func(out, in []byte) {
			Simple(out, hashObj.New(), in)
		}

		return f, nil
	case 1:
		f := func(out, in []byte) {
			Salted(out, hashObj.New(), in, params.salt)
		}

		return f, nil
	case 3:
		f := func(out, in []byte) {
			Iterated(out, hashObj.New(), in, params.salt, decodeCount(params.countByte))
		}

		return f, nil
	}

	return nil, errors.UnsupportedError("S2K function")
}

func (params *Params) Serialize(w io.Writer) (err error) {
	if _, err = w.Write([]byte{params.mode}); err != nil {
		return
	}
	if _, err = w.Write([]byte{params.hashId}); err != nil {
		return
	}
	if params.Dummy() {
		_, err = w.Write(append([]byte("GNU"), 1))
		return
	}
	if params.mode > 0 {
		if _, err = w.Write(params.salt); err != nil {
			return
		}
		if params.mode == 3 {
			_, err = w.Write([]byte{params.countByte})
		}
	}
	return
}

// Serialize salts and stretches the given passphrase and writes the
// resulting key into key. It also serializes an S2K descriptor to
// w. The key stretching can be configured with c, which may be
// nil. In that case, sensible defaults will be used.
func Serialize(w io.Writer, key []byte, rand io.Reader, passphrase []byte, c *Config) error {
	params, err := Generate(rand, c)
	if err != nil {
		return err
	}
	err = params.Serialize(w)
	if err != nil {
		return err
	}

	f, err := params.Function()
	if err != nil {
		return err
	}
	f(key, passphrase)
	return nil
}

// HashIdToHash returns a crypto.Hash which corresponds to the given OpenPGP
// hash id.
func HashIdToHash(id byte) (h crypto.Hash, ok bool) {
	if hash, ok := algorithm.HashById[id]; ok {
		return hash.HashFunc(), true
	}
	return 0, false
}

// HashIdToString returns the name of the hash function corresponding to the
// given OpenPGP hash id.
func HashIdToString(id byte) (name string, ok bool) {
	if hash, ok := algorithm.HashById[id]; ok {
		return hash.String(), true
	}
	return "", false
}

// HashIdToHash returns an OpenPGP hash id which corresponds the given Hash.
func HashToHashId(h crypto.Hash) (id byte, ok bool) {
	for id, hash := range algorithm.HashById {
		if hash.HashFunc() == h {
			return id, true
		}
	}
	return 0, false
}
07070100000232000081A4000000000000000000000001645E367C00004C0A000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/ProtonMail/go-crypto/openpgp/write.go   // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package openpgp

import (
	"crypto"
	"hash"
	"io"
	"strconv"
	"time"

	"github.com/ProtonMail/go-crypto/openpgp/armor"
	"github.com/ProtonMail/go-crypto/openpgp/errors"
	"github.com/ProtonMail/go-crypto/openpgp/packet"
	"github.com/ProtonMail/go-crypto/openpgp/s2k"
)

// DetachSign signs message with the private key from signer (which must
// already have been decrypted) and writes the signature to w.
// If config is nil, sensible defaults will be used.
func DetachSign(w io.Writer, signer *Entity, message io.Reader, config *packet.Config) error {
	return detachSign(w, signer, message, packet.SigTypeBinary, config)
}

// ArmoredDetachSign signs message with the private key from signer (which
// must already have been decrypted) and writes an armored signature to w.
// If config is nil, sensible defaults will be used.
func ArmoredDetachSign(w io.Writer, signer *Entity, message io.Reader, config *packet.Config) (err error) {
	return armoredDetachSign(w, signer, message, packet.SigTypeBinary, config)
}

// DetachSignText signs message (after canonicalising the line endings) with
// the private key from signer (which must already have been decrypted) and
// writes the signature to w.
// If config is nil, sensible defaults will be used.
func DetachSignText(w io.Writer, signer *Entity, message io.Reader, config *packet.Config) error {
	return detachSign(w, signer, message, packet.SigTypeText, config)
}

// ArmoredDetachSignText signs message (after canonicalising the line endings)
// with the private key from signer (which must already have been decrypted)
// and writes an armored signature to w.
// If config is nil, sensible defaults will be used.
func ArmoredDetachSignText(w io.Writer, signer *Entity, message io.Reader, config *packet.Config) error {
	return armoredDetachSign(w, signer, message, packet.SigTypeText, config)
}

func armoredDetachSign(w io.Writer, signer *Entity, message io.Reader, sigType packet.SignatureType, config *packet.Config) (err error) {
	out, err := armor.Encode(w, SignatureType, nil)
	if err != nil {
		return
	}
	err = detachSign(out, signer, message, sigType, config)
	if err != nil {
		return
	}
	return out.Close()
}

func detachSign(w io.Writer, signer *Entity, message io.Reader, sigType packet.SignatureType, config *packet.Config) (err error) {
	signingKey, ok := signer.SigningKeyById(config.Now(), config.SigningKey())
	if !ok {
		return errors.InvalidArgumentError("no valid signing keys")
	}
	if signingKey.PrivateKey == nil {
		return errors.InvalidArgumentError("signing key doesn't have a private key")
	}
	if signingKey.PrivateKey.Encrypted {
		return errors.InvalidArgumentError("signing key is encrypted")
	}

	sig := new(packet.Signature)
	sig.SigType = sigType
	sig.PubKeyAlgo = signingKey.PrivateKey.PubKeyAlgo
	sig.Hash = config.Hash()
	sig.CreationTime = config.Now()
	sigLifetimeSecs := config.SigLifetime()
	sig.SigLifetimeSecs = &sigLifetimeSecs
	sig.IssuerKeyId = &signingKey.PrivateKey.KeyId

	h, wrappedHash, err := hashForSignature(sig.Hash, sig.SigType)
	if err != nil {
		return
	}
	if _, err = io.Copy(wrappedHash, message); err != nil {
		return err
	}

	err = sig.Sign(h, signingKey.PrivateKey, config)
	if err != nil {
		return
	}

	return sig.Serialize(w)
}

// FileHints contains metadata about encrypted files. This metadata is, itself,
// encrypted.
type FileHints struct {
	// IsBinary can be set to hint that the contents are binary data.
	IsBinary bool
	// FileName hints at the name of the file that should be written. It's
	// truncated to 255 bytes if longer. It may be empty to suggest that the
	// file should not be written to disk. It may be equal to "_CONSOLE" to
	// suggest the data should not be written to disk.
	FileName string
	// ModTime contains the modification time of the file, or the zero time if not applicable.
	ModTime time.Time
}

// SymmetricallyEncrypt acts like gpg -c: it encrypts a file with a passphrase.
// The resulting WriteCloser must be closed after the contents of the file have
// been written.
// If config is nil, sensible defaults will be used.
func SymmetricallyEncrypt(ciphertext io.Writer, passphrase []byte, hints *FileHints, config *packet.Config) (plaintext io.WriteCloser, err error) {
	if hints == nil {
		hints = &FileHints{}
	}

	key, err := packet.SerializeSymmetricKeyEncrypted(ciphertext, passphrase, config)
	if err != nil {
		return
	}

	var w io.WriteCloser
	if config.AEAD() != nil {
		w, err = packet.SerializeAEADEncrypted(ciphertext, key, config.Cipher(), config.AEAD().Mode(), config)
		if err != nil {
			return
		}
	} else {
		w, err = packet.SerializeSymmetricallyEncrypted(ciphertext, config.Cipher(), key, config)
		if err != nil {
			return
		}
	}

	literalData := w
	if algo := config.Compression(); algo != packet.CompressionNone {
		var compConfig *packet.CompressionConfig
		if config != nil {
			compConfig = config.CompressionConfig
		}
		literalData, err = packet.SerializeCompressed(w, algo, compConfig)
		if err != nil {
			return
		}
	}

	var epochSeconds uint32
	if !hints.ModTime.IsZero() {
		epochSeconds = uint32(hints.ModTime.Unix())
	}
	return packet.SerializeLiteral(literalData, hints.IsBinary, hints.FileName, epochSeconds)
}

// intersectPreferences mutates and returns a prefix of a that contains only
// the values in the intersection of a and b. The order of a is preserved.
func intersectPreferences(a []uint8, b []uint8) (intersection []uint8) {
	var j int
	for _, v := range a {
		for _, v2 := range b {
			if v == v2 {
				a[j] = v
				j++
				break
			}
		}
	}

	return a[:j]
}

func hashToHashId(h crypto.Hash) uint8 {
	v, ok := s2k.HashToHashId(h)
	if !ok {
		panic("tried to convert unknown hash")
	}
	return v
}

// EncryptText encrypts a message to a number of recipients and, optionally,
// signs it. Optional information is contained in 'hints', also encrypted, that
// aids the recipients in processing the message. The resulting WriteCloser
// must be closed after the contents of the file have been written. If config
// is nil, sensible defaults will be used. The signing is done in text mode.
func EncryptText(ciphertext io.Writer, to []*Entity, signed *Entity, hints *FileHints, config *packet.Config) (plaintext io.WriteCloser, err error) {
	return encrypt(ciphertext, ciphertext, to, signed, hints, packet.SigTypeText, config)
}

// Encrypt encrypts a message to a number of recipients and, optionally, signs
// it. hints contains optional information, that is also encrypted, that aids
// the recipients in processing the message. The resulting WriteCloser must
// be closed after the contents of the file have been written.
// If config is nil, sensible defaults will be used.
func Encrypt(ciphertext io.Writer, to []*Entity, signed *Entity, hints *FileHints, config *packet.Config) (plaintext io.WriteCloser, err error) {
	return encrypt(ciphertext, ciphertext, to, signed, hints, packet.SigTypeBinary, config)
}

// EncryptSplit encrypts a message to a number of recipients and, optionally, signs
// it. hints contains optional information, that is also encrypted, that aids
// the recipients in processing the message. The resulting WriteCloser must
// be closed after the contents of the file have been written.
// If config is nil, sensible defaults will be used.
func EncryptSplit(keyWriter io.Writer, dataWriter io.Writer, to []*Entity, signed *Entity, hints *FileHints, config *packet.Config) (plaintext io.WriteCloser, err error) {
	return encrypt(keyWriter, dataWriter, to, signed, hints, packet.SigTypeBinary, config)
}

// EncryptTextSplit encrypts a message to a number of recipients and, optionally, signs
// it. hints contains optional information, that is also encrypted, that aids
// the recipients in processing the message. The resulting WriteCloser must
// be closed after the contents of the file have been written.
// If config is nil, sensible defaults will be used.
func EncryptTextSplit(keyWriter io.Writer, dataWriter io.Writer, to []*Entity, signed *Entity, hints *FileHints, config *packet.Config) (plaintext io.WriteCloser, err error) {
	return encrypt(keyWriter, dataWriter, to, signed, hints, packet.SigTypeText, config)
}

// writeAndSign writes the data as a payload package and, optionally, signs
// it. hints contains optional information, that is also encrypted,
// that aids the recipients in processing the message. The resulting
// WriteCloser must be closed after the contents of the file have been
// written. If config is nil, sensible defaults will be used.
func writeAndSign(payload io.WriteCloser, candidateHashes []uint8, signed *Entity, hints *FileHints, sigType packet.SignatureType, config *packet.Config) (plaintext io.WriteCloser, err error) {
	var signer *packet.PrivateKey
	if signed != nil {
		signKey, ok := signed.SigningKeyById(config.Now(), config.SigningKey())
		if !ok {
			return nil, errors.InvalidArgumentError("no valid signing keys")
		}
		signer = signKey.PrivateKey
		if signer == nil {
			return nil, errors.InvalidArgumentError("no private key in signing key")
		}
		if signer.Encrypted {
			return nil, errors.InvalidArgumentError("signing key must be decrypted")
		}
	}

	var hash crypto.Hash
	for _, hashId := range candidateHashes {
		if h, ok := s2k.HashIdToHash(hashId); ok && h.Available() {
			hash = h
			break
		}
	}

	// If the hash specified by config is a candidate, we'll use that.
	if configuredHash := config.Hash(); configuredHash.Available() {
		for _, hashId := range candidateHashes {
			if h, ok := s2k.HashIdToHash(hashId); ok && h == configuredHash {
				hash = h
				break
			}
		}
	}

	if hash == 0 {
		hashId := candidateHashes[0]
		name, ok := s2k.HashIdToString(hashId)
		if !ok {
			name = "#" + strconv.Itoa(int(hashId))
		}
		return nil, errors.InvalidArgumentError("cannot encrypt because no candidate hash functions are compiled in. (Wanted " + name + " in this case.)")
	}

	if signer != nil {
		ops := &packet.OnePassSignature{
			SigType:    sigType,
			Hash:       hash,
			PubKeyAlgo: signer.PubKeyAlgo,
			KeyId:      signer.KeyId,
			IsLast:     true,
		}
		if err := ops.Serialize(payload); err != nil {
			return nil, err
		}
	}

	if hints == nil {
		hints = &FileHints{}
	}

	w := payload
	if signer != nil {
		// If we need to write a signature packet after the literal
		// data then we need to stop literalData from closing
		// encryptedData.
		w = noOpCloser{w}

	}
	var epochSeconds uint32
	if !hints.ModTime.IsZero() {
		epochSeconds = uint32(hints.ModTime.Unix())
	}
	literalData, err := packet.SerializeLiteral(w, hints.IsBinary, hints.FileName, epochSeconds)
	if err != nil {
		return nil, err
	}

	if signer != nil {
		h, wrappedHash, err := hashForSignature(hash, sigType)
		if err != nil {
			return nil, err
		}
		metadata := &packet.LiteralData{
			Format:   't',
			FileName: hints.FileName,
			Time:     epochSeconds,
		}
		if hints.IsBinary {
			metadata.Format = 'b'
		}
		return signatureWriter{payload, literalData, hash, wrappedHash, h, signer, sigType, config, metadata}, nil
	}
	return literalData, nil
}

// encrypt encrypts a message to a number of recipients and, optionally, signs
// it. hints contains optional information, that is also encrypted, that aids
// the recipients in processing the message. The resulting WriteCloser must
// be closed after the contents of the file have been written.
// If config is nil, sensible defaults will be used.
func encrypt(keyWriter io.Writer, dataWriter io.Writer, to []*Entity, signed *Entity, hints *FileHints, sigType packet.SignatureType, config *packet.Config) (plaintext io.WriteCloser, err error) {
	if len(to) == 0 {
		return nil, errors.InvalidArgumentError("no encryption recipient provided")
	}

	// These are the possible ciphers that we'll use for the message.
	candidateCiphers := []uint8{
		uint8(packet.CipherAES128),
		uint8(packet.CipherAES256),
		uint8(packet.CipherCAST5),
	}
	// These are the possible hash functions that we'll use for the signature.
	candidateHashes := []uint8{
		hashToHashId(crypto.SHA256),
		hashToHashId(crypto.SHA384),
		hashToHashId(crypto.SHA512),
		hashToHashId(crypto.SHA1),
		hashToHashId(crypto.RIPEMD160),
	}
	candidateAeadModes := []uint8{
		uint8(packet.AEADModeEAX),
		uint8(packet.AEADModeOCB),
		uint8(packet.AEADModeExperimentalGCM),
	}
	candidateCompression := []uint8{
		uint8(packet.CompressionNone),
		uint8(packet.CompressionZIP),
		uint8(packet.CompressionZLIB),
	}
	// In the event that a recipient doesn't specify any supported ciphers
	// or hash functions, these are the ones that we assume that every
	// implementation supports.
	defaultCiphers := candidateCiphers[0:1]
	defaultHashes := candidateHashes[0:1]
	defaultAeadModes := candidateAeadModes[0:1]
	defaultCompression := candidateCompression[0:1]

	encryptKeys := make([]Key, len(to))
	// AEAD is used only if every key supports it.
	aeadSupported := true

	for i := range to {
		var ok bool
		encryptKeys[i], ok = to[i].EncryptionKey(config.Now())
		if !ok {
			return nil, errors.InvalidArgumentError("cannot encrypt a message to key id " + strconv.FormatUint(to[i].PrimaryKey.KeyId, 16) + " because it has no valid encryption keys")
		}

		sig := to[i].PrimaryIdentity().SelfSignature
		if sig.AEAD == false {
			aeadSupported = false
		}

		preferredSymmetric := sig.PreferredSymmetric
		if len(preferredSymmetric) == 0 {
			preferredSymmetric = defaultCiphers
		}
		preferredHashes := sig.PreferredHash
		if len(preferredHashes) == 0 {
			preferredHashes = defaultHashes
		}
		preferredAeadModes := sig.PreferredAEAD
		if len(preferredAeadModes) == 0 {
			preferredAeadModes = defaultAeadModes
		}
		preferredCompression := sig.PreferredCompression
		if len(preferredCompression) == 0 {
			preferredCompression = defaultCompression
		}
		candidateCiphers = intersectPreferences(candidateCiphers, preferredSymmetric)
		candidateHashes = intersectPreferences(candidateHashes, preferredHashes)
		candidateAeadModes = intersectPreferences(candidateAeadModes, preferredAeadModes)
		candidateCompression = intersectPreferences(candidateCompression, preferredCompression)
	}

	if len(candidateCiphers) == 0 || len(candidateHashes) == 0 || len(candidateAeadModes) == 0 {
		return nil, errors.InvalidArgumentError("cannot encrypt because recipient set shares no common algorithms")
	}

	cipher := packet.CipherFunction(candidateCiphers[0])
	mode := packet.AEADMode(candidateAeadModes[0])
	// If the cipher specified by config is a candidate, we'll use that.
	configuredCipher := config.Cipher()
	for _, c := range candidateCiphers {
		cipherFunc := packet.CipherFunction(c)
		if cipherFunc == configuredCipher {
			cipher = cipherFunc
			break
		}
	}

	symKey := make([]byte, cipher.KeySize())
	if _, err := io.ReadFull(config.Random(), symKey); err != nil {
		return nil, err
	}

	for _, key := range encryptKeys {
		if err := packet.SerializeEncryptedKey(keyWriter, key.PublicKey, cipher, symKey, config); err != nil {
			return nil, err
		}
	}

	var payload io.WriteCloser
	if config.AEAD() != nil && aeadSupported {
		payload, err = packet.SerializeAEADEncrypted(dataWriter, symKey, cipher, mode, config)
		if err != nil {
			return
		}
	} else {
		payload, err = packet.SerializeSymmetricallyEncrypted(dataWriter, cipher, symKey, config)
		if err != nil {
			return
		}
	}
	payload, err = handleCompression(payload, candidateCompression, config)
	if err != nil {
		return nil, err
	}

	return writeAndSign(payload, candidateHashes, signed, hints, sigType, config)
}

// Sign signs a message. The resulting WriteCloser must be closed after the
// contents of the file have been written.  hints contains optional information
// that aids the recipients in processing the message.
// If config is nil, sensible defaults will be used.
func Sign(output io.Writer, signed *Entity, hints *FileHints, config *packet.Config) (input io.WriteCloser, err error) {
	if signed == nil {
		return nil, errors.InvalidArgumentError("no signer provided")
	}

	// These are the possible hash functions that we'll use for the signature.
	candidateHashes := []uint8{
		hashToHashId(crypto.SHA256),
		hashToHashId(crypto.SHA384),
		hashToHashId(crypto.SHA512),
		hashToHashId(crypto.SHA1),
		hashToHashId(crypto.RIPEMD160),
	}
	defaultHashes := candidateHashes[0:1]
	preferredHashes := signed.PrimaryIdentity().SelfSignature.PreferredHash
	if len(preferredHashes) == 0 {
		preferredHashes = defaultHashes
	}
	candidateHashes = intersectPreferences(candidateHashes, preferredHashes)
	if len(candidateHashes) == 0 {
		return nil, errors.InvalidArgumentError("cannot sign because signing key shares no common algorithms with candidate hashes")
	}

	return writeAndSign(noOpCloser{output}, candidateHashes, signed, hints, packet.SigTypeBinary, config)
}

// signatureWriter hashes the contents of a message while passing it along to
// literalData. When closed, it closes literalData, writes a signature packet
// to encryptedData and then also closes encryptedData.
type signatureWriter struct {
	encryptedData io.WriteCloser
	literalData   io.WriteCloser
	hashType      crypto.Hash
	wrappedHash   hash.Hash
	h             hash.Hash
	signer        *packet.PrivateKey
	sigType       packet.SignatureType
	config        *packet.Config
	metadata      *packet.LiteralData // V5 signatures protect document metadata
}

func (s signatureWriter) Write(data []byte) (int, error) {
	s.wrappedHash.Write(data)
	switch s.sigType {
	case packet.SigTypeBinary:
		return s.literalData.Write(data)
	case packet.SigTypeText:
		flag := 0
		return writeCanonical(s.literalData, data, &flag)
	}
	return 0, errors.UnsupportedError("unsupported signature type: " + strconv.Itoa(int(s.sigType)))
}

func (s signatureWriter) Close() error {
	sig := &packet.Signature{
		Version:      s.signer.Version,
		SigType:      s.sigType,
		PubKeyAlgo:   s.signer.PubKeyAlgo,
		Hash:         s.hashType,
		CreationTime: s.config.Now(),
		IssuerKeyId:  &s.signer.KeyId,
		Metadata:     s.metadata,
	}

	if err := sig.Sign(s.h, s.signer, s.config); err != nil {
		return err
	}
	if err := s.literalData.Close(); err != nil {
		return err
	}
	if err := sig.Serialize(s.encryptedData); err != nil {
		return err
	}
	return s.encryptedData.Close()
}

// noOpCloser is like an ioutil.NopCloser, but for an io.Writer.
// TODO: we have two of these in OpenPGP packages alone. This probably needs
// to be promoted somewhere more common.
type noOpCloser struct {
	w io.Writer
}

func (c noOpCloser) Write(data []byte) (n int, err error) {
	return c.w.Write(data)
}

func (c noOpCloser) Close() error {
	return nil
}

func handleCompression(compressed io.WriteCloser, candidateCompression []uint8, config *packet.Config) (data io.WriteCloser, err error) {
	data = compressed
	confAlgo := config.Compression()
	if confAlgo == packet.CompressionNone {
		return
	}
	finalAlgo := packet.CompressionNone
	// if compression specified by config available we will use it
	for _, c := range candidateCompression {
		if uint8(confAlgo) == c {
			finalAlgo = confAlgo
			break
		}
	}

	if finalAlgo != packet.CompressionNone {
		var compConfig *packet.CompressionConfig
		if config != nil {
			compConfig = config.CompressionConfig
		}
		data, err = packet.SerializeCompressed(compressed, finalAlgo, compConfig)
		if err != nil {
			return
		}
	}
	return data, nil
}
  07070100000233000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/github.com/StackExchange   07070100000234000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/StackExchange/wmi   07070100000235000081A4000000000000000000000001645E367C00000439000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/StackExchange/wmi/LICENSE   The MIT License (MIT)

Copyright (c) 2013 Stack Exchange

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   07070100000236000081A4000000000000000000000001645E367C0000013E000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/StackExchange/wmi/README.md wmi
===

Package wmi provides a WQL interface to Windows WMI.

Note: It interfaces with WMI on the local machine, therefore it only runs on Windows.

---

NOTE: This project is no longer being actively maintained.  If you would like
to become its new owner, please contact tlimoncelli at stack over flow dot com.

---
  07070100000237000081A4000000000000000000000001645E367C00001E58000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/StackExchange/wmi/swbemservices.go  // +build windows

package wmi

import (
	"fmt"
	"reflect"
	"runtime"
	"sync"

	"github.com/go-ole/go-ole"
	"github.com/go-ole/go-ole/oleutil"
)

// SWbemServices is used to access wmi. See https://msdn.microsoft.com/en-us/library/aa393719(v=vs.85).aspx
type SWbemServices struct {
	//TODO: track namespace. Not sure if we can re connect to a different namespace using the same instance
	cWMIClient            *Client //This could also be an embedded struct, but then we would need to branch on Client vs SWbemServices in the Query method
	sWbemLocatorIUnknown  *ole.IUnknown
	sWbemLocatorIDispatch *ole.IDispatch
	queries               chan *queryRequest
	closeError            chan error
	lQueryorClose         sync.Mutex
}

type queryRequest struct {
	query    string
	dst      interface{}
	args     []interface{}
	finished chan error
}

// InitializeSWbemServices will return a new SWbemServices object that can be used to query WMI
func InitializeSWbemServices(c *Client, connectServerArgs ...interface{}) (*SWbemServices, error) {
	//fmt.Println("InitializeSWbemServices: Starting")
	//TODO: implement connectServerArgs as optional argument for init with connectServer call
	s := new(SWbemServices)
	s.cWMIClient = c
	s.queries = make(chan *queryRequest)
	initError := make(chan error)
	go s.process(initError)

	err, ok := <-initError
	if ok {
		return nil, err //Send error to caller
	}
	//fmt.Println("InitializeSWbemServices: Finished")
	return s, nil
}

// Close will clear and release all of the SWbemServices resources
func (s *SWbemServices) Close() error {
	s.lQueryorClose.Lock()
	if s == nil || s.sWbemLocatorIDispatch == nil {
		s.lQueryorClose.Unlock()
		return fmt.Errorf("SWbemServices is not Initialized")
	}
	if s.queries == nil {
		s.lQueryorClose.Unlock()
		return fmt.Errorf("SWbemServices has been closed")
	}
	//fmt.Println("Close: sending close request")
	var result error
	ce := make(chan error)
	s.closeError = ce //Race condition if multiple callers to close. May need to lock here
	close(s.queries)  //Tell background to shut things down
	s.lQueryorClose.Unlock()
	err, ok := <-ce
	if ok {
		result = err
	}
	//fmt.Println("Close: finished")
	return result
}

func (s *SWbemServices) process(initError chan error) {
	//fmt.Println("process: starting background thread initialization")
	//All OLE/WMI calls must happen on the same initialized thead, so lock this goroutine
	runtime.LockOSThread()
	defer runtime.UnlockOSThread()

	err := ole.CoInitializeEx(0, ole.COINIT_MULTITHREADED)
	if err != nil {
		oleCode := err.(*ole.OleError).Code()
		if oleCode != ole.S_OK && oleCode != S_FALSE {
			initError <- fmt.Errorf("ole.CoInitializeEx error: %v", err)
			return
		}
	}
	defer ole.CoUninitialize()

	unknown, err := oleutil.CreateObject("WbemScripting.SWbemLocator")
	if err != nil {
		initError <- fmt.Errorf("CreateObject SWbemLocator error: %v", err)
		return
	} else if unknown == nil {
		initError <- ErrNilCreateObject
		return
	}
	defer unknown.Release()
	s.sWbemLocatorIUnknown = unknown

	dispatch, err := s.sWbemLocatorIUnknown.QueryInterface(ole.IID_IDispatch)
	if err != nil {
		initError <- fmt.Errorf("SWbemLocator QueryInterface error: %v", err)
		return
	}
	defer dispatch.Release()
	s.sWbemLocatorIDispatch = dispatch

	// we can't do the ConnectServer call outside the loop unless we find a way to track and re-init the connectServerArgs
	//fmt.Println("process: initialized. closing initError")
	close(initError)
	//fmt.Println("process: waiting for queries")
	for q := range s.queries {
		//fmt.Printf("process: new query: len(query)=%d\n", len(q.query))
		errQuery := s.queryBackground(q)
		//fmt.Println("process: s.queryBackground finished")
		if errQuery != nil {
			q.finished <- errQuery
		}
		close(q.finished)
	}
	//fmt.Println("process: queries channel closed")
	s.queries = nil //set channel to nil so we know it is closed
	//TODO: I think the Release/Clear calls can panic if things are in a bad state.
	//TODO: May need to recover from panics and send error to method caller instead.
	close(s.closeError)
}

// Query runs the WQL query using a SWbemServices instance and appends the values to dst.
//
// dst must have type *[]S or *[]*S, for some struct type S. Fields selected in
// the query must have the same name in dst. Supported types are all signed and
// unsigned integers, time.Time, string, bool, or a pointer to one of those.
// Array types are not supported.
//
// By default, the local machine and default namespace are used. These can be
// changed using connectServerArgs. See
// http://msdn.microsoft.com/en-us/library/aa393720.aspx for details.
func (s *SWbemServices) Query(query string, dst interface{}, connectServerArgs ...interface{}) error {
	s.lQueryorClose.Lock()
	if s == nil || s.sWbemLocatorIDispatch == nil {
		s.lQueryorClose.Unlock()
		return fmt.Errorf("SWbemServices is not Initialized")
	}
	if s.queries == nil {
		s.lQueryorClose.Unlock()
		return fmt.Errorf("SWbemServices has been closed")
	}

	//fmt.Println("Query: Sending query request")
	qr := queryRequest{
		query:    query,
		dst:      dst,
		args:     connectServerArgs,
		finished: make(chan error),
	}
	s.queries <- &qr
	s.lQueryorClose.Unlock()
	err, ok := <-qr.finished
	if ok {
		//fmt.Println("Query: Finished with error")
		return err //Send error to caller
	}
	//fmt.Println("Query: Finished")
	return nil
}

func (s *SWbemServices) queryBackground(q *queryRequest) error {
	if s == nil || s.sWbemLocatorIDispatch == nil {
		return fmt.Errorf("SWbemServices is not Initialized")
	}
	wmi := s.sWbemLocatorIDispatch //Should just rename in the code, but this will help as we break things apart
	//fmt.Println("queryBackground: Starting")

	dv := reflect.ValueOf(q.dst)
	if dv.Kind() != reflect.Ptr || dv.IsNil() {
		return ErrInvalidEntityType
	}
	dv = dv.Elem()
	mat, elemType := checkMultiArg(dv)
	if mat == multiArgTypeInvalid {
		return ErrInvalidEntityType
	}

	// service is a SWbemServices
	serviceRaw, err := oleutil.CallMethod(wmi, "ConnectServer", q.args...)
	if err != nil {
		return err
	}
	service := serviceRaw.ToIDispatch()
	defer serviceRaw.Clear()

	// result is a SWBemObjectSet
	resultRaw, err := oleutil.CallMethod(service, "ExecQuery", q.query)
	if err != nil {
		return err
	}
	result := resultRaw.ToIDispatch()
	defer resultRaw.Clear()

	count, err := oleInt64(result, "Count")
	if err != nil {
		return err
	}

	enumProperty, err := result.GetProperty("_NewEnum")
	if err != nil {
		return err
	}
	defer enumProperty.Clear()

	enum, err := enumProperty.ToIUnknown().IEnumVARIANT(ole.IID_IEnumVariant)
	if err != nil {
		return err
	}
	if enum == nil {
		return fmt.Errorf("can't get IEnumVARIANT, enum is nil")
	}
	defer enum.Release()

	// Initialize a slice with Count capacity
	dv.Set(reflect.MakeSlice(dv.Type(), 0, int(count)))

	var errFieldMismatch error
	for itemRaw, length, err := enum.Next(1); length > 0; itemRaw, length, err = enum.Next(1) {
		if err != nil {
			return err
		}

		err := func() error {
			// item is a SWbemObject, but really a Win32_Process
			item := itemRaw.ToIDispatch()
			defer item.Release()

			ev := reflect.New(elemType)
			if err = s.cWMIClient.loadEntity(ev.Interface(), item); err != nil {
				if _, ok := err.(*ErrFieldMismatch); ok {
					// We continue loading entities even in the face of field mismatch errors.
					// If we encounter any other error, that other error is returned. Otherwise,
					// an ErrFieldMismatch is returned.
					errFieldMismatch = err
				} else {
					return err
				}
			}
			if mat != multiArgTypeStructPtr {
				ev = ev.Elem()
			}
			dv.Set(reflect.Append(dv, ev))
			return nil
		}()
		if err != nil {
			return err
		}
	}
	//fmt.Println("queryBackground: Finished")
	return errFieldMismatch
}
07070100000238000081A4000000000000000000000001645E367C0000400F000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/StackExchange/wmi/wmi.go    // +build windows

/*
Package wmi provides a WQL interface for WMI on Windows.

Example code to print names of running processes:

	type Win32_Process struct {
		Name string
	}

	func main() {
		var dst []Win32_Process
		q := wmi.CreateQuery(&dst, "")
		err := wmi.Query(q, &dst)
		if err != nil {
			log.Fatal(err)
		}
		for i, v := range dst {
			println(i, v.Name)
		}
	}

*/
package wmi

import (
	"bytes"
	"errors"
	"fmt"
	"log"
	"os"
	"reflect"
	"runtime"
	"strconv"
	"strings"
	"sync"
	"time"

	"github.com/go-ole/go-ole"
	"github.com/go-ole/go-ole/oleutil"
)

var l = log.New(os.Stdout, "", log.LstdFlags)

var (
	ErrInvalidEntityType = errors.New("wmi: invalid entity type")
	// ErrNilCreateObject is the error returned if CreateObject returns nil even
	// if the error was nil.
	ErrNilCreateObject = errors.New("wmi: create object returned nil")
	lock               sync.Mutex
)

// S_FALSE is returned by CoInitializeEx if it was already called on this thread.
const S_FALSE = 0x00000001

// QueryNamespace invokes Query with the given namespace on the local machine.
func QueryNamespace(query string, dst interface{}, namespace string) error {
	return Query(query, dst, nil, namespace)
}

// Query runs the WQL query and appends the values to dst.
//
// dst must have type *[]S or *[]*S, for some struct type S. Fields selected in
// the query must have the same name in dst. Supported types are all signed and
// unsigned integers, time.Time, string, bool, or a pointer to one of those.
// Array types are not supported.
//
// By default, the local machine and default namespace are used. These can be
// changed using connectServerArgs. See
// https://docs.microsoft.com/en-us/windows/desktop/WmiSdk/swbemlocator-connectserver
// for details.
//
// Query is a wrapper around DefaultClient.Query.
func Query(query string, dst interface{}, connectServerArgs ...interface{}) error {
	if DefaultClient.SWbemServicesClient == nil {
		return DefaultClient.Query(query, dst, connectServerArgs...)
	}
	return DefaultClient.SWbemServicesClient.Query(query, dst, connectServerArgs...)
}

// CallMethod calls a method named methodName on an instance of the class named
// className, with the given params.
//
// CallMethod is a wrapper around DefaultClient.CallMethod.
func CallMethod(connectServerArgs []interface{}, className, methodName string, params []interface{}) (int32, error) {
	return DefaultClient.CallMethod(connectServerArgs, className, methodName, params)
}

// A Client is an WMI query client.
//
// Its zero value (DefaultClient) is a usable client.
type Client struct {
	// NonePtrZero specifies if nil values for fields which aren't pointers
	// should be returned as the field types zero value.
	//
	// Setting this to true allows stucts without pointer fields to be used
	// without the risk failure should a nil value returned from WMI.
	NonePtrZero bool

	// PtrNil specifies if nil values for pointer fields should be returned
	// as nil.
	//
	// Setting this to true will set pointer fields to nil where WMI
	// returned nil, otherwise the types zero value will be returned.
	PtrNil bool

	// AllowMissingFields specifies that struct fields not present in the
	// query result should not result in an error.
	//
	// Setting this to true allows custom queries to be used with full
	// struct definitions instead of having to define multiple structs.
	AllowMissingFields bool

	// SWbemServiceClient is an optional SWbemServices object that can be
	// initialized and then reused across multiple queries. If it is null
	// then the method will initialize a new temporary client each time.
	SWbemServicesClient *SWbemServices
}

// DefaultClient is the default Client and is used by Query, QueryNamespace, and CallMethod.
var DefaultClient = &Client{}

// coinitService coinitializes WMI service. If no error is returned, a cleanup function
// is returned which must be executed (usually deferred) to clean up allocated resources.
func (c *Client) coinitService(connectServerArgs ...interface{}) (*ole.IDispatch, func(), error) {
	var unknown *ole.IUnknown
	var wmi *ole.IDispatch
	var serviceRaw *ole.VARIANT

	// be sure teardown happens in the reverse
	// order from that which they were created
	deferFn := func() {
		if serviceRaw != nil {
			serviceRaw.Clear()
		}
		if wmi != nil {
			wmi.Release()
		}
		if unknown != nil {
			unknown.Release()
		}
		ole.CoUninitialize()
	}

	// if we error'ed here, clean up immediately
	var err error
	defer func() {
		if err != nil {
			deferFn()
		}
	}()

	err = ole.CoInitializeEx(0, ole.COINIT_MULTITHREADED)
	if err != nil {
		oleCode := err.(*ole.OleError).Code()
		if oleCode != ole.S_OK && oleCode != S_FALSE {
			return nil, nil, err
		}
	}

	unknown, err = oleutil.CreateObject("WbemScripting.SWbemLocator")
	if err != nil {
		return nil, nil, err
	} else if unknown == nil {
		return nil, nil, ErrNilCreateObject
	}

	wmi, err = unknown.QueryInterface(ole.IID_IDispatch)
	if err != nil {
		return nil, nil, err
	}

	// service is a SWbemServices
	serviceRaw, err = oleutil.CallMethod(wmi, "ConnectServer", connectServerArgs...)
	if err != nil {
		return nil, nil, err
	}

	return serviceRaw.ToIDispatch(), deferFn, nil
}

// CallMethod calls a WMI method named methodName on an instance
// of the class named className. It passes in the arguments given
// in params. Use connectServerArgs to customize the machine and
// namespace; by default, the local machine and default namespace
// are used. See
// https://docs.microsoft.com/en-us/windows/desktop/WmiSdk/swbemlocator-connectserver
// for details.
func (c *Client) CallMethod(connectServerArgs []interface{}, className, methodName string, params []interface{}) (int32, error) {
	service, cleanup, err := c.coinitService(connectServerArgs...)
	if err != nil {
		return 0, fmt.Errorf("coinit: %v", err)
	}
	defer cleanup()

	// Get class
	classRaw, err := oleutil.CallMethod(service, "Get", className)
	if err != nil {
		return 0, fmt.Errorf("CallMethod Get class %s: %v", className, err)
	}
	class := classRaw.ToIDispatch()
	defer classRaw.Clear()

	// Run method
	resultRaw, err := oleutil.CallMethod(class, methodName, params...)
	if err != nil {
		return 0, fmt.Errorf("CallMethod %s.%s: %v", className, methodName, err)
	}
	resultInt, ok := resultRaw.Value().(int32)
	if !ok {
		return 0, fmt.Errorf("return value was not an int32: %v (%T)", resultRaw, resultRaw)
	}

	return resultInt, nil
}

// Query runs the WQL query and appends the values to dst.
//
// dst must have type *[]S or *[]*S, for some struct type S. Fields selected in
// the query must have the same name in dst. Supported types are all signed and
// unsigned integers, time.Time, string, bool, or a pointer to one of those.
// Array types are not supported.
//
// By default, the local machine and default namespace are used. These can be
// changed using connectServerArgs. See
// https://docs.microsoft.com/en-us/windows/desktop/WmiSdk/swbemlocator-connectserver
// for details.
func (c *Client) Query(query string, dst interface{}, connectServerArgs ...interface{}) error {
	dv := reflect.ValueOf(dst)
	if dv.Kind() != reflect.Ptr || dv.IsNil() {
		return ErrInvalidEntityType
	}
	dv = dv.Elem()
	mat, elemType := checkMultiArg(dv)
	if mat == multiArgTypeInvalid {
		return ErrInvalidEntityType
	}

	lock.Lock()
	defer lock.Unlock()
	runtime.LockOSThread()
	defer runtime.UnlockOSThread()

	service, cleanup, err := c.coinitService(connectServerArgs...)
	if err != nil {
		return err
	}
	defer cleanup()

	// result is a SWBemObjectSet
	resultRaw, err := oleutil.CallMethod(service, "ExecQuery", query)
	if err != nil {
		return err
	}
	result := resultRaw.ToIDispatch()
	defer resultRaw.Clear()

	count, err := oleInt64(result, "Count")
	if err != nil {
		return err
	}

	enumProperty, err := result.GetProperty("_NewEnum")
	if err != nil {
		return err
	}
	defer enumProperty.Clear()

	enum, err := enumProperty.ToIUnknown().IEnumVARIANT(ole.IID_IEnumVariant)
	if err != nil {
		return err
	}
	if enum == nil {
		return fmt.Errorf("can't get IEnumVARIANT, enum is nil")
	}
	defer enum.Release()

	// Initialize a slice with Count capacity
	dv.Set(reflect.MakeSlice(dv.Type(), 0, int(count)))

	var errFieldMismatch error
	for itemRaw, length, err := enum.Next(1); length > 0; itemRaw, length, err = enum.Next(1) {
		if err != nil {
			return err
		}

		err := func() error {
			// item is a SWbemObject, but really a Win32_Process
			item := itemRaw.ToIDispatch()
			defer item.Release()

			ev := reflect.New(elemType)
			if err = c.loadEntity(ev.Interface(), item); err != nil {
				if _, ok := err.(*ErrFieldMismatch); ok {
					// We continue loading entities even in the face of field mismatch errors.
					// If we encounter any other error, that other error is returned. Otherwise,
					// an ErrFieldMismatch is returned.
					errFieldMismatch = err
				} else {
					return err
				}
			}
			if mat != multiArgTypeStructPtr {
				ev = ev.Elem()
			}
			dv.Set(reflect.Append(dv, ev))
			return nil
		}()
		if err != nil {
			return err
		}
	}
	return errFieldMismatch
}

// ErrFieldMismatch is returned when a field is to be loaded into a different
// type than the one it was stored from, or when a field is missing or
// unexported in the destination struct.
// StructType is the type of the struct pointed to by the destination argument.
type ErrFieldMismatch struct {
	StructType reflect.Type
	FieldName  string
	Reason     string
}

func (e *ErrFieldMismatch) Error() string {
	return fmt.Sprintf("wmi: cannot load field %q into a %q: %s",
		e.FieldName, e.StructType, e.Reason)
}

var timeType = reflect.TypeOf(time.Time{})

// loadEntity loads a SWbemObject into a struct pointer.
func (c *Client) loadEntity(dst interface{}, src *ole.IDispatch) (errFieldMismatch error) {
	v := reflect.ValueOf(dst).Elem()
	for i := 0; i < v.NumField(); i++ {
		f := v.Field(i)
		of := f
		isPtr := f.Kind() == reflect.Ptr
		if isPtr {
			ptr := reflect.New(f.Type().Elem())
			f.Set(ptr)
			f = f.Elem()
		}
		n := v.Type().Field(i).Name
		if n[0] < 'A' || n[0] > 'Z' {
			continue
		}
		if !f.CanSet() {
			return &ErrFieldMismatch{
				StructType: of.Type(),
				FieldName:  n,
				Reason:     "CanSet() is false",
			}
		}
		prop, err := oleutil.GetProperty(src, n)
		if err != nil {
			if !c.AllowMissingFields {
				errFieldMismatch = &ErrFieldMismatch{
					StructType: of.Type(),
					FieldName:  n,
					Reason:     "no such struct field",
				}
			}
			continue
		}
		defer prop.Clear()

		if prop.VT == 0x1 { //VT_NULL
			continue
		}

		switch val := prop.Value().(type) {
		case int8, int16, int32, int64, int:
			v := reflect.ValueOf(val).Int()
			switch f.Kind() {
			case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
				f.SetInt(v)
			case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
				f.SetUint(uint64(v))
			default:
				return &ErrFieldMismatch{
					StructType: of.Type(),
					FieldName:  n,
					Reason:     "not an integer class",
				}
			}
		case uint8, uint16, uint32, uint64:
			v := reflect.ValueOf(val).Uint()
			switch f.Kind() {
			case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
				f.SetInt(int64(v))
			case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
				f.SetUint(v)
			default:
				return &ErrFieldMismatch{
					StructType: of.Type(),
					FieldName:  n,
					Reason:     "not an integer class",
				}
			}
		case string:
			switch f.Kind() {
			case reflect.String:
				f.SetString(val)
			case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
				iv, err := strconv.ParseInt(val, 10, 64)
				if err != nil {
					return err
				}
				f.SetInt(iv)
			case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
				uv, err := strconv.ParseUint(val, 10, 64)
				if err != nil {
					return err
				}
				f.SetUint(uv)
			case reflect.Struct:
				switch f.Type() {
				case timeType:
					if len(val) == 25 {
						mins, err := strconv.Atoi(val[22:])
						if err != nil {
							return err
						}
						val = val[:22] + fmt.Sprintf("%02d%02d", mins/60, mins%60)
					}
					t, err := time.Parse("20060102150405.000000-0700", val)
					if err != nil {
						return err
					}
					f.Set(reflect.ValueOf(t))
				}
			}
		case bool:
			switch f.Kind() {
			case reflect.Bool:
				f.SetBool(val)
			default:
				return &ErrFieldMismatch{
					StructType: of.Type(),
					FieldName:  n,
					Reason:     "not a bool",
				}
			}
		case float32:
			switch f.Kind() {
			case reflect.Float32:
				f.SetFloat(float64(val))
			default:
				return &ErrFieldMismatch{
					StructType: of.Type(),
					FieldName:  n,
					Reason:     "not a Float32",
				}
			}
		default:
			if f.Kind() == reflect.Slice {
				switch f.Type().Elem().Kind() {
				case reflect.String:
					safeArray := prop.ToArray()
					if safeArray != nil {
						arr := safeArray.ToValueArray()
						fArr := reflect.MakeSlice(f.Type(), len(arr), len(arr))
						for i, v := range arr {
							s := fArr.Index(i)
							s.SetString(v.(string))
						}
						f.Set(fArr)
					}
				case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint:
					safeArray := prop.ToArray()
					if safeArray != nil {
						arr := safeArray.ToValueArray()
						fArr := reflect.MakeSlice(f.Type(), len(arr), len(arr))
						for i, v := range arr {
							s := fArr.Index(i)
							s.SetUint(reflect.ValueOf(v).Uint())
						}
						f.Set(fArr)
					}
				case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int:
					safeArray := prop.ToArray()
					if safeArray != nil {
						arr := safeArray.ToValueArray()
						fArr := reflect.MakeSlice(f.Type(), len(arr), len(arr))
						for i, v := range arr {
							s := fArr.Index(i)
							s.SetInt(reflect.ValueOf(v).Int())
						}
						f.Set(fArr)
					}
				default:
					return &ErrFieldMismatch{
						StructType: of.Type(),
						FieldName:  n,
						Reason:     fmt.Sprintf("unsupported slice type (%T)", val),
					}
				}
			} else {
				typeof := reflect.TypeOf(val)
				if typeof == nil && (isPtr || c.NonePtrZero) {
					if (isPtr && c.PtrNil) || (!isPtr && c.NonePtrZero) {
						of.Set(reflect.Zero(of.Type()))
					}
					break
				}
				return &ErrFieldMismatch{
					StructType: of.Type(),
					FieldName:  n,
					Reason:     fmt.Sprintf("unsupported type (%T)", val),
				}
			}
		}
	}
	return errFieldMismatch
}

type multiArgType int

const (
	multiArgTypeInvalid multiArgType = iota
	multiArgTypeStruct
	multiArgTypeStructPtr
)

// checkMultiArg checks that v has type []S, []*S for some struct type S.
//
// It returns what category the slice's elements are, and the reflect.Type
// that represents S.
func checkMultiArg(v reflect.Value) (m multiArgType, elemType reflect.Type) {
	if v.Kind() != reflect.Slice {
		return multiArgTypeInvalid, nil
	}
	elemType = v.Type().Elem()
	switch elemType.Kind() {
	case reflect.Struct:
		return multiArgTypeStruct, elemType
	case reflect.Ptr:
		elemType = elemType.Elem()
		if elemType.Kind() == reflect.Struct {
			return multiArgTypeStructPtr, elemType
		}
	}
	return multiArgTypeInvalid, nil
}

func oleInt64(item *ole.IDispatch, prop string) (int64, error) {
	v, err := oleutil.GetProperty(item, prop)
	if err != nil {
		return 0, err
	}
	defer v.Clear()

	i := int64(v.Val)
	return i, nil
}

// CreateQuery returns a WQL query string that queries all columns of src. where
// is an optional string that is appended to the query, to be used with WHERE
// clauses. In such a case, the "WHERE" string should appear at the beginning.
// The wmi class is obtained by the name of the type. You can pass a optional
// class throught the variadic class parameter which is useful for anonymous
// structs.
func CreateQuery(src interface{}, where string, class ...string) string {
	var b bytes.Buffer
	b.WriteString("SELECT ")
	s := reflect.Indirect(reflect.ValueOf(src))
	t := s.Type()
	if s.Kind() == reflect.Slice {
		t = t.Elem()
	}
	if t.Kind() != reflect.Struct {
		return ""
	}
	var fields []string
	for i := 0; i < t.NumField(); i++ {
		fields = append(fields, t.Field(i).Name)
	}
	b.WriteString(strings.Join(fields, ", "))
	b.WriteString(" FROM ")
	if len(class) > 0 {
		b.WriteString(class[0])
	} else {
		b.WriteString(t.Name())
	}
	b.WriteString(" " + where)
	return b.String()
}
 07070100000239000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002E00000000elemental-cli-0.3.1/vendor/github.com/acomagu 0707010000023A000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/github.com/acomagu/bufpipe 0707010000023B000081A4000000000000000000000001645E367C00000457000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/acomagu/bufpipe/README.md   # bufpipe: Buffered Pipe

[![CircleCI](https://img.shields.io/circleci/build/github/acomagu/bufpipe.svg?style=flat-square)](https://circleci.com/gh/acomagu/bufpipe) [![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg?style=flat-square)](https://godoc.org/github.com/acomagu/bufpipe)

The buffered version of io.Pipe. It's safe for concurrent use.

## How does it differ from io.Pipe?

Writes never block because the pipe has variable-sized buffer.

```Go
r, w := bufpipe.New(nil)
io.WriteString(w, "abc") // No blocking.
io.WriteString(w, "def") // No blocking, too.
w.Close()
io.Copy(os.Stdout, r)
// Output: abcdef
```

[Playground](https://play.golang.org/p/PdyBAS3pVob)

## How does it differ from bytes.Buffer?

Reads block if the internal buffer is empty until the writer is closed.

```Go
r, w := bufpipe.New(nil)

done := make(chan struct{})
go func() {
	io.Copy(os.Stdout, r) // The reads block until the writer is closed.
	done <- struct{}{}
}()

io.WriteString(w, "abc")
io.WriteString(w, "def")
w.Close()
<-done
// Output: abcdef
```

[Playground](https://play.golang.org/p/UppmyLeRgX6)
 0707010000023C000081A4000000000000000000000001645E367C00000D80000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/acomagu/bufpipe/bufpipe.go  package bufpipe

import (
	"bytes"
	"errors"
	"io"
	"sync"
)

// ErrClosedPipe is the error used for read or write operations on a closed pipe.
var ErrClosedPipe = errors.New("bufpipe: read/write on closed pipe")

type pipe struct {
	cond       *sync.Cond
	buf        *bytes.Buffer
	rerr, werr error
}

// A PipeReader is the read half of a pipe.
type PipeReader struct {
	*pipe
}

// A PipeWriter is the write half of a pipe.
type PipeWriter struct {
	*pipe
}

// New creates a synchronous pipe using buf as its initial contents. It can be
// used to connect code expecting an io.Reader with code expecting an io.Writer.
//
// Unlike io.Pipe, writes never block because the internal buffer has variable
// size. Reads block only when the buffer is empty.
//
// It is safe to call Read and Write in parallel with each other or with Close.
// Parallel calls to Read and parallel calls to Write are also safe: the
// individual calls will be gated sequentially.
//
// The new pipe takes ownership of buf, and the caller should not use buf after
// this call. New is intended to prepare a PipeReader to read existing data. It
// can also be used to set the initial size of the internal buffer for writing.
// To do that, buf should have the desired capacity but a length of zero.
func New(buf []byte) (*PipeReader, *PipeWriter) {
	p := &pipe{
		buf:  bytes.NewBuffer(buf),
		cond: sync.NewCond(new(sync.Mutex)),
	}
	return &PipeReader{
			pipe: p,
		}, &PipeWriter{
			pipe: p,
		}
}

// Read implements the standard Read interface: it reads data from the pipe,
// reading from the internal buffer, otherwise blocking until a writer arrives
// or the write end is closed. If the write end is closed with an error, that
// error is returned as err; otherwise err is io.EOF.
func (r *PipeReader) Read(data []byte) (int, error) {
	r.cond.L.Lock()
	defer r.cond.L.Unlock()

RETRY:
	n, err := r.buf.Read(data)
	// If not closed and no read, wait for writing.
	if err == io.EOF && r.rerr == nil && n == 0 {
		r.cond.Wait()
		goto RETRY
	}
	if err == io.EOF {
		return n, r.rerr
	}
	return n, err
}

// Close closes the reader; subsequent writes from the write half of the pipe
// will return error ErrClosedPipe.
func (r *PipeReader) Close() error {
	return r.CloseWithError(nil)
}

// CloseWithError closes the reader; subsequent writes to the write half of the
// pipe will return the error err.
func (r *PipeReader) CloseWithError(err error) error {
	r.cond.L.Lock()
	defer r.cond.L.Unlock()

	if err == nil {
		err = ErrClosedPipe
	}
	r.werr = err
	return nil
}

// Write implements the standard Write interface: it writes data to the internal
// buffer. If the read end is closed with an error, that err is returned as err;
// otherwise err is ErrClosedPipe.
func (w *PipeWriter) Write(data []byte) (int, error) {
	w.cond.L.Lock()
	defer w.cond.L.Unlock()

	if w.werr != nil {
		return 0, w.werr
	}

	n, err := w.buf.Write(data)
	w.cond.Signal()
	return n, err
}

// Close closes the writer; subsequent reads from the read half of the pipe will
// return io.EOF once the internal buffer get empty.
func (w *PipeWriter) Close() error {
	return w.CloseWithError(nil)
}

// Close closes the writer; subsequent reads from the read half of the pipe will
// return err once the internal buffer get empty.
func (w *PipeWriter) CloseWithError(err error) error {
	w.cond.L.Lock()
	defer w.cond.L.Unlock()

	if err == nil {
		err = io.EOF
	}
	w.rerr = err
	return nil
}
0707010000023D000081A4000000000000000000000001645E367C00000052000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/acomagu/bufpipe/doc.go  // Package bufpipe provides a IO pipe, has variable-sized buffer.
package bufpipe
  0707010000023E000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003000000000elemental-cli-0.3.1/vendor/github.com/canonical   0707010000023F000041ED000000000000000000000005645E367C00000000000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib 07070100000240000081A4000000000000000000000001645E367C00000022000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/.gitignore  cmd/efi_devicepath/efi_devicepath
  07070100000241000081A4000000000000000000000001645E367C00002341000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/LICENSE All files in this repository are licensed as follows. If you contribute
to this repository, it is assumed that you license your contribution
under the same license unless you state otherwise.

All files Copyright (C) 2020 Canonical Ltd. unless otherwise specified in the file.

This software is licensed under the LGPLv3, included below.

As a special exception to the GNU Lesser General Public License version 3
("LGPL3"), the copyright holders of this Library give you permission to
convey to a third party a Combined Work that links statically or dynamically
to this Library without providing any Minimal Corresponding Source or
Minimal Application Code as set out in 4d or providing the installation
information set out in section 4e, provided that you comply with the other
provisions of LGPL3 and provided that you meet, for the Application the
terms and conditions of the license(s) which apply to the Application.

Except as stated in this special exception, the provisions of LGPL3 will
continue to comply in full to this Library. If you modify this Library, you
may apply this exception to your version of this Library, but you are not
obliged to do so. If you do not wish to do so, delete this exception
statement from your version. This exception does not (and cannot) modify any
license terms which apply to the Application, with which you must still
comply.


                   GNU LESSER GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.


  This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.

  0. Additional Definitions.

  As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.

  "The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.

  An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.

  A "Combined Work" is a work produced by combining or linking an
Application with the Library.  The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".

  The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.

  The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.

  1. Exception to Section 3 of the GNU GPL.

  You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.

  2. Conveying Modified Versions.

  If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:

   a) under this License, provided that you make a good faith effort to
   ensure that, in the event an Application does not supply the
   function or data, the facility still operates, and performs
   whatever part of its purpose remains meaningful, or

   b) under the GNU GPL, with none of the additional permissions of
   this License applicable to that copy.

  3. Object Code Incorporating Material from Library Header Files.

  The object code form of an Application may incorporate material from
a header file that is part of the Library.  You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:

   a) Give prominent notice with each copy of the object code that the
   Library is used in it and that the Library and its use are
   covered by this License.

   b) Accompany the object code with a copy of the GNU GPL and this license
   document.

  4. Combined Works.

  You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:

   a) Give prominent notice with each copy of the Combined Work that
   the Library is used in it and that the Library and its use are
   covered by this License.

   b) Accompany the Combined Work with a copy of the GNU GPL and this license
   document.

   c) For a Combined Work that displays copyright notices during
   execution, include the copyright notice for the Library among
   these notices, as well as a reference directing the user to the
   copies of the GNU GPL and this license document.

   d) Do one of the following:

       0) Convey the Minimal Corresponding Source under the terms of this
       License, and the Corresponding Application Code in a form
       suitable for, and under terms that permit, the user to
       recombine or relink the Application with a modified version of
       the Linked Version to produce a modified Combined Work, in the
       manner specified by section 6 of the GNU GPL for conveying
       Corresponding Source.

       1) Use a suitable shared library mechanism for linking with the
       Library.  A suitable mechanism is one that (a) uses at run time
       a copy of the Library already present on the user's computer
       system, and (b) will operate properly with a modified version
       of the Library that is interface-compatible with the Linked
       Version.

   e) Provide Installation Information, but only if you would otherwise
   be required to provide such information under section 6 of the
   GNU GPL, and only to the extent that such information is
   necessary to install and execute a modified version of the
   Combined Work produced by recombining or relinking the
   Application with a modified version of the Linked Version. (If
   you use option 4d0, the Installation Information must accompany
   the Minimal Corresponding Source and Corresponding Application
   Code. If you use option 4d1, you must provide the Installation
   Information in the manner specified by section 6 of the GNU GPL
   for conveying Corresponding Source.)

  5. Combined Libraries.

  You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:

   a) Accompany the combined library with a copy of the same work based
   on the Library, uncombined with any other library facilities,
   conveyed under the terms of this License.

   b) Give prominent notice with the combined library that part of it
   is a work based on the Library, and explaining where to find the
   accompanying uncombined form of the same work.

  6. Revised Versions of the GNU Lesser General Public License.

  The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.

  Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.

  If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.
   07070100000242000081A4000000000000000000000001645E367C000028AE000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/authvars.go // Copyright 2020 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package efi

import (
	"bytes"
	"encoding/binary"
	"errors"
	"io"
	"time"

	"github.com/canonical/go-efilib/internal/ioerr"
	"github.com/canonical/go-efilib/internal/uefi"
)

// VariableAuthentication correspond to the EFI_VARIABLE_AUTHENTICATION type and is provided as a header when updating a variable with
// the EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS attribute set.
type VariableAuthentication struct {
	MonotonicCount uint64
	AuthInfo       WinCertificateGUID
}

func (a *VariableAuthentication) Write(w io.Writer) error {
	desc := uefi.EFI_VARIABLE_AUTHENTICATION{
		MonotonicCount: a.MonotonicCount,
		AuthInfo:       *a.AuthInfo.toUefiType()}
	return binary.Write(w, binary.LittleEndian, desc)
}

// ReadVariableAuthentication decodes a header for updating a variable with the EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS attribute
// set.
func ReadVariableAuthentication(r io.Reader) (*VariableAuthentication, error) {
	desc, err := uefi.Read_EFI_VARIABLE_AUTHENTICATION(r)
	if err != nil {
		return nil, err
	}

	return &VariableAuthentication{
		MonotonicCount: desc.MonotonicCount,
		AuthInfo:       *newWinCertificateGUID(&desc.AuthInfo)}, nil
}

// VariableAuthentication2 correspond to the EFI_VARIABLE_AUTHENTICATION_2 type and is provided as a header when updating a variable
// with the EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS attribute set.
type VariableAuthentication2 struct {
	TimeStamp time.Time
	AuthInfo  WinCertificateGUID
}

func (a *VariableAuthentication2) Write(w io.Writer) error {
	desc := uefi.EFI_VARIABLE_AUTHENTICATION_2{
		TimeStamp: *uefi.New_EFI_TIME(a.TimeStamp),
		AuthInfo:  *a.AuthInfo.toUefiType()}
	return binary.Write(w, binary.LittleEndian, desc)
}

// ReadTimeBasedVariableAuthentication decodes the header for updating a variable with the
// EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS attribute set.
func ReadTimeBasedVariableAuthentication(r io.Reader) (*VariableAuthentication2, error) {
	desc, err := uefi.Read_EFI_VARIABLE_AUTHENTICATION_2(r)
	if err != nil {
		return nil, err
	}

	return &VariableAuthentication2{
		TimeStamp: desc.TimeStamp.GoTime(),
		AuthInfo:  *newWinCertificateGUID(&desc.AuthInfo)}, nil
}

// VariableAuthentication3 represents the header for updating a variable with the EFI_VARIABLE_ENHANCED_AUTHENTICATED_ACCESS
// attribute set.
type VariableAuthentication3 interface{}

// VariableAuthentication3Timestamp corresponds to the header for updating a variable with the
// EFI_VARIABLE_ENHANCED_AUTHENTICATED_ACCESS attribute set, and a type of EFI_VARIABLE_AUTHENTICATION_3_TIMESTAMP_TYPE.
type VariableAuthentication3Timestamp struct {
	TimeStamp   time.Time
	NewCert     *WinCertificateGUID
	SigningCert WinCertificateGUID
}

func (a *VariableAuthentication3Timestamp) Write(w io.Writer) error {
	var buf bytes.Buffer

	t := uefi.New_EFI_TIME(a.TimeStamp)
	if err := binary.Write(&buf, binary.LittleEndian, &t); err != nil {
		panic(err)
	}

	if a.NewCert != nil {
		if err := binary.Write(&buf, binary.LittleEndian, a.NewCert.toUefiType()); err != nil {
			panic(err)
		}
	}

	if err := binary.Write(&buf, binary.LittleEndian, a.SigningCert.toUefiType()); err != nil {
		panic(err)
	}

	hdr := uefi.EFI_VARIABLE_AUTHENTICATION_3{
		Version: 1,
		Type:    uefi.EFI_VARIABLE_AUTHENTICATION_3_TIMESTAMP_TYPE}
	hdr.MetadataSize = uint32(binary.Size(hdr) + buf.Len())
	if a.NewCert != nil {
		hdr.Flags = 1
	}
	if err := binary.Write(w, binary.LittleEndian, &hdr); err != nil {
		return err
	}

	_, err := buf.WriteTo(w)
	return err
}

// VariableAuthentication3Nonce corresponds to the header for updating a variable with the
// EFI_VARIABLE_ENHANCED_AUTHENTICATED_ACCESS attribute set, and a type of EFI_VARIABLE_AUTHENTICATION_3_NONCE_TYPE.
type VariableAuthentication3Nonce struct {
	Nonce       []byte
	NewCert     *WinCertificateGUID
	SigningCert WinCertificateGUID
}

func (a *VariableAuthentication3Nonce) Write(w io.Writer) error {
	var buf bytes.Buffer

	n := uefi.EFI_VARIABLE_AUTHENTICATION_3_NONCE{
		NonceSize: uint32(len(a.Nonce)),
		Nonce:     a.Nonce}
	if err := binary.Write(&buf, binary.LittleEndian, &n); err != nil {
		panic(err)
	}

	if a.NewCert != nil {
		if err := binary.Write(&buf, binary.LittleEndian, a.NewCert.toUefiType()); err != nil {
			panic(err)
		}
	}

	if err := binary.Write(&buf, binary.LittleEndian, a.SigningCert.toUefiType()); err != nil {
		panic(err)
	}

	hdr := uefi.EFI_VARIABLE_AUTHENTICATION_3{
		Version: 1,
		Type:    uefi.EFI_VARIABLE_AUTHENTICATION_3_NONCE_TYPE}
	hdr.MetadataSize = uint32(binary.Size(hdr) + buf.Len())
	if a.NewCert != nil {
		hdr.Flags = 1
	}
	if err := binary.Write(w, binary.LittleEndian, &hdr); err != nil {
		return err
	}

	_, err := buf.WriteTo(w)
	return err
}

// ReadEnhancedVariableAuthentication decodes the header for updating a variable with the
// EFI_VARIABLE_ENHANCED_AUTHENTICATED_ACCESS attribute set.
func ReadEnhancedVariableAuthentication(r io.Reader) (VariableAuthentication3, error) {
	var hdr uefi.EFI_VARIABLE_AUTHENTICATION_3
	if err := binary.Read(r, binary.LittleEndian, &hdr); err != nil {
		return nil, err
	}
	if hdr.Version != 1 {
		return nil, errors.New("unexpected version")
	}

	lr := io.LimitReader(r, int64(hdr.MetadataSize)-int64(binary.Size(hdr)))

	switch hdr.Type {
	case uefi.EFI_VARIABLE_AUTHENTICATION_3_TIMESTAMP_TYPE:
		var t uefi.EFI_TIME
		if err := binary.Read(lr, binary.LittleEndian, &t); err != nil {
			return nil, ioerr.EOFIsUnexpected("cannot read timestamp authentication: %w", err)
		}

		var newCert *uefi.WIN_CERTIFICATE_UEFI_GUID
		if hdr.Flags&1 > 0 {
			cert, err := uefi.Read_WIN_CERTIFICATE_UEFI_GUID(r)
			if err != nil {
				return nil, ioerr.EOFIsUnexpected("cannot read timestamp authentication: %w", err)
			}
			newCert = cert
		}

		signingCert, err := uefi.Read_WIN_CERTIFICATE_UEFI_GUID(r)
		if err != nil {
			return nil, ioerr.EOFIsUnexpected("cannot read timestamp authentication: %w", err)
		}

		out := &VariableAuthentication3Timestamp{
			TimeStamp:   t.GoTime(),
			SigningCert: *newWinCertificateGUID(signingCert)}
		if newCert != nil {
			out.NewCert = newWinCertificateGUID(newCert)
		}
		return out, nil
	case uefi.EFI_VARIABLE_AUTHENTICATION_3_NONCE_TYPE:
		n, err := uefi.Read_EFI_VARIABLE_AUTHENTICATION_3_NONCE(r)
		if err != nil {
			return nil, ioerr.EOFIsUnexpected("cannot read nonce authentication: %w", err)
		}

		var newCert *uefi.WIN_CERTIFICATE_UEFI_GUID
		if hdr.Flags&1 > 0 {
			cert, err := uefi.Read_WIN_CERTIFICATE_UEFI_GUID(r)
			if err != nil {
				return nil, ioerr.EOFIsUnexpected("cannot read nonce authentication: %w", err)
			}
			newCert = cert
		}

		signingCert, err := uefi.Read_WIN_CERTIFICATE_UEFI_GUID(r)
		if err != nil {
			return nil, ioerr.EOFIsUnexpected("cannot read nonce authentication: %w", err)
		}

		out := &VariableAuthentication3Nonce{
			Nonce:       n.Nonce,
			SigningCert: *newWinCertificateGUID(signingCert)}
		if newCert != nil {
			out.NewCert = newWinCertificateGUID(newCert)
		}
		return out, nil
	default:
		return nil, errors.New("unexpected type")
	}
}

// VariableAuthentication3Descriptor corresponds to the authentication descriptor provided when reading the payload of a variable
// with the EFI_VARIABLE_ENHANCED_AUTHENTICATED_ACCESS attribute set.
type VariableAuthentication3Descriptor interface{}

const (
	VariableAuthentication3CertIDSHA256 = uefi.EFI_VARIABLE_AUTHENTICATION_3_CERT_ID_SHA256
)

type VariableAuthentication3CertId struct {
	Type uint8
	Id   []byte
}

func newVariableAuthentication3CertId(id *uefi.EFI_VARIABLE_AUTHENTICATION_3_CERT_ID) *VariableAuthentication3CertId {
	return &VariableAuthentication3CertId{
		Type: id.Type,
		Id:   id.Id}
}

// VariableAuthentication3TimestampDescriptor corresponds to the authentication descriptor provided when reading the payload of a
// variable with the EFI_VARIABLE_ENHANCED_AUTHENTICATED_ACCESS attribute set, and a type of
// EFI_VARIABLE_AUTHENTICATION_3_TIMESTAMP_TYPE.
type VariableAuthentication3TimestampDescriptor struct {
	TimeStamp time.Time
	VariableAuthentication3CertId
}

// VariableAuthentication3NonceDescriptor corresponds to the authentication descriptor provided when reading the payload of a
// variable with the EFI_VARIABLE_ENHANCED_AUTHENTICATED_ACCESS attribute set, and a type of
// EFI_VARIABLE_AUTHENTICATION_3_NONCE_TYPE.
type VariableAuthentication3NonceDescriptor struct {
	Nonce []byte
	VariableAuthentication3CertId
}

// ReadEnhancedAuthenticationDescriptor decodes the enhanced authentication descriptor from the supplied io.Reader. The supplied
// reader will typically read from the payload area of a variable with the EFI_VARIABLE_ENHANCED_AUTHENTICATION_ACCESS attribute
// set.
func ReadEnhancedAuthenticationDescriptor(r io.Reader) (VariableAuthentication3Descriptor, error) {
	var hdr uefi.EFI_VARIABLE_AUTHENTICATION_3
	if err := binary.Read(r, binary.LittleEndian, &hdr); err != nil {
		return nil, err
	}
	if hdr.Version != 1 {
		return nil, errors.New("unexpected version")
	}

	lr := io.LimitReader(r, int64(hdr.MetadataSize)-int64(binary.Size(hdr)))

	switch hdr.Type {
	case uefi.EFI_VARIABLE_AUTHENTICATION_3_TIMESTAMP_TYPE:
		var t uefi.EFI_TIME
		if err := binary.Read(lr, binary.LittleEndian, &t); err != nil {
			return nil, ioerr.EOFIsUnexpected("cannot read timestamp descriptor: %w", err)
		}

		id, err := uefi.Read_EFI_VARIABLE_AUTHENTICATION_3_CERT_ID(r)
		if err != nil {
			return nil, ioerr.EOFIsUnexpected("cannot read timestamp descriptor: %w", err)
		}

		return &VariableAuthentication3TimestampDescriptor{
			TimeStamp:                     t.GoTime(),
			VariableAuthentication3CertId: *newVariableAuthentication3CertId(id)}, nil
	case uefi.EFI_VARIABLE_AUTHENTICATION_3_NONCE_TYPE:
		n, err := uefi.Read_EFI_VARIABLE_AUTHENTICATION_3_NONCE(r)
		if err != nil {
			return nil, ioerr.EOFIsUnexpected("cannot read nonce descriptor: %w", err)
		}

		id, err := uefi.Read_EFI_VARIABLE_AUTHENTICATION_3_CERT_ID(r)
		if err != nil {
			return nil, ioerr.EOFIsUnexpected("cannot read nonce descriptor: %w", err)
		}

		return &VariableAuthentication3NonceDescriptor{
			Nonce:                         n.Nonce,
			VariableAuthentication3CertId: *newVariableAuthentication3CertId(id)}, nil
	default:
		return nil, errors.New("unexpected type")
	}
}
  07070100000243000081A4000000000000000000000001645E367C000011F8000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/db.go   // Copyright 2020 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package efi

import (
	"bytes"
	"crypto"
	"crypto/x509"
	"encoding/binary"
	"fmt"
	"io"

	"github.com/canonical/go-efilib/internal/uefi"

	"golang.org/x/xerrors"
)

// SignatureData corresponds to the EFI_SIGNATURE_DATA type.
type SignatureData struct {
	Owner GUID
	Data  []byte
}

func (d *SignatureData) toUefiType() *uefi.EFI_SIGNATURE_DATA {
	return &uefi.EFI_SIGNATURE_DATA{
		SignatureOwner: uefi.EFI_GUID(d.Owner),
		SignatureData:  d.Data}
}

// Write serializes this signature data to w.
func (d *SignatureData) Write(w io.Writer) error {
	return d.toUefiType().Write(w)
}

// Equal determines whether other is equal to this SignatureData
func (d *SignatureData) Equal(other *SignatureData) bool {
	if d.Owner != other.Owner {
		return false
	}
	return bytes.Equal(d.Data, other.Data)
}

// SignatureList corresponds to the EFI_SIGNATURE_LIST type.
type SignatureList struct {
	Type       GUID
	Header     []byte
	Signatures []*SignatureData
}

func (l *SignatureList) toUefiType() (out *uefi.EFI_SIGNATURE_LIST, err error) {
	out = &uefi.EFI_SIGNATURE_LIST{
		SignatureType:       uefi.EFI_GUID(l.Type),
		SignatureHeaderSize: uint32(len(l.Header)),
		SignatureHeader:     l.Header}

	for i, s := range l.Signatures {
		sig := s.toUefiType()

		sz := uint32(binary.Size(sig.SignatureOwner) + len(sig.SignatureData))
		if i == 0 {
			out.SignatureSize = sz
		}
		if sz != out.SignatureSize {
			// EFI_SIGNATURE_LIST cannot contain EFI_SIGNATURE_DATA entries with different
			// sizes - they must go in their own list.
			return nil, fmt.Errorf("signature %d contains the wrong size", i)
		}

		out.Signatures = append(out.Signatures, *sig)
	}

	out.SignatureListSize = uefi.ESLHeaderSize + out.SignatureHeaderSize + (out.SignatureSize * uint32(len(out.Signatures)))
	return out, nil
}

func (l *SignatureList) String() string {
	var b bytes.Buffer
	fmt.Fprintf(&b, "EFI_SIGNATURE_LIST{ SignatureType: %v, SignatureHeader: %x, Signatures: [", l.Type, l.Header)
	for _, d := range l.Signatures {
		fmt.Fprintf(&b, "\n\tEFI_SIGNATURE_DATA{ SignatureOwner: %v, Details: {", d.Owner)
		switch l.Type {
		case CertSHA1Guid, CertSHA256Guid, CertSHA224Guid, CertSHA384Guid, CertSHA512Guid:
			fmt.Fprintf(&b, "\n\t\tHash: %x", d.Data)
		case CertX509Guid:
			cert, err := x509.ParseCertificate(d.Data)
			if err != nil {
				fmt.Fprintf(&b, "%v", err)
			}
			h := crypto.SHA256.New()
			h.Write(cert.RawTBSCertificate)
			fmt.Fprintf(&b, "\n\t\tSubject: %v\n\t\tIssuer: %v\n\t\tSHA256 fingerprint: %x", cert.Subject, cert.Issuer, h.Sum(nil))
		default:
			fmt.Fprintf(&b, "<unrecognized type>")
		}
		fmt.Fprintf(&b, "}}")
	}
	fmt.Fprintf(&b, "]")
	return b.String()
}

// Write serializes this signature list to w.
func (l *SignatureList) Write(w io.Writer) error {
	list, err := l.toUefiType()
	if err != nil {
		return err
	}
	return list.Write(w)
}

// ReadSignatureList decodes a single EFI_SIGNATURE_LIST from r.
func ReadSignatureList(r io.Reader) (*SignatureList, error) {
	l, err := uefi.Read_EFI_SIGNATURE_LIST(r)
	if err != nil {
		return nil, err
	}

	list := &SignatureList{Type: GUID(l.SignatureType), Header: l.SignatureHeader}

	for _, s := range l.Signatures {
		list.Signatures = append(list.Signatures, &SignatureData{Owner: GUID(s.SignatureOwner), Data: s.SignatureData})
	}

	return list, nil
}

// SignatureDatabase corresponds to a list of EFI_SIGNATURE_LIST structures.
type SignatureDatabase []*SignatureList

func (db SignatureDatabase) String() string {
	var s string
	for _, l := range db {
		s = s + "\n" + l.String() + "\n"
	}
	return s
}

// Bytes returns the serialized form of this signature database.
func (db SignatureDatabase) Bytes() ([]byte, error) {
	w := new(bytes.Buffer)
	if err := db.Write(w); err != nil {
		return nil, err
	}
	return w.Bytes(), nil
}

// Write serializes this signature database to w.
func (db SignatureDatabase) Write(w io.Writer) error {
	for i, l := range db {
		if err := l.Write(w); err != nil {
			return xerrors.Errorf("cannot encode signature list %d: %w", i, err)
		}
	}
	return nil
}

// ReadSignatureDatabase decodes a list of EFI_SIGNATURE_LIST structures from r.
func ReadSignatureDatabase(r io.Reader) (SignatureDatabase, error) {
	var db SignatureDatabase
	for i := 0; ; i++ {
		l, err := ReadSignatureList(r)
		if err != nil {
			if err == io.EOF {
				break
			}
			return nil, xerrors.Errorf("cannot read EFI_SIGNATURE_LIST %d: %w", i, err)
		}
		db = append(db, l)
	}

	return db, nil
}
07070100000244000081A4000000000000000000000001645E367C00009166000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/devicepath.go   // Copyright 2020 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package efi

import (
	"bytes"
	"encoding/binary"
	"errors"
	"fmt"
	"io"
	"io/ioutil"
	"math"
	"os"
	"path/filepath"
	"strconv"
	"strings"

	"github.com/canonical/go-efilib/internal/ioerr"
	"github.com/canonical/go-efilib/internal/uefi"
	"github.com/canonical/go-efilib/mbr"

	"golang.org/x/xerrors"
)

// DevicePathType is the type of a device path node.
type DevicePathType uint8

func (t DevicePathType) String() string {
	switch t {
	case HardwareDevicePath:
		return "HardwarePath"
	case ACPIDevicePath:
		return "AcpiPath"
	case MessagingDevicePath:
		return "Msg"
	case MediaDevicePath:
		return "MediaPath"
	case BBSDevicePath:
		return "BbsPath"
	default:
		return fmt.Sprintf("Path[%02x]", uint8(t))
	}
}

const (
	HardwareDevicePath  DevicePathType = uefi.HARDWARE_DEVICE_PATH
	ACPIDevicePath      DevicePathType = uefi.ACPI_DEVICE_PATH
	MessagingDevicePath DevicePathType = uefi.MESSAGING_DEVICE_PATH
	MediaDevicePath     DevicePathType = uefi.MEDIA_DEVICE_PATH
	BBSDevicePath       DevicePathType = uefi.BBS_DEVICE_PATH
)

// DevicePathSubType is the sub-type of a device path node.
type DevicePathSubType uint8

// DevicePathToStringFlags defines flags for DevicePath.ToString and
// DevicePathNode.ToString.
type DevicePathToStringFlags int

func (f DevicePathToStringFlags) DisplayOnly() bool {
	return f&DevicePathDisplayOnly > 0
}

const (
	// DevicePathDisplayOnly indicates that each node is converted
	// to the shorter text representation.
	DevicePathDisplayOnly DevicePathToStringFlags = 1 << 0
)

// DevicePathNode represents a single node in a device path.
type DevicePathNode interface {
	fmt.Stringer
	ToString(flags DevicePathToStringFlags) string
	Write(w io.Writer) error
}

// DevicePath represents a complete device path with the first node
// representing the root.
type DevicePath []DevicePathNode

// ToString returns a string representation of this device path with the
// supplied flags.
func (p DevicePath) ToString(flags DevicePathToStringFlags) string {
	s := new(bytes.Buffer)
	for _, node := range p {
		fmt.Fprintf(s, "\\%s", node.ToString(flags))
	}
	return s.String()
}

func (p DevicePath) String() string {
	return p.ToString(DevicePathDisplayOnly)
}

// Bytes returns the serialized form of this device path.
func (p DevicePath) Bytes() ([]byte, error) {
	w := new(bytes.Buffer)
	if err := p.Write(w); err != nil {
		return nil, err
	}
	return w.Bytes(), nil
}

// Write serializes the complete device path to w.
func (p DevicePath) Write(w io.Writer) error {
	for i, node := range p {
		if err := node.Write(w); err != nil {
			return xerrors.Errorf("cannot write node %d: %w", i, err)
		}
	}

	end := uefi.EFI_DEVICE_PATH_PROTOCOL{
		Type:    uefi.END_DEVICE_PATH_TYPE,
		SubType: uefi.END_ENTIRE_DEVICE_PATH_SUBTYPE,
		Length:  4}
	return binary.Write(w, binary.LittleEndian, &end)
}

// GenericDevicePathNode corresponds to a device path nodes with an unhandled type.
type GenericDevicePathNode struct {
	Type    DevicePathType
	SubType DevicePathSubType
	Data    []byte
}

func (d *GenericDevicePathNode) ToString(_ DevicePathToStringFlags) string {
	var builder bytes.Buffer

	switch d.Type {
	case HardwareDevicePath, ACPIDevicePath, MessagingDevicePath,
		MediaDevicePath, BBSDevicePath:
		fmt.Fprintf(&builder, "%s(", d.Type)
	default:
		fmt.Fprintf(&builder, "Path(%d,", d.Type)
	}
	fmt.Fprintf(&builder, "%d", d.SubType)
	if len(d.Data) > 0 {
		fmt.Fprintf(&builder, ",%x", d.Data)
	}
	fmt.Fprintf(&builder, ")")
	return builder.String()
}

func (d *GenericDevicePathNode) String() string {
	return d.ToString(DevicePathDisplayOnly)
}

func (d *GenericDevicePathNode) Write(w io.Writer) error {
	data := uefi.EFI_DEVICE_PATH_PROTOCOL{
		Type:    uint8(d.Type),
		SubType: uint8(d.SubType)}

	if len(d.Data) > math.MaxUint16-binary.Size(data) {
		return errors.New("Data too large")
	}
	data.Length = uint16(binary.Size(data) + len(d.Data))

	if err := binary.Write(w, binary.LittleEndian, &data); err != nil {
		return err
	}
	_, err := w.Write(d.Data)
	return err
}

// PCIDevicePathNode corresponds to a PCI device path node.
type PCIDevicePathNode struct {
	Function uint8
	Device   uint8
}

func (d *PCIDevicePathNode) ToString(_ DevicePathToStringFlags) string {
	return fmt.Sprintf("Pci(0x%x,0x%x)", d.Device, d.Function)
}

func (d *PCIDevicePathNode) String() string {
	return d.ToString(DevicePathDisplayOnly)
}

func (d *PCIDevicePathNode) Write(w io.Writer) error {
	data := uefi.PCI_DEVICE_PATH{
		Header: uefi.EFI_DEVICE_PATH_PROTOCOL{
			Type:    uint8(uefi.HARDWARE_DEVICE_PATH),
			SubType: uint8(uefi.HW_PCI_DP)},
		Function: d.Function,
		Device:   d.Device}
	data.Header.Length = uint16(binary.Size(data))

	return binary.Write(w, binary.LittleEndian, &data)
}

type VendorDevicePathNode struct {
	Type DevicePathType
	GUID GUID
	Data []byte
}

func (d *VendorDevicePathNode) ToString(_ DevicePathToStringFlags) string {
	var t string
	switch d.Type {
	case HardwareDevicePath:
		t = "Hw"
	case MessagingDevicePath:
		t = "Msg"
	case MediaDevicePath:
		t = "Media"
	default:
		t = "?"
	}

	var s bytes.Buffer
	fmt.Fprintf(&s, "Ven%s(%s", t, d.GUID)
	if len(d.Data) > 0 {
		fmt.Fprintf(&s, ",%x", d.Data)
	}
	fmt.Fprintf(&s, ")")
	return s.String()
}

func (d *VendorDevicePathNode) String() string {
	return d.ToString(DevicePathDisplayOnly)
}

func (d *VendorDevicePathNode) Write(w io.Writer) error {
	var subType uint8
	switch d.Type {
	case HardwareDevicePath:
		subType = uefi.HW_VENDOR_DP
	case MessagingDevicePath:
		subType = uefi.MSG_VENDOR_DP
	case MediaDevicePath:
		subType = uefi.MEDIA_VENDOR_DP
	default:
		return errors.New("invalid device path type")
	}

	data := uefi.VENDOR_DEVICE_PATH{
		Header: uefi.EFI_DEVICE_PATH_PROTOCOL{
			Type:    uint8(d.Type),
			SubType: subType},
		Guid: uefi.EFI_GUID(d.GUID)}

	if len(d.Data) > math.MaxUint16-binary.Size(data) {
		return errors.New("Data too large")
	}
	data.Header.Length = uint16(binary.Size(data) + len(d.Data))

	if err := binary.Write(w, binary.LittleEndian, &data); err != nil {
		return err
	}

	_, err := w.Write(d.Data)
	return err
}

func readVendorDevicePathNode(r io.Reader) (out *VendorDevicePathNode, err error) {
	var n uefi.VENDOR_DEVICE_PATH
	if err := binary.Read(r, binary.LittleEndian, &n); err != nil {
		return nil, err
	}

	out = &VendorDevicePathNode{
		Type: DevicePathType(n.Header.Type),
		GUID: GUID(n.Guid)}
	data, _ := ioutil.ReadAll(r)
	out.Data = data

	return out, nil
}

// EISAID represents a compressed EISA PNP ID
type EISAID uint32

// Vendor returns the 3-letter vendor ID.
func (id EISAID) Vendor() string {
	return fmt.Sprintf("%c%c%c",
		((id>>10)&0x1f)+'A'-1,
		((id>>5)&0x1f)+'A'-1,
		(id&0x1f)+'A'-1)
}

// Product returns the product ID.
func (id EISAID) Product() uint16 {
	return uint16(id >> 16)
}

func (id EISAID) String() string {
	if id == 0 {
		return "0"
	}
	return fmt.Sprintf("%s%04x", id.Vendor(), id.Product())
}

func NewEISAID(vendor string, product uint16) (EISAID, error) {
	if len(vendor) != 3 {
		return 0, errors.New("invalid vendor length")
	}

	var out EISAID
	out |= EISAID((vendor[0]-'A'+1)&0x1f) << 10
	out |= EISAID((vendor[1]-'A'+1)&0x1f) << 5
	out |= EISAID((vendor[2] - 'A' + 1) & 0x1f)
	out |= EISAID(product) << 16

	return out, nil
}

// ACPIDevicePathNode corresponds to an ACPI device path node.
type ACPIDevicePathNode struct {
	HID EISAID
	UID uint32
}

func (d *ACPIDevicePathNode) ToString(_ DevicePathToStringFlags) string {
	if d.HID.Vendor() == "PNP" {
		switch d.HID.Product() {
		case 0x0a03:
			return fmt.Sprintf("PciRoot(0x%x)", d.UID)
		case 0x0a08:
			return fmt.Sprintf("PcieRoot(0x%x)", d.UID)
		case 0x0604:
			return fmt.Sprintf("Floppy(0x%x)", d.UID)
		case 0x0301:
			return fmt.Sprintf("Keyboard(0x%x)", d.UID)
		case 0x0501:
			return fmt.Sprintf("Serial(0x%x)", d.UID)
		case 0x0401:
			return fmt.Sprintf("ParallelPort(0x%x)", d.UID)
		}
	}
	return fmt.Sprintf("Acpi(%s,0x%x)", d.HID, d.UID)
}

func (d *ACPIDevicePathNode) String() string {
	return d.ToString(DevicePathDisplayOnly)
}

func (d *ACPIDevicePathNode) Write(w io.Writer) error {
	data := uefi.ACPI_HID_DEVICE_PATH{
		Header: uefi.EFI_DEVICE_PATH_PROTOCOL{
			Type:    uint8(uefi.ACPI_DEVICE_PATH),
			SubType: uint8(uefi.ACPI_DP)},
		HID: uint32(d.HID),
		UID: uint32(d.UID)}
	data.Header.Length = uint16(binary.Size(data))

	return binary.Write(w, binary.LittleEndian, &data)
}

type ACPIExtendedDevicePathNode struct {
	HID    EISAID
	UID    uint32
	CID    EISAID
	HIDStr string
	UIDStr string
	CIDStr string
}

func (d *ACPIExtendedDevicePathNode) ToString(flags DevicePathToStringFlags) string {
	switch {
	case d.HIDStr == "" && d.CIDStr == "" && d.UIDStr != "":
		return fmt.Sprintf("AcpiExp(%s,%s,%s)", d.HID, d.CID, d.UIDStr)
	case flags.DisplayOnly() && d.HID.Vendor() == "PNP" && (d.HID.Product() == 0x0a03 || (d.CID.Product() == 0x0a03 && d.HID.Product() != 0x0a08)):
		if d.UIDStr != "" {
			return fmt.Sprintf("PciRoot(%s)", d.UIDStr)
		}
		return fmt.Sprintf("PciRoot(0x%x)", d.UID)
	case flags.DisplayOnly() && d.HID.Vendor() == "PNP" && (d.HID.Product() == 0x0a08 || d.CID.Product() == 0x0a08):
		if d.UIDStr != "" {
			return fmt.Sprintf("PcieRoot(%s)", d.UIDStr)
		}
		return fmt.Sprintf("PcieRoot(0x%x)", d.UID)
	}

	if !flags.DisplayOnly() {
		hidStr := d.HIDStr
		if hidStr == "" {
			hidStr = "<nil>"
		}
		cidStr := d.CIDStr
		if cidStr == "" {
			cidStr = "<nil>"
		}
		uidStr := d.UIDStr
		if uidStr == "" {
			uidStr = "<nil>"
		}

		return fmt.Sprintf("AcpiEx(%s,%s,0x%x,%s,%s,%s)", d.HID, d.CID, d.UID, hidStr, cidStr, uidStr)
	}

	hidText := d.HID.String()
	if d.HIDStr != "" {
		hidText = d.HIDStr
	}
	cidText := d.CID.String()
	if d.CIDStr != "" {
		cidText = d.CIDStr
	}

	if d.UIDStr != "" {
		return fmt.Sprintf("AcpiEx(%s,%s,%s)", hidText, cidText, d.UIDStr)
	}
	return fmt.Sprintf("AcpiEx(%s,%s,0x%x)", hidText, cidText, d.UID)
}

func (d *ACPIExtendedDevicePathNode) String() string {
	return d.ToString(DevicePathDisplayOnly)
}

func (d *ACPIExtendedDevicePathNode) Write(w io.Writer) error {
	data := uefi.ACPI_EXTENDED_HID_DEVICE_PATH{
		Header: uefi.EFI_DEVICE_PATH_PROTOCOL{
			Type:    uint8(uefi.ACPI_DEVICE_PATH),
			SubType: uint8(uefi.ACPI_EXTENDED_DP)},
		HID: uint32(d.HID),
		UID: d.UID,
		CID: uint32(d.CID)}
	// Set a reasonable limit on each string field
	for _, s := range []string{d.HIDStr, d.UIDStr, d.CIDStr} {
		if len(s) > math.MaxUint16-(binary.Size(data)+3) {
			return errors.New("string field too large")
		}
	}

	// This can't overflow int
	length := binary.Size(data) + len(d.HIDStr) + len(d.UIDStr) + len(d.CIDStr) + 3
	if length > math.MaxUint16 {
		return errors.New("too large")
	}
	data.Header.Length = uint16(length)

	if err := binary.Write(w, binary.LittleEndian, &data); err != nil {
		return err
	}

	for _, s := range []string{d.HIDStr, d.UIDStr, d.CIDStr} {
		if _, err := io.WriteString(w, s); err != nil {
			return err
		}
		w.Write([]byte{0x00})
	}

	return nil
}

type ATAPIControllerRole uint8

func (r ATAPIControllerRole) String() string {
	switch r {
	case ATAPIControllerPrimary:
		return "Primary"
	case ATAPIControllerSecondary:
		return "Secondary"
	default:
		return strconv.FormatUint(uint64(r), 10)
	}
}

const (
	ATAPIControllerPrimary   ATAPIControllerRole = 0
	ATAPIControllerSecondary ATAPIControllerRole = 1
)

type ATAPIDriveRole uint8

func (r ATAPIDriveRole) String() string {
	switch r {
	case ATAPIDriveMaster:
		return "Master"
	case ATAPIDriveSlave:
		return "Slave"
	default:
		return strconv.FormatUint(uint64(r), 10)
	}
}

const (
	ATAPIDriveMaster ATAPIDriveRole = 0
	ATAPIDriveSlave  ATAPIDriveRole = 1
)

// ATAPIDevicePathNode corresponds to an ATA device path node.
type ATAPIDevicePathNode struct {
	Controller ATAPIControllerRole
	Drive      ATAPIDriveRole
	LUN        uint16
}

func (d *ATAPIDevicePathNode) ToString(flags DevicePathToStringFlags) string {
	if flags.DisplayOnly() {
		return fmt.Sprintf("Ata(0x%x)", d.LUN)
	}
	return fmt.Sprintf("Ata(%s,%s,0x%x)", d.Controller, d.Drive, d.LUN)
}

func (d *ATAPIDevicePathNode) String() string {
	return d.ToString(DevicePathDisplayOnly)
}

func (d *ATAPIDevicePathNode) Write(w io.Writer) error {
	data := uefi.ATAPI_DEVICE_PATH{
		Header: uefi.EFI_DEVICE_PATH_PROTOCOL{
			Type:    uint8(uefi.MESSAGING_DEVICE_PATH),
			SubType: uint8(uefi.MSG_ATAPI_DP)},
		PrimarySecondary: uint8(d.Controller),
		SlaveMaster:      uint8(d.Drive),
		Lun:              d.LUN}
	data.Header.Length = uint16(binary.Size(data))

	return binary.Write(w, binary.LittleEndian, &data)
}

// SCSIDevicePathNode corresponds to a SCSI device path node.
type SCSIDevicePathNode struct {
	PUN uint16
	LUN uint16
}

func (d *SCSIDevicePathNode) ToString(_ DevicePathToStringFlags) string {
	return fmt.Sprintf("Scsi(0x%x,0x%x)", d.PUN, d.LUN)
}

func (d *SCSIDevicePathNode) String() string {
	return d.ToString(DevicePathDisplayOnly)
}

func (d *SCSIDevicePathNode) Write(w io.Writer) error {
	data := uefi.SCSI_DEVICE_PATH{
		Header: uefi.EFI_DEVICE_PATH_PROTOCOL{
			Type:    uint8(uefi.MESSAGING_DEVICE_PATH),
			SubType: uint8(uefi.MSG_SCSI_DP)},
		Pun: d.PUN,
		Lun: d.LUN}
	data.Header.Length = uint16(binary.Size(data))

	return binary.Write(w, binary.LittleEndian, &data)
}

// USBDevicePathNode corresponds to a USB device path node.
type USBDevicePathNode struct {
	ParentPortNumber uint8
	InterfaceNumber  uint8
}

func (d *USBDevicePathNode) ToString(_ DevicePathToStringFlags) string {
	return fmt.Sprintf("USB(0x%x,0x%x)", d.ParentPortNumber, d.InterfaceNumber)
}

func (d *USBDevicePathNode) String() string {
	return d.ToString(DevicePathDisplayOnly)
}

func (d *USBDevicePathNode) Write(w io.Writer) error {
	data := uefi.USB_DEVICE_PATH{
		Header: uefi.EFI_DEVICE_PATH_PROTOCOL{
			Type:    uint8(uefi.MESSAGING_DEVICE_PATH),
			SubType: uint8(uefi.MSG_USB_DP)},
		ParentPortNumber: d.ParentPortNumber,
		InterfaceNumber:  d.InterfaceNumber}
	data.Header.Length = uint16(binary.Size(data))

	return binary.Write(w, binary.LittleEndian, &data)
}

type USBClass uint8

const (
	USBClassAudio       USBClass = 0x01
	USBClassCDCControl  USBClass = 0x02
	USBClassHID         USBClass = 0x03
	USBClassImage       USBClass = 0x06
	USBClassPrinter     USBClass = 0x07
	USBClassMassStorage USBClass = 0x08
	USBClassHub         USBClass = 0x09
	USBClassCDCData     USBClass = 0x0a
	USBClassSmartCard   USBClass = 0x0b
	USBClassVideo       USBClass = 0x0e
	USBClassDiagnostic  USBClass = 0xdc
	USBClassWireless    USBClass = 0xe0
)

// USBClassDevicePathNode corresponds to a USB class device path node.
type USBClassDevicePathNode struct {
	VendorId       uint16
	ProductId      uint16
	DeviceClass    USBClass
	DeviceSubClass uint8
	DeviceProtocol uint8
}

func (d *USBClassDevicePathNode) ToString(_ DevicePathToStringFlags) string {
	var builder bytes.Buffer
	switch d.DeviceClass {
	case USBClassAudio:
		fmt.Fprintf(&builder, "UsbAudio")
	case USBClassCDCControl:
		fmt.Fprintf(&builder, "UsbCDCControl")
	case USBClassHID:
		fmt.Fprintf(&builder, "UsbHID")
	case USBClassImage:
		fmt.Fprintf(&builder, "UsbImage")
	case USBClassPrinter:
		fmt.Fprintf(&builder, "UsbPrinter")
	case USBClassMassStorage:
		fmt.Fprintf(&builder, "UsbMassStorage")
	case USBClassHub:
		fmt.Fprintf(&builder, "UsbHub")
	case USBClassCDCData:
		fmt.Fprintf(&builder, "UsbCDCData")
	case USBClassSmartCard:
		fmt.Fprintf(&builder, "UsbSmartCard")
	case USBClassVideo:
		fmt.Fprintf(&builder, "UsbVideo")
	case USBClassDiagnostic:
		fmt.Fprintf(&builder, "UsbDiagnostic")
	case USBClassWireless:
		fmt.Fprintf(&builder, "UsbWireless")
	default:
		return fmt.Sprintf("UsbClass(0x%x,0x%x,0x%x,0x%x,0x%x)", d.VendorId, d.ProductId, d.DeviceClass, d.DeviceSubClass, d.DeviceProtocol)
	}

	fmt.Fprintf(&builder, "(0x%x,0x%x,0x%x,0x%x)", d.VendorId, d.ProductId, d.DeviceSubClass, d.DeviceProtocol)
	return builder.String()
}

func (d *USBClassDevicePathNode) String() string {
	return d.ToString(DevicePathDisplayOnly)
}

func (d *USBClassDevicePathNode) Write(w io.Writer) error {
	data := uefi.USB_CLASS_DEVICE_PATH{
		Header: uefi.EFI_DEVICE_PATH_PROTOCOL{
			Type:    uint8(uefi.MESSAGING_DEVICE_PATH),
			SubType: uint8(uefi.MSG_USB_CLASS_DP)},
		VendorId:       d.VendorId,
		ProductId:      d.ProductId,
		DeviceClass:    uint8(d.DeviceClass),
		DeviceSubClass: d.DeviceSubClass,
		DeviceProtocol: d.DeviceProtocol}
	data.Header.Length = uint16(binary.Size(data))

	return binary.Write(w, binary.LittleEndian, &data)
}

// USBWWIDDevicePathNode corresponds to a USB WWID device path node.
type USBWWIDDevicePathNode struct {
	InterfaceNumber uint16
	VendorId        uint16
	ProductId       uint16
	SerialNumber    string
}

func (d *USBWWIDDevicePathNode) ToString(_ DevicePathToStringFlags) string {
	return fmt.Sprintf("UsbWwid(0x%x,0x%x,0x%x,\"%s\"", d.VendorId, d.ProductId, d.InterfaceNumber, d.SerialNumber)
}

func (d *USBWWIDDevicePathNode) String() string {
	return d.ToString(DevicePathDisplayOnly)
}

func (d *USBWWIDDevicePathNode) Write(w io.Writer) error {
	data := uefi.USB_WWID_DEVICE_PATH{
		Header: uefi.EFI_DEVICE_PATH_PROTOCOL{
			Type:    uint8(uefi.MESSAGING_DEVICE_PATH),
			SubType: uint8(uefi.MSG_USB_WWID_DP)},
		InterfaceNumber: d.InterfaceNumber,
		VendorId:        d.VendorId,
		ProductId:       d.ProductId,
		SerialNumber:    ConvertUTF8ToUTF16(d.SerialNumber)}

	l := binary.Size(data.Header) + binary.Size(data.InterfaceNumber) + binary.Size(data.VendorId) + binary.Size(data.ProductId)
	if binary.Size(data.SerialNumber) > math.MaxUint16-l {
		return errors.New("SerialNumber too long")
	}
	data.Header.Length = uint16(l + binary.Size(data.SerialNumber))

	return binary.Write(w, binary.LittleEndian, &data)
}

type DeviceLogicalUnitDevicePathNode struct {
	LUN uint8
}

func (d *DeviceLogicalUnitDevicePathNode) ToString(_ DevicePathToStringFlags) string {
	return fmt.Sprintf("Unit(0x%x)", d.LUN)
}

func (d *DeviceLogicalUnitDevicePathNode) String() string {
	return d.ToString(DevicePathDisplayOnly)
}

func (d *DeviceLogicalUnitDevicePathNode) Write(w io.Writer) error {
	data := uefi.DEVICE_LOGICAL_UNIT_DEVICE_PATH{
		Header: uefi.EFI_DEVICE_PATH_PROTOCOL{
			Type:    uint8(uefi.MESSAGING_DEVICE_PATH),
			SubType: uint8(uefi.MSG_DEVICE_LOGICAL_UNIT_DP)},
		Lun: d.LUN}
	data.Header.Length = uint16(binary.Size(data))

	return binary.Write(w, binary.LittleEndian, &data)
}

// SATADevicePathNode corresponds to a SATA device path node.
type SATADevicePathNode struct {
	HBAPortNumber            uint16
	PortMultiplierPortNumber uint16
	LUN                      uint16
}

func (d *SATADevicePathNode) ToString(_ DevicePathToStringFlags) string {
	return fmt.Sprintf("Sata(0x%x,0x%x,0x%x)", d.HBAPortNumber, d.PortMultiplierPortNumber, d.LUN)
}

func (d *SATADevicePathNode) String() string {
	return d.ToString(DevicePathDisplayOnly)
}

func (d *SATADevicePathNode) Write(w io.Writer) error {
	data := uefi.SATA_DEVICE_PATH{
		Header: uefi.EFI_DEVICE_PATH_PROTOCOL{
			Type:    uint8(uefi.MESSAGING_DEVICE_PATH),
			SubType: uint8(uefi.MSG_SATA_DP)},
		HBAPortNumber:            d.HBAPortNumber,
		PortMultiplierPortNumber: d.PortMultiplierPortNumber,
		Lun:                      d.LUN}
	data.Header.Length = uint16(binary.Size(data))

	return binary.Write(w, binary.LittleEndian, &data)
}

// NVMENamespaceDevicePathNode corresponds to a NVME namespace device path node.
type NVMENamespaceDevicePathNode struct {
	NamespaceID   uint32
	NamespaceUUID uint64
}

func (d *NVMENamespaceDevicePathNode) ToString(_ DevicePathToStringFlags) string {
	var uuid [8]uint8
	binary.BigEndian.PutUint64(uuid[:], d.NamespaceUUID)
	return fmt.Sprintf("NVMe(0x%x,%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x)", d.NamespaceID,
		uuid[0], uuid[1], uuid[2], uuid[3], uuid[4], uuid[5], uuid[6], uuid[7])
}

func (d *NVMENamespaceDevicePathNode) String() string {
	return d.ToString(DevicePathDisplayOnly)
}

func (d *NVMENamespaceDevicePathNode) Write(w io.Writer) error {
	data := uefi.NVME_NAMESPACE_DEVICE_PATH{
		Header: uefi.EFI_DEVICE_PATH_PROTOCOL{
			Type:    uint8(uefi.MESSAGING_DEVICE_PATH),
			SubType: uint8(uefi.MSG_NVME_NAMESPACE_DP)},
		NamespaceId:   d.NamespaceID,
		NamespaceUuid: d.NamespaceUUID}
	data.Header.Length = uint16(binary.Size(data))

	return binary.Write(w, binary.LittleEndian, &data)
}

type MBRType uint8

func (t MBRType) String() string {
	switch t {
	case LegacyMBR:
		return "MBR"
	case GPT:
		return "GPT"
	default:
		return strconv.FormatUint(uint64(t), 10)
	}
}

const (
	LegacyMBR MBRType = 1
	GPT               = 2
)

type HardDriveSignatureType uint8

func (t HardDriveSignatureType) String() string {
	switch t {
	case uefi.SIGNATURE_TYPE_MBR:
		return "MBR"
	case uefi.SIGNATURE_TYPE_GUID:
		return "GPT"
	default:
		return strconv.FormatUint(uint64(t), 10)
	}
}

type HardDriveSignature interface {
	fmt.Stringer
	Data() [16]uint8
	Type() HardDriveSignatureType
}

type GUIDHardDriveSignature GUID

func (s GUIDHardDriveSignature) String() string {
	return GUID(s).String()
}

func (s GUIDHardDriveSignature) Data() (out [16]uint8) {
	copy(out[:], s[:])
	return out
}

func (GUIDHardDriveSignature) Type() HardDriveSignatureType {
	return HardDriveSignatureType(uefi.SIGNATURE_TYPE_GUID)
}

type MBRHardDriveSignature uint32

func (s MBRHardDriveSignature) String() string {
	return fmt.Sprintf("0x%08x", uint32(s))
}

func (s MBRHardDriveSignature) Data() (out [16]uint8) {
	binary.LittleEndian.PutUint32(out[:], uint32(s))
	return out
}

func (s MBRHardDriveSignature) Type() HardDriveSignatureType {
	return HardDriveSignatureType(uefi.SIGNATURE_TYPE_MBR)
}

type genericHardDriveSignature struct {
	typ  HardDriveSignatureType
	data [16]uint8
}

func (s *genericHardDriveSignature) String() string {
	return fmt.Sprintf("%x", s.data)
}

func (s *genericHardDriveSignature) Data() [16]uint8 {
	return s.data
}

func (s *genericHardDriveSignature) Type() HardDriveSignatureType {
	return s.typ
}

// HardDriveDevicePathNode corresponds to a hard drive device path node.
type HardDriveDevicePathNode struct {
	PartitionNumber uint32
	PartitionStart  uint64
	PartitionSize   uint64
	Signature       HardDriveSignature
	MBRType         MBRType
}

func (d *HardDriveDevicePathNode) ToString(flags DevicePathToStringFlags) string {
	var builder bytes.Buffer

	switch d.Signature.Type() {
	default:
		fmt.Fprintf(&builder, "HD(%d,%d,0", d.PartitionNumber, d.MBRType)
	case uefi.SIGNATURE_TYPE_MBR, uefi.SIGNATURE_TYPE_GUID:
		fmt.Fprintf(&builder, "HD(%d,%s,%s", d.PartitionNumber, d.Signature.Type(), d.Signature)
	}

	if !flags.DisplayOnly() {
		fmt.Fprintf(&builder, ",0x%x,0x%x", d.PartitionStart, d.PartitionSize)
	}
	fmt.Fprintf(&builder, ")")

	return builder.String()
}

func (d *HardDriveDevicePathNode) String() string {
	return d.ToString(DevicePathDisplayOnly)
}

func (d *HardDriveDevicePathNode) Write(w io.Writer) error {
	data := uefi.HARDDRIVE_DEVICE_PATH{
		Header: uefi.EFI_DEVICE_PATH_PROTOCOL{
			Type:    uint8(uefi.MEDIA_DEVICE_PATH),
			SubType: uint8(uefi.MEDIA_HARDDRIVE_DP)},
		PartitionNumber: d.PartitionNumber,
		PartitionStart:  d.PartitionStart,
		PartitionSize:   d.PartitionSize,
		MBRType:         uint8(d.MBRType)}

	if d.Signature != nil {
		data.SignatureType = uint8(d.Signature.Type())

		switch d.Signature.Type() {
		case uefi.NO_DISK_SIGNATURE:
			if d.Signature.Data() != data.Signature {
				return errors.New("inconsistent signature and signature type")
			}
		default:
			data.Signature = d.Signature.Data()
		}
	}

	data.Header.Length = uint16(binary.Size(data))

	return binary.Write(w, binary.LittleEndian, &data)
}

// NewHardDriveDevicePathNodeFromDevice constructs a HardDriveDevicePathNode for the
// specified partition on the supplied device reader. The device's total size and
// logical block size must be supplied.
func NewHardDriveDevicePathNodeFromDevice(r io.ReaderAt, totalSz, blockSz int64, part int) (*HardDriveDevicePathNode, error) {
	if part < 1 {
		return nil, errors.New("invalid partition number")
	}

	table, err := ReadPartitionTable(r, totalSz, blockSz, PrimaryPartitionTable, true)
	switch {
	case err == ErrNoProtectiveMBR:
		record, err := mbr.ReadRecord(io.NewSectionReader(r, 0, totalSz))
		if err != nil {
			return nil, err
		}
		if part > 4 {
			return nil, fmt.Errorf("invalid partition number %d for MBR", part)
		}

		entry := record.Partitions[part-1]

		return &HardDriveDevicePathNode{
			PartitionNumber: uint32(part),
			PartitionStart:  uint64(entry.StartingLBA),
			PartitionSize:   uint64(entry.NumberOfSectors),
			Signature:       MBRHardDriveSignature(record.UniqueSignature),
			MBRType:         LegacyMBR}, nil
	case err != nil:
		return nil, err
	default:
		if part > len(table.Entries) {
			return nil, fmt.Errorf("invalid partition number %d: device only has %d partitions", part, len(table.Entries))
		}

		entry := table.Entries[part-1]

		if entry.PartitionTypeGUID == UnusedPartitionType {
			return nil, errors.New("requested partition is unused")
		}

		return &HardDriveDevicePathNode{
			PartitionNumber: uint32(part),
			PartitionStart:  uint64(entry.StartingLBA),
			PartitionSize:   uint64(entry.EndingLBA - entry.StartingLBA + 1),
			Signature:       GUIDHardDriveSignature(entry.UniquePartitionGUID),
			MBRType:         GPT}, nil
	}
}

// CDROMDevicePathNode corresponds to a CDROM device path node.
type CDROMDevicePathNode struct {
	BootEntry      uint32
	PartitionStart uint64
	PartitionSize  uint64
}

func (d *CDROMDevicePathNode) ToString(flags DevicePathToStringFlags) string {
	if flags.DisplayOnly() {
		return fmt.Sprintf("CDROM(0x%x)", d.BootEntry)
	}
	return fmt.Sprintf("CDROM(0x%x,0x%x,0x%x)", d.BootEntry, d.PartitionStart, d.PartitionSize)
}

func (d *CDROMDevicePathNode) String() string {
	return d.ToString(DevicePathDisplayOnly)
}

func (d *CDROMDevicePathNode) Write(w io.Writer) error {
	data := uefi.CDROM_DEVICE_PATH{
		Header: uefi.EFI_DEVICE_PATH_PROTOCOL{
			Type:    uint8(uefi.MEDIA_DEVICE_PATH),
			SubType: uint8(uefi.MEDIA_CDROM_DP)},
		BootEntry:      d.BootEntry,
		PartitionStart: d.PartitionStart,
		PartitionSize:  d.PartitionSize}
	data.Header.Length = uint16(binary.Size(data))

	return binary.Write(w, binary.LittleEndian, &data)
}

// FilePathDevicePathNode corresponds to a file path device path node.
type FilePathDevicePathNode string

func (d FilePathDevicePathNode) ToString(_ DevicePathToStringFlags) string {
	return string(d)
}

func (d FilePathDevicePathNode) String() string {
	return d.ToString(DevicePathDisplayOnly)
}

func (d FilePathDevicePathNode) Write(w io.Writer) error {
	data := uefi.FILEPATH_DEVICE_PATH{
		Header: uefi.EFI_DEVICE_PATH_PROTOCOL{
			Type:    uint8(uefi.MEDIA_DEVICE_PATH),
			SubType: uint8(uefi.MEDIA_FILEPATH_DP)},
		PathName: ConvertUTF8ToUTF16(string(d) + "\x00")}
	if binary.Size(data.PathName) > math.MaxUint16-binary.Size(data.Header) {
		return errors.New("PathName too large")
	}
	data.Header.Length = uint16(binary.Size(data.Header) + binary.Size(data.PathName))

	return data.Write(w)
}

// NewFilePathDevicePathNode constructs a new FilePathDevicePathNode from the supplied
// path, converting the OS native separators to EFI separators ("\") and prepending
// a separator to the start of the path if one doesn't already exist.
func NewFilePathDevicePathNode(path string) (out FilePathDevicePathNode) {
	components := strings.Split(path, string(os.PathSeparator))
	if !filepath.IsAbs(path) {
		out = FilePathDevicePathNode("\\")
	}
	return out + FilePathDevicePathNode(strings.Join(components, "\\"))
}

// MediaFvFileDevicePathNode corresponds to a firmware volume file device path node.
type MediaFvFileDevicePathNode GUID

func (d MediaFvFileDevicePathNode) ToString(_ DevicePathToStringFlags) string {
	return fmt.Sprintf("FvFile(%s)", GUID(d))
}

func (d MediaFvFileDevicePathNode) String() string {
	return d.ToString(DevicePathDisplayOnly)
}

func (d MediaFvFileDevicePathNode) Write(w io.Writer) error {
	data := uefi.MEDIA_FW_VOL_FILEPATH_DEVICE_PATH{
		Header: uefi.EFI_DEVICE_PATH_PROTOCOL{
			Type:    uint8(uefi.MEDIA_DEVICE_PATH),
			SubType: uint8(uefi.MEDIA_PIWG_FW_FILE_DP)},
		FvFileName: uefi.EFI_GUID(d)}
	data.Header.Length = uint16(binary.Size(data))

	return binary.Write(w, binary.LittleEndian, &data)
}

// MediaFvDevicePathNode corresponds to a firmware volume device path node.
type MediaFvDevicePathNode GUID

func (d MediaFvDevicePathNode) ToString(_ DevicePathToStringFlags) string {
	return fmt.Sprintf("Fv(%s)", GUID(d))
}

func (d MediaFvDevicePathNode) String() string {
	return d.ToString(DevicePathDisplayOnly)
}

func (d MediaFvDevicePathNode) Write(w io.Writer) error {
	data := uefi.MEDIA_FW_VOL_DEVICE_PATH{
		Header: uefi.EFI_DEVICE_PATH_PROTOCOL{
			Type:    uint8(uefi.MEDIA_DEVICE_PATH),
			SubType: uint8(uefi.MEDIA_PIWG_FW_VOL_DP)},
		FvName: uefi.EFI_GUID(d)}
	data.Header.Length = uint16(binary.Size(data))

	return binary.Write(w, binary.LittleEndian, &data)
}

type MediaRelOffsetRangeDevicePathNode struct {
	StartingOffset uint64
	EndingOffset   uint64
}

func (d *MediaRelOffsetRangeDevicePathNode) ToString(_ DevicePathToStringFlags) string {
	return fmt.Sprintf("Offset(0x%x,0x%x)", d.StartingOffset, d.EndingOffset)
}

func (d *MediaRelOffsetRangeDevicePathNode) String() string {
	return d.ToString(DevicePathDisplayOnly)
}

func (d *MediaRelOffsetRangeDevicePathNode) Write(w io.Writer) error {
	data := uefi.MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH{
		Header: uefi.EFI_DEVICE_PATH_PROTOCOL{
			Type:    uint8(uefi.MEDIA_DEVICE_PATH),
			SubType: uint8(uefi.MEDIA_RELATIVE_OFFSET_RANGE_DP)},
		StartingOffset: d.StartingOffset,
		EndingOffset:   d.EndingOffset}
	data.Header.Length = uint16(binary.Size(data))

	return binary.Write(w, binary.LittleEndian, &data)
}

func decodeDevicePathNode(r io.Reader) (out DevicePathNode, err error) {
	buf := new(bytes.Buffer)
	r2 := io.TeeReader(r, buf)

	var h uefi.EFI_DEVICE_PATH_PROTOCOL
	if err := binary.Read(r2, binary.LittleEndian, &h); err != nil {
		return nil, err
	}

	if h.Length < 4 {
		return nil, fmt.Errorf("invalid length %d bytes (too small)", h.Length)
	}

	if _, err := io.CopyN(buf, r, int64(h.Length-4)); err != nil {
		return nil, ioerr.EOFIsUnexpected(err)
	}

	defer func() {
		switch {
		case err == io.EOF:
			fallthrough
		case xerrors.Is(err, io.ErrUnexpectedEOF):
			err = fmt.Errorf("invalid length %d bytes (too small)", h.Length)
		case err != nil:
		case buf.Len() > 0:
			err = fmt.Errorf("invalid length %d bytes (too large)", h.Length)
		}
	}()

	switch h.Type {
	case uefi.HARDWARE_DEVICE_PATH:
		switch h.SubType {
		case uefi.HW_PCI_DP:
			var n uefi.PCI_DEVICE_PATH
			if err := binary.Read(buf, binary.LittleEndian, &n); err != nil {
				return nil, err
			}
			return &PCIDevicePathNode{Function: n.Function, Device: n.Device}, nil
		case uefi.HW_VENDOR_DP:
			return readVendorDevicePathNode(buf)
		}
	case uefi.ACPI_DEVICE_PATH:
		switch h.SubType {
		case uefi.ACPI_DP:
			var n uefi.ACPI_HID_DEVICE_PATH
			if err := binary.Read(buf, binary.LittleEndian, &n); err != nil {
				return nil, err
			}
			return &ACPIDevicePathNode{HID: EISAID(n.HID), UID: n.UID}, nil
		case uefi.ACPI_EXTENDED_DP:
			var n uefi.ACPI_EXTENDED_HID_DEVICE_PATH
			if err := binary.Read(buf, binary.LittleEndian, &n); err != nil {
				return nil, err
			}
			node := &ACPIExtendedDevicePathNode{HID: EISAID(n.HID), UID: n.UID, CID: EISAID(n.CID)}
			for _, s := range []*string{&node.HIDStr, &node.UIDStr, &node.CIDStr} {
				v, err := buf.ReadString('\x00')
				if err != nil {
					return nil, err
				}
				*s = v[:len(v)-1]
			}
			return node, nil
		}
	case uefi.MESSAGING_DEVICE_PATH:
		switch h.SubType {
		case uefi.MSG_ATAPI_DP:
			var n uefi.ATAPI_DEVICE_PATH
			if err := binary.Read(buf, binary.LittleEndian, &n); err != nil {
				return nil, err
			}
			return &ATAPIDevicePathNode{
				Controller: ATAPIControllerRole(n.PrimarySecondary),
				Drive:      ATAPIDriveRole(n.SlaveMaster),
				LUN:        n.Lun}, nil
		case uefi.MSG_SCSI_DP:
			var n uefi.SCSI_DEVICE_PATH
			if err := binary.Read(buf, binary.LittleEndian, &n); err != nil {
				return nil, err
			}
			return &SCSIDevicePathNode{PUN: n.Pun, LUN: n.Lun}, nil
		case uefi.MSG_USB_DP:
			var n uefi.USB_DEVICE_PATH
			if err := binary.Read(buf, binary.LittleEndian, &n); err != nil {
				return nil, err
			}
			return &USBDevicePathNode{ParentPortNumber: n.ParentPortNumber, InterfaceNumber: n.InterfaceNumber}, nil
		case uefi.MSG_USB_CLASS_DP:
			var n uefi.USB_CLASS_DEVICE_PATH
			if err := binary.Read(buf, binary.LittleEndian, &n); err != nil {
				return nil, err
			}
			return &USBClassDevicePathNode{
				VendorId:       n.VendorId,
				ProductId:      n.ProductId,
				DeviceClass:    USBClass(n.DeviceClass),
				DeviceSubClass: n.DeviceSubClass,
				DeviceProtocol: n.DeviceProtocol}, nil
		case uefi.MSG_VENDOR_DP:
			return readVendorDevicePathNode(buf)
		case uefi.MSG_USB_WWID_DP:
			n, err := uefi.Read_USB_WWID_DEVICE_PATH(buf)
			if err != nil {
				return nil, err
			}
			return &USBWWIDDevicePathNode{
				InterfaceNumber: n.InterfaceNumber,
				VendorId:        n.VendorId,
				ProductId:       n.ProductId,
				SerialNumber:    ConvertUTF16ToUTF8(n.SerialNumber)}, nil
		case uefi.MSG_DEVICE_LOGICAL_UNIT_DP:
			var n uefi.DEVICE_LOGICAL_UNIT_DEVICE_PATH
			if err := binary.Read(buf, binary.LittleEndian, &n); err != nil {
				return nil, err
			}
			return &DeviceLogicalUnitDevicePathNode{LUN: n.Lun}, nil
		case uefi.MSG_SATA_DP:
			var n uefi.SATA_DEVICE_PATH
			if err := binary.Read(buf, binary.LittleEndian, &n); err != nil {
				return nil, err
			}
			return &SATADevicePathNode{
				HBAPortNumber:            n.HBAPortNumber,
				PortMultiplierPortNumber: n.PortMultiplierPortNumber,
				LUN:                      n.Lun}, nil
		case uefi.MSG_NVME_NAMESPACE_DP:
			var n uefi.NVME_NAMESPACE_DEVICE_PATH
			if err := binary.Read(buf, binary.LittleEndian, &n); err != nil {
				return nil, err
			}
			return &NVMENamespaceDevicePathNode{
				NamespaceID:   n.NamespaceId,
				NamespaceUUID: n.NamespaceUuid}, nil
		}
	case uefi.MEDIA_DEVICE_PATH:
		switch h.SubType {
		case uefi.MEDIA_HARDDRIVE_DP:
			var n uefi.HARDDRIVE_DEVICE_PATH
			if err := binary.Read(buf, binary.LittleEndian, &n); err != nil {
				return nil, err
			}

			var signature HardDriveSignature
			switch n.SignatureType {
			case uefi.NO_DISK_SIGNATURE:
			case uefi.SIGNATURE_TYPE_MBR:
				signature = MBRHardDriveSignature(binary.LittleEndian.Uint32(n.Signature[:]))
			case uefi.SIGNATURE_TYPE_GUID:
				signature = GUIDHardDriveSignature(n.Signature)
			default:
				signature = &genericHardDriveSignature{
					typ:  HardDriveSignatureType(n.SignatureType),
					data: n.Signature}
			}
			return &HardDriveDevicePathNode{
				PartitionNumber: n.PartitionNumber,
				PartitionStart:  n.PartitionStart,
				PartitionSize:   n.PartitionSize,
				Signature:       signature,
				MBRType:         MBRType(n.MBRType)}, nil
		case uefi.MEDIA_CDROM_DP:
			var n uefi.CDROM_DEVICE_PATH
			if err := binary.Read(buf, binary.LittleEndian, &n); err != nil {
				return nil, err
			}
			return &CDROMDevicePathNode{
				BootEntry:      n.BootEntry,
				PartitionStart: n.PartitionStart,
				PartitionSize:  n.PartitionSize}, nil
		case uefi.MEDIA_VENDOR_DP:
			return readVendorDevicePathNode(buf)
		case uefi.MEDIA_FILEPATH_DP:
			n, err := uefi.Read_FILEPATH_DEVICE_PATH(buf)
			if err != nil {
				return nil, err
			}
			return FilePathDevicePathNode(ConvertUTF16ToUTF8(n.PathName)), nil
		case uefi.MEDIA_PIWG_FW_FILE_DP:
			var n uefi.MEDIA_FW_VOL_FILEPATH_DEVICE_PATH
			if err := binary.Read(buf, binary.LittleEndian, &n); err != nil {
				return nil, err
			}
			return MediaFvFileDevicePathNode(GUID(n.FvFileName)), nil
		case uefi.MEDIA_PIWG_FW_VOL_DP:
			var n uefi.MEDIA_FW_VOL_DEVICE_PATH
			if err := binary.Read(buf, binary.LittleEndian, &n); err != nil {
				return nil, err
			}
			return MediaFvDevicePathNode(GUID(n.FvName)), nil
		case uefi.MEDIA_RELATIVE_OFFSET_RANGE_DP:
			var n uefi.MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH
			if err := binary.Read(buf, binary.LittleEndian, &n); err != nil {
				return nil, err
			}
			return &MediaRelOffsetRangeDevicePathNode{StartingOffset: n.StartingOffset, EndingOffset: n.EndingOffset}, nil
		}
	case uefi.END_DEVICE_PATH_TYPE:
		buf.Reset()
		return nil, nil
	}

	var n uefi.EFI_DEVICE_PATH_PROTOCOL
	if err := binary.Read(buf, binary.LittleEndian, &n); err != nil {
		return nil, err
	}
	data, _ := ioutil.ReadAll(buf)
	return &GenericDevicePathNode{Type: DevicePathType(n.Type), SubType: DevicePathSubType(n.SubType), Data: data}, nil
}

// ReadDevicePath decodes a device path from the supplied io.Reader.
func ReadDevicePath(r io.Reader) (out DevicePath, err error) {
	for i := 0; ; i++ {
		node, err := decodeDevicePathNode(r)
		switch {
		case err != nil && i == 0:
			return nil, ioerr.PassRawEOF("cannot decode node %d: %w", i, err)
		case err != nil:
			return nil, ioerr.EOFIsUnexpected("cannot decode node: %d: %w", i, err)
		}
		if node == nil {
			break
		}
		out = append(out, node)
	}
	return out, nil
}
  07070100000245000081A4000000000000000000000001645E367C000027DB000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/gpt.go  // Copyright 2020 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package efi

import (
	"bytes"
	"encoding/binary"
	"errors"
	"fmt"
	"hash/crc32"
	"io"

	"golang.org/x/xerrors"

	"github.com/canonical/go-efilib/internal/uefi"
	"github.com/canonical/go-efilib/mbr"
)

var (
	ErrCRCCheck        = errors.New("CRC check failed")
	ErrNoProtectiveMBR = errors.New("no protective master boot record found")

	// UnusedPartitionType is the type GUID of an unused partition entry.
	UnusedPartitionType GUID
)

type InvalidGPTHeaderError string

func (e InvalidGPTHeaderError) Error() string {
	return "invalid GPT header: " + string(e)
}

// PartitionTableHeader correponds to the EFI_PARTITION_TABLE_HEADER type.
type PartitionTableHeader struct {
	HeaderSize               uint32
	MyLBA                    LBA
	AlternateLBA             LBA
	FirstUsableLBA           LBA
	LastUsableLBA            LBA
	DiskGUID                 GUID
	PartitionEntryLBA        LBA
	NumberOfPartitionEntries uint32
	SizeOfPartitionEntry     uint32
	PartitionEntryArrayCRC32 uint32
}

// Write serializes this PartitionTableHeader to w. The CRC field is
// computed automatically.
func (h *PartitionTableHeader) Write(w io.Writer) error {
	hdr := uefi.EFI_PARTITION_TABLE_HEADER{
		Hdr: uefi.EFI_TABLE_HEADER{
			Signature:  uefi.EFI_PTAB_HEADER_ID,
			Revision:   0x10000,
			HeaderSize: h.HeaderSize},
		MyLBA:                    uefi.EFI_LBA(h.MyLBA),
		AlternateLBA:             uefi.EFI_LBA(h.AlternateLBA),
		FirstUsableLBA:           uefi.EFI_LBA(h.FirstUsableLBA),
		LastUsableLBA:            uefi.EFI_LBA(h.LastUsableLBA),
		DiskGUID:                 uefi.EFI_GUID(h.DiskGUID),
		PartitionEntryLBA:        uefi.EFI_LBA(h.PartitionEntryLBA),
		NumberOfPartitionEntries: h.NumberOfPartitionEntries,
		SizeOfPartitionEntry:     h.SizeOfPartitionEntry,
		PartitionEntryArrayCRC32: h.PartitionEntryArrayCRC32}

	hdrSize := binary.Size(hdr)
	if h.HeaderSize < uint32(hdrSize) {
		return errors.New("invalid HeaderSize")
	}

	reserved := make([]byte, int(h.HeaderSize)-hdrSize)

	crc := crc32.NewIEEE()
	binary.Write(crc, binary.LittleEndian, &hdr)
	crc.Write(reserved)

	hdr.Hdr.CRC = crc.Sum32()

	if err := binary.Write(w, binary.LittleEndian, &hdr); err != nil {
		return err
	}
	_, err := w.Write(reserved)
	return err
}

func (h *PartitionTableHeader) String() string {
	return fmt.Sprintf("EFI_PARTITION_TABLE_HEADER{ MyLBA: 0x%x, AlternateLBA: 0x%x, FirstUsableLBA: 0x%x, "+
		"LastUsableLBA: 0x%x, DiskGUID: %v, PartitionEntryLBA: 0x%x, NumberOfPartitionEntries: %d, "+
		"SizeOfPartitionEntry: 0x%x, PartitionEntryArrayCRC32: 0x%08x }",
		h.MyLBA, h.AlternateLBA, h.FirstUsableLBA, h.LastUsableLBA, h.DiskGUID, h.PartitionEntryLBA,
		h.NumberOfPartitionEntries, h.SizeOfPartitionEntry, h.PartitionEntryArrayCRC32)
}

// ReadPartitionTableHeader reads a EFI_PARTITION_TABLE_HEADER from the supplied io.Reader.
// If the header signature or revision is incorrect, an error will be returned. If
// checkCrc is true and the header has an invalid CRC, an error will be returned.
// If checkCrc is false, then a CRC check is not performed.
func ReadPartitionTableHeader(r io.Reader, checkCrc bool) (*PartitionTableHeader, error) {
	hdr, crc, err := uefi.Read_EFI_PARTITION_TABLE_HEADER(r)
	if err != nil {
		return nil, err
	}
	if hdr.Hdr.Signature != uefi.EFI_PTAB_HEADER_ID {
		return nil, InvalidGPTHeaderError("invalid signature")
	}
	if hdr.Hdr.Revision != 0x10000 {
		return nil, InvalidGPTHeaderError("unexpected revision")
	}
	if checkCrc && hdr.Hdr.CRC != crc {
		return nil, ErrCRCCheck
	}

	return &PartitionTableHeader{
		HeaderSize:               hdr.Hdr.HeaderSize,
		MyLBA:                    LBA(hdr.MyLBA),
		AlternateLBA:             LBA(hdr.AlternateLBA),
		FirstUsableLBA:           LBA(hdr.FirstUsableLBA),
		LastUsableLBA:            LBA(hdr.LastUsableLBA),
		DiskGUID:                 GUID(hdr.DiskGUID),
		PartitionEntryLBA:        LBA(hdr.PartitionEntryLBA),
		NumberOfPartitionEntries: hdr.NumberOfPartitionEntries,
		SizeOfPartitionEntry:     hdr.SizeOfPartitionEntry,
		PartitionEntryArrayCRC32: hdr.PartitionEntryArrayCRC32}, nil
}

// PartitionEntry corresponds to the EFI_PARTITION_ENTRY type.
type PartitionEntry struct {
	PartitionTypeGUID   GUID
	UniquePartitionGUID GUID
	StartingLBA         LBA
	EndingLBA           LBA
	Attributes          uint64
	PartitionName       string
}

func (e *PartitionEntry) String() string {
	return fmt.Sprintf("EFI_PARTITION_ENTRY{ PartitionTypeGUID: %s, UniquePartitionGUID: %s, StartingLBA: 0x%x, "+
		"EndingLBA: 0x%x, Attributes: 0x%016x, PartitionName: \"%s\" }",
		e.PartitionTypeGUID, e.UniquePartitionGUID, e.StartingLBA, e.EndingLBA, e.Attributes, e.PartitionName)
}

// Write serializes this PartitionEntry to w. Note that it doesn't write
// any bytes beyond the end of the EFI_PARTITION_ENTRY structure, so if the
// caller is writing several entries and the partition table header defines
// an entry size of greater than 128 bytes, the caller is responsible for
// inserting the 0 padding bytes.
func (e *PartitionEntry) Write(w io.Writer) error {
	entry := uefi.EFI_PARTITION_ENTRY{
		PartitionTypeGUID:   uefi.EFI_GUID(e.PartitionTypeGUID),
		UniquePartitionGUID: uefi.EFI_GUID(e.UniquePartitionGUID),
		StartingLBA:         uefi.EFI_LBA(e.StartingLBA),
		EndingLBA:           uefi.EFI_LBA(e.EndingLBA),
		Attributes:          e.Attributes}

	partitionName := ConvertUTF8ToUTF16(e.PartitionName)
	if len(partitionName) > len(entry.PartitionName) {
		return errors.New("PartitionName is too long")
	}
	copy(entry.PartitionName[:], partitionName)

	return binary.Write(w, binary.LittleEndian, &entry)
}

// ReadPartitionEntry reads a single EFI_PARTITION_ENTRY from r.
func ReadPartitionEntry(r io.Reader) (*PartitionEntry, error) {
	var e uefi.EFI_PARTITION_ENTRY
	if err := binary.Read(r, binary.LittleEndian, &e); err != nil {
		return nil, err
	}

	return &PartitionEntry{
		PartitionTypeGUID:   GUID(e.PartitionTypeGUID),
		UniquePartitionGUID: GUID(e.UniquePartitionGUID),
		StartingLBA:         LBA(e.StartingLBA),
		EndingLBA:           LBA(e.EndingLBA),
		Attributes:          e.Attributes,
		PartitionName:       ConvertUTF16ToUTF8(e.PartitionName[:])}, nil
}

func readPartitionEntries(r io.Reader, num, sz, expectedCrc uint32, checkCrc bool) (out []*PartitionEntry, err error) {
	crc := crc32.NewIEEE()
	r2 := io.TeeReader(r, crc)

	b := new(bytes.Buffer)
	for i := uint32(0); i < num; i++ {
		b.Reset()

		if _, err := io.CopyN(b, r2, int64(sz)); err != nil {
			switch {
			case err == io.EOF && i == 0:
				return nil, err
			case err == io.EOF:
				err = io.ErrUnexpectedEOF
			}
			return nil, xerrors.Errorf("cannot read entry %d: %w", i, err)
		}

		e, err := ReadPartitionEntry(b)
		if err != nil {
			return nil, err
		}

		out = append(out, e)
	}

	if checkCrc && crc.Sum32() != expectedCrc {
		return nil, ErrCRCCheck
	}

	return out, nil
}

// ReadPartitionEntries reads the specified number of EFI_PARTITION_ENTRY structures
// of the specified size from the supplied io.Reader. The number and size are typically
// defined by the partition table header.
func ReadPartitionEntries(r io.Reader, num, sz uint32) ([]*PartitionEntry, error) {
	return readPartitionEntries(r, num, sz, 0, false)
}

var emptyPartitionType GUID

// PartitionTableRole describes the role of a partition table.
type PartitionTableRole int

const (
	PrimaryPartitionTable PartitionTableRole = iota
	BackupPartitionTable
)

// PartitionTable describes a complete GUID partition table.
type PartitionTable struct {
	Hdr     *PartitionTableHeader
	Entries []*PartitionEntry
}

func (t *PartitionTable) String() string {
	b := new(bytes.Buffer)
	fmt.Fprintf(b, "GPT{\n\tHdr: %s,\n\tEntries: [", t.Hdr)
	for _, entry := range t.Entries {
		fmt.Fprintf(b, "\n\t\t%s", entry)
	}
	fmt.Fprintf(b, "\n\t]\n}")
	return b.String()
}

// ReadPartitionTable reads a complete GUID partition table from the supplied
// io.Reader. The total size and logical block size of the device must be
// supplied - the logical block size is 512 bytes for a file, but must be
// obtained from the kernel for a block device.
//
// This function expects the device to have a valid protective MBR.
//
// If role is PrimaryPartitionTable, this will read the primary partition
// table that is located immediately after the protective MBR. If role is
// BackupPartitionTable, this will read the backup partition table that is
// located at the end of the device.
//
// If checkCrc is true and either CRC check fails, an error will be returned.
// Setting checkCrc to false disables the CRC checks.
func ReadPartitionTable(r io.ReaderAt, totalSz, blockSz int64, role PartitionTableRole, checkCrc bool) (*PartitionTable, error) {
	r2 := io.NewSectionReader(r, 0, totalSz)

	record, err := mbr.ReadRecord(r2)
	if err != nil {
		return nil, err
	}

	validPmbr := false
	for _, p := range record.Partitions {
		if p.Type == 0xee {
			validPmbr = true
			break
		}
	}
	if !validPmbr {
		return nil, ErrNoProtectiveMBR
	}

	var offset int64
	var whence int
	switch role {
	case PrimaryPartitionTable:
		offset = blockSz
		whence = io.SeekStart
	case BackupPartitionTable:
		if _, err := r2.Seek(blockSz, io.SeekStart); err != nil {
			return nil, err
		}
		hdr, err := ReadPartitionTableHeader(r2, checkCrc)
		if err != nil {
			offset = -blockSz
			whence = io.SeekEnd
		} else {
			offset = int64(hdr.AlternateLBA) * blockSz
			whence = io.SeekStart
		}
	default:
		panic("invalid role")
	}

	if _, err := r2.Seek(offset, whence); err != nil {
		return nil, err
	}

	hdr, err := ReadPartitionTableHeader(r2, checkCrc)
	switch {
	case err == io.EOF:
		return nil, io.ErrUnexpectedEOF
	case err != nil:
		return nil, err
	}

	if _, err := r2.Seek(int64(hdr.PartitionEntryLBA)*blockSz, io.SeekStart); err != nil {
		return nil, err
	}

	entries, err := readPartitionEntries(r2, hdr.NumberOfPartitionEntries, hdr.SizeOfPartitionEntry, hdr.PartitionEntryArrayCRC32, checkCrc)
	switch {
	case err == io.EOF:
		return nil, io.ErrUnexpectedEOF
	case err != nil:
		return nil, err
	}

	return &PartitionTable{hdr, entries}, nil
}
 07070100000246000081A4000000000000000000000001645E367C0000091D000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/guid.go // Copyright 2020 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package efi

import (
	"encoding/binary"
	"encoding/hex"
	"errors"
	"fmt"
	"io"
	"regexp"

	"github.com/canonical/go-efilib/internal/uefi"
)

// GUID corresponds to the EFI_GUID type.
type GUID [16]byte

func (guid GUID) A() uint32 {
	return binary.LittleEndian.Uint32(guid[0:4])
}

func (guid GUID) B() uint16 {
	return binary.LittleEndian.Uint16(guid[4:6])
}

func (guid GUID) C() uint16 {
	return binary.LittleEndian.Uint16(guid[6:8])
}

func (guid GUID) D() uint16 {
	return binary.BigEndian.Uint16(guid[8:10])
}

func (guid GUID) E() [6]uint8 {
	var out [6]uint8
	copy(out[:], guid[10:16])
	return out
}

func (guid GUID) String() string {
	return fmt.Sprintf("%08x-%04x-%04x-%04x-%012x", guid.A(), guid.B(), guid.C(), guid.D(), guid.E())
}

// MakeGUID makes a new GUID from the supplied arguments.
func MakeGUID(a uint32, b, c, d uint16, e [6]uint8) GUID {
	return GUID(uefi.New_EFI_GUID(a, b, c, d, e))
}

// ReadGUID reads a EFI_GUID from the supplied io.Reader.
func ReadGUID(r io.Reader) (out GUID, err error) {
	_, err = io.ReadFull(r, out[:])
	return
}

var guidRe = regexp.MustCompile(`\{?([[:xdigit:]]{8})-([[:xdigit:]]{4})-([[:xdigit:]]{4})-([[:xdigit:]]{4})-([[:xdigit:]]{12})\}?`)

func decodeStringUint32(s string) (uint32, error) {
	h, err := hex.DecodeString(s)
	if err != nil {
		return 0, err
	}
	if len(h) > 4 {
		return 0, errors.New("invalid length")
	}
	return binary.BigEndian.Uint32(h), nil
}

func decodeStringUint16(s string) (uint16, error) {
	h, err := hex.DecodeString(s)
	if err != nil {
		return 0, err
	}
	if len(h) > 2 {
		return 0, errors.New("invalid length")
	}
	return binary.BigEndian.Uint16(h), nil
}

// DecodeGUIDString decodes the supplied GUID string. The string must have
// the format "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" and may be surrounded
// by curly braces.
func DecodeGUIDString(s string) (GUID, error) {
	m := guidRe.FindStringSubmatch(s)
	if m == nil {
		return GUID{}, errors.New("invalid format")
	}

	a, _ := decodeStringUint32(m[1])
	b, _ := decodeStringUint16(m[2])
	c, _ := decodeStringUint16(m[3])
	d, _ := decodeStringUint16(m[4])
	e, _ := hex.DecodeString(m[5])

	var e2 [6]uint8
	copy(e2[:], e)
	return MakeGUID(a, b, c, d, e2), nil
}
   07070100000247000081A4000000000000000000000001645E367C000005D3000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/ids.go  // Copyright 2020 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package efi

import (
	"github.com/canonical/go-efilib/internal/uefi"
)

var (
	HashAlgorithmSHA1Guid   = GUID(uefi.EFI_HASH_ALGORITHM_SHA1_GUID)
	HashAlgorithmSHA256Guid = GUID(uefi.EFI_HASH_ALGORITHM_SHA256_GUID)
	HashAlgorithmSHA224Guid = GUID(uefi.EFI_HASH_ALGORITHM_SHA224_GUID)
	HashAlgorithmSHA384Guid = GUID(uefi.EFI_HASH_ALGORITHM_SHA384_GUID)
	HashAlgorithmSHA512Guid = GUID(uefi.EFI_HASH_ALGORITHM_SHA512_GUID)

	CertTypeRSA2048SHA256Guid = GUID(uefi.EFI_CERT_TYPE_RSA2048_SHA256_GUID)
	CertTypePKCS7Guid         = GUID(uefi.EFI_CERT_TYPE_PKCS7_GUID)

	CertSHA1Guid   = GUID(uefi.EFI_CERT_SHA1_GUID)
	CertSHA256Guid = GUID(uefi.EFI_CERT_SHA256_GUID)
	CertSHA224Guid = GUID(uefi.EFI_CERT_SHA224_GUID)
	CertSHA384Guid = GUID(uefi.EFI_CERT_SHA384_GUID)
	CertSHA512Guid = GUID(uefi.EFI_CERT_SHA512_GUID)

	CertRSA2048Guid       = GUID(uefi.EFI_CERT_RSA2048_GUID)
	CertRSA2048SHA1Guid   = GUID(uefi.EFI_CERT_RSA2048_SHA1_GUID)
	CertRSA2048SHA256Guid = GUID(uefi.EFI_CERT_RSA2048_SHA256_GUID)

	CertX509Guid       = GUID(uefi.EFI_CERT_X509_GUID)
	CertX509SHA256Guid = GUID(uefi.EFI_CERT_X509_SHA256_GUID)
	CertX509SHA384Guid = GUID(uefi.EFI_CERT_X509_SHA384_GUID)
	CertX509SHA512Guid = GUID(uefi.EFI_CERT_X509_SHA512_GUID)

	GlobalVariable            = GUID(uefi.EFI_GLOBAL_VARIABLE)
	ImageSecurityDatabaseGuid = GUID(uefi.EFI_IMAGE_SECURITY_DATABASE_GUID)
)
 07070100000248000041ED000000000000000000000006645E367C00000000000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/internal    07070100000249000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/internal/ioerr  0707010000024A000081A4000000000000000000000001645E367C000009DC000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/internal/ioerr/ioerr.go // Copyright 2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package ioerr

import (
	"io"
	"unicode"
	"unicode/utf8"

	"golang.org/x/xerrors"
)

// Return the index of the first %w in format, or -1 if none.
// TODO: handle "%[N]w".
func parsePercentW(format string) int {
	// Loosely copied from golang.org/x/xerrors/fmt.go.
	n := 0
	sz := 0
	var isW bool
	for i := 0; i < len(format); i += sz {
		if format[i] != '%' {
			sz = 1
			continue
		}
		// "%%" is not a format directive.
		if i+1 < len(format) && format[i+1] == '%' {
			sz = 2
			continue
		}
		sz, isW = parsePrintfVerb(format[i:])
		if isW {
			return n
		}
		n++
	}
	return -1
}

// Parse the printf verb starting with a % at s[0].
// Return how many bytes it occupies and whether the verb is 'w'.
func parsePrintfVerb(s string) (int, bool) {
	// Assume only that the directive is a sequence of non-letters followed by a single letter.
	sz := 0
	var r rune
	for i := 1; i < len(s); i += sz {
		r, sz = utf8.DecodeRuneInString(s[i:])
		if unicode.IsLetter(r) {
			return i + sz, r == 'w'
		}
	}
	return len(s), false
}

// EOFIsUnexpected converts io.EOF errors into io.ErrUnexpected, which is
// useful when using binary.Read to decode aprts of a structure that aren't
// at the start and when a io.EOF error is not expected.
//
// It can be called in one of 2 ways - either with a single argument which
// must be an error, or with a format string and an arbitrary number of
// arguments. In this second mode, the function is a wrapper around
// xerrors.Errorf.
//
// This only works on raw io.EOF errors - ie, it won't work on errors that
// have been wrapped.
func EOFIsUnexpected(args ...interface{}) error {
	switch {
	case len(args) > 1:
		format := args[0].(string)
		idx := parsePercentW(format)
		if idx >= 0 {
			if err, isErr := args[idx+1].(error); isErr && err == io.EOF {
				args[idx+1] = io.ErrUnexpectedEOF
			}
		}
		return xerrors.Errorf(format, args[1:]...)
	case len(args) == 1:
		switch err := args[0].(type) {
		case error:
			if err == io.EOF {
				err = io.ErrUnexpectedEOF
			}
			return err
		case nil:
			return nil
		default:
			panic("invalid type")
		}
	default:
		panic("no arguments")
	}
}

// PassRawEOF is a wrapper around xerrors.Errorf that will return a raw
// io.EOF if this is the error.
func PassRawEOF(format string, args ...interface{}) error {
	err := xerrors.Errorf(format, args...)
	if xerrors.Is(err, io.EOF) {
		return io.EOF
	}
	return err
}
0707010000024B000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/internal/pe1.14 0707010000024C000081A4000000000000000000000001645E367C000001BA000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/internal/pe1.14/README  This is a copy of debug/pe from go 1.14.2 (96745b980cfde139e8611772e2bc0c59a8e6cdf7)
It exists here because debug/pe in go versions before 1.14 did not handle variable
length optional headers (where the data directory is less than 16 entries) and
therefore doesn't correctly decode kernel EFI images. Copying the code here avoids
a hard dependency on go 1.14.

See https://github.com/golang/go/commit/3b92f36d15c868e856be71c0fadfc7ff97039b96
  0707010000024D000081A4000000000000000000000001645E367C00004221000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/internal/pe1.14/file.go // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package pe implements access to PE (Microsoft Windows Portable Executable) files.
package pe

import (
	"bytes"
	"compress/zlib"
	"debug/dwarf"
	"encoding/binary"
	"fmt"
	"io"
	"os"
	"strings"
)

// Avoid use of post-Go 1.4 io features, to make safe for toolchain bootstrap.
const seekStart = 0

// A File represents an open PE file.
type File struct {
	FileHeader
	OptionalHeader interface{} // of type *OptionalHeader32 or *OptionalHeader64
	Sections       []*Section
	Symbols        []*Symbol    // COFF symbols with auxiliary symbol records removed
	COFFSymbols    []COFFSymbol // all COFF symbols (including auxiliary symbol records)
	StringTable    StringTable

	closer io.Closer
}

// Open opens the named file using os.Open and prepares it for use as a PE binary.
func Open(name string) (*File, error) {
	f, err := os.Open(name)
	if err != nil {
		return nil, err
	}
	ff, err := NewFile(f)
	if err != nil {
		f.Close()
		return nil, err
	}
	ff.closer = f
	return ff, nil
}

// Close closes the File.
// If the File was created using NewFile directly instead of Open,
// Close has no effect.
func (f *File) Close() error {
	var err error
	if f.closer != nil {
		err = f.closer.Close()
		f.closer = nil
	}
	return err
}

// TODO(brainman): add Load function, as a replacement for NewFile, that does not call removeAuxSymbols (for performance)

// NewFile creates a new File for accessing a PE binary in an underlying reader.
func NewFile(r io.ReaderAt) (*File, error) {
	f := new(File)
	sr := io.NewSectionReader(r, 0, 1<<63-1)

	var dosheader [96]byte
	if _, err := r.ReadAt(dosheader[0:], 0); err != nil {
		return nil, err
	}
	var base int64
	if dosheader[0] == 'M' && dosheader[1] == 'Z' {
		signoff := int64(binary.LittleEndian.Uint32(dosheader[0x3c:]))
		var sign [4]byte
		r.ReadAt(sign[:], signoff)
		if !(sign[0] == 'P' && sign[1] == 'E' && sign[2] == 0 && sign[3] == 0) {
			return nil, fmt.Errorf("Invalid PE COFF file signature of %v.", sign)
		}
		base = signoff + 4
	} else {
		base = int64(0)
	}
	sr.Seek(base, seekStart)
	if err := binary.Read(sr, binary.LittleEndian, &f.FileHeader); err != nil {
		return nil, err
	}
	switch f.FileHeader.Machine {
	case IMAGE_FILE_MACHINE_UNKNOWN, IMAGE_FILE_MACHINE_ARMNT, IMAGE_FILE_MACHINE_AMD64, IMAGE_FILE_MACHINE_I386:
	default:
		return nil, fmt.Errorf("Unrecognised COFF file header machine value of 0x%x.", f.FileHeader.Machine)
	}

	var err error

	// Read string table.
	f.StringTable, err = readStringTable(&f.FileHeader, sr)
	if err != nil {
		return nil, err
	}

	// Read symbol table.
	f.COFFSymbols, err = readCOFFSymbols(&f.FileHeader, sr)
	if err != nil {
		return nil, err
	}
	f.Symbols, err = removeAuxSymbols(f.COFFSymbols, f.StringTable)
	if err != nil {
		return nil, err
	}

	// Seek past file header.
	_, err = sr.Seek(base+int64(binary.Size(f.FileHeader)), seekStart)
	if err != nil {
		return nil, fmt.Errorf("failure to seek past the file header: %v", err)
	}

	// Read optional header.
	f.OptionalHeader, err = readOptionalHeader(sr, f.FileHeader.SizeOfOptionalHeader)
	if err != nil {
		return nil, err
	}

	// Process sections.
	f.Sections = make([]*Section, f.FileHeader.NumberOfSections)
	for i := 0; i < int(f.FileHeader.NumberOfSections); i++ {
		sh := new(SectionHeader32)
		if err := binary.Read(sr, binary.LittleEndian, sh); err != nil {
			return nil, err
		}
		name, err := sh.fullName(f.StringTable)
		if err != nil {
			return nil, err
		}
		s := new(Section)
		s.SectionHeader = SectionHeader{
			Name:                 name,
			VirtualSize:          sh.VirtualSize,
			VirtualAddress:       sh.VirtualAddress,
			Size:                 sh.SizeOfRawData,
			Offset:               sh.PointerToRawData,
			PointerToRelocations: sh.PointerToRelocations,
			PointerToLineNumbers: sh.PointerToLineNumbers,
			NumberOfRelocations:  sh.NumberOfRelocations,
			NumberOfLineNumbers:  sh.NumberOfLineNumbers,
			Characteristics:      sh.Characteristics,
		}
		r2 := r
		if sh.PointerToRawData == 0 { // .bss must have all 0s
			r2 = zeroReaderAt{}
		}
		s.sr = io.NewSectionReader(r2, int64(s.SectionHeader.Offset), int64(s.SectionHeader.Size))
		s.ReaderAt = s.sr
		f.Sections[i] = s
	}
	for i := range f.Sections {
		var err error
		f.Sections[i].Relocs, err = readRelocs(&f.Sections[i].SectionHeader, sr)
		if err != nil {
			return nil, err
		}
	}

	return f, nil
}

// zeroReaderAt is ReaderAt that reads 0s.
type zeroReaderAt struct{}

// ReadAt writes len(p) 0s into p.
func (w zeroReaderAt) ReadAt(p []byte, off int64) (n int, err error) {
	for i := range p {
		p[i] = 0
	}
	return len(p), nil
}

// getString extracts a string from symbol string table.
func getString(section []byte, start int) (string, bool) {
	if start < 0 || start >= len(section) {
		return "", false
	}

	for end := start; end < len(section); end++ {
		if section[end] == 0 {
			return string(section[start:end]), true
		}
	}
	return "", false
}

// Section returns the first section with the given name, or nil if no such
// section exists.
func (f *File) Section(name string) *Section {
	for _, s := range f.Sections {
		if s.Name == name {
			return s
		}
	}
	return nil
}

func (f *File) DWARF() (*dwarf.Data, error) {
	dwarfSuffix := func(s *Section) string {
		switch {
		case strings.HasPrefix(s.Name, ".debug_"):
			return s.Name[7:]
		case strings.HasPrefix(s.Name, ".zdebug_"):
			return s.Name[8:]
		default:
			return ""
		}

	}

	// sectionData gets the data for s and checks its size.
	sectionData := func(s *Section) ([]byte, error) {
		b, err := s.Data()
		if err != nil && uint32(len(b)) < s.Size {
			return nil, err
		}

		if 0 < s.VirtualSize && s.VirtualSize < s.Size {
			b = b[:s.VirtualSize]
		}

		if len(b) >= 12 && string(b[:4]) == "ZLIB" {
			dlen := binary.BigEndian.Uint64(b[4:12])
			dbuf := make([]byte, dlen)
			r, err := zlib.NewReader(bytes.NewBuffer(b[12:]))
			if err != nil {
				return nil, err
			}
			if _, err := io.ReadFull(r, dbuf); err != nil {
				return nil, err
			}
			if err := r.Close(); err != nil {
				return nil, err
			}
			b = dbuf
		}
		return b, nil
	}

	// There are many other DWARF sections, but these
	// are the ones the debug/dwarf package uses.
	// Don't bother loading others.
	var dat = map[string][]byte{"abbrev": nil, "info": nil, "str": nil, "line": nil, "ranges": nil}
	for _, s := range f.Sections {
		suffix := dwarfSuffix(s)
		if suffix == "" {
			continue
		}
		if _, ok := dat[suffix]; !ok {
			continue
		}

		b, err := sectionData(s)
		if err != nil {
			return nil, err
		}
		dat[suffix] = b
	}

	d, err := dwarf.New(dat["abbrev"], nil, nil, dat["info"], dat["line"], nil, dat["ranges"], dat["str"])
	if err != nil {
		return nil, err
	}

	// Look for DWARF4 .debug_types sections.
	for i, s := range f.Sections {
		suffix := dwarfSuffix(s)
		if suffix != "types" {
			continue
		}

		b, err := sectionData(s)
		if err != nil {
			return nil, err
		}

		err = d.AddTypes(fmt.Sprintf("types-%d", i), b)
		if err != nil {
			return nil, err
		}
	}

	return d, nil
}

// TODO(brainman): document ImportDirectory once we decide what to do with it.

type ImportDirectory struct {
	OriginalFirstThunk uint32
	TimeDateStamp      uint32
	ForwarderChain     uint32
	Name               uint32
	FirstThunk         uint32

	dll string
}

// ImportedSymbols returns the names of all symbols
// referred to by the binary f that are expected to be
// satisfied by other libraries at dynamic load time.
// It does not return weak symbols.
func (f *File) ImportedSymbols() ([]string, error) {
	if f.OptionalHeader == nil {
		return nil, nil
	}

	pe64 := f.Machine == IMAGE_FILE_MACHINE_AMD64

	// grab the number of data directory entries
	var dd_length uint32
	if pe64 {
		dd_length = f.OptionalHeader.(*OptionalHeader64).NumberOfRvaAndSizes
	} else {
		dd_length = f.OptionalHeader.(*OptionalHeader32).NumberOfRvaAndSizes
	}

	// check that the length of data directory entries is large
	// enough to include the imports directory.
	if dd_length < IMAGE_DIRECTORY_ENTRY_IMPORT+1 {
		return nil, nil
	}

	// grab the import data directory entry
	var idd DataDirectory
	if pe64 {
		idd = f.OptionalHeader.(*OptionalHeader64).DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT]
	} else {
		idd = f.OptionalHeader.(*OptionalHeader32).DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT]
	}

	// figure out which section contains the import directory table
	var ds *Section
	ds = nil
	for _, s := range f.Sections {
		if s.VirtualAddress <= idd.VirtualAddress && idd.VirtualAddress < s.VirtualAddress+s.VirtualSize {
			ds = s
			break
		}
	}

	// didn't find a section, so no import libraries were found
	if ds == nil {
		return nil, nil
	}

	d, err := ds.Data()
	if err != nil {
		return nil, err
	}

	// seek to the virtual address specified in the import data directory
	d = d[idd.VirtualAddress-ds.VirtualAddress:]

	// start decoding the import directory
	var ida []ImportDirectory
	for len(d) >= 20 {
		var dt ImportDirectory
		dt.OriginalFirstThunk = binary.LittleEndian.Uint32(d[0:4])
		dt.TimeDateStamp = binary.LittleEndian.Uint32(d[4:8])
		dt.ForwarderChain = binary.LittleEndian.Uint32(d[8:12])
		dt.Name = binary.LittleEndian.Uint32(d[12:16])
		dt.FirstThunk = binary.LittleEndian.Uint32(d[16:20])
		d = d[20:]
		if dt.OriginalFirstThunk == 0 {
			break
		}
		ida = append(ida, dt)
	}
	// TODO(brainman): this needs to be rewritten
	//  ds.Data() returns contents of section containing import table. Why store in variable called "names"?
	//  Why we are retrieving it second time? We already have it in "d", and it is not modified anywhere.
	//  getString does not extracts a string from symbol string table (as getString doco says).
	//  Why ds.Data() called again and again in the loop?
	//  Needs test before rewrite.
	names, _ := ds.Data()
	var all []string
	for _, dt := range ida {
		dt.dll, _ = getString(names, int(dt.Name-ds.VirtualAddress))
		d, _ = ds.Data()
		// seek to OriginalFirstThunk
		d = d[dt.OriginalFirstThunk-ds.VirtualAddress:]
		for len(d) > 0 {
			if pe64 { // 64bit
				va := binary.LittleEndian.Uint64(d[0:8])
				d = d[8:]
				if va == 0 {
					break
				}
				if va&0x8000000000000000 > 0 { // is Ordinal
					// TODO add dynimport ordinal support.
				} else {
					fn, _ := getString(names, int(uint32(va)-ds.VirtualAddress+2))
					all = append(all, fn+":"+dt.dll)
				}
			} else { // 32bit
				va := binary.LittleEndian.Uint32(d[0:4])
				d = d[4:]
				if va == 0 {
					break
				}
				if va&0x80000000 > 0 { // is Ordinal
					// TODO add dynimport ordinal support.
					//ord := va&0x0000FFFF
				} else {
					fn, _ := getString(names, int(va-ds.VirtualAddress+2))
					all = append(all, fn+":"+dt.dll)
				}
			}
		}
	}

	return all, nil
}

// ImportedLibraries returns the names of all libraries
// referred to by the binary f that are expected to be
// linked with the binary at dynamic link time.
func (f *File) ImportedLibraries() ([]string, error) {
	// TODO
	// cgo -dynimport don't use this for windows PE, so just return.
	return nil, nil
}

// FormatError is unused.
// The type is retained for compatibility.
type FormatError struct {
}

func (e *FormatError) Error() string {
	return "unknown error"
}

// readOptionalHeader accepts a io.ReadSeeker pointing to optional header in the PE file
// and its size as seen in the file header.
// It parses the given size of bytes and returns optional header. It infers whether the
// bytes being parsed refer to 32 bit or 64 bit version of optional header.
func readOptionalHeader(r io.ReadSeeker, sz uint16) (interface{}, error) {
	// If optional header size is 0, return empty optional header.
	if sz == 0 {
		return nil, nil
	}

	var (
		// First couple of bytes in option header state its type.
		// We need to read them first to determine the type and
		// validity of optional header.
		ohMagic   uint16
		ohMagicSz = binary.Size(ohMagic)
	)

	// If optional header size is greater than 0 but less than its magic size, return error.
	if sz < uint16(ohMagicSz) {
		return nil, fmt.Errorf("optional header size is less than optional header magic size")
	}

	// read reads from io.ReadSeeke, r, into data.
	var err error
	read := func(data interface{}) bool {
		err = binary.Read(r, binary.LittleEndian, data)
		return err == nil
	}

	if !read(&ohMagic) {
		return nil, fmt.Errorf("failure to read optional header magic: %v", err)

	}

	switch ohMagic {
	case 0x10b: // PE32
		var (
			oh32 OptionalHeader32
			// There can be 0 or more data directories. So the minimum size of optional
			// header is calculated by subtracting oh32.DataDirectory size from oh32 size.
			oh32MinSz = binary.Size(oh32) - binary.Size(oh32.DataDirectory)
		)

		if sz < uint16(oh32MinSz) {
			return nil, fmt.Errorf("optional header size(%d) is less minimum size (%d) of PE32 optional header", sz, oh32MinSz)
		}

		// Init oh32 fields
		oh32.Magic = ohMagic
		if !read(&oh32.MajorLinkerVersion) ||
			!read(&oh32.MinorLinkerVersion) ||
			!read(&oh32.SizeOfCode) ||
			!read(&oh32.SizeOfInitializedData) ||
			!read(&oh32.SizeOfUninitializedData) ||
			!read(&oh32.AddressOfEntryPoint) ||
			!read(&oh32.BaseOfCode) ||
			!read(&oh32.BaseOfData) ||
			!read(&oh32.ImageBase) ||
			!read(&oh32.SectionAlignment) ||
			!read(&oh32.FileAlignment) ||
			!read(&oh32.MajorOperatingSystemVersion) ||
			!read(&oh32.MinorOperatingSystemVersion) ||
			!read(&oh32.MajorImageVersion) ||
			!read(&oh32.MinorImageVersion) ||
			!read(&oh32.MajorSubsystemVersion) ||
			!read(&oh32.MinorSubsystemVersion) ||
			!read(&oh32.Win32VersionValue) ||
			!read(&oh32.SizeOfImage) ||
			!read(&oh32.SizeOfHeaders) ||
			!read(&oh32.CheckSum) ||
			!read(&oh32.Subsystem) ||
			!read(&oh32.DllCharacteristics) ||
			!read(&oh32.SizeOfStackReserve) ||
			!read(&oh32.SizeOfStackCommit) ||
			!read(&oh32.SizeOfHeapReserve) ||
			!read(&oh32.SizeOfHeapCommit) ||
			!read(&oh32.LoaderFlags) ||
			!read(&oh32.NumberOfRvaAndSizes) {
			return nil, fmt.Errorf("failure to read PE32 optional header: %v", err)
		}

		dd, err := readDataDirectories(r, sz-uint16(oh32MinSz), oh32.NumberOfRvaAndSizes)
		if err != nil {
			return nil, err
		}

		copy(oh32.DataDirectory[:], dd)

		return &oh32, nil
	case 0x20b: // PE32+
		var (
			oh64 OptionalHeader64
			// There can be 0 or more data directories. So the minimum size of optional
			// header is calculated by subtracting oh64.DataDirectory size from oh64 size.
			oh64MinSz = binary.Size(oh64) - binary.Size(oh64.DataDirectory)
		)

		if sz < uint16(oh64MinSz) {
			return nil, fmt.Errorf("optional header size(%d) is less minimum size (%d) for PE32+ optional header", sz, oh64MinSz)
		}

		// Init oh64 fields
		oh64.Magic = ohMagic
		if !read(&oh64.MajorLinkerVersion) ||
			!read(&oh64.MinorLinkerVersion) ||
			!read(&oh64.SizeOfCode) ||
			!read(&oh64.SizeOfInitializedData) ||
			!read(&oh64.SizeOfUninitializedData) ||
			!read(&oh64.AddressOfEntryPoint) ||
			!read(&oh64.BaseOfCode) ||
			!read(&oh64.ImageBase) ||
			!read(&oh64.SectionAlignment) ||
			!read(&oh64.FileAlignment) ||
			!read(&oh64.MajorOperatingSystemVersion) ||
			!read(&oh64.MinorOperatingSystemVersion) ||
			!read(&oh64.MajorImageVersion) ||
			!read(&oh64.MinorImageVersion) ||
			!read(&oh64.MajorSubsystemVersion) ||
			!read(&oh64.MinorSubsystemVersion) ||
			!read(&oh64.Win32VersionValue) ||
			!read(&oh64.SizeOfImage) ||
			!read(&oh64.SizeOfHeaders) ||
			!read(&oh64.CheckSum) ||
			!read(&oh64.Subsystem) ||
			!read(&oh64.DllCharacteristics) ||
			!read(&oh64.SizeOfStackReserve) ||
			!read(&oh64.SizeOfStackCommit) ||
			!read(&oh64.SizeOfHeapReserve) ||
			!read(&oh64.SizeOfHeapCommit) ||
			!read(&oh64.LoaderFlags) ||
			!read(&oh64.NumberOfRvaAndSizes) {
			return nil, fmt.Errorf("failure to read PE32+ optional header: %v", err)
		}

		dd, err := readDataDirectories(r, sz-uint16(oh64MinSz), oh64.NumberOfRvaAndSizes)
		if err != nil {
			return nil, err
		}

		copy(oh64.DataDirectory[:], dd)

		return &oh64, nil
	default:
		return nil, fmt.Errorf("optional header has unexpected Magic of 0x%x", ohMagic)
	}
}

// readDataDirectories accepts a io.ReadSeeker pointing to data directories in the PE file,
// its size and number of data directories as seen in optional header.
// It parses the given size of bytes and returns given number of data directories.
func readDataDirectories(r io.ReadSeeker, sz uint16, n uint32) ([]DataDirectory, error) {
	ddSz := binary.Size(DataDirectory{})
	if uint32(sz) != n*uint32(ddSz) {
		return nil, fmt.Errorf("size of data directories(%d) is inconsistent with number of data directories(%d)", sz, n)
	}

	dd := make([]DataDirectory, n)
	if err := binary.Read(r, binary.LittleEndian, dd); err != nil {
		return nil, fmt.Errorf("failure to read data directories: %v", err)
	}

	return dd, nil
}
   0707010000024E000081A4000000000000000000000001645E367C000010C2000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/internal/pe1.14/pe.go   // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package pe

type FileHeader struct {
	Machine              uint16
	NumberOfSections     uint16
	TimeDateStamp        uint32
	PointerToSymbolTable uint32
	NumberOfSymbols      uint32
	SizeOfOptionalHeader uint16
	Characteristics      uint16
}

type DataDirectory struct {
	VirtualAddress uint32
	Size           uint32
}

type OptionalHeader32 struct {
	Magic                       uint16
	MajorLinkerVersion          uint8
	MinorLinkerVersion          uint8
	SizeOfCode                  uint32
	SizeOfInitializedData       uint32
	SizeOfUninitializedData     uint32
	AddressOfEntryPoint         uint32
	BaseOfCode                  uint32
	BaseOfData                  uint32
	ImageBase                   uint32
	SectionAlignment            uint32
	FileAlignment               uint32
	MajorOperatingSystemVersion uint16
	MinorOperatingSystemVersion uint16
	MajorImageVersion           uint16
	MinorImageVersion           uint16
	MajorSubsystemVersion       uint16
	MinorSubsystemVersion       uint16
	Win32VersionValue           uint32
	SizeOfImage                 uint32
	SizeOfHeaders               uint32
	CheckSum                    uint32
	Subsystem                   uint16
	DllCharacteristics          uint16
	SizeOfStackReserve          uint32
	SizeOfStackCommit           uint32
	SizeOfHeapReserve           uint32
	SizeOfHeapCommit            uint32
	LoaderFlags                 uint32
	NumberOfRvaAndSizes         uint32
	DataDirectory               [16]DataDirectory
}

type OptionalHeader64 struct {
	Magic                       uint16
	MajorLinkerVersion          uint8
	MinorLinkerVersion          uint8
	SizeOfCode                  uint32
	SizeOfInitializedData       uint32
	SizeOfUninitializedData     uint32
	AddressOfEntryPoint         uint32
	BaseOfCode                  uint32
	ImageBase                   uint64
	SectionAlignment            uint32
	FileAlignment               uint32
	MajorOperatingSystemVersion uint16
	MinorOperatingSystemVersion uint16
	MajorImageVersion           uint16
	MinorImageVersion           uint16
	MajorSubsystemVersion       uint16
	MinorSubsystemVersion       uint16
	Win32VersionValue           uint32
	SizeOfImage                 uint32
	SizeOfHeaders               uint32
	CheckSum                    uint32
	Subsystem                   uint16
	DllCharacteristics          uint16
	SizeOfStackReserve          uint64
	SizeOfStackCommit           uint64
	SizeOfHeapReserve           uint64
	SizeOfHeapCommit            uint64
	LoaderFlags                 uint32
	NumberOfRvaAndSizes         uint32
	DataDirectory               [16]DataDirectory
}

const (
	IMAGE_FILE_MACHINE_UNKNOWN   = 0x0
	IMAGE_FILE_MACHINE_AM33      = 0x1d3
	IMAGE_FILE_MACHINE_AMD64     = 0x8664
	IMAGE_FILE_MACHINE_ARM       = 0x1c0
	IMAGE_FILE_MACHINE_ARMNT     = 0x1c4
	IMAGE_FILE_MACHINE_ARM64     = 0xaa64
	IMAGE_FILE_MACHINE_EBC       = 0xebc
	IMAGE_FILE_MACHINE_I386      = 0x14c
	IMAGE_FILE_MACHINE_IA64      = 0x200
	IMAGE_FILE_MACHINE_M32R      = 0x9041
	IMAGE_FILE_MACHINE_MIPS16    = 0x266
	IMAGE_FILE_MACHINE_MIPSFPU   = 0x366
	IMAGE_FILE_MACHINE_MIPSFPU16 = 0x466
	IMAGE_FILE_MACHINE_POWERPC   = 0x1f0
	IMAGE_FILE_MACHINE_POWERPCFP = 0x1f1
	IMAGE_FILE_MACHINE_R4000     = 0x166
	IMAGE_FILE_MACHINE_SH3       = 0x1a2
	IMAGE_FILE_MACHINE_SH3DSP    = 0x1a3
	IMAGE_FILE_MACHINE_SH4       = 0x1a6
	IMAGE_FILE_MACHINE_SH5       = 0x1a8
	IMAGE_FILE_MACHINE_THUMB     = 0x1c2
	IMAGE_FILE_MACHINE_WCEMIPSV2 = 0x169
)

// IMAGE_DIRECTORY_ENTRY constants
const (
	IMAGE_DIRECTORY_ENTRY_EXPORT         = 0
	IMAGE_DIRECTORY_ENTRY_IMPORT         = 1
	IMAGE_DIRECTORY_ENTRY_RESOURCE       = 2
	IMAGE_DIRECTORY_ENTRY_EXCEPTION      = 3
	IMAGE_DIRECTORY_ENTRY_SECURITY       = 4
	IMAGE_DIRECTORY_ENTRY_BASERELOC      = 5
	IMAGE_DIRECTORY_ENTRY_DEBUG          = 6
	IMAGE_DIRECTORY_ENTRY_ARCHITECTURE   = 7
	IMAGE_DIRECTORY_ENTRY_GLOBALPTR      = 8
	IMAGE_DIRECTORY_ENTRY_TLS            = 9
	IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG    = 10
	IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT   = 11
	IMAGE_DIRECTORY_ENTRY_IAT            = 12
	IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT   = 13
	IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR = 14
)
  0707010000024F000081A4000000000000000000000001645E367C00000B84000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/internal/pe1.14/section.go  // Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package pe

import (
	"encoding/binary"
	"fmt"
	"io"
	"strconv"
)

// SectionHeader32 represents real PE COFF section header.
type SectionHeader32 struct {
	Name                 [8]uint8
	VirtualSize          uint32
	VirtualAddress       uint32
	SizeOfRawData        uint32
	PointerToRawData     uint32
	PointerToRelocations uint32
	PointerToLineNumbers uint32
	NumberOfRelocations  uint16
	NumberOfLineNumbers  uint16
	Characteristics      uint32
}

// fullName finds real name of section sh. Normally name is stored
// in sh.Name, but if it is longer then 8 characters, it is stored
// in COFF string table st instead.
func (sh *SectionHeader32) fullName(st StringTable) (string, error) {
	if sh.Name[0] != '/' {
		return cstring(sh.Name[:]), nil
	}
	i, err := strconv.Atoi(cstring(sh.Name[1:]))
	if err != nil {
		return "", err
	}
	return st.String(uint32(i))
}

// TODO(brainman): copy all IMAGE_REL_* consts from ldpe.go here

// Reloc represents a PE COFF relocation.
// Each section contains its own relocation list.
type Reloc struct {
	VirtualAddress   uint32
	SymbolTableIndex uint32
	Type             uint16
}

func readRelocs(sh *SectionHeader, r io.ReadSeeker) ([]Reloc, error) {
	if sh.NumberOfRelocations <= 0 {
		return nil, nil
	}
	_, err := r.Seek(int64(sh.PointerToRelocations), seekStart)
	if err != nil {
		return nil, fmt.Errorf("fail to seek to %q section relocations: %v", sh.Name, err)
	}
	relocs := make([]Reloc, sh.NumberOfRelocations)
	err = binary.Read(r, binary.LittleEndian, relocs)
	if err != nil {
		return nil, fmt.Errorf("fail to read section relocations: %v", err)
	}
	return relocs, nil
}

// SectionHeader is similar to SectionHeader32 with Name
// field replaced by Go string.
type SectionHeader struct {
	Name                 string
	VirtualSize          uint32
	VirtualAddress       uint32
	Size                 uint32
	Offset               uint32
	PointerToRelocations uint32
	PointerToLineNumbers uint32
	NumberOfRelocations  uint16
	NumberOfLineNumbers  uint16
	Characteristics      uint32
}

// Section provides access to PE COFF section.
type Section struct {
	SectionHeader
	Relocs []Reloc

	// Embed ReaderAt for ReadAt method.
	// Do not embed SectionReader directly
	// to avoid having Read and Seek.
	// If a client wants Read and Seek it must use
	// Open() to avoid fighting over the seek offset
	// with other clients.
	io.ReaderAt
	sr *io.SectionReader
}

// Data reads and returns the contents of the PE section s.
func (s *Section) Data() ([]byte, error) {
	dat := make([]byte, s.sr.Size())
	n, err := s.sr.ReadAt(dat, 0)
	if n == len(dat) {
		err = nil
	}
	return dat[0:n], err
}

// Open returns a new ReadSeeker reading the PE section s.
func (s *Section) Open() io.ReadSeeker {
	return io.NewSectionReader(s.sr, 0, 1<<63-1)
}
07070100000250000081A4000000000000000000000001645E367C0000071B000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/internal/pe1.14/string.go   // Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package pe

import (
	"bytes"
	"encoding/binary"
	"fmt"
	"io"
)

// cstring converts ASCII byte sequence b to string.
// It stops once it finds 0 or reaches end of b.
func cstring(b []byte) string {
	i := bytes.IndexByte(b, 0)
	if i == -1 {
		i = len(b)
	}
	return string(b[:i])
}

// StringTable is a COFF string table.
type StringTable []byte

func readStringTable(fh *FileHeader, r io.ReadSeeker) (StringTable, error) {
	// COFF string table is located right after COFF symbol table.
	if fh.PointerToSymbolTable <= 0 {
		return nil, nil
	}
	offset := fh.PointerToSymbolTable + COFFSymbolSize*fh.NumberOfSymbols
	_, err := r.Seek(int64(offset), seekStart)
	if err != nil {
		return nil, fmt.Errorf("fail to seek to string table: %v", err)
	}
	var l uint32
	err = binary.Read(r, binary.LittleEndian, &l)
	if err != nil {
		return nil, fmt.Errorf("fail to read string table length: %v", err)
	}
	// string table length includes itself
	if l <= 4 {
		return nil, nil
	}
	l -= 4
	buf := make([]byte, l)
	_, err = io.ReadFull(r, buf)
	if err != nil {
		return nil, fmt.Errorf("fail to read string table: %v", err)
	}
	return StringTable(buf), nil
}

// TODO(brainman): decide if start parameter should be int instead of uint32

// String extracts string from COFF string table st at offset start.
func (st StringTable) String(start uint32) (string, error) {
	// start includes 4 bytes of string table length
	if start < 4 {
		return "", fmt.Errorf("offset %d is before the start of string table", start)
	}
	start -= 4
	if int(start) > len(st) {
		return "", fmt.Errorf("offset %d is beyond the end of string table", start)
	}
	return cstring(st[start:]), nil
}
 07070100000251000081A4000000000000000000000001645E367C000009AE000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/internal/pe1.14/symbol.go   // Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package pe

import (
	"encoding/binary"
	"fmt"
	"io"
)

const COFFSymbolSize = 18

// COFFSymbol represents single COFF symbol table record.
type COFFSymbol struct {
	Name               [8]uint8
	Value              uint32
	SectionNumber      int16
	Type               uint16
	StorageClass       uint8
	NumberOfAuxSymbols uint8
}

func readCOFFSymbols(fh *FileHeader, r io.ReadSeeker) ([]COFFSymbol, error) {
	if fh.PointerToSymbolTable == 0 {
		return nil, nil
	}
	if fh.NumberOfSymbols <= 0 {
		return nil, nil
	}
	_, err := r.Seek(int64(fh.PointerToSymbolTable), seekStart)
	if err != nil {
		return nil, fmt.Errorf("fail to seek to symbol table: %v", err)
	}
	syms := make([]COFFSymbol, fh.NumberOfSymbols)
	err = binary.Read(r, binary.LittleEndian, syms)
	if err != nil {
		return nil, fmt.Errorf("fail to read symbol table: %v", err)
	}
	return syms, nil
}

// isSymNameOffset checks symbol name if it is encoded as offset into string table.
func isSymNameOffset(name [8]byte) (bool, uint32) {
	if name[0] == 0 && name[1] == 0 && name[2] == 0 && name[3] == 0 {
		return true, binary.LittleEndian.Uint32(name[4:])
	}
	return false, 0
}

// FullName finds real name of symbol sym. Normally name is stored
// in sym.Name, but if it is longer then 8 characters, it is stored
// in COFF string table st instead.
func (sym *COFFSymbol) FullName(st StringTable) (string, error) {
	if ok, offset := isSymNameOffset(sym.Name); ok {
		return st.String(offset)
	}
	return cstring(sym.Name[:]), nil
}

func removeAuxSymbols(allsyms []COFFSymbol, st StringTable) ([]*Symbol, error) {
	if len(allsyms) == 0 {
		return nil, nil
	}
	syms := make([]*Symbol, 0)
	aux := uint8(0)
	for _, sym := range allsyms {
		if aux > 0 {
			aux--
			continue
		}
		name, err := sym.FullName(st)
		if err != nil {
			return nil, err
		}
		aux = sym.NumberOfAuxSymbols
		s := &Symbol{
			Name:          name,
			Value:         sym.Value,
			SectionNumber: sym.SectionNumber,
			Type:          sym.Type,
			StorageClass:  sym.StorageClass,
		}
		syms = append(syms, s)
	}
	return syms, nil
}

// Symbol is similar to COFFSymbol with Name field replaced
// by Go string. Symbol also does not have NumberOfAuxSymbols.
type Symbol struct {
	Name          string
	Value         uint32
	SectionNumber int16
	Type          uint16
	StorageClass  uint8
}
  07070100000252000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/internal/uefi   07070100000253000081A4000000000000000000000001645E367C00000A5D000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/internal/uefi/authvars.go   // Copyright 2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package uefi

import (
	"encoding/binary"
	"io"

	"github.com/canonical/go-efilib/internal/ioerr"
)

const (
	EFI_VARIABLE_AUTHENTICATION_3_CERT_ID_SHA256 = 1

	EFI_VARIABLE_AUTHENTICATION_3_TIMESTAMP_TYPE = 1
	EFI_VARIABLE_AUTHENTICATION_3_NONCE_TYPE     = 2
)

type EFI_VARIABLE_AUTHENTICATION struct {
	MonotonicCount uint64
	AuthInfo       WIN_CERTIFICATE_UEFI_GUID
}

func Read_EFI_VARIABLE_AUTHENTICATION(r io.Reader) (out *EFI_VARIABLE_AUTHENTICATION, err error) {
	out = &EFI_VARIABLE_AUTHENTICATION{}
	if err := binary.Read(r, binary.LittleEndian, &out.MonotonicCount); err != nil {
		return nil, err
	}
	cert, err := Read_WIN_CERTIFICATE_UEFI_GUID(r)
	if err != nil {
		return nil, ioerr.EOFIsUnexpected(err)
	}
	out.AuthInfo = *cert
	return out, nil
}

type EFI_VARIABLE_AUTHENTICATION_2 struct {
	TimeStamp EFI_TIME
	AuthInfo  WIN_CERTIFICATE_UEFI_GUID
}

func Read_EFI_VARIABLE_AUTHENTICATION_2(r io.Reader) (out *EFI_VARIABLE_AUTHENTICATION_2, err error) {
	out = &EFI_VARIABLE_AUTHENTICATION_2{}
	if err := binary.Read(r, binary.LittleEndian, &out.TimeStamp); err != nil {
		return nil, err
	}
	cert, err := Read_WIN_CERTIFICATE_UEFI_GUID(r)
	if err != nil {
		return nil, ioerr.EOFIsUnexpected(err)
	}
	out.AuthInfo = *cert
	return out, nil
}

type EFI_VARIABLE_AUTHENTICATION_3 struct {
	Version      uint8
	Type         uint8
	MetadataSize uint32
	Flags        uint32
}

type EFI_VARIABLE_AUTHENTICATION_3_CERT_ID struct {
	Type   uint8
	IdSize uint32
	Id     []byte
}

func Read_EFI_VARIABLE_AUTHENTICATION_3_CERT_ID(r io.Reader) (out *EFI_VARIABLE_AUTHENTICATION_3_CERT_ID, err error) {
	out = &EFI_VARIABLE_AUTHENTICATION_3_CERT_ID{}
	if err := binary.Read(r, binary.LittleEndian, &out.Type); err != nil {
		return nil, err
	}
	if err := binary.Read(r, binary.LittleEndian, &out.IdSize); err != nil {
		return nil, ioerr.EOFIsUnexpected(err)
	}

	out.Id = make([]byte, out.IdSize)
	if _, err := io.ReadFull(r, out.Id); err != nil {
		return nil, ioerr.EOFIsUnexpected(err)
	}

	return out, nil
}

type EFI_VARIABLE_AUTHENTICATION_3_NONCE struct {
	NonceSize uint32
	Nonce     []byte
}

func Read_EFI_VARIABLE_AUTHENTICATION_3_NONCE(r io.Reader) (out *EFI_VARIABLE_AUTHENTICATION_3_NONCE, err error) {
	out = &EFI_VARIABLE_AUTHENTICATION_3_NONCE{}
	if err := binary.Read(r, binary.LittleEndian, &out.NonceSize); err != nil {
		return nil, err
	}

	out.Nonce = make([]byte, out.NonceSize)
	if _, err := io.ReadFull(r, out.Nonce); err != nil {
		return nil, ioerr.EOFIsUnexpected(err)
	}

	return out, nil
}
   07070100000254000081A4000000000000000000000001645E367C00000271000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/internal/uefi/base.go   // Copyright 2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package uefi

import (
	"encoding/binary"
)

type EFI_GUID [16]byte

func New_EFI_GUID(a uint32, b, c, d uint16, e [6]uint8) (out EFI_GUID) {
	binary.LittleEndian.PutUint32(out[0:4], a)
	binary.LittleEndian.PutUint16(out[4:6], b)
	binary.LittleEndian.PutUint16(out[6:8], c)
	binary.BigEndian.PutUint16(out[8:10], d)
	copy(out[10:], e[:])
	return
}

type EFI_LBA uint64

type EFI_TABLE_HEADER struct {
	Signature  uint64
	Revision   uint32
	HeaderSize uint32
	CRC        uint32
	Reserved   uint32
}
   07070100000255000081A4000000000000000000000001645E367C00000CF9000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/internal/uefi/db.go // Copyright 2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package uefi

import (
	"encoding/binary"
	"errors"
	"io"
	"math"

	"github.com/canonical/go-efilib/internal/ioerr"
)

const ESLHeaderSize = 28

type EFI_SIGNATURE_DATA struct {
	SignatureOwner EFI_GUID
	SignatureData  []byte
}

func (d *EFI_SIGNATURE_DATA) Write(w io.Writer) error {
	if _, err := w.Write(d.SignatureOwner[:]); err != nil {
		return err
	}
	if _, err := w.Write(d.SignatureData); err != nil {
		return err
	}
	return nil
}

type EFI_SIGNATURE_LIST struct {
	SignatureType       EFI_GUID
	SignatureListSize   uint32
	SignatureHeaderSize uint32
	SignatureSize       uint32

	SignatureHeader []byte
	Signatures      []EFI_SIGNATURE_DATA
}

func (l *EFI_SIGNATURE_LIST) Write(w io.Writer) error {
	if _, err := w.Write(l.SignatureType[:]); err != nil {
		return err
	}
	if err := binary.Write(w, binary.LittleEndian, l.SignatureListSize); err != nil {
		return err
	}
	if err := binary.Write(w, binary.LittleEndian, l.SignatureHeaderSize); err != nil {
		return err
	}
	if err := binary.Write(w, binary.LittleEndian, l.SignatureSize); err != nil {
		return err
	}

	if _, err := w.Write(l.SignatureHeader); err != nil {
		return err
	}

	for _, s := range l.Signatures {
		if err := s.Write(w); err != nil {
			return err
		}
	}

	return nil
}

func Read_EFI_SIGNATURE_LIST(r io.Reader) (out *EFI_SIGNATURE_LIST, err error) {
	out = &EFI_SIGNATURE_LIST{}
	if err := binary.Read(r, binary.LittleEndian, &out.SignatureType); err != nil {
		return nil, err
	}
	if err := binary.Read(r, binary.LittleEndian, &out.SignatureListSize); err != nil {
		return nil, ioerr.EOFIsUnexpected(err)
	}
	if err := binary.Read(r, binary.LittleEndian, &out.SignatureHeaderSize); err != nil {
		return nil, ioerr.EOFIsUnexpected(err)
	}
	if err := binary.Read(r, binary.LittleEndian, &out.SignatureSize); err != nil {
		return nil, ioerr.EOFIsUnexpected(err)
	}

	if out.SignatureHeaderSize > math.MaxUint32-ESLHeaderSize {
		return nil, errors.New("signature header size too large")
	}
	if out.SignatureHeaderSize+ESLHeaderSize > out.SignatureListSize {
		return nil, errors.New("inconsistent size fields: total signatures payload size underflows")
	}
	signaturesSize := out.SignatureListSize - out.SignatureHeaderSize - ESLHeaderSize

	if out.SignatureSize < uint32(binary.Size(EFI_GUID{})) {
		return nil, errors.New("invalid SignatureSize")
	}
	if signaturesSize%out.SignatureSize != 0 {
		return nil, errors.New("inconsistent size fields: total signatures payload size not a multiple of the individual signature size")
	}
	numOfSignatures := int(signaturesSize / out.SignatureSize)

	out.SignatureHeader = make([]byte, out.SignatureHeaderSize)
	if _, err := io.ReadFull(r, out.SignatureHeader); err != nil {
		return nil, ioerr.EOFIsUnexpected(err)
	}

	for i := 0; i < numOfSignatures; i++ {
		var s EFI_SIGNATURE_DATA
		if _, err := io.ReadFull(r, s.SignatureOwner[:]); err != nil {
			return nil, ioerr.EOFIsUnexpected(err)
		}

		s.SignatureData = make([]byte, int(out.SignatureSize)-binary.Size(s.SignatureOwner))
		if _, err := io.ReadFull(r, s.SignatureData); err != nil {
			return nil, ioerr.EOFIsUnexpected(err)
		}

		out.Signatures = append(out.Signatures, s)
	}

	return out, nil
}
   07070100000256000081A4000000000000000000000001645E367C000016C3000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/internal/uefi/devicepath.go // Copyright 2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package uefi

import (
	"encoding/binary"
	"io"

	"github.com/canonical/go-efilib/internal/ioerr"
)

const (
	NO_DISK_SIGNATURE   = 0x00
	SIGNATURE_TYPE_MBR  = 0x01
	SIGNATURE_TYPE_GUID = 0x02

	HARDWARE_DEVICE_PATH  = 0x01
	ACPI_DEVICE_PATH      = 0x02
	MESSAGING_DEVICE_PATH = 0x03
	MEDIA_DEVICE_PATH     = 0x04
	BBS_DEVICE_PATH       = 0x05
	END_DEVICE_PATH_TYPE  = 0x7f

	HW_PCI_DP    = 0x01
	HW_VENDOR_DP = 0x04

	ACPI_DP          = 0x01
	ACPI_EXTENDED_DP = 0x02

	MSG_ATAPI_DP               = 0x01
	MSG_SCSI_DP                = 0x02
	MSG_USB_DP                 = 0x05
	MSG_USB_CLASS_DP           = 0x0f
	MSG_VENDOR_DP              = 0x0a
	MSG_USB_WWID_DP            = 0x10
	MSG_DEVICE_LOGICAL_UNIT_DP = 0x11
	MSG_SATA_DP                = 0x12
	MSG_NVME_NAMESPACE_DP      = 0x17

	MEDIA_HARDDRIVE_DP             = 0x01
	MEDIA_CDROM_DP                 = 0x02
	MEDIA_VENDOR_DP                = 0x03
	MEDIA_FILEPATH_DP              = 0x04
	MEDIA_PIWG_FW_FILE_DP          = 0x06
	MEDIA_PIWG_FW_VOL_DP           = 0x07
	MEDIA_RELATIVE_OFFSET_RANGE_DP = 0x08

	END_ENTIRE_DEVICE_PATH_SUBTYPE = 0xff
)

type EFI_DEVICE_PATH_PROTOCOL struct {
	Type    uint8
	SubType uint8
	Length  uint16
}

type PCI_DEVICE_PATH struct {
	Header   EFI_DEVICE_PATH_PROTOCOL
	Function uint8
	Device   uint8
}

type VENDOR_DEVICE_PATH struct {
	Header EFI_DEVICE_PATH_PROTOCOL
	Guid   EFI_GUID
}

type ACPI_HID_DEVICE_PATH struct {
	Header EFI_DEVICE_PATH_PROTOCOL
	HID    uint32
	UID    uint32
}

type ACPI_EXTENDED_HID_DEVICE_PATH struct {
	Header EFI_DEVICE_PATH_PROTOCOL
	HID    uint32
	UID    uint32
	CID    uint32
}

type ATAPI_DEVICE_PATH struct {
	Header           EFI_DEVICE_PATH_PROTOCOL
	PrimarySecondary uint8
	SlaveMaster      uint8
	Lun              uint16
}

type SCSI_DEVICE_PATH struct {
	Header EFI_DEVICE_PATH_PROTOCOL
	Pun    uint16
	Lun    uint16
}

type USB_DEVICE_PATH struct {
	Header           EFI_DEVICE_PATH_PROTOCOL
	ParentPortNumber uint8
	InterfaceNumber  uint8
}

type USB_CLASS_DEVICE_PATH struct {
	Header         EFI_DEVICE_PATH_PROTOCOL
	VendorId       uint16
	ProductId      uint16
	DeviceClass    uint8
	DeviceSubClass uint8
	DeviceProtocol uint8
}

type USB_WWID_DEVICE_PATH struct {
	Header          EFI_DEVICE_PATH_PROTOCOL
	InterfaceNumber uint16
	VendorId        uint16
	ProductId       uint16
	SerialNumber    []uint16
}

func (p *USB_WWID_DEVICE_PATH) Write(w io.Writer) error {
	if err := binary.Write(w, binary.LittleEndian, &p.Header); err != nil {
		return err
	}
	if err := binary.Write(w, binary.LittleEndian, p.InterfaceNumber); err != nil {
		return err
	}
	if err := binary.Write(w, binary.LittleEndian, p.VendorId); err != nil {
		return err
	}
	if err := binary.Write(w, binary.LittleEndian, p.ProductId); err != nil {
		return err
	}
	if err := binary.Write(w, binary.LittleEndian, p.SerialNumber); err != nil {
		return err
	}
	return nil
}

func Read_USB_WWID_DEVICE_PATH(r io.Reader) (out *USB_WWID_DEVICE_PATH, err error) {
	out = &USB_WWID_DEVICE_PATH{}
	if err := binary.Read(r, binary.LittleEndian, &out.Header); err != nil {
		return nil, err
	}
	if err := binary.Read(r, binary.LittleEndian, &out.InterfaceNumber); err != nil {
		return nil, ioerr.EOFIsUnexpected(err)
	}
	if err := binary.Read(r, binary.LittleEndian, &out.VendorId); err != nil {
		return nil, ioerr.EOFIsUnexpected(err)
	}
	if err := binary.Read(r, binary.LittleEndian, &out.ProductId); err != nil {
		return nil, ioerr.EOFIsUnexpected(err)
	}

	out.SerialNumber = make([]uint16, (int(out.Header.Length)-binary.Size(out.Header)-binary.Size(out.InterfaceNumber)-binary.Size(out.VendorId)-binary.Size(out.ProductId))/2)
	if err := binary.Read(r, binary.LittleEndian, out.SerialNumber); err != nil {
		return nil, ioerr.EOFIsUnexpected(err)
	}

	return out, nil
}

type DEVICE_LOGICAL_UNIT_DEVICE_PATH struct {
	Header EFI_DEVICE_PATH_PROTOCOL
	Lun    uint8
}

type SATA_DEVICE_PATH struct {
	Header                   EFI_DEVICE_PATH_PROTOCOL
	HBAPortNumber            uint16
	PortMultiplierPortNumber uint16
	Lun                      uint16
}

type NVME_NAMESPACE_DEVICE_PATH struct {
	Header        EFI_DEVICE_PATH_PROTOCOL
	NamespaceId   uint32
	NamespaceUuid uint64
}

type HARDDRIVE_DEVICE_PATH struct {
	Header          EFI_DEVICE_PATH_PROTOCOL
	PartitionNumber uint32
	PartitionStart  uint64
	PartitionSize   uint64
	Signature       [16]uint8
	MBRType         uint8
	SignatureType   uint8
}

type CDROM_DEVICE_PATH struct {
	Header         EFI_DEVICE_PATH_PROTOCOL
	BootEntry      uint32
	PartitionStart uint64
	PartitionSize  uint64
}

type FILEPATH_DEVICE_PATH struct {
	Header   EFI_DEVICE_PATH_PROTOCOL
	PathName []uint16
}

func (p *FILEPATH_DEVICE_PATH) Write(w io.Writer) error {
	if err := binary.Write(w, binary.LittleEndian, &p.Header); err != nil {
		return err
	}
	if err := binary.Write(w, binary.LittleEndian, p.PathName); err != nil {
		return err
	}
	return nil
}

func Read_FILEPATH_DEVICE_PATH(r io.Reader) (out *FILEPATH_DEVICE_PATH, err error) {
	out = &FILEPATH_DEVICE_PATH{}
	if err := binary.Read(r, binary.LittleEndian, &out.Header); err != nil {
		return nil, err
	}

	out.PathName = make([]uint16, (int(out.Header.Length)-binary.Size(out.Header))/2)
	if err := binary.Read(r, binary.LittleEndian, &out.PathName); err != nil {
		return nil, ioerr.EOFIsUnexpected(err)
	}

	return out, nil
}

type MEDIA_FW_VOL_FILEPATH_DEVICE_PATH struct {
	Header     EFI_DEVICE_PATH_PROTOCOL
	FvFileName EFI_GUID
}

type MEDIA_FW_VOL_DEVICE_PATH struct {
	Header EFI_DEVICE_PATH_PROTOCOL
	FvName EFI_GUID
}

type MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH struct {
	Header         EFI_DEVICE_PATH_PROTOCOL
	Reserved       uint32
	StartingOffset uint64
	EndingOffset   uint64
}
 07070100000257000081A4000000000000000000000001645E367C000006D9000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/internal/uefi/gpt.go    // Copyright 2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package uefi

import (
	"bytes"
	"encoding/binary"
	"errors"
	"hash/crc32"
	"io"

	"github.com/canonical/go-efilib/internal/ioerr"
)

const EFI_PTAB_HEADER_ID uint64 = 0x5452415020494645

type EFI_PARTITION_ENTRY struct {
	PartitionTypeGUID   EFI_GUID
	UniquePartitionGUID EFI_GUID
	StartingLBA         EFI_LBA
	EndingLBA           EFI_LBA
	Attributes          uint64
	PartitionName       [36]uint16
}

type EFI_PARTITION_TABLE_HEADER struct {
	Hdr                      EFI_TABLE_HEADER
	MyLBA                    EFI_LBA
	AlternateLBA             EFI_LBA
	FirstUsableLBA           EFI_LBA
	LastUsableLBA            EFI_LBA
	DiskGUID                 EFI_GUID
	PartitionEntryLBA        EFI_LBA
	NumberOfPartitionEntries uint32
	SizeOfPartitionEntry     uint32
	PartitionEntryArrayCRC32 uint32
}

func Read_EFI_PARTITION_TABLE_HEADER(r io.Reader) (out *EFI_PARTITION_TABLE_HEADER, crc uint32, err error) {
	var hdr EFI_TABLE_HEADER
	if err := binary.Read(r, binary.LittleEndian, &hdr); err != nil {
		return nil, 0, err
	}
	if hdr.HeaderSize < uint32(binary.Size(hdr)) {
		return nil, 0, errors.New("invalid header size")
	}

	origCrc := hdr.CRC
	hdr.CRC = 0

	b := new(bytes.Buffer)
	if err := binary.Write(b, binary.LittleEndian, &hdr); err != nil {
		return nil, 0, err
	}

	if _, err := io.CopyN(b, r, int64(hdr.HeaderSize-uint32(binary.Size(hdr)))); err != nil {
		return nil, 0, ioerr.EOFIsUnexpected(err)
	}

	crc = crc32.ChecksumIEEE(b.Bytes())

	out = &EFI_PARTITION_TABLE_HEADER{}
	if err := binary.Read(b, binary.LittleEndian, out); err != nil {
		return nil, 0, err
	}
	out.Hdr.CRC = origCrc

	return out, crc, nil
}
   07070100000258000081A4000000000000000000000001645E367C00000B16000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/internal/uefi/ids.go    // Copyright 2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package uefi

var (
	EFI_HASH_ALGORITHM_SHA1_GUID   = New_EFI_GUID(0x2ae9d80f, 0x3fb2, 0x4095, 0xb7b1, [...]uint8{0xe9, 0x31, 0x57, 0xb9, 0x46, 0xb6})
	EFI_HASH_ALGORITHM_SHA256_GUID = New_EFI_GUID(0x51aa59de, 0xfdf2, 0x4ea3, 0xbc63, [...]uint8{0x87, 0x5f, 0xb7, 0x84, 0x2e, 0xe9})
	EFI_HASH_ALGORITHM_SHA224_GUID = New_EFI_GUID(0x8df01a06, 0x9bd5, 0x4bf7, 0xb021, [...]uint8{0xdb, 0x4f, 0xd9, 0xcc, 0xf4, 0x5b})
	EFI_HASH_ALGORITHM_SHA384_GUID = New_EFI_GUID(0xefa96432, 0xde33, 0x4dd2, 0xaee6, [...]uint8{0x32, 0x8c, 0x33, 0xdf, 0x77, 0x7a})
	EFI_HASH_ALGORITHM_SHA512_GUID = New_EFI_GUID(0xcaa4381e, 0x750c, 0x4770, 0xb870, [...]uint8{0x7a, 0x23, 0xb4, 0xe4, 0x21, 0x30})

	EFI_CERT_TYPE_RSA2048_SHA256_GUID = New_EFI_GUID(0xa7717414, 0xc616, 0x4977, 0x9420, [...]uint8{0x84, 0x47, 0x12, 0xa7, 0x35, 0xbf})
	EFI_CERT_TYPE_PKCS7_GUID          = New_EFI_GUID(0x4aafd29d, 0x68df, 0x49ee, 0x8aa9, [...]uint8{0x34, 0x7d, 0x37, 0x56, 0x65, 0xa7})

	EFI_CERT_SHA1_GUID   = New_EFI_GUID(0x826ca512, 0xcf10, 0x4ac9, 0xb187, [...]uint8{0xbe, 0x01, 0x49, 0x66, 0x31, 0xbd})
	EFI_CERT_SHA256_GUID = New_EFI_GUID(0xc1c41626, 0x504c, 0x4092, 0xaca9, [...]uint8{0x41, 0xf9, 0x36, 0x93, 0x43, 0x28})
	EFI_CERT_SHA224_GUID = New_EFI_GUID(0xb6e5233, 0xa65c, 0x44c9, 0x9407, [...]uint8{0xd9, 0xab, 0x83, 0xbf, 0xc8, 0xbd})
	EFI_CERT_SHA384_GUID = New_EFI_GUID(0xff3e5307, 0x9fd0, 0x48c9, 0x85f1, [...]uint8{0x8a, 0xd5, 0x6c, 0x70, 0x1e, 0x01})
	EFI_CERT_SHA512_GUID = New_EFI_GUID(0x093e0fae, 0xa6c4, 0x4f50, 0x9f1b, [...]uint8{0xd4, 0x1e, 0x2b, 0x89, 0xc1, 0x9a})

	EFI_CERT_RSA2048_GUID        = New_EFI_GUID(0x3c5766e8, 0x269c, 0x4e34, 0xaa14, [...]uint8{0xed, 0x77, 0x6e, 0x85, 0xb3, 0xb6})
	EFI_CERT_RSA2048_SHA1_GUID   = New_EFI_GUID(0x67f8444f, 0x8743, 0x48f1, 0xa328, [...]uint8{0x1e, 0xaa, 0xb8, 0x73, 0x60, 0x80})
	EFI_CERT_RSA2048_SHA256_GUID = New_EFI_GUID(0xe2b36190, 0x879b, 0x4a3d, 0xad8d, [...]uint8{0xf2, 0xe7, 0xbb, 0xa3, 0x27, 0x84})

	EFI_CERT_X509_GUID        = New_EFI_GUID(0xa5c059a1, 0x94e4, 0x4aa7, 0x87b5, [...]uint8{0xab, 0x15, 0x5c, 0x2b, 0xf0, 0x72})
	EFI_CERT_X509_SHA256_GUID = New_EFI_GUID(0x3bd2a492, 0x96c0, 0x4079, 0xb420, [...]uint8{0xfc, 0xf9, 0x8e, 0xf1, 0x03, 0xed})
	EFI_CERT_X509_SHA384_GUID = New_EFI_GUID(0x7076876e, 0x80c2, 0x4ee6, 0xaad2, [...]uint8{0x28, 0xb3, 0x49, 0xa6, 0x86, 0x5b})
	EFI_CERT_X509_SHA512_GUID = New_EFI_GUID(0x446dbf63, 0x2502, 0x4cda, 0xbcfa, [...]uint8{0x24, 0x65, 0xd2, 0xb0, 0xfe, 0x9d})

	EFI_GLOBAL_VARIABLE              = New_EFI_GUID(0x8be4df61, 0x93ca, 0x11d2, 0xaa0d, [...]uint8{0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c})
	EFI_IMAGE_SECURITY_DATABASE_GUID = New_EFI_GUID(0xd719b2cb, 0x3d3a, 0x4596, 0xa3bc, [...]uint8{0xda, 0xd0, 0x0e, 0x67, 0x65, 0x6f})
)
  07070100000259000081A4000000000000000000000001645E367C000007DD000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/internal/uefi/loadoption.go // Copyright 2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package uefi

import (
	"encoding/binary"
	"io"
	"io/ioutil"

	"github.com/canonical/go-efilib/internal/ioerr"
)

const (
	LOAD_OPTION_ACTIVE          = 0x00000001
	LOAD_OPTION_FORCE_RECONNECT = 0x00000002
	LOAD_OPTION_HIDDEN          = 0x00000008
	LOAD_OPTION_CATEGORY        = 0x00001f00
	LOAD_OPTION_CATEGORY_BOOT   = 0x00000000
	LOAD_OPTION_CATEGORY_APP    = 0x00000100
)

type EFI_LOAD_OPTION struct {
	Attributes         uint32
	FilePathListLength uint16
	Description        []uint16
	FilePathList       []byte
	OptionalData       []byte
}

func (o *EFI_LOAD_OPTION) Write(w io.Writer) error {
	if err := binary.Write(w, binary.LittleEndian, o.Attributes); err != nil {
		return err
	}
	if err := binary.Write(w, binary.LittleEndian, o.FilePathListLength); err != nil {
		return err
	}
	if err := binary.Write(w, binary.LittleEndian, o.Description); err != nil {
		return err
	}
	if _, err := w.Write(o.FilePathList); err != nil {
		return err
	}
	if _, err := w.Write(o.OptionalData); err != nil {
		return err
	}
	return nil
}

func Read_EFI_LOAD_OPTION(r io.Reader) (out *EFI_LOAD_OPTION, err error) {
	out = &EFI_LOAD_OPTION{}
	if err := binary.Read(r, binary.LittleEndian, &out.Attributes); err != nil {
		return nil, err
	}
	if err := binary.Read(r, binary.LittleEndian, &out.FilePathListLength); err != nil {
		return nil, ioerr.EOFIsUnexpected(err)
	}
	for i := 0; ; i++ {
		var c uint16
		if err := binary.Read(r, binary.LittleEndian, &c); err != nil {
			return nil, ioerr.EOFIsUnexpected(err)
		}
		out.Description = append(out.Description, c)
		if c == 0 {
			break
		}
	}

	out.FilePathList = make([]byte, out.FilePathListLength)
	if _, err := io.ReadFull(r, out.FilePathList); err != nil {
		return nil, ioerr.EOFIsUnexpected(err)
	}

	optionalData, err := ioutil.ReadAll(r)
	if err != nil {
		return nil, err
	}
	out.OptionalData = optionalData

	return out, nil
}
   0707010000025A000081A4000000000000000000000001645E367C000003B4000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/internal/uefi/time.go   // Copyright 2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package uefi

import (
	"time"
)

type EFI_TIME struct {
	Year       uint16
	Month      uint8
	Day        uint8
	Hour       uint8
	Minute     uint8
	Second     uint8
	Pad1       uint8
	Nanosecond uint32
	Timezone   int16
	Daylight   uint8
	Pad2       uint8
}

func (t *EFI_TIME) GoTime() time.Time {
	return time.Date(int(t.Year), time.Month(t.Month), int(t.Day), int(t.Hour), int(t.Minute), int(t.Second), int(t.Nanosecond), time.FixedZone("", -int(t.Timezone)*60))
}

func New_EFI_TIME(t time.Time) *EFI_TIME {
	_, offset := t.Zone()
	return &EFI_TIME{
		Year:       uint16(t.Year()),
		Month:      uint8(t.Month()),
		Day:        uint8(t.Day()),
		Hour:       uint8(t.Hour()),
		Minute:     uint8(t.Minute()),
		Second:     uint8(t.Second()),
		Nanosecond: uint32(t.Nanosecond()),
		Timezone:   -int16(offset / 60)}
}
0707010000025B000081A4000000000000000000000001645E367C0000027F000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/internal/uefi/vars.go   // Copyright 2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package uefi

const (
	EFI_VARIABLE_NON_VOLATILE                          = 1 << 0
	EFI_VARIABLE_BOOTSERVICE_ACCESS                    = 1 << 1
	EFI_VARIABLE_RUNTIME_ACCESS                        = 1 << 2
	EFI_VARIABLE_HARDWARE_ERROR_RECORD                 = 1 << 3
	EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS            = 1 << 4
	EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS = 1 << 5
	EFI_VARIABLE_APPEND_WRITE                          = 1 << 6
	EFI_VARIABLE_ENHANCED_AUTHENTICATED_ACCESS         = 1 << 7
)
 0707010000025C000081A4000000000000000000000001645E367C00000607000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/internal/uefi/wincert.go    // Copyright 2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package uefi

import (
	"encoding/binary"
	"errors"
	"io"

	"github.com/canonical/go-efilib/internal/ioerr"
)

const (
	WIN_CERT_TYPE_PKCS_SIGNED_DATA = 0x0002
	WIN_CERT_TYPE_EFI_PKCS115      = 0x0ef0
	WIN_CERT_TYPE_EFI_GUID         = 0x0ef1
)

type WIN_CERTIFICATE struct {
	Length          uint32
	Revision        uint16
	CertificateType uint16
}

type WIN_CERTIFICATE_EFI_PKCS1_15 struct {
	Hdr           WIN_CERTIFICATE
	HashAlgorithm EFI_GUID
	Signature     []byte
}

type WIN_CERTIFICATE_UEFI_GUID struct {
	Hdr      WIN_CERTIFICATE
	CertType EFI_GUID
	CertData []byte
}

func Read_WIN_CERTIFICATE_UEFI_GUID(r io.Reader) (out *WIN_CERTIFICATE_UEFI_GUID, err error) {
	out = &WIN_CERTIFICATE_UEFI_GUID{}
	if err := binary.Read(r, binary.LittleEndian, &out.Hdr); err != nil {
		return nil, err
	}
	if out.Hdr.Revision != 0x0200 {
		return nil, errors.New("unexpected Hdr.Revision")
	}
	if out.Hdr.CertificateType != WIN_CERT_TYPE_EFI_GUID {
		return nil, errors.New("unexpected Hdr.CertificateType")
	}

	if _, err := io.ReadFull(r, out.CertType[:]); err != nil {
		return nil, ioerr.EOFIsUnexpected(err)
	}

	out.CertData = make([]byte, int(out.Hdr.Length)-binary.Size(out.Hdr)-binary.Size(out.CertType))
	if _, err := io.ReadFull(r, out.CertData); err != nil {
		return nil, ioerr.EOFIsUnexpected(err)
	}

	return out, nil
}

type WIN_CERTIFICATE_EFI_PKCS struct {
	Hdr      WIN_CERTIFICATE
	CertData []byte
}
 0707010000025D000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/internal/unix   0707010000025E000081A4000000000000000000000001645E367C00000362000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/internal/unix/ioctl.go  // Copyright 2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package unix

import (
	"syscall"
	"unsafe"
)

func IoctlGetUint(fd int, req uint) (uint, error) {
	var value uint
	_, _, err := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(unsafe.Pointer(&value)))
	if err != 0 {
		return 0, err
	}
	return value, nil
}

func IoctlGetUint64(fd int, req uint) (uint64, error) {
	var value uint64
	_, _, err := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(unsafe.Pointer(&value)))
	if err != 0 {
		return 0, err
	}
	return value, nil
}

func IoctlSetPointerUint(fd int, req, value uint) error {
	v := value
	_, _, err := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(unsafe.Pointer(&v)))
	if err != 0 {
		return err
	}
	return nil
}
  0707010000025F000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/linux   07070100000260000081A4000000000000000000000001645E367C00000820000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/linux/disk.go   // Copyright 2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package linux

import (
	"errors"
	"math"
	"os"
	"syscall"

	"golang.org/x/sys/unix"
	"golang.org/x/xerrors"

	"github.com/canonical/go-efilib"
	internal_unix "github.com/canonical/go-efilib/internal/unix"
)

func getSectorSize(f *os.File) (int64, error) {
	fi, err := f.Stat()
	if err != nil {
		return 0, err
	}

	if fi.Mode().IsRegular() {
		return 512, nil
	}

	if fi.Mode()&os.ModeDevice == 0 {
		return 0, errors.New("not a regular file or device")
	}

	sz, err := unix.IoctlGetInt(int(f.Fd()), unix.BLKSSZGET)
	if err != nil {
		return 0, err
	}
	return int64(sz), nil
}

func getDeviceSize(f *os.File) (int64, error) {
	fi, err := f.Stat()
	if err != nil {
		return 0, err
	}

	if fi.Mode().IsRegular() {
		return fi.Size(), nil
	}

	if fi.Mode()&os.ModeDevice == 0 {
		return 0, errors.New("not a regular file or device")
	}

	sz, err := internal_unix.IoctlGetUint64(int(f.Fd()), unix.BLKGETSIZE64)
	switch {
	case err == syscall.ENOTTY:
		n, err := internal_unix.IoctlGetUint(int(f.Fd()), unix.BLKGETSIZE)
		if err != nil {
			return 0, err
		}
		if int64(n) > int64(math.MaxInt64>>9) {
			return 0, errors.New("overflow")
		}
		return int64(n << 9), nil
	case err != nil:
		return 0, err
	case sz > math.MaxInt64:
		return 0, errors.New("overflow")
	default:
		return int64(sz), nil
	}
}

// NewHardDriveDevicePathNodeFromDevice constructs a HardDriveDevicePathNode for the
// specified partition on the device or file at the supplied path.
func NewHardDriveDevicePathNodeFromDevice(dev string, part int) (*efi.HardDriveDevicePathNode, error) {
	f, err := osOpen(dev)
	if err != nil {
		return nil, err
	}
	defer f.Close()

	sz, err := getDeviceSize(f)
	if err != nil {
		return nil, xerrors.Errorf("cannot determine device size: %w", err)
	}

	ssz, err := getSectorSize(f)
	if err != nil {
		return nil, xerrors.Errorf("cannot determine logical sector size: %w", err)
	}

	return efi.NewHardDriveDevicePathNodeFromDevice(f, sz, ssz, part)
}
07070100000261000081A4000000000000000000000001645E367C00000B46000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/linux/dp_acpi.go    // Copyright 2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package linux

import (
	"encoding/binary"
	"encoding/hex"
	"errors"
	"fmt"
	"io/ioutil"
	"os"
	"path/filepath"
	"regexp"
	"strconv"
	"strings"

	"github.com/canonical/go-efilib"
)

// acpiIdRE matches a ACPI or PNP ID, capturing the vendor and product.
var acpiIdRE = regexp.MustCompile(`^([[:upper:][:digit:]]{3,4})([[:xdigit:]]{4})$`)

// acpiModaliasRE matches a modalias for an ACPI node, capturing the CID.
var acpiModaliasRE = regexp.MustCompile(`^acpi:[[:alnum:]]+:([[:alnum:]]*)`)

func maybeUseSimpleACPIDevicePathNode(node *efi.ACPIExtendedDevicePathNode) efi.DevicePathNode {
	if node.HIDStr != "" || node.UIDStr != "" || node.CIDStr != "" {
		return node
	}
	if node.CID != 0 && node.CID != node.HID {
		return node
	}
	return &efi.ACPIDevicePathNode{HID: node.HID, UID: node.UID}
}

func decodeACPIOrPNPId(str string) (efi.EISAID, string) {
	m := acpiIdRE.FindStringSubmatch(str)
	if len(m) == 0 {
		return 0, str
	}

	vendor := m[1]
	p, _ := hex.DecodeString(m[2])
	product := binary.BigEndian.Uint16(p)

	if len(vendor) != 3 {
		return 0, fmt.Sprintf("%s%04x", vendor, product)
	}

	id, _ := efi.NewEISAID(vendor, product)
	return id, ""
}

func newACPIExtendedDevicePathNode(path string) (*efi.ACPIExtendedDevicePathNode, error) {
	node := new(efi.ACPIExtendedDevicePathNode)

	hidBytes, err := ioutil.ReadFile(filepath.Join(path, "hid"))
	if err != nil {
		return nil, err
	}

	hid, hidStr := decodeACPIOrPNPId(strings.TrimSpace(string(hidBytes)))
	node.HID = hid
	node.HIDStr = hidStr

	modalias, err := ioutil.ReadFile(filepath.Join(path, "modalias"))
	switch {
	case os.IsNotExist(err):
	case err != nil:
		return nil, err
	default:
		m := acpiModaliasRE.FindSubmatch(modalias)
		if len(m) == 0 {
			return nil, errors.New("invalid modalias")
		}
		if len(m[1]) > 0 {
			cid, cidStr := decodeACPIOrPNPId(string(m[1]))
			node.CID = cid
			node.CIDStr = cidStr
		}
	}

	uidBytes, err := ioutil.ReadFile(filepath.Join(path, "uid"))
	switch {
	case os.IsNotExist(err):
	case err != nil:
		return nil, err
	default:
		uidStr := strings.TrimSpace(string(uidBytes))
		uid, err := strconv.ParseUint(uidStr, 10, 32)
		if err != nil {
			node.UIDStr = uidStr
		} else {
			node.UID = uint32(uid)
		}
	}

	return node, nil
}

func handleACPIDevicePathNode(builder devicePathBuilder) error {
	component := builder.next(1)

	subsystem, err := filepath.EvalSymlinks(filepath.Join(builder.absPath(component), "subsystem"))
	switch {
	case os.IsNotExist(err):
		return errSkipDevicePathNodeHandler
	case err != nil:
		return err
	}

	if subsystem != filepath.Join(sysfsPath, "bus", "acpi") {
		return errSkipDevicePathNodeHandler
	}

	builder.advance(1)
	return nil
}

func init() {
	registerDevicePathNodeHandler("acpi", handleACPIDevicePathNode, 0)
}
  07070100000262000081A4000000000000000000000001645E367C00000670000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/linux/dp_ata.go // Copyright 2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package linux

import (
	"errors"
	"fmt"
	"io/ioutil"
	"os"
	"path/filepath"
	"regexp"
	"strconv"
	"strings"

	"golang.org/x/xerrors"
)

// ataRE matches an ATA path component, capturing the ATA print ID.
var ataRE = regexp.MustCompile(`^ata([[:digit:]]+)$`)

type ataParams struct {
	printId uint32
	port    uint32
	*scsiParams
}

func handleATAPath(path string) (*ataParams, error) {
	components := strings.Split(path, string(os.PathSeparator))
	if len(components) < 6 {
		return nil, errors.New("invalid path: insufficient components")
	}

	ata := components[len(components)-6]
	m := ataRE.FindStringSubmatch(ata)
	if len(m) == 0 {
		return nil, fmt.Errorf("invalid path component: %s", ata)
	}

	scsiParams, err := handleSCSIPath(path)
	if err != nil {
		return nil, err
	}

	printId, err := strconv.ParseUint(m[1], 10, 32)
	if err != nil {
		return nil, xerrors.Errorf("invalid print ID: %w", err)
	}

	// Obtain the ATA port number local to this ATA controller. The kernel
	// creates one ata%d device per port (see drivers/ata/libata-core.c:ata_host_register).
	portBytes, err := ioutil.ReadFile(filepath.Join(path, "../../../../..", "ata_port", ata, "port_no"))
	if err != nil {
		return nil, xerrors.Errorf("cannot obtain port ID: %w", err)
	}
	port, err := strconv.ParseUint(strings.TrimSpace(string(portBytes)), 10, 16)
	if err != nil {
		return nil, xerrors.Errorf("invalid port ID: %w", err)
	}

	return &ataParams{
		printId:    uint32(printId),
		port:       uint32(port),
		scsiParams: scsiParams}, nil
}
07070100000263000081A4000000000000000000000001645E367C00000568000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/linux/dp_hv.go  // Copyright 2022 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package linux

import (
	"io/ioutil"
	"path/filepath"

	"github.com/canonical/go-efilib"
)

var (
	hvVendorGuid = efi.MakeGUID(0x9b17e5a2, 0x0891, 0x42dd, 0xb653, [...]uint8{0x80, 0xb5, 0xc2, 0x28, 0x09, 0xba})

	hvSCSIGuid = efi.MakeGUID(0xba6163d9, 0x04a1, 0x4d29, 0xb605, [...]uint8{0x72, 0xe2, 0xff, 0xb1, 0xdc, 0x7f})
)

func handleHVDevicePathNode(builder devicePathBuilder) error {
	component := builder.next(1)

	deviceId, err := efi.DecodeGUIDString(component)
	if err != nil {
		return err
	}

	classIdStr, err := ioutil.ReadFile(filepath.Join(builder.absPath(component), "class_id"))
	if err != nil {
		return err
	}

	builder.advance(1)

	classId, err := efi.DecodeGUIDString(string(classIdStr))
	if err != nil {
		return err
	}

	switch classId {
	case hvSCSIGuid:
		builder.setInterfaceType(interfaceTypeSCSI)
	default:
		return errUnsupportedDevice("unhandled device class: " + classId.String())
	}

	data := make([]byte, len(deviceId)+len(classId))
	copy(data, classId[:])
	copy(data[len(classId):], deviceId[:])

	builder.append(&efi.VendorDevicePathNode{
		Type: efi.HardwareDevicePath,
		GUID: hvVendorGuid,
		Data: data})
	return nil
}

func init() {
	registerDevicePathNodeHandler("hv", handleHVDevicePathNode, 0, interfaceTypeVMBus)
}
07070100000264000081A4000000000000000000000001645E367C00000567000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/linux/dp_ide.go // Copyright 2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package linux

import (
	"errors"
	"fmt"
	"math"

	"github.com/canonical/go-efilib"
)

func handleIDEDevicePathNode(builder devicePathBuilder) error {
	if builder.numRemaining() < 6 {
		return errors.New("invalid path: insufficient components")
	}

	params, err := handleATAPath(builder.absPath(builder.next(6)))
	if err != nil {
		return err
	}

	builder.advance(6)

	// PATA has a maximum of 2 ports.
	if params.port < 1 || params.port > 2 {
		return fmt.Errorf("invalid port: %d", params.port)
	}

	// Each PATA device is represented in the SCSI layer by setting the
	// target to the drive number, and the LUN as the LUN (see
	// drivers/ata/libata-scsi.c:ata_scsi_scan_host).

	// The channel is always 0 for PATA devices (no port multiplier).
	if params.channel != 0 {
		return errors.New("invalid SCSI channel")
	}
	if params.target > 1 {
		return errors.New("invalid drive")
	}
	if params.lun > math.MaxUint16 {
		return errors.New("invalid LUN")
	}

	builder.append(&efi.ATAPIDevicePathNode{
		Controller: efi.ATAPIControllerRole(params.port - 1),
		Drive:      efi.ATAPIDriveRole(params.target),
		LUN:        uint16(params.lun)})
	return nil
}

func init() {
	registerDevicePathNodeHandler("ide", handleIDEDevicePathNode, 0, interfaceTypeIDE)
}
 07070100000265000081A4000000000000000000000001645E367C0000073C000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/linux/dp_nvme.go    // Copyright 2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package linux

import (
	"encoding/binary"
	"errors"
	"fmt"
	"io/ioutil"
	"os"
	"path/filepath"
	"regexp"
	"strconv"

	"golang.org/x/xerrors"

	"github.com/canonical/go-efilib"
)

// nvmeNSRe matches "nvme/nvme<ctrl_id>/nvme<ctrl_id>n<ns_id>", capturing ns_id
var nvmeNSRe = regexp.MustCompile(`^nvme\/nvme[[:digit:]]+\/nvme[[:digit:]]+n([[:digit:]]+)$`)

func handleNVMEDevicePathNode(builder devicePathBuilder) error {
	if builder.numRemaining() < 3 {
		return errors.New("invalid path: not enough components")
	}

	components := builder.next(3)
	m := nvmeNSRe.FindStringSubmatch(components)
	if len(m) == 0 {
		return errors.New("invalid path")
	}

	builder.advance(3)

	nsid, err := strconv.ParseUint(m[1], 10, 32)
	if err != nil {
		return xerrors.Errorf("cannot parse nsid: %w", err)
	}

	var euid [8]uint8

	euidBuf, err := ioutil.ReadFile(filepath.Join(builder.absPath(components), "eui"))
	if os.IsNotExist(err) {
		euidBuf, err = ioutil.ReadFile(filepath.Join(builder.absPath(components), "device", "eui"))
	}
	switch {
	case os.IsNotExist(err):
		// Nothing to do
	case err != nil:
		return xerrors.Errorf("cannot determine euid: %w", err)
	default:
		n, err := fmt.Sscanf(string(euidBuf), "%02x %02x %02x %02x %02x %02x %02x %02x",
			&euid[0], &euid[1], &euid[2], &euid[3], &euid[4], &euid[5], &euid[6], &euid[7])
		if err != nil {
			return xerrors.Errorf("cannot parse euid: %w", err)
		}
		if n != 8 {
			return errors.New("invalid euid")
		}
	}

	builder.append(&efi.NVMENamespaceDevicePathNode{
		NamespaceID:   uint32(nsid),
		NamespaceUUID: uint64(binary.LittleEndian.Uint64(euid[:]))})
	return nil
}

func init() {
	registerDevicePathNodeHandler("nvme", handleNVMEDevicePathNode, 0, interfaceTypeNVME)
}
07070100000266000081A4000000000000000000000001645E367C00000816000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/linux/dp_pci.go // Copyright 2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package linux

import (
	"bytes"
	"errors"
	"fmt"
	"io/ioutil"
	"path/filepath"
	"regexp"
	"strconv"

	"golang.org/x/xerrors"

	"github.com/canonical/go-efilib"
)

var classRE = regexp.MustCompile(`^0x([[:xdigit:]]+)$`)

// pciRE matches "nnnn:bb:dd:f" where "nnnn" is the domain, "bb" is the bus number,
// "dd" is the device number and "f" is the function. It captures the device and
// function.
var pciRE = regexp.MustCompile(`^[[:xdigit:]]{4}:[[:xdigit:]]{2}:([[:xdigit:]]{2})\.([[:digit:]]{1})$`)

func handlePCIDevicePathNode(builder devicePathBuilder) error {
	component := builder.next(1)

	m := pciRE.FindStringSubmatch(component)
	if len(m) == 0 {
		return fmt.Errorf("invalid component: %s", component)
	}

	devNum, _ := strconv.ParseUint(m[1], 16, 8)
	fun, _ := strconv.ParseUint(m[2], 10, 8)

	classBytes, err := ioutil.ReadFile(filepath.Join(builder.absPath(component), "class"))
	if err != nil {
		return xerrors.Errorf("cannot read device class: %w", err)
	}

	var class []byte
	if n, err := fmt.Sscanf(string(classBytes), "0x%x", &class); err != nil || n != 1 {
		return errors.New("cannot decode device class")
	}

	builder.advance(1)

	switch {
	case bytes.HasPrefix(class, []byte{0x01, 0x00}):
		builder.setInterfaceType(interfaceTypeSCSI)
	case bytes.HasPrefix(class, []byte{0x01, 0x01}):
		builder.setInterfaceType(interfaceTypeIDE)
	case bytes.HasPrefix(class, []byte{0x01, 0x06}):
		builder.setInterfaceType(interfaceTypeSATA)
	case bytes.HasPrefix(class, []byte{0x01, 0x08}):
		builder.setInterfaceType(interfaceTypeNVME)
	case bytes.HasPrefix(class, []byte{0x06, 0x04}):
		builder.setInterfaceType(interfaceTypePCI)
	default:
		return errUnsupportedDevice("unhandled device class: " + string(classBytes))
	}

	builder.append(&efi.PCIDevicePathNode{
		Function: uint8(fun),
		Device:   uint8(devNum)})
	return nil
}

func init() {
	registerDevicePathNodeHandler("pci", handlePCIDevicePathNode, 0, interfaceTypePCI)
}
  07070100000267000081A4000000000000000000000001645E367C000004C9000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/linux/dp_pci_root.go    // Copyright 2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package linux

import (
	"fmt"
	"path/filepath"
	"regexp"
)

// pcirootRE matches a pcixxxx.xx path component.
var pcirootRE = regexp.MustCompile(`^pci[[:xdigit:]]{4}:[[:xdigit:]]{2}$`)

func handlePCIRootDevicePathNode(builder devicePathBuilder) error {
	component := builder.next(1)

	if !pcirootRE.MatchString(component) {
		return errSkipDevicePathNodeHandler
	}

	node, err := newACPIExtendedDevicePathNode(filepath.Join(builder.absPath(component), "firmware_node"))
	if err != nil {
		return err
	}
	if node.HID.Vendor() != "PNP" || (node.HID.Product() != 0x0a03 && node.HID.Product() != 0x0a08) {
		return fmt.Errorf("unexpected hid: %v", node.HID)
	}
	node.HID = 0x0a0341d0

	if node.CID != 0 && (node.CID.Vendor() != "PNP" || (node.CID.Product() != 0x0a03 && node.CID.Product() != 0x0a08)) {
		return fmt.Errorf("unexpected cid: %v", node.CID)
	}

	builder.advance(1)

	builder.setInterfaceType(interfaceTypePCI)
	builder.append(maybeUseSimpleACPIDevicePathNode(node))

	return nil
}

func init() {
	registerDevicePathNodeHandler("pci-root", handlePCIRootDevicePathNode, prependHandler)
}
   07070100000268000081A4000000000000000000000001645E367C00000840000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/linux/dp_sata.go    // Copyright 2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package linux

import (
	"errors"
	"fmt"
	"os"
	"path/filepath"

	"github.com/canonical/go-efilib"
)

func handleSATADevicePathNode(builder devicePathBuilder) error {
	if builder.numRemaining() < 6 {
		return errors.New("invalid path: insufficient components")
	}

	params, err := handleATAPath(builder.absPath(builder.next(6)))
	if err != nil {
		return err
	}

	// Each SATA device is represented in the SCSI layer by setting the
	// channel to the port multiplier port number and the LUN as the LUN (see
	// drivers/ata/libata-scsi.c:ata_scsi_scan_host).

	pmp := params.channel
	if pmp > 0x7fff {
		return errors.New("invalid PMP")
	}

	// The target is always zero for SATA devices, as each port only has
	// a single device.
	if params.target != 0 {
		return errors.New("invalid SCSI target")
	}

	// We need to determine if the device is connected via a port
	// multiplier because we have to set the PMP address to 0xffff
	// if it isn't. Unfortunately, it is zero indexed so checking
	// that it is zero isn't sufficient.
	//
	// The kernel will expose a single host link%d device if there
	// is no port multiplier, or one of more PMP link%d.%d devices
	// if there is a port multiplier attached (see
	// drivers/ata/libata-pmp.c:sata_pmp_init_links and
	// drivers/ata/libata-transport.c:ata_tlink_add).
	_, err = os.Stat(filepath.Join(builder.next(1), fmt.Sprintf("link%d.%d", params.printId, pmp)))
	switch {
	case os.IsNotExist(err):
		// No port multiplier is connected.
		pmp = 0xffff
	case err != nil:
		return err
	default:
		// A port multiplier is connected.
	}

	builder.advance(6)
	builder.append(&efi.SATADevicePathNode{
		// The kernel provides a one-indexed number and the firmware is zero-indexed.
		HBAPortNumber:            uint16(params.port) - 1,
		PortMultiplierPortNumber: uint16(pmp),
		LUN:                      uint16(params.lun)})
	return nil
}

func init() {
	registerDevicePathNodeHandler("sata", handleSATADevicePathNode, 0, interfaceTypeSATA)
}
07070100000269000081A4000000000000000000000001645E367C000008A2000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/linux/dp_scsi.go    // Copyright 2022 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package linux

import (
	"errors"
	"fmt"
	"math"
	"os"
	"path/filepath"
	"regexp"
	"strconv"
	"strings"

	"github.com/canonical/go-efilib"

	"golang.org/x/xerrors"
)

// scsiRE matches a SCSI path, capturing the channel, target and LUN.
var scsiRE = regexp.MustCompile(`^host[[:digit:]]+\/target[[:digit:]]+\:[[:digit:]]+\:[[:digit:]]+\/[[:digit:]]+\:([[:digit:]]+)\:([[:digit:]]+)\:([[:digit:]]+)\/block\/s[dr][[:alpha:]]$`)

type scsiParams struct {
	channel uint32
	target  uint32
	lun     uint64
}

func handleSCSIPath(path string) (*scsiParams, error) {
	components := strings.Split(path, string(os.PathSeparator))
	if len(components) < 5 {
		return nil, errors.New("invalid path: insufficient components")
	}

	path = filepath.Join(components[len(components)-5:]...)
	m := scsiRE.FindStringSubmatch(path)
	if len(m) == 0 {
		return nil, fmt.Errorf("invalid path components: %s", path)
	}

	channel, err := strconv.ParseUint(m[1], 10, 32)
	if err != nil {
		return nil, xerrors.Errorf("invalid channel: %w", err)
	}
	target, err := strconv.ParseUint(m[2], 10, 32)
	if err != nil {
		return nil, xerrors.Errorf("invalid target: %w", err)
	}
	lun, err := strconv.ParseUint(m[3], 10, 64)
	if err != nil {
		return nil, xerrors.Errorf("invalid lun: %w", err)
	}

	return &scsiParams{
		channel: uint32(channel),
		target:  uint32(target),
		lun:     lun}, nil
}

func handleSCSIDevicePathNode(builder devicePathBuilder) error {
	if builder.numRemaining() < 5 {
		return errors.New("invalid path: insufficient components")
	}

	params, err := handleSCSIPath(builder.absPath(builder.next(5)))
	if err != nil {
		return err
	}

	builder.advance(5)

	if params.channel != 0 {
		return errors.New("invalid channel")
	}
	if params.target > math.MaxUint16 {
		return errors.New("invalid target")
	}
	if params.lun > math.MaxUint16 {
		return errors.New("invalid LUN")
	}

	builder.append(&efi.SCSIDevicePathNode{
		PUN: uint16(params.target),
		LUN: uint16(params.lun)})
	return nil
}

func init() {
	registerDevicePathNodeHandler("scsi", handleSCSIDevicePathNode, 0, interfaceTypeSCSI)
}
  0707010000026A000081A4000000000000000000000001645E367C00000212000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/linux/dp_virtio.go  // Copyright 2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package linux

import (
	"regexp"
)

var virtioRE = regexp.MustCompile(`^virtio[[:digit:]]`)

func handleVirtioDevicePathNode(builder devicePathBuilder) error {
	if !virtioRE.MatchString(builder.next(1)) {
		return errSkipDevicePathNodeHandler
	}

	builder.advance(1)
	return nil
}

func init() {
	registerDevicePathNodeHandler("virtio", handleVirtioDevicePathNode, prependHandler, interfaceTypeSCSI)
}
  0707010000026B000081A4000000000000000000000001645E367C000001BD000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/linux/dp_virtual.go // Copyright 2022 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package linux

func handleVirtualDevicePathNode(builder devicePathBuilder) error {
	if builder.next(1) == "virtual" {
		return errUnsupportedDevice("virtual devices are not supported")
	}
	return errSkipDevicePathNodeHandler
}

func init() {
	registerDevicePathNodeHandler("virtual", handleVirtualDevicePathNode, 0)
}
   0707010000026C000081A4000000000000000000000001645E367C00000534000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/linux/dp_vmbus_root.go  // Copyright 2022 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package linux

import (
	"fmt"
	"regexp"
)

// vmbusrootRE matches a VMBUS:XX component.
var vmbusrootRE = regexp.MustCompile(`^VMBUS:[[:xdigit:]]{2}$`)

func handleVMBusRootDevicePathNode(builder devicePathBuilder) error {
	component := builder.next(1)

	if !vmbusrootRE.MatchString(component) {
		return errSkipDevicePathNodeHandler
	}

	node, err := newACPIExtendedDevicePathNode(builder.absPath(component))
	if err != nil {
		return err
	}
	if node.HID != 0 || node.CID != 0 || node.HIDStr != "VMBUS" || node.CIDStr != "" {
		return fmt.Errorf("unexpected node properties: %v", node)
	}

	// The hardware ID exposed by the kernel seems to be capitalized, but the
	// one exposed from the firmware on an instance I've tested on isn't. Fix
	// up here - I'm not sure if this is right (is it always "VMBus"?), but the
	// device path does need to be an exact match for lookups because the firmware
	// essentially just does a memcmp.
	node.HIDStr = "VMBus"

	builder.advance(1)

	builder.setInterfaceType(interfaceTypeVMBus)
	builder.append(maybeUseSimpleACPIDevicePathNode(node))
	return nil
}

func init() {
	registerDevicePathNodeHandler("vmbus-root", handleVMBusRootDevicePathNode, prependHandler)
}
0707010000026D000081A4000000000000000000000001645E367C000030E9000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/linux/filepath.go   // Copyright 2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package linux

import (
	"bufio"
	"errors"
	"fmt"
	"io/ioutil"
	"os"
	"path/filepath"
	"strconv"
	"strings"

	"golang.org/x/sys/unix"
	"golang.org/x/xerrors"

	"github.com/canonical/go-efilib"
)

// FileDevicePathMode specifies the mode for NewFileDevicePath
type FileDevicePathMode int

const (
	// FullPath indicates that only a full device path should be created.
	FullPath FileDevicePathMode = iota

	// ShortFormPathHD indicates that a short-form device path beginning
	// with a HD() node should be created.
	ShortFormPathHD

	// ShortFormPathFile indicates that a short-form device path consisting
	// of only the file path relative to the device should be created.
	ShortFormPathFile
)

// ErrNoDevicePath is returned from NewFileDevicePath if the device in
// which a file is stored cannot be mapped to a device path with the
// specified mode.
type ErrNoDevicePath string

func (e ErrNoDevicePath) Error() string {
	return "cannot map file path to a UEFI device path: " + string(e)
}

type interfaceType int

const (
	interfaceTypeUnknown interfaceType = iota
	interfaceTypePCI
	interfaceTypeUSB
	interfaceTypeSCSI
	interfaceTypeIDE
	interfaceTypeSATA
	interfaceTypeNVME
	interfaceTypeVMBus
)

const (
	// prependHandler indicates that a handler wants to be tried
	// before handlers registered without this flag. These handlers
	// should use errSkipDevicePathNodeHandler on unhandled nodes.
	prependHandler = 1 << 0
)

var (
	// errSkipDevicePathNodeHandler is returned from a handler when it
	// wants to defer handling to another handler.
	errSkipDevicePathNodeHandler = errors.New("")
)

// errUnsupportedDevice is returned from a handler when it cannot
// determine the interface.
type errUnsupportedDevice string

func (e errUnsupportedDevice) Error() string {
	return "unsupported device: " + string(e)
}

type devicePathNodeHandler func(devicePathBuilder) error

type registeredDpHandler struct {
	name string
	fn   devicePathNodeHandler
}

var devicePathNodeHandlers = make(map[interfaceType][]registeredDpHandler)

func registerDevicePathNodeHandler(name string, fn devicePathNodeHandler, flags int, interfaces ...interfaceType) {
	if len(interfaces) == 0 {
		interfaces = []interfaceType{interfaceTypeUnknown}
	}
	for _, i := range interfaces {
		if flags&prependHandler > 0 {
			devicePathNodeHandlers[i] = append([]registeredDpHandler{{name, fn}}, devicePathNodeHandlers[i]...)
		} else {
			devicePathNodeHandlers[i] = append(devicePathNodeHandlers[i], registeredDpHandler{name, fn})
		}
	}
}

type devicePathBuilder interface {
	// numRemaining returns the number of remaining sysfs components
	// to process.
	numRemaining() int

	// next returns the next n sysfs components to process. -1 returns
	// all remaining components.
	next(n int) string

	// absPath turns the supplied sysfs path components into an
	// absolute path.
	absPath(path string) string

	// advance marks the specified number of sysfs components
	// as handled and advances to the next ones.
	advance(n int)

	// interfaceType returns the type of the interface detected
	// by the last handler.
	interfaceType() interfaceType

	// setInterfaceType allows a handler to set the detected interface
	// type.
	setInterfaceType(iface interfaceType)

	// append allows a handler to append device path nodes to the current
	// path.
	append(nodes ...efi.DevicePathNode)
}

type devicePathBuilderImpl struct {
	iface   interfaceType
	devPath efi.DevicePath

	processed []string
	remaining []string
}

func (b *devicePathBuilderImpl) numRemaining() int {
	return len(b.remaining)
}

func (b *devicePathBuilderImpl) next(n int) string {
	if n < 0 {
		return filepath.Join(b.remaining...)
	}
	return filepath.Join(b.remaining[:n]...)
}

func (b *devicePathBuilderImpl) absPath(path string) string {
	return filepath.Join(sysfsPath, "devices", filepath.Join(b.processed...), path)
}

func (b *devicePathBuilderImpl) advance(n int) {
	b.processed = append(b.processed, b.remaining[:n]...)
	b.remaining = b.remaining[n:]
}

func (b *devicePathBuilderImpl) interfaceType() interfaceType {
	return b.iface
}

func (b *devicePathBuilderImpl) setInterfaceType(iface interfaceType) {
	b.iface = iface
}

func (b *devicePathBuilderImpl) append(nodes ...efi.DevicePathNode) {
	b.devPath = append(b.devPath, nodes...)
}

func (b *devicePathBuilderImpl) done() bool {
	return len(b.remaining) == 0
}

func (b *devicePathBuilderImpl) processNextComponent() error {
	nProcessed := len(b.processed)
	remaining := b.remaining
	iface := b.iface

	handlers := devicePathNodeHandlers[b.iface]
	if len(handlers) == 0 {
		// There should always be at least one handler registered for an interface.
		panic(fmt.Sprintf("no handlers registered for interface type %v", b.iface))
	}

	for _, handler := range handlers {
		err := handler.fn(b)
		if err != nil {
			// Roll back changes
			b.processed = b.processed[:nProcessed]
			b.remaining = remaining
			b.iface = iface
		}
		if err == errSkipDevicePathNodeHandler {
			// Try the next handler.
			continue
		}
		if err != nil {
			return xerrors.Errorf("[handler %s]: %w", handler.name, err)
		}

		if iface != interfaceTypeUnknown && b.iface == interfaceTypeUnknown {
			// The handler set the interface type back to unknown. Turn this
			// in to a errUnsupportedDevice error.
			return errUnsupportedDevice("[handler " + handler.name + "]: unrecognized interface")
		}
		return nil
	}

	// If we get here, then all handlers returned errSkipDevicePathNodeHandler.

	if b.iface != interfaceTypeUnknown {
		// If the interface has already been determined, require at least one
		// handler to handle this node or return an error.
		panic(fmt.Sprintf("all handlers skipped handling interface type %v", b.iface))
	}

	return errUnsupportedDevice("unhandled root node")
}

func newDevicePathBuilder(dev *dev) (*devicePathBuilderImpl, error) {
	path, err := filepath.Rel(filepath.Join(sysfsPath, "devices"), dev.sysfsPath)
	if err != nil {
		return nil, err
	}

	return &devicePathBuilderImpl{remaining: strings.Split(path, string(os.PathSeparator))}, nil
}

type mountPoint struct {
	dev         uint64
	root        string
	mountDir    string
	mountSource string
}

func scanBlockDeviceMounts() (mounts []*mountPoint, err error) {
	f, err := os.Open(mountsPath)
	if err != nil {
		return nil, err
	}
	defer f.Close()

	scanner := bufio.NewScanner(f)
	for scanner.Scan() {
		fields := strings.Fields(scanner.Text())
		if len(fields) < 10 || len(fields) > 11 {
			return nil, errors.New("invalid mount info: incorrect number of fields")
		}

		devStr := strings.Split(fields[2], ":")
		if len(devStr) != 2 {
			return nil, errors.New("invalid mount info: invalid device number")
		}
		devMajor, err := strconv.ParseUint(devStr[0], 10, 32)
		if err != nil {
			return nil, xerrors.Errorf("invalid mount info: invalid device number: %w", err)
		}
		devMinor, err := strconv.ParseUint(devStr[1], 10, 32)
		if err != nil {
			return nil, xerrors.Errorf("invalid mount info: invalid device number: %w", err)
		}

		var mountSource string
		if len(fields) == 10 {
			mountSource = fields[8]
		} else {
			mountSource = fields[9]
		}
		if !filepath.IsAbs(mountSource) {
			continue
		}

		mounts = append(mounts, &mountPoint{
			dev:         unix.Mkdev(uint32(devMajor), uint32(devMinor)),
			root:        fields[3],
			mountDir:    fields[4],
			mountSource: mountSource})
	}
	if scanner.Err() != nil {
		return nil, xerrors.Errorf("cannot parse mount info: %w", err)
	}

	return mounts, nil
}

func getFileMountPoint(path string) (*mountPoint, error) {
	mounts, err := scanBlockDeviceMounts()
	if err != nil {
		return nil, xerrors.Errorf("cannot obtain list of block device mounts: %w", err)
	}

	var candidate *mountPoint

	for _, mount := range mounts {
		if !strings.HasPrefix(path, mount.mountDir) {
			continue
		}

		if candidate == nil {
			candidate = mount
		}
		if len(mount.mountDir) > len(candidate.mountDir) {
			candidate = mount
		}
	}

	if candidate == nil {
		return nil, errors.New("not found")
	}

	return candidate, nil
}

type dev struct {
	sysfsPath string
	devPath   string
	part      int
}

type filePath struct {
	dev
	path string
}

func newFilePath(path string) (*filePath, error) {
	path, err := filepathEvalSymlinks(path)
	if err != nil {
		return nil, xerrors.Errorf("cannot evaluate symbolic links: %w", err)
	}

	mount, err := getFileMountPoint(path)
	if err != nil {
		return nil, xerrors.Errorf("cannot obtain mount information for path: %w", err)
	}

	rel, err := filepath.Rel(mount.mountDir, path)
	if err != nil {
		return nil, err
	}
	out := &filePath{path: filepath.Join(mount.root, rel)}

	childDev, err := filepath.EvalSymlinks(filepath.Join(sysfsPath, "dev/block", fmt.Sprintf("%d:%d", unix.Major(mount.dev), unix.Minor(mount.dev))))
	if err != nil {
		return nil, err
	}

	parentDev := filepath.Dir(childDev)
	parentSubsystem, err := filepath.EvalSymlinks(filepath.Join(parentDev, "subsystem"))
	switch {
	case os.IsNotExist(err):
		// No subsystem link, could be the block/ directory
	case err != nil:
		return nil, err
	}

	if parentSubsystem != filepath.Join(sysfsPath, "class", "block") {
		// Parent device is not a block device
		out.dev.sysfsPath = childDev
		out.dev.devPath = filepath.Join("/dev", filepath.Base(childDev))
	} else {
		// Parent device is a block device, so this is a partitioned
		// device.
		out.dev.sysfsPath = parentDev
		out.dev.devPath = filepath.Join("/dev", filepath.Base(parentDev))
		b, err := ioutil.ReadFile(filepath.Join(childDev, "partition"))
		if err != nil {
			return nil, xerrors.Errorf("cannot obtain partition number for %s: %w", mount.dev, err)
		}
		part, err := strconv.Atoi(strings.TrimSpace(string(b)))
		if err != nil {
			return nil, xerrors.Errorf("cannot determine partition number for %s: %w", mount.dev, err)
		}
		out.dev.part = part
	}

	return out, nil
}

// NewFileDevicePath creates an EFI device path from the supplied filepath.
//
// If mode is FullPath, this will attempt to create a full device path which
// requires the use of sysfs. If the device in which the file is stored cannot be
// mapped to a device path, a ErrNoDevicePath error is returned. This could be
// because the device is not recognized by this package, or because the device
// genuinely cannot be mapped to a device path (eg, it is a device-mapper or loop
// device). In this case, one of the ShortForm modes can be used.
//
// If mode is ShortFormPathHD, this will attempt to create a short-form device
// path beginning with a HD() component. If the file is stored inside an
// unpartitioned device, a ErrNoDevicePath error will be returned. In this case,
// ShortFormPathFile can be used.
//
// When mode is ShortFormPathHD or FullPath and the file is stored inside a
// partitoned device, read access is required on the underlying block device
// in order to decode the partition table.
//
// If mode is ShortFormPathFile, this will attempt to create a short-form device
// path consisting only of the file path relative to the device.
//
// In all modes, read access to the file's directory is required.
func NewFileDevicePath(path string, mode FileDevicePathMode) (out efi.DevicePath, err error) {
	fp, err := newFilePath(path)
	if err != nil {
		return nil, err
	}

	if mode == ShortFormPathHD && fp.part == 0 {
		return nil, ErrNoDevicePath("file is not inside partitioned media - use linux.ShortFormPathFile")
	}

	builder, err := newDevicePathBuilder(&fp.dev)
	if err != nil {
		return nil, err
	}

	if mode == FullPath {
		for !builder.done() {
			var e errUnsupportedDevice

			err := builder.processNextComponent()
			switch {
			case xerrors.As(err, &e):
				return nil, ErrNoDevicePath("encountered an error when handling components " +
					builder.next(-1) + " from device path " +
					builder.absPath(builder.next(-1)) + ": " + err.Error())
			case err != nil:
				return nil, xerrors.Errorf("cannot process components %s from device path %s: %w",
					builder.next(-1), builder.absPath(builder.next(-1)), err)
			}
		}
	}

	out = builder.devPath

	if mode != ShortFormPathFile && fp.part > 0 {
		node, err := NewHardDriveDevicePathNodeFromDevice(fp.devPath, fp.part)
		if err != nil {
			return nil, xerrors.Errorf("cannot construct hard drive device path node: %w", err)
		}
		out = append(out, node)
	}

	out = append(out, efi.NewFilePathDevicePathNode(fp.path))
	return out, err
}
   0707010000026E000081A4000000000000000000000001645E367C00000142000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/linux/mockable.go   // Copyright 2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package linux

import (
	"os"
	"path/filepath"
)

var (
	mountsPath = "/proc/self/mountinfo"
	sysfsPath  = "/sys"

	filepathEvalSymlinks = filepath.EvalSymlinks
	osOpen               = os.Open
)
  0707010000026F000081A4000000000000000000000001645E367C00000AA2000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/loadoption.go   // Copyright 2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package efi

import (
	"bytes"
	"errors"
	"fmt"
	"io"
	"math"

	"golang.org/x/xerrors"

	"github.com/canonical/go-efilib/internal/uefi"
)

type LoadOptionAttributes uint32

func (a LoadOptionAttributes) Category() LoadOptionAttributes {
	return a & LoadOptionAttributes(uefi.LOAD_OPTION_CATEGORY)
}

const (
	LoadOptionActive         LoadOptionAttributes = uefi.LOAD_OPTION_ACTIVE
	LoadOptionForceReconnect LoadOptionAttributes = uefi.LOAD_OPTION_FORCE_RECONNECT
	LoadOptionHidden         LoadOptionAttributes = uefi.LOAD_OPTION_HIDDEN
	LoadOptionCategoryBoot   LoadOptionAttributes = uefi.LOAD_OPTION_CATEGORY_BOOT
	LoadOptionCategoryApp    LoadOptionAttributes = uefi.LOAD_OPTION_CATEGORY_APP
)

// LoadOption corresponds to the EFI_LOAD_OPTION type.
type LoadOption struct {
	Attributes   LoadOptionAttributes
	Description  string
	FilePath     DevicePath
	OptionalData []byte
}

func (o *LoadOption) String() string {
	return fmt.Sprintf("EFI_LOAD_OPTION{ Attributes: %d, Description: \"%s\", FilePath: %s, OptionalData: %x }",
		o.Attributes, o.Description, o.FilePath, o.OptionalData)
}

// Bytes returns the serialized form of this load option.
func (o *LoadOption) Bytes() ([]byte, error) {
	w := new(bytes.Buffer)
	if err := o.Write(w); err != nil {
		return nil, err
	}
	return w.Bytes(), nil
}

// Write serializes this load option to the supplied io.Writer.
func (o *LoadOption) Write(w io.Writer) error {
	opt := uefi.EFI_LOAD_OPTION{
		Attributes:   uint32(o.Attributes),
		Description:  ConvertUTF8ToUCS2(o.Description + "\x00"),
		OptionalData: o.OptionalData}

	dp := new(bytes.Buffer)
	if err := o.FilePath.Write(dp); err != nil {
		return err
	}
	if dp.Len() > math.MaxUint16 {
		return errors.New("FilePath too long")
	}
	opt.FilePathList = dp.Bytes()
	opt.FilePathListLength = uint16(dp.Len())

	return opt.Write(w)
}

// ReadLoadOption reads a LoadOption from the supplied io.Reader. Due to the
// way that EFI_LOAD_OPTION is defined, where there is no size encoded for the
// OptionalData field, this function will consume all of the bytes available
// from the supplied reader.
func ReadLoadOption(r io.Reader) (out *LoadOption, err error) {
	opt, err := uefi.Read_EFI_LOAD_OPTION(r)
	if err != nil {
		return nil, err
	}

	out = &LoadOption{
		Attributes:   LoadOptionAttributes(opt.Attributes),
		Description:  ConvertUTF16ToUTF8(opt.Description),
		OptionalData: opt.OptionalData}

	dp, err := ReadDevicePath(bytes.NewReader(opt.FilePathList))
	if err != nil {
		return nil, xerrors.Errorf("cannot read device path: %w", err)
	}
	out.FilePath = dp

	return out, nil
}
  07070100000270000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/mbr 07070100000271000081A4000000000000000000000001645E367C00000610000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/mbr/mbr.go  // Copyright 2020 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package mbr

import (
	"encoding/binary"
	"errors"
	"io"
)

const mbrSignature = 0xaa55

var ErrInvalidSignature = errors.New("invalid master boot record signature")

// Address is a CHS address.
type Address [3]uint8

func (a Address) Head() uint8 {
	return a[0]
}

func (a Address) Sector() uint8 {
	return a[1] & 0x3f
}

func (a Address) Cylinder() uint16 {
	c := uint16(a[2])
	c |= uint16(a[1]&0xc0) << 2
	return c
}

// PartitionEntry corresponds to a partition entry from a MBR.
type PartitionEntry struct {
	BootIndicator   uint8
	StartAddress    Address
	Type            uint8
	EndAddress      Address
	StartingLBA     uint32
	NumberOfSectors uint32
}

// Record corresponds to a MBR.
type Record struct {
	BootstrapCode   [440]byte
	UniqueSignature uint32
	Partitions      [4]PartitionEntry
}

type record struct {
	BootstrapCode   [440]byte
	UniqueSignature uint32
	Unknown         [2]uint8
	Partitions      [4]PartitionEntry
	Signature       uint16
}

// ReadRecord reads a MBR from r. It returns ErrInvalidSignature if the
// MBR has an invalid signature.
func ReadRecord(r io.Reader) (*Record, error) {
	var rec record
	if err := binary.Read(r, binary.LittleEndian, &rec); err != nil {
		return nil, err
	}
	if rec.Signature != mbrSignature {
		return nil, ErrInvalidSignature
	}
	return &Record{BootstrapCode: rec.BootstrapCode,
		UniqueSignature: rec.UniqueSignature,
		Partitions:      rec.Partitions}, nil
}
07070100000272000081A4000000000000000000000001645E367C00000119000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/mockable_linux.go   // Copyright 2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package efi

import (
	"os"

	"golang.org/x/sys/unix"
)

var (
	openVarFile   = realOpenVarFile
	removeVarFile = os.Remove
	unixStatfs    = unix.Statfs
)
   07070100000273000081A4000000000000000000000001645E367C00001942000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/pe.go   // Copyright 2020 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package efi

import (
	"crypto"
	"encoding/binary"
	"errors"
	"fmt"
	"hash"
	"io"
	"sort"

	"golang.org/x/xerrors"

	"github.com/canonical/go-efilib/internal/ioerr"
	"github.com/canonical/go-efilib/internal/pe1.14"
)

const (
	certTableIndex = 4 // Index of the Certificate Table entry in the Data Directory of a PE image optional header
)

type eofIsUnexpectedReaderAt struct {
	r io.ReaderAt
}

func (r *eofIsUnexpectedReaderAt) ReadAt(p []byte, off int64) (n int, err error) {
	n, err = r.r.ReadAt(p, off)
	return n, ioerr.EOFIsUnexpected(err)
}

// ComputePeImageDigest computes the digest of the supplied PE image in accordance with the
// Authenticode specification, using the specified digest algorithm.
func ComputePeImageDigest(alg crypto.Hash, r io.ReaderAt, sz int64) ([]byte, error) {
	var dosheader [96]byte
	if n, err := r.ReadAt(dosheader[0:], 0); err != nil {
		if n > 0 && err == io.EOF {
			err = io.ErrUnexpectedEOF
		}
		return nil, err
	}

	var coffHeaderOffset int64
	if dosheader[0] == 'M' && dosheader[1] == 'Z' {
		signoff := int64(binary.LittleEndian.Uint32(dosheader[0x3c:]))
		var sign [4]byte
		r.ReadAt(sign[:], signoff)
		if !(sign[0] == 'P' && sign[1] == 'E' && sign[2] == 0 && sign[3] == 0) {
			return nil, fmt.Errorf("invalid PE COFF file signature: %v", sign)
		}
		coffHeaderOffset = signoff + 4
	}

	p, err := pe.NewFile(r)
	if err != nil {
		return nil, xerrors.Errorf("cannot decode PE binary: %w", err)
	}

	var isPe32Plus bool
	var sizeOfHeaders int64
	var dd []pe.DataDirectory
	switch oh := p.OptionalHeader.(type) {
	case *pe.OptionalHeader32:
		sizeOfHeaders = int64(oh.SizeOfHeaders)
		dd = oh.DataDirectory[0:oh.NumberOfRvaAndSizes]
	case *pe.OptionalHeader64:
		isPe32Plus = true
		sizeOfHeaders = int64(oh.SizeOfHeaders)
		dd = oh.DataDirectory[0:oh.NumberOfRvaAndSizes]
	default:
		return nil, errors.New("PE binary doesn't contain an optional header")
	}

	// 1) Load the image header in to memory.
	hr := io.NewSectionReader(&eofIsUnexpectedReaderAt{r}, 0, sizeOfHeaders)

	// 2) Initialize a hash algorithm context.
	h := alg.New()

	// 3) Hash the image header from its base to immediately before the start of the checksum address in the optional header.
	// This includes the DOS header, 4-byte PE signature, COFF header, and the first 64 bytes of the optional header.
	b := make([]byte, int(coffHeaderOffset)+binary.Size(p.FileHeader)+64)
	if _, err := io.ReadFull(hr, b); err != nil {
		return nil, xerrors.Errorf("cannot read from image to start to checksum: %w", err)
	}
	h.Write(b)

	// 4) Skip over the checksum, which is a 4-byte field.
	hr.Seek(4, io.SeekCurrent)

	var certTable *pe.DataDirectory

	if len(dd) > certTableIndex {
		// 5) Hash everything from the end of the checksum field to immediately before the start of the Certificate Table entry in the
		// optional header data directory.
		// This is 60 bytes for PE32 format binaries, or 76 bytes for PE32+ format binaries.
		sz := 60
		if isPe32Plus {
			sz = 76
		}
		b = make([]byte, sz)
		if _, err := io.ReadFull(hr, b); err != nil {
			return nil, xerrors.Errorf("cannot read from checksum to certificate table data directory entry: %w", err)
		}
		h.Write(b)

		// 6) Get the Attribute Certificate Table address and size from the Certificate Table entry.
		certTable = &dd[certTableIndex]
	}

	// 7) Exclude the Certificate Table entry from the calculation and hash	everything from the end of the Certificate Table entry
	// to the end of image header, including the Section Table. The Certificate Table entry is 8 bytes long.
	if certTable != nil {
		hr.Seek(8, io.SeekCurrent)
	}

	chunkedHashAll := func(r io.Reader, h hash.Hash) error {
		b := make([]byte, 4096)
		for {
			n, err := r.Read(b)
			h.Write(b[:n])

			if err == io.EOF {
				return nil
			}
			if err != nil {
				return err
			}
		}
	}

	if err := chunkedHashAll(hr, h); err != nil {
		return nil, xerrors.Errorf("cannot hash remainder of headers and section table: %w", err)
	}

	// 8) Create a counter called sumOfBytesHashed, which is not part of the signature. Set this counter to the SizeOfHeaders field.
	sumOfBytesHashed := sizeOfHeaders

	// 9) Build a temporary table of pointers to all of the section headers in the image. Do not include any section headers in the
	// table whose Size field is zero.
	var sections []*pe.SectionHeader
	for _, section := range p.Sections {
		if section.Size == 0 {
			continue
		}
		sections = append(sections, &section.SectionHeader)
	}

	// 10) Using the Offset field in the referenced SectionHeader structure as a key, arrange the table's elements in ascending order.
	// In other words, sort the section headers in ascending order according to the disk-file offset of the sections.
	sort.Slice(sections, func(i, j int) bool { return sections[i].Offset < sections[j].Offset })

	for _, section := range sections {
		// 11) Walk through the sorted table, load the corresponding section into memory, and hash the entire section. Use the
		// Size field in the SectionHeader structure to determine the amount of data to hash.
		sr := io.NewSectionReader(&eofIsUnexpectedReaderAt{r}, int64(section.Offset), int64(section.Size))
		if err := chunkedHashAll(sr, h); err != nil {
			return nil, xerrors.Errorf("cannot hash section %s: %w", section.Name, err)
		}

		// 12) Add the section’s Size value to sumOfBytesHashed.
		sumOfBytesHashed += int64(section.Size)

		// 13) Repeat steps 11 and 12 for all of the sections in the sorted table.
	}

	// 14) Create a value called fileSize, which is not part of the signature. Set this value to the image’s file size. If fileSize is
	// greater than sumOfBytesHashed, the file contains extra data that must be added to the hash. This data begins at the
	// sumOfBytesHashed file offset, and its length is:
	// fileSize – (certTable.Size + sumOfBytesHashed)
	fileSize := sz

	if fileSize > sumOfBytesHashed {
		var certSize int64
		if certTable != nil {
			certSize = int64(certTable.Size)
		}

		if fileSize < (sumOfBytesHashed + certSize) {
			return nil, errors.New("image too short")
		}

		sr := io.NewSectionReader(&eofIsUnexpectedReaderAt{r}, sumOfBytesHashed, fileSize-sumOfBytesHashed-certSize)
		if err := chunkedHashAll(sr, h); err != nil {
			return nil, xerrors.Errorf("cannot hash extra data: %w", err)
		}
	}

	return h.Sum(nil), nil
}
  07070100000274000081A4000000000000000000000001645E367C0000058B000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/string.go   // Copyright 2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package efi

import (
	"unicode"
	"unicode/utf16"
	"unicode/utf8"
)

// ConvertUTF16ToUTF8 converts the supplied UTF-16 or UCS2 string
// to a UTF-8 string. If the supplied string is NULL-terminated,
// then the NULL termination is removed from the string.
func ConvertUTF16ToUTF8(in []uint16) string {
	var u8 []byte
	for _, r := range utf16.Decode(in) {
		if r == 0 {
			break
		}
		u8Char := make([]byte, utf8.RuneLen(r))
		utf8.EncodeRune(u8Char, r)
		u8 = append(u8, u8Char...)
	}
	return string(u8)
}

// ConvertUTF8ToUTF16 converts the supplied UTF-8 string to a
// UTF-16 string.
func ConvertUTF8ToUTF16(in string) []uint16 {
	var unicodeStr []rune
	for len(in) > 0 {
		r, sz := utf8.DecodeRuneInString(in)
		unicodeStr = append(unicodeStr, r)
		in = in[sz:]
	}
	return utf16.Encode(unicodeStr)
}

// ConvertUTF8ToUCS2 converts the supplied UTF-8 string to a
// UCS2 string. Any code point outside of the Basic Multilingual
// Plane cannot be represented by UCS2 and is converted to the
// replacement character.
func ConvertUTF8ToUCS2(in string) []uint16 {
	var unicodeStr []rune
	for len(in) > 0 {
		r, sz := utf8.DecodeRuneInString(in)
		if r >= 0x10000 {
			r = unicode.ReplacementChar
		}
		unicodeStr = append(unicodeStr, r)
		in = in[sz:]
	}
	return utf16.Encode(unicodeStr)
}
 07070100000275000081A4000000000000000000000001645E367C000000E1000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/types.go    // Copyright 2020 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package efi

type PhysicalAddress uint64

// LBA corresponds to the EFI_LBA type.
type LBA uint64
   07070100000276000081A4000000000000000000000001645E367C00000B6C000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/vars.go // Copyright 2020-2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package efi

import (
	"errors"

	"github.com/canonical/go-efilib/internal/uefi"
)

type VariableAttributes uint32

const (
	AttributeNonVolatile                       VariableAttributes = uefi.EFI_VARIABLE_NON_VOLATILE
	AttributeBootserviceAccess                 VariableAttributes = uefi.EFI_VARIABLE_BOOTSERVICE_ACCESS
	AttributeRuntimeAccess                     VariableAttributes = uefi.EFI_VARIABLE_RUNTIME_ACCESS
	AttributeHardwareErrorRecord               VariableAttributes = uefi.EFI_VARIABLE_HARDWARE_ERROR_RECORD
	AttributeAuthenticatedWriteAccess          VariableAttributes = uefi.EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS
	AttributeTimeBasedAuthenticatedWriteAccess VariableAttributes = uefi.EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS
	AttributeAppendWrite                       VariableAttributes = uefi.EFI_VARIABLE_APPEND_WRITE
	AttributeEnhancedAuthenticatedAccess       VariableAttributes = uefi.EFI_VARIABLE_ENHANCED_AUTHENTICATED_ACCESS
)

var (
	ErrVarsUnavailable = errors.New("no variable backend is available")
	ErrVarNotExist     = errors.New("variable does not exist")
	ErrVarPermission   = errors.New("permission denied")
)

// VariableDescriptor represents the identity of a variable.
type VariableDescriptor struct {
	Name string
	GUID GUID
}

type varsBackend interface {
	Get(name string, guid GUID) (VariableAttributes, []byte, error)
	Set(name string, guid GUID, attrs VariableAttributes, data []byte) error
	List() ([]VariableDescriptor, error)
}

type nullVarsBackend struct{}

func (v nullVarsBackend) Get(name string, guid GUID) (VariableAttributes, []byte, error) {
	return 0, nil, ErrVarsUnavailable
}

func (v nullVarsBackend) Set(name string, guid GUID, attrs VariableAttributes, data []byte) error {
	return ErrVarsUnavailable
}

func (v nullVarsBackend) List() ([]VariableDescriptor, error) {
	return nil, ErrVarsUnavailable
}

var vars varsBackend = nullVarsBackend{}

// ReadVariable returns the value and attributes of the EFI variable with the specified
// name and GUID.
func ReadVariable(name string, guid GUID) ([]byte, VariableAttributes, error) {
	attrs, data, err := vars.Get(name, guid)
	return data, attrs, err
}

// WriteVariable writes the supplied data value with the specified attributes to the
// EFI variable with the specified name and GUID.
//
// If the variable already exists, the specified attributes must match the existing
// attributes with the exception of AttributeAppendWrite.
//
// If the variable does not exist, it will be created.
func WriteVariable(name string, guid GUID, attrs VariableAttributes, data []byte) error {
	return vars.Set(name, guid, attrs, data)
}

// ListVariables returns a list of variables that can be accessed.
func ListVariables() ([]VariableDescriptor, error) {
	return vars.List()
}
07070100000277000081A4000000000000000000000001645E367C00001AB8000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/vars_linux.go   // Copyright 2020-2021 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package efi

import (
	"bytes"
	"encoding/binary"
	"fmt"
	"io"
	"io/ioutil"
	"os"
	"path/filepath"
	"sort"
	"syscall"

	"golang.org/x/sys/unix"
	"golang.org/x/xerrors"

	internal_unix "github.com/canonical/go-efilib/internal/unix"
)

func efivarfsPath() string {
	return "/sys/firmware/efi/efivars"
}

type varFile interface {
	io.ReadWriteCloser
	Readdir(n int) ([]os.FileInfo, error)
	GetInodeFlags() (uint, error)
	SetInodeFlags(flags uint) error
}

func makeVarFileMutable(f varFile) (restore func() error, err error) {
	const immutableFlag = 0x00000010

	flags, err := f.GetInodeFlags()
	if err != nil {
		return nil, err
	}

	if flags&immutableFlag == 0 {
		// Nothing to do
		return func() error { return nil }, nil
	}

	if err := f.SetInodeFlags(flags &^ immutableFlag); err != nil {
		return nil, err
	}

	return func() error {
		return f.SetInodeFlags(flags)
	}, nil
}

type realVarFile struct {
	*os.File
}

func (f *realVarFile) GetInodeFlags() (uint, error) {
	flags, err := internal_unix.IoctlGetUint(int(f.Fd()), unix.FS_IOC_GETFLAGS)
	if err != nil {
		return 0, &os.PathError{Op: "ioctl", Path: f.Name(), Err: err}
	}
	return flags, nil
}

func (f *realVarFile) SetInodeFlags(flags uint) error {
	if err := internal_unix.IoctlSetPointerUint(int(f.Fd()), unix.FS_IOC_SETFLAGS, flags); err != nil {
		return &os.PathError{Op: "ioctl", Path: f.Name(), Err: err}
	}
	return nil
}

func realOpenVarFile(path string, flags int, perm os.FileMode) (varFile, error) {
	f, err := os.OpenFile(path, flags, perm)
	if err != nil {
		return nil, err
	}
	return &realVarFile{f}, nil
}

var guidLength = len("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")

func probeEfivarfs() bool {
	var st unix.Statfs_t
	if err := unixStatfs(efivarfsPath(), &st); err != nil {
		return false
	}
	if uint(st.Type) != uint(unix.EFIVARFS_MAGIC) {
		return false
	}
	return true
}

func maybeRetry(n int, fn func() (bool, error)) error {
	for i := 1; ; i++ {
		retry, err := fn()
		switch {
		case i > n:
			return err
		case !retry:
			return err
		case err == nil:
			return nil
		}
	}
}

func processEfivarfsFileAccessError(err error) (retry bool, errOut error) {
	if os.IsPermission(err) {
		var se syscall.Errno
		if !xerrors.As(err, &se) {
			// This shouldn't happen, but just return ErrVarPermission
			// in this case and don't retry.
			return false, ErrVarPermission
		}
		if se == syscall.EACCES {
			// open will fail with EACCES if we lack the privileges
			// to write to the file.
			// open will fail with EACCES if we lack the privileges
			// to write to the parent directory in the case where we
			// need to create a new file.
			// unlink will fail with EACCES if we lack the privileges
			// to write to the parent directory.
			// Don't retry in these cases.
			return false, ErrVarPermission
		}

		// open and unlink will fail with EPERM if the file exists but
		// it is immutable. This might happen as a result of a race with
		// another process that might have been writing to the variable
		// or may have deleted and recreated it, making the underlying
		// inode immutable again.
		// Retry in this case.
		return true, ErrVarPermission
	}

	// Don't retry for any other error.
	return false, err
}

func writeEfivarfsFile(path string, attrs VariableAttributes, data []byte) (retry bool, err error) {
	// Open for reading to make the inode mutable
	r, err := openVarFile(path, os.O_RDONLY, 0)
	switch {
	case os.IsNotExist(err):
	case os.IsPermission(err):
		return false, ErrVarPermission
	case err != nil:
		return false, err
	default:
		defer r.Close()

		restoreImmutable, err := makeVarFileMutable(r)
		switch {
		case os.IsPermission(err):
			return false, ErrVarPermission
		case err != nil:
			return false, err
		}

		defer restoreImmutable()
	}

	if len(data) == 0 {
		return processEfivarfsFileAccessError(removeVarFile(path))
	}

	flags := os.O_WRONLY | os.O_CREATE
	if attrs&AttributeAppendWrite != 0 {
		flags |= os.O_APPEND
	}

	w, err := openVarFile(path, flags, 0644)
	if err != nil {
		return processEfivarfsFileAccessError(err)
	}
	defer w.Close()

	var buf bytes.Buffer
	binary.Write(&buf, binary.LittleEndian, attrs)
	buf.Write(data)

	_, err = buf.WriteTo(w)
	return false, err
}

type efivarfsVarsBackend struct{}

func (v efivarfsVarsBackend) Get(name string, guid GUID) (VariableAttributes, []byte, error) {
	path := filepath.Join(efivarfsPath(), fmt.Sprintf("%s-%s", name, guid))
	f, err := openVarFile(path, os.O_RDONLY, 0)
	switch {
	case os.IsNotExist(err):
		return 0, nil, ErrVarNotExist
	case os.IsPermission(err):
		return 0, nil, ErrVarPermission
	case err != nil:
		return 0, nil, err
	}
	defer f.Close()

	var attrs VariableAttributes
	if err := binary.Read(f, binary.LittleEndian, &attrs); err != nil {
		if err == io.EOF {
			return 0, nil, ErrVarNotExist
		}
		return 0, nil, err
	}

	data, err := ioutil.ReadAll(f)
	if err != nil {
		return 0, nil, err
	}
	return attrs, data, nil
}

func (v efivarfsVarsBackend) Set(name string, guid GUID, attrs VariableAttributes, data []byte) error {
	path := filepath.Join(efivarfsPath(), fmt.Sprintf("%s-%s", name, guid))
	return maybeRetry(4, func() (bool, error) { return writeEfivarfsFile(path, attrs, data) })
}

func (v efivarfsVarsBackend) List() ([]VariableDescriptor, error) {
	f, err := openVarFile(efivarfsPath(), os.O_RDONLY, 0)
	switch {
	case os.IsNotExist(err):
		return nil, ErrVarsUnavailable
	case os.IsPermission(err):
		return nil, ErrVarPermission
	case err != nil:
		return nil, err
	}
	defer f.Close()

	dirents, err := f.Readdir(-1)
	if err != nil {
		return nil, err
	}

	var entries []VariableDescriptor

	for _, dirent := range dirents {
		if !dirent.Mode().IsRegular() {
			// Skip non-regular files
			continue
		}
		if len(dirent.Name()) < guidLength+1 {
			// Skip files with a basename that isn't long enough
			// to contain a GUID and a hyphen
			continue
		}
		if dirent.Name()[len(dirent.Name())-guidLength-1] != '-' {
			// Skip files where the basename doesn't contain a
			// hyphen between the name and GUID
			continue
		}
		if dirent.Size() == 0 {
			// Skip files with zero size. These are variables that
			// have been deleted by writing an empty payload
			continue
		}

		name := dirent.Name()[:len(dirent.Name())-guidLength-1]
		guid, err := DecodeGUIDString(dirent.Name()[len(name)+1:])
		if err != nil {
			continue
		}

		entries = append(entries, VariableDescriptor{Name: name, GUID: guid})
	}

	sort.Slice(entries, func(i, j int) bool {
		return fmt.Sprintf("%s-%v", entries[i].Name, entries[i].GUID) < fmt.Sprintf("%s-%v", entries[j].Name, entries[j].GUID)
	})
	return entries, nil
}

func init() {
	if !probeEfivarfs() {
		return
	}
	vars = efivarfsVarsBackend{}
}
07070100000278000081A4000000000000000000000001645E367C0000122B000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/canonical/go-efilib/wincert.go  // Copyright 2020 Canonical Ltd.
// Licensed under the LGPLv3 with static-linking exception.
// See LICENCE file for details.

package efi

import (
	"encoding/binary"
	"errors"
	"io"

	"github.com/canonical/go-efilib/internal/ioerr"
	"github.com/canonical/go-efilib/internal/uefi"
)

// WinCertificate is an interface type corresponding to implementations of WIN_CERTIFICATE.
type WinCertificate interface {
	Write(w io.Writer) error // Encode this certificate to the supplied io.Writer
}

// WinCertificatePKCS1v15 corresponds to the WIN_CERTIFICATE_EFI_PKCS1_15 type.
type WinCertificatePKCS1v15 struct {
	HashAlgorithm GUID
	Signature     []byte
}

func (c *WinCertificatePKCS1v15) Write(w io.Writer) error {
	cert := uefi.WIN_CERTIFICATE_EFI_PKCS1_15{
		HashAlgorithm: uefi.EFI_GUID(c.HashAlgorithm),
		Signature:     c.Signature}
	cert.Hdr = uefi.WIN_CERTIFICATE{
		Length:          uint32(binary.Size(cert.Hdr) + binary.Size(cert.HashAlgorithm) + len(c.Signature)),
		Revision:        0x0200,
		CertificateType: uefi.WIN_CERT_TYPE_EFI_PKCS115}
	return binary.Write(w, binary.LittleEndian, &cert)
}

// WinCertificateGUID corresponds to the WIN_CERTIFICATE_UEFI_GUID type.
type WinCertificateGUID struct {
	Type GUID
	Data []byte
}

func (c *WinCertificateGUID) Write(w io.Writer) error {
	return binary.Write(w, binary.LittleEndian, c.toUefiType())
}

func (c *WinCertificateGUID) toUefiType() *uefi.WIN_CERTIFICATE_UEFI_GUID {
	cert := &uefi.WIN_CERTIFICATE_UEFI_GUID{
		CertType: uefi.EFI_GUID(c.Type),
		CertData: c.Data}
	cert.Hdr = uefi.WIN_CERTIFICATE{
		Length:          uint32(binary.Size(cert.Hdr) + binary.Size(cert.CertType) + len(c.Data)),
		Revision:        0x0200,
		CertificateType: uefi.WIN_CERT_TYPE_EFI_GUID}
	return cert
}

func newWinCertificateGUID(cert *uefi.WIN_CERTIFICATE_UEFI_GUID) *WinCertificateGUID {
	return &WinCertificateGUID{Type: GUID(cert.CertType), Data: cert.CertData}
}

// WinCertificateAuthenticode corresponds to an Authenticode signature.
type WinCertificateAuthenticode []byte

func (c WinCertificateAuthenticode) Write(w io.Writer) error {
	cert := uefi.WIN_CERTIFICATE_EFI_PKCS{CertData: c}
	cert.Hdr = uefi.WIN_CERTIFICATE{
		Length:          uint32(binary.Size(cert.Hdr) + len(c)),
		Revision:        0x0200,
		CertificateType: uefi.WIN_CERT_TYPE_PKCS_SIGNED_DATA}
	return binary.Write(w, binary.LittleEndian, &cert)
}

// ReadWinCertificate decodes a signature (something that is confusingly represented by types with "certificate" in the name in both
// the UEFI and PE/COFF specifications) from the supplied io.Reader and returns a WinCertificate of the appropriate type. The type
// returned is dependent on the data, and will be one of *WinCertificateAuthenticode, *WinCertificatePKCS1_15 or *WinCertificateGUID.
func ReadWinCertificate(r io.Reader) (WinCertificate, error) {
	var hdr uefi.WIN_CERTIFICATE
	if err := binary.Read(r, binary.LittleEndian, &hdr); err != nil {
		return nil, err
	}
	if hdr.Revision != 0x0200 {
		return nil, errors.New("unexpected revision")
	}

	switch hdr.CertificateType {
	case uefi.WIN_CERT_TYPE_PKCS_SIGNED_DATA:
		cert := uefi.WIN_CERTIFICATE_EFI_PKCS{Hdr: hdr}
		cert.CertData = make([]byte, int(cert.Hdr.Length)-binary.Size(cert.Hdr))
		if _, err := io.ReadFull(r, cert.CertData); err != nil {
			return nil, ioerr.EOFIsUnexpected("cannot read WIN_CERTIFICATE_EFI_PKCS: %w", err)
		}
		return WinCertificateAuthenticode(cert.CertData), nil
	case uefi.WIN_CERT_TYPE_EFI_PKCS115:
		cert := uefi.WIN_CERTIFICATE_EFI_PKCS1_15{Hdr: hdr}
		cert.Signature = make([]byte, int(cert.Hdr.Length)-binary.Size(cert.Hdr)-binary.Size(cert.HashAlgorithm))
		if _, err := io.ReadFull(r, cert.HashAlgorithm[:]); err != nil {
			return nil, ioerr.EOFIsUnexpected("cannot read WIN_CERTIFICATE_EFI_PKCS1_15: %w", err)
		}
		if _, err := io.ReadFull(r, cert.Signature); err != nil {
			return nil, ioerr.EOFIsUnexpected("cannot read WIN_CERTIFICATE_EFI_PKCS1_15: %w", err)
		}
		return &WinCertificatePKCS1v15{HashAlgorithm: GUID(cert.HashAlgorithm), Signature: cert.Signature}, nil
	case uefi.WIN_CERT_TYPE_EFI_GUID:
		cert := uefi.WIN_CERTIFICATE_UEFI_GUID{Hdr: hdr}
		cert.CertData = make([]byte, int(cert.Hdr.Length)-binary.Size(cert.Hdr)-binary.Size(cert.CertType))
		if _, err := io.ReadFull(r, cert.CertType[:]); err != nil {
			return nil, ioerr.EOFIsUnexpected("cannot read WIN_CERTIFICATE_UEFI_GUID: %w", err)
		}
		if _, err := io.ReadFull(r, cert.CertData); err != nil {
			return nil, ioerr.EOFIsUnexpected("cannot read WIN_CERTIFICATE_UEFI_GUID: %w", err)
		}
		return newWinCertificateGUID(&cert), nil
	default:
		return nil, errors.New("unexpected type")
	}
}
 07070100000279000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher  0707010000027A000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab 0707010000027B000081A4000000000000000000000001645E367C00000075000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/.travis.yml language: go

go:
  - 1.10.x
  - 1.9.x
  - 1.8.x
  - 1.7.x

script: make check

env:
  - GOARCH=amd64
  - GOARCH=386
   0707010000027C000081A4000000000000000000000001645E367C000005DC000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/LICENSE Copyright (c) 2017 Ryan Armstrong. All rights reserved.

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this
   list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.

3. Neither the name of the copyright holder nor the names of its contributors
   may be used to endorse or promote products derived from this software without
   specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
0707010000027D000081A4000000000000000000000001645E367C000001DE000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/Makefile    GO = go
GOGET = $(GO) get -u

all: check lint

check:
	cd cmd/grab && $(MAKE) -B all
	$(GO) test -cover -race ./...

install:
	$(GO) install -v ./...

clean:
	$(GO) clean -x ./...
	rm -rvf ./.test*

lint:
	gofmt -l -e -s . || :
	go vet . || :
	golint . || :
	gocyclo -over 15 . || :
	misspell ./* || :

deps:
	$(GOGET) github.com/golang/lint/golint
	$(GOGET) github.com/fzipp/gocyclo
	$(GOGET) github.com/client9/misspell/cmd/misspell

.PHONY: all check install clean lint deps
  0707010000027E000081A4000000000000000000000001645E367C00000FF2000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/README.md   # grab

[![GoDoc](https://godoc.org/github.com/cavaliercoder/grab?status.svg)](https://godoc.org/github.com/cavaliercoder/grab) [![Build Status](https://travis-ci.org/cavaliercoder/grab.svg?branch=master)](https://travis-ci.org/cavaliercoder/grab) [![Go Report Card](https://goreportcard.com/badge/github.com/cavaliercoder/grab)](https://goreportcard.com/report/github.com/cavaliercoder/grab)

*Downloading the internet, one goroutine at a time!*

	$ go get github.com/cavaliercoder/grab

Grab is a Go package for downloading files from the internet with the following
rad features:

* Monitor download progress concurrently
* Auto-resume incomplete downloads
* Guess filename from content header or URL path
* Safely cancel downloads using context.Context
* Validate downloads using checksums
* Download batches of files concurrently
* Apply rate limiters

Requires Go v1.7+

## Example

The following example downloads a PDF copy of the free eBook, "An Introduction
to Programming in Go" into the current working directory.

```go
resp, err := grab.Get(".", "http://www.golang-book.com/public/pdf/gobook.pdf")
if err != nil {
	log.Fatal(err)
}

fmt.Println("Download saved to", resp.Filename)
```

The following, more complete example allows for more granular control and
periodically prints the download progress until it is complete.

The second time you run the example, it will auto-resume the previous download
and exit sooner.

```go
package main

import (
	"fmt"
	"os"
	"time"

	"github.com/cavaliercoder/grab"
)

func main() {
	// create client
	client := grab.NewClient()
	req, _ := grab.NewRequest(".", "http://www.golang-book.com/public/pdf/gobook.pdf")

	// start download
	fmt.Printf("Downloading %v...\n", req.URL())
	resp := client.Do(req)
	fmt.Printf("  %v\n", resp.HTTPResponse.Status)

	// start UI loop
	t := time.NewTicker(500 * time.Millisecond)
	defer t.Stop()

Loop:
	for {
		select {
		case <-t.C:
			fmt.Printf("  transferred %v / %v bytes (%.2f%%)\n",
				resp.BytesComplete(),
				resp.Size,
				100*resp.Progress())

		case <-resp.Done:
			// download is complete
			break Loop
		}
	}

	// check for errors
	if err := resp.Err(); err != nil {
		fmt.Fprintf(os.Stderr, "Download failed: %v\n", err)
		os.Exit(1)
	}

	fmt.Printf("Download saved to ./%v \n", resp.Filename)

	// Output:
	// Downloading http://www.golang-book.com/public/pdf/gobook.pdf...
	//   200 OK
	//   transferred 42970 / 2893557 bytes (1.49%)
	//   transferred 1207474 / 2893557 bytes (41.73%)
	//   transferred 2758210 / 2893557 bytes (95.32%)
	// Download saved to ./gobook.pdf
}
```

## Design trade-offs

The primary use case for Grab is to concurrently downloading thousands of large
files from remote file repositories where the remote files are immutable.
Examples include operating system package repositories or ISO libraries.

Grab aims to provide robust, sane defaults. These are usually determined using
the HTTP specifications, or by mimicking the behavior of common web clients like
cURL, wget and common web browsers.

Grab aims to be stateless. The only state that exists is the remote files you
wish to download and the local copy which may be completed, partially completed
or not yet created. The advantage to this is that the local file system is not
cluttered unnecessarily with addition state files (like a `.crdownload` file).
The disadvantage of this approach is that grab must make assumptions about the
local and remote state; specifically, that they have not been modified by
another program.

If the local or remote file are modified outside of grab, and you download the
file again with resuming enabled, the local file will likely become corrupted.
In this case, you might consider making remote files immutable, or disabling
resume.

Grab aims to enable best-in-class functionality for more complex features
through extensible interfaces, rather than reimplementation. For example,
you can provide your own Hash algorithm to compute file checksums, or your
own rate limiter implementation (with all the associated trade-offs) to rate
limit downloads.
  0707010000027F000081A4000000000000000000000001645E367C000032F4000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/client.go   package grab

import (
	"bytes"
	"context"
	"fmt"
	"net/http"
	"os"
	"path/filepath"
	"sync"
	"time"
)

// A Client is a file download client.
//
// Clients are safe for concurrent use by multiple goroutines.
type Client struct {
	// HTTPClient specifies the http.Client which will be used for communicating
	// with the remote server during the file transfer.
	HTTPClient *http.Client

	// UserAgent specifies the User-Agent string which will be set in the
	// headers of all requests made by this client.
	//
	// The user agent string may be overridden in the headers of each request.
	UserAgent string

	// BufferSize specifies the size in bytes of the buffer that is used for
	// transferring all requested files. Larger buffers may result in faster
	// throughput but will use more memory and result in less frequent updates
	// to the transfer progress statistics. The BufferSize of each request can
	// be overridden on each Request object. Default: 32KB.
	BufferSize int
}

// NewClient returns a new file download Client, using default configuration.
func NewClient() *Client {
	return &Client{
		UserAgent: "grab",
		HTTPClient: &http.Client{
			Transport: &http.Transport{
				Proxy: http.ProxyFromEnvironment,
			},
		},
	}
}

// DefaultClient is the default client and is used by all Get convenience
// functions.
var DefaultClient = NewClient()

// Do sends a file transfer request and returns a file transfer response,
// following policy (e.g. redirects, cookies, auth) as configured on the
// client's HTTPClient.
//
// Like http.Get, Do blocks while the transfer is initiated, but returns as soon
// as the transfer has started transferring in a background goroutine, or if it
// failed early.
//
// An error is returned via Response.Err if caused by client policy (such as
// CheckRedirect), or if there was an HTTP protocol or IO error. Response.Err
// will block the caller until the transfer is completed, successfully or
// otherwise.
func (c *Client) Do(req *Request) *Response {
	// cancel will be called on all code-paths via closeResponse
	ctx, cancel := context.WithCancel(req.Context())
	resp := &Response{
		Request:    req,
		Start:      time.Now(),
		Done:       make(chan struct{}, 0),
		Filename:   req.Filename,
		ctx:        ctx,
		cancel:     cancel,
		bufferSize: req.BufferSize,
	}
	if resp.bufferSize == 0 {
		// default to Client.BufferSize
		resp.bufferSize = c.BufferSize
	}

	// Run state-machine while caller is blocked to initialize the file transfer.
	// Must never transition to the copyFile state - this happens next in another
	// goroutine.
	c.run(resp, c.statFileInfo)

	// Run copyFile in a new goroutine. copyFile will no-op if the transfer is
	// already complete or failed.
	go c.run(resp, c.copyFile)
	return resp
}

// DoChannel executes all requests sent through the given Request channel, one
// at a time, until it is closed by another goroutine. The caller is blocked
// until the Request channel is closed and all transfers have completed. All
// responses are sent through the given Response channel as soon as they are
// received from the remote servers and can be used to track the progress of
// each download.
//
// Slow Response receivers will cause a worker to block and therefore delay the
// start of the transfer for an already initiated connection - potentially
// causing a server timeout. It is the caller's responsibility to ensure a
// sufficient buffer size is used for the Response channel to prevent this.
//
// If an error occurs during any of the file transfers it will be accessible via
// the associated Response.Err function.
func (c *Client) DoChannel(reqch <-chan *Request, respch chan<- *Response) {
	// TODO: enable cancelling of batch jobs
	for req := range reqch {
		resp := c.Do(req)
		respch <- resp
		<-resp.Done
	}
}

// DoBatch executes all the given requests using the given number of concurrent
// workers. Control is passed back to the caller as soon as the workers are
// initiated.
//
// If the requested number of workers is less than one, a worker will be created
// for every request. I.e. all requests will be executed concurrently.
//
// If an error occurs during any of the file transfers it will be accessible via
// call to the associated Response.Err.
//
// The returned Response channel is closed only after all of the given Requests
// have completed, successfully or otherwise.
func (c *Client) DoBatch(workers int, requests ...*Request) <-chan *Response {
	if workers < 1 {
		workers = len(requests)
	}
	reqch := make(chan *Request, len(requests))
	respch := make(chan *Response, len(requests))
	wg := sync.WaitGroup{}
	for i := 0; i < workers; i++ {
		wg.Add(1)
		go func() {
			c.DoChannel(reqch, respch)
			wg.Done()
		}()
	}

	// queue requests
	go func() {
		for _, req := range requests {
			reqch <- req
		}
		close(reqch)
		wg.Wait()
		close(respch)
	}()
	return respch
}

// An stateFunc is an action that mutates the state of a Response and returns
// the next stateFunc to be called.
type stateFunc func(*Response) stateFunc

// run calls the given stateFunc function and all subsequent returned stateFuncs
// until a stateFunc returns nil or the Response.ctx is canceled. Each stateFunc
// should mutate the state of the given Response until it has completed
// downloading or failed.
func (c *Client) run(resp *Response, f stateFunc) {
	for {
		select {
		case <-resp.ctx.Done():
			if resp.IsComplete() {
				return
			}
			resp.err = resp.ctx.Err()
			f = c.closeResponse

		default:
			// keep working
		}
		if f = f(resp); f == nil {
			return
		}
	}
}

// statFileInfo retrieves FileInfo for any local file matching
// Response.Filename.
//
// If the file does not exist, is a directory, or its name is unknown the next
// stateFunc is headRequest.
//
// If the file exists, Response.fi is set and the next stateFunc is
// validateLocal.
//
// If an error occurs, the next stateFunc is closeResponse.
func (c *Client) statFileInfo(resp *Response) stateFunc {
	if resp.Filename == "" {
		return c.headRequest
	}
	fi, err := os.Stat(resp.Filename)
	if err != nil {
		if os.IsNotExist(err) {
			return c.headRequest
		}
		resp.err = err
		return c.closeResponse
	}
	if fi.IsDir() {
		resp.Filename = ""
		return c.headRequest
	}
	resp.fi = fi
	return c.validateLocal
}

// validateLocal compares a local copy of the downloaded file to the remote
// file.
//
// An error is returned if the local file is larger than the remote file, or
// Request.SkipExisting is true.
//
// If the existing file matches the length of the remote file, the next
// stateFunc is checksumFile.
//
// If the local file is smaller than the remote file and the remote server is
// known to support ranged requests, the next stateFunc is getRequest.
func (c *Client) validateLocal(resp *Response) stateFunc {
	if resp.Request.SkipExisting {
		resp.err = ErrFileExists
		return c.closeResponse
	}

	// determine expected file size
	size := resp.Request.Size
	if size == 0 && resp.HTTPResponse != nil {
		size = resp.HTTPResponse.ContentLength
	}
	if size == 0 {
		return c.headRequest
	}

	if size == resp.fi.Size() {
		resp.DidResume = true
		resp.bytesResumed = resp.fi.Size()
		return c.checksumFile
	}

	if resp.Request.NoResume {
		return c.getRequest
	}

	if size < resp.fi.Size() {
		resp.err = ErrBadLength
		return c.closeResponse
	}

	if resp.CanResume {
		resp.Request.HTTPRequest.Header.Set(
			"Range",
			fmt.Sprintf("bytes=%d-", resp.fi.Size()))
		resp.DidResume = true
		resp.bytesResumed = resp.fi.Size()
		return c.getRequest
	}
	return c.headRequest
}

func (c *Client) checksumFile(resp *Response) stateFunc {
	if resp.Request.hash == nil {
		return c.closeResponse
	}
	if resp.Filename == "" {
		panic("filename not set")
	}
	req := resp.Request

	// compare checksum
	var sum []byte
	sum, resp.err = checksum(req.Context(), resp.Filename, req.hash)
	if resp.err != nil {
		return c.closeResponse
	}
	if !bytes.Equal(sum, req.checksum) {
		resp.err = ErrBadChecksum
		if req.deleteOnError {
			if err := os.Remove(resp.Filename); err != nil {
				// err should be os.PathError and include file path
				resp.err = fmt.Errorf(
					"cannot remove downloaded file with checksum mismatch: %v",
					err)
			}
		}
	}
	return c.closeResponse
}

// doHTTPRequest sends a HTTP Request and returns the response
func (c *Client) doHTTPRequest(req *http.Request) (*http.Response, error) {
	if c.UserAgent != "" && req.Header.Get("User-Agent") == "" {
		req.Header.Set("User-Agent", c.UserAgent)
	}
	return c.HTTPClient.Do(req)
}

func (c *Client) headRequest(resp *Response) stateFunc {
	if resp.optionsKnown {
		return c.getRequest
	}
	resp.optionsKnown = true

	if resp.Request.NoResume {
		return c.getRequest
	}

	if resp.Filename != "" && resp.fi == nil {
		// destination path is already known and does not exist
		return c.getRequest
	}

	hreq := new(http.Request)
	*hreq = *resp.Request.HTTPRequest
	hreq.Method = "HEAD"

	resp.HTTPResponse, resp.err = c.doHTTPRequest(hreq)
	if resp.err != nil {
		return c.closeResponse
	}
	resp.HTTPResponse.Body.Close()

	if resp.HTTPResponse.StatusCode != http.StatusOK {
		return c.getRequest
	}

	return c.readResponse
}

func (c *Client) getRequest(resp *Response) stateFunc {
	resp.HTTPResponse, resp.err = c.doHTTPRequest(resp.Request.HTTPRequest)
	if resp.err != nil {
		return c.closeResponse
	}

	// check status code
	if !resp.Request.IgnoreBadStatusCodes {
		if resp.HTTPResponse.StatusCode < 200 || resp.HTTPResponse.StatusCode > 299 {
			resp.err = StatusCodeError(resp.HTTPResponse.StatusCode)
			return c.closeResponse
		}
	}

	return c.readResponse
}

func (c *Client) readResponse(resp *Response) stateFunc {
	if resp.HTTPResponse == nil {
		panic("Response.HTTPResponse is not ready")
	}

	// check expected size
	resp.Size = resp.bytesResumed + resp.HTTPResponse.ContentLength
	if resp.HTTPResponse.ContentLength > 0 && resp.Request.Size > 0 {
		if resp.Request.Size != resp.Size {
			resp.err = ErrBadLength
			return c.closeResponse
		}
	}

	// check filename
	if resp.Filename == "" {
		filename, err := guessFilename(resp.HTTPResponse)
		if err != nil {
			resp.err = err
			return c.closeResponse
		}
		// Request.Filename will be empty or a directory
		resp.Filename = filepath.Join(resp.Request.Filename, filename)
	}

	if resp.requestMethod() == "HEAD" {
		if resp.HTTPResponse.Header.Get("Accept-Ranges") == "bytes" {
			resp.CanResume = true
		}
		return c.statFileInfo
	}
	return c.openWriter
}

// openWriter opens the destination file for writing and seeks to the location
// from whence the file transfer will resume.
//
// Requires that Response.Filename and resp.DidResume are already be set.
func (c *Client) openWriter(resp *Response) stateFunc {
	if !resp.Request.NoCreateDirectories {
		resp.err = mkdirp(resp.Filename)
		if resp.err != nil {
			return c.closeResponse
		}
	}

	// compute write flags
	flag := os.O_CREATE | os.O_WRONLY
	if resp.fi != nil {
		if resp.DidResume {
			flag = os.O_APPEND | os.O_WRONLY
		} else {
			flag = os.O_TRUNC | os.O_WRONLY
		}
	}

	// open file
	f, err := os.OpenFile(resp.Filename, flag, 0644)
	if err != nil {
		resp.err = err
		return c.closeResponse
	}
	resp.writer = f

	// seek to start or end
	whence := os.SEEK_SET
	if resp.bytesResumed > 0 {
		whence = os.SEEK_END
	}
	_, resp.err = f.Seek(0, whence)
	if resp.err != nil {
		return c.closeResponse
	}

	// init transfer
	if resp.bufferSize < 1 {
		resp.bufferSize = 32 * 1024
	}
	b := make([]byte, resp.bufferSize)
	resp.transfer = newTransfer(
		resp.Request.Context(),
		resp.Request.RateLimiter,
		resp.writer,
		resp.HTTPResponse.Body,
		b)

	// next step is copyFile, but this will be called later in another goroutine
	return nil
}

// copy transfers content for a HTTP connection established via Client.do()
func (c *Client) copyFile(resp *Response) stateFunc {
	if resp.IsComplete() {
		return nil
	}

	// run BeforeCopy hook
	if f := resp.Request.BeforeCopy; f != nil {
		resp.err = f(resp)
		if resp.err != nil {
			return c.closeResponse
		}
	}

	if resp.transfer == nil {
		panic("developer error: Response.transfer is not initialized")
	}
	go resp.watchBps()
	_, resp.err = resp.transfer.copy()
	if resp.err != nil {
		return c.closeResponse
	}
	closeWriter(resp)

	// set timestamp
	if !resp.Request.IgnoreRemoteTime {
		resp.err = setLastModified(resp.HTTPResponse, resp.Filename)
		if resp.err != nil {
			return c.closeResponse
		}
	}

	// run AfterCopy hook
	if f := resp.Request.AfterCopy; f != nil {
		resp.err = f(resp)
		if resp.err != nil {
			return c.closeResponse
		}
	}

	return c.checksumFile
}

func closeWriter(resp *Response) {
	if resp.writer != nil {
		resp.writer.Close()
		resp.writer = nil
	}
}

// close finalizes the Response
func (c *Client) closeResponse(resp *Response) stateFunc {
	if resp.IsComplete() {
		panic("response already closed")
	}

	resp.fi = nil
	closeWriter(resp)
	resp.closeResponseBody()

	resp.End = time.Now()
	close(resp.Done)
	if resp.cancel != nil {
		resp.cancel()
	}

	return nil
}
07070100000280000081A4000000000000000000000001645E367C0000072A000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/doc.go  /*
Package grab provides a HTTP download manager implementation.

Get is the most simple way to download a file:

	resp, err := grab.Get("/tmp", "http://example.com/example.zip")
	// ...

Get will download the given URL and save it to the given destination directory.
The destination filename will be determined automatically by grab using
Content-Disposition headers returned by the remote server, or by inspecting the
requested URL path.

An empty destination string or "." means the transfer will be stored in the
current working directory.

If a destination file already exists, grab will assume it is a complete or
partially complete download of the requested file. If the remote server supports
resuming interrupted downloads, grab will resume downloading from the end of the
partial file. If the server does not support resumed downloads, the file will be
retransferred in its entirety. If the file is already complete, grab will return
successfully.

For control over the HTTP client, destination path, auto-resume, checksum
validation and other settings, create a Client:

	client := grab.NewClient()
	client.HTTPClient.Transport.DisableCompression = true

	req, err := grab.NewRequest("/tmp", "http://example.com/example.zip")
	// ...
	req.NoResume = true
	req.HTTPRequest.Header.Set("Authorization", "Basic YWxhZGRpbjpvcGVuc2VzYW1l")

	resp := client.Do(req)
	// ...

You can monitor the progress of downloads while they are transferring:

	client := grab.NewClient()
	req, err := grab.NewRequest("", "http://example.com/example.zip")
	// ...
	resp := client.Do(req)

	t := time.NewTicker(time.Second)
	defer t.Stop()

	for {
		select {
		case <-t.C:
			fmt.Printf("%.02f%% complete\n", resp.Progress())

		case <-resp.Done:
			if err := resp.Err(); err != nil {
				// ...
			}

			// ...
			return
		}
	}
*/
package grab
  07070100000281000081A4000000000000000000000001645E367C00000568000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/error.go    package grab

import (
	"errors"
	"fmt"
	"net/http"
)

var (
	// ErrBadLength indicates that the server response or an existing file does
	// not match the expected content length.
	ErrBadLength = errors.New("bad content length")

	// ErrBadChecksum indicates that a downloaded file failed to pass checksum
	// validation.
	ErrBadChecksum = errors.New("checksum mismatch")

	// ErrNoFilename indicates that a reasonable filename could not be
	// automatically determined using the URL or response headers from a server.
	ErrNoFilename = errors.New("no filename could be determined")

	// ErrNoTimestamp indicates that a timestamp could not be automatically
	// determined using the response headers from the remote server.
	ErrNoTimestamp = errors.New("no timestamp could be determined for the remote file")

	// ErrFileExists indicates that the destination path already exists.
	ErrFileExists = errors.New("file exists")
)

// StatusCodeError indicates that the server response had a status code that
// was not in the 200-299 range (after following any redirects).
type StatusCodeError int

func (err StatusCodeError) Error() string {
	return fmt.Sprintf("server returned %d %s", err, http.StatusText(int(err)))
}

// IsStatusCodeError returns true if the given error is of type StatusCodeError.
func IsStatusCodeError(err error) bool {
	_, ok := err.(StatusCodeError)
	return ok
}
07070100000282000081A4000000000000000000000001645E367C0000078B000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/grab.go package grab

import (
	"fmt"
	"os"
)

// Get sends a HTTP request and downloads the content of the requested URL to
// the given destination file path. The caller is blocked until the download is
// completed, successfully or otherwise.
//
// An error is returned if caused by client policy (such as CheckRedirect), or
// if there was an HTTP protocol or IO error.
//
// For non-blocking calls or control over HTTP client headers, redirect policy,
// and other settings, create a Client instead.
func Get(dst, urlStr string) (*Response, error) {
	req, err := NewRequest(dst, urlStr)
	if err != nil {
		return nil, err
	}

	resp := DefaultClient.Do(req)
	return resp, resp.Err()
}

// GetBatch sends multiple HTTP requests and downloads the content of the
// requested URLs to the given destination directory using the given number of
// concurrent worker goroutines.
//
// The Response for each requested URL is sent through the returned Response
// channel, as soon as a worker receives a response from the remote server. The
// Response can then be used to track the progress of the download while it is
// in progress.
//
// The returned Response channel will be closed by Grab, only once all downloads
// have completed or failed.
//
// If an error occurs during any download, it will be available via call to the
// associated Response.Err.
//
// For control over HTTP client headers, redirect policy, and other settings,
// create a Client instead.
func GetBatch(workers int, dst string, urlStrs ...string) (<-chan *Response, error) {
	fi, err := os.Stat(dst)
	if err != nil {
		return nil, err
	}
	if !fi.IsDir() {
		return nil, fmt.Errorf("destination is not a directory")
	}

	reqs := make([]*Request, len(urlStrs))
	for i := 0; i < len(urlStrs); i++ {
		req, err := NewRequest(dst, urlStrs[i])
		if err != nil {
			return nil, err
		}
		reqs[i] = req
	}

	ch := DefaultClient.DoBatch(workers, reqs...)
	return ch, nil
}
 07070100000283000081A4000000000000000000000001645E367C00000171000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/rate_limiter.go package grab

import "context"

// RateLimiter is an interface that must be satisfied by any third-party rate
// limiters that may be used to limit download transfer speeds.
//
// A recommended token bucket implementation can be found at
// https://godoc.org/golang.org/x/time/rate#Limiter.
type RateLimiter interface {
	WaitN(ctx context.Context, n int) (err error)
}
   07070100000284000081A4000000000000000000000001645E367C0000177D000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/request.go  package grab

import (
	"context"
	"hash"
	"net/http"
	"net/url"
)

// A Hook is a user provided callback function that can be called by grab at
// various stages of a requests lifecycle. If a hook returns an error, the
// associated request is canceled and the same error is returned on the Response
// object.
//
// Hook functions are called synchronously and should never block unnecessarily.
// Response methods that block until a download is complete, such as
// Response.Err, Response.Cancel or Response.Wait will deadlock. To cancel a
// download from a callback, simply return a non-nil error.
type Hook func(*Response) error

// A Request represents an HTTP file transfer request to be sent by a Client.
type Request struct {
	// Label is an arbitrary string which may used to label a Request with a
	// user friendly name.
	Label string

	// Tag is an arbitrary interface which may be used to relate a Request to
	// other data.
	Tag interface{}

	// HTTPRequest specifies the http.Request to be sent to the remote server to
	// initiate a file transfer. It includes request configuration such as URL,
	// protocol version, HTTP method, request headers and authentication.
	HTTPRequest *http.Request

	// Filename specifies the path where the file transfer will be stored in
	// local storage. If Filename is empty or a directory, the true Filename will
	// be resolved using Content-Disposition headers or the request URL.
	//
	// An empty string means the transfer will be stored in the current working
	// directory.
	Filename string

	// SkipExisting specifies that ErrFileExists should be returned if the
	// destination path already exists. The existing file will not be checked for
	// completeness.
	SkipExisting bool

	// NoResume specifies that a partially completed download will be restarted
	// without attempting to resume any existing file. If the download is already
	// completed in full, it will not be restarted.
	NoResume bool

	// NoCreateDirectories specifies that any missing directories in the given
	// Filename path should not be created automatically, if they do not already
	// exist.
	NoCreateDirectories bool

	// IgnoreBadStatusCodes specifies that grab should accept any status code in
	// the response from the remote server. Otherwise, grab expects the response
	// status code to be within the 2XX range (after following redirects).
	IgnoreBadStatusCodes bool

	// IgnoreRemoteTime specifies that grab should not attempt to set the
	// timestamp of the local file to match the remote file.
	IgnoreRemoteTime bool

	// Size specifies the expected size of the file transfer if known. If the
	// server response size does not match, the transfer is cancelled and
	// ErrBadLength returned.
	Size int64

	// BufferSize specifies the size in bytes of the buffer that is used for
	// transferring the requested file. Larger buffers may result in faster
	// throughput but will use more memory and result in less frequent updates
	// to the transfer progress statistics. If a RateLimiter is configured,
	// BufferSize should be much lower than the rate limit. Default: 32KB.
	BufferSize int

	// RateLimiter allows the transfer rate of a download to be limited. The given
	// Request.BufferSize determines how frequently the RateLimiter will be
	// polled.
	RateLimiter RateLimiter

	// BeforeCopy is a user provided callback that is called immediately before
	// a request starts downloading. If BeforeCopy returns an error, the request
	// is cancelled and the same error is returned on the Response object.
	BeforeCopy Hook

	// AfterCopy is a user provided callback that is called immediately after a
	// request has finished downloading, before checksum validation and closure.
	// This hook is only called if the transfer was successful. If AfterCopy
	// returns an error, the request is canceled and the same error is returned on
	// the Response object.
	AfterCopy Hook

	// hash, checksum and deleteOnError - set via SetChecksum.
	hash          hash.Hash
	checksum      []byte
	deleteOnError bool

	// Context for cancellation and timeout - set via WithContext
	ctx context.Context
}

// NewRequest returns a new file transfer Request suitable for use with
// Client.Do.
func NewRequest(dst, urlStr string) (*Request, error) {
	if dst == "" {
		dst = "."
	}
	req, err := http.NewRequest("GET", urlStr, nil)
	if err != nil {
		return nil, err
	}
	return &Request{
		HTTPRequest: req,
		Filename:    dst,
	}, nil
}

// Context returns the request's context. To change the context, use
// WithContext.
//
// The returned context is always non-nil; it defaults to the background
// context.
//
// The context controls cancelation.
func (r *Request) Context() context.Context {
	if r.ctx != nil {
		return r.ctx
	}

	return context.Background()
}

// WithContext returns a shallow copy of r with its context changed
// to ctx. The provided ctx must be non-nil.
func (r *Request) WithContext(ctx context.Context) *Request {
	if ctx == nil {
		panic("nil context")
	}
	r2 := new(Request)
	*r2 = *r
	r2.ctx = ctx
	r2.HTTPRequest = r2.HTTPRequest.WithContext(ctx)
	return r2
}

// URL returns the URL to be downloaded.
func (r *Request) URL() *url.URL {
	return r.HTTPRequest.URL
}

// SetChecksum sets the desired hashing algorithm and checksum value to validate
// a downloaded file. Once the download is complete, the given hashing algorithm
// will be used to compute the actual checksum of the downloaded file. If the
// checksums do not match, an error will be returned by the associated
// Response.Err method.
//
// If deleteOnError is true, the downloaded file will be deleted automatically
// if it fails checksum validation.
//
// To prevent corruption of the computed checksum, the given hash must not be
// used by any other request or goroutines.
//
// To disable checksum validation, call SetChecksum with a nil hash.
func (r *Request) SetChecksum(h hash.Hash, sum []byte, deleteOnError bool) {
	r.hash = h
	r.checksum = sum
	r.deleteOnError = deleteOnError
}
   07070100000285000081A4000000000000000000000001645E367C0000183B000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/response.go package grab

import (
	"context"
	"io"
	"net/http"
	"os"
	"sync"
	"time"
)

// Response represents the response to a completed or in-progress download
// request.
//
// A response may be returned as soon a HTTP response is received from a remote
// server, but before the body content has started transferring.
//
// All Response method calls are thread-safe.
type Response struct {
	// The Request that was submitted to obtain this Response.
	Request *Request

	// HTTPResponse represents the HTTP response received from an HTTP request.
	//
	// The response Body should not be used as it will be consumed and closed by
	// grab.
	HTTPResponse *http.Response

	// Filename specifies the path where the file transfer is stored in local
	// storage.
	Filename string

	// Size specifies the total expected size of the file transfer.
	Size int64

	// Start specifies the time at which the file transfer started.
	Start time.Time

	// End specifies the time at which the file transfer completed.
	//
	// This will return zero until the transfer has completed.
	End time.Time

	// CanResume specifies that the remote server advertised that it can resume
	// previous downloads, as the 'Accept-Ranges: bytes' header is set.
	CanResume bool

	// DidResume specifies that the file transfer resumed a previously incomplete
	// transfer.
	DidResume bool

	// Done is closed once the transfer is finalized, either successfully or with
	// errors. Errors are available via Response.Err
	Done chan struct{}

	// ctx is a Context that controls cancelation of an inprogress transfer
	ctx context.Context

	// cancel is a cancel func that can be used to cancel the context of this
	// Response.
	cancel context.CancelFunc

	// fi is the FileInfo for the destination file if it already existed before
	// transfer started.
	fi os.FileInfo

	// optionsKnown indicates that a HEAD request has been completed and the
	// capabilities of the remote server are known.
	optionsKnown bool

	// writer is the file handle used to write the downloaded file to local
	// storage
	writer io.WriteCloser

	// bytesCompleted specifies the number of bytes which were already
	// transferred before this transfer began.
	bytesResumed int64

	// transfer is responsible for copying data from the remote server to a local
	// file, tracking progress and allowing for cancelation.
	transfer *transfer

	// bytesPerSecond specifies the number of bytes that have been transferred in
	// the last 1-second window.
	bytesPerSecond   float64
	bytesPerSecondMu sync.Mutex

	// bufferSize specifies the size in bytes of the transfer buffer.
	bufferSize int

	// Error contains any error that may have occurred during the file transfer.
	// This should not be read until IsComplete returns true.
	err error
}

// IsComplete returns true if the download has completed. If an error occurred
// during the download, it can be returned via Err.
func (c *Response) IsComplete() bool {
	select {
	case <-c.Done:
		return true
	default:
		return false
	}
}

// Cancel cancels the file transfer by canceling the underlying Context for
// this Response. Cancel blocks until the transfer is closed and returns any
// error - typically context.Canceled.
func (c *Response) Cancel() error {
	c.cancel()
	return c.Err()
}

// Wait blocks until the download is completed.
func (c *Response) Wait() {
	<-c.Done
}

// Err blocks the calling goroutine until the underlying file transfer is
// completed and returns any error that may have occurred. If the download is
// already completed, Err returns immediately.
func (c *Response) Err() error {
	<-c.Done
	return c.err
}

// BytesComplete returns the total number of bytes which have been copied to
// the destination, including any bytes that were resumed from a previous
// download.
func (c *Response) BytesComplete() int64 {
	return c.bytesResumed + c.transfer.N()
}

// BytesPerSecond returns the number of bytes transferred in the last second. If
// the download is already complete, the average bytes/sec for the life of the
// download is returned.
func (c *Response) BytesPerSecond() float64 {
	if c.IsComplete() {
		return float64(c.transfer.N()) / c.Duration().Seconds()
	}
	c.bytesPerSecondMu.Lock()
	defer c.bytesPerSecondMu.Unlock()
	return c.bytesPerSecond
}

// Progress returns the ratio of total bytes that have been downloaded. Multiply
// the returned value by 100 to return the percentage completed.
func (c *Response) Progress() float64 {
	if c.Size == 0 {
		return 0
	}
	return float64(c.BytesComplete()) / float64(c.Size)
}

// Duration returns the duration of a file transfer. If the transfer is in
// process, the duration will be between now and the start of the transfer. If
// the transfer is complete, the duration will be between the start and end of
// the completed transfer process.
func (c *Response) Duration() time.Duration {
	if c.IsComplete() {
		return c.End.Sub(c.Start)
	}

	return time.Now().Sub(c.Start)
}

// ETA returns the estimated time at which the the download will complete, given
// the current BytesPerSecond. If the transfer has already completed, the actual
// end time will be returned.
func (c *Response) ETA() time.Time {
	if c.IsComplete() {
		return c.End
	}
	bt := c.BytesComplete()
	bps := c.BytesPerSecond()
	if bps == 0 {
		return time.Time{}
	}
	secs := float64(c.Size-bt) / bps
	return time.Now().Add(time.Duration(secs) * time.Second)
}

// watchBps watches the progress of a transfer and maintains statistics.
func (c *Response) watchBps() {
	var prev int64
	then := c.Start

	t := time.NewTicker(time.Second)
	defer t.Stop()

	for {
		select {
		case <-c.Done:
			return

		case now := <-t.C:
			d := now.Sub(then)
			then = now

			cur := c.transfer.N()
			bs := cur - prev
			prev = cur

			c.bytesPerSecondMu.Lock()
			c.bytesPerSecond = float64(bs) / d.Seconds()
			c.bytesPerSecondMu.Unlock()
		}
	}
}

func (c *Response) requestMethod() string {
	if c == nil || c.HTTPResponse == nil || c.HTTPResponse.Request == nil {
		return ""
	}
	return c.HTTPResponse.Request.Method
}

func (c *Response) closeResponseBody() error {
	if c.HTTPResponse == nil || c.HTTPResponse.Body == nil {
		return nil
	}
	return c.HTTPResponse.Body.Close()
}
 07070100000286000081A4000000000000000000000001645E367C000008E2000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/states.wsd  @startuml
title Grab transfer state

legend
| # | Meaning |
| D | Destination path known |
| S | File size known |
| O | Server options known (Accept-Ranges) |
| R | Resume supported (Accept-Ranges) |
| Z | Local file empty or missing |
| P | Local file partially complete |
endlegend

[*] --> Empty
[*] --> D
[*] --> S
[*] --> DS

Empty : Filename: ""
Empty : Size: 0
Empty --> O : HEAD: Method not allowed
Empty --> DSO : HEAD: Range not supported
Empty --> DSOR : HEAD: Range supported

DS : Filename: "foo.bar"
DS : Size: > 0
DS --> DSZ : checkExisting(): File missing
DS --> DSP : checkExisting(): File partial
DS --> [*] : checkExisting(): File complete
DS --> ERROR

S : Filename: ""
S : Size: > 0
S --> SO : HEAD: Method not allowed
S --> DSO : HEAD: Range not supported
S --> DSOR : HEAD: Range supported

D : Filename: "foo.bar"
D : Size: 0
D --> DO : HEAD: Method not allowed
D --> DSO : HEAD: Range not supported
D --> DSOR : HEAD: Range supported


O : Filename: ""
O : Size: 0
O : CanResume: false
O --> DSO : GET 200
O --> ERROR

SO : Filename: ""
SO : Size: > 0
SO : CanResume: false
SO --> DSO : GET: 200
SO --> ERROR

DO : Filename: "foo.bar"
DO : Size: 0
DO : CanResume: false
DO --> DSO : GET 200
DO --> ERROR

DSZ : Filename: "foo.bar"
DSZ : Size: > 0
DSZ : File: empty
DSZ --> DSORZ : HEAD: Range supported
DSZ --> DSOZ : HEAD 405 or Range unsupported

DSP : Filename: "foo.bar"
DSP : Size: > 0
DSP : File: partial
DSP --> DSORP : HEAD: Range supported
DSP --> DSOZ : HEAD: 405 or Range unsupported

DSO : Filename: "foo.bar"
DSO : Size: > 0
DSO : CanResume: false
DSO --> DSOZ : checkExisting(): File partial|missing
DSO --> [*] : checkExisting(): File complete

DSOR : Filename: "foo.bar"
DSOR : Size: > 0
DSOR : CanResume: true
DSOR --> DSORP : CheckLocal: File partial
DSOR --> DSORZ : CheckLocal: File missing

DSORP : Filename: "foo.bar"
DSORP : Size: > 0
DSORP : CanResume: true
DSORP : File: partial
DSORP --> Transferring

DSORZ : Filename: "foo.bar"
DSORZ : Size: > 0
DSORZ : CanResume: true
DSORZ : File: empty
DSORZ --> Transferring

DSOZ : Filename: "foo.bar"
DSOZ : Size: > 0
DSOZ : CanResume: false
DSOZ : File: empty
DSOZ --> Transferring

Transferring --> [*]
Transferring --> ERROR

ERROR : Something went wrong
ERROR --> [*]

@enduml  07070100000287000081A4000000000000000000000001645E367C00000561000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/transfer.go package grab

import (
	"context"
	"io"
	"sync/atomic"
)

type transfer struct {
	n   int64 // must be 64bit aligned on 386
	ctx context.Context
	lim RateLimiter
	w   io.Writer
	r   io.Reader
	b   []byte
}

func newTransfer(ctx context.Context, lim RateLimiter, dst io.Writer, src io.Reader, buf []byte) *transfer {
	return &transfer{
		ctx: ctx,
		lim: lim,
		w:   dst,
		r:   src,
		b:   buf,
	}
}

// copy behaves similarly to io.CopyBuffer except that it checks for cancelation
// of the given context.Context and reports progress in a thread-safe manner.
func (c *transfer) copy() (written int64, err error) {
	if c.b == nil {
		c.b = make([]byte, 32*1024)
	}
	for {
		select {
		case <-c.ctx.Done():
			err = c.ctx.Err()
			return
		default:
			// keep working
		}
		if c.lim != nil {
			err = c.lim.WaitN(c.ctx, len(c.b))
			if err != nil {
				return
			}
		}
		nr, er := c.r.Read(c.b)
		if nr > 0 {
			nw, ew := c.w.Write(c.b[0:nr])
			if nw > 0 {
				written += int64(nw)
				atomic.StoreInt64(&c.n, written)
			}
			if ew != nil {
				err = ew
				break
			}
			if nr != nw {
				err = io.ErrShortWrite
				break
			}
		}
		if er != nil {
			if er != io.EOF {
				err = er
			}
			break
		}
	}
	return written, err
}

// N returns the number of bytes transferred.
func (c *transfer) N() (n int64) {
	if c == nil {
		return 0
	}
	n = atomic.LoadInt64(&c.n)
	return
}
   07070100000288000081A4000000000000000000000001645E367C000008C3000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/util.go package grab

import (
	"context"
	"fmt"
	"hash"
	"mime"
	"net/http"
	"os"
	"path"
	"path/filepath"
	"strings"
	"time"
)

// setLastModified sets the last modified timestamp of a local file according to
// the Last-Modified header returned by a remote server.
func setLastModified(resp *http.Response, filename string) error {
	// https://tools.ietf.org/html/rfc7232#section-2.2
	// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified
	header := resp.Header.Get("Last-Modified")
	if header == "" {
		return nil
	}
	lastmod, err := time.Parse(http.TimeFormat, header)
	if err != nil {
		return nil
	}
	return os.Chtimes(filename, lastmod, lastmod)
}

// mkdirp creates all missing parent directories for the destination file path.
func mkdirp(path string) error {
	dir := filepath.Dir(path)
	if fi, err := os.Stat(dir); err != nil {
		if !os.IsNotExist(err) {
			return fmt.Errorf("error checking destination directory: %v", err)
		}
		if err := os.MkdirAll(dir, 0755); err != nil {
			return fmt.Errorf("error creating destination directory: %v", err)
		}
	} else if !fi.IsDir() {
		panic("destination path is not directory")
	}
	return nil
}

// guessFilename returns a filename for the given http.Response. If none can be
// determined ErrNoFilename is returned.
func guessFilename(resp *http.Response) (string, error) {
	filename := resp.Request.URL.Path
	if cd := resp.Header.Get("Content-Disposition"); cd != "" {
		if _, params, err := mime.ParseMediaType(cd); err == nil {
			filename = params["filename"]
		}
	}

	// sanitize
	if filename == "" || strings.HasSuffix(filename, "/") || strings.Contains(filename, "\x00") {
		return "", ErrNoFilename
	}

	filename = filepath.Base(path.Clean("/" + filename))
	if filename == "" || filename == "." || filename == "/" {
		return "", ErrNoFilename
	}

	return filename, nil
}

// checksum returns a hash of the given file, using the given hash algorithm.
func checksum(ctx context.Context, filename string, h hash.Hash) (b []byte, err error) {
	var f *os.File
	f, err = os.Open(filename)
	if err != nil {
		return
	}
	defer func() {
		err = f.Close()
	}()

	t := newTransfer(ctx, nil, h, f, nil)
	if _, err = t.copy(); err != nil {
		return
	}

	b = h.Sum(nil)
	return
}
 07070100000289000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/v3  0707010000028A000081A4000000000000000000000001645E367C000005DC000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/v3/LICENSE  Copyright (c) 2017 Ryan Armstrong. All rights reserved.

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this
   list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.

3. Neither the name of the copyright holder nor the names of its contributors
   may be used to endorse or promote products derived from this software without
   specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
0707010000028B000081A4000000000000000000000001645E367C00003BE8000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/v3/client.go    package grab

import (
	"bytes"
	"context"
	"fmt"
	"io"
	"net/http"
	"os"
	"path/filepath"
	"sync"
	"sync/atomic"
	"time"
)

// HTTPClient provides an interface allowing us to perform HTTP requests.
type HTTPClient interface {
	Do(req *http.Request) (*http.Response, error)
}

// truncater is a private interface allowing different response
// Writers to be truncated
type truncater interface {
	Truncate(size int64) error
}

// A Client is a file download client.
//
// Clients are safe for concurrent use by multiple goroutines.
type Client struct {
	// HTTPClient specifies the http.Client which will be used for communicating
	// with the remote server during the file transfer.
	HTTPClient HTTPClient

	// UserAgent specifies the User-Agent string which will be set in the
	// headers of all requests made by this client.
	//
	// The user agent string may be overridden in the headers of each request.
	UserAgent string

	// BufferSize specifies the size in bytes of the buffer that is used for
	// transferring all requested files. Larger buffers may result in faster
	// throughput but will use more memory and result in less frequent updates
	// to the transfer progress statistics. The BufferSize of each request can
	// be overridden on each Request object. Default: 32KB.
	BufferSize int
}

// NewClient returns a new file download Client, using default configuration.
func NewClient() *Client {
	return &Client{
		UserAgent: "grab",
		HTTPClient: &http.Client{
			Transport: &http.Transport{
				Proxy: http.ProxyFromEnvironment,
			},
		},
	}
}

// DefaultClient is the default client and is used by all Get convenience
// functions.
var DefaultClient = NewClient()

// Do sends a file transfer request and returns a file transfer response,
// following policy (e.g. redirects, cookies, auth) as configured on the
// client's HTTPClient.
//
// Like http.Get, Do blocks while the transfer is initiated, but returns as soon
// as the transfer has started transferring in a background goroutine, or if it
// failed early.
//
// An error is returned via Response.Err if caused by client policy (such as
// CheckRedirect), or if there was an HTTP protocol or IO error. Response.Err
// will block the caller until the transfer is completed, successfully or
// otherwise.
func (c *Client) Do(req *Request) *Response {
	// cancel will be called on all code-paths via closeResponse
	ctx, cancel := context.WithCancel(req.Context())
	req = req.WithContext(ctx)
	resp := &Response{
		Request:    req,
		Start:      time.Now(),
		Done:       make(chan struct{}, 0),
		Filename:   req.Filename,
		ctx:        ctx,
		cancel:     cancel,
		bufferSize: req.BufferSize,
	}
	if resp.bufferSize == 0 {
		// default to Client.BufferSize
		resp.bufferSize = c.BufferSize
	}

	// Run state-machine while caller is blocked to initialize the file transfer.
	// Must never transition to the copyFile state - this happens next in another
	// goroutine.
	c.run(resp, c.statFileInfo)

	// Run copyFile in a new goroutine. copyFile will no-op if the transfer is
	// already complete or failed.
	go c.run(resp, c.copyFile)
	return resp
}

// DoChannel executes all requests sent through the given Request channel, one
// at a time, until it is closed by another goroutine. The caller is blocked
// until the Request channel is closed and all transfers have completed. All
// responses are sent through the given Response channel as soon as they are
// received from the remote servers and can be used to track the progress of
// each download.
//
// Slow Response receivers will cause a worker to block and therefore delay the
// start of the transfer for an already initiated connection - potentially
// causing a server timeout. It is the caller's responsibility to ensure a
// sufficient buffer size is used for the Response channel to prevent this.
//
// If an error occurs during any of the file transfers it will be accessible via
// the associated Response.Err function.
func (c *Client) DoChannel(reqch <-chan *Request, respch chan<- *Response) {
	// TODO: enable cancelling of batch jobs
	for req := range reqch {
		resp := c.Do(req)
		respch <- resp
		<-resp.Done
	}
}

// DoBatch executes all the given requests using the given number of concurrent
// workers. Control is passed back to the caller as soon as the workers are
// initiated.
//
// If the requested number of workers is less than one, a worker will be created
// for every request. I.e. all requests will be executed concurrently.
//
// If an error occurs during any of the file transfers it will be accessible via
// call to the associated Response.Err.
//
// The returned Response channel is closed only after all of the given Requests
// have completed, successfully or otherwise.
func (c *Client) DoBatch(workers int, requests ...*Request) <-chan *Response {
	if workers < 1 {
		workers = len(requests)
	}
	reqch := make(chan *Request, len(requests))
	respch := make(chan *Response, len(requests))
	wg := sync.WaitGroup{}
	for i := 0; i < workers; i++ {
		wg.Add(1)
		go func() {
			c.DoChannel(reqch, respch)
			wg.Done()
		}()
	}

	// queue requests
	go func() {
		for _, req := range requests {
			reqch <- req
		}
		close(reqch)
		wg.Wait()
		close(respch)
	}()
	return respch
}

// An stateFunc is an action that mutates the state of a Response and returns
// the next stateFunc to be called.
type stateFunc func(*Response) stateFunc

// run calls the given stateFunc function and all subsequent returned stateFuncs
// until a stateFunc returns nil or the Response.ctx is canceled. Each stateFunc
// should mutate the state of the given Response until it has completed
// downloading or failed.
func (c *Client) run(resp *Response, f stateFunc) {
	for {
		select {
		case <-resp.ctx.Done():
			if resp.IsComplete() {
				return
			}
			resp.err = resp.ctx.Err()
			f = c.closeResponse

		default:
			// keep working
		}
		if f = f(resp); f == nil {
			return
		}
	}
}

// statFileInfo retrieves FileInfo for any local file matching
// Response.Filename.
//
// If the file does not exist, is a directory, or its name is unknown the next
// stateFunc is headRequest.
//
// If the file exists, Response.fi is set and the next stateFunc is
// validateLocal.
//
// If an error occurs, the next stateFunc is closeResponse.
func (c *Client) statFileInfo(resp *Response) stateFunc {
	if resp.Request.NoStore || resp.Filename == "" {
		return c.headRequest
	}
	fi, err := os.Stat(resp.Filename)
	if err != nil {
		if os.IsNotExist(err) {
			return c.headRequest
		}
		resp.err = err
		return c.closeResponse
	}
	if fi.IsDir() {
		resp.Filename = ""
		return c.headRequest
	}
	resp.fi = fi
	return c.validateLocal
}

// validateLocal compares a local copy of the downloaded file to the remote
// file.
//
// An error is returned if the local file is larger than the remote file, or
// Request.SkipExisting is true.
//
// If the existing file matches the length of the remote file, the next
// stateFunc is checksumFile.
//
// If the local file is smaller than the remote file and the remote server is
// known to support ranged requests, the next stateFunc is getRequest.
func (c *Client) validateLocal(resp *Response) stateFunc {
	if resp.Request.SkipExisting {
		resp.err = ErrFileExists
		return c.closeResponse
	}

	// determine target file size
	expectedSize := resp.Request.Size
	if expectedSize == 0 && resp.HTTPResponse != nil {
		expectedSize = resp.HTTPResponse.ContentLength
	}

	if expectedSize == 0 {
		// size is either actually 0 or unknown
		// if unknown, we ask the remote server
		// if known to be 0, we proceed with a GET
		return c.headRequest
	}

	if expectedSize == resp.fi.Size() {
		// local file matches remote file size - wrap it up
		resp.DidResume = true
		resp.bytesResumed = resp.fi.Size()
		return c.checksumFile
	}

	if resp.Request.NoResume {
		// local file should be overwritten
		return c.getRequest
	}

	if expectedSize >= 0 && expectedSize < resp.fi.Size() {
		// remote size is known, is smaller than local size and we want to resume
		resp.err = ErrBadLength
		return c.closeResponse
	}

	if resp.CanResume {
		// set resume range on GET request
		resp.Request.HTTPRequest.Header.Set(
			"Range",
			fmt.Sprintf("bytes=%d-", resp.fi.Size()))
		resp.DidResume = true
		resp.bytesResumed = resp.fi.Size()
		return c.getRequest
	}
	return c.headRequest
}

func (c *Client) checksumFile(resp *Response) stateFunc {
	if resp.Request.hash == nil {
		return c.closeResponse
	}
	if resp.Filename == "" {
		panic("grab: developer error: filename not set")
	}
	if resp.Size() < 0 {
		panic("grab: developer error: size unknown")
	}
	req := resp.Request

	// compute checksum
	var sum []byte
	sum, resp.err = resp.checksumUnsafe()
	if resp.err != nil {
		return c.closeResponse
	}

	// compare checksum
	if !bytes.Equal(sum, req.checksum) {
		resp.err = ErrBadChecksum
		if !resp.Request.NoStore && req.deleteOnError {
			if err := os.Remove(resp.Filename); err != nil {
				// err should be os.PathError and include file path
				resp.err = fmt.Errorf(
					"cannot remove downloaded file with checksum mismatch: %v",
					err)
			}
		}
	}
	return c.closeResponse
}

// doHTTPRequest sends a HTTP Request and returns the response
func (c *Client) doHTTPRequest(req *http.Request) (*http.Response, error) {
	if c.UserAgent != "" && req.Header.Get("User-Agent") == "" {
		req.Header.Set("User-Agent", c.UserAgent)
	}
	return c.HTTPClient.Do(req)
}

func (c *Client) headRequest(resp *Response) stateFunc {
	if resp.optionsKnown {
		return c.getRequest
	}
	resp.optionsKnown = true

	if resp.Request.NoResume {
		return c.getRequest
	}

	if resp.Filename != "" && resp.fi == nil {
		// destination path is already known and does not exist
		return c.getRequest
	}

	hreq := new(http.Request)
	*hreq = *resp.Request.HTTPRequest
	hreq.Method = "HEAD"

	resp.HTTPResponse, resp.err = c.doHTTPRequest(hreq)
	if resp.err != nil {
		return c.closeResponse
	}
	resp.HTTPResponse.Body.Close()

	if resp.HTTPResponse.StatusCode != http.StatusOK {
		return c.getRequest
	}

	// In case of redirects during HEAD, record the final URL and use it
	// instead of the original URL when sending future requests.
	// This way we avoid sending potentially unsupported requests to
	// the original URL, e.g. "Range", since it was the final URL
	// that advertised its support.
	resp.Request.HTTPRequest.URL = resp.HTTPResponse.Request.URL
	resp.Request.HTTPRequest.Host = resp.HTTPResponse.Request.Host

	return c.readResponse
}

func (c *Client) getRequest(resp *Response) stateFunc {
	resp.HTTPResponse, resp.err = c.doHTTPRequest(resp.Request.HTTPRequest)
	if resp.err != nil {
		return c.closeResponse
	}

	// TODO: check Content-Range

	// check status code
	if !resp.Request.IgnoreBadStatusCodes {
		if resp.HTTPResponse.StatusCode < 200 || resp.HTTPResponse.StatusCode > 299 {
			resp.err = StatusCodeError(resp.HTTPResponse.StatusCode)
			return c.closeResponse
		}
	}

	return c.readResponse
}

func (c *Client) readResponse(resp *Response) stateFunc {
	if resp.HTTPResponse == nil {
		panic("grab: developer error: Response.HTTPResponse is nil")
	}

	// check expected size
	resp.sizeUnsafe = resp.HTTPResponse.ContentLength
	if resp.sizeUnsafe >= 0 {
		// remote size is known
		resp.sizeUnsafe += resp.bytesResumed
		if resp.Request.Size > 0 && resp.Request.Size != resp.sizeUnsafe {
			resp.err = ErrBadLength
			return c.closeResponse
		}
	}

	// check filename
	if resp.Filename == "" {
		filename, err := guessFilename(resp.HTTPResponse)
		if err != nil {
			resp.err = err
			return c.closeResponse
		}
		// Request.Filename will be empty or a directory
		resp.Filename = filepath.Join(resp.Request.Filename, filename)
	}

	if !resp.Request.NoStore && resp.requestMethod() == "HEAD" {
		if resp.HTTPResponse.Header.Get("Accept-Ranges") == "bytes" {
			resp.CanResume = true
		}
		return c.statFileInfo
	}
	return c.openWriter
}

// openWriter opens the destination file for writing and seeks to the location
// from whence the file transfer will resume.
//
// Requires that Response.Filename and resp.DidResume are already be set.
func (c *Client) openWriter(resp *Response) stateFunc {
	if !resp.Request.NoStore && !resp.Request.NoCreateDirectories {
		resp.err = mkdirp(resp.Filename)
		if resp.err != nil {
			return c.closeResponse
		}
	}

	if resp.Request.NoStore {
		resp.writer = &resp.storeBuffer
	} else {
		// compute write flags
		flag := os.O_CREATE | os.O_WRONLY
		if resp.fi != nil {
			if resp.DidResume {
				flag = os.O_APPEND | os.O_WRONLY
			} else {
				// truncate later in copyFile, if not cancelled
				// by BeforeCopy hook
				flag = os.O_WRONLY
			}
		}

		// open file
		f, err := os.OpenFile(resp.Filename, flag, 0666)
		if err != nil {
			resp.err = err
			return c.closeResponse
		}
		resp.writer = f

		// seek to start or end
		whence := os.SEEK_SET
		if resp.bytesResumed > 0 {
			whence = os.SEEK_END
		}
		_, resp.err = f.Seek(0, whence)
		if resp.err != nil {
			return c.closeResponse
		}
	}

	// init transfer
	if resp.bufferSize < 1 {
		resp.bufferSize = 32 * 1024
	}
	b := make([]byte, resp.bufferSize)
	resp.transfer = newTransfer(
		resp.Request.Context(),
		resp.Request.RateLimiter,
		resp.writer,
		resp.HTTPResponse.Body,
		b)

	// next step is copyFile, but this will be called later in another goroutine
	return nil
}

// copy transfers content for a HTTP connection established via Client.do()
func (c *Client) copyFile(resp *Response) stateFunc {
	if resp.IsComplete() {
		return nil
	}

	// run BeforeCopy hook
	if f := resp.Request.BeforeCopy; f != nil {
		resp.err = f(resp)
		if resp.err != nil {
			return c.closeResponse
		}
	}

	var bytesCopied int64
	if resp.transfer == nil {
		panic("grab: developer error: Response.transfer is nil")
	}

	// We waited to truncate the file in openWriter() to make sure
	// the BeforeCopy didn't cancel the copy. If this was an existing
	// file that is not going to be resumed, truncate the contents.
	if t, ok := resp.writer.(truncater); ok && resp.fi != nil && !resp.DidResume {
		t.Truncate(0)
	}

	bytesCopied, resp.err = resp.transfer.copy()
	if resp.err != nil {
		return c.closeResponse
	}
	closeWriter(resp)

	// set file timestamp
	if !resp.Request.NoStore && !resp.Request.IgnoreRemoteTime {
		resp.err = setLastModified(resp.HTTPResponse, resp.Filename)
		if resp.err != nil {
			return c.closeResponse
		}
	}

	// update transfer size if previously unknown
	if resp.Size() < 0 {
		discoveredSize := resp.bytesResumed + bytesCopied
		atomic.StoreInt64(&resp.sizeUnsafe, discoveredSize)
		if resp.Request.Size > 0 && resp.Request.Size != discoveredSize {
			resp.err = ErrBadLength
			return c.closeResponse
		}
	}

	// run AfterCopy hook
	if f := resp.Request.AfterCopy; f != nil {
		resp.err = f(resp)
		if resp.err != nil {
			return c.closeResponse
		}
	}

	return c.checksumFile
}

func closeWriter(resp *Response) {
	if closer, ok := resp.writer.(io.Closer); ok {
		closer.Close()
	}
	resp.writer = nil
}

// close finalizes the Response
func (c *Client) closeResponse(resp *Response) stateFunc {
	if resp.IsComplete() {
		panic("grab: developer error: response already closed")
	}

	resp.fi = nil
	closeWriter(resp)
	resp.closeResponseBody()

	resp.End = time.Now()
	close(resp.Done)
	if resp.cancel != nil {
		resp.cancel()
	}

	return nil
}
0707010000028C000081A4000000000000000000000001645E367C0000072A000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/v3/doc.go   /*
Package grab provides a HTTP download manager implementation.

Get is the most simple way to download a file:

	resp, err := grab.Get("/tmp", "http://example.com/example.zip")
	// ...

Get will download the given URL and save it to the given destination directory.
The destination filename will be determined automatically by grab using
Content-Disposition headers returned by the remote server, or by inspecting the
requested URL path.

An empty destination string or "." means the transfer will be stored in the
current working directory.

If a destination file already exists, grab will assume it is a complete or
partially complete download of the requested file. If the remote server supports
resuming interrupted downloads, grab will resume downloading from the end of the
partial file. If the server does not support resumed downloads, the file will be
retransferred in its entirety. If the file is already complete, grab will return
successfully.

For control over the HTTP client, destination path, auto-resume, checksum
validation and other settings, create a Client:

	client := grab.NewClient()
	client.HTTPClient.Transport.DisableCompression = true

	req, err := grab.NewRequest("/tmp", "http://example.com/example.zip")
	// ...
	req.NoResume = true
	req.HTTPRequest.Header.Set("Authorization", "Basic YWxhZGRpbjpvcGVuc2VzYW1l")

	resp := client.Do(req)
	// ...

You can monitor the progress of downloads while they are transferring:

	client := grab.NewClient()
	req, err := grab.NewRequest("", "http://example.com/example.zip")
	// ...
	resp := client.Do(req)

	t := time.NewTicker(time.Second)
	defer t.Stop()

	for {
		select {
		case <-t.C:
			fmt.Printf("%.02f%% complete\n", resp.Progress())

		case <-resp.Done:
			if err := resp.Err(); err != nil {
				// ...
			}

			// ...
			return
		}
	}
*/
package grab
  0707010000028D000081A4000000000000000000000001645E367C00000568000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/v3/error.go package grab

import (
	"errors"
	"fmt"
	"net/http"
)

var (
	// ErrBadLength indicates that the server response or an existing file does
	// not match the expected content length.
	ErrBadLength = errors.New("bad content length")

	// ErrBadChecksum indicates that a downloaded file failed to pass checksum
	// validation.
	ErrBadChecksum = errors.New("checksum mismatch")

	// ErrNoFilename indicates that a reasonable filename could not be
	// automatically determined using the URL or response headers from a server.
	ErrNoFilename = errors.New("no filename could be determined")

	// ErrNoTimestamp indicates that a timestamp could not be automatically
	// determined using the response headers from the remote server.
	ErrNoTimestamp = errors.New("no timestamp could be determined for the remote file")

	// ErrFileExists indicates that the destination path already exists.
	ErrFileExists = errors.New("file exists")
)

// StatusCodeError indicates that the server response had a status code that
// was not in the 200-299 range (after following any redirects).
type StatusCodeError int

func (err StatusCodeError) Error() string {
	return fmt.Sprintf("server returned %d %s", err, http.StatusText(int(err)))
}

// IsStatusCodeError returns true if the given error is of type StatusCodeError.
func IsStatusCodeError(err error) bool {
	_, ok := err.(StatusCodeError)
	return ok
}
0707010000028E000081A4000000000000000000000001645E367C0000078B000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/v3/grab.go  package grab

import (
	"fmt"
	"os"
)

// Get sends a HTTP request and downloads the content of the requested URL to
// the given destination file path. The caller is blocked until the download is
// completed, successfully or otherwise.
//
// An error is returned if caused by client policy (such as CheckRedirect), or
// if there was an HTTP protocol or IO error.
//
// For non-blocking calls or control over HTTP client headers, redirect policy,
// and other settings, create a Client instead.
func Get(dst, urlStr string) (*Response, error) {
	req, err := NewRequest(dst, urlStr)
	if err != nil {
		return nil, err
	}

	resp := DefaultClient.Do(req)
	return resp, resp.Err()
}

// GetBatch sends multiple HTTP requests and downloads the content of the
// requested URLs to the given destination directory using the given number of
// concurrent worker goroutines.
//
// The Response for each requested URL is sent through the returned Response
// channel, as soon as a worker receives a response from the remote server. The
// Response can then be used to track the progress of the download while it is
// in progress.
//
// The returned Response channel will be closed by Grab, only once all downloads
// have completed or failed.
//
// If an error occurs during any download, it will be available via call to the
// associated Response.Err.
//
// For control over HTTP client headers, redirect policy, and other settings,
// create a Client instead.
func GetBatch(workers int, dst string, urlStrs ...string) (<-chan *Response, error) {
	fi, err := os.Stat(dst)
	if err != nil {
		return nil, err
	}
	if !fi.IsDir() {
		return nil, fmt.Errorf("destination is not a directory")
	}

	reqs := make([]*Request, len(urlStrs))
	for i := 0; i < len(urlStrs); i++ {
		req, err := NewRequest(dst, urlStrs[i])
		if err != nil {
			return nil, err
		}
		reqs[i] = req
	}

	ch := DefaultClient.DoBatch(workers, reqs...)
	return ch, nil
}
 0707010000028F000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/v3/pkg  07070100000290000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/v3/pkg/bps  07070100000291000081A4000000000000000000000001645E367C000006EB000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/v3/pkg/bps/bps.go   /*
Package bps provides gauges for calculating the Bytes Per Second transfer rate
of data streams.
*/
package bps

import (
	"context"
	"time"
)

// Gauge is the common interface for all BPS gauges in this package. Given a
// set of samples over time, each gauge type can be used to measure the Bytes
// Per Second transfer rate of a data stream.
//
// All samples must monotonically increase in timestamp and value. Each sample
// should represent the total number of bytes sent in a stream, rather than
// accounting for the number sent since the last sample.
//
// To ensure a gauge can report progress as quickly as possible, take an initial
// sample when your stream first starts.
//
// All gauge implementations are safe for concurrent use.
type Gauge interface {
	// Sample adds a new sample of the progress of the monitored stream.
	Sample(t time.Time, n int64)

	// BPS returns the calculated Bytes Per Second rate of the monitored stream.
	BPS() float64
}

// SampleFunc is used by Watch to take periodic samples of a monitored stream.
type SampleFunc func() (n int64)

// Watch will periodically call the given SampleFunc to sample the progress of
// a monitored stream and update the given gauge. SampleFunc should return the
// total number of bytes transferred by the stream since it started.
//
// Watch is a blocking call and should typically be called in a new goroutine.
// To prevent the goroutine from leaking, make sure to cancel the given context
// once the stream is completed or canceled.
func Watch(ctx context.Context, g Gauge, f SampleFunc, interval time.Duration) {
	g.Sample(time.Now(), f())
	t := time.NewTicker(interval)
	defer t.Stop()
	for {
		select {
		case <-ctx.Done():
			return
		case now := <-t.C:
			g.Sample(now, f())
		}
	}
}
 07070100000292000081A4000000000000000000000001645E367C000008DD000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/v3/pkg/bps/sma.go   package bps

import (
	"sync"
	"time"
)

// NewSMA returns a gauge that uses a Simple Moving Average with the given
// number of samples to measure the bytes per second of a byte stream.
//
// BPS is computed using the timestamp of the most recent and oldest sample in
// the sample buffer. When a new sample is added, the oldest sample is dropped
// if the sample count exceeds maxSamples.
//
// The gauge does not account for any latency in arrival time of new samples or
// the desired window size. Any variance in the arrival of samples will result
// in a BPS measurement that is correct for the submitted samples, but over a
// varying time window.
//
// maxSamples should be equal to 1 + (window size / sampling interval) where
// window size is the number of seconds over which the moving average is
// smoothed and sampling interval is the number of seconds between each sample.
//
// For example, if you want a five second window, sampling once per second,
// maxSamples should be 1 + 5/1 = 6.
func NewSMA(maxSamples int) Gauge {
	if maxSamples < 2 {
		panic("sample count must be greater than 1")
	}
	return &sma{
		maxSamples: uint64(maxSamples),
		samples:    make([]int64, maxSamples),
		timestamps: make([]time.Time, maxSamples),
	}
}

type sma struct {
	mu          sync.Mutex
	index       uint64
	maxSamples  uint64
	sampleCount uint64
	samples     []int64
	timestamps  []time.Time
}

func (c *sma) Sample(t time.Time, n int64) {
	c.mu.Lock()
	defer c.mu.Unlock()

	c.timestamps[c.index] = t
	c.samples[c.index] = n
	c.index = (c.index + 1) % c.maxSamples

	// prevent integer overflow in sampleCount. Values greater or equal to
	// maxSamples have the same semantic meaning.
	c.sampleCount++
	if c.sampleCount > c.maxSamples {
		c.sampleCount = c.maxSamples
	}
}

func (c *sma) BPS() float64 {
	c.mu.Lock()
	defer c.mu.Unlock()

	// we need two samples to start
	if c.sampleCount < 2 {
		return 0
	}

	// First sample is always the oldest until ring buffer first overflows
	oldest := c.index
	if c.sampleCount < c.maxSamples {
		oldest = 0
	}

	newest := (c.index + c.maxSamples - 1) % c.maxSamples
	seconds := c.timestamps[newest].Sub(c.timestamps[oldest]).Seconds()
	bytes := float64(c.samples[newest] - c.samples[oldest])
	return bytes / seconds
}
   07070100000293000081A4000000000000000000000001645E367C00000171000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/v3/rate_limiter.go  package grab

import "context"

// RateLimiter is an interface that must be satisfied by any third-party rate
// limiters that may be used to limit download transfer speeds.
//
// A recommended token bucket implementation can be found at
// https://godoc.org/golang.org/x/time/rate#Limiter.
type RateLimiter interface {
	WaitN(ctx context.Context, n int) (err error)
}
   07070100000294000081A4000000000000000000000001645E367C00001847000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/v3/request.go   package grab

import (
	"context"
	"hash"
	"net/http"
	"net/url"
)

// A Hook is a user provided callback function that can be called by grab at
// various stages of a requests lifecycle. If a hook returns an error, the
// associated request is canceled and the same error is returned on the Response
// object.
//
// Hook functions are called synchronously and should never block unnecessarily.
// Response methods that block until a download is complete, such as
// Response.Err, Response.Cancel or Response.Wait will deadlock. To cancel a
// download from a callback, simply return a non-nil error.
type Hook func(*Response) error

// A Request represents an HTTP file transfer request to be sent by a Client.
type Request struct {
	// Label is an arbitrary string which may used to label a Request with a
	// user friendly name.
	Label string

	// Tag is an arbitrary interface which may be used to relate a Request to
	// other data.
	Tag interface{}

	// HTTPRequest specifies the http.Request to be sent to the remote server to
	// initiate a file transfer. It includes request configuration such as URL,
	// protocol version, HTTP method, request headers and authentication.
	HTTPRequest *http.Request

	// Filename specifies the path where the file transfer will be stored in
	// local storage. If Filename is empty or a directory, the true Filename will
	// be resolved using Content-Disposition headers or the request URL.
	//
	// An empty string means the transfer will be stored in the current working
	// directory.
	Filename string

	// SkipExisting specifies that ErrFileExists should be returned if the
	// destination path already exists. The existing file will not be checked for
	// completeness.
	SkipExisting bool

	// NoResume specifies that a partially completed download will be restarted
	// without attempting to resume any existing file. If the download is already
	// completed in full, it will not be restarted.
	NoResume bool

	// NoStore specifies that grab should not write to the local file system.
	// Instead, the download will be stored in memory and accessible only via
	// Response.Open or Response.Bytes.
	NoStore bool

	// NoCreateDirectories specifies that any missing directories in the given
	// Filename path should not be created automatically, if they do not already
	// exist.
	NoCreateDirectories bool

	// IgnoreBadStatusCodes specifies that grab should accept any status code in
	// the response from the remote server. Otherwise, grab expects the response
	// status code to be within the 2XX range (after following redirects).
	IgnoreBadStatusCodes bool

	// IgnoreRemoteTime specifies that grab should not attempt to set the
	// timestamp of the local file to match the remote file.
	IgnoreRemoteTime bool

	// Size specifies the expected size of the file transfer if known. If the
	// server response size does not match, the transfer is cancelled and
	// ErrBadLength returned.
	Size int64

	// BufferSize specifies the size in bytes of the buffer that is used for
	// transferring the requested file. Larger buffers may result in faster
	// throughput but will use more memory and result in less frequent updates
	// to the transfer progress statistics. If a RateLimiter is configured,
	// BufferSize should be much lower than the rate limit. Default: 32KB.
	BufferSize int

	// RateLimiter allows the transfer rate of a download to be limited. The given
	// Request.BufferSize determines how frequently the RateLimiter will be
	// polled.
	RateLimiter RateLimiter

	// BeforeCopy is a user provided callback that is called immediately before
	// a request starts downloading. If BeforeCopy returns an error, the request
	// is cancelled and the same error is returned on the Response object.
	BeforeCopy Hook

	// AfterCopy is a user provided callback that is called immediately after a
	// request has finished downloading, before checksum validation and closure.
	// This hook is only called if the transfer was successful. If AfterCopy
	// returns an error, the request is canceled and the same error is returned on
	// the Response object.
	AfterCopy Hook

	// hash, checksum and deleteOnError - set via SetChecksum.
	hash          hash.Hash
	checksum      []byte
	deleteOnError bool

	// Context for cancellation and timeout - set via WithContext
	ctx context.Context
}

// NewRequest returns a new file transfer Request suitable for use with
// Client.Do.
func NewRequest(dst, urlStr string) (*Request, error) {
	if dst == "" {
		dst = "."
	}
	req, err := http.NewRequest("GET", urlStr, nil)
	if err != nil {
		return nil, err
	}
	return &Request{
		HTTPRequest: req,
		Filename:    dst,
	}, nil
}

// Context returns the request's context. To change the context, use
// WithContext.
//
// The returned context is always non-nil; it defaults to the background
// context.
//
// The context controls cancelation.
func (r *Request) Context() context.Context {
	if r.ctx != nil {
		return r.ctx
	}

	return context.Background()
}

// WithContext returns a shallow copy of r with its context changed
// to ctx. The provided ctx must be non-nil.
func (r *Request) WithContext(ctx context.Context) *Request {
	if ctx == nil {
		panic("nil context")
	}
	r2 := new(Request)
	*r2 = *r
	r2.ctx = ctx
	r2.HTTPRequest = r2.HTTPRequest.WithContext(ctx)
	return r2
}

// URL returns the URL to be downloaded.
func (r *Request) URL() *url.URL {
	return r.HTTPRequest.URL
}

// SetChecksum sets the desired hashing algorithm and checksum value to validate
// a downloaded file. Once the download is complete, the given hashing algorithm
// will be used to compute the actual checksum of the downloaded file. If the
// checksums do not match, an error will be returned by the associated
// Response.Err method.
//
// If deleteOnError is true, the downloaded file will be deleted automatically
// if it fails checksum validation.
//
// To prevent corruption of the computed checksum, the given hash must not be
// used by any other request or goroutines.
//
// To disable checksum validation, call SetChecksum with a nil hash.
func (r *Request) SetChecksum(h hash.Hash, sum []byte, deleteOnError bool) {
	r.hash = h
	r.checksum = sum
	r.deleteOnError = deleteOnError
}
 07070100000295000081A4000000000000000000000001645E367C00001D35000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/v3/response.go  package grab

import (
	"bytes"
	"context"
	"io"
	"io/ioutil"
	"net/http"
	"os"
	"sync/atomic"
	"time"
)

// Response represents the response to a completed or in-progress download
// request.
//
// A response may be returned as soon a HTTP response is received from a remote
// server, but before the body content has started transferring.
//
// All Response method calls are thread-safe.
type Response struct {
	// The Request that was submitted to obtain this Response.
	Request *Request

	// HTTPResponse represents the HTTP response received from an HTTP request.
	//
	// The response Body should not be used as it will be consumed and closed by
	// grab.
	HTTPResponse *http.Response

	// Filename specifies the path where the file transfer is stored in local
	// storage.
	Filename string

	// Size specifies the total expected size of the file transfer.
	sizeUnsafe int64

	// Start specifies the time at which the file transfer started.
	Start time.Time

	// End specifies the time at which the file transfer completed.
	//
	// This will return zero until the transfer has completed.
	End time.Time

	// CanResume specifies that the remote server advertised that it can resume
	// previous downloads, as the 'Accept-Ranges: bytes' header is set.
	CanResume bool

	// DidResume specifies that the file transfer resumed a previously incomplete
	// transfer.
	DidResume bool

	// Done is closed once the transfer is finalized, either successfully or with
	// errors. Errors are available via Response.Err
	Done chan struct{}

	// ctx is a Context that controls cancelation of an inprogress transfer
	ctx context.Context

	// cancel is a cancel func that can be used to cancel the context of this
	// Response.
	cancel context.CancelFunc

	// fi is the FileInfo for the destination file if it already existed before
	// transfer started.
	fi os.FileInfo

	// optionsKnown indicates that a HEAD request has been completed and the
	// capabilities of the remote server are known.
	optionsKnown bool

	// writer is the file handle used to write the downloaded file to local
	// storage
	writer io.Writer

	// storeBuffer receives the contents of the transfer if Request.NoStore is
	// enabled.
	storeBuffer bytes.Buffer

	// bytesCompleted specifies the number of bytes which were already
	// transferred before this transfer began.
	bytesResumed int64

	// transfer is responsible for copying data from the remote server to a local
	// file, tracking progress and allowing for cancelation.
	transfer *transfer

	// bufferSize specifies the size in bytes of the transfer buffer.
	bufferSize int

	// Error contains any error that may have occurred during the file transfer.
	// This should not be read until IsComplete returns true.
	err error
}

// IsComplete returns true if the download has completed. If an error occurred
// during the download, it can be returned via Err.
func (c *Response) IsComplete() bool {
	select {
	case <-c.Done:
		return true
	default:
		return false
	}
}

// Cancel cancels the file transfer by canceling the underlying Context for
// this Response. Cancel blocks until the transfer is closed and returns any
// error - typically context.Canceled.
func (c *Response) Cancel() error {
	c.cancel()
	return c.Err()
}

// Wait blocks until the download is completed.
func (c *Response) Wait() {
	<-c.Done
}

// Err blocks the calling goroutine until the underlying file transfer is
// completed and returns any error that may have occurred. If the download is
// already completed, Err returns immediately.
func (c *Response) Err() error {
	<-c.Done
	return c.err
}

// Size returns the size of the file transfer. If the remote server does not
// specify the total size and the transfer is incomplete, the return value is
// -1.
func (c *Response) Size() int64 {
	return atomic.LoadInt64(&c.sizeUnsafe)
}

// BytesComplete returns the total number of bytes which have been copied to
// the destination, including any bytes that were resumed from a previous
// download.
func (c *Response) BytesComplete() int64 {
	return c.bytesResumed + c.transfer.N()
}

// BytesPerSecond returns the number of bytes per second transferred using a
// simple moving average of the last five seconds. If the download is already
// complete, the average bytes/sec for the life of the download is returned.
func (c *Response) BytesPerSecond() float64 {
	if c.IsComplete() {
		return float64(c.transfer.N()) / c.Duration().Seconds()
	}
	return c.transfer.BPS()
}

// Progress returns the ratio of total bytes that have been downloaded. Multiply
// the returned value by 100 to return the percentage completed.
func (c *Response) Progress() float64 {
	size := c.Size()
	if size <= 0 {
		return 0
	}
	return float64(c.BytesComplete()) / float64(size)
}

// Duration returns the duration of a file transfer. If the transfer is in
// process, the duration will be between now and the start of the transfer. If
// the transfer is complete, the duration will be between the start and end of
// the completed transfer process.
func (c *Response) Duration() time.Duration {
	if c.IsComplete() {
		return c.End.Sub(c.Start)
	}

	return time.Now().Sub(c.Start)
}

// ETA returns the estimated time at which the the download will complete, given
// the current BytesPerSecond. If the transfer has already completed, the actual
// end time will be returned.
func (c *Response) ETA() time.Time {
	if c.IsComplete() {
		return c.End
	}
	bt := c.BytesComplete()
	bps := c.transfer.BPS()
	if bps == 0 {
		return time.Time{}
	}
	secs := float64(c.Size()-bt) / bps
	return time.Now().Add(time.Duration(secs) * time.Second)
}

// Open blocks the calling goroutine until the underlying file transfer is
// completed and then opens the transferred file for reading. If Request.NoStore
// was enabled, the reader will read from memory.
//
// If an error occurred during the transfer, it will be returned.
//
// It is the callers responsibility to close the returned file handle.
func (c *Response) Open() (io.ReadCloser, error) {
	if err := c.Err(); err != nil {
		return nil, err
	}
	return c.openUnsafe()
}

func (c *Response) openUnsafe() (io.ReadCloser, error) {
	if c.Request.NoStore {
		return ioutil.NopCloser(bytes.NewReader(c.storeBuffer.Bytes())), nil
	}
	return os.Open(c.Filename)
}

// Bytes blocks the calling goroutine until the underlying file transfer is
// completed and then reads all bytes from the completed tranafer. If
// Request.NoStore was enabled, the bytes will be read from memory.
//
// If an error occurred during the transfer, it will be returned.
func (c *Response) Bytes() ([]byte, error) {
	if err := c.Err(); err != nil {
		return nil, err
	}
	if c.Request.NoStore {
		return c.storeBuffer.Bytes(), nil
	}
	f, err := c.Open()
	if err != nil {
		return nil, err
	}
	defer f.Close()
	return ioutil.ReadAll(f)
}

func (c *Response) requestMethod() string {
	if c == nil || c.HTTPResponse == nil || c.HTTPResponse.Request == nil {
		return ""
	}
	return c.HTTPResponse.Request.Method
}

func (c *Response) checksumUnsafe() ([]byte, error) {
	f, err := c.openUnsafe()
	if err != nil {
		return nil, err
	}
	defer f.Close()
	t := newTransfer(c.Request.Context(), nil, c.Request.hash, f, nil)
	if _, err = t.copy(); err != nil {
		return nil, err
	}
	sum := c.Request.hash.Sum(nil)
	return sum, nil
}

func (c *Response) closeResponseBody() error {
	if c.HTTPResponse == nil || c.HTTPResponse.Body == nil {
		return nil
	}
	return c.HTTPResponse.Body.Close()
}
   07070100000296000081A4000000000000000000000001645E367C000007BE000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/v3/transfer.go  package grab

import (
	"context"
	"io"
	"sync/atomic"
	"time"

	"github.com/cavaliergopher/grab/v3/pkg/bps"
)

type transfer struct {
	n     int64 // must be 64bit aligned on 386
	ctx   context.Context
	gauge bps.Gauge
	lim   RateLimiter
	w     io.Writer
	r     io.Reader
	b     []byte
}

func newTransfer(ctx context.Context, lim RateLimiter, dst io.Writer, src io.Reader, buf []byte) *transfer {
	return &transfer{
		ctx:   ctx,
		gauge: bps.NewSMA(6), // five second moving average sampling every second
		lim:   lim,
		w:     dst,
		r:     src,
		b:     buf,
	}
}

// copy behaves similarly to io.CopyBuffer except that it checks for cancelation
// of the given context.Context, reports progress in a thread-safe manner and
// tracks the transfer rate.
func (c *transfer) copy() (written int64, err error) {
	// maintain a bps gauge in another goroutine
	ctx, cancel := context.WithCancel(c.ctx)
	defer cancel()
	go bps.Watch(ctx, c.gauge, c.N, time.Second)

	// start the transfer
	if c.b == nil {
		c.b = make([]byte, 32*1024)
	}
	for {
		select {
		case <-c.ctx.Done():
			err = c.ctx.Err()
			return
		default:
			// keep working
		}
		nr, er := c.r.Read(c.b)
		if nr > 0 {
			nw, ew := c.w.Write(c.b[0:nr])
			if nw > 0 {
				written += int64(nw)
				atomic.StoreInt64(&c.n, written)
			}
			if ew != nil {
				err = ew
				break
			}
			if nr != nw {
				err = io.ErrShortWrite
				break
			}
			// wait for rate limiter
			if c.lim != nil {
				err = c.lim.WaitN(c.ctx, nr)
				if err != nil {
					return
				}
			}
		}
		if er != nil {
			if er != io.EOF {
				err = er
			}
			break
		}
	}
	return written, err
}

// N returns the number of bytes transferred.
func (c *transfer) N() (n int64) {
	if c == nil {
		return 0
	}
	n = atomic.LoadInt64(&c.n)
	return
}

// BPS returns the current bytes per second transfer rate using a simple moving
// average.
func (c *transfer) BPS() (bps float64) {
	if c == nil || c.gauge == nil {
		return 0
	}
	return c.gauge.BPS()
}
  07070100000297000081A4000000000000000000000001645E367C000007D7000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/cavaliergopher/grab/v3/util.go  package grab

import (
	"fmt"
	"mime"
	"net/http"
	"os"
	"path"
	"path/filepath"
	"strings"
	"time"
)

// setLastModified sets the last modified timestamp of a local file according to
// the Last-Modified header returned by a remote server.
func setLastModified(resp *http.Response, filename string) error {
	// https://tools.ietf.org/html/rfc7232#section-2.2
	// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified
	header := resp.Header.Get("Last-Modified")
	if header == "" {
		return nil
	}
	lastmod, err := time.Parse(http.TimeFormat, header)
	if err != nil {
		return nil
	}
	return os.Chtimes(filename, lastmod, lastmod)
}

// mkdirp creates all missing parent directories for the destination file path.
func mkdirp(path string) error {
	dir := filepath.Dir(path)
	if fi, err := os.Stat(dir); err != nil {
		if !os.IsNotExist(err) {
			return fmt.Errorf("error checking destination directory: %v", err)
		}
		if err := os.MkdirAll(dir, 0777); err != nil {
			return fmt.Errorf("error creating destination directory: %v", err)
		}
	} else if !fi.IsDir() {
		panic("grab: developer error: destination path is not directory")
	}
	return nil
}

// guessFilename returns a filename for the given http.Response. If none can be
// determined ErrNoFilename is returned.
//
// TODO: NoStore operations should not require a filename
func guessFilename(resp *http.Response) (string, error) {
	filename := resp.Request.URL.Path
	if cd := resp.Header.Get("Content-Disposition"); cd != "" {
		if _, params, err := mime.ParseMediaType(cd); err == nil {
			if val, ok := params["filename"]; ok {
				filename = val
			} // else filename directive is missing.. fallback to URL.Path
		}
	}

	// sanitize
	if filename == "" || strings.HasSuffix(filename, "/") || strings.Contains(filename, "\x00") {
		return "", ErrNoFilename
	}

	filename = filepath.Base(path.Clean("/" + filename))
	if filename == "" || filename == "." || filename == "/" {
		return "", ErrNoFilename
	}

	return filename, nil
}
 07070100000298000041ED000000000000000000000006645E367C00000000000000000000000000000000000000000000003100000000elemental-cli-0.3.1/vendor/github.com/containerd  07070100000299000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/containerd/cgroups  0707010000029A000081A4000000000000000000000001645E367C00002C5D000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/containerd/cgroups/LICENSE                                   Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
   0707010000029B000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/containerd/cgroups/stats    0707010000029C000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/containerd/cgroups/stats/v1 0707010000029D000081A4000000000000000000000001645E367C0000025F000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/containerd/cgroups/stats/v1/doc.go  /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package v1
 0707010000029E000081A4000000000000000000000001645E367C00027279000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/containerd/cgroups/stats/v1/metrics.pb.go   // Code generated by protoc-gen-gogo. DO NOT EDIT.
// source: github.com/containerd/cgroups/stats/v1/metrics.proto

package v1

import (
	fmt "fmt"
	_ "github.com/gogo/protobuf/gogoproto"
	proto "github.com/gogo/protobuf/proto"
	io "io"
	math "math"
	math_bits "math/bits"
	reflect "reflect"
	strings "strings"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package

type Metrics struct {
	Hugetlb              []*HugetlbStat    `protobuf:"bytes,1,rep,name=hugetlb,proto3" json:"hugetlb,omitempty"`
	Pids                 *PidsStat         `protobuf:"bytes,2,opt,name=pids,proto3" json:"pids,omitempty"`
	CPU                  *CPUStat          `protobuf:"bytes,3,opt,name=cpu,proto3" json:"cpu,omitempty"`
	Memory               *MemoryStat       `protobuf:"bytes,4,opt,name=memory,proto3" json:"memory,omitempty"`
	Blkio                *BlkIOStat        `protobuf:"bytes,5,opt,name=blkio,proto3" json:"blkio,omitempty"`
	Rdma                 *RdmaStat         `protobuf:"bytes,6,opt,name=rdma,proto3" json:"rdma,omitempty"`
	Network              []*NetworkStat    `protobuf:"bytes,7,rep,name=network,proto3" json:"network,omitempty"`
	CgroupStats          *CgroupStats      `protobuf:"bytes,8,opt,name=cgroup_stats,json=cgroupStats,proto3" json:"cgroup_stats,omitempty"`
	MemoryOomControl     *MemoryOomControl `protobuf:"bytes,9,opt,name=memory_oom_control,json=memoryOomControl,proto3" json:"memory_oom_control,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (m *Metrics) Reset()      { *m = Metrics{} }
func (*Metrics) ProtoMessage() {}
func (*Metrics) Descriptor() ([]byte, []int) {
	return fileDescriptor_a17b2d87c332bfaa, []int{0}
}
func (m *Metrics) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *Metrics) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_Metrics.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalToSizedBuffer(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *Metrics) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Metrics.Merge(m, src)
}
func (m *Metrics) XXX_Size() int {
	return m.Size()
}
func (m *Metrics) XXX_DiscardUnknown() {
	xxx_messageInfo_Metrics.DiscardUnknown(m)
}

var xxx_messageInfo_Metrics proto.InternalMessageInfo

type HugetlbStat struct {
	Usage                uint64   `protobuf:"varint,1,opt,name=usage,proto3" json:"usage,omitempty"`
	Max                  uint64   `protobuf:"varint,2,opt,name=max,proto3" json:"max,omitempty"`
	Failcnt              uint64   `protobuf:"varint,3,opt,name=failcnt,proto3" json:"failcnt,omitempty"`
	Pagesize             string   `protobuf:"bytes,4,opt,name=pagesize,proto3" json:"pagesize,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *HugetlbStat) Reset()      { *m = HugetlbStat{} }
func (*HugetlbStat) ProtoMessage() {}
func (*HugetlbStat) Descriptor() ([]byte, []int) {
	return fileDescriptor_a17b2d87c332bfaa, []int{1}
}
func (m *HugetlbStat) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *HugetlbStat) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_HugetlbStat.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalToSizedBuffer(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *HugetlbStat) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HugetlbStat.Merge(m, src)
}
func (m *HugetlbStat) XXX_Size() int {
	return m.Size()
}
func (m *HugetlbStat) XXX_DiscardUnknown() {
	xxx_messageInfo_HugetlbStat.DiscardUnknown(m)
}

var xxx_messageInfo_HugetlbStat proto.InternalMessageInfo

type PidsStat struct {
	Current              uint64   `protobuf:"varint,1,opt,name=current,proto3" json:"current,omitempty"`
	Limit                uint64   `protobuf:"varint,2,opt,name=limit,proto3" json:"limit,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *PidsStat) Reset()      { *m = PidsStat{} }
func (*PidsStat) ProtoMessage() {}
func (*PidsStat) Descriptor() ([]byte, []int) {
	return fileDescriptor_a17b2d87c332bfaa, []int{2}
}
func (m *PidsStat) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *PidsStat) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_PidsStat.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalToSizedBuffer(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *PidsStat) XXX_Merge(src proto.Message) {
	xxx_messageInfo_PidsStat.Merge(m, src)
}
func (m *PidsStat) XXX_Size() int {
	return m.Size()
}
func (m *PidsStat) XXX_DiscardUnknown() {
	xxx_messageInfo_PidsStat.DiscardUnknown(m)
}

var xxx_messageInfo_PidsStat proto.InternalMessageInfo

type CPUStat struct {
	Usage                *CPUUsage `protobuf:"bytes,1,opt,name=usage,proto3" json:"usage,omitempty"`
	Throttling           *Throttle `protobuf:"bytes,2,opt,name=throttling,proto3" json:"throttling,omitempty"`
	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
	XXX_unrecognized     []byte    `json:"-"`
	XXX_sizecache        int32     `json:"-"`
}

func (m *CPUStat) Reset()      { *m = CPUStat{} }
func (*CPUStat) ProtoMessage() {}
func (*CPUStat) Descriptor() ([]byte, []int) {
	return fileDescriptor_a17b2d87c332bfaa, []int{3}
}
func (m *CPUStat) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *CPUStat) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_CPUStat.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalToSizedBuffer(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *CPUStat) XXX_Merge(src proto.Message) {
	xxx_messageInfo_CPUStat.Merge(m, src)
}
func (m *CPUStat) XXX_Size() int {
	return m.Size()
}
func (m *CPUStat) XXX_DiscardUnknown() {
	xxx_messageInfo_CPUStat.DiscardUnknown(m)
}

var xxx_messageInfo_CPUStat proto.InternalMessageInfo

type CPUUsage struct {
	// values in nanoseconds
	Total                uint64   `protobuf:"varint,1,opt,name=total,proto3" json:"total,omitempty"`
	Kernel               uint64   `protobuf:"varint,2,opt,name=kernel,proto3" json:"kernel,omitempty"`
	User                 uint64   `protobuf:"varint,3,opt,name=user,proto3" json:"user,omitempty"`
	PerCPU               []uint64 `protobuf:"varint,4,rep,packed,name=per_cpu,json=perCpu,proto3" json:"per_cpu,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *CPUUsage) Reset()      { *m = CPUUsage{} }
func (*CPUUsage) ProtoMessage() {}
func (*CPUUsage) Descriptor() ([]byte, []int) {
	return fileDescriptor_a17b2d87c332bfaa, []int{4}
}
func (m *CPUUsage) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *CPUUsage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_CPUUsage.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalToSizedBuffer(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *CPUUsage) XXX_Merge(src proto.Message) {
	xxx_messageInfo_CPUUsage.Merge(m, src)
}
func (m *CPUUsage) XXX_Size() int {
	return m.Size()
}
func (m *CPUUsage) XXX_DiscardUnknown() {
	xxx_messageInfo_CPUUsage.DiscardUnknown(m)
}

var xxx_messageInfo_CPUUsage proto.InternalMessageInfo

type Throttle struct {
	Periods              uint64   `protobuf:"varint,1,opt,name=periods,proto3" json:"periods,omitempty"`
	ThrottledPeriods     uint64   `protobuf:"varint,2,opt,name=throttled_periods,json=throttledPeriods,proto3" json:"throttled_periods,omitempty"`
	ThrottledTime        uint64   `protobuf:"varint,3,opt,name=throttled_time,json=throttledTime,proto3" json:"throttled_time,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Throttle) Reset()      { *m = Throttle{} }
func (*Throttle) ProtoMessage() {}
func (*Throttle) Descriptor() ([]byte, []int) {
	return fileDescriptor_a17b2d87c332bfaa, []int{5}
}
func (m *Throttle) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *Throttle) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_Throttle.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalToSizedBuffer(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *Throttle) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Throttle.Merge(m, src)
}
func (m *Throttle) XXX_Size() int {
	return m.Size()
}
func (m *Throttle) XXX_DiscardUnknown() {
	xxx_messageInfo_Throttle.DiscardUnknown(m)
}

var xxx_messageInfo_Throttle proto.InternalMessageInfo

type MemoryStat struct {
	Cache                   uint64       `protobuf:"varint,1,opt,name=cache,proto3" json:"cache,omitempty"`
	RSS                     uint64       `protobuf:"varint,2,opt,name=rss,proto3" json:"rss,omitempty"`
	RSSHuge                 uint64       `protobuf:"varint,3,opt,name=rss_huge,json=rssHuge,proto3" json:"rss_huge,omitempty"`
	MappedFile              uint64       `protobuf:"varint,4,opt,name=mapped_file,json=mappedFile,proto3" json:"mapped_file,omitempty"`
	Dirty                   uint64       `protobuf:"varint,5,opt,name=dirty,proto3" json:"dirty,omitempty"`
	Writeback               uint64       `protobuf:"varint,6,opt,name=writeback,proto3" json:"writeback,omitempty"`
	PgPgIn                  uint64       `protobuf:"varint,7,opt,name=pg_pg_in,json=pgPgIn,proto3" json:"pg_pg_in,omitempty"`
	PgPgOut                 uint64       `protobuf:"varint,8,opt,name=pg_pg_out,json=pgPgOut,proto3" json:"pg_pg_out,omitempty"`
	PgFault                 uint64       `protobuf:"varint,9,opt,name=pg_fault,json=pgFault,proto3" json:"pg_fault,omitempty"`
	PgMajFault              uint64       `protobuf:"varint,10,opt,name=pg_maj_fault,json=pgMajFault,proto3" json:"pg_maj_fault,omitempty"`
	InactiveAnon            uint64       `protobuf:"varint,11,opt,name=inactive_anon,json=inactiveAnon,proto3" json:"inactive_anon,omitempty"`
	ActiveAnon              uint64       `protobuf:"varint,12,opt,name=active_anon,json=activeAnon,proto3" json:"active_anon,omitempty"`
	InactiveFile            uint64       `protobuf:"varint,13,opt,name=inactive_file,json=inactiveFile,proto3" json:"inactive_file,omitempty"`
	ActiveFile              uint64       `protobuf:"varint,14,opt,name=active_file,json=activeFile,proto3" json:"active_file,omitempty"`
	Unevictable             uint64       `protobuf:"varint,15,opt,name=unevictable,proto3" json:"unevictable,omitempty"`
	HierarchicalMemoryLimit uint64       `protobuf:"varint,16,opt,name=hierarchical_memory_limit,json=hierarchicalMemoryLimit,proto3" json:"hierarchical_memory_limit,omitempty"`
	HierarchicalSwapLimit   uint64       `protobuf:"varint,17,opt,name=hierarchical_swap_limit,json=hierarchicalSwapLimit,proto3" json:"hierarchical_swap_limit,omitempty"`
	TotalCache              uint64       `protobuf:"varint,18,opt,name=total_cache,json=totalCache,proto3" json:"total_cache,omitempty"`
	TotalRSS                uint64       `protobuf:"varint,19,opt,name=total_rss,json=totalRss,proto3" json:"total_rss,omitempty"`
	TotalRSSHuge            uint64       `protobuf:"varint,20,opt,name=total_rss_huge,json=totalRssHuge,proto3" json:"total_rss_huge,omitempty"`
	TotalMappedFile         uint64       `protobuf:"varint,21,opt,name=total_mapped_file,json=totalMappedFile,proto3" json:"total_mapped_file,omitempty"`
	TotalDirty              uint64       `protobuf:"varint,22,opt,name=total_dirty,json=totalDirty,proto3" json:"total_dirty,omitempty"`
	TotalWriteback          uint64       `protobuf:"varint,23,opt,name=total_writeback,json=totalWriteback,proto3" json:"total_writeback,omitempty"`
	TotalPgPgIn             uint64       `protobuf:"varint,24,opt,name=total_pg_pg_in,json=totalPgPgIn,proto3" json:"total_pg_pg_in,omitempty"`
	TotalPgPgOut            uint64       `protobuf:"varint,25,opt,name=total_pg_pg_out,json=totalPgPgOut,proto3" json:"total_pg_pg_out,omitempty"`
	TotalPgFault            uint64       `protobuf:"varint,26,opt,name=total_pg_fault,json=totalPgFault,proto3" json:"total_pg_fault,omitempty"`
	TotalPgMajFault         uint64       `protobuf:"varint,27,opt,name=total_pg_maj_fault,json=totalPgMajFault,proto3" json:"total_pg_maj_fault,omitempty"`
	TotalInactiveAnon       uint64       `protobuf:"varint,28,opt,name=total_inactive_anon,json=totalInactiveAnon,proto3" json:"total_inactive_anon,omitempty"`
	TotalActiveAnon         uint64       `protobuf:"varint,29,opt,name=total_active_anon,json=totalActiveAnon,proto3" json:"total_active_anon,omitempty"`
	TotalInactiveFile       uint64       `protobuf:"varint,30,opt,name=total_inactive_file,json=totalInactiveFile,proto3" json:"total_inactive_file,omitempty"`
	TotalActiveFile         uint64       `protobuf:"varint,31,opt,name=total_active_file,json=totalActiveFile,proto3" json:"total_active_file,omitempty"`
	TotalUnevictable        uint64       `protobuf:"varint,32,opt,name=total_unevictable,json=totalUnevictable,proto3" json:"total_unevictable,omitempty"`
	Usage                   *MemoryEntry `protobuf:"bytes,33,opt,name=usage,proto3" json:"usage,omitempty"`
	Swap                    *MemoryEntry `protobuf:"bytes,34,opt,name=swap,proto3" json:"swap,omitempty"`
	Kernel                  *MemoryEntry `protobuf:"bytes,35,opt,name=kernel,proto3" json:"kernel,omitempty"`
	KernelTCP               *MemoryEntry `protobuf:"bytes,36,opt,name=kernel_tcp,json=kernelTcp,proto3" json:"kernel_tcp,omitempty"`
	XXX_NoUnkeyedLiteral    struct{}     `json:"-"`
	XXX_unrecognized        []byte       `json:"-"`
	XXX_sizecache           int32        `json:"-"`
}

func (m *MemoryStat) Reset()      { *m = MemoryStat{} }
func (*MemoryStat) ProtoMessage() {}
func (*MemoryStat) Descriptor() ([]byte, []int) {
	return fileDescriptor_a17b2d87c332bfaa, []int{6}
}
func (m *MemoryStat) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *MemoryStat) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_MemoryStat.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalToSizedBuffer(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *MemoryStat) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MemoryStat.Merge(m, src)
}
func (m *MemoryStat) XXX_Size() int {
	return m.Size()
}
func (m *MemoryStat) XXX_DiscardUnknown() {
	xxx_messageInfo_MemoryStat.DiscardUnknown(m)
}

var xxx_messageInfo_MemoryStat proto.InternalMessageInfo

type MemoryEntry struct {
	Limit                uint64   `protobuf:"varint,1,opt,name=limit,proto3" json:"limit,omitempty"`
	Usage                uint64   `protobuf:"varint,2,opt,name=usage,proto3" json:"usage,omitempty"`
	Max                  uint64   `protobuf:"varint,3,opt,name=max,proto3" json:"max,omitempty"`
	Failcnt              uint64   `protobuf:"varint,4,opt,name=failcnt,proto3" json:"failcnt,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *MemoryEntry) Reset()      { *m = MemoryEntry{} }
func (*MemoryEntry) ProtoMessage() {}
func (*MemoryEntry) Descriptor() ([]byte, []int) {
	return fileDescriptor_a17b2d87c332bfaa, []int{7}
}
func (m *MemoryEntry) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *MemoryEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_MemoryEntry.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalToSizedBuffer(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *MemoryEntry) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MemoryEntry.Merge(m, src)
}
func (m *MemoryEntry) XXX_Size() int {
	return m.Size()
}
func (m *MemoryEntry) XXX_DiscardUnknown() {
	xxx_messageInfo_MemoryEntry.DiscardUnknown(m)
}

var xxx_messageInfo_MemoryEntry proto.InternalMessageInfo

type MemoryOomControl struct {
	OomKillDisable       uint64   `protobuf:"varint,1,opt,name=oom_kill_disable,json=oomKillDisable,proto3" json:"oom_kill_disable,omitempty"`
	UnderOom             uint64   `protobuf:"varint,2,opt,name=under_oom,json=underOom,proto3" json:"under_oom,omitempty"`
	OomKill              uint64   `protobuf:"varint,3,opt,name=oom_kill,json=oomKill,proto3" json:"oom_kill,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *MemoryOomControl) Reset()      { *m = MemoryOomControl{} }
func (*MemoryOomControl) ProtoMessage() {}
func (*MemoryOomControl) Descriptor() ([]byte, []int) {
	return fileDescriptor_a17b2d87c332bfaa, []int{8}
}
func (m *MemoryOomControl) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *MemoryOomControl) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_MemoryOomControl.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalToSizedBuffer(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *MemoryOomControl) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MemoryOomControl.Merge(m, src)
}
func (m *MemoryOomControl) XXX_Size() int {
	return m.Size()
}
func (m *MemoryOomControl) XXX_DiscardUnknown() {
	xxx_messageInfo_MemoryOomControl.DiscardUnknown(m)
}

var xxx_messageInfo_MemoryOomControl proto.InternalMessageInfo

type BlkIOStat struct {
	IoServiceBytesRecursive []*BlkIOEntry `protobuf:"bytes,1,rep,name=io_service_bytes_recursive,json=ioServiceBytesRecursive,proto3" json:"io_service_bytes_recursive,omitempty"`
	IoServicedRecursive     []*BlkIOEntry `protobuf:"bytes,2,rep,name=io_serviced_recursive,json=ioServicedRecursive,proto3" json:"io_serviced_recursive,omitempty"`
	IoQueuedRecursive       []*BlkIOEntry `protobuf:"bytes,3,rep,name=io_queued_recursive,json=ioQueuedRecursive,proto3" json:"io_queued_recursive,omitempty"`
	IoServiceTimeRecursive  []*BlkIOEntry `protobuf:"bytes,4,rep,name=io_service_time_recursive,json=ioServiceTimeRecursive,proto3" json:"io_service_time_recursive,omitempty"`
	IoWaitTimeRecursive     []*BlkIOEntry `protobuf:"bytes,5,rep,name=io_wait_time_recursive,json=ioWaitTimeRecursive,proto3" json:"io_wait_time_recursive,omitempty"`
	IoMergedRecursive       []*BlkIOEntry `protobuf:"bytes,6,rep,name=io_merged_recursive,json=ioMergedRecursive,proto3" json:"io_merged_recursive,omitempty"`
	IoTimeRecursive         []*BlkIOEntry `protobuf:"bytes,7,rep,name=io_time_recursive,json=ioTimeRecursive,proto3" json:"io_time_recursive,omitempty"`
	SectorsRecursive        []*BlkIOEntry `protobuf:"bytes,8,rep,name=sectors_recursive,json=sectorsRecursive,proto3" json:"sectors_recursive,omitempty"`
	XXX_NoUnkeyedLiteral    struct{}      `json:"-"`
	XXX_unrecognized        []byte        `json:"-"`
	XXX_sizecache           int32         `json:"-"`
}

func (m *BlkIOStat) Reset()      { *m = BlkIOStat{} }
func (*BlkIOStat) ProtoMessage() {}
func (*BlkIOStat) Descriptor() ([]byte, []int) {
	return fileDescriptor_a17b2d87c332bfaa, []int{9}
}
func (m *BlkIOStat) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *BlkIOStat) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_BlkIOStat.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalToSizedBuffer(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *BlkIOStat) XXX_Merge(src proto.Message) {
	xxx_messageInfo_BlkIOStat.Merge(m, src)
}
func (m *BlkIOStat) XXX_Size() int {
	return m.Size()
}
func (m *BlkIOStat) XXX_DiscardUnknown() {
	xxx_messageInfo_BlkIOStat.DiscardUnknown(m)
}

var xxx_messageInfo_BlkIOStat proto.InternalMessageInfo

type BlkIOEntry struct {
	Op                   string   `protobuf:"bytes,1,opt,name=op,proto3" json:"op,omitempty"`
	Device               string   `protobuf:"bytes,2,opt,name=device,proto3" json:"device,omitempty"`
	Major                uint64   `protobuf:"varint,3,opt,name=major,proto3" json:"major,omitempty"`
	Minor                uint64   `protobuf:"varint,4,opt,name=minor,proto3" json:"minor,omitempty"`
	Value                uint64   `protobuf:"varint,5,opt,name=value,proto3" json:"value,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *BlkIOEntry) Reset()      { *m = BlkIOEntry{} }
func (*BlkIOEntry) ProtoMessage() {}
func (*BlkIOEntry) Descriptor() ([]byte, []int) {
	return fileDescriptor_a17b2d87c332bfaa, []int{10}
}
func (m *BlkIOEntry) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *BlkIOEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_BlkIOEntry.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalToSizedBuffer(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *BlkIOEntry) XXX_Merge(src proto.Message) {
	xxx_messageInfo_BlkIOEntry.Merge(m, src)
}
func (m *BlkIOEntry) XXX_Size() int {
	return m.Size()
}
func (m *BlkIOEntry) XXX_DiscardUnknown() {
	xxx_messageInfo_BlkIOEntry.DiscardUnknown(m)
}

var xxx_messageInfo_BlkIOEntry proto.InternalMessageInfo

type RdmaStat struct {
	Current              []*RdmaEntry `protobuf:"bytes,1,rep,name=current,proto3" json:"current,omitempty"`
	Limit                []*RdmaEntry `protobuf:"bytes,2,rep,name=limit,proto3" json:"limit,omitempty"`
	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
	XXX_unrecognized     []byte       `json:"-"`
	XXX_sizecache        int32        `json:"-"`
}

func (m *RdmaStat) Reset()      { *m = RdmaStat{} }
func (*RdmaStat) ProtoMessage() {}
func (*RdmaStat) Descriptor() ([]byte, []int) {
	return fileDescriptor_a17b2d87c332bfaa, []int{11}
}
func (m *RdmaStat) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *RdmaStat) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_RdmaStat.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalToSizedBuffer(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *RdmaStat) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RdmaStat.Merge(m, src)
}
func (m *RdmaStat) XXX_Size() int {
	return m.Size()
}
func (m *RdmaStat) XXX_DiscardUnknown() {
	xxx_messageInfo_RdmaStat.DiscardUnknown(m)
}

var xxx_messageInfo_RdmaStat proto.InternalMessageInfo

type RdmaEntry struct {
	Device               string   `protobuf:"bytes,1,opt,name=device,proto3" json:"device,omitempty"`
	HcaHandles           uint32   `protobuf:"varint,2,opt,name=hca_handles,json=hcaHandles,proto3" json:"hca_handles,omitempty"`
	HcaObjects           uint32   `protobuf:"varint,3,opt,name=hca_objects,json=hcaObjects,proto3" json:"hca_objects,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RdmaEntry) Reset()      { *m = RdmaEntry{} }
func (*RdmaEntry) ProtoMessage() {}
func (*RdmaEntry) Descriptor() ([]byte, []int) {
	return fileDescriptor_a17b2d87c332bfaa, []int{12}
}
func (m *RdmaEntry) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *RdmaEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_RdmaEntry.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalToSizedBuffer(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *RdmaEntry) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RdmaEntry.Merge(m, src)
}
func (m *RdmaEntry) XXX_Size() int {
	return m.Size()
}
func (m *RdmaEntry) XXX_DiscardUnknown() {
	xxx_messageInfo_RdmaEntry.DiscardUnknown(m)
}

var xxx_messageInfo_RdmaEntry proto.InternalMessageInfo

type NetworkStat struct {
	Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	RxBytes              uint64   `protobuf:"varint,2,opt,name=rx_bytes,json=rxBytes,proto3" json:"rx_bytes,omitempty"`
	RxPackets            uint64   `protobuf:"varint,3,opt,name=rx_packets,json=rxPackets,proto3" json:"rx_packets,omitempty"`
	RxErrors             uint64   `protobuf:"varint,4,opt,name=rx_errors,json=rxErrors,proto3" json:"rx_errors,omitempty"`
	RxDropped            uint64   `protobuf:"varint,5,opt,name=rx_dropped,json=rxDropped,proto3" json:"rx_dropped,omitempty"`
	TxBytes              uint64   `protobuf:"varint,6,opt,name=tx_bytes,json=txBytes,proto3" json:"tx_bytes,omitempty"`
	TxPackets            uint64   `protobuf:"varint,7,opt,name=tx_packets,json=txPackets,proto3" json:"tx_packets,omitempty"`
	TxErrors             uint64   `protobuf:"varint,8,opt,name=tx_errors,json=txErrors,proto3" json:"tx_errors,omitempty"`
	TxDropped            uint64   `protobuf:"varint,9,opt,name=tx_dropped,json=txDropped,proto3" json:"tx_dropped,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *NetworkStat) Reset()      { *m = NetworkStat{} }
func (*NetworkStat) ProtoMessage() {}
func (*NetworkStat) Descriptor() ([]byte, []int) {
	return fileDescriptor_a17b2d87c332bfaa, []int{13}
}
func (m *NetworkStat) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *NetworkStat) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_NetworkStat.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalToSizedBuffer(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *NetworkStat) XXX_Merge(src proto.Message) {
	xxx_messageInfo_NetworkStat.Merge(m, src)
}
func (m *NetworkStat) XXX_Size() int {
	return m.Size()
}
func (m *NetworkStat) XXX_DiscardUnknown() {
	xxx_messageInfo_NetworkStat.DiscardUnknown(m)
}

var xxx_messageInfo_NetworkStat proto.InternalMessageInfo

// CgroupStats exports per-cgroup statistics.
type CgroupStats struct {
	// number of tasks sleeping
	NrSleeping uint64 `protobuf:"varint,1,opt,name=nr_sleeping,json=nrSleeping,proto3" json:"nr_sleeping,omitempty"`
	// number of tasks running
	NrRunning uint64 `protobuf:"varint,2,opt,name=nr_running,json=nrRunning,proto3" json:"nr_running,omitempty"`
	// number of tasks in stopped state
	NrStopped uint64 `protobuf:"varint,3,opt,name=nr_stopped,json=nrStopped,proto3" json:"nr_stopped,omitempty"`
	// number of tasks in uninterruptible state
	NrUninterruptible uint64 `protobuf:"varint,4,opt,name=nr_uninterruptible,json=nrUninterruptible,proto3" json:"nr_uninterruptible,omitempty"`
	// number of tasks waiting on IO
	NrIoWait             uint64   `protobuf:"varint,5,opt,name=nr_io_wait,json=nrIoWait,proto3" json:"nr_io_wait,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *CgroupStats) Reset()      { *m = CgroupStats{} }
func (*CgroupStats) ProtoMessage() {}
func (*CgroupStats) Descriptor() ([]byte, []int) {
	return fileDescriptor_a17b2d87c332bfaa, []int{14}
}
func (m *CgroupStats) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *CgroupStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_CgroupStats.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalToSizedBuffer(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *CgroupStats) XXX_Merge(src proto.Message) {
	xxx_messageInfo_CgroupStats.Merge(m, src)
}
func (m *CgroupStats) XXX_Size() int {
	return m.Size()
}
func (m *CgroupStats) XXX_DiscardUnknown() {
	xxx_messageInfo_CgroupStats.DiscardUnknown(m)
}

var xxx_messageInfo_CgroupStats proto.InternalMessageInfo

func init() {
	proto.RegisterType((*Metrics)(nil), "io.containerd.cgroups.v1.Metrics")
	proto.RegisterType((*HugetlbStat)(nil), "io.containerd.cgroups.v1.HugetlbStat")
	proto.RegisterType((*PidsStat)(nil), "io.containerd.cgroups.v1.PidsStat")
	proto.RegisterType((*CPUStat)(nil), "io.containerd.cgroups.v1.CPUStat")
	proto.RegisterType((*CPUUsage)(nil), "io.containerd.cgroups.v1.CPUUsage")
	proto.RegisterType((*Throttle)(nil), "io.containerd.cgroups.v1.Throttle")
	proto.RegisterType((*MemoryStat)(nil), "io.containerd.cgroups.v1.MemoryStat")
	proto.RegisterType((*MemoryEntry)(nil), "io.containerd.cgroups.v1.MemoryEntry")
	proto.RegisterType((*MemoryOomControl)(nil), "io.containerd.cgroups.v1.MemoryOomControl")
	proto.RegisterType((*BlkIOStat)(nil), "io.containerd.cgroups.v1.BlkIOStat")
	proto.RegisterType((*BlkIOEntry)(nil), "io.containerd.cgroups.v1.BlkIOEntry")
	proto.RegisterType((*RdmaStat)(nil), "io.containerd.cgroups.v1.RdmaStat")
	proto.RegisterType((*RdmaEntry)(nil), "io.containerd.cgroups.v1.RdmaEntry")
	proto.RegisterType((*NetworkStat)(nil), "io.containerd.cgroups.v1.NetworkStat")
	proto.RegisterType((*CgroupStats)(nil), "io.containerd.cgroups.v1.CgroupStats")
}

func init() {
	proto.RegisterFile("github.com/containerd/cgroups/stats/v1/metrics.proto", fileDescriptor_a17b2d87c332bfaa)
}

var fileDescriptor_a17b2d87c332bfaa = []byte{
	// 1749 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x58, 0xcd, 0x72, 0xe3, 0xc6,
	0x11, 0x36, 0x45, 0x48, 0x24, 0x9a, 0x92, 0x56, 0x9a, 0xfd, 0x83, 0xe4, 0xb5, 0x28, 0x53, 0xbb,
	0x89, 0xe2, 0xad, 0x48, 0x65, 0x27, 0xb5, 0x95, 0x75, 0xec, 0x4a, 0x59, 0x5a, 0xbb, 0x76, 0xcb,
	0x51, 0x44, 0x83, 0x52, 0xd9, 0x39, 0xa1, 0x40, 0x70, 0x16, 0x9c, 0x15, 0x80, 0x81, 0x07, 0x03,
	0x89, 0xca, 0x29, 0x87, 0x54, 0xe5, 0x94, 0x07, 0xca, 0x1b, 0xf8, 0x98, 0x4b, 0x52, 0xc9, 0x45,
	0x15, 0xf3, 0x49, 0x52, 0x33, 0x3d, 0xf8, 0xa1, 0xbc, 0x5a, 0x85, 0x37, 0x76, 0xcf, 0xd7, 0x5f,
	0xf7, 0x34, 0xbe, 0x19, 0x34, 0x08, 0xbf, 0x0e, 0x99, 0x1c, 0xe7, 0xc3, 0xbd, 0x80, 0xc7, 0xfb,
	0x01, 0x4f, 0xa4, 0xcf, 0x12, 0x2a, 0x46, 0xfb, 0x41, 0x28, 0x78, 0x9e, 0x66, 0xfb, 0x99, 0xf4,
	0x65, 0xb6, 0x7f, 0xfe, 0xf1, 0x7e, 0x4c, 0xa5, 0x60, 0x41, 0xb6, 0x97, 0x0a, 0x2e, 0x39, 0x71,
	0x18, 0xdf, 0xab, 0xd0, 0x7b, 0x06, 0xbd, 0x77, 0xfe, 0xf1, 0xe6, 0xbd, 0x90, 0x87, 0x5c, 0x83,
	0xf6, 0xd5, 0x2f, 0xc4, 0xf7, 0xfe, 0x65, 0x41, 0xeb, 0x08, 0x19, 0xc8, 0xef, 0xa0, 0x35, 0xce,
	0x43, 0x2a, 0xa3, 0xa1, 0xd3, 0xd8, 0x6e, 0xee, 0x76, 0x3e, 0x79, 0xb2, 0x77, 0x13, 0xdb, 0xde,
	0x4b, 0x04, 0x0e, 0xa4, 0x2f, 0xdd, 0x22, 0x8a, 0x3c, 0x03, 0x2b, 0x65, 0xa3, 0xcc, 0x59, 0xd8,
	0x6e, 0xec, 0x76, 0x3e, 0xe9, 0xdd, 0x1c, 0xdd, 0x67, 0xa3, 0x4c, 0x87, 0x6a, 0x3c, 0xf9, 0x0c,
	0x9a, 0x41, 0x9a, 0x3b, 0x4d, 0x1d, 0xf6, 0xe1, 0xcd, 0x61, 0x87, 0xfd, 0x53, 0x15, 0x75, 0xd0,
	0x9a, 0x5e, 0x75, 0x9b, 0x87, 0xfd, 0x53, 0x57, 0x85, 0x91, 0xcf, 0x60, 0x29, 0xa6, 0x31, 0x17,
	0x97, 0x8e, 0xa5, 0x09, 0x1e, 0xdf, 0x4c, 0x70, 0xa4, 0x71, 0x3a, 0xb3, 0x89, 0x21, 0xcf, 0x61,
	0x71, 0x18, 0x9d, 0x31, 0xee, 0x2c, 0xea, 0xe0, 0x9d, 0x9b, 0x83, 0x0f, 0xa2, 0xb3, 0x57, 0xc7,
	0x3a, 0x16, 0x23, 0xd4, 0x76, 0xc5, 0x28, 0xf6, 0x9d, 0xa5, 0xdb, 0xb6, 0xeb, 0x8e, 0x62, 0x1f,
	0xb7, 0xab, 0xf0, 0xaa, 0xcf, 0x09, 0x95, 0x17, 0x5c, 0x9c, 0x39, 0xad, 0xdb, 0xfa, 0xfc, 0x07,
	0x04, 0x62, 0x9f, 0x4d, 0x14, 0x79, 0x09, 0xcb, 0x08, 0xf1, 0xb4, 0x0a, 0x9c, 0xb6, 0x2e, 0xe0,
	0x1d, 0x2c, 0x87, 0xfa, 0xa7, 0x22, 0xc9, 0xdc, 0x4e, 0x50, 0x19, 0xe4, 0x3b, 0x20, 0xd8, 0x07,
	0x8f, 0xf3, 0xd8, 0x53, 0xc1, 0x82, 0x47, 0x8e, 0xad, 0xf9, 0x3e, 0xba, 0xad, 0x8f, 0xc7, 0x3c,
	0x3e, 0xc4, 0x08, 0x77, 0x2d, 0xbe, 0xe6, 0xe9, 0x9d, 0x41, 0xa7, 0xa6, 0x11, 0x72, 0x0f, 0x16,
	0xf3, 0xcc, 0x0f, 0xa9, 0xd3, 0xd8, 0x6e, 0xec, 0x5a, 0x2e, 0x1a, 0x64, 0x0d, 0x9a, 0xb1, 0x3f,
	0xd1, 0x7a, 0xb1, 0x5c, 0xf5, 0x93, 0x38, 0xd0, 0x7a, 0xed, 0xb3, 0x28, 0x48, 0xa4, 0x96, 0x83,
	0xe5, 0x16, 0x26, 0xd9, 0x84, 0x76, 0xea, 0x87, 0x34, 0x63, 0x7f, 0xa2, 0xfa, 0x41, 0xdb, 0x6e,
	0x69, 0xf7, 0x3e, 0x85, 0x76, 0x21, 0x29, 0xc5, 0x10, 0xe4, 0x42, 0xd0, 0x44, 0x9a, 0x5c, 0x85,
	0xa9, 0x6a, 0x88, 0x58, 0xcc, 0xa4, 0xc9, 0x87, 0x46, 0xef, 0xaf, 0x0d, 0x68, 0x19, 0x61, 0x91,
	0xdf, 0xd4, 0xab, 0x7c, 0xe7, 0x23, 0x3d, 0xec, 0x9f, 0x9e, 0x2a, 0x64, 0xb1, 0x93, 0x03, 0x00,
	0x39, 0x16, 0x5c, 0xca, 0x88, 0x25, 0xe1, 0xed, 0x07, 0xe0, 0x04, 0xb1, 0xd4, 0xad, 0x45, 0xf5,
	0xbe, 0x87, 0x76, 0x41, 0xab, 0x6a, 0x95, 0x5c, 0xfa, 0x51, 0xd1, 0x2f, 0x6d, 0x90, 0x07, 0xb0,
	0x74, 0x46, 0x45, 0x42, 0x23, 0xb3, 0x05, 0x63, 0x11, 0x02, 0x56, 0x9e, 0x51, 0x61, 0x5a, 0xa6,
	0x7f, 0x93, 0x1d, 0x68, 0xa5, 0x54, 0x78, 0xea, 0x60, 0x59, 0xdb, 0xcd, 0x5d, 0xeb, 0x00, 0xa6,
	0x57, 0xdd, 0xa5, 0x3e, 0x15, 0xea, 0xe0, 0x2c, 0xa5, 0x54, 0x1c, 0xa6, 0x79, 0x6f, 0x02, 0xed,
	0xa2, 0x14, 0xd5, 0xb8, 0x94, 0x0a, 0xc6, 0x47, 0x59, 0xd1, 0x38, 0x63, 0x92, 0xa7, 0xb0, 0x6e,
	0xca, 0xa4, 0x23, 0xaf, 0xc0, 0x60, 0x05, 0x6b, 0xe5, 0x42, 0xdf, 0x80, 0x9f, 0xc0, 0x6a, 0x05,
	0x96, 0x2c, 0xa6, 0xa6, 0xaa, 0x95, 0xd2, 0x7b, 0xc2, 0x62, 0xda, 0xfb, 0x4f, 0x07, 0xa0, 0x3a,
	0x8e, 0x6a, 0xbf, 0x81, 0x1f, 0x8c, 0x4b, 0x7d, 0x68, 0x83, 0x6c, 0x40, 0x53, 0x64, 0x26, 0x15,
	0x9e, 0x7a, 0x77, 0x30, 0x70, 0x95, 0x8f, 0xfc, 0x0c, 0xda, 0x22, 0xcb, 0x3c, 0x75, 0xf5, 0x60,
	0x82, 0x83, 0xce, 0xf4, 0xaa, 0xdb, 0x72, 0x07, 0x03, 0x25, 0x3b, 0xb7, 0x25, 0xb2, 0x4c, 0xfd,
	0x20, 0x5d, 0xe8, 0xc4, 0x7e, 0x9a, 0xd2, 0x91, 0xf7, 0x9a, 0x45, 0xa8, 0x1c, 0xcb, 0x05, 0x74,
	0x7d, 0xc5, 0x22, 0xdd, 0xe9, 0x11, 0x13, 0xf2, 0x52, 0x5f, 0x00, 0x96, 0x8b, 0x06, 0x79, 0x04,
	0xf6, 0x85, 0x60, 0x92, 0x0e, 0xfd, 0xe0, 0x4c, 0x1f, 0x70, 0xcb, 0xad, 0x1c, 0xc4, 0x81, 0x76,
	0x1a, 0x7a, 0x69, 0xe8, 0xb1, 0xc4, 0x69, 0xe1, 0x93, 0x48, 0xc3, 0x7e, 0xf8, 0x2a, 0x21, 0x9b,
	0x60, 0xe3, 0x0a, 0xcf, 0xa5, 0x3e, 0x97, 0xaa, 0x8d, 0x61, 0x3f, 0x3c, 0xce, 0x25, 0xd9, 0xd0,
	0x51, 0xaf, 0xfd, 0x3c, 0x92, 0xfa, 0x88, 0xe9, 0xa5, 0xaf, 0x94, 0x49, 0xb6, 0x61, 0x39, 0x0d,
	0xbd, 0xd8, 0x7f, 0x63, 0x96, 0x01, 0xcb, 0x4c, 0xc3, 0x23, 0xff, 0x0d, 0x22, 0x76, 0x60, 0x85,
	0x25, 0x7e, 0x20, 0xd9, 0x39, 0xf5, 0xfc, 0x84, 0x27, 0x4e, 0x47, 0x43, 0x96, 0x0b, 0xe7, 0x17,
	0x09, 0x4f, 0xd4, 0x66, 0xeb, 0x90, 0x65, 0x64, 0xa9, 0x01, 0xea, 0x2c, 0xba, 0x1f, 0x2b, 0xb3,
	0x2c, 0xba, 0x23, 0x15, 0x8b, 0x86, 0xac, 0xd6, 0x59, 0x34, 0x60, 0x1b, 0x3a, 0x79, 0x42, 0xcf,
	0x59, 0x20, 0xfd, 0x61, 0x44, 0x9d, 0x3b, 0x1a, 0x50, 0x77, 0x91, 0x4f, 0x61, 0x63, 0xcc, 0xa8,
	0xf0, 0x45, 0x30, 0x66, 0x81, 0x1f, 0x79, 0xe6, 0x92, 0xc1, 0xe3, 0xb7, 0xa6, 0xf1, 0x0f, 0xeb,
	0x00, 0x54, 0xc2, 0xef, 0xd5, 0x32, 0x79, 0x06, 0x33, 0x4b, 0x5e, 0x76, 0xe1, 0xa7, 0x26, 0x72,
	0x5d, 0x47, 0xde, 0xaf, 0x2f, 0x0f, 0x2e, 0xfc, 0x14, 0xe3, 0xba, 0xd0, 0xd1, 0xa7, 0xc4, 0x43,
	0x21, 0x11, 0x2c, 0x5b, 0xbb, 0x0e, 0xb5, 0x9a, 0x7e, 0x01, 0x36, 0x02, 0x94, 0xa6, 0xee, 0x6a,
	0xcd, 0x2c, 0x4f, 0xaf, 0xba, 0xed, 0x13, 0xe5, 0x54, 0xc2, 0x6a, 0xeb, 0x65, 0x37, 0xcb, 0xc8,
	0x33, 0x58, 0x2d, 0xa1, 0xa8, 0xb1, 0x7b, 0x1a, 0xbf, 0x36, 0xbd, 0xea, 0x2e, 0x17, 0x78, 0x2d,
	0xb4, 0xe5, 0x22, 0x46, 0xab, 0xed, 0x23, 0x58, 0xc7, 0xb8, 0xba, 0xe6, 0xee, 0xeb, 0x4a, 0xee,
	0xe8, 0x85, 0xa3, 0x4a, 0x78, 0x65, 0xbd, 0x28, 0xbf, 0x07, 0xb5, 0x7a, 0x5f, 0x68, 0x0d, 0xfe,
	0x1c, 0x30, 0xc6, 0xab, 0x94, 0xf8, 0x50, 0x83, 0xb0, 0xb6, 0x6f, 0x4b, 0x39, 0xee, 0x14, 0xd5,
	0x96, 0xa2, 0x74, 0xf0, 0x91, 0x68, 0x6f, 0x1f, 0x95, 0xf9, 0xa4, 0x60, 0xab, 0xf4, 0xb9, 0x81,
	0x0f, 0xbf, 0x44, 0x29, 0x91, 0x3e, 0xae, 0x71, 0xa1, 0x16, 0x37, 0x67, 0x50, 0xa8, 0xc6, 0xa7,
	0x40, 0x4a, 0x54, 0xa5, 0xda, 0xf7, 0x6b, 0x1b, 0xed, 0x57, 0xd2, 0xdd, 0x83, 0xbb, 0x08, 0x9e,
	0x15, 0xf0, 0x23, 0x8d, 0xc6, 0x7e, 0xbd, 0xaa, 0xab, 0xb8, 0x6c, 0x62, 0x1d, 0xfd, 0x41, 0x8d,
	0xfb, 0x8b, 0x0a, 0xfb, 0x53, 0x6e, 0xdd, 0xf2, 0xad, 0xb7, 0x70, 0xeb, 0xa6, 0x5f, 0xe7, 0xd6,
	0xe8, 0xee, 0x4f, 0xb8, 0x35, 0xf6, 0x69, 0x81, 0xad, 0x8b, 0x7d, 0xdb, 0x5c, 0x7b, 0x6a, 0xe1,
	0xb4, 0xa6, 0xf8, 0xdf, 0x16, 0xaf, 0x8e, 0x0f, 0x6f, 0x7b, 0x19, 0xa3, 0xd6, 0xbf, 0x4c, 0xa4,
	0xb8, 0x2c, 0xde, 0x1e, 0xcf, 0xc1, 0x52, 0x2a, 0x77, 0x7a, 0xf3, 0xc4, 0xea, 0x10, 0xf2, 0x79,
	0xf9, 0x4a, 0xd8, 0x99, 0x27, 0xb8, 0x78, 0x73, 0x0c, 0x00, 0xf0, 0x97, 0x27, 0x83, 0xd4, 0x79,
	0x3c, 0x07, 0xc5, 0xc1, 0xca, 0xf4, 0xaa, 0x6b, 0x7f, 0xad, 0x83, 0x4f, 0x0e, 0xfb, 0xae, 0x8d,
	0x3c, 0x27, 0x41, 0xda, 0xa3, 0xd0, 0xa9, 0x01, 0xab, 0xf7, 0x6e, 0xa3, 0xf6, 0xde, 0xad, 0x26,
	0x82, 0x85, 0xb7, 0x4c, 0x04, 0xcd, 0xb7, 0x4e, 0x04, 0xd6, 0xcc, 0x44, 0xd0, 0x93, 0xb0, 0x76,
	0x7d, 0x10, 0x21, 0xbb, 0xb0, 0xa6, 0x26, 0x99, 0x33, 0x16, 0xa9, 0x73, 0x95, 0xe9, 0x47, 0x86,
	0x69, 0x57, 0x39, 0x8f, 0xbf, 0x66, 0x51, 0xf4, 0x02, 0xbd, 0xe4, 0x7d, 0xb0, 0xf3, 0x64, 0x44,
	0x85, 0x9a, 0x7c, 0x4c, 0x0d, 0x6d, 0xed, 0x38, 0xe6, 0xb1, 0xba, 0xaa, 0x0b, 0x9a, 0x62, 0x0e,
	0x31, 0xe1, 0xbd, 0x7f, 0x2e, 0x82, 0x5d, 0x8e, 0x82, 0xc4, 0x87, 0x4d, 0xc6, 0xbd, 0x8c, 0x8a,
	0x73, 0x16, 0x50, 0x6f, 0x78, 0x29, 0x69, 0xe6, 0x09, 0x1a, 0xe4, 0x22, 0x63, 0xe7, 0xd4, 0x8c,
	0xd1, 0x8f, 0x6f, 0x99, 0x29, 0xf1, 0x89, 0x3c, 0x64, 0x7c, 0x80, 0x34, 0x07, 0x8a, 0xc5, 0x2d,
	0x48, 0xc8, 0x77, 0x70, 0xbf, 0x4a, 0x31, 0xaa, 0xb1, 0x2f, 0xcc, 0xc1, 0x7e, 0xb7, 0x64, 0x1f,
	0x55, 0xcc, 0x27, 0x70, 0x97, 0x71, 0xef, 0xfb, 0x9c, 0xe6, 0x33, 0xbc, 0xcd, 0x39, 0x78, 0xd7,
	0x19, 0xff, 0x46, 0xc7, 0x57, 0xac, 0x1e, 0x6c, 0xd4, 0x5a, 0xa2, 0x26, 0x80, 0x1a, 0xb7, 0x35,
	0x07, 0xf7, 0x83, 0xb2, 0x66, 0x35, 0x31, 0x54, 0x09, 0xfe, 0x08, 0x0f, 0x18, 0xf7, 0x2e, 0x7c,
	0x26, 0xaf, 0xb3, 0x2f, 0xce, 0xd7, 0x91, 0x6f, 0x7d, 0x26, 0x67, 0xa9, 0xb1, 0x23, 0x31, 0x15,
	0xe1, 0x4c, 0x47, 0x96, 0xe6, 0xeb, 0xc8, 0x91, 0x8e, 0xaf, 0x58, 0xfb, 0xb0, 0xce, 0xf8, 0xf5,
	0x5a, 0x5b, 0x73, 0x70, 0xde, 0x61, 0x7c, 0xb6, 0xce, 0x6f, 0x60, 0x3d, 0xa3, 0x81, 0xe4, 0xa2,
	0xae, 0xb6, 0xf6, 0x1c, 0x8c, 0x6b, 0x26, 0xbc, 0xa4, 0xec, 0x9d, 0x03, 0x54, 0xeb, 0x64, 0x15,
	0x16, 0x78, 0xaa, 0x4f, 0x8e, 0xed, 0x2e, 0xf0, 0x54, 0x4d, 0x9e, 0x23, 0x75, 0xd9, 0xe1, 0x71,
	0xb5, 0x5d, 0x63, 0xa9, 0x53, 0x1c, 0xfb, 0x6f, 0x78, 0x31, 0x7a, 0xa2, 0xa1, 0xbd, 0x2c, 0xe1,
	0xc2, 0x9c, 0x58, 0x34, 0x94, 0xf7, 0xdc, 0x8f, 0x72, 0x5a, 0x4c, 0x5a, 0xda, 0xe8, 0xfd, 0xa5,
	0x01, 0xed, 0xe2, 0x03, 0x89, 0x7c, 0x5e, 0x1f, 0xde, 0x9b, 0xef, 0xfe, 0x1e, 0x53, 0x41, 0xb8,
	0x99, 0x72, 0xc2, 0x7f, 0x5e, 0x4d, 0xf8, 0xff, 0x77, 0xb0, 0xf9, 0x0c, 0xa0, 0x60, 0x97, 0xbe,
	0xda, 0x6e, 0x1b, 0x33, 0xbb, 0xed, 0x42, 0x67, 0x1c, 0xf8, 0xde, 0xd8, 0x4f, 0x46, 0x11, 0xc5,
	0xb9, 0x74, 0xc5, 0x85, 0x71, 0xe0, 0xbf, 0x44, 0x4f, 0x01, 0xe0, 0xc3, 0x37, 0x34, 0x90, 0x99,
	0x6e, 0x0a, 0x02, 0x8e, 0xd1, 0xd3, 0xfb, 0xdb, 0x02, 0x74, 0x6a, 0xdf, 0x74, 0x6a, 0x72, 0x4f,
	0xfc, 0xb8, 0xc8, 0xa3, 0x7f, 0xab, 0xcb, 0x47, 0x4c, 0xf0, 0x2e, 0x31, 0x17, 0x53, 0x4b, 0x4c,
	0xf4, 0xa5, 0x40, 0x3e, 0x00, 0x10, 0x13, 0x2f, 0xf5, 0x83, 0x33, 0x6a, 0xe8, 0x2d, 0xd7, 0x16,
	0x93, 0x3e, 0x3a, 0xd4, 0x9d, 0x26, 0x26, 0x1e, 0x15, 0x82, 0x8b, 0xcc, 0xf4, 0xbe, 0x2d, 0x26,
	0x5f, 0x6a, 0xdb, 0xc4, 0x8e, 0x04, 0x57, 0x13, 0x88, 0x79, 0x06, 0xb6, 0x98, 0xbc, 0x40, 0x87,
	0xca, 0x2a, 0x8b, 0xac, 0x38, 0xf0, 0xb6, 0x64, 0x95, 0x55, 0x56, 0x59, 0x71, 0xe0, 0xb5, 0x65,
	0x3d, 0xab, 0x2c, 0xb3, 0xe2, 0xcc, 0xdb, 0x96, 0xb5, 0xac, 0xb2, 0xca, 0x6a, 0x17, 0xb1, 0x26,
	0x6b, 0xef, 0xef, 0x0d, 0xe8, 0xd4, 0xbe, 0x4e, 0x55, 0x03, 0x13, 0xe1, 0x65, 0x11, 0xa5, 0xa9,
	0xfa, 0x90, 0xc2, 0xab, 0x1b, 0x12, 0x31, 0x30, 0x1e, 0xc5, 0x97, 0x08, 0x4f, 0xe4, 0x49, 0x52,
	0x7c, 0x68, 0x59, 0xae, 0x9d, 0x08, 0x17, 0x1d, 0x66, 0x39, 0x93, 0x98, 0xae, 0x59, 0x2c, 0x0f,
	0xd0, 0x41, 0x7e, 0x09, 0x24, 0x11, 0x5e, 0x9e, 0xb0, 0x44, 0x52, 0x21, 0xf2, 0x54, 0xb2, 0x61,
	0xf9, 0x51, 0xb0, 0x9e, 0x88, 0xd3, 0xd9, 0x05, 0xf2, 0x48, 0xb3, 0x99, 0xcb, 0xc6, 0xb4, 0xac,
	0x9d, 0x88, 0x57, 0xfa, 0xe6, 0x38, 0x70, 0x7e, 0xf8, 0x71, 0xeb, 0xbd, 0x7f, 0xff, 0xb8, 0xf5,
	0xde, 0x9f, 0xa7, 0x5b, 0x8d, 0x1f, 0xa6, 0x5b, 0x8d, 0x7f, 0x4c, 0xb7, 0x1a, 0xff, 0x9d, 0x6e,
	0x35, 0x86, 0x4b, 0xfa, 0xcf, 0x95, 0x5f, 0xfd, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xc4, 0x4e, 0x24,
	0x22, 0xc4, 0x11, 0x00, 0x00,
}

func (m *Metrics) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalToSizedBuffer(dAtA[:size])
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *Metrics) MarshalTo(dAtA []byte) (int, error) {
	size := m.Size()
	return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *Metrics) MarshalToSizedBuffer(dAtA []byte) (int, error) {
	i := len(dAtA)
	_ = i
	var l int
	_ = l
	if m.XXX_unrecognized != nil {
		i -= len(m.XXX_unrecognized)
		copy(dAtA[i:], m.XXX_unrecognized)
	}
	if m.MemoryOomControl != nil {
		{
			size, err := m.MemoryOomControl.MarshalToSizedBuffer(dAtA[:i])
			if err != nil {
				return 0, err
			}
			i -= size
			i = encodeVarintMetrics(dAtA, i, uint64(size))
		}
		i--
		dAtA[i] = 0x4a
	}
	if m.CgroupStats != nil {
		{
			size, err := m.CgroupStats.MarshalToSizedBuffer(dAtA[:i])
			if err != nil {
				return 0, err
			}
			i -= size
			i = encodeVarintMetrics(dAtA, i, uint64(size))
		}
		i--
		dAtA[i] = 0x42
	}
	if len(m.Network) > 0 {
		for iNdEx := len(m.Network) - 1; iNdEx >= 0; iNdEx-- {
			{
				size, err := m.Network[iNdEx].MarshalToSizedBuffer(dAtA[:i])
				if err != nil {
					return 0, err
				}
				i -= size
				i = encodeVarintMetrics(dAtA, i, uint64(size))
			}
			i--
			dAtA[i] = 0x3a
		}
	}
	if m.Rdma != nil {
		{
			size, err := m.Rdma.MarshalToSizedBuffer(dAtA[:i])
			if err != nil {
				return 0, err
			}
			i -= size
			i = encodeVarintMetrics(dAtA, i, uint64(size))
		}
		i--
		dAtA[i] = 0x32
	}
	if m.Blkio != nil {
		{
			size, err := m.Blkio.MarshalToSizedBuffer(dAtA[:i])
			if err != nil {
				return 0, err
			}
			i -= size
			i = encodeVarintMetrics(dAtA, i, uint64(size))
		}
		i--
		dAtA[i] = 0x2a
	}
	if m.Memory != nil {
		{
			size, err := m.Memory.MarshalToSizedBuffer(dAtA[:i])
			if err != nil {
				return 0, err
			}
			i -= size
			i = encodeVarintMetrics(dAtA, i, uint64(size))
		}
		i--
		dAtA[i] = 0x22
	}
	if m.CPU != nil {
		{
			size, err := m.CPU.MarshalToSizedBuffer(dAtA[:i])
			if err != nil {
				return 0, err
			}
			i -= size
			i = encodeVarintMetrics(dAtA, i, uint64(size))
		}
		i--
		dAtA[i] = 0x1a
	}
	if m.Pids != nil {
		{
			size, err := m.Pids.MarshalToSizedBuffer(dAtA[:i])
			if err != nil {
				return 0, err
			}
			i -= size
			i = encodeVarintMetrics(dAtA, i, uint64(size))
		}
		i--
		dAtA[i] = 0x12
	}
	if len(m.Hugetlb) > 0 {
		for iNdEx := len(m.Hugetlb) - 1; iNdEx >= 0; iNdEx-- {
			{
				size, err := m.Hugetlb[iNdEx].MarshalToSizedBuffer(dAtA[:i])
				if err != nil {
					return 0, err
				}
				i -= size
				i = encodeVarintMetrics(dAtA, i, uint64(size))
			}
			i--
			dAtA[i] = 0xa
		}
	}
	return len(dAtA) - i, nil
}

func (m *HugetlbStat) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalToSizedBuffer(dAtA[:size])
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *HugetlbStat) MarshalTo(dAtA []byte) (int, error) {
	size := m.Size()
	return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *HugetlbStat) MarshalToSizedBuffer(dAtA []byte) (int, error) {
	i := len(dAtA)
	_ = i
	var l int
	_ = l
	if m.XXX_unrecognized != nil {
		i -= len(m.XXX_unrecognized)
		copy(dAtA[i:], m.XXX_unrecognized)
	}
	if len(m.Pagesize) > 0 {
		i -= len(m.Pagesize)
		copy(dAtA[i:], m.Pagesize)
		i = encodeVarintMetrics(dAtA, i, uint64(len(m.Pagesize)))
		i--
		dAtA[i] = 0x22
	}
	if m.Failcnt != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.Failcnt))
		i--
		dAtA[i] = 0x18
	}
	if m.Max != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.Max))
		i--
		dAtA[i] = 0x10
	}
	if m.Usage != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.Usage))
		i--
		dAtA[i] = 0x8
	}
	return len(dAtA) - i, nil
}

func (m *PidsStat) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalToSizedBuffer(dAtA[:size])
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *PidsStat) MarshalTo(dAtA []byte) (int, error) {
	size := m.Size()
	return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *PidsStat) MarshalToSizedBuffer(dAtA []byte) (int, error) {
	i := len(dAtA)
	_ = i
	var l int
	_ = l
	if m.XXX_unrecognized != nil {
		i -= len(m.XXX_unrecognized)
		copy(dAtA[i:], m.XXX_unrecognized)
	}
	if m.Limit != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.Limit))
		i--
		dAtA[i] = 0x10
	}
	if m.Current != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.Current))
		i--
		dAtA[i] = 0x8
	}
	return len(dAtA) - i, nil
}

func (m *CPUStat) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalToSizedBuffer(dAtA[:size])
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *CPUStat) MarshalTo(dAtA []byte) (int, error) {
	size := m.Size()
	return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *CPUStat) MarshalToSizedBuffer(dAtA []byte) (int, error) {
	i := len(dAtA)
	_ = i
	var l int
	_ = l
	if m.XXX_unrecognized != nil {
		i -= len(m.XXX_unrecognized)
		copy(dAtA[i:], m.XXX_unrecognized)
	}
	if m.Throttling != nil {
		{
			size, err := m.Throttling.MarshalToSizedBuffer(dAtA[:i])
			if err != nil {
				return 0, err
			}
			i -= size
			i = encodeVarintMetrics(dAtA, i, uint64(size))
		}
		i--
		dAtA[i] = 0x12
	}
	if m.Usage != nil {
		{
			size, err := m.Usage.MarshalToSizedBuffer(dAtA[:i])
			if err != nil {
				return 0, err
			}
			i -= size
			i = encodeVarintMetrics(dAtA, i, uint64(size))
		}
		i--
		dAtA[i] = 0xa
	}
	return len(dAtA) - i, nil
}

func (m *CPUUsage) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalToSizedBuffer(dAtA[:size])
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *CPUUsage) MarshalTo(dAtA []byte) (int, error) {
	size := m.Size()
	return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *CPUUsage) MarshalToSizedBuffer(dAtA []byte) (int, error) {
	i := len(dAtA)
	_ = i
	var l int
	_ = l
	if m.XXX_unrecognized != nil {
		i -= len(m.XXX_unrecognized)
		copy(dAtA[i:], m.XXX_unrecognized)
	}
	if len(m.PerCPU) > 0 {
		dAtA11 := make([]byte, len(m.PerCPU)*10)
		var j10 int
		for _, num := range m.PerCPU {
			for num >= 1<<7 {
				dAtA11[j10] = uint8(uint64(num)&0x7f | 0x80)
				num >>= 7
				j10++
			}
			dAtA11[j10] = uint8(num)
			j10++
		}
		i -= j10
		copy(dAtA[i:], dAtA11[:j10])
		i = encodeVarintMetrics(dAtA, i, uint64(j10))
		i--
		dAtA[i] = 0x22
	}
	if m.User != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.User))
		i--
		dAtA[i] = 0x18
	}
	if m.Kernel != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.Kernel))
		i--
		dAtA[i] = 0x10
	}
	if m.Total != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.Total))
		i--
		dAtA[i] = 0x8
	}
	return len(dAtA) - i, nil
}

func (m *Throttle) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalToSizedBuffer(dAtA[:size])
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *Throttle) MarshalTo(dAtA []byte) (int, error) {
	size := m.Size()
	return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *Throttle) MarshalToSizedBuffer(dAtA []byte) (int, error) {
	i := len(dAtA)
	_ = i
	var l int
	_ = l
	if m.XXX_unrecognized != nil {
		i -= len(m.XXX_unrecognized)
		copy(dAtA[i:], m.XXX_unrecognized)
	}
	if m.ThrottledTime != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.ThrottledTime))
		i--
		dAtA[i] = 0x18
	}
	if m.ThrottledPeriods != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.ThrottledPeriods))
		i--
		dAtA[i] = 0x10
	}
	if m.Periods != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.Periods))
		i--
		dAtA[i] = 0x8
	}
	return len(dAtA) - i, nil
}

func (m *MemoryStat) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalToSizedBuffer(dAtA[:size])
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *MemoryStat) MarshalTo(dAtA []byte) (int, error) {
	size := m.Size()
	return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *MemoryStat) MarshalToSizedBuffer(dAtA []byte) (int, error) {
	i := len(dAtA)
	_ = i
	var l int
	_ = l
	if m.XXX_unrecognized != nil {
		i -= len(m.XXX_unrecognized)
		copy(dAtA[i:], m.XXX_unrecognized)
	}
	if m.KernelTCP != nil {
		{
			size, err := m.KernelTCP.MarshalToSizedBuffer(dAtA[:i])
			if err != nil {
				return 0, err
			}
			i -= size
			i = encodeVarintMetrics(dAtA, i, uint64(size))
		}
		i--
		dAtA[i] = 0x2
		i--
		dAtA[i] = 0xa2
	}
	if m.Kernel != nil {
		{
			size, err := m.Kernel.MarshalToSizedBuffer(dAtA[:i])
			if err != nil {
				return 0, err
			}
			i -= size
			i = encodeVarintMetrics(dAtA, i, uint64(size))
		}
		i--
		dAtA[i] = 0x2
		i--
		dAtA[i] = 0x9a
	}
	if m.Swap != nil {
		{
			size, err := m.Swap.MarshalToSizedBuffer(dAtA[:i])
			if err != nil {
				return 0, err
			}
			i -= size
			i = encodeVarintMetrics(dAtA, i, uint64(size))
		}
		i--
		dAtA[i] = 0x2
		i--
		dAtA[i] = 0x92
	}
	if m.Usage != nil {
		{
			size, err := m.Usage.MarshalToSizedBuffer(dAtA[:i])
			if err != nil {
				return 0, err
			}
			i -= size
			i = encodeVarintMetrics(dAtA, i, uint64(size))
		}
		i--
		dAtA[i] = 0x2
		i--
		dAtA[i] = 0x8a
	}
	if m.TotalUnevictable != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.TotalUnevictable))
		i--
		dAtA[i] = 0x2
		i--
		dAtA[i] = 0x80
	}
	if m.TotalActiveFile != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.TotalActiveFile))
		i--
		dAtA[i] = 0x1
		i--
		dAtA[i] = 0xf8
	}
	if m.TotalInactiveFile != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.TotalInactiveFile))
		i--
		dAtA[i] = 0x1
		i--
		dAtA[i] = 0xf0
	}
	if m.TotalActiveAnon != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.TotalActiveAnon))
		i--
		dAtA[i] = 0x1
		i--
		dAtA[i] = 0xe8
	}
	if m.TotalInactiveAnon != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.TotalInactiveAnon))
		i--
		dAtA[i] = 0x1
		i--
		dAtA[i] = 0xe0
	}
	if m.TotalPgMajFault != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.TotalPgMajFault))
		i--
		dAtA[i] = 0x1
		i--
		dAtA[i] = 0xd8
	}
	if m.TotalPgFault != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.TotalPgFault))
		i--
		dAtA[i] = 0x1
		i--
		dAtA[i] = 0xd0
	}
	if m.TotalPgPgOut != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.TotalPgPgOut))
		i--
		dAtA[i] = 0x1
		i--
		dAtA[i] = 0xc8
	}
	if m.TotalPgPgIn != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.TotalPgPgIn))
		i--
		dAtA[i] = 0x1
		i--
		dAtA[i] = 0xc0
	}
	if m.TotalWriteback != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.TotalWriteback))
		i--
		dAtA[i] = 0x1
		i--
		dAtA[i] = 0xb8
	}
	if m.TotalDirty != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.TotalDirty))
		i--
		dAtA[i] = 0x1
		i--
		dAtA[i] = 0xb0
	}
	if m.TotalMappedFile != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.TotalMappedFile))
		i--
		dAtA[i] = 0x1
		i--
		dAtA[i] = 0xa8
	}
	if m.TotalRSSHuge != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.TotalRSSHuge))
		i--
		dAtA[i] = 0x1
		i--
		dAtA[i] = 0xa0
	}
	if m.TotalRSS != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.TotalRSS))
		i--
		dAtA[i] = 0x1
		i--
		dAtA[i] = 0x98
	}
	if m.TotalCache != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.TotalCache))
		i--
		dAtA[i] = 0x1
		i--
		dAtA[i] = 0x90
	}
	if m.HierarchicalSwapLimit != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.HierarchicalSwapLimit))
		i--
		dAtA[i] = 0x1
		i--
		dAtA[i] = 0x88
	}
	if m.HierarchicalMemoryLimit != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.HierarchicalMemoryLimit))
		i--
		dAtA[i] = 0x1
		i--
		dAtA[i] = 0x80
	}
	if m.Unevictable != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.Unevictable))
		i--
		dAtA[i] = 0x78
	}
	if m.ActiveFile != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.ActiveFile))
		i--
		dAtA[i] = 0x70
	}
	if m.InactiveFile != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.InactiveFile))
		i--
		dAtA[i] = 0x68
	}
	if m.ActiveAnon != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.ActiveAnon))
		i--
		dAtA[i] = 0x60
	}
	if m.InactiveAnon != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.InactiveAnon))
		i--
		dAtA[i] = 0x58
	}
	if m.PgMajFault != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.PgMajFault))
		i--
		dAtA[i] = 0x50
	}
	if m.PgFault != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.PgFault))
		i--
		dAtA[i] = 0x48
	}
	if m.PgPgOut != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.PgPgOut))
		i--
		dAtA[i] = 0x40
	}
	if m.PgPgIn != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.PgPgIn))
		i--
		dAtA[i] = 0x38
	}
	if m.Writeback != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.Writeback))
		i--
		dAtA[i] = 0x30
	}
	if m.Dirty != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.Dirty))
		i--
		dAtA[i] = 0x28
	}
	if m.MappedFile != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.MappedFile))
		i--
		dAtA[i] = 0x20
	}
	if m.RSSHuge != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.RSSHuge))
		i--
		dAtA[i] = 0x18
	}
	if m.RSS != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.RSS))
		i--
		dAtA[i] = 0x10
	}
	if m.Cache != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.Cache))
		i--
		dAtA[i] = 0x8
	}
	return len(dAtA) - i, nil
}

func (m *MemoryEntry) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalToSizedBuffer(dAtA[:size])
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *MemoryEntry) MarshalTo(dAtA []byte) (int, error) {
	size := m.Size()
	return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *MemoryEntry) MarshalToSizedBuffer(dAtA []byte) (int, error) {
	i := len(dAtA)
	_ = i
	var l int
	_ = l
	if m.XXX_unrecognized != nil {
		i -= len(m.XXX_unrecognized)
		copy(dAtA[i:], m.XXX_unrecognized)
	}
	if m.Failcnt != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.Failcnt))
		i--
		dAtA[i] = 0x20
	}
	if m.Max != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.Max))
		i--
		dAtA[i] = 0x18
	}
	if m.Usage != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.Usage))
		i--
		dAtA[i] = 0x10
	}
	if m.Limit != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.Limit))
		i--
		dAtA[i] = 0x8
	}
	return len(dAtA) - i, nil
}

func (m *MemoryOomControl) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalToSizedBuffer(dAtA[:size])
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *MemoryOomControl) MarshalTo(dAtA []byte) (int, error) {
	size := m.Size()
	return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *MemoryOomControl) MarshalToSizedBuffer(dAtA []byte) (int, error) {
	i := len(dAtA)
	_ = i
	var l int
	_ = l
	if m.XXX_unrecognized != nil {
		i -= len(m.XXX_unrecognized)
		copy(dAtA[i:], m.XXX_unrecognized)
	}
	if m.OomKill != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.OomKill))
		i--
		dAtA[i] = 0x18
	}
	if m.UnderOom != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.UnderOom))
		i--
		dAtA[i] = 0x10
	}
	if m.OomKillDisable != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.OomKillDisable))
		i--
		dAtA[i] = 0x8
	}
	return len(dAtA) - i, nil
}

func (m *BlkIOStat) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalToSizedBuffer(dAtA[:size])
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *BlkIOStat) MarshalTo(dAtA []byte) (int, error) {
	size := m.Size()
	return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *BlkIOStat) MarshalToSizedBuffer(dAtA []byte) (int, error) {
	i := len(dAtA)
	_ = i
	var l int
	_ = l
	if m.XXX_unrecognized != nil {
		i -= len(m.XXX_unrecognized)
		copy(dAtA[i:], m.XXX_unrecognized)
	}
	if len(m.SectorsRecursive) > 0 {
		for iNdEx := len(m.SectorsRecursive) - 1; iNdEx >= 0; iNdEx-- {
			{
				size, err := m.SectorsRecursive[iNdEx].MarshalToSizedBuffer(dAtA[:i])
				if err != nil {
					return 0, err
				}
				i -= size
				i = encodeVarintMetrics(dAtA, i, uint64(size))
			}
			i--
			dAtA[i] = 0x42
		}
	}
	if len(m.IoTimeRecursive) > 0 {
		for iNdEx := len(m.IoTimeRecursive) - 1; iNdEx >= 0; iNdEx-- {
			{
				size, err := m.IoTimeRecursive[iNdEx].MarshalToSizedBuffer(dAtA[:i])
				if err != nil {
					return 0, err
				}
				i -= size
				i = encodeVarintMetrics(dAtA, i, uint64(size))
			}
			i--
			dAtA[i] = 0x3a
		}
	}
	if len(m.IoMergedRecursive) > 0 {
		for iNdEx := len(m.IoMergedRecursive) - 1; iNdEx >= 0; iNdEx-- {
			{
				size, err := m.IoMergedRecursive[iNdEx].MarshalToSizedBuffer(dAtA[:i])
				if err != nil {
					return 0, err
				}
				i -= size
				i = encodeVarintMetrics(dAtA, i, uint64(size))
			}
			i--
			dAtA[i] = 0x32
		}
	}
	if len(m.IoWaitTimeRecursive) > 0 {
		for iNdEx := len(m.IoWaitTimeRecursive) - 1; iNdEx >= 0; iNdEx-- {
			{
				size, err := m.IoWaitTimeRecursive[iNdEx].MarshalToSizedBuffer(dAtA[:i])
				if err != nil {
					return 0, err
				}
				i -= size
				i = encodeVarintMetrics(dAtA, i, uint64(size))
			}
			i--
			dAtA[i] = 0x2a
		}
	}
	if len(m.IoServiceTimeRecursive) > 0 {
		for iNdEx := len(m.IoServiceTimeRecursive) - 1; iNdEx >= 0; iNdEx-- {
			{
				size, err := m.IoServiceTimeRecursive[iNdEx].MarshalToSizedBuffer(dAtA[:i])
				if err != nil {
					return 0, err
				}
				i -= size
				i = encodeVarintMetrics(dAtA, i, uint64(size))
			}
			i--
			dAtA[i] = 0x22
		}
	}
	if len(m.IoQueuedRecursive) > 0 {
		for iNdEx := len(m.IoQueuedRecursive) - 1; iNdEx >= 0; iNdEx-- {
			{
				size, err := m.IoQueuedRecursive[iNdEx].MarshalToSizedBuffer(dAtA[:i])
				if err != nil {
					return 0, err
				}
				i -= size
				i = encodeVarintMetrics(dAtA, i, uint64(size))
			}
			i--
			dAtA[i] = 0x1a
		}
	}
	if len(m.IoServicedRecursive) > 0 {
		for iNdEx := len(m.IoServicedRecursive) - 1; iNdEx >= 0; iNdEx-- {
			{
				size, err := m.IoServicedRecursive[iNdEx].MarshalToSizedBuffer(dAtA[:i])
				if err != nil {
					return 0, err
				}
				i -= size
				i = encodeVarintMetrics(dAtA, i, uint64(size))
			}
			i--
			dAtA[i] = 0x12
		}
	}
	if len(m.IoServiceBytesRecursive) > 0 {
		for iNdEx := len(m.IoServiceBytesRecursive) - 1; iNdEx >= 0; iNdEx-- {
			{
				size, err := m.IoServiceBytesRecursive[iNdEx].MarshalToSizedBuffer(dAtA[:i])
				if err != nil {
					return 0, err
				}
				i -= size
				i = encodeVarintMetrics(dAtA, i, uint64(size))
			}
			i--
			dAtA[i] = 0xa
		}
	}
	return len(dAtA) - i, nil
}

func (m *BlkIOEntry) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalToSizedBuffer(dAtA[:size])
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *BlkIOEntry) MarshalTo(dAtA []byte) (int, error) {
	size := m.Size()
	return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *BlkIOEntry) MarshalToSizedBuffer(dAtA []byte) (int, error) {
	i := len(dAtA)
	_ = i
	var l int
	_ = l
	if m.XXX_unrecognized != nil {
		i -= len(m.XXX_unrecognized)
		copy(dAtA[i:], m.XXX_unrecognized)
	}
	if m.Value != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.Value))
		i--
		dAtA[i] = 0x28
	}
	if m.Minor != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.Minor))
		i--
		dAtA[i] = 0x20
	}
	if m.Major != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.Major))
		i--
		dAtA[i] = 0x18
	}
	if len(m.Device) > 0 {
		i -= len(m.Device)
		copy(dAtA[i:], m.Device)
		i = encodeVarintMetrics(dAtA, i, uint64(len(m.Device)))
		i--
		dAtA[i] = 0x12
	}
	if len(m.Op) > 0 {
		i -= len(m.Op)
		copy(dAtA[i:], m.Op)
		i = encodeVarintMetrics(dAtA, i, uint64(len(m.Op)))
		i--
		dAtA[i] = 0xa
	}
	return len(dAtA) - i, nil
}

func (m *RdmaStat) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalToSizedBuffer(dAtA[:size])
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *RdmaStat) MarshalTo(dAtA []byte) (int, error) {
	size := m.Size()
	return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *RdmaStat) MarshalToSizedBuffer(dAtA []byte) (int, error) {
	i := len(dAtA)
	_ = i
	var l int
	_ = l
	if m.XXX_unrecognized != nil {
		i -= len(m.XXX_unrecognized)
		copy(dAtA[i:], m.XXX_unrecognized)
	}
	if len(m.Limit) > 0 {
		for iNdEx := len(m.Limit) - 1; iNdEx >= 0; iNdEx-- {
			{
				size, err := m.Limit[iNdEx].MarshalToSizedBuffer(dAtA[:i])
				if err != nil {
					return 0, err
				}
				i -= size
				i = encodeVarintMetrics(dAtA, i, uint64(size))
			}
			i--
			dAtA[i] = 0x12
		}
	}
	if len(m.Current) > 0 {
		for iNdEx := len(m.Current) - 1; iNdEx >= 0; iNdEx-- {
			{
				size, err := m.Current[iNdEx].MarshalToSizedBuffer(dAtA[:i])
				if err != nil {
					return 0, err
				}
				i -= size
				i = encodeVarintMetrics(dAtA, i, uint64(size))
			}
			i--
			dAtA[i] = 0xa
		}
	}
	return len(dAtA) - i, nil
}

func (m *RdmaEntry) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalToSizedBuffer(dAtA[:size])
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *RdmaEntry) MarshalTo(dAtA []byte) (int, error) {
	size := m.Size()
	return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *RdmaEntry) MarshalToSizedBuffer(dAtA []byte) (int, error) {
	i := len(dAtA)
	_ = i
	var l int
	_ = l
	if m.XXX_unrecognized != nil {
		i -= len(m.XXX_unrecognized)
		copy(dAtA[i:], m.XXX_unrecognized)
	}
	if m.HcaObjects != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.HcaObjects))
		i--
		dAtA[i] = 0x18
	}
	if m.HcaHandles != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.HcaHandles))
		i--
		dAtA[i] = 0x10
	}
	if len(m.Device) > 0 {
		i -= len(m.Device)
		copy(dAtA[i:], m.Device)
		i = encodeVarintMetrics(dAtA, i, uint64(len(m.Device)))
		i--
		dAtA[i] = 0xa
	}
	return len(dAtA) - i, nil
}

func (m *NetworkStat) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalToSizedBuffer(dAtA[:size])
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *NetworkStat) MarshalTo(dAtA []byte) (int, error) {
	size := m.Size()
	return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *NetworkStat) MarshalToSizedBuffer(dAtA []byte) (int, error) {
	i := len(dAtA)
	_ = i
	var l int
	_ = l
	if m.XXX_unrecognized != nil {
		i -= len(m.XXX_unrecognized)
		copy(dAtA[i:], m.XXX_unrecognized)
	}
	if m.TxDropped != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.TxDropped))
		i--
		dAtA[i] = 0x48
	}
	if m.TxErrors != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.TxErrors))
		i--
		dAtA[i] = 0x40
	}
	if m.TxPackets != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.TxPackets))
		i--
		dAtA[i] = 0x38
	}
	if m.TxBytes != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.TxBytes))
		i--
		dAtA[i] = 0x30
	}
	if m.RxDropped != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.RxDropped))
		i--
		dAtA[i] = 0x28
	}
	if m.RxErrors != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.RxErrors))
		i--
		dAtA[i] = 0x20
	}
	if m.RxPackets != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.RxPackets))
		i--
		dAtA[i] = 0x18
	}
	if m.RxBytes != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.RxBytes))
		i--
		dAtA[i] = 0x10
	}
	if len(m.Name) > 0 {
		i -= len(m.Name)
		copy(dAtA[i:], m.Name)
		i = encodeVarintMetrics(dAtA, i, uint64(len(m.Name)))
		i--
		dAtA[i] = 0xa
	}
	return len(dAtA) - i, nil
}

func (m *CgroupStats) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalToSizedBuffer(dAtA[:size])
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *CgroupStats) MarshalTo(dAtA []byte) (int, error) {
	size := m.Size()
	return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *CgroupStats) MarshalToSizedBuffer(dAtA []byte) (int, error) {
	i := len(dAtA)
	_ = i
	var l int
	_ = l
	if m.XXX_unrecognized != nil {
		i -= len(m.XXX_unrecognized)
		copy(dAtA[i:], m.XXX_unrecognized)
	}
	if m.NrIoWait != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.NrIoWait))
		i--
		dAtA[i] = 0x28
	}
	if m.NrUninterruptible != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.NrUninterruptible))
		i--
		dAtA[i] = 0x20
	}
	if m.NrStopped != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.NrStopped))
		i--
		dAtA[i] = 0x18
	}
	if m.NrRunning != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.NrRunning))
		i--
		dAtA[i] = 0x10
	}
	if m.NrSleeping != 0 {
		i = encodeVarintMetrics(dAtA, i, uint64(m.NrSleeping))
		i--
		dAtA[i] = 0x8
	}
	return len(dAtA) - i, nil
}

func encodeVarintMetrics(dAtA []byte, offset int, v uint64) int {
	offset -= sovMetrics(v)
	base := offset
	for v >= 1<<7 {
		dAtA[offset] = uint8(v&0x7f | 0x80)
		v >>= 7
		offset++
	}
	dAtA[offset] = uint8(v)
	return base
}
func (m *Metrics) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	if len(m.Hugetlb) > 0 {
		for _, e := range m.Hugetlb {
			l = e.Size()
			n += 1 + l + sovMetrics(uint64(l))
		}
	}
	if m.Pids != nil {
		l = m.Pids.Size()
		n += 1 + l + sovMetrics(uint64(l))
	}
	if m.CPU != nil {
		l = m.CPU.Size()
		n += 1 + l + sovMetrics(uint64(l))
	}
	if m.Memory != nil {
		l = m.Memory.Size()
		n += 1 + l + sovMetrics(uint64(l))
	}
	if m.Blkio != nil {
		l = m.Blkio.Size()
		n += 1 + l + sovMetrics(uint64(l))
	}
	if m.Rdma != nil {
		l = m.Rdma.Size()
		n += 1 + l + sovMetrics(uint64(l))
	}
	if len(m.Network) > 0 {
		for _, e := range m.Network {
			l = e.Size()
			n += 1 + l + sovMetrics(uint64(l))
		}
	}
	if m.CgroupStats != nil {
		l = m.CgroupStats.Size()
		n += 1 + l + sovMetrics(uint64(l))
	}
	if m.MemoryOomControl != nil {
		l = m.MemoryOomControl.Size()
		n += 1 + l + sovMetrics(uint64(l))
	}
	if m.XXX_unrecognized != nil {
		n += len(m.XXX_unrecognized)
	}
	return n
}

func (m *HugetlbStat) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	if m.Usage != 0 {
		n += 1 + sovMetrics(uint64(m.Usage))
	}
	if m.Max != 0 {
		n += 1 + sovMetrics(uint64(m.Max))
	}
	if m.Failcnt != 0 {
		n += 1 + sovMetrics(uint64(m.Failcnt))
	}
	l = len(m.Pagesize)
	if l > 0 {
		n += 1 + l + sovMetrics(uint64(l))
	}
	if m.XXX_unrecognized != nil {
		n += len(m.XXX_unrecognized)
	}
	return n
}

func (m *PidsStat) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	if m.Current != 0 {
		n += 1 + sovMetrics(uint64(m.Current))
	}
	if m.Limit != 0 {
		n += 1 + sovMetrics(uint64(m.Limit))
	}
	if m.XXX_unrecognized != nil {
		n += len(m.XXX_unrecognized)
	}
	return n
}

func (m *CPUStat) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	if m.Usage != nil {
		l = m.Usage.Size()
		n += 1 + l + sovMetrics(uint64(l))
	}
	if m.Throttling != nil {
		l = m.Throttling.Size()
		n += 1 + l + sovMetrics(uint64(l))
	}
	if m.XXX_unrecognized != nil {
		n += len(m.XXX_unrecognized)
	}
	return n
}

func (m *CPUUsage) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	if m.Total != 0 {
		n += 1 + sovMetrics(uint64(m.Total))
	}
	if m.Kernel != 0 {
		n += 1 + sovMetrics(uint64(m.Kernel))
	}
	if m.User != 0 {
		n += 1 + sovMetrics(uint64(m.User))
	}
	if len(m.PerCPU) > 0 {
		l = 0
		for _, e := range m.PerCPU {
			l += sovMetrics(uint64(e))
		}
		n += 1 + sovMetrics(uint64(l)) + l
	}
	if m.XXX_unrecognized != nil {
		n += len(m.XXX_unrecognized)
	}
	return n
}

func (m *Throttle) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	if m.Periods != 0 {
		n += 1 + sovMetrics(uint64(m.Periods))
	}
	if m.ThrottledPeriods != 0 {
		n += 1 + sovMetrics(uint64(m.ThrottledPeriods))
	}
	if m.ThrottledTime != 0 {
		n += 1 + sovMetrics(uint64(m.ThrottledTime))
	}
	if m.XXX_unrecognized != nil {
		n += len(m.XXX_unrecognized)
	}
	return n
}

func (m *MemoryStat) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	if m.Cache != 0 {
		n += 1 + sovMetrics(uint64(m.Cache))
	}
	if m.RSS != 0 {
		n += 1 + sovMetrics(uint64(m.RSS))
	}
	if m.RSSHuge != 0 {
		n += 1 + sovMetrics(uint64(m.RSSHuge))
	}
	if m.MappedFile != 0 {
		n += 1 + sovMetrics(uint64(m.MappedFile))
	}
	if m.Dirty != 0 {
		n += 1 + sovMetrics(uint64(m.Dirty))
	}
	if m.Writeback != 0 {
		n += 1 + sovMetrics(uint64(m.Writeback))
	}
	if m.PgPgIn != 0 {
		n += 1 + sovMetrics(uint64(m.PgPgIn))
	}
	if m.PgPgOut != 0 {
		n += 1 + sovMetrics(uint64(m.PgPgOut))
	}
	if m.PgFault != 0 {
		n += 1 + sovMetrics(uint64(m.PgFault))
	}
	if m.PgMajFault != 0 {
		n += 1 + sovMetrics(uint64(m.PgMajFault))
	}
	if m.InactiveAnon != 0 {
		n += 1 + sovMetrics(uint64(m.InactiveAnon))
	}
	if m.ActiveAnon != 0 {
		n += 1 + sovMetrics(uint64(m.ActiveAnon))
	}
	if m.InactiveFile != 0 {
		n += 1 + sovMetrics(uint64(m.InactiveFile))
	}
	if m.ActiveFile != 0 {
		n += 1 + sovMetrics(uint64(m.ActiveFile))
	}
	if m.Unevictable != 0 {
		n += 1 + sovMetrics(uint64(m.Unevictable))
	}
	if m.HierarchicalMemoryLimit != 0 {
		n += 2 + sovMetrics(uint64(m.HierarchicalMemoryLimit))
	}
	if m.HierarchicalSwapLimit != 0 {
		n += 2 + sovMetrics(uint64(m.HierarchicalSwapLimit))
	}
	if m.TotalCache != 0 {
		n += 2 + sovMetrics(uint64(m.TotalCache))
	}
	if m.TotalRSS != 0 {
		n += 2 + sovMetrics(uint64(m.TotalRSS))
	}
	if m.TotalRSSHuge != 0 {
		n += 2 + sovMetrics(uint64(m.TotalRSSHuge))
	}
	if m.TotalMappedFile != 0 {
		n += 2 + sovMetrics(uint64(m.TotalMappedFile))
	}
	if m.TotalDirty != 0 {
		n += 2 + sovMetrics(uint64(m.TotalDirty))
	}
	if m.TotalWriteback != 0 {
		n += 2 + sovMetrics(uint64(m.TotalWriteback))
	}
	if m.TotalPgPgIn != 0 {
		n += 2 + sovMetrics(uint64(m.TotalPgPgIn))
	}
	if m.TotalPgPgOut != 0 {
		n += 2 + sovMetrics(uint64(m.TotalPgPgOut))
	}
	if m.TotalPgFault != 0 {
		n += 2 + sovMetrics(uint64(m.TotalPgFault))
	}
	if m.TotalPgMajFault != 0 {
		n += 2 + sovMetrics(uint64(m.TotalPgMajFault))
	}
	if m.TotalInactiveAnon != 0 {
		n += 2 + sovMetrics(uint64(m.TotalInactiveAnon))
	}
	if m.TotalActiveAnon != 0 {
		n += 2 + sovMetrics(uint64(m.TotalActiveAnon))
	}
	if m.TotalInactiveFile != 0 {
		n += 2 + sovMetrics(uint64(m.TotalInactiveFile))
	}
	if m.TotalActiveFile != 0 {
		n += 2 + sovMetrics(uint64(m.TotalActiveFile))
	}
	if m.TotalUnevictable != 0 {
		n += 2 + sovMetrics(uint64(m.TotalUnevictable))
	}
	if m.Usage != nil {
		l = m.Usage.Size()
		n += 2 + l + sovMetrics(uint64(l))
	}
	if m.Swap != nil {
		l = m.Swap.Size()
		n += 2 + l + sovMetrics(uint64(l))
	}
	if m.Kernel != nil {
		l = m.Kernel.Size()
		n += 2 + l + sovMetrics(uint64(l))
	}
	if m.KernelTCP != nil {
		l = m.KernelTCP.Size()
		n += 2 + l + sovMetrics(uint64(l))
	}
	if m.XXX_unrecognized != nil {
		n += len(m.XXX_unrecognized)
	}
	return n
}

func (m *MemoryEntry) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	if m.Limit != 0 {
		n += 1 + sovMetrics(uint64(m.Limit))
	}
	if m.Usage != 0 {
		n += 1 + sovMetrics(uint64(m.Usage))
	}
	if m.Max != 0 {
		n += 1 + sovMetrics(uint64(m.Max))
	}
	if m.Failcnt != 0 {
		n += 1 + sovMetrics(uint64(m.Failcnt))
	}
	if m.XXX_unrecognized != nil {
		n += len(m.XXX_unrecognized)
	}
	return n
}

func (m *MemoryOomControl) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	if m.OomKillDisable != 0 {
		n += 1 + sovMetrics(uint64(m.OomKillDisable))
	}
	if m.UnderOom != 0 {
		n += 1 + sovMetrics(uint64(m.UnderOom))
	}
	if m.OomKill != 0 {
		n += 1 + sovMetrics(uint64(m.OomKill))
	}
	if m.XXX_unrecognized != nil {
		n += len(m.XXX_unrecognized)
	}
	return n
}

func (m *BlkIOStat) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	if len(m.IoServiceBytesRecursive) > 0 {
		for _, e := range m.IoServiceBytesRecursive {
			l = e.Size()
			n += 1 + l + sovMetrics(uint64(l))
		}
	}
	if len(m.IoServicedRecursive) > 0 {
		for _, e := range m.IoServicedRecursive {
			l = e.Size()
			n += 1 + l + sovMetrics(uint64(l))
		}
	}
	if len(m.IoQueuedRecursive) > 0 {
		for _, e := range m.IoQueuedRecursive {
			l = e.Size()
			n += 1 + l + sovMetrics(uint64(l))
		}
	}
	if len(m.IoServiceTimeRecursive) > 0 {
		for _, e := range m.IoServiceTimeRecursive {
			l = e.Size()
			n += 1 + l + sovMetrics(uint64(l))
		}
	}
	if len(m.IoWaitTimeRecursive) > 0 {
		for _, e := range m.IoWaitTimeRecursive {
			l = e.Size()
			n += 1 + l + sovMetrics(uint64(l))
		}
	}
	if len(m.IoMergedRecursive) > 0 {
		for _, e := range m.IoMergedRecursive {
			l = e.Size()
			n += 1 + l + sovMetrics(uint64(l))
		}
	}
	if len(m.IoTimeRecursive) > 0 {
		for _, e := range m.IoTimeRecursive {
			l = e.Size()
			n += 1 + l + sovMetrics(uint64(l))
		}
	}
	if len(m.SectorsRecursive) > 0 {
		for _, e := range m.SectorsRecursive {
			l = e.Size()
			n += 1 + l + sovMetrics(uint64(l))
		}
	}
	if m.XXX_unrecognized != nil {
		n += len(m.XXX_unrecognized)
	}
	return n
}

func (m *BlkIOEntry) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	l = len(m.Op)
	if l > 0 {
		n += 1 + l + sovMetrics(uint64(l))
	}
	l = len(m.Device)
	if l > 0 {
		n += 1 + l + sovMetrics(uint64(l))
	}
	if m.Major != 0 {
		n += 1 + sovMetrics(uint64(m.Major))
	}
	if m.Minor != 0 {
		n += 1 + sovMetrics(uint64(m.Minor))
	}
	if m.Value != 0 {
		n += 1 + sovMetrics(uint64(m.Value))
	}
	if m.XXX_unrecognized != nil {
		n += len(m.XXX_unrecognized)
	}
	return n
}

func (m *RdmaStat) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	if len(m.Current) > 0 {
		for _, e := range m.Current {
			l = e.Size()
			n += 1 + l + sovMetrics(uint64(l))
		}
	}
	if len(m.Limit) > 0 {
		for _, e := range m.Limit {
			l = e.Size()
			n += 1 + l + sovMetrics(uint64(l))
		}
	}
	if m.XXX_unrecognized != nil {
		n += len(m.XXX_unrecognized)
	}
	return n
}

func (m *RdmaEntry) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	l = len(m.Device)
	if l > 0 {
		n += 1 + l + sovMetrics(uint64(l))
	}
	if m.HcaHandles != 0 {
		n += 1 + sovMetrics(uint64(m.HcaHandles))
	}
	if m.HcaObjects != 0 {
		n += 1 + sovMetrics(uint64(m.HcaObjects))
	}
	if m.XXX_unrecognized != nil {
		n += len(m.XXX_unrecognized)
	}
	return n
}

func (m *NetworkStat) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	l = len(m.Name)
	if l > 0 {
		n += 1 + l + sovMetrics(uint64(l))
	}
	if m.RxBytes != 0 {
		n += 1 + sovMetrics(uint64(m.RxBytes))
	}
	if m.RxPackets != 0 {
		n += 1 + sovMetrics(uint64(m.RxPackets))
	}
	if m.RxErrors != 0 {
		n += 1 + sovMetrics(uint64(m.RxErrors))
	}
	if m.RxDropped != 0 {
		n += 1 + sovMetrics(uint64(m.RxDropped))
	}
	if m.TxBytes != 0 {
		n += 1 + sovMetrics(uint64(m.TxBytes))
	}
	if m.TxPackets != 0 {
		n += 1 + sovMetrics(uint64(m.TxPackets))
	}
	if m.TxErrors != 0 {
		n += 1 + sovMetrics(uint64(m.TxErrors))
	}
	if m.TxDropped != 0 {
		n += 1 + sovMetrics(uint64(m.TxDropped))
	}
	if m.XXX_unrecognized != nil {
		n += len(m.XXX_unrecognized)
	}
	return n
}

func (m *CgroupStats) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	if m.NrSleeping != 0 {
		n += 1 + sovMetrics(uint64(m.NrSleeping))
	}
	if m.NrRunning != 0 {
		n += 1 + sovMetrics(uint64(m.NrRunning))
	}
	if m.NrStopped != 0 {
		n += 1 + sovMetrics(uint64(m.NrStopped))
	}
	if m.NrUninterruptible != 0 {
		n += 1 + sovMetrics(uint64(m.NrUninterruptible))
	}
	if m.NrIoWait != 0 {
		n += 1 + sovMetrics(uint64(m.NrIoWait))
	}
	if m.XXX_unrecognized != nil {
		n += len(m.XXX_unrecognized)
	}
	return n
}

func sovMetrics(x uint64) (n int) {
	return (math_bits.Len64(x|1) + 6) / 7
}
func sozMetrics(x uint64) (n int) {
	return sovMetrics(uint64((x << 1) ^ uint64((int64(x) >> 63))))
}
func (this *Metrics) String() string {
	if this == nil {
		return "nil"
	}
	repeatedStringForHugetlb := "[]*HugetlbStat{"
	for _, f := range this.Hugetlb {
		repeatedStringForHugetlb += strings.Replace(f.String(), "HugetlbStat", "HugetlbStat", 1) + ","
	}
	repeatedStringForHugetlb += "}"
	repeatedStringForNetwork := "[]*NetworkStat{"
	for _, f := range this.Network {
		repeatedStringForNetwork += strings.Replace(f.String(), "NetworkStat", "NetworkStat", 1) + ","
	}
	repeatedStringForNetwork += "}"
	s := strings.Join([]string{`&Metrics{`,
		`Hugetlb:` + repeatedStringForHugetlb + `,`,
		`Pids:` + strings.Replace(this.Pids.String(), "PidsStat", "PidsStat", 1) + `,`,
		`CPU:` + strings.Replace(this.CPU.String(), "CPUStat", "CPUStat", 1) + `,`,
		`Memory:` + strings.Replace(this.Memory.String(), "MemoryStat", "MemoryStat", 1) + `,`,
		`Blkio:` + strings.Replace(this.Blkio.String(), "BlkIOStat", "BlkIOStat", 1) + `,`,
		`Rdma:` + strings.Replace(this.Rdma.String(), "RdmaStat", "RdmaStat", 1) + `,`,
		`Network:` + repeatedStringForNetwork + `,`,
		`CgroupStats:` + strings.Replace(this.CgroupStats.String(), "CgroupStats", "CgroupStats", 1) + `,`,
		`MemoryOomControl:` + strings.Replace(this.MemoryOomControl.String(), "MemoryOomControl", "MemoryOomControl", 1) + `,`,
		`XXX_unrecognized:` + fmt.Sprintf("%v", this.XXX_unrecognized) + `,`,
		`}`,
	}, "")
	return s
}
func (this *HugetlbStat) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&HugetlbStat{`,
		`Usage:` + fmt.Sprintf("%v", this.Usage) + `,`,
		`Max:` + fmt.Sprintf("%v", this.Max) + `,`,
		`Failcnt:` + fmt.Sprintf("%v", this.Failcnt) + `,`,
		`Pagesize:` + fmt.Sprintf("%v", this.Pagesize) + `,`,
		`XXX_unrecognized:` + fmt.Sprintf("%v", this.XXX_unrecognized) + `,`,
		`}`,
	}, "")
	return s
}
func (this *PidsStat) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&PidsStat{`,
		`Current:` + fmt.Sprintf("%v", this.Current) + `,`,
		`Limit:` + fmt.Sprintf("%v", this.Limit) + `,`,
		`XXX_unrecognized:` + fmt.Sprintf("%v", this.XXX_unrecognized) + `,`,
		`}`,
	}, "")
	return s
}
func (this *CPUStat) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&CPUStat{`,
		`Usage:` + strings.Replace(this.Usage.String(), "CPUUsage", "CPUUsage", 1) + `,`,
		`Throttling:` + strings.Replace(this.Throttling.String(), "Throttle", "Throttle", 1) + `,`,
		`XXX_unrecognized:` + fmt.Sprintf("%v", this.XXX_unrecognized) + `,`,
		`}`,
	}, "")
	return s
}
func (this *CPUUsage) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&CPUUsage{`,
		`Total:` + fmt.Sprintf("%v", this.Total) + `,`,
		`Kernel:` + fmt.Sprintf("%v", this.Kernel) + `,`,
		`User:` + fmt.Sprintf("%v", this.User) + `,`,
		`PerCPU:` + fmt.Sprintf("%v", this.PerCPU) + `,`,
		`XXX_unrecognized:` + fmt.Sprintf("%v", this.XXX_unrecognized) + `,`,
		`}`,
	}, "")
	return s
}
func (this *Throttle) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&Throttle{`,
		`Periods:` + fmt.Sprintf("%v", this.Periods) + `,`,
		`ThrottledPeriods:` + fmt.Sprintf("%v", this.ThrottledPeriods) + `,`,
		`ThrottledTime:` + fmt.Sprintf("%v", this.ThrottledTime) + `,`,
		`XXX_unrecognized:` + fmt.Sprintf("%v", this.XXX_unrecognized) + `,`,
		`}`,
	}, "")
	return s
}
func (this *MemoryStat) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&MemoryStat{`,
		`Cache:` + fmt.Sprintf("%v", this.Cache) + `,`,
		`RSS:` + fmt.Sprintf("%v", this.RSS) + `,`,
		`RSSHuge:` + fmt.Sprintf("%v", this.RSSHuge) + `,`,
		`MappedFile:` + fmt.Sprintf("%v", this.MappedFile) + `,`,
		`Dirty:` + fmt.Sprintf("%v", this.Dirty) + `,`,
		`Writeback:` + fmt.Sprintf("%v", this.Writeback) + `,`,
		`PgPgIn:` + fmt.Sprintf("%v", this.PgPgIn) + `,`,
		`PgPgOut:` + fmt.Sprintf("%v", this.PgPgOut) + `,`,
		`PgFault:` + fmt.Sprintf("%v", this.PgFault) + `,`,
		`PgMajFault:` + fmt.Sprintf("%v", this.PgMajFault) + `,`,
		`InactiveAnon:` + fmt.Sprintf("%v", this.InactiveAnon) + `,`,
		`ActiveAnon:` + fmt.Sprintf("%v", this.ActiveAnon) + `,`,
		`InactiveFile:` + fmt.Sprintf("%v", this.InactiveFile) + `,`,
		`ActiveFile:` + fmt.Sprintf("%v", this.ActiveFile) + `,`,
		`Unevictable:` + fmt.Sprintf("%v", this.Unevictable) + `,`,
		`HierarchicalMemoryLimit:` + fmt.Sprintf("%v", this.HierarchicalMemoryLimit) + `,`,
		`HierarchicalSwapLimit:` + fmt.Sprintf("%v", this.HierarchicalSwapLimit) + `,`,
		`TotalCache:` + fmt.Sprintf("%v", this.TotalCache) + `,`,
		`TotalRSS:` + fmt.Sprintf("%v", this.TotalRSS) + `,`,
		`TotalRSSHuge:` + fmt.Sprintf("%v", this.TotalRSSHuge) + `,`,
		`TotalMappedFile:` + fmt.Sprintf("%v", this.TotalMappedFile) + `,`,
		`TotalDirty:` + fmt.Sprintf("%v", this.TotalDirty) + `,`,
		`TotalWriteback:` + fmt.Sprintf("%v", this.TotalWriteback) + `,`,
		`TotalPgPgIn:` + fmt.Sprintf("%v", this.TotalPgPgIn) + `,`,
		`TotalPgPgOut:` + fmt.Sprintf("%v", this.TotalPgPgOut) + `,`,
		`TotalPgFault:` + fmt.Sprintf("%v", this.TotalPgFault) + `,`,
		`TotalPgMajFault:` + fmt.Sprintf("%v", this.TotalPgMajFault) + `,`,
		`TotalInactiveAnon:` + fmt.Sprintf("%v", this.TotalInactiveAnon) + `,`,
		`TotalActiveAnon:` + fmt.Sprintf("%v", this.TotalActiveAnon) + `,`,
		`TotalInactiveFile:` + fmt.Sprintf("%v", this.TotalInactiveFile) + `,`,
		`TotalActiveFile:` + fmt.Sprintf("%v", this.TotalActiveFile) + `,`,
		`TotalUnevictable:` + fmt.Sprintf("%v", this.TotalUnevictable) + `,`,
		`Usage:` + strings.Replace(this.Usage.String(), "MemoryEntry", "MemoryEntry", 1) + `,`,
		`Swap:` + strings.Replace(this.Swap.String(), "MemoryEntry", "MemoryEntry", 1) + `,`,
		`Kernel:` + strings.Replace(this.Kernel.String(), "MemoryEntry", "MemoryEntry", 1) + `,`,
		`KernelTCP:` + strings.Replace(this.KernelTCP.String(), "MemoryEntry", "MemoryEntry", 1) + `,`,
		`XXX_unrecognized:` + fmt.Sprintf("%v", this.XXX_unrecognized) + `,`,
		`}`,
	}, "")
	return s
}
func (this *MemoryEntry) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&MemoryEntry{`,
		`Limit:` + fmt.Sprintf("%v", this.Limit) + `,`,
		`Usage:` + fmt.Sprintf("%v", this.Usage) + `,`,
		`Max:` + fmt.Sprintf("%v", this.Max) + `,`,
		`Failcnt:` + fmt.Sprintf("%v", this.Failcnt) + `,`,
		`XXX_unrecognized:` + fmt.Sprintf("%v", this.XXX_unrecognized) + `,`,
		`}`,
	}, "")
	return s
}
func (this *MemoryOomControl) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&MemoryOomControl{`,
		`OomKillDisable:` + fmt.Sprintf("%v", this.OomKillDisable) + `,`,
		`UnderOom:` + fmt.Sprintf("%v", this.UnderOom) + `,`,
		`OomKill:` + fmt.Sprintf("%v", this.OomKill) + `,`,
		`XXX_unrecognized:` + fmt.Sprintf("%v", this.XXX_unrecognized) + `,`,
		`}`,
	}, "")
	return s
}
func (this *BlkIOStat) String() string {
	if this == nil {
		return "nil"
	}
	repeatedStringForIoServiceBytesRecursive := "[]*BlkIOEntry{"
	for _, f := range this.IoServiceBytesRecursive {
		repeatedStringForIoServiceBytesRecursive += strings.Replace(f.String(), "BlkIOEntry", "BlkIOEntry", 1) + ","
	}
	repeatedStringForIoServiceBytesRecursive += "}"
	repeatedStringForIoServicedRecursive := "[]*BlkIOEntry{"
	for _, f := range this.IoServicedRecursive {
		repeatedStringForIoServicedRecursive += strings.Replace(f.String(), "BlkIOEntry", "BlkIOEntry", 1) + ","
	}
	repeatedStringForIoServicedRecursive += "}"
	repeatedStringForIoQueuedRecursive := "[]*BlkIOEntry{"
	for _, f := range this.IoQueuedRecursive {
		repeatedStringForIoQueuedRecursive += strings.Replace(f.String(), "BlkIOEntry", "BlkIOEntry", 1) + ","
	}
	repeatedStringForIoQueuedRecursive += "}"
	repeatedStringForIoServiceTimeRecursive := "[]*BlkIOEntry{"
	for _, f := range this.IoServiceTimeRecursive {
		repeatedStringForIoServiceTimeRecursive += strings.Replace(f.String(), "BlkIOEntry", "BlkIOEntry", 1) + ","
	}
	repeatedStringForIoServiceTimeRecursive += "}"
	repeatedStringForIoWaitTimeRecursive := "[]*BlkIOEntry{"
	for _, f := range this.IoWaitTimeRecursive {
		repeatedStringForIoWaitTimeRecursive += strings.Replace(f.String(), "BlkIOEntry", "BlkIOEntry", 1) + ","
	}
	repeatedStringForIoWaitTimeRecursive += "}"
	repeatedStringForIoMergedRecursive := "[]*BlkIOEntry{"
	for _, f := range this.IoMergedRecursive {
		repeatedStringForIoMergedRecursive += strings.Replace(f.String(), "BlkIOEntry", "BlkIOEntry", 1) + ","
	}
	repeatedStringForIoMergedRecursive += "}"
	repeatedStringForIoTimeRecursive := "[]*BlkIOEntry{"
	for _, f := range this.IoTimeRecursive {
		repeatedStringForIoTimeRecursive += strings.Replace(f.String(), "BlkIOEntry", "BlkIOEntry", 1) + ","
	}
	repeatedStringForIoTimeRecursive += "}"
	repeatedStringForSectorsRecursive := "[]*BlkIOEntry{"
	for _, f := range this.SectorsRecursive {
		repeatedStringForSectorsRecursive += strings.Replace(f.String(), "BlkIOEntry", "BlkIOEntry", 1) + ","
	}
	repeatedStringForSectorsRecursive += "}"
	s := strings.Join([]string{`&BlkIOStat{`,
		`IoServiceBytesRecursive:` + repeatedStringForIoServiceBytesRecursive + `,`,
		`IoServicedRecursive:` + repeatedStringForIoServicedRecursive + `,`,
		`IoQueuedRecursive:` + repeatedStringForIoQueuedRecursive + `,`,
		`IoServiceTimeRecursive:` + repeatedStringForIoServiceTimeRecursive + `,`,
		`IoWaitTimeRecursive:` + repeatedStringForIoWaitTimeRecursive + `,`,
		`IoMergedRecursive:` + repeatedStringForIoMergedRecursive + `,`,
		`IoTimeRecursive:` + repeatedStringForIoTimeRecursive + `,`,
		`SectorsRecursive:` + repeatedStringForSectorsRecursive + `,`,
		`XXX_unrecognized:` + fmt.Sprintf("%v", this.XXX_unrecognized) + `,`,
		`}`,
	}, "")
	return s
}
func (this *BlkIOEntry) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&BlkIOEntry{`,
		`Op:` + fmt.Sprintf("%v", this.Op) + `,`,
		`Device:` + fmt.Sprintf("%v", this.Device) + `,`,
		`Major:` + fmt.Sprintf("%v", this.Major) + `,`,
		`Minor:` + fmt.Sprintf("%v", this.Minor) + `,`,
		`Value:` + fmt.Sprintf("%v", this.Value) + `,`,
		`XXX_unrecognized:` + fmt.Sprintf("%v", this.XXX_unrecognized) + `,`,
		`}`,
	}, "")
	return s
}
func (this *RdmaStat) String() string {
	if this == nil {
		return "nil"
	}
	repeatedStringForCurrent := "[]*RdmaEntry{"
	for _, f := range this.Current {
		repeatedStringForCurrent += strings.Replace(f.String(), "RdmaEntry", "RdmaEntry", 1) + ","
	}
	repeatedStringForCurrent += "}"
	repeatedStringForLimit := "[]*RdmaEntry{"
	for _, f := range this.Limit {
		repeatedStringForLimit += strings.Replace(f.String(), "RdmaEntry", "RdmaEntry", 1) + ","
	}
	repeatedStringForLimit += "}"
	s := strings.Join([]string{`&RdmaStat{`,
		`Current:` + repeatedStringForCurrent + `,`,
		`Limit:` + repeatedStringForLimit + `,`,
		`XXX_unrecognized:` + fmt.Sprintf("%v", this.XXX_unrecognized) + `,`,
		`}`,
	}, "")
	return s
}
func (this *RdmaEntry) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&RdmaEntry{`,
		`Device:` + fmt.Sprintf("%v", this.Device) + `,`,
		`HcaHandles:` + fmt.Sprintf("%v", this.HcaHandles) + `,`,
		`HcaObjects:` + fmt.Sprintf("%v", this.HcaObjects) + `,`,
		`XXX_unrecognized:` + fmt.Sprintf("%v", this.XXX_unrecognized) + `,`,
		`}`,
	}, "")
	return s
}
func (this *NetworkStat) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&NetworkStat{`,
		`Name:` + fmt.Sprintf("%v", this.Name) + `,`,
		`RxBytes:` + fmt.Sprintf("%v", this.RxBytes) + `,`,
		`RxPackets:` + fmt.Sprintf("%v", this.RxPackets) + `,`,
		`RxErrors:` + fmt.Sprintf("%v", this.RxErrors) + `,`,
		`RxDropped:` + fmt.Sprintf("%v", this.RxDropped) + `,`,
		`TxBytes:` + fmt.Sprintf("%v", this.TxBytes) + `,`,
		`TxPackets:` + fmt.Sprintf("%v", this.TxPackets) + `,`,
		`TxErrors:` + fmt.Sprintf("%v", this.TxErrors) + `,`,
		`TxDropped:` + fmt.Sprintf("%v", this.TxDropped) + `,`,
		`XXX_unrecognized:` + fmt.Sprintf("%v", this.XXX_unrecognized) + `,`,
		`}`,
	}, "")
	return s
}
func (this *CgroupStats) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&CgroupStats{`,
		`NrSleeping:` + fmt.Sprintf("%v", this.NrSleeping) + `,`,
		`NrRunning:` + fmt.Sprintf("%v", this.NrRunning) + `,`,
		`NrStopped:` + fmt.Sprintf("%v", this.NrStopped) + `,`,
		`NrUninterruptible:` + fmt.Sprintf("%v", this.NrUninterruptible) + `,`,
		`NrIoWait:` + fmt.Sprintf("%v", this.NrIoWait) + `,`,
		`XXX_unrecognized:` + fmt.Sprintf("%v", this.XXX_unrecognized) + `,`,
		`}`,
	}, "")
	return s
}
func valueToStringMetrics(v interface{}) string {
	rv := reflect.ValueOf(v)
	if rv.IsNil() {
		return "nil"
	}
	pv := reflect.Indirect(rv).Interface()
	return fmt.Sprintf("*%v", pv)
}
func (m *Metrics) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowMetrics
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: Metrics: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: Metrics: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Hugetlb", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Hugetlb = append(m.Hugetlb, &HugetlbStat{})
			if err := m.Hugetlb[len(m.Hugetlb)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 2:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Pids", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			if m.Pids == nil {
				m.Pids = &PidsStat{}
			}
			if err := m.Pids.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 3:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field CPU", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			if m.CPU == nil {
				m.CPU = &CPUStat{}
			}
			if err := m.CPU.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 4:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Memory", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			if m.Memory == nil {
				m.Memory = &MemoryStat{}
			}
			if err := m.Memory.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 5:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Blkio", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			if m.Blkio == nil {
				m.Blkio = &BlkIOStat{}
			}
			if err := m.Blkio.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 6:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Rdma", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			if m.Rdma == nil {
				m.Rdma = &RdmaStat{}
			}
			if err := m.Rdma.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 7:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Network", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Network = append(m.Network, &NetworkStat{})
			if err := m.Network[len(m.Network)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 8:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field CgroupStats", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			if m.CgroupStats == nil {
				m.CgroupStats = &CgroupStats{}
			}
			if err := m.CgroupStats.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 9:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field MemoryOomControl", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			if m.MemoryOomControl == nil {
				m.MemoryOomControl = &MemoryOomControl{}
			}
			if err := m.MemoryOomControl.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		default:
			iNdEx = preIndex
			skippy, err := skipMetrics(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if (skippy < 0) || (iNdEx+skippy) < 0 {
				return ErrInvalidLengthMetrics
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *HugetlbStat) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowMetrics
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: HugetlbStat: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: HugetlbStat: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field Usage", wireType)
			}
			m.Usage = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.Usage |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 2:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field Max", wireType)
			}
			m.Max = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.Max |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 3:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field Failcnt", wireType)
			}
			m.Failcnt = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.Failcnt |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 4:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Pagesize", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + intStringLen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Pagesize = string(dAtA[iNdEx:postIndex])
			iNdEx = postIndex
		default:
			iNdEx = preIndex
			skippy, err := skipMetrics(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if (skippy < 0) || (iNdEx+skippy) < 0 {
				return ErrInvalidLengthMetrics
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *PidsStat) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowMetrics
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: PidsStat: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: PidsStat: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field Current", wireType)
			}
			m.Current = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.Current |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 2:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field Limit", wireType)
			}
			m.Limit = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.Limit |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		default:
			iNdEx = preIndex
			skippy, err := skipMetrics(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if (skippy < 0) || (iNdEx+skippy) < 0 {
				return ErrInvalidLengthMetrics
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *CPUStat) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowMetrics
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: CPUStat: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: CPUStat: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Usage", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			if m.Usage == nil {
				m.Usage = &CPUUsage{}
			}
			if err := m.Usage.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 2:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Throttling", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			if m.Throttling == nil {
				m.Throttling = &Throttle{}
			}
			if err := m.Throttling.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		default:
			iNdEx = preIndex
			skippy, err := skipMetrics(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if (skippy < 0) || (iNdEx+skippy) < 0 {
				return ErrInvalidLengthMetrics
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *CPUUsage) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowMetrics
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: CPUUsage: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: CPUUsage: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field Total", wireType)
			}
			m.Total = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.Total |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 2:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field Kernel", wireType)
			}
			m.Kernel = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.Kernel |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 3:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field User", wireType)
			}
			m.User = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.User |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 4:
			if wireType == 0 {
				var v uint64
				for shift := uint(0); ; shift += 7 {
					if shift >= 64 {
						return ErrIntOverflowMetrics
					}
					if iNdEx >= l {
						return io.ErrUnexpectedEOF
					}
					b := dAtA[iNdEx]
					iNdEx++
					v |= uint64(b&0x7F) << shift
					if b < 0x80 {
						break
					}
				}
				m.PerCPU = append(m.PerCPU, v)
			} else if wireType == 2 {
				var packedLen int
				for shift := uint(0); ; shift += 7 {
					if shift >= 64 {
						return ErrIntOverflowMetrics
					}
					if iNdEx >= l {
						return io.ErrUnexpectedEOF
					}
					b := dAtA[iNdEx]
					iNdEx++
					packedLen |= int(b&0x7F) << shift
					if b < 0x80 {
						break
					}
				}
				if packedLen < 0 {
					return ErrInvalidLengthMetrics
				}
				postIndex := iNdEx + packedLen
				if postIndex < 0 {
					return ErrInvalidLengthMetrics
				}
				if postIndex > l {
					return io.ErrUnexpectedEOF
				}
				var elementCount int
				var count int
				for _, integer := range dAtA[iNdEx:postIndex] {
					if integer < 128 {
						count++
					}
				}
				elementCount = count
				if elementCount != 0 && len(m.PerCPU) == 0 {
					m.PerCPU = make([]uint64, 0, elementCount)
				}
				for iNdEx < postIndex {
					var v uint64
					for shift := uint(0); ; shift += 7 {
						if shift >= 64 {
							return ErrIntOverflowMetrics
						}
						if iNdEx >= l {
							return io.ErrUnexpectedEOF
						}
						b := dAtA[iNdEx]
						iNdEx++
						v |= uint64(b&0x7F) << shift
						if b < 0x80 {
							break
						}
					}
					m.PerCPU = append(m.PerCPU, v)
				}
			} else {
				return fmt.Errorf("proto: wrong wireType = %d for field PerCPU", wireType)
			}
		default:
			iNdEx = preIndex
			skippy, err := skipMetrics(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if (skippy < 0) || (iNdEx+skippy) < 0 {
				return ErrInvalidLengthMetrics
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *Throttle) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowMetrics
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: Throttle: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: Throttle: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field Periods", wireType)
			}
			m.Periods = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.Periods |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 2:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field ThrottledPeriods", wireType)
			}
			m.ThrottledPeriods = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.ThrottledPeriods |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 3:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field ThrottledTime", wireType)
			}
			m.ThrottledTime = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.ThrottledTime |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		default:
			iNdEx = preIndex
			skippy, err := skipMetrics(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if (skippy < 0) || (iNdEx+skippy) < 0 {
				return ErrInvalidLengthMetrics
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *MemoryStat) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowMetrics
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: MemoryStat: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: MemoryStat: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field Cache", wireType)
			}
			m.Cache = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.Cache |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 2:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field RSS", wireType)
			}
			m.RSS = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.RSS |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 3:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field RSSHuge", wireType)
			}
			m.RSSHuge = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.RSSHuge |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 4:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field MappedFile", wireType)
			}
			m.MappedFile = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.MappedFile |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 5:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field Dirty", wireType)
			}
			m.Dirty = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.Dirty |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 6:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field Writeback", wireType)
			}
			m.Writeback = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.Writeback |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 7:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field PgPgIn", wireType)
			}
			m.PgPgIn = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.PgPgIn |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 8:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field PgPgOut", wireType)
			}
			m.PgPgOut = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.PgPgOut |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 9:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field PgFault", wireType)
			}
			m.PgFault = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.PgFault |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 10:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field PgMajFault", wireType)
			}
			m.PgMajFault = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.PgMajFault |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 11:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field InactiveAnon", wireType)
			}
			m.InactiveAnon = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.InactiveAnon |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 12:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field ActiveAnon", wireType)
			}
			m.ActiveAnon = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.ActiveAnon |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 13:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field InactiveFile", wireType)
			}
			m.InactiveFile = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.InactiveFile |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 14:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field ActiveFile", wireType)
			}
			m.ActiveFile = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.ActiveFile |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 15:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field Unevictable", wireType)
			}
			m.Unevictable = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.Unevictable |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 16:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field HierarchicalMemoryLimit", wireType)
			}
			m.HierarchicalMemoryLimit = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.HierarchicalMemoryLimit |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 17:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field HierarchicalSwapLimit", wireType)
			}
			m.HierarchicalSwapLimit = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.HierarchicalSwapLimit |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 18:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field TotalCache", wireType)
			}
			m.TotalCache = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.TotalCache |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 19:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field TotalRSS", wireType)
			}
			m.TotalRSS = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.TotalRSS |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 20:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field TotalRSSHuge", wireType)
			}
			m.TotalRSSHuge = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.TotalRSSHuge |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 21:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field TotalMappedFile", wireType)
			}
			m.TotalMappedFile = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.TotalMappedFile |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 22:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field TotalDirty", wireType)
			}
			m.TotalDirty = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.TotalDirty |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 23:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field TotalWriteback", wireType)
			}
			m.TotalWriteback = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.TotalWriteback |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 24:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field TotalPgPgIn", wireType)
			}
			m.TotalPgPgIn = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.TotalPgPgIn |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 25:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field TotalPgPgOut", wireType)
			}
			m.TotalPgPgOut = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.TotalPgPgOut |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 26:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field TotalPgFault", wireType)
			}
			m.TotalPgFault = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.TotalPgFault |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 27:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field TotalPgMajFault", wireType)
			}
			m.TotalPgMajFault = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.TotalPgMajFault |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 28:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field TotalInactiveAnon", wireType)
			}
			m.TotalInactiveAnon = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.TotalInactiveAnon |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 29:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field TotalActiveAnon", wireType)
			}
			m.TotalActiveAnon = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.TotalActiveAnon |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 30:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field TotalInactiveFile", wireType)
			}
			m.TotalInactiveFile = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.TotalInactiveFile |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 31:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field TotalActiveFile", wireType)
			}
			m.TotalActiveFile = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.TotalActiveFile |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 32:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field TotalUnevictable", wireType)
			}
			m.TotalUnevictable = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.TotalUnevictable |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 33:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Usage", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			if m.Usage == nil {
				m.Usage = &MemoryEntry{}
			}
			if err := m.Usage.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 34:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Swap", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			if m.Swap == nil {
				m.Swap = &MemoryEntry{}
			}
			if err := m.Swap.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 35:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Kernel", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			if m.Kernel == nil {
				m.Kernel = &MemoryEntry{}
			}
			if err := m.Kernel.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 36:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field KernelTCP", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			if m.KernelTCP == nil {
				m.KernelTCP = &MemoryEntry{}
			}
			if err := m.KernelTCP.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		default:
			iNdEx = preIndex
			skippy, err := skipMetrics(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if (skippy < 0) || (iNdEx+skippy) < 0 {
				return ErrInvalidLengthMetrics
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *MemoryEntry) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowMetrics
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: MemoryEntry: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: MemoryEntry: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field Limit", wireType)
			}
			m.Limit = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.Limit |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 2:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field Usage", wireType)
			}
			m.Usage = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.Usage |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 3:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field Max", wireType)
			}
			m.Max = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.Max |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 4:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field Failcnt", wireType)
			}
			m.Failcnt = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.Failcnt |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		default:
			iNdEx = preIndex
			skippy, err := skipMetrics(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if (skippy < 0) || (iNdEx+skippy) < 0 {
				return ErrInvalidLengthMetrics
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *MemoryOomControl) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowMetrics
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: MemoryOomControl: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: MemoryOomControl: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field OomKillDisable", wireType)
			}
			m.OomKillDisable = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.OomKillDisable |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 2:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field UnderOom", wireType)
			}
			m.UnderOom = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.UnderOom |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 3:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field OomKill", wireType)
			}
			m.OomKill = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.OomKill |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		default:
			iNdEx = preIndex
			skippy, err := skipMetrics(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if (skippy < 0) || (iNdEx+skippy) < 0 {
				return ErrInvalidLengthMetrics
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *BlkIOStat) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowMetrics
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: BlkIOStat: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: BlkIOStat: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field IoServiceBytesRecursive", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.IoServiceBytesRecursive = append(m.IoServiceBytesRecursive, &BlkIOEntry{})
			if err := m.IoServiceBytesRecursive[len(m.IoServiceBytesRecursive)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 2:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field IoServicedRecursive", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.IoServicedRecursive = append(m.IoServicedRecursive, &BlkIOEntry{})
			if err := m.IoServicedRecursive[len(m.IoServicedRecursive)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 3:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field IoQueuedRecursive", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.IoQueuedRecursive = append(m.IoQueuedRecursive, &BlkIOEntry{})
			if err := m.IoQueuedRecursive[len(m.IoQueuedRecursive)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 4:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field IoServiceTimeRecursive", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.IoServiceTimeRecursive = append(m.IoServiceTimeRecursive, &BlkIOEntry{})
			if err := m.IoServiceTimeRecursive[len(m.IoServiceTimeRecursive)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 5:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field IoWaitTimeRecursive", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.IoWaitTimeRecursive = append(m.IoWaitTimeRecursive, &BlkIOEntry{})
			if err := m.IoWaitTimeRecursive[len(m.IoWaitTimeRecursive)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 6:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field IoMergedRecursive", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.IoMergedRecursive = append(m.IoMergedRecursive, &BlkIOEntry{})
			if err := m.IoMergedRecursive[len(m.IoMergedRecursive)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 7:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field IoTimeRecursive", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.IoTimeRecursive = append(m.IoTimeRecursive, &BlkIOEntry{})
			if err := m.IoTimeRecursive[len(m.IoTimeRecursive)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 8:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field SectorsRecursive", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.SectorsRecursive = append(m.SectorsRecursive, &BlkIOEntry{})
			if err := m.SectorsRecursive[len(m.SectorsRecursive)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		default:
			iNdEx = preIndex
			skippy, err := skipMetrics(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if (skippy < 0) || (iNdEx+skippy) < 0 {
				return ErrInvalidLengthMetrics
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *BlkIOEntry) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowMetrics
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: BlkIOEntry: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: BlkIOEntry: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Op", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + intStringLen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Op = string(dAtA[iNdEx:postIndex])
			iNdEx = postIndex
		case 2:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Device", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + intStringLen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Device = string(dAtA[iNdEx:postIndex])
			iNdEx = postIndex
		case 3:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field Major", wireType)
			}
			m.Major = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.Major |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 4:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field Minor", wireType)
			}
			m.Minor = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.Minor |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 5:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType)
			}
			m.Value = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.Value |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		default:
			iNdEx = preIndex
			skippy, err := skipMetrics(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if (skippy < 0) || (iNdEx+skippy) < 0 {
				return ErrInvalidLengthMetrics
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *RdmaStat) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowMetrics
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: RdmaStat: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: RdmaStat: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Current", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Current = append(m.Current, &RdmaEntry{})
			if err := m.Current[len(m.Current)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 2:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Limit", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Limit = append(m.Limit, &RdmaEntry{})
			if err := m.Limit[len(m.Limit)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		default:
			iNdEx = preIndex
			skippy, err := skipMetrics(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if (skippy < 0) || (iNdEx+skippy) < 0 {
				return ErrInvalidLengthMetrics
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *RdmaEntry) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowMetrics
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: RdmaEntry: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: RdmaEntry: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Device", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + intStringLen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Device = string(dAtA[iNdEx:postIndex])
			iNdEx = postIndex
		case 2:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field HcaHandles", wireType)
			}
			m.HcaHandles = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.HcaHandles |= uint32(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 3:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field HcaObjects", wireType)
			}
			m.HcaObjects = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.HcaObjects |= uint32(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		default:
			iNdEx = preIndex
			skippy, err := skipMetrics(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if (skippy < 0) || (iNdEx+skippy) < 0 {
				return ErrInvalidLengthMetrics
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *NetworkStat) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowMetrics
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: NetworkStat: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: NetworkStat: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthMetrics
			}
			postIndex := iNdEx + intStringLen
			if postIndex < 0 {
				return ErrInvalidLengthMetrics
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Name = string(dAtA[iNdEx:postIndex])
			iNdEx = postIndex
		case 2:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field RxBytes", wireType)
			}
			m.RxBytes = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.RxBytes |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 3:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field RxPackets", wireType)
			}
			m.RxPackets = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.RxPackets |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 4:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field RxErrors", wireType)
			}
			m.RxErrors = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.RxErrors |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 5:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field RxDropped", wireType)
			}
			m.RxDropped = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.RxDropped |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 6:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field TxBytes", wireType)
			}
			m.TxBytes = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.TxBytes |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 7:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field TxPackets", wireType)
			}
			m.TxPackets = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.TxPackets |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 8:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field TxErrors", wireType)
			}
			m.TxErrors = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.TxErrors |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 9:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field TxDropped", wireType)
			}
			m.TxDropped = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.TxDropped |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		default:
			iNdEx = preIndex
			skippy, err := skipMetrics(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if (skippy < 0) || (iNdEx+skippy) < 0 {
				return ErrInvalidLengthMetrics
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *CgroupStats) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowMetrics
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: CgroupStats: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: CgroupStats: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field NrSleeping", wireType)
			}
			m.NrSleeping = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.NrSleeping |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 2:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field NrRunning", wireType)
			}
			m.NrRunning = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.NrRunning |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 3:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field NrStopped", wireType)
			}
			m.NrStopped = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.NrStopped |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 4:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field NrUninterruptible", wireType)
			}
			m.NrUninterruptible = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.NrUninterruptible |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 5:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field NrIoWait", wireType)
			}
			m.NrIoWait = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.NrIoWait |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		default:
			iNdEx = preIndex
			skippy, err := skipMetrics(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if (skippy < 0) || (iNdEx+skippy) < 0 {
				return ErrInvalidLengthMetrics
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func skipMetrics(dAtA []byte) (n int, err error) {
	l := len(dAtA)
	iNdEx := 0
	depth := 0
	for iNdEx < l {
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return 0, ErrIntOverflowMetrics
			}
			if iNdEx >= l {
				return 0, io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= (uint64(b) & 0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		wireType := int(wire & 0x7)
		switch wireType {
		case 0:
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return 0, ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return 0, io.ErrUnexpectedEOF
				}
				iNdEx++
				if dAtA[iNdEx-1] < 0x80 {
					break
				}
			}
		case 1:
			iNdEx += 8
		case 2:
			var length int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return 0, ErrIntOverflowMetrics
				}
				if iNdEx >= l {
					return 0, io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				length |= (int(b) & 0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if length < 0 {
				return 0, ErrInvalidLengthMetrics
			}
			iNdEx += length
		case 3:
			depth++
		case 4:
			if depth == 0 {
				return 0, ErrUnexpectedEndOfGroupMetrics
			}
			depth--
		case 5:
			iNdEx += 4
		default:
			return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
		}
		if iNdEx < 0 {
			return 0, ErrInvalidLengthMetrics
		}
		if depth == 0 {
			return iNdEx, nil
		}
	}
	return 0, io.ErrUnexpectedEOF
}

var (
	ErrInvalidLengthMetrics        = fmt.Errorf("proto: negative length found during unmarshaling")
	ErrIntOverflowMetrics          = fmt.Errorf("proto: integer overflow")
	ErrUnexpectedEndOfGroupMetrics = fmt.Errorf("proto: unexpected end of group")
)
   0707010000029F000081A4000000000000000000000001645E367C000040B6000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/containerd/cgroups/stats/v1/metrics.pb.txt  file {
  name: "github.com/containerd/cgroups/stats/v1/metrics.proto"
  package: "io.containerd.cgroups.v1"
  dependency: "gogoproto/gogo.proto"
  message_type {
    name: "Metrics"
    field {
      name: "hugetlb"
      number: 1
      label: LABEL_REPEATED
      type: TYPE_MESSAGE
      type_name: ".io.containerd.cgroups.v1.HugetlbStat"
      json_name: "hugetlb"
    }
    field {
      name: "pids"
      number: 2
      label: LABEL_OPTIONAL
      type: TYPE_MESSAGE
      type_name: ".io.containerd.cgroups.v1.PidsStat"
      json_name: "pids"
    }
    field {
      name: "cpu"
      number: 3
      label: LABEL_OPTIONAL
      type: TYPE_MESSAGE
      type_name: ".io.containerd.cgroups.v1.CPUStat"
      options {
        65004: "CPU"
      }
      json_name: "cpu"
    }
    field {
      name: "memory"
      number: 4
      label: LABEL_OPTIONAL
      type: TYPE_MESSAGE
      type_name: ".io.containerd.cgroups.v1.MemoryStat"
      json_name: "memory"
    }
    field {
      name: "blkio"
      number: 5
      label: LABEL_OPTIONAL
      type: TYPE_MESSAGE
      type_name: ".io.containerd.cgroups.v1.BlkIOStat"
      json_name: "blkio"
    }
    field {
      name: "rdma"
      number: 6
      label: LABEL_OPTIONAL
      type: TYPE_MESSAGE
      type_name: ".io.containerd.cgroups.v1.RdmaStat"
      json_name: "rdma"
    }
    field {
      name: "network"
      number: 7
      label: LABEL_REPEATED
      type: TYPE_MESSAGE
      type_name: ".io.containerd.cgroups.v1.NetworkStat"
      json_name: "network"
    }
    field {
      name: "cgroup_stats"
      number: 8
      label: LABEL_OPTIONAL
      type: TYPE_MESSAGE
      type_name: ".io.containerd.cgroups.v1.CgroupStats"
      json_name: "cgroupStats"
    }
    field {
      name: "memory_oom_control"
      number: 9
      label: LABEL_OPTIONAL
      type: TYPE_MESSAGE
      type_name: ".io.containerd.cgroups.v1.MemoryOomControl"
      json_name: "memoryOomControl"
    }
  }
  message_type {
    name: "HugetlbStat"
    field {
      name: "usage"
      number: 1
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "usage"
    }
    field {
      name: "max"
      number: 2
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "max"
    }
    field {
      name: "failcnt"
      number: 3
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "failcnt"
    }
    field {
      name: "pagesize"
      number: 4
      label: LABEL_OPTIONAL
      type: TYPE_STRING
      json_name: "pagesize"
    }
  }
  message_type {
    name: "PidsStat"
    field {
      name: "current"
      number: 1
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "current"
    }
    field {
      name: "limit"
      number: 2
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "limit"
    }
  }
  message_type {
    name: "CPUStat"
    field {
      name: "usage"
      number: 1
      label: LABEL_OPTIONAL
      type: TYPE_MESSAGE
      type_name: ".io.containerd.cgroups.v1.CPUUsage"
      json_name: "usage"
    }
    field {
      name: "throttling"
      number: 2
      label: LABEL_OPTIONAL
      type: TYPE_MESSAGE
      type_name: ".io.containerd.cgroups.v1.Throttle"
      json_name: "throttling"
    }
  }
  message_type {
    name: "CPUUsage"
    field {
      name: "total"
      number: 1
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "total"
    }
    field {
      name: "kernel"
      number: 2
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "kernel"
    }
    field {
      name: "user"
      number: 3
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "user"
    }
    field {
      name: "per_cpu"
      number: 4
      label: LABEL_REPEATED
      type: TYPE_UINT64
      options {
        65004: "PerCPU"
      }
      json_name: "perCpu"
    }
  }
  message_type {
    name: "Throttle"
    field {
      name: "periods"
      number: 1
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "periods"
    }
    field {
      name: "throttled_periods"
      number: 2
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "throttledPeriods"
    }
    field {
      name: "throttled_time"
      number: 3
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "throttledTime"
    }
  }
  message_type {
    name: "MemoryStat"
    field {
      name: "cache"
      number: 1
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "cache"
    }
    field {
      name: "rss"
      number: 2
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      options {
        65004: "RSS"
      }
      json_name: "rss"
    }
    field {
      name: "rss_huge"
      number: 3
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      options {
        65004: "RSSHuge"
      }
      json_name: "rssHuge"
    }
    field {
      name: "mapped_file"
      number: 4
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "mappedFile"
    }
    field {
      name: "dirty"
      number: 5
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "dirty"
    }
    field {
      name: "writeback"
      number: 6
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "writeback"
    }
    field {
      name: "pg_pg_in"
      number: 7
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "pgPgIn"
    }
    field {
      name: "pg_pg_out"
      number: 8
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "pgPgOut"
    }
    field {
      name: "pg_fault"
      number: 9
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "pgFault"
    }
    field {
      name: "pg_maj_fault"
      number: 10
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "pgMajFault"
    }
    field {
      name: "inactive_anon"
      number: 11
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "inactiveAnon"
    }
    field {
      name: "active_anon"
      number: 12
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "activeAnon"
    }
    field {
      name: "inactive_file"
      number: 13
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "inactiveFile"
    }
    field {
      name: "active_file"
      number: 14
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "activeFile"
    }
    field {
      name: "unevictable"
      number: 15
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "unevictable"
    }
    field {
      name: "hierarchical_memory_limit"
      number: 16
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "hierarchicalMemoryLimit"
    }
    field {
      name: "hierarchical_swap_limit"
      number: 17
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "hierarchicalSwapLimit"
    }
    field {
      name: "total_cache"
      number: 18
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "totalCache"
    }
    field {
      name: "total_rss"
      number: 19
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      options {
        65004: "TotalRSS"
      }
      json_name: "totalRss"
    }
    field {
      name: "total_rss_huge"
      number: 20
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      options {
        65004: "TotalRSSHuge"
      }
      json_name: "totalRssHuge"
    }
    field {
      name: "total_mapped_file"
      number: 21
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "totalMappedFile"
    }
    field {
      name: "total_dirty"
      number: 22
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "totalDirty"
    }
    field {
      name: "total_writeback"
      number: 23
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "totalWriteback"
    }
    field {
      name: "total_pg_pg_in"
      number: 24
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "totalPgPgIn"
    }
    field {
      name: "total_pg_pg_out"
      number: 25
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "totalPgPgOut"
    }
    field {
      name: "total_pg_fault"
      number: 26
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "totalPgFault"
    }
    field {
      name: "total_pg_maj_fault"
      number: 27
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "totalPgMajFault"
    }
    field {
      name: "total_inactive_anon"
      number: 28
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "totalInactiveAnon"
    }
    field {
      name: "total_active_anon"
      number: 29
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "totalActiveAnon"
    }
    field {
      name: "total_inactive_file"
      number: 30
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "totalInactiveFile"
    }
    field {
      name: "total_active_file"
      number: 31
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "totalActiveFile"
    }
    field {
      name: "total_unevictable"
      number: 32
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "totalUnevictable"
    }
    field {
      name: "usage"
      number: 33
      label: LABEL_OPTIONAL
      type: TYPE_MESSAGE
      type_name: ".io.containerd.cgroups.v1.MemoryEntry"
      json_name: "usage"
    }
    field {
      name: "swap"
      number: 34
      label: LABEL_OPTIONAL
      type: TYPE_MESSAGE
      type_name: ".io.containerd.cgroups.v1.MemoryEntry"
      json_name: "swap"
    }
    field {
      name: "kernel"
      number: 35
      label: LABEL_OPTIONAL
      type: TYPE_MESSAGE
      type_name: ".io.containerd.cgroups.v1.MemoryEntry"
      json_name: "kernel"
    }
    field {
      name: "kernel_tcp"
      number: 36
      label: LABEL_OPTIONAL
      type: TYPE_MESSAGE
      type_name: ".io.containerd.cgroups.v1.MemoryEntry"
      options {
        65004: "KernelTCP"
      }
      json_name: "kernelTcp"
    }
  }
  message_type {
    name: "MemoryEntry"
    field {
      name: "limit"
      number: 1
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "limit"
    }
    field {
      name: "usage"
      number: 2
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "usage"
    }
    field {
      name: "max"
      number: 3
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "max"
    }
    field {
      name: "failcnt"
      number: 4
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "failcnt"
    }
  }
  message_type {
    name: "MemoryOomControl"
    field {
      name: "oom_kill_disable"
      number: 1
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "oomKillDisable"
    }
    field {
      name: "under_oom"
      number: 2
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "underOom"
    }
    field {
      name: "oom_kill"
      number: 3
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "oomKill"
    }
  }
  message_type {
    name: "BlkIOStat"
    field {
      name: "io_service_bytes_recursive"
      number: 1
      label: LABEL_REPEATED
      type: TYPE_MESSAGE
      type_name: ".io.containerd.cgroups.v1.BlkIOEntry"
      json_name: "ioServiceBytesRecursive"
    }
    field {
      name: "io_serviced_recursive"
      number: 2
      label: LABEL_REPEATED
      type: TYPE_MESSAGE
      type_name: ".io.containerd.cgroups.v1.BlkIOEntry"
      json_name: "ioServicedRecursive"
    }
    field {
      name: "io_queued_recursive"
      number: 3
      label: LABEL_REPEATED
      type: TYPE_MESSAGE
      type_name: ".io.containerd.cgroups.v1.BlkIOEntry"
      json_name: "ioQueuedRecursive"
    }
    field {
      name: "io_service_time_recursive"
      number: 4
      label: LABEL_REPEATED
      type: TYPE_MESSAGE
      type_name: ".io.containerd.cgroups.v1.BlkIOEntry"
      json_name: "ioServiceTimeRecursive"
    }
    field {
      name: "io_wait_time_recursive"
      number: 5
      label: LABEL_REPEATED
      type: TYPE_MESSAGE
      type_name: ".io.containerd.cgroups.v1.BlkIOEntry"
      json_name: "ioWaitTimeRecursive"
    }
    field {
      name: "io_merged_recursive"
      number: 6
      label: LABEL_REPEATED
      type: TYPE_MESSAGE
      type_name: ".io.containerd.cgroups.v1.BlkIOEntry"
      json_name: "ioMergedRecursive"
    }
    field {
      name: "io_time_recursive"
      number: 7
      label: LABEL_REPEATED
      type: TYPE_MESSAGE
      type_name: ".io.containerd.cgroups.v1.BlkIOEntry"
      json_name: "ioTimeRecursive"
    }
    field {
      name: "sectors_recursive"
      number: 8
      label: LABEL_REPEATED
      type: TYPE_MESSAGE
      type_name: ".io.containerd.cgroups.v1.BlkIOEntry"
      json_name: "sectorsRecursive"
    }
  }
  message_type {
    name: "BlkIOEntry"
    field {
      name: "op"
      number: 1
      label: LABEL_OPTIONAL
      type: TYPE_STRING
      json_name: "op"
    }
    field {
      name: "device"
      number: 2
      label: LABEL_OPTIONAL
      type: TYPE_STRING
      json_name: "device"
    }
    field {
      name: "major"
      number: 3
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "major"
    }
    field {
      name: "minor"
      number: 4
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "minor"
    }
    field {
      name: "value"
      number: 5
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "value"
    }
  }
  message_type {
    name: "RdmaStat"
    field {
      name: "current"
      number: 1
      label: LABEL_REPEATED
      type: TYPE_MESSAGE
      type_name: ".io.containerd.cgroups.v1.RdmaEntry"
      json_name: "current"
    }
    field {
      name: "limit"
      number: 2
      label: LABEL_REPEATED
      type: TYPE_MESSAGE
      type_name: ".io.containerd.cgroups.v1.RdmaEntry"
      json_name: "limit"
    }
  }
  message_type {
    name: "RdmaEntry"
    field {
      name: "device"
      number: 1
      label: LABEL_OPTIONAL
      type: TYPE_STRING
      json_name: "device"
    }
    field {
      name: "hca_handles"
      number: 2
      label: LABEL_OPTIONAL
      type: TYPE_UINT32
      json_name: "hcaHandles"
    }
    field {
      name: "hca_objects"
      number: 3
      label: LABEL_OPTIONAL
      type: TYPE_UINT32
      json_name: "hcaObjects"
    }
  }
  message_type {
    name: "NetworkStat"
    field {
      name: "name"
      number: 1
      label: LABEL_OPTIONAL
      type: TYPE_STRING
      json_name: "name"
    }
    field {
      name: "rx_bytes"
      number: 2
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "rxBytes"
    }
    field {
      name: "rx_packets"
      number: 3
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "rxPackets"
    }
    field {
      name: "rx_errors"
      number: 4
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "rxErrors"
    }
    field {
      name: "rx_dropped"
      number: 5
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "rxDropped"
    }
    field {
      name: "tx_bytes"
      number: 6
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "txBytes"
    }
    field {
      name: "tx_packets"
      number: 7
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "txPackets"
    }
    field {
      name: "tx_errors"
      number: 8
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "txErrors"
    }
    field {
      name: "tx_dropped"
      number: 9
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "txDropped"
    }
  }
  message_type {
    name: "CgroupStats"
    field {
      name: "nr_sleeping"
      number: 1
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "nrSleeping"
    }
    field {
      name: "nr_running"
      number: 2
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "nrRunning"
    }
    field {
      name: "nr_stopped"
      number: 3
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "nrStopped"
    }
    field {
      name: "nr_uninterruptible"
      number: 4
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "nrUninterruptible"
    }
    field {
      name: "nr_io_wait"
      number: 5
      label: LABEL_OPTIONAL
      type: TYPE_UINT64
      json_name: "nrIoWait"
    }
  }
  syntax: "proto3"
}
  070701000002A0000081A4000000000000000000000001645E367C00000E17000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/containerd/cgroups/stats/v1/metrics.proto   syntax = "proto3";

package io.containerd.cgroups.v1;

import "gogoproto/gogo.proto";

message Metrics {
	repeated HugetlbStat hugetlb = 1;
	PidsStat pids = 2;
	CPUStat cpu = 3 [(gogoproto.customname) = "CPU"];
	MemoryStat memory = 4;
	BlkIOStat blkio = 5;
	RdmaStat rdma = 6;
	repeated NetworkStat network = 7;
	CgroupStats cgroup_stats = 8;
	MemoryOomControl memory_oom_control = 9;
}

message HugetlbStat {
	uint64 usage = 1;
	uint64 max = 2;
	uint64 failcnt = 3;
	string pagesize = 4;
}

message PidsStat {
	uint64 current = 1;
	uint64 limit = 2;
}

message CPUStat {
	CPUUsage usage = 1;
	Throttle throttling = 2;
}

message CPUUsage {
	// values in nanoseconds
	uint64 total = 1;
	uint64 kernel = 2;
	uint64 user = 3;
	repeated uint64 per_cpu = 4 [(gogoproto.customname) = "PerCPU"];

}

message Throttle {
	uint64 periods = 1;
	uint64 throttled_periods = 2;
	uint64 throttled_time = 3;
}

message MemoryStat {
	uint64 cache = 1;
	uint64 rss = 2 [(gogoproto.customname) = "RSS"];
	uint64 rss_huge = 3 [(gogoproto.customname) = "RSSHuge"];
	uint64 mapped_file = 4;
	uint64 dirty = 5;
	uint64 writeback = 6;
	uint64 pg_pg_in = 7;
	uint64 pg_pg_out = 8;
	uint64 pg_fault = 9;
	uint64 pg_maj_fault = 10;
	uint64 inactive_anon = 11;
	uint64 active_anon = 12;
	uint64 inactive_file = 13;
	uint64 active_file = 14;
	uint64 unevictable = 15;
	uint64 hierarchical_memory_limit = 16;
	uint64 hierarchical_swap_limit = 17;
	uint64 total_cache = 18;
	uint64 total_rss = 19 [(gogoproto.customname) = "TotalRSS"];
	uint64 total_rss_huge = 20 [(gogoproto.customname) = "TotalRSSHuge"];
	uint64 total_mapped_file = 21;
	uint64 total_dirty = 22;
	uint64 total_writeback = 23;
	uint64 total_pg_pg_in = 24;
	uint64 total_pg_pg_out = 25;
	uint64 total_pg_fault = 26;
	uint64 total_pg_maj_fault = 27;
	uint64 total_inactive_anon = 28;
	uint64 total_active_anon = 29;
	uint64 total_inactive_file = 30;
	uint64 total_active_file = 31;
	uint64 total_unevictable = 32;
	MemoryEntry usage = 33;
	MemoryEntry swap = 34;
	MemoryEntry kernel = 35;
	MemoryEntry kernel_tcp = 36 [(gogoproto.customname) = "KernelTCP"];

}

message MemoryEntry {
	uint64 limit = 1;
	uint64 usage = 2;
	uint64 max = 3;
	uint64 failcnt = 4;
}

message MemoryOomControl {
	uint64 oom_kill_disable = 1;
	uint64 under_oom = 2;
	uint64 oom_kill = 3;
}

message BlkIOStat {
	repeated BlkIOEntry io_service_bytes_recursive = 1;
	repeated BlkIOEntry io_serviced_recursive = 2;
	repeated BlkIOEntry io_queued_recursive = 3;
	repeated BlkIOEntry io_service_time_recursive = 4;
	repeated BlkIOEntry io_wait_time_recursive = 5;
	repeated BlkIOEntry io_merged_recursive = 6;
	repeated BlkIOEntry io_time_recursive = 7;
	repeated BlkIOEntry sectors_recursive = 8;
}

message BlkIOEntry {
	string op = 1;
	string device = 2;
	uint64 major = 3;
	uint64 minor = 4;
	uint64 value = 5;
}

message RdmaStat {
	repeated RdmaEntry current = 1;
	repeated RdmaEntry limit = 2;
}

message RdmaEntry {
	string device = 1;
	uint32 hca_handles = 2;
	uint32 hca_objects = 3;
}

message NetworkStat {
	string name = 1;
	uint64 rx_bytes = 2;
	uint64 rx_packets = 3;
	uint64 rx_errors  = 4;
	uint64 rx_dropped = 5;
	uint64 tx_bytes = 6;
	uint64 tx_packets = 7;
	uint64 tx_errors = 8;
	uint64 tx_dropped = 9;
}

// CgroupStats exports per-cgroup statistics.
message CgroupStats {
	// number of tasks sleeping
	uint64 nr_sleeping = 1;
	// number of tasks running
	uint64 nr_running = 2;
	// number of tasks in stopped state
	uint64 nr_stopped = 3;
	// number of tasks in uninterruptible state
	uint64 nr_uninterruptible = 4;
	// number of tasks waiting on IO
	uint64 nr_io_wait = 5;
}
 070701000002A1000041ED000000000000000000000005645E367C00000000000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd   070701000002A2000081A4000000000000000000000001645E367C00002A0D000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/LICENSE   
                                 Apache License
                           Version 2.0, January 2004
                        https://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   Copyright The containerd Authors

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       https://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
   070701000002A3000081A4000000000000000000000001645E367C00000207000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/NOTICE    Docker
Copyright 2012-2015 Docker, Inc.

This product includes software developed at Docker, Inc. (https://www.docker.com).

The following is courtesy of our legal counsel:


Use and transfer of Docker may be subject to certain restrictions by the
United States and other governments.
It is your responsibility to ensure that your use and/or transfer does not
violate applicable laws.

For more information, please see https://www.bis.doc.gov

See also https://www.apache.org/dev/crypto.html and/or seek legal counsel.
 070701000002A4000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/archive   070701000002A5000081A4000000000000000000000001645E367C000002D6000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/archive/link_default.go   //go:build !freebsd

/*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package archive

import "os"

func link(oldname, newname string) error {
	return os.Link(oldname, newname)
}
  070701000002A6000081A4000000000000000000000001645E367C00000C64000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/archive/link_freebsd.go   /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package archive

import (
	"os"
	"syscall"

	"golang.org/x/sys/unix"
)

func link(oldname, newname string) error {
	e := ignoringEINTR(func() error {
		return unix.Linkat(unix.AT_FDCWD, oldname, unix.AT_FDCWD, newname, 0)
	})
	if e != nil {
		return &os.LinkError{Op: "link", Old: oldname, New: newname, Err: e}
	}
	return nil
}

// The following contents were copied from Go 1.18.2.
// Use of this source code is governed by the following
// BSD-style license:
//
// Copyright (c) 2009 The Go Authors. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//   * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//   * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//   * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

// ignoringEINTR makes a function call and repeats it if it returns an
// EINTR error. This appears to be required even though we install all
// signal handlers with SA_RESTART: see #22838, #38033, #38836, #40846.
// Also #20400 and #36644 are issues in which a signal handler is
// installed without setting SA_RESTART. None of these are the common case,
// but there are enough of them that it seems that we can't avoid
// an EINTR loop.
func ignoringEINTR(fn func() error) error {
	for {
		err := fn()
		if err != syscall.EINTR {
			return err
		}
	}
}
070701000002A7000081A4000000000000000000000001645E367C0000588C000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/archive/tar.go    /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package archive

import (
	"archive/tar"
	"context"
	"errors"
	"fmt"
	"io"
	"os"
	"path/filepath"
	"strings"
	"sync"
	"syscall"
	"time"

	"github.com/containerd/containerd/archive/tarheader"
	"github.com/containerd/containerd/log"
	"github.com/containerd/containerd/pkg/epoch"
	"github.com/containerd/containerd/pkg/userns"
	"github.com/containerd/continuity/fs"
)

var bufPool = &sync.Pool{
	New: func() interface{} {
		buffer := make([]byte, 32*1024)
		return &buffer
	},
}

var errInvalidArchive = errors.New("invalid archive")

// Diff returns a tar stream of the computed filesystem
// difference between the provided directories.
//
// Produces a tar using OCI style file markers for deletions. Deleted
// files will be prepended with the prefix ".wh.". This style is
// based off AUFS whiteouts.
// See https://github.com/opencontainers/image-spec/blob/main/layer.md
func Diff(ctx context.Context, a, b string, opts ...WriteDiffOpt) io.ReadCloser {
	r, w := io.Pipe()

	go func() {
		err := WriteDiff(ctx, w, a, b, opts...)
		if err != nil {
			log.G(ctx).WithError(err).Debugf("write diff failed")
		}
		if err = w.CloseWithError(err); err != nil {
			log.G(ctx).WithError(err).Debugf("closing tar pipe failed")
		}
	}()

	return r
}

// WriteDiff writes a tar stream of the computed difference between the
// provided paths.
//
// Produces a tar using OCI style file markers for deletions. Deleted
// files will be prepended with the prefix ".wh.". This style is
// based off AUFS whiteouts.
// See https://github.com/opencontainers/image-spec/blob/main/layer.md
func WriteDiff(ctx context.Context, w io.Writer, a, b string, opts ...WriteDiffOpt) error {
	var options WriteDiffOptions
	for _, opt := range opts {
		if err := opt(&options); err != nil {
			return fmt.Errorf("failed to apply option: %w", err)
		}
	}
	if tm := epoch.FromContext(ctx); tm != nil && options.SourceDateEpoch == nil {
		options.SourceDateEpoch = tm
	}

	if options.writeDiffFunc == nil {
		options.writeDiffFunc = writeDiffNaive
	}

	return options.writeDiffFunc(ctx, w, a, b, options)
}

// writeDiffNaive writes a tar stream of the computed difference between the
// provided directories on disk.
//
// Produces a tar using OCI style file markers for deletions. Deleted
// files will be prepended with the prefix ".wh.". This style is
// based off AUFS whiteouts.
// See https://github.com/opencontainers/image-spec/blob/main/layer.md
func writeDiffNaive(ctx context.Context, w io.Writer, a, b string, o WriteDiffOptions) error {
	var opts []ChangeWriterOpt
	if o.SourceDateEpoch != nil {
		opts = append(opts,
			WithModTimeUpperBound(*o.SourceDateEpoch),
			WithWhiteoutTime(*o.SourceDateEpoch))
	}
	cw := NewChangeWriter(w, b, opts...)
	err := fs.Changes(ctx, a, b, cw.HandleChange)
	if err != nil {
		return fmt.Errorf("failed to create diff tar stream: %w", err)
	}
	return cw.Close()
}

const (
	// whiteoutPrefix prefix means file is a whiteout. If this is followed by a
	// filename this means that file has been removed from the base layer.
	// See https://github.com/opencontainers/image-spec/blob/main/layer.md#whiteouts
	whiteoutPrefix = ".wh."

	// whiteoutMetaPrefix prefix means whiteout has a special meaning and is not
	// for removing an actual file. Normally these files are excluded from exported
	// archives.
	whiteoutMetaPrefix = whiteoutPrefix + whiteoutPrefix

	// whiteoutOpaqueDir file means directory has been made opaque - meaning
	// readdir calls to this directory do not follow to lower layers.
	whiteoutOpaqueDir = whiteoutMetaPrefix + ".opq"

	paxSchilyXattr = "SCHILY.xattr."

	userXattrPrefix = "user."
)

// Apply applies a tar stream of an OCI style diff tar.
// See https://github.com/opencontainers/image-spec/blob/main/layer.md#applying-changesets
func Apply(ctx context.Context, root string, r io.Reader, opts ...ApplyOpt) (int64, error) {
	root = filepath.Clean(root)

	var options ApplyOptions
	for _, opt := range opts {
		if err := opt(&options); err != nil {
			return 0, fmt.Errorf("failed to apply option: %w", err)
		}
	}
	if options.Filter == nil {
		options.Filter = all
	}
	if options.applyFunc == nil {
		options.applyFunc = applyNaive
	}

	return options.applyFunc(ctx, root, r, options)
}

// applyNaive applies a tar stream of an OCI style diff tar to a directory
// applying each file as either a whole file or whiteout.
// See https://github.com/opencontainers/image-spec/blob/main/layer.md#applying-changesets
func applyNaive(ctx context.Context, root string, r io.Reader, options ApplyOptions) (size int64, err error) {
	var (
		dirs []*tar.Header

		tr = tar.NewReader(r)

		// Used for handling opaque directory markers which
		// may occur out of order
		unpackedPaths = make(map[string]struct{})

		convertWhiteout = options.ConvertWhiteout
	)

	if convertWhiteout == nil {
		// handle whiteouts by removing the target files
		convertWhiteout = func(hdr *tar.Header, path string) (bool, error) {
			base := filepath.Base(path)
			dir := filepath.Dir(path)
			if base == whiteoutOpaqueDir {
				_, err := os.Lstat(dir)
				if err != nil {
					return false, err
				}
				err = filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
					if err != nil {
						if os.IsNotExist(err) {
							err = nil // parent was deleted
						}
						return err
					}
					if path == dir {
						return nil
					}
					if _, exists := unpackedPaths[path]; !exists {
						err := os.RemoveAll(path)
						return err
					}
					return nil
				})
				return false, err
			}

			if strings.HasPrefix(base, whiteoutPrefix) {
				originalBase := base[len(whiteoutPrefix):]
				originalPath := filepath.Join(dir, originalBase)

				return false, os.RemoveAll(originalPath)
			}

			return true, nil
		}
	}

	// Iterate through the files in the archive.
	for {
		select {
		case <-ctx.Done():
			return 0, ctx.Err()
		default:
		}

		hdr, err := tr.Next()
		if err == io.EOF {
			// end of tar archive
			break
		}
		if err != nil {
			return 0, err
		}

		size += hdr.Size

		// Normalize name, for safety and for a simple is-root check
		hdr.Name = filepath.Clean(hdr.Name)

		accept, err := options.Filter(hdr)
		if err != nil {
			return 0, err
		}
		if !accept {
			continue
		}

		if skipFile(hdr) {
			log.G(ctx).Warnf("file %q ignored: archive may not be supported on system", hdr.Name)
			continue
		}

		// Split name and resolve symlinks for root directory.
		ppath, base := filepath.Split(hdr.Name)
		ppath, err = fs.RootPath(root, ppath)
		if err != nil {
			return 0, fmt.Errorf("failed to get root path: %w", err)
		}

		// Join to root before joining to parent path to ensure relative links are
		// already resolved based on the root before adding to parent.
		path := filepath.Join(ppath, filepath.Join("/", base))
		if path == root {
			log.G(ctx).Debugf("file %q ignored: resolved to root", hdr.Name)
			continue
		}

		// If file is not directly under root, ensure parent directory
		// exists or is created.
		if ppath != root {
			parentPath := ppath
			if base == "" {
				parentPath = filepath.Dir(path)
			}
			if err := mkparent(ctx, parentPath, root, options.Parents); err != nil {
				return 0, err
			}
		}

		// Naive whiteout convert function which handles whiteout files by
		// removing the target files.
		if err := validateWhiteout(path); err != nil {
			return 0, err
		}
		writeFile, err := convertWhiteout(hdr, path)
		if err != nil {
			return 0, fmt.Errorf("failed to convert whiteout file %q: %w", hdr.Name, err)
		}
		if !writeFile {
			continue
		}
		// If path exits we almost always just want to remove and replace it.
		// The only exception is when it is a directory *and* the file from
		// the layer is also a directory. Then we want to merge them (i.e.
		// just apply the metadata from the layer).
		if fi, err := os.Lstat(path); err == nil {
			if !(fi.IsDir() && hdr.Typeflag == tar.TypeDir) {
				if err := os.RemoveAll(path); err != nil {
					return 0, err
				}
			}
		}

		srcData := io.Reader(tr)
		srcHdr := hdr

		if err := createTarFile(ctx, path, root, srcHdr, srcData, options.NoSameOwner); err != nil {
			return 0, err
		}

		// Directory mtimes must be handled at the end to avoid further
		// file creation in them to modify the directory mtime
		if hdr.Typeflag == tar.TypeDir {
			dirs = append(dirs, hdr)
		}
		unpackedPaths[path] = struct{}{}
	}

	for _, hdr := range dirs {
		path, err := fs.RootPath(root, hdr.Name)
		if err != nil {
			return 0, err
		}
		if err := chtimes(path, boundTime(latestTime(hdr.AccessTime, hdr.ModTime)), boundTime(hdr.ModTime)); err != nil {
			return 0, err
		}
	}

	return size, nil
}

func createTarFile(ctx context.Context, path, extractDir string, hdr *tar.Header, reader io.Reader, noSameOwner bool) error {
	// hdr.Mode is in linux format, which we can use for syscalls,
	// but for os.Foo() calls we need the mode converted to os.FileMode,
	// so use hdrInfo.Mode() (they differ for e.g. setuid bits)
	hdrInfo := hdr.FileInfo()

	switch hdr.Typeflag {
	case tar.TypeDir:
		// Create directory unless it exists as a directory already.
		// In that case we just want to merge the two
		if fi, err := os.Lstat(path); !(err == nil && fi.IsDir()) {
			if err := mkdir(path, hdrInfo.Mode()); err != nil {
				return err
			}
		}

	//nolint:staticcheck // TypeRegA is deprecated but we may still receive an external tar with TypeRegA
	case tar.TypeReg, tar.TypeRegA:
		file, err := openFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, hdrInfo.Mode())
		if err != nil {
			return err
		}

		_, err = copyBuffered(ctx, file, reader)
		if err1 := file.Close(); err == nil {
			err = err1
		}
		if err != nil {
			return err
		}

	case tar.TypeBlock, tar.TypeChar:
		// Handle this is an OS-specific way
		if err := handleTarTypeBlockCharFifo(hdr, path); err != nil {
			return err
		}

	case tar.TypeFifo:
		// Handle this is an OS-specific way
		if err := handleTarTypeBlockCharFifo(hdr, path); err != nil {
			return err
		}

	case tar.TypeLink:
		targetPath, err := hardlinkRootPath(extractDir, hdr.Linkname)
		if err != nil {
			return err
		}

		if err := link(targetPath, path); err != nil {
			return err
		}

	case tar.TypeSymlink:
		if err := os.Symlink(hdr.Linkname, path); err != nil {
			return err
		}

	case tar.TypeXGlobalHeader:
		log.G(ctx).Debug("PAX Global Extended Headers found and ignored")
		return nil

	default:
		return fmt.Errorf("unhandled tar header type %d", hdr.Typeflag)
	}

	if !noSameOwner {
		if err := os.Lchown(path, hdr.Uid, hdr.Gid); err != nil {
			err = fmt.Errorf("failed to Lchown %q for UID %d, GID %d: %w", path, hdr.Uid, hdr.Gid, err)
			if errors.Is(err, syscall.EINVAL) && userns.RunningInUserNS() {
				err = fmt.Errorf("%w (Hint: try increasing the number of subordinate IDs in /etc/subuid and /etc/subgid)", err)
			}
			return err
		}
	}

	for key, value := range hdr.PAXRecords {
		if strings.HasPrefix(key, paxSchilyXattr) {
			key = key[len(paxSchilyXattr):]
			if err := setxattr(path, key, value); err != nil {
				if errors.Is(err, syscall.EPERM) && strings.HasPrefix(key, userXattrPrefix) {
					// In the user.* namespace, only regular files and directories can have extended attributes.
					// See https://man7.org/linux/man-pages/man7/xattr.7.html for details.
					if fi, err := os.Lstat(path); err == nil && (!fi.Mode().IsRegular() && !fi.Mode().IsDir()) {
						log.G(ctx).WithError(err).Warnf("ignored xattr %s in archive", key)
						continue
					}
				}
				if errors.Is(err, syscall.ENOTSUP) {
					log.G(ctx).WithError(err).Warnf("ignored xattr %s in archive", key)
					continue
				}
				return fmt.Errorf("failed to setxattr %q for key %q: %w", path, key, err)
			}
		}
	}

	// call lchmod after lchown since lchown can modify the file mode
	if err := lchmod(path, hdrInfo.Mode()); err != nil {
		return err
	}

	return chtimes(path, boundTime(latestTime(hdr.AccessTime, hdr.ModTime)), boundTime(hdr.ModTime))
}

func mkparent(ctx context.Context, path, root string, parents []string) error {
	if dir, err := os.Lstat(path); err == nil {
		if dir.IsDir() {
			return nil
		}
		return &os.PathError{
			Op:   "mkparent",
			Path: path,
			Err:  syscall.ENOTDIR,
		}
	} else if !os.IsNotExist(err) {
		return err
	}

	i := len(path)
	for i > len(root) && !os.IsPathSeparator(path[i-1]) {
		i--
	}

	if i > len(root)+1 {
		if err := mkparent(ctx, path[:i-1], root, parents); err != nil {
			return err
		}
	}

	if err := mkdir(path, 0755); err != nil {
		// Check that still doesn't exist
		dir, err1 := os.Lstat(path)
		if err1 == nil && dir.IsDir() {
			return nil
		}
		return err
	}

	for _, p := range parents {
		ppath, err := fs.RootPath(p, path[len(root):])
		if err != nil {
			return err
		}

		dir, err := os.Lstat(ppath)
		if err == nil {
			if !dir.IsDir() {
				// Replaced, do not copy attributes
				break
			}
			if err := copyDirInfo(dir, path); err != nil {
				return err
			}
			return copyUpXAttrs(path, ppath)
		} else if !os.IsNotExist(err) {
			return err
		}
	}

	log.G(ctx).Debugf("parent directory %q not found: default permissions(0755) used", path)

	return nil
}

// ChangeWriter provides tar stream from filesystem change information.
// The privided tar stream is styled as an OCI layer. Change information
// (add/modify/delete/unmodified) for each file needs to be passed to this
// writer through HandleChange method.
//
// This should be used combining with continuity's diff computing functionality
// (e.g. `fs.Change` of github.com/containerd/continuity/fs).
//
// See also https://github.com/opencontainers/image-spec/blob/main/layer.md for details
// about OCI layers
type ChangeWriter struct {
	tw                *tar.Writer
	source            string
	modTimeUpperBound *time.Time
	whiteoutT         time.Time
	inodeSrc          map[uint64]string
	inodeRefs         map[uint64][]string
	addedDirs         map[string]struct{}
}

// ChangeWriterOpt can be specified in NewChangeWriter.
type ChangeWriterOpt func(cw *ChangeWriter)

// WithModTimeUpperBound sets the mod time upper bound.
func WithModTimeUpperBound(tm time.Time) ChangeWriterOpt {
	return func(cw *ChangeWriter) {
		cw.modTimeUpperBound = &tm
	}
}

// WithWhiteoutTime sets the whiteout timestamp.
func WithWhiteoutTime(tm time.Time) ChangeWriterOpt {
	return func(cw *ChangeWriter) {
		cw.whiteoutT = tm
	}
}

// NewChangeWriter returns ChangeWriter that writes tar stream of the source directory
// to the privided writer. Change information (add/modify/delete/unmodified) for each
// file needs to be passed through HandleChange method.
func NewChangeWriter(w io.Writer, source string, opts ...ChangeWriterOpt) *ChangeWriter {
	cw := &ChangeWriter{
		tw:        tar.NewWriter(w),
		source:    source,
		whiteoutT: time.Now(), // can be overridden with WithWhiteoutTime(time.Time) ChangeWriterOpt .
		inodeSrc:  map[uint64]string{},
		inodeRefs: map[uint64][]string{},
		addedDirs: map[string]struct{}{},
	}
	for _, o := range opts {
		o(cw)
	}
	return cw
}

// HandleChange receives filesystem change information and reflect that information to
// the result tar stream. This function implements `fs.ChangeFunc` of continuity
// (github.com/containerd/continuity/fs) and should be used with that package.
func (cw *ChangeWriter) HandleChange(k fs.ChangeKind, p string, f os.FileInfo, err error) error {
	if err != nil {
		return err
	}
	if k == fs.ChangeKindDelete {
		whiteOutDir := filepath.Dir(p)
		whiteOutBase := filepath.Base(p)
		whiteOut := filepath.Join(whiteOutDir, whiteoutPrefix+whiteOutBase)
		hdr := &tar.Header{
			Typeflag:   tar.TypeReg,
			Name:       whiteOut[1:],
			Size:       0,
			ModTime:    cw.whiteoutT,
			AccessTime: cw.whiteoutT,
			ChangeTime: cw.whiteoutT,
		}
		if err := cw.includeParents(hdr); err != nil {
			return err
		}
		if err := cw.tw.WriteHeader(hdr); err != nil {
			return fmt.Errorf("failed to write whiteout header: %w", err)
		}
	} else {
		var (
			link   string
			err    error
			source = filepath.Join(cw.source, p)
		)

		switch {
		case f.Mode()&os.ModeSocket != 0:
			return nil // ignore sockets
		case f.Mode()&os.ModeSymlink != 0:
			if link, err = os.Readlink(source); err != nil {
				return err
			}
		}

		// Use FileInfoHeaderNoLookups to avoid propagating user names and group names from the host
		hdr, err := tarheader.FileInfoHeaderNoLookups(f, link)
		if err != nil {
			return err
		}

		hdr.Mode = int64(chmodTarEntry(os.FileMode(hdr.Mode)))

		// truncate timestamp for compatibility. without PAX stdlib rounds timestamps instead
		hdr.Format = tar.FormatPAX
		if cw.modTimeUpperBound != nil && hdr.ModTime.After(*cw.modTimeUpperBound) {
			hdr.ModTime = *cw.modTimeUpperBound
		}
		hdr.ModTime = hdr.ModTime.Truncate(time.Second)
		hdr.AccessTime = time.Time{}
		hdr.ChangeTime = time.Time{}

		name := p
		if strings.HasPrefix(name, string(filepath.Separator)) {
			name, err = filepath.Rel(string(filepath.Separator), name)
			if err != nil {
				return fmt.Errorf("failed to make path relative: %w", err)
			}
		}
		// Canonicalize to POSIX-style paths using forward slashes. Directory
		// entries must end with a slash.
		name = filepath.ToSlash(name)
		if f.IsDir() && !strings.HasSuffix(name, "/") {
			name += "/"
		}
		hdr.Name = name

		if err := setHeaderForSpecialDevice(hdr, name, f); err != nil {
			return fmt.Errorf("failed to set device headers: %w", err)
		}

		// additionalLinks stores file names which must be linked to
		// this file when this file is added
		var additionalLinks []string
		inode, isHardlink := fs.GetLinkInfo(f)
		if isHardlink {
			// If the inode has a source, always link to it
			if source, ok := cw.inodeSrc[inode]; ok {
				hdr.Typeflag = tar.TypeLink
				hdr.Linkname = source
				hdr.Size = 0
			} else {
				if k == fs.ChangeKindUnmodified {
					cw.inodeRefs[inode] = append(cw.inodeRefs[inode], name)
					return nil
				}
				cw.inodeSrc[inode] = name
				additionalLinks = cw.inodeRefs[inode]
				delete(cw.inodeRefs, inode)
			}
		} else if k == fs.ChangeKindUnmodified {
			// Nothing to write to diff
			return nil
		}

		if capability, err := getxattr(source, "security.capability"); err != nil {
			return fmt.Errorf("failed to get capabilities xattr: %w", err)
		} else if len(capability) > 0 {
			if hdr.PAXRecords == nil {
				hdr.PAXRecords = map[string]string{}
			}
			hdr.PAXRecords[paxSchilyXattr+"security.capability"] = string(capability)
		}

		if err := cw.includeParents(hdr); err != nil {
			return err
		}
		if err := cw.tw.WriteHeader(hdr); err != nil {
			return fmt.Errorf("failed to write file header: %w", err)
		}

		if hdr.Typeflag == tar.TypeReg && hdr.Size > 0 {
			file, err := open(source)
			if err != nil {
				return fmt.Errorf("failed to open path: %v: %w", source, err)
			}
			defer file.Close()

			n, err := copyBuffered(context.TODO(), cw.tw, file)
			if err != nil {
				return fmt.Errorf("failed to copy: %w", err)
			}
			if n != hdr.Size {
				return errors.New("short write copying file")
			}
		}

		if additionalLinks != nil {
			source = hdr.Name
			for _, extra := range additionalLinks {
				hdr.Name = extra
				hdr.Typeflag = tar.TypeLink
				hdr.Linkname = source
				hdr.Size = 0

				if err := cw.includeParents(hdr); err != nil {
					return err
				}
				if err := cw.tw.WriteHeader(hdr); err != nil {
					return fmt.Errorf("failed to write file header: %w", err)
				}
			}
		}
	}
	return nil
}

// Close closes this writer.
func (cw *ChangeWriter) Close() error {
	if err := cw.tw.Close(); err != nil {
		return fmt.Errorf("failed to close tar writer: %w", err)
	}
	return nil
}

func (cw *ChangeWriter) includeParents(hdr *tar.Header) error {
	if cw.addedDirs == nil {
		return nil
	}
	name := strings.TrimRight(hdr.Name, "/")
	fname := filepath.Join(cw.source, name)
	parent := filepath.Dir(name)
	pname := filepath.Join(cw.source, parent)

	// Do not include root directory as parent
	if fname != cw.source && pname != cw.source {
		_, ok := cw.addedDirs[parent]
		if !ok {
			cw.addedDirs[parent] = struct{}{}
			fi, err := os.Stat(pname)
			if err != nil {
				return err
			}
			if err := cw.HandleChange(fs.ChangeKindModify, parent, fi, nil); err != nil {
				return err
			}
		}
	}
	if hdr.Typeflag == tar.TypeDir {
		cw.addedDirs[name] = struct{}{}
	}
	return nil
}

func copyBuffered(ctx context.Context, dst io.Writer, src io.Reader) (written int64, err error) {
	buf := bufPool.Get().(*[]byte)
	defer bufPool.Put(buf)

	for {
		select {
		case <-ctx.Done():
			err = ctx.Err()
			return
		default:
		}

		nr, er := src.Read(*buf)
		if nr > 0 {
			nw, ew := dst.Write((*buf)[0:nr])
			if nw > 0 {
				written += int64(nw)
			}
			if ew != nil {
				err = ew
				break
			}
			if nr != nw {
				err = io.ErrShortWrite
				break
			}
		}
		if er != nil {
			if er != io.EOF {
				err = er
			}
			break
		}
	}
	return written, err

}

// hardlinkRootPath returns target linkname, evaluating and bounding any
// symlink to the parent directory.
//
// NOTE: Allow hardlink to the softlink, not the real one. For example,
//
//	touch /tmp/zzz
//	ln -s /tmp/zzz /tmp/xxx
//	ln /tmp/xxx /tmp/yyy
//
// /tmp/yyy should be softlink which be same of /tmp/xxx, not /tmp/zzz.
func hardlinkRootPath(root, linkname string) (string, error) {
	ppath, base := filepath.Split(linkname)
	ppath, err := fs.RootPath(root, ppath)
	if err != nil {
		return "", err
	}

	targetPath := filepath.Join(ppath, base)
	if !strings.HasPrefix(targetPath, root) {
		targetPath = root
	}
	return targetPath, nil
}

func validateWhiteout(path string) error {
	base := filepath.Base(path)
	dir := filepath.Dir(path)

	if base == whiteoutOpaqueDir {
		return nil
	}

	if strings.HasPrefix(base, whiteoutPrefix) {
		originalBase := base[len(whiteoutPrefix):]
		originalPath := filepath.Join(dir, originalBase)

		// Ensure originalPath is under dir
		if dir[len(dir)-1] != filepath.Separator {
			dir += string(filepath.Separator)
		}
		if !strings.HasPrefix(originalPath, dir) {
			return fmt.Errorf("invalid whiteout name: %v: %w", base, errInvalidArchive)
		}
	}
	return nil
}
070701000002A8000081A4000000000000000000000001645E367C0000055D000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/archive/tar_freebsd.go    /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package archive

import (
	"os"

	"golang.org/x/sys/unix"
)

// mknod wraps unix.Mknod.  FreeBSD's unix.Mknod signature is different from
// other Unix and Unix-like operating systems.
func mknod(path string, mode uint32, dev uint64) error {
	return unix.Mknod(path, mode, dev)
}

// lsetxattrCreate wraps unix.Lsetxattr with FreeBSD-specific flags and errors
func lsetxattrCreate(link string, attr string, data []byte) error {
	err := unix.Lsetxattr(link, attr, data, 0)
	if err == unix.ENOTSUP || err == unix.EEXIST {
		return nil
	}
	return err
}

func lchmod(path string, mode os.FileMode) error {
	err := unix.Fchmodat(unix.AT_FDCWD, path, uint32(mode), unix.AT_SYMLINK_NOFOLLOW)
	if err != nil {
		err = &os.PathError{Op: "lchmod", Path: path, Err: err}
	}
	return err
}
   070701000002A9000081A4000000000000000000000001645E367C000005E1000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/archive/tar_mostunix.go   //go:build !windows && !freebsd

/*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package archive

import (
	"os"

	"golang.org/x/sys/unix"
)

// mknod wraps Unix.Mknod and casts dev to int
func mknod(path string, mode uint32, dev uint64) error {
	return unix.Mknod(path, mode, int(dev))
}

// lsetxattrCreate wraps unix.Lsetxattr, passes the unix.XATTR_CREATE flag on
// supported operating systems,and ignores appropriate errors
func lsetxattrCreate(link string, attr string, data []byte) error {
	err := unix.Lsetxattr(link, attr, data, unix.XATTR_CREATE)
	if err == unix.ENOTSUP || err == unix.ENODATA || err == unix.EEXIST {
		return nil
	}
	return err
}

// lchmod checks for symlink and changes the mode if not a symlink
func lchmod(path string, mode os.FileMode) error {
	fi, err := os.Lstat(path)
	if err != nil {
		return err
	}

	if fi.Mode()&os.ModeSymlink == 0 {
		if err := os.Chmod(path, mode); err != nil {
			return err
		}
	}
	return nil
}
   070701000002AA000081A4000000000000000000000001645E367C00000E70000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/archive/tar_opts.go   /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package archive

import (
	"archive/tar"
	"context"
	"io"
	"time"
)

// ApplyOptions provides additional options for an Apply operation
type ApplyOptions struct {
	Filter          Filter          // Filter tar headers
	ConvertWhiteout ConvertWhiteout // Convert whiteout files
	Parents         []string        // Parent directories to handle inherited attributes without CoW
	NoSameOwner     bool            // NoSameOwner will not attempt to preserve the owner specified in the tar archive.

	applyFunc func(context.Context, string, io.Reader, ApplyOptions) (int64, error)
}

// ApplyOpt allows setting mutable archive apply properties on creation
type ApplyOpt func(options *ApplyOptions) error

// Filter specific files from the archive
type Filter func(*tar.Header) (bool, error)

// ConvertWhiteout converts whiteout files from the archive
type ConvertWhiteout func(*tar.Header, string) (bool, error)

// all allows all files
func all(_ *tar.Header) (bool, error) {
	return true, nil
}

// WithFilter uses the filter to select which files are to be extracted.
func WithFilter(f Filter) ApplyOpt {
	return func(options *ApplyOptions) error {
		options.Filter = f
		return nil
	}
}

// WithConvertWhiteout uses the convert function to convert the whiteout files.
func WithConvertWhiteout(c ConvertWhiteout) ApplyOpt {
	return func(options *ApplyOptions) error {
		options.ConvertWhiteout = c
		return nil
	}
}

// WithNoSameOwner is same as '--no-same-owner` in 'tar' command.
// It'll skip attempt to preserve the owner specified in the tar archive.
func WithNoSameOwner() ApplyOpt {
	return func(options *ApplyOptions) error {
		options.NoSameOwner = true
		return nil
	}
}

// WithParents provides parent directories for resolving inherited attributes
// directory from the filesystem.
// Inherited attributes are searched from first to last, making the first
// element in the list the most immediate parent directory.
// NOTE: When applying to a filesystem which supports CoW, file attributes
// should be inherited by the filesystem.
func WithParents(p []string) ApplyOpt {
	return func(options *ApplyOptions) error {
		options.Parents = p
		return nil
	}
}

// WriteDiffOptions provides additional options for a WriteDiff operation
type WriteDiffOptions struct {
	ParentLayers []string // Windows needs the full list of parent layers

	writeDiffFunc func(context.Context, io.Writer, string, string, WriteDiffOptions) error

	// SourceDateEpoch specifies the following timestamps to provide control for reproducibility.
	//   - The upper bound timestamp of the diff contents
	//   - The timestamp of the whiteouts
	//
	// See also https://reproducible-builds.org/docs/source-date-epoch/ .
	SourceDateEpoch *time.Time
}

// WriteDiffOpt allows setting mutable archive write properties on creation
type WriteDiffOpt func(options *WriteDiffOptions) error

// WithSourceDateEpoch specifies the SOURCE_DATE_EPOCH without touching the env vars.
func WithSourceDateEpoch(tm *time.Time) WriteDiffOpt {
	return func(options *WriteDiffOptions) error {
		options.SourceDateEpoch = tm
		return nil
	}
}
070701000002AB000081A4000000000000000000000001645E367C000006A4000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/archive/tar_opts_linux.go /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package archive

import (
	"archive/tar"
	"os"
	"path/filepath"
	"strings"

	"golang.org/x/sys/unix"
)

// AufsConvertWhiteout converts whiteout files for aufs.
func AufsConvertWhiteout(_ *tar.Header, _ string) (bool, error) {
	return true, nil
}

// OverlayConvertWhiteout converts whiteout files for overlay.
func OverlayConvertWhiteout(hdr *tar.Header, path string) (bool, error) {
	base := filepath.Base(path)
	dir := filepath.Dir(path)

	// if a directory is marked as opaque, we need to translate that to overlay
	if base == whiteoutOpaqueDir {
		// don't write the file itself
		return false, unix.Setxattr(dir, "trusted.overlay.opaque", []byte{'y'}, 0)
	}

	// if a file was deleted and we are using overlay, we need to create a character device
	if strings.HasPrefix(base, whiteoutPrefix) {
		originalBase := base[len(whiteoutPrefix):]
		originalPath := filepath.Join(dir, originalBase)

		if err := unix.Mknod(originalPath, unix.S_IFCHR, 0); err != nil {
			return false, err
		}
		// don't write the file itself
		return false, os.Chown(originalPath, hdr.Uid, hdr.Gid)
	}

	return true, nil
}
070701000002AC000081A4000000000000000000000001645E367C00000A2A000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/archive/tar_opts_windows.go   /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package archive

import (
	"context"
	"io"

	"github.com/Microsoft/hcsshim/pkg/ociwclayer"
)

// applyWindowsLayer applies a tar stream of an OCI style diff tar of a Windows layer
// See https://github.com/opencontainers/image-spec/blob/main/layer.md#applying-changesets
func applyWindowsLayer(ctx context.Context, root string, r io.Reader, options ApplyOptions) (size int64, err error) {
	return ociwclayer.ImportLayerFromTar(ctx, r, root, options.Parents)
}

// AsWindowsContainerLayer indicates that the tar stream to apply is that of
// a Windows Container Layer. The caller must be holding SeBackupPrivilege and
// SeRestorePrivilege.
func AsWindowsContainerLayer() ApplyOpt {
	return func(options *ApplyOptions) error {
		options.applyFunc = applyWindowsLayer
		return nil
	}
}

// writeDiffWindowsLayers writes a tar stream of the computed difference between the
// provided Windows layers
//
// Produces a tar using OCI style file markers for deletions. Deleted
// files will be prepended with the prefix ".wh.". This style is
// based off AUFS whiteouts.
// See https://github.com/opencontainers/image-spec/blob/main/layer.md
func writeDiffWindowsLayers(ctx context.Context, w io.Writer, _, layer string, options WriteDiffOptions) error {
	return ociwclayer.ExportLayerToTar(ctx, w, layer, options.ParentLayers)
}

// AsWindowsContainerLayerPair indicates that the paths to diff are a pair of
// Windows Container Layers. The caller must be holding SeBackupPrivilege.
func AsWindowsContainerLayerPair() WriteDiffOpt {
	return func(options *WriteDiffOptions) error {
		options.writeDiffFunc = writeDiffWindowsLayers
		return nil
	}
}

// WithParentLayers provides the Windows Container Layers that are the parents
// of the target (right-hand, "upper") layer, if any. The source (left-hand, "lower")
// layer passed to WriteDiff should be "" in this case.
func WithParentLayers(p []string) WriteDiffOpt {
	return func(options *WriteDiffOptions) error {
		options.ParentLayers = p
		return nil
	}
}
  070701000002AD000081A4000000000000000000000001645E367C000016CD000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/archive/tar_unix.go   //go:build !windows

/*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package archive

import (
	"archive/tar"
	"errors"
	"fmt"
	"os"
	"runtime"
	"strings"
	"syscall"

	"github.com/containerd/containerd/pkg/userns"
	"github.com/containerd/continuity/fs"
	"github.com/containerd/continuity/sysx"
	"golang.org/x/sys/unix"
)

func chmodTarEntry(perm os.FileMode) os.FileMode {
	return perm
}

func setHeaderForSpecialDevice(hdr *tar.Header, name string, fi os.FileInfo) error {
	// Devmajor and Devminor are only needed for special devices.

	// In FreeBSD, RDev for regular files is -1 (unless overridden by FS):
	// https://cgit.freebsd.org/src/tree/sys/kern/vfs_default.c?h=stable/13#n1531
	// (NODEV is -1: https://cgit.freebsd.org/src/tree/sys/sys/param.h?h=stable/13#n241).

	// ZFS in particular does not override the default:
	// https://cgit.freebsd.org/src/tree/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vnops_os.c?h=stable/13#n2027

	// Since `Stat_t.Rdev` is uint64, the cast turns -1 into (2^64 - 1).
	// Such large values cannot be encoded in a tar header.
	if runtime.GOOS == "freebsd" && hdr.Typeflag != tar.TypeBlock && hdr.Typeflag != tar.TypeChar {
		return nil
	}
	s, ok := fi.Sys().(*syscall.Stat_t)
	if !ok {
		return errors.New("unsupported stat type")
	}

	rdev := uint64(s.Rdev) //nolint:nolintlint,unconvert // rdev is int32 on darwin/bsd, int64 on linux/solaris

	// Currently go does not fill in the major/minors
	if s.Mode&syscall.S_IFBLK != 0 ||
		s.Mode&syscall.S_IFCHR != 0 {
		hdr.Devmajor = int64(unix.Major(rdev))
		hdr.Devminor = int64(unix.Minor(rdev))
	}

	return nil
}

func open(p string) (*os.File, error) {
	return os.Open(p)
}

func openFile(name string, flag int, perm os.FileMode) (*os.File, error) {
	f, err := os.OpenFile(name, flag, perm)
	if err != nil {
		return nil, err
	}
	// Call chmod to avoid permission mask
	if err := os.Chmod(name, perm); err != nil {
		f.Close()
		return nil, err
	}
	return f, err
}

func mkdir(path string, perm os.FileMode) error {
	if err := os.Mkdir(path, perm); err != nil {
		return err
	}
	// Only final created directory gets explicit permission
	// call to avoid permission mask
	return os.Chmod(path, perm)
}

func skipFile(hdr *tar.Header) bool {
	switch hdr.Typeflag {
	case tar.TypeBlock, tar.TypeChar:
		// cannot create a device if running in user namespace
		return userns.RunningInUserNS()
	default:
		return false
	}
}

// handleTarTypeBlockCharFifo is an OS-specific helper function used by
// createTarFile to handle the following types of header: Block; Char; Fifo.
// This function must not be called for Block and Char when running in userns.
// (skipFile() should return true for them.)
func handleTarTypeBlockCharFifo(hdr *tar.Header, path string) error {
	mode := uint32(hdr.Mode & 07777)
	switch hdr.Typeflag {
	case tar.TypeBlock:
		mode |= unix.S_IFBLK
	case tar.TypeChar:
		mode |= unix.S_IFCHR
	case tar.TypeFifo:
		mode |= unix.S_IFIFO
	}

	return mknod(path, mode, unix.Mkdev(uint32(hdr.Devmajor), uint32(hdr.Devminor)))
}

func getxattr(path, attr string) ([]byte, error) {
	b, err := sysx.LGetxattr(path, attr)
	if err == unix.ENOTSUP || err == sysx.ENODATA {
		return nil, nil
	}
	return b, err
}

func setxattr(path, key, value string) error {
	// Do not set trusted attributes
	if strings.HasPrefix(key, "trusted.") {
		return fmt.Errorf("admin attributes from archive not supported: %w", unix.ENOTSUP)
	}
	return unix.Lsetxattr(path, key, []byte(value), 0)
}

func copyDirInfo(fi os.FileInfo, path string) error {
	st := fi.Sys().(*syscall.Stat_t)
	if err := os.Lchown(path, int(st.Uid), int(st.Gid)); err != nil {
		if os.IsPermission(err) {
			// Normally if uid/gid are the same this would be a no-op, but some
			// filesystems may still return EPERM... for instance NFS does this.
			// In such a case, this is not an error.
			if dstStat, err2 := os.Lstat(path); err2 == nil {
				st2 := dstStat.Sys().(*syscall.Stat_t)
				if st.Uid == st2.Uid && st.Gid == st2.Gid {
					err = nil
				}
			}
		}
		if err != nil {
			return fmt.Errorf("failed to chown %s: %w", path, err)
		}
	}

	if err := os.Chmod(path, fi.Mode()); err != nil {
		return fmt.Errorf("failed to chmod %s: %w", path, err)
	}

	timespec := []unix.Timespec{
		unix.NsecToTimespec(syscall.TimespecToNsec(fs.StatAtime(st))),
		unix.NsecToTimespec(syscall.TimespecToNsec(fs.StatMtime(st))),
	}
	if err := unix.UtimesNanoAt(unix.AT_FDCWD, path, timespec, unix.AT_SYMLINK_NOFOLLOW); err != nil {
		return fmt.Errorf("failed to utime %s: %w", path, err)
	}

	return nil
}

func copyUpXAttrs(dst, src string) error {
	xattrKeys, err := sysx.LListxattr(src)
	if err != nil {
		if err == unix.ENOTSUP || err == sysx.ENODATA {
			return nil
		}
		return fmt.Errorf("failed to list xattrs on %s: %w", src, err)
	}
	for _, xattr := range xattrKeys {
		// Do not copy up trusted attributes
		if strings.HasPrefix(xattr, "trusted.") {
			continue
		}
		data, err := sysx.LGetxattr(src, xattr)
		if err != nil {
			if err == unix.ENOTSUP || err == sysx.ENODATA {
				continue
			}
			return fmt.Errorf("failed to get xattr %q on %s: %w", xattr, src, err)
		}
		if err := lsetxattrCreate(dst, xattr, data); err != nil {
			return fmt.Errorf("failed to set xattr %q on %s: %w", xattr, dst, err)
		}
	}

	return nil
}
   070701000002AE000081A4000000000000000000000001645E367C00000D56000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/archive/tar_windows.go    /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package archive

import (
	"archive/tar"
	"errors"
	"fmt"
	"os"
	"strings"

	"github.com/moby/sys/sequential"
)

// chmodTarEntry is used to adjust the file permissions used in tar header based
// on the platform the archival is done.
func chmodTarEntry(perm os.FileMode) os.FileMode {
	perm &= 0755
	// Add the x bit: make everything +x from windows
	perm |= 0111

	return perm
}

func setHeaderForSpecialDevice(*tar.Header, string, os.FileInfo) error {
	// do nothing. no notion of Rdev, Inode, Nlink in stat on Windows
	return nil
}

func open(p string) (*os.File, error) {
	// We use sequential file access to avoid depleting the standby list on
	// Windows.
	return sequential.Open(p)
}

func openFile(name string, flag int, perm os.FileMode) (*os.File, error) {
	// Source is regular file. We use sequential file access to avoid depleting
	// the standby list on Windows.
	return sequential.OpenFile(name, flag, perm)
}

func mkdir(path string, perm os.FileMode) error {
	return os.Mkdir(path, perm)
}

func skipFile(hdr *tar.Header) bool {
	// Windows does not support filenames with colons in them. Ignore
	// these files. This is not a problem though (although it might
	// appear that it is). Let's suppose a client is running docker pull.
	// The daemon it points to is Windows. Would it make sense for the
	// client to be doing a docker pull Ubuntu for example (which has files
	// with colons in the name under /usr/share/man/man3)? No, absolutely
	// not as it would really only make sense that they were pulling a
	// Windows image. However, for development, it is necessary to be able
	// to pull Linux images which are in the repository.
	//
	// TODO Windows. Once the registry is aware of what images are Windows-
	// specific or Linux-specific, this warning should be changed to an error
	// to cater for the situation where someone does manage to upload a Linux
	// image but have it tagged as Windows inadvertently.
	return strings.Contains(hdr.Name, ":")
}

// handleTarTypeBlockCharFifo is an OS-specific helper function used by
// createTarFile to handle the following types of header: Block; Char; Fifo
func handleTarTypeBlockCharFifo(hdr *tar.Header, path string) error {
	return nil
}

func lchmod(path string, mode os.FileMode) error {
	return nil
}

func getxattr(path, attr string) ([]byte, error) {
	return nil, nil
}

func setxattr(path, key, value string) error {
	// Return not support error, do not wrap underlying not supported
	// since xattrs should not exist in windows diff archives
	return errors.New("xattrs not supported on Windows")
}

func copyDirInfo(fi os.FileInfo, path string) error {
	if err := os.Chmod(path, fi.Mode()); err != nil {
		return fmt.Errorf("failed to chmod %s: %w", path, err)
	}
	return nil
}

func copyUpXAttrs(dst, src string) error {
	return nil
}
  070701000002AF000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/archive/tarheader 070701000002B0000081A4000000000000000000000001645E367C00000BF5000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/archive/tarheader/tarheader.go    /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

/*
   Portions from https://github.com/moby/moby/blob/v23.0.1/pkg/archive/archive.go#L419-L464
   Copyright (C) Docker/Moby authors.
   Licensed under the Apache License, Version 2.0
   NOTICE: https://github.com/moby/moby/blob/v23.0.1/NOTICE
*/

package tarheader

import (
	"archive/tar"
	"os"
)

// nosysFileInfo hides the system-dependent info of the wrapped FileInfo to
// prevent tar.FileInfoHeader from introspecting it and potentially calling into
// glibc.
//
// From https://github.com/moby/moby/blob/v23.0.1/pkg/archive/archive.go#L419-L434 .
type nosysFileInfo struct {
	os.FileInfo
}

func (fi nosysFileInfo) Sys() interface{} {
	// A Sys value of type *tar.Header is safe as it is system-independent.
	// The tar.FileInfoHeader function copies the fields into the returned
	// header without performing any OS lookups.
	if sys, ok := fi.FileInfo.Sys().(*tar.Header); ok {
		return sys
	}
	return nil
}

// sysStat, if non-nil, populates hdr from system-dependent fields of fi.
//
// From https://github.com/moby/moby/blob/v23.0.1/pkg/archive/archive.go#L436-L437 .
var sysStat func(fi os.FileInfo, hdr *tar.Header) error

// FileInfoHeaderNoLookups creates a partially-populated tar.Header from fi.
//
// Compared to the archive/tar.FileInfoHeader function, this function is safe to
// call from a chrooted process as it does not populate fields which would
// require operating system lookups. It behaves identically to
// tar.FileInfoHeader when fi is a FileInfo value returned from
// tar.Header.FileInfo().
//
// When fi is a FileInfo for a native file, such as returned from os.Stat() and
// os.Lstat(), the returned Header value differs from one returned from
// tar.FileInfoHeader in the following ways. The Uname and Gname fields are not
// set as OS lookups would be required to populate them. The AccessTime and
// ChangeTime fields are not currently set (not yet implemented) although that
// is subject to change. Callers which require the AccessTime or ChangeTime
// fields to be zeroed should explicitly zero them out in the returned Header
// value to avoid any compatibility issues in the future.
//
// From https://github.com/moby/moby/blob/v23.0.1/pkg/archive/archive.go#L439-L464 .
func FileInfoHeaderNoLookups(fi os.FileInfo, link string) (*tar.Header, error) {
	hdr, err := tar.FileInfoHeader(nosysFileInfo{fi}, link)
	if err != nil {
		return nil, err
	}
	if sysStat != nil {
		return hdr, sysStat(fi, hdr)
	}
	return hdr, nil
}
   070701000002B1000081A4000000000000000000000001645E367C000005F3000000000000000000000000000000000000006000000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/archive/tarheader/tarheader_unix.go   //go:build !windows

/*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

/*
   Portions from https://github.com/moby/moby/blob/v23.0.1/pkg/archive/archive_unix.go#L52-L70
   Copyright (C) Docker/Moby authors.
   Licensed under the Apache License, Version 2.0
   NOTICE: https://github.com/moby/moby/blob/v23.0.1/NOTICE
*/

package tarheader

import (
	"archive/tar"
	"os"
	"syscall"

	"golang.org/x/sys/unix"
)

func init() {
	sysStat = statUnix
}

// statUnix populates hdr from system-dependent fields of fi without performing
// any OS lookups.
// From https://github.com/moby/moby/blob/v23.0.1/pkg/archive/archive_unix.go#L52-L70
func statUnix(fi os.FileInfo, hdr *tar.Header) error {
	s, ok := fi.Sys().(*syscall.Stat_t)
	if !ok {
		return nil
	}

	hdr.Uid = int(s.Uid)
	hdr.Gid = int(s.Gid)

	if s.Mode&unix.S_IFBLK != 0 ||
		s.Mode&unix.S_IFCHR != 0 {
		hdr.Devmajor = int64(unix.Major(uint64(s.Rdev)))
		hdr.Devminor = int64(unix.Minor(uint64(s.Rdev)))
	}

	return nil
}
 070701000002B2000081A4000000000000000000000001645E367C00000498000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/archive/time.go   /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package archive

import (
	"syscall"
	"time"
	"unsafe"
)

var (
	minTime = time.Unix(0, 0)
	maxTime time.Time
)

func init() {
	if unsafe.Sizeof(syscall.Timespec{}.Nsec) == 8 {
		// This is a 64 bit timespec
		// os.Chtimes limits time to the following
		maxTime = time.Unix(0, 1<<63-1)
	} else {
		// This is a 32 bit timespec
		maxTime = time.Unix(1<<31-1, 0)
	}
}

func boundTime(t time.Time) time.Time {
	if t.Before(minTime) || t.After(maxTime) {
		return minTime
	}

	return t
}

func latestTime(t1, t2 time.Time) time.Time {
	if t1.Before(t2) {
		return t2
	}
	return t1
}
070701000002B3000081A4000000000000000000000001645E367C0000042E000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/archive/time_unix.go  //go:build !windows

/*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package archive

import (
	"fmt"
	"time"

	"golang.org/x/sys/unix"
)

func chtimes(path string, atime, mtime time.Time) error {
	var utimes [2]unix.Timespec
	utimes[0] = unix.NsecToTimespec(atime.UnixNano())
	utimes[1] = unix.NsecToTimespec(mtime.UnixNano())

	if err := unix.UtimesNanoAt(unix.AT_FDCWD, path, utimes[0:], unix.AT_SYMLINK_NOFOLLOW); err != nil {
		return fmt.Errorf("failed call to UtimesNanoAt for %s: %w", path, err)
	}

	return nil
}
  070701000002B4000081A4000000000000000000000001645E367C000004F3000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/archive/time_windows.go   /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package archive

import (
	"time"

	"golang.org/x/sys/windows"
)

// chtimes will set the create time on a file using the given modtime.
// This requires calling SetFileTime and explicitly including the create time.
func chtimes(path string, atime, mtime time.Time) error {
	pathp, err := windows.UTF16PtrFromString(path)
	if err != nil {
		return err
	}
	h, err := windows.CreateFile(pathp,
		windows.FILE_WRITE_ATTRIBUTES, windows.FILE_SHARE_WRITE, nil,
		windows.OPEN_EXISTING, windows.FILE_FLAG_BACKUP_SEMANTICS, 0)
	if err != nil {
		return err
	}
	defer windows.Close(h)
	c := windows.NsecToFiletime(mtime.UnixNano())
	return windows.SetFileTime(h, &c, nil, nil)
}
 070701000002B5000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/log   070701000002B6000081A4000000000000000000000001645E367C000007AD000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/log/context.go    /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package log

import (
	"context"

	"github.com/sirupsen/logrus"
)

var (
	// G is an alias for GetLogger.
	//
	// We may want to define this locally to a package to get package tagged log
	// messages.
	G = GetLogger

	// L is an alias for the standard logger.
	L = logrus.NewEntry(logrus.StandardLogger())
)

type (
	loggerKey struct{}

	// Fields type to pass to `WithFields`, alias from `logrus`.
	Fields = logrus.Fields
)

const (
	// RFC3339NanoFixed is time.RFC3339Nano with nanoseconds padded using zeros to
	// ensure the formatted time is always the same number of characters.
	RFC3339NanoFixed = "2006-01-02T15:04:05.000000000Z07:00"

	// TextFormat represents the text logging format
	TextFormat = "text"

	// JSONFormat represents the JSON logging format
	JSONFormat = "json"
)

// WithLogger returns a new context with the provided logger. Use in
// combination with logger.WithField(s) for great effect.
func WithLogger(ctx context.Context, logger *logrus.Entry) context.Context {
	e := logger.WithContext(ctx)
	return context.WithValue(ctx, loggerKey{}, e)
}

// GetLogger retrieves the current logger from the context. If no logger is
// available, the default logger is returned.
func GetLogger(ctx context.Context) *logrus.Entry {
	logger := ctx.Value(loggerKey{})

	if logger == nil {
		return L.WithContext(ctx)
	}

	return logger.(*logrus.Entry)
}
   070701000002B7000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/pkg   070701000002B8000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/pkg/epoch 070701000002B9000081A4000000000000000000000001645E367C0000046C000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/pkg/epoch/context.go  /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package epoch

import (
	"context"
	"time"
)

type (
	epochKey struct{}
)

// WithSourceDateEpoch associates the context with the epoch.
func WithSourceDateEpoch(ctx context.Context, tm *time.Time) context.Context {
	return context.WithValue(ctx, epochKey{}, tm)
}

// FromContext returns the epoch associated with the context.
// FromContext does not fall back to read the SOURCE_DATE_EPOCH env var.
func FromContext(ctx context.Context) *time.Time {
	v := ctx.Value(epochKey{})
	if v == nil {
		return nil
	}
	return v.(*time.Time)
}
070701000002BA000081A4000000000000000000000001645E367C000007E6000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/pkg/epoch/epoch.go    /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

// Package epoch provides SOURCE_DATE_EPOCH utilities.
package epoch

import (
	"fmt"
	"os"
	"strconv"
	"time"

	"github.com/sirupsen/logrus"
)

// SourceDateEpochEnv is the SOURCE_DATE_EPOCH env var.
// See https://reproducible-builds.org/docs/source-date-epoch/
const SourceDateEpochEnv = "SOURCE_DATE_EPOCH"

// SourceDateEpoch returns the SOURCE_DATE_EPOCH env var as *time.Time.
// If the env var is not set, SourceDateEpoch returns nil without an error.
func SourceDateEpoch() (*time.Time, error) {
	v, ok := os.LookupEnv(SourceDateEpochEnv)
	if !ok || v == "" {
		return nil, nil // not an error
	}
	i64, err := strconv.ParseInt(v, 10, 64)
	if err != nil {
		return nil, fmt.Errorf("invalid %s value %q: %w", SourceDateEpochEnv, v, err)
	}
	unix := time.Unix(i64, 0).UTC()
	return &unix, nil
}

// SourceDateEpochOrNow returns the SOURCE_DATE_EPOCH time if available,
// otherwise returns the current time.
func SourceDateEpochOrNow() time.Time {
	epoch, err := SourceDateEpoch()
	if err != nil {
		logrus.WithError(err).Warnf("Invalid %s", SourceDateEpochEnv)
	}
	if epoch != nil {
		return *epoch
	}
	return time.Now().UTC()
}

// SetSourceDateEpoch sets the SOURCE_DATE_EPOCH env var.
func SetSourceDateEpoch(tm time.Time) {
	os.Setenv(SourceDateEpochEnv, fmt.Sprintf("%d", tm.Unix()))
}

// UnsetSourceDateEpoch unsets the SOURCE_DATE_EPOCH env var.
func UnsetSourceDateEpoch() {
	os.Unsetenv(SourceDateEpochEnv)
}
  070701000002BB000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/pkg/userns    070701000002BC000081A4000000000000000000000001645E367C000005BE000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/pkg/userns/userns_linux.go    /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package userns

import (
	"bufio"
	"fmt"
	"os"
	"sync"
)

var (
	inUserNS bool
	nsOnce   sync.Once
)

// RunningInUserNS detects whether we are currently running in a user namespace.
// Originally copied from github.com/lxc/lxd/shared/util.go
func RunningInUserNS() bool {
	nsOnce.Do(func() {
		file, err := os.Open("/proc/self/uid_map")
		if err != nil {
			// This kernel-provided file only exists if user namespaces are supported
			return
		}
		defer file.Close()

		buf := bufio.NewReader(file)
		l, _, err := buf.ReadLine()
		if err != nil {
			return
		}

		line := string(l)
		var a, b, c int64
		fmt.Sscanf(line, "%d %d %d", &a, &b, &c)

		/*
		 * We assume we are in the initial user namespace if we have a full
		 * range - 4294967295 uids starting at uid 0.
		 */
		if a == 0 && b == 0 && c == 4294967295 {
			return
		}
		inUserNS = true
	})
	return inUserNS
}
  070701000002BD000081A4000000000000000000000001645E367C000002F0000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/containerd/containerd/pkg/userns/userns_unsupported.go  //go:build !linux

/*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package userns

// RunningInUserNS is a stub for non-Linux systems
// Always returns false
func RunningInUserNS() bool {
	return false
}
070701000002BE000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity   070701000002BF000081A4000000000000000000000001645E367C000005C9000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/AUTHORS   Aaron Lehmann <alehmann@netflix.com>
Akash Gupta <akagup@microsoft.com>
Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
Andrew Pennebaker <apennebaker@datapipe.com>
Brandon Philips <brandon.philips@coreos.com>
Brian Goff <cpuguy83@gmail.com>
Christopher Jones <tophj@linux.vnet.ibm.com>
Daniel, Dao Quang Minh <dqminh89@gmail.com>
Darren Stahl <darst@microsoft.com>
Derek McGowan <derek@mcg.dev>
Edward Pilatowicz <edward.pilatowicz@oracle.com>
Fu Wei <fuweid89@gmail.com>
Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
Hajime Tazaki <thehajime@gmail.com>
Ian Campbell <ijc@docker.com>
Ivan Markin <sw@nogoegst.net>
Jacob Blain Christen <jacob@rancher.com>
Justin Cormack <justin.cormack@docker.com>
Justin Cummins <sul3n3t@gmail.com>
Kasper Fabæch Brandt <poizan@poizan.dk>
Kazuyoshi Kato <katokazu@amazon.com>
Kir Kolyshkin <kolyshkin@gmail.com>
Michael Crosby <crosbymichael@gmail.com>
Michael Wan <zirenwan@gmail.com>
Mike Brown <brownwm@us.ibm.com>
Niels de Vos <ndevos@redhat.com>
Phil Estes <estesp@gmail.com>
Sam Whited <sam@samwhited.com>
Samuel Karp <me@samuelkarp.com>
Sebastiaan van Stijn <github@gone.nl>
Shengjing Zhu <zhsj@debian.org>
Stephen J Day <stevvooe@gmail.com>
Tibor Vass <tibor@docker.com>
Tobias Klauser <tklauser@distanz.ch>
Tom Faulhaber <tffaulha@amazon.com>
Tonis Tiigi <tonistiigi@gmail.com>
Trevor Porter <trkporter@ucdavis.edu>
Wei Fu <fuweid89@gmail.com>
Wilbert van de Ridder <wilbert.ridder@gmail.com>
Xiaodong Ye <xiaodongy@vmware.com>
   070701000002C0000081A4000000000000000000000001645E367C00002A0D000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/LICENSE   
                                 Apache License
                           Version 2.0, January 2004
                        https://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   Copyright The containerd Authors

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       https://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
   070701000002C1000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/fs    070701000002C2000081A4000000000000000000000001645E367C00001538000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/fs/copy.go    /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package fs

import (
	"fmt"
	"io/ioutil"
	"os"
	"path/filepath"
	"sync"

	"github.com/sirupsen/logrus"
)

var bufferPool = &sync.Pool{
	New: func() interface{} {
		buffer := make([]byte, 32*1024)
		return &buffer
	},
}

// XAttrErrorHandler transform a non-nil xattr error.
// Return nil to ignore an error.
// xattrKey can be empty for listxattr operation.
type XAttrErrorHandler func(dst, src, xattrKey string, err error) error

type copyDirOpts struct {
	xeh XAttrErrorHandler
	// xex contains a set of xattrs to exclude when copying
	xex map[string]struct{}
}

type CopyDirOpt func(*copyDirOpts) error

// WithXAttrErrorHandler allows specifying XAttrErrorHandler
// If nil XAttrErrorHandler is specified (default), CopyDir stops
// on a non-nil xattr error.
func WithXAttrErrorHandler(xeh XAttrErrorHandler) CopyDirOpt {
	return func(o *copyDirOpts) error {
		o.xeh = xeh
		return nil
	}
}

// WithAllowXAttrErrors allows ignoring xattr errors.
func WithAllowXAttrErrors() CopyDirOpt {
	xeh := func(dst, src, xattrKey string, err error) error {
		return nil
	}
	return WithXAttrErrorHandler(xeh)
}

// WithXAttrExclude allows for exclusion of specified xattr during CopyDir operation.
func WithXAttrExclude(keys ...string) CopyDirOpt {
	return func(o *copyDirOpts) error {
		if o.xex == nil {
			o.xex = make(map[string]struct{}, len(keys))
		}
		for _, key := range keys {
			o.xex[key] = struct{}{}
		}
		return nil
	}
}

// CopyDir copies the directory from src to dst.
// Most efficient copy of files is attempted.
func CopyDir(dst, src string, opts ...CopyDirOpt) error {
	var o copyDirOpts
	for _, opt := range opts {
		if err := opt(&o); err != nil {
			return err
		}
	}
	inodes := map[uint64]string{}
	return copyDirectory(dst, src, inodes, &o)
}

func copyDirectory(dst, src string, inodes map[uint64]string, o *copyDirOpts) error {
	stat, err := os.Stat(src)
	if err != nil {
		return fmt.Errorf("failed to stat %s: %w", src, err)
	}
	if !stat.IsDir() {
		return fmt.Errorf("source %s is not directory", src)
	}

	if st, err := os.Stat(dst); err != nil {
		if err := os.Mkdir(dst, stat.Mode()); err != nil {
			return fmt.Errorf("failed to mkdir %s: %w", dst, err)
		}
	} else if !st.IsDir() {
		return fmt.Errorf("cannot copy to non-directory: %s", dst)
	} else {
		if err := os.Chmod(dst, stat.Mode()); err != nil {
			return fmt.Errorf("failed to chmod on %s: %w", dst, err)
		}
	}

	fis, err := ioutil.ReadDir(src)
	if err != nil {
		return fmt.Errorf("failed to read %s: %w", src, err)
	}

	if err := copyFileInfo(stat, src, dst); err != nil {
		return fmt.Errorf("failed to copy file info for %s: %w", dst, err)
	}

	if err := copyXAttrs(dst, src, o.xex, o.xeh); err != nil {
		return fmt.Errorf("failed to copy xattrs: %w", err)
	}

	for _, fi := range fis {
		source := filepath.Join(src, fi.Name())
		target := filepath.Join(dst, fi.Name())

		switch {
		case fi.IsDir():
			if err := copyDirectory(target, source, inodes, o); err != nil {
				return err
			}
			continue
		case (fi.Mode() & os.ModeType) == 0:
			link, err := getLinkSource(target, fi, inodes)
			if err != nil {
				return fmt.Errorf("failed to get hardlink: %w", err)
			}
			if link != "" {
				if err := os.Link(link, target); err != nil {
					return fmt.Errorf("failed to create hard link: %w", err)
				}
			} else if err := CopyFile(target, source); err != nil {
				return fmt.Errorf("failed to copy files: %w", err)
			}
		case (fi.Mode() & os.ModeSymlink) == os.ModeSymlink:
			link, err := os.Readlink(source)
			if err != nil {
				return fmt.Errorf("failed to read link: %s: %w", source, err)
			}
			if err := os.Symlink(link, target); err != nil {
				return fmt.Errorf("failed to create symlink: %s: %w", target, err)
			}
		case (fi.Mode() & os.ModeDevice) == os.ModeDevice,
			(fi.Mode() & os.ModeNamedPipe) == os.ModeNamedPipe,
			(fi.Mode() & os.ModeSocket) == os.ModeSocket:
			if err := copyIrregular(target, fi); err != nil {
				return fmt.Errorf("failed to create irregular file: %w", err)
			}
		default:
			logrus.Warnf("unsupported mode: %s: %s", source, fi.Mode())
			continue
		}

		if err := copyFileInfo(fi, source, target); err != nil {
			return fmt.Errorf("failed to copy file info: %w", err)
		}

		if err := copyXAttrs(target, source, o.xex, o.xeh); err != nil {
			return fmt.Errorf("failed to copy xattrs: %w", err)
		}
	}

	return nil
}

// CopyFile copies the source file to the target.
// The most efficient means of copying is used for the platform.
func CopyFile(target, source string) error {
	src, err := os.Open(source)
	if err != nil {
		return fmt.Errorf("failed to open source %s: %w", source, err)
	}
	defer src.Close()
	tgt, err := os.Create(target)
	if err != nil {
		return fmt.Errorf("failed to open target %s: %w", target, err)
	}
	defer tgt.Close()

	return copyFileContent(tgt, src)
}
070701000002C3000081A4000000000000000000000001645E367C0000042D000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/fs/copy_irregular_freebsd.go  /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package fs

import (
	"fmt"
	"os"
	"syscall"
)

// copyIrregular covers devices, pipes, and sockets
func copyIrregular(dst string, fi os.FileInfo) error {
	st, ok := fi.Sys().(*syscall.Stat_t) // not *unix.Stat_t
	if !ok {
		return fmt.Errorf("unsupported stat type: %s: %v", dst, fi.Mode())
	}
	var rDev uint64 // uint64 on FreeBSD, int on other unixen
	if fi.Mode()&os.ModeDevice == os.ModeDevice {
		rDev = st.Rdev
	}
	return syscall.Mknod(dst, uint32(st.Mode), rDev)
}
   070701000002C4000081A4000000000000000000000001645E367C00000456000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/fs/copy_irregular_unix.go //go:build !windows && !freebsd
// +build !windows,!freebsd

/*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package fs

import (
	"fmt"
	"os"
	"syscall"
)

// copyIrregular covers devices, pipes, and sockets
func copyIrregular(dst string, fi os.FileInfo) error {
	st, ok := fi.Sys().(*syscall.Stat_t) // not *unix.Stat_t
	if !ok {
		return fmt.Errorf("unsupported stat type: %s: %v", dst, fi.Mode())
	}
	var rDev int
	if fi.Mode()&os.ModeDevice == os.ModeDevice {
		rDev = int(st.Rdev)
	}
	//nolint:unconvert
	return syscall.Mknod(dst, uint32(st.Mode), rDev)
}
  070701000002C5000081A4000000000000000000000001645E367C00000EF2000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/fs/copy_linux.go  /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package fs

import (
	"fmt"
	"io"
	"os"
	"syscall"

	"github.com/containerd/continuity/sysx"
	"golang.org/x/sys/unix"
)

func copyFileInfo(fi os.FileInfo, src, name string) error {
	st := fi.Sys().(*syscall.Stat_t)
	if err := os.Lchown(name, int(st.Uid), int(st.Gid)); err != nil {
		if os.IsPermission(err) {
			// Normally if uid/gid are the same this would be a no-op, but some
			// filesystems may still return EPERM... for instance NFS does this.
			// In such a case, this is not an error.
			if dstStat, err2 := os.Lstat(name); err2 == nil {
				st2 := dstStat.Sys().(*syscall.Stat_t)
				if st.Uid == st2.Uid && st.Gid == st2.Gid {
					err = nil
				}
			}
		}
		if err != nil {
			return fmt.Errorf("failed to chown %s: %w", name, err)
		}
	}

	if (fi.Mode() & os.ModeSymlink) != os.ModeSymlink {
		if err := os.Chmod(name, fi.Mode()); err != nil {
			return fmt.Errorf("failed to chmod %s: %w", name, err)
		}
	}

	timespec := []unix.Timespec{
		unix.NsecToTimespec(syscall.TimespecToNsec(StatAtime(st))),
		unix.NsecToTimespec(syscall.TimespecToNsec(StatMtime(st))),
	}
	if err := unix.UtimesNanoAt(unix.AT_FDCWD, name, timespec, unix.AT_SYMLINK_NOFOLLOW); err != nil {
		return fmt.Errorf("failed to utime %s: %w", name, err)
	}

	return nil
}

const maxSSizeT = int64(^uint(0) >> 1)

func copyFileContent(dst, src *os.File) error {
	st, err := src.Stat()
	if err != nil {
		return fmt.Errorf("unable to stat source: %w", err)
	}

	size := st.Size()
	first := true
	srcFd := int(src.Fd())
	dstFd := int(dst.Fd())

	for size > 0 {
		// Ensure that we are never trying to copy more than SSIZE_MAX at a
		// time and at the same time avoids overflows when the file is larger
		// than 4GB on 32-bit systems.
		var copySize int
		if size > maxSSizeT {
			copySize = int(maxSSizeT)
		} else {
			copySize = int(size)
		}
		n, err := unix.CopyFileRange(srcFd, nil, dstFd, nil, copySize, 0)
		if err != nil {
			if (err != unix.ENOSYS && err != unix.EXDEV) || !first {
				return fmt.Errorf("copy file range failed: %w", err)
			}

			buf := bufferPool.Get().(*[]byte)
			_, err = io.CopyBuffer(dst, src, *buf)
			bufferPool.Put(buf)
			if err != nil {
				return fmt.Errorf("userspace copy failed: %w", err)
			}
			return nil
		}

		first = false
		size -= int64(n)
	}

	return nil
}

func copyXAttrs(dst, src string, excludes map[string]struct{}, errorHandler XAttrErrorHandler) error {
	xattrKeys, err := sysx.LListxattr(src)
	if err != nil {
		e := fmt.Errorf("failed to list xattrs on %s: %w", src, err)
		if errorHandler != nil {
			e = errorHandler(dst, src, "", e)
		}
		return e
	}
	for _, xattr := range xattrKeys {
		if _, exclude := excludes[xattr]; exclude {
			continue
		}
		data, err := sysx.LGetxattr(src, xattr)
		if err != nil {
			e := fmt.Errorf("failed to get xattr %q on %s: %w", xattr, src, err)
			if errorHandler != nil {
				if e = errorHandler(dst, src, xattr, e); e == nil {
					continue
				}
			}
			return e
		}
		if err := sysx.LSetxattr(dst, xattr, data, 0); err != nil {
			e := fmt.Errorf("failed to set xattr %q on %s: %w", xattr, dst, err)
			if errorHandler != nil {
				if e = errorHandler(dst, src, xattr, e); e == nil {
					continue
				}
			}
			return e
		}
	}

	return nil
}
  070701000002C6000081A4000000000000000000000001645E367C00000B24000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/fs/copy_unix.go   //go:build darwin || freebsd || openbsd || netbsd || solaris
// +build darwin freebsd openbsd netbsd solaris

/*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package fs

import (
	"fmt"
	"io"
	"os"
	"syscall"

	"github.com/containerd/continuity/sysx"
)

func copyFileInfo(fi os.FileInfo, src, name string) error {
	st := fi.Sys().(*syscall.Stat_t)
	if err := os.Lchown(name, int(st.Uid), int(st.Gid)); err != nil {
		if os.IsPermission(err) {
			// Normally if uid/gid are the same this would be a no-op, but some
			// filesystems may still return EPERM... for instance NFS does this.
			// In such a case, this is not an error.
			if dstStat, err2 := os.Lstat(name); err2 == nil {
				st2 := dstStat.Sys().(*syscall.Stat_t)
				if st.Uid == st2.Uid && st.Gid == st2.Gid {
					err = nil
				}
			}
		}
		if err != nil {
			return fmt.Errorf("failed to chown %s: %w", name, err)
		}
	}

	if (fi.Mode() & os.ModeSymlink) != os.ModeSymlink {
		if err := os.Chmod(name, fi.Mode()); err != nil {
			return fmt.Errorf("failed to chmod %s: %w", name, err)
		}
	}

	if err := utimesNano(name, StatAtime(st), StatMtime(st)); err != nil {
		return fmt.Errorf("failed to utime %s: %w", name, err)
	}

	return nil
}

func copyFileContent(dst, src *os.File) error {
	buf := bufferPool.Get().(*[]byte)
	_, err := io.CopyBuffer(dst, src, *buf)
	bufferPool.Put(buf)

	return err
}

func copyXAttrs(dst, src string, excludes map[string]struct{}, errorHandler XAttrErrorHandler) error {
	xattrKeys, err := sysx.LListxattr(src)
	if err != nil {
		e := fmt.Errorf("failed to list xattrs on %s: %w", src, err)
		if errorHandler != nil {
			e = errorHandler(dst, src, "", e)
		}
		return e
	}
	for _, xattr := range xattrKeys {
		if _, exclude := excludes[xattr]; exclude {
			continue
		}
		data, err := sysx.LGetxattr(src, xattr)
		if err != nil {
			e := fmt.Errorf("failed to get xattr %q on %s: %w", xattr, src, err)
			if errorHandler != nil {
				if e = errorHandler(dst, src, xattr, e); e == nil {
					continue
				}
			}
			return e
		}
		if err := sysx.LSetxattr(dst, xattr, data, 0); err != nil {
			e := fmt.Errorf("failed to set xattr %q on %s: %w", xattr, dst, err)
			if errorHandler != nil {
				if e = errorHandler(dst, src, xattr, e); e == nil {
					continue
				}
			}
			return e
		}
	}

	return nil
}
070701000002C7000081A4000000000000000000000001645E367C00000922000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/fs/copy_windows.go    /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package fs

import (
	"errors"
	"fmt"
	"io"
	"os"

	winio "github.com/Microsoft/go-winio"
	"golang.org/x/sys/windows"
)

const (
	seTakeOwnershipPrivilege = "SeTakeOwnershipPrivilege"
)

func copyFileInfo(fi os.FileInfo, src, name string) error {
	if err := os.Chmod(name, fi.Mode()); err != nil {
		return fmt.Errorf("failed to chmod %s: %w", name, err)
	}

	// Copy file ownership and ACL
	// We need SeRestorePrivilege and SeTakeOwnershipPrivilege in order
	// to restore security info on a file, especially if we're trying to
	// apply security info which includes SIDs not necessarily present on
	// the host.
	privileges := []string{winio.SeRestorePrivilege, seTakeOwnershipPrivilege}
	if err := winio.EnableProcessPrivileges(privileges); err != nil {
		return err
	}
	defer winio.DisableProcessPrivileges(privileges)

	secInfo, err := windows.GetNamedSecurityInfo(
		src, windows.SE_FILE_OBJECT,
		windows.OWNER_SECURITY_INFORMATION|windows.DACL_SECURITY_INFORMATION)

	if err != nil {
		return err
	}

	dacl, _, err := secInfo.DACL()
	if err != nil {
		return err
	}

	sid, _, err := secInfo.Owner()
	if err != nil {
		return err
	}

	if err := windows.SetNamedSecurityInfo(
		name, windows.SE_FILE_OBJECT,
		windows.OWNER_SECURITY_INFORMATION|windows.DACL_SECURITY_INFORMATION,
		sid, nil, dacl, nil); err != nil {

		return err
	}
	return nil
}

func copyFileContent(dst, src *os.File) error {
	buf := bufferPool.Get().(*[]byte)
	_, err := io.CopyBuffer(dst, src, *buf)
	bufferPool.Put(buf)
	return err
}

func copyXAttrs(dst, src string, excludes map[string]struct{}, errorHandler XAttrErrorHandler) error {
	return nil
}

func copyIrregular(dst string, fi os.FileInfo) error {
	return errors.New("irregular copy not supported")
}
  070701000002C8000081A4000000000000000000000001645E367C00002209000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/fs/diff.go    /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package fs

import (
	"context"
	"os"
	"path/filepath"
	"strings"

	"github.com/sirupsen/logrus"
	"golang.org/x/sync/errgroup"
)

// ChangeKind is the type of modification that
// a change is making.
type ChangeKind int

const (
	// ChangeKindUnmodified represents an unmodified
	// file
	ChangeKindUnmodified = iota

	// ChangeKindAdd represents an addition of
	// a file
	ChangeKindAdd

	// ChangeKindModify represents a change to
	// an existing file
	ChangeKindModify

	// ChangeKindDelete represents a delete of
	// a file
	ChangeKindDelete
)

func (k ChangeKind) String() string {
	switch k {
	case ChangeKindUnmodified:
		return "unmodified"
	case ChangeKindAdd:
		return "add"
	case ChangeKindModify:
		return "modify"
	case ChangeKindDelete:
		return "delete"
	default:
		return ""
	}
}

// Change represents single change between a diff and its parent.
type Change struct {
	Kind ChangeKind
	Path string
}

// ChangeFunc is the type of function called for each change
// computed during a directory changes calculation.
type ChangeFunc func(ChangeKind, string, os.FileInfo, error) error

// Changes computes changes between two directories calling the
// given change function for each computed change. The first
// directory is intended to the base directory and second
// directory the changed directory.
//
// The change callback is called by the order of path names and
// should be appliable in that order.
//  Due to this apply ordering, the following is true
//  - Removed directory trees only create a single change for the root
//    directory removed. Remaining changes are implied.
//  - A directory which is modified to become a file will not have
//    delete entries for sub-path items, their removal is implied
//    by the removal of the parent directory.
//
// Opaque directories will not be treated specially and each file
// removed from the base directory will show up as a removal.
//
// File content comparisons will be done on files which have timestamps
// which may have been truncated. If either of the files being compared
// has a zero value nanosecond value, each byte will be compared for
// differences. If 2 files have the same seconds value but different
// nanosecond values where one of those values is zero, the files will
// be considered unchanged if the content is the same. This behavior
// is to account for timestamp truncation during archiving.
func Changes(ctx context.Context, a, b string, changeFn ChangeFunc) error {
	if a == "" {
		logrus.Debugf("Using single walk diff for %s", b)
		return addDirChanges(ctx, changeFn, b)
	} else if diffOptions := detectDirDiff(b, a); diffOptions != nil {
		logrus.Debugf("Using single walk diff for %s from %s", diffOptions.diffDir, a)
		return diffDirChanges(ctx, changeFn, a, diffOptions)
	}

	logrus.Debugf("Using double walk diff for %s from %s", b, a)
	return doubleWalkDiff(ctx, changeFn, a, b)
}

func addDirChanges(ctx context.Context, changeFn ChangeFunc, root string) error {
	return filepath.Walk(root, func(path string, f os.FileInfo, err error) error {
		if err != nil {
			return err
		}

		// Rebase path
		path, err = filepath.Rel(root, path)
		if err != nil {
			return err
		}

		path = filepath.Join(string(os.PathSeparator), path)

		// Skip root
		if path == string(os.PathSeparator) {
			return nil
		}

		return changeFn(ChangeKindAdd, path, f, nil)
	})
}

// diffDirOptions is used when the diff can be directly calculated from
// a diff directory to its base, without walking both trees.
type diffDirOptions struct {
	diffDir      string
	skipChange   func(string) (bool, error)
	deleteChange func(string, string, os.FileInfo) (string, error)
}

// diffDirChanges walks the diff directory and compares changes against the base.
func diffDirChanges(ctx context.Context, changeFn ChangeFunc, base string, o *diffDirOptions) error {
	changedDirs := make(map[string]struct{})
	return filepath.Walk(o.diffDir, func(path string, f os.FileInfo, err error) error {
		if err != nil {
			return err
		}

		// Rebase path
		path, err = filepath.Rel(o.diffDir, path)
		if err != nil {
			return err
		}

		path = filepath.Join(string(os.PathSeparator), path)

		// Skip root
		if path == string(os.PathSeparator) {
			return nil
		}

		// TODO: handle opaqueness, start new double walker at this
		// location to get deletes, and skip tree in single walker

		if o.skipChange != nil {
			if skip, err := o.skipChange(path); skip {
				return err
			}
		}

		var kind ChangeKind

		deletedFile, err := o.deleteChange(o.diffDir, path, f)
		if err != nil {
			return err
		}

		// Find out what kind of modification happened
		if deletedFile != "" {
			path = deletedFile
			kind = ChangeKindDelete
			f = nil
		} else {
			// Otherwise, the file was added
			kind = ChangeKindAdd

			// ...Unless it already existed in a base, in which case, it's a modification
			stat, err := os.Stat(filepath.Join(base, path))
			if err != nil && !os.IsNotExist(err) {
				return err
			}
			if err == nil {
				// The file existed in the base, so that's a modification

				// However, if it's a directory, maybe it wasn't actually modified.
				// If you modify /foo/bar/baz, then /foo will be part of the changed files only because it's the parent of bar
				if stat.IsDir() && f.IsDir() {
					if f.Size() == stat.Size() && f.Mode() == stat.Mode() && sameFsTime(f.ModTime(), stat.ModTime()) {
						// Both directories are the same, don't record the change
						return nil
					}
				}
				kind = ChangeKindModify
			}
		}

		// If /foo/bar/file.txt is modified, then /foo/bar must be part of the changed files.
		// This block is here to ensure the change is recorded even if the
		// modify time, mode and size of the parent directory in the rw and ro layers are all equal.
		// Check https://github.com/docker/docker/pull/13590 for details.
		if f.IsDir() {
			changedDirs[path] = struct{}{}
		}
		if kind == ChangeKindAdd || kind == ChangeKindDelete {
			parent := filepath.Dir(path)
			if _, ok := changedDirs[parent]; !ok && parent != "/" {
				pi, err := os.Stat(filepath.Join(o.diffDir, parent))
				if err := changeFn(ChangeKindModify, parent, pi, err); err != nil {
					return err
				}
				changedDirs[parent] = struct{}{}
			}
		}

		return changeFn(kind, path, f, nil)
	})
}

// doubleWalkDiff walks both directories to create a diff
func doubleWalkDiff(ctx context.Context, changeFn ChangeFunc, a, b string) (err error) {
	g, ctx := errgroup.WithContext(ctx)

	var (
		c1 = make(chan *currentPath)
		c2 = make(chan *currentPath)

		f1, f2 *currentPath
		rmdir  string
	)
	g.Go(func() error {
		defer close(c1)
		return pathWalk(ctx, a, c1)
	})
	g.Go(func() error {
		defer close(c2)
		return pathWalk(ctx, b, c2)
	})
	g.Go(func() error {
		for c1 != nil || c2 != nil {
			if f1 == nil && c1 != nil {
				f1, err = nextPath(ctx, c1)
				if err != nil {
					return err
				}
				if f1 == nil {
					c1 = nil
				}
			}

			if f2 == nil && c2 != nil {
				f2, err = nextPath(ctx, c2)
				if err != nil {
					return err
				}
				if f2 == nil {
					c2 = nil
				}
			}
			if f1 == nil && f2 == nil {
				continue
			}

			var f os.FileInfo
			k, p := pathChange(f1, f2)
			switch k {
			case ChangeKindAdd:
				if rmdir != "" {
					rmdir = ""
				}
				f = f2.f
				f2 = nil
			case ChangeKindDelete:
				// Check if this file is already removed by being
				// under of a removed directory
				if rmdir != "" && strings.HasPrefix(f1.path, rmdir) {
					f1 = nil
					continue
				} else if f1.f.IsDir() {
					rmdir = f1.path + string(os.PathSeparator)
				} else if rmdir != "" {
					rmdir = ""
				}
				f1 = nil
			case ChangeKindModify:
				same, err := sameFile(f1, f2)
				if err != nil {
					return err
				}
				if f1.f.IsDir() && !f2.f.IsDir() {
					rmdir = f1.path + string(os.PathSeparator)
				} else if rmdir != "" {
					rmdir = ""
				}
				f = f2.f
				f1 = nil
				f2 = nil
				if same {
					if !isLinked(f) {
						continue
					}
					k = ChangeKindUnmodified
				}
			}
			if err := changeFn(k, p, f, nil); err != nil {
				return err
			}
		}
		return nil
	})

	return g.Wait()
}
   070701000002C9000081A4000000000000000000000001645E367C000007F9000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/fs/diff_unix.go   //go:build !windows
// +build !windows

/*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package fs

import (
	"bytes"
	"fmt"
	"os"
	"syscall"

	"github.com/containerd/continuity/sysx"
)

// detectDirDiff returns diff dir options if a directory could
// be found in the mount info for upper which is the direct
// diff with the provided lower directory
func detectDirDiff(upper, lower string) *diffDirOptions {
	// TODO: get mount options for upper
	// TODO: detect AUFS
	// TODO: detect overlay
	return nil
}

// compareSysStat returns whether the stats are equivalent,
// whether the files are considered the same file, and
// an error
func compareSysStat(s1, s2 interface{}) (bool, error) {
	ls1, ok := s1.(*syscall.Stat_t)
	if !ok {
		return false, nil
	}
	ls2, ok := s2.(*syscall.Stat_t)
	if !ok {
		return false, nil
	}

	return ls1.Mode == ls2.Mode && ls1.Uid == ls2.Uid && ls1.Gid == ls2.Gid && ls1.Rdev == ls2.Rdev, nil
}

func compareCapabilities(p1, p2 string) (bool, error) {
	c1, err := sysx.LGetxattr(p1, "security.capability")
	if err != nil && err != sysx.ENODATA {
		return false, fmt.Errorf("failed to get xattr for %s: %w", p1, err)
	}
	c2, err := sysx.LGetxattr(p2, "security.capability")
	if err != nil && err != sysx.ENODATA {
		return false, fmt.Errorf("failed to get xattr for %s: %w", p2, err)
	}
	return bytes.Equal(c1, c2), nil
}

func isLinked(f os.FileInfo) bool {
	s, ok := f.Sys().(*syscall.Stat_t)
	if !ok {
		return false
	}
	return !f.IsDir() && s.Nlink > 1
}
   070701000002CA000081A4000000000000000000000001645E367C00000487000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/fs/diff_windows.go    /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package fs

import (
	"os"

	"golang.org/x/sys/windows"
)

func detectDirDiff(upper, lower string) *diffDirOptions {
	return nil
}

func compareSysStat(s1, s2 interface{}) (bool, error) {
	f1, ok := s1.(windows.Win32FileAttributeData)
	if !ok {
		return false, nil
	}
	f2, ok := s2.(windows.Win32FileAttributeData)
	if !ok {
		return false, nil
	}
	return f1.FileAttributes == f2.FileAttributes, nil
}

func compareCapabilities(p1, p2 string) (bool, error) {
	// TODO: Use windows equivalent
	return true, nil
}

func isLinked(os.FileInfo) bool {
	return false
}
 070701000002CB000081A4000000000000000000000001645E367C000008EC000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/fs/dtype_linux.go //go:build linux
// +build linux

/*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package fs

import (
	"fmt"
	"io/ioutil"
	"os"
	"syscall"
	"unsafe"
)

func locateDummyIfEmpty(path string) (string, error) {
	children, err := ioutil.ReadDir(path)
	if err != nil {
		return "", err
	}
	if len(children) != 0 {
		return "", nil
	}
	dummyFile, err := os.CreateTemp(path, "fsutils-dummy")
	if err != nil {
		return "", err
	}
	name := dummyFile.Name()
	err = dummyFile.Close()
	return name, err
}

// SupportsDType returns whether the filesystem mounted on path supports d_type
func SupportsDType(path string) (bool, error) {
	// locate dummy so that we have at least one dirent
	dummy, err := locateDummyIfEmpty(path)
	if err != nil {
		return false, err
	}
	if dummy != "" {
		defer os.Remove(dummy)
	}

	visited := 0
	supportsDType := true
	fn := func(ent *syscall.Dirent) bool {
		visited++
		if ent.Type == syscall.DT_UNKNOWN {
			supportsDType = false
			// stop iteration
			return true
		}
		// continue iteration
		return false
	}
	if err = iterateReadDir(path, fn); err != nil {
		return false, err
	}
	if visited == 0 {
		return false, fmt.Errorf("did not hit any dirent during iteration %s", path)
	}
	return supportsDType, nil
}

func iterateReadDir(path string, fn func(*syscall.Dirent) bool) error {
	d, err := os.Open(path)
	if err != nil {
		return err
	}
	defer d.Close()
	fd := int(d.Fd())
	buf := make([]byte, 4096)
	for {
		nbytes, err := syscall.ReadDirent(fd, buf)
		if err != nil {
			return err
		}
		if nbytes == 0 {
			break
		}
		for off := 0; off < nbytes; {
			ent := (*syscall.Dirent)(unsafe.Pointer(&buf[off]))
			if stop := fn(ent); stop {
				return nil
			}
			off += int(ent.Reclen)
		}
	}
	return nil
}
070701000002CC000081A4000000000000000000000001645E367C000004A6000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/fs/du.go  /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package fs

import "context"

// Usage of disk information
type Usage struct {
	Inodes int64
	Size   int64
}

// DiskUsage counts the number of inodes and disk usage for the resources under
// path.
func DiskUsage(ctx context.Context, roots ...string) (Usage, error) {
	return diskUsage(ctx, roots...)
}

// DiffUsage counts the numbers of inodes and disk usage in the
// diff between the 2 directories. The first path is intended
// as the base directory and the second as the changed directory.
func DiffUsage(ctx context.Context, a, b string) (Usage, error) {
	return diffUsage(ctx, a, b)
}
  070701000002CD000081A4000000000000000000000001645E367C00000B11000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/fs/du_unix.go //go:build !windows
// +build !windows

/*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package fs

import (
	"context"
	"os"
	"path/filepath"
	"syscall"
)

// blocksUnitSize is the unit used by `st_blocks` in `stat` in bytes.
// See https://man7.org/linux/man-pages/man2/stat.2.html
//   st_blocks
//     This field indicates the number of blocks allocated to the
//     file, in 512-byte units.  (This may be smaller than
//     st_size/512 when the file has holes.)
const blocksUnitSize = 512

type inode struct {
	// TODO(stevvooe): Can probably reduce memory usage by not tracking
	// device, but we can leave this right for now.
	dev, ino uint64
}

func newInode(stat *syscall.Stat_t) inode {
	return inode{
		dev: uint64(stat.Dev), //nolint: unconvert // dev is uint32 on darwin/bsd, uint64 on linux/solaris/freebsd
		ino: uint64(stat.Ino), //nolint: unconvert // ino is uint32 on bsd, uint64 on darwin/linux/solaris/freebsd
	}
}

func diskUsage(ctx context.Context, roots ...string) (Usage, error) {

	var (
		size   int64
		inodes = map[inode]struct{}{} // expensive!
	)

	for _, root := range roots {
		if err := filepath.Walk(root, func(path string, fi os.FileInfo, err error) error {
			if err != nil {
				return err
			}

			select {
			case <-ctx.Done():
				return ctx.Err()
			default:
			}

			stat := fi.Sys().(*syscall.Stat_t)
			inoKey := newInode(stat)
			if _, ok := inodes[inoKey]; !ok {
				inodes[inoKey] = struct{}{}
				size += stat.Blocks * blocksUnitSize
			}

			return nil
		}); err != nil {
			return Usage{}, err
		}
	}

	return Usage{
		Inodes: int64(len(inodes)),
		Size:   size,
	}, nil
}

func diffUsage(ctx context.Context, a, b string) (Usage, error) {
	var (
		size   int64
		inodes = map[inode]struct{}{} // expensive!
	)

	if err := Changes(ctx, a, b, func(kind ChangeKind, _ string, fi os.FileInfo, err error) error {
		if err != nil {
			return err
		}

		if kind == ChangeKindAdd || kind == ChangeKindModify {
			stat := fi.Sys().(*syscall.Stat_t)
			inoKey := newInode(stat)
			if _, ok := inodes[inoKey]; !ok {
				inodes[inoKey] = struct{}{}
				size += stat.Blocks * blocksUnitSize
			}

			return nil

		}
		return nil
	}); err != nil {
		return Usage{}, err
	}

	return Usage{
		Inodes: int64(len(inodes)),
		Size:   size,
	}, nil
}
   070701000002CE000081A4000000000000000000000001645E367C00000656000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/fs/du_windows.go  //go:build windows
// +build windows

/*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package fs

import (
	"context"
	"os"
	"path/filepath"
)

func diskUsage(ctx context.Context, roots ...string) (Usage, error) {
	var (
		size int64
	)

	// TODO(stevvooe): Support inodes (or equivalent) for windows.

	for _, root := range roots {
		if err := filepath.Walk(root, func(path string, fi os.FileInfo, err error) error {
			if err != nil {
				return err
			}

			select {
			case <-ctx.Done():
				return ctx.Err()
			default:
			}

			size += fi.Size()
			return nil
		}); err != nil {
			return Usage{}, err
		}
	}

	return Usage{
		Size: size,
	}, nil
}

func diffUsage(ctx context.Context, a, b string) (Usage, error) {
	var (
		size int64
	)

	if err := Changes(ctx, a, b, func(kind ChangeKind, _ string, fi os.FileInfo, err error) error {
		if err != nil {
			return err
		}

		if kind == ChangeKindAdd || kind == ChangeKindModify {
			size += fi.Size()

			return nil

		}
		return nil
	}); err != nil {
		return Usage{}, err
	}

	return Usage{
		Size: size,
	}, nil
}
  070701000002CF000081A4000000000000000000000001645E367C00000546000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/fs/hardlink.go    /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package fs

import "os"

// GetLinkInfo returns an identifier representing the node a hardlink is pointing
// to. If the file is not hard linked then 0 will be returned.
func GetLinkInfo(fi os.FileInfo) (uint64, bool) {
	return getLinkInfo(fi)
}

// getLinkSource returns a path for the given name and
// file info to its link source in the provided inode
// map. If the given file name is not in the map and
// has other links, it is added to the inode map
// to be a source for other link locations.
func getLinkSource(name string, fi os.FileInfo, inodes map[uint64]string) (string, error) {
	inode, isHardlink := getLinkInfo(fi)
	if !isHardlink {
		return "", nil
	}

	path, ok := inodes[inode]
	if !ok {
		inodes[inode] = name
	}
	return path, nil
}
  070701000002D0000081A4000000000000000000000001645E367C0000039C000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/fs/hardlink_unix.go   //go:build !windows
// +build !windows

/*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package fs

import (
	"os"
	"syscall"
)

func getLinkInfo(fi os.FileInfo) (uint64, bool) {
	s, ok := fi.Sys().(*syscall.Stat_t)
	if !ok {
		return 0, false
	}

	return uint64(s.Ino), !fi.IsDir() && s.Nlink > 1 //nolint: unconvert // ino is uint32 on bsd, uint64 on darwin/linux/solaris
}
070701000002D1000081A4000000000000000000000001645E367C000002B2000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/fs/hardlink_windows.go    /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package fs

import "os"

func getLinkInfo(fi os.FileInfo) (uint64, bool) {
	return 0, false
}
  070701000002D2000081A4000000000000000000000001645E367C00001A1D000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/fs/path.go    /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package fs

import (
	"bytes"
	"context"
	"errors"
	"io"
	"os"
	"path/filepath"
)

var (
	errTooManyLinks = errors.New("too many links")
)

type currentPath struct {
	path     string
	f        os.FileInfo
	fullPath string
}

func pathChange(lower, upper *currentPath) (ChangeKind, string) {
	if lower == nil {
		if upper == nil {
			panic("cannot compare nil paths")
		}
		return ChangeKindAdd, upper.path
	}
	if upper == nil {
		return ChangeKindDelete, lower.path
	}

	switch i := directoryCompare(lower.path, upper.path); {
	case i < 0:
		// File in lower that is not in upper
		return ChangeKindDelete, lower.path
	case i > 0:
		// File in upper that is not in lower
		return ChangeKindAdd, upper.path
	default:
		return ChangeKindModify, upper.path
	}
}

func directoryCompare(a, b string) int {
	l := len(a)
	if len(b) < l {
		l = len(b)
	}
	for i := 0; i < l; i++ {
		c1, c2 := a[i], b[i]
		if c1 == filepath.Separator {
			c1 = byte(0)
		}
		if c2 == filepath.Separator {
			c2 = byte(0)
		}
		if c1 < c2 {
			return -1
		}
		if c1 > c2 {
			return +1
		}
	}
	if len(a) < len(b) {
		return -1
	}
	if len(a) > len(b) {
		return +1
	}
	return 0
}

func sameFile(f1, f2 *currentPath) (bool, error) {
	if os.SameFile(f1.f, f2.f) {
		return true, nil
	}

	equalStat, err := compareSysStat(f1.f.Sys(), f2.f.Sys())
	if err != nil || !equalStat {
		return equalStat, err
	}

	if eq, err := compareCapabilities(f1.fullPath, f2.fullPath); err != nil || !eq {
		return eq, err
	}

	// If not a directory also check size, modtime, and content
	if !f1.f.IsDir() {
		if f1.f.Size() != f2.f.Size() {
			return false, nil
		}
		t1 := f1.f.ModTime()
		t2 := f2.f.ModTime()

		if t1.Unix() != t2.Unix() {
			return false, nil
		}

		// If the timestamp may have been truncated in both of the
		// files, check content of file to determine difference
		if t1.Nanosecond() == 0 && t2.Nanosecond() == 0 {
			if (f1.f.Mode() & os.ModeSymlink) == os.ModeSymlink {
				return compareSymlinkTarget(f1.fullPath, f2.fullPath)
			}
			if f1.f.Size() == 0 { // if file sizes are zero length, the files are the same by definition
				return true, nil
			}
			return compareFileContent(f1.fullPath, f2.fullPath)
		} else if t1.Nanosecond() != t2.Nanosecond() {
			return false, nil
		}
	}

	return true, nil
}

func compareSymlinkTarget(p1, p2 string) (bool, error) {
	t1, err := os.Readlink(p1)
	if err != nil {
		return false, err
	}
	t2, err := os.Readlink(p2)
	if err != nil {
		return false, err
	}
	return t1 == t2, nil
}

const compareChuckSize = 32 * 1024

// compareFileContent compares the content of 2 same sized files
// by comparing each byte.
func compareFileContent(p1, p2 string) (bool, error) {
	f1, err := os.Open(p1)
	if err != nil {
		return false, err
	}
	defer f1.Close()
	f2, err := os.Open(p2)
	if err != nil {
		return false, err
	}
	defer f2.Close()

	b1 := make([]byte, compareChuckSize)
	b2 := make([]byte, compareChuckSize)
	for {
		n1, err1 := f1.Read(b1)
		if err1 != nil && err1 != io.EOF {
			return false, err1
		}
		n2, err2 := f2.Read(b2)
		if err2 != nil && err2 != io.EOF {
			return false, err2
		}
		if n1 != n2 || !bytes.Equal(b1[:n1], b2[:n2]) {
			return false, nil
		}
		if err1 == io.EOF && err2 == io.EOF {
			return true, nil
		}
	}
}

func pathWalk(ctx context.Context, root string, pathC chan<- *currentPath) error {
	return filepath.Walk(root, func(path string, f os.FileInfo, err error) error {
		if err != nil {
			return err
		}

		// Rebase path
		path, err = filepath.Rel(root, path)
		if err != nil {
			return err
		}

		path = filepath.Join(string(os.PathSeparator), path)

		// Skip root
		if path == string(os.PathSeparator) {
			return nil
		}

		p := &currentPath{
			path:     path,
			f:        f,
			fullPath: filepath.Join(root, path),
		}

		select {
		case <-ctx.Done():
			return ctx.Err()
		case pathC <- p:
			return nil
		}
	})
}

func nextPath(ctx context.Context, pathC <-chan *currentPath) (*currentPath, error) {
	select {
	case <-ctx.Done():
		return nil, ctx.Err()
	case p := <-pathC:
		return p, nil
	}
}

// RootPath joins a path with a root, evaluating and bounding any
// symlink to the root directory.
func RootPath(root, path string) (string, error) {
	if path == "" {
		return root, nil
	}
	var linksWalked int // to protect against cycles
	for {
		i := linksWalked
		newpath, err := walkLinks(root, path, &linksWalked)
		if err != nil {
			return "", err
		}
		path = newpath
		if i == linksWalked {
			newpath = filepath.Join("/", newpath)
			if path == newpath {
				return filepath.Join(root, newpath), nil
			}
			path = newpath
		}
	}
}

func walkLink(root, path string, linksWalked *int) (newpath string, islink bool, err error) {
	if *linksWalked > 255 {
		return "", false, errTooManyLinks
	}

	path = filepath.Join("/", path)
	if path == "/" {
		return path, false, nil
	}
	realPath := filepath.Join(root, path)

	fi, err := os.Lstat(realPath)
	if err != nil {
		// If path does not yet exist, treat as non-symlink
		if os.IsNotExist(err) {
			return path, false, nil
		}
		return "", false, err
	}
	if fi.Mode()&os.ModeSymlink == 0 {
		return path, false, nil
	}
	newpath, err = os.Readlink(realPath)
	if err != nil {
		return "", false, err
	}
	*linksWalked++
	return newpath, true, nil
}

func walkLinks(root, path string, linksWalked *int) (string, error) {
	switch dir, file := filepath.Split(path); {
	case dir == "":
		newpath, _, err := walkLink(root, file, linksWalked)
		return newpath, err
	case file == "":
		if os.IsPathSeparator(dir[len(dir)-1]) {
			if dir == "/" {
				return dir, nil
			}
			return walkLinks(root, dir[:len(dir)-1], linksWalked)
		}
		newpath, _, err := walkLink(root, dir, linksWalked)
		return newpath, err
	default:
		newdir, err := walkLinks(root, dir, linksWalked)
		if err != nil {
			return "", err
		}
		newpath, islink, err := walkLink(root, filepath.Join(newdir, file), linksWalked)
		if err != nil {
			return "", err
		}
		if !islink {
			return newpath, nil
		}
		if filepath.IsAbs(newpath) {
			return newpath, nil
		}
		return filepath.Join(newdir, newpath), nil
	}
}
   070701000002D3000081A4000000000000000000000001645E367C00000487000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/fs/stat_atim.go   //go:build linux || openbsd || solaris
// +build linux openbsd solaris

/*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package fs

import (
	"syscall"
	"time"
)

// StatAtime returns the Atim
func StatAtime(st *syscall.Stat_t) syscall.Timespec {
	return st.Atim
}

// StatCtime returns the Ctim
func StatCtime(st *syscall.Stat_t) syscall.Timespec {
	return st.Ctim
}

// StatMtime returns the Mtim
func StatMtime(st *syscall.Stat_t) syscall.Timespec {
	return st.Mtim
}

// StatATimeAsTime returns st.Atim as a time.Time
func StatATimeAsTime(st *syscall.Stat_t) time.Time {
	return time.Unix(st.Atim.Unix())
}
 070701000002D4000081A4000000000000000000000001645E367C000004F4000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/fs/stat_darwinbsd.go  //go:build darwin || freebsd || netbsd
// +build darwin freebsd netbsd

/*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package fs

import (
	"syscall"
	"time"
)

// StatAtime returns the access time from a stat struct
func StatAtime(st *syscall.Stat_t) syscall.Timespec {
	return st.Atimespec
}

// StatCtime returns the created time from a stat struct
func StatCtime(st *syscall.Stat_t) syscall.Timespec {
	return st.Ctimespec
}

// StatMtime returns the modified time from a stat struct
func StatMtime(st *syscall.Stat_t) syscall.Timespec {
	return st.Mtimespec
}

// StatATimeAsTime returns the access time as a time.Time
func StatATimeAsTime(st *syscall.Stat_t) time.Time {
	return time.Unix(st.Atimespec.Unix())
}
070701000002D5000081A4000000000000000000000001645E367C000003F4000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/fs/time.go    /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package fs

import "time"

// Gnu tar and the go tar writer don't have sub-second mtime
// precision, which is problematic when we apply changes via tar
// files, we handle this by comparing for exact times, *or* same
// second count and either a or b having exactly 0 nanoseconds
func sameFsTime(a, b time.Time) bool {
	return a == b ||
		(a.Unix() == b.Unix() &&
			(a.Nanosecond() == 0 || b.Nanosecond() == 0))
}
070701000002D6000081A4000000000000000000000001645E367C000003DC000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/fs/utimesnanoat.go    //go:build !(windows || linux)
// +build !windows,!linux

/*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package fs

import (
	"syscall"

	"golang.org/x/sys/unix"
)

func utimesNano(name string, atime, mtime syscall.Timespec) error {
	at := unix.NsecToTimespec(atime.Nano())
	mt := unix.NsecToTimespec(mtime.Nano())
	utimes := [2]unix.Timespec{at, mt}
	return unix.UtimesNanoAt(unix.AT_FDCWD, name, utimes[0:], unix.AT_SYMLINK_NOFOLLOW)
}
070701000002D7000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/sysx  070701000002D8000081A4000000000000000000000001645E367C000000AD000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/sysx/README.md    This package is for internal use only. It is intended to only have
temporary changes before they are upstreamed to golang.org/x/sys/
(a.k.a. https://github.com/golang/sys).
   070701000002D9000081A4000000000000000000000001645E367C00000299000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/sysx/nodata_linux.go  /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package sysx

import (
	"syscall"
)

const ENODATA = syscall.ENODATA
   070701000002DA000081A4000000000000000000000001645E367C000002D8000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/sysx/nodata_solaris.go    /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package sysx

import (
	"syscall"
)

// This should actually be a set that contains ENOENT and EPERM
const ENODATA = syscall.ENOENT
070701000002DB000081A4000000000000000000000001645E367C000002E7000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/sysx/nodata_unix.go   //go:build !(linux || solaris || windows)
// +build !linux,!solaris,!windows

/*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package sysx

import (
	"syscall"
)

const ENODATA = syscall.ENOATTR
 070701000002DC000081A4000000000000000000000001645E367C00000C87000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/sysx/xattr.go //go:build linux || darwin
// +build linux darwin

/*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package sysx

import (
	"bytes"

	"golang.org/x/sys/unix"
)

// Listxattr calls syscall listxattr and reads all content
// and returns a string array
func Listxattr(path string) ([]string, error) {
	return listxattrAll(path, unix.Listxattr)
}

// Removexattr calls syscall removexattr
func Removexattr(path string, attr string) (err error) {
	return unix.Removexattr(path, attr)
}

// Setxattr calls syscall setxattr
func Setxattr(path string, attr string, data []byte, flags int) (err error) {
	return unix.Setxattr(path, attr, data, flags)
}

// Getxattr calls syscall getxattr
func Getxattr(path, attr string) ([]byte, error) {
	return getxattrAll(path, attr, unix.Getxattr)
}

// LListxattr lists xattrs, not following symlinks
func LListxattr(path string) ([]string, error) {
	return listxattrAll(path, unix.Llistxattr)
}

// LRemovexattr removes an xattr, not following symlinks
func LRemovexattr(path string, attr string) (err error) {
	return unix.Lremovexattr(path, attr)
}

// LSetxattr sets an xattr, not following symlinks
func LSetxattr(path string, attr string, data []byte, flags int) (err error) {
	return unix.Lsetxattr(path, attr, data, flags)
}

// LGetxattr gets an xattr, not following symlinks
func LGetxattr(path, attr string) ([]byte, error) {
	return getxattrAll(path, attr, unix.Lgetxattr)
}

const defaultXattrBufferSize = 128

type listxattrFunc func(path string, dest []byte) (int, error)

func listxattrAll(path string, listFunc listxattrFunc) ([]string, error) {
	buf := make([]byte, defaultXattrBufferSize)
	n, err := listFunc(path, buf)
	for err == unix.ERANGE {
		// Buffer too small, use zero-sized buffer to get the actual size
		n, err = listFunc(path, []byte{})
		if err != nil {
			return nil, err
		}
		buf = make([]byte, n)
		n, err = listFunc(path, buf)
	}
	if err != nil {
		return nil, err
	}

	ps := bytes.Split(bytes.TrimSuffix(buf[:n], []byte{0}), []byte{0})
	var entries []string
	for _, p := range ps {
		if len(p) > 0 {
			entries = append(entries, string(p))
		}
	}

	return entries, nil
}

type getxattrFunc func(string, string, []byte) (int, error)

func getxattrAll(path, attr string, getFunc getxattrFunc) ([]byte, error) {
	buf := make([]byte, defaultXattrBufferSize)
	n, err := getFunc(path, attr, buf)
	for err == unix.ERANGE {
		// Buffer too small, use zero-sized buffer to get the actual size
		n, err = getFunc(path, attr, []byte{})
		if err != nil {
			return nil, err
		}
		buf = make([]byte, n)
		n, err = getFunc(path, attr, buf)
	}
	if err != nil {
		return nil, err
	}
	return buf[:n], nil
}
 070701000002DD000081A4000000000000000000000001645E367C0000075D000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/containerd/continuity/sysx/xattr_unsupported.go //go:build !linux && !darwin
// +build !linux,!darwin

/*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package sysx

import (
	"errors"
	"runtime"
)

var errUnsupported = errors.New("extended attributes unsupported on " + runtime.GOOS)

// Listxattr calls syscall listxattr and reads all content
// and returns a string array
func Listxattr(path string) ([]string, error) {
	return []string{}, nil
}

// Removexattr calls syscall removexattr
func Removexattr(path string, attr string) (err error) {
	return errUnsupported
}

// Setxattr calls syscall setxattr
func Setxattr(path string, attr string, data []byte, flags int) (err error) {
	return errUnsupported
}

// Getxattr calls syscall getxattr
func Getxattr(path, attr string) ([]byte, error) {
	return []byte{}, errUnsupported
}

// LListxattr lists xattrs, not following symlinks
func LListxattr(path string) ([]string, error) {
	return []string{}, nil
}

// LRemovexattr removes an xattr, not following symlinks
func LRemovexattr(path string, attr string) (err error) {
	return errUnsupported
}

// LSetxattr sets an xattr, not following symlinks
func LSetxattr(path string, attr string, data []byte, flags int) (err error) {
	return errUnsupported
}

// LGetxattr gets an xattr, not following symlinks
func LGetxattr(path, attr string) ([]byte, error) {
	return []byte{}, nil
}
   070701000002DE000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/containerd/stargz-snapshotter   070701000002DF000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/containerd/stargz-snapshotter/estargz   070701000002E0000081A4000000000000000000000001645E367C00002C5E000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/containerd/stargz-snapshotter/estargz/LICENSE   
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
  070701000002E1000081A4000000000000000000000001645E367C00004416000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/containerd/stargz-snapshotter/estargz/build.go  /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

/*
   Copyright 2019 The Go Authors. All rights reserved.
   Use of this source code is governed by a BSD-style
   license that can be found in the LICENSE file.
*/

package estargz

import (
	"archive/tar"
	"bytes"
	"compress/gzip"
	"context"
	"errors"
	"fmt"
	"io"
	"os"
	"path"
	"runtime"
	"strings"
	"sync"

	"github.com/containerd/stargz-snapshotter/estargz/errorutil"
	"github.com/klauspost/compress/zstd"
	digest "github.com/opencontainers/go-digest"
	"golang.org/x/sync/errgroup"
)

type options struct {
	chunkSize              int
	compressionLevel       int
	prioritizedFiles       []string
	missedPrioritizedFiles *[]string
	compression            Compression
	ctx                    context.Context
	minChunkSize           int
}

type Option func(o *options) error

// WithChunkSize option specifies the chunk size of eStargz blob to build.
func WithChunkSize(chunkSize int) Option {
	return func(o *options) error {
		o.chunkSize = chunkSize
		return nil
	}
}

// WithCompressionLevel option specifies the gzip compression level.
// The default is gzip.BestCompression.
// This option will be ignored if WithCompression option is used.
// See also: https://godoc.org/compress/gzip#pkg-constants
func WithCompressionLevel(level int) Option {
	return func(o *options) error {
		o.compressionLevel = level
		return nil
	}
}

// WithPrioritizedFiles option specifies the list of prioritized files.
// These files must be complete paths that are absolute or relative to "/"
// For example, all of "foo/bar", "/foo/bar", "./foo/bar" and "../foo/bar"
// are treated as "/foo/bar".
func WithPrioritizedFiles(files []string) Option {
	return func(o *options) error {
		o.prioritizedFiles = files
		return nil
	}
}

// WithAllowPrioritizeNotFound makes Build continue the execution even if some
// of prioritized files specified by WithPrioritizedFiles option aren't found
// in the input tar. Instead, this records all missed file names to the passed
// slice.
func WithAllowPrioritizeNotFound(missedFiles *[]string) Option {
	return func(o *options) error {
		if missedFiles == nil {
			return fmt.Errorf("WithAllowPrioritizeNotFound: slice must be passed")
		}
		o.missedPrioritizedFiles = missedFiles
		return nil
	}
}

// WithCompression specifies compression algorithm to be used.
// Default is gzip.
func WithCompression(compression Compression) Option {
	return func(o *options) error {
		o.compression = compression
		return nil
	}
}

// WithContext specifies a context that can be used for clean canceleration.
func WithContext(ctx context.Context) Option {
	return func(o *options) error {
		o.ctx = ctx
		return nil
	}
}

// WithMinChunkSize option specifies the minimal number of bytes of data
// must be written in one gzip stream.
// By increasing this number, one gzip stream can contain multiple files
// and it hopefully leads to smaller result blob.
// NOTE: This adds a TOC property that old reader doesn't understand.
func WithMinChunkSize(minChunkSize int) Option {
	return func(o *options) error {
		o.minChunkSize = minChunkSize
		return nil
	}
}

// Blob is an eStargz blob.
type Blob struct {
	io.ReadCloser
	diffID    digest.Digester
	tocDigest digest.Digest
}

// DiffID returns the digest of uncompressed blob.
// It is only valid to call DiffID after Close.
func (b *Blob) DiffID() digest.Digest {
	return b.diffID.Digest()
}

// TOCDigest returns the digest of uncompressed TOC JSON.
func (b *Blob) TOCDigest() digest.Digest {
	return b.tocDigest
}

// Build builds an eStargz blob which is an extended version of stargz, from a blob (gzip, zstd
// or plain tar) passed through the argument. If there are some prioritized files are listed in
// the option, these files are grouped as "prioritized" and can be used for runtime optimization
// (e.g. prefetch). This function builds a blob in parallel, with dividing that blob into several
// (at least the number of runtime.GOMAXPROCS(0)) sub-blobs.
func Build(tarBlob *io.SectionReader, opt ...Option) (_ *Blob, rErr error) {
	var opts options
	opts.compressionLevel = gzip.BestCompression // BestCompression by default
	for _, o := range opt {
		if err := o(&opts); err != nil {
			return nil, err
		}
	}
	if opts.compression == nil {
		opts.compression = newGzipCompressionWithLevel(opts.compressionLevel)
	}
	layerFiles := newTempFiles()
	ctx := opts.ctx
	if ctx == nil {
		ctx = context.Background()
	}
	done := make(chan struct{})
	defer close(done)
	go func() {
		select {
		case <-done:
			// nop
		case <-ctx.Done():
			layerFiles.CleanupAll()
		}
	}()
	defer func() {
		if rErr != nil {
			if err := layerFiles.CleanupAll(); err != nil {
				rErr = fmt.Errorf("failed to cleanup tmp files: %v: %w", err, rErr)
			}
		}
		if cErr := ctx.Err(); cErr != nil {
			rErr = fmt.Errorf("error from context %q: %w", cErr, rErr)
		}
	}()
	tarBlob, err := decompressBlob(tarBlob, layerFiles)
	if err != nil {
		return nil, err
	}
	entries, err := sortEntries(tarBlob, opts.prioritizedFiles, opts.missedPrioritizedFiles)
	if err != nil {
		return nil, err
	}
	var tarParts [][]*entry
	if opts.minChunkSize > 0 {
		// Each entry needs to know the size of the current gzip stream so they
		// cannot be processed in parallel.
		tarParts = [][]*entry{entries}
	} else {
		tarParts = divideEntries(entries, runtime.GOMAXPROCS(0))
	}
	writers := make([]*Writer, len(tarParts))
	payloads := make([]*os.File, len(tarParts))
	var mu sync.Mutex
	var eg errgroup.Group
	for i, parts := range tarParts {
		i, parts := i, parts
		// builds verifiable stargz sub-blobs
		eg.Go(func() error {
			esgzFile, err := layerFiles.TempFile("", "esgzdata")
			if err != nil {
				return err
			}
			sw := NewWriterWithCompressor(esgzFile, opts.compression)
			sw.ChunkSize = opts.chunkSize
			sw.MinChunkSize = opts.minChunkSize
			if sw.needsOpenGzEntries == nil {
				sw.needsOpenGzEntries = make(map[string]struct{})
			}
			for _, f := range []string{PrefetchLandmark, NoPrefetchLandmark} {
				sw.needsOpenGzEntries[f] = struct{}{}
			}
			if err := sw.AppendTar(readerFromEntries(parts...)); err != nil {
				return err
			}
			mu.Lock()
			writers[i] = sw
			payloads[i] = esgzFile
			mu.Unlock()
			return nil
		})
	}
	if err := eg.Wait(); err != nil {
		rErr = err
		return nil, err
	}
	tocAndFooter, tocDgst, err := closeWithCombine(writers...)
	if err != nil {
		rErr = err
		return nil, err
	}
	var rs []io.Reader
	for _, p := range payloads {
		fs, err := fileSectionReader(p)
		if err != nil {
			return nil, err
		}
		rs = append(rs, fs)
	}
	diffID := digest.Canonical.Digester()
	pr, pw := io.Pipe()
	go func() {
		r, err := opts.compression.Reader(io.TeeReader(io.MultiReader(append(rs, tocAndFooter)...), pw))
		if err != nil {
			pw.CloseWithError(err)
			return
		}
		defer r.Close()
		if _, err := io.Copy(diffID.Hash(), r); err != nil {
			pw.CloseWithError(err)
			return
		}
		pw.Close()
	}()
	return &Blob{
		ReadCloser: readCloser{
			Reader:    pr,
			closeFunc: layerFiles.CleanupAll,
		},
		tocDigest: tocDgst,
		diffID:    diffID,
	}, nil
}

// closeWithCombine takes unclosed Writers and close them. This also returns the
// toc that combined all Writers into.
// Writers doesn't write TOC and footer to the underlying writers so they can be
// combined into a single eStargz and tocAndFooter returned by this function can
// be appended at the tail of that combined blob.
func closeWithCombine(ws ...*Writer) (tocAndFooterR io.Reader, tocDgst digest.Digest, err error) {
	if len(ws) == 0 {
		return nil, "", fmt.Errorf("at least one writer must be passed")
	}
	for _, w := range ws {
		if w.closed {
			return nil, "", fmt.Errorf("writer must be unclosed")
		}
		defer func(w *Writer) { w.closed = true }(w)
		if err := w.closeGz(); err != nil {
			return nil, "", err
		}
		if err := w.bw.Flush(); err != nil {
			return nil, "", err
		}
	}
	var (
		mtoc          = new(JTOC)
		currentOffset int64
	)
	mtoc.Version = ws[0].toc.Version
	for _, w := range ws {
		for _, e := range w.toc.Entries {
			// Recalculate Offset of non-empty files/chunks
			if (e.Type == "reg" && e.Size > 0) || e.Type == "chunk" {
				e.Offset += currentOffset
			}
			mtoc.Entries = append(mtoc.Entries, e)
		}
		if w.toc.Version > mtoc.Version {
			mtoc.Version = w.toc.Version
		}
		currentOffset += w.cw.n
	}

	return tocAndFooter(ws[0].compressor, mtoc, currentOffset)
}

func tocAndFooter(compressor Compressor, toc *JTOC, offset int64) (io.Reader, digest.Digest, error) {
	buf := new(bytes.Buffer)
	tocDigest, err := compressor.WriteTOCAndFooter(buf, offset, toc, nil)
	if err != nil {
		return nil, "", err
	}
	return buf, tocDigest, nil
}

// divideEntries divides passed entries to the parts at least the number specified by the
// argument.
func divideEntries(entries []*entry, minPartsNum int) (set [][]*entry) {
	var estimatedSize int64
	for _, e := range entries {
		estimatedSize += e.header.Size
	}
	unitSize := estimatedSize / int64(minPartsNum)
	var (
		nextEnd = unitSize
		offset  int64
	)
	set = append(set, []*entry{})
	for _, e := range entries {
		set[len(set)-1] = append(set[len(set)-1], e)
		offset += e.header.Size
		if offset > nextEnd {
			set = append(set, []*entry{})
			nextEnd += unitSize
		}
	}
	return
}

var errNotFound = errors.New("not found")

// sortEntries reads the specified tar blob and returns a list of tar entries.
// If some of prioritized files are specified, the list starts from these
// files with keeping the order specified by the argument.
func sortEntries(in io.ReaderAt, prioritized []string, missedPrioritized *[]string) ([]*entry, error) {

	// Import tar file.
	intar, err := importTar(in)
	if err != nil {
		return nil, fmt.Errorf("failed to sort: %w", err)
	}

	// Sort the tar file respecting to the prioritized files list.
	sorted := &tarFile{}
	for _, l := range prioritized {
		if err := moveRec(l, intar, sorted); err != nil {
			if errors.Is(err, errNotFound) && missedPrioritized != nil {
				*missedPrioritized = append(*missedPrioritized, l)
				continue // allow not found
			}
			return nil, fmt.Errorf("failed to sort tar entries: %w", err)
		}
	}
	if len(prioritized) == 0 {
		sorted.add(&entry{
			header: &tar.Header{
				Name:     NoPrefetchLandmark,
				Typeflag: tar.TypeReg,
				Size:     int64(len([]byte{landmarkContents})),
			},
			payload: bytes.NewReader([]byte{landmarkContents}),
		})
	} else {
		sorted.add(&entry{
			header: &tar.Header{
				Name:     PrefetchLandmark,
				Typeflag: tar.TypeReg,
				Size:     int64(len([]byte{landmarkContents})),
			},
			payload: bytes.NewReader([]byte{landmarkContents}),
		})
	}

	// Dump all entry and concatinate them.
	return append(sorted.dump(), intar.dump()...), nil
}

// readerFromEntries returns a reader of tar archive that contains entries passed
// through the arguments.
func readerFromEntries(entries ...*entry) io.Reader {
	pr, pw := io.Pipe()
	go func() {
		tw := tar.NewWriter(pw)
		defer tw.Close()
		for _, entry := range entries {
			if err := tw.WriteHeader(entry.header); err != nil {
				pw.CloseWithError(fmt.Errorf("Failed to write tar header: %v", err))
				return
			}
			if _, err := io.Copy(tw, entry.payload); err != nil {
				pw.CloseWithError(fmt.Errorf("Failed to write tar payload: %v", err))
				return
			}
		}
		pw.Close()
	}()
	return pr
}

func importTar(in io.ReaderAt) (*tarFile, error) {
	tf := &tarFile{}
	pw, err := newCountReadSeeker(in)
	if err != nil {
		return nil, fmt.Errorf("failed to make position watcher: %w", err)
	}
	tr := tar.NewReader(pw)

	// Walk through all nodes.
	for {
		// Fetch and parse next header.
		h, err := tr.Next()
		if err != nil {
			if err == io.EOF {
				break
			} else {
				return nil, fmt.Errorf("failed to parse tar file, %w", err)
			}
		}
		switch cleanEntryName(h.Name) {
		case PrefetchLandmark, NoPrefetchLandmark:
			// Ignore existing landmark
			continue
		}

		// Add entry. If it already exists, replace it.
		if _, ok := tf.get(h.Name); ok {
			tf.remove(h.Name)
		}
		tf.add(&entry{
			header:  h,
			payload: io.NewSectionReader(in, pw.currentPos(), h.Size),
		})
	}

	return tf, nil
}

func moveRec(name string, in *tarFile, out *tarFile) error {
	name = cleanEntryName(name)
	if name == "" { // root directory. stop recursion.
		if e, ok := in.get(name); ok {
			// entry of the root directory exists. we should move it as well.
			// this case will occur if tar entries are prefixed with "./", "/", etc.
			out.add(e)
			in.remove(name)
		}
		return nil
	}

	_, okIn := in.get(name)
	_, okOut := out.get(name)
	if !okIn && !okOut {
		return fmt.Errorf("file: %q: %w", name, errNotFound)
	}

	parent, _ := path.Split(strings.TrimSuffix(name, "/"))
	if err := moveRec(parent, in, out); err != nil {
		return err
	}
	if e, ok := in.get(name); ok && e.header.Typeflag == tar.TypeLink {
		if err := moveRec(e.header.Linkname, in, out); err != nil {
			return err
		}
	}
	if e, ok := in.get(name); ok {
		out.add(e)
		in.remove(name)
	}
	return nil
}

type entry struct {
	header  *tar.Header
	payload io.ReadSeeker
}

type tarFile struct {
	index  map[string]*entry
	stream []*entry
}

func (f *tarFile) add(e *entry) {
	if f.index == nil {
		f.index = make(map[string]*entry)
	}
	f.index[cleanEntryName(e.header.Name)] = e
	f.stream = append(f.stream, e)
}

func (f *tarFile) remove(name string) {
	name = cleanEntryName(name)
	if f.index != nil {
		delete(f.index, name)
	}
	var filtered []*entry
	for _, e := range f.stream {
		if cleanEntryName(e.header.Name) == name {
			continue
		}
		filtered = append(filtered, e)
	}
	f.stream = filtered
}

func (f *tarFile) get(name string) (e *entry, ok bool) {
	if f.index == nil {
		return nil, false
	}
	e, ok = f.index[cleanEntryName(name)]
	return
}

func (f *tarFile) dump() []*entry {
	return f.stream
}

type readCloser struct {
	io.Reader
	closeFunc func() error
}

func (rc readCloser) Close() error {
	return rc.closeFunc()
}

func fileSectionReader(file *os.File) (*io.SectionReader, error) {
	info, err := file.Stat()
	if err != nil {
		return nil, err
	}
	return io.NewSectionReader(file, 0, info.Size()), nil
}

func newTempFiles() *tempFiles {
	return &tempFiles{}
}

type tempFiles struct {
	files       []*os.File
	filesMu     sync.Mutex
	cleanupOnce sync.Once
}

func (tf *tempFiles) TempFile(dir, pattern string) (*os.File, error) {
	f, err := os.CreateTemp(dir, pattern)
	if err != nil {
		return nil, err
	}
	tf.filesMu.Lock()
	tf.files = append(tf.files, f)
	tf.filesMu.Unlock()
	return f, nil
}

func (tf *tempFiles) CleanupAll() (err error) {
	tf.cleanupOnce.Do(func() {
		err = tf.cleanupAll()
	})
	return
}

func (tf *tempFiles) cleanupAll() error {
	tf.filesMu.Lock()
	defer tf.filesMu.Unlock()
	var allErr []error
	for _, f := range tf.files {
		if err := f.Close(); err != nil {
			allErr = append(allErr, err)
		}
		if err := os.Remove(f.Name()); err != nil {
			allErr = append(allErr, err)
		}
	}
	tf.files = nil
	return errorutil.Aggregate(allErr)
}

func newCountReadSeeker(r io.ReaderAt) (*countReadSeeker, error) {
	pos := int64(0)
	return &countReadSeeker{r: r, cPos: &pos}, nil
}

type countReadSeeker struct {
	r    io.ReaderAt
	cPos *int64

	mu sync.Mutex
}

func (cr *countReadSeeker) Read(p []byte) (int, error) {
	cr.mu.Lock()
	defer cr.mu.Unlock()

	n, err := cr.r.ReadAt(p, *cr.cPos)
	if err == nil {
		*cr.cPos += int64(n)
	}
	return n, err
}

func (cr *countReadSeeker) Seek(offset int64, whence int) (int64, error) {
	cr.mu.Lock()
	defer cr.mu.Unlock()

	switch whence {
	default:
		return 0, fmt.Errorf("Unknown whence: %v", whence)
	case io.SeekStart:
	case io.SeekCurrent:
		offset += *cr.cPos
	case io.SeekEnd:
		return 0, fmt.Errorf("Unsupported whence: %v", whence)
	}

	if offset < 0 {
		return 0, fmt.Errorf("invalid offset")
	}
	*cr.cPos = offset
	return offset, nil
}

func (cr *countReadSeeker) currentPos() int64 {
	cr.mu.Lock()
	defer cr.mu.Unlock()

	return *cr.cPos
}

func decompressBlob(org *io.SectionReader, tmp *tempFiles) (*io.SectionReader, error) {
	if org.Size() < 4 {
		return org, nil
	}
	src := make([]byte, 4)
	if _, err := org.Read(src); err != nil && err != io.EOF {
		return nil, err
	}
	var dR io.Reader
	if bytes.Equal([]byte{0x1F, 0x8B, 0x08}, src[:3]) {
		// gzip
		dgR, err := gzip.NewReader(io.NewSectionReader(org, 0, org.Size()))
		if err != nil {
			return nil, err
		}
		defer dgR.Close()
		dR = io.Reader(dgR)
	} else if bytes.Equal([]byte{0x28, 0xb5, 0x2f, 0xfd}, src[:4]) {
		// zstd
		dzR, err := zstd.NewReader(io.NewSectionReader(org, 0, org.Size()))
		if err != nil {
			return nil, err
		}
		defer dzR.Close()
		dR = io.Reader(dzR)
	} else {
		// uncompressed
		return io.NewSectionReader(org, 0, org.Size()), nil
	}
	b, err := tmp.TempFile("", "uncompresseddata")
	if err != nil {
		return nil, err
	}
	if _, err := io.Copy(b, dR); err != nil {
		return nil, err
	}
	return fileSectionReader(b)
}
  070701000002E2000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/containerd/stargz-snapshotter/estargz/errorutil 070701000002E3000081A4000000000000000000000001645E367C0000042A000000000000000000000000000000000000006000000000elemental-cli-0.3.1/vendor/github.com/containerd/stargz-snapshotter/estargz/errorutil/errors.go   /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package errorutil

import (
	"errors"
	"fmt"
	"strings"
)

// Aggregate combines a list of errors into a single new error.
func Aggregate(errs []error) error {
	switch len(errs) {
	case 0:
		return nil
	case 1:
		return errs[0]
	default:
		points := make([]string, len(errs)+1)
		points[0] = fmt.Sprintf("%d error(s) occurred:", len(errs))
		for i, err := range errs {
			points[i+1] = fmt.Sprintf("* %s", err)
		}
		return errors.New(strings.Join(points, "\n\t"))
	}
}
  070701000002E4000081A4000000000000000000000001645E367C00008191000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/containerd/stargz-snapshotter/estargz/estargz.go    /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

/*
   Copyright 2019 The Go Authors. All rights reserved.
   Use of this source code is governed by a BSD-style
   license that can be found in the LICENSE file.
*/

package estargz

import (
	"bufio"
	"bytes"
	"compress/gzip"
	"crypto/sha256"
	"errors"
	"fmt"
	"hash"
	"io"
	"os"
	"path"
	"sort"
	"strings"
	"sync"
	"time"

	"github.com/containerd/stargz-snapshotter/estargz/errorutil"
	digest "github.com/opencontainers/go-digest"
	"github.com/vbatts/tar-split/archive/tar"
)

// A Reader permits random access reads from a stargz file.
type Reader struct {
	sr        *io.SectionReader
	toc       *JTOC
	tocDigest digest.Digest

	// m stores all non-chunk entries, keyed by name.
	m map[string]*TOCEntry

	// chunks stores all TOCEntry values for regular files that
	// are split up. For a file with a single chunk, it's only
	// stored in m.
	chunks map[string][]*TOCEntry

	decompressor Decompressor
}

type openOpts struct {
	tocOffset     int64
	decompressors []Decompressor
	telemetry     *Telemetry
}

// OpenOption is an option used during opening the layer
type OpenOption func(o *openOpts) error

// WithTOCOffset option specifies the offset of TOC
func WithTOCOffset(tocOffset int64) OpenOption {
	return func(o *openOpts) error {
		o.tocOffset = tocOffset
		return nil
	}
}

// WithDecompressors option specifies decompressors to use.
// Default is gzip-based decompressor.
func WithDecompressors(decompressors ...Decompressor) OpenOption {
	return func(o *openOpts) error {
		o.decompressors = decompressors
		return nil
	}
}

// WithTelemetry option specifies the telemetry hooks
func WithTelemetry(telemetry *Telemetry) OpenOption {
	return func(o *openOpts) error {
		o.telemetry = telemetry
		return nil
	}
}

// MeasureLatencyHook is a func which takes start time and records the diff
type MeasureLatencyHook func(time.Time)

// Telemetry is a struct which defines telemetry hooks. By implementing these hooks you should be able to record
// the latency metrics of the respective steps of estargz open operation. To be used with estargz.OpenWithTelemetry(...)
type Telemetry struct {
	GetFooterLatency      MeasureLatencyHook // measure time to get stargz footer (in milliseconds)
	GetTocLatency         MeasureLatencyHook // measure time to GET TOC JSON (in milliseconds)
	DeserializeTocLatency MeasureLatencyHook // measure time to deserialize TOC JSON (in milliseconds)
}

// Open opens a stargz file for reading.
// The behavior is configurable using options.
//
// Note that each entry name is normalized as the path that is relative to root.
func Open(sr *io.SectionReader, opt ...OpenOption) (*Reader, error) {
	var opts openOpts
	for _, o := range opt {
		if err := o(&opts); err != nil {
			return nil, err
		}
	}

	gzipCompressors := []Decompressor{new(GzipDecompressor), new(LegacyGzipDecompressor)}
	decompressors := append(gzipCompressors, opts.decompressors...)

	// Determine the size to fetch. Try to fetch as many bytes as possible.
	fetchSize := maxFooterSize(sr.Size(), decompressors...)
	if maybeTocOffset := opts.tocOffset; maybeTocOffset > fetchSize {
		if maybeTocOffset > sr.Size() {
			return nil, fmt.Errorf("blob size %d is smaller than the toc offset", sr.Size())
		}
		fetchSize = sr.Size() - maybeTocOffset
	}

	start := time.Now() // before getting layer footer
	footer := make([]byte, fetchSize)
	if _, err := sr.ReadAt(footer, sr.Size()-fetchSize); err != nil {
		return nil, fmt.Errorf("error reading footer: %v", err)
	}
	if opts.telemetry != nil && opts.telemetry.GetFooterLatency != nil {
		opts.telemetry.GetFooterLatency(start)
	}

	var allErr []error
	var found bool
	var r *Reader
	for _, d := range decompressors {
		fSize := d.FooterSize()
		fOffset := positive(int64(len(footer)) - fSize)
		maybeTocBytes := footer[:fOffset]
		_, tocOffset, tocSize, err := d.ParseFooter(footer[fOffset:])
		if err != nil {
			allErr = append(allErr, err)
			continue
		}
		if tocOffset >= 0 && tocSize <= 0 {
			tocSize = sr.Size() - tocOffset - fSize
		}
		if tocOffset >= 0 && tocSize < int64(len(maybeTocBytes)) {
			maybeTocBytes = maybeTocBytes[:tocSize]
		}
		r, err = parseTOC(d, sr, tocOffset, tocSize, maybeTocBytes, opts)
		if err == nil {
			found = true
			break
		}
		allErr = append(allErr, err)
	}
	if !found {
		return nil, errorutil.Aggregate(allErr)
	}
	if err := r.initFields(); err != nil {
		return nil, fmt.Errorf("failed to initialize fields of entries: %v", err)
	}
	return r, nil
}

// OpenFooter extracts and parses footer from the given blob.
// only supports gzip-based eStargz.
func OpenFooter(sr *io.SectionReader) (tocOffset int64, footerSize int64, rErr error) {
	if sr.Size() < FooterSize && sr.Size() < legacyFooterSize {
		return 0, 0, fmt.Errorf("blob size %d is smaller than the footer size", sr.Size())
	}
	var footer [FooterSize]byte
	if _, err := sr.ReadAt(footer[:], sr.Size()-FooterSize); err != nil {
		return 0, 0, fmt.Errorf("error reading footer: %v", err)
	}
	var allErr []error
	for _, d := range []Decompressor{new(GzipDecompressor), new(LegacyGzipDecompressor)} {
		fSize := d.FooterSize()
		fOffset := positive(int64(len(footer)) - fSize)
		_, tocOffset, _, err := d.ParseFooter(footer[fOffset:])
		if err == nil {
			return tocOffset, fSize, err
		}
		allErr = append(allErr, err)
	}
	return 0, 0, errorutil.Aggregate(allErr)
}

// initFields populates the Reader from r.toc after decoding it from
// JSON.
//
// Unexported fields are populated and TOCEntry fields that were
// implicit in the JSON are populated.
func (r *Reader) initFields() error {
	r.m = make(map[string]*TOCEntry, len(r.toc.Entries))
	r.chunks = make(map[string][]*TOCEntry)
	var lastPath string
	uname := map[int]string{}
	gname := map[int]string{}
	var lastRegEnt *TOCEntry
	var chunkTopIndex int
	for i, ent := range r.toc.Entries {
		ent.Name = cleanEntryName(ent.Name)
		switch ent.Type {
		case "reg", "chunk":
			if ent.Offset != r.toc.Entries[chunkTopIndex].Offset {
				chunkTopIndex = i
			}
			ent.chunkTopIndex = chunkTopIndex
		}
		if ent.Type == "reg" {
			lastRegEnt = ent
		}
		if ent.Type == "chunk" {
			ent.Name = lastPath
			r.chunks[ent.Name] = append(r.chunks[ent.Name], ent)
			if ent.ChunkSize == 0 && lastRegEnt != nil {
				ent.ChunkSize = lastRegEnt.Size - ent.ChunkOffset
			}
		} else {
			lastPath = ent.Name

			if ent.Uname != "" {
				uname[ent.UID] = ent.Uname
			} else {
				ent.Uname = uname[ent.UID]
			}
			if ent.Gname != "" {
				gname[ent.GID] = ent.Gname
			} else {
				ent.Gname = uname[ent.GID]
			}

			ent.modTime, _ = time.Parse(time.RFC3339, ent.ModTime3339)

			if ent.Type == "dir" {
				ent.NumLink++ // Parent dir links to this directory
			}
			r.m[ent.Name] = ent
		}
		if ent.Type == "reg" && ent.ChunkSize > 0 && ent.ChunkSize < ent.Size {
			r.chunks[ent.Name] = make([]*TOCEntry, 0, ent.Size/ent.ChunkSize+1)
			r.chunks[ent.Name] = append(r.chunks[ent.Name], ent)
		}
		if ent.ChunkSize == 0 && ent.Size != 0 {
			ent.ChunkSize = ent.Size
		}
	}

	// Populate children, add implicit directories:
	for _, ent := range r.toc.Entries {
		if ent.Type == "chunk" {
			continue
		}
		// add "foo/":
		//    add "foo" child to "" (creating "" if necessary)
		//
		// add "foo/bar/":
		//    add "bar" child to "foo" (creating "foo" if necessary)
		//
		// add "foo/bar.txt":
		//    add "bar.txt" child to "foo" (creating "foo" if necessary)
		//
		// add "a/b/c/d/e/f.txt":
		//    create "a/b/c/d/e" node
		//    add "f.txt" child to "e"

		name := ent.Name
		pdirName := parentDir(name)
		if name == pdirName {
			// This entry and its parent are the same.
			// Ignore this for avoiding infinite loop of the reference.
			// The example case where this can occur is when tar contains the root
			// directory itself (e.g. "./", "/").
			continue
		}
		pdir := r.getOrCreateDir(pdirName)
		ent.NumLink++ // at least one name(ent.Name) references this entry.
		if ent.Type == "hardlink" {
			org, err := r.getSource(ent)
			if err != nil {
				return err
			}
			org.NumLink++ // original entry is referenced by this ent.Name.
			ent = org
		}
		pdir.addChild(path.Base(name), ent)
	}

	lastOffset := r.sr.Size()
	for i := len(r.toc.Entries) - 1; i >= 0; i-- {
		e := r.toc.Entries[i]
		if e.isDataType() {
			e.nextOffset = lastOffset
		}
		if e.Offset != 0 && e.InnerOffset == 0 {
			lastOffset = e.Offset
		}
	}

	return nil
}

func (r *Reader) getSource(ent *TOCEntry) (_ *TOCEntry, err error) {
	if ent.Type == "hardlink" {
		org, ok := r.m[cleanEntryName(ent.LinkName)]
		if !ok {
			return nil, fmt.Errorf("%q is a hardlink but the linkname %q isn't found", ent.Name, ent.LinkName)
		}
		ent, err = r.getSource(org)
		if err != nil {
			return nil, err
		}
	}
	return ent, nil
}

func parentDir(p string) string {
	dir, _ := path.Split(p)
	return strings.TrimSuffix(dir, "/")
}

func (r *Reader) getOrCreateDir(d string) *TOCEntry {
	e, ok := r.m[d]
	if !ok {
		e = &TOCEntry{
			Name:    d,
			Type:    "dir",
			Mode:    0755,
			NumLink: 2, // The directory itself(.) and the parent link to this directory.
		}
		r.m[d] = e
		if d != "" {
			pdir := r.getOrCreateDir(parentDir(d))
			pdir.addChild(path.Base(d), e)
		}
	}
	return e
}

func (r *Reader) TOCDigest() digest.Digest {
	return r.tocDigest
}

// VerifyTOC checks that the TOC JSON in the passed blob matches the
// passed digests and that the TOC JSON contains digests for all chunks
// contained in the blob. If the verification succceeds, this function
// returns TOCEntryVerifier which holds all chunk digests in the stargz blob.
func (r *Reader) VerifyTOC(tocDigest digest.Digest) (TOCEntryVerifier, error) {
	// Verify the digest of TOC JSON
	if r.tocDigest != tocDigest {
		return nil, fmt.Errorf("invalid TOC JSON %q; want %q", r.tocDigest, tocDigest)
	}
	return r.Verifiers()
}

// Verifiers returns TOCEntryVerifier of this chunk. Use VerifyTOC instead in most cases
// because this doesn't verify TOC.
func (r *Reader) Verifiers() (TOCEntryVerifier, error) {
	chunkDigestMap := make(map[int64]digest.Digest) // map from chunk offset to the chunk digest
	regDigestMap := make(map[int64]digest.Digest)   // map from chunk offset to the reg file digest
	var chunkDigestMapIncomplete bool
	var regDigestMapIncomplete bool
	var containsChunk bool
	for _, e := range r.toc.Entries {
		if e.Type != "reg" && e.Type != "chunk" {
			continue
		}

		// offset must be unique in stargz blob
		_, dOK := chunkDigestMap[e.Offset]
		_, rOK := regDigestMap[e.Offset]
		if dOK || rOK {
			return nil, fmt.Errorf("offset %d found twice", e.Offset)
		}

		if e.Type == "reg" {
			if e.Size == 0 {
				continue // ignores empty file
			}

			// record the digest of regular file payload
			if e.Digest != "" {
				d, err := digest.Parse(e.Digest)
				if err != nil {
					return nil, fmt.Errorf("failed to parse regular file digest %q: %w", e.Digest, err)
				}
				regDigestMap[e.Offset] = d
			} else {
				regDigestMapIncomplete = true
			}
		} else {
			containsChunk = true // this layer contains "chunk" entries.
		}

		// "reg" also can contain ChunkDigest (e.g. when "reg" is the first entry of
		// chunked file)
		if e.ChunkDigest != "" {
			d, err := digest.Parse(e.ChunkDigest)
			if err != nil {
				return nil, fmt.Errorf("failed to parse chunk digest %q: %w", e.ChunkDigest, err)
			}
			chunkDigestMap[e.Offset] = d
		} else {
			chunkDigestMapIncomplete = true
		}
	}

	if chunkDigestMapIncomplete {
		// Though some chunk digests are not found, if this layer doesn't contain
		// "chunk"s and all digest of "reg" files are recorded, we can use them instead.
		if !containsChunk && !regDigestMapIncomplete {
			return &verifier{digestMap: regDigestMap}, nil
		}
		return nil, fmt.Errorf("some ChunkDigest not found in TOC JSON")
	}

	return &verifier{digestMap: chunkDigestMap}, nil
}

// verifier is an implementation of TOCEntryVerifier which holds verifiers keyed by
// offset of the chunk.
type verifier struct {
	digestMap   map[int64]digest.Digest
	digestMapMu sync.Mutex
}

// Verifier returns a content verifier specified by TOCEntry.
func (v *verifier) Verifier(ce *TOCEntry) (digest.Verifier, error) {
	v.digestMapMu.Lock()
	defer v.digestMapMu.Unlock()
	d, ok := v.digestMap[ce.Offset]
	if !ok {
		return nil, fmt.Errorf("verifier for offset=%d,size=%d hasn't been registered",
			ce.Offset, ce.ChunkSize)
	}
	return d.Verifier(), nil
}

// ChunkEntryForOffset returns the TOCEntry containing the byte of the
// named file at the given offset within the file.
// Name must be absolute path or one that is relative to root.
func (r *Reader) ChunkEntryForOffset(name string, offset int64) (e *TOCEntry, ok bool) {
	name = cleanEntryName(name)
	e, ok = r.Lookup(name)
	if !ok || !e.isDataType() {
		return nil, false
	}
	ents := r.chunks[name]
	if len(ents) < 2 {
		if offset >= e.ChunkSize {
			return nil, false
		}
		return e, true
	}
	i := sort.Search(len(ents), func(i int) bool {
		e := ents[i]
		return e.ChunkOffset >= offset || (offset > e.ChunkOffset && offset < e.ChunkOffset+e.ChunkSize)
	})
	if i == len(ents) {
		return nil, false
	}
	return ents[i], true
}

// Lookup returns the Table of Contents entry for the given path.
//
// To get the root directory, use the empty string.
// Path must be absolute path or one that is relative to root.
func (r *Reader) Lookup(path string) (e *TOCEntry, ok bool) {
	path = cleanEntryName(path)
	if r == nil {
		return
	}
	e, ok = r.m[path]
	if ok && e.Type == "hardlink" {
		var err error
		e, err = r.getSource(e)
		if err != nil {
			return nil, false
		}
	}
	return
}

// OpenFile returns the reader of the specified file payload.
//
// Name must be absolute path or one that is relative to root.
func (r *Reader) OpenFile(name string) (*io.SectionReader, error) {
	fr, err := r.newFileReader(name)
	if err != nil {
		return nil, err
	}
	return io.NewSectionReader(fr, 0, fr.size), nil
}

func (r *Reader) newFileReader(name string) (*fileReader, error) {
	name = cleanEntryName(name)
	ent, ok := r.Lookup(name)
	if !ok {
		// TODO: come up with some error plan. This is lazy:
		return nil, &os.PathError{
			Path: name,
			Op:   "OpenFile",
			Err:  os.ErrNotExist,
		}
	}
	if ent.Type != "reg" {
		return nil, &os.PathError{
			Path: name,
			Op:   "OpenFile",
			Err:  errors.New("not a regular file"),
		}
	}
	return &fileReader{
		r:    r,
		size: ent.Size,
		ents: r.getChunks(ent),
	}, nil
}

func (r *Reader) OpenFileWithPreReader(name string, preRead func(*TOCEntry, io.Reader) error) (*io.SectionReader, error) {
	fr, err := r.newFileReader(name)
	if err != nil {
		return nil, err
	}
	fr.preRead = preRead
	return io.NewSectionReader(fr, 0, fr.size), nil
}

func (r *Reader) getChunks(ent *TOCEntry) []*TOCEntry {
	if ents, ok := r.chunks[ent.Name]; ok {
		return ents
	}
	return []*TOCEntry{ent}
}

type fileReader struct {
	r       *Reader
	size    int64
	ents    []*TOCEntry // 1 or more reg/chunk entries
	preRead func(*TOCEntry, io.Reader) error
}

func (fr *fileReader) ReadAt(p []byte, off int64) (n int, err error) {
	if off >= fr.size {
		return 0, io.EOF
	}
	if off < 0 {
		return 0, errors.New("invalid offset")
	}
	var i int
	if len(fr.ents) > 1 {
		i = sort.Search(len(fr.ents), func(i int) bool {
			return fr.ents[i].ChunkOffset >= off
		})
		if i == len(fr.ents) {
			i = len(fr.ents) - 1
		}
	}
	ent := fr.ents[i]
	if ent.ChunkOffset > off {
		if i == 0 {
			return 0, errors.New("internal error; first chunk offset is non-zero")
		}
		ent = fr.ents[i-1]
	}

	//  If ent is a chunk of a large file, adjust the ReadAt
	//  offset by the chunk's offset.
	off -= ent.ChunkOffset

	finalEnt := fr.ents[len(fr.ents)-1]
	compressedOff := ent.Offset
	// compressedBytesRemain is the number of compressed bytes in this
	// file remaining, over 1+ chunks.
	compressedBytesRemain := finalEnt.NextOffset() - compressedOff

	sr := io.NewSectionReader(fr.r.sr, compressedOff, compressedBytesRemain)

	const maxRead = 2 << 20
	var bufSize = maxRead
	if compressedBytesRemain < maxRead {
		bufSize = int(compressedBytesRemain)
	}

	br := bufio.NewReaderSize(sr, bufSize)
	if _, err := br.Peek(bufSize); err != nil {
		return 0, fmt.Errorf("fileReader.ReadAt.peek: %v", err)
	}

	dr, err := fr.r.decompressor.Reader(br)
	if err != nil {
		return 0, fmt.Errorf("fileReader.ReadAt.decompressor.Reader: %v", err)
	}
	defer dr.Close()

	if fr.preRead == nil {
		if n, err := io.CopyN(io.Discard, dr, ent.InnerOffset+off); n != ent.InnerOffset+off || err != nil {
			return 0, fmt.Errorf("discard of %d bytes != %v, %v", ent.InnerOffset+off, n, err)
		}
		return io.ReadFull(dr, p)
	}

	var retN int
	var retErr error
	var found bool
	var nr int64
	for _, e := range fr.r.toc.Entries[ent.chunkTopIndex:] {
		if !e.isDataType() {
			continue
		}
		if e.Offset != fr.r.toc.Entries[ent.chunkTopIndex].Offset {
			break
		}
		if in, err := io.CopyN(io.Discard, dr, e.InnerOffset-nr); err != nil || in != e.InnerOffset-nr {
			return 0, fmt.Errorf("discard of remaining %d bytes != %v, %v", e.InnerOffset-nr, in, err)
		}
		nr = e.InnerOffset
		if e == ent {
			found = true
			if n, err := io.CopyN(io.Discard, dr, off); n != off || err != nil {
				return 0, fmt.Errorf("discard of offset %d bytes != %v, %v", off, n, err)
			}
			retN, retErr = io.ReadFull(dr, p)
			nr += off + int64(retN)
			continue
		}
		cr := &countReader{r: io.LimitReader(dr, e.ChunkSize)}
		if err := fr.preRead(e, cr); err != nil {
			return 0, fmt.Errorf("failed to pre read: %w", err)
		}
		nr += cr.n
	}
	if !found {
		return 0, fmt.Errorf("fileReader.ReadAt: target entry not found")
	}
	return retN, retErr
}

// A Writer writes stargz files.
//
// Use NewWriter to create a new Writer.
type Writer struct {
	bw       *bufio.Writer
	cw       *countWriter
	toc      *JTOC
	diffHash hash.Hash // SHA-256 of uncompressed tar

	closed        bool
	gz            io.WriteCloser
	lastUsername  map[int]string
	lastGroupname map[int]string
	compressor    Compressor

	uncompressedCounter *countWriteFlusher

	// ChunkSize optionally controls the maximum number of bytes
	// of data of a regular file that can be written in one gzip
	// stream before a new gzip stream is started.
	// Zero means to use a default, currently 4 MiB.
	ChunkSize int

	// MinChunkSize optionally controls the minimum number of bytes
	// of data must be written in one gzip stream before a new gzip
	// NOTE: This adds a TOC property that stargz snapshotter < v0.13.0 doesn't understand.
	MinChunkSize int

	needsOpenGzEntries map[string]struct{}
}

// currentCompressionWriter writes to the current w.gz field, which can
// change throughout writing a tar entry.
//
// Additionally, it updates w's SHA-256 of the uncompressed bytes
// of the tar file.
type currentCompressionWriter struct{ w *Writer }

func (ccw currentCompressionWriter) Write(p []byte) (int, error) {
	ccw.w.diffHash.Write(p)
	if ccw.w.gz == nil {
		if err := ccw.w.condOpenGz(); err != nil {
			return 0, err
		}
	}
	return ccw.w.gz.Write(p)
}

func (w *Writer) chunkSize() int {
	if w.ChunkSize <= 0 {
		return 4 << 20
	}
	return w.ChunkSize
}

// Unpack decompresses the given estargz blob and returns a ReadCloser of the tar blob.
// TOC JSON and footer are removed.
func Unpack(sr *io.SectionReader, c Decompressor) (io.ReadCloser, error) {
	footerSize := c.FooterSize()
	if sr.Size() < footerSize {
		return nil, fmt.Errorf("blob is too small; %d < %d", sr.Size(), footerSize)
	}
	footerOffset := sr.Size() - footerSize
	footer := make([]byte, footerSize)
	if _, err := sr.ReadAt(footer, footerOffset); err != nil {
		return nil, err
	}
	blobPayloadSize, _, _, err := c.ParseFooter(footer)
	if err != nil {
		return nil, fmt.Errorf("failed to parse footer: %w", err)
	}
	if blobPayloadSize < 0 {
		blobPayloadSize = sr.Size()
	}
	return c.Reader(io.LimitReader(sr, blobPayloadSize))
}

// NewWriter returns a new stargz writer (gzip-based) writing to w.
//
// The writer must be closed to write its trailing table of contents.
func NewWriter(w io.Writer) *Writer {
	return NewWriterLevel(w, gzip.BestCompression)
}

// NewWriterLevel returns a new stargz writer (gzip-based) writing to w.
// The compression level is configurable.
//
// The writer must be closed to write its trailing table of contents.
func NewWriterLevel(w io.Writer, compressionLevel int) *Writer {
	return NewWriterWithCompressor(w, NewGzipCompressorWithLevel(compressionLevel))
}

// NewWriterWithCompressor returns a new stargz writer writing to w.
// The compression method is configurable.
//
// The writer must be closed to write its trailing table of contents.
func NewWriterWithCompressor(w io.Writer, c Compressor) *Writer {
	bw := bufio.NewWriter(w)
	cw := &countWriter{w: bw}
	return &Writer{
		bw:                  bw,
		cw:                  cw,
		toc:                 &JTOC{Version: 1},
		diffHash:            sha256.New(),
		compressor:          c,
		uncompressedCounter: &countWriteFlusher{},
	}
}

// Close writes the stargz's table of contents and flushes all the
// buffers, returning any error.
func (w *Writer) Close() (digest.Digest, error) {
	if w.closed {
		return "", nil
	}
	defer func() { w.closed = true }()

	if err := w.closeGz(); err != nil {
		return "", err
	}

	// Write the TOC index and footer.
	tocDigest, err := w.compressor.WriteTOCAndFooter(w.cw, w.cw.n, w.toc, w.diffHash)
	if err != nil {
		return "", err
	}
	if err := w.bw.Flush(); err != nil {
		return "", err
	}

	return tocDigest, nil
}

func (w *Writer) closeGz() error {
	if w.closed {
		return errors.New("write on closed Writer")
	}
	if w.gz != nil {
		if err := w.gz.Close(); err != nil {
			return err
		}
		w.gz = nil
	}
	return nil
}

func (w *Writer) flushGz() error {
	if w.closed {
		return errors.New("flush on closed Writer")
	}
	if w.gz != nil {
		if f, ok := w.gz.(interface {
			Flush() error
		}); ok {
			return f.Flush()
		}
	}
	return nil
}

// nameIfChanged returns name, unless it was the already the value of (*mp)[id],
// in which case it returns the empty string.
func (w *Writer) nameIfChanged(mp *map[int]string, id int, name string) string {
	if name == "" {
		return ""
	}
	if *mp == nil {
		*mp = make(map[int]string)
	}
	if (*mp)[id] == name {
		return ""
	}
	(*mp)[id] = name
	return name
}

func (w *Writer) condOpenGz() (err error) {
	if w.gz == nil {
		w.gz, err = w.compressor.Writer(w.cw)
		if w.gz != nil {
			w.gz = w.uncompressedCounter.register(w.gz)
		}
	}
	return
}

// AppendTar reads the tar or tar.gz file from r and appends
// each of its contents to w.
//
// The input r can optionally be gzip compressed but the output will
// always be compressed by the specified compressor.
func (w *Writer) AppendTar(r io.Reader) error {
	return w.appendTar(r, false)
}

// AppendTarLossLess reads the tar or tar.gz file from r and appends
// each of its contents to w.
//
// The input r can optionally be gzip compressed but the output will
// always be compressed by the specified compressor.
//
// The difference of this func with AppendTar is that this writes
// the input tar stream into w without any modification (e.g. to header bytes).
//
// Note that if the input tar stream already contains TOC JSON, this returns
// error because w cannot overwrite the TOC JSON to the one generated by w without
// lossy modification. To avoid this error, if the input stream is known to be stargz/estargz,
// you shoud decompress it and remove TOC JSON in advance.
func (w *Writer) AppendTarLossLess(r io.Reader) error {
	return w.appendTar(r, true)
}

func (w *Writer) appendTar(r io.Reader, lossless bool) error {
	var src io.Reader
	br := bufio.NewReader(r)
	if isGzip(br) {
		zr, _ := gzip.NewReader(br)
		src = zr
	} else {
		src = io.Reader(br)
	}
	dst := currentCompressionWriter{w}
	var tw *tar.Writer
	if !lossless {
		tw = tar.NewWriter(dst) // use tar writer only when this isn't lossless mode.
	}
	tr := tar.NewReader(src)
	if lossless {
		tr.RawAccounting = true
	}
	prevOffset := w.cw.n
	var prevOffsetUncompressed int64
	for {
		h, err := tr.Next()
		if err == io.EOF {
			if lossless {
				if remain := tr.RawBytes(); len(remain) > 0 {
					// Collect the remaining null bytes.
					// https://github.com/vbatts/tar-split/blob/80a436fd6164c557b131f7c59ed69bd81af69761/concept/main.go#L49-L53
					if _, err := dst.Write(remain); err != nil {
						return err
					}
				}
			}
			break
		}
		if err != nil {
			return fmt.Errorf("error reading from source tar: tar.Reader.Next: %v", err)
		}
		if cleanEntryName(h.Name) == TOCTarName {
			// It is possible for a layer to be "stargzified" twice during the
			// distribution lifecycle. So we reserve "TOCTarName" here to avoid
			// duplicated entries in the resulting layer.
			if lossless {
				// We cannot handle this in lossless way.
				return fmt.Errorf("existing TOC JSON is not allowed; decompress layer before append")
			}
			continue
		}

		xattrs := make(map[string][]byte)
		const xattrPAXRecordsPrefix = "SCHILY.xattr."
		if h.PAXRecords != nil {
			for k, v := range h.PAXRecords {
				if strings.HasPrefix(k, xattrPAXRecordsPrefix) {
					xattrs[k[len(xattrPAXRecordsPrefix):]] = []byte(v)
				}
			}
		}
		ent := &TOCEntry{
			Name:        h.Name,
			Mode:        h.Mode,
			UID:         h.Uid,
			GID:         h.Gid,
			Uname:       w.nameIfChanged(&w.lastUsername, h.Uid, h.Uname),
			Gname:       w.nameIfChanged(&w.lastGroupname, h.Gid, h.Gname),
			ModTime3339: formatModtime(h.ModTime),
			Xattrs:      xattrs,
		}
		if err := w.condOpenGz(); err != nil {
			return err
		}
		if tw != nil {
			if err := tw.WriteHeader(h); err != nil {
				return err
			}
		} else {
			if _, err := dst.Write(tr.RawBytes()); err != nil {
				return err
			}
		}
		switch h.Typeflag {
		case tar.TypeLink:
			ent.Type = "hardlink"
			ent.LinkName = h.Linkname
		case tar.TypeSymlink:
			ent.Type = "symlink"
			ent.LinkName = h.Linkname
		case tar.TypeDir:
			ent.Type = "dir"
		case tar.TypeReg:
			ent.Type = "reg"
			ent.Size = h.Size
		case tar.TypeChar:
			ent.Type = "char"
			ent.DevMajor = int(h.Devmajor)
			ent.DevMinor = int(h.Devminor)
		case tar.TypeBlock:
			ent.Type = "block"
			ent.DevMajor = int(h.Devmajor)
			ent.DevMinor = int(h.Devminor)
		case tar.TypeFifo:
			ent.Type = "fifo"
		default:
			return fmt.Errorf("unsupported input tar entry %q", h.Typeflag)
		}

		// We need to keep a reference to the TOC entry for regular files, so that we
		// can fill the digest later.
		var regFileEntry *TOCEntry
		var payloadDigest digest.Digester
		if h.Typeflag == tar.TypeReg {
			regFileEntry = ent
			payloadDigest = digest.Canonical.Digester()
		}

		if h.Typeflag == tar.TypeReg && ent.Size > 0 {
			var written int64
			totalSize := ent.Size // save it before we destroy ent
			tee := io.TeeReader(tr, payloadDigest.Hash())
			for written < totalSize {
				chunkSize := int64(w.chunkSize())
				remain := totalSize - written
				if remain < chunkSize {
					chunkSize = remain
				} else {
					ent.ChunkSize = chunkSize
				}

				// We flush the underlying compression writer here to correctly calculate "w.cw.n".
				if err := w.flushGz(); err != nil {
					return err
				}
				if w.needsOpenGz(ent) || w.cw.n-prevOffset >= int64(w.MinChunkSize) {
					if err := w.closeGz(); err != nil {
						return err
					}
					ent.Offset = w.cw.n
					prevOffset = ent.Offset
					prevOffsetUncompressed = w.uncompressedCounter.n
				} else {
					ent.Offset = prevOffset
					ent.InnerOffset = w.uncompressedCounter.n - prevOffsetUncompressed
				}

				ent.ChunkOffset = written
				chunkDigest := digest.Canonical.Digester()

				if err := w.condOpenGz(); err != nil {
					return err
				}

				teeChunk := io.TeeReader(tee, chunkDigest.Hash())
				var out io.Writer
				if tw != nil {
					out = tw
				} else {
					out = dst
				}
				if _, err := io.CopyN(out, teeChunk, chunkSize); err != nil {
					return fmt.Errorf("error copying %q: %v", h.Name, err)
				}
				ent.ChunkDigest = chunkDigest.Digest().String()
				w.toc.Entries = append(w.toc.Entries, ent)
				written += chunkSize
				ent = &TOCEntry{
					Name: h.Name,
					Type: "chunk",
				}
			}
		} else {
			w.toc.Entries = append(w.toc.Entries, ent)
		}
		if payloadDigest != nil {
			regFileEntry.Digest = payloadDigest.Digest().String()
		}
		if tw != nil {
			if err := tw.Flush(); err != nil {
				return err
			}
		}
	}
	remainDest := io.Discard
	if lossless {
		remainDest = dst // Preserve the remaining bytes in lossless mode
	}
	_, err := io.Copy(remainDest, src)
	return err
}

func (w *Writer) needsOpenGz(ent *TOCEntry) bool {
	if ent.Type != "reg" {
		return false
	}
	if w.needsOpenGzEntries == nil {
		return false
	}
	_, ok := w.needsOpenGzEntries[ent.Name]
	return ok
}

// DiffID returns the SHA-256 of the uncompressed tar bytes.
// It is only valid to call DiffID after Close.
func (w *Writer) DiffID() string {
	return fmt.Sprintf("sha256:%x", w.diffHash.Sum(nil))
}

func maxFooterSize(blobSize int64, decompressors ...Decompressor) (res int64) {
	for _, d := range decompressors {
		if s := d.FooterSize(); res < s && s <= blobSize {
			res = s
		}
	}
	return
}

func parseTOC(d Decompressor, sr *io.SectionReader, tocOff, tocSize int64, tocBytes []byte, opts openOpts) (*Reader, error) {
	if tocOff < 0 {
		// This means that TOC isn't contained in the blob.
		// We pass nil reader to ParseTOC and expect that ParseTOC acquire TOC from
		// the external location.
		start := time.Now()
		toc, tocDgst, err := d.ParseTOC(nil)
		if err != nil {
			return nil, err
		}
		if opts.telemetry != nil && opts.telemetry.GetTocLatency != nil {
			opts.telemetry.GetTocLatency(start)
		}
		if opts.telemetry != nil && opts.telemetry.DeserializeTocLatency != nil {
			opts.telemetry.DeserializeTocLatency(start)
		}
		return &Reader{
			sr:           sr,
			toc:          toc,
			tocDigest:    tocDgst,
			decompressor: d,
		}, nil
	}
	if len(tocBytes) > 0 {
		start := time.Now()
		toc, tocDgst, err := d.ParseTOC(bytes.NewReader(tocBytes))
		if err == nil {
			if opts.telemetry != nil && opts.telemetry.DeserializeTocLatency != nil {
				opts.telemetry.DeserializeTocLatency(start)
			}
			return &Reader{
				sr:           sr,
				toc:          toc,
				tocDigest:    tocDgst,
				decompressor: d,
			}, nil
		}
	}

	start := time.Now()
	tocBytes = make([]byte, tocSize)
	if _, err := sr.ReadAt(tocBytes, tocOff); err != nil {
		return nil, fmt.Errorf("error reading %d byte TOC targz: %v", len(tocBytes), err)
	}
	if opts.telemetry != nil && opts.telemetry.GetTocLatency != nil {
		opts.telemetry.GetTocLatency(start)
	}
	start = time.Now()
	toc, tocDgst, err := d.ParseTOC(bytes.NewReader(tocBytes))
	if err != nil {
		return nil, err
	}
	if opts.telemetry != nil && opts.telemetry.DeserializeTocLatency != nil {
		opts.telemetry.DeserializeTocLatency(start)
	}
	return &Reader{
		sr:           sr,
		toc:          toc,
		tocDigest:    tocDgst,
		decompressor: d,
	}, nil
}

func formatModtime(t time.Time) string {
	if t.IsZero() || t.Unix() == 0 {
		return ""
	}
	return t.UTC().Round(time.Second).Format(time.RFC3339)
}

func cleanEntryName(name string) string {
	// Use path.Clean to consistently deal with path separators across platforms.
	return strings.TrimPrefix(path.Clean("/"+name), "/")
}

// countWriter counts how many bytes have been written to its wrapped
// io.Writer.
type countWriter struct {
	w io.Writer
	n int64
}

func (cw *countWriter) Write(p []byte) (n int, err error) {
	n, err = cw.w.Write(p)
	cw.n += int64(n)
	return
}

type countWriteFlusher struct {
	io.WriteCloser
	n int64
}

func (wc *countWriteFlusher) register(w io.WriteCloser) io.WriteCloser {
	wc.WriteCloser = w
	return wc
}

func (wc *countWriteFlusher) Write(p []byte) (n int, err error) {
	n, err = wc.WriteCloser.Write(p)
	wc.n += int64(n)
	return
}

func (wc *countWriteFlusher) Flush() error {
	if f, ok := wc.WriteCloser.(interface {
		Flush() error
	}); ok {
		return f.Flush()
	}
	return nil
}

func (wc *countWriteFlusher) Close() error {
	err := wc.WriteCloser.Close()
	wc.WriteCloser = nil
	return err
}

// isGzip reports whether br is positioned right before an upcoming gzip stream.
// It does not consume any bytes from br.
func isGzip(br *bufio.Reader) bool {
	const (
		gzipID1     = 0x1f
		gzipID2     = 0x8b
		gzipDeflate = 8
	)
	peek, _ := br.Peek(3)
	return len(peek) >= 3 && peek[0] == gzipID1 && peek[1] == gzipID2 && peek[2] == gzipDeflate
}

func positive(n int64) int64 {
	if n < 0 {
		return 0
	}
	return n
}

type countReader struct {
	r io.Reader
	n int64
}

func (cr *countReader) Read(p []byte) (n int, err error) {
	n, err = cr.r.Read(p)
	cr.n += int64(n)
	return
}
   070701000002E5000081A4000000000000000000000001645E367C00001B2B000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/containerd/stargz-snapshotter/estargz/gzip.go   /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

/*
   Copyright 2019 The Go Authors. All rights reserved.
   Use of this source code is governed by a BSD-style
   license that can be found in the LICENSE file.
*/

package estargz

import (
	"archive/tar"
	"bytes"
	"compress/gzip"
	"encoding/binary"
	"encoding/json"
	"fmt"
	"hash"
	"io"
	"strconv"

	digest "github.com/opencontainers/go-digest"
)

type gzipCompression struct {
	*GzipCompressor
	*GzipDecompressor
}

func newGzipCompressionWithLevel(level int) Compression {
	return &gzipCompression{
		&GzipCompressor{level},
		&GzipDecompressor{},
	}
}

func NewGzipCompressor() *GzipCompressor {
	return &GzipCompressor{gzip.BestCompression}
}

func NewGzipCompressorWithLevel(level int) *GzipCompressor {
	return &GzipCompressor{level}
}

type GzipCompressor struct {
	compressionLevel int
}

func (gc *GzipCompressor) Writer(w io.Writer) (WriteFlushCloser, error) {
	return gzip.NewWriterLevel(w, gc.compressionLevel)
}

func (gc *GzipCompressor) WriteTOCAndFooter(w io.Writer, off int64, toc *JTOC, diffHash hash.Hash) (digest.Digest, error) {
	tocJSON, err := json.MarshalIndent(toc, "", "\t")
	if err != nil {
		return "", err
	}
	gz, _ := gzip.NewWriterLevel(w, gc.compressionLevel)
	gw := io.Writer(gz)
	if diffHash != nil {
		gw = io.MultiWriter(gz, diffHash)
	}
	tw := tar.NewWriter(gw)
	if err := tw.WriteHeader(&tar.Header{
		Typeflag: tar.TypeReg,
		Name:     TOCTarName,
		Size:     int64(len(tocJSON)),
	}); err != nil {
		return "", err
	}
	if _, err := tw.Write(tocJSON); err != nil {
		return "", err
	}

	if err := tw.Close(); err != nil {
		return "", err
	}
	if err := gz.Close(); err != nil {
		return "", err
	}
	if _, err := w.Write(gzipFooterBytes(off)); err != nil {
		return "", err
	}
	return digest.FromBytes(tocJSON), nil
}

// gzipFooterBytes returns the 51 bytes footer.
func gzipFooterBytes(tocOff int64) []byte {
	buf := bytes.NewBuffer(make([]byte, 0, FooterSize))
	gz, _ := gzip.NewWriterLevel(buf, gzip.NoCompression) // MUST be NoCompression to keep 51 bytes

	// Extra header indicating the offset of TOCJSON
	// https://tools.ietf.org/html/rfc1952#section-2.3.1.1
	header := make([]byte, 4)
	header[0], header[1] = 'S', 'G'
	subfield := fmt.Sprintf("%016xSTARGZ", tocOff)
	binary.LittleEndian.PutUint16(header[2:4], uint16(len(subfield))) // little-endian per RFC1952
	gz.Header.Extra = append(header, []byte(subfield)...)
	gz.Close()
	if buf.Len() != FooterSize {
		panic(fmt.Sprintf("footer buffer = %d, not %d", buf.Len(), FooterSize))
	}
	return buf.Bytes()
}

type GzipDecompressor struct{}

func (gz *GzipDecompressor) Reader(r io.Reader) (io.ReadCloser, error) {
	return gzip.NewReader(r)
}

func (gz *GzipDecompressor) ParseTOC(r io.Reader) (toc *JTOC, tocDgst digest.Digest, err error) {
	return parseTOCEStargz(r)
}

func (gz *GzipDecompressor) ParseFooter(p []byte) (blobPayloadSize, tocOffset, tocSize int64, err error) {
	if len(p) != FooterSize {
		return 0, 0, 0, fmt.Errorf("invalid length %d cannot be parsed", len(p))
	}
	zr, err := gzip.NewReader(bytes.NewReader(p))
	if err != nil {
		return 0, 0, 0, err
	}
	defer zr.Close()
	extra := zr.Header.Extra
	si1, si2, subfieldlen, subfield := extra[0], extra[1], extra[2:4], extra[4:]
	if si1 != 'S' || si2 != 'G' {
		return 0, 0, 0, fmt.Errorf("invalid subfield IDs: %q, %q; want E, S", si1, si2)
	}
	if slen := binary.LittleEndian.Uint16(subfieldlen); slen != uint16(16+len("STARGZ")) {
		return 0, 0, 0, fmt.Errorf("invalid length of subfield %d; want %d", slen, 16+len("STARGZ"))
	}
	if string(subfield[16:]) != "STARGZ" {
		return 0, 0, 0, fmt.Errorf("STARGZ magic string must be included in the footer subfield")
	}
	tocOffset, err = strconv.ParseInt(string(subfield[:16]), 16, 64)
	if err != nil {
		return 0, 0, 0, fmt.Errorf("legacy: failed to parse toc offset: %w", err)
	}
	return tocOffset, tocOffset, 0, nil
}

func (gz *GzipDecompressor) FooterSize() int64 {
	return FooterSize
}

func (gz *GzipDecompressor) DecompressTOC(r io.Reader) (tocJSON io.ReadCloser, err error) {
	return decompressTOCEStargz(r)
}

type LegacyGzipDecompressor struct{}

func (gz *LegacyGzipDecompressor) Reader(r io.Reader) (io.ReadCloser, error) {
	return gzip.NewReader(r)
}

func (gz *LegacyGzipDecompressor) ParseTOC(r io.Reader) (toc *JTOC, tocDgst digest.Digest, err error) {
	return parseTOCEStargz(r)
}

func (gz *LegacyGzipDecompressor) ParseFooter(p []byte) (blobPayloadSize, tocOffset, tocSize int64, err error) {
	if len(p) != legacyFooterSize {
		return 0, 0, 0, fmt.Errorf("legacy: invalid length %d cannot be parsed", len(p))
	}
	zr, err := gzip.NewReader(bytes.NewReader(p))
	if err != nil {
		return 0, 0, 0, fmt.Errorf("legacy: failed to get footer gzip reader: %w", err)
	}
	defer zr.Close()
	extra := zr.Header.Extra
	if len(extra) != 16+len("STARGZ") {
		return 0, 0, 0, fmt.Errorf("legacy: invalid stargz's extra field size")
	}
	if string(extra[16:]) != "STARGZ" {
		return 0, 0, 0, fmt.Errorf("legacy: magic string STARGZ not found")
	}
	tocOffset, err = strconv.ParseInt(string(extra[:16]), 16, 64)
	if err != nil {
		return 0, 0, 0, fmt.Errorf("legacy: failed to parse toc offset: %w", err)
	}
	return tocOffset, tocOffset, 0, nil
}

func (gz *LegacyGzipDecompressor) FooterSize() int64 {
	return legacyFooterSize
}

func (gz *LegacyGzipDecompressor) DecompressTOC(r io.Reader) (tocJSON io.ReadCloser, err error) {
	return decompressTOCEStargz(r)
}

func parseTOCEStargz(r io.Reader) (toc *JTOC, tocDgst digest.Digest, err error) {
	tr, err := decompressTOCEStargz(r)
	if err != nil {
		return nil, "", err
	}
	dgstr := digest.Canonical.Digester()
	toc = new(JTOC)
	if err := json.NewDecoder(io.TeeReader(tr, dgstr.Hash())).Decode(&toc); err != nil {
		return nil, "", fmt.Errorf("error decoding TOC JSON: %v", err)
	}
	if err := tr.Close(); err != nil {
		return nil, "", err
	}
	return toc, dgstr.Digest(), nil
}

func decompressTOCEStargz(r io.Reader) (tocJSON io.ReadCloser, err error) {
	zr, err := gzip.NewReader(r)
	if err != nil {
		return nil, fmt.Errorf("malformed TOC gzip header: %v", err)
	}
	zr.Multistream(false)
	tr := tar.NewReader(zr)
	h, err := tr.Next()
	if err != nil {
		return nil, fmt.Errorf("failed to find tar header in TOC gzip stream: %v", err)
	}
	if h.Name != TOCTarName {
		return nil, fmt.Errorf("TOC tar entry had name %q; expected %q", h.Name, TOCTarName)
	}
	return readCloser{tr, zr.Close}, nil
}
 070701000002E6000081A4000000000000000000000001645E367C00010FE6000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/containerd/stargz-snapshotter/estargz/testutil.go   /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

/*
   Copyright 2019 The Go Authors. All rights reserved.
   Use of this source code is governed by a BSD-style
   license that can be found in the LICENSE file.
*/

package estargz

import (
	"archive/tar"
	"bytes"
	"compress/gzip"
	"crypto/sha256"
	"encoding/json"
	"errors"
	"fmt"
	"io"
	"math/rand"
	"os"
	"path/filepath"
	"reflect"
	"sort"
	"strings"
	"testing"
	"time"

	"github.com/containerd/stargz-snapshotter/estargz/errorutil"
	"github.com/klauspost/compress/zstd"
	digest "github.com/opencontainers/go-digest"
)

func init() {
	rand.Seed(time.Now().UnixNano())
}

// TestingController is Compression with some helper methods necessary for testing.
type TestingController interface {
	Compression
	TestStreams(t *testing.T, b []byte, streams []int64)
	DiffIDOf(*testing.T, []byte) string
	String() string
}

// CompressionTestSuite tests this pkg with controllers can build valid eStargz blobs and parse them.
func CompressionTestSuite(t *testing.T, controllers ...TestingControllerFactory) {
	t.Run("testBuild", func(t *testing.T) { t.Parallel(); testBuild(t, controllers...) })
	t.Run("testDigestAndVerify", func(t *testing.T) { t.Parallel(); testDigestAndVerify(t, controllers...) })
	t.Run("testWriteAndOpen", func(t *testing.T) { t.Parallel(); testWriteAndOpen(t, controllers...) })
}

type TestingControllerFactory func() TestingController

const (
	uncompressedType int = iota
	gzipType
	zstdType
)

var srcCompressions = []int{
	uncompressedType,
	gzipType,
	zstdType,
}

var allowedPrefix = [4]string{"", "./", "/", "../"}

// testBuild tests the resulting stargz blob built by this pkg has the same
// contents as the normal stargz blob.
func testBuild(t *testing.T, controllers ...TestingControllerFactory) {
	tests := []struct {
		name         string
		chunkSize    int
		minChunkSize []int
		in           []tarEntry
	}{
		{
			name:      "regfiles and directories",
			chunkSize: 4,
			in: tarOf(
				file("foo", "test1"),
				dir("foo2/"),
				file("foo2/bar", "test2", xAttr(map[string]string{"test": "sample"})),
			),
		},
		{
			name:      "empty files",
			chunkSize: 4,
			in: tarOf(
				file("foo", "tttttt"),
				file("foo_empty", ""),
				file("foo2", "tttttt"),
				file("foo_empty2", ""),
				file("foo3", "tttttt"),
				file("foo_empty3", ""),
				file("foo4", "tttttt"),
				file("foo_empty4", ""),
				file("foo5", "tttttt"),
				file("foo_empty5", ""),
				file("foo6", "tttttt"),
			),
		},
		{
			name:         "various files",
			chunkSize:    4,
			minChunkSize: []int{0, 64000},
			in: tarOf(
				file("baz.txt", "bazbazbazbazbazbazbaz"),
				file("foo1.txt", "a"),
				file("bar/foo2.txt", "b"),
				file("foo3.txt", "c"),
				symlink("barlink", "test/bar.txt"),
				dir("test/"),
				dir("dev/"),
				blockdev("dev/testblock", 3, 4),
				fifo("dev/testfifo"),
				chardev("dev/testchar1", 5, 6),
				file("test/bar.txt", "testbartestbar", xAttr(map[string]string{"test2": "sample2"})),
				dir("test2/"),
				link("test2/bazlink", "baz.txt"),
				chardev("dev/testchar2", 1, 2),
			),
		},
		{
			name:      "no contents",
			chunkSize: 4,
			in: tarOf(
				file("baz.txt", ""),
				symlink("barlink", "test/bar.txt"),
				dir("test/"),
				dir("dev/"),
				blockdev("dev/testblock", 3, 4),
				fifo("dev/testfifo"),
				chardev("dev/testchar1", 5, 6),
				file("test/bar.txt", "", xAttr(map[string]string{"test2": "sample2"})),
				dir("test2/"),
				link("test2/bazlink", "baz.txt"),
				chardev("dev/testchar2", 1, 2),
			),
		},
	}
	for _, tt := range tests {
		if len(tt.minChunkSize) == 0 {
			tt.minChunkSize = []int{0}
		}
		for _, srcCompression := range srcCompressions {
			srcCompression := srcCompression
			for _, newCL := range controllers {
				newCL := newCL
				for _, srcTarFormat := range []tar.Format{tar.FormatUSTAR, tar.FormatPAX, tar.FormatGNU} {
					srcTarFormat := srcTarFormat
					for _, prefix := range allowedPrefix {
						prefix := prefix
						for _, minChunkSize := range tt.minChunkSize {
							minChunkSize := minChunkSize
							t.Run(tt.name+"-"+fmt.Sprintf("compression=%v,prefix=%q,src=%d,format=%s,minChunkSize=%d", newCL(), prefix, srcCompression, srcTarFormat, minChunkSize), func(t *testing.T) {
								tarBlob := buildTar(t, tt.in, prefix, srcTarFormat)
								// Test divideEntries()
								entries, err := sortEntries(tarBlob, nil, nil) // identical order
								if err != nil {
									t.Fatalf("failed to parse tar: %v", err)
								}
								var merged []*entry
								for _, part := range divideEntries(entries, 4) {
									merged = append(merged, part...)
								}
								if !reflect.DeepEqual(entries, merged) {
									for _, e := range entries {
										t.Logf("Original: %v", e.header)
									}
									for _, e := range merged {
										t.Logf("Merged: %v", e.header)
									}
									t.Errorf("divided entries couldn't be merged")
									return
								}

								// Prepare sample data
								cl1 := newCL()
								wantBuf := new(bytes.Buffer)
								sw := NewWriterWithCompressor(wantBuf, cl1)
								sw.MinChunkSize = minChunkSize
								sw.ChunkSize = tt.chunkSize
								if err := sw.AppendTar(tarBlob); err != nil {
									t.Fatalf("failed to append tar to want stargz: %v", err)
								}
								if _, err := sw.Close(); err != nil {
									t.Fatalf("failed to prepare want stargz: %v", err)
								}
								wantData := wantBuf.Bytes()
								want, err := Open(io.NewSectionReader(
									bytes.NewReader(wantData), 0, int64(len(wantData))),
									WithDecompressors(cl1),
								)
								if err != nil {
									t.Fatalf("failed to parse the want stargz: %v", err)
								}

								// Prepare testing data
								var opts []Option
								if minChunkSize > 0 {
									opts = append(opts, WithMinChunkSize(minChunkSize))
								}
								cl2 := newCL()
								rc, err := Build(compressBlob(t, tarBlob, srcCompression),
									append(opts, WithChunkSize(tt.chunkSize), WithCompression(cl2))...)
								if err != nil {
									t.Fatalf("failed to build stargz: %v", err)
								}
								defer rc.Close()
								gotBuf := new(bytes.Buffer)
								if _, err := io.Copy(gotBuf, rc); err != nil {
									t.Fatalf("failed to copy built stargz blob: %v", err)
								}
								gotData := gotBuf.Bytes()
								got, err := Open(io.NewSectionReader(
									bytes.NewReader(gotBuf.Bytes()), 0, int64(len(gotData))),
									WithDecompressors(cl2),
								)
								if err != nil {
									t.Fatalf("failed to parse the got stargz: %v", err)
								}

								// Check DiffID is properly calculated
								rc.Close()
								diffID := rc.DiffID()
								wantDiffID := cl2.DiffIDOf(t, gotData)
								if diffID.String() != wantDiffID {
									t.Errorf("DiffID = %q; want %q", diffID, wantDiffID)
								}

								// Compare as stargz
								if !isSameVersion(t, cl1, wantData, cl2, gotData) {
									t.Errorf("built stargz hasn't same json")
									return
								}
								if !isSameEntries(t, want, got) {
									t.Errorf("built stargz isn't same as the original")
									return
								}

								// Compare as tar.gz
								if !isSameTarGz(t, cl1, wantData, cl2, gotData) {
									t.Errorf("built stargz isn't same tar.gz")
									return
								}
							})
						}
					}
				}
			}
		}
	}
}

func isSameTarGz(t *testing.T, cla TestingController, a []byte, clb TestingController, b []byte) bool {
	aGz, err := cla.Reader(bytes.NewReader(a))
	if err != nil {
		t.Fatalf("failed to read A")
	}
	defer aGz.Close()
	bGz, err := clb.Reader(bytes.NewReader(b))
	if err != nil {
		t.Fatalf("failed to read B")
	}
	defer bGz.Close()

	// Same as tar's Next() method but ignores landmarks and TOCJSON file
	next := func(r *tar.Reader) (h *tar.Header, err error) {
		for {
			if h, err = r.Next(); err != nil {
				return
			}
			if h.Name != PrefetchLandmark &&
				h.Name != NoPrefetchLandmark &&
				h.Name != TOCTarName {
				return
			}
		}
	}

	aTar := tar.NewReader(aGz)
	bTar := tar.NewReader(bGz)
	for {
		// Fetch and parse next header.
		aH, aErr := next(aTar)
		bH, bErr := next(bTar)
		if aErr != nil || bErr != nil {
			if aErr == io.EOF && bErr == io.EOF {
				break
			}
			t.Fatalf("Failed to parse tar file: A: %v, B: %v", aErr, bErr)
		}
		if !reflect.DeepEqual(aH, bH) {
			t.Logf("different header (A = %v; B = %v)", aH, bH)
			return false

		}
		aFile, err := io.ReadAll(aTar)
		if err != nil {
			t.Fatal("failed to read tar payload of A")
		}
		bFile, err := io.ReadAll(bTar)
		if err != nil {
			t.Fatal("failed to read tar payload of B")
		}
		if !bytes.Equal(aFile, bFile) {
			t.Logf("different tar payload (A = %q; B = %q)", string(a), string(b))
			return false
		}
	}

	return true
}

func isSameVersion(t *testing.T, cla TestingController, a []byte, clb TestingController, b []byte) bool {
	aJTOC, _, err := parseStargz(io.NewSectionReader(bytes.NewReader(a), 0, int64(len(a))), cla)
	if err != nil {
		t.Fatalf("failed to parse A: %v", err)
	}
	bJTOC, _, err := parseStargz(io.NewSectionReader(bytes.NewReader(b), 0, int64(len(b))), clb)
	if err != nil {
		t.Fatalf("failed to parse B: %v", err)
	}
	t.Logf("A: TOCJSON: %v", dumpTOCJSON(t, aJTOC))
	t.Logf("B: TOCJSON: %v", dumpTOCJSON(t, bJTOC))
	return aJTOC.Version == bJTOC.Version
}

func isSameEntries(t *testing.T, a, b *Reader) bool {
	aroot, ok := a.Lookup("")
	if !ok {
		t.Fatalf("failed to get root of A")
	}
	broot, ok := b.Lookup("")
	if !ok {
		t.Fatalf("failed to get root of B")
	}
	aEntry := stargzEntry{aroot, a}
	bEntry := stargzEntry{broot, b}
	return contains(t, aEntry, bEntry) && contains(t, bEntry, aEntry)
}

func compressBlob(t *testing.T, src *io.SectionReader, srcCompression int) *io.SectionReader {
	buf := new(bytes.Buffer)
	var w io.WriteCloser
	var err error
	if srcCompression == gzipType {
		w = gzip.NewWriter(buf)
	} else if srcCompression == zstdType {
		w, err = zstd.NewWriter(buf)
		if err != nil {
			t.Fatalf("failed to init zstd writer: %v", err)
		}
	} else {
		return src
	}
	src.Seek(0, io.SeekStart)
	if _, err := io.Copy(w, src); err != nil {
		t.Fatalf("failed to compress source")
	}
	if err := w.Close(); err != nil {
		t.Fatalf("failed to finalize compress source")
	}
	data := buf.Bytes()
	return io.NewSectionReader(bytes.NewReader(data), 0, int64(len(data)))

}

type stargzEntry struct {
	e *TOCEntry
	r *Reader
}

// contains checks if all child entries in "b" are also contained in "a".
// This function also checks if the files/chunks contain the same contents among "a" and "b".
func contains(t *testing.T, a, b stargzEntry) bool {
	ae, ar := a.e, a.r
	be, br := b.e, b.r
	t.Logf("Comparing: %q vs %q", ae.Name, be.Name)
	if !equalEntry(ae, be) {
		t.Logf("%q != %q: entry: a: %v, b: %v", ae.Name, be.Name, ae, be)
		return false
	}
	if ae.Type == "dir" {
		t.Logf("Directory: %q vs %q: %v vs %v", ae.Name, be.Name,
			allChildrenName(ae), allChildrenName(be))
		iscontain := true
		ae.ForeachChild(func(aBaseName string, aChild *TOCEntry) bool {
			// Walk through all files on this stargz file.

			if aChild.Name == PrefetchLandmark ||
				aChild.Name == NoPrefetchLandmark {
				return true // Ignore landmarks
			}

			// Ignore a TOCEntry of "./" (formated as "" by stargz lib) on root directory
			// because this points to the root directory itself.
			if aChild.Name == "" && ae.Name == "" {
				return true
			}

			bChild, ok := be.LookupChild(aBaseName)
			if !ok {
				t.Logf("%q (base: %q): not found in b: %v",
					ae.Name, aBaseName, allChildrenName(be))
				iscontain = false
				return false
			}

			childcontain := contains(t, stargzEntry{aChild, a.r}, stargzEntry{bChild, b.r})
			if !childcontain {
				t.Logf("%q != %q: non-equal dir", ae.Name, be.Name)
				iscontain = false
				return false
			}
			return true
		})
		return iscontain
	} else if ae.Type == "reg" {
		af, err := ar.OpenFile(ae.Name)
		if err != nil {
			t.Fatalf("failed to open file %q on A: %v", ae.Name, err)
		}
		bf, err := br.OpenFile(be.Name)
		if err != nil {
			t.Fatalf("failed to open file %q on B: %v", be.Name, err)
		}

		var nr int64
		for nr < ae.Size {
			abytes, anext, aok := readOffset(t, af, nr, a)
			bbytes, bnext, bok := readOffset(t, bf, nr, b)
			if !aok && !bok {
				break
			} else if !(aok && bok) || anext != bnext {
				t.Logf("%q != %q (offset=%d): chunk existence a=%v vs b=%v, anext=%v vs bnext=%v",
					ae.Name, be.Name, nr, aok, bok, anext, bnext)
				return false
			}
			nr = anext
			if !bytes.Equal(abytes, bbytes) {
				t.Logf("%q != %q: different contents %v vs %v",
					ae.Name, be.Name, string(abytes), string(bbytes))
				return false
			}
		}
		return true
	}

	return true
}

func allChildrenName(e *TOCEntry) (children []string) {
	e.ForeachChild(func(baseName string, _ *TOCEntry) bool {
		children = append(children, baseName)
		return true
	})
	return
}

func equalEntry(a, b *TOCEntry) bool {
	// Here, we selectively compare fileds that we are interested in.
	return a.Name == b.Name &&
		a.Type == b.Type &&
		a.Size == b.Size &&
		a.ModTime3339 == b.ModTime3339 &&
		a.Stat().ModTime().Equal(b.Stat().ModTime()) && // modTime     time.Time
		a.LinkName == b.LinkName &&
		a.Mode == b.Mode &&
		a.UID == b.UID &&
		a.GID == b.GID &&
		a.Uname == b.Uname &&
		a.Gname == b.Gname &&
		(a.Offset >= 0) == (b.Offset >= 0) &&
		(a.NextOffset() > 0) == (b.NextOffset() > 0) &&
		a.DevMajor == b.DevMajor &&
		a.DevMinor == b.DevMinor &&
		a.NumLink == b.NumLink &&
		reflect.DeepEqual(a.Xattrs, b.Xattrs) &&
		// chunk-related infomations aren't compared in this function.
		// ChunkOffset int64 `json:"chunkOffset,omitempty"`
		// ChunkSize   int64 `json:"chunkSize,omitempty"`
		// children map[string]*TOCEntry
		a.Digest == b.Digest
}

func readOffset(t *testing.T, r *io.SectionReader, offset int64, e stargzEntry) ([]byte, int64, bool) {
	ce, ok := e.r.ChunkEntryForOffset(e.e.Name, offset)
	if !ok {
		return nil, 0, false
	}
	data := make([]byte, ce.ChunkSize)
	t.Logf("Offset: %v, NextOffset: %v", ce.Offset, ce.NextOffset())
	n, err := r.ReadAt(data, ce.ChunkOffset)
	if err != nil {
		t.Fatalf("failed to read file payload of %q (offset:%d,size:%d): %v",
			e.e.Name, ce.ChunkOffset, ce.ChunkSize, err)
	}
	if int64(n) != ce.ChunkSize {
		t.Fatalf("unexpected copied data size %d; want %d",
			n, ce.ChunkSize)
	}
	return data[:n], offset + ce.ChunkSize, true
}

func dumpTOCJSON(t *testing.T, tocJSON *JTOC) string {
	jtocData, err := json.Marshal(*tocJSON)
	if err != nil {
		t.Fatalf("failed to marshal TOC JSON: %v", err)
	}
	buf := new(bytes.Buffer)
	if _, err := io.Copy(buf, bytes.NewReader(jtocData)); err != nil {
		t.Fatalf("failed to read toc json blob: %v", err)
	}
	return buf.String()
}

const chunkSize = 3

// type check func(t *testing.T, sgzData []byte, tocDigest digest.Digest, dgstMap map[string]digest.Digest, compressionLevel int)
type check func(t *testing.T, sgzData []byte, tocDigest digest.Digest, dgstMap map[string]digest.Digest, controller TestingController, newController TestingControllerFactory)

// testDigestAndVerify runs specified checks against sample stargz blobs.
func testDigestAndVerify(t *testing.T, controllers ...TestingControllerFactory) {
	tests := []struct {
		name         string
		tarInit      func(t *testing.T, dgstMap map[string]digest.Digest) (blob []tarEntry)
		checks       []check
		minChunkSize []int
	}{
		{
			name: "no-regfile",
			tarInit: func(t *testing.T, dgstMap map[string]digest.Digest) (blob []tarEntry) {
				return tarOf(
					dir("test/"),
				)
			},
			checks: []check{
				checkStargzTOC,
				checkVerifyTOC,
				checkVerifyInvalidStargzFail(buildTar(t, tarOf(
					dir("test2/"), // modified
				), allowedPrefix[0])),
			},
		},
		{
			name: "small-files",
			tarInit: func(t *testing.T, dgstMap map[string]digest.Digest) (blob []tarEntry) {
				return tarOf(
					regDigest(t, "baz.txt", "", dgstMap),
					regDigest(t, "foo.txt", "a", dgstMap),
					dir("test/"),
					regDigest(t, "test/bar.txt", "bbb", dgstMap),
				)
			},
			minChunkSize: []int{0, 64000},
			checks: []check{
				checkStargzTOC,
				checkVerifyTOC,
				checkVerifyInvalidStargzFail(buildTar(t, tarOf(
					file("baz.txt", ""),
					file("foo.txt", "M"), // modified
					dir("test/"),
					file("test/bar.txt", "bbb"),
				), allowedPrefix[0])),
				// checkVerifyInvalidTOCEntryFail("foo.txt"), // TODO
				checkVerifyBrokenContentFail("foo.txt"),
			},
		},
		{
			name: "big-files",
			tarInit: func(t *testing.T, dgstMap map[string]digest.Digest) (blob []tarEntry) {
				return tarOf(
					regDigest(t, "baz.txt", "bazbazbazbazbazbazbaz", dgstMap),
					regDigest(t, "foo.txt", "a", dgstMap),
					dir("test/"),
					regDigest(t, "test/bar.txt", "testbartestbar", dgstMap),
				)
			},
			checks: []check{
				checkStargzTOC,
				checkVerifyTOC,
				checkVerifyInvalidStargzFail(buildTar(t, tarOf(
					file("baz.txt", "bazbazbazMMMbazbazbaz"), // modified
					file("foo.txt", "a"),
					dir("test/"),
					file("test/bar.txt", "testbartestbar"),
				), allowedPrefix[0])),
				checkVerifyInvalidTOCEntryFail("test/bar.txt"),
				checkVerifyBrokenContentFail("test/bar.txt"),
			},
		},
		{
			name:         "with-non-regfiles",
			minChunkSize: []int{0, 64000},
			tarInit: func(t *testing.T, dgstMap map[string]digest.Digest) (blob []tarEntry) {
				return tarOf(
					regDigest(t, "baz.txt", "bazbazbazbazbazbazbaz", dgstMap),
					regDigest(t, "foo.txt", "a", dgstMap),
					regDigest(t, "bar/foo2.txt", "b", dgstMap),
					regDigest(t, "foo3.txt", "c", dgstMap),
					symlink("barlink", "test/bar.txt"),
					dir("test/"),
					regDigest(t, "test/bar.txt", "testbartestbar", dgstMap),
					dir("test2/"),
					link("test2/bazlink", "baz.txt"),
				)
			},
			checks: []check{
				checkStargzTOC,
				checkVerifyTOC,
				checkVerifyInvalidStargzFail(buildTar(t, tarOf(
					file("baz.txt", "bazbazbazbazbazbazbaz"),
					file("foo.txt", "a"),
					file("bar/foo2.txt", "b"),
					file("foo3.txt", "c"),
					symlink("barlink", "test/bar.txt"),
					dir("test/"),
					file("test/bar.txt", "testbartestbar"),
					dir("test2/"),
					link("test2/bazlink", "foo.txt"), // modified
				), allowedPrefix[0])),
				checkVerifyInvalidTOCEntryFail("test/bar.txt"),
				checkVerifyBrokenContentFail("test/bar.txt"),
			},
		},
	}

	for _, tt := range tests {
		if len(tt.minChunkSize) == 0 {
			tt.minChunkSize = []int{0}
		}
		for _, srcCompression := range srcCompressions {
			srcCompression := srcCompression
			for _, newCL := range controllers {
				newCL := newCL
				for _, prefix := range allowedPrefix {
					prefix := prefix
					for _, srcTarFormat := range []tar.Format{tar.FormatUSTAR, tar.FormatPAX, tar.FormatGNU} {
						srcTarFormat := srcTarFormat
						for _, minChunkSize := range tt.minChunkSize {
							minChunkSize := minChunkSize
							t.Run(tt.name+"-"+fmt.Sprintf("compression=%v,prefix=%q,format=%s,minChunkSize=%d", newCL(), prefix, srcTarFormat, minChunkSize), func(t *testing.T) {
								// Get original tar file and chunk digests
								dgstMap := make(map[string]digest.Digest)
								tarBlob := buildTar(t, tt.tarInit(t, dgstMap), prefix, srcTarFormat)

								cl := newCL()
								rc, err := Build(compressBlob(t, tarBlob, srcCompression),
									WithChunkSize(chunkSize), WithCompression(cl))
								if err != nil {
									t.Fatalf("failed to convert stargz: %v", err)
								}
								tocDigest := rc.TOCDigest()
								defer rc.Close()
								buf := new(bytes.Buffer)
								if _, err := io.Copy(buf, rc); err != nil {
									t.Fatalf("failed to copy built stargz blob: %v", err)
								}
								newStargz := buf.Bytes()
								// NoPrefetchLandmark is added during `Bulid`, which is expected behaviour.
								dgstMap[chunkID(NoPrefetchLandmark, 0, int64(len([]byte{landmarkContents})))] = digest.FromBytes([]byte{landmarkContents})

								for _, check := range tt.checks {
									check(t, newStargz, tocDigest, dgstMap, cl, newCL)
								}
							})
						}
					}
				}
			}
		}
	}
}

// checkStargzTOC checks the TOC JSON of the passed stargz has the expected
// digest and contains valid chunks. It walks all entries in the stargz and
// checks all chunk digests stored to the TOC JSON match the actual contents.
func checkStargzTOC(t *testing.T, sgzData []byte, tocDigest digest.Digest, dgstMap map[string]digest.Digest, controller TestingController, newController TestingControllerFactory) {
	sgz, err := Open(
		io.NewSectionReader(bytes.NewReader(sgzData), 0, int64(len(sgzData))),
		WithDecompressors(controller),
	)
	if err != nil {
		t.Errorf("failed to parse converted stargz: %v", err)
		return
	}
	digestMapTOC, err := listDigests(io.NewSectionReader(
		bytes.NewReader(sgzData), 0, int64(len(sgzData))),
		controller,
	)
	if err != nil {
		t.Fatalf("failed to list digest: %v", err)
	}
	found := make(map[string]bool)
	for id := range dgstMap {
		found[id] = false
	}
	zr, err := controller.Reader(bytes.NewReader(sgzData))
	if err != nil {
		t.Fatalf("failed to decompress converted stargz: %v", err)
	}
	defer zr.Close()
	tr := tar.NewReader(zr)
	for {
		h, err := tr.Next()
		if err != nil {
			if err != io.EOF {
				t.Errorf("failed to read tar entry: %v", err)
				return
			}
			break
		}
		if h.Name == TOCTarName {
			// Check the digest of TOC JSON based on the actual contents
			// It's sure that TOC JSON exists in this archive because
			// Open succeeded.
			dgstr := digest.Canonical.Digester()
			if _, err := io.Copy(dgstr.Hash(), tr); err != nil {
				t.Fatalf("failed to calculate digest of TOC JSON: %v",
					err)
			}
			if dgstr.Digest() != tocDigest {
				t.Errorf("invalid TOC JSON %q; want %q", tocDigest, dgstr.Digest())
			}
			continue
		}
		if _, ok := sgz.Lookup(h.Name); !ok {
			t.Errorf("lost stargz entry %q in the converted TOC", h.Name)
			return
		}
		var n int64
		for n < h.Size {
			ce, ok := sgz.ChunkEntryForOffset(h.Name, n)
			if !ok {
				t.Errorf("lost chunk %q(offset=%d) in the converted TOC",
					h.Name, n)
				return
			}

			// Get the original digest to make sure the file contents are kept unchanged
			// from the original tar, during the whole conversion steps.
			id := chunkID(h.Name, n, ce.ChunkSize)
			want, ok := dgstMap[id]
			if !ok {
				t.Errorf("Unexpected chunk %q(offset=%d,size=%d): %v",
					h.Name, n, ce.ChunkSize, dgstMap)
				return
			}
			found[id] = true

			// Check the file contents
			dgstr := digest.Canonical.Digester()
			if _, err := io.CopyN(dgstr.Hash(), tr, ce.ChunkSize); err != nil {
				t.Fatalf("failed to calculate digest of %q (offset=%d,size=%d)",
					h.Name, n, ce.ChunkSize)
			}
			if want != dgstr.Digest() {
				t.Errorf("Invalid contents in converted stargz %q: %q; want %q",
					h.Name, dgstr.Digest(), want)
				return
			}

			// Check the digest stored in TOC JSON
			dgstTOC, ok := digestMapTOC[ce.Offset]
			if !ok {
				t.Errorf("digest of %q(offset=%d,size=%d,chunkOffset=%d) isn't registered",
					h.Name, ce.Offset, ce.ChunkSize, ce.ChunkOffset)
			}
			if want != dgstTOC {
				t.Errorf("Invalid digest in TOCEntry %q: %q; want %q",
					h.Name, dgstTOC, want)
				return
			}

			n += ce.ChunkSize
		}
	}

	for id, ok := range found {
		if !ok {
			t.Errorf("required chunk %q not found in the converted stargz: %v", id, found)
		}
	}
}

// checkVerifyTOC checks the verification works for the TOC JSON of the passed
// stargz. It walks all entries in the stargz and checks the verifications for
// all chunks work.
func checkVerifyTOC(t *testing.T, sgzData []byte, tocDigest digest.Digest, dgstMap map[string]digest.Digest, controller TestingController, newController TestingControllerFactory) {
	sgz, err := Open(
		io.NewSectionReader(bytes.NewReader(sgzData), 0, int64(len(sgzData))),
		WithDecompressors(controller),
	)
	if err != nil {
		t.Errorf("failed to parse converted stargz: %v", err)
		return
	}
	ev, err := sgz.VerifyTOC(tocDigest)
	if err != nil {
		t.Errorf("failed to verify stargz: %v", err)
		return
	}

	found := make(map[string]bool)
	for id := range dgstMap {
		found[id] = false
	}
	zr, err := controller.Reader(bytes.NewReader(sgzData))
	if err != nil {
		t.Fatalf("failed to decompress converted stargz: %v", err)
	}
	defer zr.Close()
	tr := tar.NewReader(zr)
	for {
		h, err := tr.Next()
		if err != nil {
			if err != io.EOF {
				t.Errorf("failed to read tar entry: %v", err)
				return
			}
			break
		}
		if h.Name == TOCTarName {
			continue
		}
		if _, ok := sgz.Lookup(h.Name); !ok {
			t.Errorf("lost stargz entry %q in the converted TOC", h.Name)
			return
		}
		var n int64
		for n < h.Size {
			ce, ok := sgz.ChunkEntryForOffset(h.Name, n)
			if !ok {
				t.Errorf("lost chunk %q(offset=%d) in the converted TOC",
					h.Name, n)
				return
			}

			v, err := ev.Verifier(ce)
			if err != nil {
				t.Errorf("failed to get verifier for %q(offset=%d)", h.Name, n)
			}

			found[chunkID(h.Name, n, ce.ChunkSize)] = true

			// Check the file contents
			if _, err := io.CopyN(v, tr, ce.ChunkSize); err != nil {
				t.Fatalf("failed to get chunk of %q (offset=%d,size=%d)",
					h.Name, n, ce.ChunkSize)
			}
			if !v.Verified() {
				t.Errorf("Invalid contents in converted stargz %q (should be succeeded)",
					h.Name)
				return
			}
			n += ce.ChunkSize
		}
	}

	for id, ok := range found {
		if !ok {
			t.Errorf("required chunk %q not found in the converted stargz: %v", id, found)
		}
	}
}

// checkVerifyInvalidTOCEntryFail checks if misconfigured TOC JSON can be
// detected during the verification and the verification returns an error.
func checkVerifyInvalidTOCEntryFail(filename string) check {
	return func(t *testing.T, sgzData []byte, tocDigest digest.Digest, dgstMap map[string]digest.Digest, controller TestingController, newController TestingControllerFactory) {
		funcs := map[string]rewriteFunc{
			"lost digest in a entry": func(t *testing.T, toc *JTOC, sgz *io.SectionReader) {
				var found bool
				for _, e := range toc.Entries {
					if cleanEntryName(e.Name) == filename {
						if e.Type != "reg" && e.Type != "chunk" {
							t.Fatalf("entry %q to break must be regfile or chunk", filename)
						}
						if e.ChunkDigest == "" {
							t.Fatalf("entry %q is already invalid", filename)
						}
						e.ChunkDigest = ""
						found = true
					}
				}
				if !found {
					t.Fatalf("rewrite target not found")
				}
			},
			"duplicated entry offset": func(t *testing.T, toc *JTOC, sgz *io.SectionReader) {
				var (
					sampleEntry *TOCEntry
					targetEntry *TOCEntry
				)
				for _, e := range toc.Entries {
					if e.Type == "reg" || e.Type == "chunk" {
						if cleanEntryName(e.Name) == filename {
							targetEntry = e
						} else {
							sampleEntry = e
						}
					}
				}
				if sampleEntry == nil {
					t.Fatalf("TOC must contain at least one regfile or chunk entry other than the rewrite target")
				}
				if targetEntry == nil {
					t.Fatalf("rewrite target not found")
				}
				targetEntry.Offset = sampleEntry.Offset
			},
		}

		for name, rFunc := range funcs {
			t.Run(name, func(t *testing.T) {
				newSgz, newTocDigest := rewriteTOCJSON(t, io.NewSectionReader(bytes.NewReader(sgzData), 0, int64(len(sgzData))), rFunc, controller)
				buf := new(bytes.Buffer)
				if _, err := io.Copy(buf, newSgz); err != nil {
					t.Fatalf("failed to get converted stargz")
				}
				isgz := buf.Bytes()

				sgz, err := Open(
					io.NewSectionReader(bytes.NewReader(isgz), 0, int64(len(isgz))),
					WithDecompressors(controller),
				)
				if err != nil {
					t.Fatalf("failed to parse converted stargz: %v", err)
					return
				}
				_, err = sgz.VerifyTOC(newTocDigest)
				if err == nil {
					t.Errorf("must fail for invalid TOC")
					return
				}
			})
		}
	}
}

// checkVerifyInvalidStargzFail checks if the verification detects that the
// given stargz file doesn't match to the expected digest and returns error.
func checkVerifyInvalidStargzFail(invalid *io.SectionReader) check {
	return func(t *testing.T, sgzData []byte, tocDigest digest.Digest, dgstMap map[string]digest.Digest, controller TestingController, newController TestingControllerFactory) {
		cl := newController()
		rc, err := Build(invalid, WithChunkSize(chunkSize), WithCompression(cl))
		if err != nil {
			t.Fatalf("failed to convert stargz: %v", err)
		}
		defer rc.Close()
		buf := new(bytes.Buffer)
		if _, err := io.Copy(buf, rc); err != nil {
			t.Fatalf("failed to copy built stargz blob: %v", err)
		}
		mStargz := buf.Bytes()

		sgz, err := Open(
			io.NewSectionReader(bytes.NewReader(mStargz), 0, int64(len(mStargz))),
			WithDecompressors(cl),
		)
		if err != nil {
			t.Fatalf("failed to parse converted stargz: %v", err)
			return
		}
		_, err = sgz.VerifyTOC(tocDigest)
		if err == nil {
			t.Errorf("must fail for invalid TOC")
			return
		}
	}
}

// checkVerifyBrokenContentFail checks if the verifier detects broken contents
// that doesn't match to the expected digest and returns error.
func checkVerifyBrokenContentFail(filename string) check {
	return func(t *testing.T, sgzData []byte, tocDigest digest.Digest, dgstMap map[string]digest.Digest, controller TestingController, newController TestingControllerFactory) {
		// Parse stargz file
		sgz, err := Open(
			io.NewSectionReader(bytes.NewReader(sgzData), 0, int64(len(sgzData))),
			WithDecompressors(controller),
		)
		if err != nil {
			t.Fatalf("failed to parse converted stargz: %v", err)
			return
		}
		ev, err := sgz.VerifyTOC(tocDigest)
		if err != nil {
			t.Fatalf("failed to verify stargz: %v", err)
			return
		}

		// Open the target file
		sr, err := sgz.OpenFile(filename)
		if err != nil {
			t.Fatalf("failed to open file %q", filename)
		}
		ce, ok := sgz.ChunkEntryForOffset(filename, 0)
		if !ok {
			t.Fatalf("lost chunk %q(offset=%d) in the converted TOC", filename, 0)
			return
		}
		if ce.ChunkSize == 0 {
			t.Fatalf("file mustn't be empty")
			return
		}
		data := make([]byte, ce.ChunkSize)
		if _, err := sr.ReadAt(data, ce.ChunkOffset); err != nil {
			t.Errorf("failed to get data of a chunk of %q(offset=%q)",
				filename, ce.ChunkOffset)
		}

		// Check the broken chunk (must fail)
		v, err := ev.Verifier(ce)
		if err != nil {
			t.Fatalf("failed to get verifier for %q", filename)
		}
		broken := append([]byte{^data[0]}, data[1:]...)
		if _, err := io.CopyN(v, bytes.NewReader(broken), ce.ChunkSize); err != nil {
			t.Fatalf("failed to get chunk of %q (offset=%d,size=%d)",
				filename, ce.ChunkOffset, ce.ChunkSize)
		}
		if v.Verified() {
			t.Errorf("verification must fail for broken file chunk %q(org:%q,broken:%q)",
				filename, data, broken)
		}
	}
}

func chunkID(name string, offset, size int64) string {
	return fmt.Sprintf("%s-%d-%d", cleanEntryName(name), offset, size)
}

type rewriteFunc func(t *testing.T, toc *JTOC, sgz *io.SectionReader)

func rewriteTOCJSON(t *testing.T, sgz *io.SectionReader, rewrite rewriteFunc, controller TestingController) (newSgz io.Reader, tocDigest digest.Digest) {
	decodedJTOC, jtocOffset, err := parseStargz(sgz, controller)
	if err != nil {
		t.Fatalf("failed to extract TOC JSON: %v", err)
	}

	rewrite(t, decodedJTOC, sgz)

	tocFooter, tocDigest, err := tocAndFooter(controller, decodedJTOC, jtocOffset)
	if err != nil {
		t.Fatalf("failed to create toc and footer: %v", err)
	}

	// Reconstruct stargz file with the modified TOC JSON
	if _, err := sgz.Seek(0, io.SeekStart); err != nil {
		t.Fatalf("failed to reset the seek position of stargz: %v", err)
	}
	return io.MultiReader(
		io.LimitReader(sgz, jtocOffset), // Original stargz (before TOC JSON)
		tocFooter,                       // Rewritten TOC and footer
	), tocDigest
}

func listDigests(sgz *io.SectionReader, controller TestingController) (map[int64]digest.Digest, error) {
	decodedJTOC, _, err := parseStargz(sgz, controller)
	if err != nil {
		return nil, err
	}
	digestMap := make(map[int64]digest.Digest)
	for _, e := range decodedJTOC.Entries {
		if e.Type == "reg" || e.Type == "chunk" {
			if e.Type == "reg" && e.Size == 0 {
				continue // ignores empty file
			}
			if e.ChunkDigest == "" {
				return nil, fmt.Errorf("ChunkDigest of %q(off=%d) not found in TOC JSON",
					e.Name, e.Offset)
			}
			d, err := digest.Parse(e.ChunkDigest)
			if err != nil {
				return nil, err
			}
			digestMap[e.Offset] = d
		}
	}
	return digestMap, nil
}

func parseStargz(sgz *io.SectionReader, controller TestingController) (decodedJTOC *JTOC, jtocOffset int64, err error) {
	fSize := controller.FooterSize()
	footer := make([]byte, fSize)
	if _, err := sgz.ReadAt(footer, sgz.Size()-fSize); err != nil {
		return nil, 0, fmt.Errorf("error reading footer: %w", err)
	}
	_, tocOffset, _, err := controller.ParseFooter(footer[positive(int64(len(footer))-fSize):])
	if err != nil {
		return nil, 0, fmt.Errorf("failed to parse footer: %w", err)
	}

	// Decode the TOC JSON
	var tocReader io.Reader
	if tocOffset >= 0 {
		tocReader = io.NewSectionReader(sgz, tocOffset, sgz.Size()-tocOffset-fSize)
	}
	decodedJTOC, _, err = controller.ParseTOC(tocReader)
	if err != nil {
		return nil, 0, fmt.Errorf("failed to parse TOC: %w", err)
	}
	return decodedJTOC, tocOffset, nil
}

func testWriteAndOpen(t *testing.T, controllers ...TestingControllerFactory) {
	const content = "Some contents"
	invalidUtf8 := "\xff\xfe\xfd"

	xAttrFile := xAttr{"foo": "bar", "invalid-utf8": invalidUtf8}
	sampleOwner := owner{uid: 50, gid: 100}

	data64KB := randomContents(64000)

	tests := []struct {
		name         string
		chunkSize    int
		minChunkSize int
		in           []tarEntry
		want         []stargzCheck
		wantNumGz    int // expected number of streams

		wantNumGzLossLess  int // expected number of streams (> 0) in lossless mode if it's different from wantNumGz
		wantFailOnLossLess bool
		wantTOCVersion     int // default = 1
	}{
		{
			name:      "empty",
			in:        tarOf(),
			wantNumGz: 2, // (empty tar) + TOC + footer
			want: checks(
				numTOCEntries(0),
			),
		},
		{
			name: "1dir_1empty_file",
			in: tarOf(
				dir("foo/"),
				file("foo/bar.txt", ""),
			),
			wantNumGz: 3, // dir, TOC, footer
			want: checks(
				numTOCEntries(2),
				hasDir("foo/"),
				hasFileLen("foo/bar.txt", 0),
				entryHasChildren("foo", "bar.txt"),
				hasFileDigest("foo/bar.txt", digestFor("")),
			),
		},
		{
			name: "1dir_1file",
			in: tarOf(
				dir("foo/"),
				file("foo/bar.txt", content, xAttrFile),
			),
			wantNumGz: 4, // var dir, foo.txt alone, TOC, footer
			want: checks(
				numTOCEntries(2),
				hasDir("foo/"),
				hasFileLen("foo/bar.txt", len(content)),
				hasFileDigest("foo/bar.txt", digestFor(content)),
				hasFileContentsRange("foo/bar.txt", 0, content),
				hasFileContentsRange("foo/bar.txt", 1, content[1:]),
				entryHasChildren("", "foo"),
				entryHasChildren("foo", "bar.txt"),
				hasFileXattrs("foo/bar.txt", "foo", "bar"),
				hasFileXattrs("foo/bar.txt", "invalid-utf8", invalidUtf8),
			),
		},
		{
			name: "2meta_2file",
			in: tarOf(
				dir("bar/", sampleOwner),
				dir("foo/", sampleOwner),
				file("foo/bar.txt", content, sampleOwner),
			),
			wantNumGz: 4, // both dirs, foo.txt alone, TOC, footer
			want: checks(
				numTOCEntries(3),
				hasDir("bar/"),
				hasDir("foo/"),
				hasFileLen("foo/bar.txt", len(content)),
				entryHasChildren("", "bar", "foo"),
				entryHasChildren("foo", "bar.txt"),
				hasChunkEntries("foo/bar.txt", 1),
				hasEntryOwner("bar/", sampleOwner),
				hasEntryOwner("foo/", sampleOwner),
				hasEntryOwner("foo/bar.txt", sampleOwner),
			),
		},
		{
			name: "3dir",
			in: tarOf(
				dir("bar/"),
				dir("foo/"),
				dir("foo/bar/"),
			),
			wantNumGz: 3, // 3 dirs, TOC, footer
			want: checks(
				hasDirLinkCount("bar/", 2),
				hasDirLinkCount("foo/", 3),
				hasDirLinkCount("foo/bar/", 2),
			),
		},
		{
			name: "symlink",
			in: tarOf(
				dir("foo/"),
				symlink("foo/bar", "../../x"),
			),
			wantNumGz: 3, // metas + TOC + footer
			want: checks(
				numTOCEntries(2),
				hasSymlink("foo/bar", "../../x"),
				entryHasChildren("", "foo"),
				entryHasChildren("foo", "bar"),
			),
		},
		{
			name:      "chunked_file",
			chunkSize: 4,
			in: tarOf(
				dir("foo/"),
				file("foo/big.txt", "This "+"is s"+"uch "+"a bi"+"g fi"+"le"),
			),
			wantNumGz: 9, // dir + big.txt(6 chunks) + TOC + footer
			want: checks(
				numTOCEntries(7), // 1 for foo dir, 6 for the foo/big.txt file
				hasDir("foo/"),
				hasFileLen("foo/big.txt", len("This is such a big file")),
				hasFileDigest("foo/big.txt", digestFor("This is such a big file")),
				hasFileContentsRange("foo/big.txt", 0, "This is such a big file"),
				hasFileContentsRange("foo/big.txt", 1, "his is such a big file"),
				hasFileContentsRange("foo/big.txt", 2, "is is such a big file"),
				hasFileContentsRange("foo/big.txt", 3, "s is such a big file"),
				hasFileContentsRange("foo/big.txt", 4, " is such a big file"),
				hasFileContentsRange("foo/big.txt", 5, "is such a big file"),
				hasFileContentsRange("foo/big.txt", 6, "s such a big file"),
				hasFileContentsRange("foo/big.txt", 7, " such a big file"),
				hasFileContentsRange("foo/big.txt", 8, "such a big file"),
				hasFileContentsRange("foo/big.txt", 9, "uch a big file"),
				hasFileContentsRange("foo/big.txt", 10, "ch a big file"),
				hasFileContentsRange("foo/big.txt", 11, "h a big file"),
				hasFileContentsRange("foo/big.txt", 12, " a big file"),
				hasFileContentsRange("foo/big.txt", len("This is such a big file")-1, ""),
				hasChunkEntries("foo/big.txt", 6),
			),
		},
		{
			name: "recursive",
			in: tarOf(
				dir("/", sampleOwner),
				dir("bar/", sampleOwner),
				dir("foo/", sampleOwner),
				file("foo/bar.txt", content, sampleOwner),
			),
			wantNumGz: 4, // dirs, bar.txt alone, TOC, footer
			want: checks(
				maxDepth(2), // 0: root directory, 1: "foo/", 2: "bar.txt"
			),
		},
		{
			name: "block_char_fifo",
			in: tarOf(
				tarEntryFunc(func(w *tar.Writer, prefix string, format tar.Format) error {
					return w.WriteHeader(&tar.Header{
						Name:     prefix + "b",
						Typeflag: tar.TypeBlock,
						Devmajor: 123,
						Devminor: 456,
						Format:   format,
					})
				}),
				tarEntryFunc(func(w *tar.Writer, prefix string, format tar.Format) error {
					return w.WriteHeader(&tar.Header{
						Name:     prefix + "c",
						Typeflag: tar.TypeChar,
						Devmajor: 111,
						Devminor: 222,
						Format:   format,
					})
				}),
				tarEntryFunc(func(w *tar.Writer, prefix string, format tar.Format) error {
					return w.WriteHeader(&tar.Header{
						Name:     prefix + "f",
						Typeflag: tar.TypeFifo,
						Format:   format,
					})
				}),
			),
			wantNumGz: 3,
			want: checks(
				lookupMatch("b", &TOCEntry{Name: "b", Type: "block", DevMajor: 123, DevMinor: 456, NumLink: 1}),
				lookupMatch("c", &TOCEntry{Name: "c", Type: "char", DevMajor: 111, DevMinor: 222, NumLink: 1}),
				lookupMatch("f", &TOCEntry{Name: "f", Type: "fifo", NumLink: 1}),
			),
		},
		{
			name: "modes",
			in: tarOf(
				dir("foo1/", 0755|os.ModeDir|os.ModeSetgid),
				file("foo1/bar1", content, 0700|os.ModeSetuid),
				file("foo1/bar2", content, 0755|os.ModeSetgid),
				dir("foo2/", 0755|os.ModeDir|os.ModeSticky),
				file("foo2/bar3", content, 0755|os.ModeSticky),
				dir("foo3/", 0755|os.ModeDir),
				file("foo3/bar4", content, os.FileMode(0700)),
				file("foo3/bar5", content, os.FileMode(0755)),
			),
			wantNumGz: 8, // dir, bar1 alone, bar2 alone + dir, bar3 alone + dir, bar4 alone, bar5 alone, TOC, footer
			want: checks(
				hasMode("foo1/", 0755|os.ModeDir|os.ModeSetgid),
				hasMode("foo1/bar1", 0700|os.ModeSetuid),
				hasMode("foo1/bar2", 0755|os.ModeSetgid),
				hasMode("foo2/", 0755|os.ModeDir|os.ModeSticky),
				hasMode("foo2/bar3", 0755|os.ModeSticky),
				hasMode("foo3/", 0755|os.ModeDir),
				hasMode("foo3/bar4", os.FileMode(0700)),
				hasMode("foo3/bar5", os.FileMode(0755)),
			),
		},
		{
			name: "lossy",
			in: tarOf(
				dir("bar/", sampleOwner),
				dir("foo/", sampleOwner),
				file("foo/bar.txt", content, sampleOwner),
				file(TOCTarName, "dummy"), // ignored by the writer. (lossless write returns error)
			),
			wantNumGz: 4, // both dirs, foo.txt alone, TOC, footer
			want: checks(
				numTOCEntries(3),
				hasDir("bar/"),
				hasDir("foo/"),
				hasFileLen("foo/bar.txt", len(content)),
				entryHasChildren("", "bar", "foo"),
				entryHasChildren("foo", "bar.txt"),
				hasChunkEntries("foo/bar.txt", 1),
				hasEntryOwner("bar/", sampleOwner),
				hasEntryOwner("foo/", sampleOwner),
				hasEntryOwner("foo/bar.txt", sampleOwner),
			),
			wantFailOnLossLess: true,
		},
		{
			name: "hardlink should be replaced to the destination entry",
			in: tarOf(
				dir("foo/"),
				file("foo/foo1", "test"),
				link("foolink", "foo/foo1"),
			),
			wantNumGz: 4, // dir, foo1 + link, TOC, footer
			want: checks(
				mustSameEntry("foo/foo1", "foolink"),
			),
		},
		{
			name:         "several_files_in_chunk",
			minChunkSize: 8000,
			in: tarOf(
				dir("foo/"),
				file("foo/foo1", data64KB),
				file("foo2", "bb"),
				file("foo22", "ccc"),
				dir("bar/"),
				file("bar/bar.txt", "aaa"),
				file("foo3", data64KB),
			),
			// NOTE: we assume that the compressed "data64KB" is still larger than 8KB
			wantNumGz: 4, // dir+foo1, foo2+foo22+dir+bar.txt+foo3, TOC, footer
			want: checks(
				numTOCEntries(7), // dir, foo1, foo2, foo22, dir, bar.txt, foo3
				hasDir("foo/"),
				hasDir("bar/"),
				hasFileLen("foo/foo1", len(data64KB)),
				hasFileLen("foo2", len("bb")),
				hasFileLen("foo22", len("ccc")),
				hasFileLen("bar/bar.txt", len("aaa")),
				hasFileLen("foo3", len(data64KB)),
				hasFileDigest("foo/foo1", digestFor(data64KB)),
				hasFileDigest("foo2", digestFor("bb")),
				hasFileDigest("foo22", digestFor("ccc")),
				hasFileDigest("bar/bar.txt", digestFor("aaa")),
				hasFileDigest("foo3", digestFor(data64KB)),
				hasFileContentsWithPreRead("foo22", 0, "ccc", chunkInfo{"foo2", "bb"}, chunkInfo{"bar/bar.txt", "aaa"}, chunkInfo{"foo3", data64KB}),
				hasFileContentsRange("foo/foo1", 0, data64KB),
				hasFileContentsRange("foo2", 0, "bb"),
				hasFileContentsRange("foo2", 1, "b"),
				hasFileContentsRange("foo22", 0, "ccc"),
				hasFileContentsRange("foo22", 1, "cc"),
				hasFileContentsRange("foo22", 2, "c"),
				hasFileContentsRange("bar/bar.txt", 0, "aaa"),
				hasFileContentsRange("bar/bar.txt", 1, "aa"),
				hasFileContentsRange("bar/bar.txt", 2, "a"),
				hasFileContentsRange("foo3", 0, data64KB),
				hasFileContentsRange("foo3", 1, data64KB[1:]),
				hasFileContentsRange("foo3", 2, data64KB[2:]),
				hasFileContentsRange("foo3", len(data64KB)/2, data64KB[len(data64KB)/2:]),
				hasFileContentsRange("foo3", len(data64KB)-1, data64KB[len(data64KB)-1:]),
			),
		},
		{
			name:         "several_files_in_chunk_chunked",
			minChunkSize: 8000,
			chunkSize:    32000,
			in: tarOf(
				dir("foo/"),
				file("foo/foo1", data64KB),
				file("foo2", "bb"),
				dir("bar/"),
				file("foo3", data64KB),
			),
			// NOTE: we assume that the compressed chunk of "data64KB" is still larger than 8KB
			wantNumGz: 6, // dir+foo1(1), foo1(2), foo2+dir+foo3(1), foo3(2), TOC, footer
			want: checks(
				numTOCEntries(7), // dir, foo1(2 chunks), foo2, dir, foo3(2 chunks)
				hasDir("foo/"),
				hasDir("bar/"),
				hasFileLen("foo/foo1", len(data64KB)),
				hasFileLen("foo2", len("bb")),
				hasFileLen("foo3", len(data64KB)),
				hasFileDigest("foo/foo1", digestFor(data64KB)),
				hasFileDigest("foo2", digestFor("bb")),
				hasFileDigest("foo3", digestFor(data64KB)),
				hasFileContentsWithPreRead("foo2", 0, "bb", chunkInfo{"foo3", data64KB[:32000]}),
				hasFileContentsRange("foo/foo1", 0, data64KB),
				hasFileContentsRange("foo/foo1", 1, data64KB[1:]),
				hasFileContentsRange("foo/foo1", 2, data64KB[2:]),
				hasFileContentsRange("foo/foo1", len(data64KB)/2, data64KB[len(data64KB)/2:]),
				hasFileContentsRange("foo/foo1", len(data64KB)-1, data64KB[len(data64KB)-1:]),
				hasFileContentsRange("foo2", 0, "bb"),
				hasFileContentsRange("foo2", 1, "b"),
				hasFileContentsRange("foo3", 0, data64KB),
				hasFileContentsRange("foo3", 1, data64KB[1:]),
				hasFileContentsRange("foo3", 2, data64KB[2:]),
				hasFileContentsRange("foo3", len(data64KB)/2, data64KB[len(data64KB)/2:]),
				hasFileContentsRange("foo3", len(data64KB)-1, data64KB[len(data64KB)-1:]),
			),
		},
	}

	for _, tt := range tests {
		for _, newCL := range controllers {
			newCL := newCL
			for _, prefix := range allowedPrefix {
				prefix := prefix
				for _, srcTarFormat := range []tar.Format{tar.FormatUSTAR, tar.FormatPAX, tar.FormatGNU} {
					srcTarFormat := srcTarFormat
					for _, lossless := range []bool{true, false} {
						t.Run(tt.name+"-"+fmt.Sprintf("compression=%v,prefix=%q,lossless=%v,format=%s", newCL(), prefix, lossless, srcTarFormat), func(t *testing.T) {
							var tr io.Reader = buildTar(t, tt.in, prefix, srcTarFormat)
							origTarDgstr := digest.Canonical.Digester()
							tr = io.TeeReader(tr, origTarDgstr.Hash())
							var stargzBuf bytes.Buffer
							cl1 := newCL()
							w := NewWriterWithCompressor(&stargzBuf, cl1)
							w.ChunkSize = tt.chunkSize
							w.MinChunkSize = tt.minChunkSize
							if lossless {
								err := w.AppendTarLossLess(tr)
								if tt.wantFailOnLossLess {
									if err != nil {
										return // expected to fail
									}
									t.Fatalf("Append wanted to fail on lossless")
								}
								if err != nil {
									t.Fatalf("Append(lossless): %v", err)
								}
							} else {
								if err := w.AppendTar(tr); err != nil {
									t.Fatalf("Append: %v", err)
								}
							}
							if _, err := w.Close(); err != nil {
								t.Fatalf("Writer.Close: %v", err)
							}
							b := stargzBuf.Bytes()

							if lossless {
								// Check if the result blob reserves original tar metadata
								rc, err := Unpack(io.NewSectionReader(bytes.NewReader(b), 0, int64(len(b))), cl1)
								if err != nil {
									t.Errorf("failed to decompress blob: %v", err)
									return
								}
								defer rc.Close()
								resultDgstr := digest.Canonical.Digester()
								if _, err := io.Copy(resultDgstr.Hash(), rc); err != nil {
									t.Errorf("failed to read result decompressed blob: %v", err)
									return
								}
								if resultDgstr.Digest() != origTarDgstr.Digest() {
									t.Errorf("lossy compression occurred: digest=%v; want %v",
										resultDgstr.Digest(), origTarDgstr.Digest())
									return
								}
							}

							diffID := w.DiffID()
							wantDiffID := cl1.DiffIDOf(t, b)
							if diffID != wantDiffID {
								t.Errorf("DiffID = %q; want %q", diffID, wantDiffID)
							}

							telemetry, checkCalled := newCalledTelemetry()
							sr := io.NewSectionReader(bytes.NewReader(b), 0, int64(len(b)))
							r, err := Open(
								sr,
								WithDecompressors(cl1),
								WithTelemetry(telemetry),
							)
							if err != nil {
								t.Fatalf("stargz.Open: %v", err)
							}
							wantTOCVersion := 1
							if tt.wantTOCVersion > 0 {
								wantTOCVersion = tt.wantTOCVersion
							}
							if r.toc.Version != wantTOCVersion {
								t.Fatalf("invalid TOC Version %d; wanted %d", r.toc.Version, wantTOCVersion)
							}

							footerSize := cl1.FooterSize()
							footerOffset := sr.Size() - footerSize
							footer := make([]byte, footerSize)
							if _, err := sr.ReadAt(footer, footerOffset); err != nil {
								t.Errorf("failed to read footer: %v", err)
							}
							_, tocOffset, _, err := cl1.ParseFooter(footer)
							if err != nil {
								t.Errorf("failed to parse footer: %v", err)
							}
							if err := checkCalled(tocOffset >= 0); err != nil {
								t.Errorf("telemetry failure: %v", err)
							}

							wantNumGz := tt.wantNumGz
							if lossless && tt.wantNumGzLossLess > 0 {
								wantNumGz = tt.wantNumGzLossLess
							}
							streamOffsets := []int64{0}
							prevOffset := int64(-1)
							streams := 0
							for _, e := range r.toc.Entries {
								if e.Offset > prevOffset {
									streamOffsets = append(streamOffsets, e.Offset)
									prevOffset = e.Offset
									streams++
								}
							}
							streams++ // TOC
							if tocOffset >= 0 {
								// toc is in the blob
								streamOffsets = append(streamOffsets, tocOffset)
							}
							streams++ // footer
							streamOffsets = append(streamOffsets, footerOffset)
							if streams != wantNumGz {
								t.Errorf("number of streams in TOC = %d; want %d", streams, wantNumGz)
							}

							t.Logf("testing streams: %+v", streamOffsets)
							cl1.TestStreams(t, b, streamOffsets)

							for _, want := range tt.want {
								want.check(t, r)
							}
						})
					}
				}
			}
		}
	}
}

type chunkInfo struct {
	name string
	data string
}

func newCalledTelemetry() (telemetry *Telemetry, check func(needsGetTOC bool) error) {
	var getFooterLatencyCalled bool
	var getTocLatencyCalled bool
	var deserializeTocLatencyCalled bool
	return &Telemetry{
			func(time.Time) { getFooterLatencyCalled = true },
			func(time.Time) { getTocLatencyCalled = true },
			func(time.Time) { deserializeTocLatencyCalled = true },
		}, func(needsGetTOC bool) error {
			var allErr []error
			if !getFooterLatencyCalled {
				allErr = append(allErr, fmt.Errorf("metrics GetFooterLatency isn't called"))
			}
			if needsGetTOC {
				if !getTocLatencyCalled {
					allErr = append(allErr, fmt.Errorf("metrics GetTocLatency isn't called"))
				}
			}
			if !deserializeTocLatencyCalled {
				allErr = append(allErr, fmt.Errorf("metrics DeserializeTocLatency isn't called"))
			}
			return errorutil.Aggregate(allErr)
		}
}

func digestFor(content string) string {
	sum := sha256.Sum256([]byte(content))
	return fmt.Sprintf("sha256:%x", sum)
}

type numTOCEntries int

func (n numTOCEntries) check(t *testing.T, r *Reader) {
	if r.toc == nil {
		t.Fatal("nil TOC")
	}
	if got, want := len(r.toc.Entries), int(n); got != want {
		t.Errorf("got %d TOC entries; want %d", got, want)
	}
	t.Logf("got TOC entries:")
	for i, ent := range r.toc.Entries {
		entj, _ := json.Marshal(ent)
		t.Logf("  [%d]: %s\n", i, entj)
	}
	if t.Failed() {
		t.FailNow()
	}
}

func checks(s ...stargzCheck) []stargzCheck { return s }

type stargzCheck interface {
	check(t *testing.T, r *Reader)
}

type stargzCheckFn func(*testing.T, *Reader)

func (f stargzCheckFn) check(t *testing.T, r *Reader) { f(t, r) }

func maxDepth(max int) stargzCheck {
	return stargzCheckFn(func(t *testing.T, r *Reader) {
		e, ok := r.Lookup("")
		if !ok {
			t.Fatal("root directory not found")
		}
		d, err := getMaxDepth(t, e, 0, 10*max)
		if err != nil {
			t.Errorf("failed to get max depth (wanted %d): %v", max, err)
			return
		}
		if d != max {
			t.Errorf("invalid depth %d; want %d", d, max)
			return
		}
	})
}

func getMaxDepth(t *testing.T, e *TOCEntry, current, limit int) (max int, rErr error) {
	if current > limit {
		return -1, fmt.Errorf("walkMaxDepth: exceeds limit: current:%d > limit:%d",
			current, limit)
	}
	max = current
	e.ForeachChild(func(baseName string, ent *TOCEntry) bool {
		t.Logf("%q(basename:%q) is child of %q\n", ent.Name, baseName, e.Name)
		d, err := getMaxDepth(t, ent, current+1, limit)
		if err != nil {
			rErr = err
			return false
		}
		if d > max {
			max = d
		}
		return true
	})
	return
}

func hasFileLen(file string, wantLen int) stargzCheck {
	return stargzCheckFn(func(t *testing.T, r *Reader) {
		for _, ent := range r.toc.Entries {
			if ent.Name == file {
				if ent.Type != "reg" {
					t.Errorf("file type of %q is %q; want \"reg\"", file, ent.Type)
				} else if ent.Size != int64(wantLen) {
					t.Errorf("file size of %q = %d; want %d", file, ent.Size, wantLen)
				}
				return
			}
		}
		t.Errorf("file %q not found", file)
	})
}

func hasFileXattrs(file, name, value string) stargzCheck {
	return stargzCheckFn(func(t *testing.T, r *Reader) {
		for _, ent := range r.toc.Entries {
			if ent.Name == file {
				if ent.Type != "reg" {
					t.Errorf("file type of %q is %q; want \"reg\"", file, ent.Type)
				}
				if ent.Xattrs == nil {
					t.Errorf("file %q has no xattrs", file)
					return
				}
				valueFound, found := ent.Xattrs[name]
				if !found {
					t.Errorf("file %q has no xattr %q", file, name)
					return
				}
				if string(valueFound) != value {
					t.Errorf("file %q has xattr %q with value %q instead of %q", file, name, valueFound, value)
				}

				return
			}
		}
		t.Errorf("file %q not found", file)
	})
}

func hasFileDigest(file string, digest string) stargzCheck {
	return stargzCheckFn(func(t *testing.T, r *Reader) {
		ent, ok := r.Lookup(file)
		if !ok {
			t.Fatalf("didn't find TOCEntry for file %q", file)
		}
		if ent.Digest != digest {
			t.Fatalf("Digest(%q) = %q, want %q", file, ent.Digest, digest)
		}
	})
}

func hasFileContentsWithPreRead(file string, offset int, want string, extra ...chunkInfo) stargzCheck {
	return stargzCheckFn(func(t *testing.T, r *Reader) {
		extraMap := make(map[string]chunkInfo)
		for _, e := range extra {
			extraMap[e.name] = e
		}
		var extraNames []string
		for n := range extraMap {
			extraNames = append(extraNames, n)
		}
		f, err := r.OpenFileWithPreReader(file, func(e *TOCEntry, cr io.Reader) error {
			t.Logf("On %q: got preread of %q", file, e.Name)
			ex, ok := extraMap[e.Name]
			if !ok {
				t.Fatalf("fail on %q: unexpected entry %q: %+v, %+v", file, e.Name, e, extraNames)
			}
			got, err := io.ReadAll(cr)
			if err != nil {
				t.Fatalf("fail on %q: failed to read %q: %v", file, e.Name, err)
			}
			if ex.data != string(got) {
				t.Fatalf("fail on %q: unexpected contents of %q: len=%d; want=%d", file, e.Name, len(got), len(ex.data))
			}
			delete(extraMap, e.Name)
			return nil
		})
		if err != nil {
			t.Fatal(err)
		}
		got := make([]byte, len(want))
		n, err := f.ReadAt(got, int64(offset))
		if err != nil {
			t.Fatalf("ReadAt(len %d, offset %d, size %d) = %v, %v", len(got), offset, f.Size(), n, err)
		}
		if string(got) != want {
			t.Fatalf("ReadAt(len %d, offset %d) = %q, want %q", len(got), offset, viewContent(got), viewContent([]byte(want)))
		}
		if len(extraMap) != 0 {
			var exNames []string
			for _, ex := range extraMap {
				exNames = append(exNames, ex.name)
			}
			t.Fatalf("fail on %q: some entries aren't read: %+v", file, exNames)
		}
	})
}

func hasFileContentsRange(file string, offset int, want string) stargzCheck {
	return stargzCheckFn(func(t *testing.T, r *Reader) {
		f, err := r.OpenFile(file)
		if err != nil {
			t.Fatal(err)
		}
		got := make([]byte, len(want))
		n, err := f.ReadAt(got, int64(offset))
		if err != nil {
			t.Fatalf("ReadAt(len %d, offset %d) = %v, %v", len(got), offset, n, err)
		}
		if string(got) != want {
			t.Fatalf("ReadAt(len %d, offset %d) = %q, want %q", len(got), offset, viewContent(got), viewContent([]byte(want)))
		}
	})
}

func hasChunkEntries(file string, wantChunks int) stargzCheck {
	return stargzCheckFn(func(t *testing.T, r *Reader) {
		ent, ok := r.Lookup(file)
		if !ok {
			t.Fatalf("no file for %q", file)
		}
		if ent.Type != "reg" {
			t.Fatalf("file %q has unexpected type %q; want reg", file, ent.Type)
		}
		chunks := r.getChunks(ent)
		if len(chunks) != wantChunks {
			t.Errorf("len(r.getChunks(%q)) = %d; want %d", file, len(chunks), wantChunks)
			return
		}
		f := chunks[0]

		var gotChunks []*TOCEntry
		var last *TOCEntry
		for off := int64(0); off < f.Size; off++ {
			e, ok := r.ChunkEntryForOffset(file, off)
			if !ok {
				t.Errorf("no ChunkEntryForOffset at %d", off)
				return
			}
			if last != e {
				gotChunks = append(gotChunks, e)
				last = e
			}
		}
		if !reflect.DeepEqual(chunks, gotChunks) {
			t.Errorf("gotChunks=%d, want=%d; contents mismatch", len(gotChunks), wantChunks)
		}

		// And verify the NextOffset
		for i := 0; i < len(gotChunks)-1; i++ {
			ci := gotChunks[i]
			cnext := gotChunks[i+1]
			if ci.NextOffset() != cnext.Offset {
				t.Errorf("chunk %d NextOffset %d != next chunk's Offset of %d", i, ci.NextOffset(), cnext.Offset)
			}
		}
	})
}

func entryHasChildren(dir string, want ...string) stargzCheck {
	return stargzCheckFn(func(t *testing.T, r *Reader) {
		want := append([]string(nil), want...)
		var got []string
		ent, ok := r.Lookup(dir)
		if !ok {
			t.Fatalf("didn't find TOCEntry for dir node %q", dir)
		}
		for baseName := range ent.children {
			got = append(got, baseName)
		}
		sort.Strings(got)
		sort.Strings(want)
		if !reflect.DeepEqual(got, want) {
			t.Errorf("children of %q = %q; want %q", dir, got, want)
		}
	})
}

func hasDir(file string) stargzCheck {
	return stargzCheckFn(func(t *testing.T, r *Reader) {
		for _, ent := range r.toc.Entries {
			if ent.Name == cleanEntryName(file) {
				if ent.Type != "dir" {
					t.Errorf("file type of %q is %q; want \"dir\"", file, ent.Type)
				}
				return
			}
		}
		t.Errorf("directory %q not found", file)
	})
}

func hasDirLinkCount(file string, count int) stargzCheck {
	return stargzCheckFn(func(t *testing.T, r *Reader) {
		for _, ent := range r.toc.Entries {
			if ent.Name == cleanEntryName(file) {
				if ent.Type != "dir" {
					t.Errorf("file type of %q is %q; want \"dir\"", file, ent.Type)
					return
				}
				if ent.NumLink != count {
					t.Errorf("link count of %q = %d; want %d", file, ent.NumLink, count)
				}
				return
			}
		}
		t.Errorf("directory %q not found", file)
	})
}

func hasMode(file string, mode os.FileMode) stargzCheck {
	return stargzCheckFn(func(t *testing.T, r *Reader) {
		for _, ent := range r.toc.Entries {
			if ent.Name == cleanEntryName(file) {
				if ent.Stat().Mode() != mode {
					t.Errorf("invalid mode: got %v; want %v", ent.Stat().Mode(), mode)
					return
				}
				return
			}
		}
		t.Errorf("file %q not found", file)
	})
}

func hasSymlink(file, target string) stargzCheck {
	return stargzCheckFn(func(t *testing.T, r *Reader) {
		for _, ent := range r.toc.Entries {
			if ent.Name == file {
				if ent.Type != "symlink" {
					t.Errorf("file type of %q is %q; want \"symlink\"", file, ent.Type)
				} else if ent.LinkName != target {
					t.Errorf("link target of symlink %q is %q; want %q", file, ent.LinkName, target)
				}
				return
			}
		}
		t.Errorf("symlink %q not found", file)
	})
}

func lookupMatch(name string, want *TOCEntry) stargzCheck {
	return stargzCheckFn(func(t *testing.T, r *Reader) {
		e, ok := r.Lookup(name)
		if !ok {
			t.Fatalf("failed to Lookup entry %q", name)
		}
		if !reflect.DeepEqual(e, want) {
			t.Errorf("entry %q mismatch.\n got: %+v\nwant: %+v\n", name, e, want)
		}

	})
}

func hasEntryOwner(entry string, owner owner) stargzCheck {
	return stargzCheckFn(func(t *testing.T, r *Reader) {
		ent, ok := r.Lookup(strings.TrimSuffix(entry, "/"))
		if !ok {
			t.Errorf("entry %q not found", entry)
			return
		}
		if ent.UID != owner.uid || ent.GID != owner.gid {
			t.Errorf("entry %q has invalid owner (uid:%d, gid:%d) instead of (uid:%d, gid:%d)", entry, ent.UID, ent.GID, owner.uid, owner.gid)
			return
		}
	})
}

func mustSameEntry(files ...string) stargzCheck {
	return stargzCheckFn(func(t *testing.T, r *Reader) {
		var first *TOCEntry
		for _, f := range files {
			if first == nil {
				var ok bool
				first, ok = r.Lookup(f)
				if !ok {
					t.Errorf("unknown first file on Lookup: %q", f)
					return
				}
			}

			// Test Lookup
			e, ok := r.Lookup(f)
			if !ok {
				t.Errorf("unknown file on Lookup: %q", f)
				return
			}
			if e != first {
				t.Errorf("Lookup: %+v(%p) != %+v(%p)", e, e, first, first)
				return
			}

			// Test LookupChild
			pe, ok := r.Lookup(filepath.Dir(filepath.Clean(f)))
			if !ok {
				t.Errorf("failed to get parent of %q", f)
				return
			}
			e, ok = pe.LookupChild(filepath.Base(filepath.Clean(f)))
			if !ok {
				t.Errorf("failed to get %q as the child of %+v", f, pe)
				return
			}
			if e != first {
				t.Errorf("LookupChild: %+v(%p) != %+v(%p)", e, e, first, first)
				return
			}

			// Test ForeachChild
			pe.ForeachChild(func(baseName string, e *TOCEntry) bool {
				if baseName == filepath.Base(filepath.Clean(f)) {
					if e != first {
						t.Errorf("ForeachChild: %+v(%p) != %+v(%p)", e, e, first, first)
						return false
					}
				}
				return true
			})
		}
	})
}

func viewContent(c []byte) string {
	if len(c) < 100 {
		return string(c)
	}
	return string(c[:50]) + "...(omit)..." + string(c[50:100])
}

func tarOf(s ...tarEntry) []tarEntry { return s }

type tarEntry interface {
	appendTar(tw *tar.Writer, prefix string, format tar.Format) error
}

type tarEntryFunc func(*tar.Writer, string, tar.Format) error

func (f tarEntryFunc) appendTar(tw *tar.Writer, prefix string, format tar.Format) error {
	return f(tw, prefix, format)
}

func buildTar(t *testing.T, ents []tarEntry, prefix string, opts ...interface{}) *io.SectionReader {
	format := tar.FormatUnknown
	for _, opt := range opts {
		switch v := opt.(type) {
		case tar.Format:
			format = v
		default:
			panic(fmt.Errorf("unsupported opt for buildTar: %v", opt))
		}
	}
	buf := new(bytes.Buffer)
	tw := tar.NewWriter(buf)
	for _, ent := range ents {
		if err := ent.appendTar(tw, prefix, format); err != nil {
			t.Fatalf("building input tar: %v", err)
		}
	}
	if err := tw.Close(); err != nil {
		t.Errorf("closing write of input tar: %v", err)
	}
	data := append(buf.Bytes(), make([]byte, 100)...) // append empty bytes at the tail to see lossless works
	return io.NewSectionReader(bytes.NewReader(data), 0, int64(len(data)))
}

func dir(name string, opts ...interface{}) tarEntry {
	return tarEntryFunc(func(tw *tar.Writer, prefix string, format tar.Format) error {
		var o owner
		mode := os.FileMode(0755)
		for _, opt := range opts {
			switch v := opt.(type) {
			case owner:
				o = v
			case os.FileMode:
				mode = v
			default:
				return errors.New("unsupported opt")
			}
		}
		if !strings.HasSuffix(name, "/") {
			panic(fmt.Sprintf("missing trailing slash in dir %q ", name))
		}
		tm, err := fileModeToTarMode(mode)
		if err != nil {
			return err
		}
		return tw.WriteHeader(&tar.Header{
			Typeflag: tar.TypeDir,
			Name:     prefix + name,
			Mode:     tm,
			Uid:      o.uid,
			Gid:      o.gid,
			Format:   format,
		})
	})
}

// xAttr are extended attributes to set on test files created with the file func.
type xAttr map[string]string

// owner is owner ot set on test files and directories with the file and dir functions.
type owner struct {
	uid int
	gid int
}

func file(name, contents string, opts ...interface{}) tarEntry {
	return tarEntryFunc(func(tw *tar.Writer, prefix string, format tar.Format) error {
		var xattrs xAttr
		var o owner
		mode := os.FileMode(0644)
		for _, opt := range opts {
			switch v := opt.(type) {
			case xAttr:
				xattrs = v
			case owner:
				o = v
			case os.FileMode:
				mode = v
			default:
				return errors.New("unsupported opt")
			}
		}
		if strings.HasSuffix(name, "/") {
			return fmt.Errorf("bogus trailing slash in file %q", name)
		}
		tm, err := fileModeToTarMode(mode)
		if err != nil {
			return err
		}
		if len(xattrs) > 0 {
			format = tar.FormatPAX // only PAX supports xattrs
		}
		if err := tw.WriteHeader(&tar.Header{
			Typeflag: tar.TypeReg,
			Name:     prefix + name,
			Mode:     tm,
			Xattrs:   xattrs,
			Size:     int64(len(contents)),
			Uid:      o.uid,
			Gid:      o.gid,
			Format:   format,
		}); err != nil {
			return err
		}
		_, err = io.WriteString(tw, contents)
		return err
	})
}

func symlink(name, target string) tarEntry {
	return tarEntryFunc(func(tw *tar.Writer, prefix string, format tar.Format) error {
		return tw.WriteHeader(&tar.Header{
			Typeflag: tar.TypeSymlink,
			Name:     prefix + name,
			Linkname: target,
			Mode:     0644,
			Format:   format,
		})
	})
}

func link(name string, linkname string) tarEntry {
	now := time.Now()
	return tarEntryFunc(func(w *tar.Writer, prefix string, format tar.Format) error {
		return w.WriteHeader(&tar.Header{
			Typeflag: tar.TypeLink,
			Name:     prefix + name,
			Linkname: linkname,
			ModTime:  now,
			Format:   format,
		})
	})
}

func chardev(name string, major, minor int64) tarEntry {
	now := time.Now()
	return tarEntryFunc(func(w *tar.Writer, prefix string, format tar.Format) error {
		return w.WriteHeader(&tar.Header{
			Typeflag: tar.TypeChar,
			Name:     prefix + name,
			Devmajor: major,
			Devminor: minor,
			ModTime:  now,
			Format:   format,
		})
	})
}

func blockdev(name string, major, minor int64) tarEntry {
	now := time.Now()
	return tarEntryFunc(func(w *tar.Writer, prefix string, format tar.Format) error {
		return w.WriteHeader(&tar.Header{
			Typeflag: tar.TypeBlock,
			Name:     prefix + name,
			Devmajor: major,
			Devminor: minor,
			ModTime:  now,
			Format:   format,
		})
	})
}
func fifo(name string) tarEntry {
	now := time.Now()
	return tarEntryFunc(func(w *tar.Writer, prefix string, format tar.Format) error {
		return w.WriteHeader(&tar.Header{
			Typeflag: tar.TypeFifo,
			Name:     prefix + name,
			ModTime:  now,
			Format:   format,
		})
	})
}

func prefetchLandmark() tarEntry {
	return tarEntryFunc(func(w *tar.Writer, prefix string, format tar.Format) error {
		if err := w.WriteHeader(&tar.Header{
			Name:     PrefetchLandmark,
			Typeflag: tar.TypeReg,
			Size:     int64(len([]byte{landmarkContents})),
			Format:   format,
		}); err != nil {
			return err
		}
		contents := []byte{landmarkContents}
		if _, err := io.CopyN(w, bytes.NewReader(contents), int64(len(contents))); err != nil {
			return err
		}
		return nil
	})
}

func noPrefetchLandmark() tarEntry {
	return tarEntryFunc(func(w *tar.Writer, prefix string, format tar.Format) error {
		if err := w.WriteHeader(&tar.Header{
			Name:     NoPrefetchLandmark,
			Typeflag: tar.TypeReg,
			Size:     int64(len([]byte{landmarkContents})),
			Format:   format,
		}); err != nil {
			return err
		}
		contents := []byte{landmarkContents}
		if _, err := io.CopyN(w, bytes.NewReader(contents), int64(len(contents))); err != nil {
			return err
		}
		return nil
	})
}

func regDigest(t *testing.T, name string, contentStr string, digestMap map[string]digest.Digest) tarEntry {
	if digestMap == nil {
		t.Fatalf("digest map mustn't be nil")
	}
	content := []byte(contentStr)

	var n int64
	for n < int64(len(content)) {
		size := int64(chunkSize)
		remain := int64(len(content)) - n
		if remain < size {
			size = remain
		}
		dgstr := digest.Canonical.Digester()
		if _, err := io.CopyN(dgstr.Hash(), bytes.NewReader(content[n:n+size]), size); err != nil {
			t.Fatalf("failed to calculate digest of %q (name=%q,offset=%d,size=%d)",
				string(content[n:n+size]), name, n, size)
		}
		digestMap[chunkID(name, n, size)] = dgstr.Digest()
		n += size
	}

	return tarEntryFunc(func(w *tar.Writer, prefix string, format tar.Format) error {
		if err := w.WriteHeader(&tar.Header{
			Typeflag: tar.TypeReg,
			Name:     prefix + name,
			Size:     int64(len(content)),
			Format:   format,
		}); err != nil {
			return err
		}
		if _, err := io.CopyN(w, bytes.NewReader(content), int64(len(content))); err != nil {
			return err
		}
		return nil
	})
}

var runes = []rune("1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")

func randomContents(n int) string {
	b := make([]rune, n)
	for i := range b {
		b[i] = runes[rand.Intn(len(runes))]
	}
	return string(b)
}

func fileModeToTarMode(mode os.FileMode) (int64, error) {
	h, err := tar.FileInfoHeader(fileInfoOnlyMode(mode), "")
	if err != nil {
		return 0, err
	}
	return h.Mode, nil
}

// fileInfoOnlyMode is os.FileMode that populates only file mode.
type fileInfoOnlyMode os.FileMode

func (f fileInfoOnlyMode) Name() string       { return "" }
func (f fileInfoOnlyMode) Size() int64        { return 0 }
func (f fileInfoOnlyMode) Mode() os.FileMode  { return os.FileMode(f) }
func (f fileInfoOnlyMode) ModTime() time.Time { return time.Now() }
func (f fileInfoOnlyMode) IsDir() bool        { return os.FileMode(f).IsDir() }
func (f fileInfoOnlyMode) Sys() interface{}   { return nil }

func CheckGzipHasStreams(t *testing.T, b []byte, streams []int64) {
	if len(streams) == 0 {
		return // nop
	}

	wants := map[int64]struct{}{}
	for _, s := range streams {
		wants[s] = struct{}{}
	}

	len0 := len(b)
	br := bytes.NewReader(b)
	zr := new(gzip.Reader)
	t.Logf("got gzip streams:")
	numStreams := 0
	for {
		zoff := len0 - br.Len()
		if err := zr.Reset(br); err != nil {
			if err == io.EOF {
				return
			}
			t.Fatalf("countStreams(gzip), Reset: %v", err)
		}
		zr.Multistream(false)
		n, err := io.Copy(io.Discard, zr)
		if err != nil {
			t.Fatalf("countStreams(gzip), Copy: %v", err)
		}
		var extra string
		if len(zr.Header.Extra) > 0 {
			extra = fmt.Sprintf("; extra=%q", zr.Header.Extra)
		}
		t.Logf("  [%d] at %d in stargz, uncompressed length %d%s", numStreams, zoff, n, extra)
		delete(wants, int64(zoff))
		numStreams++
	}
}

func GzipDiffIDOf(t *testing.T, b []byte) string {
	h := sha256.New()
	zr, err := gzip.NewReader(bytes.NewReader(b))
	if err != nil {
		t.Fatalf("diffIDOf(gzip): %v", err)
	}
	defer zr.Close()
	if _, err := io.Copy(h, zr); err != nil {
		t.Fatalf("diffIDOf(gzip).Copy: %v", err)
	}
	return fmt.Sprintf("sha256:%x", h.Sum(nil))
}
  070701000002E7000081A4000000000000000000000001645E367C000031DD000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/containerd/stargz-snapshotter/estargz/types.go  /*
   Copyright The containerd Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

/*
   Copyright 2019 The Go Authors. All rights reserved.
   Use of this source code is governed by a BSD-style
   license that can be found in the LICENSE file.
*/

package estargz

import (
	"archive/tar"
	"hash"
	"io"
	"os"
	"path"
	"time"

	digest "github.com/opencontainers/go-digest"
)

const (
	// TOCTarName is the name of the JSON file in the tar archive in the
	// table of contents gzip stream.
	TOCTarName = "stargz.index.json"

	// FooterSize is the number of bytes in the footer
	//
	// The footer is an empty gzip stream with no compression and an Extra
	// header of the form "%016xSTARGZ", where the 64 bit hex-encoded
	// number is the offset to the gzip stream of JSON TOC.
	//
	// 51 comes from:
	//
	// 10 bytes  gzip header
	// 2  bytes  XLEN (length of Extra field) = 26 (4 bytes header + 16 hex digits + len("STARGZ"))
	// 2  bytes  Extra: SI1 = 'S', SI2 = 'G'
	// 2  bytes  Extra: LEN = 22 (16 hex digits + len("STARGZ"))
	// 22 bytes  Extra: subfield = fmt.Sprintf("%016xSTARGZ", offsetOfTOC)
	// 5  bytes  flate header
	// 8  bytes  gzip footer
	// (End of the eStargz blob)
	//
	// NOTE: For Extra fields, subfield IDs SI1='S' SI2='G' is used for eStargz.
	FooterSize = 51

	// legacyFooterSize is the number of bytes in the legacy stargz footer.
	//
	// 47 comes from:
	//
	//   10 byte gzip header +
	//   2 byte (LE16) length of extra, encoding 22 (16 hex digits + len("STARGZ")) == "\x16\x00" +
	//   22 bytes of extra (fmt.Sprintf("%016xSTARGZ", tocGzipOffset))
	//   5 byte flate header
	//   8 byte gzip footer (two little endian uint32s: digest, size)
	legacyFooterSize = 47

	// TOCJSONDigestAnnotation is an annotation for an image layer. This stores the
	// digest of the TOC JSON.
	// This annotation is valid only when it is specified in `.[]layers.annotations`
	// of an image manifest.
	TOCJSONDigestAnnotation = "containerd.io/snapshot/stargz/toc.digest"

	// StoreUncompressedSizeAnnotation is an additional annotation key for eStargz to enable lazy
	// pulling on containers/storage. Stargz Store is required to expose the layer's uncompressed size
	// to the runtime but current OCI image doesn't ship this information by default. So we store this
	// to the special annotation.
	StoreUncompressedSizeAnnotation = "io.containers.estargz.uncompressed-size"

	// PrefetchLandmark is a file entry which indicates the end position of
	// prefetch in the stargz file.
	PrefetchLandmark = ".prefetch.landmark"

	// NoPrefetchLandmark is a file entry which indicates that no prefetch should
	// occur in the stargz file.
	NoPrefetchLandmark = ".no.prefetch.landmark"

	landmarkContents = 0xf
)

// JTOC is the JSON-serialized table of contents index of the files in the stargz file.
type JTOC struct {
	Version int         `json:"version"`
	Entries []*TOCEntry `json:"entries"`
}

// TOCEntry is an entry in the stargz file's TOC (Table of Contents).
type TOCEntry struct {
	// Name is the tar entry's name. It is the complete path
	// stored in the tar file, not just the base name.
	Name string `json:"name"`

	// Type is one of "dir", "reg", "symlink", "hardlink", "char",
	// "block", "fifo", or "chunk".
	// The "chunk" type is used for regular file data chunks past the first
	// TOCEntry; the 2nd chunk and on have only Type ("chunk"), Offset,
	// ChunkOffset, and ChunkSize populated.
	Type string `json:"type"`

	// Size, for regular files, is the logical size of the file.
	Size int64 `json:"size,omitempty"`

	// ModTime3339 is the modification time of the tar entry. Empty
	// means zero or unknown. Otherwise it's in UTC RFC3339
	// format. Use the ModTime method to access the time.Time value.
	ModTime3339 string `json:"modtime,omitempty"`
	modTime     time.Time

	// LinkName, for symlinks and hardlinks, is the link target.
	LinkName string `json:"linkName,omitempty"`

	// Mode is the permission and mode bits.
	Mode int64 `json:"mode,omitempty"`

	// UID is the user ID of the owner.
	UID int `json:"uid,omitempty"`

	// GID is the group ID of the owner.
	GID int `json:"gid,omitempty"`

	// Uname is the username of the owner.
	//
	// In the serialized JSON, this field may only be present for
	// the first entry with the same UID.
	Uname string `json:"userName,omitempty"`

	// Gname is the group name of the owner.
	//
	// In the serialized JSON, this field may only be present for
	// the first entry with the same GID.
	Gname string `json:"groupName,omitempty"`

	// Offset, for regular files, provides the offset in the
	// stargz file to the file's data bytes. See ChunkOffset and
	// ChunkSize.
	Offset int64 `json:"offset,omitempty"`

	// InnerOffset is an optional field indicates uncompressed offset
	// of this "reg" or "chunk" payload in a stream starts from Offset.
	// This field enables to put multiple "reg" or "chunk" payloads
	// in one chunk with having the same Offset but different InnerOffset.
	InnerOffset int64 `json:"innerOffset,omitempty"`

	nextOffset int64 // the Offset of the next entry with a non-zero Offset

	// DevMajor is the major device number for "char" and "block" types.
	DevMajor int `json:"devMajor,omitempty"`

	// DevMinor is the major device number for "char" and "block" types.
	DevMinor int `json:"devMinor,omitempty"`

	// NumLink is the number of entry names pointing to this entry.
	// Zero means one name references this entry.
	// This field is calculated during runtime and not recorded in TOC JSON.
	NumLink int `json:"-"`

	// Xattrs are the extended attribute for the entry.
	Xattrs map[string][]byte `json:"xattrs,omitempty"`

	// Digest stores the OCI checksum for regular files payload.
	// It has the form "sha256:abcdef01234....".
	Digest string `json:"digest,omitempty"`

	// ChunkOffset is non-zero if this is a chunk of a large,
	// regular file. If so, the Offset is where the gzip header of
	// ChunkSize bytes at ChunkOffset in Name begin.
	//
	// In serialized form, a "chunkSize" JSON field of zero means
	// that the chunk goes to the end of the file. After reading
	// from the stargz TOC, though, the ChunkSize is initialized
	// to a non-zero file for when Type is either "reg" or
	// "chunk".
	ChunkOffset int64 `json:"chunkOffset,omitempty"`
	ChunkSize   int64 `json:"chunkSize,omitempty"`

	// ChunkDigest stores an OCI digest of the chunk. This must be formed
	// as "sha256:0123abcd...".
	ChunkDigest string `json:"chunkDigest,omitempty"`

	children map[string]*TOCEntry

	// chunkTopIndex is index of the entry where Offset starts in the blob.
	chunkTopIndex int
}

// ModTime returns the entry's modification time.
func (e *TOCEntry) ModTime() time.Time { return e.modTime }

// NextOffset returns the position (relative to the start of the
// stargz file) of the next gzip boundary after e.Offset.
func (e *TOCEntry) NextOffset() int64 { return e.nextOffset }

func (e *TOCEntry) addChild(baseName string, child *TOCEntry) {
	if e.children == nil {
		e.children = make(map[string]*TOCEntry)
	}
	if child.Type == "dir" {
		e.NumLink++ // Entry ".." in the subdirectory links to this directory
	}
	e.children[baseName] = child
}

// isDataType reports whether TOCEntry is a regular file or chunk (something that
// contains regular file data).
func (e *TOCEntry) isDataType() bool { return e.Type == "reg" || e.Type == "chunk" }

// Stat returns a FileInfo value representing e.
func (e *TOCEntry) Stat() os.FileInfo { return fileInfo{e} }

// ForeachChild calls f for each child item. If f returns false, iteration ends.
// If e is not a directory, f is not called.
func (e *TOCEntry) ForeachChild(f func(baseName string, ent *TOCEntry) bool) {
	for name, ent := range e.children {
		if !f(name, ent) {
			return
		}
	}
}

// LookupChild returns the directory e's child by its base name.
func (e *TOCEntry) LookupChild(baseName string) (child *TOCEntry, ok bool) {
	child, ok = e.children[baseName]
	return
}

// fileInfo implements os.FileInfo using the wrapped *TOCEntry.
type fileInfo struct{ e *TOCEntry }

var _ os.FileInfo = fileInfo{}

func (fi fileInfo) Name() string       { return path.Base(fi.e.Name) }
func (fi fileInfo) IsDir() bool        { return fi.e.Type == "dir" }
func (fi fileInfo) Size() int64        { return fi.e.Size }
func (fi fileInfo) ModTime() time.Time { return fi.e.ModTime() }
func (fi fileInfo) Sys() interface{}   { return fi.e }
func (fi fileInfo) Mode() (m os.FileMode) {
	// TOCEntry.Mode is tar.Header.Mode so we can understand the these bits using `tar` pkg.
	m = (&tar.Header{Mode: fi.e.Mode}).FileInfo().Mode() &
		(os.ModePerm | os.ModeSetuid | os.ModeSetgid | os.ModeSticky)
	switch fi.e.Type {
	case "dir":
		m |= os.ModeDir
	case "symlink":
		m |= os.ModeSymlink
	case "char":
		m |= os.ModeDevice | os.ModeCharDevice
	case "block":
		m |= os.ModeDevice
	case "fifo":
		m |= os.ModeNamedPipe
	}
	return m
}

// TOCEntryVerifier holds verifiers that are usable for verifying chunks contained
// in a eStargz blob.
type TOCEntryVerifier interface {

	// Verifier provides a content verifier that can be used for verifying the
	// contents of the specified TOCEntry.
	Verifier(ce *TOCEntry) (digest.Verifier, error)
}

// Compression provides the compression helper to be used creating and parsing eStargz.
// This package provides gzip-based Compression by default, but any compression
// algorithm (e.g. zstd) can be used as long as it implements Compression.
type Compression interface {
	Compressor
	Decompressor
}

// Compressor represents the helper mothods to be used for creating eStargz.
type Compressor interface {
	// Writer returns WriteCloser to be used for writing a chunk to eStargz.
	// Everytime a chunk is written, the WriteCloser is closed and Writer is
	// called again for writing the next chunk.
	//
	// The returned writer should implement "Flush() error" function that flushes
	// any pending compressed data to the underlying writer.
	Writer(w io.Writer) (WriteFlushCloser, error)

	// WriteTOCAndFooter is called to write JTOC to the passed Writer.
	// diffHash calculates the DiffID (uncompressed sha256 hash) of the blob
	// WriteTOCAndFooter can optionally write anything that affects DiffID calculation
	// (e.g. uncompressed TOC JSON).
	//
	// This function returns tocDgst that represents the digest of TOC that will be used
	// to verify this blob when it's parsed.
	WriteTOCAndFooter(w io.Writer, off int64, toc *JTOC, diffHash hash.Hash) (tocDgst digest.Digest, err error)
}

// Decompressor represents the helper mothods to be used for parsing eStargz.
type Decompressor interface {
	// Reader returns ReadCloser to be used for decompressing file payload.
	Reader(r io.Reader) (io.ReadCloser, error)

	// FooterSize returns the size of the footer of this blob.
	FooterSize() int64

	// ParseFooter parses the footer and returns the offset and (compressed) size of TOC.
	// payloadBlobSize is the (compressed) size of the blob payload (i.e. the size between
	// the top until the TOC JSON).
	//
	// If tocOffset < 0, we assume that TOC isn't contained in the blob and pass nil reader
	// to ParseTOC. We expect that ParseTOC acquire TOC from the external location and return it.
	//
	// tocSize is optional. If tocSize <= 0, it's by default the size of the range from tocOffset until the beginning of the
	// footer (blob size - tocOff - FooterSize).
	// If blobPayloadSize < 0, blobPayloadSize become the blob size.
	ParseFooter(p []byte) (blobPayloadSize, tocOffset, tocSize int64, err error)

	// ParseTOC parses TOC from the passed reader. The reader provides the partial contents
	// of the underlying blob that has the range specified by ParseFooter method.
	//
	// This function returns tocDgst that represents the digest of TOC that will be used
	// to verify this blob. This must match to the value returned from
	// Compressor.WriteTOCAndFooter that is used when creating this blob.
	//
	// If tocOffset returned by ParseFooter is < 0, we assume that TOC isn't contained in the blob.
	// Pass nil reader to ParseTOC then we expect that ParseTOC acquire TOC from the external location
	// and return it.
	ParseTOC(r io.Reader) (toc *JTOC, tocDgst digest.Digest, err error)
}

type WriteFlushCloser interface {
	io.WriteCloser
	Flush() error
}
   070701000002E8000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002F00000000elemental-cli-0.3.1/vendor/github.com/cpuguy83    070701000002E9000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/cpuguy83/go-md2man  070701000002EA000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/cpuguy83/go-md2man/v2   070701000002EB000081A4000000000000000000000001645E367C00000435000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/cpuguy83/go-md2man/v2/LICENSE.md    The MIT License (MIT)

Copyright (c) 2014 Brian Goff

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
   070701000002EC000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/cpuguy83/go-md2man/v2/md2man    070701000002ED000081A4000000000000000000000001645E367C00000161000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/cpuguy83/go-md2man/v2/md2man/md2man.go  package md2man

import (
	"github.com/russross/blackfriday/v2"
)

// Render converts a markdown document into a roff formatted document.
func Render(doc []byte) []byte {
	renderer := NewRoffRenderer()

	return blackfriday.Run(doc,
		[]blackfriday.Option{blackfriday.WithRenderer(renderer),
			blackfriday.WithExtensions(renderer.GetExtensions())}...)
}
   070701000002EE000081A4000000000000000000000001645E367C0000218E000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/cpuguy83/go-md2man/v2/md2man/roff.go    package md2man

import (
	"fmt"
	"io"
	"os"
	"strings"

	"github.com/russross/blackfriday/v2"
)

// roffRenderer implements the blackfriday.Renderer interface for creating
// roff format (manpages) from markdown text
type roffRenderer struct {
	extensions   blackfriday.Extensions
	listCounters []int
	firstHeader  bool
	firstDD      bool
	listDepth    int
}

const (
	titleHeader      = ".TH "
	topLevelHeader   = "\n\n.SH "
	secondLevelHdr   = "\n.SH "
	otherHeader      = "\n.SS "
	crTag            = "\n"
	emphTag          = "\\fI"
	emphCloseTag     = "\\fP"
	strongTag        = "\\fB"
	strongCloseTag   = "\\fP"
	breakTag         = "\n.br\n"
	paraTag          = "\n.PP\n"
	hruleTag         = "\n.ti 0\n\\l'\\n(.lu'\n"
	linkTag          = "\n\\[la]"
	linkCloseTag     = "\\[ra]"
	codespanTag      = "\\fB\\fC"
	codespanCloseTag = "\\fR"
	codeTag          = "\n.PP\n.RS\n\n.nf\n"
	codeCloseTag     = "\n.fi\n.RE\n"
	quoteTag         = "\n.PP\n.RS\n"
	quoteCloseTag    = "\n.RE\n"
	listTag          = "\n.RS\n"
	listCloseTag     = "\n.RE\n"
	dtTag            = "\n.TP\n"
	dd2Tag           = "\n"
	tableStart       = "\n.TS\nallbox;\n"
	tableEnd         = ".TE\n"
	tableCellStart   = "T{\n"
	tableCellEnd     = "\nT}\n"
)

// NewRoffRenderer creates a new blackfriday Renderer for generating roff documents
// from markdown
func NewRoffRenderer() *roffRenderer { // nolint: golint
	var extensions blackfriday.Extensions

	extensions |= blackfriday.NoIntraEmphasis
	extensions |= blackfriday.Tables
	extensions |= blackfriday.FencedCode
	extensions |= blackfriday.SpaceHeadings
	extensions |= blackfriday.Footnotes
	extensions |= blackfriday.Titleblock
	extensions |= blackfriday.DefinitionLists
	return &roffRenderer{
		extensions: extensions,
	}
}

// GetExtensions returns the list of extensions used by this renderer implementation
func (r *roffRenderer) GetExtensions() blackfriday.Extensions {
	return r.extensions
}

// RenderHeader handles outputting the header at document start
func (r *roffRenderer) RenderHeader(w io.Writer, ast *blackfriday.Node) {
	// disable hyphenation
	out(w, ".nh\n")
}

// RenderFooter handles outputting the footer at the document end; the roff
// renderer has no footer information
func (r *roffRenderer) RenderFooter(w io.Writer, ast *blackfriday.Node) {
}

// RenderNode is called for each node in a markdown document; based on the node
// type the equivalent roff output is sent to the writer
func (r *roffRenderer) RenderNode(w io.Writer, node *blackfriday.Node, entering bool) blackfriday.WalkStatus {

	var walkAction = blackfriday.GoToNext

	switch node.Type {
	case blackfriday.Text:
		escapeSpecialChars(w, node.Literal)
	case blackfriday.Softbreak:
		out(w, crTag)
	case blackfriday.Hardbreak:
		out(w, breakTag)
	case blackfriday.Emph:
		if entering {
			out(w, emphTag)
		} else {
			out(w, emphCloseTag)
		}
	case blackfriday.Strong:
		if entering {
			out(w, strongTag)
		} else {
			out(w, strongCloseTag)
		}
	case blackfriday.Link:
		if !entering {
			out(w, linkTag+string(node.LinkData.Destination)+linkCloseTag)
		}
	case blackfriday.Image:
		// ignore images
		walkAction = blackfriday.SkipChildren
	case blackfriday.Code:
		out(w, codespanTag)
		escapeSpecialChars(w, node.Literal)
		out(w, codespanCloseTag)
	case blackfriday.Document:
		break
	case blackfriday.Paragraph:
		// roff .PP markers break lists
		if r.listDepth > 0 {
			return blackfriday.GoToNext
		}
		if entering {
			out(w, paraTag)
		} else {
			out(w, crTag)
		}
	case blackfriday.BlockQuote:
		if entering {
			out(w, quoteTag)
		} else {
			out(w, quoteCloseTag)
		}
	case blackfriday.Heading:
		r.handleHeading(w, node, entering)
	case blackfriday.HorizontalRule:
		out(w, hruleTag)
	case blackfriday.List:
		r.handleList(w, node, entering)
	case blackfriday.Item:
		r.handleItem(w, node, entering)
	case blackfriday.CodeBlock:
		out(w, codeTag)
		escapeSpecialChars(w, node.Literal)
		out(w, codeCloseTag)
	case blackfriday.Table:
		r.handleTable(w, node, entering)
	case blackfriday.TableHead:
	case blackfriday.TableBody:
	case blackfriday.TableRow:
		// no action as cell entries do all the nroff formatting
		return blackfriday.GoToNext
	case blackfriday.TableCell:
		r.handleTableCell(w, node, entering)
	case blackfriday.HTMLSpan:
		// ignore other HTML tags
	default:
		fmt.Fprintln(os.Stderr, "WARNING: go-md2man does not handle node type "+node.Type.String())
	}
	return walkAction
}

func (r *roffRenderer) handleHeading(w io.Writer, node *blackfriday.Node, entering bool) {
	if entering {
		switch node.Level {
		case 1:
			if !r.firstHeader {
				out(w, titleHeader)
				r.firstHeader = true
				break
			}
			out(w, topLevelHeader)
		case 2:
			out(w, secondLevelHdr)
		default:
			out(w, otherHeader)
		}
	}
}

func (r *roffRenderer) handleList(w io.Writer, node *blackfriday.Node, entering bool) {
	openTag := listTag
	closeTag := listCloseTag
	if node.ListFlags&blackfriday.ListTypeDefinition != 0 {
		// tags for definition lists handled within Item node
		openTag = ""
		closeTag = ""
	}
	if entering {
		r.listDepth++
		if node.ListFlags&blackfriday.ListTypeOrdered != 0 {
			r.listCounters = append(r.listCounters, 1)
		}
		out(w, openTag)
	} else {
		if node.ListFlags&blackfriday.ListTypeOrdered != 0 {
			r.listCounters = r.listCounters[:len(r.listCounters)-1]
		}
		out(w, closeTag)
		r.listDepth--
	}
}

func (r *roffRenderer) handleItem(w io.Writer, node *blackfriday.Node, entering bool) {
	if entering {
		if node.ListFlags&blackfriday.ListTypeOrdered != 0 {
			out(w, fmt.Sprintf(".IP \"%3d.\" 5\n", r.listCounters[len(r.listCounters)-1]))
			r.listCounters[len(r.listCounters)-1]++
		} else if node.ListFlags&blackfriday.ListTypeTerm != 0 {
			// DT (definition term): line just before DD (see below).
			out(w, dtTag)
			r.firstDD = true
		} else if node.ListFlags&blackfriday.ListTypeDefinition != 0 {
			// DD (definition description): line that starts with ": ".
			//
			// We have to distinguish between the first DD and the
			// subsequent ones, as there should be no vertical
			// whitespace between the DT and the first DD.
			if r.firstDD {
				r.firstDD = false
			} else {
				out(w, dd2Tag)
			}
		} else {
			out(w, ".IP \\(bu 2\n")
		}
	} else {
		out(w, "\n")
	}
}

func (r *roffRenderer) handleTable(w io.Writer, node *blackfriday.Node, entering bool) {
	if entering {
		out(w, tableStart)
		// call walker to count cells (and rows?) so format section can be produced
		columns := countColumns(node)
		out(w, strings.Repeat("l ", columns)+"\n")
		out(w, strings.Repeat("l ", columns)+".\n")
	} else {
		out(w, tableEnd)
	}
}

func (r *roffRenderer) handleTableCell(w io.Writer, node *blackfriday.Node, entering bool) {
	if entering {
		var start string
		if node.Prev != nil && node.Prev.Type == blackfriday.TableCell {
			start = "\t"
		}
		if node.IsHeader {
			start += codespanTag
		} else if nodeLiteralSize(node) > 30 {
			start += tableCellStart
		}
		out(w, start)
	} else {
		var end string
		if node.IsHeader {
			end = codespanCloseTag
		} else if nodeLiteralSize(node) > 30 {
			end = tableCellEnd
		}
		if node.Next == nil && end != tableCellEnd {
			// Last cell: need to carriage return if we are at the end of the
			// header row and content isn't wrapped in a "tablecell"
			end += crTag
		}
		out(w, end)
	}
}

func nodeLiteralSize(node *blackfriday.Node) int {
	total := 0
	for n := node.FirstChild; n != nil; n = n.FirstChild {
		total += len(n.Literal)
	}
	return total
}

// because roff format requires knowing the column count before outputting any table
// data we need to walk a table tree and count the columns
func countColumns(node *blackfriday.Node) int {
	var columns int

	node.Walk(func(node *blackfriday.Node, entering bool) blackfriday.WalkStatus {
		switch node.Type {
		case blackfriday.TableRow:
			if !entering {
				return blackfriday.Terminate
			}
		case blackfriday.TableCell:
			if entering {
				columns++
			}
		default:
		}
		return blackfriday.GoToNext
	})
	return columns
}

func out(w io.Writer, output string) {
	io.WriteString(w, output) // nolint: errcheck
}

func escapeSpecialChars(w io.Writer, text []byte) {
	for i := 0; i < len(text); i++ {
		// escape initial apostrophe or period
		if len(text) >= 1 && (text[0] == '\'' || text[0] == '.') {
			out(w, "\\&")
		}

		// directly copy normal characters
		org := i

		for i < len(text) && text[i] != '\\' {
			i++
		}
		if i > org {
			w.Write(text[org:i]) // nolint: errcheck
		}

		// escape a character
		if i >= len(text) {
			break
		}

		w.Write([]byte{'\\', text[i]}) // nolint: errcheck
	}
}
  070701000002EF000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/github.com/denisbrodbeck   070701000002F0000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/denisbrodbeck/machineid 070701000002F1000081A4000000000000000000000001645E367C0000012F000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/denisbrodbeck/machineid/.gitignore  # Compiled Object files, Static and Dynamic libs (Shared Objects)
*.o
*.a
*.so

# Folders
_obj
_test

# Architecture specific extensions/prefixes
*.[568vq]
[568vq].out

*.cgo1.go
*.cgo2.c
_cgo_defun.c
_cgo_gotypes.go
_cgo_export.*

_testmain.go

*.exe
*.test
*.prof

.DS_Store
.vscode
result
/machineid
 070701000002F2000081A4000000000000000000000001645E367C0000043A000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/denisbrodbeck/machineid/LICENSE.md  
The MIT License (MIT)

Copyright (c) 2017 Denis Brodbeck

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
  070701000002F3000081A4000000000000000000000001645E367C00001524000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/denisbrodbeck/machineid/README.md   # machineid provides support for reading the unique machine id of most host OS's (without admin privileges)

![Image of Gopher 47](logo.png)

… because sometimes you just need to reliably identify your machines.

[![GoDoc](https://godoc.org/github.com/denisbrodbeck/machineid?status.svg)](https://godoc.org/github.com/denisbrodbeck/machineid) [![Go Report Card](https://goreportcard.com/badge/github.com/denisbrodbeck/machineid)](https://goreportcard.com/report/github.com/denisbrodbeck/machineid)

## Main Features

* Cross-Platform (tested on Win7+, Debian 8+, Ubuntu 14.04+, OS X 10.6+, FreeBSD 11+)
* No admin privileges required
* Hardware independent (no usage of MAC, BIOS or CPU — those are too unreliable, especially in a VM environment)
* IDs are unique<sup>[1](#unique-key-reliability)</sup> to the installed OS

## Installation

Get the library with

```bash
go get github.com/denisbrodbeck/machineid
```

You can also add the cli app directly to your `$GOPATH/bin` with

```bash
go get github.com/denisbrodbeck/machineid/cmd/machineid
```

## Usage

```golang
package main

import (
  "fmt"
  "log"
  "github.com/denisbrodbeck/machineid"
)

func main() {
  id, err := machineid.ID()
  if err != nil {
    log.Fatal(err)
  }
  fmt.Println(id)
}
```

Or even better, use securely hashed machine IDs:

```golang
package main

import (
  "fmt"
  "log"
  "github.com/denisbrodbeck/machineid"
)

func main() {
  id, err := machineid.ProtectedID("myAppName")
  if err != nil {
    log.Fatal(err)
  }
  fmt.Println(id)
}
```

### Function: ID() (string, error)

Returns original machine id as a `string`.

### Function: ProtectedID(appID string) (string, error)

Returns hashed version of the machine ID as a `string`. The hash is generated in a cryptographically secure way, using a fixed, application-specific key (calculates HMAC-SHA256 of the app ID, keyed by the machine ID).

## What you get

This package returns the OS native machine UUID/GUID, which the OS uses for internal needs.

All machine IDs are usually generated during system installation and stay constant for all subsequent boots.

The following sources are used:

* **BSD** uses `/etc/hostid` and `smbios.system.uuid` as a fallback
* **Linux** uses `/var/lib/dbus/machine-id` ([man](http://man7.org/linux/man-pages/man5/machine-id.5.html))
* **OS X** uses `IOPlatformUUID`
* **Windows** uses the `MachineGuid` from `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography`

## Unique Key Reliability

Do note, that `machine-id` and `MachineGuid` can be changed by root/admin, although that may not come without cost (broken system services and more).
Most IDs won't be regenerated by the OS, when you clone/image/restore a particular OS installation. This is a well known issue with cloned windows installs (not using the official sysprep tools).

**Linux** users can generate a new id with `dbus-uuidgen` and put the id into `/var/lib/dbus/machine-id` and `/etc/machine-id`.
**Windows** users can use the `sysprep` [toolchain](https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/sysprep--generalize--a-windows-installation) to create images, which produce valid images ready for distribution. Such images produce a new unique machine ID on each deployment.

## Security Considerations

A machine ID uniquely identifies the host. Therefore it should be considered "confidential", and must not be exposed in untrusted environments. If you need a stable unique identifier for your app, do not use the machine ID directly.

> A reliable solution is to hash the machine ID in a cryptographically secure way, using a fixed, application-specific key.

That way the ID will be properly unique, and derived in a constant way from the machine ID but there will be no way to retrieve the original machine ID from the application-specific one.

Do something along these lines:

```golang
package main

import (
  "crypto/hmac"
  "crypto/sha256"
  "fmt"
  "github.com/denisbrodbeck/machineid"
)

const appKey = "WowSuchNiceApp"

func main() {
  id, _ := machineid.ID()
  fmt.Println(protect(appKey, id))
  // Output: dbabdb7baa54845f9bec96e2e8a87be2d01794c66fdebac3df7edd857f3d9f97
}

func protect(appID, id string) string {
  mac := hmac.New(sha256.New, []byte(id))
  mac.Write([]byte(appID))
  return fmt.Sprintf("%x", mac.Sum(nil))
}
```

Or simply use the convenience API call:

```golang
hashedID, err := machineid.ProtectedID("myAppName")
```

## Snippets

Don't want to download code, and just need a way to get the data by yourself?

BSD:

```bash
cat /etc/hostid
# or (might be empty)
kenv -q smbios.system.uuid
```

Linux:

```bash
cat /var/lib/dbus/machine-id
# or when not found (e.g. Fedora 20)
cat /etc/machine-id
```

OS X:

```bash
ioreg -rd1 -c IOPlatformExpertDevice | grep IOPlatformUUID
```

Windows:

```batch
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography /v MachineGuid
```
or
* Open Windows Registry via `regedit`
* Navigate to `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography`
* Take value of key `MachineGuid`

## Credits

The Go gopher was created by [Denis Brodbeck](https://github.com/denisbrodbeck) with [gopherize.me](https://gopherize.me/), based on original artwork from [Renee French](http://reneefrench.blogspot.com/).

## License

The MIT License (MIT) — [Denis Brodbeck](https://github.com/denisbrodbeck). Please have a look at the [LICENSE.md](LICENSE.md) for more details.
070701000002F4000081A4000000000000000000000001645E367C00000326000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/denisbrodbeck/machineid/helper.go   package machineid

import (
	"crypto/hmac"
	"crypto/sha256"
	"encoding/hex"
	"io"
	"io/ioutil"
	"os"
	"os/exec"
	"strings"
)

// run wraps `exec.Command` with easy access to stdout and stderr.
func run(stdout, stderr io.Writer, cmd string, args ...string) error {
	c := exec.Command(cmd, args...)
	c.Stdin = os.Stdin
	c.Stdout = stdout
	c.Stderr = stderr
	return c.Run()
}

// protect calculates HMAC-SHA256 of the application ID, keyed by the machine ID and returns a hex-encoded string.
func protect(appID, id string) string {
	mac := hmac.New(sha256.New, []byte(id))
	mac.Write([]byte(appID))
	return hex.EncodeToString(mac.Sum(nil))
}

func readFile(filename string) ([]byte, error) {
	return ioutil.ReadFile(filename)
}

func trim(s string) string {
	return strings.TrimSpace(strings.Trim(s, "\n"))
}
  070701000002F5000081A4000000000000000000000001645E367C0000071F000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/denisbrodbeck/machineid/id.go   // Package machineid provides support for reading the unique machine id of most OSs (without admin privileges).
//
// https://github.com/denisbrodbeck/machineid
//
// https://godoc.org/github.com/denisbrodbeck/machineid/cmd/machineid
//
// This package is Cross-Platform (tested on Win7+, Debian 8+, Ubuntu 14.04+, OS X 10.6+, FreeBSD 11+)
// and does not use any internal hardware IDs (no MAC, BIOS, or CPU).
//
// Returned machine IDs are generally stable for the OS installation
// and usually stay the same after updates or hardware changes.
//
// This package allows sharing of machine IDs in a secure way by
// calculating HMAC-SHA256 over a user provided app ID, which is keyed by the machine id.
//
// Caveat: Image-based environments have usually the same machine-id (perfect clone).
// Linux users can generate a new id with `dbus-uuidgen` and put the id into
// `/var/lib/dbus/machine-id` and `/etc/machine-id`.
// Windows users can use the `sysprep` toolchain to create images, which produce valid images ready for distribution.
package machineid // import "github.com/denisbrodbeck/machineid"

import (
	"fmt"
)

// ID returns the platform specific machine id of the current host OS.
// Regard the returned id as "confidential" and consider using ProtectedID() instead.
func ID() (string, error) {
	id, err := machineID()
	if err != nil {
		return "", fmt.Errorf("machineid: %v", err)
	}
	return id, nil
}

// ProtectedID returns a hashed version of the machine ID in a cryptographically secure way,
// using a fixed, application-specific key.
// Internally, this function calculates HMAC-SHA256 of the application ID, keyed by the machine ID.
func ProtectedID(appID string) (string, error) {
	id, err := ID()
	if err != nil {
		return "", fmt.Errorf("machineid: %v", err)
	}
	return protect(appID, id), nil
}
 070701000002F6000081A4000000000000000000000001645E367C00000357000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/denisbrodbeck/machineid/id_bsd.go   // +build freebsd netbsd openbsd dragonfly solaris

package machineid

import (
	"bytes"
	"os"
)

const hostidPath = "/etc/hostid"

// machineID returns the uuid specified at `/etc/hostid`.
// If the returned value is empty, the uuid from a call to `kenv -q smbios.system.uuid` is returned.
// If there is an error an empty string is returned.
func machineID() (string, error) {
	id, err := readHostid()
	if err != nil {
		// try fallback
		id, err = readKenv()
	}
	if err != nil {
		return "", err
	}
	return id, nil
}

func readHostid() (string, error) {
	buf, err := readFile(hostidPath)
	if err != nil {
		return "", err
	}
	return trim(string(buf)), nil
}

func readKenv() (string, error) {
	buf := &bytes.Buffer{}
	err := run(buf, os.Stderr, "kenv", "-q", "smbios.system.uuid")
	if err != nil {
		return "", err
	}
	return trim(buf.String()), nil
}
 070701000002F7000081A4000000000000000000000001645E367C00000375000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/denisbrodbeck/machineid/id_darwin.go    // +build darwin

package machineid

import (
	"bytes"
	"fmt"
	"os"
	"strings"
)

// machineID returns the uuid returned by `ioreg -rd1 -c IOPlatformExpertDevice`.
// If there is an error running the commad an empty string is returned.
func machineID() (string, error) {
	buf := &bytes.Buffer{}
	err := run(buf, os.Stderr, "ioreg", "-rd1", "-c", "IOPlatformExpertDevice")
	if err != nil {
		return "", err
	}
	id, err := extractID(buf.String())
	if err != nil {
		return "", err
	}
	return trim(id), nil
}

func extractID(lines string) (string, error) {
	for _, line := range strings.Split(lines, "\n") {
		if strings.Contains(line, "IOPlatformUUID") {
			parts := strings.SplitAfter(line, `" = "`)
			if len(parts) == 2 {
				return strings.TrimRight(parts[1], `"`), nil
			}
		}
	}
	return "", fmt.Errorf("Failed to extract 'IOPlatformUUID' value from `ioreg` output.\n%s", lines)
}
   070701000002F8000081A4000000000000000000000001645E367C00000329000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/denisbrodbeck/machineid/id_linux.go // +build linux

package machineid

const (
	// dbusPath is the default path for dbus machine id.
	dbusPath = "/var/lib/dbus/machine-id"
	// dbusPathEtc is the default path for dbus machine id located in /etc.
	// Some systems (like Fedora 20) only know this path.
	// Sometimes it's the other way round.
	dbusPathEtc = "/etc/machine-id"
)

// machineID returns the uuid specified at `/var/lib/dbus/machine-id` or `/etc/machine-id`.
// If there is an error reading the files an empty string is returned.
// See https://unix.stackexchange.com/questions/144812/generate-consistent-machine-unique-id
func machineID() (string, error) {
	id, err := readFile(dbusPath)
	if err != nil {
		// try fallback path
		id, err = readFile(dbusPathEtc)
	}
	if err != nil {
		return "", err
	}
	return trim(string(id)), nil
}
   070701000002F9000081A4000000000000000000000001645E367C0000024A000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/denisbrodbeck/machineid/id_windows.go   // +build windows

package machineid

import (
	"golang.org/x/sys/windows/registry"
)

// machineID returns the key MachineGuid in registry `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography`.
// If there is an error running the commad an empty string is returned.
func machineID() (string, error) {
	k, err := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\Microsoft\Cryptography`, registry.QUERY_VALUE|registry.WOW64_64KEY)
	if err != nil {
		return "", err
	}
	defer k.Close()

	s, _, err := k.GetStringValue("MachineGuid")
	if err != nil {
		return "", err
	}
	return s, nil
}
  070701000002FA000081A4000000000000000000000001645E367C00004EF4000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/denisbrodbeck/machineid/logo.png    PNG

   IHDR  ^  1   W:  PLTE   @@@ܷe   ̽


!!DCC.//б()(&&%YWUƓ=>?##"ffi666nllpiil+,+233ҟqquNNPɆJIJ||yy}cce]]_SSUZZ[ttx``b:::DGJoorxQ˹ġk靝wwzΥVVYۙLTYg좢FMRz6:<sQZ`Wahup~=BEfr{`ksŋjx\gn̗}T~}c ų6ƸX_aR;J@0J		  VpMͺyvnep_BVQK*r崻{p嘞{hbZa[SJM>@"#   0tRNS jBvJ_8/(PW<P"qm­Ŵ}=  KIDATxk#Uc[Z+0䄝fYaJ$)	i͓)IFA`+%&4HC	)mI`* 2inNR|{Μz\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\W2?=>XttoT.M̽KsC#}~Wfřᾡ9"bύL{\ndpz:C//DŗpbX|	\KƋ#w+/ݠ,"oTjFhJd"ajfsyu;80M#
OGúJ$B7^
ݓqr: }Ɠ{iz/{<  >@gΏOtIaA]	#CT؀2''*:wt^KB-!(#4Kusp쭪&v,
t:Sw@PF!e'$1>s+< y}˞<jr\v 0xÈ<i<AQoQVh95N( oyi0芁Qݥh)SOtٛ+DiȌ=\+ĳ{-5$-UVB@]\gg;?С-DDAӨ%*601S{3
B<(RAp,P';zQdM$KxbrYv9/a\.c^zƋST6M]E/7W?lh7BEPB-)}ako\9eUiIy,}/ҐF p*b\Z<][F!S@(#W
tKեJ1g zYLSK;wՒ%1
zrt:nE$/|~7Y<'Gv2ڥE{mHd$Xyt\<e%x*9Uqa^sF Ԝv5U~GQͲ35֬* UkZxm\ELz,<MW2.rpRʕSj
O<j$jI\=:gAU8b90Β8-8>f+P!M÷\=7,8<qKV\e87khbUZ(DFi0LOLh]]	T;nD,p%9mPzѲUZ8ʛi7B/*2|<MyrSm
qayMTf09xkFZT6g@bZFpoZ

iCUҧc7[zȗiAjAq xS	H	:Y$]Rr%oY)~"qDTkZ&)upeuf$׬epʆY\2R!pz@JAZ@,KNN2K3U<
'4rf6"`&QÉBLX<sPbe$'9{ItOb1몕ǋtZj2VlN>ª1`2uBhG-xd)nXD^Jc7$l`52tzMtXAф~?*VT/0C^ ~`uOHd'Drj6F:Bs,ð$I&z-|A5v[ FXڄ62nC>t!aN񆤳a_X =L=.s(5cxj|m ͍^^7dL]H,0y.FB!Ei}NQZ!3X6ؾۗ^vm%%.yv&ӨgͶ	ؘ!1f	@֞bFiN*4X_\(4h/m}dϏ*ǵaP	-Q'"U8%`H/WXh9OWǃyy¶rZd_#Z 	9<UoH9rFH3Pb,ϕ^u@$"qa`X?2!
Waa4'%^஌T[1̨kDkWoYA8T<]S\f<]dh؇220٥^z8Ԭ=vfK/ #2lh~VʟW T'÷PhE~8ˏ CJC7F~vj?ϗ_H`c5+yg{?RVd𔧛Lه;PUD C|eEyd{[֬v9" <8e_?$rmO跭+?ldh_'_)"Q]p0K 0֖b{9L<X]mu}I1*?$ZgkPAA6$-evR?!®mÞn0	o1ȹxGzفGCSAWX{$w{oĐyf쓲eZ7f~!0,.P0 {۾Y&Z|
=6q|xsU|&)؁YX7ҔsF"U!(ȫ?Vv~wXDֽ݅_֥V@-gh(L2n"vo888Ue|Ϸ$AM5#VhIFr+[AWoD]n{N}H,^$0	&%SdU 6WX	|wbXiuxqjY;KN[_8yPg u3;]aK`=P_z٠""c+nޅ,COS H2mJL>M5]KK<Z@<\wwsi
~߯䜆33QCڴ)H6MPqE#%ͲbVݘaWY@a/&7saR3Iۙ|߹dCPz/9EccHRn7`ܢcK7yAׅ\XGj`n0gm>*i]7w2um0"vl߶s=Z$UV нD Zl͉sj|2rظ个E܁_nd Ԅ/RnQ$|Ks\;N/)k{Yr3_Ɵ90x'j}/'5͂vIyqjKEaC1faZ .5s=6U*Z3r ŖhF>XyPcrvlO.W{mOp2^VTʠzo8EXQcwMRMq2m=(xr|9V~oCCx$OYv N$lN|8`{^^dY*~R_
Ln/奶8`A=*~lֿA8cf2RMrƤSp7BsvHtrWB_>ۀo!Bd
m]CEd+%o 7~ٖd[|jJ2>ڥ
#:7HD<D62kP$"VYCo4}6iDoOP}lVtM!l^[G|CUz.Y9w5,UǶkvgv켉	/T`kՠl(+=٫jy!)Zȝ"h_P^&9gr5 M* .:h*%88*
'NYaX|冷96u'N45_KW-or;*B%#/gP#oRXsD궍/CkCizJ|
]y_"6,_V]]/8A܂ʟL+vU-o#"3[,~\hE!74jpYMw$92BE+uA~P=*b*Vߋ0+?tG HŅC|qnˬwܐ
t#@(cyʪ&Esxהiȓre,n!"EU-o,-6yɂk!
q>{]L[ϲw_d7BY'MXɪl@ed	VB(zw$탘oU=-=umVBTO
k6W-/60'fNe|̌UnxtZ/{*!{I:6w
+1SIX#{B[e#V
9Tf҂;,O{+-0ysW><xj&ืNK|.hMeiHtV$D_wڷ3A\EߝZ^ !mXbV:nۮ^QkkP_^+:qޫnlvaX	wz^a2ؘKy9Q[q\@e)b'{cu^k0*fE}n\KE.S[LX,|;@mL"KRiڷk!Z,/a՗&B8ͯ[MXlRu]G_7)1L|y:Ual-_^fЁ-=zӨVB{A:
Nc.oS챕y%@}rs%)H^+C`Ս1B	peeFMŗ=\Hr0O>꽭אn},~ Orie<L9?-ħ9qs=oOz'<Xotg OAb^a[hABH%c;4xxbiDIwq"兲D~Ƨd2`?\czF<̮{~F ?F!ègCCD	#
~?Bg|ʻnpӃ>VP<Bf߄&W=5|y: %d:Hsܽ Y27aȰi.wԜh oCl[ "S 'o,6	w_Qۮ$7R'=ƖH:1jhikMAA ƚ[ #1 Fobp*$(550Oc%!o8);"r=pahẻGA'5550r m}\D	'9.]a3I.,qU&#}Gdi".]F,)؆"ʑ#of!g	+{~kGFDƂV3kX]L`XlBW|Q	lb\rzK
	c2H
	`.<׿"Zs	۠8rm6}0	lLO2D]+oZlm FF;xǎa]CVnsUJf7tbIf֙o_ޔhG9ofɪDvWCHA5樎 MҬlA?wť]	J
X-7pǍv$B{!Qbk_o?C91Ums.#dÓ2mARm&`PeE6kiL	tϙ<EN(@刂;.W.Pr^-씄Nj}-{ε6^:#"rʃ8> oXԼr6Aݕ 
J!Yswu; BntCC.BXu'y\%5ˡt^Jl5ZfUhJҿS38{MbN[4"F0eCXjo":u4+C)ܵdi9-#X2[OSuDj2"4J,)WpJS1Qk}ѐ~|FV^I+oFRLTZ:ఴbv;Q#}s7]0p\6CNDoH<L]&R0js,M7䋉N30:Vg;˶kIr+5Ll.B\UFi+++:n!-DRjX-O{\!EN&Ia.Ξi8i9ҝJґPkw!Ch*\}۴]n8$X^.N6D7	5ї&Y:ܹkp4̘oE tV<B~\qq9K#Y$+sи"#5!uwF.1vɶpyQ zVK3.WP%h&֗ͭU7G^V.IAR>^obQCvǘ:˫ir,VADA!D!;_?j@sB%%5T!.ቼL)U:B8^ӧy=2}^PXf:ug^Y/jbaeKXޝ82aqj FQmvvl,3S\KHYadsmaoU|9T ;^%C,(2$3u.Aõ^﮳g80V)>Q׵ߞ4tSXrs
U:E=*r4&	.*K =ƺeRKYe2p[.6,-5)7^H)!AMW+nFmß~W?M`BxN]#[;e|,Y>}|VZ
oɪ麩N9tҊNT}݊#vP2s3=4f>vfL|n{QfZ|8EltHS?蛹D#o^csނALi,.8e?/oy_+pb#MK}s.6
mH;.nbG1\B\a[y'e/V_WQ4s)SDp*n },RWJ2dwڸ>=p=s-]V4Gv3yiPcT~p(/?XWW'+-pnD|B\moDVA)hnM_`=|֎g.n*Qv'\Gt	vZ.vb|nlr<hTe6g& dk+2_q(>Lq9J3	\ h+3w1ݭd;Blu׋%s-UA@MZe vri333WӦup	F{e;l!"T_LWEMymcYc?Ud?f|q8H
WfUCKM1q+X\C)wqzzf	Ό.&H'A%ӧ'>飉#{^	nzcR^f	
YW`z|1;.Ԙ k,.
W91ݥ(;ؑ6Eݐ.̌.ߚLcUZU/ͱ-`e	$LOb{%łFwfdZ8QMoqŜ%{Mrj+7VRPI+(x}P+F)ڄMTT+A9sDxIHc!nݺ	:qx#YK',As
R.& 0=@I'
?;"RQDMG{RZ	٫!ƫˈ
s*DH
?#GH#`"{W{zf{/Ȣ*թb$M+Y,)B`a"Jj?HEyWf欁pH%ә1FA#VqZe,}l$2&ʠ!XVqL** 0fQw6ot]N;8V^#HDpRuZP¿0ZKڜ&rS":Wkj4R
4țy!&ܽ@f#tjll$vVEdUNjJ~`cf~ZިTՅ*IulHb!Up	6i<'{eAxd11]C˘Gta[ >|qP_Cl8v4aaDslbQRf`i
('g;߾O;G?R'JDaKF(#p}əCo=^y/dSoJn<x{ y[z,cqهm˽:PaXzwU,1xȻ[](C-./$yWOrې{ {OH(n#v7XW2@nݚZPys|X%lst2X5N:#LY狼4L_p_gFA^{+Vye/ƠFd-FS<N}`G{8,\VԜ#pi(?iNxCs#/g+SSSBd$`޻a=lu0y0"pV%I0J^;FP'I4E|,0R)c;RM8!WTI'Anũj
lۂ\$ݕ:mh9tj:Emd_3_cF"6K_N`;Vy|X}7v=G%?0@%_F|Y¸V/Z6S)TZٍ;Ouf6"ѭǻN!jeuL:צmoLo)ff|"Jt{G  Sc4,b[&Ό5	F^MC9s)B{)RR5"u$=׭<1L-4i-#R7Ń?7#alȾPv=DlRoN8,3H>AMR{k?ٵxݳwoh' ^'Q)1I4`R
%ZgHv1 z}gha]Zh|o^|Jl8֧5j\PӱF)YhԂ.k2zطA3,莍ze	)dM2&)u,;l*1蝻M$b+>ɻɛyʎ؃CW5M	g_!R|$Zۦ87BXl	$l_ޥm4+BӬJT1EIX-}~C(U)(kh1Chx~E7p4냭I\8ssϽ=̹uEV6DK'=,8Bi7}%21B/
`PSgp7`LղL`ݳupm(ؽJWX;$ |q{#!B]hԦ
7<`JilA*q=ІEj駡8H&$\sWxXk|W%hPF	:;p!gbw21/ث2ǡchSXK$5'%g//&IV7|=gD~&rLݽW @ӁȲ)9HEP{>z`}#@L-^=vt)CI>"NE@g\k&5e?e>S\X]㾌(
I]%LMe
j/ݣne~YgJt!7=ˋq9:ހ*%fg_ sng_Yw&:+Y|vbTM#EqS =4Zf,ЕC`I,quM|&`-^𠼅zEv*%w<GwK7C@I7rwHQD=27g==O0}yeȐ}۾[A}{/a[!yFG&EK`kO7厇 ;*{j9]EtEtb)VT Mdy69llk3PsǓ-CKN. [0)rJ"ecJ?wJ^x eG^^D9Gܤh(ԈriZ$4)-Bܙ`>pX4Uߋhh&
C$/,L*	K4>?=*{%4Rn@`00e䒗Ǐ$	Ք2CC3)7luI#㗓9y/^O#ZN9R=9qZT 'Q!N<T2&j9-//LIx	ےTB٤tSq;BUIXa)VZUTS!|>DT I2=rp}bjvOQmfm!n	+PJ2)g&ke{x:ǻ>vhcU
?iTh:[,HH|e&_JB҇Q'Y 'lSvrDK@VkdpP_Kc#ư4F [db粤&\|YD\̸8`Bo#8L<z'(\v.al6GqM^	cEDnʉ`ͯp,c\)Jtv>˺{wDdU60,t)Kb\GoZe+! n֍o;ML؅.oS{=vhVl a",]daP@e8ꅘmoTn,smy:gjW%x;mgeRZr"H@5R%[Q`4懽1ptVR#,	i2wZЃ7XR7jhft4FڲOH4ek͕̰|kV vϽr%qرKjA6u̢;pAGDKMbU&Z=-fdc;ڟk9T;j7BW{+5nMǶvErS;Nu7o
fZ"c+ѕwtܱ)Dy<+t
0`Â!]cтo:'G
CwRXqŹȮ#vuXPXlg]=vpINDnD0,#jdwY9θ7Y&l頨A@WPh~hj[Rju<rL{	$B{.5#)QiZK.`&sKxkwfׂ$x\*+q"f][t~9NZ;vy~#ȳTBfb^!Y#ھs#no;Dzf*>W&@M7v8	]{_F'H@K26P	5BwNa,@楸o^dI!Um.)>+lVt& 幼B*=C_tS	xՃW	9Sj3ؘ	W9[S	o$)xt\i[b%ݖiQۧNMM
L,ٔWlMPT~Cҽ#
LWyGSKP2c:Ren5MFjHCc<Bu,#%0";y*FTdX .)D ڷ>D}M!>[![gzѽ'y^ւ7Զ>IpJIxFy>N"*lM=玱/z'|D}9ʃJGG\OBӐi]/kV4n}~V'	5L_)ƱT89E+XnqbԑOpj໶vߞ!Śu1+`\2x^TX~bL&ӳE𖶾I:u-"8z| yv Fw1JDɍ&(=я_㯓Vg6%$_BO̝.8U'j$OK:.L94#ׅ*^_SݙRGq<k!@(aL&fd	(!6,c))mn
&}015%O5jy~3j7r;m?=s~߳~?m7W*,	ߧ)%QQ
WCU{N%\0TƆP%b>==r-	:-yJTDhk4˅zuF\?+bsv^9H8`0A#V]y
XL0:1}Zp@f1luT6ԹI%Ъj}hpB{.RTzIձ^ah?<0wI]{3zPmOﵯx=T?-mmssG\k5<'ULT'.&+
Da uiV3jC/ţL01_kT=܅iVne
6Z"&L<l!T1TD^TzVj)
aL0~//a)TVb3	?dLkwIB;VU|'x.Y 6n寛Z5	.X6eEW%xUk$=&L{@ȸ11H_WR9u^b4'{*^/A\V~<Yk""G(FV5u&9Ds?Z}7]vWխ 5z>洒(.v
54q.TZxs
^6?a(#q[IXW,_8y7tbWӆQvּݺC=i]݃o5;h,'̖|fX 0+qB5 O=#؟BǸ΄
5\SL\792	ezAySo]qU?q_ܧ5m:s_-گ0ycp'Mu*<crLi ǗpU=S(ԝ0w4~],rXV!bNUf)&1fq~xìmdbۡ@&|c/)sz=ce9ǝ 4Efͷxg'
 YރxQB1Vu:sNhnxx7F޳18Hf:f9Fqn"^RQ];=~eLƸ p]~j3<{؅n8+C6Wxq-y;T~&WJUuT3Gv;;NfV,]qm+1{/k=ۯI\~uYTY+ɸy!&iѾn0lkgkNq0NKboX!#=13ɮ쬿9GÛnWg5rXUn43:O@nُ*7jqOa`F_!/ttq7s	`B3q	?<4~NI#%\.͜u܁ۣfiߛ?,l6rf%L"z
QV^tB|UŸXZ9(z^΀$};͹5	+x8%w:щ9o,n ]rgu/IZg{?gWŻ5GojDq<܍9 h7+'P ;Z:5M+{gxWP/O½JVWz᝭҆iS<o&6+ nsxEQ>|/bpyCKGxo75qvvݐ!H*BLqwJHUǕCLk{LWNCU$VNa=r'PxWvbѪ53{Cl":Dy!-7 &1Wr XT҆/B&Uڃd9Rb
iQ8qǓb/B|Zxzgq/޺[j~f=kpXXlZcכtҌ@>%3냿4i݈ef2tTpݠ*[Ob05:0܁l,Bc |Tx2{b){tMz`_5`́ج(qC:nlEvx3dncSxQ|!^ oƖݡ	JML-m6671<06&8XWjBr
x}azX7_IV;].~][I׵fDMXTk~; 0QIMWDj=I9?u18jQ΄c5vo`Fww,cO`äzzTGg=O	@Wm*hbC=V7޼޴ixscxU)ɒ*sT1J
d3}֘&c}rV6K}m4^bVV⠏{/<o}'2V3ؽ'n{\MLGzVة K+*oF⽛>{Uk+>*O1p{0چXqpU
bЩmI^u%(/Y.;vVDF]vkfqyʁ4fUKTGG><Z"z`t 9MGw.B h\S,&Zvrj#m+WYa`MUfG矎*\|E{֏V [4oG[(ku쾃@}У1o'绖d)I}6{PUZj҅@LrbCO]xZޏSP٠R3 ?H>LIZX­?Ao9ME+>x{I`H=?hyaZ!*T$+Fu ^andc}JmE3Ԇvb~ncӳ`lC#kMf/ԗ"OnAoǩ'n!x/zG/`TUK"`3KJ,l>rgծ,)@^(f-TfUΠY沓p$;ٴwmel.͟B#;YW-=٣$颽|ug=oyuI,,(DOS,,t48 (lWZ\ގ#ޑ
]ɰh{<W4jp{z᫔#c.7 ĄPFmZw¶S^JNJu
.,.?h!Σrm,`v])H^WabFM3@.sQ#1)rsd皲vV\Cey`SP$18nT)xUͻ6y:^yc>ex?xݠt&0Ћ 4=~?|SNAtus4`kS`@{+m_PS<pMݟK䯳˄oP
ާtˮBFRm>Ba̪fB.!V<2Ff%:꼤o8.qިUgEXOI?(6*HEc-ΤTOi~tN3BMVy&~l'?zt&O˒A⾧i6sb	N{t	0kS[dbwBbYDy~ugVq Iv Ap"
x>}75݄Q$o}#Me/^>{f;J6T*T]5}h2YV 5`Mb-#ҁA _Dơ5 zTwݰM>N<:s"?xH. P({⁝~J8ޠfqx{@8w7#nM7h.V:REd_@eD?lqEN08D?x#ż s-H9IJ XcInAl?/fŖΐR:|MYOTldcҊVOJ!Жb䋁7xk
,}_r$IjZߔMY(	\X$hruۗShSB30e
Go9OOcpj¬'-.? ÍRS5Q9o+T.Hև
#dgi∪% .龋u?z Sq%bz٬5m/rWMd|"ݘ	*XDeh*3))bP(P7'+m.UibK'o<p{Ժ^9'~Gn{~|_@6w *:4Tu@e&l#Ofp6F:;V.nx$zЫE8Ò^Gd﯂xAi#|X~xe}j!W.鶙xmF]~ђ6SrZnש4Ym[ δŦzY}YӮ$$]$X+p|ۉe?wy%uDvAۻӠȀy*, P2-,AD8؉.RQ{N^Ao K10`S}N&^_Əbc#B|NL>1^<D{"΍w,%V
`Cq00KAeS{{VF7 cUk͇ پxB?X:
`bdx};RbjŬx/F@v_(C`0˫9&$r"2=FQ>qJ=o[o~4^s.C&l;%
%Px;V,k[@lSUf{.Mݕ@ehؗGoKM^pVaQfY+ᐁ!(v_>c'zg[F	%mpotv TX!&S+Mٍ2dM府*BJ
gTii~rBZ:Փ.9/cW*L|#hME"PnfuTf	K2kRF5܃V)]wa70_=W}]/6az
4s.ο+.ZB}3IڎUO] Tfr(:fUg';XN{/o
`vC؋+1ze%jxކxcfy YȤd)޲횭~;
36}%VN6\O/o.k@^Z)~d?j7)x4FMiۻ=ҳH^aK.ޖ)J1=|CA;ID4W</ۧZ#rJG{3.{*pvX+FArDi ;@[.峮~;NȒk~v{["T7<6_ 
A0yK=Wk*3;ي;鄫>7bf>n
Yh"rk{{ܠO;
]yeI#kxqoZ$He&7:yۉ-Vؑ0ު'yt:uVq|qO*OkkyeYkDzm~Nm<Bq58˳<ft	e)o-ʗ$G3l'!Q]'/	dIxim~/*WE* ]abyqئq(R\0WGK띀MdY|زo,}x\꛳P3HWNz[1&ݢZ%6؈Z&o̘	h7^ĜZ=f"Oԓ"լF@uXFFA\[:\V#o.iO<ÇZ_}")z5L`KZ5ÏfφsvC}%-.omxobڶ	lyE^-hMi/K/-ou'>:,2b楴g`W]c~7$>KbN|,+Фu<HOKʑ$!$ĒjHǤ}e1{-t7*!&=kYCAŬw-ʩO[y%V'O|i[s!6^@Gz뿎W9 x+2yn.nWjt9O	#Jp0huo    IENDB`070701000002FB000081A4000000000000000000000001645E367C000000A2000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/denisbrodbeck/machineid/makefile    .PHONY: build clean default test

build: clean
	@go build -o machineid ./cmd/machineid/main.go

clean:
	@rm -rf ./machineid

test:
	go test ./...

default: build
  070701000002FC000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/vendor/github.com/diskfs  070701000002FD000041ED000000000000000000000006645E367C00000000000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs    070701000002FE000081A4000000000000000000000001645E367C00000008000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/.gitignore vendor/
070701000002FF000081A4000000000000000000000001645E367C000004C8000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/.golangci.yml  linters-settings:
  errcheck:
    check-type-assertions: true
  goconst:
    min-len: 2
    min-occurrences: 3
  gocritic:
    enabled-tags:
      - diagnostic
      - experimental
      - opinionated
      - performance
      - style
  govet:
    check-shadowing: false
  nolintlint:
    require-explanation: true
    require-specific: true

linters:
  disable-all: true
  enable:
    - bodyclose
    - deadcode
    - depguard
    - dogsled
    - dupl
    - errcheck
    - exportloopref
    - exhaustive
    - gocritic
    - gofmt
    - goimports
    - gocyclo
    - gosec
    - gosimple
    - govet
    - ineffassign
    - misspell
    - nolintlint
    - nakedret
    - prealloc
    - predeclared
    - revive
    - staticcheck
    - structcheck
    - stylecheck
    - thelper
    - tparallel
    - typecheck
    - unconvert
    - unparam
    - varcheck
    - whitespace
    # - wsl # лишние пустые строки и т.д., чистый стиль
    # - goconst # проверка на наличие переменных, которых следовало бы вынести в const
    # - gomnd # поиск всяких "магических" чисел, переменных

run:
  issues-exit-code: 107070100000300000081A4000000000000000000000001645E367C0000042D000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/LICENSE    MIT License

Copyright (c) 2017 Avi Deitcher

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
   07070100000301000081A4000000000000000000000001645E367C0000078E000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/Makefile   .PHONY: test image unit_test

PACKAGE_NAME?=github.com/diskfs/go-diskfs
IMAGE ?= diskfs/go-diskfs:build
GOENV ?= GO111MODULE=on CGO_ENABLED=0
GO_FILES ?= $(shell $(GOENV) go list ./...)
GOBIN ?= $(shell go env GOPATH)/bin
LINTER ?= $(GOBIN)/golangci-lint
LINTER_VERSION ?= v1.49.0

# BUILDARCH is the host architecture
# ARCH is the target architecture
# we need to keep track of them separately
BUILDARCH ?= $(shell uname -m)
BUILDOS ?= $(shell uname -s | tr A-Z a-z)

# canonicalized names for host architecture
ifeq ($(BUILDARCH),aarch64)
BUILDARCH=arm64
endif
ifeq ($(BUILDARCH),x86_64)
BUILDARCH=amd64
endif

# unless otherwise set, I am building for my own architecture, i.e. not cross-compiling
# and for my OS
ARCH ?= $(BUILDARCH)
OS ?= $(BUILDOS)

# canonicalized names for target architecture
ifeq ($(ARCH),aarch64)
        override ARCH=arm64
endif
ifeq ($(ARCH),x86_64)
    override ARCH=amd64
endif

BUILD_CMD = CGO_ENABLED=0 GOOS=$(OS) GOARCH=$(ARCH)
ifdef DOCKERBUILD
BUILD_CMD = docker run --rm \
                -e GOARCH=$(ARCH) \
                -e GOOS=linux \
                -e CGO_ENABLED=0 \
                -v $(CURDIR):/go/src/$(PACKAGE_NAME) \
                -w /go/src/$(PACKAGE_NAME) \
                $(BUILDER_IMAGE)
endif

image:
	docker build -t $(IMAGE) testhelper/docker

# because we keep making the same typo
unit-test: unit_test
unit_test:
	@$(GOENV) go test $(GO_FILES)

test: image
	TEST_IMAGE=$(IMAGE) $(GOENV) go test $(GO_FILES)

golangci-lint: $(LINTER)
$(LINTER):
	curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(GOBIN) $(LINTER_VERSION)

## Check the file format
fmt-check:
	@if [ -n "$(shell $(BUILD_CMD) gofmt -l ${GO_FILES})" ]; then \
	  $(BUILD_CMD) gofmt -s -e -d ${GO_FILES}; \
	  exit 1; \
	fi

## Lint the files
lint: golangci-lint
	@$(BUILD_CMD) $(LINTER) run ./...

## Vet the files
vet:
	@$(BUILD_CMD) go vet ${GO_FILES}
  07070100000302000081A4000000000000000000000001645E367C00001E64000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/README.md  # go-diskfs
go-diskfs is a [go](https://golang.org) library for performing manipulation of disks, disk images and filesystems natively in go.

You can do nearly everything that go-diskfs provides using shell tools like gdisk/fdisk/mkfs.vfat/mtools/sgdisk/sfdisk/dd. However, these have the following limitations:

* they need to be installed on your system
* you need to fork/exec to the command (and possibly a shell) to run them
* some are difficult to run without mounting disks, which may not be possible or may be risky in your environment, and almost certainly will require root privileges
* you do not want to launch a VM to run the excellent [libguestfs](https://libguestfs.org) and it may not be installed

go-diskfs performs all modifications _natively_ in go, without mounting any disks.

## Usage
Note: detailed go documentation is available at [godoc.org](https://godoc.org/github.com/diskfs/go-diskfs).

### Concepts
`go-diskfs` has a few basic concepts:

* Disk
* Partition
* Filesystem

#### Disk
A disk represents either a file or block device that you access and manipulate. With access to the disk, you can:

* read, modify or create a partition table
* open an existing or create a new filesystem

#### Partition
A partition is a slice of a disk, beginning at one point and ending at a later one. You can have multiple partitions on a disk, and a partition table that describes how partitions are laid out on the disk.

#### Filesystem
A filesystem is a construct that gives you access to create, read and write directories and files.

You do *not* need a partitioned disk to work with a filesystem; filesystems can be an entire `disk`, just as they can be an entire block device. However, they also can be in a partition in a `disk`

### Working With a Disk
Before you can do anything with a disk - partitions or filesystems - you need to access it.

* If you have an existing disk or image file, you `Open()` it
* If you are creating a new one, usually just disk image files, you `Create()` it

The disk will be opened read-write, with exclusive access. If it cannot do either, it will fail.

Once you have a `Disk`, you can work with partitions or filesystems in it.

#### Partitions on a Disk

The following are the partition actions you can take on a disk:

* `GetPartitionTable()` - if one exists. Will report the table layout and type.
* `Partition()` - partition the disk, overwriting any previous table if it exists

As of this writing, supported partition formats are Master Boot Record (`mbr`) and GUID Partition Table (`gpt`).

#### Filesystems on a Disk
Once you have a valid disk, and optionally partition, you can access filesystems on that disk image or partition.

* `CreateFilesystem()` - create a filesystem in an individual partition or the entire disk
* `GetFilesystem()` - access an existing filesystem in a partition or the entire disk

As of this writing, supported filesystems include `FAT32` and `ISO9660` (a.k.a. `.iso`).

With a filesystem in hand, you can create, access and modify directories and files.

* `Mkdir()` - make a directory in a filesystem
* `Readdir()` - read all of the entries in a directory
* `OpenFile()` - open a file for read, optionally write, create and append

Note that `OpenFile()` is intended to match [os.OpenFile](https://golang.org/pkg/os/#OpenFile) and returns a `godiskfs.File` that closely matches [os.File](https://golang.org/pkg/os/#File)

With a `File` in hand, you then can:

* `Write(p []byte)` to the file
* `Read(b []byte)` from the file
* `Seek(offset int64, whence int)` to set the next read or write to an offset in the file

### Read-Only Filesystems
Some filesystem types are intended to be created once, after which they are read-only, for example `ISO9660`/`.iso` and `squashfs`.

`godiskfs` recognizes read-only filesystems and limits working with them to the following:

* You can `GetFilesystem()` a read-only filesystem and do all read activities, but cannot write to them. Any attempt to `Mkdir()` or `OpenFile()` in write/append/create modes or `Write()` to the file will result in an error.
* You can `CreateFilesystem()` a read-only filesystem and write anything to it that you want. It will do all of its work in a "scratch" area, or temporary "workspace" directory on your local filesystem. When you are ready to complete it, you call `Finalize()`, after which it becomes read-only. If you forget to `Finalize()` it, you get... nothing. The `Finalize()` function exists only on read-only filesystems.

### Example

There are examples in the [examples/](./examples/) directory. Here is one to get you started.

The following example will create a fully bootable EFI disk image. It assumes you have a bootable EFI file (any modern Linux kernel compiled with `CONFIG_EFI_STUB=y` will work) available.

```go
import diskfs "github.com/diskfs/go-diskfs"

espSize int := 100*1024*1024 // 100 MB
diskSize int := espSize + 4*1024*1024 // 104 MB


// create a disk image
diskImg := "/tmp/disk.img"
disk := diskfs.Create(diskImg, diskSize, diskfs.Raw, diskfs.SectorSizeDefault)
// create a partition table
blkSize int := 512
partitionSectors int := espSize / blkSize
partitionStart int := 2048
partitionEnd int := partitionSectors - partitionStart + 1
table := PartitionTable{
	type: partition.GPT,
	partitions:[
		Partition{Start: partitionStart, End: partitionEnd, Type: partition.EFISystemPartition, Name: "EFI System"}
	]
}
// apply the partition table
err = disk.Partition(table)


/*
 * create an ESP partition with some contents
 */
kernel, err := os.ReadFile("/some/kernel/file")

fs, err := disk.CreateFilesystem(0, diskfs.TypeFat32)

// make our directories
err = fs.Mkdir("/EFI/BOOT")
rw, err := fs.OpenFile("/EFI/BOOT/BOOTX64.EFI", os.O_CREATE|os.O_RDRWR)

err = rw.Write(kernel)

```

## Tests
There are two ways to run tests: unit and integration (somewhat loosely defined).

* Unit: these tests run entirely within the go process, primarily test unexported and some exported functions, and may use pre-defined test fixtures in a directory's `testdata/` subdirectory. By default, these are run by running `go test ./...` or just `make unit_test`.
* Integration: these test the exported functions and their ability to create or manipulate correct files. They are validated by running a [docker](https://docker.com) container with the right utilities to validate the output. These are run by running `TEST_IMAGE=diskfs/godiskfs go test ./...` or just `make test`. The value of `TEST_IMAGE` will be the image to use to run tests.

For integration tests to work, the correct docker image must be available. You can create it by running `make image`. Check the [Makefile](./Makefile) to see the `docker build` command used to create it. Running `make test` automatically creates the image for you.

### Integration Test Image
The integration test image contains the various tools necessary to test images: `mtools`, `fdisk`, `gdisk`, etc. It works on precisely one file at a time. In order to avoid docker volume mounting limitations with various OSes, instead of mounting the image `-v`, it expects to receive the image as a `stdin` stream, and saves it internally to the container as `/file.img`.

For example, to test the existence of directory `/abc` on file `$PWD/foo.img`:

```
cat $PWD/foo.img | docker run -i --rm $INT_IMAGE mdir -i /file.img /abc
```


## Plans
Future plans are to add the following:

* embed boot code in `mbr` e.g. `altmbr.bin` (no need for `gpt` since an ESP with `/EFI/BOOT/BOOT<arch>.EFI` will boot)
* `ext4` filesystem
* `Joliet` extensions to `iso9660`
* `Rock Ridge` sparse file support - supports the flag, but not yet reading or writing
* `squashfs` sparse file support - currently treats sparse files as regular files
* `qcow` disk format
07070100000303000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/disk   07070100000304000081A4000000000000000000000001645E367C00002048000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/disk/disk.go   // Package disk provides utilities for working directly with a disk
//
// Most of the provided functions are intelligent wrappers around implementations of
// github.com/diskfs/go-diskfs/partition and github.com/diskfs/go-diskfs/filesystem
package disk

import (
	"errors"
	"fmt"
	"io"
	"os"

	log "github.com/sirupsen/logrus"

	"github.com/diskfs/go-diskfs/filesystem"
	"github.com/diskfs/go-diskfs/filesystem/fat32"
	"github.com/diskfs/go-diskfs/filesystem/iso9660"
	"github.com/diskfs/go-diskfs/filesystem/squashfs"
	"github.com/diskfs/go-diskfs/partition"
)

// Disk is a reference to a single disk block device or image that has been Create() or Open()
type Disk struct {
	File              *os.File
	Info              os.FileInfo
	Type              Type
	Size              int64
	LogicalBlocksize  int64
	PhysicalBlocksize int64
	Table             partition.Table
	Writable          bool
	DefaultBlocks     bool
}

// Type represents the type of disk this is
type Type int

const (
	// File is a file-based disk image
	File Type = iota
	// Device is an OS-managed block device
	Device
)

var (
	errIncorrectOpenMode = errors.New("disk file or device not open for write")
)

// GetPartitionTable retrieves a PartitionTable for a Disk
//
// If the table is able to be retrieved from the disk, it is saved in the instance.
//
// returns an error if the Disk is invalid or does not exist, or the partition table is unknown
func (d *Disk) GetPartitionTable() (partition.Table, error) {
	t, err := partition.Read(d.File, int(d.LogicalBlocksize), int(d.PhysicalBlocksize))
	if err != nil {
		return nil, err
	}
	d.Table = t
	return t, nil
}

// Partition applies a partition.Table implementation to a Disk
//
// The Table can have zero, one or more Partitions, each of which is unique to its
// implementation. E.g. MBR partitions in mbr.Table look different from GPT partitions in gpt.Table
//
// Actual writing of the table is delegated to the individual implementation
func (d *Disk) Partition(table partition.Table) error {
	if !d.Writable {
		return errIncorrectOpenMode
	}
	// fill in the uuid
	err := table.Write(d.File, d.Size)
	if err != nil {
		return fmt.Errorf("failed to write partition table: %v", err)
	}
	d.Table = table
	// the partition table needs to be re-read only if
	// the disk file is an actual block device
	if d.Type == Device {
		err = d.ReReadPartitionTable()
		if err != nil {
			return fmt.Errorf("unable to re-read the partition table. Kernel still uses old partition table: %v", err)
		}
	}
	return nil
}

// WritePartitionContents writes the contents of an io.Reader to a given partition
//
// if successful, returns the number of bytes written
//
// returns an error if there was an error writing to the disk, reading from the reader, the table
// is invalid, or the partition is invalid
func (d *Disk) WritePartitionContents(part int, reader io.Reader) (int64, error) {
	if !d.Writable {
		return -1, errIncorrectOpenMode
	}
	if d.Table == nil {
		return -1, fmt.Errorf("cannot write contents of a partition on a disk without a partition table")
	}
	if part < 0 {
		return -1, fmt.Errorf("cannot write contents of a partition without specifying a partition")
	}
	partitions := d.Table.GetPartitions()
	// API indexes from 1, but slice from 0
	if part > len(partitions) {
		return -1, fmt.Errorf("cannot write contents of partition %d which is greater than max partition %d", part, len(partitions))
	}
	written, err := partitions[part-1].WriteContents(d.File, reader)
	return int64(written), err
}

// ReadPartitionContents reads the contents of a partition to an io.Writer
//
// if successful, returns the number of bytes read
//
// returns an error if there was an error reading from the disk, writing to the writer, the table
// is invalid, or the partition is invalid
func (d *Disk) ReadPartitionContents(part int, writer io.Writer) (int64, error) {
	if d.Table == nil {
		return -1, fmt.Errorf("cannot read contents of a partition on a disk without a partition table")
	}
	if part < 0 {
		return -1, fmt.Errorf("cannot read contents of a partition without specifying a partition")
	}
	partitions := d.Table.GetPartitions()
	// API indexes from 1, but slice from 0
	if part > len(partitions) {
		return -1, fmt.Errorf("cannot read contents of partition %d which is greater than max partition %d", part, len(partitions))
	}
	return partitions[part-1].ReadContents(d.File, writer)
}

// FilesystemSpec represents the specification of a filesystem to be created
type FilesystemSpec struct {
	Partition   int
	FSType      filesystem.Type
	VolumeLabel string
	WorkDir     string
}

// CreateFilesystem creates a filesystem on a disk image, the equivalent of mkfs.
//
// Required:
//   - desired partition number, or 0 to create the filesystem on the entire block device or
//     disk image,
//   - the filesystem type from github.com/diskfs/go-diskfs/filesystem
//
// Optional:
//   - volume label for those filesystems that support it; under Linux this shows
//     in '/dev/disks/by-label/<label>'
//
// if successful, returns a filesystem-implementing structure for the given filesystem type
//
// returns error if there was an error creating the filesystem, or the partition table is invalid and did not
// request the entire disk.
func (d *Disk) CreateFilesystem(spec FilesystemSpec) (filesystem.FileSystem, error) {
	// find out where the partition starts and ends, or if it is the entire disk
	var (
		size, start int64
	)
	switch {
	case !d.Writable:
		return nil, errIncorrectOpenMode
	case spec.Partition == 0:
		size = d.Size
		start = 0
	case d.Table == nil:
		return nil, fmt.Errorf("cannot create filesystem on a partition without a partition table")
	default:
		partitions := d.Table.GetPartitions()
		// API indexes from 1, but slice from 0
		part := spec.Partition - 1
		if spec.Partition > len(partitions) {
			return nil, fmt.Errorf("cannot create filesystem on partition %d greater than maximum partition %d", spec.Partition, len(partitions))
		}
		size = partitions[part].GetSize()
		start = partitions[part].GetStart()
	}

	switch spec.FSType {
	case filesystem.TypeFat32:
		return fat32.Create(d.File, size, start, d.LogicalBlocksize, spec.VolumeLabel)
	case filesystem.TypeISO9660:
		return iso9660.Create(d.File, size, start, d.LogicalBlocksize, spec.WorkDir)
	case filesystem.TypeSquashfs:
		return nil, errors.New("squashfs is a read-only filesystem")
	default:
		return nil, errors.New("unknown filesystem type requested")
	}
}

// GetFilesystem gets the filesystem that already exists on a disk image
//
// pass the desired partition number, or 0 to create the filesystem on the entire block device / disk image,
//
// if successful, returns a filesystem-implementing structure for the given filesystem type
//
// returns error if there was an error reading the filesystem, or the partition table is invalid and did not
// request the entire disk.
func (d *Disk) GetFilesystem(part int) (filesystem.FileSystem, error) {
	// find out where the partition starts and ends, or if it is the entire disk
	var (
		size, start int64
		err         error
	)

	switch {
	case part == 0:
		size = d.Size
		start = 0
	case d.Table == nil:
		return nil, fmt.Errorf("cannot read filesystem on a partition without a partition table")
	default:
		partitions := d.Table.GetPartitions()
		// API indexes from 1, but slice from 0
		if part > len(partitions) {
			return nil, fmt.Errorf("cannot get filesystem on partition %d greater than maximum partition %d", part, len(partitions))
		}
		size = partitions[part-1].GetSize()
		start = partitions[part-1].GetStart()
	}

	// just try each type
	log.Debug("trying fat32")
	fat32FS, err := fat32.Read(d.File, size, start, d.LogicalBlocksize)
	if err == nil {
		return fat32FS, nil
	}
	log.Debugf("fat32 failed: %v", err)
	pbs := d.PhysicalBlocksize
	if d.DefaultBlocks {
		pbs = 0
	}
	log.Debugf("trying iso9660 with physical block size %d", pbs)
	iso9660FS, err := iso9660.Read(d.File, size, start, pbs)
	if err == nil {
		return iso9660FS, nil
	}
	log.Debugf("iso9660 failed: %v", err)
	squashFS, err := squashfs.Read(d.File, size, start, d.LogicalBlocksize)
	if err == nil {
		return squashFS, nil
	}
	return nil, fmt.Errorf("unknown filesystem on partition %d", part)
}
07070100000305000081A4000000000000000000000001645E367C00000265000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/disk/disk_unix.go  //go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris

package disk

import (
	"fmt"

	"golang.org/x/sys/unix"
)

const (
	blkrrpart = 0x125f
)

// ReReadPartitionTable forces the kernel to re-read the partition table
// on the disk.
//
// It is done via an ioctl call with request as BLKRRPART.
func (d *Disk) ReReadPartitionTable() error {
	fd := d.File.Fd()
	_, err := unix.IoctlGetInt(int(fd), blkrrpart)
	if err != nil {
		return fmt.Errorf("unable to re-read partition table: %v", err)
	}
	return nil
}
   07070100000306000081A4000000000000000000000001645E367C000000F5000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/disk/disk_windows.go   package disk

// ReReadPartitionTable is used to re-read the partition table
// on the disk.
//
// In windows machine, force re-read is not done. The method returns nil when
// invoked
func (d *Disk) ReReadPartitionTable() error {
	return nil
}
   07070100000307000081A4000000000000000000000001645E367C00002805000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/diskfs.go  // Package diskfs implements methods for creating and manipulating disks and filesystems
//
// methods for creating and manipulating disks and filesystems, whether block devices
// in /dev or direct disk images. This does **not**
// mount any disks or filesystems, neither directly locally nor via a VM. Instead, it manipulates the
// bytes directly.
//
// This is not intended as a replacement for operating system filesystem and disk drivers. Instead,
// it is intended to make it easy to work with partitions, partition tables and filesystems directly
// without requiring operating system mounts.
//
// Some examples:
//
// 1. Create a disk image of size 10MB with a FAT32 filesystem spanning the entire disk.
//
//		import diskfs "github.com/diskfs/go-diskfs"
//		size := 10*1024*1024 // 10 MB
//
//		diskImg := "/tmp/disk.img"
//		disk := diskfs.Create(diskImg, size, diskfs.Raw, diskfs.SectorSizeDefault)
//
//		fs, err := disk.CreateFilesystem(0, diskfs.TypeFat32)
//
//	 2. Create a disk of size 20MB with an MBR partition table, a single partition beginning at block 2048 (1MB),
//	    of size 10MB filled with a FAT32 filesystem.
//
//	    import diskfs "github.com/diskfs/go-diskfs"
//
//	    diskSize := 10*1024*1024 // 10 MB
//
//	    diskImg := "/tmp/disk.img"
//	    disk := diskfs.Create(diskImg, size, diskfs.Raw, diskfs.SectorSizeDefault)
//
//	    table := &mbr.Table{
//	    LogicalSectorSize:  512,
//	    PhysicalSectorSize: 512,
//	    Partitions: []*mbr.Partition{
//	    {
//	    Bootable:      false,
//	    Type:          Linux,
//	    Start:         2048,
//	    Size:          20480,
//	    },
//	    },
//	    }
//
//	    fs, err := disk.CreateFilesystem(1, diskfs.TypeFat32)
//
//	 3. Create a disk of size 20MB with a GPT partition table, a single partition beginning at block 2048 (1MB),
//	    of size 10MB, and fill with the contents from the 10MB file "/root/contents.dat"
//
//	    import diskfs "github.com/diskfs/go-diskfs"
//
//	    diskSize := 10*1024*1024 // 10 MB
//
//	    diskImg := "/tmp/disk.img"
//	    disk := diskfs.Create(diskImg, size, diskfs.Raw, diskfs.SectorSizeDefault)
//
//	    table := &gpt.Table{
//	    LogicalSectorSize:  512,
//	    PhysicalSectorSize: 512,
//	    Partitions: []*gpt.Partition{
//	    {
//	    LogicalSectorSize:  512,
//	    PhysicalSectorSize: 512,
//	    ProtectiveMBR:      true,
//	    },
//	    },
//	    }
//
//	    f, err := os.Open("/root/contents.dat")
//	    written, err := disk.WritePartitionContents(1, f)
//
//	 4. Create a disk of size 20MB with an MBR partition table, a single partition beginning at block 2048 (1MB),
//	    of size 10MB filled with a FAT32 filesystem, and create some directories and files in that filesystem.
//
//	    import diskfs "github.com/diskfs/go-diskfs"
//
//	    diskSize := 10*1024*1024 // 10 MB
//
//	    diskImg := "/tmp/disk.img"
//	    disk := diskfs.Create(diskImg, size, diskfs.Raw, diskfs.SectorSizeDefault)
//
//	    table := &mbr.Table{
//	    LogicalSectorSize:  512,
//	    PhysicalSectorSize: 512,
//	    Partitions: []*mbr.Partition{
//	    {
//	    Bootable:      false,
//	    Type:          Linux,
//	    Start:         2048,
//	    Size:          20480,
//	    },
//	    },
//	    }
//
//	    fs, err := disk.CreateFilesystem(1, diskfs.TypeFat32)
//	    err := fs.Mkdir("/FOO/BAR")
//	    rw, err := fs.OpenFile("/FOO/BAR/AFILE.EXE", os.O_CREATE|os.O_RDRWR)
//	    b := make([]byte, 1024, 1024)
//	    rand.Read(b)
//	    err := rw.Write(b)
package diskfs

import (
	"errors"
	"fmt"
	"io"
	"os"

	log "github.com/sirupsen/logrus"

	"github.com/diskfs/go-diskfs/disk"
)

// when we use a disk image with a GPT, we cannot get the logical sector size from the disk via the kernel
//
//	so we use the default sector size of 512, per Rod Smith
const (
	defaultBlocksize int = 512
	// firstblock                       = 2048
	// blksszGet                        = 0x1268
	// blkpbszGet                       = 0x127b
)

// Format represents the format of the disk
type Format int

const (
	// Raw disk format for basic raw disk
	Raw Format = iota
)

// OpenModeOption represents file open modes
type OpenModeOption int

const (
	// ReadOnly open file in read only mode
	ReadOnly OpenModeOption = iota
	// ReadWriteExclusive open file in read-write exclusive mode
	ReadWriteExclusive
)

// OpenModeOption.String()
func (m OpenModeOption) String() string {
	switch m {
	case ReadOnly:
		return "read-only"
	case ReadWriteExclusive:
		return "read-write exclusive"
	default:
		return "unknown"
	}
}

var openModeOptions = map[OpenModeOption]int{
	ReadOnly:           os.O_RDONLY,
	ReadWriteExclusive: os.O_RDWR | os.O_EXCL,
}

// SectorSize represents the sector size to use
type SectorSize int

const (
	// SectorSizeDefault default behavior, defaulting to defaultBlocksize
	SectorSizeDefault SectorSize = 0
	// SectorSize512 override sector size to 512
	SectorSize512 SectorSize = 512
	// SectorSize4k override sector size to 4k
	SectorSize4k SectorSize = 4096
)

func writableMode(mode OpenModeOption) bool {
	m, ok := openModeOptions[mode]
	if ok {
		if m&os.O_RDWR != 0 || m&os.O_WRONLY != 0 {
			return true
		}
	}

	return false
}

func initDisk(f *os.File, openMode OpenModeOption, sectorSize SectorSize) (*disk.Disk, error) {
	var (
		diskType      disk.Type
		size          int64
		lblksize      = int64(defaultBlocksize)
		pblksize      = int64(defaultBlocksize)
		defaultBlocks = true
	)
	log.Debug("initDisk(): start")

	if sectorSize != SectorSizeDefault {
		lblksize = int64(sectorSize)
		pblksize = int64(sectorSize)
	}

	// get device information
	devInfo, err := f.Stat()
	if err != nil {
		return nil, fmt.Errorf("could not get info for device %s: %v", f.Name(), err)
	}
	mode := devInfo.Mode()
	switch {
	case mode.IsRegular():
		log.Debug("initDisk(): regular file")
		diskType = disk.File
		size = devInfo.Size()
		if size <= 0 {
			return nil, fmt.Errorf("could not get file size for device %s", f.Name())
		}
	case mode&os.ModeDevice != 0:
		log.Debug("initDisk(): block device")
		diskType = disk.Device
		file, err := os.Open(f.Name())
		if err != nil {
			return nil, fmt.Errorf("error opening block device %s: %s", f.Name(), err)
		}
		defer file.Close()
		size, err = file.Seek(0, io.SeekEnd)
		if err != nil {
			return nil, fmt.Errorf("error seeking to end of block device %s: %s", f.Name(), err)
		}
		lblksize, pblksize, err = getSectorSizes(f)
		log.Debugf("initDisk(): logical block size %d, physical block size %d", lblksize, pblksize)
		defaultBlocks = false
		if err != nil {
			return nil, fmt.Errorf("unable to get block sizes for device %s: %v", f.Name(), err)
		}
	default:
		return nil, fmt.Errorf("device %s is neither a block device nor a regular file", f.Name())
	}

	// how many good blocks do we have?
	//    var goodBlocks, orphanedBlocks int
	//    goodBlocks = size / lblksize

	writable := writableMode(openMode)

	ret := &disk.Disk{
		File:              f,
		Info:              devInfo,
		Type:              diskType,
		Size:              size,
		LogicalBlocksize:  lblksize,
		PhysicalBlocksize: pblksize,
		Writable:          writable,
		DefaultBlocks:     defaultBlocks,
	}

	// try to initialize the partition table.
	// we ignore errors, because it is perfectly fine to open a disk
	// and use it before it has a partition table. This is solely
	// a convenience.
	if table, err := ret.GetPartitionTable(); err == nil && table != nil {
		ret.Table = table
	}
	return ret, nil
}

func checkDevice(device string) error {
	if device == "" {
		return errors.New("must pass device name")
	}
	if _, err := os.Stat(device); os.IsNotExist(err) {
		return fmt.Errorf("provided device %s does not exist", device)
	}

	return nil
}

type openOpts struct {
	mode       OpenModeOption
	sectorSize SectorSize
}

func openOptsDefaults() *openOpts {
	return &openOpts{
		mode:       ReadWriteExclusive,
		sectorSize: SectorSizeDefault,
	}
}

// OpenOpt func that process Open options
type OpenOpt func(o *openOpts) error

// WithOpenMode sets the opening mode to the requested mode of type OpenModeOption.
// Default is ReadWriteExclusive, i.e. os.O_RDWR | os.O_EXCL
func WithOpenMode(mode OpenModeOption) OpenOpt {
	return func(o *openOpts) error {
		o.mode = mode
		return nil
	}
}

// WithSectorSize opens the disk file or block device with the provided sector size.
// Defaults to the physical block size.
func WithSectorSize(sectorSize SectorSize) OpenOpt {
	return func(o *openOpts) error {
		o.sectorSize = sectorSize
		return nil
	}
}

// Open a Disk from a path to a device in read-write exclusive mode
// Should pass a path to a block device e.g. /dev/sda or a path to a file /tmp/foo.img
// The provided device must exist at the time you call Open().
// Use OpenOpt to control options, such as sector size or open mode.
func Open(device string, opts ...OpenOpt) (*disk.Disk, error) {
	err := checkDevice(device)
	if err != nil {
		return nil, err
	}

	opt := openOptsDefaults()
	for _, o := range opts {
		if err := o(opt); err != nil {
			return nil, err
		}
	}

	m, ok := openModeOptions[opt.mode]
	if !ok {
		return nil, errors.New("unsupported file open mode")
	}

	f, err := os.OpenFile(device, m, 0o600)
	if err != nil {
		return nil, fmt.Errorf("could not open device %s exclusively for writing", device)
	}
	// return our disk
	return initDisk(f, ReadWriteExclusive, opt.sectorSize)
}

// Create a Disk from a path to a device
// Should pass a path to a block device e.g. /dev/sda or a path to a file /tmp/foo.img
// The provided device must not exist at the time you call Create()
func Create(device string, size int64, format Format, sectorSize SectorSize) (*disk.Disk, error) {
	if device == "" {
		return nil, errors.New("must pass device name")
	}
	if size <= 0 {
		return nil, errors.New("must pass valid device size to create")
	}
	f, err := os.OpenFile(device, os.O_RDWR|os.O_EXCL|os.O_CREATE, 0o666)
	if err != nil {
		return nil, fmt.Errorf("could not create device %s: %v", device, errors.Unwrap(err))
	}
	err = os.Truncate(device, size)
	if err != nil {
		return nil, fmt.Errorf("could not expand device %s to size %d: %v", device, size, errors.Unwrap(err))
	}
	// return our disk
	return initDisk(f, ReadWriteExclusive, sectorSize)
}
   07070100000308000081A4000000000000000000000001645E367C000003FB000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/diskfs_darwin.go   package diskfs

import (
	"fmt"
	"os"

	"golang.org/x/sys/unix"
)

// this constants should be part of "golang.org/x/sys/unix", but aren't, yet
const (
	DKIOCGETBLOCKSIZE         = 0x40046418
	DKIOCGETPHYSICALBLOCKSIZE = 0x4004644D
	DKIOCGETBLOCKCOUNT        = 0x40086419
)

// getSectorSizes get the logical and physical sector sizes for a block device
func getSectorSizes(f *os.File) (logicalSectorSize, physicalSectorSize int64, err error) {
	//nolint:gocritic // we keep this for reference to the underlying syscall
	/*
		ioctl(fd, BLKPBSZGET, &physicalsectsize);

	*/
	fd := f.Fd()

	logicalSectorSizeInt, err := unix.IoctlGetInt(int(fd), DKIOCGETBLOCKSIZE)
	if err != nil {
		return 0, 0, fmt.Errorf("unable to get device logical sector size: %v", err)
	}
	physicalSectorSizeInt, err := unix.IoctlGetInt(int(fd), DKIOCGETPHYSICALBLOCKSIZE)
	if err != nil {
		return 0, 0, fmt.Errorf("unable to get device physical sector size: %v", err)
	}
	return int64(logicalSectorSizeInt), int64(physicalSectorSizeInt), nil
}
 07070100000309000081A4000000000000000000000001645E367C00000387000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/diskfs_unix.go //go:build linux || solaris || aix || freebsd || illumos || netbsd || openbsd || plan9
// +build linux solaris aix freebsd illumos netbsd openbsd plan9

package diskfs

import (
	"fmt"
	"os"

	"golang.org/x/sys/unix"
)

// getSectorSizes get the logical and physical sector sizes for a block device
func getSectorSizes(f *os.File) (logicalSectorSize, physicalSectorSize int64, err error) {
	//
	//  equivalent syscall to
	//    ioctl(fd, BLKPBSZGET, &physicalsectsize);
	fd := f.Fd()

	logicalSectorSizeInt, err := unix.IoctlGetInt(int(fd), unix.BLKSSZGET)
	if err != nil {
		return 0, 0, fmt.Errorf("unable to get device logical sector size: %v", err)
	}
	physicalSectorSizeInt, err := unix.IoctlGetInt(int(fd), unix.BLKPBSZGET)
	if err != nil {
		return 0, 0, fmt.Errorf("unable to get device physical sector size: %v", err)
	}
	return int64(logicalSectorSizeInt), int64(physicalSectorSizeInt), nil
}
 0707010000030A000081A4000000000000000000000001645E367C000000F8000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/diskfs_windows.go  package diskfs

import (
	"errors"
	"os"
)

// getSectorSizes get the logical and physical sector sizes for a block device
func getSectorSizes(f *os.File) (int64, int64, error) {
	return 0, 0, errors.New("block devices not supported on windows")
}
0707010000030B000041ED000000000000000000000005645E367C00000000000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem 0707010000030C000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/fat32   0707010000030D000081A4000000000000000000000001645E367C00000B0B000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/fat32/directory.go  package fat32

import (
	"time"
)

// Directory represents a single directory in a FAT32 filesystem
type Directory struct {
	directoryEntry
	entries []*directoryEntry
}

// dirEntriesFromBytes loads the directory entries from the raw bytes
func (d *Directory) entriesFromBytes(b []byte) error {
	entries, err := parseDirEntries(b)
	if err != nil {
		return err
	}
	d.entries = entries
	return nil
}

// entriesToBytes convert our entries to raw bytes
func (d *Directory) entriesToBytes(bytesPerCluster int) ([]byte, error) {
	b := make([]byte, 0)
	for _, de := range d.entries {
		b2, err := de.toBytes()
		if err != nil {
			return nil, err
		}
		b = append(b, b2...)
	}
	remainder := len(b) % bytesPerCluster
	extra := bytesPerCluster - remainder
	zeroes := make([]byte, extra)
	b = append(b, zeroes...)
	return b, nil
}

// createEntry creates an entry in the given directory, and returns the handle to it
func (d *Directory) createEntry(name string, cluster uint32, dir bool) (*directoryEntry, error) {
	// is it a long filename or a short filename?
	var isLFN bool
	// TODO: convertLfnSfn does not calculate if the short name conflicts and thus shoukld increment the last character
	//       that should happen here, once we can look in the directory entry
	shortName, extension, isLFN, _ := convertLfnSfn(name)
	lfn := ""
	if isLFN {
		lfn = name
	}

	// allocate a slot for the new filename in the existing directory
	entry := directoryEntry{
		filenameLong:      lfn,
		longFilenameSlots: -1, // indicate that we do not know how many slots, which will force a recalculation
		filenameShort:     shortName,
		fileExtension:     extension,
		fileSize:          uint32(0),
		clusterLocation:   cluster,
		filesystem:        d.filesystem,
		createTime:        time.Now(),
		modifyTime:        time.Now(),
		accessTime:        time.Now(),
		isSubdirectory:    dir,
		isNew:             true,
	}

	entry.longFilenameSlots = calculateSlots(entry.filenameLong)
	d.entries = append(d.entries, &entry)
	return &entry, nil
}

// createVolumeLabel create a volume label entry in the given directory, and return the handle to it
func (d *Directory) createVolumeLabel(name string) (*directoryEntry, error) {
	// allocate a slot for the new filename in the existing directory
	entry := directoryEntry{
		filenameLong:      "",
		longFilenameSlots: -1, // indicate that we do not know how many slots, which will force a recalculation
		filenameShort:     name[:8],
		fileExtension:     name[8:11],
		fileSize:          uint32(0),
		clusterLocation:   0,
		filesystem:        d.filesystem,
		createTime:        time.Now(),
		modifyTime:        time.Now(),
		accessTime:        time.Now(),
		isSubdirectory:    false,
		isNew:             true,
		isVolumeLabel:     true,
	}

	d.entries = append(d.entries, &entry)
	return &entry, nil
}
 0707010000030E000081A4000000000000000000000001645E367C000039CB000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/fat32/directoryentry.go package fat32

import (
	"encoding/binary"
	"fmt"
	"regexp"
	"strings"
	"time"
)

// AccessRights is the byte mask representing access rights to a FAT file
type accessRights uint16

// AccessRightsUnlimited represents unrestricted access
const (
	accessRightsUnlimited accessRights = 0x0000
	charsPerSlot          int          = 13
)

// valid shortname characters - [A-F][0-9][$%'-_@~`!(){}^#&]
var validShortNameCharacters = map[byte]bool{
	0x21: true, // !
	0x23: true, // #
	0x24: true, // $
	0x25: true, // %
	0x26: true, // &
	0x27: true, // '
	0x28: true, // (
	0x29: true, // )
	0x2d: true, // -
	0x30: true, // 0
	0x31: true, // 1
	0x32: true, // 2
	0x33: true, // 3
	0x34: true, // 4
	0x35: true, // 5
	0x36: true, // 6
	0x37: true, // 7
	0x38: true, // 8
	0x39: true, // 9
	0x40: true, // @
	0x41: true, // A
	0x42: true, // B
	0x43: true, // C
	0x44: true, // D
	0x45: true, // E
	0x46: true, // F
	0x47: true, // G
	0x48: true, // H
	0x49: true, // I
	0x4a: true, // J
	0x4b: true, // K
	0x4c: true, // L
	0x4d: true, // M
	0x4e: true, // N
	0x4f: true, // O
	0x50: true, // P
	0x51: true, // Q
	0x52: true, // R
	0x53: true, // S
	0x54: true, // T
	0x55: true, // U
	0x56: true, // V
	0x57: true, // W
	0x58: true, // X
	0x59: true, // Y
	0x5a: true, // Z
	0x5e: true, // ^
	0x5f: true, // _
	0x60: true, // `
	0x7b: true, // {
	0x7d: true, // }
	0x7e: true, // ~
}

// directoryEntry is a single directory entry
//
//nolint:structcheck // we are willing to leave unused elements here so that we can know their reference
type directoryEntry struct {
	filenameShort      string
	fileExtension      string
	filenameLong       string
	isReadOnly         bool
	isHidden           bool
	isSystem           bool
	isVolumeLabel      bool
	isSubdirectory     bool
	isArchiveDirty     bool
	isDevice           bool
	lowercaseShortname bool
	lowercaseExtension bool
	createTime         time.Time
	modifyTime         time.Time
	accessTime         time.Time
	acccessRights      accessRights
	clusterLocation    uint32
	fileSize           uint32
	filesystem         *FileSystem
	longFilenameSlots  int
	isNew              bool
}

func (de *directoryEntry) toBytes() ([]byte, error) {
	b := make([]byte, 0, bytesPerSlot)

	// do we have a long filename?
	if de.filenameLong != "" {
		lfnBytes, err := longFilenameBytes(de.filenameLong, de.filenameShort, de.fileExtension)
		if err != nil {
			return nil, fmt.Errorf("could not convert long filename to directory entries: %v", err)
		}
		b = append(b, lfnBytes...)
	}

	// this is for the regular 8.3 entry
	dosBytes := make([]byte, bytesPerSlot)
	createDate, createTime := timeToDateTime(de.createTime)
	modifyDate, modifyTime := timeToDateTime(de.modifyTime)
	accessDate, _ := timeToDateTime(de.accessTime)
	binary.LittleEndian.PutUint16(dosBytes[14:16], createTime)
	binary.LittleEndian.PutUint16(dosBytes[16:18], createDate)
	binary.LittleEndian.PutUint16(dosBytes[18:20], accessDate)
	binary.LittleEndian.PutUint16(dosBytes[22:24], modifyTime)
	binary.LittleEndian.PutUint16(dosBytes[24:26], modifyDate)
	// convert the short filename and extension to ascii bytes
	shortName, err := stringToASCIIBytes(fmt.Sprintf("% -8s", de.filenameShort))
	if err != nil {
		return nil, fmt.Errorf("error converting short filename to bytes: %v", err)
	}
	// convert the short filename and extension to ascii bytes
	extension, err := stringToASCIIBytes(fmt.Sprintf("% -3s", de.fileExtension))
	if err != nil {
		return nil, fmt.Errorf("error converting file extension to bytes: %v", err)
	}
	copy(dosBytes[0:8], shortName)
	copy(dosBytes[8:11], extension)
	binary.LittleEndian.PutUint32(dosBytes[28:32], de.fileSize)
	clusterLocation := make([]byte, 4)
	binary.LittleEndian.PutUint32(clusterLocation, de.clusterLocation)
	dosBytes[26] = clusterLocation[0]
	dosBytes[27] = clusterLocation[1]
	dosBytes[20] = clusterLocation[2]
	dosBytes[21] = clusterLocation[3]

	// set the flags
	if de.isVolumeLabel {
		dosBytes[11] |= 0x08
	}
	if de.isSubdirectory {
		dosBytes[11] |= 0x10
	}
	if de.isArchiveDirty {
		dosBytes[11] |= 0x20
	}

	if de.lowercaseExtension {
		dosBytes[12] |= 0x04
	}
	if de.lowercaseShortname {
		dosBytes[12] |= 0x08
	}

	b = append(b, dosBytes...)

	return b, nil
}

// parseDirEntries takes all of the bytes in a special file (i.e. a directory)
// and gets all of the DirectoryEntry for that directory
// this is, essentially, the equivalent of `ls -l` or if you prefer `dir`
func parseDirEntries(b []byte) ([]*directoryEntry, error) {
	dirEntries := make([]*directoryEntry, 0, 20)
	// parse the data into Fat32DirectoryEntry
	lfn := ""
	// this should be used to count the LFN entries and that they make sense
	//     lfnCount := 0
byteLoop:
	for i := 0; i < len(b); i += 32 {
		// is this the beginning of all empty entries?
		switch b[i+0] {
		case 0:
			// need to break "byteLoop" else break will break the switches
			break byteLoop
		case 0xe5:
			continue
		}
		// is this an LFN entry?
		if b[i+11] == 0x0f {
			// check if this is the last logical / first physical and how many there are
			if b[i]&0x40 == 0x40 {
				lfn = ""
			}
			// parse the long filename
			tmpLfn, err := longFilenameEntryFromBytes(b[i : i+32])
			// an error is impossible since we pass exactly 32, but we leave the handler here anyways
			if err != nil {
				return nil, fmt.Errorf("error parsing long filename at position %d: %v", i, err)
			}
			lfn = tmpLfn + lfn
			continue
		}
		// not LFN, so parse regularly
		createTime := binary.LittleEndian.Uint16(b[i+14 : i+16])
		createDate := binary.LittleEndian.Uint16(b[i+16 : i+18])
		accessDate := binary.LittleEndian.Uint16(b[i+18 : i+20])
		modifyTime := binary.LittleEndian.Uint16(b[i+22 : i+24])
		modifyDate := binary.LittleEndian.Uint16(b[i+24 : i+26])
		re := regexp.MustCompile(" +$")
		sfn := re.ReplaceAllString(string(b[i:i+8]), "")
		extension := re.ReplaceAllString(string(b[i+8:i+11]), "")
		isSubdirectory := b[i+11]&0x10 == 0x10
		isArchiveDirty := b[i+11]&0x20 == 0x20
		isVolumeLabel := b[i+11]&0x08 == 0x08
		lowercaseShortname := b[i+12]&0x08 == 0x08
		lowercaseExtension := b[i+12]&0x04 == 0x04

		entry := directoryEntry{
			filenameLong:       lfn,
			longFilenameSlots:  calculateSlots(lfn),
			filenameShort:      sfn,
			fileExtension:      extension,
			fileSize:           binary.LittleEndian.Uint32(b[i+28 : i+32]),
			clusterLocation:    binary.LittleEndian.Uint32(append(b[i+26:i+28], b[i+20:i+22]...)),
			createTime:         dateTimeToTime(createDate, createTime),
			modifyTime:         dateTimeToTime(modifyDate, modifyTime),
			accessTime:         dateTimeToTime(accessDate, 0),
			isSubdirectory:     isSubdirectory,
			isArchiveDirty:     isArchiveDirty,
			isVolumeLabel:      isVolumeLabel,
			lowercaseShortname: lowercaseShortname,
			lowercaseExtension: lowercaseExtension,
		}
		lfn = ""
		dirEntries = append(dirEntries, &entry)
	}
	return dirEntries, nil
}

func dateTimeToTime(d, t uint16) time.Time {
	year := int(d>>9) + 1980
	month := time.Month((d >> 5) & 0x0f)
	date := int(d & 0x1f)
	second := int((t & 0x1f) * 2)
	minute := int((t >> 5) & 0x3f)
	hour := int(t >> 11)
	return time.Date(year, month, date, hour, minute, second, 0, time.UTC)
}
func timeToDateTime(t time.Time) (datePart, timePart uint16) {
	year := t.Year()
	month := int(t.Month())
	day := t.Day()
	second := t.Second()
	minute := t.Minute()
	hour := t.Hour()
	retDate := (year-1980)<<9 + (month << 5) + day
	retTime := hour<<11 + minute<<5 + (second / 2)
	return uint16(retDate), uint16(retTime)
}

func longFilenameBytes(s, shortName, extension string) ([]byte, error) {
	// we need the checksum of the short name
	checksum, err := lfnChecksum(shortName, extension)
	if err != nil {
		return nil, fmt.Errorf("could not calculate checksum for 8.3 filename: %v", err)
	}
	// should be multiple of exactly 32 bytes
	slots := calculateSlots(s)
	// convert our string into runes
	r := []rune(s)
	b2SlotLength := maxCharsLongFilename * 2
	maxChars := slots * maxCharsLongFilename
	b2 := make([]byte, 0, maxChars*2)
	// convert the rune slice into a byte slice with 2 bytes per rune
	// vfat long filenames support UCS-2 *only*
	// so it is *very* important we do not try to parse them otherwise
	for i := 0; i < maxChars; i++ {
		// do we have a rune at this point?
		var tmpb []byte
		switch {
		case i == len(r):
			tmpb = []byte{0x00, 0x00}
		case i > len(r):
			tmpb = []byte{0xff, 0xff}
		default:
			val := uint16(r[i])
			// little endian
			tmpb = []byte{byte(val & 0x00ff), byte(val >> 8)}
		}
		b2 = append(b2, tmpb...)
	}

	// this makes our byte array
	maxBytes := slots * bytesPerSlot
	b := make([]byte, 0, maxBytes)
	// now just place the bytes in the right places
	for count := slots; count > 0; count-- {
		// how far from the start of the byte slice?
		offset := (count - 1) * b2SlotLength
		// enter the right bytes in the right places
		tmpb := make([]byte, 0, 32)
		// first byte is our index
		tmpb = append(tmpb, byte(count))
		// next 10 bytes are 5 chars of data
		tmpb = append(tmpb, b2[offset:offset+10]...)
		// next is a single byte indicating LFN, followed by single byte 0x00
		//nolint:gocritic // gocritic complains about the ability to combine 2 appends into one; we want to be more explicit here
		tmpb = append(tmpb, 0x0f, 0x00)
		// next is checksum
		tmpb = append(tmpb, checksum)
		// next 12 bytes are 6 chars of data
		tmpb = append(tmpb, b2[offset+10:offset+22]...)
		// next are 2 bytes of 0x00
		tmpb = append(tmpb, 0x00, 0x00)
		// next are 4 bytes, last 2 chars of LFN
		tmpb = append(tmpb, b2[offset+22:offset+26]...)
		b = append(b, tmpb...)
	}

	// the first byte should have bit 6 set
	b[0] |= 0x40

	return b, nil
}

// longFilenameEntryFromBytes takes a single slice of 32 bytes and extracts the long filename component from it
func longFilenameEntryFromBytes(b []byte) (string, error) {
	// should be exactly 32 bytes
	bLen := len(b)
	if bLen != 32 {
		return "", fmt.Errorf("longFilenameEntryFromBytes only can parse byte of length 32, not %d", bLen)
	}
	b2 := make([]byte, 0, maxCharsLongFilename*2)
	// strip out the unused ones
	b2 = append(b2, b[1:11]...)
	b2 = append(b2, b[14:26]...)
	b2 = append(b2, b[28:32]...)
	// parse the bytes of the long filename
	// vfat long filenames support UCS-2 *only*
	// so it is *very* important we do not try to parse them otherwise
	r := make([]rune, 0, maxCharsLongFilename)
	// now we can iterate
	for i := 0; i < maxCharsLongFilename; i++ {
		// little endian
		val := uint16(b2[2*i+1])<<8 + uint16(b2[2*i])
		// stop at all 0
		if val == 0 {
			break
		}
		r = append(r, rune(val))
	}
	return string(r), nil
}

// takes the short form of the name and checksums it
// the period between the 8 characters and the 3 character extension is dropped
// any unused chars are replaced by space ASCII 0x20
func lfnChecksum(name, extension string) (byte, error) {
	nameBytes, err := stringToValidASCIIBytes(name)
	if err != nil {
		return 0x00, fmt.Errorf("invalid shortname character in filename: %s", name)
	}
	extensionBytes, err := stringToValidASCIIBytes(extension)
	if err != nil {
		return 0x00, fmt.Errorf("invalid shortname character in extension: %s", extension)
	}

	// now make sure we don't have too many - and fill in blanks
	length := len(nameBytes)
	if length > 8 {
		return 0x00, fmt.Errorf("short name for file is longer than allowed 8 bytes: %s", name)
	}
	for i := 8; i > length; i-- {
		nameBytes = append(nameBytes, 0x20)
	}

	length = len(extensionBytes)
	if length > 3 {
		return 0x00, fmt.Errorf("extension for file is longer than allowed 3 bytes: %s", extension)
	}
	for i := 3; i > length; i-- {
		extensionBytes = append(extensionBytes, 0x20)
	}
	b := make([]byte, len(nameBytes))
	copy(b, nameBytes)
	b = append(b, extensionBytes...)

	// calculate the checksum
	var sum byte = 0x00
	for i := 11; i > 0; i-- {
		sum = ((sum & 0x01) << 7) + (sum >> 1) + b[11-i]
	}
	return sum, nil
}

// convert a string to ascii bytes, but only accept valid 8.3 bytes
func stringToValidASCIIBytes(s string) ([]byte, error) {
	b, err := stringToASCIIBytes(s)
	if err != nil {
		return b, err
	}
	// now make sure every byte is valid
	for _, b2 := range b {
		// only valid chars - 0-9, A-Z, _, ~
		if validShortNameCharacters[b2] {
			continue
		}
		return nil, fmt.Errorf("invalid 8.3 character")
	}
	return b, nil
}

// convert a string to a byte array, if all characters are valid ascii
func stringToASCIIBytes(s string) ([]byte, error) {
	length := len(s)
	b := make([]byte, length)
	// convert the name into 11 bytes
	r := []rune(s)
	// take the first 8 characters
	for i := 0; i < length; i++ {
		val := int(r[i])
		// we only can handle values less than max byte = 255
		if val > 255 {
			return nil, fmt.Errorf("non-ASCII character in name: %s", s)
		}
		b[i] = byte(val)
	}
	return b, nil
}

// calculate how many vfat slots a long filename takes up
// this does NOT include the slot for the true DOS 8.3 entry
func calculateSlots(s string) int {
	sLen := len(s)
	slots := sLen / charsPerSlot
	if sLen%charsPerSlot != 0 {
		slots++
	}
	return slots
}

// convert LFN to short name
// returns shortName, extension, isLFN, isTruncated
//
//	isLFN : was there an LFN that had to be converted
//	isTruncated : was the shortname longer than 8 chars and had to be converted?
func convertLfnSfn(name string) (shortName, extension string, isLFN, isTruncated bool) {
	// get last period in name
	lastDot := strings.LastIndex(name, ".")
	// now convert it
	var rawShortName, rawExtension string
	rawShortName = name
	// get the extension
	if lastDot > -1 {
		rawExtension = name[lastDot+1:]
		// too long?
		if len(rawExtension) > 3 {
			rawExtension = rawExtension[0:3]
			isLFN = true
		}
		// convert the extension
		extension = uCaseValid(rawExtension)
	}
	if extension != rawExtension {
		isLFN = true
	}

	// convert the short name
	if lastDot > -1 {
		rawShortName = name[:lastDot]
	}
	shortName = uCaseValid(rawShortName)
	if rawShortName != shortName {
		isLFN = true
	}

	// convert shortName to 8 chars
	if len(shortName) > 8 {
		isLFN = true
		isTruncated = true
		shortName = shortName[:6] + "~" + "1"
	}
	return shortName, extension, isLFN, isTruncated
}

// converts a string into upper-case with only valid characters
func uCaseValid(name string) string {
	// easiest way to do this is to go through the name one char at a time
	r := []rune(name)
	r2 := make([]rune, 0, len(r))
	for _, val := range r {
		switch {
		case validShortNameCharacters[byte(val)]:
			r2 = append(r2, val)
		case (0x61 <= val && val <= 0x7a):
			// lower-case characters should be upper-cased
			r2 = append(r2, val-32)
		case val == ' ' || val == '.':
			// remove spaces and periods
			continue
		default:
			// replace the rest with _
			r2 = append(r2, '_')
		}
	}
	return string(r2)
}
 0707010000030F000081A4000000000000000000000001645E367C0000014F000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/fat32/doc.go    // Package fat32 provides utilities to interact with, manipulate and create a FAT32 filesystem on a block device or
// a disk image.
//
// references:
//
//	https://en.wikipedia.org/wiki/Design_of_the_FAT_file_system
//	https://www.cs.fsu.edu/~cop4610t/assignments/project3/spec/fatspec.pdf
//	https://wiki.osdev.org/FAT
package fat32
 07070100000310000081A4000000000000000000000001645E367C0000094A000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/fat32/dos20bpb.go   package fat32

import (
	"encoding/binary"
	"errors"
	"fmt"
)

// Dos20BPB is a DOS 2.0 BIOS Parameter Block structure
type dos20BPB struct {
	bytesPerSector       SectorSize // BytesPerSector is bytes in each sector - always should be 512
	sectorsPerCluster    uint8      // SectorsPerCluster is number of sectors per cluster
	reservedSectors      uint16     // ReservedSectors is number of reserved sectors
	fatCount             uint8      // FatCount is total number of FAT tables in the filesystem
	rootDirectoryEntries uint16     // RootDirectoryEntries is maximum number of FAT12 or FAT16 root directory entries; must be 0 for FAT32
	totalSectors         uint16     // TotalSectors is total number of sectors in the filesystem
	mediaType            uint8      // MediaType is the type of media, mostly unused
	sectorsPerFat        uint16     // SectorsPerFat is number of sectors per each table
}

// Dos20BPBFromBytes reads the DOS 2.0 BIOS Parameter Block from a slice of exactly 13 bytes
func dos20BPBFromBytes(b []byte) (*dos20BPB, error) {
	if b == nil || len(b) != 13 {
		return nil, errors.New("cannot read DOS 2.0 BPB from invalid byte slice, must be precisely 13 bytes ")
	}
	bpb := dos20BPB{}
	// make sure we have a valid sector size
	sectorSize := binary.LittleEndian.Uint16(b[0:2])
	if sectorSize != uint16(SectorSize512) {
		return nil, fmt.Errorf("invalid sector size %d provided in DOS 2.0 BPB. Must be %d", sectorSize, SectorSize512)
	}
	bpb.bytesPerSector = SectorSize512
	bpb.sectorsPerCluster = b[2]
	bpb.reservedSectors = binary.LittleEndian.Uint16(b[3:5])
	bpb.fatCount = b[5]
	bpb.rootDirectoryEntries = binary.LittleEndian.Uint16(b[6:8])
	bpb.totalSectors = binary.LittleEndian.Uint16(b[8:10])
	bpb.mediaType = b[10]
	bpb.sectorsPerFat = binary.LittleEndian.Uint16(b[11:13])
	return &bpb, nil
}

// ToBytes returns the bytes for a DOS 2.0 BIOS Parameter Block, ready to be written to disk
func (bpb *dos20BPB) toBytes() []byte {
	b := make([]byte, 13)
	binary.LittleEndian.PutUint16(b[0:2], uint16(bpb.bytesPerSector))
	b[2] = bpb.sectorsPerCluster
	binary.LittleEndian.PutUint16(b[3:5], bpb.reservedSectors)
	b[5] = bpb.fatCount
	binary.LittleEndian.PutUint16(b[6:8], bpb.rootDirectoryEntries)
	binary.LittleEndian.PutUint16(b[8:10], bpb.totalSectors)
	b[10] = bpb.mediaType
	binary.LittleEndian.PutUint16(b[11:13], bpb.sectorsPerFat)
	return b
}
  07070100000311000081A4000000000000000000000001645E367C00000A9E000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/fat32/dos331bpb.go  package fat32

import (
	"encoding/binary"
	"errors"
	"fmt"
)

// dos331BPB is the DOS 3.31 BIOS Parameter Block
type dos331BPB struct {
	dos20BPB        *dos20BPB // Dos20BPB holds the embedded DOS 2.0 BPB
	sectorsPerTrack uint16    // SectorsPerTrack is number of sectors per track. May be unused when LBA-only access is in place, but should store some value for safety.
	heads           uint16    // Heads is the number of heads. May be unused when LBA-only access is in place, but should store some value for safety. Maximum 255.
	hiddenSectors   uint32    // HiddenSectors is the number of hidden sectors preceding the partition that contains the FAT volume. Should be 0 on non-partitioned media.
	totalSectors    uint32    // TotalSectors is the total sectors if too many to fit into the DOS 2.0 BPB TotalSectors. In practice, if the DOS 2.0 TotalSectors is 0 and this is non-zero, use this one. For partitioned media, this and the DOS 2.0 BPB entry may be zero, and should retrieve information from each partition. For FAT32 systems, both also can be zero, even on non-partitioned, and use FileSystemType in DOS 7.1 EBPB as a 64-bit TotalSectors instead.
}

func (bpb *dos331BPB) equal(a *dos331BPB) bool {
	if (bpb == nil && a != nil) || (a == nil && bpb != nil) {
		return false
	}
	if bpb == nil && a == nil {
		return true
	}
	return *bpb.dos20BPB == *a.dos20BPB &&
		bpb.sectorsPerTrack == a.sectorsPerTrack &&
		bpb.heads == a.heads &&
		bpb.hiddenSectors == a.hiddenSectors &&
		bpb.totalSectors == a.totalSectors
}

// dos331BPBFromBytes reads the DOS 3.31 BIOS Parameter Block from a slice of exactly 25 bytes
func dos331BPBFromBytes(b []byte) (*dos331BPB, error) {
	if b == nil || len(b) != 25 {
		return nil, errors.New("cannot read DOS 3.31 BPB from invalid byte slice, must be precisely 25 bytes ")
	}
	bpb := dos331BPB{}
	dos20bpb, err := dos20BPBFromBytes(b[0:13])
	if err != nil {
		return nil, fmt.Errorf("error reading embedded DOS 2.0 BPB: %v", err)
	}
	bpb.dos20BPB = dos20bpb
	bpb.sectorsPerTrack = binary.LittleEndian.Uint16(b[13:15])
	bpb.heads = binary.LittleEndian.Uint16(b[15:17])
	bpb.hiddenSectors = binary.LittleEndian.Uint32(b[17:21])
	bpb.totalSectors = binary.LittleEndian.Uint32(b[21:25])
	return &bpb, nil
}

// ToBytes returns the bytes for a DOS 3.31 BIOS Parameter Block, ready to be written to disk
func (bpb *dos331BPB) toBytes() []byte {
	b := make([]byte, 25)
	dos20Bytes := bpb.dos20BPB.toBytes()
	copy(b[0:13], dos20Bytes)
	binary.LittleEndian.PutUint16(b[13:15], bpb.sectorsPerTrack)
	binary.LittleEndian.PutUint16(b[15:17], bpb.heads)
	binary.LittleEndian.PutUint32(b[17:21], bpb.hiddenSectors)
	binary.LittleEndian.PutUint32(b[21:25], bpb.totalSectors)
	return b
}
  07070100000312000081A4000000000000000000000001645E367C00001CA8000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/fat32/dos71bpb.go   package fat32

import (
	"encoding/binary"
	"errors"
	"fmt"
	"regexp"
)

const (
	// ShortDos71EBPB indicates that a DOS 7.1 EBPB is of the short 60-byte format
	shortDos71EBPB uint8 = 0x28
	// LongDos71EBPB indicates that a DOS 7.1 EBPB is of the long 79-byte format
	longDos71EBPB uint8 = 0x29
)

const (
	// FileSystemTypeFAT32 is the fixed string representation for the FAT32 filesystem type
	fileSystemTypeFAT32 string = "FAT32   "
)

// FatVersion is the version of the FAT filesystem
type fatVersion uint16

const (
	// FatVersion0 represents version 0 of FAT, the only acceptable version
	fatVersion0 fatVersion = 0
)

const (
	// FirstRemovableDrive is first removable drive
	FirstRemovableDrive uint8 = 0x00
	// FirstFixedDrive is first fixed drive
	FirstFixedDrive uint8 = 0x80
)

// Dos71EBPB is the DOS 7.1 Extended BIOS Parameter Block
type dos71EBPB struct {
	dos331BPB             *dos331BPB // Dos331BPB holds the embedded DOS 3.31 BIOS Parameter BLock
	sectorsPerFat         uint32     // SectorsPerFat is number of sectors per each table
	mirrorFlags           uint16     // MirrorFlags determines how FAT mirroring is done. If bit 7 is set, use bits 3-0 to determine active number of FATs (zero-based); if bit 7 is clear, use normal FAT mirroring
	version               fatVersion // Version is the version of the FAT, must be 0
	rootDirectoryCluster  uint32     // RootDirectoryCluster is the cluster containing the filesystem root directory, normally 2
	fsInformationSector   uint16     // FSInformationSector holds the sector which contains the primary DOS 7.1 Filesystem Information Cluster
	backupBootSector      uint16     // BackupBootSector holds the sector which contains the backup boot sector and following FSIS sectors
	bootFileName          [12]byte   // BootFileName is reserved and should be all 0x00
	driveNumber           uint8      // DriveNumber is the code for the relative position and type of this drive in the system
	reservedFlags         uint8      // ReservedFlags are flags used by the operating system and/or BIOS for various purposes, e.g. Windows NT CHKDSK status, OS/2 desired drive letter, etc.
	extendedBootSignature uint8      // ExtendedBootSignature contains the flag as to whether this is a short (60-byte) or long (79-byte) DOS 7.1 EBPB
	volumeSerialNumber    uint32     // VolumeSerialNumber usually generated by some form of date and time
	volumeLabel           string     // VolumeLabel, an arbitrary 11-byte string
	fileSystemType        string     // FileSystemType is the 8-byte string holding the name of the file system type
}

func (bpb *dos71EBPB) equal(a *dos71EBPB) bool {
	if (bpb == nil && a != nil) || (a == nil && bpb != nil) {
		return false
	}
	if bpb == nil && a == nil {
		return true
	}
	return bpb.dos331BPB.equal(a.dos331BPB) &&
		bpb.sectorsPerFat == a.sectorsPerFat &&
		bpb.mirrorFlags == a.mirrorFlags &&
		bpb.version == a.version &&
		bpb.rootDirectoryCluster == a.rootDirectoryCluster &&
		bpb.fsInformationSector == a.fsInformationSector &&
		bpb.backupBootSector == a.backupBootSector &&
		bpb.bootFileName == a.bootFileName &&
		bpb.driveNumber == a.driveNumber &&
		bpb.reservedFlags == a.reservedFlags &&
		bpb.extendedBootSignature == a.extendedBootSignature &&
		bpb.volumeSerialNumber == a.volumeSerialNumber &&
		bpb.volumeLabel == a.volumeLabel &&
		bpb.fileSystemType == a.fileSystemType
}

// Dos71EBPBFromBytes reads the FAT32 Extended BIOS Parameter Block from a slice of bytes
// these bytes are assumed to start at the beginning of the BPB, but can stretech for any length
// this is because the calling function should know where the EBPB starts, but not necessarily where it ends
func dos71EBPBFromBytes(b []byte) (*dos71EBPB, int, error) {
	if b == nil || (len(b) != 60 && len(b) != 79) {
		return nil, 0, errors.New("cannot read DOS 7.1 EBPB from invalid byte slice, must be precisely 60 or 79 bytes ")
	}
	bpb := dos71EBPB{}
	size := 0

	// extract the embedded DOS 3.31 BPB
	dos331bpb, err := dos331BPBFromBytes(b[0:25])
	if err != nil {
		return nil, 0, fmt.Errorf("could not read embedded DOS 3.31 BPB: %v", err)
	}
	bpb.dos331BPB = dos331bpb

	bpb.sectorsPerFat = binary.LittleEndian.Uint32(b[25:29])
	bpb.mirrorFlags = binary.LittleEndian.Uint16(b[29:31])
	version := binary.LittleEndian.Uint16(b[31:33])
	if version != uint16(fatVersion0) {
		return nil, size, fmt.Errorf("invalid FAT32 version found: %v", version)
	}
	bpb.version = fatVersion0
	bpb.rootDirectoryCluster = binary.LittleEndian.Uint32(b[33:37])
	bpb.fsInformationSector = binary.LittleEndian.Uint16(b[37:39])
	bpb.backupBootSector = binary.LittleEndian.Uint16(b[39:41])
	bootFileName := b[41:53]
	copy(bpb.bootFileName[:], bootFileName)
	bpb.driveNumber = b[53]
	bpb.reservedFlags = b[54]
	extendedSignature := b[55]
	bpb.extendedBootSignature = extendedSignature
	// is this a longer or shorter one
	bpb.volumeSerialNumber = binary.BigEndian.Uint32(b[56:60])

	switch extendedSignature {
	case shortDos71EBPB:
		size = 60
	case longDos71EBPB:
		size = 79
		// remove padding from each
		re := regexp.MustCompile(" +$")
		bpb.volumeLabel = re.ReplaceAllString(string(b[60:71]), "")
		bpb.fileSystemType = re.ReplaceAllString(string(b[71:79]), "")
	default:
		return nil, size, fmt.Errorf("unknown DOS 7.1 EBPB Signature: %v", extendedSignature)
	}

	return &bpb, size, nil
}

// ToBytes returns the Extended BIOS Parameter Block in a slice of bytes directly ready to
// write to disk
func (bpb *dos71EBPB) toBytes() ([]byte, error) {
	var b []byte
	// how many bytes is it? for extended, add the extended-specific stuff
	switch bpb.extendedBootSignature {
	case shortDos71EBPB:
		b = make([]byte, 60)
	case longDos71EBPB:
		b = make([]byte, 79)
		// do we have a valid volume label?
		label := bpb.volumeLabel
		if len(label) > 11 {
			return nil, fmt.Errorf("invalid volume label: too long at %d characters, maximum is %d", len(label), 11)
		}
		labelR := []rune(label)
		if len(label) != len(labelR) {
			return nil, fmt.Errorf("invalid volume label: non-ascii characters")
		}
		// pad with 0x20 = " "
		copy(b[60:71], fmt.Sprintf("%-11s", label))
		// do we have a valid filesystem type?
		fstype := bpb.fileSystemType
		if len(fstype) > 8 {
			return nil, fmt.Errorf("invalid filesystem type: too long at %d characters, maximum is %d", len(fstype), 8)
		}
		fstypeR := []rune(fstype)
		if len(fstype) != len(fstypeR) {
			return nil, fmt.Errorf("invalid filesystem type: non-ascii characters")
		}
		// pad with 0x20 = " "
		copy(b[71:79], fmt.Sprintf("%-11s", fstype))
	default:
		return nil, fmt.Errorf("unknown DOS 7.1 EBPB Signature: %v", bpb.extendedBootSignature)
	}
	// fill in the common parts
	dos331Bytes := bpb.dos331BPB.toBytes()
	copy(b[0:25], dos331Bytes)
	binary.LittleEndian.PutUint32(b[25:29], bpb.sectorsPerFat)
	binary.LittleEndian.PutUint16(b[29:31], bpb.mirrorFlags)
	binary.LittleEndian.PutUint16(b[31:33], uint16(bpb.version))
	binary.LittleEndian.PutUint32(b[33:37], bpb.rootDirectoryCluster)
	binary.LittleEndian.PutUint16(b[37:39], bpb.fsInformationSector)
	binary.LittleEndian.PutUint16(b[39:41], bpb.backupBootSector)
	copy(b[41:53], bpb.bootFileName[:])
	b[53] = bpb.driveNumber
	b[54] = bpb.reservedFlags
	b[55] = bpb.extendedBootSignature
	binary.BigEndian.PutUint32(b[56:60], bpb.volumeSerialNumber)

	return b, nil
}
07070100000313000081A4000000000000000000000001645E367C000087BF000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/fat32/fat32.go  package fat32

import (
	"errors"
	"fmt"
	"os"
	"path"
	"sort"
	"strings"
	"time"

	"github.com/diskfs/go-diskfs/filesystem"
	"github.com/diskfs/go-diskfs/util"
)

// MsdosMediaType is the (mostly unused) media type. However, we provide and export the known constants for it.
type MsdosMediaType uint8

const (
	// Media8InchDrDos for single-sided 250KB DR-DOS disks
	Media8InchDrDos MsdosMediaType = 0xe5
	// Media525InchTandy for 5.25 inch floppy disks for Tandy
	Media525InchTandy MsdosMediaType = 0xed
	// MediaCustomPartitionsDrDos for non-standard custom DR-DOS partitions utilizing non-standard BPB formats
	MediaCustomPartitionsDrDos MsdosMediaType = 0xee
	// MediaCustomSuperFloppyDrDos for non-standard custom superfloppy disks for DR-DOS
	MediaCustomSuperFloppyDrDos MsdosMediaType = 0xef
	// Media35Inch for standard 1.44MB and 2.88MB 3.5 inch floppy disks
	Media35Inch MsdosMediaType = 0xf0
	// MediaDoubleDensityAltos for double-density floppy disks for Altos only
	MediaDoubleDensityAltos MsdosMediaType = 0xf4
	// MediaFixedDiskAltos for fixed disk 1.95MB for Altos only
	MediaFixedDiskAltos MsdosMediaType = 0xf5
	// MediaFixedDisk for standard fixed disks - can be used for any partitioned fixed or removable media where the geometry is defined in the BPB
	MediaFixedDisk MsdosMediaType = 0xf8
)

// SectorSize indicates what the sector size in bytes is
type SectorSize uint16

const (
	// SectorSize512 is a sector size of 512 bytes, used as the logical size for all FAT filesystems
	SectorSize512        SectorSize = 512
	bytesPerSlot         int        = 32
	maxCharsLongFilename int        = 13
)

//nolint:deadcode,varcheck,unused // we need these references in the future
const (
	minClusterSize int = 128
	maxClusterSize int = 65529
)

// FileSystem implememnts the FileSystem interface
type FileSystem struct {
	bootSector      msDosBootSector
	fsis            FSInformationSector
	table           table
	dataStart       uint32
	bytesPerCluster int
	size            int64
	start           int64
	file            util.File
}

// Equal compare if two filesystems are equal
func (fs *FileSystem) Equal(a *FileSystem) bool {
	localMatch := fs.file == a.file && fs.dataStart == a.dataStart && fs.bytesPerCluster == a.bytesPerCluster
	tableMatch := fs.table.equal(&a.table)
	bsMatch := fs.bootSector.equal(&a.bootSector)
	fsisMatch := fs.fsis == a.fsis
	return localMatch && tableMatch && bsMatch && fsisMatch
}

// Create creates a FAT32 filesystem in a given file or device
//
// requires the util.File where to create the filesystem, size is the size of the filesystem in bytes,
// start is how far in bytes from the beginning of the util.File to create the filesystem,
// and blocksize is is the logical blocksize to use for creating the filesystem
//
// note that you are *not* required to create the filesystem on the entire disk. You could have a disk of size
// 20GB, and create a small filesystem of size 50MB that begins 2GB into the disk.
// This is extremely useful for creating filesystems on disk partitions.
//
// Note, however, that it is much easier to do this using the higher-level APIs at github.com/diskfs/go-diskfs
// which allow you to work directly with partitions, rather than having to calculate (and hopefully not make any errors)
// where a partition starts and ends.
//
// If the provided blocksize is 0, it will use the default of 512 bytes. If it is any number other than 0
// or 512, it will return an error.
func Create(f util.File, size, start, blocksize int64, volumeLabel string) (*FileSystem, error) {
	// blocksize must be <=0 or exactly SectorSize512 or error
	if blocksize != int64(SectorSize512) && blocksize > 0 {
		return nil, fmt.Errorf("blocksize for FAT32 must be either 512 bytes or 0, not %d", blocksize)
	}
	if size > Fat32MaxSize {
		return nil, fmt.Errorf("requested size is larger than maximum allowed FAT32, requested %d, maximum %d", size, Fat32MaxSize)
	}
	if size < blocksize*4 {
		return nil, fmt.Errorf("requested size is smaller than minimum allowed FAT32, requested %d minimum %d", size, blocksize*4)
	}
	// FAT filesystems use time-of-day of creation as a volume ID
	now := time.Now()
	// because we like the fudges other people did for uniqueness
	volid := uint32(now.Unix()<<20 | (now.UnixNano() / 1000000))

	fsisPrimarySector := uint16(1)
	backupBootSector := uint16(6)

	/*
		size calculations
		we have the total size of the disk from `size uint64`
		we have the blocksize fixed at SectorSize512
		    so we can calculate diskSectors = size/512
		we know the number of reserved sectors is 32
		so the number of non-reserved sectors: data + FAT = diskSectos - 32
		now we need to figure out cluster size. The allowed number of:
		    sectors per cluster: 1, 2, 4, 8, 16, 32, 64, 128
		    bytes per cluster: 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536
		    since FAT32 uses the least significant 28 bits of a 4-byte entry (uint32) as pointers to a cluster,
		       the maximum cluster pointer address of a FAT32 entry is 268,435,456. However, several
		       entries are reserved, notably 0x0FFFFFF7-0x0FFFFFFF flag bad cluster to end of file,
		       0x0000000 flags an empty cluster, and 0x0000001 is not used, so we only have
		       a potential 268,435,444 pointer entries
		    the maximum size of a disk for FAT32 is 16 sectors per cluster = 8KB/cluster * 268435444 = ~2TB

		Follow Microsoft's `format` commad as per http://www.win.tue.nl/~aeb/linux/fs/fat/fatgen103.pdf p. 20.
		Thanks to github.com/dosfstools/dosfstools for the link
		Filesystem size / cluster size
		   <= 260M      /   1 sector =   512 bytes
			 <=   8G      /   8 sector =  4096 bytes
			 <=  16G      /  32 sector = 16384 bytes
			 <=  32G      /  64 sector = 32768 bytes
			  >  32G      / 128 sector = 65536 bytes
	*/

	var sectorsPerCluster uint8
	switch {
	case size <= 260*MB:
		sectorsPerCluster = 1
	case size <= 8*GB:
		sectorsPerCluster = 8
	case size <= 16*GB:
		sectorsPerCluster = 32
	case size <= 32*GB:
		sectorsPerCluster = 64
	case size <= Fat32MaxSize:
		sectorsPerCluster = 128
	}

	// stick with uint32 and round down
	totalSectors := uint32(size / int64(SectorSize512))
	reservedSectors := uint16(32)
	dataSectors := totalSectors - uint32(reservedSectors)
	totalClusters := dataSectors / uint32(sectorsPerCluster)
	// FAT uses 4 bytes per cluster pointer
	//   so a 512 byte sector can store 512/4 = 128 pointer entries
	//   therefore sectors per FAT = totalClusters / 128
	sectorsPerFat := uint16(totalClusters / 128)

	// what is our FAT ID / Media Type?
	mediaType := uint8(MediaFixedDisk)

	fatIDbase := uint32(0x0f << 24)
	fatID := fatIDbase + 0xffff00 + uint32(mediaType)

	// we need an Extended BIOS Parameter Block
	dos20bpb := dos20BPB{
		sectorsPerCluster:    sectorsPerCluster,
		reservedSectors:      reservedSectors,
		fatCount:             2,
		totalSectors:         0,
		mediaType:            mediaType,
		bytesPerSector:       SectorSize512,
		rootDirectoryEntries: 0,
		sectorsPerFat:        0,
	}

	// some fake logic for heads, since everything is LBA access anyways
	dos331bpb := dos331BPB{
		dos20BPB:        &dos20bpb,
		totalSectors:    totalSectors,
		heads:           1,
		sectorsPerTrack: 1,
		hiddenSectors:   0,
	}

	ebpb := dos71EBPB{
		dos331BPB:             &dos331bpb,
		version:               fatVersion0,
		rootDirectoryCluster:  2,
		fsInformationSector:   fsisPrimarySector,
		backupBootSector:      backupBootSector,
		bootFileName:          [12]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
		extendedBootSignature: longDos71EBPB,
		volumeSerialNumber:    volid,
		volumeLabel:           "NO NAME    ",
		fileSystemType:        fileSystemTypeFAT32,
		mirrorFlags:           0,
		reservedFlags:         0,
		driveNumber:           128,
		sectorsPerFat:         uint32(sectorsPerFat),
	}
	// we need a new boot sector
	bs := msDosBootSector{
		oemName:            "godiskfs",
		jumpInstruction:    [3]byte{0xeb, 0x58, 0x90},
		bootCode:           []byte{},
		biosParameterBlock: &ebpb,
	}

	// create and allocate FAT32 FSInformationSector
	fsis := FSInformationSector{
		lastAllocatedCluster:  0xffffffff,
		freeDataClustersCount: 0xffffffff,
	}

	// create and allocate the FAT tables
	eocMarker := uint32(0x0fffffff)
	unusedMarker := uint32(0x00000000)
	fatPrimaryStart := reservedSectors * uint16(SectorSize512)
	fatSize := uint32(sectorsPerFat) * uint32(SectorSize512)
	fatSecondaryStart := uint64(fatPrimaryStart) + uint64(fatSize)
	maxCluster := fatSize / 4
	rootDirCluster := uint32(2)
	fat := table{
		fatID:          fatID,
		eocMarker:      eocMarker,
		unusedMarker:   unusedMarker,
		size:           fatSize,
		rootDirCluster: rootDirCluster,
		clusters: map[uint32]uint32{
			// when we start, there is just one directory with a single cluster
			rootDirCluster: eocMarker,
		},
		maxCluster: maxCluster,
	}

	// where does our data start?
	dataStart := uint32(fatSecondaryStart) + fatSize

	// create the filesystem
	fs := &FileSystem{
		bootSector:      bs,
		fsis:            fsis,
		table:           fat,
		dataStart:       dataStart,
		bytesPerCluster: int(sectorsPerCluster) * int(SectorSize512),
		start:           start,
		size:            size,
		file:            f,
	}

	// write the boot sector
	if err := fs.writeBootSector(); err != nil {
		return nil, fmt.Errorf("failed to write the boot sector: %v", err)
	}

	// write the fsis
	if err := fs.writeFsis(); err != nil {
		return nil, fmt.Errorf("failed to write the file system information sector: %v", err)
	}

	// write the FAT tables
	if err := fs.writeFat(); err != nil {
		return nil, fmt.Errorf("failed to write the file allocation table: %v", err)
	}

	// create root directory
	// be sure to zero out the root cluster, so we do not pick up phantom
	// entries.
	clusterStart := fs.start + int64(fs.dataStart)
	// length of cluster in bytes
	tmpb := make([]byte, fs.bytesPerCluster)
	// zero out the root directory cluster
	written, err := f.WriteAt(tmpb, clusterStart)
	if err != nil {
		return nil, fmt.Errorf("failed to zero out root directory: %v", err)
	}
	if written != len(tmpb) || written != fs.bytesPerCluster {
		return nil, fmt.Errorf("incomplete zero out of root directory, wrote %d bytes instead of expected %d for cluster size %d", written, len(tmpb), fs.bytesPerCluster)
	}

	// create a volumelabel entry in the root directory
	rootDir := &Directory{
		directoryEntry: directoryEntry{
			clusterLocation: fs.table.rootDirCluster,
			isSubdirectory:  true,
			filesystem:      fs,
		},
	}
	// write the root directory entries to disk
	err = fs.writeDirectoryEntries(rootDir)
	if err != nil {
		return nil, fmt.Errorf("error writing root directory to disk: %v", err)
	}

	// set the volume label
	err = fs.SetLabel(volumeLabel)
	if err != nil {
		return nil, fmt.Errorf("failed to set volume label to '%s': %v", volumeLabel, err)
	}

	return fs, nil
}

// Read reads a filesystem from a given disk.
//
// requires the util.File where to read the filesystem, size is the size of the filesystem in bytes,
// start is how far in bytes from the beginning of the util.File the filesystem is expected to begin,
// and blocksize is is the logical blocksize to use for creating the filesystem
//
// note that you are *not* required to read a filesystem on the entire disk. You could have a disk of size
// 20GB, and a small filesystem of size 50MB that begins 2GB into the disk.
// This is extremely useful for working with filesystems on disk partitions.
//
// Note, however, that it is much easier to do this using the higher-level APIs at github.com/diskfs/go-diskfs
// which allow you to work directly with partitions, rather than having to calculate (and hopefully not make any errors)
// where a partition starts and ends.
//
// If the provided blocksize is 0, it will use the default of 512 bytes. If it is any number other than 0
// or 512, it will return an error.
func Read(file util.File, size, start, blocksize int64) (*FileSystem, error) {
	// blocksize must be <=0 or exactly SectorSize512 or error
	if blocksize != int64(SectorSize512) && blocksize > 0 {
		return nil, fmt.Errorf("blocksize for FAT32 must be either 512 bytes or 0, not %d", blocksize)
	}
	if size > Fat32MaxSize {
		return nil, fmt.Errorf("requested size is larger than maximum allowed FAT32 size %d", Fat32MaxSize)
	}
	if size < blocksize*4 {
		return nil, fmt.Errorf("requested size is smaller than minimum allowed FAT32 size %d", blocksize*4)
	}

	// load the information from the disk
	// read first 512 bytes from the file
	bsb := make([]byte, SectorSize512)
	n, err := file.ReadAt(bsb, start)
	if err != nil {
		return nil, fmt.Errorf("could not read bytes from file: %v", err)
	}
	if uint16(n) < uint16(SectorSize512) {
		return nil, fmt.Errorf("only could read %d bytes from file", n)
	}
	bs, err := msDosBootSectorFromBytes(bsb)

	if err != nil {
		return nil, fmt.Errorf("error reading MS-DOS Boot Sector: %v", err)
	}

	sectorsPerFat := bs.biosParameterBlock.sectorsPerFat
	fatSize := sectorsPerFat * uint32(SectorSize512)
	reservedSectors := bs.biosParameterBlock.dos331BPB.dos20BPB.reservedSectors
	sectorsPerCluster := bs.biosParameterBlock.dos331BPB.dos20BPB.sectorsPerCluster
	fatPrimaryStart := uint64(reservedSectors) * uint64(SectorSize512)
	fatSecondaryStart := fatPrimaryStart + uint64(fatSize)

	fsisBytes := make([]byte, 512)
	read, err := file.ReadAt(fsisBytes, int64(bs.biosParameterBlock.fsInformationSector)*blocksize+start)
	if err != nil {
		return nil, fmt.Errorf("unable to read bytes for FSInformationSector: %v", err)
	}
	if read != 512 {
		return nil, fmt.Errorf("read %d bytes instead of expected %d for FS Information Sector", read, 512)
	}
	fsis, err := fsInformationSectorFromBytes(fsisBytes)
	if err != nil {
		return nil, fmt.Errorf("error reading FileSystem Information Sector: %v", err)
	}

	b := make([]byte, fatSize)
	_, _ = file.ReadAt(b, int64(fatPrimaryStart)+start)
	fat := tableFromBytes(b)

	_, _ = file.ReadAt(b, int64(fatSecondaryStart)+start)
	fat2 := tableFromBytes(b)
	if !fat.equal(fat2) {
		return nil, errors.New("fat tables did not much")
	}
	dataStart := uint32(fatSecondaryStart) + fat.size

	return &FileSystem{
		bootSector:      *bs,
		fsis:            *fsis,
		table:           *fat,
		dataStart:       dataStart,
		bytesPerCluster: int(sectorsPerCluster) * int(SectorSize512),
		start:           start,
		size:            size,
		file:            file,
	}, nil
}

func (fs *FileSystem) writeBootSector() error {
	//nolint:gocritic  // we do not want to remove this commented code, as it is useful for reference and debugging
	/*
		err := bs.write(f)
		if err != nil {
			return nil, fmt.Errorf("error writing MS-DOS Boot Sector: %v", err)
		}
	*/

	b, err := fs.bootSector.toBytes()
	if err != nil {
		return fmt.Errorf("error converting MS-DOS Boot Sector to bytes: %v", err)
	}

	// write main boot sector
	count, err := fs.file.WriteAt(b, 0+fs.start)
	if err != nil {
		return fmt.Errorf("error writing MS-DOS Boot Sector to disk: %v", err)
	}
	if count != int(SectorSize512) {
		return fmt.Errorf("wrote %d bytes of MS-DOS Boot Sector to disk instead of expected %d", count, SectorSize512)
	}

	// write backup boot sector to the file
	if fs.bootSector.biosParameterBlock.backupBootSector > 0 {
		count, err = fs.file.WriteAt(b, int64(fs.bootSector.biosParameterBlock.backupBootSector)*int64(SectorSize512)+fs.start)
		if err != nil {
			return fmt.Errorf("error writing MS-DOS Boot Sector to disk: %v", err)
		}
		if count != int(SectorSize512) {
			return fmt.Errorf("wrote %d bytes of MS-DOS Boot Sector to disk instead of expected %d", count, SectorSize512)
		}
	}

	return nil
}

func (fs *FileSystem) writeFsis() error {
	fsInformationSector := fs.bootSector.biosParameterBlock.fsInformationSector
	backupBootSector := fs.bootSector.biosParameterBlock.backupBootSector
	fsisPrimary := int64(fsInformationSector * uint16(SectorSize512))

	fsisBytes := fs.fsis.toBytes()

	if _, err := fs.file.WriteAt(fsisBytes, fsisPrimary+fs.start); err != nil {
		return fmt.Errorf("unable to write primary Fsis: %v", err)
	}

	if backupBootSector > 0 {
		if _, err := fs.file.WriteAt(fsisBytes, int64(backupBootSector+1)*int64(SectorSize512)+fs.start); err != nil {
			return fmt.Errorf("unable to write backup Fsis: %v", err)
		}
	}

	return nil
}

func (fs *FileSystem) writeFat() error {
	reservedSectors := fs.bootSector.biosParameterBlock.dos331BPB.dos20BPB.reservedSectors
	fatPrimaryStart := uint64(reservedSectors) * uint64(SectorSize512)
	fatSecondaryStart := fatPrimaryStart + uint64(fs.table.size)

	fatBytes := fs.table.bytes()

	if _, err := fs.file.WriteAt(fatBytes, int64(fatPrimaryStart)+fs.start); err != nil {
		return fmt.Errorf("unable to write primary FAT table: %v", err)
	}

	if _, err := fs.file.WriteAt(fatBytes, int64(fatSecondaryStart)+fs.start); err != nil {
		return fmt.Errorf("unable to write backup FAT table: %v", err)
	}

	return nil
}

// Type returns the type code for the filesystem. Always returns filesystem.TypeFat32
func (fs *FileSystem) Type() filesystem.Type {
	return filesystem.TypeFat32
}

// Mkdir make a directory at the given path. It is equivalent to `mkdir -p`, i.e. idempotent, in that:
//
// * It will make the entire tree path if it does not exist
// * It will not return an error if the path already exists
func (fs *FileSystem) Mkdir(p string) error {
	_, _, err := fs.readDirWithMkdir(p, true)
	// we are not interesting in returning the entries
	return err
}

// ReadDir return the contents of a given directory in a given filesystem.
//
// Returns a slice of os.FileInfo with all of the entries in the directory.
//
// Will return an error if the directory does not exist or is a regular file and not a directory
func (fs *FileSystem) ReadDir(p string) ([]os.FileInfo, error) {
	_, entries, err := fs.readDirWithMkdir(p, false)
	if err != nil {
		return nil, fmt.Errorf("error reading directory %s: %v", p, err)
	}
	// once we have made it here, looping is done. We have found the final entry
	// we need to return all of the file info
	count := len(entries)
	ret := make([]os.FileInfo, count)
	for i, e := range entries {
		shortName := e.filenameShort
		if e.lowercaseShortname {
			shortName = strings.ToLower(shortName)
		}
		fileExtension := e.fileExtension
		if e.lowercaseExtension {
			shortName = strings.ToLower(fileExtension)
		}
		if fileExtension != "" {
			shortName = fmt.Sprintf("%s.%s", shortName, fileExtension)
		}
		ret[i] = FileInfo{
			modTime:   e.modifyTime,
			name:      e.filenameLong,
			shortName: shortName,
			size:      int64(e.fileSize),
			isDir:     e.isSubdirectory,
		}
	}
	return ret, nil
}

// OpenFile returns an io.ReadWriter from which you can read the contents of a file
// or write contents to the file
//
// accepts normal os.OpenFile flags
//
// returns an error if the file does not exist
func (fs *FileSystem) OpenFile(p string, flag int) (filesystem.File, error) {
	// get the path
	dir := path.Dir(p)
	filename := path.Base(p)
	// if the dir == filename, then it is just /
	if dir == filename {
		return nil, fmt.Errorf("cannot open directory %s as file", p)
	}
	// get the directory entries
	parentDir, entries, err := fs.readDirWithMkdir(dir, false)
	if err != nil {
		return nil, fmt.Errorf("could not read directory entries for %s", dir)
	}
	// we now know that the directory exists, see if the file exists
	var targetEntry *directoryEntry
	for _, e := range entries {
		shortName := e.filenameShort
		if e.fileExtension != "" {
			shortName += "." + e.fileExtension
		}
		if e.filenameLong != filename && shortName != filename {
			continue
		}
		// cannot do anything with directories
		if e.isSubdirectory {
			return nil, fmt.Errorf("cannot open directory %s as file", p)
		}
		// if we got this far, we have found the file
		targetEntry = e
	}

	// see if the file exists
	// if the file does not exist, and is not opened for os.O_CREATE, return an error
	if targetEntry == nil {
		if flag&os.O_CREATE == 0 {
			return nil, fmt.Errorf("target file %s does not exist and was not asked to create", p)
		}
		// else create it
		targetEntry, err = fs.mkFile(parentDir, filename)
		if err != nil {
			return nil, fmt.Errorf("failed to create file %s: %v", p, err)
		}
		// write the directory entries to disk
		err = fs.writeDirectoryEntries(parentDir)
		if err != nil {
			return nil, fmt.Errorf("error writing directory file %s to disk: %v", p, err)
		}
	}
	offset := int64(0)

	// what if we were asked to truncate the file?
	if flag&os.O_TRUNC == os.O_TRUNC && targetEntry.fileSize != 0 {
		// pretty simple: change the filesize, and then remove all except the first cluster
		targetEntry.fileSize = 0
		// we should not need to change the parent, because it is all pointers
		if err := fs.writeDirectoryEntries(parentDir); err != nil {
			return nil, fmt.Errorf("error writing directory file %s to disk: %v", p, err)
		}
		if _, err := fs.allocateSpace(1, targetEntry.clusterLocation); err != nil {
			return nil, fmt.Errorf("unable to resize cluster list: %v", err)
		}
	}
	if flag&os.O_APPEND == os.O_APPEND {
		offset = int64(targetEntry.fileSize)
	}
	return &File{
		directoryEntry: targetEntry,
		isReadWrite:    flag&os.O_RDWR != 0,
		isAppend:       flag&os.O_APPEND != 0,
		offset:         offset,
		filesystem:     fs,
		parent:         parentDir,
	}, nil
}

// Label get the label of the filesystem from the secial file in the root directory.
// The label stored in the boot sector is ignored to mimic Windows behavior which
// only stores and reads the label from the special file in the root directory.
func (fs *FileSystem) Label() string {
	// locate the filesystem root directory
	_, dirEntries, err := fs.readDirWithMkdir("/", false)
	if err != nil {
		return ""
	}

	// locate the label entry, it may not exist
	var labelEntry *directoryEntry
	for _, entry := range dirEntries {
		if entry.isVolumeLabel {
			labelEntry = entry
		}
	}

	// if we have no label entry, return
	if labelEntry == nil {
		return ""
	}

	// reconstruct the label, does not attempt to sanitize anything
	return labelEntry.filenameShort + labelEntry.fileExtension
}

// SetLabel changes the filesystem label
func (fs *FileSystem) SetLabel(volumeLabel string) error {
	if volumeLabel == "" {
		volumeLabel = "NO NAME"
	}

	// ensure the volumeLabel is proper sized
	volumeLabel = fmt.Sprintf("%-11.11s", volumeLabel)

	// set the label in the superblock
	bpb := fs.bootSector.biosParameterBlock
	if bpb == nil {
		return fmt.Errorf("failed to load the boot sector")
	}
	bpb.volumeLabel = volumeLabel

	// write the boot sector
	if err := fs.writeBootSector(); err != nil {
		return fmt.Errorf("failed to write the boot sector")
	}

	// locate the filesystem root directory or create it
	rootDir, dirEntries, err := fs.readDirWithMkdir("/", false)
	if err != nil {
		return fmt.Errorf("failed to locate root directory: %v", err)
	}

	// locate the label entry, it may not exist
	var labelEntry *directoryEntry
	for _, entry := range dirEntries {
		if entry.isVolumeLabel {
			labelEntry = entry
		}
	}

	// if have an entry, change the label. Otherwise, create it
	if labelEntry != nil {
		labelEntry.filenameShort = volumeLabel[:8]
		labelEntry.fileExtension = volumeLabel[8:11]
	} else {
		_, err = fs.mkLabel(rootDir, volumeLabel)
		if err != nil {
			return fmt.Errorf("failed to create volume label root directory entry '%s': %v", volumeLabel, err)
		}
	}

	// write the root directory entries to disk
	err = fs.writeDirectoryEntries(rootDir)
	if err != nil {
		return fmt.Errorf("failed to save the root directory to disk: %v", err)
	}

	return nil
}

// read directory entries for a given cluster
func (fs *FileSystem) getClusterList(firstCluster uint32) ([]uint32, error) {
	// first, get the chain of clusters
	complete := false
	cluster := firstCluster
	clusters := fs.table.clusters

	// do we even have a valid cluster?
	if _, ok := clusters[cluster]; !ok {
		return nil, fmt.Errorf("invalid start cluster: %d", cluster)
	}

	clusterList := make([]uint32, 0, 5)
	for !complete {
		// save the current cluster
		clusterList = append(clusterList, cluster)
		// get the next cluster
		newCluster := clusters[cluster]
		// if it is EOC, we are done
		switch {
		case fs.table.isEoc(newCluster):
			complete = true
		case cluster < 2:
			return nil, fmt.Errorf("invalid cluster chain at %d", cluster)
		}
		cluster = newCluster
	}
	return clusterList, nil
}

// read directory entries for a given cluster
func (fs *FileSystem) readDirectory(dir *Directory) ([]*directoryEntry, error) {
	clusterList, err := fs.getClusterList(dir.clusterLocation)
	if err != nil {
		return nil, fmt.Errorf("could not read cluster list: %v", err)
	}
	// read the data from all of the cluster entries in the list
	byteCount := len(clusterList) * fs.bytesPerCluster
	b := make([]byte, 0, byteCount)
	for _, cluster := range clusterList {
		// bytes where the cluster starts
		clusterStart := fs.start + int64(fs.dataStart) + int64(cluster-2)*int64(fs.bytesPerCluster)
		// length of cluster in bytes
		tmpb := make([]byte, fs.bytesPerCluster)
		// read the entire cluster
		_, _ = fs.file.ReadAt(tmpb, clusterStart)
		b = append(b, tmpb...)
	}
	// get the directory
	if err := dir.entriesFromBytes(b); err != nil {
		return nil, err
	}
	return dir.entries, nil
}

// make a subdirectory
func (fs *FileSystem) mkSubdir(parent *Directory, name string) (*directoryEntry, error) {
	// get a cluster chain for the file
	clusters, err := fs.allocateSpace(1, 0)
	if err != nil {
		return nil, fmt.Errorf("could not allocate disk space for file %s: %v", name, err)
	}
	// create a directory entry for the file
	return parent.createEntry(name, clusters[0], true)
}

func (fs *FileSystem) writeDirectoryEntries(dir *Directory) error {
	// we need to save the entries of theparent
	b, err := dir.entriesToBytes(fs.bytesPerCluster)
	if err != nil {
		return fmt.Errorf("could not create a valid byte stream for a FAT32 Entries: %v", err)
	}
	// now have to expand with zeros to the a multiple of cluster lengths
	// how many clusters do we need, how many do we have?
	clusterList, err := fs.getClusterList(dir.clusterLocation)
	if err != nil {
		return fmt.Errorf("unable to get clusters for directory: %v", err)
	}

	if len(b) > len(clusterList)*fs.bytesPerCluster {
		clusters, err := fs.allocateSpace(uint64(len(b)), clusterList[0])
		if err != nil {
			return fmt.Errorf("unable to allocate space for directory entries: %v", err)
		}
		clusterList = clusters
	}
	// now write everything out to the cluster list
	// read the data from all of the cluster entries in the list
	for i, cluster := range clusterList {
		// bytes where the cluster starts
		clusterStart := fs.start + int64(fs.dataStart) + int64(cluster-2)*int64(fs.bytesPerCluster)
		bStart := i * fs.bytesPerCluster
		written, err := fs.file.WriteAt(b[bStart:bStart+fs.bytesPerCluster], clusterStart)
		if err != nil {
			return fmt.Errorf("error writing directory entries: %v", err)
		}
		if written != fs.bytesPerCluster {
			return fmt.Errorf("wrote %d bytes to cluster %d instead of expected %d", written, cluster, fs.bytesPerCluster)
		}
	}
	return nil
}

// mkFile make a file in a directory
func (fs *FileSystem) mkFile(parent *Directory, name string) (*directoryEntry, error) {
	// get a cluster chain for the file
	clusters, err := fs.allocateSpace(1, 0)
	if err != nil {
		return nil, fmt.Errorf("could not allocate disk space for directory %s: %v", name, err)
	}
	// create a directory entry for the file
	return parent.createEntry(name, clusters[0], false)
}

// mkLabel make a volume label in a directory
func (fs *FileSystem) mkLabel(parent *Directory, name string) (*directoryEntry, error) {
	// create a directory entry for the file
	return parent.createVolumeLabel(name)
}

// readDirWithMkdir - walks down a directory tree to the last entry
// if it does not exist, it may or may not make it
func (fs *FileSystem) readDirWithMkdir(p string, doMake bool) (*Directory, []*directoryEntry, error) {
	paths, err := splitPath(p)

	if err != nil {
		return nil, nil, err
	}
	// walk down the directory tree until all paths have been walked or we cannot find something
	// start with the root directory
	var entries []*directoryEntry
	currentDir := &Directory{
		directoryEntry: directoryEntry{
			clusterLocation: fs.table.rootDirCluster,
			isSubdirectory:  true,
			filesystem:      fs,
		},
	}
	entries, err = fs.readDirectory(currentDir)
	if err != nil {
		return nil, nil, fmt.Errorf("failed to read directory %s", "/")
	}
	for i, subp := range paths {
		// do we have an entry whose name is the same as this name?
		found := false
		for _, e := range entries {
			if e.filenameLong != subp && e.filenameShort != subp && (!e.lowercaseShortname || (e.lowercaseShortname && !strings.EqualFold(e.filenameShort, subp))) {
				continue
			}
			if !e.isSubdirectory {
				return nil, nil, fmt.Errorf("cannot create directory at %s since it is a file", "/"+strings.Join(paths[0:i+1], "/"))
			}
			// the filename matches, and it is a subdirectory, so we can break after saving the cluster
			found = true
			currentDir = &Directory{
				directoryEntry: *e,
			}
			break
		}

		// if not, either make it, retrieve its cluster and entries, and loop;
		//  or error out
		if !found {
			if doMake {
				var subdirEntry *directoryEntry
				subdirEntry, err = fs.mkSubdir(currentDir, subp)
				if err != nil {
					return nil, nil, fmt.Errorf("failed to create subdirectory %s", "/"+strings.Join(paths[0:i+1], "/"))
				}
				// make a basic entry for the new subdir
				parentDirectoryCluster := currentDir.clusterLocation
				if parentDirectoryCluster == 2 {
					// references to the root directory (cluster 2) must be stored as 0
					parentDirectoryCluster = 0
				}
				dir := &Directory{
					directoryEntry: directoryEntry{clusterLocation: subdirEntry.clusterLocation},
					entries: []*directoryEntry{
						{filenameShort: ".", isSubdirectory: true, clusterLocation: subdirEntry.clusterLocation},
						{filenameShort: "..", isSubdirectory: true, clusterLocation: parentDirectoryCluster},
					},
				}
				// write the new directory entries to disk
				err = fs.writeDirectoryEntries(dir)
				if err != nil {
					return nil, nil, fmt.Errorf("error writing new directory entries to disk: %v", err)
				}
				// write the parent directory entries to disk
				err = fs.writeDirectoryEntries(currentDir)
				if err != nil {
					return nil, nil, fmt.Errorf("error writing directory entries to disk: %v", err)
				}
				// save where we are to search next
				currentDir = &Directory{
					directoryEntry: *subdirEntry,
				}
			} else {
				return nil, nil, fmt.Errorf("path %s not found", "/"+strings.Join(paths[0:i+1], "/"))
			}
		}
		// get all of the entries in this directory
		entries, err = fs.readDirectory(currentDir)
		if err != nil {
			return nil, nil, fmt.Errorf("failed to read directory %s", "/"+strings.Join(paths[0:i+1], "/"))
		}
	}
	// once we have made it here, looping is done; we have found the final entry
	return currentDir, entries, nil
}

// allocateSpace ensure that a cluster chain exists to handle a file of a given size.
// arguments are file size in bytes and starting cluster of the chain
// if starting is 0, then we are not (re)sizing an existing chain but creating a new one
// returns the indexes of clusters to be used in order. If the new size is smaller than
// the original size, will shrink the chain.
func (fs *FileSystem) allocateSpace(size uint64, previous uint32) ([]uint32, error) {
	var (
		clusters             []uint32
		err                  error
		lastAllocatedCluster uint32
	)
	// 1- calculate how many clusters needed
	// 2- see how many clusters already are allocated
	// 3- if needed, allocate new clusters and extend the chain in the FAT table
	keys := make([]uint32, 0, 20)
	allocated := make([]uint32, 0, 20)

	// what is the total count of clusters needed?
	count := int(size / uint64(fs.bytesPerCluster))
	if size%uint64(fs.bytesPerCluster) > 0 {
		count++
	}
	extraClusterCount := count

	clusters = make([]uint32, 0, 20)

	// are we extending an existing chain, or creating a new one?
	if previous >= 2 {
		clusters, err = fs.getClusterList(previous)
		if err != nil {
			return nil, fmt.Errorf("unable to get cluster list: %v", err)
		}
		originalClusterCount := len(clusters)
		extraClusterCount = count - originalClusterCount
		// make sure that previous is the last cluster of the previous chain
		previous = clusters[len(clusters)-1]
	}

	// what if we do not need to change anything?
	if extraClusterCount == 0 {
		return clusters, nil
	}

	// get a list of allocated clusters, so we can know which ones are unallocated and therefore allocatable
	allClusters := fs.table.clusters
	maxCluster := fs.table.maxCluster
	for k := range allClusters {
		keys = append(keys, k)
	}
	sort.Slice(keys, func(i, j int) bool { return keys[i] < keys[j] })

	if extraClusterCount > 0 {
		for i := uint32(2); i < maxCluster && len(allocated) < extraClusterCount; i++ {
			if _, ok := allClusters[i]; !ok {
				// these become the same at this point
				allocated = append(allocated, i)
			}
		}

		// did we allocate them all?
		if len(allocated) < extraClusterCount {
			return nil, errors.New("no space left on device")
		}

		// mark last allocated one as EOC
		lastAlloc := len(allocated) - 1

		// extend the chain and fill them in
		if previous > 0 {
			allClusters[previous] = allocated[0]
		}
		for i := 0; i < lastAlloc; i++ {
			allClusters[allocated[i]] = allocated[i+1]
		}
		allClusters[allocated[lastAlloc]] = fs.table.eocMarker

		// update the FSIS
		lastAllocatedCluster = allocated[len(allocated)-1]
	} else {
		var (
			lastAlloc   int
			deallocated []uint32
		)
		toRemove := abs(extraClusterCount)
		lastAlloc = len(clusters) - toRemove - 1
		if lastAlloc < 0 {
			lastAlloc = 0
		}
		deallocated = clusters[lastAlloc+1:]

		// mark last allocated one as EOC
		allClusters[clusters[lastAlloc]] = fs.table.eocMarker

		// unmark all of the unused ones
		lastAllocatedCluster = fs.fsis.lastAllocatedCluster
		for _, cl := range deallocated {
			allClusters[cl] = fs.table.unusedMarker
			if cl == lastAllocatedCluster {
				lastAllocatedCluster--
			}
		}
	}

	// update the FSIS
	fs.fsis.lastAllocatedCluster = lastAllocatedCluster
	if err := fs.writeFsis(); err != nil {
		return nil, fmt.Errorf("failed to write the file system information sector: %v", err)
	}

	// write the FAT tables
	if err := fs.writeFat(); err != nil {
		return nil, fmt.Errorf("failed to write the file allocation table: %v", err)
	}

	// return all of the clusters
	return append(clusters, allocated...), nil
}

func abs(x int) int {
	if x < 0 {
		return -x
	}
	return x
}
 07070100000314000081A4000000000000000000000001645E367C000016CE000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/fat32/file.go   package fat32

import (
	"fmt"
	"io"
	"os"
)

// File represents a single file in a FAT32 filesystem
type File struct {
	*directoryEntry
	isReadWrite bool
	isAppend    bool
	offset      int64
	parent      *Directory
	filesystem  *FileSystem
}

// Read reads up to len(b) bytes from the File.
// It returns the number of bytes read and any error encountered.
// At end of file, Read returns 0, io.EOF
// reads from the last known offset in the file from last read or write
// and increments the offset by the number of bytes read.
// Use Seek() to set at a particular point
func (fl *File) Read(b []byte) (int, error) {
	if fl == nil || fl.filesystem == nil {
		return 0, os.ErrClosed
	}
	// we have the DirectoryEntry, so we can get the starting cluster location
	// we then get a list of the clusters, and read the data from all of those clusters
	// write the content for the file
	totalRead := 0
	fs := fl.filesystem
	bytesPerCluster := fs.bytesPerCluster
	start := int(fs.dataStart)
	size := int(fl.fileSize) - int(fl.offset)
	maxRead := size
	file := fs.file
	clusters, err := fs.getClusterList(fl.clusterLocation)
	if err != nil {
		return totalRead, fmt.Errorf("unable to get list of clusters for file: %v", err)
	}
	clusterIndex := 0

	// if there is nothing left to read, just return EOF
	if size <= 0 {
		return totalRead, io.EOF
	}

	// we stop when we hit the lesser of
	//   1- len(b)
	//   2- file end
	if len(b) < maxRead {
		maxRead = len(b)
	}

	// figure out which cluster we start with
	if fl.offset > 0 {
		clusterIndex = int(fl.offset / int64(bytesPerCluster))
		lastCluster := clusters[clusterIndex]
		// read any partials, if needed
		remainder := fl.offset % int64(bytesPerCluster)
		if remainder != 0 {
			offset := int64(start) + int64(lastCluster-2)*int64(bytesPerCluster) + remainder
			toRead := int64(bytesPerCluster) - remainder
			if toRead > int64(len(b)) {
				toRead = int64(len(b))
			}
			_, _ = file.ReadAt(b[0:toRead], offset+fs.start)
			totalRead += int(toRead)
			clusterIndex++
		}
	}

	for i := clusterIndex; i < len(clusters); i++ {
		left := maxRead - totalRead
		toRead := bytesPerCluster
		if toRead > left {
			toRead = left
		}
		offset := uint32(start) + (clusters[i]-2)*uint32(bytesPerCluster)
		_, _ = file.ReadAt(b[totalRead:totalRead+toRead], int64(offset)+fs.start)
		totalRead += toRead
		if totalRead >= maxRead {
			break
		}
	}

	fl.offset += int64(totalRead)
	var retErr error
	if fl.offset >= int64(fl.fileSize) {
		retErr = io.EOF
	}
	return totalRead, retErr
}

// Write writes len(b) bytes to the File.
// It returns the number of bytes written and an error, if any.
// returns a non-nil error when n != len(b)
// writes to the last known offset in the file from last read or write
// and increments the offset by the number of bytes read.
// Use Seek() to set at a particular point
func (fl *File) Write(p []byte) (int, error) {
	if fl == nil || fl.filesystem == nil {
		return 0, os.ErrClosed
	}
	totalWritten := 0
	fs := fl.filesystem
	// if the file was not opened RDWR, nothing we can do
	if !fl.isReadWrite {
		return totalWritten, fmt.Errorf("cannot write to file opened read-only")
	}
	// what is the new file size?
	writeSize := len(p)
	oldSize := int64(fl.fileSize)
	newSize := fl.offset + int64(writeSize)
	if newSize < oldSize {
		newSize = oldSize
	}
	// 1- ensure we have space and clusters
	clusters, err := fs.allocateSpace(uint64(newSize), fl.clusterLocation)
	if err != nil {
		return 0x00, fmt.Errorf("unable to allocate clusters for file: %v", err)
	}

	// update the directory entry size for the file
	if oldSize != newSize {
		fl.fileSize = uint32(newSize)
	}
	// write the content for the file
	bytesPerCluster := fl.filesystem.bytesPerCluster
	file := fl.filesystem.file
	start := int(fl.filesystem.dataStart)
	clusterIndex := 0

	// figure out which cluster we start with
	if fl.offset > 0 {
		clusterIndex = int(fl.offset) / bytesPerCluster
		lastCluster := clusters[clusterIndex]
		// write any partials, if needed
		remainder := fl.offset % int64(bytesPerCluster)
		if remainder != 0 {
			offset := int64(start) + int64(lastCluster-2)*int64(bytesPerCluster) + remainder
			toWrite := int64(bytesPerCluster) - remainder
			// max we can write
			if toWrite > int64(len(p)) {
				toWrite = int64(len(p))
			}
			_, err := file.WriteAt(p[0:toWrite], offset+fs.start)
			if err != nil {
				return totalWritten, fmt.Errorf("unable to write to file: %v", err)
			}
			totalWritten += int(toWrite)
			clusterIndex++
		}
	}

	for i := clusterIndex; i < len(clusters); i++ {
		left := len(p) - totalWritten
		toWrite := bytesPerCluster
		if toWrite > left {
			toWrite = left
		}
		offset := uint32(start) + (clusters[i]-2)*uint32(bytesPerCluster)
		_, err := file.WriteAt(p[totalWritten:totalWritten+toWrite], int64(offset)+fs.start)
		if err != nil {
			return totalWritten, fmt.Errorf("unable to write to file: %v", err)
		}
		totalWritten += toWrite
	}

	fl.offset += int64(totalWritten)

	// update the parent that we have changed the file size
	err = fs.writeDirectoryEntries(fl.parent)
	if err != nil {
		return 0, fmt.Errorf("error writing directory entries to disk: %v", err)
	}

	return totalWritten, nil
}

// Seek set the offset to a particular point in the file
func (fl *File) Seek(offset int64, whence int) (int64, error) {
	if fl == nil || fl.filesystem == nil {
		return 0, os.ErrClosed
	}
	newOffset := int64(0)
	switch whence {
	case io.SeekStart:
		newOffset = offset
	case io.SeekEnd:
		newOffset = int64(fl.fileSize) + offset
	case io.SeekCurrent:
		newOffset = fl.offset + offset
	}
	if newOffset < 0 {
		return fl.offset, fmt.Errorf("cannot set offset %d before start of file", offset)
	}
	fl.offset = newOffset
	return fl.offset, nil
}

// Close close the file
func (fl *File) Close() error {
	fl.filesystem = nil
	return nil
}
  07070100000315000081A4000000000000000000000001645E367C00000457000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/fat32/fileinfo.go   package fat32

import (
	"os"
	"time"
)

// FileInfo represents the information for an individual file
// it fulfills os.FileInfo interface
type FileInfo struct {
	modTime   time.Time
	mode      os.FileMode
	name      string
	shortName string
	size      int64
	isDir     bool
}

// IsDir abbreviation for Mode().IsDir()
func (fi FileInfo) IsDir() bool {
	return fi.isDir
}

// ModTime modification time
func (fi FileInfo) ModTime() time.Time {
	return fi.modTime
}

// Mode returns file mode
func (fi FileInfo) Mode() os.FileMode {
	return fi.mode
}

// Name base name of the file
//
//	will return the long name of the file. If none exists, returns the shortname and extension
func (fi FileInfo) Name() string {
	if fi.name != "" {
		return fi.name
	}
	return fi.shortName
}

// ShortName just the 8.3 short name of the file
func (fi FileInfo) ShortName() string {
	return fi.shortName
}

// Size length in bytes for regular files
func (fi FileInfo) Size() int64 {
	return fi.size
}

// Sys underlying data source - not supported yet and so will return nil
func (fi FileInfo) Sys() interface{} {
	return nil
}
 07070100000316000081A4000000000000000000000001645E367C00000C7B000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/fat32/fsinfosector.go   package fat32

import (
	"encoding/binary"
	"fmt"
)

// FSInfoSectorSignature is the signature for every FAT32 FSInformationSector
type fsInfoSectorSignature uint32

const (
	// FSInfoSectorSignatureStart is the 4 bytes that signify the beginning of a FAT32 FS Information Sector
	fsInfoSectorSignatureStart fsInfoSectorSignature = 0x52526141
	// FSInfoSectorSignatureMid is the 4 bytes that signify the middle bytes 484-487 of a FAT32 FS Information Sector
	fsInfoSectorSignatureMid fsInfoSectorSignature = 0x72724161
	// FSInfoSectorSignatureEnd is the 4 bytes that signify the end of a FAT32 FS Information Sector
	fsInfoSectorSignatureEnd fsInfoSectorSignature = 0x000055AA
)

const (
	// unknownFreeDataClusterCount is the fixed flag for unknown number of free data clusters
	//nolint:varcheck,deadcode // keep for future reference
	unknownFreeDataClusterCount uint32 = 0xffffffff
	// unknownlastAllocatedCluster is the fixed flag for unknown most recently allocated cluster
	//nolint:varcheck,deadcode // keep for future reference
	unknownlastAllocatedCluster uint32 = 0xffffffff
)

// FSInformationSector is a structure holding the FAT32 filesystem information sector
type FSInformationSector struct {
	freeDataClustersCount uint32
	lastAllocatedCluster  uint32
}

// FSInformationSectorFromBytes create an FSInformationSector struct from bytes
func fsInformationSectorFromBytes(b []byte) (*FSInformationSector, error) {
	bLen := len(b)
	if bLen != int(SectorSize512) {
		return nil, fmt.Errorf("cannot read FAT32 FS Information Sector from %d bytes instead of expected %d", bLen, SectorSize512)
	}

	fsis := FSInformationSector{}

	// validate the signatures
	signatureStart := binary.BigEndian.Uint32(b[0:4])
	signatureMid := binary.BigEndian.Uint32(b[484:488])
	signatureEnd := binary.BigEndian.Uint32(b[508:512])

	if signatureStart != uint32(fsInfoSectorSignatureStart) {
		return nil, fmt.Errorf("invalid signature at beginning of FAT 32 Filesystem Information Sector: %x", signatureStart)
	}
	if signatureMid != uint32(fsInfoSectorSignatureMid) {
		return nil, fmt.Errorf("invalid signature at middle of FAT 32 Filesystem Information Sector: %x", signatureMid)
	}
	if signatureEnd != uint32(fsInfoSectorSignatureEnd) {
		return nil, fmt.Errorf("invalid signature at end of FAT 32 Filesystem Information Sector: %x", signatureEnd)
	}

	// validated, so just read the data
	fsis.freeDataClustersCount = binary.LittleEndian.Uint32(b[488:492])
	fsis.lastAllocatedCluster = binary.LittleEndian.Uint32(b[492:496])

	return &fsis, nil
}

// ToBytes returns a FAT32 Filesystem Information Sector ready to be written to disk
func (fsis *FSInformationSector) toBytes() []byte {
	b := make([]byte, SectorSize512)

	// signatures
	binary.BigEndian.PutUint32(b[0:4], uint32(fsInfoSectorSignatureStart))
	binary.BigEndian.PutUint32(b[484:488], uint32(fsInfoSectorSignatureMid))
	binary.BigEndian.PutUint32(b[508:512], uint32(fsInfoSectorSignatureEnd))

	// reserved 0x00
	// these are set to 0 by default, so not much to do

	// actual data
	binary.LittleEndian.PutUint32(b[488:492], fsis.freeDataClustersCount)
	binary.LittleEndian.PutUint32(b[492:496], fsis.lastAllocatedCluster)

	return b
}
 07070100000317000081A4000000000000000000000001645E367C00000CAB000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/fat32/msdosbootsector.go    package fat32

import (
	"bytes"
	"encoding/binary"
	"fmt"
)

// MsDosBootSectorSignature is the required last 2 bytes of the MS-DOS boot sector
const msDosBootSectorSignature uint16 = 0x55aa

// MsDosBootSector is the structure representing an msdos boot structure
type msDosBootSector struct {
	jumpInstruction    [3]byte    // JumpInstruction is the instruction set to jump to for booting
	oemName            string     // OEMName is the 8-byte OEM Name
	biosParameterBlock *dos71EBPB // BIOSParameterBlock is the FAT32 Extended BIOS Parameter Block
	bootCode           []byte     // BootCode represents the actual boot code
}

func (m *msDosBootSector) equal(a *msDosBootSector) bool {
	if (m == nil && a != nil) || (a == nil && m != nil) {
		return false
	}
	if m == nil && a == nil {
		return true
	}
	return m.biosParameterBlock.equal(a.biosParameterBlock) &&
		m.oemName == a.oemName &&
		m.jumpInstruction == a.jumpInstruction &&
		bytes.Equal(m.bootCode, a.bootCode)
}

// MsDosBootSectorFromBytes create an MsDosBootSector from a byte slice
func msDosBootSectorFromBytes(b []byte) (*msDosBootSector, error) {
	if len(b) != int(SectorSize512) {
		return nil, fmt.Errorf("cannot parse MS-DOS Boot Sector from %d bytes, must be exactly %d", len(b), SectorSize512)
	}
	bs := msDosBootSector{}
	// extract the jump instruction
	copy(bs.jumpInstruction[:], b[0:3])
	// extract the OEM name
	bs.oemName = string(b[3:11])
	// extract the EBPB and its size
	bpb, bpbSize, err := dos71EBPBFromBytes(b[11:90])
	if err != nil {
		return nil, fmt.Errorf("could not read FAT32 BIOS Parameter Block from boot sector: %v", err)
	}
	bs.biosParameterBlock = bpb

	// we have the size of the EBPB, we can figure out the size of the boot code
	bootSectorStart := 11 + bpbSize
	bootSectorEnd := SectorSize512 - 2
	bs.bootCode = b[bootSectorStart:bootSectorEnd]

	// validate boot sector signature
	if bsSignature := binary.BigEndian.Uint16(b[bootSectorEnd:]); bsSignature != msDosBootSectorSignature {
		return nil, fmt.Errorf("invalid signature in last 2 bytes of boot sector: %v", bsSignature)
	}

	return &bs, nil
}

// ToBytes output a byte slice representing the boot sector
func (m *msDosBootSector) toBytes() ([]byte, error) {
	// exactly one sector
	b := make([]byte, SectorSize512)

	// copy the 3-byte jump instruction
	copy(b[0:3], m.jumpInstruction[:])
	// make sure OEMName is <= 8 bytes
	name := m.oemName
	if len(name) > 8 {
		return nil, fmt.Errorf("cannot use OEM Name > 8 bytes long: %s", m.oemName)
	}
	nameR := []rune(name)
	if len(nameR) != len(name) {
		return nil, fmt.Errorf("invalid OEM Name: non-ascii characters")
	}

	oemName := fmt.Sprintf("%-8s", m.oemName)
	copy(b[3:11], oemName)

	// bytes for the EBPB
	bpbBytes, err := m.biosParameterBlock.toBytes()
	if err != nil {
		return nil, fmt.Errorf("error getting FAT32 EBPB: %v", err)
	}
	copy(b[11:], bpbBytes)
	bpbLen := len(bpbBytes)

	// bytes for the boot sector
	if len(m.bootCode) > int(SectorSize512)-2-(11+bpbLen) {
		return nil, fmt.Errorf("boot code too long at %d bytes", len(m.bootCode))
	}
	copy(b[11+bpbLen:SectorSize512-2], m.bootCode)

	// bytes for the signature
	binary.BigEndian.PutUint16(b[SectorSize512-2:], msDosBootSectorSignature)

	return b, nil
}
 07070100000318000081A4000000000000000000000001645E367C000007DB000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/fat32/table.go  package fat32

import (
	"encoding/binary"
	"reflect"
)

// table a FAT32 table
type table struct {
	fatID          uint32
	eocMarker      uint32
	unusedMarker   uint32
	clusters       map[uint32]uint32
	rootDirCluster uint32
	size           uint32
	maxCluster     uint32
}

func (t *table) equal(a *table) bool {
	if (t == nil && a != nil) || (t != nil && a == nil) {
		return false
	}
	if t == nil && a == nil {
		return true
	}
	return t.fatID == a.fatID &&
		t.eocMarker == a.eocMarker &&
		t.rootDirCluster == a.rootDirCluster &&
		t.size == a.size &&
		t.maxCluster == a.maxCluster &&
		reflect.DeepEqual(t.clusters, a.clusters)
}

/*
  when reading from disk, remember that *any* of the following is a valid eocMarker:
  0x?ffffff8 - 0x?fffffff
*/

func tableFromBytes(b []byte) *table {
	t := table{
		fatID:          binary.LittleEndian.Uint32(b[0:4]),
		eocMarker:      binary.LittleEndian.Uint32(b[4:8]),
		size:           uint32(len(b)),
		clusters:       map[uint32]uint32{},
		maxCluster:     uint32(len(b) / 4),
		rootDirCluster: 2, // always 2 for FAT32
	}
	// just need to map the clusters in
	for i := uint32(2); i < t.maxCluster; i++ {
		bStart := i * 4
		bEnd := bStart + 4
		val := binary.LittleEndian.Uint32(b[bStart:bEnd])
		// 0 indicates an empty cluster, so we can ignore
		if val != 0 {
			t.clusters[i] = val
		}
	}
	return &t
}

// bytes returns a FAT32 table as bytes ready to be written to disk
func (t *table) bytes() []byte {
	b := make([]byte, t.size)

	// FAT ID and fixed values
	binary.LittleEndian.PutUint32(b[0:4], t.fatID)
	// End-of-Cluster marker
	binary.LittleEndian.PutUint32(b[4:8], t.eocMarker)
	// now just clusters
	numClusters := t.maxCluster
	for i := uint32(2); i < numClusters; i++ {
		bStart := i * 4
		bEnd := bStart + 4
		val := uint32(0)
		if cluster, ok := t.clusters[i]; ok {
			val = cluster
		}
		binary.LittleEndian.PutUint32(b[bStart:bEnd], val)
	}

	return b
}

func (t *table) isEoc(cluster uint32) bool {
	return cluster&0xFFFFFF8 == 0xFFFFFF8
}
 07070100000319000081A4000000000000000000000001645E367C000003A3000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/fat32/util.go   package fat32

import (
	"errors"
	"strings"
)

const (
	// KB represents one KB
	KB int64 = 1024
	// MB represents one MB
	MB int64 = 1024 * KB
	// GB represents one GB
	GB int64 = 1024 * MB
	// TB represents one TB
	TB int64 = 1024 * GB
	// Fat32MaxSize is maximum size of a FAT32 filesystem in bytes
	Fat32MaxSize int64 = 2198754099200
)

func universalizePath(p string) (string, error) {
	// globalize the separator
	ps := strings.ReplaceAll(p, "\\", "/")
	if ps[0] != '/' {
		return "", errors.New("must use absolute paths")
	}
	return ps, nil
}
func splitPath(p string) ([]string, error) {
	ps, err := universalizePath(p)
	if err != nil {
		return nil, err
	}
	// we need to split such that each one ends in "/", except possibly the last one
	parts := strings.Split(ps, "/")
	// eliminate empty parts
	ret := make([]string, 0)
	for _, sub := range parts {
		if sub != "" {
			ret = append(ret, sub)
		}
	}
	return ret, nil
}
 0707010000031A000081A4000000000000000000000001645E367C000000A5000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/file.go package filesystem

import "io"

// File a reference to a single file on disk
type File interface {
	io.ReadWriteSeeker
	io.Closer
	// io.ReaderAt
	// io.WriterAt
}
   0707010000031B000081A4000000000000000000000001645E367C000004B7000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/filesystem.go   // Package filesystem provides interfaces and constants required for filesystem implementations.
// All interesting implementations are in subpackages, e.g. github.com/diskfs/go-diskfs/filesystem/fat32
package filesystem

import (
	"os"
)

// FileSystem is a reference to a single filesystem on a disk
type FileSystem interface {
	// Type return the type of filesystem
	Type() Type
	// Mkdir make a directory
	Mkdir(string) error
	// ReadDir read the contents of a directory
	ReadDir(string) ([]os.FileInfo, error)
	// OpenFile open a handle to read or write to a file
	OpenFile(string, int) (File, error)
	// Label get the label for the filesystem, or "" if none. Be careful to trim it, as it may contain
	// leading or following whitespace. The label is passed as-is and not cleaned up at all.
	Label() string
	// SetLabel changes the label on the writable filesystem. Different file system may hav different
	// length constraints.
	SetLabel(string) error
}

// Type represents the type of disk this is
type Type int

const (
	// TypeFat32 is a FAT32 compatible filesystem
	TypeFat32 Type = iota
	// TypeISO9660 is an iso filesystem
	TypeISO9660
	// TypeSquashfs is a squashfs filesystem
	TypeSquashfs
)
 0707010000031C000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/iso9660 0707010000031D000081A4000000000000000000000001645E367C000005A7000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/iso9660/directory.go    package iso9660

// Directory represents a single directory in a FAT32 filesystem
type Directory struct {
	directoryEntry
	entries []*directoryEntry
}

// dirEntriesFromBytes loads the directory entries from the raw bytes
func (d *Directory) entriesFromBytes(b []byte, f *FileSystem) error {
	entries, err := parseDirEntries(b, f)
	if err != nil {
		return err
	}
	d.entries = entries
	return nil
}

// entriesToBytes convert our entries to raw bytes
func (d *Directory) entriesToBytes(ceBlockLocations []uint32) ([][]byte, error) {
	b := make([]byte, 0)
	ceBlocks := make([][]byte, 0)
	blocksize := int(d.filesystem.blocksize)
	for _, de := range d.entries {
		b2, err := de.toBytes(false, ceBlockLocations)
		if err != nil {
			return nil, err
		}
		recBytes := b2[0]
		// a directory entry cannot cross a block boundary
		// so if adding this puts us past it, then pad it
		// but only if we are not already exactly at the boundary
		newlength := len(b) + len(recBytes)
		left := blocksize - len(b)%blocksize
		if left != 0 && newlength/blocksize > len(b)/blocksize {
			b = append(b, make([]byte, left)...)
		}
		b = append(b, recBytes...)
		if len(b2) > 1 {
			ceBlocks = append(ceBlocks, b2[1:]...)
		}
	}
	// in the end, must pad to exact blocks
	left := blocksize - len(b)%blocksize
	if left > 0 {
		b = append(b, make([]byte, left)...)
	}
	ret := [][]byte{b}
	if len(ceBlocks) > 0 {
		ret = append(ret, ceBlocks...)
	}
	return ret, nil
}
 0707010000031E000081A4000000000000000000000001645E367C0000473E000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/iso9660/directoryentry.go   package iso9660

import (
	"encoding/binary"
	"errors"
	"fmt"
	"os"
	"path"
	"regexp"
	"strings"
	"time"
)

const (
	directoryEntryMinSize uint8 = 34  // min size is all the required fields (33 bytes) plus 1 byte for the filename
	directoryEntryMaxSize int   = 254 // max size allowed
)

// directoryEntry is a single directory entry
// also fulfills os.FileInfo
//
//	Name() string       // base name of the file
//	Size() int64        // length in bytes for regular files; system-dependent for others
//	Mode() FileMode     // file mode bits
//	ModTime() time.Time // modification time
//	IsDir() bool        // abbreviation for Mode().IsDir()
//	Sys() interface{}   // underlying data source (can return nil)
type directoryEntry struct {
	extAttrSize              uint8
	location                 uint32
	size                     uint32
	creation                 time.Time
	isHidden                 bool
	isSubdirectory           bool
	isAssociated             bool
	hasExtendedAttrs         bool
	hasOwnerGroupPermissions bool
	hasMoreEntries           bool
	isSelf                   bool
	isParent                 bool
	volumeSequence           uint16
	filesystem               *FileSystem
	filename                 string
	extensions               []directoryEntrySystemUseExtension
}

func (de *directoryEntry) countNamelenBytes() int {
	// size includes the ";1" at the end as two bytes if a filename
	var namelen int
	switch {
	case de.isSelf:
		namelen = 1
	case de.isParent:
		namelen = 1
	default:
		namelen = len(de.filename)
	}

	return namelen
}

func (de *directoryEntry) countBaseBytes() int {
	namelen := de.countNamelenBytes()
	// if even, we add one byte of padding to always end on an even byte
	if namelen%2 == 0 {
		namelen++
	}

	return 33 + namelen
}

func (de *directoryEntry) toBytes(skipExt bool, ceBlocks []uint32) ([][]byte, error) {
	baseRecordSize := de.countBaseBytes()
	namelen := de.countNamelenBytes()

	b := make([]byte, baseRecordSize)

	b[1] = de.extAttrSize
	binary.LittleEndian.PutUint32(b[2:6], de.location)
	binary.BigEndian.PutUint32(b[6:10], de.location)
	binary.LittleEndian.PutUint32(b[10:14], de.size)
	binary.BigEndian.PutUint32(b[14:18], de.size)
	copy(b[18:25], timeToBytes(de.creation))

	// set the flags
	var flagByte byte = 0x00
	if de.isHidden {
		flagByte |= 0x01
	}
	if de.isSubdirectory {
		flagByte |= 0x02
	}
	if de.isAssociated {
		flagByte |= 0x04
	}
	if de.hasExtendedAttrs {
		flagByte |= 0x08
	}
	if de.hasOwnerGroupPermissions {
		flagByte |= 0x10
	}
	if de.hasMoreEntries {
		flagByte |= 0x80
	}
	b[25] = flagByte
	// volume sequence number - uint16 in both endian
	binary.LittleEndian.PutUint16(b[28:30], de.volumeSequence)
	binary.BigEndian.PutUint16(b[30:32], de.volumeSequence)

	b[32] = uint8(namelen)

	// save the filename
	var filenameBytes []byte
	var err error
	switch {
	case de.isSelf:
		filenameBytes = []byte{0x00}
	case de.isParent:
		filenameBytes = []byte{0x01}
	default:
		// first validate the filename
		err = validateFilename(de.filename, de.isSubdirectory)
		if err != nil {
			nametype := "filename"
			if de.isSubdirectory {
				nametype = "directory"
			}
			return nil, fmt.Errorf("invalid %s %s: %v", nametype, de.filename, err)
		}
		filenameBytes, err = stringToASCIIBytes(de.filename)
		if err != nil {
			return nil, fmt.Errorf("error converting filename to bytes: %v", err)
		}
	}

	// copy it over
	copy(b[33:], filenameBytes)

	// output directory entry extensions - but only if we did not skip it
	var extBytes [][]byte
	if !skipExt {
		extBytes, err = dirEntryExtensionsToBytes(de.extensions, directoryEntryMaxSize-len(b), de.filesystem.blocksize, ceBlocks)
		if err != nil {
			return nil, fmt.Errorf("enable to convert directory entry SUSP extensions to bytes: %v", err)
		}
		b = append(b, extBytes[0]...)
	}
	// always end on an even
	if len(b)%2 != 0 {
		b = append(b, 0x00)
	}
	// update the record size
	b[0] = uint8(len(b))

	recWithCE := [][]byte{b}
	if len(extBytes) > 1 {
		recWithCE = append(recWithCE, extBytes[1:]...)
	}
	return recWithCE, nil
}

// dirEntryExtensionsToBytes converts slice of SUSP extensions to slice ot []byte: first is dir entry, rest are continuation areas
// returns:
//
//	slice of []byte
func dirEntryExtensionsToBytes(extensions []directoryEntrySystemUseExtension, maxSize int, blocksize int64, ceBlocks []uint32) ([][]byte, error) {
	// output directory entries
	var (
		err            error
		b              []byte
		continuedBytes [][]byte
	)
	ret := make([][]byte, 0)
	for i, e := range extensions {
		b2 := e.Bytes()
		// do we overrun the size
		if len(b)+len(b2) > maxSize {
			// we need an extension, so pop the first one off the slice, use it as a pointer, and pass the rest
			nextCeBlock := ceBlocks[0]
			continuedBytes, err = dirEntryExtensionsToBytes(extensions[i:], int(blocksize), blocksize, ceBlocks[1:])
			if err != nil {
				return nil, err
			}
			// use a continuation entry until the end of the
			ce := &directoryEntrySystemUseContinuation{
				offset:             0,
				location:           nextCeBlock,
				continuationLength: uint32(len(continuedBytes[0])),
			}
			b = append(b, ce.Bytes()...)
			break
		} else {
			b = append(b, b2...)
		}
	}
	ret = append(ret, b)
	if len(continuedBytes) > 0 {
		ret = append(ret, continuedBytes...)
	}
	return ret, nil
}

func dirEntryFromBytes(b []byte, ext []suspExtension) (*directoryEntry, error) {
	// has to be at least 34 bytes
	if len(b) < int(directoryEntryMinSize) {
		return nil, fmt.Errorf("cannot read directoryEntry from %d bytes, fewer than minimum of %d bytes", len(b), directoryEntryMinSize)
	}
	recordSize := b[0]
	// what if it is not the right size?
	if len(b) != int(recordSize) {
		return nil, fmt.Errorf("directoryEntry should be size %d bytes according to first byte, but have %d bytes", recordSize, len(b))
	}
	extAttrSize := b[1]
	location := binary.LittleEndian.Uint32(b[2:6])
	size := binary.LittleEndian.Uint32(b[10:14])
	creation := bytesToTime(b[18:25])

	// get the flags
	flagByte := b[25]
	isHidden := flagByte&0x01 == 0x01
	isSubdirectory := flagByte&0x02 == 0x02
	isAssociated := flagByte&0x04 == 0x04
	hasExtendedAttrs := flagByte&0x08 == 0x08
	hasOwnerGroupPermissions := flagByte&0x10 == 0x10
	hasMoreEntries := flagByte&0x80 == 0x80

	volumeSequence := binary.LittleEndian.Uint16(b[28:30])

	// size includes the ";1" at the end as two bytes and any padding
	namelen := b[32]
	nameLenWithPadding := namelen

	// get the filename itself
	nameBytes := b[33 : 33+namelen]
	if namelen > 1 && namelen%2 == 0 {
		nameLenWithPadding++
	}
	var filename string
	var isSelf, isParent bool
	switch {
	case namelen == 1 && nameBytes[0] == 0x00:
		filename = ""
		isSelf = true
	case namelen == 1 && nameBytes[0] == 0x01:
		filename = ""
		isParent = true
	default:
		filename = string(nameBytes)
	}

	// and now for extensions in the system use area
	suspFields := make([]directoryEntrySystemUseExtension, 0)
	if len(b) > 33+int(nameLenWithPadding) {
		var err error
		suspFields, err = parseDirectoryEntryExtensions(b[33+nameLenWithPadding:], ext)
		if err != nil {
			return nil, fmt.Errorf("unable to parse directory entry extensions: %v", err)
		}
	}

	return &directoryEntry{
		extAttrSize:              extAttrSize,
		location:                 location,
		size:                     size,
		creation:                 creation,
		isHidden:                 isHidden,
		isSubdirectory:           isSubdirectory,
		isAssociated:             isAssociated,
		hasExtendedAttrs:         hasExtendedAttrs,
		hasOwnerGroupPermissions: hasOwnerGroupPermissions,
		hasMoreEntries:           hasMoreEntries,
		isSelf:                   isSelf,
		isParent:                 isParent,
		volumeSequence:           volumeSequence,
		filename:                 filename,
		extensions:               suspFields,
	}, nil
}

// parseDirEntry takes the bytes of a single directory entry
// and parses it, including pulling in continuation entry bytes
func parseDirEntry(b []byte, f *FileSystem) (*directoryEntry, error) {
	// empty entry means nothing more to read - this might not actually be accurate, but work with it for now
	if len(b) < 1 {
		return nil, errors.New("cannot parse zero length directory entry")
	}
	entryLen := int(b[0])
	if entryLen == 0 {
		return nil, nil
	}
	// get the bytes
	de, err := dirEntryFromBytes(b[:entryLen], f.suspExtensions)
	if err != nil {
		return nil, fmt.Errorf("invalid directory entry : %v", err)
	}
	de.filesystem = f

	if f.suspEnabled && len(de.extensions) > 0 {
		// if the last entry is a continuation SUSP entry and SUSP is enabled, we need to follow and parse them
		// because the extensions can be a linked list directory -> CE area -> CE area ...
		//   we need to loop until it is no more
		for {
			if ce, ok := de.extensions[len(de.extensions)-1].(directoryEntrySystemUseContinuation); ok {
				location := int64(ce.Location())
				size := int(ce.ContinuationLength())
				offset := int64(ce.Offset())
				// read it from disk
				continuationBytes := make([]byte, size)
				read, err := f.file.ReadAt(continuationBytes, location*f.blocksize+offset)
				if err != nil {
					return nil, fmt.Errorf("error reading continuation entry data at %d: %v", location, err)
				}
				if read != size {
					return nil, fmt.Errorf("read continuation entry data %d bytes instead of expected %d", read, size)
				}
				// parse and append
				entries, err := parseDirectoryEntryExtensions(continuationBytes, f.suspExtensions)
				if err != nil {
					return nil, fmt.Errorf("error parsing continuation entry data at %d: %v", location, err)
				}
				// remove the CE one from the extensions array and append our new ones
				de.extensions = append(de.extensions[:len(de.extensions)-1], entries...)
			} else {
				break
			}
		}
	}
	return de, nil
}

// parseDirEntries takes all of the bytes in a special file (i.e. a directory)
// and gets all of the DirectoryEntry for that directory
// this is, essentially, the equivalent of `ls -l` or if you prefer `dir`
func parseDirEntries(b []byte, f *FileSystem) ([]*directoryEntry, error) {
	dirEntries := make([]*directoryEntry, 0, 20)
	count := 0
	for i := 0; i < len(b); count++ {
		// empty entry means nothing more to read - this might not actually be accurate, but work with it for now
		entryLen := int(b[i+0])
		if entryLen == 0 {
			i += (int(f.blocksize) - i%int(f.blocksize))
			continue
		}
		de, err := parseDirEntry(b[i+0:i+entryLen], f)
		if err != nil {
			return nil, fmt.Errorf("invalid directory entry %d at byte %d: %v", count, i, err)
		}
		// some extensions to directory relocation, so check if we should ignore it
		if f.suspEnabled {
			for _, e := range f.suspExtensions {
				if e.Relocated(de) {
					de = nil
					break
				}
			}
		}

		if de != nil {
			dirEntries = append(dirEntries, de)
		}
		i += entryLen
	}
	return dirEntries, nil
}

// get the location of a particular path relative to this directory
func (de *directoryEntry) getLocation(p string) (location, size uint32, err error) {
	// break path down into parts and levels
	parts := splitPath(p)
	if len(parts) == 0 {
		location = de.location
		size = de.size
	} else {
		current := parts[0]
		// read the directory bytes
		dirb := make([]byte, de.size)
		n, err := de.filesystem.file.ReadAt(dirb, int64(de.location)*de.filesystem.blocksize)
		if err != nil {
			return 0, 0, fmt.Errorf("could not read directory: %v", err)
		}
		if n != len(dirb) {
			return 0, 0, fmt.Errorf("read %d bytes instead of expected %d", n, len(dirb))
		}
		// parse those entries
		dirEntries, err := parseDirEntries(dirb, de.filesystem)
		if err != nil {
			return 0, 0, fmt.Errorf("could not parse directory: %v", err)
		}
		// find the entry among the children that has the desired name
		for _, entry := range dirEntries {
			// do we have an alternate name?
			// only care if not self or parent entry
			checkFilename := entry.filename
			if de.filesystem.suspEnabled && !entry.isSelf && !entry.isParent {
				for _, e := range de.filesystem.suspExtensions {
					filename, err2 := e.GetFilename(entry)
					switch {
					case err2 != nil && err2 == ErrSuspFilenameUnsupported:
						continue
					case err2 != nil:
						return 0, 0, fmt.Errorf("extension %s count not find a filename property: %v", e.ID(), err2)
					default:
						checkFilename = filename
						//nolint:gosimple // redundant break, but we want this explicit
						break
					}
				}
			}
			if checkFilename == current {
				if len(parts) > 1 {
					// just dig down further - what if it looks like a file, but is a relocated directory?
					if !entry.isSubdirectory && de.filesystem.suspEnabled && !entry.isSelf && !entry.isParent {
						for _, e := range de.filesystem.suspExtensions {
							location2 := e.GetDirectoryLocation(entry)
							if location2 != 0 {
								// need to get the directory entry for the child
								dirb := make([]byte, de.filesystem.blocksize)
								n, err2 := de.filesystem.file.ReadAt(dirb, int64(location2)*de.filesystem.blocksize)
								if err2 != nil {
									return 0, 0, fmt.Errorf("could not read bytes of relocated directory %s from block %d: %v", checkFilename, location2, err2)
								}
								if n != len(dirb) {
									return 0, 0, fmt.Errorf("read %d bytes instead of expected %d for relocated directory %s from block %d: %v", n, len(dirb), checkFilename, location2, err)
								}
								// get the size of the actual directory entry
								size2 := dirb[0]
								entry, err2 = parseDirEntry(dirb[:size2], de.filesystem)
								if err2 != nil {
									return 0, 0, fmt.Errorf("error converting bytes to a directory entry for relocated directory %s from block %d: %v", checkFilename, location2, err2)
								}
								break
							}
						}
					}
					location, size, err = entry.getLocation(path.Join(parts[1:]...))
					if err != nil {
						return 0, 0, fmt.Errorf("could not get location: %v", err)
					}
				} else {
					// this is the final one, we found it, keep it
					location = entry.location
					size = entry.size
				}
				break
			}
		}
	}

	return location, size, nil
}

// Name() string       // base name of the file
func (de *directoryEntry) Name() string {
	name := de.filename
	if de.filesystem.suspEnabled {
		for _, e := range de.filesystem.suspExtensions {
			filename, err := e.GetFilename(de)
			switch {
			case err != nil:
				continue
			default:
				name = filename
				//nolint:gosimple // redundant break, but we want this explicit
				break
			}
		}
	}
	// check if we have an extension that overrides it
	// filenames should have the ';1' stripped off, as well as the leading or trailing '.'
	if !de.IsDir() {
		name = strings.TrimSuffix(name, ";1")
		name = strings.TrimSuffix(name, ".")
		name = strings.TrimPrefix(name, ".")
	}
	return name
}

// Size() int64        // length in bytes for regular files; system-dependent for others
func (de *directoryEntry) Size() int64 {
	return int64(de.size)
}

// Mode() FileMode     // file mode bits
func (de *directoryEntry) Mode() os.FileMode {
	return 0o755
}

// ModTime() time.Time // modification time
func (de *directoryEntry) ModTime() time.Time {
	return de.creation
}

// IsDir() bool        // abbreviation for Mode().IsDir()
func (de *directoryEntry) IsDir() bool {
	return de.isSubdirectory
}

// Sys() interface{}   // underlying data source (can return nil)
func (de *directoryEntry) Sys() interface{} {
	return nil
}

// utilities

func bytesToTime(b []byte) time.Time {
	year := int(b[0])
	month := time.Month(b[1])
	date := int(b[2])
	hour := int(b[3])
	minute := int(b[4])
	second := int(b[5])
	offset := int(int8(b[6]))
	location := time.FixedZone("iso", offset*15*60)
	return time.Date(year+1900, month, date, hour, minute, second, 0, location)
}

func timeToBytes(t time.Time) []byte {
	year := t.Year()
	month := t.Month()
	date := t.Day()
	second := t.Second()
	minute := t.Minute()
	hour := t.Hour()
	_, offset := t.Zone()
	b := make([]byte, 7)
	b[0] = byte(year - 1900)
	b[1] = byte(month)
	b[2] = byte(date)
	b[3] = byte(hour)
	b[4] = byte(minute)
	b[5] = byte(second)
	b[6] = byte(int8(offset / 60 / 15))
	return b
}

// convert a string to ascii bytes, but only accept valid d-characters
func validateFilename(s string, isDir bool) error {
	var err error
	if isDir {
		// directory only allowed up to 8 characters of A-Z,0-9,_
		re := regexp.MustCompile("^[A-Z0-9_]{1,30}$")
		if !re.MatchString(s) {
			err = fmt.Errorf("directory name must be of up to 30 characters from A-Z0-9_")
		}
	} else {
		// filename only allowed up to 8 characters of A-Z,0-9,_, plus an optional '.' plus up to 3 characters of A-Z,0-9,_, plus must have ";1"
		re := regexp.MustCompile("^[A-Z0-9_]+(.[A-Z0-9_]*)?;1$")
		switch {
		case !re.MatchString(s):
			err = fmt.Errorf("file name must be of characters from A-Z0-9_, followed by an optional '.' and an extension of the same characters")
		case len(strings.ReplaceAll(s, ".", "")) > 30:
			err = fmt.Errorf("file name must be at most 30 characters, not including the separator '.'")
		}
	}
	return err
}

// convert a string to a byte array, if all characters are valid ascii
func stringToASCIIBytes(s string) ([]byte, error) {
	length := len(s)
	b := make([]byte, length)
	// convert the name into 11 bytes
	r := []rune(s)
	// take the first 8 characters
	for i := 0; i < length; i++ {
		val := int(r[i])
		// we only can handle values less than max byte = 255
		if val > 255 {
			return nil, fmt.Errorf("non-ASCII character in name: %s", s)
		}
		b[i] = byte(val)
	}
	return b, nil
}

// converts a string into upper-case with only valid characters
func uCaseValid(name string) string {
	// easiest way to do this is to go through the name one char at a time
	r := []rune(name)
	r2 := make([]rune, 0, len(r))
	for _, val := range r {
		switch {
		case (0x30 <= val && val <= 0x39) || (0x41 <= val && val <= 0x5a) || (val == 0x7e):
			// naturally valid characters
			r2 = append(r2, val)
		case (0x61 <= val && val <= 0x7a):
			// lower-case characters should be upper-cased
			r2 = append(r2, val-32)
		case val == ' ' || val == '.':
			// remove spaces and periods
			continue
		default:
			// replace the rest with _
			r2 = append(r2, '_')
		}
	}
	return string(r2)
}
  0707010000031F000081A4000000000000000000000001645E367C00004923000000000000000000000000000000000000006E00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/iso9660/directoryentrysystemuseextension.go package iso9660

import (
	"bytes"
	"encoding/binary"
	"errors"
	"fmt"
)

const (
	suspExtensionContinuationArea          = "CE"
	suspExtensionPaddingField              = "PD"
	suspExtensionSharingProtocolIndicator  = "SP"
	suspExtensionSharingProtocolTerminator = "ST"
	suspExtensionExtensionsReference       = "ER"
	suspExtensionExtensionsSelector        = "ES"
	suspExtensionCheckBytes                = 0xbeef
)

var (
	// ErrSuspNoHandler error to show gracefully that we do not have a handler for this signature. Opposed to processing error
	ErrSuspNoHandler = errors.New("NoHandler")
	// ErrSuspFilenameUnsupported error to show that this extension does not support searching by path
	ErrSuspFilenameUnsupported = errors.New("FilenameUnsupported")
	// ErrSuspRelocatedDirectoryUnsupported error to indicate that this extension does not support relocated directories
	ErrSuspRelocatedDirectoryUnsupported = errors.New("relocatedDirectoryUnsupported")
)

// suspExtension master for an extension that is registered with an "ER" entry
type suspExtension interface {
	ID() string
	Process(string, []byte) (directoryEntrySystemUseExtension, error)
	GetFilename(*directoryEntry) (string, error)
	Relocated(*directoryEntry) bool
	UsePathtable() bool
	GetDirectoryLocation(*directoryEntry) uint32
	Descriptor() string
	Source() string
	Version() uint8
	GetFileExtensions(string, bool, bool) ([]directoryEntrySystemUseExtension, error)
	GetFinalizeExtensions(*finalizeFileInfo) ([]directoryEntrySystemUseExtension, error)
	Relocatable() bool
	Relocate(map[string]*finalizeFileInfo) ([]*finalizeFileInfo, map[string]*finalizeFileInfo, error)
}

type directoryEntrySystemUseExtension interface {
	Equal(directoryEntrySystemUseExtension) bool
	Signature() string
	Length() int
	Version() uint8
	Data() []byte
	Bytes() []byte
	Continuable() bool                                                         // if this one is continuable to the next one of the same signature
	Merge([]directoryEntrySystemUseExtension) directoryEntrySystemUseExtension // merge
}

// directoryEntrySystemUseExtensionRaw raw holder, common to all
type directoryEntrySystemUseExtensionRaw struct {
	signature string
	length    uint8
	version   uint8
	data      []byte
}

func (d directoryEntrySystemUseExtensionRaw) Equal(o directoryEntrySystemUseExtension) bool {
	t, ok := o.(directoryEntrySystemUseExtensionRaw)
	return ok && t.signature == d.signature && t.length == d.length && t.version == d.version && bytes.Equal(d.data, t.data)
}
func (d directoryEntrySystemUseExtensionRaw) Signature() string {
	return d.signature
}
func (d directoryEntrySystemUseExtensionRaw) Length() int {
	return int(d.length)
}
func (d directoryEntrySystemUseExtensionRaw) Version() uint8 {
	return d.version
}
func (d directoryEntrySystemUseExtensionRaw) Data() []byte {
	return d.data
}
func (d directoryEntrySystemUseExtensionRaw) Bytes() []byte {
	ret := make([]byte, 4)
	copy(ret[0:2], d.Signature())
	ret[2] = d.length
	ret[3] = d.Version()
	ret = append(ret, d.Data()...)
	return ret
}
func (d directoryEntrySystemUseExtensionRaw) Continuable() bool {
	return false
}
func (d directoryEntrySystemUseExtensionRaw) Merge([]directoryEntrySystemUseExtension) directoryEntrySystemUseExtension {
	return nil
}

func parseSystemUseExtensionRaw(b []byte) directoryEntrySystemUseExtension {
	size := len(b)
	signature := string(b[:2])
	version := b[3]
	data := make([]byte, 0)
	if size > 4 {
		data = b[4:]
	}
	return directoryEntrySystemUseExtensionRaw{
		signature: signature,
		length:    uint8(size),
		version:   version,
		data:      data,
	}
}

// directoryEntrySystemUseExtensionSharingProtocolIndicator single appearance in root entry
type directoryEntrySystemUseExtensionSharingProtocolIndicator struct {
	skipBytes uint8
}

func (d directoryEntrySystemUseExtensionSharingProtocolIndicator) Equal(o directoryEntrySystemUseExtension) bool {
	t, ok := o.(directoryEntrySystemUseExtensionSharingProtocolIndicator)
	return ok && t == d
}
func (d directoryEntrySystemUseExtensionSharingProtocolIndicator) Signature() string {
	return suspExtensionSharingProtocolIndicator
}
func (d directoryEntrySystemUseExtensionSharingProtocolIndicator) Length() int {
	return 7
}
func (d directoryEntrySystemUseExtensionSharingProtocolIndicator) Version() uint8 {
	return 1
}
func (d directoryEntrySystemUseExtensionSharingProtocolIndicator) Data() []byte {
	ret := make([]byte, 3)
	binary.BigEndian.PutUint16(ret[0:2], suspExtensionCheckBytes)
	ret[2] = d.skipBytes
	return ret
}
func (d directoryEntrySystemUseExtensionSharingProtocolIndicator) Bytes() []byte {
	ret := make([]byte, 4)
	copy(ret[0:2], suspExtensionSharingProtocolIndicator)
	ret[2] = uint8(d.Length())
	ret[3] = d.Version()
	ret = append(ret, d.Data()...)
	return ret
}
func (d directoryEntrySystemUseExtensionSharingProtocolIndicator) SkipBytes() uint8 {
	return d.skipBytes
}
func (d directoryEntrySystemUseExtensionSharingProtocolIndicator) Continuable() bool {
	return false
}
func (d directoryEntrySystemUseExtensionSharingProtocolIndicator) Merge([]directoryEntrySystemUseExtension) directoryEntrySystemUseExtension {
	return nil
}

func parseSystemUseExtensionSharingProtocolIndicator(b []byte) (directoryEntrySystemUseExtension, error) {
	targetSize := 7
	if len(b) != targetSize {
		return nil, fmt.Errorf("SP extension must be %d bytes, but received %d", targetSize, len(b))
	}
	size := b[2]
	if size != uint8(targetSize) {
		return nil, fmt.Errorf("SP extension must be %d bytes, but byte 2 indicated %d", targetSize, size)
	}
	version := b[3]
	if version != 1 {
		return nil, fmt.Errorf("SP extension must be version 1, was %d", version)
	}
	checkBytes := binary.BigEndian.Uint16(b[4:6])
	if checkBytes != suspExtensionCheckBytes {
		return nil, fmt.Errorf("SP extension must had mismatched check bytes, received % x instead of % x", checkBytes, suspExtensionCheckBytes)
	}
	return directoryEntrySystemUseExtensionSharingProtocolIndicator{
		skipBytes: b[6],
	}, nil
}

// directoryEntrySystemUseExtensionPadding padding
type directoryEntrySystemUseExtensionPadding struct {
	length uint8
}

func (d directoryEntrySystemUseExtensionPadding) Equal(o directoryEntrySystemUseExtension) bool {
	t, ok := o.(directoryEntrySystemUseExtensionPadding)
	return ok && t == d
}
func (d directoryEntrySystemUseExtensionPadding) Signature() string {
	return suspExtensionPaddingField
}
func (d directoryEntrySystemUseExtensionPadding) Length() int {
	return int(d.length)
}
func (d directoryEntrySystemUseExtensionPadding) Version() uint8 {
	return 1
}
func (d directoryEntrySystemUseExtensionPadding) Data() []byte {
	ret := make([]byte, d.Length()-4)
	return ret
}
func (d directoryEntrySystemUseExtensionPadding) Bytes() []byte {
	ret := make([]byte, 4)
	copy(ret[0:2], suspExtensionPaddingField)
	ret[2] = d.length
	ret[3] = d.Version()
	ret = append(ret, d.Data()...)
	return ret
}
func (d directoryEntrySystemUseExtensionPadding) Continuable() bool {
	return false
}
func (d directoryEntrySystemUseExtensionPadding) Merge([]directoryEntrySystemUseExtension) directoryEntrySystemUseExtension {
	return nil
}

func parseSystemUseExtensionPadding(b []byte) (directoryEntrySystemUseExtension, error) {
	size := b[2]
	if int(size) != len(b) {
		return nil, fmt.Errorf("PD extension received %d bytes, but byte 2 indicated %d", len(b), size)
	}
	version := b[3]
	if version != 1 {
		return nil, fmt.Errorf("PD extension must be version 1, was %d", version)
	}
	return directoryEntrySystemUseExtensionPadding{
		length: size,
	}, nil
}

// directoryEntrySystemUseTerminator termination
type directoryEntrySystemUseTerminator struct {
}

func (d directoryEntrySystemUseTerminator) Equal(o directoryEntrySystemUseExtension) bool {
	t, ok := o.(directoryEntrySystemUseTerminator)
	return ok && t == d
}
func (d directoryEntrySystemUseTerminator) Signature() string {
	return suspExtensionSharingProtocolTerminator
}
func (d directoryEntrySystemUseTerminator) Length() int {
	return 4
}
func (d directoryEntrySystemUseTerminator) Version() uint8 {
	return 1
}
func (d directoryEntrySystemUseTerminator) Data() []byte {
	return []byte{}
}
func (d directoryEntrySystemUseTerminator) Bytes() []byte {
	ret := make([]byte, 4)
	copy(ret[0:2], suspExtensionSharingProtocolTerminator)
	ret[2] = uint8(d.Length())
	ret[3] = d.Version()
	return ret
}
func (d directoryEntrySystemUseTerminator) Continuable() bool {
	return false
}
func (d directoryEntrySystemUseTerminator) Merge([]directoryEntrySystemUseExtension) directoryEntrySystemUseExtension {
	return nil
}

func parseSystemUseExtensionTerminator(b []byte) (directoryEntrySystemUseExtension, error) {
	targetSize := 4
	if len(b) != targetSize {
		return nil, fmt.Errorf("ST extension must be %d bytes, but received %d", targetSize, len(b))
	}
	size := b[2]
	if size != uint8(targetSize) {
		return nil, fmt.Errorf("ST extension must be %d bytes, but byte 2 indicated %d", targetSize, size)
	}
	version := b[3]
	if version != 1 {
		return nil, fmt.Errorf("ST extension must be version 1, was %d", version)
	}
	return directoryEntrySystemUseTerminator{}, nil
}

// directoryEntrySystemUseContinuation termination
type directoryEntrySystemUseContinuation struct {
	location           uint32
	offset             uint32
	continuationLength uint32
}

func (d directoryEntrySystemUseContinuation) Equal(o directoryEntrySystemUseExtension) bool {
	t, ok := o.(directoryEntrySystemUseContinuation)
	return ok && t == d
}
func (d directoryEntrySystemUseContinuation) Signature() string {
	return suspExtensionContinuationArea
}
func (d directoryEntrySystemUseContinuation) Length() int {
	return 28
}
func (d directoryEntrySystemUseContinuation) Version() uint8 {
	return 1
}
func (d directoryEntrySystemUseContinuation) Data() []byte {
	b := make([]byte, 24)
	binary.LittleEndian.PutUint32(b[0:4], d.location)
	binary.BigEndian.PutUint32(b[4:8], d.location)
	binary.LittleEndian.PutUint32(b[8:12], d.offset)
	binary.BigEndian.PutUint32(b[12:16], d.offset)
	binary.LittleEndian.PutUint32(b[16:20], d.continuationLength)
	binary.BigEndian.PutUint32(b[20:24], d.continuationLength)
	return b
}
func (d directoryEntrySystemUseContinuation) Bytes() []byte {
	ret := make([]byte, 4)
	copy(ret[0:2], suspExtensionContinuationArea)
	ret[2] = uint8(d.Length())
	ret[3] = d.Version()
	ret = append(ret, d.Data()...)
	return ret
}
func (d directoryEntrySystemUseContinuation) Location() uint32 {
	return d.location
}
func (d directoryEntrySystemUseContinuation) Offset() uint32 {
	return d.offset
}
func (d directoryEntrySystemUseContinuation) ContinuationLength() uint32 {
	return d.continuationLength
}
func (d directoryEntrySystemUseContinuation) Continuable() bool {
	return false
}
func (d directoryEntrySystemUseContinuation) Merge([]directoryEntrySystemUseExtension) directoryEntrySystemUseExtension {
	return nil
}

func parseSystemUseExtensionContinuationArea(b []byte) (directoryEntrySystemUseExtension, error) {
	targetSize := 28
	if len(b) != targetSize {
		return nil, fmt.Errorf("CE extension must be %d bytes, but received %d", targetSize, len(b))
	}
	size := b[2]
	if size != uint8(targetSize) {
		return nil, fmt.Errorf("CE extension must be %d bytes, but byte 2 indicated %d", targetSize, size)
	}
	version := b[3]
	if version != 1 {
		return nil, fmt.Errorf("CE extension must be version 1, was %d", version)
	}
	location := binary.LittleEndian.Uint32(b[4:8])
	offset := binary.LittleEndian.Uint32(b[12:16])
	continuationLength := binary.LittleEndian.Uint32(b[20:24])
	return directoryEntrySystemUseContinuation{
		location:           location,
		offset:             offset,
		continuationLength: continuationLength,
	}, nil
}

// directoryEntrySystemUseExtensionSelector termination
type directoryEntrySystemUseExtensionSelector struct {
	sequence uint8
}

func (d directoryEntrySystemUseExtensionSelector) Equal(o directoryEntrySystemUseExtension) bool {
	t, ok := o.(directoryEntrySystemUseExtensionSelector)
	return ok && t == d
}
func (d directoryEntrySystemUseExtensionSelector) Signature() string {
	return suspExtensionExtensionsSelector
}
func (d directoryEntrySystemUseExtensionSelector) Length() int {
	return 5
}
func (d directoryEntrySystemUseExtensionSelector) Version() uint8 {
	return 1
}
func (d directoryEntrySystemUseExtensionSelector) Data() []byte {
	return []byte{d.sequence}
}
func (d directoryEntrySystemUseExtensionSelector) Bytes() []byte {
	ret := make([]byte, 4)
	copy(ret[0:2], suspExtensionExtensionsSelector)
	ret[2] = uint8(d.Length())
	ret[3] = d.Version()
	ret = append(ret, d.Data()...)
	return ret
}
func (d directoryEntrySystemUseExtensionSelector) Sequence() uint8 {
	return d.sequence
}
func (d directoryEntrySystemUseExtensionSelector) Continuable() bool {
	return false
}
func (d directoryEntrySystemUseExtensionSelector) Merge([]directoryEntrySystemUseExtension) directoryEntrySystemUseExtension {
	return nil
}

func parseSystemUseExtensionExtensionsSelector(b []byte) (directoryEntrySystemUseExtension, error) {
	targetSize := 5
	if len(b) != targetSize {
		return nil, fmt.Errorf("ES extension must be %d bytes, but received %d", targetSize, len(b))
	}
	size := b[2]
	if size != uint8(targetSize) {
		return nil, fmt.Errorf("ES extension must be %d bytes, but byte 2 indicated %d", targetSize, size)
	}
	version := b[3]
	if version != 1 {
		return nil, fmt.Errorf("ES extension must be version 1, was %d", version)
	}
	sequence := b[4]
	return directoryEntrySystemUseExtensionSelector{
		sequence: sequence,
	}, nil
}

// directoryEntrySystemUseExtensionReference termination
type directoryEntrySystemUseExtensionReference struct {
	id               string
	descriptor       string
	source           string
	extensionVersion uint8
}

func (d directoryEntrySystemUseExtensionReference) Equal(o directoryEntrySystemUseExtension) bool {
	t, ok := o.(directoryEntrySystemUseExtensionReference)
	return ok && t == d
}
func (d directoryEntrySystemUseExtensionReference) Signature() string {
	return suspExtensionExtensionsReference
}
func (d directoryEntrySystemUseExtensionReference) Length() int {
	return 8 + len(d.id) + len(d.descriptor) + len(d.source)
}
func (d directoryEntrySystemUseExtensionReference) Version() uint8 {
	return 1
}
func (d directoryEntrySystemUseExtensionReference) Data() []byte {
	ret := make([]byte, 4)
	ret[0] = uint8(len(d.id))
	ret[1] = uint8(len(d.descriptor))
	ret[2] = uint8(len(d.source))
	ret[3] = d.extensionVersion
	ret = append(ret, []byte(d.id)...)
	ret = append(ret, []byte(d.descriptor)...)
	ret = append(ret, []byte(d.source)...)
	return ret
}
func (d directoryEntrySystemUseExtensionReference) Bytes() []byte {
	ret := make([]byte, 4)
	copy(ret[0:2], suspExtensionExtensionsReference)
	ret[2] = uint8(d.Length())
	ret[3] = d.Version()
	ret = append(ret, d.Data()...)
	return ret
}
func (d directoryEntrySystemUseExtensionReference) ExtensionVersion() uint8 {
	return d.extensionVersion
}
func (d directoryEntrySystemUseExtensionReference) ExtensionID() string {
	return d.id
}
func (d directoryEntrySystemUseExtensionReference) ExtensionDescriptor() string {
	return d.descriptor
}
func (d directoryEntrySystemUseExtensionReference) ExtensionSource() string {
	return d.source
}
func (d directoryEntrySystemUseExtensionReference) Continuable() bool {
	return false
}
func (d directoryEntrySystemUseExtensionReference) Merge([]directoryEntrySystemUseExtension) directoryEntrySystemUseExtension {
	return nil
}

func parseSystemUseExtensionExtensionsReference(b []byte) (directoryEntrySystemUseExtension, error) {
	size := b[2]
	if len(b) != int(size) {
		return nil, fmt.Errorf("ER extension byte 2 indicated size of %d bytes, but received %d", size, len(b))
	}
	version := b[3]
	if version != 1 {
		return nil, fmt.Errorf("EE extension must be version 1, was %d", version)
	}
	idSize := int(b[4])
	descriptorSize := int(b[5])
	sourceSize := int(b[6])
	extVersion := b[7]
	idStart := 8
	descriptorStart := 8 + idSize
	sourceStart := 8 + idSize + descriptorSize
	id := string(b[idStart : idStart+idSize])
	descriptor := string(b[descriptorStart : descriptorStart+descriptorSize])
	source := string(b[sourceStart : sourceStart+sourceSize])
	return directoryEntrySystemUseExtensionReference{
		id:               id,
		descriptor:       descriptor,
		source:           source,
		extensionVersion: extVersion,
	}, nil
}

var suspExtensionParser = map[string]func([]byte) (directoryEntrySystemUseExtension, error){
	// base extensions
	suspExtensionSharingProtocolIndicator:  parseSystemUseExtensionSharingProtocolIndicator,
	suspExtensionSharingProtocolTerminator: parseSystemUseExtensionTerminator,
	suspExtensionExtensionsSelector:        parseSystemUseExtensionExtensionsSelector,
	suspExtensionExtensionsReference:       parseSystemUseExtensionExtensionsReference,
	suspExtensionPaddingField:              parseSystemUseExtensionPadding,
	suspExtensionContinuationArea:          parseSystemUseExtensionContinuationArea,
}

// parseDirectoryEntryExtensions parse system use extensions area of a directory entry
func parseDirectoryEntryExtensions(b []byte, handlers []suspExtension) ([]directoryEntrySystemUseExtension, error) {
	// and now for extensions in the system use area
	entries := make([]directoryEntrySystemUseExtension, 0)
	lastEntryBySignature := map[string]directoryEntrySystemUseExtension{}
	// minimum size of 4 bytes for any SUSP entry
	for i := 0; i+4 < len(b); {
		// get the indicator
		signature := string(b[i : i+2])
		size := b[i+2]
		suspBytes := b[i : i+int(size)]
		var (
			entry directoryEntrySystemUseExtension
			err   error
		)
		// if we have a parser, use it, else use the raw parser
		if parser, ok := suspExtensionParser[signature]; ok {
			entry, err = parser(suspBytes)
			if err != nil {
				return nil, fmt.Errorf("error parsing %s extension at byte position %d: %v", signature, i, err)
			}
		} else {
			// go through each extension we have and see if it can process
			for _, ext := range handlers {
				entry, err = ext.Process(signature, suspBytes)
				if err != nil && err != ErrSuspNoHandler {
					return nil, fmt.Errorf("SUSP Extension handler %s error processing extension %s: %v", ext.ID(), signature, err)
				}
				if err == nil {
					break
				}
			}
			if entry == nil {
				entry = parseSystemUseExtensionRaw(suspBytes)
			}
		}
		// we now have the entry - see if there was a prior continuable one
		if last, ok := lastEntryBySignature[signature]; ok {
			entry = last.Merge([]directoryEntrySystemUseExtension{entry})
			if entry.Continuable() {
				lastEntryBySignature[signature] = entry
			} else {
				delete(lastEntryBySignature, signature)
			}
		}

		entries = append(entries, entry)
		i += int(size)
	}
	return entries, nil
}
 07070100000320000081A4000000000000000000000001645E367C0000020B000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/iso9660/doc.go  // Package iso9660 provides utilities to interact with, manipulate and create an iso9660 filesystem on a block device or
// a disk image.
//
// Reference documentation
//
//	ISO9660 https://wiki.osdev.org/ISO_9660
//	ISO9660 / ECMA-119 http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-119.pdf
//	System Use Sharing Protocol http://cdrtools.sourceforge.net/private/RRIP/susp.ps
//	Rock Ridge http://cdrtools.sourceforge.net/private/RRIP/rrip.ps
//	El Torito https://wiki.osdev.org/El-Torito
package iso9660
 07070100000321000081A4000000000000000000000001645E367C000014B2000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/iso9660/eltorito.go package iso9660

import (
	"encoding/binary"
	"fmt"
	"io"
	"os"

	"github.com/diskfs/go-diskfs/partition/mbr"
	"github.com/diskfs/go-diskfs/util"
)

//nolint:deadcode,varcheck,unused // we need these references in the future
const (
	elToritoSector        = 0x11
	elToritoDefaultBlocks = 4
)

// Platform target booting system for a bootable iso
type Platform uint8

const (
	// BIOS classic PC-BIOS x86
	BIOS Platform = 0x0
	// PPC PowerPC
	PPC Platform = 0x1
	// Mac some Macintosh system,s
	Mac Platform = 0x2
	// EFI newer extensible firmware interface
	EFI Platform = 0xef
	// default name for a boot catalog
	elToritoDefaultCatalog   = "BOOT.CAT"
	elToritoDefaultCatalogRR = "boot.catalog"
)

// Emulation what emulation should be used for booting, normally none
type Emulation uint8

const (
	// NoEmulation do not do any emulation, the normal mode
	NoEmulation Emulation = 0
	// Floppy12Emulation emulate a 1.2 M floppy
	Floppy12Emulation Emulation = 1
	// Floppy144Emulation emulate a 1.44 M floppy
	Floppy144Emulation Emulation = 2
	// Floppy288Emulation emulate a 2.88 M floppy
	Floppy288Emulation Emulation = 3
	// HardDiskEmulation emulate a hard disk
	HardDiskEmulation Emulation = 4
)

// ElTorito boot structure for a disk
type ElTorito struct {
	// BootCatalog path to save the boot catalog in the file structure. Defaults to "/BOOT.CAT" in iso9660 and "/boot.catalog" in Rock Ridge
	BootCatalog string
	// HideBootCatalog if the boot catalog should be hidden in the file system. Defaults to false
	HideBootCatalog bool
	// Entries list of ElToritoEntry boot entires
	Entries []*ElToritoEntry
	// Platform supported platform
	Platform Platform
}

// ElToritoEntry single entry in an el torito boot catalog
type ElToritoEntry struct {
	Platform     Platform
	Emulation    Emulation
	BootFile     string
	HideBootFile bool
	LoadSegment  uint16
	// BootTable whether to insert a boot table into the entry, equivalent to genisoimage
	// option `-boot-info-table`. Unlike genisoimage, does not modify the file in the
	// filesystem, but inserts it on the fly.
	BootTable bool
	// SystemType type of system the partition is, accordinng to the MBR standard
	SystemType mbr.Type
	// LoadSize how many blocks of BootFile to load, equivalent to genisoimage option `-boot-load-size`
	LoadSize uint16
	size     uint16
	location uint32
}

// generateCatalog generate the el torito boot catalog file
func (et *ElTorito) generateCatalog() []byte {
	b := make([]byte, 0)
	b = append(b, et.validationEntry()...)
	for i, e := range et.Entries {
		// only subsequent entries have a header, not the first
		if i != 0 {
			b = append(b, e.headerBytes(i == len(et.Entries)-1, 1)...)
		}
		b = append(b, e.entryBytes()...)
	}
	return b
}

func (et *ElTorito) validationEntry() []byte {
	b := make([]byte, 0x20)
	b[0] = 1
	b[1] = byte(et.Platform)
	copy(b[4:0x1c], util.AppNameVersion)
	b[0x1e] = 0x55
	b[0x1f] = 0xaa
	// calculate checksum
	checksum := uint16(0x0)
	for i := 0; i < len(b); i += 2 {
		checksum += binary.LittleEndian.Uint16(b[i : i+2])
	}
	binary.LittleEndian.PutUint16(b[0x1c:0x1e], -checksum)
	return b
}

// toHeaderBytes provide header bytes
func (e *ElToritoEntry) headerBytes(last bool, entries uint16) []byte {
	b := make([]byte, 0x20)
	b[0] = 0x90
	if last {
		b[0] = 0x91
	}
	b[1] = byte(e.Platform)
	binary.LittleEndian.PutUint16(b[2:4], entries)
	// we do not use the section identifier for now
	return b
}

// toBytes convert ElToritoEntry to appropriate entry bytes
func (e *ElToritoEntry) entryBytes() []byte {
	blocks := e.LoadSize
	if blocks == 0 {
		blocks = e.size / 512
		if e.size%512 > 1 {
			blocks++
		}
	}
	b := make([]byte, 0x20)
	b[0] = 0x88
	b[1] = byte(e.Emulation)
	binary.LittleEndian.PutUint16(b[2:4], e.LoadSegment)
	// b[4] is system type, taken from byte 5 in the partition table in the boot image
	b[4] = byte(e.SystemType)
	// b[5] is unused and must be 0
	// b[6:8] is the number of emulated (512-byte) sectors, i.e. the size of the file
	binary.LittleEndian.PutUint16(b[6:8], blocks)
	// b[8:0xc] is the location of the boot image on disk, in disk (2048) sectors
	binary.LittleEndian.PutUint32(b[8:12], e.location)
	// b[0xc] is selection criteria type. We do not yet support it, so leave as 0.
	// b[0xd:] is vendor unique selectiomn criteria. We do not yet support it, so leave as 0.
	return b
}

// generateBootTable generate the el torito boot table for this entry
func (e *ElToritoEntry) generateBootTable(pvdSector uint32, p string) ([]byte, error) {
	b := make([]byte, 56)
	binary.LittleEndian.PutUint32(b[0:4], pvdSector)
	binary.LittleEndian.PutUint32(b[4:8], e.location)
	binary.LittleEndian.PutUint32(b[8:12], uint32(e.size))
	// Checksum - simply add up all 32-bit words beginning at byte position 64
	f, err := os.Open(p)
	if err != nil {
		return nil, fmt.Errorf("failed to open boot file for checksum reading %s: %v", p, err)
	}
	defer f.Close()

	var (
		checksum uint32
	)

	for offset := 64; offset <= int(e.size); offset += 4 {
		buf := make([]byte, 4)
		n, err := f.ReadAt(buf, int64(offset))
		if err != nil && err != io.EOF {
			return nil, err
		}
		if n == 0 {
			break
		}
		checksum += binary.LittleEndian.Uint32(buf)
		if err == io.EOF {
			break
		}
	}

	binary.LittleEndian.PutUint32(b[12:16], checksum)
	return b, nil
}
  07070100000322000081A4000000000000000000000001645E367C00000979000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/iso9660/file.go package iso9660

import (
	"fmt"
	"io"
	"os"
)

// File represents a single file in an iso9660 filesystem
//
//	it is NOT used when working in a workspace, where we just use the underlying OS
type File struct {
	*directoryEntry
	isReadWrite bool
	isAppend    bool
	offset      int64
	closed      bool
}

// Read reads up to len(b) bytes from the File.
// It returns the number of bytes read and any error encountered.
// At end of file, Read returns 0, io.EOF
// reads from the last known offset in the file from last read or write
// use Seek() to set at a particular point
func (fl *File) Read(b []byte) (int, error) {
	if fl == nil || fl.closed {
		return 0, os.ErrClosed
	}
	// we have the DirectoryEntry, so we can get the starting location and size
	// since iso9660 files are contiguous, we only need the starting location and size
	//   to get the entire file
	fs := fl.filesystem
	size := int(fl.size) - int(fl.offset)
	location := int(fl.location)
	maxRead := size
	file := fs.file

	// if there is nothing left to read, just return EOF
	if size <= 0 {
		return 0, io.EOF
	}

	// we stop when we hit the lesser of
	//   1- len(b)
	//   2- file end
	if len(b) < maxRead {
		maxRead = len(b)
	}

	// just read the requested number of bytes and change our offset
	_, err := file.ReadAt(b[0:maxRead], int64(location)*fs.blocksize+fl.offset)
	if err != nil && err != io.EOF {
		return 0, err
	}

	fl.offset += int64(maxRead)
	var retErr error
	if fl.offset >= int64(fl.size) {
		retErr = io.EOF
	}
	return maxRead, retErr
}

// Write writes len(b) bytes to the File.
//
//	you cannot write to an iso, so this returns an error
func (fl *File) Write(p []byte) (int, error) {
	return 0, fmt.Errorf("cannot write to a read-only iso filesystem")
}

// Seek set the offset to a particular point in the file
func (fl *File) Seek(offset int64, whence int) (int64, error) {
	if fl == nil || fl.closed {
		return 0, os.ErrClosed
	}
	newOffset := int64(0)
	switch whence {
	case io.SeekStart:
		newOffset = offset
	case io.SeekEnd:
		newOffset = int64(fl.size) + offset
	case io.SeekCurrent:
		newOffset = fl.offset + offset
	}
	if newOffset < 0 {
		return fl.offset, fmt.Errorf("cannot set offset %d before start of file", offset)
	}
	fl.offset = newOffset
	return fl.offset, nil
}

func (fl *File) Location() uint32 {
	return fl.location
}

// Close close the file
func (fl *File) Close() error {
	fl.closed = true
	return nil
}
   07070100000323000081A4000000000000000000000001645E367C00006D61000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/iso9660/finalize.go package iso9660

import (
	"fmt"
	"io"
	"os"
	"path"
	"path/filepath"
	"regexp"
	"sort"
	"strings"
	"time"

	"github.com/diskfs/go-diskfs/util"
)

const (
	dataStartSector         = 16
	defaultVolumeIdentifier = "ISOIMAGE"
)

// FinalizeOptions options to pass to finalize
type FinalizeOptions struct {
	// RockRidge enable Rock Ridge extensions
	RockRidge bool
	// DeepDirectories allow directories deeper than 8
	DeepDirectories bool
	// ElTorito slice of el torito entry configs
	ElTorito *ElTorito
	// VolumeIdentifier custom volume name, defaults to "ISOIMAGE"
	VolumeIdentifier string
}

// finalizeFileInfo is a file info useful for finalization
// fulfills os.FileInfo
//
//	Name() string       // base name of the file
//	Size() int64        // length in bytes for regular files; system-dependent for others
//	Mode() FileMode     // file mode bits
//	ModTime() time.Time // modification time
//	IsDir() bool        // abbreviation for Mode().IsDir()
//	Sys() interface{}   // underlying data source (can return nil)
//
//nolint:structcheck // keep unused members so that we can know their references
type finalizeFileInfo struct {
	path               string
	target             string
	shortname          string
	extension          string
	location           uint32
	blocks             uint32 // blocks for the directory itself and its entries
	continuationBlocks uint32 // blocks for CE entries
	recordSize         uint8
	depth              int
	name               string
	size               int64
	mode               os.FileMode
	modTime            time.Time
	isDir              bool
	isRoot             bool
	bytes              [][]byte
	parent             *finalizeFileInfo
	children           []*finalizeFileInfo
	trueParent         *finalizeFileInfo
	trueChild          *finalizeFileInfo
	elToritoEntry      *ElToritoEntry
	content            []byte
}

func (fi *finalizeFileInfo) Name() string {
	// we are using plain iso9660 (without extensions), so just shortname possibly with extension
	ret := fi.shortname
	if !fi.isDir {
		ret = fmt.Sprintf("%s.%s;1", fi.shortname, fi.extension)
	}
	// shortname already is ucased
	return ret
}
func (fi *finalizeFileInfo) Size() int64 {
	return fi.size
}
func (fi *finalizeFileInfo) Mode() os.FileMode {
	return fi.mode
}
func (fi *finalizeFileInfo) ModTime() time.Time {
	return fi.modTime
}
func (fi *finalizeFileInfo) IsDir() bool {
	return fi.isDir
}
func (fi *finalizeFileInfo) Sys() interface{} {
	return nil
}

func (fi *finalizeFileInfo) updateDepth(depth int) {
	fi.depth = depth
	if fi.isDir {
		for _, e := range fi.children {
			e.updateDepth(depth + 1)
		}
	}
}

func (fi *finalizeFileInfo) toDirectoryEntry(fs *FileSystem, isSelf, isParent bool) (*directoryEntry, error) {
	de := &directoryEntry{
		extAttrSize:              0,
		location:                 fi.location,
		size:                     uint32(fi.Size()),
		creation:                 fi.ModTime(),
		isHidden:                 false,
		isSubdirectory:           fi.IsDir(),
		isAssociated:             false,
		hasExtendedAttrs:         false,
		hasOwnerGroupPermissions: false,
		hasMoreEntries:           false,
		isSelf:                   isSelf,
		isParent:                 isParent,
		volumeSequence:           1,
		filesystem:               fs,
		// we keep the full filename until after processing
		filename: fi.Name(),
	}
	// if it is root, and we have susp enabled, add the necessary entries
	if fs.suspEnabled {
		if fi.isRoot && isSelf {
			de.extensions = append(de.extensions, directoryEntrySystemUseExtensionSharingProtocolIndicator{skipBytes: 0})
		}
		// add appropriate PX, TF, SL, NM extensions
		for _, e := range fs.suspExtensions {
			ext, err := e.GetFileExtensions(path.Join(fs.workspace, fi.path), isSelf, isParent)
			if err != nil {
				return nil, fmt.Errorf("error getting extensions for %s at path %s: %v", e.ID(), fi.path, err)
			}
			ext2, err := e.GetFinalizeExtensions(fi)
			if err != nil {
				return nil, fmt.Errorf("error getting finalize extensions for %s at path %s: %v", e.ID(), fi.path, err)
			}
			ext = append(ext, ext2...)
			de.extensions = append(de.extensions, ext...)
		}

		if fi.isRoot && isSelf {
			for _, e := range fs.suspExtensions {
				de.extensions = append(de.extensions, directoryEntrySystemUseExtensionReference{id: e.ID(), descriptor: e.Descriptor(), source: e.Source(), extensionVersion: e.Version()})
			}
		}
	}
	return de, nil
}
func (fi *finalizeFileInfo) toDirectory(fs *FileSystem) (*Directory, error) {
	// also need to add self and parent to it
	var (
		self, parent, dirEntry *directoryEntry
		err                    error
	)
	if !fi.IsDir() {
		return nil, fmt.Errorf("cannot convert a file entry to a directtory")
	}
	self, err = fi.toDirectoryEntry(fs, true, false)
	if err != nil {
		return nil, fmt.Errorf("could not convert self entry %s to dirEntry: %v", fi.path, err)
	}

	// if we have no parent, we are the root entry
	// we also need to put in the SUSP if it is enabled
	parentEntry := fi.parent
	if fi.isRoot {
		parentEntry = fi
	}
	parent, err = parentEntry.toDirectoryEntry(fs, false, true)
	if err != nil {
		return nil, fmt.Errorf("could not convert parent entry %s to dirEntry: %v", fi.parent.path, err)
	}

	entries := []*directoryEntry{self, parent}
	for _, child := range fi.children {
		dirEntry, err = child.toDirectoryEntry(fs, false, false)
		if err != nil {
			return nil, fmt.Errorf("could not convert child entry %s to dirEntry: %v", child.path, err)
		}
		entries = append(entries, dirEntry)
	}
	d := &Directory{
		directoryEntry: *self,
		entries:        entries,
	}
	return d, nil
}

// calculate the size of a directory entry single record
func (fi *finalizeFileInfo) calculateRecordSize(fs *FileSystem, isSelf, isParent bool) (dirEntrySize, continuationBlocksSize int, err error) {
	// we do not actually need the the continuation blocks to calculate size, just length, so use an empty slice
	extTmpBlocks := make([]uint32, 100)
	dirEntry, err := fi.toDirectoryEntry(fs, isSelf, isParent)
	if err != nil {
		return 0, 0, fmt.Errorf("could not convert to dirEntry: %v", err)
	}
	dirBytes, err := dirEntry.toBytes(false, extTmpBlocks)
	if err != nil {
		return 0, 0, fmt.Errorf("could not convert dirEntry to bytes: %v", err)
	}
	// first entry is the bytes to store in the directory
	// rest are continuation blocks
	return len(dirBytes[0]), len(dirBytes) - 1, nil
}

// calculate the size of a directory, similar to a file size
func (fi *finalizeFileInfo) calculateDirectorySize(fs *FileSystem) (dirEntrySize, continuationBlocksSize int, err error) {
	var (
		recSize, recCE int
	)
	if !fi.IsDir() {
		return 0, 0, fmt.Errorf("cannot convert a file entry to a directtory")
	}
	recSize, recCE, err = fi.calculateRecordSize(fs, true, false)
	if err != nil {
		return 0, 0, fmt.Errorf("could not calculate self entry size %s: %v", fi.path, err)
	}
	dirEntrySize += recSize
	continuationBlocksSize += recCE

	recSize, recCE, err = fi.calculateRecordSize(fs, false, true)
	if err != nil {
		return 0, 0, fmt.Errorf("could not calculate parent entry size %s: %v", fi.path, err)
	}
	dirEntrySize += recSize
	continuationBlocksSize += recCE

	for _, e := range fi.children {
		// get size of data and CE blocks
		recSize, recCE, err = e.calculateRecordSize(fs, false, false)
		if err != nil {
			return 0, 0, fmt.Errorf("could not calculate child %s entry size %s: %v", e.path, fi.path, err)
		}
		// do not go over a block boundary; pad if necessary
		newSize := dirEntrySize + recSize
		blocksize := int(fs.blocksize)
		left := blocksize - dirEntrySize%blocksize
		if left != 0 && newSize/blocksize > dirEntrySize/blocksize {
			dirEntrySize += left
		}
		continuationBlocksSize += recCE
		dirEntrySize += recSize
	}
	return dirEntrySize, continuationBlocksSize, nil
}

// add depth to all children
func (fi *finalizeFileInfo) addProperties(depth int) {
	fi.depth = depth
	for _, e := range fi.children {
		e.parent = fi
		e.addProperties(depth + 1)
	}
}

// sort all of the directory children recursively - this is for ordering into blocks
func (fi *finalizeFileInfo) collapseAndSortChildren() (dirs, files []*finalizeFileInfo) {
	tmpDirs := make([]*finalizeFileInfo, 0)
	tmpFiles := make([]*finalizeFileInfo, 0)
	// first extract all of the directories
	for _, e := range fi.children {
		if e.IsDir() {
			tmpDirs = append(tmpDirs, e)
		} else {
			tmpFiles = append(tmpFiles, e)
		}
	}

	// next sort them
	sort.Slice(tmpDirs, func(i, j int) bool {
		// just sort by filename; as good as anything else
		return tmpDirs[i].Name() < tmpDirs[j].Name()
	})
	sort.Slice(tmpFiles, func(i, j int) bool {
		// just sort by filename; as good as anything else
		return tmpFiles[i].Name() < tmpFiles[j].Name()
	})
	// finally add in the children going down
	dirs = make([]*finalizeFileInfo, 0)
	files = tmpFiles
	for _, e := range tmpDirs {
		dirs = append(dirs, e)
		// now get any children
		d, f := e.collapseAndSortChildren()
		dirs = append(dirs, d...)
		files = append(files, f...)
	}
	return dirs, files
}

func (fi *finalizeFileInfo) findEntry(p string) (*finalizeFileInfo, error) {
	// break path down into parts and levels
	var (
		target *finalizeFileInfo
		err    error
	)
	parts := splitPath(p)
	if len(parts) == 0 || p == "." {
		target = fi
	} else {
		current := parts[0]
		// read the directory bytes
		for _, e := range fi.children {
			// do we have an alternate name?
			// only care if not self or parent entry
			checkFilename := e.name
			if checkFilename == current {
				if len(parts) > 1 {
					target, err = e.findEntry(path.Join(parts[1:]...))
					if err != nil {
						return nil, fmt.Errorf("could not get entry: %v", err)
					}
				} else {
					// this is the final one, we found it, keep it
					target = e
				}
				break
			}
		}
	}
	return target, nil
}
func (fi *finalizeFileInfo) removeChild(p string) *finalizeFileInfo {
	var removed *finalizeFileInfo
	children := make([]*finalizeFileInfo, 0)
	for _, e := range fi.children {
		if e.name != p {
			children = append(children, e)
		} else {
			removed = e
		}
	}
	fi.children = children
	return removed
}
func (fi *finalizeFileInfo) addChild(entry *finalizeFileInfo) {
	fi.children = append(fi.children, entry)
}

// Finalize finalize a read-only filesystem by writing it out to a read-only format
//
//nolint:gocyclo // this finalize function is complex and needs to be. We might be better off refactoring it to multiple functions, but it does not buy all that much.
func (fs *FileSystem) Finalize(options FinalizeOptions) error {
	if fs.workspace == "" {
		return fmt.Errorf("cannot finalize an already finalized filesystem")
	}

	// did we ask for susp?
	if options.RockRidge {
		fs.suspEnabled = true
		fs.suspExtensions = append(fs.suspExtensions, getRockRidgeExtension(rockRidge112))
	}

	/*
		There is nothing in the iso9660 spec about the order of directories and files,
		other than that they must be accessible in the location specified in directory entry and/or path table
		However, most implementations seem to it as follows:
		- each directory follows its parent
		- data (i.e. file) sectors in each directory are immediately after its directory and immediately before the next sibling directory to its parent

		to keep it simple, we will follow what xorriso/mkisofs on linux does, in the following order:
		- volume descriptor set, beginning at sector 16
		- root directory entry
		- all other directory entries, sorted alphabetically, depth first
		- L path table
		- M path table
		- data sectors for files, sorted alphabetically, matching order of directories

		this is where we build our filesystem
		 1- blank out sectors 0-15 for system use
		 2- skip sectors 16-17 for PVD and terminator (fill later)
		 3- calculate how many sectors required for root directory
		 4- calculate each child directory, working our way down, including number of sectors and location
		 5- write path tables (L & M)
		 6- write files for root directory
		 7- write root directory entry into its sector (18)
		 8- repeat steps 6&7 for all other directories
		 9- write PVD
		 10- write volume descriptor set terminator
	*/

	f := fs.file
	blocksize := int(fs.blocksize)

	// 1- blank out sectors 0-15
	b := make([]byte, dataStartSector*fs.blocksize)
	n, err := f.WriteAt(b, 0)
	if err != nil {
		return fmt.Errorf("could not write blank system area: %v", err)
	}
	if n != len(b) {
		return fmt.Errorf("only wrote %d bytes instead of expected %d to system area", n, len(b))
	}

	// 3- build out file tree
	fileList, dirList, err := walkTree(fs.Workspace())
	if err != nil {
		return fmt.Errorf("error walking tree: %v", err)
	}

	// starting point
	root := dirList["."]
	root.addProperties(1)

	// if we need to relocate directories, must do them here, before finalizing order and sizes
	// do not bother if enabled DeepDirectories, i.e. non-ISO9660 compliant
	if !options.DeepDirectories {
		if fs.suspEnabled {
			var handler suspExtension
			for _, e := range fs.suspExtensions {
				if e.Relocatable() {
					handler = e
					break
				}
			}
			var relocateFiles []*finalizeFileInfo
			relocateFiles, dirList, err = handler.Relocate(dirList)
			if err != nil {
				return fmt.Errorf("unable to use extension %s to relocate directories from depth > 8: %v", handler.ID(), err)
			}
			fileList = append(fileList, relocateFiles...)
		}
		// check if there are any deeper than 9
		for _, e := range dirList {
			if e.depth > 8 {
				return fmt.Errorf("directory %s deeper than 8 deep and DeepDirectories override not enabled", e.path)
			}
		}
	}

	// convert sizes to required blocks for files
	for _, e := range fileList {
		e.blocks = calculateBlocks(e.size, fs.blocksize)
	}

	// we now have list of all of the files and directories and their properties, as well as children of every directory
	// store them in a flat sorted slice, beginning with root so we can write them out in order to blocks after
	dirs := make([]*finalizeFileInfo, 0, 20)
	dirs = append(dirs, root)
	subdirs, files := root.collapseAndSortChildren()
	dirs = append(dirs, subdirs...)

	// calculate the sizes and locations of the directories from the flat list and assign blocks
	rootLocation := uint32(dataStartSector + 2)
	// if el torito was enabled, use one sector for boot volume entry
	if options.ElTorito != nil {
		rootLocation++
	}
	location := rootLocation

	var (
		catEntry *finalizeFileInfo
		bootcat  []byte
	)

	if options.ElTorito != nil {
		bootcat = options.ElTorito.generateCatalog()
		// figure out where to save it on disk
		catname := options.ElTorito.BootCatalog
		switch {
		case catname == "" && options.RockRidge:
			catname = elToritoDefaultCatalogRR
		case catname == "":
			catname = elToritoDefaultCatalog
		}
		shortname, extension := calculateShortnameExtension(path.Base(catname))
		// break down the catalog basename from the parent dir
		catSize := int64(len(bootcat))
		catEntry = &finalizeFileInfo{
			content:   bootcat,
			size:      catSize,
			path:      catname,
			name:      path.Base(catname),
			shortname: shortname,
			extension: extension,
			blocks:    calculateBlocks(catSize, fs.blocksize),
		}
		// make it the first file
		files = append([]*finalizeFileInfo{catEntry}, files...)

		// if we were not told to hide the catalog, add it to its parent
		if !options.ElTorito.HideBootCatalog {
			var parent *finalizeFileInfo
			parent, err = root.findEntry(path.Dir(catname))
			if err != nil {
				return fmt.Errorf("error finding parent for boot catalog %s: %v", catname, err)
			}
			parent.addChild(catEntry)
		}
		for _, e := range options.ElTorito.Entries {
			var parent, child *finalizeFileInfo
			parent, err = root.findEntry(path.Dir(e.BootFile))
			if err != nil {
				return fmt.Errorf("error finding parent for boot image file %s: %v", e.BootFile, err)
			}
			// did we ask to hide any image files?
			if e.HideBootFile {
				child = parent.removeChild(path.Base(e.BootFile))
			} else {
				child, err = parent.findEntry(path.Base(e.BootFile))
				if err != nil {
					return fmt.Errorf("unable to find image child %s: %v", e.BootFile, err)
				}
			}
			// save the child so we can add location late
			e.size = uint16(child.size)
			child.elToritoEntry = e
		}
	}

	var size, ceBlocks int
	for _, dir := range dirs {
		dir.location = location
		size, ceBlocks, err = dir.calculateDirectorySize(fs)
		if err != nil {
			return fmt.Errorf("unable to calculate size of directory for %s: %v", dir.path, err)
		}
		dir.size = int64(size)
		dir.blocks = calculateBlocks(int64(size), int64(blocksize))
		dir.continuationBlocks = uint32(ceBlocks)
		location += dir.blocks + dir.continuationBlocks
	}

	// we now have sorted list of block order, with sizes and number of blocks on each
	// next assign the blocks to each, and then we can enter the data in the directory entries

	// create the pathtables (L & M)
	// with the list of directories, we can make a path table
	pathTable := createPathTable(dirs)
	// how big is the path table? we will take LSB for now, because they are the same size
	pathTableLBytes := pathTable.toLBytes()
	pathTableMBytes := pathTable.toMBytes()
	pathTableSize := len(pathTableLBytes)
	pathTableBlocks := uint32(pathTableSize / blocksize)
	if pathTableSize%blocksize > 0 {
		pathTableBlocks++
	}
	// we do not do optional path tables yet
	pathTableLLocation := location
	location += pathTableBlocks
	pathTableMLocation := location
	location += pathTableBlocks

	// if we asked for ElTorito, need to generate the boot catalog and save it
	volIdentifier := defaultVolumeIdentifier
	if options.VolumeIdentifier != "" {
		volIdentifier = options.VolumeIdentifier
	}

	for _, e := range files {
		e.location = location
		location += e.blocks
		if e.elToritoEntry != nil {
			e.elToritoEntry.location = e.location
		}
	}

	// now that we have all of the files with their locations, we can rebuild the boot catalog using the correct data
	if catEntry != nil {
		bootcat = options.ElTorito.generateCatalog()
		catEntry.content = bootcat
	}

	// now we can write each one out - dirs first then files
	for _, e := range dirs {
		writeAt := int64(e.location) * int64(blocksize)
		var d *Directory
		d, err = e.toDirectory(fs)
		if err != nil {
			return fmt.Errorf("unable to convert entry to directory: %v", err)
		}
		// Directory.toBytes() always returns whole blocks
		// get the continuation entry locations
		ceLocations := make([]uint32, 0)
		ceLocationStart := e.location + e.blocks
		for i := 0; i < int(e.continuationBlocks); i++ {
			ceLocations = append(ceLocations, ceLocationStart+uint32(i))
		}
		var p [][]byte
		p, err = d.entriesToBytes(ceLocations)
		if err != nil {
			return fmt.Errorf("could not convert directory to bytes: %v", err)
		}
		for i, e := range p {
			_, _ = f.WriteAt(e, writeAt+int64(i*blocksize))
		}
	}

	// now write out the path tables, L & M
	writeAt := int64(pathTableLLocation) * int64(blocksize)
	_, _ = f.WriteAt(pathTableLBytes, writeAt)
	writeAt = int64(pathTableMLocation) * int64(blocksize)
	_, _ = f.WriteAt(pathTableMBytes, writeAt)

	var closeFiles []*os.File
	defer func() {
		for _, f := range closeFiles {
			f.Close()
		}
	}()
	for _, e := range files {
		var (
			from   *os.File
			copied int
		)
		writeAt := int64(e.location) * int64(blocksize)
		if e.content == nil {
			// for file, just copy the data across
			from, err = os.Open(path.Join(fs.workspace, e.path))
			if err != nil {
				return fmt.Errorf("failed to open file for reading %s: %v", e.path, err)
			}
			closeFiles = append(closeFiles, from)
			if e.elToritoEntry != nil && e.elToritoEntry.BootTable {
				// copy first 8 bytes, then insert the El Torito Boot Information Table, then the rest
				var count int

				// first 8 bytes
				count, err = copyFileData(from, f, 0, writeAt, 8)
				if err != nil {
					return fmt.Errorf("failed to copy first bytes 0-8 of boot file to disk %s: %v", e.path, err)
				}
				copied += count
				// insert El Torito Boot Information Table
				bootTable, err := e.elToritoEntry.generateBootTable(dataStartSector, path.Join(fs.workspace, e.path))
				if err != nil {
					return fmt.Errorf("failed to generate boot table for %s: %v", e.path, err)
				}
				count, err = f.WriteAt(bootTable, writeAt+8)
				if err != nil {
					return fmt.Errorf("failed to write 56 byte boot table to disk %s: %v", e.path, err)
				}
				copied += count
				// remainder of file
				count, err = copyFileData(from, f, 64, writeAt+64, 0)
				if err != nil {
					return fmt.Errorf("failed to copy bytes 64 to end of boot file to disk %s: %v", e.path, err)
				}
				copied += count
			} else {
				copied, err = copyFileData(from, f, 0, writeAt, 0)
				if err != nil {
					return fmt.Errorf("failed to copy file to disk %s: %v", e.path, err)
				}
			}
			if copied != int(e.Size()) {
				return fmt.Errorf("error copying file %s to disk, copied %d bytes, expected %d", e.path, copied, e.Size())
			}
		} else {
			copied = len(e.content)
			if _, err = f.WriteAt(e.content, writeAt); err != nil {
				return fmt.Errorf("failed to write content of %s to disk: %v", e.path, err)
			}
		}
		// fill in
		left := blocksize - (copied % blocksize)
		if left > 0 {
			b2 := make([]byte, left)
			_, _ = f.WriteAt(b2, writeAt+int64(copied))
		}
	}

	totalSize := location
	location = dataStartSector
	// create and write the primary volume descriptor, supplementary and boot, and volume descriptor set terminator
	now := time.Now()
	rootDE, err := root.toDirectoryEntry(fs, true, false)
	if err != nil {
		return fmt.Errorf("could not convert root entry for primary volume descriptor to dirEntry: %v", err)
	}

	pvd := &primaryVolumeDescriptor{
		systemIdentifier:           "",
		volumeIdentifier:           volIdentifier,
		volumeSize:                 totalSize,
		setSize:                    1,
		sequenceNumber:             1,
		blocksize:                  uint16(fs.blocksize),
		pathTableSize:              uint32(pathTableSize),
		pathTableLLocation:         pathTableLLocation,
		pathTableLOptionalLocation: 0,
		pathTableMLocation:         pathTableMLocation,
		pathTableMOptionalLocation: 0,
		volumeSetIdentifier:        "",
		publisherIdentifier:        "",
		preparerIdentifier:         util.AppNameVersion,
		applicationIdentifier:      "",
		copyrightFile:              "", // 37 bytes
		abstractFile:               "", // 37 bytes
		bibliographicFile:          "", // 37 bytes
		creation:                   now,
		modification:               now,
		expiration:                 now,
		effective:                  now,
		rootDirectoryEntry:         rootDE,
	}
	b = pvd.toBytes()
	_, _ = f.WriteAt(b, int64(location)*int64(blocksize))
	location++

	// do we have a boot sector?
	if options.ElTorito != nil {
		bvd := &bootVolumeDescriptor{location: catEntry.location}
		b = bvd.toBytes()
		_, _ = f.WriteAt(b, int64(location)*int64(blocksize))
		location++
	}
	terminator := &terminatorVolumeDescriptor{}
	b = terminator.toBytes()
	_, _ = f.WriteAt(b, int64(location)*int64(blocksize))

	_ = os.RemoveAll(fs.workspace)

	// finish by setting as finalized
	fs.workspace = ""
	return nil
}

// copyFileData copy data from file `from` at offset `fromOffset` to file `to` at offset `toOffset`.
// Copies `size` bytes. If `size` is 0, copies as many bytes as it can.
func copyFileData(from, to util.File, fromOffset, toOffset int64, size int) (int, error) {
	buf := make([]byte, 2048)
	copied := 0
	for {
		n, err := from.ReadAt(buf, fromOffset+int64(copied))
		if err != nil && err != io.EOF {
			return copied, err
		}

		if size > 0 && n > (size-copied) {
			n = size - copied
		}

		if n == 0 {
			break
		}

		if _, err := to.WriteAt(buf[:n], toOffset+int64(copied)); err != nil {
			return copied, err
		}
		copied += n
	}
	return copied, nil
}

// sort path table entries
func sortFinalizeFileInfoPathTable(left, right *finalizeFileInfo) bool {
	switch {
	case left.parent == right.parent:
		// same parents = same depth, just sort on name
		lname := left.Name()
		rname := right.Name()
		maxLen := maxInt(len(lname), len(rname))
		format := fmt.Sprintf("%%-%ds", maxLen)
		return fmt.Sprintf(format, lname) < fmt.Sprintf(format, rname)
	case left.depth < right.depth:
		// different parents with different depth, lower first
		return true
	case right.depth > left.depth:
		return false
	case left.parent == nil && right.parent != nil:
		return true
	case left.parent != nil && right.parent == nil:
		return false
	default:
		// same depth, different parents, it depends on the sort order of the parents
		return sortFinalizeFileInfoPathTable(left.parent, right.parent)
	}
}

// create a path table from a slice of *finalizeFileInfo that are directories
func createPathTable(fi []*finalizeFileInfo) *pathTable {
	// copy so we do not modify the original
	fs := make([]*finalizeFileInfo, len(fi))
	copy(fs, fi)
	// sort via the rules
	sort.Slice(fs, func(i, j int) bool {
		return sortFinalizeFileInfoPathTable(fs[i], fs[j])
	})
	indexMap := make(map[*finalizeFileInfo]int)
	// now that it is sorted, create the ordered path table entries
	entries := make([]*pathTableEntry, 0)
	for i, e := range fs {
		name := e.Name()
		nameSize := len(name)
		size := 8 + uint16(nameSize)
		if nameSize%2 != 0 {
			size++
		}
		ownIndex := i + 1
		indexMap[e] = ownIndex
		// root just points to itself
		parentIndex := ownIndex
		if ip, ok := indexMap[e.parent]; ok {
			parentIndex = ip
		}
		pte := &pathTableEntry{
			nameSize:      uint8(nameSize),
			size:          size,
			extAttrLength: 0,
			location:      e.location,
			parentIndex:   uint16(parentIndex),
			dirname:       name,
		}
		entries = append(entries, pte)
	}
	return &pathTable{
		records: entries,
	}
}

func walkTree(workspace string) ([]*finalizeFileInfo, map[string]*finalizeFileInfo, error) {
	cwd, err := os.Getwd()
	if err != nil {
		return nil, nil, fmt.Errorf("could not get pwd: %v", err)
	}
	// make everything relative to the workspace
	_ = os.Chdir(workspace)
	dirList := make(map[string]*finalizeFileInfo)
	fileList := make([]*finalizeFileInfo, 0)
	var entry *finalizeFileInfo
	err = filepath.Walk(".", func(fp string, fi os.FileInfo, err error) error {
		if err != nil {
			return fmt.Errorf("error walking path %s: %v", fp, err)
		}
		isRoot := fp == "."
		name := fi.Name()
		shortname, extension := calculateShortnameExtension(name)

		if isRoot {
			name = string([]byte{0x00})
			shortname = name
		}
		entry = &finalizeFileInfo{path: fp, name: name, isDir: fi.IsDir(), isRoot: isRoot, modTime: fi.ModTime(), mode: fi.Mode(), size: fi.Size(), shortname: shortname}

		// we will have to save it as its parent
		parentDir := filepath.Dir(fp)
		parentDirInfo := dirList[parentDir]

		if fi.IsDir() {
			entry.children = make([]*finalizeFileInfo, 0, 20)
			dirList[fp] = entry
			if !isRoot {
				parentDirInfo.children = append(parentDirInfo.children, entry)
				dirList[parentDir] = parentDirInfo
			}
		} else {
			// calculate blocks
			entry.size = fi.Size()
			entry.extension = extension
			parentDirInfo.children = append(parentDirInfo.children, entry)
			dirList[parentDir] = parentDirInfo
			fileList = append(fileList, entry)
		}
		return nil
	})
	if err != nil {
		return nil, nil, err
	}
	// reset the workspace
	_ = os.Chdir(cwd)
	return fileList, dirList, nil
}

func calculateBlocks(size, blocksize int64) uint32 {
	blocks := uint32(size / blocksize)
	// add one for partial
	if size%blocksize > 0 {
		blocks++
	}
	return blocks
}

func calculateShortnameExtension(name string) (shortname, extension string) {
	parts := strings.SplitN(name, ".", 2)
	shortname = parts[0]
	if len(parts) > 1 {
		extension = parts[1]
	}
	// shortname and extension must be upper-case
	shortname = strings.ToUpper(shortname)
	extension = strings.ToUpper(extension)

	// replace illegal characters in shortname and extension with _
	re := regexp.MustCompile("[^A-Z0-9_]")
	shortname = re.ReplaceAllString(shortname, "_")
	extension = re.ReplaceAllString(extension, "_")

	return shortname, extension
}
   07070100000324000081A4000000000000000000000001645E367C00004217000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/iso9660/iso9660.go  package iso9660

import (
	"encoding/binary"
	"fmt"
	"os"
	"path"

	"github.com/diskfs/go-diskfs/filesystem"
	"github.com/diskfs/go-diskfs/util"
)

const (
	volumeDescriptorSize int64 = 2 * KB  // each volume descriptor is 2KB
	systemAreaSize       int64 = 32 * KB // 32KB system area size
	defaultSectorSize    int64 = 2 * KB
	// MaxBlocks maximum number of blocks allowed in an iso9660 filesystem
	MaxBlocks int64 = 4.294967296e+09 // 2^32
)

// FileSystem implements the FileSystem interface
type FileSystem struct {
	workspace      string
	size           int64
	start          int64
	file           util.File
	blocksize      int64
	volumes        volumeDescriptors
	pathTable      *pathTable
	rootDir        *directoryEntry
	suspEnabled    bool  // is the SUSP in use?
	suspSkip       uint8 // how many bytes to skip in each directory record
	suspExtensions []suspExtension
}

// Equal compare if two filesystems are equal
func (fs *FileSystem) Equal(a *FileSystem) bool {
	localMatch := fs.file == a.file && fs.size == a.size
	vdMatch := fs.volumes.equal(&a.volumes)
	return localMatch && vdMatch
}

// Workspace get the workspace path
func (fs *FileSystem) Workspace() string {
	return fs.workspace
}

// Create creates an ISO9660 filesystem in a given directory
//
// requires the util.File where to create the filesystem, size is the size of the filesystem in bytes,
// start is how far in bytes from the beginning of the util.File to create the filesystem,
// and blocksize is is the logical blocksize to use for creating the filesystem
//
// note that you are *not* required to create the filesystem on the entire disk. You could have a disk of size
// 20GB, and create a small filesystem of size 50MB that begins 2GB into the disk.
// This is extremely useful for creating filesystems on disk partitions.
//
// Note, however, that it is much easier to do this using the higher-level APIs at github.com/diskfs/go-diskfs
// which allow you to work directly with partitions, rather than having to calculate (and hopefully not make any errors)
// where a partition starts and ends.
//
// If the provided blocksize is 0, it will use the default of 2 KB.
func Create(f util.File, size, start, blocksize int64, workspace string) (*FileSystem, error) {
	if blocksize == 0 {
		blocksize = defaultSectorSize
	}
	// make sure it is an allowed blocksize
	if err := validateBlocksize(blocksize); err != nil {
		return nil, err
	}
	// size of 0 means to use defaults
	if size != 0 && size > MaxBlocks*blocksize {
		return nil, fmt.Errorf("requested size is larger than maximum allowed ISO9660 size of %d blocks", MaxBlocks)
	}
	// at bare minimum, it must have enough space for the system area, one volume descriptor, one volume decriptor set terminator, and one block of data
	if size != 0 && size < systemAreaSize+2*volumeDescriptorSize+blocksize {
		return nil, fmt.Errorf("requested size is smaller than minimum allowed ISO9660 size: system area (%d), one volume descriptor (%d), one volume descriptor set terminator (%d), and one block (%d)", systemAreaSize, volumeDescriptorSize, volumeDescriptorSize, blocksize)
	}

	var workdir string
	if workspace != "" {
		info, err := os.Stat(workspace)
		if err != nil {
			return nil, fmt.Errorf("could not stat working directory: %v", err)
		}
		if !info.IsDir() {
			return nil, fmt.Errorf("provided workspace is not a directory: %s", workspace)
		}
		workdir = workspace
	} else {
		// create a temporary working area where we can create the filesystem.
		//  It is only on `Finalize()` that we write it out to the actual disk file
		var err error
		workdir, err = os.MkdirTemp("", "diskfs_iso")
		if err != nil {
			return nil, fmt.Errorf("could not create working directory: %v", err)
		}
	}

	// create root directory
	// there is nothing in there
	return &FileSystem{
		workspace: workdir,
		start:     start,
		size:      size,
		file:      f,
		volumes:   volumeDescriptors{},
		blocksize: blocksize,
	}, nil
}

// Read reads a filesystem from a given disk.
//
// requires the util.File where to read the filesystem, size is the size of the filesystem in bytes,
// start is how far in bytes from the beginning of the util.File the filesystem is expected to begin,
// and blocksize is is the physical blocksize to use for reading the filesystem
//
// note that you are *not* required to read a filesystem on the entire disk. You could have a disk of size
// 20GB, and a small filesystem of size 50MB that begins 2GB into the disk.
// This is extremely useful for working with filesystems on disk partitions.
//
// Note, however, that it is much easier to do this using the higher-level APIs at github.com/diskfs/go-diskfs
// which allow you to work directly with partitions, rather than having to calculate (and hopefully not make any errors)
// where a partition starts and ends.
//
// If the provided blocksize is 0, it will use the default of 2K bytes
func Read(file util.File, size, start, blocksize int64) (*FileSystem, error) {
	var read int

	if blocksize == 0 {
		blocksize = defaultSectorSize
	}
	// make sure it is an allowed blocksize
	if err := validateBlocksize(blocksize); err != nil {
		return nil, err
	}
	// default size of 0 means use whatever size is available
	if size != 0 && size > MaxBlocks*blocksize {
		return nil, fmt.Errorf("requested size is larger than maximum allowed ISO9660 size of %d blocks", MaxBlocks)
	}
	// at bare minimum, it must have enough space for the system area, one volume descriptor, one volume decriptor set terminator, and one block of data
	if size != 0 && size < systemAreaSize+2*volumeDescriptorSize+blocksize {
		return nil, fmt.Errorf("requested size is too small to allow for system area (%d), one volume descriptor (%d), one volume descriptor set terminator (%d), and one block (%d)", systemAreaSize, volumeDescriptorSize, volumeDescriptorSize, blocksize)
	}

	// load the information from the disk
	// read system area
	systemArea := make([]byte, systemAreaSize)
	n, err := file.ReadAt(systemArea, start)
	if err != nil {
		return nil, fmt.Errorf("could not read bytes from file: %v", err)
	}
	if uint16(n) < uint16(systemAreaSize) {
		return nil, fmt.Errorf("only could read %d bytes from file", n)
	}
	// we do not do anything with the system area for now

	// next read the volume descriptors, one at a time, until we hit the terminator
	vds := make([]volumeDescriptor, 2)
	terminated := false
	var (
		pvd *primaryVolumeDescriptor
		vd  volumeDescriptor
	)
	for i := 0; !terminated; i++ {
		vdBytes := make([]byte, volumeDescriptorSize)
		// read vdBytes
		read, err = file.ReadAt(vdBytes, start+systemAreaSize+int64(i)*volumeDescriptorSize)
		if err != nil {
			return nil, fmt.Errorf("unable to read bytes for volume descriptor %d: %v", i, err)
		}
		if int64(read) != volumeDescriptorSize {
			return nil, fmt.Errorf("read %d bytes instead of expected %d for volume descriptor %d", read, volumeDescriptorSize, i)
		}
		// convert to a vd structure
		vd, err = volumeDescriptorFromBytes(vdBytes)
		if err != nil {
			return nil, fmt.Errorf("error reading Volume Descriptor: %v", err)
		}
		// is this a terminator?
		//nolint:exhaustive // we only are looking for the terminators; all of the rest are covered by default
		switch vd.Type() {
		case volumeDescriptorTerminator:
			terminated = true
		case volumeDescriptorPrimary:
			vds = append(vds, vd)
			pvd, _ = vd.(*primaryVolumeDescriptor)
		default:
			vds = append(vds, vd)
		}
	}

	// load up our path table and root directory entry
	var (
		pt           *pathTable
		rootDirEntry *directoryEntry
	)
	if pvd != nil {
		rootDirEntry = pvd.rootDirectoryEntry
		pathTableBytes := make([]byte, pvd.pathTableSize)
		pathTableLocation := pvd.pathTableLLocation * uint32(pvd.blocksize)
		read, err = file.ReadAt(pathTableBytes, int64(pathTableLocation))
		if err != nil {
			return nil, fmt.Errorf("unable to read path table of size %d at location %d: %v", pvd.pathTableSize, pathTableLocation, err)
		}
		if read != len(pathTableBytes) {
			return nil, fmt.Errorf("read %d bytes of path table instead of expected %d at location %d", read, pvd.pathTableSize, pathTableLocation)
		}
		pt = parsePathTable(pathTableBytes)
	}

	// is system use enabled?
	location := int64(rootDirEntry.location) * blocksize
	// get the size of the directory entry
	b := make([]byte, 1)
	read, err = file.ReadAt(b, location)
	if err != nil {
		return nil, fmt.Errorf("unable to read root directory size at location %d: %v", location, err)
	}
	if read != len(b) {
		return nil, fmt.Errorf("root directory entry size, read %d bytes instead of expected %d", read, len(b))
	}
	if b[0] == 0 {
		return nil, fmt.Errorf("root directory entry size at location %d was zero, check header and blocksize, given as %d", location, blocksize)
	}
	// now read the whole entry
	b = make([]byte, b[0])
	read, err = file.ReadAt(b, location)
	if err != nil {
		return nil, fmt.Errorf("unable to read root directory entry at location %d: %v", location, err)
	}
	if read != len(b) {
		return nil, fmt.Errorf("root directory entry, read %d bytes instead of expected %d", read, len(b))
	}
	// parse it - we do not have any handlers yet
	de, err := parseDirEntry(b, &FileSystem{
		suspEnabled: true,
		file:        file,
		blocksize:   blocksize,
	})
	if err != nil {
		return nil, fmt.Errorf("error parsing root entry from bytes: %v", err)
	}
	// is the SUSP in use?
	var (
		suspEnabled  bool
		skipBytes    uint8
		suspHandlers []suspExtension
	)
	for _, ext := range de.extensions {
		if s, ok := ext.(directoryEntrySystemUseExtensionSharingProtocolIndicator); ok {
			suspEnabled = true
			skipBytes = s.SkipBytes()
		}

		// register any extension handlers
		if s, ok := ext.(directoryEntrySystemUseExtensionReference); suspEnabled && ok {
			extHandler := getRockRidgeExtension(s.ExtensionID())
			if extHandler != nil {
				suspHandlers = append(suspHandlers, extHandler)
			}
		}
	}

	fs := &FileSystem{
		workspace: "", // no workspace when we do nothing with it
		start:     start,
		size:      size,
		file:      file,
		volumes: volumeDescriptors{
			descriptors: vds,
			primary:     pvd,
		},
		blocksize:      blocksize,
		pathTable:      pt,
		rootDir:        rootDirEntry,
		suspEnabled:    suspEnabled,
		suspSkip:       skipBytes,
		suspExtensions: suspHandlers,
	}
	rootDirEntry.filesystem = fs
	return fs, nil
}

// Type returns the type code for the filesystem. Always returns filesystem.TypeFat32
func (fs *FileSystem) Type() filesystem.Type {
	return filesystem.TypeISO9660
}

// Mkdir make a directory at the given path. It is equivalent to `mkdir -p`, i.e. idempotent, in that:
//
// * It will make the entire tree path if it does not exist
// * It will not return an error if the path already exists
//
// if readonly and not in workspace, will return an error
func (fs *FileSystem) Mkdir(p string) error {
	if fs.workspace == "" {
		return fmt.Errorf("cannot write to read-only filesystem")
	}
	err := os.MkdirAll(path.Join(fs.workspace, p), 0o755)
	if err != nil {
		return fmt.Errorf("could not create directory %s: %v", p, err)
	}
	// we are not interesting in returning the entries
	return err
}

// ReadDir return the contents of a given directory in a given filesystem.
//
// Returns a slice of os.FileInfo with all of the entries in the directory.
//
// Will return an error if the directory does not exist or is a regular file and not a directory
func (fs *FileSystem) ReadDir(p string) ([]os.FileInfo, error) {
	var fi []os.FileInfo
	// non-workspace: read from iso9660
	// workspace: read from regular filesystem
	if fs.workspace != "" {
		fullPath := path.Join(fs.workspace, p)
		// read the entries
		dirEntries, err := os.ReadDir(fullPath)
		if err != nil {
			return nil, fmt.Errorf("could not read directory %s: %v", p, err)
		}
		for _, e := range dirEntries {
			info, err := e.Info()
			if err != nil {
				return nil, fmt.Errorf("could not read directory %s: %v", p, err)
			}
			fi = append(fi, info)
		}
	} else {
		dirEntries, err := fs.readDirectory(p)
		if err != nil {
			return nil, fmt.Errorf("error reading directory %s: %v", p, err)
		}
		fi = make([]os.FileInfo, 0, len(dirEntries))
		for _, entry := range dirEntries {
			// ignore any entry that is current directory or parent
			if entry.isSelf || entry.isParent {
				continue
			}
			fi = append(fi, entry)
		}
	}
	return fi, nil
}

// OpenFile returns an io.ReadWriter from which you can read the contents of a file
// or write contents to the file
//
// accepts normal os.OpenFile flags
//
// returns an error if the file does not exist
func (fs *FileSystem) OpenFile(p string, flag int) (filesystem.File, error) {
	var f filesystem.File
	var err error

	// get the path and filename
	dir := path.Dir(p)
	filename := path.Base(p)

	// if the dir == filename, then it is just /
	if dir == filename {
		return nil, fmt.Errorf("cannot open directory %s as file", p)
	}

	// cannot open to write or append or create if we do not have a workspace
	writeMode := flag&os.O_WRONLY != 0 || flag&os.O_RDWR != 0 || flag&os.O_APPEND != 0 || flag&os.O_CREATE != 0 || flag&os.O_TRUNC != 0 || flag&os.O_EXCL != 0
	if fs.workspace == "" {
		if writeMode {
			return nil, fmt.Errorf("cannot write to read-only filesystem")
		}

		// get the directory entries
		var entries []*directoryEntry
		entries, err = fs.readDirectory(dir)
		if err != nil {
			return nil, fmt.Errorf("could not read directory entries for %s", dir)
		}
		// we now know that the directory exists, see if the file exists
		var targetEntry *directoryEntry
		for _, e := range entries {
			eName := e.Name()
			// cannot do anything with directories
			if eName == filename && e.IsDir() {
				return nil, fmt.Errorf("cannot open directory %s as file", p)
			}
			if eName == filename {
				// if we got this far, we have found the file
				targetEntry = e
				break
			}
		}

		// see if the file exists
		// if the file does not exist, and is not opened for os.O_CREATE, return an error
		if targetEntry == nil {
			return nil, fmt.Errorf("target file %s does not exist", p)
		}
		// now open the file
		f = &File{
			directoryEntry: targetEntry,
			isReadWrite:    false,
			isAppend:       false,
			offset:         0,
		}
	} else {
		f, err = os.OpenFile(path.Join(fs.workspace, p), flag, 0o644)
		if err != nil {
			return nil, fmt.Errorf("target file %s does not exist: %v", p, err)
		}
	}

	return f, nil
}

// readDirectory - read directory entry on iso only (not workspace)
func (fs *FileSystem) readDirectory(p string) ([]*directoryEntry, error) {
	var (
		location, size uint32
		err            error
		n              int
	)

	// try from path table, then walk the directory tree, unless we were told explicitly not to
	usePathtable := true
	for _, e := range fs.suspExtensions {
		usePathtable = e.UsePathtable()
		if !usePathtable {
			break
		}
	}

	if usePathtable {
		location = fs.pathTable.getLocation(p)
	}

	// if we found it, read the first directory entry to get the size
	if location != 0 {
		// we need 4 bytes to read the size of the directory; it is at offset 10 from beginning
		dirb := make([]byte, 4)
		n, err = fs.file.ReadAt(dirb, int64(location)*fs.blocksize+10)
		if err != nil {
			return nil, fmt.Errorf("could not read directory %s: %v", p, err)
		}
		if n != len(dirb) {
			return nil, fmt.Errorf("read %d bytes instead of expected %d", n, len(dirb))
		}
		// convert to uint32
		size = binary.LittleEndian.Uint32(dirb)
	} else {
		// if we could not find the location in the path table, try reading directly from the disk
		//   it is slow, but this is how Unix does it, since many iso creators *do* create illegitimate disks
		location, size, err = fs.rootDir.getLocation(p)
		if err != nil {
			return nil, fmt.Errorf("unable to read directory tree for %s: %v", p, err)
		}
	}

	// did we still not find it?
	if location == 0 {
		return nil, fmt.Errorf("could not find directory %s", p)
	}

	// we have a location, let's read the directories from it
	b := make([]byte, size)
	n, err = fs.file.ReadAt(b, int64(location)*fs.blocksize)
	if err != nil {
		return nil, fmt.Errorf("could not read directory entries for %s: %v", p, err)
	}
	if n != int(size) {
		return nil, fmt.Errorf("reading directory %s returned %d bytes read instead of expected %d", p, n, size)
	}
	// parse the entries
	entries, err := parseDirEntries(b, fs)
	if err != nil {
		return nil, fmt.Errorf("could not parse directory entries for %s: %v", p, err)
	}
	return entries, nil
}

func validateBlocksize(blocksize int64) error {
	switch blocksize {
	case 0, 2048, 4096, 8192:
		return nil
	default:
		return fmt.Errorf("blocksize for ISO9660 must be one of 2048, 4096, 8192")
	}
}

func (fs *FileSystem) Label() string {
	if fs.volumes.primary == nil {
		return ""
	}
	return fs.volumes.primary.volumeIdentifier
}

func (fs *FileSystem) SetLabel(string) error {
	return fmt.Errorf("ISO9660 filesystem is read-only")
}
 07070100000325000081A4000000000000000000000001645E367C00000E04000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/iso9660/pathtable.go    package iso9660

import (
	"encoding/binary"
)

// pathTable represents an on-iso path table
type pathTable struct {
	records []*pathTableEntry
}

type pathTableEntry struct {
	nameSize      uint8
	size          uint16
	extAttrLength uint8
	location      uint32
	parentIndex   uint16
	dirname       string
}

func (pt *pathTable) equal(b *pathTable) bool {
	switch {
	case (pt == nil && b != nil) || (pt != nil && b == nil):
		return false
	case len(pt.records) != len(b.records):
		return false
	default:
		for i, e := range pt.records {
			if *e != *b.records[i] {
				return false
			}
		}
	}
	return true
}

func (pt *pathTable) names() []string {
	ret := make([]string, len(pt.records))
	for i, v := range pt.records {
		ret[i] = v.dirname
	}
	return ret
}

func (pt *pathTable) toLBytes() []byte {
	b := make([]byte, 0)
	for _, e := range pt.records {
		name := []byte(e.dirname)
		nameSize := len(name)
		size := 8 + uint16(nameSize)
		if nameSize%2 != 0 {
			size++
		}

		b2 := make([]byte, size)
		b2[0] = uint8(nameSize)
		b2[1] = e.extAttrLength
		binary.LittleEndian.PutUint32(b2[2:6], e.location)
		binary.LittleEndian.PutUint16(b2[6:8], e.parentIndex)
		copy(b2[8:8+nameSize], name)
		if nameSize%2 != 0 {
			b2[8+nameSize] = 0
		}
		b = append(b, b2...)
	}
	return b
}
func (pt *pathTable) toMBytes() []byte {
	b := make([]byte, 0)
	for _, e := range pt.records {
		name := []byte(e.dirname)
		nameSize := len(name)
		size := 8 + uint16(nameSize)
		if nameSize%2 != 0 {
			size++
		}

		b2 := make([]byte, size)
		b2[0] = uint8(nameSize)
		b2[1] = e.extAttrLength
		binary.BigEndian.PutUint32(b2[2:6], e.location)
		binary.BigEndian.PutUint16(b2[6:8], e.parentIndex)
		copy(b2[8:8+nameSize], name)
		if nameSize%2 != 0 {
			b2[8+nameSize] = 0
		}
		b = append(b, b2...)
	}
	return b
}

// getLocation gets the location of the extent that contains this path
// we can get the size because the first record always points to the current directory
func (pt *pathTable) getLocation(p string) uint32 {
	// break path down into parts and levels
	parts := splitPath(p)
	// level represents the level of the parent
	var level uint16 = 1
	var location uint32
	if len(parts) == 0 {
		location = pt.records[0].location
	} else {
		current := parts[0]
		// loop through the path table until we find our entry
		// we always can go forward because of the known depth ordering of path table
		for i, entry := range pt.records {
			// did we find a match for our current level?
			if entry.parentIndex == level && entry.dirname == current {
				level = uint16(i)
				if len(parts) > 1 {
					parts = parts[1:]
				} else {
					// this is the final one, we found it, keep it
					location = entry.location
					break
				}
			}
		}
	}
	return location
}

// parsePathTable load pathtable bytes into structures
func parsePathTable(b []byte) *pathTable {
	totalSize := len(b)
	entries := make([]*pathTableEntry, 0, 20)
	for i := 0; i < totalSize; {
		var nameSize = b[i]
		// is it zeroes? If so, we are at the end
		if nameSize == 0 {
			break
		}
		size := 8 + uint16(nameSize)
		if nameSize%2 != 0 {
			size++
		}
		var extAttrSize = b[i+1]
		location := binary.LittleEndian.Uint32(b[i+2 : i+6])
		parent := binary.LittleEndian.Uint16(b[i+6 : i+8])
		name := string(b[i+8 : i+8+int(nameSize)])
		entry := &pathTableEntry{
			nameSize:      nameSize,
			size:          size,
			extAttrLength: extAttrSize,
			location:      location,
			parentIndex:   parent,
			dirname:       name,
		}
		entries = append(entries, entry)
		i += int(size)
	}
	return &pathTable{
		records: entries,
	}
}
07070100000326000081A4000000000000000000000001645E367C000085F3000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/iso9660/rockridge.go    package iso9660

import (
	"encoding/binary"
	"fmt"
	"os"
	"sort"
	"time"

	"gopkg.in/djherbis/times.v1"
)

const (
	rockRidgeSignaturePosixAttributes    = "PX"
	rockRidgeSignaturePosixDeviceNumber  = "PN"
	rockRidgeSignatureSymbolicLink       = "SL"
	rockRidgeSignatureName               = "NM"
	rockRidgeSignatureChild              = "CL"
	rockRidgeSignatureParent             = "PL"
	rockRidgeSignatureRelocatedDirectory = "RE"
	rockRidgeSignatureTimestamps         = "TF"
	rockRidgeSignatureSparseFile         = "SF"
	rockRidge110                         = "RRIP_1991A"
	rockRidge112                         = "IEEE_P1282"
)

// rockRidgeExtension implements suspExtension interface
type rockRidgeExtension struct {
	version    string
	id         string
	descriptor string
	source     string
	pxLength   int
	sfLength   int
}

func (r *rockRidgeExtension) ID() string {
	return r.id
}
func (r *rockRidgeExtension) Descriptor() string {
	return r.descriptor
}
func (r *rockRidgeExtension) Source() string {
	return r.source
}
func (r *rockRidgeExtension) Version() uint8 {
	return 1
}
func (r *rockRidgeExtension) Process(signature string, b []byte) (directoryEntrySystemUseExtension, error) {
	// if we have a parser, use it, else use the raw parser
	var (
		entry directoryEntrySystemUseExtension
		err   error
	)
	switch signature {
	case rockRidgeSignaturePosixAttributes:
		entry, err = r.parsePosixAttributes(b)
	case rockRidgeSignaturePosixDeviceNumber:
		entry, err = r.parsePosixDeviceNumber(b)
	case rockRidgeSignatureSymbolicLink:
		entry, err = r.parseSymlink(b)
	case rockRidgeSignatureName:
		entry, err = r.parseName(b)
	case rockRidgeSignatureChild:
		entry, err = r.parseChildDirectory(b)
	case rockRidgeSignatureParent:
		entry, err = r.parseParentDirectory(b)
	case rockRidgeSignatureRelocatedDirectory:
		entry, err = r.parseRelocatedDirectory(b)
	case rockRidgeSignatureTimestamps:
		entry, err = r.parseTimestamps(b)
	case rockRidgeSignatureSparseFile:
		entry, err = r.parseSparseFile(b)
	default:
		return nil, ErrSuspNoHandler
	}
	if err != nil {
		return nil, fmt.Errorf("error parsing %s extension by Rock Ridge : %v", signature, err)
	}
	return entry, nil
}

// get the rock ridge filename for a directory entry
func (r *rockRidgeExtension) GetFilename(de *directoryEntry) (string, error) {
	found := false
	name := ""
	for _, e := range de.extensions {
		if nm, ok := e.(rockRidgeName); ok {
			found = true
			name = nm.name
			break
		}
	}
	if !found {
		return "", fmt.Errorf("could not find Rock Ridge filename property")
	}
	return name, nil
}
func (r *rockRidgeExtension) GetFileExtensions(fp string, isSelf, isParent bool) ([]directoryEntrySystemUseExtension, error) {
	// we always do PX, TF, NM, SL order
	ret := []directoryEntrySystemUseExtension{}
	// do not follow symlinks
	fi, err := os.Lstat(fp)
	if err != nil {
		return nil, fmt.Errorf("error reading file %s: %v", fp, err)
	}

	t, err := times.Lstat(fp)
	if err != nil {
		return nil, fmt.Errorf("error reading times %s: %v", fp, err)
	}

	// PX
	nlink, uid, gid := statt(fi)
	mtime := fi.ModTime()
	atime := t.AccessTime()
	ctime := t.ChangeTime()

	ret = append(ret, rockRidgePosixAttributes{
		mode:      fi.Mode(),
		linkCount: nlink,
		uid:       uid,
		gid:       gid,
		length:    r.pxLength,
	})
	// TF
	tf := rockRidgeTimestamps{longForm: false, stamps: []rockRidgeTimestamp{
		{timestampType: rockRidgeTimestampModify, time: mtime},
		{timestampType: rockRidgeTimestampAccess, time: atime},
		{timestampType: rockRidgeTimestampAttribute, time: ctime},
	}}

	ret = append(ret, tf)
	// NM
	if !isSelf && !isParent {
		ret = append(ret, rockRidgeName{name: fi.Name()})
	}
	// SL
	if fi.Mode()&os.ModeSymlink == os.ModeSymlink {
		// need the target if it is a symlink
		target, err := os.Readlink(fp)
		if err != nil {
			return nil, fmt.Errorf("error reading symlink target at %s", fp)
		}
		ret = append(ret, rockRidgeSymlink{continued: false, name: target})
	}

	return ret, nil
}

func (r *rockRidgeExtension) GetFinalizeExtensions(fi *finalizeFileInfo) ([]directoryEntrySystemUseExtension, error) {
	// we look for CL, PL, RE entries
	ret := []directoryEntrySystemUseExtension{}
	if fi.trueParent != nil {
		ret = append(ret, rockRidgeRelocatedDirectory{}, rockRidgeParentDirectory{location: fi.trueParent.location})
	}
	if fi.trueChild != nil {
		ret = append(ret, rockRidgeChildDirectory{location: fi.trueChild.location})
	}
	return ret, nil
}

// determine if a directory entry was relocated
func (r *rockRidgeExtension) Relocated(de *directoryEntry) bool {
	relocated := false
	for _, e := range de.extensions {
		if _, ok := e.(rockRidgeRelocatedDirectory); ok {
			relocated = true
			break
		}
	}
	return relocated
}

// Relocatable can rock ridge handle deep directory relocations? yes
func (r *rockRidgeExtension) Relocatable() bool {
	return true
}

func (r *rockRidgeExtension) UsePathtable() bool {
	return false
}

// Relocate restructure so that all directories are at a depth of 8 or fewer
func (r *rockRidgeExtension) Relocate(dirs map[string]*finalizeFileInfo) ([]*finalizeFileInfo, map[string]*finalizeFileInfo, error) {
	files := make([]*finalizeFileInfo, 0)
	root := dirs["."]
	relocationDir := root
	if relocationDir.depth == 8 {
		return nil, nil, fmt.Errorf("cannot relocate when relocation parent already is max depth 8")
	}
	/* logic:
	 * 1. go down the directories
	 * 2. as soon as we find one whose depth > 8, move it to the parent
	 * 3. change the depth of it and all of its children to its new depth
	 * 4. reparent it
	 * 5. change child entries in the parent
	 *
	 * repeat until none is deeper than 8
	 */
	// deepers contains the list of all dirs exactly at one too deep, i.e. 9
	deepers := make([]*finalizeFileInfo, 0)
	for _, e := range dirs {
		if e.depth == 9 {
			deepers = append(deepers, e)
		}
	}
	// repeat until deepers has no children of depth > 8
	for {
		if len(deepers) < 1 {
			break
		}
		for _, e := range deepers {
			// we have a depth greater than 8, so move it
			e.trueParent = e.parent
			e.parent = relocationDir
			// create the file that represents it
			children := make([]*finalizeFileInfo, 0)
			for _, c := range e.trueParent.children {
				if c != e {
					children = append(children, e)
					continue
				}
				// copy over but replace a few key items
				content := []byte("Rock Ridge relocated")
				replacer := &finalizeFileInfo{}
				*replacer = *c
				replacer.isDir = false
				replacer.mode = c.mode & (^os.ModeDir)
				replacer.size = int64(len(content))
				replacer.content = content
				replacer.trueChild = e
				children = append(children, replacer)
			}
			e.trueParent.children = children
			// cycle down and update the depth for all children
			e.updateDepth(relocationDir.depth + 1)
		}
		// go through deepers, remove all of those that are not >8
		deepers = make([]*finalizeFileInfo, 0)
		for _, e := range dirs {
			if e.depth == 9 {
				deepers = append(deepers, e)
			}
		}
	}
	return files, dirs, nil
}

// find the directory location
func (r *rockRidgeExtension) GetDirectoryLocation(de *directoryEntry) uint32 {
	newEntry := uint32(0)
	for _, e := range de.extensions {
		if child, ok := e.(rockRidgeChildDirectory); ok {
			newEntry = child.location
			break
		}
	}
	return newEntry
}

func getRockRidgeExtension(id string) *rockRidgeExtension {
	var ret *rockRidgeExtension // defaults to nil
	switch id {
	case rockRidge110:
		ret = &rockRidgeExtension{
			id:         id,
			version:    "1.10",
			descriptor: "THE ROCK RIDGE INTERCHANGE PROTOCOL PROVIDES SUPPORT FOR POSIX FILE SYSTEM SEMANTICS",
			source:     "PLEASE CONTACT DISC PUBLISHER FOR SPECIFICATION SOURCE. SEE PUBLISHER IDENTIFIER IN PRIMARY VOLUME DESCRIPTOR FOR CONTACT INFORMATION.",
			pxLength:   36,
			sfLength:   12,
		}
	case rockRidge112:
		ret = &rockRidgeExtension{
			id:         id,
			version:    "1.12",
			descriptor: "THE IEEE P1282 PROTOCOL PROVIDES SUPPORT FOR POSIX FILE SYSTEM SEMANTICS.",
			source:     "PLEASE CONTACT THE IEEE STANDARDS DEPARTMENT, PISCATAWAY, NJ, USA FOR THE P1282 SPECIFICATION.",
			pxLength:   44,
			sfLength:   21,
		}
	}
	return ret
}

// rockRidgePosixAttributes
type rockRidgePosixAttributes struct {
	mode         os.FileMode
	saveSwapText bool
	length       int

	linkCount uint32
	uid       uint32
	gid       uint32
	serial    uint32
}

func (d rockRidgePosixAttributes) Equal(o directoryEntrySystemUseExtension) bool {
	t, ok := o.(rockRidgePosixAttributes)
	return ok && t == d
}

func (d rockRidgePosixAttributes) Signature() string {
	return rockRidgeSignaturePosixAttributes
}
func (d rockRidgePosixAttributes) Length() int {
	return d.length
}
func (d rockRidgePosixAttributes) Version() uint8 {
	return 1
}
func (d rockRidgePosixAttributes) Data() []byte {
	ret := make([]byte, d.length-4)
	modes := uint32(0)
	regular := true
	m := d.mode
	// get Unix permission bits - golang and Rock Ridge use the same ones
	modes |= uint32(m & 0o777)
	// get setuid and setgid
	modes |= uint32(m & os.ModeSetuid)
	modes |= uint32(m & os.ModeSetgid)
	// save swapped text mode seems to have no parallel
	if d.saveSwapText {
		modes |= 0o1000
	}
	// the rest of the modes do not use the same bits on Rock Ridge and on golang
	if m&os.ModeSocket == os.ModeSocket {
		modes |= 0o140000
		regular = false
	}
	if m&os.ModeSymlink == os.ModeSymlink {
		modes |= 0o120000
		regular = false
	}
	if m&os.ModeDevice == os.ModeDevice {
		regular = false
		if m&os.ModeCharDevice == os.ModeCharDevice {
			modes |= 0o20000
		} else {
			modes |= 0o60000
		}
	}
	if m&os.ModeDir == os.ModeDir {
		modes |= 0o40000
		regular = false
	}
	if m&os.ModeNamedPipe == os.ModeNamedPipe {
		modes |= 0o10000
		regular = false
	}
	if regular {
		modes |= 0o100000
	}

	binary.LittleEndian.PutUint32(ret[0:4], modes)
	binary.BigEndian.PutUint32(ret[4:8], modes)
	binary.LittleEndian.PutUint32(ret[8:12], d.linkCount)
	binary.BigEndian.PutUint32(ret[12:16], d.linkCount)
	binary.LittleEndian.PutUint32(ret[16:20], d.uid)
	binary.BigEndian.PutUint32(ret[20:24], d.uid)
	binary.LittleEndian.PutUint32(ret[24:28], d.gid)
	binary.BigEndian.PutUint32(ret[28:32], d.gid)
	if d.length == 44 {
		binary.LittleEndian.PutUint32(ret[32:36], d.serial)
		binary.BigEndian.PutUint32(ret[36:40], d.serial)
	}
	return ret
}
func (d rockRidgePosixAttributes) Bytes() []byte {
	ret := make([]byte, 4)
	copy(ret[0:2], rockRidgeSignaturePosixAttributes)
	ret[2] = uint8(d.Length())
	ret[3] = d.Version()
	ret = append(ret, d.Data()...)
	return ret
}
func (d rockRidgePosixAttributes) Continuable() bool {
	return false
}
func (d rockRidgePosixAttributes) Merge([]directoryEntrySystemUseExtension) directoryEntrySystemUseExtension {
	return nil
}

func (r *rockRidgeExtension) parsePosixAttributes(b []byte) (directoryEntrySystemUseExtension, error) {
	targetSize := r.pxLength
	if len(b) != targetSize {
		//nolint:stylecheck // "Rock Ridge" is a proper noun
		return nil, fmt.Errorf("Rock Ridge PX extension must be %d bytes, but received %d", targetSize, len(b))
	}
	size := b[2]
	if size != uint8(targetSize) {
		//nolint:stylecheck // "Rock Ridge" is a proper noun
		return nil, fmt.Errorf("Rock Ridge PX extension must be %d bytes, but byte 2 indicated %d", targetSize, size)
	}
	version := b[3]
	if version != 1 {
		//nolint:stylecheck // "Rock Ridge" is a proper noun
		return nil, fmt.Errorf("Rock Ridge PX extension must be version 1, was %d", version)
	}
	// file mode
	modes := binary.LittleEndian.Uint32(b[4:8])
	var m uint32
	// get Unix permission bits - golang and Rock Ridge use the same ones
	m |= (modes & 0o777)
	// get setuid and setgid
	m |= (modes & uint32(os.ModeSetuid))
	m |= (modes & uint32(os.ModeSetgid))
	// save swapped text mode seems to have no parallel
	var saveSwapText bool
	if modes&0o01000 != 0 {
		saveSwapText = true
	}
	// the rest of the modes do not use the same bits on Rock Ridge and on golang, and are exclusive
	switch {
	case modes&0o140000 == 0o140000:
		m |= uint32(os.ModeSocket)
	case modes&0o120000 == 0o120000:
		m |= uint32(os.ModeSymlink)
	case modes&0o20000 == 0o20000:
		m |= uint32(os.ModeCharDevice | os.ModeDevice)
	case modes&0o60000 == 0o60000:
		m |= uint32(os.ModeDevice)
	case modes&0o40000 == 0o40000:
		m |= uint32(os.ModeDir)
	case modes&0o10000 == 0o10000:
		m |= uint32(os.ModeNamedPipe)
	}

	var serial uint32
	if len(b) == 44 {
		serial = binary.LittleEndian.Uint32(b[36:40])
	}
	return rockRidgePosixAttributes{
		mode:         os.FileMode(m),
		saveSwapText: saveSwapText,
		linkCount:    binary.LittleEndian.Uint32(b[12:16]),
		uid:          binary.LittleEndian.Uint32(b[20:24]),
		gid:          binary.LittleEndian.Uint32(b[28:32]),
		serial:       serial,
		length:       targetSize,
	}, nil
}

// rockRidgePosixDeviceNumber
type rockRidgePosixDeviceNumber struct {
	high uint32
	low  uint32
}

func (d rockRidgePosixDeviceNumber) Equal(o directoryEntrySystemUseExtension) bool {
	t, ok := o.(rockRidgePosixDeviceNumber)
	return ok && t == d
}
func (d rockRidgePosixDeviceNumber) Signature() string {
	return rockRidgeSignaturePosixDeviceNumber
}
func (d rockRidgePosixDeviceNumber) Length() int {
	return 20
}
func (d rockRidgePosixDeviceNumber) Version() uint8 {
	return 1
}
func (d rockRidgePosixDeviceNumber) Data() []byte {
	ret := make([]byte, 16)

	binary.LittleEndian.PutUint32(ret[0:4], d.high)
	binary.BigEndian.PutUint32(ret[4:8], d.high)
	binary.LittleEndian.PutUint32(ret[8:12], d.low)
	binary.BigEndian.PutUint32(ret[12:16], d.low)
	return ret
}
func (d rockRidgePosixDeviceNumber) Bytes() []byte {
	ret := make([]byte, 4)
	copy(ret[0:2], rockRidgeSignaturePosixDeviceNumber)
	ret[2] = uint8(d.Length())
	ret[3] = d.Version()
	ret = append(ret, d.Data()...)
	return ret
}
func (d rockRidgePosixDeviceNumber) Continuable() bool {
	return false
}
func (d rockRidgePosixDeviceNumber) Merge([]directoryEntrySystemUseExtension) directoryEntrySystemUseExtension {
	return nil
}

func (r *rockRidgeExtension) parsePosixDeviceNumber(b []byte) (directoryEntrySystemUseExtension, error) {
	targetSize := 20
	if len(b) != targetSize {
		//nolint:stylecheck // "Rock Ridge" is a proper noun
		return nil, fmt.Errorf("Rock Ridge PN extension must be %d bytes, but received %d", targetSize, len(b))
	}
	size := b[2]
	if size != uint8(targetSize) {
		//nolint:stylecheck // "Rock Ridge" is a proper noun
		return nil, fmt.Errorf("Rock Ridge PN extension must be %d bytes, but byte 2 indicated %d", targetSize, size)
	}
	version := b[3]
	if version != 1 {
		//nolint:stylecheck // "Rock Ridge" is a proper noun
		return nil, fmt.Errorf("Rock Ridge PN extension must be version 1, was %d", version)
	}
	return rockRidgePosixDeviceNumber{
		high: binary.LittleEndian.Uint32(b[4:8]),
		low:  binary.LittleEndian.Uint32(b[12:16]),
	}, nil
}

// rockRidgeSymlink
// a symlink can be greater than the 254 max size of a SUSP extension, so it may continue across multiple extension entries
// a rockRidgeSymlink can represent the individual components, or an entire set merged together
// Bytes(), when called, will provide as many consecutive symlink bytes as needed
type rockRidgeSymlink struct {
	continued bool // if this is continuted in another rockRidgeSymlink entry
	name      string
}

func (d rockRidgeSymlink) Equal(o directoryEntrySystemUseExtension) bool {
	t, ok := o.(rockRidgeSymlink)
	return ok && t == d
}
func (d rockRidgeSymlink) Signature() string {
	return rockRidgeSignatureSymbolicLink
}
func (d rockRidgeSymlink) Length() int {
	// basic 4 bytes for all SUSP entries, 1 byte for flags, 1 for Component Flags, 1 for Component Len, name
	return 4 + 1 + 2 + len(d.name)
}
func (d rockRidgeSymlink) Version() uint8 {
	return 1
}
func (d rockRidgeSymlink) Data() []byte {
	return []byte{}
}
func (d rockRidgeSymlink) Bytes() []byte {
	// This could be a single entry, or so long that you need multiple concatenated
	// maximum size of a single entry is 254 bytes
	// each SL record requires 4 bytes of header, 1 byte of flags, and 2 bytes of flags and length in component area
	//  so available = 254-(4+1+2) = 247
	headerSize := 4 + 1 + 2
	maxComponentSize := directoryEntryMaxSize - headerSize
	// break the target of the link down into component parts, and then we can calculate the size
	components := splitPath(d.name)
	root := false
	if d.name[0] == "/"[0] {
		root = true
	}
	// go through the components, convert to []byte and add on
	cBytes := make([][]byte, 0)
	if root {
		// component flag, component len, component of path
		cBytes = append(cBytes, []byte{0x08, 0x0})
	}
	for _, e := range components {
		switch e {
		case "..":
			cBytes = append(cBytes, []byte{0x4, 0x0})
		case ".":
			cBytes = append(cBytes, []byte{0x2, 0x0})
		default:
			cBytes = append(cBytes, []byte{0x0, byte(len(e))}, []byte(e))
		}
	}
	// we now have cBytes, which is all of the component parts
	// split into SL entries as needed
	b := make([]byte, 0)
	b2 := make([]byte, 5)
	copy(b2[0:2], rockRidgeSignatureSymbolicLink)
	// we set size and continuing flag when we are done with this entry
	b2[3] = d.Version()
	componentByteCount := 0
	for _, e := range cBytes {
		if len(e)+componentByteCount > maxComponentSize {
			// cannot add it, so close the existing one and start a new record
			b2[2] = uint8(componentByteCount + 5)
			b2[4] = 1
			b = append(b, b2...)

			// new record
			b2 = make([]byte, 5)
			copy(b2[0:2], rockRidgeSignatureSymbolicLink)
			// we set size and continuing flag when we are done with this entry
			b2[3] = d.Version()
			componentByteCount = 0
		}
		b2 = append(b2, e...)
		componentByteCount += len(e)
	}
	if len(b2) > 0 {
		b2[2] = uint8(componentByteCount + 5)
		// this one is not continuing, it is the last
		b2[4] = 0
		b = append(b, b2...)
	}

	return b
}
func (d rockRidgeSymlink) Continuable() bool {
	return d.continued
}
func (d rockRidgeSymlink) Merge(links []directoryEntrySystemUseExtension) directoryEntrySystemUseExtension {
	for _, e := range links {
		if l, ok := e.(rockRidgeSymlink); ok {
			d.name += l.name
		}
	}
	d.continued = false
	return d
}

func (r *rockRidgeExtension) parseSymlink(b []byte) (directoryEntrySystemUseExtension, error) {
	size := int(b[2])
	if size != len(b) {
		//nolint:stylecheck // "Rock Ridge" is a proper noun
		return nil, fmt.Errorf("Rock Ridge SL extension received %d bytes, but byte 2 indicated %d", len(b), size)
	}
	version := b[3]
	if version != 1 {
		//nolint:stylecheck // "Rock Ridge" is a proper noun
		return nil, fmt.Errorf("Rock Ridge SL extension must be version 1, was %d", version)
	}
	continued := b[4] == 1
	name := ""
	for i := 5; i < len(b); {
		// make it easier to work with
		b2 := b[i:]
		// find out how many bytes we will read
		flags := b2[0]
		size := b2[1]
		switch {
		case flags&0x1 == 0x1:
			name += "."
		case flags&0x2 == 0x2:
			name += ".."
		case flags&0x3 == 0x3:
			name = "/"
		case size > 0:
			name += "/" + string(b2[2:2+size])
		}

		i += 2 + int(size)
	}
	return rockRidgeSymlink{
		continued: continued,
		name:      name,
	}, nil
}

// rockRidgeName
// a name can be greater than the 254 max size of a SUSP extension, so it may continue across multiple extension entries
// a rockRidgeName can represent the individual components, or an entire set merged together
// Bytes(), when called, will provide as many consecutive name bytes as needed
type rockRidgeName struct {
	continued bool // if this is continued in another rockRidgeName entry
	current   bool // refers to current directory, i.e. "."
	parent    bool // refers to parent directory, i.e. ".."
	name      string
}

func (d rockRidgeName) Equal(o directoryEntrySystemUseExtension) bool {
	t, ok := o.(rockRidgeName)
	return ok && t == d
}
func (d rockRidgeName) Signature() string {
	return rockRidgeSignatureName
}
func (d rockRidgeName) Length() int {
	// basic 4 bytes for all SUSP entries, 1 byte for flags, name
	return 4 + 1 + len(d.name)
}
func (d rockRidgeName) Version() uint8 {
	return 1
}
func (d rockRidgeName) Data() []byte {
	return []byte{}
}
func (d rockRidgeName) Bytes() []byte {
	// This could be a single entry, or so long that you need multiple concatenated
	// maximum size of a single entry is 254 bytes
	// each SL record requires 4 bytes of header, 1 byte of flags
	//  so available = 254-(4+1) = 249
	headerSize := 4 + 1
	maxComponentSize := directoryEntryMaxSize - headerSize
	// count how many entries we will need
	nameBytes := []byte(d.name)
	count := len(nameBytes) / maxComponentSize
	if len(nameBytes)%maxComponentSize > 0 {
		count++
	}
	b := make([]byte, 0)
	for i := 0; i < count; i++ {
		b2 := make([]byte, 5)
		copy(b2[0:2], rockRidgeSignatureName)
		// we set size and continuing flag when we are done with this entry
		b2[3] = d.Version()
		copyBytes := nameBytes
		continuing := 0
		if len(nameBytes) > maxComponentSize {
			copyBytes = nameBytes[:maxComponentSize]
			continuing = 1
		}
		b2 = append(b2, copyBytes...)
		b2[2] = 5 + uint8(len(copyBytes))
		flags := 0x0 | continuing
		if d.current {
			flags |= 0x2
		}
		if d.parent {
			flags |= 0x4
		}
		b2[4] = byte(flags)

		b = append(b, b2...)
	}
	return b
}
func (d rockRidgeName) Continuable() bool {
	return d.continued
}
func (d rockRidgeName) Merge(names []directoryEntrySystemUseExtension) directoryEntrySystemUseExtension {
	for _, e := range names {
		if n, ok := e.(rockRidgeName); ok {
			d.name += n.name
		}
	}
	d.continued = false
	return d
}

func (r *rockRidgeExtension) parseName(b []byte) (directoryEntrySystemUseExtension, error) {
	size := int(b[2])
	if size != len(b) {
		//nolint:stylecheck // "Rock Ridge" is a proper noun
		return nil, fmt.Errorf("Rock Ridge NM extension received %d bytes, but byte 2 indicated %d", len(b), size)
	}
	version := b[3]
	if version != 1 {
		//nolint:stylecheck // "Rock Ridge" is a proper noun
		return nil, fmt.Errorf("Rock Ridge NM extension must be version 1, was %d", version)
	}
	continued := b[4]&1 != 0
	current := b[4]&2 != 0
	parent := b[4]&4 != 0
	name := ""
	if size > 5 {
		name = string(b[5:])
	}
	return rockRidgeName{
		continued: continued,
		name:      name,
		current:   current,
		parent:    parent,
	}, nil
}

// rockRidgeTimestamp constants - these are the bitmasks for the flag field
const (
	rockRidgeTimestampCreation   uint8 = 1
	rockRidgeTimestampModify     uint8 = 2
	rockRidgeTimestampAccess     uint8 = 4
	rockRidgeTimestampAttribute  uint8 = 8
	rockRidgeTimestampBackup     uint8 = 16
	rockRidgeTimestampExpiration uint8 = 32
	rockRidgeTimestampEffective  uint8 = 64
	rockRidgeTimestampLongForm   uint8 = 128
)

// rockRidgeTimestamp
type rockRidgeTimestamp struct {
	timestampType uint8
	time          time.Time
}

func (r rockRidgeTimestamp) Equal(o rockRidgeTimestamp) bool {
	// we compare down to the second, not below
	return r.timestampType == o.timestampType && r.time.Unix() == o.time.Unix()
}
func (r rockRidgeTimestamp) Close(o rockRidgeTimestamp) bool {
	// we compare within 5 seconds
	margin := int64(5)
	diff := r.time.Unix() - o.time.Unix()
	return r.timestampType == o.timestampType && diff < margin && diff > -margin
}

type rockRidgeTimestamps struct {
	longForm bool
	stamps   []rockRidgeTimestamp
}
type rockRidgeTimestampByBitOrder []rockRidgeTimestamp

func (s rockRidgeTimestampByBitOrder) Len() int {
	return len(s)
}
func (s rockRidgeTimestampByBitOrder) Swap(i, j int) {
	s[i], s[j] = s[j], s[i]
}
func (s rockRidgeTimestampByBitOrder) Less(i, j int) bool {
	return s[i].timestampType < s[j].timestampType
}

func (d rockRidgeTimestamps) Equal(o directoryEntrySystemUseExtension) bool {
	t, ok := o.(rockRidgeTimestamps)
	matched := ok
	if matched && t.longForm == d.longForm && len(d.stamps) == len(t.stamps) {
		for i, e := range d.stamps {
			if !e.Equal(t.stamps[i]) {
				matched = false
				break
			}
		}
	} else {
		matched = false
	}
	return matched
}
func (d rockRidgeTimestamps) Close(o directoryEntrySystemUseExtension) bool {
	t, ok := o.(rockRidgeTimestamps)
	matched := ok
	if matched && t.longForm == d.longForm && len(d.stamps) == len(t.stamps) {
		for i, e := range d.stamps {
			if !e.Close(t.stamps[i]) {
				matched = false
				break
			}
		}
	} else {
		matched = false
	}
	return matched
}
func (d rockRidgeTimestamps) Signature() string {
	return rockRidgeSignatureTimestamps
}
func (d rockRidgeTimestamps) Length() int {
	entryLength := 7
	if d.longForm {
		entryLength = 17
	}
	return 5 + entryLength*len(d.stamps)
}
func (d rockRidgeTimestamps) Version() uint8 {
	return 1
}
func (d rockRidgeTimestamps) Data() []byte {
	return []byte{}
}
func (d rockRidgeTimestamps) Bytes() []byte {
	b := make([]byte, 5)
	copy(b[0:2], rockRidgeSignatureTimestamps)
	b[2] = uint8(d.Length())
	b[3] = d.Version()
	if d.longForm {
		b[4] |= rockRidgeTimestampLongForm
	}

	// now get all of the timestamps
	// these have to be in a specific order
	//  creation, modify, access, attributes, backup, expiration, effective
	// this is the increasing but order they are in anyways
	sort.Sort(rockRidgeTimestampByBitOrder(d.stamps))
	for _, t := range d.stamps {
		var b2 []byte
		b[4] |= t.timestampType
		if d.longForm {
			b2 = timeToDecBytes(t.time)
		} else {
			b2 = timeToBytes(t.time)
		}

		b = append(b, b2...)
	}
	return b
}
func (d rockRidgeTimestamps) Continuable() bool {
	return false
}
func (d rockRidgeTimestamps) Merge([]directoryEntrySystemUseExtension) directoryEntrySystemUseExtension {
	return nil
}

func (r *rockRidgeExtension) parseTimestamps(b []byte) (directoryEntrySystemUseExtension, error) {
	size := b[2]
	if int(size) != len(b) {
		//nolint:stylecheck // "Rock Ridge" is a proper noun
		return nil, fmt.Errorf("Rock Ridge TF extension has %d bytes, but byte 2 indicated %d", len(b), size)
	}
	version := b[3]
	if version != 1 {
		//nolint:stylecheck // "Rock Ridge" is a proper noun
		return nil, fmt.Errorf("Rock Ridge TF extension must be version 1, was %d", version)
	}
	// what timestamps are recorded?
	flags := b[4]
	// go through them one by one in order
	entryLength := 7
	longForm := false
	if flags&rockRidgeTimestampLongForm != 0 {
		entryLength = 17
		longForm = true
	}

	entries := make([]rockRidgeTimestamp, 0)
	tfBytes := b[5:]
	tfTypes := []uint8{rockRidgeTimestampCreation, rockRidgeTimestampModify, rockRidgeTimestampAccess, rockRidgeTimestampAttribute,
		rockRidgeTimestampBackup, rockRidgeTimestampExpiration, rockRidgeTimestampEffective}
	for _, tf := range tfTypes {
		if flags&tf == 0 {
			continue
		}
		timeBytes := tfBytes[:entryLength]
		tfBytes = tfBytes[entryLength:]
		var (
			t   time.Time
			err error
		)
		if longForm {
			t, err = decBytesToTime(timeBytes)
			if err != nil {
				return nil, fmt.Errorf("could not process timestamp %d bytes to long form bytes: %v % x", tf, err, timeBytes)
			}
		} else {
			t = bytesToTime(timeBytes)
		}
		entry := rockRidgeTimestamp{
			time:          t,
			timestampType: tf,
		}
		entries = append(entries, entry)
	}

	return rockRidgeTimestamps{
		stamps:   entries,
		longForm: longForm,
	}, nil
}

// rockRidgeSparseFile
type rockRidgeSparseFile struct {
	length     int
	high       uint32
	low        uint32
	tableDepth uint8
}

func (d rockRidgeSparseFile) Equal(o directoryEntrySystemUseExtension) bool {
	t, ok := o.(rockRidgeSparseFile)
	return ok && t == d
}
func (d rockRidgeSparseFile) Signature() string {
	return rockRidgeSignatureSparseFile
}
func (d rockRidgeSparseFile) Length() int {
	return d.length
}
func (d rockRidgeSparseFile) Version() uint8 {
	return 1
}
func (d rockRidgeSparseFile) Data() []byte {
	return []byte{}
}
func (d rockRidgeSparseFile) Bytes() []byte {
	b := make([]byte, d.length)
	copy(b[0:2], rockRidgeSignatureSparseFile)
	b[2] = uint8(d.Length())
	b[3] = d.Version()

	binary.LittleEndian.PutUint32(b[4:8], d.high)
	binary.BigEndian.PutUint32(b[8:12], d.high)
	if d.length == 21 {
		binary.LittleEndian.PutUint32(b[12:16], d.low)
		binary.BigEndian.PutUint32(b[16:20], d.low)
		b[20] = d.tableDepth
	}

	return b
}
func (d rockRidgeSparseFile) Continuable() bool {
	return false
}
func (d rockRidgeSparseFile) Merge([]directoryEntrySystemUseExtension) directoryEntrySystemUseExtension {
	return nil
}

func (r *rockRidgeExtension) parseSparseFile(b []byte) (directoryEntrySystemUseExtension, error) {
	targetSize := r.sfLength
	if len(b) != targetSize {
		//nolint:stylecheck // "Rock Ridge" is a proper noun
		return nil, fmt.Errorf("Rock Ridge SF extension must be %d bytes, but received %d", targetSize, len(b))
	}
	size := b[2]
	if size != uint8(targetSize) {
		//nolint:stylecheck // "Rock Ridge" is a proper noun
		return nil, fmt.Errorf("Rock Ridge SF extension must be %d bytes, but byte 2 indicated %d", targetSize, size)
	}
	version := b[3]
	if version != 1 {
		//nolint:stylecheck // "Rock Ridge" is a proper noun
		return nil, fmt.Errorf("Rock Ridge SF extension must be version 1, was %d", version)
	}
	sf := &rockRidgeSparseFile{
		high:   binary.LittleEndian.Uint32(b[4:8]),
		length: targetSize,
	}
	if targetSize == 21 {
		sf.low = binary.LittleEndian.Uint32(b[12:16])
		sf.tableDepth = b[20]
	}
	return sf, nil
}

// rockRidgeChildDirectory
type rockRidgeChildDirectory struct {
	location uint32
}

func (d rockRidgeChildDirectory) Equal(o directoryEntrySystemUseExtension) bool {
	t, ok := o.(rockRidgeChildDirectory)
	return ok && t == d
}
func (d rockRidgeChildDirectory) Signature() string {
	return rockRidgeSignatureChild
}
func (d rockRidgeChildDirectory) Length() int {
	return 12
}
func (d rockRidgeChildDirectory) Version() uint8 {
	return 1
}
func (d rockRidgeChildDirectory) Data() []byte {
	return []byte{}
}
func (d rockRidgeChildDirectory) Bytes() []byte {
	b := make([]byte, 12)
	copy(b[0:2], rockRidgeSignatureChild)
	b[2] = uint8(d.Length())
	b[3] = d.Version()
	binary.LittleEndian.PutUint32(b[4:8], d.location)
	binary.BigEndian.PutUint32(b[8:12], d.location)
	return b
}
func (d rockRidgeChildDirectory) Continuable() bool {
	return false
}
func (d rockRidgeChildDirectory) Merge([]directoryEntrySystemUseExtension) directoryEntrySystemUseExtension {
	return nil
}

func (r *rockRidgeExtension) parseChildDirectory(b []byte) (directoryEntrySystemUseExtension, error) {
	targetSize := 12
	if len(b) != targetSize {
		//nolint:stylecheck // "Rock Ridge" is a proper noun
		return nil, fmt.Errorf("Rock Ridge CL extension must be %d bytes, but received %d", targetSize, len(b))
	}
	size := b[2]
	if size != uint8(targetSize) {
		//nolint:stylecheck // "Rock Ridge" is a proper noun
		return nil, fmt.Errorf("Rock Ridge CL extension must be %d bytes, but byte 2 indicated %d", targetSize, size)
	}
	version := b[3]
	if version != 1 {
		//nolint:stylecheck // "Rock Ridge" is a proper noun
		return nil, fmt.Errorf("Rock Ridge CL extension must be version 1, was %d", version)
	}
	return rockRidgeChildDirectory{
		location: binary.LittleEndian.Uint32(b[4:8]),
	}, nil
}

// rockRidgeParentDirectory
type rockRidgeParentDirectory struct {
	location uint32
}

func (d rockRidgeParentDirectory) Equal(o directoryEntrySystemUseExtension) bool {
	t, ok := o.(rockRidgeParentDirectory)
	return ok && t == d
}
func (d rockRidgeParentDirectory) Signature() string {
	return rockRidgeSignatureParent
}
func (d rockRidgeParentDirectory) Length() int {
	return 12
}
func (d rockRidgeParentDirectory) Version() uint8 {
	return 1
}
func (d rockRidgeParentDirectory) Data() []byte {
	return []byte{}
}
func (d rockRidgeParentDirectory) Bytes() []byte {
	b := make([]byte, 12)
	copy(b[0:2], rockRidgeSignatureParent)
	b[2] = uint8(d.Length())
	b[3] = d.Version()
	binary.LittleEndian.PutUint32(b[4:8], d.location)
	binary.BigEndian.PutUint32(b[8:12], d.location)
	return b
}
func (d rockRidgeParentDirectory) Continuable() bool {
	return false
}
func (d rockRidgeParentDirectory) Merge([]directoryEntrySystemUseExtension) directoryEntrySystemUseExtension {
	return nil
}

func (r *rockRidgeExtension) parseParentDirectory(b []byte) (directoryEntrySystemUseExtension, error) {
	targetSize := 12
	if len(b) != targetSize {
		//nolint:stylecheck // "Rock Ridge" is a proper noun
		return nil, fmt.Errorf("Rock Ridge PL extension must be %d bytes, but received %d", targetSize, len(b))
	}
	size := b[2]
	if size != uint8(targetSize) {
		//nolint:stylecheck // "Rock Ridge" is a proper noun
		return nil, fmt.Errorf("Rock Ridge PL extension must be %d bytes, but byte 2 indicated %d", targetSize, size)
	}
	version := b[3]
	if version != 1 {
		//nolint:stylecheck // "Rock Ridge" is a proper noun
		return nil, fmt.Errorf("Rock Ridge PL extension must be version 1, was %d", version)
	}
	return rockRidgeParentDirectory{
		location: binary.LittleEndian.Uint32(b[4:8]),
	}, nil
}

// rockRidgeRelocatedDirectory
type rockRidgeRelocatedDirectory struct {
}

func (d rockRidgeRelocatedDirectory) Equal(o directoryEntrySystemUseExtension) bool {
	t, ok := o.(rockRidgeRelocatedDirectory)
	return ok && t == d
}
func (d rockRidgeRelocatedDirectory) Signature() string {
	return rockRidgeSignatureRelocatedDirectory
}
func (d rockRidgeRelocatedDirectory) Length() int {
	return 8
}
func (d rockRidgeRelocatedDirectory) Version() uint8 {
	return 1
}
func (d rockRidgeRelocatedDirectory) Data() []byte {
	return []byte{}
}
func (d rockRidgeRelocatedDirectory) Bytes() []byte {
	b := make([]byte, 8)
	copy(b[0:2], rockRidgeSignatureRelocatedDirectory)
	b[2] = uint8(d.Length())
	b[3] = d.Version()
	return b
}
func (d rockRidgeRelocatedDirectory) Continuable() bool {
	return false
}
func (d rockRidgeRelocatedDirectory) Merge([]directoryEntrySystemUseExtension) directoryEntrySystemUseExtension {
	return nil
}

func (r *rockRidgeExtension) parseRelocatedDirectory(b []byte) (directoryEntrySystemUseExtension, error) {
	targetSize := 4
	if len(b) != targetSize {
		//nolint:stylecheck // "Rock Ridge" is a proper noun
		return nil, fmt.Errorf("Rock Ridge RE extension must be %d bytes, but received %d", targetSize, len(b))
	}
	size := b[2]
	if size != uint8(targetSize) {
		//nolint:stylecheck // "Rock Ridge" is a proper noun
		return nil, fmt.Errorf("Rock Ridge RE extension must be %d bytes, but byte 2 indicated %d", targetSize, size)
	}
	version := b[3]
	if version != 1 {
		//nolint:stylecheck // "Rock Ridge" is a proper noun
		return nil, fmt.Errorf("Rock Ridge RE extension must be version 1, was %d", version)
	}
	return rockRidgeRelocatedDirectory{}, nil
}
 07070100000327000081A4000000000000000000000001645E367C00000214000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/iso9660/statt_others.go //go:build !windows
// +build !windows

//nolint:unconvert // linter gets confused in this file
package iso9660

import (
	"os"
	"syscall"
)

func statt(fi os.FileInfo) (links, uid, gid uint32) {
	if sys := fi.Sys(); sys != nil {
		if stat, ok := sys.(*syscall.Stat_t); ok {
			links, uid, gid = uint32(stat.Nlink), stat.Uid, stat.Gid
		}
	}

	return links, uid, gid
}

//nolint:deadcode // this is here solely so that linter does not complain on darwin about unconvert
func unused() uint32 {
	var f uint32 = 25
	return uint32(f)
}
07070100000328000081A4000000000000000000000001645E367C00000085000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/iso9660/statt_windows.go    // +build windows

package iso9660

func statt(sys interface{}) (uint32, uint32, uint32) {
	return uint32(0), uint32(0), uint32(0)
}
   07070100000329000081A4000000000000000000000001645E367C0000060B000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/iso9660/util.go package iso9660

import (
	"strings"
)

const (
	// KB represents one KB
	KB int64 = 1024
	// MB represents one MB
	MB int64 = 1024 * KB
	// GB represents one GB
	GB int64 = 1024 * MB
	// TB represents one TB
	TB int64 = 1024 * GB
)

func universalizePath(p string) string {
	// globalize the separator
	return strings.ReplaceAll(p, `\`, "/")
}
func splitPath(p string) []string {
	ps := universalizePath(p)
	// we need to split such that each one ends in "/", except possibly the last one
	parts := strings.Split(ps, "/")
	// eliminate empty parts
	ret := make([]string, 0)
	for _, sub := range parts {
		if sub != "" {
			ret = append(ret, sub)
		}
	}
	return ret
}

func ucs2StringToBytes(s string) []byte {
	rs := []rune(s)
	l := len(rs)
	b := make([]byte, 0, 2*l)
	// big endian
	for _, r := range rs {
		tmpb := []byte{byte(r >> 8), byte(r & 0x00ff)}
		b = append(b, tmpb...)
	}
	return b
}

// bytesToUCS2String convert bytes to UCS-2. We aren't 100% sure that this is right,
// as it is possible to pass it an odd number of characters. But good enough for now.
func bytesToUCS2String(b []byte) string {
	r := make([]rune, 0, 30)
	// now we can iterate - be careful in case we were given an odd number of bytes
	for i := 0; i < len(b); {
		// little endian
		var val uint16
		if i >= len(b)-1 {
			val = uint16(b[i])
		} else {
			val = uint16(b[i])<<8 + uint16(b[i+1])
		}
		r = append(r, rune(val))
		i += 2
	}
	return string(r)
}

// maxInt returns the larger of x or y.
func maxInt(x, y int) int {
	if x < y {
		return y
	}
	return x
}
 0707010000032A000081A4000000000000000000000001645E367C0000497E000000000000000000000000000000000000005F00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/iso9660/volume_descriptor.go    package iso9660

import (
	"bytes"
	"encoding/binary"
	"fmt"
	"strconv"
	"time"
)

type volumeDescriptorType uint8

const (
	volumeDescriptorBoot          volumeDescriptorType = 0x00
	volumeDescriptorPrimary       volumeDescriptorType = 0x01
	volumeDescriptorSupplementary volumeDescriptorType = 0x02
	volumeDescriptorPartition     volumeDescriptorType = 0x03
	volumeDescriptorTerminator    volumeDescriptorType = 0xff
)

const (
	isoIdentifier        uint64 = 0x4344303031 // string "CD001"
	isoVersion           uint8  = 0x01
	bootSystemIdentifier        = "EL TORITO SPECIFICATION"
)

// volumeDescriptor interface for any given type of volume descriptor
type volumeDescriptor interface {
	Type() volumeDescriptorType
	toBytes() []byte
	equal(volumeDescriptor) bool
}

type primaryVolumeDescriptor struct {
	systemIdentifier           string // length 32 bytes
	volumeIdentifier           string // length 32 bytes
	volumeSize                 uint32 // in blocks
	setSize                    uint16
	sequenceNumber             uint16
	blocksize                  uint16
	pathTableSize              uint32
	pathTableLLocation         uint32
	pathTableLOptionalLocation uint32
	pathTableMLocation         uint32
	pathTableMOptionalLocation uint32
	rootDirectoryEntry         *directoryEntry
	volumeSetIdentifier        string // 128 bytes
	publisherIdentifier        string // 128 bytes
	preparerIdentifier         string // 128 bytes
	applicationIdentifier      string // 128 bytes
	copyrightFile              string // 37 bytes
	abstractFile               string // 37 bytes
	bibliographicFile          string // 37 bytes
	creation                   time.Time
	modification               time.Time
	expiration                 time.Time
	effective                  time.Time
}

type bootVolumeDescriptor struct {
	location uint32 // length 1977 bytes; trailing 0x00 are stripped off
}
type terminatorVolumeDescriptor struct {
}

//nolint:structcheck // we accept some unused fields as useful for reference
type supplementaryVolumeDescriptor struct {
	volumeFlags                uint8
	systemIdentifier           string // length 32 bytes
	volumeIdentifier           string // length 32 bytes
	volumeSize                 uint64 // in bytes
	escapeSequences            []byte // 32 bytes
	setSize                    uint16
	sequenceNumber             uint16
	blocksize                  uint16
	pathTableSize              uint32
	pathTableLLocation         uint32
	pathTableLOptionalLocation uint32
	pathTableMLocation         uint32
	pathTableMOptionalLocation uint32
	rootDirectoryEntry         *directoryEntry
	volumeSetIdentifier        string // 128 bytes
	publisherIdentifier        string // 128 bytes
	preparerIdentifier         string // 128 bytes
	applicationIdentifier      string // 128 bytes
	copyrightFile              string // 37 bytes
	abstractFile               string // 37 bytes
	bibliographicFile          string // 37 bytes
	creation                   time.Time
	modification               time.Time
	expiration                 time.Time
	effective                  time.Time
}
type partitionVolumeDescriptor struct {
	data []byte // length 2048 bytes; trailing 0x00 are stripped off
}

type volumeDescriptors struct {
	descriptors []volumeDescriptor
	primary     *primaryVolumeDescriptor
}

func (v *volumeDescriptors) equal(a *volumeDescriptors) bool {
	if len(v.descriptors) != len(a.descriptors) {
		return false
	}
	// just convert everything to bytes and compare
	return bytes.Equal(v.toBytes(), a.toBytes())
}

func (v *volumeDescriptors) toBytes() []byte {
	b := make([]byte, 0, 20)
	for _, d := range v.descriptors {
		b = append(b, d.toBytes()...)
	}
	return b
}

// primaryVolumeDescriptor
func (v *primaryVolumeDescriptor) Type() volumeDescriptorType {
	return volumeDescriptorPrimary
}
func (v *primaryVolumeDescriptor) equal(a volumeDescriptor) bool {
	return bytes.Equal(v.toBytes(), a.toBytes())
}
func (v *primaryVolumeDescriptor) toBytes() []byte {
	b := volumeDescriptorFirstBytes(volumeDescriptorPrimary)

	copy(b[8:40], v.systemIdentifier)
	copy(b[40:72], v.volumeIdentifier)
	binary.LittleEndian.PutUint32(b[80:84], v.volumeSize)
	binary.BigEndian.PutUint32(b[84:88], v.volumeSize)
	binary.LittleEndian.PutUint16(b[120:122], v.setSize)
	binary.BigEndian.PutUint16(b[122:124], v.setSize)
	binary.LittleEndian.PutUint16(b[124:126], v.sequenceNumber)
	binary.BigEndian.PutUint16(b[126:128], v.sequenceNumber)
	binary.LittleEndian.PutUint16(b[128:130], v.blocksize)
	binary.BigEndian.PutUint16(b[130:132], v.blocksize)
	binary.LittleEndian.PutUint32(b[132:136], v.pathTableSize)
	binary.BigEndian.PutUint32(b[136:140], v.pathTableSize)
	binary.LittleEndian.PutUint32(b[140:144], v.pathTableLLocation)
	binary.LittleEndian.PutUint32(b[144:148], v.pathTableLOptionalLocation)
	binary.BigEndian.PutUint32(b[148:152], v.pathTableMLocation)
	binary.BigEndian.PutUint32(b[152:156], v.pathTableMOptionalLocation)

	rootDirEntry := make([]byte, 34)
	if v.rootDirectoryEntry != nil {
		// we will skip the extensions anyways, so the CE blocks do not matter
		rootDirEntrySlice, _ := v.rootDirectoryEntry.toBytes(true, []uint32{})
		rootDirEntry = rootDirEntrySlice[0]
	}
	copy(b[156:156+34], rootDirEntry)

	copy(b[190:190+128], v.volumeSetIdentifier)
	copy(b[318:318+128], v.publisherIdentifier)
	copy(b[446:446+128], v.preparerIdentifier)
	copy(b[574:574+128], v.applicationIdentifier)
	copy(b[702:702+37], v.copyrightFile)
	copy(b[739:739+37], v.abstractFile)
	copy(b[776:776+37], v.bibliographicFile)
	copy(b[813:813+17], timeToDecBytes(v.creation))
	copy(b[830:830+17], timeToDecBytes(v.modification))
	copy(b[847:847+17], timeToDecBytes(v.expiration))
	copy(b[864:864+17], timeToDecBytes(v.effective))

	// these two are set by the standard
	b[881] = 1
	b[882] = 0

	return b
}

// volumeDescriptorFromBytes create a volumeDescriptor struct from bytes
func volumeDescriptorFromBytes(b []byte) (volumeDescriptor, error) {
	if len(b) != int(volumeDescriptorSize) {
		return nil, fmt.Errorf("cannot read volume descriptor from bytes of length %d, must be %d", len(b), volumeDescriptorSize)
	}
	// validate the signature
	tmpb := make([]byte, 8)
	copy(tmpb[3:8], b[1:6])
	signature := binary.BigEndian.Uint64(tmpb)
	if signature != isoIdentifier {
		return nil, fmt.Errorf("mismatched ISO identifier in Volume Descriptor. Found %x expected %x", signature, isoIdentifier)
	}
	// validate the version
	version := b[6]
	if version != isoVersion {
		return nil, fmt.Errorf("mismatched ISO version in Volume Descriptor. Found %x expected %x", version, isoVersion)
	}
	// get the type and data - later we will be more intelligent about this and read actual primary volume info
	vdType := volumeDescriptorType(b[0])
	var vd volumeDescriptor
	var err error

	switch vdType {
	case volumeDescriptorPrimary:
		vd, err = parsePrimaryVolumeDescriptor(b)
		if err != nil {
			return nil, fmt.Errorf("unable to parse primary volume descriptor bytes: %v", err)
		}
	case volumeDescriptorBoot:
		vd, err = parseBootVolumeDescriptor(b)
		if err != nil {
			return nil, fmt.Errorf("unable to parse primary volume descriptor bytes: %v", err)
		}
	case volumeDescriptorTerminator:
		vd = &terminatorVolumeDescriptor{}
	case volumeDescriptorPartition:
		vd = &partitionVolumeDescriptor{
			data: b[8:volumeDescriptorSize],
		}
	case volumeDescriptorSupplementary:
		vd, err = parseSupplementaryVolumeDescriptor(b)
		if err != nil {
			return nil, fmt.Errorf("unable to parse primary volume descriptor bytes: %v", err)
		}
	default:
		return nil, fmt.Errorf("unknown volume descriptor type %d", vdType)
	}
	return vd, nil
}

func parsePrimaryVolumeDescriptor(b []byte) (*primaryVolumeDescriptor, error) {
	blocksize := binary.LittleEndian.Uint16(b[128:130])

	creation, err := decBytesToTime(b[813 : 813+17])
	if err != nil {
		return nil, fmt.Errorf("unable to convert creation date/time from bytes: %v", err)
	}
	modification, err := decBytesToTime(b[830 : 830+17])
	if err != nil {
		return nil, fmt.Errorf("unable to convert modification date/time from bytes: %v", err)
	}
	// expiration can be never
	nullBytes := []byte{48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0}
	var expiration, effective time.Time
	expirationBytes := b[847 : 847+17]
	effectiveBytes := b[864 : 864+17]
	if !bytes.Equal(expirationBytes, nullBytes) {
		expiration, err = decBytesToTime(expirationBytes)
		if err != nil {
			return nil, fmt.Errorf("unable to convert expiration date/time from bytes: %v", err)
		}
	}
	if !bytes.Equal(effectiveBytes, nullBytes) {
		effective, err = decBytesToTime(effectiveBytes)
		if err != nil {
			return nil, fmt.Errorf("unable to convert effective date/time from bytes: %v", err)
		}
	}

	rootDirEntry, err := dirEntryFromBytes(b[156:156+34], nil)
	if err != nil {
		return nil, fmt.Errorf("unable to read root directory entry: %v", err)
	}

	return &primaryVolumeDescriptor{
		systemIdentifier:           string(b[8:40]),
		volumeIdentifier:           string(b[40:72]),
		volumeSize:                 binary.LittleEndian.Uint32(b[80:84]),
		setSize:                    binary.LittleEndian.Uint16(b[120:122]),
		sequenceNumber:             binary.LittleEndian.Uint16(b[124:126]),
		blocksize:                  blocksize,
		pathTableSize:              binary.LittleEndian.Uint32(b[132:136]),
		pathTableLLocation:         binary.LittleEndian.Uint32(b[140:144]),
		pathTableLOptionalLocation: binary.LittleEndian.Uint32(b[144:148]),
		pathTableMLocation:         binary.BigEndian.Uint32(b[148:152]),
		pathTableMOptionalLocation: binary.BigEndian.Uint32(b[152:156]),
		volumeSetIdentifier:        string(b[190 : 190+128]),
		publisherIdentifier:        string(b[318 : 318+128]),
		preparerIdentifier:         string(b[446 : 446+128]),
		applicationIdentifier:      string(b[574 : 574+128]),
		copyrightFile:              string(b[702 : 702+37]),
		abstractFile:               string(b[739 : 739+37]),
		bibliographicFile:          string(b[776 : 776+37]),
		creation:                   creation,
		modification:               modification,
		expiration:                 expiration,
		effective:                  effective,
		rootDirectoryEntry:         rootDirEntry,
	}, nil
}

// terminatorVolumeDescriptor
func (v *terminatorVolumeDescriptor) Type() volumeDescriptorType {
	return volumeDescriptorTerminator
}
func (v *terminatorVolumeDescriptor) equal(a volumeDescriptor) bool {
	return bytes.Equal(v.toBytes(), a.toBytes())
}
func (v *terminatorVolumeDescriptor) toBytes() []byte {
	b := volumeDescriptorFirstBytes(volumeDescriptorTerminator)
	return b
}

// bootVolumeDescriptor
func (v *bootVolumeDescriptor) Type() volumeDescriptorType {
	return volumeDescriptorBoot
}
func (v *bootVolumeDescriptor) equal(a volumeDescriptor) bool {
	return bytes.Equal(v.toBytes(), a.toBytes())
}
func (v *bootVolumeDescriptor) toBytes() []byte {
	b := volumeDescriptorFirstBytes(volumeDescriptorBoot)
	copy(b[7:39], bootSystemIdentifier)
	binary.LittleEndian.PutUint32(b[0x47:0x4b], v.location)

	return b
}

// parseBootVolumeDescriptor
func parseBootVolumeDescriptor(b []byte) (*bootVolumeDescriptor, error) {
	systemIdentifier := string(b[0x7 : 0x7+len(bootSystemIdentifier)])
	if systemIdentifier != bootSystemIdentifier {
		return nil, fmt.Errorf("incorrect specification, actual '%s' expected '%s'", systemIdentifier, bootSystemIdentifier)
	}
	location := binary.LittleEndian.Uint32(b[0x47:0x4b])
	return &bootVolumeDescriptor{location: location}, nil
}

// supplementaryVolumeDescriptor
func parseSupplementaryVolumeDescriptor(b []byte) (*supplementaryVolumeDescriptor, error) {
	blocksize := binary.LittleEndian.Uint16(b[128:130])
	volumesize := binary.LittleEndian.Uint32(b[80:84])
	volumesizeBytes := uint64(blocksize) * uint64(volumesize)

	creation, err := decBytesToTime(b[813 : 813+17])
	if err != nil {
		return nil, fmt.Errorf("unable to convert creation date/time from bytes: %v", err)
	}
	modification, err := decBytesToTime(b[830 : 830+17])
	if err != nil {
		return nil, fmt.Errorf("unable to convert modification date/time from bytes: %v", err)
	}
	// expiration can be never
	nullBytes := []byte{48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0}
	var expiration, effective time.Time
	expirationBytes := b[847 : 847+17]
	effectiveBytes := b[864 : 864+17]
	if !bytes.Equal(expirationBytes, nullBytes) {
		expiration, err = decBytesToTime(expirationBytes)
		if err != nil {
			return nil, fmt.Errorf("unable to convert expiration date/time from bytes: %v", err)
		}
	}
	if !bytes.Equal(effectiveBytes, nullBytes) {
		effective, err = decBytesToTime(effectiveBytes)
		if err != nil {
			return nil, fmt.Errorf("unable to convert effective date/time from bytes: %v", err)
		}
	}

	// no susp extensions for the dir entry in the volume descriptor
	rootDirEntry, err := dirEntryFromBytes(b[156:156+34], nil)
	if err != nil {
		return nil, fmt.Errorf("unable to read root directory entry: %v", err)
	}

	return &supplementaryVolumeDescriptor{
		systemIdentifier:           string(b[8:40]),
		volumeIdentifier:           string(b[40:72]),
		volumeSize:                 volumesizeBytes,
		setSize:                    binary.LittleEndian.Uint16(b[120:122]),
		sequenceNumber:             binary.LittleEndian.Uint16(b[124:126]),
		blocksize:                  blocksize,
		pathTableSize:              binary.LittleEndian.Uint32(b[132:136]),
		pathTableLLocation:         binary.LittleEndian.Uint32(b[140:144]),
		pathTableLOptionalLocation: binary.LittleEndian.Uint32(b[144:148]),
		pathTableMLocation:         binary.BigEndian.Uint32(b[148:152]),
		pathTableMOptionalLocation: binary.BigEndian.Uint32(b[152:156]),
		volumeSetIdentifier:        bytesToUCS2String(b[190 : 190+128]),
		publisherIdentifier:        bytesToUCS2String(b[318 : 318+128]),
		preparerIdentifier:         bytesToUCS2String(b[446 : 446+128]),
		applicationIdentifier:      bytesToUCS2String(b[574 : 574+128]),
		copyrightFile:              bytesToUCS2String(b[702 : 702+37]),
		abstractFile:               bytesToUCS2String(b[739 : 739+37]),
		bibliographicFile:          bytesToUCS2String(b[776 : 776+37]),
		creation:                   creation,
		modification:               modification,
		expiration:                 expiration,
		effective:                  effective,
		rootDirectoryEntry:         rootDirEntry,
	}, nil
}
func (v *supplementaryVolumeDescriptor) Type() volumeDescriptorType {
	return volumeDescriptorSupplementary
}
func (v *supplementaryVolumeDescriptor) equal(a volumeDescriptor) bool {
	return bytes.Equal(v.toBytes(), a.toBytes())
}
func (v *supplementaryVolumeDescriptor) toBytes() []byte {
	b := volumeDescriptorFirstBytes(volumeDescriptorSupplementary)

	copy(b[8:40], v.systemIdentifier)
	copy(b[40:72], v.volumeIdentifier)
	blockcount := uint32(v.volumeSize / uint64(v.blocksize))
	binary.LittleEndian.PutUint32(b[80:84], blockcount)
	binary.BigEndian.PutUint32(b[84:88], blockcount)
	binary.LittleEndian.PutUint16(b[120:122], v.setSize)
	binary.BigEndian.PutUint16(b[122:124], v.setSize)
	binary.LittleEndian.PutUint16(b[124:126], v.sequenceNumber)
	binary.BigEndian.PutUint16(b[126:128], v.sequenceNumber)
	binary.LittleEndian.PutUint16(b[128:130], v.blocksize)
	binary.BigEndian.PutUint16(b[130:132], v.blocksize)
	binary.LittleEndian.PutUint32(b[132:136], v.pathTableSize)
	binary.BigEndian.PutUint32(b[136:140], v.pathTableSize)
	binary.LittleEndian.PutUint32(b[140:144], v.pathTableLLocation)
	binary.LittleEndian.PutUint32(b[144:148], v.pathTableLOptionalLocation)
	binary.BigEndian.PutUint32(b[148:152], v.pathTableMLocation)
	binary.BigEndian.PutUint32(b[152:156], v.pathTableMOptionalLocation)

	rootDirEntry := make([]byte, 34)
	if v.rootDirectoryEntry != nil {
		// we will skip the extensions anyways, so the CE blocks do not matter
		rootDirEntrySlice, _ := v.rootDirectoryEntry.toBytes(true, []uint32{})
		rootDirEntry = rootDirEntrySlice[0]
	}
	copy(b[156:156+34], rootDirEntry)

	copy(b[190:190+128], ucs2StringToBytes(v.volumeSetIdentifier))
	copy(b[318:318+128], ucs2StringToBytes(v.publisherIdentifier))
	copy(b[446:446+128], ucs2StringToBytes(v.preparerIdentifier))
	copy(b[574:574+128], ucs2StringToBytes(v.applicationIdentifier))
	copy(b[702:702+37], ucs2StringToBytes(v.copyrightFile))
	copy(b[739:739+37], ucs2StringToBytes(v.abstractFile))
	copy(b[776:776+37], ucs2StringToBytes(v.bibliographicFile))
	copy(b[813:813+17], timeToDecBytes(v.creation))
	copy(b[830:830+17], timeToDecBytes(v.modification))
	copy(b[847:847+17], timeToDecBytes(v.expiration))
	copy(b[864:864+17], timeToDecBytes(v.effective))

	return b
}

// partitionVolumeDescriptor
func (v *partitionVolumeDescriptor) Type() volumeDescriptorType {
	return volumeDescriptorPartition
}
func (v *partitionVolumeDescriptor) equal(a volumeDescriptor) bool {
	return bytes.Equal(v.toBytes(), a.toBytes())
}
func (v *partitionVolumeDescriptor) toBytes() []byte {
	b := volumeDescriptorFirstBytes(volumeDescriptorPartition)
	copy(b[7:], v.data)
	return b
}

// utilities
func volumeDescriptorFirstBytes(t volumeDescriptorType) []byte {
	b := make([]byte, volumeDescriptorSize)

	b[0] = byte(t)
	tmpb := make([]byte, 8)
	binary.BigEndian.PutUint64(tmpb, isoIdentifier)
	copy(b[1:6], tmpb[3:8])
	b[6] = isoVersion
	return b
}

func decBytesToTime(b []byte) (time.Time, error) {
	year := string(b[0:4])
	month := string(b[4:6])
	date := string(b[6:8])
	hour := string(b[8:10])
	minute := string(b[10:12])
	second := string(b[12:14])
	csec := string(b[14:16])
	offset := int(int8(b[16]))
	location := offset * 15
	format := "2006-01-02T15:04:05-07:00"
	offsetHr := location / 60
	offsetMin := location % 60
	offsetString := ""
	// if negative offset, show it just on the hour part, not twice, so we end up with "-06:30" and not "-06:-30"
	switch {
	case offset == 0:
		offsetString = "+00:00"
	case offset < 0:
		offsetString = fmt.Sprintf("-%02d:%02d", -offsetHr, -offsetMin)
	case offset > 0:
		offsetString = fmt.Sprintf("+%02d:%02d", offsetHr, offsetMin)
	}
	return time.Parse(format, fmt.Sprintf("%s-%s-%sT%s:%s:%s.%s%s", year, month, date, hour, minute, second, csec, offsetString))
}
func timeToDecBytes(t time.Time) []byte {
	year := strconv.Itoa(t.Year())
	month := strconv.Itoa(int(t.Month()))
	date := strconv.Itoa(t.Day())
	hour := strconv.Itoa(t.Hour())
	minute := strconv.Itoa(t.Minute())
	second := strconv.Itoa(t.Second())
	csec := strconv.Itoa(t.Nanosecond() / 1e+7)
	_, offset := t.Zone()
	b := make([]byte, 17)
	copy(b[0:4], fmt.Sprintf("%04s", year))
	copy(b[4:6], fmt.Sprintf("%02s", month))
	copy(b[6:8], fmt.Sprintf("%02s", date))
	copy(b[8:10], fmt.Sprintf("%02s", hour))
	copy(b[10:12], fmt.Sprintf("%02s", minute))
	copy(b[12:14], fmt.Sprintf("%02s", second))
	copy(b[14:16], fmt.Sprintf("%02s", csec))
	b[16] = byte(offset / 60 / 15)
	return b
}
  0707010000032B000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/squashfs    0707010000032C000081A4000000000000000000000001645E367C00002372000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/squashfs/compressor.go  package squashfs

import (
	"bytes"
	"compress/zlib"
	"encoding/binary"
	"fmt"
	"io"

	"github.com/pierrec/lz4"
	"github.com/ulikunitz/xz"
	"github.com/ulikunitz/xz/lzma"
)

// Compressor defines a compressor. Fulfilled by various implementations in this package
type Compressor interface {
	compress([]byte) ([]byte, error)
	decompress([]byte) ([]byte, error)
	loadOptions([]byte) error
	optionsBytes() []byte
	flavour() compression
}

// CompressorLzma lzma compression
type CompressorLzma struct {
}

func (c *CompressorLzma) compress(in []byte) ([]byte, error) {
	var b bytes.Buffer
	lz, err := lzma.NewWriter(&b)
	if err != nil {
		return nil, fmt.Errorf("error creating lzma compressor: %v", err)
	}
	if _, err := lz.Write(in); err != nil {
		return nil, err
	}
	if err := lz.Close(); err != nil {
		return nil, err
	}
	return b.Bytes(), nil
}
func (c *CompressorLzma) decompress(in []byte) ([]byte, error) {
	b := bytes.NewReader(in)
	lz, err := lzma.NewReader(b)
	if err != nil {
		return nil, fmt.Errorf("error creating lzma decompressor: %v", err)
	}
	p, err := io.ReadAll(lz)
	if err != nil {
		return nil, fmt.Errorf("error decompressing: %v", err)
	}
	return p, nil
}
func (c *CompressorLzma) loadOptions(b []byte) error {
	// lzma has no supported optiosn
	return nil
}
func (c *CompressorLzma) optionsBytes() []byte {
	return []byte{}
}
func (c *CompressorLzma) flavour() compression {
	return compressionLzma
}

type GzipStrategy uint16

// gzip strategy options
const (
	GzipDefault          GzipStrategy = 0x1
	GzipFiltered         GzipStrategy = 0x2
	GzipHuffman          GzipStrategy = 0x4
	GzipRunLengthEncoded GzipStrategy = 0x8
	GzipFixed            GzipStrategy = 0x10
)

// CompressorGzip gzip compression
type CompressorGzip struct {
	CompressionLevel uint32
	WindowSize       uint16
	Strategies       map[GzipStrategy]bool
}

func (c *CompressorGzip) compress(in []byte) ([]byte, error) {
	var b bytes.Buffer
	gz, err := zlib.NewWriterLevel(&b, int(c.CompressionLevel))
	if err != nil {
		return nil, fmt.Errorf("error creating gzip compressor: %v", err)
	}
	if _, err := gz.Write(in); err != nil {
		return nil, err
	}
	if err := gz.Flush(); err != nil {
		return nil, err
	}
	if err := gz.Close(); err != nil {
		return nil, err
	}
	return b.Bytes(), nil
}
func (c *CompressorGzip) decompress(in []byte) ([]byte, error) {
	b := bytes.NewReader(in)
	gz, err := zlib.NewReader(b)
	if err != nil {
		return nil, fmt.Errorf("error creating gzip decompressor: %v", err)
	}
	p, err := io.ReadAll(gz)
	if err != nil {
		return nil, fmt.Errorf("error decompressing: %v", err)
	}
	return p, nil
}

func (c *CompressorGzip) loadOptions(b []byte) error {
	expected := 8
	if len(b) != expected {
		return fmt.Errorf("cannot parse gzip options, received %d bytes expected %d", len(b), expected)
	}
	c.CompressionLevel = binary.LittleEndian.Uint32(b[0:4])
	c.WindowSize = binary.LittleEndian.Uint16(b[4:6])
	strategies := map[GzipStrategy]bool{}
	flags := binary.LittleEndian.Uint16(b[6:8])
	for _, strategy := range []GzipStrategy{GzipDefault, GzipFiltered, GzipHuffman, GzipRunLengthEncoded, GzipFixed} {
		if flags&uint16(strategy) == uint16(strategy) {
			strategies[strategy] = true
		}
	}
	c.Strategies = strategies
	return nil
}
func (c *CompressorGzip) optionsBytes() []byte {
	b := make([]byte, 8)
	binary.LittleEndian.PutUint32(b[0:4], c.CompressionLevel)
	binary.LittleEndian.PutUint16(b[4:6], c.WindowSize)
	var flags uint16
	for _, strategy := range []GzipStrategy{GzipDefault, GzipFiltered, GzipHuffman, GzipRunLengthEncoded, GzipFixed} {
		if c.Strategies[strategy] {
			flags |= uint16(strategy)
		}
	}
	binary.LittleEndian.PutUint16(b[6:8], flags)
	return b
}
func (c *CompressorGzip) flavour() compression {
	return compressionGzip
}

// XzFilter filter for xz compression
type XzFilter uint32

// xz filter options
const (
	XzFilterX86      XzFilter = 0x1
	XzFilterPowerPC  XzFilter = 0x2
	XzFilterIA64     XzFilter = 0x4
	XzFilterArm      XzFilter = 0x8
	XzFilterArmThumb XzFilter = 0x10
	XzFilterSparc    XzFilter = 0x20
)

// CompressorXz xz compression
type CompressorXz struct {
	DictionarySize    uint32
	ExecutableFilters map[XzFilter]bool
}

func (c *CompressorXz) compress(in []byte) ([]byte, error) {
	var b bytes.Buffer
	config := xz.WriterConfig{
		DictCap: int(c.DictionarySize),
	}
	xzWriter, err := config.NewWriter(&b)
	if err != nil {
		return nil, fmt.Errorf("error creating xz compressor: %v", err)
	}
	if _, err := xzWriter.Write(in); err != nil {
		return nil, err
	}
	if err := xzWriter.Close(); err != nil {
		return nil, err
	}
	return b.Bytes(), nil
}
func (c *CompressorXz) decompress(in []byte) ([]byte, error) {
	b := bytes.NewReader(in)
	xzReader, err := xz.NewReader(b)
	if err != nil {
		return nil, fmt.Errorf("error creating xz decompressor: %v", err)
	}
	p, err := io.ReadAll(xzReader)
	if err != nil {
		return nil, fmt.Errorf("error decompressing: %v", err)
	}
	return p, nil
}
func (c *CompressorXz) loadOptions(b []byte) error {
	expected := 8
	if len(b) != expected {
		return fmt.Errorf("cannot parse xz options, received %d bytes expected %d", len(b), expected)
	}
	c.DictionarySize = binary.LittleEndian.Uint32(b[0:4])
	filters := map[XzFilter]bool{}
	flags := binary.LittleEndian.Uint32(b[4:8])
	for _, filter := range []XzFilter{XzFilterX86, XzFilterPowerPC, XzFilterIA64, XzFilterArm, XzFilterArmThumb, XzFilterSparc} {
		if flags&uint32(filter) == uint32(filter) {
			filters[filter] = true
		}
	}
	c.ExecutableFilters = filters
	return nil
}
func (c *CompressorXz) optionsBytes() []byte {
	b := make([]byte, 8)
	binary.LittleEndian.PutUint32(b[0:4], c.DictionarySize)
	var flags uint32
	for _, filter := range []XzFilter{XzFilterX86, XzFilterPowerPC, XzFilterIA64, XzFilterArm, XzFilterArmThumb, XzFilterSparc} {
		if c.ExecutableFilters[filter] {
			flags |= uint32(filter)
		}
	}
	binary.LittleEndian.PutUint32(b[4:8], flags)
	return b
}
func (c *CompressorXz) flavour() compression {
	return compressionXz
}

// lz4 compression
type lz4Flag uint32

const (
	lz4HighCompression lz4Flag = 0x1
)
const (
	lz4version1 uint32 = 1
)

// CompressorLz4 lz4 compression
type CompressorLz4 struct {
	version uint32
	flags   map[lz4Flag]bool
}

func (c *CompressorLz4) compress(in []byte) ([]byte, error) {
	var b bytes.Buffer
	lz := lz4.NewWriter(&b)
	if _, err := lz.Write(in); err != nil {
		return nil, err
	}
	if err := lz.Close(); err != nil {
		return nil, err
	}
	return b.Bytes(), nil
}
func (c *CompressorLz4) decompress(in []byte) ([]byte, error) {
	b := bytes.NewReader(in)
	lz := lz4.NewReader(b)
	p, err := io.ReadAll(lz)
	if err != nil {
		return nil, fmt.Errorf("error decompressing: %v", err)
	}
	return p, nil
}
func (c *CompressorLz4) loadOptions(b []byte) error {
	expected := 8
	if len(b) != expected {
		return fmt.Errorf("cannot parse lz4 options, received %d bytes expected %d", len(b), expected)
	}
	version := binary.LittleEndian.Uint32(b[0:4])
	if version != lz4version1 {
		return fmt.Errorf("compressed with lz4 version %d, only support %d", version, lz4version1)
	}
	c.version = version
	flagMap := map[lz4Flag]bool{}
	flags := binary.LittleEndian.Uint32(b[4:8])
	for _, f := range []lz4Flag{lz4HighCompression} {
		if flags&uint32(f) == uint32(f) {
			flagMap[f] = true
		}
	}
	c.flags = flagMap
	return nil
}
func (c *CompressorLz4) optionsBytes() []byte {
	b := make([]byte, 8)
	binary.LittleEndian.PutUint32(b[0:4], c.version)
	var flags uint32
	for _, f := range []lz4Flag{lz4HighCompression} {
		if c.flags[f] {
			flags |= uint32(f)
		}
	}
	binary.LittleEndian.PutUint32(b[4:8], flags)
	return b
}
func (c *CompressorLz4) flavour() compression {
	return compressionLz4
}

// CompressorZstd zstd compression
type CompressorZstd struct {
	level uint32
}

const (
	zstdMinLevel uint32 = 1
	zstdMaxLevel uint32 = 22
)

func (c *CompressorZstd) loadOptions(b []byte) error {
	expected := 4
	if len(b) != expected {
		return fmt.Errorf("cannot parse zstd options, received %d bytes expected %d", len(b), expected)
	}
	level := binary.LittleEndian.Uint32(b[0:4])
	if level < zstdMinLevel || level > zstdMaxLevel {
		return fmt.Errorf("zstd compression level requested %d, must be at least %d and not more thann %d", level, zstdMinLevel, zstdMaxLevel)
	}
	c.level = level
	return nil
}
func (c *CompressorZstd) optionsBytes() []byte {
	b := make([]byte, 4)
	binary.LittleEndian.PutUint32(b[0:4], c.level)
	return b
}
func (c *CompressorZstd) flavour() compression {
	return compressionZstd
}

func newCompressor(flavour compression) (Compressor, error) {
	var c Compressor
	switch flavour {
	case compressionNone:
		c = nil
	case compressionGzip:
		c = &CompressorGzip{}
	case compressionLzma:
		c = &CompressorLzma{}
	case compressionLzo:
		return nil, fmt.Errorf("LZO compression not yet supported")
	case compressionXz:
		c = &CompressorXz{}
	case compressionLz4:
		c = &CompressorLz4{}
	case compressionZstd:
		return nil, fmt.Errorf("zstd compression not yet supported")
	default:
		return nil, fmt.Errorf("unknown compression type: %d", flavour)
	}
	return c, nil
}
  0707010000032D000081A4000000000000000000000001645E367C0000158B000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/squashfs/directory.go   package squashfs

import (
	"encoding/binary"
	"fmt"
)

const (
	maxDirEntries   = 256
	dirHeaderSize   = 12
	dirEntryMinSize = 8
	dirNameMaxSize  = 256
)

// directory represents a contiguous directory on disk, composed of one header
// and one or more entries under that header, i.e. directoryEntryRaw. An entire
// directory may be composed of one or more of these "directory", depending
// on how many headers it requires
type directory struct {
	inodeIndex uint32
	entries    []*directoryEntryRaw
}

type directoryEntryRaw struct {
	offset         uint16
	inodeNumber    uint32
	inodeType      inodeType
	name           string
	isSubdirectory bool
	startBlock     uint32
}

func (d *directoryEntryRaw) toBytes(inodeIndex uint32) []byte {
	b := make([]byte, 8)
	nameBytes := []byte(d.name)
	binary.LittleEndian.PutUint16(b[0:2], d.offset)
	binary.LittleEndian.PutUint16(b[2:4], uint16(d.inodeNumber-inodeIndex))
	binary.LittleEndian.PutUint16(b[4:6], uint16(d.inodeType))
	binary.LittleEndian.PutUint16(b[6:8], uint16(len(nameBytes)-1))
	b = append(b, nameBytes...)
	return b
}

type directoryHeader struct {
	count      uint32
	startBlock uint32
	inode      uint32
}

type directoryEntryGroup struct {
	header  *directoryHeader
	entries []*directoryEntryRaw
}

// parse raw bytes of a directory to get the contents
func parseDirectory(b []byte) (*directory, error) {
	// must have at least one header
	if _, err := parseDirectoryHeader(b); err != nil {
		return nil, fmt.Errorf("could not parse directory header: %v", err)
	}
	entries := make([]*directoryEntryRaw, 0)
	for pos := 0; pos+dirHeaderSize < len(b); {
		directoryHeader, err := parseDirectoryHeader(b[pos:])
		if err != nil {
			return nil, fmt.Errorf("could not parse directory header: %v", err)
		}
		if directoryHeader.count+1 > maxDirEntries {
			return nil, fmt.Errorf("corrupted directory, had %d entries instead of max %d", directoryHeader.count+1, maxDirEntries)
		}
		pos += dirHeaderSize
		for count := uint32(0); count < directoryHeader.count; count++ {
			entry, size, err := parseDirectoryEntry(b[pos:], directoryHeader.inode)
			if err != nil {
				return nil, fmt.Errorf("unable to parse entry at position %d: %v", pos, err)
			}
			entry.startBlock = directoryHeader.startBlock
			entries = append(entries, entry)
			// increment the position
			pos += size
		}
	}

	return &directory{
		entries: entries,
	}, nil
}

func (d *directory) toBytes(in uint32) []byte {
	// need to group these into chunks that would share a header
	var (
		b      []byte
		groups []*directoryEntryGroup
		group  *directoryEntryGroup
	)
	for _, e := range d.entries {
		// we need a new header if one of the following:
		// - we don't have one yet
		// - inode block changes
		// - inode offset > +/- 32k from the inode in the header,
		if group == nil || group.header.startBlock != e.startBlock {
			group = &directoryEntryGroup{
				header: &directoryHeader{
					startBlock: e.startBlock,
					inode:      in,
				},
			}
			groups = append(groups, group)
		}
		group.header.count++
		group.entries = append(group.entries, e)
	}
	// now convert all of the chunks to bytes
	for _, group := range groups {
		b = append(b, group.header.toBytes()...)
		for _, e := range group.entries {
			b = append(b, e.toBytes(in)...)
		}
	}
	return b
}

func (d *directory) equal(b *directory) bool {
	if d == nil && b == nil {
		return true
	}
	if (d == nil && b != nil) || (d != nil && b == nil) {
		return false
	}
	// entries
	if len(d.entries) != len(b.entries) {
		return false
	}
	for i, e := range d.entries {
		if *e != *b.entries[i] {
			return false
		}
	}
	return true
}

// parse the header of a directory
func parseDirectoryHeader(b []byte) (*directoryHeader, error) {
	if len(b) < dirHeaderSize {
		return nil, fmt.Errorf("header was %d bytes, less than minimum %d", len(b), dirHeaderSize)
	}
	return &directoryHeader{
		count:      binary.LittleEndian.Uint32(b[0:4]) + 1,
		startBlock: binary.LittleEndian.Uint32(b[4:8]),
		inode:      binary.LittleEndian.Uint32(b[8:12]),
	}, nil
}
func (d *directoryHeader) toBytes() []byte {
	b := make([]byte, dirHeaderSize)

	binary.LittleEndian.PutUint32(b[0:4], d.count-1)
	binary.LittleEndian.PutUint32(b[4:8], d.startBlock)
	binary.LittleEndian.PutUint32(b[8:12], d.inode)
	return b
}

// parse a raw directory entry
func parseDirectoryEntry(b []byte, in uint32) (*directoryEntryRaw, int, error) {
	// ensure we have enough bytes to parse
	if len(b) < dirEntryMinSize {
		return nil, 0, fmt.Errorf("directory entry was %d bytes, less than minimum %d", len(b), dirEntryMinSize)
	}

	offset := binary.LittleEndian.Uint16(b[0:2])
	inode := uint32(binary.LittleEndian.Uint16(b[2:4])) + in
	entryType := binary.LittleEndian.Uint16(b[4:6])
	nameSize := binary.LittleEndian.Uint16(b[6:8])
	realNameSize := nameSize + 1

	// make sure name is legitimate size
	if nameSize > dirNameMaxSize {
		return nil, 0, fmt.Errorf("name size was %d bytes, greater than maximum %d", nameSize, dirNameMaxSize)
	}
	if int(realNameSize+dirEntryMinSize) > len(b) {
		return nil, 0, fmt.Errorf("dir entry plus size of name is %d, larger than available bytes %d", nameSize+dirEntryMinSize, len(b))
	}

	// read in the name
	name := string(b[8 : 8+realNameSize])
	iType := inodeType(entryType)
	return &directoryEntryRaw{
		offset:         offset,
		inodeNumber:    inode,
		inodeType:      iType,
		isSubdirectory: iType == inodeBasicDirectory || iType == inodeExtendedDirectory,
		name:           name,
	}, int(8 + realNameSize), nil
}
 0707010000032E000081A4000000000000000000000001645E367C00000A5D000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/squashfs/directoryentry.go  package squashfs

import (
	"os"
	"time"
)

// FileStat is the extended data underlying a single file, similar to https://golang.org/pkg/syscall/#Stat_t
type FileStat struct {
	uid    uint32
	gid    uint32
	xattrs map[string]string
}

func (f *FileStat) equal(o *FileStat) bool {
	if f.uid != o.uid || f.gid != o.gid {
		return false
	}
	if len(f.xattrs) != len(o.xattrs) {
		return false
	}
	for k, v := range f.xattrs {
		ov, ok := o.xattrs[k]
		if !ok {
			return false
		}
		if ov != v {
			return false
		}
	}
	return true
}

// UID get uid of file
func (f *FileStat) UID() uint32 {
	return f.uid
}

// GID get gid of file
func (f *FileStat) GID() uint32 {
	return f.gid
}

// Xattrs get extended attributes of file
func (f *FileStat) Xattrs() map[string]string {
	return f.xattrs
}

// directoryEntry is a single directory entry
// it combines information from inode and the actual entry
// also fulfills os.FileInfo
//
//	Name() string       // base name of the file
//	Size() int64        // length in bytes for regular files; system-dependent for others
//	Mode() FileMode     // file mode bits
//	ModTime() time.Time // modification time
//	IsDir() bool        // abbreviation for Mode().IsDir()
//	Sys() interface{}   // underlying data source (can return nil)
type directoryEntry struct {
	isSubdirectory bool
	name           string
	size           int64
	modTime        time.Time
	mode           os.FileMode
	inode          inode
	sys            FileStat
}

func (d *directoryEntry) equal(o *directoryEntry) bool {
	if o == nil {
		return false
	}
	if !d.sys.equal(&o.sys) {
		return false
	}
	if d.inode == nil && o.inode == nil {
		return true
	}
	if (d.inode == nil && o.inode != nil) || (d.inode != nil && o.inode == nil) {
		return false
	}
	if !d.inode.equal(o.inode) {
		return false
	}
	return d.isSubdirectory == o.isSubdirectory && d.name == o.name && d.size == o.size && d.modTime == o.modTime && d.mode == o.mode
}

// Name string       // base name of the file
func (d *directoryEntry) Name() string {
	return d.name
}

// Size int64        // length in bytes for regular files; system-dependent for others
func (d *directoryEntry) Size() int64 {
	return d.size
}

// IsDir bool        // abbreviation for Mode().IsDir()
func (d *directoryEntry) IsDir() bool {
	return d.isSubdirectory
}

// ModTime time.Time // modification time
func (d *directoryEntry) ModTime() time.Time {
	return d.modTime
}

// Mode FileMode     // file mode bits
func (d *directoryEntry) Mode() os.FileMode {
	return d.mode
}

// Sys interface{}   // underlying data source (can return nil)
func (d *directoryEntry) Sys() interface{} {
	return d.sys
}
   0707010000032F000081A4000000000000000000000001645E367C00000117000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/squashfs/doc.go // Package squashfs provides support for reading and creating squashfs filesystems
// references:
//
//	https://www.kernel.org/doc/Documentation/filesystems/squashfs.txt
//	https://dr-emann.github.io/squashfs/
//	https://elinux.org/images/3/32/Squashfs-elce.pdf
package squashfs
 07070100000330000081A4000000000000000000000001645E367C0000110F000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/squashfs/file.go    package squashfs

import (
	"fmt"
	"io"
	"os"
)

// File represents a single file in a squashfs filesystem
//
//	it is NOT used when working in a workspace, where we just use the underlying OS
//	note that the inode for a file can be the basicFile or extendedFile. We just use extendedFile to
//	include all of the data
type File struct {
	*extendedFile
	isReadWrite bool
	isAppend    bool
	offset      int64
	filesystem  *FileSystem
}

// Read reads up to len(b) bytes from the File.
// It returns the number of bytes read and any error encountered.
// At end of file, Read returns 0, io.EOF
// reads from the last known offset in the file from last read or write
// use Seek() to set at a particular point
func (fl *File) Read(b []byte) (int, error) {
	if fl == nil || fl.filesystem == nil {
		return 0, os.ErrClosed
	}
	// squashfs files are *mostly* contiguous, we only need the starting location and size for whole blocks
	// if there are fragments, we need the location of those as well

	// logic:
	// 1- find the uncompressed blocksize from the superblock
	// 2- calculate the relative blocks needed for this file
	//  e.g. if uncompressed blocksize is 100 bytes, and we want from byte 240 for 200 bytes,
	//       then we need blocks 2,3,4 of this file
	// 3- find the compressed blockSizes for this file from inode.blockSizes
	//       this tells us how many bytes to read for each block from the disk
	// 4- find the starting location for the first block for this file from inode.startBlock
	//      e.g. if starting block is at position 10245, then we want blocks 27,28,29 from the disk
	// 5- read in and uncompress the necessary blocks
	fs := fl.filesystem
	size := int(fl.size()) - int(fl.offset)
	location := int64(fl.startBlock)
	maxRead := size

	// if there is nothing left to read, just return EOF
	if size <= 0 {
		return 0, io.EOF
	}

	// we stop when we hit the lesser of
	//   1- len(b)
	//   2- file end
	if len(b) < maxRead {
		maxRead = len(b)
	}

	// just read the requested number of bytes and change our offset
	// figure out which block number has the bytes we are looking for
	startBlock := int(fl.offset / fs.blocksize)
	endBlock := int((fl.offset + int64(maxRead)) / fs.blocksize)

	// do we end in fragment territory?
	fragments := false
	if endBlock >= len(fl.blockSizes) {
		fragments = true
		endBlock--
	}

	read := 0
	offset := fl.offset
	// we need to cycle through all of the blocks to find where the desired one starts
	for i, block := range fl.blockSizes {
		if i > endBlock || read > maxRead {
			break
		}
		// if we are in the range of desired ones, read it in
		if i >= startBlock {
			input, err := fs.readBlock(location, block.compressed, block.size)
			if err != nil {
				return read, fmt.Errorf("error reading data block %d from squashfs: %v", i, err)
			}
			// we do not need to limit it to the remaining space of b, since copy() only will copy
			//   to what space it has in b
			copy(b[read:], input[offset:])
			read += len(input)
			fl.offset += int64(read)
			offset = 0
		}
		location += int64(block.size)
	}
	// did we have a fragment to read?
	if fragments {
		input, err := fs.readFragment(fl.fragmentBlockIndex, fl.fragmentOffset, fl.size()%fs.blocksize)
		if err != nil {
			return read, fmt.Errorf("error reading fragment block %d from squashfs: %v", fl.fragmentBlockIndex, err)
		}
		copy(b[read:], input)
	}
	fl.offset += int64(maxRead)
	var retErr error
	if fl.offset >= int64(size) {
		retErr = io.EOF
	}
	return maxRead, retErr
}

// Write writes len(b) bytes to the File.
//
//	you cannot write to a finished squashfs, so this returns an error
func (fl *File) Write(p []byte) (int, error) {
	return 0, fmt.Errorf("cannot write to a read-only squashfs filesystem")
}

// Seek set the offset to a particular point in the file
func (fl *File) Seek(offset int64, whence int) (int64, error) {
	if fl == nil || fl.filesystem == nil {
		return 0, os.ErrClosed
	}
	newOffset := int64(0)
	switch whence {
	case io.SeekStart:
		newOffset = offset
	case io.SeekEnd:
		newOffset = fl.size() - offset
	case io.SeekCurrent:
		newOffset = fl.offset + offset
	}
	if newOffset < 0 {
		return fl.offset, fmt.Errorf("cannot set offset %d before start of file", offset)
	}
	fl.offset = newOffset
	return fl.offset, nil
}

// Close close the file
func (fl *File) Close() error {
	fl.filesystem = nil
	return nil
}
 07070100000331000081A4000000000000000000000001645E367C0000B370000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/squashfs/finalize.go    package squashfs

import (
	"encoding/binary"
	"fmt"
	"io"
	"os"
	"path"
	"path/filepath"
	"strings"
	"time"

	"github.com/diskfs/go-diskfs/util"
	"github.com/pkg/xattr"
)

type fileType uint8

const (
	fileRegular fileType = iota
	fileDirectory
	fileSymlink
	fileBlock
	fileChar
	fileFifo
	fileSocket
)

// FinalizeOptions options to pass to finalize
type FinalizeOptions struct {
	// Compressor which compressor to use, including, where relevant, options. Defaults ot CompressorGzip
	Compression Compressor
	// NonExportable prevent making filesystem NFS exportable. Defaults to false, i.e. make it exportable
	NonExportable bool
	// NonSparse prevent detecting sparse files. Defaults to false, i.e. detect sparse files
	NonSparse bool
	// Xattrs whether or not to store extended attributes. Defaults to false
	Xattrs bool
	// NoCompressInodes whether or not to compress inodes. Defaults to false, i.e. compress inodes
	NoCompressInodes bool
	// NoCompressData whether or not to compress data blocks. Defaults to false, i.e. compress data
	NoCompressData bool
	// NoCompressFragments whether or not to compress fragments. Defaults to false, i.e. compress fragments
	NoCompressFragments bool
	// NoCompressXattrs whether or not to compress extended attrbutes. Defaults to false, i.e. compress xattrs
	NoCompressXattrs bool
	// NoFragments do not use fragments, but rather dedicated data blocks for all files. Defaults to false, i.e. use fragments
	NoFragments bool
	// NoPad do not pad filesystem so it is a multiple of 4K. Defaults to false, i.e. pad it
	NoPad bool
	// FileUID set all files to be owned by the UID provided, default is to leave as in filesystem
	FileUID *uint32
	// FileGID set all files to be owned by the GID provided, default is to leave as in filesystem
	FileGID *uint32
}

// Finalize finalize a read-only filesystem by writing it out to a read-only format
func (fs *FileSystem) Finalize(options FinalizeOptions) error {
	if fs.workspace == "" {
		return fmt.Errorf("cannot finalize an already finalized filesystem")
	}

	/*
		There is nothing we can find about the order of files/directories, for any of:
		- inodes in inode table
		- entries in directory table
		- data in data section
		- fragments in fragment section

		to keep it simple, we will follow what mksquashfs on linux does, in the following order:
		- superblock at byte 0
		- compression options, if any, at byte 96
		- file data immediately following compression options (or superblock, if no compression options)
		- fragments immediately following file data
		- inode table
		- directory table
		- fragment table
		- export table
		- uid/gid lookup table
		- xattr table

		Note that until we actually copy and compress each section, we do not know the position of each subsequent
		section. So we have to write one, keep track of it, then the next, etc.


	*/

	f := fs.file
	blocksize := int(fs.blocksize)
	comp := compressionNone
	if options.Compression != nil {
		comp = options.Compression.flavour()
	}

	// build out file and directory tree
	// this returns a slice of *finalizeFileInfo, each of which represents a directory
	// or file
	fileList, err := walkTree(fs.Workspace())
	if err != nil {
		return fmt.Errorf("error walking tree: %v", err)
	}

	// location holds where we are writing in our file
	var (
		location int64
		b        []byte
	)
	location += superblockSize
	if options.Compression != nil {
		b = options.Compression.optionsBytes()
		if len(b) > 0 {
			_, _ = f.WriteAt(b, location)
			location += int64(len(b))
		}
	}

	// next write the file blocks
	compressor := options.Compression
	if options.NoCompressData {
		compressor = nil
	}

	// write file data blocks
	//
	dataWritten, err := writeDataBlocks(fileList, f, fs.workspace, blocksize, compressor, location)
	if err != nil {
		return fmt.Errorf("error writing file data blocks: %v", err)
	}
	location += int64(dataWritten)

	//
	// write file fragments
	//
	fragmentBlockStart := location
	fragmentBlocks, fragsWritten, err := writeFragmentBlocks(fileList, f, fs.workspace, blocksize, options, fragmentBlockStart)
	if err != nil {
		return fmt.Errorf("error writing file fragment blocks: %v", err)
	}
	location += fragsWritten

	// extract extended attributes, and save them for later; these are written at the very end
	// this must be done *before* creating inodes, as inodes reference these
	xattrs := extractXattrs(fileList)

	// Now we need to write the inode table and directory table. But
	// we have a chicken and an egg problem.
	//
	// * On the one hand, inodes are written to the disk before the directories, so we need to know
	// the size of the inode data.
	// * On the other hand, inodes for directories point to directories, specifically, the block and offset
	// where the pointed-at directory resides in the directory table.
	//
	// So we need inode table to create directory table, and directory table to create inode table.
	//
	// Further complicating matters is that the data in the
	// directory inodes relies on having the directory data ready. Specifically,
	// it includes:
	// - index of the block in the directory table where the dir info starts. Note
	//   that this is not just the directory *table* index, but the *block* index.
	// - offset within the block in the directory table where the dir info starts.
	//   Same notes as previous entry.
	// - size of the directory table entries for this directory, all of it. Thus,
	//   you have to have converted it all to bytes to get the information.
	//
	// The only possible way to do this is to run one, then the other, then
	// modify them. Until you generate both, you just don't know.
	//
	// Something that eases it a bit is that the block index in directory inodes
	// is from the start of the directory table, rather than start of archive.
	//
	// Order of execution:
	// 1. Write the file (not directory) data and fragments to disk.
	// 2. Create inodes for the files. We cannot write them yet because we need to
	//    add the directory entries before compression.
	// 3. Convert the directories to a directory table. And no, we cannot just
	//    calculate it based on the directory size, since some directories have
	//    one header, some have multiple, so the size of each directory, even
	//    given the number of files, can change.
	// 4. Create inodes for the directories and write them to disk
	// 5. Update the directory entries based on the inodes.
	// 6. Write directory table to disk
	//
	// if storing the inodes and directory table entirely in memory becomes
	// burdensome, use temporary scratch disk space to cache data in flight

	//
	// Build inodes for files. They are saved onto the fileList items themselves.
	//
	// build up a table of uids/gids we can store later
	idtable := map[uint32]uint16{}
	// get the inodes in order as a slice
	if err := createInodes(fileList, idtable, options); err != nil {
		return fmt.Errorf("error creating file inodes: %v", err)
	}

	// convert the inodes to data, while keeping track of where each
	// one is, so we can update the directory entries
	updateInodeLocations(fileList)

	// create the directory table. We already have every inode and its position,
	// so we do not need to dip back into the inodes. The only changes will be
	// the block/offset references into the directory table, but those sizes do
	// not change. However, we will have to break out the headers, so this is not
	// completely finalized yet.
	directories := createDirectories(fileList[0])

	// create the final version of the directory table by creating the headers
	// and entries.
	populateDirectoryLocations(directories)

	if err := updateInodesFromDirectories(directories); err != nil {
		return fmt.Errorf("error updating inodes with final directory data: %v", err)
	}

	// write the inodes to the file
	inodesWritten, inodeTableLocation, err := writeInodes(fileList, f, compressor, location)
	if err != nil {
		return fmt.Errorf("error writing inode data blocks: %v", err)
	}
	location += int64(inodesWritten)

	// write directory data
	dirsWritten, dirTableLocation, err := writeDirectories(directories, f, compressor, location)
	if err != nil {
		return fmt.Errorf("error writing directory data blocks: %v", err)
	}
	location += int64(dirsWritten)

	// write fragment table

	/*
		The indexCount is used for indexed lookups.

		The index is stored at the end of the inode (after the filename) for extended directory
		There is one entry for each block after the 0th, so if there is just one block, then there is no index
		The filenames in the directory are sorted alphabetically. Each entry gives the first filename found in
		the respective block, so if the name found is larger than yours, it is in the previous block

		b[0:4] uint32 index - number of bytes where this entry is from the beginning of this directory
		b[4:8] uint32 startBlock - number of bytes in the filesystem from the start of the directory table that this block is
		b[8:12] uint32 size - size of the name (-1)
		b[12:12+size] string name

		Here is an example of 1 entry:

		f11f 0000 0000 0000 0b00 0000 6669 6c65 6e61 6d65 5f34 3638

		b[0:4] index 0x1ff1
		b[4:8] startBlock 0x00
		b[8:12] size 0x0b (+1 for a total of 0x0c = 12)
		b[12:24] name filename_468
	*/

	// TODO:
	/*
		 FILL IN:
		 - xattr table

		ALSO:
		- we have been treating every file like it is a normal file, but need to handle all of the special cases:
				- symlink, IPC, block/char device, hardlink
		- deduplicate values in xattrs
		- utilize options to: not add xattrs; not compress things; etc.
		- blockPosition calculations appear to be off

	*/

	// write the fragment table and its index
	fragmentTableWritten, fragmentTableLocation, err := writeFragmentTable(fragmentBlocks, fragmentBlockStart, f, compressor, location)
	if err != nil {
		return fmt.Errorf("error writing fragment table: %v", err)
	}
	location += int64(fragmentTableWritten)

	// write the export table
	var (
		exportTableLocation uint64
		exportTableWritten  int
	)
	if !options.NonExportable {
		exportTableWritten, exportTableLocation, err = writeExportTable(fileList, f, compressor, location)
		if err != nil {
			return fmt.Errorf("error writing export table: %v", err)
		}
		location += int64(exportTableWritten)
	}

	// write the uidgid table
	idTableWritten, idTableLocation, err := writeIDTable(idtable, f, compressor, location)
	if err != nil {
		return fmt.Errorf("error writing uidgid table: %v", err)
	}
	location += int64(idTableWritten)

	// write the xattrs
	var xAttrsLocation uint64
	if len(xattrs) == 0 {
		xAttrsLocation = noXattrSuperblockFlag
	} else {
		var xAttrsWritten int
		xAttrsWritten, xAttrsLocation, err = writeXattrs(xattrs, f, compressor, location)
		if err != nil {
			return fmt.Errorf("error writing xattrs table: %v", err)
		}
		location += int64(xAttrsWritten)
	}

	// update and write the superblock
	// keep in mind that the superblock always needs to have a valid compression.
	// if there is no compression used, mark it as option gzip, and set all of the
	// flags to indicate that nothing is compressed.
	if comp == compressionNone {
		comp = compressionGzip
		options.NoCompressData = true
		options.NoCompressInodes = true
		options.NoCompressFragments = true
		options.NoCompressXattrs = true
	}
	sb := &superblock{
		blocksize:           uint32(blocksize),
		compression:         comp,
		inodes:              uint32(len(fileList)),
		xattrTableStart:     xAttrsLocation,
		fragmentCount:       uint32(len(fragmentBlocks)),
		modTime:             time.Now(),
		size:                uint64(location),
		versionMajor:        4,
		versionMinor:        0,
		idTableStart:        idTableLocation,
		exportTableStart:    exportTableLocation,
		inodeTableStart:     inodeTableLocation,
		idCount:             uint16(len(idtable)),
		directoryTableStart: dirTableLocation,
		fragmentTableStart:  fragmentTableLocation,
		rootInode:           &inodeRef{fileList[0].inodeLocation.block, fileList[0].inodeLocation.offset},
		superblockFlags: superblockFlags{
			uncompressedInodes:    options.NoCompressInodes,
			uncompressedData:      options.NoCompressData,
			uncompressedFragments: options.NoCompressFragments,
			uncompressedXattrs:    options.NoCompressXattrs,
			noFragments:           options.NoFragments,
			noXattrs:              !options.Xattrs,
			exportable:            !options.NonExportable,
		},
	}

	// write the superblock
	sbBytes := sb.toBytes()
	if _, err := f.WriteAt(sbBytes, 0); err != nil {
		return fmt.Errorf("failed to write superblock: %v", err)
	}

	// finish by setting as finalized
	fs.workspace = ""
	return nil
}

func copyFileData(from, to util.File, fromOffset, toOffset, blocksize int64, c Compressor) (raw, compressed int, blocks []*blockData, err error) {
	buf := make([]byte, blocksize)
	blocks = make([]*blockData, 0)
	for {
		n, err := from.ReadAt(buf, fromOffset+int64(raw))
		if err != nil && err != io.EOF {
			return raw, compressed, nil, err
		}
		if n != len(buf) {
			break
		}
		raw += len(buf)

		// compress the block if needed
		isCompressed := false
		if c != nil {
			out, err := c.compress(buf)
			if err != nil {
				return 0, 0, nil, fmt.Errorf("error compressing block: %v", err)
			}
			if len(out) < len(buf) {
				isCompressed = true
				buf = out
			}
		}
		blocks = append(blocks, &blockData{size: uint32(len(buf)), compressed: isCompressed})
		if _, err := to.WriteAt(buf[:n], toOffset+int64(compressed)); err != nil {
			return raw, compressed, blocks, err
		}
		compressed += len(buf)
	}
	return raw, compressed, blocks, nil
}

// finalizeFragment write fragment data out to the archive, compressing if relevant.
// Returns the total amount written, whether compressed, and any error.
func finalizeFragment(buf []byte, to util.File, toOffset int64, c Compressor) (raw int, compressed bool, err error) {
	// compress the block if needed
	if c != nil {
		out, err := c.compress(buf)
		if err != nil {
			return 0, compressed, fmt.Errorf("error compressing fragment block: %v", err)
		}
		if len(out) < len(buf) {
			buf = out
			compressed = true
		}
	}
	if _, err := to.WriteAt(buf, toOffset); err != nil {
		return 0, compressed, err
	}
	return len(buf), compressed, nil
}

// walkTree walks the tree and returns a slice of files and directories.
// We do files and directories differently, since they need to be processed
// differently on disk (file data and fragments vs directory table), and
// because the inode data is different.
// The first entry in the return always will be the root
func walkTree(workspace string) ([]*finalizeFileInfo, error) {
	cwd, err := os.Getwd()
	if err != nil {
		return nil, fmt.Errorf("could not get pwd: %v", err)
	}
	// make everything relative to the workspace
	_ = os.Chdir(workspace)
	dirMap := make(map[string]*finalizeFileInfo)
	fileList := make([]*finalizeFileInfo, 0)
	var entry *finalizeFileInfo
	_ = filepath.Walk(".", func(fp string, fi os.FileInfo, err error) error {
		if err != nil {
			return err
		}
		isRoot := fp == "."
		name := fi.Name()
		m := fi.Mode()
		var fType fileType
		switch {
		case m&os.ModeSocket == os.ModeSocket:
			fType = fileSocket
		case m&os.ModeSymlink == os.ModeSymlink:
			fType = fileSymlink
		case m&os.ModeNamedPipe == os.ModeNamedPipe:
			fType = fileFifo
		case m&os.ModeDir == os.ModeDir:
			fType = fileDirectory
		case m&os.ModeDevice == os.ModeDevice && m&os.ModeCharDevice == os.ModeCharDevice:
			fType = fileChar
		case m&os.ModeDevice == os.ModeDevice && m&os.ModeCharDevice != os.ModeCharDevice:
			fType = fileBlock
		default:
			fType = fileRegular
		}
		xattrNames, err := xattr.List(fp)
		if err != nil {
			return fmt.Errorf("unable to list xattrs for %s: %v", fp, err)
		}
		xattrs := map[string]string{}
		for _, name := range xattrNames {
			val, err := xattr.Get(fp, name)
			if err != nil {
				return fmt.Errorf("unable to get xattr %s for %s: %v", name, fp, err)
			}
			xattrs[name] = string(val)
		}
		nlink, uid, gid := getFileProperties(fi)

		entry = &finalizeFileInfo{
			path:     fp,
			name:     name,
			isDir:    fi.IsDir(),
			isRoot:   isRoot,
			modTime:  fi.ModTime(),
			mode:     m,
			fileType: fType,
			size:     fi.Size(),
			xattrs:   xattrs,
			uid:      uid,
			gid:      gid,
			links:    nlink,
		}

		// we will have to save it as its parent
		parentDir := filepath.Dir(fp)
		parentDirInfo := dirMap[parentDir]

		if fi.IsDir() {
			entry.children = make([]*finalizeFileInfo, 0, 20)
			dirMap[fp] = entry
		} else {
			// calculate blocks
			entry.size = fi.Size()
		}
		if !isRoot {
			parentDirInfo.children = append(parentDirInfo.children, entry)
			dirMap[parentDir] = parentDirInfo
		}
		fileList = append(fileList, entry)
		return nil
	})
	// reset the workspace
	_ = os.Chdir(cwd)

	return fileList, nil
}

func getTableIdx(m map[uint32]uint16, index uint32) uint16 {
	for k, v := range m {
		if k == index {
			return v
		}
	}
	// if we made it this far it doesn't exist, so add it
	m[index] = uint16(len(m))
	return m[index]
}

func writeFileDataBlocks(e *finalizeFileInfo, to util.File, ws string, startBlock uint64, blocksize int, compressor Compressor, location int64) (blockCount, compressed int, err error) {
	from, err := os.Open(path.Join(ws, e.path))
	if err != nil {
		return 0, 0, fmt.Errorf("failed to open file for reading %s: %v", e.path, err)
	}
	defer from.Close()
	raw, compressed, blocks, err := copyFileData(from, to, 0, location, int64(blocksize), compressor)
	if err != nil {
		return 0, 0, fmt.Errorf("error copying file %s: %v", e.Name(), err)
	}
	if raw%blocksize != 0 {
		return 0, 0, fmt.Errorf("copying file %s copied %d which is not a multiple of blocksize %d", e.Name(), raw, blocksize)
	}
	// save the information we need for usage later in inodes to find the file data
	e.dataLocation = location
	e.blocks = blocks
	e.startBlock = startBlock

	// how many blocks did we write?
	blockCount = raw / blocksize

	return blockCount, compressed, nil
}

func writeMetadataBlock(buf []byte, to util.File, c Compressor, location int64) (int, error) {
	// compress the block if needed
	isCompressed := false
	if c != nil {
		out, err := c.compress(buf)
		if err != nil {
			return 0, fmt.Errorf("error compressing block: %v", err)
		}
		if len(out) < len(buf) {
			isCompressed = true
			buf = out
		}
	}
	// the 2-byte (16-bit) header gives the block size
	// the top bit is set if uncompressed
	size := uint16(len(buf))
	if !isCompressed {
		size |= 1 << 15
	}
	header := make([]byte, 2)
	binary.LittleEndian.PutUint16(header, size)
	buf = append(header, buf...)
	if _, err := to.WriteAt(buf, location); err != nil {
		return 0, err
	}
	return len(buf), nil
}

func writeDataBlocks(fileList []*finalizeFileInfo, f util.File, ws string, blocksize int, compressor Compressor, location int64) (int, error) {
	allBlocks := 0
	allWritten := 0
	for _, e := range fileList {
		// only copy data for normal files
		if e.fileType != fileRegular {
			continue
		}

		blocks, written, err := writeFileDataBlocks(e, f, ws, uint64(allBlocks), blocksize, compressor, location)
		if err != nil {
			return allWritten, fmt.Errorf("error writing data for %s to file: %v", e.path, err)
		}
		allBlocks += blocks
		allWritten += written
	}
	return allWritten, nil
}

// writeFragmentBlocks writes all of the fragment blocks to the archive. Returns slice of blocks written, the total bytes written, any error
func writeFragmentBlocks(fileList []*finalizeFileInfo, f util.File, ws string, blocksize int, options FinalizeOptions, location int64) ([]fragmentBlock, int64, error) {
	compressor := options.Compression
	if options.NoCompressFragments {
		compressor = nil
	}
	fragmentData := make([]byte, 0)
	var (
		allWritten         int64
		fragmentBlockIndex uint32
		fragmentBlocks     []fragmentBlock
	)
	fileCloseList := make([]*os.File, 0)
	defer func() {
		for _, f := range fileCloseList {
			f.Close()
		}
	}()
	for _, e := range fileList {
		// only copy data for regular files
		if e.fileType != fileRegular {
			continue
		}
		var (
			written int64
			err     error
		)

		// how much is there to put in a fragment?
		remainder := e.Size() % int64(blocksize)
		if remainder == 0 {
			continue
		}

		// would adding this data cause us to write?
		if len(fragmentData)+int(remainder) > blocksize {
			written, compressed, err := finalizeFragment(fragmentData, f, location, compressor)
			if err != nil {
				return fragmentBlocks, 0, fmt.Errorf("error writing fragment block %d: %v", fragmentBlockIndex, err)
			}
			fragmentBlocks = append(fragmentBlocks, fragmentBlock{
				size:       uint32(written),
				compressed: compressed,
				location:   location,
			})
			// increment as all writes will be to next block block
			fragmentBlockIndex++
			fragmentData = fragmentData[:blocksize]
		}

		e.fragment = &fragmentRef{
			block:  fragmentBlockIndex,
			offset: uint32(len(fragmentData)),
		}
		// save the fragment data from the file

		from, err := os.Open(path.Join(ws, e.path))
		if err != nil {
			return fragmentBlocks, 0, fmt.Errorf("failed to open file for reading %s: %v", e.path, err)
		}
		fileCloseList = append(fileCloseList, from)
		buf := make([]byte, remainder)
		n, err := from.ReadAt(buf, e.Size()-remainder)
		if err != nil && err != io.EOF {
			return fragmentBlocks, 0, fmt.Errorf("error reading final %d bytes from file %s: %v", remainder, e.Name(), err)
		}
		if n != len(buf) {
			return fragmentBlocks, 0, fmt.Errorf("failed reading final %d bytes from file %s, only read %d", remainder, e.Name(), n)
		}
		from.Close()
		fragmentData = append(fragmentData, buf...)

		allWritten += written
		if written > 0 {
			fragmentBlockIndex++
		}
	}

	// write remaining fragment data
	if len(fragmentData) > 0 {
		written, compressed, err := finalizeFragment(fragmentData, f, location, compressor)
		if err != nil {
			return fragmentBlocks, 0, fmt.Errorf("error writing fragment block %d: %v", fragmentBlockIndex, err)
		}
		fragmentBlocks = append(fragmentBlocks, fragmentBlock{
			size:       uint32(written),
			compressed: compressed,
			location:   location,
		})
		// increment as all writes will be to next block block
		allWritten += int64(written)
	}
	return fragmentBlocks, allWritten, nil
}

func writeInodes(files []*finalizeFileInfo, f util.File, compressor Compressor, location int64) (inodesWritten int, finalLocation uint64, err error) {
	var (
		buf             []byte
		maxSize         = int(metadataBlockSize)
		initialLocation = location
	)
	for _, e := range files {
		// keep writing until we run out, or we hit 8KB
		buf = append(buf, e.inode.toBytes()...)
		if len(buf) > maxSize {
			written, err := writeMetadataBlock(buf[:maxSize], f, compressor, location)
			if err != nil {
				return inodesWritten, 0, err
			}
			// count all we have written
			inodesWritten += written
			// increment for next write
			location += int64(written)
			// truncate all except what we wrote
			buf = buf[maxSize:]
		}
	}
	// was there anything left?
	if len(buf) > 0 {
		written, err := writeMetadataBlock(buf, f, compressor, location)
		if err != nil {
			return inodesWritten, 0, err
		}
		inodesWritten += written
	}
	return inodesWritten, uint64(initialLocation), nil
}

// writeDirectories write all directories out to disk. Assumes it already has been optimized.
func writeDirectories(dirs []*finalizeFileInfo, f util.File, compressor Compressor, location int64) (directoriesWritten int, finalLocation uint64, err error) {
	var (
		buf             []byte
		maxSize         = int(metadataBlockSize)
		initialLocation = location
	)
	for i, d := range dirs {
		if d.directory == nil {
			return 0, 0, fmt.Errorf("empty directory info for position %d", i)
		}
		// keep writing until we run out, or we hit metadata maxSize of 8KB
		buf = append(buf, d.directory.toBytes(d.directory.inodeIndex)...)
		if len(buf) > maxSize {
			written, err := writeMetadataBlock(buf[:maxSize], f, compressor, location)
			if err != nil {
				return directoriesWritten, 0, err
			}
			// count all we have written
			directoriesWritten += written
			// increment for next write
			location += int64(written)
			// truncate all except what we wrote
			buf = buf[maxSize:]
		}
	}
	// was there anything left?
	if len(buf) > 0 {
		written, err := writeMetadataBlock(buf, f, compressor, location)
		if err != nil {
			return directoriesWritten, 0, err
		}
		directoriesWritten += written
	}
	return directoriesWritten, uint64(initialLocation), nil
}

// writeFragmentTable write the fragment table
//
//nolint:unparam // this does not use fragmentBlocksStart yet, but only because we have not yet added support
func writeFragmentTable(fragmentBlocks []fragmentBlock, fragmentBlocksStart int64, f util.File, compressor Compressor, location int64) (fragmentsWritten int, finalLocation uint64, err error) {
	// now write the actual fragment table entries
	var (
		indexEntries []uint64
	)
	var (
		buf     []byte
		maxSize = int(metadataBlockSize)
	)
	for _, block := range fragmentBlocks {
		// add an entry
		b := make([]byte, 16)
		size := block.size
		if !block.compressed {
			size |= 1 << 24
		}
		binary.LittleEndian.PutUint64(b[0:8], uint64(block.location))
		binary.LittleEndian.PutUint32(b[8:12], size)

		buf = append(buf, b...)
		if len(buf) >= maxSize {
			written, err := writeMetadataBlock(buf[:maxSize], f, compressor, location)
			if err != nil {
				return fragmentsWritten, 0, err
			}
			// save an entry in the index table
			indexEntries = append(indexEntries, uint64(location))
			// count all we have written
			fragmentsWritten += written
			// increment for next write
			location += int64(written)
			// truncate all except what we wrote
			buf = buf[maxSize:]
		}
	}
	if len(buf) > 0 {
		written, err := writeMetadataBlock(buf, f, compressor, location)
		if err != nil {
			return fragmentsWritten, 0, err
		}
		// save an entry in the index table
		indexEntries = append(indexEntries, uint64(location))
		// count all we have written
		fragmentsWritten += written
		location += int64(written)
	}

	// finally write the lookup table at the end
	buf = make([]byte, len(indexEntries)*8)
	for i, e := range indexEntries {
		binary.LittleEndian.PutUint64(buf[i*8:i*8+8], e)
	}
	// just write it out
	written, err := f.WriteAt(buf, location)
	if err != nil {
		return fragmentsWritten, 0, fmt.Errorf("error writing fragment table lookup index: %v", err)
	}
	fragmentsWritten += written
	return fragmentsWritten, uint64(location), nil
}

// writeExportTable write the export table at the given location.
func writeExportTable(files []*finalizeFileInfo, f util.File, compressor Compressor, location int64) (entriesWritten int, finalLocation uint64, err error) {
	var (
		maxSize = int(metadataBlockSize)
	)

	// the lookup table is pretty simple. It is just a single array of uint64. So inode 1 is in the first
	// entry, inode 2 in the second, etc. (inode 0 is reserved and unused).
	// The value of each entry is just the inode reference in the archive.
	// An "inode reference" is a 64-bit number structured as follows:
	// - upper 16 bits unused
	// - next 32 bits position of first byte of inode metadata block that contains this inode, relative to the start of the inode table
	// - lowest 16 bits are offset into the uncompressed block
	var (
		indexEntries []uint64
		buf          []byte
	)
	for _, e := range files {
		entry := make([]byte, 8)
		binary.LittleEndian.PutUint32(entry[2:6], e.inodeLocation.block)
		binary.LittleEndian.PutUint16(entry[6:8], e.inodeLocation.offset)
		buf = append(buf, entry...)
		if len(buf) >= maxSize {
			written, err := writeMetadataBlock(buf[:maxSize], f, compressor, location)
			if err != nil {
				return entriesWritten, 0, err
			}
			// count all we have written
			entriesWritten += written
			buf = buf[maxSize:]
			indexEntries = append(indexEntries, uint64(location))
			location += int64(written)
		}
	}
	// any leftover?
	if len(buf) > 0 {
		written, err := writeMetadataBlock(buf, f, compressor, location)
		if err != nil {
			return entriesWritten, 0, err
		}
		// count all we have written
		entriesWritten += written
		indexEntries = append(indexEntries, uint64(location))
		location += int64(written)
	}

	// now write the lookup table - 8 bytes for each entry
	buf = make([]byte, len(indexEntries)*8)
	for i, e := range indexEntries {
		binary.LittleEndian.PutUint64(buf[i*8:i*8+8], e)
	}
	// just write it out
	written, err := f.WriteAt(buf, location)
	if err != nil {
		return entriesWritten, 0, fmt.Errorf("error writing export table lookup index: %v", err)
	}
	entriesWritten += written
	return entriesWritten, uint64(location), nil
}

// writeIDTable write the uidgid table at the given location.
func writeIDTable(idtable map[uint32]uint16, f util.File, compressor Compressor, location int64) (entriesWritten int, finalLocation uint64, err error) {
	var (
		maxSize = int(metadataBlockSize)
	)

	// to write the idtable, we need to convert the map of target ID (uid/gid) -> index into an array by index
	idArray := make([]uint32, len(idtable))
	for k, v := range idtable {
		idArray[v] = k
	}

	// the lookup table is pretty simple. It is just a single array of uint32.
	// The value of each entry is just the ID number.
	var (
		buf          []byte
		indexEntries []uint64
	)
	for _, id := range idArray {
		entry := make([]byte, 4)
		binary.LittleEndian.PutUint32(entry, id)
		buf = append(buf, entry...)
		if len(buf) >= maxSize {
			written, err := writeMetadataBlock(buf[:maxSize], f, compressor, location)
			if err != nil {
				return entriesWritten, 0, err
			}
			// count all we have written
			entriesWritten += written
			buf = buf[maxSize:]
			indexEntries = append(indexEntries, uint64(location))
			location += int64(written)
		}
	}
	// any leftover?
	if len(buf) > 0 {
		written, err := writeMetadataBlock(buf, f, compressor, location)
		if err != nil {
			return entriesWritten, 0, err
		}
		// count all we have written
		entriesWritten += written
		indexEntries = append(indexEntries, uint64(location))
		location += int64(written)
	}

	// now write the lookup table - 8 bytes for each entry
	buf = make([]byte, len(indexEntries)*8)
	for i, e := range indexEntries {
		binary.LittleEndian.PutUint64(buf[i*8:i*8+8], e)
	}
	// just write it out
	written, err := f.WriteAt(buf, location)
	if err != nil {
		return entriesWritten, 0, fmt.Errorf("error writing uidgid table lookup index: %v", err)
	}
	entriesWritten += written
	return entriesWritten, uint64(location), nil
}

// writeXattrs write the xattrs and its lookup table at the given location.
func writeXattrs(xattrs []map[string]string, f util.File, compressor Compressor, location int64) (xattrsWritten int, finalLocation uint64, err error) {
	var (
		maxSize     = int(metadataBlockSize)
		offset      int
		lookupTable []byte
		buf         []byte
	)

	// each entry in the xattrs slice is a unique key-value map. It may be referenced by one or more inodes.
	// first convert them to key-value written pairs, and save where they are
	for _, m := range xattrs {
		// process one xattr key-value map
		var single []byte
		for k, v := range m {
			// convert it to the proper type
			// the entry
			prefix, name, err := xAttrKeyConvert(k)
			if err != nil {
				return xattrsWritten, 0, err
			}
			b := make([]byte, 4)
			binary.LittleEndian.PutUint16(b[0:2], prefix)
			binary.LittleEndian.PutUint16(b[2:4], uint16(len(k)))
			b = append(b, []byte(name)...)
			single = append(single, b...)

			b = make([]byte, 4)
			binary.LittleEndian.PutUint32(b[0:4], uint32(len(v)))
			b = append(b, []byte(v)...)
			single = append(single, b...)
		}
		// add the index
		b := make([]byte, 16)
		// bits 16:48 (uint32) hold the block position
		binary.LittleEndian.PutUint32(b[2:6], uint32(xattrsWritten))
		// bits 48:64 (uint16) hold the offset in the uncompressed block
		binary.LittleEndian.PutUint16(b[6:8], uint16(offset))
		// bytes 8:12 (uint32) hold the number of pairs
		binary.LittleEndian.PutUint32(b[8:12], uint32(len(m)))
		// bytes 12:16 (uint32) hold the size of the entire map for this inode
		binary.LittleEndian.PutUint32(b[12:16], uint32(len(single)))

		// add the lookupTable bytes
		lookupTable = append(lookupTable, b...)
		// add the actual metadata bytes
		buf = append(buf, single...)
		// the offset is moved forward
		offset += len(single)
		if len(buf) > maxSize {
			written, err := writeMetadataBlock(buf[:maxSize], f, compressor, location)
			if err != nil {
				return xattrsWritten, 0, err
			}
			// count all we have written
			xattrsWritten += written
			buf = buf[maxSize:]
			offset -= maxSize
			location += int64(written)
		}
	}
	// if there is anything left at the end
	if len(buf) > 0 {
		written, err := writeMetadataBlock(buf, f, compressor, location)
		if err != nil {
			return xattrsWritten, 0, err
		}
		// count all we have written
		xattrsWritten += written
		location += int64(written)
	}

	// hold the id table lookup
	var indexEntries []uint64

	// write the lookupTable - this too is stored as metadata blocks
	var i int
	for i = 0; i < len(lookupTable); i += maxSize {
		written, err := writeMetadataBlock(lookupTable[i*maxSize:i*maxSize+maxSize], f, compressor, location)
		if err != nil {
			return xattrsWritten, 0, err
		}
		indexEntries = append(indexEntries, uint64(location))
		// count all we have written
		xattrsWritten += written
		location += int64(written)
	}
	// was there any left?
	remainder := len(lookupTable) % maxSize
	if remainder > 0 {
		written, err := writeMetadataBlock(lookupTable[remainder:], f, compressor, location)
		if err != nil {
			return xattrsWritten, 0, err
		}
		indexEntries = append(indexEntries, uint64(location))
		// count all we have written
		xattrsWritten += written
		location += int64(written)
	}
	// finally, we need the ID table
	b := make([]byte, 16+8*len(indexEntries))
	binary.LittleEndian.PutUint64(b[0:8], uint64(location))
	binary.LittleEndian.PutUint32(b[8:12], uint32(len(lookupTable)))
	for _, e := range indexEntries {
		b2 := make([]byte, 8)
		binary.LittleEndian.PutUint64(b2, e)
		b = append(b, b2...)
	}

	// just write it out
	written, err := f.WriteAt(b, location)
	if err != nil {
		return xattrsWritten, 0, fmt.Errorf("error writing xattrs id index: %v", err)
	}
	xattrsWritten += written

	return xattrsWritten, uint64(location), nil
}

func xAttrKeyConvert(key string) (prefixID uint16, prefix string, err error) {
	// get the prefix
	wholePrefix := strings.SplitN(key, ".", 2)
	if len(wholePrefix) != 2 {
		return 0, "", fmt.Errorf("invalid xattr key: %s", key)
	}
	switch wholePrefix[0] {
	case "user":
		prefixID = 0
	case "trusted":
		prefixID = 1
	case "security":
		prefixID = 2
	default:
		return 0, "", fmt.Errorf("unknown xattr key: %s", key)
	}
	return prefixID, wholePrefix[1], nil
}

// createInodes create an inode of appropriate type for each file, and attach it to the finalizeFileInfo
func createInodes(fileList []*finalizeFileInfo, idtable map[uint32]uint16, options FinalizeOptions) error {
	// get the inodes
	var inodeIndex uint32 = 1

	// need to keep track of directory position in directory table
	// build our inodes for our files - must include all file types
	for _, e := range fileList {
		var (
			in     inodeBody
			inodeT inodeType
		)
		switch e.fileType {
		case fileRegular:
			/*
				use an extendedFile if any of the above is true:
				- startBlock (from beginning of data section) does not fit in uint32
				- fileSize does not fit in uint32
				- it is a sparse file
				- it has extended attributes
				- it has hard links
			*/
			if e.startBlock|uint32max != uint32max || e.Size()|int64(uint32max) != int64(uint32max) || len(e.xattrs) > 0 || e.links > 0 {
				// use extendedFile inode
				ef := &extendedFile{
					startBlock: e.startBlock,
					fileSize:   uint64(e.Size()),
					blockSizes: e.blocks,
					links:      e.links,
					xAttrIndex: e.xAttrIndex,
				}
				if e.fragment != nil {
					ef.fragmentBlockIndex = e.fragment.block
					ef.fragmentOffset = e.fragment.offset
				}
				in = ef
				inodeT = inodeExtendedFile
			} else {
				// use basicFile
				bf := &basicFile{
					startBlock: uint32(e.startBlock),
					fileSize:   uint32(e.Size()),
					blockSizes: e.blocks,
				}
				if e.fragment != nil {
					bf.fragmentBlockIndex = e.fragment.block
					bf.fragmentOffset = e.fragment.offset
				}
				in = bf
				inodeT = inodeBasicFile
			}
		case fileSymlink:
			/*
				use an extendedSymlink if it has extended attributes
				- startBlock (from beginning of data section) does not fit in uint32
				- fileSize does not fit in uint32
				- it is a sparse file
				- it has extended attributes
				- it has hard links
			*/
			target, err := os.Readlink(e.path)
			if err != nil {
				return fmt.Errorf("unable to read target for symlink at %s: %v", e.path, err)
			}
			if len(e.xattrs) > 0 {
				in = &extendedSymlink{
					links:      e.links,
					target:     target,
					xAttrIndex: e.xAttrIndex,
				}
				inodeT = inodeExtendedSymlink
			} else {
				in = &basicSymlink{
					links:  e.links,
					target: target,
				}
				inodeT = inodeBasicSymlink
			}
		case fileDirectory:
			/*
				use an extendedDirectory if any of the following is true:
				- the directory itself has extended attributes
				- the size of the directory does not fit in a single metadata block, i.e. >8K uncompressed
				- it has more than 256 entries
			*/
			if e.startBlock|uint32max != uint32max || e.Size()|int64(uint32max) != int64(uint32max) || len(e.xattrs) > 0 || e.links > 0 {
				// use extendedDirectory inode
				in = &extendedDirectory{
					startBlock: uint32(e.startBlock),
					fileSize:   uint32(e.Size()),
					links:      e.links,
					xAttrIndex: e.xAttrIndex,
				}
				inodeT = inodeExtendedDirectory
			} else {
				// use basicDirectory
				in = &basicDirectory{
					startBlock: uint32(e.startBlock),
					links:      e.links,
					fileSize:   uint16(e.Size()),
				}
				inodeT = inodeBasicDirectory
			}
		case fileBlock:
			major, minor, err := getDeviceNumbers(e.path)
			if err != nil {
				return fmt.Errorf("unable to read major/minor device numbers for block device at %s: %v", e.path, err)
			}
			if len(e.xattrs) > 0 {
				in = &extendedBlock{
					extendedDevice{
						links:      e.links,
						major:      major,
						minor:      minor,
						xAttrIndex: e.xAttrIndex,
					},
				}
				inodeT = inodeExtendedBlock
			} else {
				in = &basicBlock{
					basicDevice{
						links: e.links,
						major: major,
						minor: minor,
					},
				}
				inodeT = inodeBasicBlock
			}
		case fileChar:
			major, minor, err := getDeviceNumbers(e.path)
			if err != nil {
				return fmt.Errorf("unable to read major/minor device numbers for char device at %s: %v", e.path, err)
			}
			if len(e.xattrs) > 0 {
				in = &extendedChar{
					extendedDevice{
						links:      e.links,
						major:      major,
						minor:      minor,
						xAttrIndex: e.xAttrIndex,
					},
				}
				inodeT = inodeExtendedChar
			} else {
				in = &basicChar{
					basicDevice{
						links: e.links,
						major: major,
						minor: minor,
					},
				}
				inodeT = inodeBasicChar
			}
		case fileFifo:
			if len(e.xattrs) > 0 {
				in = &extendedFifo{
					extendedIPC{
						links:      e.links,
						xAttrIndex: e.xAttrIndex,
					},
				}
				inodeT = inodeExtendedFifo
			} else {
				in = &basicFifo{
					basicIPC{
						links: e.links,
					},
				}
				inodeT = inodeBasicFifo
			}
		case fileSocket:
			if len(e.xattrs) > 0 {
				in = &extendedSocket{
					extendedIPC{
						links:      e.links,
						xAttrIndex: e.xAttrIndex,
					},
				}
				inodeT = inodeExtendedSocket
			} else {
				in = &basicSocket{
					basicIPC{
						links: e.links,
					},
				}
				inodeT = inodeBasicSocket
			}
		}
		// set the uid and gid
		uid := e.uid
		gid := e.gid
		if options.FileUID != nil {
			uid = *options.FileUID
		}
		if options.FileGID != nil {
			gid = *options.FileGID
		}
		// get index to the uid and gid
		uidIdx := getTableIdx(idtable, uid)
		gidIdx := getTableIdx(idtable, gid)
		e.inode = &inodeImpl{
			header: &inodeHeader{
				inodeType: inodeT,
				modTime:   e.ModTime(),
				mode:      e.Mode(),
				uidIdx:    uidIdx,
				gidIdx:    gidIdx,
				index:     inodeIndex,
			},
			body: in,
		}
		inodeIndex++
	}

	return nil
}

// extractXattrs take all of the extended attributes on the finalizeFileInfo
// and write them out. Returns a slice of all unique xattr key-value pairs.
func extractXattrs(list []*finalizeFileInfo) []map[string]string {
	var (
		xattrs   []map[string]string
		indexMap = map[string]int{}
	)
	for _, e := range list {
		if len(e.xattrs) == 0 {
			e.xAttrIndex = noXattrInodeFlag
			continue
		}
		var (
			index int
			key   = hashStringMap(e.xattrs)
		)
		if pos, ok := indexMap[key]; ok {
			// reference already-existing duplicates
			index = pos
		} else {
			index = len(xattrs)
			xattrs = append(xattrs, e.xattrs)
			// save the unique combination
			indexMap[key] = index
		}
		e.xAttrIndex = uint32(index)
	}
	return xattrs
}

// hashStringMap make a unique hash out of a string map, to make it easy to compare
func hashStringMap(m map[string]string) string {
	// simple algorithm is good enough for this
	// just join all of the key-value pairs with =, and separate with ;, so you get
	//  key1=value1;key2=value2;...
	// it isn't perfect, but it doesn't have to be
	pairs := make([]string, 0)
	for k, v := range m {
		pairs = append(pairs, fmt.Sprintf("%s=%s", k, v))
	}
	return strings.Join(pairs, ";")
}

// fragmentBlock size and compression of a single fragment block
type fragmentBlock struct {
	size       uint32
	compressed bool
	location   int64
}

// blockPosition position of something inside a data or metadata section.
// Includes the block number relative to the start, and the offset within
// the block.
type blockPosition struct {
	block  uint32
	offset uint16
	size   int
}

// createDirectories append directory structure to every finalizeFileInfo that is a directory.
// Returns a slice pointing to all finalizeFileInfo that are directories and have been populated.
func createDirectories(e *finalizeFileInfo) []*finalizeFileInfo {
	var (
		dirs    = make([]*finalizeFileInfo, 0)
		entries = make([]*directoryEntryRaw, 0)
	)
	// go through each entry, and create a directory structure for it
	// we will cycle through each directory, creating an entry for it
	// and its children. A second pass will split into headers
	for _, child := range e.children {
		blockPos := child.inodeLocation
		var iType inodeType
		switch child.fileType {
		case fileRegular:
			iType = inodeBasicFile
		case fileSymlink:
			iType = inodeBasicSymlink
		case fileDirectory:
			iType = inodeBasicDirectory
		case fileBlock:
			iType = inodeBasicBlock
		case fileChar:
			iType = inodeBasicChar
		case fileFifo:
			iType = inodeBasicFifo
		case fileSocket:
			iType = inodeBasicSocket
		}
		entry := &directoryEntryRaw{
			name:           child.Name(),
			isSubdirectory: child.IsDir(),
			startBlock:     blockPos.block,
			offset:         blockPos.offset,
			inodeType:      iType,
			inodeNumber:    child.inode.index(),
			// we do not yet know the inodeNumber, which is an offset from the one in the header
			// it will be filled in later
		}
		// set the inode type. It doesn't use extended, just the basic ones.
		entries = append(entries, entry)
	}
	e.directory = &directory{
		entries: entries,
	}
	dirs = append(dirs, e)
	// do children in a separate loop, so that we get all of the children lined up
	for _, child := range e.children {
		if child.IsDir() {
			dirs = append(dirs, createDirectories(child)...)
		}
	}
	return dirs
}

// updateInodeLocations update each inode with where it will be on disk
// i.e. the inode block, and the offset into the block
func updateInodeLocations(files []*finalizeFileInfo) {
	var pos int64

	// get block position for each inode
	for _, f := range files {
		b := f.inode.toBytes()
		block, offset := uint32(pos/metadataBlockSize), uint16(pos%metadataBlockSize)
		blockPos := block * (standardMetadataBlocksize + 2)
		f.inodeLocation = blockPosition{
			block:  blockPos,
			offset: offset,
			size:   len(b),
		}
		pos += int64(len(b))
	}
}

// populateDirectoryLocations get a map of each directory index and where it will be
// on disk i.e. the directory block, and the offset into the block
func populateDirectoryLocations(directories []*finalizeFileInfo) {
	// keeps our reference
	pos := 0

	// get block position for each inode
	for _, d := range directories {
		// we start without knowing the inode block/number
		// in any case, this func is just here to give us sizes and therefore
		// locations inside the directory metadata blocks, not actual writable
		// bytes
		if d.directory == nil {
			continue
		}
		b := d.directory.toBytes(0)
		d.directoryLocation = blockPosition{
			block:  uint32(pos / int(metadataBlockSize)),
			offset: uint16(pos % int(metadataBlockSize)),
			size:   len(b),
		}
		pos += len(b)
	}
}

// updateInodesFromDirectories update the blockPosition for each directory
// inode.
func updateInodesFromDirectories(files []*finalizeFileInfo) error {
	// go through each directory, find its inode, and update it with the
	// correct block and offset
	for i, d := range files {
		if d.directory == nil {
			return fmt.Errorf("file at index %d missing directory information", i)
		}
		index := d.directory.inodeIndex
		in := d.inode
		inBody := in.getBody()
		switch dir := inBody.(type) {
		case *basicDirectory:
			dir.startBlock = d.directoryLocation.block
			dir.offset = d.directoryLocation.offset
			dir.fileSize = uint16(d.directoryLocation.size)
		case *extendedDirectory:
			dir.startBlock = d.directoryLocation.block
			dir.offset = d.directoryLocation.offset
			dir.fileSize = uint32(d.directoryLocation.size)
		default:
			return fmt.Errorf("inode at index %d from directory at index %d was unexpected type", index, i)
		}
	}
	return nil
}
07070100000332000081A4000000000000000000000001645E367C000003B1000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/squashfs/finalize_unix.go   //go:build aix || darwin || dragonfly || freebsd || (js && wasm) || linux || nacl || netbsd || openbsd || solaris
// +build aix darwin dragonfly freebsd js,wasm linux nacl netbsd openbsd solaris

//nolint:unconvert // linter gets confused in this file
package squashfs

import (
	"os"

	"golang.org/x/sys/unix"
)

func getDeviceNumbers(path string) (major, minor uint32, err error) {
	stat := unix.Stat_t{}
	err = unix.Stat(path, &stat)
	if err != nil {
		return 0, 0, err
	}
	return uint32(stat.Rdev / 256), uint32(stat.Rdev % 256), nil
}

func getFileProperties(fi os.FileInfo) (links, uid, gid uint32) {
	if sys := fi.Sys(); sys != nil {
		if stat, ok := sys.(*unix.Stat_t); ok {
			links = uint32(stat.Nlink)
			uid = stat.Uid
			gid = stat.Gid
		}
	}
	return links, uid, gid
}

//nolint:deadcode // this is here solely so that linter does not complain on darwin about unconvert
func unused() uint32 {
	var f uint32 = 25
	return uint32(f)
}
   07070100000333000081A4000000000000000000000001645E367C000000E2000000000000000000000000000000000000005F00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/squashfs/finalize_windows.go    package squashfs

import (
	"os"
	"syscall"
)

func getDeviceNumbers(path string) (uint32, uint32, error) {
	return 0, 0, syscall.EWINDOWS
}

func getFileProperties(fi os.FileInfo) (uint32, uint32, uint32) {
	return 0, 0, 0
}
  07070100000334000081A4000000000000000000000001645E367C00000814000000000000000000000000000000000000005F00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/squashfs/finalizefileinfo.go    package squashfs

import (
	"os"
	"time"
)

// finalizeFileInfo is a file info useful for finalization
// fulfills os.FileInfo
//
//	Name() string       // base name of the file
//	Size() int64        // length in bytes for regular files; system-dependent for others
//	Mode() FileMode     // file mode bits
//	ModTime() time.Time // modification time
//	IsDir() bool        // abbreviation for Mode().IsDir()
//	Sys() interface{}   // underlying data source (can return nil)
//
//nolint:structcheck // we are willing to leave unused elements here so that we can know their reference
type finalizeFileInfo struct {
	path              string
	target            string
	location          uint32
	recordSize        uint8
	depth             int
	name              string
	size              int64
	mode              os.FileMode
	modTime           time.Time
	isDir             bool
	isRoot            bool
	bytes             [][]byte
	parent            *finalizeFileInfo
	children          []*finalizeFileInfo
	content           []byte
	dataLocation      int64
	fileType          fileType
	inode             inode
	inodeLocation     blockPosition
	xattrs            map[string]string
	xAttrIndex        uint32
	links             uint32
	blocks            []*blockData
	startBlock        uint64
	fragment          *fragmentRef
	uid               uint32
	gid               uint32
	directory         *directory
	directoryLocation blockPosition
}

func (fi *finalizeFileInfo) Name() string {
	return fi.name
}
func (fi *finalizeFileInfo) Size() int64 {
	return fi.size
}
func (fi *finalizeFileInfo) Mode() os.FileMode {
	return fi.mode
}
func (fi *finalizeFileInfo) ModTime() time.Time {
	return fi.modTime
}
func (fi *finalizeFileInfo) IsDir() bool {
	return fi.isDir
}
func (fi *finalizeFileInfo) Sys() interface{} {
	return nil
}

// add depth to all children
func (fi *finalizeFileInfo) addProperties(depth int) {
	fi.depth = depth
	for _, e := range fi.children {
		e.parent = fi
		e.addProperties(depth + 1)
	}
}

type fragmentRef struct {
	block  uint32
	offset uint32
}
07070100000335000081A4000000000000000000000001645E367C000004A8000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/squashfs/fragment.go    package squashfs

import (
	"encoding/binary"
	"fmt"
)

//nolint:deadcode,varcheck,unused // we need these references in the future
const (
	fragmentEntriesPerBlock = 512
	fragmentEntrySize       = 16
)

type fragmentEntry struct {
	start      uint64
	size       uint32
	compressed bool
}

//nolint:structcheck,deadcode,unused // we need these references in the future
type fragmentTable struct {
	entries []*fragmentEntry
}

func (f *fragmentEntry) toBytes() []byte {
	b := make([]byte, 16)
	binary.LittleEndian.PutUint64(b[0:8], f.start)
	size := f.size
	if !f.compressed {
		size |= (1 << 24)
	}
	binary.LittleEndian.PutUint32(b[8:12], size)
	return b
}
func parseFragmentEntry(b []byte) (*fragmentEntry, error) {
	target := 16
	if len(b) < target {
		return nil, fmt.Errorf("mismatched fragment entry size, received %d bytes, less than minimum %d", len(b), target)
	}
	start := binary.LittleEndian.Uint64(b[0:8])
	size := binary.LittleEndian.Uint32(b[8:12])
	unCompFlag := uint32(1 << 24)
	compressed := true
	if size&unCompFlag == unCompFlag {
		compressed = false
	}
	size &= 0xffffff
	return &fragmentEntry{
		size:       size,
		compressed: compressed,
		start:      start,
	}, nil
}
07070100000336000081A4000000000000000000000001645E367C000059DF000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/squashfs/inode.go   package squashfs

import (
	"encoding/binary"
	"fmt"
	"os"
	"time"
)

type inodeType uint16

const (
	inodeBasicDirectory    inodeType = 1
	inodeBasicFile         inodeType = 2
	inodeBasicSymlink      inodeType = 3
	inodeBasicBlock        inodeType = 4
	inodeBasicChar         inodeType = 5
	inodeBasicFifo         inodeType = 6
	inodeBasicSocket       inodeType = 7
	inodeExtendedDirectory inodeType = 8
	inodeExtendedFile      inodeType = 9
	inodeExtendedSymlink   inodeType = 10
	inodeExtendedBlock     inodeType = 11
	inodeExtendedChar      inodeType = 12
	inodeExtendedFifo      inodeType = 13
	inodeExtendedSocket    inodeType = 14
)

const (
	inodeHeaderSize              = 16
	inodeDirectoryIndexEntrySize = 3*4 + 1
)

type inodeHeader struct {
	inodeType inodeType
	uidIdx    uint16
	gidIdx    uint16
	modTime   time.Time
	index     uint32
	mode      os.FileMode
	// permissions
}
type inodeBody interface {
	toBytes() []byte
	size() int64
	xattrIndex() (uint32, bool)
	equal(inodeBody) bool
}
type inode interface {
	toBytes() []byte
	equal(inode) bool
	size() int64
	inodeType() inodeType
	index() uint32
	getHeader() *inodeHeader
	getBody() inodeBody
}
type inodeImpl struct {
	header *inodeHeader
	body   inodeBody
}

func (i *inodeImpl) equal(o inode) bool {
	other, ok := o.(*inodeImpl)
	if !ok {
		return false
	}
	if (i.header == nil && other.header != nil) || (i.header != nil && other.header == nil) || (i.header != nil && other.header != nil && *i.header != *other.header) {
		return false
	}
	if (i.body == nil && other.body != nil) || (i.body != nil && other.body == nil) || (i.body != nil && other.body != nil && !i.body.equal(other.body)) {
		return false
	}
	return true
}
func (i *inodeImpl) toBytes() []byte {
	h := i.header.toBytes()
	b := i.body.toBytes()
	return append(h, b...)
}
func (i *inodeImpl) inodeType() inodeType {
	return i.header.inodeType
}
func (i *inodeImpl) index() uint32 {
	return i.header.index
}

// Size return the size of the item reflected by this inode, if it supports it
func (i *inodeImpl) size() int64 {
	return i.body.size()
}

func (i *inodeImpl) getHeader() *inodeHeader {
	return i.header
}
func (i *inodeImpl) getBody() inodeBody {
	return i.body
}

func (i *inodeHeader) toBytes() []byte {
	b := make([]byte, inodeHeaderSize)
	binary.LittleEndian.PutUint16(b[0:2], uint16(i.inodeType))
	binary.LittleEndian.PutUint16(b[2:4], uint16(i.mode))
	binary.LittleEndian.PutUint16(b[4:6], i.uidIdx)
	binary.LittleEndian.PutUint16(b[6:8], i.gidIdx)
	binary.LittleEndian.PutUint32(b[8:12], uint32(i.modTime.Unix()))
	binary.LittleEndian.PutUint32(b[12:16], i.index)
	return b
}
func parseInodeHeader(b []byte) (*inodeHeader, error) {
	target := inodeHeaderSize
	if len(b) < target {
		return nil, fmt.Errorf("received only %d bytes instead of minimum %d", len(b), target)
	}
	i := &inodeHeader{
		inodeType: inodeType(binary.LittleEndian.Uint16(b[0:2])),
		mode:      os.FileMode(binary.LittleEndian.Uint16(b[2:4])),
		uidIdx:    binary.LittleEndian.Uint16(b[4:6]),
		gidIdx:    binary.LittleEndian.Uint16(b[6:8]),
		modTime:   time.Unix(int64(binary.LittleEndian.Uint32(b[8:12])), 0),
		index:     binary.LittleEndian.Uint32(b[12:16]),
	}
	return i, nil
}

// blockdata used by files and directories
type blockData struct {
	size       uint32
	compressed bool
}

func (b *blockData) toUint32() uint32 {
	u := b.size
	if !b.compressed {
		u |= (1 << 24)
	}
	return u
}
func parseBlockData(u uint32) *blockData {
	var mask uint32 = 1 << 24
	return &blockData{
		compressed: u&mask != mask,
		size:       u & 0x00ffffff,
	}
}
func parseFileBlockSizes(b []byte, fileSize, blocksize int) []*blockData {
	count := fileSize / blocksize
	blocks := make([]*blockData, 0)
	for j := 0; j < count && j < len(b); j += 4 {
		blocks = append(blocks, parseBlockData(binary.LittleEndian.Uint32(b[j:j+4])))
	}
	return blocks
}

// inodeTypeToSize return the minimum size of the inode body including the header
func inodeTypeToSize(i inodeType) int {
	size := inodeTypeToBodySize(i)
	if size != 0 {
		size += inodeHeaderSize
	}
	return size
}

// inodeTypeToBodySize return the minimum size of the inode body not including the header
func inodeTypeToBodySize(i inodeType) int {
	var size int
	switch i {
	case inodeBasicDirectory:
		size = 16
	case inodeExtendedDirectory:
		size = 24
	case inodeBasicFile:
		size = 16
	case inodeExtendedFile:
		size = 40
	case inodeBasicChar:
		size = 8
	case inodeExtendedChar:
		size = 12
	case inodeBasicFifo:
		size = 4
	case inodeExtendedFifo:
		size = 8
	case inodeBasicSymlink:
		size = 9
	case inodeExtendedSymlink:
		size = 13
	case inodeBasicBlock:
		size = 8
	case inodeExtendedBlock:
		size = 12
	case inodeBasicSocket:
		size = 4
	case inodeExtendedSocket:
		size = 8
	default:
		return 0
	}
	return size
}

/*
  All of our 14 inode types
*/
// basicDirectory
type basicDirectory struct {
	startBlock       uint32
	links            uint32
	fileSize         uint16
	offset           uint16
	parentInodeIndex uint32
}

func (i basicDirectory) toBytes() []byte {
	b := make([]byte, 16)
	binary.LittleEndian.PutUint32(b[0:4], i.startBlock)
	binary.LittleEndian.PutUint32(b[4:8], i.links)
	binary.LittleEndian.PutUint16(b[8:10], i.fileSize)
	binary.LittleEndian.PutUint16(b[10:12], i.offset)
	binary.LittleEndian.PutUint32(b[12:16], i.parentInodeIndex)
	return b
}
func (i basicDirectory) size() int64 {
	return int64(i.fileSize)
}
func (i basicDirectory) xattrIndex() (uint32, bool) {
	return 0, false
}
func (i basicDirectory) equal(o inodeBody) bool {
	oi, ok := o.(basicDirectory)
	if !ok {
		return false
	}
	if i != oi {
		return false
	}
	return true
}
func parseBasicDirectory(b []byte) (*basicDirectory, error) {
	target := 16
	if len(b) < target {
		return nil, fmt.Errorf("received %d bytes, fewer than minimum %d", len(b), target)
	}
	d := &basicDirectory{
		startBlock:       binary.LittleEndian.Uint32(b[0:4]),
		links:            binary.LittleEndian.Uint32(b[4:8]),
		fileSize:         binary.LittleEndian.Uint16(b[8:10]),
		offset:           binary.LittleEndian.Uint16(b[10:12]),
		parentInodeIndex: binary.LittleEndian.Uint32(b[12:16]),
	}
	return d, nil
}

// directoryIndex
type directoryIndex struct {
	index uint32
	block uint32
	size  uint32
	name  byte
}

// extendedDirectory
type extendedDirectory struct {
	links            uint32
	fileSize         uint32
	startBlock       uint32
	parentInodeIndex uint32
	indexCount       uint16
	offset           uint16
	xAttrIndex       uint32
	indexes          []*directoryIndex
}

func (i extendedDirectory) toBytes() []byte {
	b := make([]byte, 24)
	binary.LittleEndian.PutUint32(b[0:4], i.links)
	binary.LittleEndian.PutUint32(b[4:8], i.fileSize)
	binary.LittleEndian.PutUint32(b[8:12], i.startBlock)
	binary.LittleEndian.PutUint32(b[12:16], i.parentInodeIndex)
	binary.LittleEndian.PutUint16(b[16:18], i.indexCount)
	binary.LittleEndian.PutUint16(b[18:20], i.offset)
	binary.LittleEndian.PutUint32(b[20:24], i.xAttrIndex)
	return b
}
func (i extendedDirectory) size() int64 {
	return int64(i.fileSize)
}
func (i extendedDirectory) xattrIndex() (uint32, bool) {
	return i.xAttrIndex, i.xAttrIndex != noXattrInodeFlag
}
func (i extendedDirectory) equal(o inodeBody) bool {
	oi, ok := o.(extendedDirectory)
	if !ok {
		return false
	}
	if len(i.indexes) != len(oi.indexes) {
		return false
	}
	for c, elm := range i.indexes {
		if *elm != *oi.indexes[c] {
			return false
		}
	}
	return i.links == oi.links && i.fileSize == oi.fileSize && i.startBlock == oi.startBlock &&
		i.parentInodeIndex == oi.parentInodeIndex && i.indexCount == oi.indexCount &&
		i.offset == oi.offset && i.xAttrIndex == oi.xAttrIndex
}

func parseExtendedDirectory(b []byte) (*extendedDirectory, int, error) {
	var (
		target = 24
		extra  int
	)
	if len(b) < target {
		return nil, 0, fmt.Errorf("received %d bytes, fewer than minimum %d", len(b), target)
	}
	d := &extendedDirectory{
		links:            binary.LittleEndian.Uint32(b[0:4]),
		fileSize:         binary.LittleEndian.Uint32(b[4:8]),
		startBlock:       binary.LittleEndian.Uint32(b[8:12]),
		parentInodeIndex: binary.LittleEndian.Uint32(b[12:16]),
		indexCount:       binary.LittleEndian.Uint16(b[16:18]),
		offset:           binary.LittleEndian.Uint16(b[18:20]),
		xAttrIndex:       binary.LittleEndian.Uint32(b[20:24]),
	}
	// see how many other bytes we need to read for directory indexes
	//
	// each entry in indexes is a struct squashfs_dir_index, which is:
	// struct squashfs_dir_index {
	//      unsigned int            index;
	//      unsigned int            start_block;
	//      unsigned int            size;
	//      unsigned char           name[0];
	// };
	// so each is 4 int + 1 char
	extra = int(d.indexCount) * inodeDirectoryIndexEntrySize
	// do we have enough data left to read those?
	if len(b[target:]) >= extra {
		indexes, err := parseDirectoryIndexes(b[target:target+extra], int(d.indexCount))
		if err != nil {
			return d, 0, err
		}
		d.indexes = indexes
		extra = 0
	}

	return d, extra, nil
}

// parseDirectoryIndexes parse count directoryIndex from the given byte data
func parseDirectoryIndexes(b []byte, count int) ([]*directoryIndex, error) {
	var (
		indexes      []*directoryIndex
		expectedSize = count * inodeDirectoryIndexEntrySize
	)
	if len(b) < expectedSize {
		return nil, fmt.Errorf("expected at least %d bytes, received only %d", expectedSize, len(b))
	}
	for i := 0; i < len(b); i += inodeDirectoryIndexEntrySize {
		indexes = append(indexes, &directoryIndex{
			index: binary.LittleEndian.Uint32(b[0:4]),
			block: binary.LittleEndian.Uint32(b[4:8]),
			size:  binary.LittleEndian.Uint32(b[8:12]),
			name:  b[12],
		})
	}
	return indexes, nil
}

// basicFile
type basicFile struct {
	startBlock         uint32 // block count from the start of the data section where data for this file is stored
	fragmentBlockIndex uint32
	fragmentOffset     uint32
	fileSize           uint32
	blockSizes         []*blockData
}

func (i basicFile) equal(o inodeBody) bool {
	oi, ok := o.(basicFile)
	if !ok {
		return false
	}
	if len(i.blockSizes) != len(oi.blockSizes) {
		return false
	}
	for i, b := range i.blockSizes {
		if (b == nil && oi.blockSizes[i] == nil) || (b != nil && oi.blockSizes[i] == nil) {
			return false
		}
		if *b != *oi.blockSizes[i] {
			return false
		}
	}
	return i.startBlock == oi.startBlock && i.fragmentOffset == oi.fragmentOffset && i.fragmentBlockIndex == oi.fragmentBlockIndex && i.fileSize == oi.fileSize
}

func (i basicFile) toBytes() []byte {
	b := make([]byte, 16+4*len(i.blockSizes))
	binary.LittleEndian.PutUint32(b[0:4], i.startBlock)
	binary.LittleEndian.PutUint32(b[4:8], i.fragmentBlockIndex)
	binary.LittleEndian.PutUint32(b[8:12], i.fragmentOffset)
	binary.LittleEndian.PutUint32(b[12:16], i.fileSize)
	for j, e := range i.blockSizes {
		binary.LittleEndian.PutUint32(b[16+j*4:16+j*4+4], e.toUint32())
	}
	return b
}
func (i basicFile) size() int64 {
	return int64(i.fileSize)
}
func (i basicFile) xattrIndex() (uint32, bool) {
	return 0, false
}
func (i basicFile) toExtended() extendedFile {
	return extendedFile{
		startBlock:         uint64(i.startBlock),
		fileSize:           uint64(i.fileSize),
		sparse:             0,
		links:              0,
		fragmentBlockIndex: i.fragmentBlockIndex,
		fragmentOffset:     i.fragmentOffset,
		xAttrIndex:         0,
		blockSizes:         i.blockSizes,
	}
}
func parseBasicFile(b []byte, blocksize int) (*basicFile, int, error) {
	var (
		target = 16
		extra  int
	)
	if len(b) < target {
		return nil, 0, fmt.Errorf("received %d bytes, fewer than minimum %d", len(b), target)
	}
	fileSize := binary.LittleEndian.Uint32(b[12:16])
	d := &basicFile{
		startBlock:         binary.LittleEndian.Uint32(b[0:4]),
		fragmentBlockIndex: binary.LittleEndian.Uint32(b[4:8]),
		fragmentOffset:     binary.LittleEndian.Uint32(b[8:12]),
		fileSize:           fileSize,
	}
	// see how many other bytes we need to read
	blockListSize := int(d.fileSize) / blocksize
	if int(d.fileSize)%blocksize > 0 && d.fragmentBlockIndex != 0xffffffff {
		blockListSize++
	}
	// do we have enough data left to read those?
	extra = blockListSize * 4
	if len(b[16:]) >= extra {
		d.blockSizes = parseFileBlockSizes(b[16:], int(fileSize), blocksize)
		extra = 0
	}

	return d, extra, nil
}

// extendedFile
type extendedFile struct {
	startBlock         uint64
	fileSize           uint64
	sparse             uint64
	links              uint32
	fragmentBlockIndex uint32
	fragmentOffset     uint32
	xAttrIndex         uint32
	blockSizes         []*blockData
}

func (i extendedFile) equal(o inodeBody) bool {
	oi, ok := o.(extendedFile)
	if !ok {
		return false
	}
	if len(i.blockSizes) != len(oi.blockSizes) {
		return false
	}
	for i, b := range i.blockSizes {
		if (b == nil && oi.blockSizes[i] == nil) || (b != nil && oi.blockSizes[i] == nil) {
			return false
		}
		if *b != *oi.blockSizes[i] {
			return false
		}
	}
	return i.startBlock == oi.startBlock &&
		i.fragmentOffset == oi.fragmentOffset &&
		i.fragmentBlockIndex == oi.fragmentBlockIndex &&
		i.fileSize == oi.fileSize &&
		i.sparse == oi.sparse &&
		i.links == oi.links &&
		i.xAttrIndex == oi.xAttrIndex
}

func (i extendedFile) toBytes() []byte {
	b := make([]byte, 40+4*len(i.blockSizes))
	binary.LittleEndian.PutUint64(b[0:8], i.startBlock)
	binary.LittleEndian.PutUint64(b[8:16], i.fileSize)
	binary.LittleEndian.PutUint64(b[16:24], i.sparse)
	binary.LittleEndian.PutUint32(b[24:28], i.links)
	binary.LittleEndian.PutUint32(b[28:32], i.fragmentBlockIndex)
	binary.LittleEndian.PutUint32(b[32:36], i.fragmentOffset)
	binary.LittleEndian.PutUint32(b[36:40], i.xAttrIndex)
	for j, e := range i.blockSizes {
		binary.LittleEndian.PutUint32(b[40+j*4:40+j*4+4], e.toUint32())
	}
	return b
}
func (i extendedFile) size() int64 {
	return int64(i.fileSize)
}
func (i extendedFile) xattrIndex() (uint32, bool) {
	return i.xAttrIndex, i.xAttrIndex != noXattrInodeFlag
}

func parseExtendedFile(b []byte, blocksize int) (*extendedFile, int, error) {
	var (
		target = 40
		extra  int
	)
	if len(b) < target {
		return nil, 0, fmt.Errorf("received %d bytes instead of expected minimal %d", len(b), target)
	}
	fileSize := binary.LittleEndian.Uint64(b[8:16])
	d := &extendedFile{
		startBlock:         binary.LittleEndian.Uint64(b[0:8]),
		fileSize:           fileSize,
		sparse:             binary.LittleEndian.Uint64(b[16:24]),
		links:              binary.LittleEndian.Uint32(b[24:28]),
		fragmentBlockIndex: binary.LittleEndian.Uint32(b[28:32]),
		fragmentOffset:     binary.LittleEndian.Uint32(b[32:36]),
		xAttrIndex:         binary.LittleEndian.Uint32(b[36:40]),
	}
	// see how many other bytes we need to read
	blockListSize := int(d.fileSize) / blocksize
	if int(d.fileSize)%blocksize > 0 && d.fragmentBlockIndex != 0xffffffff {
		blockListSize++
	}
	// do we have enough data left to read those?
	extra = blockListSize * 4
	if len(b[16:]) >= extra {
		d.blockSizes = parseFileBlockSizes(b[16:], int(fileSize), blocksize)
		extra = 0
	}
	return d, extra, nil
}

// basicSymlink
type basicSymlink struct {
	links  uint32
	target string
}

func (i basicSymlink) toBytes() []byte {
	b := make([]byte, 8)
	binary.LittleEndian.PutUint32(b[0:4], i.links)
	binary.LittleEndian.PutUint32(b[4:8], uint32(len(i.target)))
	b = append(b, []byte(i.target)...)
	return b
}
func (i basicSymlink) size() int64 {
	return 0
}
func (i basicSymlink) xattrIndex() (uint32, bool) {
	return 0, false
}

func (i basicSymlink) equal(o inodeBody) bool {
	oi, ok := o.(basicSymlink)
	if !ok {
		return false
	}
	if i != oi {
		return false
	}
	return true
}

func parseBasicSymlink(b []byte) (*basicSymlink, int, error) {
	var (
		target = 8
		extra  int
	)
	if len(b) < target {
		return nil, 0, fmt.Errorf("received %d bytes instead of expected minimal %d", len(b), target)
	}
	s := &basicSymlink{
		links: binary.LittleEndian.Uint32(b[0:4]),
	}
	extra = int(binary.LittleEndian.Uint32(b[4:8]))
	if len(b[target:]) >= extra {
		s.target = string(b[8 : 8+extra])
		extra = 0
	}
	return s, extra, nil
}

// extendedSymlink
type extendedSymlink struct {
	links      uint32
	target     string
	xAttrIndex uint32
}

func (i extendedSymlink) toBytes() []byte {
	b := make([]byte, 8)
	binary.LittleEndian.PutUint32(b[0:4], i.links)
	binary.LittleEndian.PutUint32(b[4:8], uint32(len(i.target)))
	b = append(b, []byte(i.target)...)
	b2 := make([]byte, 4)
	binary.LittleEndian.PutUint32(b2[0:4], i.xAttrIndex)
	b = append(b, b2...)
	return b
}
func (i extendedSymlink) size() int64 {
	return 0
}
func (i extendedSymlink) xattrIndex() (uint32, bool) {
	return i.xAttrIndex, i.xAttrIndex != noXattrInodeFlag
}

func (i extendedSymlink) equal(o inodeBody) bool {
	oi, ok := o.(extendedSymlink)
	if !ok {
		return false
	}
	if i != oi {
		return false
	}
	return true
}

func parseExtendedSymlink(b []byte) (*extendedSymlink, int, error) {
	var (
		target = 8
		extra  int
	)
	if len(b) < target {
		return nil, 0, fmt.Errorf("received %d bytes instead of expected minimal %d", len(b), target)
	}
	s := &extendedSymlink{
		links: binary.LittleEndian.Uint32(b[0:4]),
	}
	// account for the synlink target, plus 4 bytes for the xattr index after it
	extra = int(binary.LittleEndian.Uint32(b[4:8])) + 4
	if len(b[target:]) > extra {
		s.target = string(b[8 : 8+extra])
		s.xAttrIndex = binary.LittleEndian.Uint32(b[8+extra : 8+extra+4])
		extra = 0
	}
	return s, extra, nil
}

type basicDevice struct {
	links uint32
	major uint32
	minor uint32
}

func (i basicDevice) toBytes() []byte {
	b := make([]byte, 8)
	var devNum = (i.major << 8) | (i.minor & 0xff) | ((i.minor & 0xfff00) << 12)

	binary.LittleEndian.PutUint32(b[0:4], i.links)
	binary.LittleEndian.PutUint32(b[4:8], devNum)
	return b
}
func (i basicDevice) size() int64 {
	return 0
}
func (i basicDevice) xattrIndex() (uint32, bool) {
	return 0, false
}

func (i basicDevice) equal(o inodeBody) bool {
	oi, ok := o.(basicDevice)
	if !ok {
		return false
	}
	if i != oi {
		return false
	}
	return true
}
func parseBasicDevice(b []byte) (*basicDevice, error) {
	target := 8
	if len(b) < target {
		return nil, fmt.Errorf("received %d bytes instead of expected %d", len(b), target)
	}
	devNum := binary.LittleEndian.Uint32(b[4:8])
	s := &basicDevice{
		links: binary.LittleEndian.Uint32(b[0:4]),
		major: (devNum & 0xfff00) >> 8,
		minor: (devNum & 0xff) | ((devNum >> 12) & 0xfff00),
	}
	return s, nil
}

// basicBlock
type basicBlock struct {
	basicDevice
}
type basicChar struct {
	basicDevice
}

type extendedDevice struct {
	links      uint32
	major      uint32
	minor      uint32
	xAttrIndex uint32
}

func (i extendedDevice) toBytes() []byte {
	// easiest to use the basic one
	basic := &basicDevice{
		links: i.links,
		major: i.major,
		minor: i.minor,
	}
	b := basic.toBytes()
	b2 := make([]byte, 4)
	binary.LittleEndian.PutUint32(b2[0:4], i.xAttrIndex)
	b = append(b, b2...)
	return b
}
func (i extendedDevice) size() int64 {
	return 0
}
func (i extendedDevice) xattrIndex() (uint32, bool) {
	return i.xAttrIndex, i.xAttrIndex != noXattrInodeFlag
}

func (i extendedDevice) equal(o inodeBody) bool {
	oi, ok := o.(extendedDevice)
	if !ok {
		return false
	}
	if i != oi {
		return false
	}
	return true
}

func parseExtendedDevice(b []byte) (*extendedDevice, error) {
	target := 12
	if len(b) < target {
		return nil, fmt.Errorf("received %d bytes instead of expected minimal %d", len(b), target)
	}
	basic, err := parseBasicDevice(b[:8])
	if err != nil {
		return nil, fmt.Errorf("error parsing block device: %v", err)
	}
	return &extendedDevice{
		links:      basic.links,
		major:      basic.major,
		minor:      basic.minor,
		xAttrIndex: binary.LittleEndian.Uint32(b[8:12]),
	}, nil
}

// extendedBlock
type extendedBlock struct {
	extendedDevice
}
type extendedChar struct {
	extendedDevice
}

type basicIPC struct {
	links uint32
}

func (i basicIPC) toBytes() []byte {
	b := make([]byte, 4)

	binary.LittleEndian.PutUint32(b[0:4], i.links)
	return b
}
func (i basicIPC) size() int64 {
	return 0
}
func (i basicIPC) xattrIndex() (uint32, bool) {
	return 0, false
}

func (i basicIPC) equal(o inodeBody) bool {
	oi, ok := o.(basicIPC)
	if !ok {
		return false
	}
	if i != oi {
		return false
	}
	return true
}

func parseBasicIPC(b []byte) (*basicIPC, error) {
	target := 4
	if len(b) < target {
		return nil, fmt.Errorf("received %d bytes instead of expected %d", len(b), target)
	}
	s := &basicIPC{
		links: binary.LittleEndian.Uint32(b[0:4]),
	}
	return s, nil
}

type basicFifo struct {
	basicIPC
}
type basicSocket struct {
	basicIPC
}

type extendedIPC struct {
	links      uint32
	xAttrIndex uint32
}

func (i extendedIPC) toBytes() []byte {
	b := make([]byte, 8)

	binary.LittleEndian.PutUint32(b[0:4], i.links)
	binary.LittleEndian.PutUint32(b[4:8], i.xAttrIndex)
	return b
}
func (i extendedIPC) size() int64 {
	return 0
}
func (i extendedIPC) xattrIndex() (uint32, bool) {
	return i.xAttrIndex, i.xAttrIndex != noXattrInodeFlag
}

func (i extendedIPC) equal(o inodeBody) bool {
	oi, ok := o.(extendedIPC)
	if !ok {
		return false
	}
	if i != oi {
		return false
	}
	return true
}

func parseExtendedIPC(b []byte) (*extendedIPC, error) {
	target := 8
	if len(b) < target {
		return nil, fmt.Errorf("received %d bytes instead of expected %d", len(b), target)
	}
	s := &extendedIPC{
		links:      binary.LittleEndian.Uint32(b[0:4]),
		xAttrIndex: binary.LittleEndian.Uint32(b[4:8]),
	}
	return s, nil
}

type extendedFifo struct {
	extendedIPC
}
type extendedSocket struct {
	extendedIPC
}

// idTable is an indexed table of IDs
//
//nolint:deadcode // we need these references in the future
type idTable []uint32

// parseInodeBody parse the body of an inode. This only parses the non-variable size part,
// e.g. not the list of directory indexes in an extended directory inode, or
// the list of blocksizes at the end of a basic file inode or extended file inode. For those,
// parseInodeBody will return how many more bytes it needs to read. It is up to the caller
// to provide those bytes in another call.
func parseInodeBody(b []byte, blocksize int, iType inodeType) (inodeBody, int, error) {
	// now try to read the rest
	var (
		body  inodeBody
		err   error
		extra int
	)
	switch iType {
	case inodeBasicDirectory:
		body, err = parseBasicDirectory(b)
	case inodeExtendedDirectory:
		body, extra, err = parseExtendedDirectory(b)
	case inodeBasicFile:
		body, extra, err = parseBasicFile(b, blocksize)
	case inodeExtendedFile:
		body, extra, err = parseExtendedFile(b, blocksize)
	case inodeBasicChar, inodeBasicBlock:
		body, err = parseBasicDevice(b)
	case inodeExtendedChar, inodeExtendedBlock:
		body, err = parseExtendedDevice(b)
	case inodeBasicSymlink:
		body, extra, err = parseBasicSymlink(b)
	case inodeExtendedSymlink:
		body, extra, err = parseExtendedSymlink(b)
	case inodeBasicFifo, inodeBasicSocket:
		body, err = parseBasicIPC(b)
	case inodeExtendedFifo, inodeExtendedSocket:
		body, err = parseExtendedIPC(b)
	default:
		err = fmt.Errorf("unknown inode type: %v", iType)
	}
	return body, extra, err
}
 07070100000337000081A4000000000000000000000001645E367C00000F50000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/squashfs/metadatablock.go   package squashfs

import (
	"encoding/binary"
	"fmt"
	"io"
)

type metadatablock struct {
	compressed bool
	data       []byte
}

const (
	minMetadataBlockSize      = 3
	standardMetadataBlocksize = 8192
)

func getMetadataSize(b []byte) (size uint16, compressed bool, err error) {
	if len(b) < 2 {
		return 0, false, fmt.Errorf("cannot read size of metadata block with %d bytes, must have minimum %d", len(b), 2)
	}
	header := binary.LittleEndian.Uint16(b[:2])
	size = header & 0x7fff
	compressed = header&0x8000 != 0x8000
	return size, compressed, nil
}

func parseMetadata(b []byte, c Compressor) (block *metadatablock, err error) {
	if len(b) < minMetadataBlockSize {
		return nil, fmt.Errorf("metadata block was of len %d, less than minimum %d", len(b), minMetadataBlockSize)
	}
	size, compressed, err := getMetadataSize(b[:2])
	if err != nil {
		return nil, fmt.Errorf("error reading metadata header: %v", err)
	}
	if len(b) < int(2+size) {
		return nil, fmt.Errorf("metadata header said size should be %d but was only %d", size, len(b)-2)
	}
	data := b[2 : 2+size]
	if compressed {
		data, err = c.decompress(data)
		if err != nil {
			return nil, fmt.Errorf("decompress error: %v", err)
		}
	}
	return &metadatablock{
		compressed: compressed,
		data:       data,
	}, nil
}

func (m *metadatablock) toBytes(c Compressor) ([]byte, error) {
	b := make([]byte, 2)
	var (
		header uint16
		data   = m.data
		err    error
	)
	if !m.compressed {
		header |= 0x8000
	} else {
		data, err = c.compress(m.data)
		if err != nil {
			return nil, fmt.Errorf("compression error: %v", err)
		}
	}
	header |= uint16(len(data))
	binary.LittleEndian.PutUint16(b[:2], header)
	b = append(b, data...)
	return b, nil
}

func readMetaBlock(r io.ReaderAt, c Compressor, location int64) (data []byte, size uint16, err error) {
	// read bytes off the reader to determine how big it is and if compressed
	b := make([]byte, 2)
	_, _ = r.ReadAt(b, location)
	size, compressed, err := getMetadataSize(b)
	if err != nil {
		return nil, 0, fmt.Errorf("error getting size and compression for metadata block at %d: %v", location, err)
	}
	b = make([]byte, size)
	read, err := r.ReadAt(b, location+2)
	if err != nil && err != io.EOF {
		return nil, 0, fmt.Errorf("unable to read metadata block of size %d at location %d: %v", size, location, err)
	}
	if read != len(b) {
		return nil, 0, fmt.Errorf("read %d instead of expected %d bytes for metadata block at location %d", read, size, location)
	}
	data = b
	if compressed {
		if c == nil {
			return nil, 0, fmt.Errorf("metadata block at %d compressed, but no compressor provided", location)
		}
		data, err = c.decompress(b)
		if err != nil {
			return nil, 0, fmt.Errorf("decompress error: %v", err)
		}
	}
	return data, size + 2, nil
}

// readMetadata read as many bytes of metadata as required for the given size, with the byteOffset provided as a starting
// point into the first block. Can read multiple blocks if necessary, e.g. if a block is 8192 bytes (standard), and
// requests to read 500 bytes beginning at offset 8000 into the first block.
// it always returns to the end of the block, even if that is greater than the given size. This makes it easy to use more
// data than expected on first read. The consumer is expected to cut it down, if needed
func readMetadata(r io.ReaderAt, c Compressor, firstBlock int64, initialBlockOffset uint32, byteOffset uint16, size int) ([]byte, error) {
	var (
		b           []byte
		blockOffset = int(initialBlockOffset)
	)
	// we know how many blocks, so read them all in
	m, read, err := readMetaBlock(r, c, firstBlock+int64(blockOffset))
	if err != nil {
		return nil, err
	}
	b = append(b, m[byteOffset:]...)
	// do we have any more to read?
	for len(b) < size {
		blockOffset += int(read)
		m, read, err = readMetaBlock(r, c, firstBlock+int64(blockOffset))
		if err != nil {
			return nil, err
		}
		b = append(b, m...)
	}
	return b, nil
}
07070100000338000081A4000000000000000000000001645E367C000065BC000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/squashfs/squashfs.go    package squashfs

import (
	"encoding/binary"
	"fmt"
	"io"
	"math"
	"os"
	"path"

	"github.com/diskfs/go-diskfs/filesystem"
	"github.com/diskfs/go-diskfs/util"
)

const (
	defaultBlockSize  = 128 * KB
	metadataBlockSize = 8 * KB
	minBlocksize      = 4 * KB
	maxBlocksize      = 1 * MB
)

// FileSystem implements the FileSystem interface
type FileSystem struct {
	workspace  string
	superblock *superblock
	size       int64
	start      int64
	file       util.File
	blocksize  int64
	compressor Compressor
	fragments  []*fragmentEntry
	uidsGids   []uint32
	xattrs     *xAttrTable
	rootDir    inode
}

// Equal compare if two filesystems are equal
func (fs *FileSystem) Equal(a *FileSystem) bool {
	localMatch := fs.file == a.file && fs.size == a.size
	superblockMatch := fs.superblock.equal(a.superblock)
	return localMatch && superblockMatch
}

// Label return the filesystem label
func (fs *FileSystem) Label() string {
	return ""
}

func (fs *FileSystem) SetLabel(string) error {
	return fmt.Errorf("SquashFS filesystem is read-only")
}

// Workspace get the workspace path
func (fs *FileSystem) Workspace() string {
	return fs.workspace
}

// Create creates a squashfs filesystem in a given directory
//
// requires the util.File where to create the filesystem, size is the size of the filesystem in bytes,
// start is how far in bytes from the beginning of the util.File to create the filesystem,
// and blocksize is is the logical blocksize to use for creating the filesystem
//
// note that you are *not* required to create the filesystem on the entire disk. You could have a disk of size
// 20GB, and create a small filesystem of size 50MB that begins 2GB into the disk.
// This is extremely useful for creating filesystems on disk partitions.
//
// Note, however, that it is much easier to do this using the higher-level APIs at github.com/diskfs/go-diskfs
// which allow you to work directly with partitions, rather than having to calculate (and hopefully not make any errors)
// where a partition starts and ends.
//
// If the provided blocksize is 0, it will use the default of 128 KB.
func Create(f util.File, size, start, blocksize int64) (*FileSystem, error) {
	if blocksize == 0 {
		blocksize = defaultBlockSize
	}
	// make sure it is an allowed blocksize
	if err := validateBlocksize(blocksize); err != nil {
		return nil, err
	}

	// create a temporary working area where we can create the filesystem.
	//  It is only on `Finalize()` that we write it out to the actual disk file
	tmpdir, err := os.MkdirTemp("", "diskfs_squashfs")
	if err != nil {
		return nil, fmt.Errorf("could not create working directory: %v", err)
	}

	// create root directory
	// there is nothing in there
	return &FileSystem{
		workspace: tmpdir,
		start:     start,
		size:      size,
		file:      f,
		blocksize: blocksize,
	}, nil
}

// Read reads a filesystem from a given disk.
//
// requires the util.File where to read the filesystem, size is the size of the filesystem in bytes,
// start is how far in bytes from the beginning of the util.File the filesystem is expected to begin,
// and blocksize is is the logical blocksize to use for creating the filesystem
//
// note that you are *not* required to read a filesystem on the entire disk. You could have a disk of size
// 20GB, and a small filesystem of size 50MB that begins 2GB into the disk.
// This is extremely useful for working with filesystems on disk partitions.
//
// Note, however, that it is much easier to do this using the higher-level APIs at github.com/diskfs/go-diskfs
// which allow you to work directly with partitions, rather than having to calculate (and hopefully not make any errors)
// where a partition starts and ends.
//
// If the provided blocksize is 0, it will use the default of 2K bytes
func Read(file util.File, size, start, blocksize int64) (*FileSystem, error) {
	var (
		read int
		err  error
	)

	if blocksize == 0 {
		blocksize = defaultBlockSize
	}
	// make sure it is an allowed blocksize
	if err := validateBlocksize(blocksize); err != nil {
		return nil, err
	}

	// load the information from the disk

	// read the superblock
	b := make([]byte, superblockSize)
	read, err = file.ReadAt(b, start)
	if err != nil {
		return nil, fmt.Errorf("unable to read bytes for superblock: %v", err)
	}
	if int64(read) != superblockSize {
		return nil, fmt.Errorf("read %d bytes instead of expected %d for superblock", read, superblockSize)
	}

	// parse superblock
	s, err := parseSuperblock(b)
	if err != nil {
		return nil, fmt.Errorf("error parsing superblock: %v", err)
	}

	// create the compressor function we will use
	compress, err := newCompressor(s.compression)
	if err != nil {
		return nil, fmt.Errorf("unable to create compressor")
	}

	// load fragments
	fragments, err := readFragmentTable(s, file, compress)
	if err != nil {
		return nil, fmt.Errorf("error reading fragments: %v", err)
	}

	// read xattrs
	var (
		xattrs *xAttrTable
	)
	if !s.noXattrs {
		// xattr is right to the end of the disk
		xattrs, err = readXattrsTable(s, file, compress)
		if err != nil {
			return nil, fmt.Errorf("error reading xattr table: %v", err)
		}
	}

	// read uidsgids
	uidsgids, err := readUidsGids(s, file, compress)
	if err != nil {
		return nil, fmt.Errorf("error reading uids/gids: %v", err)
	}

	fs := &FileSystem{
		workspace:  "", // no workspace when we do nothing with it
		start:      start,
		size:       size,
		file:       file,
		superblock: s,
		blocksize:  blocksize,
		xattrs:     xattrs,
		compressor: compress,
		fragments:  fragments,
		uidsGids:   uidsgids,
	}
	// for efficiency, read in the root inode right now
	rootInode, err := fs.getInode(s.rootInode.block, s.rootInode.offset, inodeBasicDirectory)
	if err != nil {
		return nil, fmt.Errorf("unable to read root inode")
	}
	fs.rootDir = rootInode
	return fs, nil
}

// Type returns the type code for the filesystem. Always returns filesystem.TypeFat32
func (fs *FileSystem) Type() filesystem.Type {
	return filesystem.TypeSquashfs
}

// Mkdir make a directory at the given path. It is equivalent to `mkdir -p`, i.e. idempotent, in that:
//
// * It will make the entire tree path if it does not exist
// * It will not return an error if the path already exists
//
// if readonly and not in workspace, will return an error
func (fs *FileSystem) Mkdir(p string) error {
	if fs.workspace == "" {
		return fmt.Errorf("cannot write to read-only filesystem")
	}
	err := os.MkdirAll(path.Join(fs.workspace, p), 0o755)
	if err != nil {
		return fmt.Errorf("could not create directory %s: %v", p, err)
	}
	// we are not interesting in returning the entries
	return err
}

// ReadDir return the contents of a given directory in a given filesystem.
//
// Returns a slice of os.FileInfo with all of the entries in the directory.
//
// Will return an error if the directory does not exist or is a regular file and not a directory
func (fs *FileSystem) ReadDir(p string) ([]os.FileInfo, error) {
	var fi []os.FileInfo
	// non-workspace: read from squashfs
	// workspace: read from regular filesystem
	if fs.workspace != "" {
		fullPath := path.Join(fs.workspace, p)
		// read the entries
		dirEntries, err := os.ReadDir(fullPath)
		if err != nil {
			return nil, fmt.Errorf("could not read directory %s: %v", p, err)
		}
		for _, e := range dirEntries {
			info, err := e.Info()
			if err != nil {
				return nil, fmt.Errorf("could not read directory %s: %v", p, err)
			}

			fi = append(fi, info)
		}
	} else {
		dirEntries, err := fs.readDirectory(p)
		if err != nil {
			return nil, fmt.Errorf("error reading directory %s: %v", p, err)
		}
		fi = make([]os.FileInfo, 0, len(dirEntries))
		for _, entry := range dirEntries {
			fi = append(fi, entry)
		}
	}
	return fi, nil
}

// OpenFile returns an io.ReadWriter from which you can read the contents of a file
// or write contents to the file
//
// accepts normal os.OpenFile flags
//
// returns an error if the file does not exist
func (fs *FileSystem) OpenFile(p string, flag int) (filesystem.File, error) {
	var f filesystem.File
	var err error

	// get the path and filename
	dir := path.Dir(p)
	filename := path.Base(p)

	// if the dir == filename, then it is just /
	if dir == filename {
		return nil, fmt.Errorf("cannot open directory %s as file", p)
	}

	// cannot open to write or append or create if we do not have a workspace
	writeMode := flag&os.O_WRONLY != 0 || flag&os.O_RDWR != 0 || flag&os.O_APPEND != 0 || flag&os.O_CREATE != 0 || flag&os.O_TRUNC != 0 || flag&os.O_EXCL != 0
	if fs.workspace == "" {
		if writeMode {
			return nil, fmt.Errorf("cannot write to read-only filesystem")
		}

		// get the directory entries
		var entries []*directoryEntry
		entries, err = fs.readDirectory(dir)
		if err != nil {
			return nil, fmt.Errorf("could not read directory entries for %s", dir)
		}
		// we now know that the directory exists, see if the file exists
		var targetEntry *directoryEntry
		for _, e := range entries {
			eName := e.Name()
			// cannot do anything with directories
			if eName == filename && e.IsDir() {
				return nil, fmt.Errorf("cannot open directory %s as file", p)
			}
			if eName == filename {
				// if we got this far, we have found the file
				targetEntry = e
				break
			}
		}

		// see if the file exists
		// if the file does not exist, and is not opened for os.O_CREATE, return an error
		if targetEntry == nil {
			return nil, fmt.Errorf("target file %s does not exist", p)
		}
		// get the inode data for this file
		// now open the file
		// get the inode for the file
		var eFile *extendedFile
		in := targetEntry.inode
		iType := in.inodeType()
		body := in.getBody()
		//nolint:exhaustive // all other cases fall under default
		switch iType {
		case inodeBasicFile:
			extFile := body.(*basicFile).toExtended()
			eFile = &extFile
		case inodeExtendedFile:
			eFile, _ = body.(*extendedFile)
		default:
			return nil, fmt.Errorf("inode is of type %d, neither basic nor extended directory", iType)
		}

		f = &File{
			extendedFile: eFile,
			isReadWrite:  false,
			isAppend:     false,
			offset:       0,
			filesystem:   fs,
		}
	} else {
		f, err = os.OpenFile(path.Join(fs.workspace, p), flag, 0o644)
		if err != nil {
			return nil, fmt.Errorf("target file %s does not exist: %v", p, err)
		}
	}

	return f, nil
}

// readDirectory - read directory entry on squashfs only (not workspace)
func (fs *FileSystem) readDirectory(p string) ([]*directoryEntry, error) {
	// use the root inode to find the location of the root direectory in the table
	entries, err := fs.getDirectoryEntries(p, fs.rootDir)
	if err != nil {
		return nil, fmt.Errorf("could not read directory at path %s: %v", p, err)
	}
	return entries, nil
}

func (fs *FileSystem) getDirectoryEntries(p string, in inode) ([]*directoryEntry, error) {
	var (
		block  uint32
		offset uint16
		size   int
	)

	// break path down into parts and levels
	parts := splitPath(p)

	iType := in.inodeType()
	body := in.getBody()
	//nolint:exhaustive // we only are looking for directory types here
	switch iType {
	case inodeBasicDirectory:
		dir, _ := body.(*basicDirectory)
		block = dir.startBlock
		offset = dir.offset
		size = int(dir.fileSize)
	case inodeExtendedDirectory:
		dir, _ := body.(*extendedDirectory)
		block = dir.startBlock
		offset = dir.offset
		size = int(dir.fileSize)
	default:
		return nil, fmt.Errorf("inode is of type %d, neither basic nor extended directory", iType)
	}
	// read the directory data from the directory table
	dir, err := fs.getDirectory(block, offset, size)
	if err != nil {
		return nil, fmt.Errorf("unable to read directory from table: %v", err)
	}
	entriesRaw := dir.entries
	var entries []*directoryEntry
	// if this is the directory we are looking for, return the entries
	if len(parts) == 0 {
		entries, err = fs.hydrateDirectoryEntries(entriesRaw)
		if err != nil {
			return nil, fmt.Errorf("could not populate directory entries for %s with properties: %v", p, err)
		}
		return entries, nil
	}

	// it is not, so dig down one level
	// find the entry among the children that has the desired name
	for _, entry := range entriesRaw {
		// only care if not self or parent entry
		checkFilename := entry.name
		if checkFilename == parts[0] {
			// read the inode for this entry
			inode, err := fs.getInode(entry.startBlock, entry.offset, entry.inodeType)
			if err != nil {
				return nil, fmt.Errorf("error finding inode for %s: %v", p, err)
			}

			childPath := ""
			if len(parts) > 1 {
				childPath = path.Join(parts[1:]...)
			}
			entries, err = fs.getDirectoryEntries(childPath, inode)
			if err != nil {
				return nil, fmt.Errorf("could not get entries: %v", err)
			}
			return entries, nil
		}
	}
	// if we made it here, we were not looking for this directory, but did not find it among our children
	return nil, fmt.Errorf("could not find path %s", p)
}

func (fs *FileSystem) hydrateDirectoryEntries(entries []*directoryEntryRaw) ([]*directoryEntry, error) {
	fullEntries := make([]*directoryEntry, 0)
	for _, e := range entries {
		// read the inode for this entry
		in, err := fs.getInode(e.startBlock, e.offset, e.inodeType)
		if err != nil {
			return nil, fmt.Errorf("error finding inode for %s: %v", e.name, err)
		}
		body, header := in.getBody(), in.getHeader()
		xattrIndex, has := body.xattrIndex()
		xattrs := map[string]string{}
		if has && xattrIndex != noXattrInodeFlag {
			xattrs, err = fs.xattrs.find(int(xattrIndex))
			if err != nil {
				return nil, fmt.Errorf("error reading xattrs for %s: %v", e.name, err)
			}
		}
		fullEntries = append(fullEntries, &directoryEntry{
			isSubdirectory: e.isSubdirectory,
			name:           e.name,
			size:           body.size(),
			modTime:        header.modTime,
			mode:           header.mode,
			inode:          in,
			sys: FileStat{
				uid:    fs.uidsGids[header.uidIdx],
				gid:    fs.uidsGids[header.gidIdx],
				xattrs: xattrs,
			},
		})
	}
	return fullEntries, nil
}

// getInode read a single inode, given the block offset, and the offset in the
// block when uncompressed. This may require two reads, one to get the header and discover the type,
// and then another to read the rest. Some inodes even have a variable length, which complicates it
// further.
func (fs *FileSystem) getInode(blockOffset uint32, byteOffset uint16, iType inodeType) (inode, error) {
	// get the block
	// start by getting the minimum for the proposed type. It very well might be wrong.
	size := inodeTypeToSize(iType)
	uncompressed, err := readMetadata(fs.file, fs.compressor, int64(fs.superblock.inodeTableStart), blockOffset, byteOffset, size)
	if err != nil {
		return nil, fmt.Errorf("error reading block at position %d: %v", blockOffset, err)
	}
	// parse the header to see the type matches
	header, err := parseInodeHeader(uncompressed)
	if err != nil {
		return nil, fmt.Errorf("error parsing inode header: %v", err)
	}
	if header.inodeType != iType {
		iType = header.inodeType
	}
	// now read the body, which may have a variable size
	body, extra, err := parseInodeBody(uncompressed[inodeHeaderSize:], int(fs.blocksize), iType)
	if err != nil {
		return nil, fmt.Errorf("error parsing inode body: %v", err)
	}
	// if it returns extra > 0, then it needs that many more bytes to be read, and to be reparsed
	if extra > 0 {
		size += extra
		uncompressed, err = readMetadata(fs.file, fs.compressor, int64(fs.superblock.inodeTableStart), blockOffset, byteOffset, size)
		if err != nil {
			return nil, fmt.Errorf("error reading block at position %d: %v", blockOffset, err)
		}
		// no need to revalidate the body type, or check for extra
		body, _, err = parseInodeBody(uncompressed[inodeHeaderSize:], int(fs.blocksize), iType)
		if err != nil {
			return nil, fmt.Errorf("error parsing inode body: %v", err)
		}
	}
	return &inodeImpl{
		header: header,
		body:   body,
	}, nil
}

// getDirectory read a single directory, given the block offset, and the offset in the
// block when uncompressed.
func (fs *FileSystem) getDirectory(blockOffset uint32, byteOffset uint16, size int) (*directory, error) {
	// get the block
	uncompressed, err := readMetadata(fs.file, fs.compressor, int64(fs.superblock.directoryTableStart), blockOffset, byteOffset, size)
	if err != nil {
		return nil, fmt.Errorf("error reading block at position %d: %v", blockOffset, err)
	}
	// for parseDirectory, we only want to use precisely the right number of bytes
	if len(uncompressed) > size {
		uncompressed = uncompressed[:size]
	}
	// get the inode from the offset into the uncompressed block
	return parseDirectory(uncompressed)
}

func (fs *FileSystem) readBlock(location int64, compressed bool, size uint32) ([]byte, error) {
	b := make([]byte, size)
	read, err := fs.file.ReadAt(b, location)
	if err != nil && err != io.EOF {
		return nil, fmt.Errorf("error reading block %d: %v", location, err)
	}
	if read != int(size) {
		return nil, fmt.Errorf("read %d bytes instead of expected %d", read, size)
	}
	if compressed {
		b, err = fs.compressor.decompress(b)
		if err != nil {
			return nil, fmt.Errorf("decompress error: %v", err)
		}
	}
	return b, nil
}

func (fs *FileSystem) readFragment(index, offset uint32, fragmentSize int64) ([]byte, error) {
	// get info from the fragment table
	// figure out which block of the fragment table we need

	// first find where the compressed fragment table entry for the given index is
	if len(fs.fragments)-1 < int(index) {
		return nil, fmt.Errorf("cannot find fragment block with index %d", index)
	}
	fragmentInfo := fs.fragments[index]
	// figure out the size of the compressed block and if it is compressed
	b := make([]byte, fragmentInfo.size)
	read, err := fs.file.ReadAt(b, int64(fragmentInfo.start))
	if err != nil && err != io.EOF {
		return nil, fmt.Errorf("unable to read fragment block %d: %v", index, err)
	}
	if read != len(b) {
		return nil, fmt.Errorf("read %d instead of expected %d bytes for fragment block %d", read, len(b), index)
	}

	data := b
	if fragmentInfo.compressed {
		if fs.compressor == nil {
			return nil, fmt.Errorf("fragment compressed but do not have valid compressor")
		}
		data, err = fs.compressor.decompress(b)
		if err != nil {
			return nil, fmt.Errorf("decompress error: %v", err)
		}
	}
	// now get the data from the offset
	return data[offset : int64(offset)+fragmentSize], nil
}

func validateBlocksize(blocksize int64) error {
	blocksizeFloat := float64(blocksize)
	l2 := math.Log2(blocksizeFloat)
	switch {
	case blocksize < minBlocksize:
		return fmt.Errorf("blocksize %d too small, must be at least %d", blocksize, minBlocksize)
	case blocksize > maxBlocksize:
		return fmt.Errorf("blocksize %d too large, must be no more than %d", blocksize, maxBlocksize)
	case math.Trunc(l2) != l2:
		return fmt.Errorf("blocksize %d is not a power of 2", blocksize)
	}
	return nil
}

func readFragmentTable(s *superblock, file util.File, c Compressor) ([]*fragmentEntry, error) {
	// get the first level index, which is just the pointers to the fragment table metadata blocks
	blockCount := s.fragmentCount / 512
	if s.fragmentCount%512 > 0 {
		blockCount++
	}
	// now read the index - we have as many offsets, each of uint64, as we have blockCount
	b := make([]byte, 8*blockCount)
	read, err := file.ReadAt(b, int64(s.fragmentTableStart))
	if err != nil {
		return nil, fmt.Errorf("error reading fragment table index: %v", err)
	}
	if read != len(b) {
		return nil, fmt.Errorf("read %d bytes instead of expected %d bytes of fragment table index", read, len(b))
	}
	var offsets []int64
	for i := 0; i < len(b); i += 8 {
		offsets = append(offsets, int64(binary.LittleEndian.Uint64(b[i:i+8])))
	}
	// offsets now contains all of the fragment block offsets
	// load in the actual fragment entries
	// read each block and uncompress it
	var fragmentTable []*fragmentEntry
	for i, offset := range offsets {
		uncompressed, _, err := readMetaBlock(file, c, offset)
		if err != nil {
			return nil, fmt.Errorf("error reading meta block %d at position %d: %v", i, offset, err)
		}
		// uncompressed should be a multiple of 16 bytes
		for j := 0; j < len(uncompressed); j += 16 {
			entry, err := parseFragmentEntry(uncompressed[j:])
			if err != nil {
				return nil, fmt.Errorf("error parsing fragment table entry in block %d position %d: %v", i, j, err)
			}
			fragmentTable = append(fragmentTable, entry)
		}
	}
	return fragmentTable, nil
}

/*
How the xattr table is laid out
It has three components in the following order
1- xattr metadata
2- xattr id table
3- xattr index

To read the xattr table:
1- Get the start of the index from the superblock
2- read the index header, which contains: metadata start; id count
3- Calculate how many bytes of index data there are: (id count)*(index size)
4- Calculate how many meta blocks of index data there are, as each block is 8K uncompressed
5- Read the indexes immediately following the header. They are uncompressed, 8 bytes each (uint64); one index per id metablock
6- Read the id metablocks based on the indexes and uncompress if needed
7- Read all of the xattr metadata. It starts at the location indicated by the header, and ends at the id table
*/
func readXattrsTable(s *superblock, file util.File, c Compressor) (*xAttrTable, error) {
	// first read the header
	b := make([]byte, xAttrHeaderSize)
	read, err := file.ReadAt(b, int64(s.xattrTableStart))
	if err != nil && err != io.EOF {
		return nil, fmt.Errorf("unable to read bytes for xattrs metadata ID header: %v", err)
	}
	if read != len(b) {
		return nil, fmt.Errorf("read %d bytes instead of expected %d for xattrs metadata ID header", read, len(b))
	}
	// find out how many xattr IDs we have and where the metadata starts. The table always starts
	//   with this information
	xAttrStart := binary.LittleEndian.Uint64(b[0:8])
	xAttrCount := binary.LittleEndian.Uint32(b[8:12])
	// the last 4 bytes are an unused uint32

	// if we have none?
	if xAttrCount == 0 {
		return nil, nil
	}

	// how many bytes total do we need?
	idBytes := xAttrCount * xAttrIDEntrySize
	// how many metadata blocks?
	idBlocks := ((idBytes - 1) / uint32(metadataBlockSize)) + 1
	b = make([]byte, idBlocks*8)
	read, err = file.ReadAt(b, int64(s.xattrTableStart)+int64(xAttrHeaderSize))
	if err != nil && err != io.EOF {
		return nil, fmt.Errorf("unable to read bytes for xattrs metadata ID table: %v", err)
	}
	if read != len(b) {
		return nil, fmt.Errorf("read %d bytes instead of expected %d for xattrs metadata ID table", read, len(b))
	}

	var (
		uncompressed []byte
		size         uint16
	)

	bIndex := make([]byte, 0)
	// convert those into indexes
	for i := 0; i+8-1 < len(b); i += 8 {
		locn := binary.LittleEndian.Uint64(b[i : i+8])
		uncompressed, _, err = readMetaBlock(file, c, int64(locn))
		if err != nil {
			return nil, fmt.Errorf("error reading xattr index meta block %d at position %d: %v", i, locn, err)
		}
		bIndex = append(bIndex, uncompressed...)
	}

	// now load the actual xAttrs data
	xAttrEnd := binary.LittleEndian.Uint64(b[:8])
	xAttrData := make([]byte, 0)
	for i := xAttrStart; i < xAttrEnd; {
		uncompressed, size, err = readMetaBlock(file, c, int64(i))
		if err != nil {
			return nil, fmt.Errorf("error reading xattr data meta block at position %d: %v", i, err)
		}
		xAttrData = append(xAttrData, uncompressed...)
		i += uint64(size)
	}

	// now have all of the indexes and metadata loaded
	// need to pass it the offset of the beginning of the id table from the beginning of the disk
	return parseXattrsTable(xAttrData, bIndex, s.idTableStart, c)
}

//nolint:unparam // this does not use offset or compressor yet, but only because we have not yet added support
func parseXattrsTable(bUIDXattr, bIndex []byte, offset uint64, c Compressor) (*xAttrTable, error) {
	// create the ID list
	var (
		xAttrIDList []*xAttrIndex
	)

	entrySize := int(xAttrIDEntrySize)
	for i := 0; i+entrySize <= len(bIndex); i += entrySize {
		entry, err := parseXAttrIndex(bIndex[i:])
		if err != nil {
			return nil, fmt.Errorf("error parsing xAttr ID table entry in position %d: %v", i, err)
		}
		xAttrIDList = append(xAttrIDList, entry)
	}

	return &xAttrTable{
		list: xAttrIDList,
		data: bUIDXattr,
	}, nil
}

/*
How the uids/gids table is laid out
It has two components in the following order
1- list of uids/gids in order, each uint32. These are in metadata blocks of uncompressed 8K size
2- list of indexes to metadata blocks

To read the uids/gids table:
1- Get the start of the index from the superblock
2- Calculate how many bytes of ids there are: (id count)*(id size), where (id size) = 4 bytes (uint32)
3- Calculate how many meta blocks of id data there are, as each block is 8K uncompressed
4- Read the indexes. They are uncompressed, 8 bytes each (uint64); one index per id metablock
5- Read the id metablocks based on the indexes and uncompress if needed
*/
func readUidsGids(s *superblock, file util.File, c Compressor) ([]uint32, error) {
	// find out how many xattr IDs we have and where the metadata starts. The table always starts
	//   with this information
	idStart := s.idTableStart
	idCount := s.idCount

	// if we have none?
	if idCount == 0 {
		return nil, nil
	}

	// how many bytes total do we need?
	idBytes := idCount * idEntrySize
	// how many metadata blocks?
	idBlocks := ((idBytes - 1) / uint16(metadataBlockSize)) + 1
	b := make([]byte, idBlocks*8)
	read, err := file.ReadAt(b, int64(idStart))
	if err != nil && err != io.EOF {
		return nil, fmt.Errorf("unable to read index bytes for uidgid ID table: %v", err)
	}
	if read != len(b) {
		return nil, fmt.Errorf("read %d bytes instead of expected %d for uidgid ID table", read, len(b))
	}

	var (
		uncompressed []byte
	)

	data := make([]byte, 0)
	// convert those into indexes
	for i := 0; i+8-1 < len(b); i += 8 {
		locn := binary.LittleEndian.Uint64(b[i : i+8])
		uncompressed, _, err = readMetaBlock(file, c, int64(locn))
		if err != nil {
			return nil, fmt.Errorf("error reading uidgid index meta block %d at position %d: %v", i, locn, err)
		}
		data = append(data, uncompressed...)
	}

	// now have all of the data loaded
	return parseIDTable(data), nil
}
07070100000339000081A4000000000000000000000001645E367C00001AF8000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/squashfs/superblock.go  package squashfs

import (
	"encoding/binary"
	"fmt"
	"math"
	"time"
)

const (
	superblockMagic        uint32 = 0x73717368
	superblockMajorVersion uint16 = 4
	superblockMinorVersion uint16 = 0
)

type compression uint16

const (
	compressionNone compression = 0
	compressionGzip compression = 1
	compressionLzma compression = 2
	compressionLzo  compression = 3
	compressionXz   compression = 4
	compressionLz4  compression = 5
	compressionZstd compression = 6
)

const (
	superblockSize = 96
)

type inodeRef struct {
	block  uint32
	offset uint16
}

func (i *inodeRef) toUint64() uint64 {
	var u uint64
	u |= (uint64(i.block) << 16)
	u |= uint64(i.offset)
	return u
}
func parseRootInode(u uint64) *inodeRef {
	i := &inodeRef{
		block:  uint32((u >> 16) & 0xffffffff),
		offset: uint16(u & 0xffff),
	}
	return i
}

type superblockFlags struct {
	uncompressedInodes    bool
	uncompressedData      bool
	uncompressedFragments bool
	noFragments           bool
	alwaysFragments       bool
	dedup                 bool
	exportable            bool
	uncompressedXattrs    bool
	noXattrs              bool
	compressorOptions     bool
	uncompressedIDs       bool
}

type superblock struct {
	inodes              uint32
	modTime             time.Time
	blocksize           uint32
	fragmentCount       uint32
	compression         compression
	idCount             uint16
	versionMajor        uint16
	versionMinor        uint16
	rootInode           *inodeRef
	size                uint64
	idTableStart        uint64
	xattrTableStart     uint64
	inodeTableStart     uint64
	directoryTableStart uint64
	fragmentTableStart  uint64
	exportTableStart    uint64
	superblockFlags
}

func (s *superblock) equal(a *superblock) bool {
	// to compare, need to extract the rootInode
	inodeEql := *a.rootInode == *s.rootInode
	s1 := &superblock{}
	a1 := &superblock{}
	*s1 = *s
	*a1 = *a
	s1.rootInode = nil
	a1.rootInode = nil
	modTime := time.Now()
	s1.modTime = modTime
	a1.modTime = modTime
	sblockEql := *s1 == *a1
	return inodeEql && sblockEql
}

func (s *superblockFlags) bytes() []byte {
	var flags uint16
	if s.uncompressedInodes {
		flags |= 0x0001
	}
	if s.uncompressedData {
		flags |= 0x0002
	}
	if s.uncompressedFragments {
		flags |= 0x0008
	}
	if s.noFragments {
		flags |= 0x0010
	}
	if s.alwaysFragments {
		flags |= 0x0020
	}
	if s.dedup {
		flags |= 0x0040
	}
	if s.exportable {
		flags |= 0x0080
	}
	if s.uncompressedXattrs {
		flags |= 0x0100
	}
	if s.noXattrs {
		flags |= 0x0200
	}
	if s.compressorOptions {
		flags |= 0x0400
	}
	if s.uncompressedIDs {
		flags |= 0x0800
	}
	b := make([]byte, 2)
	binary.LittleEndian.PutUint16(b, flags)
	return b
}
func parseFlags(b []byte) (*superblockFlags, error) {
	targetLength := 2
	if len(b) != targetLength {
		return nil, fmt.Errorf("received %d bytes instead of expected %d", len(b), targetLength)
	}
	flags := binary.LittleEndian.Uint16(b)
	s := &superblockFlags{
		uncompressedInodes:    flags&0x0001 == 0x0001,
		uncompressedData:      flags&0x0002 == 0x0002,
		uncompressedFragments: flags&0x0008 == 0x0008,
		noFragments:           flags&0x0010 == 0x0010,
		alwaysFragments:       flags&0x0020 == 0x0020,
		dedup:                 flags&0x0040 == 0x0040,
		exportable:            flags&0x0080 == 0x0080,
		uncompressedXattrs:    flags&0x0100 == 0x0100,
		noXattrs:              flags&0x0200 == 0x0200,
		compressorOptions:     flags&0x0400 == 0x0400,
		uncompressedIDs:       flags&0x0800 == 0x0800,
	}
	return s, nil
}

func (s *superblock) toBytes() []byte {
	b := make([]byte, superblockSize)
	binary.LittleEndian.PutUint32(b[0:4], superblockMagic)
	binary.LittleEndian.PutUint32(b[4:8], s.inodes)
	binary.LittleEndian.PutUint32(b[8:12], uint32(s.modTime.Unix()))
	binary.LittleEndian.PutUint32(b[12:16], s.blocksize)
	binary.LittleEndian.PutUint32(b[16:20], s.fragmentCount)
	binary.LittleEndian.PutUint16(b[20:22], uint16(s.compression))
	binary.LittleEndian.PutUint16(b[22:24], uint16(math.Log2(float64(s.blocksize))))
	copy(b[24:26], s.superblockFlags.bytes())
	binary.LittleEndian.PutUint16(b[26:28], s.idCount)
	binary.LittleEndian.PutUint16(b[28:30], superblockMajorVersion)
	binary.LittleEndian.PutUint16(b[30:32], superblockMinorVersion)
	binary.LittleEndian.PutUint64(b[32:40], s.rootInode.toUint64())
	binary.LittleEndian.PutUint64(b[40:48], s.size)
	binary.LittleEndian.PutUint64(b[48:56], s.idTableStart)
	binary.LittleEndian.PutUint64(b[56:64], s.xattrTableStart)
	binary.LittleEndian.PutUint64(b[64:72], s.inodeTableStart)
	binary.LittleEndian.PutUint64(b[72:80], s.directoryTableStart)
	binary.LittleEndian.PutUint64(b[80:88], s.fragmentTableStart)
	binary.LittleEndian.PutUint64(b[88:96], s.exportTableStart)
	return b
}
func parseSuperblock(b []byte) (*superblock, error) {
	if len(b) != superblockSize {
		return nil, fmt.Errorf("superblock had %d bytes instead of expected %d", len(b), superblockSize)
	}
	magic := binary.LittleEndian.Uint32(b[0:4])
	if magic != superblockMagic {
		return nil, fmt.Errorf("superblock had magic of %d instead of expected %d", magic, superblockMagic)
	}
	majorVersion := binary.LittleEndian.Uint16(b[28:30])
	minorVersion := binary.LittleEndian.Uint16(b[30:32])
	if majorVersion != superblockMajorVersion || minorVersion != superblockMinorVersion {
		return nil, fmt.Errorf("superblock version mismatch, received %d.%d instead of expected %d.%d", majorVersion, minorVersion, superblockMajorVersion, superblockMinorVersion)
	}

	blocksize := binary.LittleEndian.Uint32(b[12:16])
	blocklog := binary.LittleEndian.Uint16(b[22:24])
	expectedLog := uint16(math.Log2(float64(blocksize)))
	if expectedLog != blocklog {
		return nil, fmt.Errorf("superblock block log mismatch, actual %d expected %d", blocklog, expectedLog)
	}
	flags, err := parseFlags(b[24:26])
	if err != nil {
		return nil, fmt.Errorf("error parsing flags bytes: %v", err)
	}
	s := &superblock{
		inodes:              binary.LittleEndian.Uint32(b[4:8]),
		modTime:             time.Unix(int64(binary.LittleEndian.Uint32(b[8:12])), 0),
		blocksize:           blocksize,
		fragmentCount:       binary.LittleEndian.Uint32(b[16:20]),
		compression:         compression(binary.LittleEndian.Uint16(b[20:22])),
		idCount:             binary.LittleEndian.Uint16(b[26:28]),
		versionMajor:        binary.LittleEndian.Uint16(b[28:30]),
		versionMinor:        binary.LittleEndian.Uint16(b[30:32]),
		rootInode:           parseRootInode(binary.LittleEndian.Uint64(b[32:40])),
		size:                binary.LittleEndian.Uint64(b[40:48]),
		idTableStart:        binary.LittleEndian.Uint64(b[48:56]),
		xattrTableStart:     binary.LittleEndian.Uint64(b[56:64]),
		inodeTableStart:     binary.LittleEndian.Uint64(b[64:72]),
		directoryTableStart: binary.LittleEndian.Uint64(b[72:80]),
		fragmentTableStart:  binary.LittleEndian.Uint64(b[80:88]),
		exportTableStart:    binary.LittleEndian.Uint64(b[88:96]),
		superblockFlags:     *flags,
	}
	return s, nil
}
0707010000033A000081A4000000000000000000000001645E367C0000010A000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/squashfs/uidgid.go  package squashfs

import "encoding/binary"

const (
	idEntrySize = 4
)

func parseIDTable(b []byte) []uint32 {
	uidgids := make([]uint32, 0)
	for i := 0; i+4-1 < len(b); i += 4 {
		uidgids = append(uidgids, binary.LittleEndian.Uint32(b[i:i+4]))
	}
	return uidgids
}
  0707010000033B000081A4000000000000000000000001645E367C000002D4000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/squashfs/util.go    package squashfs

import (
	"strings"
)

const (
	// KB represents one KB
	KB int64 = 1024
	// MB represents one MB
	MB int64 = 1024 * KB
	// GB represents one GB
	GB int64 = 1024 * MB
	// TB represents one TB
	TB int64 = 1024 * GB
	// max value of uint32
	uint32max uint64 = 0xffffffff
)

func universalizePath(p string) string {
	// globalize the separator
	return strings.ReplaceAll(p, `\`, "/")
}
func splitPath(p string) []string {
	ps := universalizePath(p)
	// we need to split such that each one ends in "/", except possibly the last one
	parts := strings.Split(ps, "/")
	// eliminate empty parts
	ret := make([]string, 0)
	for _, sub := range parts {
		if sub != "" {
			ret = append(ret, sub)
		}
	}
	return ret
}
0707010000033C000081A4000000000000000000000001645E367C0000096E000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/filesystem/squashfs/xattr.go   package squashfs

import (
	"encoding/binary"
	"fmt"
)

const (
	xAttrIDEntrySize      uint32 = 16
	xAttrHeaderSize       uint32 = 16
	noXattrInodeFlag      uint32 = 0xffffffff
	noXattrSuperblockFlag uint64 = 0xffffffffffffffff
)

type xAttrIndex struct {
	pos   uint64
	count uint32
	size  uint32
}

func parseXAttrIndex(b []byte) (*xAttrIndex, error) {
	if len(b) < int(xAttrIDEntrySize) {
		return nil, fmt.Errorf("cannot parse xAttr Index of size %d less than minimum %d", len(b), xAttrIDEntrySize)
	}
	return &xAttrIndex{
		pos:   binary.LittleEndian.Uint64(b[0:8]),
		count: binary.LittleEndian.Uint32(b[8:12]),
		size:  binary.LittleEndian.Uint32(b[12:16]),
	}, nil
}

type xAttrTable struct {
	list []*xAttrIndex
	data []byte
}

func (x *xAttrTable) find(pos int) (map[string]string, error) {
	if pos >= len(x.list) {
		return nil, fmt.Errorf("position %d is greater than list size %d", pos, len(x.list))
	}
	entry := x.list[pos]
	b := x.data[entry.pos:]
	count := entry.count
	ptr := 0
	xattrs := map[string]string{}
	for i := 0; i < int(count); i++ {
		// must be 4 bytes for header
		if len(b[pos:]) < 4 {
			return nil, fmt.Errorf("insufficient bytes %d to read the xattr at position %d", len(b[ptr:]), ptr)
		}
		// get the type and size
		//   xType := binary.LittleEndian.Uint16(b[ptr : ptr+2])
		xSize := int(binary.LittleEndian.Uint16(b[ptr+2 : ptr+4]))
		nameStart := ptr + 4
		valHeaderStart := nameStart + xSize
		valStart := valHeaderStart + 4
		// make sure we have enough bytes
		if len(b[nameStart:]) < xSize {
			return nil, fmt.Errorf("xattr header has size %d, but only %d bytes available to read at position %d", xSize, len(b[pos+4:]), ptr)
		}
		if xSize < 1 {
			return nil, fmt.Errorf("no name given for xattr at position %d", ptr)
		}
		key := string(b[nameStart : nameStart+xSize])
		// read the size of the value
		if len(b[valHeaderStart:]) < 4 {
			return nil, fmt.Errorf("insufficient bytes %d to read the xattr value at position %d", len(b[valHeaderStart:]), ptr)
		}
		valSize := int(binary.LittleEndian.Uint32(b[valHeaderStart:valStart]))
		if len(b[valStart:]) < valSize {
			return nil, fmt.Errorf("xattr value has size %d, but only %d bytes available to read at position %d", valSize, len(b[valStart:]), ptr)
		}
		val := string(b[valStart : valStart+valSize])
		xattrs[key] = val

		// increment the position pointer
		ptr += valStart + valSize
	}
	return xattrs, nil
}
  0707010000033D000041ED000000000000000000000005645E367C00000000000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/partition  0707010000033E000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/partition/gpt  0707010000033F000081A4000000000000000000000001645E367C00000183000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/partition/gpt/common.go    package gpt

// move all bytes to big endian to fix how GPT stores UUIDs
func bytesToUUIDBytes(in []byte) []byte {
	// first 3 sections (4 bytes, 2 bytes, 2 bytes) are little-endian, last 2 section are big-endian
	b := make([]byte, 0, 16)
	b = append(b, in[0:16]...)
	tmpb := b[0:4]
	reverseSlice(tmpb)

	tmpb = b[4:6]
	reverseSlice(tmpb)

	tmpb = b[6:8]
	reverseSlice(tmpb)
	return b
}
 07070100000340000081A4000000000000000000000001645E367C0000040F000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/partition/gpt/doc.go   // Package gpt provides an interface to GUID Partition Table (GPT) partitioned disks.
//
// You can use this package to manipulate existing GPT disks, read existing disks, or create entirely
// new partition tables on disks or disk files.
//
// gpt.Table implements the Table interface in github.com/diskfs/go-diskfs/partition
//
// Normally, the best way to interact with a disk is to use the github.com/diskfs/go-diskfs package,
// which, when necessary, will call this one. When creating a new disk or manipulating an existing one,
// You will, however, need to interact with an gpt.Table and gpt.Partition structs.
//
// Here is a simple example of a GPT Table with a single 10MB Linux partition:
//
//	table := &gpt.Table{
//	  LogicalSectorSize:  512,
//	  PhysicalSectorSize: 512,
//	  Partitions: []*mbr.Partition{
//	    {
//	      LogicalSectorSize:  512,
//	      PhysicalSectorSize: 512,
//	      ProtectiveMBR:      true,
//	      GUID:               "43E51892-3273-42F7-BCDA-B43B80CDFC48",
//	    },
//	  },
//	}
package gpt
 07070100000341000081A4000000000000000000000001645E367C000021AF000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/partition/gpt/partition.go package gpt

import (
	"encoding/binary"
	"fmt"
	"io"
	"reflect"
	"strings"
	"unicode/utf16"

	"github.com/diskfs/go-diskfs/util"
	uuid "github.com/google/uuid"
)

// PartitionEntrySize fixed size of a GPT partition entry
const PartitionEntrySize = 128

// Partition represents the structure of a single partition on the disk
type Partition struct {
	Start              uint64 // start sector for the partition
	End                uint64 // end sector for the partition
	Size               uint64 // size of the partition in bytes
	Type               Type   // parttype for the partition
	Name               string // name for the partition
	GUID               string // partition GUID, can be left blank to auto-generate
	Attributes         uint64 // Attributes flags
	logicalSectorSize  int
	physicalSectorSize int
}

func reverseSlice(s interface{}) {
	size := reflect.ValueOf(s).Len()
	swap := reflect.Swapper(s)
	for i, j := 0, size-1; i < j; i, j = i+1, j-1 {
		swap(i, j)
	}
}

// toBytes return the 128 bytes for this partition
func (p *Partition) toBytes() ([]byte, error) {
	b := make([]byte, PartitionEntrySize)

	// if the Type is Unused, just return all zeroes
	if p.Type == Unused {
		return b, nil
	}

	// partition type GUID is first 16 bytes
	typeGUID, err := uuid.Parse(string(p.Type))
	if err != nil {
		return nil, fmt.Errorf("unable to parse partition type GUID: %v", err)
	}
	copy(b[0:16], bytesToUUIDBytes(typeGUID[0:16]))

	// partition identifier GUID is next 16 bytes
	idGUID, err := uuid.Parse(p.GUID)
	if err != nil {
		return nil, fmt.Errorf("unable to parse partition identifier GUID: %v", err)
	}
	copy(b[16:32], bytesToUUIDBytes(idGUID[0:16]))

	// next is first LBA and last LBA, uint64 = 8 bytes each
	binary.LittleEndian.PutUint64(b[32:40], p.Start)
	binary.LittleEndian.PutUint64(b[40:48], p.End)
	binary.LittleEndian.PutUint64(b[48:56], p.Attributes)

	// now the partition name - it is UTF16LE encoded, max 36 code units for 72 bytes
	r := make([]rune, 0, len(p.Name))
	// first convert to runes
	for _, s := range p.Name {
		r = append(r, s)
	}
	if len(r) > 36 {
		return nil, fmt.Errorf("cannot use %s as partition name, has %d Unicode code units, maximum size is 36", p.Name, len(r))
	}
	// next convert the runes to uint16
	nameb := utf16.Encode(r)
	// and then convert to little-endian bytes
	for i, u := range nameb {
		pos := 56 + i*2
		binary.LittleEndian.PutUint16(b[pos:pos+2], u)
	}

	return b, nil
}

// FromBytes create a partition entry from bytes
func partitionFromBytes(b []byte, logicalSectorSize, physicalSectorSize int) (*Partition, error) {
	if len(b) != PartitionEntrySize {
		return nil, fmt.Errorf("data for partition was %d bytes instead of expected %d", len(b), PartitionEntrySize)
	}
	// is it all zeroes?
	typeGUID, err := uuid.FromBytes(bytesToUUIDBytes(b[0:16]))
	if err != nil {
		return nil, fmt.Errorf("unable to read partition type GUID: %v", err)
	}
	typeString := typeGUID.String()
	uid, err := uuid.FromBytes(bytesToUUIDBytes(b[16:32]))
	if err != nil {
		return nil, fmt.Errorf("unable to read partition identifier GUID: %v", err)
	}
	firstLBA := binary.LittleEndian.Uint64(b[32:40])
	lastLBA := binary.LittleEndian.Uint64(b[40:48])
	attribs := binary.LittleEndian.Uint64(b[48:56])

	// get the partition name
	nameb := b[56:]
	u := make([]uint16, 0, 72)
	for i := 0; i < len(nameb); i += 2 {
		// strip any 0s off of the end
		entry := binary.LittleEndian.Uint16(nameb[i : i+2])
		if entry == 0 {
			break
		}
		u = append(u, entry)
	}
	r := utf16.Decode(u)
	name := string(r)

	return &Partition{
		Start:              firstLBA,
		End:                lastLBA,
		Name:               name,
		GUID:               strings.ToUpper(uid.String()),
		Attributes:         attribs,
		Type:               Type(strings.ToUpper(typeString)),
		logicalSectorSize:  logicalSectorSize,
		physicalSectorSize: physicalSectorSize,
	}, nil
}

func (p *Partition) GetSize() int64 {
	// size already is in Bytes
	return int64(p.Size)
}

func (p *Partition) GetStart() int64 {
	_, lss := p.sectorSizes()
	return int64(p.Start) * int64(lss)
}

// WriteContents fills the partition with the contents provided
// reads from beginning of reader to exactly size of partition in bytes
func (p *Partition) WriteContents(f util.File, contents io.Reader) (uint64, error) {
	pss, lss := p.sectorSizes()
	total := uint64(0)
	// validate start/end/size
	calculatedSize := (p.End - p.Start + 1) * uint64(lss)
	switch {
	case p.Size > 0 && p.Size == calculatedSize:
		// all is good
	case p.Size == 0 && p.End >= p.Start:
		// Size was not set
		p.Size = calculatedSize
	case p.Size > 0 && p.Size%uint64(lss) == 0 && p.End == 0:
		// End was not set
		p.End = p.Start + p.Size/uint64(lss) - 1
	default:
		return total, fmt.Errorf("cannot reconcile partition size %d with start %d / end %d", p.Size, p.Start, p.End)
	}

	// chunks of physical sector size for efficient writing
	b := make([]byte, pss)
	// we start at the correct byte location
	start := p.Start * uint64(lss)
	// loop in physical sector sizes
	for {
		read, err := contents.Read(b)
		if err != nil && err != io.EOF {
			return total, fmt.Errorf("could not read contents to pass to partition: %v", err)
		}
		tmpTotal := uint64(read) + total
		if tmpTotal > p.Size {
			return total, fmt.Errorf("requested to write at least %d bytes to partition but maximum size is %d", tmpTotal, p.Size)
		}
		if read > 0 {
			var written int
			written, err = f.WriteAt(b[:read], int64(start+total))
			if err != nil {
				return total, fmt.Errorf("error writing to file: %v", err)
			}
			total += uint64(written)
		}
		// increment our total
		// is this the end of the data?
		if err == io.EOF {
			break
		}
	}
	// did the total written equal the size of the partition?
	if total != p.Size {
		return total, fmt.Errorf("write %d bytes to partition but actual size is %d", total, p.Size)
	}
	return total, nil
}

// ReadContents reads the contents of the partition into a writer
// streams the entire partition to the writer
func (p *Partition) ReadContents(f util.File, out io.Writer) (int64, error) {
	pss, _ := p.sectorSizes()
	total := int64(0)
	// chunks of physical sector size for efficient writing
	b := make([]byte, pss)
	// we start at the correct byte location
	start := p.GetStart()
	size := p.GetSize()

	// loop in physical sector sizes
	for {
		read, err := f.ReadAt(b, start+total)
		if err != nil && err != io.EOF {
			return total, fmt.Errorf("error reading from file: %v", err)
		}
		if read > 0 {
			_, _ = out.Write(b[:read])
		}
		// increment our total
		total += int64(read)
		// is this the end of the data?
		if err == io.EOF || total >= size {
			break
		}
	}
	return total, nil
}

// initEntry adjust the Start/End/Size entries and ensure it has a GUID
func (p *Partition) initEntry(blocksize, starting uint64) error {
	part := p
	if part.Type == Unused {
		return nil
	}
	var guid uuid.UUID

	if part.GUID == "" {
		guid, _ = uuid.NewRandom()
	} else {
		var err error
		guid, err = uuid.Parse(part.GUID)
		if err != nil {
			return fmt.Errorf("invalid UUID: %s", part.GUID)
		}
	}
	part.GUID = strings.ToUpper(guid.String())

	// check size matches sectors
	// valid possibilities:
	// 1- size=0, start>=0, end>start - valid - begin at start, go until end
	// 2- size>0, start>=0, end=0 - valid - begin at start for size bytes
	// 3- size>0, start=0, end=0 - valid - begin at end of previous partition, go for size bytes
	// anything else is an error
	size, start, end := part.Size, part.Start, part.End
	calculatedSize := (end - start + 1) * blocksize
	switch {
	case end >= start && size == calculatedSize:
	case size == 0 && end >= start:
		// provided specific start and end, so calculate size
		part.Size = calculatedSize
	case size > 0 && size%blocksize == 0 && start > 0 && end == 0:
		// provided specific start and size, so calculate end
		part.End = start + size/blocksize - 1
	case size > 0 && size%blocksize == 0 && start == 0 && end == 0:
		// we start right after the end of the previous
		start = starting
		end = start + size/blocksize - 1
		part.Start = start
		part.End = end
	default:
		return fmt.Errorf("invalid partition entry, size %d bytes does not match start sector %d and end sector %d", size, start, end)
	}
	return nil
}

func (p *Partition) sectorSizes() (physical, logical int) {
	physical, logical = p.physicalSectorSize, p.logicalSectorSize
	if physical == 0 {
		physical = physicalSectorSize
	}
	if logical == 0 {
		logical = logicalSectorSize
	}
	return physical, logical
}

func (p *Partition) Equal(o *Partition) bool {
	return p != nil && o != nil && *p == *o
}
 07070100000342000081A4000000000000000000000001645E367C0000471F000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/partition/gpt/table.go package gpt

import (
	"bytes"
	"encoding/binary"
	"fmt"
	"hash/crc32"
	"strings"

	"github.com/diskfs/go-diskfs/partition/part"
	"github.com/diskfs/go-diskfs/util"
	uuid "github.com/google/uuid"
)

// gptSize max potential size for partition array reserved 16384
const (
	mbrPartitionEntriesStart = 446
	mbrPartitionEntriesCount = 4
	mbrpartitionEntrySize    = 16
	// just defaults
	physicalSectorSize = 512
	logicalSectorSize  = 512
)

// Table represents a partition table to be applied to a disk or read from a disk
type Table struct {
	Partitions             []*Partition // slice of Partition
	LogicalSectorSize      int          // logical size of a sector
	PhysicalSectorSize     int          // physical size of the sector
	GUID                   string       // disk GUID, can be left blank to auto-generate
	ProtectiveMBR          bool         // whether or not a protective MBR is in place
	partitionArraySize     int          // how many entries are in the partition array size
	partitionEntrySize     uint32       // size of the partition entry in the table, usually 128 bytes
	partitionFirstLBA      uint64       // first LBA of the partition array
	partitionEntryChecksum uint32       // checksum of the partition array
	primaryHeader          uint64       // LBA of primary header, always 1
	secondaryHeader        uint64       // LBA of secondary header, always last sectors on disk
	firstDataSector        uint64       // LBA of first data sector
	lastDataSector         uint64       // LBA of last data sector
	initialized            bool
}

func getEfiSignature() []byte {
	return []byte{0x45, 0x46, 0x49, 0x20, 0x50, 0x41, 0x52, 0x54}
}
func getEfiRevision() []byte {
	return []byte{0x00, 0x00, 0x01, 0x00}
}
func getEfiHeaderSize() []byte {
	return []byte{0x5c, 0x00, 0x00, 0x00}
}
func getEfiZeroes() []byte {
	return []byte{0x00, 0x00, 0x00, 0x00}
}
func getMbrSignature() []byte {
	return []byte{0x55, 0xaa}
}

// check if a byte slice is all zeroes
func zeroMatch(b []byte) bool {
	if len(b) < 1 {
		return true
	}
	for _, val := range b {
		if val != 0 {
			return false
		}
	}
	return true
}

// ensure that a blank table is initialized
func (t *Table) initTable(size int64) {
	// default settings
	if t.LogicalSectorSize == 0 {
		t.LogicalSectorSize = 512
	}
	if t.PhysicalSectorSize == 0 {
		t.PhysicalSectorSize = 512
	}

	if t.primaryHeader == 0 {
		t.primaryHeader = 1
	}
	if t.GUID == "" {
		guid, _ := uuid.NewRandom()
		t.GUID = guid.String()
	}
	if t.partitionArraySize == 0 {
		t.partitionArraySize = 128
	}
	if t.partitionEntrySize == 0 {
		t.partitionEntrySize = 128
	}

	// how many sectors on the disk?
	diskSectors := uint64(size) / uint64(t.LogicalSectorSize)
	// how many sectors used for partition entries?
	partSectors := uint64(t.partitionArraySize) * uint64(t.partitionEntrySize) / uint64(t.LogicalSectorSize)

	if t.firstDataSector == 0 {
		t.firstDataSector = 2 + partSectors
	}

	if t.secondaryHeader == 0 {
		t.secondaryHeader = diskSectors - 1
	}
	if t.lastDataSector == 0 {
		t.lastDataSector = diskSectors - 1 - partSectors
	}

	t.initialized = true
}

// Equal check if another table is functionally equal to this one
func (t *Table) Equal(t2 *Table) bool {
	if t2 == nil {
		return false
	}
	// neither is nil, so now we need to compare
	basicMatch := t.LogicalSectorSize == t2.LogicalSectorSize &&
		t.PhysicalSectorSize == t2.PhysicalSectorSize &&
		t.partitionEntrySize == t2.partitionEntrySize &&
		t.primaryHeader == t2.primaryHeader &&
		t.secondaryHeader == t2.secondaryHeader &&
		t.firstDataSector == t2.firstDataSector &&
		t.lastDataSector == t2.lastDataSector &&
		t.partitionArraySize == t2.partitionArraySize &&
		t.ProtectiveMBR == t2.ProtectiveMBR &&
		t.GUID == t2.GUID
	partMatch := comparePartitionArray(t.Partitions, t2.Partitions)
	return basicMatch && partMatch
}
func comparePartitionArray(p1, p2 []*Partition) bool {
	if (p1 == nil && p2 != nil) || (p2 == nil && p1 != nil) {
		return false
	}
	if p1 == nil && p2 == nil {
		return true
	}
	// neither is nil, so now we need to compare
	if len(p1) != len(p2) {
		return false
	}
	matches := true
	for i, p := range p1 {
		if p.Type == Unused && p2[i].Type == Unused {
			continue
		}
		if *p != *p2[i] {
			matches = false
			break
		}
	}
	return matches
}

// readProtectiveMBR reads whether or not a protectiveMBR exists in a byte slice
func readProtectiveMBR(b []byte, sectors uint32) bool {
	size := len(b)
	if size < 512 {
		return false
	}
	// check for MBR signature
	if !bytes.Equal(b[size-2:], getMbrSignature()) {
		return false
	}
	// get the partitions
	parts := b[mbrPartitionEntriesStart : mbrPartitionEntriesStart+mbrpartitionEntrySize*mbrPartitionEntriesCount]
	// should have all except the first partition by zeroes
	for i := 1; i < mbrPartitionEntriesCount; i++ {
		if !zeroMatch(parts[i*mbrpartitionEntrySize : (i+1)*mbrpartitionEntrySize]) {
			return false
		}
	}
	// finally the first one should be a partition of type 0xee that covers the whole disk and has non-bootable

	// non-bootable
	if parts[0] != 0x00 {
		return false
	}
	// we ignore head/cylinder/sector
	// partition type 0xee
	if parts[4] != 0xee {
		return false
	}
	if binary.LittleEndian.Uint32(parts[8:12]) != 1 {
		return false
	}
	if binary.LittleEndian.Uint32(parts[12:16]) != sectors {
		return false
	}
	return true
}

// partitionArraySector get the sector that holds the primary or secondary partition array
func (t *Table) partitionArraySector(primary bool) uint64 {
	if primary {
		return t.primaryHeader + 1
	}
	return t.secondaryHeader - uint64(t.partitionArraySize)*uint64(t.partitionEntrySize)/uint64(t.LogicalSectorSize)
}

func (t *Table) generateProtectiveMBR() []byte {
	b := make([]byte, 512)
	// we don't do anything to the first 446 bytes
	copy(b[510:], getMbrSignature())
	// create the single all disk partition
	parts := b[mbrPartitionEntriesStart : mbrPartitionEntriesStart+mbrpartitionEntrySize]
	// non-bootable
	parts[0] = 0x00
	// ignore CHS entirely
	// partition type 0xee
	parts[4] = 0xee
	// ignore CHS entirely
	// start LBA 1
	binary.LittleEndian.PutUint32(parts[8:12], 1)
	// end LBA last omne on disk
	binary.LittleEndian.PutUint32(parts[12:16], uint32(t.secondaryHeader))
	return b
}

// toPartitionArrayBytes write the bytes for the partition array
func (t *Table) toPartitionArrayBytes() ([]byte, error) {
	blocksize := uint64(t.LogicalSectorSize)
	firstblock := t.LogicalSectorSize
	nextstart := uint64(firstblock)

	// go through the partitions, make sure Start/End/Size are correct, and each has a GUID
	for i, part := range t.Partitions {
		err := part.initEntry(blocksize, nextstart)
		if err != nil {
			return nil, fmt.Errorf("could not initialize partition %d correctly: %v", i, err)
		}

		nextstart = part.End + 1
	}

	// generate the partition bytes
	partSize := t.partitionEntrySize * uint32(t.partitionArraySize)
	bpart := make([]byte, partSize)
	for i, p := range t.Partitions {
		// write the primary partition entry
		b2, err := p.toBytes()
		if err != nil {
			return nil, fmt.Errorf("error preparing partition entry %d for writing to disk: %v", i, err)
		}
		slotStart := i * int(t.partitionEntrySize)
		slotEnd := slotStart + int(t.partitionEntrySize)
		copy(bpart[slotStart:slotEnd], b2)
	}
	return bpart, nil
}

// toGPTBytes write just the gpt header to bytes
func (t *Table) toGPTBytes(primary bool) ([]byte, error) {
	b := make([]byte, t.LogicalSectorSize)

	// 8 bytes "EFI PART" signature - endianness on this?
	copy(b[0:8], getEfiSignature())
	// 4 bytes revision 1.0
	copy(b[8:12], getEfiRevision())
	// 4 bytes header size
	copy(b[12:16], getEfiHeaderSize())
	// 4 bytes CRC32/zlib of header with this field zeroed out - must calculate then come back
	copy(b[16:20], []byte{0x00, 0x00, 0x00, 0x00})
	// 4 bytes zeroes reserved
	copy(b[20:24], getEfiZeroes())

	// which LBA are we?
	if primary {
		binary.LittleEndian.PutUint64(b[24:32], t.primaryHeader)
		binary.LittleEndian.PutUint64(b[32:40], t.secondaryHeader)
	} else {
		binary.LittleEndian.PutUint64(b[24:32], t.secondaryHeader)
		binary.LittleEndian.PutUint64(b[32:40], t.primaryHeader)
	}

	// usable LBAs for partitions
	binary.LittleEndian.PutUint64(b[40:48], t.firstDataSector)
	binary.LittleEndian.PutUint64(b[48:56], t.lastDataSector)

	// 16 bytes disk GUID
	var guid uuid.UUID
	if t.GUID == "" {
		guid, _ = uuid.NewRandom()
	} else {
		var err error
		guid, err = uuid.Parse(t.GUID)
		if err != nil {
			return nil, fmt.Errorf("invalid UUID: %s", t.GUID)
		}
	}
	copy(b[56:72], bytesToUUIDBytes(guid[0:16]))

	// starting LBA of array of partition entries
	binary.LittleEndian.PutUint64(b[72:80], t.partitionArraySector(primary))

	// how many entries?
	binary.LittleEndian.PutUint32(b[80:84], uint32(t.partitionArraySize))
	// how big is a single entry?
	binary.LittleEndian.PutUint32(b[84:88], 0x80)

	// we need a CRC/zlib of the partition entries, so we do those first, then append the bytes
	bpart, err := t.toPartitionArrayBytes()
	if err != nil {
		return nil, fmt.Errorf("error converting partition array to bytes: %v", err)
	}
	checksum := crc32.ChecksumIEEE(bpart)
	binary.LittleEndian.PutUint32(b[88:92], checksum)

	// calculate checksum of entire header and place 4 bytes of offset 16 = 0x10
	checksum = crc32.ChecksumIEEE(b[0:92])
	binary.LittleEndian.PutUint32(b[16:20], checksum)

	// zeroes to the end of the sector
	for i := 92; i < t.LogicalSectorSize; i++ {
		b[i] = 0x00
	}

	return b, nil
}

func (t *Table) calculatePartitionArrayLocations() (start, size int) {
	start = int(t.partitionFirstLBA) * t.LogicalSectorSize
	size = t.partitionArraySize * int(t.partitionEntrySize)
	return
}

// readPartitionArrayBytes read the bytes for the partition array
func readPartitionArrayBytes(b []byte, entrySize, logicalSectorSize, physicalSectorSize int) ([]*Partition, error) {
	parts := make([]*Partition, 0)
	for i, c := 0, b; len(c) >= entrySize; c, i = c[entrySize:], i+1 {
		bpart := c[:entrySize]
		// write the primary partition entry
		p, err := partitionFromBytes(bpart, logicalSectorSize, physicalSectorSize)
		if err != nil {
			return nil, fmt.Errorf("error reading partition entry %d: %v", i, err)
		}
		// augment partition information
		p.Size = (p.End - p.Start + 1) * uint64(logicalSectorSize)
		parts = append(parts, p)
	}
	return parts, nil
}

// tableFromBytes read a partition table from a byte slice
func tableFromBytes(b []byte, logicalBlockSize, physicalBlockSize int) (*Table, error) {
	// minimum size - gpt entries + header + LBA0 for (protective) MBR
	if len(b) < logicalBlockSize*2 {
		return nil, fmt.Errorf("data for partition was %d bytes instead of expected minimum %d", len(b), logicalBlockSize*2)
	}

	// GPT starts at LBA1
	gpt := b[logicalBlockSize:]
	// start with fixed headers
	efiSignature := gpt[0:8]
	efiRevision := gpt[8:12]
	efiHeaderSize := gpt[12:16]
	efiHeaderCrcBytes := append(make([]byte, 0, 4), gpt[16:20]...)
	efiHeaderCrc := binary.LittleEndian.Uint32(efiHeaderCrcBytes)
	efiZeroes := gpt[20:24]
	primaryHeader := binary.LittleEndian.Uint64(gpt[24:32])
	secondaryHeader := binary.LittleEndian.Uint64(gpt[32:40])
	firstDataSector := binary.LittleEndian.Uint64(gpt[40:48])
	lastDataSector := binary.LittleEndian.Uint64(gpt[48:56])
	diskGUID, err := uuid.FromBytes(bytesToUUIDBytes(gpt[56:72]))
	if err != nil {
		return nil, fmt.Errorf("unable to read guid from disk: %v", err)
	}
	partitionEntryFirstLBA := binary.LittleEndian.Uint64(gpt[72:80])
	partitionEntryCount := binary.LittleEndian.Uint32(gpt[80:84])
	partitionEntrySize := binary.LittleEndian.Uint32(gpt[84:88])
	partitionEntryChecksum := binary.LittleEndian.Uint32(gpt[88:92])

	// once we have the header CRC, zero it out
	copy(gpt[16:20], []byte{0x00, 0x00, 0x00, 0x00})
	if !bytes.Equal(efiSignature, getEfiSignature()) {
		return nil, fmt.Errorf("invalid EFI Signature %v", efiSignature)
	}
	if !bytes.Equal(efiRevision, getEfiRevision()) {
		return nil, fmt.Errorf("invalid EFI Revision %v", efiRevision)
	}
	if !bytes.Equal(efiHeaderSize, getEfiHeaderSize()) {
		return nil, fmt.Errorf("invalid EFI Header size %v", efiHeaderSize)
	}
	if !bytes.Equal(efiZeroes, getEfiZeroes()) {
		return nil, fmt.Errorf("invalid EFI Header, expected zeroes, got %v", efiZeroes)
	}
	// get the checksum
	checksum := crc32.ChecksumIEEE(gpt[0:92])
	if efiHeaderCrc != checksum {
		return nil, fmt.Errorf("invalid EFI Header Checksum, expected %v, got %v", checksum, efiHeaderCrc)
	}

	// potential protective MBR is at LBA0
	hasProtectiveMBR := readProtectiveMBR(b[:logicalBlockSize], uint32(secondaryHeader))

	table := Table{
		LogicalSectorSize:      logicalBlockSize,
		PhysicalSectorSize:     physicalBlockSize,
		partitionEntrySize:     partitionEntrySize,
		primaryHeader:          primaryHeader,
		secondaryHeader:        secondaryHeader,
		firstDataSector:        firstDataSector,
		lastDataSector:         lastDataSector,
		partitionArraySize:     int(partitionEntryCount),
		partitionFirstLBA:      partitionEntryFirstLBA,
		ProtectiveMBR:          hasProtectiveMBR,
		GUID:                   strings.ToUpper(diskGUID.String()),
		partitionEntryChecksum: partitionEntryChecksum,
		initialized:            true,
	}

	return &table, nil
}

// Type report the type of table, always "gpt"
func (t *Table) Type() string {
	return "gpt"
}

// Write writes a GPT to disk
// Must be passed the util.File to which to write and the size of the disk
func (t *Table) Write(f util.File, size int64) error {
	// it is possible that we are given a basic new table that we need to initialize
	if !t.initialized {
		t.initTable(size)
	}

	// write the protectiveMBR if any
	// write the primary GPT header
	// write the primary partition array
	// write the secondary partition array
	// write the secondary GPT header
	var written int
	var err error
	if t.ProtectiveMBR {
		fullMBR := t.generateProtectiveMBR()
		protectiveMBR := fullMBR[mbrPartitionEntriesStart:]
		written, err = f.WriteAt(protectiveMBR, mbrPartitionEntriesStart)
		if err != nil {
			return fmt.Errorf("error writing protective MBR to disk: %v", err)
		}
		if written != len(protectiveMBR) {
			return fmt.Errorf("wrote %d bytes of protective MBR instead of %d", written, len(protectiveMBR))
		}
	}

	primaryHeader, err := t.toGPTBytes(true)
	if err != nil {
		return fmt.Errorf("error converting primary GPT header to byte array: %v", err)
	}
	written, err = f.WriteAt(primaryHeader, int64(t.LogicalSectorSize))
	if err != nil {
		return fmt.Errorf("error writing primary GPT to disk: %v", err)
	}
	if written != len(primaryHeader) {
		return fmt.Errorf("wrote %d bytes of primary GPT header instead of %d", written, len(primaryHeader))
	}

	partitionArray, err := t.toPartitionArrayBytes()
	if err != nil {
		return fmt.Errorf("error converting primary GPT partitions to byte array: %v", err)
	}
	written, err = f.WriteAt(partitionArray, int64(t.LogicalSectorSize*int(t.partitionArraySector(true))))
	if err != nil {
		return fmt.Errorf("error writing primary partition arrayto disk: %v", err)
	}
	if written != len(partitionArray) {
		return fmt.Errorf("wrote %d bytes of primary partition array instead of %d", written, len(primaryHeader))
	}

	written, err = f.WriteAt(partitionArray, int64(t.LogicalSectorSize)*int64(t.partitionArraySector(false)))
	if err != nil {
		return fmt.Errorf("error writing secondary partition array to disk: %v", err)
	}
	if written != len(partitionArray) {
		return fmt.Errorf("wrote %d bytes of secondary partition array instead of %d", written, len(primaryHeader))
	}

	secondaryHeader, err := t.toGPTBytes(false)
	if err != nil {
		return fmt.Errorf("error converting secondary GPT header to byte array: %v", err)
	}
	written, err = f.WriteAt(secondaryHeader, int64(t.secondaryHeader)*int64(t.LogicalSectorSize))
	if err != nil {
		return fmt.Errorf("error writing secondary GPT to disk: %v", err)
	}
	if written != len(secondaryHeader) {
		return fmt.Errorf("wrote %d bytes of secondary GPT header instead of %d", written, len(secondaryHeader))
	}

	return nil
}

// Read read a partition table from a disk
// must be passed the util.File from which to read, and the logical and physical block sizes
//
// if successful, returns a gpt.Table struct
// returns errors if fails at any stage reading the disk or processing the bytes on disk as a GPT
func Read(f util.File, logicalBlockSize, physicalBlockSize int) (*Table, error) {
	// read the data off of the disk - first block is the compatibility MBR, ssecond is the GPT table
	b := make([]byte, logicalBlockSize*2)
	read, err := f.ReadAt(b, 0)
	if err != nil {
		return nil, fmt.Errorf("error reading GPT from file: %w", err)
	}
	if read != len(b) {
		return nil, fmt.Errorf("read only %d bytes of GPT from file instead of expected %d", read, len(b))
	}
	// get the gpt table
	gptTable, err := tableFromBytes(b, logicalBlockSize, physicalBlockSize)
	if err != nil {
		return nil, fmt.Errorf("error reading GPT table: %w", err)
	}
	start, size := gptTable.calculatePartitionArrayLocations()
	b = make([]byte, size)
	read, err = f.ReadAt(b, int64(start))
	if read != len(b) {
		return nil, fmt.Errorf("read only %d bytes of GPT from file instead of expected %d", read, len(b))
	}
	if err != nil {
		return nil, fmt.Errorf("error reading partitions from file: %w", err)
	}
	// we need a CRC/zlib of the partition entries, so we do those first, then append the bytes
	checksum := crc32.ChecksumIEEE(b)
	if gptTable.partitionEntryChecksum != checksum {
		return nil, fmt.Errorf("invalid EFI Partition Entry Checksum, expected %v, got %v", checksum, gptTable.partitionEntryChecksum)
	}

	parts, err := readPartitionArrayBytes(b, int(gptTable.partitionEntrySize), logicalBlockSize, physicalBlockSize)
	if err != nil {
		return nil, fmt.Errorf("error parsing partition data: %w", err)
	}
	gptTable.Partitions = parts
	// get the partition table
	return gptTable, nil
}

// GetPartitions get the partitions
func (t *Table) GetPartitions() []part.Partition {
	// each Partition matches the part.Partition interface, but golang does not accept passing them in a slice
	parts := make([]part.Partition, len(t.Partitions))
	for i, p := range t.Partitions {
		parts[i] = p
	}
	return parts
}
 07070100000343000081A4000000000000000000000001645E367C00001E08000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/partition/gpt/types.go package gpt

// Type constants for the GUID for type of partition, see https://en.wikipedia.org/wiki/GUID_Partition_Table#Partition_entries
type Type string

// List of GUID partition types
const (
	Unused                   Type = "00000000-0000-0000-0000-000000000000"
	EFISystemPartition       Type = "C12A7328-F81F-11D2-BA4B-00A0C93EC93B"
	MBRPartitionScheme       Type = "024DEE41-33E7-11D3-9D69-0008C781F39F"
	IntelFastFlash           Type = "D3BFE2DE-3DAF-11DF-BA40-E3A556D89593"
	BIOSBoot                 Type = "21686148-6449-6E6F-744E-656564454649"
	SonyBootPartition        Type = "F4019732-066E-4E12-8273-346C5641494F"
	LenovoBootPartition      Type = "BFBFAFE7-A34F-448A-9A5B-6213EB736C22"
	PowerPCPRePBoot          Type = "9E1A2D38-C612-4316-AA26-8B49521E5A8B"
	ONIEBoot                 Type = "7412F7D5-A156-4B13-81DC-867174929325"
	ONIEConfig               Type = "D4E6E2CD-4469-46F3-B5CB-1BFF57AFC149"
	MicrosoftReserved        Type = "E3C9E316-0B5C-4DB8-817D-F92DF00215AE"
	MicrosoftBasicData       Type = "EBD0A0A2-B9E5-4433-87C0-68B6B72699C7"
	MicrosoftLDMMetadata     Type = "5808C8AA-7E8F-42E0-85D2-E1E90434CFB3"
	MicrosoftLDMData         Type = "AF9B60A0-1431-4F62-BC68-3311714A69AD"
	MicrosoftWindowsRecovery Type = "DE94BBA4-06D1-4D40-A16A-BFD50179D6AC"
	IBMGeneralParallelFs     Type = "37AFFC90-EF7D-4E96-91C3-2D7AE055B174"
	MicrosoftStorageSpaces   Type = "E75CAF8F-F680-4CEE-AFA3-B001E56EFC2D"
	HPUXData                 Type = "75894C1E-3AEB-11D3-B7C1-7B03A0000000"
	HPUXService              Type = "E2A1E728-32E3-11D6-A682-7B03A0000000"
	LinuxSwap                Type = "0657FD6D-A4AB-43C4-84E5-0933C84B4F4F"
	LinuxFilesystem          Type = "0FC63DAF-8483-4772-8E79-3D69D8477DE4"
	LinuxServerData          Type = "3B8F8425-20E0-4F3B-907F-1A25A76F98E8"
	LinuxRootX86             Type = "44479540-F297-41B2-9AF7-D131D5F0458A"
	LinuxRootArm             Type = "69DAD710-2CE4-4E3C-B16C-21A1D49ABED3"
	LinuxRootX86_64          Type = "4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709"
	LinuxRootArm64           Type = "B921B045-1DF0-41C3-AF44-4C6F280D3FAE"
	LinuxRootIA64            Type = "993D8D3D-F80E-4225-855A-9DAF8ED7EA97"
	LinuxReserved            Type = "8DA63339-0007-60C0-C436-083AC8230908"
	LinuxHome                Type = "933AC7E1-2EB4-4F13-B844-0E14E2AEF915"
	LinuxRAID                Type = "A19D880F-05FC-4D3B-A006-743F0F84911E"
	LinuxExtendedBoot        Type = "BC13C2FF-59E6-4262-A352-B275FD6F7172"
	LinuxLVM                 Type = "E6D6D379-F507-44C2-A23C-238F2A3DF928"
	LinuxDMCrypt             Type = "7FFEC5C9-2D00-49B7-8941-3EA10A5586B7"
	LinuxLUKS                Type = "CA7D7CCB-63ED-4C53-861C-1742536059CC"
	FreeBSDData              Type = "516E7CB4-6ECF-11D6-8FF8-00022D09712B"
	FreeBSDBoot              Type = "83BD6B9D-7F41-11DC-BE0B-001560B84F0F"
	FreeBSDSwap              Type = "516E7CB5-6ECF-11D6-8FF8-00022D09712B"
	FreeBSDNANDFS            Type = "74BA7DD9-A689-11E1-BD04-00E081286ACF"
	FreeBSDUFS               Type = "516E7CB6-6ECF-11D6-8FF8-00022D09712B"
	FreeBSDZFS               Type = "516E7CBA-6ECF-11D6-8FF8-00022D09712B"
	FreeBSDVinum             Type = "516E7CB8-6ECF-11D6-8FF8-00022D09712B"
	AppleHFS                 Type = "48465300-0000-11AA-AA11-00306543ECAC"
	AppleUFS                 Type = "55465300-0000-11AA-AA11-00306543ECAC"
	AppleAPFS                Type = "7C3457EF-0000-11AA-AA11-00306543ECAC"
	AppleRAID                Type = "52414944-0000-11AA-AA11-00306543ECAC"
	AppleRAIDOffline         Type = "52414944-5F4F-11AA-AA11-00306543ECAC"
	AppleBoot                Type = "426F6F74-0000-11AA-AA11-00306543ECAC"
	AppleLabel               Type = "4C616265-6C00-11AA-AA11-00306543ECAC"
	AppleTVRecovery          Type = "5265636F-7665-11AA-AA11-00306543ECAC"
	AppleCoreStorage         Type = "53746F72-6167-11AA-AA11-00306543ECAC"
	DragonflyLabel32         Type = "9D087404-1CA5-11DC-8817-01301BB8A9F5"
	DragonflySwap            Type = "9D58FDBD-1CA5-11DC-8817-01301BB8A9F5"
	DragonflyUFS             Type = "9D94CE7C-1CA5-11DC-8817-01301BB8A9F5"
	DragonflyVINUM           Type = "9DD4478F-1CA5-11DC-8817-01301BB8A9F5"
	DragonflyCCD             Type = "DBD5211B-1CA5-11DC-8817-01301BB8A9F5"
	DragonflyLabel64         Type = "3D48CE54-1D16-11DC-8696-01301BB8A9F5"
	DragonflyLegacy          Type = "BD215AB2-1D16-11DC-8696-01301BB8A9F5"
	DragonflyHAMMER          Type = "61DC63AC-6E38-11DC-8513-01301BB8A9F5"
	DragonflyHAMMER2         Type = "5CBB9AD1-862D-11DC-A94D-01301BB8A9F5"
	SolarisBoot              Type = "6A82CB45-1DD2-11B2-99A6-080020736631"
	SolarisRoot              Type = "6A85CF4D-1DD2-11B2-99A6-080020736631"
	SolarisUsrAndAppleZFS    Type = "6A898CC3-1DD2-11B2-99A6-080020736631"
	SolarisSwap              Type = "6A87C46F-1DD2-11B2-99A6-080020736631"
	SolarisBackup            Type = "6A8B642B-1DD2-11B2-99A6-080020736631"
	SolarisVar               Type = "6A8EF2E9-1DD2-11B2-99A6-080020736631"
	SolarisHome              Type = "6A90BA39-1DD2-11B2-99A6-080020736631"
	SolarisAlternateSector   Type = "6A9283A5-1DD2-11B2-99A6-080020736631"
	SolarisReserved1         Type = "6A945A3B-1DD2-11B2-99A6-080020736631"
	SolarisReserved2         Type = "6A9630D1-1DD2-11B2-99A6-080020736631"
	SolarisReserved3         Type = "6A980767-1DD2-11B2-99A6-080020736631"
	SolarisReserved4         Type = "6A96237F-1DD2-11B2-99A6-080020736631"
	SolarisReserved5         Type = "6A8D2AC7-1DD2-11B2-99A6-080020736631"
	NetBSDSwap               Type = "49F48D32-B10E-11DC-B99B-0019D1879648"
	NetBSDFFS                Type = "49F48D5A-B10E-11DC-B99B-0019D1879648"
	NetBSDLFS                Type = "49F48D82-B10E-11DC-B99B-0019D1879648"
	NetBSDConcatenated       Type = "2DB519C4-B10E-11DC-B99B-0019D1879648"
	NetBSDEncrypted          Type = "2DB519EC-B10E-11DC-B99B-0019D1879648"
	NetBSDRAID               Type = "49F48DAA-B10E-11DC-B99B-0019D1879648"
	ChromeOSFirmware         Type = "CAB6E88E-ABF3-4102-A07A-D4BB9BE3C1D3"
	ChromeOSKernel           Type = "FE3A2A5D-4F32-41A7-B725-ACCC3285A309"
	ChromeOSRootFs           Type = "3CB8E202-3B7E-47DD-8A3C-7FF2A13CFCEC"
	ChromeOSReserved         Type = "2E0A753D-9E48-43B0-8337-B15192CB1B5E"
	MidnightBSDData          Type = "85D5E45A-237C-11E1-B4B3-E89A8F7FC3A7"
	MidnightBSDBoot          Type = "85D5E45E-237C-11E1-B4B3-E89A8F7FC3A7"
	MidnightBSDSwap          Type = "85D5E45B-237C-11E1-B4B3-E89A8F7FC3A7"
	MidnightBSDUFS           Type = "0394EF8B-237E-11E1-B4B3-E89A8F7FC3A7"
	MidnightBSDZFS           Type = "85D5E45D-237C-11E1-B4B3-E89A8F7FC3A7"
	MidnightBSDVinum         Type = "85D5E45C-237C-11E1-B4B3-E89A8F7FC3A7"
	CephJournal              Type = "45B0969E-9B03-4F30-B4C6-B4B80CEFF106"
	CephEncryptedJournal     Type = "45B0969E-9B03-4F30-B4C6-5EC00CEFF106"
	CephOSD                  Type = "4FBD7E29-9D25-41B8-AFD0-062C0CEFF05D"
	CephCryptOSD             Type = "4FBD7E29-9D25-41B8-AFD0-5EC00CEFF05D"
	CephDiskInCreation       Type = "89C57F98-2FE5-4DC0-89C1-F3AD0CEFF2BE"
	CephCryptDiskInCreation  Type = "89C57F98-2FE5-4DC0-89C1-5EC00CEFF2BE"
	VMwareVMFS               Type = "AA31E02A-400F-11DB-9590-000C2911D1B8"
	VMwareDiagnostic         Type = "9D275380-40AD-11DB-BF97-000C2911D1B8"
	VMwareVirtualSAN         Type = "381CFCCC-7288-11E0-92EE-000C2911D0B2"
	VMwareVirsto             Type = "77719A0C-A4A0-11E3-A47E-000C29745A24"
	VMwareReserved           Type = "9198EFFC-31C0-11DB-8F78-000C2911D1B8"
	OpenBSDData              Type = "824CC7A0-36A8-11E3-890A-952519AD3F61"
	QNX6FileSystem           Type = "CEF5A9AD-73BC-4601-89F3-CDEEEEE321A1"
	Plan9Partition           Type = "C91818F9-8025-47AF-89D2-F030D7000C2C"
	HiFiveUnleashedFSBL      Type = "5B193300-FC78-40CD-8002-E86C45580B47"
	HiFiveUnleashedBBL       Type = "2E54B353-1271-4842-806F-E436D6AF6985"
)
07070100000344000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/partition/mbr  07070100000345000081A4000000000000000000000001645E367C000003DD000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/partition/mbr/doc.go   // Package mbr provides an interface to Master Boot Record (MBR) partitioned disks.
//
// You can use this package to manipulate existing MBR disks, read existing disks, or create entirely
// new partition tables on disks or disk files.
//
// mbr.Table implements the Table interface in github.com/diskfs/go-diskfs/partition
//
// Normally, the best way to interact with a disk is to use the github.com/diskfs/go-diskfs package,
// which, when necessary, will call this one. When creating a new disk or manipulating an existing one,
// You will, however, need to interact with an mbr.Table and mbr.Partition structs.
//
// Here is a simple example of an MBR Table with a single 10MB Linux partition:
//
//	table := &mbr.Table{
//	  LogicalSectorSize:  512,
//	  PhysicalSectorSize: 512,
//	  Partitions: []*mbr.Partition{
//	    {
//	      Bootable:      false,
//	      Type:          Linux,
//	      Start:         2048,
//	      Size:          20480,
//	    },
//	  },
//	}
package mbr
   07070100000346000081A4000000000000000000000001645E367C00001691000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/partition/mbr/partition.go package mbr

import (
	"bytes"
	"encoding/binary"
	"errors"
	"fmt"
	"io"

	"github.com/diskfs/go-diskfs/util"
)

// Partition represents the structure of a single partition on the disk
// note that start and end cylinder, head, sector (CHS) are ignored, for the most part.
// godiskfs works with disks that support [Logical Block Addressing (LBA)](https://en.wikipedia.org/wiki/Logical_block_addressing)
type Partition struct {
	Bootable      bool
	Type          Type   //
	Start         uint32 // Start first absolute LBA sector for partition
	Size          uint32 // Size number of sectors in partition
	StartCylinder byte
	StartHead     byte
	StartSector   byte
	EndCylinder   byte
	EndHead       byte
	EndSector     byte
	// we need this for calculations
	logicalSectorSize  int
	physicalSectorSize int
}

// PartitionEqualBytes compares if the bytes for 2 partitions are equal, ignoring CHS start and end
func PartitionEqualBytes(b1, b2 []byte) bool {
	if (b1 == nil && b2 != nil) || (b2 == nil && b1 != nil) {
		return false
	}
	if b1 == nil && b2 == nil {
		return true
	}
	if len(b1) != len(b2) {
		return false
	}
	return b1[0] == b2[0] &&
		b1[4] == b2[4] &&
		bytes.Equal(b1[8:12], b2[8:12]) &&
		bytes.Equal(b1[12:16], b2[12:16])
}

// Equal compares if another partition is equal to this one, ignoring CHS start and end
func (p *Partition) Equal(p2 *Partition) bool {
	if p2 == nil {
		return false
	}
	return p.Bootable == p2.Bootable &&
		p.Type == p2.Type &&
		p.Start == p2.Start &&
		p.Size == p2.Size
}

func (p *Partition) GetSize() int64 {
	_, lss := p.sectorSizes()
	return int64(p.Size) * int64(lss)
}
func (p *Partition) GetStart() int64 {
	_, lss := p.sectorSizes()
	return int64(p.Start) * int64(lss)
}

// toBytes return the 16 bytes for this partition
func (p *Partition) toBytes() []byte {
	b := make([]byte, partitionEntrySize)
	if p.Bootable {
		b[0] = 0x80
	} else {
		b[0] = 0x00
	}
	b[1] = p.StartHead
	b[2] = p.StartSector
	b[3] = p.StartCylinder
	b[4] = byte(p.Type)
	b[5] = p.EndHead
	b[6] = p.EndSector
	b[7] = p.EndCylinder
	binary.LittleEndian.PutUint32(b[8:12], p.Start)
	binary.LittleEndian.PutUint32(b[12:16], p.Size)
	return b
}

// partitionFromBytes create a partition entry from 16 bytes
//
//nolint:unparam // this always receives logicalSectorSize=512, but since it can be different, we want to leave it as a param
func partitionFromBytes(b []byte, logicalSectorSize, physicalSectorSize int) (*Partition, error) {
	if len(b) != partitionEntrySize {
		return nil, fmt.Errorf("data for partition was %d bytes instead of expected %d", len(b), partitionEntrySize)
	}
	var bootable bool
	switch b[0] {
	case 0x00:
		bootable = false
	case 0x80:
		bootable = true
	default:
		return nil, errors.New("invalid partition")
	}

	return &Partition{
		Bootable:           bootable,
		StartHead:          b[1],
		StartSector:        b[2],
		StartCylinder:      b[3],
		Type:               Type(b[4]),
		EndHead:            b[5],
		EndSector:          b[6],
		EndCylinder:        b[7],
		Start:              binary.LittleEndian.Uint32(b[8:12]),
		Size:               binary.LittleEndian.Uint32(b[12:16]),
		logicalSectorSize:  logicalSectorSize,
		physicalSectorSize: physicalSectorSize,
	}, nil
}

// WriteContents fills the partition with the contents provided
// reads from beginning of reader to exactly size of partition in bytes
func (p *Partition) WriteContents(f util.File, contents io.Reader) (uint64, error) {
	pss, lss := p.sectorSizes()
	total := uint64(0)

	// chunks of physical sector size for efficient writing
	b := make([]byte, pss)
	// we start at the correct byte location
	start := p.Start * uint32(lss)
	size := p.Size * uint32(lss)

	// loop in physical sector sizes
	for {
		read, err := contents.Read(b)
		if err != nil && err != io.EOF {
			return total, fmt.Errorf("could not read contents to pass to partition: %v", err)
		}
		tmpTotal := uint64(read) + total
		if tmpTotal > uint64(size) {
			return total, fmt.Errorf("requested to write at least %d bytes to partition but maximum size is %d", tmpTotal, size)
		}
		var written int
		if read > 0 {
			written, err = f.WriteAt(b[:read], int64(start)+int64(total))
			if err != nil {
				return total, fmt.Errorf("error writing to file: %v", err)
			}
			// increment our total
			total += uint64(written)
		}
		// is this the end of the data?
		if err == io.EOF {
			break
		}
	}
	// did the total written equal the size of the partition?
	if total != uint64(size) {
		return total, fmt.Errorf("write %d bytes to partition but actual size is %d", total, size)
	}
	return total, nil
}

// readContents reads the contents of the partition into a writer
// streams the entire partition to the writer
func (p *Partition) ReadContents(f util.File, out io.Writer) (int64, error) {
	pss, lss := p.sectorSizes()
	total := int64(0)
	// chunks of physical sector size for efficient writing
	b := make([]byte, pss)
	// we start at the correct byte location
	start := p.Start * uint32(lss)
	size := p.Size * uint32(lss)

	// loop in physical sector sizes
	for {
		read, err := f.ReadAt(b, int64(start)+total)
		if err != nil && err != io.EOF {
			return total, fmt.Errorf("error reading from file: %v", err)
		}
		if read > 0 {
			_, _ = out.Write(b[:read])
		}
		// increment our total
		total += int64(read)
		// is this the end of the data?
		if err == io.EOF || total >= int64(size) {
			break
		}
	}
	return total, nil
}

// sectorSizes get the sector sizes for this partition, falling back to the defaults if 0
func (p *Partition) sectorSizes() (physical, logical int) {
	physical = p.physicalSectorSize
	if physical == 0 {
		physical = physicalSectorSize
	}
	logical = p.logicalSectorSize
	if logical == 0 {
		logical = logicalSectorSize
	}
	return physical, logical
}
   07070100000347000081A4000000000000000000000001645E367C000012FC000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/partition/mbr/table.go package mbr

import (
	"bytes"
	"fmt"

	"github.com/diskfs/go-diskfs/partition/part"
	"github.com/diskfs/go-diskfs/util"
)

// Table represents an MBR partition table to be applied to a disk or read from a disk
type Table struct {
	Partitions         []*Partition
	LogicalSectorSize  int // logical size of a sector
	PhysicalSectorSize int // physical size of the sector
	initialized        bool
}

const (
	mbrSize               = 512
	logicalSectorSize     = 512
	physicalSectorSize    = 512
	partitionEntriesStart = 446
	partitionEntriesCount = 4
	signatureStart        = 510
)

// partitionEntrySize standard size of an MBR partition
const partitionEntrySize = 16

func getMbrSignature() []byte {
	return []byte{0x55, 0xaa}
}

// compare 2 partition arrays
func comparePartitionArray(p1, p2 []*Partition) bool {
	if (p1 == nil && p2 != nil) || (p2 == nil && p1 != nil) {
		return false
	}
	if p1 == nil && p2 == nil {
		return true
	}
	// neither is nil, so now we need to compare
	if len(p1) != len(p2) {
		return false
	}
	matches := true
	for i, p := range p1 {
		if p == nil && p2 != nil || !p.Equal(p2[i]) {
			matches = false
			break
		}
	}
	return matches
}

// ensure that a blank table is initialized
func (t *Table) initTable() {
	// default settings
	if t.LogicalSectorSize == 0 {
		t.LogicalSectorSize = 512
	}
	if t.PhysicalSectorSize == 0 {
		t.PhysicalSectorSize = 512
	}

	t.initialized = true
}

// Equal check if another table is equal to this one, ignoring CHS start and end for the partitions
func (t *Table) Equal(t2 *Table) bool {
	if t2 == nil {
		return false
	}
	// neither is nil, so now we need to compare
	basicMatch := t.LogicalSectorSize == t2.LogicalSectorSize &&
		t.PhysicalSectorSize == t2.PhysicalSectorSize
	partMatch := comparePartitionArray(t.Partitions, t2.Partitions)
	return basicMatch && partMatch
}

// tableFromBytes read a partition table from a byte slice
func tableFromBytes(b []byte) (*Table, error) {
	// check length
	if len(b) != mbrSize {
		return nil, fmt.Errorf("data for partition was %d bytes instead of expected %d", len(b), mbrSize)
	}
	mbrSignature := b[signatureStart:]

	// validate signature
	if !bytes.Equal(mbrSignature, getMbrSignature()) {
		return nil, fmt.Errorf("invalid MBR Signature %v", mbrSignature)
	}

	parts := make([]*Partition, 0, partitionEntriesCount)
	count := int(partitionEntriesCount)
	for i := 0; i < count; i++ {
		// write the primary partition entry
		start := partitionEntriesStart + i*partitionEntrySize
		end := start + partitionEntrySize
		p, err := partitionFromBytes(b[start:end], logicalSectorSize, physicalSectorSize)
		if err != nil {
			return nil, fmt.Errorf("error reading partition entry %d: %v", i, err)
		}
		parts = append(parts, p)
	}

	table := &Table{
		Partitions:         parts,
		LogicalSectorSize:  logicalSectorSize,
		PhysicalSectorSize: 512,
	}

	return table, nil
}

// Type report the type of table, always the string "mbr"
func (t *Table) Type() string {
	return "mbr"
}

// Read read a partition table from a disk, given the logical block size and physical block size
func Read(f util.File, logicalBlockSize, physicalBlockSize int) (*Table, error) {
	// read the data off of the disk
	b := make([]byte, mbrSize)
	read, err := f.ReadAt(b, 0)
	if err != nil {
		return nil, fmt.Errorf("error reading MBR from file: %v", err)
	}
	if read != len(b) {
		return nil, fmt.Errorf("read only %d bytes of MBR from file instead of expected %d", read, len(b))
	}
	return tableFromBytes(b)
}

// ToBytes convert Table to byte slice suitable to be flashed to a disk
// If successful, always will return a byte slice of size exactly 512
func (t *Table) toBytes() []byte {
	b := make([]byte, 0, mbrSize-partitionEntriesStart)

	// write the partitions
	for i := 0; i < partitionEntriesCount; i++ {
		if i < len(t.Partitions) {
			btmp := t.Partitions[i].toBytes()
			b = append(b, btmp...)
		} else {
			b = append(b, []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}...)
		}
	}

	// signature
	b = append(b, getMbrSignature()...)
	return b
}

// Write writes a given MBR Table to disk.
// Must be passed the util.File to write to and the size of the disk
func (t *Table) Write(f util.File, size int64) error {
	b := t.toBytes()

	written, err := f.WriteAt(b, partitionEntriesStart)
	if err != nil {
		return fmt.Errorf("error writing partition table to disk: %v", err)
	}
	if written != len(b) {
		return fmt.Errorf("partition table wrote %d bytes to disk instead of the expected %d", written, len(b))
	}
	return nil
}

func (t *Table) GetPartitions() []part.Partition {
	// each Partition matches the part.Partition interface, but golang does not accept passing them in a slice
	parts := make([]part.Partition, len(t.Partitions))
	for i, p := range t.Partitions {
		parts[i] = p
	}
	return parts
}
07070100000348000081A4000000000000000000000001645E367C00000384000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/partition/mbr/types.go package mbr

// Type constants for the GUID for type of partition, see https://en.wikipedia.org/wiki/GUID_Partition_Table#Partition_entries
type Type byte

// List of GUID partition types
const (
	Empty         Type = 0x00
	Fat12         Type = 0x01
	XenixRoot     Type = 0x02
	XenixUsr      Type = 0x03
	Fat16         Type = 0x04
	ExtendedCHS   Type = 0x05
	Fat16b        Type = 0x06
	NTFS          Type = 0x07
	CommodoreFAT  Type = 0x08
	Fat32CHS      Type = 0x0b
	Fat32LBA      Type = 0x0c
	Fat16bLBA     Type = 0x0e
	ExtendedLBA   Type = 0x0f
	LinuxSwap     Type = 0x82
	Linux         Type = 0x83
	LinuxExtended Type = 0x85
	LinuxLVM      Type = 0x8e
	Iso9660       Type = 0x96
	MacOSXUFS     Type = 0xa8
	MacOSXBoot    Type = 0xab
	HFS           Type = 0xaf
	Solaris8Boot  Type = 0xbe
	GPTProtective Type = 0xee
	EFISystem     Type = 0xef
	VMWareFS      Type = 0xfb
	VMWareSwap    Type = 0xfc
)
07070100000349000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/partition/part 0707010000034A000081A4000000000000000000000001645E367C00000127000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/partition/part/partition.go    package part

import (
	"io"

	"github.com/diskfs/go-diskfs/util"
)

// Partition reference to an individual partition on disk
type Partition interface {
	GetSize() int64
	GetStart() int64
	ReadContents(util.File, io.Writer) (int64, error)
	WriteContents(util.File, io.Reader) (uint64, error)
}
 0707010000034B000081A4000000000000000000000001645E367C0000030A000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/partition/partition.go // Package partition provides ability to work with individual partitions.
// All useful implementations are subpackages of this package, e.g. github.com/diskfs/go-diskfs/gpt
package partition

import (
	"fmt"

	"github.com/diskfs/go-diskfs/partition/gpt"
	"github.com/diskfs/go-diskfs/partition/mbr"
	"github.com/diskfs/go-diskfs/util"
)

// Read read a partition table from a disk
func Read(f util.File, logicalBlocksize, physicalBlocksize int) (Table, error) {
	// just try each type
	gptTable, err := gpt.Read(f, logicalBlocksize, physicalBlocksize)
	if err == nil {
		return gptTable, nil
	}
	mbrTable, err := mbr.Read(f, logicalBlocksize, physicalBlocksize)
	if err == nil {
		return mbrTable, nil
	}
	// we are out
	return nil, fmt.Errorf("unknown disk partition type")
}
  0707010000034C000081A4000000000000000000000001645E367C0000010D000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/partition/table.go package partition

import (
	"github.com/diskfs/go-diskfs/partition/part"
	"github.com/diskfs/go-diskfs/util"
)

// Table reference to a partitioning table on disk
type Table interface {
	Type() string
	Write(util.File, int64) error
	GetPartitions() []part.Partition
}
   0707010000034D000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/util   0707010000034E000081A4000000000000000000000001645E367C00000174000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/util/file.go   // Package util common utilities or other elements shared across github.com/diskfs/go-diskfs packages
package util

import "io"

// File interface that can be read from and written to.
// Normally implemented as actual os.File, but useful as a separate interface so can easily
// use alternate implementations.
type File interface {
	io.ReaderAt
	io.WriterAt
	io.Seeker
}
0707010000034F000081A4000000000000000000000001645E367C00000077000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/diskfs/go-diskfs/util/version.go    package util

const (
	// AppNameVersion name and URL to app
	AppNameVersion = "https://github.com/diskfs/go-diskfs"
)
 07070100000350000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003300000000elemental-cli-0.3.1/vendor/github.com/distribution    07070100000351000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/distribution/distribution   07070100000352000081A4000000000000000000000001645E367C00002C3D000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/distribution/distribution/LICENSE   Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "{}"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright {yyyy} {name of copyright owner}

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

   07070100000353000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/distribution/distribution/reference 07070100000354000081A4000000000000000000000001645E367C0000047C000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/distribution/distribution/reference/helpers.go  package reference

import "path"

// IsNameOnly returns true if reference only contains a repo name.
func IsNameOnly(ref Named) bool {
	if _, ok := ref.(NamedTagged); ok {
		return false
	}
	if _, ok := ref.(Canonical); ok {
		return false
	}
	return true
}

// FamiliarName returns the familiar name string
// for the given named, familiarizing if needed.
func FamiliarName(ref Named) string {
	if nn, ok := ref.(normalizedNamed); ok {
		return nn.Familiar().Name()
	}
	return ref.Name()
}

// FamiliarString returns the familiar string representation
// for the given reference, familiarizing if needed.
func FamiliarString(ref Reference) string {
	if nn, ok := ref.(normalizedNamed); ok {
		return nn.Familiar().String()
	}
	return ref.String()
}

// FamiliarMatch reports whether ref matches the specified pattern.
// See https://godoc.org/path#Match for supported patterns.
func FamiliarMatch(pattern string, ref Reference) (bool, error) {
	matched, err := path.Match(pattern, FamiliarString(ref))
	if namedRef, isNamed := ref.(Named); isNamed && !matched {
		matched, _ = path.Match(pattern, FamiliarName(namedRef))
	}
	return matched, err
}
07070100000355000081A4000000000000000000000001645E367C00001792000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/distribution/distribution/reference/normalize.go    package reference

import (
	"errors"
	"fmt"
	"strings"

	"github.com/docker/distribution/digestset"
	"github.com/opencontainers/go-digest"
)

var (
	legacyDefaultDomain = "index.docker.io"
	defaultDomain       = "docker.io"
	officialRepoName    = "library"
	defaultTag          = "latest"
)

// normalizedNamed represents a name which has been
// normalized and has a familiar form. A familiar name
// is what is used in Docker UI. An example normalized
// name is "docker.io/library/ubuntu" and corresponding
// familiar name of "ubuntu".
type normalizedNamed interface {
	Named
	Familiar() Named
}

// ParseNormalizedNamed parses a string into a named reference
// transforming a familiar name from Docker UI to a fully
// qualified reference. If the value may be an identifier
// use ParseAnyReference.
func ParseNormalizedNamed(s string) (Named, error) {
	if ok := anchoredIdentifierRegexp.MatchString(s); ok {
		return nil, fmt.Errorf("invalid repository name (%s), cannot specify 64-byte hexadecimal strings", s)
	}
	domain, remainder := splitDockerDomain(s)
	var remoteName string
	if tagSep := strings.IndexRune(remainder, ':'); tagSep > -1 {
		remoteName = remainder[:tagSep]
	} else {
		remoteName = remainder
	}
	if strings.ToLower(remoteName) != remoteName {
		return nil, errors.New("invalid reference format: repository name must be lowercase")
	}

	ref, err := Parse(domain + "/" + remainder)
	if err != nil {
		return nil, err
	}
	named, isNamed := ref.(Named)
	if !isNamed {
		return nil, fmt.Errorf("reference %s has no name", ref.String())
	}
	return named, nil
}

// ParseDockerRef normalizes the image reference following the docker convention. This is added
// mainly for backward compatibility.
// The reference returned can only be either tagged or digested. For reference contains both tag
// and digest, the function returns digested reference, e.g. docker.io/library/busybox:latest@
// sha256:7cc4b5aefd1d0cadf8d97d4350462ba51c694ebca145b08d7d41b41acc8db5aa will be returned as
// docker.io/library/busybox@sha256:7cc4b5aefd1d0cadf8d97d4350462ba51c694ebca145b08d7d41b41acc8db5aa.
func ParseDockerRef(ref string) (Named, error) {
	named, err := ParseNormalizedNamed(ref)
	if err != nil {
		return nil, err
	}
	if _, ok := named.(NamedTagged); ok {
		if canonical, ok := named.(Canonical); ok {
			// The reference is both tagged and digested, only
			// return digested.
			newNamed, err := WithName(canonical.Name())
			if err != nil {
				return nil, err
			}
			newCanonical, err := WithDigest(newNamed, canonical.Digest())
			if err != nil {
				return nil, err
			}
			return newCanonical, nil
		}
	}
	return TagNameOnly(named), nil
}

// splitDockerDomain splits a repository name to domain and remotename string.
// If no valid domain is found, the default domain is used. Repository name
// needs to be already validated before.
func splitDockerDomain(name string) (domain, remainder string) {
	i := strings.IndexRune(name, '/')
	if i == -1 || (!strings.ContainsAny(name[:i], ".:") && name[:i] != "localhost") {
		domain, remainder = defaultDomain, name
	} else {
		domain, remainder = name[:i], name[i+1:]
	}
	if domain == legacyDefaultDomain {
		domain = defaultDomain
	}
	if domain == defaultDomain && !strings.ContainsRune(remainder, '/') {
		remainder = officialRepoName + "/" + remainder
	}
	return
}

// familiarizeName returns a shortened version of the name familiar
// to to the Docker UI. Familiar names have the default domain
// "docker.io" and "library/" repository prefix removed.
// For example, "docker.io/library/redis" will have the familiar
// name "redis" and "docker.io/dmcgowan/myapp" will be "dmcgowan/myapp".
// Returns a familiarized named only reference.
func familiarizeName(named namedRepository) repository {
	repo := repository{
		domain: named.Domain(),
		path:   named.Path(),
	}

	if repo.domain == defaultDomain {
		repo.domain = ""
		// Handle official repositories which have the pattern "library/<official repo name>"
		if split := strings.Split(repo.path, "/"); len(split) == 2 && split[0] == officialRepoName {
			repo.path = split[1]
		}
	}
	return repo
}

func (r reference) Familiar() Named {
	return reference{
		namedRepository: familiarizeName(r.namedRepository),
		tag:             r.tag,
		digest:          r.digest,
	}
}

func (r repository) Familiar() Named {
	return familiarizeName(r)
}

func (t taggedReference) Familiar() Named {
	return taggedReference{
		namedRepository: familiarizeName(t.namedRepository),
		tag:             t.tag,
	}
}

func (c canonicalReference) Familiar() Named {
	return canonicalReference{
		namedRepository: familiarizeName(c.namedRepository),
		digest:          c.digest,
	}
}

// TagNameOnly adds the default tag "latest" to a reference if it only has
// a repo name.
func TagNameOnly(ref Named) Named {
	if IsNameOnly(ref) {
		namedTagged, err := WithTag(ref, defaultTag)
		if err != nil {
			// Default tag must be valid, to create a NamedTagged
			// type with non-validated input the WithTag function
			// should be used instead
			panic(err)
		}
		return namedTagged
	}
	return ref
}

// ParseAnyReference parses a reference string as a possible identifier,
// full digest, or familiar name.
func ParseAnyReference(ref string) (Reference, error) {
	if ok := anchoredIdentifierRegexp.MatchString(ref); ok {
		return digestReference("sha256:" + ref), nil
	}
	if dgst, err := digest.Parse(ref); err == nil {
		return digestReference(dgst), nil
	}

	return ParseNormalizedNamed(ref)
}

// ParseAnyReferenceWithSet parses a reference string as a possible short
// identifier to be matched in a digest set, a full digest, or familiar name.
func ParseAnyReferenceWithSet(ref string, ds *digestset.Set) (Reference, error) {
	if ok := anchoredShortIdentifierRegexp.MatchString(ref); ok {
		dgst, err := ds.Lookup(ref)
		if err == nil {
			return digestReference(dgst), nil
		}
	} else {
		if dgst, err := digest.Parse(ref); err == nil {
			return digestReference(dgst), nil
		}
	}

	return ParseNormalizedNamed(ref)
}
  07070100000356000081A4000000000000000000000001645E367C00002B8E000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/distribution/distribution/reference/reference.go    // Package reference provides a general type to represent any way of referencing images within the registry.
// Its main purpose is to abstract tags and digests (content-addressable hash).
//
// Grammar
//
// 	reference                       := name [ ":" tag ] [ "@" digest ]
//	name                            := [domain '/'] path-component ['/' path-component]*
//	domain                          := domain-component ['.' domain-component]* [':' port-number]
//	domain-component                := /([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])/
//	port-number                     := /[0-9]+/
//	path-component                  := alpha-numeric [separator alpha-numeric]*
// 	alpha-numeric                   := /[a-z0-9]+/
//	separator                       := /[_.]|__|[-]*/
//
//	tag                             := /[\w][\w.-]{0,127}/
//
//	digest                          := digest-algorithm ":" digest-hex
//	digest-algorithm                := digest-algorithm-component [ digest-algorithm-separator digest-algorithm-component ]*
//	digest-algorithm-separator      := /[+.-_]/
//	digest-algorithm-component      := /[A-Za-z][A-Za-z0-9]*/
//	digest-hex                      := /[0-9a-fA-F]{32,}/ ; At least 128 bit digest value
//
//	identifier                      := /[a-f0-9]{64}/
//	short-identifier                := /[a-f0-9]{6,64}/
package reference

import (
	"errors"
	"fmt"
	"strings"

	"github.com/opencontainers/go-digest"
)

const (
	// NameTotalLengthMax is the maximum total number of characters in a repository name.
	NameTotalLengthMax = 255
)

var (
	// ErrReferenceInvalidFormat represents an error while trying to parse a string as a reference.
	ErrReferenceInvalidFormat = errors.New("invalid reference format")

	// ErrTagInvalidFormat represents an error while trying to parse a string as a tag.
	ErrTagInvalidFormat = errors.New("invalid tag format")

	// ErrDigestInvalidFormat represents an error while trying to parse a string as a tag.
	ErrDigestInvalidFormat = errors.New("invalid digest format")

	// ErrNameContainsUppercase is returned for invalid repository names that contain uppercase characters.
	ErrNameContainsUppercase = errors.New("repository name must be lowercase")

	// ErrNameEmpty is returned for empty, invalid repository names.
	ErrNameEmpty = errors.New("repository name must have at least one component")

	// ErrNameTooLong is returned when a repository name is longer than NameTotalLengthMax.
	ErrNameTooLong = fmt.Errorf("repository name must not be more than %v characters", NameTotalLengthMax)

	// ErrNameNotCanonical is returned when a name is not canonical.
	ErrNameNotCanonical = errors.New("repository name must be canonical")
)

// Reference is an opaque object reference identifier that may include
// modifiers such as a hostname, name, tag, and digest.
type Reference interface {
	// String returns the full reference
	String() string
}

// Field provides a wrapper type for resolving correct reference types when
// working with encoding.
type Field struct {
	reference Reference
}

// AsField wraps a reference in a Field for encoding.
func AsField(reference Reference) Field {
	return Field{reference}
}

// Reference unwraps the reference type from the field to
// return the Reference object. This object should be
// of the appropriate type to further check for different
// reference types.
func (f Field) Reference() Reference {
	return f.reference
}

// MarshalText serializes the field to byte text which
// is the string of the reference.
func (f Field) MarshalText() (p []byte, err error) {
	return []byte(f.reference.String()), nil
}

// UnmarshalText parses text bytes by invoking the
// reference parser to ensure the appropriately
// typed reference object is wrapped by field.
func (f *Field) UnmarshalText(p []byte) error {
	r, err := Parse(string(p))
	if err != nil {
		return err
	}

	f.reference = r
	return nil
}

// Named is an object with a full name
type Named interface {
	Reference
	Name() string
}

// Tagged is an object which has a tag
type Tagged interface {
	Reference
	Tag() string
}

// NamedTagged is an object including a name and tag.
type NamedTagged interface {
	Named
	Tag() string
}

// Digested is an object which has a digest
// in which it can be referenced by
type Digested interface {
	Reference
	Digest() digest.Digest
}

// Canonical reference is an object with a fully unique
// name including a name with domain and digest
type Canonical interface {
	Named
	Digest() digest.Digest
}

// namedRepository is a reference to a repository with a name.
// A namedRepository has both domain and path components.
type namedRepository interface {
	Named
	Domain() string
	Path() string
}

// Domain returns the domain part of the Named reference
func Domain(named Named) string {
	if r, ok := named.(namedRepository); ok {
		return r.Domain()
	}
	domain, _ := splitDomain(named.Name())
	return domain
}

// Path returns the name without the domain part of the Named reference
func Path(named Named) (name string) {
	if r, ok := named.(namedRepository); ok {
		return r.Path()
	}
	_, path := splitDomain(named.Name())
	return path
}

func splitDomain(name string) (string, string) {
	match := anchoredNameRegexp.FindStringSubmatch(name)
	if len(match) != 3 {
		return "", name
	}
	return match[1], match[2]
}

// SplitHostname splits a named reference into a
// hostname and name string. If no valid hostname is
// found, the hostname is empty and the full value
// is returned as name
// DEPRECATED: Use Domain or Path
func SplitHostname(named Named) (string, string) {
	if r, ok := named.(namedRepository); ok {
		return r.Domain(), r.Path()
	}
	return splitDomain(named.Name())
}

// Parse parses s and returns a syntactically valid Reference.
// If an error was encountered it is returned, along with a nil Reference.
// NOTE: Parse will not handle short digests.
func Parse(s string) (Reference, error) {
	matches := ReferenceRegexp.FindStringSubmatch(s)
	if matches == nil {
		if s == "" {
			return nil, ErrNameEmpty
		}
		if ReferenceRegexp.FindStringSubmatch(strings.ToLower(s)) != nil {
			return nil, ErrNameContainsUppercase
		}
		return nil, ErrReferenceInvalidFormat
	}

	if len(matches[1]) > NameTotalLengthMax {
		return nil, ErrNameTooLong
	}

	var repo repository

	nameMatch := anchoredNameRegexp.FindStringSubmatch(matches[1])
	if len(nameMatch) == 3 {
		repo.domain = nameMatch[1]
		repo.path = nameMatch[2]
	} else {
		repo.domain = ""
		repo.path = matches[1]
	}

	ref := reference{
		namedRepository: repo,
		tag:             matches[2],
	}
	if matches[3] != "" {
		var err error
		ref.digest, err = digest.Parse(matches[3])
		if err != nil {
			return nil, err
		}
	}

	r := getBestReferenceType(ref)
	if r == nil {
		return nil, ErrNameEmpty
	}

	return r, nil
}

// ParseNamed parses s and returns a syntactically valid reference implementing
// the Named interface. The reference must have a name and be in the canonical
// form, otherwise an error is returned.
// If an error was encountered it is returned, along with a nil Reference.
// NOTE: ParseNamed will not handle short digests.
func ParseNamed(s string) (Named, error) {
	named, err := ParseNormalizedNamed(s)
	if err != nil {
		return nil, err
	}
	if named.String() != s {
		return nil, ErrNameNotCanonical
	}
	return named, nil
}

// WithName returns a named object representing the given string. If the input
// is invalid ErrReferenceInvalidFormat will be returned.
func WithName(name string) (Named, error) {
	if len(name) > NameTotalLengthMax {
		return nil, ErrNameTooLong
	}

	match := anchoredNameRegexp.FindStringSubmatch(name)
	if match == nil || len(match) != 3 {
		return nil, ErrReferenceInvalidFormat
	}
	return repository{
		domain: match[1],
		path:   match[2],
	}, nil
}

// WithTag combines the name from "name" and the tag from "tag" to form a
// reference incorporating both the name and the tag.
func WithTag(name Named, tag string) (NamedTagged, error) {
	if !anchoredTagRegexp.MatchString(tag) {
		return nil, ErrTagInvalidFormat
	}
	var repo repository
	if r, ok := name.(namedRepository); ok {
		repo.domain = r.Domain()
		repo.path = r.Path()
	} else {
		repo.path = name.Name()
	}
	if canonical, ok := name.(Canonical); ok {
		return reference{
			namedRepository: repo,
			tag:             tag,
			digest:          canonical.Digest(),
		}, nil
	}
	return taggedReference{
		namedRepository: repo,
		tag:             tag,
	}, nil
}

// WithDigest combines the name from "name" and the digest from "digest" to form
// a reference incorporating both the name and the digest.
func WithDigest(name Named, digest digest.Digest) (Canonical, error) {
	if !anchoredDigestRegexp.MatchString(digest.String()) {
		return nil, ErrDigestInvalidFormat
	}
	var repo repository
	if r, ok := name.(namedRepository); ok {
		repo.domain = r.Domain()
		repo.path = r.Path()
	} else {
		repo.path = name.Name()
	}
	if tagged, ok := name.(Tagged); ok {
		return reference{
			namedRepository: repo,
			tag:             tagged.Tag(),
			digest:          digest,
		}, nil
	}
	return canonicalReference{
		namedRepository: repo,
		digest:          digest,
	}, nil
}

// TrimNamed removes any tag or digest from the named reference.
func TrimNamed(ref Named) Named {
	domain, path := SplitHostname(ref)
	return repository{
		domain: domain,
		path:   path,
	}
}

func getBestReferenceType(ref reference) Reference {
	if ref.Name() == "" {
		// Allow digest only references
		if ref.digest != "" {
			return digestReference(ref.digest)
		}
		return nil
	}
	if ref.tag == "" {
		if ref.digest != "" {
			return canonicalReference{
				namedRepository: ref.namedRepository,
				digest:          ref.digest,
			}
		}
		return ref.namedRepository
	}
	if ref.digest == "" {
		return taggedReference{
			namedRepository: ref.namedRepository,
			tag:             ref.tag,
		}
	}

	return ref
}

type reference struct {
	namedRepository
	tag    string
	digest digest.Digest
}

func (r reference) String() string {
	return r.Name() + ":" + r.tag + "@" + r.digest.String()
}

func (r reference) Tag() string {
	return r.tag
}

func (r reference) Digest() digest.Digest {
	return r.digest
}

type repository struct {
	domain string
	path   string
}

func (r repository) String() string {
	return r.Name()
}

func (r repository) Name() string {
	if r.domain == "" {
		return r.path
	}
	return r.domain + "/" + r.path
}

func (r repository) Domain() string {
	return r.domain
}

func (r repository) Path() string {
	return r.path
}

type digestReference digest.Digest

func (d digestReference) String() string {
	return digest.Digest(d).String()
}

func (d digestReference) Digest() digest.Digest {
	return digest.Digest(d)
}

type taggedReference struct {
	namedRepository
	tag string
}

func (t taggedReference) String() string {
	return t.Name() + ":" + t.tag
}

func (t taggedReference) Tag() string {
	return t.tag
}

type canonicalReference struct {
	namedRepository
	digest digest.Digest
}

func (c canonicalReference) String() string {
	return c.Name() + "@" + c.digest.String()
}

func (c canonicalReference) Digest() digest.Digest {
	return c.digest
}
  07070100000357000081A4000000000000000000000001645E367C00001492000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/distribution/distribution/reference/regexp.go   package reference

import "regexp"

var (
	// alphaNumericRegexp defines the alpha numeric atom, typically a
	// component of names. This only allows lower case characters and digits.
	alphaNumericRegexp = match(`[a-z0-9]+`)

	// separatorRegexp defines the separators allowed to be embedded in name
	// components. This allow one period, one or two underscore and multiple
	// dashes.
	separatorRegexp = match(`(?:[._]|__|[-]*)`)

	// nameComponentRegexp restricts registry path component names to start
	// with at least one letter or number, with following parts able to be
	// separated by one period, one or two underscore and multiple dashes.
	nameComponentRegexp = expression(
		alphaNumericRegexp,
		optional(repeated(separatorRegexp, alphaNumericRegexp)))

	// domainComponentRegexp restricts the registry domain component of a
	// repository name to start with a component as defined by DomainRegexp
	// and followed by an optional port.
	domainComponentRegexp = match(`(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])`)

	// DomainRegexp defines the structure of potential domain components
	// that may be part of image names. This is purposely a subset of what is
	// allowed by DNS to ensure backwards compatibility with Docker image
	// names.
	DomainRegexp = expression(
		domainComponentRegexp,
		optional(repeated(literal(`.`), domainComponentRegexp)),
		optional(literal(`:`), match(`[0-9]+`)))

	// TagRegexp matches valid tag names. From docker/docker:graph/tags.go.
	TagRegexp = match(`[\w][\w.-]{0,127}`)

	// anchoredTagRegexp matches valid tag names, anchored at the start and
	// end of the matched string.
	anchoredTagRegexp = anchored(TagRegexp)

	// DigestRegexp matches valid digests.
	DigestRegexp = match(`[A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*[:][[:xdigit:]]{32,}`)

	// anchoredDigestRegexp matches valid digests, anchored at the start and
	// end of the matched string.
	anchoredDigestRegexp = anchored(DigestRegexp)

	// NameRegexp is the format for the name component of references. The
	// regexp has capturing groups for the domain and name part omitting
	// the separating forward slash from either.
	NameRegexp = expression(
		optional(DomainRegexp, literal(`/`)),
		nameComponentRegexp,
		optional(repeated(literal(`/`), nameComponentRegexp)))

	// anchoredNameRegexp is used to parse a name value, capturing the
	// domain and trailing components.
	anchoredNameRegexp = anchored(
		optional(capture(DomainRegexp), literal(`/`)),
		capture(nameComponentRegexp,
			optional(repeated(literal(`/`), nameComponentRegexp))))

	// ReferenceRegexp is the full supported format of a reference. The regexp
	// is anchored and has capturing groups for name, tag, and digest
	// components.
	ReferenceRegexp = anchored(capture(NameRegexp),
		optional(literal(":"), capture(TagRegexp)),
		optional(literal("@"), capture(DigestRegexp)))

	// IdentifierRegexp is the format for string identifier used as a
	// content addressable identifier using sha256. These identifiers
	// are like digests without the algorithm, since sha256 is used.
	IdentifierRegexp = match(`([a-f0-9]{64})`)

	// ShortIdentifierRegexp is the format used to represent a prefix
	// of an identifier. A prefix may be used to match a sha256 identifier
	// within a list of trusted identifiers.
	ShortIdentifierRegexp = match(`([a-f0-9]{6,64})`)

	// anchoredIdentifierRegexp is used to check or match an
	// identifier value, anchored at start and end of string.
	anchoredIdentifierRegexp = anchored(IdentifierRegexp)

	// anchoredShortIdentifierRegexp is used to check if a value
	// is a possible identifier prefix, anchored at start and end
	// of string.
	anchoredShortIdentifierRegexp = anchored(ShortIdentifierRegexp)
)

// match compiles the string to a regular expression.
var match = regexp.MustCompile

// literal compiles s into a literal regular expression, escaping any regexp
// reserved characters.
func literal(s string) *regexp.Regexp {
	re := match(regexp.QuoteMeta(s))

	if _, complete := re.LiteralPrefix(); !complete {
		panic("must be a literal")
	}

	return re
}

// expression defines a full expression, where each regular expression must
// follow the previous.
func expression(res ...*regexp.Regexp) *regexp.Regexp {
	var s string
	for _, re := range res {
		s += re.String()
	}

	return match(s)
}

// optional wraps the expression in a non-capturing group and makes the
// production optional.
func optional(res ...*regexp.Regexp) *regexp.Regexp {
	return match(group(expression(res...)).String() + `?`)
}

// repeated wraps the regexp in a non-capturing group to get one or more
// matches.
func repeated(res ...*regexp.Regexp) *regexp.Regexp {
	return match(group(expression(res...)).String() + `+`)
}

// group wraps the regexp in a non-capturing group.
func group(res ...*regexp.Regexp) *regexp.Regexp {
	return match(`(?:` + expression(res...).String() + `)`)
}

// capture wraps the expression in a capturing group.
func capture(res ...*regexp.Regexp) *regexp.Regexp {
	return match(`(` + expression(res...).String() + `)`)
}

// anchored anchors the regular expression by adding start and end delimiters.
func anchored(res ...*regexp.Regexp) *regexp.Regexp {
	return match(`^` + expression(res...).String() + `$`)
}
  07070100000358000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/distribution/distribution/uuid  07070100000359000081A4000000000000000000000001645E367C00000C1B000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/distribution/distribution/uuid/uuid.go  // Package uuid provides simple UUID generation. Only version 4 style UUIDs
// can be generated.
//
// Please see http://tools.ietf.org/html/rfc4122 for details on UUIDs.
package uuid

import (
	"crypto/rand"
	"fmt"
	"io"
	"os"
	"syscall"
	"time"
)

const (
	// Bits is the number of bits in a UUID
	Bits = 128

	// Size is the number of bytes in a UUID
	Size = Bits / 8

	format = "%08x-%04x-%04x-%04x-%012x"
)

var (
	// ErrUUIDInvalid indicates a parsed string is not a valid uuid.
	ErrUUIDInvalid = fmt.Errorf("invalid uuid")

	// Loggerf can be used to override the default logging destination. Such
	// log messages in this library should be logged at warning or higher.
	Loggerf = func(format string, args ...interface{}) {}
)

// UUID represents a UUID value. UUIDs can be compared and set to other values
// and accessed by byte.
type UUID [Size]byte

// Generate creates a new, version 4 uuid.
func Generate() (u UUID) {
	const (
		// ensures we backoff for less than 450ms total. Use the following to
		// select new value, in units of 10ms:
		// 	n*(n+1)/2 = d -> n^2 + n - 2d -> n = (sqrt(8d + 1) - 1)/2
		maxretries = 9
		backoff    = time.Millisecond * 10
	)

	var (
		totalBackoff time.Duration
		count        int
		retries      int
	)

	for {
		// This should never block but the read may fail. Because of this,
		// we just try to read the random number generator until we get
		// something. This is a very rare condition but may happen.
		b := time.Duration(retries) * backoff
		time.Sleep(b)
		totalBackoff += b

		n, err := io.ReadFull(rand.Reader, u[count:])
		if err != nil {
			if retryOnError(err) && retries < maxretries {
				count += n
				retries++
				Loggerf("error generating version 4 uuid, retrying: %v", err)
				continue
			}

			// Any other errors represent a system problem. What did someone
			// do to /dev/urandom?
			panic(fmt.Errorf("error reading random number generator, retried for %v: %v", totalBackoff.String(), err))
		}

		break
	}

	u[6] = (u[6] & 0x0f) | 0x40 // set version byte
	u[8] = (u[8] & 0x3f) | 0x80 // set high order byte 0b10{8,9,a,b}

	return u
}

// Parse attempts to extract a uuid from the string or returns an error.
func Parse(s string) (u UUID, err error) {
	if len(s) != 36 {
		return UUID{}, ErrUUIDInvalid
	}

	// create stack addresses for each section of the uuid.
	p := make([][]byte, 5)

	if _, err := fmt.Sscanf(s, format, &p[0], &p[1], &p[2], &p[3], &p[4]); err != nil {
		return u, err
	}

	copy(u[0:4], p[0])
	copy(u[4:6], p[1])
	copy(u[6:8], p[2])
	copy(u[8:10], p[3])
	copy(u[10:16], p[4])

	return
}

func (u UUID) String() string {
	return fmt.Sprintf(format, u[:4], u[4:6], u[6:8], u[8:10], u[10:])
}

// retryOnError tries to detect whether or not retrying would be fruitful.
func retryOnError(err error) bool {
	switch err := err.(type) {
	case *os.PathError:
		return retryOnError(err.Err) // unpack the target error
	case syscall.Errno:
		if err == syscall.EPERM {
			// EPERM represents an entropy pool exhaustion, a condition under
			// which we backoff and retry.
			return true
		}
	}

	return false
}
 0707010000035A000041ED000000000000000000000008645E367C00000000000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/vendor/github.com/docker  0707010000035B000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003100000000elemental-cli-0.3.1/vendor/github.com/docker/cli  0707010000035C000081A4000000000000000000000001645E367C00007F05000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/docker/cli/AUTHORS  # File @generated by scripts/docs/generate-authors.sh. DO NOT EDIT.
# This file lists all contributors to the repository.
# See scripts/docs/generate-authors.sh to make modifications.

Aanand Prasad <aanand.prasad@gmail.com>
Aaron L. Xu <liker.xu@foxmail.com>
Aaron Lehmann <alehmann@netflix.com>
Aaron.L.Xu <likexu@harmonycloud.cn>
Abdur Rehman <abdur_rehman@mentor.com>
Abhinandan Prativadi <abhi@docker.com>
Abin Shahab <ashahab@altiscale.com>
Abreto FU <public@abreto.email>
Ace Tang <aceapril@126.com>
Addam Hardy <addam.hardy@gmail.com>
Adolfo Ochagavía <aochagavia92@gmail.com>
Adrian Plata <adrian.plata@docker.com>
Adrien Duermael <adrien@duermael.com>
Adrien Folie <folie.adrien@gmail.com>
Ahmet Alp Balkan <ahmetb@microsoft.com>
Aidan Feldman <aidan.feldman@gmail.com>
Aidan Hobson Sayers <aidanhs@cantab.net>
AJ Bowen <aj@soulshake.net>
Akhil Mohan <akhil.mohan@mayadata.io>
Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
Akim Demaille <akim.demaille@docker.com>
Alan Thompson <cloojure@gmail.com>
Albert Callarisa <shark234@gmail.com>
Alberto Roura <mail@albertoroura.com>
Albin Kerouanton <albin@akerouanton.name>
Aleksa Sarai <asarai@suse.de>
Aleksander Piotrowski <apiotrowski312@gmail.com>
Alessandro Boch <aboch@tetrationanalytics.com>
Alex Couture-Beil <alex@earthly.dev>
Alex Mavrogiannis <alex.mavrogiannis@docker.com>
Alex Mayer <amayer5125@gmail.com>
Alexander Boyd <alex@opengroove.org>
Alexander Larsson <alexl@redhat.com>
Alexander Morozov <lk4d4math@gmail.com>
Alexander Ryabov <i@sepa.spb.ru>
Alexandre González <agonzalezro@gmail.com>
Alexey Igrychev <alexey.igrychev@flant.com>
Alexis Couvreur <alexiscouvreur.pro@gmail.com>
Alfred Landrum <alfred.landrum@docker.com>
Alicia Lauerman <alicia@eta.im>
Allen Sun <allensun.shl@alibaba-inc.com>
Alvin Deng <alvin.q.deng@utexas.edu>
Amen Belayneh <amenbelayneh@gmail.com>
Amey Shrivastava <72866602+AmeyShrivastava@users.noreply.github.com>
Amir Goldstein <amir73il@aquasec.com>
Amit Krishnan <amit.krishnan@oracle.com>
Amit Shukla <amit.shukla@docker.com>
Amy Lindburg <amy.lindburg@docker.com>
Anca Iordache <anca.iordache@docker.com>
Anda Xu <anda.xu@docker.com>
Andrea Luzzardi <aluzzardi@gmail.com>
Andreas Köhler <andi5.py@gmx.net>
Andres G. Aragoneses <knocte@gmail.com>
Andres Leon Rangel <aleon1220@gmail.com>
Andrew France <andrew@avito.co.uk>
Andrew Hsu <andrewhsu@docker.com>
Andrew Macpherson <hopscotch23@gmail.com>
Andrew McDonnell <bugs@andrewmcdonnell.net>
Andrew Po <absourd.noise@gmail.com>
Andrey Petrov <andrey.petrov@shazow.net>
Andrii Berehuliak <berkusandrew@gmail.com>
André Martins <aanm90@gmail.com>
Andy Goldstein <agoldste@redhat.com>
Andy Rothfusz <github@developersupport.net>
Anil Madhavapeddy <anil@recoil.org>
Ankush Agarwal <ankushagarwal11@gmail.com>
Anne Henmi <anne.henmi@docker.com>
Anton Polonskiy <anton.polonskiy@gmail.com>
Antonio Murdaca <antonio.murdaca@gmail.com>
Antonis Kalipetis <akalipetis@gmail.com>
Anusha Ragunathan <anusha.ragunathan@docker.com>
Ao Li <la9249@163.com>
Arash Deshmeh <adeshmeh@ca.ibm.com>
Arko Dasgupta <arko@tetrate.io>
Arnaud Porterie <icecrime@gmail.com>
Arnaud Rebillout <elboulangero@gmail.com>
Arthur Peka <arthur.peka@outlook.com>
Ashwini Oruganti <ashwini.oruganti@gmail.com>
Azat Khuyiyakhmetov <shadow_uz@mail.ru>
Bardia Keyoumarsi <bkeyouma@ucsc.edu>
Barnaby Gray <barnaby@pickle.me.uk>
Bastiaan Bakker <bbakker@xebia.com>
BastianHofmann <bastianhofmann@me.com>
Ben Bodenmiller <bbodenmiller@gmail.com>
Ben Bonnefoy <frenchben@docker.com>
Ben Creasy <ben@bencreasy.com>
Ben Firshman <ben@firshman.co.uk>
Benjamin Boudreau <boudreau.benjamin@gmail.com>
Benjamin Böhmke <benjamin@boehmke.net>
Benjamin Nater <me@bn4t.me>
Benoit Sigoure <tsunanet@gmail.com>
Bhumika Bayani <bhumikabayani@gmail.com>
Bill Wang <ozbillwang@gmail.com>
Bin Liu <liubin0329@gmail.com>
Bingshen Wang <bingshen.wbs@alibaba-inc.com>
Bishal Das <bishalhnj127@gmail.com>
Boaz Shuster <ripcurld.github@gmail.com>
Bogdan Anton <contact@bogdananton.ro>
Boris Pruessmann <boris@pruessmann.org>
Brad Baker <brad@brad.fi>
Bradley Cicenas <bradley.cicenas@gmail.com>
Brandon Mitchell <git@bmitch.net>
Brandon Philips <brandon.philips@coreos.com>
Brent Salisbury <brent.salisbury@docker.com>
Bret Fisher <bret@bretfisher.com>
Brian (bex) Exelbierd <bexelbie@redhat.com>
Brian Goff <cpuguy83@gmail.com>
Brian Wieder <brian@4wieders.com>
Bruno Sousa <bruno.sousa@docker.com>
Bryan Bess <squarejaw@bsbess.com>
Bryan Boreham <bjboreham@gmail.com>
Bryan Murphy <bmurphy1976@gmail.com>
bryfry <bryon.fryer@gmail.com>
Cameron Spear <cameronspear@gmail.com>
Cao Weiwei <cao.weiwei30@zte.com.cn>
Carlo Mion <mion00@gmail.com>
Carlos Alexandro Becker <caarlos0@gmail.com>
Carlos de Paula <me@carlosedp.com>
Ce Gao <ce.gao@outlook.com>
Cedric Davies <cedricda@microsoft.com>
Cezar Sa Espinola <cezarsa@gmail.com>
Chad Faragher <wyckster@hotmail.com>
Chao Wang <wangchao.fnst@cn.fujitsu.com>
Charles Chan <charleswhchan@users.noreply.github.com>
Charles Law <claw@conduce.com>
Charles Smith <charles.smith@docker.com>
Charlie Drage <charlie@charliedrage.com>
Charlotte Mach <charlotte.mach@fs.lmu.de>
ChaYoung You <yousbe@gmail.com>
Chee Hau Lim <cheehau.lim@mobimeo.com>
Chen Chuanliang <chen.chuanliang@zte.com.cn>
Chen Hanxiao <chenhanxiao@cn.fujitsu.com>
Chen Mingjie <chenmingjie0828@163.com>
Chen Qiu <cheney-90@hotmail.com>
Chris Couzens <ccouzens@gmail.com>
Chris Gavin <chris@chrisgavin.me>
Chris Gibson <chris@chrisg.io>
Chris McKinnel <chrismckinnel@gmail.com>
Chris Snow <chsnow123@gmail.com>
Chris Vermilion <christopher.vermilion@gmail.com>
Chris Weyl <cweyl@alumni.drew.edu>
Christian Persson <saser@live.se>
Christian Stefanescu <st.chris@gmail.com>
Christophe Robin <crobin@nekoo.com>
Christophe Vidal <kriss@krizalys.com>
Christopher Biscardi <biscarch@sketcht.com>
Christopher Crone <christopher.crone@docker.com>
Christopher Jones <tophj@linux.vnet.ibm.com>
Christopher Svensson <stoffus@stoffus.com>
Christy Norman <christy@linux.vnet.ibm.com>
Chun Chen <ramichen@tencent.com>
Clinton Kitson <clintonskitson@gmail.com>
Coenraad Loubser <coenraad@wish.org.za>
Colin Hebert <hebert.colin@gmail.com>
Collin Guarino <collin.guarino@gmail.com>
Colm Hally <colmhally@gmail.com>
Comical Derskeal <27731088+derskeal@users.noreply.github.com>
Conner Crosby <conner@cavcrosby.tech>
Corey Farrell <git@cfware.com>
Corey Quon <corey.quon@docker.com>
Cory Bennet <cbennett@netflix.com>
Craig Wilhite <crwilhit@microsoft.com>
Cristian Staretu <cristian.staretu@gmail.com>
Daehyeok Mun <daehyeok@gmail.com>
Dafydd Crosby <dtcrsby@gmail.com>
Daisuke Ito <itodaisuke00@gmail.com>
dalanlan <dalanlan925@gmail.com>
Damien Nadé <github@livna.org>
Dan Cotora <dan@bluevision.ro>
Daniel Artine <daniel.artine@ufrj.br>
Daniel Cassidy <mail@danielcassidy.me.uk>
Daniel Dao <dqminh@cloudflare.com>
Daniel Farrell <dfarrell@redhat.com>
Daniel Gasienica <daniel@gasienica.ch>
Daniel Goosen <daniel.goosen@surveysampling.com>
Daniel Helfand <dhelfand@redhat.com>
Daniel Hiltgen <daniel.hiltgen@docker.com>
Daniel J Walsh <dwalsh@redhat.com>
Daniel Nephin <dnephin@docker.com>
Daniel Norberg <dano@spotify.com>
Daniel Watkins <daniel@daniel-watkins.co.uk>
Daniel Zhang <jmzwcn@gmail.com>
Daniil Nikolenko <qoo2p5@gmail.com>
Danny Berger <dpb587@gmail.com>
Darren Shepherd <darren.s.shepherd@gmail.com>
Darren Stahl <darst@microsoft.com>
Dattatraya Kumbhar <dattatraya.kumbhar@gslab.com>
Dave Goodchild <buddhamagnet@gmail.com>
Dave Henderson <dhenderson@gmail.com>
Dave Tucker <dt@docker.com>
David Alvarez <david.alvarez@flyeralarm.com>
David Beitey <david@davidjb.com>
David Calavera <david.calavera@gmail.com>
David Cramer <davcrame@cisco.com>
David Dooling <dooling@gmail.com>
David Gageot <david@gageot.net>
David Karlsson <david.karlsson@docker.com>
David Lechner <david@lechnology.com>
David Scott <dave@recoil.org>
David Sheets <dsheets@docker.com>
David Williamson <david.williamson@docker.com>
David Xia <dxia@spotify.com>
David Young <yangboh@cn.ibm.com>
Deng Guangxing <dengguangxing@huawei.com>
Denis Defreyne <denis@soundcloud.com>
Denis Gladkikh <denis@gladkikh.email>
Denis Ollier <larchunix@users.noreply.github.com>
Dennis Docter <dennis@d23.nl>
Derek McGowan <derek@mcg.dev>
Des Preston <despreston@gmail.com>
Deshi Xiao <dxiao@redhat.com>
Dharmit Shah <shahdharmit@gmail.com>
Dhawal Yogesh Bhanushali <dbhanushali@vmware.com>
Dieter Reuter <dieter.reuter@me.com>
Dima Stopel <dima@twistlock.com>
Dimitry Andric <d.andric@activevideo.com>
Ding Fei <dingfei@stars.org.cn>
Diogo Monica <diogo@docker.com>
Djordje Lukic <djordje.lukic@docker.com>
Dmitriy Fishman <fishman.code@gmail.com>
Dmitry Gusev <dmitry.gusev@gmail.com>
Dmitry Smirnov <onlyjob@member.fsf.org>
Dmitry V. Krivenok <krivenok.dmitry@gmail.com>
Dominik Braun <dominik.braun@nbsp.de>
Don Kjer <don.kjer@gmail.com>
Dong Chen <dongluo.chen@docker.com>
DongGeon Lee <secmatth1996@gmail.com>
Doug Davis <dug@us.ibm.com>
Drew Erny <derny@mirantis.com>
Ed Costello <epc@epcostello.com>
Elango Sivanandam <elango.siva@docker.com>
Eli Uriegas <eli.uriegas@docker.com>
Eli Uriegas <seemethere101@gmail.com>
Elias Faxö <elias.faxo@tre.se>
Elliot Luo <956941328@qq.com>
Eric Curtin <ericcurtin17@gmail.com>
Eric Engestrom <eric@engestrom.ch>
Eric G. Noriega <enoriega@vizuri.com>
Eric Rosenberg <ehaydenr@gmail.com>
Eric Sage <eric.david.sage@gmail.com>
Eric-Olivier Lamey <eo@lamey.me>
Erica Windisch <erica@windisch.us>
Erik Hollensbe <github@hollensbe.org>
Erik Humphrey <erik.humphrey@carleton.ca>
Erik St. Martin <alakriti@gmail.com>
Essam A. Hassan <es.hassan187@gmail.com>
Ethan Haynes <ethanhaynes@alumni.harvard.edu>
Euan Kemp <euank@euank.com>
Eugene Yakubovich <eugene.yakubovich@coreos.com>
Evan Allrich <evan@unguku.com>
Evan Hazlett <ejhazlett@gmail.com>
Evan Krall <krall@yelp.com>
Evelyn Xu <evelynhsu21@gmail.com>
Everett Toews <everett.toews@rackspace.com>
Fabio Falci <fabiofalci@gmail.com>
Fabrizio Soppelsa <fsoppelsa@mirantis.com>
Felix Geyer <debfx@fobos.de>
Felix Hupfeld <felix@quobyte.com>
Felix Rabe <felix@rabe.io>
fezzik1620 <fezzik1620@users.noreply.github.com>
Filip Jareš <filipjares@gmail.com>
Flavio Crisciani <flavio.crisciani@docker.com>
Florian Klein <florian.klein@free.fr>
Forest Johnson <fjohnson@peoplenetonline.com>
Foysal Iqbal <foysal.iqbal.fb@gmail.com>
François Scala <francois.scala@swiss-as.com>
Fred Lifton <fred.lifton@docker.com>
Frederic Hemberger <mail@frederic-hemberger.de>
Frederick F. Kautz IV <fkautz@redhat.com>
Frederik Nordahl Jul Sabroe <frederikns@gmail.com>
Frieder Bluemle <frieder.bluemle@gmail.com>
Gabriel Gore <gabgore@cisco.com>
Gabriel Nicolas Avellaneda <avellaneda.gabriel@gmail.com>
Gaetan de Villele <gdevillele@gmail.com>
Gang Qiao <qiaohai8866@gmail.com>
Gary Schaetz <gary@schaetzkc.com>
Genki Takiuchi <genki@s21g.com>
George MacRorie <gmacr31@gmail.com>
George Xie <georgexsh@gmail.com>
Gianluca Borello <g.borello@gmail.com>
Gildas Cuisinier <gildas.cuisinier@gcuisinier.net>
Gio d'Amelio <giodamelio@gmail.com>
Gleb Stsenov <gleb.stsenov@gmail.com>
Goksu Toprak <goksu.toprak@docker.com>
Gou Rao <gou@portworx.com>
Govind Rai <raigovind93@gmail.com>
Grant Reaber <grant.reaber@gmail.com>
Greg Pflaum <gpflaum@users.noreply.github.com>
Gsealy <jiaojingwei1001@hotmail.com>
Guilhem Lettron <guilhem+github@lettron.fr>
Guillaume J. Charmes <guillaume.charmes@docker.com>
Guillaume Le Floch <glfloch@gmail.com>
Guillaume Tardif <guillaume.tardif@gmail.com>
gwx296173 <gaojing3@huawei.com>
Günther Jungbluth <gunther@gameslabs.net>
Hakan Özler <hakan.ozler@kodcu.com>
Hao Zhang <21521210@zju.edu.cn>
Harald Albers <github@albersweb.de>
Harold Cooper <hrldcpr@gmail.com>
Harry Zhang <harryz@hyper.sh>
He Simei <hesimei@zju.edu.cn>
Hector S <hfsam88@gmail.com>
Helen Xie <chenjg@harmonycloud.cn>
Henning Sprang <henning.sprang@gmail.com>
Henry N <henrynmail-github@yahoo.de>
Hernan Garcia <hernandanielg@gmail.com>
Hongbin Lu <hongbin034@gmail.com>
Hu Keping <hukeping@huawei.com>
Huayi Zhang <irachex@gmail.com>
Hugo Gabriel Eyherabide <hugogabriel.eyherabide@gmail.com>
huqun <huqun@zju.edu.cn>
Huu Nguyen <huu@prismskylabs.com>
Hyzhou Zhy <hyzhou.zhy@alibaba-inc.com>
Iain Samuel McLean Elder <iain@isme.es>
Ian Campbell <ian.campbell@docker.com>
Ian Philpot <ian.philpot@microsoft.com>
Ignacio Capurro <icapurrofagian@gmail.com>
Ilya Dmitrichenko <errordeveloper@gmail.com>
Ilya Khlopotov <ilya.khlopotov@gmail.com>
Ilya Sotkov <ilya@sotkov.com>
Ioan Eugen Stan <eu@ieugen.ro>
Isabel Jimenez <contact.isabeljimenez@gmail.com>
Ivan Grcic <igrcic@gmail.com>
Ivan Grund <ivan.grund@gmail.com>
Ivan Markin <sw@nogoegst.net>
Jacob Atzen <jacob@jacobatzen.dk>
Jacob Tomlinson <jacob@tom.linson.uk>
Jaivish Kothari <janonymous.codevulture@gmail.com>
Jake Lambert <jake.lambert@volusion.com>
Jake Sanders <jsand@google.com>
James Nesbitt <james.nesbitt@wunderkraut.com>
James Turnbull <james@lovedthanlost.net>
Jamie Hannaford <jamie@limetree.org>
Jan Koprowski <jan.koprowski@gmail.com>
Jan Pazdziora <jpazdziora@redhat.com>
Jan-Jaap Driessen <janjaapdriessen@gmail.com>
Jana Radhakrishnan <mrjana@docker.com>
Jared Hocutt <jaredh@netapp.com>
Jasmine Hegman <jasmine@jhegman.com>
Jason Hall <jason@chainguard.dev>
Jason Heiss <jheiss@aput.net>
Jason Plum <jplum@devonit.com>
Jay Kamat <github@jgkamat.33mail.com>
Jean Lecordier <jeanlecordier@hotmail.fr>
Jean Rouge <rougej+github@gmail.com>
Jean-Christophe Sirot <jean-christophe.sirot@docker.com>
Jean-Pierre Huynh <jean-pierre.huynh@ounet.fr>
Jeff Lindsay <progrium@gmail.com>
Jeff Nickoloff <jeff.nickoloff@gmail.com>
Jeff Silberman <jsilberm@gmail.com>
Jennings Zhang <jenni_zh@protonmail.com>
Jeremy Chambers <jeremy@thehipbot.com>
Jeremy Unruh <jeremybunruh@gmail.com>
Jeremy Yallop <yallop@docker.com>
Jeroen Franse <jeroenfranse@gmail.com>
Jesse Adametz <jesseadametz@gmail.com>
Jessica Frazelle <jess@oxide.computer>
Jezeniel Zapanta <jpzapanta22@gmail.com>
Jian Zhang <zhangjian.fnst@cn.fujitsu.com>
Jie Luo <luo612@zju.edu.cn>
Jilles Oldenbeuving <ojilles@gmail.com>
Jim Galasyn <jim.galasyn@docker.com>
Jim Lin <b04705003@ntu.edu.tw>
Jimmy Leger <jimmy.leger@gmail.com>
Jimmy Song <rootsongjc@gmail.com>
jimmyxian <jimmyxian2004@yahoo.com.cn>
Jintao Zhang <zhangjintao9020@gmail.com>
Joao Fernandes <joao.fernandes@docker.com>
Joe Abbey <joe.abbey@gmail.com>
Joe Doliner <jdoliner@pachyderm.io>
Joe Gordon <joe.gordon0@gmail.com>
Joel Handwell <joelhandwell@gmail.com>
Joey Geiger <jgeiger@gmail.com>
Joffrey F <joffrey@docker.com>
Johan Euphrosine <proppy@google.com>
Johannes 'fish' Ziemke <github@freigeist.org>
John Feminella <jxf@jxf.me>
John Harris <john@johnharris.io>
John Howard <github@lowenna.com>
John Howard <howardjohn@google.com>
John Laswell <john.n.laswell@gmail.com>
John Maguire <jmaguire@duosecurity.com>
John Mulhausen <john@docker.com>
John Starks <jostarks@microsoft.com>
John Stephens <johnstep@docker.com>
John Tims <john.k.tims@gmail.com>
John V. Martinez <jvmatl@gmail.com>
John Willis <john.willis@docker.com>
Jon Johnson <jonjohnson@google.com>
Jon Zeolla <zeolla@gmail.com>
Jonatas Baldin <jonatas.baldin@gmail.com>
Jonathan Boulle <jonathanboulle@gmail.com>
Jonathan Lee <jonjohn1232009@gmail.com>
Jonathan Lomas <jonathan@floatinglomas.ca>
Jonathan McCrohan <jmccrohan@gmail.com>
Jonathan Warriss-Simmons <misterws@diogenes.ws>
Jonh Wendell <jonh.wendell@redhat.com>
Jordan Jennings <jjn2009@gmail.com>
Jorge Vallecillo <jorgevallecilloc@gmail.com>
Jose J. Escobar <53836904+jescobar-docker@users.noreply.github.com>
Joseph Kern <jkern@semafour.net>
Josh Bodah <jb3689@yahoo.com>
Josh Chorlton <jchorlton@gmail.com>
Josh Hawn <josh.hawn@docker.com>
Josh Horwitz <horwitz@addthis.com>
Josh Soref <jsoref@gmail.com>
Julien Barbier <write0@gmail.com>
Julien Kassar <github@kassisol.com>
Julien Maitrehenry <julien.maitrehenry@me.com>
Justas Brazauskas <brazauskasjustas@gmail.com>
Justin Cormack <justin.cormack@docker.com>
Justin Simonelis <justin.p.simonelis@gmail.com>
Justyn Temme <justyntemme@gmail.com>
Jyrki Puttonen <jyrkiput@gmail.com>
Jérémie Drouet <jeremie.drouet@gmail.com>
Jérôme Petazzoni <jerome.petazzoni@docker.com>
Jörg Thalheim <joerg@higgsboson.tk>
Kai Blin <kai@samba.org>
Kai Qiang Wu (Kennan) <wkq5325@gmail.com>
Kara Alexandra <kalexandra@us.ibm.com>
Kareem Khazem <karkhaz@karkhaz.com>
Karthik Nayak <Karthik.188@gmail.com>
Kat Samperi <kat.samperi@gmail.com>
Kathryn Spiers <kathryn@spiers.me>
Katie McLaughlin <katie@glasnt.com>
Ke Xu <leonhartx.k@gmail.com>
Kei Ohmura <ohmura.kei@gmail.com>
Keith Hudgins <greenman@greenman.org>
Kelton Bassingthwaite <KeltonBassingthwaite@gmail.com>
Ken Cochrane <kencochrane@gmail.com>
Ken ICHIKAWA <ichikawa.ken@jp.fujitsu.com>
Kenfe-Mickaël Laventure <mickael.laventure@gmail.com>
Kevin Alvarez <crazy-max@users.noreply.github.com>
Kevin Burke <kev@inburke.com>
Kevin Feyrer <kevin.feyrer@btinternet.com>
Kevin Kern <kaiwentan@harmonycloud.cn>
Kevin Kirsche <Kev.Kirsche+GitHub@gmail.com>
Kevin Meredith <kevin.m.meredith@gmail.com>
Kevin Richardson <kevin@kevinrichardson.co>
Kevin Woblick <mail@kovah.de>
khaled souf <khaled.souf@gmail.com>
Kim Eik <kim@heldig.org>
Kir Kolyshkin <kolyshkin@gmail.com>
Kotaro Yoshimatsu <kotaro.yoshimatsu@gmail.com>
Krasi Georgiev <krasi@vip-consult.solutions>
Kris-Mikael Krister <krismikael@protonmail.com>
Kun Zhang <zkazure@gmail.com>
Kunal Kushwaha <kushwaha_kunal_v7@lab.ntt.co.jp>
Kyle Mitofsky <Kylemit@gmail.com>
Lachlan Cooper <lachlancooper@gmail.com>
Lai Jiangshan <jiangshanlai@gmail.com>
Lars Kellogg-Stedman <lars@redhat.com>
Laura Frank <ljfrank@gmail.com>
Laurent Erignoux <lerignoux@gmail.com>
Lee Gaines <eightlimbed@gmail.com>
Lei Jitang <leijitang@huawei.com>
Lennie <github@consolejunkie.net>
Leo Gallucci <elgalu3@gmail.com>
Leonid Skorospelov <leosko94@gmail.com>
Lewis Daly <lewisdaly@me.com>
Li Yi <denverdino@gmail.com>
Li Yi <weiyuan.yl@alibaba-inc.com>
Liang-Chi Hsieh <viirya@gmail.com>
Lifubang <lifubang@acmcoder.com>
Lihua Tang <lhtang@alauda.io>
Lily Guo <lily.guo@docker.com>
Lin Lu <doraalin@163.com>
Linus Heckemann <lheckemann@twig-world.com>
Liping Xue <lipingxue@gmail.com>
Liron Levin <liron@twistlock.com>
liwenqi <vikilwq@zju.edu.cn>
lixiaobing10051267 <li.xiaobing1@zte.com.cn>
Lloyd Dewolf <foolswisdom@gmail.com>
Lorenzo Fontana <lo@linux.com>
Louis Opter <kalessin@kalessin.fr>
Luca Favatella <luca.favatella@erlang-solutions.com>
Luca Marturana <lucamarturana@gmail.com>
Lucas Chan <lucas-github@lucaschan.com>
Luka Hartwig <mail@lukahartwig.de>
Lukas Heeren <lukas-heeren@hotmail.com>
Lukasz Zajaczkowski <Lukasz.Zajaczkowski@ts.fujitsu.com>
Lydell Manganti <LydellManganti@users.noreply.github.com>
Lénaïc Huard <lhuard@amadeus.com>
Ma Shimiao <mashimiao.fnst@cn.fujitsu.com>
Mabin <bin.ma@huawei.com>
Maciej Kalisz <maciej.d.kalisz@gmail.com>
Madhav Puri <madhav.puri@gmail.com>
Madhu Venugopal <madhu@socketplane.io>
Madhur Batra <madhurbatra097@gmail.com>
Malte Janduda <mail@janduda.net>
Manjunath A Kumatagi <mkumatag@in.ibm.com>
Mansi Nahar <mmn4185@rit.edu>
mapk0y <mapk0y@gmail.com>
Marc Bihlmaier <marc.bihlmaier@reddoxx.com>
Marc Cornellà <hello@mcornella.com>
Marco Mariani <marco.mariani@alterway.fr>
Marco Vedovati <mvedovati@suse.com>
Marcus Martins <marcus@docker.com>
Marianna Tessel <mtesselh@gmail.com>
Marius Ileana <marius.ileana@gmail.com>
Marius Sturm <marius@graylog.com>
Mark Oates <fl0yd@me.com>
Marsh Macy <marsma@microsoft.com>
Martin Mosegaard Amdisen <martin.amdisen@praqma.com>
Mary Anthony <mary.anthony@docker.com>
Mason Fish <mason.fish@docker.com>
Mason Malone <mason.malone@gmail.com>
Mateusz Major <apkd@users.noreply.github.com>
Mathieu Champlon <mathieu.champlon@docker.com>
Mathieu Rollet <matletix@gmail.com>
Matt Gucci <matt9ucci@gmail.com>
Matt Robenolt <matt@ydekproductions.com>
Matteo Orefice <matteo.orefice@bites4bits.software>
Matthew Heon <mheon@redhat.com>
Matthieu Hauglustaine <matt.hauglustaine@gmail.com>
Mauro Porras P <mauroporrasp@gmail.com>
Max Shytikov <mshytikov@gmail.com>
Maxime Petazzoni <max@signalfuse.com>
Maximillian Fan Xavier <maximillianfx@gmail.com>
Mei ChunTao <mei.chuntao@zte.com.cn>
Metal <2466052+tedhexaflow@users.noreply.github.com>
Micah Zoltu <micah@newrelic.com>
Michael A. Smith <michael@smith-li.com>
Michael Bridgen <mikeb@squaremobius.net>
Michael Crosby <crosbymichael@gmail.com>
Michael Friis <friism@gmail.com>
Michael Irwin <mikesir87@gmail.com>
Michael Käufl <docker@c.michael-kaeufl.de>
Michael Prokop <github@michael-prokop.at>
Michael Scharf <github@scharf.gr>
Michael Spetsiotis <michael_spets@hotmail.com>
Michael Steinert <mike.steinert@gmail.com>
Michael West <mwest@mdsol.com>
Michal Minář <miminar@redhat.com>
Michał Czeraszkiewicz <czerasz@gmail.com>
Miguel Angel Alvarez Cabrerizo <doncicuto@gmail.com>
Mihai Borobocea <MihaiBorob@gmail.com>
Mihuleacc Sergiu <mihuleac.sergiu@gmail.com>
Mike Brown <brownwm@us.ibm.com>
Mike Casas <mkcsas0@gmail.com>
Mike Dalton <mikedalton@github.com>
Mike Danese <mikedanese@google.com>
Mike Dillon <mike@embody.org>
Mike Goelzer <mike.goelzer@docker.com>
Mike MacCana <mike.maccana@gmail.com>
mikelinjie <294893458@qq.com>
Mikhail Vasin <vasin@cloud-tv.ru>
Milind Chawre <milindchawre@gmail.com>
Mindaugas Rukas <momomg@gmail.com>
Miroslav Gula <miroslav.gula@naytrolabs.com>
Misty Stanley-Jones <misty@docker.com>
Mohammad Banikazemi <mb@us.ibm.com>
Mohammed Aaqib Ansari <maaquib@gmail.com>
Mohini Anne Dsouza <mohini3917@gmail.com>
Moorthy RS <rsmoorthy@gmail.com>
Morgan Bauer <mbauer@us.ibm.com>
Morten Hekkvang <morten.hekkvang@sbab.se>
Morten Linderud <morten@linderud.pw>
Moysés Borges <moysesb@gmail.com>
Mozi <29089388+pzhlkj6612@users.noreply.github.com>
Mrunal Patel <mrunalp@gmail.com>
muicoder <muicoder@gmail.com>
Murukesh Mohanan <murukesh.mohanan@gmail.com>
Muthukumar R <muthur@gmail.com>
Máximo Cuadros <mcuadros@gmail.com>
Mårten Cassel <marten.cassel@gmail.com>
Nace Oroz <orkica@gmail.com>
Nahum Shalman <nshalman@omniti.com>
Nalin Dahyabhai <nalin@redhat.com>
Nao YONASHIRO <owan.orisano@gmail.com>
Nassim 'Nass' Eddequiouaq <eddequiouaq.nassim@gmail.com>
Natalie Parker <nparker@omnifone.com>
Nate Brennand <nate.brennand@clever.com>
Nathan Hsieh <hsieh.nathan@gmail.com>
Nathan LeClaire <nathan.leclaire@docker.com>
Nathan McCauley <nathan.mccauley@docker.com>
Neil Peterson <neilpeterson@outlook.com>
Nick Adcock <nick.adcock@docker.com>
Nick Santos <nick.santos@docker.com>
Nico Stapelbroek <nstapelbroek@gmail.com>
Nicola Kabar <nicolaka@gmail.com>
Nicolas Borboën <ponsfrilus@gmail.com>
Nicolas De Loof <nicolas.deloof@gmail.com>
Nikhil Chawla <chawlanikhil24@gmail.com>
Nikolas Garofil <nikolas.garofil@uantwerpen.be>
Nikolay Milovanov <nmil@itransformers.net>
Nir Soffer <nsoffer@redhat.com>
Nishant Totla <nishanttotla@gmail.com>
NIWA Hideyuki <niwa.niwa@nifty.ne.jp>
Noah Treuhaft <noah.treuhaft@docker.com>
O.S. Tezer <ostezer@gmail.com>
Odin Ugedal <odin@ugedal.com>
ohmystack <jun.jiang02@ele.me>
OKA Naoya <git@okanaoya.com>
Oliver Pomeroy <oppomeroy@gmail.com>
Olle Jonsson <olle.jonsson@gmail.com>
Olli Janatuinen <olli.janatuinen@gmail.com>
Oscar Wieman <oscrx@icloud.com>
Otto Kekäläinen <otto@seravo.fi>
Ovidio Mallo <ovidio.mallo@gmail.com>
Pascal Borreli <pascal@borreli.com>
Patrick Böänziger <patrick.baenziger@bsi-software.com>
Patrick Hemmer <patrick.hemmer@gmail.com>
Patrick Lang <plang@microsoft.com>
Paul <paul9869@gmail.com>
Paul Kehrer <paul.l.kehrer@gmail.com>
Paul Lietar <paul@lietar.net>
Paul Mulders <justinkb@gmail.com>
Paul Weaver <pauweave@cisco.com>
Pavel Pospisil <pospispa@gmail.com>
Paweł Gronowski <pawel.gronowski@docker.com>
Paweł Pokrywka <pepawel@users.noreply.github.com>
Paweł Szczekutowicz <pszczekutowicz@gmail.com>
Peeyush Gupta <gpeeyush@linux.vnet.ibm.com>
Per Lundberg <per.lundberg@ecraft.com>
Peter Dave Hello <hsu@peterdavehello.org>
Peter Edge <peter.edge@gmail.com>
Peter Hsu <shhsu@microsoft.com>
Peter Jaffe <pjaffe@nevo.com>
Peter Kehl <peter.kehl@gmail.com>
Peter Nagy <xificurC@gmail.com>
Peter Salvatore <peter@psftw.com>
Peter Waller <p@pwaller.net>
Phil Estes <estesp@gmail.com>
Philip Alexander Etling <paetling@gmail.com>
Philipp Gillé <philipp.gille@gmail.com>
Philipp Schmied <pschmied@schutzwerk.com>
Phong Tran <tran.pho@northeastern.edu>
pidster <pid@pidster.com>
Pieter E Smit <diepes@github.com>
pixelistik <pixelistik@users.noreply.github.com>
Pratik Karki <prertik@outlook.com>
Prayag Verma <prayag.verma@gmail.com>
Preston Cowley <preston.cowley@sony.com>
Pure White <daniel48@126.com>
Qiang Huang <h.huangqiang@huawei.com>
Qinglan Peng <qinglanpeng@zju.edu.cn>
qudongfang <qudongfang@gmail.com>
Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>
Rahul Kadyan <hi@znck.me>
Rahul Zoldyck <rahulzoldyck@gmail.com>
Ravi Shekhar Jethani <rsjethani@gmail.com>
Ray Tsang <rayt@google.com>
Reficul <xuzhenglun@gmail.com>
Remy Suen <remy.suen@gmail.com>
Renaud Gaubert <rgaubert@nvidia.com>
Ricardo N Feliciano <FelicianoTech@gmail.com>
Rich Moyse <rich@moyse.us>
Richard Chen Zheng <58443436+rchenzheng@users.noreply.github.com>
Richard Mathie <richard.mathie@amey.co.uk>
Richard Scothern <richard.scothern@gmail.com>
Rick Wieman <git@rickw.nl>
Ritesh H Shukla <sritesh@vmware.com>
Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Rob Gulewich <rgulewich@netflix.com>
Robert Wallis <smilingrob@gmail.com>
Robin Naundorf <r.naundorf@fh-muenster.de>
Robin Speekenbrink <robin@kingsquare.nl>
Roch Feuillade <roch.feuillade@pandobac.com>
Rodolfo Ortiz <rodolfo.ortiz@definityfirst.com>
Rogelio Canedo <rcanedo@mappy.priv>
Rohan Verma <hello@rohanverma.net>
Roland Kammerer <roland.kammerer@linbit.com>
Roman Dudin <katrmr@gmail.com>
Rory Hunter <roryhunter2@gmail.com>
Ross Boucher <rboucher@gmail.com>
Rubens Figueiredo <r.figueiredo.52@gmail.com>
Rui Cao <ruicao@alauda.io>
Ryan Belgrave <rmb1993@gmail.com>
Ryan Detzel <ryan.detzel@gmail.com>
Ryan Stelly <ryan.stelly@live.com>
Ryan Wilson-Perkin <ryanwilsonperkin@gmail.com>
Ryan Zhang <ryan.zhang@docker.com>
Sainath Grandhi <sainath.grandhi@intel.com>
Sakeven Jiang <jc5930@sina.cn>
Sally O'Malley <somalley@redhat.com>
Sam Neirinck <sam@samneirinck.com>
Sam Thibault <sam.thibault@docker.com>
Samarth Shah <samashah@microsoft.com>
Sambuddha Basu <sambuddhabasu1@gmail.com>
Sami Tabet <salph.tabet@gmail.com>
Samuel Cochran <sj26@sj26.com>
Samuel Karp <skarp@amazon.com>
Sandro Jäckel <sandro.jaeckel@gmail.com>
Santhosh Manohar <santhosh@docker.com>
Sargun Dhillon <sargun@netflix.com>
Saswat Bhattacharya <sas.saswat@gmail.com>
Scott Brenner <scott@scottbrenner.me>
Scott Collier <emailscottcollier@gmail.com>
Sean Christopherson <sean.j.christopherson@intel.com>
Sean Rodman <srodman7689@gmail.com>
Sebastiaan van Stijn <github@gone.nl>
Sergey Tryuber <Sergeant007@users.noreply.github.com>
Serhat Gülçiçek <serhat25@gmail.com>
Sevki Hasirci <s@sevki.org>
Shaun Kaasten <shaunk@gmail.com>
Sheng Yang <sheng@yasker.org>
Shijiang Wei <mountkin@gmail.com>
Shishir Mahajan <shishir.mahajan@redhat.com>
Shoubhik Bose <sbose78@gmail.com>
Shukui Yang <yangshukui@huawei.com>
Sian Lerk Lau <kiawin@gmail.com>
Sidhartha Mani <sidharthamn@gmail.com>
sidharthamani <sid@rancher.com>
Silvin Lubecki <silvin.lubecki@docker.com>
Simei He <hesimei@zju.edu.cn>
Simon Ferquel <simon.ferquel@docker.com>
Simon Heimberg <simon.heimberg@heimberg-ea.ch>
Sindhu S <sindhus@live.in>
Slava Semushin <semushin@redhat.com>
Solomon Hykes <solomon@docker.com>
Song Gao <song@gao.io>
Spencer Brown <spencer@spencerbrown.org>
Spring Lee <xi.shuai@outlook.com>
squeegels <lmscrewy@gmail.com>
Srini Brahmaroutu <srbrahma@us.ibm.com>
Stefan S. <tronicum@user.github.com>
Stefan Scherer <stefan.scherer@docker.com>
Stefan Weil <sw@weilnetz.de>
Stephane Jeandeaux <stephane.jeandeaux@gmail.com>
Stephen Day <stevvooe@gmail.com>
Stephen Rust <srust@blockbridge.com>
Steve Durrheimer <s.durrheimer@gmail.com>
Steve Richards <steve.richards@docker.com>
Steven Burgess <steven.a.burgess@hotmail.com>
Stoica-Marcu Floris-Andrei <floris.sm@gmail.com>
Subhajit Ghosh <isubuz.g@gmail.com>
Sun Jianbo <wonderflow.sun@gmail.com>
Sune Keller <absukl@almbrand.dk>
Sungwon Han <sungwon.han@navercorp.com>
Sunny Gogoi <indiasuny000@gmail.com>
Sven Dowideit <SvenDowideit@home.org.au>
Sylvain Baubeau <sbaubeau@redhat.com>
Sébastien HOUZÉ <cto@verylastroom.com>
T K Sourabh <sourabhtk37@gmail.com>
TAGOMORI Satoshi <tagomoris@gmail.com>
taiji-tech <csuhqg@foxmail.com>
Takeshi Koenuma <t.koenuma2@gmail.com>
Takuya Noguchi <takninnovationresearch@gmail.com>
Taylor Jones <monitorjbl@gmail.com>
Teiva Harsanyi <t.harsanyi@thebeat.co>
Tejaswini Duggaraju <naduggar@microsoft.com>
Tengfei Wang <tfwang@alauda.io>
Teppei Fukuda <knqyf263@gmail.com>
Thatcher Peskens <thatcher@docker.com>
Thibault Coupin <thibault.coupin@gmail.com>
Thomas Gazagnaire <thomas@gazagnaire.org>
Thomas Krzero <thomas.kovatchitch@gmail.com>
Thomas Leonard <thomas.leonard@docker.com>
Thomas Léveil <thomasleveil@gmail.com>
Thomas Riccardi <thomas@deepomatic.com>
Thomas Swift <tgs242@gmail.com>
Tianon Gravi <admwiggin@gmail.com>
Tianyi Wang <capkurmagati@gmail.com>
Tibor Vass <teabee89@gmail.com>
Tim Dettrick <t.dettrick@uq.edu.au>
Tim Hockin <thockin@google.com>
Tim Sampson <tim@sampson.fi>
Tim Smith <timbot@google.com>
Tim Waugh <twaugh@redhat.com>
Tim Wraight <tim.wraight@tangentlabs.co.uk>
timfeirg <kkcocogogo@gmail.com>
Timothy Hobbs <timothyhobbs@seznam.cz>
Tobias Bradtke <webwurst@gmail.com>
Tobias Gesellchen <tobias@gesellix.de>
Todd Whiteman <todd.whiteman@joyent.com>
Tom Denham <tom@tomdee.co.uk>
Tom Fotherby <tom+github@peopleperhour.com>
Tom Klingenberg <tklingenberg@lastflood.net>
Tom Milligan <code@tommilligan.net>
Tom X. Tobin <tomxtobin@tomxtobin.com>
Tomas Bäckman <larstomas@gmail.com>
Tomas Tomecek <ttomecek@redhat.com>
Tomasz Kopczynski <tomek@kopczynski.net.pl>
Tomáš Hrčka <thrcka@redhat.com>
Tony Abboud <tdabboud@hotmail.com>
Tõnis Tiigi <tonistiigi@gmail.com>
Trapier Marshall <trapier.marshall@docker.com>
Travis Cline <travis.cline@gmail.com>
Tristan Carel <tristan@cogniteev.com>
Tycho Andersen <tycho@docker.com>
Tycho Andersen <tycho@tycho.ws>
uhayate <uhayate.gong@daocloud.io>
Ulrich Bareth <ulrich.bareth@gmail.com>
Ulysses Souza <ulysses.souza@docker.com>
Umesh Yadav <umesh4257@gmail.com>
Valentin Lorentz <progval+git@progval.net>
Vardan Pogosian <vardan.pogosyan@gmail.com>
Venkateswara Reddy Bukkasamudram <bukkasamudram@outlook.com>
Veres Lajos <vlajos@gmail.com>
Victor Vieux <victor.vieux@docker.com>
Victoria Bialas <victoria.bialas@docker.com>
Viktor Stanchev <me@viktorstanchev.com>
Vimal Raghubir <vraghubir0418@gmail.com>
Vincent Batts <vbatts@redhat.com>
Vincent Bernat <Vincent.Bernat@exoscale.ch>
Vincent Demeester <vincent.demeester@docker.com>
Vincent Woo <me@vincentwoo.com>
Vishnu Kannan <vishnuk@google.com>
Vivek Goyal <vgoyal@redhat.com>
Wang Jie <wangjie5@chinaskycloud.com>
Wang Lei <wanglei@tenxcloud.com>
Wang Long <long.wanglong@huawei.com>
Wang Ping <present.wp@icloud.com>
Wang Xing <hzwangxing@corp.netease.com>
Wang Yuexiao <wang.yuexiao@zte.com.cn>
Wang Yumu <37442693@qq.com>
Wataru Ishida <ishida.wataru@lab.ntt.co.jp>
Wayne Song <wsong@docker.com>
Wen Cheng Ma <wenchma@cn.ibm.com>
Wenzhi Liang <wenzhi.liang@gmail.com>
Wes Morgan <cap10morgan@gmail.com>
Wewang Xiaorenfine <wang.xiaoren@zte.com.cn>
William Henry <whenry@redhat.com>
Xianglin Gao <xlgao@zju.edu.cn>
Xiaodong Liu <liuxiaodong@loongson.cn>
Xiaodong Zhang <a4012017@sina.com>
Xiaoxi He <xxhe@alauda.io>
Xinbo Weng <xihuanbo_0521@zju.edu.cn>
Xuecong Liao <satorulogic@gmail.com>
Yan Feng <yanfeng2@huawei.com>
Yanqiang Miao <miao.yanqiang@zte.com.cn>
Yassine Tijani <yasstij11@gmail.com>
Yi EungJun <eungjun.yi@navercorp.com>
Ying Li <ying.li@docker.com>
Yong Tang <yong.tang.github@outlook.com>
Yosef Fertel <yfertel@gmail.com>
Yu Peng <yu.peng36@zte.com.cn>
Yuan Sun <sunyuan3@huawei.com>
Yue Zhang <zy675793960@yeah.net>
Yunxiang Huang <hyxqshk@vip.qq.com>
Zachary Romero <zacromero3@gmail.com>
Zander Mackie <zmackie@gmail.com>
zebrilee <zebrilee@gmail.com>
Zeel B Patel <patel_zeel@iitgn.ac.in>
Zhang Kun <zkazure@gmail.com>
Zhang Wei <zhangwei555@huawei.com>
Zhang Wentao <zhangwentao234@huawei.com>
ZhangHang <stevezhang2014@gmail.com>
zhenghenghuo <zhenghenghuo@zju.edu.cn>
Zhou Hao <zhouhao@cn.fujitsu.com>
Zhoulin Xie <zhoulin.xie@daocloud.io>
Zhu Guihua <zhugh.fnst@cn.fujitsu.com>
Álex González <agonzalezro@gmail.com>
Álvaro Lázaro <alvaro.lazaro.g@gmail.com>
Átila Camurça Alves <camurca.home@gmail.com>
Александр Менщиков <__Singleton__@hackerdom.ru>
徐俊杰 <paco.xu@daocloud.io>
   0707010000035D000081A4000000000000000000000001645E367C00002A0D000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/docker/cli/LICENSE  
                                 Apache License
                           Version 2.0, January 2004
                        https://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   Copyright 2013-2017 Docker, Inc.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       https://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
   0707010000035E000081A4000000000000000000000001645E367C00000282000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/docker/cli/NOTICE   Docker
Copyright 2012-2017 Docker, Inc.

This product includes software developed at Docker, Inc. (https://www.docker.com).

This product contains software (https://github.com/creack/pty) developed
by Keith Rarick, licensed under the MIT License.

The following is courtesy of our legal counsel:


Use and transfer of Docker may be subject to certain restrictions by the
United States and other governments.
It is your responsibility to ensure that your use and/or transfer does not
violate applicable laws.

For more information, please see https://www.bis.doc.gov

See also https://www.apache.org/dev/crypto.html and/or seek legal counsel.
  0707010000035F000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/github.com/docker/cli/cli  07070100000360000041ED000000000000000000000005645E367C00000000000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/docker/cli/cli/config   07070100000361000081A4000000000000000000000001645E367C00001187000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/docker/cli/cli/config/config.go package config

import (
	"fmt"
	"io"
	"os"
	"path/filepath"
	"strings"
	"sync"

	"github.com/docker/cli/cli/config/configfile"
	"github.com/docker/cli/cli/config/credentials"
	"github.com/docker/cli/cli/config/types"
	"github.com/docker/docker/pkg/homedir"
	"github.com/pkg/errors"
)

const (
	// ConfigFileName is the name of config file
	ConfigFileName = "config.json"
	configFileDir  = ".docker"
	oldConfigfile  = ".dockercfg" // Deprecated: remove once we stop printing deprecation warning
	contextsDir    = "contexts"
)

var (
	initConfigDir = new(sync.Once)
	configDir     string
	homeDir       string
)

// resetHomeDir is used in testing to reset the "homeDir" package variable to
// force re-lookup of the home directory between tests.
func resetHomeDir() {
	homeDir = ""
}

func getHomeDir() string {
	if homeDir == "" {
		homeDir = homedir.Get()
	}
	return homeDir
}

// resetConfigDir is used in testing to reset the "configDir" package variable
// and its sync.Once to force re-lookup between tests.
func resetConfigDir() {
	configDir = ""
	initConfigDir = new(sync.Once)
}

func setConfigDir() {
	if configDir != "" {
		return
	}
	configDir = os.Getenv("DOCKER_CONFIG")
	if configDir == "" {
		configDir = filepath.Join(getHomeDir(), configFileDir)
	}
}

// Dir returns the directory the configuration file is stored in
func Dir() string {
	initConfigDir.Do(setConfigDir)
	return configDir
}

// ContextStoreDir returns the directory the docker contexts are stored in
func ContextStoreDir() string {
	return filepath.Join(Dir(), contextsDir)
}

// SetDir sets the directory the configuration file is stored in
func SetDir(dir string) {
	configDir = filepath.Clean(dir)
}

// Path returns the path to a file relative to the config dir
func Path(p ...string) (string, error) {
	path := filepath.Join(append([]string{Dir()}, p...)...)
	if !strings.HasPrefix(path, Dir()+string(filepath.Separator)) {
		return "", errors.Errorf("path %q is outside of root config directory %q", path, Dir())
	}
	return path, nil
}

// LoadFromReader is a convenience function that creates a ConfigFile object from
// a reader
func LoadFromReader(configData io.Reader) (*configfile.ConfigFile, error) {
	configFile := configfile.ConfigFile{
		AuthConfigs: make(map[string]types.AuthConfig),
	}
	err := configFile.LoadFromReader(configData)
	return &configFile, err
}

// Load reads the configuration files in the given directory, and sets up
// the auth config information and returns values.
// FIXME: use the internal golang config parser
func Load(configDir string) (*configfile.ConfigFile, error) {
	cfg, _, err := load(configDir)
	return cfg, err
}

// TODO remove this temporary hack, which is used to warn about the deprecated ~/.dockercfg file
// so we can remove the bool return value and collapse this back into `Load`
func load(configDir string) (*configfile.ConfigFile, bool, error) {
	printLegacyFileWarning := false

	if configDir == "" {
		configDir = Dir()
	}

	filename := filepath.Join(configDir, ConfigFileName)
	configFile := configfile.New(filename)

	// Try happy path first - latest config file
	if file, err := os.Open(filename); err == nil {
		defer file.Close()
		err = configFile.LoadFromReader(file)
		if err != nil {
			err = errors.Wrap(err, filename)
		}
		return configFile, printLegacyFileWarning, err
	} else if !os.IsNotExist(err) {
		// if file is there but we can't stat it for any reason other
		// than it doesn't exist then stop
		return configFile, printLegacyFileWarning, errors.Wrap(err, filename)
	}

	// Can't find latest config file so check for the old one
	filename = filepath.Join(getHomeDir(), oldConfigfile)
	if _, err := os.Stat(filename); err == nil {
		printLegacyFileWarning = true
	}
	return configFile, printLegacyFileWarning, nil
}

// LoadDefaultConfigFile attempts to load the default config file and returns
// an initialized ConfigFile struct if none is found.
func LoadDefaultConfigFile(stderr io.Writer) *configfile.ConfigFile {
	configFile, printLegacyFileWarning, err := load(Dir())
	if err != nil {
		fmt.Fprintf(stderr, "WARNING: Error loading config file: %v\n", err)
	}
	if printLegacyFileWarning {
		_, _ = fmt.Fprintln(stderr, "WARNING: Support for the legacy ~/.dockercfg configuration file and file-format has been removed and the configuration file will be ignored")
	}
	if !configFile.ContainsAuth() {
		configFile.CredentialsStore = credentials.DetectDefaultStore(configFile.CredentialsStore)
	}
	return configFile
}
 07070100000362000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/docker/cli/cli/config/configfile    07070100000363000081A4000000000000000000000001645E367C00002EC6000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/docker/cli/cli/config/configfile/file.go    package configfile

import (
	"encoding/base64"
	"encoding/json"
	"io"
	"os"
	"path/filepath"
	"strings"

	"github.com/docker/cli/cli/config/credentials"
	"github.com/docker/cli/cli/config/types"
	"github.com/pkg/errors"
	"github.com/sirupsen/logrus"
)

// ConfigFile ~/.docker/config.json file info
type ConfigFile struct {
	AuthConfigs          map[string]types.AuthConfig  `json:"auths"`
	HTTPHeaders          map[string]string            `json:"HttpHeaders,omitempty"`
	PsFormat             string                       `json:"psFormat,omitempty"`
	ImagesFormat         string                       `json:"imagesFormat,omitempty"`
	NetworksFormat       string                       `json:"networksFormat,omitempty"`
	PluginsFormat        string                       `json:"pluginsFormat,omitempty"`
	VolumesFormat        string                       `json:"volumesFormat,omitempty"`
	StatsFormat          string                       `json:"statsFormat,omitempty"`
	DetachKeys           string                       `json:"detachKeys,omitempty"`
	CredentialsStore     string                       `json:"credsStore,omitempty"`
	CredentialHelpers    map[string]string            `json:"credHelpers,omitempty"`
	Filename             string                       `json:"-"` // Note: for internal use only
	ServiceInspectFormat string                       `json:"serviceInspectFormat,omitempty"`
	ServicesFormat       string                       `json:"servicesFormat,omitempty"`
	TasksFormat          string                       `json:"tasksFormat,omitempty"`
	SecretFormat         string                       `json:"secretFormat,omitempty"`
	ConfigFormat         string                       `json:"configFormat,omitempty"`
	NodesFormat          string                       `json:"nodesFormat,omitempty"`
	PruneFilters         []string                     `json:"pruneFilters,omitempty"`
	Proxies              map[string]ProxyConfig       `json:"proxies,omitempty"`
	Experimental         string                       `json:"experimental,omitempty"`
	StackOrchestrator    string                       `json:"stackOrchestrator,omitempty"` // Deprecated: swarm is now the default orchestrator, and this option is ignored.
	CurrentContext       string                       `json:"currentContext,omitempty"`
	CLIPluginsExtraDirs  []string                     `json:"cliPluginsExtraDirs,omitempty"`
	Plugins              map[string]map[string]string `json:"plugins,omitempty"`
	Aliases              map[string]string            `json:"aliases,omitempty"`
}

// ProxyConfig contains proxy configuration settings
type ProxyConfig struct {
	HTTPProxy  string `json:"httpProxy,omitempty"`
	HTTPSProxy string `json:"httpsProxy,omitempty"`
	NoProxy    string `json:"noProxy,omitempty"`
	FTPProxy   string `json:"ftpProxy,omitempty"`
	AllProxy   string `json:"allProxy,omitempty"`
}

// New initializes an empty configuration file for the given filename 'fn'
func New(fn string) *ConfigFile {
	return &ConfigFile{
		AuthConfigs: make(map[string]types.AuthConfig),
		HTTPHeaders: make(map[string]string),
		Filename:    fn,
		Plugins:     make(map[string]map[string]string),
		Aliases:     make(map[string]string),
	}
}

// LoadFromReader reads the configuration data given and sets up the auth config
// information with given directory and populates the receiver object
func (configFile *ConfigFile) LoadFromReader(configData io.Reader) error {
	if err := json.NewDecoder(configData).Decode(configFile); err != nil && !errors.Is(err, io.EOF) {
		return err
	}
	var err error
	for addr, ac := range configFile.AuthConfigs {
		if ac.Auth != "" {
			ac.Username, ac.Password, err = decodeAuth(ac.Auth)
			if err != nil {
				return err
			}
		}
		ac.Auth = ""
		ac.ServerAddress = addr
		configFile.AuthConfigs[addr] = ac
	}
	return nil
}

// ContainsAuth returns whether there is authentication configured
// in this file or not.
func (configFile *ConfigFile) ContainsAuth() bool {
	return configFile.CredentialsStore != "" ||
		len(configFile.CredentialHelpers) > 0 ||
		len(configFile.AuthConfigs) > 0
}

// GetAuthConfigs returns the mapping of repo to auth configuration
func (configFile *ConfigFile) GetAuthConfigs() map[string]types.AuthConfig {
	return configFile.AuthConfigs
}

// SaveToWriter encodes and writes out all the authorization information to
// the given writer
func (configFile *ConfigFile) SaveToWriter(writer io.Writer) error {
	// Encode sensitive data into a new/temp struct
	tmpAuthConfigs := make(map[string]types.AuthConfig, len(configFile.AuthConfigs))
	for k, authConfig := range configFile.AuthConfigs {
		authCopy := authConfig
		// encode and save the authstring, while blanking out the original fields
		authCopy.Auth = encodeAuth(&authCopy)
		authCopy.Username = ""
		authCopy.Password = ""
		authCopy.ServerAddress = ""
		tmpAuthConfigs[k] = authCopy
	}

	saveAuthConfigs := configFile.AuthConfigs
	configFile.AuthConfigs = tmpAuthConfigs
	defer func() { configFile.AuthConfigs = saveAuthConfigs }()

	// User-Agent header is automatically set, and should not be stored in the configuration
	for v := range configFile.HTTPHeaders {
		if strings.EqualFold(v, "User-Agent") {
			delete(configFile.HTTPHeaders, v)
		}
	}

	data, err := json.MarshalIndent(configFile, "", "\t")
	if err != nil {
		return err
	}
	_, err = writer.Write(data)
	return err
}

// Save encodes and writes out all the authorization information
func (configFile *ConfigFile) Save() (retErr error) {
	if configFile.Filename == "" {
		return errors.Errorf("Can't save config with empty filename")
	}

	dir := filepath.Dir(configFile.Filename)
	if err := os.MkdirAll(dir, 0o700); err != nil {
		return err
	}
	temp, err := os.CreateTemp(dir, filepath.Base(configFile.Filename))
	if err != nil {
		return err
	}
	defer func() {
		temp.Close()
		if retErr != nil {
			if err := os.Remove(temp.Name()); err != nil {
				logrus.WithError(err).WithField("file", temp.Name()).Debug("Error cleaning up temp file")
			}
		}
	}()

	err = configFile.SaveToWriter(temp)
	if err != nil {
		return err
	}

	if err := temp.Close(); err != nil {
		return errors.Wrap(err, "error closing temp file")
	}

	// Handle situation where the configfile is a symlink
	cfgFile := configFile.Filename
	if f, err := os.Readlink(cfgFile); err == nil {
		cfgFile = f
	}

	// Try copying the current config file (if any) ownership and permissions
	copyFilePermissions(cfgFile, temp.Name())
	return os.Rename(temp.Name(), cfgFile)
}

// ParseProxyConfig computes proxy configuration by retrieving the config for the provided host and
// then checking this against any environment variables provided to the container
func (configFile *ConfigFile) ParseProxyConfig(host string, runOpts map[string]*string) map[string]*string {
	var cfgKey string

	if _, ok := configFile.Proxies[host]; !ok {
		cfgKey = "default"
	} else {
		cfgKey = host
	}

	config := configFile.Proxies[cfgKey]
	permitted := map[string]*string{
		"HTTP_PROXY":  &config.HTTPProxy,
		"HTTPS_PROXY": &config.HTTPSProxy,
		"NO_PROXY":    &config.NoProxy,
		"FTP_PROXY":   &config.FTPProxy,
		"ALL_PROXY":   &config.AllProxy,
	}
	m := runOpts
	if m == nil {
		m = make(map[string]*string)
	}
	for k := range permitted {
		if *permitted[k] == "" {
			continue
		}
		if _, ok := m[k]; !ok {
			m[k] = permitted[k]
		}
		if _, ok := m[strings.ToLower(k)]; !ok {
			m[strings.ToLower(k)] = permitted[k]
		}
	}
	return m
}

// encodeAuth creates a base64 encoded string to containing authorization information
func encodeAuth(authConfig *types.AuthConfig) string {
	if authConfig.Username == "" && authConfig.Password == "" {
		return ""
	}

	authStr := authConfig.Username + ":" + authConfig.Password
	msg := []byte(authStr)
	encoded := make([]byte, base64.StdEncoding.EncodedLen(len(msg)))
	base64.StdEncoding.Encode(encoded, msg)
	return string(encoded)
}

// decodeAuth decodes a base64 encoded string and returns username and password
func decodeAuth(authStr string) (string, string, error) {
	if authStr == "" {
		return "", "", nil
	}

	decLen := base64.StdEncoding.DecodedLen(len(authStr))
	decoded := make([]byte, decLen)
	authByte := []byte(authStr)
	n, err := base64.StdEncoding.Decode(decoded, authByte)
	if err != nil {
		return "", "", err
	}
	if n > decLen {
		return "", "", errors.Errorf("Something went wrong decoding auth config")
	}
	userName, password, ok := strings.Cut(string(decoded), ":")
	if !ok || userName == "" {
		return "", "", errors.Errorf("Invalid auth configuration file")
	}
	return userName, strings.Trim(password, "\x00"), nil
}

// GetCredentialsStore returns a new credentials store from the settings in the
// configuration file
func (configFile *ConfigFile) GetCredentialsStore(registryHostname string) credentials.Store {
	if helper := getConfiguredCredentialStore(configFile, registryHostname); helper != "" {
		return newNativeStore(configFile, helper)
	}
	return credentials.NewFileStore(configFile)
}

// var for unit testing.
var newNativeStore = func(configFile *ConfigFile, helperSuffix string) credentials.Store {
	return credentials.NewNativeStore(configFile, helperSuffix)
}

// GetAuthConfig for a repository from the credential store
func (configFile *ConfigFile) GetAuthConfig(registryHostname string) (types.AuthConfig, error) {
	return configFile.GetCredentialsStore(registryHostname).Get(registryHostname)
}

// getConfiguredCredentialStore returns the credential helper configured for the
// given registry, the default credsStore, or the empty string if neither are
// configured.
func getConfiguredCredentialStore(c *ConfigFile, registryHostname string) string {
	if c.CredentialHelpers != nil && registryHostname != "" {
		if helper, exists := c.CredentialHelpers[registryHostname]; exists {
			return helper
		}
	}
	return c.CredentialsStore
}

// GetAllCredentials returns all of the credentials stored in all of the
// configured credential stores.
func (configFile *ConfigFile) GetAllCredentials() (map[string]types.AuthConfig, error) {
	auths := make(map[string]types.AuthConfig)
	addAll := func(from map[string]types.AuthConfig) {
		for reg, ac := range from {
			auths[reg] = ac
		}
	}

	defaultStore := configFile.GetCredentialsStore("")
	newAuths, err := defaultStore.GetAll()
	if err != nil {
		return nil, err
	}
	addAll(newAuths)

	// Auth configs from a registry-specific helper should override those from the default store.
	for registryHostname := range configFile.CredentialHelpers {
		newAuth, err := configFile.GetAuthConfig(registryHostname)
		if err != nil {
			logrus.WithError(err).Warnf("Failed to get credentials for registry: %s", registryHostname)
			continue
		}
		auths[registryHostname] = newAuth
	}
	return auths, nil
}

// GetFilename returns the file name that this config file is based on.
func (configFile *ConfigFile) GetFilename() string {
	return configFile.Filename
}

// PluginConfig retrieves the requested option for the given plugin.
func (configFile *ConfigFile) PluginConfig(pluginname, option string) (string, bool) {
	if configFile.Plugins == nil {
		return "", false
	}
	pluginConfig, ok := configFile.Plugins[pluginname]
	if !ok {
		return "", false
	}
	value, ok := pluginConfig[option]
	return value, ok
}

// SetPluginConfig sets the option to the given value for the given
// plugin. Passing a value of "" will remove the option. If removing
// the final config item for a given plugin then also cleans up the
// overall plugin entry.
func (configFile *ConfigFile) SetPluginConfig(pluginname, option, value string) {
	if configFile.Plugins == nil {
		configFile.Plugins = make(map[string]map[string]string)
	}
	pluginConfig, ok := configFile.Plugins[pluginname]
	if !ok {
		pluginConfig = make(map[string]string)
		configFile.Plugins[pluginname] = pluginConfig
	}
	if value != "" {
		pluginConfig[option] = value
	} else {
		delete(pluginConfig, option)
	}
	if len(pluginConfig) == 0 {
		delete(configFile.Plugins, pluginname)
	}
}
  07070100000364000081A4000000000000000000000001645E367C0000026F000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/docker/cli/cli/config/configfile/file_unix.go   //go:build !windows
// +build !windows

package configfile

import (
	"os"
	"syscall"
)

// copyFilePermissions copies file ownership and permissions from "src" to "dst",
// ignoring any error during the process.
func copyFilePermissions(src, dst string) {
	var (
		mode     os.FileMode = 0o600
		uid, gid int
	)

	fi, err := os.Stat(src)
	if err != nil {
		return
	}
	if fi.Mode().IsRegular() {
		mode = fi.Mode()
	}
	if err := os.Chmod(dst, mode); err != nil {
		return
	}

	uid = int(fi.Sys().(*syscall.Stat_t).Uid)
	gid = int(fi.Sys().(*syscall.Stat_t).Gid)

	if uid > 0 && gid > 0 {
		_ = os.Chown(dst, uid, gid)
	}
}
 07070100000365000081A4000000000000000000000001645E367C00000061000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/docker/cli/cli/config/configfile/file_windows.go    package configfile

func copyFilePermissions(src, dst string) {
	// TODO implement for Windows
}
   07070100000366000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/docker/cli/cli/config/credentials   07070100000367000081A4000000000000000000000001645E367C0000023F000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/docker/cli/cli/config/credentials/credentials.go    package credentials

import (
	"github.com/docker/cli/cli/config/types"
)

// Store is the interface that any credentials store must implement.
type Store interface {
	// Erase removes credentials from the store for a given server.
	Erase(serverAddress string) error
	// Get retrieves credentials from the store for a given server.
	Get(serverAddress string) (types.AuthConfig, error)
	// GetAll retrieves all the credentials from the store.
	GetAll() (map[string]types.AuthConfig, error)
	// Store saves credentials in the store.
	Store(authConfig types.AuthConfig) error
}
 07070100000368000081A4000000000000000000000001645E367C000001FD000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/docker/cli/cli/config/credentials/default_store.go  package credentials

import (
	exec "golang.org/x/sys/execabs"
)

// DetectDefaultStore return the default credentials store for the platform if
// the store executable is available.
func DetectDefaultStore(store string) string {
	platformDefault := defaultCredentialsStore()

	// user defined or no default for platform
	if store != "" || platformDefault == "" {
		return store
	}

	if _, err := exec.LookPath(remoteCredentialsPrefix + platformDefault); err == nil {
		return platformDefault
	}
	return ""
}
   07070100000369000081A4000000000000000000000001645E367C00000055000000000000000000000000000000000000006000000000elemental-cli-0.3.1/vendor/github.com/docker/cli/cli/config/credentials/default_store_darwin.go   package credentials

func defaultCredentialsStore() string {
	return "osxkeychain"
}
   0707010000036A000081A4000000000000000000000001645E367C000000B4000000000000000000000000000000000000005F00000000elemental-cli-0.3.1/vendor/github.com/docker/cli/cli/config/credentials/default_store_linux.go    package credentials

import (
	"os/exec"
)

func defaultCredentialsStore() string {
	if _, err := exec.LookPath("pass"); err == nil {
		return "pass"
	}

	return "secretservice"
}
0707010000036B000081A4000000000000000000000001645E367C00000096000000000000000000000000000000000000006500000000elemental-cli-0.3.1/vendor/github.com/docker/cli/cli/config/credentials/default_store_unsupported.go  //go:build !windows && !darwin && !linux
// +build !windows,!darwin,!linux

package credentials

func defaultCredentialsStore() string {
	return ""
}
  0707010000036C000081A4000000000000000000000001645E367C00000051000000000000000000000000000000000000006100000000elemental-cli-0.3.1/vendor/github.com/docker/cli/cli/config/credentials/default_store_windows.go  package credentials

func defaultCredentialsStore() string {
	return "wincred"
}
   0707010000036D000081A4000000000000000000000001645E367C00000860000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/docker/cli/cli/config/credentials/file_store.go package credentials

import (
	"strings"

	"github.com/docker/cli/cli/config/types"
)

type store interface {
	Save() error
	GetAuthConfigs() map[string]types.AuthConfig
	GetFilename() string
}

// fileStore implements a credentials store using
// the docker configuration file to keep the credentials in plain text.
type fileStore struct {
	file store
}

// NewFileStore creates a new file credentials store.
func NewFileStore(file store) Store {
	return &fileStore{file: file}
}

// Erase removes the given credentials from the file store.
func (c *fileStore) Erase(serverAddress string) error {
	delete(c.file.GetAuthConfigs(), serverAddress)
	return c.file.Save()
}

// Get retrieves credentials for a specific server from the file store.
func (c *fileStore) Get(serverAddress string) (types.AuthConfig, error) {
	authConfig, ok := c.file.GetAuthConfigs()[serverAddress]
	if !ok {
		// Maybe they have a legacy config file, we will iterate the keys converting
		// them to the new format and testing
		for r, ac := range c.file.GetAuthConfigs() {
			if serverAddress == ConvertToHostname(r) {
				return ac, nil
			}
		}

		authConfig = types.AuthConfig{}
	}
	return authConfig, nil
}

func (c *fileStore) GetAll() (map[string]types.AuthConfig, error) {
	return c.file.GetAuthConfigs(), nil
}

// Store saves the given credentials in the file store.
func (c *fileStore) Store(authConfig types.AuthConfig) error {
	c.file.GetAuthConfigs()[authConfig.ServerAddress] = authConfig
	return c.file.Save()
}

func (c *fileStore) GetFilename() string {
	return c.file.GetFilename()
}

func (c *fileStore) IsFileStore() bool {
	return true
}

// ConvertToHostname converts a registry url which has http|https prepended
// to just an hostname.
// Copied from github.com/docker/docker/registry.ConvertToHostname to reduce dependencies.
func ConvertToHostname(url string) string {
	stripped := url
	if strings.HasPrefix(url, "http://") {
		stripped = strings.TrimPrefix(url, "http://")
	} else if strings.HasPrefix(url, "https://") {
		stripped = strings.TrimPrefix(url, "https://")
	}

	hostName, _, _ := strings.Cut(stripped, "/")
	return hostName
}
0707010000036E000081A4000000000000000000000001645E367C0000106F000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/docker/cli/cli/config/credentials/native_store.go   package credentials

import (
	"github.com/docker/cli/cli/config/types"
	"github.com/docker/docker-credential-helpers/client"
	"github.com/docker/docker-credential-helpers/credentials"
)

const (
	remoteCredentialsPrefix = "docker-credential-" //nolint:gosec // ignore G101: Potential hardcoded credentials
	tokenUsername           = "<token>"
)

// nativeStore implements a credentials store
// using native keychain to keep credentials secure.
// It piggybacks into a file store to keep users' emails.
type nativeStore struct {
	programFunc client.ProgramFunc
	fileStore   Store
}

// NewNativeStore creates a new native store that
// uses a remote helper program to manage credentials.
func NewNativeStore(file store, helperSuffix string) Store {
	name := remoteCredentialsPrefix + helperSuffix
	return &nativeStore{
		programFunc: client.NewShellProgramFunc(name),
		fileStore:   NewFileStore(file),
	}
}

// Erase removes the given credentials from the native store.
func (c *nativeStore) Erase(serverAddress string) error {
	if err := client.Erase(c.programFunc, serverAddress); err != nil {
		return err
	}

	// Fallback to plain text store to remove email
	return c.fileStore.Erase(serverAddress)
}

// Get retrieves credentials for a specific server from the native store.
func (c *nativeStore) Get(serverAddress string) (types.AuthConfig, error) {
	// load user email if it exist or an empty auth config.
	auth, _ := c.fileStore.Get(serverAddress)

	creds, err := c.getCredentialsFromStore(serverAddress)
	if err != nil {
		return auth, err
	}
	auth.Username = creds.Username
	auth.IdentityToken = creds.IdentityToken
	auth.Password = creds.Password

	return auth, nil
}

// GetAll retrieves all the credentials from the native store.
func (c *nativeStore) GetAll() (map[string]types.AuthConfig, error) {
	auths, err := c.listCredentialsInStore()
	if err != nil {
		return nil, err
	}

	// Emails are only stored in the file store.
	// This call can be safely eliminated when emails are removed.
	fileConfigs, _ := c.fileStore.GetAll()

	authConfigs := make(map[string]types.AuthConfig)
	for registry := range auths {
		creds, err := c.getCredentialsFromStore(registry)
		if err != nil {
			return nil, err
		}
		ac := fileConfigs[registry] // might contain Email
		ac.Username = creds.Username
		ac.Password = creds.Password
		ac.IdentityToken = creds.IdentityToken
		authConfigs[registry] = ac
	}

	return authConfigs, nil
}

// Store saves the given credentials in the file store.
func (c *nativeStore) Store(authConfig types.AuthConfig) error {
	if err := c.storeCredentialsInStore(authConfig); err != nil {
		return err
	}
	authConfig.Username = ""
	authConfig.Password = ""
	authConfig.IdentityToken = ""

	// Fallback to old credential in plain text to save only the email
	return c.fileStore.Store(authConfig)
}

// storeCredentialsInStore executes the command to store the credentials in the native store.
func (c *nativeStore) storeCredentialsInStore(config types.AuthConfig) error {
	creds := &credentials.Credentials{
		ServerURL: config.ServerAddress,
		Username:  config.Username,
		Secret:    config.Password,
	}

	if config.IdentityToken != "" {
		creds.Username = tokenUsername
		creds.Secret = config.IdentityToken
	}

	return client.Store(c.programFunc, creds)
}

// getCredentialsFromStore executes the command to get the credentials from the native store.
func (c *nativeStore) getCredentialsFromStore(serverAddress string) (types.AuthConfig, error) {
	var ret types.AuthConfig

	creds, err := client.Get(c.programFunc, serverAddress)
	if err != nil {
		if credentials.IsErrCredentialsNotFound(err) {
			// do not return an error if the credentials are not
			// in the keychain. Let docker ask for new credentials.
			return ret, nil
		}
		return ret, err
	}

	if creds.Username == tokenUsername {
		ret.IdentityToken = creds.Secret
	} else {
		ret.Password = creds.Secret
		ret.Username = creds.Username
	}

	ret.ServerAddress = serverAddress
	return ret, nil
}

// listCredentialsInStore returns a listing of stored credentials as a map of
// URL -> username.
func (c *nativeStore) listCredentialsInStore() (map[string]string, error) {
	return client.List(c.programFunc)
}
 0707010000036F000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/docker/cli/cli/config/types 07070100000370000081A4000000000000000000000001645E367C000002F9000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/docker/cli/cli/config/types/authconfig.go   package types

// AuthConfig contains authorization information for connecting to a Registry
type AuthConfig struct {
	Username string `json:"username,omitempty"`
	Password string `json:"password,omitempty"`
	Auth     string `json:"auth,omitempty"`

	// Email is an optional value associated with the username.
	// This field is deprecated and will be removed in a later
	// version of docker.
	Email string `json:"email,omitempty"`

	ServerAddress string `json:"serveraddress,omitempty"`

	// IdentityToken is used to authenticate the user and get
	// an access token for the registry.
	IdentityToken string `json:"identitytoken,omitempty"`

	// RegistryToken is a bearer token to be sent to a registry
	RegistryToken string `json:"registrytoken,omitempty"`
}
   07070100000371000041ED000000000000000000000005645E367C00000000000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/docker/distribution 07070100000372000081A4000000000000000000000001645E367C00002C3D000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/docker/distribution/LICENSE Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "{}"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright {yyyy} {name of copyright owner}

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

   07070100000373000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/docker/distribution/digestset   07070100000374000081A4000000000000000000000001645E367C00001A59000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/docker/distribution/digestset/set.go    package digestset

import (
	"errors"
	"sort"
	"strings"
	"sync"

	digest "github.com/opencontainers/go-digest"
)

var (
	// ErrDigestNotFound is used when a matching digest
	// could not be found in a set.
	ErrDigestNotFound = errors.New("digest not found")

	// ErrDigestAmbiguous is used when multiple digests
	// are found in a set. None of the matching digests
	// should be considered valid matches.
	ErrDigestAmbiguous = errors.New("ambiguous digest string")
)

// Set is used to hold a unique set of digests which
// may be easily referenced by easily  referenced by a string
// representation of the digest as well as short representation.
// The uniqueness of the short representation is based on other
// digests in the set. If digests are omitted from this set,
// collisions in a larger set may not be detected, therefore it
// is important to always do short representation lookups on
// the complete set of digests. To mitigate collisions, an
// appropriately long short code should be used.
type Set struct {
	mutex   sync.RWMutex
	entries digestEntries
}

// NewSet creates an empty set of digests
// which may have digests added.
func NewSet() *Set {
	return &Set{
		entries: digestEntries{},
	}
}

// checkShortMatch checks whether two digests match as either whole
// values or short values. This function does not test equality,
// rather whether the second value could match against the first
// value.
func checkShortMatch(alg digest.Algorithm, hex, shortAlg, shortHex string) bool {
	if len(hex) == len(shortHex) {
		if hex != shortHex {
			return false
		}
		if len(shortAlg) > 0 && string(alg) != shortAlg {
			return false
		}
	} else if !strings.HasPrefix(hex, shortHex) {
		return false
	} else if len(shortAlg) > 0 && string(alg) != shortAlg {
		return false
	}
	return true
}

// Lookup looks for a digest matching the given string representation.
// If no digests could be found ErrDigestNotFound will be returned
// with an empty digest value. If multiple matches are found
// ErrDigestAmbiguous will be returned with an empty digest value.
func (dst *Set) Lookup(d string) (digest.Digest, error) {
	dst.mutex.RLock()
	defer dst.mutex.RUnlock()
	if len(dst.entries) == 0 {
		return "", ErrDigestNotFound
	}
	var (
		searchFunc func(int) bool
		alg        digest.Algorithm
		hex        string
	)
	dgst, err := digest.Parse(d)
	if err == digest.ErrDigestInvalidFormat {
		hex = d
		searchFunc = func(i int) bool {
			return dst.entries[i].val >= d
		}
	} else {
		hex = dgst.Hex()
		alg = dgst.Algorithm()
		searchFunc = func(i int) bool {
			if dst.entries[i].val == hex {
				return dst.entries[i].alg >= alg
			}
			return dst.entries[i].val >= hex
		}
	}
	idx := sort.Search(len(dst.entries), searchFunc)
	if idx == len(dst.entries) || !checkShortMatch(dst.entries[idx].alg, dst.entries[idx].val, string(alg), hex) {
		return "", ErrDigestNotFound
	}
	if dst.entries[idx].alg == alg && dst.entries[idx].val == hex {
		return dst.entries[idx].digest, nil
	}
	if idx+1 < len(dst.entries) && checkShortMatch(dst.entries[idx+1].alg, dst.entries[idx+1].val, string(alg), hex) {
		return "", ErrDigestAmbiguous
	}

	return dst.entries[idx].digest, nil
}

// Add adds the given digest to the set. An error will be returned
// if the given digest is invalid. If the digest already exists in the
// set, this operation will be a no-op.
func (dst *Set) Add(d digest.Digest) error {
	if err := d.Validate(); err != nil {
		return err
	}
	dst.mutex.Lock()
	defer dst.mutex.Unlock()
	entry := &digestEntry{alg: d.Algorithm(), val: d.Hex(), digest: d}
	searchFunc := func(i int) bool {
		if dst.entries[i].val == entry.val {
			return dst.entries[i].alg >= entry.alg
		}
		return dst.entries[i].val >= entry.val
	}
	idx := sort.Search(len(dst.entries), searchFunc)
	if idx == len(dst.entries) {
		dst.entries = append(dst.entries, entry)
		return nil
	} else if dst.entries[idx].digest == d {
		return nil
	}

	entries := append(dst.entries, nil)
	copy(entries[idx+1:], entries[idx:len(entries)-1])
	entries[idx] = entry
	dst.entries = entries
	return nil
}

// Remove removes the given digest from the set. An err will be
// returned if the given digest is invalid. If the digest does
// not exist in the set, this operation will be a no-op.
func (dst *Set) Remove(d digest.Digest) error {
	if err := d.Validate(); err != nil {
		return err
	}
	dst.mutex.Lock()
	defer dst.mutex.Unlock()
	entry := &digestEntry{alg: d.Algorithm(), val: d.Hex(), digest: d}
	searchFunc := func(i int) bool {
		if dst.entries[i].val == entry.val {
			return dst.entries[i].alg >= entry.alg
		}
		return dst.entries[i].val >= entry.val
	}
	idx := sort.Search(len(dst.entries), searchFunc)
	// Not found if idx is after or value at idx is not digest
	if idx == len(dst.entries) || dst.entries[idx].digest != d {
		return nil
	}

	entries := dst.entries
	copy(entries[idx:], entries[idx+1:])
	entries = entries[:len(entries)-1]
	dst.entries = entries

	return nil
}

// All returns all the digests in the set
func (dst *Set) All() []digest.Digest {
	dst.mutex.RLock()
	defer dst.mutex.RUnlock()
	retValues := make([]digest.Digest, len(dst.entries))
	for i := range dst.entries {
		retValues[i] = dst.entries[i].digest
	}

	return retValues
}

// ShortCodeTable returns a map of Digest to unique short codes. The
// length represents the minimum value, the maximum length may be the
// entire value of digest if uniqueness cannot be achieved without the
// full value. This function will attempt to make short codes as short
// as possible to be unique.
func ShortCodeTable(dst *Set, length int) map[digest.Digest]string {
	dst.mutex.RLock()
	defer dst.mutex.RUnlock()
	m := make(map[digest.Digest]string, len(dst.entries))
	l := length
	resetIdx := 0
	for i := 0; i < len(dst.entries); i++ {
		var short string
		extended := true
		for extended {
			extended = false
			if len(dst.entries[i].val) <= l {
				short = dst.entries[i].digest.String()
			} else {
				short = dst.entries[i].val[:l]
				for j := i + 1; j < len(dst.entries); j++ {
					if checkShortMatch(dst.entries[j].alg, dst.entries[j].val, "", short) {
						if j > resetIdx {
							resetIdx = j
						}
						extended = true
					} else {
						break
					}
				}
				if extended {
					l++
				}
			}
		}
		m[dst.entries[i].digest] = short
		if i >= resetIdx {
			l = length
		}
	}
	return m
}

type digestEntry struct {
	alg    digest.Algorithm
	val    string
	digest digest.Digest
}

type digestEntries []*digestEntry

func (d digestEntries) Len() int {
	return len(d)
}

func (d digestEntries) Less(i, j int) bool {
	if d[i].val != d[j].val {
		return d[i].val < d[j].val
	}
	return d[i].alg < d[j].alg
}

func (d digestEntries) Swap(i, j int) {
	d[i], d[j] = d[j], d[i]
}
   07070100000375000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/docker/distribution/reference   07070100000376000081A4000000000000000000000001645E367C0000047C000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/docker/distribution/reference/helpers.go    package reference

import "path"

// IsNameOnly returns true if reference only contains a repo name.
func IsNameOnly(ref Named) bool {
	if _, ok := ref.(NamedTagged); ok {
		return false
	}
	if _, ok := ref.(Canonical); ok {
		return false
	}
	return true
}

// FamiliarName returns the familiar name string
// for the given named, familiarizing if needed.
func FamiliarName(ref Named) string {
	if nn, ok := ref.(normalizedNamed); ok {
		return nn.Familiar().Name()
	}
	return ref.Name()
}

// FamiliarString returns the familiar string representation
// for the given reference, familiarizing if needed.
func FamiliarString(ref Reference) string {
	if nn, ok := ref.(normalizedNamed); ok {
		return nn.Familiar().String()
	}
	return ref.String()
}

// FamiliarMatch reports whether ref matches the specified pattern.
// See https://godoc.org/path#Match for supported patterns.
func FamiliarMatch(pattern string, ref Reference) (bool, error) {
	matched, err := path.Match(pattern, FamiliarString(ref))
	if namedRef, isNamed := ref.(Named); isNamed && !matched {
		matched, _ = path.Match(pattern, FamiliarName(namedRef))
	}
	return matched, err
}
07070100000377000081A4000000000000000000000001645E367C00001792000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/docker/distribution/reference/normalize.go  package reference

import (
	"errors"
	"fmt"
	"strings"

	"github.com/docker/distribution/digestset"
	"github.com/opencontainers/go-digest"
)

var (
	legacyDefaultDomain = "index.docker.io"
	defaultDomain       = "docker.io"
	officialRepoName    = "library"
	defaultTag          = "latest"
)

// normalizedNamed represents a name which has been
// normalized and has a familiar form. A familiar name
// is what is used in Docker UI. An example normalized
// name is "docker.io/library/ubuntu" and corresponding
// familiar name of "ubuntu".
type normalizedNamed interface {
	Named
	Familiar() Named
}

// ParseNormalizedNamed parses a string into a named reference
// transforming a familiar name from Docker UI to a fully
// qualified reference. If the value may be an identifier
// use ParseAnyReference.
func ParseNormalizedNamed(s string) (Named, error) {
	if ok := anchoredIdentifierRegexp.MatchString(s); ok {
		return nil, fmt.Errorf("invalid repository name (%s), cannot specify 64-byte hexadecimal strings", s)
	}
	domain, remainder := splitDockerDomain(s)
	var remoteName string
	if tagSep := strings.IndexRune(remainder, ':'); tagSep > -1 {
		remoteName = remainder[:tagSep]
	} else {
		remoteName = remainder
	}
	if strings.ToLower(remoteName) != remoteName {
		return nil, errors.New("invalid reference format: repository name must be lowercase")
	}

	ref, err := Parse(domain + "/" + remainder)
	if err != nil {
		return nil, err
	}
	named, isNamed := ref.(Named)
	if !isNamed {
		return nil, fmt.Errorf("reference %s has no name", ref.String())
	}
	return named, nil
}

// ParseDockerRef normalizes the image reference following the docker convention. This is added
// mainly for backward compatibility.
// The reference returned can only be either tagged or digested. For reference contains both tag
// and digest, the function returns digested reference, e.g. docker.io/library/busybox:latest@
// sha256:7cc4b5aefd1d0cadf8d97d4350462ba51c694ebca145b08d7d41b41acc8db5aa will be returned as
// docker.io/library/busybox@sha256:7cc4b5aefd1d0cadf8d97d4350462ba51c694ebca145b08d7d41b41acc8db5aa.
func ParseDockerRef(ref string) (Named, error) {
	named, err := ParseNormalizedNamed(ref)
	if err != nil {
		return nil, err
	}
	if _, ok := named.(NamedTagged); ok {
		if canonical, ok := named.(Canonical); ok {
			// The reference is both tagged and digested, only
			// return digested.
			newNamed, err := WithName(canonical.Name())
			if err != nil {
				return nil, err
			}
			newCanonical, err := WithDigest(newNamed, canonical.Digest())
			if err != nil {
				return nil, err
			}
			return newCanonical, nil
		}
	}
	return TagNameOnly(named), nil
}

// splitDockerDomain splits a repository name to domain and remotename string.
// If no valid domain is found, the default domain is used. Repository name
// needs to be already validated before.
func splitDockerDomain(name string) (domain, remainder string) {
	i := strings.IndexRune(name, '/')
	if i == -1 || (!strings.ContainsAny(name[:i], ".:") && name[:i] != "localhost") {
		domain, remainder = defaultDomain, name
	} else {
		domain, remainder = name[:i], name[i+1:]
	}
	if domain == legacyDefaultDomain {
		domain = defaultDomain
	}
	if domain == defaultDomain && !strings.ContainsRune(remainder, '/') {
		remainder = officialRepoName + "/" + remainder
	}
	return
}

// familiarizeName returns a shortened version of the name familiar
// to to the Docker UI. Familiar names have the default domain
// "docker.io" and "library/" repository prefix removed.
// For example, "docker.io/library/redis" will have the familiar
// name "redis" and "docker.io/dmcgowan/myapp" will be "dmcgowan/myapp".
// Returns a familiarized named only reference.
func familiarizeName(named namedRepository) repository {
	repo := repository{
		domain: named.Domain(),
		path:   named.Path(),
	}

	if repo.domain == defaultDomain {
		repo.domain = ""
		// Handle official repositories which have the pattern "library/<official repo name>"
		if split := strings.Split(repo.path, "/"); len(split) == 2 && split[0] == officialRepoName {
			repo.path = split[1]
		}
	}
	return repo
}

func (r reference) Familiar() Named {
	return reference{
		namedRepository: familiarizeName(r.namedRepository),
		tag:             r.tag,
		digest:          r.digest,
	}
}

func (r repository) Familiar() Named {
	return familiarizeName(r)
}

func (t taggedReference) Familiar() Named {
	return taggedReference{
		namedRepository: familiarizeName(t.namedRepository),
		tag:             t.tag,
	}
}

func (c canonicalReference) Familiar() Named {
	return canonicalReference{
		namedRepository: familiarizeName(c.namedRepository),
		digest:          c.digest,
	}
}

// TagNameOnly adds the default tag "latest" to a reference if it only has
// a repo name.
func TagNameOnly(ref Named) Named {
	if IsNameOnly(ref) {
		namedTagged, err := WithTag(ref, defaultTag)
		if err != nil {
			// Default tag must be valid, to create a NamedTagged
			// type with non-validated input the WithTag function
			// should be used instead
			panic(err)
		}
		return namedTagged
	}
	return ref
}

// ParseAnyReference parses a reference string as a possible identifier,
// full digest, or familiar name.
func ParseAnyReference(ref string) (Reference, error) {
	if ok := anchoredIdentifierRegexp.MatchString(ref); ok {
		return digestReference("sha256:" + ref), nil
	}
	if dgst, err := digest.Parse(ref); err == nil {
		return digestReference(dgst), nil
	}

	return ParseNormalizedNamed(ref)
}

// ParseAnyReferenceWithSet parses a reference string as a possible short
// identifier to be matched in a digest set, a full digest, or familiar name.
func ParseAnyReferenceWithSet(ref string, ds *digestset.Set) (Reference, error) {
	if ok := anchoredShortIdentifierRegexp.MatchString(ref); ok {
		dgst, err := ds.Lookup(ref)
		if err == nil {
			return digestReference(dgst), nil
		}
	} else {
		if dgst, err := digest.Parse(ref); err == nil {
			return digestReference(dgst), nil
		}
	}

	return ParseNormalizedNamed(ref)
}
  07070100000378000081A4000000000000000000000001645E367C00002B8C000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/docker/distribution/reference/reference.go  // Package reference provides a general type to represent any way of referencing images within the registry.
// Its main purpose is to abstract tags and digests (content-addressable hash).
//
// Grammar
//
//	reference                       := name [ ":" tag ] [ "@" digest ]
//	name                            := [domain '/'] path-component ['/' path-component]*
//	domain                          := domain-component ['.' domain-component]* [':' port-number]
//	domain-component                := /([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])/
//	port-number                     := /[0-9]+/
//	path-component                  := alpha-numeric [separator alpha-numeric]*
//	alpha-numeric                   := /[a-z0-9]+/
//	separator                       := /[_.]|__|[-]*/
//
//	tag                             := /[\w][\w.-]{0,127}/
//
//	digest                          := digest-algorithm ":" digest-hex
//	digest-algorithm                := digest-algorithm-component [ digest-algorithm-separator digest-algorithm-component ]*
//	digest-algorithm-separator      := /[+.-_]/
//	digest-algorithm-component      := /[A-Za-z][A-Za-z0-9]*/
//	digest-hex                      := /[0-9a-fA-F]{32,}/ ; At least 128 bit digest value
//
//	identifier                      := /[a-f0-9]{64}/
//	short-identifier                := /[a-f0-9]{6,64}/
package reference

import (
	"errors"
	"fmt"
	"strings"

	"github.com/opencontainers/go-digest"
)

const (
	// NameTotalLengthMax is the maximum total number of characters in a repository name.
	NameTotalLengthMax = 255
)

var (
	// ErrReferenceInvalidFormat represents an error while trying to parse a string as a reference.
	ErrReferenceInvalidFormat = errors.New("invalid reference format")

	// ErrTagInvalidFormat represents an error while trying to parse a string as a tag.
	ErrTagInvalidFormat = errors.New("invalid tag format")

	// ErrDigestInvalidFormat represents an error while trying to parse a string as a tag.
	ErrDigestInvalidFormat = errors.New("invalid digest format")

	// ErrNameContainsUppercase is returned for invalid repository names that contain uppercase characters.
	ErrNameContainsUppercase = errors.New("repository name must be lowercase")

	// ErrNameEmpty is returned for empty, invalid repository names.
	ErrNameEmpty = errors.New("repository name must have at least one component")

	// ErrNameTooLong is returned when a repository name is longer than NameTotalLengthMax.
	ErrNameTooLong = fmt.Errorf("repository name must not be more than %v characters", NameTotalLengthMax)

	// ErrNameNotCanonical is returned when a name is not canonical.
	ErrNameNotCanonical = errors.New("repository name must be canonical")
)

// Reference is an opaque object reference identifier that may include
// modifiers such as a hostname, name, tag, and digest.
type Reference interface {
	// String returns the full reference
	String() string
}

// Field provides a wrapper type for resolving correct reference types when
// working with encoding.
type Field struct {
	reference Reference
}

// AsField wraps a reference in a Field for encoding.
func AsField(reference Reference) Field {
	return Field{reference}
}

// Reference unwraps the reference type from the field to
// return the Reference object. This object should be
// of the appropriate type to further check for different
// reference types.
func (f Field) Reference() Reference {
	return f.reference
}

// MarshalText serializes the field to byte text which
// is the string of the reference.
func (f Field) MarshalText() (p []byte, err error) {
	return []byte(f.reference.String()), nil
}

// UnmarshalText parses text bytes by invoking the
// reference parser to ensure the appropriately
// typed reference object is wrapped by field.
func (f *Field) UnmarshalText(p []byte) error {
	r, err := Parse(string(p))
	if err != nil {
		return err
	}

	f.reference = r
	return nil
}

// Named is an object with a full name
type Named interface {
	Reference
	Name() string
}

// Tagged is an object which has a tag
type Tagged interface {
	Reference
	Tag() string
}

// NamedTagged is an object including a name and tag.
type NamedTagged interface {
	Named
	Tag() string
}

// Digested is an object which has a digest
// in which it can be referenced by
type Digested interface {
	Reference
	Digest() digest.Digest
}

// Canonical reference is an object with a fully unique
// name including a name with domain and digest
type Canonical interface {
	Named
	Digest() digest.Digest
}

// namedRepository is a reference to a repository with a name.
// A namedRepository has both domain and path components.
type namedRepository interface {
	Named
	Domain() string
	Path() string
}

// Domain returns the domain part of the Named reference
func Domain(named Named) string {
	if r, ok := named.(namedRepository); ok {
		return r.Domain()
	}
	domain, _ := splitDomain(named.Name())
	return domain
}

// Path returns the name without the domain part of the Named reference
func Path(named Named) (name string) {
	if r, ok := named.(namedRepository); ok {
		return r.Path()
	}
	_, path := splitDomain(named.Name())
	return path
}

func splitDomain(name string) (string, string) {
	match := anchoredNameRegexp.FindStringSubmatch(name)
	if len(match) != 3 {
		return "", name
	}
	return match[1], match[2]
}

// SplitHostname splits a named reference into a
// hostname and name string. If no valid hostname is
// found, the hostname is empty and the full value
// is returned as name
// DEPRECATED: Use Domain or Path
func SplitHostname(named Named) (string, string) {
	if r, ok := named.(namedRepository); ok {
		return r.Domain(), r.Path()
	}
	return splitDomain(named.Name())
}

// Parse parses s and returns a syntactically valid Reference.
// If an error was encountered it is returned, along with a nil Reference.
// NOTE: Parse will not handle short digests.
func Parse(s string) (Reference, error) {
	matches := ReferenceRegexp.FindStringSubmatch(s)
	if matches == nil {
		if s == "" {
			return nil, ErrNameEmpty
		}
		if ReferenceRegexp.FindStringSubmatch(strings.ToLower(s)) != nil {
			return nil, ErrNameContainsUppercase
		}
		return nil, ErrReferenceInvalidFormat
	}

	if len(matches[1]) > NameTotalLengthMax {
		return nil, ErrNameTooLong
	}

	var repo repository

	nameMatch := anchoredNameRegexp.FindStringSubmatch(matches[1])
	if len(nameMatch) == 3 {
		repo.domain = nameMatch[1]
		repo.path = nameMatch[2]
	} else {
		repo.domain = ""
		repo.path = matches[1]
	}

	ref := reference{
		namedRepository: repo,
		tag:             matches[2],
	}
	if matches[3] != "" {
		var err error
		ref.digest, err = digest.Parse(matches[3])
		if err != nil {
			return nil, err
		}
	}

	r := getBestReferenceType(ref)
	if r == nil {
		return nil, ErrNameEmpty
	}

	return r, nil
}

// ParseNamed parses s and returns a syntactically valid reference implementing
// the Named interface. The reference must have a name and be in the canonical
// form, otherwise an error is returned.
// If an error was encountered it is returned, along with a nil Reference.
// NOTE: ParseNamed will not handle short digests.
func ParseNamed(s string) (Named, error) {
	named, err := ParseNormalizedNamed(s)
	if err != nil {
		return nil, err
	}
	if named.String() != s {
		return nil, ErrNameNotCanonical
	}
	return named, nil
}

// WithName returns a named object representing the given string. If the input
// is invalid ErrReferenceInvalidFormat will be returned.
func WithName(name string) (Named, error) {
	if len(name) > NameTotalLengthMax {
		return nil, ErrNameTooLong
	}

	match := anchoredNameRegexp.FindStringSubmatch(name)
	if match == nil || len(match) != 3 {
		return nil, ErrReferenceInvalidFormat
	}
	return repository{
		domain: match[1],
		path:   match[2],
	}, nil
}

// WithTag combines the name from "name" and the tag from "tag" to form a
// reference incorporating both the name and the tag.
func WithTag(name Named, tag string) (NamedTagged, error) {
	if !anchoredTagRegexp.MatchString(tag) {
		return nil, ErrTagInvalidFormat
	}
	var repo repository
	if r, ok := name.(namedRepository); ok {
		repo.domain = r.Domain()
		repo.path = r.Path()
	} else {
		repo.path = name.Name()
	}
	if canonical, ok := name.(Canonical); ok {
		return reference{
			namedRepository: repo,
			tag:             tag,
			digest:          canonical.Digest(),
		}, nil
	}
	return taggedReference{
		namedRepository: repo,
		tag:             tag,
	}, nil
}

// WithDigest combines the name from "name" and the digest from "digest" to form
// a reference incorporating both the name and the digest.
func WithDigest(name Named, digest digest.Digest) (Canonical, error) {
	if !anchoredDigestRegexp.MatchString(digest.String()) {
		return nil, ErrDigestInvalidFormat
	}
	var repo repository
	if r, ok := name.(namedRepository); ok {
		repo.domain = r.Domain()
		repo.path = r.Path()
	} else {
		repo.path = name.Name()
	}
	if tagged, ok := name.(Tagged); ok {
		return reference{
			namedRepository: repo,
			tag:             tagged.Tag(),
			digest:          digest,
		}, nil
	}
	return canonicalReference{
		namedRepository: repo,
		digest:          digest,
	}, nil
}

// TrimNamed removes any tag or digest from the named reference.
func TrimNamed(ref Named) Named {
	domain, path := SplitHostname(ref)
	return repository{
		domain: domain,
		path:   path,
	}
}

func getBestReferenceType(ref reference) Reference {
	if ref.Name() == "" {
		// Allow digest only references
		if ref.digest != "" {
			return digestReference(ref.digest)
		}
		return nil
	}
	if ref.tag == "" {
		if ref.digest != "" {
			return canonicalReference{
				namedRepository: ref.namedRepository,
				digest:          ref.digest,
			}
		}
		return ref.namedRepository
	}
	if ref.digest == "" {
		return taggedReference{
			namedRepository: ref.namedRepository,
			tag:             ref.tag,
		}
	}

	return ref
}

type reference struct {
	namedRepository
	tag    string
	digest digest.Digest
}

func (r reference) String() string {
	return r.Name() + ":" + r.tag + "@" + r.digest.String()
}

func (r reference) Tag() string {
	return r.tag
}

func (r reference) Digest() digest.Digest {
	return r.digest
}

type repository struct {
	domain string
	path   string
}

func (r repository) String() string {
	return r.Name()
}

func (r repository) Name() string {
	if r.domain == "" {
		return r.path
	}
	return r.domain + "/" + r.path
}

func (r repository) Domain() string {
	return r.domain
}

func (r repository) Path() string {
	return r.path
}

type digestReference digest.Digest

func (d digestReference) String() string {
	return digest.Digest(d).String()
}

func (d digestReference) Digest() digest.Digest {
	return digest.Digest(d)
}

type taggedReference struct {
	namedRepository
	tag string
}

func (t taggedReference) String() string {
	return t.Name() + ":" + t.tag
}

func (t taggedReference) Tag() string {
	return t.tag
}

type canonicalReference struct {
	namedRepository
	digest digest.Digest
}

func (c canonicalReference) String() string {
	return c.Name() + "@" + c.digest.String()
}

func (c canonicalReference) Digest() digest.Digest {
	return c.digest
}
07070100000379000081A4000000000000000000000001645E367C00001492000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/docker/distribution/reference/regexp.go package reference

import "regexp"

var (
	// alphaNumericRegexp defines the alpha numeric atom, typically a
	// component of names. This only allows lower case characters and digits.
	alphaNumericRegexp = match(`[a-z0-9]+`)

	// separatorRegexp defines the separators allowed to be embedded in name
	// components. This allow one period, one or two underscore and multiple
	// dashes.
	separatorRegexp = match(`(?:[._]|__|[-]*)`)

	// nameComponentRegexp restricts registry path component names to start
	// with at least one letter or number, with following parts able to be
	// separated by one period, one or two underscore and multiple dashes.
	nameComponentRegexp = expression(
		alphaNumericRegexp,
		optional(repeated(separatorRegexp, alphaNumericRegexp)))

	// domainComponentRegexp restricts the registry domain component of a
	// repository name to start with a component as defined by DomainRegexp
	// and followed by an optional port.
	domainComponentRegexp = match(`(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])`)

	// DomainRegexp defines the structure of potential domain components
	// that may be part of image names. This is purposely a subset of what is
	// allowed by DNS to ensure backwards compatibility with Docker image
	// names.
	DomainRegexp = expression(
		domainComponentRegexp,
		optional(repeated(literal(`.`), domainComponentRegexp)),
		optional(literal(`:`), match(`[0-9]+`)))

	// TagRegexp matches valid tag names. From docker/docker:graph/tags.go.
	TagRegexp = match(`[\w][\w.-]{0,127}`)

	// anchoredTagRegexp matches valid tag names, anchored at the start and
	// end of the matched string.
	anchoredTagRegexp = anchored(TagRegexp)

	// DigestRegexp matches valid digests.
	DigestRegexp = match(`[A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*[:][[:xdigit:]]{32,}`)

	// anchoredDigestRegexp matches valid digests, anchored at the start and
	// end of the matched string.
	anchoredDigestRegexp = anchored(DigestRegexp)

	// NameRegexp is the format for the name component of references. The
	// regexp has capturing groups for the domain and name part omitting
	// the separating forward slash from either.
	NameRegexp = expression(
		optional(DomainRegexp, literal(`/`)),
		nameComponentRegexp,
		optional(repeated(literal(`/`), nameComponentRegexp)))

	// anchoredNameRegexp is used to parse a name value, capturing the
	// domain and trailing components.
	anchoredNameRegexp = anchored(
		optional(capture(DomainRegexp), literal(`/`)),
		capture(nameComponentRegexp,
			optional(repeated(literal(`/`), nameComponentRegexp))))

	// ReferenceRegexp is the full supported format of a reference. The regexp
	// is anchored and has capturing groups for name, tag, and digest
	// components.
	ReferenceRegexp = anchored(capture(NameRegexp),
		optional(literal(":"), capture(TagRegexp)),
		optional(literal("@"), capture(DigestRegexp)))

	// IdentifierRegexp is the format for string identifier used as a
	// content addressable identifier using sha256. These identifiers
	// are like digests without the algorithm, since sha256 is used.
	IdentifierRegexp = match(`([a-f0-9]{64})`)

	// ShortIdentifierRegexp is the format used to represent a prefix
	// of an identifier. A prefix may be used to match a sha256 identifier
	// within a list of trusted identifiers.
	ShortIdentifierRegexp = match(`([a-f0-9]{6,64})`)

	// anchoredIdentifierRegexp is used to check or match an
	// identifier value, anchored at start and end of string.
	anchoredIdentifierRegexp = anchored(IdentifierRegexp)

	// anchoredShortIdentifierRegexp is used to check if a value
	// is a possible identifier prefix, anchored at start and end
	// of string.
	anchoredShortIdentifierRegexp = anchored(ShortIdentifierRegexp)
)

// match compiles the string to a regular expression.
var match = regexp.MustCompile

// literal compiles s into a literal regular expression, escaping any regexp
// reserved characters.
func literal(s string) *regexp.Regexp {
	re := match(regexp.QuoteMeta(s))

	if _, complete := re.LiteralPrefix(); !complete {
		panic("must be a literal")
	}

	return re
}

// expression defines a full expression, where each regular expression must
// follow the previous.
func expression(res ...*regexp.Regexp) *regexp.Regexp {
	var s string
	for _, re := range res {
		s += re.String()
	}

	return match(s)
}

// optional wraps the expression in a non-capturing group and makes the
// production optional.
func optional(res ...*regexp.Regexp) *regexp.Regexp {
	return match(group(expression(res...)).String() + `?`)
}

// repeated wraps the regexp in a non-capturing group to get one or more
// matches.
func repeated(res ...*regexp.Regexp) *regexp.Regexp {
	return match(group(expression(res...)).String() + `+`)
}

// group wraps the regexp in a non-capturing group.
func group(res ...*regexp.Regexp) *regexp.Regexp {
	return match(`(?:` + expression(res...).String() + `)`)
}

// capture wraps the expression in a capturing group.
func capture(res ...*regexp.Regexp) *regexp.Regexp {
	return match(`(` + expression(res...).String() + `)`)
}

// anchored anchors the regular expression by adding start and end delimiters.
func anchored(res ...*regexp.Regexp) *regexp.Regexp {
	return match(`^` + expression(res...).String() + `$`)
}
  0707010000037A000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/docker/distribution/registry    0707010000037B000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/docker/distribution/registry/client 0707010000037C000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/docker/distribution/registry/client/auth    0707010000037D000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/docker/distribution/registry/client/auth/challenge  0707010000037E000081A4000000000000000000000001645E367C000002BF000000000000000000000000000000000000006100000000elemental-cli-0.3.1/vendor/github.com/docker/distribution/registry/client/auth/challenge/addr.go  package challenge

import (
	"net/url"
	"strings"
)

// FROM: https://golang.org/src/net/http/http.go
// Given a string of the form "host", "host:port", or "[ipv6::address]:port",
// return true if the string includes a port.
func hasPort(s string) bool { return strings.LastIndex(s, ":") > strings.LastIndex(s, "]") }

// FROM: http://golang.org/src/net/http/transport.go
var portMap = map[string]string{
	"http":  "80",
	"https": "443",
}

// canonicalAddr returns url.Host but always with a ":port" suffix
// FROM: http://golang.org/src/net/http/transport.go
func canonicalAddr(url *url.URL) string {
	addr := url.Host
	if !hasPort(addr) {
		return addr + ":" + portMap[url.Scheme]
	}
	return addr
}
 0707010000037F000081A4000000000000000000000001645E367C000016BF000000000000000000000000000000000000006A00000000elemental-cli-0.3.1/vendor/github.com/docker/distribution/registry/client/auth/challenge/authchallenge.go package challenge

import (
	"fmt"
	"net/http"
	"net/url"
	"strings"
	"sync"
)

// Challenge carries information from a WWW-Authenticate response header.
// See RFC 2617.
type Challenge struct {
	// Scheme is the auth-scheme according to RFC 2617
	Scheme string

	// Parameters are the auth-params according to RFC 2617
	Parameters map[string]string
}

// Manager manages the challenges for endpoints.
// The challenges are pulled out of HTTP responses. Only
// responses which expect challenges should be added to
// the manager, since a non-unauthorized request will be
// viewed as not requiring challenges.
type Manager interface {
	// GetChallenges returns the challenges for the given
	// endpoint URL.
	GetChallenges(endpoint url.URL) ([]Challenge, error)

	// AddResponse adds the response to the challenge
	// manager. The challenges will be parsed out of
	// the WWW-Authenicate headers and added to the
	// URL which was produced the response. If the
	// response was authorized, any challenges for the
	// endpoint will be cleared.
	AddResponse(resp *http.Response) error
}

// NewSimpleManager returns an instance of
// Manger which only maps endpoints to challenges
// based on the responses which have been added the
// manager. The simple manager will make no attempt to
// perform requests on the endpoints or cache the responses
// to a backend.
func NewSimpleManager() Manager {
	return &simpleManager{
		Challenges: make(map[string][]Challenge),
	}
}

type simpleManager struct {
	sync.RWMutex
	Challenges map[string][]Challenge
}

func normalizeURL(endpoint *url.URL) {
	endpoint.Host = strings.ToLower(endpoint.Host)
	endpoint.Host = canonicalAddr(endpoint)
}

func (m *simpleManager) GetChallenges(endpoint url.URL) ([]Challenge, error) {
	normalizeURL(&endpoint)

	m.RLock()
	defer m.RUnlock()
	challenges := m.Challenges[endpoint.String()]
	return challenges, nil
}

func (m *simpleManager) AddResponse(resp *http.Response) error {
	challenges := ResponseChallenges(resp)
	if resp.Request == nil {
		return fmt.Errorf("missing request reference")
	}
	urlCopy := url.URL{
		Path:   resp.Request.URL.Path,
		Host:   resp.Request.URL.Host,
		Scheme: resp.Request.URL.Scheme,
	}
	normalizeURL(&urlCopy)

	m.Lock()
	defer m.Unlock()
	m.Challenges[urlCopy.String()] = challenges
	return nil
}

// Octet types from RFC 2616.
type octetType byte

var octetTypes [256]octetType

const (
	isToken octetType = 1 << iota
	isSpace
)

func init() {
	// OCTET      = <any 8-bit sequence of data>
	// CHAR       = <any US-ASCII character (octets 0 - 127)>
	// CTL        = <any US-ASCII control character (octets 0 - 31) and DEL (127)>
	// CR         = <US-ASCII CR, carriage return (13)>
	// LF         = <US-ASCII LF, linefeed (10)>
	// SP         = <US-ASCII SP, space (32)>
	// HT         = <US-ASCII HT, horizontal-tab (9)>
	// <">        = <US-ASCII double-quote mark (34)>
	// CRLF       = CR LF
	// LWS        = [CRLF] 1*( SP | HT )
	// TEXT       = <any OCTET except CTLs, but including LWS>
	// separators = "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <">
	//              | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT
	// token      = 1*<any CHAR except CTLs or separators>
	// qdtext     = <any TEXT except <">>

	for c := 0; c < 256; c++ {
		var t octetType
		isCtl := c <= 31 || c == 127
		isChar := 0 <= c && c <= 127
		isSeparator := strings.ContainsRune(" \t\"(),/:;<=>?@[]\\{}", rune(c))
		if strings.ContainsRune(" \t\r\n", rune(c)) {
			t |= isSpace
		}
		if isChar && !isCtl && !isSeparator {
			t |= isToken
		}
		octetTypes[c] = t
	}
}

// ResponseChallenges returns a list of authorization challenges
// for the given http Response. Challenges are only checked if
// the response status code was a 401.
func ResponseChallenges(resp *http.Response) []Challenge {
	if resp.StatusCode == http.StatusUnauthorized {
		// Parse the WWW-Authenticate Header and store the challenges
		// on this endpoint object.
		return parseAuthHeader(resp.Header)
	}

	return nil
}

func parseAuthHeader(header http.Header) []Challenge {
	challenges := []Challenge{}
	for _, h := range header[http.CanonicalHeaderKey("WWW-Authenticate")] {
		v, p := parseValueAndParams(h)
		if v != "" {
			challenges = append(challenges, Challenge{Scheme: v, Parameters: p})
		}
	}
	return challenges
}

func parseValueAndParams(header string) (value string, params map[string]string) {
	params = make(map[string]string)
	value, s := expectToken(header)
	if value == "" {
		return
	}
	value = strings.ToLower(value)
	s = "," + skipSpace(s)
	for strings.HasPrefix(s, ",") {
		var pkey string
		pkey, s = expectToken(skipSpace(s[1:]))
		if pkey == "" {
			return
		}
		if !strings.HasPrefix(s, "=") {
			return
		}
		var pvalue string
		pvalue, s = expectTokenOrQuoted(s[1:])
		if pvalue == "" {
			return
		}
		pkey = strings.ToLower(pkey)
		params[pkey] = pvalue
		s = skipSpace(s)
	}
	return
}

func skipSpace(s string) (rest string) {
	i := 0
	for ; i < len(s); i++ {
		if octetTypes[s[i]]&isSpace == 0 {
			break
		}
	}
	return s[i:]
}

func expectToken(s string) (token, rest string) {
	i := 0
	for ; i < len(s); i++ {
		if octetTypes[s[i]]&isToken == 0 {
			break
		}
	}
	return s[:i], s[i:]
}

func expectTokenOrQuoted(s string) (value string, rest string) {
	if !strings.HasPrefix(s, "\"") {
		return expectToken(s)
	}
	s = s[1:]
	for i := 0; i < len(s); i++ {
		switch s[i] {
		case '"':
			return s[:i], s[i+1:]
		case '\\':
			p := make([]byte, len(s)-1)
			j := copy(p, s[:i])
			escape := true
			for i = i + 1; i < len(s); i++ {
				b := s[i]
				switch {
				case escape:
					escape = false
					p[j] = b
					j++
				case b == '\\':
					escape = true
				case b == '"':
					return string(p[:j]), s[i+1:]
				default:
					p[j] = b
					j++
				}
			}
			return "", ""
		}
	}
	return "", ""
}
 07070100000380000041ED000000000000000000000006645E367C00000000000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/github.com/docker/docker   07070100000381000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/docker/docker-credential-helpers    07070100000382000081A4000000000000000000000001645E367C00000422000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/docker/docker-credential-helpers/LICENSE    Copyright (c) 2016 David Calavera

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  07070100000383000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/docker/docker-credential-helpers/client 07070100000384000081A4000000000000000000000001645E367C00000C23000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/docker/docker-credential-helpers/client/client.go   package client

import (
	"bytes"
	"encoding/json"
	"fmt"
	"strings"

	"github.com/docker/docker-credential-helpers/credentials"
)

// isValidCredsMessage checks if 'msg' contains invalid credentials error message.
// It returns whether the logs are free of invalid credentials errors and the error if it isn't.
// error values can be errCredentialsMissingServerURL or errCredentialsMissingUsername.
func isValidCredsMessage(msg string) error {
	if credentials.IsCredentialsMissingServerURLMessage(msg) {
		return credentials.NewErrCredentialsMissingServerURL()
	}

	if credentials.IsCredentialsMissingUsernameMessage(msg) {
		return credentials.NewErrCredentialsMissingUsername()
	}

	return nil
}

// Store uses an external program to save credentials.
func Store(program ProgramFunc, creds *credentials.Credentials) error {
	cmd := program("store")

	buffer := new(bytes.Buffer)
	if err := json.NewEncoder(buffer).Encode(creds); err != nil {
		return err
	}
	cmd.Input(buffer)

	out, err := cmd.Output()
	if err != nil {
		t := strings.TrimSpace(string(out))

		if isValidErr := isValidCredsMessage(t); isValidErr != nil {
			err = isValidErr
		}

		return fmt.Errorf("error storing credentials - err: %v, out: `%s`", err, t)
	}

	return nil
}

// Get executes an external program to get the credentials from a native store.
func Get(program ProgramFunc, serverURL string) (*credentials.Credentials, error) {
	cmd := program("get")
	cmd.Input(strings.NewReader(serverURL))

	out, err := cmd.Output()
	if err != nil {
		t := strings.TrimSpace(string(out))

		if credentials.IsErrCredentialsNotFoundMessage(t) {
			return nil, credentials.NewErrCredentialsNotFound()
		}

		if isValidErr := isValidCredsMessage(t); isValidErr != nil {
			err = isValidErr
		}

		return nil, fmt.Errorf("error getting credentials - err: %v, out: `%s`", err, t)
	}

	resp := &credentials.Credentials{
		ServerURL: serverURL,
	}

	if err := json.NewDecoder(bytes.NewReader(out)).Decode(resp); err != nil {
		return nil, err
	}

	return resp, nil
}

// Erase executes a program to remove the server credentials from the native store.
func Erase(program ProgramFunc, serverURL string) error {
	cmd := program("erase")
	cmd.Input(strings.NewReader(serverURL))
	out, err := cmd.Output()
	if err != nil {
		t := strings.TrimSpace(string(out))

		if isValidErr := isValidCredsMessage(t); isValidErr != nil {
			err = isValidErr
		}

		return fmt.Errorf("error erasing credentials - err: %v, out: `%s`", err, t)
	}

	return nil
}

// List executes a program to list server credentials in the native store.
func List(program ProgramFunc) (map[string]string, error) {
	cmd := program("list")
	cmd.Input(strings.NewReader("unused"))
	out, err := cmd.Output()
	if err != nil {
		t := strings.TrimSpace(string(out))

		if isValidErr := isValidCredsMessage(t); isValidErr != nil {
			err = isValidErr
		}

		return nil, fmt.Errorf("error listing credentials - err: %v, out: `%s`", err, t)
	}

	var resp map[string]string
	if err = json.NewDecoder(bytes.NewReader(out)).Decode(&resp); err != nil {
		return nil, err
	}

	return resp, nil
}
 07070100000385000081A4000000000000000000000001645E367C00000603000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/docker/docker-credential-helpers/client/command.go  package client

import (
	"fmt"
	"io"
	"os"

	exec "golang.org/x/sys/execabs"
)

// Program is an interface to execute external programs.
type Program interface {
	Output() ([]byte, error)
	Input(in io.Reader)
}

// ProgramFunc is a type of function that initializes programs based on arguments.
type ProgramFunc func(args ...string) Program

// NewShellProgramFunc creates programs that are executed in a Shell.
func NewShellProgramFunc(name string) ProgramFunc {
	return NewShellProgramFuncWithEnv(name, nil)
}

// NewShellProgramFuncWithEnv creates programs that are executed in a Shell with environment variables
func NewShellProgramFuncWithEnv(name string, env *map[string]string) ProgramFunc {
	return func(args ...string) Program {
		return &Shell{cmd: createProgramCmdRedirectErr(name, args, env)}
	}
}

func createProgramCmdRedirectErr(commandName string, args []string, env *map[string]string) *exec.Cmd {
	programCmd := exec.Command(commandName, args...)
	programCmd.Env = os.Environ()
	if env != nil {
		for k, v := range *env {
			programCmd.Env = append(programCmd.Env, fmt.Sprintf("%s=%s", k, v))
		}
	}
	programCmd.Stderr = os.Stderr
	return programCmd
}

// Shell invokes shell commands to talk with a remote credentials helper.
type Shell struct {
	cmd *exec.Cmd
}

// Output returns responses from the remote credentials helper.
func (s *Shell) Output() ([]byte, error) {
	return s.cmd.Output()
}

// Input sets the input to send to a remote credentials helper.
func (s *Shell) Input(in io.Reader) {
	s.cmd.Stdin = in
}
 07070100000386000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/docker/docker-credential-helpers/credentials    07070100000387000081A4000000000000000000000001645E367C0000125C000000000000000000000000000000000000006200000000elemental-cli-0.3.1/vendor/github.com/docker/docker-credential-helpers/credentials/credentials.go package credentials

import (
	"bufio"
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	"os"
	"strings"
)

// Credentials holds the information shared between docker and the credentials store.
type Credentials struct {
	ServerURL string
	Username  string
	Secret    string
}

// isValid checks the integrity of Credentials object such that no credentials lack
// a server URL or a username.
// It returns whether the credentials are valid and the error if it isn't.
// error values can be errCredentialsMissingServerURL or errCredentialsMissingUsername
func (c *Credentials) isValid() (bool, error) {
	if len(c.ServerURL) == 0 {
		return false, NewErrCredentialsMissingServerURL()
	}

	if len(c.Username) == 0 {
		return false, NewErrCredentialsMissingUsername()
	}

	return true, nil
}

// CredsLabel holds the way Docker credentials should be labeled as such in credentials stores that allow labelling.
// That label allows to filter out non-Docker credentials too at lookup/search in macOS keychain,
// Windows credentials manager and Linux libsecret. Default value is "Docker Credentials"
var CredsLabel = "Docker Credentials"

// SetCredsLabel is a simple setter for CredsLabel
func SetCredsLabel(label string) {
	CredsLabel = label
}

// Serve initializes the credentials helper and parses the action argument.
// This function is designed to be called from a command line interface.
// It uses os.Args[1] as the key for the action.
// It uses os.Stdin as input and os.Stdout as output.
// This function terminates the program with os.Exit(1) if there is an error.
func Serve(helper Helper) {
	var err error
	if len(os.Args) != 2 {
		err = fmt.Errorf("Usage: %s <store|get|erase|list|version>", os.Args[0])
	}

	if err == nil {
		err = HandleCommand(helper, os.Args[1], os.Stdin, os.Stdout)
	}

	if err != nil {
		fmt.Fprintf(os.Stdout, "%v\n", err)
		os.Exit(1)
	}
}

// HandleCommand uses a helper and a key to run a credential action.
func HandleCommand(helper Helper, key string, in io.Reader, out io.Writer) error {
	switch key {
	case "store":
		return Store(helper, in)
	case "get":
		return Get(helper, in, out)
	case "erase":
		return Erase(helper, in)
	case "list":
		return List(helper, out)
	case "version":
		return PrintVersion(out)
	}
	return fmt.Errorf("Unknown credential action `%s`", key)
}

// Store uses a helper and an input reader to save credentials.
// The reader must contain the JSON serialization of a Credentials struct.
func Store(helper Helper, reader io.Reader) error {
	scanner := bufio.NewScanner(reader)

	buffer := new(bytes.Buffer)
	for scanner.Scan() {
		buffer.Write(scanner.Bytes())
	}

	if err := scanner.Err(); err != nil && err != io.EOF {
		return err
	}

	var creds Credentials
	if err := json.NewDecoder(buffer).Decode(&creds); err != nil {
		return err
	}

	if ok, err := creds.isValid(); !ok {
		return err
	}

	return helper.Add(&creds)
}

// Get retrieves the credentials for a given server url.
// The reader must contain the server URL to search.
// The writer is used to write the JSON serialization of the credentials.
func Get(helper Helper, reader io.Reader, writer io.Writer) error {
	scanner := bufio.NewScanner(reader)

	buffer := new(bytes.Buffer)
	for scanner.Scan() {
		buffer.Write(scanner.Bytes())
	}

	if err := scanner.Err(); err != nil && err != io.EOF {
		return err
	}

	serverURL := strings.TrimSpace(buffer.String())
	if len(serverURL) == 0 {
		return NewErrCredentialsMissingServerURL()
	}

	username, secret, err := helper.Get(serverURL)
	if err != nil {
		return err
	}

	resp := Credentials{
		ServerURL: serverURL,
		Username:  username,
		Secret:    secret,
	}

	buffer.Reset()
	if err := json.NewEncoder(buffer).Encode(resp); err != nil {
		return err
	}

	fmt.Fprint(writer, buffer.String())
	return nil
}

// Erase removes credentials from the store.
// The reader must contain the server URL to remove.
func Erase(helper Helper, reader io.Reader) error {
	scanner := bufio.NewScanner(reader)

	buffer := new(bytes.Buffer)
	for scanner.Scan() {
		buffer.Write(scanner.Bytes())
	}

	if err := scanner.Err(); err != nil && err != io.EOF {
		return err
	}

	serverURL := strings.TrimSpace(buffer.String())
	if len(serverURL) == 0 {
		return NewErrCredentialsMissingServerURL()
	}

	return helper.Delete(serverURL)
}

// List returns all the serverURLs of keys in
// the OS store as a list of strings
func List(helper Helper, writer io.Writer) error {
	accts, err := helper.List()
	if err != nil {
		return err
	}
	return json.NewEncoder(writer).Encode(accts)
}

// PrintVersion outputs the current version.
func PrintVersion(writer io.Writer) error {
	fmt.Fprintf(writer, "%s (%s) %s\n", Name, Package, Version)
	return nil
}
07070100000388000081A4000000000000000000000001645E367C00000DA2000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker-credential-helpers/credentials/error.go   package credentials

const (
	// ErrCredentialsNotFound standardizes the not found error, so every helper returns
	// the same message and docker can handle it properly.
	errCredentialsNotFoundMessage = "credentials not found in native keychain"

	// ErrCredentialsMissingServerURL and ErrCredentialsMissingUsername standardize
	// invalid credentials or credentials management operations
	errCredentialsMissingServerURLMessage = "no credentials server URL"
	errCredentialsMissingUsernameMessage  = "no credentials username"
)

// errCredentialsNotFound represents an error
// raised when credentials are not in the store.
type errCredentialsNotFound struct{}

// Error returns the standard error message
// for when the credentials are not in the store.
func (errCredentialsNotFound) Error() string {
	return errCredentialsNotFoundMessage
}

// NewErrCredentialsNotFound creates a new error
// for when the credentials are not in the store.
func NewErrCredentialsNotFound() error {
	return errCredentialsNotFound{}
}

// IsErrCredentialsNotFound returns true if the error
// was caused by not having a set of credentials in a store.
func IsErrCredentialsNotFound(err error) bool {
	_, ok := err.(errCredentialsNotFound)
	return ok
}

// IsErrCredentialsNotFoundMessage returns true if the error
// was caused by not having a set of credentials in a store.
//
// This function helps to check messages returned by an
// external program via its standard output.
func IsErrCredentialsNotFoundMessage(err string) bool {
	return err == errCredentialsNotFoundMessage
}

// errCredentialsMissingServerURL represents an error raised
// when the credentials object has no server URL or when no
// server URL is provided to a credentials operation requiring
// one.
type errCredentialsMissingServerURL struct{}

func (errCredentialsMissingServerURL) Error() string {
	return errCredentialsMissingServerURLMessage
}

// errCredentialsMissingUsername represents an error raised
// when the credentials object has no username or when no
// username is provided to a credentials operation requiring
// one.
type errCredentialsMissingUsername struct{}

func (errCredentialsMissingUsername) Error() string {
	return errCredentialsMissingUsernameMessage
}

// NewErrCredentialsMissingServerURL creates a new error for
// errCredentialsMissingServerURL.
func NewErrCredentialsMissingServerURL() error {
	return errCredentialsMissingServerURL{}
}

// NewErrCredentialsMissingUsername creates a new error for
// errCredentialsMissingUsername.
func NewErrCredentialsMissingUsername() error {
	return errCredentialsMissingUsername{}
}

// IsCredentialsMissingServerURL returns true if the error
// was an errCredentialsMissingServerURL.
func IsCredentialsMissingServerURL(err error) bool {
	_, ok := err.(errCredentialsMissingServerURL)
	return ok
}

// IsCredentialsMissingServerURLMessage checks for an
// errCredentialsMissingServerURL in the error message.
func IsCredentialsMissingServerURLMessage(err string) bool {
	return err == errCredentialsMissingServerURLMessage
}

// IsCredentialsMissingUsername returns true if the error
// was an errCredentialsMissingUsername.
func IsCredentialsMissingUsername(err error) bool {
	_, ok := err.(errCredentialsMissingUsername)
	return ok
}

// IsCredentialsMissingUsernameMessage checks for an
// errCredentialsMissingUsername in the error message.
func IsCredentialsMissingUsernameMessage(err string) bool {
	return err == errCredentialsMissingUsernameMessage
}
  07070100000389000081A4000000000000000000000001645E367C000001FD000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/docker/docker-credential-helpers/credentials/helper.go  package credentials

// Helper is the interface a credentials store helper must implement.
type Helper interface {
	// Add appends credentials to the store.
	Add(*Credentials) error
	// Delete removes credentials from the store.
	Delete(serverURL string) error
	// Get retrieves credentials from the store.
	// It returns username and secret as strings.
	Get(serverURL string) (string, string, error)
	// List returns the stored serverURLs and their associated usernames.
	List() (map[string]string, error)
}
   0707010000038A000081A4000000000000000000000001645E367C0000018F000000000000000000000000000000000000005E00000000elemental-cli-0.3.1/vendor/github.com/docker/docker-credential-helpers/credentials/version.go package credentials

var (
	// Name is filled at linking time
	Name = ""

	// Package is filled at linking time
	Package = "github.com/docker/docker-credential-helpers"

	// Version holds the complete version number. Filled in at linking time.
	Version = "v0.0.0+unknown"

	// Revision is filled with the VCS (e.g. git) revision being used to build
	// the program at linking time.
	Revision = ""
)
 0707010000038B000081A4000000000000000000000001645E367C00015BEF000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/AUTHORS   # File @generated by hack/generate-authors.sh. DO NOT EDIT.
# This file lists all contributors to the repository.
# See hack/generate-authors.sh to make modifications.

Aanand Prasad <aanand.prasad@gmail.com>
Aaron Davidson <aaron@databricks.com>
Aaron Feng <aaron.feng@gmail.com>
Aaron Hnatiw <aaron@griddio.com>
Aaron Huslage <huslage@gmail.com>
Aaron L. Xu <liker.xu@foxmail.com>
Aaron Lehmann <alehmann@netflix.com>
Aaron Welch <welch@packet.net>
Abel Muiño <amuino@gmail.com>
Abhijeet Kasurde <akasurde@redhat.com>
Abhinandan Prativadi <aprativadi@gmail.com>
Abhinav Ajgaonkar <abhinav316@gmail.com>
Abhishek Chanda <abhishek.becs@gmail.com>
Abhishek Sharma <abhishek@asharma.me>
Abin Shahab <ashahab@altiscale.com>
Abirdcfly <fp544037857@gmail.com>
Ada Mancini <ada@docker.com>
Adam Avilla <aavilla@yp.com>
Adam Dobrawy <naczelnik@jawnosc.tk>
Adam Eijdenberg <adam.eijdenberg@gmail.com>
Adam Kunk <adam.kunk@tiaa-cref.org>
Adam Miller <admiller@redhat.com>
Adam Mills <adam@armills.info>
Adam Pointer <adam.pointer@skybettingandgaming.com>
Adam Singer <financeCoding@gmail.com>
Adam Walz <adam@adamwalz.net>
Adam Williams <awilliams@mirantis.com>
Addam Hardy <addam.hardy@gmail.com>
Aditi Rajagopal <arajagopal@us.ibm.com>
Aditya <aditya@netroy.in>
Adnan Khan <adnkha@amazon.com>
Adolfo Ochagavía <aochagavia92@gmail.com>
Adria Casas <adriacasas88@gmail.com>
Adrian Moisey <adrian@changeover.za.net>
Adrian Mouat <adrian.mouat@gmail.com>
Adrian Oprea <adrian@codesi.nz>
Adrien Folie <folie.adrien@gmail.com>
Adrien Gallouët <adrien@gallouet.fr>
Ahmed Kamal <email.ahmedkamal@googlemail.com>
Ahmet Alp Balkan <ahmetb@microsoft.com>
Aidan Feldman <aidan.feldman@gmail.com>
Aidan Hobson Sayers <aidanhs@cantab.net>
AJ Bowen <aj@soulshake.net>
Ajey Charantimath <ajey.charantimath@gmail.com>
ajneu <ajneu@users.noreply.github.com>
Akash Gupta <akagup@microsoft.com>
Akhil Mohan <akhil.mohan@mayadata.io>
Akihiro Matsushima <amatsusbit@gmail.com>
Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
Akim Demaille <akim.demaille@docker.com>
Akira Koyasu <mail@akirakoyasu.net>
Akshay Karle <akshay.a.karle@gmail.com>
Akshay Moghe <akshay.moghe@gmail.com>
Al Tobey <al@ooyala.com>
alambike <alambike@gmail.com>
Alan Hoyle <alan@alanhoyle.com>
Alan Scherger <flyinprogrammer@gmail.com>
Alan Thompson <cloojure@gmail.com>
Albert Callarisa <shark234@gmail.com>
Albert Zhang <zhgwenming@gmail.com>
Albin Kerouanton <albinker@gmail.com>
Alec Benson <albenson@redhat.com>
Alejandro González Hevia <alejandrgh11@gmail.com>
Aleksa Sarai <asarai@suse.de>
Aleksandr Chebotov <v-aleche@microsoft.com>
Aleksandrs Fadins <aleks@s-ko.net>
Alena Prokharchyk <alena@rancher.com>
Alessandro Boch <aboch@tetrationanalytics.com>
Alessio Biancalana <dottorblaster@gmail.com>
Alex Chan <alex@alexwlchan.net>
Alex Chen <alexchenunix@gmail.com>
Alex Coventry <alx@empirical.com>
Alex Crawford <alex.crawford@coreos.com>
Alex Ellis <alexellis2@gmail.com>
Alex Gaynor <alex.gaynor@gmail.com>
Alex Goodman <wagoodman@gmail.com>
Alex Nordlund <alexander.nordlund@nasdaq.com>
Alex Olshansky <i@creagenics.com>
Alex Samorukov <samm@os2.kiev.ua>
Alex Warhawk <ax.warhawk@gmail.com>
Alexander Artemenko <svetlyak.40wt@gmail.com>
Alexander Boyd <alex@opengroove.org>
Alexander Larsson <alexl@redhat.com>
Alexander Midlash <amidlash@docker.com>
Alexander Morozov <lk4d4math@gmail.com>
Alexander Polakov <plhk@sdf.org>
Alexander Shopov <ash@kambanaria.org>
Alexandre Beslic <alexandre.beslic@gmail.com>
Alexandre Garnier <zigarn@gmail.com>
Alexandre González <agonzalezro@gmail.com>
Alexandre Jomin <alexandrejomin@gmail.com>
Alexandru Sfirlogea <alexandru.sfirlogea@gmail.com>
Alexei Margasov <alexei38@yandex.ru>
Alexey Guskov <lexag@mail.ru>
Alexey Kotlyarov <alexey@infoxchange.net.au>
Alexey Shamrin <shamrin@gmail.com>
Alexis Ries <ries.alexis@gmail.com>
Alexis Thomas <fr.alexisthomas@gmail.com>
Alfred Landrum <alfred.landrum@docker.com>
Ali Dehghani <ali.dehghani.g@gmail.com>
Alicia Lauerman <alicia@eta.im>
Alihan Demir <alihan_6153@hotmail.com>
Allen Madsen <blatyo@gmail.com>
Allen Sun <allensun.shl@alibaba-inc.com>
almoehi <almoehi@users.noreply.github.com>
Alvaro Saurin <alvaro.saurin@gmail.com>
Alvin Deng <alvin.q.deng@utexas.edu>
Alvin Richards <alvin.richards@docker.com>
amangoel <amangoel@gmail.com>
Amen Belayneh <amenbelayneh@gmail.com>
Ameya Gawde <agawde@mirantis.com>
Amir Goldstein <amir73il@aquasec.com>
Amit Bakshi <ambakshi@gmail.com>
Amit Krishnan <amit.krishnan@oracle.com>
Amit Shukla <amit.shukla@docker.com>
Amr Gawish <amr.gawish@gmail.com>
Amy Lindburg <amy.lindburg@docker.com>
Anand Patil <anand.prabhakar.patil@gmail.com>
AnandkumarPatel <anandkumarpatel@gmail.com>
Anatoly Borodin <anatoly.borodin@gmail.com>
Anca Iordache <anca.iordache@docker.com>
Anchal Agrawal <aagrawa4@illinois.edu>
Anda Xu <anda.xu@docker.com>
Anders Janmyr <anders@janmyr.com>
Andre Dublin <81dublin@gmail.com>
Andre Granovsky <robotciti@live.com>
Andrea Denisse Gómez <crypto.andrea@protonmail.ch>
Andrea Luzzardi <aluzzardi@gmail.com>
Andrea Turli <andrea.turli@gmail.com>
Andreas Elvers <andreas@work.de>
Andreas Köhler <andi5.py@gmx.net>
Andreas Savvides <andreas@editd.com>
Andreas Tiefenthaler <at@an-ti.eu>
Andrei Gherzan <andrei@resin.io>
Andrei Ushakov <aushakov@netflix.com>
Andrei Vagin <avagin@gmail.com>
Andrew C. Bodine <acbodine@us.ibm.com>
Andrew Clay Shafer <andrewcshafer@gmail.com>
Andrew Duckworth <grillopress@gmail.com>
Andrew France <andrew@avito.co.uk>
Andrew Gerrand <adg@golang.org>
Andrew Guenther <guenther.andrew.j@gmail.com>
Andrew He <he.andrew.mail@gmail.com>
Andrew Hsu <andrewhsu@docker.com>
Andrew Kim <taeyeonkim90@gmail.com>
Andrew Kuklewicz <kookster@gmail.com>
Andrew Macgregor <andrew.macgregor@agworld.com.au>
Andrew Macpherson <hopscotch23@gmail.com>
Andrew Martin <sublimino@gmail.com>
Andrew McDonnell <bugs@andrewmcdonnell.net>
Andrew Munsell <andrew@wizardapps.net>
Andrew Pennebaker <andrew.pennebaker@gmail.com>
Andrew Po <absourd.noise@gmail.com>
Andrew Weiss <andrew.weiss@docker.com>
Andrew Williams <williams.andrew@gmail.com>
Andrews Medina <andrewsmedina@gmail.com>
Andrey Kolomentsev <andrey.kolomentsev@docker.com>
Andrey Petrov <andrey.petrov@shazow.net>
Andrey Stolbovsky <andrey.stolbovsky@gmail.com>
André Martins <aanm90@gmail.com>
Andy Chambers <anchambers@paypal.com>
andy diller <dillera@gmail.com>
Andy Goldstein <agoldste@redhat.com>
Andy Kipp <andy@rstudio.com>
Andy Lindeman <alindeman@salesforce.com>
Andy Rothfusz <github@developersupport.net>
Andy Smith <github@anarkystic.com>
Andy Wilson <wilson.andrew.j+github@gmail.com>
Andy Zhang <andy.zhangtao@hotmail.com>
Anes Hasicic <anes.hasicic@gmail.com>
Angel Velazquez <angelcar@amazon.com>
Anil Belur <askb23@gmail.com>
Anil Madhavapeddy <anil@recoil.org>
Ankit Jain <ajatkj@yahoo.co.in>
Ankush Agarwal <ankushagarwal11@gmail.com>
Anonmily <michelle@michelleliu.io>
Anran Qiao <anran.qiao@daocloud.io>
Anshul Pundir <anshul.pundir@docker.com>
Anthon van der Neut <anthon@mnt.org>
Anthony Baire <Anthony.Baire@irisa.fr>
Anthony Bishopric <git@anthonybishopric.com>
Anthony Dahanne <anthony.dahanne@gmail.com>
Anthony Sottile <asottile@umich.edu>
Anton Löfgren <anton.lofgren@gmail.com>
Anton Nikitin <anton.k.nikitin@gmail.com>
Anton Polonskiy <anton.polonskiy@gmail.com>
Anton Tiurin <noxiouz@yandex.ru>
Antonio Murdaca <antonio.murdaca@gmail.com>
Antonis Kalipetis <akalipetis@gmail.com>
Antony Messerli <amesserl@rackspace.com>
Anuj Bahuguna <anujbahuguna.dev@gmail.com>
Anuj Varma <anujvarma@thumbtack.com>
Anusha Ragunathan <anusha.ragunathan@docker.com>
Anyu Wang <wanganyu@outlook.com>
apocas <petermdias@gmail.com>
Arash Deshmeh <adeshmeh@ca.ibm.com>
ArikaChen <eaglesora@gmail.com>
Arko Dasgupta <arko@tetrate.io>
Arnaud Lefebvre <a.lefebvre@outlook.fr>
Arnaud Porterie <icecrime@gmail.com>
Arnaud Rebillout <arnaud.rebillout@collabora.com>
Artem Khramov <akhramov@pm.me>
Arthur Barr <arthur.barr@uk.ibm.com>
Arthur Gautier <baloo@gandi.net>
Artur Meyster <arthurfbi@yahoo.com>
Arun Gupta <arun.gupta@gmail.com>
Asad Saeeduddin <masaeedu@gmail.com>
Asbjørn Enge <asbjorn@hanafjedle.net>
Austin Vazquez <macedonv@amazon.com>
averagehuman <averagehuman@users.noreply.github.com>
Avi Das <andas222@gmail.com>
Avi Kivity <avi@scylladb.com>
Avi Miller <avi.miller@oracle.com>
Avi Vaid <avaid1996@gmail.com>
ayoshitake <airandfingers@gmail.com>
Azat Khuyiyakhmetov <shadow_uz@mail.ru>
Bao Yonglei <baoyonglei@huawei.com>
Bardia Keyoumarsi <bkeyouma@ucsc.edu>
Barnaby Gray <barnaby@pickle.me.uk>
Barry Allard <barry.allard@gmail.com>
Bartłomiej Piotrowski <b@bpiotrowski.pl>
Bastiaan Bakker <bbakker@xebia.com>
Bastien Pascard <bpascard@hotmail.com>
bdevloed <boris.de.vloed@gmail.com>
Bearice Ren <bearice@gmail.com>
Ben Bonnefoy <frenchben@docker.com>
Ben Firshman <ben@firshman.co.uk>
Ben Golub <ben.golub@dotcloud.com>
Ben Gould <ben@bengould.co.uk>
Ben Hall <ben@benhall.me.uk>
Ben Langfeld <ben@langfeld.me>
Ben Sargent <ben@brokendigits.com>
Ben Severson <BenSeverson@users.noreply.github.com>
Ben Toews <mastahyeti@gmail.com>
Ben Wiklund <ben@daisyowl.com>
Benjamin Atkin <ben@benatkin.com>
Benjamin Baker <Benjamin.baker@utexas.edu>
Benjamin Boudreau <boudreau.benjamin@gmail.com>
Benjamin Böhmke <benjamin@boehmke.net>
Benjamin Yolken <yolken@stripe.com>
Benny Ng <benny.tpng@gmail.com>
Benoit Chesneau <bchesneau@gmail.com>
Bernerd Schaefer <bj.schaefer@gmail.com>
Bernhard M. Wiedemann <bwiedemann@suse.de>
Bert Goethals <bert@bertg.be>
Bertrand Roussel <broussel@sierrawireless.com>
Bevisy Zhang <binbin36520@gmail.com>
Bharath Thiruveedula <bharath_ves@hotmail.com>
Bhiraj Butala <abhiraj.butala@gmail.com>
Bhumika Bayani <bhumikabayani@gmail.com>
Bilal Amarni <bilal.amarni@gmail.com>
Bill Wang <ozbillwang@gmail.com>
Billy Ridgway <wrridgwa@us.ibm.com>
Bily Zhang <xcoder@tenxcloud.com>
Bin Liu <liubin0329@gmail.com>
Bingshen Wang <bingshen.wbs@alibaba-inc.com>
Bjorn Neergaard <bneergaard@mirantis.com>
Blake Geno <blakegeno@gmail.com>
Boaz Shuster <ripcurld.github@gmail.com>
bobby abbott <ttobbaybbob@gmail.com>
Bojun Zhu <bojun.zhu@foxmail.com>
Boqin Qin <bobbqqin@gmail.com>
Boris Pruessmann <boris@pruessmann.org>
Boshi Lian <farmer1992@gmail.com>
Bouke Haarsma <bouke@webatoom.nl>
Boyd Hemphill <boyd@feedmagnet.com>
boynux <boynux@gmail.com>
Bradley Cicenas <bradley.cicenas@gmail.com>
Bradley Wright <brad@intranation.com>
Brandon Liu <bdon@bdon.org>
Brandon Philips <brandon.philips@coreos.com>
Brandon Rhodes <brandon@rhodesmill.org>
Brendan Dixon <brendand@microsoft.com>
Brent Salisbury <brent.salisbury@docker.com>
Brett Higgins <brhiggins@arbor.net>
Brett Kochendorfer <brett.kochendorfer@gmail.com>
Brett Milford <brettmilford@gmail.com>
Brett Randall <javabrett@gmail.com>
Brian (bex) Exelbierd <bexelbie@redhat.com>
Brian Bland <brian.bland@docker.com>
Brian DeHamer <brian@dehamer.com>
Brian Dorsey <brian@dorseys.org>
Brian Flad <bflad417@gmail.com>
Brian Goff <cpuguy83@gmail.com>
Brian McCallister <brianm@skife.org>
Brian Olsen <brian@maven-group.org>
Brian Schwind <brianmschwind@gmail.com>
Brian Shumate <brian@couchbase.com>
Brian Torres-Gil <brian@dralth.com>
Brian Trump <btrump@yelp.com>
Brice Jaglin <bjaglin@teads.tv>
Briehan Lombaard <briehan.lombaard@gmail.com>
Brielle Broder <bbroder@google.com>
Bruno Bigras <bigras.bruno@gmail.com>
Bruno Binet <bruno.binet@gmail.com>
Bruno Gazzera <bgazzera@paginar.com>
Bruno Renié <brutasse@gmail.com>
Bruno Tavares <btavare@thoughtworks.com>
Bryan Bess <squarejaw@bsbess.com>
Bryan Boreham <bjboreham@gmail.com>
Bryan Matsuo <bryan.matsuo@gmail.com>
Bryan Murphy <bmurphy1976@gmail.com>
Burke Libbey <burke@libbey.me>
Byung Kang <byung.kang.ctr@amrdec.army.mil>
Caleb Spare <cespare@gmail.com>
Calen Pennington <cale@edx.org>
Cameron Boehmer <cameron.boehmer@gmail.com>
Cameron Sparr <gh@sparr.email>
Cameron Spear <cameronspear@gmail.com>
Campbell Allen <campbell.allen@gmail.com>
Candid Dauth <cdauth@cdauth.eu>
Cao Weiwei <cao.weiwei30@zte.com.cn>
Carl Henrik Lunde <chlunde@ping.uio.no>
Carl Loa Odin <carlodin@gmail.com>
Carl X. Su <bcbcarl@gmail.com>
Carlo Mion <mion00@gmail.com>
Carlos Alexandro Becker <caarlos0@gmail.com>
Carlos de Paula <me@carlosedp.com>
Carlos Sanchez <carlos@apache.org>
Carol Fager-Higgins <carol.fager-higgins@docker.com>
Cary <caryhartline@users.noreply.github.com>
Casey Bisson <casey.bisson@joyent.com>
Catalin Pirvu <pirvu.catalin94@gmail.com>
Ce Gao <ce.gao@outlook.com>
Cedric Davies <cedricda@microsoft.com>
Cezar Sa Espinola <cezarsa@gmail.com>
Chad Swenson <chadswen@gmail.com>
Chance Zibolski <chance.zibolski@gmail.com>
Chander Govindarajan <chandergovind@gmail.com>
Chanhun Jeong <keyolk@gmail.com>
Chao Wang <wangchao.fnst@cn.fujitsu.com>
Charles Chan <charleswhchan@users.noreply.github.com>
Charles Hooper <charles.hooper@dotcloud.com>
Charles Law <claw@conduce.com>
Charles Lindsay <chaz@chazomatic.us>
Charles Merriam <charles.merriam@gmail.com>
Charles Sarrazin <charles@sarraz.in>
Charles Smith <charles.smith@docker.com>
Charlie Drage <charlie@charliedrage.com>
Charlie Lewis <charliel@lab41.org>
Chase Bolt <chase.bolt@gmail.com>
ChaYoung You <yousbe@gmail.com>
Chee Hau Lim <ch33hau@gmail.com>
Chen Chao <cc272309126@gmail.com>
Chen Chuanliang <chen.chuanliang@zte.com.cn>
Chen Hanxiao <chenhanxiao@cn.fujitsu.com>
Chen Min <chenmin46@huawei.com>
Chen Mingjie <chenmingjie0828@163.com>
Chen Qiu <cheney-90@hotmail.com>
Cheng-mean Liu <soccerl@microsoft.com>
Chengfei Shang <cfshang@alauda.io>
Chengguang Xu <cgxu519@gmx.com>
Chenyang Yan <memory.yancy@gmail.com>
chenyuzhu <chenyuzhi@oschina.cn>
Chetan Birajdar <birajdar.chetan@gmail.com>
Chewey <prosto-chewey@users.noreply.github.com>
Chia-liang Kao <clkao@clkao.org>
chli <chli@freewheel.tv>
Cholerae Hu <choleraehyq@gmail.com>
Chris Alfonso <calfonso@redhat.com>
Chris Armstrong <chris@opdemand.com>
Chris Dias <cdias@microsoft.com>
Chris Dituri <csdituri@gmail.com>
Chris Fordham <chris@fordham-nagy.id.au>
Chris Gavin <chris@chrisgavin.me>
Chris Gibson <chris@chrisg.io>
Chris Khoo <chris.khoo@gmail.com>
Chris Kreussling (Flatbush Gardener) <xrisfg@gmail.com>
Chris McKinnel <chris.mckinnel@tangentlabs.co.uk>
Chris McKinnel <chrismckinnel@gmail.com>
Chris Price <cprice@mirantis.com>
Chris Seto <chriskseto@gmail.com>
Chris Snow <chsnow123@gmail.com>
Chris St. Pierre <chris.a.st.pierre@gmail.com>
Chris Stivers <chris@stivers.us>
Chris Swan <chris.swan@iee.org>
Chris Telfer <ctelfer@docker.com>
Chris Wahl <github@wahlnetwork.com>
Chris Weyl <cweyl@alumni.drew.edu>
Chris White <me@cwprogram.com>
Christian Becker <christian.becker@sixt.com>
Christian Berendt <berendt@b1-systems.de>
Christian Brauner <christian.brauner@ubuntu.com>
Christian Böhme <developement@boehme3d.de>
Christian Muehlhaeuser <muesli@gmail.com>
Christian Persson <saser@live.se>
Christian Rotzoll <ch.rotzoll@gmail.com>
Christian Simon <simon@swine.de>
Christian Stefanescu <st.chris@gmail.com>
Christoph Ziebuhr <chris@codefrickler.de>
Christophe Mehay <cmehay@online.net>
Christophe Troestler <christophe.Troestler@umons.ac.be>
Christophe Vidal <kriss@krizalys.com>
Christopher Biscardi <biscarch@sketcht.com>
Christopher Crone <christopher.crone@docker.com>
Christopher Currie <codemonkey+github@gmail.com>
Christopher Jones <tophj@linux.vnet.ibm.com>
Christopher Latham <sudosurootdev@gmail.com>
Christopher Rigor <crigor@gmail.com>
Christy Norman <christy@linux.vnet.ibm.com>
Chun Chen <ramichen@tencent.com>
Ciro S. Costa <ciro.costa@usp.br>
Clayton Coleman <ccoleman@redhat.com>
Clint Armstrong <clint@clintarmstrong.net>
Clinton Kitson <clintonskitson@gmail.com>
clubby789 <jamie@hill-daniel.co.uk>
Cody Roseborough <crrosebo@amazon.com>
Coenraad Loubser <coenraad@wish.org.za>
Colin Dunklau <colin.dunklau@gmail.com>
Colin Hebert <hebert.colin@gmail.com>
Colin Panisset <github@clabber.com>
Colin Rice <colin@daedrum.net>
Colin Walters <walters@verbum.org>
Collin Guarino <collin.guarino@gmail.com>
Colm Hally <colmhally@gmail.com>
companycy <companycy@gmail.com>
Conor Evans <coevans@tcd.ie>
Corbin Coleman <corbin.coleman@docker.com>
Corey Farrell <git@cfware.com>
Cory Forsyth <cory.forsyth@gmail.com>
Cory Snider <csnider@mirantis.com>
cressie176 <github@stephen-cresswell.net>
Cristian Ariza <dev@cristianrz.com>
Cristian Staretu <cristian.staretu@gmail.com>
cristiano balducci <cristiano.balducci@gmail.com>
Cristina Yenyxe Gonzalez Garcia <cristina.yenyxe@gmail.com>
Cruceru Calin-Cristian <crucerucalincristian@gmail.com>
CUI Wei <ghostplant@qq.com>
cuishuang <imcusg@gmail.com>
Cuong Manh Le <cuong.manhle.vn@gmail.com>
Cyprian Gracz <cyprian.gracz@micro-jumbo.eu>
Cyril F <cyrilf7x@gmail.com>
Da McGrady <dabkb@aol.com>
Daan van Berkel <daan.v.berkel.1980@gmail.com>
Daehyeok Mun <daehyeok@gmail.com>
Dafydd Crosby <dtcrsby@gmail.com>
dalanlan <dalanlan925@gmail.com>
Damian Smyth <damian@dsau.co>
Damien Nadé <github@livna.org>
Damien Nozay <damien.nozay@gmail.com>
Damjan Georgievski <gdamjan@gmail.com>
Dan Anolik <dan@anolik.net>
Dan Buch <d.buch@modcloth.com>
Dan Cotora <dan@bluevision.ro>
Dan Feldman <danf@jfrog.com>
Dan Griffin <dgriffin@peer1.com>
Dan Hirsch <thequux@upstandinghackers.com>
Dan Keder <dan.keder@gmail.com>
Dan Levy <dan@danlevy.net>
Dan McPherson <dmcphers@redhat.com>
Dan Plamadeala <cornul11@gmail.com>
Dan Stine <sw@stinemail.com>
Dan Williams <me@deedubs.com>
Dani Hodovic <dani.hodovic@gmail.com>
Dani Louca <dani.louca@docker.com>
Daniel Antlinger <d.antlinger@gmx.at>
Daniel Black <daniel@linux.ibm.com>
Daniel Dao <dqminh@cloudflare.com>
Daniel Exner <dex@dragonslave.de>
Daniel Farrell <dfarrell@redhat.com>
Daniel Garcia <daniel@danielgarcia.info>
Daniel Gasienica <daniel@gasienica.ch>
Daniel Grunwell <mwgrunny@gmail.com>
Daniel Helfand <helfand.4@gmail.com>
Daniel Hiltgen <daniel.hiltgen@docker.com>
Daniel J Walsh <dwalsh@redhat.com>
Daniel Menet <membership@sontags.ch>
Daniel Mizyrycki <daniel.mizyrycki@dotcloud.com>
Daniel Nephin <dnephin@docker.com>
Daniel Norberg <dano@spotify.com>
Daniel Nordberg <dnordberg@gmail.com>
Daniel P. Berrangé <berrange@redhat.com>
Daniel Robinson <gottagetmac@gmail.com>
Daniel S <dan.streby@gmail.com>
Daniel Sweet <danieljsweet@icloud.com>
Daniel Von Fange <daniel@leancoder.com>
Daniel Watkins <daniel@daniel-watkins.co.uk>
Daniel X Moore <yahivin@gmail.com>
Daniel YC Lin <dlin.tw@gmail.com>
Daniel Zhang <jmzwcn@gmail.com>
Daniele Rondina <geaaru@sabayonlinux.org>
Danny Berger <dpb587@gmail.com>
Danny Milosavljevic <dannym@scratchpost.org>
Danny Yates <danny@codeaholics.org>
Danyal Khaliq <danyal.khaliq@tenpearls.com>
Darren Coxall <darren@darrencoxall.com>
Darren Shepherd <darren.s.shepherd@gmail.com>
Darren Stahl <darst@microsoft.com>
Dattatraya Kumbhar <dattatraya.kumbhar@gslab.com>
Davanum Srinivas <davanum@gmail.com>
Dave Barboza <dbarboza@datto.com>
Dave Goodchild <buddhamagnet@gmail.com>
Dave Henderson <dhenderson@gmail.com>
Dave MacDonald <mindlapse@gmail.com>
Dave Tucker <dt@docker.com>
David Anderson <dave@natulte.net>
David Bellotti <dbellotti@pivotal.io>
David Calavera <david.calavera@gmail.com>
David Chung <david.chung@docker.com>
David Corking <dmc-source@dcorking.com>
David Cramer <davcrame@cisco.com>
David Currie <david_currie@uk.ibm.com>
David Davis <daviddavis@redhat.com>
David Dooling <dooling@gmail.com>
David Gageot <david@gageot.net>
David Gebler <davidgebler@gmail.com>
David Glasser <glasser@davidglasser.net>
David Lawrence <david.lawrence@docker.com>
David Lechner <david@lechnology.com>
David M. Karr <davidmichaelkarr@gmail.com>
David Mackey <tdmackey@booleanhaiku.com>
David Manouchehri <manouchehri@riseup.net>
David Mat <david@davidmat.com>
David Mcanulty <github@hellspark.com>
David McKay <david@rawkode.com>
David O'Rourke <david@scalefactory.com>
David P Hilton <david.hilton.p@gmail.com>
David Pelaez <pelaez89@gmail.com>
David R. Jenni <david.r.jenni@gmail.com>
David Röthlisberger <david@rothlis.net>
David Sheets <dsheets@docker.com>
David Sissitka <me@dsissitka.com>
David Trott <github@davidtrott.com>
David Wang <00107082@163.com>
David Williamson <david.williamson@docker.com>
David Xia <dxia@spotify.com>
David Young <yangboh@cn.ibm.com>
Davide Ceretti <davide.ceretti@hogarthww.com>
Dawn Chen <dawnchen@google.com>
dbdd <wangtong2712@gmail.com>
dcylabs <dcylabs@gmail.com>
Debayan De <debayande@users.noreply.github.com>
Deborah Gertrude Digges <deborah.gertrude.digges@gmail.com>
deed02392 <georgehafiz@gmail.com>
Deep Debroy <ddebroy@docker.com>
Deng Guangxing <dengguangxing@huawei.com>
Deni Bertovic <deni@kset.org>
Denis Defreyne <denis@soundcloud.com>
Denis Gladkikh <denis@gladkikh.email>
Denis Ollier <larchunix@users.noreply.github.com>
Dennis Chen <barracks510@gmail.com>
Dennis Chen <dennis.chen@arm.com>
Dennis Docter <dennis@d23.nl>
Derek <crq@kernel.org>
Derek <crquan@gmail.com>
Derek Ch <denc716@gmail.com>
Derek McGowan <derek@mcg.dev>
Deric Crago <deric.crago@gmail.com>
Deshi Xiao <dxiao@redhat.com>
Devon Estes <devon.estes@klarna.com>
Devvyn Murphy <devvyn@devvyn.com>
Dharmit Shah <shahdharmit@gmail.com>
Dhawal Yogesh Bhanushali <dbhanushali@vmware.com>
Dhilip Kumars <dhilip.kumar.s@huawei.com>
Diego Romero <idiegoromero@gmail.com>
Diego Siqueira <dieg0@live.com>
Dieter Reuter <dieter.reuter@me.com>
Dillon Dixon <dillondixon@gmail.com>
Dima Stopel <dima@twistlock.com>
Dimitri John Ledkov <dimitri.j.ledkov@intel.com>
Dimitris Mandalidis <dimitris.mandalidis@gmail.com>
Dimitris Rozakis <dimrozakis@gmail.com>
Dimitry Andric <d.andric@activevideo.com>
Dinesh Subhraveti <dineshs@altiscale.com>
Ding Fei <dingfei@stars.org.cn>
dingwei <dingwei@cmss.chinamobile.com>
Diogo Monica <diogo@docker.com>
DiuDiugirl <sophia.wang@pku.edu.cn>
Djibril Koné <kone.djibril@gmail.com>
Djordje Lukic <djordje.lukic@docker.com>
dkumor <daniel@dkumor.com>
Dmitri Logvinenko <dmitri.logvinenko@gmail.com>
Dmitri Shuralyov <shurcooL@gmail.com>
Dmitry Demeshchuk <demeshchuk@gmail.com>
Dmitry Gusev <dmitry.gusev@gmail.com>
Dmitry Kononenko <d@dm42.ru>
Dmitry Sharshakov <d3dx12.xx@gmail.com>
Dmitry Shyshkin <dmitry@shyshkin.org.ua>
Dmitry Smirnov <onlyjob@member.fsf.org>
Dmitry V. Krivenok <krivenok.dmitry@gmail.com>
Dmitry Vorobev <dimahabr@gmail.com>
Dmytro Iakovliev <dmytro.iakovliev@zodiacsystems.com>
docker-unir[bot] <docker-unir[bot]@users.noreply.github.com>
Dolph Mathews <dolph.mathews@gmail.com>
Dominic Tubach <dominic.tubach@to.com>
Dominic Yin <yindongchao@inspur.com>
Dominik Dingel <dingel@linux.vnet.ibm.com>
Dominik Finkbeiner <finkes93@gmail.com>
Dominik Honnef <dominik@honnef.co>
Don Kirkby <donkirkby@users.noreply.github.com>
Don Kjer <don.kjer@gmail.com>
Don Spaulding <donspauldingii@gmail.com>
Donald Huang <don.hcd@gmail.com>
Dong Chen <dongluo.chen@docker.com>
Donghwa Kim <shanytt@gmail.com>
Donovan Jones <git@gamma.net.nz>
Doron Podoleanu <doronp@il.ibm.com>
Doug Davis <dug@us.ibm.com>
Doug MacEachern <dougm@vmware.com>
Doug Tangren <d.tangren@gmail.com>
Douglas Curtis <dougcurtis1@gmail.com>
Dr Nic Williams <drnicwilliams@gmail.com>
dragon788 <dragon788@users.noreply.github.com>
Dražen Lučanin <kermit666@gmail.com>
Drew Erny <derny@mirantis.com>
Drew Hubl <drew.hubl@gmail.com>
Dustin Sallings <dustin@spy.net>
Ed Costello <epc@epcostello.com>
Edmund Wagner <edmund-wagner@web.de>
Eiichi Tsukata <devel@etsukata.com>
Eike Herzbach <eike@herzbach.net>
Eivin Giske Skaaren <eivinsn@axis.com>
Eivind Uggedal <eivind@uggedal.com>
Elan Ruusamäe <glen@pld-linux.org>
Elango Sivanandam <elango.siva@docker.com>
Elena Morozova <lelenanam@gmail.com>
Eli Uriegas <seemethere101@gmail.com>
Elias Faxö <elias.faxo@tre.se>
Elias Koromilas <elias.koromilas@gmail.com>
Elias Probst <mail@eliasprobst.eu>
Elijah Zupancic <elijah@zupancic.name>
eluck <mail@eluck.me>
Elvir Kuric <elvirkuric@gmail.com>
Emil Davtyan <emil2k@gmail.com>
Emil Hernvall <emil@quench.at>
Emily Maier <emily@emilymaier.net>
Emily Rose <emily@contactvibe.com>
Emir Ozer <emirozer@yandex.com>
Eng Zer Jun <engzerjun@gmail.com>
Enguerran <engcolson@gmail.com>
Eohyung Lee <liquidnuker@gmail.com>
epeterso <epeterson@breakpoint-labs.com>
Eric Barch <barch@tomesoftware.com>
Eric Curtin <ericcurtin17@gmail.com>
Eric G. Noriega <enoriega@vizuri.com>
Eric Hanchrow <ehanchrow@ine.com>
Eric Lee <thenorthsecedes@gmail.com>
Eric Mountain <eric.mountain@datadoghq.com>
Eric Myhre <hash@exultant.us>
Eric Paris <eparis@redhat.com>
Eric Rafaloff <erafaloff@gmail.com>
Eric Rosenberg <ehaydenr@gmail.com>
Eric Sage <eric.david.sage@gmail.com>
Eric Soderstrom <ericsoderstrom@gmail.com>
Eric Yang <windfarer@gmail.com>
Eric-Olivier Lamey <eo@lamey.me>
Erica Windisch <erica@windisch.us>
Erich Cordoba <erich.cm@yandex.com>
Erik Bray <erik.m.bray@gmail.com>
Erik Dubbelboer <erik@dubbelboer.com>
Erik Hollensbe <github@hollensbe.org>
Erik Inge Bolsø <knan@redpill-linpro.com>
Erik Kristensen <erik@erikkristensen.com>
Erik Sipsma <erik@sipsma.dev>
Erik St. Martin <alakriti@gmail.com>
Erik Weathers <erikdw@gmail.com>
Erno Hopearuoho <erno.hopearuoho@gmail.com>
Erwin van der Koogh <info@erronis.nl>
Espen Suenson <mail@espensuenson.dk>
Ethan Bell <ebgamer29@gmail.com>
Ethan Mosbaugh <ethan@replicated.com>
Euan Harris <euan.harris@docker.com>
Euan Kemp <euan.kemp@coreos.com>
Eugen Krizo <eugen.krizo@gmail.com>
Eugene Yakubovich <eugene.yakubovich@coreos.com>
Evan Allrich <evan@unguku.com>
Evan Carmi <carmi@users.noreply.github.com>
Evan Hazlett <ejhazlett@gmail.com>
Evan Krall <krall@yelp.com>
Evan Phoenix <evan@fallingsnow.net>
Evan Wies <evan@neomantra.net>
Evelyn Xu <evelynhsu21@gmail.com>
Everett Toews <everett.toews@rackspace.com>
Evgeniy Makhrov <e.makhrov@corp.badoo.com>
Evgeny Shmarnev <shmarnev@gmail.com>
Evgeny Vereshchagin <evvers@ya.ru>
Ewa Czechowska <ewa@ai-traders.com>
Eystein Måløy Stenberg <eystein.maloy.stenberg@cfengine.com>
ezbercih <cem.ezberci@gmail.com>
Ezra Silvera <ezra@il.ibm.com>
Fabian Kramm <kramm@covexo.com>
Fabian Lauer <kontakt@softwareschmiede-saar.de>
Fabian Raetz <fabian.raetz@gmail.com>
Fabiano Rosas <farosas@br.ibm.com>
Fabio Falci <fabiofalci@gmail.com>
Fabio Kung <fabio.kung@gmail.com>
Fabio Rapposelli <fabio@vmware.com>
Fabio Rehm <fgrehm@gmail.com>
Fabrizio Regini <freegenie@gmail.com>
Fabrizio Soppelsa <fsoppelsa@mirantis.com>
Faiz Khan <faizkhan00@gmail.com>
falmp <chico.lopes@gmail.com>
Fangming Fang <fangming.fang@arm.com>
Fangyuan Gao <21551127@zju.edu.cn>
fanjiyun <fan.jiyun@zte.com.cn>
Fareed Dudhia <fareeddudhia@googlemail.com>
Fathi Boudra <fathi.boudra@linaro.org>
Federico Gimenez <fgimenez@coit.es>
Felipe Oliveira <felipeweb.programador@gmail.com>
Felipe Ruhland <felipe.ruhland@gmail.com>
Felix Abecassis <fabecassis@nvidia.com>
Felix Geisendörfer <felix@debuggable.com>
Felix Hupfeld <felix@quobyte.com>
Felix Rabe <felix@rabe.io>
Felix Ruess <felix.ruess@gmail.com>
Felix Schindler <fschindler@weluse.de>
Feng Yan <fy2462@gmail.com>
Fengtu Wang <wangfengtu@huawei.com>
Ferenc Szabo <pragmaticfrank@gmail.com>
Fernando <fermayo@gmail.com>
Fero Volar <alian@alian.info>
Feroz Salam <feroz.salam@sourcegraph.com>
Ferran Rodenas <frodenas@gmail.com>
Filipe Brandenburger <filbranden@google.com>
Filipe Oliveira <contato@fmoliveira.com.br>
Flavio Castelli <fcastelli@suse.com>
Flavio Crisciani <flavio.crisciani@docker.com>
Florian <FWirtz@users.noreply.github.com>
Florian Klein <florian.klein@free.fr>
Florian Maier <marsmensch@users.noreply.github.com>
Florian Noeding <noeding@adobe.com>
Florian Schmaus <flo@geekplace.eu>
Florian Weingarten <flo@hackvalue.de>
Florin Asavoaie <florin.asavoaie@gmail.com>
Florin Patan <florinpatan@gmail.com>
fonglh <fonglh@gmail.com>
Foysal Iqbal <foysal.iqbal.fb@gmail.com>
Francesc Campoy <campoy@google.com>
Francesco Degrassi <francesco.degrassi@optionfactory.net>
Francesco Mari <mari.francesco@gmail.com>
Francis Chuang <francis.chuang@boostport.com>
Francisco Carriedo <fcarriedo@gmail.com>
Francisco Souza <f@souza.cc>
Frank Groeneveld <frank@ivaldi.nl>
Frank Herrmann <fgh@4gh.tv>
Frank Macreery <frank@macreery.com>
Frank Rosquin <frank.rosquin+github@gmail.com>
Frank Yang <yyb196@gmail.com>
Fred Lifton <fred.lifton@docker.com>
Frederick F. Kautz IV <fkautz@redhat.com>
Frederico F. de Oliveira <FreddieOliveira@users.noreply.github.com>
Frederik Loeffert <frederik@zitrusmedia.de>
Frederik Nordahl Jul Sabroe <frederikns@gmail.com>
Freek Kalter <freek@kalteronline.org>
Frieder Bluemle <frieder.bluemle@gmail.com>
frobnicaty <92033765+frobnicaty@users.noreply.github.com>
Frédéric Dalleau <frederic.dalleau@docker.com>
Fu JinLin <withlin@yeah.net>
Félix Baylac-Jacqué <baylac.felix@gmail.com>
Félix Cantournet <felix.cantournet@cloudwatt.com>
Gabe Rosenhouse <gabe@missionst.com>
Gabor Nagy <mail@aigeruth.hu>
Gabriel Goller <gabrielgoller123@gmail.com>
Gabriel L. Somlo <gsomlo@gmail.com>
Gabriel Linder <linder.gabriel@gmail.com>
Gabriel Monroy <gabriel@opdemand.com>
Gabriel Nicolas Avellaneda <avellaneda.gabriel@gmail.com>
Gaetan de Villele <gdevillele@gmail.com>
Galen Sampson <galen.sampson@gmail.com>
Gang Qiao <qiaohai8866@gmail.com>
Gareth Rushgrove <gareth@morethanseven.net>
Garrett Barboza <garrett@garrettbarboza.com>
Gary Schaetz <gary@schaetzkc.com>
Gaurav <gaurav.gosec@gmail.com>
Gaurav Singh <gaurav1086@gmail.com>
Gaël PORTAY <gael.portay@savoirfairelinux.com>
Genki Takiuchi <genki@s21g.com>
GennadySpb <lipenkov@gmail.com>
Geoff Levand <geoff@infradead.org>
Geoffrey Bachelet <grosfrais@gmail.com>
Geon Kim <geon0250@gmail.com>
George Kontridze <george@bugsnag.com>
George MacRorie <gmacr31@gmail.com>
George Xie <georgexsh@gmail.com>
Georgi Hristozov <georgi@forkbomb.nl>
Georgy Yakovlev <gyakovlev@gentoo.org>
Gereon Frey <gereon.frey@dynport.de>
German DZ <germ@ndz.com.ar>
Gert van Valkenhoef <g.h.m.van.valkenhoef@rug.nl>
Gerwim Feiken <g.feiken@tfe.nl>
Ghislain Bourgeois <ghislain.bourgeois@gmail.com>
Giampaolo Mancini <giampaolo@trampolineup.com>
Gianluca Borello <g.borello@gmail.com>
Gildas Cuisinier <gildas.cuisinier@gcuisinier.net>
Giovan Isa Musthofa <giovanism@outlook.co.id>
gissehel <public-devgit-dantus@gissehel.org>
Giuseppe Mazzotta <gdm85@users.noreply.github.com>
Giuseppe Scrivano <gscrivan@redhat.com>
Gleb Fotengauer-Malinovskiy <glebfm@altlinux.org>
Gleb M Borisov <borisov.gleb@gmail.com>
Glyn Normington <gnormington@gopivotal.com>
GoBella <caili_welcome@163.com>
Goffert van Gool <goffert@phusion.nl>
Goldwyn Rodrigues <rgoldwyn@suse.com>
Gopikannan Venugopalsamy <gopikannan.venugopalsamy@gmail.com>
Gosuke Miyashita <gosukenator@gmail.com>
Gou Rao <gou@portworx.com>
Govinda Fichtner <govinda.fichtner@googlemail.com>
Grant Millar <rid@cylo.io>
Grant Reaber <grant.reaber@gmail.com>
Graydon Hoare <graydon@pobox.com>
Greg Fausak <greg@tacodata.com>
Greg Pflaum <gpflaum@users.noreply.github.com>
Greg Stephens <greg@udon.org>
Greg Thornton <xdissent@me.com>
Grzegorz Jaśkiewicz <gj.jaskiewicz@gmail.com>
Guilhem Lettron <guilhem+github@lettron.fr>
Guilherme Salgado <gsalgado@gmail.com>
Guillaume Dufour <gdufour.prestataire@voyages-sncf.com>
Guillaume J. Charmes <guillaume.charmes@docker.com>
Gunadhya S. <6939749+gunadhya@users.noreply.github.com>
Guoqiang QI <guoqiang.qi1@gmail.com>
guoxiuyan <guoxiuyan@huawei.com>
Guri <odg0318@gmail.com>
Gurjeet Singh <gurjeet@singh.im>
Guruprasad <lgp171188@gmail.com>
Gustav Sinder <gustav.sinder@gmail.com>
gwx296173 <gaojing3@huawei.com>
Günter Zöchbauer <guenter@gzoechbauer.com>
Haichao Yang <yang.haichao@zte.com.cn>
haikuoliu <haikuo@amazon.com>
haining.cao <haining.cao@daocloud.io>
Hakan Özler <hakan.ozler@kodcu.com>
Hamish Hutchings <moredhel@aoeu.me>
Hannes Ljungberg <hannes@5monkeys.se>
Hans Kristian Flaatten <hans@starefossen.com>
Hans Rødtang <hansrodtang@gmail.com>
Hao Shu Wei <haoshuwei24@gmail.com>
Hao Zhang <21521210@zju.edu.cn>
Harald Albers <github@albersweb.de>
Harald Niesche <harald@niesche.de>
Harley Laue <losinggeneration@gmail.com>
Harold Cooper <hrldcpr@gmail.com>
Harrison Turton <harrisonturton@gmail.com>
Harry Zhang <harryz@hyper.sh>
Harshal Patil <harshal.patil@in.ibm.com>
Harshal Patil <harshalp@linux.vnet.ibm.com>
He Simei <hesimei@zju.edu.cn>
He Xiaoxi <tossmilestone@gmail.com>
He Xin <he_xinworld@126.com>
heartlock <21521209@zju.edu.cn>
Hector Castro <hectcastro@gmail.com>
Helen Xie <chenjg@harmonycloud.cn>
Henning Sprang <henning.sprang@gmail.com>
Hiroshi Hatake <hatake@clear-code.com>
Hiroyuki Sasagawa <hs19870702@gmail.com>
Hobofan <goisser94@gmail.com>
Hollie Teal <hollie@docker.com>
Hong Xu <hong@topbug.net>
Hongbin Lu <hongbin034@gmail.com>
Hongxu Jia <hongxu.jia@windriver.com>
Honza Pokorny <me@honza.ca>
Hsing-Hui Hsu <hsinghui@amazon.com>
hsinko <21551195@zju.edu.cn>
Hu Keping <hukeping@huawei.com>
Hu Tao <hutao@cn.fujitsu.com>
HuanHuan Ye <logindaveye@gmail.com>
Huanzhong Zhang <zhanghuanzhong90@gmail.com>
Huayi Zhang <irachex@gmail.com>
Hugo Barrera <hugo@barrera.io>
Hugo Duncan <hugo@hugoduncan.org>
Hugo Marisco <0x6875676f@gmail.com>
Hui Kang <hkang.sunysb@gmail.com>
Hunter Blanks <hunter@twilio.com>
huqun <huqun@zju.edu.cn>
Huu Nguyen <huu@prismskylabs.com>
Hyeongkyu Lee <hyeongkyu.lee@navercorp.com>
Hyzhou Zhy <hyzhou.zhy@alibaba-inc.com>
Iago López Galeiras <iago@kinvolk.io>
Ian Bishop <ianbishop@pace7.com>
Ian Bull <irbull@gmail.com>
Ian Calvert <ianjcalvert@gmail.com>
Ian Campbell <ian.campbell@docker.com>
Ian Chen <ianre657@gmail.com>
Ian Lee <IanLee1521@gmail.com>
Ian Main <imain@redhat.com>
Ian Philpot <ian.philpot@microsoft.com>
Ian Truslove <ian.truslove@gmail.com>
Iavael <iavaelooeyt@gmail.com>
Icaro Seara <icaro.seara@gmail.com>
Ignacio Capurro <icapurrofagian@gmail.com>
Igor Dolzhikov <bluesriverz@gmail.com>
Igor Karpovich <i.karpovich@currencysolutions.com>
Iliana Weller <iweller@amazon.com>
Ilkka Laukkanen <ilkka@ilkka.io>
Illo Abdulrahim <abdulrahim.illo@nokia.com>
Ilya Dmitrichenko <errordeveloper@gmail.com>
Ilya Gusev <mail@igusev.ru>
Ilya Khlopotov <ilya.khlopotov@gmail.com>
imre Fitos <imre.fitos+github@gmail.com>
inglesp <peter.inglesby@gmail.com>
Ingo Gottwald <in.gottwald@gmail.com>
Innovimax <innovimax@gmail.com>
Isaac Dupree <antispam@idupree.com>
Isabel Jimenez <contact.isabeljimenez@gmail.com>
Isaiah Grace <irgkenya4@gmail.com>
Isao Jonas <isao.jonas@gmail.com>
Iskander Sharipov <quasilyte@gmail.com>
Ivan Babrou <ibobrik@gmail.com>
Ivan Fraixedes <ifcdev@gmail.com>
Ivan Grcic <igrcic@gmail.com>
Ivan Markin <sw@nogoegst.net>
J Bruni <joaohbruni@yahoo.com.br>
J. Nunn <jbnunn@gmail.com>
Jack Danger Canty <jackdanger@squareup.com>
Jack Laxson <jackjrabbit@gmail.com>
Jacob Atzen <jacob@jacobatzen.dk>
Jacob Edelman <edelman.jd@gmail.com>
Jacob Tomlinson <jacob@tom.linson.uk>
Jacob Vallejo <jakeev@amazon.com>
Jacob Wen <jian.w.wen@oracle.com>
Jaime Cepeda <jcepedavillamayor@gmail.com>
Jaivish Kothari <janonymous.codevulture@gmail.com>
Jake Champlin <jake.champlin.27@gmail.com>
Jake Moshenko <jake@devtable.com>
Jake Sanders <jsand@google.com>
Jakub Drahos <jdrahos@pulsepoint.com>
Jakub Guzik <jakubmguzik@gmail.com>
James Allen <jamesallen0108@gmail.com>
James Carey <jecarey@us.ibm.com>
James Carr <james.r.carr@gmail.com>
James DeFelice <james.defelice@ishisystems.com>
James Harrison Fisher <jameshfisher@gmail.com>
James Kyburz <james.kyburz@gmail.com>
James Kyle <james@jameskyle.org>
James Lal <james@lightsofapollo.com>
James Mills <prologic@shortcircuit.net.au>
James Nesbitt <jnesbitt@mirantis.com>
James Nugent <james@jen20.com>
James Sanders <james3sanders@gmail.com>
James Turnbull <james@lovedthanlost.net>
James Watkins-Harvey <jwatkins@progi-media.com>
Jamie Hannaford <jamie@limetree.org>
Jamshid Afshar <jafshar@yahoo.com>
Jan Breig <git@pygos.space>
Jan Chren <dev.rindeal@gmail.com>
Jan Götte <jaseg@jaseg.net>
Jan Keromnes <janx@linux.com>
Jan Koprowski <jan.koprowski@gmail.com>
Jan Pazdziora <jpazdziora@redhat.com>
Jan Toebes <jan@toebes.info>
Jan-Gerd Tenberge <janten@gmail.com>
Jan-Jaap Driessen <janjaapdriessen@gmail.com>
Jana Radhakrishnan <mrjana@docker.com>
Jannick Fahlbusch <git@jf-projects.de>
Januar Wayong <januar@gmail.com>
Jared Biel <jared.biel@bolderthinking.com>
Jared Hocutt <jaredh@netapp.com>
Jaroslaw Zabiello <hipertracker@gmail.com>
Jasmine Hegman <jasmine@jhegman.com>
Jason A. Donenfeld <Jason@zx2c4.com>
Jason Divock <jdivock@gmail.com>
Jason Giedymin <jasong@apache.org>
Jason Green <Jason.Green@AverInformatics.Com>
Jason Hall <imjasonh@gmail.com>
Jason Heiss <jheiss@aput.net>
Jason Livesay <ithkuil@gmail.com>
Jason McVetta <jason.mcvetta@gmail.com>
Jason Plum <jplum@devonit.com>
Jason Shepherd <jason@jasonshepherd.net>
Jason Smith <jasonrichardsmith@gmail.com>
Jason Sommer <jsdirv@gmail.com>
Jason Stangroome <jason@codeassassin.com>
Javier Bassi <javierbassi@gmail.com>
jaxgeller <jacksongeller@gmail.com>
Jay <teguhwpurwanto@gmail.com>
Jay Kamat <github@jgkamat.33mail.com>
Jay Lim <jay@imjching.com>
Jean Rouge <rougej+github@gmail.com>
Jean-Baptiste Barth <jeanbaptiste.barth@gmail.com>
Jean-Baptiste Dalido <jeanbaptiste@appgratis.com>
Jean-Christophe Berthon <huygens@berthon.eu>
Jean-Paul Calderone <exarkun@twistedmatrix.com>
Jean-Pierre Huynh <jean-pierre.huynh@ounet.fr>
Jean-Tiare Le Bigot <jt@yadutaf.fr>
Jeeva S. Chelladhurai <sjeeva@gmail.com>
Jeff Anderson <jeff@docker.com>
Jeff Hajewski <jeff.hajewski@gmail.com>
Jeff Johnston <jeff.johnston.mn@gmail.com>
Jeff Lindsay <progrium@gmail.com>
Jeff Mickey <j@codemac.net>
Jeff Minard <jeff@creditkarma.com>
Jeff Nickoloff <jeff.nickoloff@gmail.com>
Jeff Silberman <jsilberm@gmail.com>
Jeff Welch <whatthejeff@gmail.com>
Jeff Zvier <zvier20@gmail.com>
Jeffrey Bolle <jeffreybolle@gmail.com>
Jeffrey Morgan <jmorganca@gmail.com>
Jeffrey van Gogh <jvg@google.com>
Jenny Gebske <jennifer@gebske.de>
Jeremy Chambers <jeremy@thehipbot.com>
Jeremy Grosser <jeremy@synack.me>
Jeremy Huntwork <jhuntwork@lightcubesolutions.com>
Jeremy Price <jprice.rhit@gmail.com>
Jeremy Qian <vanpire110@163.com>
Jeremy Unruh <jeremybunruh@gmail.com>
Jeremy Yallop <yallop@docker.com>
Jeroen Franse <jeroenfranse@gmail.com>
Jeroen Jacobs <github@jeroenj.be>
Jesse Dearing <jesse.dearing@gmail.com>
Jesse Dubay <jesse@thefortytwo.net>
Jessica Frazelle <jess@oxide.computer>
Jezeniel Zapanta <jpzapanta22@gmail.com>
Jhon Honce <jhonce@redhat.com>
Ji.Zhilong <zhilongji@gmail.com>
Jian Liao <jliao@alauda.io>
Jian Zhang <zhangjian.fnst@cn.fujitsu.com>
Jiang Jinyang <jjyruby@gmail.com>
Jianyong Wu <jianyong.wu@arm.com>
Jie Luo <luo612@zju.edu.cn>
Jie Ma <jienius@outlook.com>
Jihyun Hwang <jhhwang@telcoware.com>
Jilles Oldenbeuving <ojilles@gmail.com>
Jim Alateras <jima@comware.com.au>
Jim Carroll <jim.carroll@docker.com>
Jim Ehrismann <jim.ehrismann@docker.com>
Jim Galasyn <jim.galasyn@docker.com>
Jim Lin <b04705003@ntu.edu.tw>
Jim Minter <jminter@redhat.com>
Jim Perrin <jperrin@centos.org>
Jimmy Cuadra <jimmy@jimmycuadra.com>
Jimmy Puckett <jimmy.puckett@spinen.com>
Jimmy Song <rootsongjc@gmail.com>
Jinsoo Park <cellpjs@gmail.com>
Jintao Zhang <zhangjintao9020@gmail.com>
Jiri Appl <jiria@microsoft.com>
Jiri Popelka <jpopelka@redhat.com>
Jiuyue Ma <majiuyue@huawei.com>
Jiří Župka <jzupka@redhat.com>
Joakim Roubert <joakim.roubert@axis.com>
Joao Fernandes <joao.fernandes@docker.com>
Joao Trindade <trindade.joao@gmail.com>
Joe Beda <joe.github@bedafamily.com>
Joe Doliner <jdoliner@pachyderm.io>
Joe Ferguson <joe@infosiftr.com>
Joe Gordon <joe.gordon0@gmail.com>
Joe Shaw <joe@joeshaw.org>
Joe Van Dyk <joe@tanga.com>
Joel Friedly <joelfriedly@gmail.com>
Joel Handwell <joelhandwell@gmail.com>
Joel Hansson <joel.hansson@ecraft.com>
Joel Wurtz <jwurtz@jolicode.com>
Joey Geiger <jgeiger@gmail.com>
Joey Geiger <jgeiger@users.noreply.github.com>
Joey Gibson <joey@joeygibson.com>
Joffrey F <joffrey@docker.com>
Johan Euphrosine <proppy@google.com>
Johan Rydberg <johan.rydberg@gmail.com>
Johanan Lieberman <johanan.lieberman@gmail.com>
Johannes 'fish' Ziemke <github@freigeist.org>
John Costa <john.costa@gmail.com>
John Feminella <jxf@jxf.me>
John Gardiner Myers <jgmyers@proofpoint.com>
John Gossman <johngos@microsoft.com>
John Harris <john@johnharris.io>
John Howard <github@lowenna.com>
John Laswell <john.n.laswell@gmail.com>
John Maguire <jmaguire@duosecurity.com>
John Mulhausen <john@docker.com>
John OBrien III <jobrieniii@yahoo.com>
John Starks <jostarks@microsoft.com>
John Stephens <johnstep@docker.com>
John Tims <john.k.tims@gmail.com>
John V. Martinez <jvmatl@gmail.com>
John Warwick <jwarwick@gmail.com>
John Willis <john.willis@docker.com>
Jon Johnson <jonjohnson@google.com>
Jon Surrell <jon.surrell@gmail.com>
Jon Wedaman <jweede@gmail.com>
Jonas Dohse <jonas@dohse.ch>
Jonas Heinrich <Jonas@JonasHeinrich.com>
Jonas Pfenniger <jonas@pfenniger.name>
Jonathan A. Schweder <jonathanschweder@gmail.com>
Jonathan A. Sternberg <jonathansternberg@gmail.com>
Jonathan Boulle <jonathanboulle@gmail.com>
Jonathan Camp <jonathan@irondojo.com>
Jonathan Choy <jonathan.j.choy@gmail.com>
Jonathan Dowland <jon+github@alcopop.org>
Jonathan Lebon <jlebon@redhat.com>
Jonathan Lomas <jonathan@floatinglomas.ca>
Jonathan McCrohan <jmccrohan@gmail.com>
Jonathan Mueller <j.mueller@apoveda.ch>
Jonathan Pares <jonathanpa@users.noreply.github.com>
Jonathan Rudenberg <jonathan@titanous.com>
Jonathan Stoppani <jonathan.stoppani@divio.com>
Jonh Wendell <jonh.wendell@redhat.com>
Joni Sar <yoni@cocycles.com>
Joost Cassee <joost@cassee.net>
Jordan Arentsen <blissdev@gmail.com>
Jordan Jennings <jjn2009@gmail.com>
Jordan Sissel <jls@semicomplete.com>
Jordi Massaguer Pla <jmassaguerpla@suse.de>
Jorge Marin <chipironcin@users.noreply.github.com>
Jorit Kleine-Möllhoff <joppich@bricknet.de>
Jose Diaz-Gonzalez <email@josediazgonzalez.com>
Joseph Anthony Pasquale Holsten <joseph@josephholsten.com>
Joseph Hager <ajhager@gmail.com>
Joseph Kern <jkern@semafour.net>
Joseph Rothrock <rothrock@rothrock.org>
Josh <jokajak@gmail.com>
Josh Bodah <jb3689@yahoo.com>
Josh Bonczkowski <josh.bonczkowski@gmail.com>
Josh Chorlton <jchorlton@gmail.com>
Josh Eveleth <joshe@opendns.com>
Josh Hawn <josh.hawn@docker.com>
Josh Horwitz <horwitz@addthis.com>
Josh Poimboeuf <jpoimboe@redhat.com>
Josh Soref <jsoref@gmail.com>
Josh Wilson <josh.wilson@fivestars.com>
Josiah Kiehl <jkiehl@riotgames.com>
José Tomás Albornoz <jojo@eljojo.net>
Joyce Jang <mail@joycejang.com>
JP <jpellerin@leapfrogonline.com>
Julian Taylor <jtaylor.debian@googlemail.com>
Julien Barbier <write0@gmail.com>
Julien Bisconti <veggiemonk@users.noreply.github.com>
Julien Bordellier <julienbordellier@gmail.com>
Julien Dubois <julien.dubois@gmail.com>
Julien Kassar <github@kassisol.com>
Julien Maitrehenry <julien.maitrehenry@me.com>
Julien Pervillé <julien.perville@perfect-memory.com>
Julien Pivotto <roidelapluie@inuits.eu>
Julio Guerra <julio@sqreen.com>
Julio Montes <imc.coder@gmail.com>
Jun Du <dujun5@huawei.com>
Jun-Ru Chang <jrjang@gmail.com>
junxu <xujun@cmss.chinamobile.com>
Jussi Nummelin <jussi.nummelin@gmail.com>
Justas Brazauskas <brazauskasjustas@gmail.com>
Justen Martin <jmart@the-coder.com>
Justin Cormack <justin.cormack@docker.com>
Justin Force <justin.force@gmail.com>
Justin Keller <85903732+jk-vb@users.noreply.github.com>
Justin Menga <justin.menga@gmail.com>
Justin Plock <jplock@users.noreply.github.com>
Justin Simonelis <justin.p.simonelis@gmail.com>
Justin Terry <juterry@microsoft.com>
Justyn Temme <justyntemme@gmail.com>
Jyrki Puttonen <jyrkiput@gmail.com>
Jérémy Leherpeur <amenophis@leherpeur.net>
Jérôme Petazzoni <jerome.petazzoni@docker.com>
Jörg Thalheim <joerg@higgsboson.tk>
K. Heller <pestophagous@gmail.com>
Kai Blin <kai@samba.org>
Kai Qiang Wu (Kennan) <wkq5325@gmail.com>
Kaijie Chen <chen@kaijie.org>
Kamil Domański <kamil@domanski.co>
Kamjar Gerami <kami.gerami@gmail.com>
Kanstantsin Shautsou <kanstantsin.sha@gmail.com>
Kara Alexandra <kalexandra@us.ibm.com>
Karan Lyons <karan@karanlyons.com>
Kareem Khazem <karkhaz@karkhaz.com>
kargakis <kargakis@users.noreply.github.com>
Karl Grzeszczak <karlgrz@gmail.com>
Karol Duleba <mr.fuxi@gmail.com>
Karthik Karanth <karanth.karthik@gmail.com>
Karthik Nayak <karthik.188@gmail.com>
Kasper Fabæch Brandt <poizan@poizan.dk>
Kate Heddleston <kate.heddleston@gmail.com>
Katie McLaughlin <katie@glasnt.com>
Kato Kazuyoshi <kato.kazuyoshi@gmail.com>
Katrina Owen <katrina.owen@gmail.com>
Kawsar Saiyeed <kawsar.saiyeed@projiris.com>
Kay Yan <kay.yan@daocloud.io>
kayrus <kay.diam@gmail.com>
Kazuhiro Sera <seratch@gmail.com>
Kazuyoshi Kato <katokazu@amazon.com>
Ke Li <kel@splunk.com>
Ke Xu <leonhartx.k@gmail.com>
Kei Ohmura <ohmura.kei@gmail.com>
Keith Hudgins <greenman@greenman.org>
Keli Hu <dev@keli.hu>
Ken Cochrane <kencochrane@gmail.com>
Ken Herner <kherner@progress.com>
Ken ICHIKAWA <ichikawa.ken@jp.fujitsu.com>
Ken Reese <krrgithub@gmail.com>
Kenfe-Mickaël Laventure <mickael.laventure@gmail.com>
Kenjiro Nakayama <nakayamakenjiro@gmail.com>
Kent Johnson <kentoj@gmail.com>
Kenta Tada <Kenta.Tada@sony.com>
Kevin "qwazerty" Houdebert <kevin.houdebert@gmail.com>
Kevin Alvarez <crazy-max@users.noreply.github.com>
Kevin Burke <kev@inburke.com>
Kevin Clark <kevin.clark@gmail.com>
Kevin Feyrer <kevin.feyrer@btinternet.com>
Kevin J. Lynagh <kevin@keminglabs.com>
Kevin Jing Qiu <kevin@idempotent.ca>
Kevin Kern <kaiwentan@harmonycloud.cn>
Kevin Menard <kevin@nirvdrum.com>
Kevin Meredith <kevin.m.meredith@gmail.com>
Kevin P. Kucharczyk <kevinkucharczyk@gmail.com>
Kevin Parsons <kevpar@microsoft.com>
Kevin Richardson <kevin@kevinrichardson.co>
Kevin Shi <kshi@andrew.cmu.edu>
Kevin Wallace <kevin@pentabarf.net>
Kevin Yap <me@kevinyap.ca>
Keyvan Fatehi <keyvanfatehi@gmail.com>
kies <lleelm@gmail.com>
Kim BKC Carlbacker <kim.carlbacker@gmail.com>
Kim Eik <kim@heldig.org>
Kimbro Staken <kstaken@kstaken.com>
Kir Kolyshkin <kolyshkin@gmail.com>
Kiran Gangadharan <kiran.daredevil@gmail.com>
Kirill SIbirev <l0kix2@gmail.com>
knappe <tyler.knappe@gmail.com>
Kohei Tsuruta <coheyxyz@gmail.com>
Koichi Shiraishi <k@zchee.io>
Konrad Kleine <konrad.wilhelm.kleine@gmail.com>
Konrad Ponichtera <konpon96@gmail.com>
Konstantin Gribov <grossws@gmail.com>
Konstantin L <sw.double@gmail.com>
Konstantin Pelykh <kpelykh@zettaset.com>
Kostadin Plachkov <k.n.plachkov@gmail.com>
Krasi Georgiev <krasi@vip-consult.solutions>
Krasimir Georgiev <support@vip-consult.co.uk>
Kris-Mikael Krister <krismikael@protonmail.com>
Kristian Haugene <kristian.haugene@capgemini.com>
Kristina Zabunova <triara.xiii@gmail.com>
Krystian Wojcicki <kwojcicki@sympatico.ca>
Kunal Kushwaha <kushwaha_kunal_v7@lab.ntt.co.jp>
Kunal Tyagi <tyagi.kunal@live.com>
Kyle Conroy <kyle.j.conroy@gmail.com>
Kyle Linden <linden.kyle@gmail.com>
Kyle Squizzato <ksquizz@gmail.com>
Kyle Wuolle <kyle.wuolle@gmail.com>
kyu <leehk1227@gmail.com>
Lachlan Coote <lcoote@vmware.com>
Lai Jiangshan <jiangshanlai@gmail.com>
Lajos Papp <lajos.papp@sequenceiq.com>
Lakshan Perera <lakshan@laktek.com>
Lalatendu Mohanty <lmohanty@redhat.com>
Lance Chen <cyen0312@gmail.com>
Lance Kinley <lkinley@loyaltymethods.com>
Lars Butler <Lars.Butler@gmail.com>
Lars Kellogg-Stedman <lars@redhat.com>
Lars R. Damerow <lars@pixar.com>
Lars-Magnus Skog <ralphtheninja@riseup.net>
Laszlo Meszaros <lacienator@gmail.com>
Laura Frank <ljfrank@gmail.com>
Laurent Bernaille <laurent.bernaille@datadoghq.com>
Laurent Erignoux <lerignoux@gmail.com>
Laurie Voss <github@seldo.com>
Leandro Siqueira <leandro.siqueira@gmail.com>
Lee Calcote <leecalcote@gmail.com>
Lee Chao <932819864@qq.com>
Lee, Meng-Han <sunrisedm4@gmail.com>
Lei Gong <lgong@alauda.io>
Lei Jitang <leijitang@huawei.com>
Leiiwang <u2takey@gmail.com>
Len Weincier <len@cloudafrica.net>
Lennie <github@consolejunkie.net>
Leo Gallucci <elgalu3@gmail.com>
Leonardo Nodari <me@leonardonodari.it>
Leonardo Taccari <leot@NetBSD.org>
Leszek Kowalski <github@leszekkowalski.pl>
Levi Blackstone <levi.blackstone@rackspace.com>
Levi Gross <levi@levigross.com>
Levi Harrison <levisamuelharrison@gmail.com>
Lewis Daly <lewisdaly@me.com>
Lewis Marshall <lewis@lmars.net>
Lewis Peckover <lew+github@lew.io>
Li Yi <denverdino@gmail.com>
Liam Macgillavry <liam@kumina.nl>
Liana Lo <liana.lixia@gmail.com>
Liang Mingqiang <mqliang.zju@gmail.com>
Liang-Chi Hsieh <viirya@gmail.com>
liangwei <liangwei14@huawei.com>
Liao Qingwei <liaoqingwei@huawei.com>
Lifubang <lifubang@acmcoder.com>
Lihua Tang <lhtang@alauda.io>
Lily Guo <lily.guo@docker.com>
limeidan <limeidan@loongson.cn>
Lin Lu <doraalin@163.com>
LingFaKe <lingfake@huawei.com>
Linus Heckemann <lheckemann@twig-world.com>
Liran Tal <liran.tal@gmail.com>
Liron Levin <liron@twistlock.com>
Liu Bo <bo.li.liu@oracle.com>
Liu Hua <sdu.liu@huawei.com>
liwenqi <vikilwq@zju.edu.cn>
lixiaobing10051267 <li.xiaobing1@zte.com.cn>
Liz Zhang <lizzha@microsoft.com>
LIZAO LI <lzlarryli@gmail.com>
Lizzie Dixon <_@lizzie.io>
Lloyd Dewolf <foolswisdom@gmail.com>
Lokesh Mandvekar <lsm5@fedoraproject.org>
longliqiang88 <394564827@qq.com>
Lorenz Leutgeb <lorenz.leutgeb@gmail.com>
Lorenzo Fontana <fontanalorenz@gmail.com>
Lotus Fenn <fenn.lotus@gmail.com>
Louis Delossantos <ldelossa.ld@gmail.com>
Louis Opter <kalessin@kalessin.fr>
Luca Favatella <luca.favatella@erlang-solutions.com>
Luca Marturana <lucamarturana@gmail.com>
Luca Orlandi <luca.orlandi@gmail.com>
Luca-Bogdan Grigorescu <Luca-Bogdan Grigorescu>
Lucas Chan <lucas-github@lucaschan.com>
Lucas Chi <lucas@teacherspayteachers.com>
Lucas Molas <lmolas@fundacionsadosky.org.ar>
Lucas Silvestre <lukas.silvestre@gmail.com>
Luciano Mores <leslau@gmail.com>
Luis Henrique Mulinari <luis.mulinari@gmail.com>
Luis Martínez de Bartolomé Izquierdo <lmartinez@biicode.com>
Luiz Svoboda <luizek@gmail.com>
Lukas Heeren <lukas-heeren@hotmail.com>
Lukas Waslowski <cr7pt0gr4ph7@gmail.com>
lukaspustina <lukas.pustina@centerdevice.com>
Lukasz Zajaczkowski <Lukasz.Zajaczkowski@ts.fujitsu.com>
Luke Marsden <me@lukemarsden.net>
Lyn <energylyn@zju.edu.cn>
Lynda O'Leary <lyndaoleary29@gmail.com>
Lénaïc Huard <lhuard@amadeus.com>
Ma Müller <mueller-ma@users.noreply.github.com>
Ma Shimiao <mashimiao.fnst@cn.fujitsu.com>
Mabin <bin.ma@huawei.com>
Madhan Raj Mookkandy <MadhanRaj.Mookkandy@microsoft.com>
Madhav Puri <madhav.puri@gmail.com>
Madhu Venugopal <mavenugo@gmail.com>
Mageee <fangpuyi@foxmail.com>
Mahesh Tiyyagura <tmahesh@gmail.com>
malnick <malnick@gmail..com>
Malte Janduda <mail@janduda.net>
Manfred Touron <m@42.am>
Manfred Zabarauskas <manfredas@zabarauskas.com>
Manjunath A Kumatagi <mkumatag@in.ibm.com>
Mansi Nahar <mmn4185@rit.edu>
Manuel Meurer <manuel@krautcomputing.com>
Manuel Rüger <manuel@rueg.eu>
Manuel Woelker <github@manuel.woelker.org>
mapk0y <mapk0y@gmail.com>
Marc Abramowitz <marc@marc-abramowitz.com>
Marc Kuo <kuomarc2@gmail.com>
Marc Tamsky <mtamsky@gmail.com>
Marcel Edmund Franke <marcel.edmund.franke@gmail.com>
Marcelo Horacio Fortino <info@fortinux.com>
Marcelo Salazar <chelosalazar@gmail.com>
Marco Hennings <marco.hennings@freiheit.com>
Marcus Cobden <mcobden@cisco.com>
Marcus Farkas <toothlessgear@finitebox.com>
Marcus Linke <marcus.linke@gmx.de>
Marcus Martins <marcus@docker.com>
Marcus Ramberg <marcus@nordaaker.com>
Marek Goldmann <marek.goldmann@gmail.com>
Marian Marinov <mm@yuhu.biz>
Marianna Tessel <mtesselh@gmail.com>
Mario Loriedo <mario.loriedo@gmail.com>
Marius Gundersen <me@mariusgundersen.net>
Marius Sturm <marius@graylog.com>
Marius Voila <marius.voila@gmail.com>
Mark Allen <mrallen1@yahoo.com>
Mark Feit <mfeit@internet2.edu>
Mark Jeromin <mark.jeromin@sysfrog.net>
Mark McGranaghan <mmcgrana@gmail.com>
Mark McKinstry <mmckinst@umich.edu>
Mark Milstein <mark@epiloque.com>
Mark Oates <fl0yd@me.com>
Mark Parker <godefroi@users.noreply.github.com>
Mark Vainomaa <mikroskeem@mikroskeem.eu>
Mark West <markewest@gmail.com>
Markan Patel <mpatel678@gmail.com>
Marko Mikulicic <mmikulicic@gmail.com>
Marko Tibold <marko@tibold.nl>
Markus Fix <lispmeister@gmail.com>
Markus Kortlang <hyp3rdino@googlemail.com>
Martijn Dwars <ikben@martijndwars.nl>
Martijn van Oosterhout <kleptog@svana.org>
Martin Braun <braun@neuroforge.de>
Martin Dojcak <martin.dojcak@lablabs.io>
Martin Honermeyer <maze@strahlungsfrei.de>
Martin Kelly <martin@surround.io>
Martin Mosegaard Amdisen <martin.amdisen@praqma.com>
Martin Muzatko <martin@happy-css.com>
Martin Redmond <redmond.martin@gmail.com>
Maru Newby <mnewby@thesprawl.net>
Mary Anthony <mary.anthony@docker.com>
Masahito Zembutsu <zembutsu@users.noreply.github.com>
Masato Ohba <over.rye@gmail.com>
Masayuki Morita <minamijoyo@gmail.com>
Mason Malone <mason.malone@gmail.com>
Mateusz Sulima <sulima.mateusz@gmail.com>
Mathias Monnerville <mathias@monnerville.com>
Mathieu Champlon <mathieu.champlon@docker.com>
Mathieu Le Marec - Pasquet <kiorky@cryptelium.net>
Mathieu Parent <math.parent@gmail.com>
Mathieu Paturel <mathieu.paturel@gmail.com>
Matt Apperson <me@mattapperson.com>
Matt Bachmann <bachmann.matt@gmail.com>
Matt Bajor <matt@notevenremotelydorky.com>
Matt Bentley <matt.bentley@docker.com>
Matt Haggard <haggardii@gmail.com>
Matt Hoyle <matt@deployable.co>
Matt McCormick <matt.mccormick@kitware.com>
Matt Moore <mattmoor@google.com>
Matt Morrison <3maven@gmail.com>
Matt Richardson <matt@redgumtech.com.au>
Matt Rickard <mrick@google.com>
Matt Robenolt <matt@ydekproductions.com>
Matt Schurenko <matt.schurenko@gmail.com>
Matt Williams <mattyw@me.com>
Matthew Heon <mheon@redhat.com>
Matthew Lapworth <matthewl@bit-shift.net>
Matthew Mayer <matthewkmayer@gmail.com>
Matthew Mosesohn <raytrac3r@gmail.com>
Matthew Mueller <mattmuelle@gmail.com>
Matthew Riley <mattdr@google.com>
Matthias Klumpp <matthias@tenstral.net>
Matthias Kühnle <git.nivoc@neverbox.com>
Matthias Rampke <mr@soundcloud.com>
Matthieu Fronton <m@tthieu.fr>
Matthieu Hauglustaine <matt.hauglustaine@gmail.com>
Mattias Jernberg <nostrad@gmail.com>
Mauricio Garavaglia <mauricio@medallia.com>
mauriyouth <mauriyouth@gmail.com>
Max Harmathy <max.harmathy@web.de>
Max Shytikov <mshytikov@gmail.com>
Max Timchenko <maxvt@pagerduty.com>
Maxim Fedchyshyn <sevmax@gmail.com>
Maxim Ivanov <ivanov.maxim@gmail.com>
Maxim Kulkin <mkulkin@mirantis.com>
Maxim Treskin <zerthurd@gmail.com>
Maxime Petazzoni <max@signalfuse.com>
Maximiliano Maccanti <maccanti@amazon.com>
Maxwell <csuhp007@gmail.com>
Meaglith Ma <genedna@gmail.com>
meejah <meejah@meejah.ca>
Megan Kostick <mkostick@us.ibm.com>
Mehul Kar <mehul.kar@gmail.com>
Mei ChunTao <mei.chuntao@zte.com.cn>
Mengdi Gao <usrgdd@gmail.com>
Menghui Chen <menghui.chen@alibaba-inc.com>
Mert Yazıcıoğlu <merty@users.noreply.github.com>
mgniu <mgniu@dataman-inc.com>
Micah Zoltu <micah@newrelic.com>
Michael A. Smith <michael@smith-li.com>
Michael Beskin <mrbeskin@gmail.com>
Michael Bridgen <mikeb@squaremobius.net>
Michael Brown <michael@netdirect.ca>
Michael Chiang <mchiang@docker.com>
Michael Crosby <crosbymichael@gmail.com>
Michael Currie <mcurrie@bruceforceresearch.com>
Michael Friis <friism@gmail.com>
Michael Gorsuch <gorsuch@github.com>
Michael Grauer <michael.grauer@kitware.com>
Michael Holzheu <holzheu@linux.vnet.ibm.com>
Michael Hudson-Doyle <michael.hudson@canonical.com>
Michael Huettermann <michael@huettermann.net>
Michael Irwin <mikesir87@gmail.com>
Michael Kuehn <micha@kuehn.io>
Michael Käufl <docker@c.michael-kaeufl.de>
Michael Neale <michael.neale@gmail.com>
Michael Nussbaum <michael.nussbaum@getbraintree.com>
Michael Prokop <github@michael-prokop.at>
Michael Scharf <github@scharf.gr>
Michael Spetsiotis <michael_spets@hotmail.com>
Michael Stapelberg <michael+gh@stapelberg.de>
Michael Steinert <mike.steinert@gmail.com>
Michael Thies <michaelthies78@gmail.com>
Michael Weidmann <michaelweidmann@web.de>
Michael West <mwest@mdsol.com>
Michael Zhao <michael.zhao@arm.com>
Michal Fojtik <mfojtik@redhat.com>
Michal Gebauer <mishak@mishak.net>
Michal Jemala <michal.jemala@gmail.com>
Michal Kostrzewa <michal.kostrzewa@codilime.com>
Michal Minář <miminar@redhat.com>
Michal Rostecki <mrostecki@opensuse.org>
Michal Wieczorek <wieczorek-michal@wp.pl>
Michaël Pailloncy <mpapo.dev@gmail.com>
Michał Czeraszkiewicz <czerasz@gmail.com>
Michał Gryko <github@odkurzacz.org>
Michał Kosek <mihao@users.noreply.github.com>
Michiel de Jong <michiel@unhosted.org>
Mickaël Fortunato <morsi.morsicus@gmail.com>
Mickaël Remars <mickael@remars.com>
Miguel Angel Fernández <elmendalerenda@gmail.com>
Miguel Morales <mimoralea@gmail.com>
Miguel Perez <miguel@voyat.com>
Mihai Borobocea <MihaiBorob@gmail.com>
Mihuleacc Sergiu <mihuleac.sergiu@gmail.com>
Mikael Davranche <mikael.davranche@corp.ovh.com>
Mike Brown <brownwm@us.ibm.com>
Mike Bush <mpbush@gmail.com>
Mike Casas <mkcsas0@gmail.com>
Mike Chelen <michael.chelen@gmail.com>
Mike Danese <mikedanese@google.com>
Mike Dillon <mike@embody.org>
Mike Dougherty <mike.dougherty@docker.com>
Mike Estes <mike.estes@logos.com>
Mike Gaffney <mike@uberu.com>
Mike Goelzer <mike.goelzer@docker.com>
Mike Leone <mleone896@gmail.com>
Mike Lundy <mike@fluffypenguin.org>
Mike MacCana <mike.maccana@gmail.com>
Mike Naberezny <mike@naberezny.com>
Mike Snitzer <snitzer@redhat.com>
mikelinjie <294893458@qq.com>
Mikhail Sobolev <mss@mawhrin.net>
Miklos Szegedi <miklos.szegedi@cloudera.com>
Milas Bowman <milasb@gmail.com>
Milind Chawre <milindchawre@gmail.com>
Miloslav Trmač <mitr@redhat.com>
mingqing <limingqing@cyou-inc.com>
Mingzhen Feng <fmzhen@zju.edu.cn>
Misty Stanley-Jones <misty@docker.com>
Mitch Capper <mitch.capper@gmail.com>
Mizuki Urushida <z11111001011@gmail.com>
mlarcher <github@ringabell.org>
Mohammad Banikazemi <MBanikazemi@gmail.com>
Mohammad Nasirifar <farnasirim@gmail.com>
Mohammed Aaqib Ansari <maaquib@gmail.com>
Mohit Soni <mosoni@ebay.com>
Moorthy RS <rsmoorthy@gmail.com>
Morgan Bauer <mbauer@us.ibm.com>
Morgante Pell <morgante.pell@morgante.net>
Morgy93 <thomas@ulfertsprygoda.de>
Morten Siebuhr <sbhr@sbhr.dk>
Morton Fox <github@qslw.com>
Moysés Borges <moysesb@gmail.com>
mrfly <mr.wrfly@gmail.com>
Mrunal Patel <mrunalp@gmail.com>
Muayyad Alsadi <alsadi@gmail.com>
Muhammad Zohaib Aslam <zohaibse011@gmail.com>
Mustafa Akın <mustafa91@gmail.com>
Muthukumar R <muthur@gmail.com>
Máximo Cuadros <mcuadros@gmail.com>
Médi-Rémi Hashim <medimatrix@users.noreply.github.com>
Nace Oroz <orkica@gmail.com>
Nahum Shalman <nshalman@omniti.com>
Nakul Pathak <nakulpathak3@hotmail.com>
Nalin Dahyabhai <nalin@redhat.com>
Nan Monnand Deng <monnand@gmail.com>
Naoki Orii <norii@cs.cmu.edu>
Natalie Parker <nparker@omnifone.com>
Natanael Copa <natanael.copa@docker.com>
Natasha Jarus <linuxmercedes@gmail.com>
Nate Brennand <nate.brennand@clever.com>
Nate Eagleson <nate@nateeag.com>
Nate Jones <nate@endot.org>
Nathan Carlson <carl4403@umn.edu>
Nathan Herald <me@nathanherald.com>
Nathan Hsieh <hsieh.nathan@gmail.com>
Nathan Kleyn <nathan@nathankleyn.com>
Nathan LeClaire <nathan.leclaire@docker.com>
Nathan McCauley <nathan.mccauley@docker.com>
Nathan Williams <nathan@teamtreehouse.com>
Naveed Jamil <naveed.jamil@tenpearls.com>
Neal McBurnett <neal@mcburnett.org>
Neil Horman <nhorman@tuxdriver.com>
Neil Peterson <neilpeterson@outlook.com>
Nelson Chen <crazysim@gmail.com>
Neyazul Haque <nuhaque@gmail.com>
Nghia Tran <nghia@google.com>
Niall O'Higgins <niallo@unworkable.org>
Nicholas E. Rabenau <nerab@gmx.at>
Nick Adcock <nick.adcock@docker.com>
Nick DeCoursin <n.decoursin@foodpanda.com>
Nick Irvine <nfirvine@nfirvine.com>
Nick Neisen <nwneisen@gmail.com>
Nick Parker <nikaios@gmail.com>
Nick Payne <nick@kurai.co.uk>
Nick Russo <nicholasjamesrusso@gmail.com>
Nick Stenning <nick.stenning@digital.cabinet-office.gov.uk>
Nick Stinemates <nick@stinemates.org>
Nick Wood <nwood@microsoft.com>
NickrenREN <yuquan.ren@easystack.cn>
Nicola Kabar <nicolaka@gmail.com>
Nicolas Borboën <ponsfrilus@gmail.com>
Nicolas De Loof <nicolas.deloof@gmail.com>
Nicolas Dudebout <nicolas.dudebout@gatech.edu>
Nicolas Goy <kuon@goyman.com>
Nicolas Kaiser <nikai@nikai.net>
Nicolas Sterchele <sterchele.nicolas@gmail.com>
Nicolas V Castet <nvcastet@us.ibm.com>
Nicolás Hock Isaza <nhocki@gmail.com>
Niel Drummond <niel@drummond.lu>
Nigel Poulton <nigelpoulton@hotmail.com>
Nik Nyby <nikolas@gnu.org>
Nikhil Chawla <chawlanikhil24@gmail.com>
NikolaMandic <mn080202@gmail.com>
Nikolas Garofil <nikolas.garofil@uantwerpen.be>
Nikolay Edigaryev <edigaryev@gmail.com>
Nikolay Milovanov <nmil@itransformers.net>
Nirmal Mehta <nirmalkmehta@gmail.com>
Nishant Totla <nishanttotla@gmail.com>
NIWA Hideyuki <niwa.niwa@nifty.ne.jp>
Noah Meyerhans <nmeyerha@amazon.com>
Noah Treuhaft <noah.treuhaft@docker.com>
NobodyOnSE <ich@sektor.selfip.com>
noducks <onemannoducks@gmail.com>
Nolan Darilek <nolan@thewordnerd.info>
Noriki Nakamura <noriki.nakamura@miraclelinux.com>
nponeccop <andy.melnikov@gmail.com>
Nurahmadie <nurahmadie@gmail.com>
Nuutti Kotivuori <naked@iki.fi>
nzwsch <hi@nzwsch.com>
O.S. Tezer <ostezer@gmail.com>
objectified <objectified@gmail.com>
Odin Ugedal <odin@ugedal.com>
Oguz Bilgic <fisyonet@gmail.com>
Oh Jinkyun <tintypemolly@gmail.com>
Ohad Schneider <ohadschn@users.noreply.github.com>
ohmystack <jun.jiang02@ele.me>
Ole Reifschneider <mail@ole-reifschneider.de>
Oliver Neal <ItsVeryWindy@users.noreply.github.com>
Oliver Reason <oli@overrateddev.co>
Olivier Gambier <dmp42@users.noreply.github.com>
Olle Jonsson <olle.jonsson@gmail.com>
Olli Janatuinen <olli.janatuinen@gmail.com>
Olly Pomeroy <oppomeroy@gmail.com>
Omri Shiv <Omri.Shiv@teradata.com>
Onur Filiz <onur.filiz@microsoft.com>
Oriol Francès <oriolfa@gmail.com>
Oscar Bonilla <6f6231@gmail.com>
Oskar Niburski <oskarniburski@gmail.com>
Otto Kekäläinen <otto@seravo.fi>
Ouyang Liduo <oyld0210@163.com>
Ovidio Mallo <ovidio.mallo@gmail.com>
Panagiotis Moustafellos <pmoust@elastic.co>
Paolo G. Giarrusso <p.giarrusso@gmail.com>
Pascal <pascalgn@users.noreply.github.com>
Pascal Bach <pascal.bach@siemens.com>
Pascal Borreli <pascal@borreli.com>
Pascal Hartig <phartig@rdrei.net>
Patrick Böänziger <patrick.baenziger@bsi-software.com>
Patrick Devine <patrick.devine@docker.com>
Patrick Haas <patrickhaas@google.com>
Patrick Hemmer <patrick.hemmer@gmail.com>
Patrick Stapleton <github@gdi2290.com>
Patrik Cyvoct <patrik@ptrk.io>
pattichen <craftsbear@gmail.com>
Paul "TBBle" Hampson <Paul.Hampson@Pobox.com>
Paul <paul9869@gmail.com>
paul <paul@inkling.com>
Paul Annesley <paul@annesley.cc>
Paul Bellamy <paul.a.bellamy@gmail.com>
Paul Bowsher <pbowsher@globalpersonals.co.uk>
Paul Furtado <pfurtado@hubspot.com>
Paul Hammond <paul@paulhammond.org>
Paul Jimenez <pj@place.org>
Paul Kehrer <paul.l.kehrer@gmail.com>
Paul Lietar <paul@lietar.net>
Paul Liljenberg <liljenberg.paul@gmail.com>
Paul Morie <pmorie@gmail.com>
Paul Nasrat <pnasrat@gmail.com>
Paul Weaver <pauweave@cisco.com>
Paulo Gomes <pjbgf@linux.com>
Paulo Ribeiro <paigr.io@gmail.com>
Pavel Lobashov <ShockwaveNN@gmail.com>
Pavel Matěja <pavel@verotel.cz>
Pavel Pletenev <cpp.create@gmail.com>
Pavel Pospisil <pospispa@gmail.com>
Pavel Sutyrin <pavel.sutyrin@gmail.com>
Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
Pavlos Ratis <dastergon@gentoo.org>
Pavol Vargovcik <pallly.vargovcik@gmail.com>
Pawel Konczalski <mail@konczalski.de>
Paweł Gronowski <pawel.gronowski@docker.com>
Peeyush Gupta <gpeeyush@linux.vnet.ibm.com>
Peggy Li <peggyli.224@gmail.com>
Pei Su <sillyousu@gmail.com>
Peng Tao <bergwolf@gmail.com>
Penghan Wang <ph.wang@daocloud.io>
Per Weijnitz <per.weijnitz@gmail.com>
perhapszzy@sina.com <perhapszzy@sina.com>
Pete Woods <pete.woods@circleci.com>
Peter Bourgon <peter@bourgon.org>
Peter Braden <peterbraden@peterbraden.co.uk>
Peter Bücker <peter.buecker@pressrelations.de>
Peter Choi <phkchoi89@gmail.com>
Peter Dave Hello <hsu@peterdavehello.org>
Peter Edge <peter.edge@gmail.com>
Peter Ericson <pdericson@gmail.com>
Peter Esbensen <pkesbensen@gmail.com>
Peter Jaffe <pjaffe@nevo.com>
Peter Kang <peter@spell.run>
Peter Malmgren <ptmalmgren@gmail.com>
Peter Salvatore <peter@psftw.com>
Peter Volpe <petervo@redhat.com>
Peter Waller <p@pwaller.net>
Petr Švihlík <svihlik.petr@gmail.com>
Petros Angelatos <petrosagg@gmail.com>
Phil <underscorephil@gmail.com>
Phil Estes <estesp@gmail.com>
Phil Sphicas <phil.sphicas@att.com>
Phil Spitler <pspitler@gmail.com>
Philip Alexander Etling <paetling@gmail.com>
Philip Monroe <phil@philmonroe.com>
Philipp Gillé <philipp.gille@gmail.com>
Philipp Wahala <philipp.wahala@gmail.com>
Philipp Weissensteiner <mail@philippweissensteiner.com>
Phillip Alexander <git@phillipalexander.io>
phineas <phin@phineas.io>
pidster <pid@pidster.com>
Piergiuliano Bossi <pgbossi@gmail.com>
Pierre <py@poujade.org>
Pierre Carrier <pierre@meteor.com>
Pierre Dal-Pra <dalpra.pierre@gmail.com>
Pierre Wacrenier <pierre.wacrenier@gmail.com>
Pierre-Alain RIVIERE <pariviere@ippon.fr>
Piotr Bogdan <ppbogdan@gmail.com>
Piotr Karbowski <piotr.karbowski@protonmail.ch>
Porjo <porjo38@yahoo.com.au>
Poul Kjeldager Sørensen <pks@s-innovations.net>
Pradeep Chhetri <pradeep@indix.com>
Pradip Dhara <pradipd@microsoft.com>
Pradipta Kr. Banerjee <bpradip@in.ibm.com>
Prasanna Gautam <prasannagautam@gmail.com>
Pratik Karki <prertik@outlook.com>
Prayag Verma <prayag.verma@gmail.com>
Priya Wadhwa <priyawadhwa@google.com>
Projjol Banerji <probaner23@gmail.com>
Przemek Hejman <przemyslaw.hejman@gmail.com>
Puneet Pruthi <puneet.pruthi@oracle.com>
Pure White <daniel48@126.com>
pysqz <randomq@126.com>
Qiang Huang <h.huangqiang@huawei.com>
Qin TianHuan <tianhuan@bingotree.cn>
Qinglan Peng <qinglanpeng@zju.edu.cn>
Quan Tian <tianquan@cloudin.cn>
qudongfang <qudongfang@gmail.com>
Quentin Brossard <qbrossard@gmail.com>
Quentin Perez <qperez@ocs.online.net>
Quentin Tayssier <qtayssier@gmail.com>
r0n22 <cameron.regan@gmail.com>
Radostin Stoyanov <rstoyanov1@gmail.com>
Rafal Jeczalik <rjeczalik@gmail.com>
Rafe Colton <rafael.colton@gmail.com>
Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>
Raghuram Devarakonda <draghuram@gmail.com>
Raja Sami <raja.sami@tenpearls.com>
Rajat Pandit <rp@rajatpandit.com>
Rajdeep Dua <dua_rajdeep@yahoo.com>
Ralf Sippl <ralf.sippl@gmail.com>
Ralle <spam@rasmusa.net>
Ralph Bean <rbean@redhat.com>
Ramkumar Ramachandra <artagnon@gmail.com>
Ramon Brooker <rbrooker@aetherealmind.com>
Ramon van Alteren <ramon@vanalteren.nl>
RaviTeja Pothana <ravi-teja@live.com>
Ray Tsang <rayt@google.com>
ReadmeCritic <frankensteinbot@gmail.com>
realityone <realityone@me.com>
Recursive Madman <recursive.madman@gmx.de>
Reficul <xuzhenglun@gmail.com>
Regan McCooey <rmccooey27@aol.com>
Remi Rampin <remirampin@gmail.com>
Remy Suen <remy.suen@gmail.com>
Renato Riccieri Santos Zannon <renato.riccieri@gmail.com>
Renaud Gaubert <rgaubert@nvidia.com>
Rhys Hiltner <rhys@twitch.tv>
Ri Xu <xuri.me@gmail.com>
Ricardo N Feliciano <FelicianoTech@gmail.com>
Rich Horwood <rjhorwood@apple.com>
Rich Moyse <rich@moyse.us>
Rich Seymour <rseymour@gmail.com>
Richard Burnison <rburnison@ebay.com>
Richard Harvey <richard@squarecows.com>
Richard Mathie <richard.mathie@amey.co.uk>
Richard Metzler <richard@paadee.com>
Richard Scothern <richard.scothern@gmail.com>
Richo Healey <richo@psych0tik.net>
Rick Bradley <rick@users.noreply.github.com>
Rick van de Loo <rickvandeloo@gmail.com>
Rick Wieman <git@rickw.nl>
Rik Nijessen <rik@keefo.nl>
Riku Voipio <riku.voipio@linaro.org>
Riley Guerin <rileytg.dev@gmail.com>
Ritesh H Shukla <sritesh@vmware.com>
Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Rob Cowsill <42620235+rcowsill@users.noreply.github.com>
Rob Gulewich <rgulewich@netflix.com>
Rob Vesse <rvesse@dotnetrdf.org>
Robert Bachmann <rb@robertbachmann.at>
Robert Bittle <guywithnose@gmail.com>
Robert Obryk <robryk@gmail.com>
Robert Schneider <mail@shakeme.info>
Robert Shade <robert.shade@gmail.com>
Robert Stern <lexandro2000@gmail.com>
Robert Terhaar <rterhaar@atlanticdynamic.com>
Robert Wallis <smilingrob@gmail.com>
Robert Wang <robert@arctic.tw>
Roberto G. Hashioka <roberto.hashioka@docker.com>
Roberto Muñoz Fernández <robertomf@gmail.com>
Robin Naundorf <r.naundorf@fh-muenster.de>
Robin Schneider <ypid@riseup.net>
Robin Speekenbrink <robin@kingsquare.nl>
Robin Thoni <robin@rthoni.com>
robpc <rpcann@gmail.com>
Rodolfo Carvalho <rhcarvalho@gmail.com>
Rodrigo Campos <rodrigo@kinvolk.io>
Rodrigo Vaz <rodrigo.vaz@gmail.com>
Roel Van Nyen <roel.vannyen@gmail.com>
Roger Peppe <rogpeppe@gmail.com>
Rohit Jnagal <jnagal@google.com>
Rohit Kadam <rohit.d.kadam@gmail.com>
Rohit Kapur <rkapur@flatiron.com>
Rojin George <rojingeorge@huawei.com>
Roland Huß <roland@jolokia.org>
Roland Kammerer <roland.kammerer@linbit.com>
Roland Moriz <rmoriz@users.noreply.github.com>
Roma Sokolov <sokolov.r.v@gmail.com>
Roman Dudin <katrmr@gmail.com>
Roman Mazur <roman@balena.io>
Roman Strashkin <roman.strashkin@gmail.com>
Roman Volosatovs <roman.volosatovs@docker.com>
Roman Zabaluev <gpg@haarolean.dev>
Ron Smits <ron.smits@gmail.com>
Ron Williams <ron.a.williams@gmail.com>
Rong Gao <gaoronggood@163.com>
Rong Zhang <rongzhang@alauda.io>
Rongxiang Song <tinysong1226@gmail.com>
Rony Weng <ronyweng@synology.com>
root <docker-dummy@example.com>
root <root@lxdebmas.marist.edu>
root <root@ubuntu-14.04-amd64-vbox>
root <root@webm215.cluster016.ha.ovh.net>
Rory Hunter <roryhunter2@gmail.com>
Rory McCune <raesene@gmail.com>
Ross Boucher <rboucher@gmail.com>
Rovanion Luckey <rovanion.luckey@gmail.com>
Royce Remer <royceremer@gmail.com>
Rozhnov Alexandr <nox73@ya.ru>
Rudolph Gottesheim <r.gottesheim@loot.at>
Rui Cao <ruicao@alauda.io>
Rui Lopes <rgl@ruilopes.com>
Ruilin Li <liruilin4@huawei.com>
Runshen Zhu <runshen.zhu@gmail.com>
Russ Magee <rmagee@gmail.com>
Ryan Abrams <rdabrams@gmail.com>
Ryan Anderson <anderson.ryanc@gmail.com>
Ryan Aslett <github@mixologic.com>
Ryan Barry <rbarry@mirantis.com>
Ryan Belgrave <rmb1993@gmail.com>
Ryan Campbell <campbellr@gmail.com>
Ryan Detzel <ryan.detzel@gmail.com>
Ryan Fowler <rwfowler@gmail.com>
Ryan Liu <ryanlyy@me.com>
Ryan McLaughlin <rmclaughlin@insidesales.com>
Ryan O'Donnell <odonnellryanc@gmail.com>
Ryan Seto <ryanseto@yak.net>
Ryan Shea <sheabot03@gmail.com>
Ryan Simmen <ryan.simmen@gmail.com>
Ryan Stelly <ryan.stelly@live.com>
Ryan Thomas <rthomas@atlassian.com>
Ryan Trauntvein <rtrauntvein@novacoast.com>
Ryan Wallner <ryan.wallner@clusterhq.com>
Ryan Zhang <ryan.zhang@docker.com>
ryancooper7 <ryan.cooper7@gmail.com>
RyanDeng <sheldon.d1018@gmail.com>
Ryo Nakao <nakabonne@gmail.com>
Ryoga Saito <contact@proelbtn.com>
Rémy Greinhofer <remy.greinhofer@livelovely.com>
s. rannou <mxs@sbrk.org>
Sabin Basyal <sabin.basyal@gmail.com>
Sachin Joshi <sachin_jayant_joshi@hotmail.com>
Sagar Hani <sagarhani33@gmail.com>
Sainath Grandhi <sainath.grandhi@intel.com>
Sakeven Jiang <jc5930@sina.cn>
Salahuddin Khan <salah@docker.com>
Sally O'Malley <somalley@redhat.com>
Sam Abed <sam.abed@gmail.com>
Sam Alba <sam.alba@gmail.com>
Sam Bailey <cyprix@cyprix.com.au>
Sam J Sharpe <sam.sharpe@digital.cabinet-office.gov.uk>
Sam Neirinck <sam@samneirinck.com>
Sam Reis <sreis@atlassian.com>
Sam Rijs <srijs@airpost.net>
Sam Whited <sam@samwhited.com>
Sambuddha Basu <sambuddhabasu1@gmail.com>
Sami Wagiaalla <swagiaal@redhat.com>
Samuel Andaya <samuel@andaya.net>
Samuel Dion-Girardeau <samuel.diongirardeau@gmail.com>
Samuel Karp <me@samuelkarp.com>
Samuel PHAN <samuel-phan@users.noreply.github.com>
sanchayanghosh <sanchayanghosh@outlook.com>
Sandeep Bansal <sabansal@microsoft.com>
Sankar சங்கர் <sankar.curiosity@gmail.com>
Sanket Saurav <sanketsaurav@gmail.com>
Santhosh Manohar <santhosh@docker.com>
sapphiredev <se.imas.kr@gmail.com>
Sargun Dhillon <sargun@netflix.com>
Sascha Andres <sascha.andres@outlook.com>
Sascha Grunert <sgrunert@suse.com>
SataQiu <qiushida@beyondcent.com>
Satnam Singh <satnam@raintown.org>
Satoshi Amemiya <satoshi_amemiya@voyagegroup.com>
Satoshi Tagomori <tagomoris@gmail.com>
Scott Bessler <scottbessler@gmail.com>
Scott Collier <emailscottcollier@gmail.com>
Scott Johnston <scott@docker.com>
Scott Percival <scottp@lastyard.com>
Scott Stamp <scottstamp851@gmail.com>
Scott Walls <sawalls@umich.edu>
sdreyesg <sdreyesg@gmail.com>
Sean Christopherson <sean.j.christopherson@intel.com>
Sean Cronin <seancron@gmail.com>
Sean Lee <seanlee@tw.ibm.com>
Sean McIntyre <s.mcintyre@xverba.ca>
Sean OMeara <sean@chef.io>
Sean P. Kane <skane@newrelic.com>
Sean Rodman <srodman7689@gmail.com>
Sebastiaan van Steenis <mail@superseb.nl>
Sebastiaan van Stijn <github@gone.nl>
Sebastian Höffner <sebastian.hoeffner@mevis.fraunhofer.de>
Sebastian Radloff <sradloff23@gmail.com>
Sebastien Goasguen <runseb@gmail.com>
Senthil Kumar Selvaraj <senthil.thecoder@gmail.com>
Senthil Kumaran <senthil@uthcode.com>
SeongJae Park <sj38.park@gmail.com>
Seongyeol Lim <seongyeol37@gmail.com>
Serge Hallyn <serge.hallyn@ubuntu.com>
Sergey Alekseev <sergey.alekseev.minsk@gmail.com>
Sergey Evstifeev <sergey.evstifeev@gmail.com>
Sergii Kabashniuk <skabashnyuk@codenvy.com>
Sergio Lopez <slp@redhat.com>
Serhat Gülçiçek <serhat25@gmail.com>
SeungUkLee <lsy931106@gmail.com>
Sevki Hasirci <s@sevki.org>
Shane Canon <scanon@lbl.gov>
Shane da Silva <shane@dasilva.io>
Shaun Kaasten <shaunk@gmail.com>
shaunol <shaunol@gmail.com>
Shawn Landden <shawn@churchofgit.com>
Shawn Siefkas <shawn.siefkas@meredith.com>
shawnhe <shawnhe@shawnhedeMacBook-Pro.local>
Shayan Pooya <shayan@liveve.org>
Shayne Wang <shaynexwang@gmail.com>
Shekhar Gulati <shekhargulati84@gmail.com>
Sheng Yang <sheng@yasker.org>
Shengbo Song <thomassong@tencent.com>
Shengjing Zhu <zhsj@debian.org>
Shev Yan <yandong_8212@163.com>
Shih-Yuan Lee <fourdollars@gmail.com>
Shihao Xia <charlesxsh@hotmail.com>
Shijiang Wei <mountkin@gmail.com>
Shijun Qin <qinshijun16@mails.ucas.ac.cn>
Shishir Mahajan <shishir.mahajan@redhat.com>
Shoubhik Bose <sbose78@gmail.com>
Shourya Sarcar <shourya.sarcar@gmail.com>
Shu-Wai Chow <shu-wai.chow@seattlechildrens.org>
shuai-z <zs.broccoli@gmail.com>
Shukui Yang <yangshukui@huawei.com>
Sian Lerk Lau <kiawin@gmail.com>
Siarhei Rasiukevich <s_rasiukevich@wargaming.net>
Sidhartha Mani <sidharthamn@gmail.com>
sidharthamani <sid@rancher.com>
Silas Sewell <silas@sewell.org>
Silvan Jegen <s.jegen@gmail.com>
Simão Reis <smnrsti@gmail.com>
Simon Barendse <simon.barendse@gmail.com>
Simon Eskildsen <sirup@sirupsen.com>
Simon Ferquel <simon.ferquel@docker.com>
Simon Leinen <simon.leinen@gmail.com>
Simon Menke <simon.menke@gmail.com>
Simon Taranto <simon.taranto@gmail.com>
Simon Vikstrom <pullreq@devsn.se>
Sindhu S <sindhus@live.in>
Sjoerd Langkemper <sjoerd-github@linuxonly.nl>
skanehira <sho19921005@gmail.com>
Smark Meng <smark@freecoop.net>
Solganik Alexander <solganik@gmail.com>
Solomon Hykes <solomon@docker.com>
Song Gao <song@gao.io>
Soshi Katsuta <soshi.katsuta@gmail.com>
Sotiris Salloumis <sotiris.salloumis@gmail.com>
Soulou <leo@unbekandt.eu>
Spencer Brown <spencer@spencerbrown.org>
Spencer Smith <robertspencersmith@gmail.com>
Spike Curtis <spike.curtis@metaswitch.com>
Sridatta Thatipamala <sthatipamala@gmail.com>
Sridhar Ratnakumar <sridharr@activestate.com>
Srini Brahmaroutu <srbrahma@us.ibm.com>
Srinivasan Srivatsan <srinivasan.srivatsan@hpe.com>
Staf Wagemakers <staf@wagemakers.be>
Stanislav Bondarenko <stanislav.bondarenko@gmail.com>
Stanislav Levin <slev@altlinux.org>
Steeve Morin <steeve.morin@gmail.com>
Stefan Berger <stefanb@linux.vnet.ibm.com>
Stefan J. Wernli <swernli@microsoft.com>
Stefan Praszalowicz <stefan@greplin.com>
Stefan S. <tronicum@user.github.com>
Stefan Scherer <stefan.scherer@docker.com>
Stefan Staudenmeyer <doerte@instana.com>
Stefan Weil <sw@weilnetz.de>
Steffen Butzer <steffen.butzer@outlook.com>
Stephan Spindler <shutefan@gmail.com>
Stephen Benjamin <stephen@redhat.com>
Stephen Crosby <stevecrozz@gmail.com>
Stephen Day <stevvooe@gmail.com>
Stephen Drake <stephen@xenolith.net>
Stephen Rust <srust@blockbridge.com>
Steve Desmond <steve@vtsv.ca>
Steve Dougherty <steve@asksteved.com>
Steve Durrheimer <s.durrheimer@gmail.com>
Steve Francia <steve.francia@gmail.com>
Steve Koch <stevekochscience@gmail.com>
Steven Burgess <steven.a.burgess@hotmail.com>
Steven Erenst <stevenerenst@gmail.com>
Steven Hartland <steven.hartland@multiplay.co.uk>
Steven Iveson <sjiveson@outlook.com>
Steven Merrill <steven.merrill@gmail.com>
Steven Richards <steven@axiomzen.co>
Steven Taylor <steven.taylor@me.com>
Stéphane Este-Gracias <sestegra@gmail.com>
Stig Larsson <stig@larsson.dev>
Su Wang <su.wang@docker.com>
Subhajit Ghosh <isubuz.g@gmail.com>
Sujith Haridasan <sujith.h@gmail.com>
Sun Gengze <690388648@qq.com>
Sun Jianbo <wonderflow.sun@gmail.com>
Sune Keller <sune.keller@gmail.com>
Sunny Gogoi <indiasuny000@gmail.com>
Suryakumar Sudar <surya.trunks@gmail.com>
Sven Dowideit <SvenDowideit@home.org.au>
Swapnil Daingade <swapnil.daingade@gmail.com>
Sylvain Baubeau <lebauce@gmail.com>
Sylvain Bellemare <sylvain@ascribe.io>
Sébastien <sebastien@yoozio.com>
Sébastien HOUZÉ <cto@verylastroom.com>
Sébastien Luttringer <seblu@seblu.net>
Sébastien Stormacq <sebsto@users.noreply.github.com>
Sören Tempel <soeren+git@soeren-tempel.net>
Tabakhase <mail@tabakhase.com>
Tadej Janež <tadej.j@nez.si>
Takuto Sato <tockn.jp@gmail.com>
tang0th <tang0th@gmx.com>
Tangi Colin <tangicolin@gmail.com>
Tatsuki Sugiura <sugi@nemui.org>
Tatsushi Inagaki <e29253@jp.ibm.com>
Taylan Isikdemir <taylani@google.com>
Taylor Jones <monitorjbl@gmail.com>
Ted M. Young <tedyoung@gmail.com>
Tehmasp Chaudhri <tehmasp@gmail.com>
Tejaswini Duggaraju <naduggar@microsoft.com>
Tejesh Mehta <tejesh.mehta@gmail.com>
Terry Chu <zue.hterry@gmail.com>
terryding77 <550147740@qq.com>
Thatcher Peskens <thatcher@docker.com>
theadactyl <thea.lamkin@gmail.com>
Thell 'Bo' Fowler <thell@tbfowler.name>
Thermionix <bond711@gmail.com>
Thiago Alves Silva <thiago.alves@aurea.com>
Thijs Terlouw <thijsterlouw@gmail.com>
Thomas Bikeev <thomas.bikeev@mac.com>
Thomas Frössman <thomasf@jossystem.se>
Thomas Gazagnaire <thomas@gazagnaire.org>
Thomas Graf <tgraf@suug.ch>
Thomas Grainger <tagrain@gmail.com>
Thomas Hansen <thomas.hansen@gmail.com>
Thomas Ledos <thomas.ledos92@gmail.com>
Thomas Leonard <thomas.leonard@docker.com>
Thomas Léveil <thomasleveil@gmail.com>
Thomas Orozco <thomas@orozco.fr>
Thomas Riccardi <riccardi@systran.fr>
Thomas Schroeter <thomas@cliqz.com>
Thomas Sjögren <konstruktoid@users.noreply.github.com>
Thomas Swift <tgs242@gmail.com>
Thomas Tanaka <thomas.tanaka@oracle.com>
Thomas Texier <sharkone@en-mousse.org>
Ti Zhou <tizhou1986@gmail.com>
Tiago Seabra <tlgs@users.noreply.github.com>
Tianon Gravi <admwiggin@gmail.com>
Tianyi Wang <capkurmagati@gmail.com>
Tibor Vass <teabee89@gmail.com>
Tiffany Jernigan <tiffany.f.j@gmail.com>
Tiffany Low <tiffany@box.com>
Till Claassen <pixelistik@users.noreply.github.com>
Till Wegmüller <toasterson@gmail.com>
Tim <elatllat@gmail.com>
Tim Bart <tim@fewagainstmany.com>
Tim Bosse <taim@bosboot.org>
Tim Dettrick <t.dettrick@uq.edu.au>
Tim Düsterhus <tim@bastelstu.be>
Tim Hockin <thockin@google.com>
Tim Potter <tpot@hpe.com>
Tim Ruffles <oi@truffles.me.uk>
Tim Smith <timbot@google.com>
Tim Terhorst <mynamewastaken+git@gmail.com>
Tim Wagner <tim.wagner@freenet.ag>
Tim Wang <timwangdev@gmail.com>
Tim Waugh <twaugh@redhat.com>
Tim Wraight <tim.wraight@tangentlabs.co.uk>
Tim Zju <21651152@zju.edu.cn>
timchenxiaoyu <837829664@qq.com>
timfeirg <kkcocogogo@gmail.com>
Timo Rothenpieler <timo@rothenpieler.org>
Timothy Hobbs <timothyhobbs@seznam.cz>
tjwebb123 <tjwebb123@users.noreply.github.com>
tobe <tobegit3hub@gmail.com>
Tobias Bieniek <Tobias.Bieniek@gmx.de>
Tobias Bradtke <webwurst@gmail.com>
Tobias Gesellchen <tobias@gesellix.de>
Tobias Klauser <tklauser@distanz.ch>
Tobias Munk <schmunk@usrbin.de>
Tobias Pfandzelter <tobias@pfandzelter.com>
Tobias Schmidt <ts@soundcloud.com>
Tobias Schwab <tobias.schwab@dynport.de>
Todd Crane <todd@toddcrane.com>
Todd Lunter <tlunter@gmail.com>
Todd Whiteman <todd.whiteman@joyent.com>
Toli Kuznets <toli@docker.com>
Tom Barlow <tomwbarlow@gmail.com>
Tom Booth <tombooth@gmail.com>
Tom Denham <tom@tomdee.co.uk>
Tom Fotherby <tom+github@peopleperhour.com>
Tom Howe <tom.howe@enstratius.com>
Tom Hulihan <hulihan.tom159@gmail.com>
Tom Maaswinkel <tom.maaswinkel@12wiki.eu>
Tom Parker <palfrey@tevp.net>
Tom Sweeney <tsweeney@redhat.com>
Tom Wilkie <tom.wilkie@gmail.com>
Tom X. Tobin <tomxtobin@tomxtobin.com>
Tom Zhao <zlwangel@gmail.com>
Tomas Janousek <tomi@nomi.cz>
Tomas Kral <tomas.kral@gmail.com>
Tomas Tomecek <ttomecek@redhat.com>
Tomasz Kopczynski <tomek@kopczynski.net.pl>
Tomasz Lipinski <tlipinski@users.noreply.github.com>
Tomasz Nurkiewicz <nurkiewicz@gmail.com>
Tomek Mańko <tomek.manko@railgun-solutions.com>
Tommaso Visconti <tommaso.visconti@gmail.com>
Tomoya Tabuchi <t@tomoyat1.com>
Tomáš Hrčka <thrcka@redhat.com>
tonic <tonicbupt@gmail.com>
Tonny Xu <tonny.xu@gmail.com>
Tony Abboud <tdabboud@hotmail.com>
Tony Daws <tony@daws.ca>
Tony Miller <mcfiredrill@gmail.com>
toogley <toogley@mailbox.org>
Torstein Husebø <torstein@huseboe.net>
Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp>
Tõnis Tiigi <tonistiigi@gmail.com>
Trace Andreason <tandreason@gmail.com>
tracylihui <793912329@qq.com>
Trapier Marshall <tmarshall@mirantis.com>
Travis Cline <travis.cline@gmail.com>
Travis Thieman <travis.thieman@gmail.com>
Trent Ogren <tedwardo2@gmail.com>
Trevor <trevinwoodstock@gmail.com>
Trevor Pounds <trevor.pounds@gmail.com>
Trevor Sullivan <pcgeek86@gmail.com>
Trishna Guha <trishnaguha17@gmail.com>
Tristan Carel <tristan@cogniteev.com>
Troy Denton <trdenton@gmail.com>
Tudor Brindus <me@tbrindus.ca>
Ty Alexander <ty.alexander@sendgrid.com>
Tycho Andersen <tycho@docker.com>
Tyler Brock <tyler.brock@gmail.com>
Tyler Brown <tylers.pile@gmail.com>
Tzu-Jung Lee <roylee17@gmail.com>
uhayate <uhayate.gong@daocloud.io>
Ulysse Carion <ulyssecarion@gmail.com>
Umesh Yadav <umesh4257@gmail.com>
Utz Bacher <utz.bacher@de.ibm.com>
vagrant <vagrant@ubuntu-14.04-amd64-vbox>
Vaidas Jablonskis <jablonskis@gmail.com>
Valentin Kulesh <valentin.kulesh@virtuozzo.com>
vanderliang <lansheng@meili-inc.com>
Velko Ivanov <vivanov@deeperplane.com>
Veres Lajos <vlajos@gmail.com>
Victor Algaze <valgaze@gmail.com>
Victor Coisne <victor.coisne@dotcloud.com>
Victor Costan <costan@gmail.com>
Victor I. Wood <viw@t2am.com>
Victor Lyuboslavsky <victor@victoreda.com>
Victor Marmol <vmarmol@google.com>
Victor Palma <palma.victor@gmail.com>
Victor Vieux <victor.vieux@docker.com>
Victoria Bialas <victoria.bialas@docker.com>
Vijaya Kumar K <vijayak@caviumnetworks.com>
Vikas Choudhary <choudharyvikas16@gmail.com>
Vikram bir Singh <vsingh@mirantis.com>
Viktor Stanchev <me@viktorstanchev.com>
Viktor Vojnovski <viktor.vojnovski@amadeus.com>
VinayRaghavanKS <raghavan.vinay@gmail.com>
Vincent Batts <vbatts@redhat.com>
Vincent Bernat <vincent@bernat.ch>
Vincent Boulineau <vincent.boulineau@datadoghq.com>
Vincent Demeester <vincent.demeester@docker.com>
Vincent Giersch <vincent.giersch@ovh.net>
Vincent Mayers <vincent.mayers@inbloom.org>
Vincent Woo <me@vincentwoo.com>
Vinod Kulkarni <vinod.kulkarni@gmail.com>
Vishal Doshi <vishal.doshi@gmail.com>
Vishnu Kannan <vishnuk@google.com>
Vitaly Ostrosablin <vostrosablin@virtuozzo.com>
Vitor Monteiro <vmrmonteiro@gmail.com>
Vivek Agarwal <me@vivek.im>
Vivek Dasgupta <vdasgupt@redhat.com>
Vivek Goyal <vgoyal@redhat.com>
Vladimir Bulyga <xx@ccxx.cc>
Vladimir Kirillov <proger@wilab.org.ua>
Vladimir Pouzanov <farcaller@google.com>
Vladimir Rutsky <altsysrq@gmail.com>
Vladimir Varankin <nek.narqo+git@gmail.com>
VladimirAus <v_roudakov@yahoo.com>
Vladislav Kolesnikov <vkolesnikov@beget.ru>
Vlastimil Zeman <vlastimil.zeman@diffblue.com>
Vojtech Vitek (V-Teq) <vvitek@redhat.com>
Walter Leibbrandt <github@wrl.co.za>
Walter Stanish <walter@pratyeka.org>
Wang Chao <chao.wang@ucloud.cn>
Wang Guoliang <liangcszzu@163.com>
Wang Jie <wangjie5@chinaskycloud.com>
Wang Long <long.wanglong@huawei.com>
Wang Ping <present.wp@icloud.com>
Wang Xing <hzwangxing@corp.netease.com>
Wang Yuexiao <wang.yuexiao@zte.com.cn>
Wang Yumu <37442693@qq.com>
wanghuaiqing <wanghuaiqing@loongson.cn>
Ward Vandewege <ward@jhvc.com>
WarheadsSE <max@warheads.net>
Wassim Dhif <wassimdhif@gmail.com>
Wataru Ishida <ishida.wataru@lab.ntt.co.jp>
Wayne Chang <wayne@neverfear.org>
Wayne Song <wsong@docker.com>
Weerasak Chongnguluam <singpor@gmail.com>
Wei Fu <fuweid89@gmail.com>
Wei Wu <wuwei4455@gmail.com>
Wei-Ting Kuo <waitingkuo0527@gmail.com>
weipeng <weipeng@tuscloud.io>
weiyan <weiyan3@huawei.com>
Weiyang Zhu <cnresonant@gmail.com>
Wen Cheng Ma <wenchma@cn.ibm.com>
Wendel Fleming <wfleming@usc.edu>
Wenjun Tang <tangwj2@lenovo.com>
Wenkai Yin <yinw@vmware.com>
wenlxie <wenlxie@ebay.com>
Wenxuan Zhao <viz@linux.com>
Wenyu You <21551128@zju.edu.cn>
Wenzhi Liang <wenzhi.liang@gmail.com>
Wes Morgan <cap10morgan@gmail.com>
Wewang Xiaorenfine <wang.xiaoren@zte.com.cn>
Wiktor Kwapisiewicz <wiktor@metacode.biz>
Will Dietz <w@wdtz.org>
Will Rouesnel <w.rouesnel@gmail.com>
Will Weaver <monkey@buildingbananas.com>
willhf <willhf@gmail.com>
William Delanoue <william.delanoue@gmail.com>
William Henry <whenry@redhat.com>
William Hubbs <w.d.hubbs@gmail.com>
William Martin <wmartin@pivotal.io>
William Riancho <wr.wllm@gmail.com>
William Thurston <thurstw@amazon.com>
Wilson Júnior <wilsonpjunior@gmail.com>
Wing-Kam Wong <wingkwong.code@gmail.com>
WiseTrem <shepelyov.g@gmail.com>
Wolfgang Nagele <mail@wnagele.com>
Wolfgang Powisch <powo@powo.priv.at>
Wonjun Kim <wonjun.kim@navercorp.com>
WuLonghui <wlh6666@qq.com>
xamyzhao <x.amy.zhao@gmail.com>
Xia Wu <xwumzn@amazon.com>
Xian Chaobo <xianchaobo@huawei.com>
Xianglin Gao <xlgao@zju.edu.cn>
Xianjie <guxianjie@gmail.com>
Xianlu Bird <xianlubird@gmail.com>
Xiao YongBiao <xyb4638@gmail.com>
Xiao Zhang <xiaozhang0210@hotmail.com>
XiaoBing Jiang <s7v7nislands@gmail.com>
Xiaodong Liu <liuxiaodong@loongson.cn>
Xiaodong Zhang <a4012017@sina.com>
Xiaohua Ding <xiao_hua_ding@sina.cn>
Xiaoxi He <xxhe@alauda.io>
Xiaoxu Chen <chenxiaoxu14@otcaix.iscas.ac.cn>
Xiaoyu Zhang <zhang.xiaoyu33@zte.com.cn>
xichengliudui <1693291525@qq.com>
xiekeyang <xiekeyang@huawei.com>
Ximo Guanter Gonzálbez <joaquin.guantergonzalbez@telefonica.com>
Xinbo Weng <xihuanbo_0521@zju.edu.cn>
Xinfeng Liu <xinfeng.liu@gmail.com>
Xinzi Zhou <imdreamrunner@gmail.com>
Xiuming Chen <cc@cxm.cc>
Xuecong Liao <satorulogic@gmail.com>
xuzhaokui <cynicholas@gmail.com>
Yadnyawalkya Tale <ytale@redhat.com>
Yahya <ya7yaz@gmail.com>
yalpul <yalpul@gmail.com>
YAMADA Tsuyoshi <tyamada@minimum2scp.org>
Yamasaki Masahide <masahide.y@gmail.com>
Yan Feng <yanfeng2@huawei.com>
Yan Zhu <yanzhu@alauda.io>
Yang Bai <hamo.by@gmail.com>
Yang Li <idealhack@gmail.com>
Yang Pengfei <yangpengfei4@huawei.com>
yangchenliang <yangchenliang@huawei.com>
Yann Autissier <yann.autissier@gmail.com>
Yanqiang Miao <miao.yanqiang@zte.com.cn>
Yao Zaiyong <yaozaiyong@hotmail.com>
Yash Murty <yashmurty@gmail.com>
Yassine Tijani <yasstij11@gmail.com>
Yasunori Mahata <nori@mahata.net>
Yazhong Liu <yorkiefixer@gmail.com>
Yestin Sun <sunyi0804@gmail.com>
Yi EungJun <eungjun.yi@navercorp.com>
Yibai Zhang <xm1994@gmail.com>
Yihang Ho <hoyihang5@gmail.com>
Ying Li <ying.li@docker.com>
Yohei Ueda <yohei@jp.ibm.com>
Yong Tang <yong.tang.github@outlook.com>
Yongxin Li <yxli@alauda.io>
Yongzhi Pan <panyongzhi@gmail.com>
Yosef Fertel <yfertel@gmail.com>
You-Sheng Yang (楊有勝) <vicamo@gmail.com>
youcai <omegacoleman@gmail.com>
Youcef YEKHLEF <yyekhlef@gmail.com>
Youfu Zhang <zhangyoufu@gmail.com>
Yu Changchun <yuchangchun1@huawei.com>
Yu Chengxia <yuchengxia@huawei.com>
Yu Peng <yu.peng36@zte.com.cn>
Yu-Ju Hong <yjhong@google.com>
Yuan Sun <sunyuan3@huawei.com>
Yuanhong Peng <pengyuanhong@huawei.com>
Yue Zhang <zy675793960@yeah.net>
Yufei Xiong <yufei.xiong@qq.com>
Yuhao Fang <fangyuhao@gmail.com>
Yuichiro Kaneko <spiketeika@gmail.com>
YujiOshima <yuji.oshima0x3fd@gmail.com>
Yunxiang Huang <hyxqshk@vip.qq.com>
Yurii Rashkovskii <yrashk@gmail.com>
Yusuf Tarık Günaydın <yusuf_tarik@hotmail.com>
Yves Blusseau <90z7oey02@sneakemail.com>
Yves Junqueira <yves.junqueira@gmail.com>
Zac Dover <zdover@redhat.com>
Zach Borboa <zachborboa@gmail.com>
Zach Gershman <zachgersh@gmail.com>
Zachary Jaffee <zjaffee@us.ibm.com>
Zain Memon <zain@inzain.net>
Zaiste! <oh@zaiste.net>
Zane DeGraffenried <zane.deg@gmail.com>
Zefan Li <lizefan@huawei.com>
Zen Lin(Zhinan Lin) <linzhinan@huawei.com>
Zhang Kun <zkazure@gmail.com>
Zhang Wei <zhangwei555@huawei.com>
Zhang Wentao <zhangwentao234@huawei.com>
ZhangHang <stevezhang2014@gmail.com>
zhangxianwei <xianwei.zw@alibaba-inc.com>
Zhenan Ye <21551168@zju.edu.cn>
zhenghenghuo <zhenghenghuo@zju.edu.cn>
Zhenhai Gao <gaozh1988@live.com>
Zhenkun Bi <bi.zhenkun@zte.com.cn>
ZhiPeng Lu <lu.zhipeng@zte.com.cn>
zhipengzuo <zuozhipeng@baidu.com>
Zhou Hao <zhouhao@cn.fujitsu.com>
Zhoulin Xie <zhoulin.xie@daocloud.io>
Zhu Guihua <zhugh.fnst@cn.fujitsu.com>
Zhu Kunjia <zhu.kunjia@zte.com.cn>
Zhuoyun Wei <wzyboy@wzyboy.org>
Ziheng Liu <lzhfromustc@gmail.com>
Zilin Du <zilin.du@gmail.com>
zimbatm <zimbatm@zimbatm.com>
Ziming Dong <bnudzm@foxmail.com>
ZJUshuaizhou <21551191@zju.edu.cn>
zmarouf <zeid.marouf@gmail.com>
Zoltan Tombol <zoltan.tombol@gmail.com>
Zou Yu <zouyu7@huawei.com>
zqh <zqhxuyuan@gmail.com>
Zuhayr Elahi <zuhayr.elahi@docker.com>
Zunayed Ali <zunayed@gmail.com>
Álvaro Lázaro <alvaro.lazaro.g@gmail.com>
Átila Camurça Alves <camurca.home@gmail.com>
尹吉峰 <jifeng.yin@gmail.com>
屈骏 <qujun@tiduyun.com>
徐俊杰 <paco.xu@daocloud.io>
慕陶 <jihui.xjh@alibaba-inc.com>
搏通 <yufeng.pyf@alibaba-inc.com>
黄艳红00139573 <huang.yanhong@zte.com.cn>
정재영 <jjy600901@gmail.com>
 0707010000038C000081A4000000000000000000000001645E367C00002A0D000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/LICENSE   
                                 Apache License
                           Version 2.0, January 2004
                        https://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   Copyright 2013-2018 Docker, Inc.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       https://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
   0707010000038D000081A4000000000000000000000001645E367C00000282000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/NOTICE    Docker
Copyright 2012-2017 Docker, Inc.

This product includes software developed at Docker, Inc. (https://www.docker.com).

This product contains software (https://github.com/creack/pty) developed
by Keith Rarick, licensed under the MIT License.

The following is courtesy of our legal counsel:


Use and transfer of Docker may be subject to certain restrictions by the
United States and other governments.
It is your responsibility to ensure that your use and/or transfer does not
violate applicable laws.

For more information, please see https://www.bis.doc.gov

See also https://www.apache.org/dev/crypto.html and/or seek legal counsel.
  0707010000038E000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api   0707010000038F000081A4000000000000000000000001645E367C00000ACF000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/README.md # Working on the Engine API

The Engine API is an HTTP API used by the command-line client to communicate with the daemon. It can also be used by third-party software to control the daemon.

It consists of various components in this repository:

- `api/swagger.yaml` A Swagger definition of the API.
- `api/types/` Types shared by both the client and server, representing various objects, options, responses, etc. Most are written manually, but some are automatically generated from the Swagger definition. See [#27919](https://github.com/docker/docker/issues/27919) for progress on this.
- `cli/` The command-line client.
- `client/` The Go client used by the command-line client. It can also be used by third-party Go programs.
- `daemon/` The daemon, which serves the API.

## Swagger definition

The API is defined by the [Swagger](http://swagger.io/specification/) definition in `api/swagger.yaml`. This definition can be used to:

1. Automatically generate documentation.
2. Automatically generate the Go server and client. (A work-in-progress.)
3. Provide a machine readable version of the API for introspecting what it can do, automatically generating clients for other languages, etc.

## Updating the API documentation

The API documentation is generated entirely from `api/swagger.yaml`. If you make updates to the API, edit this file to represent the change in the documentation.

The file is split into two main sections:

- `definitions`, which defines re-usable objects used in requests and responses
- `paths`, which defines the API endpoints (and some inline objects which don't need to be reusable)

To make an edit, first look for the endpoint you want to edit under `paths`, then make the required edits. Endpoints may reference reusable objects with `$ref`, which can be found in the `definitions` section.

There is hopefully enough example material in the file for you to copy a similar pattern from elsewhere in the file (e.g. adding new fields or endpoints), but for the full reference, see the [Swagger specification](https://github.com/docker/docker/issues/27919).

`swagger.yaml` is validated by `hack/validate/swagger` to ensure it is a valid Swagger definition. This is useful when making edits to ensure you are doing the right thing.

## Viewing the API documentation

When you make edits to `swagger.yaml`, you may want to check the generated API documentation to ensure it renders correctly.

Run `make swagger-docs` and a preview will be running at `http://localhost`. Some of the styling may be incorrect, but you'll be able to ensure that it is generating the correct documentation.

The production documentation is generated by vendoring `swagger.yaml` into [docker/docker.github.io](https://github.com/docker/docker.github.io).
 07070100000390000081A4000000000000000000000001645E367C0000013F000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/common.go package api // import "github.com/docker/docker/api"

// Common constants for daemon and client.
const (
	// DefaultVersion of Current REST API
	DefaultVersion = "1.42"

	// NoBaseImageSpecifier is the symbol used by the FROM
	// command to specify that no base image is to be used.
	NoBaseImageSpecifier = "scratch"
)
 07070100000391000081A4000000000000000000000001645E367C000000B4000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/common_unix.go    //go:build !windows
// +build !windows

package api // import "github.com/docker/docker/api"

// MinVersion represents Minimum REST API version supported
const MinVersion = "1.12"
07070100000392000081A4000000000000000000000001645E367C000001A5000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/common_windows.go package api // import "github.com/docker/docker/api"

// MinVersion represents Minimum REST API version supported
// Technically the first daemon API version released on Windows is v1.25 in
// engine version 1.13. However, some clients are explicitly using downlevel
// APIs (e.g. docker-compose v2.1 file format) and that is just too restrictive.
// Hence also allowing 1.24 on Windows.
const MinVersion string = "1.24"
   07070100000393000081A4000000000000000000000001645E367C00000173000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/swagger-gen.yaml  
layout:
  models:
    - name: definition
      source: asset:model
      target: "{{ joinFilePath .Target .ModelPackage }}"
      file_name: "{{ (snakize (pascalize .Name)) }}.go"
  operations:
    - name: handler
      source: asset:serverOperation
      target: "{{ joinFilePath .Target .APIPackage .Package }}"
      file_name: "{{ (snakize (pascalize .Name)) }}.go"
 07070100000394000081A4000000000000000000000001645E367C000649F9000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/swagger.yaml  # A Swagger 2.0 (a.k.a. OpenAPI) definition of the Engine API.
#
# This is used for generating API documentation and the types used by the
# client/server. See api/README.md for more information.
#
# Some style notes:
# - This file is used by ReDoc, which allows GitHub Flavored Markdown in
#   descriptions.
# - There is no maximum line length, for ease of editing and pretty diffs.
# - operationIds are in the format "NounVerb", with a singular noun.

swagger: "2.0"
schemes:
  - "http"
  - "https"
produces:
  - "application/json"
  - "text/plain"
consumes:
  - "application/json"
  - "text/plain"
basePath: "/v1.42"
info:
  title: "Docker Engine API"
  version: "1.42"
  x-logo:
    url: "https://docs.docker.com/assets/images/logo-docker-main.png"
  description: |
    The Engine API is an HTTP API served by Docker Engine. It is the API the
    Docker client uses to communicate with the Engine, so everything the Docker
    client can do can be done with the API.

    Most of the client's commands map directly to API endpoints (e.g. `docker ps`
    is `GET /containers/json`). The notable exception is running containers,
    which consists of several API calls.

    # Errors

    The API uses standard HTTP status codes to indicate the success or failure
    of the API call. The body of the response will be JSON in the following
    format:

    ```
    {
      "message": "page not found"
    }
    ```

    # Versioning

    The API is usually changed in each release, so API calls are versioned to
    ensure that clients don't break. To lock to a specific version of the API,
    you prefix the URL with its version, for example, call `/v1.30/info` to use
    the v1.30 version of the `/info` endpoint. If the API version specified in
    the URL is not supported by the daemon, a HTTP `400 Bad Request` error message
    is returned.

    If you omit the version-prefix, the current version of the API (v1.42) is used.
    For example, calling `/info` is the same as calling `/v1.42/info`. Using the
    API without a version-prefix is deprecated and will be removed in a future release.

    Engine releases in the near future should support this version of the API,
    so your client will continue to work even if it is talking to a newer Engine.

    The API uses an open schema model, which means server may add extra properties
    to responses. Likewise, the server will ignore any extra query parameters and
    request body properties. When you write clients, you need to ignore additional
    properties in responses to ensure they do not break when talking to newer
    daemons.


    # Authentication

    Authentication for registries is handled client side. The client has to send
    authentication details to various endpoints that need to communicate with
    registries, such as `POST /images/(name)/push`. These are sent as
    `X-Registry-Auth` header as a [base64url encoded](https://tools.ietf.org/html/rfc4648#section-5)
    (JSON) string with the following structure:

    ```
    {
      "username": "string",
      "password": "string",
      "email": "string",
      "serveraddress": "string"
    }
    ```

    The `serveraddress` is a domain/IP without a protocol. Throughout this
    structure, double quotes are required.

    If you have already got an identity token from the [`/auth` endpoint](#operation/SystemAuth),
    you can just pass this instead of credentials:

    ```
    {
      "identitytoken": "9cbaf023786cd7..."
    }
    ```

# The tags on paths define the menu sections in the ReDoc documentation, so
# the usage of tags must make sense for that:
# - They should be singular, not plural.
# - There should not be too many tags, or the menu becomes unwieldy. For
#   example, it is preferable to add a path to the "System" tag instead of
#   creating a tag with a single path in it.
# - The order of tags in this list defines the order in the menu.
tags:
  # Primary objects
  - name: "Container"
    x-displayName: "Containers"
    description: |
      Create and manage containers.
  - name: "Image"
    x-displayName: "Images"
  - name: "Network"
    x-displayName: "Networks"
    description: |
      Networks are user-defined networks that containers can be attached to.
      See the [networking documentation](https://docs.docker.com/network/)
      for more information.
  - name: "Volume"
    x-displayName: "Volumes"
    description: |
      Create and manage persistent storage that can be attached to containers.
  - name: "Exec"
    x-displayName: "Exec"
    description: |
      Run new commands inside running containers. Refer to the
      [command-line reference](https://docs.docker.com/engine/reference/commandline/exec/)
      for more information.

      To exec a command in a container, you first need to create an exec instance,
      then start it. These two API endpoints are wrapped up in a single command-line
      command, `docker exec`.

  # Swarm things
  - name: "Swarm"
    x-displayName: "Swarm"
    description: |
      Engines can be clustered together in a swarm. Refer to the
      [swarm mode documentation](https://docs.docker.com/engine/swarm/)
      for more information.
  - name: "Node"
    x-displayName: "Nodes"
    description: |
      Nodes are instances of the Engine participating in a swarm. Swarm mode
      must be enabled for these endpoints to work.
  - name: "Service"
    x-displayName: "Services"
    description: |
      Services are the definitions of tasks to run on a swarm. Swarm mode must
      be enabled for these endpoints to work.
  - name: "Task"
    x-displayName: "Tasks"
    description: |
      A task is a container running on a swarm. It is the atomic scheduling unit
      of swarm. Swarm mode must be enabled for these endpoints to work.
  - name: "Secret"
    x-displayName: "Secrets"
    description: |
      Secrets are sensitive data that can be used by services. Swarm mode must
      be enabled for these endpoints to work.
  - name: "Config"
    x-displayName: "Configs"
    description: |
      Configs are application configurations that can be used by services. Swarm
      mode must be enabled for these endpoints to work.
  # System things
  - name: "Plugin"
    x-displayName: "Plugins"
  - name: "System"
    x-displayName: "System"

definitions:
  Port:
    type: "object"
    description: "An open port on a container"
    required: [PrivatePort, Type]
    properties:
      IP:
        type: "string"
        format: "ip-address"
        description: "Host IP address that the container's port is mapped to"
      PrivatePort:
        type: "integer"
        format: "uint16"
        x-nullable: false
        description: "Port on the container"
      PublicPort:
        type: "integer"
        format: "uint16"
        description: "Port exposed on the host"
      Type:
        type: "string"
        x-nullable: false
        enum: ["tcp", "udp", "sctp"]
    example:
      PrivatePort: 8080
      PublicPort: 80
      Type: "tcp"

  MountPoint:
    type: "object"
    description: |
      MountPoint represents a mount point configuration inside the container.
      This is used for reporting the mountpoints in use by a container.
    properties:
      Type:
        description: |
          The mount type:

          - `bind` a mount of a file or directory from the host into the container.
          - `volume` a docker volume with the given `Name`.
          - `tmpfs` a `tmpfs`.
          - `npipe` a named pipe from the host into the container.
          - `cluster` a Swarm cluster volume
        type: "string"
        enum:
          - "bind"
          - "volume"
          - "tmpfs"
          - "npipe"
          - "cluster"
        example: "volume"
      Name:
        description: |
          Name is the name reference to the underlying data defined by `Source`
          e.g., the volume name.
        type: "string"
        example: "myvolume"
      Source:
        description: |
          Source location of the mount.

          For volumes, this contains the storage location of the volume (within
          `/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains
          the source (host) part of the bind-mount. For `tmpfs` mount points, this
          field is empty.
        type: "string"
        example: "/var/lib/docker/volumes/myvolume/_data"
      Destination:
        description: |
          Destination is the path relative to the container root (`/`) where
          the `Source` is mounted inside the container.
        type: "string"
        example: "/usr/share/nginx/html/"
      Driver:
        description: |
          Driver is the volume driver used to create the volume (if it is a volume).
        type: "string"
        example: "local"
      Mode:
        description: |
          Mode is a comma separated list of options supplied by the user when
          creating the bind/volume mount.

          The default is platform-specific (`"z"` on Linux, empty on Windows).
        type: "string"
        example: "z"
      RW:
        description: |
          Whether the mount is mounted writable (read-write).
        type: "boolean"
        example: true
      Propagation:
        description: |
          Propagation describes how mounts are propagated from the host into the
          mount point, and vice-versa. Refer to the [Linux kernel documentation](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt)
          for details. This field is not used on Windows.
        type: "string"
        example: ""

  DeviceMapping:
    type: "object"
    description: "A device mapping between the host and container"
    properties:
      PathOnHost:
        type: "string"
      PathInContainer:
        type: "string"
      CgroupPermissions:
        type: "string"
    example:
      PathOnHost: "/dev/deviceName"
      PathInContainer: "/dev/deviceName"
      CgroupPermissions: "mrw"

  DeviceRequest:
    type: "object"
    description: "A request for devices to be sent to device drivers"
    properties:
      Driver:
        type: "string"
        example: "nvidia"
      Count:
        type: "integer"
        example: -1
      DeviceIDs:
        type: "array"
        items:
          type: "string"
        example:
          - "0"
          - "1"
          - "GPU-fef8089b-4820-abfc-e83e-94318197576e"
      Capabilities:
        description: |
          A list of capabilities; an OR list of AND lists of capabilities.
        type: "array"
        items:
          type: "array"
          items:
            type: "string"
        example:
          # gpu AND nvidia AND compute
          - ["gpu", "nvidia", "compute"]
      Options:
        description: |
          Driver-specific options, specified as a key/value pairs. These options
          are passed directly to the driver.
        type: "object"
        additionalProperties:
          type: "string"

  ThrottleDevice:
    type: "object"
    properties:
      Path:
        description: "Device path"
        type: "string"
      Rate:
        description: "Rate"
        type: "integer"
        format: "int64"
        minimum: 0

  Mount:
    type: "object"
    properties:
      Target:
        description: "Container path."
        type: "string"
      Source:
        description: "Mount source (e.g. a volume name, a host path)."
        type: "string"
      Type:
        description: |
          The mount type. Available types:

          - `bind` Mounts a file or directory from the host into the container. Must exist prior to creating the container.
          - `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed.
          - `tmpfs` Create a tmpfs with the given options. The mount source cannot be specified for tmpfs.
          - `npipe` Mounts a named pipe from the host into the container. Must exist prior to creating the container.
          - `cluster` a Swarm cluster volume
        type: "string"
        enum:
          - "bind"
          - "volume"
          - "tmpfs"
          - "npipe"
          - "cluster"
      ReadOnly:
        description: "Whether the mount should be read-only."
        type: "boolean"
      Consistency:
        description: "The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`."
        type: "string"
      BindOptions:
        description: "Optional configuration for the `bind` type."
        type: "object"
        properties:
          Propagation:
            description: "A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`."
            type: "string"
            enum:
              - "private"
              - "rprivate"
              - "shared"
              - "rshared"
              - "slave"
              - "rslave"
          NonRecursive:
            description: "Disable recursive bind mount."
            type: "boolean"
            default: false
          CreateMountpoint:
            description: "Create mount point on host if missing"
            type: "boolean"
            default: false
      VolumeOptions:
        description: "Optional configuration for the `volume` type."
        type: "object"
        properties:
          NoCopy:
            description: "Populate volume with data from the target."
            type: "boolean"
            default: false
          Labels:
            description: "User-defined key/value metadata."
            type: "object"
            additionalProperties:
              type: "string"
          DriverConfig:
            description: "Map of driver specific options"
            type: "object"
            properties:
              Name:
                description: "Name of the driver to use to create the volume."
                type: "string"
              Options:
                description: "key/value map of driver specific options."
                type: "object"
                additionalProperties:
                  type: "string"
      TmpfsOptions:
        description: "Optional configuration for the `tmpfs` type."
        type: "object"
        properties:
          SizeBytes:
            description: "The size for the tmpfs mount in bytes."
            type: "integer"
            format: "int64"
          Mode:
            description: "The permission mode for the tmpfs mount in an integer."
            type: "integer"

  RestartPolicy:
    description: |
      The behavior to apply when the container exits. The default is not to
      restart.

      An ever increasing delay (double the previous delay, starting at 100ms) is
      added before each restart to prevent flooding the server.
    type: "object"
    properties:
      Name:
        type: "string"
        description: |
          - Empty string means not to restart
          - `no` Do not automatically restart
          - `always` Always restart
          - `unless-stopped` Restart always except when the user has manually stopped the container
          - `on-failure` Restart only when the container exit code is non-zero
        enum:
          - ""
          - "no"
          - "always"
          - "unless-stopped"
          - "on-failure"
      MaximumRetryCount:
        type: "integer"
        description: |
          If `on-failure` is used, the number of times to retry before giving up.

  Resources:
    description: "A container's resources (cgroups config, ulimits, etc)"
    type: "object"
    properties:
      # Applicable to all platforms
      CpuShares:
        description: |
          An integer value representing this container's relative CPU weight
          versus other containers.
        type: "integer"
      Memory:
        description: "Memory limit in bytes."
        type: "integer"
        format: "int64"
        default: 0
      # Applicable to UNIX platforms
      CgroupParent:
        description: |
          Path to `cgroups` under which the container's `cgroup` is created. If
          the path is not absolute, the path is considered to be relative to the
          `cgroups` path of the init process. Cgroups are created if they do not
          already exist.
        type: "string"
      BlkioWeight:
        description: "Block IO weight (relative weight)."
        type: "integer"
        minimum: 0
        maximum: 1000
      BlkioWeightDevice:
        description: |
          Block IO weight (relative device weight) in the form:

          ```
          [{"Path": "device_path", "Weight": weight}]
          ```
        type: "array"
        items:
          type: "object"
          properties:
            Path:
              type: "string"
            Weight:
              type: "integer"
              minimum: 0
      BlkioDeviceReadBps:
        description: |
          Limit read rate (bytes per second) from a device, in the form:

          ```
          [{"Path": "device_path", "Rate": rate}]
          ```
        type: "array"
        items:
          $ref: "#/definitions/ThrottleDevice"
      BlkioDeviceWriteBps:
        description: |
          Limit write rate (bytes per second) to a device, in the form:

          ```
          [{"Path": "device_path", "Rate": rate}]
          ```
        type: "array"
        items:
          $ref: "#/definitions/ThrottleDevice"
      BlkioDeviceReadIOps:
        description: |
          Limit read rate (IO per second) from a device, in the form:

          ```
          [{"Path": "device_path", "Rate": rate}]
          ```
        type: "array"
        items:
          $ref: "#/definitions/ThrottleDevice"
      BlkioDeviceWriteIOps:
        description: |
          Limit write rate (IO per second) to a device, in the form:

          ```
          [{"Path": "device_path", "Rate": rate}]
          ```
        type: "array"
        items:
          $ref: "#/definitions/ThrottleDevice"
      CpuPeriod:
        description: "The length of a CPU period in microseconds."
        type: "integer"
        format: "int64"
      CpuQuota:
        description: |
          Microseconds of CPU time that the container can get in a CPU period.
        type: "integer"
        format: "int64"
      CpuRealtimePeriod:
        description: |
          The length of a CPU real-time period in microseconds. Set to 0 to
          allocate no time allocated to real-time tasks.
        type: "integer"
        format: "int64"
      CpuRealtimeRuntime:
        description: |
          The length of a CPU real-time runtime in microseconds. Set to 0 to
          allocate no time allocated to real-time tasks.
        type: "integer"
        format: "int64"
      CpusetCpus:
        description: |
          CPUs in which to allow execution (e.g., `0-3`, `0,1`).
        type: "string"
        example: "0-3"
      CpusetMems:
        description: |
          Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only
          effective on NUMA systems.
        type: "string"
      Devices:
        description: "A list of devices to add to the container."
        type: "array"
        items:
          $ref: "#/definitions/DeviceMapping"
      DeviceCgroupRules:
        description: "a list of cgroup rules to apply to the container"
        type: "array"
        items:
          type: "string"
          example: "c 13:* rwm"
      DeviceRequests:
        description: |
          A list of requests for devices to be sent to device drivers.
        type: "array"
        items:
          $ref: "#/definitions/DeviceRequest"
      KernelMemoryTCP:
        description: |
          Hard limit for kernel TCP buffer memory (in bytes). Depending on the
          OCI runtime in use, this option may be ignored. It is no longer supported
          by the default (runc) runtime.

          This field is omitted when empty.
        type: "integer"
        format: "int64"
      MemoryReservation:
        description: "Memory soft limit in bytes."
        type: "integer"
        format: "int64"
      MemorySwap:
        description: |
          Total memory limit (memory + swap). Set as `-1` to enable unlimited
          swap.
        type: "integer"
        format: "int64"
      MemorySwappiness:
        description: |
          Tune a container's memory swappiness behavior. Accepts an integer
          between 0 and 100.
        type: "integer"
        format: "int64"
        minimum: 0
        maximum: 100
      NanoCpus:
        description: "CPU quota in units of 10<sup>-9</sup> CPUs."
        type: "integer"
        format: "int64"
      OomKillDisable:
        description: "Disable OOM Killer for the container."
        type: "boolean"
      Init:
        description: |
          Run an init inside the container that forwards signals and reaps
          processes. This field is omitted if empty, and the default (as
          configured on the daemon) is used.
        type: "boolean"
        x-nullable: true
      PidsLimit:
        description: |
          Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null`
          to not change.
        type: "integer"
        format: "int64"
        x-nullable: true
      Ulimits:
        description: |
          A list of resource limits to set in the container. For example:

          ```
          {"Name": "nofile", "Soft": 1024, "Hard": 2048}
          ```
        type: "array"
        items:
          type: "object"
          properties:
            Name:
              description: "Name of ulimit"
              type: "string"
            Soft:
              description: "Soft limit"
              type: "integer"
            Hard:
              description: "Hard limit"
              type: "integer"
      # Applicable to Windows
      CpuCount:
        description: |
          The number of usable CPUs (Windows only).

          On Windows Server containers, the processor resource controls are
          mutually exclusive. The order of precedence is `CPUCount` first, then
          `CPUShares`, and `CPUPercent` last.
        type: "integer"
        format: "int64"
      CpuPercent:
        description: |
          The usable percentage of the available CPUs (Windows only).

          On Windows Server containers, the processor resource controls are
          mutually exclusive. The order of precedence is `CPUCount` first, then
          `CPUShares`, and `CPUPercent` last.
        type: "integer"
        format: "int64"
      IOMaximumIOps:
        description: "Maximum IOps for the container system drive (Windows only)"
        type: "integer"
        format: "int64"
      IOMaximumBandwidth:
        description: |
          Maximum IO in bytes per second for the container system drive
          (Windows only).
        type: "integer"
        format: "int64"

  Limit:
    description: |
      An object describing a limit on resources which can be requested by a task.
    type: "object"
    properties:
      NanoCPUs:
        type: "integer"
        format: "int64"
        example: 4000000000
      MemoryBytes:
        type: "integer"
        format: "int64"
        example: 8272408576
      Pids:
        description: |
          Limits the maximum number of PIDs in the container. Set `0` for unlimited.
        type: "integer"
        format: "int64"
        default: 0
        example: 100

  ResourceObject:
    description: |
      An object describing the resources which can be advertised by a node and
      requested by a task.
    type: "object"
    properties:
      NanoCPUs:
        type: "integer"
        format: "int64"
        example: 4000000000
      MemoryBytes:
        type: "integer"
        format: "int64"
        example: 8272408576
      GenericResources:
        $ref: "#/definitions/GenericResources"

  GenericResources:
    description: |
      User-defined resources can be either Integer resources (e.g, `SSD=3`) or
      String resources (e.g, `GPU=UUID1`).
    type: "array"
    items:
      type: "object"
      properties:
        NamedResourceSpec:
          type: "object"
          properties:
            Kind:
              type: "string"
            Value:
              type: "string"
        DiscreteResourceSpec:
          type: "object"
          properties:
            Kind:
              type: "string"
            Value:
              type: "integer"
              format: "int64"
    example:
      - DiscreteResourceSpec:
          Kind: "SSD"
          Value: 3
      - NamedResourceSpec:
          Kind: "GPU"
          Value: "UUID1"
      - NamedResourceSpec:
          Kind: "GPU"
          Value: "UUID2"

  HealthConfig:
    description: "A test to perform to check that the container is healthy."
    type: "object"
    properties:
      Test:
        description: |
          The test to perform. Possible values are:

          - `[]` inherit healthcheck from image or parent image
          - `["NONE"]` disable healthcheck
          - `["CMD", args...]` exec arguments directly
          - `["CMD-SHELL", command]` run command with system's default shell
        type: "array"
        items:
          type: "string"
      Interval:
        description: |
          The time to wait between checks in nanoseconds. It should be 0 or at
          least 1000000 (1 ms). 0 means inherit.
        type: "integer"
        format: "int64"
      Timeout:
        description: |
          The time to wait before considering the check to have hung. It should
          be 0 or at least 1000000 (1 ms). 0 means inherit.
        type: "integer"
        format: "int64"
      Retries:
        description: |
          The number of consecutive failures needed to consider a container as
          unhealthy. 0 means inherit.
        type: "integer"
      StartPeriod:
        description: |
          Start period for the container to initialize before starting
          health-retries countdown in nanoseconds. It should be 0 or at least
          1000000 (1 ms). 0 means inherit.
        type: "integer"
        format: "int64"

  Health:
    description: |
      Health stores information about the container's healthcheck results.
    type: "object"
    x-nullable: true
    properties:
      Status:
        description: |
          Status is one of `none`, `starting`, `healthy` or `unhealthy`

          - "none"      Indicates there is no healthcheck
          - "starting"  Starting indicates that the container is not yet ready
          - "healthy"   Healthy indicates that the container is running correctly
          - "unhealthy" Unhealthy indicates that the container has a problem
        type: "string"
        enum:
          - "none"
          - "starting"
          - "healthy"
          - "unhealthy"
        example: "healthy"
      FailingStreak:
        description: "FailingStreak is the number of consecutive failures"
        type: "integer"
        example: 0
      Log:
        type: "array"
        description: |
          Log contains the last few results (oldest first)
        items:
          $ref: "#/definitions/HealthcheckResult"

  HealthcheckResult:
    description: |
      HealthcheckResult stores information about a single run of a healthcheck probe
    type: "object"
    x-nullable: true
    properties:
      Start:
        description: |
          Date and time at which this check started in
          [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.
        type: "string"
        format: "date-time"
        example: "2020-01-04T10:44:24.496525531Z"
      End:
        description: |
          Date and time at which this check ended in
          [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.
        type: "string"
        format: "dateTime"
        example: "2020-01-04T10:45:21.364524523Z"
      ExitCode:
        description: |
          ExitCode meanings:

          - `0` healthy
          - `1` unhealthy
          - `2` reserved (considered unhealthy)
          - other values: error running probe
        type: "integer"
        example: 0
      Output:
        description: "Output from last check"
        type: "string"

  HostConfig:
    description: "Container configuration that depends on the host we are running on"
    allOf:
      - $ref: "#/definitions/Resources"
      - type: "object"
        properties:
          # Applicable to all platforms
          Binds:
            type: "array"
            description: |
              A list of volume bindings for this container. Each volume binding
              is a string in one of these forms:

              - `host-src:container-dest[:options]` to bind-mount a host path
                into the container. Both `host-src`, and `container-dest` must
                be an _absolute_ path.
              - `volume-name:container-dest[:options]` to bind-mount a volume
                managed by a volume driver into the container. `container-dest`
                must be an _absolute_ path.

              `options` is an optional, comma-delimited list of:

              - `nocopy` disables automatic copying of data from the container
                path to the volume. The `nocopy` flag only applies to named volumes.
              - `[ro|rw]` mounts a volume read-only or read-write, respectively.
                If omitted or set to `rw`, volumes are mounted read-write.
              - `[z|Z]` applies SELinux labels to allow or deny multiple containers
                to read and write to the same volume.
                  - `z`: a _shared_ content label is applied to the content. This
                    label indicates that multiple containers can share the volume
                    content, for both reading and writing.
                  - `Z`: a _private unshared_ label is applied to the content.
                    This label indicates that only the current container can use
                    a private volume. Labeling systems such as SELinux require
                    proper labels to be placed on volume content that is mounted
                    into a container. Without a label, the security system can
                    prevent a container's processes from using the content. By
                    default, the labels set by the host operating system are not
                    modified.
              - `[[r]shared|[r]slave|[r]private]` specifies mount
                [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt).
                This only applies to bind-mounted volumes, not internal volumes
                or named volumes. Mount propagation requires the source mount
                point (the location where the source directory is mounted in the
                host operating system) to have the correct propagation properties.
                For shared volumes, the source mount point must be set to `shared`.
                For slave volumes, the mount must be set to either `shared` or
                `slave`.
            items:
              type: "string"
          ContainerIDFile:
            type: "string"
            description: "Path to a file where the container ID is written"
          LogConfig:
            type: "object"
            description: "The logging configuration for this container"
            properties:
              Type:
                type: "string"
                enum:
                  - "json-file"
                  - "syslog"
                  - "journald"
                  - "gelf"
                  - "fluentd"
                  - "awslogs"
                  - "splunk"
                  - "etwlogs"
                  - "none"
              Config:
                type: "object"
                additionalProperties:
                  type: "string"
          NetworkMode:
            type: "string"
            description: |
              Network mode to use for this container. Supported standard values
              are: `bridge`, `host`, `none`, and `container:<name|id>`. Any
              other value is taken as a custom network's name to which this
              container should connect to.
          PortBindings:
            $ref: "#/definitions/PortMap"
          RestartPolicy:
            $ref: "#/definitions/RestartPolicy"
          AutoRemove:
            type: "boolean"
            description: |
              Automatically remove the container when the container's process
              exits. This has no effect if `RestartPolicy` is set.
          VolumeDriver:
            type: "string"
            description: "Driver that this container uses to mount volumes."
          VolumesFrom:
            type: "array"
            description: |
              A list of volumes to inherit from another container, specified in
              the form `<container name>[:<ro|rw>]`.
            items:
              type: "string"
          Mounts:
            description: |
              Specification for mounts to be added to the container.
            type: "array"
            items:
              $ref: "#/definitions/Mount"
          ConsoleSize:
            type: "array"
            description: |
              Initial console size, as an `[height, width]` array.
            x-nullable: true
            minItems: 2
            maxItems: 2
            items:
              type: "integer"
              minimum: 0

          # Applicable to UNIX platforms
          CapAdd:
            type: "array"
            description: |
              A list of kernel capabilities to add to the container. Conflicts
              with option 'Capabilities'.
            items:
              type: "string"
          CapDrop:
            type: "array"
            description: |
              A list of kernel capabilities to drop from the container. Conflicts
              with option 'Capabilities'.
            items:
              type: "string"
          CgroupnsMode:
            type: "string"
            enum:
              - "private"
              - "host"
            description: |
              cgroup namespace mode for the container. Possible values are:

              - `"private"`: the container runs in its own private cgroup namespace
              - `"host"`: use the host system's cgroup namespace

              If not specified, the daemon default is used, which can either be `"private"`
              or `"host"`, depending on daemon version, kernel support and configuration.
          Dns:
            type: "array"
            description: "A list of DNS servers for the container to use."
            items:
              type: "string"
          DnsOptions:
            type: "array"
            description: "A list of DNS options."
            items:
              type: "string"
          DnsSearch:
            type: "array"
            description: "A list of DNS search domains."
            items:
              type: "string"
          ExtraHosts:
            type: "array"
            description: |
              A list of hostnames/IP mappings to add to the container's `/etc/hosts`
              file. Specified in the form `["hostname:IP"]`.
            items:
              type: "string"
          GroupAdd:
            type: "array"
            description: |
              A list of additional groups that the container process will run as.
            items:
              type: "string"
          IpcMode:
            type: "string"
            description: |
              IPC sharing mode for the container. Possible values are:

              - `"none"`: own private IPC namespace, with /dev/shm not mounted
              - `"private"`: own private IPC namespace
              - `"shareable"`: own private IPC namespace, with a possibility to share it with other containers
              - `"container:<name|id>"`: join another (shareable) container's IPC namespace
              - `"host"`: use the host system's IPC namespace

              If not specified, daemon default is used, which can either be `"private"`
              or `"shareable"`, depending on daemon version and configuration.
          Cgroup:
            type: "string"
            description: "Cgroup to use for the container."
          Links:
            type: "array"
            description: |
              A list of links for the container in the form `container_name:alias`.
            items:
              type: "string"
          OomScoreAdj:
            type: "integer"
            description: |
              An integer value containing the score given to the container in
              order to tune OOM killer preferences.
            example: 500
          PidMode:
            type: "string"
            description: |
              Set the PID (Process) Namespace mode for the container. It can be
              either:

              - `"container:<name|id>"`: joins another container's PID namespace
              - `"host"`: use the host's PID namespace inside the container
          Privileged:
            type: "boolean"
            description: "Gives the container full access to the host."
          PublishAllPorts:
            type: "boolean"
            description: |
              Allocates an ephemeral host port for all of a container's
              exposed ports.

              Ports are de-allocated when the container stops and allocated when
              the container starts. The allocated port might be changed when
              restarting the container.

              The port is selected from the ephemeral port range that depends on
              the kernel. For example, on Linux the range is defined by
              `/proc/sys/net/ipv4/ip_local_port_range`.
          ReadonlyRootfs:
            type: "boolean"
            description: "Mount the container's root filesystem as read only."
          SecurityOpt:
            type: "array"
            description: |
              A list of string values to customize labels for MLS systems, such
              as SELinux.
            items:
              type: "string"
          StorageOpt:
            type: "object"
            description: |
              Storage driver options for this container, in the form `{"size": "120G"}`.
            additionalProperties:
              type: "string"
          Tmpfs:
            type: "object"
            description: |
              A map of container directories which should be replaced by tmpfs
              mounts, and their corresponding mount options. For example:

              ```
              { "/run": "rw,noexec,nosuid,size=65536k" }
              ```
            additionalProperties:
              type: "string"
          UTSMode:
            type: "string"
            description: "UTS namespace to use for the container."
          UsernsMode:
            type: "string"
            description: |
              Sets the usernamespace mode for the container when usernamespace
              remapping option is enabled.
          ShmSize:
            type: "integer"
            description: |
              Size of `/dev/shm` in bytes. If omitted, the system uses 64MB.
            minimum: 0
          Sysctls:
            type: "object"
            description: |
              A list of kernel parameters (sysctls) to set in the container.
              For example:

              ```
              {"net.ipv4.ip_forward": "1"}
              ```
            additionalProperties:
              type: "string"
          Runtime:
            type: "string"
            description: "Runtime to use with this container."
          # Applicable to Windows
          Isolation:
            type: "string"
            description: |
              Isolation technology of the container. (Windows only)
            enum:
              - "default"
              - "process"
              - "hyperv"
          MaskedPaths:
            type: "array"
            description: |
              The list of paths to be masked inside the container (this overrides
              the default set of paths).
            items:
              type: "string"
          ReadonlyPaths:
            type: "array"
            description: |
              The list of paths to be set as read-only inside the container
              (this overrides the default set of paths).
            items:
              type: "string"

  ContainerConfig:
    description: |
      Configuration for a container that is portable between hosts.

      When used as `ContainerConfig` field in an image, `ContainerConfig` is an
      optional field containing the configuration of the container that was last
      committed when creating the image.

      Previous versions of Docker builder used this field to store build cache,
      and it is not in active use anymore.
    type: "object"
    properties:
      Hostname:
        description: |
          The hostname to use for the container, as a valid RFC 1123 hostname.
        type: "string"
        example: "439f4e91bd1d"
      Domainname:
        description: |
          The domain name to use for the container.
        type: "string"
      User:
        description: "The user that commands are run as inside the container."
        type: "string"
      AttachStdin:
        description: "Whether to attach to `stdin`."
        type: "boolean"
        default: false
      AttachStdout:
        description: "Whether to attach to `stdout`."
        type: "boolean"
        default: true
      AttachStderr:
        description: "Whether to attach to `stderr`."
        type: "boolean"
        default: true
      ExposedPorts:
        description: |
          An object mapping ports to an empty object in the form:

          `{"<port>/<tcp|udp|sctp>": {}}`
        type: "object"
        x-nullable: true
        additionalProperties:
          type: "object"
          enum:
            - {}
          default: {}
        example: {
          "80/tcp": {},
          "443/tcp": {}
        }
      Tty:
        description: |
          Attach standard streams to a TTY, including `stdin` if it is not closed.
        type: "boolean"
        default: false
      OpenStdin:
        description: "Open `stdin`"
        type: "boolean"
        default: false
      StdinOnce:
        description: "Close `stdin` after one attached client disconnects"
        type: "boolean"
        default: false
      Env:
        description: |
          A list of environment variables to set inside the container in the
          form `["VAR=value", ...]`. A variable without `=` is removed from the
          environment, rather than to have an empty value.
        type: "array"
        items:
          type: "string"
        example:
          - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
      Cmd:
        description: |
          Command to run specified as a string or an array of strings.
        type: "array"
        items:
          type: "string"
        example: ["/bin/sh"]
      Healthcheck:
        $ref: "#/definitions/HealthConfig"
      ArgsEscaped:
        description: "Command is already escaped (Windows only)"
        type: "boolean"
        default: false
        example: false
        x-nullable: true
      Image:
        description: |
          The name (or reference) of the image to use when creating the container,
          or which was used when the container was created.
        type: "string"
        example: "example-image:1.0"
      Volumes:
        description: |
          An object mapping mount point paths inside the container to empty
          objects.
        type: "object"
        additionalProperties:
          type: "object"
          enum:
            - {}
          default: {}
      WorkingDir:
        description: "The working directory for commands to run in."
        type: "string"
        example: "/public/"
      Entrypoint:
        description: |
          The entry point for the container as a string or an array of strings.

          If the array consists of exactly one empty string (`[""]`) then the
          entry point is reset to system default (i.e., the entry point used by
          docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`).
        type: "array"
        items:
          type: "string"
        example: []
      NetworkDisabled:
        description: "Disable networking for the container."
        type: "boolean"
        x-nullable: true
      MacAddress:
        description: "MAC address of the container."
        type: "string"
        x-nullable: true
      OnBuild:
        description: |
          `ONBUILD` metadata that were defined in the image's `Dockerfile`.
        type: "array"
        x-nullable: true
        items:
          type: "string"
        example: []
      Labels:
        description: "User-defined key/value metadata."
        type: "object"
        additionalProperties:
          type: "string"
        example:
          com.example.some-label: "some-value"
          com.example.some-other-label: "some-other-value"
      StopSignal:
        description: |
          Signal to stop a container as a string or unsigned integer.
        type: "string"
        example: "SIGTERM"
        x-nullable: true
      StopTimeout:
        description: "Timeout to stop a container in seconds."
        type: "integer"
        default: 10
        x-nullable: true
      Shell:
        description: |
          Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell.
        type: "array"
        x-nullable: true
        items:
          type: "string"
        example: ["/bin/sh", "-c"]

  NetworkingConfig:
    description: |
      NetworkingConfig represents the container's networking configuration for
      each of its interfaces.
      It is used for the networking configs specified in the `docker create`
      and `docker network connect` commands.
    type: "object"
    properties:
      EndpointsConfig:
        description: |
          A mapping of network name to endpoint configuration for that network.
        type: "object"
        additionalProperties:
          $ref: "#/definitions/EndpointSettings"
    example:
      # putting an example here, instead of using the example values from
      # /definitions/EndpointSettings, because containers/create currently
      # does not support attaching to multiple networks, so the example request
      # would be confusing if it showed that multiple networks can be contained
      # in the EndpointsConfig.
      # TODO remove once we support multiple networks on container create (see https://github.com/moby/moby/blob/07e6b843594e061f82baa5fa23c2ff7d536c2a05/daemon/create.go#L323)
      EndpointsConfig:
        isolated_nw:
          IPAMConfig:
            IPv4Address: "172.20.30.33"
            IPv6Address: "2001:db8:abcd::3033"
            LinkLocalIPs:
              - "169.254.34.68"
              - "fe80::3468"
          Links:
            - "container_1"
            - "container_2"
          Aliases:
            - "server_x"
            - "server_y"

  NetworkSettings:
    description: "NetworkSettings exposes the network settings in the API"
    type: "object"
    properties:
      Bridge:
        description: Name of the network's bridge (for example, `docker0`).
        type: "string"
        example: "docker0"
      SandboxID:
        description: SandboxID uniquely represents a container's network stack.
        type: "string"
        example: "9d12daf2c33f5959c8bf90aa513e4f65b561738661003029ec84830cd503a0c3"
      HairpinMode:
        description: |
          Indicates if hairpin NAT should be enabled on the virtual interface.
        type: "boolean"
        example: false
      LinkLocalIPv6Address:
        description: IPv6 unicast address using the link-local prefix.
        type: "string"
        example: "fe80::42:acff:fe11:1"
      LinkLocalIPv6PrefixLen:
        description: Prefix length of the IPv6 unicast address.
        type: "integer"
        example: "64"
      Ports:
        $ref: "#/definitions/PortMap"
      SandboxKey:
        description: SandboxKey identifies the sandbox
        type: "string"
        example: "/var/run/docker/netns/8ab54b426c38"

      # TODO is SecondaryIPAddresses actually used?
      SecondaryIPAddresses:
        description: ""
        type: "array"
        items:
          $ref: "#/definitions/Address"
        x-nullable: true

      # TODO is SecondaryIPv6Addresses actually used?
      SecondaryIPv6Addresses:
        description: ""
        type: "array"
        items:
          $ref: "#/definitions/Address"
        x-nullable: true

      # TODO properties below are part of DefaultNetworkSettings, which is
      # marked as deprecated since Docker 1.9 and to be removed in Docker v17.12
      EndpointID:
        description: |
          EndpointID uniquely represents a service endpoint in a Sandbox.

          <p><br /></p>

          > **Deprecated**: This field is only propagated when attached to the
          > default "bridge" network. Use the information from the "bridge"
          > network inside the `Networks` map instead, which contains the same
          > information. This field was deprecated in Docker 1.9 and is scheduled
          > to be removed in Docker 17.12.0
        type: "string"
        example: "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b"
      Gateway:
        description: |
          Gateway address for the default "bridge" network.

          <p><br /></p>

          > **Deprecated**: This field is only propagated when attached to the
          > default "bridge" network. Use the information from the "bridge"
          > network inside the `Networks` map instead, which contains the same
          > information. This field was deprecated in Docker 1.9 and is scheduled
          > to be removed in Docker 17.12.0
        type: "string"
        example: "172.17.0.1"
      GlobalIPv6Address:
        description: |
          Global IPv6 address for the default "bridge" network.

          <p><br /></p>

          > **Deprecated**: This field is only propagated when attached to the
          > default "bridge" network. Use the information from the "bridge"
          > network inside the `Networks` map instead, which contains the same
          > information. This field was deprecated in Docker 1.9 and is scheduled
          > to be removed in Docker 17.12.0
        type: "string"
        example: "2001:db8::5689"
      GlobalIPv6PrefixLen:
        description: |
          Mask length of the global IPv6 address.

          <p><br /></p>

          > **Deprecated**: This field is only propagated when attached to the
          > default "bridge" network. Use the information from the "bridge"
          > network inside the `Networks` map instead, which contains the same
          > information. This field was deprecated in Docker 1.9 and is scheduled
          > to be removed in Docker 17.12.0
        type: "integer"
        example: 64
      IPAddress:
        description: |
          IPv4 address for the default "bridge" network.

          <p><br /></p>

          > **Deprecated**: This field is only propagated when attached to the
          > default "bridge" network. Use the information from the "bridge"
          > network inside the `Networks` map instead, which contains the same
          > information. This field was deprecated in Docker 1.9 and is scheduled
          > to be removed in Docker 17.12.0
        type: "string"
        example: "172.17.0.4"
      IPPrefixLen:
        description: |
          Mask length of the IPv4 address.

          <p><br /></p>

          > **Deprecated**: This field is only propagated when attached to the
          > default "bridge" network. Use the information from the "bridge"
          > network inside the `Networks` map instead, which contains the same
          > information. This field was deprecated in Docker 1.9 and is scheduled
          > to be removed in Docker 17.12.0
        type: "integer"
        example: 16
      IPv6Gateway:
        description: |
          IPv6 gateway address for this network.

          <p><br /></p>

          > **Deprecated**: This field is only propagated when attached to the
          > default "bridge" network. Use the information from the "bridge"
          > network inside the `Networks` map instead, which contains the same
          > information. This field was deprecated in Docker 1.9 and is scheduled
          > to be removed in Docker 17.12.0
        type: "string"
        example: "2001:db8:2::100"
      MacAddress:
        description: |
          MAC address for the container on the default "bridge" network.

          <p><br /></p>

          > **Deprecated**: This field is only propagated when attached to the
          > default "bridge" network. Use the information from the "bridge"
          > network inside the `Networks` map instead, which contains the same
          > information. This field was deprecated in Docker 1.9 and is scheduled
          > to be removed in Docker 17.12.0
        type: "string"
        example: "02:42:ac:11:00:04"
      Networks:
        description: |
          Information about all networks that the container is connected to.
        type: "object"
        additionalProperties:
          $ref: "#/definitions/EndpointSettings"

  Address:
    description: Address represents an IPv4 or IPv6 IP address.
    type: "object"
    properties:
      Addr:
        description: IP address.
        type: "string"
      PrefixLen:
        description: Mask length of the IP address.
        type: "integer"

  PortMap:
    description: |
      PortMap describes the mapping of container ports to host ports, using the
      container's port-number and protocol as key in the format `<port>/<protocol>`,
      for example, `80/udp`.

      If a container's port is mapped for multiple protocols, separate entries
      are added to the mapping table.
    type: "object"
    additionalProperties:
      type: "array"
      x-nullable: true
      items:
        $ref: "#/definitions/PortBinding"
    example:
      "443/tcp":
        - HostIp: "127.0.0.1"
          HostPort: "4443"
      "80/tcp":
        - HostIp: "0.0.0.0"
          HostPort: "80"
        - HostIp: "0.0.0.0"
          HostPort: "8080"
      "80/udp":
        - HostIp: "0.0.0.0"
          HostPort: "80"
      "53/udp":
        - HostIp: "0.0.0.0"
          HostPort: "53"
      "2377/tcp": null

  PortBinding:
    description: |
      PortBinding represents a binding between a host IP address and a host
      port.
    type: "object"
    properties:
      HostIp:
        description: "Host IP address that the container's port is mapped to."
        type: "string"
        example: "127.0.0.1"
      HostPort:
        description: "Host port number that the container's port is mapped to."
        type: "string"
        example: "4443"

  GraphDriverData:
    description: |
      Information about the storage driver used to store the container's and
      image's filesystem.
    type: "object"
    required: [Name, Data]
    properties:
      Name:
        description: "Name of the storage driver."
        type: "string"
        x-nullable: false
        example: "overlay2"
      Data:
        description: |
          Low-level storage metadata, provided as key/value pairs.

          This information is driver-specific, and depends on the storage-driver
          in use, and should be used for informational purposes only.
        type: "object"
        x-nullable: false
        additionalProperties:
          type: "string"
        example: {
          "MergedDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/merged",
          "UpperDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/diff",
          "WorkDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/work"
        }

  ImageInspect:
    description: |
      Information about an image in the local image cache.
    type: "object"
    properties:
      Id:
        description: |
          ID is the content-addressable ID of an image.

          This identifier is a content-addressable digest calculated from the
          image's configuration (which includes the digests of layers used by
          the image).

          Note that this digest differs from the `RepoDigests` below, which
          holds digests of image manifests that reference the image.
        type: "string"
        x-nullable: false
        example: "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710"
      RepoTags:
        description: |
          List of image names/tags in the local image cache that reference this
          image.

          Multiple image tags can refer to the same image, and this list may be
          empty if no tags reference the image, in which case the image is
          "untagged", in which case it can still be referenced by its ID.
        type: "array"
        items:
          type: "string"
        example:
          - "example:1.0"
          - "example:latest"
          - "example:stable"
          - "internal.registry.example.com:5000/example:1.0"
      RepoDigests:
        description: |
          List of content-addressable digests of locally available image manifests
          that the image is referenced from. Multiple manifests can refer to the
          same image.

          These digests are usually only available if the image was either pulled
          from a registry, or if the image was pushed to a registry, which is when
          the manifest is generated and its digest calculated.
        type: "array"
        items:
          type: "string"
        example:
          - "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb"
          - "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578"
      Parent:
        description: |
          ID of the parent image.

          Depending on how the image was created, this field may be empty and
          is only set for images that were built/created locally. This field
          is empty if the image was pulled from an image registry.
        type: "string"
        x-nullable: false
        example: ""
      Comment:
        description: |
          Optional message that was set when committing or importing the image.
        type: "string"
        x-nullable: false
        example: ""
      Created:
        description: |
          Date and time at which the image was created, formatted in
          [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.
        type: "string"
        x-nullable: false
        example: "2022-02-04T21:20:12.497794809Z"
      Container:
        description: |
          The ID of the container that was used to create the image.

          Depending on how the image was created, this field may be empty.
        type: "string"
        x-nullable: false
        example: "65974bc86f1770ae4bff79f651ebdbce166ae9aada632ee3fa9af3a264911735"
      ContainerConfig:
        $ref: "#/definitions/ContainerConfig"
      DockerVersion:
        description: |
          The version of Docker that was used to build the image.

          Depending on how the image was created, this field may be empty.
        type: "string"
        x-nullable: false
        example: "20.10.7"
      Author:
        description: |
          Name of the author that was specified when committing the image, or as
          specified through MAINTAINER (deprecated) in the Dockerfile.
        type: "string"
        x-nullable: false
        example: ""
      Config:
        $ref: "#/definitions/ContainerConfig"
      Architecture:
        description: |
          Hardware CPU architecture that the image runs on.
        type: "string"
        x-nullable: false
        example: "arm"
      Variant:
        description: |
          CPU architecture variant (presently ARM-only).
        type: "string"
        x-nullable: true
        example: "v7"
      Os:
        description: |
          Operating System the image is built to run on.
        type: "string"
        x-nullable: false
        example: "linux"
      OsVersion:
        description: |
          Operating System version the image is built to run on (especially
          for Windows).
        type: "string"
        example: ""
        x-nullable: true
      Size:
        description: |
          Total size of the image including all layers it is composed of.
        type: "integer"
        format: "int64"
        x-nullable: false
        example: 1239828
      VirtualSize:
        description: |
          Total size of the image including all layers it is composed of.

          In versions of Docker before v1.10, this field was calculated from
          the image itself and all of its parent images. Docker v1.10 and up
          store images self-contained, and no longer use a parent-chain, making
          this field an equivalent of the Size field.

          This field is kept for backward compatibility, but may be removed in
          a future version of the API.
        type: "integer"
        format: "int64"
        x-nullable: false
        example: 1239828
      GraphDriver:
        $ref: "#/definitions/GraphDriverData"
      RootFS:
        description: |
          Information about the image's RootFS, including the layer IDs.
        type: "object"
        required: [Type]
        properties:
          Type:
            type: "string"
            x-nullable: false
            example: "layers"
          Layers:
            type: "array"
            items:
              type: "string"
            example:
              - "sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6"
              - "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef"
      Metadata:
        description: |
          Additional metadata of the image in the local cache. This information
          is local to the daemon, and not part of the image itself.
        type: "object"
        properties:
          LastTagTime:
            description: |
              Date and time at which the image was last tagged in
              [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.

              This information is only available if the image was tagged locally,
              and omitted otherwise.
            type: "string"
            format: "dateTime"
            example: "2022-02-28T14:40:02.623929178Z"
            x-nullable: true
  ImageSummary:
    type: "object"
    required:
      - Id
      - ParentId
      - RepoTags
      - RepoDigests
      - Created
      - Size
      - SharedSize
      - VirtualSize
      - Labels
      - Containers
    properties:
      Id:
        description: |
          ID is the content-addressable ID of an image.

          This identifier is a content-addressable digest calculated from the
          image's configuration (which includes the digests of layers used by
          the image).

          Note that this digest differs from the `RepoDigests` below, which
          holds digests of image manifests that reference the image.
        type: "string"
        x-nullable: false
        example: "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710"
      ParentId:
        description: |
          ID of the parent image.

          Depending on how the image was created, this field may be empty and
          is only set for images that were built/created locally. This field
          is empty if the image was pulled from an image registry.
        type: "string"
        x-nullable: false
        example: ""
      RepoTags:
        description: |
          List of image names/tags in the local image cache that reference this
          image.

          Multiple image tags can refer to the same image, and this list may be
          empty if no tags reference the image, in which case the image is
          "untagged", in which case it can still be referenced by its ID.
        type: "array"
        x-nullable: false
        items:
          type: "string"
        example:
          - "example:1.0"
          - "example:latest"
          - "example:stable"
          - "internal.registry.example.com:5000/example:1.0"
      RepoDigests:
        description: |
          List of content-addressable digests of locally available image manifests
          that the image is referenced from. Multiple manifests can refer to the
          same image.

          These digests are usually only available if the image was either pulled
          from a registry, or if the image was pushed to a registry, which is when
          the manifest is generated and its digest calculated.
        type: "array"
        x-nullable: false
        items:
          type: "string"
        example:
          - "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb"
          - "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578"
      Created:
        description: |
          Date and time at which the image was created as a Unix timestamp
          (number of seconds sinds EPOCH).
        type: "integer"
        x-nullable: false
        example: "1644009612"
      Size:
        description: |
          Total size of the image including all layers it is composed of.
        type: "integer"
        format: "int64"
        x-nullable: false
        example: 172064416
      SharedSize:
        description: |
          Total size of image layers that are shared between this image and other
          images.

          This size is not calculated by default. `-1` indicates that the value
          has not been set / calculated.
        type: "integer"
        format: "int64"
        x-nullable: false
        example: 1239828
      VirtualSize:
        description: |
          Total size of the image including all layers it is composed of.

          In versions of Docker before v1.10, this field was calculated from
          the image itself and all of its parent images. Docker v1.10 and up
          store images self-contained, and no longer use a parent-chain, making
          this field an equivalent of the Size field.

          This field is kept for backward compatibility, but may be removed in
          a future version of the API.
        type: "integer"
        format: "int64"
        x-nullable: false
        example: 172064416
      Labels:
        description: "User-defined key/value metadata."
        type: "object"
        x-nullable: false
        additionalProperties:
          type: "string"
        example:
          com.example.some-label: "some-value"
          com.example.some-other-label: "some-other-value"
      Containers:
        description: |
          Number of containers using this image. Includes both stopped and running
          containers.

          This size is not calculated by default, and depends on which API endpoint
          is used. `-1` indicates that the value has not been set / calculated.
        x-nullable: false
        type: "integer"
        example: 2

  AuthConfig:
    type: "object"
    properties:
      username:
        type: "string"
      password:
        type: "string"
      email:
        type: "string"
      serveraddress:
        type: "string"
    example:
      username: "hannibal"
      password: "xxxx"
      serveraddress: "https://index.docker.io/v1/"

  ProcessConfig:
    type: "object"
    properties:
      privileged:
        type: "boolean"
      user:
        type: "string"
      tty:
        type: "boolean"
      entrypoint:
        type: "string"
      arguments:
        type: "array"
        items:
          type: "string"

  Volume:
    type: "object"
    required: [Name, Driver, Mountpoint, Labels, Scope, Options]
    properties:
      Name:
        type: "string"
        description: "Name of the volume."
        x-nullable: false
        example: "tardis"
      Driver:
        type: "string"
        description: "Name of the volume driver used by the volume."
        x-nullable: false
        example: "custom"
      Mountpoint:
        type: "string"
        description: "Mount path of the volume on the host."
        x-nullable: false
        example: "/var/lib/docker/volumes/tardis"
      CreatedAt:
        type: "string"
        format: "dateTime"
        description: "Date/Time the volume was created."
        example: "2016-06-07T20:31:11.853781916Z"
      Status:
        type: "object"
        description: |
          Low-level details about the volume, provided by the volume driver.
          Details are returned as a map with key/value pairs:
          `{"key":"value","key2":"value2"}`.

          The `Status` field is optional, and is omitted if the volume driver
          does not support this feature.
        additionalProperties:
          type: "object"
        example:
          hello: "world"
      Labels:
        type: "object"
        description: "User-defined key/value metadata."
        x-nullable: false
        additionalProperties:
          type: "string"
        example:
          com.example.some-label: "some-value"
          com.example.some-other-label: "some-other-value"
      Scope:
        type: "string"
        description: |
          The level at which the volume exists. Either `global` for cluster-wide,
          or `local` for machine level.
        default: "local"
        x-nullable: false
        enum: ["local", "global"]
        example: "local"
      ClusterVolume:
        $ref: "#/definitions/ClusterVolume"
      Options:
        type: "object"
        description: |
          The driver specific options used when creating the volume.
        additionalProperties:
          type: "string"
        example:
          device: "tmpfs"
          o: "size=100m,uid=1000"
          type: "tmpfs"
      UsageData:
        type: "object"
        x-nullable: true
        x-go-name: "UsageData"
        required: [Size, RefCount]
        description: |
          Usage details about the volume. This information is used by the
          `GET /system/df` endpoint, and omitted in other endpoints.
        properties:
          Size:
            type: "integer"
            format: "int64"
            default: -1
            description: |
              Amount of disk space used by the volume (in bytes). This information
              is only available for volumes created with the `"local"` volume
              driver. For volumes created with other volume drivers, this field
              is set to `-1` ("not available")
            x-nullable: false
          RefCount:
            type: "integer"
            format: "int64"
            default: -1
            description: |
              The number of containers referencing this volume. This field
              is set to `-1` if the reference-count is not available.
            x-nullable: false

  VolumeCreateOptions:
    description: "Volume configuration"
    type: "object"
    title: "VolumeConfig"
    x-go-name: "CreateOptions"
    properties:
      Name:
        description: |
          The new volume's name. If not specified, Docker generates a name.
        type: "string"
        x-nullable: false
        example: "tardis"
      Driver:
        description: "Name of the volume driver to use."
        type: "string"
        default: "local"
        x-nullable: false
        example: "custom"
      DriverOpts:
        description: |
          A mapping of driver options and values. These options are
          passed directly to the driver and are driver specific.
        type: "object"
        additionalProperties:
          type: "string"
        example:
          device: "tmpfs"
          o: "size=100m,uid=1000"
          type: "tmpfs"
      Labels:
        description: "User-defined key/value metadata."
        type: "object"
        additionalProperties:
          type: "string"
        example:
          com.example.some-label: "some-value"
          com.example.some-other-label: "some-other-value"
      ClusterVolumeSpec:
        $ref: "#/definitions/ClusterVolumeSpec"

  VolumeListResponse:
    type: "object"
    title: "VolumeListResponse"
    x-go-name: "ListResponse"
    description: "Volume list response"
    properties:
      Volumes:
        type: "array"
        description: "List of volumes"
        items:
          $ref: "#/definitions/Volume"
      Warnings:
        type: "array"
        description: |
          Warnings that occurred when fetching the list of volumes.
        items:
          type: "string"
        example: []

  Network:
    type: "object"
    properties:
      Name:
        type: "string"
      Id:
        type: "string"
      Created:
        type: "string"
        format: "dateTime"
      Scope:
        type: "string"
      Driver:
        type: "string"
      EnableIPv6:
        type: "boolean"
      IPAM:
        $ref: "#/definitions/IPAM"
      Internal:
        type: "boolean"
      Attachable:
        type: "boolean"
      Ingress:
        type: "boolean"
      Containers:
        type: "object"
        additionalProperties:
          $ref: "#/definitions/NetworkContainer"
      Options:
        type: "object"
        additionalProperties:
          type: "string"
      Labels:
        type: "object"
        additionalProperties:
          type: "string"
    example:
      Name: "net01"
      Id: "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99"
      Created: "2016-10-19T04:33:30.360899459Z"
      Scope: "local"
      Driver: "bridge"
      EnableIPv6: false
      IPAM:
        Driver: "default"
        Config:
          - Subnet: "172.19.0.0/16"
            Gateway: "172.19.0.1"
        Options:
          foo: "bar"
      Internal: false
      Attachable: false
      Ingress: false
      Containers:
        19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c:
          Name: "test"
          EndpointID: "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a"
          MacAddress: "02:42:ac:13:00:02"
          IPv4Address: "172.19.0.2/16"
          IPv6Address: ""
      Options:
        com.docker.network.bridge.default_bridge: "true"
        com.docker.network.bridge.enable_icc: "true"
        com.docker.network.bridge.enable_ip_masquerade: "true"
        com.docker.network.bridge.host_binding_ipv4: "0.0.0.0"
        com.docker.network.bridge.name: "docker0"
        com.docker.network.driver.mtu: "1500"
      Labels:
        com.example.some-label: "some-value"
        com.example.some-other-label: "some-other-value"
  IPAM:
    type: "object"
    properties:
      Driver:
        description: "Name of the IPAM driver to use."
        type: "string"
        default: "default"
      Config:
        description: |
          List of IPAM configuration options, specified as a map:

          ```
          {"Subnet": <CIDR>, "IPRange": <CIDR>, "Gateway": <IP address>, "AuxAddress": <device_name:IP address>}
          ```
        type: "array"
        items:
          $ref: "#/definitions/IPAMConfig"
      Options:
        description: "Driver-specific options, specified as a map."
        type: "object"
        additionalProperties:
          type: "string"

  IPAMConfig:
    type: "object"
    properties:
      Subnet:
        type: "string"
      IPRange:
        type: "string"
      Gateway:
        type: "string"
      AuxiliaryAddresses:
        type: "object"
        additionalProperties:
          type: "string"

  NetworkContainer:
    type: "object"
    properties:
      Name:
        type: "string"
      EndpointID:
        type: "string"
      MacAddress:
        type: "string"
      IPv4Address:
        type: "string"
      IPv6Address:
        type: "string"

  BuildInfo:
    type: "object"
    properties:
      id:
        type: "string"
      stream:
        type: "string"
      error:
        type: "string"
      errorDetail:
        $ref: "#/definitions/ErrorDetail"
      status:
        type: "string"
      progress:
        type: "string"
      progressDetail:
        $ref: "#/definitions/ProgressDetail"
      aux:
        $ref: "#/definitions/ImageID"

  BuildCache:
    type: "object"
    description: |
      BuildCache contains information about a build cache record.
    properties:
      ID:
        type: "string"
        description: |
          Unique ID of the build cache record.
        example: "ndlpt0hhvkqcdfkputsk4cq9c"
      Parent:
        description: |
          ID of the parent build cache record.

          > **Deprecated**: This field is deprecated, and omitted if empty.
        type: "string"
        x-nullable: true
        example: ""
      Parents:
        description: |
          List of parent build cache record IDs.
        type: "array"
        items:
          type: "string"
        x-nullable: true
        example: ["hw53o5aio51xtltp5xjp8v7fx"]
      Type:
        type: "string"
        description: |
          Cache record type.
        example: "regular"
        # see https://github.com/moby/buildkit/blob/fce4a32258dc9d9664f71a4831d5de10f0670677/client/diskusage.go#L75-L84
        enum:
          - "internal"
          - "frontend"
          - "source.local"
          - "source.git.checkout"
          - "exec.cachemount"
          - "regular"
      Description:
        type: "string"
        description: |
          Description of the build-step that produced the build cache.
        example: "mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache"
      InUse:
        type: "boolean"
        description: |
          Indicates if the build cache is in use.
        example: false
      Shared:
        type: "boolean"
        description: |
          Indicates if the build cache is shared.
        example: true
      Size:
        description: |
          Amount of disk space used by the build cache (in bytes).
        type: "integer"
        example: 51
      CreatedAt:
        description: |
          Date and time at which the build cache was created in
          [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.
        type: "string"
        format: "dateTime"
        example: "2016-08-18T10:44:24.496525531Z"
      LastUsedAt:
        description: |
          Date and time at which the build cache was last used in
          [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.
        type: "string"
        format: "dateTime"
        x-nullable: true
        example: "2017-08-09T07:09:37.632105588Z"
      UsageCount:
        type: "integer"
        example: 26

  ImageID:
    type: "object"
    description: "Image ID or Digest"
    properties:
      ID:
        type: "string"
    example:
      ID: "sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c"

  CreateImageInfo:
    type: "object"
    properties:
      id:
        type: "string"
      error:
        type: "string"
      errorDetail:
        $ref: "#/definitions/ErrorDetail"
      status:
        type: "string"
      progress:
        type: "string"
      progressDetail:
        $ref: "#/definitions/ProgressDetail"

  PushImageInfo:
    type: "object"
    properties:
      error:
        type: "string"
      status:
        type: "string"
      progress:
        type: "string"
      progressDetail:
        $ref: "#/definitions/ProgressDetail"

  ErrorDetail:
    type: "object"
    properties:
      code:
        type: "integer"
      message:
        type: "string"

  ProgressDetail:
    type: "object"
    properties:
      current:
        type: "integer"
      total:
        type: "integer"

  ErrorResponse:
    description: "Represents an error."
    type: "object"
    required: ["message"]
    properties:
      message:
        description: "The error message."
        type: "string"
        x-nullable: false
    example:
      message: "Something went wrong."

  IdResponse:
    description: "Response to an API call that returns just an Id"
    type: "object"
    required: ["Id"]
    properties:
      Id:
        description: "The id of the newly created object."
        type: "string"
        x-nullable: false

  EndpointSettings:
    description: "Configuration for a network endpoint."
    type: "object"
    properties:
      # Configurations
      IPAMConfig:
        $ref: "#/definitions/EndpointIPAMConfig"
      Links:
        type: "array"
        items:
          type: "string"
        example:
          - "container_1"
          - "container_2"
      Aliases:
        type: "array"
        items:
          type: "string"
        example:
          - "server_x"
          - "server_y"

      # Operational data
      NetworkID:
        description: |
          Unique ID of the network.
        type: "string"
        example: "08754567f1f40222263eab4102e1c733ae697e8e354aa9cd6e18d7402835292a"
      EndpointID:
        description: |
          Unique ID for the service endpoint in a Sandbox.
        type: "string"
        example: "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b"
      Gateway:
        description: |
          Gateway address for this network.
        type: "string"
        example: "172.17.0.1"
      IPAddress:
        description: |
          IPv4 address.
        type: "string"
        example: "172.17.0.4"
      IPPrefixLen:
        description: |
          Mask length of the IPv4 address.
        type: "integer"
        example: 16
      IPv6Gateway:
        description: |
          IPv6 gateway address.
        type: "string"
        example: "2001:db8:2::100"
      GlobalIPv6Address:
        description: |
          Global IPv6 address.
        type: "string"
        example: "2001:db8::5689"
      GlobalIPv6PrefixLen:
        description: |
          Mask length of the global IPv6 address.
        type: "integer"
        format: "int64"
        example: 64
      MacAddress:
        description: |
          MAC address for the endpoint on this network.
        type: "string"
        example: "02:42:ac:11:00:04"
      DriverOpts:
        description: |
          DriverOpts is a mapping of driver options and values. These options
          are passed directly to the driver and are driver specific.
        type: "object"
        x-nullable: true
        additionalProperties:
          type: "string"
        example:
          com.example.some-label: "some-value"
          com.example.some-other-label: "some-other-value"

  EndpointIPAMConfig:
    description: |
      EndpointIPAMConfig represents an endpoint's IPAM configuration.
    type: "object"
    x-nullable: true
    properties:
      IPv4Address:
        type: "string"
        example: "172.20.30.33"
      IPv6Address:
        type: "string"
        example: "2001:db8:abcd::3033"
      LinkLocalIPs:
        type: "array"
        items:
          type: "string"
        example:
          - "169.254.34.68"
          - "fe80::3468"

  PluginMount:
    type: "object"
    x-nullable: false
    required: [Name, Description, Settable, Source, Destination, Type, Options]
    properties:
      Name:
        type: "string"
        x-nullable: false
        example: "some-mount"
      Description:
        type: "string"
        x-nullable: false
        example: "This is a mount that's used by the plugin."
      Settable:
        type: "array"
        items:
          type: "string"
      Source:
        type: "string"
        example: "/var/lib/docker/plugins/"
      Destination:
        type: "string"
        x-nullable: false
        example: "/mnt/state"
      Type:
        type: "string"
        x-nullable: false
        example: "bind"
      Options:
        type: "array"
        items:
          type: "string"
        example:
          - "rbind"
          - "rw"

  PluginDevice:
    type: "object"
    required: [Name, Description, Settable, Path]
    x-nullable: false
    properties:
      Name:
        type: "string"
        x-nullable: false
      Description:
        type: "string"
        x-nullable: false
      Settable:
        type: "array"
        items:
          type: "string"
      Path:
        type: "string"
        example: "/dev/fuse"

  PluginEnv:
    type: "object"
    x-nullable: false
    required: [Name, Description, Settable, Value]
    properties:
      Name:
        x-nullable: false
        type: "string"
      Description:
        x-nullable: false
        type: "string"
      Settable:
        type: "array"
        items:
          type: "string"
      Value:
        type: "string"

  PluginInterfaceType:
    type: "object"
    x-nullable: false
    required: [Prefix, Capability, Version]
    properties:
      Prefix:
        type: "string"
        x-nullable: false
      Capability:
        type: "string"
        x-nullable: false
      Version:
        type: "string"
        x-nullable: false

  PluginPrivilege:
    description: |
      Describes a permission the user has to accept upon installing
      the plugin.
    type: "object"
    x-go-name: "PluginPrivilege"
    properties:
      Name:
        type: "string"
        example: "network"
      Description:
        type: "string"
      Value:
        type: "array"
        items:
          type: "string"
        example:
          - "host"

  Plugin:
    description: "A plugin for the Engine API"
    type: "object"
    required: [Settings, Enabled, Config, Name]
    properties:
      Id:
        type: "string"
        example: "5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078"
      Name:
        type: "string"
        x-nullable: false
        example: "tiborvass/sample-volume-plugin"
      Enabled:
        description:
          True if the plugin is running. False if the plugin is not running,
          only installed.
        type: "boolean"
        x-nullable: false
        example: true
      Settings:
        description: "Settings that can be modified by users."
        type: "object"
        x-nullable: false
        required: [Args, Devices, Env, Mounts]
        properties:
          Mounts:
            type: "array"
            items:
              $ref: "#/definitions/PluginMount"
          Env:
            type: "array"
            items:
              type: "string"
            example:
              - "DEBUG=0"
          Args:
            type: "array"
            items:
              type: "string"
          Devices:
            type: "array"
            items:
              $ref: "#/definitions/PluginDevice"
      PluginReference:
        description: "plugin remote reference used to push/pull the plugin"
        type: "string"
        x-nullable: false
        example: "localhost:5000/tiborvass/sample-volume-plugin:latest"
      Config:
        description: "The config of a plugin."
        type: "object"
        x-nullable: false
        required:
          - Description
          - Documentation
          - Interface
          - Entrypoint
          - WorkDir
          - Network
          - Linux
          - PidHost
          - PropagatedMount
          - IpcHost
          - Mounts
          - Env
          - Args
        properties:
          DockerVersion:
            description: "Docker Version used to create the plugin"
            type: "string"
            x-nullable: false
            example: "17.06.0-ce"
          Description:
            type: "string"
            x-nullable: false
            example: "A sample volume plugin for Docker"
          Documentation:
            type: "string"
            x-nullable: false
            example: "https://docs.docker.com/engine/extend/plugins/"
          Interface:
            description: "The interface between Docker and the plugin"
            x-nullable: false
            type: "object"
            required: [Types, Socket]
            properties:
              Types:
                type: "array"
                items:
                  $ref: "#/definitions/PluginInterfaceType"
                example:
                  - "docker.volumedriver/1.0"
              Socket:
                type: "string"
                x-nullable: false
                example: "plugins.sock"
              ProtocolScheme:
                type: "string"
                example: "some.protocol/v1.0"
                description: "Protocol to use for clients connecting to the plugin."
                enum:
                  - ""
                  - "moby.plugins.http/v1"
          Entrypoint:
            type: "array"
            items:
              type: "string"
            example:
              - "/usr/bin/sample-volume-plugin"
              - "/data"
          WorkDir:
            type: "string"
            x-nullable: false
            example: "/bin/"
          User:
            type: "object"
            x-nullable: false
            properties:
              UID:
                type: "integer"
                format: "uint32"
                example: 1000
              GID:
                type: "integer"
                format: "uint32"
                example: 1000
          Network:
            type: "object"
            x-nullable: false
            required: [Type]
            properties:
              Type:
                x-nullable: false
                type: "string"
                example: "host"
          Linux:
            type: "object"
            x-nullable: false
            required: [Capabilities, AllowAllDevices, Devices]
            properties:
              Capabilities:
                type: "array"
                items:
                  type: "string"
                example:
                  - "CAP_SYS_ADMIN"
                  - "CAP_SYSLOG"
              AllowAllDevices:
                type: "boolean"
                x-nullable: false
                example: false
              Devices:
                type: "array"
                items:
                  $ref: "#/definitions/PluginDevice"
          PropagatedMount:
            type: "string"
            x-nullable: false
            example: "/mnt/volumes"
          IpcHost:
            type: "boolean"
            x-nullable: false
            example: false
          PidHost:
            type: "boolean"
            x-nullable: false
            example: false
          Mounts:
            type: "array"
            items:
              $ref: "#/definitions/PluginMount"
          Env:
            type: "array"
            items:
              $ref: "#/definitions/PluginEnv"
            example:
              - Name: "DEBUG"
                Description: "If set, prints debug messages"
                Settable: null
                Value: "0"
          Args:
            type: "object"
            x-nullable: false
            required: [Name, Description, Settable, Value]
            properties:
              Name:
                x-nullable: false
                type: "string"
                example: "args"
              Description:
                x-nullable: false
                type: "string"
                example: "command line arguments"
              Settable:
                type: "array"
                items:
                  type: "string"
              Value:
                type: "array"
                items:
                  type: "string"
          rootfs:
            type: "object"
            properties:
              type:
                type: "string"
                example: "layers"
              diff_ids:
                type: "array"
                items:
                  type: "string"
                example:
                  - "sha256:675532206fbf3030b8458f88d6e26d4eb1577688a25efec97154c94e8b6b4887"
                  - "sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8"

  ObjectVersion:
    description: |
      The version number of the object such as node, service, etc. This is needed
      to avoid conflicting writes. The client must send the version number along
      with the modified specification when updating these objects.

      This approach ensures safe concurrency and determinism in that the change
      on the object may not be applied if the version number has changed from the
      last read. In other words, if two update requests specify the same base
      version, only one of the requests can succeed. As a result, two separate
      update requests that happen at the same time will not unintentionally
      overwrite each other.
    type: "object"
    properties:
      Index:
        type: "integer"
        format: "uint64"
        example: 373531

  NodeSpec:
    type: "object"
    properties:
      Name:
        description: "Name for the node."
        type: "string"
        example: "my-node"
      Labels:
        description: "User-defined key/value metadata."
        type: "object"
        additionalProperties:
          type: "string"
      Role:
        description: "Role of the node."
        type: "string"
        enum:
          - "worker"
          - "manager"
        example: "manager"
      Availability:
        description: "Availability of the node."
        type: "string"
        enum:
          - "active"
          - "pause"
          - "drain"
        example: "active"
    example:
      Availability: "active"
      Name: "node-name"
      Role: "manager"
      Labels:
        foo: "bar"

  Node:
    type: "object"
    properties:
      ID:
        type: "string"
        example: "24ifsmvkjbyhk"
      Version:
        $ref: "#/definitions/ObjectVersion"
      CreatedAt:
        description: |
          Date and time at which the node was added to the swarm in
          [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.
        type: "string"
        format: "dateTime"
        example: "2016-08-18T10:44:24.496525531Z"
      UpdatedAt:
        description: |
          Date and time at which the node was last updated in
          [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.
        type: "string"
        format: "dateTime"
        example: "2017-08-09T07:09:37.632105588Z"
      Spec:
        $ref: "#/definitions/NodeSpec"
      Description:
        $ref: "#/definitions/NodeDescription"
      Status:
        $ref: "#/definitions/NodeStatus"
      ManagerStatus:
        $ref: "#/definitions/ManagerStatus"

  NodeDescription:
    description: |
      NodeDescription encapsulates the properties of the Node as reported by the
      agent.
    type: "object"
    properties:
      Hostname:
        type: "string"
        example: "bf3067039e47"
      Platform:
        $ref: "#/definitions/Platform"
      Resources:
        $ref: "#/definitions/ResourceObject"
      Engine:
        $ref: "#/definitions/EngineDescription"
      TLSInfo:
        $ref: "#/definitions/TLSInfo"

  Platform:
    description: |
      Platform represents the platform (Arch/OS).
    type: "object"
    properties:
      Architecture:
        description: |
          Architecture represents the hardware architecture (for example,
          `x86_64`).
        type: "string"
        example: "x86_64"
      OS:
        description: |
          OS represents the Operating System (for example, `linux` or `windows`).
        type: "string"
        example: "linux"

  EngineDescription:
    description: "EngineDescription provides information about an engine."
    type: "object"
    properties:
      EngineVersion:
        type: "string"
        example: "17.06.0"
      Labels:
        type: "object"
        additionalProperties:
          type: "string"
        example:
          foo: "bar"
      Plugins:
        type: "array"
        items:
          type: "object"
          properties:
            Type:
              type: "string"
            Name:
              type: "string"
        example:
          - Type: "Log"
            Name: "awslogs"
          - Type: "Log"
            Name: "fluentd"
          - Type: "Log"
            Name: "gcplogs"
          - Type: "Log"
            Name: "gelf"
          - Type: "Log"
            Name: "journald"
          - Type: "Log"
            Name: "json-file"
          - Type: "Log"
            Name: "logentries"
          - Type: "Log"
            Name: "splunk"
          - Type: "Log"
            Name: "syslog"
          - Type: "Network"
            Name: "bridge"
          - Type: "Network"
            Name: "host"
          - Type: "Network"
            Name: "ipvlan"
          - Type: "Network"
            Name: "macvlan"
          - Type: "Network"
            Name: "null"
          - Type: "Network"
            Name: "overlay"
          - Type: "Volume"
            Name: "local"
          - Type: "Volume"
            Name: "localhost:5000/vieux/sshfs:latest"
          - Type: "Volume"
            Name: "vieux/sshfs:latest"

  TLSInfo:
    description: |
      Information about the issuer of leaf TLS certificates and the trusted root
      CA certificate.
    type: "object"
    properties:
      TrustRoot:
        description: |
          The root CA certificate(s) that are used to validate leaf TLS
          certificates.
        type: "string"
      CertIssuerSubject:
        description:
          The base64-url-safe-encoded raw subject bytes of the issuer.
        type: "string"
      CertIssuerPublicKey:
        description: |
          The base64-url-safe-encoded raw public key bytes of the issuer.
        type: "string"
    example:
      TrustRoot: |
        -----BEGIN CERTIFICATE-----
        MIIBajCCARCgAwIBAgIUbYqrLSOSQHoxD8CwG6Bi2PJi9c8wCgYIKoZIzj0EAwIw
        EzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTcwNDI0MjE0MzAwWhcNMzcwNDE5MjE0
        MzAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH
        A0IABJk/VyMPYdaqDXJb/VXh5n/1Yuv7iNrxV3Qb3l06XD46seovcDWs3IZNV1lf
        3Skyr0ofcchipoiHkXBODojJydSjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB
        Af8EBTADAQH/MB0GA1UdDgQWBBRUXxuRcnFjDfR/RIAUQab8ZV/n4jAKBggqhkjO
        PQQDAgNIADBFAiAy+JTe6Uc3KyLCMiqGl2GyWGQqQDEcO3/YG36x7om65AIhAJvz
        pxv6zFeVEkAEEkqIYi0omA9+CjanB/6Bz4n1uw8H
        -----END CERTIFICATE-----
      CertIssuerSubject: "MBMxETAPBgNVBAMTCHN3YXJtLWNh"
      CertIssuerPublicKey: "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmT9XIw9h1qoNclv9VeHmf/Vi6/uI2vFXdBveXTpcPjqx6i9wNazchk1XWV/dKTKvSh9xyGKmiIeRcE4OiMnJ1A=="

  NodeStatus:
    description: |
      NodeStatus represents the status of a node.

      It provides the current status of the node, as seen by the manager.
    type: "object"
    properties:
      State:
        $ref: "#/definitions/NodeState"
      Message:
        type: "string"
        example: ""
      Addr:
        description: "IP address of the node."
        type: "string"
        example: "172.17.0.2"

  NodeState:
    description: "NodeState represents the state of a node."
    type: "string"
    enum:
      - "unknown"
      - "down"
      - "ready"
      - "disconnected"
    example: "ready"

  ManagerStatus:
    description: |
      ManagerStatus represents the status of a manager.

      It provides the current status of a node's manager component, if the node
      is a manager.
    x-nullable: true
    type: "object"
    properties:
      Leader:
        type: "boolean"
        default: false
        example: true
      Reachability:
        $ref: "#/definitions/Reachability"
      Addr:
        description: |
          The IP address and port at which the manager is reachable.
        type: "string"
        example: "10.0.0.46:2377"

  Reachability:
    description: "Reachability represents the reachability of a node."
    type: "string"
    enum:
      - "unknown"
      - "unreachable"
      - "reachable"
    example: "reachable"

  SwarmSpec:
    description: "User modifiable swarm configuration."
    type: "object"
    properties:
      Name:
        description: "Name of the swarm."
        type: "string"
        example: "default"
      Labels:
        description: "User-defined key/value metadata."
        type: "object"
        additionalProperties:
          type: "string"
        example:
          com.example.corp.type: "production"
          com.example.corp.department: "engineering"
      Orchestration:
        description: "Orchestration configuration."
        type: "object"
        x-nullable: true
        properties:
          TaskHistoryRetentionLimit:
            description: |
              The number of historic tasks to keep per instance or node. If
              negative, never remove completed or failed tasks.
            type: "integer"
            format: "int64"
            example: 10
      Raft:
        description: "Raft configuration."
        type: "object"
        properties:
          SnapshotInterval:
            description: "The number of log entries between snapshots."
            type: "integer"
            format: "uint64"
            example: 10000
          KeepOldSnapshots:
            description: |
              The number of snapshots to keep beyond the current snapshot.
            type: "integer"
            format: "uint64"
          LogEntriesForSlowFollowers:
            description: |
              The number of log entries to keep around to sync up slow followers
              after a snapshot is created.
            type: "integer"
            format: "uint64"
            example: 500
          ElectionTick:
            description: |
              The number of ticks that a follower will wait for a message from
              the leader before becoming a candidate and starting an election.
              `ElectionTick` must be greater than `HeartbeatTick`.

              A tick currently defaults to one second, so these translate
              directly to seconds currently, but this is NOT guaranteed.
            type: "integer"
            example: 3
          HeartbeatTick:
            description: |
              The number of ticks between heartbeats. Every HeartbeatTick ticks,
              the leader will send a heartbeat to the followers.

              A tick currently defaults to one second, so these translate
              directly to seconds currently, but this is NOT guaranteed.
            type: "integer"
            example: 1
      Dispatcher:
        description: "Dispatcher configuration."
        type: "object"
        x-nullable: true
        properties:
          HeartbeatPeriod:
            description: |
              The delay for an agent to send a heartbeat to the dispatcher.
            type: "integer"
            format: "int64"
            example: 5000000000
      CAConfig:
        description: "CA configuration."
        type: "object"
        x-nullable: true
        properties:
          NodeCertExpiry:
            description: "The duration node certificates are issued for."
            type: "integer"
            format: "int64"
            example: 7776000000000000
          ExternalCAs:
            description: |
              Configuration for forwarding signing requests to an external
              certificate authority.
            type: "array"
            items:
              type: "object"
              properties:
                Protocol:
                  description: |
                    Protocol for communication with the external CA (currently
                    only `cfssl` is supported).
                  type: "string"
                  enum:
                    - "cfssl"
                  default: "cfssl"
                URL:
                  description: |
                    URL where certificate signing requests should be sent.
                  type: "string"
                Options:
                  description: |
                    An object with key/value pairs that are interpreted as
                    protocol-specific options for the external CA driver.
                  type: "object"
                  additionalProperties:
                    type: "string"
                CACert:
                  description: |
                    The root CA certificate (in PEM format) this external CA uses
                    to issue TLS certificates (assumed to be to the current swarm
                    root CA certificate if not provided).
                  type: "string"
          SigningCACert:
            description: |
              The desired signing CA certificate for all swarm node TLS leaf
              certificates, in PEM format.
            type: "string"
          SigningCAKey:
            description: |
              The desired signing CA key for all swarm node TLS leaf certificates,
              in PEM format.
            type: "string"
          ForceRotate:
            description: |
              An integer whose purpose is to force swarm to generate a new
              signing CA certificate and key, if none have been specified in
              `SigningCACert` and `SigningCAKey`
            format: "uint64"
            type: "integer"
      EncryptionConfig:
        description: "Parameters related to encryption-at-rest."
        type: "object"
        properties:
          AutoLockManagers:
            description: |
              If set, generate a key and use it to lock data stored on the
              managers.
            type: "boolean"
            example: false
      TaskDefaults:
        description: "Defaults for creating tasks in this cluster."
        type: "object"
        properties:
          LogDriver:
            description: |
              The log driver to use for tasks created in the orchestrator if
              unspecified by a service.

              Updating this value only affects new tasks. Existing tasks continue
              to use their previously configured log driver until recreated.
            type: "object"
            properties:
              Name:
                description: |
                  The log driver to use as a default for new tasks.
                type: "string"
                example: "json-file"
              Options:
                description: |
                  Driver-specific options for the selectd log driver, specified
                  as key/value pairs.
                type: "object"
                additionalProperties:
                  type: "string"
                example:
                  "max-file": "10"
                  "max-size": "100m"

  # The Swarm information for `GET /info`. It is the same as `GET /swarm`, but
  # without `JoinTokens`.
  ClusterInfo:
    description: |
      ClusterInfo represents information about the swarm as is returned by the
      "/info" endpoint. Join-tokens are not included.
    x-nullable: true
    type: "object"
    properties:
      ID:
        description: "The ID of the swarm."
        type: "string"
        example: "abajmipo7b4xz5ip2nrla6b11"
      Version:
        $ref: "#/definitions/ObjectVersion"
      CreatedAt:
        description: |
          Date and time at which the swarm was initialised in
          [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.
        type: "string"
        format: "dateTime"
        example: "2016-08-18T10:44:24.496525531Z"
      UpdatedAt:
        description: |
          Date and time at which the swarm was last updated in
          [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.
        type: "string"
        format: "dateTime"
        example: "2017-08-09T07:09:37.632105588Z"
      Spec:
        $ref: "#/definitions/SwarmSpec"
      TLSInfo:
        $ref: "#/definitions/TLSInfo"
      RootRotationInProgress:
        description: |
          Whether there is currently a root CA rotation in progress for the swarm
        type: "boolean"
        example: false
      DataPathPort:
        description: |
          DataPathPort specifies the data path port number for data traffic.
          Acceptable port range is 1024 to 49151.
          If no port is set or is set to 0, the default port (4789) is used.
        type: "integer"
        format: "uint32"
        default: 4789
        example: 4789
      DefaultAddrPool:
        description: |
          Default Address Pool specifies default subnet pools for global scope
          networks.
        type: "array"
        items:
          type: "string"
          format: "CIDR"
          example: ["10.10.0.0/16", "20.20.0.0/16"]
      SubnetSize:
        description: |
          SubnetSize specifies the subnet size of the networks created from the
          default subnet pool.
        type: "integer"
        format: "uint32"
        maximum: 29
        default: 24
        example: 24

  JoinTokens:
    description: |
      JoinTokens contains the tokens workers and managers need to join the swarm.
    type: "object"
    properties:
      Worker:
        description: |
          The token workers can use to join the swarm.
        type: "string"
        example: "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx"
      Manager:
        description: |
          The token managers can use to join the swarm.
        type: "string"
        example: "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2"

  Swarm:
    type: "object"
    allOf:
      - $ref: "#/definitions/ClusterInfo"
      - type: "object"
        properties:
          JoinTokens:
            $ref: "#/definitions/JoinTokens"

  TaskSpec:
    description: "User modifiable task configuration."
    type: "object"
    properties:
      PluginSpec:
        type: "object"
        description: |
          Plugin spec for the service.  *(Experimental release only.)*

          <p><br /></p>

          > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are
          > mutually exclusive. PluginSpec is only used when the Runtime field
          > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime
          > field is set to `attachment`.
        properties:
          Name:
            description: "The name or 'alias' to use for the plugin."
            type: "string"
          Remote:
            description: "The plugin image reference to use."
            type: "string"
          Disabled:
            description: "Disable the plugin once scheduled."
            type: "boolean"
          PluginPrivilege:
            type: "array"
            items:
              $ref: "#/definitions/PluginPrivilege"
      ContainerSpec:
        type: "object"
        description: |
          Container spec for the service.

          <p><br /></p>

          > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are
          > mutually exclusive. PluginSpec is only used when the Runtime field
          > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime
          > field is set to `attachment`.
        properties:
          Image:
            description: "The image name to use for the container"
            type: "string"
          Labels:
            description: "User-defined key/value data."
            type: "object"
            additionalProperties:
              type: "string"
          Command:
            description: "The command to be run in the image."
            type: "array"
            items:
              type: "string"
          Args:
            description: "Arguments to the command."
            type: "array"
            items:
              type: "string"
          Hostname:
            description: |
              The hostname to use for the container, as a valid
              [RFC 1123](https://tools.ietf.org/html/rfc1123) hostname.
            type: "string"
          Env:
            description: |
              A list of environment variables in the form `VAR=value`.
            type: "array"
            items:
              type: "string"
          Dir:
            description: "The working directory for commands to run in."
            type: "string"
          User:
            description: "The user inside the container."
            type: "string"
          Groups:
            type: "array"
            description: |
              A list of additional groups that the container process will run as.
            items:
              type: "string"
          Privileges:
            type: "object"
            description: "Security options for the container"
            properties:
              CredentialSpec:
                type: "object"
                description: "CredentialSpec for managed service account (Windows only)"
                properties:
                  Config:
                    type: "string"
                    example: "0bt9dmxjvjiqermk6xrop3ekq"
                    description: |
                      Load credential spec from a Swarm Config with the given ID.
                      The specified config must also be present in the Configs
                      field with the Runtime property set.

                      <p><br /></p>


                      > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,
                      > and `CredentialSpec.Config` are mutually exclusive.
                  File:
                    type: "string"
                    example: "spec.json"
                    description: |
                      Load credential spec from this file. The file is read by
                      the daemon, and must be present in the `CredentialSpecs`
                      subdirectory in the docker data directory, which defaults
                      to `C:\ProgramData\Docker\` on Windows.

                      For example, specifying `spec.json` loads
                      `C:\ProgramData\Docker\CredentialSpecs\spec.json`.

                      <p><br /></p>

                      > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,
                      > and `CredentialSpec.Config` are mutually exclusive.
                  Registry:
                    type: "string"
                    description: |
                      Load credential spec from this value in the Windows
                      registry. The specified registry value must be located in:

                      `HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\Containers\CredentialSpecs`

                      <p><br /></p>


                      > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,
                      > and `CredentialSpec.Config` are mutually exclusive.
              SELinuxContext:
                type: "object"
                description: "SELinux labels of the container"
                properties:
                  Disable:
                    type: "boolean"
                    description: "Disable SELinux"
                  User:
                    type: "string"
                    description: "SELinux user label"
                  Role:
                    type: "string"
                    description: "SELinux role label"
                  Type:
                    type: "string"
                    description: "SELinux type label"
                  Level:
                    type: "string"
                    description: "SELinux level label"
          TTY:
            description: "Whether a pseudo-TTY should be allocated."
            type: "boolean"
          OpenStdin:
            description: "Open `stdin`"
            type: "boolean"
          ReadOnly:
            description: "Mount the container's root filesystem as read only."
            type: "boolean"
          Mounts:
            description: |
              Specification for mounts to be added to containers created as part
              of the service.
            type: "array"
            items:
              $ref: "#/definitions/Mount"
          StopSignal:
            description: "Signal to stop the container."
            type: "string"
          StopGracePeriod:
            description: |
              Amount of time to wait for the container to terminate before
              forcefully killing it.
            type: "integer"
            format: "int64"
          HealthCheck:
            $ref: "#/definitions/HealthConfig"
          Hosts:
            type: "array"
            description: |
              A list of hostname/IP mappings to add to the container's `hosts`
              file. The format of extra hosts is specified in the
              [hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html)
              man page:

                  IP_address canonical_hostname [aliases...]
            items:
              type: "string"
          DNSConfig:
            description: |
              Specification for DNS related configurations in resolver configuration
              file (`resolv.conf`).
            type: "object"
            properties:
              Nameservers:
                description: "The IP addresses of the name servers."
                type: "array"
                items:
                  type: "string"
              Search:
                description: "A search list for host-name lookup."
                type: "array"
                items:
                  type: "string"
              Options:
                description: |
                  A list of internal resolver variables to be modified (e.g.,
                  `debug`, `ndots:3`, etc.).
                type: "array"
                items:
                  type: "string"
          Secrets:
            description: |
              Secrets contains references to zero or more secrets that will be
              exposed to the service.
            type: "array"
            items:
              type: "object"
              properties:
                File:
                  description: |
                    File represents a specific target that is backed by a file.
                  type: "object"
                  properties:
                    Name:
                      description: |
                        Name represents the final filename in the filesystem.
                      type: "string"
                    UID:
                      description: "UID represents the file UID."
                      type: "string"
                    GID:
                      description: "GID represents the file GID."
                      type: "string"
                    Mode:
                      description: "Mode represents the FileMode of the file."
                      type: "integer"
                      format: "uint32"
                SecretID:
                  description: |
                    SecretID represents the ID of the specific secret that we're
                    referencing.
                  type: "string"
                SecretName:
                  description: |
                    SecretName is the name of the secret that this references,
                    but this is just provided for lookup/display purposes. The
                    secret in the reference will be identified by its ID.
                  type: "string"
          Configs:
            description: |
              Configs contains references to zero or more configs that will be
              exposed to the service.
            type: "array"
            items:
              type: "object"
              properties:
                File:
                  description: |
                    File represents a specific target that is backed by a file.

                    <p><br /><p>

                    > **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive
                  type: "object"
                  properties:
                    Name:
                      description: |
                        Name represents the final filename in the filesystem.
                      type: "string"
                    UID:
                      description: "UID represents the file UID."
                      type: "string"
                    GID:
                      description: "GID represents the file GID."
                      type: "string"
                    Mode:
                      description: "Mode represents the FileMode of the file."
                      type: "integer"
                      format: "uint32"
                Runtime:
                  description: |
                    Runtime represents a target that is not mounted into the
                    container but is used by the task

                    <p><br /><p>

                    > **Note**: `Configs.File` and `Configs.Runtime` are mutually
                    > exclusive
                  type: "object"
                ConfigID:
                  description: |
                    ConfigID represents the ID of the specific config that we're
                    referencing.
                  type: "string"
                ConfigName:
                  description: |
                    ConfigName is the name of the config that this references,
                    but this is just provided for lookup/display purposes. The
                    config in the reference will be identified by its ID.
                  type: "string"
          Isolation:
            type: "string"
            description: |
              Isolation technology of the containers running the service.
              (Windows only)
            enum:
              - "default"
              - "process"
              - "hyperv"
          Init:
            description: |
              Run an init inside the container that forwards signals and reaps
              processes. This field is omitted if empty, and the default (as
              configured on the daemon) is used.
            type: "boolean"
            x-nullable: true
          Sysctls:
            description: |
              Set kernel namedspaced parameters (sysctls) in the container.
              The Sysctls option on services accepts the same sysctls as the
              are supported on containers. Note that while the same sysctls are
              supported, no guarantees or checks are made about their
              suitability for a clustered environment, and it's up to the user
              to determine whether a given sysctl will work properly in a
              Service.
            type: "object"
            additionalProperties:
              type: "string"
          # This option is not used by Windows containers
          CapabilityAdd:
            type: "array"
            description: |
              A list of kernel capabilities to add to the default set
              for the container.
            items:
              type: "string"
            example:
              - "CAP_NET_RAW"
              - "CAP_SYS_ADMIN"
              - "CAP_SYS_CHROOT"
              - "CAP_SYSLOG"
          CapabilityDrop:
            type: "array"
            description: |
              A list of kernel capabilities to drop from the default set
              for the container.
            items:
              type: "string"
            example:
              - "CAP_NET_RAW"
          Ulimits:
            description: |
              A list of resource limits to set in the container. For example: `{"Name": "nofile", "Soft": 1024, "Hard": 2048}`"
            type: "array"
            items:
              type: "object"
              properties:
                Name:
                  description: "Name of ulimit"
                  type: "string"
                Soft:
                  description: "Soft limit"
                  type: "integer"
                Hard:
                  description: "Hard limit"
                  type: "integer"
      NetworkAttachmentSpec:
        description: |
          Read-only spec type for non-swarm containers attached to swarm overlay
          networks.

          <p><br /></p>

          > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are
          > mutually exclusive. PluginSpec is only used when the Runtime field
          > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime
          > field is set to `attachment`.
        type: "object"
        properties:
          ContainerID:
            description: "ID of the container represented by this task"
            type: "string"
      Resources:
        description: |
          Resource requirements which apply to each individual container created
          as part of the service.
        type: "object"
        properties:
          Limits:
            description: "Define resources limits."
            $ref: "#/definitions/Limit"
          Reservations:
            description: "Define resources reservation."
            $ref: "#/definitions/ResourceObject"
      RestartPolicy:
        description: |
          Specification for the restart policy which applies to containers
          created as part of this service.
        type: "object"
        properties:
          Condition:
            description: "Condition for restart."
            type: "string"
            enum:
              - "none"
              - "on-failure"
              - "any"
          Delay:
            description: "Delay between restart attempts."
            type: "integer"
            format: "int64"
          MaxAttempts:
            description: |
              Maximum attempts to restart a given container before giving up
              (default value is 0, which is ignored).
            type: "integer"
            format: "int64"
            default: 0
          Window:
            description: |
              Windows is the time window used to evaluate the restart policy
              (default value is 0, which is unbounded).
            type: "integer"
            format: "int64"
            default: 0
      Placement:
        type: "object"
        properties:
          Constraints:
            description: |
              An array of constraint expressions to limit the set of nodes where
              a task can be scheduled. Constraint expressions can either use a
              _match_ (`==`) or _exclude_ (`!=`) rule. Multiple constraints find
              nodes that satisfy every expression (AND match). Constraints can
              match node or Docker Engine labels as follows:

              node attribute       | matches                        | example
              ---------------------|--------------------------------|-----------------------------------------------
              `node.id`            | Node ID                        | `node.id==2ivku8v2gvtg4`
              `node.hostname`      | Node hostname                  | `node.hostname!=node-2`
              `node.role`          | Node role (`manager`/`worker`) | `node.role==manager`
              `node.platform.os`   | Node operating system          | `node.platform.os==windows`
              `node.platform.arch` | Node architecture              | `node.platform.arch==x86_64`
              `node.labels`        | User-defined node labels       | `node.labels.security==high`
              `engine.labels`      | Docker Engine's labels         | `engine.labels.operatingsystem==ubuntu-14.04`

              `engine.labels` apply to Docker Engine labels like operating system,
              drivers, etc. Swarm administrators add `node.labels` for operational
              purposes by using the [`node update endpoint`](#operation/NodeUpdate).

            type: "array"
            items:
              type: "string"
            example:
              - "node.hostname!=node3.corp.example.com"
              - "node.role!=manager"
              - "node.labels.type==production"
              - "node.platform.os==linux"
              - "node.platform.arch==x86_64"
          Preferences:
            description: |
              Preferences provide a way to make the scheduler aware of factors
              such as topology. They are provided in order from highest to
              lowest precedence.
            type: "array"
            items:
              type: "object"
              properties:
                Spread:
                  type: "object"
                  properties:
                    SpreadDescriptor:
                      description: |
                        label descriptor, such as `engine.labels.az`.
                      type: "string"
            example:
              - Spread:
                  SpreadDescriptor: "node.labels.datacenter"
              - Spread:
                  SpreadDescriptor: "node.labels.rack"
          MaxReplicas:
            description: |
              Maximum number of replicas for per node (default value is 0, which
              is unlimited)
            type: "integer"
            format: "int64"
            default: 0
          Platforms:
            description: |
              Platforms stores all the platforms that the service's image can
              run on. This field is used in the platform filter for scheduling.
              If empty, then the platform filter is off, meaning there are no
              scheduling restrictions.
            type: "array"
            items:
              $ref: "#/definitions/Platform"
      ForceUpdate:
        description: |
          A counter that triggers an update even if no relevant parameters have
          been changed.
        type: "integer"
      Runtime:
        description: |
          Runtime is the type of runtime specified for the task executor.
        type: "string"
      Networks:
        description: "Specifies which networks the service should attach to."
        type: "array"
        items:
          $ref: "#/definitions/NetworkAttachmentConfig"
      LogDriver:
        description: |
          Specifies the log driver to use for tasks created from this spec. If
          not present, the default one for the swarm will be used, finally
          falling back to the engine default if not specified.
        type: "object"
        properties:
          Name:
            type: "string"
          Options:
            type: "object"
            additionalProperties:
              type: "string"

  TaskState:
    type: "string"
    enum:
      - "new"
      - "allocated"
      - "pending"
      - "assigned"
      - "accepted"
      - "preparing"
      - "ready"
      - "starting"
      - "running"
      - "complete"
      - "shutdown"
      - "failed"
      - "rejected"
      - "remove"
      - "orphaned"

  Task:
    type: "object"
    properties:
      ID:
        description: "The ID of the task."
        type: "string"
      Version:
        $ref: "#/definitions/ObjectVersion"
      CreatedAt:
        type: "string"
        format: "dateTime"
      UpdatedAt:
        type: "string"
        format: "dateTime"
      Name:
        description: "Name of the task."
        type: "string"
      Labels:
        description: "User-defined key/value metadata."
        type: "object"
        additionalProperties:
          type: "string"
      Spec:
        $ref: "#/definitions/TaskSpec"
      ServiceID:
        description: "The ID of the service this task is part of."
        type: "string"
      Slot:
        type: "integer"
      NodeID:
        description: "The ID of the node that this task is on."
        type: "string"
      AssignedGenericResources:
        $ref: "#/definitions/GenericResources"
      Status:
        type: "object"
        properties:
          Timestamp:
            type: "string"
            format: "dateTime"
          State:
            $ref: "#/definitions/TaskState"
          Message:
            type: "string"
          Err:
            type: "string"
          ContainerStatus:
            type: "object"
            properties:
              ContainerID:
                type: "string"
              PID:
                type: "integer"
              ExitCode:
                type: "integer"
      DesiredState:
        $ref: "#/definitions/TaskState"
      JobIteration:
        description: |
          If the Service this Task belongs to is a job-mode service, contains
          the JobIteration of the Service this Task was created for. Absent if
          the Task was created for a Replicated or Global Service.
        $ref: "#/definitions/ObjectVersion"
    example:
      ID: "0kzzo1i0y4jz6027t0k7aezc7"
      Version:
        Index: 71
      CreatedAt: "2016-06-07T21:07:31.171892745Z"
      UpdatedAt: "2016-06-07T21:07:31.376370513Z"
      Spec:
        ContainerSpec:
          Image: "redis"
        Resources:
          Limits: {}
          Reservations: {}
        RestartPolicy:
          Condition: "any"
          MaxAttempts: 0
        Placement: {}
      ServiceID: "9mnpnzenvg8p8tdbtq4wvbkcz"
      Slot: 1
      NodeID: "60gvrl6tm78dmak4yl7srz94v"
      Status:
        Timestamp: "2016-06-07T21:07:31.290032978Z"
        State: "running"
        Message: "started"
        ContainerStatus:
          ContainerID: "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035"
          PID: 677
      DesiredState: "running"
      NetworksAttachments:
        - Network:
            ID: "4qvuz4ko70xaltuqbt8956gd1"
            Version:
              Index: 18
            CreatedAt: "2016-06-07T20:31:11.912919752Z"
            UpdatedAt: "2016-06-07T21:07:29.955277358Z"
            Spec:
              Name: "ingress"
              Labels:
                com.docker.swarm.internal: "true"
              DriverConfiguration: {}
              IPAMOptions:
                Driver: {}
                Configs:
                  - Subnet: "10.255.0.0/16"
                    Gateway: "10.255.0.1"
            DriverState:
              Name: "overlay"
              Options:
                com.docker.network.driver.overlay.vxlanid_list: "256"
            IPAMOptions:
              Driver:
                Name: "default"
              Configs:
                - Subnet: "10.255.0.0/16"
                  Gateway: "10.255.0.1"
          Addresses:
            - "10.255.0.10/16"
      AssignedGenericResources:
        - DiscreteResourceSpec:
            Kind: "SSD"
            Value: 3
        - NamedResourceSpec:
            Kind: "GPU"
            Value: "UUID1"
        - NamedResourceSpec:
            Kind: "GPU"
            Value: "UUID2"

  ServiceSpec:
    description: "User modifiable configuration for a service."
    type: object
    properties:
      Name:
        description: "Name of the service."
        type: "string"
      Labels:
        description: "User-defined key/value metadata."
        type: "object"
        additionalProperties:
          type: "string"
      TaskTemplate:
        $ref: "#/definitions/TaskSpec"
      Mode:
        description: "Scheduling mode for the service."
        type: "object"
        properties:
          Replicated:
            type: "object"
            properties:
              Replicas:
                type: "integer"
                format: "int64"
          Global:
            type: "object"
          ReplicatedJob:
            description: |
              The mode used for services with a finite number of tasks that run
              to a completed state.
            type: "object"
            properties:
              MaxConcurrent:
                description: |
                  The maximum number of replicas to run simultaneously.
                type: "integer"
                format: "int64"
                default: 1
              TotalCompletions:
                description: |
                  The total number of replicas desired to reach the Completed
                  state. If unset, will default to the value of `MaxConcurrent`
                type: "integer"
                format: "int64"
          GlobalJob:
            description: |
              The mode used for services which run a task to the completed state
              on each valid node.
            type: "object"
      UpdateConfig:
        description: "Specification for the update strategy of the service."
        type: "object"
        properties:
          Parallelism:
            description: |
              Maximum number of tasks to be updated in one iteration (0 means
              unlimited parallelism).
            type: "integer"
            format: "int64"
          Delay:
            description: "Amount of time between updates, in nanoseconds."
            type: "integer"
            format: "int64"
          FailureAction:
            description: |
              Action to take if an updated task fails to run, or stops running
              during the update.
            type: "string"
            enum:
              - "continue"
              - "pause"
              - "rollback"
          Monitor:
            description: |
              Amount of time to monitor each updated task for failures, in
              nanoseconds.
            type: "integer"
            format: "int64"
          MaxFailureRatio:
            description: |
              The fraction of tasks that may fail during an update before the
              failure action is invoked, specified as a floating point number
              between 0 and 1.
            type: "number"
            default: 0
          Order:
            description: |
              The order of operations when rolling out an updated task. Either
              the old task is shut down before the new task is started, or the
              new task is started before the old task is shut down.
            type: "string"
            enum:
              - "stop-first"
              - "start-first"
      RollbackConfig:
        description: "Specification for the rollback strategy of the service."
        type: "object"
        properties:
          Parallelism:
            description: |
              Maximum number of tasks to be rolled back in one iteration (0 means
              unlimited parallelism).
            type: "integer"
            format: "int64"
          Delay:
            description: |
              Amount of time between rollback iterations, in nanoseconds.
            type: "integer"
            format: "int64"
          FailureAction:
            description: |
              Action to take if an rolled back task fails to run, or stops
              running during the rollback.
            type: "string"
            enum:
              - "continue"
              - "pause"
          Monitor:
            description: |
              Amount of time to monitor each rolled back task for failures, in
              nanoseconds.
            type: "integer"
            format: "int64"
          MaxFailureRatio:
            description: |
              The fraction of tasks that may fail during a rollback before the
              failure action is invoked, specified as a floating point number
              between 0 and 1.
            type: "number"
            default: 0
          Order:
            description: |
              The order of operations when rolling back a task. Either the old
              task is shut down before the new task is started, or the new task
              is started before the old task is shut down.
            type: "string"
            enum:
              - "stop-first"
              - "start-first"
      Networks:
        description: "Specifies which networks the service should attach to."
        type: "array"
        items:
          $ref: "#/definitions/NetworkAttachmentConfig"

      EndpointSpec:
        $ref: "#/definitions/EndpointSpec"

  EndpointPortConfig:
    type: "object"
    properties:
      Name:
        type: "string"
      Protocol:
        type: "string"
        enum:
          - "tcp"
          - "udp"
          - "sctp"
      TargetPort:
        description: "The port inside the container."
        type: "integer"
      PublishedPort:
        description: "The port on the swarm hosts."
        type: "integer"
      PublishMode:
        description: |
          The mode in which port is published.

          <p><br /></p>

          - "ingress" makes the target port accessible on every node,
            regardless of whether there is a task for the service running on
            that node or not.
          - "host" bypasses the routing mesh and publish the port directly on
            the swarm node where that service is running.

        type: "string"
        enum:
          - "ingress"
          - "host"
        default: "ingress"
        example: "ingress"

  EndpointSpec:
    description: "Properties that can be configured to access and load balance a service."
    type: "object"
    properties:
      Mode:
        description: |
          The mode of resolution to use for internal load balancing between tasks.
        type: "string"
        enum:
          - "vip"
          - "dnsrr"
        default: "vip"
      Ports:
        description: |
          List of exposed ports that this service is accessible on from the
          outside. Ports can only be provided if `vip` resolution mode is used.
        type: "array"
        items:
          $ref: "#/definitions/EndpointPortConfig"

  Service:
    type: "object"
    properties:
      ID:
        type: "string"
      Version:
        $ref: "#/definitions/ObjectVersion"
      CreatedAt:
        type: "string"
        format: "dateTime"
      UpdatedAt:
        type: "string"
        format: "dateTime"
      Spec:
        $ref: "#/definitions/ServiceSpec"
      Endpoint:
        type: "object"
        properties:
          Spec:
            $ref: "#/definitions/EndpointSpec"
          Ports:
            type: "array"
            items:
              $ref: "#/definitions/EndpointPortConfig"
          VirtualIPs:
            type: "array"
            items:
              type: "object"
              properties:
                NetworkID:
                  type: "string"
                Addr:
                  type: "string"
      UpdateStatus:
        description: "The status of a service update."
        type: "object"
        properties:
          State:
            type: "string"
            enum:
              - "updating"
              - "paused"
              - "completed"
          StartedAt:
            type: "string"
            format: "dateTime"
          CompletedAt:
            type: "string"
            format: "dateTime"
          Message:
            type: "string"
      ServiceStatus:
        description: |
          The status of the service's tasks. Provided only when requested as
          part of a ServiceList operation.
        type: "object"
        properties:
          RunningTasks:
            description: |
              The number of tasks for the service currently in the Running state.
            type: "integer"
            format: "uint64"
            example: 7
          DesiredTasks:
            description: |
              The number of tasks for the service desired to be running.
              For replicated services, this is the replica count from the
              service spec. For global services, this is computed by taking
              count of all tasks for the service with a Desired State other
              than Shutdown.
            type: "integer"
            format: "uint64"
            example: 10
          CompletedTasks:
            description: |
              The number of tasks for a job that are in the Completed state.
              This field must be cross-referenced with the service type, as the
              value of 0 may mean the service is not in a job mode, or it may
              mean the job-mode service has no tasks yet Completed.
            type: "integer"
            format: "uint64"
      JobStatus:
        description: |
          The status of the service when it is in one of ReplicatedJob or
          GlobalJob modes. Absent on Replicated and Global mode services. The
          JobIteration is an ObjectVersion, but unlike the Service's version,
          does not need to be sent with an update request.
        type: "object"
        properties:
          JobIteration:
            description: |
              JobIteration is a value increased each time a Job is executed,
              successfully or otherwise. "Executed", in this case, means the
              job as a whole has been started, not that an individual Task has
              been launched. A job is "Executed" when its ServiceSpec is
              updated. JobIteration can be used to disambiguate Tasks belonging
              to different executions of a job.  Though JobIteration will
              increase with each subsequent execution, it may not necessarily
              increase by 1, and so JobIteration should not be used to
            $ref: "#/definitions/ObjectVersion"
          LastExecution:
            description: |
              The last time, as observed by the server, that this job was
              started.
            type: "string"
            format: "dateTime"
    example:
      ID: "9mnpnzenvg8p8tdbtq4wvbkcz"
      Version:
        Index: 19
      CreatedAt: "2016-06-07T21:05:51.880065305Z"
      UpdatedAt: "2016-06-07T21:07:29.962229872Z"
      Spec:
        Name: "hopeful_cori"
        TaskTemplate:
          ContainerSpec:
            Image: "redis"
          Resources:
            Limits: {}
            Reservations: {}
          RestartPolicy:
            Condition: "any"
            MaxAttempts: 0
          Placement: {}
          ForceUpdate: 0
        Mode:
          Replicated:
            Replicas: 1
        UpdateConfig:
          Parallelism: 1
          Delay: 1000000000
          FailureAction: "pause"
          Monitor: 15000000000
          MaxFailureRatio: 0.15
        RollbackConfig:
          Parallelism: 1
          Delay: 1000000000
          FailureAction: "pause"
          Monitor: 15000000000
          MaxFailureRatio: 0.15
        EndpointSpec:
          Mode: "vip"
          Ports:
            -
              Protocol: "tcp"
              TargetPort: 6379
              PublishedPort: 30001
      Endpoint:
        Spec:
          Mode: "vip"
          Ports:
            -
              Protocol: "tcp"
              TargetPort: 6379
              PublishedPort: 30001
        Ports:
          -
            Protocol: "tcp"
            TargetPort: 6379
            PublishedPort: 30001
        VirtualIPs:
          -
            NetworkID: "4qvuz4ko70xaltuqbt8956gd1"
            Addr: "10.255.0.2/16"
          -
            NetworkID: "4qvuz4ko70xaltuqbt8956gd1"
            Addr: "10.255.0.3/16"

  ImageDeleteResponseItem:
    type: "object"
    properties:
      Untagged:
        description: "The image ID of an image that was untagged"
        type: "string"
      Deleted:
        description: "The image ID of an image that was deleted"
        type: "string"

  ServiceUpdateResponse:
    type: "object"
    properties:
      Warnings:
        description: "Optional warning messages"
        type: "array"
        items:
          type: "string"
    example:
      Warning: "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found"

  ContainerSummary:
    type: "object"
    properties:
      Id:
        description: "The ID of this container"
        type: "string"
        x-go-name: "ID"
      Names:
        description: "The names that this container has been given"
        type: "array"
        items:
          type: "string"
      Image:
        description: "The name of the image used when creating this container"
        type: "string"
      ImageID:
        description: "The ID of the image that this container was created from"
        type: "string"
      Command:
        description: "Command to run when starting the container"
        type: "string"
      Created:
        description: "When the container was created"
        type: "integer"
        format: "int64"
      Ports:
        description: "The ports exposed by this container"
        type: "array"
        items:
          $ref: "#/definitions/Port"
      SizeRw:
        description: "The size of files that have been created or changed by this container"
        type: "integer"
        format: "int64"
      SizeRootFs:
        description: "The total size of all the files in this container"
        type: "integer"
        format: "int64"
      Labels:
        description: "User-defined key/value metadata."
        type: "object"
        additionalProperties:
          type: "string"
      State:
        description: "The state of this container (e.g. `Exited`)"
        type: "string"
      Status:
        description: "Additional human-readable status of this container (e.g. `Exit 0`)"
        type: "string"
      HostConfig:
        type: "object"
        properties:
          NetworkMode:
            type: "string"
      NetworkSettings:
        description: "A summary of the container's network settings"
        type: "object"
        properties:
          Networks:
            type: "object"
            additionalProperties:
              $ref: "#/definitions/EndpointSettings"
      Mounts:
        type: "array"
        items:
          $ref: "#/definitions/MountPoint"

  Driver:
    description: "Driver represents a driver (network, logging, secrets)."
    type: "object"
    required: [Name]
    properties:
      Name:
        description: "Name of the driver."
        type: "string"
        x-nullable: false
        example: "some-driver"
      Options:
        description: "Key/value map of driver-specific options."
        type: "object"
        x-nullable: false
        additionalProperties:
          type: "string"
        example:
          OptionA: "value for driver-specific option A"
          OptionB: "value for driver-specific option B"

  SecretSpec:
    type: "object"
    properties:
      Name:
        description: "User-defined name of the secret."
        type: "string"
      Labels:
        description: "User-defined key/value metadata."
        type: "object"
        additionalProperties:
          type: "string"
        example:
          com.example.some-label: "some-value"
          com.example.some-other-label: "some-other-value"
      Data:
        description: |
          Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5))
          data to store as secret.

          This field is only used to _create_ a secret, and is not returned by
          other endpoints.
        type: "string"
        example: ""
      Driver:
        description: |
          Name of the secrets driver used to fetch the secret's value from an
          external secret store.
        $ref: "#/definitions/Driver"
      Templating:
        description: |
          Templating driver, if applicable

          Templating controls whether and how to evaluate the config payload as
          a template. If no driver is set, no templating is used.
        $ref: "#/definitions/Driver"

  Secret:
    type: "object"
    properties:
      ID:
        type: "string"
        example: "blt1owaxmitz71s9v5zh81zun"
      Version:
        $ref: "#/definitions/ObjectVersion"
      CreatedAt:
        type: "string"
        format: "dateTime"
        example: "2017-07-20T13:55:28.678958722Z"
      UpdatedAt:
        type: "string"
        format: "dateTime"
        example: "2017-07-20T13:55:28.678958722Z"
      Spec:
        $ref: "#/definitions/SecretSpec"

  ConfigSpec:
    type: "object"
    properties:
      Name:
        description: "User-defined name of the config."
        type: "string"
      Labels:
        description: "User-defined key/value metadata."
        type: "object"
        additionalProperties:
          type: "string"
      Data:
        description: |
          Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5))
          config data.
        type: "string"
      Templating:
        description: |
          Templating driver, if applicable

          Templating controls whether and how to evaluate the config payload as
          a template. If no driver is set, no templating is used.
        $ref: "#/definitions/Driver"

  Config:
    type: "object"
    properties:
      ID:
        type: "string"
      Version:
        $ref: "#/definitions/ObjectVersion"
      CreatedAt:
        type: "string"
        format: "dateTime"
      UpdatedAt:
        type: "string"
        format: "dateTime"
      Spec:
        $ref: "#/definitions/ConfigSpec"

  ContainerState:
    description: |
      ContainerState stores container's running state. It's part of ContainerJSONBase
      and will be returned by the "inspect" command.
    type: "object"
    x-nullable: true
    properties:
      Status:
        description: |
          String representation of the container state. Can be one of "created",
          "running", "paused", "restarting", "removing", "exited", or "dead".
        type: "string"
        enum: ["created", "running", "paused", "restarting", "removing", "exited", "dead"]
        example: "running"
      Running:
        description: |
          Whether this container is running.

          Note that a running container can be _paused_. The `Running` and `Paused`
          booleans are not mutually exclusive:

          When pausing a container (on Linux), the freezer cgroup is used to suspend
          all processes in the container. Freezing the process requires the process to
          be running. As a result, paused containers are both `Running` _and_ `Paused`.

          Use the `Status` field instead to determine if a container's state is "running".
        type: "boolean"
        example: true
      Paused:
        description: "Whether this container is paused."
        type: "boolean"
        example: false
      Restarting:
        description: "Whether this container is restarting."
        type: "boolean"
        example: false
      OOMKilled:
        description: |
          Whether this container has been killed because it ran out of memory.
        type: "boolean"
        example: false
      Dead:
        type: "boolean"
        example: false
      Pid:
        description: "The process ID of this container"
        type: "integer"
        example: 1234
      ExitCode:
        description: "The last exit code of this container"
        type: "integer"
        example: 0
      Error:
        type: "string"
      StartedAt:
        description: "The time when this container was last started."
        type: "string"
        example: "2020-01-06T09:06:59.461876391Z"
      FinishedAt:
        description: "The time when this container last exited."
        type: "string"
        example: "2020-01-06T09:07:59.461876391Z"
      Health:
        $ref: "#/definitions/Health"

  ContainerCreateResponse:
    description: "OK response to ContainerCreate operation"
    type: "object"
    title: "ContainerCreateResponse"
    x-go-name: "CreateResponse"
    required: [Id, Warnings]
    properties:
      Id:
        description: "The ID of the created container"
        type: "string"
        x-nullable: false
        example: "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743"
      Warnings:
        description: "Warnings encountered when creating the container"
        type: "array"
        x-nullable: false
        items:
          type: "string"
        example: []

  ContainerWaitResponse:
    description: "OK response to ContainerWait operation"
    type: "object"
    x-go-name: "WaitResponse"
    title: "ContainerWaitResponse"
    required: [StatusCode]
    properties:
      StatusCode:
        description: "Exit code of the container"
        type: "integer"
        format: "int64"
        x-nullable: false
      Error:
        $ref: "#/definitions/ContainerWaitExitError"

  ContainerWaitExitError:
    description: "container waiting error, if any"
    type: "object"
    x-go-name: "WaitExitError"
    properties:
      Message:
        description: "Details of an error"
        type: "string"

  SystemVersion:
    type: "object"
    description: |
      Response of Engine API: GET "/version"
    properties:
      Platform:
        type: "object"
        required: [Name]
        properties:
          Name:
            type: "string"
      Components:
        type: "array"
        description: |
          Information about system components
        items:
          type: "object"
          x-go-name: ComponentVersion
          required: [Name, Version]
          properties:
            Name:
              description: |
                Name of the component
              type: "string"
              example: "Engine"
            Version:
              description: |
                Version of the component
              type: "string"
              x-nullable: false
              example: "19.03.12"
            Details:
              description: |
                Key/value pairs of strings with additional information about the
                component. These values are intended for informational purposes
                only, and their content is not defined, and not part of the API
                specification.

                These messages can be printed by the client as information to the user.
              type: "object"
              x-nullable: true
      Version:
        description: "The version of the daemon"
        type: "string"
        example: "19.03.12"
      ApiVersion:
        description: |
          The default (and highest) API version that is supported by the daemon
        type: "string"
        example: "1.40"
      MinAPIVersion:
        description: |
          The minimum API version that is supported by the daemon
        type: "string"
        example: "1.12"
      GitCommit:
        description: |
          The Git commit of the source code that was used to build the daemon
        type: "string"
        example: "48a66213fe"
      GoVersion:
        description: |
          The version Go used to compile the daemon, and the version of the Go
          runtime in use.
        type: "string"
        example: "go1.13.14"
      Os:
        description: |
          The operating system that the daemon is running on ("linux" or "windows")
        type: "string"
        example: "linux"
      Arch:
        description: |
          The architecture that the daemon is running on
        type: "string"
        example: "amd64"
      KernelVersion:
        description: |
          The kernel version (`uname -r`) that the daemon is running on.

          This field is omitted when empty.
        type: "string"
        example: "4.19.76-linuxkit"
      Experimental:
        description: |
          Indicates if the daemon is started with experimental features enabled.

          This field is omitted when empty / false.
        type: "boolean"
        example: true
      BuildTime:
        description: |
          The date and time that the daemon was compiled.
        type: "string"
        example: "2020-06-22T15:49:27.000000000+00:00"

  SystemInfo:
    type: "object"
    properties:
      ID:
        description: |
          Unique identifier of the daemon.

          <p><br /></p>

          > **Note**: The format of the ID itself is not part of the API, and
          > should not be considered stable.
        type: "string"
        example: "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS"
      Containers:
        description: "Total number of containers on the host."
        type: "integer"
        example: 14
      ContainersRunning:
        description: |
          Number of containers with status `"running"`.
        type: "integer"
        example: 3
      ContainersPaused:
        description: |
          Number of containers with status `"paused"`.
        type: "integer"
        example: 1
      ContainersStopped:
        description: |
          Number of containers with status `"stopped"`.
        type: "integer"
        example: 10
      Images:
        description: |
          Total number of images on the host.

          Both _tagged_ and _untagged_ (dangling) images are counted.
        type: "integer"
        example: 508
      Driver:
        description: "Name of the storage driver in use."
        type: "string"
        example: "overlay2"
      DriverStatus:
        description: |
          Information specific to the storage driver, provided as
          "label" / "value" pairs.

          This information is provided by the storage driver, and formatted
          in a way consistent with the output of `docker info` on the command
          line.

          <p><br /></p>

          > **Note**: The information returned in this field, including the
          > formatting of values and labels, should not be considered stable,
          > and may change without notice.
        type: "array"
        items:
          type: "array"
          items:
            type: "string"
        example:
          - ["Backing Filesystem", "extfs"]
          - ["Supports d_type", "true"]
          - ["Native Overlay Diff", "true"]
      DockerRootDir:
        description: |
          Root directory of persistent Docker state.

          Defaults to `/var/lib/docker` on Linux, and `C:\ProgramData\docker`
          on Windows.
        type: "string"
        example: "/var/lib/docker"
      Plugins:
        $ref: "#/definitions/PluginsInfo"
      MemoryLimit:
        description: "Indicates if the host has memory limit support enabled."
        type: "boolean"
        example: true
      SwapLimit:
        description: "Indicates if the host has memory swap limit support enabled."
        type: "boolean"
        example: true
      KernelMemoryTCP:
        description: |
          Indicates if the host has kernel memory TCP limit support enabled. This
          field is omitted if not supported.

          Kernel memory TCP limits are not supported when using cgroups v2, which
          does not support the corresponding `memory.kmem.tcp.limit_in_bytes` cgroup.
        type: "boolean"
        example: true
      CpuCfsPeriod:
        description: |
          Indicates if CPU CFS(Completely Fair Scheduler) period is supported by
          the host.
        type: "boolean"
        example: true
      CpuCfsQuota:
        description: |
          Indicates if CPU CFS(Completely Fair Scheduler) quota is supported by
          the host.
        type: "boolean"
        example: true
      CPUShares:
        description: |
          Indicates if CPU Shares limiting is supported by the host.
        type: "boolean"
        example: true
      CPUSet:
        description: |
          Indicates if CPUsets (cpuset.cpus, cpuset.mems) are supported by the host.

          See [cpuset(7)](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt)
        type: "boolean"
        example: true
      PidsLimit:
        description: "Indicates if the host kernel has PID limit support enabled."
        type: "boolean"
        example: true
      OomKillDisable:
        description: "Indicates if OOM killer disable is supported on the host."
        type: "boolean"
      IPv4Forwarding:
        description: "Indicates IPv4 forwarding is enabled."
        type: "boolean"
        example: true
      BridgeNfIptables:
        description: "Indicates if `bridge-nf-call-iptables` is available on the host."
        type: "boolean"
        example: true
      BridgeNfIp6tables:
        description: "Indicates if `bridge-nf-call-ip6tables` is available on the host."
        type: "boolean"
        example: true
      Debug:
        description: |
          Indicates if the daemon is running in debug-mode / with debug-level
          logging enabled.
        type: "boolean"
        example: true
      NFd:
        description: |
          The total number of file Descriptors in use by the daemon process.

          This information is only returned if debug-mode is enabled.
        type: "integer"
        example: 64
      NGoroutines:
        description: |
          The  number of goroutines that currently exist.

          This information is only returned if debug-mode is enabled.
        type: "integer"
        example: 174
      SystemTime:
        description: |
          Current system-time in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)
          format with nano-seconds.
        type: "string"
        example: "2017-08-08T20:28:29.06202363Z"
      LoggingDriver:
        description: |
          The logging driver to use as a default for new containers.
        type: "string"
      CgroupDriver:
        description: |
          The driver to use for managing cgroups.
        type: "string"
        enum: ["cgroupfs", "systemd", "none"]
        default: "cgroupfs"
        example: "cgroupfs"
      CgroupVersion:
        description: |
          The version of the cgroup.
        type: "string"
        enum: ["1", "2"]
        default: "1"
        example: "1"
      NEventsListener:
        description: "Number of event listeners subscribed."
        type: "integer"
        example: 30
      KernelVersion:
        description: |
          Kernel version of the host.

          On Linux, this information obtained from `uname`. On Windows this
          information is queried from the <kbd>HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\</kbd>
          registry value, for example _"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)"_.
        type: "string"
        example: "4.9.38-moby"
      OperatingSystem:
        description: |
          Name of the host's operating system, for example: "Ubuntu 16.04.2 LTS"
          or "Windows Server 2016 Datacenter"
        type: "string"
        example: "Alpine Linux v3.5"
      OSVersion:
        description: |
          Version of the host's operating system

          <p><br /></p>

          > **Note**: The information returned in this field, including its
          > very existence, and the formatting of values, should not be considered
          > stable, and may change without notice.
        type: "string"
        example: "16.04"
      OSType:
        description: |
          Generic type of the operating system of the host, as returned by the
          Go runtime (`GOOS`).

          Currently returned values are "linux" and "windows". A full list of
          possible values can be found in the [Go documentation](https://golang.org/doc/install/source#environment).
        type: "string"
        example: "linux"
      Architecture:
        description: |
          Hardware architecture of the host, as returned by the Go runtime
          (`GOARCH`).

          A full list of possible values can be found in the [Go documentation](https://golang.org/doc/install/source#environment).
        type: "string"
        example: "x86_64"
      NCPU:
        description: |
          The number of logical CPUs usable by the daemon.

          The number of available CPUs is checked by querying the operating
          system when the daemon starts. Changes to operating system CPU
          allocation after the daemon is started are not reflected.
        type: "integer"
        example: 4
      MemTotal:
        description: |
          Total amount of physical memory available on the host, in bytes.
        type: "integer"
        format: "int64"
        example: 2095882240

      IndexServerAddress:
        description: |
          Address / URL of the index server that is used for image search,
          and as a default for user authentication for Docker Hub and Docker Cloud.
        default: "https://index.docker.io/v1/"
        type: "string"
        example: "https://index.docker.io/v1/"
      RegistryConfig:
        $ref: "#/definitions/RegistryServiceConfig"
      GenericResources:
        $ref: "#/definitions/GenericResources"
      HttpProxy:
        description: |
          HTTP-proxy configured for the daemon. This value is obtained from the
          [`HTTP_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.
          Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL
          are masked in the API response.

          Containers do not automatically inherit this configuration.
        type: "string"
        example: "http://xxxxx:xxxxx@proxy.corp.example.com:8080"
      HttpsProxy:
        description: |
          HTTPS-proxy configured for the daemon. This value is obtained from the
          [`HTTPS_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.
          Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL
          are masked in the API response.

          Containers do not automatically inherit this configuration.
        type: "string"
        example: "https://xxxxx:xxxxx@proxy.corp.example.com:4443"
      NoProxy:
        description: |
          Comma-separated list of domain extensions for which no proxy should be
          used. This value is obtained from the [`NO_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html)
          environment variable.

          Containers do not automatically inherit this configuration.
        type: "string"
        example: "*.local, 169.254/16"
      Name:
        description: "Hostname of the host."
        type: "string"
        example: "node5.corp.example.com"
      Labels:
        description: |
          User-defined labels (key/value metadata) as set on the daemon.

          <p><br /></p>

          > **Note**: When part of a Swarm, nodes can both have _daemon_ labels,
          > set through the daemon configuration, and _node_ labels, set from a
          > manager node in the Swarm. Node labels are not included in this
          > field. Node labels can be retrieved using the `/nodes/(id)` endpoint
          > on a manager node in the Swarm.
        type: "array"
        items:
          type: "string"
        example: ["storage=ssd", "production"]
      ExperimentalBuild:
        description: |
          Indicates if experimental features are enabled on the daemon.
        type: "boolean"
        example: true
      ServerVersion:
        description: |
          Version string of the daemon.

          > **Note**: the [standalone Swarm API](https://docs.docker.com/swarm/swarm-api/)
          > returns the Swarm version instead of the daemon  version, for example
          > `swarm/1.2.8`.
        type: "string"
        example: "17.06.0-ce"
      ClusterStore:
        description: |
          URL of the distributed storage backend.


          The storage backend is used for multihost networking (to store
          network and endpoint information) and by the node discovery mechanism.

          <p><br /></p>

          > **Deprecated**: This field is only propagated when using standalone Swarm
          > mode, and overlay networking using an external k/v store. Overlay
          > networks with Swarm mode enabled use the built-in raft store, and
          > this field will be empty.
        type: "string"
        example: "consul://consul.corp.example.com:8600/some/path"
      ClusterAdvertise:
        description: |
          The network endpoint that the Engine advertises for the purpose of
          node discovery. ClusterAdvertise is a `host:port` combination on which
          the daemon is reachable by other hosts.

          <p><br /></p>

          > **Deprecated**: This field is only propagated when using standalone Swarm
          > mode, and overlay networking using an external k/v store. Overlay
          > networks with Swarm mode enabled use the built-in raft store, and
          > this field will be empty.
        type: "string"
        example: "node5.corp.example.com:8000"
      Runtimes:
        description: |
          List of [OCI compliant](https://github.com/opencontainers/runtime-spec)
          runtimes configured on the daemon. Keys hold the "name" used to
          reference the runtime.

          The Docker daemon relies on an OCI compliant runtime (invoked via the
          `containerd` daemon) as its interface to the Linux kernel namespaces,
          cgroups, and SELinux.

          The default runtime is `runc`, and automatically configured. Additional
          runtimes can be configured by the user and will be listed here.
        type: "object"
        additionalProperties:
          $ref: "#/definitions/Runtime"
        default:
          runc:
            path: "runc"
        example:
          runc:
            path: "runc"
          runc-master:
            path: "/go/bin/runc"
          custom:
            path: "/usr/local/bin/my-oci-runtime"
            runtimeArgs: ["--debug", "--systemd-cgroup=false"]
      DefaultRuntime:
        description: |
          Name of the default OCI runtime that is used when starting containers.

          The default can be overridden per-container at create time.
        type: "string"
        default: "runc"
        example: "runc"
      Swarm:
        $ref: "#/definitions/SwarmInfo"
      LiveRestoreEnabled:
        description: |
          Indicates if live restore is enabled.

          If enabled, containers are kept running when the daemon is shutdown
          or upon daemon start if running containers are detected.
        type: "boolean"
        default: false
        example: false
      Isolation:
        description: |
          Represents the isolation technology to use as a default for containers.
          The supported values are platform-specific.

          If no isolation value is specified on daemon start, on Windows client,
          the default is `hyperv`, and on Windows server, the default is `process`.

          This option is currently not used on other platforms.
        default: "default"
        type: "string"
        enum:
          - "default"
          - "hyperv"
          - "process"
      InitBinary:
        description: |
          Name and, optional, path of the `docker-init` binary.

          If the path is omitted, the daemon searches the host's `$PATH` for the
          binary and uses the first result.
        type: "string"
        example: "docker-init"
      ContainerdCommit:
        $ref: "#/definitions/Commit"
      RuncCommit:
        $ref: "#/definitions/Commit"
      InitCommit:
        $ref: "#/definitions/Commit"
      SecurityOptions:
        description: |
          List of security features that are enabled on the daemon, such as
          apparmor, seccomp, SELinux, user-namespaces (userns), and rootless.

          Additional configuration options for each security feature may
          be present, and are included as a comma-separated list of key/value
          pairs.
        type: "array"
        items:
          type: "string"
        example:
          - "name=apparmor"
          - "name=seccomp,profile=default"
          - "name=selinux"
          - "name=userns"
          - "name=rootless"
      ProductLicense:
        description: |
          Reports a summary of the product license on the daemon.

          If a commercial license has been applied to the daemon, information
          such as number of nodes, and expiration are included.
        type: "string"
        example: "Community Engine"
      DefaultAddressPools:
        description: |
          List of custom default address pools for local networks, which can be
          specified in the daemon.json file or dockerd option.

          Example: a Base "10.10.0.0/16" with Size 24 will define the set of 256
          10.10.[0-255].0/24 address pools.
        type: "array"
        items:
          type: "object"
          properties:
            Base:
              description: "The network address in CIDR format"
              type: "string"
              example: "10.10.0.0/16"
            Size:
              description: "The network pool size"
              type: "integer"
              example: "24"
      Warnings:
        description: |
          List of warnings / informational messages about missing features, or
          issues related to the daemon configuration.

          These messages can be printed by the client as information to the user.
        type: "array"
        items:
          type: "string"
        example:
          - "WARNING: No memory limit support"
          - "WARNING: bridge-nf-call-iptables is disabled"
          - "WARNING: bridge-nf-call-ip6tables is disabled"


  # PluginsInfo is a temp struct holding Plugins name
  # registered with docker daemon. It is used by Info struct
  PluginsInfo:
    description: |
      Available plugins per type.

      <p><br /></p>

      > **Note**: Only unmanaged (V1) plugins are included in this list.
      > V1 plugins are "lazily" loaded, and are not returned in this list
      > if there is no resource using the plugin.
    type: "object"
    properties:
      Volume:
        description: "Names of available volume-drivers, and network-driver plugins."
        type: "array"
        items:
          type: "string"
        example: ["local"]
      Network:
        description: "Names of available network-drivers, and network-driver plugins."
        type: "array"
        items:
          type: "string"
        example: ["bridge", "host", "ipvlan", "macvlan", "null", "overlay"]
      Authorization:
        description: "Names of available authorization plugins."
        type: "array"
        items:
          type: "string"
        example: ["img-authz-plugin", "hbm"]
      Log:
        description: "Names of available logging-drivers, and logging-driver plugins."
        type: "array"
        items:
          type: "string"
        example: ["awslogs", "fluentd", "gcplogs", "gelf", "journald", "json-file", "logentries", "splunk", "syslog"]


  RegistryServiceConfig:
    description: |
      RegistryServiceConfig stores daemon registry services configuration.
    type: "object"
    x-nullable: true
    properties:
      AllowNondistributableArtifactsCIDRs:
        description: |
          List of IP ranges to which nondistributable artifacts can be pushed,
          using the CIDR syntax [RFC 4632](https://tools.ietf.org/html/4632).

          Some images (for example, Windows base images) contain artifacts
          whose distribution is restricted by license. When these images are
          pushed to a registry, restricted artifacts are not included.

          This configuration override this behavior, and enables the daemon to
          push nondistributable artifacts to all registries whose resolved IP
          address is within the subnet described by the CIDR syntax.

          This option is useful when pushing images containing
          nondistributable artifacts to a registry on an air-gapped network so
          hosts on that network can pull the images without connecting to
          another server.

          > **Warning**: Nondistributable artifacts typically have restrictions
          > on how and where they can be distributed and shared. Only use this
          > feature to push artifacts to private registries and ensure that you
          > are in compliance with any terms that cover redistributing
          > nondistributable artifacts.

        type: "array"
        items:
          type: "string"
        example: ["::1/128", "127.0.0.0/8"]
      AllowNondistributableArtifactsHostnames:
        description: |
          List of registry hostnames to which nondistributable artifacts can be
          pushed, using the format `<hostname>[:<port>]` or `<IP address>[:<port>]`.

          Some images (for example, Windows base images) contain artifacts
          whose distribution is restricted by license. When these images are
          pushed to a registry, restricted artifacts are not included.

          This configuration override this behavior for the specified
          registries.

          This option is useful when pushing images containing
          nondistributable artifacts to a registry on an air-gapped network so
          hosts on that network can pull the images without connecting to
          another server.

          > **Warning**: Nondistributable artifacts typically have restrictions
          > on how and where they can be distributed and shared. Only use this
          > feature to push artifacts to private registries and ensure that you
          > are in compliance with any terms that cover redistributing
          > nondistributable artifacts.
        type: "array"
        items:
          type: "string"
        example: ["registry.internal.corp.example.com:3000", "[2001:db8:a0b:12f0::1]:443"]
      InsecureRegistryCIDRs:
        description: |
          List of IP ranges of insecure registries, using the CIDR syntax
          ([RFC 4632](https://tools.ietf.org/html/4632)). Insecure registries
          accept un-encrypted (HTTP) and/or untrusted (HTTPS with certificates
          from unknown CAs) communication.

          By default, local registries (`127.0.0.0/8`) are configured as
          insecure. All other registries are secure. Communicating with an
          insecure registry is not possible if the daemon assumes that registry
          is secure.

          This configuration override this behavior, insecure communication with
          registries whose resolved IP address is within the subnet described by
          the CIDR syntax.

          Registries can also be marked insecure by hostname. Those registries
          are listed under `IndexConfigs` and have their `Secure` field set to
          `false`.

          > **Warning**: Using this option can be useful when running a local
          > registry, but introduces security vulnerabilities. This option
          > should therefore ONLY be used for testing purposes. For increased
          > security, users should add their CA to their system's list of trusted
          > CAs instead of enabling this option.
        type: "array"
        items:
          type: "string"
        example: ["::1/128", "127.0.0.0/8"]
      IndexConfigs:
        type: "object"
        additionalProperties:
          $ref: "#/definitions/IndexInfo"
        example:
          "127.0.0.1:5000":
            "Name": "127.0.0.1:5000"
            "Mirrors": []
            "Secure": false
            "Official": false
          "[2001:db8:a0b:12f0::1]:80":
            "Name": "[2001:db8:a0b:12f0::1]:80"
            "Mirrors": []
            "Secure": false
            "Official": false
          "docker.io":
            Name: "docker.io"
            Mirrors: ["https://hub-mirror.corp.example.com:5000/"]
            Secure: true
            Official: true
          "registry.internal.corp.example.com:3000":
            Name: "registry.internal.corp.example.com:3000"
            Mirrors: []
            Secure: false
            Official: false
      Mirrors:
        description: |
          List of registry URLs that act as a mirror for the official
          (`docker.io`) registry.

        type: "array"
        items:
          type: "string"
        example:
          - "https://hub-mirror.corp.example.com:5000/"
          - "https://[2001:db8:a0b:12f0::1]/"

  IndexInfo:
    description:
      IndexInfo contains information about a registry.
    type: "object"
    x-nullable: true
    properties:
      Name:
        description: |
          Name of the registry, such as "docker.io".
        type: "string"
        example: "docker.io"
      Mirrors:
        description: |
          List of mirrors, expressed as URIs.
        type: "array"
        items:
          type: "string"
        example:
          - "https://hub-mirror.corp.example.com:5000/"
          - "https://registry-2.docker.io/"
          - "https://registry-3.docker.io/"
      Secure:
        description: |
          Indicates if the registry is part of the list of insecure
          registries.

          If `false`, the registry is insecure. Insecure registries accept
          un-encrypted (HTTP) and/or untrusted (HTTPS with certificates from
          unknown CAs) communication.

          > **Warning**: Insecure registries can be useful when running a local
          > registry. However, because its use creates security vulnerabilities
          > it should ONLY be enabled for testing purposes. For increased
          > security, users should add their CA to their system's list of
          > trusted CAs instead of enabling this option.
        type: "boolean"
        example: true
      Official:
        description: |
          Indicates whether this is an official registry (i.e., Docker Hub / docker.io)
        type: "boolean"
        example: true

  Runtime:
    description: |
      Runtime describes an [OCI compliant](https://github.com/opencontainers/runtime-spec)
      runtime.

      The runtime is invoked by the daemon via the `containerd` daemon. OCI
      runtimes act as an interface to the Linux kernel namespaces, cgroups,
      and SELinux.
    type: "object"
    properties:
      path:
        description: |
          Name and, optional, path, of the OCI executable binary.

          If the path is omitted, the daemon searches the host's `$PATH` for the
          binary and uses the first result.
        type: "string"
        example: "/usr/local/bin/my-oci-runtime"
      runtimeArgs:
        description: |
          List of command-line arguments to pass to the runtime when invoked.
        type: "array"
        x-nullable: true
        items:
          type: "string"
        example: ["--debug", "--systemd-cgroup=false"]

  Commit:
    description: |
      Commit holds the Git-commit (SHA1) that a binary was built from, as
      reported in the version-string of external tools, such as `containerd`,
      or `runC`.
    type: "object"
    properties:
      ID:
        description: "Actual commit ID of external tool."
        type: "string"
        example: "cfb82a876ecc11b5ca0977d1733adbe58599088a"
      Expected:
        description: |
          Commit ID of external tool expected by dockerd as set at build time.
        type: "string"
        example: "2d41c047c83e09a6d61d464906feb2a2f3c52aa4"

  SwarmInfo:
    description: |
      Represents generic information about swarm.
    type: "object"
    properties:
      NodeID:
        description: "Unique identifier of for this node in the swarm."
        type: "string"
        default: ""
        example: "k67qz4598weg5unwwffg6z1m1"
      NodeAddr:
        description: |
          IP address at which this node can be reached by other nodes in the
          swarm.
        type: "string"
        default: ""
        example: "10.0.0.46"
      LocalNodeState:
        $ref: "#/definitions/LocalNodeState"
      ControlAvailable:
        type: "boolean"
        default: false
        example: true
      Error:
        type: "string"
        default: ""
      RemoteManagers:
        description: |
          List of ID's and addresses of other managers in the swarm.
        type: "array"
        default: null
        x-nullable: true
        items:
          $ref: "#/definitions/PeerNode"
        example:
          - NodeID: "71izy0goik036k48jg985xnds"
            Addr: "10.0.0.158:2377"
          - NodeID: "79y6h1o4gv8n120drcprv5nmc"
            Addr: "10.0.0.159:2377"
          - NodeID: "k67qz4598weg5unwwffg6z1m1"
            Addr: "10.0.0.46:2377"
      Nodes:
        description: "Total number of nodes in the swarm."
        type: "integer"
        x-nullable: true
        example: 4
      Managers:
        description: "Total number of managers in the swarm."
        type: "integer"
        x-nullable: true
        example: 3
      Cluster:
        $ref: "#/definitions/ClusterInfo"

  LocalNodeState:
    description: "Current local status of this node."
    type: "string"
    default: ""
    enum:
      - ""
      - "inactive"
      - "pending"
      - "active"
      - "error"
      - "locked"
    example: "active"

  PeerNode:
    description: "Represents a peer-node in the swarm"
    type: "object"
    properties:
      NodeID:
        description: "Unique identifier of for this node in the swarm."
        type: "string"
      Addr:
        description: |
          IP address and ports at which this node can be reached.
        type: "string"

  NetworkAttachmentConfig:
    description: |
      Specifies how a service should be attached to a particular network.
    type: "object"
    properties:
      Target:
        description: |
          The target network for attachment. Must be a network name or ID.
        type: "string"
      Aliases:
        description: |
          Discoverable alternate names for the service on this network.
        type: "array"
        items:
          type: "string"
      DriverOpts:
        description: |
          Driver attachment options for the network target.
        type: "object"
        additionalProperties:
          type: "string"

  EventActor:
    description: |
      Actor describes something that generates events, like a container, network,
      or a volume.
    type: "object"
    properties:
      ID:
        description: "The ID of the object emitting the event"
        type: "string"
        example: "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743"
      Attributes:
        description: |
          Various key/value attributes of the object, depending on its type.
        type: "object"
        additionalProperties:
          type: "string"
        example:
          com.example.some-label: "some-label-value"
          image: "alpine:latest"
          name: "my-container"

  EventMessage:
    description: |
      EventMessage represents the information an event contains.
    type: "object"
    title: "SystemEventsResponse"
    properties:
      Type:
        description: "The type of object emitting the event"
        type: "string"
        enum: ["builder", "config", "container", "daemon", "image", "network", "node", "plugin", "secret", "service", "volume"]
        example: "container"
      Action:
        description: "The type of event"
        type: "string"
        example: "create"
      Actor:
        $ref: "#/definitions/EventActor"
      scope:
        description: |
          Scope of the event. Engine events are `local` scope. Cluster (Swarm)
          events are `swarm` scope.
        type: "string"
        enum: ["local", "swarm"]
      time:
        description: "Timestamp of event"
        type: "integer"
        format: "int64"
        example: 1629574695
      timeNano:
        description: "Timestamp of event, with nanosecond accuracy"
        type: "integer"
        format: "int64"
        example: 1629574695515050031

  OCIDescriptor:
    type: "object"
    x-go-name: Descriptor
    description: |
      A descriptor struct containing digest, media type, and size, as defined in
      the [OCI Content Descriptors Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/descriptor.md).
    properties:
      mediaType:
        description: |
          The media type of the object this schema refers to.
        type: "string"
        example: "application/vnd.docker.distribution.manifest.v2+json"
      digest:
        description: |
          The digest of the targeted content.
        type: "string"
        example: "sha256:c0537ff6a5218ef531ece93d4984efc99bbf3f7497c0a7726c88e2bb7584dc96"
      size:
        description: |
          The size in bytes of the blob.
        type: "integer"
        format: "int64"
        example: 3987495
        # TODO Not yet including these fields for now, as they are nil / omitted in our response.
        # urls:
        #   description: |
        #     List of URLs from which this object MAY be downloaded.
        #   type: "array"
        #   items:
        #     type: "string"
        #     format: "uri"
        # annotations:
        #   description: |
        #     Arbitrary metadata relating to the targeted content.
        #   type: "object"
        #   additionalProperties:
        #     type: "string"
        # platform:
        #   $ref: "#/definitions/OCIPlatform"

  OCIPlatform:
    type: "object"
    x-go-name: Platform
    description: |
      Describes the platform which the image in the manifest runs on, as defined
      in the [OCI Image Index Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/image-index.md).
    properties:
      architecture:
        description: |
          The CPU architecture, for example `amd64` or `ppc64`.
        type: "string"
        example: "arm"
      os:
        description: |
          The operating system, for example `linux` or `windows`.
        type: "string"
        example: "windows"
      os.version:
        description: |
          Optional field specifying the operating system version, for example on
          Windows `10.0.19041.1165`.
        type: "string"
        example: "10.0.19041.1165"
      os.features:
        description: |
          Optional field specifying an array of strings, each listing a required
          OS feature (for example on Windows `win32k`).
        type: "array"
        items:
          type: "string"
        example:
          - "win32k"
      variant:
        description: |
          Optional field specifying a variant of the CPU, for example `v7` to
          specify ARMv7 when architecture is `arm`.
        type: "string"
        example: "v7"

  DistributionInspect:
    type: "object"
    x-go-name: DistributionInspect
    title: "DistributionInspectResponse"
    required: [Descriptor, Platforms]
    description: |
      Describes the result obtained from contacting the registry to retrieve
      image metadata.
    properties:
      Descriptor:
        $ref: "#/definitions/OCIDescriptor"
      Platforms:
        type: "array"
        description: |
          An array containing all platforms supported by the image.
        items:
          $ref: "#/definitions/OCIPlatform"

  ClusterVolume:
    type: "object"
    description: |
      Options and information specific to, and only present on, Swarm CSI
      cluster volumes.
    properties:
      ID:
        type: "string"
        description: |
          The Swarm ID of this volume. Because cluster volumes are Swarm
          objects, they have an ID, unlike non-cluster volumes. This ID can
          be used to refer to the Volume instead of the name.
      Version:
        $ref: "#/definitions/ObjectVersion"
      CreatedAt:
        type: "string"
        format: "dateTime"
      UpdatedAt:
        type: "string"
        format: "dateTime"
      Spec:
        $ref: "#/definitions/ClusterVolumeSpec"
      Info:
        type: "object"
        description: |
          Information about the global status of the volume.
        properties:
          CapacityBytes:
            type: "integer"
            format: "int64"
            description: |
              The capacity of the volume in bytes. A value of 0 indicates that
              the capacity is unknown.
          VolumeContext:
            type: "object"
            description: |
              A map of strings to strings returned from the storage plugin when
              the volume is created.
            additionalProperties:
              type: "string"
          VolumeID:
            type: "string"
            description: |
              The ID of the volume as returned by the CSI storage plugin. This
              is distinct from the volume's ID as provided by Docker. This ID
              is never used by the user when communicating with Docker to refer
              to this volume. If the ID is blank, then the Volume has not been
              successfully created in the plugin yet.
          AccessibleTopology:
            type: "array"
            description: |
              The topology this volume is actually accessible from.
            items:
              $ref: "#/definitions/Topology"
      PublishStatus:
        type: "array"
        description: |
          The status of the volume as it pertains to its publishing and use on
          specific nodes
        items:
          type: "object"
          properties:
            NodeID:
              type: "string"
              description: |
                The ID of the Swarm node the volume is published on.
            State:
              type: "string"
              description: |
                The published state of the volume.
                * `pending-publish` The volume should be published to this node, but the call to the controller plugin to do so has not yet been successfully completed.
                * `published` The volume is published successfully to the node.
                * `pending-node-unpublish` The volume should be unpublished from the node, and the manager is awaiting confirmation from the worker that it has done so.
                * `pending-controller-unpublish` The volume is successfully unpublished from the node, but has not yet been successfully unpublished on the controller.
              enum:
                - "pending-publish"
                - "published"
                - "pending-node-unpublish"
                - "pending-controller-unpublish"
            PublishContext:
              type: "object"
              description: |
                A map of strings to strings returned by the CSI controller
                plugin when a volume is published.
              additionalProperties:
                type: "string"

  ClusterVolumeSpec:
    type: "object"
    description: |
      Cluster-specific options used to create the volume.
    properties:
      Group:
        type: "string"
        description: |
          Group defines the volume group of this volume. Volumes belonging to
          the same group can be referred to by group name when creating
          Services.  Referring to a volume by group instructs Swarm to treat
          volumes in that group interchangeably for the purpose of scheduling.
          Volumes with an empty string for a group technically all belong to
          the same, emptystring group.
      AccessMode:
        type: "object"
        description: |
          Defines how the volume is used by tasks.
        properties:
          Scope:
            type: "string"
            description: |
              The set of nodes this volume can be used on at one time.
              - `single` The volume may only be scheduled to one node at a time.
              - `multi` the volume may be scheduled to any supported number of nodes at a time.
            default: "single"
            enum: ["single", "multi"]
            x-nullable: false
          Sharing:
            type: "string"
            description: |
              The number and way that different tasks can use this volume
              at one time.
              - `none` The volume may only be used by one task at a time.
              - `readonly` The volume may be used by any number of tasks, but they all must mount the volume as readonly
              - `onewriter` The volume may be used by any number of tasks, but only one may mount it as read/write.
              - `all` The volume may have any number of readers and writers.
            default: "none"
            enum: ["none", "readonly", "onewriter", "all"]
            x-nullable: false
          MountVolume:
            type: "object"
            description: |
              Options for using this volume as a Mount-type volume.

                  Either MountVolume or BlockVolume, but not both, must be
                  present.
                properties:
                  FsType:
                    type: "string"
                    description: |
                      Specifies the filesystem type for the mount volume.
                      Optional.
                  MountFlags:
                    type: "array"
                    description: |
                      Flags to pass when mounting the volume. Optional.
                    items:
                      type: "string"
              BlockVolume:
                type: "object"
                description: |
                  Options for using this volume as a Block-type volume.
                  Intentionally empty.
          Secrets:
            type: "array"
            description: |
              Swarm Secrets that are passed to the CSI storage plugin when
              operating on this volume.
            items:
              type: "object"
              description: |
                One cluster volume secret entry. Defines a key-value pair that
                is passed to the plugin.
              properties:
                Key:
                  type: "string"
                  description: |
                    Key is the name of the key of the key-value pair passed to
                    the plugin.
                Secret:
                  type: "string"
                  description: |
                    Secret is the swarm Secret object from which to read data.
                    This can be a Secret name or ID. The Secret data is
                    retrieved by swarm and used as the value of the key-value
                    pair passed to the plugin.
          AccessibilityRequirements:
            type: "object"
            description: |
              Requirements for the accessible topology of the volume. These
              fields are optional. For an in-depth description of what these
              fields mean, see the CSI specification.
            properties:
              Requisite:
                type: "array"
                description: |
                  A list of required topologies, at least one of which the
                  volume must be accessible from.
                items:
                  $ref: "#/definitions/Topology"
              Preferred:
                type: "array"
                description: |
                  A list of topologies that the volume should attempt to be
                  provisioned in.
                items:
                  $ref: "#/definitions/Topology"
          CapacityRange:
            type: "object"
            description: |
              The desired capacity that the volume should be created with. If
              empty, the plugin will decide the capacity.
            properties:
              RequiredBytes:
                type: "integer"
                format: "int64"
                description: |
                  The volume must be at least this big. The value of 0
                  indicates an unspecified minimum
              LimitBytes:
                type: "integer"
                format: "int64"
                description: |
                  The volume must not be bigger than this. The value of 0
                  indicates an unspecified maximum.
          Availability:
            type: "string"
            description: |
              The availability of the volume for use in tasks.
              - `active` The volume is fully available for scheduling on the cluster
              - `pause` No new workloads should use the volume, but existing workloads are not stopped.
              - `drain` All workloads using this volume should be stopped and rescheduled, and no new ones should be started.
            default: "active"
            x-nullable: false
            enum:
              - "active"
              - "pause"
              - "drain"

  Topology:
    description: |
      A map of topological domains to topological segments. For in depth
      details, see documentation for the Topology object in the CSI
      specification.
    type: "object"
    additionalProperties:
      type: "string"

paths:
  /containers/json:
    get:
      summary: "List containers"
      description: |
        Returns a list of containers. For details on the format, see the
        [inspect endpoint](#operation/ContainerInspect).

        Note that it uses a different, smaller representation of a container
        than inspecting a single container. For example, the list of linked
        containers is not propagated .
      operationId: "ContainerList"
      produces:
        - "application/json"
      parameters:
        - name: "all"
          in: "query"
          description: |
            Return all containers. By default, only running containers are shown.
          type: "boolean"
          default: false
        - name: "limit"
          in: "query"
          description: |
            Return this number of most recently created containers, including
            non-running ones.
          type: "integer"
        - name: "size"
          in: "query"
          description: |
            Return the size of container as fields `SizeRw` and `SizeRootFs`.
          type: "boolean"
          default: false
        - name: "filters"
          in: "query"
          description: |
            Filters to process on the container list, encoded as JSON (a
            `map[string][]string`). For example, `{"status": ["paused"]}` will
            only return paused containers.

            Available filters:

            - `ancestor`=(`<image-name>[:<tag>]`, `<image id>`, or `<image@digest>`)
            - `before`=(`<container id>` or `<container name>`)
            - `expose`=(`<port>[/<proto>]`|`<startport-endport>/[<proto>]`)
            - `exited=<int>` containers with exit code of `<int>`
            - `health`=(`starting`|`healthy`|`unhealthy`|`none`)
            - `id=<ID>` a container's ID
            - `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only)
            - `is-task=`(`true`|`false`)
            - `label=key` or `label="key=value"` of a container label
            - `name=<name>` a container's name
            - `network`=(`<network id>` or `<network name>`)
            - `publish`=(`<port>[/<proto>]`|`<startport-endport>/[<proto>]`)
            - `since`=(`<container id>` or `<container name>`)
            - `status=`(`created`|`restarting`|`running`|`removing`|`paused`|`exited`|`dead`)
            - `volume`=(`<volume name>` or `<mount point destination>`)
          type: "string"
      responses:
        200:
          description: "no error"
          schema:
            type: "array"
            items:
              $ref: "#/definitions/ContainerSummary"
          examples:
            application/json:
              - Id: "8dfafdbc3a40"
                Names:
                  - "/boring_feynman"
                Image: "ubuntu:latest"
                ImageID: "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82"
                Command: "echo 1"
                Created: 1367854155
                State: "Exited"
                Status: "Exit 0"
                Ports:
                  - PrivatePort: 2222
                    PublicPort: 3333
                    Type: "tcp"
                Labels:
                  com.example.vendor: "Acme"
                  com.example.license: "GPL"
                  com.example.version: "1.0"
                SizeRw: 12288
                SizeRootFs: 0
                HostConfig:
                  NetworkMode: "default"
                NetworkSettings:
                  Networks:
                    bridge:
                      NetworkID: "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812"
                      EndpointID: "2cdc4edb1ded3631c81f57966563e5c8525b81121bb3706a9a9a3ae102711f3f"
                      Gateway: "172.17.0.1"
                      IPAddress: "172.17.0.2"
                      IPPrefixLen: 16
                      IPv6Gateway: ""
                      GlobalIPv6Address: ""
                      GlobalIPv6PrefixLen: 0
                      MacAddress: "02:42:ac:11:00:02"
                Mounts:
                  - Name: "fac362...80535"
                    Source: "/data"
                    Destination: "/data"
                    Driver: "local"
                    Mode: "ro,Z"
                    RW: false
                    Propagation: ""
              - Id: "9cd87474be90"
                Names:
                  - "/coolName"
                Image: "ubuntu:latest"
                ImageID: "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82"
                Command: "echo 222222"
                Created: 1367854155
                State: "Exited"
                Status: "Exit 0"
                Ports: []
                Labels: {}
                SizeRw: 12288
                SizeRootFs: 0
                HostConfig:
                  NetworkMode: "default"
                NetworkSettings:
                  Networks:
                    bridge:
                      NetworkID: "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812"
                      EndpointID: "88eaed7b37b38c2a3f0c4bc796494fdf51b270c2d22656412a2ca5d559a64d7a"
                      Gateway: "172.17.0.1"
                      IPAddress: "172.17.0.8"
                      IPPrefixLen: 16
                      IPv6Gateway: ""
                      GlobalIPv6Address: ""
                      GlobalIPv6PrefixLen: 0
                      MacAddress: "02:42:ac:11:00:08"
                Mounts: []
              - Id: "3176a2479c92"
                Names:
                  - "/sleepy_dog"
                Image: "ubuntu:latest"
                ImageID: "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82"
                Command: "echo 3333333333333333"
                Created: 1367854154
                State: "Exited"
                Status: "Exit 0"
                Ports: []
                Labels: {}
                SizeRw: 12288
                SizeRootFs: 0
                HostConfig:
                  NetworkMode: "default"
                NetworkSettings:
                  Networks:
                    bridge:
                      NetworkID: "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812"
                      EndpointID: "8b27c041c30326d59cd6e6f510d4f8d1d570a228466f956edf7815508f78e30d"
                      Gateway: "172.17.0.1"
                      IPAddress: "172.17.0.6"
                      IPPrefixLen: 16
                      IPv6Gateway: ""
                      GlobalIPv6Address: ""
                      GlobalIPv6PrefixLen: 0
                      MacAddress: "02:42:ac:11:00:06"
                Mounts: []
              - Id: "4cb07b47f9fb"
                Names:
                  - "/running_cat"
                Image: "ubuntu:latest"
                ImageID: "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82"
                Command: "echo 444444444444444444444444444444444"
                Created: 1367854152
                State: "Exited"
                Status: "Exit 0"
                Ports: []
                Labels: {}
                SizeRw: 12288
                SizeRootFs: 0
                HostConfig:
                  NetworkMode: "default"
                NetworkSettings:
                  Networks:
                    bridge:
                      NetworkID: "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812"
                      EndpointID: "d91c7b2f0644403d7ef3095985ea0e2370325cd2332ff3a3225c4247328e66e9"
                      Gateway: "172.17.0.1"
                      IPAddress: "172.17.0.5"
                      IPPrefixLen: 16
                      IPv6Gateway: ""
                      GlobalIPv6Address: ""
                      GlobalIPv6PrefixLen: 0
                      MacAddress: "02:42:ac:11:00:05"
                Mounts: []
        400:
          description: "bad parameter"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      tags: ["Container"]
  /containers/create:
    post:
      summary: "Create a container"
      operationId: "ContainerCreate"
      consumes:
        - "application/json"
        - "application/octet-stream"
      produces:
        - "application/json"
      parameters:
        - name: "name"
          in: "query"
          description: |
            Assign the specified name to the container. Must match
            `/?[a-zA-Z0-9][a-zA-Z0-9_.-]+`.
          type: "string"
          pattern: "^/?[a-zA-Z0-9][a-zA-Z0-9_.-]+$"
        - name: "platform"
          in: "query"
          description: |
            Platform in the format `os[/arch[/variant]]` used for image lookup.

            When specified, the daemon checks if the requested image is present
            in the local image cache with the given OS and Architecture, and
            otherwise returns a `404` status.

            If the option is not set, the host's native OS and Architecture are
            used to look up the image in the image cache. However, if no platform
            is passed and the given image does exist in the local image cache,
            but its OS or architecture does not match, the container is created
            with the available image, and a warning is added to the `Warnings`
            field in the response, for example;

                WARNING: The requested image's platform (linux/arm64/v8) does not
                         match the detected host platform (linux/amd64) and no
                         specific platform was requested

          type: "string"
          default: ""
        - name: "body"
          in: "body"
          description: "Container to create"
          schema:
            allOf:
              - $ref: "#/definitions/ContainerConfig"
              - type: "object"
                properties:
                  HostConfig:
                    $ref: "#/definitions/HostConfig"
                  NetworkingConfig:
                    $ref: "#/definitions/NetworkingConfig"
            example:
              Hostname: ""
              Domainname: ""
              User: ""
              AttachStdin: false
              AttachStdout: true
              AttachStderr: true
              Tty: false
              OpenStdin: false
              StdinOnce: false
              Env:
                - "FOO=bar"
                - "BAZ=quux"
              Cmd:
                - "date"
              Entrypoint: ""
              Image: "ubuntu"
              Labels:
                com.example.vendor: "Acme"
                com.example.license: "GPL"
                com.example.version: "1.0"
              Volumes:
                /volumes/data: {}
              WorkingDir: ""
              NetworkDisabled: false
              MacAddress: "12:34:56:78:9a:bc"
              ExposedPorts:
                22/tcp: {}
              StopSignal: "SIGTERM"
              StopTimeout: 10
              HostConfig:
                Binds:
                  - "/tmp:/tmp"
                Links:
                  - "redis3:redis"
                Memory: 0
                MemorySwap: 0
                MemoryReservation: 0
                NanoCpus: 500000
                CpuPercent: 80
                CpuShares: 512
                CpuPeriod: 100000
                CpuRealtimePeriod: 1000000
                CpuRealtimeRuntime: 10000
                CpuQuota: 50000
                CpusetCpus: "0,1"
                CpusetMems: "0,1"
                MaximumIOps: 0
                MaximumIOBps: 0
                BlkioWeight: 300
                BlkioWeightDevice:
                  - {}
                BlkioDeviceReadBps:
                  - {}
                BlkioDeviceReadIOps:
                  - {}
                BlkioDeviceWriteBps:
                  - {}
                BlkioDeviceWriteIOps:
                  - {}
                DeviceRequests:
                  - Driver: "nvidia"
                    Count: -1
                    DeviceIDs": ["0", "1", "GPU-fef8089b-4820-abfc-e83e-94318197576e"]
                    Capabilities: [["gpu", "nvidia", "compute"]]
                    Options:
                      property1: "string"
                      property2: "string"
                MemorySwappiness: 60
                OomKillDisable: false
                OomScoreAdj: 500
                PidMode: ""
                PidsLimit: 0
                PortBindings:
                  22/tcp:
                    - HostPort: "11022"
                PublishAllPorts: false
                Privileged: false
                ReadonlyRootfs: false
                Dns:
                  - "8.8.8.8"
                DnsOptions:
                  - ""
                DnsSearch:
                  - ""
                VolumesFrom:
                  - "parent"
                  - "other:ro"
                CapAdd:
                  - "NET_ADMIN"
                CapDrop:
                  - "MKNOD"
                GroupAdd:
                  - "newgroup"
                RestartPolicy:
                  Name: ""
                  MaximumRetryCount: 0
                AutoRemove: true
                NetworkMode: "bridge"
                Devices: []
                Ulimits:
                  - {}
                LogConfig:
                  Type: "json-file"
                  Config: {}
                SecurityOpt: []
                StorageOpt: {}
                CgroupParent: ""
                VolumeDriver: ""
                ShmSize: 67108864
              NetworkingConfig:
                EndpointsConfig:
                  isolated_nw:
                    IPAMConfig:
                      IPv4Address: "172.20.30.33"
                      IPv6Address: "2001:db8:abcd::3033"
                      LinkLocalIPs:
                        - "169.254.34.68"
                        - "fe80::3468"
                    Links:
                      - "container_1"
                      - "container_2"
                    Aliases:
                      - "server_x"
                      - "server_y"

          required: true
      responses:
        201:
          description: "Container created successfully"
          schema:
            $ref: "#/definitions/ContainerCreateResponse"
        400:
          description: "bad parameter"
          schema:
            $ref: "#/definitions/ErrorResponse"
        404:
          description: "no such image"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such image: c2ada9df5af8"
        409:
          description: "conflict"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      tags: ["Container"]
  /containers/{id}/json:
    get:
      summary: "Inspect a container"
      description: "Return low-level information about a container."
      operationId: "ContainerInspect"
      produces:
        - "application/json"
      responses:
        200:
          description: "no error"
          schema:
            type: "object"
            title: "ContainerInspectResponse"
            properties:
              Id:
                description: "The ID of the container"
                type: "string"
              Created:
                description: "The time the container was created"
                type: "string"
              Path:
                description: "The path to the command being run"
                type: "string"
              Args:
                description: "The arguments to the command being run"
                type: "array"
                items:
                  type: "string"
              State:
                $ref: "#/definitions/ContainerState"
              Image:
                description: "The container's image ID"
                type: "string"
              ResolvConfPath:
                type: "string"
              HostnamePath:
                type: "string"
              HostsPath:
                type: "string"
              LogPath:
                type: "string"
              Name:
                type: "string"
              RestartCount:
                type: "integer"
              Driver:
                type: "string"
              Platform:
                type: "string"
              MountLabel:
                type: "string"
              ProcessLabel:
                type: "string"
              AppArmorProfile:
                type: "string"
              ExecIDs:
                description: "IDs of exec instances that are running in the container."
                type: "array"
                items:
                  type: "string"
                x-nullable: true
              HostConfig:
                $ref: "#/definitions/HostConfig"
              GraphDriver:
                $ref: "#/definitions/GraphDriverData"
              SizeRw:
                description: |
                  The size of files that have been created or changed by this
                  container.
                type: "integer"
                format: "int64"
              SizeRootFs:
                description: "The total size of all the files in this container."
                type: "integer"
                format: "int64"
              Mounts:
                type: "array"
                items:
                  $ref: "#/definitions/MountPoint"
              Config:
                $ref: "#/definitions/ContainerConfig"
              NetworkSettings:
                $ref: "#/definitions/NetworkSettings"
          examples:
            application/json:
              AppArmorProfile: ""
              Args:
                - "-c"
                - "exit 9"
              Config:
                AttachStderr: true
                AttachStdin: false
                AttachStdout: true
                Cmd:
                  - "/bin/sh"
                  - "-c"
                  - "exit 9"
                Domainname: ""
                Env:
                  - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
                Healthcheck:
                  Test: ["CMD-SHELL", "exit 0"]
                Hostname: "ba033ac44011"
                Image: "ubuntu"
                Labels:
                  com.example.vendor: "Acme"
                  com.example.license: "GPL"
                  com.example.version: "1.0"
                MacAddress: ""
                NetworkDisabled: false
                OpenStdin: false
                StdinOnce: false
                Tty: false
                User: ""
                Volumes:
                  /volumes/data: {}
                WorkingDir: ""
                StopSignal: "SIGTERM"
                StopTimeout: 10
              Created: "2015-01-06T15:47:31.485331387Z"
              Driver: "devicemapper"
              ExecIDs:
                - "b35395de42bc8abd327f9dd65d913b9ba28c74d2f0734eeeae84fa1c616a0fca"
                - "3fc1232e5cd20c8de182ed81178503dc6437f4e7ef12b52cc5e8de020652f1c4"
              HostConfig:
                MaximumIOps: 0
                MaximumIOBps: 0
                BlkioWeight: 0
                BlkioWeightDevice:
                  - {}
                BlkioDeviceReadBps:
                  - {}
                BlkioDeviceWriteBps:
                  - {}
                BlkioDeviceReadIOps:
                  - {}
                BlkioDeviceWriteIOps:
                  - {}
                ContainerIDFile: ""
                CpusetCpus: ""
                CpusetMems: ""
                CpuPercent: 80
                CpuShares: 0
                CpuPeriod: 100000
                CpuRealtimePeriod: 1000000
                CpuRealtimeRuntime: 10000
                Devices: []
                DeviceRequests:
                  - Driver: "nvidia"
                    Count: -1
                    DeviceIDs": ["0", "1", "GPU-fef8089b-4820-abfc-e83e-94318197576e"]
                    Capabilities: [["gpu", "nvidia", "compute"]]
                    Options:
                      property1: "string"
                      property2: "string"
                IpcMode: ""
                Memory: 0
                MemorySwap: 0
                MemoryReservation: 0
                OomKillDisable: false
                OomScoreAdj: 500
                NetworkMode: "bridge"
                PidMode: ""
                PortBindings: {}
                Privileged: false
                ReadonlyRootfs: false
                PublishAllPorts: false
                RestartPolicy:
                  MaximumRetryCount: 2
                  Name: "on-failure"
                LogConfig:
                  Type: "json-file"
                Sysctls:
                  net.ipv4.ip_forward: "1"
                Ulimits:
                  - {}
                VolumeDriver: ""
                ShmSize: 67108864
              HostnamePath: "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hostname"
              HostsPath: "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hosts"
              LogPath: "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log"
              Id: "ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39"
              Image: "04c5d3b7b0656168630d3ba35d8889bd0e9caafcaeb3004d2bfbc47e7c5d35d2"
              MountLabel: ""
              Name: "/boring_euclid"
              NetworkSettings:
                Bridge: ""
                SandboxID: ""
                HairpinMode: false
                LinkLocalIPv6Address: ""
                LinkLocalIPv6PrefixLen: 0
                SandboxKey: ""
                EndpointID: ""
                Gateway: ""
                GlobalIPv6Address: ""
                GlobalIPv6PrefixLen: 0
                IPAddress: ""
                IPPrefixLen: 0
                IPv6Gateway: ""
                MacAddress: ""
                Networks:
                  bridge:
                    NetworkID: "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812"
                    EndpointID: "7587b82f0dada3656fda26588aee72630c6fab1536d36e394b2bfbcf898c971d"
                    Gateway: "172.17.0.1"
                    IPAddress: "172.17.0.2"
                    IPPrefixLen: 16
                    IPv6Gateway: ""
                    GlobalIPv6Address: ""
                    GlobalIPv6PrefixLen: 0
                    MacAddress: "02:42:ac:12:00:02"
              Path: "/bin/sh"
              ProcessLabel: ""
              ResolvConfPath: "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/resolv.conf"
              RestartCount: 1
              State:
                Error: ""
                ExitCode: 9
                FinishedAt: "2015-01-06T15:47:32.080254511Z"
                Health:
                  Status: "healthy"
                  FailingStreak: 0
                  Log:
                    - Start: "2019-12-22T10:59:05.6385933Z"
                      End: "2019-12-22T10:59:05.8078452Z"
                      ExitCode: 0
                      Output: ""
                OOMKilled: false
                Dead: false
                Paused: false
                Pid: 0
                Restarting: false
                Running: true
                StartedAt: "2015-01-06T15:47:32.072697474Z"
                Status: "running"
              Mounts:
                - Name: "fac362...80535"
                  Source: "/data"
                  Destination: "/data"
                  Driver: "local"
                  Mode: "ro,Z"
                  RW: false
                  Propagation: ""
        404:
          description: "no such container"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such container: c2ada9df5af8"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID or name of the container"
          type: "string"
        - name: "size"
          in: "query"
          type: "boolean"
          default: false
          description: "Return the size of container as fields `SizeRw` and `SizeRootFs`"
      tags: ["Container"]
  /containers/{id}/top:
    get:
      summary: "List processes running inside a container"
      description: |
        On Unix systems, this is done by running the `ps` command. This endpoint
        is not supported on Windows.
      operationId: "ContainerTop"
      responses:
        200:
          description: "no error"
          schema:
            type: "object"
            title: "ContainerTopResponse"
            description: "OK response to ContainerTop operation"
            properties:
              Titles:
                description: "The ps column titles"
                type: "array"
                items:
                  type: "string"
              Processes:
                description: |
                  Each process running in the container, where each is process
                  is an array of values corresponding to the titles.
                type: "array"
                items:
                  type: "array"
                  items:
                    type: "string"
          examples:
            application/json:
              Titles:
                - "UID"
                - "PID"
                - "PPID"
                - "C"
                - "STIME"
                - "TTY"
                - "TIME"
                - "CMD"
              Processes:
                -
                  - "root"
                  - "13642"
                  - "882"
                  - "0"
                  - "17:03"
                  - "pts/0"
                  - "00:00:00"
                  - "/bin/bash"
                -
                  - "root"
                  - "13735"
                  - "13642"
                  - "0"
                  - "17:06"
                  - "pts/0"
                  - "00:00:00"
                  - "sleep 10"
        404:
          description: "no such container"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such container: c2ada9df5af8"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID or name of the container"
          type: "string"
        - name: "ps_args"
          in: "query"
          description: "The arguments to pass to `ps`. For example, `aux`"
          type: "string"
          default: "-ef"
      tags: ["Container"]
  /containers/{id}/logs:
    get:
      summary: "Get container logs"
      description: |
        Get `stdout` and `stderr` logs from a container.

        Note: This endpoint works only for containers with the `json-file` or
        `journald` logging driver.
      produces:
        - "application/vnd.docker.raw-stream"
        - "application/vnd.docker.multiplexed-stream"
      operationId: "ContainerLogs"
      responses:
        200:
          description: |
            logs returned as a stream in response body.
            For the stream format, [see the documentation for the attach endpoint](#operation/ContainerAttach).
            Note that unlike the attach endpoint, the logs endpoint does not
            upgrade the connection and does not set Content-Type.
          schema:
            type: "string"
            format: "binary"
        404:
          description: "no such container"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such container: c2ada9df5af8"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID or name of the container"
          type: "string"
        - name: "follow"
          in: "query"
          description: "Keep connection after returning logs."
          type: "boolean"
          default: false
        - name: "stdout"
          in: "query"
          description: "Return logs from `stdout`"
          type: "boolean"
          default: false
        - name: "stderr"
          in: "query"
          description: "Return logs from `stderr`"
          type: "boolean"
          default: false
        - name: "since"
          in: "query"
          description: "Only return logs since this time, as a UNIX timestamp"
          type: "integer"
          default: 0
        - name: "until"
          in: "query"
          description: "Only return logs before this time, as a UNIX timestamp"
          type: "integer"
          default: 0
        - name: "timestamps"
          in: "query"
          description: "Add timestamps to every log line"
          type: "boolean"
          default: false
        - name: "tail"
          in: "query"
          description: |
            Only return this number of log lines from the end of the logs.
            Specify as an integer or `all` to output all log lines.
          type: "string"
          default: "all"
      tags: ["Container"]
  /containers/{id}/changes:
    get:
      summary: "Get changes on a container’s filesystem"
      description: |
        Returns which files in a container's filesystem have been added, deleted,
        or modified. The `Kind` of modification can be one of:

        - `0`: Modified
        - `1`: Added
        - `2`: Deleted
      operationId: "ContainerChanges"
      produces: ["application/json"]
      responses:
        200:
          description: "The list of changes"
          schema:
            type: "array"
            items:
              type: "object"
              x-go-name: "ContainerChangeResponseItem"
              title: "ContainerChangeResponseItem"
              description: "change item in response to ContainerChanges operation"
              required: [Path, Kind]
              properties:
                Path:
                  description: "Path to file that has changed"
                  type: "string"
                  x-nullable: false
                Kind:
                  description: "Kind of change"
                  type: "integer"
                  format: "uint8"
                  enum: [0, 1, 2]
                  x-nullable: false
          examples:
            application/json:
              - Path: "/dev"
                Kind: 0
              - Path: "/dev/kmsg"
                Kind: 1
              - Path: "/test"
                Kind: 1
        404:
          description: "no such container"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such container: c2ada9df5af8"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID or name of the container"
          type: "string"
      tags: ["Container"]
  /containers/{id}/export:
    get:
      summary: "Export a container"
      description: "Export the contents of a container as a tarball."
      operationId: "ContainerExport"
      produces:
        - "application/octet-stream"
      responses:
        200:
          description: "no error"
        404:
          description: "no such container"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such container: c2ada9df5af8"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID or name of the container"
          type: "string"
      tags: ["Container"]
  /containers/{id}/stats:
    get:
      summary: "Get container stats based on resource usage"
      description: |
        This endpoint returns a live stream of a container’s resource usage
        statistics.

        The `precpu_stats` is the CPU statistic of the *previous* read, and is
        used to calculate the CPU usage percentage. It is not an exact copy
        of the `cpu_stats` field.

        If either `precpu_stats.online_cpus` or `cpu_stats.online_cpus` is
        nil then for compatibility with older daemons the length of the
        corresponding `cpu_usage.percpu_usage` array should be used.

        On a cgroup v2 host, the following fields are not set
        * `blkio_stats`: all fields other than `io_service_bytes_recursive`
        * `cpu_stats`: `cpu_usage.percpu_usage`
        * `memory_stats`: `max_usage` and `failcnt`
        Also, `memory_stats.stats` fields are incompatible with cgroup v1.

        To calculate the values shown by the `stats` command of the docker cli tool
        the following formulas can be used:
        * used_memory = `memory_stats.usage - memory_stats.stats.cache`
        * available_memory = `memory_stats.limit`
        * Memory usage % = `(used_memory / available_memory) * 100.0`
        * cpu_delta = `cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage`
        * system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage`
        * number_cpus = `lenght(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`
        * CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0`
      operationId: "ContainerStats"
      produces: ["application/json"]
      responses:
        200:
          description: "no error"
          schema:
            type: "object"
          examples:
            application/json:
              read: "2015-01-08T22:57:31.547920715Z"
              pids_stats:
                current: 3
              networks:
                eth0:
                  rx_bytes: 5338
                  rx_dropped: 0
                  rx_errors: 0
                  rx_packets: 36
                  tx_bytes: 648
                  tx_dropped: 0
                  tx_errors: 0
                  tx_packets: 8
                eth5:
                  rx_bytes: 4641
                  rx_dropped: 0
                  rx_errors: 0
                  rx_packets: 26
                  tx_bytes: 690
                  tx_dropped: 0
                  tx_errors: 0
                  tx_packets: 9
              memory_stats:
                stats:
                  total_pgmajfault: 0
                  cache: 0
                  mapped_file: 0
                  total_inactive_file: 0
                  pgpgout: 414
                  rss: 6537216
                  total_mapped_file: 0
                  writeback: 0
                  unevictable: 0
                  pgpgin: 477
                  total_unevictable: 0
                  pgmajfault: 0
                  total_rss: 6537216
                  total_rss_huge: 6291456
                  total_writeback: 0
                  total_inactive_anon: 0
                  rss_huge: 6291456
                  hierarchical_memory_limit: 67108864
                  total_pgfault: 964
                  total_active_file: 0
                  active_anon: 6537216
                  total_active_anon: 6537216
                  total_pgpgout: 414
                  total_cache: 0
                  inactive_anon: 0
                  active_file: 0
                  pgfault: 964
                  inactive_file: 0
                  total_pgpgin: 477
                max_usage: 6651904
                usage: 6537216
                failcnt: 0
                limit: 67108864
              blkio_stats: {}
              cpu_stats:
                cpu_usage:
                  percpu_usage:
                    - 8646879
                    - 24472255
                    - 36438778
                    - 30657443
                  usage_in_usermode: 50000000
                  total_usage: 100215355
                  usage_in_kernelmode: 30000000
                system_cpu_usage: 739306590000000
                online_cpus: 4
                throttling_data:
                  periods: 0
                  throttled_periods: 0
                  throttled_time: 0
              precpu_stats:
                cpu_usage:
                  percpu_usage:
                    - 8646879
                    - 24350896
                    - 36438778
                    - 30657443
                  usage_in_usermode: 50000000
                  total_usage: 100093996
                  usage_in_kernelmode: 30000000
                system_cpu_usage: 9492140000000
                online_cpus: 4
                throttling_data:
                  periods: 0
                  throttled_periods: 0
                  throttled_time: 0
        404:
          description: "no such container"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such container: c2ada9df5af8"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID or name of the container"
          type: "string"
        - name: "stream"
          in: "query"
          description: |
            Stream the output. If false, the stats will be output once and then
            it will disconnect.
          type: "boolean"
          default: true
        - name: "one-shot"
          in: "query"
          description: |
            Only get a single stat instead of waiting for 2 cycles. Must be used
            with `stream=false`.
          type: "boolean"
          default: false
      tags: ["Container"]
  /containers/{id}/resize:
    post:
      summary: "Resize a container TTY"
      description: "Resize the TTY for a container."
      operationId: "ContainerResize"
      consumes:
        - "application/octet-stream"
      produces:
        - "text/plain"
      responses:
        200:
          description: "no error"
        404:
          description: "no such container"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such container: c2ada9df5af8"
        500:
          description: "cannot resize container"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID or name of the container"
          type: "string"
        - name: "h"
          in: "query"
          description: "Height of the TTY session in characters"
          type: "integer"
        - name: "w"
          in: "query"
          description: "Width of the TTY session in characters"
          type: "integer"
      tags: ["Container"]
  /containers/{id}/start:
    post:
      summary: "Start a container"
      operationId: "ContainerStart"
      responses:
        204:
          description: "no error"
        304:
          description: "container already started"
        404:
          description: "no such container"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such container: c2ada9df5af8"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID or name of the container"
          type: "string"
        - name: "detachKeys"
          in: "query"
          description: |
            Override the key sequence for detaching a container. Format is a
            single character `[a-Z]` or `ctrl-<value>` where `<value>` is one
            of: `a-z`, `@`, `^`, `[`, `,` or `_`.
          type: "string"
      tags: ["Container"]
  /containers/{id}/stop:
    post:
      summary: "Stop a container"
      operationId: "ContainerStop"
      responses:
        204:
          description: "no error"
        304:
          description: "container already stopped"
        404:
          description: "no such container"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such container: c2ada9df5af8"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID or name of the container"
          type: "string"
        - name: "signal"
          in: "query"
          description: |
            Signal to send to the container as an integer or string (e.g. `SIGINT`).
          type: "string"
        - name: "t"
          in: "query"
          description: "Number of seconds to wait before killing the container"
          type: "integer"
      tags: ["Container"]
  /containers/{id}/restart:
    post:
      summary: "Restart a container"
      operationId: "ContainerRestart"
      responses:
        204:
          description: "no error"
        404:
          description: "no such container"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such container: c2ada9df5af8"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID or name of the container"
          type: "string"
        - name: "signal"
          in: "query"
          description: |
            Signal to send to the container as an integer or string (e.g. `SIGINT`).
          type: "string"
        - name: "t"
          in: "query"
          description: "Number of seconds to wait before killing the container"
          type: "integer"
      tags: ["Container"]
  /containers/{id}/kill:
    post:
      summary: "Kill a container"
      description: |
        Send a POSIX signal to a container, defaulting to killing to the
        container.
      operationId: "ContainerKill"
      responses:
        204:
          description: "no error"
        404:
          description: "no such container"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such container: c2ada9df5af8"
        409:
          description: "container is not running"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "Container d37cde0fe4ad63c3a7252023b2f9800282894247d145cb5933ddf6e52cc03a28 is not running"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID or name of the container"
          type: "string"
        - name: "signal"
          in: "query"
          description: |
            Signal to send to the container as an integer or string (e.g. `SIGINT`).
          type: "string"
          default: "SIGKILL"
      tags: ["Container"]
  /containers/{id}/update:
    post:
      summary: "Update a container"
      description: |
        Change various configuration options of a container without having to
        recreate it.
      operationId: "ContainerUpdate"
      consumes: ["application/json"]
      produces: ["application/json"]
      responses:
        200:
          description: "The container has been updated."
          schema:
            type: "object"
            title: "ContainerUpdateResponse"
            description: "OK response to ContainerUpdate operation"
            properties:
              Warnings:
                type: "array"
                items:
                  type: "string"
        404:
          description: "no such container"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such container: c2ada9df5af8"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID or name of the container"
          type: "string"
        - name: "update"
          in: "body"
          required: true
          schema:
            allOf:
              - $ref: "#/definitions/Resources"
              - type: "object"
                properties:
                  RestartPolicy:
                    $ref: "#/definitions/RestartPolicy"
            example:
              BlkioWeight: 300
              CpuShares: 512
              CpuPeriod: 100000
              CpuQuota: 50000
              CpuRealtimePeriod: 1000000
              CpuRealtimeRuntime: 10000
              CpusetCpus: "0,1"
              CpusetMems: "0"
              Memory: 314572800
              MemorySwap: 514288000
              MemoryReservation: 209715200
              RestartPolicy:
                MaximumRetryCount: 4
                Name: "on-failure"
      tags: ["Container"]
  /containers/{id}/rename:
    post:
      summary: "Rename a container"
      operationId: "ContainerRename"
      responses:
        204:
          description: "no error"
        404:
          description: "no such container"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such container: c2ada9df5af8"
        409:
          description: "name already in use"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID or name of the container"
          type: "string"
        - name: "name"
          in: "query"
          required: true
          description: "New name for the container"
          type: "string"
      tags: ["Container"]
  /containers/{id}/pause:
    post:
      summary: "Pause a container"
      description: |
        Use the freezer cgroup to suspend all processes in a container.

        Traditionally, when suspending a process the `SIGSTOP` signal is used,
        which is observable by the process being suspended. With the freezer
        cgroup the process is unaware, and unable to capture, that it is being
        suspended, and subsequently resumed.
      operationId: "ContainerPause"
      responses:
        204:
          description: "no error"
        404:
          description: "no such container"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such container: c2ada9df5af8"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID or name of the container"
          type: "string"
      tags: ["Container"]
  /containers/{id}/unpause:
    post:
      summary: "Unpause a container"
      description: "Resume a container which has been paused."
      operationId: "ContainerUnpause"
      responses:
        204:
          description: "no error"
        404:
          description: "no such container"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such container: c2ada9df5af8"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID or name of the container"
          type: "string"
      tags: ["Container"]
  /containers/{id}/attach:
    post:
      summary: "Attach to a container"
      description: |
        Attach to a container to read its output or send it input. You can attach
        to the same container multiple times and you can reattach to containers
        that have been detached.

        Either the `stream` or `logs` parameter must be `true` for this endpoint
        to do anything.

        See the [documentation for the `docker attach` command](https://docs.docker.com/engine/reference/commandline/attach/)
        for more details.

        ### Hijacking

        This endpoint hijacks the HTTP connection to transport `stdin`, `stdout`,
        and `stderr` on the same socket.

        This is the response from the daemon for an attach request:

        ```
        HTTP/1.1 200 OK
        Content-Type: application/vnd.docker.raw-stream

        [STREAM]
        ```

        After the headers and two new lines, the TCP connection can now be used
        for raw, bidirectional communication between the client and server.

        To hint potential proxies about connection hijacking, the Docker client
        can also optionally send connection upgrade headers.

        For example, the client sends this request to upgrade the connection:

        ```
        POST /containers/16253994b7c4/attach?stream=1&stdout=1 HTTP/1.1
        Upgrade: tcp
        Connection: Upgrade
        ```

        The Docker daemon will respond with a `101 UPGRADED` response, and will
        similarly follow with the raw stream:

        ```
        HTTP/1.1 101 UPGRADED
        Content-Type: application/vnd.docker.raw-stream
        Connection: Upgrade
        Upgrade: tcp

        [STREAM]
        ```

        ### Stream format

        When the TTY setting is disabled in [`POST /containers/create`](#operation/ContainerCreate),
        the HTTP Content-Type header is set to application/vnd.docker.multiplexed-stream
        and the stream over the hijacked connected is multiplexed to separate out
        `stdout` and `stderr`. The stream consists of a series of frames, each
        containing a header and a payload.

        The header contains the information which the stream writes (`stdout` or
        `stderr`). It also contains the size of the associated frame encoded in
        the last four bytes (`uint32`).

        It is encoded on the first eight bytes like this:

        ```go
        header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}
        ```

        `STREAM_TYPE` can be:

        - 0: `stdin` (is written on `stdout`)
        - 1: `stdout`
        - 2: `stderr`

        `SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of the `uint32` size
        encoded as big endian.

        Following the header is the payload, which is the specified number of
        bytes of `STREAM_TYPE`.

        The simplest way to implement this protocol is the following:

        1. Read 8 bytes.
        2. Choose `stdout` or `stderr` depending on the first byte.
        3. Extract the frame size from the last four bytes.
        4. Read the extracted size and output it on the correct output.
        5. Goto 1.

        ### Stream format when using a TTY

        When the TTY setting is enabled in [`POST /containers/create`](#operation/ContainerCreate),
        the stream is not multiplexed. The data exchanged over the hijacked
        connection is simply the raw data from the process PTY and client's
        `stdin`.

      operationId: "ContainerAttach"
      produces:
        - "application/vnd.docker.raw-stream"
        - "application/vnd.docker.multiplexed-stream"
      responses:
        101:
          description: "no error, hints proxy about hijacking"
        200:
          description: "no error, no upgrade header found"
        400:
          description: "bad parameter"
          schema:
            $ref: "#/definitions/ErrorResponse"
        404:
          description: "no such container"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such container: c2ada9df5af8"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID or name of the container"
          type: "string"
        - name: "detachKeys"
          in: "query"
          description: |
            Override the key sequence for detaching a container.Format is a single
            character `[a-Z]` or `ctrl-<value>` where `<value>` is one of: `a-z`,
            `@`, `^`, `[`, `,` or `_`.
          type: "string"
        - name: "logs"
          in: "query"
          description: |
            Replay previous logs from the container.

            This is useful for attaching to a container that has started and you
            want to output everything since the container started.

            If `stream` is also enabled, once all the previous output has been
            returned, it will seamlessly transition into streaming current
            output.
          type: "boolean"
          default: false
        - name: "stream"
          in: "query"
          description: |
            Stream attached streams from the time the request was made onwards.
          type: "boolean"
          default: false
        - name: "stdin"
          in: "query"
          description: "Attach to `stdin`"
          type: "boolean"
          default: false
        - name: "stdout"
          in: "query"
          description: "Attach to `stdout`"
          type: "boolean"
          default: false
        - name: "stderr"
          in: "query"
          description: "Attach to `stderr`"
          type: "boolean"
          default: false
      tags: ["Container"]
  /containers/{id}/attach/ws:
    get:
      summary: "Attach to a container via a websocket"
      operationId: "ContainerAttachWebsocket"
      responses:
        101:
          description: "no error, hints proxy about hijacking"
        200:
          description: "no error, no upgrade header found"
        400:
          description: "bad parameter"
          schema:
            $ref: "#/definitions/ErrorResponse"
        404:
          description: "no such container"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such container: c2ada9df5af8"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID or name of the container"
          type: "string"
        - name: "detachKeys"
          in: "query"
          description: |
            Override the key sequence for detaching a container.Format is a single
            character `[a-Z]` or `ctrl-<value>` where `<value>` is one of: `a-z`,
            `@`, `^`, `[`, `,`, or `_`.
          type: "string"
        - name: "logs"
          in: "query"
          description: "Return logs"
          type: "boolean"
          default: false
        - name: "stream"
          in: "query"
          description: "Return stream"
          type: "boolean"
          default: false
        - name: "stdin"
          in: "query"
          description: "Attach to `stdin`"
          type: "boolean"
          default: false
        - name: "stdout"
          in: "query"
          description: "Attach to `stdout`"
          type: "boolean"
          default: false
        - name: "stderr"
          in: "query"
          description: "Attach to `stderr`"
          type: "boolean"
          default: false
      tags: ["Container"]
  /containers/{id}/wait:
    post:
      summary: "Wait for a container"
      description: "Block until a container stops, then returns the exit code."
      operationId: "ContainerWait"
      produces: ["application/json"]
      responses:
        200:
          description: "The container has exit."
          schema:
            $ref: "#/definitions/ContainerWaitResponse"
        400:
          description: "bad parameter"
          schema:
            $ref: "#/definitions/ErrorResponse"
        404:
          description: "no such container"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such container: c2ada9df5af8"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID or name of the container"
          type: "string"
        - name: "condition"
          in: "query"
          description: |
            Wait until a container state reaches the given condition.

            Defaults to `not-running` if omitted or empty.
          type: "string"
          enum:
            - "not-running"
            - "next-exit"
            - "removed"
          default: "not-running"
      tags: ["Container"]
  /containers/{id}:
    delete:
      summary: "Remove a container"
      operationId: "ContainerDelete"
      responses:
        204:
          description: "no error"
        400:
          description: "bad parameter"
          schema:
            $ref: "#/definitions/ErrorResponse"
        404:
          description: "no such container"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such container: c2ada9df5af8"
        409:
          description: "conflict"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: |
                You cannot remove a running container: c2ada9df5af8. Stop the
                container before attempting removal or force remove
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID or name of the container"
          type: "string"
        - name: "v"
          in: "query"
          description: "Remove anonymous volumes associated with the container."
          type: "boolean"
          default: false
        - name: "force"
          in: "query"
          description: "If the container is running, kill it before removing it."
          type: "boolean"
          default: false
        - name: "link"
          in: "query"
          description: "Remove the specified link associated with the container."
          type: "boolean"
          default: false
      tags: ["Container"]
  /containers/{id}/archive:
    head:
      summary: "Get information about files in a container"
      description: |
        A response header `X-Docker-Container-Path-Stat` is returned, containing
        a base64 - encoded JSON object with some filesystem header information
        about the path.
      operationId: "ContainerArchiveInfo"
      responses:
        200:
          description: "no error"
          headers:
            X-Docker-Container-Path-Stat:
              type: "string"
              description: |
                A base64 - encoded JSON object with some filesystem header
                information about the path
        400:
          description: "Bad parameter"
          schema:
            $ref: "#/definitions/ErrorResponse"
        404:
          description: "Container or path does not exist"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such container: c2ada9df5af8"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID or name of the container"
          type: "string"
        - name: "path"
          in: "query"
          required: true
          description: "Resource in the container’s filesystem to archive."
          type: "string"
      tags: ["Container"]
    get:
      summary: "Get an archive of a filesystem resource in a container"
      description: "Get a tar archive of a resource in the filesystem of container id."
      operationId: "ContainerArchive"
      produces: ["application/x-tar"]
      responses:
        200:
          description: "no error"
        400:
          description: "Bad parameter"
          schema:
            $ref: "#/definitions/ErrorResponse"
        404:
          description: "Container or path does not exist"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such container: c2ada9df5af8"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID or name of the container"
          type: "string"
        - name: "path"
          in: "query"
          required: true
          description: "Resource in the container’s filesystem to archive."
          type: "string"
      tags: ["Container"]
    put:
      summary: "Extract an archive of files or folders to a directory in a container"
      description: |
        Upload a tar archive to be extracted to a path in the filesystem of container id.
        `path` parameter is asserted to be a directory. If it exists as a file, 400 error
        will be returned with message "not a directory".
      operationId: "PutContainerArchive"
      consumes: ["application/x-tar", "application/octet-stream"]
      responses:
        200:
          description: "The content was extracted successfully"
        400:
          description: "Bad parameter"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "not a directory"
        403:
          description: "Permission denied, the volume or container rootfs is marked as read-only."
          schema:
            $ref: "#/definitions/ErrorResponse"
        404:
          description: "No such container or path does not exist inside the container"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such container: c2ada9df5af8"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID or name of the container"
          type: "string"
        - name: "path"
          in: "query"
          required: true
          description: "Path to a directory in the container to extract the archive’s contents into. "
          type: "string"
        - name: "noOverwriteDirNonDir"
          in: "query"
          description: |
            If `1`, `true`, or `True` then it will be an error if unpacking the
            given content would cause an existing directory to be replaced with
            a non-directory and vice versa.
          type: "string"
        - name: "copyUIDGID"
          in: "query"
          description: |
            If `1`, `true`, then it will copy UID/GID maps to the dest file or
            dir
          type: "string"
        - name: "inputStream"
          in: "body"
          required: true
          description: |
            The input stream must be a tar archive compressed with one of the
            following algorithms: `identity` (no compression), `gzip`, `bzip2`,
            or `xz`.
          schema:
            type: "string"
            format: "binary"
      tags: ["Container"]
  /containers/prune:
    post:
      summary: "Delete stopped containers"
      produces:
        - "application/json"
      operationId: "ContainerPrune"
      parameters:
        - name: "filters"
          in: "query"
          description: |
            Filters to process on the prune list, encoded as JSON (a `map[string][]string`).

            Available filters:
            - `until=<timestamp>` Prune containers created before this timestamp. The `<timestamp>` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.
            - `label` (`label=<key>`, `label=<key>=<value>`, `label!=<key>`, or `label!=<key>=<value>`) Prune containers with (or without, in case `label!=...` is used) the specified labels.
          type: "string"
      responses:
        200:
          description: "No error"
          schema:
            type: "object"
            title: "ContainerPruneResponse"
            properties:
              ContainersDeleted:
                description: "Container IDs that were deleted"
                type: "array"
                items:
                  type: "string"
              SpaceReclaimed:
                description: "Disk space reclaimed in bytes"
                type: "integer"
                format: "int64"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      tags: ["Container"]
  /images/json:
    get:
      summary: "List Images"
      description: "Returns a list of images on the server. Note that it uses a different, smaller representation of an image than inspecting a single image."
      operationId: "ImageList"
      produces:
        - "application/json"
      responses:
        200:
          description: "Summary image data for the images matching the query"
          schema:
            type: "array"
            items:
              $ref: "#/definitions/ImageSummary"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "all"
          in: "query"
          description: "Show all images. Only images from a final layer (no children) are shown by default."
          type: "boolean"
          default: false
        - name: "filters"
          in: "query"
          description: |
            A JSON encoded value of the filters (a `map[string][]string`) to
            process on the images list.

            Available filters:

            - `before`=(`<image-name>[:<tag>]`,  `<image id>` or `<image@digest>`)
            - `dangling=true`
            - `label=key` or `label="key=value"` of an image label
            - `reference`=(`<image-name>[:<tag>]`)
            - `since`=(`<image-name>[:<tag>]`,  `<image id>` or `<image@digest>`)
          type: "string"
        - name: "shared-size"
          in: "query"
          description: "Compute and show shared size as a `SharedSize` field on each image."
          type: "boolean"
          default: false
        - name: "digests"
          in: "query"
          description: "Show digest information as a `RepoDigests` field on each image."
          type: "boolean"
          default: false
      tags: ["Image"]
  /build:
    post:
      summary: "Build an image"
      description: |
        Build an image from a tar archive with a `Dockerfile` in it.

        The `Dockerfile` specifies how the image is built from the tar archive. It is typically in the archive's root, but can be at a different path or have a different name by specifying the `dockerfile` parameter. [See the `Dockerfile` reference for more information](https://docs.docker.com/engine/reference/builder/).

        The Docker daemon performs a preliminary validation of the `Dockerfile` before starting the build, and returns an error if the syntax is incorrect. After that, each instruction is run one-by-one until the ID of the new image is output.

        The build is canceled if the client drops the connection by quitting or being killed.
      operationId: "ImageBuild"
      consumes:
        - "application/octet-stream"
      produces:
        - "application/json"
      parameters:
        - name: "inputStream"
          in: "body"
          description: "A tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz."
          schema:
            type: "string"
            format: "binary"
        - name: "dockerfile"
          in: "query"
          description: "Path within the build context to the `Dockerfile`. This is ignored if `remote` is specified and points to an external `Dockerfile`."
          type: "string"
          default: "Dockerfile"
        - name: "t"
          in: "query"
          description: "A name and optional tag to apply to the image in the `name:tag` format. If you omit the tag the default `latest` value is assumed. You can provide several `t` parameters."
          type: "string"
        - name: "extrahosts"
          in: "query"
          description: "Extra hosts to add to /etc/hosts"
          type: "string"
        - name: "remote"
          in: "query"
          description: "A Git repository URI or HTTP/HTTPS context URI. If the URI points to a single text file, the file’s contents are placed into a file called `Dockerfile` and the image is built from that file. If the URI points to a tarball, the file is downloaded by the daemon and the contents therein used as the context for the build. If the URI points to a tarball and the `dockerfile` parameter is also specified, there must be a file with the corresponding path inside the tarball."
          type: "string"
        - name: "q"
          in: "query"
          description: "Suppress verbose build output."
          type: "boolean"
          default: false
        - name: "nocache"
          in: "query"
          description: "Do not use the cache when building the image."
          type: "boolean"
          default: false
        - name: "cachefrom"
          in: "query"
          description: "JSON array of images used for build cache resolution."
          type: "string"
        - name: "pull"
          in: "query"
          description: "Attempt to pull the image even if an older image exists locally."
          type: "string"
        - name: "rm"
          in: "query"
          description: "Remove intermediate containers after a successful build."
          type: "boolean"
          default: true
        - name: "forcerm"
          in: "query"
          description: "Always remove intermediate containers, even upon failure."
          type: "boolean"
          default: false
        - name: "memory"
          in: "query"
          description: "Set memory limit for build."
          type: "integer"
        - name: "memswap"
          in: "query"
          description: "Total memory (memory + swap). Set as `-1` to disable swap."
          type: "integer"
        - name: "cpushares"
          in: "query"
          description: "CPU shares (relative weight)."
          type: "integer"
        - name: "cpusetcpus"
          in: "query"
          description: "CPUs in which to allow execution (e.g., `0-3`, `0,1`)."
          type: "string"
        - name: "cpuperiod"
          in: "query"
          description: "The length of a CPU period in microseconds."
          type: "integer"
        - name: "cpuquota"
          in: "query"
          description: "Microseconds of CPU time that the container can get in a CPU period."
          type: "integer"
        - name: "buildargs"
          in: "query"
          description: >
            JSON map of string pairs for build-time variables. Users pass these values at build-time. Docker
            uses the buildargs as the environment context for commands run via the `Dockerfile` RUN
            instruction, or for variable expansion in other `Dockerfile` instructions. This is not meant for
            passing secret values.


            For example, the build arg `FOO=bar` would become `{"FOO":"bar"}` in JSON. This would result in the
            query parameter `buildargs={"FOO":"bar"}`. Note that `{"FOO":"bar"}` should be URI component encoded.


            [Read more about the buildargs instruction.](https://docs.docker.com/engine/reference/builder/#arg)
          type: "string"
        - name: "shmsize"
          in: "query"
          description: "Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB."
          type: "integer"
        - name: "squash"
          in: "query"
          description: "Squash the resulting images layers into a single layer. *(Experimental release only.)*"
          type: "boolean"
        - name: "labels"
          in: "query"
          description: "Arbitrary key/value labels to set on the image, as a JSON map of string pairs."
          type: "string"
        - name: "networkmode"
          in: "query"
          description: |
            Sets the networking mode for the run commands during build. Supported
            standard values are: `bridge`, `host`, `none`, and `container:<name|id>`.
            Any other value is taken as a custom network's name or ID to which this
            container should connect to.
          type: "string"
        - name: "Content-type"
          in: "header"
          type: "string"
          enum:
            - "application/x-tar"
          default: "application/x-tar"
        - name: "X-Registry-Config"
          in: "header"
          description: |
            This is a base64-encoded JSON object with auth configurations for multiple registries that a build may refer to.

            The key is a registry URL, and the value is an auth configuration object, [as described in the authentication section](#section/Authentication). For example:

            ```
            {
              "docker.example.com": {
                "username": "janedoe",
                "password": "hunter2"
              },
              "https://index.docker.io/v1/": {
                "username": "mobydock",
                "password": "conta1n3rize14"
              }
            }
            ```

            Only the registry domain name (and port if not the default 443) are required. However, for legacy reasons, the Docker Hub registry must be specified with both a `https://` prefix and a `/v1/` suffix even though Docker will prefer to use the v2 registry API.
          type: "string"
        - name: "platform"
          in: "query"
          description: "Platform in the format os[/arch[/variant]]"
          type: "string"
          default: ""
        - name: "target"
          in: "query"
          description: "Target build stage"
          type: "string"
          default: ""
        - name: "outputs"
          in: "query"
          description: "BuildKit output configuration"
          type: "string"
          default: ""
      responses:
        200:
          description: "no error"
        400:
          description: "Bad parameter"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      tags: ["Image"]
  /build/prune:
    post:
      summary: "Delete builder cache"
      produces:
        - "application/json"
      operationId: "BuildPrune"
      parameters:
        - name: "keep-storage"
          in: "query"
          description: "Amount of disk space in bytes to keep for cache"
          type: "integer"
          format: "int64"
        - name: "all"
          in: "query"
          type: "boolean"
          description: "Remove all types of build cache"
        - name: "filters"
          in: "query"
          type: "string"
          description: |
            A JSON encoded value of the filters (a `map[string][]string`) to
            process on the list of build cache objects.

            Available filters:

            - `until=<duration>`: duration relative to daemon's time, during which build cache was not used, in Go's duration format (e.g., '24h')
            - `id=<id>`
            - `parent=<id>`
            - `type=<string>`
            - `description=<string>`
            - `inuse`
            - `shared`
            - `private`
      responses:
        200:
          description: "No error"
          schema:
            type: "object"
            title: "BuildPruneResponse"
            properties:
              CachesDeleted:
                type: "array"
                items:
                  description: "ID of build cache object"
                  type: "string"
              SpaceReclaimed:
                description: "Disk space reclaimed in bytes"
                type: "integer"
                format: "int64"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      tags: ["Image"]
  /images/create:
    post:
      summary: "Create an image"
      description: "Create an image by either pulling it from a registry or importing it."
      operationId: "ImageCreate"
      consumes:
        - "text/plain"
        - "application/octet-stream"
      produces:
        - "application/json"
      responses:
        200:
          description: "no error"
        404:
          description: "repository does not exist or no read access"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "fromImage"
          in: "query"
          description: "Name of the image to pull. The name may include a tag or digest. This parameter may only be used when pulling an image. The pull is cancelled if the HTTP connection is closed."
          type: "string"
        - name: "fromSrc"
          in: "query"
          description: "Source to import. The value may be a URL from which the image can be retrieved or `-` to read the image from the request body. This parameter may only be used when importing an image."
          type: "string"
        - name: "repo"
          in: "query"
          description: "Repository name given to an image when it is imported. The repo may include a tag. This parameter may only be used when importing an image."
          type: "string"
        - name: "tag"
          in: "query"
          description: "Tag or digest. If empty when pulling an image, this causes all tags for the given image to be pulled."
          type: "string"
        - name: "message"
          in: "query"
          description: "Set commit message for imported image."
          type: "string"
        - name: "inputImage"
          in: "body"
          description: "Image content if the value `-` has been specified in fromSrc query parameter"
          schema:
            type: "string"
          required: false
        - name: "X-Registry-Auth"
          in: "header"
          description: |
            A base64url-encoded auth configuration.

            Refer to the [authentication section](#section/Authentication) for
            details.
          type: "string"
        - name: "changes"
          in: "query"
          description: |
            Apply `Dockerfile` instructions to the image that is created,
            for example: `changes=ENV DEBUG=true`.
            Note that `ENV DEBUG=true` should be URI component encoded.

            Supported `Dockerfile` instructions:
            `CMD`|`ENTRYPOINT`|`ENV`|`EXPOSE`|`ONBUILD`|`USER`|`VOLUME`|`WORKDIR`
          type: "array"
          items:
            type: "string"
        - name: "platform"
          in: "query"
          description: |
            Platform in the format os[/arch[/variant]].

            When used in combination with the `fromImage` option, the daemon checks
            if the given image is present in the local image cache with the given
            OS and Architecture, and otherwise attempts to pull the image. If the
            option is not set, the host's native OS and Architecture are used.
            If the given image does not exist in the local image cache, the daemon
            attempts to pull the image with the host's native OS and Architecture.
            If the given image does exists in the local image cache, but its OS or
            architecture does not match, a warning is produced.

            When used with the `fromSrc` option to import an image from an archive,
            this option sets the platform information for the imported image. If
            the option is not set, the host's native OS and Architecture are used
            for the imported image.
          type: "string"
          default: ""
      tags: ["Image"]
  /images/{name}/json:
    get:
      summary: "Inspect an image"
      description: "Return low-level information about an image."
      operationId: "ImageInspect"
      produces:
        - "application/json"
      responses:
        200:
          description: "No error"
          schema:
            $ref: "#/definitions/ImageInspect"
        404:
          description: "No such image"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such image: someimage (tag: latest)"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "name"
          in: "path"
          description: "Image name or id"
          type: "string"
          required: true
      tags: ["Image"]
  /images/{name}/history:
    get:
      summary: "Get the history of an image"
      description: "Return parent layers of an image."
      operationId: "ImageHistory"
      produces: ["application/json"]
      responses:
        200:
          description: "List of image layers"
          schema:
            type: "array"
            items:
              type: "object"
              x-go-name: HistoryResponseItem
              title: "HistoryResponseItem"
              description: "individual image layer information in response to ImageHistory operation"
              required: [Id, Created, CreatedBy, Tags, Size, Comment]
              properties:
                Id:
                  type: "string"
                  x-nullable: false
                Created:
                  type: "integer"
                  format: "int64"
                  x-nullable: false
                CreatedBy:
                  type: "string"
                  x-nullable: false
                Tags:
                  type: "array"
                  items:
                    type: "string"
                Size:
                  type: "integer"
                  format: "int64"
                  x-nullable: false
                Comment:
                  type: "string"
                  x-nullable: false
          examples:
            application/json:
              - Id: "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710"
                Created: 1398108230
                CreatedBy: "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /"
                Tags:
                  - "ubuntu:lucid"
                  - "ubuntu:10.04"
                Size: 182964289
                Comment: ""
              - Id: "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8"
                Created: 1398108222
                CreatedBy: "/bin/sh -c #(nop) MAINTAINER Tianon Gravi <admwiggin@gmail.com> - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/"
                Tags: []
                Size: 0
                Comment: ""
              - Id: "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158"
                Created: 1371157430
                CreatedBy: ""
                Tags:
                  - "scratch12:latest"
                  - "scratch:latest"
                Size: 0
                Comment: "Imported from -"
        404:
          description: "No such image"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "name"
          in: "path"
          description: "Image name or ID"
          type: "string"
          required: true
      tags: ["Image"]
  /images/{name}/push:
    post:
      summary: "Push an image"
      description: |
        Push an image to a registry.

        If you wish to push an image on to a private registry, that image must
        already have a tag which references the registry. For example,
        `registry.example.com/myimage:latest`.

        The push is cancelled if the HTTP connection is closed.
      operationId: "ImagePush"
      consumes:
        - "application/octet-stream"
      responses:
        200:
          description: "No error"
        404:
          description: "No such image"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "name"
          in: "path"
          description: "Image name or ID."
          type: "string"
          required: true
        - name: "tag"
          in: "query"
          description: "The tag to associate with the image on the registry."
          type: "string"
        - name: "X-Registry-Auth"
          in: "header"
          description: |
            A base64url-encoded auth configuration.

            Refer to the [authentication section](#section/Authentication) for
            details.
          type: "string"
          required: true
      tags: ["Image"]
  /images/{name}/tag:
    post:
      summary: "Tag an image"
      description: "Tag an image so that it becomes part of a repository."
      operationId: "ImageTag"
      responses:
        201:
          description: "No error"
        400:
          description: "Bad parameter"
          schema:
            $ref: "#/definitions/ErrorResponse"
        404:
          description: "No such image"
          schema:
            $ref: "#/definitions/ErrorResponse"
        409:
          description: "Conflict"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "name"
          in: "path"
          description: "Image name or ID to tag."
          type: "string"
          required: true
        - name: "repo"
          in: "query"
          description: "The repository to tag in. For example, `someuser/someimage`."
          type: "string"
        - name: "tag"
          in: "query"
          description: "The name of the new tag."
          type: "string"
      tags: ["Image"]
  /images/{name}:
    delete:
      summary: "Remove an image"
      description: |
        Remove an image, along with any untagged parent images that were
        referenced by that image.

        Images can't be removed if they have descendant images, are being
        used by a running container or are being used by a build.
      operationId: "ImageDelete"
      produces: ["application/json"]
      responses:
        200:
          description: "The image was deleted successfully"
          schema:
            type: "array"
            items:
              $ref: "#/definitions/ImageDeleteResponseItem"
          examples:
            application/json:
              - Untagged: "3e2f21a89f"
              - Deleted: "3e2f21a89f"
              - Deleted: "53b4f83ac9"
        404:
          description: "No such image"
          schema:
            $ref: "#/definitions/ErrorResponse"
        409:
          description: "Conflict"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "name"
          in: "path"
          description: "Image name or ID"
          type: "string"
          required: true
        - name: "force"
          in: "query"
          description: "Remove the image even if it is being used by stopped containers or has other tags"
          type: "boolean"
          default: false
        - name: "noprune"
          in: "query"
          description: "Do not delete untagged parent images"
          type: "boolean"
          default: false
      tags: ["Image"]
  /images/search:
    get:
      summary: "Search images"
      description: "Search for an image on Docker Hub."
      operationId: "ImageSearch"
      produces:
        - "application/json"
      responses:
        200:
          description: "No error"
          schema:
            type: "array"
            items:
              type: "object"
              title: "ImageSearchResponseItem"
              properties:
                description:
                  type: "string"
                is_official:
                  type: "boolean"
                is_automated:
                  type: "boolean"
                name:
                  type: "string"
                star_count:
                  type: "integer"
          examples:
            application/json:
              - description: ""
                is_official: false
                is_automated: false
                name: "wma55/u1210sshd"
                star_count: 0
              - description: ""
                is_official: false
                is_automated: false
                name: "jdswinbank/sshd"
                star_count: 0
              - description: ""
                is_official: false
                is_automated: false
                name: "vgauthier/sshd"
                star_count: 0
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "term"
          in: "query"
          description: "Term to search"
          type: "string"
          required: true
        - name: "limit"
          in: "query"
          description: "Maximum number of results to return"
          type: "integer"
        - name: "filters"
          in: "query"
          description: |
            A JSON encoded value of the filters (a `map[string][]string`) to process on the images list. Available filters:

            - `is-automated=(true|false)`
            - `is-official=(true|false)`
            - `stars=<number>` Matches images that has at least 'number' stars.
          type: "string"
      tags: ["Image"]
  /images/prune:
    post:
      summary: "Delete unused images"
      produces:
        - "application/json"
      operationId: "ImagePrune"
      parameters:
        - name: "filters"
          in: "query"
          description: |
            Filters to process on the prune list, encoded as JSON (a `map[string][]string`). Available filters:

            - `dangling=<boolean>` When set to `true` (or `1`), prune only
               unused *and* untagged images. When set to `false`
               (or `0`), all unused images are pruned.
            - `until=<string>` Prune images created before this timestamp. The `<timestamp>` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.
            - `label` (`label=<key>`, `label=<key>=<value>`, `label!=<key>`, or `label!=<key>=<value>`) Prune images with (or without, in case `label!=...` is used) the specified labels.
          type: "string"
      responses:
        200:
          description: "No error"
          schema:
            type: "object"
            title: "ImagePruneResponse"
            properties:
              ImagesDeleted:
                description: "Images that were deleted"
                type: "array"
                items:
                  $ref: "#/definitions/ImageDeleteResponseItem"
              SpaceReclaimed:
                description: "Disk space reclaimed in bytes"
                type: "integer"
                format: "int64"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      tags: ["Image"]
  /auth:
    post:
      summary: "Check auth configuration"
      description: |
        Validate credentials for a registry and, if available, get an identity
        token for accessing the registry without password.
      operationId: "SystemAuth"
      consumes: ["application/json"]
      produces: ["application/json"]
      responses:
        200:
          description: "An identity token was generated successfully."
          schema:
            type: "object"
            title: "SystemAuthResponse"
            required: [Status]
            properties:
              Status:
                description: "The status of the authentication"
                type: "string"
                x-nullable: false
              IdentityToken:
                description: "An opaque token used to authenticate a user after a successful login"
                type: "string"
                x-nullable: false
          examples:
            application/json:
              Status: "Login Succeeded"
              IdentityToken: "9cbaf023786cd7..."
        204:
          description: "No error"
        401:
          description: "Auth error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "authConfig"
          in: "body"
          description: "Authentication to check"
          schema:
            $ref: "#/definitions/AuthConfig"
      tags: ["System"]
  /info:
    get:
      summary: "Get system information"
      operationId: "SystemInfo"
      produces:
        - "application/json"
      responses:
        200:
          description: "No error"
          schema:
            $ref: "#/definitions/SystemInfo"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      tags: ["System"]
  /version:
    get:
      summary: "Get version"
      description: "Returns the version of Docker that is running and various information about the system that Docker is running on."
      operationId: "SystemVersion"
      produces: ["application/json"]
      responses:
        200:
          description: "no error"
          schema:
            $ref: "#/definitions/SystemVersion"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      tags: ["System"]
  /_ping:
    get:
      summary: "Ping"
      description: "This is a dummy endpoint you can use to test if the server is accessible."
      operationId: "SystemPing"
      produces: ["text/plain"]
      responses:
        200:
          description: "no error"
          schema:
            type: "string"
            example: "OK"
          headers:
            API-Version:
              type: "string"
              description: "Max API Version the server supports"
            Builder-Version:
              type: "string"
              description: |
                Default version of docker image builder

                The default on Linux is version "2" (BuildKit), but the daemon
                can be configured to recommend version "1" (classic Builder).
                Windows does not yet support BuildKit for native Windows images,
                and uses "1" (classic builder) as a default.

                This value is a recommendation as advertised by the daemon, and
                it is up to the client to choose which builder to use.
              default: "2"
            Docker-Experimental:
              type: "boolean"
              description: "If the server is running with experimental mode enabled"
            Swarm:
              type: "string"
              enum: ["inactive", "pending", "error", "locked", "active/worker", "active/manager"]
              description: |
                Contains information about Swarm status of the daemon,
                and if the daemon is acting as a manager or worker node.
              default: "inactive"
            Cache-Control:
              type: "string"
              default: "no-cache, no-store, must-revalidate"
            Pragma:
              type: "string"
              default: "no-cache"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
          headers:
            Cache-Control:
              type: "string"
              default: "no-cache, no-store, must-revalidate"
            Pragma:
              type: "string"
              default: "no-cache"
      tags: ["System"]
    head:
      summary: "Ping"
      description: "This is a dummy endpoint you can use to test if the server is accessible."
      operationId: "SystemPingHead"
      produces: ["text/plain"]
      responses:
        200:
          description: "no error"
          schema:
            type: "string"
            example: "(empty)"
          headers:
            API-Version:
              type: "string"
              description: "Max API Version the server supports"
            Builder-Version:
              type: "string"
              description: "Default version of docker image builder"
            Docker-Experimental:
              type: "boolean"
              description: "If the server is running with experimental mode enabled"
            Swarm:
              type: "string"
              enum: ["inactive", "pending", "error", "locked", "active/worker", "active/manager"]
              description: |
                Contains information about Swarm status of the daemon,
                and if the daemon is acting as a manager or worker node.
              default: "inactive"
            Cache-Control:
              type: "string"
              default: "no-cache, no-store, must-revalidate"
            Pragma:
              type: "string"
              default: "no-cache"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      tags: ["System"]
  /commit:
    post:
      summary: "Create a new image from a container"
      operationId: "ImageCommit"
      consumes:
        - "application/json"
      produces:
        - "application/json"
      responses:
        201:
          description: "no error"
          schema:
            $ref: "#/definitions/IdResponse"
        404:
          description: "no such container"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such container: c2ada9df5af8"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "containerConfig"
          in: "body"
          description: "The container configuration"
          schema:
            $ref: "#/definitions/ContainerConfig"
        - name: "container"
          in: "query"
          description: "The ID or name of the container to commit"
          type: "string"
        - name: "repo"
          in: "query"
          description: "Repository name for the created image"
          type: "string"
        - name: "tag"
          in: "query"
          description: "Tag name for the create image"
          type: "string"
        - name: "comment"
          in: "query"
          description: "Commit message"
          type: "string"
        - name: "author"
          in: "query"
          description: "Author of the image (e.g., `John Hannibal Smith <hannibal@a-team.com>`)"
          type: "string"
        - name: "pause"
          in: "query"
          description: "Whether to pause the container before committing"
          type: "boolean"
          default: true
        - name: "changes"
          in: "query"
          description: "`Dockerfile` instructions to apply while committing"
          type: "string"
      tags: ["Image"]
  /events:
    get:
      summary: "Monitor events"
      description: |
        Stream real-time events from the server.

        Various objects within Docker report events when something happens to them.

        Containers report these events: `attach`, `commit`, `copy`, `create`, `destroy`, `detach`, `die`, `exec_create`, `exec_detach`, `exec_start`, `exec_die`, `export`, `health_status`, `kill`, `oom`, `pause`, `rename`, `resize`, `restart`, `start`, `stop`, `top`, `unpause`, `update`, and `prune`

        Images report these events: `delete`, `import`, `load`, `pull`, `push`, `save`, `tag`, `untag`, and `prune`

        Volumes report these events: `create`, `mount`, `unmount`, `destroy`, and `prune`

        Networks report these events: `create`, `connect`, `disconnect`, `destroy`, `update`, `remove`, and `prune`

        The Docker daemon reports these events: `reload`

        Services report these events: `create`, `update`, and `remove`

        Nodes report these events: `create`, `update`, and `remove`

        Secrets report these events: `create`, `update`, and `remove`

        Configs report these events: `create`, `update`, and `remove`

        The Builder reports `prune` events

      operationId: "SystemEvents"
      produces:
        - "application/json"
      responses:
        200:
          description: "no error"
          schema:
            $ref: "#/definitions/EventMessage"
        400:
          description: "bad parameter"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "since"
          in: "query"
          description: "Show events created since this timestamp then stream new events."
          type: "string"
        - name: "until"
          in: "query"
          description: "Show events created until this timestamp then stop streaming."
          type: "string"
        - name: "filters"
          in: "query"
          description: |
            A JSON encoded value of filters (a `map[string][]string`) to process on the event list. Available filters:

            - `config=<string>` config name or ID
            - `container=<string>` container name or ID
            - `daemon=<string>` daemon name or ID
            - `event=<string>` event type
            - `image=<string>` image name or ID
            - `label=<string>` image or container label
            - `network=<string>` network name or ID
            - `node=<string>` node ID
            - `plugin`=<string> plugin name or ID
            - `scope`=<string> local or swarm
            - `secret=<string>` secret name or ID
            - `service=<string>` service name or ID
            - `type=<string>` object to filter by, one of `container`, `image`, `volume`, `network`, `daemon`, `plugin`, `node`, `service`, `secret` or `config`
            - `volume=<string>` volume name
          type: "string"
      tags: ["System"]
  /system/df:
    get:
      summary: "Get data usage information"
      operationId: "SystemDataUsage"
      responses:
        200:
          description: "no error"
          schema:
            type: "object"
            title: "SystemDataUsageResponse"
            properties:
              LayersSize:
                type: "integer"
                format: "int64"
              Images:
                type: "array"
                items:
                  $ref: "#/definitions/ImageSummary"
              Containers:
                type: "array"
                items:
                  $ref: "#/definitions/ContainerSummary"
              Volumes:
                type: "array"
                items:
                  $ref: "#/definitions/Volume"
              BuildCache:
                type: "array"
                items:
                  $ref: "#/definitions/BuildCache"
            example:
              LayersSize: 1092588
              Images:
                -
                  Id: "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749"
                  ParentId: ""
                  RepoTags:
                    - "busybox:latest"
                  RepoDigests:
                    - "busybox@sha256:a59906e33509d14c036c8678d687bd4eec81ed7c4b8ce907b888c607f6a1e0e6"
                  Created: 1466724217
                  Size: 1092588
                  SharedSize: 0
                  VirtualSize: 1092588
                  Labels: {}
                  Containers: 1
              Containers:
                -
                  Id: "e575172ed11dc01bfce087fb27bee502db149e1a0fad7c296ad300bbff178148"
                  Names:
                    - "/top"
                  Image: "busybox"
                  ImageID: "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749"
                  Command: "top"
                  Created: 1472592424
                  Ports: []
                  SizeRootFs: 1092588
                  Labels: {}
                  State: "exited"
                  Status: "Exited (0) 56 minutes ago"
                  HostConfig:
                    NetworkMode: "default"
                  NetworkSettings:
                    Networks:
                      bridge:
                        IPAMConfig: null
                        Links: null
                        Aliases: null
                        NetworkID: "d687bc59335f0e5c9ee8193e5612e8aee000c8c62ea170cfb99c098f95899d92"
                        EndpointID: "8ed5115aeaad9abb174f68dcf135b49f11daf597678315231a32ca28441dec6a"
                        Gateway: "172.18.0.1"
                        IPAddress: "172.18.0.2"
                        IPPrefixLen: 16
                        IPv6Gateway: ""
                        GlobalIPv6Address: ""
                        GlobalIPv6PrefixLen: 0
                        MacAddress: "02:42:ac:12:00:02"
                  Mounts: []
              Volumes:
                -
                  Name: "my-volume"
                  Driver: "local"
                  Mountpoint: "/var/lib/docker/volumes/my-volume/_data"
                  Labels: null
                  Scope: "local"
                  Options: null
                  UsageData:
                    Size: 10920104
                    RefCount: 2
              BuildCache:
                -
                  ID: "hw53o5aio51xtltp5xjp8v7fx"
                  Parents: []
                  Type: "regular"
                  Description: "pulled from docker.io/library/debian@sha256:234cb88d3020898631af0ccbbcca9a66ae7306ecd30c9720690858c1b007d2a0"
                  InUse: false
                  Shared: true
                  Size: 0
                  CreatedAt: "2021-06-28T13:31:01.474619385Z"
                  LastUsedAt: "2021-07-07T22:02:32.738075951Z"
                  UsageCount: 26
                -
                  ID: "ndlpt0hhvkqcdfkputsk4cq9c"
                  Parents: ["ndlpt0hhvkqcdfkputsk4cq9c"]
                  Type: "regular"
                  Description: "mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache"
                  InUse: false
                  Shared: true
                  Size: 51
                  CreatedAt: "2021-06-28T13:31:03.002625487Z"
                  LastUsedAt: "2021-07-07T22:02:32.773909517Z"
                  UsageCount: 26
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "type"
          in: "query"
          description: |
            Object types, for which to compute and return data.
          type: "array"
          collectionFormat: multi
          items:
            type: "string"
            enum: ["container", "image", "volume", "build-cache"]
      tags: ["System"]
  /images/{name}/get:
    get:
      summary: "Export an image"
      description: |
        Get a tarball containing all images and metadata for a repository.

        If `name` is a specific name and tag (e.g. `ubuntu:latest`), then only that image (and its parents) are returned. If `name` is an image ID, similarly only that image (and its parents) are returned, but with the exclusion of the `repositories` file in the tarball, as there were no image names referenced.

        ### Image tarball format

        An image tarball contains one directory per image layer (named using its long ID), each containing these files:

        - `VERSION`: currently `1.0` - the file format version
        - `json`: detailed layer information, similar to `docker inspect layer_id`
        - `layer.tar`: A tarfile containing the filesystem changes in this layer

        The `layer.tar` file contains `aufs` style `.wh..wh.aufs` files and directories for storing attribute changes and deletions.

        If the tarball defines a repository, the tarball should also include a `repositories` file at the root that contains a list of repository and tag names mapped to layer IDs.

        ```json
        {
          "hello-world": {
            "latest": "565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1"
          }
        }
        ```
      operationId: "ImageGet"
      produces:
        - "application/x-tar"
      responses:
        200:
          description: "no error"
          schema:
            type: "string"
            format: "binary"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "name"
          in: "path"
          description: "Image name or ID"
          type: "string"
          required: true
      tags: ["Image"]
  /images/get:
    get:
      summary: "Export several images"
      description: |
        Get a tarball containing all images and metadata for several image
        repositories.

        For each value of the `names` parameter: if it is a specific name and
        tag (e.g. `ubuntu:latest`), then only that image (and its parents) are
        returned; if it is an image ID, similarly only that image (and its parents)
        are returned and there would be no names referenced in the 'repositories'
        file for this image ID.

        For details on the format, see the [export image endpoint](#operation/ImageGet).
      operationId: "ImageGetAll"
      produces:
        - "application/x-tar"
      responses:
        200:
          description: "no error"
          schema:
            type: "string"
            format: "binary"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "names"
          in: "query"
          description: "Image names to filter by"
          type: "array"
          items:
            type: "string"
      tags: ["Image"]
  /images/load:
    post:
      summary: "Import images"
      description: |
        Load a set of images and tags into a repository.

        For details on the format, see the [export image endpoint](#operation/ImageGet).
      operationId: "ImageLoad"
      consumes:
        - "application/x-tar"
      produces:
        - "application/json"
      responses:
        200:
          description: "no error"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "imagesTarball"
          in: "body"
          description: "Tar archive containing images"
          schema:
            type: "string"
            format: "binary"
        - name: "quiet"
          in: "query"
          description: "Suppress progress details during load."
          type: "boolean"
          default: false
      tags: ["Image"]
  /containers/{id}/exec:
    post:
      summary: "Create an exec instance"
      description: "Run a command inside a running container."
      operationId: "ContainerExec"
      consumes:
        - "application/json"
      produces:
        - "application/json"
      responses:
        201:
          description: "no error"
          schema:
            $ref: "#/definitions/IdResponse"
        404:
          description: "no such container"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such container: c2ada9df5af8"
        409:
          description: "container is paused"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "execConfig"
          in: "body"
          description: "Exec configuration"
          schema:
            type: "object"
            title: "ExecConfig"
            properties:
              AttachStdin:
                type: "boolean"
                description: "Attach to `stdin` of the exec command."
              AttachStdout:
                type: "boolean"
                description: "Attach to `stdout` of the exec command."
              AttachStderr:
                type: "boolean"
                description: "Attach to `stderr` of the exec command."
              ConsoleSize:
                type: "array"
                description: "Initial console size, as an `[height, width]` array."
                x-nullable: true
                minItems: 2
                maxItems: 2
                items:
                  type: "integer"
                  minimum: 0
              DetachKeys:
                type: "string"
                description: |
                  Override the key sequence for detaching a container. Format is
                  a single character `[a-Z]` or `ctrl-<value>` where `<value>`
                  is one of: `a-z`, `@`, `^`, `[`, `,` or `_`.
              Tty:
                type: "boolean"
                description: "Allocate a pseudo-TTY."
              Env:
                description: |
                  A list of environment variables in the form `["VAR=value", ...]`.
                type: "array"
                items:
                  type: "string"
              Cmd:
                type: "array"
                description: "Command to run, as a string or array of strings."
                items:
                  type: "string"
              Privileged:
                type: "boolean"
                description: "Runs the exec process with extended privileges."
                default: false
              User:
                type: "string"
                description: |
                  The user, and optionally, group to run the exec process inside
                  the container. Format is one of: `user`, `user:group`, `uid`,
                  or `uid:gid`.
              WorkingDir:
                type: "string"
                description: |
                  The working directory for the exec process inside the container.
            example:
              AttachStdin: false
              AttachStdout: true
              AttachStderr: true
              DetachKeys: "ctrl-p,ctrl-q"
              Tty: false
              Cmd:
                - "date"
              Env:
                - "FOO=bar"
                - "BAZ=quux"
          required: true
        - name: "id"
          in: "path"
          description: "ID or name of container"
          type: "string"
          required: true
      tags: ["Exec"]
  /exec/{id}/start:
    post:
      summary: "Start an exec instance"
      description: |
        Starts a previously set up exec instance. If detach is true, this endpoint
        returns immediately after starting the command. Otherwise, it sets up an
        interactive session with the command.
      operationId: "ExecStart"
      consumes:
        - "application/json"
      produces:
        - "application/vnd.docker.raw-stream"
        - "application/vnd.docker.multiplexed-stream"
      responses:
        200:
          description: "No error"
        404:
          description: "No such exec instance"
          schema:
            $ref: "#/definitions/ErrorResponse"
        409:
          description: "Container is stopped or paused"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "execStartConfig"
          in: "body"
          schema:
            type: "object"
            title: "ExecStartConfig"
            properties:
              Detach:
                type: "boolean"
                description: "Detach from the command."
              Tty:
                type: "boolean"
                description: "Allocate a pseudo-TTY."
              ConsoleSize:
                type: "array"
                description: "Initial console size, as an `[height, width]` array."
                x-nullable: true
                minItems: 2
                maxItems: 2
                items:
                  type: "integer"
                  minimum: 0
            example:
              Detach: false
              Tty: true
              ConsoleSize: [80, 64]
        - name: "id"
          in: "path"
          description: "Exec instance ID"
          required: true
          type: "string"
      tags: ["Exec"]
  /exec/{id}/resize:
    post:
      summary: "Resize an exec instance"
      description: |
        Resize the TTY session used by an exec instance. This endpoint only works
        if `tty` was specified as part of creating and starting the exec instance.
      operationId: "ExecResize"
      responses:
        200:
          description: "No error"
        400:
          description: "bad parameter"
          schema:
            $ref: "#/definitions/ErrorResponse"
        404:
          description: "No such exec instance"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          description: "Exec instance ID"
          required: true
          type: "string"
        - name: "h"
          in: "query"
          description: "Height of the TTY session in characters"
          type: "integer"
        - name: "w"
          in: "query"
          description: "Width of the TTY session in characters"
          type: "integer"
      tags: ["Exec"]
  /exec/{id}/json:
    get:
      summary: "Inspect an exec instance"
      description: "Return low-level information about an exec instance."
      operationId: "ExecInspect"
      produces:
        - "application/json"
      responses:
        200:
          description: "No error"
          schema:
            type: "object"
            title: "ExecInspectResponse"
            properties:
              CanRemove:
                type: "boolean"
              DetachKeys:
                type: "string"
              ID:
                type: "string"
              Running:
                type: "boolean"
              ExitCode:
                type: "integer"
              ProcessConfig:
                $ref: "#/definitions/ProcessConfig"
              OpenStdin:
                type: "boolean"
              OpenStderr:
                type: "boolean"
              OpenStdout:
                type: "boolean"
              ContainerID:
                type: "string"
              Pid:
                type: "integer"
                description: "The system process ID for the exec process."
          examples:
            application/json:
              CanRemove: false
              ContainerID: "b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126"
              DetachKeys: ""
              ExitCode: 2
              ID: "f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b"
              OpenStderr: true
              OpenStdin: true
              OpenStdout: true
              ProcessConfig:
                arguments:
                  - "-c"
                  - "exit 2"
                entrypoint: "sh"
                privileged: false
                tty: true
                user: "1000"
              Running: false
              Pid: 42000
        404:
          description: "No such exec instance"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          description: "Exec instance ID"
          required: true
          type: "string"
      tags: ["Exec"]

  /volumes:
    get:
      summary: "List volumes"
      operationId: "VolumeList"
      produces: ["application/json"]
      responses:
        200:
          description: "Summary volume data that matches the query"
          schema:
            $ref: "#/definitions/VolumeListResponse"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "filters"
          in: "query"
          description: |
            JSON encoded value of the filters (a `map[string][]string`) to
            process on the volumes list. Available filters:

            - `dangling=<boolean>` When set to `true` (or `1`), returns all
               volumes that are not in use by a container. When set to `false`
               (or `0`), only volumes that are in use by one or more
               containers are returned.
            - `driver=<volume-driver-name>` Matches volumes based on their driver.
            - `label=<key>` or `label=<key>:<value>` Matches volumes based on
               the presence of a `label` alone or a `label` and a value.
            - `name=<volume-name>` Matches all or part of a volume name.
          type: "string"
          format: "json"
      tags: ["Volume"]

  /volumes/create:
    post:
      summary: "Create a volume"
      operationId: "VolumeCreate"
      consumes: ["application/json"]
      produces: ["application/json"]
      responses:
        201:
          description: "The volume was created successfully"
          schema:
            $ref: "#/definitions/Volume"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "volumeConfig"
          in: "body"
          required: true
          description: "Volume configuration"
          schema:
            $ref: "#/definitions/VolumeCreateOptions"
      tags: ["Volume"]

  /volumes/{name}:
    get:
      summary: "Inspect a volume"
      operationId: "VolumeInspect"
      produces: ["application/json"]
      responses:
        200:
          description: "No error"
          schema:
            $ref: "#/definitions/Volume"
        404:
          description: "No such volume"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "name"
          in: "path"
          required: true
          description: "Volume name or ID"
          type: "string"
      tags: ["Volume"]

    put:
      summary: |
        "Update a volume. Valid only for Swarm cluster volumes"
      operationId: "VolumeUpdate"
      consumes: ["application/json"]
      produces: ["application/json"]
      responses:
        200:
          description: "no error"
        400:
          description: "bad parameter"
          schema:
            $ref: "#/definitions/ErrorResponse"
        404:
          description: "no such volume"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "name"
          in: "path"
          description: "The name or ID of the volume"
          type: "string"
          required: true
        - name: "body"
          in: "body"
          schema:
            # though the schema for is an object that contains only a
            # ClusterVolumeSpec, wrapping the ClusterVolumeSpec in this object
            # means that if, later on, we support things like changing the
            # labels, we can do so without duplicating that information to the
            # ClusterVolumeSpec.
            type: "object"
            description: "Volume configuration"
            properties:
              Spec:
                $ref: "#/definitions/ClusterVolumeSpec"
          description: |
            The spec of the volume to update. Currently, only Availability may
            change. All other fields must remain unchanged.
        - name: "version"
          in: "query"
          description: |
            The version number of the volume being updated. This is required to
            avoid conflicting writes. Found in the volume's `ClusterVolume`
            field.
          type: "integer"
          format: "int64"
          required: true
      tags: ["Volume"]

    delete:
      summary: "Remove a volume"
      description: "Instruct the driver to remove the volume."
      operationId: "VolumeDelete"
      responses:
        204:
          description: "The volume was removed"
        404:
          description: "No such volume or volume driver"
          schema:
            $ref: "#/definitions/ErrorResponse"
        409:
          description: "Volume is in use and cannot be removed"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "name"
          in: "path"
          required: true
          description: "Volume name or ID"
          type: "string"
        - name: "force"
          in: "query"
          description: "Force the removal of the volume"
          type: "boolean"
          default: false
      tags: ["Volume"]

  /volumes/prune:
    post:
      summary: "Delete unused volumes"
      produces:
        - "application/json"
      operationId: "VolumePrune"
      parameters:
        - name: "filters"
          in: "query"
          description: |
            Filters to process on the prune list, encoded as JSON (a `map[string][]string`).

            Available filters:
            - `label` (`label=<key>`, `label=<key>=<value>`, `label!=<key>`, or `label!=<key>=<value>`) Prune volumes with (or without, in case `label!=...` is used) the specified labels.
            - `all` (`all=true`) - Consider all (local) volumes for pruning and not just anonymous volumes.
          type: "string"
      responses:
        200:
          description: "No error"
          schema:
            type: "object"
            title: "VolumePruneResponse"
            properties:
              VolumesDeleted:
                description: "Volumes that were deleted"
                type: "array"
                items:
                  type: "string"
              SpaceReclaimed:
                description: "Disk space reclaimed in bytes"
                type: "integer"
                format: "int64"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      tags: ["Volume"]
  /networks:
    get:
      summary: "List networks"
      description: |
        Returns a list of networks. For details on the format, see the
        [network inspect endpoint](#operation/NetworkInspect).

        Note that it uses a different, smaller representation of a network than
        inspecting a single network. For example, the list of containers attached
        to the network is not propagated in API versions 1.28 and up.
      operationId: "NetworkList"
      produces:
        - "application/json"
      responses:
        200:
          description: "No error"
          schema:
            type: "array"
            items:
              $ref: "#/definitions/Network"
          examples:
            application/json:
              - Name: "bridge"
                Id: "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566"
                Created: "2016-10-19T06:21:00.416543526Z"
                Scope: "local"
                Driver: "bridge"
                EnableIPv6: false
                Internal: false
                Attachable: false
                Ingress: false
                IPAM:
                  Driver: "default"
                  Config:
                    -
                      Subnet: "172.17.0.0/16"
                Options:
                  com.docker.network.bridge.default_bridge: "true"
                  com.docker.network.bridge.enable_icc: "true"
                  com.docker.network.bridge.enable_ip_masquerade: "true"
                  com.docker.network.bridge.host_binding_ipv4: "0.0.0.0"
                  com.docker.network.bridge.name: "docker0"
                  com.docker.network.driver.mtu: "1500"
              - Name: "none"
                Id: "e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794"
                Created: "0001-01-01T00:00:00Z"
                Scope: "local"
                Driver: "null"
                EnableIPv6: false
                Internal: false
                Attachable: false
                Ingress: false
                IPAM:
                  Driver: "default"
                  Config: []
                Containers: {}
                Options: {}
              - Name: "host"
                Id: "13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e"
                Created: "0001-01-01T00:00:00Z"
                Scope: "local"
                Driver: "host"
                EnableIPv6: false
                Internal: false
                Attachable: false
                Ingress: false
                IPAM:
                  Driver: "default"
                  Config: []
                Containers: {}
                Options: {}
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "filters"
          in: "query"
          description: |
            JSON encoded value of the filters (a `map[string][]string`) to process
            on the networks list.

            Available filters:

            - `dangling=<boolean>` When set to `true` (or `1`), returns all
               networks that are not in use by a container. When set to `false`
               (or `0`), only networks that are in use by one or more
               containers are returned.
            - `driver=<driver-name>` Matches a network's driver.
            - `id=<network-id>` Matches all or part of a network ID.
            - `label=<key>` or `label=<key>=<value>` of a network label.
            - `name=<network-name>` Matches all or part of a network name.
            - `scope=["swarm"|"global"|"local"]` Filters networks by scope (`swarm`, `global`, or `local`).
            - `type=["custom"|"builtin"]` Filters networks by type. The `custom` keyword returns all user-defined networks.
          type: "string"
      tags: ["Network"]

  /networks/{id}:
    get:
      summary: "Inspect a network"
      operationId: "NetworkInspect"
      produces:
        - "application/json"
      responses:
        200:
          description: "No error"
          schema:
            $ref: "#/definitions/Network"
        404:
          description: "Network not found"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          description: "Network ID or name"
          required: true
          type: "string"
        - name: "verbose"
          in: "query"
          description: "Detailed inspect output for troubleshooting"
          type: "boolean"
          default: false
        - name: "scope"
          in: "query"
          description: "Filter the network by scope (swarm, global, or local)"
          type: "string"
      tags: ["Network"]

    delete:
      summary: "Remove a network"
      operationId: "NetworkDelete"
      responses:
        204:
          description: "No error"
        403:
          description: "operation not supported for pre-defined networks"
          schema:
            $ref: "#/definitions/ErrorResponse"
        404:
          description: "no such network"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          description: "Network ID or name"
          required: true
          type: "string"
      tags: ["Network"]

  /networks/create:
    post:
      summary: "Create a network"
      operationId: "NetworkCreate"
      consumes:
        - "application/json"
      produces:
        - "application/json"
      responses:
        201:
          description: "No error"
          schema:
            type: "object"
            title: "NetworkCreateResponse"
            properties:
              Id:
                description: "The ID of the created network."
                type: "string"
              Warning:
                type: "string"
            example:
              Id: "22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30"
              Warning: ""
        403:
          description: "operation not supported for pre-defined networks"
          schema:
            $ref: "#/definitions/ErrorResponse"
        404:
          description: "plugin not found"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "networkConfig"
          in: "body"
          description: "Network configuration"
          required: true
          schema:
            type: "object"
            title: "NetworkCreateRequest"
            required: ["Name"]
            properties:
              Name:
                description: "The network's name."
                type: "string"
              CheckDuplicate:
                description: |
                  Check for networks with duplicate names. Since Network is
                  primarily keyed based on a random ID and not on the name, and
                  network name is strictly a user-friendly alias to the network
                  which is uniquely identified using ID, there is no guaranteed
                  way to check for duplicates. CheckDuplicate is there to provide
                  a best effort checking of any networks which has the same name
                  but it is not guaranteed to catch all name collisions.
                type: "boolean"
              Driver:
                description: "Name of the network driver plugin to use."
                type: "string"
                default: "bridge"
              Internal:
                description: "Restrict external access to the network."
                type: "boolean"
              Attachable:
                description: |
                  Globally scoped network is manually attachable by regular
                  containers from workers in swarm mode.
                type: "boolean"
              Ingress:
                description: |
                  Ingress network is the network which provides the routing-mesh
                  in swarm mode.
                type: "boolean"
              IPAM:
                description: "Optional custom IP scheme for the network."
                $ref: "#/definitions/IPAM"
              EnableIPv6:
                description: "Enable IPv6 on the network."
                type: "boolean"
              Options:
                description: "Network specific options to be used by the drivers."
                type: "object"
                additionalProperties:
                  type: "string"
              Labels:
                description: "User-defined key/value metadata."
                type: "object"
                additionalProperties:
                  type: "string"
            example:
              Name: "isolated_nw"
              CheckDuplicate: false
              Driver: "bridge"
              EnableIPv6: true
              IPAM:
                Driver: "default"
                Config:
                  - Subnet: "172.20.0.0/16"
                    IPRange: "172.20.10.0/24"
                    Gateway: "172.20.10.11"
                  - Subnet: "2001:db8:abcd::/64"
                    Gateway: "2001:db8:abcd::1011"
                Options:
                  foo: "bar"
              Internal: true
              Attachable: false
              Ingress: false
              Options:
                com.docker.network.bridge.default_bridge: "true"
                com.docker.network.bridge.enable_icc: "true"
                com.docker.network.bridge.enable_ip_masquerade: "true"
                com.docker.network.bridge.host_binding_ipv4: "0.0.0.0"
                com.docker.network.bridge.name: "docker0"
                com.docker.network.driver.mtu: "1500"
              Labels:
                com.example.some-label: "some-value"
                com.example.some-other-label: "some-other-value"
      tags: ["Network"]

  /networks/{id}/connect:
    post:
      summary: "Connect a container to a network"
      operationId: "NetworkConnect"
      consumes:
        - "application/json"
      responses:
        200:
          description: "No error"
        403:
          description: "Operation not supported for swarm scoped networks"
          schema:
            $ref: "#/definitions/ErrorResponse"
        404:
          description: "Network or container not found"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          description: "Network ID or name"
          required: true
          type: "string"
        - name: "container"
          in: "body"
          required: true
          schema:
            type: "object"
            title: "NetworkConnectRequest"
            properties:
              Container:
                type: "string"
                description: "The ID or name of the container to connect to the network."
              EndpointConfig:
                $ref: "#/definitions/EndpointSettings"
            example:
              Container: "3613f73ba0e4"
              EndpointConfig:
                IPAMConfig:
                  IPv4Address: "172.24.56.89"
                  IPv6Address: "2001:db8::5689"
      tags: ["Network"]

  /networks/{id}/disconnect:
    post:
      summary: "Disconnect a container from a network"
      operationId: "NetworkDisconnect"
      consumes:
        - "application/json"
      responses:
        200:
          description: "No error"
        403:
          description: "Operation not supported for swarm scoped networks"
          schema:
            $ref: "#/definitions/ErrorResponse"
        404:
          description: "Network or container not found"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          description: "Network ID or name"
          required: true
          type: "string"
        - name: "container"
          in: "body"
          required: true
          schema:
            type: "object"
            title: "NetworkDisconnectRequest"
            properties:
              Container:
                type: "string"
                description: |
                  The ID or name of the container to disconnect from the network.
              Force:
                type: "boolean"
                description: |
                  Force the container to disconnect from the network.
      tags: ["Network"]
  /networks/prune:
    post:
      summary: "Delete unused networks"
      produces:
        - "application/json"
      operationId: "NetworkPrune"
      parameters:
        - name: "filters"
          in: "query"
          description: |
            Filters to process on the prune list, encoded as JSON (a `map[string][]string`).

            Available filters:
            - `until=<timestamp>` Prune networks created before this timestamp. The `<timestamp>` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.
            - `label` (`label=<key>`, `label=<key>=<value>`, `label!=<key>`, or `label!=<key>=<value>`) Prune networks with (or without, in case `label!=...` is used) the specified labels.
          type: "string"
      responses:
        200:
          description: "No error"
          schema:
            type: "object"
            title: "NetworkPruneResponse"
            properties:
              NetworksDeleted:
                description: "Networks that were deleted"
                type: "array"
                items:
                  type: "string"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      tags: ["Network"]
  /plugins:
    get:
      summary: "List plugins"
      operationId: "PluginList"
      description: "Returns information about installed plugins."
      produces: ["application/json"]
      responses:
        200:
          description: "No error"
          schema:
            type: "array"
            items:
              $ref: "#/definitions/Plugin"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "filters"
          in: "query"
          type: "string"
          description: |
            A JSON encoded value of the filters (a `map[string][]string`) to
            process on the plugin list.

            Available filters:

            - `capability=<capability name>`
            - `enable=<true>|<false>`
      tags: ["Plugin"]

  /plugins/privileges:
    get:
      summary: "Get plugin privileges"
      operationId: "GetPluginPrivileges"
      responses:
        200:
          description: "no error"
          schema:
            type: "array"
            items:
              $ref: "#/definitions/PluginPrivilege"
            example:
              - Name: "network"
                Description: ""
                Value:
                  - "host"
              - Name: "mount"
                Description: ""
                Value:
                  - "/data"
              - Name: "device"
                Description: ""
                Value:
                  - "/dev/cpu_dma_latency"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "remote"
          in: "query"
          description: |
            The name of the plugin. The `:latest` tag is optional, and is the
            default if omitted.
          required: true
          type: "string"
      tags:
        - "Plugin"

  /plugins/pull:
    post:
      summary: "Install a plugin"
      operationId: "PluginPull"
      description: |
        Pulls and installs a plugin. After the plugin is installed, it can be
        enabled using the [`POST /plugins/{name}/enable` endpoint](#operation/PostPluginsEnable).
      produces:
        - "application/json"
      responses:
        204:
          description: "no error"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "remote"
          in: "query"
          description: |
            Remote reference for plugin to install.

            The `:latest` tag is optional, and is used as the default if omitted.
          required: true
          type: "string"
        - name: "name"
          in: "query"
          description: |
            Local name for the pulled plugin.

            The `:latest` tag is optional, and is used as the default if omitted.
          required: false
          type: "string"
        - name: "X-Registry-Auth"
          in: "header"
          description: |
            A base64url-encoded auth configuration to use when pulling a plugin
            from a registry.

            Refer to the [authentication section](#section/Authentication) for
            details.
          type: "string"
        - name: "body"
          in: "body"
          schema:
            type: "array"
            items:
              $ref: "#/definitions/PluginPrivilege"
            example:
              - Name: "network"
                Description: ""
                Value:
                  - "host"
              - Name: "mount"
                Description: ""
                Value:
                  - "/data"
              - Name: "device"
                Description: ""
                Value:
                  - "/dev/cpu_dma_latency"
      tags: ["Plugin"]
  /plugins/{name}/json:
    get:
      summary: "Inspect a plugin"
      operationId: "PluginInspect"
      responses:
        200:
          description: "no error"
          schema:
            $ref: "#/definitions/Plugin"
        404:
          description: "plugin is not installed"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "name"
          in: "path"
          description: |
            The name of the plugin. The `:latest` tag is optional, and is the
            default if omitted.
          required: true
          type: "string"
      tags: ["Plugin"]
  /plugins/{name}:
    delete:
      summary: "Remove a plugin"
      operationId: "PluginDelete"
      responses:
        200:
          description: "no error"
          schema:
            $ref: "#/definitions/Plugin"
        404:
          description: "plugin is not installed"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "name"
          in: "path"
          description: |
            The name of the plugin. The `:latest` tag is optional, and is the
            default if omitted.
          required: true
          type: "string"
        - name: "force"
          in: "query"
          description: |
            Disable the plugin before removing. This may result in issues if the
            plugin is in use by a container.
          type: "boolean"
          default: false
      tags: ["Plugin"]
  /plugins/{name}/enable:
    post:
      summary: "Enable a plugin"
      operationId: "PluginEnable"
      responses:
        200:
          description: "no error"
        404:
          description: "plugin is not installed"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "name"
          in: "path"
          description: |
            The name of the plugin. The `:latest` tag is optional, and is the
            default if omitted.
          required: true
          type: "string"
        - name: "timeout"
          in: "query"
          description: "Set the HTTP client timeout (in seconds)"
          type: "integer"
          default: 0
      tags: ["Plugin"]
  /plugins/{name}/disable:
    post:
      summary: "Disable a plugin"
      operationId: "PluginDisable"
      responses:
        200:
          description: "no error"
        404:
          description: "plugin is not installed"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "name"
          in: "path"
          description: |
            The name of the plugin. The `:latest` tag is optional, and is the
            default if omitted.
          required: true
          type: "string"
      tags: ["Plugin"]
  /plugins/{name}/upgrade:
    post:
      summary: "Upgrade a plugin"
      operationId: "PluginUpgrade"
      responses:
        204:
          description: "no error"
        404:
          description: "plugin not installed"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "name"
          in: "path"
          description: |
            The name of the plugin. The `:latest` tag is optional, and is the
            default if omitted.
          required: true
          type: "string"
        - name: "remote"
          in: "query"
          description: |
            Remote reference to upgrade to.

            The `:latest` tag is optional, and is used as the default if omitted.
          required: true
          type: "string"
        - name: "X-Registry-Auth"
          in: "header"
          description: |
            A base64url-encoded auth configuration to use when pulling a plugin
            from a registry.

            Refer to the [authentication section](#section/Authentication) for
            details.
          type: "string"
        - name: "body"
          in: "body"
          schema:
            type: "array"
            items:
              $ref: "#/definitions/PluginPrivilege"
            example:
              - Name: "network"
                Description: ""
                Value:
                  - "host"
              - Name: "mount"
                Description: ""
                Value:
                  - "/data"
              - Name: "device"
                Description: ""
                Value:
                  - "/dev/cpu_dma_latency"
      tags: ["Plugin"]
  /plugins/create:
    post:
      summary: "Create a plugin"
      operationId: "PluginCreate"
      consumes:
        - "application/x-tar"
      responses:
        204:
          description: "no error"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "name"
          in: "query"
          description: |
            The name of the plugin. The `:latest` tag is optional, and is the
            default if omitted.
          required: true
          type: "string"
        - name: "tarContext"
          in: "body"
          description: "Path to tar containing plugin rootfs and manifest"
          schema:
            type: "string"
            format: "binary"
      tags: ["Plugin"]
  /plugins/{name}/push:
    post:
      summary: "Push a plugin"
      operationId: "PluginPush"
      description: |
        Push a plugin to the registry.
      parameters:
        - name: "name"
          in: "path"
          description: |
            The name of the plugin. The `:latest` tag is optional, and is the
            default if omitted.
          required: true
          type: "string"
      responses:
        200:
          description: "no error"
        404:
          description: "plugin not installed"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      tags: ["Plugin"]
  /plugins/{name}/set:
    post:
      summary: "Configure a plugin"
      operationId: "PluginSet"
      consumes:
        - "application/json"
      parameters:
        - name: "name"
          in: "path"
          description: |
            The name of the plugin. The `:latest` tag is optional, and is the
            default if omitted.
          required: true
          type: "string"
        - name: "body"
          in: "body"
          schema:
            type: "array"
            items:
              type: "string"
            example: ["DEBUG=1"]
      responses:
        204:
          description: "No error"
        404:
          description: "Plugin not installed"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      tags: ["Plugin"]
  /nodes:
    get:
      summary: "List nodes"
      operationId: "NodeList"
      responses:
        200:
          description: "no error"
          schema:
            type: "array"
            items:
              $ref: "#/definitions/Node"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "filters"
          in: "query"
          description: |
            Filters to process on the nodes list, encoded as JSON (a `map[string][]string`).

            Available filters:
            - `id=<node id>`
            - `label=<engine label>`
            - `membership=`(`accepted`|`pending`)`
            - `name=<node name>`
            - `node.label=<node label>`
            - `role=`(`manager`|`worker`)`
          type: "string"
      tags: ["Node"]
  /nodes/{id}:
    get:
      summary: "Inspect a node"
      operationId: "NodeInspect"
      responses:
        200:
          description: "no error"
          schema:
            $ref: "#/definitions/Node"
        404:
          description: "no such node"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          description: "The ID or name of the node"
          type: "string"
          required: true
      tags: ["Node"]
    delete:
      summary: "Delete a node"
      operationId: "NodeDelete"
      responses:
        200:
          description: "no error"
        404:
          description: "no such node"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          description: "The ID or name of the node"
          type: "string"
          required: true
        - name: "force"
          in: "query"
          description: "Force remove a node from the swarm"
          default: false
          type: "boolean"
      tags: ["Node"]
  /nodes/{id}/update:
    post:
      summary: "Update a node"
      operationId: "NodeUpdate"
      responses:
        200:
          description: "no error"
        400:
          description: "bad parameter"
          schema:
            $ref: "#/definitions/ErrorResponse"
        404:
          description: "no such node"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          description: "The ID of the node"
          type: "string"
          required: true
        - name: "body"
          in: "body"
          schema:
            $ref: "#/definitions/NodeSpec"
        - name: "version"
          in: "query"
          description: |
            The version number of the node object being updated. This is required
            to avoid conflicting writes.
          type: "integer"
          format: "int64"
          required: true
      tags: ["Node"]
  /swarm:
    get:
      summary: "Inspect swarm"
      operationId: "SwarmInspect"
      responses:
        200:
          description: "no error"
          schema:
            $ref: "#/definitions/Swarm"
        404:
          description: "no such swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      tags: ["Swarm"]
  /swarm/init:
    post:
      summary: "Initialize a new swarm"
      operationId: "SwarmInit"
      produces:
        - "application/json"
        - "text/plain"
      responses:
        200:
          description: "no error"
          schema:
            description: "The node ID"
            type: "string"
            example: "7v2t30z9blmxuhnyo6s4cpenp"
        400:
          description: "bad parameter"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is already part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "body"
          in: "body"
          required: true
          schema:
            type: "object"
            title: "SwarmInitRequest"
            properties:
              ListenAddr:
                description: |
                  Listen address used for inter-manager communication, as well
                  as determining the networking interface used for the VXLAN
                  Tunnel Endpoint (VTEP). This can either be an address/port
                  combination in the form `192.168.1.1:4567`, or an interface
                  followed by a port number, like `eth0:4567`. If the port number
                  is omitted, the default swarm listening port is used.
                type: "string"
              AdvertiseAddr:
                description: |
                  Externally reachable address advertised to other nodes. This
                  can either be an address/port combination in the form
                  `192.168.1.1:4567`, or an interface followed by a port number,
                  like `eth0:4567`. If the port number is omitted, the port
                  number from the listen address is used. If `AdvertiseAddr` is
                  not specified, it will be automatically detected when possible.
                type: "string"
              DataPathAddr:
                description: |
                  Address or interface to use for data path traffic (format:
                  `<ip|interface>`), for example,  `192.168.1.1`, or an interface,
                  like `eth0`. If `DataPathAddr` is unspecified, the same address
                  as `AdvertiseAddr` is used.

                  The `DataPathAddr` specifies the address that global scope
                  network drivers will publish towards other  nodes in order to
                  reach the containers running on this node. Using this parameter
                  it is possible to separate the container data traffic from the
                  management traffic of the cluster.
                type: "string"
              DataPathPort:
                description: |
                  DataPathPort specifies the data path port number for data traffic.
                  Acceptable port range is 1024 to 49151.
                  if no port is set or is set to 0, default port 4789 will be used.
                type: "integer"
                format: "uint32"
              DefaultAddrPool:
                description: |
                  Default Address Pool specifies default subnet pools for global
                  scope networks.
                type: "array"
                items:
                  type: "string"
                  example: ["10.10.0.0/16", "20.20.0.0/16"]
              ForceNewCluster:
                description: "Force creation of a new swarm."
                type: "boolean"
              SubnetSize:
                description: |
                  SubnetSize specifies the subnet size of the networks created
                  from the default subnet pool.
                type: "integer"
                format: "uint32"
              Spec:
                $ref: "#/definitions/SwarmSpec"
            example:
              ListenAddr: "0.0.0.0:2377"
              AdvertiseAddr: "192.168.1.1:2377"
              DataPathPort: 4789
              DefaultAddrPool: ["10.10.0.0/8", "20.20.0.0/8"]
              SubnetSize: 24
              ForceNewCluster: false
              Spec:
                Orchestration: {}
                Raft: {}
                Dispatcher: {}
                CAConfig: {}
                EncryptionConfig:
                  AutoLockManagers: false
      tags: ["Swarm"]
  /swarm/join:
    post:
      summary: "Join an existing swarm"
      operationId: "SwarmJoin"
      responses:
        200:
          description: "no error"
        400:
          description: "bad parameter"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is already part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "body"
          in: "body"
          required: true
          schema:
            type: "object"
            title: "SwarmJoinRequest"
            properties:
              ListenAddr:
                description: |
                  Listen address used for inter-manager communication if the node
                  gets promoted to manager, as well as determining the networking
                  interface used for the VXLAN Tunnel Endpoint (VTEP).
                type: "string"
              AdvertiseAddr:
                description: |
                  Externally reachable address advertised to other nodes. This
                  can either be an address/port combination in the form
                  `192.168.1.1:4567`, or an interface followed by a port number,
                  like `eth0:4567`. If the port number is omitted, the port
                  number from the listen address is used. If `AdvertiseAddr` is
                  not specified, it will be automatically detected when possible.
                type: "string"
              DataPathAddr:
                description: |
                  Address or interface to use for data path traffic (format:
                  `<ip|interface>`), for example,  `192.168.1.1`, or an interface,
                  like `eth0`. If `DataPathAddr` is unspecified, the same address
                  as `AdvertiseAddr` is used.

                  The `DataPathAddr` specifies the address that global scope
                  network drivers will publish towards other nodes in order to
                  reach the containers running on this node. Using this parameter
                  it is possible to separate the container data traffic from the
                  management traffic of the cluster.

                type: "string"
              RemoteAddrs:
                description: |
                  Addresses of manager nodes already participating in the swarm.
                type: "array"
                items:
                  type: "string"
              JoinToken:
                description: "Secret token for joining this swarm."
                type: "string"
            example:
              ListenAddr: "0.0.0.0:2377"
              AdvertiseAddr: "192.168.1.1:2377"
              RemoteAddrs:
                - "node1:2377"
              JoinToken: "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2"
      tags: ["Swarm"]
  /swarm/leave:
    post:
      summary: "Leave a swarm"
      operationId: "SwarmLeave"
      responses:
        200:
          description: "no error"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "force"
          description: |
            Force leave swarm, even if this is the last manager or that it will
            break the cluster.
          in: "query"
          type: "boolean"
          default: false
      tags: ["Swarm"]
  /swarm/update:
    post:
      summary: "Update a swarm"
      operationId: "SwarmUpdate"
      responses:
        200:
          description: "no error"
        400:
          description: "bad parameter"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "body"
          in: "body"
          required: true
          schema:
            $ref: "#/definitions/SwarmSpec"
        - name: "version"
          in: "query"
          description: |
            The version number of the swarm object being updated. This is
            required to avoid conflicting writes.
          type: "integer"
          format: "int64"
          required: true
        - name: "rotateWorkerToken"
          in: "query"
          description: "Rotate the worker join token."
          type: "boolean"
          default: false
        - name: "rotateManagerToken"
          in: "query"
          description: "Rotate the manager join token."
          type: "boolean"
          default: false
        - name: "rotateManagerUnlockKey"
          in: "query"
          description: "Rotate the manager unlock key."
          type: "boolean"
          default: false
      tags: ["Swarm"]
  /swarm/unlockkey:
    get:
      summary: "Get the unlock key"
      operationId: "SwarmUnlockkey"
      consumes:
        - "application/json"
      responses:
        200:
          description: "no error"
          schema:
            type: "object"
            title: "UnlockKeyResponse"
            properties:
              UnlockKey:
                description: "The swarm's unlock key."
                type: "string"
            example:
              UnlockKey: "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      tags: ["Swarm"]
  /swarm/unlock:
    post:
      summary: "Unlock a locked manager"
      operationId: "SwarmUnlock"
      consumes:
        - "application/json"
      produces:
        - "application/json"
      parameters:
        - name: "body"
          in: "body"
          required: true
          schema:
            type: "object"
            title: "SwarmUnlockRequest"
            properties:
              UnlockKey:
                description: "The swarm's unlock key."
                type: "string"
            example:
              UnlockKey: "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8"
      responses:
        200:
          description: "no error"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      tags: ["Swarm"]
  /services:
    get:
      summary: "List services"
      operationId: "ServiceList"
      responses:
        200:
          description: "no error"
          schema:
            type: "array"
            items:
              $ref: "#/definitions/Service"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "filters"
          in: "query"
          type: "string"
          description: |
            A JSON encoded value of the filters (a `map[string][]string`) to
            process on the services list.

            Available filters:

            - `id=<service id>`
            - `label=<service label>`
            - `mode=["replicated"|"global"]`
            - `name=<service name>`
        - name: "status"
          in: "query"
          type: "boolean"
          description: |
            Include service status, with count of running and desired tasks.
      tags: ["Service"]
  /services/create:
    post:
      summary: "Create a service"
      operationId: "ServiceCreate"
      consumes:
        - "application/json"
      produces:
        - "application/json"
      responses:
        201:
          description: "no error"
          schema:
            type: "object"
            title: "ServiceCreateResponse"
            properties:
              ID:
                description: "The ID of the created service."
                type: "string"
              Warning:
                description: "Optional warning message"
                type: "string"
            example:
              ID: "ak7w3gjqoa3kuz8xcpnyy0pvl"
              Warning: "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found"
        400:
          description: "bad parameter"
          schema:
            $ref: "#/definitions/ErrorResponse"
        403:
          description: "network is not eligible for services"
          schema:
            $ref: "#/definitions/ErrorResponse"
        409:
          description: "name conflicts with an existing service"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "body"
          in: "body"
          required: true
          schema:
            allOf:
              - $ref: "#/definitions/ServiceSpec"
              - type: "object"
                example:
                  Name: "web"
                  TaskTemplate:
                    ContainerSpec:
                      Image: "nginx:alpine"
                      Mounts:
                        -
                          ReadOnly: true
                          Source: "web-data"
                          Target: "/usr/share/nginx/html"
                          Type: "volume"
                          VolumeOptions:
                            DriverConfig: {}
                            Labels:
                              com.example.something: "something-value"
                      Hosts: ["10.10.10.10 host1", "ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 host2"]
                      User: "33"
                      DNSConfig:
                        Nameservers: ["8.8.8.8"]
                        Search: ["example.org"]
                        Options: ["timeout:3"]
                      Secrets:
                        -
                          File:
                            Name: "www.example.org.key"
                            UID: "33"
                            GID: "33"
                            Mode: 384
                          SecretID: "fpjqlhnwb19zds35k8wn80lq9"
                          SecretName: "example_org_domain_key"
                    LogDriver:
                      Name: "json-file"
                      Options:
                        max-file: "3"
                        max-size: "10M"
                    Placement: {}
                    Resources:
                      Limits:
                        MemoryBytes: 104857600
                      Reservations: {}
                    RestartPolicy:
                      Condition: "on-failure"
                      Delay: 10000000000
                      MaxAttempts: 10
                  Mode:
                    Replicated:
                      Replicas: 4
                  UpdateConfig:
                    Parallelism: 2
                    Delay: 1000000000
                    FailureAction: "pause"
                    Monitor: 15000000000
                    MaxFailureRatio: 0.15
                  RollbackConfig:
                    Parallelism: 1
                    Delay: 1000000000
                    FailureAction: "pause"
                    Monitor: 15000000000
                    MaxFailureRatio: 0.15
                  EndpointSpec:
                    Ports:
                      -
                        Protocol: "tcp"
                        PublishedPort: 8080
                        TargetPort: 80
                  Labels:
                    foo: "bar"
        - name: "X-Registry-Auth"
          in: "header"
          description: |
            A base64url-encoded auth configuration for pulling from private
            registries.

            Refer to the [authentication section](#section/Authentication) for
            details.
          type: "string"
      tags: ["Service"]
  /services/{id}:
    get:
      summary: "Inspect a service"
      operationId: "ServiceInspect"
      responses:
        200:
          description: "no error"
          schema:
            $ref: "#/definitions/Service"
        404:
          description: "no such service"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          description: "ID or name of service."
          required: true
          type: "string"
        - name: "insertDefaults"
          in: "query"
          description: "Fill empty fields with default values."
          type: "boolean"
          default: false
      tags: ["Service"]
    delete:
      summary: "Delete a service"
      operationId: "ServiceDelete"
      responses:
        200:
          description: "no error"
        404:
          description: "no such service"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          description: "ID or name of service."
          required: true
          type: "string"
      tags: ["Service"]
  /services/{id}/update:
    post:
      summary: "Update a service"
      operationId: "ServiceUpdate"
      consumes: ["application/json"]
      produces: ["application/json"]
      responses:
        200:
          description: "no error"
          schema:
            $ref: "#/definitions/ServiceUpdateResponse"
        400:
          description: "bad parameter"
          schema:
            $ref: "#/definitions/ErrorResponse"
        404:
          description: "no such service"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          description: "ID or name of service."
          required: true
          type: "string"
        - name: "body"
          in: "body"
          required: true
          schema:
            allOf:
              - $ref: "#/definitions/ServiceSpec"
              - type: "object"
                example:
                  Name: "top"
                  TaskTemplate:
                    ContainerSpec:
                      Image: "busybox"
                      Args:
                        - "top"
                    Resources:
                      Limits: {}
                      Reservations: {}
                    RestartPolicy:
                      Condition: "any"
                      MaxAttempts: 0
                    Placement: {}
                    ForceUpdate: 0
                  Mode:
                    Replicated:
                      Replicas: 1
                  UpdateConfig:
                    Parallelism: 2
                    Delay: 1000000000
                    FailureAction: "pause"
                    Monitor: 15000000000
                    MaxFailureRatio: 0.15
                  RollbackConfig:
                    Parallelism: 1
                    Delay: 1000000000
                    FailureAction: "pause"
                    Monitor: 15000000000
                    MaxFailureRatio: 0.15
                  EndpointSpec:
                    Mode: "vip"

        - name: "version"
          in: "query"
          description: |
            The version number of the service object being updated. This is
            required to avoid conflicting writes.
            This version number should be the value as currently set on the
            service *before* the update. You can find the current version by
            calling `GET /services/{id}`
          required: true
          type: "integer"
        - name: "registryAuthFrom"
          in: "query"
          description: |
            If the `X-Registry-Auth` header is not specified, this parameter
            indicates where to find registry authorization credentials.
          type: "string"
          enum: ["spec", "previous-spec"]
          default: "spec"
        - name: "rollback"
          in: "query"
          description: |
            Set to this parameter to `previous` to cause a server-side rollback
            to the previous service spec. The supplied spec will be ignored in
            this case.
          type: "string"
        - name: "X-Registry-Auth"
          in: "header"
          description: |
            A base64url-encoded auth configuration for pulling from private
            registries.

            Refer to the [authentication section](#section/Authentication) for
            details.
          type: "string"

      tags: ["Service"]
  /services/{id}/logs:
    get:
      summary: "Get service logs"
      description: |
        Get `stdout` and `stderr` logs from a service. See also
        [`/containers/{id}/logs`](#operation/ContainerLogs).

        **Note**: This endpoint works only for services with the `local`,
        `json-file` or `journald` logging drivers.
      produces:
        - "application/vnd.docker.raw-stream"
        - "application/vnd.docker.multiplexed-stream"
      operationId: "ServiceLogs"
      responses:
        200:
          description: "logs returned as a stream in response body"
          schema:
            type: "string"
            format: "binary"
        404:
          description: "no such service"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such service: c2ada9df5af8"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID or name of the service"
          type: "string"
        - name: "details"
          in: "query"
          description: "Show service context and extra details provided to logs."
          type: "boolean"
          default: false
        - name: "follow"
          in: "query"
          description: "Keep connection after returning logs."
          type: "boolean"
          default: false
        - name: "stdout"
          in: "query"
          description: "Return logs from `stdout`"
          type: "boolean"
          default: false
        - name: "stderr"
          in: "query"
          description: "Return logs from `stderr`"
          type: "boolean"
          default: false
        - name: "since"
          in: "query"
          description: "Only return logs since this time, as a UNIX timestamp"
          type: "integer"
          default: 0
        - name: "timestamps"
          in: "query"
          description: "Add timestamps to every log line"
          type: "boolean"
          default: false
        - name: "tail"
          in: "query"
          description: |
            Only return this number of log lines from the end of the logs.
            Specify as an integer or `all` to output all log lines.
          type: "string"
          default: "all"
      tags: ["Service"]
  /tasks:
    get:
      summary: "List tasks"
      operationId: "TaskList"
      produces:
        - "application/json"
      responses:
        200:
          description: "no error"
          schema:
            type: "array"
            items:
              $ref: "#/definitions/Task"
            example:
              - ID: "0kzzo1i0y4jz6027t0k7aezc7"
                Version:
                  Index: 71
                CreatedAt: "2016-06-07T21:07:31.171892745Z"
                UpdatedAt: "2016-06-07T21:07:31.376370513Z"
                Spec:
                  ContainerSpec:
                    Image: "redis"
                  Resources:
                    Limits: {}
                    Reservations: {}
                  RestartPolicy:
                    Condition: "any"
                    MaxAttempts: 0
                  Placement: {}
                ServiceID: "9mnpnzenvg8p8tdbtq4wvbkcz"
                Slot: 1
                NodeID: "60gvrl6tm78dmak4yl7srz94v"
                Status:
                  Timestamp: "2016-06-07T21:07:31.290032978Z"
                  State: "running"
                  Message: "started"
                  ContainerStatus:
                    ContainerID: "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035"
                    PID: 677
                DesiredState: "running"
                NetworksAttachments:
                  - Network:
                      ID: "4qvuz4ko70xaltuqbt8956gd1"
                      Version:
                        Index: 18
                      CreatedAt: "2016-06-07T20:31:11.912919752Z"
                      UpdatedAt: "2016-06-07T21:07:29.955277358Z"
                      Spec:
                        Name: "ingress"
                        Labels:
                          com.docker.swarm.internal: "true"
                        DriverConfiguration: {}
                        IPAMOptions:
                          Driver: {}
                          Configs:
                            - Subnet: "10.255.0.0/16"
                              Gateway: "10.255.0.1"
                      DriverState:
                        Name: "overlay"
                        Options:
                          com.docker.network.driver.overlay.vxlanid_list: "256"
                      IPAMOptions:
                        Driver:
                          Name: "default"
                        Configs:
                          - Subnet: "10.255.0.0/16"
                            Gateway: "10.255.0.1"
                    Addresses:
                      - "10.255.0.10/16"
              - ID: "1yljwbmlr8er2waf8orvqpwms"
                Version:
                  Index: 30
                CreatedAt: "2016-06-07T21:07:30.019104782Z"
                UpdatedAt: "2016-06-07T21:07:30.231958098Z"
                Name: "hopeful_cori"
                Spec:
                  ContainerSpec:
                    Image: "redis"
                  Resources:
                    Limits: {}
                    Reservations: {}
                  RestartPolicy:
                    Condition: "any"
                    MaxAttempts: 0
                  Placement: {}
                ServiceID: "9mnpnzenvg8p8tdbtq4wvbkcz"
                Slot: 1
                NodeID: "60gvrl6tm78dmak4yl7srz94v"
                Status:
                  Timestamp: "2016-06-07T21:07:30.202183143Z"
                  State: "shutdown"
                  Message: "shutdown"
                  ContainerStatus:
                    ContainerID: "1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213"
                DesiredState: "shutdown"
                NetworksAttachments:
                  - Network:
                      ID: "4qvuz4ko70xaltuqbt8956gd1"
                      Version:
                        Index: 18
                      CreatedAt: "2016-06-07T20:31:11.912919752Z"
                      UpdatedAt: "2016-06-07T21:07:29.955277358Z"
                      Spec:
                        Name: "ingress"
                        Labels:
                          com.docker.swarm.internal: "true"
                        DriverConfiguration: {}
                        IPAMOptions:
                          Driver: {}
                          Configs:
                            - Subnet: "10.255.0.0/16"
                              Gateway: "10.255.0.1"
                      DriverState:
                        Name: "overlay"
                        Options:
                          com.docker.network.driver.overlay.vxlanid_list: "256"
                      IPAMOptions:
                        Driver:
                          Name: "default"
                        Configs:
                          - Subnet: "10.255.0.0/16"
                            Gateway: "10.255.0.1"
                    Addresses:
                      - "10.255.0.5/16"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "filters"
          in: "query"
          type: "string"
          description: |
            A JSON encoded value of the filters (a `map[string][]string`) to
            process on the tasks list.

            Available filters:

            - `desired-state=(running | shutdown | accepted)`
            - `id=<task id>`
            - `label=key` or `label="key=value"`
            - `name=<task name>`
            - `node=<node id or name>`
            - `service=<service name>`
      tags: ["Task"]
  /tasks/{id}:
    get:
      summary: "Inspect a task"
      operationId: "TaskInspect"
      produces:
        - "application/json"
      responses:
        200:
          description: "no error"
          schema:
            $ref: "#/definitions/Task"
        404:
          description: "no such task"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          description: "ID of the task"
          required: true
          type: "string"
      tags: ["Task"]
  /tasks/{id}/logs:
    get:
      summary: "Get task logs"
      description: |
        Get `stdout` and `stderr` logs from a task.
        See also [`/containers/{id}/logs`](#operation/ContainerLogs).

        **Note**: This endpoint works only for services with the `local`,
        `json-file` or `journald` logging drivers.
      operationId: "TaskLogs"
      produces:
        - "application/vnd.docker.raw-stream"
        - "application/vnd.docker.multiplexed-stream"
      responses:
        200:
          description: "logs returned as a stream in response body"
          schema:
            type: "string"
            format: "binary"
        404:
          description: "no such task"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such task: c2ada9df5af8"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID of the task"
          type: "string"
        - name: "details"
          in: "query"
          description: "Show task context and extra details provided to logs."
          type: "boolean"
          default: false
        - name: "follow"
          in: "query"
          description: "Keep connection after returning logs."
          type: "boolean"
          default: false
        - name: "stdout"
          in: "query"
          description: "Return logs from `stdout`"
          type: "boolean"
          default: false
        - name: "stderr"
          in: "query"
          description: "Return logs from `stderr`"
          type: "boolean"
          default: false
        - name: "since"
          in: "query"
          description: "Only return logs since this time, as a UNIX timestamp"
          type: "integer"
          default: 0
        - name: "timestamps"
          in: "query"
          description: "Add timestamps to every log line"
          type: "boolean"
          default: false
        - name: "tail"
          in: "query"
          description: |
            Only return this number of log lines from the end of the logs.
            Specify as an integer or `all` to output all log lines.
          type: "string"
          default: "all"
      tags: ["Task"]
  /secrets:
    get:
      summary: "List secrets"
      operationId: "SecretList"
      produces:
        - "application/json"
      responses:
        200:
          description: "no error"
          schema:
            type: "array"
            items:
              $ref: "#/definitions/Secret"
            example:
              - ID: "blt1owaxmitz71s9v5zh81zun"
                Version:
                  Index: 85
                CreatedAt: "2017-07-20T13:55:28.678958722Z"
                UpdatedAt: "2017-07-20T13:55:28.678958722Z"
                Spec:
                  Name: "mysql-passwd"
                  Labels:
                    some.label: "some.value"
                  Driver:
                    Name: "secret-bucket"
                    Options:
                      OptionA: "value for driver option A"
                      OptionB: "value for driver option B"
              - ID: "ktnbjxoalbkvbvedmg1urrz8h"
                Version:
                  Index: 11
                CreatedAt: "2016-11-05T01:20:17.327670065Z"
                UpdatedAt: "2016-11-05T01:20:17.327670065Z"
                Spec:
                  Name: "app-dev.crt"
                  Labels:
                    foo: "bar"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "filters"
          in: "query"
          type: "string"
          description: |
            A JSON encoded value of the filters (a `map[string][]string`) to
            process on the secrets list.

            Available filters:

            - `id=<secret id>`
            - `label=<key> or label=<key>=value`
            - `name=<secret name>`
            - `names=<secret name>`
      tags: ["Secret"]
  /secrets/create:
    post:
      summary: "Create a secret"
      operationId: "SecretCreate"
      consumes:
        - "application/json"
      produces:
        - "application/json"
      responses:
        201:
          description: "no error"
          schema:
            $ref: "#/definitions/IdResponse"
        409:
          description: "name conflicts with an existing object"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "body"
          in: "body"
          schema:
            allOf:
              - $ref: "#/definitions/SecretSpec"
              - type: "object"
                example:
                  Name: "app-key.crt"
                  Labels:
                    foo: "bar"
                  Data: "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg=="
                  Driver:
                    Name: "secret-bucket"
                    Options:
                      OptionA: "value for driver option A"
                      OptionB: "value for driver option B"
      tags: ["Secret"]
  /secrets/{id}:
    get:
      summary: "Inspect a secret"
      operationId: "SecretInspect"
      produces:
        - "application/json"
      responses:
        200:
          description: "no error"
          schema:
            $ref: "#/definitions/Secret"
          examples:
            application/json:
              ID: "ktnbjxoalbkvbvedmg1urrz8h"
              Version:
                Index: 11
              CreatedAt: "2016-11-05T01:20:17.327670065Z"
              UpdatedAt: "2016-11-05T01:20:17.327670065Z"
              Spec:
                Name: "app-dev.crt"
                Labels:
                  foo: "bar"
                Driver:
                  Name: "secret-bucket"
                  Options:
                    OptionA: "value for driver option A"
                    OptionB: "value for driver option B"

        404:
          description: "secret not found"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          type: "string"
          description: "ID of the secret"
      tags: ["Secret"]
    delete:
      summary: "Delete a secret"
      operationId: "SecretDelete"
      produces:
        - "application/json"
      responses:
        204:
          description: "no error"
        404:
          description: "secret not found"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          type: "string"
          description: "ID of the secret"
      tags: ["Secret"]
  /secrets/{id}/update:
    post:
      summary: "Update a Secret"
      operationId: "SecretUpdate"
      responses:
        200:
          description: "no error"
        400:
          description: "bad parameter"
          schema:
            $ref: "#/definitions/ErrorResponse"
        404:
          description: "no such secret"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          description: "The ID or name of the secret"
          type: "string"
          required: true
        - name: "body"
          in: "body"
          schema:
            $ref: "#/definitions/SecretSpec"
          description: |
            The spec of the secret to update. Currently, only the Labels field
            can be updated. All other fields must remain unchanged from the
            [SecretInspect endpoint](#operation/SecretInspect) response values.
        - name: "version"
          in: "query"
          description: |
            The version number of the secret object being updated. This is
            required to avoid conflicting writes.
          type: "integer"
          format: "int64"
          required: true
      tags: ["Secret"]
  /configs:
    get:
      summary: "List configs"
      operationId: "ConfigList"
      produces:
        - "application/json"
      responses:
        200:
          description: "no error"
          schema:
            type: "array"
            items:
              $ref: "#/definitions/Config"
            example:
              - ID: "ktnbjxoalbkvbvedmg1urrz8h"
                Version:
                  Index: 11
                CreatedAt: "2016-11-05T01:20:17.327670065Z"
                UpdatedAt: "2016-11-05T01:20:17.327670065Z"
                Spec:
                  Name: "server.conf"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "filters"
          in: "query"
          type: "string"
          description: |
            A JSON encoded value of the filters (a `map[string][]string`) to
            process on the configs list.

            Available filters:

            - `id=<config id>`
            - `label=<key> or label=<key>=value`
            - `name=<config name>`
            - `names=<config name>`
      tags: ["Config"]
  /configs/create:
    post:
      summary: "Create a config"
      operationId: "ConfigCreate"
      consumes:
        - "application/json"
      produces:
        - "application/json"
      responses:
        201:
          description: "no error"
          schema:
            $ref: "#/definitions/IdResponse"
        409:
          description: "name conflicts with an existing object"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "body"
          in: "body"
          schema:
            allOf:
              - $ref: "#/definitions/ConfigSpec"
              - type: "object"
                example:
                  Name: "server.conf"
                  Labels:
                    foo: "bar"
                  Data: "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg=="
      tags: ["Config"]
  /configs/{id}:
    get:
      summary: "Inspect a config"
      operationId: "ConfigInspect"
      produces:
        - "application/json"
      responses:
        200:
          description: "no error"
          schema:
            $ref: "#/definitions/Config"
          examples:
            application/json:
              ID: "ktnbjxoalbkvbvedmg1urrz8h"
              Version:
                Index: 11
              CreatedAt: "2016-11-05T01:20:17.327670065Z"
              UpdatedAt: "2016-11-05T01:20:17.327670065Z"
              Spec:
                Name: "app-dev.crt"
        404:
          description: "config not found"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          type: "string"
          description: "ID of the config"
      tags: ["Config"]
    delete:
      summary: "Delete a config"
      operationId: "ConfigDelete"
      produces:
        - "application/json"
      responses:
        204:
          description: "no error"
        404:
          description: "config not found"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          required: true
          type: "string"
          description: "ID of the config"
      tags: ["Config"]
  /configs/{id}/update:
    post:
      summary: "Update a Config"
      operationId: "ConfigUpdate"
      responses:
        200:
          description: "no error"
        400:
          description: "bad parameter"
          schema:
            $ref: "#/definitions/ErrorResponse"
        404:
          description: "no such config"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
        503:
          description: "node is not part of a swarm"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "id"
          in: "path"
          description: "The ID or name of the config"
          type: "string"
          required: true
        - name: "body"
          in: "body"
          schema:
            $ref: "#/definitions/ConfigSpec"
          description: |
            The spec of the config to update. Currently, only the Labels field
            can be updated. All other fields must remain unchanged from the
            [ConfigInspect endpoint](#operation/ConfigInspect) response values.
        - name: "version"
          in: "query"
          description: |
            The version number of the config object being updated. This is
            required to avoid conflicting writes.
          type: "integer"
          format: "int64"
          required: true
      tags: ["Config"]
  /distribution/{name}/json:
    get:
      summary: "Get image information from the registry"
      description: |
        Return image digest and platform information by contacting the registry.
      operationId: "DistributionInspect"
      produces:
        - "application/json"
      responses:
        200:
          description: "descriptor and platform information"
          schema:
            $ref: "#/definitions/DistributionInspect"
        401:
          description: "Failed authentication or no image found"
          schema:
            $ref: "#/definitions/ErrorResponse"
          examples:
            application/json:
              message: "No such image: someimage (tag: latest)"
        500:
          description: "Server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      parameters:
        - name: "name"
          in: "path"
          description: "Image name or id"
          type: "string"
          required: true
      tags: ["Distribution"]
  /session:
    post:
      summary: "Initialize interactive session"
      description: |
        Start a new interactive session with a server. Session allows server to
        call back to the client for advanced capabilities.

        ### Hijacking

        This endpoint hijacks the HTTP connection to HTTP2 transport that allows
        the client to expose gPRC services on that connection.

        For example, the client sends this request to upgrade the connection:

        ```
        POST /session HTTP/1.1
        Upgrade: h2c
        Connection: Upgrade
        ```

        The Docker daemon responds with a `101 UPGRADED` response follow with
        the raw stream:

        ```
        HTTP/1.1 101 UPGRADED
        Connection: Upgrade
        Upgrade: h2c
        ```
      operationId: "Session"
      produces:
        - "application/vnd.docker.raw-stream"
      responses:
        101:
          description: "no error, hijacking successful"
        400:
          description: "bad parameter"
          schema:
            $ref: "#/definitions/ErrorResponse"
        500:
          description: "server error"
          schema:
            $ref: "#/definitions/ErrorResponse"
      tags: ["Session"]
   07070100000395000041ED00000000000000000000000F645E367C00000000000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types 07070100000396000081A4000000000000000000000001645E367C00000328000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/auth.go package types // import "github.com/docker/docker/api/types"

// AuthConfig contains authorization information for connecting to a Registry
type AuthConfig struct {
	Username string `json:"username,omitempty"`
	Password string `json:"password,omitempty"`
	Auth     string `json:"auth,omitempty"`

	// Email is an optional value associated with the username.
	// This field is deprecated and will be removed in a later
	// version of docker.
	Email string `json:"email,omitempty"`

	ServerAddress string `json:"serveraddress,omitempty"`

	// IdentityToken is used to authenticate the user and get
	// an access token for the registry.
	IdentityToken string `json:"identitytoken,omitempty"`

	// RegistryToken is a bearer token to be sent to a registry
	RegistryToken string `json:"registrytoken,omitempty"`
}
07070100000397000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/blkiodev    07070100000398000081A4000000000000000000000001645E367C00000208000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/blkiodev/blkio.go   package blkiodev // import "github.com/docker/docker/api/types/blkiodev"

import "fmt"

// WeightDevice is a structure that holds device:weight pair
type WeightDevice struct {
	Path   string
	Weight uint16
}

func (w *WeightDevice) String() string {
	return fmt.Sprintf("%s:%d", w.Path, w.Weight)
}

// ThrottleDevice is a structure that holds device:rate_per_second pair
type ThrottleDevice struct {
	Path string
	Rate uint64
}

func (t *ThrottleDevice) String() string {
	return fmt.Sprintf("%s:%d", t.Path, t.Rate)
}
07070100000399000081A4000000000000000000000001645E367C000033EC000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/client.go   package types // import "github.com/docker/docker/api/types"

import (
	"bufio"
	"io"
	"net"

	"github.com/docker/docker/api/types/container"
	"github.com/docker/docker/api/types/filters"
	units "github.com/docker/go-units"
)

// CheckpointCreateOptions holds parameters to create a checkpoint from a container
type CheckpointCreateOptions struct {
	CheckpointID  string
	CheckpointDir string
	Exit          bool
}

// CheckpointListOptions holds parameters to list checkpoints for a container
type CheckpointListOptions struct {
	CheckpointDir string
}

// CheckpointDeleteOptions holds parameters to delete a checkpoint from a container
type CheckpointDeleteOptions struct {
	CheckpointID  string
	CheckpointDir string
}

// ContainerAttachOptions holds parameters to attach to a container.
type ContainerAttachOptions struct {
	Stream     bool
	Stdin      bool
	Stdout     bool
	Stderr     bool
	DetachKeys string
	Logs       bool
}

// ContainerCommitOptions holds parameters to commit changes into a container.
type ContainerCommitOptions struct {
	Reference string
	Comment   string
	Author    string
	Changes   []string
	Pause     bool
	Config    *container.Config
}

// ContainerExecInspect holds information returned by exec inspect.
type ContainerExecInspect struct {
	ExecID      string `json:"ID"`
	ContainerID string
	Running     bool
	ExitCode    int
	Pid         int
}

// ContainerListOptions holds parameters to list containers with.
type ContainerListOptions struct {
	Size    bool
	All     bool
	Latest  bool
	Since   string
	Before  string
	Limit   int
	Filters filters.Args
}

// ContainerLogsOptions holds parameters to filter logs with.
type ContainerLogsOptions struct {
	ShowStdout bool
	ShowStderr bool
	Since      string
	Until      string
	Timestamps bool
	Follow     bool
	Tail       string
	Details    bool
}

// ContainerRemoveOptions holds parameters to remove containers.
type ContainerRemoveOptions struct {
	RemoveVolumes bool
	RemoveLinks   bool
	Force         bool
}

// ContainerStartOptions holds parameters to start containers.
type ContainerStartOptions struct {
	CheckpointID  string
	CheckpointDir string
}

// CopyToContainerOptions holds information
// about files to copy into a container
type CopyToContainerOptions struct {
	AllowOverwriteDirWithFile bool
	CopyUIDGID                bool
}

// EventsOptions holds parameters to filter events with.
type EventsOptions struct {
	Since   string
	Until   string
	Filters filters.Args
}

// NetworkListOptions holds parameters to filter the list of networks with.
type NetworkListOptions struct {
	Filters filters.Args
}

// NewHijackedResponse intializes a HijackedResponse type
func NewHijackedResponse(conn net.Conn, mediaType string) HijackedResponse {
	return HijackedResponse{Conn: conn, Reader: bufio.NewReader(conn), mediaType: mediaType}
}

// HijackedResponse holds connection information for a hijacked request.
type HijackedResponse struct {
	mediaType string
	Conn      net.Conn
	Reader    *bufio.Reader
}

// Close closes the hijacked connection and reader.
func (h *HijackedResponse) Close() {
	h.Conn.Close()
}

// MediaType let client know if HijackedResponse hold a raw or multiplexed stream.
// returns false if HTTP Content-Type is not relevant, and container must be inspected
func (h *HijackedResponse) MediaType() (string, bool) {
	if h.mediaType == "" {
		return "", false
	}
	return h.mediaType, true
}

// CloseWriter is an interface that implements structs
// that close input streams to prevent from writing.
type CloseWriter interface {
	CloseWrite() error
}

// CloseWrite closes a readWriter for writing.
func (h *HijackedResponse) CloseWrite() error {
	if conn, ok := h.Conn.(CloseWriter); ok {
		return conn.CloseWrite()
	}
	return nil
}

// ImageBuildOptions holds the information
// necessary to build images.
type ImageBuildOptions struct {
	Tags           []string
	SuppressOutput bool
	RemoteContext  string
	NoCache        bool
	Remove         bool
	ForceRemove    bool
	PullParent     bool
	Isolation      container.Isolation
	CPUSetCPUs     string
	CPUSetMems     string
	CPUShares      int64
	CPUQuota       int64
	CPUPeriod      int64
	Memory         int64
	MemorySwap     int64
	CgroupParent   string
	NetworkMode    string
	ShmSize        int64
	Dockerfile     string
	Ulimits        []*units.Ulimit
	// BuildArgs needs to be a *string instead of just a string so that
	// we can tell the difference between "" (empty string) and no value
	// at all (nil). See the parsing of buildArgs in
	// api/server/router/build/build_routes.go for even more info.
	BuildArgs   map[string]*string
	AuthConfigs map[string]AuthConfig
	Context     io.Reader
	Labels      map[string]string
	// squash the resulting image's layers to the parent
	// preserves the original image and creates a new one from the parent with all
	// the changes applied to a single layer
	Squash bool
	// CacheFrom specifies images that are used for matching cache. Images
	// specified here do not need to have a valid parent chain to match cache.
	CacheFrom   []string
	SecurityOpt []string
	ExtraHosts  []string // List of extra hosts
	Target      string
	SessionID   string
	Platform    string
	// Version specifies the version of the unerlying builder to use
	Version BuilderVersion
	// BuildID is an optional identifier that can be passed together with the
	// build request. The same identifier can be used to gracefully cancel the
	// build with the cancel request.
	BuildID string
	// Outputs defines configurations for exporting build results. Only supported
	// in BuildKit mode
	Outputs []ImageBuildOutput
}

// ImageBuildOutput defines configuration for exporting a build result
type ImageBuildOutput struct {
	Type  string
	Attrs map[string]string
}

// BuilderVersion sets the version of underlying builder to use
type BuilderVersion string

const (
	// BuilderV1 is the first generation builder in docker daemon
	BuilderV1 BuilderVersion = "1"
	// BuilderBuildKit is builder based on moby/buildkit project
	BuilderBuildKit BuilderVersion = "2"
)

// ImageBuildResponse holds information
// returned by a server after building
// an image.
type ImageBuildResponse struct {
	Body   io.ReadCloser
	OSType string
}

// ImageCreateOptions holds information to create images.
type ImageCreateOptions struct {
	RegistryAuth string // RegistryAuth is the base64 encoded credentials for the registry.
	Platform     string // Platform is the target platform of the image if it needs to be pulled from the registry.
}

// ImageImportSource holds source information for ImageImport
type ImageImportSource struct {
	Source     io.Reader // Source is the data to send to the server to create this image from. You must set SourceName to "-" to leverage this.
	SourceName string    // SourceName is the name of the image to pull. Set to "-" to leverage the Source attribute.
}

// ImageImportOptions holds information to import images from the client host.
type ImageImportOptions struct {
	Tag      string   // Tag is the name to tag this image with. This attribute is deprecated.
	Message  string   // Message is the message to tag the image with
	Changes  []string // Changes are the raw changes to apply to this image
	Platform string   // Platform is the target platform of the image
}

// ImageListOptions holds parameters to list images with.
type ImageListOptions struct {
	// All controls whether all images in the graph are filtered, or just
	// the heads.
	All bool

	// Filters is a JSON-encoded set of filter arguments.
	Filters filters.Args

	// SharedSize indicates whether the shared size of images should be computed.
	SharedSize bool

	// ContainerCount indicates whether container count should be computed.
	ContainerCount bool
}

// ImageLoadResponse returns information to the client about a load process.
type ImageLoadResponse struct {
	// Body must be closed to avoid a resource leak
	Body io.ReadCloser
	JSON bool
}

// ImagePullOptions holds information to pull images.
type ImagePullOptions struct {
	All           bool
	RegistryAuth  string // RegistryAuth is the base64 encoded credentials for the registry
	PrivilegeFunc RequestPrivilegeFunc
	Platform      string
}

// RequestPrivilegeFunc is a function interface that
// clients can supply to retry operations after
// getting an authorization error.
// This function returns the registry authentication
// header value in base 64 format, or an error
// if the privilege request fails.
type RequestPrivilegeFunc func() (string, error)

// ImagePushOptions holds information to push images.
type ImagePushOptions ImagePullOptions

// ImageRemoveOptions holds parameters to remove images.
type ImageRemoveOptions struct {
	Force         bool
	PruneChildren bool
}

// ImageSearchOptions holds parameters to search images with.
type ImageSearchOptions struct {
	RegistryAuth  string
	PrivilegeFunc RequestPrivilegeFunc
	Filters       filters.Args
	Limit         int
}

// ResizeOptions holds parameters to resize a tty.
// It can be used to resize container ttys and
// exec process ttys too.
type ResizeOptions struct {
	Height uint
	Width  uint
}

// NodeListOptions holds parameters to list nodes with.
type NodeListOptions struct {
	Filters filters.Args
}

// NodeRemoveOptions holds parameters to remove nodes with.
type NodeRemoveOptions struct {
	Force bool
}

// ServiceCreateOptions contains the options to use when creating a service.
type ServiceCreateOptions struct {
	// EncodedRegistryAuth is the encoded registry authorization credentials to
	// use when updating the service.
	//
	// This field follows the format of the X-Registry-Auth header.
	EncodedRegistryAuth string

	// QueryRegistry indicates whether the service update requires
	// contacting a registry. A registry may be contacted to retrieve
	// the image digest and manifest, which in turn can be used to update
	// platform or other information about the service.
	QueryRegistry bool
}

// ServiceCreateResponse contains the information returned to a client
// on the creation of a new service.
type ServiceCreateResponse struct {
	// ID is the ID of the created service.
	ID string
	// Warnings is a set of non-fatal warning messages to pass on to the user.
	Warnings []string `json:",omitempty"`
}

// Values for RegistryAuthFrom in ServiceUpdateOptions
const (
	RegistryAuthFromSpec         = "spec"
	RegistryAuthFromPreviousSpec = "previous-spec"
)

// ServiceUpdateOptions contains the options to be used for updating services.
type ServiceUpdateOptions struct {
	// EncodedRegistryAuth is the encoded registry authorization credentials to
	// use when updating the service.
	//
	// This field follows the format of the X-Registry-Auth header.
	EncodedRegistryAuth string

	// TODO(stevvooe): Consider moving the version parameter of ServiceUpdate
	// into this field. While it does open API users up to racy writes, most
	// users may not need that level of consistency in practice.

	// RegistryAuthFrom specifies where to find the registry authorization
	// credentials if they are not given in EncodedRegistryAuth. Valid
	// values are "spec" and "previous-spec".
	RegistryAuthFrom string

	// Rollback indicates whether a server-side rollback should be
	// performed. When this is set, the provided spec will be ignored.
	// The valid values are "previous" and "none". An empty value is the
	// same as "none".
	Rollback string

	// QueryRegistry indicates whether the service update requires
	// contacting a registry. A registry may be contacted to retrieve
	// the image digest and manifest, which in turn can be used to update
	// platform or other information about the service.
	QueryRegistry bool
}

// ServiceListOptions holds parameters to list services with.
type ServiceListOptions struct {
	Filters filters.Args

	// Status indicates whether the server should include the service task
	// count of running and desired tasks.
	Status bool
}

// ServiceInspectOptions holds parameters related to the "service inspect"
// operation.
type ServiceInspectOptions struct {
	InsertDefaults bool
}

// TaskListOptions holds parameters to list tasks with.
type TaskListOptions struct {
	Filters filters.Args
}

// PluginRemoveOptions holds parameters to remove plugins.
type PluginRemoveOptions struct {
	Force bool
}

// PluginEnableOptions holds parameters to enable plugins.
type PluginEnableOptions struct {
	Timeout int
}

// PluginDisableOptions holds parameters to disable plugins.
type PluginDisableOptions struct {
	Force bool
}

// PluginInstallOptions holds parameters to install a plugin.
type PluginInstallOptions struct {
	Disabled              bool
	AcceptAllPermissions  bool
	RegistryAuth          string // RegistryAuth is the base64 encoded credentials for the registry
	RemoteRef             string // RemoteRef is the plugin name on the registry
	PrivilegeFunc         RequestPrivilegeFunc
	AcceptPermissionsFunc func(PluginPrivileges) (bool, error)
	Args                  []string
}

// SwarmUnlockKeyResponse contains the response for Engine API:
// GET /swarm/unlockkey
type SwarmUnlockKeyResponse struct {
	// UnlockKey is the unlock key in ASCII-armored format.
	UnlockKey string
}

// PluginCreateOptions hold all options to plugin create.
type PluginCreateOptions struct {
	RepoName string
}
0707010000039A000081A4000000000000000000000001645E367C00000914000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/configs.go  package types // import "github.com/docker/docker/api/types"

import (
	"github.com/docker/docker/api/types/container"
	"github.com/docker/docker/api/types/network"
	specs "github.com/opencontainers/image-spec/specs-go/v1"
)

// configs holds structs used for internal communication between the
// frontend (such as an http server) and the backend (such as the
// docker daemon).

// ContainerCreateConfig is the parameter set to ContainerCreate()
type ContainerCreateConfig struct {
	Name             string
	Config           *container.Config
	HostConfig       *container.HostConfig
	NetworkingConfig *network.NetworkingConfig
	Platform         *specs.Platform
	AdjustCPUShares  bool
}

// ContainerRmConfig holds arguments for the container remove
// operation. This struct is used to tell the backend what operations
// to perform.
type ContainerRmConfig struct {
	ForceRemove, RemoveVolume, RemoveLink bool
}

// ExecConfig is a small subset of the Config struct that holds the configuration
// for the exec feature of docker.
type ExecConfig struct {
	User         string   // User that will run the command
	Privileged   bool     // Is the container in privileged mode
	Tty          bool     // Attach standard streams to a tty.
	ConsoleSize  *[2]uint `json:",omitempty"` // Initial console size [height, width]
	AttachStdin  bool     // Attach the standard input, makes possible user interaction
	AttachStderr bool     // Attach the standard error
	AttachStdout bool     // Attach the standard output
	Detach       bool     // Execute in detach mode
	DetachKeys   string   // Escape keys for detach
	Env          []string // Environment variables
	WorkingDir   string   // Working directory
	Cmd          []string // Execution commands and args
}

// PluginRmConfig holds arguments for plugin remove.
type PluginRmConfig struct {
	ForceRemove bool
}

// PluginEnableConfig holds arguments for plugin enable
type PluginEnableConfig struct {
	Timeout int
}

// PluginDisableConfig holds arguments for plugin disable.
type PluginDisableConfig struct {
	ForceDisable bool
}

// NetworkListConfig stores the options available for listing networks
type NetworkListConfig struct {
	// TODO(@cpuguy83): naming is hard, this is pulled from what was being used in the router before moving here
	Detailed bool
	Verbose  bool
}
0707010000039B000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/container   0707010000039C000081A4000000000000000000000001645E367C00001484000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/container/config.go package container // import "github.com/docker/docker/api/types/container"

import (
	"io"
	"time"

	"github.com/docker/docker/api/types/strslice"
	"github.com/docker/go-connections/nat"
)

// MinimumDuration puts a minimum on user configured duration.
// This is to prevent API error on time unit. For example, API may
// set 3 as healthcheck interval with intention of 3 seconds, but
// Docker interprets it as 3 nanoseconds.
const MinimumDuration = 1 * time.Millisecond

// StopOptions holds the options to stop or restart a container.
type StopOptions struct {
	// Signal (optional) is the signal to send to the container to (gracefully)
	// stop it before forcibly terminating the container with SIGKILL after the
	// timeout expires. If not value is set, the default (SIGTERM) is used.
	Signal string `json:",omitempty"`

	// Timeout (optional) is the timeout (in seconds) to wait for the container
	// to stop gracefully before forcibly terminating it with SIGKILL.
	//
	// - Use nil to use the default timeout (10 seconds).
	// - Use '-1' to wait indefinitely.
	// - Use '0' to not wait for the container to exit gracefully, and
	//   immediately proceeds to forcibly terminating the container.
	// - Other positive values are used as timeout (in seconds).
	Timeout *int `json:",omitempty"`
}

// HealthConfig holds configuration settings for the HEALTHCHECK feature.
type HealthConfig struct {
	// Test is the test to perform to check that the container is healthy.
	// An empty slice means to inherit the default.
	// The options are:
	// {} : inherit healthcheck
	// {"NONE"} : disable healthcheck
	// {"CMD", args...} : exec arguments directly
	// {"CMD-SHELL", command} : run command with system's default shell
	Test []string `json:",omitempty"`

	// Zero means to inherit. Durations are expressed as integer nanoseconds.
	Interval    time.Duration `json:",omitempty"` // Interval is the time to wait between checks.
	Timeout     time.Duration `json:",omitempty"` // Timeout is the time to wait before considering the check to have hung.
	StartPeriod time.Duration `json:",omitempty"` // The start period for the container to initialize before the retries starts to count down.

	// Retries is the number of consecutive failures needed to consider a container as unhealthy.
	// Zero means inherit.
	Retries int `json:",omitempty"`
}

// ExecStartOptions holds the options to start container's exec.
type ExecStartOptions struct {
	Stdin       io.Reader
	Stdout      io.Writer
	Stderr      io.Writer
	ConsoleSize *[2]uint `json:",omitempty"`
}

// Config contains the configuration data about a container.
// It should hold only portable information about the container.
// Here, "portable" means "independent from the host we are running on".
// Non-portable information *should* appear in HostConfig.
// All fields added to this struct must be marked `omitempty` to keep getting
// predictable hashes from the old `v1Compatibility` configuration.
type Config struct {
	Hostname        string              // Hostname
	Domainname      string              // Domainname
	User            string              // User that will run the command(s) inside the container, also support user:group
	AttachStdin     bool                // Attach the standard input, makes possible user interaction
	AttachStdout    bool                // Attach the standard output
	AttachStderr    bool                // Attach the standard error
	ExposedPorts    nat.PortSet         `json:",omitempty"` // List of exposed ports
	Tty             bool                // Attach standard streams to a tty, including stdin if it is not closed.
	OpenStdin       bool                // Open stdin
	StdinOnce       bool                // If true, close stdin after the 1 attached client disconnects.
	Env             []string            // List of environment variable to set in the container
	Cmd             strslice.StrSlice   // Command to run when starting the container
	Healthcheck     *HealthConfig       `json:",omitempty"` // Healthcheck describes how to check the container is healthy
	ArgsEscaped     bool                `json:",omitempty"` // True if command is already escaped (meaning treat as a command line) (Windows specific).
	Image           string              // Name of the image as it was passed by the operator (e.g. could be symbolic)
	Volumes         map[string]struct{} // List of volumes (mounts) used for the container
	WorkingDir      string              // Current directory (PWD) in the command will be launched
	Entrypoint      strslice.StrSlice   // Entrypoint to run when starting the container
	NetworkDisabled bool                `json:",omitempty"` // Is network disabled
	MacAddress      string              `json:",omitempty"` // Mac Address of the container
	OnBuild         []string            // ONBUILD metadata that were defined on the image Dockerfile
	Labels          map[string]string   // List of labels set to this container
	StopSignal      string              `json:",omitempty"` // Signal to stop a container
	StopTimeout     *int                `json:",omitempty"` // Timeout (in seconds) to stop a container
	Shell           strslice.StrSlice   `json:",omitempty"` // Shell for shell-form of RUN, CMD, ENTRYPOINT
}
0707010000039D000081A4000000000000000000000001645E367C00000294000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/container/container_changes.go  package container // import "github.com/docker/docker/api/types/container"

// ----------------------------------------------------------------------------
// Code generated by `swagger generate operation`. DO NOT EDIT.
//
// See hack/generate-swagger-api.sh
// ----------------------------------------------------------------------------

// ContainerChangeResponseItem change item in response to ContainerChanges operation
// swagger:model ContainerChangeResponseItem
type ContainerChangeResponseItem struct {

	// Kind of change
	// Required: true
	Kind uint8 `json:"Kind"`

	// Path to file that has changed
	// Required: true
	Path string `json:"Path"`
}
0707010000039E000081A4000000000000000000000001645E367C000002DE000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/container/container_top.go  package container // import "github.com/docker/docker/api/types/container"

// ----------------------------------------------------------------------------
// Code generated by `swagger generate operation`. DO NOT EDIT.
//
// See hack/generate-swagger-api.sh
// ----------------------------------------------------------------------------

// ContainerTopOKBody OK response to ContainerTop operation
// swagger:model ContainerTopOKBody
type ContainerTopOKBody struct {

	// Each process running in the container, where each is process
	// is an array of values corresponding to the titles.
	//
	// Required: true
	Processes [][]string `json:"Processes"`

	// The ps column titles
	// Required: true
	Titles []string `json:"Titles"`
}
  0707010000039F000081A4000000000000000000000001645E367C00000229000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/container/container_update.go   package container // import "github.com/docker/docker/api/types/container"

// ----------------------------------------------------------------------------
// Code generated by `swagger generate operation`. DO NOT EDIT.
//
// See hack/generate-swagger-api.sh
// ----------------------------------------------------------------------------

// ContainerUpdateOKBody OK response to ContainerUpdate operation
// swagger:model ContainerUpdateOKBody
type ContainerUpdateOKBody struct {

	// warnings
	// Required: true
	Warnings []string `json:"Warnings"`
}
   070701000003A0000081A4000000000000000000000001645E367C000001EE000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/container/create_response.go    package container

// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command

// CreateResponse ContainerCreateResponse
//
// OK response to ContainerCreate operation
// swagger:model CreateResponse
type CreateResponse struct {

	// The ID of the created container
	// Required: true
	ID string `json:"Id"`

	// Warnings encountered when creating the container
	// Required: true
	Warnings []string `json:"Warnings"`
}
  070701000003A1000081A4000000000000000000000001645E367C00000202000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/container/deprecated.go package container // import "github.com/docker/docker/api/types/container"

// ContainerCreateCreatedBody OK response to ContainerCreate operation
//
// Deprecated: use CreateResponse
type ContainerCreateCreatedBody = CreateResponse

// ContainerWaitOKBody OK response to ContainerWait operation
//
// Deprecated: use WaitResponse
type ContainerWaitOKBody = WaitResponse

// ContainerWaitOKBodyError container waiting error, if any
//
// Deprecated: use WaitExitError
type ContainerWaitOKBodyError = WaitExitError
  070701000003A2000081A4000000000000000000000001645E367C00004418000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/container/host_config.go    package container // import "github.com/docker/docker/api/types/container"

import (
	"strings"

	"github.com/docker/docker/api/types/blkiodev"
	"github.com/docker/docker/api/types/mount"
	"github.com/docker/docker/api/types/strslice"
	"github.com/docker/go-connections/nat"
	units "github.com/docker/go-units"
)

// CgroupnsMode represents the cgroup namespace mode of the container
type CgroupnsMode string

// cgroup namespace modes for containers
const (
	CgroupnsModeEmpty   CgroupnsMode = ""
	CgroupnsModePrivate CgroupnsMode = "private"
	CgroupnsModeHost    CgroupnsMode = "host"
)

// IsPrivate indicates whether the container uses its own private cgroup namespace
func (c CgroupnsMode) IsPrivate() bool {
	return c == CgroupnsModePrivate
}

// IsHost indicates whether the container shares the host's cgroup namespace
func (c CgroupnsMode) IsHost() bool {
	return c == CgroupnsModeHost
}

// IsEmpty indicates whether the container cgroup namespace mode is unset
func (c CgroupnsMode) IsEmpty() bool {
	return c == CgroupnsModeEmpty
}

// Valid indicates whether the cgroup namespace mode is valid
func (c CgroupnsMode) Valid() bool {
	return c.IsEmpty() || c.IsPrivate() || c.IsHost()
}

// Isolation represents the isolation technology of a container. The supported
// values are platform specific
type Isolation string

// Isolation modes for containers
const (
	IsolationEmpty   Isolation = ""        // IsolationEmpty is unspecified (same behavior as default)
	IsolationDefault Isolation = "default" // IsolationDefault is the default isolation mode on current daemon
	IsolationProcess Isolation = "process" // IsolationProcess is process isolation mode
	IsolationHyperV  Isolation = "hyperv"  // IsolationHyperV is HyperV isolation mode
)

// IsDefault indicates the default isolation technology of a container. On Linux this
// is the native driver. On Windows, this is a Windows Server Container.
func (i Isolation) IsDefault() bool {
	// TODO consider making isolation-mode strict (case-sensitive)
	v := Isolation(strings.ToLower(string(i)))
	return v == IsolationDefault || v == IsolationEmpty
}

// IsHyperV indicates the use of a Hyper-V partition for isolation
func (i Isolation) IsHyperV() bool {
	// TODO consider making isolation-mode strict (case-sensitive)
	return Isolation(strings.ToLower(string(i))) == IsolationHyperV
}

// IsProcess indicates the use of process isolation
func (i Isolation) IsProcess() bool {
	// TODO consider making isolation-mode strict (case-sensitive)
	return Isolation(strings.ToLower(string(i))) == IsolationProcess
}

// IpcMode represents the container ipc stack.
type IpcMode string

// IpcMode constants
const (
	IPCModeNone      IpcMode = "none"
	IPCModeHost      IpcMode = "host"
	IPCModeContainer IpcMode = "container"
	IPCModePrivate   IpcMode = "private"
	IPCModeShareable IpcMode = "shareable"
)

// IsPrivate indicates whether the container uses its own private ipc namespace which can not be shared.
func (n IpcMode) IsPrivate() bool {
	return n == IPCModePrivate
}

// IsHost indicates whether the container shares the host's ipc namespace.
func (n IpcMode) IsHost() bool {
	return n == IPCModeHost
}

// IsShareable indicates whether the container's ipc namespace can be shared with another container.
func (n IpcMode) IsShareable() bool {
	return n == IPCModeShareable
}

// IsContainer indicates whether the container uses another container's ipc namespace.
func (n IpcMode) IsContainer() bool {
	return strings.HasPrefix(string(n), string(IPCModeContainer)+":")
}

// IsNone indicates whether container IpcMode is set to "none".
func (n IpcMode) IsNone() bool {
	return n == IPCModeNone
}

// IsEmpty indicates whether container IpcMode is empty
func (n IpcMode) IsEmpty() bool {
	return n == ""
}

// Valid indicates whether the ipc mode is valid.
func (n IpcMode) Valid() bool {
	return n.IsEmpty() || n.IsNone() || n.IsPrivate() || n.IsHost() || n.IsShareable() || n.IsContainer()
}

// Container returns the name of the container ipc stack is going to be used.
func (n IpcMode) Container() string {
	if n.IsContainer() {
		return strings.TrimPrefix(string(n), string(IPCModeContainer)+":")
	}
	return ""
}

// NetworkMode represents the container network stack.
type NetworkMode string

// IsNone indicates whether container isn't using a network stack.
func (n NetworkMode) IsNone() bool {
	return n == "none"
}

// IsDefault indicates whether container uses the default network stack.
func (n NetworkMode) IsDefault() bool {
	return n == "default"
}

// IsPrivate indicates whether container uses its private network stack.
func (n NetworkMode) IsPrivate() bool {
	return !(n.IsHost() || n.IsContainer())
}

// IsContainer indicates whether container uses a container network stack.
func (n NetworkMode) IsContainer() bool {
	parts := strings.SplitN(string(n), ":", 2)
	return len(parts) > 1 && parts[0] == "container"
}

// ConnectedContainer is the id of the container which network this container is connected to.
func (n NetworkMode) ConnectedContainer() string {
	parts := strings.SplitN(string(n), ":", 2)
	if len(parts) > 1 {
		return parts[1]
	}
	return ""
}

// UserDefined indicates user-created network
func (n NetworkMode) UserDefined() string {
	if n.IsUserDefined() {
		return string(n)
	}
	return ""
}

// UsernsMode represents userns mode in the container.
type UsernsMode string

// IsHost indicates whether the container uses the host's userns.
func (n UsernsMode) IsHost() bool {
	return n == "host"
}

// IsPrivate indicates whether the container uses the a private userns.
func (n UsernsMode) IsPrivate() bool {
	return !(n.IsHost())
}

// Valid indicates whether the userns is valid.
func (n UsernsMode) Valid() bool {
	parts := strings.Split(string(n), ":")
	switch mode := parts[0]; mode {
	case "", "host":
	default:
		return false
	}
	return true
}

// CgroupSpec represents the cgroup to use for the container.
type CgroupSpec string

// IsContainer indicates whether the container is using another container cgroup
func (c CgroupSpec) IsContainer() bool {
	parts := strings.SplitN(string(c), ":", 2)
	return len(parts) > 1 && parts[0] == "container"
}

// Valid indicates whether the cgroup spec is valid.
func (c CgroupSpec) Valid() bool {
	return c.IsContainer() || c == ""
}

// Container returns the name of the container whose cgroup will be used.
func (c CgroupSpec) Container() string {
	parts := strings.SplitN(string(c), ":", 2)
	if len(parts) > 1 {
		return parts[1]
	}
	return ""
}

// UTSMode represents the UTS namespace of the container.
type UTSMode string

// IsPrivate indicates whether the container uses its private UTS namespace.
func (n UTSMode) IsPrivate() bool {
	return !(n.IsHost())
}

// IsHost indicates whether the container uses the host's UTS namespace.
func (n UTSMode) IsHost() bool {
	return n == "host"
}

// Valid indicates whether the UTS namespace is valid.
func (n UTSMode) Valid() bool {
	parts := strings.Split(string(n), ":")
	switch mode := parts[0]; mode {
	case "", "host":
	default:
		return false
	}
	return true
}

// PidMode represents the pid namespace of the container.
type PidMode string

// IsPrivate indicates whether the container uses its own new pid namespace.
func (n PidMode) IsPrivate() bool {
	return !(n.IsHost() || n.IsContainer())
}

// IsHost indicates whether the container uses the host's pid namespace.
func (n PidMode) IsHost() bool {
	return n == "host"
}

// IsContainer indicates whether the container uses a container's pid namespace.
func (n PidMode) IsContainer() bool {
	parts := strings.SplitN(string(n), ":", 2)
	return len(parts) > 1 && parts[0] == "container"
}

// Valid indicates whether the pid namespace is valid.
func (n PidMode) Valid() bool {
	parts := strings.Split(string(n), ":")
	switch mode := parts[0]; mode {
	case "", "host":
	case "container":
		if len(parts) != 2 || parts[1] == "" {
			return false
		}
	default:
		return false
	}
	return true
}

// Container returns the name of the container whose pid namespace is going to be used.
func (n PidMode) Container() string {
	parts := strings.SplitN(string(n), ":", 2)
	if len(parts) > 1 {
		return parts[1]
	}
	return ""
}

// DeviceRequest represents a request for devices from a device driver.
// Used by GPU device drivers.
type DeviceRequest struct {
	Driver       string            // Name of device driver
	Count        int               // Number of devices to request (-1 = All)
	DeviceIDs    []string          // List of device IDs as recognizable by the device driver
	Capabilities [][]string        // An OR list of AND lists of device capabilities (e.g. "gpu")
	Options      map[string]string // Options to pass onto the device driver
}

// DeviceMapping represents the device mapping between the host and the container.
type DeviceMapping struct {
	PathOnHost        string
	PathInContainer   string
	CgroupPermissions string
}

// RestartPolicy represents the restart policies of the container.
type RestartPolicy struct {
	Name              string
	MaximumRetryCount int
}

// IsNone indicates whether the container has the "no" restart policy.
// This means the container will not automatically restart when exiting.
func (rp *RestartPolicy) IsNone() bool {
	return rp.Name == "no" || rp.Name == ""
}

// IsAlways indicates whether the container has the "always" restart policy.
// This means the container will automatically restart regardless of the exit status.
func (rp *RestartPolicy) IsAlways() bool {
	return rp.Name == "always"
}

// IsOnFailure indicates whether the container has the "on-failure" restart policy.
// This means the container will automatically restart of exiting with a non-zero exit status.
func (rp *RestartPolicy) IsOnFailure() bool {
	return rp.Name == "on-failure"
}

// IsUnlessStopped indicates whether the container has the
// "unless-stopped" restart policy. This means the container will
// automatically restart unless user has put it to stopped state.
func (rp *RestartPolicy) IsUnlessStopped() bool {
	return rp.Name == "unless-stopped"
}

// IsSame compares two RestartPolicy to see if they are the same
func (rp *RestartPolicy) IsSame(tp *RestartPolicy) bool {
	return rp.Name == tp.Name && rp.MaximumRetryCount == tp.MaximumRetryCount
}

// LogMode is a type to define the available modes for logging
// These modes affect how logs are handled when log messages start piling up.
type LogMode string

// Available logging modes
const (
	LogModeUnset    LogMode = ""
	LogModeBlocking LogMode = "blocking"
	LogModeNonBlock LogMode = "non-blocking"
)

// LogConfig represents the logging configuration of the container.
type LogConfig struct {
	Type   string
	Config map[string]string
}

// Resources contains container's resources (cgroups config, ulimits...)
type Resources struct {
	// Applicable to all platforms
	CPUShares int64 `json:"CpuShares"` // CPU shares (relative weight vs. other containers)
	Memory    int64 // Memory limit (in bytes)
	NanoCPUs  int64 `json:"NanoCpus"` // CPU quota in units of 10<sup>-9</sup> CPUs.

	// Applicable to UNIX platforms
	CgroupParent         string // Parent cgroup.
	BlkioWeight          uint16 // Block IO weight (relative weight vs. other containers)
	BlkioWeightDevice    []*blkiodev.WeightDevice
	BlkioDeviceReadBps   []*blkiodev.ThrottleDevice
	BlkioDeviceWriteBps  []*blkiodev.ThrottleDevice
	BlkioDeviceReadIOps  []*blkiodev.ThrottleDevice
	BlkioDeviceWriteIOps []*blkiodev.ThrottleDevice
	CPUPeriod            int64           `json:"CpuPeriod"`          // CPU CFS (Completely Fair Scheduler) period
	CPUQuota             int64           `json:"CpuQuota"`           // CPU CFS (Completely Fair Scheduler) quota
	CPURealtimePeriod    int64           `json:"CpuRealtimePeriod"`  // CPU real-time period
	CPURealtimeRuntime   int64           `json:"CpuRealtimeRuntime"` // CPU real-time runtime
	CpusetCpus           string          // CpusetCpus 0-2, 0,1
	CpusetMems           string          // CpusetMems 0-2, 0,1
	Devices              []DeviceMapping // List of devices to map inside the container
	DeviceCgroupRules    []string        // List of rule to be added to the device cgroup
	DeviceRequests       []DeviceRequest // List of device requests for device drivers

	// KernelMemory specifies the kernel memory limit (in bytes) for the container.
	// Deprecated: kernel 5.4 deprecated kmem.limit_in_bytes.
	KernelMemory      int64           `json:",omitempty"`
	KernelMemoryTCP   int64           `json:",omitempty"` // Hard limit for kernel TCP buffer memory (in bytes)
	MemoryReservation int64           // Memory soft limit (in bytes)
	MemorySwap        int64           // Total memory usage (memory + swap); set `-1` to enable unlimited swap
	MemorySwappiness  *int64          // Tuning container memory swappiness behaviour
	OomKillDisable    *bool           // Whether to disable OOM Killer or not
	PidsLimit         *int64          // Setting PIDs limit for a container; Set `0` or `-1` for unlimited, or `null` to not change.
	Ulimits           []*units.Ulimit // List of ulimits to be set in the container

	// Applicable to Windows
	CPUCount           int64  `json:"CpuCount"`   // CPU count
	CPUPercent         int64  `json:"CpuPercent"` // CPU percent
	IOMaximumIOps      uint64 // Maximum IOps for the container system drive
	IOMaximumBandwidth uint64 // Maximum IO in bytes per second for the container system drive
}

// UpdateConfig holds the mutable attributes of a Container.
// Those attributes can be updated at runtime.
type UpdateConfig struct {
	// Contains container's resources (cgroups, ulimits)
	Resources
	RestartPolicy RestartPolicy
}

// HostConfig the non-portable Config structure of a container.
// Here, "non-portable" means "dependent of the host we are running on".
// Portable information *should* appear in Config.
type HostConfig struct {
	// Applicable to all platforms
	Binds           []string      // List of volume bindings for this container
	ContainerIDFile string        // File (path) where the containerId is written
	LogConfig       LogConfig     // Configuration of the logs for this container
	NetworkMode     NetworkMode   // Network mode to use for the container
	PortBindings    nat.PortMap   // Port mapping between the exposed port (container) and the host
	RestartPolicy   RestartPolicy // Restart policy to be used for the container
	AutoRemove      bool          // Automatically remove container when it exits
	VolumeDriver    string        // Name of the volume driver used to mount volumes
	VolumesFrom     []string      // List of volumes to take from other container
	ConsoleSize     [2]uint       // Initial console size (height,width)

	// Applicable to UNIX platforms
	CapAdd          strslice.StrSlice // List of kernel capabilities to add to the container
	CapDrop         strslice.StrSlice // List of kernel capabilities to remove from the container
	CgroupnsMode    CgroupnsMode      // Cgroup namespace mode to use for the container
	DNS             []string          `json:"Dns"`        // List of DNS server to lookup
	DNSOptions      []string          `json:"DnsOptions"` // List of DNSOption to look for
	DNSSearch       []string          `json:"DnsSearch"`  // List of DNSSearch to look for
	ExtraHosts      []string          // List of extra hosts
	GroupAdd        []string          // List of additional groups that the container process will run as
	IpcMode         IpcMode           // IPC namespace to use for the container
	Cgroup          CgroupSpec        // Cgroup to use for the container
	Links           []string          // List of links (in the name:alias form)
	OomScoreAdj     int               // Container preference for OOM-killing
	PidMode         PidMode           // PID namespace to use for the container
	Privileged      bool              // Is the container in privileged mode
	PublishAllPorts bool              // Should docker publish all exposed port for the container
	ReadonlyRootfs  bool              // Is the container root filesystem in read-only
	SecurityOpt     []string          // List of string values to customize labels for MLS systems, such as SELinux.
	StorageOpt      map[string]string `json:",omitempty"` // Storage driver options per container.
	Tmpfs           map[string]string `json:",omitempty"` // List of tmpfs (mounts) used for the container
	UTSMode         UTSMode           // UTS namespace to use for the container
	UsernsMode      UsernsMode        // The user namespace to use for the container
	ShmSize         int64             // Total shm memory usage
	Sysctls         map[string]string `json:",omitempty"` // List of Namespaced sysctls used for the container
	Runtime         string            `json:",omitempty"` // Runtime to use with this container

	// Applicable to Windows
	Isolation Isolation // Isolation technology of the container (e.g. default, hyperv)

	// Contains container's resources (cgroups, ulimits)
	Resources

	// Mounts specs used by the container
	Mounts []mount.Mount `json:",omitempty"`

	// MaskedPaths is the list of paths to be masked inside the container (this overrides the default set of paths)
	MaskedPaths []string

	// ReadonlyPaths is the list of paths to be set as read-only inside the container (this overrides the default set of paths)
	ReadonlyPaths []string

	// Run a custom init inside the container, if null, use the daemon's configured settings
	Init *bool `json:",omitempty"`
}
070701000003A3000081A4000000000000000000000001645E367C00000427000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/container/hostconfig_unix.go    //go:build !windows
// +build !windows

package container // import "github.com/docker/docker/api/types/container"

// IsValid indicates if an isolation technology is valid
func (i Isolation) IsValid() bool {
	return i.IsDefault()
}

// NetworkName returns the name of the network stack.
func (n NetworkMode) NetworkName() string {
	if n.IsBridge() {
		return "bridge"
	} else if n.IsHost() {
		return "host"
	} else if n.IsContainer() {
		return "container"
	} else if n.IsNone() {
		return "none"
	} else if n.IsDefault() {
		return "default"
	} else if n.IsUserDefined() {
		return n.UserDefined()
	}
	return ""
}

// IsBridge indicates whether container uses the bridge network stack
func (n NetworkMode) IsBridge() bool {
	return n == "bridge"
}

// IsHost indicates whether container uses the host network stack.
func (n NetworkMode) IsHost() bool {
	return n == "host"
}

// IsUserDefined indicates user-created network
func (n NetworkMode) IsUserDefined() bool {
	return !n.IsDefault() && !n.IsBridge() && !n.IsHost() && !n.IsNone() && !n.IsContainer()
}
 070701000003A4000081A4000000000000000000000001645E367C0000043A000000000000000000000000000000000000005E00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/container/hostconfig_windows.go package container // import "github.com/docker/docker/api/types/container"

// IsBridge indicates whether container uses the bridge network stack
// in windows it is given the name NAT
func (n NetworkMode) IsBridge() bool {
	return n == "nat"
}

// IsHost indicates whether container uses the host network stack.
// returns false as this is not supported by windows
func (n NetworkMode) IsHost() bool {
	return false
}

// IsUserDefined indicates user-created network
func (n NetworkMode) IsUserDefined() bool {
	return !n.IsDefault() && !n.IsNone() && !n.IsBridge() && !n.IsContainer()
}

// IsValid indicates if an isolation technology is valid
func (i Isolation) IsValid() bool {
	return i.IsDefault() || i.IsHyperV() || i.IsProcess()
}

// NetworkName returns the name of the network stack.
func (n NetworkMode) NetworkName() string {
	if n.IsDefault() {
		return "default"
	} else if n.IsBridge() {
		return "nat"
	} else if n.IsNone() {
		return "none"
	} else if n.IsContainer() {
		return "container"
	} else if n.IsUserDefined() {
		return n.UserDefined()
	}

	return ""
}
  070701000003A5000081A4000000000000000000000001645E367C0000014B000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/container/wait_exit_error.go    package container

// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command

// WaitExitError container waiting error, if any
// swagger:model WaitExitError
type WaitExitError struct {

	// Details of an error
	Message string `json:"Message,omitempty"`
}
 070701000003A6000081A4000000000000000000000001645E367C000001BA000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/container/wait_response.go  package container

// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command

// WaitResponse ContainerWaitResponse
//
// OK response to ContainerWait operation
// swagger:model WaitResponse
type WaitResponse struct {

	// error
	Error *WaitExitError `json:"Error,omitempty"`

	// Exit code of the container
	// Required: true
	StatusCode int64 `json:"StatusCode"`
}
  070701000003A7000081A4000000000000000000000001645E367C00000362000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/container/waitcondition.go  package container // import "github.com/docker/docker/api/types/container"

// WaitCondition is a type used to specify a container state for which
// to wait.
type WaitCondition string

// Possible WaitCondition Values.
//
// WaitConditionNotRunning (default) is used to wait for any of the non-running
// states: "created", "exited", "dead", "removing", or "removed".
//
// WaitConditionNextExit is used to wait for the next time the state changes
// to a non-running state. If the state is currently "created" or "exited",
// this would cause Wait() to block until either the container runs and exits
// or is removed.
//
// WaitConditionRemoved is used to wait for the container to be removed.
const (
	WaitConditionNotRunning WaitCondition = "not-running"
	WaitConditionNextExit   WaitCondition = "next-exit"
	WaitConditionRemoved    WaitCondition = "removed"
)
  070701000003A8000081A4000000000000000000000001645E367C000001EA000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/deprecated.go   package types // import "github.com/docker/docker/api/types"

import "github.com/docker/docker/api/types/volume"

// Volume volume
//
// Deprecated: use github.com/docker/docker/api/types/volume.Volume
type Volume = volume.Volume

// VolumeUsageData Usage details about the volume. This information is used by the
// `GET /system/df` endpoint, and omitted in other endpoints.
//
// Deprecated: use github.com/docker/docker/api/types/volume.UsageData
type VolumeUsageData = volume.UsageData
  070701000003A9000081A4000000000000000000000001645E367C00000144000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/error_response.go   package types

// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command

// ErrorResponse Represents an error.
// swagger:model ErrorResponse
type ErrorResponse struct {

	// The error message.
	// Required: true
	Message string `json:"message"`
}
070701000003AA000081A4000000000000000000000001645E367C0000006E000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/error_response_ext.go   package types

// Error returns the error message
func (e ErrorResponse) Error() string {
	return e.Message
}
  070701000003AB000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/events  070701000003AC000081A4000000000000000000000001645E367C000008C5000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/events/events.go    package events // import "github.com/docker/docker/api/types/events"

// Type is used for event-types.
type Type = string

// List of known event types.
const (
	BuilderEventType   Type = "builder"   // BuilderEventType is the event type that the builder generates.
	ConfigEventType    Type = "config"    // ConfigEventType is the event type that configs generate.
	ContainerEventType Type = "container" // ContainerEventType is the event type that containers generate.
	DaemonEventType    Type = "daemon"    // DaemonEventType is the event type that daemon generate.
	ImageEventType     Type = "image"     // ImageEventType is the event type that images generate.
	NetworkEventType   Type = "network"   // NetworkEventType is the event type that networks generate.
	NodeEventType      Type = "node"      // NodeEventType is the event type that nodes generate.
	PluginEventType    Type = "plugin"    // PluginEventType is the event type that plugins generate.
	SecretEventType    Type = "secret"    // SecretEventType is the event type that secrets generate.
	ServiceEventType   Type = "service"   // ServiceEventType is the event type that services generate.
	VolumeEventType    Type = "volume"    // VolumeEventType is the event type that volumes generate.
)

// Actor describes something that generates events,
// like a container, or a network, or a volume.
// It has a defined name and a set of attributes.
// The container attributes are its labels, other actors
// can generate these attributes from other properties.
type Actor struct {
	ID         string
	Attributes map[string]string
}

// Message represents the information an event contains
type Message struct {
	// Deprecated information from JSONMessage.
	// With data only in container events.
	Status string `json:"status,omitempty"` // Deprecated: use Action instead.
	ID     string `json:"id,omitempty"`     // Deprecated: use Actor.ID instead.
	From   string `json:"from,omitempty"`   // Deprecated: use Actor.Attributes["image"] instead.

	Type   Type
	Action string
	Actor  Actor
	// Engine events are local scope. Cluster events are swarm scope.
	Scope string `json:"scope,omitempty"`

	Time     int64 `json:"time,omitempty"`
	TimeNano int64 `json:"timeNano,omitempty"`
}
   070701000003AD000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/filters 070701000003AE000081A4000000000000000000000001645E367C00001E64000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/filters/parse.go    /*
Package filters provides tools for encoding a mapping of keys to a set of
multiple values.
*/
package filters // import "github.com/docker/docker/api/types/filters"

import (
	"encoding/json"
	"regexp"
	"strings"

	"github.com/docker/docker/api/types/versions"
	"github.com/pkg/errors"
)

// Args stores a mapping of keys to a set of multiple values.
type Args struct {
	fields map[string]map[string]bool
}

// KeyValuePair are used to initialize a new Args
type KeyValuePair struct {
	Key   string
	Value string
}

// Arg creates a new KeyValuePair for initializing Args
func Arg(key, value string) KeyValuePair {
	return KeyValuePair{Key: key, Value: value}
}

// NewArgs returns a new Args populated with the initial args
func NewArgs(initialArgs ...KeyValuePair) Args {
	args := Args{fields: map[string]map[string]bool{}}
	for _, arg := range initialArgs {
		args.Add(arg.Key, arg.Value)
	}
	return args
}

// Keys returns all the keys in list of Args
func (args Args) Keys() []string {
	keys := make([]string, 0, len(args.fields))
	for k := range args.fields {
		keys = append(keys, k)
	}
	return keys
}

// MarshalJSON returns a JSON byte representation of the Args
func (args Args) MarshalJSON() ([]byte, error) {
	if len(args.fields) == 0 {
		return []byte("{}"), nil
	}
	return json.Marshal(args.fields)
}

// ToJSON returns the Args as a JSON encoded string
func ToJSON(a Args) (string, error) {
	if a.Len() == 0 {
		return "", nil
	}
	buf, err := json.Marshal(a)
	return string(buf), err
}

// ToParamWithVersion encodes Args as a JSON string. If version is less than 1.22
// then the encoded format will use an older legacy format where the values are a
// list of strings, instead of a set.
//
// Deprecated: do not use in any new code; use ToJSON instead
func ToParamWithVersion(version string, a Args) (string, error) {
	if a.Len() == 0 {
		return "", nil
	}

	if version != "" && versions.LessThan(version, "1.22") {
		buf, err := json.Marshal(convertArgsToSlice(a.fields))
		return string(buf), err
	}

	return ToJSON(a)
}

// FromJSON decodes a JSON encoded string into Args
func FromJSON(p string) (Args, error) {
	args := NewArgs()

	if p == "" {
		return args, nil
	}

	raw := []byte(p)
	err := json.Unmarshal(raw, &args)
	if err == nil {
		return args, nil
	}

	// Fallback to parsing arguments in the legacy slice format
	deprecated := map[string][]string{}
	if legacyErr := json.Unmarshal(raw, &deprecated); legacyErr != nil {
		return args, invalidFilter{errors.Wrap(err, "invalid filter")}
	}

	args.fields = deprecatedArgs(deprecated)
	return args, nil
}

// UnmarshalJSON populates the Args from JSON encode bytes
func (args Args) UnmarshalJSON(raw []byte) error {
	return json.Unmarshal(raw, &args.fields)
}

// Get returns the list of values associated with the key
func (args Args) Get(key string) []string {
	values := args.fields[key]
	if values == nil {
		return make([]string, 0)
	}
	slice := make([]string, 0, len(values))
	for key := range values {
		slice = append(slice, key)
	}
	return slice
}

// Add a new value to the set of values
func (args Args) Add(key, value string) {
	if _, ok := args.fields[key]; ok {
		args.fields[key][value] = true
	} else {
		args.fields[key] = map[string]bool{value: true}
	}
}

// Del removes a value from the set
func (args Args) Del(key, value string) {
	if _, ok := args.fields[key]; ok {
		delete(args.fields[key], value)
		if len(args.fields[key]) == 0 {
			delete(args.fields, key)
		}
	}
}

// Len returns the number of keys in the mapping
func (args Args) Len() int {
	return len(args.fields)
}

// MatchKVList returns true if all the pairs in sources exist as key=value
// pairs in the mapping at key, or if there are no values at key.
func (args Args) MatchKVList(key string, sources map[string]string) bool {
	fieldValues := args.fields[key]

	// do not filter if there is no filter set or cannot determine filter
	if len(fieldValues) == 0 {
		return true
	}

	if len(sources) == 0 {
		return false
	}

	for value := range fieldValues {
		testKV := strings.SplitN(value, "=", 2)

		v, ok := sources[testKV[0]]
		if !ok {
			return false
		}
		if len(testKV) == 2 && testKV[1] != v {
			return false
		}
	}

	return true
}

// Match returns true if any of the values at key match the source string
func (args Args) Match(field, source string) bool {
	if args.ExactMatch(field, source) {
		return true
	}

	fieldValues := args.fields[field]
	for name2match := range fieldValues {
		match, err := regexp.MatchString(name2match, source)
		if err != nil {
			continue
		}
		if match {
			return true
		}
	}
	return false
}

// ExactMatch returns true if the source matches exactly one of the values.
func (args Args) ExactMatch(key, source string) bool {
	fieldValues, ok := args.fields[key]
	// do not filter if there is no filter set or cannot determine filter
	if !ok || len(fieldValues) == 0 {
		return true
	}

	// try to match full name value to avoid O(N) regular expression matching
	return fieldValues[source]
}

// UniqueExactMatch returns true if there is only one value and the source
// matches exactly the value.
func (args Args) UniqueExactMatch(key, source string) bool {
	fieldValues := args.fields[key]
	// do not filter if there is no filter set or cannot determine filter
	if len(fieldValues) == 0 {
		return true
	}
	if len(args.fields[key]) != 1 {
		return false
	}

	// try to match full name value to avoid O(N) regular expression matching
	return fieldValues[source]
}

// FuzzyMatch returns true if the source matches exactly one value,  or the
// source has one of the values as a prefix.
func (args Args) FuzzyMatch(key, source string) bool {
	if args.ExactMatch(key, source) {
		return true
	}

	fieldValues := args.fields[key]
	for prefix := range fieldValues {
		if strings.HasPrefix(source, prefix) {
			return true
		}
	}
	return false
}

// Contains returns true if the key exists in the mapping
func (args Args) Contains(field string) bool {
	_, ok := args.fields[field]
	return ok
}

type invalidFilter struct{ error }

func (e invalidFilter) Error() string {
	return e.error.Error()
}

func (invalidFilter) InvalidParameter() {}

// Validate compared the set of accepted keys against the keys in the mapping.
// An error is returned if any mapping keys are not in the accepted set.
func (args Args) Validate(accepted map[string]bool) error {
	for name := range args.fields {
		if !accepted[name] {
			return invalidFilter{errors.New("invalid filter '" + name + "'")}
		}
	}
	return nil
}

// WalkValues iterates over the list of values for a key in the mapping and calls
// op() for each value. If op returns an error the iteration stops and the
// error is returned.
func (args Args) WalkValues(field string, op func(value string) error) error {
	if _, ok := args.fields[field]; !ok {
		return nil
	}
	for v := range args.fields[field] {
		if err := op(v); err != nil {
			return err
		}
	}
	return nil
}

// Clone returns a copy of args.
func (args Args) Clone() (newArgs Args) {
	newArgs.fields = make(map[string]map[string]bool, len(args.fields))
	for k, m := range args.fields {
		var mm map[string]bool
		if m != nil {
			mm = make(map[string]bool, len(m))
			for kk, v := range m {
				mm[kk] = v
			}
		}
		newArgs.fields[k] = mm
	}
	return newArgs
}

func deprecatedArgs(d map[string][]string) map[string]map[string]bool {
	m := map[string]map[string]bool{}
	for k, v := range d {
		values := map[string]bool{}
		for _, vv := range v {
			values[vv] = true
		}
		m[k] = values
	}
	return m
}

func convertArgsToSlice(f map[string]map[string]bool) map[string][]string {
	m := map[string][]string{}
	for k, v := range f {
		values := []string{}
		for kk := range v {
			if v[kk] {
				values = append(values, kk)
			}
		}
		m[k] = values
	}
	return m
}
070701000003AF000081A4000000000000000000000001645E367C000002A3000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/graph_driver_data.go    package types

// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command

// GraphDriverData Information about the storage driver used to store the container's and
// image's filesystem.
//
// swagger:model GraphDriverData
type GraphDriverData struct {

	// Low-level storage metadata, provided as key/value pairs.
	//
	// This information is driver-specific, and depends on the storage-driver
	// in use, and should be used for informational purposes only.
	//
	// Required: true
	Data map[string]string `json:"Data"`

	// Name of the storage driver.
	// Required: true
	Name string `json:"Name"`
}
 070701000003B0000081A4000000000000000000000001645E367C0000015D000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/id_response.go  package types

// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command

// IDResponse Response to an API call that returns just an Id
// swagger:model IdResponse
type IDResponse struct {

	// The id of the newly created object.
	// Required: true
	ID string `json:"Id"`
}
   070701000003B1000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/image   070701000003B2000081A4000000000000000000000001645E367C00000361000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/image/image_history.go  package image // import "github.com/docker/docker/api/types/image"

// ----------------------------------------------------------------------------
// Code generated by `swagger generate operation`. DO NOT EDIT.
//
// See hack/generate-swagger-api.sh
// ----------------------------------------------------------------------------

// HistoryResponseItem individual image layer information in response to ImageHistory operation
// swagger:model HistoryResponseItem
type HistoryResponseItem struct {

	// comment
	// Required: true
	Comment string `json:"Comment"`

	// created
	// Required: true
	Created int64 `json:"Created"`

	// created by
	// Required: true
	CreatedBy string `json:"CreatedBy"`

	// Id
	// Required: true
	ID string `json:"Id"`

	// size
	// Required: true
	Size int64 `json:"Size"`

	// tags
	// Required: true
	Tags []string `json:"Tags"`
}
   070701000003B3000081A4000000000000000000000001645E367C000001D3000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/image_delete_response_item.go   package types

// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command

// ImageDeleteResponseItem image delete response item
// swagger:model ImageDeleteResponseItem
type ImageDeleteResponseItem struct {

	// The image ID of an image that was deleted
	Deleted string `json:"Deleted,omitempty"`

	// The image ID of an image that was untagged
	Untagged string `json:"Untagged,omitempty"`
}
 070701000003B4000081A4000000000000000000000001645E367C00000C84000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/image_summary.go    package types

// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command

// ImageSummary image summary
// swagger:model ImageSummary
type ImageSummary struct {

	// Number of containers using this image. Includes both stopped and running
	// containers.
	//
	// This size is not calculated by default, and depends on which API endpoint
	// is used. `-1` indicates that the value has not been set / calculated.
	//
	// Required: true
	Containers int64 `json:"Containers"`

	// Date and time at which the image was created as a Unix timestamp
	// (number of seconds sinds EPOCH).
	//
	// Required: true
	Created int64 `json:"Created"`

	// ID is the content-addressable ID of an image.
	//
	// This identifier is a content-addressable digest calculated from the
	// image's configuration (which includes the digests of layers used by
	// the image).
	//
	// Note that this digest differs from the `RepoDigests` below, which
	// holds digests of image manifests that reference the image.
	//
	// Required: true
	ID string `json:"Id"`

	// User-defined key/value metadata.
	// Required: true
	Labels map[string]string `json:"Labels"`

	// ID of the parent image.
	//
	// Depending on how the image was created, this field may be empty and
	// is only set for images that were built/created locally. This field
	// is empty if the image was pulled from an image registry.
	//
	// Required: true
	ParentID string `json:"ParentId"`

	// List of content-addressable digests of locally available image manifests
	// that the image is referenced from. Multiple manifests can refer to the
	// same image.
	//
	// These digests are usually only available if the image was either pulled
	// from a registry, or if the image was pushed to a registry, which is when
	// the manifest is generated and its digest calculated.
	//
	// Required: true
	RepoDigests []string `json:"RepoDigests"`

	// List of image names/tags in the local image cache that reference this
	// image.
	//
	// Multiple image tags can refer to the same image, and this list may be
	// empty if no tags reference the image, in which case the image is
	// "untagged", in which case it can still be referenced by its ID.
	//
	// Required: true
	RepoTags []string `json:"RepoTags"`

	// Total size of image layers that are shared between this image and other
	// images.
	//
	// This size is not calculated by default. `-1` indicates that the value
	// has not been set / calculated.
	//
	// Required: true
	SharedSize int64 `json:"SharedSize"`

	// Total size of the image including all layers it is composed of.
	//
	// Required: true
	Size int64 `json:"Size"`

	// Total size of the image including all layers it is composed of.
	//
	// In versions of Docker before v1.10, this field was calculated from
	// the image itself and all of its parent images. Docker v1.10 and up
	// store images self-contained, and no longer use a parent-chain, making
	// this field an equivalent of the Size field.
	//
	// This field is kept for backward compatibility, but may be removed in
	// a future version of the API.
	//
	// Required: true
	VirtualSize int64 `json:"VirtualSize"`
}
070701000003B5000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/mount   070701000003B6000081A4000000000000000000000001645E367C00001176000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/mount/mount.go  package mount // import "github.com/docker/docker/api/types/mount"

import (
	"os"
)

// Type represents the type of a mount.
type Type string

// Type constants
const (
	// TypeBind is the type for mounting host dir
	TypeBind Type = "bind"
	// TypeVolume is the type for remote storage volumes
	TypeVolume Type = "volume"
	// TypeTmpfs is the type for mounting tmpfs
	TypeTmpfs Type = "tmpfs"
	// TypeNamedPipe is the type for mounting Windows named pipes
	TypeNamedPipe Type = "npipe"
	// TypeCluster is the type for Swarm Cluster Volumes.
	TypeCluster Type = "cluster"
)

// Mount represents a mount (volume).
type Mount struct {
	Type Type `json:",omitempty"`
	// Source specifies the name of the mount. Depending on mount type, this
	// may be a volume name or a host path, or even ignored.
	// Source is not supported for tmpfs (must be an empty value)
	Source      string      `json:",omitempty"`
	Target      string      `json:",omitempty"`
	ReadOnly    bool        `json:",omitempty"`
	Consistency Consistency `json:",omitempty"`

	BindOptions    *BindOptions    `json:",omitempty"`
	VolumeOptions  *VolumeOptions  `json:",omitempty"`
	TmpfsOptions   *TmpfsOptions   `json:",omitempty"`
	ClusterOptions *ClusterOptions `json:",omitempty"`
}

// Propagation represents the propagation of a mount.
type Propagation string

const (
	// PropagationRPrivate RPRIVATE
	PropagationRPrivate Propagation = "rprivate"
	// PropagationPrivate PRIVATE
	PropagationPrivate Propagation = "private"
	// PropagationRShared RSHARED
	PropagationRShared Propagation = "rshared"
	// PropagationShared SHARED
	PropagationShared Propagation = "shared"
	// PropagationRSlave RSLAVE
	PropagationRSlave Propagation = "rslave"
	// PropagationSlave SLAVE
	PropagationSlave Propagation = "slave"
)

// Propagations is the list of all valid mount propagations
var Propagations = []Propagation{
	PropagationRPrivate,
	PropagationPrivate,
	PropagationRShared,
	PropagationShared,
	PropagationRSlave,
	PropagationSlave,
}

// Consistency represents the consistency requirements of a mount.
type Consistency string

const (
	// ConsistencyFull guarantees bind mount-like consistency
	ConsistencyFull Consistency = "consistent"
	// ConsistencyCached mounts can cache read data and FS structure
	ConsistencyCached Consistency = "cached"
	// ConsistencyDelegated mounts can cache read and written data and structure
	ConsistencyDelegated Consistency = "delegated"
	// ConsistencyDefault provides "consistent" behavior unless overridden
	ConsistencyDefault Consistency = "default"
)

// BindOptions defines options specific to mounts of type "bind".
type BindOptions struct {
	Propagation      Propagation `json:",omitempty"`
	NonRecursive     bool        `json:",omitempty"`
	CreateMountpoint bool        `json:",omitempty"`
}

// VolumeOptions represents the options for a mount of type volume.
type VolumeOptions struct {
	NoCopy       bool              `json:",omitempty"`
	Labels       map[string]string `json:",omitempty"`
	DriverConfig *Driver           `json:",omitempty"`
}

// Driver represents a volume driver.
type Driver struct {
	Name    string            `json:",omitempty"`
	Options map[string]string `json:",omitempty"`
}

// TmpfsOptions defines options specific to mounts of type "tmpfs".
type TmpfsOptions struct {
	// Size sets the size of the tmpfs, in bytes.
	//
	// This will be converted to an operating system specific value
	// depending on the host. For example, on linux, it will be converted to
	// use a 'k', 'm' or 'g' syntax. BSD, though not widely supported with
	// docker, uses a straight byte value.
	//
	// Percentages are not supported.
	SizeBytes int64 `json:",omitempty"`
	// Mode of the tmpfs upon creation
	Mode os.FileMode `json:",omitempty"`

	// TODO(stevvooe): There are several more tmpfs flags, specified in the
	// daemon, that are accepted. Only the most basic are added for now.
	//
	// From https://github.com/moby/sys/blob/mount/v0.1.1/mount/flags.go#L47-L56
	//
	// var validFlags = map[string]bool{
	// 	"":          true,
	// 	"size":      true, X
	// 	"mode":      true, X
	// 	"uid":       true,
	// 	"gid":       true,
	// 	"nr_inodes": true,
	// 	"nr_blocks": true,
	// 	"mpol":      true,
	// }
	//
	// Some of these may be straightforward to add, but others, such as
	// uid/gid have implications in a clustered system.
}

// ClusterOptions specifies options for a Cluster volume.
type ClusterOptions struct {
	// intentionally empty
}
  070701000003B7000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/network 070701000003B8000081A4000000000000000000000001645E367C00000D4C000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/network/network.go  package network // import "github.com/docker/docker/api/types/network"
import (
	"github.com/docker/docker/api/types/filters"
)

// Address represents an IP address
type Address struct {
	Addr      string
	PrefixLen int
}

// IPAM represents IP Address Management
type IPAM struct {
	Driver  string
	Options map[string]string // Per network IPAM driver options
	Config  []IPAMConfig
}

// IPAMConfig represents IPAM configurations
type IPAMConfig struct {
	Subnet     string            `json:",omitempty"`
	IPRange    string            `json:",omitempty"`
	Gateway    string            `json:",omitempty"`
	AuxAddress map[string]string `json:"AuxiliaryAddresses,omitempty"`
}

// EndpointIPAMConfig represents IPAM configurations for the endpoint
type EndpointIPAMConfig struct {
	IPv4Address  string   `json:",omitempty"`
	IPv6Address  string   `json:",omitempty"`
	LinkLocalIPs []string `json:",omitempty"`
}

// Copy makes a copy of the endpoint ipam config
func (cfg *EndpointIPAMConfig) Copy() *EndpointIPAMConfig {
	cfgCopy := *cfg
	cfgCopy.LinkLocalIPs = make([]string, 0, len(cfg.LinkLocalIPs))
	cfgCopy.LinkLocalIPs = append(cfgCopy.LinkLocalIPs, cfg.LinkLocalIPs...)
	return &cfgCopy
}

// PeerInfo represents one peer of an overlay network
type PeerInfo struct {
	Name string
	IP   string
}

// EndpointSettings stores the network endpoint details
type EndpointSettings struct {
	// Configurations
	IPAMConfig *EndpointIPAMConfig
	Links      []string
	Aliases    []string
	// Operational data
	NetworkID           string
	EndpointID          string
	Gateway             string
	IPAddress           string
	IPPrefixLen         int
	IPv6Gateway         string
	GlobalIPv6Address   string
	GlobalIPv6PrefixLen int
	MacAddress          string
	DriverOpts          map[string]string
}

// Task carries the information about one backend task
type Task struct {
	Name       string
	EndpointID string
	EndpointIP string
	Info       map[string]string
}

// ServiceInfo represents service parameters with the list of service's tasks
type ServiceInfo struct {
	VIP          string
	Ports        []string
	LocalLBIndex int
	Tasks        []Task
}

// Copy makes a deep copy of `EndpointSettings`
func (es *EndpointSettings) Copy() *EndpointSettings {
	epCopy := *es
	if es.IPAMConfig != nil {
		epCopy.IPAMConfig = es.IPAMConfig.Copy()
	}

	if es.Links != nil {
		links := make([]string, 0, len(es.Links))
		epCopy.Links = append(links, es.Links...)
	}

	if es.Aliases != nil {
		aliases := make([]string, 0, len(es.Aliases))
		epCopy.Aliases = append(aliases, es.Aliases...)
	}
	return &epCopy
}

// NetworkingConfig represents the container's networking configuration for each of its interfaces
// Carries the networking configs specified in the `docker run` and `docker network connect` commands
type NetworkingConfig struct {
	EndpointsConfig map[string]*EndpointSettings // Endpoint configs for each connecting network
}

// ConfigReference specifies the source which provides a network's configuration
type ConfigReference struct {
	Network string
}

var acceptedFilters = map[string]bool{
	"dangling": true,
	"driver":   true,
	"id":       true,
	"label":    true,
	"name":     true,
	"scope":    true,
	"type":     true,
}

// ValidateFilters validates the list of filter args with the available filters.
func ValidateFilters(filter filters.Args) error {
	return filter.Validate(acceptedFilters)
}
070701000003B9000081A4000000000000000000000001645E367C00000FF6000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/plugin.go   package types

// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command

// Plugin A plugin for the Engine API
// swagger:model Plugin
type Plugin struct {

	// config
	// Required: true
	Config PluginConfig `json:"Config"`

	// True if the plugin is running. False if the plugin is not running, only installed.
	// Required: true
	Enabled bool `json:"Enabled"`

	// Id
	ID string `json:"Id,omitempty"`

	// name
	// Required: true
	Name string `json:"Name"`

	// plugin remote reference used to push/pull the plugin
	PluginReference string `json:"PluginReference,omitempty"`

	// settings
	// Required: true
	Settings PluginSettings `json:"Settings"`
}

// PluginConfig The config of a plugin.
// swagger:model PluginConfig
type PluginConfig struct {

	// args
	// Required: true
	Args PluginConfigArgs `json:"Args"`

	// description
	// Required: true
	Description string `json:"Description"`

	// Docker Version used to create the plugin
	DockerVersion string `json:"DockerVersion,omitempty"`

	// documentation
	// Required: true
	Documentation string `json:"Documentation"`

	// entrypoint
	// Required: true
	Entrypoint []string `json:"Entrypoint"`

	// env
	// Required: true
	Env []PluginEnv `json:"Env"`

	// interface
	// Required: true
	Interface PluginConfigInterface `json:"Interface"`

	// ipc host
	// Required: true
	IpcHost bool `json:"IpcHost"`

	// linux
	// Required: true
	Linux PluginConfigLinux `json:"Linux"`

	// mounts
	// Required: true
	Mounts []PluginMount `json:"Mounts"`

	// network
	// Required: true
	Network PluginConfigNetwork `json:"Network"`

	// pid host
	// Required: true
	PidHost bool `json:"PidHost"`

	// propagated mount
	// Required: true
	PropagatedMount string `json:"PropagatedMount"`

	// user
	User PluginConfigUser `json:"User,omitempty"`

	// work dir
	// Required: true
	WorkDir string `json:"WorkDir"`

	// rootfs
	Rootfs *PluginConfigRootfs `json:"rootfs,omitempty"`
}

// PluginConfigArgs plugin config args
// swagger:model PluginConfigArgs
type PluginConfigArgs struct {

	// description
	// Required: true
	Description string `json:"Description"`

	// name
	// Required: true
	Name string `json:"Name"`

	// settable
	// Required: true
	Settable []string `json:"Settable"`

	// value
	// Required: true
	Value []string `json:"Value"`
}

// PluginConfigInterface The interface between Docker and the plugin
// swagger:model PluginConfigInterface
type PluginConfigInterface struct {

	// Protocol to use for clients connecting to the plugin.
	ProtocolScheme string `json:"ProtocolScheme,omitempty"`

	// socket
	// Required: true
	Socket string `json:"Socket"`

	// types
	// Required: true
	Types []PluginInterfaceType `json:"Types"`
}

// PluginConfigLinux plugin config linux
// swagger:model PluginConfigLinux
type PluginConfigLinux struct {

	// allow all devices
	// Required: true
	AllowAllDevices bool `json:"AllowAllDevices"`

	// capabilities
	// Required: true
	Capabilities []string `json:"Capabilities"`

	// devices
	// Required: true
	Devices []PluginDevice `json:"Devices"`
}

// PluginConfigNetwork plugin config network
// swagger:model PluginConfigNetwork
type PluginConfigNetwork struct {

	// type
	// Required: true
	Type string `json:"Type"`
}

// PluginConfigRootfs plugin config rootfs
// swagger:model PluginConfigRootfs
type PluginConfigRootfs struct {

	// diff ids
	DiffIds []string `json:"diff_ids"`

	// type
	Type string `json:"type,omitempty"`
}

// PluginConfigUser plugin config user
// swagger:model PluginConfigUser
type PluginConfigUser struct {

	// g ID
	GID uint32 `json:"GID,omitempty"`

	// UID
	UID uint32 `json:"UID,omitempty"`
}

// PluginSettings Settings that can be modified by users.
// swagger:model PluginSettings
type PluginSettings struct {

	// args
	// Required: true
	Args []string `json:"Args"`

	// devices
	// Required: true
	Devices []PluginDevice `json:"Devices"`

	// env
	// Required: true
	Env []string `json:"Env"`

	// mounts
	// Required: true
	Mounts []PluginMount `json:"Mounts"`
}
  070701000003BA000081A4000000000000000000000001645E367C000001F2000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/plugin_device.go    package types

// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command

// PluginDevice plugin device
// swagger:model PluginDevice
type PluginDevice struct {

	// description
	// Required: true
	Description string `json:"Description"`

	// name
	// Required: true
	Name string `json:"Name"`

	// path
	// Required: true
	Path *string `json:"Path"`

	// settable
	// Required: true
	Settable []string `json:"Settable"`
}
  070701000003BB000081A4000000000000000000000001645E367C000001E9000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/plugin_env.go   package types

// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command

// PluginEnv plugin env
// swagger:model PluginEnv
type PluginEnv struct {

	// description
	// Required: true
	Description string `json:"Description"`

	// name
	// Required: true
	Name string `json:"Name"`

	// settable
	// Required: true
	Settable []string `json:"Settable"`

	// value
	// Required: true
	Value *string `json:"Value"`
}
   070701000003BC000081A4000000000000000000000001645E367C000001D4000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/plugin_interface_type.go    package types

// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command

// PluginInterfaceType plugin interface type
// swagger:model PluginInterfaceType
type PluginInterfaceType struct {

	// capability
	// Required: true
	Capability string `json:"Capability"`

	// prefix
	// Required: true
	Prefix string `json:"Prefix"`

	// version
	// Required: true
	Version string `json:"Version"`
}
070701000003BD000081A4000000000000000000000001645E367C000002BC000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/plugin_mount.go package types

// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command

// PluginMount plugin mount
// swagger:model PluginMount
type PluginMount struct {

	// description
	// Required: true
	Description string `json:"Description"`

	// destination
	// Required: true
	Destination string `json:"Destination"`

	// name
	// Required: true
	Name string `json:"Name"`

	// options
	// Required: true
	Options []string `json:"Options"`

	// settable
	// Required: true
	Settable []string `json:"Settable"`

	// source
	// Required: true
	Source *string `json:"Source"`

	// type
	// Required: true
	Type string `json:"Type"`
}
070701000003BE000081A4000000000000000000000001645E367C000006A2000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/plugin_responses.go package types // import "github.com/docker/docker/api/types"

import (
	"encoding/json"
	"fmt"
	"sort"
)

// PluginsListResponse contains the response for the Engine API
type PluginsListResponse []*Plugin

// UnmarshalJSON implements json.Unmarshaler for PluginInterfaceType
func (t *PluginInterfaceType) UnmarshalJSON(p []byte) error {
	versionIndex := len(p)
	prefixIndex := 0
	if len(p) < 2 || p[0] != '"' || p[len(p)-1] != '"' {
		return fmt.Errorf("%q is not a plugin interface type", p)
	}
	p = p[1 : len(p)-1]
loop:
	for i, b := range p {
		switch b {
		case '.':
			prefixIndex = i
		case '/':
			versionIndex = i
			break loop
		}
	}
	t.Prefix = string(p[:prefixIndex])
	t.Capability = string(p[prefixIndex+1 : versionIndex])
	if versionIndex < len(p) {
		t.Version = string(p[versionIndex+1:])
	}
	return nil
}

// MarshalJSON implements json.Marshaler for PluginInterfaceType
func (t *PluginInterfaceType) MarshalJSON() ([]byte, error) {
	return json.Marshal(t.String())
}

// String implements fmt.Stringer for PluginInterfaceType
func (t PluginInterfaceType) String() string {
	return fmt.Sprintf("%s.%s/%s", t.Prefix, t.Capability, t.Version)
}

// PluginPrivilege describes a permission the user has to accept
// upon installing a plugin.
type PluginPrivilege struct {
	Name        string
	Description string
	Value       []string
}

// PluginPrivileges is a list of PluginPrivilege
type PluginPrivileges []PluginPrivilege

func (s PluginPrivileges) Len() int {
	return len(s)
}

func (s PluginPrivileges) Less(i, j int) bool {
	return s[i].Name < s[j].Name
}

func (s PluginPrivileges) Swap(i, j int) {
	sort.Strings(s[i].Value)
	sort.Strings(s[j].Value)
	s[i], s[j] = s[j], s[i]
}
  070701000003BF000081A4000000000000000000000001645E367C0000021F000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/port.go package types

// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command

// Port An open port on a container
// swagger:model Port
type Port struct {

	// Host IP address that the container's port is mapped to
	IP string `json:"IP,omitempty"`

	// Port on the container
	// Required: true
	PrivatePort uint16 `json:"PrivatePort"`

	// Port exposed on the host
	PublicPort uint16 `json:"PublicPort,omitempty"`

	// type
	// Required: true
	Type string `json:"Type"`
}
 070701000003C0000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/registry    070701000003C1000081A4000000000000000000000001645E367C000002BB000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/registry/authenticate.go    package registry // import "github.com/docker/docker/api/types/registry"

// ----------------------------------------------------------------------------
// DO NOT EDIT THIS FILE
// This file was generated by `swagger generate operation`
//
// See hack/generate-swagger-api.sh
// ----------------------------------------------------------------------------

// AuthenticateOKBody authenticate o k body
// swagger:model AuthenticateOKBody
type AuthenticateOKBody struct {

	// An opaque token used to authenticate a user after a successful login
	// Required: true
	IdentityToken string `json:"IdentityToken"`

	// The status of the authentication
	// Required: true
	Status string `json:"Status"`
}
 070701000003C2000081A4000000000000000000000001645E367C00000F25000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/registry/registry.go    package registry // import "github.com/docker/docker/api/types/registry"

import (
	"encoding/json"
	"net"

	v1 "github.com/opencontainers/image-spec/specs-go/v1"
)

// ServiceConfig stores daemon registry services configuration.
type ServiceConfig struct {
	AllowNondistributableArtifactsCIDRs     []*NetIPNet
	AllowNondistributableArtifactsHostnames []string
	InsecureRegistryCIDRs                   []*NetIPNet           `json:"InsecureRegistryCIDRs"`
	IndexConfigs                            map[string]*IndexInfo `json:"IndexConfigs"`
	Mirrors                                 []string
}

// NetIPNet is the net.IPNet type, which can be marshalled and
// unmarshalled to JSON
type NetIPNet net.IPNet

// String returns the CIDR notation of ipnet
func (ipnet *NetIPNet) String() string {
	return (*net.IPNet)(ipnet).String()
}

// MarshalJSON returns the JSON representation of the IPNet
func (ipnet *NetIPNet) MarshalJSON() ([]byte, error) {
	return json.Marshal((*net.IPNet)(ipnet).String())
}

// UnmarshalJSON sets the IPNet from a byte array of JSON
func (ipnet *NetIPNet) UnmarshalJSON(b []byte) (err error) {
	var ipnetStr string
	if err = json.Unmarshal(b, &ipnetStr); err == nil {
		var cidr *net.IPNet
		if _, cidr, err = net.ParseCIDR(ipnetStr); err == nil {
			*ipnet = NetIPNet(*cidr)
		}
	}
	return
}

// IndexInfo contains information about a registry
//
// RepositoryInfo Examples:
//
//	{
//	  "Index" : {
//	    "Name" : "docker.io",
//	    "Mirrors" : ["https://registry-2.docker.io/v1/", "https://registry-3.docker.io/v1/"],
//	    "Secure" : true,
//	    "Official" : true,
//	  },
//	  "RemoteName" : "library/debian",
//	  "LocalName" : "debian",
//	  "CanonicalName" : "docker.io/debian"
//	  "Official" : true,
//	}
//
//	{
//	  "Index" : {
//	    "Name" : "127.0.0.1:5000",
//	    "Mirrors" : [],
//	    "Secure" : false,
//	    "Official" : false,
//	  },
//	  "RemoteName" : "user/repo",
//	  "LocalName" : "127.0.0.1:5000/user/repo",
//	  "CanonicalName" : "127.0.0.1:5000/user/repo",
//	  "Official" : false,
//	}
type IndexInfo struct {
	// Name is the name of the registry, such as "docker.io"
	Name string
	// Mirrors is a list of mirrors, expressed as URIs
	Mirrors []string
	// Secure is set to false if the registry is part of the list of
	// insecure registries. Insecure registries accept HTTP and/or accept
	// HTTPS with certificates from unknown CAs.
	Secure bool
	// Official indicates whether this is an official registry
	Official bool
}

// SearchResult describes a search result returned from a registry
type SearchResult struct {
	// StarCount indicates the number of stars this repository has
	StarCount int `json:"star_count"`
	// IsOfficial is true if the result is from an official repository.
	IsOfficial bool `json:"is_official"`
	// Name is the name of the repository
	Name string `json:"name"`
	// IsAutomated indicates whether the result is automated
	IsAutomated bool `json:"is_automated"`
	// Description is a textual description of the repository
	Description string `json:"description"`
}

// SearchResults lists a collection search results returned from a registry
type SearchResults struct {
	// Query contains the query string that generated the search results
	Query string `json:"query"`
	// NumResults indicates the number of results the query returned
	NumResults int `json:"num_results"`
	// Results is a slice containing the actual results for the search
	Results []SearchResult `json:"results"`
}

// DistributionInspect describes the result obtained from contacting the
// registry to retrieve image metadata
type DistributionInspect struct {
	// Descriptor contains information about the manifest, including
	// the content addressable digest
	Descriptor v1.Descriptor
	// Platforms contains the list of platforms supported by the image,
	// obtained by parsing the manifest
	Platforms []v1.Platform
}
   070701000003C3000081A4000000000000000000000001645E367C00000157000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/service_update_response.go  package types

// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command

// ServiceUpdateResponse service update response
// swagger:model ServiceUpdateResponse
type ServiceUpdateResponse struct {

	// Optional warning messages
	Warnings []string `json:"Warnings"`
}
 070701000003C4000081A4000000000000000000000001645E367C00001AFB000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/stats.go    // Package types is used for API stability in the types and response to the
// consumers of the API stats endpoint.
package types // import "github.com/docker/docker/api/types"

import "time"

// ThrottlingData stores CPU throttling stats of one running container.
// Not used on Windows.
type ThrottlingData struct {
	// Number of periods with throttling active
	Periods uint64 `json:"periods"`
	// Number of periods when the container hits its throttling limit.
	ThrottledPeriods uint64 `json:"throttled_periods"`
	// Aggregate time the container was throttled for in nanoseconds.
	ThrottledTime uint64 `json:"throttled_time"`
}

// CPUUsage stores All CPU stats aggregated since container inception.
type CPUUsage struct {
	// Total CPU time consumed.
	// Units: nanoseconds (Linux)
	// Units: 100's of nanoseconds (Windows)
	TotalUsage uint64 `json:"total_usage"`

	// Total CPU time consumed per core (Linux). Not used on Windows.
	// Units: nanoseconds.
	PercpuUsage []uint64 `json:"percpu_usage,omitempty"`

	// Time spent by tasks of the cgroup in kernel mode (Linux).
	// Time spent by all container processes in kernel mode (Windows).
	// Units: nanoseconds (Linux).
	// Units: 100's of nanoseconds (Windows). Not populated for Hyper-V Containers.
	UsageInKernelmode uint64 `json:"usage_in_kernelmode"`

	// Time spent by tasks of the cgroup in user mode (Linux).
	// Time spent by all container processes in user mode (Windows).
	// Units: nanoseconds (Linux).
	// Units: 100's of nanoseconds (Windows). Not populated for Hyper-V Containers
	UsageInUsermode uint64 `json:"usage_in_usermode"`
}

// CPUStats aggregates and wraps all CPU related info of container
type CPUStats struct {
	// CPU Usage. Linux and Windows.
	CPUUsage CPUUsage `json:"cpu_usage"`

	// System Usage. Linux only.
	SystemUsage uint64 `json:"system_cpu_usage,omitempty"`

	// Online CPUs. Linux only.
	OnlineCPUs uint32 `json:"online_cpus,omitempty"`

	// Throttling Data. Linux only.
	ThrottlingData ThrottlingData `json:"throttling_data,omitempty"`
}

// MemoryStats aggregates all memory stats since container inception on Linux.
// Windows returns stats for commit and private working set only.
type MemoryStats struct {
	// Linux Memory Stats

	// current res_counter usage for memory
	Usage uint64 `json:"usage,omitempty"`
	// maximum usage ever recorded.
	MaxUsage uint64 `json:"max_usage,omitempty"`
	// TODO(vishh): Export these as stronger types.
	// all the stats exported via memory.stat.
	Stats map[string]uint64 `json:"stats,omitempty"`
	// number of times memory usage hits limits.
	Failcnt uint64 `json:"failcnt,omitempty"`
	Limit   uint64 `json:"limit,omitempty"`

	// Windows Memory Stats
	// See https://technet.microsoft.com/en-us/magazine/ff382715.aspx

	// committed bytes
	Commit uint64 `json:"commitbytes,omitempty"`
	// peak committed bytes
	CommitPeak uint64 `json:"commitpeakbytes,omitempty"`
	// private working set
	PrivateWorkingSet uint64 `json:"privateworkingset,omitempty"`
}

// BlkioStatEntry is one small entity to store a piece of Blkio stats
// Not used on Windows.
type BlkioStatEntry struct {
	Major uint64 `json:"major"`
	Minor uint64 `json:"minor"`
	Op    string `json:"op"`
	Value uint64 `json:"value"`
}

// BlkioStats stores All IO service stats for data read and write.
// This is a Linux specific structure as the differences between expressing
// block I/O on Windows and Linux are sufficiently significant to make
// little sense attempting to morph into a combined structure.
type BlkioStats struct {
	// number of bytes transferred to and from the block device
	IoServiceBytesRecursive []BlkioStatEntry `json:"io_service_bytes_recursive"`
	IoServicedRecursive     []BlkioStatEntry `json:"io_serviced_recursive"`
	IoQueuedRecursive       []BlkioStatEntry `json:"io_queue_recursive"`
	IoServiceTimeRecursive  []BlkioStatEntry `json:"io_service_time_recursive"`
	IoWaitTimeRecursive     []BlkioStatEntry `json:"io_wait_time_recursive"`
	IoMergedRecursive       []BlkioStatEntry `json:"io_merged_recursive"`
	IoTimeRecursive         []BlkioStatEntry `json:"io_time_recursive"`
	SectorsRecursive        []BlkioStatEntry `json:"sectors_recursive"`
}

// StorageStats is the disk I/O stats for read/write on Windows.
type StorageStats struct {
	ReadCountNormalized  uint64 `json:"read_count_normalized,omitempty"`
	ReadSizeBytes        uint64 `json:"read_size_bytes,omitempty"`
	WriteCountNormalized uint64 `json:"write_count_normalized,omitempty"`
	WriteSizeBytes       uint64 `json:"write_size_bytes,omitempty"`
}

// NetworkStats aggregates the network stats of one container
type NetworkStats struct {
	// Bytes received. Windows and Linux.
	RxBytes uint64 `json:"rx_bytes"`
	// Packets received. Windows and Linux.
	RxPackets uint64 `json:"rx_packets"`
	// Received errors. Not used on Windows. Note that we don't `omitempty` this
	// field as it is expected in the >=v1.21 API stats structure.
	RxErrors uint64 `json:"rx_errors"`
	// Incoming packets dropped. Windows and Linux.
	RxDropped uint64 `json:"rx_dropped"`
	// Bytes sent. Windows and Linux.
	TxBytes uint64 `json:"tx_bytes"`
	// Packets sent. Windows and Linux.
	TxPackets uint64 `json:"tx_packets"`
	// Sent errors. Not used on Windows. Note that we don't `omitempty` this
	// field as it is expected in the >=v1.21 API stats structure.
	TxErrors uint64 `json:"tx_errors"`
	// Outgoing packets dropped. Windows and Linux.
	TxDropped uint64 `json:"tx_dropped"`
	// Endpoint ID. Not used on Linux.
	EndpointID string `json:"endpoint_id,omitempty"`
	// Instance ID. Not used on Linux.
	InstanceID string `json:"instance_id,omitempty"`
}

// PidsStats contains the stats of a container's pids
type PidsStats struct {
	// Current is the number of pids in the cgroup
	Current uint64 `json:"current,omitempty"`
	// Limit is the hard limit on the number of pids in the cgroup.
	// A "Limit" of 0 means that there is no limit.
	Limit uint64 `json:"limit,omitempty"`
}

// Stats is Ultimate struct aggregating all types of stats of one container
type Stats struct {
	// Common stats
	Read    time.Time `json:"read"`
	PreRead time.Time `json:"preread"`

	// Linux specific stats, not populated on Windows.
	PidsStats  PidsStats  `json:"pids_stats,omitempty"`
	BlkioStats BlkioStats `json:"blkio_stats,omitempty"`

	// Windows specific stats, not populated on Linux.
	NumProcs     uint32       `json:"num_procs"`
	StorageStats StorageStats `json:"storage_stats,omitempty"`

	// Shared stats
	CPUStats    CPUStats    `json:"cpu_stats,omitempty"`
	PreCPUStats CPUStats    `json:"precpu_stats,omitempty"` // "Pre"="Previous"
	MemoryStats MemoryStats `json:"memory_stats,omitempty"`
}

// StatsJSON is newly used Networks
type StatsJSON struct {
	Stats

	Name string `json:"name,omitempty"`
	ID   string `json:"id,omitempty"`

	// Networks request version >=1.21
	Networks map[string]NetworkStats `json:"networks,omitempty"`
}
 070701000003C5000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/strslice    070701000003C6000081A4000000000000000000000001645E367C0000033C000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/strslice/strslice.go    package strslice // import "github.com/docker/docker/api/types/strslice"

import "encoding/json"

// StrSlice represents a string or an array of strings.
// We need to override the json decoder to accept both options.
type StrSlice []string

// UnmarshalJSON decodes the byte slice whether it's a string or an array of
// strings. This method is needed to implement json.Unmarshaler.
func (e *StrSlice) UnmarshalJSON(b []byte) error {
	if len(b) == 0 {
		// With no input, we preserve the existing value by returning nil and
		// leaving the target alone. This allows defining default values for
		// the type.
		return nil
	}

	p := make([]string, 0, 1)
	if err := json.Unmarshal(b, &p); err != nil {
		var s string
		if err := json.Unmarshal(b, &s); err != nil {
			return err
		}
		p = append(p, s)
	}

	*e = p
	return nil
}
070701000003C7000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/swarm   070701000003C8000081A4000000000000000000000001645E367C00000552000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/swarm/common.go package swarm // import "github.com/docker/docker/api/types/swarm"

import (
	"strconv"
	"time"
)

// Version represents the internal object version.
type Version struct {
	Index uint64 `json:",omitempty"`
}

// String implements fmt.Stringer interface.
func (v Version) String() string {
	return strconv.FormatUint(v.Index, 10)
}

// Meta is a base object inherited by most of the other once.
type Meta struct {
	Version   Version   `json:",omitempty"`
	CreatedAt time.Time `json:",omitempty"`
	UpdatedAt time.Time `json:",omitempty"`
}

// Annotations represents how to describe an object.
type Annotations struct {
	Name   string            `json:",omitempty"`
	Labels map[string]string `json:"Labels"`
}

// Driver represents a driver (network, logging, secrets backend).
type Driver struct {
	Name    string            `json:",omitempty"`
	Options map[string]string `json:",omitempty"`
}

// TLSInfo represents the TLS information about what CA certificate is trusted,
// and who the issuer for a TLS certificate is
type TLSInfo struct {
	// TrustRoot is the trusted CA root certificate in PEM format
	TrustRoot string `json:",omitempty"`

	// CertIssuer is the raw subject bytes of the issuer
	CertIssuerSubject []byte `json:",omitempty"`

	// CertIssuerPublicKey is the raw public key bytes of the issuer
	CertIssuerPublicKey []byte `json:",omitempty"`
}
  070701000003C9000081A4000000000000000000000001645E367C00000448000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/swarm/config.go package swarm // import "github.com/docker/docker/api/types/swarm"

import "os"

// Config represents a config.
type Config struct {
	ID string
	Meta
	Spec ConfigSpec
}

// ConfigSpec represents a config specification from a config in swarm
type ConfigSpec struct {
	Annotations
	Data []byte `json:",omitempty"`

	// Templating controls whether and how to evaluate the config payload as
	// a template. If it is not set, no templating is used.
	Templating *Driver `json:",omitempty"`
}

// ConfigReferenceFileTarget is a file target in a config reference
type ConfigReferenceFileTarget struct {
	Name string
	UID  string
	GID  string
	Mode os.FileMode
}

// ConfigReferenceRuntimeTarget is a target for a config specifying that it
// isn't mounted into the container but instead has some other purpose.
type ConfigReferenceRuntimeTarget struct{}

// ConfigReference is a reference to a config in swarm
type ConfigReference struct {
	File       *ConfigReferenceFileTarget    `json:",omitempty"`
	Runtime    *ConfigReferenceRuntimeTarget `json:",omitempty"`
	ConfigID   string
	ConfigName string
}
070701000003CA000081A4000000000000000000000001645E367C00000C52000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/swarm/container.go  package swarm // import "github.com/docker/docker/api/types/swarm"

import (
	"time"

	"github.com/docker/docker/api/types/container"
	"github.com/docker/docker/api/types/mount"
	"github.com/docker/go-units"
)

// DNSConfig specifies DNS related configurations in resolver configuration file (resolv.conf)
// Detailed documentation is available in:
// http://man7.org/linux/man-pages/man5/resolv.conf.5.html
// `nameserver`, `search`, `options` have been supported.
// TODO: `domain` is not supported yet.
type DNSConfig struct {
	// Nameservers specifies the IP addresses of the name servers
	Nameservers []string `json:",omitempty"`
	// Search specifies the search list for host-name lookup
	Search []string `json:",omitempty"`
	// Options allows certain internal resolver variables to be modified
	Options []string `json:",omitempty"`
}

// SELinuxContext contains the SELinux labels of the container.
type SELinuxContext struct {
	Disable bool

	User  string
	Role  string
	Type  string
	Level string
}

// CredentialSpec for managed service account (Windows only)
type CredentialSpec struct {
	Config   string
	File     string
	Registry string
}

// Privileges defines the security options for the container.
type Privileges struct {
	CredentialSpec *CredentialSpec
	SELinuxContext *SELinuxContext
}

// ContainerSpec represents the spec of a container.
type ContainerSpec struct {
	Image           string                  `json:",omitempty"`
	Labels          map[string]string       `json:",omitempty"`
	Command         []string                `json:",omitempty"`
	Args            []string                `json:",omitempty"`
	Hostname        string                  `json:",omitempty"`
	Env             []string                `json:",omitempty"`
	Dir             string                  `json:",omitempty"`
	User            string                  `json:",omitempty"`
	Groups          []string                `json:",omitempty"`
	Privileges      *Privileges             `json:",omitempty"`
	Init            *bool                   `json:",omitempty"`
	StopSignal      string                  `json:",omitempty"`
	TTY             bool                    `json:",omitempty"`
	OpenStdin       bool                    `json:",omitempty"`
	ReadOnly        bool                    `json:",omitempty"`
	Mounts          []mount.Mount           `json:",omitempty"`
	StopGracePeriod *time.Duration          `json:",omitempty"`
	Healthcheck     *container.HealthConfig `json:",omitempty"`
	// The format of extra hosts on swarmkit is specified in:
	// http://man7.org/linux/man-pages/man5/hosts.5.html
	//    IP_address canonical_hostname [aliases...]
	Hosts          []string            `json:",omitempty"`
	DNSConfig      *DNSConfig          `json:",omitempty"`
	Secrets        []*SecretReference  `json:",omitempty"`
	Configs        []*ConfigReference  `json:",omitempty"`
	Isolation      container.Isolation `json:",omitempty"`
	Sysctls        map[string]string   `json:",omitempty"`
	CapabilityAdd  []string            `json:",omitempty"`
	CapabilityDrop []string            `json:",omitempty"`
	Ulimits        []*units.Ulimit     `json:",omitempty"`
}
  070701000003CB000081A4000000000000000000000001645E367C00000F37000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/swarm/network.go    package swarm // import "github.com/docker/docker/api/types/swarm"

import (
	"github.com/docker/docker/api/types/network"
)

// Endpoint represents an endpoint.
type Endpoint struct {
	Spec       EndpointSpec        `json:",omitempty"`
	Ports      []PortConfig        `json:",omitempty"`
	VirtualIPs []EndpointVirtualIP `json:",omitempty"`
}

// EndpointSpec represents the spec of an endpoint.
type EndpointSpec struct {
	Mode  ResolutionMode `json:",omitempty"`
	Ports []PortConfig   `json:",omitempty"`
}

// ResolutionMode represents a resolution mode.
type ResolutionMode string

const (
	// ResolutionModeVIP VIP
	ResolutionModeVIP ResolutionMode = "vip"
	// ResolutionModeDNSRR DNSRR
	ResolutionModeDNSRR ResolutionMode = "dnsrr"
)

// PortConfig represents the config of a port.
type PortConfig struct {
	Name     string             `json:",omitempty"`
	Protocol PortConfigProtocol `json:",omitempty"`
	// TargetPort is the port inside the container
	TargetPort uint32 `json:",omitempty"`
	// PublishedPort is the port on the swarm hosts
	PublishedPort uint32 `json:",omitempty"`
	// PublishMode is the mode in which port is published
	PublishMode PortConfigPublishMode `json:",omitempty"`
}

// PortConfigPublishMode represents the mode in which the port is to
// be published.
type PortConfigPublishMode string

const (
	// PortConfigPublishModeIngress is used for ports published
	// for ingress load balancing using routing mesh.
	PortConfigPublishModeIngress PortConfigPublishMode = "ingress"
	// PortConfigPublishModeHost is used for ports published
	// for direct host level access on the host where the task is running.
	PortConfigPublishModeHost PortConfigPublishMode = "host"
)

// PortConfigProtocol represents the protocol of a port.
type PortConfigProtocol string

const (
	// TODO(stevvooe): These should be used generally, not just for PortConfig.

	// PortConfigProtocolTCP TCP
	PortConfigProtocolTCP PortConfigProtocol = "tcp"
	// PortConfigProtocolUDP UDP
	PortConfigProtocolUDP PortConfigProtocol = "udp"
	// PortConfigProtocolSCTP SCTP
	PortConfigProtocolSCTP PortConfigProtocol = "sctp"
)

// EndpointVirtualIP represents the virtual ip of a port.
type EndpointVirtualIP struct {
	NetworkID string `json:",omitempty"`
	Addr      string `json:",omitempty"`
}

// Network represents a network.
type Network struct {
	ID string
	Meta
	Spec        NetworkSpec  `json:",omitempty"`
	DriverState Driver       `json:",omitempty"`
	IPAMOptions *IPAMOptions `json:",omitempty"`
}

// NetworkSpec represents the spec of a network.
type NetworkSpec struct {
	Annotations
	DriverConfiguration *Driver                  `json:",omitempty"`
	IPv6Enabled         bool                     `json:",omitempty"`
	Internal            bool                     `json:",omitempty"`
	Attachable          bool                     `json:",omitempty"`
	Ingress             bool                     `json:",omitempty"`
	IPAMOptions         *IPAMOptions             `json:",omitempty"`
	ConfigFrom          *network.ConfigReference `json:",omitempty"`
	Scope               string                   `json:",omitempty"`
}

// NetworkAttachmentConfig represents the configuration of a network attachment.
type NetworkAttachmentConfig struct {
	Target     string            `json:",omitempty"`
	Aliases    []string          `json:",omitempty"`
	DriverOpts map[string]string `json:",omitempty"`
}

// NetworkAttachment represents a network attachment.
type NetworkAttachment struct {
	Network   Network  `json:",omitempty"`
	Addresses []string `json:",omitempty"`
}

// IPAMOptions represents ipam options.
type IPAMOptions struct {
	Driver  Driver       `json:",omitempty"`
	Configs []IPAMConfig `json:",omitempty"`
}

// IPAMConfig represents ipam configuration.
type IPAMConfig struct {
	Subnet  string `json:",omitempty"`
	Range   string `json:",omitempty"`
	Gateway string `json:",omitempty"`
}
 070701000003CC000081A4000000000000000000000001645E367C000011AF000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/swarm/node.go   package swarm // import "github.com/docker/docker/api/types/swarm"

// Node represents a node.
type Node struct {
	ID string
	Meta
	// Spec defines the desired state of the node as specified by the user.
	// The system will honor this and will *never* modify it.
	Spec NodeSpec `json:",omitempty"`
	// Description encapsulates the properties of the Node as reported by the
	// agent.
	Description NodeDescription `json:",omitempty"`
	// Status provides the current status of the node, as seen by the manager.
	Status NodeStatus `json:",omitempty"`
	// ManagerStatus provides the current status of the node's manager
	// component, if the node is a manager.
	ManagerStatus *ManagerStatus `json:",omitempty"`
}

// NodeSpec represents the spec of a node.
type NodeSpec struct {
	Annotations
	Role         NodeRole         `json:",omitempty"`
	Availability NodeAvailability `json:",omitempty"`
}

// NodeRole represents the role of a node.
type NodeRole string

const (
	// NodeRoleWorker WORKER
	NodeRoleWorker NodeRole = "worker"
	// NodeRoleManager MANAGER
	NodeRoleManager NodeRole = "manager"
)

// NodeAvailability represents the availability of a node.
type NodeAvailability string

const (
	// NodeAvailabilityActive ACTIVE
	NodeAvailabilityActive NodeAvailability = "active"
	// NodeAvailabilityPause PAUSE
	NodeAvailabilityPause NodeAvailability = "pause"
	// NodeAvailabilityDrain DRAIN
	NodeAvailabilityDrain NodeAvailability = "drain"
)

// NodeDescription represents the description of a node.
type NodeDescription struct {
	Hostname  string            `json:",omitempty"`
	Platform  Platform          `json:",omitempty"`
	Resources Resources         `json:",omitempty"`
	Engine    EngineDescription `json:",omitempty"`
	TLSInfo   TLSInfo           `json:",omitempty"`
	CSIInfo   []NodeCSIInfo     `json:",omitempty"`
}

// Platform represents the platform (Arch/OS).
type Platform struct {
	Architecture string `json:",omitempty"`
	OS           string `json:",omitempty"`
}

// EngineDescription represents the description of an engine.
type EngineDescription struct {
	EngineVersion string              `json:",omitempty"`
	Labels        map[string]string   `json:",omitempty"`
	Plugins       []PluginDescription `json:",omitempty"`
}

// NodeCSIInfo represents information about a CSI plugin available on the node
type NodeCSIInfo struct {
	// PluginName is the name of the CSI plugin.
	PluginName string `json:",omitempty"`
	// NodeID is the ID of the node as reported by the CSI plugin. This is
	// different from the swarm node ID.
	NodeID string `json:",omitempty"`
	// MaxVolumesPerNode is the maximum number of volumes that may be published
	// to this node
	MaxVolumesPerNode int64 `json:",omitempty"`
	// AccessibleTopology indicates the location of this node in the CSI
	// plugin's topology
	AccessibleTopology *Topology `json:",omitempty"`
}

// PluginDescription represents the description of an engine plugin.
type PluginDescription struct {
	Type string `json:",omitempty"`
	Name string `json:",omitempty"`
}

// NodeStatus represents the status of a node.
type NodeStatus struct {
	State   NodeState `json:",omitempty"`
	Message string    `json:",omitempty"`
	Addr    string    `json:",omitempty"`
}

// Reachability represents the reachability of a node.
type Reachability string

const (
	// ReachabilityUnknown UNKNOWN
	ReachabilityUnknown Reachability = "unknown"
	// ReachabilityUnreachable UNREACHABLE
	ReachabilityUnreachable Reachability = "unreachable"
	// ReachabilityReachable REACHABLE
	ReachabilityReachable Reachability = "reachable"
)

// ManagerStatus represents the status of a manager.
type ManagerStatus struct {
	Leader       bool         `json:",omitempty"`
	Reachability Reachability `json:",omitempty"`
	Addr         string       `json:",omitempty"`
}

// NodeState represents the state of a node.
type NodeState string

const (
	// NodeStateUnknown UNKNOWN
	NodeStateUnknown NodeState = "unknown"
	// NodeStateDown DOWN
	NodeStateDown NodeState = "down"
	// NodeStateReady READY
	NodeStateReady NodeState = "ready"
	// NodeStateDisconnected DISCONNECTED
	NodeStateDisconnected NodeState = "disconnected"
)

// Topology defines the CSI topology of this node. This type is a duplicate of
// github.com/docker/docker/api/types.Topology. Because the type definition
// is so simple and to avoid complicated structure or circular imports, we just
// duplicate it here. See that type for full documentation
type Topology struct {
	Segments map[string]string `json:",omitempty"`
}
 070701000003CD000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/swarm/runtime   070701000003CE000081A4000000000000000000000001645E367C0000039D000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/swarm/runtime.go    package swarm // import "github.com/docker/docker/api/types/swarm"

// RuntimeType is the type of runtime used for the TaskSpec
type RuntimeType string

// RuntimeURL is the proto type url
type RuntimeURL string

const (
	// RuntimeContainer is the container based runtime
	RuntimeContainer RuntimeType = "container"
	// RuntimePlugin is the plugin based runtime
	RuntimePlugin RuntimeType = "plugin"
	// RuntimeNetworkAttachment is the network attachment runtime
	RuntimeNetworkAttachment RuntimeType = "attachment"

	// RuntimeURLContainer is the proto url for the container type
	RuntimeURLContainer RuntimeURL = "types.docker.com/RuntimeContainer"
	// RuntimeURLPlugin is the proto url for the plugin type
	RuntimeURLPlugin RuntimeURL = "types.docker.com/RuntimePlugin"
)

// NetworkAttachmentSpec represents the runtime spec type for network
// attachment tasks
type NetworkAttachmentSpec struct {
	ContainerID string
}
   070701000003CF000081A4000000000000000000000001645E367C000000C3000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/swarm/runtime/gen.go    //go:generate protoc -I . --gogofast_out=import_path=github.com/docker/docker/api/types/swarm/runtime:. plugin.proto

package runtime // import "github.com/docker/docker/api/types/swarm/runtime"
 070701000003D0000081A4000000000000000000000001645E367C000044EE000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/swarm/runtime/plugin.pb.go  // Code generated by protoc-gen-gogo. DO NOT EDIT.
// source: plugin.proto

/*
	Package runtime is a generated protocol buffer package.

	It is generated from these files:
		plugin.proto

	It has these top-level messages:
		PluginSpec
		PluginPrivilege
*/
package runtime

import proto "github.com/gogo/protobuf/proto"
import fmt "fmt"
import math "math"

import io "io"

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package

// PluginSpec defines the base payload which clients can specify for creating
// a service with the plugin runtime.
type PluginSpec struct {
	Name       string             `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	Remote     string             `protobuf:"bytes,2,opt,name=remote,proto3" json:"remote,omitempty"`
	Privileges []*PluginPrivilege `protobuf:"bytes,3,rep,name=privileges" json:"privileges,omitempty"`
	Disabled   bool               `protobuf:"varint,4,opt,name=disabled,proto3" json:"disabled,omitempty"`
	Env        []string           `protobuf:"bytes,5,rep,name=env" json:"env,omitempty"`
}

func (m *PluginSpec) Reset()                    { *m = PluginSpec{} }
func (m *PluginSpec) String() string            { return proto.CompactTextString(m) }
func (*PluginSpec) ProtoMessage()               {}
func (*PluginSpec) Descriptor() ([]byte, []int) { return fileDescriptorPlugin, []int{0} }

func (m *PluginSpec) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *PluginSpec) GetRemote() string {
	if m != nil {
		return m.Remote
	}
	return ""
}

func (m *PluginSpec) GetPrivileges() []*PluginPrivilege {
	if m != nil {
		return m.Privileges
	}
	return nil
}

func (m *PluginSpec) GetDisabled() bool {
	if m != nil {
		return m.Disabled
	}
	return false
}

func (m *PluginSpec) GetEnv() []string {
	if m != nil {
		return m.Env
	}
	return nil
}

// PluginPrivilege describes a permission the user has to accept
// upon installing a plugin.
type PluginPrivilege struct {
	Name        string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	Description string   `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
	Value       []string `protobuf:"bytes,3,rep,name=value" json:"value,omitempty"`
}

func (m *PluginPrivilege) Reset()                    { *m = PluginPrivilege{} }
func (m *PluginPrivilege) String() string            { return proto.CompactTextString(m) }
func (*PluginPrivilege) ProtoMessage()               {}
func (*PluginPrivilege) Descriptor() ([]byte, []int) { return fileDescriptorPlugin, []int{1} }

func (m *PluginPrivilege) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *PluginPrivilege) GetDescription() string {
	if m != nil {
		return m.Description
	}
	return ""
}

func (m *PluginPrivilege) GetValue() []string {
	if m != nil {
		return m.Value
	}
	return nil
}

func init() {
	proto.RegisterType((*PluginSpec)(nil), "PluginSpec")
	proto.RegisterType((*PluginPrivilege)(nil), "PluginPrivilege")
}
func (m *PluginSpec) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalTo(dAtA)
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *PluginSpec) MarshalTo(dAtA []byte) (int, error) {
	var i int
	_ = i
	var l int
	_ = l
	if len(m.Name) > 0 {
		dAtA[i] = 0xa
		i++
		i = encodeVarintPlugin(dAtA, i, uint64(len(m.Name)))
		i += copy(dAtA[i:], m.Name)
	}
	if len(m.Remote) > 0 {
		dAtA[i] = 0x12
		i++
		i = encodeVarintPlugin(dAtA, i, uint64(len(m.Remote)))
		i += copy(dAtA[i:], m.Remote)
	}
	if len(m.Privileges) > 0 {
		for _, msg := range m.Privileges {
			dAtA[i] = 0x1a
			i++
			i = encodeVarintPlugin(dAtA, i, uint64(msg.Size()))
			n, err := msg.MarshalTo(dAtA[i:])
			if err != nil {
				return 0, err
			}
			i += n
		}
	}
	if m.Disabled {
		dAtA[i] = 0x20
		i++
		if m.Disabled {
			dAtA[i] = 1
		} else {
			dAtA[i] = 0
		}
		i++
	}
	if len(m.Env) > 0 {
		for _, s := range m.Env {
			dAtA[i] = 0x2a
			i++
			l = len(s)
			for l >= 1<<7 {
				dAtA[i] = uint8(uint64(l)&0x7f | 0x80)
				l >>= 7
				i++
			}
			dAtA[i] = uint8(l)
			i++
			i += copy(dAtA[i:], s)
		}
	}
	return i, nil
}

func (m *PluginPrivilege) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalTo(dAtA)
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *PluginPrivilege) MarshalTo(dAtA []byte) (int, error) {
	var i int
	_ = i
	var l int
	_ = l
	if len(m.Name) > 0 {
		dAtA[i] = 0xa
		i++
		i = encodeVarintPlugin(dAtA, i, uint64(len(m.Name)))
		i += copy(dAtA[i:], m.Name)
	}
	if len(m.Description) > 0 {
		dAtA[i] = 0x12
		i++
		i = encodeVarintPlugin(dAtA, i, uint64(len(m.Description)))
		i += copy(dAtA[i:], m.Description)
	}
	if len(m.Value) > 0 {
		for _, s := range m.Value {
			dAtA[i] = 0x1a
			i++
			l = len(s)
			for l >= 1<<7 {
				dAtA[i] = uint8(uint64(l)&0x7f | 0x80)
				l >>= 7
				i++
			}
			dAtA[i] = uint8(l)
			i++
			i += copy(dAtA[i:], s)
		}
	}
	return i, nil
}

func encodeVarintPlugin(dAtA []byte, offset int, v uint64) int {
	for v >= 1<<7 {
		dAtA[offset] = uint8(v&0x7f | 0x80)
		v >>= 7
		offset++
	}
	dAtA[offset] = uint8(v)
	return offset + 1
}
func (m *PluginSpec) Size() (n int) {
	var l int
	_ = l
	l = len(m.Name)
	if l > 0 {
		n += 1 + l + sovPlugin(uint64(l))
	}
	l = len(m.Remote)
	if l > 0 {
		n += 1 + l + sovPlugin(uint64(l))
	}
	if len(m.Privileges) > 0 {
		for _, e := range m.Privileges {
			l = e.Size()
			n += 1 + l + sovPlugin(uint64(l))
		}
	}
	if m.Disabled {
		n += 2
	}
	if len(m.Env) > 0 {
		for _, s := range m.Env {
			l = len(s)
			n += 1 + l + sovPlugin(uint64(l))
		}
	}
	return n
}

func (m *PluginPrivilege) Size() (n int) {
	var l int
	_ = l
	l = len(m.Name)
	if l > 0 {
		n += 1 + l + sovPlugin(uint64(l))
	}
	l = len(m.Description)
	if l > 0 {
		n += 1 + l + sovPlugin(uint64(l))
	}
	if len(m.Value) > 0 {
		for _, s := range m.Value {
			l = len(s)
			n += 1 + l + sovPlugin(uint64(l))
		}
	}
	return n
}

func sovPlugin(x uint64) (n int) {
	for {
		n++
		x >>= 7
		if x == 0 {
			break
		}
	}
	return n
}
func sozPlugin(x uint64) (n int) {
	return sovPlugin(uint64((x << 1) ^ uint64((int64(x) >> 63))))
}
func (m *PluginSpec) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowPlugin
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= (uint64(b) & 0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: PluginSpec: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: PluginSpec: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowPlugin
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= (uint64(b) & 0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthPlugin
			}
			postIndex := iNdEx + intStringLen
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Name = string(dAtA[iNdEx:postIndex])
			iNdEx = postIndex
		case 2:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Remote", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowPlugin
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= (uint64(b) & 0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthPlugin
			}
			postIndex := iNdEx + intStringLen
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Remote = string(dAtA[iNdEx:postIndex])
			iNdEx = postIndex
		case 3:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Privileges", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowPlugin
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= (int(b) & 0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthPlugin
			}
			postIndex := iNdEx + msglen
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Privileges = append(m.Privileges, &PluginPrivilege{})
			if err := m.Privileges[len(m.Privileges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 4:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field Disabled", wireType)
			}
			var v int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowPlugin
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				v |= (int(b) & 0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			m.Disabled = bool(v != 0)
		case 5:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Env", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowPlugin
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= (uint64(b) & 0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthPlugin
			}
			postIndex := iNdEx + intStringLen
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Env = append(m.Env, string(dAtA[iNdEx:postIndex]))
			iNdEx = postIndex
		default:
			iNdEx = preIndex
			skippy, err := skipPlugin(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if skippy < 0 {
				return ErrInvalidLengthPlugin
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *PluginPrivilege) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowPlugin
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= (uint64(b) & 0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: PluginPrivilege: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: PluginPrivilege: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowPlugin
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= (uint64(b) & 0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthPlugin
			}
			postIndex := iNdEx + intStringLen
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Name = string(dAtA[iNdEx:postIndex])
			iNdEx = postIndex
		case 2:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowPlugin
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= (uint64(b) & 0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthPlugin
			}
			postIndex := iNdEx + intStringLen
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Description = string(dAtA[iNdEx:postIndex])
			iNdEx = postIndex
		case 3:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowPlugin
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= (uint64(b) & 0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthPlugin
			}
			postIndex := iNdEx + intStringLen
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Value = append(m.Value, string(dAtA[iNdEx:postIndex]))
			iNdEx = postIndex
		default:
			iNdEx = preIndex
			skippy, err := skipPlugin(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if skippy < 0 {
				return ErrInvalidLengthPlugin
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func skipPlugin(dAtA []byte) (n int, err error) {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return 0, ErrIntOverflowPlugin
			}
			if iNdEx >= l {
				return 0, io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= (uint64(b) & 0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		wireType := int(wire & 0x7)
		switch wireType {
		case 0:
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return 0, ErrIntOverflowPlugin
				}
				if iNdEx >= l {
					return 0, io.ErrUnexpectedEOF
				}
				iNdEx++
				if dAtA[iNdEx-1] < 0x80 {
					break
				}
			}
			return iNdEx, nil
		case 1:
			iNdEx += 8
			return iNdEx, nil
		case 2:
			var length int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return 0, ErrIntOverflowPlugin
				}
				if iNdEx >= l {
					return 0, io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				length |= (int(b) & 0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			iNdEx += length
			if length < 0 {
				return 0, ErrInvalidLengthPlugin
			}
			return iNdEx, nil
		case 3:
			for {
				var innerWire uint64
				var start int = iNdEx
				for shift := uint(0); ; shift += 7 {
					if shift >= 64 {
						return 0, ErrIntOverflowPlugin
					}
					if iNdEx >= l {
						return 0, io.ErrUnexpectedEOF
					}
					b := dAtA[iNdEx]
					iNdEx++
					innerWire |= (uint64(b) & 0x7F) << shift
					if b < 0x80 {
						break
					}
				}
				innerWireType := int(innerWire & 0x7)
				if innerWireType == 4 {
					break
				}
				next, err := skipPlugin(dAtA[start:])
				if err != nil {
					return 0, err
				}
				iNdEx = start + next
			}
			return iNdEx, nil
		case 4:
			return iNdEx, nil
		case 5:
			iNdEx += 4
			return iNdEx, nil
		default:
			return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
		}
	}
	panic("unreachable")
}

var (
	ErrInvalidLengthPlugin = fmt.Errorf("proto: negative length found during unmarshaling")
	ErrIntOverflowPlugin   = fmt.Errorf("proto: integer overflow")
)

func init() { proto.RegisterFile("plugin.proto", fileDescriptorPlugin) }

var fileDescriptorPlugin = []byte{
	// 256 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x90, 0x4d, 0x4b, 0xc3, 0x30,
	0x18, 0xc7, 0x89, 0xdd, 0xc6, 0xfa, 0x4c, 0x70, 0x04, 0x91, 0xe2, 0xa1, 0x94, 0x9d, 0x7a, 0x6a,
	0x45, 0x2f, 0x82, 0x37, 0x0f, 0x9e, 0x47, 0xbc, 0x09, 0x1e, 0xd2, 0xf6, 0xa1, 0x06, 0x9b, 0x17,
	0x92, 0xb4, 0xe2, 0x37, 0xf1, 0x23, 0x79, 0xf4, 0x23, 0x48, 0x3f, 0x89, 0x98, 0x75, 0x32, 0x64,
	0xa7, 0xff, 0x4b, 0xc2, 0x9f, 0x1f, 0x0f, 0x9c, 0x9a, 0xae, 0x6f, 0x85, 0x2a, 0x8c, 0xd5, 0x5e,
	0x6f, 0x3e, 0x08, 0xc0, 0x36, 0x14, 0x8f, 0x06, 0x6b, 0x4a, 0x61, 0xa6, 0xb8, 0xc4, 0x84, 0x64,
	0x24, 0x8f, 0x59, 0xf0, 0xf4, 0x02, 0x16, 0x16, 0xa5, 0xf6, 0x98, 0x9c, 0x84, 0x76, 0x4a, 0xf4,
	0x0a, 0xc0, 0x58, 0x31, 0x88, 0x0e, 0x5b, 0x74, 0x49, 0x94, 0x45, 0xf9, 0xea, 0x7a, 0x5d, 0xec,
	0xc6, 0xb6, 0xfb, 0x07, 0x76, 0xf0, 0x87, 0x5e, 0xc2, 0xb2, 0x11, 0x8e, 0x57, 0x1d, 0x36, 0xc9,
	0x2c, 0x23, 0xf9, 0x92, 0xfd, 0x65, 0xba, 0x86, 0x08, 0xd5, 0x90, 0xcc, 0xb3, 0x28, 0x8f, 0xd9,
	0xaf, 0xdd, 0x3c, 0xc3, 0xd9, 0xbf, 0xb1, 0xa3, 0x78, 0x19, 0xac, 0x1a, 0x74, 0xb5, 0x15, 0xc6,
	0x0b, 0xad, 0x26, 0xc6, 0xc3, 0x8a, 0x9e, 0xc3, 0x7c, 0xe0, 0x5d, 0x8f, 0x81, 0x31, 0x66, 0xbb,
	0x70, 0xff, 0xf0, 0x39, 0xa6, 0xe4, 0x6b, 0x4c, 0xc9, 0xf7, 0x98, 0x92, 0xa7, 0xdb, 0x56, 0xf8,
	0x97, 0xbe, 0x2a, 0x6a, 0x2d, 0xcb, 0x46, 0xd7, 0xaf, 0x68, 0xf7, 0xc2, 0x8d, 0x28, 0xfd, 0xbb,
	0x41, 0x57, 0xba, 0x37, 0x6e, 0x65, 0x69, 0x7b, 0xe5, 0x85, 0xc4, 0xbb, 0x49, 0xab, 0x45, 0x38,
	0xe4, 0xcd, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x99, 0xa8, 0xd9, 0x9b, 0x58, 0x01, 0x00, 0x00,
}
  070701000003D1000081A4000000000000000000000001645E367C00000230000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/swarm/runtime/plugin.proto  syntax = "proto3";

option go_package = "github.com/docker/docker/api/types/swarm/runtime;runtime";

// PluginSpec defines the base payload which clients can specify for creating
// a service with the plugin runtime.
message PluginSpec {
	string name = 1;
	string remote = 2;
	repeated PluginPrivilege privileges = 3;
	bool disabled = 4;
	repeated string env = 5;
}

// PluginPrivilege describes a permission the user has to accept
// upon installing a plugin.
message PluginPrivilege {
	string name = 1;
	string description = 2;
	repeated string value = 3;
}
070701000003D2000081A4000000000000000000000001645E367C000003B7000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/swarm/secret.go package swarm // import "github.com/docker/docker/api/types/swarm"

import "os"

// Secret represents a secret.
type Secret struct {
	ID string
	Meta
	Spec SecretSpec
}

// SecretSpec represents a secret specification from a secret in swarm
type SecretSpec struct {
	Annotations
	Data   []byte  `json:",omitempty"`
	Driver *Driver `json:",omitempty"` // name of the secrets driver used to fetch the secret's value from an external secret store

	// Templating controls whether and how to evaluate the secret payload as
	// a template. If it is not set, no templating is used.
	Templating *Driver `json:",omitempty"`
}

// SecretReferenceFileTarget is a file target in a secret reference
type SecretReferenceFileTarget struct {
	Name string
	UID  string
	GID  string
	Mode os.FileMode
}

// SecretReference is a reference to a secret in swarm
type SecretReference struct {
	File       *SecretReferenceFileTarget
	SecretID   string
	SecretName string
}
 070701000003D3000081A4000000000000000000000001645E367C00001EE6000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/swarm/service.go    package swarm // import "github.com/docker/docker/api/types/swarm"

import "time"

// Service represents a service.
type Service struct {
	ID string
	Meta
	Spec         ServiceSpec   `json:",omitempty"`
	PreviousSpec *ServiceSpec  `json:",omitempty"`
	Endpoint     Endpoint      `json:",omitempty"`
	UpdateStatus *UpdateStatus `json:",omitempty"`

	// ServiceStatus is an optional, extra field indicating the number of
	// desired and running tasks. It is provided primarily as a shortcut to
	// calculating these values client-side, which otherwise would require
	// listing all tasks for a service, an operation that could be
	// computation and network expensive.
	ServiceStatus *ServiceStatus `json:",omitempty"`

	// JobStatus is the status of a Service which is in one of ReplicatedJob or
	// GlobalJob modes. It is absent on Replicated and Global services.
	JobStatus *JobStatus `json:",omitempty"`
}

// ServiceSpec represents the spec of a service.
type ServiceSpec struct {
	Annotations

	// TaskTemplate defines how the service should construct new tasks when
	// orchestrating this service.
	TaskTemplate   TaskSpec      `json:",omitempty"`
	Mode           ServiceMode   `json:",omitempty"`
	UpdateConfig   *UpdateConfig `json:",omitempty"`
	RollbackConfig *UpdateConfig `json:",omitempty"`

	// Networks field in ServiceSpec is deprecated. The
	// same field in TaskSpec should be used instead.
	// This field will be removed in a future release.
	Networks     []NetworkAttachmentConfig `json:",omitempty"`
	EndpointSpec *EndpointSpec             `json:",omitempty"`
}

// ServiceMode represents the mode of a service.
type ServiceMode struct {
	Replicated    *ReplicatedService `json:",omitempty"`
	Global        *GlobalService     `json:",omitempty"`
	ReplicatedJob *ReplicatedJob     `json:",omitempty"`
	GlobalJob     *GlobalJob         `json:",omitempty"`
}

// UpdateState is the state of a service update.
type UpdateState string

const (
	// UpdateStateUpdating is the updating state.
	UpdateStateUpdating UpdateState = "updating"
	// UpdateStatePaused is the paused state.
	UpdateStatePaused UpdateState = "paused"
	// UpdateStateCompleted is the completed state.
	UpdateStateCompleted UpdateState = "completed"
	// UpdateStateRollbackStarted is the state with a rollback in progress.
	UpdateStateRollbackStarted UpdateState = "rollback_started"
	// UpdateStateRollbackPaused is the state with a rollback in progress.
	UpdateStateRollbackPaused UpdateState = "rollback_paused"
	// UpdateStateRollbackCompleted is the state with a rollback in progress.
	UpdateStateRollbackCompleted UpdateState = "rollback_completed"
)

// UpdateStatus reports the status of a service update.
type UpdateStatus struct {
	State       UpdateState `json:",omitempty"`
	StartedAt   *time.Time  `json:",omitempty"`
	CompletedAt *time.Time  `json:",omitempty"`
	Message     string      `json:",omitempty"`
}

// ReplicatedService is a kind of ServiceMode.
type ReplicatedService struct {
	Replicas *uint64 `json:",omitempty"`
}

// GlobalService is a kind of ServiceMode.
type GlobalService struct{}

// ReplicatedJob is the a type of Service which executes a defined Tasks
// in parallel until the specified number of Tasks have succeeded.
type ReplicatedJob struct {
	// MaxConcurrent indicates the maximum number of Tasks that should be
	// executing simultaneously for this job at any given time. There may be
	// fewer Tasks that MaxConcurrent executing simultaneously; for example, if
	// there are fewer than MaxConcurrent tasks needed to reach
	// TotalCompletions.
	//
	// If this field is empty, it will default to a max concurrency of 1.
	MaxConcurrent *uint64 `json:",omitempty"`

	// TotalCompletions is the total number of Tasks desired to run to
	// completion.
	//
	// If this field is empty, the value of MaxConcurrent will be used.
	TotalCompletions *uint64 `json:",omitempty"`
}

// GlobalJob is the type of a Service which executes a Task on every Node
// matching the Service's placement constraints. These tasks run to completion
// and then exit.
//
// This type is deliberately empty.
type GlobalJob struct{}

const (
	// UpdateFailureActionPause PAUSE
	UpdateFailureActionPause = "pause"
	// UpdateFailureActionContinue CONTINUE
	UpdateFailureActionContinue = "continue"
	// UpdateFailureActionRollback ROLLBACK
	UpdateFailureActionRollback = "rollback"

	// UpdateOrderStopFirst STOP_FIRST
	UpdateOrderStopFirst = "stop-first"
	// UpdateOrderStartFirst START_FIRST
	UpdateOrderStartFirst = "start-first"
)

// UpdateConfig represents the update configuration.
type UpdateConfig struct {
	// Maximum number of tasks to be updated in one iteration.
	// 0 means unlimited parallelism.
	Parallelism uint64

	// Amount of time between updates.
	Delay time.Duration `json:",omitempty"`

	// FailureAction is the action to take when an update failures.
	FailureAction string `json:",omitempty"`

	// Monitor indicates how long to monitor a task for failure after it is
	// created. If the task fails by ending up in one of the states
	// REJECTED, COMPLETED, or FAILED, within Monitor from its creation,
	// this counts as a failure. If it fails after Monitor, it does not
	// count as a failure. If Monitor is unspecified, a default value will
	// be used.
	Monitor time.Duration `json:",omitempty"`

	// MaxFailureRatio is the fraction of tasks that may fail during
	// an update before the failure action is invoked. Any task created by
	// the current update which ends up in one of the states REJECTED,
	// COMPLETED or FAILED within Monitor from its creation counts as a
	// failure. The number of failures is divided by the number of tasks
	// being updated, and if this fraction is greater than
	// MaxFailureRatio, the failure action is invoked.
	//
	// If the failure action is CONTINUE, there is no effect.
	// If the failure action is PAUSE, no more tasks will be updated until
	// another update is started.
	MaxFailureRatio float32

	// Order indicates the order of operations when rolling out an updated
	// task. Either the old task is shut down before the new task is
	// started, or the new task is started before the old task is shut down.
	Order string
}

// ServiceStatus represents the number of running tasks in a service and the
// number of tasks desired to be running.
type ServiceStatus struct {
	// RunningTasks is the number of tasks for the service actually in the
	// Running state
	RunningTasks uint64

	// DesiredTasks is the number of tasks desired to be running by the
	// service. For replicated services, this is the replica count. For global
	// services, this is computed by taking the number of tasks with desired
	// state of not-Shutdown.
	DesiredTasks uint64

	// CompletedTasks is the number of tasks in the state Completed, if this
	// service is in ReplicatedJob or GlobalJob mode. This field must be
	// cross-referenced with the service type, because the default value of 0
	// may mean that a service is not in a job mode, or it may mean that the
	// job has yet to complete any tasks.
	CompletedTasks uint64
}

// JobStatus is the status of a job-type service.
type JobStatus struct {
	// JobIteration is a value increased each time a Job is executed,
	// successfully or otherwise. "Executed", in this case, means the job as a
	// whole has been started, not that an individual Task has been launched. A
	// job is "Executed" when its ServiceSpec is updated. JobIteration can be
	// used to disambiguate Tasks belonging to different executions of a job.
	//
	// Though JobIteration will increase with each subsequent execution, it may
	// not necessarily increase by 1, and so JobIteration should not be used to
	// keep track of the number of times a job has been executed.
	JobIteration Version

	// LastExecution is the time that the job was last executed, as observed by
	// Swarm manager.
	LastExecution time.Time `json:",omitempty"`
}
  070701000003D4000081A4000000000000000000000001645E367C00001CCB000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/swarm/swarm.go  package swarm // import "github.com/docker/docker/api/types/swarm"

import (
	"time"
)

// ClusterInfo represents info about the cluster for outputting in "info"
// it contains the same information as "Swarm", but without the JoinTokens
type ClusterInfo struct {
	ID string
	Meta
	Spec                   Spec
	TLSInfo                TLSInfo
	RootRotationInProgress bool
	DefaultAddrPool        []string
	SubnetSize             uint32
	DataPathPort           uint32
}

// Swarm represents a swarm.
type Swarm struct {
	ClusterInfo
	JoinTokens JoinTokens
}

// JoinTokens contains the tokens workers and managers need to join the swarm.
type JoinTokens struct {
	// Worker is the join token workers may use to join the swarm.
	Worker string
	// Manager is the join token managers may use to join the swarm.
	Manager string
}

// Spec represents the spec of a swarm.
type Spec struct {
	Annotations

	Orchestration    OrchestrationConfig `json:",omitempty"`
	Raft             RaftConfig          `json:",omitempty"`
	Dispatcher       DispatcherConfig    `json:",omitempty"`
	CAConfig         CAConfig            `json:",omitempty"`
	TaskDefaults     TaskDefaults        `json:",omitempty"`
	EncryptionConfig EncryptionConfig    `json:",omitempty"`
}

// OrchestrationConfig represents orchestration configuration.
type OrchestrationConfig struct {
	// TaskHistoryRetentionLimit is the number of historic tasks to keep per instance or
	// node. If negative, never remove completed or failed tasks.
	TaskHistoryRetentionLimit *int64 `json:",omitempty"`
}

// TaskDefaults parameterizes cluster-level task creation with default values.
type TaskDefaults struct {
	// LogDriver selects the log driver to use for tasks created in the
	// orchestrator if unspecified by a service.
	//
	// Updating this value will only have an affect on new tasks. Old tasks
	// will continue use their previously configured log driver until
	// recreated.
	LogDriver *Driver `json:",omitempty"`
}

// EncryptionConfig controls at-rest encryption of data and keys.
type EncryptionConfig struct {
	// AutoLockManagers specifies whether or not managers TLS keys and raft data
	// should be encrypted at rest in such a way that they must be unlocked
	// before the manager node starts up again.
	AutoLockManagers bool
}

// RaftConfig represents raft configuration.
type RaftConfig struct {
	// SnapshotInterval is the number of log entries between snapshots.
	SnapshotInterval uint64 `json:",omitempty"`

	// KeepOldSnapshots is the number of snapshots to keep beyond the
	// current snapshot.
	KeepOldSnapshots *uint64 `json:",omitempty"`

	// LogEntriesForSlowFollowers is the number of log entries to keep
	// around to sync up slow followers after a snapshot is created.
	LogEntriesForSlowFollowers uint64 `json:",omitempty"`

	// ElectionTick is the number of ticks that a follower will wait for a message
	// from the leader before becoming a candidate and starting an election.
	// ElectionTick must be greater than HeartbeatTick.
	//
	// A tick currently defaults to one second, so these translate directly to
	// seconds currently, but this is NOT guaranteed.
	ElectionTick int

	// HeartbeatTick is the number of ticks between heartbeats. Every
	// HeartbeatTick ticks, the leader will send a heartbeat to the
	// followers.
	//
	// A tick currently defaults to one second, so these translate directly to
	// seconds currently, but this is NOT guaranteed.
	HeartbeatTick int
}

// DispatcherConfig represents dispatcher configuration.
type DispatcherConfig struct {
	// HeartbeatPeriod defines how often agent should send heartbeats to
	// dispatcher.
	HeartbeatPeriod time.Duration `json:",omitempty"`
}

// CAConfig represents CA configuration.
type CAConfig struct {
	// NodeCertExpiry is the duration certificates should be issued for
	NodeCertExpiry time.Duration `json:",omitempty"`

	// ExternalCAs is a list of CAs to which a manager node will make
	// certificate signing requests for node certificates.
	ExternalCAs []*ExternalCA `json:",omitempty"`

	// SigningCACert and SigningCAKey specify the desired signing root CA and
	// root CA key for the swarm.  When inspecting the cluster, the key will
	// be redacted.
	SigningCACert string `json:",omitempty"`
	SigningCAKey  string `json:",omitempty"`

	// If this value changes, and there is no specified signing cert and key,
	// then the swarm is forced to generate a new root certificate ane key.
	ForceRotate uint64 `json:",omitempty"`
}

// ExternalCAProtocol represents type of external CA.
type ExternalCAProtocol string

// ExternalCAProtocolCFSSL CFSSL
const ExternalCAProtocolCFSSL ExternalCAProtocol = "cfssl"

// ExternalCA defines external CA to be used by the cluster.
type ExternalCA struct {
	// Protocol is the protocol used by this external CA.
	Protocol ExternalCAProtocol

	// URL is the URL where the external CA can be reached.
	URL string

	// Options is a set of additional key/value pairs whose interpretation
	// depends on the specified CA type.
	Options map[string]string `json:",omitempty"`

	// CACert specifies which root CA is used by this external CA.  This certificate must
	// be in PEM format.
	CACert string
}

// InitRequest is the request used to init a swarm.
type InitRequest struct {
	ListenAddr       string
	AdvertiseAddr    string
	DataPathAddr     string
	DataPathPort     uint32
	ForceNewCluster  bool
	Spec             Spec
	AutoLockManagers bool
	Availability     NodeAvailability
	DefaultAddrPool  []string
	SubnetSize       uint32
}

// JoinRequest is the request used to join a swarm.
type JoinRequest struct {
	ListenAddr    string
	AdvertiseAddr string
	DataPathAddr  string
	RemoteAddrs   []string
	JoinToken     string // accept by secret
	Availability  NodeAvailability
}

// UnlockRequest is the request used to unlock a swarm.
type UnlockRequest struct {
	// UnlockKey is the unlock key in ASCII-armored format.
	UnlockKey string
}

// LocalNodeState represents the state of the local node.
type LocalNodeState string

const (
	// LocalNodeStateInactive INACTIVE
	LocalNodeStateInactive LocalNodeState = "inactive"
	// LocalNodeStatePending PENDING
	LocalNodeStatePending LocalNodeState = "pending"
	// LocalNodeStateActive ACTIVE
	LocalNodeStateActive LocalNodeState = "active"
	// LocalNodeStateError ERROR
	LocalNodeStateError LocalNodeState = "error"
	// LocalNodeStateLocked LOCKED
	LocalNodeStateLocked LocalNodeState = "locked"
)

// Info represents generic information about swarm.
type Info struct {
	NodeID   string
	NodeAddr string

	LocalNodeState   LocalNodeState
	ControlAvailable bool
	Error            string

	RemoteManagers []Peer
	Nodes          int `json:",omitempty"`
	Managers       int `json:",omitempty"`

	Cluster *ClusterInfo `json:",omitempty"`

	Warnings []string `json:",omitempty"`
}

// Status provides information about the current swarm status and role,
// obtained from the "Swarm" header in the API response.
type Status struct {
	// NodeState represents the state of the node.
	NodeState LocalNodeState

	// ControlAvailable indicates if the node is a swarm manager.
	ControlAvailable bool
}

// Peer represents a peer.
type Peer struct {
	NodeID string
	Addr   string
}

// UpdateFlags contains flags for SwarmUpdate.
type UpdateFlags struct {
	RotateWorkerToken      bool
	RotateManagerToken     bool
	RotateManagerUnlockKey bool
}
 070701000003D5000081A4000000000000000000000001645E367C00001FC3000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/swarm/task.go   package swarm // import "github.com/docker/docker/api/types/swarm"

import (
	"time"

	"github.com/docker/docker/api/types/swarm/runtime"
)

// TaskState represents the state of a task.
type TaskState string

const (
	// TaskStateNew NEW
	TaskStateNew TaskState = "new"
	// TaskStateAllocated ALLOCATED
	TaskStateAllocated TaskState = "allocated"
	// TaskStatePending PENDING
	TaskStatePending TaskState = "pending"
	// TaskStateAssigned ASSIGNED
	TaskStateAssigned TaskState = "assigned"
	// TaskStateAccepted ACCEPTED
	TaskStateAccepted TaskState = "accepted"
	// TaskStatePreparing PREPARING
	TaskStatePreparing TaskState = "preparing"
	// TaskStateReady READY
	TaskStateReady TaskState = "ready"
	// TaskStateStarting STARTING
	TaskStateStarting TaskState = "starting"
	// TaskStateRunning RUNNING
	TaskStateRunning TaskState = "running"
	// TaskStateComplete COMPLETE
	TaskStateComplete TaskState = "complete"
	// TaskStateShutdown SHUTDOWN
	TaskStateShutdown TaskState = "shutdown"
	// TaskStateFailed FAILED
	TaskStateFailed TaskState = "failed"
	// TaskStateRejected REJECTED
	TaskStateRejected TaskState = "rejected"
	// TaskStateRemove REMOVE
	TaskStateRemove TaskState = "remove"
	// TaskStateOrphaned ORPHANED
	TaskStateOrphaned TaskState = "orphaned"
)

// Task represents a task.
type Task struct {
	ID string
	Meta
	Annotations

	Spec                TaskSpec            `json:",omitempty"`
	ServiceID           string              `json:",omitempty"`
	Slot                int                 `json:",omitempty"`
	NodeID              string              `json:",omitempty"`
	Status              TaskStatus          `json:",omitempty"`
	DesiredState        TaskState           `json:",omitempty"`
	NetworksAttachments []NetworkAttachment `json:",omitempty"`
	GenericResources    []GenericResource   `json:",omitempty"`

	// JobIteration is the JobIteration of the Service that this Task was
	// spawned from, if the Service is a ReplicatedJob or GlobalJob. This is
	// used to determine which Tasks belong to which run of the job. This field
	// is absent if the Service mode is Replicated or Global.
	JobIteration *Version `json:",omitempty"`

	// Volumes is the list of VolumeAttachments for this task. It specifies
	// which particular volumes are to be used by this particular task, and
	// fulfilling what mounts in the spec.
	Volumes []VolumeAttachment
}

// TaskSpec represents the spec of a task.
type TaskSpec struct {
	// ContainerSpec, NetworkAttachmentSpec, and PluginSpec are mutually exclusive.
	// PluginSpec is only used when the `Runtime` field is set to `plugin`
	// NetworkAttachmentSpec is used if the `Runtime` field is set to
	// `attachment`.
	ContainerSpec         *ContainerSpec         `json:",omitempty"`
	PluginSpec            *runtime.PluginSpec    `json:",omitempty"`
	NetworkAttachmentSpec *NetworkAttachmentSpec `json:",omitempty"`

	Resources     *ResourceRequirements     `json:",omitempty"`
	RestartPolicy *RestartPolicy            `json:",omitempty"`
	Placement     *Placement                `json:",omitempty"`
	Networks      []NetworkAttachmentConfig `json:",omitempty"`

	// LogDriver specifies the LogDriver to use for tasks created from this
	// spec. If not present, the one on cluster default on swarm.Spec will be
	// used, finally falling back to the engine default if not specified.
	LogDriver *Driver `json:",omitempty"`

	// ForceUpdate is a counter that triggers an update even if no relevant
	// parameters have been changed.
	ForceUpdate uint64

	Runtime RuntimeType `json:",omitempty"`
}

// Resources represents resources (CPU/Memory) which can be advertised by a
// node and requested to be reserved for a task.
type Resources struct {
	NanoCPUs         int64             `json:",omitempty"`
	MemoryBytes      int64             `json:",omitempty"`
	GenericResources []GenericResource `json:",omitempty"`
}

// Limit describes limits on resources which can be requested by a task.
type Limit struct {
	NanoCPUs    int64 `json:",omitempty"`
	MemoryBytes int64 `json:",omitempty"`
	Pids        int64 `json:",omitempty"`
}

// GenericResource represents a "user defined" resource which can
// be either an integer (e.g: SSD=3) or a string (e.g: SSD=sda1)
type GenericResource struct {
	NamedResourceSpec    *NamedGenericResource    `json:",omitempty"`
	DiscreteResourceSpec *DiscreteGenericResource `json:",omitempty"`
}

// NamedGenericResource represents a "user defined" resource which is defined
// as a string.
// "Kind" is used to describe the Kind of a resource (e.g: "GPU", "FPGA", "SSD", ...)
// Value is used to identify the resource (GPU="UUID-1", FPGA="/dev/sdb5", ...)
type NamedGenericResource struct {
	Kind  string `json:",omitempty"`
	Value string `json:",omitempty"`
}

// DiscreteGenericResource represents a "user defined" resource which is defined
// as an integer
// "Kind" is used to describe the Kind of a resource (e.g: "GPU", "FPGA", "SSD", ...)
// Value is used to count the resource (SSD=5, HDD=3, ...)
type DiscreteGenericResource struct {
	Kind  string `json:",omitempty"`
	Value int64  `json:",omitempty"`
}

// ResourceRequirements represents resources requirements.
type ResourceRequirements struct {
	Limits       *Limit     `json:",omitempty"`
	Reservations *Resources `json:",omitempty"`
}

// Placement represents orchestration parameters.
type Placement struct {
	Constraints []string              `json:",omitempty"`
	Preferences []PlacementPreference `json:",omitempty"`
	MaxReplicas uint64                `json:",omitempty"`

	// Platforms stores all the platforms that the image can run on.
	// This field is used in the platform filter for scheduling. If empty,
	// then the platform filter is off, meaning there are no scheduling restrictions.
	Platforms []Platform `json:",omitempty"`
}

// PlacementPreference provides a way to make the scheduler aware of factors
// such as topology.
type PlacementPreference struct {
	Spread *SpreadOver
}

// SpreadOver is a scheduling preference that instructs the scheduler to spread
// tasks evenly over groups of nodes identified by labels.
type SpreadOver struct {
	// label descriptor, such as engine.labels.az
	SpreadDescriptor string
}

// RestartPolicy represents the restart policy.
type RestartPolicy struct {
	Condition   RestartPolicyCondition `json:",omitempty"`
	Delay       *time.Duration         `json:",omitempty"`
	MaxAttempts *uint64                `json:",omitempty"`
	Window      *time.Duration         `json:",omitempty"`
}

// RestartPolicyCondition represents when to restart.
type RestartPolicyCondition string

const (
	// RestartPolicyConditionNone NONE
	RestartPolicyConditionNone RestartPolicyCondition = "none"
	// RestartPolicyConditionOnFailure ON_FAILURE
	RestartPolicyConditionOnFailure RestartPolicyCondition = "on-failure"
	// RestartPolicyConditionAny ANY
	RestartPolicyConditionAny RestartPolicyCondition = "any"
)

// TaskStatus represents the status of a task.
type TaskStatus struct {
	Timestamp       time.Time        `json:",omitempty"`
	State           TaskState        `json:",omitempty"`
	Message         string           `json:",omitempty"`
	Err             string           `json:",omitempty"`
	ContainerStatus *ContainerStatus `json:",omitempty"`
	PortStatus      PortStatus       `json:",omitempty"`
}

// ContainerStatus represents the status of a container.
type ContainerStatus struct {
	ContainerID string
	PID         int
	ExitCode    int
}

// PortStatus represents the port status of a task's host ports whose
// service has published host ports
type PortStatus struct {
	Ports []PortConfig `json:",omitempty"`
}

// VolumeAttachment contains the associating a Volume to a Task.
type VolumeAttachment struct {
	// ID is the Swarmkit ID of the Volume. This is not the CSI VolumeId.
	ID string `json:",omitempty"`

	// Source, together with Target, indicates the Mount, as specified in the
	// ContainerSpec, that this volume fulfills.
	Source string `json:",omitempty"`

	// Target, together with Source, indicates the Mount, as specified
	// in the ContainerSpec, that this volume fulfills.
	Target string `json:",omitempty"`
}
 070701000003D6000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/time    070701000003D7000081A4000000000000000000000001645E367C000010FA000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/time/timestamp.go   package time // import "github.com/docker/docker/api/types/time"

import (
	"fmt"
	"math"
	"strconv"
	"strings"
	"time"
)

// These are additional predefined layouts for use in Time.Format and Time.Parse
// with --since and --until parameters for `docker logs` and `docker events`
const (
	rFC3339Local     = "2006-01-02T15:04:05"           // RFC3339 with local timezone
	rFC3339NanoLocal = "2006-01-02T15:04:05.999999999" // RFC3339Nano with local timezone
	dateWithZone     = "2006-01-02Z07:00"              // RFC3339 with time at 00:00:00
	dateLocal        = "2006-01-02"                    // RFC3339 with local timezone and time at 00:00:00
)

// GetTimestamp tries to parse given string as golang duration,
// then RFC3339 time and finally as a Unix timestamp. If
// any of these were successful, it returns a Unix timestamp
// as string otherwise returns the given value back.
// In case of duration input, the returned timestamp is computed
// as the given reference time minus the amount of the duration.
func GetTimestamp(value string, reference time.Time) (string, error) {
	if d, err := time.ParseDuration(value); value != "0" && err == nil {
		return strconv.FormatInt(reference.Add(-d).Unix(), 10), nil
	}

	var format string
	// if the string has a Z or a + or three dashes use parse otherwise use parseinlocation
	parseInLocation := !(strings.ContainsAny(value, "zZ+") || strings.Count(value, "-") == 3)

	if strings.Contains(value, ".") {
		if parseInLocation {
			format = rFC3339NanoLocal
		} else {
			format = time.RFC3339Nano
		}
	} else if strings.Contains(value, "T") {
		// we want the number of colons in the T portion of the timestamp
		tcolons := strings.Count(value, ":")
		// if parseInLocation is off and we have a +/- zone offset (not Z) then
		// there will be an extra colon in the input for the tz offset subtract that
		// colon from the tcolons count
		if !parseInLocation && !strings.ContainsAny(value, "zZ") && tcolons > 0 {
			tcolons--
		}
		if parseInLocation {
			switch tcolons {
			case 0:
				format = "2006-01-02T15"
			case 1:
				format = "2006-01-02T15:04"
			default:
				format = rFC3339Local
			}
		} else {
			switch tcolons {
			case 0:
				format = "2006-01-02T15Z07:00"
			case 1:
				format = "2006-01-02T15:04Z07:00"
			default:
				format = time.RFC3339
			}
		}
	} else if parseInLocation {
		format = dateLocal
	} else {
		format = dateWithZone
	}

	var t time.Time
	var err error

	if parseInLocation {
		t, err = time.ParseInLocation(format, value, time.FixedZone(reference.Zone()))
	} else {
		t, err = time.Parse(format, value)
	}

	if err != nil {
		// if there is a `-` then it's an RFC3339 like timestamp
		if strings.Contains(value, "-") {
			return "", err // was probably an RFC3339 like timestamp but the parser failed with an error
		}
		if _, _, err := parseTimestamp(value); err != nil {
			return "", fmt.Errorf("failed to parse value as time or duration: %q", value)
		}
		return value, nil // unix timestamp in and out case (meaning: the value passed at the command line is already in the right format for passing to the server)
	}

	return fmt.Sprintf("%d.%09d", t.Unix(), int64(t.Nanosecond())), nil
}

// ParseTimestamps returns seconds and nanoseconds from a timestamp that has the
// format "%d.%09d", time.Unix(), int64(time.Nanosecond()))
// if the incoming nanosecond portion is longer or shorter than 9 digits it is
// converted to nanoseconds.  The expectation is that the seconds and
// seconds will be used to create a time variable.  For example:
//
//	seconds, nanoseconds, err := ParseTimestamp("1136073600.000000001",0)
//	if err == nil since := time.Unix(seconds, nanoseconds)
//
// returns seconds as def(aultSeconds) if value == ""
func ParseTimestamps(value string, def int64) (int64, int64, error) {
	if value == "" {
		return def, 0, nil
	}
	return parseTimestamp(value)
}

func parseTimestamp(value string) (int64, int64, error) {
	sa := strings.SplitN(value, ".", 2)
	s, err := strconv.ParseInt(sa[0], 10, 64)
	if err != nil {
		return s, 0, err
	}
	if len(sa) != 2 {
		return s, 0, nil
	}
	n, err := strconv.ParseInt(sa[1], 10, 64)
	if err != nil {
		return s, n, err
	}
	// should already be in nanoseconds but just in case convert n to nanoseconds
	n = int64(float64(n) * math.Pow(float64(10), float64(9-len(sa[1]))))
	return s, n, nil
}
  070701000003D8000081A4000000000000000000000001645E367C00006F7E000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/types.go    package types // import "github.com/docker/docker/api/types"

import (
	"errors"
	"fmt"
	"io"
	"os"
	"strings"
	"time"

	"github.com/docker/docker/api/types/container"
	"github.com/docker/docker/api/types/filters"
	"github.com/docker/docker/api/types/mount"
	"github.com/docker/docker/api/types/network"
	"github.com/docker/docker/api/types/registry"
	"github.com/docker/docker/api/types/swarm"
	"github.com/docker/docker/api/types/volume"
	"github.com/docker/go-connections/nat"
)

const (
	// MediaTypeRawStream is vendor specific MIME-Type set for raw TTY streams
	MediaTypeRawStream = "application/vnd.docker.raw-stream"

	// MediaTypeMultiplexedStream is vendor specific MIME-Type set for stdin/stdout/stderr multiplexed streams
	MediaTypeMultiplexedStream = "application/vnd.docker.multiplexed-stream"
)

// RootFS returns Image's RootFS description including the layer IDs.
type RootFS struct {
	Type   string   `json:",omitempty"`
	Layers []string `json:",omitempty"`
}

// ImageInspect contains response of Engine API:
// GET "/images/{name:.*}/json"
type ImageInspect struct {
	// ID is the content-addressable ID of an image.
	//
	// This identifier is a content-addressable digest calculated from the
	// image's configuration (which includes the digests of layers used by
	// the image).
	//
	// Note that this digest differs from the `RepoDigests` below, which
	// holds digests of image manifests that reference the image.
	ID string `json:"Id"`

	// RepoTags is a list of image names/tags in the local image cache that
	// reference this image.
	//
	// Multiple image tags can refer to the same image, and this list may be
	// empty if no tags reference the image, in which case the image is
	// "untagged", in which case it can still be referenced by its ID.
	RepoTags []string

	// RepoDigests is a list of content-addressable digests of locally available
	// image manifests that the image is referenced from. Multiple manifests can
	// refer to the same image.
	//
	// These digests are usually only available if the image was either pulled
	// from a registry, or if the image was pushed to a registry, which is when
	// the manifest is generated and its digest calculated.
	RepoDigests []string

	// Parent is the ID of the parent image.
	//
	// Depending on how the image was created, this field may be empty and
	// is only set for images that were built/created locally. This field
	// is empty if the image was pulled from an image registry.
	Parent string

	// Comment is an optional message that can be set when committing or
	// importing the image.
	Comment string

	// Created is the date and time at which the image was created, formatted in
	// RFC 3339 nano-seconds (time.RFC3339Nano).
	Created string

	// Container is the ID of the container that was used to create the image.
	//
	// Depending on how the image was created, this field may be empty.
	Container string

	// ContainerConfig is an optional field containing the configuration of the
	// container that was last committed when creating the image.
	//
	// Previous versions of Docker builder used this field to store build cache,
	// and it is not in active use anymore.
	ContainerConfig *container.Config

	// DockerVersion is the version of Docker that was used to build the image.
	//
	// Depending on how the image was created, this field may be empty.
	DockerVersion string

	// Author is the name of the author that was specified when committing the
	// image, or as specified through MAINTAINER (deprecated) in the Dockerfile.
	Author string
	Config *container.Config

	// Architecture is the hardware CPU architecture that the image runs on.
	Architecture string

	// Variant is the CPU architecture variant (presently ARM-only).
	Variant string `json:",omitempty"`

	// OS is the Operating System the image is built to run on.
	Os string

	// OsVersion is the version of the Operating System the image is built to
	// run on (especially for Windows).
	OsVersion string `json:",omitempty"`

	// Size is the total size of the image including all layers it is composed of.
	Size int64

	// VirtualSize is the total size of the image including all layers it is
	// composed of.
	//
	// In versions of Docker before v1.10, this field was calculated from
	// the image itself and all of its parent images. Docker v1.10 and up
	// store images self-contained, and no longer use a parent-chain, making
	// this field an equivalent of the Size field.
	//
	// This field is kept for backward compatibility, but may be removed in
	// a future version of the API.
	VirtualSize int64 // TODO(thaJeztah): deprecate this field

	// GraphDriver holds information about the storage driver used to store the
	// container's and image's filesystem.
	GraphDriver GraphDriverData

	// RootFS contains information about the image's RootFS, including the
	// layer IDs.
	RootFS RootFS

	// Metadata of the image in the local cache.
	//
	// This information is local to the daemon, and not part of the image itself.
	Metadata ImageMetadata
}

// ImageMetadata contains engine-local data about the image
type ImageMetadata struct {
	// LastTagTime is the date and time at which the image was last tagged.
	LastTagTime time.Time `json:",omitempty"`
}

// Container contains response of Engine API:
// GET "/containers/json"
type Container struct {
	ID         string `json:"Id"`
	Names      []string
	Image      string
	ImageID    string
	Command    string
	Created    int64
	Ports      []Port
	SizeRw     int64 `json:",omitempty"`
	SizeRootFs int64 `json:",omitempty"`
	Labels     map[string]string
	State      string
	Status     string
	HostConfig struct {
		NetworkMode string `json:",omitempty"`
	}
	NetworkSettings *SummaryNetworkSettings
	Mounts          []MountPoint
}

// CopyConfig contains request body of Engine API:
// POST "/containers/"+containerID+"/copy"
type CopyConfig struct {
	Resource string
}

// ContainerPathStat is used to encode the header from
// GET "/containers/{name:.*}/archive"
// "Name" is the file or directory name.
type ContainerPathStat struct {
	Name       string      `json:"name"`
	Size       int64       `json:"size"`
	Mode       os.FileMode `json:"mode"`
	Mtime      time.Time   `json:"mtime"`
	LinkTarget string      `json:"linkTarget"`
}

// ContainerStats contains response of Engine API:
// GET "/stats"
type ContainerStats struct {
	Body   io.ReadCloser `json:"body"`
	OSType string        `json:"ostype"`
}

// Ping contains response of Engine API:
// GET "/_ping"
type Ping struct {
	APIVersion     string
	OSType         string
	Experimental   bool
	BuilderVersion BuilderVersion

	// SwarmStatus provides information about the current swarm status of the
	// engine, obtained from the "Swarm" header in the API response.
	//
	// It can be a nil struct if the API version does not provide this header
	// in the ping response, or if an error occurred, in which case the client
	// should use other ways to get the current swarm status, such as the /swarm
	// endpoint.
	SwarmStatus *swarm.Status
}

// ComponentVersion describes the version information for a specific component.
type ComponentVersion struct {
	Name    string
	Version string
	Details map[string]string `json:",omitempty"`
}

// Version contains response of Engine API:
// GET "/version"
type Version struct {
	Platform   struct{ Name string } `json:",omitempty"`
	Components []ComponentVersion    `json:",omitempty"`

	// The following fields are deprecated, they relate to the Engine component and are kept for backwards compatibility

	Version       string
	APIVersion    string `json:"ApiVersion"`
	MinAPIVersion string `json:"MinAPIVersion,omitempty"`
	GitCommit     string
	GoVersion     string
	Os            string
	Arch          string
	KernelVersion string `json:",omitempty"`
	Experimental  bool   `json:",omitempty"`
	BuildTime     string `json:",omitempty"`
}

// Commit holds the Git-commit (SHA1) that a binary was built from, as reported
// in the version-string of external tools, such as containerd, or runC.
type Commit struct {
	ID       string // ID is the actual commit ID of external tool.
	Expected string // Expected is the commit ID of external tool expected by dockerd as set at build time.
}

// Info contains response of Engine API:
// GET "/info"
type Info struct {
	ID                 string
	Containers         int
	ContainersRunning  int
	ContainersPaused   int
	ContainersStopped  int
	Images             int
	Driver             string
	DriverStatus       [][2]string
	SystemStatus       [][2]string `json:",omitempty"` // SystemStatus is only propagated by the Swarm standalone API
	Plugins            PluginsInfo
	MemoryLimit        bool
	SwapLimit          bool
	KernelMemory       bool `json:",omitempty"` // Deprecated: kernel 5.4 deprecated kmem.limit_in_bytes
	KernelMemoryTCP    bool `json:",omitempty"` // KernelMemoryTCP is not supported on cgroups v2.
	CPUCfsPeriod       bool `json:"CpuCfsPeriod"`
	CPUCfsQuota        bool `json:"CpuCfsQuota"`
	CPUShares          bool
	CPUSet             bool
	PidsLimit          bool
	IPv4Forwarding     bool
	BridgeNfIptables   bool
	BridgeNfIP6tables  bool `json:"BridgeNfIp6tables"`
	Debug              bool
	NFd                int
	OomKillDisable     bool
	NGoroutines        int
	SystemTime         string
	LoggingDriver      string
	CgroupDriver       string
	CgroupVersion      string `json:",omitempty"`
	NEventsListener    int
	KernelVersion      string
	OperatingSystem    string
	OSVersion          string
	OSType             string
	Architecture       string
	IndexServerAddress string
	RegistryConfig     *registry.ServiceConfig
	NCPU               int
	MemTotal           int64
	GenericResources   []swarm.GenericResource
	DockerRootDir      string
	HTTPProxy          string `json:"HttpProxy"`
	HTTPSProxy         string `json:"HttpsProxy"`
	NoProxy            string
	Name               string
	Labels             []string
	ExperimentalBuild  bool
	ServerVersion      string
	ClusterStore       string `json:",omitempty"` // Deprecated: host-discovery and overlay networks with external k/v stores are deprecated
	ClusterAdvertise   string `json:",omitempty"` // Deprecated: host-discovery and overlay networks with external k/v stores are deprecated
	Runtimes           map[string]Runtime
	DefaultRuntime     string
	Swarm              swarm.Info
	// LiveRestoreEnabled determines whether containers should be kept
	// running when the daemon is shutdown or upon daemon start if
	// running containers are detected
	LiveRestoreEnabled  bool
	Isolation           container.Isolation
	InitBinary          string
	ContainerdCommit    Commit
	RuncCommit          Commit
	InitCommit          Commit
	SecurityOptions     []string
	ProductLicense      string               `json:",omitempty"`
	DefaultAddressPools []NetworkAddressPool `json:",omitempty"`

	// Warnings contains a slice of warnings that occurred  while collecting
	// system information. These warnings are intended to be informational
	// messages for the user, and are not intended to be parsed / used for
	// other purposes, as they do not have a fixed format.
	Warnings []string
}

// KeyValue holds a key/value pair
type KeyValue struct {
	Key, Value string
}

// NetworkAddressPool is a temp struct used by Info struct
type NetworkAddressPool struct {
	Base string
	Size int
}

// SecurityOpt contains the name and options of a security option
type SecurityOpt struct {
	Name    string
	Options []KeyValue
}

// DecodeSecurityOptions decodes a security options string slice to a type safe
// SecurityOpt
func DecodeSecurityOptions(opts []string) ([]SecurityOpt, error) {
	so := []SecurityOpt{}
	for _, opt := range opts {
		// support output from a < 1.13 docker daemon
		if !strings.Contains(opt, "=") {
			so = append(so, SecurityOpt{Name: opt})
			continue
		}
		secopt := SecurityOpt{}
		split := strings.Split(opt, ",")
		for _, s := range split {
			kv := strings.SplitN(s, "=", 2)
			if len(kv) != 2 {
				return nil, fmt.Errorf("invalid security option %q", s)
			}
			if kv[0] == "" || kv[1] == "" {
				return nil, errors.New("invalid empty security option")
			}
			if kv[0] == "name" {
				secopt.Name = kv[1]
				continue
			}
			secopt.Options = append(secopt.Options, KeyValue{Key: kv[0], Value: kv[1]})
		}
		so = append(so, secopt)
	}
	return so, nil
}

// PluginsInfo is a temp struct holding Plugins name
// registered with docker daemon. It is used by Info struct
type PluginsInfo struct {
	// List of Volume plugins registered
	Volume []string
	// List of Network plugins registered
	Network []string
	// List of Authorization plugins registered
	Authorization []string
	// List of Log plugins registered
	Log []string
}

// ExecStartCheck is a temp struct used by execStart
// Config fields is part of ExecConfig in runconfig package
type ExecStartCheck struct {
	// ExecStart will first check if it's detached
	Detach bool
	// Check if there's a tty
	Tty bool
	// Terminal size [height, width], unused if Tty == false
	ConsoleSize *[2]uint `json:",omitempty"`
}

// HealthcheckResult stores information about a single run of a healthcheck probe
type HealthcheckResult struct {
	Start    time.Time // Start is the time this check started
	End      time.Time // End is the time this check ended
	ExitCode int       // ExitCode meanings: 0=healthy, 1=unhealthy, 2=reserved (considered unhealthy), else=error running probe
	Output   string    // Output from last check
}

// Health states
const (
	NoHealthcheck = "none"      // Indicates there is no healthcheck
	Starting      = "starting"  // Starting indicates that the container is not yet ready
	Healthy       = "healthy"   // Healthy indicates that the container is running correctly
	Unhealthy     = "unhealthy" // Unhealthy indicates that the container has a problem
)

// Health stores information about the container's healthcheck results
type Health struct {
	Status        string               // Status is one of Starting, Healthy or Unhealthy
	FailingStreak int                  // FailingStreak is the number of consecutive failures
	Log           []*HealthcheckResult // Log contains the last few results (oldest first)
}

// ContainerState stores container's running state
// it's part of ContainerJSONBase and will return by "inspect" command
type ContainerState struct {
	Status     string // String representation of the container state. Can be one of "created", "running", "paused", "restarting", "removing", "exited", or "dead"
	Running    bool
	Paused     bool
	Restarting bool
	OOMKilled  bool
	Dead       bool
	Pid        int
	ExitCode   int
	Error      string
	StartedAt  string
	FinishedAt string
	Health     *Health `json:",omitempty"`
}

// ContainerNode stores information about the node that a container
// is running on.  It's only used by the Docker Swarm standalone API
type ContainerNode struct {
	ID        string
	IPAddress string `json:"IP"`
	Addr      string
	Name      string
	Cpus      int
	Memory    int64
	Labels    map[string]string
}

// ContainerJSONBase contains response of Engine API:
// GET "/containers/{name:.*}/json"
type ContainerJSONBase struct {
	ID              string `json:"Id"`
	Created         string
	Path            string
	Args            []string
	State           *ContainerState
	Image           string
	ResolvConfPath  string
	HostnamePath    string
	HostsPath       string
	LogPath         string
	Node            *ContainerNode `json:",omitempty"` // Node is only propagated by Docker Swarm standalone API
	Name            string
	RestartCount    int
	Driver          string
	Platform        string
	MountLabel      string
	ProcessLabel    string
	AppArmorProfile string
	ExecIDs         []string
	HostConfig      *container.HostConfig
	GraphDriver     GraphDriverData
	SizeRw          *int64 `json:",omitempty"`
	SizeRootFs      *int64 `json:",omitempty"`
}

// ContainerJSON is newly used struct along with MountPoint
type ContainerJSON struct {
	*ContainerJSONBase
	Mounts          []MountPoint
	Config          *container.Config
	NetworkSettings *NetworkSettings
}

// NetworkSettings exposes the network settings in the api
type NetworkSettings struct {
	NetworkSettingsBase
	DefaultNetworkSettings
	Networks map[string]*network.EndpointSettings
}

// SummaryNetworkSettings provides a summary of container's networks
// in /containers/json
type SummaryNetworkSettings struct {
	Networks map[string]*network.EndpointSettings
}

// NetworkSettingsBase holds basic information about networks
type NetworkSettingsBase struct {
	Bridge                 string      // Bridge is the Bridge name the network uses(e.g. `docker0`)
	SandboxID              string      // SandboxID uniquely represents a container's network stack
	HairpinMode            bool        // HairpinMode specifies if hairpin NAT should be enabled on the virtual interface
	LinkLocalIPv6Address   string      // LinkLocalIPv6Address is an IPv6 unicast address using the link-local prefix
	LinkLocalIPv6PrefixLen int         // LinkLocalIPv6PrefixLen is the prefix length of an IPv6 unicast address
	Ports                  nat.PortMap // Ports is a collection of PortBinding indexed by Port
	SandboxKey             string      // SandboxKey identifies the sandbox
	SecondaryIPAddresses   []network.Address
	SecondaryIPv6Addresses []network.Address
}

// DefaultNetworkSettings holds network information
// during the 2 release deprecation period.
// It will be removed in Docker 1.11.
type DefaultNetworkSettings struct {
	EndpointID          string // EndpointID uniquely represents a service endpoint in a Sandbox
	Gateway             string // Gateway holds the gateway address for the network
	GlobalIPv6Address   string // GlobalIPv6Address holds network's global IPv6 address
	GlobalIPv6PrefixLen int    // GlobalIPv6PrefixLen represents mask length of network's global IPv6 address
	IPAddress           string // IPAddress holds the IPv4 address for the network
	IPPrefixLen         int    // IPPrefixLen represents mask length of network's IPv4 address
	IPv6Gateway         string // IPv6Gateway holds gateway address specific for IPv6
	MacAddress          string // MacAddress holds the MAC address for the network
}

// MountPoint represents a mount point configuration inside the container.
// This is used for reporting the mountpoints in use by a container.
type MountPoint struct {
	// Type is the type of mount, see `Type<foo>` definitions in
	// github.com/docker/docker/api/types/mount.Type
	Type mount.Type `json:",omitempty"`

	// Name is the name reference to the underlying data defined by `Source`
	// e.g., the volume name.
	Name string `json:",omitempty"`

	// Source is the source location of the mount.
	//
	// For volumes, this contains the storage location of the volume (within
	// `/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains
	// the source (host) part of the bind-mount. For `tmpfs` mount points, this
	// field is empty.
	Source string

	// Destination is the path relative to the container root (`/`) where the
	// Source is mounted inside the container.
	Destination string

	// Driver is the volume driver used to create the volume (if it is a volume).
	Driver string `json:",omitempty"`

	// Mode is a comma separated list of options supplied by the user when
	// creating the bind/volume mount.
	//
	// The default is platform-specific (`"z"` on Linux, empty on Windows).
	Mode string

	// RW indicates whether the mount is mounted writable (read-write).
	RW bool

	// Propagation describes how mounts are propagated from the host into the
	// mount point, and vice-versa. Refer to the Linux kernel documentation
	// for details:
	// https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt
	//
	// This field is not used on Windows.
	Propagation mount.Propagation
}

// NetworkResource is the body of the "get network" http response message
type NetworkResource struct {
	Name       string                         // Name is the requested name of the network
	ID         string                         `json:"Id"` // ID uniquely identifies a network on a single machine
	Created    time.Time                      // Created is the time the network created
	Scope      string                         // Scope describes the level at which the network exists (e.g. `swarm` for cluster-wide or `local` for machine level)
	Driver     string                         // Driver is the Driver name used to create the network (e.g. `bridge`, `overlay`)
	EnableIPv6 bool                           // EnableIPv6 represents whether to enable IPv6
	IPAM       network.IPAM                   // IPAM is the network's IP Address Management
	Internal   bool                           // Internal represents if the network is used internal only
	Attachable bool                           // Attachable represents if the global scope is manually attachable by regular containers from workers in swarm mode.
	Ingress    bool                           // Ingress indicates the network is providing the routing-mesh for the swarm cluster.
	ConfigFrom network.ConfigReference        // ConfigFrom specifies the source which will provide the configuration for this network.
	ConfigOnly bool                           // ConfigOnly networks are place-holder networks for network configurations to be used by other networks. ConfigOnly networks cannot be used directly to run containers or services.
	Containers map[string]EndpointResource    // Containers contains endpoints belonging to the network
	Options    map[string]string              // Options holds the network specific options to use for when creating the network
	Labels     map[string]string              // Labels holds metadata specific to the network being created
	Peers      []network.PeerInfo             `json:",omitempty"` // List of peer nodes for an overlay network
	Services   map[string]network.ServiceInfo `json:",omitempty"`
}

// EndpointResource contains network resources allocated and used for a container in a network
type EndpointResource struct {
	Name        string
	EndpointID  string
	MacAddress  string
	IPv4Address string
	IPv6Address string
}

// NetworkCreate is the expected body of the "create network" http request message
type NetworkCreate struct {
	// Check for networks with duplicate names.
	// Network is primarily keyed based on a random ID and not on the name.
	// Network name is strictly a user-friendly alias to the network
	// which is uniquely identified using ID.
	// And there is no guaranteed way to check for duplicates.
	// Option CheckDuplicate is there to provide a best effort checking of any networks
	// which has the same name but it is not guaranteed to catch all name collisions.
	CheckDuplicate bool
	Driver         string
	Scope          string
	EnableIPv6     bool
	IPAM           *network.IPAM
	Internal       bool
	Attachable     bool
	Ingress        bool
	ConfigOnly     bool
	ConfigFrom     *network.ConfigReference
	Options        map[string]string
	Labels         map[string]string
}

// NetworkCreateRequest is the request message sent to the server for network create call.
type NetworkCreateRequest struct {
	NetworkCreate
	Name string
}

// NetworkCreateResponse is the response message sent by the server for network create call
type NetworkCreateResponse struct {
	ID      string `json:"Id"`
	Warning string
}

// NetworkConnect represents the data to be used to connect a container to the network
type NetworkConnect struct {
	Container      string
	EndpointConfig *network.EndpointSettings `json:",omitempty"`
}

// NetworkDisconnect represents the data to be used to disconnect a container from the network
type NetworkDisconnect struct {
	Container string
	Force     bool
}

// NetworkInspectOptions holds parameters to inspect network
type NetworkInspectOptions struct {
	Scope   string
	Verbose bool
}

// Checkpoint represents the details of a checkpoint
type Checkpoint struct {
	Name string // Name is the name of the checkpoint
}

// Runtime describes an OCI runtime
type Runtime struct {
	Path string   `json:"path"`
	Args []string `json:"runtimeArgs,omitempty"`

	// This is exposed here only for internal use
	// It is not currently supported to specify custom shim configs
	Shim *ShimConfig `json:"-"`
}

// ShimConfig is used by runtime to configure containerd shims
type ShimConfig struct {
	Binary string
	Opts   interface{}
}

// DiskUsageObject represents an object type used for disk usage query filtering.
type DiskUsageObject string

const (
	// ContainerObject represents a container DiskUsageObject.
	ContainerObject DiskUsageObject = "container"
	// ImageObject represents an image DiskUsageObject.
	ImageObject DiskUsageObject = "image"
	// VolumeObject represents a volume DiskUsageObject.
	VolumeObject DiskUsageObject = "volume"
	// BuildCacheObject represents a build-cache DiskUsageObject.
	BuildCacheObject DiskUsageObject = "build-cache"
)

// DiskUsageOptions holds parameters for system disk usage query.
type DiskUsageOptions struct {
	// Types specifies what object types to include in the response. If empty,
	// all object types are returned.
	Types []DiskUsageObject
}

// DiskUsage contains response of Engine API:
// GET "/system/df"
type DiskUsage struct {
	LayersSize  int64
	Images      []*ImageSummary
	Containers  []*Container
	Volumes     []*volume.Volume
	BuildCache  []*BuildCache
	BuilderSize int64 `json:",omitempty"` // Deprecated: deprecated in API 1.38, and no longer used since API 1.40.
}

// ContainersPruneReport contains the response for Engine API:
// POST "/containers/prune"
type ContainersPruneReport struct {
	ContainersDeleted []string
	SpaceReclaimed    uint64
}

// VolumesPruneReport contains the response for Engine API:
// POST "/volumes/prune"
type VolumesPruneReport struct {
	VolumesDeleted []string
	SpaceReclaimed uint64
}

// ImagesPruneReport contains the response for Engine API:
// POST "/images/prune"
type ImagesPruneReport struct {
	ImagesDeleted  []ImageDeleteResponseItem
	SpaceReclaimed uint64
}

// BuildCachePruneReport contains the response for Engine API:
// POST "/build/prune"
type BuildCachePruneReport struct {
	CachesDeleted  []string
	SpaceReclaimed uint64
}

// NetworksPruneReport contains the response for Engine API:
// POST "/networks/prune"
type NetworksPruneReport struct {
	NetworksDeleted []string
}

// SecretCreateResponse contains the information returned to a client
// on the creation of a new secret.
type SecretCreateResponse struct {
	// ID is the id of the created secret.
	ID string
}

// SecretListOptions holds parameters to list secrets
type SecretListOptions struct {
	Filters filters.Args
}

// ConfigCreateResponse contains the information returned to a client
// on the creation of a new config.
type ConfigCreateResponse struct {
	// ID is the id of the created config.
	ID string
}

// ConfigListOptions holds parameters to list configs
type ConfigListOptions struct {
	Filters filters.Args
}

// PushResult contains the tag, manifest digest, and manifest size from the
// push. It's used to signal this information to the trust code in the client
// so it can sign the manifest if necessary.
type PushResult struct {
	Tag    string
	Digest string
	Size   int
}

// BuildResult contains the image id of a successful build
type BuildResult struct {
	ID string
}

// BuildCache contains information about a build cache record.
type BuildCache struct {
	// ID is the unique ID of the build cache record.
	ID string
	// Parent is the ID of the parent build cache record.
	//
	// Deprecated: deprecated in API v1.42 and up, as it was deprecated in BuildKit; use Parents instead.
	Parent string `json:"Parent,omitempty"`
	// Parents is the list of parent build cache record IDs.
	Parents []string `json:" Parents,omitempty"`
	// Type is the cache record type.
	Type string
	// Description is a description of the build-step that produced the build cache.
	Description string
	// InUse indicates if the build cache is in use.
	InUse bool
	// Shared indicates if the build cache is shared.
	Shared bool
	// Size is the amount of disk space used by the build cache (in bytes).
	Size int64
	// CreatedAt is the date and time at which the build cache was created.
	CreatedAt time.Time
	// LastUsedAt is the date and time at which the build cache was last used.
	LastUsedAt *time.Time
	UsageCount int
}

// BuildCachePruneOptions hold parameters to prune the build cache
type BuildCachePruneOptions struct {
	All         bool
	KeepStorage int64
	Filters     filters.Args
}
  070701000003D9000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/versions    070701000003DA000081A4000000000000000000000001645E367C000004BB000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/versions/README.md  # Legacy API type versions

This package includes types for legacy API versions. The stable version of the API types live in `api/types/*.go`.

Consider moving a type here when you need to keep backwards compatibility in the API. This legacy types are organized by the latest API version they appear in. For instance, types in the `v1p19` package are valid for API versions below or equal `1.19`. Types in the `v1p20` package are valid for the API version `1.20`, since the versions below that will use the legacy types in `v1p19`.

## Package name conventions

The package name convention is to use `v` as a prefix for the version number and `p`(patch) as a separator. We use this nomenclature due to a few restrictions in the Go package name convention:

1. We cannot use `.` because it's interpreted by the language, think of `v1.20.CallFunction`.
2. We cannot use `_` because golint complains about it. The code is actually valid, but it looks probably more weird: `v1_20.CallFunction`.

For instance, if you want to modify a type that was available in the version `1.21` of the API but it will have different fields in the version `1.22`, you want to create a new package under `api/types/versions/v1p21`.
 070701000003DB000081A4000000000000000000000001645E367C00000586000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/versions/compare.go package versions // import "github.com/docker/docker/api/types/versions"

import (
	"strconv"
	"strings"
)

// compare compares two version strings
// returns -1 if v1 < v2, 1 if v1 > v2, 0 otherwise.
func compare(v1, v2 string) int {
	if v1 == v2 {
		return 0
	}
	var (
		currTab  = strings.Split(v1, ".")
		otherTab = strings.Split(v2, ".")
	)

	max := len(currTab)
	if len(otherTab) > max {
		max = len(otherTab)
	}
	for i := 0; i < max; i++ {
		var currInt, otherInt int

		if len(currTab) > i {
			currInt, _ = strconv.Atoi(currTab[i])
		}
		if len(otherTab) > i {
			otherInt, _ = strconv.Atoi(otherTab[i])
		}
		if currInt > otherInt {
			return 1
		}
		if otherInt > currInt {
			return -1
		}
	}
	return 0
}

// LessThan checks if a version is less than another
func LessThan(v, other string) bool {
	return compare(v, other) == -1
}

// LessThanOrEqualTo checks if a version is less than or equal to another
func LessThanOrEqualTo(v, other string) bool {
	return compare(v, other) <= 0
}

// GreaterThan checks if a version is greater than another
func GreaterThan(v, other string) bool {
	return compare(v, other) == 1
}

// GreaterThanOrEqualTo checks if a version is greater than or equal to another
func GreaterThanOrEqualTo(v, other string) bool {
	return compare(v, other) >= 0
}

// Equal checks if a version is equal to another
func Equal(v, other string) bool {
	return compare(v, other) == 0
}
  070701000003DC000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/volume  070701000003DD000081A4000000000000000000000001645E367C00004205000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/volume/cluster_volume.go    package volume

import (
	"github.com/docker/docker/api/types/swarm"
)

// ClusterVolume contains options and information specific to, and only present
// on, Swarm CSI cluster volumes.
type ClusterVolume struct {
	// ID is the Swarm ID of the volume. Because cluster volumes are Swarm
	// objects, they have an ID, unlike non-cluster volumes, which only have a
	// Name. This ID can be used to refer to the cluster volume.
	ID string

	// Meta is the swarm metadata about this volume.
	swarm.Meta

	// Spec is the cluster-specific options from which this volume is derived.
	Spec ClusterVolumeSpec

	// PublishStatus contains the status of the volume as it pertains to its
	// publishing on Nodes.
	PublishStatus []*PublishStatus `json:",omitempty"`

	// Info is information about the global status of the volume.
	Info *Info `json:",omitempty"`
}

// ClusterVolumeSpec contains the spec used to create this volume.
type ClusterVolumeSpec struct {
	// Group defines the volume group of this volume. Volumes belonging to the
	// same group can be referred to by group name when creating Services.
	// Referring to a volume by group instructs swarm to treat volumes in that
	// group interchangeably for the purpose of scheduling. Volumes with an
	// empty string for a group technically all belong to the same, emptystring
	// group.
	Group string `json:",omitempty"`

	// AccessMode defines how the volume is used by tasks.
	AccessMode *AccessMode `json:",omitempty"`

	// AccessibilityRequirements specifies where in the cluster a volume must
	// be accessible from.
	//
	// This field must be empty if the plugin does not support
	// VOLUME_ACCESSIBILITY_CONSTRAINTS capabilities. If it is present but the
	// plugin does not support it, volume will not be created.
	//
	// If AccessibilityRequirements is empty, but the plugin does support
	// VOLUME_ACCESSIBILITY_CONSTRAINTS, then Swarmkit will assume the entire
	// cluster is a valid target for the volume.
	AccessibilityRequirements *TopologyRequirement `json:",omitempty"`

	// CapacityRange defines the desired capacity that the volume should be
	// created with. If nil, the plugin will decide the capacity.
	CapacityRange *CapacityRange `json:",omitempty"`

	// Secrets defines Swarm Secrets that are passed to the CSI storage plugin
	// when operating on this volume.
	Secrets []Secret `json:",omitempty"`

	// Availability is the Volume's desired availability. Analogous to Node
	// Availability, this allows the user to take volumes offline in order to
	// update or delete them.
	Availability Availability `json:",omitempty"`
}

// Availability specifies the availability of the volume.
type Availability string

const (
	// AvailabilityActive indicates that the volume is active and fully
	// schedulable on the cluster.
	AvailabilityActive Availability = "active"

	// AvailabilityPause indicates that no new workloads should use the
	// volume, but existing workloads can continue to use it.
	AvailabilityPause Availability = "pause"

	// AvailabilityDrain indicates that all workloads using this volume
	// should be rescheduled, and the volume unpublished from all nodes.
	AvailabilityDrain Availability = "drain"
)

// AccessMode defines the access mode of a volume.
type AccessMode struct {
	// Scope defines the set of nodes this volume can be used on at one time.
	Scope Scope `json:",omitempty"`

	// Sharing defines the number and way that different tasks can use this
	// volume at one time.
	Sharing SharingMode `json:",omitempty"`

	// MountVolume defines options for using this volume as a Mount-type
	// volume.
	//
	// Either BlockVolume or MountVolume, but not both, must be present.
	MountVolume *TypeMount `json:",omitempty"`

	// BlockVolume defines options for using this volume as a Block-type
	// volume.
	//
	// Either BlockVolume or MountVolume, but not both, must be present.
	BlockVolume *TypeBlock `json:",omitempty"`
}

// Scope defines the Scope of a Cluster Volume. This is how many nodes a
// Volume can be accessed simultaneously on.
type Scope string

const (
	// ScopeSingleNode indicates the volume can be used on one node at a
	// time.
	ScopeSingleNode Scope = "single"

	// ScopeMultiNode indicates the volume can be used on many nodes at
	// the same time.
	ScopeMultiNode Scope = "multi"
)

// SharingMode defines the Sharing of a Cluster Volume. This is how Tasks using a
// Volume at the same time can use it.
type SharingMode string

const (
	// SharingNone indicates that only one Task may use the Volume at a
	// time.
	SharingNone SharingMode = "none"

	// SharingReadOnly indicates that the Volume may be shared by any
	// number of Tasks, but they must be read-only.
	SharingReadOnly SharingMode = "readonly"

	// SharingOneWriter indicates that the Volume may be shared by any
	// number of Tasks, but all after the first must be read-only.
	SharingOneWriter SharingMode = "onewriter"

	// SharingAll means that the Volume may be shared by any number of
	// Tasks, as readers or writers.
	SharingAll SharingMode = "all"
)

// TypeBlock defines options for using a volume as a block-type volume.
//
// Intentionally empty.
type TypeBlock struct{}

// TypeMount contains options for using a volume as a Mount-type
// volume.
type TypeMount struct {
	// FsType specifies the filesystem type for the mount volume. Optional.
	FsType string `json:",omitempty"`

	// MountFlags defines flags to pass when mounting the volume. Optional.
	MountFlags []string `json:",omitempty"`
}

// TopologyRequirement expresses the user's requirements for a volume's
// accessible topology.
type TopologyRequirement struct {
	// Requisite specifies a list of Topologies, at least one of which the
	// volume must be accessible from.
	//
	// Taken verbatim from the CSI Spec:
	//
	// Specifies the list of topologies the provisioned volume MUST be
	// accessible from.
	// This field is OPTIONAL. If TopologyRequirement is specified either
	// requisite or preferred or both MUST be specified.
	//
	// If requisite is specified, the provisioned volume MUST be
	// accessible from at least one of the requisite topologies.
	//
	// Given
	//   x = number of topologies provisioned volume is accessible from
	//   n = number of requisite topologies
	// The CO MUST ensure n >= 1. The SP MUST ensure x >= 1
	// If x==n, then the SP MUST make the provisioned volume available to
	// all topologies from the list of requisite topologies. If it is
	// unable to do so, the SP MUST fail the CreateVolume call.
	// For example, if a volume should be accessible from a single zone,
	// and requisite =
	//   {"region": "R1", "zone": "Z2"}
	// then the provisioned volume MUST be accessible from the "region"
	// "R1" and the "zone" "Z2".
	// Similarly, if a volume should be accessible from two zones, and
	// requisite =
	//   {"region": "R1", "zone": "Z2"},
	//   {"region": "R1", "zone": "Z3"}
	// then the provisioned volume MUST be accessible from the "region"
	// "R1" and both "zone" "Z2" and "zone" "Z3".
	//
	// If x<n, then the SP SHALL choose x unique topologies from the list
	// of requisite topologies. If it is unable to do so, the SP MUST fail
	// the CreateVolume call.
	// For example, if a volume should be accessible from a single zone,
	// and requisite =
	//   {"region": "R1", "zone": "Z2"},
	//   {"region": "R1", "zone": "Z3"}
	// then the SP may choose to make the provisioned volume available in
	// either the "zone" "Z2" or the "zone" "Z3" in the "region" "R1".
	// Similarly, if a volume should be accessible from two zones, and
	// requisite =
	//   {"region": "R1", "zone": "Z2"},
	//   {"region": "R1", "zone": "Z3"},
	//   {"region": "R1", "zone": "Z4"}
	// then the provisioned volume MUST be accessible from any combination
	// of two unique topologies: e.g. "R1/Z2" and "R1/Z3", or "R1/Z2" and
	//  "R1/Z4", or "R1/Z3" and "R1/Z4".
	//
	// If x>n, then the SP MUST make the provisioned volume available from
	// all topologies from the list of requisite topologies and MAY choose
	// the remaining x-n unique topologies from the list of all possible
	// topologies. If it is unable to do so, the SP MUST fail the
	// CreateVolume call.
	// For example, if a volume should be accessible from two zones, and
	// requisite =
	//   {"region": "R1", "zone": "Z2"}
	// then the provisioned volume MUST be accessible from the "region"
	// "R1" and the "zone" "Z2" and the SP may select the second zone
	// independently, e.g. "R1/Z4".
	Requisite []Topology `json:",omitempty"`

	// Preferred is a list of Topologies that the volume should attempt to be
	// provisioned in.
	//
	// Taken from the CSI spec:
	//
	// Specifies the list of topologies the CO would prefer the volume to
	// be provisioned in.
	//
	// This field is OPTIONAL. If TopologyRequirement is specified either
	// requisite or preferred or both MUST be specified.
	//
	// An SP MUST attempt to make the provisioned volume available using
	// the preferred topologies in order from first to last.
	//
	// If requisite is specified, all topologies in preferred list MUST
	// also be present in the list of requisite topologies.
	//
	// If the SP is unable to to make the provisioned volume available
	// from any of the preferred topologies, the SP MAY choose a topology
	// from the list of requisite topologies.
	// If the list of requisite topologies is not specified, then the SP
	// MAY choose from the list of all possible topologies.
	// If the list of requisite topologies is specified and the SP is
	// unable to to make the provisioned volume available from any of the
	// requisite topologies it MUST fail the CreateVolume call.
	//
	// Example 1:
	// Given a volume should be accessible from a single zone, and
	// requisite =
	//   {"region": "R1", "zone": "Z2"},
	//   {"region": "R1", "zone": "Z3"}
	// preferred =
	//   {"region": "R1", "zone": "Z3"}
	// then the the SP SHOULD first attempt to make the provisioned volume
	// available from "zone" "Z3" in the "region" "R1" and fall back to
	// "zone" "Z2" in the "region" "R1" if that is not possible.
	//
	// Example 2:
	// Given a volume should be accessible from a single zone, and
	// requisite =
	//   {"region": "R1", "zone": "Z2"},
	//   {"region": "R1", "zone": "Z3"},
	//   {"region": "R1", "zone": "Z4"},
	//   {"region": "R1", "zone": "Z5"}
	// preferred =
	//   {"region": "R1", "zone": "Z4"},
	//   {"region": "R1", "zone": "Z2"}
	// then the the SP SHOULD first attempt to make the provisioned volume
	// accessible from "zone" "Z4" in the "region" "R1" and fall back to
	// "zone" "Z2" in the "region" "R1" if that is not possible. If that
	// is not possible, the SP may choose between either the "zone"
	// "Z3" or "Z5" in the "region" "R1".
	//
	// Example 3:
	// Given a volume should be accessible from TWO zones (because an
	// opaque parameter in CreateVolumeRequest, for example, specifies
	// the volume is accessible from two zones, aka synchronously
	// replicated), and
	// requisite =
	//   {"region": "R1", "zone": "Z2"},
	//   {"region": "R1", "zone": "Z3"},
	//   {"region": "R1", "zone": "Z4"},
	//   {"region": "R1", "zone": "Z5"}
	// preferred =
	//   {"region": "R1", "zone": "Z5"},
	//   {"region": "R1", "zone": "Z3"}
	// then the the SP SHOULD first attempt to make the provisioned volume
	// accessible from the combination of the two "zones" "Z5" and "Z3" in
	// the "region" "R1". If that's not possible, it should fall back to
	// a combination of "Z5" and other possibilities from the list of
	// requisite. If that's not possible, it should fall back  to a
	// combination of "Z3" and other possibilities from the list of
	// requisite. If that's not possible, it should fall back  to a
	// combination of other possibilities from the list of requisite.
	Preferred []Topology `json:",omitempty"`
}

// Topology is a map of topological domains to topological segments.
//
// This description is taken verbatim from the CSI Spec:
//
// A topological domain is a sub-division of a cluster, like "region",
// "zone", "rack", etc.
// A topological segment is a specific instance of a topological domain,
// like "zone3", "rack3", etc.
// For example {"com.company/zone": "Z1", "com.company/rack": "R3"}
// Valid keys have two segments: an OPTIONAL prefix and name, separated
// by a slash (/), for example: "com.company.example/zone".
// The key name segment is REQUIRED. The prefix is OPTIONAL.
// The key name MUST be 63 characters or less, begin and end with an
// alphanumeric character ([a-z0-9A-Z]), and contain only dashes (-),
// underscores (_), dots (.), or alphanumerics in between, for example
// "zone".
// The key prefix MUST be 63 characters or less, begin and end with a
// lower-case alphanumeric character ([a-z0-9]), contain only
// dashes (-), dots (.), or lower-case alphanumerics in between, and
// follow domain name notation format
// (https://tools.ietf.org/html/rfc1035#section-2.3.1).
// The key prefix SHOULD include the plugin's host company name and/or
// the plugin name, to minimize the possibility of collisions with keys
// from other plugins.
// If a key prefix is specified, it MUST be identical across all
// topology keys returned by the SP (across all RPCs).
// Keys MUST be case-insensitive. Meaning the keys "Zone" and "zone"
// MUST not both exist.
// Each value (topological segment) MUST contain 1 or more strings.
// Each string MUST be 63 characters or less and begin and end with an
// alphanumeric character with '-', '_', '.', or alphanumerics in
// between.
type Topology struct {
	Segments map[string]string `json:",omitempty"`
}

// CapacityRange describes the minimum and maximum capacity a volume should be
// created with
type CapacityRange struct {
	// RequiredBytes specifies that a volume must be at least this big. The
	// value of 0 indicates an unspecified minimum.
	RequiredBytes int64

	// LimitBytes specifies that a volume must not be bigger than this. The
	// value of 0 indicates an unspecified maximum
	LimitBytes int64
}

// Secret represents a Swarm Secret value that must be passed to the CSI
// storage plugin when operating on this Volume. It represents one key-value
// pair of possibly many.
type Secret struct {
	// Key is the name of the key of the key-value pair passed to the plugin.
	Key string

	// Secret is the swarm Secret object from which to read data. This can be a
	// Secret name or ID. The Secret data is retrieved by Swarm and used as the
	// value of the key-value pair passed to the plugin.
	Secret string
}

// PublishState represents the state of a Volume as it pertains to its
// use on a particular Node.
type PublishState string

const (
	// StatePending indicates that the volume should be published on
	// this node, but the call to ControllerPublishVolume has not been
	// successfully completed yet and the result recorded by swarmkit.
	StatePending PublishState = "pending-publish"

	// StatePublished means the volume is published successfully to the node.
	StatePublished PublishState = "published"

	// StatePendingNodeUnpublish indicates that the Volume should be
	// unpublished on the Node, and we're waiting for confirmation that it has
	// done so.  After the Node has confirmed that the Volume has been
	// unpublished, the state will move to StatePendingUnpublish.
	StatePendingNodeUnpublish PublishState = "pending-node-unpublish"

	// StatePendingUnpublish means the volume is still published to the node
	// by the controller, awaiting the operation to unpublish it.
	StatePendingUnpublish PublishState = "pending-controller-unpublish"
)

// PublishStatus represents the status of the volume as published to an
// individual node
type PublishStatus struct {
	// NodeID is the ID of the swarm node this Volume is published to.
	NodeID string `json:",omitempty"`

	// State is the publish state of the volume.
	State PublishState `json:",omitempty"`

	// PublishContext is the PublishContext returned by the CSI plugin when
	// a volume is published.
	PublishContext map[string]string `json:",omitempty"`
}

// Info contains information about the Volume as a whole as provided by
// the CSI storage plugin.
type Info struct {
	// CapacityBytes is the capacity of the volume in bytes. A value of 0
	// indicates that the capacity is unknown.
	CapacityBytes int64 `json:",omitempty"`

	// VolumeContext is the context originating from the CSI storage plugin
	// when the Volume is created.
	VolumeContext map[string]string `json:",omitempty"`

	// VolumeID is the ID of the Volume as seen by the CSI storage plugin. This
	// is distinct from the Volume's Swarm ID, which is the ID used by all of
	// the Docker Engine to refer to the Volume. If this field is blank, then
	// the Volume has not been successfully created yet.
	VolumeID string `json:",omitempty"`

	// AccessibleTopolgoy is the topology this volume is actually accessible
	// from.
	AccessibleTopology []Topology `json:",omitempty"`
}
   070701000003DE000081A4000000000000000000000001645E367C00000344000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/volume/create_options.go    package volume

// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command

// CreateOptions VolumeConfig
//
// Volume configuration
// swagger:model CreateOptions
type CreateOptions struct {

	// cluster volume spec
	ClusterVolumeSpec *ClusterVolumeSpec `json:"ClusterVolumeSpec,omitempty"`

	// Name of the volume driver to use.
	Driver string `json:"Driver,omitempty"`

	// A mapping of driver options and values. These options are
	// passed directly to the driver and are driver specific.
	//
	DriverOpts map[string]string `json:"DriverOpts,omitempty"`

	// User-defined key/value metadata.
	Labels map[string]string `json:"Labels,omitempty"`

	// The new volume's name. If not specified, Docker generates a name.
	//
	Name string `json:"Name,omitempty"`
}
070701000003DF000081A4000000000000000000000001645E367C0000012B000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/volume/deprecated.go    package volume // import "github.com/docker/docker/api/types/volume"

// VolumeCreateBody Volume configuration
//
// Deprecated: use CreateOptions
type VolumeCreateBody = CreateOptions

// VolumeListOKBody Volume list response
//
// Deprecated: use ListResponse
type VolumeListOKBody = ListResponse
 070701000003E0000081A4000000000000000000000001645E367C000001B0000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/volume/list_response.go package volume

// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command

// ListResponse VolumeListResponse
//
// Volume list response
// swagger:model ListResponse
type ListResponse struct {

	// List of volumes
	Volumes []*Volume `json:"Volumes"`

	// Warnings that occurred when fetching the list of volumes.
	//
	Warnings []string `json:"Warnings"`
}
070701000003E1000081A4000000000000000000000001645E367C000000DE000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/volume/options.go   package volume // import "github.com/docker/docker/api/types/volume"

import "github.com/docker/docker/api/types/filters"

// ListOptions holds parameters to list volumes.
type ListOptions struct {
	Filters filters.Args
}
  070701000003E2000081A4000000000000000000000001645E367C00000854000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/volume/volume.go    package volume

// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command

// Volume volume
// swagger:model Volume
type Volume struct {

	// cluster volume
	ClusterVolume *ClusterVolume `json:"ClusterVolume,omitempty"`

	// Date/Time the volume was created.
	CreatedAt string `json:"CreatedAt,omitempty"`

	// Name of the volume driver used by the volume.
	// Required: true
	Driver string `json:"Driver"`

	// User-defined key/value metadata.
	// Required: true
	Labels map[string]string `json:"Labels"`

	// Mount path of the volume on the host.
	// Required: true
	Mountpoint string `json:"Mountpoint"`

	// Name of the volume.
	// Required: true
	Name string `json:"Name"`

	// The driver specific options used when creating the volume.
	//
	// Required: true
	Options map[string]string `json:"Options"`

	// The level at which the volume exists. Either `global` for cluster-wide,
	// or `local` for machine level.
	//
	// Required: true
	Scope string `json:"Scope"`

	// Low-level details about the volume, provided by the volume driver.
	// Details are returned as a map with key/value pairs:
	// `{"key":"value","key2":"value2"}`.
	//
	// The `Status` field is optional, and is omitted if the volume driver
	// does not support this feature.
	//
	Status map[string]interface{} `json:"Status,omitempty"`

	// usage data
	UsageData *UsageData `json:"UsageData,omitempty"`
}

// UsageData Usage details about the volume. This information is used by the
// `GET /system/df` endpoint, and omitted in other endpoints.
//
// swagger:model UsageData
type UsageData struct {

	// The number of containers referencing this volume. This field
	// is set to `-1` if the reference-count is not available.
	//
	// Required: true
	RefCount int64 `json:"RefCount"`

	// Amount of disk space used by the volume (in bytes). This information
	// is only available for volumes created with the `"local"` volume
	// driver. For volumes created with other volume drivers, this field
	// is set to `-1` ("not available")
	//
	// Required: true
	Size int64 `json:"Size"`
}
070701000003E3000081A4000000000000000000000001645E367C0000010B000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/docker/docker/api/types/volume/volume_update.go package volume // import "github.com/docker/docker/api/types/volume"

// UpdateOptions is configuration to update a Volume with.
type UpdateOptions struct {
	// Spec is the ClusterVolumeSpec to update the volume to.
	Spec *ClusterVolumeSpec `json:"Spec,omitempty"`
}
 070701000003E4000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client    070701000003E5000081A4000000000000000000000001645E367C00000382000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/README.md  # Go client for the Docker Engine API

The `docker` command uses this package to communicate with the daemon. It can also be used by your own Go applications to do anything the command-line interface does – running containers, pulling images, managing swarms, etc.

For example, to list running containers (the equivalent of `docker ps`):

```go
package main

import (
	"context"
	"fmt"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/client"
)

func main() {
	cli, err := client.NewClientWithOpts(client.FromEnv)
	if err != nil {
		panic(err)
	}

	containers, err := cli.ContainerList(context.Background(), types.ContainerListOptions{})
	if err != nil {
		panic(err)
	}

	for _, container := range containers {
		fmt.Printf("%s %s\n", container.ID[:10], container.Image)
	}
}
```

[Full documentation is available on GoDoc.](https://godoc.org/github.com/docker/docker/client)
  070701000003E6000081A4000000000000000000000001645E367C0000018C000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/build_cancel.go    package client // import "github.com/docker/docker/client"

import (
	"context"
	"net/url"
)

// BuildCancel requests the daemon to cancel the ongoing build request.
func (cli *Client) BuildCancel(ctx context.Context, id string) error {
	query := url.Values{}
	query.Set("id", id)

	serverResp, err := cli.post(ctx, "/build/cancel", query, nil, nil)
	ensureReaderClosed(serverResp)
	return err
}
070701000003E7000081A4000000000000000000000001645E367C00000491000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/build_prune.go package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"fmt"
	"net/url"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/filters"
	"github.com/pkg/errors"
)

// BuildCachePrune requests the daemon to delete unused cache data
func (cli *Client) BuildCachePrune(ctx context.Context, opts types.BuildCachePruneOptions) (*types.BuildCachePruneReport, error) {
	if err := cli.NewVersionError("1.31", "build prune"); err != nil {
		return nil, err
	}

	report := types.BuildCachePruneReport{}

	query := url.Values{}
	if opts.All {
		query.Set("all", "1")
	}
	query.Set("keep-storage", fmt.Sprintf("%d", opts.KeepStorage))
	filters, err := filters.ToJSON(opts.Filters)
	if err != nil {
		return nil, errors.Wrap(err, "prune could not marshal filters option")
	}
	query.Set("filters", filters)

	serverResp, err := cli.post(ctx, "/build/prune", query, nil, nil)
	defer ensureReaderClosed(serverResp)

	if err != nil {
		return nil, err
	}

	if err := json.NewDecoder(serverResp.body).Decode(&report); err != nil {
		return nil, fmt.Errorf("Error retrieving disk usage: %v", err)
	}

	return &report, nil
}
   070701000003E8000081A4000000000000000000000001645E367C000001CA000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/checkpoint_create.go   package client // import "github.com/docker/docker/client"

import (
	"context"

	"github.com/docker/docker/api/types"
)

// CheckpointCreate creates a checkpoint from the given container with the given name
func (cli *Client) CheckpointCreate(ctx context.Context, container string, options types.CheckpointCreateOptions) error {
	resp, err := cli.post(ctx, "/containers/"+container+"/checkpoints", nil, options, nil)
	ensureReaderClosed(resp)
	return err
}
  070701000003E9000081A4000000000000000000000001645E367C00000253000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/checkpoint_delete.go   package client // import "github.com/docker/docker/client"

import (
	"context"
	"net/url"

	"github.com/docker/docker/api/types"
)

// CheckpointDelete deletes the checkpoint with the given name from the given container
func (cli *Client) CheckpointDelete(ctx context.Context, containerID string, options types.CheckpointDeleteOptions) error {
	query := url.Values{}
	if options.CheckpointDir != "" {
		query.Set("dir", options.CheckpointDir)
	}

	resp, err := cli.delete(ctx, "/containers/"+containerID+"/checkpoints/"+options.CheckpointID, query, nil)
	ensureReaderClosed(resp)
	return err
}
 070701000003EA000081A4000000000000000000000001645E367C000002F3000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/checkpoint_list.go package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"net/url"

	"github.com/docker/docker/api/types"
)

// CheckpointList returns the checkpoints of the given container in the docker host
func (cli *Client) CheckpointList(ctx context.Context, container string, options types.CheckpointListOptions) ([]types.Checkpoint, error) {
	var checkpoints []types.Checkpoint

	query := url.Values{}
	if options.CheckpointDir != "" {
		query.Set("dir", options.CheckpointDir)
	}

	resp, err := cli.get(ctx, "/containers/"+container+"/checkpoints", query, nil)
	defer ensureReaderClosed(resp)
	if err != nil {
		return checkpoints, err
	}

	err = json.NewDecoder(resp.body).Decode(&checkpoints)
	return checkpoints, err
}
 070701000003EB000081A4000000000000000000000001645E367C00002995000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/client.go  /*
Package client is a Go client for the Docker Engine API.

For more information about the Engine API, see the documentation:
https://docs.docker.com/engine/api/

# Usage

You use the library by creating a client object and calling methods on it. The
client can be created either from environment variables with NewClientWithOpts(client.FromEnv),
or configured manually with NewClient().

For example, to list running containers (the equivalent of "docker ps"):

	package main

	import (
		"context"
		"fmt"

		"github.com/docker/docker/api/types"
		"github.com/docker/docker/client"
	)

	func main() {
		cli, err := client.NewClientWithOpts(client.FromEnv)
		if err != nil {
			panic(err)
		}

		containers, err := cli.ContainerList(context.Background(), types.ContainerListOptions{})
		if err != nil {
			panic(err)
		}

		for _, container := range containers {
			fmt.Printf("%s %s\n", container.ID[:10], container.Image)
		}
	}
*/
package client // import "github.com/docker/docker/client"

import (
	"context"
	"net"
	"net/http"
	"net/url"
	"path"
	"strings"

	"github.com/docker/docker/api"
	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/versions"
	"github.com/docker/go-connections/sockets"
	"github.com/pkg/errors"
)

// ErrRedirect is the error returned by checkRedirect when the request is non-GET.
var ErrRedirect = errors.New("unexpected redirect in response")

// Client is the API client that performs all operations
// against a docker server.
type Client struct {
	// scheme sets the scheme for the client
	scheme string
	// host holds the server address to connect to
	host string
	// proto holds the client protocol i.e. unix.
	proto string
	// addr holds the client address.
	addr string
	// basePath holds the path to prepend to the requests.
	basePath string
	// client used to send and receive http requests.
	client *http.Client
	// version of the server to talk to.
	version string
	// custom http headers configured by users.
	customHTTPHeaders map[string]string
	// manualOverride is set to true when the version was set by users.
	manualOverride bool

	// negotiateVersion indicates if the client should automatically negotiate
	// the API version to use when making requests. API version negotiation is
	// performed on the first request, after which negotiated is set to "true"
	// so that subsequent requests do not re-negotiate.
	negotiateVersion bool

	// negotiated indicates that API version negotiation took place
	negotiated bool
}

// CheckRedirect specifies the policy for dealing with redirect responses:
// If the request is non-GET return ErrRedirect, otherwise use the last response.
//
// Go 1.8 changes behavior for HTTP redirects (specifically 301, 307, and 308)
// in the client. The Docker client (and by extension docker API client) can be
// made to send a request like POST /containers//start where what would normally
// be in the name section of the URL is empty. This triggers an HTTP 301 from
// the daemon.
//
// In go 1.8 this 301 will be converted to a GET request, and ends up getting
// a 404 from the daemon. This behavior change manifests in the client in that
// before, the 301 was not followed and the client did not generate an error,
// but now results in a message like Error response from daemon: page not found.
func CheckRedirect(req *http.Request, via []*http.Request) error {
	if via[0].Method == http.MethodGet {
		return http.ErrUseLastResponse
	}
	return ErrRedirect
}

// NewClientWithOpts initializes a new API client with a default HTTPClient, and
// default API host and version. It also initializes the custom HTTP headers to
// add to each request.
//
// It takes an optional list of Opt functional arguments, which are applied in
// the order they're provided, which allows modifying the defaults when creating
// the client. For example, the following initializes a client that configures
// itself with values from environment variables (client.FromEnv), and has
// automatic API version negotiation enabled (client.WithAPIVersionNegotiation()).
//
//	cli, err := client.NewClientWithOpts(
//		client.FromEnv,
//		client.WithAPIVersionNegotiation(),
//	)
func NewClientWithOpts(ops ...Opt) (*Client, error) {
	client, err := defaultHTTPClient(DefaultDockerHost)
	if err != nil {
		return nil, err
	}
	c := &Client{
		host:    DefaultDockerHost,
		version: api.DefaultVersion,
		client:  client,
		proto:   defaultProto,
		addr:    defaultAddr,
	}

	for _, op := range ops {
		if err := op(c); err != nil {
			return nil, err
		}
	}

	if c.scheme == "" {
		c.scheme = "http"

		tlsConfig := resolveTLSConfig(c.client.Transport)
		if tlsConfig != nil {
			// TODO(stevvooe): This isn't really the right way to write clients in Go.
			// `NewClient` should probably only take an `*http.Client` and work from there.
			// Unfortunately, the model of having a host-ish/url-thingy as the connection
			// string has us confusing protocol and transport layers. We continue doing
			// this to avoid breaking existing clients but this should be addressed.
			c.scheme = "https"
		}
	}

	return c, nil
}

func defaultHTTPClient(host string) (*http.Client, error) {
	hostURL, err := ParseHostURL(host)
	if err != nil {
		return nil, err
	}
	transport := &http.Transport{}
	_ = sockets.ConfigureTransport(transport, hostURL.Scheme, hostURL.Host)
	return &http.Client{
		Transport:     transport,
		CheckRedirect: CheckRedirect,
	}, nil
}

// Close the transport used by the client
func (cli *Client) Close() error {
	if t, ok := cli.client.Transport.(*http.Transport); ok {
		t.CloseIdleConnections()
	}
	return nil
}

// getAPIPath returns the versioned request path to call the api.
// It appends the query parameters to the path if they are not empty.
func (cli *Client) getAPIPath(ctx context.Context, p string, query url.Values) string {
	var apiPath string
	if cli.negotiateVersion && !cli.negotiated {
		cli.NegotiateAPIVersion(ctx)
	}
	if cli.version != "" {
		v := strings.TrimPrefix(cli.version, "v")
		apiPath = path.Join(cli.basePath, "/v"+v, p)
	} else {
		apiPath = path.Join(cli.basePath, p)
	}
	return (&url.URL{Path: apiPath, RawQuery: query.Encode()}).String()
}

// ClientVersion returns the API version used by this client.
func (cli *Client) ClientVersion() string {
	return cli.version
}

// NegotiateAPIVersion queries the API and updates the version to match the API
// version. NegotiateAPIVersion downgrades the client's API version to match the
// APIVersion if the ping version is lower than the default version. If the API
// version reported by the server is higher than the maximum version supported
// by the client, it uses the client's maximum version.
//
// If a manual override is in place, either through the "DOCKER_API_VERSION"
// (EnvOverrideAPIVersion) environment variable, or if the client is initialized
// with a fixed version (WithVersion(xx)), no negotiation is performed.
//
// If the API server's ping response does not contain an API version, or if the
// client did not get a successful ping response, it assumes it is connected with
// an old daemon that does not support API version negotiation, in which case it
// downgrades to the latest version of the API before version negotiation was
// added (1.24).
func (cli *Client) NegotiateAPIVersion(ctx context.Context) {
	if !cli.manualOverride {
		ping, _ := cli.Ping(ctx)
		cli.negotiateAPIVersionPing(ping)
	}
}

// NegotiateAPIVersionPing downgrades the client's API version to match the
// APIVersion in the ping response. If the API version in pingResponse is higher
// than the maximum version supported by the client, it uses the client's maximum
// version.
//
// If a manual override is in place, either through the "DOCKER_API_VERSION"
// (EnvOverrideAPIVersion) environment variable, or if the client is initialized
// with a fixed version (WithVersion(xx)), no negotiation is performed.
//
// If the API server's ping response does not contain an API version, we assume
// we are connected with an old daemon without API version negotiation support,
// and downgrade to the latest version of the API before version negotiation was
// added (1.24).
func (cli *Client) NegotiateAPIVersionPing(pingResponse types.Ping) {
	if !cli.manualOverride {
		cli.negotiateAPIVersionPing(pingResponse)
	}
}

// negotiateAPIVersionPing queries the API and updates the version to match the
// API version from the ping response.
func (cli *Client) negotiateAPIVersionPing(pingResponse types.Ping) {
	// default to the latest version before versioning headers existed
	if pingResponse.APIVersion == "" {
		pingResponse.APIVersion = "1.24"
	}

	// if the client is not initialized with a version, start with the latest supported version
	if cli.version == "" {
		cli.version = api.DefaultVersion
	}

	// if server version is lower than the client version, downgrade
	if versions.LessThan(pingResponse.APIVersion, cli.version) {
		cli.version = pingResponse.APIVersion
	}

	// Store the results, so that automatic API version negotiation (if enabled)
	// won't be performed on the next request.
	if cli.negotiateVersion {
		cli.negotiated = true
	}
}

// DaemonHost returns the host address used by the client
func (cli *Client) DaemonHost() string {
	return cli.host
}

// HTTPClient returns a copy of the HTTP client bound to the server
func (cli *Client) HTTPClient() *http.Client {
	c := *cli.client
	return &c
}

// ParseHostURL parses a url string, validates the string is a host url, and
// returns the parsed URL
func ParseHostURL(host string) (*url.URL, error) {
	protoAddrParts := strings.SplitN(host, "://", 2)
	if len(protoAddrParts) == 1 {
		return nil, errors.Errorf("unable to parse docker host `%s`", host)
	}

	var basePath string
	proto, addr := protoAddrParts[0], protoAddrParts[1]
	if proto == "tcp" {
		parsed, err := url.Parse("tcp://" + addr)
		if err != nil {
			return nil, err
		}
		addr = parsed.Host
		basePath = parsed.Path
	}
	return &url.URL{
		Scheme: proto,
		Host:   addr,
		Path:   basePath,
	}, nil
}

// Dialer returns a dialer for a raw stream connection, with an HTTP/1.1 header,
// that can be used for proxying the daemon connection.
//
// Used by `docker dial-stdio` (docker/cli#889).
func (cli *Client) Dialer() func(context.Context) (net.Conn, error) {
	return func(ctx context.Context) (net.Conn, error) {
		if transport, ok := cli.client.Transport.(*http.Transport); ok {
			if transport.DialContext != nil && transport.TLSClientConfig == nil {
				return transport.DialContext(ctx, cli.proto, cli.addr)
			}
		}
		return fallbackDial(cli.proto, cli.addr, resolveTLSConfig(cli.client.Transport))
	}
}
   070701000003EC000081A4000000000000000000000001645E367C000003B4000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/client_deprecated.go   package client

import "net/http"

// NewClient initializes a new API client for the given host and API version.
// It uses the given http client as transport.
// It also initializes the custom http headers to add to each request.
//
// It won't send any version information if the version number is empty. It is
// highly recommended that you set a version or your client may break if the
// server is upgraded.
// Deprecated: use NewClientWithOpts
func NewClient(host string, version string, client *http.Client, httpHeaders map[string]string) (*Client, error) {
	return NewClientWithOpts(WithHost(host), WithVersion(version), WithHTTPClient(client), WithHTTPHeaders(httpHeaders))
}

// NewEnvClient initializes a new API client based on environment variables.
// See FromEnv for a list of support environment variables.
//
// Deprecated: use NewClientWithOpts(FromEnv)
func NewEnvClient() (*Client, error) {
	return NewClientWithOpts(FromEnv)
}
070701000003ED000081A4000000000000000000000001645E367C000001E9000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/client_unix.go //go:build linux || freebsd || openbsd || netbsd || darwin || solaris || illumos || dragonfly
// +build linux freebsd openbsd netbsd darwin solaris illumos dragonfly

package client // import "github.com/docker/docker/client"

// DefaultDockerHost defines OS-specific default host if the DOCKER_HOST
// (EnvOverrideHost) environment variable is unset or empty.
const DefaultDockerHost = "unix:///var/run/docker.sock"

const defaultProto = "unix"
const defaultAddr = "/var/run/docker.sock"
   070701000003EE000081A4000000000000000000000001645E367C00000148000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/client_windows.go  package client // import "github.com/docker/docker/client"

// DefaultDockerHost defines OS-specific default host if the DOCKER_HOST
// (EnvOverrideHost) environment variable is unset or empty.
const DefaultDockerHost = "npipe:////./pipe/docker_engine"

const defaultProto = "npipe"
const defaultAddr = "//./pipe/docker_engine"
070701000003EF000081A4000000000000000000000001645E367C000002B3000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/config_create.go   package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/swarm"
)

// ConfigCreate creates a new config.
func (cli *Client) ConfigCreate(ctx context.Context, config swarm.ConfigSpec) (types.ConfigCreateResponse, error) {
	var response types.ConfigCreateResponse
	if err := cli.NewVersionError("1.30", "config create"); err != nil {
		return response, err
	}
	resp, err := cli.post(ctx, "/configs/create", nil, config, nil)
	defer ensureReaderClosed(resp)
	if err != nil {
		return response, err
	}

	err = json.NewDecoder(resp.body).Decode(&response)
	return response, err
}
 070701000003F0000081A4000000000000000000000001645E367C0000037E000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/config_inspect.go  package client // import "github.com/docker/docker/client"

import (
	"bytes"
	"context"
	"encoding/json"
	"io"

	"github.com/docker/docker/api/types/swarm"
)

// ConfigInspectWithRaw returns the config information with raw data
func (cli *Client) ConfigInspectWithRaw(ctx context.Context, id string) (swarm.Config, []byte, error) {
	if id == "" {
		return swarm.Config{}, nil, objectNotFoundError{object: "config", id: id}
	}
	if err := cli.NewVersionError("1.30", "config inspect"); err != nil {
		return swarm.Config{}, nil, err
	}
	resp, err := cli.get(ctx, "/configs/"+id, nil, nil)
	defer ensureReaderClosed(resp)
	if err != nil {
		return swarm.Config{}, nil, err
	}

	body, err := io.ReadAll(resp.body)
	if err != nil {
		return swarm.Config{}, nil, err
	}

	var config swarm.Config
	rdr := bytes.NewReader(body)
	err = json.NewDecoder(rdr).Decode(&config)

	return config, body, err
}
  070701000003F1000081A4000000000000000000000001645E367C00000380000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/config_list.go package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"net/url"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/filters"
	"github.com/docker/docker/api/types/swarm"
)

// ConfigList returns the list of configs.
func (cli *Client) ConfigList(ctx context.Context, options types.ConfigListOptions) ([]swarm.Config, error) {
	if err := cli.NewVersionError("1.30", "config list"); err != nil {
		return nil, err
	}
	query := url.Values{}

	if options.Filters.Len() > 0 {
		filterJSON, err := filters.ToJSON(options.Filters)
		if err != nil {
			return nil, err
		}

		query.Set("filters", filterJSON)
	}

	resp, err := cli.get(ctx, "/configs", query, nil)
	defer ensureReaderClosed(resp)
	if err != nil {
		return nil, err
	}

	var configs []swarm.Config
	err = json.NewDecoder(resp.body).Decode(&configs)
	return configs, err
}
070701000003F2000081A4000000000000000000000001645E367C00000174000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/config_remove.go   package client // import "github.com/docker/docker/client"

import "context"

// ConfigRemove removes a config.
func (cli *Client) ConfigRemove(ctx context.Context, id string) error {
	if err := cli.NewVersionError("1.30", "config remove"); err != nil {
		return err
	}
	resp, err := cli.delete(ctx, "/configs/"+id, nil, nil)
	defer ensureReaderClosed(resp)
	return err
}
070701000003F3000081A4000000000000000000000001645E367C00000236000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/config_update.go   package client // import "github.com/docker/docker/client"

import (
	"context"
	"net/url"

	"github.com/docker/docker/api/types/swarm"
)

// ConfigUpdate attempts to update a config
func (cli *Client) ConfigUpdate(ctx context.Context, id string, version swarm.Version, config swarm.ConfigSpec) error {
	if err := cli.NewVersionError("1.30", "config update"); err != nil {
		return err
	}
	query := url.Values{}
	query.Set("version", version.String())
	resp, err := cli.post(ctx, "/configs/"+id+"/update", query, config, nil)
	ensureReaderClosed(resp)
	return err
}
  070701000003F4000081A4000000000000000000000001645E367C00000713000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/container_attach.go    package client // import "github.com/docker/docker/client"

import (
	"context"
	"net/url"

	"github.com/docker/docker/api/types"
)

// ContainerAttach attaches a connection to a container in the server.
// It returns a types.HijackedConnection with the hijacked connection
// and the a reader to get output. It's up to the called to close
// the hijacked connection by calling types.HijackedResponse.Close.
//
// The stream format on the response will be in one of two formats:
//
// If the container is using a TTY, there is only a single stream (stdout), and
// data is copied directly from the container output stream, no extra
// multiplexing or headers.
//
// If the container is *not* using a TTY, streams for stdout and stderr are
// multiplexed.
// The format of the multiplexed stream is as follows:
//
//	[8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}[]byte{OUTPUT}
//
// STREAM_TYPE can be 1 for stdout and 2 for stderr
//
// SIZE1, SIZE2, SIZE3, and SIZE4 are four bytes of uint32 encoded as big endian.
// This is the size of OUTPUT.
//
// You can use github.com/docker/docker/pkg/stdcopy.StdCopy to demultiplex this
// stream.
func (cli *Client) ContainerAttach(ctx context.Context, container string, options types.ContainerAttachOptions) (types.HijackedResponse, error) {
	query := url.Values{}
	if options.Stream {
		query.Set("stream", "1")
	}
	if options.Stdin {
		query.Set("stdin", "1")
	}
	if options.Stdout {
		query.Set("stdout", "1")
	}
	if options.Stderr {
		query.Set("stderr", "1")
	}
	if options.DetachKeys != "" {
		query.Set("detachKeys", options.DetachKeys)
	}
	if options.Logs {
		query.Set("logs", "1")
	}

	headers := map[string][]string{
		"Content-Type": {"text/plain"},
	}
	return cli.postHijacked(ctx, "/containers/"+container+"/attach", query, nil, headers)
}
 070701000003F5000081A4000000000000000000000001645E367C000005D0000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/container_commit.go    package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"errors"
	"net/url"

	"github.com/docker/distribution/reference"
	"github.com/docker/docker/api/types"
)

// ContainerCommit applies changes to a container and creates a new tagged image.
func (cli *Client) ContainerCommit(ctx context.Context, container string, options types.ContainerCommitOptions) (types.IDResponse, error) {
	var repository, tag string
	if options.Reference != "" {
		ref, err := reference.ParseNormalizedNamed(options.Reference)
		if err != nil {
			return types.IDResponse{}, err
		}

		if _, isCanonical := ref.(reference.Canonical); isCanonical {
			return types.IDResponse{}, errors.New("refusing to create a tag with a digest reference")
		}
		ref = reference.TagNameOnly(ref)

		if tagged, ok := ref.(reference.Tagged); ok {
			tag = tagged.Tag()
		}
		repository = reference.FamiliarName(ref)
	}

	query := url.Values{}
	query.Set("container", container)
	query.Set("repo", repository)
	query.Set("tag", tag)
	query.Set("comment", options.Comment)
	query.Set("author", options.Author)
	for _, change := range options.Changes {
		query.Add("changes", change)
	}
	if !options.Pause {
		query.Set("pause", "0")
	}

	var response types.IDResponse
	resp, err := cli.post(ctx, "/commit", query, options.Config, nil)
	defer ensureReaderClosed(resp)
	if err != nil {
		return response, err
	}

	err = json.NewDecoder(resp.body).Decode(&response)
	return response, err
}
070701000003F6000081A4000000000000000000000001645E367C00000CFE000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/container_copy.go  package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/base64"
	"encoding/json"
	"fmt"
	"io"
	"net/http"
	"net/url"
	"path/filepath"
	"strings"

	"github.com/docker/docker/api/types"
)

// ContainerStatPath returns stat information about a path inside the container filesystem.
func (cli *Client) ContainerStatPath(ctx context.Context, containerID, path string) (types.ContainerPathStat, error) {
	query := url.Values{}
	query.Set("path", filepath.ToSlash(path)) // Normalize the paths used in the API.

	urlStr := "/containers/" + containerID + "/archive"
	response, err := cli.head(ctx, urlStr, query, nil)
	defer ensureReaderClosed(response)
	if err != nil {
		return types.ContainerPathStat{}, err
	}
	return getContainerPathStatFromHeader(response.header)
}

// CopyToContainer copies content into the container filesystem.
// Note that `content` must be a Reader for a TAR archive
func (cli *Client) CopyToContainer(ctx context.Context, containerID, dstPath string, content io.Reader, options types.CopyToContainerOptions) error {
	query := url.Values{}
	query.Set("path", filepath.ToSlash(dstPath)) // Normalize the paths used in the API.
	// Do not allow for an existing directory to be overwritten by a non-directory and vice versa.
	if !options.AllowOverwriteDirWithFile {
		query.Set("noOverwriteDirNonDir", "true")
	}

	if options.CopyUIDGID {
		query.Set("copyUIDGID", "true")
	}

	apiPath := "/containers/" + containerID + "/archive"

	response, err := cli.putRaw(ctx, apiPath, query, content, nil)
	defer ensureReaderClosed(response)
	if err != nil {
		return err
	}

	return nil
}

// CopyFromContainer gets the content from the container and returns it as a Reader
// for a TAR archive to manipulate it in the host. It's up to the caller to close the reader.
func (cli *Client) CopyFromContainer(ctx context.Context, containerID, srcPath string) (io.ReadCloser, types.ContainerPathStat, error) {
	query := make(url.Values, 1)
	query.Set("path", filepath.ToSlash(srcPath)) // Normalize the paths used in the API.

	apiPath := "/containers/" + containerID + "/archive"
	response, err := cli.get(ctx, apiPath, query, nil)
	if err != nil {
		return nil, types.ContainerPathStat{}, err
	}

	// In order to get the copy behavior right, we need to know information
	// about both the source and the destination. The response headers include
	// stat info about the source that we can use in deciding exactly how to
	// copy it locally. Along with the stat info about the local destination,
	// we have everything we need to handle the multiple possibilities there
	// can be when copying a file/dir from one location to another file/dir.
	stat, err := getContainerPathStatFromHeader(response.header)
	if err != nil {
		return nil, stat, fmt.Errorf("unable to get resource stat from response: %s", err)
	}
	return response.body, stat, err
}

func getContainerPathStatFromHeader(header http.Header) (types.ContainerPathStat, error) {
	var stat types.ContainerPathStat

	encodedStat := header.Get("X-Docker-Container-Path-Stat")
	statDecoder := base64.NewDecoder(base64.StdEncoding, strings.NewReader(encodedStat))

	err := json.NewDecoder(statDecoder).Decode(&stat)
	if err != nil {
		err = fmt.Errorf("unable to decode container path stat header: %s", err)
	}

	return stat, err
}
  070701000003F7000081A4000000000000000000000001645E367C00000B02000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/container_create.go    package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"net/url"
	"path"

	"github.com/docker/docker/api/types/container"
	"github.com/docker/docker/api/types/network"
	"github.com/docker/docker/api/types/versions"
	specs "github.com/opencontainers/image-spec/specs-go/v1"
)

type configWrapper struct {
	*container.Config
	HostConfig       *container.HostConfig
	NetworkingConfig *network.NetworkingConfig
}

// ContainerCreate creates a new container based on the given configuration.
// It can be associated with a name, but it's not mandatory.
func (cli *Client) ContainerCreate(ctx context.Context, config *container.Config, hostConfig *container.HostConfig, networkingConfig *network.NetworkingConfig, platform *specs.Platform, containerName string) (container.CreateResponse, error) {
	var response container.CreateResponse

	if err := cli.NewVersionError("1.25", "stop timeout"); config != nil && config.StopTimeout != nil && err != nil {
		return response, err
	}
	if err := cli.NewVersionError("1.41", "specify container image platform"); platform != nil && err != nil {
		return response, err
	}

	if hostConfig != nil {
		if versions.LessThan(cli.ClientVersion(), "1.25") {
			// When using API 1.24 and under, the client is responsible for removing the container
			hostConfig.AutoRemove = false
		}
		if versions.GreaterThanOrEqualTo(cli.ClientVersion(), "1.42") || versions.LessThan(cli.ClientVersion(), "1.40") {
			// KernelMemory was added in API 1.40, and deprecated in API 1.42
			hostConfig.KernelMemory = 0
		}
		if platform != nil && platform.OS == "linux" && versions.LessThan(cli.ClientVersion(), "1.42") {
			// When using API under 1.42, the Linux daemon doesn't respect the ConsoleSize
			hostConfig.ConsoleSize = [2]uint{0, 0}
		}
	}

	query := url.Values{}
	if p := formatPlatform(platform); p != "" {
		query.Set("platform", p)
	}

	if containerName != "" {
		query.Set("name", containerName)
	}

	body := configWrapper{
		Config:           config,
		HostConfig:       hostConfig,
		NetworkingConfig: networkingConfig,
	}

	serverResp, err := cli.post(ctx, "/containers/create", query, body, nil)
	defer ensureReaderClosed(serverResp)
	if err != nil {
		return response, err
	}

	err = json.NewDecoder(serverResp.body).Decode(&response)
	return response, err
}

// formatPlatform returns a formatted string representing platform (e.g. linux/arm/v7).
//
// Similar to containerd's platforms.Format(), but does allow components to be
// omitted (e.g. pass "architecture" only, without "os":
// https://github.com/containerd/containerd/blob/v1.5.2/platforms/platforms.go#L243-L263
func formatPlatform(platform *specs.Platform) string {
	if platform == nil {
		return ""
	}
	return path.Join(platform.OS, platform.Architecture, platform.Variant)
}
  070701000003F8000081A4000000000000000000000001645E367C000002A2000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/container_diff.go  package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"net/url"

	"github.com/docker/docker/api/types/container"
)

// ContainerDiff shows differences in a container filesystem since it was started.
func (cli *Client) ContainerDiff(ctx context.Context, containerID string) ([]container.ContainerChangeResponseItem, error) {
	var changes []container.ContainerChangeResponseItem

	serverResp, err := cli.get(ctx, "/containers/"+containerID+"/changes", url.Values{}, nil)
	defer ensureReaderClosed(serverResp)
	if err != nil {
		return changes, err
	}

	err = json.NewDecoder(serverResp.body).Decode(&changes)
	return changes, err
}
  070701000003F9000081A4000000000000000000000001645E367C00000939000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/container_exec.go  package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/versions"
)

// ContainerExecCreate creates a new exec configuration to run an exec process.
func (cli *Client) ContainerExecCreate(ctx context.Context, container string, config types.ExecConfig) (types.IDResponse, error) {
	var response types.IDResponse

	if err := cli.NewVersionError("1.25", "env"); len(config.Env) != 0 && err != nil {
		return response, err
	}
	if versions.LessThan(cli.ClientVersion(), "1.42") {
		config.ConsoleSize = nil
	}

	resp, err := cli.post(ctx, "/containers/"+container+"/exec", nil, config, nil)
	defer ensureReaderClosed(resp)
	if err != nil {
		return response, err
	}
	err = json.NewDecoder(resp.body).Decode(&response)
	return response, err
}

// ContainerExecStart starts an exec process already created in the docker host.
func (cli *Client) ContainerExecStart(ctx context.Context, execID string, config types.ExecStartCheck) error {
	if versions.LessThan(cli.ClientVersion(), "1.42") {
		config.ConsoleSize = nil
	}
	resp, err := cli.post(ctx, "/exec/"+execID+"/start", nil, config, nil)
	ensureReaderClosed(resp)
	return err
}

// ContainerExecAttach attaches a connection to an exec process in the server.
// It returns a types.HijackedConnection with the hijacked connection
// and the a reader to get output. It's up to the called to close
// the hijacked connection by calling types.HijackedResponse.Close.
func (cli *Client) ContainerExecAttach(ctx context.Context, execID string, config types.ExecStartCheck) (types.HijackedResponse, error) {
	if versions.LessThan(cli.ClientVersion(), "1.42") {
		config.ConsoleSize = nil
	}
	headers := map[string][]string{
		"Content-Type": {"application/json"},
	}
	return cli.postHijacked(ctx, "/exec/"+execID+"/start", nil, config, headers)
}

// ContainerExecInspect returns information about a specific exec process on the docker host.
func (cli *Client) ContainerExecInspect(ctx context.Context, execID string) (types.ContainerExecInspect, error) {
	var response types.ContainerExecInspect
	resp, err := cli.get(ctx, "/exec/"+execID+"/json", nil, nil)
	if err != nil {
		return response, err
	}

	err = json.NewDecoder(resp.body).Decode(&response)
	ensureReaderClosed(resp)
	return response, err
}
   070701000003FA000081A4000000000000000000000001645E367C000001FD000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/container_export.go    package client // import "github.com/docker/docker/client"

import (
	"context"
	"io"
	"net/url"
)

// ContainerExport retrieves the raw contents of a container
// and returns them as an io.ReadCloser. It's up to the caller
// to close the stream.
func (cli *Client) ContainerExport(ctx context.Context, containerID string) (io.ReadCloser, error) {
	serverResp, err := cli.get(ctx, "/containers/"+containerID+"/export", url.Values{}, nil)
	if err != nil {
		return nil, err
	}

	return serverResp.body, nil
}
   070701000003FB000081A4000000000000000000000001645E367C00000626000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/container_inspect.go   package client // import "github.com/docker/docker/client"

import (
	"bytes"
	"context"
	"encoding/json"
	"io"
	"net/url"

	"github.com/docker/docker/api/types"
)

// ContainerInspect returns the container information.
func (cli *Client) ContainerInspect(ctx context.Context, containerID string) (types.ContainerJSON, error) {
	if containerID == "" {
		return types.ContainerJSON{}, objectNotFoundError{object: "container", id: containerID}
	}
	serverResp, err := cli.get(ctx, "/containers/"+containerID+"/json", nil, nil)
	defer ensureReaderClosed(serverResp)
	if err != nil {
		return types.ContainerJSON{}, err
	}

	var response types.ContainerJSON
	err = json.NewDecoder(serverResp.body).Decode(&response)
	return response, err
}

// ContainerInspectWithRaw returns the container information and its raw representation.
func (cli *Client) ContainerInspectWithRaw(ctx context.Context, containerID string, getSize bool) (types.ContainerJSON, []byte, error) {
	if containerID == "" {
		return types.ContainerJSON{}, nil, objectNotFoundError{object: "container", id: containerID}
	}
	query := url.Values{}
	if getSize {
		query.Set("size", "1")
	}
	serverResp, err := cli.get(ctx, "/containers/"+containerID+"/json", query, nil)
	defer ensureReaderClosed(serverResp)
	if err != nil {
		return types.ContainerJSON{}, nil, err
	}

	body, err := io.ReadAll(serverResp.body)
	if err != nil {
		return types.ContainerJSON{}, nil, err
	}

	var response types.ContainerJSON
	rdr := bytes.NewReader(body)
	err = json.NewDecoder(rdr).Decode(&response)
	return response, body, err
}
  070701000003FC000081A4000000000000000000000001645E367C000001E7000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/container_kill.go  package client // import "github.com/docker/docker/client"

import (
	"context"
	"net/url"
)

// ContainerKill terminates the container process but does not remove the container from the docker host.
func (cli *Client) ContainerKill(ctx context.Context, containerID, signal string) error {
	query := url.Values{}
	if signal != "" {
		query.Set("signal", signal)
	}

	resp, err := cli.post(ctx, "/containers/"+containerID+"/kill", query, nil, nil)
	ensureReaderClosed(resp)
	return err
}
 070701000003FD000081A4000000000000000000000001645E367C000004BE000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/container_list.go  package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"net/url"
	"strconv"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/filters"
)

// ContainerList returns the list of containers in the docker host.
func (cli *Client) ContainerList(ctx context.Context, options types.ContainerListOptions) ([]types.Container, error) {
	query := url.Values{}

	if options.All {
		query.Set("all", "1")
	}

	if options.Limit > 0 {
		query.Set("limit", strconv.Itoa(options.Limit))
	}

	if options.Since != "" {
		query.Set("since", options.Since)
	}

	if options.Before != "" {
		query.Set("before", options.Before)
	}

	if options.Size {
		query.Set("size", "1")
	}

	if options.Filters.Len() > 0 {
		//nolint:staticcheck // ignore SA1019 for old code
		filterJSON, err := filters.ToParamWithVersion(cli.version, options.Filters)

		if err != nil {
			return nil, err
		}

		query.Set("filters", filterJSON)
	}

	resp, err := cli.get(ctx, "/containers/json", query, nil)
	defer ensureReaderClosed(resp)
	if err != nil {
		return nil, err
	}

	var containers []types.Container
	err = json.NewDecoder(resp.body).Decode(&containers)
	return containers, err
}
  070701000003FE000081A4000000000000000000000001645E367C00000835000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/container_logs.go  package client // import "github.com/docker/docker/client"

import (
	"context"
	"io"
	"net/url"
	"time"

	"github.com/docker/docker/api/types"
	timetypes "github.com/docker/docker/api/types/time"
	"github.com/pkg/errors"
)

// ContainerLogs returns the logs generated by a container in an io.ReadCloser.
// It's up to the caller to close the stream.
//
// The stream format on the response will be in one of two formats:
//
// If the container is using a TTY, there is only a single stream (stdout), and
// data is copied directly from the container output stream, no extra
// multiplexing or headers.
//
// If the container is *not* using a TTY, streams for stdout and stderr are
// multiplexed.
// The format of the multiplexed stream is as follows:
//
//	[8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}[]byte{OUTPUT}
//
// STREAM_TYPE can be 1 for stdout and 2 for stderr
//
// SIZE1, SIZE2, SIZE3, and SIZE4 are four bytes of uint32 encoded as big endian.
// This is the size of OUTPUT.
//
// You can use github.com/docker/docker/pkg/stdcopy.StdCopy to demultiplex this
// stream.
func (cli *Client) ContainerLogs(ctx context.Context, container string, options types.ContainerLogsOptions) (io.ReadCloser, error) {
	query := url.Values{}
	if options.ShowStdout {
		query.Set("stdout", "1")
	}

	if options.ShowStderr {
		query.Set("stderr", "1")
	}

	if options.Since != "" {
		ts, err := timetypes.GetTimestamp(options.Since, time.Now())
		if err != nil {
			return nil, errors.Wrap(err, `invalid value for "since"`)
		}
		query.Set("since", ts)
	}

	if options.Until != "" {
		ts, err := timetypes.GetTimestamp(options.Until, time.Now())
		if err != nil {
			return nil, errors.Wrap(err, `invalid value for "until"`)
		}
		query.Set("until", ts)
	}

	if options.Timestamps {
		query.Set("timestamps", "1")
	}

	if options.Details {
		query.Set("details", "1")
	}

	if options.Follow {
		query.Set("follow", "1")
	}
	query.Set("tail", options.Tail)

	resp, err := cli.get(ctx, "/containers/"+container+"/logs", query, nil)
	if err != nil {
		return nil, err
	}
	return resp.body, nil
}
   070701000003FF000081A4000000000000000000000001645E367C00000170000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/container_pause.go package client // import "github.com/docker/docker/client"

import "context"

// ContainerPause pauses the main process of a given container without terminating it.
func (cli *Client) ContainerPause(ctx context.Context, containerID string) error {
	resp, err := cli.post(ctx, "/containers/"+containerID+"/pause", nil, nil, nil)
	ensureReaderClosed(resp)
	return err
}
07070100000400000081A4000000000000000000000001645E367C00000398000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/container_prune.go package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"fmt"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/filters"
)

// ContainersPrune requests the daemon to delete unused data
func (cli *Client) ContainersPrune(ctx context.Context, pruneFilters filters.Args) (types.ContainersPruneReport, error) {
	var report types.ContainersPruneReport

	if err := cli.NewVersionError("1.25", "container prune"); err != nil {
		return report, err
	}

	query, err := getFiltersQuery(pruneFilters)
	if err != nil {
		return report, err
	}

	serverResp, err := cli.post(ctx, "/containers/prune", query, nil, nil)
	defer ensureReaderClosed(serverResp)
	if err != nil {
		return report, err
	}

	if err := json.NewDecoder(serverResp.body).Decode(&report); err != nil {
		return report, fmt.Errorf("Error retrieving disk usage: %v", err)
	}

	return report, nil
}
07070100000401000081A4000000000000000000000001645E367C0000026F000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/container_remove.go    package client // import "github.com/docker/docker/client"

import (
	"context"
	"net/url"

	"github.com/docker/docker/api/types"
)

// ContainerRemove kills and removes a container from the docker host.
func (cli *Client) ContainerRemove(ctx context.Context, containerID string, options types.ContainerRemoveOptions) error {
	query := url.Values{}
	if options.RemoveVolumes {
		query.Set("v", "1")
	}
	if options.RemoveLinks {
		query.Set("link", "1")
	}

	if options.Force {
		query.Set("force", "1")
	}

	resp, err := cli.delete(ctx, "/containers/"+containerID, query, nil)
	defer ensureReaderClosed(resp)
	return err
}
 07070100000402000081A4000000000000000000000001645E367C000001B5000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/container_rename.go    package client // import "github.com/docker/docker/client"

import (
	"context"
	"net/url"
)

// ContainerRename changes the name of a given container.
func (cli *Client) ContainerRename(ctx context.Context, containerID, newContainerName string) error {
	query := url.Values{}
	query.Set("name", newContainerName)
	resp, err := cli.post(ctx, "/containers/"+containerID+"/rename", query, nil, nil)
	ensureReaderClosed(resp)
	return err
}
   07070100000403000081A4000000000000000000000001645E367C000003E7000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/container_resize.go    package client // import "github.com/docker/docker/client"

import (
	"context"
	"net/url"
	"strconv"

	"github.com/docker/docker/api/types"
)

// ContainerResize changes the size of the tty for a container.
func (cli *Client) ContainerResize(ctx context.Context, containerID string, options types.ResizeOptions) error {
	return cli.resize(ctx, "/containers/"+containerID, options.Height, options.Width)
}

// ContainerExecResize changes the size of the tty for an exec process running inside a container.
func (cli *Client) ContainerExecResize(ctx context.Context, execID string, options types.ResizeOptions) error {
	return cli.resize(ctx, "/exec/"+execID, options.Height, options.Width)
}

func (cli *Client) resize(ctx context.Context, basePath string, height, width uint) error {
	query := url.Values{}
	query.Set("h", strconv.Itoa(int(height)))
	query.Set("w", strconv.Itoa(int(width)))

	resp, err := cli.post(ctx, basePath+"/resize", query, nil, nil)
	ensureReaderClosed(resp)
	return err
}
 07070100000404000081A4000000000000000000000001645E367C00000345000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/container_restart.go   package client // import "github.com/docker/docker/client"

import (
	"context"
	"net/url"
	"strconv"

	"github.com/docker/docker/api/types/container"
	"github.com/docker/docker/api/types/versions"
)

// ContainerRestart stops and starts a container again.
// It makes the daemon wait for the container to be up again for
// a specific amount of time, given the timeout.
func (cli *Client) ContainerRestart(ctx context.Context, containerID string, options container.StopOptions) error {
	query := url.Values{}
	if options.Timeout != nil {
		query.Set("t", strconv.Itoa(*options.Timeout))
	}
	if options.Signal != "" && versions.GreaterThanOrEqualTo(cli.version, "1.42") {
		query.Set("signal", options.Signal)
	}
	resp, err := cli.post(ctx, "/containers/"+containerID+"/restart", query, nil, nil)
	ensureReaderClosed(resp)
	return err
}
   07070100000405000081A4000000000000000000000001645E367C00000292000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/container_start.go package client // import "github.com/docker/docker/client"

import (
	"context"
	"net/url"

	"github.com/docker/docker/api/types"
)

// ContainerStart sends a request to the docker daemon to start a container.
func (cli *Client) ContainerStart(ctx context.Context, containerID string, options types.ContainerStartOptions) error {
	query := url.Values{}
	if len(options.CheckpointID) != 0 {
		query.Set("checkpoint", options.CheckpointID)
	}
	if len(options.CheckpointDir) != 0 {
		query.Set("checkpoint-dir", options.CheckpointDir)
	}

	resp, err := cli.post(ctx, "/containers/"+containerID+"/start", query, nil, nil)
	ensureReaderClosed(resp)
	return err
}
  07070100000406000081A4000000000000000000000001645E367C00000533000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/container_stats.go package client // import "github.com/docker/docker/client"

import (
	"context"
	"net/url"

	"github.com/docker/docker/api/types"
)

// ContainerStats returns near realtime stats for a given container.
// It's up to the caller to close the io.ReadCloser returned.
func (cli *Client) ContainerStats(ctx context.Context, containerID string, stream bool) (types.ContainerStats, error) {
	query := url.Values{}
	query.Set("stream", "0")
	if stream {
		query.Set("stream", "1")
	}

	resp, err := cli.get(ctx, "/containers/"+containerID+"/stats", query, nil)
	if err != nil {
		return types.ContainerStats{}, err
	}

	osType := getDockerOS(resp.header.Get("Server"))
	return types.ContainerStats{Body: resp.body, OSType: osType}, err
}

// ContainerStatsOneShot gets a single stat entry from a container.
// It differs from `ContainerStats` in that the API should not wait to prime the stats
func (cli *Client) ContainerStatsOneShot(ctx context.Context, containerID string) (types.ContainerStats, error) {
	query := url.Values{}
	query.Set("stream", "0")
	query.Set("one-shot", "1")

	resp, err := cli.get(ctx, "/containers/"+containerID+"/stats", query, nil)
	if err != nil {
		return types.ContainerStats{}, err
	}

	osType := getDockerOS(resp.header.Get("Server"))
	return types.ContainerStats{Body: resp.body, OSType: osType}, err
}
 07070100000407000081A4000000000000000000000001645E367C00000429000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/container_stop.go  package client // import "github.com/docker/docker/client"

import (
	"context"
	"net/url"
	"strconv"

	"github.com/docker/docker/api/types/container"
	"github.com/docker/docker/api/types/versions"
)

// ContainerStop stops a container. In case the container fails to stop
// gracefully within a time frame specified by the timeout argument,
// it is forcefully terminated (killed).
//
// If the timeout is nil, the container's StopTimeout value is used, if set,
// otherwise the engine default. A negative timeout value can be specified,
// meaning no timeout, i.e. no forceful termination is performed.
func (cli *Client) ContainerStop(ctx context.Context, containerID string, options container.StopOptions) error {
	query := url.Values{}
	if options.Timeout != nil {
		query.Set("t", strconv.Itoa(*options.Timeout))
	}
	if options.Signal != "" && versions.GreaterThanOrEqualTo(cli.version, "1.42") {
		query.Set("signal", options.Signal)
	}
	resp, err := cli.post(ctx, "/containers/"+containerID+"/stop", query, nil, nil)
	ensureReaderClosed(resp)
	return err
}
   07070100000408000081A4000000000000000000000001645E367C000002E9000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/container_top.go   package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"net/url"
	"strings"

	"github.com/docker/docker/api/types/container"
)

// ContainerTop shows process information from within a container.
func (cli *Client) ContainerTop(ctx context.Context, containerID string, arguments []string) (container.ContainerTopOKBody, error) {
	var response container.ContainerTopOKBody
	query := url.Values{}
	if len(arguments) > 0 {
		query.Set("ps_args", strings.Join(arguments, " "))
	}

	resp, err := cli.get(ctx, "/containers/"+containerID+"/top", query, nil)
	defer ensureReaderClosed(resp)
	if err != nil {
		return response, err
	}

	err = json.NewDecoder(resp.body).Decode(&response)
	return response, err
}
   07070100000409000081A4000000000000000000000001645E367C00000162000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/container_unpause.go   package client // import "github.com/docker/docker/client"

import "context"

// ContainerUnpause resumes the process execution within a container
func (cli *Client) ContainerUnpause(ctx context.Context, containerID string) error {
	resp, err := cli.post(ctx, "/containers/"+containerID+"/unpause", nil, nil, nil)
	ensureReaderClosed(resp)
	return err
}
  0707010000040A000081A4000000000000000000000001645E367C0000029C000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/container_update.go    package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"

	"github.com/docker/docker/api/types/container"
)

// ContainerUpdate updates the resources of a container.
func (cli *Client) ContainerUpdate(ctx context.Context, containerID string, updateConfig container.UpdateConfig) (container.ContainerUpdateOKBody, error) {
	var response container.ContainerUpdateOKBody
	serverResp, err := cli.post(ctx, "/containers/"+containerID+"/update", nil, updateConfig, nil)
	defer ensureReaderClosed(serverResp)
	if err != nil {
		return response, err
	}

	err = json.NewDecoder(serverResp.body).Decode(&response)
	return response, err
}
0707010000040B000081A4000000000000000000000001645E367C00000CCD000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/container_wait.go  package client // import "github.com/docker/docker/client"

import (
	"bytes"
	"context"
	"encoding/json"
	"errors"
	"io"
	"net/url"

	"github.com/docker/docker/api/types/container"
	"github.com/docker/docker/api/types/versions"
)

const containerWaitErrorMsgLimit = 2 * 1024 /* Max: 2KiB */

// ContainerWait waits until the specified container is in a certain state
// indicated by the given condition, either "not-running" (default),
// "next-exit", or "removed".
//
// If this client's API version is before 1.30, condition is ignored and
// ContainerWait will return immediately with the two channels, as the server
// will wait as if the condition were "not-running".
//
// If this client's API version is at least 1.30, ContainerWait blocks until
// the request has been acknowledged by the server (with a response header),
// then returns two channels on which the caller can wait for the exit status
// of the container or an error if there was a problem either beginning the
// wait request or in getting the response. This allows the caller to
// synchronize ContainerWait with other calls, such as specifying a
// "next-exit" condition before issuing a ContainerStart request.
func (cli *Client) ContainerWait(ctx context.Context, containerID string, condition container.WaitCondition) (<-chan container.WaitResponse, <-chan error) {
	if versions.LessThan(cli.ClientVersion(), "1.30") {
		return cli.legacyContainerWait(ctx, containerID)
	}

	resultC := make(chan container.WaitResponse)
	errC := make(chan error, 1)

	query := url.Values{}
	if condition != "" {
		query.Set("condition", string(condition))
	}

	resp, err := cli.post(ctx, "/containers/"+containerID+"/wait", query, nil, nil)
	if err != nil {
		defer ensureReaderClosed(resp)
		errC <- err
		return resultC, errC
	}

	go func() {
		defer ensureReaderClosed(resp)

		body := resp.body
		responseText := bytes.NewBuffer(nil)
		stream := io.TeeReader(body, responseText)

		var res container.WaitResponse
		if err := json.NewDecoder(stream).Decode(&res); err != nil {
			// NOTE(nicks): The /wait API does not work well with HTTP proxies.
			// At any time, the proxy could cut off the response stream.
			//
			// But because the HTTP status has already been written, the proxy's
			// only option is to write a plaintext error message.
			//
			// If there's a JSON parsing error, read the real error message
			// off the body and send it to the client.
			_, _ = io.ReadAll(io.LimitReader(stream, containerWaitErrorMsgLimit))
			errC <- errors.New(responseText.String())
			return
		}

		resultC <- res
	}()

	return resultC, errC
}

// legacyContainerWait returns immediately and doesn't have an option to wait
// until the container is removed.
func (cli *Client) legacyContainerWait(ctx context.Context, containerID string) (<-chan container.WaitResponse, <-chan error) {
	resultC := make(chan container.WaitResponse)
	errC := make(chan error)

	go func() {
		resp, err := cli.post(ctx, "/containers/"+containerID+"/wait", nil, nil, nil)
		if err != nil {
			errC <- err
			return
		}
		defer ensureReaderClosed(resp)

		var res container.WaitResponse
		if err := json.NewDecoder(resp.body).Decode(&res); err != nil {
			errC <- err
			return
		}

		resultC <- res
	}()

	return resultC, errC
}
   0707010000040C000081A4000000000000000000000001645E367C00000335000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/disk_usage.go  package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"fmt"
	"net/url"

	"github.com/docker/docker/api/types"
)

// DiskUsage requests the current data usage from the daemon
func (cli *Client) DiskUsage(ctx context.Context, options types.DiskUsageOptions) (types.DiskUsage, error) {
	var query url.Values
	if len(options.Types) > 0 {
		query = url.Values{}
		for _, t := range options.Types {
			query.Add("type", string(t))
		}
	}

	serverResp, err := cli.get(ctx, "/system/df", query, nil)
	defer ensureReaderClosed(serverResp)
	if err != nil {
		return types.DiskUsage{}, err
	}

	var du types.DiskUsage
	if err := json.NewDecoder(serverResp.body).Decode(&du); err != nil {
		return types.DiskUsage{}, fmt.Errorf("Error retrieving disk usage: %v", err)
	}
	return du, nil
}
   0707010000040D000081A4000000000000000000000001645E367C00000481000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/distribution_inspect.go    package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"net/url"

	registrytypes "github.com/docker/docker/api/types/registry"
)

// DistributionInspect returns the image digest with the full manifest.
func (cli *Client) DistributionInspect(ctx context.Context, image, encodedRegistryAuth string) (registrytypes.DistributionInspect, error) {
	// Contact the registry to retrieve digest and platform information
	var distributionInspect registrytypes.DistributionInspect
	if image == "" {
		return distributionInspect, objectNotFoundError{object: "distribution", id: image}
	}

	if err := cli.NewVersionError("1.30", "distribution inspect"); err != nil {
		return distributionInspect, err
	}
	var headers map[string][]string

	if encodedRegistryAuth != "" {
		headers = map[string][]string{
			"X-Registry-Auth": {encodedRegistryAuth},
		}
	}

	resp, err := cli.get(ctx, "/distribution/"+image+"/json", url.Values{}, headers)
	defer ensureReaderClosed(resp)
	if err != nil {
		return distributionInspect, err
	}

	err = json.NewDecoder(resp.body).Decode(&distributionInspect)
	return distributionInspect, err
}
   0707010000040E000081A4000000000000000000000001645E367C0000130F000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/envvars.go package client // import "github.com/docker/docker/client"

const (
	// EnvOverrideHost is the name of the environment variable that can be used
	// to override the default host to connect to (DefaultDockerHost).
	//
	// This env-var is read by FromEnv and WithHostFromEnv and when set to a
	// non-empty value, takes precedence over the default host (which is platform
	// specific), or any host already set.
	EnvOverrideHost = "DOCKER_HOST"

	// EnvOverrideAPIVersion is the name of the environment variable that can
	// be used to override the API version to use. Value should be
	// formatted as MAJOR.MINOR, for example, "1.19".
	//
	// This env-var is read by FromEnv and WithVersionFromEnv and when set to a
	// non-empty value, takes precedence over API version negotiation.
	//
	// This environment variable should be used for debugging purposes only, as
	// it can set the client to use an incompatible (or invalid) API version.
	EnvOverrideAPIVersion = "DOCKER_API_VERSION"

	// EnvOverrideCertPath is the name of the environment variable that can be
	// used to specify the directory from which to load the TLS certificates
	// (ca.pem, cert.pem, key.pem) from. These certificates are used to configure
	// the Client for a TCP connection protected by TLS client authentication.
	//
	// TLS certificate verification is enabled by default if the Client is configured
	// to use a TLS connection. Refer to EnvTLSVerify below to learn how to
	// disable verification for testing purposes.
	//
	// WARNING: Access to the remote API is equivalent to root access to the
	// host where the daemon runs. Do not expose the API without protection,
	// and only if needed. Make sure you are familiar with the "daemon attack
	// surface" (https://docs.docker.com/go/attack-surface/).
	//
	// For local access to the API, it is recommended to connect with the daemon
	// using the default local socket connection (on Linux), or the named pipe
	// (on Windows).
	//
	// If you need to access the API of a remote daemon, consider using an SSH
	// (ssh://) connection, which is easier to set up, and requires no additional
	// configuration if the host is accessible using ssh.
	//
	// If you cannot use the alternatives above, and you must expose the API over
	// a TCP connection, refer to https://docs.docker.com/engine/security/protect-access/
	// to learn how to configure the daemon and client to use a TCP connection
	// with TLS client authentication. Make sure you know the differences between
	// a regular TLS connection and a TLS connection protected by TLS client
	// authentication, and verify that the API cannot be accessed by other clients.
	EnvOverrideCertPath = "DOCKER_CERT_PATH"

	// EnvTLSVerify is the name of the environment variable that can be used to
	// enable or disable TLS certificate verification. When set to a non-empty
	// value, TLS certificate verification is enabled, and the client is configured
	// to use a TLS connection, using certificates from the default directories
	// (within `~/.docker`); refer to EnvOverrideCertPath above for additional
	// details.
	//
	// WARNING: Access to the remote API is equivalent to root access to the
	// host where the daemon runs. Do not expose the API without protection,
	// and only if needed. Make sure you are familiar with the "daemon attack
	// surface" (https://docs.docker.com/go/attack-surface/).
	//
	// Before setting up your client and daemon to use a TCP connection with TLS
	// client authentication, consider using one of the alternatives mentioned
	// in EnvOverrideCertPath above.
	//
	// Disabling TLS certificate verification (for testing purposes)
	//
	// TLS certificate verification is enabled by default if the Client is configured
	// to use a TLS connection, and it is highly recommended to keep verification
	// enabled to prevent machine-in-the-middle attacks. Refer to the documentation
	// at https://docs.docker.com/engine/security/protect-access/ and pages linked
	// from that page to learn how to configure the daemon and client to use a
	// TCP connection with TLS client authentication enabled.
	//
	// Set the "DOCKER_TLS_VERIFY" environment to an empty string ("") to
	// disable TLS certificate verification. Disabling verification is insecure,
	// so should only be done for testing purposes. From the Go documentation
	// (https://pkg.go.dev/crypto/tls#Config):
	//
	// InsecureSkipVerify controls whether a client verifies the server's
	// certificate chain and host name. If InsecureSkipVerify is true, crypto/tls
	// accepts any certificate presented by the server and any host name in that
	// certificate. In this mode, TLS is susceptible to machine-in-the-middle
	// attacks unless custom verification is used. This should be used only for
	// testing or in combination with VerifyConnection or VerifyPeerCertificate.
	EnvTLSVerify = "DOCKER_TLS_VERIFY"
)
 0707010000040F000081A4000000000000000000000001645E367C00000AB7000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/errors.go  package client // import "github.com/docker/docker/client"

import (
	"fmt"

	"github.com/docker/docker/api/types/versions"
	"github.com/docker/docker/errdefs"
	"github.com/pkg/errors"
)

// errConnectionFailed implements an error returned when connection failed.
type errConnectionFailed struct {
	host string
}

// Error returns a string representation of an errConnectionFailed
func (err errConnectionFailed) Error() string {
	if err.host == "" {
		return "Cannot connect to the Docker daemon. Is the docker daemon running on this host?"
	}
	return fmt.Sprintf("Cannot connect to the Docker daemon at %s. Is the docker daemon running?", err.host)
}

// IsErrConnectionFailed returns true if the error is caused by connection failed.
func IsErrConnectionFailed(err error) bool {
	return errors.As(err, &errConnectionFailed{})
}

// ErrorConnectionFailed returns an error with host in the error message when connection to docker daemon failed.
func ErrorConnectionFailed(host string) error {
	return errConnectionFailed{host: host}
}

// Deprecated: use the errdefs.NotFound() interface instead. Kept for backward compatibility
type notFound interface {
	error
	NotFound() bool
}

// IsErrNotFound returns true if the error is a NotFound error, which is returned
// by the API when some object is not found.
func IsErrNotFound(err error) bool {
	if errdefs.IsNotFound(err) {
		return true
	}
	var e notFound
	return errors.As(err, &e)
}

type objectNotFoundError struct {
	object string
	id     string
}

func (e objectNotFoundError) NotFound() {}

func (e objectNotFoundError) Error() string {
	return fmt.Sprintf("Error: No such %s: %s", e.object, e.id)
}

// IsErrUnauthorized returns true if the error is caused
// when a remote registry authentication fails
//
// Deprecated: use errdefs.IsUnauthorized
func IsErrUnauthorized(err error) bool {
	return errdefs.IsUnauthorized(err)
}

type pluginPermissionDenied struct {
	name string
}

func (e pluginPermissionDenied) Error() string {
	return "Permission denied while installing plugin " + e.name
}

// IsErrNotImplemented returns true if the error is a NotImplemented error.
// This is returned by the API when a requested feature has not been
// implemented.
//
// Deprecated: use errdefs.IsNotImplemented
func IsErrNotImplemented(err error) bool {
	return errdefs.IsNotImplemented(err)
}

// NewVersionError returns an error if the APIVersion required
// if less than the current supported version
func (cli *Client) NewVersionError(APIrequired, feature string) error {
	if cli.version != "" && versions.LessThan(cli.version, APIrequired) {
		return fmt.Errorf("%q requires API version %s, but the Docker daemon API version is %s", feature, APIrequired, cli.version)
	}
	return nil
}
 07070100000410000081A4000000000000000000000001645E367C00000910000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/events.go  package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"net/url"
	"time"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/events"
	"github.com/docker/docker/api/types/filters"
	timetypes "github.com/docker/docker/api/types/time"
)

// Events returns a stream of events in the daemon. It's up to the caller to close the stream
// by cancelling the context. Once the stream has been completely read an io.EOF error will
// be sent over the error channel. If an error is sent all processing will be stopped. It's up
// to the caller to reopen the stream in the event of an error by reinvoking this method.
func (cli *Client) Events(ctx context.Context, options types.EventsOptions) (<-chan events.Message, <-chan error) {
	messages := make(chan events.Message)
	errs := make(chan error, 1)

	started := make(chan struct{})
	go func() {
		defer close(errs)

		query, err := buildEventsQueryParams(cli.version, options)
		if err != nil {
			close(started)
			errs <- err
			return
		}

		resp, err := cli.get(ctx, "/events", query, nil)
		if err != nil {
			close(started)
			errs <- err
			return
		}
		defer resp.body.Close()

		decoder := json.NewDecoder(resp.body)

		close(started)
		for {
			select {
			case <-ctx.Done():
				errs <- ctx.Err()
				return
			default:
				var event events.Message
				if err := decoder.Decode(&event); err != nil {
					errs <- err
					return
				}

				select {
				case messages <- event:
				case <-ctx.Done():
					errs <- ctx.Err()
					return
				}
			}
		}
	}()
	<-started

	return messages, errs
}

func buildEventsQueryParams(cliVersion string, options types.EventsOptions) (url.Values, error) {
	query := url.Values{}
	ref := time.Now()

	if options.Since != "" {
		ts, err := timetypes.GetTimestamp(options.Since, ref)
		if err != nil {
			return nil, err
		}
		query.Set("since", ts)
	}

	if options.Until != "" {
		ts, err := timetypes.GetTimestamp(options.Until, ref)
		if err != nil {
			return nil, err
		}
		query.Set("until", ts)
	}

	if options.Filters.Len() > 0 {
		//nolint:staticcheck // ignore SA1019 for old code
		filterJSON, err := filters.ToParamWithVersion(cliVersion, options.Filters)
		if err != nil {
			return nil, err
		}
		query.Set("filters", filterJSON)
	}

	return query, nil
}
07070100000411000081A4000000000000000000000001645E367C000012B7000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/hijack.go  package client // import "github.com/docker/docker/client"

import (
	"bufio"
	"context"
	"crypto/tls"
	"fmt"
	"net"
	"net/http"
	"net/http/httputil"
	"net/url"
	"time"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/versions"
	"github.com/docker/go-connections/sockets"
	"github.com/pkg/errors"
)

// postHijacked sends a POST request and hijacks the connection.
func (cli *Client) postHijacked(ctx context.Context, path string, query url.Values, body interface{}, headers map[string][]string) (types.HijackedResponse, error) {
	bodyEncoded, err := encodeData(body)
	if err != nil {
		return types.HijackedResponse{}, err
	}

	apiPath := cli.getAPIPath(ctx, path, query)
	req, err := http.NewRequest(http.MethodPost, apiPath, bodyEncoded)
	if err != nil {
		return types.HijackedResponse{}, err
	}
	req = cli.addHeaders(req, headers)

	conn, mediaType, err := cli.setupHijackConn(ctx, req, "tcp")
	if err != nil {
		return types.HijackedResponse{}, err
	}

	return types.NewHijackedResponse(conn, mediaType), err
}

// DialHijack returns a hijacked connection with negotiated protocol proto.
func (cli *Client) DialHijack(ctx context.Context, url, proto string, meta map[string][]string) (net.Conn, error) {
	req, err := http.NewRequest(http.MethodPost, url, nil)
	if err != nil {
		return nil, err
	}
	req = cli.addHeaders(req, meta)

	conn, _, err := cli.setupHijackConn(ctx, req, proto)
	return conn, err
}

// fallbackDial is used when WithDialer() was not called.
// See cli.Dialer().
func fallbackDial(proto, addr string, tlsConfig *tls.Config) (net.Conn, error) {
	if tlsConfig != nil && proto != "unix" && proto != "npipe" {
		return tls.Dial(proto, addr, tlsConfig)
	}
	if proto == "npipe" {
		return sockets.DialPipe(addr, 32*time.Second)
	}
	return net.Dial(proto, addr)
}

func (cli *Client) setupHijackConn(ctx context.Context, req *http.Request, proto string) (net.Conn, string, error) {
	req.Host = cli.addr
	req.Header.Set("Connection", "Upgrade")
	req.Header.Set("Upgrade", proto)

	dialer := cli.Dialer()
	conn, err := dialer(ctx)
	if err != nil {
		return nil, "", errors.Wrap(err, "cannot connect to the Docker daemon. Is 'docker daemon' running on this host?")
	}

	// When we set up a TCP connection for hijack, there could be long periods
	// of inactivity (a long running command with no output) that in certain
	// network setups may cause ECONNTIMEOUT, leaving the client in an unknown
	// state. Setting TCP KeepAlive on the socket connection will prohibit
	// ECONNTIMEOUT unless the socket connection truly is broken
	if tcpConn, ok := conn.(*net.TCPConn); ok {
		tcpConn.SetKeepAlive(true)
		tcpConn.SetKeepAlivePeriod(30 * time.Second)
	}

	clientconn := httputil.NewClientConn(conn, nil)
	defer clientconn.Close()

	// Server hijacks the connection, error 'connection closed' expected
	resp, err := clientconn.Do(req)

	//nolint:staticcheck // ignore SA1019 for connecting to old (pre go1.8) daemons
	if err != httputil.ErrPersistEOF {
		if err != nil {
			return nil, "", err
		}
		if resp.StatusCode != http.StatusSwitchingProtocols {
			resp.Body.Close()
			return nil, "", fmt.Errorf("unable to upgrade to %s, received %d", proto, resp.StatusCode)
		}
	}

	c, br := clientconn.Hijack()
	if br.Buffered() > 0 {
		// If there is buffered content, wrap the connection.  We return an
		// object that implements CloseWrite if the underlying connection
		// implements it.
		if _, ok := c.(types.CloseWriter); ok {
			c = &hijackedConnCloseWriter{&hijackedConn{c, br}}
		} else {
			c = &hijackedConn{c, br}
		}
	} else {
		br.Reset(nil)
	}

	var mediaType string
	if versions.GreaterThanOrEqualTo(cli.ClientVersion(), "1.42") {
		// Prior to 1.42, Content-Type is always set to raw-stream and not relevant
		mediaType = resp.Header.Get("Content-Type")
	}

	return c, mediaType, nil
}

// hijackedConn wraps a net.Conn and is returned by setupHijackConn in the case
// that a) there was already buffered data in the http layer when Hijack() was
// called, and b) the underlying net.Conn does *not* implement CloseWrite().
// hijackedConn does not implement CloseWrite() either.
type hijackedConn struct {
	net.Conn
	r *bufio.Reader
}

func (c *hijackedConn) Read(b []byte) (int, error) {
	return c.r.Read(b)
}

// hijackedConnCloseWriter is a hijackedConn which additionally implements
// CloseWrite().  It is returned by setupHijackConn in the case that a) there
// was already buffered data in the http layer when Hijack() was called, and b)
// the underlying net.Conn *does* implement CloseWrite().
type hijackedConnCloseWriter struct {
	*hijackedConn
}

var _ types.CloseWriter = &hijackedConnCloseWriter{}

func (c *hijackedConnCloseWriter) CloseWrite() error {
	conn := c.Conn.(types.CloseWriter)
	return conn.CloseWrite()
}
 07070100000412000081A4000000000000000000000001645E367C00000F2A000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/image_build.go package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/base64"
	"encoding/json"
	"io"
	"net/http"
	"net/url"
	"strconv"
	"strings"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/container"
)

// ImageBuild sends a request to the daemon to build images.
// The Body in the response implements an io.ReadCloser and it's up to the caller to
// close it.
func (cli *Client) ImageBuild(ctx context.Context, buildContext io.Reader, options types.ImageBuildOptions) (types.ImageBuildResponse, error) {
	query, err := cli.imageBuildOptionsToQuery(options)
	if err != nil {
		return types.ImageBuildResponse{}, err
	}

	headers := http.Header(make(map[string][]string))
	buf, err := json.Marshal(options.AuthConfigs)
	if err != nil {
		return types.ImageBuildResponse{}, err
	}
	headers.Add("X-Registry-Config", base64.URLEncoding.EncodeToString(buf))

	headers.Set("Content-Type", "application/x-tar")

	serverResp, err := cli.postRaw(ctx, "/build", query, buildContext, headers)
	if err != nil {
		return types.ImageBuildResponse{}, err
	}

	osType := getDockerOS(serverResp.header.Get("Server"))

	return types.ImageBuildResponse{
		Body:   serverResp.body,
		OSType: osType,
	}, nil
}

func (cli *Client) imageBuildOptionsToQuery(options types.ImageBuildOptions) (url.Values, error) {
	query := url.Values{
		"t":           options.Tags,
		"securityopt": options.SecurityOpt,
		"extrahosts":  options.ExtraHosts,
	}
	if options.SuppressOutput {
		query.Set("q", "1")
	}
	if options.RemoteContext != "" {
		query.Set("remote", options.RemoteContext)
	}
	if options.NoCache {
		query.Set("nocache", "1")
	}
	if options.Remove {
		query.Set("rm", "1")
	} else {
		query.Set("rm", "0")
	}

	if options.ForceRemove {
		query.Set("forcerm", "1")
	}

	if options.PullParent {
		query.Set("pull", "1")
	}

	if options.Squash {
		if err := cli.NewVersionError("1.25", "squash"); err != nil {
			return query, err
		}
		query.Set("squash", "1")
	}

	if !container.Isolation.IsDefault(options.Isolation) {
		query.Set("isolation", string(options.Isolation))
	}

	query.Set("cpusetcpus", options.CPUSetCPUs)
	query.Set("networkmode", options.NetworkMode)
	query.Set("cpusetmems", options.CPUSetMems)
	query.Set("cpushares", strconv.FormatInt(options.CPUShares, 10))
	query.Set("cpuquota", strconv.FormatInt(options.CPUQuota, 10))
	query.Set("cpuperiod", strconv.FormatInt(options.CPUPeriod, 10))
	query.Set("memory", strconv.FormatInt(options.Memory, 10))
	query.Set("memswap", strconv.FormatInt(options.MemorySwap, 10))
	query.Set("cgroupparent", options.CgroupParent)
	query.Set("shmsize", strconv.FormatInt(options.ShmSize, 10))
	query.Set("dockerfile", options.Dockerfile)
	query.Set("target", options.Target)

	ulimitsJSON, err := json.Marshal(options.Ulimits)
	if err != nil {
		return query, err
	}
	query.Set("ulimits", string(ulimitsJSON))

	buildArgsJSON, err := json.Marshal(options.BuildArgs)
	if err != nil {
		return query, err
	}
	query.Set("buildargs", string(buildArgsJSON))

	labelsJSON, err := json.Marshal(options.Labels)
	if err != nil {
		return query, err
	}
	query.Set("labels", string(labelsJSON))

	cacheFromJSON, err := json.Marshal(options.CacheFrom)
	if err != nil {
		return query, err
	}
	query.Set("cachefrom", string(cacheFromJSON))
	if options.SessionID != "" {
		query.Set("session", options.SessionID)
	}
	if options.Platform != "" {
		if err := cli.NewVersionError("1.32", "platform"); err != nil {
			return query, err
		}
		query.Set("platform", strings.ToLower(options.Platform))
	}
	if options.BuildID != "" {
		query.Set("buildid", options.BuildID)
	}
	query.Set("version", string(options.Version))

	if options.Outputs != nil {
		outputsJSON, err := json.Marshal(options.Outputs)
		if err != nil {
			return query, err
		}
		query.Set("outputs", string(outputsJSON))
	}
	return query, nil
}
  07070100000413000081A4000000000000000000000001645E367C00000474000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/image_create.go    package client // import "github.com/docker/docker/client"

import (
	"context"
	"io"
	"net/url"
	"strings"

	"github.com/docker/distribution/reference"
	"github.com/docker/docker/api/types"
)

// ImageCreate creates a new image based on the parent options.
// It returns the JSON content in the response body.
func (cli *Client) ImageCreate(ctx context.Context, parentReference string, options types.ImageCreateOptions) (io.ReadCloser, error) {
	ref, err := reference.ParseNormalizedNamed(parentReference)
	if err != nil {
		return nil, err
	}

	query := url.Values{}
	query.Set("fromImage", reference.FamiliarName(ref))
	query.Set("tag", getAPITagFromNamedRef(ref))
	if options.Platform != "" {
		query.Set("platform", strings.ToLower(options.Platform))
	}
	resp, err := cli.tryImageCreate(ctx, query, options.RegistryAuth)
	if err != nil {
		return nil, err
	}
	return resp.body, nil
}

func (cli *Client) tryImageCreate(ctx context.Context, query url.Values, registryAuth string) (serverResponse, error) {
	headers := map[string][]string{"X-Registry-Auth": {registryAuth}}
	return cli.post(ctx, "/images/create", query, nil, headers)
}
07070100000414000081A4000000000000000000000001645E367C00000268000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/image_history.go   package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"net/url"

	"github.com/docker/docker/api/types/image"
)

// ImageHistory returns the changes in an image in history format.
func (cli *Client) ImageHistory(ctx context.Context, imageID string) ([]image.HistoryResponseItem, error) {
	var history []image.HistoryResponseItem
	serverResp, err := cli.get(ctx, "/images/"+imageID+"/history", url.Values{}, nil)
	defer ensureReaderClosed(serverResp)
	if err != nil {
		return history, err
	}

	err = json.NewDecoder(serverResp.body).Decode(&history)
	return history, err
}
07070100000415000081A4000000000000000000000001645E367C00000442000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/image_import.go    package client // import "github.com/docker/docker/client"

import (
	"context"
	"io"
	"net/url"
	"strings"

	"github.com/docker/distribution/reference"
	"github.com/docker/docker/api/types"
)

// ImageImport creates a new image based on the source options.
// It returns the JSON content in the response body.
func (cli *Client) ImageImport(ctx context.Context, source types.ImageImportSource, ref string, options types.ImageImportOptions) (io.ReadCloser, error) {
	if ref != "" {
		// Check if the given image name can be resolved
		if _, err := reference.ParseNormalizedNamed(ref); err != nil {
			return nil, err
		}
	}

	query := url.Values{}
	query.Set("fromSrc", source.SourceName)
	query.Set("repo", ref)
	query.Set("tag", options.Tag)
	query.Set("message", options.Message)
	if options.Platform != "" {
		query.Set("platform", strings.ToLower(options.Platform))
	}
	for _, change := range options.Changes {
		query.Add("changes", change)
	}

	resp, err := cli.postRaw(ctx, "/images/create", query, source.Source, nil)
	if err != nil {
		return nil, err
	}
	return resp.body, nil
}
  07070100000416000081A4000000000000000000000001645E367C00000366000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/image_inspect.go   package client // import "github.com/docker/docker/client"

import (
	"bytes"
	"context"
	"encoding/json"
	"io"

	"github.com/docker/docker/api/types"
)

// ImageInspectWithRaw returns the image information and its raw representation.
func (cli *Client) ImageInspectWithRaw(ctx context.Context, imageID string) (types.ImageInspect, []byte, error) {
	if imageID == "" {
		return types.ImageInspect{}, nil, objectNotFoundError{object: "image", id: imageID}
	}
	serverResp, err := cli.get(ctx, "/images/"+imageID+"/json", nil, nil)
	defer ensureReaderClosed(serverResp)
	if err != nil {
		return types.ImageInspect{}, nil, err
	}

	body, err := io.ReadAll(serverResp.body)
	if err != nil {
		return types.ImageInspect{}, nil, err
	}

	var response types.ImageInspect
	rdr := bytes.NewReader(body)
	err = json.NewDecoder(rdr).Decode(&response)
	return response, body, err
}
  07070100000417000081A4000000000000000000000001645E367C00000576000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/image_list.go  package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"net/url"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/filters"
	"github.com/docker/docker/api/types/versions"
)

// ImageList returns a list of images in the docker host.
func (cli *Client) ImageList(ctx context.Context, options types.ImageListOptions) ([]types.ImageSummary, error) {
	var images []types.ImageSummary
	query := url.Values{}

	optionFilters := options.Filters
	referenceFilters := optionFilters.Get("reference")
	if versions.LessThan(cli.version, "1.25") && len(referenceFilters) > 0 {
		query.Set("filter", referenceFilters[0])
		for _, filterValue := range referenceFilters {
			optionFilters.Del("reference", filterValue)
		}
	}
	if optionFilters.Len() > 0 {
		//nolint:staticcheck // ignore SA1019 for old code
		filterJSON, err := filters.ToParamWithVersion(cli.version, optionFilters)
		if err != nil {
			return images, err
		}
		query.Set("filters", filterJSON)
	}
	if options.All {
		query.Set("all", "1")
	}
	if options.SharedSize && versions.GreaterThanOrEqualTo(cli.version, "1.42") {
		query.Set("shared-size", "1")
	}

	serverResp, err := cli.get(ctx, "/images/json", query, nil)
	defer ensureReaderClosed(serverResp)
	if err != nil {
		return images, err
	}

	err = json.NewDecoder(serverResp.body).Decode(&images)
	return images, err
}
  07070100000418000081A4000000000000000000000001645E367C0000033C000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/image_load.go  package client // import "github.com/docker/docker/client"

import (
	"context"
	"io"
	"net/url"

	"github.com/docker/docker/api/types"
)

// ImageLoad loads an image in the docker host from the client host.
// It's up to the caller to close the io.ReadCloser in the
// ImageLoadResponse returned by this function.
func (cli *Client) ImageLoad(ctx context.Context, input io.Reader, quiet bool) (types.ImageLoadResponse, error) {
	v := url.Values{}
	v.Set("quiet", "0")
	if quiet {
		v.Set("quiet", "1")
	}
	headers := map[string][]string{"Content-Type": {"application/x-tar"}}
	resp, err := cli.postRaw(ctx, "/images/load", v, input, headers)
	if err != nil {
		return types.ImageLoadResponse{}, err
	}
	return types.ImageLoadResponse{
		Body: resp.body,
		JSON: resp.header.Get("Content-Type") == "application/json",
	}, nil
}
07070100000419000081A4000000000000000000000001645E367C00000380000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/image_prune.go package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"fmt"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/filters"
)

// ImagesPrune requests the daemon to delete unused data
func (cli *Client) ImagesPrune(ctx context.Context, pruneFilters filters.Args) (types.ImagesPruneReport, error) {
	var report types.ImagesPruneReport

	if err := cli.NewVersionError("1.25", "image prune"); err != nil {
		return report, err
	}

	query, err := getFiltersQuery(pruneFilters)
	if err != nil {
		return report, err
	}

	serverResp, err := cli.post(ctx, "/images/prune", query, nil, nil)
	defer ensureReaderClosed(serverResp)
	if err != nil {
		return report, err
	}

	if err := json.NewDecoder(serverResp.body).Decode(&report); err != nil {
		return report, fmt.Errorf("Error retrieving disk usage: %v", err)
	}

	return report, nil
}
0707010000041A000081A4000000000000000000000001645E367C0000082C000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/image_pull.go  package client // import "github.com/docker/docker/client"

import (
	"context"
	"io"
	"net/url"
	"strings"

	"github.com/docker/distribution/reference"
	"github.com/docker/docker/api/types"
	"github.com/docker/docker/errdefs"
)

// ImagePull requests the docker host to pull an image from a remote registry.
// It executes the privileged function if the operation is unauthorized
// and it tries one more time.
// It's up to the caller to handle the io.ReadCloser and close it properly.
//
// FIXME(vdemeester): there is currently used in a few way in docker/docker
// - if not in trusted content, ref is used to pass the whole reference, and tag is empty
// - if in trusted content, ref is used to pass the reference name, and tag for the digest
func (cli *Client) ImagePull(ctx context.Context, refStr string, options types.ImagePullOptions) (io.ReadCloser, error) {
	ref, err := reference.ParseNormalizedNamed(refStr)
	if err != nil {
		return nil, err
	}

	query := url.Values{}
	query.Set("fromImage", reference.FamiliarName(ref))
	if !options.All {
		query.Set("tag", getAPITagFromNamedRef(ref))
	}
	if options.Platform != "" {
		query.Set("platform", strings.ToLower(options.Platform))
	}

	resp, err := cli.tryImageCreate(ctx, query, options.RegistryAuth)
	if errdefs.IsUnauthorized(err) && options.PrivilegeFunc != nil {
		newAuthHeader, privilegeErr := options.PrivilegeFunc()
		if privilegeErr != nil {
			return nil, privilegeErr
		}
		resp, err = cli.tryImageCreate(ctx, query, newAuthHeader)
	}
	if err != nil {
		return nil, err
	}
	return resp.body, nil
}

// getAPITagFromNamedRef returns a tag from the specified reference.
// This function is necessary as long as the docker "server" api expects
// digests to be sent as tags and makes a distinction between the name
// and tag/digest part of a reference.
func getAPITagFromNamedRef(ref reference.Named) string {
	if digested, ok := ref.(reference.Digested); ok {
		return digested.Digest().String()
	}
	ref = reference.TagNameOnly(ref)
	if tagged, ok := ref.(reference.Tagged); ok {
		return tagged.Tag()
	}
	return ""
}
0707010000041B000081A4000000000000000000000001645E367C00000694000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/image_push.go  package client // import "github.com/docker/docker/client"

import (
	"context"
	"errors"
	"io"
	"net/url"

	"github.com/docker/distribution/reference"
	"github.com/docker/docker/api/types"
	"github.com/docker/docker/errdefs"
)

// ImagePush requests the docker host to push an image to a remote registry.
// It executes the privileged function if the operation is unauthorized
// and it tries one more time.
// It's up to the caller to handle the io.ReadCloser and close it properly.
func (cli *Client) ImagePush(ctx context.Context, image string, options types.ImagePushOptions) (io.ReadCloser, error) {
	ref, err := reference.ParseNormalizedNamed(image)
	if err != nil {
		return nil, err
	}

	if _, isCanonical := ref.(reference.Canonical); isCanonical {
		return nil, errors.New("cannot push a digest reference")
	}

	name := reference.FamiliarName(ref)
	query := url.Values{}
	if !options.All {
		ref = reference.TagNameOnly(ref)
		if tagged, ok := ref.(reference.Tagged); ok {
			query.Set("tag", tagged.Tag())
		}
	}

	resp, err := cli.tryImagePush(ctx, name, query, options.RegistryAuth)
	if errdefs.IsUnauthorized(err) && options.PrivilegeFunc != nil {
		newAuthHeader, privilegeErr := options.PrivilegeFunc()
		if privilegeErr != nil {
			return nil, privilegeErr
		}
		resp, err = cli.tryImagePush(ctx, name, query, newAuthHeader)
	}
	if err != nil {
		return nil, err
	}
	return resp.body, nil
}

func (cli *Client) tryImagePush(ctx context.Context, imageID string, query url.Values, registryAuth string) (serverResponse, error) {
	headers := map[string][]string{"X-Registry-Auth": {registryAuth}}
	return cli.post(ctx, "/images/"+imageID+"/push", query, nil, headers)
}
0707010000041C000081A4000000000000000000000001645E367C000002D7000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/image_remove.go    package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"net/url"

	"github.com/docker/docker/api/types"
)

// ImageRemove removes an image from the docker host.
func (cli *Client) ImageRemove(ctx context.Context, imageID string, options types.ImageRemoveOptions) ([]types.ImageDeleteResponseItem, error) {
	query := url.Values{}

	if options.Force {
		query.Set("force", "1")
	}
	if !options.PruneChildren {
		query.Set("noprune", "1")
	}

	var dels []types.ImageDeleteResponseItem
	resp, err := cli.delete(ctx, "/images/"+imageID, query, nil)
	defer ensureReaderClosed(resp)
	if err != nil {
		return dels, err
	}

	err = json.NewDecoder(resp.body).Decode(&dels)
	return dels, err
}
 0707010000041D000081A4000000000000000000000001645E367C000001FD000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/image_save.go  package client // import "github.com/docker/docker/client"

import (
	"context"
	"io"
	"net/url"
)

// ImageSave retrieves one or more images from the docker host as an io.ReadCloser.
// It's up to the caller to store the images and close the stream.
func (cli *Client) ImageSave(ctx context.Context, imageIDs []string) (io.ReadCloser, error) {
	query := url.Values{
		"names": imageIDs,
	}

	resp, err := cli.get(ctx, "/images/get", query, nil)
	if err != nil {
		return nil, err
	}
	return resp.body, nil
}
   0707010000041E000081A4000000000000000000000001645E367C0000063B000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/image_search.go    package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"net/url"
	"strconv"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/filters"
	"github.com/docker/docker/api/types/registry"
	"github.com/docker/docker/errdefs"
)

// ImageSearch makes the docker host search by a term in a remote registry.
// The list of results is not sorted in any fashion.
func (cli *Client) ImageSearch(ctx context.Context, term string, options types.ImageSearchOptions) ([]registry.SearchResult, error) {
	var results []registry.SearchResult
	query := url.Values{}
	query.Set("term", term)
	if options.Limit > 0 {
		query.Set("limit", strconv.Itoa(options.Limit))
	}

	if options.Filters.Len() > 0 {
		filterJSON, err := filters.ToJSON(options.Filters)
		if err != nil {
			return results, err
		}
		query.Set("filters", filterJSON)
	}

	resp, err := cli.tryImageSearch(ctx, query, options.RegistryAuth)
	defer ensureReaderClosed(resp)
	if errdefs.IsUnauthorized(err) && options.PrivilegeFunc != nil {
		newAuthHeader, privilegeErr := options.PrivilegeFunc()
		if privilegeErr != nil {
			return results, privilegeErr
		}
		resp, err = cli.tryImageSearch(ctx, query, newAuthHeader)
	}
	if err != nil {
		return results, err
	}

	err = json.NewDecoder(resp.body).Decode(&results)
	return results, err
}

func (cli *Client) tryImageSearch(ctx context.Context, query url.Values, registryAuth string) (serverResponse, error) {
	headers := map[string][]string{"X-Registry-Auth": {registryAuth}}
	return cli.get(ctx, "/images/search", query, headers)
}
 0707010000041F000081A4000000000000000000000001645E367C00000426000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/image_tag.go   package client // import "github.com/docker/docker/client"

import (
	"context"
	"net/url"

	"github.com/docker/distribution/reference"
	"github.com/pkg/errors"
)

// ImageTag tags an image in the docker host
func (cli *Client) ImageTag(ctx context.Context, source, target string) error {
	if _, err := reference.ParseAnyReference(source); err != nil {
		return errors.Wrapf(err, "Error parsing reference: %q is not a valid repository/tag", source)
	}

	ref, err := reference.ParseNormalizedNamed(target)
	if err != nil {
		return errors.Wrapf(err, "Error parsing reference: %q is not a valid repository/tag", target)
	}

	if _, isCanonical := ref.(reference.Canonical); isCanonical {
		return errors.New("refusing to create a tag with a digest reference")
	}

	ref = reference.TagNameOnly(ref)

	query := url.Values{}
	query.Set("repo", reference.FamiliarName(ref))
	if tagged, ok := ref.(reference.Tagged); ok {
		query.Set("tag", tagged.Tag())
	}

	resp, err := cli.post(ctx, "/images/"+source+"/tag", query, nil, nil)
	ensureReaderClosed(resp)
	return err
}
  07070100000420000081A4000000000000000000000001645E367C00000255000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/info.go    package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"fmt"
	"net/url"

	"github.com/docker/docker/api/types"
)

// Info returns information about the docker server.
func (cli *Client) Info(ctx context.Context) (types.Info, error) {
	var info types.Info
	serverResp, err := cli.get(ctx, "/info", url.Values{}, nil)
	defer ensureReaderClosed(serverResp)
	if err != nil {
		return info, err
	}

	if err := json.NewDecoder(serverResp.body).Decode(&info); err != nil {
		return info, fmt.Errorf("Error reading remote info: %v", err)
	}

	return info, nil
}
   07070100000421000081A4000000000000000000000001645E367C00003234000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/interface.go   package client // import "github.com/docker/docker/client"

import (
	"context"
	"io"
	"net"
	"net/http"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/container"
	"github.com/docker/docker/api/types/events"
	"github.com/docker/docker/api/types/filters"
	"github.com/docker/docker/api/types/image"
	"github.com/docker/docker/api/types/network"
	"github.com/docker/docker/api/types/registry"
	"github.com/docker/docker/api/types/swarm"
	"github.com/docker/docker/api/types/volume"
	specs "github.com/opencontainers/image-spec/specs-go/v1"
)

// CommonAPIClient is the common methods between stable and experimental versions of APIClient.
type CommonAPIClient interface {
	ConfigAPIClient
	ContainerAPIClient
	DistributionAPIClient
	ImageAPIClient
	NodeAPIClient
	NetworkAPIClient
	PluginAPIClient
	ServiceAPIClient
	SwarmAPIClient
	SecretAPIClient
	SystemAPIClient
	VolumeAPIClient
	ClientVersion() string
	DaemonHost() string
	HTTPClient() *http.Client
	ServerVersion(ctx context.Context) (types.Version, error)
	NegotiateAPIVersion(ctx context.Context)
	NegotiateAPIVersionPing(types.Ping)
	DialHijack(ctx context.Context, url, proto string, meta map[string][]string) (net.Conn, error)
	Dialer() func(context.Context) (net.Conn, error)
	Close() error
}

// ContainerAPIClient defines API client methods for the containers
type ContainerAPIClient interface {
	ContainerAttach(ctx context.Context, container string, options types.ContainerAttachOptions) (types.HijackedResponse, error)
	ContainerCommit(ctx context.Context, container string, options types.ContainerCommitOptions) (types.IDResponse, error)
	ContainerCreate(ctx context.Context, config *container.Config, hostConfig *container.HostConfig, networkingConfig *network.NetworkingConfig, platform *specs.Platform, containerName string) (container.CreateResponse, error)
	ContainerDiff(ctx context.Context, container string) ([]container.ContainerChangeResponseItem, error)
	ContainerExecAttach(ctx context.Context, execID string, config types.ExecStartCheck) (types.HijackedResponse, error)
	ContainerExecCreate(ctx context.Context, container string, config types.ExecConfig) (types.IDResponse, error)
	ContainerExecInspect(ctx context.Context, execID string) (types.ContainerExecInspect, error)
	ContainerExecResize(ctx context.Context, execID string, options types.ResizeOptions) error
	ContainerExecStart(ctx context.Context, execID string, config types.ExecStartCheck) error
	ContainerExport(ctx context.Context, container string) (io.ReadCloser, error)
	ContainerInspect(ctx context.Context, container string) (types.ContainerJSON, error)
	ContainerInspectWithRaw(ctx context.Context, container string, getSize bool) (types.ContainerJSON, []byte, error)
	ContainerKill(ctx context.Context, container, signal string) error
	ContainerList(ctx context.Context, options types.ContainerListOptions) ([]types.Container, error)
	ContainerLogs(ctx context.Context, container string, options types.ContainerLogsOptions) (io.ReadCloser, error)
	ContainerPause(ctx context.Context, container string) error
	ContainerRemove(ctx context.Context, container string, options types.ContainerRemoveOptions) error
	ContainerRename(ctx context.Context, container, newContainerName string) error
	ContainerResize(ctx context.Context, container string, options types.ResizeOptions) error
	ContainerRestart(ctx context.Context, container string, options container.StopOptions) error
	ContainerStatPath(ctx context.Context, container, path string) (types.ContainerPathStat, error)
	ContainerStats(ctx context.Context, container string, stream bool) (types.ContainerStats, error)
	ContainerStatsOneShot(ctx context.Context, container string) (types.ContainerStats, error)
	ContainerStart(ctx context.Context, container string, options types.ContainerStartOptions) error
	ContainerStop(ctx context.Context, container string, options container.StopOptions) error
	ContainerTop(ctx context.Context, container string, arguments []string) (container.ContainerTopOKBody, error)
	ContainerUnpause(ctx context.Context, container string) error
	ContainerUpdate(ctx context.Context, container string, updateConfig container.UpdateConfig) (container.ContainerUpdateOKBody, error)
	ContainerWait(ctx context.Context, container string, condition container.WaitCondition) (<-chan container.WaitResponse, <-chan error)
	CopyFromContainer(ctx context.Context, container, srcPath string) (io.ReadCloser, types.ContainerPathStat, error)
	CopyToContainer(ctx context.Context, container, path string, content io.Reader, options types.CopyToContainerOptions) error
	ContainersPrune(ctx context.Context, pruneFilters filters.Args) (types.ContainersPruneReport, error)
}

// DistributionAPIClient defines API client methods for the registry
type DistributionAPIClient interface {
	DistributionInspect(ctx context.Context, image, encodedRegistryAuth string) (registry.DistributionInspect, error)
}

// ImageAPIClient defines API client methods for the images
type ImageAPIClient interface {
	ImageBuild(ctx context.Context, context io.Reader, options types.ImageBuildOptions) (types.ImageBuildResponse, error)
	BuildCachePrune(ctx context.Context, opts types.BuildCachePruneOptions) (*types.BuildCachePruneReport, error)
	BuildCancel(ctx context.Context, id string) error
	ImageCreate(ctx context.Context, parentReference string, options types.ImageCreateOptions) (io.ReadCloser, error)
	ImageHistory(ctx context.Context, image string) ([]image.HistoryResponseItem, error)
	ImageImport(ctx context.Context, source types.ImageImportSource, ref string, options types.ImageImportOptions) (io.ReadCloser, error)
	ImageInspectWithRaw(ctx context.Context, image string) (types.ImageInspect, []byte, error)
	ImageList(ctx context.Context, options types.ImageListOptions) ([]types.ImageSummary, error)
	ImageLoad(ctx context.Context, input io.Reader, quiet bool) (types.ImageLoadResponse, error)
	ImagePull(ctx context.Context, ref string, options types.ImagePullOptions) (io.ReadCloser, error)
	ImagePush(ctx context.Context, ref string, options types.ImagePushOptions) (io.ReadCloser, error)
	ImageRemove(ctx context.Context, image string, options types.ImageRemoveOptions) ([]types.ImageDeleteResponseItem, error)
	ImageSearch(ctx context.Context, term string, options types.ImageSearchOptions) ([]registry.SearchResult, error)
	ImageSave(ctx context.Context, images []string) (io.ReadCloser, error)
	ImageTag(ctx context.Context, image, ref string) error
	ImagesPrune(ctx context.Context, pruneFilter filters.Args) (types.ImagesPruneReport, error)
}

// NetworkAPIClient defines API client methods for the networks
type NetworkAPIClient interface {
	NetworkConnect(ctx context.Context, network, container string, config *network.EndpointSettings) error
	NetworkCreate(ctx context.Context, name string, options types.NetworkCreate) (types.NetworkCreateResponse, error)
	NetworkDisconnect(ctx context.Context, network, container string, force bool) error
	NetworkInspect(ctx context.Context, network string, options types.NetworkInspectOptions) (types.NetworkResource, error)
	NetworkInspectWithRaw(ctx context.Context, network string, options types.NetworkInspectOptions) (types.NetworkResource, []byte, error)
	NetworkList(ctx context.Context, options types.NetworkListOptions) ([]types.NetworkResource, error)
	NetworkRemove(ctx context.Context, network string) error
	NetworksPrune(ctx context.Context, pruneFilter filters.Args) (types.NetworksPruneReport, error)
}

// NodeAPIClient defines API client methods for the nodes
type NodeAPIClient interface {
	NodeInspectWithRaw(ctx context.Context, nodeID string) (swarm.Node, []byte, error)
	NodeList(ctx context.Context, options types.NodeListOptions) ([]swarm.Node, error)
	NodeRemove(ctx context.Context, nodeID string, options types.NodeRemoveOptions) error
	NodeUpdate(ctx context.Context, nodeID string, version swarm.Version, node swarm.NodeSpec) error
}

// PluginAPIClient defines API client methods for the plugins
type PluginAPIClient interface {
	PluginList(ctx context.Context, filter filters.Args) (types.PluginsListResponse, error)
	PluginRemove(ctx context.Context, name string, options types.PluginRemoveOptions) error
	PluginEnable(ctx context.Context, name string, options types.PluginEnableOptions) error
	PluginDisable(ctx context.Context, name string, options types.PluginDisableOptions) error
	PluginInstall(ctx context.Context, name string, options types.PluginInstallOptions) (io.ReadCloser, error)
	PluginUpgrade(ctx context.Context, name string, options types.PluginInstallOptions) (io.ReadCloser, error)
	PluginPush(ctx context.Context, name string, registryAuth string) (io.ReadCloser, error)
	PluginSet(ctx context.Context, name string, args []string) error
	PluginInspectWithRaw(ctx context.Context, name string) (*types.Plugin, []byte, error)
	PluginCreate(ctx context.Context, createContext io.Reader, options types.PluginCreateOptions) error
}

// ServiceAPIClient defines API client methods for the services
type ServiceAPIClient interface {
	ServiceCreate(ctx context.Context, service swarm.ServiceSpec, options types.ServiceCreateOptions) (types.ServiceCreateResponse, error)
	ServiceInspectWithRaw(ctx context.Context, serviceID string, options types.ServiceInspectOptions) (swarm.Service, []byte, error)
	ServiceList(ctx context.Context, options types.ServiceListOptions) ([]swarm.Service, error)
	ServiceRemove(ctx context.Context, serviceID string) error
	ServiceUpdate(ctx context.Context, serviceID string, version swarm.Version, service swarm.ServiceSpec, options types.ServiceUpdateOptions) (types.ServiceUpdateResponse, error)
	ServiceLogs(ctx context.Context, serviceID string, options types.ContainerLogsOptions) (io.ReadCloser, error)
	TaskLogs(ctx context.Context, taskID string, options types.ContainerLogsOptions) (io.ReadCloser, error)
	TaskInspectWithRaw(ctx context.Context, taskID string) (swarm.Task, []byte, error)
	TaskList(ctx context.Context, options types.TaskListOptions) ([]swarm.Task, error)
}

// SwarmAPIClient defines API client methods for the swarm
type SwarmAPIClient interface {
	SwarmInit(ctx context.Context, req swarm.InitRequest) (string, error)
	SwarmJoin(ctx context.Context, req swarm.JoinRequest) error
	SwarmGetUnlockKey(ctx context.Context) (types.SwarmUnlockKeyResponse, error)
	SwarmUnlock(ctx context.Context, req swarm.UnlockRequest) error
	SwarmLeave(ctx context.Context, force bool) error
	SwarmInspect(ctx context.Context) (swarm.Swarm, error)
	SwarmUpdate(ctx context.Context, version swarm.Version, swarm swarm.Spec, flags swarm.UpdateFlags) error
}

// SystemAPIClient defines API client methods for the system
type SystemAPIClient interface {
	Events(ctx context.Context, options types.EventsOptions) (<-chan events.Message, <-chan error)
	Info(ctx context.Context) (types.Info, error)
	RegistryLogin(ctx context.Context, auth types.AuthConfig) (registry.AuthenticateOKBody, error)
	DiskUsage(ctx context.Context, options types.DiskUsageOptions) (types.DiskUsage, error)
	Ping(ctx context.Context) (types.Ping, error)
}

// VolumeAPIClient defines API client methods for the volumes
type VolumeAPIClient interface {
	VolumeCreate(ctx context.Context, options volume.CreateOptions) (volume.Volume, error)
	VolumeInspect(ctx context.Context, volumeID string) (volume.Volume, error)
	VolumeInspectWithRaw(ctx context.Context, volumeID string) (volume.Volume, []byte, error)
	VolumeList(ctx context.Context, filter filters.Args) (volume.ListResponse, error)
	VolumeRemove(ctx context.Context, volumeID string, force bool) error
	VolumesPrune(ctx context.Context, pruneFilter filters.Args) (types.VolumesPruneReport, error)
	VolumeUpdate(ctx context.Context, volumeID string, version swarm.Version, options volume.UpdateOptions) error
}

// SecretAPIClient defines API client methods for secrets
type SecretAPIClient interface {
	SecretList(ctx context.Context, options types.SecretListOptions) ([]swarm.Secret, error)
	SecretCreate(ctx context.Context, secret swarm.SecretSpec) (types.SecretCreateResponse, error)
	SecretRemove(ctx context.Context, id string) error
	SecretInspectWithRaw(ctx context.Context, name string) (swarm.Secret, []byte, error)
	SecretUpdate(ctx context.Context, id string, version swarm.Version, secret swarm.SecretSpec) error
}

// ConfigAPIClient defines API client methods for configs
type ConfigAPIClient interface {
	ConfigList(ctx context.Context, options types.ConfigListOptions) ([]swarm.Config, error)
	ConfigCreate(ctx context.Context, config swarm.ConfigSpec) (types.ConfigCreateResponse, error)
	ConfigRemove(ctx context.Context, id string) error
	ConfigInspectWithRaw(ctx context.Context, name string) (swarm.Config, []byte, error)
	ConfigUpdate(ctx context.Context, id string, version swarm.Version, config swarm.ConfigSpec) error
}
07070100000422000081A4000000000000000000000001645E367C0000026A000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/interface_experimental.go  package client // import "github.com/docker/docker/client"

import (
	"context"

	"github.com/docker/docker/api/types"
)

type apiClientExperimental interface {
	CheckpointAPIClient
}

// CheckpointAPIClient defines API client methods for the checkpoints
type CheckpointAPIClient interface {
	CheckpointCreate(ctx context.Context, container string, options types.CheckpointCreateOptions) error
	CheckpointDelete(ctx context.Context, container string, options types.CheckpointDeleteOptions) error
	CheckpointList(ctx context.Context, container string, options types.CheckpointListOptions) ([]types.Checkpoint, error)
}
  07070100000423000081A4000000000000000000000001645E367C0000012A000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/interface_stable.go    package client // import "github.com/docker/docker/client"

// APIClient is an interface that clients that talk with a docker server must implement.
type APIClient interface {
	CommonAPIClient
	apiClientExperimental
}

// Ensure that Client always implements APIClient.
var _ APIClient = &Client{}
  07070100000424000081A4000000000000000000000001645E367C000002DD000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/login.go   package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"net/url"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/registry"
)

// RegistryLogin authenticates the docker server with a given docker registry.
// It returns unauthorizedError when the authentication fails.
func (cli *Client) RegistryLogin(ctx context.Context, auth types.AuthConfig) (registry.AuthenticateOKBody, error) {
	resp, err := cli.post(ctx, "/auth", url.Values{}, auth, nil)
	defer ensureReaderClosed(resp)

	if err != nil {
		return registry.AuthenticateOKBody{}, err
	}

	var response registry.AuthenticateOKBody
	err = json.NewDecoder(resp.body).Decode(&response)
	return response, err
}
   07070100000425000081A4000000000000000000000001645E367C00000248000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/network_connect.go package client // import "github.com/docker/docker/client"

import (
	"context"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/network"
)

// NetworkConnect connects a container to an existent network in the docker host.
func (cli *Client) NetworkConnect(ctx context.Context, networkID, containerID string, config *network.EndpointSettings) error {
	nc := types.NetworkConnect{
		Container:      containerID,
		EndpointConfig: config,
	}
	resp, err := cli.post(ctx, "/networks/"+networkID+"/connect", nil, nc, nil)
	ensureReaderClosed(resp)
	return err
}
07070100000426000081A4000000000000000000000001645E367C000002DA000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/network_create.go  package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"

	"github.com/docker/docker/api/types"
)

// NetworkCreate creates a new network in the docker host.
func (cli *Client) NetworkCreate(ctx context.Context, name string, options types.NetworkCreate) (types.NetworkCreateResponse, error) {
	networkCreateRequest := types.NetworkCreateRequest{
		NetworkCreate: options,
		Name:          name,
	}
	var response types.NetworkCreateResponse
	serverResp, err := cli.post(ctx, "/networks/create", nil, networkCreateRequest, nil)
	defer ensureReaderClosed(serverResp)
	if err != nil {
		return response, err
	}

	err = json.NewDecoder(serverResp.body).Decode(&response)
	return response, err
}
  07070100000427000081A4000000000000000000000001645E367C000001FE000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/network_disconnect.go  package client // import "github.com/docker/docker/client"

import (
	"context"

	"github.com/docker/docker/api/types"
)

// NetworkDisconnect disconnects a container from an existent network in the docker host.
func (cli *Client) NetworkDisconnect(ctx context.Context, networkID, containerID string, force bool) error {
	nd := types.NetworkDisconnect{Container: containerID, Force: force}
	resp, err := cli.post(ctx, "/networks/"+networkID+"/disconnect", nil, nd, nil)
	ensureReaderClosed(resp)
	return err
}
  07070100000428000081A4000000000000000000000001645E367C000005FD000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/network_inspect.go package client // import "github.com/docker/docker/client"

import (
	"bytes"
	"context"
	"encoding/json"
	"io"
	"net/url"

	"github.com/docker/docker/api/types"
)

// NetworkInspect returns the information for a specific network configured in the docker host.
func (cli *Client) NetworkInspect(ctx context.Context, networkID string, options types.NetworkInspectOptions) (types.NetworkResource, error) {
	networkResource, _, err := cli.NetworkInspectWithRaw(ctx, networkID, options)
	return networkResource, err
}

// NetworkInspectWithRaw returns the information for a specific network configured in the docker host and its raw representation.
func (cli *Client) NetworkInspectWithRaw(ctx context.Context, networkID string, options types.NetworkInspectOptions) (types.NetworkResource, []byte, error) {
	if networkID == "" {
		return types.NetworkResource{}, nil, objectNotFoundError{object: "network", id: networkID}
	}
	var (
		networkResource types.NetworkResource
		resp            serverResponse
		err             error
	)
	query := url.Values{}
	if options.Verbose {
		query.Set("verbose", "true")
	}
	if options.Scope != "" {
		query.Set("scope", options.Scope)
	}
	resp, err = cli.get(ctx, "/networks/"+networkID, query, nil)
	defer ensureReaderClosed(resp)
	if err != nil {
		return networkResource, nil, err
	}

	body, err := io.ReadAll(resp.body)
	if err != nil {
		return networkResource, nil, err
	}
	rdr := bytes.NewReader(body)
	err = json.NewDecoder(rdr).Decode(&networkResource)
	return networkResource, body, err
}
   07070100000429000081A4000000000000000000000001645E367C000003A3000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/network_list.go    package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"net/url"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/filters"
)

// NetworkList returns the list of networks configured in the docker host.
func (cli *Client) NetworkList(ctx context.Context, options types.NetworkListOptions) ([]types.NetworkResource, error) {
	query := url.Values{}
	if options.Filters.Len() > 0 {
		//nolint:staticcheck // ignore SA1019 for old code
		filterJSON, err := filters.ToParamWithVersion(cli.version, options.Filters)
		if err != nil {
			return nil, err
		}

		query.Set("filters", filterJSON)
	}
	var networkResources []types.NetworkResource
	resp, err := cli.get(ctx, "/networks", query, nil)
	defer ensureReaderClosed(resp)
	if err != nil {
		return networkResources, err
	}
	err = json.NewDecoder(resp.body).Decode(&networkResources)
	return networkResources, err
}
 0707010000042A000081A4000000000000000000000001645E367C0000039A000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/network_prune.go   package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"fmt"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/filters"
)

// NetworksPrune requests the daemon to delete unused networks
func (cli *Client) NetworksPrune(ctx context.Context, pruneFilters filters.Args) (types.NetworksPruneReport, error) {
	var report types.NetworksPruneReport

	if err := cli.NewVersionError("1.25", "network prune"); err != nil {
		return report, err
	}

	query, err := getFiltersQuery(pruneFilters)
	if err != nil {
		return report, err
	}

	serverResp, err := cli.post(ctx, "/networks/prune", query, nil, nil)
	defer ensureReaderClosed(serverResp)
	if err != nil {
		return report, err
	}

	if err := json.NewDecoder(serverResp.body).Decode(&report); err != nil {
		return report, fmt.Errorf("Error retrieving network prune report: %v", err)
	}

	return report, nil
}
  0707010000042B000081A4000000000000000000000001645E367C0000014F000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/network_remove.go  package client // import "github.com/docker/docker/client"

import "context"

// NetworkRemove removes an existent network from the docker host.
func (cli *Client) NetworkRemove(ctx context.Context, networkID string) error {
	resp, err := cli.delete(ctx, "/networks/"+networkID, nil, nil)
	defer ensureReaderClosed(resp)
	return err
}
 0707010000042C000081A4000000000000000000000001645E367C00000318000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/node_inspect.go    package client // import "github.com/docker/docker/client"

import (
	"bytes"
	"context"
	"encoding/json"
	"io"

	"github.com/docker/docker/api/types/swarm"
)

// NodeInspectWithRaw returns the node information.
func (cli *Client) NodeInspectWithRaw(ctx context.Context, nodeID string) (swarm.Node, []byte, error) {
	if nodeID == "" {
		return swarm.Node{}, nil, objectNotFoundError{object: "node", id: nodeID}
	}
	serverResp, err := cli.get(ctx, "/nodes/"+nodeID, nil, nil)
	defer ensureReaderClosed(serverResp)
	if err != nil {
		return swarm.Node{}, nil, err
	}

	body, err := io.ReadAll(serverResp.body)
	if err != nil {
		return swarm.Node{}, nil, err
	}

	var response swarm.Node
	rdr := bytes.NewReader(body)
	err = json.NewDecoder(rdr).Decode(&response)
	return response, body, err
}
0707010000042D000081A4000000000000000000000001645E367C00000314000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/node_list.go   package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"net/url"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/filters"
	"github.com/docker/docker/api/types/swarm"
)

// NodeList returns the list of nodes.
func (cli *Client) NodeList(ctx context.Context, options types.NodeListOptions) ([]swarm.Node, error) {
	query := url.Values{}

	if options.Filters.Len() > 0 {
		filterJSON, err := filters.ToJSON(options.Filters)

		if err != nil {
			return nil, err
		}

		query.Set("filters", filterJSON)
	}

	resp, err := cli.get(ctx, "/nodes", query, nil)
	defer ensureReaderClosed(resp)
	if err != nil {
		return nil, err
	}

	var nodes []swarm.Node
	err = json.NewDecoder(resp.body).Decode(&nodes)
	return nodes, err
}
0707010000042E000081A4000000000000000000000001645E367C000001C1000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/node_remove.go package client // import "github.com/docker/docker/client"

import (
	"context"
	"net/url"

	"github.com/docker/docker/api/types"
)

// NodeRemove removes a Node.
func (cli *Client) NodeRemove(ctx context.Context, nodeID string, options types.NodeRemoveOptions) error {
	query := url.Values{}
	if options.Force {
		query.Set("force", "1")
	}

	resp, err := cli.delete(ctx, "/nodes/"+nodeID, query, nil)
	defer ensureReaderClosed(resp)
	return err
}
   0707010000042F000081A4000000000000000000000001645E367C000001D0000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/node_update.go package client // import "github.com/docker/docker/client"

import (
	"context"
	"net/url"

	"github.com/docker/docker/api/types/swarm"
)

// NodeUpdate updates a Node.
func (cli *Client) NodeUpdate(ctx context.Context, nodeID string, version swarm.Version, node swarm.NodeSpec) error {
	query := url.Values{}
	query.Set("version", version.String())
	resp, err := cli.post(ctx, "/nodes/"+nodeID+"/update", query, node, nil)
	ensureReaderClosed(resp)
	return err
}
07070100000430000081A4000000000000000000000001645E367C0000183E000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/options.go package client

import (
	"context"
	"net"
	"net/http"
	"os"
	"path/filepath"
	"time"

	"github.com/docker/go-connections/sockets"
	"github.com/docker/go-connections/tlsconfig"
	"github.com/pkg/errors"
)

// Opt is a configuration option to initialize a client
type Opt func(*Client) error

// FromEnv configures the client with values from environment variables.
//
// FromEnv uses the following environment variables:
//
// DOCKER_HOST (EnvOverrideHost) to set the URL to the docker server.
//
// DOCKER_API_VERSION (EnvOverrideAPIVersion) to set the version of the API to
// use, leave empty for latest.
//
// DOCKER_CERT_PATH (EnvOverrideCertPath) to specify the directory from which to
// load the TLS certificates (ca.pem, cert.pem, key.pem).
//
// DOCKER_TLS_VERIFY (EnvTLSVerify) to enable or disable TLS verification (off by
// default).
func FromEnv(c *Client) error {
	ops := []Opt{
		WithTLSClientConfigFromEnv(),
		WithHostFromEnv(),
		WithVersionFromEnv(),
	}
	for _, op := range ops {
		if err := op(c); err != nil {
			return err
		}
	}
	return nil
}

// WithDialContext applies the dialer to the client transport. This can be
// used to set the Timeout and KeepAlive settings of the client.
func WithDialContext(dialContext func(ctx context.Context, network, addr string) (net.Conn, error)) Opt {
	return func(c *Client) error {
		if transport, ok := c.client.Transport.(*http.Transport); ok {
			transport.DialContext = dialContext
			return nil
		}
		return errors.Errorf("cannot apply dialer to transport: %T", c.client.Transport)
	}
}

// WithHost overrides the client host with the specified one.
func WithHost(host string) Opt {
	return func(c *Client) error {
		hostURL, err := ParseHostURL(host)
		if err != nil {
			return err
		}
		c.host = host
		c.proto = hostURL.Scheme
		c.addr = hostURL.Host
		c.basePath = hostURL.Path
		if transport, ok := c.client.Transport.(*http.Transport); ok {
			return sockets.ConfigureTransport(transport, c.proto, c.addr)
		}
		return errors.Errorf("cannot apply host to transport: %T", c.client.Transport)
	}
}

// WithHostFromEnv overrides the client host with the host specified in the
// DOCKER_HOST (EnvOverrideHost) environment variable. If DOCKER_HOST is not set,
// or set to an empty value, the host is not modified.
func WithHostFromEnv() Opt {
	return func(c *Client) error {
		if host := os.Getenv(EnvOverrideHost); host != "" {
			return WithHost(host)(c)
		}
		return nil
	}
}

// WithHTTPClient overrides the client http client with the specified one
func WithHTTPClient(client *http.Client) Opt {
	return func(c *Client) error {
		if client != nil {
			c.client = client
		}
		return nil
	}
}

// WithTimeout configures the time limit for requests made by the HTTP client
func WithTimeout(timeout time.Duration) Opt {
	return func(c *Client) error {
		c.client.Timeout = timeout
		return nil
	}
}

// WithHTTPHeaders overrides the client default http headers
func WithHTTPHeaders(headers map[string]string) Opt {
	return func(c *Client) error {
		c.customHTTPHeaders = headers
		return nil
	}
}

// WithScheme overrides the client scheme with the specified one
func WithScheme(scheme string) Opt {
	return func(c *Client) error {
		c.scheme = scheme
		return nil
	}
}

// WithTLSClientConfig applies a tls config to the client transport.
func WithTLSClientConfig(cacertPath, certPath, keyPath string) Opt {
	return func(c *Client) error {
		opts := tlsconfig.Options{
			CAFile:             cacertPath,
			CertFile:           certPath,
			KeyFile:            keyPath,
			ExclusiveRootPools: true,
		}
		config, err := tlsconfig.Client(opts)
		if err != nil {
			return errors.Wrap(err, "failed to create tls config")
		}
		if transport, ok := c.client.Transport.(*http.Transport); ok {
			transport.TLSClientConfig = config
			return nil
		}
		return errors.Errorf("cannot apply tls config to transport: %T", c.client.Transport)
	}
}

// WithTLSClientConfigFromEnv configures the client's TLS settings with the
// settings in the DOCKER_CERT_PATH and DOCKER_TLS_VERIFY environment variables.
// If DOCKER_CERT_PATH is not set or empty, TLS configuration is not modified.
//
// WithTLSClientConfigFromEnv uses the following environment variables:
//
// DOCKER_CERT_PATH (EnvOverrideCertPath) to specify the directory from which to
// load the TLS certificates (ca.pem, cert.pem, key.pem).
//
// DOCKER_TLS_VERIFY (EnvTLSVerify) to enable or disable TLS verification (off by
// default).
func WithTLSClientConfigFromEnv() Opt {
	return func(c *Client) error {
		dockerCertPath := os.Getenv(EnvOverrideCertPath)
		if dockerCertPath == "" {
			return nil
		}
		options := tlsconfig.Options{
			CAFile:             filepath.Join(dockerCertPath, "ca.pem"),
			CertFile:           filepath.Join(dockerCertPath, "cert.pem"),
			KeyFile:            filepath.Join(dockerCertPath, "key.pem"),
			InsecureSkipVerify: os.Getenv(EnvTLSVerify) == "",
		}
		tlsc, err := tlsconfig.Client(options)
		if err != nil {
			return err
		}

		c.client = &http.Client{
			Transport:     &http.Transport{TLSClientConfig: tlsc},
			CheckRedirect: CheckRedirect,
		}
		return nil
	}
}

// WithVersion overrides the client version with the specified one. If an empty
// version is specified, the value will be ignored to allow version negotiation.
func WithVersion(version string) Opt {
	return func(c *Client) error {
		if version != "" {
			c.version = version
			c.manualOverride = true
		}
		return nil
	}
}

// WithVersionFromEnv overrides the client version with the version specified in
// the DOCKER_API_VERSION environment variable. If DOCKER_API_VERSION is not set,
// the version is not modified.
func WithVersionFromEnv() Opt {
	return func(c *Client) error {
		return WithVersion(os.Getenv(EnvOverrideAPIVersion))(c)
	}
}

// WithAPIVersionNegotiation enables automatic API version negotiation for the client.
// With this option enabled, the client automatically negotiates the API version
// to use when making requests. API version negotiation is performed on the first
// request; subsequent requests will not re-negotiate.
func WithAPIVersionNegotiation() Opt {
	return func(c *Client) error {
		c.negotiateVersion = true
		return nil
	}
}
  07070100000431000081A4000000000000000000000001645E367C00000976000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/ping.go    package client // import "github.com/docker/docker/client"

import (
	"context"
	"net/http"
	"path"
	"strings"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/swarm"
	"github.com/docker/docker/errdefs"
)

// Ping pings the server and returns the value of the "Docker-Experimental",
// "Builder-Version", "OS-Type" & "API-Version" headers. It attempts to use
// a HEAD request on the endpoint, but falls back to GET if HEAD is not supported
// by the daemon.
func (cli *Client) Ping(ctx context.Context) (types.Ping, error) {
	var ping types.Ping

	// Using cli.buildRequest() + cli.doRequest() instead of cli.sendRequest()
	// because ping requests are used during API version negotiation, so we want
	// to hit the non-versioned /_ping endpoint, not /v1.xx/_ping
	req, err := cli.buildRequest(http.MethodHead, path.Join(cli.basePath, "/_ping"), nil, nil)
	if err != nil {
		return ping, err
	}
	serverResp, err := cli.doRequest(ctx, req)
	if err == nil {
		defer ensureReaderClosed(serverResp)
		switch serverResp.statusCode {
		case http.StatusOK, http.StatusInternalServerError:
			// Server handled the request, so parse the response
			return parsePingResponse(cli, serverResp)
		}
	} else if IsErrConnectionFailed(err) {
		return ping, err
	}

	req, err = cli.buildRequest(http.MethodGet, path.Join(cli.basePath, "/_ping"), nil, nil)
	if err != nil {
		return ping, err
	}
	serverResp, err = cli.doRequest(ctx, req)
	defer ensureReaderClosed(serverResp)
	if err != nil {
		return ping, err
	}
	return parsePingResponse(cli, serverResp)
}

func parsePingResponse(cli *Client, resp serverResponse) (types.Ping, error) {
	var ping types.Ping
	if resp.header == nil {
		err := cli.checkResponseErr(resp)
		return ping, errdefs.FromStatusCode(err, resp.statusCode)
	}
	ping.APIVersion = resp.header.Get("API-Version")
	ping.OSType = resp.header.Get("OSType")
	if resp.header.Get("Docker-Experimental") == "true" {
		ping.Experimental = true
	}
	if bv := resp.header.Get("Builder-Version"); bv != "" {
		ping.BuilderVersion = types.BuilderVersion(bv)
	}
	if si := resp.header.Get("Swarm"); si != "" {
		parts := strings.SplitN(si, "/", 2)
		ping.SwarmStatus = &swarm.Status{
			NodeState:        swarm.LocalNodeState(parts[0]),
			ControlAvailable: len(parts) == 2 && parts[1] == "manager",
		}
	}
	err := cli.checkResponseErr(resp)
	return ping, errdefs.FromStatusCode(err, resp.statusCode)
}
  07070100000432000081A4000000000000000000000001645E367C00000259000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/plugin_create.go   package client // import "github.com/docker/docker/client"

import (
	"context"
	"io"
	"net/http"
	"net/url"

	"github.com/docker/docker/api/types"
)

// PluginCreate creates a plugin
func (cli *Client) PluginCreate(ctx context.Context, createContext io.Reader, createOptions types.PluginCreateOptions) error {
	headers := http.Header(make(map[string][]string))
	headers.Set("Content-Type", "application/x-tar")

	query := url.Values{}
	query.Set("name", createOptions.RepoName)

	resp, err := cli.postRaw(ctx, "/plugins/create", query, createContext, headers)
	ensureReaderClosed(resp)
	return err
}
   07070100000433000081A4000000000000000000000001645E367C000001D1000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/plugin_disable.go  package client // import "github.com/docker/docker/client"

import (
	"context"
	"net/url"

	"github.com/docker/docker/api/types"
)

// PluginDisable disables a plugin
func (cli *Client) PluginDisable(ctx context.Context, name string, options types.PluginDisableOptions) error {
	query := url.Values{}
	if options.Force {
		query.Set("force", "1")
	}
	resp, err := cli.post(ctx, "/plugins/"+name+"/disable", query, nil, nil)
	ensureReaderClosed(resp)
	return err
}
   07070100000434000081A4000000000000000000000001645E367C000001DC000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/plugin_enable.go   package client // import "github.com/docker/docker/client"

import (
	"context"
	"net/url"
	"strconv"

	"github.com/docker/docker/api/types"
)

// PluginEnable enables a plugin
func (cli *Client) PluginEnable(ctx context.Context, name string, options types.PluginEnableOptions) error {
	query := url.Values{}
	query.Set("timeout", strconv.Itoa(options.Timeout))

	resp, err := cli.post(ctx, "/plugins/"+name+"/enable", query, nil, nil)
	ensureReaderClosed(resp)
	return err
}
07070100000435000081A4000000000000000000000001645E367C000002DB000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/plugin_inspect.go  package client // import "github.com/docker/docker/client"

import (
	"bytes"
	"context"
	"encoding/json"
	"io"

	"github.com/docker/docker/api/types"
)

// PluginInspectWithRaw inspects an existing plugin
func (cli *Client) PluginInspectWithRaw(ctx context.Context, name string) (*types.Plugin, []byte, error) {
	if name == "" {
		return nil, nil, objectNotFoundError{object: "plugin", id: name}
	}
	resp, err := cli.get(ctx, "/plugins/"+name+"/json", nil, nil)
	defer ensureReaderClosed(resp)
	if err != nil {
		return nil, nil, err
	}

	body, err := io.ReadAll(resp.body)
	if err != nil {
		return nil, nil, err
	}
	var p types.Plugin
	rdr := bytes.NewReader(body)
	err = json.NewDecoder(rdr).Decode(&p)
	return &p, body, err
}
 07070100000436000081A4000000000000000000000001645E367C00000D52000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/plugin_install.go  package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"io"
	"net/url"

	"github.com/docker/distribution/reference"
	"github.com/docker/docker/api/types"
	"github.com/docker/docker/errdefs"
	"github.com/pkg/errors"
)

// PluginInstall installs a plugin
func (cli *Client) PluginInstall(ctx context.Context, name string, options types.PluginInstallOptions) (rc io.ReadCloser, err error) {
	query := url.Values{}
	if _, err := reference.ParseNormalizedNamed(options.RemoteRef); err != nil {
		return nil, errors.Wrap(err, "invalid remote reference")
	}
	query.Set("remote", options.RemoteRef)

	privileges, err := cli.checkPluginPermissions(ctx, query, options)
	if err != nil {
		return nil, err
	}

	// set name for plugin pull, if empty should default to remote reference
	query.Set("name", name)

	resp, err := cli.tryPluginPull(ctx, query, privileges, options.RegistryAuth)
	if err != nil {
		return nil, err
	}

	name = resp.header.Get("Docker-Plugin-Name")

	pr, pw := io.Pipe()
	go func() { // todo: the client should probably be designed more around the actual api
		_, err := io.Copy(pw, resp.body)
		if err != nil {
			pw.CloseWithError(err)
			return
		}
		defer func() {
			if err != nil {
				delResp, _ := cli.delete(ctx, "/plugins/"+name, nil, nil)
				ensureReaderClosed(delResp)
			}
		}()
		if len(options.Args) > 0 {
			if err := cli.PluginSet(ctx, name, options.Args); err != nil {
				pw.CloseWithError(err)
				return
			}
		}

		if options.Disabled {
			pw.Close()
			return
		}

		enableErr := cli.PluginEnable(ctx, name, types.PluginEnableOptions{Timeout: 0})
		pw.CloseWithError(enableErr)
	}()
	return pr, nil
}

func (cli *Client) tryPluginPrivileges(ctx context.Context, query url.Values, registryAuth string) (serverResponse, error) {
	headers := map[string][]string{"X-Registry-Auth": {registryAuth}}
	return cli.get(ctx, "/plugins/privileges", query, headers)
}

func (cli *Client) tryPluginPull(ctx context.Context, query url.Values, privileges types.PluginPrivileges, registryAuth string) (serverResponse, error) {
	headers := map[string][]string{"X-Registry-Auth": {registryAuth}}
	return cli.post(ctx, "/plugins/pull", query, privileges, headers)
}

func (cli *Client) checkPluginPermissions(ctx context.Context, query url.Values, options types.PluginInstallOptions) (types.PluginPrivileges, error) {
	resp, err := cli.tryPluginPrivileges(ctx, query, options.RegistryAuth)
	if errdefs.IsUnauthorized(err) && options.PrivilegeFunc != nil {
		// todo: do inspect before to check existing name before checking privileges
		newAuthHeader, privilegeErr := options.PrivilegeFunc()
		if privilegeErr != nil {
			ensureReaderClosed(resp)
			return nil, privilegeErr
		}
		options.RegistryAuth = newAuthHeader
		resp, err = cli.tryPluginPrivileges(ctx, query, options.RegistryAuth)
	}
	if err != nil {
		ensureReaderClosed(resp)
		return nil, err
	}

	var privileges types.PluginPrivileges
	if err := json.NewDecoder(resp.body).Decode(&privileges); err != nil {
		ensureReaderClosed(resp)
		return nil, err
	}
	ensureReaderClosed(resp)

	if !options.AcceptAllPermissions && options.AcceptPermissionsFunc != nil && len(privileges) > 0 {
		accept, err := options.AcceptPermissionsFunc(privileges)
		if err != nil {
			return nil, err
		}
		if !accept {
			return nil, pluginPermissionDenied{options.RemoteRef}
		}
	}
	return privileges, nil
}
  07070100000437000081A4000000000000000000000001645E367C00000348000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/plugin_list.go package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"net/url"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/filters"
)

// PluginList returns the installed plugins
func (cli *Client) PluginList(ctx context.Context, filter filters.Args) (types.PluginsListResponse, error) {
	var plugins types.PluginsListResponse
	query := url.Values{}

	if filter.Len() > 0 {
		//nolint:staticcheck // ignore SA1019 for old code
		filterJSON, err := filters.ToParamWithVersion(cli.version, filter)
		if err != nil {
			return plugins, err
		}
		query.Set("filters", filterJSON)
	}
	resp, err := cli.get(ctx, "/plugins", query, nil)
	defer ensureReaderClosed(resp)
	if err != nil {
		return plugins, err
	}

	err = json.NewDecoder(resp.body).Decode(&plugins)
	return plugins, err
}
07070100000438000081A4000000000000000000000001645E367C000001BE000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/plugin_push.go package client // import "github.com/docker/docker/client"

import (
	"context"
	"io"
)

// PluginPush pushes a plugin to a registry
func (cli *Client) PluginPush(ctx context.Context, name string, registryAuth string) (io.ReadCloser, error) {
	headers := map[string][]string{"X-Registry-Auth": {registryAuth}}
	resp, err := cli.post(ctx, "/plugins/"+name+"/push", nil, nil, headers)
	if err != nil {
		return nil, err
	}
	return resp.body, nil
}
  07070100000439000081A4000000000000000000000001645E367C000001C6000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/plugin_remove.go   package client // import "github.com/docker/docker/client"

import (
	"context"
	"net/url"

	"github.com/docker/docker/api/types"
)

// PluginRemove removes a plugin
func (cli *Client) PluginRemove(ctx context.Context, name string, options types.PluginRemoveOptions) error {
	query := url.Values{}
	if options.Force {
		query.Set("force", "1")
	}

	resp, err := cli.delete(ctx, "/plugins/"+name, query, nil)
	defer ensureReaderClosed(resp)
	return err
}
  0707010000043A000081A4000000000000000000000001645E367C0000014C000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/plugin_set.go  package client // import "github.com/docker/docker/client"

import (
	"context"
)

// PluginSet modifies settings for an existing plugin
func (cli *Client) PluginSet(ctx context.Context, name string, args []string) error {
	resp, err := cli.post(ctx, "/plugins/"+name+"/set", nil, args, nil)
	ensureReaderClosed(resp)
	return err
}
0707010000043B000081A4000000000000000000000001645E367C000004DB000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/plugin_upgrade.go  package client // import "github.com/docker/docker/client"

import (
	"context"
	"io"
	"net/url"

	"github.com/docker/distribution/reference"
	"github.com/docker/docker/api/types"
	"github.com/pkg/errors"
)

// PluginUpgrade upgrades a plugin
func (cli *Client) PluginUpgrade(ctx context.Context, name string, options types.PluginInstallOptions) (rc io.ReadCloser, err error) {
	if err := cli.NewVersionError("1.26", "plugin upgrade"); err != nil {
		return nil, err
	}
	query := url.Values{}
	if _, err := reference.ParseNormalizedNamed(options.RemoteRef); err != nil {
		return nil, errors.Wrap(err, "invalid remote reference")
	}
	query.Set("remote", options.RemoteRef)

	privileges, err := cli.checkPluginPermissions(ctx, query, options)
	if err != nil {
		return nil, err
	}

	resp, err := cli.tryPluginUpgrade(ctx, query, privileges, name, options.RegistryAuth)
	if err != nil {
		return nil, err
	}
	return resp.body, nil
}

func (cli *Client) tryPluginUpgrade(ctx context.Context, query url.Values, privileges types.PluginPrivileges, name, registryAuth string) (serverResponse, error) {
	headers := map[string][]string{"X-Registry-Auth": {registryAuth}}
	return cli.post(ctx, "/plugins/"+name+"/upgrade", query, privileges, headers)
}
 0707010000043C000081A4000000000000000000000001645E367C000025CF000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/request.go package client // import "github.com/docker/docker/client"

import (
	"bytes"
	"context"
	"encoding/json"
	"fmt"
	"io"
	"net"
	"net/http"
	"net/url"
	"os"
	"strings"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/versions"
	"github.com/docker/docker/errdefs"
	"github.com/pkg/errors"
)

// serverResponse is a wrapper for http API responses.
type serverResponse struct {
	body       io.ReadCloser
	header     http.Header
	statusCode int
	reqURL     *url.URL
}

// head sends an http request to the docker API using the method HEAD.
func (cli *Client) head(ctx context.Context, path string, query url.Values, headers map[string][]string) (serverResponse, error) {
	return cli.sendRequest(ctx, http.MethodHead, path, query, nil, headers)
}

// get sends an http request to the docker API using the method GET with a specific Go context.
func (cli *Client) get(ctx context.Context, path string, query url.Values, headers map[string][]string) (serverResponse, error) {
	return cli.sendRequest(ctx, http.MethodGet, path, query, nil, headers)
}

// post sends an http request to the docker API using the method POST with a specific Go context.
func (cli *Client) post(ctx context.Context, path string, query url.Values, obj interface{}, headers map[string][]string) (serverResponse, error) {
	body, headers, err := encodeBody(obj, headers)
	if err != nil {
		return serverResponse{}, err
	}
	return cli.sendRequest(ctx, http.MethodPost, path, query, body, headers)
}

func (cli *Client) postRaw(ctx context.Context, path string, query url.Values, body io.Reader, headers map[string][]string) (serverResponse, error) {
	return cli.sendRequest(ctx, http.MethodPost, path, query, body, headers)
}

func (cli *Client) put(ctx context.Context, path string, query url.Values, obj interface{}, headers map[string][]string) (serverResponse, error) {
	body, headers, err := encodeBody(obj, headers)
	if err != nil {
		return serverResponse{}, err
	}
	return cli.sendRequest(ctx, http.MethodPut, path, query, body, headers)
}

// putRaw sends an http request to the docker API using the method PUT.
func (cli *Client) putRaw(ctx context.Context, path string, query url.Values, body io.Reader, headers map[string][]string) (serverResponse, error) {
	return cli.sendRequest(ctx, http.MethodPut, path, query, body, headers)
}

// delete sends an http request to the docker API using the method DELETE.
func (cli *Client) delete(ctx context.Context, path string, query url.Values, headers map[string][]string) (serverResponse, error) {
	return cli.sendRequest(ctx, http.MethodDelete, path, query, nil, headers)
}

type headers map[string][]string

func encodeBody(obj interface{}, headers headers) (io.Reader, headers, error) {
	if obj == nil {
		return nil, headers, nil
	}

	body, err := encodeData(obj)
	if err != nil {
		return nil, headers, err
	}
	if headers == nil {
		headers = make(map[string][]string)
	}
	headers["Content-Type"] = []string{"application/json"}
	return body, headers, nil
}

func (cli *Client) buildRequest(method, path string, body io.Reader, headers headers) (*http.Request, error) {
	expectedPayload := (method == http.MethodPost || method == http.MethodPut)
	if expectedPayload && body == nil {
		body = bytes.NewReader([]byte{})
	}

	req, err := http.NewRequest(method, path, body)
	if err != nil {
		return nil, err
	}
	req = cli.addHeaders(req, headers)

	if cli.proto == "unix" || cli.proto == "npipe" {
		// For local communications, it doesn't matter what the host is. We just
		// need a valid and meaningful host name. (See #189)
		req.Host = "docker"
	}

	req.URL.Host = cli.addr
	req.URL.Scheme = cli.scheme

	if expectedPayload && req.Header.Get("Content-Type") == "" {
		req.Header.Set("Content-Type", "text/plain")
	}
	return req, nil
}

func (cli *Client) sendRequest(ctx context.Context, method, path string, query url.Values, body io.Reader, headers headers) (serverResponse, error) {
	req, err := cli.buildRequest(method, cli.getAPIPath(ctx, path, query), body, headers)
	if err != nil {
		return serverResponse{}, err
	}

	resp, err := cli.doRequest(ctx, req)
	switch {
	case errors.Is(err, context.Canceled):
		return serverResponse{}, errdefs.Cancelled(err)
	case errors.Is(err, context.DeadlineExceeded):
		return serverResponse{}, errdefs.Deadline(err)
	case err == nil:
		err = cli.checkResponseErr(resp)
	}
	return resp, errdefs.FromStatusCode(err, resp.statusCode)
}

func (cli *Client) doRequest(ctx context.Context, req *http.Request) (serverResponse, error) {
	serverResp := serverResponse{statusCode: -1, reqURL: req.URL}

	req = req.WithContext(ctx)
	resp, err := cli.client.Do(req)
	if err != nil {
		if cli.scheme != "https" && strings.Contains(err.Error(), "malformed HTTP response") {
			return serverResp, fmt.Errorf("%v.\n* Are you trying to connect to a TLS-enabled daemon without TLS?", err)
		}

		if cli.scheme == "https" && strings.Contains(err.Error(), "bad certificate") {
			return serverResp, errors.Wrap(err, "the server probably has client authentication (--tlsverify) enabled; check your TLS client certification settings")
		}

		// Don't decorate context sentinel errors; users may be comparing to
		// them directly.
		if errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) {
			return serverResp, err
		}

		if nErr, ok := err.(*url.Error); ok {
			if nErr, ok := nErr.Err.(*net.OpError); ok {
				if os.IsPermission(nErr.Err) {
					return serverResp, errors.Wrapf(err, "permission denied while trying to connect to the Docker daemon socket at %v", cli.host)
				}
			}
		}

		if err, ok := err.(net.Error); ok {
			if err.Timeout() {
				return serverResp, ErrorConnectionFailed(cli.host)
			}
			if strings.Contains(err.Error(), "connection refused") || strings.Contains(err.Error(), "dial unix") {
				return serverResp, ErrorConnectionFailed(cli.host)
			}
		}

		// Although there's not a strongly typed error for this in go-winio,
		// lots of people are using the default configuration for the docker
		// daemon on Windows where the daemon is listening on a named pipe
		// `//./pipe/docker_engine, and the client must be running elevated.
		// Give users a clue rather than the not-overly useful message
		// such as `error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.26/info:
		// open //./pipe/docker_engine: The system cannot find the file specified.`.
		// Note we can't string compare "The system cannot find the file specified" as
		// this is localised - for example in French the error would be
		// `open //./pipe/docker_engine: Le fichier spécifié est introuvable.`
		if strings.Contains(err.Error(), `open //./pipe/docker_engine`) {
			// Checks if client is running with elevated privileges
			if f, elevatedErr := os.Open("\\\\.\\PHYSICALDRIVE0"); elevatedErr == nil {
				err = errors.Wrap(err, "in the default daemon configuration on Windows, the docker client must be run with elevated privileges to connect")
			} else {
				f.Close()
				err = errors.Wrap(err, "this error may indicate that the docker daemon is not running")
			}
		}

		return serverResp, errors.Wrap(err, "error during connect")
	}

	if resp != nil {
		serverResp.statusCode = resp.StatusCode
		serverResp.body = resp.Body
		serverResp.header = resp.Header
	}
	return serverResp, nil
}

func (cli *Client) checkResponseErr(serverResp serverResponse) error {
	if serverResp.statusCode >= 200 && serverResp.statusCode < 400 {
		return nil
	}

	var body []byte
	var err error
	if serverResp.body != nil {
		bodyMax := 1 * 1024 * 1024 // 1 MiB
		bodyR := &io.LimitedReader{
			R: serverResp.body,
			N: int64(bodyMax),
		}
		body, err = io.ReadAll(bodyR)
		if err != nil {
			return err
		}
		if bodyR.N == 0 {
			return fmt.Errorf("request returned %s with a message (> %d bytes) for API route and version %s, check if the server supports the requested API version", http.StatusText(serverResp.statusCode), bodyMax, serverResp.reqURL)
		}
	}
	if len(body) == 0 {
		return fmt.Errorf("request returned %s for API route and version %s, check if the server supports the requested API version", http.StatusText(serverResp.statusCode), serverResp.reqURL)
	}

	var ct string
	if serverResp.header != nil {
		ct = serverResp.header.Get("Content-Type")
	}

	var errorMessage string
	if (cli.version == "" || versions.GreaterThan(cli.version, "1.23")) && ct == "application/json" {
		var errorResponse types.ErrorResponse
		if err := json.Unmarshal(body, &errorResponse); err != nil {
			return errors.Wrap(err, "Error reading JSON")
		}
		errorMessage = strings.TrimSpace(errorResponse.Message)
	} else {
		errorMessage = strings.TrimSpace(string(body))
	}

	return errors.Wrap(errors.New(errorMessage), "Error response from daemon")
}

func (cli *Client) addHeaders(req *http.Request, headers headers) *http.Request {
	// Add CLI Config's HTTP Headers BEFORE we set the Docker headers
	// then the user can't change OUR headers
	for k, v := range cli.customHTTPHeaders {
		if versions.LessThan(cli.version, "1.25") && http.CanonicalHeaderKey(k) == "User-Agent" {
			continue
		}
		req.Header.Set(k, v)
	}

	for k, v := range headers {
		req.Header[http.CanonicalHeaderKey(k)] = v
	}
	return req
}

func encodeData(data interface{}) (*bytes.Buffer, error) {
	params := bytes.NewBuffer(nil)
	if data != nil {
		if err := json.NewEncoder(params).Encode(data); err != nil {
			return nil, err
		}
	}
	return params, nil
}

func ensureReaderClosed(response serverResponse) {
	if response.body != nil {
		// Drain up to 512 bytes and close the body to let the Transport reuse the connection
		io.CopyN(io.Discard, response.body, 512)
		response.body.Close()
	}
}
 0707010000043D000081A4000000000000000000000001645E367C000002B3000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/secret_create.go   package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/swarm"
)

// SecretCreate creates a new secret.
func (cli *Client) SecretCreate(ctx context.Context, secret swarm.SecretSpec) (types.SecretCreateResponse, error) {
	var response types.SecretCreateResponse
	if err := cli.NewVersionError("1.25", "secret create"); err != nil {
		return response, err
	}
	resp, err := cli.post(ctx, "/secrets/create", nil, secret, nil)
	defer ensureReaderClosed(resp)
	if err != nil {
		return response, err
	}

	err = json.NewDecoder(resp.body).Decode(&response)
	return response, err
}
 0707010000043E000081A4000000000000000000000001645E367C0000037E000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/secret_inspect.go  package client // import "github.com/docker/docker/client"

import (
	"bytes"
	"context"
	"encoding/json"
	"io"

	"github.com/docker/docker/api/types/swarm"
)

// SecretInspectWithRaw returns the secret information with raw data
func (cli *Client) SecretInspectWithRaw(ctx context.Context, id string) (swarm.Secret, []byte, error) {
	if err := cli.NewVersionError("1.25", "secret inspect"); err != nil {
		return swarm.Secret{}, nil, err
	}
	if id == "" {
		return swarm.Secret{}, nil, objectNotFoundError{object: "secret", id: id}
	}
	resp, err := cli.get(ctx, "/secrets/"+id, nil, nil)
	defer ensureReaderClosed(resp)
	if err != nil {
		return swarm.Secret{}, nil, err
	}

	body, err := io.ReadAll(resp.body)
	if err != nil {
		return swarm.Secret{}, nil, err
	}

	var secret swarm.Secret
	rdr := bytes.NewReader(body)
	err = json.NewDecoder(rdr).Decode(&secret)

	return secret, body, err
}
  0707010000043F000081A4000000000000000000000001645E367C00000380000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/secret_list.go package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"net/url"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/filters"
	"github.com/docker/docker/api/types/swarm"
)

// SecretList returns the list of secrets.
func (cli *Client) SecretList(ctx context.Context, options types.SecretListOptions) ([]swarm.Secret, error) {
	if err := cli.NewVersionError("1.25", "secret list"); err != nil {
		return nil, err
	}
	query := url.Values{}

	if options.Filters.Len() > 0 {
		filterJSON, err := filters.ToJSON(options.Filters)
		if err != nil {
			return nil, err
		}

		query.Set("filters", filterJSON)
	}

	resp, err := cli.get(ctx, "/secrets", query, nil)
	defer ensureReaderClosed(resp)
	if err != nil {
		return nil, err
	}

	var secrets []swarm.Secret
	err = json.NewDecoder(resp.body).Decode(&secrets)
	return secrets, err
}
07070100000440000081A4000000000000000000000001645E367C00000174000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/secret_remove.go   package client // import "github.com/docker/docker/client"

import "context"

// SecretRemove removes a secret.
func (cli *Client) SecretRemove(ctx context.Context, id string) error {
	if err := cli.NewVersionError("1.25", "secret remove"); err != nil {
		return err
	}
	resp, err := cli.delete(ctx, "/secrets/"+id, nil, nil)
	defer ensureReaderClosed(resp)
	return err
}
07070100000441000081A4000000000000000000000001645E367C00000237000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/secret_update.go   package client // import "github.com/docker/docker/client"

import (
	"context"
	"net/url"

	"github.com/docker/docker/api/types/swarm"
)

// SecretUpdate attempts to update a secret.
func (cli *Client) SecretUpdate(ctx context.Context, id string, version swarm.Version, secret swarm.SecretSpec) error {
	if err := cli.NewVersionError("1.25", "secret update"); err != nil {
		return err
	}
	query := url.Values{}
	query.Set("version", version.String())
	resp, err := cli.post(ctx, "/secrets/"+id+"/update", query, secret, nil)
	ensureReaderClosed(resp)
	return err
}
 07070100000442000081A4000000000000000000000001645E367C000019D1000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/service_create.go  package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"fmt"
	"strings"

	"github.com/docker/distribution/reference"
	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/swarm"
	"github.com/opencontainers/go-digest"
	"github.com/pkg/errors"
)

// ServiceCreate creates a new service.
func (cli *Client) ServiceCreate(ctx context.Context, service swarm.ServiceSpec, options types.ServiceCreateOptions) (types.ServiceCreateResponse, error) {
	var response types.ServiceCreateResponse
	headers := map[string][]string{
		"version": {cli.version},
	}

	if options.EncodedRegistryAuth != "" {
		headers["X-Registry-Auth"] = []string{options.EncodedRegistryAuth}
	}

	// Make sure containerSpec is not nil when no runtime is set or the runtime is set to container
	if service.TaskTemplate.ContainerSpec == nil && (service.TaskTemplate.Runtime == "" || service.TaskTemplate.Runtime == swarm.RuntimeContainer) {
		service.TaskTemplate.ContainerSpec = &swarm.ContainerSpec{}
	}

	if err := validateServiceSpec(service); err != nil {
		return response, err
	}

	// ensure that the image is tagged
	var resolveWarning string
	switch {
	case service.TaskTemplate.ContainerSpec != nil:
		if taggedImg := imageWithTagString(service.TaskTemplate.ContainerSpec.Image); taggedImg != "" {
			service.TaskTemplate.ContainerSpec.Image = taggedImg
		}
		if options.QueryRegistry {
			resolveWarning = resolveContainerSpecImage(ctx, cli, &service.TaskTemplate, options.EncodedRegistryAuth)
		}
	case service.TaskTemplate.PluginSpec != nil:
		if taggedImg := imageWithTagString(service.TaskTemplate.PluginSpec.Remote); taggedImg != "" {
			service.TaskTemplate.PluginSpec.Remote = taggedImg
		}
		if options.QueryRegistry {
			resolveWarning = resolvePluginSpecRemote(ctx, cli, &service.TaskTemplate, options.EncodedRegistryAuth)
		}
	}

	resp, err := cli.post(ctx, "/services/create", nil, service, headers)
	defer ensureReaderClosed(resp)
	if err != nil {
		return response, err
	}

	err = json.NewDecoder(resp.body).Decode(&response)
	if resolveWarning != "" {
		response.Warnings = append(response.Warnings, resolveWarning)
	}

	return response, err
}

func resolveContainerSpecImage(ctx context.Context, cli DistributionAPIClient, taskSpec *swarm.TaskSpec, encodedAuth string) string {
	var warning string
	if img, imgPlatforms, err := imageDigestAndPlatforms(ctx, cli, taskSpec.ContainerSpec.Image, encodedAuth); err != nil {
		warning = digestWarning(taskSpec.ContainerSpec.Image)
	} else {
		taskSpec.ContainerSpec.Image = img
		if len(imgPlatforms) > 0 {
			if taskSpec.Placement == nil {
				taskSpec.Placement = &swarm.Placement{}
			}
			taskSpec.Placement.Platforms = imgPlatforms
		}
	}
	return warning
}

func resolvePluginSpecRemote(ctx context.Context, cli DistributionAPIClient, taskSpec *swarm.TaskSpec, encodedAuth string) string {
	var warning string
	if img, imgPlatforms, err := imageDigestAndPlatforms(ctx, cli, taskSpec.PluginSpec.Remote, encodedAuth); err != nil {
		warning = digestWarning(taskSpec.PluginSpec.Remote)
	} else {
		taskSpec.PluginSpec.Remote = img
		if len(imgPlatforms) > 0 {
			if taskSpec.Placement == nil {
				taskSpec.Placement = &swarm.Placement{}
			}
			taskSpec.Placement.Platforms = imgPlatforms
		}
	}
	return warning
}

func imageDigestAndPlatforms(ctx context.Context, cli DistributionAPIClient, image, encodedAuth string) (string, []swarm.Platform, error) {
	distributionInspect, err := cli.DistributionInspect(ctx, image, encodedAuth)
	var platforms []swarm.Platform
	if err != nil {
		return "", nil, err
	}

	imageWithDigest := imageWithDigestString(image, distributionInspect.Descriptor.Digest)

	if len(distributionInspect.Platforms) > 0 {
		platforms = make([]swarm.Platform, 0, len(distributionInspect.Platforms))
		for _, p := range distributionInspect.Platforms {
			// clear architecture field for arm. This is a temporary patch to address
			// https://github.com/docker/swarmkit/issues/2294. The issue is that while
			// image manifests report "arm" as the architecture, the node reports
			// something like "armv7l" (includes the variant), which causes arm images
			// to stop working with swarm mode. This patch removes the architecture
			// constraint for arm images to ensure tasks get scheduled.
			arch := p.Architecture
			if strings.ToLower(arch) == "arm" {
				arch = ""
			}
			platforms = append(platforms, swarm.Platform{
				Architecture: arch,
				OS:           p.OS,
			})
		}
	}
	return imageWithDigest, platforms, err
}

// imageWithDigestString takes an image string and a digest, and updates
// the image string if it didn't originally contain a digest. It returns
// image unmodified in other situations.
func imageWithDigestString(image string, dgst digest.Digest) string {
	namedRef, err := reference.ParseNormalizedNamed(image)
	if err == nil {
		if _, isCanonical := namedRef.(reference.Canonical); !isCanonical {
			// ensure that image gets a default tag if none is provided
			img, err := reference.WithDigest(namedRef, dgst)
			if err == nil {
				return reference.FamiliarString(img)
			}
		}
	}
	return image
}

// imageWithTagString takes an image string, and returns a tagged image
// string, adding a 'latest' tag if one was not provided. It returns an
// empty string if a canonical reference was provided
func imageWithTagString(image string) string {
	namedRef, err := reference.ParseNormalizedNamed(image)
	if err == nil {
		return reference.FamiliarString(reference.TagNameOnly(namedRef))
	}
	return ""
}

// digestWarning constructs a formatted warning string using the
// image name that could not be pinned by digest. The formatting
// is hardcoded, but could me made smarter in the future
func digestWarning(image string) string {
	return fmt.Sprintf("image %s could not be accessed on a registry to record\nits digest. Each node will access %s independently,\npossibly leading to different nodes running different\nversions of the image.\n", image, image)
}

func validateServiceSpec(s swarm.ServiceSpec) error {
	if s.TaskTemplate.ContainerSpec != nil && s.TaskTemplate.PluginSpec != nil {
		return errors.New("must not specify both a container spec and a plugin spec in the task template")
	}
	if s.TaskTemplate.PluginSpec != nil && s.TaskTemplate.Runtime != swarm.RuntimePlugin {
		return errors.New("mismatched runtime with plugin spec")
	}
	if s.TaskTemplate.ContainerSpec != nil && (s.TaskTemplate.Runtime != "" && s.TaskTemplate.Runtime != swarm.RuntimeContainer) {
		return errors.New("mismatched runtime with container spec")
	}
	return nil
}
   07070100000443000081A4000000000000000000000001645E367C0000040B000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/service_inspect.go package client // import "github.com/docker/docker/client"

import (
	"bytes"
	"context"
	"encoding/json"
	"fmt"
	"io"
	"net/url"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/swarm"
)

// ServiceInspectWithRaw returns the service information and the raw data.
func (cli *Client) ServiceInspectWithRaw(ctx context.Context, serviceID string, opts types.ServiceInspectOptions) (swarm.Service, []byte, error) {
	if serviceID == "" {
		return swarm.Service{}, nil, objectNotFoundError{object: "service", id: serviceID}
	}
	query := url.Values{}
	query.Set("insertDefaults", fmt.Sprintf("%v", opts.InsertDefaults))
	serverResp, err := cli.get(ctx, "/services/"+serviceID, query, nil)
	defer ensureReaderClosed(serverResp)
	if err != nil {
		return swarm.Service{}, nil, err
	}

	body, err := io.ReadAll(serverResp.body)
	if err != nil {
		return swarm.Service{}, nil, err
	}

	var response swarm.Service
	rdr := bytes.NewReader(body)
	err = json.NewDecoder(rdr).Decode(&response)
	return response, body, err
}
 07070100000444000081A4000000000000000000000001645E367C00000368000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/service_list.go    package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"net/url"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/filters"
	"github.com/docker/docker/api/types/swarm"
)

// ServiceList returns the list of services.
func (cli *Client) ServiceList(ctx context.Context, options types.ServiceListOptions) ([]swarm.Service, error) {
	query := url.Values{}

	if options.Filters.Len() > 0 {
		filterJSON, err := filters.ToJSON(options.Filters)
		if err != nil {
			return nil, err
		}

		query.Set("filters", filterJSON)
	}

	if options.Status {
		query.Set("status", "true")
	}

	resp, err := cli.get(ctx, "/services", query, nil)
	defer ensureReaderClosed(resp)
	if err != nil {
		return nil, err
	}

	var services []swarm.Service
	err = json.NewDecoder(resp.body).Decode(&services)
	return services, err
}
07070100000445000081A4000000000000000000000001645E367C0000047B000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/service_logs.go    package client // import "github.com/docker/docker/client"

import (
	"context"
	"io"
	"net/url"
	"time"

	"github.com/docker/docker/api/types"
	timetypes "github.com/docker/docker/api/types/time"
	"github.com/pkg/errors"
)

// ServiceLogs returns the logs generated by a service in an io.ReadCloser.
// It's up to the caller to close the stream.
func (cli *Client) ServiceLogs(ctx context.Context, serviceID string, options types.ContainerLogsOptions) (io.ReadCloser, error) {
	query := url.Values{}
	if options.ShowStdout {
		query.Set("stdout", "1")
	}

	if options.ShowStderr {
		query.Set("stderr", "1")
	}

	if options.Since != "" {
		ts, err := timetypes.GetTimestamp(options.Since, time.Now())
		if err != nil {
			return nil, errors.Wrap(err, `invalid value for "since"`)
		}
		query.Set("since", ts)
	}

	if options.Timestamps {
		query.Set("timestamps", "1")
	}

	if options.Details {
		query.Set("details", "1")
	}

	if options.Follow {
		query.Set("follow", "1")
	}
	query.Set("tail", options.Tail)

	resp, err := cli.get(ctx, "/services/"+serviceID+"/logs", query, nil)
	if err != nil {
		return nil, err
	}
	return resp.body, nil
}
 07070100000446000081A4000000000000000000000001645E367C0000013A000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/service_remove.go  package client // import "github.com/docker/docker/client"

import "context"

// ServiceRemove kills and removes a service.
func (cli *Client) ServiceRemove(ctx context.Context, serviceID string) error {
	resp, err := cli.delete(ctx, "/services/"+serviceID, nil, nil)
	defer ensureReaderClosed(resp)
	return err
}
  07070100000447000081A4000000000000000000000001645E367C00000900000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/service_update.go  package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"net/url"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/swarm"
)

// ServiceUpdate updates a Service. The version number is required to avoid conflicting writes.
// It should be the value as set *before* the update. You can find this value in the Meta field
// of swarm.Service, which can be found using ServiceInspectWithRaw.
func (cli *Client) ServiceUpdate(ctx context.Context, serviceID string, version swarm.Version, service swarm.ServiceSpec, options types.ServiceUpdateOptions) (types.ServiceUpdateResponse, error) {
	var (
		query    = url.Values{}
		response = types.ServiceUpdateResponse{}
	)

	headers := map[string][]string{
		"version": {cli.version},
	}

	if options.EncodedRegistryAuth != "" {
		headers["X-Registry-Auth"] = []string{options.EncodedRegistryAuth}
	}

	if options.RegistryAuthFrom != "" {
		query.Set("registryAuthFrom", options.RegistryAuthFrom)
	}

	if options.Rollback != "" {
		query.Set("rollback", options.Rollback)
	}

	query.Set("version", version.String())

	if err := validateServiceSpec(service); err != nil {
		return response, err
	}

	// ensure that the image is tagged
	var resolveWarning string
	switch {
	case service.TaskTemplate.ContainerSpec != nil:
		if taggedImg := imageWithTagString(service.TaskTemplate.ContainerSpec.Image); taggedImg != "" {
			service.TaskTemplate.ContainerSpec.Image = taggedImg
		}
		if options.QueryRegistry {
			resolveWarning = resolveContainerSpecImage(ctx, cli, &service.TaskTemplate, options.EncodedRegistryAuth)
		}
	case service.TaskTemplate.PluginSpec != nil:
		if taggedImg := imageWithTagString(service.TaskTemplate.PluginSpec.Remote); taggedImg != "" {
			service.TaskTemplate.PluginSpec.Remote = taggedImg
		}
		if options.QueryRegistry {
			resolveWarning = resolvePluginSpecRemote(ctx, cli, &service.TaskTemplate, options.EncodedRegistryAuth)
		}
	}

	resp, err := cli.post(ctx, "/services/"+serviceID+"/update", query, service, headers)
	defer ensureReaderClosed(resp)
	if err != nil {
		return response, err
	}

	err = json.NewDecoder(resp.body).Decode(&response)
	if resolveWarning != "" {
		response.Warnings = append(response.Warnings, resolveWarning)
	}

	return response, err
}
07070100000448000081A4000000000000000000000001645E367C00000248000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/swarm_get_unlock_key.go    package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"

	"github.com/docker/docker/api/types"
)

// SwarmGetUnlockKey retrieves the swarm's unlock key.
func (cli *Client) SwarmGetUnlockKey(ctx context.Context) (types.SwarmUnlockKeyResponse, error) {
	serverResp, err := cli.get(ctx, "/swarm/unlockkey", nil, nil)
	defer ensureReaderClosed(serverResp)
	if err != nil {
		return types.SwarmUnlockKeyResponse{}, err
	}

	var response types.SwarmUnlockKeyResponse
	err = json.NewDecoder(serverResp.body).Decode(&response)
	return response, err
}
07070100000449000081A4000000000000000000000001645E367C00000203000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/swarm_init.go  package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"

	"github.com/docker/docker/api/types/swarm"
)

// SwarmInit initializes the swarm.
func (cli *Client) SwarmInit(ctx context.Context, req swarm.InitRequest) (string, error) {
	serverResp, err := cli.post(ctx, "/swarm/init", nil, req, nil)
	defer ensureReaderClosed(serverResp)
	if err != nil {
		return "", err
	}

	var response string
	err = json.NewDecoder(serverResp.body).Decode(&response)
	return response, err
}
 0707010000044A000081A4000000000000000000000001645E367C000001F9000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/swarm_inspect.go   package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"

	"github.com/docker/docker/api/types/swarm"
)

// SwarmInspect inspects the swarm.
func (cli *Client) SwarmInspect(ctx context.Context) (swarm.Swarm, error) {
	serverResp, err := cli.get(ctx, "/swarm", nil, nil)
	defer ensureReaderClosed(serverResp)
	if err != nil {
		return swarm.Swarm{}, err
	}

	var response swarm.Swarm
	err = json.NewDecoder(serverResp.body).Decode(&response)
	return response, err
}
   0707010000044B000081A4000000000000000000000001645E367C00000151000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/swarm_join.go  package client // import "github.com/docker/docker/client"

import (
	"context"

	"github.com/docker/docker/api/types/swarm"
)

// SwarmJoin joins the swarm.
func (cli *Client) SwarmJoin(ctx context.Context, req swarm.JoinRequest) error {
	resp, err := cli.post(ctx, "/swarm/join", nil, req, nil)
	ensureReaderClosed(resp)
	return err
}
   0707010000044C000081A4000000000000000000000001645E367C0000016A000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/swarm_leave.go package client // import "github.com/docker/docker/client"

import (
	"context"
	"net/url"
)

// SwarmLeave leaves the swarm.
func (cli *Client) SwarmLeave(ctx context.Context, force bool) error {
	query := url.Values{}
	if force {
		query.Set("force", "1")
	}
	resp, err := cli.post(ctx, "/swarm/leave", query, nil, nil)
	ensureReaderClosed(resp)
	return err
}
  0707010000044D000081A4000000000000000000000001645E367C0000016A000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/swarm_unlock.go    package client // import "github.com/docker/docker/client"

import (
	"context"

	"github.com/docker/docker/api/types/swarm"
)

// SwarmUnlock unlocks locked swarm.
func (cli *Client) SwarmUnlock(ctx context.Context, req swarm.UnlockRequest) error {
	serverResp, err := cli.post(ctx, "/swarm/unlock", nil, req, nil)
	ensureReaderClosed(serverResp)
	return err
}
  0707010000044E000081A4000000000000000000000001645E367C000002D0000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/swarm_update.go    package client // import "github.com/docker/docker/client"

import (
	"context"
	"net/url"
	"strconv"

	"github.com/docker/docker/api/types/swarm"
)

// SwarmUpdate updates the swarm.
func (cli *Client) SwarmUpdate(ctx context.Context, version swarm.Version, swarm swarm.Spec, flags swarm.UpdateFlags) error {
	query := url.Values{}
	query.Set("version", version.String())
	query.Set("rotateWorkerToken", strconv.FormatBool(flags.RotateWorkerToken))
	query.Set("rotateManagerToken", strconv.FormatBool(flags.RotateManagerToken))
	query.Set("rotateManagerUnlockKey", strconv.FormatBool(flags.RotateManagerUnlockKey))
	resp, err := cli.post(ctx, "/swarm/update", query, swarm, nil)
	ensureReaderClosed(resp)
	return err
}
0707010000044F000081A4000000000000000000000001645E367C00000333000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/task_inspect.go    package client // import "github.com/docker/docker/client"

import (
	"bytes"
	"context"
	"encoding/json"
	"io"

	"github.com/docker/docker/api/types/swarm"
)

// TaskInspectWithRaw returns the task information and its raw representation.
func (cli *Client) TaskInspectWithRaw(ctx context.Context, taskID string) (swarm.Task, []byte, error) {
	if taskID == "" {
		return swarm.Task{}, nil, objectNotFoundError{object: "task", id: taskID}
	}
	serverResp, err := cli.get(ctx, "/tasks/"+taskID, nil, nil)
	defer ensureReaderClosed(serverResp)
	if err != nil {
		return swarm.Task{}, nil, err
	}

	body, err := io.ReadAll(serverResp.body)
	if err != nil {
		return swarm.Task{}, nil, err
	}

	var response swarm.Task
	rdr := bytes.NewReader(body)
	err = json.NewDecoder(rdr).Decode(&response)
	return response, body, err
}
 07070100000450000081A4000000000000000000000001645E367C00000313000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/task_list.go   package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"net/url"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/filters"
	"github.com/docker/docker/api/types/swarm"
)

// TaskList returns the list of tasks.
func (cli *Client) TaskList(ctx context.Context, options types.TaskListOptions) ([]swarm.Task, error) {
	query := url.Values{}

	if options.Filters.Len() > 0 {
		filterJSON, err := filters.ToJSON(options.Filters)
		if err != nil {
			return nil, err
		}

		query.Set("filters", filterJSON)
	}

	resp, err := cli.get(ctx, "/tasks", query, nil)
	defer ensureReaderClosed(resp)
	if err != nil {
		return nil, err
	}

	var tasks []swarm.Task
	err = json.NewDecoder(resp.body).Decode(&tasks)
	return tasks, err
}
 07070100000451000081A4000000000000000000000001645E367C00000426000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/task_logs.go   package client // import "github.com/docker/docker/client"

import (
	"context"
	"io"
	"net/url"
	"time"

	"github.com/docker/docker/api/types"
	timetypes "github.com/docker/docker/api/types/time"
)

// TaskLogs returns the logs generated by a task in an io.ReadCloser.
// It's up to the caller to close the stream.
func (cli *Client) TaskLogs(ctx context.Context, taskID string, options types.ContainerLogsOptions) (io.ReadCloser, error) {
	query := url.Values{}
	if options.ShowStdout {
		query.Set("stdout", "1")
	}

	if options.ShowStderr {
		query.Set("stderr", "1")
	}

	if options.Since != "" {
		ts, err := timetypes.GetTimestamp(options.Since, time.Now())
		if err != nil {
			return nil, err
		}
		query.Set("since", ts)
	}

	if options.Timestamps {
		query.Set("timestamps", "1")
	}

	if options.Details {
		query.Set("details", "1")
	}

	if options.Follow {
		query.Set("follow", "1")
	}
	query.Set("tail", options.Tail)

	resp, err := cli.get(ctx, "/tasks/"+taskID+"/logs", query, nil)
	if err != nil {
		return nil, err
	}
	return resp.body, nil
}
  07070100000452000081A4000000000000000000000001645E367C0000016B000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/transport.go   package client // import "github.com/docker/docker/client"

import (
	"crypto/tls"
	"net/http"
)

// resolveTLSConfig attempts to resolve the TLS configuration from the
// RoundTripper.
func resolveTLSConfig(transport http.RoundTripper) *tls.Config {
	switch tr := transport.(type) {
	case *http.Transport:
		return tr.TLSClientConfig
	default:
		return nil
	}
}
 07070100000453000081A4000000000000000000000001645E367C00000339000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/utils.go   package client // import "github.com/docker/docker/client"

import (
	"net/url"
	"regexp"

	"github.com/docker/docker/api/types/filters"
)

var headerRegexp = regexp.MustCompile(`\ADocker/.+\s\((.+)\)\z`)

// getDockerOS returns the operating system based on the server header from the daemon.
func getDockerOS(serverHeader string) string {
	var osType string
	matches := headerRegexp.FindStringSubmatch(serverHeader)
	if len(matches) > 0 {
		osType = matches[1]
	}
	return osType
}

// getFiltersQuery returns a url query with "filters" query term, based on the
// filters provided.
func getFiltersQuery(f filters.Args) (url.Values, error) {
	query := url.Values{}
	if f.Len() > 0 {
		filterJSON, err := filters.ToJSON(f)
		if err != nil {
			return query, err
		}
		query.Set("filters", filterJSON)
	}
	return query, nil
}
   07070100000454000081A4000000000000000000000001645E367C0000020B000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/version.go package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"

	"github.com/docker/docker/api/types"
)

// ServerVersion returns information of the docker client and server host.
func (cli *Client) ServerVersion(ctx context.Context) (types.Version, error) {
	resp, err := cli.get(ctx, "/version", nil, nil)
	defer ensureReaderClosed(resp)
	if err != nil {
		return types.Version{}, err
	}

	var server types.Version
	err = json.NewDecoder(resp.body).Decode(&server)
	return server, err
}
 07070100000455000081A4000000000000000000000001645E367C00000214000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/volume_create.go   package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"

	"github.com/docker/docker/api/types/volume"
)

// VolumeCreate creates a volume in the docker host.
func (cli *Client) VolumeCreate(ctx context.Context, options volume.CreateOptions) (volume.Volume, error) {
	var vol volume.Volume
	resp, err := cli.post(ctx, "/volumes/create", nil, options, nil)
	defer ensureReaderClosed(resp)
	if err != nil {
		return vol, err
	}
	err = json.NewDecoder(resp.body).Decode(&vol)
	return vol, err
}
07070100000456000081A4000000000000000000000001645E367C00000440000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/volume_inspect.go  package client // import "github.com/docker/docker/client"

import (
	"bytes"
	"context"
	"encoding/json"
	"io"

	"github.com/docker/docker/api/types/volume"
)

// VolumeInspect returns the information about a specific volume in the docker host.
func (cli *Client) VolumeInspect(ctx context.Context, volumeID string) (volume.Volume, error) {
	vol, _, err := cli.VolumeInspectWithRaw(ctx, volumeID)
	return vol, err
}

// VolumeInspectWithRaw returns the information about a specific volume in the docker host and its raw representation
func (cli *Client) VolumeInspectWithRaw(ctx context.Context, volumeID string) (volume.Volume, []byte, error) {
	if volumeID == "" {
		return volume.Volume{}, nil, objectNotFoundError{object: "volume", id: volumeID}
	}

	var vol volume.Volume
	resp, err := cli.get(ctx, "/volumes/"+volumeID, nil, nil)
	defer ensureReaderClosed(resp)
	if err != nil {
		return vol, nil, err
	}

	body, err := io.ReadAll(resp.body)
	if err != nil {
		return vol, nil, err
	}
	rdr := bytes.NewReader(body)
	err = json.NewDecoder(rdr).Decode(&vol)
	return vol, body, err
}
07070100000457000081A4000000000000000000000001645E367C00000358000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/volume_list.go package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"net/url"

	"github.com/docker/docker/api/types/filters"
	"github.com/docker/docker/api/types/volume"
)

// VolumeList returns the volumes configured in the docker host.
func (cli *Client) VolumeList(ctx context.Context, filter filters.Args) (volume.ListResponse, error) {
	var volumes volume.ListResponse
	query := url.Values{}

	if filter.Len() > 0 {
		//nolint:staticcheck // ignore SA1019 for old code
		filterJSON, err := filters.ToParamWithVersion(cli.version, filter)
		if err != nil {
			return volumes, err
		}
		query.Set("filters", filterJSON)
	}
	resp, err := cli.get(ctx, "/volumes", query, nil)
	defer ensureReaderClosed(resp)
	if err != nil {
		return volumes, err
	}

	err = json.NewDecoder(resp.body).Decode(&volumes)
	return volumes, err
}
07070100000458000081A4000000000000000000000001645E367C0000038F000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/volume_prune.go    package client // import "github.com/docker/docker/client"

import (
	"context"
	"encoding/json"
	"fmt"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/filters"
)

// VolumesPrune requests the daemon to delete unused data
func (cli *Client) VolumesPrune(ctx context.Context, pruneFilters filters.Args) (types.VolumesPruneReport, error) {
	var report types.VolumesPruneReport

	if err := cli.NewVersionError("1.25", "volume prune"); err != nil {
		return report, err
	}

	query, err := getFiltersQuery(pruneFilters)
	if err != nil {
		return report, err
	}

	serverResp, err := cli.post(ctx, "/volumes/prune", query, nil, nil)
	defer ensureReaderClosed(serverResp)
	if err != nil {
		return report, err
	}

	if err := json.NewDecoder(serverResp.body).Decode(&report); err != nil {
		return report, fmt.Errorf("Error retrieving volume prune report: %v", err)
	}

	return report, nil
}
 07070100000459000081A4000000000000000000000001645E367C0000020C000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/volume_remove.go   package client // import "github.com/docker/docker/client"

import (
	"context"
	"net/url"

	"github.com/docker/docker/api/types/versions"
)

// VolumeRemove removes a volume from the docker host.
func (cli *Client) VolumeRemove(ctx context.Context, volumeID string, force bool) error {
	query := url.Values{}
	if versions.GreaterThanOrEqualTo(cli.version, "1.25") {
		if force {
			query.Set("force", "1")
		}
	}
	resp, err := cli.delete(ctx, "/volumes/"+volumeID, query, nil)
	defer ensureReaderClosed(resp)
	return err
}
0707010000045A000081A4000000000000000000000001645E367C000002AF000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/client/volume_update.go   package client // import "github.com/docker/docker/client"

import (
	"context"
	"net/url"

	"github.com/docker/docker/api/types/swarm"
	"github.com/docker/docker/api/types/volume"
)

// VolumeUpdate updates a volume. This only works for Cluster Volumes, and
// only some fields can be updated.
func (cli *Client) VolumeUpdate(ctx context.Context, volumeID string, version swarm.Version, options volume.UpdateOptions) error {
	if err := cli.NewVersionError("1.42", "volume update"); err != nil {
		return err
	}

	query := url.Values{}
	query.Set("version", version.String())

	resp, err := cli.put(ctx, "/volumes/"+volumeID, query, options, nil)
	ensureReaderClosed(resp)
	return err
}
 0707010000045B000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/errdefs   0707010000045C000081A4000000000000000000000001645E367C00000790000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/docker/docker/errdefs/defs.go   package errdefs // import "github.com/docker/docker/errdefs"

// ErrNotFound signals that the requested object doesn't exist
type ErrNotFound interface {
	NotFound()
}

// ErrInvalidParameter signals that the user input is invalid
type ErrInvalidParameter interface {
	InvalidParameter()
}

// ErrConflict signals that some internal state conflicts with the requested action and can't be performed.
// A change in state should be able to clear this error.
type ErrConflict interface {
	Conflict()
}

// ErrUnauthorized is used to signify that the user is not authorized to perform a specific action
type ErrUnauthorized interface {
	Unauthorized()
}

// ErrUnavailable signals that the requested action/subsystem is not available.
type ErrUnavailable interface {
	Unavailable()
}

// ErrForbidden signals that the requested action cannot be performed under any circumstances.
// When a ErrForbidden is returned, the caller should never retry the action.
type ErrForbidden interface {
	Forbidden()
}

// ErrSystem signals that some internal error occurred.
// An example of this would be a failed mount request.
type ErrSystem interface {
	System()
}

// ErrNotModified signals that an action can't be performed because it's already in the desired state
type ErrNotModified interface {
	NotModified()
}

// ErrNotImplemented signals that the requested action/feature is not implemented on the system as configured.
type ErrNotImplemented interface {
	NotImplemented()
}

// ErrUnknown signals that the kind of error that occurred is not known.
type ErrUnknown interface {
	Unknown()
}

// ErrCancelled signals that the action was cancelled.
type ErrCancelled interface {
	Cancelled()
}

// ErrDeadline signals that the deadline was reached before the action completed.
type ErrDeadline interface {
	DeadlineExceeded()
}

// ErrDataLoss indicates that data was lost or there is data corruption.
type ErrDataLoss interface {
	DataLoss()
}
0707010000045D000081A4000000000000000000000001645E367C0000028A000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/docker/docker/errdefs/doc.go    // Package errdefs defines a set of error interfaces that packages should use for communicating classes of errors.
// Errors that cross the package boundary should implement one (and only one) of these interfaces.
//
// Packages should not reference these interfaces directly, only implement them.
// To check if a particular error implements one of these interfaces, there are helper
// functions provided (e.g. `Is<SomeError>`) which can be used rather than asserting the interfaces directly.
// If you must assert on these interfaces, be sure to check the causal chain (`err.Cause()`).
package errdefs // import "github.com/docker/docker/errdefs"
  0707010000045E000081A4000000000000000000000001645E367C0000160E000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/docker/docker/errdefs/helpers.go    package errdefs // import "github.com/docker/docker/errdefs"

import "context"

type errNotFound struct{ error }

func (errNotFound) NotFound() {}

func (e errNotFound) Cause() error {
	return e.error
}

func (e errNotFound) Unwrap() error {
	return e.error
}

// NotFound is a helper to create an error of the class with the same name from any error type
func NotFound(err error) error {
	if err == nil || IsNotFound(err) {
		return err
	}
	return errNotFound{err}
}

type errInvalidParameter struct{ error }

func (errInvalidParameter) InvalidParameter() {}

func (e errInvalidParameter) Cause() error {
	return e.error
}

func (e errInvalidParameter) Unwrap() error {
	return e.error
}

// InvalidParameter is a helper to create an error of the class with the same name from any error type
func InvalidParameter(err error) error {
	if err == nil || IsInvalidParameter(err) {
		return err
	}
	return errInvalidParameter{err}
}

type errConflict struct{ error }

func (errConflict) Conflict() {}

func (e errConflict) Cause() error {
	return e.error
}

func (e errConflict) Unwrap() error {
	return e.error
}

// Conflict is a helper to create an error of the class with the same name from any error type
func Conflict(err error) error {
	if err == nil || IsConflict(err) {
		return err
	}
	return errConflict{err}
}

type errUnauthorized struct{ error }

func (errUnauthorized) Unauthorized() {}

func (e errUnauthorized) Cause() error {
	return e.error
}

func (e errUnauthorized) Unwrap() error {
	return e.error
}

// Unauthorized is a helper to create an error of the class with the same name from any error type
func Unauthorized(err error) error {
	if err == nil || IsUnauthorized(err) {
		return err
	}
	return errUnauthorized{err}
}

type errUnavailable struct{ error }

func (errUnavailable) Unavailable() {}

func (e errUnavailable) Cause() error {
	return e.error
}

func (e errUnavailable) Unwrap() error {
	return e.error
}

// Unavailable is a helper to create an error of the class with the same name from any error type
func Unavailable(err error) error {
	if err == nil || IsUnavailable(err) {
		return err
	}
	return errUnavailable{err}
}

type errForbidden struct{ error }

func (errForbidden) Forbidden() {}

func (e errForbidden) Cause() error {
	return e.error
}

func (e errForbidden) Unwrap() error {
	return e.error
}

// Forbidden is a helper to create an error of the class with the same name from any error type
func Forbidden(err error) error {
	if err == nil || IsForbidden(err) {
		return err
	}
	return errForbidden{err}
}

type errSystem struct{ error }

func (errSystem) System() {}

func (e errSystem) Cause() error {
	return e.error
}

func (e errSystem) Unwrap() error {
	return e.error
}

// System is a helper to create an error of the class with the same name from any error type
func System(err error) error {
	if err == nil || IsSystem(err) {
		return err
	}
	return errSystem{err}
}

type errNotModified struct{ error }

func (errNotModified) NotModified() {}

func (e errNotModified) Cause() error {
	return e.error
}

func (e errNotModified) Unwrap() error {
	return e.error
}

// NotModified is a helper to create an error of the class with the same name from any error type
func NotModified(err error) error {
	if err == nil || IsNotModified(err) {
		return err
	}
	return errNotModified{err}
}

type errNotImplemented struct{ error }

func (errNotImplemented) NotImplemented() {}

func (e errNotImplemented) Cause() error {
	return e.error
}

func (e errNotImplemented) Unwrap() error {
	return e.error
}

// NotImplemented is a helper to create an error of the class with the same name from any error type
func NotImplemented(err error) error {
	if err == nil || IsNotImplemented(err) {
		return err
	}
	return errNotImplemented{err}
}

type errUnknown struct{ error }

func (errUnknown) Unknown() {}

func (e errUnknown) Cause() error {
	return e.error
}

func (e errUnknown) Unwrap() error {
	return e.error
}

// Unknown is a helper to create an error of the class with the same name from any error type
func Unknown(err error) error {
	if err == nil || IsUnknown(err) {
		return err
	}
	return errUnknown{err}
}

type errCancelled struct{ error }

func (errCancelled) Cancelled() {}

func (e errCancelled) Cause() error {
	return e.error
}

func (e errCancelled) Unwrap() error {
	return e.error
}

// Cancelled is a helper to create an error of the class with the same name from any error type
func Cancelled(err error) error {
	if err == nil || IsCancelled(err) {
		return err
	}
	return errCancelled{err}
}

type errDeadline struct{ error }

func (errDeadline) DeadlineExceeded() {}

func (e errDeadline) Cause() error {
	return e.error
}

func (e errDeadline) Unwrap() error {
	return e.error
}

// Deadline is a helper to create an error of the class with the same name from any error type
func Deadline(err error) error {
	if err == nil || IsDeadline(err) {
		return err
	}
	return errDeadline{err}
}

type errDataLoss struct{ error }

func (errDataLoss) DataLoss() {}

func (e errDataLoss) Cause() error {
	return e.error
}

func (e errDataLoss) Unwrap() error {
	return e.error
}

// DataLoss is a helper to create an error of the class with the same name from any error type
func DataLoss(err error) error {
	if err == nil || IsDataLoss(err) {
		return err
	}
	return errDataLoss{err}
}

// FromContext returns the error class from the passed in context
func FromContext(ctx context.Context) error {
	e := ctx.Err()
	if e == nil {
		return nil
	}

	if e == context.Canceled {
		return Cancelled(e)
	}
	if e == context.DeadlineExceeded {
		return Deadline(e)
	}
	return Unknown(e)
}
  0707010000045F000081A4000000000000000000000001645E367C00000498000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/docker/docker/errdefs/http_helpers.go   package errdefs // import "github.com/docker/docker/errdefs"

import (
	"net/http"
)

// FromStatusCode creates an errdef error, based on the provided HTTP status-code
func FromStatusCode(err error, statusCode int) error {
	if err == nil {
		return nil
	}
	switch statusCode {
	case http.StatusNotFound:
		err = NotFound(err)
	case http.StatusBadRequest:
		err = InvalidParameter(err)
	case http.StatusConflict:
		err = Conflict(err)
	case http.StatusUnauthorized:
		err = Unauthorized(err)
	case http.StatusServiceUnavailable:
		err = Unavailable(err)
	case http.StatusForbidden:
		err = Forbidden(err)
	case http.StatusNotModified:
		err = NotModified(err)
	case http.StatusNotImplemented:
		err = NotImplemented(err)
	case http.StatusInternalServerError:
		if !IsSystem(err) && !IsUnknown(err) && !IsDataLoss(err) && !IsDeadline(err) && !IsCancelled(err) {
			err = System(err)
		}
	default:
		switch {
		case statusCode >= 200 && statusCode < 400:
			// it's a client error
		case statusCode >= 400 && statusCode < 500:
			err = InvalidParameter(err)
		case statusCode >= 500 && statusCode < 600:
			err = System(err)
		default:
			err = Unknown(err)
		}
	}
	return err
}
07070100000460000081A4000000000000000000000001645E367C00000A20000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/docker/docker/errdefs/is.go package errdefs // import "github.com/docker/docker/errdefs"

type causer interface {
	Cause() error
}

func getImplementer(err error) error {
	switch e := err.(type) {
	case
		ErrNotFound,
		ErrInvalidParameter,
		ErrConflict,
		ErrUnauthorized,
		ErrUnavailable,
		ErrForbidden,
		ErrSystem,
		ErrNotModified,
		ErrNotImplemented,
		ErrCancelled,
		ErrDeadline,
		ErrDataLoss,
		ErrUnknown:
		return err
	case causer:
		return getImplementer(e.Cause())
	default:
		return err
	}
}

// IsNotFound returns if the passed in error is an ErrNotFound
func IsNotFound(err error) bool {
	_, ok := getImplementer(err).(ErrNotFound)
	return ok
}

// IsInvalidParameter returns if the passed in error is an ErrInvalidParameter
func IsInvalidParameter(err error) bool {
	_, ok := getImplementer(err).(ErrInvalidParameter)
	return ok
}

// IsConflict returns if the passed in error is an ErrConflict
func IsConflict(err error) bool {
	_, ok := getImplementer(err).(ErrConflict)
	return ok
}

// IsUnauthorized returns if the passed in error is an ErrUnauthorized
func IsUnauthorized(err error) bool {
	_, ok := getImplementer(err).(ErrUnauthorized)
	return ok
}

// IsUnavailable returns if the passed in error is an ErrUnavailable
func IsUnavailable(err error) bool {
	_, ok := getImplementer(err).(ErrUnavailable)
	return ok
}

// IsForbidden returns if the passed in error is an ErrForbidden
func IsForbidden(err error) bool {
	_, ok := getImplementer(err).(ErrForbidden)
	return ok
}

// IsSystem returns if the passed in error is an ErrSystem
func IsSystem(err error) bool {
	_, ok := getImplementer(err).(ErrSystem)
	return ok
}

// IsNotModified returns if the passed in error is a NotModified error
func IsNotModified(err error) bool {
	_, ok := getImplementer(err).(ErrNotModified)
	return ok
}

// IsNotImplemented returns if the passed in error is an ErrNotImplemented
func IsNotImplemented(err error) bool {
	_, ok := getImplementer(err).(ErrNotImplemented)
	return ok
}

// IsUnknown returns if the passed in error is an ErrUnknown
func IsUnknown(err error) bool {
	_, ok := getImplementer(err).(ErrUnknown)
	return ok
}

// IsCancelled returns if the passed in error is an ErrCancelled
func IsCancelled(err error) bool {
	_, ok := getImplementer(err).(ErrCancelled)
	return ok
}

// IsDeadline returns if the passed in error is an ErrDeadline
func IsDeadline(err error) bool {
	_, ok := getImplementer(err).(ErrDeadline)
	return ok
}

// IsDataLoss returns if the passed in error is an ErrDataLoss
func IsDataLoss(err error) bool {
	_, ok := getImplementer(err).(ErrDataLoss)
	return ok
}
07070100000461000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/docker/docker/pkg   07070100000462000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/docker/docker/pkg/homedir   07070100000463000081A4000000000000000000000001645E367C00000B43000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/docker/docker/pkg/homedir/homedir_linux.go  package homedir // import "github.com/docker/docker/pkg/homedir"

import (
	"errors"
	"os"
	"path/filepath"
	"strings"
)

// GetRuntimeDir returns XDG_RUNTIME_DIR.
// XDG_RUNTIME_DIR is typically configured via pam_systemd.
// GetRuntimeDir returns non-nil error if XDG_RUNTIME_DIR is not set.
//
// See also https://standards.freedesktop.org/basedir-spec/latest/ar01s03.html
func GetRuntimeDir() (string, error) {
	if xdgRuntimeDir := os.Getenv("XDG_RUNTIME_DIR"); xdgRuntimeDir != "" {
		return xdgRuntimeDir, nil
	}
	return "", errors.New("could not get XDG_RUNTIME_DIR")
}

// StickRuntimeDirContents sets the sticky bit on files that are under
// XDG_RUNTIME_DIR, so that the files won't be periodically removed by the system.
//
// StickyRuntimeDir returns slice of sticked files.
// StickyRuntimeDir returns nil error if XDG_RUNTIME_DIR is not set.
//
// See also https://standards.freedesktop.org/basedir-spec/latest/ar01s03.html
func StickRuntimeDirContents(files []string) ([]string, error) {
	runtimeDir, err := GetRuntimeDir()
	if err != nil {
		// ignore error if runtimeDir is empty
		return nil, nil
	}
	runtimeDir, err = filepath.Abs(runtimeDir)
	if err != nil {
		return nil, err
	}
	var sticked []string
	for _, f := range files {
		f, err = filepath.Abs(f)
		if err != nil {
			return sticked, err
		}
		if strings.HasPrefix(f, runtimeDir+"/") {
			if err = stick(f); err != nil {
				return sticked, err
			}
			sticked = append(sticked, f)
		}
	}
	return sticked, nil
}

func stick(f string) error {
	st, err := os.Stat(f)
	if err != nil {
		return err
	}
	m := st.Mode()
	m |= os.ModeSticky
	return os.Chmod(f, m)
}

// GetDataHome returns XDG_DATA_HOME.
// GetDataHome returns $HOME/.local/share and nil error if XDG_DATA_HOME is not set.
//
// See also https://standards.freedesktop.org/basedir-spec/latest/ar01s03.html
func GetDataHome() (string, error) {
	if xdgDataHome := os.Getenv("XDG_DATA_HOME"); xdgDataHome != "" {
		return xdgDataHome, nil
	}
	home := os.Getenv("HOME")
	if home == "" {
		return "", errors.New("could not get either XDG_DATA_HOME or HOME")
	}
	return filepath.Join(home, ".local", "share"), nil
}

// GetConfigHome returns XDG_CONFIG_HOME.
// GetConfigHome returns $HOME/.config and nil error if XDG_CONFIG_HOME is not set.
//
// See also https://standards.freedesktop.org/basedir-spec/latest/ar01s03.html
func GetConfigHome() (string, error) {
	if xdgConfigHome := os.Getenv("XDG_CONFIG_HOME"); xdgConfigHome != "" {
		return xdgConfigHome, nil
	}
	home := os.Getenv("HOME")
	if home == "" {
		return "", errors.New("could not get either XDG_CONFIG_HOME or HOME")
	}
	return filepath.Join(home, ".config"), nil
}

// GetLibHome returns $HOME/.local/lib
func GetLibHome() (string, error) {
	home := os.Getenv("HOME")
	if home == "" {
		return "", errors.New("could not get HOME")
	}
	return filepath.Join(home, ".local/lib"), nil
}
 07070100000464000081A4000000000000000000000001645E367C00000410000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/docker/docker/pkg/homedir/homedir_others.go //go:build !linux
// +build !linux

package homedir // import "github.com/docker/docker/pkg/homedir"

import (
	"errors"
)

// GetRuntimeDir is unsupported on non-linux system.
func GetRuntimeDir() (string, error) {
	return "", errors.New("homedir.GetRuntimeDir() is not supported on this system")
}

// StickRuntimeDirContents is unsupported on non-linux system.
func StickRuntimeDirContents(files []string) ([]string, error) {
	return nil, errors.New("homedir.StickRuntimeDirContents() is not supported on this system")
}

// GetDataHome is unsupported on non-linux system.
func GetDataHome() (string, error) {
	return "", errors.New("homedir.GetDataHome() is not supported on this system")
}

// GetConfigHome is unsupported on non-linux system.
func GetConfigHome() (string, error) {
	return "", errors.New("homedir.GetConfigHome() is not supported on this system")
}

// GetLibHome is unsupported on non-linux system.
func GetLibHome() (string, error) {
	return "", errors.New("homedir.GetLibHome() is not supported on this system")
}
07070100000465000081A4000000000000000000000001645E367C000003D6000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/docker/docker/pkg/homedir/homedir_unix.go   //go:build !windows
// +build !windows

package homedir // import "github.com/docker/docker/pkg/homedir"

import (
	"os"
	"os/user"
)

// Key returns the env var name for the user's home dir based on
// the platform being run on
func Key() string {
	return "HOME"
}

// Get returns the home directory of the current user with the help of
// environment variables depending on the target operating system.
// Returned path should be used with "path/filepath" to form new paths.
//
// If linking statically with cgo enabled against glibc, ensure the
// osusergo build tag is used.
//
// If needing to do nss lookups, do not disable cgo or set osusergo.
func Get() string {
	home := os.Getenv(Key())
	if home == "" {
		if u, err := user.Current(); err == nil {
			return u.HomeDir
		}
	}
	return home
}

// GetShortcutString returns the string that is shortcut to user's home directory
// in the native shell of the platform running on.
func GetShortcutString() string {
	return "~"
}
  07070100000466000081A4000000000000000000000001645E367C000002D0000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/docker/docker/pkg/homedir/homedir_windows.go    package homedir // import "github.com/docker/docker/pkg/homedir"

import (
	"os"
)

// Key returns the env var name for the user's home dir based on
// the platform being run on
func Key() string {
	return "USERPROFILE"
}

// Get returns the home directory of the current user with the help of
// environment variables depending on the target operating system.
// Returned path should be used with "path/filepath" to form new paths.
func Get() string {
	return os.Getenv(Key())
}

// GetShortcutString returns the string that is shortcut to user's home directory
// in the native shell of the platform running on.
func GetShortcutString() string {
	return "%USERPROFILE%" // be careful while using in format functions
}
07070100000467000041ED000000000000000000000005645E367C00000000000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/docker/go-connections   07070100000468000081A4000000000000000000000001645E367C00002A08000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/docker/go-connections/LICENSE   
                                 Apache License
                           Version 2.0, January 2004
                        https://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   Copyright 2015 Docker, Inc.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       https://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
07070100000469000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/docker/go-connections/nat   0707010000046A000081A4000000000000000000000001645E367C000019D2000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/docker/go-connections/nat/nat.go    // Package nat is a convenience package for manipulation of strings describing network ports.
package nat

import (
	"fmt"
	"net"
	"strconv"
	"strings"
)

const (
	// portSpecTemplate is the expected format for port specifications
	portSpecTemplate = "ip:hostPort:containerPort"
)

// PortBinding represents a binding between a Host IP address and a Host Port
type PortBinding struct {
	// HostIP is the host IP Address
	HostIP string `json:"HostIp"`
	// HostPort is the host port number
	HostPort string
}

// PortMap is a collection of PortBinding indexed by Port
type PortMap map[Port][]PortBinding

// PortSet is a collection of structs indexed by Port
type PortSet map[Port]struct{}

// Port is a string containing port number and protocol in the format "80/tcp"
type Port string

// NewPort creates a new instance of a Port given a protocol and port number or port range
func NewPort(proto, port string) (Port, error) {
	// Check for parsing issues on "port" now so we can avoid having
	// to check it later on.

	portStartInt, portEndInt, err := ParsePortRangeToInt(port)
	if err != nil {
		return "", err
	}

	if portStartInt == portEndInt {
		return Port(fmt.Sprintf("%d/%s", portStartInt, proto)), nil
	}
	return Port(fmt.Sprintf("%d-%d/%s", portStartInt, portEndInt, proto)), nil
}

// ParsePort parses the port number string and returns an int
func ParsePort(rawPort string) (int, error) {
	if len(rawPort) == 0 {
		return 0, nil
	}
	port, err := strconv.ParseUint(rawPort, 10, 16)
	if err != nil {
		return 0, err
	}
	return int(port), nil
}

// ParsePortRangeToInt parses the port range string and returns start/end ints
func ParsePortRangeToInt(rawPort string) (int, int, error) {
	if len(rawPort) == 0 {
		return 0, 0, nil
	}
	start, end, err := ParsePortRange(rawPort)
	if err != nil {
		return 0, 0, err
	}
	return int(start), int(end), nil
}

// Proto returns the protocol of a Port
func (p Port) Proto() string {
	proto, _ := SplitProtoPort(string(p))
	return proto
}

// Port returns the port number of a Port
func (p Port) Port() string {
	_, port := SplitProtoPort(string(p))
	return port
}

// Int returns the port number of a Port as an int
func (p Port) Int() int {
	portStr := p.Port()
	// We don't need to check for an error because we're going to
	// assume that any error would have been found, and reported, in NewPort()
	port, _ := ParsePort(portStr)
	return port
}

// Range returns the start/end port numbers of a Port range as ints
func (p Port) Range() (int, int, error) {
	return ParsePortRangeToInt(p.Port())
}

// SplitProtoPort splits a port in the format of proto/port
func SplitProtoPort(rawPort string) (string, string) {
	parts := strings.Split(rawPort, "/")
	l := len(parts)
	if len(rawPort) == 0 || l == 0 || len(parts[0]) == 0 {
		return "", ""
	}
	if l == 1 {
		return "tcp", rawPort
	}
	if len(parts[1]) == 0 {
		return "tcp", parts[0]
	}
	return parts[1], parts[0]
}

func validateProto(proto string) bool {
	for _, availableProto := range []string{"tcp", "udp", "sctp"} {
		if availableProto == proto {
			return true
		}
	}
	return false
}

// ParsePortSpecs receives port specs in the format of ip:public:private/proto and parses
// these in to the internal types
func ParsePortSpecs(ports []string) (map[Port]struct{}, map[Port][]PortBinding, error) {
	var (
		exposedPorts = make(map[Port]struct{}, len(ports))
		bindings     = make(map[Port][]PortBinding)
	)
	for _, rawPort := range ports {
		portMappings, err := ParsePortSpec(rawPort)
		if err != nil {
			return nil, nil, err
		}

		for _, portMapping := range portMappings {
			port := portMapping.Port
			if _, exists := exposedPorts[port]; !exists {
				exposedPorts[port] = struct{}{}
			}
			bslice, exists := bindings[port]
			if !exists {
				bslice = []PortBinding{}
			}
			bindings[port] = append(bslice, portMapping.Binding)
		}
	}
	return exposedPorts, bindings, nil
}

// PortMapping is a data object mapping a Port to a PortBinding
type PortMapping struct {
	Port    Port
	Binding PortBinding
}

func splitParts(rawport string) (string, string, string) {
	parts := strings.Split(rawport, ":")
	n := len(parts)
	containerport := parts[n-1]

	switch n {
	case 1:
		return "", "", containerport
	case 2:
		return "", parts[0], containerport
	case 3:
		return parts[0], parts[1], containerport
	default:
		return strings.Join(parts[:n-2], ":"), parts[n-2], containerport
	}
}

// ParsePortSpec parses a port specification string into a slice of PortMappings
func ParsePortSpec(rawPort string) ([]PortMapping, error) {
	var proto string
	rawIP, hostPort, containerPort := splitParts(rawPort)
	proto, containerPort = SplitProtoPort(containerPort)

	// Strip [] from IPV6 addresses
	ip, _, err := net.SplitHostPort(rawIP + ":")
	if err != nil {
		return nil, fmt.Errorf("Invalid ip address %v: %s", rawIP, err)
	}
	if ip != "" && net.ParseIP(ip) == nil {
		return nil, fmt.Errorf("Invalid ip address: %s", ip)
	}
	if containerPort == "" {
		return nil, fmt.Errorf("No port specified: %s<empty>", rawPort)
	}

	startPort, endPort, err := ParsePortRange(containerPort)
	if err != nil {
		return nil, fmt.Errorf("Invalid containerPort: %s", containerPort)
	}

	var startHostPort, endHostPort uint64 = 0, 0
	if len(hostPort) > 0 {
		startHostPort, endHostPort, err = ParsePortRange(hostPort)
		if err != nil {
			return nil, fmt.Errorf("Invalid hostPort: %s", hostPort)
		}
	}

	if hostPort != "" && (endPort-startPort) != (endHostPort-startHostPort) {
		// Allow host port range iff containerPort is not a range.
		// In this case, use the host port range as the dynamic
		// host port range to allocate into.
		if endPort != startPort {
			return nil, fmt.Errorf("Invalid ranges specified for container and host Ports: %s and %s", containerPort, hostPort)
		}
	}

	if !validateProto(strings.ToLower(proto)) {
		return nil, fmt.Errorf("Invalid proto: %s", proto)
	}

	ports := []PortMapping{}
	for i := uint64(0); i <= (endPort - startPort); i++ {
		containerPort = strconv.FormatUint(startPort+i, 10)
		if len(hostPort) > 0 {
			hostPort = strconv.FormatUint(startHostPort+i, 10)
		}
		// Set hostPort to a range only if there is a single container port
		// and a dynamic host port.
		if startPort == endPort && startHostPort != endHostPort {
			hostPort = fmt.Sprintf("%s-%s", hostPort, strconv.FormatUint(endHostPort, 10))
		}
		port, err := NewPort(strings.ToLower(proto), containerPort)
		if err != nil {
			return nil, err
		}

		binding := PortBinding{
			HostIP:   ip,
			HostPort: hostPort,
		}
		ports = append(ports, PortMapping{Port: port, Binding: binding})
	}
	return ports, nil
}
  0707010000046B000081A4000000000000000000000001645E367C000005D9000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/docker/go-connections/nat/parse.go  package nat

import (
	"fmt"
	"strconv"
	"strings"
)

// PartParser parses and validates the specified string (data) using the specified template
// e.g. ip:public:private -> 192.168.0.1:80:8000
// DEPRECATED: do not use, this function may be removed in a future version
func PartParser(template, data string) (map[string]string, error) {
	// ip:public:private
	var (
		templateParts = strings.Split(template, ":")
		parts         = strings.Split(data, ":")
		out           = make(map[string]string, len(templateParts))
	)
	if len(parts) != len(templateParts) {
		return nil, fmt.Errorf("Invalid format to parse. %s should match template %s", data, template)
	}

	for i, t := range templateParts {
		value := ""
		if len(parts) > i {
			value = parts[i]
		}
		out[t] = value
	}
	return out, nil
}

// ParsePortRange parses and validates the specified string as a port-range (8000-9000)
func ParsePortRange(ports string) (uint64, uint64, error) {
	if ports == "" {
		return 0, 0, fmt.Errorf("Empty string specified for ports.")
	}
	if !strings.Contains(ports, "-") {
		start, err := strconv.ParseUint(ports, 10, 16)
		end := start
		return start, end, err
	}

	parts := strings.Split(ports, "-")
	start, err := strconv.ParseUint(parts[0], 10, 16)
	if err != nil {
		return 0, 0, err
	}
	end, err := strconv.ParseUint(parts[1], 10, 16)
	if err != nil {
		return 0, 0, err
	}
	if end < start {
		return 0, 0, fmt.Errorf("Invalid range specified for the Port: %s", ports)
	}
	return start, end, nil
}
   0707010000046C000081A4000000000000000000000001645E367C00000875000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/docker/go-connections/nat/sort.go   package nat

import (
	"sort"
	"strings"
)

type portSorter struct {
	ports []Port
	by    func(i, j Port) bool
}

func (s *portSorter) Len() int {
	return len(s.ports)
}

func (s *portSorter) Swap(i, j int) {
	s.ports[i], s.ports[j] = s.ports[j], s.ports[i]
}

func (s *portSorter) Less(i, j int) bool {
	ip := s.ports[i]
	jp := s.ports[j]

	return s.by(ip, jp)
}

// Sort sorts a list of ports using the provided predicate
// This function should compare `i` and `j`, returning true if `i` is
// considered to be less than `j`
func Sort(ports []Port, predicate func(i, j Port) bool) {
	s := &portSorter{ports, predicate}
	sort.Sort(s)
}

type portMapEntry struct {
	port    Port
	binding PortBinding
}

type portMapSorter []portMapEntry

func (s portMapSorter) Len() int      { return len(s) }
func (s portMapSorter) Swap(i, j int) { s[i], s[j] = s[j], s[i] }

// sort the port so that the order is:
// 1. port with larger specified bindings
// 2. larger port
// 3. port with tcp protocol
func (s portMapSorter) Less(i, j int) bool {
	pi, pj := s[i].port, s[j].port
	hpi, hpj := toInt(s[i].binding.HostPort), toInt(s[j].binding.HostPort)
	return hpi > hpj || pi.Int() > pj.Int() || (pi.Int() == pj.Int() && strings.ToLower(pi.Proto()) == "tcp")
}

// SortPortMap sorts the list of ports and their respected mapping. The ports
// will explicit HostPort will be placed first.
func SortPortMap(ports []Port, bindings PortMap) {
	s := portMapSorter{}
	for _, p := range ports {
		if binding, ok := bindings[p]; ok {
			for _, b := range binding {
				s = append(s, portMapEntry{port: p, binding: b})
			}
			bindings[p] = []PortBinding{}
		} else {
			s = append(s, portMapEntry{port: p})
		}
	}

	sort.Sort(s)
	var (
		i  int
		pm = make(map[Port]struct{})
	)
	// reorder ports
	for _, entry := range s {
		if _, ok := pm[entry.port]; !ok {
			ports[i] = entry.port
			pm[entry.port] = struct{}{}
			i++
		}
		// reorder bindings for this port
		if _, ok := bindings[entry.port]; ok {
			bindings[entry.port] = append(bindings[entry.port], entry.binding)
		}
	}
}

func toInt(s string) uint64 {
	i, _, err := ParsePortRange(s)
	if err != nil {
		i = 0
	}
	return i
}
   0707010000046D000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/docker/go-connections/sockets   0707010000046E000081A4000000000000000000000001645E367C00000000000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/docker/go-connections/sockets/README.md 0707010000046F000081A4000000000000000000000001645E367C00000785000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/docker/go-connections/sockets/inmem_socket.go   package sockets

import (
	"errors"
	"net"
	"sync"
)

var errClosed = errors.New("use of closed network connection")

// InmemSocket implements net.Listener using in-memory only connections.
type InmemSocket struct {
	chConn  chan net.Conn
	chClose chan struct{}
	addr    string
	mu      sync.Mutex
}

// dummyAddr is used to satisfy net.Addr for the in-mem socket
// it is just stored as a string and returns the string for all calls
type dummyAddr string

// NewInmemSocket creates an in-memory only net.Listener
// The addr argument can be any string, but is used to satisfy the `Addr()` part
// of the net.Listener interface
func NewInmemSocket(addr string, bufSize int) *InmemSocket {
	return &InmemSocket{
		chConn:  make(chan net.Conn, bufSize),
		chClose: make(chan struct{}),
		addr:    addr,
	}
}

// Addr returns the socket's addr string to satisfy net.Listener
func (s *InmemSocket) Addr() net.Addr {
	return dummyAddr(s.addr)
}

// Accept implements the Accept method in the Listener interface; it waits for the next call and returns a generic Conn.
func (s *InmemSocket) Accept() (net.Conn, error) {
	select {
	case conn := <-s.chConn:
		return conn, nil
	case <-s.chClose:
		return nil, errClosed
	}
}

// Close closes the listener. It will be unavailable for use once closed.
func (s *InmemSocket) Close() error {
	s.mu.Lock()
	defer s.mu.Unlock()
	select {
	case <-s.chClose:
	default:
		close(s.chClose)
	}
	return nil
}

// Dial is used to establish a connection with the in-mem server
func (s *InmemSocket) Dial(network, addr string) (net.Conn, error) {
	srvConn, clientConn := net.Pipe()
	select {
	case s.chConn <- srvConn:
	case <-s.chClose:
		return nil, errClosed
	}

	return clientConn, nil
}

// Network returns the addr string, satisfies net.Addr
func (a dummyAddr) Network() string {
	return string(a)
}

// String returns the string form
func (a dummyAddr) String() string {
	return string(a)
}
   07070100000470000081A4000000000000000000000001645E367C00000486000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/docker/go-connections/sockets/proxy.go  package sockets

import (
	"net"
	"net/url"
	"os"
	"strings"

	"golang.org/x/net/proxy"
)

// GetProxyEnv allows access to the uppercase and the lowercase forms of
// proxy-related variables.  See the Go specification for details on these
// variables. https://golang.org/pkg/net/http/
func GetProxyEnv(key string) string {
	proxyValue := os.Getenv(strings.ToUpper(key))
	if proxyValue == "" {
		return os.Getenv(strings.ToLower(key))
	}
	return proxyValue
}

// DialerFromEnvironment takes in a "direct" *net.Dialer and returns a
// proxy.Dialer which will route the connections through the proxy using the
// given dialer.
func DialerFromEnvironment(direct *net.Dialer) (proxy.Dialer, error) {
	allProxy := GetProxyEnv("all_proxy")
	if len(allProxy) == 0 {
		return direct, nil
	}

	proxyURL, err := url.Parse(allProxy)
	if err != nil {
		return direct, err
	}

	proxyFromURL, err := proxy.FromURL(proxyURL, direct)
	if err != nil {
		return direct, err
	}

	noProxy := GetProxyEnv("no_proxy")
	if len(noProxy) == 0 {
		return proxyFromURL, nil
	}

	perHost := proxy.NewPerHost(proxyFromURL, direct)
	perHost.AddFromString(noProxy)

	return perHost, nil
}
  07070100000471000081A4000000000000000000000001645E367C0000042C000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/docker/go-connections/sockets/sockets.go    // Package sockets provides helper functions to create and configure Unix or TCP sockets.
package sockets

import (
	"errors"
	"net"
	"net/http"
	"time"
)

// Why 32? See https://github.com/docker/docker/pull/8035.
const defaultTimeout = 32 * time.Second

// ErrProtocolNotAvailable is returned when a given transport protocol is not provided by the operating system.
var ErrProtocolNotAvailable = errors.New("protocol not available")

// ConfigureTransport configures the specified Transport according to the
// specified proto and addr.
// If the proto is unix (using a unix socket to communicate) or npipe the
// compression is disabled.
func ConfigureTransport(tr *http.Transport, proto, addr string) error {
	switch proto {
	case "unix":
		return configureUnixTransport(tr, proto, addr)
	case "npipe":
		return configureNpipeTransport(tr, proto, addr)
	default:
		tr.Proxy = http.ProxyFromEnvironment
		dialer, err := DialerFromEnvironment(&net.Dialer{
			Timeout: defaultTimeout,
		})
		if err != nil {
			return err
		}
		tr.Dial = dialer.Dial
	}
	return nil
}
07070100000472000081A4000000000000000000000001645E367C00000348000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/docker/go-connections/sockets/sockets_unix.go   // +build !windows

package sockets

import (
	"fmt"
	"net"
	"net/http"
	"syscall"
	"time"
)

const maxUnixSocketPathSize = len(syscall.RawSockaddrUnix{}.Path)

func configureUnixTransport(tr *http.Transport, proto, addr string) error {
	if len(addr) > maxUnixSocketPathSize {
		return fmt.Errorf("Unix socket path %q is too long", addr)
	}
	// No need for compression in local communications.
	tr.DisableCompression = true
	tr.Dial = func(_, _ string) (net.Conn, error) {
		return net.DialTimeout(proto, addr, defaultTimeout)
	}
	return nil
}

func configureNpipeTransport(tr *http.Transport, proto, addr string) error {
	return ErrProtocolNotAvailable
}

// DialPipe connects to a Windows named pipe.
// This is not supported on other OSes.
func DialPipe(_ string, _ time.Duration) (net.Conn, error) {
	return nil, syscall.EAFNOSUPPORT
}
07070100000473000081A4000000000000000000000001645E367C00000271000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/docker/go-connections/sockets/sockets_windows.go    package sockets

import (
	"net"
	"net/http"
	"time"

	"github.com/Microsoft/go-winio"
)

func configureUnixTransport(tr *http.Transport, proto, addr string) error {
	return ErrProtocolNotAvailable
}

func configureNpipeTransport(tr *http.Transport, proto, addr string) error {
	// No need for compression in local communications.
	tr.DisableCompression = true
	tr.Dial = func(_, _ string) (net.Conn, error) {
		return DialPipe(addr, defaultTimeout)
	}
	return nil
}

// DialPipe connects to a Windows named pipe.
func DialPipe(addr string, timeout time.Duration) (net.Conn, error) {
	return winio.DialPipe(addr, &timeout)
}
   07070100000474000081A4000000000000000000000001645E367C0000025D000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/docker/go-connections/sockets/tcp_socket.go // Package sockets provides helper functions to create and configure Unix or TCP sockets.
package sockets

import (
	"crypto/tls"
	"net"
)

// NewTCPSocket creates a TCP socket listener with the specified address and
// the specified tls configuration. If TLSConfig is set, will encapsulate the
// TCP listener inside a TLS one.
func NewTCPSocket(addr string, tlsConfig *tls.Config) (net.Listener, error) {
	l, err := net.Listen("tcp", addr)
	if err != nil {
		return nil, err
	}
	if tlsConfig != nil {
		tlsConfig.NextProtos = []string{"http/1.1"}
		l = tls.NewListener(l, tlsConfig)
	}
	return l, nil
}
   07070100000475000081A4000000000000000000000001645E367C00000262000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/docker/go-connections/sockets/unix_socket.go    // +build !windows

package sockets

import (
	"net"
	"os"
	"syscall"
)

// NewUnixSocket creates a unix socket with the specified path and group.
func NewUnixSocket(path string, gid int) (net.Listener, error) {
	if err := syscall.Unlink(path); err != nil && !os.IsNotExist(err) {
		return nil, err
	}
	mask := syscall.Umask(0777)
	defer syscall.Umask(mask)

	l, err := net.Listen("unix", path)
	if err != nil {
		return nil, err
	}
	if err := os.Chown(path, 0, gid); err != nil {
		l.Close()
		return nil, err
	}
	if err := os.Chmod(path, 0660); err != nil {
		l.Close()
		return nil, err
	}
	return l, nil
}
  07070100000476000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/docker/go-connections/tlsconfig 07070100000477000081A4000000000000000000000001645E367C00000186000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/docker/go-connections/tlsconfig/certpool_go17.go    // +build go1.7

package tlsconfig

import (
	"crypto/x509"
	"runtime"
)

// SystemCertPool returns a copy of the system cert pool,
// returns an error if failed to load or empty pool on windows.
func SystemCertPool() (*x509.CertPool, error) {
	certpool, err := x509.SystemCertPool()
	if err != nil && runtime.GOOS == "windows" {
		return x509.NewCertPool(), nil
	}
	return certpool, err
}
  07070100000478000081A4000000000000000000000001645E367C000000F9000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/docker/go-connections/tlsconfig/certpool_other.go   // +build !go1.7

package tlsconfig

import (
	"crypto/x509"
)

// SystemCertPool returns an new empty cert pool,
// accessing system cert pool is supported in go 1.7
func SystemCertPool() (*x509.CertPool, error) {
	return x509.NewCertPool(), nil
}
   07070100000479000081A4000000000000000000000001645E367C00001F53000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/docker/go-connections/tlsconfig/config.go   // Package tlsconfig provides primitives to retrieve secure-enough TLS configurations for both clients and servers.
//
// As a reminder from https://golang.org/pkg/crypto/tls/#Config:
//	A Config structure is used to configure a TLS client or server. After one has been passed to a TLS function it must not be modified.
//	A Config may be reused; the tls package will also not modify it.
package tlsconfig

import (
	"crypto/tls"
	"crypto/x509"
	"encoding/pem"
	"fmt"
	"io/ioutil"
	"os"

	"github.com/pkg/errors"
)

// Options represents the information needed to create client and server TLS configurations.
type Options struct {
	CAFile string

	// If either CertFile or KeyFile is empty, Client() will not load them
	// preventing the client from authenticating to the server.
	// However, Server() requires them and will error out if they are empty.
	CertFile string
	KeyFile  string

	// client-only option
	InsecureSkipVerify bool
	// server-only option
	ClientAuth tls.ClientAuthType
	// If ExclusiveRootPools is set, then if a CA file is provided, the root pool used for TLS
	// creds will include exclusively the roots in that CA file.  If no CA file is provided,
	// the system pool will be used.
	ExclusiveRootPools bool
	MinVersion         uint16
	// If Passphrase is set, it will be used to decrypt a TLS private key
	// if the key is encrypted
	Passphrase string
}

// Extra (server-side) accepted CBC cipher suites - will phase out in the future
var acceptedCBCCiphers = []uint16{
	tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
	tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
	tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
	tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
}

// DefaultServerAcceptedCiphers should be uses by code which already has a crypto/tls
// options struct but wants to use a commonly accepted set of TLS cipher suites, with
// known weak algorithms removed.
var DefaultServerAcceptedCiphers = append(clientCipherSuites, acceptedCBCCiphers...)

// allTLSVersions lists all the TLS versions and is used by the code that validates
// a uint16 value as a TLS version.
var allTLSVersions = map[uint16]struct{}{
	tls.VersionSSL30: {},
	tls.VersionTLS10: {},
	tls.VersionTLS11: {},
	tls.VersionTLS12: {},
}

// ServerDefault returns a secure-enough TLS configuration for the server TLS configuration.
func ServerDefault(ops ...func(*tls.Config)) *tls.Config {
	tlsconfig := &tls.Config{
		// Avoid fallback by default to SSL protocols < TLS1.2
		MinVersion:               tls.VersionTLS12,
		PreferServerCipherSuites: true,
		CipherSuites:             DefaultServerAcceptedCiphers,
	}

	for _, op := range ops {
		op(tlsconfig)
	}

	return tlsconfig
}

// ClientDefault returns a secure-enough TLS configuration for the client TLS configuration.
func ClientDefault(ops ...func(*tls.Config)) *tls.Config {
	tlsconfig := &tls.Config{
		// Prefer TLS1.2 as the client minimum
		MinVersion:   tls.VersionTLS12,
		CipherSuites: clientCipherSuites,
	}

	for _, op := range ops {
		op(tlsconfig)
	}

	return tlsconfig
}

// certPool returns an X.509 certificate pool from `caFile`, the certificate file.
func certPool(caFile string, exclusivePool bool) (*x509.CertPool, error) {
	// If we should verify the server, we need to load a trusted ca
	var (
		certPool *x509.CertPool
		err      error
	)
	if exclusivePool {
		certPool = x509.NewCertPool()
	} else {
		certPool, err = SystemCertPool()
		if err != nil {
			return nil, fmt.Errorf("failed to read system certificates: %v", err)
		}
	}
	pem, err := ioutil.ReadFile(caFile)
	if err != nil {
		return nil, fmt.Errorf("could not read CA certificate %q: %v", caFile, err)
	}
	if !certPool.AppendCertsFromPEM(pem) {
		return nil, fmt.Errorf("failed to append certificates from PEM file: %q", caFile)
	}
	return certPool, nil
}

// isValidMinVersion checks that the input value is a valid tls minimum version
func isValidMinVersion(version uint16) bool {
	_, ok := allTLSVersions[version]
	return ok
}

// adjustMinVersion sets the MinVersion on `config`, the input configuration.
// It assumes the current MinVersion on the `config` is the lowest allowed.
func adjustMinVersion(options Options, config *tls.Config) error {
	if options.MinVersion > 0 {
		if !isValidMinVersion(options.MinVersion) {
			return fmt.Errorf("Invalid minimum TLS version: %x", options.MinVersion)
		}
		if options.MinVersion < config.MinVersion {
			return fmt.Errorf("Requested minimum TLS version is too low. Should be at-least: %x", config.MinVersion)
		}
		config.MinVersion = options.MinVersion
	}

	return nil
}

// IsErrEncryptedKey returns true if the 'err' is an error of incorrect
// password when tryin to decrypt a TLS private key
func IsErrEncryptedKey(err error) bool {
	return errors.Cause(err) == x509.IncorrectPasswordError
}

// getPrivateKey returns the private key in 'keyBytes', in PEM-encoded format.
// If the private key is encrypted, 'passphrase' is used to decrypted the
// private key.
func getPrivateKey(keyBytes []byte, passphrase string) ([]byte, error) {
	// this section makes some small changes to code from notary/tuf/utils/x509.go
	pemBlock, _ := pem.Decode(keyBytes)
	if pemBlock == nil {
		return nil, fmt.Errorf("no valid private key found")
	}

	var err error
	if x509.IsEncryptedPEMBlock(pemBlock) {
		keyBytes, err = x509.DecryptPEMBlock(pemBlock, []byte(passphrase))
		if err != nil {
			return nil, errors.Wrap(err, "private key is encrypted, but could not decrypt it")
		}
		keyBytes = pem.EncodeToMemory(&pem.Block{Type: pemBlock.Type, Bytes: keyBytes})
	}

	return keyBytes, nil
}

// getCert returns a Certificate from the CertFile and KeyFile in 'options',
// if the key is encrypted, the Passphrase in 'options' will be used to
// decrypt it.
func getCert(options Options) ([]tls.Certificate, error) {
	if options.CertFile == "" && options.KeyFile == "" {
		return nil, nil
	}

	errMessage := "Could not load X509 key pair"

	cert, err := ioutil.ReadFile(options.CertFile)
	if err != nil {
		return nil, errors.Wrap(err, errMessage)
	}

	prKeyBytes, err := ioutil.ReadFile(options.KeyFile)
	if err != nil {
		return nil, errors.Wrap(err, errMessage)
	}

	prKeyBytes, err = getPrivateKey(prKeyBytes, options.Passphrase)
	if err != nil {
		return nil, errors.Wrap(err, errMessage)
	}

	tlsCert, err := tls.X509KeyPair(cert, prKeyBytes)
	if err != nil {
		return nil, errors.Wrap(err, errMessage)
	}

	return []tls.Certificate{tlsCert}, nil
}

// Client returns a TLS configuration meant to be used by a client.
func Client(options Options) (*tls.Config, error) {
	tlsConfig := ClientDefault()
	tlsConfig.InsecureSkipVerify = options.InsecureSkipVerify
	if !options.InsecureSkipVerify && options.CAFile != "" {
		CAs, err := certPool(options.CAFile, options.ExclusiveRootPools)
		if err != nil {
			return nil, err
		}
		tlsConfig.RootCAs = CAs
	}

	tlsCerts, err := getCert(options)
	if err != nil {
		return nil, err
	}
	tlsConfig.Certificates = tlsCerts

	if err := adjustMinVersion(options, tlsConfig); err != nil {
		return nil, err
	}

	return tlsConfig, nil
}

// Server returns a TLS configuration meant to be used by a server.
func Server(options Options) (*tls.Config, error) {
	tlsConfig := ServerDefault()
	tlsConfig.ClientAuth = options.ClientAuth
	tlsCert, err := tls.LoadX509KeyPair(options.CertFile, options.KeyFile)
	if err != nil {
		if os.IsNotExist(err) {
			return nil, fmt.Errorf("Could not load X509 key pair (cert: %q, key: %q): %v", options.CertFile, options.KeyFile, err)
		}
		return nil, fmt.Errorf("Error reading X509 key pair (cert: %q, key: %q): %v. Make sure the key is not encrypted.", options.CertFile, options.KeyFile, err)
	}
	tlsConfig.Certificates = []tls.Certificate{tlsCert}
	if options.ClientAuth >= tls.VerifyClientCertIfGiven && options.CAFile != "" {
		CAs, err := certPool(options.CAFile, options.ExclusiveRootPools)
		if err != nil {
			return nil, err
		}
		tlsConfig.ClientCAs = CAs
	}

	if err := adjustMinVersion(options, tlsConfig); err != nil {
		return nil, err
	}

	return tlsConfig, nil
}
 0707010000047A000081A4000000000000000000000001645E367C000001E0000000000000000000000000000000000000005F00000000elemental-cli-0.3.1/vendor/github.com/docker/go-connections/tlsconfig/config_client_ciphers.go    // +build go1.5

// Package tlsconfig provides primitives to retrieve secure-enough TLS configurations for both clients and servers.
//
package tlsconfig

import (
	"crypto/tls"
)

// Client TLS cipher suites (dropping CBC ciphers for client preferred suite set)
var clientCipherSuites = []uint16{
	tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
	tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
	tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
	tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
}
0707010000047B000081A4000000000000000000000001645E367C00000187000000000000000000000000000000000000006600000000elemental-cli-0.3.1/vendor/github.com/docker/go-connections/tlsconfig/config_legacy_client_ciphers.go // +build !go1.5

// Package tlsconfig provides primitives to retrieve secure-enough TLS configurations for both clients and servers.
//
package tlsconfig

import (
	"crypto/tls"
)

// Client TLS cipher suites (dropping CBC ciphers for client preferred suite set)
var clientCipherSuites = []uint16{
	tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
	tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
}
 0707010000047C000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/github.com/docker/go-units 0707010000047D000081A4000000000000000000000001645E367C00000ACB000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/docker/go-units/CONTRIBUTING.md # Contributing to go-units

Want to hack on go-units? Awesome! Here are instructions to get you started.

go-units is a part of the [Docker](https://www.docker.com) project, and follows
the same rules and principles. If you're already familiar with the way
Docker does things, you'll feel right at home.

Otherwise, go read Docker's
[contributions guidelines](https://github.com/docker/docker/blob/master/CONTRIBUTING.md),
[issue triaging](https://github.com/docker/docker/blob/master/project/ISSUE-TRIAGE.md),
[review process](https://github.com/docker/docker/blob/master/project/REVIEWING.md) and
[branches and tags](https://github.com/docker/docker/blob/master/project/BRANCHES-AND-TAGS.md).

### Sign your work

The sign-off is a simple line at the end of the explanation for the patch. Your
signature certifies that you wrote the patch or otherwise have the right to pass
it on as an open-source patch. The rules are pretty simple: if you can certify
the below (from [developercertificate.org](http://developercertificate.org/)):

```
Developer Certificate of Origin
Version 1.1

Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
660 York Street, Suite 102,
San Francisco, CA 94110 USA

Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.

Developer's Certificate of Origin 1.1

By making a contribution to this project, I certify that:

(a) The contribution was created in whole or in part by me and I
    have the right to submit it under the open source license
    indicated in the file; or

(b) The contribution is based upon previous work that, to the best
    of my knowledge, is covered under an appropriate open source
    license and I have the right under that license to submit that
    work with modifications, whether created in whole or in part
    by me, under the same open source license (unless I am
    permitted to submit under a different license), as indicated
    in the file; or

(c) The contribution was provided directly to me by some other
    person who certified (a), (b) or (c) and I have not modified
    it.

(d) I understand and agree that this project and the contribution
    are public and that a record of the contribution (including all
    personal information I submit with it, including my sign-off) is
    maintained indefinitely and may be redistributed consistent with
    this project or the open source license(s) involved.
```

Then you just add a line to every git commit message:

    Signed-off-by: Joe Smith <joe.smith@email.com>

Use your real name (sorry, no pseudonyms or anonymous contributions.)

If you set your `user.name` and `user.email` git configs, you can sign your
commit automatically with `git commit -s`.
 0707010000047E000081A4000000000000000000000001645E367C00002A08000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/docker/go-units/LICENSE 
                                 Apache License
                           Version 2.0, January 2004
                        https://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   Copyright 2015 Docker, Inc.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       https://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
0707010000047F000081A4000000000000000000000001645E367C00000466000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/docker/go-units/MAINTAINERS # go-units maintainers file
#
# This file describes who runs the docker/go-units project and how.
# This is a living document - if you see something out of date or missing, speak up!
#
# It is structured to be consumable by both humans and programs.
# To extract its contents programmatically, use any TOML-compliant parser.
#
# This file is compiled into the MAINTAINERS file in docker/opensource.
#
[Org]
	[Org."Core maintainers"]
		people = [
			"akihirosuda",
			"dnephin",
			"thajeztah",
			"vdemeester",
		]

[people]

# A reference list of all people associated with the project.
# All other sections should refer to people by their canonical key
# in the people section.

	# ADD YOURSELF HERE IN ALPHABETICAL ORDER

	[people.akihirosuda]
	Name = "Akihiro Suda"
	Email = "akihiro.suda.cz@hco.ntt.co.jp"
	GitHub = "AkihiroSuda"

	[people.dnephin]
	Name = "Daniel Nephin"
	Email = "dnephin@gmail.com"
	GitHub = "dnephin"
	
	[people.thajeztah]
	Name = "Sebastiaan van Stijn"
	Email = "github@gone.nl"
	GitHub = "thaJeztah"

	[people.vdemeester]
	Name = "Vincent Demeester"
	Email = "vincent@sbr.pm"
	GitHub = "vdemeester"  07070100000480000081A4000000000000000000000001645E367C00000201000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/docker/go-units/README.md   [![GoDoc](https://godoc.org/github.com/docker/go-units?status.svg)](https://godoc.org/github.com/docker/go-units)

# Introduction

go-units is a library to transform human friendly measurements into machine friendly values.

## Usage

See the [docs in godoc](https://godoc.org/github.com/docker/go-units) for examples and documentation.

## Copyright and license

Copyright © 2015 Docker, Inc.

go-units is licensed under the Apache License, Version 2.0.
See [LICENSE](LICENSE) for the full text of the license.
   07070100000481000081A4000000000000000000000001645E367C000000F7000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/docker/go-units/circle.yml  dependencies:
  post:
    # install golint
    - go get golang.org/x/lint/golint

test:
  pre:
    # run analysis before tests
    - go vet ./...
    - test -z "$(golint ./... | tee /dev/stderr)"
    - test -z "$(gofmt -s -l . | tee /dev/stderr)"
 07070100000482000081A4000000000000000000000001645E367C0000043C000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/docker/go-units/duration.go // Package units provides helper function to parse and print size and time units
// in human-readable format.
package units

import (
	"fmt"
	"time"
)

// HumanDuration returns a human-readable approximation of a duration
// (eg. "About a minute", "4 hours ago", etc.).
func HumanDuration(d time.Duration) string {
	if seconds := int(d.Seconds()); seconds < 1 {
		return "Less than a second"
	} else if seconds == 1 {
		return "1 second"
	} else if seconds < 60 {
		return fmt.Sprintf("%d seconds", seconds)
	} else if minutes := int(d.Minutes()); minutes == 1 {
		return "About a minute"
	} else if minutes < 60 {
		return fmt.Sprintf("%d minutes", minutes)
	} else if hours := int(d.Hours() + 0.5); hours == 1 {
		return "About an hour"
	} else if hours < 48 {
		return fmt.Sprintf("%d hours", hours)
	} else if hours < 24*7*2 {
		return fmt.Sprintf("%d days", hours/24)
	} else if hours < 24*30*2 {
		return fmt.Sprintf("%d weeks", hours/24/7)
	} else if hours < 24*365*2 {
		return fmt.Sprintf("%d months", hours/24/30)
	}
	return fmt.Sprintf("%d years", int(d.Hours())/24/365)
}
07070100000483000081A4000000000000000000000001645E367C00000F43000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/docker/go-units/size.go package units

import (
	"fmt"
	"strconv"
	"strings"
)

// See: http://en.wikipedia.org/wiki/Binary_prefix
const (
	// Decimal

	KB = 1000
	MB = 1000 * KB
	GB = 1000 * MB
	TB = 1000 * GB
	PB = 1000 * TB

	// Binary

	KiB = 1024
	MiB = 1024 * KiB
	GiB = 1024 * MiB
	TiB = 1024 * GiB
	PiB = 1024 * TiB
)

type unitMap map[byte]int64

var (
	decimalMap = unitMap{'k': KB, 'm': MB, 'g': GB, 't': TB, 'p': PB}
	binaryMap  = unitMap{'k': KiB, 'm': MiB, 'g': GiB, 't': TiB, 'p': PiB}
)

var (
	decimapAbbrs = []string{"B", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"}
	binaryAbbrs  = []string{"B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"}
)

func getSizeAndUnit(size float64, base float64, _map []string) (float64, string) {
	i := 0
	unitsLimit := len(_map) - 1
	for size >= base && i < unitsLimit {
		size = size / base
		i++
	}
	return size, _map[i]
}

// CustomSize returns a human-readable approximation of a size
// using custom format.
func CustomSize(format string, size float64, base float64, _map []string) string {
	size, unit := getSizeAndUnit(size, base, _map)
	return fmt.Sprintf(format, size, unit)
}

// HumanSizeWithPrecision allows the size to be in any precision,
// instead of 4 digit precision used in units.HumanSize.
func HumanSizeWithPrecision(size float64, precision int) string {
	size, unit := getSizeAndUnit(size, 1000.0, decimapAbbrs)
	return fmt.Sprintf("%.*g%s", precision, size, unit)
}

// HumanSize returns a human-readable approximation of a size
// capped at 4 valid numbers (eg. "2.746 MB", "796 KB").
func HumanSize(size float64) string {
	return HumanSizeWithPrecision(size, 4)
}

// BytesSize returns a human-readable size in bytes, kibibytes,
// mebibytes, gibibytes, or tebibytes (eg. "44kiB", "17MiB").
func BytesSize(size float64) string {
	return CustomSize("%.4g%s", size, 1024.0, binaryAbbrs)
}

// FromHumanSize returns an integer from a human-readable specification of a
// size using SI standard (eg. "44kB", "17MB").
func FromHumanSize(size string) (int64, error) {
	return parseSize(size, decimalMap)
}

// RAMInBytes parses a human-readable string representing an amount of RAM
// in bytes, kibibytes, mebibytes, gibibytes, or tebibytes and
// returns the number of bytes, or -1 if the string is unparseable.
// Units are case-insensitive, and the 'b' suffix is optional.
func RAMInBytes(size string) (int64, error) {
	return parseSize(size, binaryMap)
}

// Parses the human-readable size string into the amount it represents.
func parseSize(sizeStr string, uMap unitMap) (int64, error) {
	// TODO: rewrite to use strings.Cut if there's a space
	// once Go < 1.18 is deprecated.
	sep := strings.LastIndexAny(sizeStr, "01234567890. ")
	if sep == -1 {
		// There should be at least a digit.
		return -1, fmt.Errorf("invalid size: '%s'", sizeStr)
	}
	var num, sfx string
	if sizeStr[sep] != ' ' {
		num = sizeStr[:sep+1]
		sfx = sizeStr[sep+1:]
	} else {
		// Omit the space separator.
		num = sizeStr[:sep]
		sfx = sizeStr[sep+1:]
	}

	size, err := strconv.ParseFloat(num, 64)
	if err != nil {
		return -1, err
	}
	// Backward compatibility: reject negative sizes.
	if size < 0 {
		return -1, fmt.Errorf("invalid size: '%s'", sizeStr)
	}

	if len(sfx) == 0 {
		return int64(size), nil
	}

	// Process the suffix.

	if len(sfx) > 3 { // Too long.
		goto badSuffix
	}
	sfx = strings.ToLower(sfx)
	// Trivial case: b suffix.
	if sfx[0] == 'b' {
		if len(sfx) > 1 { // no extra characters allowed after b.
			goto badSuffix
		}
		return int64(size), nil
	}
	// A suffix from the map.
	if mul, ok := uMap[sfx[0]]; ok {
		size *= float64(mul)
	} else {
		goto badSuffix
	}

	// The suffix may have extra "b" or "ib" (e.g. KiB or MB).
	switch {
	case len(sfx) == 2 && sfx[1] != 'b':
		goto badSuffix
	case len(sfx) == 3 && sfx[1:] != "ib":
		goto badSuffix
	}

	return int64(size), nil

badSuffix:
	return -1, fmt.Errorf("invalid suffix: '%s'", sfx)
}
 07070100000484000081A4000000000000000000000001645E367C00000C75000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/docker/go-units/ulimit.go   package units

import (
	"fmt"
	"strconv"
	"strings"
)

// Ulimit is a human friendly version of Rlimit.
type Ulimit struct {
	Name string
	Hard int64
	Soft int64
}

// Rlimit specifies the resource limits, such as max open files.
type Rlimit struct {
	Type int    `json:"type,omitempty"`
	Hard uint64 `json:"hard,omitempty"`
	Soft uint64 `json:"soft,omitempty"`
}

const (
	// magic numbers for making the syscall
	// some of these are defined in the syscall package, but not all.
	// Also since Windows client doesn't get access to the syscall package, need to
	//	define these here
	rlimitAs         = 9
	rlimitCore       = 4
	rlimitCPU        = 0
	rlimitData       = 2
	rlimitFsize      = 1
	rlimitLocks      = 10
	rlimitMemlock    = 8
	rlimitMsgqueue   = 12
	rlimitNice       = 13
	rlimitNofile     = 7
	rlimitNproc      = 6
	rlimitRss        = 5
	rlimitRtprio     = 14
	rlimitRttime     = 15
	rlimitSigpending = 11
	rlimitStack      = 3
)

var ulimitNameMapping = map[string]int{
	//"as":         rlimitAs, // Disabled since this doesn't seem usable with the way Docker inits a container.
	"core":       rlimitCore,
	"cpu":        rlimitCPU,
	"data":       rlimitData,
	"fsize":      rlimitFsize,
	"locks":      rlimitLocks,
	"memlock":    rlimitMemlock,
	"msgqueue":   rlimitMsgqueue,
	"nice":       rlimitNice,
	"nofile":     rlimitNofile,
	"nproc":      rlimitNproc,
	"rss":        rlimitRss,
	"rtprio":     rlimitRtprio,
	"rttime":     rlimitRttime,
	"sigpending": rlimitSigpending,
	"stack":      rlimitStack,
}

// ParseUlimit parses and returns a Ulimit from the specified string.
func ParseUlimit(val string) (*Ulimit, error) {
	parts := strings.SplitN(val, "=", 2)
	if len(parts) != 2 {
		return nil, fmt.Errorf("invalid ulimit argument: %s", val)
	}

	if _, exists := ulimitNameMapping[parts[0]]; !exists {
		return nil, fmt.Errorf("invalid ulimit type: %s", parts[0])
	}

	var (
		soft int64
		hard = &soft // default to soft in case no hard was set
		temp int64
		err  error
	)
	switch limitVals := strings.Split(parts[1], ":"); len(limitVals) {
	case 2:
		temp, err = strconv.ParseInt(limitVals[1], 10, 64)
		if err != nil {
			return nil, err
		}
		hard = &temp
		fallthrough
	case 1:
		soft, err = strconv.ParseInt(limitVals[0], 10, 64)
		if err != nil {
			return nil, err
		}
	default:
		return nil, fmt.Errorf("too many limit value arguments - %s, can only have up to two, `soft[:hard]`", parts[1])
	}

	if *hard != -1 {
		if soft == -1 {
			return nil, fmt.Errorf("ulimit soft limit must be less than or equal to hard limit: soft: -1 (unlimited), hard: %d", *hard)
		}
		if soft > *hard {
			return nil, fmt.Errorf("ulimit soft limit must be less than or equal to hard limit: %d > %d", soft, *hard)
		}
	}

	return &Ulimit{Name: parts[0], Soft: soft, Hard: *hard}, nil
}

// GetRlimit returns the RLimit corresponding to Ulimit.
func (u *Ulimit) GetRlimit() (*Rlimit, error) {
	t, exists := ulimitNameMapping[u.Name]
	if !exists {
		return nil, fmt.Errorf("invalid ulimit name %s", u.Name)
	}

	return &Rlimit{Type: t, Soft: uint64(u.Soft), Hard: uint64(u.Hard)}, nil
}

func (u *Ulimit) String() string {
	return fmt.Sprintf("%s=%d:%d", u.Name, u.Soft, u.Hard)
}
   07070100000485000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003000000000elemental-cli-0.3.1/vendor/github.com/emirpasic   07070100000486000041ED000000000000000000000006645E367C00000000000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/github.com/emirpasic/gods  07070100000487000081A4000000000000000000000001645E367C00000864000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/emirpasic/gods/LICENSE  Copyright (c) 2015, Emir Pasic
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
  list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice,
  this list of conditions and the following disclaimer in the documentation
  and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

-------------------------------------------------------------------------------

AVL Tree:

Copyright (c) 2017 Benjamin Scher Purcell <benjapurcell@gmail.com>

Permission to use, copy, modify, and distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
07070100000488000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/emirpasic/gods/containers   07070100000489000081A4000000000000000000000001645E367C00000480000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/emirpasic/gods/containers/containers.go // Copyright (c) 2015, Emir Pasic. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package containers provides core interfaces and functions for data structures.
//
// Container is the base interface for all data structures to implement.
//
// Iterators provide stateful iterators.
//
// Enumerable provides Ruby inspired (each, select, map, find, any?, etc.) container functions.
//
// Serialization provides serializers (marshalers) and deserializers (unmarshalers).
package containers

import "github.com/emirpasic/gods/utils"

// Container is base interface that all data structures implement.
type Container interface {
	Empty() bool
	Size() int
	Clear()
	Values() []interface{}
	String() string
}

// GetSortedValues returns sorted container's elements with respect to the passed comparator.
// Does not affect the ordering of elements within the container.
func GetSortedValues(container Container, comparator utils.Comparator) []interface{} {
	values := container.Values()
	if len(values) < 2 {
		return values
	}
	utils.Sort(values, comparator)
	return values
}
0707010000048A000081A4000000000000000000000001645E367C00000B3B000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/emirpasic/gods/containers/enumerable.go // Copyright (c) 2015, Emir Pasic. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package containers

// EnumerableWithIndex provides functions for ordered containers whose values can be fetched by an index.
type EnumerableWithIndex interface {
	// Each calls the given function once for each element, passing that element's index and value.
	Each(func(index int, value interface{}))

	// Map invokes the given function once for each element and returns a
	// container containing the values returned by the given function.
	// Map(func(index int, value interface{}) interface{}) Container

	// Select returns a new container containing all elements for which the given function returns a true value.
	// Select(func(index int, value interface{}) bool) Container

	// Any passes each element of the container to the given function and
	// returns true if the function ever returns true for any element.
	Any(func(index int, value interface{}) bool) bool

	// All passes each element of the container to the given function and
	// returns true if the function returns true for all elements.
	All(func(index int, value interface{}) bool) bool

	// Find passes each element of the container to the given function and returns
	// the first (index,value) for which the function is true or -1,nil otherwise
	// if no element matches the criteria.
	Find(func(index int, value interface{}) bool) (int, interface{})
}

// EnumerableWithKey provides functions for ordered containers whose values whose elements are key/value pairs.
type EnumerableWithKey interface {
	// Each calls the given function once for each element, passing that element's key and value.
	Each(func(key interface{}, value interface{}))

	// Map invokes the given function once for each element and returns a container
	// containing the values returned by the given function as key/value pairs.
	// Map(func(key interface{}, value interface{}) (interface{}, interface{})) Container

	// Select returns a new container containing all elements for which the given function returns a true value.
	// Select(func(key interface{}, value interface{}) bool) Container

	// Any passes each element of the container to the given function and
	// returns true if the function ever returns true for any element.
	Any(func(key interface{}, value interface{}) bool) bool

	// All passes each element of the container to the given function and
	// returns true if the function returns true for all elements.
	All(func(key interface{}, value interface{}) bool) bool

	// Find passes each element of the container to the given function and returns
	// the first (key,value) for which the function is true or nil,nil otherwise if no element
	// matches the criteria.
	Find(func(key interface{}, value interface{}) bool) (interface{}, interface{})
}
 0707010000048B000081A4000000000000000000000001645E367C00001876000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/emirpasic/gods/containers/iterator.go   // Copyright (c) 2015, Emir Pasic. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package containers

// IteratorWithIndex is stateful iterator for ordered containers whose values can be fetched by an index.
type IteratorWithIndex interface {
	// Next moves the iterator to the next element and returns true if there was a next element in the container.
	// If Next() returns true, then next element's index and value can be retrieved by Index() and Value().
	// If Next() was called for the first time, then it will point the iterator to the first element if it exists.
	// Modifies the state of the iterator.
	Next() bool

	// Value returns the current element's value.
	// Does not modify the state of the iterator.
	Value() interface{}

	// Index returns the current element's index.
	// Does not modify the state of the iterator.
	Index() int

	// Begin resets the iterator to its initial state (one-before-first)
	// Call Next() to fetch the first element if any.
	Begin()

	// First moves the iterator to the first element and returns true if there was a first element in the container.
	// If First() returns true, then first element's index and value can be retrieved by Index() and Value().
	// Modifies the state of the iterator.
	First() bool

	// NextTo moves the iterator to the next element from current position that satisfies the condition given by the
	// passed function, and returns true if there was a next element in the container.
	// If NextTo() returns true, then next element's index and value can be retrieved by Index() and Value().
	// Modifies the state of the iterator.
	NextTo(func(index int, value interface{}) bool) bool
}

// IteratorWithKey is a stateful iterator for ordered containers whose elements are key value pairs.
type IteratorWithKey interface {
	// Next moves the iterator to the next element and returns true if there was a next element in the container.
	// If Next() returns true, then next element's key and value can be retrieved by Key() and Value().
	// If Next() was called for the first time, then it will point the iterator to the first element if it exists.
	// Modifies the state of the iterator.
	Next() bool

	// Value returns the current element's value.
	// Does not modify the state of the iterator.
	Value() interface{}

	// Key returns the current element's key.
	// Does not modify the state of the iterator.
	Key() interface{}

	// Begin resets the iterator to its initial state (one-before-first)
	// Call Next() to fetch the first element if any.
	Begin()

	// First moves the iterator to the first element and returns true if there was a first element in the container.
	// If First() returns true, then first element's key and value can be retrieved by Key() and Value().
	// Modifies the state of the iterator.
	First() bool

	// NextTo moves the iterator to the next element from current position that satisfies the condition given by the
	// passed function, and returns true if there was a next element in the container.
	// If NextTo() returns true, then next element's key and value can be retrieved by Key() and Value().
	// Modifies the state of the iterator.
	NextTo(func(key interface{}, value interface{}) bool) bool
}

// ReverseIteratorWithIndex is stateful iterator for ordered containers whose values can be fetched by an index.
//
// Essentially it is the same as IteratorWithIndex, but provides additional:
//
// Prev() function to enable traversal in reverse
//
// Last() function to move the iterator to the last element.
//
// End() function to move the iterator past the last element (one-past-the-end).
type ReverseIteratorWithIndex interface {
	// Prev moves the iterator to the previous element and returns true if there was a previous element in the container.
	// If Prev() returns true, then previous element's index and value can be retrieved by Index() and Value().
	// Modifies the state of the iterator.
	Prev() bool

	// End moves the iterator past the last element (one-past-the-end).
	// Call Prev() to fetch the last element if any.
	End()

	// Last moves the iterator to the last element and returns true if there was a last element in the container.
	// If Last() returns true, then last element's index and value can be retrieved by Index() and Value().
	// Modifies the state of the iterator.
	Last() bool

	// PrevTo moves the iterator to the previous element from current position that satisfies the condition given by the
	// passed function, and returns true if there was a next element in the container.
	// If PrevTo() returns true, then next element's index and value can be retrieved by Index() and Value().
	// Modifies the state of the iterator.
	PrevTo(func(index int, value interface{}) bool) bool

	IteratorWithIndex
}

// ReverseIteratorWithKey is a stateful iterator for ordered containers whose elements are key value pairs.
//
// Essentially it is the same as IteratorWithKey, but provides additional:
//
// Prev() function to enable traversal in reverse
//
// Last() function to move the iterator to the last element.
type ReverseIteratorWithKey interface {
	// Prev moves the iterator to the previous element and returns true if there was a previous element in the container.
	// If Prev() returns true, then previous element's key and value can be retrieved by Key() and Value().
	// Modifies the state of the iterator.
	Prev() bool

	// End moves the iterator past the last element (one-past-the-end).
	// Call Prev() to fetch the last element if any.
	End()

	// Last moves the iterator to the last element and returns true if there was a last element in the container.
	// If Last() returns true, then last element's key and value can be retrieved by Key() and Value().
	// Modifies the state of the iterator.
	Last() bool

	// PrevTo moves the iterator to the previous element from current position that satisfies the condition given by the
	// passed function, and returns true if there was a next element in the container.
	// If PrevTo() returns true, then next element's key and value can be retrieved by Key() and Value().
	// Modifies the state of the iterator.
	PrevTo(func(key interface{}, value interface{}) bool) bool

	IteratorWithKey
}
  0707010000048C000081A4000000000000000000000001645E367C000002BA000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/emirpasic/gods/containers/serialization.go  // Copyright (c) 2015, Emir Pasic. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package containers

// JSONSerializer provides JSON serialization
type JSONSerializer interface {
	// ToJSON outputs the JSON representation of containers's elements.
	ToJSON() ([]byte, error)
	// MarshalJSON @implements json.Marshaler
	MarshalJSON() ([]byte, error)
}

// JSONDeserializer provides JSON deserialization
type JSONDeserializer interface {
	// FromJSON populates containers's elements from the input JSON representation.
	FromJSON([]byte) error
	// UnmarshalJSON @implements json.Unmarshaler
	UnmarshalJSON([]byte) error
}
  0707010000048D000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/emirpasic/gods/lists    0707010000048E000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/emirpasic/gods/lists/arraylist  0707010000048F000081A4000000000000000000000001645E367C0000171B000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/emirpasic/gods/lists/arraylist/arraylist.go // Copyright (c) 2015, Emir Pasic. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package arraylist implements the array list.
//
// Structure is not thread safe.
//
// Reference: https://en.wikipedia.org/wiki/List_%28abstract_data_type%29
package arraylist

import (
	"fmt"
	"strings"

	"github.com/emirpasic/gods/lists"
	"github.com/emirpasic/gods/utils"
)

// Assert List implementation
var _ lists.List = (*List)(nil)

// List holds the elements in a slice
type List struct {
	elements []interface{}
	size     int
}

const (
	growthFactor = float32(2.0)  // growth by 100%
	shrinkFactor = float32(0.25) // shrink when size is 25% of capacity (0 means never shrink)
)

// New instantiates a new list and adds the passed values, if any, to the list
func New(values ...interface{}) *List {
	list := &List{}
	if len(values) > 0 {
		list.Add(values...)
	}
	return list
}

// Add appends a value at the end of the list
func (list *List) Add(values ...interface{}) {
	list.growBy(len(values))
	for _, value := range values {
		list.elements[list.size] = value
		list.size++
	}
}

// Get returns the element at index.
// Second return parameter is true if index is within bounds of the array and array is not empty, otherwise false.
func (list *List) Get(index int) (interface{}, bool) {

	if !list.withinRange(index) {
		return nil, false
	}

	return list.elements[index], true
}

// Remove removes the element at the given index from the list.
func (list *List) Remove(index int) {

	if !list.withinRange(index) {
		return
	}

	list.elements[index] = nil                                    // cleanup reference
	copy(list.elements[index:], list.elements[index+1:list.size]) // shift to the left by one (slow operation, need ways to optimize this)
	list.size--

	list.shrink()
}

// Contains checks if elements (one or more) are present in the set.
// All elements have to be present in the set for the method to return true.
// Performance time complexity of n^2.
// Returns true if no arguments are passed at all, i.e. set is always super-set of empty set.
func (list *List) Contains(values ...interface{}) bool {

	for _, searchValue := range values {
		found := false
		for index := 0; index < list.size; index++ {
			if list.elements[index] == searchValue {
				found = true
				break
			}
		}
		if !found {
			return false
		}
	}
	return true
}

// Values returns all elements in the list.
func (list *List) Values() []interface{} {
	newElements := make([]interface{}, list.size, list.size)
	copy(newElements, list.elements[:list.size])
	return newElements
}

//IndexOf returns index of provided element
func (list *List) IndexOf(value interface{}) int {
	if list.size == 0 {
		return -1
	}
	for index, element := range list.elements {
		if element == value {
			return index
		}
	}
	return -1
}

// Empty returns true if list does not contain any elements.
func (list *List) Empty() bool {
	return list.size == 0
}

// Size returns number of elements within the list.
func (list *List) Size() int {
	return list.size
}

// Clear removes all elements from the list.
func (list *List) Clear() {
	list.size = 0
	list.elements = []interface{}{}
}

// Sort sorts values (in-place) using.
func (list *List) Sort(comparator utils.Comparator) {
	if len(list.elements) < 2 {
		return
	}
	utils.Sort(list.elements[:list.size], comparator)
}

// Swap swaps the two values at the specified positions.
func (list *List) Swap(i, j int) {
	if list.withinRange(i) && list.withinRange(j) {
		list.elements[i], list.elements[j] = list.elements[j], list.elements[i]
	}
}

// Insert inserts values at specified index position shifting the value at that position (if any) and any subsequent elements to the right.
// Does not do anything if position is negative or bigger than list's size
// Note: position equal to list's size is valid, i.e. append.
func (list *List) Insert(index int, values ...interface{}) {

	if !list.withinRange(index) {
		// Append
		if index == list.size {
			list.Add(values...)
		}
		return
	}

	l := len(values)
	list.growBy(l)
	list.size += l
	copy(list.elements[index+l:], list.elements[index:list.size-l])
	copy(list.elements[index:], values)
}

// Set the value at specified index
// Does not do anything if position is negative or bigger than list's size
// Note: position equal to list's size is valid, i.e. append.
func (list *List) Set(index int, value interface{}) {

	if !list.withinRange(index) {
		// Append
		if index == list.size {
			list.Add(value)
		}
		return
	}

	list.elements[index] = value
}

// String returns a string representation of container
func (list *List) String() string {
	str := "ArrayList\n"
	values := []string{}
	for _, value := range list.elements[:list.size] {
		values = append(values, fmt.Sprintf("%v", value))
	}
	str += strings.Join(values, ", ")
	return str
}

// Check that the index is within bounds of the list
func (list *List) withinRange(index int) bool {
	return index >= 0 && index < list.size
}

func (list *List) resize(cap int) {
	newElements := make([]interface{}, cap, cap)
	copy(newElements, list.elements)
	list.elements = newElements
}

// Expand the array if necessary, i.e. capacity will be reached if we add n elements
func (list *List) growBy(n int) {
	// When capacity is reached, grow by a factor of growthFactor and add number of elements
	currentCapacity := cap(list.elements)
	if list.size+n >= currentCapacity {
		newCapacity := int(growthFactor * float32(currentCapacity+n))
		list.resize(newCapacity)
	}
}

// Shrink the array if necessary, i.e. when size is shrinkFactor percent of current capacity
func (list *List) shrink() {
	if shrinkFactor == 0.0 {
		return
	}
	// Shrink when size is at shrinkFactor * capacity
	currentCapacity := cap(list.elements)
	if list.size <= int(float32(currentCapacity)*shrinkFactor) {
		list.resize(list.size)
	}
}
 07070100000490000081A4000000000000000000000001645E367C00000985000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/emirpasic/gods/lists/arraylist/enumerable.go    // Copyright (c) 2015, Emir Pasic. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package arraylist

import "github.com/emirpasic/gods/containers"

// Assert Enumerable implementation
var _ containers.EnumerableWithIndex = (*List)(nil)

// Each calls the given function once for each element, passing that element's index and value.
func (list *List) Each(f func(index int, value interface{})) {
	iterator := list.Iterator()
	for iterator.Next() {
		f(iterator.Index(), iterator.Value())
	}
}

// Map invokes the given function once for each element and returns a
// container containing the values returned by the given function.
func (list *List) Map(f func(index int, value interface{}) interface{}) *List {
	newList := &List{}
	iterator := list.Iterator()
	for iterator.Next() {
		newList.Add(f(iterator.Index(), iterator.Value()))
	}
	return newList
}

// Select returns a new container containing all elements for which the given function returns a true value.
func (list *List) Select(f func(index int, value interface{}) bool) *List {
	newList := &List{}
	iterator := list.Iterator()
	for iterator.Next() {
		if f(iterator.Index(), iterator.Value()) {
			newList.Add(iterator.Value())
		}
	}
	return newList
}

// Any passes each element of the collection to the given function and
// returns true if the function ever returns true for any element.
func (list *List) Any(f func(index int, value interface{}) bool) bool {
	iterator := list.Iterator()
	for iterator.Next() {
		if f(iterator.Index(), iterator.Value()) {
			return true
		}
	}
	return false
}

// All passes each element of the collection to the given function and
// returns true if the function returns true for all elements.
func (list *List) All(f func(index int, value interface{}) bool) bool {
	iterator := list.Iterator()
	for iterator.Next() {
		if !f(iterator.Index(), iterator.Value()) {
			return false
		}
	}
	return true
}

// Find passes each element of the container to the given function and returns
// the first (index,value) for which the function is true or -1,nil otherwise
// if no element matches the criteria.
func (list *List) Find(f func(index int, value interface{}) bool) (int, interface{}) {
	iterator := list.Iterator()
	for iterator.Next() {
		if f(iterator.Index(), iterator.Value()) {
			return iterator.Index(), iterator.Value()
		}
	}
	return -1, nil
}
   07070100000491000081A4000000000000000000000001645E367C00000FBE000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/emirpasic/gods/lists/arraylist/iterator.go  // Copyright (c) 2015, Emir Pasic. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package arraylist

import "github.com/emirpasic/gods/containers"

// Assert Iterator implementation
var _ containers.ReverseIteratorWithIndex = (*Iterator)(nil)

// Iterator holding the iterator's state
type Iterator struct {
	list  *List
	index int
}

// Iterator returns a stateful iterator whose values can be fetched by an index.
func (list *List) Iterator() Iterator {
	return Iterator{list: list, index: -1}
}

// Next moves the iterator to the next element and returns true if there was a next element in the container.
// If Next() returns true, then next element's index and value can be retrieved by Index() and Value().
// If Next() was called for the first time, then it will point the iterator to the first element if it exists.
// Modifies the state of the iterator.
func (iterator *Iterator) Next() bool {
	if iterator.index < iterator.list.size {
		iterator.index++
	}
	return iterator.list.withinRange(iterator.index)
}

// Prev moves the iterator to the previous element and returns true if there was a previous element in the container.
// If Prev() returns true, then previous element's index and value can be retrieved by Index() and Value().
// Modifies the state of the iterator.
func (iterator *Iterator) Prev() bool {
	if iterator.index >= 0 {
		iterator.index--
	}
	return iterator.list.withinRange(iterator.index)
}

// Value returns the current element's value.
// Does not modify the state of the iterator.
func (iterator *Iterator) Value() interface{} {
	return iterator.list.elements[iterator.index]
}

// Index returns the current element's index.
// Does not modify the state of the iterator.
func (iterator *Iterator) Index() int {
	return iterator.index
}

// Begin resets the iterator to its initial state (one-before-first)
// Call Next() to fetch the first element if any.
func (iterator *Iterator) Begin() {
	iterator.index = -1
}

// End moves the iterator past the last element (one-past-the-end).
// Call Prev() to fetch the last element if any.
func (iterator *Iterator) End() {
	iterator.index = iterator.list.size
}

// First moves the iterator to the first element and returns true if there was a first element in the container.
// If First() returns true, then first element's index and value can be retrieved by Index() and Value().
// Modifies the state of the iterator.
func (iterator *Iterator) First() bool {
	iterator.Begin()
	return iterator.Next()
}

// Last moves the iterator to the last element and returns true if there was a last element in the container.
// If Last() returns true, then last element's index and value can be retrieved by Index() and Value().
// Modifies the state of the iterator.
func (iterator *Iterator) Last() bool {
	iterator.End()
	return iterator.Prev()
}

// NextTo moves the iterator to the next element from current position that satisfies the condition given by the
// passed function, and returns true if there was a next element in the container.
// If NextTo() returns true, then next element's index and value can be retrieved by Index() and Value().
// Modifies the state of the iterator.
func (iterator *Iterator) NextTo(f func(index int, value interface{}) bool) bool {
	for iterator.Next() {
		index, value := iterator.Index(), iterator.Value()
		if f(index, value) {
			return true
		}
	}
	return false
}

// PrevTo moves the iterator to the previous element from current position that satisfies the condition given by the
// passed function, and returns true if there was a next element in the container.
// If PrevTo() returns true, then next element's index and value can be retrieved by Index() and Value().
// Modifies the state of the iterator.
func (iterator *Iterator) PrevTo(f func(index int, value interface{}) bool) bool {
	for iterator.Prev() {
		index, value := iterator.Index(), iterator.Value()
		if f(index, value) {
			return true
		}
	}
	return false
}
  07070100000492000081A4000000000000000000000001645E367C00000402000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/emirpasic/gods/lists/arraylist/serialization.go // Copyright (c) 2015, Emir Pasic. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package arraylist

import (
	"encoding/json"
	"github.com/emirpasic/gods/containers"
)

// Assert Serialization implementation
var _ containers.JSONSerializer = (*List)(nil)
var _ containers.JSONDeserializer = (*List)(nil)

// ToJSON outputs the JSON representation of list's elements.
func (list *List) ToJSON() ([]byte, error) {
	return json.Marshal(list.elements[:list.size])
}

// FromJSON populates list's elements from the input JSON representation.
func (list *List) FromJSON(data []byte) error {
	err := json.Unmarshal(data, &list.elements)
	if err == nil {
		list.size = len(list.elements)
	}
	return err
}

// UnmarshalJSON @implements json.Unmarshaler
func (list *List) UnmarshalJSON(bytes []byte) error {
	return list.FromJSON(bytes)
}

// MarshalJSON @implements json.Marshaler
func (list *List) MarshalJSON() ([]byte, error) {
	return list.ToJSON()
}
  07070100000493000081A4000000000000000000000001645E367C00000525000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/emirpasic/gods/lists/lists.go   // Copyright (c) 2015, Emir Pasic. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package lists provides an abstract List interface.
//
// In computer science, a list or sequence is an abstract data type that represents an ordered sequence of values, where the same value may occur more than once. An instance of a list is a computer representation of the mathematical concept of a finite sequence; the (potentially) infinite analog of a list is a stream.  Lists are a basic example of containers, as they contain other values. If the same value occurs multiple times, each occurrence is considered a distinct item.
//
// Reference: https://en.wikipedia.org/wiki/List_%28abstract_data_type%29
package lists

import (
	"github.com/emirpasic/gods/containers"
	"github.com/emirpasic/gods/utils"
)

// List interface that all lists implement
type List interface {
	Get(index int) (interface{}, bool)
	Remove(index int)
	Add(values ...interface{})
	Contains(values ...interface{}) bool
	Sort(comparator utils.Comparator)
	Swap(index1, index2 int)
	Insert(index int, values ...interface{})
	Set(index int, value interface{})

	containers.Container
	// Empty() bool
	// Size() int
	// Clear()
	// Values() []interface{}
	// String() string
}
   07070100000494000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/emirpasic/gods/trees    07070100000495000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/emirpasic/gods/trees/binaryheap 07070100000496000081A4000000000000000000000001645E367C000013F4000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/emirpasic/gods/trees/binaryheap/binaryheap.go   // Copyright (c) 2015, Emir Pasic. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package binaryheap implements a binary heap backed by array list.
//
// Comparator defines this heap as either min or max heap.
//
// Structure is not thread safe.
//
// References: http://en.wikipedia.org/wiki/Binary_heap
package binaryheap

import (
	"fmt"
	"github.com/emirpasic/gods/lists/arraylist"
	"github.com/emirpasic/gods/trees"
	"github.com/emirpasic/gods/utils"
	"strings"
)

// Assert Tree implementation
var _ trees.Tree = (*Heap)(nil)

// Heap holds elements in an array-list
type Heap struct {
	list       *arraylist.List
	Comparator utils.Comparator
}

// NewWith instantiates a new empty heap tree with the custom comparator.
func NewWith(comparator utils.Comparator) *Heap {
	return &Heap{list: arraylist.New(), Comparator: comparator}
}

// NewWithIntComparator instantiates a new empty heap with the IntComparator, i.e. elements are of type int.
func NewWithIntComparator() *Heap {
	return &Heap{list: arraylist.New(), Comparator: utils.IntComparator}
}

// NewWithStringComparator instantiates a new empty heap with the StringComparator, i.e. elements are of type string.
func NewWithStringComparator() *Heap {
	return &Heap{list: arraylist.New(), Comparator: utils.StringComparator}
}

// Push adds a value onto the heap and bubbles it up accordingly.
func (heap *Heap) Push(values ...interface{}) {
	if len(values) == 1 {
		heap.list.Add(values[0])
		heap.bubbleUp()
	} else {
		// Reference: https://en.wikipedia.org/wiki/Binary_heap#Building_a_heap
		for _, value := range values {
			heap.list.Add(value)
		}
		size := heap.list.Size()/2 + 1
		for i := size; i >= 0; i-- {
			heap.bubbleDownIndex(i)
		}
	}
}

// Pop removes top element on heap and returns it, or nil if heap is empty.
// Second return parameter is true, unless the heap was empty and there was nothing to pop.
func (heap *Heap) Pop() (value interface{}, ok bool) {
	value, ok = heap.list.Get(0)
	if !ok {
		return
	}
	lastIndex := heap.list.Size() - 1
	heap.list.Swap(0, lastIndex)
	heap.list.Remove(lastIndex)
	heap.bubbleDown()
	return
}

// Peek returns top element on the heap without removing it, or nil if heap is empty.
// Second return parameter is true, unless the heap was empty and there was nothing to peek.
func (heap *Heap) Peek() (value interface{}, ok bool) {
	return heap.list.Get(0)
}

// Empty returns true if heap does not contain any elements.
func (heap *Heap) Empty() bool {
	return heap.list.Empty()
}

// Size returns number of elements within the heap.
func (heap *Heap) Size() int {
	return heap.list.Size()
}

// Clear removes all elements from the heap.
func (heap *Heap) Clear() {
	heap.list.Clear()
}

// Values returns all elements in the heap.
func (heap *Heap) Values() []interface{} {
	values := make([]interface{}, heap.list.Size(), heap.list.Size())
	for it := heap.Iterator(); it.Next(); {
		values[it.Index()] = it.Value()
	}
	return values
}

// String returns a string representation of container
func (heap *Heap) String() string {
	str := "BinaryHeap\n"
	values := []string{}
	for it := heap.Iterator(); it.Next(); {
		values = append(values, fmt.Sprintf("%v", it.Value()))
	}
	str += strings.Join(values, ", ")
	return str
}

// Performs the "bubble down" operation. This is to place the element that is at the root
// of the heap in its correct place so that the heap maintains the min/max-heap order property.
func (heap *Heap) bubbleDown() {
	heap.bubbleDownIndex(0)
}

// Performs the "bubble down" operation. This is to place the element that is at the index
// of the heap in its correct place so that the heap maintains the min/max-heap order property.
func (heap *Heap) bubbleDownIndex(index int) {
	size := heap.list.Size()
	for leftIndex := index<<1 + 1; leftIndex < size; leftIndex = index<<1 + 1 {
		rightIndex := index<<1 + 2
		smallerIndex := leftIndex
		leftValue, _ := heap.list.Get(leftIndex)
		rightValue, _ := heap.list.Get(rightIndex)
		if rightIndex < size && heap.Comparator(leftValue, rightValue) > 0 {
			smallerIndex = rightIndex
		}
		indexValue, _ := heap.list.Get(index)
		smallerValue, _ := heap.list.Get(smallerIndex)
		if heap.Comparator(indexValue, smallerValue) > 0 {
			heap.list.Swap(index, smallerIndex)
		} else {
			break
		}
		index = smallerIndex
	}
}

// Performs the "bubble up" operation. This is to place a newly inserted
// element (i.e. last element in the list) in its correct place so that
// the heap maintains the min/max-heap order property.
func (heap *Heap) bubbleUp() {
	index := heap.list.Size() - 1
	for parentIndex := (index - 1) >> 1; index > 0; parentIndex = (index - 1) >> 1 {
		indexValue, _ := heap.list.Get(index)
		parentValue, _ := heap.list.Get(parentIndex)
		if heap.Comparator(parentValue, indexValue) <= 0 {
			break
		}
		heap.list.Swap(index, parentIndex)
		index = parentIndex
	}
}

// Check that the index is within bounds of the list
func (heap *Heap) withinRange(index int) bool {
	return index >= 0 && index < heap.list.Size()
}
07070100000497000081A4000000000000000000000001645E367C000012AB000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/emirpasic/gods/trees/binaryheap/iterator.go // Copyright (c) 2015, Emir Pasic. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package binaryheap

import (
	"github.com/emirpasic/gods/containers"
)

// Assert Iterator implementation
var _ containers.ReverseIteratorWithIndex = (*Iterator)(nil)

// Iterator returns a stateful iterator whose values can be fetched by an index.
type Iterator struct {
	heap  *Heap
	index int
}

// Iterator returns a stateful iterator whose values can be fetched by an index.
func (heap *Heap) Iterator() Iterator {
	return Iterator{heap: heap, index: -1}
}

// Next moves the iterator to the next element and returns true if there was a next element in the container.
// If Next() returns true, then next element's index and value can be retrieved by Index() and Value().
// If Next() was called for the first time, then it will point the iterator to the first element if it exists.
// Modifies the state of the iterator.
func (iterator *Iterator) Next() bool {
	if iterator.index < iterator.heap.Size() {
		iterator.index++
	}
	return iterator.heap.withinRange(iterator.index)
}

// Prev moves the iterator to the previous element and returns true if there was a previous element in the container.
// If Prev() returns true, then previous element's index and value can be retrieved by Index() and Value().
// Modifies the state of the iterator.
func (iterator *Iterator) Prev() bool {
	if iterator.index >= 0 {
		iterator.index--
	}
	return iterator.heap.withinRange(iterator.index)
}

// Value returns the current element's value.
// Does not modify the state of the iterator.
func (iterator *Iterator) Value() interface{} {
	start, end := evaluateRange(iterator.index)
	if end > iterator.heap.Size() {
		end = iterator.heap.Size()
	}
	tmpHeap := NewWith(iterator.heap.Comparator)
	for n := start; n < end; n++ {
		value, _ := iterator.heap.list.Get(n)
		tmpHeap.Push(value)
	}
	for n := 0; n < iterator.index-start; n++ {
		tmpHeap.Pop()
	}
	value, _ := tmpHeap.Pop()
	return value
}

// Index returns the current element's index.
// Does not modify the state of the iterator.
func (iterator *Iterator) Index() int {
	return iterator.index
}

// Begin resets the iterator to its initial state (one-before-first)
// Call Next() to fetch the first element if any.
func (iterator *Iterator) Begin() {
	iterator.index = -1
}

// End moves the iterator past the last element (one-past-the-end).
// Call Prev() to fetch the last element if any.
func (iterator *Iterator) End() {
	iterator.index = iterator.heap.Size()
}

// First moves the iterator to the first element and returns true if there was a first element in the container.
// If First() returns true, then first element's index and value can be retrieved by Index() and Value().
// Modifies the state of the iterator.
func (iterator *Iterator) First() bool {
	iterator.Begin()
	return iterator.Next()
}

// Last moves the iterator to the last element and returns true if there was a last element in the container.
// If Last() returns true, then last element's index and value can be retrieved by Index() and Value().
// Modifies the state of the iterator.
func (iterator *Iterator) Last() bool {
	iterator.End()
	return iterator.Prev()
}

// NextTo moves the iterator to the next element from current position that satisfies the condition given by the
// passed function, and returns true if there was a next element in the container.
// If NextTo() returns true, then next element's index and value can be retrieved by Index() and Value().
// Modifies the state of the iterator.
func (iterator *Iterator) NextTo(f func(index int, value interface{}) bool) bool {
	for iterator.Next() {
		index, value := iterator.Index(), iterator.Value()
		if f(index, value) {
			return true
		}
	}
	return false
}

// PrevTo moves the iterator to the previous element from current position that satisfies the condition given by the
// passed function, and returns true if there was a next element in the container.
// If PrevTo() returns true, then next element's index and value can be retrieved by Index() and Value().
// Modifies the state of the iterator.
func (iterator *Iterator) PrevTo(f func(index int, value interface{}) bool) bool {
	for iterator.Prev() {
		index, value := iterator.Index(), iterator.Value()
		if f(index, value) {
			return true
		}
	}
	return false
}

// numOfBits counts the number of bits of an int
func numOfBits(n int) uint {
	var count uint
	for n != 0 {
		count++
		n >>= 1
	}
	return count
}

// evaluateRange evaluates the index range [start,end) of same level nodes in the heap as the index
func evaluateRange(index int) (start int, end int) {
	bits := numOfBits(index+1) - 1
	start = 1<<bits - 1
	end = start + 1<<bits
	return
}
 07070100000498000081A4000000000000000000000001645E367C00000382000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/emirpasic/gods/trees/binaryheap/serialization.go    // Copyright (c) 2015, Emir Pasic. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package binaryheap

import (
	"github.com/emirpasic/gods/containers"
)

// Assert Serialization implementation
var _ containers.JSONSerializer = (*Heap)(nil)
var _ containers.JSONDeserializer = (*Heap)(nil)

// ToJSON outputs the JSON representation of the heap.
func (heap *Heap) ToJSON() ([]byte, error) {
	return heap.list.ToJSON()
}

// FromJSON populates the heap from the input JSON representation.
func (heap *Heap) FromJSON(data []byte) error {
	return heap.list.FromJSON(data)
}

// UnmarshalJSON @implements json.Unmarshaler
func (heap *Heap) UnmarshalJSON(bytes []byte) error {
	return heap.FromJSON(bytes)
}

// MarshalJSON @implements json.Marshaler
func (heap *Heap) MarshalJSON() ([]byte, error) {
	return heap.ToJSON()
}
  07070100000499000081A4000000000000000000000001645E367C00000319000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/emirpasic/gods/trees/trees.go   // Copyright (c) 2015, Emir Pasic. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package trees provides an abstract Tree interface.
//
// In computer science, a tree is a widely used abstract data type (ADT) or data structure implementing this ADT that simulates a hierarchical tree structure, with a root value and subtrees of children with a parent node, represented as a set of linked nodes.
//
// Reference: https://en.wikipedia.org/wiki/Tree_%28data_structure%29
package trees

import "github.com/emirpasic/gods/containers"

// Tree interface that all trees implement
type Tree interface {
	containers.Container
	// Empty() bool
	// Size() int
	// Clear()
	// Values() []interface{}
	// String() string
}
   0707010000049A000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/emirpasic/gods/utils    0707010000049B000081A4000000000000000000000001645E367C00001330000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/emirpasic/gods/utils/comparator.go  // Copyright (c) 2015, Emir Pasic. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package utils

import "time"

// Comparator will make type assertion (see IntComparator for example),
// which will panic if a or b are not of the asserted type.
//
// Should return a number:
//    negative , if a < b
//    zero     , if a == b
//    positive , if a > b
type Comparator func(a, b interface{}) int

// StringComparator provides a fast comparison on strings
func StringComparator(a, b interface{}) int {
	s1 := a.(string)
	s2 := b.(string)
	min := len(s2)
	if len(s1) < len(s2) {
		min = len(s1)
	}
	diff := 0
	for i := 0; i < min && diff == 0; i++ {
		diff = int(s1[i]) - int(s2[i])
	}
	if diff == 0 {
		diff = len(s1) - len(s2)
	}
	if diff < 0 {
		return -1
	}
	if diff > 0 {
		return 1
	}
	return 0
}

// IntComparator provides a basic comparison on int
func IntComparator(a, b interface{}) int {
	aAsserted := a.(int)
	bAsserted := b.(int)
	switch {
	case aAsserted > bAsserted:
		return 1
	case aAsserted < bAsserted:
		return -1
	default:
		return 0
	}
}

// Int8Comparator provides a basic comparison on int8
func Int8Comparator(a, b interface{}) int {
	aAsserted := a.(int8)
	bAsserted := b.(int8)
	switch {
	case aAsserted > bAsserted:
		return 1
	case aAsserted < bAsserted:
		return -1
	default:
		return 0
	}
}

// Int16Comparator provides a basic comparison on int16
func Int16Comparator(a, b interface{}) int {
	aAsserted := a.(int16)
	bAsserted := b.(int16)
	switch {
	case aAsserted > bAsserted:
		return 1
	case aAsserted < bAsserted:
		return -1
	default:
		return 0
	}
}

// Int32Comparator provides a basic comparison on int32
func Int32Comparator(a, b interface{}) int {
	aAsserted := a.(int32)
	bAsserted := b.(int32)
	switch {
	case aAsserted > bAsserted:
		return 1
	case aAsserted < bAsserted:
		return -1
	default:
		return 0
	}
}

// Int64Comparator provides a basic comparison on int64
func Int64Comparator(a, b interface{}) int {
	aAsserted := a.(int64)
	bAsserted := b.(int64)
	switch {
	case aAsserted > bAsserted:
		return 1
	case aAsserted < bAsserted:
		return -1
	default:
		return 0
	}
}

// UIntComparator provides a basic comparison on uint
func UIntComparator(a, b interface{}) int {
	aAsserted := a.(uint)
	bAsserted := b.(uint)
	switch {
	case aAsserted > bAsserted:
		return 1
	case aAsserted < bAsserted:
		return -1
	default:
		return 0
	}
}

// UInt8Comparator provides a basic comparison on uint8
func UInt8Comparator(a, b interface{}) int {
	aAsserted := a.(uint8)
	bAsserted := b.(uint8)
	switch {
	case aAsserted > bAsserted:
		return 1
	case aAsserted < bAsserted:
		return -1
	default:
		return 0
	}
}

// UInt16Comparator provides a basic comparison on uint16
func UInt16Comparator(a, b interface{}) int {
	aAsserted := a.(uint16)
	bAsserted := b.(uint16)
	switch {
	case aAsserted > bAsserted:
		return 1
	case aAsserted < bAsserted:
		return -1
	default:
		return 0
	}
}

// UInt32Comparator provides a basic comparison on uint32
func UInt32Comparator(a, b interface{}) int {
	aAsserted := a.(uint32)
	bAsserted := b.(uint32)
	switch {
	case aAsserted > bAsserted:
		return 1
	case aAsserted < bAsserted:
		return -1
	default:
		return 0
	}
}

// UInt64Comparator provides a basic comparison on uint64
func UInt64Comparator(a, b interface{}) int {
	aAsserted := a.(uint64)
	bAsserted := b.(uint64)
	switch {
	case aAsserted > bAsserted:
		return 1
	case aAsserted < bAsserted:
		return -1
	default:
		return 0
	}
}

// Float32Comparator provides a basic comparison on float32
func Float32Comparator(a, b interface{}) int {
	aAsserted := a.(float32)
	bAsserted := b.(float32)
	switch {
	case aAsserted > bAsserted:
		return 1
	case aAsserted < bAsserted:
		return -1
	default:
		return 0
	}
}

// Float64Comparator provides a basic comparison on float64
func Float64Comparator(a, b interface{}) int {
	aAsserted := a.(float64)
	bAsserted := b.(float64)
	switch {
	case aAsserted > bAsserted:
		return 1
	case aAsserted < bAsserted:
		return -1
	default:
		return 0
	}
}

// ByteComparator provides a basic comparison on byte
func ByteComparator(a, b interface{}) int {
	aAsserted := a.(byte)
	bAsserted := b.(byte)
	switch {
	case aAsserted > bAsserted:
		return 1
	case aAsserted < bAsserted:
		return -1
	default:
		return 0
	}
}

// RuneComparator provides a basic comparison on rune
func RuneComparator(a, b interface{}) int {
	aAsserted := a.(rune)
	bAsserted := b.(rune)
	switch {
	case aAsserted > bAsserted:
		return 1
	case aAsserted < bAsserted:
		return -1
	default:
		return 0
	}
}

// TimeComparator provides a basic comparison on time.Time
func TimeComparator(a, b interface{}) int {
	aAsserted := a.(time.Time)
	bAsserted := b.(time.Time)

	switch {
	case aAsserted.After(bAsserted):
		return 1
	case aAsserted.Before(bAsserted):
		return -1
	default:
		return 0
	}
}
0707010000049C000081A4000000000000000000000001645E367C00000303000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/emirpasic/gods/utils/sort.go    // Copyright (c) 2015, Emir Pasic. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package utils

import "sort"

// Sort sorts values (in-place) with respect to the given comparator.
//
// Uses Go's sort (hybrid of quicksort for large and then insertion sort for smaller slices).
func Sort(values []interface{}, comparator Comparator) {
	sort.Sort(sortable{values, comparator})
}

type sortable struct {
	values     []interface{}
	comparator Comparator
}

func (s sortable) Len() int {
	return len(s.values)
}
func (s sortable) Swap(i, j int) {
	s.values[i], s.values[j] = s.values[j], s.values[i]
}
func (s sortable) Less(i, j int) bool {
	return s.comparator(s.values[i], s.values[j]) < 0
}
 0707010000049D000081A4000000000000000000000001645E367C00000484000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/emirpasic/gods/utils/utils.go   // Copyright (c) 2015, Emir Pasic. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package utils provides common utility functions.
//
// Provided functionalities:
// - sorting
// - comparators
package utils

import (
	"fmt"
	"strconv"
)

// ToString converts a value to string.
func ToString(value interface{}) string {
	switch value := value.(type) {
	case string:
		return value
	case int8:
		return strconv.FormatInt(int64(value), 10)
	case int16:
		return strconv.FormatInt(int64(value), 10)
	case int32:
		return strconv.FormatInt(int64(value), 10)
	case int64:
		return strconv.FormatInt(value, 10)
	case uint8:
		return strconv.FormatUint(uint64(value), 10)
	case uint16:
		return strconv.FormatUint(uint64(value), 10)
	case uint32:
		return strconv.FormatUint(uint64(value), 10)
	case uint64:
		return strconv.FormatUint(value, 10)
	case float32:
		return strconv.FormatFloat(float64(value), 'g', -1, 64)
	case float64:
		return strconv.FormatFloat(value, 'g', -1, 64)
	case bool:
		return strconv.FormatBool(value)
	default:
		return fmt.Sprintf("%+v", value)
	}
}
0707010000049E000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002F00000000elemental-cli-0.3.1/vendor/github.com/fsnotify    0707010000049F000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/fsnotify/fsnotify   070701000004A0000081A4000000000000000000000001645E367C000000C4000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/fsnotify/fsnotify/.editorconfig root = true

[*.go]
indent_style = tab
indent_size = 4
insert_final_newline = true

[*.{yml,yaml}]
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true
070701000004A1000081A4000000000000000000000001645E367C0000001A000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/fsnotify/fsnotify/.gitattributes    go.sum linguist-generated
  070701000004A2000081A4000000000000000000000001645E367C00000055000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/fsnotify/fsnotify/.gitignore    # go test -c output
*.test
*.test.exe

# Output of go build ./cmd/fsnotify
/fsnotify
   070701000004A3000081A4000000000000000000000001645E367C0000007A000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/fsnotify/fsnotify/.mailmap  Chris Howey <howeyc@gmail.com> <chris@howey.me>
Nathan Youngman <git@nathany.com> <4566+nathany@users.noreply.github.com>
  070701000004A4000081A4000000000000000000000001645E367C000047DA000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/fsnotify/fsnotify/CHANGELOG.md  # Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

Nothing yet.

## [1.6.0] - 2022-10-13

This version of fsnotify needs Go 1.16 (this was already the case since 1.5.1,
but not documented). It also increases the minimum Linux version to 2.6.32.

### Additions

- all: add `Event.Has()` and `Op.Has()` ([#477])

  This makes checking events a lot easier; for example:

	    if event.Op&Write == Write && !(event.Op&Remove == Remove) {
	    }

	Becomes:

	    if event.Has(Write) && !event.Has(Remove) {
	    }

- all: add cmd/fsnotify ([#463])

  A command-line utility for testing and some examples.

### Changes and fixes

- inotify: don't ignore events for files that don't exist ([#260], [#470])

  Previously the inotify watcher would call `os.Lstat()` to check if a file
  still exists before emitting events.

  This was inconsistent with other platforms and resulted in inconsistent event
  reporting (e.g. when a file is quickly removed and re-created), and generally
  a source of confusion. It was added in 2013 to fix a memory leak that no
  longer exists.

- all: return `ErrNonExistentWatch` when `Remove()` is called on a path that's
  not watched ([#460])

- inotify: replace epoll() with non-blocking inotify ([#434])

  Non-blocking inotify was not generally available at the time this library was
  written in 2014, but now it is. As a result, the minimum Linux version is
  bumped from 2.6.27 to 2.6.32. This hugely simplifies the code and is faster.

- kqueue: don't check for events every 100ms ([#480])

  The watcher would wake up every 100ms, even when there was nothing to do. Now
  it waits until there is something to do.

- macos: retry opening files on EINTR ([#475])

- kqueue: skip unreadable files ([#479])

  kqueue requires a file descriptor for every file in a directory; this would
  fail if a file was unreadable by the current user. Now these files are simply
  skipped.

- windows: fix renaming a watched directory if the parent is also watched ([#370])

- windows: increase buffer size from 4K to 64K ([#485])

- windows: close file handle on Remove() ([#288])

- kqueue: put pathname in the error if watching a file fails ([#471])

- inotify, windows: calling Close() more than once could race ([#465])

- kqueue: improve Close() performance ([#233])

- all: various documentation additions and clarifications.

[#233]: https://github.com/fsnotify/fsnotify/pull/233
[#260]: https://github.com/fsnotify/fsnotify/pull/260
[#288]: https://github.com/fsnotify/fsnotify/pull/288
[#370]: https://github.com/fsnotify/fsnotify/pull/370
[#434]: https://github.com/fsnotify/fsnotify/pull/434
[#460]: https://github.com/fsnotify/fsnotify/pull/460
[#463]: https://github.com/fsnotify/fsnotify/pull/463
[#465]: https://github.com/fsnotify/fsnotify/pull/465
[#470]: https://github.com/fsnotify/fsnotify/pull/470
[#471]: https://github.com/fsnotify/fsnotify/pull/471
[#475]: https://github.com/fsnotify/fsnotify/pull/475
[#477]: https://github.com/fsnotify/fsnotify/pull/477
[#479]: https://github.com/fsnotify/fsnotify/pull/479
[#480]: https://github.com/fsnotify/fsnotify/pull/480
[#485]: https://github.com/fsnotify/fsnotify/pull/485

## [1.5.4] - 2022-04-25

* Windows: add missing defer to `Watcher.WatchList` [#447](https://github.com/fsnotify/fsnotify/pull/447)
* go.mod: use latest x/sys [#444](https://github.com/fsnotify/fsnotify/pull/444)
* Fix compilation for OpenBSD [#443](https://github.com/fsnotify/fsnotify/pull/443)

## [1.5.3] - 2022-04-22

* This version is retracted. An incorrect branch is published accidentally [#445](https://github.com/fsnotify/fsnotify/issues/445)

## [1.5.2] - 2022-04-21

* Add a feature to return the directories and files that are being monitored [#374](https://github.com/fsnotify/fsnotify/pull/374)
* Fix potential crash on windows if `raw.FileNameLength` exceeds `syscall.MAX_PATH` [#361](https://github.com/fsnotify/fsnotify/pull/361)
* Allow build on unsupported GOOS [#424](https://github.com/fsnotify/fsnotify/pull/424)
* Don't set `poller.fd` twice in `newFdPoller` [#406](https://github.com/fsnotify/fsnotify/pull/406)
* fix go vet warnings: call to `(*T).Fatalf` from a non-test goroutine [#416](https://github.com/fsnotify/fsnotify/pull/416)

## [1.5.1] - 2021-08-24

* Revert Add AddRaw to not follow symlinks [#394](https://github.com/fsnotify/fsnotify/pull/394)

## [1.5.0] - 2021-08-20

* Go: Increase minimum required version to Go 1.12 [#381](https://github.com/fsnotify/fsnotify/pull/381)
* Feature: Add AddRaw method which does not follow symlinks when adding a watch [#289](https://github.com/fsnotify/fsnotify/pull/298)
* Windows: Follow symlinks by default like on all other systems [#289](https://github.com/fsnotify/fsnotify/pull/289)
* CI: Use GitHub Actions for CI and cover go 1.12-1.17
   [#378](https://github.com/fsnotify/fsnotify/pull/378)
   [#381](https://github.com/fsnotify/fsnotify/pull/381)
   [#385](https://github.com/fsnotify/fsnotify/pull/385)
* Go 1.14+: Fix unsafe pointer conversion [#325](https://github.com/fsnotify/fsnotify/pull/325)

## [1.4.9] - 2020-03-11

* Move example usage to the readme #329. This may resolve #328.

## [1.4.8] - 2020-03-10

* CI: test more go versions (@nathany 1d13583d846ea9d66dcabbfefbfb9d8e6fb05216)
* Tests: Queued inotify events could have been read by the test before max_queued_events was hit (@matthias-stone #265)
* Tests:  t.Fatalf -> t.Errorf in go routines (@gdey #266)
* CI: Less verbosity (@nathany #267)
* Tests: Darwin: Exchangedata is deprecated on 10.13 (@nathany #267)
* Tests: Check if channels are closed in the example (@alexeykazakov #244)
* CI: Only run golint on latest version of go and fix issues (@cpuguy83 #284)
* CI: Add windows to travis matrix (@cpuguy83 #284)
* Docs: Remover appveyor badge (@nathany 11844c0959f6fff69ba325d097fce35bd85a8e93)
* Linux: create epoll and pipe fds with close-on-exec (@JohannesEbke #219)
* Linux: open files with close-on-exec (@linxiulei #273)
* Docs: Plan to support fanotify (@nathany ab058b44498e8b7566a799372a39d150d9ea0119 )
* Project: Add go.mod (@nathany #309)
* Project: Revise editor config (@nathany #309)
* Project: Update copyright for 2019 (@nathany #309)
* CI: Drop go1.8 from CI matrix (@nathany #309)
* Docs: Updating the FAQ section for supportability with NFS & FUSE filesystems (@Pratik32 4bf2d1fec78374803a39307bfb8d340688f4f28e )

## [1.4.7] - 2018-01-09

* BSD/macOS: Fix possible deadlock on closing the watcher on kqueue (thanks @nhooyr and @glycerine)
* Tests: Fix missing verb on format string (thanks @rchiossi)
* Linux: Fix deadlock in Remove (thanks @aarondl)
* Linux: Watch.Add improvements (avoid race, fix consistency, reduce garbage) (thanks @twpayne)
* Docs: Moved FAQ into the README (thanks @vahe)
* Linux: Properly handle inotify's IN_Q_OVERFLOW event (thanks @zeldovich)
* Docs: replace references to OS X with macOS

## [1.4.2] - 2016-10-10

* Linux: use InotifyInit1 with IN_CLOEXEC to stop leaking a file descriptor to a child process when using fork/exec [#178](https://github.com/fsnotify/fsnotify/pull/178) (thanks @pattyshack)

## [1.4.1] - 2016-10-04

* Fix flaky inotify stress test on Linux [#177](https://github.com/fsnotify/fsnotify/pull/177) (thanks @pattyshack)

## [1.4.0] - 2016-10-01

* add a String() method to Event.Op [#165](https://github.com/fsnotify/fsnotify/pull/165) (thanks @oozie)

## [1.3.1] - 2016-06-28

* Windows: fix for double backslash when watching the root of a drive [#151](https://github.com/fsnotify/fsnotify/issues/151) (thanks @brunoqc)

## [1.3.0] - 2016-04-19

* Support linux/arm64 by [patching](https://go-review.googlesource.com/#/c/21971/) x/sys/unix and switching to to it from syscall (thanks @suihkulokki) [#135](https://github.com/fsnotify/fsnotify/pull/135)

## [1.2.10] - 2016-03-02

* Fix golint errors in windows.go [#121](https://github.com/fsnotify/fsnotify/pull/121) (thanks @tiffanyfj)

## [1.2.9] - 2016-01-13

kqueue: Fix logic for CREATE after REMOVE [#111](https://github.com/fsnotify/fsnotify/pull/111) (thanks @bep)

## [1.2.8] - 2015-12-17

* kqueue: fix race condition in Close [#105](https://github.com/fsnotify/fsnotify/pull/105) (thanks @djui for reporting the issue and @ppknap for writing a failing test)
* inotify: fix race in test
* enable race detection for continuous integration (Linux, Mac, Windows)

## [1.2.5] - 2015-10-17

* inotify: use epoll_create1 for arm64 support (requires Linux 2.6.27 or later) [#100](https://github.com/fsnotify/fsnotify/pull/100) (thanks @suihkulokki)
* inotify: fix path leaks [#73](https://github.com/fsnotify/fsnotify/pull/73) (thanks @chamaken)
* kqueue: watch for rename events on subdirectories [#83](https://github.com/fsnotify/fsnotify/pull/83) (thanks @guotie)
* kqueue: avoid infinite loops from symlinks cycles [#101](https://github.com/fsnotify/fsnotify/pull/101) (thanks @illicitonion)

## [1.2.1] - 2015-10-14

* kqueue: don't watch named pipes [#98](https://github.com/fsnotify/fsnotify/pull/98) (thanks @evanphx)

## [1.2.0] - 2015-02-08

* inotify: use epoll to wake up readEvents [#66](https://github.com/fsnotify/fsnotify/pull/66) (thanks @PieterD)
* inotify: closing watcher should now always shut down goroutine [#63](https://github.com/fsnotify/fsnotify/pull/63) (thanks @PieterD)
* kqueue: close kqueue after removing watches, fixes [#59](https://github.com/fsnotify/fsnotify/issues/59)

## [1.1.1] - 2015-02-05

* inotify: Retry read on EINTR [#61](https://github.com/fsnotify/fsnotify/issues/61) (thanks @PieterD)

## [1.1.0] - 2014-12-12

* kqueue: rework internals [#43](https://github.com/fsnotify/fsnotify/pull/43)
    * add low-level functions
    * only need to store flags on directories
    * less mutexes [#13](https://github.com/fsnotify/fsnotify/issues/13)
    * done can be an unbuffered channel
    * remove calls to os.NewSyscallError
* More efficient string concatenation for Event.String() [#52](https://github.com/fsnotify/fsnotify/pull/52) (thanks @mdlayher)
* kqueue: fix regression in  rework causing subdirectories to be watched [#48](https://github.com/fsnotify/fsnotify/issues/48)
* kqueue: cleanup internal watch before sending remove event [#51](https://github.com/fsnotify/fsnotify/issues/51)

## [1.0.4] - 2014-09-07

* kqueue: add dragonfly to the build tags.
* Rename source code files, rearrange code so exported APIs are at the top.
* Add done channel to example code. [#37](https://github.com/fsnotify/fsnotify/pull/37) (thanks @chenyukang)

## [1.0.3] - 2014-08-19

* [Fix] Windows MOVED_TO now translates to Create like on BSD and Linux. [#36](https://github.com/fsnotify/fsnotify/issues/36)

## [1.0.2] - 2014-08-17

* [Fix] Missing create events on macOS. [#14](https://github.com/fsnotify/fsnotify/issues/14) (thanks @zhsso)
* [Fix] Make ./path and path equivalent. (thanks @zhsso)

## [1.0.0] - 2014-08-15

* [API] Remove AddWatch on Windows, use Add.
* Improve documentation for exported identifiers. [#30](https://github.com/fsnotify/fsnotify/issues/30)
* Minor updates based on feedback from golint.

## dev / 2014-07-09

* Moved to [github.com/fsnotify/fsnotify](https://github.com/fsnotify/fsnotify).
* Use os.NewSyscallError instead of returning errno (thanks @hariharan-uno)

## dev / 2014-07-04

* kqueue: fix incorrect mutex used in Close()
* Update example to demonstrate usage of Op.

## dev / 2014-06-28

* [API] Don't set the Write Op for attribute notifications [#4](https://github.com/fsnotify/fsnotify/issues/4)
* Fix for String() method on Event (thanks Alex Brainman)
* Don't build on Plan 9 or Solaris (thanks @4ad)

## dev / 2014-06-21

* Events channel of type Event rather than *Event.
* [internal] use syscall constants directly for inotify and kqueue.
* [internal] kqueue: rename events to kevents and fileEvent to event.

## dev / 2014-06-19

* Go 1.3+ required on Windows (uses syscall.ERROR_MORE_DATA internally).
* [internal] remove cookie from Event struct (unused).
* [internal] Event struct has the same definition across every OS.
* [internal] remove internal watch and removeWatch methods.

## dev / 2014-06-12

* [API] Renamed Watch() to Add() and RemoveWatch() to Remove().
* [API] Pluralized channel names: Events and Errors.
* [API] Renamed FileEvent struct to Event.
* [API] Op constants replace methods like IsCreate().

## dev / 2014-06-12

* Fix data race on kevent buffer (thanks @tilaks) [#98](https://github.com/howeyc/fsnotify/pull/98)

## dev / 2014-05-23

* [API] Remove current implementation of WatchFlags.
    * current implementation doesn't take advantage of OS for efficiency
    * provides little benefit over filtering events as they are received, but has  extra bookkeeping and mutexes
    * no tests for the current implementation
    * not fully implemented on Windows [#93](https://github.com/howeyc/fsnotify/issues/93#issuecomment-39285195)

## [0.9.3] - 2014-12-31

* kqueue: cleanup internal watch before sending remove event [#51](https://github.com/fsnotify/fsnotify/issues/51)

## [0.9.2] - 2014-08-17

* [Backport] Fix missing create events on macOS. [#14](https://github.com/fsnotify/fsnotify/issues/14) (thanks @zhsso)

## [0.9.1] - 2014-06-12

* Fix data race on kevent buffer (thanks @tilaks) [#98](https://github.com/howeyc/fsnotify/pull/98)

## [0.9.0] - 2014-01-17

* IsAttrib() for events that only concern a file's metadata [#79][] (thanks @abustany)
* [Fix] kqueue: fix deadlock [#77][] (thanks @cespare)
* [NOTICE] Development has moved to `code.google.com/p/go.exp/fsnotify` in preparation for inclusion in the Go standard library.

## [0.8.12] - 2013-11-13

* [API] Remove FD_SET and friends from Linux adapter

## [0.8.11] - 2013-11-02

* [Doc] Add Changelog [#72][] (thanks @nathany)
* [Doc] Spotlight and double modify events on macOS [#62][] (reported by @paulhammond)

## [0.8.10] - 2013-10-19

* [Fix] kqueue: remove file watches when parent directory is removed [#71][] (reported by @mdwhatcott)
* [Fix] kqueue: race between Close and readEvents [#70][] (reported by @bernerdschaefer)
* [Doc] specify OS-specific limits in README (thanks @debrando)

## [0.8.9] - 2013-09-08

* [Doc] Contributing (thanks @nathany)
* [Doc] update package path in example code [#63][] (thanks @paulhammond)
* [Doc] GoCI badge in README (Linux only) [#60][]
* [Doc] Cross-platform testing with Vagrant  [#59][] (thanks @nathany)

## [0.8.8] - 2013-06-17

* [Fix] Windows: handle `ERROR_MORE_DATA` on Windows [#49][] (thanks @jbowtie)

## [0.8.7] - 2013-06-03

* [API] Make syscall flags internal
* [Fix] inotify: ignore event changes
* [Fix] race in symlink test [#45][] (reported by @srid)
* [Fix] tests on Windows
* lower case error messages

## [0.8.6] - 2013-05-23

* kqueue: Use EVT_ONLY flag on Darwin
* [Doc] Update README with full example

## [0.8.5] - 2013-05-09

* [Fix] inotify: allow monitoring of "broken" symlinks (thanks @tsg)

## [0.8.4] - 2013-04-07

* [Fix] kqueue: watch all file events [#40][] (thanks @ChrisBuchholz)

## [0.8.3] - 2013-03-13

* [Fix] inoitfy/kqueue memory leak [#36][] (reported by @nbkolchin)
* [Fix] kqueue: use fsnFlags for watching a directory [#33][] (reported by @nbkolchin)

## [0.8.2] - 2013-02-07

* [Doc] add Authors
* [Fix] fix data races for map access [#29][] (thanks @fsouza)

## [0.8.1] - 2013-01-09

* [Fix] Windows path separators
* [Doc] BSD License

## [0.8.0] - 2012-11-09

* kqueue: directory watching improvements (thanks @vmirage)
* inotify: add `IN_MOVED_TO` [#25][] (requested by @cpisto)
* [Fix] kqueue: deleting watched directory [#24][] (reported by @jakerr)

## [0.7.4] - 2012-10-09

* [Fix] inotify: fixes from https://codereview.appspot.com/5418045/ (ugorji)
* [Fix] kqueue: preserve watch flags when watching for delete [#21][] (reported by @robfig)
* [Fix] kqueue: watch the directory even if it isn't a new watch (thanks @robfig)
* [Fix] kqueue: modify after recreation of file

## [0.7.3] - 2012-09-27

* [Fix] kqueue: watch with an existing folder inside the watched folder (thanks @vmirage)
* [Fix] kqueue: no longer get duplicate CREATE events

## [0.7.2] - 2012-09-01

* kqueue: events for created directories

## [0.7.1] - 2012-07-14

* [Fix] for renaming files

## [0.7.0] - 2012-07-02

* [Feature] FSNotify flags
* [Fix] inotify: Added file name back to event path

## [0.6.0] - 2012-06-06

* kqueue: watch files after directory created (thanks @tmc)

## [0.5.1] - 2012-05-22

* [Fix] inotify: remove all watches before Close()

## [0.5.0] - 2012-05-03

* [API] kqueue: return errors during watch instead of sending over channel
* kqueue: match symlink behavior on Linux
* inotify: add `DELETE_SELF` (requested by @taralx)
* [Fix] kqueue: handle EINTR (reported by @robfig)
* [Doc] Godoc example [#1][] (thanks @davecheney)

## [0.4.0] - 2012-03-30

* Go 1 released: build with go tool
* [Feature] Windows support using winfsnotify
* Windows does not have attribute change notifications
* Roll attribute notifications into IsModify

## [0.3.0] - 2012-02-19

* kqueue: add files when watch directory

## [0.2.0] - 2011-12-30

* update to latest Go weekly code

## [0.1.0] - 2011-10-19

* kqueue: add watch on file creation to match inotify
* kqueue: create file event
* inotify: ignore `IN_IGNORED` events
* event String()
* linux: common FileEvent functions
* initial commit

[#79]: https://github.com/howeyc/fsnotify/pull/79
[#77]: https://github.com/howeyc/fsnotify/pull/77
[#72]: https://github.com/howeyc/fsnotify/issues/72
[#71]: https://github.com/howeyc/fsnotify/issues/71
[#70]: https://github.com/howeyc/fsnotify/issues/70
[#63]: https://github.com/howeyc/fsnotify/issues/63
[#62]: https://github.com/howeyc/fsnotify/issues/62
[#60]: https://github.com/howeyc/fsnotify/issues/60
[#59]: https://github.com/howeyc/fsnotify/issues/59
[#49]: https://github.com/howeyc/fsnotify/issues/49
[#45]: https://github.com/howeyc/fsnotify/issues/45
[#40]: https://github.com/howeyc/fsnotify/issues/40
[#36]: https://github.com/howeyc/fsnotify/issues/36
[#33]: https://github.com/howeyc/fsnotify/issues/33
[#29]: https://github.com/howeyc/fsnotify/issues/29
[#25]: https://github.com/howeyc/fsnotify/issues/25
[#24]: https://github.com/howeyc/fsnotify/issues/24
[#21]: https://github.com/howeyc/fsnotify/issues/21
  070701000004A5000081A4000000000000000000000001645E367C000003F5000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/fsnotify/fsnotify/CONTRIBUTING.md   Thank you for your interest in contributing to fsnotify! We try to review and
merge PRs in a reasonable timeframe, but please be aware that:

- To avoid "wasted" work, please discus changes on the issue tracker first. You
  can just send PRs, but they may end up being rejected for one reason or the
  other.

- fsnotify is a cross-platform library, and changes must work reasonably well on
  all supported platforms.

- Changes will need to be compatible; old code should still compile, and the
  runtime behaviour can't change in ways that are likely to lead to problems for
  users.

Testing
-------
Just `go test ./...` runs all the tests; the CI runs this on all supported
platforms. Testing different platforms locally can be done with something like
[goon] or [Vagrant], but this isn't super-easy to set up at the moment.

Use the `-short` flag to make the "stress test" run faster.


[goon]: https://github.com/arp242/goon
[Vagrant]: https://www.vagrantup.com/
[integration_test.go]: /integration_test.go
   070701000004A6000081A4000000000000000000000001645E367C000005FB000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/fsnotify/fsnotify/LICENSE   Copyright © 2012 The Go Authors. All rights reserved.
Copyright © fsnotify Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
  list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
  list of conditions and the following disclaimer in the documentation and/or
  other materials provided with the distribution.
* Neither the name of Google Inc. nor the names of its contributors may be used
  to endorse or promote products derived from this software without specific
  prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 070701000004A7000081A4000000000000000000000001645E367C0000167B000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/fsnotify/fsnotify/README.md fsnotify is a Go library to provide cross-platform filesystem notifications on
Windows, Linux, macOS, and BSD systems.

Go 1.16 or newer is required; the full documentation is at
https://pkg.go.dev/github.com/fsnotify/fsnotify

**It's best to read the documentation at pkg.go.dev, as it's pinned to the last
released version, whereas this README is for the last development version which
may include additions/changes.**

---

Platform support:

| Adapter               | OS             | Status                                                       |
| --------------------- | ---------------| -------------------------------------------------------------|
| inotify               | Linux 2.6.32+  | Supported                                                    |
| kqueue                | BSD, macOS     | Supported                                                    |
| ReadDirectoryChangesW | Windows        | Supported                                                    |
| FSEvents              | macOS          | [Planned](https://github.com/fsnotify/fsnotify/issues/11)    |
| FEN                   | Solaris 11     | [In Progress](https://github.com/fsnotify/fsnotify/pull/371) |
| fanotify              | Linux 5.9+     | [Maybe](https://github.com/fsnotify/fsnotify/issues/114)     |
| USN Journals          | Windows        | [Maybe](https://github.com/fsnotify/fsnotify/issues/53)      |
| Polling               | *All*          | [Maybe](https://github.com/fsnotify/fsnotify/issues/9)       |

Linux and macOS should include Android and iOS, but these are currently untested.

Usage
-----
A basic example:

```go
package main

import (
    "log"

    "github.com/fsnotify/fsnotify"
)

func main() {
    // Create new watcher.
    watcher, err := fsnotify.NewWatcher()
    if err != nil {
        log.Fatal(err)
    }
    defer watcher.Close()

    // Start listening for events.
    go func() {
        for {
            select {
            case event, ok := <-watcher.Events:
                if !ok {
                    return
                }
                log.Println("event:", event)
                if event.Has(fsnotify.Write) {
                    log.Println("modified file:", event.Name)
                }
            case err, ok := <-watcher.Errors:
                if !ok {
                    return
                }
                log.Println("error:", err)
            }
        }
    }()

    // Add a path.
    err = watcher.Add("/tmp")
    if err != nil {
        log.Fatal(err)
    }

    // Block main goroutine forever.
    <-make(chan struct{})
}
```

Some more examples can be found in [cmd/fsnotify](cmd/fsnotify), which can be
run with:

    % go run ./cmd/fsnotify

FAQ
---
### Will a file still be watched when it's moved to another directory?
No, not unless you are watching the location it was moved to.

### Are subdirectories watched too?
No, you must add watches for any directory you want to watch (a recursive
watcher is on the roadmap: [#18]).

[#18]: https://github.com/fsnotify/fsnotify/issues/18

### Do I have to watch the Error and Event channels in a goroutine?
As of now, yes (you can read both channels in the same goroutine using `select`,
you don't need a separate goroutine for both channels; see the example).

### Why don't notifications work with NFS, SMB, FUSE, /proc, or /sys?
fsnotify requires support from underlying OS to work. The current NFS and SMB
protocols does not provide network level support for file notifications, and
neither do the /proc and /sys virtual filesystems.

This could be fixed with a polling watcher ([#9]), but it's not yet implemented.

[#9]: https://github.com/fsnotify/fsnotify/issues/9

Platform-specific notes
-----------------------
### Linux
When a file is removed a REMOVE event won't be emitted until all file
descriptors are closed; it will emit a CHMOD instead:

    fp := os.Open("file")
    os.Remove("file")        // CHMOD
    fp.Close()               // REMOVE

This is the event that inotify sends, so not much can be changed about this.

The `fs.inotify.max_user_watches` sysctl variable specifies the upper limit for
the number of watches per user, and `fs.inotify.max_user_instances` specifies
the maximum number of inotify instances per user. Every Watcher you create is an
"instance", and every path you add is a "watch".

These are also exposed in `/proc` as `/proc/sys/fs/inotify/max_user_watches` and
`/proc/sys/fs/inotify/max_user_instances`

To increase them you can use `sysctl` or write the value to proc file:

    # The default values on Linux 5.18
    sysctl fs.inotify.max_user_watches=124983
    sysctl fs.inotify.max_user_instances=128

To make the changes persist on reboot edit `/etc/sysctl.conf` or
`/usr/lib/sysctl.d/50-default.conf` (details differ per Linux distro; check your
distro's documentation):

    fs.inotify.max_user_watches=124983
    fs.inotify.max_user_instances=128

Reaching the limit will result in a "no space left on device" or "too many open
files" error.

### kqueue (macOS, all BSD systems)
kqueue requires opening a file descriptor for every file that's being watched;
so if you're watching a directory with five files then that's six file
descriptors. You will run in to your system's "max open files" limit faster on
these platforms.

The sysctl variables `kern.maxfiles` and `kern.maxfilesperproc` can be used to
control the maximum number of open files.

### macOS
Spotlight indexing on macOS can result in multiple events (see [#15]). A temporary
workaround is to add your folder(s) to the *Spotlight Privacy settings* until we
have a native FSEvents implementation (see [#11]).

[#11]: https://github.com/fsnotify/fsnotify/issues/11
[#15]: https://github.com/fsnotify/fsnotify/issues/15
 070701000004A8000081A4000000000000000000000001645E367C000019C9000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/fsnotify/fsnotify/backend_fen.go    //go:build solaris
// +build solaris

package fsnotify

import (
	"errors"
)

// Watcher watches a set of paths, delivering events on a channel.
//
// A watcher should not be copied (e.g. pass it by pointer, rather than by
// value).
//
// # Linux notes
//
// When a file is removed a Remove event won't be emitted until all file
// descriptors are closed, and deletes will always emit a Chmod. For example:
//
//     fp := os.Open("file")
//     os.Remove("file")        // Triggers Chmod
//     fp.Close()               // Triggers Remove
//
// This is the event that inotify sends, so not much can be changed about this.
//
// The fs.inotify.max_user_watches sysctl variable specifies the upper limit
// for the number of watches per user, and fs.inotify.max_user_instances
// specifies the maximum number of inotify instances per user. Every Watcher you
// create is an "instance", and every path you add is a "watch".
//
// These are also exposed in /proc as /proc/sys/fs/inotify/max_user_watches and
// /proc/sys/fs/inotify/max_user_instances
//
// To increase them you can use sysctl or write the value to the /proc file:
//
//     # Default values on Linux 5.18
//     sysctl fs.inotify.max_user_watches=124983
//     sysctl fs.inotify.max_user_instances=128
//
// To make the changes persist on reboot edit /etc/sysctl.conf or
// /usr/lib/sysctl.d/50-default.conf (details differ per Linux distro; check
// your distro's documentation):
//
//     fs.inotify.max_user_watches=124983
//     fs.inotify.max_user_instances=128
//
// Reaching the limit will result in a "no space left on device" or "too many open
// files" error.
//
// # kqueue notes (macOS, BSD)
//
// kqueue requires opening a file descriptor for every file that's being watched;
// so if you're watching a directory with five files then that's six file
// descriptors. You will run in to your system's "max open files" limit faster on
// these platforms.
//
// The sysctl variables kern.maxfiles and kern.maxfilesperproc can be used to
// control the maximum number of open files, as well as /etc/login.conf on BSD
// systems.
//
// # macOS notes
//
// Spotlight indexing on macOS can result in multiple events (see [#15]). A
// temporary workaround is to add your folder(s) to the "Spotlight Privacy
// Settings" until we have a native FSEvents implementation (see [#11]).
//
// [#11]: https://github.com/fsnotify/fsnotify/issues/11
// [#15]: https://github.com/fsnotify/fsnotify/issues/15
type Watcher struct {
	// Events sends the filesystem change events.
	//
	// fsnotify can send the following events; a "path" here can refer to a
	// file, directory, symbolic link, or special file like a FIFO.
	//
	//   fsnotify.Create    A new path was created; this may be followed by one
	//                      or more Write events if data also gets written to a
	//                      file.
	//
	//   fsnotify.Remove    A path was removed.
	//
	//   fsnotify.Rename    A path was renamed. A rename is always sent with the
	//                      old path as Event.Name, and a Create event will be
	//                      sent with the new name. Renames are only sent for
	//                      paths that are currently watched; e.g. moving an
	//                      unmonitored file into a monitored directory will
	//                      show up as just a Create. Similarly, renaming a file
	//                      to outside a monitored directory will show up as
	//                      only a Rename.
	//
	//   fsnotify.Write     A file or named pipe was written to. A Truncate will
	//                      also trigger a Write. A single "write action"
	//                      initiated by the user may show up as one or multiple
	//                      writes, depending on when the system syncs things to
	//                      disk. For example when compiling a large Go program
	//                      you may get hundreds of Write events, so you
	//                      probably want to wait until you've stopped receiving
	//                      them (see the dedup example in cmd/fsnotify).
	//
	//   fsnotify.Chmod     Attributes were changed. On Linux this is also sent
	//                      when a file is removed (or more accurately, when a
	//                      link to an inode is removed). On kqueue it's sent
	//                      and on kqueue when a file is truncated. On Windows
	//                      it's never sent.
	Events chan Event

	// Errors sends any errors.
	Errors chan error
}

// NewWatcher creates a new Watcher.
func NewWatcher() (*Watcher, error) {
	return nil, errors.New("FEN based watcher not yet supported for fsnotify\n")
}

// Close removes all watches and closes the events channel.
func (w *Watcher) Close() error {
	return nil
}

// Add starts monitoring the path for changes.
//
// A path can only be watched once; attempting to watch it more than once will
// return an error. Paths that do not yet exist on the filesystem cannot be
// added. A watch will be automatically removed if the path is deleted.
//
// A path will remain watched if it gets renamed to somewhere else on the same
// filesystem, but the monitor will get removed if the path gets deleted and
// re-created, or if it's moved to a different filesystem.
//
// Notifications on network filesystems (NFS, SMB, FUSE, etc.) or special
// filesystems (/proc, /sys, etc.) generally don't work.
//
// # Watching directories
//
// All files in a directory are monitored, including new files that are created
// after the watcher is started. Subdirectories are not watched (i.e. it's
// non-recursive).
//
// # Watching files
//
// Watching individual files (rather than directories) is generally not
// recommended as many tools update files atomically. Instead of "just" writing
// to the file a temporary file will be written to first, and if successful the
// temporary file is moved to to destination removing the original, or some
// variant thereof. The watcher on the original file is now lost, as it no
// longer exists.
//
// Instead, watch the parent directory and use Event.Name to filter out files
// you're not interested in. There is an example of this in [cmd/fsnotify/file.go].
func (w *Watcher) Add(name string) error {
	return nil
}

// Remove stops monitoring the path for changes.
//
// Directories are always removed non-recursively. For example, if you added
// /tmp/dir and /tmp/dir/subdir then you will need to remove both.
//
// Removing a path that has not yet been added returns [ErrNonExistentWatch].
func (w *Watcher) Remove(name string) error {
	return nil
}
   070701000004A9000081A4000000000000000000000001645E367C00003A06000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/fsnotify/fsnotify/backend_inotify.go    //go:build linux
// +build linux

package fsnotify

import (
	"errors"
	"fmt"
	"io"
	"os"
	"path/filepath"
	"strings"
	"sync"
	"unsafe"

	"golang.org/x/sys/unix"
)

// Watcher watches a set of paths, delivering events on a channel.
//
// A watcher should not be copied (e.g. pass it by pointer, rather than by
// value).
//
// # Linux notes
//
// When a file is removed a Remove event won't be emitted until all file
// descriptors are closed, and deletes will always emit a Chmod. For example:
//
//     fp := os.Open("file")
//     os.Remove("file")        // Triggers Chmod
//     fp.Close()               // Triggers Remove
//
// This is the event that inotify sends, so not much can be changed about this.
//
// The fs.inotify.max_user_watches sysctl variable specifies the upper limit
// for the number of watches per user, and fs.inotify.max_user_instances
// specifies the maximum number of inotify instances per user. Every Watcher you
// create is an "instance", and every path you add is a "watch".
//
// These are also exposed in /proc as /proc/sys/fs/inotify/max_user_watches and
// /proc/sys/fs/inotify/max_user_instances
//
// To increase them you can use sysctl or write the value to the /proc file:
//
//     # Default values on Linux 5.18
//     sysctl fs.inotify.max_user_watches=124983
//     sysctl fs.inotify.max_user_instances=128
//
// To make the changes persist on reboot edit /etc/sysctl.conf or
// /usr/lib/sysctl.d/50-default.conf (details differ per Linux distro; check
// your distro's documentation):
//
//     fs.inotify.max_user_watches=124983
//     fs.inotify.max_user_instances=128
//
// Reaching the limit will result in a "no space left on device" or "too many open
// files" error.
//
// # kqueue notes (macOS, BSD)
//
// kqueue requires opening a file descriptor for every file that's being watched;
// so if you're watching a directory with five files then that's six file
// descriptors. You will run in to your system's "max open files" limit faster on
// these platforms.
//
// The sysctl variables kern.maxfiles and kern.maxfilesperproc can be used to
// control the maximum number of open files, as well as /etc/login.conf on BSD
// systems.
//
// # macOS notes
//
// Spotlight indexing on macOS can result in multiple events (see [#15]). A
// temporary workaround is to add your folder(s) to the "Spotlight Privacy
// Settings" until we have a native FSEvents implementation (see [#11]).
//
// [#11]: https://github.com/fsnotify/fsnotify/issues/11
// [#15]: https://github.com/fsnotify/fsnotify/issues/15
type Watcher struct {
	// Events sends the filesystem change events.
	//
	// fsnotify can send the following events; a "path" here can refer to a
	// file, directory, symbolic link, or special file like a FIFO.
	//
	//   fsnotify.Create    A new path was created; this may be followed by one
	//                      or more Write events if data also gets written to a
	//                      file.
	//
	//   fsnotify.Remove    A path was removed.
	//
	//   fsnotify.Rename    A path was renamed. A rename is always sent with the
	//                      old path as Event.Name, and a Create event will be
	//                      sent with the new name. Renames are only sent for
	//                      paths that are currently watched; e.g. moving an
	//                      unmonitored file into a monitored directory will
	//                      show up as just a Create. Similarly, renaming a file
	//                      to outside a monitored directory will show up as
	//                      only a Rename.
	//
	//   fsnotify.Write     A file or named pipe was written to. A Truncate will
	//                      also trigger a Write. A single "write action"
	//                      initiated by the user may show up as one or multiple
	//                      writes, depending on when the system syncs things to
	//                      disk. For example when compiling a large Go program
	//                      you may get hundreds of Write events, so you
	//                      probably want to wait until you've stopped receiving
	//                      them (see the dedup example in cmd/fsnotify).
	//
	//   fsnotify.Chmod     Attributes were changed. On Linux this is also sent
	//                      when a file is removed (or more accurately, when a
	//                      link to an inode is removed). On kqueue it's sent
	//                      and on kqueue when a file is truncated. On Windows
	//                      it's never sent.
	Events chan Event

	// Errors sends any errors.
	Errors chan error

	// Store fd here as os.File.Read() will no longer return on close after
	// calling Fd(). See: https://github.com/golang/go/issues/26439
	fd          int
	mu          sync.Mutex // Map access
	inotifyFile *os.File
	watches     map[string]*watch // Map of inotify watches (key: path)
	paths       map[int]string    // Map of watched paths (key: watch descriptor)
	done        chan struct{}     // Channel for sending a "quit message" to the reader goroutine
	doneResp    chan struct{}     // Channel to respond to Close
}

// NewWatcher creates a new Watcher.
func NewWatcher() (*Watcher, error) {
	// Create inotify fd
	// Need to set the FD to nonblocking mode in order for SetDeadline methods to work
	// Otherwise, blocking i/o operations won't terminate on close
	fd, errno := unix.InotifyInit1(unix.IN_CLOEXEC | unix.IN_NONBLOCK)
	if fd == -1 {
		return nil, errno
	}

	w := &Watcher{
		fd:          fd,
		inotifyFile: os.NewFile(uintptr(fd), ""),
		watches:     make(map[string]*watch),
		paths:       make(map[int]string),
		Events:      make(chan Event),
		Errors:      make(chan error),
		done:        make(chan struct{}),
		doneResp:    make(chan struct{}),
	}

	go w.readEvents()
	return w, nil
}

// Returns true if the event was sent, or false if watcher is closed.
func (w *Watcher) sendEvent(e Event) bool {
	select {
	case w.Events <- e:
		return true
	case <-w.done:
	}
	return false
}

// Returns true if the error was sent, or false if watcher is closed.
func (w *Watcher) sendError(err error) bool {
	select {
	case w.Errors <- err:
		return true
	case <-w.done:
		return false
	}
}

func (w *Watcher) isClosed() bool {
	select {
	case <-w.done:
		return true
	default:
		return false
	}
}

// Close removes all watches and closes the events channel.
func (w *Watcher) Close() error {
	w.mu.Lock()
	if w.isClosed() {
		w.mu.Unlock()
		return nil
	}

	// Send 'close' signal to goroutine, and set the Watcher to closed.
	close(w.done)
	w.mu.Unlock()

	// Causes any blocking reads to return with an error, provided the file
	// still supports deadline operations.
	err := w.inotifyFile.Close()
	if err != nil {
		return err
	}

	// Wait for goroutine to close
	<-w.doneResp

	return nil
}

// Add starts monitoring the path for changes.
//
// A path can only be watched once; attempting to watch it more than once will
// return an error. Paths that do not yet exist on the filesystem cannot be
// added. A watch will be automatically removed if the path is deleted.
//
// A path will remain watched if it gets renamed to somewhere else on the same
// filesystem, but the monitor will get removed if the path gets deleted and
// re-created, or if it's moved to a different filesystem.
//
// Notifications on network filesystems (NFS, SMB, FUSE, etc.) or special
// filesystems (/proc, /sys, etc.) generally don't work.
//
// # Watching directories
//
// All files in a directory are monitored, including new files that are created
// after the watcher is started. Subdirectories are not watched (i.e. it's
// non-recursive).
//
// # Watching files
//
// Watching individual files (rather than directories) is generally not
// recommended as many tools update files atomically. Instead of "just" writing
// to the file a temporary file will be written to first, and if successful the
// temporary file is moved to to destination removing the original, or some
// variant thereof. The watcher on the original file is now lost, as it no
// longer exists.
//
// Instead, watch the parent directory and use Event.Name to filter out files
// you're not interested in. There is an example of this in [cmd/fsnotify/file.go].
func (w *Watcher) Add(name string) error {
	name = filepath.Clean(name)
	if w.isClosed() {
		return errors.New("inotify instance already closed")
	}

	var flags uint32 = unix.IN_MOVED_TO | unix.IN_MOVED_FROM |
		unix.IN_CREATE | unix.IN_ATTRIB | unix.IN_MODIFY |
		unix.IN_MOVE_SELF | unix.IN_DELETE | unix.IN_DELETE_SELF

	w.mu.Lock()
	defer w.mu.Unlock()
	watchEntry := w.watches[name]
	if watchEntry != nil {
		flags |= watchEntry.flags | unix.IN_MASK_ADD
	}
	wd, errno := unix.InotifyAddWatch(w.fd, name, flags)
	if wd == -1 {
		return errno
	}

	if watchEntry == nil {
		w.watches[name] = &watch{wd: uint32(wd), flags: flags}
		w.paths[wd] = name
	} else {
		watchEntry.wd = uint32(wd)
		watchEntry.flags = flags
	}

	return nil
}

// Remove stops monitoring the path for changes.
//
// Directories are always removed non-recursively. For example, if you added
// /tmp/dir and /tmp/dir/subdir then you will need to remove both.
//
// Removing a path that has not yet been added returns [ErrNonExistentWatch].
func (w *Watcher) Remove(name string) error {
	name = filepath.Clean(name)

	// Fetch the watch.
	w.mu.Lock()
	defer w.mu.Unlock()
	watch, ok := w.watches[name]

	// Remove it from inotify.
	if !ok {
		return fmt.Errorf("%w: %s", ErrNonExistentWatch, name)
	}

	// We successfully removed the watch if InotifyRmWatch doesn't return an
	// error, we need to clean up our internal state to ensure it matches
	// inotify's kernel state.
	delete(w.paths, int(watch.wd))
	delete(w.watches, name)

	// inotify_rm_watch will return EINVAL if the file has been deleted;
	// the inotify will already have been removed.
	// watches and pathes are deleted in ignoreLinux() implicitly and asynchronously
	// by calling inotify_rm_watch() below. e.g. readEvents() goroutine receives IN_IGNORE
	// so that EINVAL means that the wd is being rm_watch()ed or its file removed
	// by another thread and we have not received IN_IGNORE event.
	success, errno := unix.InotifyRmWatch(w.fd, watch.wd)
	if success == -1 {
		// TODO: Perhaps it's not helpful to return an error here in every case;
		//       The only two possible errors are:
		//
		//       - EBADF, which happens when w.fd is not a valid file descriptor
		//         of any kind.
		//       - EINVAL, which is when fd is not an inotify descriptor or wd
		//         is not a valid watch descriptor. Watch descriptors are
		//         invalidated when they are removed explicitly or implicitly;
		//         explicitly by inotify_rm_watch, implicitly when the file they
		//         are watching is deleted.
		return errno
	}

	return nil
}

// WatchList returns all paths added with [Add] (and are not yet removed).
func (w *Watcher) WatchList() []string {
	w.mu.Lock()
	defer w.mu.Unlock()

	entries := make([]string, 0, len(w.watches))
	for pathname := range w.watches {
		entries = append(entries, pathname)
	}

	return entries
}

type watch struct {
	wd    uint32 // Watch descriptor (as returned by the inotify_add_watch() syscall)
	flags uint32 // inotify flags of this watch (see inotify(7) for the list of valid flags)
}

// readEvents reads from the inotify file descriptor, converts the
// received events into Event objects and sends them via the Events channel
func (w *Watcher) readEvents() {
	defer func() {
		close(w.doneResp)
		close(w.Errors)
		close(w.Events)
	}()

	var (
		buf   [unix.SizeofInotifyEvent * 4096]byte // Buffer for a maximum of 4096 raw events
		errno error                                // Syscall errno
	)
	for {
		// See if we have been closed.
		if w.isClosed() {
			return
		}

		n, err := w.inotifyFile.Read(buf[:])
		switch {
		case errors.Unwrap(err) == os.ErrClosed:
			return
		case err != nil:
			if !w.sendError(err) {
				return
			}
			continue
		}

		if n < unix.SizeofInotifyEvent {
			var err error
			if n == 0 {
				// If EOF is received. This should really never happen.
				err = io.EOF
			} else if n < 0 {
				// If an error occurred while reading.
				err = errno
			} else {
				// Read was too short.
				err = errors.New("notify: short read in readEvents()")
			}
			if !w.sendError(err) {
				return
			}
			continue
		}

		var offset uint32
		// We don't know how many events we just read into the buffer
		// While the offset points to at least one whole event...
		for offset <= uint32(n-unix.SizeofInotifyEvent) {
			var (
				// Point "raw" to the event in the buffer
				raw     = (*unix.InotifyEvent)(unsafe.Pointer(&buf[offset]))
				mask    = uint32(raw.Mask)
				nameLen = uint32(raw.Len)
			)

			if mask&unix.IN_Q_OVERFLOW != 0 {
				if !w.sendError(ErrEventOverflow) {
					return
				}
			}

			// If the event happened to the watched directory or the watched file, the kernel
			// doesn't append the filename to the event, but we would like to always fill the
			// the "Name" field with a valid filename. We retrieve the path of the watch from
			// the "paths" map.
			w.mu.Lock()
			name, ok := w.paths[int(raw.Wd)]
			// IN_DELETE_SELF occurs when the file/directory being watched is removed.
			// This is a sign to clean up the maps, otherwise we are no longer in sync
			// with the inotify kernel state which has already deleted the watch
			// automatically.
			if ok && mask&unix.IN_DELETE_SELF == unix.IN_DELETE_SELF {
				delete(w.paths, int(raw.Wd))
				delete(w.watches, name)
			}
			w.mu.Unlock()

			if nameLen > 0 {
				// Point "bytes" at the first byte of the filename
				bytes := (*[unix.PathMax]byte)(unsafe.Pointer(&buf[offset+unix.SizeofInotifyEvent]))[:nameLen:nameLen]
				// The filename is padded with NULL bytes. TrimRight() gets rid of those.
				name += "/" + strings.TrimRight(string(bytes[0:nameLen]), "\000")
			}

			event := w.newEvent(name, mask)

			// Send the events that are not ignored on the events channel
			if mask&unix.IN_IGNORED == 0 {
				if !w.sendEvent(event) {
					return
				}
			}

			// Move to the next event in the buffer
			offset += unix.SizeofInotifyEvent + nameLen
		}
	}
}

// newEvent returns an platform-independent Event based on an inotify mask.
func (w *Watcher) newEvent(name string, mask uint32) Event {
	e := Event{Name: name}
	if mask&unix.IN_CREATE == unix.IN_CREATE || mask&unix.IN_MOVED_TO == unix.IN_MOVED_TO {
		e.Op |= Create
	}
	if mask&unix.IN_DELETE_SELF == unix.IN_DELETE_SELF || mask&unix.IN_DELETE == unix.IN_DELETE {
		e.Op |= Remove
	}
	if mask&unix.IN_MODIFY == unix.IN_MODIFY {
		e.Op |= Write
	}
	if mask&unix.IN_MOVE_SELF == unix.IN_MOVE_SELF || mask&unix.IN_MOVED_FROM == unix.IN_MOVED_FROM {
		e.Op |= Rename
	}
	if mask&unix.IN_ATTRIB == unix.IN_ATTRIB {
		e.Op |= Chmod
	}
	return e
}
  070701000004AA000081A4000000000000000000000001645E367C00005314000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/fsnotify/fsnotify/backend_kqueue.go //go:build freebsd || openbsd || netbsd || dragonfly || darwin
// +build freebsd openbsd netbsd dragonfly darwin

package fsnotify

import (
	"errors"
	"fmt"
	"io/ioutil"
	"os"
	"path/filepath"
	"sync"

	"golang.org/x/sys/unix"
)

// Watcher watches a set of paths, delivering events on a channel.
//
// A watcher should not be copied (e.g. pass it by pointer, rather than by
// value).
//
// # Linux notes
//
// When a file is removed a Remove event won't be emitted until all file
// descriptors are closed, and deletes will always emit a Chmod. For example:
//
//     fp := os.Open("file")
//     os.Remove("file")        // Triggers Chmod
//     fp.Close()               // Triggers Remove
//
// This is the event that inotify sends, so not much can be changed about this.
//
// The fs.inotify.max_user_watches sysctl variable specifies the upper limit
// for the number of watches per user, and fs.inotify.max_user_instances
// specifies the maximum number of inotify instances per user. Every Watcher you
// create is an "instance", and every path you add is a "watch".
//
// These are also exposed in /proc as /proc/sys/fs/inotify/max_user_watches and
// /proc/sys/fs/inotify/max_user_instances
//
// To increase them you can use sysctl or write the value to the /proc file:
//
//     # Default values on Linux 5.18
//     sysctl fs.inotify.max_user_watches=124983
//     sysctl fs.inotify.max_user_instances=128
//
// To make the changes persist on reboot edit /etc/sysctl.conf or
// /usr/lib/sysctl.d/50-default.conf (details differ per Linux distro; check
// your distro's documentation):
//
//     fs.inotify.max_user_watches=124983
//     fs.inotify.max_user_instances=128
//
// Reaching the limit will result in a "no space left on device" or "too many open
// files" error.
//
// # kqueue notes (macOS, BSD)
//
// kqueue requires opening a file descriptor for every file that's being watched;
// so if you're watching a directory with five files then that's six file
// descriptors. You will run in to your system's "max open files" limit faster on
// these platforms.
//
// The sysctl variables kern.maxfiles and kern.maxfilesperproc can be used to
// control the maximum number of open files, as well as /etc/login.conf on BSD
// systems.
//
// # macOS notes
//
// Spotlight indexing on macOS can result in multiple events (see [#15]). A
// temporary workaround is to add your folder(s) to the "Spotlight Privacy
// Settings" until we have a native FSEvents implementation (see [#11]).
//
// [#11]: https://github.com/fsnotify/fsnotify/issues/11
// [#15]: https://github.com/fsnotify/fsnotify/issues/15
type Watcher struct {
	// Events sends the filesystem change events.
	//
	// fsnotify can send the following events; a "path" here can refer to a
	// file, directory, symbolic link, or special file like a FIFO.
	//
	//   fsnotify.Create    A new path was created; this may be followed by one
	//                      or more Write events if data also gets written to a
	//                      file.
	//
	//   fsnotify.Remove    A path was removed.
	//
	//   fsnotify.Rename    A path was renamed. A rename is always sent with the
	//                      old path as Event.Name, and a Create event will be
	//                      sent with the new name. Renames are only sent for
	//                      paths that are currently watched; e.g. moving an
	//                      unmonitored file into a monitored directory will
	//                      show up as just a Create. Similarly, renaming a file
	//                      to outside a monitored directory will show up as
	//                      only a Rename.
	//
	//   fsnotify.Write     A file or named pipe was written to. A Truncate will
	//                      also trigger a Write. A single "write action"
	//                      initiated by the user may show up as one or multiple
	//                      writes, depending on when the system syncs things to
	//                      disk. For example when compiling a large Go program
	//                      you may get hundreds of Write events, so you
	//                      probably want to wait until you've stopped receiving
	//                      them (see the dedup example in cmd/fsnotify).
	//
	//   fsnotify.Chmod     Attributes were changed. On Linux this is also sent
	//                      when a file is removed (or more accurately, when a
	//                      link to an inode is removed). On kqueue it's sent
	//                      and on kqueue when a file is truncated. On Windows
	//                      it's never sent.
	Events chan Event

	// Errors sends any errors.
	Errors chan error

	done         chan struct{}
	kq           int                         // File descriptor (as returned by the kqueue() syscall).
	closepipe    [2]int                      // Pipe used for closing.
	mu           sync.Mutex                  // Protects access to watcher data
	watches      map[string]int              // Watched file descriptors (key: path).
	watchesByDir map[string]map[int]struct{} // Watched file descriptors indexed by the parent directory (key: dirname(path)).
	userWatches  map[string]struct{}         // Watches added with Watcher.Add()
	dirFlags     map[string]uint32           // Watched directories to fflags used in kqueue.
	paths        map[int]pathInfo            // File descriptors to path names for processing kqueue events.
	fileExists   map[string]struct{}         // Keep track of if we know this file exists (to stop duplicate create events).
	isClosed     bool                        // Set to true when Close() is first called
}

type pathInfo struct {
	name  string
	isDir bool
}

// NewWatcher creates a new Watcher.
func NewWatcher() (*Watcher, error) {
	kq, closepipe, err := newKqueue()
	if err != nil {
		return nil, err
	}

	w := &Watcher{
		kq:           kq,
		closepipe:    closepipe,
		watches:      make(map[string]int),
		watchesByDir: make(map[string]map[int]struct{}),
		dirFlags:     make(map[string]uint32),
		paths:        make(map[int]pathInfo),
		fileExists:   make(map[string]struct{}),
		userWatches:  make(map[string]struct{}),
		Events:       make(chan Event),
		Errors:       make(chan error),
		done:         make(chan struct{}),
	}

	go w.readEvents()
	return w, nil
}

// newKqueue creates a new kernel event queue and returns a descriptor.
//
// This registers a new event on closepipe, which will trigger an event when
// it's closed. This way we can use kevent() without timeout/polling; without
// the closepipe, it would block forever and we wouldn't be able to stop it at
// all.
func newKqueue() (kq int, closepipe [2]int, err error) {
	kq, err = unix.Kqueue()
	if kq == -1 {
		return kq, closepipe, err
	}

	// Register the close pipe.
	err = unix.Pipe(closepipe[:])
	if err != nil {
		unix.Close(kq)
		return kq, closepipe, err
	}

	// Register changes to listen on the closepipe.
	changes := make([]unix.Kevent_t, 1)
	// SetKevent converts int to the platform-specific types.
	unix.SetKevent(&changes[0], closepipe[0], unix.EVFILT_READ,
		unix.EV_ADD|unix.EV_ENABLE|unix.EV_ONESHOT)

	ok, err := unix.Kevent(kq, changes, nil, nil)
	if ok == -1 {
		unix.Close(kq)
		unix.Close(closepipe[0])
		unix.Close(closepipe[1])
		return kq, closepipe, err
	}
	return kq, closepipe, nil
}

// Returns true if the event was sent, or false if watcher is closed.
func (w *Watcher) sendEvent(e Event) bool {
	select {
	case w.Events <- e:
		return true
	case <-w.done:
	}
	return false
}

// Returns true if the error was sent, or false if watcher is closed.
func (w *Watcher) sendError(err error) bool {
	select {
	case w.Errors <- err:
		return true
	case <-w.done:
	}
	return false
}

// Close removes all watches and closes the events channel.
func (w *Watcher) Close() error {
	w.mu.Lock()
	if w.isClosed {
		w.mu.Unlock()
		return nil
	}
	w.isClosed = true

	// copy paths to remove while locked
	pathsToRemove := make([]string, 0, len(w.watches))
	for name := range w.watches {
		pathsToRemove = append(pathsToRemove, name)
	}
	w.mu.Unlock() // Unlock before calling Remove, which also locks
	for _, name := range pathsToRemove {
		w.Remove(name)
	}

	// Send "quit" message to the reader goroutine.
	unix.Close(w.closepipe[1])
	close(w.done)

	return nil
}

// Add starts monitoring the path for changes.
//
// A path can only be watched once; attempting to watch it more than once will
// return an error. Paths that do not yet exist on the filesystem cannot be
// added. A watch will be automatically removed if the path is deleted.
//
// A path will remain watched if it gets renamed to somewhere else on the same
// filesystem, but the monitor will get removed if the path gets deleted and
// re-created, or if it's moved to a different filesystem.
//
// Notifications on network filesystems (NFS, SMB, FUSE, etc.) or special
// filesystems (/proc, /sys, etc.) generally don't work.
//
// # Watching directories
//
// All files in a directory are monitored, including new files that are created
// after the watcher is started. Subdirectories are not watched (i.e. it's
// non-recursive).
//
// # Watching files
//
// Watching individual files (rather than directories) is generally not
// recommended as many tools update files atomically. Instead of "just" writing
// to the file a temporary file will be written to first, and if successful the
// temporary file is moved to to destination removing the original, or some
// variant thereof. The watcher on the original file is now lost, as it no
// longer exists.
//
// Instead, watch the parent directory and use Event.Name to filter out files
// you're not interested in. There is an example of this in [cmd/fsnotify/file.go].
func (w *Watcher) Add(name string) error {
	w.mu.Lock()
	w.userWatches[name] = struct{}{}
	w.mu.Unlock()
	_, err := w.addWatch(name, noteAllEvents)
	return err
}

// Remove stops monitoring the path for changes.
//
// Directories are always removed non-recursively. For example, if you added
// /tmp/dir and /tmp/dir/subdir then you will need to remove both.
//
// Removing a path that has not yet been added returns [ErrNonExistentWatch].
func (w *Watcher) Remove(name string) error {
	name = filepath.Clean(name)
	w.mu.Lock()
	watchfd, ok := w.watches[name]
	w.mu.Unlock()
	if !ok {
		return fmt.Errorf("%w: %s", ErrNonExistentWatch, name)
	}

	err := w.register([]int{watchfd}, unix.EV_DELETE, 0)
	if err != nil {
		return err
	}

	unix.Close(watchfd)

	w.mu.Lock()
	isDir := w.paths[watchfd].isDir
	delete(w.watches, name)
	delete(w.userWatches, name)

	parentName := filepath.Dir(name)
	delete(w.watchesByDir[parentName], watchfd)

	if len(w.watchesByDir[parentName]) == 0 {
		delete(w.watchesByDir, parentName)
	}

	delete(w.paths, watchfd)
	delete(w.dirFlags, name)
	delete(w.fileExists, name)
	w.mu.Unlock()

	// Find all watched paths that are in this directory that are not external.
	if isDir {
		var pathsToRemove []string
		w.mu.Lock()
		for fd := range w.watchesByDir[name] {
			path := w.paths[fd]
			if _, ok := w.userWatches[path.name]; !ok {
				pathsToRemove = append(pathsToRemove, path.name)
			}
		}
		w.mu.Unlock()
		for _, name := range pathsToRemove {
			// Since these are internal, not much sense in propagating error
			// to the user, as that will just confuse them with an error about
			// a path they did not explicitly watch themselves.
			w.Remove(name)
		}
	}

	return nil
}

// WatchList returns all paths added with [Add] (and are not yet removed).
func (w *Watcher) WatchList() []string {
	w.mu.Lock()
	defer w.mu.Unlock()

	entries := make([]string, 0, len(w.userWatches))
	for pathname := range w.userWatches {
		entries = append(entries, pathname)
	}

	return entries
}

// Watch all events (except NOTE_EXTEND, NOTE_LINK, NOTE_REVOKE)
const noteAllEvents = unix.NOTE_DELETE | unix.NOTE_WRITE | unix.NOTE_ATTRIB | unix.NOTE_RENAME

// addWatch adds name to the watched file set.
// The flags are interpreted as described in kevent(2).
// Returns the real path to the file which was added, if any, which may be different from the one passed in the case of symlinks.
func (w *Watcher) addWatch(name string, flags uint32) (string, error) {
	var isDir bool
	// Make ./name and name equivalent
	name = filepath.Clean(name)

	w.mu.Lock()
	if w.isClosed {
		w.mu.Unlock()
		return "", errors.New("kevent instance already closed")
	}
	watchfd, alreadyWatching := w.watches[name]
	// We already have a watch, but we can still override flags.
	if alreadyWatching {
		isDir = w.paths[watchfd].isDir
	}
	w.mu.Unlock()

	if !alreadyWatching {
		fi, err := os.Lstat(name)
		if err != nil {
			return "", err
		}

		// Don't watch sockets or named pipes
		if (fi.Mode()&os.ModeSocket == os.ModeSocket) || (fi.Mode()&os.ModeNamedPipe == os.ModeNamedPipe) {
			return "", nil
		}

		// Follow Symlinks
		//
		// Linux can add unresolvable symlinks to the watch list without issue,
		// and Windows can't do symlinks period. To maintain consistency, we
		// will act like everything is fine if the link can't be resolved.
		// There will simply be no file events for broken symlinks. Hence the
		// returns of nil on errors.
		if fi.Mode()&os.ModeSymlink == os.ModeSymlink {
			name, err = filepath.EvalSymlinks(name)
			if err != nil {
				return "", nil
			}

			w.mu.Lock()
			_, alreadyWatching = w.watches[name]
			w.mu.Unlock()

			if alreadyWatching {
				return name, nil
			}

			fi, err = os.Lstat(name)
			if err != nil {
				return "", nil
			}
		}

		// Retry on EINTR; open() can return EINTR in practice on macOS.
		// See #354, and go issues 11180 and 39237.
		for {
			watchfd, err = unix.Open(name, openMode, 0)
			if err == nil {
				break
			}
			if errors.Is(err, unix.EINTR) {
				continue
			}

			return "", err
		}

		isDir = fi.IsDir()
	}

	err := w.register([]int{watchfd}, unix.EV_ADD|unix.EV_CLEAR|unix.EV_ENABLE, flags)
	if err != nil {
		unix.Close(watchfd)
		return "", err
	}

	if !alreadyWatching {
		w.mu.Lock()
		parentName := filepath.Dir(name)
		w.watches[name] = watchfd

		watchesByDir, ok := w.watchesByDir[parentName]
		if !ok {
			watchesByDir = make(map[int]struct{}, 1)
			w.watchesByDir[parentName] = watchesByDir
		}
		watchesByDir[watchfd] = struct{}{}

		w.paths[watchfd] = pathInfo{name: name, isDir: isDir}
		w.mu.Unlock()
	}

	if isDir {
		// Watch the directory if it has not been watched before,
		// or if it was watched before, but perhaps only a NOTE_DELETE (watchDirectoryFiles)
		w.mu.Lock()

		watchDir := (flags&unix.NOTE_WRITE) == unix.NOTE_WRITE &&
			(!alreadyWatching || (w.dirFlags[name]&unix.NOTE_WRITE) != unix.NOTE_WRITE)
		// Store flags so this watch can be updated later
		w.dirFlags[name] = flags
		w.mu.Unlock()

		if watchDir {
			if err := w.watchDirectoryFiles(name); err != nil {
				return "", err
			}
		}
	}
	return name, nil
}

// readEvents reads from kqueue and converts the received kevents into
// Event values that it sends down the Events channel.
func (w *Watcher) readEvents() {
	defer func() {
		err := unix.Close(w.kq)
		if err != nil {
			w.Errors <- err
		}
		unix.Close(w.closepipe[0])
		close(w.Events)
		close(w.Errors)
	}()

	eventBuffer := make([]unix.Kevent_t, 10)
	for closed := false; !closed; {
		kevents, err := w.read(eventBuffer)
		// EINTR is okay, the syscall was interrupted before timeout expired.
		if err != nil && err != unix.EINTR {
			if !w.sendError(fmt.Errorf("fsnotify.readEvents: %w", err)) {
				closed = true
			}
			continue
		}

		// Flush the events we received to the Events channel
		for _, kevent := range kevents {
			var (
				watchfd = int(kevent.Ident)
				mask    = uint32(kevent.Fflags)
			)

			// Shut down the loop when the pipe is closed, but only after all
			// other events have been processed.
			if watchfd == w.closepipe[0] {
				closed = true
				continue
			}

			w.mu.Lock()
			path := w.paths[watchfd]
			w.mu.Unlock()

			event := w.newEvent(path.name, mask)

			if path.isDir && !event.Has(Remove) {
				// Double check to make sure the directory exists. This can
				// happen when we do a rm -fr on a recursively watched folders
				// and we receive a modification event first but the folder has
				// been deleted and later receive the delete event.
				if _, err := os.Lstat(event.Name); os.IsNotExist(err) {
					event.Op |= Remove
				}
			}

			if event.Has(Rename) || event.Has(Remove) {
				w.Remove(event.Name)
				w.mu.Lock()
				delete(w.fileExists, event.Name)
				w.mu.Unlock()
			}

			if path.isDir && event.Has(Write) && !event.Has(Remove) {
				w.sendDirectoryChangeEvents(event.Name)
			} else {
				if !w.sendEvent(event) {
					closed = true
					continue
				}
			}

			if event.Has(Remove) {
				// Look for a file that may have overwritten this.
				// For example, mv f1 f2 will delete f2, then create f2.
				if path.isDir {
					fileDir := filepath.Clean(event.Name)
					w.mu.Lock()
					_, found := w.watches[fileDir]
					w.mu.Unlock()
					if found {
						// make sure the directory exists before we watch for changes. When we
						// do a recursive watch and perform rm -fr, the parent directory might
						// have gone missing, ignore the missing directory and let the
						// upcoming delete event remove the watch from the parent directory.
						if _, err := os.Lstat(fileDir); err == nil {
							w.sendDirectoryChangeEvents(fileDir)
						}
					}
				} else {
					filePath := filepath.Clean(event.Name)
					if fileInfo, err := os.Lstat(filePath); err == nil {
						w.sendFileCreatedEventIfNew(filePath, fileInfo)
					}
				}
			}
		}
	}
}

// newEvent returns an platform-independent Event based on kqueue Fflags.
func (w *Watcher) newEvent(name string, mask uint32) Event {
	e := Event{Name: name}
	if mask&unix.NOTE_DELETE == unix.NOTE_DELETE {
		e.Op |= Remove
	}
	if mask&unix.NOTE_WRITE == unix.NOTE_WRITE {
		e.Op |= Write
	}
	if mask&unix.NOTE_RENAME == unix.NOTE_RENAME {
		e.Op |= Rename
	}
	if mask&unix.NOTE_ATTRIB == unix.NOTE_ATTRIB {
		e.Op |= Chmod
	}
	return e
}

// watchDirectoryFiles to mimic inotify when adding a watch on a directory
func (w *Watcher) watchDirectoryFiles(dirPath string) error {
	// Get all files
	files, err := ioutil.ReadDir(dirPath)
	if err != nil {
		return err
	}

	for _, fileInfo := range files {
		path := filepath.Join(dirPath, fileInfo.Name())

		cleanPath, err := w.internalWatch(path, fileInfo)
		if err != nil {
			// No permission to read the file; that's not a problem: just skip.
			// But do add it to w.fileExists to prevent it from being picked up
			// as a "new" file later (it still shows up in the directory
			// listing).
			switch {
			case errors.Is(err, unix.EACCES) || errors.Is(err, unix.EPERM):
				cleanPath = filepath.Clean(path)
			default:
				return fmt.Errorf("%q: %w", filepath.Join(dirPath, fileInfo.Name()), err)
			}
		}

		w.mu.Lock()
		w.fileExists[cleanPath] = struct{}{}
		w.mu.Unlock()
	}

	return nil
}

// Search the directory for new files and send an event for them.
//
// This functionality is to have the BSD watcher match the inotify, which sends
// a create event for files created in a watched directory.
func (w *Watcher) sendDirectoryChangeEvents(dir string) {
	// Get all files
	files, err := ioutil.ReadDir(dir)
	if err != nil {
		if !w.sendError(fmt.Errorf("fsnotify.sendDirectoryChangeEvents: %w", err)) {
			return
		}
	}

	// Search for new files
	for _, fi := range files {
		err := w.sendFileCreatedEventIfNew(filepath.Join(dir, fi.Name()), fi)
		if err != nil {
			return
		}
	}
}

// sendFileCreatedEvent sends a create event if the file isn't already being tracked.
func (w *Watcher) sendFileCreatedEventIfNew(filePath string, fileInfo os.FileInfo) (err error) {
	w.mu.Lock()
	_, doesExist := w.fileExists[filePath]
	w.mu.Unlock()
	if !doesExist {
		if !w.sendEvent(Event{Name: filePath, Op: Create}) {
			return
		}
	}

	// like watchDirectoryFiles (but without doing another ReadDir)
	filePath, err = w.internalWatch(filePath, fileInfo)
	if err != nil {
		return err
	}

	w.mu.Lock()
	w.fileExists[filePath] = struct{}{}
	w.mu.Unlock()

	return nil
}

func (w *Watcher) internalWatch(name string, fileInfo os.FileInfo) (string, error) {
	if fileInfo.IsDir() {
		// mimic Linux providing delete events for subdirectories
		// but preserve the flags used if currently watching subdirectory
		w.mu.Lock()
		flags := w.dirFlags[name]
		w.mu.Unlock()

		flags |= unix.NOTE_DELETE | unix.NOTE_RENAME
		return w.addWatch(name, flags)
	}

	// watch file to mimic Linux inotify
	return w.addWatch(name, noteAllEvents)
}

// Register events with the queue.
func (w *Watcher) register(fds []int, flags int, fflags uint32) error {
	changes := make([]unix.Kevent_t, len(fds))
	for i, fd := range fds {
		// SetKevent converts int to the platform-specific types.
		unix.SetKevent(&changes[i], fd, unix.EVFILT_VNODE, flags)
		changes[i].Fflags = fflags
	}

	// Register the events.
	success, err := unix.Kevent(w.kq, changes, nil, nil)
	if success == -1 {
		return err
	}
	return nil
}

// read retrieves pending events, or waits until an event occurs.
func (w *Watcher) read(events []unix.Kevent_t) ([]unix.Kevent_t, error) {
	n, err := unix.Kevent(w.kq, nil, events, nil)
	if err != nil {
		return nil, err
	}
	return events[0:n], nil
}
070701000004AB000081A4000000000000000000000001645E367C00000960000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/fsnotify/fsnotify/backend_other.go  //go:build !darwin && !dragonfly && !freebsd && !openbsd && !linux && !netbsd && !solaris && !windows
// +build !darwin,!dragonfly,!freebsd,!openbsd,!linux,!netbsd,!solaris,!windows

package fsnotify

import (
	"fmt"
	"runtime"
)

// Watcher watches a set of files, delivering events to a channel.
type Watcher struct{}

// NewWatcher creates a new Watcher.
func NewWatcher() (*Watcher, error) {
	return nil, fmt.Errorf("fsnotify not supported on %s", runtime.GOOS)
}

// Close removes all watches and closes the events channel.
func (w *Watcher) Close() error {
	return nil
}

// Add starts monitoring the path for changes.
//
// A path can only be watched once; attempting to watch it more than once will
// return an error. Paths that do not yet exist on the filesystem cannot be
// added. A watch will be automatically removed if the path is deleted.
//
// A path will remain watched if it gets renamed to somewhere else on the same
// filesystem, but the monitor will get removed if the path gets deleted and
// re-created, or if it's moved to a different filesystem.
//
// Notifications on network filesystems (NFS, SMB, FUSE, etc.) or special
// filesystems (/proc, /sys, etc.) generally don't work.
//
// # Watching directories
//
// All files in a directory are monitored, including new files that are created
// after the watcher is started. Subdirectories are not watched (i.e. it's
// non-recursive).
//
// # Watching files
//
// Watching individual files (rather than directories) is generally not
// recommended as many tools update files atomically. Instead of "just" writing
// to the file a temporary file will be written to first, and if successful the
// temporary file is moved to to destination removing the original, or some
// variant thereof. The watcher on the original file is now lost, as it no
// longer exists.
//
// Instead, watch the parent directory and use Event.Name to filter out files
// you're not interested in. There is an example of this in [cmd/fsnotify/file.go].
func (w *Watcher) Add(name string) error {
	return nil
}

// Remove stops monitoring the path for changes.
//
// Directories are always removed non-recursively. For example, if you added
// /tmp/dir and /tmp/dir/subdir then you will need to remove both.
//
// Removing a path that has not yet been added returns [ErrNonExistentWatch].
func (w *Watcher) Remove(name string) error {
	return nil
}
070701000004AC000081A4000000000000000000000001645E367C0000514A000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/fsnotify/fsnotify/backend_windows.go    //go:build windows
// +build windows

package fsnotify

import (
	"errors"
	"fmt"
	"os"
	"path/filepath"
	"reflect"
	"runtime"
	"strings"
	"sync"
	"unsafe"

	"golang.org/x/sys/windows"
)

// Watcher watches a set of paths, delivering events on a channel.
//
// A watcher should not be copied (e.g. pass it by pointer, rather than by
// value).
//
// # Linux notes
//
// When a file is removed a Remove event won't be emitted until all file
// descriptors are closed, and deletes will always emit a Chmod. For example:
//
//     fp := os.Open("file")
//     os.Remove("file")        // Triggers Chmod
//     fp.Close()               // Triggers Remove
//
// This is the event that inotify sends, so not much can be changed about this.
//
// The fs.inotify.max_user_watches sysctl variable specifies the upper limit
// for the number of watches per user, and fs.inotify.max_user_instances
// specifies the maximum number of inotify instances per user. Every Watcher you
// create is an "instance", and every path you add is a "watch".
//
// These are also exposed in /proc as /proc/sys/fs/inotify/max_user_watches and
// /proc/sys/fs/inotify/max_user_instances
//
// To increase them you can use sysctl or write the value to the /proc file:
//
//     # Default values on Linux 5.18
//     sysctl fs.inotify.max_user_watches=124983
//     sysctl fs.inotify.max_user_instances=128
//
// To make the changes persist on reboot edit /etc/sysctl.conf or
// /usr/lib/sysctl.d/50-default.conf (details differ per Linux distro; check
// your distro's documentation):
//
//     fs.inotify.max_user_watches=124983
//     fs.inotify.max_user_instances=128
//
// Reaching the limit will result in a "no space left on device" or "too many open
// files" error.
//
// # kqueue notes (macOS, BSD)
//
// kqueue requires opening a file descriptor for every file that's being watched;
// so if you're watching a directory with five files then that's six file
// descriptors. You will run in to your system's "max open files" limit faster on
// these platforms.
//
// The sysctl variables kern.maxfiles and kern.maxfilesperproc can be used to
// control the maximum number of open files, as well as /etc/login.conf on BSD
// systems.
//
// # macOS notes
//
// Spotlight indexing on macOS can result in multiple events (see [#15]). A
// temporary workaround is to add your folder(s) to the "Spotlight Privacy
// Settings" until we have a native FSEvents implementation (see [#11]).
//
// [#11]: https://github.com/fsnotify/fsnotify/issues/11
// [#15]: https://github.com/fsnotify/fsnotify/issues/15
type Watcher struct {
	// Events sends the filesystem change events.
	//
	// fsnotify can send the following events; a "path" here can refer to a
	// file, directory, symbolic link, or special file like a FIFO.
	//
	//   fsnotify.Create    A new path was created; this may be followed by one
	//                      or more Write events if data also gets written to a
	//                      file.
	//
	//   fsnotify.Remove    A path was removed.
	//
	//   fsnotify.Rename    A path was renamed. A rename is always sent with the
	//                      old path as Event.Name, and a Create event will be
	//                      sent with the new name. Renames are only sent for
	//                      paths that are currently watched; e.g. moving an
	//                      unmonitored file into a monitored directory will
	//                      show up as just a Create. Similarly, renaming a file
	//                      to outside a monitored directory will show up as
	//                      only a Rename.
	//
	//   fsnotify.Write     A file or named pipe was written to. A Truncate will
	//                      also trigger a Write. A single "write action"
	//                      initiated by the user may show up as one or multiple
	//                      writes, depending on when the system syncs things to
	//                      disk. For example when compiling a large Go program
	//                      you may get hundreds of Write events, so you
	//                      probably want to wait until you've stopped receiving
	//                      them (see the dedup example in cmd/fsnotify).
	//
	//   fsnotify.Chmod     Attributes were changed. On Linux this is also sent
	//                      when a file is removed (or more accurately, when a
	//                      link to an inode is removed). On kqueue it's sent
	//                      and on kqueue when a file is truncated. On Windows
	//                      it's never sent.
	Events chan Event

	// Errors sends any errors.
	Errors chan error

	port  windows.Handle // Handle to completion port
	input chan *input    // Inputs to the reader are sent on this channel
	quit  chan chan<- error

	mu       sync.Mutex // Protects access to watches, isClosed
	watches  watchMap   // Map of watches (key: i-number)
	isClosed bool       // Set to true when Close() is first called
}

// NewWatcher creates a new Watcher.
func NewWatcher() (*Watcher, error) {
	port, err := windows.CreateIoCompletionPort(windows.InvalidHandle, 0, 0, 0)
	if err != nil {
		return nil, os.NewSyscallError("CreateIoCompletionPort", err)
	}
	w := &Watcher{
		port:    port,
		watches: make(watchMap),
		input:   make(chan *input, 1),
		Events:  make(chan Event, 50),
		Errors:  make(chan error),
		quit:    make(chan chan<- error, 1),
	}
	go w.readEvents()
	return w, nil
}

func (w *Watcher) sendEvent(name string, mask uint64) bool {
	if mask == 0 {
		return false
	}

	event := w.newEvent(name, uint32(mask))
	select {
	case ch := <-w.quit:
		w.quit <- ch
	case w.Events <- event:
	}
	return true
}

// Returns true if the error was sent, or false if watcher is closed.
func (w *Watcher) sendError(err error) bool {
	select {
	case w.Errors <- err:
		return true
	case <-w.quit:
	}
	return false
}

// Close removes all watches and closes the events channel.
func (w *Watcher) Close() error {
	w.mu.Lock()
	if w.isClosed {
		w.mu.Unlock()
		return nil
	}
	w.isClosed = true
	w.mu.Unlock()

	// Send "quit" message to the reader goroutine
	ch := make(chan error)
	w.quit <- ch
	if err := w.wakeupReader(); err != nil {
		return err
	}
	return <-ch
}

// Add starts monitoring the path for changes.
//
// A path can only be watched once; attempting to watch it more than once will
// return an error. Paths that do not yet exist on the filesystem cannot be
// added. A watch will be automatically removed if the path is deleted.
//
// A path will remain watched if it gets renamed to somewhere else on the same
// filesystem, but the monitor will get removed if the path gets deleted and
// re-created, or if it's moved to a different filesystem.
//
// Notifications on network filesystems (NFS, SMB, FUSE, etc.) or special
// filesystems (/proc, /sys, etc.) generally don't work.
//
// # Watching directories
//
// All files in a directory are monitored, including new files that are created
// after the watcher is started. Subdirectories are not watched (i.e. it's
// non-recursive).
//
// # Watching files
//
// Watching individual files (rather than directories) is generally not
// recommended as many tools update files atomically. Instead of "just" writing
// to the file a temporary file will be written to first, and if successful the
// temporary file is moved to to destination removing the original, or some
// variant thereof. The watcher on the original file is now lost, as it no
// longer exists.
//
// Instead, watch the parent directory and use Event.Name to filter out files
// you're not interested in. There is an example of this in [cmd/fsnotify/file.go].
func (w *Watcher) Add(name string) error {
	w.mu.Lock()
	if w.isClosed {
		w.mu.Unlock()
		return errors.New("watcher already closed")
	}
	w.mu.Unlock()

	in := &input{
		op:    opAddWatch,
		path:  filepath.Clean(name),
		flags: sysFSALLEVENTS,
		reply: make(chan error),
	}
	w.input <- in
	if err := w.wakeupReader(); err != nil {
		return err
	}
	return <-in.reply
}

// Remove stops monitoring the path for changes.
//
// Directories are always removed non-recursively. For example, if you added
// /tmp/dir and /tmp/dir/subdir then you will need to remove both.
//
// Removing a path that has not yet been added returns [ErrNonExistentWatch].
func (w *Watcher) Remove(name string) error {
	in := &input{
		op:    opRemoveWatch,
		path:  filepath.Clean(name),
		reply: make(chan error),
	}
	w.input <- in
	if err := w.wakeupReader(); err != nil {
		return err
	}
	return <-in.reply
}

// WatchList returns all paths added with [Add] (and are not yet removed).
func (w *Watcher) WatchList() []string {
	w.mu.Lock()
	defer w.mu.Unlock()

	entries := make([]string, 0, len(w.watches))
	for _, entry := range w.watches {
		for _, watchEntry := range entry {
			entries = append(entries, watchEntry.path)
		}
	}

	return entries
}

// These options are from the old golang.org/x/exp/winfsnotify, where you could
// add various options to the watch. This has long since been removed.
//
// The "sys" in the name is misleading as they're not part of any "system".
//
// This should all be removed at some point, and just use windows.FILE_NOTIFY_*
const (
	sysFSALLEVENTS  = 0xfff
	sysFSATTRIB     = 0x4
	sysFSCREATE     = 0x100
	sysFSDELETE     = 0x200
	sysFSDELETESELF = 0x400
	sysFSMODIFY     = 0x2
	sysFSMOVE       = 0xc0
	sysFSMOVEDFROM  = 0x40
	sysFSMOVEDTO    = 0x80
	sysFSMOVESELF   = 0x800
	sysFSIGNORED    = 0x8000
)

func (w *Watcher) newEvent(name string, mask uint32) Event {
	e := Event{Name: name}
	if mask&sysFSCREATE == sysFSCREATE || mask&sysFSMOVEDTO == sysFSMOVEDTO {
		e.Op |= Create
	}
	if mask&sysFSDELETE == sysFSDELETE || mask&sysFSDELETESELF == sysFSDELETESELF {
		e.Op |= Remove
	}
	if mask&sysFSMODIFY == sysFSMODIFY {
		e.Op |= Write
	}
	if mask&sysFSMOVE == sysFSMOVE || mask&sysFSMOVESELF == sysFSMOVESELF || mask&sysFSMOVEDFROM == sysFSMOVEDFROM {
		e.Op |= Rename
	}
	if mask&sysFSATTRIB == sysFSATTRIB {
		e.Op |= Chmod
	}
	return e
}

const (
	opAddWatch = iota
	opRemoveWatch
)

const (
	provisional uint64 = 1 << (32 + iota)
)

type input struct {
	op    int
	path  string
	flags uint32
	reply chan error
}

type inode struct {
	handle windows.Handle
	volume uint32
	index  uint64
}

type watch struct {
	ov     windows.Overlapped
	ino    *inode            // i-number
	path   string            // Directory path
	mask   uint64            // Directory itself is being watched with these notify flags
	names  map[string]uint64 // Map of names being watched and their notify flags
	rename string            // Remembers the old name while renaming a file
	buf    [65536]byte       // 64K buffer
}

type (
	indexMap map[uint64]*watch
	watchMap map[uint32]indexMap
)

func (w *Watcher) wakeupReader() error {
	err := windows.PostQueuedCompletionStatus(w.port, 0, 0, nil)
	if err != nil {
		return os.NewSyscallError("PostQueuedCompletionStatus", err)
	}
	return nil
}

func (w *Watcher) getDir(pathname string) (dir string, err error) {
	attr, err := windows.GetFileAttributes(windows.StringToUTF16Ptr(pathname))
	if err != nil {
		return "", os.NewSyscallError("GetFileAttributes", err)
	}
	if attr&windows.FILE_ATTRIBUTE_DIRECTORY != 0 {
		dir = pathname
	} else {
		dir, _ = filepath.Split(pathname)
		dir = filepath.Clean(dir)
	}
	return
}

func (w *Watcher) getIno(path string) (ino *inode, err error) {
	h, err := windows.CreateFile(windows.StringToUTF16Ptr(path),
		windows.FILE_LIST_DIRECTORY,
		windows.FILE_SHARE_READ|windows.FILE_SHARE_WRITE|windows.FILE_SHARE_DELETE,
		nil, windows.OPEN_EXISTING,
		windows.FILE_FLAG_BACKUP_SEMANTICS|windows.FILE_FLAG_OVERLAPPED, 0)
	if err != nil {
		return nil, os.NewSyscallError("CreateFile", err)
	}

	var fi windows.ByHandleFileInformation
	err = windows.GetFileInformationByHandle(h, &fi)
	if err != nil {
		windows.CloseHandle(h)
		return nil, os.NewSyscallError("GetFileInformationByHandle", err)
	}
	ino = &inode{
		handle: h,
		volume: fi.VolumeSerialNumber,
		index:  uint64(fi.FileIndexHigh)<<32 | uint64(fi.FileIndexLow),
	}
	return ino, nil
}

// Must run within the I/O thread.
func (m watchMap) get(ino *inode) *watch {
	if i := m[ino.volume]; i != nil {
		return i[ino.index]
	}
	return nil
}

// Must run within the I/O thread.
func (m watchMap) set(ino *inode, watch *watch) {
	i := m[ino.volume]
	if i == nil {
		i = make(indexMap)
		m[ino.volume] = i
	}
	i[ino.index] = watch
}

// Must run within the I/O thread.
func (w *Watcher) addWatch(pathname string, flags uint64) error {
	dir, err := w.getDir(pathname)
	if err != nil {
		return err
	}

	ino, err := w.getIno(dir)
	if err != nil {
		return err
	}
	w.mu.Lock()
	watchEntry := w.watches.get(ino)
	w.mu.Unlock()
	if watchEntry == nil {
		_, err := windows.CreateIoCompletionPort(ino.handle, w.port, 0, 0)
		if err != nil {
			windows.CloseHandle(ino.handle)
			return os.NewSyscallError("CreateIoCompletionPort", err)
		}
		watchEntry = &watch{
			ino:   ino,
			path:  dir,
			names: make(map[string]uint64),
		}
		w.mu.Lock()
		w.watches.set(ino, watchEntry)
		w.mu.Unlock()
		flags |= provisional
	} else {
		windows.CloseHandle(ino.handle)
	}
	if pathname == dir {
		watchEntry.mask |= flags
	} else {
		watchEntry.names[filepath.Base(pathname)] |= flags
	}

	err = w.startRead(watchEntry)
	if err != nil {
		return err
	}

	if pathname == dir {
		watchEntry.mask &= ^provisional
	} else {
		watchEntry.names[filepath.Base(pathname)] &= ^provisional
	}
	return nil
}

// Must run within the I/O thread.
func (w *Watcher) remWatch(pathname string) error {
	dir, err := w.getDir(pathname)
	if err != nil {
		return err
	}
	ino, err := w.getIno(dir)
	if err != nil {
		return err
	}

	w.mu.Lock()
	watch := w.watches.get(ino)
	w.mu.Unlock()

	err = windows.CloseHandle(ino.handle)
	if err != nil {
		w.sendError(os.NewSyscallError("CloseHandle", err))
	}
	if watch == nil {
		return fmt.Errorf("%w: %s", ErrNonExistentWatch, pathname)
	}
	if pathname == dir {
		w.sendEvent(watch.path, watch.mask&sysFSIGNORED)
		watch.mask = 0
	} else {
		name := filepath.Base(pathname)
		w.sendEvent(filepath.Join(watch.path, name), watch.names[name]&sysFSIGNORED)
		delete(watch.names, name)
	}

	return w.startRead(watch)
}

// Must run within the I/O thread.
func (w *Watcher) deleteWatch(watch *watch) {
	for name, mask := range watch.names {
		if mask&provisional == 0 {
			w.sendEvent(filepath.Join(watch.path, name), mask&sysFSIGNORED)
		}
		delete(watch.names, name)
	}
	if watch.mask != 0 {
		if watch.mask&provisional == 0 {
			w.sendEvent(watch.path, watch.mask&sysFSIGNORED)
		}
		watch.mask = 0
	}
}

// Must run within the I/O thread.
func (w *Watcher) startRead(watch *watch) error {
	err := windows.CancelIo(watch.ino.handle)
	if err != nil {
		w.sendError(os.NewSyscallError("CancelIo", err))
		w.deleteWatch(watch)
	}
	mask := w.toWindowsFlags(watch.mask)
	for _, m := range watch.names {
		mask |= w.toWindowsFlags(m)
	}
	if mask == 0 {
		err := windows.CloseHandle(watch.ino.handle)
		if err != nil {
			w.sendError(os.NewSyscallError("CloseHandle", err))
		}
		w.mu.Lock()
		delete(w.watches[watch.ino.volume], watch.ino.index)
		w.mu.Unlock()
		return nil
	}

	rdErr := windows.ReadDirectoryChanges(watch.ino.handle, &watch.buf[0],
		uint32(unsafe.Sizeof(watch.buf)), false, mask, nil, &watch.ov, 0)
	if rdErr != nil {
		err := os.NewSyscallError("ReadDirectoryChanges", rdErr)
		if rdErr == windows.ERROR_ACCESS_DENIED && watch.mask&provisional == 0 {
			// Watched directory was probably removed
			w.sendEvent(watch.path, watch.mask&sysFSDELETESELF)
			err = nil
		}
		w.deleteWatch(watch)
		w.startRead(watch)
		return err
	}
	return nil
}

// readEvents reads from the I/O completion port, converts the
// received events into Event objects and sends them via the Events channel.
// Entry point to the I/O thread.
func (w *Watcher) readEvents() {
	var (
		n   uint32
		key uintptr
		ov  *windows.Overlapped
	)
	runtime.LockOSThread()

	for {
		qErr := windows.GetQueuedCompletionStatus(w.port, &n, &key, &ov, windows.INFINITE)
		// This error is handled after the watch == nil check below. NOTE: this
		// seems odd, note sure if it's correct.

		watch := (*watch)(unsafe.Pointer(ov))
		if watch == nil {
			select {
			case ch := <-w.quit:
				w.mu.Lock()
				var indexes []indexMap
				for _, index := range w.watches {
					indexes = append(indexes, index)
				}
				w.mu.Unlock()
				for _, index := range indexes {
					for _, watch := range index {
						w.deleteWatch(watch)
						w.startRead(watch)
					}
				}

				err := windows.CloseHandle(w.port)
				if err != nil {
					err = os.NewSyscallError("CloseHandle", err)
				}
				close(w.Events)
				close(w.Errors)
				ch <- err
				return
			case in := <-w.input:
				switch in.op {
				case opAddWatch:
					in.reply <- w.addWatch(in.path, uint64(in.flags))
				case opRemoveWatch:
					in.reply <- w.remWatch(in.path)
				}
			default:
			}
			continue
		}

		switch qErr {
		case windows.ERROR_MORE_DATA:
			if watch == nil {
				w.sendError(errors.New("ERROR_MORE_DATA has unexpectedly null lpOverlapped buffer"))
			} else {
				// The i/o succeeded but the buffer is full.
				// In theory we should be building up a full packet.
				// In practice we can get away with just carrying on.
				n = uint32(unsafe.Sizeof(watch.buf))
			}
		case windows.ERROR_ACCESS_DENIED:
			// Watched directory was probably removed
			w.sendEvent(watch.path, watch.mask&sysFSDELETESELF)
			w.deleteWatch(watch)
			w.startRead(watch)
			continue
		case windows.ERROR_OPERATION_ABORTED:
			// CancelIo was called on this handle
			continue
		default:
			w.sendError(os.NewSyscallError("GetQueuedCompletionPort", qErr))
			continue
		case nil:
		}

		var offset uint32
		for {
			if n == 0 {
				w.sendError(errors.New("short read in readEvents()"))
				break
			}

			// Point "raw" to the event in the buffer
			raw := (*windows.FileNotifyInformation)(unsafe.Pointer(&watch.buf[offset]))

			// Create a buf that is the size of the path name
			size := int(raw.FileNameLength / 2)
			var buf []uint16
			// TODO: Use unsafe.Slice in Go 1.17; https://stackoverflow.com/questions/51187973
			sh := (*reflect.SliceHeader)(unsafe.Pointer(&buf))
			sh.Data = uintptr(unsafe.Pointer(&raw.FileName))
			sh.Len = size
			sh.Cap = size
			name := windows.UTF16ToString(buf)
			fullname := filepath.Join(watch.path, name)

			var mask uint64
			switch raw.Action {
			case windows.FILE_ACTION_REMOVED:
				mask = sysFSDELETESELF
			case windows.FILE_ACTION_MODIFIED:
				mask = sysFSMODIFY
			case windows.FILE_ACTION_RENAMED_OLD_NAME:
				watch.rename = name
			case windows.FILE_ACTION_RENAMED_NEW_NAME:
				// Update saved path of all sub-watches.
				old := filepath.Join(watch.path, watch.rename)
				w.mu.Lock()
				for _, watchMap := range w.watches {
					for _, ww := range watchMap {
						if strings.HasPrefix(ww.path, old) {
							ww.path = filepath.Join(fullname, strings.TrimPrefix(ww.path, old))
						}
					}
				}
				w.mu.Unlock()

				if watch.names[watch.rename] != 0 {
					watch.names[name] |= watch.names[watch.rename]
					delete(watch.names, watch.rename)
					mask = sysFSMOVESELF
				}
			}

			sendNameEvent := func() {
				w.sendEvent(fullname, watch.names[name]&mask)
			}
			if raw.Action != windows.FILE_ACTION_RENAMED_NEW_NAME {
				sendNameEvent()
			}
			if raw.Action == windows.FILE_ACTION_REMOVED {
				w.sendEvent(fullname, watch.names[name]&sysFSIGNORED)
				delete(watch.names, name)
			}

			w.sendEvent(fullname, watch.mask&w.toFSnotifyFlags(raw.Action))
			if raw.Action == windows.FILE_ACTION_RENAMED_NEW_NAME {
				fullname = filepath.Join(watch.path, watch.rename)
				sendNameEvent()
			}

			// Move to the next event in the buffer
			if raw.NextEntryOffset == 0 {
				break
			}
			offset += raw.NextEntryOffset

			// Error!
			if offset >= n {
				w.sendError(errors.New(
					"Windows system assumed buffer larger than it is, events have likely been missed."))
				break
			}
		}

		if err := w.startRead(watch); err != nil {
			w.sendError(err)
		}
	}
}

func (w *Watcher) toWindowsFlags(mask uint64) uint32 {
	var m uint32
	if mask&sysFSMODIFY != 0 {
		m |= windows.FILE_NOTIFY_CHANGE_LAST_WRITE
	}
	if mask&sysFSATTRIB != 0 {
		m |= windows.FILE_NOTIFY_CHANGE_ATTRIBUTES
	}
	if mask&(sysFSMOVE|sysFSCREATE|sysFSDELETE) != 0 {
		m |= windows.FILE_NOTIFY_CHANGE_FILE_NAME | windows.FILE_NOTIFY_CHANGE_DIR_NAME
	}
	return m
}

func (w *Watcher) toFSnotifyFlags(action uint32) uint64 {
	switch action {
	case windows.FILE_ACTION_ADDED:
		return sysFSCREATE
	case windows.FILE_ACTION_REMOVED:
		return sysFSDELETE
	case windows.FILE_ACTION_MODIFIED:
		return sysFSMODIFY
	case windows.FILE_ACTION_RENAMED_OLD_NAME:
		return sysFSMOVEDFROM
	case windows.FILE_ACTION_RENAMED_NEW_NAME:
		return sysFSMOVEDTO
	}
	return 0
}
  070701000004AD000081A4000000000000000000000001645E367C00000771000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/fsnotify/fsnotify/fsnotify.go   //go:build !plan9
// +build !plan9

// Package fsnotify provides a cross-platform interface for file system
// notifications.
package fsnotify

import (
	"errors"
	"fmt"
	"strings"
)

// Event represents a file system notification.
type Event struct {
	// Path to the file or directory.
	//
	// Paths are relative to the input; for example with Add("dir") the Name
	// will be set to "dir/file" if you create that file, but if you use
	// Add("/path/to/dir") it will be "/path/to/dir/file".
	Name string

	// File operation that triggered the event.
	//
	// This is a bitmask and some systems may send multiple operations at once.
	// Use the Event.Has() method instead of comparing with ==.
	Op Op
}

// Op describes a set of file operations.
type Op uint32

// The operations fsnotify can trigger; see the documentation on [Watcher] for a
// full description, and check them with [Event.Has].
const (
	Create Op = 1 << iota
	Write
	Remove
	Rename
	Chmod
)

// Common errors that can be reported by a watcher
var (
	ErrNonExistentWatch = errors.New("can't remove non-existent watcher")
	ErrEventOverflow    = errors.New("fsnotify queue overflow")
)

func (op Op) String() string {
	var b strings.Builder
	if op.Has(Create) {
		b.WriteString("|CREATE")
	}
	if op.Has(Remove) {
		b.WriteString("|REMOVE")
	}
	if op.Has(Write) {
		b.WriteString("|WRITE")
	}
	if op.Has(Rename) {
		b.WriteString("|RENAME")
	}
	if op.Has(Chmod) {
		b.WriteString("|CHMOD")
	}
	if b.Len() == 0 {
		return "[no events]"
	}
	return b.String()[1:]
}

// Has reports if this operation has the given operation.
func (o Op) Has(h Op) bool { return o&h == h }

// Has reports if this event has the given operation.
func (e Event) Has(op Op) bool { return e.Op.Has(op) }

// String returns a string representation of the event with their path.
func (e Event) String() string {
	return fmt.Sprintf("%-13s %q", e.Op.String(), e.Name)
}
   070701000004AE000081A4000000000000000000000001645E367C00001E44000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/fsnotify/fsnotify/mkdoc.zsh #!/usr/bin/env zsh
[ "${ZSH_VERSION:-}" = "" ] && echo >&2 "Only works with zsh" && exit 1
setopt err_exit no_unset pipefail extended_glob

# Simple script to update the godoc comments on all watchers. Probably took me
# more time to write this than doing it manually, but ah well 🙃

watcher=$(<<EOF
// Watcher watches a set of paths, delivering events on a channel.
//
// A watcher should not be copied (e.g. pass it by pointer, rather than by
// value).
//
// # Linux notes
//
// When a file is removed a Remove event won't be emitted until all file
// descriptors are closed, and deletes will always emit a Chmod. For example:
//
//     fp := os.Open("file")
//     os.Remove("file")        // Triggers Chmod
//     fp.Close()               // Triggers Remove
//
// This is the event that inotify sends, so not much can be changed about this.
//
// The fs.inotify.max_user_watches sysctl variable specifies the upper limit
// for the number of watches per user, and fs.inotify.max_user_instances
// specifies the maximum number of inotify instances per user. Every Watcher you
// create is an "instance", and every path you add is a "watch".
//
// These are also exposed in /proc as /proc/sys/fs/inotify/max_user_watches and
// /proc/sys/fs/inotify/max_user_instances
//
// To increase them you can use sysctl or write the value to the /proc file:
//
//     # Default values on Linux 5.18
//     sysctl fs.inotify.max_user_watches=124983
//     sysctl fs.inotify.max_user_instances=128
//
// To make the changes persist on reboot edit /etc/sysctl.conf or
// /usr/lib/sysctl.d/50-default.conf (details differ per Linux distro; check
// your distro's documentation):
//
//     fs.inotify.max_user_watches=124983
//     fs.inotify.max_user_instances=128
//
// Reaching the limit will result in a "no space left on device" or "too many open
// files" error.
//
// # kqueue notes (macOS, BSD)
//
// kqueue requires opening a file descriptor for every file that's being watched;
// so if you're watching a directory with five files then that's six file
// descriptors. You will run in to your system's "max open files" limit faster on
// these platforms.
//
// The sysctl variables kern.maxfiles and kern.maxfilesperproc can be used to
// control the maximum number of open files, as well as /etc/login.conf on BSD
// systems.
//
// # macOS notes
//
// Spotlight indexing on macOS can result in multiple events (see [#15]). A
// temporary workaround is to add your folder(s) to the "Spotlight Privacy
// Settings" until we have a native FSEvents implementation (see [#11]).
//
// [#11]: https://github.com/fsnotify/fsnotify/issues/11
// [#15]: https://github.com/fsnotify/fsnotify/issues/15
EOF
)

new=$(<<EOF
// NewWatcher creates a new Watcher.
EOF
)

add=$(<<EOF
// Add starts monitoring the path for changes.
//
// A path can only be watched once; attempting to watch it more than once will
// return an error. Paths that do not yet exist on the filesystem cannot be
// added. A watch will be automatically removed if the path is deleted.
//
// A path will remain watched if it gets renamed to somewhere else on the same
// filesystem, but the monitor will get removed if the path gets deleted and
// re-created, or if it's moved to a different filesystem.
//
// Notifications on network filesystems (NFS, SMB, FUSE, etc.) or special
// filesystems (/proc, /sys, etc.) generally don't work.
//
// # Watching directories
//
// All files in a directory are monitored, including new files that are created
// after the watcher is started. Subdirectories are not watched (i.e. it's
// non-recursive).
//
// # Watching files
//
// Watching individual files (rather than directories) is generally not
// recommended as many tools update files atomically. Instead of "just" writing
// to the file a temporary file will be written to first, and if successful the
// temporary file is moved to to destination removing the original, or some
// variant thereof. The watcher on the original file is now lost, as it no
// longer exists.
//
// Instead, watch the parent directory and use Event.Name to filter out files
// you're not interested in. There is an example of this in [cmd/fsnotify/file.go].
EOF
)

remove=$(<<EOF
// Remove stops monitoring the path for changes.
//
// Directories are always removed non-recursively. For example, if you added
// /tmp/dir and /tmp/dir/subdir then you will need to remove both.
//
// Removing a path that has not yet been added returns [ErrNonExistentWatch].
EOF
)

close=$(<<EOF
// Close removes all watches and closes the events channel.
EOF
)

watchlist=$(<<EOF
// WatchList returns all paths added with [Add] (and are not yet removed).
EOF
)

events=$(<<EOF
	// Events sends the filesystem change events.
	//
	// fsnotify can send the following events; a "path" here can refer to a
	// file, directory, symbolic link, or special file like a FIFO.
	//
	//   fsnotify.Create    A new path was created; this may be followed by one
	//                      or more Write events if data also gets written to a
	//                      file.
	//
	//   fsnotify.Remove    A path was removed.
	//
	//   fsnotify.Rename    A path was renamed. A rename is always sent with the
	//                      old path as Event.Name, and a Create event will be
	//                      sent with the new name. Renames are only sent for
	//                      paths that are currently watched; e.g. moving an
	//                      unmonitored file into a monitored directory will
	//                      show up as just a Create. Similarly, renaming a file
	//                      to outside a monitored directory will show up as
	//                      only a Rename.
	//
	//   fsnotify.Write     A file or named pipe was written to. A Truncate will
	//                      also trigger a Write. A single "write action"
	//                      initiated by the user may show up as one or multiple
	//                      writes, depending on when the system syncs things to
	//                      disk. For example when compiling a large Go program
	//                      you may get hundreds of Write events, so you
	//                      probably want to wait until you've stopped receiving
	//                      them (see the dedup example in cmd/fsnotify).
	//
	//   fsnotify.Chmod     Attributes were changed. On Linux this is also sent
	//                      when a file is removed (or more accurately, when a
	//                      link to an inode is removed). On kqueue it's sent
	//                      and on kqueue when a file is truncated. On Windows
	//                      it's never sent.
EOF
)

errors=$(<<EOF
	// Errors sends any errors.
EOF
)

set-cmt() {
	local pat=$1
	local cmt=$2

	IFS=$'\n' local files=($(grep -n $pat backend_*~*_test.go))
	for f in $files; do
		IFS=':' local fields=($=f)
		local file=$fields[1]
		local end=$(( $fields[2] - 1 ))

		# Find start of comment.
		local start=0
		IFS=$'\n' local lines=($(head -n$end $file))
		for (( i = 1; i <= $#lines; i++ )); do
			local line=$lines[-$i]
			if ! grep -q '^[[:space:]]*//' <<<$line; then
				start=$(( end - (i - 2) ))
				break
			fi
		done

		head -n $(( start - 1 )) $file  >/tmp/x
		print -r -- $cmt                >>/tmp/x
		tail -n+$(( end + 1 ))   $file  >>/tmp/x
		mv /tmp/x $file
	done
}

set-cmt '^type Watcher struct '             $watcher
set-cmt '^func NewWatcher('                 $new
set-cmt '^func (w \*Watcher) Add('          $add
set-cmt '^func (w \*Watcher) Remove('       $remove
set-cmt '^func (w \*Watcher) Close('        $close
set-cmt '^func (w \*Watcher) WatchList('    $watchlist
set-cmt '^[[:space:]]*Events *chan Event$'  $events
set-cmt '^[[:space:]]*Errors *chan error$'  $errors
070701000004AF000081A4000000000000000000000001645E367C000000D5000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/fsnotify/fsnotify/system_bsd.go //go:build freebsd || openbsd || netbsd || dragonfly
// +build freebsd openbsd netbsd dragonfly

package fsnotify

import "golang.org/x/sys/unix"

const openMode = unix.O_NONBLOCK | unix.O_RDONLY | unix.O_CLOEXEC
   070701000004B0000081A4000000000000000000000001645E367C000000B4000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/fsnotify/fsnotify/system_darwin.go  //go:build darwin
// +build darwin

package fsnotify

import "golang.org/x/sys/unix"

// note: this constant is not defined on BSD
const openMode = unix.O_EVTONLY | unix.O_CLOEXEC
070701000004B1000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/vendor/github.com/ghodss  070701000004B2000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003200000000elemental-cli-0.3.1/vendor/github.com/ghodss/yaml 070701000004B3000081A4000000000000000000000001645E367C000000E8000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/ghodss/yaml/.gitignore  # OSX leaves these everywhere on SMB shares
._*

# Eclipse files
.classpath
.project
.settings/**

# Emacs save files
*~

# Vim-related files
[._]*.s[a-w][a-z]
[._]s[a-w][a-z]
*.un~
Session.vim
.netrwhist

# Go test binaries
*.test
070701000004B4000081A4000000000000000000000001645E367C00000042000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/ghodss/yaml/.travis.yml language: go
go:
  - 1.3
  - 1.4
script:
  - go test
  - go build
  070701000004B5000081A4000000000000000000000001645E367C000009FD000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/ghodss/yaml/LICENSE The MIT License (MIT)

Copyright (c) 2014 Sam Ghods

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


Copyright (c) 2012 The Go Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   070701000004B6000081A4000000000000000000000001645E367C00000C74000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/ghodss/yaml/README.md   # YAML marshaling and unmarshaling support for Go

[![Build Status](https://travis-ci.org/ghodss/yaml.svg)](https://travis-ci.org/ghodss/yaml)

## Introduction

A wrapper around [go-yaml](https://github.com/go-yaml/yaml) designed to enable a better way of handling YAML when marshaling to and from structs.

In short, this library first converts YAML to JSON using go-yaml and then uses `json.Marshal` and `json.Unmarshal` to convert to or from the struct. This means that it effectively reuses the JSON struct tags as well as the custom JSON methods `MarshalJSON` and `UnmarshalJSON` unlike go-yaml. For a detailed overview of the rationale behind this method, [see this blog post](http://ghodss.com/2014/the-right-way-to-handle-yaml-in-golang/).

## Compatibility

This package uses [go-yaml](https://github.com/go-yaml/yaml) and therefore supports [everything go-yaml supports](https://github.com/go-yaml/yaml#compatibility).

## Caveats

**Caveat #1:** When using `yaml.Marshal` and `yaml.Unmarshal`, binary data should NOT be preceded with the `!!binary` YAML tag. If you do, go-yaml will convert the binary data from base64 to native binary data, which is not compatible with JSON. You can still use binary in your YAML files though - just store them without the `!!binary` tag and decode the base64 in your code (e.g. in the custom JSON methods `MarshalJSON` and `UnmarshalJSON`). This also has the benefit that your YAML and your JSON binary data will be decoded exactly the same way. As an example:

```
BAD:
	exampleKey: !!binary gIGC

GOOD:
	exampleKey: gIGC
... and decode the base64 data in your code.
```

**Caveat #2:** When using `YAMLToJSON` directly, maps with keys that are maps will result in an error since this is not supported by JSON. This error will occur in `Unmarshal` as well since you can't unmarshal map keys anyways since struct fields can't be keys.

## Installation and usage

To install, run:

```
$ go get github.com/ghodss/yaml
```

And import using:

```
import "github.com/ghodss/yaml"
```

Usage is very similar to the JSON library:

```go
package main

import (
	"fmt"

	"github.com/ghodss/yaml"
)

type Person struct {
	Name string `json:"name"` // Affects YAML field names too.
	Age  int    `json:"age"`
}

func main() {
	// Marshal a Person struct to YAML.
	p := Person{"John", 30}
	y, err := yaml.Marshal(p)
	if err != nil {
		fmt.Printf("err: %v\n", err)
		return
	}
	fmt.Println(string(y))
	/* Output:
	age: 30
	name: John
	*/

	// Unmarshal the YAML back into a Person struct.
	var p2 Person
	err = yaml.Unmarshal(y, &p2)
	if err != nil {
		fmt.Printf("err: %v\n", err)
		return
	}
	fmt.Println(p2)
	/* Output:
	{John 30}
	*/
}
```

`yaml.YAMLToJSON` and `yaml.JSONToYAML` methods are also available:

```go
package main

import (
	"fmt"

	"github.com/ghodss/yaml"
)

func main() {
	j := []byte(`{"name": "John", "age": 30}`)
	y, err := yaml.JSONToYAML(j)
	if err != nil {
		fmt.Printf("err: %v\n", err)
		return
	}
	fmt.Println(string(y))
	/* Output:
	name: John
	age: 30
	*/
	j2, err := yaml.YAMLToJSON(y)
	if err != nil {
		fmt.Printf("err: %v\n", err)
		return
	}
	fmt.Println(string(j2))
	/* Output:
	{"age":30,"name":"John"}
	*/
}
```
070701000004B7000081A4000000000000000000000001645E367C000031B4000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/ghodss/yaml/fields.go   // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package yaml

import (
	"bytes"
	"encoding"
	"encoding/json"
	"reflect"
	"sort"
	"strings"
	"sync"
	"unicode"
	"unicode/utf8"
)

// indirect walks down v allocating pointers as needed,
// until it gets to a non-pointer.
// if it encounters an Unmarshaler, indirect stops and returns that.
// if decodingNull is true, indirect stops at the last pointer so it can be set to nil.
func indirect(v reflect.Value, decodingNull bool) (json.Unmarshaler, encoding.TextUnmarshaler, reflect.Value) {
	// If v is a named type and is addressable,
	// start with its address, so that if the type has pointer methods,
	// we find them.
	if v.Kind() != reflect.Ptr && v.Type().Name() != "" && v.CanAddr() {
		v = v.Addr()
	}
	for {
		// Load value from interface, but only if the result will be
		// usefully addressable.
		if v.Kind() == reflect.Interface && !v.IsNil() {
			e := v.Elem()
			if e.Kind() == reflect.Ptr && !e.IsNil() && (!decodingNull || e.Elem().Kind() == reflect.Ptr) {
				v = e
				continue
			}
		}

		if v.Kind() != reflect.Ptr {
			break
		}

		if v.Elem().Kind() != reflect.Ptr && decodingNull && v.CanSet() {
			break
		}
		if v.IsNil() {
			if v.CanSet() {
				v.Set(reflect.New(v.Type().Elem()))
			} else {
				v = reflect.New(v.Type().Elem())
			}
		}
		if v.Type().NumMethod() > 0 {
			if u, ok := v.Interface().(json.Unmarshaler); ok {
				return u, nil, reflect.Value{}
			}
			if u, ok := v.Interface().(encoding.TextUnmarshaler); ok {
				return nil, u, reflect.Value{}
			}
		}
		v = v.Elem()
	}
	return nil, nil, v
}

// A field represents a single field found in a struct.
type field struct {
	name      string
	nameBytes []byte                 // []byte(name)
	equalFold func(s, t []byte) bool // bytes.EqualFold or equivalent

	tag       bool
	index     []int
	typ       reflect.Type
	omitEmpty bool
	quoted    bool
}

func fillField(f field) field {
	f.nameBytes = []byte(f.name)
	f.equalFold = foldFunc(f.nameBytes)
	return f
}

// byName sorts field by name, breaking ties with depth,
// then breaking ties with "name came from json tag", then
// breaking ties with index sequence.
type byName []field

func (x byName) Len() int { return len(x) }

func (x byName) Swap(i, j int) { x[i], x[j] = x[j], x[i] }

func (x byName) Less(i, j int) bool {
	if x[i].name != x[j].name {
		return x[i].name < x[j].name
	}
	if len(x[i].index) != len(x[j].index) {
		return len(x[i].index) < len(x[j].index)
	}
	if x[i].tag != x[j].tag {
		return x[i].tag
	}
	return byIndex(x).Less(i, j)
}

// byIndex sorts field by index sequence.
type byIndex []field

func (x byIndex) Len() int { return len(x) }

func (x byIndex) Swap(i, j int) { x[i], x[j] = x[j], x[i] }

func (x byIndex) Less(i, j int) bool {
	for k, xik := range x[i].index {
		if k >= len(x[j].index) {
			return false
		}
		if xik != x[j].index[k] {
			return xik < x[j].index[k]
		}
	}
	return len(x[i].index) < len(x[j].index)
}

// typeFields returns a list of fields that JSON should recognize for the given type.
// The algorithm is breadth-first search over the set of structs to include - the top struct
// and then any reachable anonymous structs.
func typeFields(t reflect.Type) []field {
	// Anonymous fields to explore at the current level and the next.
	current := []field{}
	next := []field{{typ: t}}

	// Count of queued names for current level and the next.
	count := map[reflect.Type]int{}
	nextCount := map[reflect.Type]int{}

	// Types already visited at an earlier level.
	visited := map[reflect.Type]bool{}

	// Fields found.
	var fields []field

	for len(next) > 0 {
		current, next = next, current[:0]
		count, nextCount = nextCount, map[reflect.Type]int{}

		for _, f := range current {
			if visited[f.typ] {
				continue
			}
			visited[f.typ] = true

			// Scan f.typ for fields to include.
			for i := 0; i < f.typ.NumField(); i++ {
				sf := f.typ.Field(i)
				if sf.PkgPath != "" { // unexported
					continue
				}
				tag := sf.Tag.Get("json")
				if tag == "-" {
					continue
				}
				name, opts := parseTag(tag)
				if !isValidTag(name) {
					name = ""
				}
				index := make([]int, len(f.index)+1)
				copy(index, f.index)
				index[len(f.index)] = i

				ft := sf.Type
				if ft.Name() == "" && ft.Kind() == reflect.Ptr {
					// Follow pointer.
					ft = ft.Elem()
				}

				// Record found field and index sequence.
				if name != "" || !sf.Anonymous || ft.Kind() != reflect.Struct {
					tagged := name != ""
					if name == "" {
						name = sf.Name
					}
					fields = append(fields, fillField(field{
						name:      name,
						tag:       tagged,
						index:     index,
						typ:       ft,
						omitEmpty: opts.Contains("omitempty"),
						quoted:    opts.Contains("string"),
					}))
					if count[f.typ] > 1 {
						// If there were multiple instances, add a second,
						// so that the annihilation code will see a duplicate.
						// It only cares about the distinction between 1 or 2,
						// so don't bother generating any more copies.
						fields = append(fields, fields[len(fields)-1])
					}
					continue
				}

				// Record new anonymous struct to explore in next round.
				nextCount[ft]++
				if nextCount[ft] == 1 {
					next = append(next, fillField(field{name: ft.Name(), index: index, typ: ft}))
				}
			}
		}
	}

	sort.Sort(byName(fields))

	// Delete all fields that are hidden by the Go rules for embedded fields,
	// except that fields with JSON tags are promoted.

	// The fields are sorted in primary order of name, secondary order
	// of field index length. Loop over names; for each name, delete
	// hidden fields by choosing the one dominant field that survives.
	out := fields[:0]
	for advance, i := 0, 0; i < len(fields); i += advance {
		// One iteration per name.
		// Find the sequence of fields with the name of this first field.
		fi := fields[i]
		name := fi.name
		for advance = 1; i+advance < len(fields); advance++ {
			fj := fields[i+advance]
			if fj.name != name {
				break
			}
		}
		if advance == 1 { // Only one field with this name
			out = append(out, fi)
			continue
		}
		dominant, ok := dominantField(fields[i : i+advance])
		if ok {
			out = append(out, dominant)
		}
	}

	fields = out
	sort.Sort(byIndex(fields))

	return fields
}

// dominantField looks through the fields, all of which are known to
// have the same name, to find the single field that dominates the
// others using Go's embedding rules, modified by the presence of
// JSON tags. If there are multiple top-level fields, the boolean
// will be false: This condition is an error in Go and we skip all
// the fields.
func dominantField(fields []field) (field, bool) {
	// The fields are sorted in increasing index-length order. The winner
	// must therefore be one with the shortest index length. Drop all
	// longer entries, which is easy: just truncate the slice.
	length := len(fields[0].index)
	tagged := -1 // Index of first tagged field.
	for i, f := range fields {
		if len(f.index) > length {
			fields = fields[:i]
			break
		}
		if f.tag {
			if tagged >= 0 {
				// Multiple tagged fields at the same level: conflict.
				// Return no field.
				return field{}, false
			}
			tagged = i
		}
	}
	if tagged >= 0 {
		return fields[tagged], true
	}
	// All remaining fields have the same length. If there's more than one,
	// we have a conflict (two fields named "X" at the same level) and we
	// return no field.
	if len(fields) > 1 {
		return field{}, false
	}
	return fields[0], true
}

var fieldCache struct {
	sync.RWMutex
	m map[reflect.Type][]field
}

// cachedTypeFields is like typeFields but uses a cache to avoid repeated work.
func cachedTypeFields(t reflect.Type) []field {
	fieldCache.RLock()
	f := fieldCache.m[t]
	fieldCache.RUnlock()
	if f != nil {
		return f
	}

	// Compute fields without lock.
	// Might duplicate effort but won't hold other computations back.
	f = typeFields(t)
	if f == nil {
		f = []field{}
	}

	fieldCache.Lock()
	if fieldCache.m == nil {
		fieldCache.m = map[reflect.Type][]field{}
	}
	fieldCache.m[t] = f
	fieldCache.Unlock()
	return f
}

func isValidTag(s string) bool {
	if s == "" {
		return false
	}
	for _, c := range s {
		switch {
		case strings.ContainsRune("!#$%&()*+-./:<=>?@[]^_{|}~ ", c):
			// Backslash and quote chars are reserved, but
			// otherwise any punctuation chars are allowed
			// in a tag name.
		default:
			if !unicode.IsLetter(c) && !unicode.IsDigit(c) {
				return false
			}
		}
	}
	return true
}

const (
	caseMask     = ^byte(0x20) // Mask to ignore case in ASCII.
	kelvin       = '\u212a'
	smallLongEss = '\u017f'
)

// foldFunc returns one of four different case folding equivalence
// functions, from most general (and slow) to fastest:
//
// 1) bytes.EqualFold, if the key s contains any non-ASCII UTF-8
// 2) equalFoldRight, if s contains special folding ASCII ('k', 'K', 's', 'S')
// 3) asciiEqualFold, no special, but includes non-letters (including _)
// 4) simpleLetterEqualFold, no specials, no non-letters.
//
// The letters S and K are special because they map to 3 runes, not just 2:
//  * S maps to s and to U+017F 'ſ' Latin small letter long s
//  * k maps to K and to U+212A 'K' Kelvin sign
// See http://play.golang.org/p/tTxjOc0OGo
//
// The returned function is specialized for matching against s and
// should only be given s. It's not curried for performance reasons.
func foldFunc(s []byte) func(s, t []byte) bool {
	nonLetter := false
	special := false // special letter
	for _, b := range s {
		if b >= utf8.RuneSelf {
			return bytes.EqualFold
		}
		upper := b & caseMask
		if upper < 'A' || upper > 'Z' {
			nonLetter = true
		} else if upper == 'K' || upper == 'S' {
			// See above for why these letters are special.
			special = true
		}
	}
	if special {
		return equalFoldRight
	}
	if nonLetter {
		return asciiEqualFold
	}
	return simpleLetterEqualFold
}

// equalFoldRight is a specialization of bytes.EqualFold when s is
// known to be all ASCII (including punctuation), but contains an 's',
// 'S', 'k', or 'K', requiring a Unicode fold on the bytes in t.
// See comments on foldFunc.
func equalFoldRight(s, t []byte) bool {
	for _, sb := range s {
		if len(t) == 0 {
			return false
		}
		tb := t[0]
		if tb < utf8.RuneSelf {
			if sb != tb {
				sbUpper := sb & caseMask
				if 'A' <= sbUpper && sbUpper <= 'Z' {
					if sbUpper != tb&caseMask {
						return false
					}
				} else {
					return false
				}
			}
			t = t[1:]
			continue
		}
		// sb is ASCII and t is not. t must be either kelvin
		// sign or long s; sb must be s, S, k, or K.
		tr, size := utf8.DecodeRune(t)
		switch sb {
		case 's', 'S':
			if tr != smallLongEss {
				return false
			}
		case 'k', 'K':
			if tr != kelvin {
				return false
			}
		default:
			return false
		}
		t = t[size:]

	}
	if len(t) > 0 {
		return false
	}
	return true
}

// asciiEqualFold is a specialization of bytes.EqualFold for use when
// s is all ASCII (but may contain non-letters) and contains no
// special-folding letters.
// See comments on foldFunc.
func asciiEqualFold(s, t []byte) bool {
	if len(s) != len(t) {
		return false
	}
	for i, sb := range s {
		tb := t[i]
		if sb == tb {
			continue
		}
		if ('a' <= sb && sb <= 'z') || ('A' <= sb && sb <= 'Z') {
			if sb&caseMask != tb&caseMask {
				return false
			}
		} else {
			return false
		}
	}
	return true
}

// simpleLetterEqualFold is a specialization of bytes.EqualFold for
// use when s is all ASCII letters (no underscores, etc) and also
// doesn't contain 'k', 'K', 's', or 'S'.
// See comments on foldFunc.
func simpleLetterEqualFold(s, t []byte) bool {
	if len(s) != len(t) {
		return false
	}
	for i, b := range s {
		if b&caseMask != t[i]&caseMask {
			return false
		}
	}
	return true
}

// tagOptions is the string following a comma in a struct field's "json"
// tag, or the empty string. It does not include the leading comma.
type tagOptions string

// parseTag splits a struct field's json tag into its name and
// comma-separated options.
func parseTag(tag string) (string, tagOptions) {
	if idx := strings.Index(tag, ","); idx != -1 {
		return tag[:idx], tagOptions(tag[idx+1:])
	}
	return tag, tagOptions("")
}

// Contains reports whether a comma-separated list of options
// contains a particular substr flag. substr must be surrounded by a
// string boundary or commas.
func (o tagOptions) Contains(optionName string) bool {
	if len(o) == 0 {
		return false
	}
	s := string(o)
	for s != "" {
		var next string
		i := strings.Index(s, ",")
		if i >= 0 {
			s, next = s[:i], s[i+1:]
		}
		if s == optionName {
			return true
		}
		s = next
	}
	return false
}
070701000004B8000081A4000000000000000000000001645E367C00002129000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/ghodss/yaml/yaml.go package yaml

import (
	"bytes"
	"encoding/json"
	"fmt"
	"reflect"
	"strconv"

	"gopkg.in/yaml.v2"
)

// Marshals the object into JSON then converts JSON to YAML and returns the
// YAML.
func Marshal(o interface{}) ([]byte, error) {
	j, err := json.Marshal(o)
	if err != nil {
		return nil, fmt.Errorf("error marshaling into JSON: %v", err)
	}

	y, err := JSONToYAML(j)
	if err != nil {
		return nil, fmt.Errorf("error converting JSON to YAML: %v", err)
	}

	return y, nil
}

// Converts YAML to JSON then uses JSON to unmarshal into an object.
func Unmarshal(y []byte, o interface{}) error {
	vo := reflect.ValueOf(o)
	j, err := yamlToJSON(y, &vo)
	if err != nil {
		return fmt.Errorf("error converting YAML to JSON: %v", err)
	}

	err = json.Unmarshal(j, o)
	if err != nil {
		return fmt.Errorf("error unmarshaling JSON: %v", err)
	}

	return nil
}

// Convert JSON to YAML.
func JSONToYAML(j []byte) ([]byte, error) {
	// Convert the JSON to an object.
	var jsonObj interface{}
	// We are using yaml.Unmarshal here (instead of json.Unmarshal) because the
	// Go JSON library doesn't try to pick the right number type (int, float,
	// etc.) when unmarshalling to interface{}, it just picks float64
	// universally. go-yaml does go through the effort of picking the right
	// number type, so we can preserve number type throughout this process.
	err := yaml.Unmarshal(j, &jsonObj)
	if err != nil {
		return nil, err
	}

	// Marshal this object into YAML.
	return yaml.Marshal(jsonObj)
}

// Convert YAML to JSON. Since JSON is a subset of YAML, passing JSON through
// this method should be a no-op.
//
// Things YAML can do that are not supported by JSON:
// * In YAML you can have binary and null keys in your maps. These are invalid
//   in JSON. (int and float keys are converted to strings.)
// * Binary data in YAML with the !!binary tag is not supported. If you want to
//   use binary data with this library, encode the data as base64 as usual but do
//   not use the !!binary tag in your YAML. This will ensure the original base64
//   encoded data makes it all the way through to the JSON.
func YAMLToJSON(y []byte) ([]byte, error) {
	return yamlToJSON(y, nil)
}

func yamlToJSON(y []byte, jsonTarget *reflect.Value) ([]byte, error) {
	// Convert the YAML to an object.
	var yamlObj interface{}
	err := yaml.Unmarshal(y, &yamlObj)
	if err != nil {
		return nil, err
	}

	// YAML objects are not completely compatible with JSON objects (e.g. you
	// can have non-string keys in YAML). So, convert the YAML-compatible object
	// to a JSON-compatible object, failing with an error if irrecoverable
	// incompatibilties happen along the way.
	jsonObj, err := convertToJSONableObject(yamlObj, jsonTarget)
	if err != nil {
		return nil, err
	}

	// Convert this object to JSON and return the data.
	return json.Marshal(jsonObj)
}

func convertToJSONableObject(yamlObj interface{}, jsonTarget *reflect.Value) (interface{}, error) {
	var err error

	// Resolve jsonTarget to a concrete value (i.e. not a pointer or an
	// interface). We pass decodingNull as false because we're not actually
	// decoding into the value, we're just checking if the ultimate target is a
	// string.
	if jsonTarget != nil {
		ju, tu, pv := indirect(*jsonTarget, false)
		// We have a JSON or Text Umarshaler at this level, so we can't be trying
		// to decode into a string.
		if ju != nil || tu != nil {
			jsonTarget = nil
		} else {
			jsonTarget = &pv
		}
	}

	// If yamlObj is a number or a boolean, check if jsonTarget is a string -
	// if so, coerce.  Else return normal.
	// If yamlObj is a map or array, find the field that each key is
	// unmarshaling to, and when you recurse pass the reflect.Value for that
	// field back into this function.
	switch typedYAMLObj := yamlObj.(type) {
	case map[interface{}]interface{}:
		// JSON does not support arbitrary keys in a map, so we must convert
		// these keys to strings.
		//
		// From my reading of go-yaml v2 (specifically the resolve function),
		// keys can only have the types string, int, int64, float64, binary
		// (unsupported), or null (unsupported).
		strMap := make(map[string]interface{})
		for k, v := range typedYAMLObj {
			// Resolve the key to a string first.
			var keyString string
			switch typedKey := k.(type) {
			case string:
				keyString = typedKey
			case int:
				keyString = strconv.Itoa(typedKey)
			case int64:
				// go-yaml will only return an int64 as a key if the system
				// architecture is 32-bit and the key's value is between 32-bit
				// and 64-bit. Otherwise the key type will simply be int.
				keyString = strconv.FormatInt(typedKey, 10)
			case float64:
				// Stolen from go-yaml to use the same conversion to string as
				// the go-yaml library uses to convert float to string when
				// Marshaling.
				s := strconv.FormatFloat(typedKey, 'g', -1, 32)
				switch s {
				case "+Inf":
					s = ".inf"
				case "-Inf":
					s = "-.inf"
				case "NaN":
					s = ".nan"
				}
				keyString = s
			case bool:
				if typedKey {
					keyString = "true"
				} else {
					keyString = "false"
				}
			default:
				return nil, fmt.Errorf("Unsupported map key of type: %s, key: %+#v, value: %+#v",
					reflect.TypeOf(k), k, v)
			}

			// jsonTarget should be a struct or a map. If it's a struct, find
			// the field it's going to map to and pass its reflect.Value. If
			// it's a map, find the element type of the map and pass the
			// reflect.Value created from that type. If it's neither, just pass
			// nil - JSON conversion will error for us if it's a real issue.
			if jsonTarget != nil {
				t := *jsonTarget
				if t.Kind() == reflect.Struct {
					keyBytes := []byte(keyString)
					// Find the field that the JSON library would use.
					var f *field
					fields := cachedTypeFields(t.Type())
					for i := range fields {
						ff := &fields[i]
						if bytes.Equal(ff.nameBytes, keyBytes) {
							f = ff
							break
						}
						// Do case-insensitive comparison.
						if f == nil && ff.equalFold(ff.nameBytes, keyBytes) {
							f = ff
						}
					}
					if f != nil {
						// Find the reflect.Value of the most preferential
						// struct field.
						jtf := t.Field(f.index[0])
						strMap[keyString], err = convertToJSONableObject(v, &jtf)
						if err != nil {
							return nil, err
						}
						continue
					}
				} else if t.Kind() == reflect.Map {
					// Create a zero value of the map's element type to use as
					// the JSON target.
					jtv := reflect.Zero(t.Type().Elem())
					strMap[keyString], err = convertToJSONableObject(v, &jtv)
					if err != nil {
						return nil, err
					}
					continue
				}
			}
			strMap[keyString], err = convertToJSONableObject(v, nil)
			if err != nil {
				return nil, err
			}
		}
		return strMap, nil
	case []interface{}:
		// We need to recurse into arrays in case there are any
		// map[interface{}]interface{}'s inside and to convert any
		// numbers to strings.

		// If jsonTarget is a slice (which it really should be), find the
		// thing it's going to map to. If it's not a slice, just pass nil
		// - JSON conversion will error for us if it's a real issue.
		var jsonSliceElemValue *reflect.Value
		if jsonTarget != nil {
			t := *jsonTarget
			if t.Kind() == reflect.Slice {
				// By default slices point to nil, but we need a reflect.Value
				// pointing to a value of the slice type, so we create one here.
				ev := reflect.Indirect(reflect.New(t.Type().Elem()))
				jsonSliceElemValue = &ev
			}
		}

		// Make and use a new array.
		arr := make([]interface{}, len(typedYAMLObj))
		for i, v := range typedYAMLObj {
			arr[i], err = convertToJSONableObject(v, jsonSliceElemValue)
			if err != nil {
				return nil, err
			}
		}
		return arr, nil
	default:
		// If the target type is a string and the YAML type is a number,
		// convert the YAML type to a string.
		if jsonTarget != nil && (*jsonTarget).Kind() == reflect.String {
			// Based on my reading of go-yaml, it may return int, int64,
			// float64, or uint64.
			var s string
			switch typedVal := typedYAMLObj.(type) {
			case int:
				s = strconv.FormatInt(int64(typedVal), 10)
			case int64:
				s = strconv.FormatInt(typedVal, 10)
			case float64:
				s = strconv.FormatFloat(typedVal, 'g', -1, 32)
			case uint64:
				s = strconv.FormatUint(typedVal, 10)
			case bool:
				if typedVal {
					s = "true"
				} else {
					s = "false"
				}
			}
			if len(s) > 0 {
				yamlObj = interface{}(s)
			}
		}
		return yamlObj, nil
	}

	return nil, nil
}
   070701000004B9000041ED000000000000000000000005645E367C00000000000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/vendor/github.com/go-git  070701000004BA000041ED000000000000000000000005645E367C00000000000000000000000000000000000000000000003200000000elemental-cli-0.3.1/vendor/github.com/go-git/gcfg 070701000004BB000081A4000000000000000000000001645E367C000005F4000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/go-git/gcfg/LICENSE Copyright (c) 2012 Péter Surányi. Portions Copyright (c) 2009 The Go
Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
070701000004BC000081A4000000000000000000000001645E367C00000099000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/go-git/gcfg/README  Gcfg reads INI-style configuration files into Go structs;
supports user-defined types and subsections.

Package docs: https://godoc.org/gopkg.in/gcfg.v1
   070701000004BD000081A4000000000000000000000001645E367C00001B61000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/go-git/gcfg/doc.go  // Package gcfg reads "INI-style" text-based configuration files with
// "name=value" pairs grouped into sections (gcfg files).
//
// This package is still a work in progress; see the sections below for planned
// changes.
//
// Syntax
//
// The syntax is based on that used by git config:
// http://git-scm.com/docs/git-config#_syntax .
// There are some (planned) differences compared to the git config format:
//  - improve data portability:
//    - must be encoded in UTF-8 (for now) and must not contain the 0 byte
//    - include and "path" type is not supported
//      (path type may be implementable as a user-defined type)
//  - internationalization
//    - section and variable names can contain unicode letters, unicode digits
//      (as defined in http://golang.org/ref/spec#Characters ) and hyphens
//      (U+002D), starting with a unicode letter
//  - disallow potentially ambiguous or misleading definitions:
//    - `[sec.sub]` format is not allowed (deprecated in gitconfig)
//    - `[sec ""]` is not allowed
//      - use `[sec]` for section name "sec" and empty subsection name
//    - (planned) within a single file, definitions must be contiguous for each:
//      - section: '[secA]' -> '[secB]' -> '[secA]' is an error
//      - subsection: '[sec "A"]' -> '[sec "B"]' -> '[sec "A"]' is an error
//      - multivalued variable: 'multi=a' -> 'other=x' -> 'multi=b' is an error
//
// Data structure
//
// The functions in this package read values into a user-defined struct.
// Each section corresponds to a struct field in the config struct, and each
// variable in a section corresponds to a data field in the section struct.
// The mapping of each section or variable name to fields is done either based
// on the "gcfg" struct tag or by matching the name of the section or variable,
// ignoring case. In the latter case, hyphens '-' in section and variable names
// correspond to underscores '_' in field names.
// Fields must be exported; to use a section or variable name starting with a
// letter that is neither upper- or lower-case, prefix the field name with 'X'.
// (See https://code.google.com/p/go/issues/detail?id=5763#c4 .)
//
// For sections with subsections, the corresponding field in config must be a
// map, rather than a struct, with string keys and pointer-to-struct values.
// Values for subsection variables are stored in the map with the subsection
// name used as the map key.
// (Note that unlike section and variable names, subsection names are case
// sensitive.)
// When using a map, and there is a section with the same section name but
// without a subsection name, its values are stored with the empty string used
// as the key.
// It is possible to provide default values for subsections in the section
// "default-<sectionname>" (or by setting values in the corresponding struct
// field "Default_<sectionname>").
//
// The functions in this package panic if config is not a pointer to a struct,
// or when a field is not of a suitable type (either a struct or a map with
// string keys and pointer-to-struct values).
//
// Parsing of values
//
// The section structs in the config struct may contain single-valued or
// multi-valued variables. Variables of unnamed slice type (that is, a type
// starting with `[]`) are treated as multi-value; all others (including named
// slice types) are treated as single-valued variables.
//
// Single-valued variables are handled based on the type as follows.
// Unnamed pointer types (that is, types starting with `*`) are dereferenced,
// and if necessary, a new instance is allocated.
//
// For types implementing the encoding.TextUnmarshaler interface, the
// UnmarshalText method is used to set the value. Implementing this method is
// the recommended way for parsing user-defined types.
//
// For fields of string kind, the value string is assigned to the field, after
// unquoting and unescaping as needed.
// For fields of bool kind, the field is set to true if the value is "true",
// "yes", "on" or "1", and set to false if the value is "false", "no", "off" or
// "0", ignoring case. In addition, single-valued bool fields can be specified
// with a "blank" value (variable name without equals sign and value); in such
// case the value is set to true.
//
// Predefined integer types [u]int(|8|16|32|64) and big.Int are parsed as
// decimal or hexadecimal (if having '0x' prefix). (This is to prevent
// unintuitively handling zero-padded numbers as octal.) Other types having
// [u]int* as the underlying type, such as os.FileMode and uintptr allow
// decimal, hexadecimal, or octal values.
// Parsing mode for integer types can be overridden using the struct tag option
// ",int=mode" where mode is a combination of the 'd', 'h', and 'o' characters
// (each standing for decimal, hexadecimal, and octal, respectively.)
//
// All other types are parsed using fmt.Sscanf with the "%v" verb.
//
// For multi-valued variables, each individual value is parsed as above and
// appended to the slice. If the first value is specified as a "blank" value
// (variable name without equals sign and value), a new slice is allocated;
// that is any values previously set in the slice will be ignored.
//
// The types subpackage for provides helpers for parsing "enum-like" and integer
// types.
//
// Error handling
//
// There are 3 types of errors:
//
//  - programmer errors / panics:
//    - invalid configuration structure
//  - data errors:
//    - fatal errors:
//      - invalid configuration syntax
//    - warnings:
//      - data that doesn't belong to any part of the config structure
//
// Programmer errors trigger panics. These are should be fixed by the programmer
// before releasing code that uses gcfg.
//
// Data errors cause gcfg to return a non-nil error value. This includes the
// case when there are extra unknown key-value definitions in the configuration
// data (extra data).
// However, in some occasions it is desirable to be able to proceed in
// situations when the only data error is that of extra data.
// These errors are handled at a different (warning) priority and can be
// filtered out programmatically. To ignore extra data warnings, wrap the
// gcfg.Read*Into invocation into a call to gcfg.FatalOnly.
//
// TODO
//
// The following is a list of changes under consideration:
//  - documentation
//    - self-contained syntax documentation
//    - more practical examples
//    - move TODOs to issue tracker (eventually)
//  - syntax
//    - reconsider valid escape sequences
//      (gitconfig doesn't support \r in value, \t in subsection name, etc.)
//  - reading / parsing gcfg files
//    - define internal representation structure
//    - support multiple inputs (readers, strings, files)
//    - support declaring encoding (?)
//    - support varying fields sets for subsections (?)
//  - writing gcfg files
//  - error handling
//    - make error context accessible programmatically?
//    - limit input size?
//
package gcfg // import "github.com/go-git/gcfg"
   070701000004BE000081A4000000000000000000000001645E367C0000035F000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/go-git/gcfg/errors.go   package gcfg

import (
	"gopkg.in/warnings.v0"
)

// FatalOnly filters the results of a Read*Into invocation and returns only
// fatal errors. That is, errors (warnings) indicating data for unknown
// sections / variables is ignored. Example invocation:
//
//  err := gcfg.FatalOnly(gcfg.ReadFileInto(&cfg, configFile))
//  if err != nil {
//      ...
//
func FatalOnly(err error) error {
	return warnings.FatalOnly(err)
}

func isFatal(err error) bool {
	_, ok := err.(extraData)
	return !ok
}

type extraData struct {
	section    string
	subsection *string
	variable   *string
}

func (e extraData) Error() string {
	s := "can't store data at section \"" + e.section + "\""
	if e.subsection != nil {
		s += ", subsection \"" + *e.subsection + "\""
	}
	if e.variable != nil {
		s += ", variable \"" + *e.variable + "\""
	}
	return s
}

var _ error = extraData{}
 070701000004BF000081A4000000000000000000000001645E367C00000065000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/go-git/gcfg/go1_0.go    // +build !go1.2

package gcfg

type textUnmarshaler interface {
	UnmarshalText(text []byte) error
}
   070701000004C0000081A4000000000000000000000001645E367C00000065000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/go-git/gcfg/go1_2.go    // +build go1.2

package gcfg

import (
	"encoding"
)

type textUnmarshaler encoding.TextUnmarshaler
   070701000004C1000081A4000000000000000000000001645E367C00001B31000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/go-git/gcfg/read.go package gcfg

import (
	"fmt"
	"io"
	"io/ioutil"
	"os"
	"strings"

	"github.com/go-git/gcfg/scanner"
	"github.com/go-git/gcfg/token"
	"gopkg.in/warnings.v0"
)

var unescape = map[rune]rune{'\\': '\\', '"': '"', 'n': '\n', 't': '\t', 'b': '\b'}

// no error: invalid literals should be caught by scanner
func unquote(s string) string {
	u, q, esc := make([]rune, 0, len(s)), false, false
	for _, c := range s {
		if esc {
			uc, ok := unescape[c]
			switch {
			case ok:
				u = append(u, uc)
				fallthrough
			case !q && c == '\n':
				esc = false
				continue
			}
			panic("invalid escape sequence")
		}
		switch c {
		case '"':
			q = !q
		case '\\':
			esc = true
		default:
			u = append(u, c)
		}
	}
	if q {
		panic("missing end quote")
	}
	if esc {
		panic("invalid escape sequence")
	}
	return string(u)
}

func read(c *warnings.Collector, callback func(string, string, string, string, bool) error,
	fset *token.FileSet, file *token.File, src []byte) error {
	//
	var s scanner.Scanner
	var errs scanner.ErrorList
	s.Init(file, src, func(p token.Position, m string) { errs.Add(p, m) }, 0)
	sect, sectsub := "", ""
	pos, tok, lit := s.Scan()
	errfn := func(msg string) error {
		return fmt.Errorf("%s: %s", fset.Position(pos), msg)
	}
	for {
		if errs.Len() > 0 {
			if err := c.Collect(errs.Err()); err != nil {
				return err
			}
		}
		switch tok {
		case token.EOF:
			return nil
		case token.EOL, token.COMMENT:
			pos, tok, lit = s.Scan()
		case token.LBRACK:
			pos, tok, lit = s.Scan()
			if errs.Len() > 0 {
				if err := c.Collect(errs.Err()); err != nil {
					return err
				}
			}
			if tok != token.IDENT {
				if err := c.Collect(errfn("expected section name")); err != nil {
					return err
				}
			}
			sect, sectsub = lit, ""
			pos, tok, lit = s.Scan()
			if errs.Len() > 0 {
				if err := c.Collect(errs.Err()); err != nil {
					return err
				}
			}
			if tok == token.STRING {
				sectsub = unquote(lit)
				if sectsub == "" {
					if err := c.Collect(errfn("empty subsection name")); err != nil {
						return err
					}
				}
				pos, tok, lit = s.Scan()
				if errs.Len() > 0 {
					if err := c.Collect(errs.Err()); err != nil {
						return err
					}
				}
			}
			if tok != token.RBRACK {
				if sectsub == "" {
					if err := c.Collect(errfn("expected subsection name or right bracket")); err != nil {
						return err
					}
				}
				if err := c.Collect(errfn("expected right bracket")); err != nil {
					return err
				}
			}
			pos, tok, lit = s.Scan()
			if tok != token.EOL && tok != token.EOF && tok != token.COMMENT {
				if err := c.Collect(errfn("expected EOL, EOF, or comment")); err != nil {
					return err
				}
			}
			// If a section/subsection header was found, ensure a
			// container object is created, even if there are no
			// variables further down.
			err := c.Collect(callback(sect, sectsub, "", "", true))
			if err != nil {
				return err
			}
		case token.IDENT:
			if sect == "" {
				if err := c.Collect(errfn("expected section header")); err != nil {
					return err
				}
			}
			n := lit
			pos, tok, lit = s.Scan()
			if errs.Len() > 0 {
				return errs.Err()
			}
			blank, v := tok == token.EOF || tok == token.EOL || tok == token.COMMENT, ""
			if !blank {
				if tok != token.ASSIGN {
					if err := c.Collect(errfn("expected '='")); err != nil {
						return err
					}
				}
				pos, tok, lit = s.Scan()
				if errs.Len() > 0 {
					if err := c.Collect(errs.Err()); err != nil {
						return err
					}
				}
				if tok != token.STRING {
					if err := c.Collect(errfn("expected value")); err != nil {
						return err
					}
				}
				v = unquote(lit)
				pos, tok, lit = s.Scan()
				if errs.Len() > 0 {
					if err := c.Collect(errs.Err()); err != nil {
						return err
					}
				}
				if tok != token.EOL && tok != token.EOF && tok != token.COMMENT {
					if err := c.Collect(errfn("expected EOL, EOF, or comment")); err != nil {
						return err
					}
				}
			}
			err := c.Collect(callback(sect, sectsub, n, v, blank))
			if err != nil {
				return err
			}
		default:
			if sect == "" {
				if err := c.Collect(errfn("expected section header")); err != nil {
					return err
				}
			}
			if err := c.Collect(errfn("expected section header or variable declaration")); err != nil {
				return err
			}
		}
	}
	panic("never reached")
}

func readInto(config interface{}, fset *token.FileSet, file *token.File,
	src []byte) error {
	//
	c := warnings.NewCollector(isFatal)
	firstPassCallback := func(s string, ss string, k string, v string, bv bool) error {
		return set(c, config, s, ss, k, v, bv, false)
	}
	err := read(c, firstPassCallback, fset, file, src)
	if err != nil {
		return err
	}
	secondPassCallback := func(s string, ss string, k string, v string, bv bool) error {
		return set(c, config, s, ss, k, v, bv, true)
	}
	err = read(c, secondPassCallback, fset, file, src)
	if err != nil {
		return err
	}
	return c.Done()
}

// ReadWithCallback reads gcfg formatted data from reader and calls
// callback with each section and option found.
//
// Callback is called with section, subsection, option key, option value
// and blank value flag as arguments.
//
// When a section is found, callback is called with nil subsection, option key
// and option value.
//
// When a subsection is found, callback is called with nil option key and
// option value.
//
// If blank value flag is true, it means that the value was not set for an option
// (as opposed to set to empty string).
//
// If callback returns an error, ReadWithCallback terminates with an error too.
func ReadWithCallback(reader io.Reader, callback func(string, string, string, string, bool) error) error {
	src, err := ioutil.ReadAll(reader)
	if err != nil {
		return err
	}

	fset := token.NewFileSet()
	file := fset.AddFile("", fset.Base(), len(src))
	c := warnings.NewCollector(isFatal)

	return read(c, callback, fset, file, src)
}

// ReadInto reads gcfg formatted data from reader and sets the values into the
// corresponding fields in config.
func ReadInto(config interface{}, reader io.Reader) error {
	src, err := ioutil.ReadAll(reader)
	if err != nil {
		return err
	}
	fset := token.NewFileSet()
	file := fset.AddFile("", fset.Base(), len(src))
	return readInto(config, fset, file, src)
}

// ReadStringInto reads gcfg formatted data from str and sets the values into
// the corresponding fields in config.
func ReadStringInto(config interface{}, str string) error {
	r := strings.NewReader(str)
	return ReadInto(config, r)
}

// ReadFileInto reads gcfg formatted data from the file filename and sets the
// values into the corresponding fields in config.
func ReadFileInto(config interface{}, filename string) error {
	f, err := os.Open(filename)
	if err != nil {
		return err
	}
	defer f.Close()
	src, err := ioutil.ReadAll(f)
	if err != nil {
		return err
	}
	fset := token.NewFileSet()
	file := fset.AddFile(filename, fset.Base(), len(src))
	return readInto(config, fset, file, src)
}
   070701000004C2000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/go-git/gcfg/scanner 070701000004C3000081A4000000000000000000000001645E367C00000B40000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/go-git/gcfg/scanner/errors.go   // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package scanner

import (
	"fmt"
	"io"
	"sort"
)

import (
	"github.com/go-git/gcfg/token"
)

// In an ErrorList, an error is represented by an *Error.
// The position Pos, if valid, points to the beginning of
// the offending token, and the error condition is described
// by Msg.
//
type Error struct {
	Pos token.Position
	Msg string
}

// Error implements the error interface.
func (e Error) Error() string {
	if e.Pos.Filename != "" || e.Pos.IsValid() {
		// don't print "<unknown position>"
		// TODO(gri) reconsider the semantics of Position.IsValid
		return e.Pos.String() + ": " + e.Msg
	}
	return e.Msg
}

// ErrorList is a list of *Errors.
// The zero value for an ErrorList is an empty ErrorList ready to use.
//
type ErrorList []*Error

// Add adds an Error with given position and error message to an ErrorList.
func (p *ErrorList) Add(pos token.Position, msg string) {
	*p = append(*p, &Error{pos, msg})
}

// Reset resets an ErrorList to no errors.
func (p *ErrorList) Reset() { *p = (*p)[0:0] }

// ErrorList implements the sort Interface.
func (p ErrorList) Len() int      { return len(p) }
func (p ErrorList) Swap(i, j int) { p[i], p[j] = p[j], p[i] }

func (p ErrorList) Less(i, j int) bool {
	e := &p[i].Pos
	f := &p[j].Pos
	if e.Filename < f.Filename {
		return true
	}
	if e.Filename == f.Filename {
		return e.Offset < f.Offset
	}
	return false
}

// Sort sorts an ErrorList. *Error entries are sorted by position,
// other errors are sorted by error message, and before any *Error
// entry.
//
func (p ErrorList) Sort() {
	sort.Sort(p)
}

// RemoveMultiples sorts an ErrorList and removes all but the first error per line.
func (p *ErrorList) RemoveMultiples() {
	sort.Sort(p)
	var last token.Position // initial last.Line is != any legal error line
	i := 0
	for _, e := range *p {
		if e.Pos.Filename != last.Filename || e.Pos.Line != last.Line {
			last = e.Pos
			(*p)[i] = e
			i++
		}
	}
	(*p) = (*p)[0:i]
}

// An ErrorList implements the error interface.
func (p ErrorList) Error() string {
	switch len(p) {
	case 0:
		return "no errors"
	case 1:
		return p[0].Error()
	}
	return fmt.Sprintf("%s (and %d more errors)", p[0], len(p)-1)
}

// Err returns an error equivalent to this error list.
// If the list is empty, Err returns nil.
func (p ErrorList) Err() error {
	if len(p) == 0 {
		return nil
	}
	return p
}

// PrintError is a utility function that prints a list of errors to w,
// one error per line, if the err parameter is an ErrorList. Otherwise
// it prints the err string.
//
func PrintError(w io.Writer, err error) {
	if list, ok := err.(ErrorList); ok {
		for _, e := range list {
			fmt.Fprintf(w, "%s\n", e)
		}
	} else if err != nil {
		fmt.Fprintf(w, "%s\n", err)
	}
}
070701000004C4000081A4000000000000000000000001645E367C00001FCB000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/go-git/gcfg/scanner/scanner.go  // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package scanner implements a scanner for gcfg configuration text.
// It takes a []byte as source which can then be tokenized
// through repeated calls to the Scan method.
//
// Note that the API for the scanner package may change to accommodate new
// features or implementation changes in gcfg.
//
package scanner

import (
	"fmt"
	"path/filepath"
	"unicode"
	"unicode/utf8"
)

import (
	"github.com/go-git/gcfg/token"
)

// An ErrorHandler may be provided to Scanner.Init. If a syntax error is
// encountered and a handler was installed, the handler is called with a
// position and an error message. The position points to the beginning of
// the offending token.
//
type ErrorHandler func(pos token.Position, msg string)

// A Scanner holds the scanner's internal state while processing
// a given text.  It can be allocated as part of another data
// structure but must be initialized via Init before use.
//
type Scanner struct {
	// immutable state
	file *token.File  // source file handle
	dir  string       // directory portion of file.Name()
	src  []byte       // source
	err  ErrorHandler // error reporting; or nil
	mode Mode         // scanning mode

	// scanning state
	ch         rune // current character
	offset     int  // character offset
	rdOffset   int  // reading offset (position after current character)
	lineOffset int  // current line offset
	nextVal    bool // next token is expected to be a value

	// public state - ok to modify
	ErrorCount int // number of errors encountered
}

// Read the next Unicode char into s.ch.
// s.ch < 0 means end-of-file.
//
func (s *Scanner) next() {
	if s.rdOffset < len(s.src) {
		s.offset = s.rdOffset
		if s.ch == '\n' {
			s.lineOffset = s.offset
			s.file.AddLine(s.offset)
		}
		r, w := rune(s.src[s.rdOffset]), 1
		switch {
		case r == 0:
			s.error(s.offset, "illegal character NUL")
		case r >= 0x80:
			// not ASCII
			r, w = utf8.DecodeRune(s.src[s.rdOffset:])
			if r == utf8.RuneError && w == 1 {
				s.error(s.offset, "illegal UTF-8 encoding")
			}
		}
		s.rdOffset += w
		s.ch = r
	} else {
		s.offset = len(s.src)
		if s.ch == '\n' {
			s.lineOffset = s.offset
			s.file.AddLine(s.offset)
		}
		s.ch = -1 // eof
	}
}

// A mode value is a set of flags (or 0).
// They control scanner behavior.
//
type Mode uint

const (
	ScanComments Mode = 1 << iota // return comments as COMMENT tokens
)

// Init prepares the scanner s to tokenize the text src by setting the
// scanner at the beginning of src. The scanner uses the file set file
// for position information and it adds line information for each line.
// It is ok to re-use the same file when re-scanning the same file as
// line information which is already present is ignored. Init causes a
// panic if the file size does not match the src size.
//
// Calls to Scan will invoke the error handler err if they encounter a
// syntax error and err is not nil. Also, for each error encountered,
// the Scanner field ErrorCount is incremented by one. The mode parameter
// determines how comments are handled.
//
// Note that Init may call err if there is an error in the first character
// of the file.
//
func (s *Scanner) Init(file *token.File, src []byte, err ErrorHandler, mode Mode) {
	// Explicitly initialize all fields since a scanner may be reused.
	if file.Size() != len(src) {
		panic(fmt.Sprintf("file size (%d) does not match src len (%d)", file.Size(), len(src)))
	}
	s.file = file
	s.dir, _ = filepath.Split(file.Name())
	s.src = src
	s.err = err
	s.mode = mode

	s.ch = ' '
	s.offset = 0
	s.rdOffset = 0
	s.lineOffset = 0
	s.ErrorCount = 0
	s.nextVal = false

	s.next()
}

func (s *Scanner) error(offs int, msg string) {
	if s.err != nil {
		s.err(s.file.Position(s.file.Pos(offs)), msg)
	}
	s.ErrorCount++
}

func (s *Scanner) scanComment() string {
	// initial [;#] already consumed
	offs := s.offset - 1 // position of initial [;#]

	for s.ch != '\n' && s.ch >= 0 {
		s.next()
	}
	return string(s.src[offs:s.offset])
}

func isLetter(ch rune) bool {
	return 'a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z' || ch >= 0x80 && unicode.IsLetter(ch)
}

func isDigit(ch rune) bool {
	return '0' <= ch && ch <= '9' || ch >= 0x80 && unicode.IsDigit(ch)
}

func (s *Scanner) scanIdentifier() string {
	offs := s.offset
	for isLetter(s.ch) || isDigit(s.ch) || s.ch == '-' {
		s.next()
	}
	return string(s.src[offs:s.offset])
}

func (s *Scanner) scanEscape(val bool) {
	offs := s.offset
	ch := s.ch
	s.next() // always make progress
	switch ch {
	case '\\', '"':
		// ok
	case 'n', 't', 'b':
		if val {
			break // ok
		}
		fallthrough
	default:
		s.error(offs, "unknown escape sequence")
	}
}

func (s *Scanner) scanString() string {
	// '"' opening already consumed
	offs := s.offset - 1

	for s.ch != '"' {
		ch := s.ch
		s.next()
		if ch == '\n' || ch < 0 {
			s.error(offs, "string not terminated")
			break
		}
		if ch == '\\' {
			s.scanEscape(false)
		}
	}

	s.next()

	return string(s.src[offs:s.offset])
}

func stripCR(b []byte) []byte {
	c := make([]byte, len(b))
	i := 0
	for _, ch := range b {
		if ch != '\r' {
			c[i] = ch
			i++
		}
	}
	return c[:i]
}

func (s *Scanner) scanValString() string {
	offs := s.offset

	hasCR := false
	end := offs
	inQuote := false
loop:
	for inQuote || s.ch >= 0 && s.ch != '\n' && s.ch != ';' && s.ch != '#' {
		ch := s.ch
		s.next()
		switch {
		case inQuote && ch == '\\':
			s.scanEscape(true)
		case !inQuote && ch == '\\':
			if s.ch == '\r' {
				hasCR = true
				s.next()
			}
			if s.ch != '\n' {
				s.scanEscape(true)
			} else {
				s.next()
			}
		case ch == '"':
			inQuote = !inQuote
		case ch == '\r':
			hasCR = true
		case ch < 0 || inQuote && ch == '\n':
			s.error(offs, "string not terminated")
			break loop
		}
		if inQuote || !isWhiteSpace(ch) {
			end = s.offset
		}
	}

	lit := s.src[offs:end]
	if hasCR {
		lit = stripCR(lit)
	}

	return string(lit)
}

func isWhiteSpace(ch rune) bool {
	return ch == ' ' || ch == '\t' || ch == '\r'
}

func (s *Scanner) skipWhitespace() {
	for isWhiteSpace(s.ch) {
		s.next()
	}
}

// Scan scans the next token and returns the token position, the token,
// and its literal string if applicable. The source end is indicated by
// token.EOF.
//
// If the returned token is a literal (token.IDENT, token.STRING) or
// token.COMMENT, the literal string has the corresponding value.
//
// If the returned token is token.ILLEGAL, the literal string is the
// offending character.
//
// In all other cases, Scan returns an empty literal string.
//
// For more tolerant parsing, Scan will return a valid token if
// possible even if a syntax error was encountered. Thus, even
// if the resulting token sequence contains no illegal tokens,
// a client may not assume that no error occurred. Instead it
// must check the scanner's ErrorCount or the number of calls
// of the error handler, if there was one installed.
//
// Scan adds line information to the file added to the file
// set with Init. Token positions are relative to that file
// and thus relative to the file set.
//
func (s *Scanner) Scan() (pos token.Pos, tok token.Token, lit string) {
scanAgain:
	s.skipWhitespace()

	// current token start
	pos = s.file.Pos(s.offset)

	// determine token value
	switch ch := s.ch; {
	case s.nextVal:
		lit = s.scanValString()
		tok = token.STRING
		s.nextVal = false
	case isLetter(ch):
		lit = s.scanIdentifier()
		tok = token.IDENT
	default:
		s.next() // always make progress
		switch ch {
		case -1:
			tok = token.EOF
		case '\n':
			tok = token.EOL
		case '"':
			tok = token.STRING
			lit = s.scanString()
		case '[':
			tok = token.LBRACK
		case ']':
			tok = token.RBRACK
		case ';', '#':
			// comment
			lit = s.scanComment()
			if s.mode&ScanComments == 0 {
				// skip comment
				goto scanAgain
			}
			tok = token.COMMENT
		case '=':
			tok = token.ASSIGN
			s.nextVal = true
		default:
			s.error(s.file.Offset(pos), fmt.Sprintf("illegal character %#U", ch))
			tok = token.ILLEGAL
			lit = string(ch)
		}
	}

	return
}
 070701000004C5000081A4000000000000000000000001645E367C000020D8000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/go-git/gcfg/set.go  package gcfg

import (
	"bytes"
	"encoding/gob"
	"fmt"
	"math/big"
	"reflect"
	"strings"
	"unicode"
	"unicode/utf8"

	"github.com/go-git/gcfg/types"
	"gopkg.in/warnings.v0"
)

type tag struct {
	ident   string
	intMode string
}

func newTag(ts string) tag {
	t := tag{}
	s := strings.Split(ts, ",")
	t.ident = s[0]
	for _, tse := range s[1:] {
		if strings.HasPrefix(tse, "int=") {
			t.intMode = tse[len("int="):]
		}
	}
	return t
}

func fieldFold(v reflect.Value, name string) (reflect.Value, tag) {
	var n string
	r0, _ := utf8.DecodeRuneInString(name)
	if unicode.IsLetter(r0) && !unicode.IsLower(r0) && !unicode.IsUpper(r0) {
		n = "X"
	}
	n += strings.Replace(name, "-", "_", -1)
	f, ok := v.Type().FieldByNameFunc(func(fieldName string) bool {
		if !v.FieldByName(fieldName).CanSet() {
			return false
		}
		f, _ := v.Type().FieldByName(fieldName)
		t := newTag(f.Tag.Get("gcfg"))
		if t.ident != "" {
			return strings.EqualFold(t.ident, name)
		}
		return strings.EqualFold(n, fieldName)
	})
	if !ok {
		return reflect.Value{}, tag{}
	}
	return v.FieldByName(f.Name), newTag(f.Tag.Get("gcfg"))
}

type setter func(destp interface{}, blank bool, val string, t tag) error

var errUnsupportedType = fmt.Errorf("unsupported type")
var errBlankUnsupported = fmt.Errorf("blank value not supported for type")

var setters = []setter{
	typeSetter, textUnmarshalerSetter, kindSetter, scanSetter,
}

func textUnmarshalerSetter(d interface{}, blank bool, val string, t tag) error {
	dtu, ok := d.(textUnmarshaler)
	if !ok {
		return errUnsupportedType
	}
	if blank {
		return errBlankUnsupported
	}
	return dtu.UnmarshalText([]byte(val))
}

func boolSetter(d interface{}, blank bool, val string, t tag) error {
	if blank {
		reflect.ValueOf(d).Elem().Set(reflect.ValueOf(true))
		return nil
	}
	b, err := types.ParseBool(val)
	if err == nil {
		reflect.ValueOf(d).Elem().Set(reflect.ValueOf(b))
	}
	return err
}

func intMode(mode string) types.IntMode {
	var m types.IntMode
	if strings.ContainsAny(mode, "dD") {
		m |= types.Dec
	}
	if strings.ContainsAny(mode, "hH") {
		m |= types.Hex
	}
	if strings.ContainsAny(mode, "oO") {
		m |= types.Oct
	}
	return m
}

var typeModes = map[reflect.Type]types.IntMode{
	reflect.TypeOf(int(0)):    types.Dec | types.Hex,
	reflect.TypeOf(int8(0)):   types.Dec | types.Hex,
	reflect.TypeOf(int16(0)):  types.Dec | types.Hex,
	reflect.TypeOf(int32(0)):  types.Dec | types.Hex,
	reflect.TypeOf(int64(0)):  types.Dec | types.Hex,
	reflect.TypeOf(uint(0)):   types.Dec | types.Hex,
	reflect.TypeOf(uint8(0)):  types.Dec | types.Hex,
	reflect.TypeOf(uint16(0)): types.Dec | types.Hex,
	reflect.TypeOf(uint32(0)): types.Dec | types.Hex,
	reflect.TypeOf(uint64(0)): types.Dec | types.Hex,
	// use default mode (allow dec/hex/oct) for uintptr type
	reflect.TypeOf(big.Int{}): types.Dec | types.Hex,
}

func intModeDefault(t reflect.Type) types.IntMode {
	m, ok := typeModes[t]
	if !ok {
		m = types.Dec | types.Hex | types.Oct
	}
	return m
}

func intSetter(d interface{}, blank bool, val string, t tag) error {
	if blank {
		return errBlankUnsupported
	}
	mode := intMode(t.intMode)
	if mode == 0 {
		mode = intModeDefault(reflect.TypeOf(d).Elem())
	}
	return types.ParseInt(d, val, mode)
}

func stringSetter(d interface{}, blank bool, val string, t tag) error {
	if blank {
		return errBlankUnsupported
	}
	dsp, ok := d.(*string)
	if !ok {
		return errUnsupportedType
	}
	*dsp = val
	return nil
}

var kindSetters = map[reflect.Kind]setter{
	reflect.String:  stringSetter,
	reflect.Bool:    boolSetter,
	reflect.Int:     intSetter,
	reflect.Int8:    intSetter,
	reflect.Int16:   intSetter,
	reflect.Int32:   intSetter,
	reflect.Int64:   intSetter,
	reflect.Uint:    intSetter,
	reflect.Uint8:   intSetter,
	reflect.Uint16:  intSetter,
	reflect.Uint32:  intSetter,
	reflect.Uint64:  intSetter,
	reflect.Uintptr: intSetter,
}

var typeSetters = map[reflect.Type]setter{
	reflect.TypeOf(big.Int{}): intSetter,
}

func typeSetter(d interface{}, blank bool, val string, tt tag) error {
	t := reflect.ValueOf(d).Type().Elem()
	setter, ok := typeSetters[t]
	if !ok {
		return errUnsupportedType
	}
	return setter(d, blank, val, tt)
}

func kindSetter(d interface{}, blank bool, val string, tt tag) error {
	k := reflect.ValueOf(d).Type().Elem().Kind()
	setter, ok := kindSetters[k]
	if !ok {
		return errUnsupportedType
	}
	return setter(d, blank, val, tt)
}

func scanSetter(d interface{}, blank bool, val string, tt tag) error {
	if blank {
		return errBlankUnsupported
	}
	return types.ScanFully(d, val, 'v')
}

func newValue(c *warnings.Collector, sect string, vCfg reflect.Value,
	vType reflect.Type) (reflect.Value, error) {
	//
	pv := reflect.New(vType)
	dfltName := "default-" + sect
	dfltField, _ := fieldFold(vCfg, dfltName)
	var err error
	if dfltField.IsValid() {
		b := bytes.NewBuffer(nil)
		ge := gob.NewEncoder(b)
		if err = c.Collect(ge.EncodeValue(dfltField)); err != nil {
			return pv, err
		}
		gd := gob.NewDecoder(bytes.NewReader(b.Bytes()))
		if err = c.Collect(gd.DecodeValue(pv.Elem())); err != nil {
			return pv, err
		}
	}
	return pv, nil
}

func set(c *warnings.Collector, cfg interface{}, sect, sub, name string,
	 value string, blankValue bool, subsectPass bool) error {
	//
	vPCfg := reflect.ValueOf(cfg)
	if vPCfg.Kind() != reflect.Ptr || vPCfg.Elem().Kind() != reflect.Struct {
		panic(fmt.Errorf("config must be a pointer to a struct"))
	}
	vCfg := vPCfg.Elem()
	vSect, _ := fieldFold(vCfg, sect)
	if !vSect.IsValid() {
		err := extraData{section: sect}
		return c.Collect(err)
	}
	isSubsect := vSect.Kind() == reflect.Map
	if subsectPass != isSubsect {
		return nil
	}
	if isSubsect {
		vst := vSect.Type()
		if vst.Key().Kind() != reflect.String ||
			vst.Elem().Kind() != reflect.Ptr ||
			vst.Elem().Elem().Kind() != reflect.Struct {
			panic(fmt.Errorf("map field for section must have string keys and "+
				" pointer-to-struct values: section %q", sect))
		}
		if vSect.IsNil() {
			vSect.Set(reflect.MakeMap(vst))
		}
		k := reflect.ValueOf(sub)
		pv := vSect.MapIndex(k)
		if !pv.IsValid() {
			vType := vSect.Type().Elem().Elem()
			var err error
			if pv, err = newValue(c, sect, vCfg, vType); err != nil {
				return err
			}
			vSect.SetMapIndex(k, pv)
		}
		vSect = pv.Elem()
	} else if vSect.Kind() != reflect.Struct {
		panic(fmt.Errorf("field for section must be a map or a struct: "+
			"section %q", sect))
	} else if sub != "" {
		err := extraData{section: sect, subsection: &sub}
		return c.Collect(err)
	}
	// Empty name is a special value, meaning that only the
	// section/subsection object is to be created, with no values set.
	if name == "" {
		return nil
	}
	vVar, t := fieldFold(vSect, name)
	if !vVar.IsValid() {
		var err error
		if isSubsect {
			err = extraData{section: sect, subsection: &sub, variable: &name}
		} else {
			err = extraData{section: sect, variable: &name}
		}
		return c.Collect(err)
	}
	// vVal is either single-valued var, or newly allocated value within multi-valued var
	var vVal reflect.Value
	// multi-value if unnamed slice type
	isMulti := vVar.Type().Name() == "" && vVar.Kind() == reflect.Slice ||
		vVar.Type().Name() == "" && vVar.Kind() == reflect.Ptr && vVar.Type().Elem().Name() == "" && vVar.Type().Elem().Kind() == reflect.Slice
	if isMulti && vVar.Kind() == reflect.Ptr {
		if vVar.IsNil() {
			vVar.Set(reflect.New(vVar.Type().Elem()))
		}
		vVar = vVar.Elem()
	}
	if isMulti && blankValue {
		vVar.Set(reflect.Zero(vVar.Type()))
		return nil
	}
	if isMulti {
		vVal = reflect.New(vVar.Type().Elem()).Elem()
	} else {
		vVal = vVar
	}
	isDeref := vVal.Type().Name() == "" && vVal.Type().Kind() == reflect.Ptr
	isNew := isDeref && vVal.IsNil()
	// vAddr is address of value to set (dereferenced & allocated as needed)
	var vAddr reflect.Value
	switch {
	case isNew:
		vAddr = reflect.New(vVal.Type().Elem())
	case isDeref && !isNew:
		vAddr = vVal
	default:
		vAddr = vVal.Addr()
	}
	vAddrI := vAddr.Interface()
	err, ok := error(nil), false
	for _, s := range setters {
		err = s(vAddrI, blankValue, value, t)
		if err == nil {
			ok = true
			break
		}
		if err != errUnsupportedType {
			return err
		}
	}
	if !ok {
		// in case all setters returned errUnsupportedType
		return err
	}
	if isNew { // set reference if it was dereferenced and newly allocated
		vVal.Set(vAddr)
	}
	if isMulti { // append if multi-valued
		vVar.Set(reflect.Append(vVar, vVal))
	}
	return nil
}
070701000004C6000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/go-git/gcfg/token   070701000004C7000081A4000000000000000000000001645E367C00002FCC000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/go-git/gcfg/token/position.go   // Copyright 2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// TODO(gri) consider making this a separate package outside the go directory.

package token

import (
	"fmt"
	"sort"
	"sync"
)

// -----------------------------------------------------------------------------
// Positions

// Position describes an arbitrary source position
// including the file, line, and column location.
// A Position is valid if the line number is > 0.
//
type Position struct {
	Filename string // filename, if any
	Offset   int    // offset, starting at 0
	Line     int    // line number, starting at 1
	Column   int    // column number, starting at 1 (character count)
}

// IsValid returns true if the position is valid.
func (pos *Position) IsValid() bool { return pos.Line > 0 }

// String returns a string in one of several forms:
//
//	file:line:column    valid position with file name
//	line:column         valid position without file name
//	file                invalid position with file name
//	-                   invalid position without file name
//
func (pos Position) String() string {
	s := pos.Filename
	if pos.IsValid() {
		if s != "" {
			s += ":"
		}
		s += fmt.Sprintf("%d:%d", pos.Line, pos.Column)
	}
	if s == "" {
		s = "-"
	}
	return s
}

// Pos is a compact encoding of a source position within a file set.
// It can be converted into a Position for a more convenient, but much
// larger, representation.
//
// The Pos value for a given file is a number in the range [base, base+size],
// where base and size are specified when adding the file to the file set via
// AddFile.
//
// To create the Pos value for a specific source offset, first add
// the respective file to the current file set (via FileSet.AddFile)
// and then call File.Pos(offset) for that file. Given a Pos value p
// for a specific file set fset, the corresponding Position value is
// obtained by calling fset.Position(p).
//
// Pos values can be compared directly with the usual comparison operators:
// If two Pos values p and q are in the same file, comparing p and q is
// equivalent to comparing the respective source file offsets. If p and q
// are in different files, p < q is true if the file implied by p was added
// to the respective file set before the file implied by q.
//
type Pos int

// The zero value for Pos is NoPos; there is no file and line information
// associated with it, and NoPos().IsValid() is false. NoPos is always
// smaller than any other Pos value. The corresponding Position value
// for NoPos is the zero value for Position.
//
const NoPos Pos = 0

// IsValid returns true if the position is valid.
func (p Pos) IsValid() bool {
	return p != NoPos
}

// -----------------------------------------------------------------------------
// File

// A File is a handle for a file belonging to a FileSet.
// A File has a name, size, and line offset table.
//
type File struct {
	set  *FileSet
	name string // file name as provided to AddFile
	base int    // Pos value range for this file is [base...base+size]
	size int    // file size as provided to AddFile

	// lines and infos are protected by set.mutex
	lines []int
	infos []lineInfo
}

// Name returns the file name of file f as registered with AddFile.
func (f *File) Name() string {
	return f.name
}

// Base returns the base offset of file f as registered with AddFile.
func (f *File) Base() int {
	return f.base
}

// Size returns the size of file f as registered with AddFile.
func (f *File) Size() int {
	return f.size
}

// LineCount returns the number of lines in file f.
func (f *File) LineCount() int {
	f.set.mutex.RLock()
	n := len(f.lines)
	f.set.mutex.RUnlock()
	return n
}

// AddLine adds the line offset for a new line.
// The line offset must be larger than the offset for the previous line
// and smaller than the file size; otherwise the line offset is ignored.
//
func (f *File) AddLine(offset int) {
	f.set.mutex.Lock()
	if i := len(f.lines); (i == 0 || f.lines[i-1] < offset) && offset < f.size {
		f.lines = append(f.lines, offset)
	}
	f.set.mutex.Unlock()
}

// SetLines sets the line offsets for a file and returns true if successful.
// The line offsets are the offsets of the first character of each line;
// for instance for the content "ab\nc\n" the line offsets are {0, 3}.
// An empty file has an empty line offset table.
// Each line offset must be larger than the offset for the previous line
// and smaller than the file size; otherwise SetLines fails and returns
// false.
//
func (f *File) SetLines(lines []int) bool {
	// verify validity of lines table
	size := f.size
	for i, offset := range lines {
		if i > 0 && offset <= lines[i-1] || size <= offset {
			return false
		}
	}

	// set lines table
	f.set.mutex.Lock()
	f.lines = lines
	f.set.mutex.Unlock()
	return true
}

// SetLinesForContent sets the line offsets for the given file content.
func (f *File) SetLinesForContent(content []byte) {
	var lines []int
	line := 0
	for offset, b := range content {
		if line >= 0 {
			lines = append(lines, line)
		}
		line = -1
		if b == '\n' {
			line = offset + 1
		}
	}

	// set lines table
	f.set.mutex.Lock()
	f.lines = lines
	f.set.mutex.Unlock()
}

// A lineInfo object describes alternative file and line number
// information (such as provided via a //line comment in a .go
// file) for a given file offset.
type lineInfo struct {
	// fields are exported to make them accessible to gob
	Offset   int
	Filename string
	Line     int
}

// AddLineInfo adds alternative file and line number information for
// a given file offset. The offset must be larger than the offset for
// the previously added alternative line info and smaller than the
// file size; otherwise the information is ignored.
//
// AddLineInfo is typically used to register alternative position
// information for //line filename:line comments in source files.
//
func (f *File) AddLineInfo(offset int, filename string, line int) {
	f.set.mutex.Lock()
	if i := len(f.infos); i == 0 || f.infos[i-1].Offset < offset && offset < f.size {
		f.infos = append(f.infos, lineInfo{offset, filename, line})
	}
	f.set.mutex.Unlock()
}

// Pos returns the Pos value for the given file offset;
// the offset must be <= f.Size().
// f.Pos(f.Offset(p)) == p.
//
func (f *File) Pos(offset int) Pos {
	if offset > f.size {
		panic("illegal file offset")
	}
	return Pos(f.base + offset)
}

// Offset returns the offset for the given file position p;
// p must be a valid Pos value in that file.
// f.Offset(f.Pos(offset)) == offset.
//
func (f *File) Offset(p Pos) int {
	if int(p) < f.base || int(p) > f.base+f.size {
		panic("illegal Pos value")
	}
	return int(p) - f.base
}

// Line returns the line number for the given file position p;
// p must be a Pos value in that file or NoPos.
//
func (f *File) Line(p Pos) int {
	// TODO(gri) this can be implemented much more efficiently
	return f.Position(p).Line
}

func searchLineInfos(a []lineInfo, x int) int {
	return sort.Search(len(a), func(i int) bool { return a[i].Offset > x }) - 1
}

// info returns the file name, line, and column number for a file offset.
func (f *File) info(offset int) (filename string, line, column int) {
	filename = f.name
	if i := searchInts(f.lines, offset); i >= 0 {
		line, column = i+1, offset-f.lines[i]+1
	}
	if len(f.infos) > 0 {
		// almost no files have extra line infos
		if i := searchLineInfos(f.infos, offset); i >= 0 {
			alt := &f.infos[i]
			filename = alt.Filename
			if i := searchInts(f.lines, alt.Offset); i >= 0 {
				line += alt.Line - i - 1
			}
		}
	}
	return
}

func (f *File) position(p Pos) (pos Position) {
	offset := int(p) - f.base
	pos.Offset = offset
	pos.Filename, pos.Line, pos.Column = f.info(offset)
	return
}

// Position returns the Position value for the given file position p;
// p must be a Pos value in that file or NoPos.
//
func (f *File) Position(p Pos) (pos Position) {
	if p != NoPos {
		if int(p) < f.base || int(p) > f.base+f.size {
			panic("illegal Pos value")
		}
		pos = f.position(p)
	}
	return
}

// -----------------------------------------------------------------------------
// FileSet

// A FileSet represents a set of source files.
// Methods of file sets are synchronized; multiple goroutines
// may invoke them concurrently.
//
type FileSet struct {
	mutex sync.RWMutex // protects the file set
	base  int          // base offset for the next file
	files []*File      // list of files in the order added to the set
	last  *File        // cache of last file looked up
}

// NewFileSet creates a new file set.
func NewFileSet() *FileSet {
	s := new(FileSet)
	s.base = 1 // 0 == NoPos
	return s
}

// Base returns the minimum base offset that must be provided to
// AddFile when adding the next file.
//
func (s *FileSet) Base() int {
	s.mutex.RLock()
	b := s.base
	s.mutex.RUnlock()
	return b

}

// AddFile adds a new file with a given filename, base offset, and file size
// to the file set s and returns the file. Multiple files may have the same
// name. The base offset must not be smaller than the FileSet's Base(), and
// size must not be negative.
//
// Adding the file will set the file set's Base() value to base + size + 1
// as the minimum base value for the next file. The following relationship
// exists between a Pos value p for a given file offset offs:
//
//	int(p) = base + offs
//
// with offs in the range [0, size] and thus p in the range [base, base+size].
// For convenience, File.Pos may be used to create file-specific position
// values from a file offset.
//
func (s *FileSet) AddFile(filename string, base, size int) *File {
	s.mutex.Lock()
	defer s.mutex.Unlock()
	if base < s.base || size < 0 {
		panic("illegal base or size")
	}
	// base >= s.base && size >= 0
	f := &File{s, filename, base, size, []int{0}, nil}
	base += size + 1 // +1 because EOF also has a position
	if base < 0 {
		panic("token.Pos offset overflow (> 2G of source code in file set)")
	}
	// add the file to the file set
	s.base = base
	s.files = append(s.files, f)
	s.last = f
	return f
}

// Iterate calls f for the files in the file set in the order they were added
// until f returns false.
//
func (s *FileSet) Iterate(f func(*File) bool) {
	for i := 0; ; i++ {
		var file *File
		s.mutex.RLock()
		if i < len(s.files) {
			file = s.files[i]
		}
		s.mutex.RUnlock()
		if file == nil || !f(file) {
			break
		}
	}
}

func searchFiles(a []*File, x int) int {
	return sort.Search(len(a), func(i int) bool { return a[i].base > x }) - 1
}

func (s *FileSet) file(p Pos) *File {
	// common case: p is in last file
	if f := s.last; f != nil && f.base <= int(p) && int(p) <= f.base+f.size {
		return f
	}
	// p is not in last file - search all files
	if i := searchFiles(s.files, int(p)); i >= 0 {
		f := s.files[i]
		// f.base <= int(p) by definition of searchFiles
		if int(p) <= f.base+f.size {
			s.last = f
			return f
		}
	}
	return nil
}

// File returns the file that contains the position p.
// If no such file is found (for instance for p == NoPos),
// the result is nil.
//
func (s *FileSet) File(p Pos) (f *File) {
	if p != NoPos {
		s.mutex.RLock()
		f = s.file(p)
		s.mutex.RUnlock()
	}
	return
}

// Position converts a Pos in the fileset into a general Position.
func (s *FileSet) Position(p Pos) (pos Position) {
	if p != NoPos {
		s.mutex.RLock()
		if f := s.file(p); f != nil {
			pos = f.position(p)
		}
		s.mutex.RUnlock()
	}
	return
}

// -----------------------------------------------------------------------------
// Helper functions

func searchInts(a []int, x int) int {
	// This function body is a manually inlined version of:
	//
	//   return sort.Search(len(a), func(i int) bool { return a[i] > x }) - 1
	//
	// With better compiler optimizations, this may not be needed in the
	// future, but at the moment this change improves the go/printer
	// benchmark performance by ~30%. This has a direct impact on the
	// speed of gofmt and thus seems worthwhile (2011-04-29).
	// TODO(gri): Remove this when compilers have caught up.
	i, j := 0, len(a)
	for i < j {
		h := i + (j-i)/2 // avoid overflow when computing h
		// i ≤ h < j
		if a[h] <= x {
			i = h + 1
		} else {
			j = h
		}
	}
	return i - 1
}
070701000004C8000081A4000000000000000000000001645E367C000004FF000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/go-git/gcfg/token/serialize.go  // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package token

type serializedFile struct {
	// fields correspond 1:1 to fields with same (lower-case) name in File
	Name  string
	Base  int
	Size  int
	Lines []int
	Infos []lineInfo
}

type serializedFileSet struct {
	Base  int
	Files []serializedFile
}

// Read calls decode to deserialize a file set into s; s must not be nil.
func (s *FileSet) Read(decode func(interface{}) error) error {
	var ss serializedFileSet
	if err := decode(&ss); err != nil {
		return err
	}

	s.mutex.Lock()
	s.base = ss.Base
	files := make([]*File, len(ss.Files))
	for i := 0; i < len(ss.Files); i++ {
		f := &ss.Files[i]
		files[i] = &File{s, f.Name, f.Base, f.Size, f.Lines, f.Infos}
	}
	s.files = files
	s.last = nil
	s.mutex.Unlock()

	return nil
}

// Write calls encode to serialize the file set s.
func (s *FileSet) Write(encode func(interface{}) error) error {
	var ss serializedFileSet

	s.mutex.Lock()
	ss.Base = s.base
	files := make([]serializedFile, len(s.files))
	for i, f := range s.files {
		files[i] = serializedFile{f.name, f.base, f.size, f.lines, f.infos}
	}
	ss.Files = files
	s.mutex.Unlock()

	return encode(ss)
}
 070701000004C9000081A4000000000000000000000001645E367C00000828000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/go-git/gcfg/token/token.go  // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package token defines constants representing the lexical tokens of the gcfg
// configuration syntax and basic operations on tokens (printing, predicates).
//
// Note that the API for the token package may change to accommodate new
// features or implementation changes in gcfg.
//
package token

import "strconv"

// Token is the set of lexical tokens of the gcfg configuration syntax.
type Token int

// The list of tokens.
const (
	// Special tokens
	ILLEGAL Token = iota
	EOF
	COMMENT

	literal_beg
	// Identifiers and basic type literals
	// (these tokens stand for classes of literals)
	IDENT  // section-name, variable-name
	STRING // "subsection-name", variable value
	literal_end

	operator_beg
	// Operators and delimiters
	ASSIGN // =
	LBRACK // [
	RBRACK // ]
	EOL    // \n
	operator_end
)

var tokens = [...]string{
	ILLEGAL: "ILLEGAL",

	EOF:     "EOF",
	COMMENT: "COMMENT",

	IDENT:  "IDENT",
	STRING: "STRING",

	ASSIGN: "=",
	LBRACK: "[",
	RBRACK: "]",
	EOL:    "\n",
}

// String returns the string corresponding to the token tok.
// For operators and delimiters, the string is the actual token character
// sequence (e.g., for the token ASSIGN, the string is "="). For all other
// tokens the string corresponds to the token constant name (e.g. for the
// token IDENT, the string is "IDENT").
//
func (tok Token) String() string {
	s := ""
	if 0 <= tok && tok < Token(len(tokens)) {
		s = tokens[tok]
	}
	if s == "" {
		s = "token(" + strconv.Itoa(int(tok)) + ")"
	}
	return s
}

// Predicates

// IsLiteral returns true for tokens corresponding to identifiers
// and basic type literals; it returns false otherwise.
//
func (tok Token) IsLiteral() bool { return literal_beg < tok && tok < literal_end }

// IsOperator returns true for tokens corresponding to operators and
// delimiters; it returns false otherwise.
//
func (tok Token) IsOperator() bool { return operator_beg < tok && tok < operator_end }
070701000004CA000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/go-git/gcfg/types   070701000004CB000081A4000000000000000000000001645E367C0000023E000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/go-git/gcfg/types/bool.go   package types

// BoolValues defines the name and value mappings for ParseBool.
var BoolValues = map[string]interface{}{
	"true": true, "yes": true, "on": true, "1": true,
	"false": false, "no": false, "off": false, "0": false,
}

var boolParser = func() *EnumParser {
	ep := &EnumParser{}
	ep.AddVals(BoolValues)
	return ep
}()

// ParseBool parses bool values according to the definitions in BoolValues.
// Parsing is case-insensitive.
func ParseBool(s string) (bool, error) {
	v, err := boolParser.Parse(s)
	if err != nil {
		return false, err
	}
	return v.(bool), nil
}
  070701000004CC000081A4000000000000000000000001645E367C0000007A000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/go-git/gcfg/types/doc.go    // Package types defines helpers for type conversions.
//
// The API for this package is not finalized yet.
package types
  070701000004CD000081A4000000000000000000000001645E367C000003E6000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/go-git/gcfg/types/enum.go   package types

import (
	"fmt"
	"reflect"
	"strings"
)

// EnumParser parses "enum" values; i.e. a predefined set of strings to
// predefined values.
type EnumParser struct {
	Type      string // type name; if not set, use type of first value added
	CaseMatch bool   // if true, matching of strings is case-sensitive
	// PrefixMatch bool
	vals map[string]interface{}
}

// AddVals adds strings and values to an EnumParser.
func (ep *EnumParser) AddVals(vals map[string]interface{}) {
	if ep.vals == nil {
		ep.vals = make(map[string]interface{})
	}
	for k, v := range vals {
		if ep.Type == "" {
			ep.Type = reflect.TypeOf(v).Name()
		}
		if !ep.CaseMatch {
			k = strings.ToLower(k)
		}
		ep.vals[k] = v
	}
}

// Parse parses the string and returns the value or an error.
func (ep EnumParser) Parse(s string) (interface{}, error) {
	if !ep.CaseMatch {
		s = strings.ToLower(s)
	}
	v, ok := ep.vals[s]
	if !ok {
		return false, fmt.Errorf("failed to parse %s %#q", ep.Type, s)
	}
	return v, nil
}
  070701000004CE000081A4000000000000000000000001645E367C000006F5000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/go-git/gcfg/types/int.go    package types

import (
	"fmt"
	"strings"
)

// An IntMode is a mode for parsing integer values, representing a set of
// accepted bases.
type IntMode uint8

// IntMode values for ParseInt; can be combined using binary or.
const (
	Dec IntMode = 1 << iota
	Hex
	Oct
)

// String returns a string representation of IntMode; e.g. `IntMode(Dec|Hex)`.
func (m IntMode) String() string {
	var modes []string
	if m&Dec != 0 {
		modes = append(modes, "Dec")
	}
	if m&Hex != 0 {
		modes = append(modes, "Hex")
	}
	if m&Oct != 0 {
		modes = append(modes, "Oct")
	}
	return "IntMode(" + strings.Join(modes, "|") + ")"
}

var errIntAmbig = fmt.Errorf("ambiguous integer value; must include '0' prefix")

func prefix0(val string) bool {
	return strings.HasPrefix(val, "0") || strings.HasPrefix(val, "-0")
}

func prefix0x(val string) bool {
	return strings.HasPrefix(val, "0x") || strings.HasPrefix(val, "-0x")
}

// ParseInt parses val using mode into intptr, which must be a pointer to an
// integer kind type. Non-decimal value require prefix `0` or `0x` in the cases
// when mode permits ambiguity of base; otherwise the prefix can be omitted.
func ParseInt(intptr interface{}, val string, mode IntMode) error {
	val = strings.TrimSpace(val)
	verb := byte(0)
	switch mode {
	case Dec:
		verb = 'd'
	case Dec + Hex:
		if prefix0x(val) {
			verb = 'v'
		} else {
			verb = 'd'
		}
	case Dec + Oct:
		if prefix0(val) && !prefix0x(val) {
			verb = 'v'
		} else {
			verb = 'd'
		}
	case Dec + Hex + Oct:
		verb = 'v'
	case Hex:
		if prefix0x(val) {
			verb = 'v'
		} else {
			verb = 'x'
		}
	case Oct:
		verb = 'o'
	case Hex + Oct:
		if prefix0(val) {
			verb = 'v'
		} else {
			return errIntAmbig
		}
	}
	if verb == 0 {
		panic("unsupported mode")
	}
	return ScanFully(intptr, val, verb)
}
   070701000004CF000081A4000000000000000000000001645E367C0000026F000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/go-git/gcfg/types/scan.go   package types

import (
	"fmt"
	"io"
	"reflect"
)

// ScanFully uses fmt.Sscanf with verb to fully scan val into ptr.
func ScanFully(ptr interface{}, val string, verb byte) error {
	t := reflect.ValueOf(ptr).Elem().Type()
	// attempt to read extra bytes to make sure the value is consumed
	var b []byte
	n, err := fmt.Sscanf(val, "%"+string(verb)+"%s", ptr, &b)
	switch {
	case n < 1 || n == 1 && err != io.EOF:
		return fmt.Errorf("failed to parse %q as %v: %v", val, t, err)
	case n > 1:
		return fmt.Errorf("failed to parse %q as %v: extra characters %q", val, t, string(b))
	}
	// n == 1 && err == io.EOF
	return nil
}
 070701000004D0000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/github.com/go-git/go-billy 070701000004D1000041ED000000000000000000000006645E367C00000000000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/go-git/go-billy/v5  070701000004D2000081A4000000000000000000000001645E367C0000002C000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/go-git/go-billy/v5/.gitignore   /coverage.txt
/vendor
Gopkg.lock
Gopkg.toml
070701000004D3000081A4000000000000000000000001645E367C00002C5B000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/go-git/go-billy/v5/LICENSE                                   Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "{}"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright 2017 Sourced Technologies S.L.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
 070701000004D4000081A4000000000000000000000001645E367C0000080F000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/go-git/go-billy/v5/README.md    # go-billy [![GoDoc](https://godoc.org/gopkg.in/go-git/go-billy.v5?status.svg)](https://pkg.go.dev/github.com/go-git/go-billy/v5) [![Test](https://github.com/go-git/go-billy/workflows/Test/badge.svg)](https://github.com/go-git/go-billy/actions?query=workflow%3ATest)

The missing interface filesystem abstraction for Go.
Billy implements an interface based on the `os` standard library, allowing to develop applications without dependency on the underlying storage. Makes it virtually free to implement mocks and testing over filesystem operations.

Billy was born as part of [go-git/go-git](https://github.com/go-git/go-git) project.

## Installation

```go
import "github.com/go-git/go-billy/v5" // with go modules enabled (GO111MODULE=on or outside GOPATH)
import "github.com/go-git/go-billy" // with go modules disabled
```

## Usage

Billy exposes filesystems using the
[`Filesystem` interface](https://pkg.go.dev/github.com/go-git/go-billy/v5?tab=doc#Filesystem).
Each filesystem implementation gives you a `New` method, whose arguments depend on
the implementation itself, that returns a new `Filesystem`.

The following example caches in memory all readable files in a directory from any
billy's filesystem implementation.

```go
func LoadToMemory(origin billy.Filesystem, path string) (*memory.Memory, error) {
	memory := memory.New()

	files, err := origin.ReadDir("/")
	if err != nil {
		return nil, err
	}

	for _, file := range files {
		if file.IsDir() {
			continue
		}

		src, err := origin.Open(file.Name())
		if err != nil {
			return nil, err
		}

		dst, err := memory.Create(file.Name())
		if err != nil {
			return nil, err
		}

		if _, err = io.Copy(dst, src); err != nil {
			return nil, err
		}

		if err := dst.Close(); err != nil {
			return nil, err
		}

		if err := src.Close(); err != nil {
			return nil, err
		}
	}

	return memory, nil
}
```

## Why billy?

The library billy deals with storage systems and Billy is the name of a well-known, IKEA
bookcase. That's it.

## License

Apache License Version 2.0, see [LICENSE](LICENSE)
 070701000004D5000081A4000000000000000000000001645E367C00001F6A000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-billy/v5/fs.go    package billy

import (
	"errors"
	"io"
	"os"
	"time"
)

var (
	ErrReadOnly        = errors.New("read-only filesystem")
	ErrNotSupported    = errors.New("feature not supported")
	ErrCrossedBoundary = errors.New("chroot boundary crossed")
)

// Capability holds the supported features of a billy filesystem. This does
// not mean that the capability has to be supported by the underlying storage.
// For example, a billy filesystem may support WriteCapability but the
// storage be mounted in read only mode.
type Capability uint64

const (
	// WriteCapability means that the fs is writable.
	WriteCapability Capability = 1 << iota
	// ReadCapability means that the fs is readable.
	ReadCapability
	// ReadAndWriteCapability is the ability to open a file in read and write mode.
	ReadAndWriteCapability
	// SeekCapability means it is able to move position inside the file.
	SeekCapability
	// TruncateCapability means that a file can be truncated.
	TruncateCapability
	// LockCapability is the ability to lock a file.
	LockCapability

	// DefaultCapabilities lists all capable features supported by filesystems
	// without Capability interface. This list should not be changed until a
	// major version is released.
	DefaultCapabilities Capability = WriteCapability | ReadCapability |
		ReadAndWriteCapability | SeekCapability | TruncateCapability |
		LockCapability

	// AllCapabilities lists all capable features.
	AllCapabilities Capability = WriteCapability | ReadCapability |
		ReadAndWriteCapability | SeekCapability | TruncateCapability |
		LockCapability
)

// Filesystem abstract the operations in a storage-agnostic interface.
// Each method implementation mimics the behavior of the equivalent functions
// at the os package from the standard library.
type Filesystem interface {
	Basic
	TempFile
	Dir
	Symlink
	Chroot
}

// Basic abstract the basic operations in a storage-agnostic interface as
// an extension to the Basic interface.
type Basic interface {
	// Create creates the named file with mode 0666 (before umask), truncating
	// it if it already exists. If successful, methods on the returned File can
	// be used for I/O; the associated file descriptor has mode O_RDWR.
	Create(filename string) (File, error)
	// Open opens the named file for reading. If successful, methods on the
	// returned file can be used for reading; the associated file descriptor has
	// mode O_RDONLY.
	Open(filename string) (File, error)
	// OpenFile is the generalized open call; most users will use Open or Create
	// instead. It opens the named file with specified flag (O_RDONLY etc.) and
	// perm, (0666 etc.) if applicable. If successful, methods on the returned
	// File can be used for I/O.
	OpenFile(filename string, flag int, perm os.FileMode) (File, error)
	// Stat returns a FileInfo describing the named file.
	Stat(filename string) (os.FileInfo, error)
	// Rename renames (moves) oldpath to newpath. If newpath already exists and
	// is not a directory, Rename replaces it. OS-specific restrictions may
	// apply when oldpath and newpath are in different directories.
	Rename(oldpath, newpath string) error
	// Remove removes the named file or directory.
	Remove(filename string) error
	// Join joins any number of path elements into a single path, adding a
	// Separator if necessary. Join calls filepath.Clean on the result; in
	// particular, all empty strings are ignored. On Windows, the result is a
	// UNC path if and only if the first path element is a UNC path.
	Join(elem ...string) string
}

type TempFile interface {
	// TempFile creates a new temporary file in the directory dir with a name
	// beginning with prefix, opens the file for reading and writing, and
	// returns the resulting *os.File. If dir is the empty string, TempFile
	// uses the default directory for temporary files (see os.TempDir).
	// Multiple programs calling TempFile simultaneously will not choose the
	// same file. The caller can use f.Name() to find the pathname of the file.
	// It is the caller's responsibility to remove the file when no longer
	// needed.
	TempFile(dir, prefix string) (File, error)
}

// Dir abstract the dir related operations in a storage-agnostic interface as
// an extension to the Basic interface.
type Dir interface {
	// ReadDir reads the directory named by dirname and returns a list of
	// directory entries sorted by filename.
	ReadDir(path string) ([]os.FileInfo, error)
	// MkdirAll creates a directory named path, along with any necessary
	// parents, and returns nil, or else returns an error. The permission bits
	// perm are used for all directories that MkdirAll creates. If path is/
	// already a directory, MkdirAll does nothing and returns nil.
	MkdirAll(filename string, perm os.FileMode) error
}

// Symlink abstract the symlink related operations in a storage-agnostic
// interface as an extension to the Basic interface.
type Symlink interface {
	// Lstat returns a FileInfo describing the named file. If the file is a
	// symbolic link, the returned FileInfo describes the symbolic link. Lstat
	// makes no attempt to follow the link.
	Lstat(filename string) (os.FileInfo, error)
	// Symlink creates a symbolic-link from link to target. target may be an
	// absolute or relative path, and need not refer to an existing node.
	// Parent directories of link are created as necessary.
	Symlink(target, link string) error
	// Readlink returns the target path of link.
	Readlink(link string) (string, error)
}

// Change abstract the FileInfo change related operations in a storage-agnostic
// interface as an extension to the Basic interface
type Change interface {
	// Chmod changes the mode of the named file to mode. If the file is a
	// symbolic link, it changes the mode of the link's target.
	Chmod(name string, mode os.FileMode) error
	// Lchown changes the numeric uid and gid of the named file. If the file is
	// a symbolic link, it changes the uid and gid of the link itself.
	Lchown(name string, uid, gid int) error
	// Chown changes the numeric uid and gid of the named file. If the file is a
	// symbolic link, it changes the uid and gid of the link's target.
	Chown(name string, uid, gid int) error
	// Chtimes changes the access and modification times of the named file,
	// similar to the Unix utime() or utimes() functions.
	//
	// The underlying filesystem may truncate or round the values to a less
	// precise time unit.
	Chtimes(name string, atime time.Time, mtime time.Time) error
}

// Chroot abstract the chroot related operations in a storage-agnostic interface
// as an extension to the Basic interface.
type Chroot interface {
	// Chroot returns a new filesystem from the same type where the new root is
	// the given path. Files outside of the designated directory tree cannot be
	// accessed.
	Chroot(path string) (Filesystem, error)
	// Root returns the root path of the filesystem.
	Root() string
}

// File represent a file, being a subset of the os.File
type File interface {
	// Name returns the name of the file as presented to Open.
	Name() string
	io.Writer
	io.Reader
	io.ReaderAt
	io.Seeker
	io.Closer
	// Lock locks the file like e.g. flock. It protects against access from
	// other processes.
	Lock() error
	// Unlock unlocks the file.
	Unlock() error
	// Truncate the file.
	Truncate(size int64) error
}

// Capable interface can return the available features of a filesystem.
type Capable interface {
	// Capabilities returns the capabilities of a filesystem in bit flags.
	Capabilities() Capability
}

// Capabilities returns the features supported by a filesystem. If the FS
// does not implement Capable interface it returns all features.
func Capabilities(fs Basic) Capability {
	capable, ok := fs.(Capable)
	if !ok {
		return DefaultCapabilities
	}

	return capable.Capabilities()
}

// CapabilityCheck tests the filesystem for the provided capabilities and
// returns true in case it supports all of them.
func CapabilityCheck(fs Basic, capabilities Capability) bool {
	fsCaps := Capabilities(fs)
	return fsCaps&capabilities == capabilities
}
  070701000004D6000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/go-git/go-billy/v5/helper   070701000004D7000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/go-git/go-billy/v5/helper/chroot    070701000004D8000081A4000000000000000000000001645E367C00001485000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/go-git/go-billy/v5/helper/chroot/chroot.go  package chroot

import (
	"os"
	"path/filepath"
	"strings"

	"github.com/go-git/go-billy/v5"
	"github.com/go-git/go-billy/v5/helper/polyfill"
)

// ChrootHelper is a helper to implement billy.Chroot.
type ChrootHelper struct {
	underlying billy.Filesystem
	base       string
}

// New creates a new filesystem wrapping up the given 'fs'.
// The created filesystem has its base in the given ChrootHelperectory of the
// underlying filesystem.
func New(fs billy.Basic, base string) billy.Filesystem {
	return &ChrootHelper{
		underlying: polyfill.New(fs),
		base:       base,
	}
}

func (fs *ChrootHelper) underlyingPath(filename string) (string, error) {
	if isCrossBoundaries(filename) {
		return "", billy.ErrCrossedBoundary
	}

	return fs.Join(fs.Root(), filename), nil
}

func isCrossBoundaries(path string) bool {
	path = filepath.ToSlash(path)
	path = filepath.Clean(path)

	return strings.HasPrefix(path, ".."+string(filepath.Separator))
}

func (fs *ChrootHelper) Create(filename string) (billy.File, error) {
	fullpath, err := fs.underlyingPath(filename)
	if err != nil {
		return nil, err
	}

	f, err := fs.underlying.Create(fullpath)
	if err != nil {
		return nil, err
	}

	return newFile(fs, f, filename), nil
}

func (fs *ChrootHelper) Open(filename string) (billy.File, error) {
	fullpath, err := fs.underlyingPath(filename)
	if err != nil {
		return nil, err
	}

	f, err := fs.underlying.Open(fullpath)
	if err != nil {
		return nil, err
	}

	return newFile(fs, f, filename), nil
}

func (fs *ChrootHelper) OpenFile(filename string, flag int, mode os.FileMode) (billy.File, error) {
	fullpath, err := fs.underlyingPath(filename)
	if err != nil {
		return nil, err
	}

	f, err := fs.underlying.OpenFile(fullpath, flag, mode)
	if err != nil {
		return nil, err
	}

	return newFile(fs, f, filename), nil
}

func (fs *ChrootHelper) Stat(filename string) (os.FileInfo, error) {
	fullpath, err := fs.underlyingPath(filename)
	if err != nil {
		return nil, err
	}

	return fs.underlying.Stat(fullpath)
}

func (fs *ChrootHelper) Rename(from, to string) error {
	var err error
	from, err = fs.underlyingPath(from)
	if err != nil {
		return err
	}

	to, err = fs.underlyingPath(to)
	if err != nil {
		return err
	}

	return fs.underlying.Rename(from, to)
}

func (fs *ChrootHelper) Remove(path string) error {
	fullpath, err := fs.underlyingPath(path)
	if err != nil {
		return err
	}

	return fs.underlying.Remove(fullpath)
}

func (fs *ChrootHelper) Join(elem ...string) string {
	return fs.underlying.Join(elem...)
}

func (fs *ChrootHelper) TempFile(dir, prefix string) (billy.File, error) {
	fullpath, err := fs.underlyingPath(dir)
	if err != nil {
		return nil, err
	}

	f, err := fs.underlying.(billy.TempFile).TempFile(fullpath, prefix)
	if err != nil {
		return nil, err
	}

	return newFile(fs, f, fs.Join(dir, filepath.Base(f.Name()))), nil
}

func (fs *ChrootHelper) ReadDir(path string) ([]os.FileInfo, error) {
	fullpath, err := fs.underlyingPath(path)
	if err != nil {
		return nil, err
	}

	return fs.underlying.(billy.Dir).ReadDir(fullpath)
}

func (fs *ChrootHelper) MkdirAll(filename string, perm os.FileMode) error {
	fullpath, err := fs.underlyingPath(filename)
	if err != nil {
		return err
	}

	return fs.underlying.(billy.Dir).MkdirAll(fullpath, perm)
}

func (fs *ChrootHelper) Lstat(filename string) (os.FileInfo, error) {
	fullpath, err := fs.underlyingPath(filename)
	if err != nil {
		return nil, err
	}

	return fs.underlying.(billy.Symlink).Lstat(fullpath)
}

func (fs *ChrootHelper) Symlink(target, link string) error {
	target = filepath.FromSlash(target)

	// only rewrite target if it's already absolute
	if filepath.IsAbs(target) || strings.HasPrefix(target, string(filepath.Separator)) {
		target = fs.Join(fs.Root(), target)
		target = filepath.Clean(filepath.FromSlash(target))
	}

	link, err := fs.underlyingPath(link)
	if err != nil {
		return err
	}

	return fs.underlying.(billy.Symlink).Symlink(target, link)
}

func (fs *ChrootHelper) Readlink(link string) (string, error) {
	fullpath, err := fs.underlyingPath(link)
	if err != nil {
		return "", err
	}

	target, err := fs.underlying.(billy.Symlink).Readlink(fullpath)
	if err != nil {
		return "", err
	}

	if !filepath.IsAbs(target) && !strings.HasPrefix(target, string(filepath.Separator)) {
		return target, nil
	}

	target, err = filepath.Rel(fs.base, target)
	if err != nil {
		return "", err
	}

	return string(os.PathSeparator) + target, nil
}

func (fs *ChrootHelper) Chroot(path string) (billy.Filesystem, error) {
	fullpath, err := fs.underlyingPath(path)
	if err != nil {
		return nil, err
	}

	return New(fs.underlying, fullpath), nil
}

func (fs *ChrootHelper) Root() string {
	return fs.base
}

func (fs *ChrootHelper) Underlying() billy.Basic {
	return fs.underlying
}

// Capabilities implements the Capable interface.
func (fs *ChrootHelper) Capabilities() billy.Capability {
	return billy.Capabilities(fs.underlying)
}

type file struct {
	billy.File
	name string
}

func newFile(fs billy.Filesystem, f billy.File, filename string) billy.File {
	filename = fs.Join(fs.Root(), filename)
	filename, _ = filepath.Rel(fs.Root(), filename)

	return &file{
		File: f,
		name: filename,
	}
}

func (f *file) Name() string {
	return f.name
}
   070701000004D9000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/go-git/go-billy/v5/helper/polyfill  070701000004DA000081A4000000000000000000000001645E367C000008F9000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/go-git/go-billy/v5/helper/polyfill/polyfill.go  package polyfill

import (
	"os"
	"path/filepath"

	"github.com/go-git/go-billy/v5"
)

// Polyfill is a helper that implements all missing method from billy.Filesystem.
type Polyfill struct {
	billy.Basic
	c capabilities
}

type capabilities struct{ tempfile, dir, symlink, chroot bool }

// New creates a new filesystem wrapping up 'fs' the intercepts all the calls
// made and errors if fs doesn't implement any of the billy interfaces.
func New(fs billy.Basic) billy.Filesystem {
	if original, ok := fs.(billy.Filesystem); ok {
		return original
	}

	h := &Polyfill{Basic: fs}

	_, h.c.tempfile = h.Basic.(billy.TempFile)
	_, h.c.dir = h.Basic.(billy.Dir)
	_, h.c.symlink = h.Basic.(billy.Symlink)
	_, h.c.chroot = h.Basic.(billy.Chroot)
	return h
}

func (h *Polyfill) TempFile(dir, prefix string) (billy.File, error) {
	if !h.c.tempfile {
		return nil, billy.ErrNotSupported
	}

	return h.Basic.(billy.TempFile).TempFile(dir, prefix)
}

func (h *Polyfill) ReadDir(path string) ([]os.FileInfo, error) {
	if !h.c.dir {
		return nil, billy.ErrNotSupported
	}

	return h.Basic.(billy.Dir).ReadDir(path)
}

func (h *Polyfill) MkdirAll(filename string, perm os.FileMode) error {
	if !h.c.dir {
		return billy.ErrNotSupported
	}

	return h.Basic.(billy.Dir).MkdirAll(filename, perm)
}

func (h *Polyfill) Symlink(target, link string) error {
	if !h.c.symlink {
		return billy.ErrNotSupported
	}

	return h.Basic.(billy.Symlink).Symlink(target, link)
}

func (h *Polyfill) Readlink(link string) (string, error) {
	if !h.c.symlink {
		return "", billy.ErrNotSupported
	}

	return h.Basic.(billy.Symlink).Readlink(link)
}

func (h *Polyfill) Lstat(path string) (os.FileInfo, error) {
	if !h.c.symlink {
		return nil, billy.ErrNotSupported
	}

	return h.Basic.(billy.Symlink).Lstat(path)
}

func (h *Polyfill) Chroot(path string) (billy.Filesystem, error) {
	if !h.c.chroot {
		return nil, billy.ErrNotSupported
	}

	return h.Basic.(billy.Chroot).Chroot(path)
}

func (h *Polyfill) Root() string {
	if !h.c.chroot {
		return string(filepath.Separator)
	}

	return h.Basic.(billy.Chroot).Root()
}

func (h *Polyfill) Underlying() billy.Basic {
	return h.Basic
}

// Capabilities implements the Capable interface.
func (h *Polyfill) Capabilities() billy.Capability {
	return billy.Capabilities(h.Basic)
}
   070701000004DB000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-billy/v5/memfs    070701000004DC000081A4000000000000000000000001645E367C00001FCA000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/go-git/go-billy/v5/memfs/memory.go  // Package memfs provides a billy filesystem base on memory.
package memfs // import "github.com/go-git/go-billy/v5/memfs"

import (
	"errors"
	"fmt"
	"io"
	"os"
	"path/filepath"
	"sort"
	"strings"
	"time"

	"github.com/go-git/go-billy/v5"
	"github.com/go-git/go-billy/v5/helper/chroot"
	"github.com/go-git/go-billy/v5/util"
)

const separator = filepath.Separator

// Memory a very convenient filesystem based on memory files
type Memory struct {
	s *storage

	tempCount int
}

//New returns a new Memory filesystem.
func New() billy.Filesystem {
	fs := &Memory{s: newStorage()}
	return chroot.New(fs, string(separator))
}

func (fs *Memory) Create(filename string) (billy.File, error) {
	return fs.OpenFile(filename, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
}

func (fs *Memory) Open(filename string) (billy.File, error) {
	return fs.OpenFile(filename, os.O_RDONLY, 0)
}

func (fs *Memory) OpenFile(filename string, flag int, perm os.FileMode) (billy.File, error) {
	f, has := fs.s.Get(filename)
	if !has {
		if !isCreate(flag) {
			return nil, os.ErrNotExist
		}

		var err error
		f, err = fs.s.New(filename, perm, flag)
		if err != nil {
			return nil, err
		}
	} else {
		if isExclusive(flag) {
			return nil, os.ErrExist
		}

		if target, isLink := fs.resolveLink(filename, f); isLink {
			return fs.OpenFile(target, flag, perm)
		}
	}

	if f.mode.IsDir() {
		return nil, fmt.Errorf("cannot open directory: %s", filename)
	}

	return f.Duplicate(filename, perm, flag), nil
}

var errNotLink = errors.New("not a link")

func (fs *Memory) resolveLink(fullpath string, f *file) (target string, isLink bool) {
	if !isSymlink(f.mode) {
		return fullpath, false
	}

	target = string(f.content.bytes)
	if !isAbs(target) {
		target = fs.Join(filepath.Dir(fullpath), target)
	}

	return target, true
}

// On Windows OS, IsAbs validates if a path is valid based on if stars with a
// unit (eg.: `C:\`)  to assert that is absolute, but in this mem implementation
// any path starting by `separator` is also considered absolute.
func isAbs(path string) bool {
	return filepath.IsAbs(path) || strings.HasPrefix(path, string(separator))
}

func (fs *Memory) Stat(filename string) (os.FileInfo, error) {
	f, has := fs.s.Get(filename)
	if !has {
		return nil, os.ErrNotExist
	}

	fi, _ := f.Stat()

	var err error
	if target, isLink := fs.resolveLink(filename, f); isLink {
		fi, err = fs.Stat(target)
		if err != nil {
			return nil, err
		}
	}

	// the name of the file should always the name of the stated file, so we
	// overwrite the Stat returned from the storage with it, since the
	// filename may belong to a link.
	fi.(*fileInfo).name = filepath.Base(filename)
	return fi, nil
}

func (fs *Memory) Lstat(filename string) (os.FileInfo, error) {
	f, has := fs.s.Get(filename)
	if !has {
		return nil, os.ErrNotExist
	}

	return f.Stat()
}

type ByName []os.FileInfo

func (a ByName) Len() int           { return len(a) }
func (a ByName) Less(i, j int) bool { return a[i].Name() < a[j].Name() }
func (a ByName) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }

func (fs *Memory) ReadDir(path string) ([]os.FileInfo, error) {
	if f, has := fs.s.Get(path); has {
		if target, isLink := fs.resolveLink(path, f); isLink {
			return fs.ReadDir(target)
		}
	}

	var entries []os.FileInfo
	for _, f := range fs.s.Children(path) {
		fi, _ := f.Stat()
		entries = append(entries, fi)
	}

	sort.Sort(ByName(entries))

	return entries, nil
}

func (fs *Memory) MkdirAll(path string, perm os.FileMode) error {
	_, err := fs.s.New(path, perm|os.ModeDir, 0)
	return err
}

func (fs *Memory) TempFile(dir, prefix string) (billy.File, error) {
	return util.TempFile(fs, dir, prefix)
}

func (fs *Memory) getTempFilename(dir, prefix string) string {
	fs.tempCount++
	filename := fmt.Sprintf("%s_%d_%d", prefix, fs.tempCount, time.Now().UnixNano())
	return fs.Join(dir, filename)
}

func (fs *Memory) Rename(from, to string) error {
	return fs.s.Rename(from, to)
}

func (fs *Memory) Remove(filename string) error {
	return fs.s.Remove(filename)
}

func (fs *Memory) Join(elem ...string) string {
	return filepath.Join(elem...)
}

func (fs *Memory) Symlink(target, link string) error {
	_, err := fs.Stat(link)
	if err == nil {
		return os.ErrExist
	}

	if !os.IsNotExist(err) {
		return err
	}

	return util.WriteFile(fs, link, []byte(target), 0777|os.ModeSymlink)
}

func (fs *Memory) Readlink(link string) (string, error) {
	f, has := fs.s.Get(link)
	if !has {
		return "", os.ErrNotExist
	}

	if !isSymlink(f.mode) {
		return "", &os.PathError{
			Op:   "readlink",
			Path: link,
			Err:  fmt.Errorf("not a symlink"),
		}
	}

	return string(f.content.bytes), nil
}

// Capabilities implements the Capable interface.
func (fs *Memory) Capabilities() billy.Capability {
	return billy.WriteCapability |
		billy.ReadCapability |
		billy.ReadAndWriteCapability |
		billy.SeekCapability |
		billy.TruncateCapability
}

type file struct {
	name     string
	content  *content
	position int64
	flag     int
	mode     os.FileMode

	isClosed bool
}

func (f *file) Name() string {
	return f.name
}

func (f *file) Read(b []byte) (int, error) {
	n, err := f.ReadAt(b, f.position)
	f.position += int64(n)

	if err == io.EOF && n != 0 {
		err = nil
	}

	return n, err
}

func (f *file) ReadAt(b []byte, off int64) (int, error) {
	if f.isClosed {
		return 0, os.ErrClosed
	}

	if !isReadAndWrite(f.flag) && !isReadOnly(f.flag) {
		return 0, errors.New("read not supported")
	}

	n, err := f.content.ReadAt(b, off)

	return n, err
}

func (f *file) Seek(offset int64, whence int) (int64, error) {
	if f.isClosed {
		return 0, os.ErrClosed
	}

	switch whence {
	case io.SeekCurrent:
		f.position += offset
	case io.SeekStart:
		f.position = offset
	case io.SeekEnd:
		f.position = int64(f.content.Len()) + offset
	}

	return f.position, nil
}

func (f *file) Write(p []byte) (int, error) {
	if f.isClosed {
		return 0, os.ErrClosed
	}

	if !isReadAndWrite(f.flag) && !isWriteOnly(f.flag) {
		return 0, errors.New("write not supported")
	}

	n, err := f.content.WriteAt(p, f.position)
	f.position += int64(n)

	return n, err
}

func (f *file) Close() error {
	if f.isClosed {
		return os.ErrClosed
	}

	f.isClosed = true
	return nil
}

func (f *file) Truncate(size int64) error {
	if size < int64(len(f.content.bytes)) {
		f.content.bytes = f.content.bytes[:size]
	} else if more := int(size) - len(f.content.bytes); more > 0 {
		f.content.bytes = append(f.content.bytes, make([]byte, more)...)
	}

	return nil
}

func (f *file) Duplicate(filename string, mode os.FileMode, flag int) billy.File {
	new := &file{
		name:    filename,
		content: f.content,
		mode:    mode,
		flag:    flag,
	}

	if isAppend(flag) {
		new.position = int64(new.content.Len())
	}

	if isTruncate(flag) {
		new.content.Truncate()
	}

	return new
}

func (f *file) Stat() (os.FileInfo, error) {
	return &fileInfo{
		name: f.Name(),
		mode: f.mode,
		size: f.content.Len(),
	}, nil
}

// Lock is a no-op in memfs.
func (f *file) Lock() error {
	return nil
}

// Unlock is a no-op in memfs.
func (f *file) Unlock() error {
	return nil
}

type fileInfo struct {
	name string
	size int
	mode os.FileMode
}

func (fi *fileInfo) Name() string {
	return fi.name
}

func (fi *fileInfo) Size() int64 {
	return int64(fi.size)
}

func (fi *fileInfo) Mode() os.FileMode {
	return fi.mode
}

func (*fileInfo) ModTime() time.Time {
	return time.Now()
}

func (fi *fileInfo) IsDir() bool {
	return fi.mode.IsDir()
}

func (*fileInfo) Sys() interface{} {
	return nil
}

func (c *content) Truncate() {
	c.bytes = make([]byte, 0)
}

func (c *content) Len() int {
	return len(c.bytes)
}

func isCreate(flag int) bool {
	return flag&os.O_CREATE != 0
}

func isExclusive(flag int) bool {
	return flag&os.O_EXCL != 0
}

func isAppend(flag int) bool {
	return flag&os.O_APPEND != 0
}

func isTruncate(flag int) bool {
	return flag&os.O_TRUNC != 0
}

func isReadAndWrite(flag int) bool {
	return flag&os.O_RDWR != 0
}

func isReadOnly(flag int) bool {
	return flag == os.O_RDONLY
}

func isWriteOnly(flag int) bool {
	return flag&os.O_WRONLY != 0
}

func isSymlink(m os.FileMode) bool {
	return m&os.ModeSymlink != 0
}
  070701000004DD000081A4000000000000000000000001645E367C00000F79000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-billy/v5/memfs/storage.go package memfs

import (
	"errors"
	"fmt"
	"io"
	"os"
	"path/filepath"
)

type storage struct {
	files    map[string]*file
	children map[string]map[string]*file
}

func newStorage() *storage {
	return &storage{
		files:    make(map[string]*file, 0),
		children: make(map[string]map[string]*file, 0),
	}
}

func (s *storage) Has(path string) bool {
	path = clean(path)

	_, ok := s.files[path]
	return ok
}

func (s *storage) New(path string, mode os.FileMode, flag int) (*file, error) {
	path = clean(path)
	if s.Has(path) {
		if !s.MustGet(path).mode.IsDir() {
			return nil, fmt.Errorf("file already exists %q", path)
		}

		return nil, nil
	}

	name := filepath.Base(path)

	f := &file{
		name:    name,
		content: &content{name: name},
		mode:    mode,
		flag:    flag,
	}

	s.files[path] = f
	s.createParent(path, mode, f)
	return f, nil
}

func (s *storage) createParent(path string, mode os.FileMode, f *file) error {
	base := filepath.Dir(path)
	base = clean(base)
	if f.Name() == string(separator) {
		return nil
	}

	if _, err := s.New(base, mode.Perm()|os.ModeDir, 0); err != nil {
		return err
	}

	if _, ok := s.children[base]; !ok {
		s.children[base] = make(map[string]*file, 0)
	}

	s.children[base][f.Name()] = f
	return nil
}

func (s *storage) Children(path string) []*file {
	path = clean(path)

	l := make([]*file, 0)
	for _, f := range s.children[path] {
		l = append(l, f)
	}

	return l
}

func (s *storage) MustGet(path string) *file {
	f, ok := s.Get(path)
	if !ok {
		panic(fmt.Errorf("couldn't find %q", path))
	}

	return f
}

func (s *storage) Get(path string) (*file, bool) {
	path = clean(path)
	if !s.Has(path) {
		return nil, false
	}

	file, ok := s.files[path]
	return file, ok
}

func (s *storage) Rename(from, to string) error {
	from = clean(from)
	to = clean(to)

	if !s.Has(from) {
		return os.ErrNotExist
	}

	move := [][2]string{{from, to}}

	for pathFrom := range s.files {
		if pathFrom == from || !filepath.HasPrefix(pathFrom, from) {
			continue
		}

		rel, _ := filepath.Rel(from, pathFrom)
		pathTo := filepath.Join(to, rel)

		move = append(move, [2]string{pathFrom, pathTo})
	}

	for _, ops := range move {
		from := ops[0]
		to := ops[1]

		if err := s.move(from, to); err != nil {
			return err
		}
	}

	return nil
}

func (s *storage) move(from, to string) error {
	s.files[to] = s.files[from]
	s.files[to].name = filepath.Base(to)
	s.children[to] = s.children[from]

	defer func() {
		delete(s.children, from)
		delete(s.files, from)
		delete(s.children[filepath.Dir(from)], filepath.Base(from))
	}()

	return s.createParent(to, 0644, s.files[to])
}

func (s *storage) Remove(path string) error {
	path = clean(path)

	f, has := s.Get(path)
	if !has {
		return os.ErrNotExist
	}

	if f.mode.IsDir() && len(s.children[path]) != 0 {
		return fmt.Errorf("dir: %s contains files", path)
	}

	base, file := filepath.Split(path)
	base = filepath.Clean(base)

	delete(s.children[base], file)
	delete(s.files, path)
	return nil
}

func clean(path string) string {
	return filepath.Clean(filepath.FromSlash(path))
}

type content struct {
	name  string
	bytes []byte
}

func (c *content) WriteAt(p []byte, off int64) (int, error) {
	if off < 0 {
		return 0, &os.PathError{
			Op:   "writeat",
			Path: c.name,
			Err:  errors.New("negative offset"),
		}
	}

	prev := len(c.bytes)

	diff := int(off) - prev
	if diff > 0 {
		c.bytes = append(c.bytes, make([]byte, diff)...)
	}

	c.bytes = append(c.bytes[:off], p...)
	if len(c.bytes) < prev {
		c.bytes = c.bytes[:prev]
	}

	return len(p), nil
}

func (c *content) ReadAt(b []byte, off int64) (n int, err error) {
	if off < 0 {
		return 0, &os.PathError{
			Op:   "readat",
			Path: c.name,
			Err:  errors.New("negative offset"),
		}
	}

	size := int64(len(c.bytes))
	if off >= size {
		return 0, io.EOF
	}

	l := int64(len(b))
	if off+l > size {
		l = size - off
	}

	btr := c.bytes[off : off+l]
	if len(btr) < len(b) {
		err = io.EOF
	}
	n = copy(b, btr)

	return
}
   070701000004DE000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-billy/v5/osfs 070701000004DF000081A4000000000000000000000001645E367C00000BD9000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/go-git/go-billy/v5/osfs/os.go   // +build !js

// Package osfs provides a billy filesystem for the OS.
package osfs // import "github.com/go-git/go-billy/v5/osfs"

import (
	"io/ioutil"
	"os"
	"path/filepath"
	"sync"

	"github.com/go-git/go-billy/v5"
	"github.com/go-git/go-billy/v5/helper/chroot"
)

const (
	defaultDirectoryMode = 0755
	defaultCreateMode    = 0666
)

// Default Filesystem representing the root of the os filesystem.
var Default = &OS{}

// OS is a filesystem based on the os filesystem.
type OS struct{}

// New returns a new OS filesystem.
func New(baseDir string) billy.Filesystem {
	return chroot.New(Default, baseDir)
}

func (fs *OS) Create(filename string) (billy.File, error) {
	return fs.OpenFile(filename, os.O_RDWR|os.O_CREATE|os.O_TRUNC, defaultCreateMode)
}

func (fs *OS) OpenFile(filename string, flag int, perm os.FileMode) (billy.File, error) {
	if flag&os.O_CREATE != 0 {
		if err := fs.createDir(filename); err != nil {
			return nil, err
		}
	}

	f, err := os.OpenFile(filename, flag, perm)
	if err != nil {
		return nil, err
	}
	return &file{File: f}, err
}

func (fs *OS) createDir(fullpath string) error {
	dir := filepath.Dir(fullpath)
	if dir != "." {
		if err := os.MkdirAll(dir, defaultDirectoryMode); err != nil {
			return err
		}
	}

	return nil
}

func (fs *OS) ReadDir(path string) ([]os.FileInfo, error) {
	l, err := ioutil.ReadDir(path)
	if err != nil {
		return nil, err
	}

	var s = make([]os.FileInfo, len(l))
	for i, f := range l {
		s[i] = f
	}

	return s, nil
}

func (fs *OS) Rename(from, to string) error {
	if err := fs.createDir(to); err != nil {
		return err
	}

	return rename(from, to)
}

func (fs *OS) MkdirAll(path string, perm os.FileMode) error {
	return os.MkdirAll(path, defaultDirectoryMode)
}

func (fs *OS) Open(filename string) (billy.File, error) {
	return fs.OpenFile(filename, os.O_RDONLY, 0)
}

func (fs *OS) Stat(filename string) (os.FileInfo, error) {
	return os.Stat(filename)
}

func (fs *OS) Remove(filename string) error {
	return os.Remove(filename)
}

func (fs *OS) TempFile(dir, prefix string) (billy.File, error) {
	if err := fs.createDir(dir + string(os.PathSeparator)); err != nil {
		return nil, err
	}

	f, err := ioutil.TempFile(dir, prefix)
	if err != nil {
		return nil, err
	}
	return &file{File: f}, nil
}

func (fs *OS) Join(elem ...string) string {
	return filepath.Join(elem...)
}

func (fs *OS) RemoveAll(path string) error {
	return os.RemoveAll(filepath.Clean(path))
}

func (fs *OS) Lstat(filename string) (os.FileInfo, error) {
	return os.Lstat(filepath.Clean(filename))
}

func (fs *OS) Symlink(target, link string) error {
	if err := fs.createDir(link); err != nil {
		return err
	}

	return os.Symlink(target, link)
}

func (fs *OS) Readlink(link string) (string, error) {
	return os.Readlink(link)
}

// Capabilities implements the Capable interface.
func (fs *OS) Capabilities() billy.Capability {
	return billy.DefaultCapabilities
}

// file is a wrapper for an os.File which adds support for file locking.
type file struct {
	*os.File
	m sync.Mutex
}
   070701000004E0000081A4000000000000000000000001645E367C000001EC000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/go-git/go-billy/v5/osfs/os_js.go    // +build js

package osfs

import (
	"github.com/go-git/go-billy/v5"
	"github.com/go-git/go-billy/v5/helper/chroot"
	"github.com/go-git/go-billy/v5/memfs"
)

// globalMemFs is the global memory fs
var globalMemFs = memfs.New()

// Default Filesystem representing the root of in-memory filesystem for a
// js/wasm environment.
var Default = memfs.New()

// New returns a new OS filesystem.
func New(baseDir string) billy.Filesystem {
	return chroot.New(Default, Default.Join("/", baseDir))
}
070701000004E1000081A4000000000000000000000001645E367C000008A7000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-billy/v5/osfs/os_plan9.go // +build plan9

package osfs

import (
	"io"
	"os"
	"path/filepath"
	"syscall"
)

func (f *file) Lock() error {
	// Plan 9 uses a mode bit instead of explicit lock/unlock syscalls.
	//
	// Per http://man.cat-v.org/plan_9/5/stat: “Exclusive use files may be open
	// for I/O by only one fid at a time across all clients of the server. If a
	// second open is attempted, it draws an error.”
	//
	// There is no obvious way to implement this function using the exclusive use bit.
	// See https://golang.org/src/cmd/go/internal/lockedfile/lockedfile_plan9.go
	// for how file locking is done by the go tool on Plan 9.
	return nil
}

func (f *file) Unlock() error {
	return nil
}

func rename(from, to string) error {
	// If from and to are in different directories, copy the file
	// since Plan 9 does not support cross-directory rename.
	if filepath.Dir(from) != filepath.Dir(to) {
		fi, err := os.Stat(from)
		if err != nil {
			return &os.LinkError{"rename", from, to, err}
		}
		if fi.Mode().IsDir() {
			return &os.LinkError{"rename", from, to, syscall.EISDIR}
		}
		fromFile, err := os.Open(from)
		if err != nil {
			return &os.LinkError{"rename", from, to, err}
		}
		toFile, err := os.OpenFile(to, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, fi.Mode())
		if err != nil {
			return &os.LinkError{"rename", from, to, err}
		}
		_, err = io.Copy(toFile, fromFile)
		if err != nil {
			return &os.LinkError{"rename", from, to, err}
		}

		// Copy mtime and mode from original file.
		// We need only one syscall if we avoid os.Chmod and os.Chtimes.
		dir := fi.Sys().(*syscall.Dir)
		var d syscall.Dir
		d.Null()
		d.Mtime = dir.Mtime
		d.Mode = dir.Mode
		if err = dirwstat(to, &d); err != nil {
			return &os.LinkError{"rename", from, to, err}
		}

		// Remove original file.
		err = os.Remove(from)
		if err != nil {
			return &os.LinkError{"rename", from, to, err}
		}
		return nil
	}
	return os.Rename(from, to)
}

func dirwstat(name string, d *syscall.Dir) error {
	var buf [syscall.STATFIXLEN]byte

	n, err := d.Marshal(buf[:])
	if err != nil {
		return &os.PathError{"dirwstat", name, err}
	}
	if err = syscall.Wstat(name, buf[:n]); err != nil {
		return &os.PathError{"dirwstat", name, err}
	}
	return nil
}
 070701000004E2000081A4000000000000000000000001645E367C00000188000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-billy/v5/osfs/os_posix.go // +build !plan9,!windows,!js

package osfs

import (
	"os"

	"golang.org/x/sys/unix"
)

func (f *file) Lock() error {
	f.m.Lock()
	defer f.m.Unlock()

	return unix.Flock(int(f.File.Fd()), unix.LOCK_EX)
}

func (f *file) Unlock() error {
	f.m.Lock()
	defer f.m.Unlock()

	return unix.Flock(int(f.File.Fd()), unix.LOCK_UN)
}

func rename(from, to string) error {
	return os.Rename(from, to)
}
070701000004E3000081A4000000000000000000000001645E367C0000043E000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-billy/v5/osfs/os_windows.go   // +build windows

package osfs

import (
	"os"
	"runtime"
	"unsafe"

	"golang.org/x/sys/windows"
)

type fileInfo struct {
	os.FileInfo
	name string
}

func (fi *fileInfo) Name() string {
	return fi.name
}

var (
	kernel32DLL    = windows.NewLazySystemDLL("kernel32.dll")
	lockFileExProc = kernel32DLL.NewProc("LockFileEx")
	unlockFileProc = kernel32DLL.NewProc("UnlockFile")
)

const (
	lockfileExclusiveLock = 0x2
)

func (f *file) Lock() error {
	f.m.Lock()
	defer f.m.Unlock()

	var overlapped windows.Overlapped
	// err is always non-nil as per sys/windows semantics.
	ret, _, err := lockFileExProc.Call(f.File.Fd(), lockfileExclusiveLock, 0, 0xFFFFFFFF, 0,
		uintptr(unsafe.Pointer(&overlapped)))
	runtime.KeepAlive(&overlapped)
	if ret == 0 {
		return err
	}
	return nil
}

func (f *file) Unlock() error {
	f.m.Lock()
	defer f.m.Unlock()

	// err is always non-nil as per sys/windows semantics.
	ret, _, err := unlockFileProc.Call(f.File.Fd(), 0, 0, 0xFFFFFFFF, 0)
	if ret == 0 {
		return err
	}
	return nil
}

func rename(from, to string) error {
	return os.Rename(from, to)
}
  070701000004E4000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-billy/v5/util 070701000004E5000081A4000000000000000000000001645E367C00000A07000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/go-git/go-billy/v5/util/glob.go package util

import (
	"path/filepath"
	"sort"
	"strings"

	"github.com/go-git/go-billy/v5"
)

// Glob returns the names of all files matching pattern or nil
// if there is no matching file. The syntax of patterns is the same
// as in Match. The pattern may describe hierarchical names such as
// /usr/*/bin/ed (assuming the Separator is '/').
//
// Glob ignores file system errors such as I/O errors reading directories.
// The only possible returned error is ErrBadPattern, when pattern
// is malformed.
//
// Function originally from https://golang.org/src/path/filepath/match_test.go
func Glob(fs billy.Filesystem, pattern string) (matches []string, err error) {
	if !hasMeta(pattern) {
		if _, err = fs.Lstat(pattern); err != nil {
			return nil, nil
		}
		return []string{pattern}, nil
	}

	dir, file := filepath.Split(pattern)
	// Prevent infinite recursion. See issue 15879.
	if dir == pattern {
		return nil, filepath.ErrBadPattern
	}

	var m []string
	m, err = Glob(fs, cleanGlobPath(dir))
	if err != nil {
		return
	}
	for _, d := range m {
		matches, err = glob(fs, d, file, matches)
		if err != nil {
			return
		}
	}
	return
}

// cleanGlobPath prepares path for glob matching.
func cleanGlobPath(path string) string {
	switch path {
	case "":
		return "."
	case string(filepath.Separator):
		// do nothing to the path
		return path
	default:
		return path[0 : len(path)-1] // chop off trailing separator
	}
}

// glob searches for files matching pattern in the directory dir
// and appends them to matches. If the directory cannot be
// opened, it returns the existing matches. New matches are
// added in lexicographical order.
func glob(fs billy.Filesystem, dir, pattern string, matches []string) (m []string, e error) {
	m = matches
	fi, err := fs.Stat(dir)
	if err != nil {
		return
	}

	if !fi.IsDir() {
		return
	}

	names, _ := readdirnames(fs, dir)
	sort.Strings(names)

	for _, n := range names {
		matched, err := filepath.Match(pattern, n)
		if err != nil {
			return m, err
		}
		if matched {
			m = append(m, filepath.Join(dir, n))
		}
	}
	return
}

// hasMeta reports whether path contains any of the magic characters
// recognized by Match.
func hasMeta(path string) bool {
	// TODO(niemeyer): Should other magic characters be added here?
	return strings.ContainsAny(path, "*?[")
}

func readdirnames(fs billy.Filesystem, dir string) ([]string, error) {
	files, err := fs.ReadDir(dir)
	if err != nil {
		return nil, err
	}

	var names []string
	for _, file := range files {
		names = append(names, file.Name())
	}

	return names, nil
}
 070701000004E6000081A4000000000000000000000001645E367C00001959000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/go-git/go-billy/v5/util/util.go package util

import (
	"io"
	"os"
	"path/filepath"
	"strconv"
	"sync"
	"time"

	"github.com/go-git/go-billy/v5"
)

// RemoveAll removes path and any children it contains. It removes everything it
// can but returns the first error it encounters. If the path does not exist,
// RemoveAll returns nil (no error).
func RemoveAll(fs billy.Basic, path string) error {
	fs, path = getUnderlyingAndPath(fs, path)

	if r, ok := fs.(removerAll); ok {
		return r.RemoveAll(path)
	}

	return removeAll(fs, path)
}

type removerAll interface {
	RemoveAll(string) error
}

func removeAll(fs billy.Basic, path string) error {
	// This implementation is adapted from os.RemoveAll.

	// Simple case: if Remove works, we're done.
	err := fs.Remove(path)
	if err == nil || os.IsNotExist(err) {
		return nil
	}

	// Otherwise, is this a directory we need to recurse into?
	dir, serr := fs.Stat(path)
	if serr != nil {
		if os.IsNotExist(serr) {
			return nil
		}

		return serr
	}

	if !dir.IsDir() {
		// Not a directory; return the error from Remove.
		return err
	}

	dirfs, ok := fs.(billy.Dir)
	if !ok {
		return billy.ErrNotSupported
	}

	// Directory.
	fis, err := dirfs.ReadDir(path)
	if err != nil {
		if os.IsNotExist(err) {
			// Race. It was deleted between the Lstat and Open.
			// Return nil per RemoveAll's docs.
			return nil
		}

		return err
	}

	// Remove contents & return first error.
	err = nil
	for _, fi := range fis {
		cpath := fs.Join(path, fi.Name())
		err1 := removeAll(fs, cpath)
		if err == nil {
			err = err1
		}
	}

	// Remove directory.
	err1 := fs.Remove(path)
	if err1 == nil || os.IsNotExist(err1) {
		return nil
	}

	if err == nil {
		err = err1
	}

	return err

}

// WriteFile writes data to a file named by filename in the given filesystem.
// If the file does not exist, WriteFile creates it with permissions perm;
// otherwise WriteFile truncates it before writing.
func WriteFile(fs billy.Basic, filename string, data []byte, perm os.FileMode) error {
	f, err := fs.OpenFile(filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, perm)
	if err != nil {
		return err
	}

	n, err := f.Write(data)
	if err == nil && n < len(data) {
		err = io.ErrShortWrite
	}

	if err1 := f.Close(); err == nil {
		err = err1
	}

	return err
}

// Random number state.
// We generate random temporary file names so that there's a good
// chance the file doesn't exist yet - keeps the number of tries in
// TempFile to a minimum.
var rand uint32
var randmu sync.Mutex

func reseed() uint32 {
	return uint32(time.Now().UnixNano() + int64(os.Getpid()))
}

func nextSuffix() string {
	randmu.Lock()
	r := rand
	if r == 0 {
		r = reseed()
	}
	r = r*1664525 + 1013904223 // constants from Numerical Recipes
	rand = r
	randmu.Unlock()
	return strconv.Itoa(int(1e9 + r%1e9))[1:]
}

// TempFile creates a new temporary file in the directory dir with a name
// beginning with prefix, opens the file for reading and writing, and returns
// the resulting *os.File. If dir is the empty string, TempFile uses the default
// directory for temporary files (see os.TempDir). Multiple programs calling
// TempFile simultaneously will not choose the same file. The caller can use
// f.Name() to find the pathname of the file. It is the caller's responsibility
// to remove the file when no longer needed.
func TempFile(fs billy.Basic, dir, prefix string) (f billy.File, err error) {
	// This implementation is based on stdlib ioutil.TempFile.
	if dir == "" {
		dir = getTempDir(fs)
	}

	nconflict := 0
	for i := 0; i < 10000; i++ {
		name := filepath.Join(dir, prefix+nextSuffix())
		f, err = fs.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0600)
		if os.IsExist(err) {
			if nconflict++; nconflict > 10 {
				randmu.Lock()
				rand = reseed()
				randmu.Unlock()
			}
			continue
		}
		break
	}
	return
}

// TempDir creates a new temporary directory in the directory dir
// with a name beginning with prefix and returns the path of the
// new directory. If dir is the empty string, TempDir uses the
// default directory for temporary files (see os.TempDir).
// Multiple programs calling TempDir simultaneously
// will not choose the same directory. It is the caller's responsibility
// to remove the directory when no longer needed.
func TempDir(fs billy.Dir, dir, prefix string) (name string, err error) {
	// This implementation is based on stdlib ioutil.TempDir

	if dir == "" {
		dir = getTempDir(fs.(billy.Basic))
	}

	nconflict := 0
	for i := 0; i < 10000; i++ {
		try := filepath.Join(dir, prefix+nextSuffix())
		err = fs.MkdirAll(try, 0700)
		if os.IsExist(err) {
			if nconflict++; nconflict > 10 {
				randmu.Lock()
				rand = reseed()
				randmu.Unlock()
			}
			continue
		}
		if os.IsNotExist(err) {
			if _, err := os.Stat(dir); os.IsNotExist(err) {
				return "", err
			}
		}
		if err == nil {
			name = try
		}
		break
	}
	return
}

func getTempDir(fs billy.Basic) string {
	ch, ok := fs.(billy.Chroot)
	if !ok || ch.Root() == "" || ch.Root() == "/" || ch.Root() == string(filepath.Separator) {
		return os.TempDir()
	}

	return ".tmp"
}

type underlying interface {
	Underlying() billy.Basic
}

func getUnderlyingAndPath(fs billy.Basic, path string) (billy.Basic, string) {
	u, ok := fs.(underlying)
	if !ok {
		return fs, path
	}
	if ch, ok := fs.(billy.Chroot); ok {
		path = fs.Join(ch.Root(), path)
	}

	return u.Underlying(), path
}

// ReadFile reads the named file and returns the contents from the given filesystem.
// A successful call returns err == nil, not err == EOF.
// Because ReadFile reads the whole file, it does not treat an EOF from Read
// as an error to be reported.
func ReadFile(fs billy.Basic, name string) ([]byte, error) {
	f, err := fs.Open(name)
	if err != nil {
		return nil, err
	}

	defer f.Close()

	var size int
	if info, err := fs.Stat(name); err == nil {
		size64 := info.Size()
		if int64(int(size64)) == size64 {
			size = int(size64)
		}
	}

	size++ // one byte for final read at EOF
	// If a file claims a small size, read at least 512 bytes.
	// In particular, files in Linux's /proc claim size 0 but
	// then do not work right if read in small pieces,
	// so an initial read of 1 byte would not work correctly.

	if size < 512 {
		size = 512
	}

	data := make([]byte, 0, size)
	for {
		if len(data) >= cap(data) {
			d := append(data[:cap(data)], 0)
			data = d[:len(data)]
		}

		n, err := f.Read(data[len(data):cap(data)])
		data = data[:len(data)+n]

		if err != nil {
			if err == io.EOF {
				err = nil
			}

			return data, err
		}
	}
}
   070701000004E7000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git   070701000004E8000041ED000000000000000000000007645E367C00000000000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5    070701000004E9000081A4000000000000000000000001645E367C00000029000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/.gitignore coverage.out
*~
coverage.txt
profile.out
   070701000004EA000081A4000000000000000000000001645E367C00000C9D000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/CODE_OF_CONDUCT.md # Contributor Covenant Code of Conduct

## Our Pledge

In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, gender identity and expression, level of experience,
education, socio-economic status, nationality, personal appearance, race,
religion, or sexual identity and orientation.

## Our Standards

Examples of behavior that contributes to creating a positive environment
include:

* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members

Examples of unacceptable behavior by participants include:

* The use of sexualized language or imagery and unwelcome sexual attention or
  advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
  address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
  professional setting

## Our Responsibilities

Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.

Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.

## Scope

This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at conduct@sourced.tech. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.

Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html

[homepage]: https://www.contributor-covenant.org

   070701000004EB000081A4000000000000000000000001645E367C0000160A000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/COMPATIBILITY.md   Supported Capabilities
======================

Here is a non-comprehensive table of git commands and features whose equivalent
is supported by go-git.

| Feature                               | Status | Notes |
|---------------------------------------|--------|-------|
| **config**                            |
| config                                | ✔ | Reading and modifying per-repository configuration (`.git/config`) is supported. Global configuration (`$HOME/.gitconfig`) is not. |
| **getting and creating repositories** |
| init                                  | ✔ | Plain init and `--bare` are supported. Flags `--template`, `--separate-git-dir` and `--shared` are not. |
| clone                                 | ✔ | Plain clone and equivalents to `--progress`,  `--single-branch`, `--depth`, `--origin`, `--recurse-submodules` are supported. Others are not. |
| **basic snapshotting** |
| add                                   | ✔ | Plain add is supported. Any other flags aren't supported |
| status                                | ✔ |
| commit                                | ✔ |
| reset                                 | ✔ |
| rm                                    | ✔ |
| mv                                    | ✔ |
| **branching and merging** |
| branch                                | ✔ |
| checkout                              | ✔ | Basic usages of checkout are supported. |
| merge                                 | ✖ |
| mergetool                             | ✖ |
| stash                                 | ✖ |
| tag                                   | ✔ |
| **sharing and updating projects** |
| fetch                                 | ✔ |
| pull                                  | ✔ | Only supports merges where the merge can be resolved as a fast-forward. |
| push                                  | ✔ |
| remote                                | ✔ |
| submodule                             | ✔ |
| **inspection and comparison** |
| show                                  | ✔ |
| log                                   | ✔ |
| shortlog                              | (see log) |
| describe                              | |
| **patching** |
| apply                                 | ✖ |
| cherry-pick                           | ✖ |
| diff                                  | ✔ | Patch object with UnifiedDiff output representation |
| rebase                                | ✖ |
| revert                                | ✖ |
| **debugging** |
| bisect                                | ✖ |
| blame                                 | ✔ |
| grep                                  | ✔ |
| **email** ||
| am                                    | ✖ |
| apply                                 | ✖ |
| format-patch                          | ✖ |
| send-email                            | ✖ |
| request-pull                          | ✖ |
| **external systems** |
| svn                                   | ✖ |
| fast-import                           | ✖ |
| **administration** |
| clean                                 | ✔ |
| gc                                    | ✖ |
| fsck                                  | ✖ |
| reflog                                | ✖ |
| filter-branch                         | ✖ |
| instaweb                              | ✖ |
| archive                               | ✖ |
| bundle                                | ✖ |
| prune                                 | ✖ |
| repack                                | ✖ |
| **server admin** |
| daemon                                | |
| update-server-info                    | |
| **advanced** |
| notes                                 | ✖ |
| replace                               | ✖ |
| worktree                              | ✖ |
| annotate                              | (see blame) |
| **gpg** |
| git-verify-commit                     | ✔ |
| git-verify-tag                        | ✔ |
| **plumbing commands** |
| cat-file                              | ✔ |
| check-ignore                          | |
| commit-tree                           | |
| count-objects                         | |
| diff-index                            | |
| for-each-ref                          | ✔ |
| hash-object                           | ✔ |
| ls-files                              | ✔ |
| merge-base                            | ✔ | Calculates the merge-base only between two commits, and supports `--independent` and `--is-ancestor` modifiers; Does not support `--fork-point` nor `--octopus` modifiers. |
| read-tree                             | |
| rev-list                              | ✔ |
| rev-parse                             | |
| show-ref                              | ✔ |
| symbolic-ref                          | ✔ |
| update-index                          | |
| update-ref                            | |
| verify-pack                           | |
| write-tree                            | |
| **protocols** |
| http(s):// (dumb)                     | ✖ |
| http(s):// (smart)                    | ✔ |
| git://                                | ✔ |
| ssh://                                | ✔ |
| file://                               | partial | Warning: this is not pure Golang. This shells out to the `git` binary. |
| custom                                | ✔ |
| **other features** |
| gitignore                             | ✔ |
| gitattributes                         | ✖ |
| index version                         | |
| packfile version                      | |
| push-certs                            | ✖ |
  070701000004EC000081A4000000000000000000000001645E367C00000956000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/CONTRIBUTING.md    # Contributing Guidelines

source{d} go-git project is [Apache 2.0 licensed](LICENSE) and accepts
contributions via GitHub pull requests.  This document outlines some of the
conventions on development workflow, commit message formatting, contact points,
and other resources to make it easier to get your contribution accepted.

## Support Channels

The official support channels, for both users and contributors, are:

- [StackOverflow go-git tag](https://stackoverflow.com/questions/tagged/go-git) for user questions.
- GitHub [Issues](https://github.com/src-d/go-git/issues)* for bug reports and feature requests.

*Before opening a new issue or submitting a new pull request, it's helpful to
search the project - it's likely that another user has already reported the
issue you're facing, or it's a known issue that we're already aware of.


## How to Contribute

Pull Requests (PRs) are the main and exclusive way to contribute to the official go-git project.
In order for a PR to be accepted it needs to pass a list of requirements:

- You should be able to run the same query using `git`. We don't accept features that are not implemented in the official git implementation.
- The expected behavior must match the [official git implementation](https://github.com/git/git).
- The actual behavior must be correctly explained with natural language and providing a minimum working example in Go that reproduces it.
- All PRs must be written in idiomatic Go, formatted according to [gofmt](https://golang.org/cmd/gofmt/), and without any warnings from [go lint](https://github.com/golang/lint) nor [go vet](https://golang.org/cmd/vet/).
- They should in general include tests, and those shall pass.
- If the PR is a bug fix, it has to include a suite of unit tests for the new functionality.
- If the PR is a new feature, it has to come with a suite of unit tests, that tests the new functionality.
- In any case, all the PRs have to pass the personal evaluation of at least one of the maintainers of go-git.

### Format of the commit message

Every commit message should describe what was changed, under which context and, if applicable, the GitHub issue it relates to:

```
plumbing: packp, Skip argument validations for unknown capabilities. Fixes #623
```

The format can be described more formally as follows:

```
<package>: <subpackage>, <what changed>. [Fixes #<issue-number>]
```
  070701000004ED000081A4000000000000000000000001645E367C00002C5C000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/LICENSE                                     Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "{}"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright 2018 Sourced Technologies, S.L.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
070701000004EE000081A4000000000000000000000001645E367C0000033C000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/Makefile   # General
WORKDIR = $(PWD)

# Go parameters
GOCMD = go
GOTEST = $(GOCMD) test 

# Git config
GIT_VERSION ?=
GIT_DIST_PATH ?= $(PWD)/.git-dist
GIT_REPOSITORY = http://github.com/git/git.git

# Coverage
COVERAGE_REPORT = coverage.out
COVERAGE_MODE = count

build-git:
	@if [ -f $(GIT_DIST_PATH)/git ]; then \
		echo "nothing to do, using cache $(GIT_DIST_PATH)"; \
	else \
		git clone $(GIT_REPOSITORY) -b $(GIT_VERSION) --depth 1 --single-branch $(GIT_DIST_PATH); \
		cd $(GIT_DIST_PATH); \
		make configure; \
		./configure; \
		make all; \
	fi

test:
	@echo "running against `git version`"; \
	$(GOTEST) ./...

test-coverage:
	@echo "running against `git version`"; \
	echo "" > $(COVERAGE_REPORT); \
	$(GOTEST) -coverprofile=$(COVERAGE_REPORT) -coverpkg=./... -covermode=$(COVERAGE_MODE) ./...

clean:
	rm -rf $(GIT_DIST_PATH)070701000004EF000081A4000000000000000000000001645E367C00001331000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/README.md  ![go-git logo](https://cdn.rawgit.com/src-d/artwork/02036484/go-git/files/go-git-github-readme-header.png)
[![GoDoc](https://godoc.org/github.com/go-git/go-git/v5?status.svg)](https://pkg.go.dev/github.com/go-git/go-git/v5) [![Build Status](https://github.com/go-git/go-git/workflows/Test/badge.svg)](https://github.com/go-git/go-git/actions) [![Go Report Card](https://goreportcard.com/badge/github.com/go-git/go-git)](https://goreportcard.com/report/github.com/go-git/go-git)

*go-git* is a highly extensible git implementation library written in **pure Go**.

It can be used to manipulate git repositories at low level *(plumbing)* or high level *(porcelain)*, through an idiomatic Go API. It also supports several types of storage, such as in-memory filesystems, or custom implementations, thanks to the [`Storer`](https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing/storer) interface.

It's being actively developed since 2015 and is being used extensively by [Keybase](https://keybase.io/blog/encrypted-git-for-everyone), [Gitea](https://gitea.io/en-us/) or [Pulumi](https://github.com/search?q=org%3Apulumi+go-git&type=Code), and by many other libraries and tools.

Project Status
--------------

After the legal issues with the [`src-d`](https://github.com/src-d) organization, the lack of update for four months and the requirement to make a hard fork, the project is **now back to normality**.

The project is currently actively maintained by individual contributors, including several of the original authors, but also backed by a new company, [gitsight](https://github.com/gitsight), where `go-git` is a critical component used at scale.


Comparison with git
-------------------

*go-git* aims to be fully compatible with [git](https://github.com/git/git), all the *porcelain* operations are implemented to work exactly as *git* does.

*git* is a humongous project with years of development by thousands of contributors, making it challenging for *go-git* to implement all the features. You can find a comparison of *go-git* vs *git* in the [compatibility documentation](COMPATIBILITY.md).


Installation
------------

The recommended way to install *go-git* is:

```go
import "github.com/go-git/go-git/v5" // with go modules enabled (GO111MODULE=on or outside GOPATH)
import "github.com/go-git/go-git" // with go modules disabled
```


Examples
--------

> Please note that the `CheckIfError` and `Info` functions  used in the examples are from the [examples package](https://github.com/go-git/go-git/blob/master/_examples/common.go#L19) just to be used in the examples.


### Basic example

A basic example that mimics the standard `git clone` command

```go
// Clone the given repository to the given directory
Info("git clone https://github.com/go-git/go-git")

_, err := git.PlainClone("/tmp/foo", false, &git.CloneOptions{
    URL:      "https://github.com/go-git/go-git",
    Progress: os.Stdout,
})

CheckIfError(err)
```

Outputs:
```
Counting objects: 4924, done.
Compressing objects: 100% (1333/1333), done.
Total 4924 (delta 530), reused 6 (delta 6), pack-reused 3533
```

### In-memory example

Cloning a repository into memory and printing the history of HEAD, just like `git log` does


```go
// Clones the given repository in memory, creating the remote, the local
// branches and fetching the objects, exactly as:
Info("git clone https://github.com/go-git/go-billy")

r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{
    URL: "https://github.com/go-git/go-billy",
})

CheckIfError(err)

// Gets the HEAD history from HEAD, just like this command:
Info("git log")

// ... retrieves the branch pointed by HEAD
ref, err := r.Head()
CheckIfError(err)


// ... retrieves the commit history
cIter, err := r.Log(&git.LogOptions{From: ref.Hash()})
CheckIfError(err)

// ... just iterates over the commits, printing it
err = cIter.ForEach(func(c *object.Commit) error {
	fmt.Println(c)
	return nil
})
CheckIfError(err)
```

Outputs:
```
commit ded8054fd0c3994453e9c8aacaf48d118d42991e
Author: Santiago M. Mola <santi@mola.io>
Date:   Sat Nov 12 21:18:41 2016 +0100

    index: ReadFrom/WriteTo returns IndexReadError/IndexWriteError. (#9)

commit df707095626f384ce2dc1a83b30f9a21d69b9dfc
Author: Santiago M. Mola <santi@mola.io>
Date:   Fri Nov 11 13:23:22 2016 +0100

    readwriter: fix bug when writing index. (#10)

    When using ReadWriter on an existing siva file, absolute offset for
    index entries was not being calculated correctly.
...
```

You can find this [example](_examples/log/main.go) and many others in the [examples](_examples) folder.

Contribute
----------

[Contributions](https://github.com/go-git/go-git/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) are more than welcome, if you are interested please take a look to
our [Contributing Guidelines](CONTRIBUTING.md).

License
-------
Apache License Version 2.0, see [LICENSE](LICENSE)
   070701000004F0000081A4000000000000000000000001645E367C00002079000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/blame.go   package git

import (
	"bytes"
	"errors"
	"fmt"
	"strconv"
	"strings"
	"time"
	"unicode/utf8"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/object"
	"github.com/go-git/go-git/v5/utils/diff"
)

// BlameResult represents the result of a Blame operation.
type BlameResult struct {
	// Path is the path of the File that we're blaming.
	Path string
	// Rev (Revision) is the hash of the specified Commit used to generate this result.
	Rev plumbing.Hash
	// Lines contains every line with its authorship.
	Lines []*Line
}

// Blame returns a BlameResult with the information about the last author of
// each line from file `path` at commit `c`.
func Blame(c *object.Commit, path string) (*BlameResult, error) {
	// The file to blame is identified by the input arguments:
	// commit and path. commit is a Commit object obtained from a Repository. Path
	// represents a path to a specific file contained into the repository.
	//
	// Blaming a file is a two step process:
	//
	// 1. Create a linear history of the commits affecting a file. We use
	// revlist.New for that.
	//
	// 2. Then build a graph with a node for every line in every file in
	// the history of the file.
	//
	// Each node is assigned a commit: Start by the nodes in the first
	// commit. Assign that commit as the creator of all its lines.
	//
	// Then jump to the nodes in the next commit, and calculate the diff
	// between the two files. Newly created lines get
	// assigned the new commit as its origin. Modified lines also get
	// this new commit. Untouched lines retain the old commit.
	//
	// All this work is done in the assignOrigin function which holds all
	// the internal relevant data in a "blame" struct, that is not
	// exported.
	//
	// TODO: ways to improve the efficiency of this function:
	// 1. Improve revlist
	// 2. Improve how to traverse the history (example a backward traversal will
	// be much more efficient)
	//
	// TODO: ways to improve the function in general:
	// 1. Add memoization between revlist and assign.
	// 2. It is using much more memory than needed, see the TODOs below.

	b := new(blame)
	b.fRev = c
	b.path = path

	// get all the file revisions
	if err := b.fillRevs(); err != nil {
		return nil, err
	}

	// calculate the line tracking graph and fill in
	// file contents in data.
	if err := b.fillGraphAndData(); err != nil {
		return nil, err
	}

	file, err := b.fRev.File(b.path)
	if err != nil {
		return nil, err
	}
	finalLines, err := file.Lines()
	if err != nil {
		return nil, err
	}

	// Each node (line) holds the commit where it was introduced or
	// last modified. To achieve that we use the FORWARD algorithm
	// described in Zimmermann, et al. "Mining Version Archives for
	// Co-changed Lines", in proceedings of the Mining Software
	// Repositories workshop, Shanghai, May 22-23, 2006.
	lines, err := newLines(finalLines, b.sliceGraph(len(b.graph)-1))
	if err != nil {
		return nil, err
	}

	return &BlameResult{
		Path:  path,
		Rev:   c.Hash,
		Lines: lines,
	}, nil
}

// Line values represent the contents and author of a line in BlamedResult values.
type Line struct {
	// Author is the email address of the last author that modified the line.
	Author string
	// Text is the original text of the line.
	Text string
	// Date is when the original text of the line was introduced
	Date time.Time
	// Hash is the commit hash that introduced the original line
	Hash plumbing.Hash
}

func newLine(author, text string, date time.Time, hash plumbing.Hash) *Line {
	return &Line{
		Author: author,
		Text:   text,
		Hash:   hash,
		Date:   date,
	}
}

func newLines(contents []string, commits []*object.Commit) ([]*Line, error) {
	lcontents := len(contents)
	lcommits := len(commits)

	if lcontents != lcommits {
		if lcontents == lcommits-1 && contents[lcontents-1] != "\n" {
			contents = append(contents, "\n")
		} else {
			return nil, errors.New("contents and commits have different length")
		}
	}

	result := make([]*Line, 0, lcontents)
	for i := range contents {
		result = append(result, newLine(
			commits[i].Author.Email, contents[i],
			commits[i].Author.When, commits[i].Hash,
		))
	}

	return result, nil
}

// this struct is internally used by the blame function to hold its
// inputs, outputs and state.
type blame struct {
	// the path of the file to blame
	path string
	// the commit of the final revision of the file to blame
	fRev *object.Commit
	// the chain of revisions affecting the the file to blame
	revs []*object.Commit
	// the contents of the file across all its revisions
	data []string
	// the graph of the lines in the file across all the revisions
	graph [][]*object.Commit
}

// calculate the history of a file "path", starting from commit "from", sorted by commit date.
func (b *blame) fillRevs() error {
	var err error

	b.revs, err = references(b.fRev, b.path)
	return err
}

// build graph of a file from its revision history
func (b *blame) fillGraphAndData() error {
	//TODO: not all commits are needed, only the current rev and the prev
	b.graph = make([][]*object.Commit, len(b.revs))
	b.data = make([]string, len(b.revs)) // file contents in all the revisions
	// for every revision of the file, starting with the first
	// one...
	for i, rev := range b.revs {
		// get the contents of the file
		file, err := rev.File(b.path)
		if err != nil {
			return nil
		}
		b.data[i], err = file.Contents()
		if err != nil {
			return err
		}
		nLines := countLines(b.data[i])
		// create a node for each line
		b.graph[i] = make([]*object.Commit, nLines)
		// assign a commit to each node
		// if this is the first revision, then the node is assigned to
		// this first commit.
		if i == 0 {
			for j := 0; j < nLines; j++ {
				b.graph[i][j] = b.revs[i]
			}
		} else {
			// if this is not the first commit, then assign to the old
			// commit or to the new one, depending on what the diff
			// says.
			b.assignOrigin(i, i-1)
		}
	}
	return nil
}

// sliceGraph returns a slice of commits (one per line) for a particular
// revision of a file (0=first revision).
func (b *blame) sliceGraph(i int) []*object.Commit {
	fVs := b.graph[i]
	result := make([]*object.Commit, 0, len(fVs))
	for _, v := range fVs {
		c := *v
		result = append(result, &c)
	}
	return result
}

// Assigns origin to vertexes in current (c) rev from data in its previous (p)
// revision
func (b *blame) assignOrigin(c, p int) {
	// assign origin based on diff info
	hunks := diff.Do(b.data[p], b.data[c])
	sl := -1 // source line
	dl := -1 // destination line
	for h := range hunks {
		hLines := countLines(hunks[h].Text)
		for hl := 0; hl < hLines; hl++ {
			switch {
			case hunks[h].Type == 0:
				sl++
				dl++
				b.graph[c][dl] = b.graph[p][sl]
			case hunks[h].Type == 1:
				dl++
				b.graph[c][dl] = b.revs[c]
			case hunks[h].Type == -1:
				sl++
			default:
				panic("unreachable")
			}
		}
	}
}

// GoString prints the results of a Blame using git-blame's style.
func (b *blame) GoString() string {
	var buf bytes.Buffer

	file, err := b.fRev.File(b.path)
	if err != nil {
		panic("PrettyPrint: internal error in repo.Data")
	}
	contents, err := file.Contents()
	if err != nil {
		panic("PrettyPrint: internal error in repo.Data")
	}

	lines := strings.Split(contents, "\n")
	// max line number length
	mlnl := len(strconv.Itoa(len(lines)))
	// max author length
	mal := b.maxAuthorLength()
	format := fmt.Sprintf("%%s (%%-%ds %%%dd) %%s\n",
		mal, mlnl)

	fVs := b.graph[len(b.graph)-1]
	for ln, v := range fVs {
		fmt.Fprintf(&buf, format, v.Hash.String()[:8],
			prettyPrintAuthor(fVs[ln]), ln+1, lines[ln])
	}
	return buf.String()
}

// utility function to pretty print the author.
func prettyPrintAuthor(c *object.Commit) string {
	return fmt.Sprintf("%s %s", c.Author.Name, c.Author.When.Format("2006-01-02"))
}

// utility function to calculate the number of runes needed
// to print the longest author name in the blame of a file.
func (b *blame) maxAuthorLength() int {
	memo := make(map[plumbing.Hash]struct{}, len(b.graph)-1)
	fVs := b.graph[len(b.graph)-1]
	m := 0
	for ln := range fVs {
		if _, ok := memo[fVs[ln].Hash]; ok {
			continue
		}
		memo[fVs[ln].Hash] = struct{}{}
		m = max(m, utf8.RuneCountInString(prettyPrintAuthor(fVs[ln])))
	}
	return m
}

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}
   070701000004F1000081A4000000000000000000000001645E367C000001C5000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/common.go  package git

import "strings"

// countLines returns the number of lines in a string à la git, this is
// The newline character is assumed to be '\n'.  The empty string
// contains 0 lines.  If the last line of the string doesn't end with a
// newline, it will still be considered a line.
func countLines(s string) int {
	if s == "" {
		return 0
	}

	nEOL := strings.Count(s, "\n")
	if strings.HasSuffix(s, "\n") {
		return nEOL
	}

	return nEOL + 1
}
   070701000004F2000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/config 070701000004F3000081A4000000000000000000000001645E367C000007A6000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/config/branch.go   package config

import (
	"errors"

	"github.com/go-git/go-git/v5/plumbing"
	format "github.com/go-git/go-git/v5/plumbing/format/config"
)

var (
	errBranchEmptyName     = errors.New("branch config: empty name")
	errBranchInvalidMerge  = errors.New("branch config: invalid merge")
	errBranchInvalidRebase = errors.New("branch config: rebase must be one of 'true' or 'interactive'")
)

// Branch contains information on the
// local branches and which remote to track
type Branch struct {
	// Name of branch
	Name string
	// Remote name of remote to track
	Remote string
	// Merge is the local refspec for the branch
	Merge plumbing.ReferenceName
	// Rebase instead of merge when pulling. Valid values are
	// "true" and "interactive".  "false" is undocumented and
	// typically represented by the non-existence of this field
	Rebase string

	raw *format.Subsection
}

// Validate validates fields of branch
func (b *Branch) Validate() error {
	if b.Name == "" {
		return errBranchEmptyName
	}

	if b.Merge != "" && !b.Merge.IsBranch() {
		return errBranchInvalidMerge
	}

	if b.Rebase != "" &&
		b.Rebase != "true" &&
		b.Rebase != "interactive" &&
		b.Rebase != "false" {
		return errBranchInvalidRebase
	}

	return nil
}

func (b *Branch) marshal() *format.Subsection {
	if b.raw == nil {
		b.raw = &format.Subsection{}
	}

	b.raw.Name = b.Name

	if b.Remote == "" {
		b.raw.RemoveOption(remoteSection)
	} else {
		b.raw.SetOption(remoteSection, b.Remote)
	}

	if b.Merge == "" {
		b.raw.RemoveOption(mergeKey)
	} else {
		b.raw.SetOption(mergeKey, string(b.Merge))
	}

	if b.Rebase == "" {
		b.raw.RemoveOption(rebaseKey)
	} else {
		b.raw.SetOption(rebaseKey, b.Rebase)
	}

	return b.raw
}

func (b *Branch) unmarshal(s *format.Subsection) error {
	b.raw = s

	b.Name = b.raw.Name
	b.Remote = b.raw.Options.Get(remoteSection)
	b.Merge = plumbing.ReferenceName(b.raw.Options.Get(mergeKey))
	b.Rebase = b.raw.Options.Get(rebaseKey)

	return b.Validate()
}
  070701000004F4000081A4000000000000000000000001645E367C00003BAB000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/config/config.go   // Package config contains the abstraction of multiple config files
package config

import (
	"bytes"
	"errors"
	"fmt"
	"io"
	"io/ioutil"
	"os"
	"path/filepath"
	"sort"
	"strconv"

	"github.com/go-git/go-billy/v5/osfs"
	"github.com/go-git/go-git/v5/internal/url"
	format "github.com/go-git/go-git/v5/plumbing/format/config"
	"github.com/mitchellh/go-homedir"
)

const (
	// DefaultFetchRefSpec is the default refspec used for fetch.
	DefaultFetchRefSpec = "+refs/heads/*:refs/remotes/%s/*"
	// DefaultPushRefSpec is the default refspec used for push.
	DefaultPushRefSpec = "refs/heads/*:refs/heads/*"
)

// ConfigStorer generic storage of Config object
type ConfigStorer interface {
	Config() (*Config, error)
	SetConfig(*Config) error
}

var (
	ErrInvalid               = errors.New("config invalid key in remote or branch")
	ErrRemoteConfigNotFound  = errors.New("remote config not found")
	ErrRemoteConfigEmptyURL  = errors.New("remote config: empty URL")
	ErrRemoteConfigEmptyName = errors.New("remote config: empty name")
)

// Scope defines the scope of a config file, such as local, global or system.
type Scope int

// Available ConfigScope's
const (
	LocalScope Scope = iota
	GlobalScope
	SystemScope
)

// Config contains the repository configuration
// https://www.kernel.org/pub/software/scm/git/docs/git-config.html#FILES
type Config struct {
	Core struct {
		// IsBare if true this repository is assumed to be bare and has no
		// working directory associated with it.
		IsBare bool
		// Worktree is the path to the root of the working tree.
		Worktree string
		// CommentChar is the character indicating the start of a
		// comment for commands like commit and tag
		CommentChar string
	}

	User struct {
		// Name is the personal name of the author and the commiter of a commit.
		Name string
		// Email is the email of the author and the commiter of a commit.
		Email string
	}

	Author struct {
		// Name is the personal name of the author of a commit.
		Name string
		// Email is the email of the author of a commit.
		Email string
	}

	Committer struct {
		// Name is the personal name of the commiter of a commit.
		Name string
		// Email is the email of the  the commiter of a commit.
		Email string
	}

	Pack struct {
		// Window controls the size of the sliding window for delta
		// compression.  The default is 10.  A value of 0 turns off
		// delta compression entirely.
		Window uint
	}

	Init struct {
		// DefaultBranch Allows overriding the default branch name
		// e.g. when initializing a new repository or when cloning
		// an empty repository.
		DefaultBranch string
	}

	// Remotes list of repository remotes, the key of the map is the name
	// of the remote, should equal to RemoteConfig.Name.
	Remotes map[string]*RemoteConfig
	// Submodules list of repository submodules, the key of the map is the name
	// of the submodule, should equal to Submodule.Name.
	Submodules map[string]*Submodule
	// Branches list of branches, the key is the branch name and should
	// equal Branch.Name
	Branches map[string]*Branch
	// URLs list of url rewrite rules, if repo url starts with URL.InsteadOf value, it will be replaced with the
	// key instead.
	URLs map[string]*URL
	// Raw contains the raw information of a config file. The main goal is
	// preserve the parsed information from the original format, to avoid
	// dropping unsupported fields.
	Raw *format.Config
}

// NewConfig returns a new empty Config.
func NewConfig() *Config {
	config := &Config{
		Remotes:    make(map[string]*RemoteConfig),
		Submodules: make(map[string]*Submodule),
		Branches:   make(map[string]*Branch),
		URLs:       make(map[string]*URL),
		Raw:        format.New(),
	}

	config.Pack.Window = DefaultPackWindow

	return config
}

// ReadConfig reads a config file from a io.Reader.
func ReadConfig(r io.Reader) (*Config, error) {
	b, err := ioutil.ReadAll(r)
	if err != nil {
		return nil, err
	}

	cfg := NewConfig()
	if err = cfg.Unmarshal(b); err != nil {
		return nil, err
	}

	return cfg, nil
}

// LoadConfig loads a config file from a given scope. The returned Config,
// contains exclusively information fom the given scope. If couldn't find a
// config file to the given scope, a empty one is returned.
func LoadConfig(scope Scope) (*Config, error) {
	if scope == LocalScope {
		return nil, fmt.Errorf("LocalScope should be read from the a ConfigStorer.")
	}

	files, err := Paths(scope)
	if err != nil {
		return nil, err
	}

	for _, file := range files {
		f, err := osfs.Default.Open(file)
		if err != nil {
			if os.IsNotExist(err) {
				continue
			}

			return nil, err
		}

		defer f.Close()
		return ReadConfig(f)
	}

	return NewConfig(), nil
}

// Paths returns the config file location for a given scope.
func Paths(scope Scope) ([]string, error) {
	var files []string
	switch scope {
	case GlobalScope:
		xdg := os.Getenv("XDG_CONFIG_HOME")
		if xdg != "" {
			files = append(files, filepath.Join(xdg, "git/config"))
		}

		home, err := homedir.Dir()
		if err != nil {
			return nil, err
		}

		files = append(files,
			filepath.Join(home, ".gitconfig"),
			filepath.Join(home, ".config/git/config"),
		)
	case SystemScope:
		files = append(files, "/etc/gitconfig")
	}

	return files, nil
}

// Validate validates the fields and sets the default values.
func (c *Config) Validate() error {
	for name, r := range c.Remotes {
		if r.Name != name {
			return ErrInvalid
		}

		if err := r.Validate(); err != nil {
			return err
		}
	}

	for name, b := range c.Branches {
		if b.Name != name {
			return ErrInvalid
		}

		if err := b.Validate(); err != nil {
			return err
		}
	}

	return nil
}

const (
	remoteSection    = "remote"
	submoduleSection = "submodule"
	branchSection    = "branch"
	coreSection      = "core"
	packSection      = "pack"
	userSection      = "user"
	authorSection    = "author"
	committerSection = "committer"
	initSection      = "init"
	urlSection       = "url"
	fetchKey         = "fetch"
	urlKey           = "url"
	bareKey          = "bare"
	worktreeKey      = "worktree"
	commentCharKey   = "commentChar"
	windowKey        = "window"
	mergeKey         = "merge"
	rebaseKey        = "rebase"
	nameKey          = "name"
	emailKey         = "email"
	defaultBranchKey = "defaultBranch"

	// DefaultPackWindow holds the number of previous objects used to
	// generate deltas. The value 10 is the same used by git command.
	DefaultPackWindow = uint(10)
)

// Unmarshal parses a git-config file and stores it.
func (c *Config) Unmarshal(b []byte) error {
	r := bytes.NewBuffer(b)
	d := format.NewDecoder(r)

	c.Raw = format.New()
	if err := d.Decode(c.Raw); err != nil {
		return err
	}

	c.unmarshalCore()
	c.unmarshalUser()
	c.unmarshalInit()
	if err := c.unmarshalPack(); err != nil {
		return err
	}
	unmarshalSubmodules(c.Raw, c.Submodules)

	if err := c.unmarshalBranches(); err != nil {
		return err
	}

	if err := c.unmarshalURLs(); err != nil {
		return err
	}

	return c.unmarshalRemotes()
}

func (c *Config) unmarshalCore() {
	s := c.Raw.Section(coreSection)
	if s.Options.Get(bareKey) == "true" {
		c.Core.IsBare = true
	}

	c.Core.Worktree = s.Options.Get(worktreeKey)
	c.Core.CommentChar = s.Options.Get(commentCharKey)
}

func (c *Config) unmarshalUser() {
	s := c.Raw.Section(userSection)
	c.User.Name = s.Options.Get(nameKey)
	c.User.Email = s.Options.Get(emailKey)

	s = c.Raw.Section(authorSection)
	c.Author.Name = s.Options.Get(nameKey)
	c.Author.Email = s.Options.Get(emailKey)

	s = c.Raw.Section(committerSection)
	c.Committer.Name = s.Options.Get(nameKey)
	c.Committer.Email = s.Options.Get(emailKey)
}

func (c *Config) unmarshalPack() error {
	s := c.Raw.Section(packSection)
	window := s.Options.Get(windowKey)
	if window == "" {
		c.Pack.Window = DefaultPackWindow
	} else {
		winUint, err := strconv.ParseUint(window, 10, 32)
		if err != nil {
			return err
		}
		c.Pack.Window = uint(winUint)
	}
	return nil
}

func (c *Config) unmarshalRemotes() error {
	s := c.Raw.Section(remoteSection)
	for _, sub := range s.Subsections {
		r := &RemoteConfig{}
		if err := r.unmarshal(sub); err != nil {
			return err
		}

		c.Remotes[r.Name] = r
	}

	// Apply insteadOf url rules
	for _, r := range c.Remotes {
		r.applyURLRules(c.URLs)
	}

	return nil
}

func (c *Config) unmarshalURLs() error {
	s := c.Raw.Section(urlSection)
	for _, sub := range s.Subsections {
		r := &URL{}
		if err := r.unmarshal(sub); err != nil {
			return err
		}

		c.URLs[r.Name] = r
	}

	return nil
}

func unmarshalSubmodules(fc *format.Config, submodules map[string]*Submodule) {
	s := fc.Section(submoduleSection)
	for _, sub := range s.Subsections {
		m := &Submodule{}
		m.unmarshal(sub)

		if m.Validate() == ErrModuleBadPath {
			continue
		}

		submodules[m.Name] = m
	}
}

func (c *Config) unmarshalBranches() error {
	bs := c.Raw.Section(branchSection)
	for _, sub := range bs.Subsections {
		b := &Branch{}

		if err := b.unmarshal(sub); err != nil {
			return err
		}

		c.Branches[b.Name] = b
	}
	return nil
}

func (c *Config) unmarshalInit() {
	s := c.Raw.Section(initSection)
	c.Init.DefaultBranch = s.Options.Get(defaultBranchKey)
}

// Marshal returns Config encoded as a git-config file.
func (c *Config) Marshal() ([]byte, error) {
	c.marshalCore()
	c.marshalUser()
	c.marshalPack()
	c.marshalRemotes()
	c.marshalSubmodules()
	c.marshalBranches()
	c.marshalURLs()
	c.marshalInit()

	buf := bytes.NewBuffer(nil)
	if err := format.NewEncoder(buf).Encode(c.Raw); err != nil {
		return nil, err
	}

	return buf.Bytes(), nil
}

func (c *Config) marshalCore() {
	s := c.Raw.Section(coreSection)
	s.SetOption(bareKey, fmt.Sprintf("%t", c.Core.IsBare))

	if c.Core.Worktree != "" {
		s.SetOption(worktreeKey, c.Core.Worktree)
	}
}

func (c *Config) marshalUser() {
	s := c.Raw.Section(userSection)
	if c.User.Name != "" {
		s.SetOption(nameKey, c.User.Name)
	}

	if c.User.Email != "" {
		s.SetOption(emailKey, c.User.Email)
	}

	s = c.Raw.Section(authorSection)
	if c.Author.Name != "" {
		s.SetOption(nameKey, c.Author.Name)
	}

	if c.Author.Email != "" {
		s.SetOption(emailKey, c.Author.Email)
	}

	s = c.Raw.Section(committerSection)
	if c.Committer.Name != "" {
		s.SetOption(nameKey, c.Committer.Name)
	}

	if c.Committer.Email != "" {
		s.SetOption(emailKey, c.Committer.Email)
	}
}

func (c *Config) marshalPack() {
	s := c.Raw.Section(packSection)
	if c.Pack.Window != DefaultPackWindow {
		s.SetOption(windowKey, fmt.Sprintf("%d", c.Pack.Window))
	}
}

func (c *Config) marshalRemotes() {
	s := c.Raw.Section(remoteSection)
	newSubsections := make(format.Subsections, 0, len(c.Remotes))
	added := make(map[string]bool)
	for _, subsection := range s.Subsections {
		if remote, ok := c.Remotes[subsection.Name]; ok {
			newSubsections = append(newSubsections, remote.marshal())
			added[subsection.Name] = true
		}
	}

	remoteNames := make([]string, 0, len(c.Remotes))
	for name := range c.Remotes {
		remoteNames = append(remoteNames, name)
	}

	sort.Strings(remoteNames)

	for _, name := range remoteNames {
		if !added[name] {
			newSubsections = append(newSubsections, c.Remotes[name].marshal())
		}
	}

	s.Subsections = newSubsections
}

func (c *Config) marshalSubmodules() {
	s := c.Raw.Section(submoduleSection)
	s.Subsections = make(format.Subsections, len(c.Submodules))

	var i int
	for _, r := range c.Submodules {
		section := r.marshal()
		// the submodule section at config is a subset of the .gitmodule file
		// we should remove the non-valid options for the config file.
		section.RemoveOption(pathKey)
		s.Subsections[i] = section
		i++
	}
}

func (c *Config) marshalBranches() {
	s := c.Raw.Section(branchSection)
	newSubsections := make(format.Subsections, 0, len(c.Branches))
	added := make(map[string]bool)
	for _, subsection := range s.Subsections {
		if branch, ok := c.Branches[subsection.Name]; ok {
			newSubsections = append(newSubsections, branch.marshal())
			added[subsection.Name] = true
		}
	}

	branchNames := make([]string, 0, len(c.Branches))
	for name := range c.Branches {
		branchNames = append(branchNames, name)
	}

	sort.Strings(branchNames)

	for _, name := range branchNames {
		if !added[name] {
			newSubsections = append(newSubsections, c.Branches[name].marshal())
		}
	}

	s.Subsections = newSubsections
}

func (c *Config) marshalURLs() {
	s := c.Raw.Section(urlSection)
	s.Subsections = make(format.Subsections, len(c.URLs))

	var i int
	for _, r := range c.URLs {
		section := r.marshal()
		// the submodule section at config is a subset of the .gitmodule file
		// we should remove the non-valid options for the config file.
		s.Subsections[i] = section
		i++
	}
}

func (c *Config) marshalInit() {
	s := c.Raw.Section(initSection)
	if c.Init.DefaultBranch != "" {
		s.SetOption(defaultBranchKey, c.Init.DefaultBranch)
	}
}

// RemoteConfig contains the configuration for a given remote repository.
type RemoteConfig struct {
	// Name of the remote
	Name string
	// URLs the URLs of a remote repository. It must be non-empty. Fetch will
	// always use the first URL, while push will use all of them.
	URLs []string

	// insteadOfRulesApplied have urls been modified
	insteadOfRulesApplied bool
	// originalURLs are the urls before applying insteadOf rules
	originalURLs []string

	// Fetch the default set of "refspec" for fetch operation
	Fetch []RefSpec

	// raw representation of the subsection, filled by marshal or unmarshal are
	// called
	raw *format.Subsection
}

// Validate validates the fields and sets the default values.
func (c *RemoteConfig) Validate() error {
	if c.Name == "" {
		return ErrRemoteConfigEmptyName
	}

	if len(c.URLs) == 0 {
		return ErrRemoteConfigEmptyURL
	}

	for _, r := range c.Fetch {
		if err := r.Validate(); err != nil {
			return err
		}
	}

	if len(c.Fetch) == 0 {
		c.Fetch = []RefSpec{RefSpec(fmt.Sprintf(DefaultFetchRefSpec, c.Name))}
	}

	return nil
}

func (c *RemoteConfig) unmarshal(s *format.Subsection) error {
	c.raw = s

	fetch := []RefSpec{}
	for _, f := range c.raw.Options.GetAll(fetchKey) {
		rs := RefSpec(f)
		if err := rs.Validate(); err != nil {
			return err
		}

		fetch = append(fetch, rs)
	}

	c.Name = c.raw.Name
	c.URLs = append([]string(nil), c.raw.Options.GetAll(urlKey)...)
	c.Fetch = fetch

	return nil
}

func (c *RemoteConfig) marshal() *format.Subsection {
	if c.raw == nil {
		c.raw = &format.Subsection{}
	}

	c.raw.Name = c.Name
	if len(c.URLs) == 0 {
		c.raw.RemoveOption(urlKey)
	} else {
		urls := c.URLs
		if c.insteadOfRulesApplied {
			urls = c.originalURLs
		}

		c.raw.SetOption(urlKey, urls...)
	}

	if len(c.Fetch) == 0 {
		c.raw.RemoveOption(fetchKey)
	} else {
		var values []string
		for _, rs := range c.Fetch {
			values = append(values, rs.String())
		}

		c.raw.SetOption(fetchKey, values...)
	}

	return c.raw
}

func (c *RemoteConfig) IsFirstURLLocal() bool {
	return url.IsLocalEndpoint(c.URLs[0])
}

func (c *RemoteConfig) applyURLRules(urlRules map[string]*URL) {
	// save original urls
	originalURLs := make([]string, len(c.URLs))
	copy(originalURLs, c.URLs)

	for i, url := range c.URLs {
		if matchingURLRule := findLongestInsteadOfMatch(url, urlRules); matchingURLRule != nil {
			c.URLs[i] = matchingURLRule.ApplyInsteadOf(c.URLs[i])
			c.insteadOfRulesApplied = true
		}
	}

	if c.insteadOfRulesApplied {
		c.originalURLs = originalURLs
	}
}
 070701000004F5000081A4000000000000000000000001645E367C00000BB0000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/config/modules.go  package config

import (
	"bytes"
	"errors"
	"regexp"

	format "github.com/go-git/go-git/v5/plumbing/format/config"
)

var (
	ErrModuleEmptyURL  = errors.New("module config: empty URL")
	ErrModuleEmptyPath = errors.New("module config: empty path")
	ErrModuleBadPath   = errors.New("submodule has an invalid path")
)

var (
	// Matches module paths with dotdot ".." components.
	dotdotPath = regexp.MustCompile(`(^|[/\\])\.\.([/\\]|$)`)
)

// Modules defines the submodules properties, represents a .gitmodules file
// https://www.kernel.org/pub/software/scm/git/docs/gitmodules.html
type Modules struct {
	// Submodules is a map of submodules being the key the name of the submodule.
	Submodules map[string]*Submodule

	raw *format.Config
}

// NewModules returns a new empty Modules
func NewModules() *Modules {
	return &Modules{
		Submodules: make(map[string]*Submodule),
		raw:        format.New(),
	}
}

const (
	pathKey   = "path"
	branchKey = "branch"
)

// Unmarshal parses a git-config file and stores it.
func (m *Modules) Unmarshal(b []byte) error {
	r := bytes.NewBuffer(b)
	d := format.NewDecoder(r)

	m.raw = format.New()
	if err := d.Decode(m.raw); err != nil {
		return err
	}

	unmarshalSubmodules(m.raw, m.Submodules)
	return nil
}

// Marshal returns Modules encoded as a git-config file.
func (m *Modules) Marshal() ([]byte, error) {
	s := m.raw.Section(submoduleSection)
	s.Subsections = make(format.Subsections, len(m.Submodules))

	var i int
	for _, r := range m.Submodules {
		s.Subsections[i] = r.marshal()
		i++
	}

	buf := bytes.NewBuffer(nil)
	if err := format.NewEncoder(buf).Encode(m.raw); err != nil {
		return nil, err
	}

	return buf.Bytes(), nil
}

// Submodule defines a submodule.
type Submodule struct {
	// Name module name
	Name string
	// Path defines the path, relative to the top-level directory of the Git
	// working tree.
	Path string
	// URL defines a URL from which the submodule repository can be cloned.
	URL string
	// Branch is a remote branch name for tracking updates in the upstream
	// submodule. Optional value.
	Branch string

	// raw representation of the subsection, filled by marshal or unmarshal are
	// called.
	raw *format.Subsection
}

// Validate validates the fields and sets the default values.
func (m *Submodule) Validate() error {
	if m.Path == "" {
		return ErrModuleEmptyPath
	}

	if m.URL == "" {
		return ErrModuleEmptyURL
	}

	if dotdotPath.MatchString(m.Path) {
		return ErrModuleBadPath
	}

	return nil
}

func (m *Submodule) unmarshal(s *format.Subsection) {
	m.raw = s

	m.Name = m.raw.Name
	m.Path = m.raw.Option(pathKey)
	m.URL = m.raw.Option(urlKey)
	m.Branch = m.raw.Option(branchKey)
}

func (m *Submodule) marshal() *format.Subsection {
	if m.raw == nil {
		m.raw = &format.Subsection{}
	}

	m.raw.Name = m.Name
	if m.raw.Name == "" {
		m.raw.Name = m.Path
	}

	m.raw.SetOption(pathKey, m.Path)
	m.raw.SetOption(urlKey, m.URL)

	if m.Branch != "" {
		m.raw.SetOption(branchKey, m.Branch)
	}

	return m.raw
}
070701000004F6000081A4000000000000000000000001645E367C00000EE0000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/config/refspec.go  package config

import (
	"errors"
	"strings"

	"github.com/go-git/go-git/v5/plumbing"
)

const (
	refSpecWildcard  = "*"
	refSpecForce     = "+"
	refSpecSeparator = ":"
)

var (
	ErrRefSpecMalformedSeparator = errors.New("malformed refspec, separators are wrong")
	ErrRefSpecMalformedWildcard  = errors.New("malformed refspec, mismatched number of wildcards")
)

// RefSpec is a mapping from local branches to remote references.
// The format of the refspec is an optional +, followed by <src>:<dst>, where
// <src> is the pattern for references on the remote side and <dst> is where
// those references will be written locally. The + tells Git to update the
// reference even if it isn’t a fast-forward.
// eg.: "+refs/heads/*:refs/remotes/origin/*"
//
// https://git-scm.com/book/en/v2/Git-Internals-The-Refspec
type RefSpec string

// Validate validates the RefSpec
func (s RefSpec) Validate() error {
	spec := string(s)
	if strings.Count(spec, refSpecSeparator) != 1 {
		return ErrRefSpecMalformedSeparator
	}

	sep := strings.Index(spec, refSpecSeparator)
	if sep == len(spec)-1 {
		return ErrRefSpecMalformedSeparator
	}

	ws := strings.Count(spec[0:sep], refSpecWildcard)
	wd := strings.Count(spec[sep+1:], refSpecWildcard)
	if ws == wd && ws < 2 && wd < 2 {
		return nil
	}

	return ErrRefSpecMalformedWildcard
}

// IsForceUpdate returns if update is allowed in non fast-forward merges.
func (s RefSpec) IsForceUpdate() bool {
	return s[0] == refSpecForce[0]
}

// IsDelete returns true if the refspec indicates a delete (empty src).
func (s RefSpec) IsDelete() bool {
	return s[0] == refSpecSeparator[0]
}

// IsExactSHA1 returns true if the source is a SHA1 hash.
func (s RefSpec) IsExactSHA1() bool {
	return plumbing.IsHash(s.Src())
}

// Src return the src side.
func (s RefSpec) Src() string {
	spec := string(s)

	var start int
	if s.IsForceUpdate() {
		start = 1
	} else {
		start = 0
	}

	end := strings.Index(spec, refSpecSeparator)
	return spec[start:end]
}

// Match match the given plumbing.ReferenceName against the source.
func (s RefSpec) Match(n plumbing.ReferenceName) bool {
	if !s.IsWildcard() {
		return s.matchExact(n)
	}

	return s.matchGlob(n)
}

// IsWildcard returns true if the RefSpec contains a wildcard.
func (s RefSpec) IsWildcard() bool {
	return strings.Contains(string(s), refSpecWildcard)
}

func (s RefSpec) matchExact(n plumbing.ReferenceName) bool {
	return s.Src() == n.String()
}

func (s RefSpec) matchGlob(n plumbing.ReferenceName) bool {
	src := s.Src()
	name := n.String()
	wildcard := strings.Index(src, refSpecWildcard)

	var prefix, suffix string
	prefix = src[0:wildcard]
	if len(src) > wildcard+1 {
		suffix = src[wildcard+1:]
	}

	return len(name) >= len(prefix)+len(suffix) &&
		strings.HasPrefix(name, prefix) &&
		strings.HasSuffix(name, suffix)
}

// Dst returns the destination for the given remote reference.
func (s RefSpec) Dst(n plumbing.ReferenceName) plumbing.ReferenceName {
	spec := string(s)
	start := strings.Index(spec, refSpecSeparator) + 1
	dst := spec[start:]
	src := s.Src()

	if !s.IsWildcard() {
		return plumbing.ReferenceName(dst)
	}

	name := n.String()
	ws := strings.Index(src, refSpecWildcard)
	wd := strings.Index(dst, refSpecWildcard)
	match := name[ws : len(name)-(len(src)-(ws+1))]

	return plumbing.ReferenceName(dst[0:wd] + match + dst[wd+1:])
}

func (s RefSpec) Reverse() RefSpec {
	spec := string(s)
	separator := strings.Index(spec, refSpecSeparator)

	return RefSpec(spec[separator+1:] + refSpecSeparator + spec[:separator])
}

func (s RefSpec) String() string {
	return string(s)
}

// MatchAny returns true if any of the RefSpec match with the given ReferenceName.
func MatchAny(l []RefSpec, n plumbing.ReferenceName) bool {
	for _, r := range l {
		if r.Match(n) {
			return true
		}
	}

	return false
}
070701000004F7000081A4000000000000000000000001645E367C00000665000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/config/url.go  package config

import (
	"errors"
	"strings"

	format "github.com/go-git/go-git/v5/plumbing/format/config"
)

var (
	errURLEmptyInsteadOf = errors.New("url config: empty insteadOf")
)

// Url defines Url rewrite rules
type URL struct {
	// Name new base url
	Name string
	// Any URL that starts with this value will be rewritten to start, instead, with <base>.
	// When more than one insteadOf strings match a given URL, the longest match is used.
	InsteadOf string

	// raw representation of the subsection, filled by marshal or unmarshal are
	// called.
	raw *format.Subsection
}

// Validate validates fields of branch
func (b *URL) Validate() error {
	if b.InsteadOf == "" {
		return errURLEmptyInsteadOf
	}

	return nil
}

const (
	insteadOfKey = "insteadOf"
)

func (u *URL) unmarshal(s *format.Subsection) error {
	u.raw = s

	u.Name = s.Name
	u.InsteadOf = u.raw.Option(insteadOfKey)
	return nil
}

func (u *URL) marshal() *format.Subsection {
	if u.raw == nil {
		u.raw = &format.Subsection{}
	}

	u.raw.Name = u.Name
	u.raw.SetOption(insteadOfKey, u.InsteadOf)

	return u.raw
}

func findLongestInsteadOfMatch(remoteURL string, urls map[string]*URL) *URL {
	var longestMatch *URL
	for _, u := range urls {
		if !strings.HasPrefix(remoteURL, u.InsteadOf) {
			continue
		}

		// according to spec if there is more than one match, take the logest
		if longestMatch == nil || len(longestMatch.InsteadOf) < len(u.InsteadOf) {
			longestMatch = u
		}
	}

	return longestMatch
}

func (u *URL) ApplyInsteadOf(url string) string {
	if !strings.HasPrefix(url, u.InsteadOf) {
		return url
	}

	return u.Name + url[len(u.InsteadOf):]
}
   070701000004F8000081A4000000000000000000000001645E367C000001E0000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/doc.go // A highly extensible git implementation in pure Go.
//
// go-git aims to reach the completeness of libgit2 or jgit, nowadays covers the
// majority of the plumbing read operations and some of the main write
// operations, but lacks the main porcelain operations such as merges.
//
// It is highly extensible, we have been following the open/close principle in
// its design to facilitate extensions, mainly focusing the efforts on the
// persistence of the objects.
package git
070701000004F9000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/internal   070701000004FA000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/internal/revision  070701000004FB000081A4000000000000000000000001645E367C000032B2000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/internal/revision/parser.go    // Package revision extracts git revision from string
// More information about revision : https://www.kernel.org/pub/software/scm/git/docs/gitrevisions.html
package revision

import (
	"bytes"
	"fmt"
	"io"
	"regexp"
	"strconv"
	"time"
)

// ErrInvalidRevision is emitted if string doesn't match valid revision
type ErrInvalidRevision struct {
	s string
}

func (e *ErrInvalidRevision) Error() string {
	return "Revision invalid : " + e.s
}

// Revisioner represents a revision component.
// A revision is made of multiple revision components
// obtained after parsing a revision string,
// for instance revision "master~" will be converted in
// two revision components Ref and TildePath
type Revisioner interface {
}

// Ref represents a reference name : HEAD, master, <hash>
type Ref string

// TildePath represents ~, ~{n}
type TildePath struct {
	Depth int
}

// CaretPath represents ^, ^{n}
type CaretPath struct {
	Depth int
}

// CaretReg represents ^{/foo bar}
type CaretReg struct {
	Regexp *regexp.Regexp
	Negate bool
}

// CaretType represents ^{commit}
type CaretType struct {
	ObjectType string
}

// AtReflog represents @{n}
type AtReflog struct {
	Depth int
}

// AtCheckout represents @{-n}
type AtCheckout struct {
	Depth int
}

// AtUpstream represents @{upstream}, @{u}
type AtUpstream struct {
	BranchName string
}

// AtPush represents @{push}
type AtPush struct {
	BranchName string
}

// AtDate represents @{"2006-01-02T15:04:05Z"}
type AtDate struct {
	Date time.Time
}

// ColonReg represents :/foo bar
type ColonReg struct {
	Regexp *regexp.Regexp
	Negate bool
}

// ColonPath represents :./<path> :<path>
type ColonPath struct {
	Path string
}

// ColonStagePath represents :<n>:/<path>
type ColonStagePath struct {
	Path  string
	Stage int
}

// Parser represents a parser
// use to tokenize and transform to revisioner chunks
// a given string
type Parser struct {
	s                 *scanner
	currentParsedChar struct {
		tok token
		lit string
	}
	unreadLastChar bool
}

// NewParserFromString returns a new instance of parser from a string.
func NewParserFromString(s string) *Parser {
	return NewParser(bytes.NewBufferString(s))
}

// NewParser returns a new instance of parser.
func NewParser(r io.Reader) *Parser {
	return &Parser{s: newScanner(r)}
}

// scan returns the next token from the underlying scanner
// or the last scanned token if an unscan was requested
func (p *Parser) scan() (token, string, error) {
	if p.unreadLastChar {
		p.unreadLastChar = false
		return p.currentParsedChar.tok, p.currentParsedChar.lit, nil
	}

	tok, lit, err := p.s.scan()

	p.currentParsedChar.tok, p.currentParsedChar.lit = tok, lit

	return tok, lit, err
}

// unscan pushes the previously read token back onto the buffer.
func (p *Parser) unscan() { p.unreadLastChar = true }

// Parse explode a revision string into revisioner chunks
func (p *Parser) Parse() ([]Revisioner, error) {
	var rev Revisioner
	var revs []Revisioner
	var tok token
	var err error

	for {
		tok, _, err = p.scan()

		if err != nil {
			return nil, err
		}

		switch tok {
		case at:
			rev, err = p.parseAt()
		case tilde:
			rev, err = p.parseTilde()
		case caret:
			rev, err = p.parseCaret()
		case colon:
			rev, err = p.parseColon()
		case eof:
			err = p.validateFullRevision(&revs)

			if err != nil {
				return []Revisioner{}, err
			}

			return revs, nil
		default:
			p.unscan()
			rev, err = p.parseRef()
		}

		if err != nil {
			return []Revisioner{}, err
		}

		revs = append(revs, rev)
	}
}

// validateFullRevision ensures all revisioner chunks make a valid revision
func (p *Parser) validateFullRevision(chunks *[]Revisioner) error {
	var hasReference bool

	for i, chunk := range *chunks {
		switch chunk.(type) {
		case Ref:
			if i == 0 {
				hasReference = true
			} else {
				return &ErrInvalidRevision{`reference must be defined once at the beginning`}
			}
		case AtDate:
			if len(*chunks) == 1 || hasReference && len(*chunks) == 2 {
				return nil
			}

			return &ErrInvalidRevision{`"@" statement is not valid, could be : <refname>@{<ISO-8601 date>}, @{<ISO-8601 date>}`}
		case AtReflog:
			if len(*chunks) == 1 || hasReference && len(*chunks) == 2 {
				return nil
			}

			return &ErrInvalidRevision{`"@" statement is not valid, could be : <refname>@{<n>}, @{<n>}`}
		case AtCheckout:
			if len(*chunks) == 1 {
				return nil
			}

			return &ErrInvalidRevision{`"@" statement is not valid, could be : @{-<n>}`}
		case AtUpstream:
			if len(*chunks) == 1 || hasReference && len(*chunks) == 2 {
				return nil
			}

			return &ErrInvalidRevision{`"@" statement is not valid, could be : <refname>@{upstream}, @{upstream}, <refname>@{u}, @{u}`}
		case AtPush:
			if len(*chunks) == 1 || hasReference && len(*chunks) == 2 {
				return nil
			}

			return &ErrInvalidRevision{`"@" statement is not valid, could be : <refname>@{push}, @{push}`}
		case TildePath, CaretPath, CaretReg:
			if !hasReference {
				return &ErrInvalidRevision{`"~" or "^" statement must have a reference defined at the beginning`}
			}
		case ColonReg:
			if len(*chunks) == 1 {
				return nil
			}

			return &ErrInvalidRevision{`":" statement is not valid, could be : :/<regexp>`}
		case ColonPath:
			if i == len(*chunks)-1 && hasReference || len(*chunks) == 1 {
				return nil
			}

			return &ErrInvalidRevision{`":" statement is not valid, could be : <revision>:<path>`}
		case ColonStagePath:
			if len(*chunks) == 1 {
				return nil
			}

			return &ErrInvalidRevision{`":" statement is not valid, could be : :<n>:<path>`}
		}
	}

	return nil
}

// parseAt extract @ statements
func (p *Parser) parseAt() (Revisioner, error) {
	var tok, nextTok token
	var lit, nextLit string
	var err error

	tok, _, err = p.scan()

	if err != nil {
		return nil, err
	}

	if tok != obrace {
		p.unscan()

		return Ref("HEAD"), nil
	}

	tok, lit, err = p.scan()

	if err != nil {
		return nil, err
	}

	nextTok, nextLit, err = p.scan()

	if err != nil {
		return nil, err
	}

	switch {
	case tok == word && (lit == "u" || lit == "upstream") && nextTok == cbrace:
		return AtUpstream{}, nil
	case tok == word && lit == "push" && nextTok == cbrace:
		return AtPush{}, nil
	case tok == number && nextTok == cbrace:
		n, _ := strconv.Atoi(lit)

		return AtReflog{n}, nil
	case tok == minus && nextTok == number:
		n, _ := strconv.Atoi(nextLit)

		t, _, err := p.scan()

		if err != nil {
			return nil, err
		}

		if t != cbrace {
			return nil, &ErrInvalidRevision{s: `missing "}" in @{-n} structure`}
		}

		return AtCheckout{n}, nil
	default:
		p.unscan()

		date := lit

		for {
			tok, lit, err = p.scan()

			if err != nil {
				return nil, err
			}

			switch {
			case tok == cbrace:
				t, err := time.Parse("2006-01-02T15:04:05Z", date)

				if err != nil {
					return nil, &ErrInvalidRevision{fmt.Sprintf(`wrong date "%s" must fit ISO-8601 format : 2006-01-02T15:04:05Z`, date)}
				}

				return AtDate{t}, nil
			default:
				date += lit
			}
		}
	}
}

// parseTilde extract ~ statements
func (p *Parser) parseTilde() (Revisioner, error) {
	var tok token
	var lit string
	var err error

	tok, lit, err = p.scan()

	if err != nil {
		return nil, err
	}

	switch {
	case tok == number:
		n, _ := strconv.Atoi(lit)

		return TildePath{n}, nil
	default:
		p.unscan()
		return TildePath{1}, nil
	}
}

// parseCaret extract ^ statements
func (p *Parser) parseCaret() (Revisioner, error) {
	var tok token
	var lit string
	var err error

	tok, lit, err = p.scan()

	if err != nil {
		return nil, err
	}

	switch {
	case tok == obrace:
		r, err := p.parseCaretBraces()

		if err != nil {
			return nil, err
		}

		return r, nil
	case tok == number:
		n, _ := strconv.Atoi(lit)

		if n > 2 {
			return nil, &ErrInvalidRevision{fmt.Sprintf(`"%s" found must be 0, 1 or 2 after "^"`, lit)}
		}

		return CaretPath{n}, nil
	default:
		p.unscan()
		return CaretPath{1}, nil
	}
}

// parseCaretBraces extract ^{<data>} statements
func (p *Parser) parseCaretBraces() (Revisioner, error) {
	var tok, nextTok token
	var lit, _ string
	start := true
	var re string
	var negate bool
	var err error

	for {
		tok, lit, err = p.scan()

		if err != nil {
			return nil, err
		}

		nextTok, _, err = p.scan()

		if err != nil {
			return nil, err
		}

		switch {
		case tok == word && nextTok == cbrace && (lit == "commit" || lit == "tree" || lit == "blob" || lit == "tag" || lit == "object"):
			return CaretType{lit}, nil
		case re == "" && tok == cbrace:
			return CaretType{"tag"}, nil
		case re == "" && tok == emark && nextTok == emark:
			re += lit
		case re == "" && tok == emark && nextTok == minus:
			negate = true
		case re == "" && tok == emark:
			return nil, &ErrInvalidRevision{s: `revision suffix brace component sequences starting with "/!" others than those defined are reserved`}
		case re == "" && tok == slash:
			p.unscan()
		case tok != slash && start:
			return nil, &ErrInvalidRevision{fmt.Sprintf(`"%s" is not a valid revision suffix brace component`, lit)}
		case tok != cbrace:
			p.unscan()
			re += lit
		case tok == cbrace:
			p.unscan()

			reg, err := regexp.Compile(re)

			if err != nil {
				return CaretReg{}, &ErrInvalidRevision{fmt.Sprintf(`revision suffix brace component, %s`, err.Error())}
			}

			return CaretReg{reg, negate}, nil
		}

		start = false
	}
}

// parseColon extract : statements
func (p *Parser) parseColon() (Revisioner, error) {
	var tok token
	var err error

	tok, _, err = p.scan()

	if err != nil {
		return nil, err
	}

	switch tok {
	case slash:
		return p.parseColonSlash()
	default:
		p.unscan()
		return p.parseColonDefault()
	}
}

// parseColonSlash extract :/<data> statements
func (p *Parser) parseColonSlash() (Revisioner, error) {
	var tok, nextTok token
	var lit string
	var re string
	var negate bool
	var err error

	for {
		tok, lit, err = p.scan()

		if err != nil {
			return nil, err
		}

		nextTok, _, err = p.scan()

		if err != nil {
			return nil, err
		}

		switch {
		case tok == emark && nextTok == emark:
			re += lit
		case re == "" && tok == emark && nextTok == minus:
			negate = true
		case re == "" && tok == emark:
			return nil, &ErrInvalidRevision{s: `revision suffix brace component sequences starting with "/!" others than those defined are reserved`}
		case tok == eof:
			p.unscan()
			reg, err := regexp.Compile(re)

			if err != nil {
				return ColonReg{}, &ErrInvalidRevision{fmt.Sprintf(`revision suffix brace component, %s`, err.Error())}
			}

			return ColonReg{reg, negate}, nil
		default:
			p.unscan()
			re += lit
		}
	}
}

// parseColonDefault extract :<data> statements
func (p *Parser) parseColonDefault() (Revisioner, error) {
	var tok token
	var lit string
	var path string
	var stage int
	var err error
	var n = -1

	tok, lit, err = p.scan()

	if err != nil {
		return nil, err
	}

	nextTok, _, err := p.scan()

	if err != nil {
		return nil, err
	}

	if tok == number && nextTok == colon {
		n, _ = strconv.Atoi(lit)
	}

	switch n {
	case 0, 1, 2, 3:
		stage = n
	default:
		path += lit
		p.unscan()
	}

	for {
		tok, lit, err = p.scan()

		if err != nil {
			return nil, err
		}

		switch {
		case tok == eof && n == -1:
			return ColonPath{path}, nil
		case tok == eof:
			return ColonStagePath{path, stage}, nil
		default:
			path += lit
		}
	}
}

// parseRef extract reference name
func (p *Parser) parseRef() (Revisioner, error) {
	var tok, prevTok token
	var lit, buf string
	var endOfRef bool
	var err error

	for {
		tok, lit, err = p.scan()

		if err != nil {
			return nil, err
		}

		switch tok {
		case eof, at, colon, tilde, caret:
			endOfRef = true
		}

		err := p.checkRefFormat(tok, lit, prevTok, buf, endOfRef)

		if err != nil {
			return "", err
		}

		if endOfRef {
			p.unscan()
			return Ref(buf), nil
		}

		buf += lit
		prevTok = tok
	}
}

// checkRefFormat ensure reference name follow rules defined here :
// https://git-scm.com/docs/git-check-ref-format
func (p *Parser) checkRefFormat(token token, literal string, previousToken token, buffer string, endOfRef bool) error {
	switch token {
	case aslash, space, control, qmark, asterisk, obracket:
		return &ErrInvalidRevision{fmt.Sprintf(`must not contains "%s"`, literal)}
	}

	switch {
	case (token == dot || token == slash) && buffer == "":
		return &ErrInvalidRevision{fmt.Sprintf(`must not start with "%s"`, literal)}
	case previousToken == slash && endOfRef:
		return &ErrInvalidRevision{`must not end with "/"`}
	case previousToken == dot && endOfRef:
		return &ErrInvalidRevision{`must not end with "."`}
	case token == dot && previousToken == slash:
		return &ErrInvalidRevision{`must not contains "/."`}
	case previousToken == dot && token == dot:
		return &ErrInvalidRevision{`must not contains ".."`}
	case previousToken == slash && token == slash:
		return &ErrInvalidRevision{`must not contains consecutively "/"`}
	case (token == slash || endOfRef) && len(buffer) > 4 && buffer[len(buffer)-5:] == ".lock":
		return &ErrInvalidRevision{"cannot end with .lock"}
	}

	return nil
}
  070701000004FC000081A4000000000000000000000001645E367C00000913000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/internal/revision/scanner.go   package revision

import (
	"bufio"
	"io"
	"unicode"
)

// runeCategoryValidator takes a rune as input and
// validates it belongs to a rune category
type runeCategoryValidator func(r rune) bool

// tokenizeExpression aggregates a series of runes matching check predicate into a single
// string and provides given tokenType as token type
func tokenizeExpression(ch rune, tokenType token, check runeCategoryValidator, r *bufio.Reader) (token, string, error) {
	var data []rune
	data = append(data, ch)

	for {
		c, _, err := r.ReadRune()

		if c == zeroRune {
			break
		}

		if err != nil {
			return tokenError, "", err
		}

		if check(c) {
			data = append(data, c)
		} else {
			err := r.UnreadRune()

			if err != nil {
				return tokenError, "", err
			}

			return tokenType, string(data), nil
		}
	}

	return tokenType, string(data), nil
}

var zeroRune = rune(0)

// scanner represents a lexical scanner.
type scanner struct {
	r *bufio.Reader
}

// newScanner returns a new instance of scanner.
func newScanner(r io.Reader) *scanner {
	return &scanner{r: bufio.NewReader(r)}
}

// Scan extracts tokens and their strings counterpart
// from the reader
func (s *scanner) scan() (token, string, error) {
	ch, _, err := s.r.ReadRune()

	if err != nil && err != io.EOF {
		return tokenError, "", err
	}

	switch ch {
	case zeroRune:
		return eof, "", nil
	case ':':
		return colon, string(ch), nil
	case '~':
		return tilde, string(ch), nil
	case '^':
		return caret, string(ch), nil
	case '.':
		return dot, string(ch), nil
	case '/':
		return slash, string(ch), nil
	case '{':
		return obrace, string(ch), nil
	case '}':
		return cbrace, string(ch), nil
	case '-':
		return minus, string(ch), nil
	case '@':
		return at, string(ch), nil
	case '\\':
		return aslash, string(ch), nil
	case '?':
		return qmark, string(ch), nil
	case '*':
		return asterisk, string(ch), nil
	case '[':
		return obracket, string(ch), nil
	case '!':
		return emark, string(ch), nil
	}

	if unicode.IsSpace(ch) {
		return space, string(ch), nil
	}

	if unicode.IsControl(ch) {
		return control, string(ch), nil
	}

	if unicode.IsLetter(ch) {
		return tokenizeExpression(ch, word, unicode.IsLetter, s.r)
	}

	if unicode.IsNumber(ch) {
		return tokenizeExpression(ch, number, unicode.IsNumber, s.r)
	}

	return tokenError, string(ch), nil
}
 070701000004FD000081A4000000000000000000000001645E367C0000010A000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/internal/revision/token.go package revision

// token represents a entity extracted from string parsing
type token int

const (
	eof token = iota

	aslash
	asterisk
	at
	caret
	cbrace
	colon
	control
	dot
	emark
	minus
	number
	obrace
	obracket
	qmark
	slash
	space
	tilde
	tokenError
	word
)
  070701000004FE000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/internal/url   070701000004FF000081A4000000000000000000000001645E367C00000487000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/internal/url/url.go    package url

import (
	"regexp"
)

var (
	isSchemeRegExp   = regexp.MustCompile(`^[^:]+://`)
	scpLikeUrlRegExp = regexp.MustCompile(`^(?:(?P<user>[^@]+)@)?(?P<host>[^:\s]+):(?:(?P<port>[0-9]{1,5})(?:\/|:))?(?P<path>[^\\].*\/[^\\].*)$`)
)

// MatchesScheme returns true if the given string matches a URL-like
// format scheme.
func MatchesScheme(url string) bool {
	return isSchemeRegExp.MatchString(url)
}

// MatchesScpLike returns true if the given string matches an SCP-like
// format scheme.
func MatchesScpLike(url string) bool {
	return scpLikeUrlRegExp.MatchString(url)
}

// FindScpLikeComponents returns the user, host, port and path of the
// given SCP-like URL.
func FindScpLikeComponents(url string) (user, host, port, path string) {
	m := scpLikeUrlRegExp.FindStringSubmatch(url)
	return m[1], m[2], m[3], m[4]
}

// IsLocalEndpoint returns true if the given URL string specifies a
// local file endpoint.  For example, on a Linux machine,
// `/home/user/src/go-git` would match as a local endpoint, but
// `https://github.com/src-d/go-git` would not.
func IsLocalEndpoint(url string) bool {
	return !MatchesScheme(url) && !MatchesScpLike(url)
}
 07070100000500000081A4000000000000000000000001645E367C00000B19000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/object_walker.go   package git

import (
	"fmt"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/filemode"
	"github.com/go-git/go-git/v5/plumbing/object"
	"github.com/go-git/go-git/v5/storage"
)

type objectWalker struct {
	Storer storage.Storer
	// seen is the set of objects seen in the repo.
	// seen map can become huge if walking over large
	// repos. Thus using struct{} as the value type.
	seen map[plumbing.Hash]struct{}
}

func newObjectWalker(s storage.Storer) *objectWalker {
	return &objectWalker{s, map[plumbing.Hash]struct{}{}}
}

// walkAllRefs walks all (hash) references from the repo.
func (p *objectWalker) walkAllRefs() error {
	// Walk over all the references in the repo.
	it, err := p.Storer.IterReferences()
	if err != nil {
		return err
	}
	defer it.Close()
	err = it.ForEach(func(ref *plumbing.Reference) error {
		// Exit this iteration early for non-hash references.
		if ref.Type() != plumbing.HashReference {
			return nil
		}
		return p.walkObjectTree(ref.Hash())
	})
	return err
}

func (p *objectWalker) isSeen(hash plumbing.Hash) bool {
	_, seen := p.seen[hash]
	return seen
}

func (p *objectWalker) add(hash plumbing.Hash) {
	p.seen[hash] = struct{}{}
}

// walkObjectTree walks over all objects and remembers references
// to them in the objectWalker. This is used instead of the revlist
// walks because memory usage is tight with huge repos.
func (p *objectWalker) walkObjectTree(hash plumbing.Hash) error {
	// Check if we have already seen, and mark this object
	if p.isSeen(hash) {
		return nil
	}
	p.add(hash)
	// Fetch the object.
	obj, err := object.GetObject(p.Storer, hash)
	if err != nil {
		return fmt.Errorf("Getting object %s failed: %v", hash, err)
	}
	// Walk all children depending on object type.
	switch obj := obj.(type) {
	case *object.Commit:
		err = p.walkObjectTree(obj.TreeHash)
		if err != nil {
			return err
		}
		for _, h := range obj.ParentHashes {
			err = p.walkObjectTree(h)
			if err != nil {
				return err
			}
		}
	case *object.Tree:
		for i := range obj.Entries {
			// Shortcut for blob objects:
			// 'or' the lower bits of a mode and check that it
			// it matches a filemode.Executable. The type information
			// is in the higher bits, but this is the cleanest way
			// to handle plain files with different modes.
			// Other non-tree objects are somewhat rare, so they
			// are not special-cased.
			if obj.Entries[i].Mode|0755 == filemode.Executable {
				p.add(obj.Entries[i].Hash)
				continue
			}
			// Normal walk for sub-trees (and symlinks etc).
			err = p.walkObjectTree(obj.Entries[i].Hash)
			if err != nil {
				return err
			}
		}
	case *object.Tag:
		return p.walkObjectTree(obj.Target)
	default:
		// Error out on unhandled object types.
		return fmt.Errorf("Unknown object %X %s %T\n", obj.ID(), obj.Type(), obj)
	}
	return nil
}
   07070100000501000081A4000000000000000000000001645E367C00004E85000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/options.go package git

import (
	"errors"
	"fmt"
	"regexp"
	"strings"
	"time"

	"github.com/ProtonMail/go-crypto/openpgp"
	"github.com/go-git/go-git/v5/config"
	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/object"
	"github.com/go-git/go-git/v5/plumbing/protocol/packp/sideband"
	"github.com/go-git/go-git/v5/plumbing/transport"
)

// SubmoduleRescursivity defines how depth will affect any submodule recursive
// operation.
type SubmoduleRescursivity uint

const (
	// DefaultRemoteName name of the default Remote, just like git command.
	DefaultRemoteName = "origin"

	// NoRecurseSubmodules disables the recursion for a submodule operation.
	NoRecurseSubmodules SubmoduleRescursivity = 0
	// DefaultSubmoduleRecursionDepth allow recursion in a submodule operation.
	DefaultSubmoduleRecursionDepth SubmoduleRescursivity = 10
)

var (
	ErrMissingURL = errors.New("URL field is required")
)

// CloneOptions describes how a clone should be performed.
type CloneOptions struct {
	// The (possibly remote) repository URL to clone from.
	URL string
	// Auth credentials, if required, to use with the remote repository.
	Auth transport.AuthMethod
	// Name of the remote to be added, by default `origin`.
	RemoteName string
	// Remote branch to clone.
	ReferenceName plumbing.ReferenceName
	// Fetch only ReferenceName if true.
	SingleBranch bool
	// No checkout of HEAD after clone if true.
	NoCheckout bool
	// Limit fetching to the specified number of commits.
	Depth int
	// RecurseSubmodules after the clone is created, initialize all submodules
	// within, using their default settings. This option is ignored if the
	// cloned repository does not have a worktree.
	RecurseSubmodules SubmoduleRescursivity
	// Progress is where the human readable information sent by the server is
	// stored, if nil nothing is stored and the capability (if supported)
	// no-progress, is sent to the server to avoid send this information.
	Progress sideband.Progress
	// Tags describe how the tags will be fetched from the remote repository,
	// by default is AllTags.
	Tags TagMode
	// InsecureSkipTLS skips ssl verify if protocol is https
	InsecureSkipTLS bool
	// CABundle specify additional ca bundle with system cert pool
	CABundle []byte
}

// Validate validates the fields and sets the default values.
func (o *CloneOptions) Validate() error {
	if o.URL == "" {
		return ErrMissingURL
	}

	if o.RemoteName == "" {
		o.RemoteName = DefaultRemoteName
	}

	if o.ReferenceName == "" {
		o.ReferenceName = plumbing.HEAD
	}

	if o.Tags == InvalidTagMode {
		o.Tags = AllTags
	}

	return nil
}

// PullOptions describes how a pull should be performed.
type PullOptions struct {
	// Name of the remote to be pulled. If empty, uses the default.
	RemoteName string
	// Remote branch to clone. If empty, uses HEAD.
	ReferenceName plumbing.ReferenceName
	// Fetch only ReferenceName if true.
	SingleBranch bool
	// Limit fetching to the specified number of commits.
	Depth int
	// Auth credentials, if required, to use with the remote repository.
	Auth transport.AuthMethod
	// RecurseSubmodules controls if new commits of all populated submodules
	// should be fetched too.
	RecurseSubmodules SubmoduleRescursivity
	// Progress is where the human readable information sent by the server is
	// stored, if nil nothing is stored and the capability (if supported)
	// no-progress, is sent to the server to avoid send this information.
	Progress sideband.Progress
	// Force allows the pull to update a local branch even when the remote
	// branch does not descend from it.
	Force bool
	// InsecureSkipTLS skips ssl verify if protocol is https
	InsecureSkipTLS bool
	// CABundle specify additional ca bundle with system cert pool
	CABundle []byte
}

// Validate validates the fields and sets the default values.
func (o *PullOptions) Validate() error {
	if o.RemoteName == "" {
		o.RemoteName = DefaultRemoteName
	}

	if o.ReferenceName == "" {
		o.ReferenceName = plumbing.HEAD
	}

	return nil
}

type TagMode int

const (
	InvalidTagMode TagMode = iota
	// TagFollowing any tag that points into the histories being fetched is also
	// fetched. TagFollowing requires a server with `include-tag` capability
	// in order to fetch the annotated tags objects.
	TagFollowing
	// AllTags fetch all tags from the remote (i.e., fetch remote tags
	// refs/tags/* into local tags with the same name)
	AllTags
	//NoTags fetch no tags from the remote at all
	NoTags
)

// FetchOptions describes how a fetch should be performed
type FetchOptions struct {
	// Name of the remote to fetch from. Defaults to origin.
	RemoteName string
	RefSpecs   []config.RefSpec
	// Depth limit fetching to the specified number of commits from the tip of
	// each remote branch history.
	Depth int
	// Auth credentials, if required, to use with the remote repository.
	Auth transport.AuthMethod
	// Progress is where the human readable information sent by the server is
	// stored, if nil nothing is stored and the capability (if supported)
	// no-progress, is sent to the server to avoid send this information.
	Progress sideband.Progress
	// Tags describe how the tags will be fetched from the remote repository,
	// by default is TagFollowing.
	Tags TagMode
	// Force allows the fetch to update a local branch even when the remote
	// branch does not descend from it.
	Force bool
	// InsecureSkipTLS skips ssl verify if protocol is https
	InsecureSkipTLS bool
	// CABundle specify additional ca bundle with system cert pool
	CABundle []byte
}

// Validate validates the fields and sets the default values.
func (o *FetchOptions) Validate() error {
	if o.RemoteName == "" {
		o.RemoteName = DefaultRemoteName
	}

	if o.Tags == InvalidTagMode {
		o.Tags = TagFollowing
	}

	for _, r := range o.RefSpecs {
		if err := r.Validate(); err != nil {
			return err
		}
	}

	return nil
}

// PushOptions describes how a push should be performed.
type PushOptions struct {
	// RemoteName is the name of the remote to be pushed to.
	RemoteName string
	// RefSpecs specify what destination ref to update with what source
	// object. A refspec with empty src can be used to delete a reference.
	RefSpecs []config.RefSpec
	// Auth credentials, if required, to use with the remote repository.
	Auth transport.AuthMethod
	// Progress is where the human readable information sent by the server is
	// stored, if nil nothing is stored.
	Progress sideband.Progress
	// Prune specify that remote refs that match given RefSpecs and that do
	// not exist locally will be removed.
	Prune bool
	// Force allows the push to update a remote branch even when the local
	// branch does not descend from it.
	Force bool
	// InsecureSkipTLS skips ssl verify if protocal is https
	InsecureSkipTLS bool
	// CABundle specify additional ca bundle with system cert pool
	CABundle []byte
	// RequireRemoteRefs only allows a remote ref to be updated if its current
	// value is the one specified here.
	RequireRemoteRefs []config.RefSpec
}

// Validate validates the fields and sets the default values.
func (o *PushOptions) Validate() error {
	if o.RemoteName == "" {
		o.RemoteName = DefaultRemoteName
	}

	if len(o.RefSpecs) == 0 {
		o.RefSpecs = []config.RefSpec{
			config.RefSpec(config.DefaultPushRefSpec),
		}
	}

	for _, r := range o.RefSpecs {
		if err := r.Validate(); err != nil {
			return err
		}
	}

	return nil
}

// SubmoduleUpdateOptions describes how a submodule update should be performed.
type SubmoduleUpdateOptions struct {
	// Init, if true initializes the submodules recorded in the index.
	Init bool
	// NoFetch tell to the update command to not fetch new objects from the
	// remote site.
	NoFetch bool
	// RecurseSubmodules the update is performed not only in the submodules of
	// the current repository but also in any nested submodules inside those
	// submodules (and so on). Until the SubmoduleRescursivity is reached.
	RecurseSubmodules SubmoduleRescursivity
	// Auth credentials, if required, to use with the remote repository.
	Auth transport.AuthMethod
}

var (
	ErrBranchHashExclusive  = errors.New("Branch and Hash are mutually exclusive")
	ErrCreateRequiresBranch = errors.New("Branch is mandatory when Create is used")
)

// CheckoutOptions describes how a checkout operation should be performed.
type CheckoutOptions struct {
	// Hash is the hash of the commit to be checked out. If used, HEAD will be
	// in detached mode. If Create is not used, Branch and Hash are mutually
	// exclusive.
	Hash plumbing.Hash
	// Branch to be checked out, if Branch and Hash are empty is set to `master`.
	Branch plumbing.ReferenceName
	// Create a new branch named Branch and start it at Hash.
	Create bool
	// Force, if true when switching branches, proceed even if the index or the
	// working tree differs from HEAD. This is used to throw away local changes
	Force bool
	// Keep, if true when switching branches, local changes (the index or the
	// working tree changes) will be kept so that they can be committed to the
	// target branch. Force and Keep are mutually exclusive, should not be both
	// set to true.
	Keep bool
}

// Validate validates the fields and sets the default values.
func (o *CheckoutOptions) Validate() error {
	if !o.Create && !o.Hash.IsZero() && o.Branch != "" {
		return ErrBranchHashExclusive
	}

	if o.Create && o.Branch == "" {
		return ErrCreateRequiresBranch
	}

	if o.Branch == "" {
		o.Branch = plumbing.Master
	}

	return nil
}

// ResetMode defines the mode of a reset operation.
type ResetMode int8

const (
	// MixedReset resets the index but not the working tree (i.e., the changed
	// files are preserved but not marked for commit) and reports what has not
	// been updated. This is the default action.
	MixedReset ResetMode = iota
	// HardReset resets the index and working tree. Any changes to tracked files
	// in the working tree are discarded.
	HardReset
	// MergeReset resets the index and updates the files in the working tree
	// that are different between Commit and HEAD, but keeps those which are
	// different between the index and working tree (i.e. which have changes
	// which have not been added).
	//
	// If a file that is different between Commit and the index has unstaged
	// changes, reset is aborted.
	MergeReset
	// SoftReset does not touch the index file or the working tree at all (but
	// resets the head to <commit>, just like all modes do). This leaves all
	// your changed files "Changes to be committed", as git status would put it.
	SoftReset
)

// ResetOptions describes how a reset operation should be performed.
type ResetOptions struct {
	// Commit, if commit is present set the current branch head (HEAD) to it.
	Commit plumbing.Hash
	// Mode, form resets the current branch head to Commit and possibly updates
	// the index (resetting it to the tree of Commit) and the working tree
	// depending on Mode. If empty MixedReset is used.
	Mode ResetMode
}

// Validate validates the fields and sets the default values.
func (o *ResetOptions) Validate(r *Repository) error {
	if o.Commit == plumbing.ZeroHash {
		ref, err := r.Head()
		if err != nil {
			return err
		}

		o.Commit = ref.Hash()
	}

	return nil
}

type LogOrder int8

const (
	LogOrderDefault LogOrder = iota
	LogOrderDFS
	LogOrderDFSPost
	LogOrderBSF
	LogOrderCommitterTime
)

// LogOptions describes how a log action should be performed.
type LogOptions struct {
	// When the From option is set the log will only contain commits
	// reachable from it. If this option is not set, HEAD will be used as
	// the default From.
	From plumbing.Hash

	// The default traversal algorithm is Depth-first search
	// set Order=LogOrderCommitterTime for ordering by committer time (more compatible with `git log`)
	// set Order=LogOrderBSF for Breadth-first search
	Order LogOrder

	// Show only those commits in which the specified file was inserted/updated.
	// It is equivalent to running `git log -- <file-name>`.
	// this field is kept for compatility, it can be replaced with PathFilter
	FileName *string

	// Filter commits based on the path of files that are updated
	// takes file path as argument and should return true if the file is desired
	// It can be used to implement `git log -- <path>`
	// either <path> is a file path, or directory path, or a regexp of file/directory path
	PathFilter func(string) bool

	// Pretend as if all the refs in refs/, along with HEAD, are listed on the command line as <commit>.
	// It is equivalent to running `git log --all`.
	// If set on true, the From option will be ignored.
	All bool

	// Show commits more recent than a specific date.
	// It is equivalent to running `git log --since <date>` or `git log --after <date>`.
	Since *time.Time

	// Show commits older than a specific date.
	// It is equivalent to running `git log --until <date>` or `git log --before <date>`.
	Until *time.Time
}

var (
	ErrMissingAuthor = errors.New("author field is required")
)

// AddOptions describes how an `add` operation should be performed
type AddOptions struct {
	// All equivalent to `git add -A`, update the index not only where the
	// working tree has a file matching `Path` but also where the index already
	// has an entry. This adds, modifies, and removes index entries to match the
	// working tree.  If no `Path` nor `Glob` is given when `All` option is
	// used, all files in the entire working tree are updated.
	All bool
	// Path is the exact filepath to the file or directory to be added.
	Path string
	// Glob adds all paths, matching pattern, to the index. If pattern matches a
	// directory path, all directory contents are added to the index recursively.
	Glob string
}

// Validate validates the fields and sets the default values.
func (o *AddOptions) Validate(r *Repository) error {
	if o.Path != "" && o.Glob != "" {
		return fmt.Errorf("fields Path and Glob are mutual exclusive")
	}

	return nil
}

// CommitOptions describes how a commit operation should be performed.
type CommitOptions struct {
	// All automatically stage files that have been modified and deleted, but
	// new files you have not told Git about are not affected.
	All bool
	// Author is the author's signature of the commit. If Author is empty the
	// Name and Email is read from the config, and time.Now it's used as When.
	Author *object.Signature
	// Committer is the committer's signature of the commit. If Committer is
	// nil the Author signature is used.
	Committer *object.Signature
	// Parents are the parents commits for the new commit, by default when
	// len(Parents) is zero, the hash of HEAD reference is used.
	Parents []plumbing.Hash
	// SignKey denotes a key to sign the commit with. A nil value here means the
	// commit will not be signed. The private key must be present and already
	// decrypted.
	SignKey *openpgp.Entity
}

// Validate validates the fields and sets the default values.
func (o *CommitOptions) Validate(r *Repository) error {
	if o.Author == nil {
		if err := o.loadConfigAuthorAndCommitter(r); err != nil {
			return err
		}
	}

	if o.Committer == nil {
		o.Committer = o.Author
	}

	if len(o.Parents) == 0 {
		head, err := r.Head()
		if err != nil && err != plumbing.ErrReferenceNotFound {
			return err
		}

		if head != nil {
			o.Parents = []plumbing.Hash{head.Hash()}
		}
	}

	return nil
}

func (o *CommitOptions) loadConfigAuthorAndCommitter(r *Repository) error {
	cfg, err := r.ConfigScoped(config.SystemScope)
	if err != nil {
		return err
	}

	if o.Author == nil && cfg.Author.Email != "" && cfg.Author.Name != "" {
		o.Author = &object.Signature{
			Name:  cfg.Author.Name,
			Email: cfg.Author.Email,
			When:  time.Now(),
		}
	}

	if o.Committer == nil && cfg.Committer.Email != "" && cfg.Committer.Name != "" {
		o.Committer = &object.Signature{
			Name:  cfg.Committer.Name,
			Email: cfg.Committer.Email,
			When:  time.Now(),
		}
	}

	if o.Author == nil && cfg.User.Email != "" && cfg.User.Name != "" {
		o.Author = &object.Signature{
			Name:  cfg.User.Name,
			Email: cfg.User.Email,
			When:  time.Now(),
		}
	}

	if o.Author == nil {
		return ErrMissingAuthor
	}

	return nil
}

var (
	ErrMissingName    = errors.New("name field is required")
	ErrMissingTagger  = errors.New("tagger field is required")
	ErrMissingMessage = errors.New("message field is required")
)

// CreateTagOptions describes how a tag object should be created.
type CreateTagOptions struct {
	// Tagger defines the signature of the tag creator. If Tagger is empty the
	// Name and Email is read from the config, and time.Now it's used as When.
	Tagger *object.Signature
	// Message defines the annotation of the tag. It is canonicalized during
	// validation into the format expected by git - no leading whitespace and
	// ending in a newline.
	Message string
	// SignKey denotes a key to sign the tag with. A nil value here means the tag
	// will not be signed. The private key must be present and already decrypted.
	SignKey *openpgp.Entity
}

// Validate validates the fields and sets the default values.
func (o *CreateTagOptions) Validate(r *Repository, hash plumbing.Hash) error {
	if o.Tagger == nil {
		if err := o.loadConfigTagger(r); err != nil {
			return err
		}
	}

	if o.Message == "" {
		return ErrMissingMessage
	}

	// Canonicalize the message into the expected message format.
	o.Message = strings.TrimSpace(o.Message) + "\n"

	return nil
}

func (o *CreateTagOptions) loadConfigTagger(r *Repository) error {
	cfg, err := r.ConfigScoped(config.SystemScope)
	if err != nil {
		return err
	}

	if o.Tagger == nil && cfg.Author.Email != "" && cfg.Author.Name != "" {
		o.Tagger = &object.Signature{
			Name:  cfg.Author.Name,
			Email: cfg.Author.Email,
			When:  time.Now(),
		}
	}

	if o.Tagger == nil && cfg.User.Email != "" && cfg.User.Name != "" {
		o.Tagger = &object.Signature{
			Name:  cfg.User.Name,
			Email: cfg.User.Email,
			When:  time.Now(),
		}
	}

	if o.Tagger == nil {
		return ErrMissingTagger
	}

	return nil
}

// ListOptions describes how a remote list should be performed.
type ListOptions struct {
	// Auth credentials, if required, to use with the remote repository.
	Auth transport.AuthMethod
	// InsecureSkipTLS skips ssl verify if protocal is https
	InsecureSkipTLS bool
	// CABundle specify additional ca bundle with system cert pool
	CABundle []byte
}

// CleanOptions describes how a clean should be performed.
type CleanOptions struct {
	Dir bool
}

// GrepOptions describes how a grep should be performed.
type GrepOptions struct {
	// Patterns are compiled Regexp objects to be matched.
	Patterns []*regexp.Regexp
	// InvertMatch selects non-matching lines.
	InvertMatch bool
	// CommitHash is the hash of the commit from which worktree should be derived.
	CommitHash plumbing.Hash
	// ReferenceName is the branch or tag name from which worktree should be derived.
	ReferenceName plumbing.ReferenceName
	// PathSpecs are compiled Regexp objects of pathspec to use in the matching.
	PathSpecs []*regexp.Regexp
}

var (
	ErrHashOrReference = errors.New("ambiguous options, only one of CommitHash or ReferenceName can be passed")
)

// Validate validates the fields and sets the default values.
func (o *GrepOptions) Validate(w *Worktree) error {
	if !o.CommitHash.IsZero() && o.ReferenceName != "" {
		return ErrHashOrReference
	}

	// If none of CommitHash and ReferenceName are provided, set commit hash of
	// the repository's head.
	if o.CommitHash.IsZero() && o.ReferenceName == "" {
		ref, err := w.r.Head()
		if err != nil {
			return err
		}
		o.CommitHash = ref.Hash()
	}

	return nil
}

// PlainOpenOptions describes how opening a plain repository should be
// performed.
type PlainOpenOptions struct {
	// DetectDotGit defines whether parent directories should be
	// walked until a .git directory or file is found.
	DetectDotGit bool
	// Enable .git/commondir support (see https://git-scm.com/docs/gitrepository-layout#Documentation/gitrepository-layout.txt).
	// NOTE: This option will only work with the filesystem storage.
	EnableDotGitCommonDir bool
}

// Validate validates the fields and sets the default values.
func (o *PlainOpenOptions) Validate() error { return nil }
   07070100000502000041ED00000000000000000000000B645E367C00000000000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing   07070100000503000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/cache 07070100000504000081A4000000000000000000000001645E367C000008C2000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/cache/buffer_lru.go   package cache

import (
	"container/list"
	"sync"
)

// BufferLRU implements an object cache with an LRU eviction policy and a
// maximum size (measured in object size).
type BufferLRU struct {
	MaxSize FileSize

	actualSize FileSize
	ll         *list.List
	cache      map[int64]*list.Element
	mut        sync.Mutex
}

// NewBufferLRU creates a new BufferLRU with the given maximum size. The maximum
// size will never be exceeded.
func NewBufferLRU(maxSize FileSize) *BufferLRU {
	return &BufferLRU{MaxSize: maxSize}
}

// NewBufferLRUDefault creates a new BufferLRU with the default cache size.
func NewBufferLRUDefault() *BufferLRU {
	return &BufferLRU{MaxSize: DefaultMaxSize}
}

type buffer struct {
	Key   int64
	Slice []byte
}

// Put puts a buffer into the cache. If the buffer is already in the cache, it
// will be marked as used. Otherwise, it will be inserted. A buffers might
// be evicted to make room for the new one.
func (c *BufferLRU) Put(key int64, slice []byte) {
	c.mut.Lock()
	defer c.mut.Unlock()

	if c.cache == nil {
		c.actualSize = 0
		c.cache = make(map[int64]*list.Element, 1000)
		c.ll = list.New()
	}

	bufSize := FileSize(len(slice))
	if ee, ok := c.cache[key]; ok {
		oldBuf := ee.Value.(buffer)
		// in this case bufSize is a delta: new size - old size
		bufSize -= FileSize(len(oldBuf.Slice))
		c.ll.MoveToFront(ee)
		ee.Value = buffer{key, slice}
	} else {
		if bufSize > c.MaxSize {
			return
		}
		ee := c.ll.PushFront(buffer{key, slice})
		c.cache[key] = ee
	}

	c.actualSize += bufSize
	for c.actualSize > c.MaxSize {
		last := c.ll.Back()
		lastObj := last.Value.(buffer)
		lastSize := FileSize(len(lastObj.Slice))

		c.ll.Remove(last)
		delete(c.cache, lastObj.Key)
		c.actualSize -= lastSize
	}
}

// Get returns a buffer by its key. It marks the buffer as used. If the buffer
// is not in the cache, (nil, false) will be returned.
func (c *BufferLRU) Get(key int64) ([]byte, bool) {
	c.mut.Lock()
	defer c.mut.Unlock()

	ee, ok := c.cache[key]
	if !ok {
		return nil, false
	}

	c.ll.MoveToFront(ee)
	return ee.Value.(buffer).Slice, true
}

// Clear the content of this buffer cache.
func (c *BufferLRU) Clear() {
	c.mut.Lock()
	defer c.mut.Unlock()

	c.ll = nil
	c.cache = nil
	c.actualSize = 0
}
  07070100000505000081A4000000000000000000000001645E367C000004B9000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/cache/common.go   package cache

import "github.com/go-git/go-git/v5/plumbing"

const (
	Byte FileSize = 1 << (iota * 10)
	KiByte
	MiByte
	GiByte
)

type FileSize int64

const DefaultMaxSize FileSize = 96 * MiByte

// Object is an interface to a object cache.
type Object interface {
	// Put puts the given object into the cache. Whether this object will
	// actually be put into the cache or not is implementation specific.
	Put(o plumbing.EncodedObject)
	// Get gets an object from the cache given its hash. The second return value
	// is true if the object was returned, and false otherwise.
	Get(k plumbing.Hash) (plumbing.EncodedObject, bool)
	// Clear clears every object from the cache.
	Clear()
}

// Buffer is an interface to a buffer cache.
type Buffer interface {
	// Put puts a buffer into the cache. If the buffer is already in the cache,
	// it will be marked as used. Otherwise, it will be inserted. Buffer might
	// be evicted to make room for the new one.
	Put(key int64, slice []byte)
	// Get returns a buffer by its key. It marks the buffer as used. If the
	// buffer is not in the cache, (nil, false) will be returned.
	Get(key int64) ([]byte, bool)
	// Clear clears every object from the cache.
	Clear()
}
   07070100000506000081A4000000000000000000000001645E367C00000936000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/cache/object_lru.go   package cache

import (
	"container/list"
	"sync"

	"github.com/go-git/go-git/v5/plumbing"
)

// ObjectLRU implements an object cache with an LRU eviction policy and a
// maximum size (measured in object size).
type ObjectLRU struct {
	MaxSize FileSize

	actualSize FileSize
	ll         *list.List
	cache      map[interface{}]*list.Element
	mut        sync.Mutex
}

// NewObjectLRU creates a new ObjectLRU with the given maximum size. The maximum
// size will never be exceeded.
func NewObjectLRU(maxSize FileSize) *ObjectLRU {
	return &ObjectLRU{MaxSize: maxSize}
}

// NewObjectLRUDefault creates a new ObjectLRU with the default cache size.
func NewObjectLRUDefault() *ObjectLRU {
	return &ObjectLRU{MaxSize: DefaultMaxSize}
}

// Put puts an object into the cache. If the object is already in the cache, it
// will be marked as used. Otherwise, it will be inserted. A single object might
// be evicted to make room for the new object.
func (c *ObjectLRU) Put(obj plumbing.EncodedObject) {
	c.mut.Lock()
	defer c.mut.Unlock()

	if c.cache == nil {
		c.actualSize = 0
		c.cache = make(map[interface{}]*list.Element, 1000)
		c.ll = list.New()
	}

	objSize := FileSize(obj.Size())
	key := obj.Hash()
	if ee, ok := c.cache[key]; ok {
		oldObj := ee.Value.(plumbing.EncodedObject)
		// in this case objSize is a delta: new size - old size
		objSize -= FileSize(oldObj.Size())
		c.ll.MoveToFront(ee)
		ee.Value = obj
	} else {
		if objSize > c.MaxSize {
			return
		}
		ee := c.ll.PushFront(obj)
		c.cache[key] = ee
	}

	c.actualSize += objSize
	for c.actualSize > c.MaxSize {
		last := c.ll.Back()
		if last == nil {
			c.actualSize = 0
			break
		}

		lastObj := last.Value.(plumbing.EncodedObject)
		lastSize := FileSize(lastObj.Size())

		c.ll.Remove(last)
		delete(c.cache, lastObj.Hash())
		c.actualSize -= lastSize
	}
}

// Get returns an object by its hash. It marks the object as used. If the object
// is not in the cache, (nil, false) will be returned.
func (c *ObjectLRU) Get(k plumbing.Hash) (plumbing.EncodedObject, bool) {
	c.mut.Lock()
	defer c.mut.Unlock()

	ee, ok := c.cache[k]
	if !ok {
		return nil, false
	}

	c.ll.MoveToFront(ee)
	return ee.Value.(plumbing.EncodedObject), true
}

// Clear the content of this object cache.
func (c *ObjectLRU) Clear() {
	c.mut.Lock()
	defer c.mut.Unlock()

	c.ll = nil
	c.cache = nil
	c.actualSize = 0
}
  07070100000507000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/color 07070100000508000081A4000000000000000000000001645E367C00000446000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/color/color.go    package color

// TODO read colors from a github.com/go-git/go-git/plumbing/format/config.Config struct
// TODO implement color parsing, see https://github.com/git/git/blob/v2.26.2/color.c

// Colors. See https://github.com/git/git/blob/v2.26.2/color.h#L24-L53.
const (
	Normal       = ""
	Reset        = "\033[m"
	Bold         = "\033[1m"
	Red          = "\033[31m"
	Green        = "\033[32m"
	Yellow       = "\033[33m"
	Blue         = "\033[34m"
	Magenta      = "\033[35m"
	Cyan         = "\033[36m"
	BoldRed      = "\033[1;31m"
	BoldGreen    = "\033[1;32m"
	BoldYellow   = "\033[1;33m"
	BoldBlue     = "\033[1;34m"
	BoldMagenta  = "\033[1;35m"
	BoldCyan     = "\033[1;36m"
	FaintRed     = "\033[2;31m"
	FaintGreen   = "\033[2;32m"
	FaintYellow  = "\033[2;33m"
	FaintBlue    = "\033[2;34m"
	FaintMagenta = "\033[2;35m"
	FaintCyan    = "\033[2;36m"
	BgRed        = "\033[41m"
	BgGreen      = "\033[42m"
	BgYellow     = "\033[43m"
	BgBlue       = "\033[44m"
	BgMagenta    = "\033[45m"
	BgCyan       = "\033[46m"
	Faint        = "\033[2m"
	FaintItalic  = "\033[2;3m"
	Reverse      = "\033[7m"
)
  07070100000509000081A4000000000000000000000001645E367C0000024D000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/error.go  package plumbing

import "fmt"

type PermanentError struct {
	Err error
}

func NewPermanentError(err error) *PermanentError {
	if err == nil {
		return nil
	}

	return &PermanentError{Err: err}
}

func (e *PermanentError) Error() string {
	return fmt.Sprintf("permanent client error: %s", e.Err.Error())
}

type UnexpectedError struct {
	Err error
}

func NewUnexpectedError(err error) *UnexpectedError {
	if err == nil {
		return nil
	}

	return &UnexpectedError{Err: err}
}

func (e *UnexpectedError) Error() string {
	return fmt.Sprintf("unexpected client error: %s", e.Err.Error())
}
   0707010000050A000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/filemode  0707010000050B000081A4000000000000000000000001645E367C000016F0000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/filemode/filemode.go  package filemode

import (
	"encoding/binary"
	"fmt"
	"os"
	"strconv"
)

// A FileMode represents the kind of tree entries used by git. It
// resembles regular file systems modes, although FileModes are
// considerably simpler (there are not so many), and there are some,
// like Submodule that has no file system equivalent.
type FileMode uint32

const (
	// Empty is used as the FileMode of tree elements when comparing
	// trees in the following situations:
	//
	// - the mode of tree elements before their creation.  - the mode of
	// tree elements after their deletion.  - the mode of unmerged
	// elements when checking the index.
	//
	// Empty has no file system equivalent.  As Empty is the zero value
	// of FileMode, it is also returned by New and
	// NewFromOsNewFromOSFileMode along with an error, when they fail.
	Empty FileMode = 0
	// Dir represent a Directory.
	Dir FileMode = 0040000
	// Regular represent non-executable files.  Please note this is not
	// the same as golang regular files, which include executable files.
	Regular FileMode = 0100644
	// Deprecated represent non-executable files with the group writable
	// bit set.  This mode was supported by the first versions of git,
	// but it has been deprecated nowadays.  This library uses them
	// internally, so you can read old packfiles, but will treat them as
	// Regulars when interfacing with the outside world.  This is the
	// standard git behaviour.
	Deprecated FileMode = 0100664
	// Executable represents executable files.
	Executable FileMode = 0100755
	// Symlink represents symbolic links to files.
	Symlink FileMode = 0120000
	// Submodule represents git submodules.  This mode has no file system
	// equivalent.
	Submodule FileMode = 0160000
)

// New takes the octal string representation of a FileMode and returns
// the FileMode and a nil error.  If the string can not be parsed to a
// 32 bit unsigned octal number, it returns Empty and the parsing error.
//
// Example: "40000" means Dir, "100644" means Regular.
//
// Please note this function does not check if the returned FileMode
// is valid in git or if it is malformed.  For instance, "1" will
// return the malformed FileMode(1) and a nil error.
func New(s string) (FileMode, error) {
	n, err := strconv.ParseUint(s, 8, 32)
	if err != nil {
		return Empty, err
	}

	return FileMode(n), nil
}

// NewFromOSFileMode returns the FileMode used by git to represent
// the provided file system modes and a nil error on success.  If the
// file system mode cannot be mapped to any valid git mode (as with
// sockets or named pipes), it will return Empty and an error.
//
// Note that some git modes cannot be generated from os.FileModes, like
// Deprecated and Submodule; while Empty will be returned, along with an
// error, only when the method fails.
func NewFromOSFileMode(m os.FileMode) (FileMode, error) {
	if m.IsRegular() {
		if isSetTemporary(m) {
			return Empty, fmt.Errorf("no equivalent git mode for %s", m)
		}
		if isSetCharDevice(m) {
			return Empty, fmt.Errorf("no equivalent git mode for %s", m)
		}
		if isSetUserExecutable(m) {
			return Executable, nil
		}
		return Regular, nil
	}

	if m.IsDir() {
		return Dir, nil
	}

	if isSetSymLink(m) {
		return Symlink, nil
	}

	return Empty, fmt.Errorf("no equivalent git mode for %s", m)
}

func isSetCharDevice(m os.FileMode) bool {
	return m&os.ModeCharDevice != 0
}

func isSetTemporary(m os.FileMode) bool {
	return m&os.ModeTemporary != 0
}

func isSetUserExecutable(m os.FileMode) bool {
	return m&0100 != 0
}

func isSetSymLink(m os.FileMode) bool {
	return m&os.ModeSymlink != 0
}

// Bytes return a slice of 4 bytes with the mode in little endian
// encoding.
func (m FileMode) Bytes() []byte {
	ret := make([]byte, 4)
	binary.LittleEndian.PutUint32(ret, uint32(m))
	return ret
}

// IsMalformed returns if the FileMode should not appear in a git packfile,
// this is: Empty and any other mode not mentioned as a constant in this
// package.
func (m FileMode) IsMalformed() bool {
	return m != Dir &&
		m != Regular &&
		m != Deprecated &&
		m != Executable &&
		m != Symlink &&
		m != Submodule
}

// String returns the FileMode as a string in the standatd git format,
// this is, an octal number padded with ceros to 7 digits.  Malformed
// modes are printed in that same format, for easier debugging.
//
// Example: Regular is "0100644", Empty is "0000000".
func (m FileMode) String() string {
	return fmt.Sprintf("%07o", uint32(m))
}

// IsRegular returns if the FileMode represents that of a regular file,
// this is, either Regular or Deprecated.  Please note that Executable
// are not regular even though in the UNIX tradition, they usually are:
// See the IsFile method.
func (m FileMode) IsRegular() bool {
	return m == Regular ||
		m == Deprecated
}

// IsFile returns if the FileMode represents that of a file, this is,
// Regular, Deprecated, Executable or Link.
func (m FileMode) IsFile() bool {
	return m == Regular ||
		m == Deprecated ||
		m == Executable ||
		m == Symlink
}

// ToOSFileMode returns the os.FileMode to be used when creating file
// system elements with the given git mode and a nil error on success.
//
// When the provided mode cannot be mapped to a valid file system mode
// (e.g.  Submodule) it returns os.FileMode(0) and an error.
//
// The returned file mode does not take into account the umask.
func (m FileMode) ToOSFileMode() (os.FileMode, error) {
	switch m {
	case Dir:
		return os.ModePerm | os.ModeDir, nil
	case Submodule:
		return os.ModePerm | os.ModeDir, nil
	case Regular:
		return os.FileMode(0644), nil
	// Deprecated is no longer allowed: treated as a Regular instead
	case Deprecated:
		return os.FileMode(0644), nil
	case Executable:
		return os.FileMode(0755), nil
	case Symlink:
		return os.ModePerm | os.ModeSymlink, nil
	}

	return os.FileMode(0), fmt.Errorf("malformed mode (%s)", m)
}
0707010000050C000041ED00000000000000000000000A645E367C00000000000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format    0707010000050D000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/config 0707010000050E000081A4000000000000000000000001645E367C00000A57000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/config/common.go   package config

// New creates a new config instance.
func New() *Config {
	return &Config{}
}

// Config contains all the sections, comments and includes from a config file.
type Config struct {
	Comment  *Comment
	Sections Sections
	Includes Includes
}

// Includes is a list of Includes in a config file.
type Includes []*Include

// Include is a reference to an included config file.
type Include struct {
	Path   string
	Config *Config
}

// Comment string without the prefix '#' or ';'.
type Comment string

const (
	// NoSubsection token is passed to Config.Section and Config.SetSection to
	// represent the absence of a section.
	NoSubsection = ""
)

// Section returns a existing section with the given name or creates a new one.
func (c *Config) Section(name string) *Section {
	for i := len(c.Sections) - 1; i >= 0; i-- {
		s := c.Sections[i]
		if s.IsName(name) {
			return s
		}
	}

	s := &Section{Name: name}
	c.Sections = append(c.Sections, s)
	return s
}

// HasSection checks if the Config has a section with the specified name.
func (c *Config) HasSection(name string) bool {
	for _, s := range c.Sections {
		if s.IsName(name) {
			return true
		}
	}
	return false
}

// RemoveSection removes a section from a config file.
func (c *Config) RemoveSection(name string) *Config {
	result := Sections{}
	for _, s := range c.Sections {
		if !s.IsName(name) {
			result = append(result, s)
		}
	}

	c.Sections = result
	return c
}

// RemoveSubsection remove a subsection from a config file.
func (c *Config) RemoveSubsection(section string, subsection string) *Config {
	for _, s := range c.Sections {
		if s.IsName(section) {
			result := Subsections{}
			for _, ss := range s.Subsections {
				if !ss.IsName(subsection) {
					result = append(result, ss)
				}
			}
			s.Subsections = result
		}
	}

	return c
}

// AddOption adds an option to a given section and subsection. Use the
// NoSubsection constant for the subsection argument if no subsection is wanted.
func (c *Config) AddOption(section string, subsection string, key string, value string) *Config {
	if subsection == "" {
		c.Section(section).AddOption(key, value)
	} else {
		c.Section(section).Subsection(subsection).AddOption(key, value)
	}

	return c
}

// SetOption sets an option to a given section and subsection. Use the
// NoSubsection constant for the subsection argument if no subsection is wanted.
func (c *Config) SetOption(section string, subsection string, key string, value string) *Config {
	if subsection == "" {
		c.Section(section).SetOption(key, value)
	} else {
		c.Section(section).Subsection(subsection).SetOption(key, value)
	}

	return c
}
 0707010000050F000081A4000000000000000000000001645E367C000002E0000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/config/decoder.go  package config

import (
	"io"

	"github.com/go-git/gcfg"
)

// A Decoder reads and decodes config files from an input stream.
type Decoder struct {
	io.Reader
}

// NewDecoder returns a new decoder that reads from r.
func NewDecoder(r io.Reader) *Decoder {
	return &Decoder{r}
}

// Decode reads the whole config from its input and stores it in the
// value pointed to by config.
func (d *Decoder) Decode(config *Config) error {
	cb := func(s string, ss string, k string, v string, bv bool) error {
		if ss == "" && k == "" {
			config.Section(s)
			return nil
		}

		if ss != "" && k == "" {
			config.Section(s).Subsection(ss)
			return nil
		}

		config.AddOption(s, ss, k, v)
		return nil
	}
	return gcfg.ReadWithCallback(d, cb)
}
07070100000510000081A4000000000000000000000001645E367C000013DC000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/config/doc.go  // Package config implements encoding and decoding of git config files.
//
// 	Configuration File
// 	------------------
//
// 	The Git configuration file contains a number of variables that affect
// 	the Git commands' behavior. The `.git/config` file in each repository
// 	is used to store the configuration for that repository, and
// 	`$HOME/.gitconfig` is used to store a per-user configuration as
// 	fallback values for the `.git/config` file. The file `/etc/gitconfig`
// 	can be used to store a system-wide default configuration.
//
// 	The configuration variables are used by both the Git plumbing
// 	and the porcelains. The variables are divided into sections, wherein
// 	the fully qualified variable name of the variable itself is the last
// 	dot-separated segment and the section name is everything before the last
// 	dot. The variable names are case-insensitive, allow only alphanumeric
// 	characters and `-`, and must start with an alphabetic character.  Some
// 	variables may appear multiple times; we say then that the variable is
// 	multivalued.
//
// 	Syntax
// 	~~~~~~
//
// 	The syntax is fairly flexible and permissive; whitespaces are mostly
// 	ignored.  The '#' and ';' characters begin comments to the end of line,
// 	blank lines are ignored.
//
// 	The file consists of sections and variables.  A section begins with
// 	the name of the section in square brackets and continues until the next
// 	section begins.  Section names are case-insensitive.  Only alphanumeric
// 	characters, `-` and `.` are allowed in section names.  Each variable
// 	must belong to some section, which means that there must be a section
// 	header before the first setting of a variable.
//
// 	Sections can be further divided into subsections.  To begin a subsection
// 	put its name in double quotes, separated by space from the section name,
// 	in the section header, like in the example below:
//
// 	--------
// 		[section "subsection"]
//
// 	--------
//
// 	Subsection names are case sensitive and can contain any characters except
// 	newline (doublequote `"` and backslash can be included by escaping them
// 	as `\"` and `\\`, respectively).  Section headers cannot span multiple
// 	lines.  Variables may belong directly to a section or to a given subsection.
// 	You can have `[section]` if you have `[section "subsection"]`, but you
// 	don't need to.
//
// 	There is also a deprecated `[section.subsection]` syntax. With this
// 	syntax, the subsection name is converted to lower-case and is also
// 	compared case sensitively. These subsection names follow the same
// 	restrictions as section names.
//
// 	All the other lines (and the remainder of the line after the section
// 	header) are recognized as setting variables, in the form
// 	'name = value' (or just 'name', which is a short-hand to say that
// 	the variable is the boolean "true").
// 	The variable names are case-insensitive, allow only alphanumeric characters
// 	and `-`, and must start with an alphabetic character.
//
// 	A line that defines a value can be continued to the next line by
// 	ending it with a `\`; the backquote and the end-of-line are
// 	stripped.  Leading whitespaces after 'name =', the remainder of the
// 	line after the first comment character '#' or ';', and trailing
// 	whitespaces of the line are discarded unless they are enclosed in
// 	double quotes.  Internal whitespaces within the value are retained
// 	verbatim.
//
// 	Inside double quotes, double quote `"` and backslash `\` characters
// 	must be escaped: use `\"` for `"` and `\\` for `\`.
//
// 	The following escape sequences (beside `\"` and `\\`) are recognized:
// 	`\n` for newline character (NL), `\t` for horizontal tabulation (HT, TAB)
// 	and `\b` for backspace (BS).  Other char escape sequences (including octal
// 	escape sequences) are invalid.
//
// 	Includes
// 	~~~~~~~~
//
// 	You can include one config file from another by setting the special
// 	`include.path` variable to the name of the file to be included. The
// 	variable takes a pathname as its value, and is subject to tilde
// 	expansion.
//
// 	The included file is expanded immediately, as if its contents had been
// 	found at the location of the include directive. If the value of the
// 	`include.path` variable is a relative path, the path is considered to be
// 	relative to the configuration file in which the include directive was
// 	found.  See below for examples.
//
//
// 	Example
// 	~~~~~~~
//
// 		# Core variables
// 		[core]
// 			; Don't trust file modes
// 			filemode = false
//
// 		# Our diff algorithm
// 		[diff]
// 			external = /usr/local/bin/diff-wrapper
// 			renames = true
//
// 		[branch "devel"]
// 			remote = origin
// 			merge = refs/heads/devel
//
// 		# Proxy settings
// 		[core]
// 			gitProxy="ssh" for "kernel.org"
// 			gitProxy=default-proxy ; for the rest
//
// 		[include]
// 			path = /path/to/foo.inc ; include by absolute path
// 			path = foo ; expand "foo" relative to the current file
// 			path = ~/foo ; expand "foo" in your `$HOME` directory
//
package config
07070100000511000081A4000000000000000000000001645E367C000005C3000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/config/encoder.go  package config

import (
	"fmt"
	"io"
	"strings"
)

// An Encoder writes config files to an output stream.
type Encoder struct {
	w io.Writer
}

// NewEncoder returns a new encoder that writes to w.
func NewEncoder(w io.Writer) *Encoder {
	return &Encoder{w}
}

// Encode writes the config in git config format to the stream of the encoder.
func (e *Encoder) Encode(cfg *Config) error {
	for _, s := range cfg.Sections {
		if err := e.encodeSection(s); err != nil {
			return err
		}
	}

	return nil
}

func (e *Encoder) encodeSection(s *Section) error {
	if len(s.Options) > 0 {
		if err := e.printf("[%s]\n", s.Name); err != nil {
			return err
		}

		if err := e.encodeOptions(s.Options); err != nil {
			return err
		}
	}

	for _, ss := range s.Subsections {
		if err := e.encodeSubsection(s.Name, ss); err != nil {
			return err
		}
	}

	return nil
}

func (e *Encoder) encodeSubsection(sectionName string, s *Subsection) error {
	//TODO: escape
	if err := e.printf("[%s \"%s\"]\n", sectionName, s.Name); err != nil {
		return err
	}

	return e.encodeOptions(s.Options)
}

func (e *Encoder) encodeOptions(opts Options) error {
	for _, o := range opts {
		pattern := "\t%s = %s\n"
		if strings.Contains(o.Value, "\\") {
			pattern = "\t%s = %q\n"
		}

		if err := e.printf(pattern, o.Key, o.Value); err != nil {
			return err
		}
	}

	return nil
}

func (e *Encoder) printf(msg string, args ...interface{}) error {
	_, err := fmt.Fprintf(e.w, msg, args...)
	return err
}
 07070100000512000081A4000000000000000000000001645E367C00000A07000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/config/option.go   package config

import (
	"fmt"
	"strings"
)

// Option defines a key/value entity in a config file.
type Option struct {
	// Key preserving original caseness.
	// Use IsKey instead to compare key regardless of caseness.
	Key string
	// Original value as string, could be not normalized.
	Value string
}

type Options []*Option

// IsKey returns true if the given key matches
// this option's key in a case-insensitive comparison.
func (o *Option) IsKey(key string) bool {
	return strings.EqualFold(o.Key, key)
}

func (opts Options) GoString() string {
	var strs []string
	for _, opt := range opts {
		strs = append(strs, fmt.Sprintf("%#v", opt))
	}

	return strings.Join(strs, ", ")
}

// Get gets the value for the given key if set,
// otherwise it returns the empty string.
//
// Note that there is no difference
//
// This matches git behaviour since git v1.8.1-rc1,
// if there are multiple definitions of a key, the
// last one wins.
//
// See: http://article.gmane.org/gmane.linux.kernel/1407184
//
// In order to get all possible values for the same key,
// use GetAll.
func (opts Options) Get(key string) string {
	for i := len(opts) - 1; i >= 0; i-- {
		o := opts[i]
		if o.IsKey(key) {
			return o.Value
		}
	}
	return ""
}

// Has checks if an Option exist with the given key.
func (opts Options) Has(key string) bool {
	for _, o := range opts {
		if o.IsKey(key) {
			return true
		}
	}
	return false
}

// GetAll returns all possible values for the same key.
func (opts Options) GetAll(key string) []string {
	result := []string{}
	for _, o := range opts {
		if o.IsKey(key) {
			result = append(result, o.Value)
		}
	}
	return result
}

func (opts Options) withoutOption(key string) Options {
	result := Options{}
	for _, o := range opts {
		if !o.IsKey(key) {
			result = append(result, o)
		}
	}
	return result
}

func (opts Options) withAddedOption(key string, value string) Options {
	return append(opts, &Option{key, value})
}

func (opts Options) withSettedOption(key string, values ...string) Options {
	var result Options
	var added []string
	for _, o := range opts {
		if !o.IsKey(key) {
			result = append(result, o)
			continue
		}

		if contains(values, o.Value) {
			added = append(added, o.Value)
			result = append(result, o)
			continue
		}
	}

	for _, value := range values {
		if contains(added, value) {
			continue
		}

		result = result.withAddedOption(key, value)
	}

	return result
}

func contains(haystack []string, needle string) bool {
	for _, s := range haystack {
		if s == needle {
			return true
		}
	}

	return false
}
 07070100000513000081A4000000000000000000000001645E367C0000147C000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/config/section.go  package config

import (
	"fmt"
	"strings"
)

// Section is the representation of a section inside git configuration files.
// Each Section contains Options that are used by both the Git plumbing
// and the porcelains.
// Sections can be further divided into subsections. To begin a subsection
// put its name in double quotes, separated by space from the section name,
// in the section header, like in the example below:
//
//     [section "subsection"]
//
// All the other lines (and the remainder of the line after the section header)
// are recognized as option variables, in the form "name = value" (or just name,
// which is a short-hand to say that the variable is the boolean "true").
// The variable names are case-insensitive, allow only alphanumeric characters
// and -, and must start with an alphabetic character:
//
//     [section "subsection1"]
//         option1 = value1
//         option2
//     [section "subsection2"]
//         option3 = value2
//
type Section struct {
	Name        string
	Options     Options
	Subsections Subsections
}

type Subsection struct {
	Name    string
	Options Options
}

type Sections []*Section

func (s Sections) GoString() string {
	var strs []string
	for _, ss := range s {
		strs = append(strs, fmt.Sprintf("%#v", ss))
	}

	return strings.Join(strs, ", ")
}

type Subsections []*Subsection

func (s Subsections) GoString() string {
	var strs []string
	for _, ss := range s {
		strs = append(strs, fmt.Sprintf("%#v", ss))
	}

	return strings.Join(strs, ", ")
}

// IsName checks if the name provided is equals to the Section name, case insensitive.
func (s *Section) IsName(name string) bool {
	return strings.EqualFold(s.Name, name)
}

// Subsection returns a Subsection from the specified Section. If the
// Subsection does not exists, new one is created and added to Section.
func (s *Section) Subsection(name string) *Subsection {
	for i := len(s.Subsections) - 1; i >= 0; i-- {
		ss := s.Subsections[i]
		if ss.IsName(name) {
			return ss
		}
	}

	ss := &Subsection{Name: name}
	s.Subsections = append(s.Subsections, ss)
	return ss
}

// HasSubsection checks if the Section has a Subsection with the specified name.
func (s *Section) HasSubsection(name string) bool {
	for _, ss := range s.Subsections {
		if ss.IsName(name) {
			return true
		}
	}

	return false
}

// RemoveSubsection removes a subsection from a Section.
func (s *Section) RemoveSubsection(name string) *Section {
	result := Subsections{}
	for _, s := range s.Subsections {
		if !s.IsName(name) {
			result = append(result, s)
		}
	}

	s.Subsections = result
	return s
}

// Option return the value for the specified key. Empty string is returned if
// key does not exists.
func (s *Section) Option(key string) string {
	return s.Options.Get(key)
}

// OptionAll returns all possible values for an option with the specified key.
// If the option does not exists, an empty slice will be returned.
func (s *Section) OptionAll(key string) []string {
	return s.Options.GetAll(key)
}

// HasOption checks if the Section has an Option with the given key.
func (s *Section) HasOption(key string) bool {
	return s.Options.Has(key)
}

// AddOption adds a new Option to the Section. The updated Section is returned.
func (s *Section) AddOption(key string, value string) *Section {
	s.Options = s.Options.withAddedOption(key, value)
	return s
}

// SetOption adds a new Option to the Section. If the option already exists, is replaced.
// The updated Section is returned.
func (s *Section) SetOption(key string, value string) *Section {
	s.Options = s.Options.withSettedOption(key, value)
	return s
}

// Remove an option with the specified key. The updated Section is returned.
func (s *Section) RemoveOption(key string) *Section {
	s.Options = s.Options.withoutOption(key)
	return s
}

// IsName checks if the name of the subsection is exactly the specified name.
func (s *Subsection) IsName(name string) bool {
	return s.Name == name
}

// Option returns an option with the specified key. If the option does not exists,
// empty spring will be returned.
func (s *Subsection) Option(key string) string {
	return s.Options.Get(key)
}

// OptionAll returns all possible values for an option with the specified key.
// If the option does not exists, an empty slice will be returned.
func (s *Subsection) OptionAll(key string) []string {
	return s.Options.GetAll(key)
}

// HasOption checks if the Subsection has an Option with the given key.
func (s *Subsection) HasOption(key string) bool {
	return s.Options.Has(key)
}

// AddOption adds a new Option to the Subsection. The updated Subsection is returned.
func (s *Subsection) AddOption(key string, value string) *Subsection {
	s.Options = s.Options.withAddedOption(key, value)
	return s
}

// SetOption adds a new Option to the Subsection. If the option already exists, is replaced.
// The updated Subsection is returned.
func (s *Subsection) SetOption(key string, value ...string) *Subsection {
	s.Options = s.Options.withSettedOption(key, value...)
	return s
}

// RemoveOption removes the option with the specified key. The updated Subsection is returned.
func (s *Subsection) RemoveOption(key string) *Subsection {
	s.Options = s.Options.withoutOption(key)
	return s
}
07070100000514000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/diff   07070100000515000081A4000000000000000000000001645E367C00000D84000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/diff/colorconfig.go    package diff

import "github.com/go-git/go-git/v5/plumbing/color"

// A ColorKey is a key into a ColorConfig map and also equal to the key in the
// diff.color subsection of the config. See
// https://github.com/git/git/blob/v2.26.2/diff.c#L83-L106.
type ColorKey string

// ColorKeys.
const (
	Context                   ColorKey = "context"
	Meta                      ColorKey = "meta"
	Frag                      ColorKey = "frag"
	Old                       ColorKey = "old"
	New                       ColorKey = "new"
	Commit                    ColorKey = "commit"
	Whitespace                ColorKey = "whitespace"
	Func                      ColorKey = "func"
	OldMoved                  ColorKey = "oldMoved"
	OldMovedAlternative       ColorKey = "oldMovedAlternative"
	OldMovedDimmed            ColorKey = "oldMovedDimmed"
	OldMovedAlternativeDimmed ColorKey = "oldMovedAlternativeDimmed"
	NewMoved                  ColorKey = "newMoved"
	NewMovedAlternative       ColorKey = "newMovedAlternative"
	NewMovedDimmed            ColorKey = "newMovedDimmed"
	NewMovedAlternativeDimmed ColorKey = "newMovedAlternativeDimmed"
	ContextDimmed             ColorKey = "contextDimmed"
	OldDimmed                 ColorKey = "oldDimmed"
	NewDimmed                 ColorKey = "newDimmed"
	ContextBold               ColorKey = "contextBold"
	OldBold                   ColorKey = "oldBold"
	NewBold                   ColorKey = "newBold"
)

// A ColorConfig is a color configuration. A nil or empty ColorConfig
// corresponds to no color.
type ColorConfig map[ColorKey]string

// A ColorConfigOption sets an option on a ColorConfig.
type ColorConfigOption func(ColorConfig)

// WithColor sets the color for key.
func WithColor(key ColorKey, color string) ColorConfigOption {
	return func(cc ColorConfig) {
		cc[key] = color
	}
}

// defaultColorConfig is the default color configuration. See
// https://github.com/git/git/blob/v2.26.2/diff.c#L57-L81.
var defaultColorConfig = ColorConfig{
	Context:                   color.Normal,
	Meta:                      color.Bold,
	Frag:                      color.Cyan,
	Old:                       color.Red,
	New:                       color.Green,
	Commit:                    color.Yellow,
	Whitespace:                color.BgRed,
	Func:                      color.Normal,
	OldMoved:                  color.BoldMagenta,
	OldMovedAlternative:       color.BoldBlue,
	OldMovedDimmed:            color.Faint,
	OldMovedAlternativeDimmed: color.FaintItalic,
	NewMoved:                  color.BoldCyan,
	NewMovedAlternative:       color.BoldYellow,
	NewMovedDimmed:            color.Faint,
	NewMovedAlternativeDimmed: color.FaintItalic,
	ContextDimmed:             color.Faint,
	OldDimmed:                 color.FaintRed,
	NewDimmed:                 color.FaintGreen,
	ContextBold:               color.Bold,
	OldBold:                   color.BoldRed,
	NewBold:                   color.BoldGreen,
}

// NewColorConfig returns a new ColorConfig.
func NewColorConfig(options ...ColorConfigOption) ColorConfig {
	cc := make(ColorConfig)
	for key, value := range defaultColorConfig {
		cc[key] = value
	}
	for _, option := range options {
		option(cc)
	}
	return cc
}

// Reset returns the ANSI escape sequence to reset the color with key set from
// cc. If no color was set then no reset is needed so it returns the empty
// string.
func (cc ColorConfig) Reset(key ColorKey) string {
	if cc[key] == "" {
		return ""
	}
	return color.Reset
}
07070100000516000081A4000000000000000000000001645E367C000006D8000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/diff/patch.go  package diff

import (
	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/filemode"
)

// Operation defines the operation of a diff item.
type Operation int

const (
	// Equal item represents a equals diff.
	Equal Operation = iota
	// Add item represents an insert diff.
	Add
	// Delete item represents a delete diff.
	Delete
)

// Patch represents a collection of steps to transform several files.
type Patch interface {
	// FilePatches returns a slice of patches per file.
	FilePatches() []FilePatch
	// Message returns an optional message that can be at the top of the
	// Patch representation.
	Message() string
}

// FilePatch represents the necessary steps to transform one file to another.
type FilePatch interface {
	// IsBinary returns true if this patch is representing a binary file.
	IsBinary() bool
	// Files returns the from and to Files, with all the necessary metadata to
	// about them. If the patch creates a new file, "from" will be nil.
	// If the patch deletes a file, "to" will be nil.
	Files() (from, to File)
	// Chunks returns a slice of ordered changes to transform "from" File to
	// "to" File. If the file is a binary one, Chunks will be empty.
	Chunks() []Chunk
}

// File contains all the file metadata necessary to print some patch formats.
type File interface {
	// Hash returns the File Hash.
	Hash() plumbing.Hash
	// Mode returns the FileMode.
	Mode() filemode.FileMode
	// Path returns the complete Path to the file, including the filename.
	Path() string
}

// Chunk represents a portion of a file transformation to another.
type Chunk interface {
	// Content contains the portion of the file.
	Content() string
	// Type contains the Operation to do with this Chunk.
	Type() Operation
}
07070100000517000081A4000000000000000000000001645E367C00002463000000000000000000000000000000000000005F00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/diff/unified_encoder.go    package diff

import (
	"fmt"
	"io"
	"regexp"
	"strconv"
	"strings"

	"github.com/go-git/go-git/v5/plumbing"
)

// DefaultContextLines is the default number of context lines.
const DefaultContextLines = 3

var (
	splitLinesRegexp = regexp.MustCompile(`[^\n]*(\n|$)`)

	operationChar = map[Operation]byte{
		Add:    '+',
		Delete: '-',
		Equal:  ' ',
	}

	operationColorKey = map[Operation]ColorKey{
		Add:    New,
		Delete: Old,
		Equal:  Context,
	}
)

// UnifiedEncoder encodes an unified diff into the provided Writer. It does not
// support similarity index for renames or sorting hash representations.
type UnifiedEncoder struct {
	io.Writer

	// contextLines is the count of unchanged lines that will appear surrounding
	// a change.
	contextLines int

	// srcPrefix and dstPrefix are prepended to file paths when encoding a diff.
	srcPrefix string
	dstPrefix string

	// colorConfig is the color configuration. The default is no color.
	color ColorConfig
}

// NewUnifiedEncoder returns a new UnifiedEncoder that writes to w.
func NewUnifiedEncoder(w io.Writer, contextLines int) *UnifiedEncoder {
	return &UnifiedEncoder{
		Writer:       w,
		srcPrefix:    "a/",
		dstPrefix:    "b/",
		contextLines: contextLines,
	}
}

// SetColor sets e's color configuration and returns e.
func (e *UnifiedEncoder) SetColor(colorConfig ColorConfig) *UnifiedEncoder {
	e.color = colorConfig
	return e
}

// SetSrcPrefix sets e's srcPrefix and returns e.
func (e *UnifiedEncoder) SetSrcPrefix(prefix string) *UnifiedEncoder {
	e.srcPrefix = prefix
	return e
}

// SetDstPrefix sets e's dstPrefix and returns e.
func (e *UnifiedEncoder) SetDstPrefix(prefix string) *UnifiedEncoder {
	e.dstPrefix = prefix
	return e
}

// Encode encodes patch.
func (e *UnifiedEncoder) Encode(patch Patch) error {
	sb := &strings.Builder{}

	if message := patch.Message(); message != "" {
		sb.WriteString(message)
		if !strings.HasSuffix(message, "\n") {
			sb.WriteByte('\n')
		}
	}

	for _, filePatch := range patch.FilePatches() {
		e.writeFilePatchHeader(sb, filePatch)
		g := newHunksGenerator(filePatch.Chunks(), e.contextLines)
		for _, hunk := range g.Generate() {
			hunk.writeTo(sb, e.color)
		}
	}

	_, err := e.Write([]byte(sb.String()))
	return err
}

func (e *UnifiedEncoder) writeFilePatchHeader(sb *strings.Builder, filePatch FilePatch) {
	from, to := filePatch.Files()
	if from == nil && to == nil {
		return
	}
	isBinary := filePatch.IsBinary()

	var lines []string
	switch {
	case from != nil && to != nil:
		hashEquals := from.Hash() == to.Hash()
		lines = append(lines,
			fmt.Sprintf("diff --git %s%s %s%s",
				e.srcPrefix, from.Path(), e.dstPrefix, to.Path()),
		)
		if from.Mode() != to.Mode() {
			lines = append(lines,
				fmt.Sprintf("old mode %o", from.Mode()),
				fmt.Sprintf("new mode %o", to.Mode()),
			)
		}
		if from.Path() != to.Path() {
			lines = append(lines,
				fmt.Sprintf("rename from %s", from.Path()),
				fmt.Sprintf("rename to %s", to.Path()),
			)
		}
		if from.Mode() != to.Mode() && !hashEquals {
			lines = append(lines,
				fmt.Sprintf("index %s..%s", from.Hash(), to.Hash()),
			)
		} else if !hashEquals {
			lines = append(lines,
				fmt.Sprintf("index %s..%s %o", from.Hash(), to.Hash(), from.Mode()),
			)
		}
		if !hashEquals {
			lines = e.appendPathLines(lines, e.srcPrefix+from.Path(), e.dstPrefix+to.Path(), isBinary)
		}
	case from == nil:
		lines = append(lines,
			fmt.Sprintf("diff --git %s %s", e.srcPrefix+to.Path(), e.dstPrefix+to.Path()),
			fmt.Sprintf("new file mode %o", to.Mode()),
			fmt.Sprintf("index %s..%s", plumbing.ZeroHash, to.Hash()),
		)
		lines = e.appendPathLines(lines, "/dev/null", e.dstPrefix+to.Path(), isBinary)
	case to == nil:
		lines = append(lines,
			fmt.Sprintf("diff --git %s %s", e.srcPrefix+from.Path(), e.dstPrefix+from.Path()),
			fmt.Sprintf("deleted file mode %o", from.Mode()),
			fmt.Sprintf("index %s..%s", from.Hash(), plumbing.ZeroHash),
		)
		lines = e.appendPathLines(lines, e.srcPrefix+from.Path(), "/dev/null", isBinary)
	}

	sb.WriteString(e.color[Meta])
	sb.WriteString(lines[0])
	for _, line := range lines[1:] {
		sb.WriteByte('\n')
		sb.WriteString(line)
	}
	sb.WriteString(e.color.Reset(Meta))
	sb.WriteByte('\n')
}

func (e *UnifiedEncoder) appendPathLines(lines []string, fromPath, toPath string, isBinary bool) []string {
	if isBinary {
		return append(lines,
			fmt.Sprintf("Binary files %s and %s differ", fromPath, toPath),
		)
	}
	return append(lines,
		fmt.Sprintf("--- %s", fromPath),
		fmt.Sprintf("+++ %s", toPath),
	)
}

type hunksGenerator struct {
	fromLine, toLine            int
	ctxLines                    int
	chunks                      []Chunk
	current                     *hunk
	hunks                       []*hunk
	beforeContext, afterContext []string
}

func newHunksGenerator(chunks []Chunk, ctxLines int) *hunksGenerator {
	return &hunksGenerator{
		chunks:   chunks,
		ctxLines: ctxLines,
	}
}

func (g *hunksGenerator) Generate() []*hunk {
	for i, chunk := range g.chunks {
		lines := splitLines(chunk.Content())
		nLines := len(lines)

		switch chunk.Type() {
		case Equal:
			g.fromLine += nLines
			g.toLine += nLines
			g.processEqualsLines(lines, i)
		case Delete:
			if nLines != 0 {
				g.fromLine++
			}

			g.processHunk(i, chunk.Type())
			g.fromLine += nLines - 1
			g.current.AddOp(chunk.Type(), lines...)
		case Add:
			if nLines != 0 {
				g.toLine++
			}
			g.processHunk(i, chunk.Type())
			g.toLine += nLines - 1
			g.current.AddOp(chunk.Type(), lines...)
		}

		if i == len(g.chunks)-1 && g.current != nil {
			g.hunks = append(g.hunks, g.current)
		}
	}

	return g.hunks
}

func (g *hunksGenerator) processHunk(i int, op Operation) {
	if g.current != nil {
		return
	}

	var ctxPrefix string
	linesBefore := len(g.beforeContext)
	if linesBefore > g.ctxLines {
		ctxPrefix = g.beforeContext[linesBefore-g.ctxLines-1]
		g.beforeContext = g.beforeContext[linesBefore-g.ctxLines:]
		linesBefore = g.ctxLines
	}

	g.current = &hunk{ctxPrefix: strings.TrimSuffix(ctxPrefix, "\n")}
	g.current.AddOp(Equal, g.beforeContext...)

	switch op {
	case Delete:
		g.current.fromLine, g.current.toLine =
			g.addLineNumbers(g.fromLine, g.toLine, linesBefore, i, Add)
	case Add:
		g.current.toLine, g.current.fromLine =
			g.addLineNumbers(g.toLine, g.fromLine, linesBefore, i, Delete)
	}

	g.beforeContext = nil
}

// addLineNumbers obtains the line numbers in a new chunk.
func (g *hunksGenerator) addLineNumbers(la, lb int, linesBefore int, i int, op Operation) (cla, clb int) {
	cla = la - linesBefore
	// we need to search for a reference for the next diff
	switch {
	case linesBefore != 0 && g.ctxLines != 0:
		if lb > g.ctxLines {
			clb = lb - g.ctxLines + 1
		} else {
			clb = 1
		}
	case g.ctxLines == 0:
		clb = lb
	case i != len(g.chunks)-1:
		next := g.chunks[i+1]
		if next.Type() == op || next.Type() == Equal {
			// this diff will be into this chunk
			clb = lb + 1
		}
	}

	return
}

func (g *hunksGenerator) processEqualsLines(ls []string, i int) {
	if g.current == nil {
		g.beforeContext = append(g.beforeContext, ls...)
		return
	}

	g.afterContext = append(g.afterContext, ls...)
	if len(g.afterContext) <= g.ctxLines*2 && i != len(g.chunks)-1 {
		g.current.AddOp(Equal, g.afterContext...)
		g.afterContext = nil
	} else {
		ctxLines := g.ctxLines
		if ctxLines > len(g.afterContext) {
			ctxLines = len(g.afterContext)
		}
		g.current.AddOp(Equal, g.afterContext[:ctxLines]...)
		g.hunks = append(g.hunks, g.current)

		g.current = nil
		g.beforeContext = g.afterContext[ctxLines:]
		g.afterContext = nil
	}
}

func splitLines(s string) []string {
	out := splitLinesRegexp.FindAllString(s, -1)
	if out[len(out)-1] == "" {
		out = out[:len(out)-1]
	}
	return out
}

type hunk struct {
	fromLine int
	toLine   int

	fromCount int
	toCount   int

	ctxPrefix string
	ops       []*op
}

func (h *hunk) writeTo(sb *strings.Builder, color ColorConfig) {
	sb.WriteString(color[Frag])
	sb.WriteString("@@ -")

	if h.fromCount == 1 {
		sb.WriteString(strconv.Itoa(h.fromLine))
	} else {
		sb.WriteString(strconv.Itoa(h.fromLine))
		sb.WriteByte(',')
		sb.WriteString(strconv.Itoa(h.fromCount))
	}

	sb.WriteString(" +")

	if h.toCount == 1 {
		sb.WriteString(strconv.Itoa(h.toLine))
	} else {
		sb.WriteString(strconv.Itoa(h.toLine))
		sb.WriteByte(',')
		sb.WriteString(strconv.Itoa(h.toCount))
	}

	sb.WriteString(" @@")
	sb.WriteString(color.Reset(Frag))

	if h.ctxPrefix != "" {
		sb.WriteByte(' ')
		sb.WriteString(color[Func])
		sb.WriteString(h.ctxPrefix)
		sb.WriteString(color.Reset(Func))
	}

	sb.WriteByte('\n')

	for _, op := range h.ops {
		op.writeTo(sb, color)
	}
}

func (h *hunk) AddOp(t Operation, ss ...string) {
	n := len(ss)
	switch t {
	case Add:
		h.toCount += n
	case Delete:
		h.fromCount += n
	case Equal:
		h.toCount += n
		h.fromCount += n
	}

	for _, s := range ss {
		h.ops = append(h.ops, &op{s, t})
	}
}

type op struct {
	text string
	t    Operation
}

func (o *op) writeTo(sb *strings.Builder, color ColorConfig) {
	colorKey := operationColorKey[o.t]
	sb.WriteString(color[colorKey])
	sb.WriteByte(operationChar[o.t])
	if strings.HasSuffix(o.text, "\n") {
		sb.WriteString(strings.TrimSuffix(o.text, "\n"))
	} else {
		sb.WriteString(o.text + "\n\\ No newline at end of file")
	}
	sb.WriteString(color.Reset(colorKey))
	sb.WriteByte('\n')
}
 07070100000518000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/gitignore  07070100000519000081A4000000000000000000000001645E367C00000D57000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/gitignore/dir.go   package gitignore

import (
	"bufio"
	"bytes"
	"io/ioutil"
	"os"
	"strings"

	"github.com/go-git/go-billy/v5"
	"github.com/go-git/go-git/v5/plumbing/format/config"
	gioutil "github.com/go-git/go-git/v5/utils/ioutil"
)

const (
	commentPrefix = "#"
	coreSection   = "core"
	excludesfile  = "excludesfile"
	gitDir        = ".git"
	gitignoreFile = ".gitignore"
	gitconfigFile = ".gitconfig"
	systemFile    = "/etc/gitconfig"
)

// readIgnoreFile reads a specific git ignore file.
func readIgnoreFile(fs billy.Filesystem, path []string, ignoreFile string) (ps []Pattern, err error) {
	f, err := fs.Open(fs.Join(append(path, ignoreFile)...))
	if err == nil {
		defer f.Close()

		scanner := bufio.NewScanner(f)
		for scanner.Scan() {
			s := scanner.Text()
			if !strings.HasPrefix(s, commentPrefix) && len(strings.TrimSpace(s)) > 0 {
				ps = append(ps, ParsePattern(s, path))
			}
		}
	} else if !os.IsNotExist(err) {
		return nil, err
	}

	return
}

// ReadPatterns reads gitignore patterns recursively traversing through the directory
// structure. The result is in the ascending order of priority (last higher).
func ReadPatterns(fs billy.Filesystem, path []string) (ps []Pattern, err error) {
	ps, _ = readIgnoreFile(fs, path, gitignoreFile)

	var fis []os.FileInfo
	fis, err = fs.ReadDir(fs.Join(path...))
	if err != nil {
		return
	}

	for _, fi := range fis {
		if fi.IsDir() && fi.Name() != gitDir {
			var subps []Pattern
			subps, err = ReadPatterns(fs, append(path, fi.Name()))
			if err != nil {
				return
			}

			if len(subps) > 0 {
				ps = append(ps, subps...)
			}
		}
	}

	return
}

func loadPatterns(fs billy.Filesystem, path string) (ps []Pattern, err error) {
	f, err := fs.Open(path)
	if err != nil {
		if os.IsNotExist(err) {
			return nil, nil
		}
		return nil, err
	}

	defer gioutil.CheckClose(f, &err)

	b, err := ioutil.ReadAll(f)
	if err != nil {
		return
	}

	d := config.NewDecoder(bytes.NewBuffer(b))

	raw := config.New()
	if err = d.Decode(raw); err != nil {
		return
	}

	s := raw.Section(coreSection)
	efo := s.Options.Get(excludesfile)
	if efo == "" {
		return nil, nil
	}

	ps, err = readIgnoreFile(fs, nil, efo)
	if os.IsNotExist(err) {
		return nil, nil
	}

	return
}

// LoadGlobalPatterns loads gitignore patterns from from the gitignore file
// declared in a user's ~/.gitconfig file.  If the ~/.gitconfig file does not
// exist the function will return nil.  If the core.excludesfile property
// is not declared, the function will return nil.  If the file pointed to by
// the core.excludesfile property does not exist, the function will return nil.
//
// The function assumes fs is rooted at the root filesystem.
func LoadGlobalPatterns(fs billy.Filesystem) (ps []Pattern, err error) {
	home, err := os.UserHomeDir()
	if err != nil {
		return
	}

	return loadPatterns(fs, fs.Join(home, gitconfigFile))
}

// LoadSystemPatterns loads gitignore patterns from from the gitignore file
// declared in a system's /etc/gitconfig file.  If the /etc/gitconfig file does
// not exist the function will return nil.  If the core.excludesfile property
// is not declared, the function will return nil.  If the file pointed to by
// the core.excludesfile property does not exist, the function will return nil.
//
// The function assumes fs is rooted at the root filesystem.
func LoadSystemPatterns(fs billy.Filesystem) (ps []Pattern, err error) {
	return loadPatterns(fs, systemFile)
}
 0707010000051A000081A4000000000000000000000001645E367C00000DB3000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/gitignore/doc.go   // Package gitignore implements matching file system paths to gitignore patterns that
// can be automatically read from a git repository tree in the order of definition
// priorities. It support all pattern formats as specified in the original gitignore
// documentation, copied below:
//
//   Pattern format
//   ==============
//
//		- A blank line matches no files, so it can serve as a separator for readability.
//
//		- A line starting with # serves as a comment. Put a backslash ("\") in front of
//		  the first hash for patterns that begin with a hash.
//
//		- Trailing spaces are ignored unless they are quoted with backslash ("\").
//
//		- An optional prefix "!" which negates the pattern; any matching file excluded
//		  by a previous pattern will become included again. It is not possible to
//		  re-include a file if a parent directory of that file is excluded.
//		  Git doesn’t list excluded directories for performance reasons, so
//		  any patterns on contained files have no effect, no matter where they are
//		  defined. Put a backslash ("\") in front of the first "!" for patterns
//		  that begin with a literal "!", for example, "\!important!.txt".
//
//		- If the pattern ends with a slash, it is removed for the purpose of the
//		  following description, but it would only find a match with a directory.
//		  In other words, foo/ will match a directory foo and paths underneath it,
//		  but will not match a regular file or a symbolic link foo (this is consistent
//		  with the way how pathspec works in general in Git).
//
//		- If the pattern does not contain a slash /, Git treats it as a shell glob
//		  pattern and checks for a match against the pathname relative to the location
//		  of the .gitignore file (relative to the toplevel of the work tree if not
//		  from a .gitignore file).
//
//		- Otherwise, Git treats the pattern as a shell glob suitable for consumption
//		  by fnmatch(3) with the FNM_PATHNAME flag: wildcards in the pattern will
//		  not match a / in the pathname. For example, "Documentation/*.html" matches
//		  "Documentation/git.html" but not "Documentation/ppc/ppc.html" or
//		  "tools/perf/Documentation/perf.html".
//
//		- A leading slash matches the beginning of the pathname. For example,
//		  "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c".
//
//		Two consecutive asterisks ("**") in patterns matched against full pathname
//		may have special meaning:
//
//		- A leading "**" followed by a slash means match in all directories.
//		  For example, "**/foo" matches file or directory "foo" anywhere, the same as
//		  pattern "foo". "**/foo/bar" matches file or directory "bar"
//		  anywhere that is directly under directory "foo".
//
//		- A trailing "/**" matches everything inside. For example, "abc/**" matches
//		  all files inside directory "abc", relative to the location of the
//		  .gitignore file, with infinite depth.
//
//		- A slash followed by two consecutive asterisks then a slash matches
//		  zero or more directories. For example, "a/**/b" matches "a/b", "a/x/b",
//		  "a/x/y/b" and so on.
//
//		- Other consecutive asterisks are considered invalid.
//
//   Copyright and license
//   =====================
//
//		Copyright (c) Oleg Sklyar, Silvertern and source{d}
//
//		The package code was donated to source{d} to include, modify and develop
//		further as a part of the `go-git` project, release it on the license of
//		the whole project or delete it from the project.
package gitignore
 0707010000051B000081A4000000000000000000000001645E367C000003A6000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/gitignore/matcher.go   package gitignore

// Matcher defines a global multi-pattern matcher for gitignore patterns
type Matcher interface {
	// Match matches patterns in the order of priorities. As soon as an inclusion or
	// exclusion is found, not further matching is performed.
	Match(path []string, isDir bool) bool
}

// NewMatcher constructs a new global matcher. Patterns must be given in the order of
// increasing priority. That is most generic settings files first, then the content of
// the repo .gitignore, then content of .gitignore down the path or the repo and then
// the content command line arguments.
func NewMatcher(ps []Pattern) Matcher {
	return &matcher{ps}
}

type matcher struct {
	patterns []Pattern
}

func (m *matcher) Match(path []string, isDir bool) bool {
	n := len(m.patterns)
	for i := n - 1; i >= 0; i-- {
		if match := m.patterns[i].Match(path, isDir); match > NoMatch {
			return match == Exclude
		}
	}
	return false
}
  0707010000051C000081A4000000000000000000000001645E367C00000C09000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/gitignore/pattern.go   package gitignore

import (
	"path/filepath"
	"strings"
)

// MatchResult defines outcomes of a match, no match, exclusion or inclusion.
type MatchResult int

const (
	// NoMatch defines the no match outcome of a match check
	NoMatch MatchResult = iota
	// Exclude defines an exclusion of a file as a result of a match check
	Exclude
	// Include defines an explicit inclusion of a file as a result of a match check
	Include
)

const (
	inclusionPrefix = "!"
	zeroToManyDirs  = "**"
	patternDirSep   = "/"
)

// Pattern defines a single gitignore pattern.
type Pattern interface {
	// Match matches the given path to the pattern.
	Match(path []string, isDir bool) MatchResult
}

type pattern struct {
	domain    []string
	pattern   []string
	inclusion bool
	dirOnly   bool
	isGlob    bool
}

// ParsePattern parses a gitignore pattern string into the Pattern structure.
func ParsePattern(p string, domain []string) Pattern {
	res := pattern{domain: domain}

	if strings.HasPrefix(p, inclusionPrefix) {
		res.inclusion = true
		p = p[1:]
	}

	if !strings.HasSuffix(p, "\\ ") {
		p = strings.TrimRight(p, " ")
	}

	if strings.HasSuffix(p, patternDirSep) {
		res.dirOnly = true
		p = p[:len(p)-1]
	}

	if strings.Contains(p, patternDirSep) {
		res.isGlob = true
	}

	res.pattern = strings.Split(p, patternDirSep)
	return &res
}

func (p *pattern) Match(path []string, isDir bool) MatchResult {
	if len(path) <= len(p.domain) {
		return NoMatch
	}
	for i, e := range p.domain {
		if path[i] != e {
			return NoMatch
		}
	}

	path = path[len(p.domain):]
	if p.isGlob && !p.globMatch(path, isDir) {
		return NoMatch
	} else if !p.isGlob && !p.simpleNameMatch(path, isDir) {
		return NoMatch
	}

	if p.inclusion {
		return Include
	} else {
		return Exclude
	}
}

func (p *pattern) simpleNameMatch(path []string, isDir bool) bool {
	for i, name := range path {
		if match, err := filepath.Match(p.pattern[0], name); err != nil {
			return false
		} else if !match {
			continue
		}
		if p.dirOnly && !isDir && i == len(path)-1 {
			return false
		}
		return true
	}
	return false
}

func (p *pattern) globMatch(path []string, isDir bool) bool {
	matched := false
	canTraverse := false
	for i, pattern := range p.pattern {
		if pattern == "" {
			canTraverse = false
			continue
		}
		if pattern == zeroToManyDirs {
			if i == len(p.pattern)-1 {
				break
			}
			canTraverse = true
			continue
		}
		if strings.Contains(pattern, zeroToManyDirs) {
			return false
		}
		if len(path) == 0 {
			return false
		}
		if canTraverse {
			canTraverse = false
			for len(path) > 0 {
				e := path[0]
				path = path[1:]
				if match, err := filepath.Match(pattern, e); err != nil {
					return false
				} else if match {
					matched = true
					break
				} else if len(path) == 0 {
					// if nothing left then fail
					matched = false
				}
			}
		} else {
			if match, err := filepath.Match(pattern, path[0]); err != nil || !match {
				return false
			}
			matched = true
			path = path[1:]
		}
	}
	if matched && p.dirOnly && !isDir && len(path) == 0 {
		matched = false
	}
	return matched
}
   0707010000051D000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/idxfile    0707010000051E000081A4000000000000000000000001645E367C00000D58000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/idxfile/decoder.go package idxfile

import (
	"bufio"
	"bytes"
	"errors"
	"io"

	"github.com/go-git/go-git/v5/utils/binary"
)

var (
	// ErrUnsupportedVersion is returned by Decode when the idx file version
	// is not supported.
	ErrUnsupportedVersion = errors.New("Unsupported version")
	// ErrMalformedIdxFile is returned by Decode when the idx file is corrupted.
	ErrMalformedIdxFile = errors.New("Malformed IDX file")
)

const (
	fanout         = 256
	objectIDLength = 20
)

// Decoder reads and decodes idx files from an input stream.
type Decoder struct {
	*bufio.Reader
}

// NewDecoder builds a new idx stream decoder, that reads from r.
func NewDecoder(r io.Reader) *Decoder {
	return &Decoder{bufio.NewReader(r)}
}

// Decode reads from the stream and decode the content into the MemoryIndex struct.
func (d *Decoder) Decode(idx *MemoryIndex) error {
	if err := validateHeader(d); err != nil {
		return err
	}

	flow := []func(*MemoryIndex, io.Reader) error{
		readVersion,
		readFanout,
		readObjectNames,
		readCRC32,
		readOffsets,
		readChecksums,
	}

	for _, f := range flow {
		if err := f(idx, d); err != nil {
			return err
		}
	}

	return nil
}

func validateHeader(r io.Reader) error {
	var h = make([]byte, 4)
	if _, err := io.ReadFull(r, h); err != nil {
		return err
	}

	if !bytes.Equal(h, idxHeader) {
		return ErrMalformedIdxFile
	}

	return nil
}

func readVersion(idx *MemoryIndex, r io.Reader) error {
	v, err := binary.ReadUint32(r)
	if err != nil {
		return err
	}

	if v > VersionSupported {
		return ErrUnsupportedVersion
	}

	idx.Version = v
	return nil
}

func readFanout(idx *MemoryIndex, r io.Reader) error {
	for k := 0; k < fanout; k++ {
		n, err := binary.ReadUint32(r)
		if err != nil {
			return err
		}

		idx.Fanout[k] = n
		idx.FanoutMapping[k] = noMapping
	}

	return nil
}

func readObjectNames(idx *MemoryIndex, r io.Reader) error {
	for k := 0; k < fanout; k++ {
		var buckets uint32
		if k == 0 {
			buckets = idx.Fanout[k]
		} else {
			buckets = idx.Fanout[k] - idx.Fanout[k-1]
		}

		if buckets == 0 {
			continue
		}

		idx.FanoutMapping[k] = len(idx.Names)

		nameLen := int(buckets * objectIDLength)
		bin := make([]byte, nameLen)
		if _, err := io.ReadFull(r, bin); err != nil {
			return err
		}

		idx.Names = append(idx.Names, bin)
		idx.Offset32 = append(idx.Offset32, make([]byte, buckets*4))
		idx.CRC32 = append(idx.CRC32, make([]byte, buckets*4))
	}

	return nil
}

func readCRC32(idx *MemoryIndex, r io.Reader) error {
	for k := 0; k < fanout; k++ {
		if pos := idx.FanoutMapping[k]; pos != noMapping {
			if _, err := io.ReadFull(r, idx.CRC32[pos]); err != nil {
				return err
			}
		}
	}

	return nil
}

func readOffsets(idx *MemoryIndex, r io.Reader) error {
	var o64cnt int
	for k := 0; k < fanout; k++ {
		if pos := idx.FanoutMapping[k]; pos != noMapping {
			if _, err := io.ReadFull(r, idx.Offset32[pos]); err != nil {
				return err
			}

			for p := 0; p < len(idx.Offset32[pos]); p += 4 {
				if idx.Offset32[pos][p]&(byte(1)<<7) > 0 {
					o64cnt++
				}
			}
		}
	}

	if o64cnt > 0 {
		idx.Offset64 = make([]byte, o64cnt*8)
		if _, err := io.ReadFull(r, idx.Offset64); err != nil {
			return err
		}
	}

	return nil
}

func readChecksums(idx *MemoryIndex, r io.Reader) error {
	if _, err := io.ReadFull(r, idx.PackfileChecksum[:]); err != nil {
		return err
	}

	if _, err := io.ReadFull(r, idx.IdxChecksum[:]); err != nil {
		return err
	}

	return nil
}
0707010000051F000081A4000000000000000000000001645E367C00001483000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/idxfile/doc.go // Package idxfile implements encoding and decoding of packfile idx files.
//
//  == Original (version 1) pack-*.idx files have the following format:
//
//    - The header consists of 256 4-byte network byte order
//      integers.  N-th entry of this table records the number of
//      objects in the corresponding pack, the first byte of whose
//      object name is less than or equal to N.  This is called the
//      'first-level fan-out' table.
//
//    - The header is followed by sorted 24-byte entries, one entry
//      per object in the pack.  Each entry is:
//
//     4-byte network byte order integer, recording where the
//     object is stored in the packfile as the offset from the
//     beginning.
//
//     20-byte object name.
//
//   - The file is concluded with a trailer:
//
//     A copy of the 20-byte SHA1 checksum at the end of
//     corresponding packfile.
//
//     20-byte SHA1-checksum of all of the above.
//
//   Pack Idx file:
//
//        --  +--------------------------------+
//   fanout   | fanout[0] = 2 (for example)    |-.
//   table    +--------------------------------+ |
//            | fanout[1]                      | |
//            +--------------------------------+ |
//            | fanout[2]                      | |
//            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
//            | fanout[255] = total objects    |---.
//        --  +--------------------------------+ | |
//   main     | offset                         | | |
//   index    | object name 00XXXXXXXXXXXXXXXX | | |
//   tab      +--------------------------------+ | |
//            | offset                         | | |
//            | object name 00XXXXXXXXXXXXXXXX | | |
//            +--------------------------------+<+ |
//          .-| offset                         |   |
//          | | object name 01XXXXXXXXXXXXXXXX |   |
//          | +--------------------------------+   |
//          | | offset                         |   |
//          | | object name 01XXXXXXXXXXXXXXXX |   |
//          | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   |
//          | | offset                         |   |
//          | | object name FFXXXXXXXXXXXXXXXX |   |
//        --| +--------------------------------+<--+
//  trailer | | packfile checksum              |
//          | +--------------------------------+
//          | | idxfile checksum               |
//          | +--------------------------------+
//          .---------.
//                    |
//  Pack file entry: <+
//
//     packed object header:
//     1-byte size extension bit (MSB)
//           type (next 3 bit)
//           size0 (lower 4-bit)
//         n-byte sizeN (as long as MSB is set, each 7-bit)
//         size0..sizeN form 4+7+7+..+7 bit integer, size0
//         is the least significant part, and sizeN is the
//         most significant part.
//     packed object data:
//         If it is not DELTA, then deflated bytes (the size above
//         is the size before compression).
//     If it is REF_DELTA, then
//       20-byte base object name SHA1 (the size above is the
//         size of the delta data that follows).
//           delta data, deflated.
//     If it is OFS_DELTA, then
//       n-byte offset (see below) interpreted as a negative
//         offset from the type-byte of the header of the
//         ofs-delta entry (the size above is the size of
//         the delta data that follows).
//       delta data, deflated.
//
//     offset encoding:
//       n bytes with MSB set in all but the last one.
//       The offset is then the number constructed by
//       concatenating the lower 7 bit of each byte, and
//       for n >= 2 adding 2^7 + 2^14 + ... + 2^(7*(n-1))
//       to the result.
//
//   == Version 2 pack-*.idx files support packs larger than 4 GiB, and
//      have some other reorganizations.  They have the format:
//
//     - A 4-byte magic number '\377tOc' which is an unreasonable
//       fanout[0] value.
//
//     - A 4-byte version number (= 2)
//
//     - A 256-entry fan-out table just like v1.
//
//     - A table of sorted 20-byte SHA1 object names.  These are
//       packed together without offset values to reduce the cache
//       footprint of the binary search for a specific object name.
//
//     - A table of 4-byte CRC32 values of the packed object data.
//       This is new in v2 so compressed data can be copied directly
//       from pack to pack during repacking without undetected
//       data corruption.
//
//     - A table of 4-byte offset values (in network byte order).
//       These are usually 31-bit pack file offsets, but large
//       offsets are encoded as an index into the next table with
//       the msbit set.
//
//     - A table of 8-byte offset entries (empty for pack files less
//       than 2 GiB).  Pack files are organized with heavily used
//       objects toward the front, so most object references should
//       not need to refer to this table.
//
//     - The same trailer as a v1 pack file:
//
//       A copy of the 20-byte SHA1 checksum at the end of
//       corresponding packfile.
//
//       20-byte SHA1-checksum of all of the above.
//
// Source:
// https://www.kernel.org/pub/software/scm/git/docs/v1.7.5/technical/pack-format.txt
package idxfile
 07070100000520000081A4000000000000000000000001645E367C000009A7000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/idxfile/encoder.go package idxfile

import (
	"crypto/sha1"
	"hash"
	"io"

	"github.com/go-git/go-git/v5/utils/binary"
)

// Encoder writes MemoryIndex structs to an output stream.
type Encoder struct {
	io.Writer
	hash hash.Hash
}

// NewEncoder returns a new stream encoder that writes to w.
func NewEncoder(w io.Writer) *Encoder {
	h := sha1.New()
	mw := io.MultiWriter(w, h)
	return &Encoder{mw, h}
}

// Encode encodes an MemoryIndex to the encoder writer.
func (e *Encoder) Encode(idx *MemoryIndex) (int, error) {
	flow := []func(*MemoryIndex) (int, error){
		e.encodeHeader,
		e.encodeFanout,
		e.encodeHashes,
		e.encodeCRC32,
		e.encodeOffsets,
		e.encodeChecksums,
	}

	sz := 0
	for _, f := range flow {
		i, err := f(idx)
		sz += i

		if err != nil {
			return sz, err
		}
	}

	return sz, nil
}

func (e *Encoder) encodeHeader(idx *MemoryIndex) (int, error) {
	c, err := e.Write(idxHeader)
	if err != nil {
		return c, err
	}

	return c + 4, binary.WriteUint32(e, idx.Version)
}

func (e *Encoder) encodeFanout(idx *MemoryIndex) (int, error) {
	for _, c := range idx.Fanout {
		if err := binary.WriteUint32(e, c); err != nil {
			return 0, err
		}
	}

	return fanout * 4, nil
}

func (e *Encoder) encodeHashes(idx *MemoryIndex) (int, error) {
	var size int
	for k := 0; k < fanout; k++ {
		pos := idx.FanoutMapping[k]
		if pos == noMapping {
			continue
		}

		n, err := e.Write(idx.Names[pos])
		if err != nil {
			return size, err
		}
		size += n
	}
	return size, nil
}

func (e *Encoder) encodeCRC32(idx *MemoryIndex) (int, error) {
	var size int
	for k := 0; k < fanout; k++ {
		pos := idx.FanoutMapping[k]
		if pos == noMapping {
			continue
		}

		n, err := e.Write(idx.CRC32[pos])
		if err != nil {
			return size, err
		}

		size += n
	}

	return size, nil
}

func (e *Encoder) encodeOffsets(idx *MemoryIndex) (int, error) {
	var size int
	for k := 0; k < fanout; k++ {
		pos := idx.FanoutMapping[k]
		if pos == noMapping {
			continue
		}

		n, err := e.Write(idx.Offset32[pos])
		if err != nil {
			return size, err
		}

		size += n
	}

	if len(idx.Offset64) > 0 {
		n, err := e.Write(idx.Offset64)
		if err != nil {
			return size, err
		}

		size += n
	}

	return size, nil
}

func (e *Encoder) encodeChecksums(idx *MemoryIndex) (int, error) {
	if _, err := e.Write(idx.PackfileChecksum[:]); err != nil {
		return 0, err
	}

	copy(idx.IdxChecksum[:], e.hash.Sum(nil)[:20])
	if _, err := e.Write(idx.IdxChecksum[:]); err != nil {
		return 0, err
	}

	return 40, nil
}
 07070100000521000081A4000000000000000000000001645E367C00001E90000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/idxfile/idxfile.go package idxfile

import (
	"bytes"
	"io"
	"sort"

	encbin "encoding/binary"

	"github.com/go-git/go-git/v5/plumbing"
)

const (
	// VersionSupported is the only idx version supported.
	VersionSupported = 2

	noMapping = -1
)

var (
	idxHeader = []byte{255, 't', 'O', 'c'}
)

// Index represents an index of a packfile.
type Index interface {
	// Contains checks whether the given hash is in the index.
	Contains(h plumbing.Hash) (bool, error)
	// FindOffset finds the offset in the packfile for the object with
	// the given hash.
	FindOffset(h plumbing.Hash) (int64, error)
	// FindCRC32 finds the CRC32 of the object with the given hash.
	FindCRC32(h plumbing.Hash) (uint32, error)
	// FindHash finds the hash for the object with the given offset.
	FindHash(o int64) (plumbing.Hash, error)
	// Count returns the number of entries in the index.
	Count() (int64, error)
	// Entries returns an iterator to retrieve all index entries.
	Entries() (EntryIter, error)
	// EntriesByOffset returns an iterator to retrieve all index entries ordered
	// by offset.
	EntriesByOffset() (EntryIter, error)
}

// MemoryIndex is the in memory representation of an idx file.
type MemoryIndex struct {
	Version uint32
	Fanout  [256]uint32
	// FanoutMapping maps the position in the fanout table to the position
	// in the Names, Offset32 and CRC32 slices. This improves the memory
	// usage by not needing an array with unnecessary empty slots.
	FanoutMapping    [256]int
	Names            [][]byte
	Offset32         [][]byte
	CRC32            [][]byte
	Offset64         []byte
	PackfileChecksum [20]byte
	IdxChecksum      [20]byte

	offsetHash       map[int64]plumbing.Hash
	offsetHashIsFull bool
}

var _ Index = (*MemoryIndex)(nil)

// NewMemoryIndex returns an instance of a new MemoryIndex.
func NewMemoryIndex() *MemoryIndex {
	return &MemoryIndex{}
}

func (idx *MemoryIndex) findHashIndex(h plumbing.Hash) (int, bool) {
	k := idx.FanoutMapping[h[0]]
	if k == noMapping {
		return 0, false
	}

	if len(idx.Names) <= k {
		return 0, false
	}

	data := idx.Names[k]
	high := uint64(len(idx.Offset32[k])) >> 2
	if high == 0 {
		return 0, false
	}

	low := uint64(0)
	for {
		mid := (low + high) >> 1
		offset := mid * objectIDLength

		cmp := bytes.Compare(h[:], data[offset:offset+objectIDLength])
		if cmp < 0 {
			high = mid
		} else if cmp == 0 {
			return int(mid), true
		} else {
			low = mid + 1
		}

		if low >= high {
			break
		}
	}

	return 0, false
}

// Contains implements the Index interface.
func (idx *MemoryIndex) Contains(h plumbing.Hash) (bool, error) {
	_, ok := idx.findHashIndex(h)
	return ok, nil
}

// FindOffset implements the Index interface.
func (idx *MemoryIndex) FindOffset(h plumbing.Hash) (int64, error) {
	if len(idx.FanoutMapping) <= int(h[0]) {
		return 0, plumbing.ErrObjectNotFound
	}

	k := idx.FanoutMapping[h[0]]
	i, ok := idx.findHashIndex(h)
	if !ok {
		return 0, plumbing.ErrObjectNotFound
	}

	offset := idx.getOffset(k, i)

	if !idx.offsetHashIsFull {
		// Save the offset for reverse lookup
		if idx.offsetHash == nil {
			idx.offsetHash = make(map[int64]plumbing.Hash)
		}
		idx.offsetHash[int64(offset)] = h
	}

	return int64(offset), nil
}

const isO64Mask = uint64(1) << 31

func (idx *MemoryIndex) getOffset(firstLevel, secondLevel int) uint64 {
	offset := secondLevel << 2
	ofs := encbin.BigEndian.Uint32(idx.Offset32[firstLevel][offset : offset+4])

	if (uint64(ofs) & isO64Mask) != 0 {
		offset := 8 * (uint64(ofs) & ^isO64Mask)
		n := encbin.BigEndian.Uint64(idx.Offset64[offset : offset+8])
		return n
	}

	return uint64(ofs)
}

// FindCRC32 implements the Index interface.
func (idx *MemoryIndex) FindCRC32(h plumbing.Hash) (uint32, error) {
	k := idx.FanoutMapping[h[0]]
	i, ok := idx.findHashIndex(h)
	if !ok {
		return 0, plumbing.ErrObjectNotFound
	}

	return idx.getCRC32(k, i), nil
}

func (idx *MemoryIndex) getCRC32(firstLevel, secondLevel int) uint32 {
	offset := secondLevel << 2
	return encbin.BigEndian.Uint32(idx.CRC32[firstLevel][offset : offset+4])
}

// FindHash implements the Index interface.
func (idx *MemoryIndex) FindHash(o int64) (plumbing.Hash, error) {
	var hash plumbing.Hash
	var ok bool

	if idx.offsetHash != nil {
		if hash, ok = idx.offsetHash[o]; ok {
			return hash, nil
		}
	}

	// Lazily generate the reverse offset/hash map if required.
	if !idx.offsetHashIsFull || idx.offsetHash == nil {
		if err := idx.genOffsetHash(); err != nil {
			return plumbing.ZeroHash, err
		}

		hash, ok = idx.offsetHash[o]
	}

	if !ok {
		return plumbing.ZeroHash, plumbing.ErrObjectNotFound
	}

	return hash, nil
}

// genOffsetHash generates the offset/hash mapping for reverse search.
func (idx *MemoryIndex) genOffsetHash() error {
	count, err := idx.Count()
	if err != nil {
		return err
	}

	idx.offsetHash = make(map[int64]plumbing.Hash, count)
	idx.offsetHashIsFull = true

	var hash plumbing.Hash
	i := uint32(0)
	for firstLevel, fanoutValue := range idx.Fanout {
		mappedFirstLevel := idx.FanoutMapping[firstLevel]
		for secondLevel := uint32(0); i < fanoutValue; i++ {
			copy(hash[:], idx.Names[mappedFirstLevel][secondLevel*objectIDLength:])
			offset := int64(idx.getOffset(mappedFirstLevel, int(secondLevel)))
			idx.offsetHash[offset] = hash
			secondLevel++
		}
	}

	return nil
}

// Count implements the Index interface.
func (idx *MemoryIndex) Count() (int64, error) {
	return int64(idx.Fanout[fanout-1]), nil
}

// Entries implements the Index interface.
func (idx *MemoryIndex) Entries() (EntryIter, error) {
	return &idxfileEntryIter{idx, 0, 0, 0}, nil
}

// EntriesByOffset implements the Index interface.
func (idx *MemoryIndex) EntriesByOffset() (EntryIter, error) {
	count, err := idx.Count()
	if err != nil {
		return nil, err
	}

	iter := &idxfileEntryOffsetIter{
		entries: make(entriesByOffset, count),
	}

	entries, err := idx.Entries()
	if err != nil {
		return nil, err
	}

	for pos := 0; int64(pos) < count; pos++ {
		entry, err := entries.Next()
		if err != nil {
			return nil, err
		}

		iter.entries[pos] = entry
	}

	sort.Sort(iter.entries)

	return iter, nil
}

// EntryIter is an iterator that will return the entries in a packfile index.
type EntryIter interface {
	// Next returns the next entry in the packfile index.
	Next() (*Entry, error)
	// Close closes the iterator.
	Close() error
}

type idxfileEntryIter struct {
	idx                     *MemoryIndex
	total                   int
	firstLevel, secondLevel int
}

func (i *idxfileEntryIter) Next() (*Entry, error) {
	for {
		if i.firstLevel >= fanout {
			return nil, io.EOF
		}

		if i.total >= int(i.idx.Fanout[i.firstLevel]) {
			i.firstLevel++
			i.secondLevel = 0
			continue
		}

		mappedFirstLevel := i.idx.FanoutMapping[i.firstLevel]
		entry := new(Entry)
		copy(entry.Hash[:], i.idx.Names[mappedFirstLevel][i.secondLevel*objectIDLength:])
		entry.Offset = i.idx.getOffset(mappedFirstLevel, i.secondLevel)
		entry.CRC32 = i.idx.getCRC32(mappedFirstLevel, i.secondLevel)

		i.secondLevel++
		i.total++

		return entry, nil
	}
}

func (i *idxfileEntryIter) Close() error {
	i.firstLevel = fanout
	return nil
}

// Entry is the in memory representation of an object entry in the idx file.
type Entry struct {
	Hash   plumbing.Hash
	CRC32  uint32
	Offset uint64
}

type idxfileEntryOffsetIter struct {
	entries entriesByOffset
	pos     int
}

func (i *idxfileEntryOffsetIter) Next() (*Entry, error) {
	if i.pos >= len(i.entries) {
		return nil, io.EOF
	}

	entry := i.entries[i.pos]
	i.pos++

	return entry, nil
}

func (i *idxfileEntryOffsetIter) Close() error {
	i.pos = len(i.entries) + 1
	return nil
}

type entriesByOffset []*Entry

func (o entriesByOffset) Len() int {
	return len(o)
}

func (o entriesByOffset) Less(i int, j int) bool {
	return o[i].Offset < o[j].Offset
}

func (o entriesByOffset) Swap(i int, j int) {
	o[i], o[j] = o[j], o[i]
}
07070100000522000081A4000000000000000000000001645E367C00000F95000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/idxfile/writer.go  package idxfile

import (
	"bytes"
	"fmt"
	"math"
	"sort"
	"sync"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/utils/binary"
)

// objects implements sort.Interface and uses hash as sorting key.
type objects []Entry

// Writer implements a packfile Observer interface and is used to generate
// indexes.
type Writer struct {
	m sync.Mutex

	count    uint32
	checksum plumbing.Hash
	objects  objects
	offset64 uint32
	finished bool
	index    *MemoryIndex
	added    map[plumbing.Hash]struct{}
}

// Index returns a previously created MemoryIndex or creates a new one if
// needed.
func (w *Writer) Index() (*MemoryIndex, error) {
	w.m.Lock()
	defer w.m.Unlock()

	if w.index == nil {
		return w.createIndex()
	}

	return w.index, nil
}

// Add appends new object data.
func (w *Writer) Add(h plumbing.Hash, pos uint64, crc uint32) {
	w.m.Lock()
	defer w.m.Unlock()

	if w.added == nil {
		w.added = make(map[plumbing.Hash]struct{})
	}

	if _, ok := w.added[h]; !ok {
		w.added[h] = struct{}{}
		w.objects = append(w.objects, Entry{h, crc, pos})
	}

}

func (w *Writer) Finished() bool {
	return w.finished
}

// OnHeader implements packfile.Observer interface.
func (w *Writer) OnHeader(count uint32) error {
	w.count = count
	w.objects = make(objects, 0, count)
	return nil
}

// OnInflatedObjectHeader implements packfile.Observer interface.
func (w *Writer) OnInflatedObjectHeader(t plumbing.ObjectType, objSize int64, pos int64) error {
	return nil
}

// OnInflatedObjectContent implements packfile.Observer interface.
func (w *Writer) OnInflatedObjectContent(h plumbing.Hash, pos int64, crc uint32, _ []byte) error {
	w.Add(h, uint64(pos), crc)
	return nil
}

// OnFooter implements packfile.Observer interface.
func (w *Writer) OnFooter(h plumbing.Hash) error {
	w.checksum = h
	w.finished = true
	_, err := w.createIndex()
	if err != nil {
		return err
	}

	return nil
}

// creatIndex returns a filled MemoryIndex with the information filled by
// the observer callbacks.
func (w *Writer) createIndex() (*MemoryIndex, error) {
	if !w.finished {
		return nil, fmt.Errorf("the index still hasn't finished building")
	}

	idx := new(MemoryIndex)
	w.index = idx

	sort.Sort(w.objects)

	// unmap all fans by default
	for i := range idx.FanoutMapping {
		idx.FanoutMapping[i] = noMapping
	}

	buf := new(bytes.Buffer)

	last := -1
	bucket := -1
	for i, o := range w.objects {
		fan := o.Hash[0]

		// fill the gaps between fans
		for j := last + 1; j < int(fan); j++ {
			idx.Fanout[j] = uint32(i)
		}

		// update the number of objects for this position
		idx.Fanout[fan] = uint32(i + 1)

		// we move from one bucket to another, update counters and allocate
		// memory
		if last != int(fan) {
			bucket++
			idx.FanoutMapping[fan] = bucket
			last = int(fan)

			idx.Names = append(idx.Names, make([]byte, 0))
			idx.Offset32 = append(idx.Offset32, make([]byte, 0))
			idx.CRC32 = append(idx.CRC32, make([]byte, 0))
		}

		idx.Names[bucket] = append(idx.Names[bucket], o.Hash[:]...)

		offset := o.Offset
		if offset > math.MaxInt32 {
			offset = w.addOffset64(offset)
		}

		buf.Truncate(0)
		binary.WriteUint32(buf, uint32(offset))
		idx.Offset32[bucket] = append(idx.Offset32[bucket], buf.Bytes()...)

		buf.Truncate(0)
		binary.WriteUint32(buf, o.CRC32)
		idx.CRC32[bucket] = append(idx.CRC32[bucket], buf.Bytes()...)
	}

	for j := last + 1; j < 256; j++ {
		idx.Fanout[j] = uint32(len(w.objects))
	}

	idx.Version = VersionSupported
	idx.PackfileChecksum = w.checksum

	return idx, nil
}

func (w *Writer) addOffset64(pos uint64) uint64 {
	buf := new(bytes.Buffer)
	binary.WriteUint64(buf, pos)
	w.index.Offset64 = append(w.index.Offset64, buf.Bytes()...)

	index := uint64(w.offset64 | (1 << 31))
	w.offset64++

	return index
}

func (o objects) Len() int {
	return len(o)
}

func (o objects) Less(i int, j int) bool {
	cmp := bytes.Compare(o[i].Hash[:], o[j].Hash[:])
	return cmp < 0
}

func (o objects) Swap(i int, j int) {
	o[i], o[j] = o[j], o[i]
}
   07070100000523000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/index  07070100000524000081A4000000000000000000000001645E367C0000231E000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/index/decoder.go   package index

import (
	"bufio"
	"bytes"
	"crypto/sha1"
	"errors"
	"hash"
	"io"
	"io/ioutil"
	"strconv"
	"time"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/utils/binary"
)

var (
	// DecodeVersionSupported is the range of supported index versions
	DecodeVersionSupported = struct{ Min, Max uint32 }{Min: 2, Max: 4}

	// ErrMalformedSignature is returned by Decode when the index header file is
	// malformed
	ErrMalformedSignature = errors.New("malformed index signature file")
	// ErrInvalidChecksum is returned by Decode if the SHA1 hash mismatch with
	// the read content
	ErrInvalidChecksum = errors.New("invalid checksum")

	errUnknownExtension = errors.New("unknown extension")
)

const (
	entryHeaderLength = 62
	entryExtended     = 0x4000
	entryValid        = 0x8000
	nameMask          = 0xfff
	intentToAddMask   = 1 << 13
	skipWorkTreeMask  = 1 << 14
)

// A Decoder reads and decodes index files from an input stream.
type Decoder struct {
	r         io.Reader
	hash      hash.Hash
	lastEntry *Entry

	extReader *bufio.Reader
}

// NewDecoder returns a new decoder that reads from r.
func NewDecoder(r io.Reader) *Decoder {
	h := sha1.New()
	return &Decoder{
		r:         io.TeeReader(r, h),
		hash:      h,
		extReader: bufio.NewReader(nil),
	}
}

// Decode reads the whole index object from its input and stores it in the
// value pointed to by idx.
func (d *Decoder) Decode(idx *Index) error {
	var err error
	idx.Version, err = validateHeader(d.r)
	if err != nil {
		return err
	}

	entryCount, err := binary.ReadUint32(d.r)
	if err != nil {
		return err
	}

	if err := d.readEntries(idx, int(entryCount)); err != nil {
		return err
	}

	return d.readExtensions(idx)
}

func (d *Decoder) readEntries(idx *Index, count int) error {
	for i := 0; i < count; i++ {
		e, err := d.readEntry(idx)
		if err != nil {
			return err
		}

		d.lastEntry = e
		idx.Entries = append(idx.Entries, e)
	}

	return nil
}

func (d *Decoder) readEntry(idx *Index) (*Entry, error) {
	e := &Entry{}

	var msec, mnsec, sec, nsec uint32
	var flags uint16

	flow := []interface{}{
		&sec, &nsec,
		&msec, &mnsec,
		&e.Dev,
		&e.Inode,
		&e.Mode,
		&e.UID,
		&e.GID,
		&e.Size,
		&e.Hash,
		&flags,
	}

	if err := binary.Read(d.r, flow...); err != nil {
		return nil, err
	}

	read := entryHeaderLength

	if sec != 0 || nsec != 0 {
		e.CreatedAt = time.Unix(int64(sec), int64(nsec))
	}

	if msec != 0 || mnsec != 0 {
		e.ModifiedAt = time.Unix(int64(msec), int64(mnsec))
	}

	e.Stage = Stage(flags>>12) & 0x3

	if flags&entryExtended != 0 {
		extended, err := binary.ReadUint16(d.r)
		if err != nil {
			return nil, err
		}

		read += 2
		e.IntentToAdd = extended&intentToAddMask != 0
		e.SkipWorktree = extended&skipWorkTreeMask != 0
	}

	if err := d.readEntryName(idx, e, flags); err != nil {
		return nil, err
	}

	return e, d.padEntry(idx, e, read)
}

func (d *Decoder) readEntryName(idx *Index, e *Entry, flags uint16) error {
	var name string
	var err error

	switch idx.Version {
	case 2, 3:
		len := flags & nameMask
		name, err = d.doReadEntryName(len)
	case 4:
		name, err = d.doReadEntryNameV4()
	default:
		return ErrUnsupportedVersion
	}

	if err != nil {
		return err
	}

	e.Name = name
	return nil
}

func (d *Decoder) doReadEntryNameV4() (string, error) {
	l, err := binary.ReadVariableWidthInt(d.r)
	if err != nil {
		return "", err
	}

	var base string
	if d.lastEntry != nil {
		base = d.lastEntry.Name[:len(d.lastEntry.Name)-int(l)]
	}

	name, err := binary.ReadUntil(d.r, '\x00')
	if err != nil {
		return "", err
	}

	return base + string(name), nil
}

func (d *Decoder) doReadEntryName(len uint16) (string, error) {
	name := make([]byte, len)
	_, err := io.ReadFull(d.r, name)

	return string(name), err
}

// Index entries are padded out to the next 8 byte alignment
// for historical reasons related to how C Git read the files.
func (d *Decoder) padEntry(idx *Index, e *Entry, read int) error {
	if idx.Version == 4 {
		return nil
	}

	entrySize := read + len(e.Name)
	padLen := 8 - entrySize%8
	_, err := io.CopyN(ioutil.Discard, d.r, int64(padLen))
	return err
}

func (d *Decoder) readExtensions(idx *Index) error {
	// TODO: support 'Split index' and 'Untracked cache' extensions, take in
	// count that they are not supported by jgit or libgit

	var expected []byte
	var err error

	var header [4]byte
	for {
		expected = d.hash.Sum(nil)

		var n int
		if n, err = io.ReadFull(d.r, header[:]); err != nil {
			if n == 0 {
				err = io.EOF
			}

			break
		}

		err = d.readExtension(idx, header[:])
		if err != nil {
			break
		}
	}

	if err != errUnknownExtension {
		return err
	}

	return d.readChecksum(expected, header)
}

func (d *Decoder) readExtension(idx *Index, header []byte) error {
	switch {
	case bytes.Equal(header, treeExtSignature):
		r, err := d.getExtensionReader()
		if err != nil {
			return err
		}

		idx.Cache = &Tree{}
		d := &treeExtensionDecoder{r}
		if err := d.Decode(idx.Cache); err != nil {
			return err
		}
	case bytes.Equal(header, resolveUndoExtSignature):
		r, err := d.getExtensionReader()
		if err != nil {
			return err
		}

		idx.ResolveUndo = &ResolveUndo{}
		d := &resolveUndoDecoder{r}
		if err := d.Decode(idx.ResolveUndo); err != nil {
			return err
		}
	case bytes.Equal(header, endOfIndexEntryExtSignature):
		r, err := d.getExtensionReader()
		if err != nil {
			return err
		}

		idx.EndOfIndexEntry = &EndOfIndexEntry{}
		d := &endOfIndexEntryDecoder{r}
		if err := d.Decode(idx.EndOfIndexEntry); err != nil {
			return err
		}
	default:
		return errUnknownExtension
	}

	return nil
}

func (d *Decoder) getExtensionReader() (*bufio.Reader, error) {
	len, err := binary.ReadUint32(d.r)
	if err != nil {
		return nil, err
	}

	d.extReader.Reset(&io.LimitedReader{R: d.r, N: int64(len)})
	return d.extReader, nil
}

func (d *Decoder) readChecksum(expected []byte, alreadyRead [4]byte) error {
	var h plumbing.Hash
	copy(h[:4], alreadyRead[:])

	if _, err := io.ReadFull(d.r, h[4:]); err != nil {
		return err
	}

	if !bytes.Equal(h[:], expected) {
		return ErrInvalidChecksum
	}

	return nil
}

func validateHeader(r io.Reader) (version uint32, err error) {
	var s = make([]byte, 4)
	if _, err := io.ReadFull(r, s); err != nil {
		return 0, err
	}

	if !bytes.Equal(s, indexSignature) {
		return 0, ErrMalformedSignature
	}

	version, err = binary.ReadUint32(r)
	if err != nil {
		return 0, err
	}

	if version < DecodeVersionSupported.Min || version > DecodeVersionSupported.Max {
		return 0, ErrUnsupportedVersion
	}

	return
}

type treeExtensionDecoder struct {
	r *bufio.Reader
}

func (d *treeExtensionDecoder) Decode(t *Tree) error {
	for {
		e, err := d.readEntry()
		if err != nil {
			if err == io.EOF {
				return nil
			}

			return err
		}

		if e == nil {
			continue
		}

		t.Entries = append(t.Entries, *e)
	}
}

func (d *treeExtensionDecoder) readEntry() (*TreeEntry, error) {
	e := &TreeEntry{}

	path, err := binary.ReadUntil(d.r, '\x00')
	if err != nil {
		return nil, err
	}

	e.Path = string(path)

	count, err := binary.ReadUntil(d.r, ' ')
	if err != nil {
		return nil, err
	}

	i, err := strconv.Atoi(string(count))
	if err != nil {
		return nil, err
	}

	// An entry can be in an invalidated state and is represented by having a
	// negative number in the entry_count field.
	if i == -1 {
		return nil, nil
	}

	e.Entries = i
	trees, err := binary.ReadUntil(d.r, '\n')
	if err != nil {
		return nil, err
	}

	i, err = strconv.Atoi(string(trees))
	if err != nil {
		return nil, err
	}

	e.Trees = i
	_, err = io.ReadFull(d.r, e.Hash[:])
	if err != nil {
		return nil, err
	}
	return e, nil
}

type resolveUndoDecoder struct {
	r *bufio.Reader
}

func (d *resolveUndoDecoder) Decode(ru *ResolveUndo) error {
	for {
		e, err := d.readEntry()
		if err != nil {
			if err == io.EOF {
				return nil
			}

			return err
		}

		ru.Entries = append(ru.Entries, *e)
	}
}

func (d *resolveUndoDecoder) readEntry() (*ResolveUndoEntry, error) {
	e := &ResolveUndoEntry{
		Stages: make(map[Stage]plumbing.Hash),
	}

	path, err := binary.ReadUntil(d.r, '\x00')
	if err != nil {
		return nil, err
	}

	e.Path = string(path)

	for i := 0; i < 3; i++ {
		if err := d.readStage(e, Stage(i+1)); err != nil {
			return nil, err
		}
	}

	for s := range e.Stages {
		var hash plumbing.Hash
		if _, err := io.ReadFull(d.r, hash[:]); err != nil {
			return nil, err
		}

		e.Stages[s] = hash
	}

	return e, nil
}

func (d *resolveUndoDecoder) readStage(e *ResolveUndoEntry, s Stage) error {
	ascii, err := binary.ReadUntil(d.r, '\x00')
	if err != nil {
		return err
	}

	stage, err := strconv.ParseInt(string(ascii), 8, 64)
	if err != nil {
		return err
	}

	if stage != 0 {
		e.Stages[s] = plumbing.ZeroHash
	}

	return nil
}

type endOfIndexEntryDecoder struct {
	r *bufio.Reader
}

func (d *endOfIndexEntryDecoder) Decode(e *EndOfIndexEntry) error {
	var err error
	e.Offset, err = binary.ReadUint32(d.r)
	if err != nil {
		return err
	}

	_, err = io.ReadFull(d.r, e.Hash[:])
	return err
}
  07070100000525000081A4000000000000000000000001645E367C0000361A000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/index/doc.go   // Package index implements encoding and decoding of index format files.
//
//    Git index format
//    ================
//
//    == The Git index file has the following format
//
//      All binary numbers are in network byte order. Version 2 is described
//      here unless stated otherwise.
//
//      - A 12-byte header consisting of
//
//        4-byte signature:
//          The signature is { 'D', 'I', 'R', 'C' } (stands for "dircache")
//
//        4-byte version number:
//          The current supported versions are 2, 3 and 4.
//
//        32-bit number of index entries.
//
//      - A number of sorted index entries (see below).
//
//      - Extensions
//
//        Extensions are identified by signature. Optional extensions can
//        be ignored if Git does not understand them.
//
//        Git currently supports cached tree and resolve undo extensions.
//
//        4-byte extension signature. If the first byte is 'A'..'Z' the
//        extension is optional and can be ignored.
//
//        32-bit size of the extension
//
//        Extension data
//
//      - 160-bit SHA-1 over the content of the index file before this
//        checksum.
//
//    == Index entry
//
//      Index entries are sorted in ascending order on the name field,
//      interpreted as a string of unsigned bytes (i.e. memcmp() order, no
//      localization, no special casing of directory separator '/'). Entries
//      with the same name are sorted by their stage field.
//
//      32-bit ctime seconds, the last time a file's metadata changed
//        this is stat(2) data
//
//      32-bit ctime nanosecond fractions
//        this is stat(2) data
//
//      32-bit mtime seconds, the last time a file's data changed
//        this is stat(2) data
//
//      32-bit mtime nanosecond fractions
//        this is stat(2) data
//
//      32-bit dev
//        this is stat(2) data
//
//      32-bit ino
//        this is stat(2) data
//
//      32-bit mode, split into (high to low bits)
//
//        4-bit object type
//          valid values in binary are 1000 (regular file), 1010 (symbolic link)
//          and 1110 (gitlink)
//
//        3-bit unused
//
//        9-bit unix permission. Only 0755 and 0644 are valid for regular files.
//        Symbolic links and gitlinks have value 0 in this field.
//
//      32-bit uid
//        this is stat(2) data
//
//      32-bit gid
//        this is stat(2) data
//
//      32-bit file size
//        This is the on-disk size from stat(2), truncated to 32-bit.
//
//      160-bit SHA-1 for the represented object
//
//      A 16-bit 'flags' field split into (high to low bits)
//
//        1-bit assume-valid flag
//
//        1-bit extended flag (must be zero in version 2)
//
//        2-bit stage (during merge)
//
//        12-bit name length if the length is less than 0xFFF; otherwise 0xFFF
//        is stored in this field.
//
//      (Version 3 or later) A 16-bit field, only applicable if the
//      "extended flag" above is 1, split into (high to low bits).
//
//        1-bit reserved for future
//
//        1-bit skip-worktree flag (used by sparse checkout)
//
//        1-bit intent-to-add flag (used by "git add -N")
//
//        13-bit unused, must be zero
//
//      Entry path name (variable length) relative to top level directory
//        (without leading slash). '/' is used as path separator. The special
//        path components ".", ".." and ".git" (without quotes) are disallowed.
//        Trailing slash is also disallowed.
//
//        The exact encoding is undefined, but the '.' and '/' characters
//        are encoded in 7-bit ASCII and the encoding cannot contain a NUL
//        byte (iow, this is a UNIX pathname).
//
//      (Version 4) In version 4, the entry path name is prefix-compressed
//        relative to the path name for the previous entry (the very first
//        entry is encoded as if the path name for the previous entry is an
//        empty string).  At the beginning of an entry, an integer N in the
//        variable width encoding (the same encoding as the offset is encoded
//        for OFS_DELTA pack entries; see pack-format.txt) is stored, followed
//        by a NUL-terminated string S.  Removing N bytes from the end of the
//        path name for the previous entry, and replacing it with the string S
//        yields the path name for this entry.
//
//      1-8 nul bytes as necessary to pad the entry to a multiple of eight bytes
//      while keeping the name NUL-terminated.
//
//      (Version 4) In version 4, the padding after the pathname does not
//      exist.
//
//      Interpretation of index entries in split index mode is completely
//      different. See below for details.
//
//    == Extensions
//
//    === Cached tree
//
//      Cached tree extension contains pre-computed hashes for trees that can
//      be derived from the index. It helps speed up tree object generation
//      from index for a new commit.
//
//      When a path is updated in index, the path must be invalidated and
//      removed from tree cache.
//
//      The signature for this extension is { 'T', 'R', 'E', 'E' }.
//
//      A series of entries fill the entire extension; each of which
//      consists of:
//
//      - NUL-terminated path component (relative to its parent directory);
//
//      - ASCII decimal number of entries in the index that is covered by the
//        tree this entry represents (entry_count);
//
//      - A space (ASCII 32);
//
//      - ASCII decimal number that represents the number of subtrees this
//        tree has;
//
//      - A newline (ASCII 10); and
//
//      - 160-bit object name for the object that would result from writing
//        this span of index as a tree.
//
//      An entry can be in an invalidated state and is represented by having
//      a negative number in the entry_count field. In this case, there is no
//      object name and the next entry starts immediately after the newline.
//      When writing an invalid entry, -1 should always be used as entry_count.
//
//      The entries are written out in the top-down, depth-first order.  The
//      first entry represents the root level of the repository, followed by the
//      first subtree--let's call this A--of the root level (with its name
//      relative to the root level), followed by the first subtree of A (with
//      its name relative to A), ...
//
//    === Resolve undo
//
//      A conflict is represented in the index as a set of higher stage entries.
//      When a conflict is resolved (e.g. with "git add path"), these higher
//      stage entries will be removed and a stage-0 entry with proper resolution
//      is added.
//
//      When these higher stage entries are removed, they are saved in the
//      resolve undo extension, so that conflicts can be recreated (e.g. with
//      "git checkout -m"), in case users want to redo a conflict resolution
//      from scratch.
//
//      The signature for this extension is { 'R', 'E', 'U', 'C' }.
//
//      A series of entries fill the entire extension; each of which
//      consists of:
//
//      - NUL-terminated pathname the entry describes (relative to the root of
//        the repository, i.e. full pathname);
//
//      - Three NUL-terminated ASCII octal numbers, entry mode of entries in
//        stage 1 to 3 (a missing stage is represented by "0" in this field);
//        and
//
//      - At most three 160-bit object names of the entry in stages from 1 to 3
//        (nothing is written for a missing stage).
//
//    === Split index
//
//      In split index mode, the majority of index entries could be stored
//      in a separate file. This extension records the changes to be made on
//      top of that to produce the final index.
//
//      The signature for this extension is { 'l', 'i', 'n', 'k' }.
//
//      The extension consists of:
//
//      - 160-bit SHA-1 of the shared index file. The shared index file path
//        is $GIT_DIR/sharedindex.<SHA-1>. If all 160 bits are zero, the
//        index does not require a shared index file.
//
//      - An ewah-encoded delete bitmap, each bit represents an entry in the
//        shared index. If a bit is set, its corresponding entry in the
//        shared index will be removed from the final index.  Note, because
//        a delete operation changes index entry positions, but we do need
//        original positions in replace phase, it's best to just mark
//        entries for removal, then do a mass deletion after replacement.
//
//      - An ewah-encoded replace bitmap, each bit represents an entry in
//        the shared index. If a bit is set, its corresponding entry in the
//        shared index will be replaced with an entry in this index
//        file. All replaced entries are stored in sorted order in this
//        index. The first "1" bit in the replace bitmap corresponds to the
//        first index entry, the second "1" bit to the second entry and so
//        on. Replaced entries may have empty path names to save space.
//
//      The remaining index entries after replaced ones will be added to the
//      final index. These added entries are also sorted by entry name then
//      stage.
//
//    == Untracked cache
//
//      Untracked cache saves the untracked file list and necessary data to
//      verify the cache. The signature for this extension is { 'U', 'N',
//      'T', 'R' }.
//
//      The extension starts with
//
//      - A sequence of NUL-terminated strings, preceded by the size of the
//        sequence in variable width encoding. Each string describes the
//        environment where the cache can be used.
//
//      - Stat data of $GIT_DIR/info/exclude. See "Index entry" section from
//        ctime field until "file size".
//
//      - Stat data of plumbing.excludesfile
//
//      - 32-bit dir_flags (see struct dir_struct)
//
//      - 160-bit SHA-1 of $GIT_DIR/info/exclude. Null SHA-1 means the file
//        does not exist.
//
//      - 160-bit SHA-1 of plumbing.excludesfile. Null SHA-1 means the file does
//        not exist.
//
//      - NUL-terminated string of per-dir exclude file name. This usually
//        is ".gitignore".
//
//      - The number of following directory blocks, variable width
//        encoding. If this number is zero, the extension ends here with a
//        following NUL.
//
//      - A number of directory blocks in depth-first-search order, each
//        consists of
//
//        - The number of untracked entries, variable width encoding.
//
//        - The number of sub-directory blocks, variable width encoding.
//
//        - The directory name terminated by NUL.
//
//        - A number of untracked file/dir names terminated by NUL.
//
//    The remaining data of each directory block is grouped by type:
//
//      - An ewah bitmap, the n-th bit marks whether the n-th directory has
//        valid untracked cache entries.
//
//      - An ewah bitmap, the n-th bit records "check-only" bit of
//        read_directory_recursive() for the n-th directory.
//
//      - An ewah bitmap, the n-th bit indicates whether SHA-1 and stat data
//        is valid for the n-th directory and exists in the next data.
//
//      - An array of stat data. The n-th data corresponds with the n-th
//        "one" bit in the previous ewah bitmap.
//
//      - An array of SHA-1. The n-th SHA-1 corresponds with the n-th "one" bit
//        in the previous ewah bitmap.
//
//      - One NUL.
//
//   == File System Monitor cache
//
//     The file system monitor cache tracks files for which the core.fsmonitor
//     hook has told us about changes.  The signature for this extension is
//     { 'F', 'S', 'M', 'N' }.
//
//     The extension starts with
//
//     - 32-bit version number: the current supported version is 1.
//
//     - 64-bit time: the extension data reflects all changes through the given
//       time which is stored as the nanoseconds elapsed since midnight,
//       January 1, 1970.
//
//    - 32-bit bitmap size: the size of the CE_FSMONITOR_VALID bitmap.
//
//    - An ewah bitmap, the n-th bit indicates whether the n-th index entry
//      is not CE_FSMONITOR_VALID.
//
//  == End of Index Entry
//
//    The End of Index Entry (EOIE) is used to locate the end of the variable
//    length index entries and the beginning of the extensions. Code can take
//    advantage of this to quickly locate the index extensions without having
//    to parse through all of the index entries.
//
//    Because it must be able to be loaded before the variable length cache
//    entries and other index extensions, this extension must be written last.
//    The signature for this extension is { 'E', 'O', 'I', 'E' }.
//
//    The extension consists of:
//
//    - 32-bit offset to the end of the index entries
//
//    - 160-bit SHA-1 over the extension types and their sizes (but not
//      their contents).  E.g. if we have "TREE" extension that is N-bytes
//      long, "REUC" extension that is M-bytes long, followed by "EOIE",
//      then the hash would be:
//
//      SHA-1("TREE" + <binary representation of N> +
//        "REUC" + <binary representation of M>)
//
//  == Index Entry Offset Table
//
//    The Index Entry Offset Table (IEOT) is used to help address the CPU
//    cost of loading the index by enabling multi-threading the process of
//    converting cache entries from the on-disk format to the in-memory format.
//    The signature for this extension is { 'I', 'E', 'O', 'T' }.
//
//    The extension consists of:
//
//    - 32-bit version (currently 1)
//
//    - A number of index offset entries each consisting of:
//
//    - 32-bit offset from the beginning of the file to the first cache entry
//      in this block of entries.
//
//    - 32-bit count of cache entries in this blockpackage index
package index
  07070100000526000081A4000000000000000000000001645E367C00000B9D000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/index/encoder.go   package index

import (
	"bytes"
	"crypto/sha1"
	"errors"
	"hash"
	"io"
	"sort"
	"time"

	"github.com/go-git/go-git/v5/utils/binary"
)

var (
	// EncodeVersionSupported is the range of supported index versions
	EncodeVersionSupported uint32 = 2

	// ErrInvalidTimestamp is returned by Encode if a Index with a Entry with
	// negative timestamp values
	ErrInvalidTimestamp = errors.New("negative timestamps are not allowed")
)

// An Encoder writes an Index to an output stream.
type Encoder struct {
	w    io.Writer
	hash hash.Hash
}

// NewEncoder returns a new encoder that writes to w.
func NewEncoder(w io.Writer) *Encoder {
	h := sha1.New()
	mw := io.MultiWriter(w, h)
	return &Encoder{mw, h}
}

// Encode writes the Index to the stream of the encoder.
func (e *Encoder) Encode(idx *Index) error {
	// TODO: support versions v3 and v4
	// TODO: support extensions
	if idx.Version != EncodeVersionSupported {
		return ErrUnsupportedVersion
	}

	if err := e.encodeHeader(idx); err != nil {
		return err
	}

	if err := e.encodeEntries(idx); err != nil {
		return err
	}

	return e.encodeFooter()
}

func (e *Encoder) encodeHeader(idx *Index) error {
	return binary.Write(e.w,
		indexSignature,
		idx.Version,
		uint32(len(idx.Entries)),
	)
}

func (e *Encoder) encodeEntries(idx *Index) error {
	sort.Sort(byName(idx.Entries))

	for _, entry := range idx.Entries {
		if err := e.encodeEntry(entry); err != nil {
			return err
		}

		wrote := entryHeaderLength + len(entry.Name)
		if err := e.padEntry(wrote); err != nil {
			return err
		}
	}

	return nil
}

func (e *Encoder) encodeEntry(entry *Entry) error {
	if entry.IntentToAdd || entry.SkipWorktree {
		return ErrUnsupportedVersion
	}

	sec, nsec, err := e.timeToUint32(&entry.CreatedAt)
	if err != nil {
		return err
	}

	msec, mnsec, err := e.timeToUint32(&entry.ModifiedAt)
	if err != nil {
		return err
	}

	flags := uint16(entry.Stage&0x3) << 12
	if l := len(entry.Name); l < nameMask {
		flags |= uint16(l)
	} else {
		flags |= nameMask
	}

	flow := []interface{}{
		sec, nsec,
		msec, mnsec,
		entry.Dev,
		entry.Inode,
		entry.Mode,
		entry.UID,
		entry.GID,
		entry.Size,
		entry.Hash[:],
		flags,
	}

	if err := binary.Write(e.w, flow...); err != nil {
		return err
	}

	return binary.Write(e.w, []byte(entry.Name))
}

func (e *Encoder) timeToUint32(t *time.Time) (uint32, uint32, error) {
	if t.IsZero() {
		return 0, 0, nil
	}

	if t.Unix() < 0 || t.UnixNano() < 0 {
		return 0, 0, ErrInvalidTimestamp
	}

	return uint32(t.Unix()), uint32(t.Nanosecond()), nil
}

func (e *Encoder) padEntry(wrote int) error {
	padLen := 8 - wrote%8

	_, err := e.w.Write(bytes.Repeat([]byte{'\x00'}, padLen))
	return err
}

func (e *Encoder) encodeFooter() error {
	return binary.Write(e.w, e.hash.Sum(nil))
}

type byName []*Entry

func (l byName) Len() int           { return len(l) }
func (l byName) Swap(i, j int)      { l[i], l[j] = l[j], l[i] }
func (l byName) Less(i, j int) bool { return l[i].Name < l[j].Name }
   07070100000527000081A4000000000000000000000001645E367C000019EE000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/index/index.go package index

import (
	"bytes"
	"errors"
	"fmt"
	"path/filepath"
	"time"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/filemode"
)

var (
	// ErrUnsupportedVersion is returned by Decode when the index file version
	// is not supported.
	ErrUnsupportedVersion = errors.New("unsupported version")
	// ErrEntryNotFound is returned by Index.Entry, if an entry is not found.
	ErrEntryNotFound = errors.New("entry not found")

	indexSignature              = []byte{'D', 'I', 'R', 'C'}
	treeExtSignature            = []byte{'T', 'R', 'E', 'E'}
	resolveUndoExtSignature     = []byte{'R', 'E', 'U', 'C'}
	endOfIndexEntryExtSignature = []byte{'E', 'O', 'I', 'E'}
)

// Stage during merge
type Stage int

const (
	// Merged is the default stage, fully merged
	Merged Stage = 1
	// AncestorMode is the base revision
	AncestorMode Stage = 1
	// OurMode is the first tree revision, ours
	OurMode Stage = 2
	// TheirMode is the second tree revision, theirs
	TheirMode Stage = 3
)

// Index contains the information about which objects are currently checked out
// in the worktree, having information about the working files. Changes in
// worktree are detected using this Index. The Index is also used during merges
type Index struct {
	// Version is index version
	Version uint32
	// Entries collection of entries represented by this Index. The order of
	// this collection is not guaranteed
	Entries []*Entry
	// Cache represents the 'Cached tree' extension
	Cache *Tree
	// ResolveUndo represents the 'Resolve undo' extension
	ResolveUndo *ResolveUndo
	// EndOfIndexEntry represents the 'End of Index Entry' extension
	EndOfIndexEntry *EndOfIndexEntry
}

// Add creates a new Entry and returns it. The caller should first check that
// another entry with the same path does not exist.
func (i *Index) Add(path string) *Entry {
	e := &Entry{
		Name: filepath.ToSlash(path),
	}

	i.Entries = append(i.Entries, e)
	return e
}

// Entry returns the entry that match the given path, if any.
func (i *Index) Entry(path string) (*Entry, error) {
	path = filepath.ToSlash(path)
	for _, e := range i.Entries {
		if e.Name == path {
			return e, nil
		}
	}

	return nil, ErrEntryNotFound
}

// Remove remove the entry that match the give path and returns deleted entry.
func (i *Index) Remove(path string) (*Entry, error) {
	path = filepath.ToSlash(path)
	for index, e := range i.Entries {
		if e.Name == path {
			i.Entries = append(i.Entries[:index], i.Entries[index+1:]...)
			return e, nil
		}
	}

	return nil, ErrEntryNotFound
}

// Glob returns the all entries matching pattern or nil if there is no matching
// entry. The syntax of patterns is the same as in filepath.Glob.
func (i *Index) Glob(pattern string) (matches []*Entry, err error) {
	pattern = filepath.ToSlash(pattern)
	for _, e := range i.Entries {
		m, err := match(pattern, e.Name)
		if err != nil {
			return nil, err
		}

		if m {
			matches = append(matches, e)
		}
	}

	return
}

// String is equivalent to `git ls-files --stage --debug`
func (i *Index) String() string {
	buf := bytes.NewBuffer(nil)
	for _, e := range i.Entries {
		buf.WriteString(e.String())
	}

	return buf.String()
}

// Entry represents a single file (or stage of a file) in the cache. An entry
// represents exactly one stage of a file. If a file path is unmerged then
// multiple Entry instances may appear for the same path name.
type Entry struct {
	// Hash is the SHA1 of the represented file
	Hash plumbing.Hash
	// Name is the  Entry path name relative to top level directory
	Name string
	// CreatedAt time when the tracked path was created
	CreatedAt time.Time
	// ModifiedAt time when the tracked path was changed
	ModifiedAt time.Time
	// Dev and Inode of the tracked path
	Dev, Inode uint32
	// Mode of the path
	Mode filemode.FileMode
	// UID and GID, userid and group id of the owner
	UID, GID uint32
	// Size is the length in bytes for regular files
	Size uint32
	// Stage on a merge is defines what stage is representing this entry
	// https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging
	Stage Stage
	// SkipWorktree used in sparse checkouts
	// https://git-scm.com/docs/git-read-tree#_sparse_checkout
	SkipWorktree bool
	// IntentToAdd record only the fact that the path will be added later
	// https://git-scm.com/docs/git-add ("git add -N")
	IntentToAdd bool
}

func (e Entry) String() string {
	buf := bytes.NewBuffer(nil)

	fmt.Fprintf(buf, "%06o %s %d\t%s\n", e.Mode, e.Hash, e.Stage, e.Name)
	fmt.Fprintf(buf, "  ctime: %d:%d\n", e.CreatedAt.Unix(), e.CreatedAt.Nanosecond())
	fmt.Fprintf(buf, "  mtime: %d:%d\n", e.ModifiedAt.Unix(), e.ModifiedAt.Nanosecond())
	fmt.Fprintf(buf, "  dev: %d\tino: %d\n", e.Dev, e.Inode)
	fmt.Fprintf(buf, "  uid: %d\tgid: %d\n", e.UID, e.GID)
	fmt.Fprintf(buf, "  size: %d\tflags: %x\n", e.Size, 0)

	return buf.String()
}

// Tree contains pre-computed hashes for trees that can be derived from the
// index. It helps speed up tree object generation from index for a new commit.
type Tree struct {
	Entries []TreeEntry
}

// TreeEntry entry of a cached Tree
type TreeEntry struct {
	// Path component (relative to its parent directory)
	Path string
	// Entries is the number of entries in the index that is covered by the tree
	// this entry represents.
	Entries int
	// Trees is the number that represents the number of subtrees this tree has
	Trees int
	// Hash object name for the object that would result from writing this span
	// of index as a tree.
	Hash plumbing.Hash
}

// ResolveUndo is used when a conflict is resolved (e.g. with "git add path"),
// these higher stage entries are removed and a stage-0 entry with proper
// resolution is added. When these higher stage entries are removed, they are
// saved in the resolve undo extension.
type ResolveUndo struct {
	Entries []ResolveUndoEntry
}

// ResolveUndoEntry contains the information about a conflict when is resolved
type ResolveUndoEntry struct {
	Path   string
	Stages map[Stage]plumbing.Hash
}

// EndOfIndexEntry is the End of Index Entry (EOIE) is used to locate the end of
// the variable length index entries and the beginning of the extensions. Code
// can take advantage of this to quickly locate the index extensions without
// having to parse through all of the index entries.
//
//  Because it must be able to be loaded before the variable length cache
//  entries and other index extensions, this extension must be written last.
type EndOfIndexEntry struct {
	// Offset to the end of the index entries
	Offset uint32
	// Hash is a SHA-1 over the extension types and their sizes (but not
	//	their contents).
	Hash plumbing.Hash
}
  07070100000528000081A4000000000000000000000001645E367C00000FF3000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/index/match.go package index

import (
	"path/filepath"
	"runtime"
	"unicode/utf8"
)

// match is filepath.Match with support to match fullpath and not only filenames
// code from:
// https://github.com/golang/go/blob/39852bf4cce6927e01d0136c7843f65a801738cb/src/path/filepath/match.go#L44-L224
func match(pattern, name string) (matched bool, err error) {
Pattern:
	for len(pattern) > 0 {
		var star bool
		var chunk string
		star, chunk, pattern = scanChunk(pattern)

		// Look for match at current position.
		t, ok, err := matchChunk(chunk, name)
		// if we're the last chunk, make sure we've exhausted the name
		// otherwise we'll give a false result even if we could still match
		// using the star
		if ok && (len(t) == 0 || len(pattern) > 0) {
			name = t
			continue
		}
		if err != nil {
			return false, err
		}
		if star {
			// Look for match skipping i+1 bytes.
			// Cannot skip /.
			for i := 0; i < len(name); i++ {
				t, ok, err := matchChunk(chunk, name[i+1:])
				if ok {
					// if we're the last chunk, make sure we exhausted the name
					if len(pattern) == 0 && len(t) > 0 {
						continue
					}
					name = t
					continue Pattern
				}
				if err != nil {
					return false, err
				}
			}
		}
		return false, nil
	}
	return len(name) == 0, nil
}

// scanChunk gets the next segment of pattern, which is a non-star string
// possibly preceded by a star.
func scanChunk(pattern string) (star bool, chunk, rest string) {
	for len(pattern) > 0 && pattern[0] == '*' {
		pattern = pattern[1:]
		star = true
	}
	inrange := false
	var i int
Scan:
	for i = 0; i < len(pattern); i++ {
		switch pattern[i] {
		case '\\':
			if runtime.GOOS != "windows" {
				// error check handled in matchChunk: bad pattern.
				if i+1 < len(pattern) {
					i++
				}
			}
		case '[':
			inrange = true
		case ']':
			inrange = false
		case '*':
			if !inrange {
				break Scan
			}
		}
	}
	return star, pattern[0:i], pattern[i:]
}

// matchChunk checks whether chunk matches the beginning of s.
// If so, it returns the remainder of s (after the match).
// Chunk is all single-character operators: literals, char classes, and ?.
func matchChunk(chunk, s string) (rest string, ok bool, err error) {
	for len(chunk) > 0 {
		if len(s) == 0 {
			return
		}
		switch chunk[0] {
		case '[':
			// character class
			r, n := utf8.DecodeRuneInString(s)
			s = s[n:]
			chunk = chunk[1:]
			// We can't end right after '[', we're expecting at least
			// a closing bracket and possibly a caret.
			if len(chunk) == 0 {
				err = filepath.ErrBadPattern
				return
			}
			// possibly negated
			negated := chunk[0] == '^'
			if negated {
				chunk = chunk[1:]
			}
			// parse all ranges
			match := false
			nrange := 0
			for {
				if len(chunk) > 0 && chunk[0] == ']' && nrange > 0 {
					chunk = chunk[1:]
					break
				}
				var lo, hi rune
				if lo, chunk, err = getEsc(chunk); err != nil {
					return
				}
				hi = lo
				if chunk[0] == '-' {
					if hi, chunk, err = getEsc(chunk[1:]); err != nil {
						return
					}
				}
				if lo <= r && r <= hi {
					match = true
				}
				nrange++
			}
			if match == negated {
				return
			}

		case '?':
			_, n := utf8.DecodeRuneInString(s)
			s = s[n:]
			chunk = chunk[1:]

		case '\\':
			if runtime.GOOS != "windows" {
				chunk = chunk[1:]
				if len(chunk) == 0 {
					err = filepath.ErrBadPattern
					return
				}
			}
			fallthrough

		default:
			if chunk[0] != s[0] {
				return
			}
			s = s[1:]
			chunk = chunk[1:]
		}
	}
	return s, true, nil
}

// getEsc gets a possibly-escaped character from chunk, for a character class.
func getEsc(chunk string) (r rune, nchunk string, err error) {
	if len(chunk) == 0 || chunk[0] == '-' || chunk[0] == ']' {
		err = filepath.ErrBadPattern
		return
	}
	if chunk[0] == '\\' && runtime.GOOS != "windows" {
		chunk = chunk[1:]
		if len(chunk) == 0 {
			err = filepath.ErrBadPattern
			return
		}
	}
	r, n := utf8.DecodeRuneInString(chunk)
	if r == utf8.RuneError && n == 1 {
		err = filepath.ErrBadPattern
	}
	nchunk = chunk[n:]
	if len(nchunk) == 0 {
		err = filepath.ErrBadPattern
	}
	return
}
 07070100000529000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/objfile    0707010000052A000081A4000000000000000000000001645E367C00000055000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/objfile/doc.go // Package objfile implements encoding and decoding of object files.
package objfile
   0707010000052B000081A4000000000000000000000001645E367C00000B09000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/objfile/reader.go  package objfile

import (
	"compress/zlib"
	"errors"
	"io"
	"strconv"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/format/packfile"
)

var (
	ErrClosed       = errors.New("objfile: already closed")
	ErrHeader       = errors.New("objfile: invalid header")
	ErrNegativeSize = errors.New("objfile: negative object size")
)

// Reader reads and decodes compressed objfile data from a provided io.Reader.
// Reader implements io.ReadCloser. Close should be called when finished with
// the Reader. Close will not close the underlying io.Reader.
type Reader struct {
	multi  io.Reader
	zlib   io.ReadCloser
	hasher plumbing.Hasher
}

// NewReader returns a new Reader reading from r.
func NewReader(r io.Reader) (*Reader, error) {
	zlib, err := zlib.NewReader(r)
	if err != nil {
		return nil, packfile.ErrZLib.AddDetails(err.Error())
	}

	return &Reader{
		zlib: zlib,
	}, nil
}

// Header reads the type and the size of object, and prepares the reader for read
func (r *Reader) Header() (t plumbing.ObjectType, size int64, err error) {
	var raw []byte
	raw, err = r.readUntil(' ')
	if err != nil {
		return
	}

	t, err = plumbing.ParseObjectType(string(raw))
	if err != nil {
		return
	}

	raw, err = r.readUntil(0)
	if err != nil {
		return
	}

	size, err = strconv.ParseInt(string(raw), 10, 64)
	if err != nil {
		err = ErrHeader
		return
	}

	defer r.prepareForRead(t, size)
	return
}

// readSlice reads one byte at a time from r until it encounters delim or an
// error.
func (r *Reader) readUntil(delim byte) ([]byte, error) {
	var buf [1]byte
	value := make([]byte, 0, 16)
	for {
		if n, err := r.zlib.Read(buf[:]); err != nil && (err != io.EOF || n == 0) {
			if err == io.EOF {
				return nil, ErrHeader
			}
			return nil, err
		}

		if buf[0] == delim {
			return value, nil
		}

		value = append(value, buf[0])
	}
}

func (r *Reader) prepareForRead(t plumbing.ObjectType, size int64) {
	r.hasher = plumbing.NewHasher(t, size)
	r.multi = io.TeeReader(r.zlib, r.hasher)
}

// Read reads len(p) bytes into p from the object data stream. It returns
// the number of bytes read (0 <= n <= len(p)) and any error encountered. Even
// if Read returns n < len(p), it may use all of p as scratch space during the
// call.
//
// If Read encounters the end of the data stream it will return err == io.EOF,
// either in the current call if n > 0 or in a subsequent call.
func (r *Reader) Read(p []byte) (n int, err error) {
	return r.multi.Read(p)
}

// Hash returns the hash of the object data stream that has been read so far.
func (r *Reader) Hash() plumbing.Hash {
	return r.hasher.Sum()
}

// Close releases any resources consumed by the Reader. Calling Close does not
// close the wrapped io.Reader originally passed to NewReader.
func (r *Reader) Close() error {
	return r.zlib.Close()
}
   0707010000052C000081A4000000000000000000000001645E367C00000A17000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/objfile/writer.go  package objfile

import (
	"compress/zlib"
	"errors"
	"io"
	"strconv"

	"github.com/go-git/go-git/v5/plumbing"
)

var (
	ErrOverflow = errors.New("objfile: declared data length exceeded (overflow)")
)

// Writer writes and encodes data in compressed objfile format to a provided
// io.Writer. Close should be called when finished with the Writer. Close will
// not close the underlying io.Writer.
type Writer struct {
	raw    io.Writer
	zlib   io.WriteCloser
	hasher plumbing.Hasher
	multi  io.Writer

	closed  bool
	pending int64 // number of unwritten bytes
}

// NewWriter returns a new Writer writing to w.
//
// The returned Writer implements io.WriteCloser. Close should be called when
// finished with the Writer. Close will not close the underlying io.Writer.
func NewWriter(w io.Writer) *Writer {
	return &Writer{
		raw:  w,
		zlib: zlib.NewWriter(w),
	}
}

// WriteHeader writes the type and the size and prepares to accept the object's
// contents. If an invalid t is provided, plumbing.ErrInvalidType is returned. If a
// negative size is provided, ErrNegativeSize is returned.
func (w *Writer) WriteHeader(t plumbing.ObjectType, size int64) error {
	if !t.Valid() {
		return plumbing.ErrInvalidType
	}
	if size < 0 {
		return ErrNegativeSize
	}

	b := t.Bytes()
	b = append(b, ' ')
	b = append(b, []byte(strconv.FormatInt(size, 10))...)
	b = append(b, 0)

	defer w.prepareForWrite(t, size)
	_, err := w.zlib.Write(b)

	return err
}

func (w *Writer) prepareForWrite(t plumbing.ObjectType, size int64) {
	w.pending = size

	w.hasher = plumbing.NewHasher(t, size)
	w.multi = io.MultiWriter(w.zlib, w.hasher)
}

// Write writes the object's contents. Write returns the error ErrOverflow if
// more than size bytes are written after WriteHeader.
func (w *Writer) Write(p []byte) (n int, err error) {
	if w.closed {
		return 0, ErrClosed
	}

	overwrite := false
	if int64(len(p)) > w.pending {
		p = p[0:w.pending]
		overwrite = true
	}

	n, err = w.multi.Write(p)
	w.pending -= int64(n)
	if err == nil && overwrite {
		err = ErrOverflow
		return
	}

	return
}

// Hash returns the hash of the object data stream that has been written so far.
// It can be called before or after Close.
func (w *Writer) Hash() plumbing.Hash {
	return w.hasher.Sum() // Not yet closed, return hash of data written so far
}

// Close releases any resources consumed by the Writer.
//
// Calling Close does not close the wrapped io.Writer originally passed to
// NewWriter.
func (w *Writer) Close() error {
	if err := w.zlib.Close(); err != nil {
		return err
	}

	w.closed = true
	return nil
}
 0707010000052D000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile   0707010000052E000081A4000000000000000000000001645E367C000006F5000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/common.go package packfile

import (
	"bytes"
	"compress/zlib"
	"io"
	"sync"

	"github.com/go-git/go-git/v5/plumbing/storer"
	"github.com/go-git/go-git/v5/utils/ioutil"
)

var signature = []byte{'P', 'A', 'C', 'K'}

const (
	// VersionSupported is the packfile version supported by this package
	VersionSupported uint32 = 2

	firstLengthBits = uint8(4)   // the first byte into object header has 4 bits to store the length
	lengthBits      = uint8(7)   // subsequent bytes has 7 bits to store the length
	maskFirstLength = 15         // 0000 1111
	maskContinue    = 0x80       // 1000 0000
	maskLength      = uint8(127) // 0111 1111
	maskType        = uint8(112) // 0111 0000
)

// UpdateObjectStorage updates the storer with the objects in the given
// packfile.
func UpdateObjectStorage(s storer.Storer, packfile io.Reader) error {
	if pw, ok := s.(storer.PackfileWriter); ok {
		return WritePackfileToObjectStorage(pw, packfile)
	}

	p, err := NewParserWithStorage(NewScanner(packfile), s)
	if err != nil {
		return err
	}

	_, err = p.Parse()
	return err
}

// WritePackfileToObjectStorage writes all the packfile objects into the given
// object storage.
func WritePackfileToObjectStorage(
	sw storer.PackfileWriter,
	packfile io.Reader,
) (err error) {
	w, err := sw.PackfileWriter()
	if err != nil {
		return err
	}

	defer ioutil.CheckClose(w, &err)

	var n int64
	n, err = io.Copy(w, packfile)
	if err == nil && n == 0 {
		return ErrEmptyPackfile
	}

	return err
}

var bufPool = sync.Pool{
	New: func() interface{} {
		return bytes.NewBuffer(nil)
	},
}

var zlibInitBytes = []byte{0x78, 0x9c, 0x01, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01}

var zlibReaderPool = sync.Pool{
	New: func() interface{} {
		r, _ := zlib.NewReader(bytes.NewReader(zlibInitBytes))
		return r
	},
}
   0707010000052F000081A4000000000000000000000001645E367C000027BE000000000000000000000000000000000000005F00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/delta_index.go    package packfile

const blksz = 16
const maxChainLength = 64

// deltaIndex is a modified version of JGit's DeltaIndex adapted to our current
// design.
type deltaIndex struct {
	table   []int
	entries []int
	mask    int
}

func (idx *deltaIndex) init(buf []byte) {
	scanner := newDeltaIndexScanner(buf, len(buf))
	idx.mask = scanner.mask
	idx.table = scanner.table
	idx.entries = make([]int, countEntries(scanner)+1)
	idx.copyEntries(scanner)
}

// findMatch returns the offset of src where the block starting at tgtOffset
// is and the length of the match. A length of 0 means there was no match. A
// length of -1 means the src length is lower than the blksz and whatever
// other positive length is the length of the match in bytes.
func (idx *deltaIndex) findMatch(src, tgt []byte, tgtOffset int) (srcOffset, l int) {
	if len(tgt) < tgtOffset+s {
		return 0, len(tgt) - tgtOffset
	}

	if len(src) < blksz {
		return 0, -1
	}

	if len(tgt) >= tgtOffset+s && len(src) >= blksz {
		h := hashBlock(tgt, tgtOffset)
		tIdx := h & idx.mask
		eIdx := idx.table[tIdx]
		if eIdx != 0 {
			srcOffset = idx.entries[eIdx]
		} else {
			return
		}

		l = matchLength(src, tgt, tgtOffset, srcOffset)
	}

	return
}

func matchLength(src, tgt []byte, otgt, osrc int) (l int) {
	lensrc := len(src)
	lentgt := len(tgt)
	for (osrc < lensrc && otgt < lentgt) && src[osrc] == tgt[otgt] {
		l++
		osrc++
		otgt++
	}
	return
}

func countEntries(scan *deltaIndexScanner) (cnt int) {
	// Figure out exactly how many entries we need. As we do the
	// enumeration truncate any delta chains longer than what we
	// are willing to scan during encode. This keeps the encode
	// logic linear in the size of the input rather than quadratic.
	for i := 0; i < len(scan.table); i++ {
		h := scan.table[i]
		if h == 0 {
			continue
		}

		size := 0
		for {
			size++
			if size == maxChainLength {
				scan.next[h] = 0
				break
			}
			h = scan.next[h]

			if h == 0 {
				break
			}
		}
		cnt += size
	}

	return
}

func (idx *deltaIndex) copyEntries(scanner *deltaIndexScanner) {
	// Rebuild the entries list from the scanner, positioning all
	// blocks in the same hash chain next to each other. We can
	// then later discard the next list, along with the scanner.
	//
	next := 1
	for i := 0; i < len(idx.table); i++ {
		h := idx.table[i]
		if h == 0 {
			continue
		}

		idx.table[i] = next
		for {
			idx.entries[next] = scanner.entries[h]
			next++
			h = scanner.next[h]

			if h == 0 {
				break
			}
		}
	}
}

type deltaIndexScanner struct {
	table   []int
	entries []int
	next    []int
	mask    int
	count   int
}

func newDeltaIndexScanner(buf []byte, size int) *deltaIndexScanner {
	size -= size % blksz
	worstCaseBlockCnt := size / blksz
	if worstCaseBlockCnt < 1 {
		return new(deltaIndexScanner)
	}

	tableSize := tableSize(worstCaseBlockCnt)
	scanner := &deltaIndexScanner{
		table:   make([]int, tableSize),
		mask:    tableSize - 1,
		entries: make([]int, worstCaseBlockCnt+1),
		next:    make([]int, worstCaseBlockCnt+1),
	}

	scanner.scan(buf, size)
	return scanner
}

// slightly modified version of JGit's DeltaIndexScanner. We store the offset on the entries
// instead of the entries and the key, so we avoid operations to retrieve the offset later, as
// we don't use the key.
// See: https://github.com/eclipse/jgit/blob/005e5feb4ecd08c4e4d141a38b9e7942accb3212/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/DeltaIndexScanner.java
func (s *deltaIndexScanner) scan(buf []byte, end int) {
	lastHash := 0
	ptr := end - blksz

	for {
		key := hashBlock(buf, ptr)
		tIdx := key & s.mask
		head := s.table[tIdx]
		if head != 0 && lastHash == key {
			s.entries[head] = ptr
		} else {
			s.count++
			eIdx := s.count
			s.entries[eIdx] = ptr
			s.next[eIdx] = head
			s.table[tIdx] = eIdx
		}

		lastHash = key
		ptr -= blksz

		if 0 > ptr {
			break
		}
	}
}

func tableSize(worstCaseBlockCnt int) int {
	shift := 32 - leadingZeros(uint32(worstCaseBlockCnt))
	sz := 1 << uint(shift-1)
	if sz < worstCaseBlockCnt {
		sz <<= 1
	}
	return sz
}

// use https://golang.org/pkg/math/bits/#LeadingZeros32 in the future
func leadingZeros(x uint32) (n int) {
	if x >= 1<<16 {
		x >>= 16
		n = 16
	}
	if x >= 1<<8 {
		x >>= 8
		n += 8
	}
	n += int(len8tab[x])
	return 32 - n
}

var len8tab = [256]uint8{
	0x00, 0x01, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
	0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
	0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
	0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
	0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
	0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
	0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
	0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
	0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
}

func hashBlock(raw []byte, ptr int) int {
	// The first 4 steps collapse out into a 4 byte big-endian decode,
	// with a larger right shift as we combined shift lefts together.
	//
	hash := ((uint32(raw[ptr]) & 0xff) << 24) |
		((uint32(raw[ptr+1]) & 0xff) << 16) |
		((uint32(raw[ptr+2]) & 0xff) << 8) |
		(uint32(raw[ptr+3]) & 0xff)
	hash ^= T[hash>>31]

	hash = ((hash << 8) | (uint32(raw[ptr+4]) & 0xff)) ^ T[hash>>23]
	hash = ((hash << 8) | (uint32(raw[ptr+5]) & 0xff)) ^ T[hash>>23]
	hash = ((hash << 8) | (uint32(raw[ptr+6]) & 0xff)) ^ T[hash>>23]
	hash = ((hash << 8) | (uint32(raw[ptr+7]) & 0xff)) ^ T[hash>>23]

	hash = ((hash << 8) | (uint32(raw[ptr+8]) & 0xff)) ^ T[hash>>23]
	hash = ((hash << 8) | (uint32(raw[ptr+9]) & 0xff)) ^ T[hash>>23]
	hash = ((hash << 8) | (uint32(raw[ptr+10]) & 0xff)) ^ T[hash>>23]
	hash = ((hash << 8) | (uint32(raw[ptr+11]) & 0xff)) ^ T[hash>>23]

	hash = ((hash << 8) | (uint32(raw[ptr+12]) & 0xff)) ^ T[hash>>23]
	hash = ((hash << 8) | (uint32(raw[ptr+13]) & 0xff)) ^ T[hash>>23]
	hash = ((hash << 8) | (uint32(raw[ptr+14]) & 0xff)) ^ T[hash>>23]
	hash = ((hash << 8) | (uint32(raw[ptr+15]) & 0xff)) ^ T[hash>>23]

	return int(hash)
}

var T = []uint32{0x00000000, 0xd4c6b32d, 0x7d4bd577,
	0xa98d665a, 0x2e5119c3, 0xfa97aaee, 0x531accb4, 0x87dc7f99,
	0x5ca23386, 0x886480ab, 0x21e9e6f1, 0xf52f55dc, 0x72f32a45,
	0xa6359968, 0x0fb8ff32, 0xdb7e4c1f, 0x6d82d421, 0xb944670c,
	0x10c90156, 0xc40fb27b, 0x43d3cde2, 0x97157ecf, 0x3e981895,
	0xea5eabb8, 0x3120e7a7, 0xe5e6548a, 0x4c6b32d0, 0x98ad81fd,
	0x1f71fe64, 0xcbb74d49, 0x623a2b13, 0xb6fc983e, 0x0fc31b6f,
	0xdb05a842, 0x7288ce18, 0xa64e7d35, 0x219202ac, 0xf554b181,
	0x5cd9d7db, 0x881f64f6, 0x536128e9, 0x87a79bc4, 0x2e2afd9e,
	0xfaec4eb3, 0x7d30312a, 0xa9f68207, 0x007be45d, 0xd4bd5770,
	0x6241cf4e, 0xb6877c63, 0x1f0a1a39, 0xcbcca914, 0x4c10d68d,
	0x98d665a0, 0x315b03fa, 0xe59db0d7, 0x3ee3fcc8, 0xea254fe5,
	0x43a829bf, 0x976e9a92, 0x10b2e50b, 0xc4745626, 0x6df9307c,
	0xb93f8351, 0x1f8636de, 0xcb4085f3, 0x62cde3a9, 0xb60b5084,
	0x31d72f1d, 0xe5119c30, 0x4c9cfa6a, 0x985a4947, 0x43240558,
	0x97e2b675, 0x3e6fd02f, 0xeaa96302, 0x6d751c9b, 0xb9b3afb6,
	0x103ec9ec, 0xc4f87ac1, 0x7204e2ff, 0xa6c251d2, 0x0f4f3788,
	0xdb8984a5, 0x5c55fb3c, 0x88934811, 0x211e2e4b, 0xf5d89d66,
	0x2ea6d179, 0xfa606254, 0x53ed040e, 0x872bb723, 0x00f7c8ba,
	0xd4317b97, 0x7dbc1dcd, 0xa97aaee0, 0x10452db1, 0xc4839e9c,
	0x6d0ef8c6, 0xb9c84beb, 0x3e143472, 0xead2875f, 0x435fe105,
	0x97995228, 0x4ce71e37, 0x9821ad1a, 0x31accb40, 0xe56a786d,
	0x62b607f4, 0xb670b4d9, 0x1ffdd283, 0xcb3b61ae, 0x7dc7f990,
	0xa9014abd, 0x008c2ce7, 0xd44a9fca, 0x5396e053, 0x8750537e,
	0x2edd3524, 0xfa1b8609, 0x2165ca16, 0xf5a3793b, 0x5c2e1f61,
	0x88e8ac4c, 0x0f34d3d5, 0xdbf260f8, 0x727f06a2, 0xa6b9b58f,
	0x3f0c6dbc, 0xebcade91, 0x4247b8cb, 0x96810be6, 0x115d747f,
	0xc59bc752, 0x6c16a108, 0xb8d01225, 0x63ae5e3a, 0xb768ed17,
	0x1ee58b4d, 0xca233860, 0x4dff47f9, 0x9939f4d4, 0x30b4928e,
	0xe47221a3, 0x528eb99d, 0x86480ab0, 0x2fc56cea, 0xfb03dfc7,
	0x7cdfa05e, 0xa8191373, 0x01947529, 0xd552c604, 0x0e2c8a1b,
	0xdaea3936, 0x73675f6c, 0xa7a1ec41, 0x207d93d8, 0xf4bb20f5,
	0x5d3646af, 0x89f0f582, 0x30cf76d3, 0xe409c5fe, 0x4d84a3a4,
	0x99421089, 0x1e9e6f10, 0xca58dc3d, 0x63d5ba67, 0xb713094a,
	0x6c6d4555, 0xb8abf678, 0x11269022, 0xc5e0230f, 0x423c5c96,
	0x96faefbb, 0x3f7789e1, 0xebb13acc, 0x5d4da2f2, 0x898b11df,
	0x20067785, 0xf4c0c4a8, 0x731cbb31, 0xa7da081c, 0x0e576e46,
	0xda91dd6b, 0x01ef9174, 0xd5292259, 0x7ca44403, 0xa862f72e,
	0x2fbe88b7, 0xfb783b9a, 0x52f55dc0, 0x8633eeed, 0x208a5b62,
	0xf44ce84f, 0x5dc18e15, 0x89073d38, 0x0edb42a1, 0xda1df18c,
	0x739097d6, 0xa75624fb, 0x7c2868e4, 0xa8eedbc9, 0x0163bd93,
	0xd5a50ebe, 0x52797127, 0x86bfc20a, 0x2f32a450, 0xfbf4177d,
	0x4d088f43, 0x99ce3c6e, 0x30435a34, 0xe485e919, 0x63599680,
	0xb79f25ad, 0x1e1243f7, 0xcad4f0da, 0x11aabcc5, 0xc56c0fe8,
	0x6ce169b2, 0xb827da9f, 0x3ffba506, 0xeb3d162b, 0x42b07071,
	0x9676c35c, 0x2f49400d, 0xfb8ff320, 0x5202957a, 0x86c42657,
	0x011859ce, 0xd5deeae3, 0x7c538cb9, 0xa8953f94, 0x73eb738b,
	0xa72dc0a6, 0x0ea0a6fc, 0xda6615d1, 0x5dba6a48, 0x897cd965,
	0x20f1bf3f, 0xf4370c12, 0x42cb942c, 0x960d2701, 0x3f80415b,
	0xeb46f276, 0x6c9a8def, 0xb85c3ec2, 0x11d15898, 0xc517ebb5,
	0x1e69a7aa, 0xcaaf1487, 0x632272dd, 0xb7e4c1f0, 0x3038be69,
	0xe4fe0d44, 0x4d736b1e, 0x99b5d833,
}
  07070100000530000081A4000000000000000000000001645E367C000021B9000000000000000000000000000000000000006200000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/delta_selector.go package packfile

import (
	"sort"
	"sync"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/storer"
)

const (
	// deltas based on deltas, how many steps we can do.
	// 50 is the default value used in JGit
	maxDepth = int64(50)
)

// applyDelta is the set of object types that we should apply deltas
var applyDelta = map[plumbing.ObjectType]bool{
	plumbing.BlobObject: true,
	plumbing.TreeObject: true,
}

type deltaSelector struct {
	storer storer.EncodedObjectStorer
}

func newDeltaSelector(s storer.EncodedObjectStorer) *deltaSelector {
	return &deltaSelector{s}
}

// ObjectsToPack creates a list of ObjectToPack from the hashes
// provided, creating deltas if it's suitable, using an specific
// internal logic.  `packWindow` specifies the size of the sliding
// window used to compare objects for delta compression; 0 turns off
// delta compression entirely.
func (dw *deltaSelector) ObjectsToPack(
	hashes []plumbing.Hash,
	packWindow uint,
) ([]*ObjectToPack, error) {
	otp, err := dw.objectsToPack(hashes, packWindow)
	if err != nil {
		return nil, err
	}

	if packWindow == 0 {
		return otp, nil
	}

	dw.sort(otp)

	var objectGroups [][]*ObjectToPack
	var prev *ObjectToPack
	i := -1
	for _, obj := range otp {
		if prev == nil || prev.Type() != obj.Type() {
			objectGroups = append(objectGroups, []*ObjectToPack{obj})
			i++
			prev = obj
		} else {
			objectGroups[i] = append(objectGroups[i], obj)
		}
	}

	var wg sync.WaitGroup
	var once sync.Once
	for _, objs := range objectGroups {
		objs := objs
		wg.Add(1)
		go func() {
			if walkErr := dw.walk(objs, packWindow); walkErr != nil {
				once.Do(func() {
					err = walkErr
				})
			}
			wg.Done()
		}()
	}
	wg.Wait()

	if err != nil {
		return nil, err
	}

	return otp, nil
}

func (dw *deltaSelector) objectsToPack(
	hashes []plumbing.Hash,
	packWindow uint,
) ([]*ObjectToPack, error) {
	var objectsToPack []*ObjectToPack
	for _, h := range hashes {
		var o plumbing.EncodedObject
		var err error
		if packWindow == 0 {
			o, err = dw.encodedObject(h)
		} else {
			o, err = dw.encodedDeltaObject(h)
		}
		if err != nil {
			return nil, err
		}

		otp := newObjectToPack(o)
		if _, ok := o.(plumbing.DeltaObject); ok {
			otp.CleanOriginal()
		}

		objectsToPack = append(objectsToPack, otp)
	}

	if packWindow == 0 {
		return objectsToPack, nil
	}

	if err := dw.fixAndBreakChains(objectsToPack); err != nil {
		return nil, err
	}

	return objectsToPack, nil
}

func (dw *deltaSelector) encodedDeltaObject(h plumbing.Hash) (plumbing.EncodedObject, error) {
	edos, ok := dw.storer.(storer.DeltaObjectStorer)
	if !ok {
		return dw.encodedObject(h)
	}

	return edos.DeltaObject(plumbing.AnyObject, h)
}

func (dw *deltaSelector) encodedObject(h plumbing.Hash) (plumbing.EncodedObject, error) {
	return dw.storer.EncodedObject(plumbing.AnyObject, h)
}

func (dw *deltaSelector) fixAndBreakChains(objectsToPack []*ObjectToPack) error {
	m := make(map[plumbing.Hash]*ObjectToPack, len(objectsToPack))
	for _, otp := range objectsToPack {
		m[otp.Hash()] = otp
	}

	for _, otp := range objectsToPack {
		if err := dw.fixAndBreakChainsOne(m, otp); err != nil {
			return err
		}
	}

	return nil
}

func (dw *deltaSelector) fixAndBreakChainsOne(objectsToPack map[plumbing.Hash]*ObjectToPack, otp *ObjectToPack) error {
	if !otp.Object.Type().IsDelta() {
		return nil
	}

	// Initial ObjectToPack instances might have a delta assigned to Object
	// but no actual base initially. Once Base is assigned to a delta, it means
	// we already fixed it.
	if otp.Base != nil {
		return nil
	}

	do, ok := otp.Object.(plumbing.DeltaObject)
	if !ok {
		// if this is not a DeltaObject, then we cannot retrieve its base,
		// so we have to break the delta chain here.
		return dw.undeltify(otp)
	}

	base, ok := objectsToPack[do.BaseHash()]
	if !ok {
		// The base of the delta is not in our list of objects to pack, so
		// we break the chain.
		return dw.undeltify(otp)
	}

	if err := dw.fixAndBreakChainsOne(objectsToPack, base); err != nil {
		return err
	}

	otp.SetDelta(base, otp.Object)
	return nil
}

func (dw *deltaSelector) restoreOriginal(otp *ObjectToPack) error {
	if otp.Original != nil {
		return nil
	}

	if !otp.Object.Type().IsDelta() {
		return nil
	}

	obj, err := dw.encodedObject(otp.Hash())
	if err != nil {
		return err
	}

	otp.SetOriginal(obj)

	return nil
}

// undeltify undeltifies an *ObjectToPack by retrieving the original object from
// the storer and resetting it.
func (dw *deltaSelector) undeltify(otp *ObjectToPack) error {
	if err := dw.restoreOriginal(otp); err != nil {
		return err
	}

	otp.Object = otp.Original
	otp.Depth = 0
	return nil
}

func (dw *deltaSelector) sort(objectsToPack []*ObjectToPack) {
	sort.Sort(byTypeAndSize(objectsToPack))
}

func (dw *deltaSelector) walk(
	objectsToPack []*ObjectToPack,
	packWindow uint,
) error {
	indexMap := make(map[plumbing.Hash]*deltaIndex)
	for i := 0; i < len(objectsToPack); i++ {
		// Clean up the index map and reconstructed delta objects for anything
		// outside our pack window, to save memory.
		if i > int(packWindow) {
			obj := objectsToPack[i-int(packWindow)]

			delete(indexMap, obj.Hash())

			if obj.IsDelta() {
				obj.SaveOriginalMetadata()
				obj.CleanOriginal()
			}
		}

		target := objectsToPack[i]

		// If we already have a delta, we don't try to find a new one for this
		// object. This happens when a delta is set to be reused from an existing
		// packfile.
		if target.IsDelta() {
			continue
		}

		// We only want to create deltas from specific types.
		if !applyDelta[target.Type()] {
			continue
		}

		for j := i - 1; j >= 0 && i-j < int(packWindow); j-- {
			base := objectsToPack[j]
			// Objects must use only the same type as their delta base.
			// Since objectsToPack is sorted by type and size, once we find
			// a different type, we know we won't find more of them.
			if base.Type() != target.Type() {
				break
			}

			if err := dw.tryToDeltify(indexMap, base, target); err != nil {
				return err
			}
		}
	}

	return nil
}

func (dw *deltaSelector) tryToDeltify(indexMap map[plumbing.Hash]*deltaIndex, base, target *ObjectToPack) error {
	// Original object might not be present if we're reusing a delta, so we
	// ensure it is restored.
	if err := dw.restoreOriginal(target); err != nil {
		return err
	}

	if err := dw.restoreOriginal(base); err != nil {
		return err
	}

	// If the sizes are radically different, this is a bad pairing.
	if target.Size() < base.Size()>>4 {
		return nil
	}

	msz := dw.deltaSizeLimit(
		target.Object.Size(),
		base.Depth,
		target.Depth,
		target.IsDelta(),
	)

	// Nearly impossible to fit useful delta.
	if msz <= 8 {
		return nil
	}

	// If we have to insert a lot to make this work, find another.
	if base.Size()-target.Size() > msz {
		return nil
	}

	if _, ok := indexMap[base.Hash()]; !ok {
		indexMap[base.Hash()] = new(deltaIndex)
	}

	// Now we can generate the delta using originals
	delta, err := getDelta(indexMap[base.Hash()], base.Original, target.Original)
	if err != nil {
		return err
	}

	// if delta better than target
	if delta.Size() < msz {
		target.SetDelta(base, delta)
	}

	return nil
}

func (dw *deltaSelector) deltaSizeLimit(targetSize int64, baseDepth int,
	targetDepth int, targetDelta bool) int64 {
	if !targetDelta {
		// Any delta should be no more than 50% of the original size
		// (for text files deflate of whole form should shrink 50%).
		n := targetSize >> 1

		// Evenly distribute delta size limits over allowed depth.
		// If src is non-delta (depth = 0), delta <= 50% of original.
		// If src is almost at limit (9/10), delta <= 10% of original.
		return n * (maxDepth - int64(baseDepth)) / maxDepth
	}

	// With a delta base chosen any new delta must be "better".
	// Retain the distribution described above.
	d := int64(targetDepth)
	n := targetSize

	// If target depth is bigger than maxDepth, this delta is not suitable to be used.
	if d >= maxDepth {
		return 0
	}

	// If src is whole (depth=0) and base is near limit (depth=9/10)
	// any delta using src can be 10x larger and still be better.
	//
	// If src is near limit (depth=9/10) and base is whole (depth=0)
	// a new delta dependent on src must be 1/10th the size.
	return n * (maxDepth - int64(baseDepth)) / (maxDepth - d)
}

type byTypeAndSize []*ObjectToPack

func (a byTypeAndSize) Len() int { return len(a) }

func (a byTypeAndSize) Swap(i, j int) { a[i], a[j] = a[j], a[i] }

func (a byTypeAndSize) Less(i, j int) bool {
	if a[i].Type() < a[j].Type() {
		return false
	}

	if a[i].Type() > a[j].Type() {
		return true
	}

	return a[i].Size() > a[j].Size()
}
   07070100000531000081A4000000000000000000000001645E367C000010EF000000000000000000000000000000000000005E00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/diff_delta.go package packfile

import (
	"bytes"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/utils/ioutil"
)

// See https://github.com/jelmer/dulwich/blob/master/dulwich/pack.py and
// https://github.com/tarruda/node-git-core/blob/master/src/js/delta.js
// for more info

const (
	// Standard chunk size used to generate fingerprints
	s = 16

	// https://github.com/git/git/blob/f7466e94375b3be27f229c78873f0acf8301c0a5/diff-delta.c#L428
	// Max size of a copy operation (64KB)
	maxCopySize = 64 * 1024
)

// GetDelta returns an EncodedObject of type OFSDeltaObject. Base and Target object,
// will be loaded into memory to be able to create the delta object.
// To generate target again, you will need the obtained object and "base" one.
// Error will be returned if base or target object cannot be read.
func GetDelta(base, target plumbing.EncodedObject) (plumbing.EncodedObject, error) {
	return getDelta(new(deltaIndex), base, target)
}

func getDelta(index *deltaIndex, base, target plumbing.EncodedObject) (o plumbing.EncodedObject, err error) {
	br, err := base.Reader()
	if err != nil {
		return nil, err
	}

	defer ioutil.CheckClose(br, &err)

	tr, err := target.Reader()
	if err != nil {
		return nil, err
	}

	defer ioutil.CheckClose(tr, &err)

	bb := bufPool.Get().(*bytes.Buffer)
	defer bufPool.Put(bb)
	bb.Reset()

	_, err = bb.ReadFrom(br)
	if err != nil {
		return nil, err
	}

	tb := bufPool.Get().(*bytes.Buffer)
	defer bufPool.Put(tb)
	tb.Reset()

	_, err = tb.ReadFrom(tr)
	if err != nil {
		return nil, err
	}

	db := diffDelta(index, bb.Bytes(), tb.Bytes())
	delta := &plumbing.MemoryObject{}
	_, err = delta.Write(db)
	if err != nil {
		return nil, err
	}

	delta.SetSize(int64(len(db)))
	delta.SetType(plumbing.OFSDeltaObject)

	return delta, nil
}

// DiffDelta returns the delta that transforms src into tgt.
func DiffDelta(src, tgt []byte) []byte {
	return diffDelta(new(deltaIndex), src, tgt)
}

func diffDelta(index *deltaIndex, src []byte, tgt []byte) []byte {
	buf := bufPool.Get().(*bytes.Buffer)
	defer bufPool.Put(buf)
	buf.Reset()
	buf.Write(deltaEncodeSize(len(src)))
	buf.Write(deltaEncodeSize(len(tgt)))

	if len(index.entries) == 0 {
		index.init(src)
	}

	ibuf := bufPool.Get().(*bytes.Buffer)
	defer bufPool.Put(ibuf)
	ibuf.Reset()
	for i := 0; i < len(tgt); i++ {
		offset, l := index.findMatch(src, tgt, i)

		if l == 0 {
			// couldn't find a match, just write the current byte and continue
			ibuf.WriteByte(tgt[i])
		} else if l < 0 {
			// src is less than blksz, copy the rest of the target to avoid
			// calls to findMatch
			for ; i < len(tgt); i++ {
				ibuf.WriteByte(tgt[i])
			}
		} else if l < s {
			// remaining target is less than blksz, copy what's left of it
			// and avoid calls to findMatch
			for j := i; j < i+l; j++ {
				ibuf.WriteByte(tgt[j])
			}
			i += l - 1
		} else {
			encodeInsertOperation(ibuf, buf)

			rl := l
			aOffset := offset
			for rl > 0 {
				if rl < maxCopySize {
					buf.Write(encodeCopyOperation(aOffset, rl))
					break
				}

				buf.Write(encodeCopyOperation(aOffset, maxCopySize))
				rl -= maxCopySize
				aOffset += maxCopySize
			}

			i += l - 1
		}
	}

	encodeInsertOperation(ibuf, buf)

	// buf.Bytes() is only valid until the next modifying operation on the buffer. Copy it.
	return append([]byte{}, buf.Bytes()...)
}

func encodeInsertOperation(ibuf, buf *bytes.Buffer) {
	if ibuf.Len() == 0 {
		return
	}

	b := ibuf.Bytes()
	s := ibuf.Len()
	o := 0
	for {
		if s <= 127 {
			break
		}
		buf.WriteByte(byte(127))
		buf.Write(b[o : o+127])
		s -= 127
		o += 127
	}
	buf.WriteByte(byte(s))
	buf.Write(b[o : o+s])

	ibuf.Reset()
}

func deltaEncodeSize(size int) []byte {
	var ret []byte
	c := size & 0x7f
	size >>= 7
	for {
		if size == 0 {
			break
		}

		ret = append(ret, byte(c|0x80))
		c = size & 0x7f
		size >>= 7
	}
	ret = append(ret, byte(c))

	return ret
}

func encodeCopyOperation(offset, length int) []byte {
	code := 0x80
	var opcodes []byte

	var i uint
	for i = 0; i < 4; i++ {
		f := 0xff << (i * 8)
		if offset&f != 0 {
			opcodes = append(opcodes, byte(offset&f>>(i*8)))
			code |= 0x01 << i
		}
	}

	for i = 0; i < 3; i++ {
		f := 0xff << (i * 8)
		if length&f != 0 {
			opcodes = append(opcodes, byte(length&f>>(i*8)))
			code |= 0x10 << i
		}
	}

	return append([]byte{byte(code)}, opcodes...)
}
 07070100000532000081A4000000000000000000000001645E367C0000054D000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/doc.go    // Package packfile implements encoding and decoding of packfile format.
//
//  == pack-*.pack files have the following format:
//
//    - A header appears at the beginning and consists of the following:
//
//      4-byte signature:
//          The signature is: {'P', 'A', 'C', 'K'}
//
//      4-byte version number (network byte order):
//          GIT currently accepts version number 2 or 3 but
//          generates version 2 only.
//
//      4-byte number of objects contained in the pack (network byte order)
//
//      Observation: we cannot have more than 4G versions ;-) and
//      more than 4G objects in a pack.
//
//    - The header is followed by number of object entries, each of
//      which looks like this:
//
//      (undeltified representation)
//      n-byte type and length (3-bit type, (n-1)*7+4-bit length)
//      compressed data
//
//      (deltified representation)
//      n-byte type and length (3-bit type, (n-1)*7+4-bit length)
//      20-byte base object name
//      compressed delta data
//
//      Observation: length of each object is encoded in a variable
//      length format and is not constrained to 32-bit or anything.
//
//   - The trailer records 20-byte SHA1 checksum of all of the above.
//
//
// Source:
// https://www.kernel.org/pub/software/scm/git/docs/v1.7.5/technical/pack-protocol.txt
package packfile
   07070100000533000081A4000000000000000000000001645E367C000013A6000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/encoder.go    package packfile

import (
	"compress/zlib"
	"crypto/sha1"
	"fmt"
	"io"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/storer"
	"github.com/go-git/go-git/v5/utils/binary"
	"github.com/go-git/go-git/v5/utils/ioutil"
)

// Encoder gets the data from the storage and write it into the writer in PACK
// format
type Encoder struct {
	selector *deltaSelector
	w        *offsetWriter
	zw       *zlib.Writer
	hasher   plumbing.Hasher

	useRefDeltas bool
}

// NewEncoder creates a new packfile encoder using a specific Writer and
// EncodedObjectStorer. By default deltas used to generate the packfile will be
// OFSDeltaObject. To use Reference deltas, set useRefDeltas to true.
func NewEncoder(w io.Writer, s storer.EncodedObjectStorer, useRefDeltas bool) *Encoder {
	h := plumbing.Hasher{
		Hash: sha1.New(),
	}
	mw := io.MultiWriter(w, h)
	ow := newOffsetWriter(mw)
	zw := zlib.NewWriter(mw)
	return &Encoder{
		selector:     newDeltaSelector(s),
		w:            ow,
		zw:           zw,
		hasher:       h,
		useRefDeltas: useRefDeltas,
	}
}

// Encode creates a packfile containing all the objects referenced in
// hashes and writes it to the writer in the Encoder.  `packWindow`
// specifies the size of the sliding window used to compare objects
// for delta compression; 0 turns off delta compression entirely.
func (e *Encoder) Encode(
	hashes []plumbing.Hash,
	packWindow uint,
) (plumbing.Hash, error) {
	objects, err := e.selector.ObjectsToPack(hashes, packWindow)
	if err != nil {
		return plumbing.ZeroHash, err
	}

	return e.encode(objects)
}

func (e *Encoder) encode(objects []*ObjectToPack) (plumbing.Hash, error) {
	if err := e.head(len(objects)); err != nil {
		return plumbing.ZeroHash, err
	}

	for _, o := range objects {
		if err := e.entry(o); err != nil {
			return plumbing.ZeroHash, err
		}
	}

	return e.footer()
}

func (e *Encoder) head(numEntries int) error {
	return binary.Write(
		e.w,
		signature,
		int32(VersionSupported),
		int32(numEntries),
	)
}

func (e *Encoder) entry(o *ObjectToPack) (err error) {
	if o.WantWrite() {
		// A cycle exists in this delta chain. This should only occur if a
		// selected object representation disappeared during writing
		// (for example due to a concurrent repack) and a different base
		// was chosen, forcing a cycle. Select something other than a
		// delta, and write this object.
		e.selector.restoreOriginal(o)
		o.BackToOriginal()
	}

	if o.IsWritten() {
		return nil
	}

	o.MarkWantWrite()

	if err := e.writeBaseIfDelta(o); err != nil {
		return err
	}

	// We need to check if we already write that object due a cyclic delta chain
	if o.IsWritten() {
		return nil
	}

	o.Offset = e.w.Offset()

	if o.IsDelta() {
		if err := e.writeDeltaHeader(o); err != nil {
			return err
		}
	} else {
		if err := e.entryHead(o.Type(), o.Size()); err != nil {
			return err
		}
	}

	e.zw.Reset(e.w)

	defer ioutil.CheckClose(e.zw, &err)

	or, err := o.Object.Reader()
	if err != nil {
		return err
	}

	defer ioutil.CheckClose(or, &err)

	_, err = io.Copy(e.zw, or)
	if err != nil {
		return err
	}

	return nil
}

func (e *Encoder) writeBaseIfDelta(o *ObjectToPack) error {
	if o.IsDelta() && !o.Base.IsWritten() {
		// We must write base first
		return e.entry(o.Base)
	}

	return nil
}

func (e *Encoder) writeDeltaHeader(o *ObjectToPack) error {
	// Write offset deltas by default
	t := plumbing.OFSDeltaObject
	if e.useRefDeltas {
		t = plumbing.REFDeltaObject
	}

	if err := e.entryHead(t, o.Object.Size()); err != nil {
		return err
	}

	if e.useRefDeltas {
		return e.writeRefDeltaHeader(o.Base.Hash())
	} else {
		return e.writeOfsDeltaHeader(o)
	}
}

func (e *Encoder) writeRefDeltaHeader(base plumbing.Hash) error {
	return binary.Write(e.w, base)
}

func (e *Encoder) writeOfsDeltaHeader(o *ObjectToPack) error {
	// for OFS_DELTA, offset of the base is interpreted as negative offset
	// relative to the type-byte of the header of the ofs-delta entry.
	relativeOffset := o.Offset - o.Base.Offset
	if relativeOffset <= 0 {
		return fmt.Errorf("bad offset for OFS_DELTA entry: %d", relativeOffset)
	}

	return binary.WriteVariableWidthInt(e.w, relativeOffset)
}

func (e *Encoder) entryHead(typeNum plumbing.ObjectType, size int64) error {
	t := int64(typeNum)
	header := []byte{}
	c := (t << firstLengthBits) | (size & maskFirstLength)
	size >>= firstLengthBits
	for {
		if size == 0 {
			break
		}
		header = append(header, byte(c|maskContinue))
		c = size & int64(maskLength)
		size >>= lengthBits
	}

	header = append(header, byte(c))
	_, err := e.w.Write(header)

	return err
}

func (e *Encoder) footer() (plumbing.Hash, error) {
	h := e.hasher.Sum()
	return h, binary.Write(e.w, h)
}

type offsetWriter struct {
	w      io.Writer
	offset int64
}

func newOffsetWriter(w io.Writer) *offsetWriter {
	return &offsetWriter{w: w}
}

func (ow *offsetWriter) Write(p []byte) (n int, err error) {
	n, err = ow.w.Write(p)
	ow.offset += int64(n)
	return n, err
}

func (ow *offsetWriter) Offset() int64 {
	return ow.offset
}
  07070100000534000081A4000000000000000000000001645E367C00000285000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/error.go  package packfile

import "fmt"

// Error specifies errors returned during packfile parsing.
type Error struct {
	reason, details string
}

// NewError returns a new error.
func NewError(reason string) *Error {
	return &Error{reason: reason}
}

// Error returns a text representation of the error.
func (e *Error) Error() string {
	if e.details == "" {
		return e.reason
	}

	return fmt.Sprintf("%s: %s", e.reason, e.details)
}

// AddDetails adds details to an error, with additional text.
func (e *Error) AddDetails(format string, args ...interface{}) *Error {
	return &Error{
		reason:  e.reason,
		details: fmt.Sprintf(format, args...),
	}
}
   07070100000535000081A4000000000000000000000001645E367C00000989000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/fsobject.go   package packfile

import (
	"io"

	billy "github.com/go-git/go-billy/v5"
	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/cache"
	"github.com/go-git/go-git/v5/plumbing/format/idxfile"
)

// FSObject is an object from the packfile on the filesystem.
type FSObject struct {
	hash   plumbing.Hash
	h      *ObjectHeader
	offset int64
	size   int64
	typ    plumbing.ObjectType
	index  idxfile.Index
	fs     billy.Filesystem
	path   string
	cache  cache.Object
}

// NewFSObject creates a new filesystem object.
func NewFSObject(
	hash plumbing.Hash,
	finalType plumbing.ObjectType,
	offset int64,
	contentSize int64,
	index idxfile.Index,
	fs billy.Filesystem,
	path string,
	cache cache.Object,
) *FSObject {
	return &FSObject{
		hash:   hash,
		offset: offset,
		size:   contentSize,
		typ:    finalType,
		index:  index,
		fs:     fs,
		path:   path,
		cache:  cache,
	}
}

// Reader implements the plumbing.EncodedObject interface.
func (o *FSObject) Reader() (io.ReadCloser, error) {
	obj, ok := o.cache.Get(o.hash)
	if ok && obj != o {
		reader, err := obj.Reader()
		if err != nil {
			return nil, err
		}

		return reader, nil
	}

	f, err := o.fs.Open(o.path)
	if err != nil {
		return nil, err
	}

	p := NewPackfileWithCache(o.index, nil, f, o.cache)
	r, err := p.getObjectContent(o.offset)
	if err != nil {
		_ = f.Close()
		return nil, err
	}

	if err := f.Close(); err != nil {
		return nil, err
	}

	return r, nil
}

// SetSize implements the plumbing.EncodedObject interface. This method
// is a noop.
func (o *FSObject) SetSize(int64) {}

// SetType implements the plumbing.EncodedObject interface. This method is
// a noop.
func (o *FSObject) SetType(plumbing.ObjectType) {}

// Hash implements the plumbing.EncodedObject interface.
func (o *FSObject) Hash() plumbing.Hash { return o.hash }

// Size implements the plumbing.EncodedObject interface.
func (o *FSObject) Size() int64 { return o.size }

// Type implements the plumbing.EncodedObject interface.
func (o *FSObject) Type() plumbing.ObjectType {
	return o.typ
}

// Writer implements the plumbing.EncodedObject interface. This method always
// returns a nil writer.
func (o *FSObject) Writer() (io.WriteCloser, error) {
	return nil, nil
}

type objectReader struct {
	io.ReadCloser
	f billy.File
}

func (r *objectReader) Close() error {
	if err := r.ReadCloser.Close(); err != nil {
		_ = r.f.Close()
		return err
	}

	return r.f.Close()
}
   07070100000536000081A4000000000000000000000001645E367C00000F85000000000000000000000000000000000000005F00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/object_pack.go    package packfile

import (
	"github.com/go-git/go-git/v5/plumbing"
)

// ObjectToPack is a representation of an object that is going to be into a
// pack file.
type ObjectToPack struct {
	// The main object to pack, it could be any object, including deltas
	Object plumbing.EncodedObject
	// Base is the object that a delta is based on (it could be also another delta).
	// If the main object is not a delta, Base will be null
	Base *ObjectToPack
	// Original is the object that we can generate applying the delta to
	// Base, or the same object as Object in the case of a non-delta
	// object.
	Original plumbing.EncodedObject
	// Depth is the amount of deltas needed to resolve to obtain Original
	// (delta based on delta based on ...)
	Depth int

	// offset in pack when object has been already written, or 0 if it
	// has not been written yet
	Offset int64

	// Information from the original object
	resolvedOriginal bool
	originalType     plumbing.ObjectType
	originalSize     int64
	originalHash     plumbing.Hash
}

// newObjectToPack creates a correct ObjectToPack based on a non-delta object
func newObjectToPack(o plumbing.EncodedObject) *ObjectToPack {
	return &ObjectToPack{
		Object:   o,
		Original: o,
	}
}

// newDeltaObjectToPack creates a correct ObjectToPack for a delta object, based on
// his base (could be another delta), the delta target (in this case called original),
// and the delta Object itself
func newDeltaObjectToPack(base *ObjectToPack, original, delta plumbing.EncodedObject) *ObjectToPack {
	return &ObjectToPack{
		Object:   delta,
		Base:     base,
		Original: original,
		Depth:    base.Depth + 1,
	}
}

// BackToOriginal converts that ObjectToPack to a non-deltified object if it was one
func (o *ObjectToPack) BackToOriginal() {
	if o.IsDelta() && o.Original != nil {
		o.Object = o.Original
		o.Base = nil
		o.Depth = 0
	}
}

// IsWritten returns if that ObjectToPack was
// already written into the packfile or not
func (o *ObjectToPack) IsWritten() bool {
	return o.Offset > 1
}

// MarkWantWrite marks this ObjectToPack as WantWrite
// to avoid delta chain loops
func (o *ObjectToPack) MarkWantWrite() {
	o.Offset = 1
}

// WantWrite checks if this ObjectToPack was marked as WantWrite before
func (o *ObjectToPack) WantWrite() bool {
	return o.Offset == 1
}

// SetOriginal sets both Original and saves size, type and hash. If object
// is nil Original is set but previous resolved values are kept
func (o *ObjectToPack) SetOriginal(obj plumbing.EncodedObject) {
	o.Original = obj
	o.SaveOriginalMetadata()
}

// SaveOriginalMetadata saves size, type and hash of Original object
func (o *ObjectToPack) SaveOriginalMetadata() {
	if o.Original != nil {
		o.originalSize = o.Original.Size()
		o.originalType = o.Original.Type()
		o.originalHash = o.Original.Hash()
		o.resolvedOriginal = true
	}
}

// CleanOriginal sets Original to nil
func (o *ObjectToPack) CleanOriginal() {
	o.Original = nil
}

func (o *ObjectToPack) Type() plumbing.ObjectType {
	if o.Original != nil {
		return o.Original.Type()
	}

	if o.resolvedOriginal {
		return o.originalType
	}

	if o.Base != nil {
		return o.Base.Type()
	}

	if o.Object != nil {
		return o.Object.Type()
	}

	panic("cannot get type")
}

func (o *ObjectToPack) Hash() plumbing.Hash {
	if o.Original != nil {
		return o.Original.Hash()
	}

	if o.resolvedOriginal {
		return o.originalHash
	}

	do, ok := o.Object.(plumbing.DeltaObject)
	if ok {
		return do.ActualHash()
	}

	panic("cannot get hash")
}

func (o *ObjectToPack) Size() int64 {
	if o.Original != nil {
		return o.Original.Size()
	}

	if o.resolvedOriginal {
		return o.originalSize
	}

	do, ok := o.Object.(plumbing.DeltaObject)
	if ok {
		return do.ActualSize()
	}

	panic("cannot get ObjectToPack size")
}

func (o *ObjectToPack) IsDelta() bool {
	return o.Base != nil
}

func (o *ObjectToPack) SetDelta(base *ObjectToPack, delta plumbing.EncodedObject) {
	o.Object = delta
	o.Base = base
	o.Depth = base.Depth + 1
}
   07070100000537000081A4000000000000000000000001645E367C00003687000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/packfile.go   package packfile

import (
	"bytes"
	"io"
	"os"

	billy "github.com/go-git/go-billy/v5"
	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/cache"
	"github.com/go-git/go-git/v5/plumbing/format/idxfile"
	"github.com/go-git/go-git/v5/plumbing/storer"
	"github.com/go-git/go-git/v5/utils/ioutil"
)

var (
	// ErrInvalidObject is returned by Decode when an invalid object is
	// found in the packfile.
	ErrInvalidObject = NewError("invalid git object")
	// ErrZLib is returned by Decode when there was an error unzipping
	// the packfile contents.
	ErrZLib = NewError("zlib reading error")
)

// When reading small objects from packfile it is beneficial to do so at
// once to exploit the buffered I/O. In many cases the objects are so small
// that they were already loaded to memory when the object header was
// loaded from the packfile. Wrapping in FSObject would cause this buffered
// data to be thrown away and then re-read later, with the additional
// seeking causing reloads from disk. Objects smaller than this threshold
// are now always read into memory and stored in cache instead of being
// wrapped in FSObject.
const smallObjectThreshold = 16 * 1024

// Packfile allows retrieving information from inside a packfile.
type Packfile struct {
	idxfile.Index
	fs             billy.Filesystem
	file           billy.File
	s              *Scanner
	deltaBaseCache cache.Object
	offsetToType   map[int64]plumbing.ObjectType
}

// NewPackfileWithCache creates a new Packfile with the given object cache.
// If the filesystem is provided, the packfile will return FSObjects, otherwise
// it will return MemoryObjects.
func NewPackfileWithCache(
	index idxfile.Index,
	fs billy.Filesystem,
	file billy.File,
	cache cache.Object,
) *Packfile {
	s := NewScanner(file)
	return &Packfile{
		index,
		fs,
		file,
		s,
		cache,
		make(map[int64]plumbing.ObjectType),
	}
}

// NewPackfile returns a packfile representation for the given packfile file
// and packfile idx.
// If the filesystem is provided, the packfile will return FSObjects, otherwise
// it will return MemoryObjects.
func NewPackfile(index idxfile.Index, fs billy.Filesystem, file billy.File) *Packfile {
	return NewPackfileWithCache(index, fs, file, cache.NewObjectLRUDefault())
}

// Get retrieves the encoded object in the packfile with the given hash.
func (p *Packfile) Get(h plumbing.Hash) (plumbing.EncodedObject, error) {
	offset, err := p.FindOffset(h)
	if err != nil {
		return nil, err
	}

	return p.objectAtOffset(offset, h)
}

// GetByOffset retrieves the encoded object from the packfile at the given
// offset.
func (p *Packfile) GetByOffset(o int64) (plumbing.EncodedObject, error) {
	hash, err := p.FindHash(o)
	if err != nil {
		return nil, err
	}

	return p.objectAtOffset(o, hash)
}

// GetSizeByOffset retrieves the size of the encoded object from the
// packfile with the given offset.
func (p *Packfile) GetSizeByOffset(o int64) (size int64, err error) {
	if _, err := p.s.SeekFromStart(o); err != nil {
		if err == io.EOF || isInvalid(err) {
			return 0, plumbing.ErrObjectNotFound
		}

		return 0, err
	}

	h, err := p.nextObjectHeader()
	if err != nil {
		return 0, err
	}
	return p.getObjectSize(h)
}

func (p *Packfile) objectHeaderAtOffset(offset int64) (*ObjectHeader, error) {
	h, err := p.s.SeekObjectHeader(offset)
	p.s.pendingObject = nil
	return h, err
}

func (p *Packfile) nextObjectHeader() (*ObjectHeader, error) {
	h, err := p.s.NextObjectHeader()
	p.s.pendingObject = nil
	return h, err
}

func (p *Packfile) getDeltaObjectSize(buf *bytes.Buffer) int64 {
	delta := buf.Bytes()
	_, delta = decodeLEB128(delta) // skip src size
	sz, _ := decodeLEB128(delta)
	return int64(sz)
}

func (p *Packfile) getObjectSize(h *ObjectHeader) (int64, error) {
	switch h.Type {
	case plumbing.CommitObject, plumbing.TreeObject, plumbing.BlobObject, plumbing.TagObject:
		return h.Length, nil
	case plumbing.REFDeltaObject, plumbing.OFSDeltaObject:
		buf := bufPool.Get().(*bytes.Buffer)
		defer bufPool.Put(buf)
		buf.Reset()

		if _, _, err := p.s.NextObject(buf); err != nil {
			return 0, err
		}

		return p.getDeltaObjectSize(buf), nil
	default:
		return 0, ErrInvalidObject.AddDetails("type %q", h.Type)
	}
}

func (p *Packfile) getObjectType(h *ObjectHeader) (typ plumbing.ObjectType, err error) {
	switch h.Type {
	case plumbing.CommitObject, plumbing.TreeObject, plumbing.BlobObject, plumbing.TagObject:
		return h.Type, nil
	case plumbing.REFDeltaObject, plumbing.OFSDeltaObject:
		var offset int64
		if h.Type == plumbing.REFDeltaObject {
			offset, err = p.FindOffset(h.Reference)
			if err != nil {
				return
			}
		} else {
			offset = h.OffsetReference
		}

		if baseType, ok := p.offsetToType[offset]; ok {
			typ = baseType
		} else {
			h, err = p.objectHeaderAtOffset(offset)
			if err != nil {
				return
			}

			typ, err = p.getObjectType(h)
			if err != nil {
				return
			}
		}
	default:
		err = ErrInvalidObject.AddDetails("type %q", h.Type)
	}

	p.offsetToType[h.Offset] = typ

	return
}

func (p *Packfile) objectAtOffset(offset int64, hash plumbing.Hash) (plumbing.EncodedObject, error) {
	if obj, ok := p.cacheGet(hash); ok {
		return obj, nil
	}

	h, err := p.objectHeaderAtOffset(offset)
	if err != nil {
		if err == io.EOF || isInvalid(err) {
			return nil, plumbing.ErrObjectNotFound
		}
		return nil, err
	}

	return p.getNextObject(h, hash)
}

func (p *Packfile) getNextObject(h *ObjectHeader, hash plumbing.Hash) (plumbing.EncodedObject, error) {
	var err error

	// If we have no filesystem, we will return a MemoryObject instead
	// of an FSObject.
	if p.fs == nil {
		return p.getNextMemoryObject(h)
	}

	// If the object is small enough then read it completely into memory now since
	// it is already read from disk into buffer anyway. For delta objects we want
	// to perform the optimization too, but we have to be careful about applying
	// small deltas on big objects.
	var size int64
	if h.Length <= smallObjectThreshold {
		if h.Type != plumbing.OFSDeltaObject && h.Type != plumbing.REFDeltaObject {
			return p.getNextMemoryObject(h)
		}

		// For delta objects we read the delta data and apply the small object
		// optimization only if the expanded version of the object still meets
		// the small object threshold condition.
		buf := bufPool.Get().(*bytes.Buffer)
		defer bufPool.Put(buf)
		buf.Reset()
		if _, _, err := p.s.NextObject(buf); err != nil {
			return nil, err
		}

		size = p.getDeltaObjectSize(buf)
		if size <= smallObjectThreshold {
			var obj = new(plumbing.MemoryObject)
			obj.SetSize(size)
			if h.Type == plumbing.REFDeltaObject {
				err = p.fillREFDeltaObjectContentWithBuffer(obj, h.Reference, buf)
			} else {
				err = p.fillOFSDeltaObjectContentWithBuffer(obj, h.OffsetReference, buf)
			}
			return obj, err
		}
	} else {
		size, err = p.getObjectSize(h)
		if err != nil {
			return nil, err
		}
	}

	typ, err := p.getObjectType(h)
	if err != nil {
		return nil, err
	}

	p.offsetToType[h.Offset] = typ

	return NewFSObject(
		hash,
		typ,
		h.Offset,
		size,
		p.Index,
		p.fs,
		p.file.Name(),
		p.deltaBaseCache,
	), nil
}

func (p *Packfile) getObjectContent(offset int64) (io.ReadCloser, error) {
	h, err := p.objectHeaderAtOffset(offset)
	if err != nil {
		return nil, err
	}

	// getObjectContent is called from FSObject, so we have to explicitly
	// get memory object here to avoid recursive cycle
	obj, err := p.getNextMemoryObject(h)
	if err != nil {
		return nil, err
	}

	return obj.Reader()
}

func (p *Packfile) getNextMemoryObject(h *ObjectHeader) (plumbing.EncodedObject, error) {
	var obj = new(plumbing.MemoryObject)
	obj.SetSize(h.Length)
	obj.SetType(h.Type)

	var err error
	switch h.Type {
	case plumbing.CommitObject, plumbing.TreeObject, plumbing.BlobObject, plumbing.TagObject:
		err = p.fillRegularObjectContent(obj)
	case plumbing.REFDeltaObject:
		err = p.fillREFDeltaObjectContent(obj, h.Reference)
	case plumbing.OFSDeltaObject:
		err = p.fillOFSDeltaObjectContent(obj, h.OffsetReference)
	default:
		err = ErrInvalidObject.AddDetails("type %q", h.Type)
	}

	if err != nil {
		return nil, err
	}

	p.offsetToType[h.Offset] = obj.Type()

	return obj, nil
}

func (p *Packfile) fillRegularObjectContent(obj plumbing.EncodedObject) (err error) {
	w, err := obj.Writer()
	if err != nil {
		return err
	}

	defer ioutil.CheckClose(w, &err)

	_, _, err = p.s.NextObject(w)
	p.cachePut(obj)

	return err
}

func (p *Packfile) fillREFDeltaObjectContent(obj plumbing.EncodedObject, ref plumbing.Hash) error {
	buf := bufPool.Get().(*bytes.Buffer)
	defer bufPool.Put(buf)
	buf.Reset()
	_, _, err := p.s.NextObject(buf)
	if err != nil {
		return err
	}

	return p.fillREFDeltaObjectContentWithBuffer(obj, ref, buf)
}

func (p *Packfile) fillREFDeltaObjectContentWithBuffer(obj plumbing.EncodedObject, ref plumbing.Hash, buf *bytes.Buffer) error {
	var err error

	base, ok := p.cacheGet(ref)
	if !ok {
		base, err = p.Get(ref)
		if err != nil {
			return err
		}
	}

	obj.SetType(base.Type())
	err = ApplyDelta(obj, base, buf.Bytes())
	p.cachePut(obj)

	return err
}

func (p *Packfile) fillOFSDeltaObjectContent(obj plumbing.EncodedObject, offset int64) error {
	buf := bufPool.Get().(*bytes.Buffer)
	defer bufPool.Put(buf)
	buf.Reset()
	_, _, err := p.s.NextObject(buf)
	if err != nil {
		return err
	}

	return p.fillOFSDeltaObjectContentWithBuffer(obj, offset, buf)
}

func (p *Packfile) fillOFSDeltaObjectContentWithBuffer(obj plumbing.EncodedObject, offset int64, buf *bytes.Buffer) error {
	hash, err := p.FindHash(offset)
	if err != nil {
		return err
	}

	base, err := p.objectAtOffset(offset, hash)
	if err != nil {
		return err
	}

	obj.SetType(base.Type())
	err = ApplyDelta(obj, base, buf.Bytes())
	p.cachePut(obj)

	return err
}

func (p *Packfile) cacheGet(h plumbing.Hash) (plumbing.EncodedObject, bool) {
	if p.deltaBaseCache == nil {
		return nil, false
	}

	return p.deltaBaseCache.Get(h)
}

func (p *Packfile) cachePut(obj plumbing.EncodedObject) {
	if p.deltaBaseCache == nil {
		return
	}

	p.deltaBaseCache.Put(obj)
}

// GetAll returns an iterator with all encoded objects in the packfile.
// The iterator returned is not thread-safe, it should be used in the same
// thread as the Packfile instance.
func (p *Packfile) GetAll() (storer.EncodedObjectIter, error) {
	return p.GetByType(plumbing.AnyObject)
}

// GetByType returns all the objects of the given type.
func (p *Packfile) GetByType(typ plumbing.ObjectType) (storer.EncodedObjectIter, error) {
	switch typ {
	case plumbing.AnyObject,
		plumbing.BlobObject,
		plumbing.TreeObject,
		plumbing.CommitObject,
		plumbing.TagObject:
		entries, err := p.EntriesByOffset()
		if err != nil {
			return nil, err
		}

		return &objectIter{
			// Easiest way to provide an object decoder is just to pass a Packfile
			// instance. To not mess with the seeks, it's a new instance with a
			// different scanner but the same cache and offset to hash map for
			// reusing as much cache as possible.
			p:    p,
			iter: entries,
			typ:  typ,
		}, nil
	default:
		return nil, plumbing.ErrInvalidType
	}
}

// ID returns the ID of the packfile, which is the checksum at the end of it.
func (p *Packfile) ID() (plumbing.Hash, error) {
	prev, err := p.file.Seek(-20, io.SeekEnd)
	if err != nil {
		return plumbing.ZeroHash, err
	}

	var hash plumbing.Hash
	if _, err := io.ReadFull(p.file, hash[:]); err != nil {
		return plumbing.ZeroHash, err
	}

	if _, err := p.file.Seek(prev, io.SeekStart); err != nil {
		return plumbing.ZeroHash, err
	}

	return hash, nil
}

// Scanner returns the packfile's Scanner
func (p *Packfile) Scanner() *Scanner {
	return p.s
}

// Close the packfile and its resources.
func (p *Packfile) Close() error {
	closer, ok := p.file.(io.Closer)
	if !ok {
		return nil
	}

	return closer.Close()
}

type objectIter struct {
	p    *Packfile
	typ  plumbing.ObjectType
	iter idxfile.EntryIter
}

func (i *objectIter) Next() (plumbing.EncodedObject, error) {
	for {
		e, err := i.iter.Next()
		if err != nil {
			return nil, err
		}

		if i.typ != plumbing.AnyObject {
			if typ, ok := i.p.offsetToType[int64(e.Offset)]; ok {
				if typ != i.typ {
					continue
				}
			} else if obj, ok := i.p.cacheGet(e.Hash); ok {
				if obj.Type() != i.typ {
					i.p.offsetToType[int64(e.Offset)] = obj.Type()
					continue
				}
				return obj, nil
			} else {
				h, err := i.p.objectHeaderAtOffset(int64(e.Offset))
				if err != nil {
					return nil, err
				}

				if h.Type == plumbing.REFDeltaObject || h.Type == plumbing.OFSDeltaObject {
					typ, err := i.p.getObjectType(h)
					if err != nil {
						return nil, err
					}
					if typ != i.typ {
						i.p.offsetToType[int64(e.Offset)] = typ
						continue
					}
					// getObjectType will seek in the file so we cannot use getNextObject safely
					return i.p.objectAtOffset(int64(e.Offset), e.Hash)
				} else {
					if h.Type != i.typ {
						i.p.offsetToType[int64(e.Offset)] = h.Type
						continue
					}
					return i.p.getNextObject(h, e.Hash)
				}
			}
		}

		obj, err := i.p.objectAtOffset(int64(e.Offset), e.Hash)
		if err != nil {
			return nil, err
		}

		return obj, nil
	}
}

func (i *objectIter) ForEach(f func(plumbing.EncodedObject) error) error {
	for {
		o, err := i.Next()
		if err != nil {
			if err == io.EOF {
				return nil
			}
			return err
		}

		if err := f(o); err != nil {
			return err
		}
	}
}

func (i *objectIter) Close() {
	i.iter.Close()
}

// isInvalid checks whether an error is an os.PathError with an os.ErrInvalid
// error inside. It also checks for the windows error, which is different from
// os.ErrInvalid.
func isInvalid(err error) bool {
	pe, ok := err.(*os.PathError)
	if !ok {
		return false
	}

	errstr := pe.Err.Error()
	return errstr == errInvalidUnix || errstr == errInvalidWindows
}

// errInvalidWindows is the Windows equivalent to os.ErrInvalid
const errInvalidWindows = "The parameter is incorrect."

var errInvalidUnix = os.ErrInvalid.Error()
 07070100000538000081A4000000000000000000000001645E367C00002AB9000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/parser.go package packfile

import (
	"bytes"
	"errors"
	"io"
	stdioutil "io/ioutil"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/cache"
	"github.com/go-git/go-git/v5/plumbing/storer"
	"github.com/go-git/go-git/v5/utils/ioutil"
)

var (
	// ErrReferenceDeltaNotFound is returned when the reference delta is not
	// found.
	ErrReferenceDeltaNotFound = errors.New("reference delta not found")

	// ErrNotSeekableSource is returned when the source for the parser is not
	// seekable and a storage was not provided, so it can't be parsed.
	ErrNotSeekableSource = errors.New("parser source is not seekable and storage was not provided")

	// ErrDeltaNotCached is returned when the delta could not be found in cache.
	ErrDeltaNotCached = errors.New("delta could not be found in cache")
)

// Observer interface is implemented by index encoders.
type Observer interface {
	// OnHeader is called when a new packfile is opened.
	OnHeader(count uint32) error
	// OnInflatedObjectHeader is called for each object header read.
	OnInflatedObjectHeader(t plumbing.ObjectType, objSize int64, pos int64) error
	// OnInflatedObjectContent is called for each decoded object.
	OnInflatedObjectContent(h plumbing.Hash, pos int64, crc uint32, content []byte) error
	// OnFooter is called when decoding is done.
	OnFooter(h plumbing.Hash) error
}

// Parser decodes a packfile and calls any observer associated to it. Is used
// to generate indexes.
type Parser struct {
	storage    storer.EncodedObjectStorer
	scanner    *Scanner
	count      uint32
	oi         []*objectInfo
	oiByHash   map[plumbing.Hash]*objectInfo
	oiByOffset map[int64]*objectInfo
	hashOffset map[plumbing.Hash]int64
	checksum   plumbing.Hash

	cache *cache.BufferLRU
	// delta content by offset, only used if source is not seekable
	deltas map[int64][]byte

	ob []Observer
}

// NewParser creates a new Parser. The Scanner source must be seekable.
// If it's not, NewParserWithStorage should be used instead.
func NewParser(scanner *Scanner, ob ...Observer) (*Parser, error) {
	return NewParserWithStorage(scanner, nil, ob...)
}

// NewParserWithStorage creates a new Parser. The scanner source must either
// be seekable or a storage must be provided.
func NewParserWithStorage(
	scanner *Scanner,
	storage storer.EncodedObjectStorer,
	ob ...Observer,
) (*Parser, error) {
	if !scanner.IsSeekable && storage == nil {
		return nil, ErrNotSeekableSource
	}

	var deltas map[int64][]byte
	if !scanner.IsSeekable {
		deltas = make(map[int64][]byte)
	}

	return &Parser{
		storage: storage,
		scanner: scanner,
		ob:      ob,
		count:   0,
		cache:   cache.NewBufferLRUDefault(),
		deltas:  deltas,
	}, nil
}

func (p *Parser) forEachObserver(f func(o Observer) error) error {
	for _, o := range p.ob {
		if err := f(o); err != nil {
			return err
		}
	}
	return nil
}

func (p *Parser) onHeader(count uint32) error {
	return p.forEachObserver(func(o Observer) error {
		return o.OnHeader(count)
	})
}

func (p *Parser) onInflatedObjectHeader(
	t plumbing.ObjectType,
	objSize int64,
	pos int64,
) error {
	return p.forEachObserver(func(o Observer) error {
		return o.OnInflatedObjectHeader(t, objSize, pos)
	})
}

func (p *Parser) onInflatedObjectContent(
	h plumbing.Hash,
	pos int64,
	crc uint32,
	content []byte,
) error {
	return p.forEachObserver(func(o Observer) error {
		return o.OnInflatedObjectContent(h, pos, crc, content)
	})
}

func (p *Parser) onFooter(h plumbing.Hash) error {
	return p.forEachObserver(func(o Observer) error {
		return o.OnFooter(h)
	})
}

// Parse start decoding phase of the packfile.
func (p *Parser) Parse() (plumbing.Hash, error) {
	if err := p.init(); err != nil {
		return plumbing.ZeroHash, err
	}

	if err := p.indexObjects(); err != nil {
		return plumbing.ZeroHash, err
	}

	var err error
	p.checksum, err = p.scanner.Checksum()
	if err != nil && err != io.EOF {
		return plumbing.ZeroHash, err
	}

	if err := p.resolveDeltas(); err != nil {
		return plumbing.ZeroHash, err
	}

	if err := p.onFooter(p.checksum); err != nil {
		return plumbing.ZeroHash, err
	}

	return p.checksum, nil
}

func (p *Parser) init() error {
	_, c, err := p.scanner.Header()
	if err != nil {
		return err
	}

	if err := p.onHeader(c); err != nil {
		return err
	}

	p.count = c
	p.oiByHash = make(map[plumbing.Hash]*objectInfo, p.count)
	p.oiByOffset = make(map[int64]*objectInfo, p.count)
	p.oi = make([]*objectInfo, p.count)

	return nil
}

func (p *Parser) indexObjects() error {
	buf := new(bytes.Buffer)

	for i := uint32(0); i < p.count; i++ {
		buf.Reset()

		oh, err := p.scanner.NextObjectHeader()
		if err != nil {
			return err
		}

		delta := false
		var ota *objectInfo
		switch t := oh.Type; t {
		case plumbing.OFSDeltaObject:
			delta = true

			parent, ok := p.oiByOffset[oh.OffsetReference]
			if !ok {
				return plumbing.ErrObjectNotFound
			}

			ota = newDeltaObject(oh.Offset, oh.Length, t, parent)
			parent.Children = append(parent.Children, ota)
		case plumbing.REFDeltaObject:
			delta = true
			parent, ok := p.oiByHash[oh.Reference]
			if !ok {
				// can't find referenced object in this pack file
				// this must be a "thin" pack.
				parent = &objectInfo{ //Placeholder parent
					SHA1:        oh.Reference,
					ExternalRef: true, // mark as an external reference that must be resolved
					Type:        plumbing.AnyObject,
					DiskType:    plumbing.AnyObject,
				}
				p.oiByHash[oh.Reference] = parent
			}
			ota = newDeltaObject(oh.Offset, oh.Length, t, parent)
			parent.Children = append(parent.Children, ota)

		default:
			ota = newBaseObject(oh.Offset, oh.Length, t)
		}

		_, crc, err := p.scanner.NextObject(buf)
		if err != nil {
			return err
		}

		ota.Crc32 = crc
		ota.Length = oh.Length

		data := buf.Bytes()
		if !delta {
			sha1, err := getSHA1(ota.Type, data)
			if err != nil {
				return err
			}

			ota.SHA1 = sha1
			p.oiByHash[ota.SHA1] = ota
		}

		if p.storage != nil && !delta {
			obj := new(plumbing.MemoryObject)
			obj.SetSize(oh.Length)
			obj.SetType(oh.Type)
			if _, err := obj.Write(data); err != nil {
				return err
			}

			if _, err := p.storage.SetEncodedObject(obj); err != nil {
				return err
			}
		}

		if delta && !p.scanner.IsSeekable {
			p.deltas[oh.Offset] = make([]byte, len(data))
			copy(p.deltas[oh.Offset], data)
		}

		p.oiByOffset[oh.Offset] = ota
		p.oi[i] = ota
	}

	return nil
}

func (p *Parser) resolveDeltas() error {
	buf := &bytes.Buffer{}
	for _, obj := range p.oi {
		buf.Reset()
		err := p.get(obj, buf)
		if err != nil {
			return err
		}
		content := buf.Bytes()

		if err := p.onInflatedObjectHeader(obj.Type, obj.Length, obj.Offset); err != nil {
			return err
		}

		if err := p.onInflatedObjectContent(obj.SHA1, obj.Offset, obj.Crc32, content); err != nil {
			return err
		}

		if !obj.IsDelta() && len(obj.Children) > 0 {
			for _, child := range obj.Children {
				if err := p.resolveObject(stdioutil.Discard, child, content); err != nil {
					return err
				}
			}

			// Remove the delta from the cache.
			if obj.DiskType.IsDelta() && !p.scanner.IsSeekable {
				delete(p.deltas, obj.Offset)
			}
		}
	}

	return nil
}

func (p *Parser) get(o *objectInfo, buf *bytes.Buffer) (err error) {
	if !o.ExternalRef { // skip cache check for placeholder parents
		b, ok := p.cache.Get(o.Offset)
		if ok {
			_, err := buf.Write(b)
			return err
		}
	}

	// If it's not on the cache and is not a delta we can try to find it in the
	// storage, if there's one. External refs must enter here.
	if p.storage != nil && !o.Type.IsDelta() {
		var e plumbing.EncodedObject
		e, err = p.storage.EncodedObject(plumbing.AnyObject, o.SHA1)
		if err != nil {
			return err
		}
		o.Type = e.Type()

		var r io.ReadCloser
		r, err = e.Reader()
		if err != nil {
			return err
		}

		defer ioutil.CheckClose(r, &err)

		_, err = buf.ReadFrom(io.LimitReader(r, e.Size()))
		return err
	}

	if o.ExternalRef {
		// we were not able to resolve a ref in a thin pack
		return ErrReferenceDeltaNotFound
	}

	if o.DiskType.IsDelta() {
		b := bufPool.Get().(*bytes.Buffer)
		defer bufPool.Put(b)
		b.Reset()
		err := p.get(o.Parent, b)
		if err != nil {
			return err
		}
		base := b.Bytes()

		err = p.resolveObject(buf, o, base)
		if err != nil {
			return err
		}
	} else {
		err := p.readData(buf, o)
		if err != nil {
			return err
		}
	}

	if len(o.Children) > 0 {
		data := make([]byte, buf.Len())
		copy(data, buf.Bytes())
		p.cache.Put(o.Offset, data)
	}
	return nil
}

func (p *Parser) resolveObject(
	w io.Writer,
	o *objectInfo,
	base []byte,
) error {
	if !o.DiskType.IsDelta() {
		return nil
	}
	buf := bufPool.Get().(*bytes.Buffer)
	defer bufPool.Put(buf)
	buf.Reset()
	err := p.readData(buf, o)
	if err != nil {
		return err
	}
	data := buf.Bytes()

	data, err = applyPatchBase(o, data, base)
	if err != nil {
		return err
	}

	if p.storage != nil {
		obj := new(plumbing.MemoryObject)
		obj.SetSize(o.Size())
		obj.SetType(o.Type)
		if _, err := obj.Write(data); err != nil {
			return err
		}

		if _, err := p.storage.SetEncodedObject(obj); err != nil {
			return err
		}
	}
	_, err = w.Write(data)
	return err
}

func (p *Parser) readData(w io.Writer, o *objectInfo) error {
	if !p.scanner.IsSeekable && o.DiskType.IsDelta() {
		data, ok := p.deltas[o.Offset]
		if !ok {
			return ErrDeltaNotCached
		}
		_, err := w.Write(data)
		return err
	}

	if _, err := p.scanner.SeekObjectHeader(o.Offset); err != nil {
		return err
	}

	if _, _, err := p.scanner.NextObject(w); err != nil {
		return err
	}
	return nil
}

func applyPatchBase(ota *objectInfo, data, base []byte) ([]byte, error) {
	patched, err := PatchDelta(base, data)
	if err != nil {
		return nil, err
	}

	if ota.SHA1 == plumbing.ZeroHash {
		ota.Type = ota.Parent.Type
		sha1, err := getSHA1(ota.Type, patched)
		if err != nil {
			return nil, err
		}

		ota.SHA1 = sha1
		ota.Length = int64(len(patched))
	}

	return patched, nil
}

func getSHA1(t plumbing.ObjectType, data []byte) (plumbing.Hash, error) {
	hasher := plumbing.NewHasher(t, int64(len(data)))
	if _, err := hasher.Write(data); err != nil {
		return plumbing.ZeroHash, err
	}

	return hasher.Sum(), nil
}

type objectInfo struct {
	Offset      int64
	Length      int64
	Type        plumbing.ObjectType
	DiskType    plumbing.ObjectType
	ExternalRef bool // indicates this is an external reference in a thin pack file

	Crc32 uint32

	Parent   *objectInfo
	Children []*objectInfo
	SHA1     plumbing.Hash
}

func newBaseObject(offset, length int64, t plumbing.ObjectType) *objectInfo {
	return newDeltaObject(offset, length, t, nil)
}

func newDeltaObject(
	offset, length int64,
	t plumbing.ObjectType,
	parent *objectInfo,
) *objectInfo {
	obj := &objectInfo{
		Offset:   offset,
		Length:   length,
		Type:     t,
		DiskType: t,
		Crc32:    0,
		Parent:   parent,
	}

	return obj
}

func (o *objectInfo) IsDelta() bool {
	return o.Type.IsDelta()
}

func (o *objectInfo) Size() int64 {
	return o.Length
}
   07070100000539000081A4000000000000000000000001645E367C0000146F000000000000000000000000000000000000005F00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/patch_delta.go    package packfile

import (
	"bytes"
	"errors"
	"io"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/utils/ioutil"
)

// See https://github.com/git/git/blob/49fa3dc76179e04b0833542fa52d0f287a4955ac/delta.h
// https://github.com/git/git/blob/c2c5f6b1e479f2c38e0e01345350620944e3527f/patch-delta.c,
// and https://github.com/tarruda/node-git-core/blob/master/src/js/delta.js
// for details about the delta format.

const deltaSizeMin = 4

// ApplyDelta writes to target the result of applying the modification deltas in delta to base.
func ApplyDelta(target, base plumbing.EncodedObject, delta []byte) (err error) {
	r, err := base.Reader()
	if err != nil {
		return err
	}

	defer ioutil.CheckClose(r, &err)

	w, err := target.Writer()
	if err != nil {
		return err
	}

	defer ioutil.CheckClose(w, &err)

	buf := bufPool.Get().(*bytes.Buffer)
	defer bufPool.Put(buf)
	buf.Reset()
	_, err = buf.ReadFrom(r)
	if err != nil {
		return err
	}
	src := buf.Bytes()

	dst := bufPool.Get().(*bytes.Buffer)
	defer bufPool.Put(dst)
	dst.Reset()
	err = patchDelta(dst, src, delta)
	if err != nil {
		return err
	}

	target.SetSize(int64(dst.Len()))

	b := byteSlicePool.Get().([]byte)
	_, err = io.CopyBuffer(w, dst, b)
	byteSlicePool.Put(b)
	return err
}

var (
	ErrInvalidDelta = errors.New("invalid delta")
	ErrDeltaCmd     = errors.New("wrong delta command")
)

// PatchDelta returns the result of applying the modification deltas in delta to src.
// An error will be returned if delta is corrupted (ErrDeltaLen) or an action command
// is not copy from source or copy from delta (ErrDeltaCmd).
func PatchDelta(src, delta []byte) ([]byte, error) {
	b := &bytes.Buffer{}
	if err := patchDelta(b, src, delta); err != nil {
		return nil, err
	}
	return b.Bytes(), nil
}

func patchDelta(dst *bytes.Buffer, src, delta []byte) error {
	if len(delta) < deltaSizeMin {
		return ErrInvalidDelta
	}

	srcSz, delta := decodeLEB128(delta)
	if srcSz != uint(len(src)) {
		return ErrInvalidDelta
	}

	targetSz, delta := decodeLEB128(delta)
	remainingTargetSz := targetSz

	var cmd byte
	dst.Grow(int(targetSz))
	for {
		if len(delta) == 0 {
			return ErrInvalidDelta
		}

		cmd = delta[0]
		delta = delta[1:]
		if isCopyFromSrc(cmd) {
			var offset, sz uint
			var err error
			offset, delta, err = decodeOffset(cmd, delta)
			if err != nil {
				return err
			}

			sz, delta, err = decodeSize(cmd, delta)
			if err != nil {
				return err
			}

			if invalidSize(sz, targetSz) ||
				invalidOffsetSize(offset, sz, srcSz) {
				break
			}
			dst.Write(src[offset : offset+sz])
			remainingTargetSz -= sz
		} else if isCopyFromDelta(cmd) {
			sz := uint(cmd) // cmd is the size itself
			if invalidSize(sz, targetSz) {
				return ErrInvalidDelta
			}

			if uint(len(delta)) < sz {
				return ErrInvalidDelta
			}

			dst.Write(delta[0:sz])
			remainingTargetSz -= sz
			delta = delta[sz:]
		} else {
			return ErrDeltaCmd
		}

		if remainingTargetSz <= 0 {
			break
		}
	}

	return nil
}

// Decodes a number encoded as an unsigned LEB128 at the start of some
// binary data and returns the decoded number and the rest of the
// stream.
//
// This must be called twice on the delta data buffer, first to get the
// expected source buffer size, and again to get the target buffer size.
func decodeLEB128(input []byte) (uint, []byte) {
	var num, sz uint
	var b byte
	for {
		b = input[sz]
		num |= (uint(b) & payload) << (sz * 7) // concats 7 bits chunks
		sz++

		if uint(b)&continuation == 0 || sz == uint(len(input)) {
			break
		}
	}

	return num, input[sz:]
}

const (
	payload      = 0x7f // 0111 1111
	continuation = 0x80 // 1000 0000
)

func isCopyFromSrc(cmd byte) bool {
	return (cmd & 0x80) != 0
}

func isCopyFromDelta(cmd byte) bool {
	return (cmd&0x80) == 0 && cmd != 0
}

func decodeOffset(cmd byte, delta []byte) (uint, []byte, error) {
	var offset uint
	if (cmd & 0x01) != 0 {
		if len(delta) == 0 {
			return 0, nil, ErrInvalidDelta
		}
		offset = uint(delta[0])
		delta = delta[1:]
	}
	if (cmd & 0x02) != 0 {
		if len(delta) == 0 {
			return 0, nil, ErrInvalidDelta
		}
		offset |= uint(delta[0]) << 8
		delta = delta[1:]
	}
	if (cmd & 0x04) != 0 {
		if len(delta) == 0 {
			return 0, nil, ErrInvalidDelta
		}
		offset |= uint(delta[0]) << 16
		delta = delta[1:]
	}
	if (cmd & 0x08) != 0 {
		if len(delta) == 0 {
			return 0, nil, ErrInvalidDelta
		}
		offset |= uint(delta[0]) << 24
		delta = delta[1:]
	}

	return offset, delta, nil
}

func decodeSize(cmd byte, delta []byte) (uint, []byte, error) {
	var sz uint
	if (cmd & 0x10) != 0 {
		if len(delta) == 0 {
			return 0, nil, ErrInvalidDelta
		}
		sz = uint(delta[0])
		delta = delta[1:]
	}
	if (cmd & 0x20) != 0 {
		if len(delta) == 0 {
			return 0, nil, ErrInvalidDelta
		}
		sz |= uint(delta[0]) << 8
		delta = delta[1:]
	}
	if (cmd & 0x40) != 0 {
		if len(delta) == 0 {
			return 0, nil, ErrInvalidDelta
		}
		sz |= uint(delta[0]) << 16
		delta = delta[1:]
	}
	if sz == 0 {
		sz = 0x10000
	}

	return sz, delta, nil
}

func invalidSize(sz, targetSz uint) bool {
	return sz > targetSz
}

func invalidOffsetSize(offset, sz, srcSz uint) bool {
	return sumOverflows(offset, sz) ||
		offset+sz > srcSz
}

func sumOverflows(a, b uint) bool {
	return a+b < a
}
 0707010000053A000081A4000000000000000000000001645E367C00002AEA000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/packfile/scanner.go    package packfile

import (
	"bufio"
	"bytes"
	"compress/zlib"
	"fmt"
	"hash"
	"hash/crc32"
	"io"
	stdioutil "io/ioutil"
	"sync"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/utils/binary"
	"github.com/go-git/go-git/v5/utils/ioutil"
)

var (
	// ErrEmptyPackfile is returned by ReadHeader when no data is found in the packfile
	ErrEmptyPackfile = NewError("empty packfile")
	// ErrBadSignature is returned by ReadHeader when the signature in the packfile is incorrect.
	ErrBadSignature = NewError("malformed pack file signature")
	// ErrUnsupportedVersion is returned by ReadHeader when the packfile version is
	// different than VersionSupported.
	ErrUnsupportedVersion = NewError("unsupported packfile version")
	// ErrSeekNotSupported returned if seek is not support
	ErrSeekNotSupported = NewError("not seek support")
)

// ObjectHeader contains the information related to the object, this information
// is collected from the previous bytes to the content of the object.
type ObjectHeader struct {
	Type            plumbing.ObjectType
	Offset          int64
	Length          int64
	Reference       plumbing.Hash
	OffsetReference int64
}

type Scanner struct {
	r   *scannerReader
	crc hash.Hash32

	// pendingObject is used to detect if an object has been read, or still
	// is waiting to be read
	pendingObject    *ObjectHeader
	version, objects uint32

	// lsSeekable says if this scanner can do Seek or not, to have a Scanner
	// seekable a r implementing io.Seeker is required
	IsSeekable bool
}

// NewScanner returns a new Scanner based on a reader, if the given reader
// implements io.ReadSeeker the Scanner will be also Seekable
func NewScanner(r io.Reader) *Scanner {
	_, ok := r.(io.ReadSeeker)

	crc := crc32.NewIEEE()
	return &Scanner{
		r:          newScannerReader(r, crc),
		crc:        crc,
		IsSeekable: ok,
	}
}

func (s *Scanner) Reset(r io.Reader) {
	_, ok := r.(io.ReadSeeker)

	s.r.Reset(r)
	s.crc.Reset()
	s.IsSeekable = ok
	s.pendingObject = nil
	s.version = 0
	s.objects = 0
}

// Header reads the whole packfile header (signature, version and object count).
// It returns the version and the object count and performs checks on the
// validity of the signature and the version fields.
func (s *Scanner) Header() (version, objects uint32, err error) {
	if s.version != 0 {
		return s.version, s.objects, nil
	}

	sig, err := s.readSignature()
	if err != nil {
		if err == io.EOF {
			err = ErrEmptyPackfile
		}

		return
	}

	if !s.isValidSignature(sig) {
		err = ErrBadSignature
		return
	}

	version, err = s.readVersion()
	s.version = version
	if err != nil {
		return
	}

	if !s.isSupportedVersion(version) {
		err = ErrUnsupportedVersion.AddDetails("%d", version)
		return
	}

	objects, err = s.readCount()
	s.objects = objects
	return
}

// readSignature reads an returns the signature field in the packfile.
func (s *Scanner) readSignature() ([]byte, error) {
	var sig = make([]byte, 4)
	if _, err := io.ReadFull(s.r, sig); err != nil {
		return []byte{}, err
	}

	return sig, nil
}

// isValidSignature returns if sig is a valid packfile signature.
func (s *Scanner) isValidSignature(sig []byte) bool {
	return bytes.Equal(sig, signature)
}

// readVersion reads and returns the version field of a packfile.
func (s *Scanner) readVersion() (uint32, error) {
	return binary.ReadUint32(s.r)
}

// isSupportedVersion returns whether version v is supported by the parser.
// The current supported version is VersionSupported, defined above.
func (s *Scanner) isSupportedVersion(v uint32) bool {
	return v == VersionSupported
}

// readCount reads and returns the count of objects field of a packfile.
func (s *Scanner) readCount() (uint32, error) {
	return binary.ReadUint32(s.r)
}

// SeekObjectHeader seeks to specified offset and returns the ObjectHeader
// for the next object in the reader
func (s *Scanner) SeekObjectHeader(offset int64) (*ObjectHeader, error) {
	// if seeking we assume that you are not interested in the header
	if s.version == 0 {
		s.version = VersionSupported
	}

	if _, err := s.r.Seek(offset, io.SeekStart); err != nil {
		return nil, err
	}

	h, err := s.nextObjectHeader()
	if err != nil {
		return nil, err
	}

	h.Offset = offset
	return h, nil
}

// NextObjectHeader returns the ObjectHeader for the next object in the reader
func (s *Scanner) NextObjectHeader() (*ObjectHeader, error) {
	if err := s.doPending(); err != nil {
		return nil, err
	}

	offset, err := s.r.Seek(0, io.SeekCurrent)
	if err != nil {
		return nil, err
	}

	h, err := s.nextObjectHeader()
	if err != nil {
		return nil, err
	}

	h.Offset = offset
	return h, nil
}

// nextObjectHeader returns the ObjectHeader for the next object in the reader
// without the Offset field
func (s *Scanner) nextObjectHeader() (*ObjectHeader, error) {
	s.r.Flush()
	s.crc.Reset()

	h := &ObjectHeader{}
	s.pendingObject = h

	var err error
	h.Offset, err = s.r.Seek(0, io.SeekCurrent)
	if err != nil {
		return nil, err
	}

	h.Type, h.Length, err = s.readObjectTypeAndLength()
	if err != nil {
		return nil, err
	}

	switch h.Type {
	case plumbing.OFSDeltaObject:
		no, err := binary.ReadVariableWidthInt(s.r)
		if err != nil {
			return nil, err
		}

		h.OffsetReference = h.Offset - no
	case plumbing.REFDeltaObject:
		var err error
		h.Reference, err = binary.ReadHash(s.r)
		if err != nil {
			return nil, err
		}
	}

	return h, nil
}

func (s *Scanner) doPending() error {
	if s.version == 0 {
		var err error
		s.version, s.objects, err = s.Header()
		if err != nil {
			return err
		}
	}

	return s.discardObjectIfNeeded()
}

func (s *Scanner) discardObjectIfNeeded() error {
	if s.pendingObject == nil {
		return nil
	}

	h := s.pendingObject
	n, _, err := s.NextObject(stdioutil.Discard)
	if err != nil {
		return err
	}

	if n != h.Length {
		return fmt.Errorf(
			"error discarding object, discarded %d, expected %d",
			n, h.Length,
		)
	}

	return nil
}

// ReadObjectTypeAndLength reads and returns the object type and the
// length field from an object entry in a packfile.
func (s *Scanner) readObjectTypeAndLength() (plumbing.ObjectType, int64, error) {
	t, c, err := s.readType()
	if err != nil {
		return t, 0, err
	}

	l, err := s.readLength(c)

	return t, l, err
}

func (s *Scanner) readType() (plumbing.ObjectType, byte, error) {
	var c byte
	var err error
	if c, err = s.r.ReadByte(); err != nil {
		return plumbing.ObjectType(0), 0, err
	}

	typ := parseType(c)

	return typ, c, nil
}

func parseType(b byte) plumbing.ObjectType {
	return plumbing.ObjectType((b & maskType) >> firstLengthBits)
}

// the length is codified in the last 4 bits of the first byte and in
// the last 7 bits of subsequent bytes.  Last byte has a 0 MSB.
func (s *Scanner) readLength(first byte) (int64, error) {
	length := int64(first & maskFirstLength)

	c := first
	shift := firstLengthBits
	var err error
	for c&maskContinue > 0 {
		if c, err = s.r.ReadByte(); err != nil {
			return 0, err
		}

		length += int64(c&maskLength) << shift
		shift += lengthBits
	}

	return length, nil
}

// NextObject writes the content of the next object into the reader, returns
// the number of bytes written, the CRC32 of the content and an error, if any
func (s *Scanner) NextObject(w io.Writer) (written int64, crc32 uint32, err error) {
	s.pendingObject = nil
	written, err = s.copyObject(w)

	s.r.Flush()
	crc32 = s.crc.Sum32()
	s.crc.Reset()

	return
}

// ReadRegularObject reads and write a non-deltified object
// from it zlib stream in an object entry in the packfile.
func (s *Scanner) copyObject(w io.Writer) (n int64, err error) {
	zr := zlibReaderPool.Get().(io.ReadCloser)
	defer zlibReaderPool.Put(zr)

	if err = zr.(zlib.Resetter).Reset(s.r, nil); err != nil {
		return 0, fmt.Errorf("zlib reset error: %s", err)
	}

	defer ioutil.CheckClose(zr, &err)
	buf := byteSlicePool.Get().([]byte)
	n, err = io.CopyBuffer(w, zr, buf)
	byteSlicePool.Put(buf)
	return
}

var byteSlicePool = sync.Pool{
	New: func() interface{} {
		return make([]byte, 32*1024)
	},
}

// SeekFromStart sets a new offset from start, returns the old position before
// the change.
func (s *Scanner) SeekFromStart(offset int64) (previous int64, err error) {
	// if seeking we assume that you are not interested in the header
	if s.version == 0 {
		s.version = VersionSupported
	}

	previous, err = s.r.Seek(0, io.SeekCurrent)
	if err != nil {
		return -1, err
	}

	_, err = s.r.Seek(offset, io.SeekStart)
	return previous, err
}

// Checksum returns the checksum of the packfile
func (s *Scanner) Checksum() (plumbing.Hash, error) {
	err := s.discardObjectIfNeeded()
	if err != nil {
		return plumbing.ZeroHash, err
	}

	return binary.ReadHash(s.r)
}

// Close reads the reader until io.EOF
func (s *Scanner) Close() error {
	buf := byteSlicePool.Get().([]byte)
	_, err := io.CopyBuffer(stdioutil.Discard, s.r, buf)
	byteSlicePool.Put(buf)
	return err
}

// Flush is a no-op (deprecated)
func (s *Scanner) Flush() error {
	return nil
}

// scannerReader has the following characteristics:
// - Provides an io.SeekReader impl for bufio.Reader, when the underlying
//   reader supports it.
// - Keeps track of the current read position, for when the underlying reader
//   isn't an io.SeekReader, but we still want to know the current offset.
// - Writes to the hash writer what it reads, with the aid of a smaller buffer.
//   The buffer helps avoid a performance penality for performing small writes
//   to the crc32 hash writer.
type scannerReader struct {
	reader io.Reader
	crc    io.Writer
	rbuf   *bufio.Reader
	wbuf   *bufio.Writer
	offset int64
}

func newScannerReader(r io.Reader, h io.Writer) *scannerReader {
	sr := &scannerReader{
		rbuf: bufio.NewReader(nil),
		wbuf: bufio.NewWriterSize(nil, 64),
		crc:  h,
	}
	sr.Reset(r)

	return sr
}

func (r *scannerReader) Reset(reader io.Reader) {
	r.reader = reader
	r.rbuf.Reset(r.reader)
	r.wbuf.Reset(r.crc)

	r.offset = 0
	if seeker, ok := r.reader.(io.ReadSeeker); ok {
		r.offset, _ = seeker.Seek(0, io.SeekCurrent)
	}
}

func (r *scannerReader) Read(p []byte) (n int, err error) {
	n, err = r.rbuf.Read(p)

	r.offset += int64(n)
	if _, err := r.wbuf.Write(p[:n]); err != nil {
		return n, err
	}
	return
}

func (r *scannerReader) ReadByte() (b byte, err error) {
	b, err = r.rbuf.ReadByte()
	if err == nil {
		r.offset++
		return b, r.wbuf.WriteByte(b)
	}
	return
}

func (r *scannerReader) Flush() error {
	return r.wbuf.Flush()
}

// Seek seeks to a location. If the underlying reader is not an io.ReadSeeker,
// then only whence=io.SeekCurrent is supported, any other operation fails.
func (r *scannerReader) Seek(offset int64, whence int) (int64, error) {
	var err error

	if seeker, ok := r.reader.(io.ReadSeeker); !ok {
		if whence != io.SeekCurrent || offset != 0 {
			return -1, ErrSeekNotSupported
		}
	} else {
		if whence == io.SeekCurrent && offset == 0 {
			return r.offset, nil
		}

		r.offset, err = seeker.Seek(offset, whence)
		r.rbuf.Reset(r.reader)
	}

	return r.offset, err
}
  0707010000053B000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/pktline    0707010000053C000081A4000000000000000000000001645E367C00000BF1000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/pktline/encoder.go // Package pktline implements reading payloads form pkt-lines and encoding
// pkt-lines from payloads.
package pktline

import (
	"bytes"
	"errors"
	"fmt"
	"io"
)

// An Encoder writes pkt-lines to an output stream.
type Encoder struct {
	w io.Writer
}

const (
	// MaxPayloadSize is the maximum payload size of a pkt-line in bytes.
	MaxPayloadSize = 65516

	// For compatibility with canonical Git implementation, accept longer pkt-lines
	OversizePayloadMax = 65520
)

var (
	// FlushPkt are the contents of a flush-pkt pkt-line.
	FlushPkt = []byte{'0', '0', '0', '0'}
	// Flush is the payload to use with the Encode method to encode a flush-pkt.
	Flush = []byte{}
	// FlushString is the payload to use with the EncodeString method to encode a flush-pkt.
	FlushString = ""
	// ErrPayloadTooLong is returned by the Encode methods when any of the
	// provided payloads is bigger than MaxPayloadSize.
	ErrPayloadTooLong = errors.New("payload is too long")
)

// NewEncoder returns a new encoder that writes to w.
func NewEncoder(w io.Writer) *Encoder {
	return &Encoder{
		w: w,
	}
}

// Flush encodes a flush-pkt to the output stream.
func (e *Encoder) Flush() error {
	_, err := e.w.Write(FlushPkt)
	return err
}

// Encode encodes a pkt-line with the payload specified and write it to
// the output stream.  If several payloads are specified, each of them
// will get streamed in their own pkt-lines.
func (e *Encoder) Encode(payloads ...[]byte) error {
	for _, p := range payloads {
		if err := e.encodeLine(p); err != nil {
			return err
		}
	}

	return nil
}

func (e *Encoder) encodeLine(p []byte) error {
	if len(p) > MaxPayloadSize {
		return ErrPayloadTooLong
	}

	if bytes.Equal(p, Flush) {
		return e.Flush()
	}

	n := len(p) + 4
	if _, err := e.w.Write(asciiHex16(n)); err != nil {
		return err
	}
	_, err := e.w.Write(p)
	return err
}

// Returns the hexadecimal ascii representation of the 16 less
// significant bits of n.  The length of the returned slice will always
// be 4.  Example: if n is 1234 (0x4d2), the return value will be
// []byte{'0', '4', 'd', '2'}.
func asciiHex16(n int) []byte {
	var ret [4]byte
	ret[0] = byteToASCIIHex(byte(n & 0xf000 >> 12))
	ret[1] = byteToASCIIHex(byte(n & 0x0f00 >> 8))
	ret[2] = byteToASCIIHex(byte(n & 0x00f0 >> 4))
	ret[3] = byteToASCIIHex(byte(n & 0x000f))

	return ret[:]
}

// turns a byte into its hexadecimal ascii representation.  Example:
// from 11 (0xb) to 'b'.
func byteToASCIIHex(n byte) byte {
	if n < 10 {
		return '0' + n
	}

	return 'a' - 10 + n
}

// EncodeString works similarly as Encode but payloads are specified as strings.
func (e *Encoder) EncodeString(payloads ...string) error {
	for _, p := range payloads {
		if err := e.Encode([]byte(p)); err != nil {
			return err
		}
	}

	return nil
}

// Encodef encodes a single pkt-line with the payload formatted as
// the format specifier. The rest of the arguments will be used in
// the format string.
func (e *Encoder) Encodef(format string, a ...interface{}) error {
	return e.EncodeString(
		fmt.Sprintf(format, a...),
	)
}
   0707010000053D000081A4000000000000000000000001645E367C00000D46000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/format/pktline/scanner.go package pktline

import (
	"errors"
	"io"
)

const (
	lenSize = 4
)

// ErrInvalidPktLen is returned by Err() when an invalid pkt-len is found.
var ErrInvalidPktLen = errors.New("invalid pkt-len found")

// Scanner provides a convenient interface for reading the payloads of a
// series of pkt-lines.  It takes an io.Reader providing the source,
// which then can be tokenized through repeated calls to the Scan
// method.
//
// After each Scan call, the Bytes method will return the payload of the
// corresponding pkt-line on a shared buffer, which will be 65516 bytes
// or smaller.  Flush pkt-lines are represented by empty byte slices.
//
// Scanning stops at EOF or the first I/O error.
type Scanner struct {
	r       io.Reader     // The reader provided by the client
	err     error         // Sticky error
	payload []byte        // Last pkt-payload
	len     [lenSize]byte // Last pkt-len
}

// NewScanner returns a new Scanner to read from r.
func NewScanner(r io.Reader) *Scanner {
	return &Scanner{
		r: r,
	}
}

// Err returns the first error encountered by the Scanner.
func (s *Scanner) Err() error {
	return s.err
}

// Scan advances the Scanner to the next pkt-line, whose payload will
// then be available through the Bytes method.  Scanning stops at EOF
// or the first I/O error.  After Scan returns false, the Err method
// will return any error that occurred during scanning, except that if
// it was io.EOF, Err will return nil.
func (s *Scanner) Scan() bool {
	var l int
	l, s.err = s.readPayloadLen()
	if s.err == io.EOF {
		s.err = nil
		return false
	}
	if s.err != nil {
		return false
	}

	if cap(s.payload) < l {
		s.payload = make([]byte, 0, l)
	}

	if _, s.err = io.ReadFull(s.r, s.payload[:l]); s.err != nil {
		return false
	}
	s.payload = s.payload[:l]

	return true
}

// Bytes returns the most recent payload generated by a call to Scan.
// The underlying array may point to data that will be overwritten by a
// subsequent call to Scan. It does no allocation.
func (s *Scanner) Bytes() []byte {
	return s.payload
}

// Method readPayloadLen returns the payload length by reading the
// pkt-len and subtracting the pkt-len size.
func (s *Scanner) readPayloadLen() (int, error) {
	if _, err := io.ReadFull(s.r, s.len[:]); err != nil {
		if err == io.ErrUnexpectedEOF {
			return 0, ErrInvalidPktLen
		}

		return 0, err
	}

	n, err := hexDecode(s.len)
	if err != nil {
		return 0, err
	}

	switch {
	case n == 0:
		return 0, nil
	case n <= lenSize:
		return 0, ErrInvalidPktLen
	case n > OversizePayloadMax+lenSize:
		return 0, ErrInvalidPktLen
	default:
		return n - lenSize, nil
	}
}

// Turns the hexadecimal representation of a number in a byte slice into
// a number. This function substitute strconv.ParseUint(string(buf), 16,
// 16) and/or hex.Decode, to avoid generating new strings, thus helping the
// GC.
func hexDecode(buf [lenSize]byte) (int, error) {
	var ret int
	for i := 0; i < lenSize; i++ {
		n, err := asciiHexToByte(buf[i])
		if err != nil {
			return 0, ErrInvalidPktLen
		}
		ret = 16*ret + int(n)
	}
	return ret, nil
}

// turns the hexadecimal ascii representation of a byte into its
// numerical value.  Example: from 'b' to 11 (0xb).
func asciiHexToByte(b byte) (byte, error) {
	switch {
	case b >= '0' && b <= '9':
		return b - '0', nil
	case b >= 'a' && b <= 'f':
		return b - 'a' + 10, nil
	default:
		return 0, ErrInvalidPktLen
	}
}
  0707010000053E000081A4000000000000000000000001645E367C00000664000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/hash.go   package plumbing

import (
	"bytes"
	"crypto/sha1"
	"encoding/hex"
	"hash"
	"sort"
	"strconv"
)

// Hash SHA1 hashed content
type Hash [20]byte

// ZeroHash is Hash with value zero
var ZeroHash Hash

// ComputeHash compute the hash for a given ObjectType and content
func ComputeHash(t ObjectType, content []byte) Hash {
	h := NewHasher(t, int64(len(content)))
	h.Write(content)
	return h.Sum()
}

// NewHash return a new Hash from a hexadecimal hash representation
func NewHash(s string) Hash {
	b, _ := hex.DecodeString(s)

	var h Hash
	copy(h[:], b)

	return h
}

func (h Hash) IsZero() bool {
	var empty Hash
	return h == empty
}

func (h Hash) String() string {
	return hex.EncodeToString(h[:])
}

type Hasher struct {
	hash.Hash
}

func NewHasher(t ObjectType, size int64) Hasher {
	h := Hasher{sha1.New()}
	h.Write(t.Bytes())
	h.Write([]byte(" "))
	h.Write([]byte(strconv.FormatInt(size, 10)))
	h.Write([]byte{0})
	return h
}

func (h Hasher) Sum() (hash Hash) {
	copy(hash[:], h.Hash.Sum(nil))
	return
}

// HashesSort sorts a slice of Hashes in increasing order.
func HashesSort(a []Hash) {
	sort.Sort(HashSlice(a))
}

// HashSlice attaches the methods of sort.Interface to []Hash, sorting in
// increasing order.
type HashSlice []Hash

func (p HashSlice) Len() int           { return len(p) }
func (p HashSlice) Less(i, j int) bool { return bytes.Compare(p[i][:], p[j][:]) < 0 }
func (p HashSlice) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }

// IsHash returns true if the given string is a valid hash.
func IsHash(s string) bool {
	if len(s) != 40 {
		return false
	}

	_, err := hex.DecodeString(s)
	return err == nil
}
0707010000053F000081A4000000000000000000000001645E367C00000794000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/memory.go package plumbing

import (
	"bytes"
	"io"
)

// MemoryObject on memory Object implementation
type MemoryObject struct {
	t    ObjectType
	h    Hash
	cont []byte
	sz   int64
}

// Hash returns the object Hash, the hash is calculated on-the-fly the first
// time it's called, in all subsequent calls the same Hash is returned even
// if the type or the content have changed. The Hash is only generated if the
// size of the content is exactly the object size.
func (o *MemoryObject) Hash() Hash {
	if o.h == ZeroHash && int64(len(o.cont)) == o.sz {
		o.h = ComputeHash(o.t, o.cont)
	}

	return o.h
}

// Type return the ObjectType
func (o *MemoryObject) Type() ObjectType { return o.t }

// SetType sets the ObjectType
func (o *MemoryObject) SetType(t ObjectType) { o.t = t }

// Size return the size of the object
func (o *MemoryObject) Size() int64 { return o.sz }

// SetSize set the object size, a content of the given size should be written
// afterwards
func (o *MemoryObject) SetSize(s int64) { o.sz = s }

// Reader returns an io.ReadCloser used to read the object's content.
//
// For a MemoryObject, this reader is seekable.
func (o *MemoryObject) Reader() (io.ReadCloser, error) {
	return nopCloser{bytes.NewReader(o.cont)}, nil
}

// Writer returns a ObjectWriter used to write the object's content.
func (o *MemoryObject) Writer() (io.WriteCloser, error) {
	return o, nil
}

func (o *MemoryObject) Write(p []byte) (n int, err error) {
	o.cont = append(o.cont, p...)
	o.sz = int64(len(o.cont))

	return len(p), nil
}

// Close releases any resources consumed by the object when it is acting as a
// ObjectWriter.
func (o *MemoryObject) Close() error { return nil }

// nopCloser exposes the extra methods of bytes.Reader while nopping Close().
//
// This allows clients to attempt seeking in a cached Blob's Reader.
type nopCloser struct {
	*bytes.Reader
}

// Close does nothing.
func (nc nopCloser) Close() error { return nil }
07070100000540000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/object    07070100000541000081A4000000000000000000000001645E367C00000A0D000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/object.go // package plumbing implement the core interfaces and structs used by go-git
package plumbing

import (
	"errors"
	"io"
)

var (
	ErrObjectNotFound = errors.New("object not found")
	// ErrInvalidType is returned when an invalid object type is provided.
	ErrInvalidType = errors.New("invalid object type")
)

// Object is a generic representation of any git object
type EncodedObject interface {
	Hash() Hash
	Type() ObjectType
	SetType(ObjectType)
	Size() int64
	SetSize(int64)
	Reader() (io.ReadCloser, error)
	Writer() (io.WriteCloser, error)
}

// DeltaObject is an EncodedObject representing a delta.
type DeltaObject interface {
	EncodedObject
	// BaseHash returns the hash of the object used as base for this delta.
	BaseHash() Hash
	// ActualHash returns the hash of the object after applying the delta.
	ActualHash() Hash
	// Size returns the size of the object after applying the delta.
	ActualSize() int64
}

// ObjectType internal object type
// Integer values from 0 to 7 map to those exposed by git.
// AnyObject is used to represent any from 0 to 7.
type ObjectType int8

const (
	InvalidObject ObjectType = 0
	CommitObject  ObjectType = 1
	TreeObject    ObjectType = 2
	BlobObject    ObjectType = 3
	TagObject     ObjectType = 4
	// 5 reserved for future expansion
	OFSDeltaObject ObjectType = 6
	REFDeltaObject ObjectType = 7

	AnyObject ObjectType = -127
)

func (t ObjectType) String() string {
	switch t {
	case CommitObject:
		return "commit"
	case TreeObject:
		return "tree"
	case BlobObject:
		return "blob"
	case TagObject:
		return "tag"
	case OFSDeltaObject:
		return "ofs-delta"
	case REFDeltaObject:
		return "ref-delta"
	case AnyObject:
		return "any"
	default:
		return "unknown"
	}
}

func (t ObjectType) Bytes() []byte {
	return []byte(t.String())
}

// Valid returns true if t is a valid ObjectType.
func (t ObjectType) Valid() bool {
	return t >= CommitObject && t <= REFDeltaObject
}

// IsDelta returns true for any ObjectTyoe that represents a delta (i.e.
// REFDeltaObject or OFSDeltaObject).
func (t ObjectType) IsDelta() bool {
	return t == REFDeltaObject || t == OFSDeltaObject
}

// ParseObjectType parses a string representation of ObjectType. It returns an
// error on parse failure.
func ParseObjectType(value string) (typ ObjectType, err error) {
	switch value {
	case "commit":
		typ = CommitObject
	case "tree":
		typ = TreeObject
	case "blob":
		typ = BlobObject
	case "tag":
		typ = TagObject
	case "ofs-delta":
		typ = OFSDeltaObject
	case "ref-delta":
		typ = REFDeltaObject
	default:
		err = ErrInvalidType
	}
	return
}
   07070100000542000081A4000000000000000000000001645E367C00000D58000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/object/blob.go    package object

import (
	"io"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/storer"
	"github.com/go-git/go-git/v5/utils/ioutil"
)

// Blob is used to store arbitrary data - it is generally a file.
type Blob struct {
	// Hash of the blob.
	Hash plumbing.Hash
	// Size of the (uncompressed) blob.
	Size int64

	obj plumbing.EncodedObject
}

// GetBlob gets a blob from an object storer and decodes it.
func GetBlob(s storer.EncodedObjectStorer, h plumbing.Hash) (*Blob, error) {
	o, err := s.EncodedObject(plumbing.BlobObject, h)
	if err != nil {
		return nil, err
	}

	return DecodeBlob(o)
}

// DecodeObject decodes an encoded object into a *Blob.
func DecodeBlob(o plumbing.EncodedObject) (*Blob, error) {
	b := &Blob{}
	if err := b.Decode(o); err != nil {
		return nil, err
	}

	return b, nil
}

// ID returns the object ID of the blob. The returned value will always match
// the current value of Blob.Hash.
//
// ID is present to fulfill the Object interface.
func (b *Blob) ID() plumbing.Hash {
	return b.Hash
}

// Type returns the type of object. It always returns plumbing.BlobObject.
//
// Type is present to fulfill the Object interface.
func (b *Blob) Type() plumbing.ObjectType {
	return plumbing.BlobObject
}

// Decode transforms a plumbing.EncodedObject into a Blob struct.
func (b *Blob) Decode(o plumbing.EncodedObject) error {
	if o.Type() != plumbing.BlobObject {
		return ErrUnsupportedObject
	}

	b.Hash = o.Hash()
	b.Size = o.Size()
	b.obj = o

	return nil
}

// Encode transforms a Blob into a plumbing.EncodedObject.
func (b *Blob) Encode(o plumbing.EncodedObject) (err error) {
	o.SetType(plumbing.BlobObject)

	w, err := o.Writer()
	if err != nil {
		return err
	}

	defer ioutil.CheckClose(w, &err)

	r, err := b.Reader()
	if err != nil {
		return err
	}

	defer ioutil.CheckClose(r, &err)

	_, err = io.Copy(w, r)
	return err
}

// Reader returns a reader allow the access to the content of the blob
func (b *Blob) Reader() (io.ReadCloser, error) {
	return b.obj.Reader()
}

// BlobIter provides an iterator for a set of blobs.
type BlobIter struct {
	storer.EncodedObjectIter
	s storer.EncodedObjectStorer
}

// NewBlobIter takes a storer.EncodedObjectStorer and a
// storer.EncodedObjectIter and returns a *BlobIter that iterates over all
// blobs contained in the storer.EncodedObjectIter.
//
// Any non-blob object returned by the storer.EncodedObjectIter is skipped.
func NewBlobIter(s storer.EncodedObjectStorer, iter storer.EncodedObjectIter) *BlobIter {
	return &BlobIter{iter, s}
}

// Next moves the iterator to the next blob and returns a pointer to it. If
// there are no more blobs, it returns io.EOF.
func (iter *BlobIter) Next() (*Blob, error) {
	for {
		obj, err := iter.EncodedObjectIter.Next()
		if err != nil {
			return nil, err
		}

		if obj.Type() != plumbing.BlobObject {
			continue
		}

		return DecodeBlob(obj)
	}
}

// ForEach call the cb function for each blob contained on this iter until
// an error happens or the end of the iter is reached. If ErrStop is sent
// the iteration is stop but no error is returned. The iterator is closed.
func (iter *BlobIter) ForEach(cb func(*Blob) error) error {
	return iter.EncodedObjectIter.ForEach(func(obj plumbing.EncodedObject) error {
		if obj.Type() != plumbing.BlobObject {
			return nil
		}

		b, err := DecodeBlob(obj)
		if err != nil {
			return err
		}

		return cb(b)
	})
}
07070100000543000081A4000000000000000000000001645E367C00000F07000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/object/change.go  package object

import (
	"bytes"
	"context"
	"fmt"
	"strings"

	"github.com/go-git/go-git/v5/utils/merkletrie"
)

// Change values represent a detected change between two git trees.  For
// modifications, From is the original status of the node and To is its
// final status.  For insertions, From is the zero value and for
// deletions To is the zero value.
type Change struct {
	From ChangeEntry
	To   ChangeEntry
}

var empty ChangeEntry

// Action returns the kind of action represented by the change, an
// insertion, a deletion or a modification.
func (c *Change) Action() (merkletrie.Action, error) {
	if c.From == empty && c.To == empty {
		return merkletrie.Action(0),
			fmt.Errorf("malformed change: empty from and to")
	}

	if c.From == empty {
		return merkletrie.Insert, nil
	}

	if c.To == empty {
		return merkletrie.Delete, nil
	}

	return merkletrie.Modify, nil
}

// Files return the files before and after a change.
// For insertions from will be nil. For deletions to will be nil.
func (c *Change) Files() (from, to *File, err error) {
	action, err := c.Action()
	if err != nil {
		return
	}

	if action == merkletrie.Insert || action == merkletrie.Modify {
		to, err = c.To.Tree.TreeEntryFile(&c.To.TreeEntry)
		if !c.To.TreeEntry.Mode.IsFile() {
			return nil, nil, nil
		}

		if err != nil {
			return
		}
	}

	if action == merkletrie.Delete || action == merkletrie.Modify {
		from, err = c.From.Tree.TreeEntryFile(&c.From.TreeEntry)
		if !c.From.TreeEntry.Mode.IsFile() {
			return nil, nil, nil
		}

		if err != nil {
			return
		}
	}

	return
}

func (c *Change) String() string {
	action, err := c.Action()
	if err != nil {
		return "malformed change"
	}

	return fmt.Sprintf("<Action: %s, Path: %s>", action, c.name())
}

// Patch returns a Patch with all the file changes in chunks. This
// representation can be used to create several diff outputs.
func (c *Change) Patch() (*Patch, error) {
	return c.PatchContext(context.Background())
}

// Patch returns a Patch with all the file changes in chunks. This
// representation can be used to create several diff outputs.
// If context expires, an non-nil error will be returned
// Provided context must be non-nil
func (c *Change) PatchContext(ctx context.Context) (*Patch, error) {
	return getPatchContext(ctx, "", c)
}

func (c *Change) name() string {
	if c.From != empty {
		return c.From.Name
	}

	return c.To.Name
}

// ChangeEntry values represent a node that has suffered a change.
type ChangeEntry struct {
	// Full path of the node using "/" as separator.
	Name string
	// Parent tree of the node that has changed.
	Tree *Tree
	// The entry of the node.
	TreeEntry TreeEntry
}

// Changes represents a collection of changes between two git trees.
// Implements sort.Interface lexicographically over the path of the
// changed files.
type Changes []*Change

func (c Changes) Len() int {
	return len(c)
}

func (c Changes) Swap(i, j int) {
	c[i], c[j] = c[j], c[i]
}

func (c Changes) Less(i, j int) bool {
	return strings.Compare(c[i].name(), c[j].name()) < 0
}

func (c Changes) String() string {
	var buffer bytes.Buffer
	buffer.WriteString("[")
	comma := ""
	for _, v := range c {
		buffer.WriteString(comma)
		buffer.WriteString(v.String())
		comma = ", "
	}
	buffer.WriteString("]")

	return buffer.String()
}

// Patch returns a Patch with all the changes in chunks. This
// representation can be used to create several diff outputs.
func (c Changes) Patch() (*Patch, error) {
	return c.PatchContext(context.Background())
}

// Patch returns a Patch with all the changes in chunks. This
// representation can be used to create several diff outputs.
// If context expires, an non-nil error will be returned
// Provided context must be non-nil
func (c Changes) PatchContext(ctx context.Context) (*Patch, error) {
	return getPatchContext(ctx, "", c...)
}
 07070100000544000081A4000000000000000000000001645E367C000004E9000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/object/change_adaptor.go  package object

import (
	"errors"
	"fmt"

	"github.com/go-git/go-git/v5/utils/merkletrie"
	"github.com/go-git/go-git/v5/utils/merkletrie/noder"
)

// The following functions transform changes types form the merkletrie
// package to changes types from this package.

func newChange(c merkletrie.Change) (*Change, error) {
	ret := &Change{}

	var err error
	if ret.From, err = newChangeEntry(c.From); err != nil {
		return nil, fmt.Errorf("From field: %s", err)
	}

	if ret.To, err = newChangeEntry(c.To); err != nil {
		return nil, fmt.Errorf("To field: %s", err)
	}

	return ret, nil
}

func newChangeEntry(p noder.Path) (ChangeEntry, error) {
	if p == nil {
		return empty, nil
	}

	asTreeNoder, ok := p.Last().(*treeNoder)
	if !ok {
		return ChangeEntry{}, errors.New("cannot transform non-TreeNoders")
	}

	return ChangeEntry{
		Name: p.String(),
		Tree: asTreeNoder.parent,
		TreeEntry: TreeEntry{
			Name: asTreeNoder.name,
			Mode: asTreeNoder.mode,
			Hash: asTreeNoder.hash,
		},
	}, nil
}

func newChanges(src merkletrie.Changes) (Changes, error) {
	ret := make(Changes, len(src))
	var err error
	for i, e := range src {
		ret[i], err = newChange(e)
		if err != nil {
			return nil, fmt.Errorf("change #%d: %s", i, err)
		}
	}

	return ret, nil
}
   07070100000545000081A4000000000000000000000001645E367C00002C7E000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/object/commit.go  package object

import (
	"bufio"
	"bytes"
	"context"
	"errors"
	"fmt"
	"io"
	"strings"

	"github.com/ProtonMail/go-crypto/openpgp"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/storer"
	"github.com/go-git/go-git/v5/utils/ioutil"
)

const (
	beginpgp  string = "-----BEGIN PGP SIGNATURE-----"
	endpgp    string = "-----END PGP SIGNATURE-----"
	headerpgp string = "gpgsig"
)

// Hash represents the hash of an object
type Hash plumbing.Hash

// Commit points to a single tree, marking it as what the project looked like
// at a certain point in time. It contains meta-information about that point
// in time, such as a timestamp, the author of the changes since the last
// commit, a pointer to the previous commit(s), etc.
// http://shafiulazam.com/gitbook/1_the_git_object_model.html
type Commit struct {
	// Hash of the commit object.
	Hash plumbing.Hash
	// Author is the original author of the commit.
	Author Signature
	// Committer is the one performing the commit, might be different from
	// Author.
	Committer Signature
	// PGPSignature is the PGP signature of the commit.
	PGPSignature string
	// Message is the commit message, contains arbitrary text.
	Message string
	// TreeHash is the hash of the root tree of the commit.
	TreeHash plumbing.Hash
	// ParentHashes are the hashes of the parent commits of the commit.
	ParentHashes []plumbing.Hash

	s storer.EncodedObjectStorer
}

// GetCommit gets a commit from an object storer and decodes it.
func GetCommit(s storer.EncodedObjectStorer, h plumbing.Hash) (*Commit, error) {
	o, err := s.EncodedObject(plumbing.CommitObject, h)
	if err != nil {
		return nil, err
	}

	return DecodeCommit(s, o)
}

// DecodeCommit decodes an encoded object into a *Commit and associates it to
// the given object storer.
func DecodeCommit(s storer.EncodedObjectStorer, o plumbing.EncodedObject) (*Commit, error) {
	c := &Commit{s: s}
	if err := c.Decode(o); err != nil {
		return nil, err
	}

	return c, nil
}

// Tree returns the Tree from the commit.
func (c *Commit) Tree() (*Tree, error) {
	return GetTree(c.s, c.TreeHash)
}

// PatchContext returns the Patch between the actual commit and the provided one.
// Error will be return if context expires. Provided context must be non-nil.
//
// NOTE: Since version 5.1.0 the renames are correctly handled, the settings
// used are the recommended options DefaultDiffTreeOptions.
func (c *Commit) PatchContext(ctx context.Context, to *Commit) (*Patch, error) {
	fromTree, err := c.Tree()
	if err != nil {
		return nil, err
	}

	var toTree *Tree
	if to != nil {
		toTree, err = to.Tree()
		if err != nil {
			return nil, err
		}
	}

	return fromTree.PatchContext(ctx, toTree)
}

// Patch returns the Patch between the actual commit and the provided one.
//
// NOTE: Since version 5.1.0 the renames are correctly handled, the settings
// used are the recommended options DefaultDiffTreeOptions.
func (c *Commit) Patch(to *Commit) (*Patch, error) {
	return c.PatchContext(context.Background(), to)
}

// Parents return a CommitIter to the parent Commits.
func (c *Commit) Parents() CommitIter {
	return NewCommitIter(c.s,
		storer.NewEncodedObjectLookupIter(c.s, plumbing.CommitObject, c.ParentHashes),
	)
}

// NumParents returns the number of parents in a commit.
func (c *Commit) NumParents() int {
	return len(c.ParentHashes)
}

var ErrParentNotFound = errors.New("commit parent not found")

// Parent returns the ith parent of a commit.
func (c *Commit) Parent(i int) (*Commit, error) {
	if len(c.ParentHashes) == 0 || i > len(c.ParentHashes)-1 {
		return nil, ErrParentNotFound
	}

	return GetCommit(c.s, c.ParentHashes[i])
}

// File returns the file with the specified "path" in the commit and a
// nil error if the file exists. If the file does not exist, it returns
// a nil file and the ErrFileNotFound error.
func (c *Commit) File(path string) (*File, error) {
	tree, err := c.Tree()
	if err != nil {
		return nil, err
	}

	return tree.File(path)
}

// Files returns a FileIter allowing to iterate over the Tree
func (c *Commit) Files() (*FileIter, error) {
	tree, err := c.Tree()
	if err != nil {
		return nil, err
	}

	return tree.Files(), nil
}

// ID returns the object ID of the commit. The returned value will always match
// the current value of Commit.Hash.
//
// ID is present to fulfill the Object interface.
func (c *Commit) ID() plumbing.Hash {
	return c.Hash
}

// Type returns the type of object. It always returns plumbing.CommitObject.
//
// Type is present to fulfill the Object interface.
func (c *Commit) Type() plumbing.ObjectType {
	return plumbing.CommitObject
}

// Decode transforms a plumbing.EncodedObject into a Commit struct.
func (c *Commit) Decode(o plumbing.EncodedObject) (err error) {
	if o.Type() != plumbing.CommitObject {
		return ErrUnsupportedObject
	}

	c.Hash = o.Hash()

	reader, err := o.Reader()
	if err != nil {
		return err
	}
	defer ioutil.CheckClose(reader, &err)

	r := bufPool.Get().(*bufio.Reader)
	defer bufPool.Put(r)
	r.Reset(reader)

	var message bool
	var pgpsig bool
	var msgbuf bytes.Buffer
	for {
		line, err := r.ReadBytes('\n')
		if err != nil && err != io.EOF {
			return err
		}

		if pgpsig {
			if len(line) > 0 && line[0] == ' ' {
				line = bytes.TrimLeft(line, " ")
				c.PGPSignature += string(line)
				continue
			} else {
				pgpsig = false
			}
		}

		if !message {
			line = bytes.TrimSpace(line)
			if len(line) == 0 {
				message = true
				continue
			}

			split := bytes.SplitN(line, []byte{' '}, 2)

			var data []byte
			if len(split) == 2 {
				data = split[1]
			}

			switch string(split[0]) {
			case "tree":
				c.TreeHash = plumbing.NewHash(string(data))
			case "parent":
				c.ParentHashes = append(c.ParentHashes, plumbing.NewHash(string(data)))
			case "author":
				c.Author.Decode(data)
			case "committer":
				c.Committer.Decode(data)
			case headerpgp:
				c.PGPSignature += string(data) + "\n"
				pgpsig = true
			}
		} else {
			msgbuf.Write(line)
		}

		if err == io.EOF {
			break
		}
	}
	c.Message = msgbuf.String()
	return nil
}

// Encode transforms a Commit into a plumbing.EncodedObject.
func (c *Commit) Encode(o plumbing.EncodedObject) error {
	return c.encode(o, true)
}

// EncodeWithoutSignature export a Commit into a plumbing.EncodedObject without the signature (correspond to the payload of the PGP signature).
func (c *Commit) EncodeWithoutSignature(o plumbing.EncodedObject) error {
	return c.encode(o, false)
}

func (c *Commit) encode(o plumbing.EncodedObject, includeSig bool) (err error) {
	o.SetType(plumbing.CommitObject)
	w, err := o.Writer()
	if err != nil {
		return err
	}

	defer ioutil.CheckClose(w, &err)

	if _, err = fmt.Fprintf(w, "tree %s\n", c.TreeHash.String()); err != nil {
		return err
	}

	for _, parent := range c.ParentHashes {
		if _, err = fmt.Fprintf(w, "parent %s\n", parent.String()); err != nil {
			return err
		}
	}

	if _, err = fmt.Fprint(w, "author "); err != nil {
		return err
	}

	if err = c.Author.Encode(w); err != nil {
		return err
	}

	if _, err = fmt.Fprint(w, "\ncommitter "); err != nil {
		return err
	}

	if err = c.Committer.Encode(w); err != nil {
		return err
	}

	if c.PGPSignature != "" && includeSig {
		if _, err = fmt.Fprint(w, "\n"+headerpgp+" "); err != nil {
			return err
		}

		// Split all the signature lines and re-write with a left padding and
		// newline. Use join for this so it's clear that a newline should not be
		// added after this section, as it will be added when the message is
		// printed.
		signature := strings.TrimSuffix(c.PGPSignature, "\n")
		lines := strings.Split(signature, "\n")
		if _, err = fmt.Fprint(w, strings.Join(lines, "\n ")); err != nil {
			return err
		}
	}

	if _, err = fmt.Fprintf(w, "\n\n%s", c.Message); err != nil {
		return err
	}

	return err
}

// Stats returns the stats of a commit.
func (c *Commit) Stats() (FileStats, error) {
	return c.StatsContext(context.Background())
}

// StatsContext returns the stats of a commit. Error will be return if context
// expires. Provided context must be non-nil.
func (c *Commit) StatsContext(ctx context.Context) (FileStats, error) {
	fromTree, err := c.Tree()
	if err != nil {
		return nil, err
	}

	toTree := &Tree{}
	if c.NumParents() != 0 {
		firstParent, err := c.Parents().Next()
		if err != nil {
			return nil, err
		}

		toTree, err = firstParent.Tree()
		if err != nil {
			return nil, err
		}
	}

	patch, err := toTree.PatchContext(ctx, fromTree)
	if err != nil {
		return nil, err
	}

	return getFileStatsFromFilePatches(patch.FilePatches()), nil
}

func (c *Commit) String() string {
	return fmt.Sprintf(
		"%s %s\nAuthor: %s\nDate:   %s\n\n%s\n",
		plumbing.CommitObject, c.Hash, c.Author.String(),
		c.Author.When.Format(DateFormat), indent(c.Message),
	)
}

// Verify performs PGP verification of the commit with a provided armored
// keyring and returns openpgp.Entity associated with verifying key on success.
func (c *Commit) Verify(armoredKeyRing string) (*openpgp.Entity, error) {
	keyRingReader := strings.NewReader(armoredKeyRing)
	keyring, err := openpgp.ReadArmoredKeyRing(keyRingReader)
	if err != nil {
		return nil, err
	}

	// Extract signature.
	signature := strings.NewReader(c.PGPSignature)

	encoded := &plumbing.MemoryObject{}
	// Encode commit components, excluding signature and get a reader object.
	if err := c.EncodeWithoutSignature(encoded); err != nil {
		return nil, err
	}
	er, err := encoded.Reader()
	if err != nil {
		return nil, err
	}

	return openpgp.CheckArmoredDetachedSignature(keyring, er, signature, nil)
}

func indent(t string) string {
	var output []string
	for _, line := range strings.Split(t, "\n") {
		if len(line) != 0 {
			line = "    " + line
		}

		output = append(output, line)
	}

	return strings.Join(output, "\n")
}

// CommitIter is a generic closable interface for iterating over commits.
type CommitIter interface {
	Next() (*Commit, error)
	ForEach(func(*Commit) error) error
	Close()
}

// storerCommitIter provides an iterator from commits in an EncodedObjectStorer.
type storerCommitIter struct {
	storer.EncodedObjectIter
	s storer.EncodedObjectStorer
}

// NewCommitIter takes a storer.EncodedObjectStorer and a
// storer.EncodedObjectIter and returns a CommitIter that iterates over all
// commits contained in the storer.EncodedObjectIter.
//
// Any non-commit object returned by the storer.EncodedObjectIter is skipped.
func NewCommitIter(s storer.EncodedObjectStorer, iter storer.EncodedObjectIter) CommitIter {
	return &storerCommitIter{iter, s}
}

// Next moves the iterator to the next commit and returns a pointer to it. If
// there are no more commits, it returns io.EOF.
func (iter *storerCommitIter) Next() (*Commit, error) {
	obj, err := iter.EncodedObjectIter.Next()
	if err != nil {
		return nil, err
	}

	return DecodeCommit(iter.s, obj)
}

// ForEach call the cb function for each commit contained on this iter until
// an error appends or the end of the iter is reached. If ErrStop is sent
// the iteration is stopped but no error is returned. The iterator is closed.
func (iter *storerCommitIter) ForEach(cb func(*Commit) error) error {
	return iter.EncodedObjectIter.ForEach(func(obj plumbing.EncodedObject) error {
		c, err := DecodeCommit(iter.s, obj)
		if err != nil {
			return err
		}

		return cb(c)
	})
}

func (iter *storerCommitIter) Close() {
	iter.EncodedObjectIter.Close()
}
  07070100000546000081A4000000000000000000000001645E367C00001B45000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/object/commit_walker.go   package object

import (
	"container/list"
	"io"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/storer"
	"github.com/go-git/go-git/v5/storage"
)

type commitPreIterator struct {
	seenExternal map[plumbing.Hash]bool
	seen         map[plumbing.Hash]bool
	stack        []CommitIter
	start        *Commit
}

// NewCommitPreorderIter returns a CommitIter that walks the commit history,
// starting at the given commit and visiting its parents in pre-order.
// The given callback will be called for each visited commit. Each commit will
// be visited only once. If the callback returns an error, walking will stop
// and will return the error. Other errors might be returned if the history
// cannot be traversed (e.g. missing objects). Ignore allows to skip some
// commits from being iterated.
func NewCommitPreorderIter(
	c *Commit,
	seenExternal map[plumbing.Hash]bool,
	ignore []plumbing.Hash,
) CommitIter {
	seen := make(map[plumbing.Hash]bool)
	for _, h := range ignore {
		seen[h] = true
	}

	return &commitPreIterator{
		seenExternal: seenExternal,
		seen:         seen,
		stack:        make([]CommitIter, 0),
		start:        c,
	}
}

func (w *commitPreIterator) Next() (*Commit, error) {
	var c *Commit
	for {
		if w.start != nil {
			c = w.start
			w.start = nil
		} else {
			current := len(w.stack) - 1
			if current < 0 {
				return nil, io.EOF
			}

			var err error
			c, err = w.stack[current].Next()
			if err == io.EOF {
				w.stack = w.stack[:current]
				continue
			}

			if err != nil {
				return nil, err
			}
		}

		if w.seen[c.Hash] || w.seenExternal[c.Hash] {
			continue
		}

		w.seen[c.Hash] = true

		if c.NumParents() > 0 {
			w.stack = append(w.stack, filteredParentIter(c, w.seen))
		}

		return c, nil
	}
}

func filteredParentIter(c *Commit, seen map[plumbing.Hash]bool) CommitIter {
	var hashes []plumbing.Hash
	for _, h := range c.ParentHashes {
		if !seen[h] {
			hashes = append(hashes, h)
		}
	}

	return NewCommitIter(c.s,
		storer.NewEncodedObjectLookupIter(c.s, plumbing.CommitObject, hashes),
	)
}

func (w *commitPreIterator) ForEach(cb func(*Commit) error) error {
	for {
		c, err := w.Next()
		if err == io.EOF {
			break
		}
		if err != nil {
			return err
		}

		err = cb(c)
		if err == storer.ErrStop {
			break
		}
		if err != nil {
			return err
		}
	}

	return nil
}

func (w *commitPreIterator) Close() {}

type commitPostIterator struct {
	stack []*Commit
	seen  map[plumbing.Hash]bool
}

// NewCommitPostorderIter returns a CommitIter that walks the commit
// history like WalkCommitHistory but in post-order. This means that after
// walking a merge commit, the merged commit will be walked before the base
// it was merged on. This can be useful if you wish to see the history in
// chronological order. Ignore allows to skip some commits from being iterated.
func NewCommitPostorderIter(c *Commit, ignore []plumbing.Hash) CommitIter {
	seen := make(map[plumbing.Hash]bool)
	for _, h := range ignore {
		seen[h] = true
	}

	return &commitPostIterator{
		stack: []*Commit{c},
		seen:  seen,
	}
}

func (w *commitPostIterator) Next() (*Commit, error) {
	for {
		if len(w.stack) == 0 {
			return nil, io.EOF
		}

		c := w.stack[len(w.stack)-1]
		w.stack = w.stack[:len(w.stack)-1]

		if w.seen[c.Hash] {
			continue
		}

		w.seen[c.Hash] = true

		return c, c.Parents().ForEach(func(p *Commit) error {
			w.stack = append(w.stack, p)
			return nil
		})
	}
}

func (w *commitPostIterator) ForEach(cb func(*Commit) error) error {
	for {
		c, err := w.Next()
		if err == io.EOF {
			break
		}
		if err != nil {
			return err
		}

		err = cb(c)
		if err == storer.ErrStop {
			break
		}
		if err != nil {
			return err
		}
	}

	return nil
}

func (w *commitPostIterator) Close() {}

// commitAllIterator stands for commit iterator for all refs.
type commitAllIterator struct {
	// currCommit points to the current commit.
	currCommit *list.Element
}

// NewCommitAllIter returns a new commit iterator for all refs.
// repoStorer is a repo Storer used to get commits and references.
// commitIterFunc is a commit iterator function, used to iterate through ref commits in chosen order
func NewCommitAllIter(repoStorer storage.Storer, commitIterFunc func(*Commit) CommitIter) (CommitIter, error) {
	commitsPath := list.New()
	commitsLookup := make(map[plumbing.Hash]*list.Element)
	head, err := storer.ResolveReference(repoStorer, plumbing.HEAD)
	if err == nil {
		err = addReference(repoStorer, commitIterFunc, head, commitsPath, commitsLookup)
	}

	if err != nil && err != plumbing.ErrReferenceNotFound {
		return nil, err
	}

	// add all references along with the HEAD
	refIter, err := repoStorer.IterReferences()
	if err != nil {
		return nil, err
	}
	defer refIter.Close()

	for {
		ref, err := refIter.Next()
		if err == io.EOF {
			break
		}

		if err == plumbing.ErrReferenceNotFound {
			continue
		}

		if err != nil {
			return nil, err
		}

		if err = addReference(repoStorer, commitIterFunc, ref, commitsPath, commitsLookup); err != nil {
			return nil, err
		}
	}

	return &commitAllIterator{commitsPath.Front()}, nil
}

func addReference(
	repoStorer storage.Storer,
	commitIterFunc func(*Commit) CommitIter,
	ref *plumbing.Reference,
	commitsPath *list.List,
	commitsLookup map[plumbing.Hash]*list.Element) error {

	_, exists := commitsLookup[ref.Hash()]
	if exists {
		// we already have it - skip the reference.
		return nil
	}

	refCommit, _ := GetCommit(repoStorer, ref.Hash())
	if refCommit == nil {
		// if it's not a commit - skip it.
		return nil
	}

	var (
		refCommits []*Commit
		parent     *list.Element
	)
	// collect all ref commits to add
	commitIter := commitIterFunc(refCommit)
	for c, e := commitIter.Next(); e == nil; {
		parent, exists = commitsLookup[c.Hash]
		if exists {
			break
		}
		refCommits = append(refCommits, c)
		c, e = commitIter.Next()
	}
	commitIter.Close()

	if parent == nil {
		// common parent - not found
		// add all commits to the path from this ref (maybe it's a HEAD and we don't have anything, yet)
		for _, c := range refCommits {
			parent = commitsPath.PushBack(c)
			commitsLookup[c.Hash] = parent
		}
	} else {
		// add ref's commits to the path in reverse order (from the latest)
		for i := len(refCommits) - 1; i >= 0; i-- {
			c := refCommits[i]
			// insert before found common parent
			parent = commitsPath.InsertBefore(c, parent)
			commitsLookup[c.Hash] = parent
		}
	}

	return nil
}

func (it *commitAllIterator) Next() (*Commit, error) {
	if it.currCommit == nil {
		return nil, io.EOF
	}

	c := it.currCommit.Value.(*Commit)
	it.currCommit = it.currCommit.Next()

	return c, nil
}

func (it *commitAllIterator) ForEach(cb func(*Commit) error) error {
	for {
		c, err := it.Next()
		if err == io.EOF {
			break
		}
		if err != nil {
			return err
		}

		err = cb(c)
		if err == storer.ErrStop {
			break
		}
		if err != nil {
			return err
		}
	}

	return nil
}

func (it *commitAllIterator) Close() {
	it.currCommit = nil
}
   07070100000547000081A4000000000000000000000001645E367C000007EB000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/object/commit_walker_bfs.go   package object

import (
	"io"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/storer"
)

type bfsCommitIterator struct {
	seenExternal map[plumbing.Hash]bool
	seen         map[plumbing.Hash]bool
	queue        []*Commit
}

// NewCommitIterBSF returns a CommitIter that walks the commit history,
// starting at the given commit and visiting its parents in pre-order.
// The given callback will be called for each visited commit. Each commit will
// be visited only once. If the callback returns an error, walking will stop
// and will return the error. Other errors might be returned if the history
// cannot be traversed (e.g. missing objects). Ignore allows to skip some
// commits from being iterated.
func NewCommitIterBSF(
	c *Commit,
	seenExternal map[plumbing.Hash]bool,
	ignore []plumbing.Hash,
) CommitIter {
	seen := make(map[plumbing.Hash]bool)
	for _, h := range ignore {
		seen[h] = true
	}

	return &bfsCommitIterator{
		seenExternal: seenExternal,
		seen:         seen,
		queue:        []*Commit{c},
	}
}

func (w *bfsCommitIterator) appendHash(store storer.EncodedObjectStorer, h plumbing.Hash) error {
	if w.seen[h] || w.seenExternal[h] {
		return nil
	}
	c, err := GetCommit(store, h)
	if err != nil {
		return err
	}
	w.queue = append(w.queue, c)
	return nil
}

func (w *bfsCommitIterator) Next() (*Commit, error) {
	var c *Commit
	for {
		if len(w.queue) == 0 {
			return nil, io.EOF
		}
		c = w.queue[0]
		w.queue = w.queue[1:]

		if w.seen[c.Hash] || w.seenExternal[c.Hash] {
			continue
		}

		w.seen[c.Hash] = true

		for _, h := range c.ParentHashes {
			err := w.appendHash(c.s, h)
			if err != nil {
				return nil, err
			}
		}

		return c, nil
	}
}

func (w *bfsCommitIterator) ForEach(cb func(*Commit) error) error {
	for {
		c, err := w.Next()
		if err == io.EOF {
			break
		}
		if err != nil {
			return err
		}

		err = cb(c)
		if err == storer.ErrStop {
			break
		}
		if err != nil {
			return err
		}
	}

	return nil
}

func (w *bfsCommitIterator) Close() {}
 07070100000548000081A4000000000000000000000001645E367C00000FC1000000000000000000000000000000000000006500000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/object/commit_walker_bfs_filtered.go  package object

import (
	"io"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/storer"
)

// NewFilterCommitIter returns a CommitIter that walks the commit history,
// starting at the passed commit and visiting its parents in Breadth-first order.
// The commits returned by the CommitIter will validate the passed CommitFilter.
// The history won't be transversed beyond a commit if isLimit is true for it.
// Each commit will be visited only once.
// If the commit history can not be traversed, or the Close() method is called,
// the CommitIter won't return more commits.
// If no isValid is passed, all ancestors of from commit will be valid.
// If no isLimit is limit, all ancestors of all commits will be visited.
func NewFilterCommitIter(
	from *Commit,
	isValid *CommitFilter,
	isLimit *CommitFilter,
) CommitIter {
	var validFilter CommitFilter
	if isValid == nil {
		validFilter = func(_ *Commit) bool {
			return true
		}
	} else {
		validFilter = *isValid
	}

	var limitFilter CommitFilter
	if isLimit == nil {
		limitFilter = func(_ *Commit) bool {
			return false
		}
	} else {
		limitFilter = *isLimit
	}

	return &filterCommitIter{
		isValid: validFilter,
		isLimit: limitFilter,
		visited: map[plumbing.Hash]struct{}{},
		queue:   []*Commit{from},
	}
}

// CommitFilter returns a boolean for the passed Commit
type CommitFilter func(*Commit) bool

// filterCommitIter implements CommitIter
type filterCommitIter struct {
	isValid CommitFilter
	isLimit CommitFilter
	visited map[plumbing.Hash]struct{}
	queue   []*Commit
	lastErr error
}

// Next returns the next commit of the CommitIter.
// It will return io.EOF if there are no more commits to visit,
// or an error if the history could not be traversed.
func (w *filterCommitIter) Next() (*Commit, error) {
	var commit *Commit
	var err error
	for {
		commit, err = w.popNewFromQueue()
		if err != nil {
			return nil, w.close(err)
		}

		w.visited[commit.Hash] = struct{}{}

		if !w.isLimit(commit) {
			err = w.addToQueue(commit.s, commit.ParentHashes...)
			if err != nil {
				return nil, w.close(err)
			}
		}

		if w.isValid(commit) {
			return commit, nil
		}
	}
}

// ForEach runs the passed callback over each Commit returned by the CommitIter
// until the callback returns an error or there is no more commits to traverse.
func (w *filterCommitIter) ForEach(cb func(*Commit) error) error {
	for {
		commit, err := w.Next()
		if err == io.EOF {
			break
		}

		if err != nil {
			return err
		}

		if err := cb(commit); err == storer.ErrStop {
			break
		} else if err != nil {
			return err
		}
	}

	return nil
}

// Error returns the error that caused that the CommitIter is no longer returning commits
func (w *filterCommitIter) Error() error {
	return w.lastErr
}

// Close closes the CommitIter
func (w *filterCommitIter) Close() {
	w.visited = map[plumbing.Hash]struct{}{}
	w.queue = []*Commit{}
	w.isLimit = nil
	w.isValid = nil
}

// close closes the CommitIter with an error
func (w *filterCommitIter) close(err error) error {
	w.Close()
	w.lastErr = err
	return err
}

// popNewFromQueue returns the first new commit from the internal fifo queue,
// or an io.EOF error if the queue is empty
func (w *filterCommitIter) popNewFromQueue() (*Commit, error) {
	var first *Commit
	for {
		if len(w.queue) == 0 {
			if w.lastErr != nil {
				return nil, w.lastErr
			}

			return nil, io.EOF
		}

		first = w.queue[0]
		w.queue = w.queue[1:]
		if _, ok := w.visited[first.Hash]; ok {
			continue
		}

		return first, nil
	}
}

// addToQueue adds the passed commits to the internal fifo queue if they weren't seen
// or returns an error if the passed hashes could not be used to get valid commits
func (w *filterCommitIter) addToQueue(
	store storer.EncodedObjectStorer,
	hashes ...plumbing.Hash,
) error {
	for _, hash := range hashes {
		if _, ok := w.visited[hash]; ok {
			continue
		}

		commit, err := GetCommit(store, hash)
		if err != nil {
			return err
		}

		w.queue = append(w.queue, commit)
	}

	return nil
}
   07070100000549000081A4000000000000000000000001645E367C0000086C000000000000000000000000000000000000005E00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/object/commit_walker_ctime.go package object

import (
	"io"

	"github.com/emirpasic/gods/trees/binaryheap"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/storer"
)

type commitIteratorByCTime struct {
	seenExternal map[plumbing.Hash]bool
	seen         map[plumbing.Hash]bool
	heap         *binaryheap.Heap
}

// NewCommitIterCTime returns a CommitIter that walks the commit history,
// starting at the given commit and visiting its parents while preserving Committer Time order.
// this appears to be the closest order to `git log`
// The given callback will be called for each visited commit. Each commit will
// be visited only once. If the callback returns an error, walking will stop
// and will return the error. Other errors might be returned if the history
// cannot be traversed (e.g. missing objects). Ignore allows to skip some
// commits from being iterated.
func NewCommitIterCTime(
	c *Commit,
	seenExternal map[plumbing.Hash]bool,
	ignore []plumbing.Hash,
) CommitIter {
	seen := make(map[plumbing.Hash]bool)
	for _, h := range ignore {
		seen[h] = true
	}

	heap := binaryheap.NewWith(func(a, b interface{}) int {
		if a.(*Commit).Committer.When.Before(b.(*Commit).Committer.When) {
			return 1
		}
		return -1
	})
	heap.Push(c)

	return &commitIteratorByCTime{
		seenExternal: seenExternal,
		seen:         seen,
		heap:         heap,
	}
}

func (w *commitIteratorByCTime) Next() (*Commit, error) {
	var c *Commit
	for {
		cIn, ok := w.heap.Pop()
		if !ok {
			return nil, io.EOF
		}
		c = cIn.(*Commit)

		if w.seen[c.Hash] || w.seenExternal[c.Hash] {
			continue
		}

		w.seen[c.Hash] = true

		for _, h := range c.ParentHashes {
			if w.seen[h] || w.seenExternal[h] {
				continue
			}
			pc, err := GetCommit(c.s, h)
			if err != nil {
				return nil, err
			}
			w.heap.Push(pc)
		}

		return c, nil
	}
}

func (w *commitIteratorByCTime) ForEach(cb func(*Commit) error) error {
	for {
		c, err := w.Next()
		if err == io.EOF {
			break
		}
		if err != nil {
			return err
		}

		err = cb(c)
		if err == storer.ErrStop {
			break
		}
		if err != nil {
			return err
		}
	}

	return nil
}

func (w *commitIteratorByCTime) Close() {}
0707010000054A000081A4000000000000000000000001645E367C000004C0000000000000000000000000000000000000005E00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/object/commit_walker_limit.go package object

import (
	"io"
	"time"

	"github.com/go-git/go-git/v5/plumbing/storer"
)

type commitLimitIter struct {
	sourceIter   CommitIter
	limitOptions LogLimitOptions
}

type LogLimitOptions struct {
	Since *time.Time
	Until *time.Time
}

func NewCommitLimitIterFromIter(commitIter CommitIter, limitOptions LogLimitOptions) CommitIter {
	iterator := new(commitLimitIter)
	iterator.sourceIter = commitIter
	iterator.limitOptions = limitOptions
	return iterator
}

func (c *commitLimitIter) Next() (*Commit, error) {
	for {
		commit, err := c.sourceIter.Next()
		if err != nil {
			return nil, err
		}

		if c.limitOptions.Since != nil && commit.Committer.When.Before(*c.limitOptions.Since) {
			continue
		}
		if c.limitOptions.Until != nil && commit.Committer.When.After(*c.limitOptions.Until) {
			continue
		}
		return commit, nil
	}
}

func (c *commitLimitIter) ForEach(cb func(*Commit) error) error {
	for {
		commit, nextErr := c.Next()
		if nextErr == io.EOF {
			break
		}
		if nextErr != nil {
			return nextErr
		}
		err := cb(commit)
		if err == storer.ErrStop {
			return nil
		} else if err != nil {
			return err
		}
	}
	return nil
}

func (c *commitLimitIter) Close() {
	c.sourceIter.Close()
}
0707010000054B000081A4000000000000000000000001645E367C00000FEF000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/object/commit_walker_path.go  package object

import (
	"io"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/storer"
)

type commitPathIter struct {
	pathFilter    func(string) bool
	sourceIter    CommitIter
	currentCommit *Commit
	checkParent   bool
}

// NewCommitPathIterFromIter returns a commit iterator which performs diffTree between
// successive trees returned from the commit iterator from the argument. The purpose of this is
// to find the commits that explain how the files that match the path came to be.
// If checkParent is true then the function double checks if potential parent (next commit in a path)
// is one of the parents in the tree (it's used by `git log --all`).
// pathFilter is a function that takes path of file as argument and returns true if we want it
func NewCommitPathIterFromIter(pathFilter func(string) bool, commitIter CommitIter, checkParent bool) CommitIter {
	iterator := new(commitPathIter)
	iterator.sourceIter = commitIter
	iterator.pathFilter = pathFilter
	iterator.checkParent = checkParent
	return iterator
}

// NewCommitFileIterFromIter is kept for compatibility, can be replaced with NewCommitPathIterFromIter
func NewCommitFileIterFromIter(fileName string, commitIter CommitIter, checkParent bool) CommitIter {
	return NewCommitPathIterFromIter(
		func(path string) bool {
			return path == fileName
		},
		commitIter,
		checkParent,
	)
}

func (c *commitPathIter) Next() (*Commit, error) {
	if c.currentCommit == nil {
		var err error
		c.currentCommit, err = c.sourceIter.Next()
		if err != nil {
			return nil, err
		}
	}
	commit, commitErr := c.getNextFileCommit()

	// Setting current-commit to nil to prevent unwanted states when errors are raised
	if commitErr != nil {
		c.currentCommit = nil
	}
	return commit, commitErr
}

func (c *commitPathIter) getNextFileCommit() (*Commit, error) {
	for {
		// Parent-commit can be nil if the current-commit is the initial commit
		parentCommit, parentCommitErr := c.sourceIter.Next()
		if parentCommitErr != nil {
			// If the parent-commit is beyond the initial commit, keep it nil
			if parentCommitErr != io.EOF {
				return nil, parentCommitErr
			}
			parentCommit = nil
		}

		// Fetch the trees of the current and parent commits
		currentTree, currTreeErr := c.currentCommit.Tree()
		if currTreeErr != nil {
			return nil, currTreeErr
		}

		var parentTree *Tree
		if parentCommit != nil {
			var parentTreeErr error
			parentTree, parentTreeErr = parentCommit.Tree()
			if parentTreeErr != nil {
				return nil, parentTreeErr
			}
		}

		// Find diff between current and parent trees
		changes, diffErr := DiffTree(currentTree, parentTree)
		if diffErr != nil {
			return nil, diffErr
		}

		found := c.hasFileChange(changes, parentCommit)

		// Storing the current-commit in-case a change is found, and
		// Updating the current-commit for the next-iteration
		prevCommit := c.currentCommit
		c.currentCommit = parentCommit

		if found {
			return prevCommit, nil
		}

		// If not matches found and if parent-commit is beyond the initial commit, then return with EOF
		if parentCommit == nil {
			return nil, io.EOF
		}
	}
}

func (c *commitPathIter) hasFileChange(changes Changes, parent *Commit) bool {
	for _, change := range changes {
		if !c.pathFilter(change.name()) {
			continue
		}

		// filename matches, now check if source iterator contains all commits (from all refs)
		if c.checkParent {
			if parent != nil && isParentHash(parent.Hash, c.currentCommit) {
				return true
			}
			continue
		}

		return true
	}

	return false
}

func isParentHash(hash plumbing.Hash, commit *Commit) bool {
	for _, h := range commit.ParentHashes {
		if h == hash {
			return true
		}
	}
	return false
}

func (c *commitPathIter) ForEach(cb func(*Commit) error) error {
	for {
		commit, nextErr := c.Next()
		if nextErr == io.EOF {
			break
		}
		if nextErr != nil {
			return nextErr
		}
		err := cb(commit)
		if err == storer.ErrStop {
			return nil
		} else if err != nil {
			return err
		}
	}
	return nil
}

func (c *commitPathIter) Close() {
	c.sourceIter.Close()
}
 0707010000054C000081A4000000000000000000000001645E367C00000085000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/object/common.go  package object

import (
	"bufio"
	"sync"
)

var bufPool = sync.Pool{
	New: func() interface{} {
		return bufio.NewReader(nil)
	},
}
   0707010000054D000081A4000000000000000000000001645E367C00000C3F000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/object/difftree.go    package object

import (
	"bytes"
	"context"

	"github.com/go-git/go-git/v5/utils/merkletrie"
	"github.com/go-git/go-git/v5/utils/merkletrie/noder"
)

// DiffTree compares the content and mode of the blobs found via two
// tree objects.
// DiffTree does not perform rename detection, use DiffTreeWithOptions
// instead to detect renames.
func DiffTree(a, b *Tree) (Changes, error) {
	return DiffTreeContext(context.Background(), a, b)
}

// DiffTreeContext compares the content and mode of the blobs found via two
// tree objects. Provided context must be non-nil.
// An error will be returned if context expires.
func DiffTreeContext(ctx context.Context, a, b *Tree) (Changes, error) {
	return DiffTreeWithOptions(ctx, a, b, nil)
}

// DiffTreeOptions are the configurable options when performing a diff tree.
type DiffTreeOptions struct {
	// DetectRenames is whether the diff tree will use rename detection.
	DetectRenames bool
	// RenameScore is the threshold to of similarity between files to consider
	// that a pair of delete and insert are a rename. The number must be
	// exactly between 0 and 100.
	RenameScore uint
	// RenameLimit is the maximum amount of files that can be compared when
	// detecting renames. The number of comparisons that have to be performed
	// is equal to the number of deleted files * the number of added files.
	// That means, that if 100 files were deleted and 50 files were added, 5000
	// file comparisons may be needed. So, if the rename limit is 50, the number
	// of both deleted and added needs to be equal or less than 50.
	// A value of 0 means no limit.
	RenameLimit uint
	// OnlyExactRenames performs only detection of exact renames and will not perform
	// any detection of renames based on file similarity.
	OnlyExactRenames bool
}

// DefaultDiffTreeOptions are the default and recommended options for the
// diff tree.
var DefaultDiffTreeOptions = &DiffTreeOptions{
	DetectRenames:    true,
	RenameScore:      60,
	RenameLimit:      0,
	OnlyExactRenames: false,
}

// DiffTreeWithOptions compares the content and mode of the blobs found
// via two tree objects with the given options. The provided context
// must be non-nil.
// If no options are passed, no rename detection will be performed. The
// recommended options are DefaultDiffTreeOptions.
// An error will be returned if the context expires.
// This function will be deprecated and removed in v6 so the default
// behaviour of DiffTree is to detect renames.
func DiffTreeWithOptions(
	ctx context.Context,
	a, b *Tree,
	opts *DiffTreeOptions,
) (Changes, error) {
	from := NewTreeRootNode(a)
	to := NewTreeRootNode(b)

	hashEqual := func(a, b noder.Hasher) bool {
		return bytes.Equal(a.Hash(), b.Hash())
	}

	merkletrieChanges, err := merkletrie.DiffTreeContext(ctx, from, to, hashEqual)
	if err != nil {
		if err == merkletrie.ErrCanceled {
			return nil, ErrCanceled
		}
		return nil, err
	}

	changes, err := newChanges(merkletrieChanges)
	if err != nil {
		return nil, err
	}

	if opts == nil {
		opts = new(DiffTreeOptions)
	}

	if opts.DetectRenames {
		return DetectRenames(changes, opts)
	}

	return changes, nil
}
 0707010000054E000081A4000000000000000000000001645E367C00000C95000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/object/file.go    package object

import (
	"bytes"
	"io"
	"strings"

	"github.com/go-git/go-git/v5/plumbing/filemode"
	"github.com/go-git/go-git/v5/plumbing/storer"
	"github.com/go-git/go-git/v5/utils/binary"
	"github.com/go-git/go-git/v5/utils/ioutil"
)

// File represents git file objects.
type File struct {
	// Name is the path of the file. It might be relative to a tree,
	// depending of the function that generates it.
	Name string
	// Mode is the file mode.
	Mode filemode.FileMode
	// Blob with the contents of the file.
	Blob
}

// NewFile returns a File based on the given blob object
func NewFile(name string, m filemode.FileMode, b *Blob) *File {
	return &File{Name: name, Mode: m, Blob: *b}
}

// Contents returns the contents of a file as a string.
func (f *File) Contents() (content string, err error) {
	reader, err := f.Reader()
	if err != nil {
		return "", err
	}
	defer ioutil.CheckClose(reader, &err)

	buf := new(bytes.Buffer)
	if _, err := buf.ReadFrom(reader); err != nil {
		return "", err
	}

	return buf.String(), nil
}

// IsBinary returns if the file is binary or not
func (f *File) IsBinary() (bin bool, err error) {
	reader, err := f.Reader()
	if err != nil {
		return false, err
	}
	defer ioutil.CheckClose(reader, &err)

	return binary.IsBinary(reader)
}

// Lines returns a slice of lines from the contents of a file, stripping
// all end of line characters. If the last line is empty (does not end
// in an end of line), it is also stripped.
func (f *File) Lines() ([]string, error) {
	content, err := f.Contents()
	if err != nil {
		return nil, err
	}

	splits := strings.Split(content, "\n")
	// remove the last line if it is empty
	if splits[len(splits)-1] == "" {
		return splits[:len(splits)-1], nil
	}

	return splits, nil
}

// FileIter provides an iterator for the files in a tree.
type FileIter struct {
	s storer.EncodedObjectStorer
	w TreeWalker
}

// NewFileIter takes a storer.EncodedObjectStorer and a Tree and returns a
// *FileIter that iterates over all files contained in the tree, recursively.
func NewFileIter(s storer.EncodedObjectStorer, t *Tree) *FileIter {
	return &FileIter{s: s, w: *NewTreeWalker(t, true, nil)}
}

// Next moves the iterator to the next file and returns a pointer to it. If
// there are no more files, it returns io.EOF.
func (iter *FileIter) Next() (*File, error) {
	for {
		name, entry, err := iter.w.Next()
		if err != nil {
			return nil, err
		}

		if entry.Mode == filemode.Dir || entry.Mode == filemode.Submodule {
			continue
		}

		blob, err := GetBlob(iter.s, entry.Hash)
		if err != nil {
			return nil, err
		}

		return NewFile(name, entry.Mode, blob), nil
	}
}

// ForEach call the cb function for each file contained in this iter until
// an error happens or the end of the iter is reached. If plumbing.ErrStop is sent
// the iteration is stop but no error is returned. The iterator is closed.
func (iter *FileIter) ForEach(cb func(*File) error) error {
	defer iter.Close()

	for {
		f, err := iter.Next()
		if err != nil {
			if err == io.EOF {
				return nil
			}

			return err
		}

		if err := cb(f); err != nil {
			if err == storer.ErrStop {
				return nil
			}

			return err
		}
	}
}

func (iter *FileIter) Close() {
	iter.w.Close()
}
   0707010000054F000081A4000000000000000000000001645E367C000015C3000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/object/merge_base.go  package object

import (
	"fmt"
	"sort"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/storer"
)

// errIsReachable is thrown when first commit is an ancestor of the second
var errIsReachable = fmt.Errorf("first is reachable from second")

// MergeBase mimics the behavior of `git merge-base actual other`, returning the
// best common ancestor between the actual and the passed one.
// The best common ancestors can not be reached from other common ancestors.
func (c *Commit) MergeBase(other *Commit) ([]*Commit, error) {
	// use sortedByCommitDateDesc strategy
	sorted := sortByCommitDateDesc(c, other)
	newer := sorted[0]
	older := sorted[1]

	newerHistory, err := ancestorsIndex(older, newer)
	if err == errIsReachable {
		return []*Commit{older}, nil
	}

	if err != nil {
		return nil, err
	}

	var res []*Commit
	inNewerHistory := isInIndexCommitFilter(newerHistory)
	resIter := NewFilterCommitIter(older, &inNewerHistory, &inNewerHistory)
	_ = resIter.ForEach(func(commit *Commit) error {
		res = append(res, commit)
		return nil
	})

	return Independents(res)
}

// IsAncestor returns true if the actual commit is ancestor of the passed one.
// It returns an error if the history is not transversable
// It mimics the behavior of `git merge --is-ancestor actual other`
func (c *Commit) IsAncestor(other *Commit) (bool, error) {
	found := false
	iter := NewCommitPreorderIter(other, nil, nil)
	err := iter.ForEach(func(comm *Commit) error {
		if comm.Hash != c.Hash {
			return nil
		}

		found = true
		return storer.ErrStop
	})

	return found, err
}

// ancestorsIndex returns a map with the ancestors of the starting commit if the
// excluded one is not one of them. It returns errIsReachable if the excluded commit
// is ancestor of the starting, or another error if the history is not traversable.
func ancestorsIndex(excluded, starting *Commit) (map[plumbing.Hash]struct{}, error) {
	if excluded.Hash.String() == starting.Hash.String() {
		return nil, errIsReachable
	}

	startingHistory := map[plumbing.Hash]struct{}{}
	startingIter := NewCommitIterBSF(starting, nil, nil)
	err := startingIter.ForEach(func(commit *Commit) error {
		if commit.Hash == excluded.Hash {
			return errIsReachable
		}

		startingHistory[commit.Hash] = struct{}{}
		return nil
	})

	if err != nil {
		return nil, err
	}

	return startingHistory, nil
}

// Independents returns a subset of the passed commits, that are not reachable the others
// It mimics the behavior of `git merge-base --independent commit...`.
func Independents(commits []*Commit) ([]*Commit, error) {
	// use sortedByCommitDateDesc strategy
	candidates := sortByCommitDateDesc(commits...)
	candidates = removeDuplicated(candidates)

	seen := map[plumbing.Hash]struct{}{}
	var isLimit CommitFilter = func(commit *Commit) bool {
		_, ok := seen[commit.Hash]
		return ok
	}

	if len(candidates) < 2 {
		return candidates, nil
	}

	pos := 0
	for {
		from := candidates[pos]
		others := remove(candidates, from)
		fromHistoryIter := NewFilterCommitIter(from, nil, &isLimit)
		err := fromHistoryIter.ForEach(func(fromAncestor *Commit) error {
			for _, other := range others {
				if fromAncestor.Hash == other.Hash {
					candidates = remove(candidates, other)
					others = remove(others, other)
				}
			}

			if len(candidates) == 1 {
				return storer.ErrStop
			}

			seen[fromAncestor.Hash] = struct{}{}
			return nil
		})

		if err != nil {
			return nil, err
		}

		nextPos := indexOf(candidates, from) + 1
		if nextPos >= len(candidates) {
			break
		}

		pos = nextPos
	}

	return candidates, nil
}

// sortByCommitDateDesc returns the passed commits, sorted by `committer.When desc`
//
// Following this strategy, it is tried to reduce the time needed when walking
// the history from one commit to reach the others. It is assumed that ancestors
// use to be committed before its descendant;
// That way `Independents(A^, A)` will be processed as being `Independents(A, A^)`;
// so starting by `A` it will be reached `A^` way sooner than walking from `A^`
// to the initial commit, and then from `A` to `A^`.
func sortByCommitDateDesc(commits ...*Commit) []*Commit {
	sorted := make([]*Commit, len(commits))
	copy(sorted, commits)
	sort.Slice(sorted, func(i, j int) bool {
		return sorted[i].Committer.When.After(sorted[j].Committer.When)
	})

	return sorted
}

// indexOf returns the first position where target was found in the passed commits
func indexOf(commits []*Commit, target *Commit) int {
	for i, commit := range commits {
		if target.Hash == commit.Hash {
			return i
		}
	}

	return -1
}

// remove returns the passed commits excluding the commit toDelete
func remove(commits []*Commit, toDelete *Commit) []*Commit {
	res := make([]*Commit, len(commits))
	j := 0
	for _, commit := range commits {
		if commit.Hash == toDelete.Hash {
			continue
		}

		res[j] = commit
		j++
	}

	return res[:j]
}

// removeDuplicated removes duplicated commits from the passed slice of commits
func removeDuplicated(commits []*Commit) []*Commit {
	seen := make(map[plumbing.Hash]struct{}, len(commits))
	res := make([]*Commit, len(commits))
	j := 0
	for _, commit := range commits {
		if _, ok := seen[commit.Hash]; ok {
			continue
		}

		seen[commit.Hash] = struct{}{}
		res[j] = commit
		j++
	}

	return res[:j]
}

// isInIndexCommitFilter returns a commitFilter that returns true
// if the commit is in the passed index.
func isInIndexCommitFilter(index map[plumbing.Hash]struct{}) CommitFilter {
	return func(c *Commit) bool {
		_, ok := index[c.Hash]
		return ok
	}
}
 07070100000550000081A4000000000000000000000001645E367C00001788000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/object/object.go  // Package object contains implementations of all Git objects and utility
// functions to work with them.
package object

import (
	"bytes"
	"errors"
	"fmt"
	"io"
	"strconv"
	"time"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/storer"
)

// ErrUnsupportedObject trigger when a non-supported object is being decoded.
var ErrUnsupportedObject = errors.New("unsupported object type")

// Object is a generic representation of any git object. It is implemented by
// Commit, Tree, Blob, and Tag, and includes the functions that are common to
// them.
//
// Object is returned when an object can be of any type. It is frequently used
// with a type cast to acquire the specific type of object:
//
//   func process(obj Object) {
//   	switch o := obj.(type) {
//   	case *Commit:
//   		// o is a Commit
//   	case *Tree:
//   		// o is a Tree
//   	case *Blob:
//   		// o is a Blob
//   	case *Tag:
//   		// o is a Tag
//   	}
//   }
//
// This interface is intentionally different from plumbing.EncodedObject, which
// is a lower level interface used by storage implementations to read and write
// objects in its encoded form.
type Object interface {
	ID() plumbing.Hash
	Type() plumbing.ObjectType
	Decode(plumbing.EncodedObject) error
	Encode(plumbing.EncodedObject) error
}

// GetObject gets an object from an object storer and decodes it.
func GetObject(s storer.EncodedObjectStorer, h plumbing.Hash) (Object, error) {
	o, err := s.EncodedObject(plumbing.AnyObject, h)
	if err != nil {
		return nil, err
	}

	return DecodeObject(s, o)
}

// DecodeObject decodes an encoded object into an Object and associates it to
// the given object storer.
func DecodeObject(s storer.EncodedObjectStorer, o plumbing.EncodedObject) (Object, error) {
	switch o.Type() {
	case plumbing.CommitObject:
		return DecodeCommit(s, o)
	case plumbing.TreeObject:
		return DecodeTree(s, o)
	case plumbing.BlobObject:
		return DecodeBlob(o)
	case plumbing.TagObject:
		return DecodeTag(s, o)
	default:
		return nil, plumbing.ErrInvalidType
	}
}

// DateFormat is the format being used in the original git implementation
const DateFormat = "Mon Jan 02 15:04:05 2006 -0700"

// Signature is used to identify who and when created a commit or tag.
type Signature struct {
	// Name represents a person name. It is an arbitrary string.
	Name string
	// Email is an email, but it cannot be assumed to be well-formed.
	Email string
	// When is the timestamp of the signature.
	When time.Time
}

// Decode decodes a byte slice into a signature
func (s *Signature) Decode(b []byte) {
	open := bytes.LastIndexByte(b, '<')
	close := bytes.LastIndexByte(b, '>')
	if open == -1 || close == -1 {
		return
	}

	if close < open {
		return
	}

	s.Name = string(bytes.Trim(b[:open], " "))
	s.Email = string(b[open+1 : close])

	hasTime := close+2 < len(b)
	if hasTime {
		s.decodeTimeAndTimeZone(b[close+2:])
	}
}

// Encode encodes a Signature into a writer.
func (s *Signature) Encode(w io.Writer) error {
	if _, err := fmt.Fprintf(w, "%s <%s> ", s.Name, s.Email); err != nil {
		return err
	}
	if err := s.encodeTimeAndTimeZone(w); err != nil {
		return err
	}
	return nil
}

var timeZoneLength = 5

func (s *Signature) decodeTimeAndTimeZone(b []byte) {
	space := bytes.IndexByte(b, ' ')
	if space == -1 {
		space = len(b)
	}

	ts, err := strconv.ParseInt(string(b[:space]), 10, 64)
	if err != nil {
		return
	}

	s.When = time.Unix(ts, 0).In(time.UTC)
	var tzStart = space + 1
	if tzStart >= len(b) || tzStart+timeZoneLength > len(b) {
		return
	}

	timezone := string(b[tzStart : tzStart+timeZoneLength])
	tzhours, err1 := strconv.ParseInt(timezone[0:3], 10, 64)
	tzmins, err2 := strconv.ParseInt(timezone[3:], 10, 64)
	if err1 != nil || err2 != nil {
		return
	}
	if tzhours < 0 {
		tzmins *= -1
	}

	tz := time.FixedZone("", int(tzhours*60*60+tzmins*60))

	s.When = s.When.In(tz)
}

func (s *Signature) encodeTimeAndTimeZone(w io.Writer) error {
	u := s.When.Unix()
	if u < 0 {
		u = 0
	}
	_, err := fmt.Fprintf(w, "%d %s", u, s.When.Format("-0700"))
	return err
}

func (s *Signature) String() string {
	return fmt.Sprintf("%s <%s>", s.Name, s.Email)
}

// ObjectIter provides an iterator for a set of objects.
type ObjectIter struct {
	storer.EncodedObjectIter
	s storer.EncodedObjectStorer
}

// NewObjectIter takes a storer.EncodedObjectStorer and a
// storer.EncodedObjectIter and returns an *ObjectIter that iterates over all
// objects contained in the storer.EncodedObjectIter.
func NewObjectIter(s storer.EncodedObjectStorer, iter storer.EncodedObjectIter) *ObjectIter {
	return &ObjectIter{iter, s}
}

// Next moves the iterator to the next object and returns a pointer to it. If
// there are no more objects, it returns io.EOF.
func (iter *ObjectIter) Next() (Object, error) {
	for {
		obj, err := iter.EncodedObjectIter.Next()
		if err != nil {
			return nil, err
		}

		o, err := iter.toObject(obj)
		if err == plumbing.ErrInvalidType {
			continue
		}

		if err != nil {
			return nil, err
		}

		return o, nil
	}
}

// ForEach call the cb function for each object contained on this iter until
// an error happens or the end of the iter is reached. If ErrStop is sent
// the iteration is stop but no error is returned. The iterator is closed.
func (iter *ObjectIter) ForEach(cb func(Object) error) error {
	return iter.EncodedObjectIter.ForEach(func(obj plumbing.EncodedObject) error {
		o, err := iter.toObject(obj)
		if err == plumbing.ErrInvalidType {
			return nil
		}

		if err != nil {
			return err
		}

		return cb(o)
	})
}

func (iter *ObjectIter) toObject(obj plumbing.EncodedObject) (Object, error) {
	switch obj.Type() {
	case plumbing.BlobObject:
		blob := &Blob{}
		return blob, blob.Decode(obj)
	case plumbing.TreeObject:
		tree := &Tree{s: iter.s}
		return tree, tree.Decode(obj)
	case plumbing.CommitObject:
		commit := &Commit{}
		return commit, commit.Decode(obj)
	case plumbing.TagObject:
		tag := &Tag{}
		return tag, tag.Decode(obj)
	default:
		return nil, plumbing.ErrInvalidType
	}
}
07070100000551000081A4000000000000000000000001645E367C00001D16000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/object/patch.go   package object

import (
	"bytes"
	"context"
	"errors"
	"fmt"
	"io"
	"math"
	"strings"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/filemode"
	fdiff "github.com/go-git/go-git/v5/plumbing/format/diff"
	"github.com/go-git/go-git/v5/utils/diff"

	dmp "github.com/sergi/go-diff/diffmatchpatch"
)

var (
	ErrCanceled = errors.New("operation canceled")
)

func getPatch(message string, changes ...*Change) (*Patch, error) {
	ctx := context.Background()
	return getPatchContext(ctx, message, changes...)
}

func getPatchContext(ctx context.Context, message string, changes ...*Change) (*Patch, error) {
	var filePatches []fdiff.FilePatch
	for _, c := range changes {
		select {
		case <-ctx.Done():
			return nil, ErrCanceled
		default:
		}

		fp, err := filePatchWithContext(ctx, c)
		if err != nil {
			return nil, err
		}

		filePatches = append(filePatches, fp)
	}

	return &Patch{message, filePatches}, nil
}

func filePatchWithContext(ctx context.Context, c *Change) (fdiff.FilePatch, error) {
	from, to, err := c.Files()
	if err != nil {
		return nil, err
	}
	fromContent, fIsBinary, err := fileContent(from)
	if err != nil {
		return nil, err
	}

	toContent, tIsBinary, err := fileContent(to)
	if err != nil {
		return nil, err
	}

	if fIsBinary || tIsBinary {
		return &textFilePatch{from: c.From, to: c.To}, nil
	}

	diffs := diff.Do(fromContent, toContent)

	var chunks []fdiff.Chunk
	for _, d := range diffs {
		select {
		case <-ctx.Done():
			return nil, ErrCanceled
		default:
		}

		var op fdiff.Operation
		switch d.Type {
		case dmp.DiffEqual:
			op = fdiff.Equal
		case dmp.DiffDelete:
			op = fdiff.Delete
		case dmp.DiffInsert:
			op = fdiff.Add
		}

		chunks = append(chunks, &textChunk{d.Text, op})
	}

	return &textFilePatch{
		chunks: chunks,
		from:   c.From,
		to:     c.To,
	}, nil

}

func filePatch(c *Change) (fdiff.FilePatch, error) {
	return filePatchWithContext(context.Background(), c)
}

func fileContent(f *File) (content string, isBinary bool, err error) {
	if f == nil {
		return
	}

	isBinary, err = f.IsBinary()
	if err != nil || isBinary {
		return
	}

	content, err = f.Contents()

	return
}

// Patch is an implementation of fdiff.Patch interface
type Patch struct {
	message     string
	filePatches []fdiff.FilePatch
}

func (p *Patch) FilePatches() []fdiff.FilePatch {
	return p.filePatches
}

func (p *Patch) Message() string {
	return p.message
}

func (p *Patch) Encode(w io.Writer) error {
	ue := fdiff.NewUnifiedEncoder(w, fdiff.DefaultContextLines)

	return ue.Encode(p)
}

func (p *Patch) Stats() FileStats {
	return getFileStatsFromFilePatches(p.FilePatches())
}

func (p *Patch) String() string {
	buf := bytes.NewBuffer(nil)
	err := p.Encode(buf)
	if err != nil {
		return fmt.Sprintf("malformed patch: %s", err.Error())
	}

	return buf.String()
}

// changeEntryWrapper is an implementation of fdiff.File interface
type changeEntryWrapper struct {
	ce ChangeEntry
}

func (f *changeEntryWrapper) Hash() plumbing.Hash {
	if !f.ce.TreeEntry.Mode.IsFile() {
		return plumbing.ZeroHash
	}

	return f.ce.TreeEntry.Hash
}

func (f *changeEntryWrapper) Mode() filemode.FileMode {
	return f.ce.TreeEntry.Mode
}
func (f *changeEntryWrapper) Path() string {
	if !f.ce.TreeEntry.Mode.IsFile() {
		return ""
	}

	return f.ce.Name
}

func (f *changeEntryWrapper) Empty() bool {
	return !f.ce.TreeEntry.Mode.IsFile()
}

// textFilePatch is an implementation of fdiff.FilePatch interface
type textFilePatch struct {
	chunks   []fdiff.Chunk
	from, to ChangeEntry
}

func (tf *textFilePatch) Files() (from fdiff.File, to fdiff.File) {
	f := &changeEntryWrapper{tf.from}
	t := &changeEntryWrapper{tf.to}

	if !f.Empty() {
		from = f
	}

	if !t.Empty() {
		to = t
	}

	return
}

func (tf *textFilePatch) IsBinary() bool {
	return len(tf.chunks) == 0
}

func (tf *textFilePatch) Chunks() []fdiff.Chunk {
	return tf.chunks
}

// textChunk is an implementation of fdiff.Chunk interface
type textChunk struct {
	content string
	op      fdiff.Operation
}

func (t *textChunk) Content() string {
	return t.content
}

func (t *textChunk) Type() fdiff.Operation {
	return t.op
}

// FileStat stores the status of changes in content of a file.
type FileStat struct {
	Name     string
	Addition int
	Deletion int
}

func (fs FileStat) String() string {
	return printStat([]FileStat{fs})
}

// FileStats is a collection of FileStat.
type FileStats []FileStat

func (fileStats FileStats) String() string {
	return printStat(fileStats)
}

func printStat(fileStats []FileStat) string {
	padLength := float64(len(" "))
	newlineLength := float64(len("\n"))
	separatorLength := float64(len("|"))
	// Soft line length limit. The text length calculation below excludes
	// length of the change number. Adding that would take it closer to 80,
	// but probably not more than 80, until it's a huge number.
	lineLength := 72.0

	// Get the longest filename and longest total change.
	var longestLength float64
	var longestTotalChange float64
	for _, fs := range fileStats {
		if int(longestLength) < len(fs.Name) {
			longestLength = float64(len(fs.Name))
		}
		totalChange := fs.Addition + fs.Deletion
		if int(longestTotalChange) < totalChange {
			longestTotalChange = float64(totalChange)
		}
	}

	// Parts of the output:
	// <pad><filename><pad>|<pad><changeNumber><pad><+++/---><newline>
	// example: " main.go | 10 +++++++--- "

	// <pad><filename><pad>
	leftTextLength := padLength + longestLength + padLength

	// <pad><number><pad><+++++/-----><newline>
	// Excluding number length here.
	rightTextLength := padLength + padLength + newlineLength

	totalTextArea := leftTextLength + separatorLength + rightTextLength
	heightOfHistogram := lineLength - totalTextArea

	// Scale the histogram.
	var scaleFactor float64
	if longestTotalChange > heightOfHistogram {
		// Scale down to heightOfHistogram.
		scaleFactor = longestTotalChange / heightOfHistogram
	} else {
		scaleFactor = 1.0
	}

	finalOutput := ""
	for _, fs := range fileStats {
		addn := float64(fs.Addition)
		deln := float64(fs.Deletion)
		addc := int(math.Floor(addn/scaleFactor))
		delc := int(math.Floor(deln/scaleFactor))
		if addc < 0 {
			addc = 0
		}
		if delc < 0 {
			delc = 0
		}
		adds := strings.Repeat("+", addc)
		dels := strings.Repeat("-", delc)
		finalOutput += fmt.Sprintf(" %s | %d %s%s\n", fs.Name, (fs.Addition + fs.Deletion), adds, dels)
	}

	return finalOutput
}

func getFileStatsFromFilePatches(filePatches []fdiff.FilePatch) FileStats {
	var fileStats FileStats

	for _, fp := range filePatches {
		// ignore empty patches (binary files, submodule refs updates)
		if len(fp.Chunks()) == 0 {
			continue
		}

		cs := FileStat{}
		from, to := fp.Files()
		if from == nil {
			// New File is created.
			cs.Name = to.Path()
		} else if to == nil {
			// File is deleted.
			cs.Name = from.Path()
		} else if from.Path() != to.Path() {
			// File is renamed. Not supported.
			// cs.Name = fmt.Sprintf("%s => %s", from.Path(), to.Path())
		} else {
			cs.Name = from.Path()
		}

		for _, chunk := range fp.Chunks() {
			s := chunk.Content()
			if len(s) == 0 {
				continue
			}

			switch chunk.Type() {
			case fdiff.Add:
				cs.Addition += strings.Count(s, "\n")
				if s[len(s)-1] != '\n' {
					cs.Addition++
				}
			case fdiff.Delete:
				cs.Deletion += strings.Count(s, "\n")
				if s[len(s)-1] != '\n' {
					cs.Deletion++
				}
			}
		}

		fileStats = append(fileStats, cs)
	}

	return fileStats
}
  07070100000552000081A4000000000000000000000001645E367C000049E8000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/object/rename.go  package object

import (
	"errors"
	"io"
	"sort"
	"strings"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/filemode"
	"github.com/go-git/go-git/v5/utils/ioutil"
	"github.com/go-git/go-git/v5/utils/merkletrie"
)

// DetectRenames detects the renames in the given changes on two trees with
// the given options. It will return the given changes grouping additions and
// deletions into modifications when possible.
// If options is nil, the default diff tree options will be used.
func DetectRenames(
	changes Changes,
	opts *DiffTreeOptions,
) (Changes, error) {
	if opts == nil {
		opts = DefaultDiffTreeOptions
	}

	detector := &renameDetector{
		renameScore: int(opts.RenameScore),
		renameLimit: int(opts.RenameLimit),
		onlyExact:   opts.OnlyExactRenames,
	}

	for _, c := range changes {
		action, err := c.Action()
		if err != nil {
			return nil, err
		}

		switch action {
		case merkletrie.Insert:
			detector.added = append(detector.added, c)
		case merkletrie.Delete:
			detector.deleted = append(detector.deleted, c)
		default:
			detector.modified = append(detector.modified, c)
		}
	}

	return detector.detect()
}

// renameDetector will detect and resolve renames in a set of changes.
// see: https://github.com/eclipse/jgit/blob/master/org.eclipse.jgit/src/org/eclipse/jgit/diff/RenameDetector.java
type renameDetector struct {
	added    []*Change
	deleted  []*Change
	modified []*Change

	renameScore int
	renameLimit int
	onlyExact   bool
}

// detectExactRenames detects matches files that were deleted with files that
// were added where the hash is the same on both. If there are multiple targets
// the one with the most similar path will be chosen as the rename and the
// rest as either deletions or additions.
func (d *renameDetector) detectExactRenames() {
	added := groupChangesByHash(d.added)
	deletes := groupChangesByHash(d.deleted)
	var uniqueAdds []*Change
	var nonUniqueAdds [][]*Change
	var addedLeft []*Change

	for _, cs := range added {
		if len(cs) == 1 {
			uniqueAdds = append(uniqueAdds, cs[0])
		} else {
			nonUniqueAdds = append(nonUniqueAdds, cs)
		}
	}

	for _, c := range uniqueAdds {
		hash := changeHash(c)
		deleted := deletes[hash]

		if len(deleted) == 1 {
			if sameMode(c, deleted[0]) {
				d.modified = append(d.modified, &Change{From: deleted[0].From, To: c.To})
				delete(deletes, hash)
			} else {
				addedLeft = append(addedLeft, c)
			}
		} else if len(deleted) > 1 {
			bestMatch := bestNameMatch(c, deleted)
			if bestMatch != nil && sameMode(c, bestMatch) {
				d.modified = append(d.modified, &Change{From: bestMatch.From, To: c.To})
				delete(deletes, hash)

				var newDeletes = make([]*Change, 0, len(deleted)-1)
				for _, d := range deleted {
					if d != bestMatch {
						newDeletes = append(newDeletes, d)
					}
				}
				deletes[hash] = newDeletes
			}
		} else {
			addedLeft = append(addedLeft, c)
		}
	}

	for _, added := range nonUniqueAdds {
		hash := changeHash(added[0])
		deleted := deletes[hash]

		if len(deleted) == 1 {
			deleted := deleted[0]
			bestMatch := bestNameMatch(deleted, added)
			if bestMatch != nil && sameMode(deleted, bestMatch) {
				d.modified = append(d.modified, &Change{From: deleted.From, To: bestMatch.To})
				delete(deletes, hash)

				for _, c := range added {
					if c != bestMatch {
						addedLeft = append(addedLeft, c)
					}
				}
			} else {
				addedLeft = append(addedLeft, added...)
			}
		} else if len(deleted) > 1 {
			maxSize := len(deleted) * len(added)
			if d.renameLimit > 0 && d.renameLimit < maxSize {
				maxSize = d.renameLimit
			}

			matrix := make(similarityMatrix, 0, maxSize)

			for delIdx, del := range deleted {
				deletedName := changeName(del)

				for addIdx, add := range added {
					addedName := changeName(add)

					score := nameSimilarityScore(addedName, deletedName)
					matrix = append(matrix, similarityPair{added: addIdx, deleted: delIdx, score: score})

					if len(matrix) >= maxSize {
						break
					}
				}

				if len(matrix) >= maxSize {
					break
				}
			}

			sort.Stable(matrix)

			usedAdds := make(map[*Change]struct{})
			usedDeletes := make(map[*Change]struct{})
			for i := len(matrix) - 1; i >= 0; i-- {
				del := deleted[matrix[i].deleted]
				add := added[matrix[i].added]

				if add == nil || del == nil {
					// it was already matched
					continue
				}

				usedAdds[add] = struct{}{}
				usedDeletes[del] = struct{}{}
				d.modified = append(d.modified, &Change{From: del.From, To: add.To})
				added[matrix[i].added] = nil
				deleted[matrix[i].deleted] = nil
			}

			for _, c := range added {
				if _, ok := usedAdds[c]; !ok && c != nil {
					addedLeft = append(addedLeft, c)
				}
			}

			var newDeletes = make([]*Change, 0, len(deleted)-len(usedDeletes))
			for _, c := range deleted {
				if _, ok := usedDeletes[c]; !ok && c != nil {
					newDeletes = append(newDeletes, c)
				}
			}
			deletes[hash] = newDeletes
		} else {
			addedLeft = append(addedLeft, added...)
		}
	}

	d.added = addedLeft
	d.deleted = nil
	for _, dels := range deletes {
		d.deleted = append(d.deleted, dels...)
	}
}

// detectContentRenames detects renames based on the similarity of the content
// in the files by building a matrix of pairs between sources and destinations
// and matching by the highest score.
// see: https://github.com/eclipse/jgit/blob/master/org.eclipse.jgit/src/org/eclipse/jgit/diff/SimilarityRenameDetector.java
func (d *renameDetector) detectContentRenames() error {
	cnt := max(len(d.added), len(d.deleted))
	if d.renameLimit > 0 && cnt > d.renameLimit {
		return nil
	}

	srcs, dsts := d.deleted, d.added
	matrix, err := buildSimilarityMatrix(srcs, dsts, d.renameScore)
	if err != nil {
		return err
	}
	renames := make([]*Change, 0, min(len(matrix), len(dsts)))

	// Match rename pairs on a first come, first serve basis until
	// we have looked at everything that is above the minimum score.
	for i := len(matrix) - 1; i >= 0; i-- {
		pair := matrix[i]
		src := srcs[pair.deleted]
		dst := dsts[pair.added]

		if dst == nil || src == nil {
			// It was already matched before
			continue
		}

		renames = append(renames, &Change{From: src.From, To: dst.To})

		// Claim destination and source as matched
		dsts[pair.added] = nil
		srcs[pair.deleted] = nil
	}

	d.modified = append(d.modified, renames...)
	d.added = compactChanges(dsts)
	d.deleted = compactChanges(srcs)

	return nil
}

func (d *renameDetector) detect() (Changes, error) {
	if len(d.added) > 0 && len(d.deleted) > 0 {
		d.detectExactRenames()

		if !d.onlyExact {
			if err := d.detectContentRenames(); err != nil {
				return nil, err
			}
		}
	}

	result := make(Changes, 0, len(d.added)+len(d.deleted)+len(d.modified))
	result = append(result, d.added...)
	result = append(result, d.deleted...)
	result = append(result, d.modified...)

	sort.Stable(result)

	return result, nil
}

func bestNameMatch(change *Change, changes []*Change) *Change {
	var best *Change
	var bestScore int

	cname := changeName(change)

	for _, c := range changes {
		score := nameSimilarityScore(cname, changeName(c))
		if score > bestScore {
			bestScore = score
			best = c
		}
	}

	return best
}

func nameSimilarityScore(a, b string) int {
	aDirLen := strings.LastIndexByte(a, '/') + 1
	bDirLen := strings.LastIndexByte(b, '/') + 1

	dirMin := min(aDirLen, bDirLen)
	dirMax := max(aDirLen, bDirLen)

	var dirScoreLtr, dirScoreRtl int
	if dirMax == 0 {
		dirScoreLtr = 100
		dirScoreRtl = 100
	} else {
		var dirSim int

		for ; dirSim < dirMin; dirSim++ {
			if a[dirSim] != b[dirSim] {
				break
			}
		}

		dirScoreLtr = dirSim * 100 / dirMax

		if dirScoreLtr == 100 {
			dirScoreRtl = 100
		} else {
			for dirSim = 0; dirSim < dirMin; dirSim++ {
				if a[aDirLen-1-dirSim] != b[bDirLen-1-dirSim] {
					break
				}
			}
			dirScoreRtl = dirSim * 100 / dirMax
		}
	}

	fileMin := min(len(a)-aDirLen, len(b)-bDirLen)
	fileMax := max(len(a)-aDirLen, len(b)-bDirLen)

	fileSim := 0
	for ; fileSim < fileMin; fileSim++ {
		if a[len(a)-1-fileSim] != b[len(b)-1-fileSim] {
			break
		}
	}
	fileScore := fileSim * 100 / fileMax

	return (((dirScoreLtr + dirScoreRtl) * 25) + (fileScore * 50)) / 100
}

func changeName(c *Change) string {
	if c.To != empty {
		return c.To.Name
	}
	return c.From.Name
}

func changeHash(c *Change) plumbing.Hash {
	if c.To != empty {
		return c.To.TreeEntry.Hash
	}

	return c.From.TreeEntry.Hash
}

func changeMode(c *Change) filemode.FileMode {
	if c.To != empty {
		return c.To.TreeEntry.Mode
	}

	return c.From.TreeEntry.Mode
}

func sameMode(a, b *Change) bool {
	return changeMode(a) == changeMode(b)
}

func groupChangesByHash(changes []*Change) map[plumbing.Hash][]*Change {
	var result = make(map[plumbing.Hash][]*Change)
	for _, c := range changes {
		hash := changeHash(c)
		result[hash] = append(result[hash], c)
	}
	return result
}

type similarityMatrix []similarityPair

func (m similarityMatrix) Len() int      { return len(m) }
func (m similarityMatrix) Swap(i, j int) { m[i], m[j] = m[j], m[i] }
func (m similarityMatrix) Less(i, j int) bool {
	if m[i].score == m[j].score {
		if m[i].added == m[j].added {
			return m[i].deleted < m[j].deleted
		}
		return m[i].added < m[j].added
	}
	return m[i].score < m[j].score
}

type similarityPair struct {
	// index of the added file
	added int
	// index of the deleted file
	deleted int
	// similarity score
	score int
}

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}

func min(a, b int) int {
	if a < b {
		return a
	}
	return b
}

func buildSimilarityMatrix(srcs, dsts []*Change, renameScore int) (similarityMatrix, error) {
	// Allocate for the worst-case scenario where every pair has a score
	// that we need to consider. We might not need that many.
	matrix := make(similarityMatrix, 0, len(srcs)*len(dsts))
	srcSizes := make([]int64, len(srcs))
	dstSizes := make([]int64, len(dsts))
	dstTooLarge := make(map[int]bool)

	// Consider each pair of files, if the score is above the minimum
	// threshold we need to record that scoring in the matrix so we can
	// later find the best matches.
outerLoop:
	for srcIdx, src := range srcs {
		if changeMode(src) != filemode.Regular {
			continue
		}

		// Declare the from file and the similarity index here to be able to
		// reuse it inside the inner loop. The reason to not initialize them
		// here is so we can skip the initialization in case they happen to
		// not be needed later. They will be initialized inside the inner
		// loop if and only if they're needed and reused in subsequent passes.
		var from *File
		var s *similarityIndex
		var err error
		for dstIdx, dst := range dsts {
			if changeMode(dst) != filemode.Regular {
				continue
			}

			if dstTooLarge[dstIdx] {
				continue
			}

			var to *File
			srcSize := srcSizes[srcIdx]
			if srcSize == 0 {
				from, _, err = src.Files()
				if err != nil {
					return nil, err
				}
				srcSize = from.Size + 1
				srcSizes[srcIdx] = srcSize
			}

			dstSize := dstSizes[dstIdx]
			if dstSize == 0 {
				_, to, err = dst.Files()
				if err != nil {
					return nil, err
				}
				dstSize = to.Size + 1
				dstSizes[dstIdx] = dstSize
			}

			min, max := srcSize, dstSize
			if dstSize < srcSize {
				min = dstSize
				max = srcSize
			}

			if int(min*100/max) < renameScore {
				// File sizes are too different to be a match
				continue
			}

			if s == nil {
				s, err = fileSimilarityIndex(from)
				if err != nil {
					if err == errIndexFull {
						continue outerLoop
					}
					return nil, err
				}
			}

			if to == nil {
				_, to, err = dst.Files()
				if err != nil {
					return nil, err
				}
			}

			di, err := fileSimilarityIndex(to)
			if err != nil {
				if err == errIndexFull {
					dstTooLarge[dstIdx] = true
				}

				return nil, err
			}

			contentScore := s.score(di, 10000)
			// The name score returns a value between 0 and 100, so we need to
			// convert it to the same range as the content score.
			nameScore := nameSimilarityScore(src.From.Name, dst.To.Name) * 100
			score := (contentScore*99 + nameScore*1) / 10000

			if score < renameScore {
				continue
			}

			matrix = append(matrix, similarityPair{added: dstIdx, deleted: srcIdx, score: score})
		}
	}

	sort.Stable(matrix)

	return matrix, nil
}

func compactChanges(changes []*Change) []*Change {
	var result []*Change
	for _, c := range changes {
		if c != nil {
			result = append(result, c)
		}
	}
	return result
}

const (
	keyShift      = 32
	maxCountValue = (1 << keyShift) - 1
)

var errIndexFull = errors.New("index is full")

// similarityIndex is an index structure of lines/blocks in one file.
// This structure can be used to compute an approximation of the similarity
// between two files.
// To save space in memory, this index uses a space efficient encoding which
// will not exceed 1MiB per instance. The index starts out at a smaller size
// (closer to 2KiB), but may grow as more distinct blocks within the scanned
// file are discovered.
// see: https://github.com/eclipse/jgit/blob/master/org.eclipse.jgit/src/org/eclipse/jgit/diff/SimilarityIndex.java
type similarityIndex struct {
	hashed uint64
	// number of non-zero entries in hashes
	numHashes int
	growAt    int
	hashes    []keyCountPair
	hashBits  int
}

func fileSimilarityIndex(f *File) (*similarityIndex, error) {
	idx := newSimilarityIndex()
	if err := idx.hash(f); err != nil {
		return nil, err
	}

	sort.Stable(keyCountPairs(idx.hashes))

	return idx, nil
}

func newSimilarityIndex() *similarityIndex {
	return &similarityIndex{
		hashBits: 8,
		hashes:   make([]keyCountPair, 1<<8),
		growAt:   shouldGrowAt(8),
	}
}

func (i *similarityIndex) hash(f *File) error {
	isBin, err := f.IsBinary()
	if err != nil {
		return err
	}

	r, err := f.Reader()
	if err != nil {
		return err
	}

	defer ioutil.CheckClose(r, &err)

	return i.hashContent(r, f.Size, isBin)
}

func (i *similarityIndex) hashContent(r io.Reader, size int64, isBin bool) error {
	var buf = make([]byte, 4096)
	var ptr, cnt int
	remaining := size

	for 0 < remaining {
		hash := 5381
		var blockHashedCnt uint64

		// Hash one line or block, whatever happens first
		n := int64(0)
		for {
			if ptr == cnt {
				ptr = 0
				var err error
				cnt, err = io.ReadFull(r, buf)
				if err != nil && err != io.ErrUnexpectedEOF {
					return err
				}

				if cnt == 0 {
					return io.EOF
				}
			}
			n++
			c := buf[ptr] & 0xff
			ptr++

			// Ignore CR in CRLF sequence if it's text
			if !isBin && c == '\r' && ptr < cnt && buf[ptr] == '\n' {
				continue
			}
			blockHashedCnt++

			if c == '\n' {
				break
			}

			hash = (hash << 5) + hash + int(c)

			if n >= 64 || n >= remaining {
				break
			}
		}
		i.hashed += blockHashedCnt
		if err := i.add(hash, blockHashedCnt); err != nil {
			return err
		}
		remaining -= n
	}

	return nil
}

// score computes the similarity score between this index and another one.
// A region of a file is defined as a line in a text file or a fixed-size
// block in a binary file. To prepare an index, each region in the file is
// hashed; the values and counts of hashes are retained in a sorted table.
// Define the similarity fraction F as the count of matching regions between
// the two files divided between the maximum count of regions in either file.
// The similarity score is F multiplied by the maxScore constant, yielding a
// range [0, maxScore]. It is defined as maxScore for the degenerate case of
// two empty files.
// The similarity score is symmetrical; i.e. a.score(b) == b.score(a).
func (i *similarityIndex) score(other *similarityIndex, maxScore int) int {
	var maxHashed = i.hashed
	if maxHashed < other.hashed {
		maxHashed = other.hashed
	}
	if maxHashed == 0 {
		return maxScore
	}

	return int(i.common(other) * uint64(maxScore) / maxHashed)
}

func (i *similarityIndex) common(dst *similarityIndex) uint64 {
	srcIdx, dstIdx := 0, 0
	if i.numHashes == 0 || dst.numHashes == 0 {
		return 0
	}

	var common uint64
	srcKey, dstKey := i.hashes[srcIdx].key(), dst.hashes[dstIdx].key()

	for {
		if srcKey == dstKey {
			srcCnt, dstCnt := i.hashes[srcIdx].count(), dst.hashes[dstIdx].count()
			if srcCnt < dstCnt {
				common += srcCnt
			} else {
				common += dstCnt
			}

			srcIdx++
			if srcIdx == len(i.hashes) {
				break
			}
			srcKey = i.hashes[srcIdx].key()

			dstIdx++
			if dstIdx == len(dst.hashes) {
				break
			}
			dstKey = dst.hashes[dstIdx].key()
		} else if srcKey < dstKey {
			// Region of src that is not in dst
			srcIdx++
			if srcIdx == len(i.hashes) {
				break
			}
			srcKey = i.hashes[srcIdx].key()
		} else {
			// Region of dst that is not in src
			dstIdx++
			if dstIdx == len(dst.hashes) {
				break
			}
			dstKey = dst.hashes[dstIdx].key()
		}
	}

	return common
}

func (i *similarityIndex) add(key int, cnt uint64) error {
	key = int(uint32(key) * 0x9e370001 >> 1)

	j := i.slot(key)
	for {
		v := i.hashes[j]
		if v == 0 {
			// It's an empty slot, so we can store it here.
			if i.growAt <= i.numHashes {
				if err := i.grow(); err != nil {
					return err
				}
				j = i.slot(key)
				continue
			}

			var err error
			i.hashes[j], err = newKeyCountPair(key, cnt)
			if err != nil {
				return err
			}
			i.numHashes++
			return nil
		} else if v.key() == key {
			// It's the same key, so increment the counter.
			var err error
			i.hashes[j], err = newKeyCountPair(key, v.count()+cnt)
			if err != nil {
				return err
			}
			return nil
		} else if j+1 >= len(i.hashes) {
			j = 0
		} else {
			j++
		}
	}
}

type keyCountPair uint64

func newKeyCountPair(key int, cnt uint64) (keyCountPair, error) {
	if cnt > maxCountValue {
		return 0, errIndexFull
	}

	return keyCountPair((uint64(key) << keyShift) | cnt), nil
}

func (p keyCountPair) key() int {
	return int(p >> keyShift)
}

func (p keyCountPair) count() uint64 {
	return uint64(p) & maxCountValue
}

func (i *similarityIndex) slot(key int) int {
	// We use 31 - hashBits because the upper bit was already forced
	// to be 0 and we want the remaining high bits to be used as the
	// table slot.
	return int(uint32(key) >> uint(31-i.hashBits))
}

func shouldGrowAt(hashBits int) int {
	return (1 << uint(hashBits)) * (hashBits - 3) / hashBits
}

func (i *similarityIndex) grow() error {
	if i.hashBits == 30 {
		return errIndexFull
	}

	old := i.hashes

	i.hashBits++
	i.growAt = shouldGrowAt(i.hashBits)

	// TODO(erizocosmico): find a way to check if it will OOM and return
	// errIndexFull instead.
	i.hashes = make([]keyCountPair, 1<<uint(i.hashBits))

	for _, v := range old {
		if v != 0 {
			j := i.slot(v.key())
			for i.hashes[j] != 0 {
				j++
				if j >= len(i.hashes) {
					j = 0
				}
			}
			i.hashes[j] = v
		}
	}

	return nil
}

type keyCountPairs []keyCountPair

func (p keyCountPairs) Len() int           { return len(p) }
func (p keyCountPairs) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }
func (p keyCountPairs) Less(i, j int) bool { return p[i] < p[j] }
07070100000553000081A4000000000000000000000001645E367C000023F1000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/object/tag.go package object

import (
	"bufio"
	"bytes"
	"fmt"
	"io"
	stdioutil "io/ioutil"
	"strings"

	"github.com/ProtonMail/go-crypto/openpgp"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/storer"
	"github.com/go-git/go-git/v5/utils/ioutil"
)

// Tag represents an annotated tag object. It points to a single git object of
// any type, but tags typically are applied to commit or blob objects. It
// provides a reference that associates the target with a tag name. It also
// contains meta-information about the tag, including the tagger, tag date and
// message.
//
// Note that this is not used for lightweight tags.
//
// https://git-scm.com/book/en/v2/Git-Internals-Git-References#Tags
type Tag struct {
	// Hash of the tag.
	Hash plumbing.Hash
	// Name of the tag.
	Name string
	// Tagger is the one who created the tag.
	Tagger Signature
	// Message is an arbitrary text message.
	Message string
	// PGPSignature is the PGP signature of the tag.
	PGPSignature string
	// TargetType is the object type of the target.
	TargetType plumbing.ObjectType
	// Target is the hash of the target object.
	Target plumbing.Hash

	s storer.EncodedObjectStorer
}

// GetTag gets a tag from an object storer and decodes it.
func GetTag(s storer.EncodedObjectStorer, h plumbing.Hash) (*Tag, error) {
	o, err := s.EncodedObject(plumbing.TagObject, h)
	if err != nil {
		return nil, err
	}

	return DecodeTag(s, o)
}

// DecodeTag decodes an encoded object into a *Commit and associates it to the
// given object storer.
func DecodeTag(s storer.EncodedObjectStorer, o plumbing.EncodedObject) (*Tag, error) {
	t := &Tag{s: s}
	if err := t.Decode(o); err != nil {
		return nil, err
	}

	return t, nil
}

// ID returns the object ID of the tag, not the object that the tag references.
// The returned value will always match the current value of Tag.Hash.
//
// ID is present to fulfill the Object interface.
func (t *Tag) ID() plumbing.Hash {
	return t.Hash
}

// Type returns the type of object. It always returns plumbing.TagObject.
//
// Type is present to fulfill the Object interface.
func (t *Tag) Type() plumbing.ObjectType {
	return plumbing.TagObject
}

// Decode transforms a plumbing.EncodedObject into a Tag struct.
func (t *Tag) Decode(o plumbing.EncodedObject) (err error) {
	if o.Type() != plumbing.TagObject {
		return ErrUnsupportedObject
	}

	t.Hash = o.Hash()

	reader, err := o.Reader()
	if err != nil {
		return err
	}
	defer ioutil.CheckClose(reader, &err)

	r := bufPool.Get().(*bufio.Reader)
	defer bufPool.Put(r)
	r.Reset(reader)
	for {
		var line []byte
		line, err = r.ReadBytes('\n')
		if err != nil && err != io.EOF {
			return err
		}

		line = bytes.TrimSpace(line)
		if len(line) == 0 {
			break // Start of message
		}

		split := bytes.SplitN(line, []byte{' '}, 2)
		switch string(split[0]) {
		case "object":
			t.Target = plumbing.NewHash(string(split[1]))
		case "type":
			t.TargetType, err = plumbing.ParseObjectType(string(split[1]))
			if err != nil {
				return err
			}
		case "tag":
			t.Name = string(split[1])
		case "tagger":
			t.Tagger.Decode(split[1])
		}

		if err == io.EOF {
			return nil
		}
	}

	data, err := stdioutil.ReadAll(r)
	if err != nil {
		return err
	}

	var pgpsig bool
	// Check if data contains PGP signature.
	if bytes.Contains(data, []byte(beginpgp)) {
		// Split the lines at newline.
		messageAndSig := bytes.Split(data, []byte("\n"))

		for _, l := range messageAndSig {
			if pgpsig {
				if bytes.Contains(l, []byte(endpgp)) {
					t.PGPSignature += endpgp + "\n"
					break
				} else {
					t.PGPSignature += string(l) + "\n"
				}
				continue
			}

			// Check if it's the beginning of a PGP signature.
			if bytes.Contains(l, []byte(beginpgp)) {
				t.PGPSignature += beginpgp + "\n"
				pgpsig = true
				continue
			}

			t.Message += string(l) + "\n"
		}
	} else {
		t.Message = string(data)
	}

	return nil
}

// Encode transforms a Tag into a plumbing.EncodedObject.
func (t *Tag) Encode(o plumbing.EncodedObject) error {
	return t.encode(o, true)
}

// EncodeWithoutSignature export a Tag into a plumbing.EncodedObject without the signature (correspond to the payload of the PGP signature).
func (t *Tag) EncodeWithoutSignature(o plumbing.EncodedObject) error {
	return t.encode(o, false)
}

func (t *Tag) encode(o plumbing.EncodedObject, includeSig bool) (err error) {
	o.SetType(plumbing.TagObject)
	w, err := o.Writer()
	if err != nil {
		return err
	}
	defer ioutil.CheckClose(w, &err)

	if _, err = fmt.Fprintf(w,
		"object %s\ntype %s\ntag %s\ntagger ",
		t.Target.String(), t.TargetType.Bytes(), t.Name); err != nil {
		return err
	}

	if err = t.Tagger.Encode(w); err != nil {
		return err
	}

	if _, err = fmt.Fprint(w, "\n\n"); err != nil {
		return err
	}

	if _, err = fmt.Fprint(w, t.Message); err != nil {
		return err
	}

	// Note that this is highly sensitive to what it sent along in the message.
	// Message *always* needs to end with a newline, or else the message and the
	// signature will be concatenated into a corrupt object. Since this is a
	// lower-level method, we assume you know what you are doing and have already
	// done the needful on the message in the caller.
	if includeSig {
		if _, err = fmt.Fprint(w, t.PGPSignature); err != nil {
			return err
		}
	}

	return err
}

// Commit returns the commit pointed to by the tag. If the tag points to a
// different type of object ErrUnsupportedObject will be returned.
func (t *Tag) Commit() (*Commit, error) {
	if t.TargetType != plumbing.CommitObject {
		return nil, ErrUnsupportedObject
	}

	o, err := t.s.EncodedObject(plumbing.CommitObject, t.Target)
	if err != nil {
		return nil, err
	}

	return DecodeCommit(t.s, o)
}

// Tree returns the tree pointed to by the tag. If the tag points to a commit
// object the tree of that commit will be returned. If the tag does not point
// to a commit or tree object ErrUnsupportedObject will be returned.
func (t *Tag) Tree() (*Tree, error) {
	switch t.TargetType {
	case plumbing.CommitObject:
		c, err := t.Commit()
		if err != nil {
			return nil, err
		}

		return c.Tree()
	case plumbing.TreeObject:
		return GetTree(t.s, t.Target)
	default:
		return nil, ErrUnsupportedObject
	}
}

// Blob returns the blob pointed to by the tag. If the tag points to a
// different type of object ErrUnsupportedObject will be returned.
func (t *Tag) Blob() (*Blob, error) {
	if t.TargetType != plumbing.BlobObject {
		return nil, ErrUnsupportedObject
	}

	return GetBlob(t.s, t.Target)
}

// Object returns the object pointed to by the tag.
func (t *Tag) Object() (Object, error) {
	o, err := t.s.EncodedObject(t.TargetType, t.Target)
	if err != nil {
		return nil, err
	}

	return DecodeObject(t.s, o)
}

// String returns the meta information contained in the tag as a formatted
// string.
func (t *Tag) String() string {
	obj, _ := t.Object()

	return fmt.Sprintf(
		"%s %s\nTagger: %s\nDate:   %s\n\n%s\n%s",
		plumbing.TagObject, t.Name, t.Tagger.String(), t.Tagger.When.Format(DateFormat),
		t.Message, objectAsString(obj),
	)
}

// Verify performs PGP verification of the tag with a provided armored
// keyring and returns openpgp.Entity associated with verifying key on success.
func (t *Tag) Verify(armoredKeyRing string) (*openpgp.Entity, error) {
	keyRingReader := strings.NewReader(armoredKeyRing)
	keyring, err := openpgp.ReadArmoredKeyRing(keyRingReader)
	if err != nil {
		return nil, err
	}

	// Extract signature.
	signature := strings.NewReader(t.PGPSignature)

	encoded := &plumbing.MemoryObject{}
	// Encode tag components, excluding signature and get a reader object.
	if err := t.EncodeWithoutSignature(encoded); err != nil {
		return nil, err
	}
	er, err := encoded.Reader()
	if err != nil {
		return nil, err
	}

	return openpgp.CheckArmoredDetachedSignature(keyring, er, signature, nil)
}

// TagIter provides an iterator for a set of tags.
type TagIter struct {
	storer.EncodedObjectIter
	s storer.EncodedObjectStorer
}

// NewTagIter takes a storer.EncodedObjectStorer and a
// storer.EncodedObjectIter and returns a *TagIter that iterates over all
// tags contained in the storer.EncodedObjectIter.
//
// Any non-tag object returned by the storer.EncodedObjectIter is skipped.
func NewTagIter(s storer.EncodedObjectStorer, iter storer.EncodedObjectIter) *TagIter {
	return &TagIter{iter, s}
}

// Next moves the iterator to the next tag and returns a pointer to it. If
// there are no more tags, it returns io.EOF.
func (iter *TagIter) Next() (*Tag, error) {
	obj, err := iter.EncodedObjectIter.Next()
	if err != nil {
		return nil, err
	}

	return DecodeTag(iter.s, obj)
}

// ForEach call the cb function for each tag contained on this iter until
// an error happens or the end of the iter is reached. If ErrStop is sent
// the iteration is stop but no error is returned. The iterator is closed.
func (iter *TagIter) ForEach(cb func(*Tag) error) error {
	return iter.EncodedObjectIter.ForEach(func(obj plumbing.EncodedObject) error {
		t, err := DecodeTag(iter.s, obj)
		if err != nil {
			return err
		}

		return cb(t)
	})
}

func objectAsString(obj Object) string {
	switch o := obj.(type) {
	case *Commit:
		return o.String()
	default:
		return ""
	}
}
   07070100000554000081A4000000000000000000000001645E367C00002F9C000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/object/tree.go    package object

import (
	"bufio"
	"context"
	"errors"
	"fmt"
	"io"
	"path"
	"path/filepath"
	"strings"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/filemode"
	"github.com/go-git/go-git/v5/plumbing/storer"
	"github.com/go-git/go-git/v5/utils/ioutil"
)

const (
	maxTreeDepth      = 1024
	startingStackSize = 8
)

// New errors defined by this package.
var (
	ErrMaxTreeDepth      = errors.New("maximum tree depth exceeded")
	ErrFileNotFound      = errors.New("file not found")
	ErrDirectoryNotFound = errors.New("directory not found")
	ErrEntryNotFound     = errors.New("entry not found")
)

// Tree is basically like a directory - it references a bunch of other trees
// and/or blobs (i.e. files and sub-directories)
type Tree struct {
	Entries []TreeEntry
	Hash    plumbing.Hash

	s storer.EncodedObjectStorer
	m map[string]*TreeEntry
	t map[string]*Tree // tree path cache
}

// GetTree gets a tree from an object storer and decodes it.
func GetTree(s storer.EncodedObjectStorer, h plumbing.Hash) (*Tree, error) {
	o, err := s.EncodedObject(plumbing.TreeObject, h)
	if err != nil {
		return nil, err
	}

	return DecodeTree(s, o)
}

// DecodeTree decodes an encoded object into a *Tree and associates it to the
// given object storer.
func DecodeTree(s storer.EncodedObjectStorer, o plumbing.EncodedObject) (*Tree, error) {
	t := &Tree{s: s}
	if err := t.Decode(o); err != nil {
		return nil, err
	}

	return t, nil
}

// TreeEntry represents a file
type TreeEntry struct {
	Name string
	Mode filemode.FileMode
	Hash plumbing.Hash
}

// File returns the hash of the file identified by the `path` argument.
// The path is interpreted as relative to the tree receiver.
func (t *Tree) File(path string) (*File, error) {
	e, err := t.FindEntry(path)
	if err != nil {
		return nil, ErrFileNotFound
	}

	blob, err := GetBlob(t.s, e.Hash)
	if err != nil {
		if err == plumbing.ErrObjectNotFound {
			return nil, ErrFileNotFound
		}
		return nil, err
	}

	return NewFile(path, e.Mode, blob), nil
}

// Size returns the plaintext size of an object, without reading it
// into memory.
func (t *Tree) Size(path string) (int64, error) {
	e, err := t.FindEntry(path)
	if err != nil {
		return 0, ErrEntryNotFound
	}

	return t.s.EncodedObjectSize(e.Hash)
}

// Tree returns the tree identified by the `path` argument.
// The path is interpreted as relative to the tree receiver.
func (t *Tree) Tree(path string) (*Tree, error) {
	e, err := t.FindEntry(path)
	if err != nil {
		return nil, ErrDirectoryNotFound
	}

	tree, err := GetTree(t.s, e.Hash)
	if err == plumbing.ErrObjectNotFound {
		return nil, ErrDirectoryNotFound
	}

	return tree, err
}

// TreeEntryFile returns the *File for a given *TreeEntry.
func (t *Tree) TreeEntryFile(e *TreeEntry) (*File, error) {
	blob, err := GetBlob(t.s, e.Hash)
	if err != nil {
		return nil, err
	}

	return NewFile(e.Name, e.Mode, blob), nil
}

// FindEntry search a TreeEntry in this tree or any subtree.
func (t *Tree) FindEntry(path string) (*TreeEntry, error) {
	if t.t == nil {
		t.t = make(map[string]*Tree)
	}

	pathParts := strings.Split(path, "/")
	startingTree := t
	pathCurrent := ""

	// search for the longest path in the tree path cache
	for i := len(pathParts) - 1; i > 1; i-- {
		path := filepath.Join(pathParts[:i]...)

		tree, ok := t.t[path]
		if ok {
			startingTree = tree
			pathParts = pathParts[i:]
			pathCurrent = path

			break
		}
	}

	var tree *Tree
	var err error
	for tree = startingTree; len(pathParts) > 1; pathParts = pathParts[1:] {
		if tree, err = tree.dir(pathParts[0]); err != nil {
			return nil, err
		}

		pathCurrent = filepath.Join(pathCurrent, pathParts[0])
		t.t[pathCurrent] = tree
	}

	return tree.entry(pathParts[0])
}

func (t *Tree) dir(baseName string) (*Tree, error) {
	entry, err := t.entry(baseName)
	if err != nil {
		return nil, ErrDirectoryNotFound
	}

	obj, err := t.s.EncodedObject(plumbing.TreeObject, entry.Hash)
	if err != nil {
		return nil, err
	}

	tree := &Tree{s: t.s}
	err = tree.Decode(obj)

	return tree, err
}

func (t *Tree) entry(baseName string) (*TreeEntry, error) {
	if t.m == nil {
		t.buildMap()
	}

	entry, ok := t.m[baseName]
	if !ok {
		return nil, ErrEntryNotFound
	}

	return entry, nil
}

// Files returns a FileIter allowing to iterate over the Tree
func (t *Tree) Files() *FileIter {
	return NewFileIter(t.s, t)
}

// ID returns the object ID of the tree. The returned value will always match
// the current value of Tree.Hash.
//
// ID is present to fulfill the Object interface.
func (t *Tree) ID() plumbing.Hash {
	return t.Hash
}

// Type returns the type of object. It always returns plumbing.TreeObject.
func (t *Tree) Type() plumbing.ObjectType {
	return plumbing.TreeObject
}

// Decode transform an plumbing.EncodedObject into a Tree struct
func (t *Tree) Decode(o plumbing.EncodedObject) (err error) {
	if o.Type() != plumbing.TreeObject {
		return ErrUnsupportedObject
	}

	t.Hash = o.Hash()
	if o.Size() == 0 {
		return nil
	}

	t.Entries = nil
	t.m = nil

	reader, err := o.Reader()
	if err != nil {
		return err
	}
	defer ioutil.CheckClose(reader, &err)

	r := bufPool.Get().(*bufio.Reader)
	defer bufPool.Put(r)
	r.Reset(reader)
	for {
		str, err := r.ReadString(' ')
		if err != nil {
			if err == io.EOF {
				break
			}

			return err
		}
		str = str[:len(str)-1] // strip last byte (' ')

		mode, err := filemode.New(str)
		if err != nil {
			return err
		}

		name, err := r.ReadString(0)
		if err != nil && err != io.EOF {
			return err
		}

		var hash plumbing.Hash
		if _, err = io.ReadFull(r, hash[:]); err != nil {
			return err
		}

		baseName := name[:len(name)-1]
		t.Entries = append(t.Entries, TreeEntry{
			Hash: hash,
			Mode: mode,
			Name: baseName,
		})
	}

	return nil
}

// Encode transforms a Tree into a plumbing.EncodedObject.
func (t *Tree) Encode(o plumbing.EncodedObject) (err error) {
	o.SetType(plumbing.TreeObject)
	w, err := o.Writer()
	if err != nil {
		return err
	}

	defer ioutil.CheckClose(w, &err)
	for _, entry := range t.Entries {
		if _, err = fmt.Fprintf(w, "%o %s", entry.Mode, entry.Name); err != nil {
			return err
		}

		if _, err = w.Write([]byte{0x00}); err != nil {
			return err
		}

		if _, err = w.Write(entry.Hash[:]); err != nil {
			return err
		}
	}

	return err
}

func (t *Tree) buildMap() {
	t.m = make(map[string]*TreeEntry)
	for i := 0; i < len(t.Entries); i++ {
		t.m[t.Entries[i].Name] = &t.Entries[i]
	}
}

// Diff returns a list of changes between this tree and the provided one
func (t *Tree) Diff(to *Tree) (Changes, error) {
	return t.DiffContext(context.Background(), to)
}

// DiffContext returns a list of changes between this tree and the provided one
// Error will be returned if context expires. Provided context must be non nil.
//
// NOTE: Since version 5.1.0 the renames are correctly handled, the settings
// used are the recommended options DefaultDiffTreeOptions.
func (t *Tree) DiffContext(ctx context.Context, to *Tree) (Changes, error) {
	return DiffTreeWithOptions(ctx, t, to, DefaultDiffTreeOptions)
}

// Patch returns a slice of Patch objects with all the changes between trees
// in chunks. This representation can be used to create several diff outputs.
func (t *Tree) Patch(to *Tree) (*Patch, error) {
	return t.PatchContext(context.Background(), to)
}

// PatchContext returns a slice of Patch objects with all the changes between
// trees in chunks. This representation can be used to create several diff
// outputs. If context expires, an error will be returned. Provided context must
// be non-nil.
//
// NOTE: Since version 5.1.0 the renames are correctly handled, the settings
// used are the recommended options DefaultDiffTreeOptions.
func (t *Tree) PatchContext(ctx context.Context, to *Tree) (*Patch, error) {
	changes, err := t.DiffContext(ctx, to)
	if err != nil {
		return nil, err
	}

	return changes.PatchContext(ctx)
}

// treeEntryIter facilitates iterating through the TreeEntry objects in a Tree.
type treeEntryIter struct {
	t   *Tree
	pos int
}

func (iter *treeEntryIter) Next() (TreeEntry, error) {
	if iter.pos >= len(iter.t.Entries) {
		return TreeEntry{}, io.EOF
	}
	iter.pos++
	return iter.t.Entries[iter.pos-1], nil
}

// TreeWalker provides a means of walking through all of the entries in a Tree.
type TreeWalker struct {
	stack     []*treeEntryIter
	base      string
	recursive bool
	seen      map[plumbing.Hash]bool

	s storer.EncodedObjectStorer
	t *Tree
}

// NewTreeWalker returns a new TreeWalker for the given tree.
//
// It is the caller's responsibility to call Close() when finished with the
// tree walker.
func NewTreeWalker(t *Tree, recursive bool, seen map[plumbing.Hash]bool) *TreeWalker {
	stack := make([]*treeEntryIter, 0, startingStackSize)
	stack = append(stack, &treeEntryIter{t, 0})

	return &TreeWalker{
		stack:     stack,
		recursive: recursive,
		seen:      seen,

		s: t.s,
		t: t,
	}
}

// Next returns the next object from the tree. Objects are returned in order
// and subtrees are included. After the last object has been returned further
// calls to Next() will return io.EOF.
//
// In the current implementation any objects which cannot be found in the
// underlying repository will be skipped automatically. It is possible that this
// may change in future versions.
func (w *TreeWalker) Next() (name string, entry TreeEntry, err error) {
	var obj *Tree
	for {
		current := len(w.stack) - 1
		if current < 0 {
			// Nothing left on the stack so we're finished
			err = io.EOF
			return
		}

		if current > maxTreeDepth {
			// We're probably following bad data or some self-referencing tree
			err = ErrMaxTreeDepth
			return
		}

		entry, err = w.stack[current].Next()
		if err == io.EOF {
			// Finished with the current tree, move back up to the parent
			w.stack = w.stack[:current]
			w.base, _ = path.Split(w.base)
			w.base = strings.TrimSuffix(w.base, "/")
			continue
		}

		if err != nil {
			return
		}

		if w.seen[entry.Hash] {
			continue
		}

		if entry.Mode == filemode.Dir {
			obj, err = GetTree(w.s, entry.Hash)
		}

		name = simpleJoin(w.base, entry.Name)

		if err != nil {
			err = io.EOF
			return
		}

		break
	}

	if !w.recursive {
		return
	}

	if obj != nil {
		w.stack = append(w.stack, &treeEntryIter{obj, 0})
		w.base = simpleJoin(w.base, entry.Name)
	}

	return
}

// Tree returns the tree that the tree walker most recently operated on.
func (w *TreeWalker) Tree() *Tree {
	current := len(w.stack) - 1
	if w.stack[current].pos == 0 {
		current--
	}

	if current < 0 {
		return nil
	}

	return w.stack[current].t
}

// Close releases any resources used by the TreeWalker.
func (w *TreeWalker) Close() {
	w.stack = nil
}

// TreeIter provides an iterator for a set of trees.
type TreeIter struct {
	storer.EncodedObjectIter
	s storer.EncodedObjectStorer
}

// NewTreeIter takes a storer.EncodedObjectStorer and a
// storer.EncodedObjectIter and returns a *TreeIter that iterates over all
// tree contained in the storer.EncodedObjectIter.
//
// Any non-tree object returned by the storer.EncodedObjectIter is skipped.
func NewTreeIter(s storer.EncodedObjectStorer, iter storer.EncodedObjectIter) *TreeIter {
	return &TreeIter{iter, s}
}

// Next moves the iterator to the next tree and returns a pointer to it. If
// there are no more trees, it returns io.EOF.
func (iter *TreeIter) Next() (*Tree, error) {
	for {
		obj, err := iter.EncodedObjectIter.Next()
		if err != nil {
			return nil, err
		}

		if obj.Type() != plumbing.TreeObject {
			continue
		}

		return DecodeTree(iter.s, obj)
	}
}

// ForEach call the cb function for each tree contained on this iter until
// an error happens or the end of the iter is reached. If ErrStop is sent
// the iteration is stop but no error is returned. The iterator is closed.
func (iter *TreeIter) ForEach(cb func(*Tree) error) error {
	return iter.EncodedObjectIter.ForEach(func(obj plumbing.EncodedObject) error {
		if obj.Type() != plumbing.TreeObject {
			return nil
		}

		t, err := DecodeTree(iter.s, obj)
		if err != nil {
			return err
		}

		return cb(t)
	})
}

func simpleJoin(parent, child string) string {
	if len(parent) > 0 {
		return parent + "/" + child
	}
	return child
}
07070100000555000081A4000000000000000000000001645E367C00000CE7000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/object/treenoder.go   package object

import (
	"io"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/filemode"
	"github.com/go-git/go-git/v5/utils/merkletrie/noder"
)

// A treenoder is a helper type that wraps git trees into merkletrie
// noders.
//
// As a merkletrie noder doesn't understand the concept of modes (e.g.
// file permissions), the treenoder includes the mode of the git tree in
// the hash, so changes in the modes will be detected as modifications
// to the file contents by the merkletrie difftree algorithm.  This is
// consistent with how the "git diff-tree" command works.
type treeNoder struct {
	parent   *Tree  // the root node is its own parent
	name     string // empty string for the root node
	mode     filemode.FileMode
	hash     plumbing.Hash
	children []noder.Noder // memoized
}

// NewTreeRootNode returns the root node of a Tree
func NewTreeRootNode(t *Tree) noder.Noder {
	if t == nil {
		return &treeNoder{}
	}

	return &treeNoder{
		parent: t,
		name:   "",
		mode:   filemode.Dir,
		hash:   t.Hash,
	}
}

func (t *treeNoder) isRoot() bool {
	return t.name == ""
}

func (t *treeNoder) String() string {
	return "treeNoder <" + t.name + ">"
}

func (t *treeNoder) Hash() []byte {
	if t.mode == filemode.Deprecated {
		return append(t.hash[:], filemode.Regular.Bytes()...)
	}
	return append(t.hash[:], t.mode.Bytes()...)
}

func (t *treeNoder) Name() string {
	return t.name
}

func (t *treeNoder) IsDir() bool {
	return t.mode == filemode.Dir
}

// Children will return the children of a treenoder as treenoders,
// building them from the children of the wrapped git tree.
func (t *treeNoder) Children() ([]noder.Noder, error) {
	if t.mode != filemode.Dir {
		return noder.NoChildren, nil
	}

	// children are memoized for efficiency
	if t.children != nil {
		return t.children, nil
	}

	// the parent of the returned children will be ourself as a tree if
	// we are a not the root treenoder.  The root is special as it
	// is is own parent.
	parent := t.parent
	if !t.isRoot() {
		var err error
		if parent, err = t.parent.Tree(t.name); err != nil {
			return nil, err
		}
	}

	return transformChildren(parent)
}

// Returns the children of a tree as treenoders.
// Efficiency is key here.
func transformChildren(t *Tree) ([]noder.Noder, error) {
	var err error
	var e TreeEntry

	// there will be more tree entries than children in the tree,
	// due to submodules and empty directories, but I think it is still
	// worth it to pre-allocate the whole array now, even if sometimes
	// is bigger than needed.
	ret := make([]noder.Noder, 0, len(t.Entries))

	walker := NewTreeWalker(t, false, nil) // don't recurse
	// don't defer walker.Close() for efficiency reasons.
	for {
		_, e, err = walker.Next()
		if err == io.EOF {
			break
		}
		if err != nil {
			walker.Close()
			return nil, err
		}

		ret = append(ret, &treeNoder{
			parent: t,
			name:   e.Name,
			mode:   e.Mode,
			hash:   e.Hash,
		})
	}
	walker.Close()

	return ret, nil
}

// len(t.tree.Entries) != the number of elements walked by treewalker
// for some reason because of empty directories, submodules, etc, so we
// have to walk here.
func (t *treeNoder) NumChildren() (int, error) {
	children, err := t.Children()
	if err != nil {
		return 0, err
	}

	return len(children), nil
}
 07070100000556000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/protocol  07070100000557000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp    07070100000558000081A4000000000000000000000001645E367C000015AD000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/advrefs.go package packp

import (
	"fmt"
	"sort"
	"strings"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/protocol/packp/capability"
	"github.com/go-git/go-git/v5/plumbing/storer"
	"github.com/go-git/go-git/v5/storage/memory"
)

// AdvRefs values represent the information transmitted on an
// advertised-refs message.  Values from this type are not zero-value
// safe, use the New function instead.
type AdvRefs struct {
	// Prefix stores prefix payloads.
	//
	// When using this message over (smart) HTTP, you have to add a pktline
	// before the whole thing with the following payload:
	//
	// '# service=$servicename" LF
	//
	// Moreover, some (all) git HTTP smart servers will send a flush-pkt
	// just after the first pkt-line.
	//
	// To accommodate both situations, the Prefix field allow you to store
	// any data you want to send before the actual pktlines.  It will also
	// be filled up with whatever is found on the line.
	Prefix [][]byte
	// Head stores the resolved HEAD reference if present.
	// This can be present with git-upload-pack, not with git-receive-pack.
	Head *plumbing.Hash
	// Capabilities are the capabilities.
	Capabilities *capability.List
	// References are the hash references.
	References map[string]plumbing.Hash
	// Peeled are the peeled hash references.
	Peeled map[string]plumbing.Hash
	// Shallows are the shallow object ids.
	Shallows []plumbing.Hash
}

// NewAdvRefs returns a pointer to a new AdvRefs value, ready to be used.
func NewAdvRefs() *AdvRefs {
	return &AdvRefs{
		Prefix:       [][]byte{},
		Capabilities: capability.NewList(),
		References:   make(map[string]plumbing.Hash),
		Peeled:       make(map[string]plumbing.Hash),
		Shallows:     []plumbing.Hash{},
	}
}

func (a *AdvRefs) AddReference(r *plumbing.Reference) error {
	switch r.Type() {
	case plumbing.SymbolicReference:
		v := fmt.Sprintf("%s:%s", r.Name().String(), r.Target().String())
		a.Capabilities.Add(capability.SymRef, v)
	case plumbing.HashReference:
		a.References[r.Name().String()] = r.Hash()
	default:
		return plumbing.ErrInvalidType
	}

	return nil
}

func (a *AdvRefs) AllReferences() (memory.ReferenceStorage, error) {
	s := memory.ReferenceStorage{}
	if err := a.addRefs(s); err != nil {
		return s, plumbing.NewUnexpectedError(err)
	}

	return s, nil
}

func (a *AdvRefs) addRefs(s storer.ReferenceStorer) error {
	for name, hash := range a.References {
		ref := plumbing.NewReferenceFromStrings(name, hash.String())
		if err := s.SetReference(ref); err != nil {
			return err
		}
	}

	if a.supportSymrefs() {
		return a.addSymbolicRefs(s)
	}

	return a.resolveHead(s)
}

// If the server does not support symrefs capability,
// we need to guess the reference where HEAD is pointing to.
//
// Git versions prior to 1.8.4.3 has an special procedure to get
// the reference where is pointing to HEAD:
// - Check if a reference called master exists. If exists and it
//	 has the same hash as HEAD hash, we can say that HEAD is pointing to master
// - If master does not exists or does not have the same hash as HEAD,
//   order references and check in that order if that reference has the same
//   hash than HEAD. If yes, set HEAD pointing to that branch hash
// - If no reference is found, throw an error
func (a *AdvRefs) resolveHead(s storer.ReferenceStorer) error {
	if a.Head == nil {
		return nil
	}

	ref, err := s.Reference(plumbing.Master)

	// check first if HEAD is pointing to master
	if err == nil {
		ok, err := a.createHeadIfCorrectReference(ref, s)
		if err != nil {
			return err
		}

		if ok {
			return nil
		}
	}

	if err != nil && err != plumbing.ErrReferenceNotFound {
		return err
	}

	// From here we are trying to guess the branch that HEAD is pointing
	refIter, err := s.IterReferences()
	if err != nil {
		return err
	}

	var refNames []string
	err = refIter.ForEach(func(r *plumbing.Reference) error {
		refNames = append(refNames, string(r.Name()))
		return nil
	})
	if err != nil {
		return err
	}

	sort.Strings(refNames)

	var headSet bool
	for _, refName := range refNames {
		ref, err := s.Reference(plumbing.ReferenceName(refName))
		if err != nil {
			return err
		}
		ok, err := a.createHeadIfCorrectReference(ref, s)
		if err != nil {
			return err
		}
		if ok {
			headSet = true
			break
		}
	}

	if !headSet {
		return plumbing.ErrReferenceNotFound
	}

	return nil
}

func (a *AdvRefs) createHeadIfCorrectReference(
	reference *plumbing.Reference,
	s storer.ReferenceStorer) (bool, error) {
	if reference.Hash() == *a.Head {
		headRef := plumbing.NewSymbolicReference(plumbing.HEAD, reference.Name())
		if err := s.SetReference(headRef); err != nil {
			return false, err
		}

		return true, nil
	}

	return false, nil
}

func (a *AdvRefs) addSymbolicRefs(s storer.ReferenceStorer) error {
	for _, symref := range a.Capabilities.Get(capability.SymRef) {
		chunks := strings.Split(symref, ":")
		if len(chunks) != 2 {
			err := fmt.Errorf("bad number of `:` in symref value (%q)", symref)
			return plumbing.NewUnexpectedError(err)
		}
		name := plumbing.ReferenceName(chunks[0])
		target := plumbing.ReferenceName(chunks[1])
		ref := plumbing.NewSymbolicReference(name, target)
		if err := s.SetReference(ref); err != nil {
			return nil
		}
	}

	return nil
}

func (a *AdvRefs) supportSymrefs() bool {
	return a.Capabilities.Supports(capability.SymRef)
}

// IsEmpty returns true if doesn't contain any reference.
func (a *AdvRefs) IsEmpty() bool {
	return a.Head == nil &&
		len(a.References) == 0 &&
		len(a.Peeled) == 0 &&
		len(a.Shallows) == 0
}
   07070100000559000081A4000000000000000000000001645E367C0000197A000000000000000000000000000000000000006100000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/advrefs_decode.go  package packp

import (
	"bytes"
	"encoding/hex"
	"errors"
	"fmt"
	"io"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/format/pktline"
)

// Decode reads the next advertised-refs message form its input and
// stores it in the AdvRefs.
func (a *AdvRefs) Decode(r io.Reader) error {
	d := newAdvRefsDecoder(r)
	return d.Decode(a)
}

type advRefsDecoder struct {
	s     *pktline.Scanner // a pkt-line scanner from the input stream
	line  []byte           // current pkt-line contents, use parser.nextLine() to make it advance
	nLine int              // current pkt-line number for debugging, begins at 1
	hash  plumbing.Hash    // last hash read
	err   error            // sticky error, use the parser.error() method to fill this out
	data  *AdvRefs         // parsed data is stored here
}

var (
	// ErrEmptyAdvRefs is returned by Decode if it gets an empty advertised
	// references message.
	ErrEmptyAdvRefs = errors.New("empty advertised-ref message")
	// ErrEmptyInput is returned by Decode if the input is empty.
	ErrEmptyInput = errors.New("empty input")
)

func newAdvRefsDecoder(r io.Reader) *advRefsDecoder {
	return &advRefsDecoder{
		s: pktline.NewScanner(r),
	}
}

func (d *advRefsDecoder) Decode(v *AdvRefs) error {
	d.data = v

	for state := decodePrefix; state != nil; {
		state = state(d)
	}

	return d.err
}

type decoderStateFn func(*advRefsDecoder) decoderStateFn

// fills out the parser sticky error
func (d *advRefsDecoder) error(format string, a ...interface{}) {
	msg := fmt.Sprintf(
		"pkt-line %d: %s", d.nLine,
		fmt.Sprintf(format, a...),
	)

	d.err = NewErrUnexpectedData(msg, d.line)
}

// Reads a new pkt-line from the scanner, makes its payload available as
// p.line and increments p.nLine.  A successful invocation returns true,
// otherwise, false is returned and the sticky error is filled out
// accordingly.  Trims eols at the end of the payloads.
func (d *advRefsDecoder) nextLine() bool {
	d.nLine++

	if !d.s.Scan() {
		if d.err = d.s.Err(); d.err != nil {
			return false
		}

		if d.nLine == 1 {
			d.err = ErrEmptyInput
			return false
		}

		d.error("EOF")
		return false
	}

	d.line = d.s.Bytes()
	d.line = bytes.TrimSuffix(d.line, eol)

	return true
}

// The HTTP smart prefix is often followed by a flush-pkt.
func decodePrefix(d *advRefsDecoder) decoderStateFn {
	if ok := d.nextLine(); !ok {
		return nil
	}

	if !isPrefix(d.line) {
		return decodeFirstHash
	}

	tmp := make([]byte, len(d.line))
	copy(tmp, d.line)
	d.data.Prefix = append(d.data.Prefix, tmp)
	if ok := d.nextLine(); !ok {
		return nil
	}

	if !isFlush(d.line) {
		return decodeFirstHash
	}

	d.data.Prefix = append(d.data.Prefix, pktline.Flush)
	if ok := d.nextLine(); !ok {
		return nil
	}

	return decodeFirstHash
}

func isPrefix(payload []byte) bool {
	return len(payload) > 0 && payload[0] == '#'
}

// If the first hash is zero, then a no-refs is coming. Otherwise, a
// list-of-refs is coming, and the hash will be followed by the first
// advertised ref.
func decodeFirstHash(p *advRefsDecoder) decoderStateFn {
	// If the repository is empty, we receive a flush here (HTTP).
	if isFlush(p.line) {
		p.err = ErrEmptyAdvRefs
		return nil
	}

	if len(p.line) < hashSize {
		p.error("cannot read hash, pkt-line too short")
		return nil
	}

	if _, err := hex.Decode(p.hash[:], p.line[:hashSize]); err != nil {
		p.error("invalid hash text: %s", err)
		return nil
	}

	p.line = p.line[hashSize:]

	if p.hash.IsZero() {
		return decodeSkipNoRefs
	}

	return decodeFirstRef
}

// Skips SP "capabilities^{}" NUL
func decodeSkipNoRefs(p *advRefsDecoder) decoderStateFn {
	if len(p.line) < len(noHeadMark) {
		p.error("too short zero-id ref")
		return nil
	}

	if !bytes.HasPrefix(p.line, noHeadMark) {
		p.error("malformed zero-id ref")
		return nil
	}

	p.line = p.line[len(noHeadMark):]

	return decodeCaps
}

// decode the refname, expects SP refname NULL
func decodeFirstRef(l *advRefsDecoder) decoderStateFn {
	if len(l.line) < 3 {
		l.error("line too short after hash")
		return nil
	}

	if !bytes.HasPrefix(l.line, sp) {
		l.error("no space after hash")
		return nil
	}
	l.line = l.line[1:]

	chunks := bytes.SplitN(l.line, null, 2)
	if len(chunks) < 2 {
		l.error("NULL not found")
		return nil
	}
	ref := chunks[0]
	l.line = chunks[1]

	if bytes.Equal(ref, []byte(head)) {
		l.data.Head = &l.hash
	} else {
		l.data.References[string(ref)] = l.hash
	}

	return decodeCaps
}

func decodeCaps(p *advRefsDecoder) decoderStateFn {
	if err := p.data.Capabilities.Decode(p.line); err != nil {
		p.error("invalid capabilities: %s", err)
		return nil
	}

	return decodeOtherRefs
}

// The refs are either tips (obj-id SP refname) or a peeled (obj-id SP refname^{}).
// If there are no refs, then there might be a shallow or flush-ptk.
func decodeOtherRefs(p *advRefsDecoder) decoderStateFn {
	if ok := p.nextLine(); !ok {
		return nil
	}

	if bytes.HasPrefix(p.line, shallow) {
		return decodeShallow
	}

	if len(p.line) == 0 {
		return nil
	}

	saveTo := p.data.References
	if bytes.HasSuffix(p.line, peeled) {
		p.line = bytes.TrimSuffix(p.line, peeled)
		saveTo = p.data.Peeled
	}

	ref, hash, err := readRef(p.line)
	if err != nil {
		p.error("%s", err)
		return nil
	}
	saveTo[ref] = hash

	return decodeOtherRefs
}

// Reads a ref-name
func readRef(data []byte) (string, plumbing.Hash, error) {
	chunks := bytes.Split(data, sp)
	switch {
	case len(chunks) == 1:
		return "", plumbing.ZeroHash, fmt.Errorf("malformed ref data: no space was found")
	case len(chunks) > 2:
		return "", plumbing.ZeroHash, fmt.Errorf("malformed ref data: more than one space found")
	default:
		return string(chunks[1]), plumbing.NewHash(string(chunks[0])), nil
	}
}

// Keeps reading shallows until a flush-pkt is found
func decodeShallow(p *advRefsDecoder) decoderStateFn {
	if !bytes.HasPrefix(p.line, shallow) {
		p.error("malformed shallow prefix, found %q... instead", p.line[:len(shallow)])
		return nil
	}
	p.line = bytes.TrimPrefix(p.line, shallow)

	if len(p.line) != hashSize {
		p.error(fmt.Sprintf(
			"malformed shallow hash: wrong length, expected 40 bytes, read %d bytes",
			len(p.line)))
		return nil
	}

	text := p.line[:hashSize]
	var h plumbing.Hash
	if _, err := hex.Decode(h[:], text); err != nil {
		p.error("invalid hash text: %s", err)
		return nil
	}

	p.data.Shallows = append(p.data.Shallows, h)

	if ok := p.nextLine(); !ok {
		return nil
	}

	if len(p.line) == 0 {
		return nil // successful parse of the advertised-refs message
	}

	return decodeShallow
}
  0707010000055A000081A4000000000000000000000001645E367C00001110000000000000000000000000000000000000006100000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/advrefs_encode.go  package packp

import (
	"bytes"
	"fmt"
	"io"
	"sort"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/format/pktline"
	"github.com/go-git/go-git/v5/plumbing/protocol/packp/capability"
)

// Encode writes the AdvRefs encoding to a writer.
//
// All the payloads will end with a newline character. Capabilities,
// references and shallows are written in alphabetical order, except for
// peeled references that always follow their corresponding references.
func (a *AdvRefs) Encode(w io.Writer) error {
	e := newAdvRefsEncoder(w)
	return e.Encode(a)
}

type advRefsEncoder struct {
	data         *AdvRefs         // data to encode
	pe           *pktline.Encoder // where to write the encoded data
	firstRefName string           // reference name to encode in the first pkt-line (HEAD if present)
	firstRefHash plumbing.Hash    // hash referenced to encode in the first pkt-line (HEAD if present)
	sortedRefs   []string         // hash references to encode ordered by increasing order
	err          error            // sticky error

}

func newAdvRefsEncoder(w io.Writer) *advRefsEncoder {
	return &advRefsEncoder{
		pe: pktline.NewEncoder(w),
	}
}

func (e *advRefsEncoder) Encode(v *AdvRefs) error {
	e.data = v
	e.sortRefs()
	e.setFirstRef()

	for state := encodePrefix; state != nil; {
		state = state(e)
	}

	return e.err
}

func (e *advRefsEncoder) sortRefs() {
	if len(e.data.References) > 0 {
		refs := make([]string, 0, len(e.data.References))
		for refName := range e.data.References {
			refs = append(refs, refName)
		}

		sort.Strings(refs)
		e.sortedRefs = refs
	}
}

func (e *advRefsEncoder) setFirstRef() {
	if e.data.Head != nil {
		e.firstRefName = head
		e.firstRefHash = *e.data.Head
		return
	}

	if len(e.sortedRefs) > 0 {
		refName := e.sortedRefs[0]
		e.firstRefName = refName
		e.firstRefHash = e.data.References[refName]
	}
}

type encoderStateFn func(*advRefsEncoder) encoderStateFn

func encodePrefix(e *advRefsEncoder) encoderStateFn {
	for _, p := range e.data.Prefix {
		if bytes.Equal(p, pktline.Flush) {
			if e.err = e.pe.Flush(); e.err != nil {
				return nil
			}
			continue
		}
		if e.err = e.pe.Encodef("%s\n", string(p)); e.err != nil {
			return nil
		}
	}

	return encodeFirstLine
}

// Adds the first pkt-line payload: head hash, head ref and capabilities.
// If HEAD ref is not found, the first reference ordered in increasing order will be used.
// If there aren't HEAD neither refs, the first line will be "PKT-LINE(zero-id SP "capabilities^{}" NUL capability-list)".
// See: https://github.com/git/git/blob/master/Documentation/technical/pack-protocol.txt
// See: https://github.com/git/git/blob/master/Documentation/technical/protocol-common.txt
func encodeFirstLine(e *advRefsEncoder) encoderStateFn {
	const formatFirstLine = "%s %s\x00%s\n"
	var firstLine string
	capabilities := formatCaps(e.data.Capabilities)

	if e.firstRefName == "" {
		firstLine = fmt.Sprintf(formatFirstLine, plumbing.ZeroHash.String(), "capabilities^{}", capabilities)
	} else {
		firstLine = fmt.Sprintf(formatFirstLine, e.firstRefHash.String(), e.firstRefName, capabilities)

	}

	if e.err = e.pe.EncodeString(firstLine); e.err != nil {
		return nil
	}

	return encodeRefs
}

func formatCaps(c *capability.List) string {
	if c == nil {
		return ""
	}

	return c.String()
}

// Adds the (sorted) refs: hash SP refname EOL
// and their peeled refs if any.
func encodeRefs(e *advRefsEncoder) encoderStateFn {
	for _, r := range e.sortedRefs {
		if r == e.firstRefName {
			continue
		}

		hash := e.data.References[r]
		if e.err = e.pe.Encodef("%s %s\n", hash.String(), r); e.err != nil {
			return nil
		}

		if hash, ok := e.data.Peeled[r]; ok {
			if e.err = e.pe.Encodef("%s %s^{}\n", hash.String(), r); e.err != nil {
				return nil
			}
		}
	}

	return encodeShallow
}

// Adds the (sorted) shallows: "shallow" SP hash EOL
func encodeShallow(e *advRefsEncoder) encoderStateFn {
	sorted := sortShallows(e.data.Shallows)
	for _, hash := range sorted {
		if e.err = e.pe.Encodef("shallow %s\n", hash); e.err != nil {
			return nil
		}
	}

	return encodeFlush
}

func sortShallows(c []plumbing.Hash) []string {
	ret := []string{}
	for _, h := range c {
		ret = append(ret, h.String())
	}
	sort.Strings(ret)

	return ret
}

func encodeFlush(e *advRefsEncoder) encoderStateFn {
	e.err = e.pe.Flush()
	return nil
}
0707010000055B000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/capability 0707010000055C000081A4000000000000000000000001645E367C00003453000000000000000000000000000000000000006800000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/capability/capability.go   // Package capability defines the server and client capabilities.
package capability

// Capability describes a server or client capability.
type Capability string

func (n Capability) String() string {
	return string(n)
}

const (
	// MultiACK capability allows the server to return "ACK obj-id continue" as
	// soon as it finds a commit that it can use as a common base, between the
	// client's wants and the client's have set.
	//
	// By sending this early, the server can potentially head off the client
	// from walking any further down that particular branch of the client's
	// repository history.  The client may still need to walk down other
	// branches, sending have lines for those, until the server has a
	// complete cut across the DAG, or the client has said "done".
	//
	// Without multi_ack, a client sends have lines in --date-order until
	// the server has found a common base.  That means the client will send
	// have lines that are already known by the server to be common, because
	// they overlap in time with another branch that the server hasn't found
	// a common base on yet.
	//
	// For example suppose the client has commits in caps that the server
	// doesn't and the server has commits in lower case that the client
	// doesn't, as in the following diagram:
	//
	//        +---- u ---------------------- x
	//       /              +----- y
	//      /              /
	//     a -- b -- c -- d -- E -- F
	//        \
	// 	+--- Q -- R -- S
	//
	// If the client wants x,y and starts out by saying have F,S, the server
	// doesn't know what F,S is.  Eventually the client says "have d" and
	// the server sends "ACK d continue" to let the client know to stop
	// walking down that line (so don't send c-b-a), but it's not done yet,
	// it needs a base for x. The client keeps going with S-R-Q, until a
	// gets reached, at which point the server has a clear base and it all
	// ends.
	//
	// Without multi_ack the client would have sent that c-b-a chain anyway,
	// interleaved with S-R-Q.
	MultiACK Capability = "multi_ack"
	// MultiACKDetailed is an extension of multi_ack that permits client to
	// better understand the server's in-memory state.
	MultiACKDetailed Capability = "multi_ack_detailed"
	// NoDone should only be used with the smart HTTP protocol. If
	// multi_ack_detailed and no-done are both present, then the sender is
	// free to immediately send a pack following its first "ACK obj-id ready"
	// message.
	//
	// Without no-done in the smart HTTP protocol, the server session would
	// end and the client has to make another trip to send "done" before
	// the server can send the pack. no-done removes the last round and
	// thus slightly reduces latency.
	NoDone Capability = "no-done"
	// ThinPack is one with deltas which reference base objects not
	// contained within the pack (but are known to exist at the receiving
	// end). This can reduce the network traffic significantly, but it
	// requires the receiving end to know how to "thicken" these packs by
	// adding the missing bases to the pack.
	//
	// The upload-pack server advertises 'thin-pack' when it can generate
	// and send a thin pack. A client requests the 'thin-pack' capability
	// when it understands how to "thicken" it, notifying the server that
	// it can receive such a pack. A client MUST NOT request the
	// 'thin-pack' capability if it cannot turn a thin pack into a
	// self-contained pack.
	//
	// Receive-pack, on the other hand, is assumed by default to be able to
	// handle thin packs, but can ask the client not to use the feature by
	// advertising the 'no-thin' capability. A client MUST NOT send a thin
	// pack if the server advertises the 'no-thin' capability.
	//
	// The reasons for this asymmetry are historical. The receive-pack
	// program did not exist until after the invention of thin packs, so
	// historically the reference implementation of receive-pack always
	// understood thin packs. Adding 'no-thin' later allowed receive-pack
	// to disable the feature in a backwards-compatible manner.
	ThinPack Capability = "thin-pack"
	// Sideband means that server can send, and client understand multiplexed
	// progress reports and error info interleaved with the packfile itself.
	//
	// These two options are mutually exclusive. A modern client always
	// favors Sideband64k.
	//
	// Either mode indicates that the packfile data will be streamed broken
	// up into packets of up to either 1000 bytes in the case of 'side_band',
	// or 65520 bytes in the case of 'side_band_64k'. Each packet is made up
	// of a leading 4-byte pkt-line length of how much data is in the packet,
	// followed by a 1-byte stream code, followed by the actual data.
	//
	// The stream code can be one of:
	//
	//  1 - pack data
	//  2 - progress messages
	//  3 - fatal error message just before stream aborts
	//
	// The "side-band-64k" capability came about as a way for newer clients
	// that can handle much larger packets to request packets that are
	// actually crammed nearly full, while maintaining backward compatibility
	// for the older clients.
	//
	// Further, with side-band and its up to 1000-byte messages, it's actually
	// 999 bytes of payload and 1 byte for the stream code. With side-band-64k,
	// same deal, you have up to 65519 bytes of data and 1 byte for the stream
	// code.
	//
	// The client MUST send only maximum of one of "side-band" and "side-
	// band-64k".  Server MUST diagnose it as an error if client requests
	// both.
	Sideband    Capability = "side-band"
	Sideband64k Capability = "side-band-64k"
	// OFSDelta server can send, and client understand PACKv2 with delta
	// referring to its base by position in pack rather than by an obj-id. That
	// is, they can send/read OBJ_OFS_DELTA (aka type 6) in a packfile.
	OFSDelta Capability = "ofs-delta"
	// Agent the server may optionally send this capability to notify the client
	// that the server is running version `X`. The client may optionally return
	// its own agent string by responding with an `agent=Y` capability (but it
	// MUST NOT do so if the server did not mention the agent capability). The
	// `X` and `Y` strings may contain any printable ASCII characters except
	// space (i.e., the byte range 32 < x < 127), and are typically of the form
	// "package/version" (e.g., "git/1.8.3.1"). The agent strings are purely
	// informative for statistics and debugging purposes, and MUST NOT be used
	// to programmatically assume the presence or absence of particular features.
	Agent Capability = "agent"
	// Shallow capability adds "deepen", "shallow" and "unshallow" commands to
	// the  fetch-pack/upload-pack protocol so clients can request shallow
	// clones.
	Shallow Capability = "shallow"
	// DeepenSince adds "deepen-since" command to fetch-pack/upload-pack
	// protocol so the client can request shallow clones that are cut at a
	// specific time, instead of depth. Internally it's equivalent of doing
	// "rev-list --max-age=<timestamp>" on the server side. "deepen-since"
	// cannot be used with "deepen".
	DeepenSince Capability = "deepen-since"
	// DeepenNot adds "deepen-not" command to fetch-pack/upload-pack
	// protocol so the client can request shallow clones that are cut at a
	// specific revision, instead of depth. Internally it's equivalent of
	// doing "rev-list --not <rev>" on the server side. "deepen-not"
	// cannot be used with "deepen", but can be used with "deepen-since".
	DeepenNot Capability = "deepen-not"
	// DeepenRelative if this capability is requested by the client, the
	// semantics of "deepen" command is changed. The "depth" argument is the
	// depth from the current shallow boundary, instead of the depth from
	// remote refs.
	DeepenRelative Capability = "deepen-relative"
	// NoProgress the client was started with "git clone -q" or something, and
	// doesn't want that side band 2. Basically the client just says "I do not
	// wish to receive stream 2 on sideband, so do not send it to me, and if
	// you did, I will drop it on the floor anyway".  However, the sideband
	// channel 3 is still used for error responses.
	NoProgress Capability = "no-progress"
	// IncludeTag capability is about sending annotated tags if we are
	// sending objects they point to.  If we pack an object to the client, and
	// a tag object points exactly at that object, we pack the tag object too.
	// In general this allows a client to get all new annotated tags when it
	// fetches a branch, in a single network connection.
	//
	// Clients MAY always send include-tag, hardcoding it into a request when
	// the server advertises this capability. The decision for a client to
	// request include-tag only has to do with the client's desires for tag
	// data, whether or not a server had advertised objects in the
	// refs/tags/* namespace.
	//
	// Servers MUST pack the tags if their referrant is packed and the client
	// has requested include-tags.
	//
	// Clients MUST be prepared for the case where a server has ignored
	// include-tag and has not actually sent tags in the pack.  In such
	// cases the client SHOULD issue a subsequent fetch to acquire the tags
	// that include-tag would have otherwise given the client.
	//
	// The server SHOULD send include-tag, if it supports it, regardless
	// of whether or not there are tags available.
	IncludeTag Capability = "include-tag"
	// ReportStatus the receive-pack process can receive a 'report-status'
	// capability, which tells it that the client wants a report of what
	// happened after a packfile upload and reference update. If the pushing
	// client requests this capability, after unpacking and updating references
	// the server will respond with whether the packfile unpacked successfully
	// and if each reference was updated successfully. If any of those were not
	// successful, it will send back an error message.  See pack-protocol.txt
	// for example messages.
	ReportStatus Capability = "report-status"
	// DeleteRefs If the server sends back this capability, it means that
	// it is capable of accepting a zero-id value as the target
	// value of a reference update.  It is not sent back by the client, it
	// simply informs the client that it can be sent zero-id values
	// to delete references
	DeleteRefs Capability = "delete-refs"
	// Quiet If the receive-pack server advertises this capability, it is
	// capable of silencing human-readable progress output which otherwise may
	// be shown when processing the received pack. A send-pack client should
	// respond with the 'quiet' capability to suppress server-side progress
	// reporting if the local progress reporting is also being suppressed
	// (e.g., via `push -q`, or if stderr does not go to a tty).
	Quiet Capability = "quiet"
	// Atomic If the server sends this capability it is capable of accepting
	// atomic pushes. If the pushing client requests this capability, the server
	// will update the refs in one atomic transaction. Either all refs are
	// updated or none.
	Atomic Capability = "atomic"
	// PushOptions If the server sends this capability it is able to accept
	// push options after the update commands have been sent, but before the
	// packfile is streamed. If the pushing client requests this capability,
	// the server will pass the options to the pre- and post- receive hooks
	// that process this push request.
	PushOptions Capability = "push-options"
	// AllowTipSHA1InWant if the upload-pack server advertises this capability,
	// fetch-pack may send "want" lines with SHA-1s that exist at the server but
	// are not advertised by upload-pack.
	AllowTipSHA1InWant Capability = "allow-tip-sha1-in-want"
	// AllowReachableSHA1InWant if the upload-pack server advertises this
	// capability, fetch-pack may send "want" lines with SHA-1s that exist at
	// the server but are not advertised by upload-pack.
	AllowReachableSHA1InWant Capability = "allow-reachable-sha1-in-want"
	// PushCert the receive-pack server that advertises this capability is
	// willing to accept a signed push certificate, and asks the <nonce> to be
	// included in the push certificate.  A send-pack client MUST NOT
	// send a push-cert packet unless the receive-pack server advertises
	// this capability.
	PushCert Capability = "push-cert"
	// SymRef symbolic reference support for better negotiation.
	SymRef Capability = "symref"
	// ObjectFormat takes a hash algorithm as an argument, indicates that the
	// server supports the given hash algorithms.
	ObjectFormat Capability = "object-format"
	// Filter if present, fetch-pack may send "filter" commands to request a
	// partial clone or partial fetch and request that the server omit various objects from the packfile
	Filter Capability = "filter"
)

const DefaultAgent = "go-git/4.x"

var known = map[Capability]bool{
	MultiACK: true, MultiACKDetailed: true, NoDone: true, ThinPack: true,
	Sideband: true, Sideband64k: true, OFSDelta: true, Agent: true,
	Shallow: true, DeepenSince: true, DeepenNot: true, DeepenRelative: true,
	NoProgress: true, IncludeTag: true, ReportStatus: true, DeleteRefs: true,
	Quiet: true, Atomic: true, PushOptions: true, AllowTipSHA1InWant: true,
	AllowReachableSHA1InWant: true, PushCert: true, SymRef: true,
	ObjectFormat: true, Filter: true,
}

var requiresArgument = map[Capability]bool{
	Agent: true, PushCert: true, SymRef: true, ObjectFormat: true,
}

var multipleArgument = map[Capability]bool{
	SymRef: true,
}
 0707010000055D000081A4000000000000000000000001645E367C00001036000000000000000000000000000000000000006200000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/capability/list.go package capability

import (
	"bytes"
	"errors"
	"fmt"
	"strings"
)

var (
	// ErrArgumentsRequired is returned if no arguments are giving with a
	// capability that requires arguments
	ErrArgumentsRequired = errors.New("arguments required")
	// ErrArguments is returned if arguments are given with a capabilities that
	// not supports arguments
	ErrArguments = errors.New("arguments not allowed")
	// ErrEmptyArgument is returned when an empty value is given
	ErrEmptyArgument = errors.New("empty argument")
	// ErrMultipleArguments multiple argument given to a capabilities that not
	// support it
	ErrMultipleArguments = errors.New("multiple arguments not allowed")
)

// List represents a list of capabilities
type List struct {
	m    map[Capability]*entry
	sort []string
}

type entry struct {
	Name   Capability
	Values []string
}

// NewList returns a new List of capabilities
func NewList() *List {
	return &List{
		m: make(map[Capability]*entry),
	}
}

// IsEmpty returns true if the List is empty
func (l *List) IsEmpty() bool {
	return len(l.sort) == 0
}

// Decode decodes list of capabilities from raw into the list
func (l *List) Decode(raw []byte) error {
	// git 1.x receive pack used to send a leading space on its
	// git-receive-pack capabilities announcement. We just trim space to be
	// tolerant to space changes in different versions.
	raw = bytes.TrimSpace(raw)

	if len(raw) == 0 {
		return nil
	}

	for _, data := range bytes.Split(raw, []byte{' '}) {
		pair := bytes.SplitN(data, []byte{'='}, 2)

		c := Capability(pair[0])
		if len(pair) == 1 {
			if err := l.Add(c); err != nil {
				return err
			}

			continue
		}

		if err := l.Add(c, string(pair[1])); err != nil {
			return err
		}
	}

	return nil
}

// Get returns the values for a capability
func (l *List) Get(capability Capability) []string {
	if _, ok := l.m[capability]; !ok {
		return nil
	}

	return l.m[capability].Values
}

// Set sets a capability removing the previous values
func (l *List) Set(capability Capability, values ...string) error {
	delete(l.m, capability)
	return l.Add(capability, values...)
}

// Add adds a capability, values are optional
func (l *List) Add(c Capability, values ...string) error {
	if err := l.validate(c, values); err != nil {
		return err
	}

	if !l.Supports(c) {
		l.m[c] = &entry{Name: c}
		l.sort = append(l.sort, c.String())
	}

	if len(values) == 0 {
		return nil
	}

	if known[c] && !multipleArgument[c] && len(l.m[c].Values) > 0 {
		return ErrMultipleArguments
	}

	l.m[c].Values = append(l.m[c].Values, values...)
	return nil
}

func (l *List) validateNoEmptyArgs(values []string) error {
	for _, v := range values {
		if v == "" {
			return ErrEmptyArgument
		}
	}
	return nil
}

func (l *List) validate(c Capability, values []string) error {
	if !known[c] {
		return l.validateNoEmptyArgs(values)
	}
	if requiresArgument[c] && len(values) == 0 {
		return ErrArgumentsRequired
	}

	if !requiresArgument[c] && len(values) != 0 {
		return ErrArguments
	}

	if !multipleArgument[c] && len(values) > 1 {
		return ErrMultipleArguments
	}
	return l.validateNoEmptyArgs(values)
}

// Supports returns true if capability is present
func (l *List) Supports(capability Capability) bool {
	_, ok := l.m[capability]
	return ok
}

// Delete deletes a capability from the List
func (l *List) Delete(capability Capability) {
	if !l.Supports(capability) {
		return
	}

	delete(l.m, capability)
	for i, c := range l.sort {
		if c != string(capability) {
			continue
		}

		l.sort = append(l.sort[:i], l.sort[i+1:]...)
		return
	}
}

// All returns a slice with all defined capabilities.
func (l *List) All() []Capability {
	var cs []Capability
	for _, key := range l.sort {
		cs = append(cs, Capability(key))
	}

	return cs
}

// String generates the capabilities strings, the capabilities are sorted in
// insertion order
func (l *List) String() string {
	var o []string
	for _, key := range l.sort {
		cap := l.m[Capability(key)]
		if len(cap.Values) == 0 {
			o = append(o, key)
			continue
		}

		for _, value := range cap.Values {
			o = append(o, fmt.Sprintf("%s=%s", key, value))
		}
	}

	return strings.Join(o, " ")
}
  0707010000055E000081A4000000000000000000000001645E367C0000052C000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/common.go  package packp

import (
	"fmt"
)

type stateFn func() stateFn

const (
	// common
	hashSize = 40

	// advrefs
	head   = "HEAD"
	noHead = "capabilities^{}"
)

var (
	// common
	sp  = []byte(" ")
	eol = []byte("\n")
	eq  = []byte{'='}

	// advertised-refs
	null       = []byte("\x00")
	peeled     = []byte("^{}")
	noHeadMark = []byte(" capabilities^{}\x00")

	// upload-request
	want            = []byte("want ")
	shallow         = []byte("shallow ")
	deepen          = []byte("deepen")
	deepenCommits   = []byte("deepen ")
	deepenSince     = []byte("deepen-since ")
	deepenReference = []byte("deepen-not ")

	// shallow-update
	unshallow = []byte("unshallow ")

	// server-response
	ack = []byte("ACK")
	nak = []byte("NAK")

	// updreq
	shallowNoSp = []byte("shallow")
)

func isFlush(payload []byte) bool {
	return len(payload) == 0
}

// ErrUnexpectedData represents an unexpected data decoding a message
type ErrUnexpectedData struct {
	Msg  string
	Data []byte
}

// NewErrUnexpectedData returns a new ErrUnexpectedData containing the data and
// the message given
func NewErrUnexpectedData(msg string, data []byte) error {
	return &ErrUnexpectedData{Msg: msg, Data: data}
}

func (err *ErrUnexpectedData) Error() string {
	if len(err.Data) == 0 {
		return err.Msg
	}

	return fmt.Sprintf("%s (%s)", err.Msg, err.Data)
}
0707010000055F000081A4000000000000000000000001645E367C00006936000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/doc.go package packp

/*

A nice way to trace the real data transmitted and received by git, use:

GIT_TRACE_PACKET=true git ls-remote http://github.com/src-d/go-git
GIT_TRACE_PACKET=true git clone http://github.com/src-d/go-git

Here follows a copy of the current protocol specification at the time of
this writing.

(Please notice that most http git servers will add a flush-pkt after the
first pkt-line when using HTTP smart.)


Documentation Common to Pack and Http Protocols
===============================================

ABNF Notation
-------------

ABNF notation as described by RFC 5234 is used within the protocol documents,
except the following replacement core rules are used:
----
  HEXDIG    =  DIGIT / "a" / "b" / "c" / "d" / "e" / "f"
----

We also define the following common rules:
----
  NUL       =  %x00
  zero-id   =  40*"0"
  obj-id    =  40*(HEXDIGIT)

  refname  =  "HEAD"
  refname /=  "refs/" <see discussion below>
----

A refname is a hierarchical octet string beginning with "refs/" and
not violating the 'git-check-ref-format' command's validation rules.
More specifically, they:

. They can include slash `/` for hierarchical (directory)
  grouping, but no slash-separated component can begin with a
  dot `.`.

. They must contain at least one `/`. This enforces the presence of a
  category like `heads/`, `tags/` etc. but the actual names are not
  restricted.

. They cannot have two consecutive dots `..` anywhere.

. They cannot have ASCII control characters (i.e. bytes whose
  values are lower than \040, or \177 `DEL`), space, tilde `~`,
  caret `^`, colon `:`, question-mark `?`, asterisk `*`,
  or open bracket `[` anywhere.

. They cannot end with a slash `/` or a dot `.`.

. They cannot end with the sequence `.lock`.

. They cannot contain a sequence `@{`.

. They cannot contain a `\\`.


pkt-line Format
---------------

Much (but not all) of the payload is described around pkt-lines.

A pkt-line is a variable length binary string.  The first four bytes
of the line, the pkt-len, indicates the total length of the line,
in hexadecimal.  The pkt-len includes the 4 bytes used to contain
the length's hexadecimal representation.

A pkt-line MAY contain binary data, so implementors MUST ensure
pkt-line parsing/formatting routines are 8-bit clean.

A non-binary line SHOULD BE terminated by an LF, which if present
MUST be included in the total length. Receivers MUST treat pkt-lines
with non-binary data the same whether or not they contain the trailing
LF (stripping the LF if present, and not complaining when it is
missing).

The maximum length of a pkt-line's data component is 65516 bytes.
Implementations MUST NOT send pkt-line whose length exceeds 65520
(65516 bytes of payload + 4 bytes of length data).

Implementations SHOULD NOT send an empty pkt-line ("0004").

A pkt-line with a length field of 0 ("0000"), called a flush-pkt,
is a special case and MUST be handled differently than an empty
pkt-line ("0004").

----
  pkt-line     =  data-pkt / flush-pkt

  data-pkt     =  pkt-len pkt-payload
  pkt-len      =  4*(HEXDIG)
  pkt-payload  =  (pkt-len - 4)*(OCTET)

  flush-pkt    = "0000"
----

Examples (as C-style strings):

----
  pkt-line          actual value
  ---------------------------------
  "0006a\n"         "a\n"
  "0005a"           "a"
  "000bfoobar\n"    "foobar\n"
  "0004"            ""
----

Packfile transfer protocols
===========================

Git supports transferring data in packfiles over the ssh://, git://, http:// and
file:// transports.  There exist two sets of protocols, one for pushing
data from a client to a server and another for fetching data from a
server to a client.  The three transports (ssh, git, file) use the same
protocol to transfer data. http is documented in http-protocol.txt.

The processes invoked in the canonical Git implementation are 'upload-pack'
on the server side and 'fetch-pack' on the client side for fetching data;
then 'receive-pack' on the server and 'send-pack' on the client for pushing
data.  The protocol functions to have a server tell a client what is
currently on the server, then for the two to negotiate the smallest amount
of data to send in order to fully update one or the other.

pkt-line Format
---------------

The descriptions below build on the pkt-line format described in
protocol-common.txt. When the grammar indicate `PKT-LINE(...)`, unless
otherwise noted the usual pkt-line LF rules apply: the sender SHOULD
include a LF, but the receiver MUST NOT complain if it is not present.

Transports
----------
There are three transports over which the packfile protocol is
initiated.  The Git transport is a simple, unauthenticated server that
takes the command (almost always 'upload-pack', though Git
servers can be configured to be globally writable, in which 'receive-
pack' initiation is also allowed) with which the client wishes to
communicate and executes it and connects it to the requesting
process.

In the SSH transport, the client just runs the 'upload-pack'
or 'receive-pack' process on the server over the SSH protocol and then
communicates with that invoked process over the SSH connection.

The file:// transport runs the 'upload-pack' or 'receive-pack'
process locally and communicates with it over a pipe.

Git Transport
-------------

The Git transport starts off by sending the command and repository
on the wire using the pkt-line format, followed by a NUL byte and a
hostname parameter, terminated by a NUL byte.

   0032git-upload-pack /project.git\0host=myserver.com\0

--
   git-proto-request = request-command SP pathname NUL [ host-parameter NUL ]
   request-command   = "git-upload-pack" / "git-receive-pack" /
		       "git-upload-archive"   ; case sensitive
   pathname          = *( %x01-ff ) ; exclude NUL
   host-parameter    = "host=" hostname [ ":" port ]
--

Only host-parameter is allowed in the git-proto-request. Clients
MUST NOT attempt to send additional parameters. It is used for the
git-daemon name based virtual hosting.  See --interpolated-path
option to git daemon, with the %H/%CH format characters.

Basically what the Git client is doing to connect to an 'upload-pack'
process on the server side over the Git protocol is this:

   $ echo -e -n \
     "0039git-upload-pack /schacon/gitbook.git\0host=example.com\0" |
     nc -v example.com 9418

If the server refuses the request for some reasons, it could abort
gracefully with an error message.

----
  error-line     =  PKT-LINE("ERR" SP explanation-text)
----


SSH Transport
-------------

Initiating the upload-pack or receive-pack processes over SSH is
executing the binary on the server via SSH remote execution.
It is basically equivalent to running this:

   $ ssh git.example.com "git-upload-pack '/project.git'"

For a server to support Git pushing and pulling for a given user over
SSH, that user needs to be able to execute one or both of those
commands via the SSH shell that they are provided on login.  On some
systems, that shell access is limited to only being able to run those
two commands, or even just one of them.

In an ssh:// format URI, it's absolute in the URI, so the '/' after
the host name (or port number) is sent as an argument, which is then
read by the remote git-upload-pack exactly as is, so it's effectively
an absolute path in the remote filesystem.

       git clone ssh://user@example.com/project.git
		    |
		    v
    ssh user@example.com "git-upload-pack '/project.git'"

In a "user@host:path" format URI, its relative to the user's home
directory, because the Git client will run:

     git clone user@example.com:project.git
		    |
		    v
  ssh user@example.com "git-upload-pack 'project.git'"

The exception is if a '~' is used, in which case
we execute it without the leading '/'.

      ssh://user@example.com/~alice/project.git,
		     |
		     v
   ssh user@example.com "git-upload-pack '~alice/project.git'"

A few things to remember here:

- The "command name" is spelled with dash (e.g. git-upload-pack), but
  this can be overridden by the client;

- The repository path is always quoted with single quotes.

Fetching Data From a Server
---------------------------

When one Git repository wants to get data that a second repository
has, the first can 'fetch' from the second.  This operation determines
what data the server has that the client does not then streams that
data down to the client in packfile format.


Reference Discovery
-------------------

When the client initially connects the server will immediately respond
with a listing of each reference it has (all branches and tags) along
with the object name that each reference currently points to.

   $ echo -e -n "0039git-upload-pack /schacon/gitbook.git\0host=example.com\0" |
      nc -v example.com 9418
   00887217a7c7e582c46cec22a130adf4b9d7d950fba0 HEAD\0multi_ack thin-pack
		side-band side-band-64k ofs-delta shallow no-progress include-tag
   00441d3fcd5ced445d1abc402225c0b8a1299641f497 refs/heads/integration
   003f7217a7c7e582c46cec22a130adf4b9d7d950fba0 refs/heads/master
   003cb88d2441cac0977faf98efc80305012112238d9d refs/tags/v0.9
   003c525128480b96c89e6418b1e40909bf6c5b2d580f refs/tags/v1.0
   003fe92df48743b7bc7d26bcaabfddde0a1e20cae47c refs/tags/v1.0^{}
   0000

The returned response is a pkt-line stream describing each ref and
its current value.  The stream MUST be sorted by name according to
the C locale ordering.

If HEAD is a valid ref, HEAD MUST appear as the first advertised
ref.  If HEAD is not a valid ref, HEAD MUST NOT appear in the
advertisement list at all, but other refs may still appear.

The stream MUST include capability declarations behind a NUL on the
first ref. The peeled value of a ref (that is "ref^{}") MUST be
immediately after the ref itself, if presented. A conforming server
MUST peel the ref if it's an annotated tag.

----
  advertised-refs  =  (no-refs / list-of-refs)
		      *shallow
		      flush-pkt

  no-refs          =  PKT-LINE(zero-id SP "capabilities^{}"
		      NUL capability-list)

  list-of-refs     =  first-ref *other-ref
  first-ref        =  PKT-LINE(obj-id SP refname
		      NUL capability-list)

  other-ref        =  PKT-LINE(other-tip / other-peeled)
  other-tip        =  obj-id SP refname
  other-peeled     =  obj-id SP refname "^{}"

  shallow          =  PKT-LINE("shallow" SP obj-id)

  capability-list  =  capability *(SP capability)
  capability       =  1*(LC_ALPHA / DIGIT / "-" / "_")
  LC_ALPHA         =  %x61-7A
----

Server and client MUST use lowercase for obj-id, both MUST treat obj-id
as case-insensitive.

See protocol-capabilities.txt for a list of allowed server capabilities
and descriptions.

Packfile Negotiation
--------------------
After reference and capabilities discovery, the client can decide to
terminate the connection by sending a flush-pkt, telling the server it can
now gracefully terminate, and disconnect, when it does not need any pack
data. This can happen with the ls-remote command, and also can happen when
the client already is up-to-date.

Otherwise, it enters the negotiation phase, where the client and
server determine what the minimal packfile necessary for transport is,
by telling the server what objects it wants, its shallow objects
(if any), and the maximum commit depth it wants (if any).  The client
will also send a list of the capabilities it wants to be in effect,
out of what the server said it could do with the first 'want' line.

----
  upload-request    =  want-list
		       *shallow-line
		       *1depth-request
		       flush-pkt

  want-list         =  first-want
		       *additional-want

  shallow-line      =  PKT-LINE("shallow" SP obj-id)

  depth-request     =  PKT-LINE("deepen" SP depth) /
		       PKT-LINE("deepen-since" SP timestamp) /
		       PKT-LINE("deepen-not" SP ref)

  first-want        =  PKT-LINE("want" SP obj-id SP capability-list)
  additional-want   =  PKT-LINE("want" SP obj-id)

  depth             =  1*DIGIT
----

Clients MUST send all the obj-ids it wants from the reference
discovery phase as 'want' lines. Clients MUST send at least one
'want' command in the request body. Clients MUST NOT mention an
obj-id in a 'want' command which did not appear in the response
obtained through ref discovery.

The client MUST write all obj-ids which it only has shallow copies
of (meaning that it does not have the parents of a commit) as
'shallow' lines so that the server is aware of the limitations of
the client's history.

The client now sends the maximum commit history depth it wants for
this transaction, which is the number of commits it wants from the
tip of the history, if any, as a 'deepen' line.  A depth of 0 is the
same as not making a depth request. The client does not want to receive
any commits beyond this depth, nor does it want objects needed only to
complete those commits. Commits whose parents are not received as a
result are defined as shallow and marked as such in the server. This
information is sent back to the client in the next step.

Once all the 'want's and 'shallow's (and optional 'deepen') are
transferred, clients MUST send a flush-pkt, to tell the server side
that it is done sending the list.

Otherwise, if the client sent a positive depth request, the server
will determine which commits will and will not be shallow and
send this information to the client. If the client did not request
a positive depth, this step is skipped.

----
  shallow-update   =  *shallow-line
		      *unshallow-line
		      flush-pkt

  shallow-line     =  PKT-LINE("shallow" SP obj-id)

  unshallow-line   =  PKT-LINE("unshallow" SP obj-id)
----

If the client has requested a positive depth, the server will compute
the set of commits which are no deeper than the desired depth. The set
of commits start at the client's wants.

The server writes 'shallow' lines for each
commit whose parents will not be sent as a result. The server writes
an 'unshallow' line for each commit which the client has indicated is
shallow, but is no longer shallow at the currently requested depth
(that is, its parents will now be sent). The server MUST NOT mark
as unshallow anything which the client has not indicated was shallow.

Now the client will send a list of the obj-ids it has using 'have'
lines, so the server can make a packfile that only contains the objects
that the client needs. In multi_ack mode, the canonical implementation
will send up to 32 of these at a time, then will send a flush-pkt. The
canonical implementation will skip ahead and send the next 32 immediately,
so that there is always a block of 32 "in-flight on the wire" at a time.

----
  upload-haves      =  have-list
		       compute-end

  have-list         =  *have-line
  have-line         =  PKT-LINE("have" SP obj-id)
  compute-end       =  flush-pkt / PKT-LINE("done")
----

If the server reads 'have' lines, it then will respond by ACKing any
of the obj-ids the client said it had that the server also has. The
server will ACK obj-ids differently depending on which ack mode is
chosen by the client.

In multi_ack mode:

  * the server will respond with 'ACK obj-id continue' for any common
    commits.

  * once the server has found an acceptable common base commit and is
    ready to make a packfile, it will blindly ACK all 'have' obj-ids
    back to the client.

  * the server will then send a 'NAK' and then wait for another response
    from the client - either a 'done' or another list of 'have' lines.

In multi_ack_detailed mode:

  * the server will differentiate the ACKs where it is signaling
    that it is ready to send data with 'ACK obj-id ready' lines, and
    signals the identified common commits with 'ACK obj-id common' lines.

Without either multi_ack or multi_ack_detailed:

 * upload-pack sends "ACK obj-id" on the first common object it finds.
   After that it says nothing until the client gives it a "done".

 * upload-pack sends "NAK" on a flush-pkt if no common object
   has been found yet.  If one has been found, and thus an ACK
   was already sent, it's silent on the flush-pkt.

After the client has gotten enough ACK responses that it can determine
that the server has enough information to send an efficient packfile
(in the canonical implementation, this is determined when it has received
enough ACKs that it can color everything left in the --date-order queue
as common with the server, or the --date-order queue is empty), or the
client determines that it wants to give up (in the canonical implementation,
this is determined when the client sends 256 'have' lines without getting
any of them ACKed by the server - meaning there is nothing in common and
the server should just send all of its objects), then the client will send
a 'done' command.  The 'done' command signals to the server that the client
is ready to receive its packfile data.

However, the 256 limit *only* turns on in the canonical client
implementation if we have received at least one "ACK %s continue"
during a prior round.  This helps to ensure that at least one common
ancestor is found before we give up entirely.

Once the 'done' line is read from the client, the server will either
send a final 'ACK obj-id' or it will send a 'NAK'. 'obj-id' is the object
name of the last commit determined to be common. The server only sends
ACK after 'done' if there is at least one common base and multi_ack or
multi_ack_detailed is enabled. The server always sends NAK after 'done'
if there is no common base found.

Then the server will start sending its packfile data.

----
  server-response = *ack_multi ack / nak
  ack_multi       = PKT-LINE("ACK" SP obj-id ack_status)
  ack_status      = "continue" / "common" / "ready"
  ack             = PKT-LINE("ACK" SP obj-id)
  nak             = PKT-LINE("NAK")
----

A simple clone may look like this (with no 'have' lines):

----
   C: 0054want 74730d410fcb6603ace96f1dc55ea6196122532d multi_ack \
     side-band-64k ofs-delta\n
   C: 0032want 7d1665144a3a975c05f1f43902ddaf084e784dbe\n
   C: 0032want 5a3f6be755bbb7deae50065988cbfa1ffa9ab68a\n
   C: 0032want 7e47fe2bd8d01d481f44d7af0531bd93d3b21c01\n
   C: 0032want 74730d410fcb6603ace96f1dc55ea6196122532d\n
   C: 0000
   C: 0009done\n

   S: 0008NAK\n
   S: [PACKFILE]
----

An incremental update (fetch) response might look like this:

----
   C: 0054want 74730d410fcb6603ace96f1dc55ea6196122532d multi_ack \
     side-band-64k ofs-delta\n
   C: 0032want 7d1665144a3a975c05f1f43902ddaf084e784dbe\n
   C: 0032want 5a3f6be755bbb7deae50065988cbfa1ffa9ab68a\n
   C: 0000
   C: 0032have 7e47fe2bd8d01d481f44d7af0531bd93d3b21c01\n
   C: [30 more have lines]
   C: 0032have 74730d410fcb6603ace96f1dc55ea6196122532d\n
   C: 0000

   S: 003aACK 7e47fe2bd8d01d481f44d7af0531bd93d3b21c01 continue\n
   S: 003aACK 74730d410fcb6603ace96f1dc55ea6196122532d continue\n
   S: 0008NAK\n

   C: 0009done\n

   S: 0031ACK 74730d410fcb6603ace96f1dc55ea6196122532d\n
   S: [PACKFILE]
----


Packfile Data
-------------

Now that the client and server have finished negotiation about what
the minimal amount of data that needs to be sent to the client is, the server
will construct and send the required data in packfile format.

See pack-format.txt for what the packfile itself actually looks like.

If 'side-band' or 'side-band-64k' capabilities have been specified by
the client, the server will send the packfile data multiplexed.

Each packet starting with the packet-line length of the amount of data
that follows, followed by a single byte specifying the sideband the
following data is coming in on.

In 'side-band' mode, it will send up to 999 data bytes plus 1 control
code, for a total of up to 1000 bytes in a pkt-line.  In 'side-band-64k'
mode it will send up to 65519 data bytes plus 1 control code, for a
total of up to 65520 bytes in a pkt-line.

The sideband byte will be a '1', '2' or a '3'. Sideband '1' will contain
packfile data, sideband '2' will be used for progress information that the
client will generally print to stderr and sideband '3' is used for error
information.

If no 'side-band' capability was specified, the server will stream the
entire packfile without multiplexing.


Pushing Data To a Server
------------------------

Pushing data to a server will invoke the 'receive-pack' process on the
server, which will allow the client to tell it which references it should
update and then send all the data the server will need for those new
references to be complete.  Once all the data is received and validated,
the server will then update its references to what the client specified.

Authentication
--------------

The protocol itself contains no authentication mechanisms.  That is to be
handled by the transport, such as SSH, before the 'receive-pack' process is
invoked.  If 'receive-pack' is configured over the Git transport, those
repositories will be writable by anyone who can access that port (9418) as
that transport is unauthenticated.

Reference Discovery
-------------------

The reference discovery phase is done nearly the same way as it is in the
fetching protocol. Each reference obj-id and name on the server is sent
in packet-line format to the client, followed by a flush-pkt.  The only
real difference is that the capability listing is different - the only
possible values are 'report-status', 'delete-refs', 'ofs-delta' and
'push-options'.

Reference Update Request and Packfile Transfer
----------------------------------------------

Once the client knows what references the server is at, it can send a
list of reference update requests.  For each reference on the server
that it wants to update, it sends a line listing the obj-id currently on
the server, the obj-id the client would like to update it to and the name
of the reference.

This list is followed by a flush-pkt. Then the push options are transmitted
one per packet followed by another flush-pkt. After that the packfile that
should contain all the objects that the server will need to complete the new
references will be sent.

----
  update-request    =  *shallow ( command-list | push-cert ) [packfile]

  shallow           =  PKT-LINE("shallow" SP obj-id)

  command-list      =  PKT-LINE(command NUL capability-list)
		       *PKT-LINE(command)
		       flush-pkt

  command           =  create / delete / update
  create            =  zero-id SP new-id  SP name
  delete            =  old-id  SP zero-id SP name
  update            =  old-id  SP new-id  SP name

  old-id            =  obj-id
  new-id            =  obj-id

  push-cert         = PKT-LINE("push-cert" NUL capability-list LF)
		      PKT-LINE("certificate version 0.1" LF)
		      PKT-LINE("pusher" SP ident LF)
		      PKT-LINE("pushee" SP url LF)
		      PKT-LINE("nonce" SP nonce LF)
		      PKT-LINE(LF)
		      *PKT-LINE(command LF)
		      *PKT-LINE(gpg-signature-lines LF)
		      PKT-LINE("push-cert-end" LF)

  packfile          = "PACK" 28*(OCTET)
----

If the receiving end does not support delete-refs, the sending end MUST
NOT ask for delete command.

If the receiving end does not support push-cert, the sending end
MUST NOT send a push-cert command.  When a push-cert command is
sent, command-list MUST NOT be sent; the commands recorded in the
push certificate is used instead.

The packfile MUST NOT be sent if the only command used is 'delete'.

A packfile MUST be sent if either create or update command is used,
even if the server already has all the necessary objects.  In this
case the client MUST send an empty packfile.   The only time this
is likely to happen is if the client is creating
a new branch or a tag that points to an existing obj-id.

The server will receive the packfile, unpack it, then validate each
reference that is being updated that it hasn't changed while the request
was being processed (the obj-id is still the same as the old-id), and
it will run any update hooks to make sure that the update is acceptable.
If all of that is fine, the server will then update the references.

Push Certificate
----------------

A push certificate begins with a set of header lines.  After the
header and an empty line, the protocol commands follow, one per
line. Note that the trailing LF in push-cert PKT-LINEs is _not_
optional; it must be present.

Currently, the following header fields are defined:

`pusher` ident::
	Identify the GPG key in "Human Readable Name <email@address>"
	format.

`pushee` url::
	The repository URL (anonymized, if the URL contains
	authentication material) the user who ran `git push`
	intended to push into.

`nonce` nonce::
	The 'nonce' string the receiving repository asked the
	pushing user to include in the certificate, to prevent
	replay attacks.

The GPG signature lines are a detached signature for the contents
recorded in the push certificate before the signature block begins.
The detached signature is used to certify that the commands were
given by the pusher, who must be the signer.

Report Status
-------------

After receiving the pack data from the sender, the receiver sends a
report if 'report-status' capability is in effect.
It is a short listing of what happened in that update.  It will first
list the status of the packfile unpacking as either 'unpack ok' or
'unpack [error]'.  Then it will list the status for each of the references
that it tried to update.  Each line is either 'ok [refname]' if the
update was successful, or 'ng [refname] [error]' if the update was not.

----
  report-status     = unpack-status
		      1*(command-status)
		      flush-pkt

  unpack-status     = PKT-LINE("unpack" SP unpack-result)
  unpack-result     = "ok" / error-msg

  command-status    = command-ok / command-fail
  command-ok        = PKT-LINE("ok" SP refname)
  command-fail      = PKT-LINE("ng" SP refname SP error-msg)

  error-msg         = 1*(OCTECT) ; where not "ok"
----

Updates can be unsuccessful for a number of reasons.  The reference can have
changed since the reference discovery phase was originally sent, meaning
someone pushed in the meantime.  The reference being pushed could be a
non-fast-forward reference and the update hooks or configuration could be
set to not allow that, etc.  Also, some references can be updated while others
can be rejected.

An example client/server communication might look like this:

----
   S: 007c74730d410fcb6603ace96f1dc55ea6196122532d refs/heads/local\0report-status delete-refs ofs-delta\n
   S: 003e7d1665144a3a975c05f1f43902ddaf084e784dbe refs/heads/debug\n
   S: 003f74730d410fcb6603ace96f1dc55ea6196122532d refs/heads/master\n
   S: 003f74730d410fcb6603ace96f1dc55ea6196122532d refs/heads/team\n
   S: 0000

   C: 003e7d1665144a3a975c05f1f43902ddaf084e784dbe 74730d410fcb6603ace96f1dc55ea6196122532d refs/heads/debug\n
   C: 003e74730d410fcb6603ace96f1dc55ea6196122532d 5a3f6be755bbb7deae50065988cbfa1ffa9ab68a refs/heads/master\n
   C: 0000
   C: [PACKDATA]

   S: 000eunpack ok\n
   S: 0018ok refs/heads/debug\n
   S: 002ang refs/heads/master non-fast-forward\n
----
*/
  07070100000560000081A4000000000000000000000001645E367C00000D79000000000000000000000000000000000000006000000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/report_status.go   package packp

import (
	"bytes"
	"fmt"
	"io"
	"strings"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/format/pktline"
)

const (
	ok = "ok"
)

// ReportStatus is a report status message, as used in the git-receive-pack
// process whenever the 'report-status' capability is negotiated.
type ReportStatus struct {
	UnpackStatus    string
	CommandStatuses []*CommandStatus
}

// NewReportStatus creates a new ReportStatus message.
func NewReportStatus() *ReportStatus {
	return &ReportStatus{}
}

// Error returns the first error if any.
func (s *ReportStatus) Error() error {
	if s.UnpackStatus != ok {
		return fmt.Errorf("unpack error: %s", s.UnpackStatus)
	}

	for _, s := range s.CommandStatuses {
		if err := s.Error(); err != nil {
			return err
		}
	}

	return nil
}

// Encode writes the report status to a writer.
func (s *ReportStatus) Encode(w io.Writer) error {
	e := pktline.NewEncoder(w)
	if err := e.Encodef("unpack %s\n", s.UnpackStatus); err != nil {
		return err
	}

	for _, cs := range s.CommandStatuses {
		if err := cs.encode(w); err != nil {
			return err
		}
	}

	return e.Flush()
}

// Decode reads from the given reader and decodes a report-status message. It
// does not read more input than what is needed to fill the report status.
func (s *ReportStatus) Decode(r io.Reader) error {
	scan := pktline.NewScanner(r)
	if err := s.scanFirstLine(scan); err != nil {
		return err
	}

	if err := s.decodeReportStatus(scan.Bytes()); err != nil {
		return err
	}

	flushed := false
	for scan.Scan() {
		b := scan.Bytes()
		if isFlush(b) {
			flushed = true
			break
		}

		if err := s.decodeCommandStatus(b); err != nil {
			return err
		}
	}

	if !flushed {
		return fmt.Errorf("missing flush")
	}

	return scan.Err()
}

func (s *ReportStatus) scanFirstLine(scan *pktline.Scanner) error {
	if scan.Scan() {
		return nil
	}

	if scan.Err() != nil {
		return scan.Err()
	}

	return io.ErrUnexpectedEOF
}

func (s *ReportStatus) decodeReportStatus(b []byte) error {
	if isFlush(b) {
		return fmt.Errorf("premature flush")
	}

	b = bytes.TrimSuffix(b, eol)

	line := string(b)
	fields := strings.SplitN(line, " ", 2)
	if len(fields) != 2 || fields[0] != "unpack" {
		return fmt.Errorf("malformed unpack status: %s", line)
	}

	s.UnpackStatus = fields[1]
	return nil
}

func (s *ReportStatus) decodeCommandStatus(b []byte) error {
	b = bytes.TrimSuffix(b, eol)

	line := string(b)
	fields := strings.SplitN(line, " ", 3)
	status := ok
	if len(fields) == 3 && fields[0] == "ng" {
		status = fields[2]
	} else if len(fields) != 2 || fields[0] != "ok" {
		return fmt.Errorf("malformed command status: %s", line)
	}

	cs := &CommandStatus{
		ReferenceName: plumbing.ReferenceName(fields[1]),
		Status:        status,
	}
	s.CommandStatuses = append(s.CommandStatuses, cs)
	return nil
}

// CommandStatus is the status of a reference in a report status.
// See ReportStatus struct.
type CommandStatus struct {
	ReferenceName plumbing.ReferenceName
	Status        string
}

// Error returns the error, if any.
func (s *CommandStatus) Error() error {
	if s.Status == ok {
		return nil
	}

	return fmt.Errorf("command error on %s: %s",
		s.ReferenceName.String(), s.Status)
}

func (s *CommandStatus) encode(w io.Writer) error {
	e := pktline.NewEncoder(w)
	if s.Error() == nil {
		return e.Encodef("ok %s\n", s.ReferenceName.String())
	}

	return e.Encodef("ng %s %s\n", s.ReferenceName.String(), s.Status)
}
   07070100000561000081A4000000000000000000000001645E367C00000702000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/shallowupd.go  package packp

import (
	"bytes"
	"fmt"
	"io"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/format/pktline"
)

const (
	shallowLineLen   = 48
	unshallowLineLen = 50
)

type ShallowUpdate struct {
	Shallows   []plumbing.Hash
	Unshallows []plumbing.Hash
}

func (r *ShallowUpdate) Decode(reader io.Reader) error {
	s := pktline.NewScanner(reader)

	for s.Scan() {
		line := s.Bytes()
		line = bytes.TrimSpace(line)

		var err error
		switch {
		case bytes.HasPrefix(line, shallow):
			err = r.decodeShallowLine(line)
		case bytes.HasPrefix(line, unshallow):
			err = r.decodeUnshallowLine(line)
		case bytes.Equal(line, pktline.Flush):
			return nil
		}

		if err != nil {
			return err
		}
	}

	return s.Err()
}

func (r *ShallowUpdate) decodeShallowLine(line []byte) error {
	hash, err := r.decodeLine(line, shallow, shallowLineLen)
	if err != nil {
		return err
	}

	r.Shallows = append(r.Shallows, hash)
	return nil
}

func (r *ShallowUpdate) decodeUnshallowLine(line []byte) error {
	hash, err := r.decodeLine(line, unshallow, unshallowLineLen)
	if err != nil {
		return err
	}

	r.Unshallows = append(r.Unshallows, hash)
	return nil
}

func (r *ShallowUpdate) decodeLine(line, prefix []byte, expLen int) (plumbing.Hash, error) {
	if len(line) != expLen {
		return plumbing.ZeroHash, fmt.Errorf("malformed %s%q", prefix, line)
	}

	raw := string(line[expLen-40 : expLen])
	return plumbing.NewHash(raw), nil
}

func (r *ShallowUpdate) Encode(w io.Writer) error {
	e := pktline.NewEncoder(w)

	for _, h := range r.Shallows {
		if err := e.Encodef("%s%s\n", shallow, h.String()); err != nil {
			return err
		}
	}

	for _, h := range r.Unshallows {
		if err := e.Encodef("%s%s\n", unshallow, h.String()); err != nil {
			return err
		}
	}

	return e.Flush()
}
  07070100000562000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/sideband   07070100000563000081A4000000000000000000000001645E367C00000322000000000000000000000000000000000000006200000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/sideband/common.go package sideband

// Type sideband type "side-band" or "side-band-64k"
type Type int8

const (
	// Sideband legacy sideband type up to 1000-byte messages
	Sideband Type = iota
	// Sideband64k sideband type up to 65519-byte messages
	Sideband64k Type = iota

	// MaxPackedSize for Sideband type
	MaxPackedSize = 1000
	// MaxPackedSize64k for Sideband64k type
	MaxPackedSize64k = 65520
)

// Channel sideband channel
type Channel byte

// WithPayload encode the payload as a message
func (ch Channel) WithPayload(payload []byte) []byte {
	return append([]byte{byte(ch)}, payload...)
}

const (
	// PackData packfile content
	PackData Channel = 1
	// ProgressMessage progress messages
	ProgressMessage Channel = 2
	// ErrorMessage fatal error message just before stream aborts
	ErrorMessage Channel = 3
)
  07070100000564000081A4000000000000000000000001645E367C00000CB1000000000000000000000000000000000000006100000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/sideband/demux.go  package sideband

import (
	"errors"
	"fmt"
	"io"

	"github.com/go-git/go-git/v5/plumbing/format/pktline"
)

// ErrMaxPackedExceeded returned by Read, if the maximum packed size is exceeded
var ErrMaxPackedExceeded = errors.New("max. packed size exceeded")

// Progress where the progress information is stored
type Progress interface {
	io.Writer
}

// Demuxer demultiplexes the progress reports and error info interleaved with the
// packfile itself.
//
// A sideband has three different channels the main one, called PackData, contains
// the packfile data; the ErrorMessage channel, that contains server errors; and
// the last one, ProgressMessage channel, containing information about the ongoing
// task happening in the server (optional, can be suppressed sending NoProgress
// or Quiet capabilities to the server)
//
// In order to demultiplex the data stream, method `Read` should be called to
// retrieve the PackData channel, the incoming data from the ProgressMessage is
// written at `Progress` (if any), if any message is retrieved from the
// ErrorMessage channel an error is returned and we can assume that the
// connection has been closed.
type Demuxer struct {
	t Type
	r io.Reader
	s *pktline.Scanner

	max     int
	pending []byte

	// Progress is where the progress messages are stored
	Progress Progress
}

// NewDemuxer returns a new Demuxer for the given t and read from r
func NewDemuxer(t Type, r io.Reader) *Demuxer {
	max := MaxPackedSize64k
	if t == Sideband {
		max = MaxPackedSize
	}

	return &Demuxer{
		t:   t,
		r:   r,
		max: max,
		s:   pktline.NewScanner(r),
	}
}

// Read reads up to len(p) bytes from the PackData channel into p, an error can
// be return if an error happens when reading or if a message is sent in the
// ErrorMessage channel.
//
// When a ProgressMessage is read, is not copy to b, instead of this is written
// to the Progress
func (d *Demuxer) Read(b []byte) (n int, err error) {
	var read, req int

	req = len(b)
	for read < req {
		n, err := d.doRead(b[read:req])
		read += n

		if err != nil {
			return read, err
		}
	}

	return read, nil
}

func (d *Demuxer) doRead(b []byte) (int, error) {
	read, err := d.nextPackData()
	size := len(read)
	wanted := len(b)

	if size > wanted {
		d.pending = read[wanted:]
	}

	if wanted > size {
		wanted = size
	}

	size = copy(b, read[:wanted])
	return size, err
}

func (d *Demuxer) nextPackData() ([]byte, error) {
	content := d.getPending()
	if len(content) != 0 {
		return content, nil
	}

	if !d.s.Scan() {
		if err := d.s.Err(); err != nil {
			return nil, err
		}

		return nil, io.EOF
	}

	content = d.s.Bytes()

	size := len(content)
	if size == 0 {
		return nil, nil
	} else if size > d.max {
		return nil, ErrMaxPackedExceeded
	}

	switch Channel(content[0]) {
	case PackData:
		return content[1:], nil
	case ProgressMessage:
		if d.Progress != nil {
			_, err := d.Progress.Write(content[1:])
			return nil, err
		}
	case ErrorMessage:
		return nil, fmt.Errorf("unexpected error: %s", content[1:])
	default:
		return nil, fmt.Errorf("unknown channel %s", content)
	}

	return nil, nil
}

func (d *Demuxer) getPending() (b []byte) {
	if len(d.pending) == 0 {
		return nil
	}

	content := d.pending
	d.pending = nil

	return content
}
   07070100000565000081A4000000000000000000000001645E367C0000054B000000000000000000000000000000000000005F00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/sideband/doc.go    // Package sideband implements a sideband mutiplex/demultiplexer
package sideband

// If 'side-band' or 'side-band-64k' capabilities have been specified by
// the client, the server will send the packfile data multiplexed.
//
// Either mode indicates that the packfile data will be streamed broken
// up into packets of up to either 1000 bytes in the case of 'side_band',
// or 65520 bytes in the case of 'side_band_64k'. Each packet is made up
// of a leading 4-byte pkt-line length of how much data is in the packet,
// followed by a 1-byte stream code, followed by the actual data.
//
// The stream code can be one of:
//
//  1 - pack data
//  2 - progress messages
//  3 - fatal error message just before stream aborts
//
// The "side-band-64k" capability came about as a way for newer clients
// that can handle much larger packets to request packets that are
// actually crammed nearly full, while maintaining backward compatibility
// for the older clients.
//
// Further, with side-band and its up to 1000-byte messages, it's actually
// 999 bytes of payload and 1 byte for the stream code. With side-band-64k,
// same deal, you have up to 65519 bytes of data and 1 byte for the stream
// code.
//
// The client MUST send only maximum of one of "side-band" and "side-
// band-64k".  Server MUST diagnose it as an error if client requests
// both.
 07070100000566000081A4000000000000000000000001645E367C000005D6000000000000000000000000000000000000006100000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/sideband/muxer.go  package sideband

import (
	"io"

	"github.com/go-git/go-git/v5/plumbing/format/pktline"
)

// Muxer multiplex the packfile along with the progress messages and the error
// information. The multiplex is perform using pktline format.
type Muxer struct {
	max int
	e   *pktline.Encoder
}

const chLen = 1

// NewMuxer returns a new Muxer for the given t that writes on w.
//
// If t is equal to `Sideband` the max pack size is set to MaxPackedSize, in any
// other value is given, max pack is set to MaxPackedSize64k, that is the
// maximum length of a line in pktline format.
func NewMuxer(t Type, w io.Writer) *Muxer {
	max := MaxPackedSize64k
	if t == Sideband {
		max = MaxPackedSize
	}

	return &Muxer{
		max: max - chLen,
		e:   pktline.NewEncoder(w),
	}
}

// Write writes p in the PackData channel
func (m *Muxer) Write(p []byte) (int, error) {
	return m.WriteChannel(PackData, p)
}

// WriteChannel writes p in the given channel. This method can be used with any
// channel, but is recommend use it only for the ProgressMessage and
// ErrorMessage channels and use Write for the PackData channel
func (m *Muxer) WriteChannel(t Channel, p []byte) (int, error) {
	wrote := 0
	size := len(p)
	for wrote < size {
		n, err := m.doWrite(t, p[wrote:])
		wrote += n

		if err != nil {
			return wrote, err
		}
	}

	return wrote, nil
}

func (m *Muxer) doWrite(ch Channel, p []byte) (int, error) {
	sz := len(p)
	if sz > m.max {
		sz = m.max
	}

	return sz, m.e.Encode(ch.WithPayload(p[:sz]))
}
  07070100000567000081A4000000000000000000000001645E367C00000AE2000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/srvresp.go package packp

import (
	"bufio"
	"bytes"
	"errors"
	"fmt"
	"io"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/format/pktline"
)

const ackLineLen = 44

// ServerResponse object acknowledgement from upload-pack service
type ServerResponse struct {
	ACKs []plumbing.Hash
}

// Decode decodes the response into the struct, isMultiACK should be true, if
// the request was done with multi_ack or multi_ack_detailed capabilities.
func (r *ServerResponse) Decode(reader *bufio.Reader, isMultiACK bool) error {
	// TODO: implement support for multi_ack or multi_ack_detailed responses
	if isMultiACK {
		return errors.New("multi_ack and multi_ack_detailed are not supported")
	}

	s := pktline.NewScanner(reader)

	for s.Scan() {
		line := s.Bytes()

		if err := r.decodeLine(line); err != nil {
			return err
		}

		// we need to detect when the end of a response header and the beginning
		// of a packfile header happened, some requests to the git daemon
		// produces a duplicate ACK header even when multi_ack is not supported.
		stop, err := r.stopReading(reader)
		if err != nil {
			return err
		}

		if stop {
			break
		}
	}

	return s.Err()
}

// stopReading detects when a valid command such as ACK or NAK is found to be
// read in the buffer without moving the read pointer.
func (r *ServerResponse) stopReading(reader *bufio.Reader) (bool, error) {
	ahead, err := reader.Peek(7)
	if err == io.EOF {
		return true, nil
	}

	if err != nil {
		return false, err
	}

	if len(ahead) > 4 && r.isValidCommand(ahead[0:3]) {
		return false, nil
	}

	if len(ahead) == 7 && r.isValidCommand(ahead[4:]) {
		return false, nil
	}

	return true, nil
}

func (r *ServerResponse) isValidCommand(b []byte) bool {
	commands := [][]byte{ack, nak}
	for _, c := range commands {
		if bytes.Equal(b, c) {
			return true
		}
	}

	return false
}

func (r *ServerResponse) decodeLine(line []byte) error {
	if len(line) == 0 {
		return fmt.Errorf("unexpected flush")
	}

	if bytes.Equal(line[0:3], ack) {
		return r.decodeACKLine(line)
	}

	if bytes.Equal(line[0:3], nak) {
		return nil
	}

	return fmt.Errorf("unexpected content %q", string(line))
}

func (r *ServerResponse) decodeACKLine(line []byte) error {
	if len(line) < ackLineLen {
		return fmt.Errorf("malformed ACK %q", line)
	}

	sp := bytes.Index(line, []byte(" "))
	h := plumbing.NewHash(string(line[sp+1 : sp+41]))
	r.ACKs = append(r.ACKs, h)
	return nil
}

// Encode encodes the ServerResponse into a writer.
func (r *ServerResponse) Encode(w io.Writer) error {
	if len(r.ACKs) > 1 {
		return errors.New("multi_ack and multi_ack_detailed are not supported")
	}

	e := pktline.NewEncoder(w)
	if len(r.ACKs) == 0 {
		return e.Encodef("%s\n", nak)
	}

	return e.Encodef("%s %s\n", ack, r.ACKs[0].String())
}
  07070100000568000081A4000000000000000000000001645E367C00001380000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/ulreq.go   package packp

import (
	"fmt"
	"time"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/protocol/packp/capability"
)

// UploadRequest values represent the information transmitted on a
// upload-request message.  Values from this type are not zero-value
// safe, use the New function instead.
// This is a low level type, use UploadPackRequest instead.
type UploadRequest struct {
	Capabilities *capability.List
	Wants        []plumbing.Hash
	Shallows     []plumbing.Hash
	Depth        Depth
}

// Depth values stores the desired depth of the requested packfile: see
// DepthCommit, DepthSince and DepthReference.
type Depth interface {
	isDepth()
	IsZero() bool
}

// DepthCommits values stores the maximum number of requested commits in
// the packfile.  Zero means infinite.  A negative value will have
// undefined consequences.
type DepthCommits int

func (d DepthCommits) isDepth() {}

func (d DepthCommits) IsZero() bool {
	return d == 0
}

// DepthSince values requests only commits newer than the specified time.
type DepthSince time.Time

func (d DepthSince) isDepth() {}

func (d DepthSince) IsZero() bool {
	return time.Time(d).IsZero()
}

// DepthReference requests only commits not to found in the specified reference.
type DepthReference string

func (d DepthReference) isDepth() {}

func (d DepthReference) IsZero() bool {
	return string(d) == ""
}

// NewUploadRequest returns a pointer to a new UploadRequest value, ready to be
// used. It has no capabilities, wants or shallows and an infinite depth. Please
// note that to encode an upload-request it has to have at least one wanted hash.
func NewUploadRequest() *UploadRequest {
	return &UploadRequest{
		Capabilities: capability.NewList(),
		Wants:        []plumbing.Hash{},
		Shallows:     []plumbing.Hash{},
		Depth:        DepthCommits(0),
	}
}

// NewUploadRequestFromCapabilities returns a pointer to a new UploadRequest
// value, the request capabilities are filled with the most optimal ones, based
// on the adv value (advertised capabilities), the UploadRequest generated it
// has no wants or shallows and an infinite depth.
func NewUploadRequestFromCapabilities(adv *capability.List) *UploadRequest {
	r := NewUploadRequest()

	if adv.Supports(capability.MultiACKDetailed) {
		r.Capabilities.Set(capability.MultiACKDetailed)
	} else if adv.Supports(capability.MultiACK) {
		r.Capabilities.Set(capability.MultiACK)
	}

	if adv.Supports(capability.Sideband64k) {
		r.Capabilities.Set(capability.Sideband64k)
	} else if adv.Supports(capability.Sideband) {
		r.Capabilities.Set(capability.Sideband)
	}

	if adv.Supports(capability.ThinPack) {
		r.Capabilities.Set(capability.ThinPack)
	}

	if adv.Supports(capability.OFSDelta) {
		r.Capabilities.Set(capability.OFSDelta)
	}

	if adv.Supports(capability.Agent) {
		r.Capabilities.Set(capability.Agent, capability.DefaultAgent)
	}

	return r
}

// Validate validates the content of UploadRequest, following the next rules:
//   - Wants MUST have at least one reference
//   - capability.Shallow MUST be present if Shallows is not empty
//   - is a non-zero DepthCommits is given capability.Shallow MUST be present
//   - is a DepthSince is given capability.Shallow MUST be present
//   - is a DepthReference is given capability.DeepenNot MUST be present
//   - MUST contain only maximum of one of capability.Sideband and capability.Sideband64k
//   - MUST contain only maximum of one of capability.MultiACK and capability.MultiACKDetailed
func (req *UploadRequest) Validate() error {
	if len(req.Wants) == 0 {
		return fmt.Errorf("want can't be empty")
	}

	if err := req.validateRequiredCapabilities(); err != nil {
		return err
	}

	if err := req.validateConflictCapabilities(); err != nil {
		return err
	}

	return nil
}

func (req *UploadRequest) validateRequiredCapabilities() error {
	msg := "missing capability %s"

	if len(req.Shallows) != 0 && !req.Capabilities.Supports(capability.Shallow) {
		return fmt.Errorf(msg, capability.Shallow)
	}

	switch req.Depth.(type) {
	case DepthCommits:
		if req.Depth != DepthCommits(0) {
			if !req.Capabilities.Supports(capability.Shallow) {
				return fmt.Errorf(msg, capability.Shallow)
			}
		}
	case DepthSince:
		if !req.Capabilities.Supports(capability.DeepenSince) {
			return fmt.Errorf(msg, capability.DeepenSince)
		}
	case DepthReference:
		if !req.Capabilities.Supports(capability.DeepenNot) {
			return fmt.Errorf(msg, capability.DeepenNot)
		}
	}

	return nil
}

func (req *UploadRequest) validateConflictCapabilities() error {
	msg := "capabilities %s and %s are mutually exclusive"
	if req.Capabilities.Supports(capability.Sideband) &&
		req.Capabilities.Supports(capability.Sideband64k) {
		return fmt.Errorf(msg, capability.Sideband, capability.Sideband64k)
	}

	if req.Capabilities.Supports(capability.MultiACK) &&
		req.Capabilities.Supports(capability.MultiACKDetailed) {
		return fmt.Errorf(msg, capability.MultiACK, capability.MultiACKDetailed)
	}

	return nil
}
07070100000569000081A4000000000000000000000001645E367C00001562000000000000000000000000000000000000005F00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/ulreq_decode.go    package packp

import (
	"bytes"
	"encoding/hex"
	"fmt"
	"io"
	"strconv"
	"time"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/format/pktline"
)

// Decode reads the next upload-request form its input and
// stores it in the UploadRequest.
func (req *UploadRequest) Decode(r io.Reader) error {
	d := newUlReqDecoder(r)
	return d.Decode(req)
}

type ulReqDecoder struct {
	s     *pktline.Scanner // a pkt-line scanner from the input stream
	line  []byte           // current pkt-line contents, use parser.nextLine() to make it advance
	nLine int              // current pkt-line number for debugging, begins at 1
	err   error            // sticky error, use the parser.error() method to fill this out
	data  *UploadRequest   // parsed data is stored here
}

func newUlReqDecoder(r io.Reader) *ulReqDecoder {
	return &ulReqDecoder{
		s: pktline.NewScanner(r),
	}
}

func (d *ulReqDecoder) Decode(v *UploadRequest) error {
	d.data = v

	for state := d.decodeFirstWant; state != nil; {
		state = state()
	}

	return d.err
}

// fills out the parser stiky error
func (d *ulReqDecoder) error(format string, a ...interface{}) {
	msg := fmt.Sprintf(
		"pkt-line %d: %s", d.nLine,
		fmt.Sprintf(format, a...),
	)

	d.err = NewErrUnexpectedData(msg, d.line)
}

// Reads a new pkt-line from the scanner, makes its payload available as
// p.line and increments p.nLine.  A successful invocation returns true,
// otherwise, false is returned and the sticky error is filled out
// accordingly.  Trims eols at the end of the payloads.
func (d *ulReqDecoder) nextLine() bool {
	d.nLine++

	if !d.s.Scan() {
		if d.err = d.s.Err(); d.err != nil {
			return false
		}

		d.error("EOF")
		return false
	}

	d.line = d.s.Bytes()
	d.line = bytes.TrimSuffix(d.line, eol)

	return true
}

// Expected format: want <hash>[ capabilities]
func (d *ulReqDecoder) decodeFirstWant() stateFn {
	if ok := d.nextLine(); !ok {
		return nil
	}

	if !bytes.HasPrefix(d.line, want) {
		d.error("missing 'want ' prefix")
		return nil
	}
	d.line = bytes.TrimPrefix(d.line, want)

	hash, ok := d.readHash()
	if !ok {
		return nil
	}
	d.data.Wants = append(d.data.Wants, hash)

	return d.decodeCaps
}

func (d *ulReqDecoder) readHash() (plumbing.Hash, bool) {
	if len(d.line) < hashSize {
		d.err = fmt.Errorf("malformed hash: %v", d.line)
		return plumbing.ZeroHash, false
	}

	var hash plumbing.Hash
	if _, err := hex.Decode(hash[:], d.line[:hashSize]); err != nil {
		d.error("invalid hash text: %s", err)
		return plumbing.ZeroHash, false
	}
	d.line = d.line[hashSize:]

	return hash, true
}

// Expected format: sp cap1 sp cap2 sp cap3...
func (d *ulReqDecoder) decodeCaps() stateFn {
	d.line = bytes.TrimPrefix(d.line, sp)
	if err := d.data.Capabilities.Decode(d.line); err != nil {
		d.error("invalid capabilities: %s", err)
	}

	return d.decodeOtherWants
}

// Expected format: want <hash>
func (d *ulReqDecoder) decodeOtherWants() stateFn {
	if ok := d.nextLine(); !ok {
		return nil
	}

	if bytes.HasPrefix(d.line, shallow) {
		return d.decodeShallow
	}

	if bytes.HasPrefix(d.line, deepen) {
		return d.decodeDeepen
	}

	if len(d.line) == 0 {
		return nil
	}

	if !bytes.HasPrefix(d.line, want) {
		d.error("unexpected payload while expecting a want: %q", d.line)
		return nil
	}
	d.line = bytes.TrimPrefix(d.line, want)

	hash, ok := d.readHash()
	if !ok {
		return nil
	}
	d.data.Wants = append(d.data.Wants, hash)

	return d.decodeOtherWants
}

// Expected format: shallow <hash>
func (d *ulReqDecoder) decodeShallow() stateFn {
	if bytes.HasPrefix(d.line, deepen) {
		return d.decodeDeepen
	}

	if len(d.line) == 0 {
		return nil
	}

	if !bytes.HasPrefix(d.line, shallow) {
		d.error("unexpected payload while expecting a shallow: %q", d.line)
		return nil
	}
	d.line = bytes.TrimPrefix(d.line, shallow)

	hash, ok := d.readHash()
	if !ok {
		return nil
	}
	d.data.Shallows = append(d.data.Shallows, hash)

	if ok := d.nextLine(); !ok {
		return nil
	}

	return d.decodeShallow
}

// Expected format: deepen <n> / deepen-since <ul> / deepen-not <ref>
func (d *ulReqDecoder) decodeDeepen() stateFn {
	if bytes.HasPrefix(d.line, deepenCommits) {
		return d.decodeDeepenCommits
	}

	if bytes.HasPrefix(d.line, deepenSince) {
		return d.decodeDeepenSince
	}

	if bytes.HasPrefix(d.line, deepenReference) {
		return d.decodeDeepenReference
	}

	if len(d.line) == 0 {
		return nil
	}

	d.error("unexpected deepen specification: %q", d.line)
	return nil
}

func (d *ulReqDecoder) decodeDeepenCommits() stateFn {
	d.line = bytes.TrimPrefix(d.line, deepenCommits)

	var n int
	if n, d.err = strconv.Atoi(string(d.line)); d.err != nil {
		return nil
	}
	if n < 0 {
		d.err = fmt.Errorf("negative depth")
		return nil
	}
	d.data.Depth = DepthCommits(n)

	return d.decodeFlush
}

func (d *ulReqDecoder) decodeDeepenSince() stateFn {
	d.line = bytes.TrimPrefix(d.line, deepenSince)

	var secs int64
	secs, d.err = strconv.ParseInt(string(d.line), 10, 64)
	if d.err != nil {
		return nil
	}
	t := time.Unix(secs, 0).UTC()
	d.data.Depth = DepthSince(t)

	return d.decodeFlush
}

func (d *ulReqDecoder) decodeDeepenReference() stateFn {
	d.line = bytes.TrimPrefix(d.line, deepenReference)

	d.data.Depth = DepthReference(string(d.line))

	return d.decodeFlush
}

func (d *ulReqDecoder) decodeFlush() stateFn {
	if ok := d.nextLine(); !ok {
		return nil
	}

	if len(d.line) != 0 {
		d.err = fmt.Errorf("unexpected payload while expecting a flush-pkt: %q", d.line)
	}

	return nil
}
  0707010000056A000081A4000000000000000000000001645E367C00000C10000000000000000000000000000000000000005F00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/ulreq_encode.go    package packp

import (
	"bytes"
	"fmt"
	"io"
	"time"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/format/pktline"
)

// Encode writes the UlReq encoding of u to the stream.
//
// All the payloads will end with a newline character.  Wants and
// shallows are sorted alphabetically.  A depth of 0 means no depth
// request is sent.
func (req *UploadRequest) Encode(w io.Writer) error {
	e := newUlReqEncoder(w)
	return e.Encode(req)
}

type ulReqEncoder struct {
	pe   *pktline.Encoder // where to write the encoded data
	data *UploadRequest   // the data to encode
	err  error            // sticky error
}

func newUlReqEncoder(w io.Writer) *ulReqEncoder {
	return &ulReqEncoder{
		pe: pktline.NewEncoder(w),
	}
}

func (e *ulReqEncoder) Encode(v *UploadRequest) error {
	e.data = v

	if len(v.Wants) == 0 {
		return fmt.Errorf("empty wants provided")
	}

	plumbing.HashesSort(e.data.Wants)
	for state := e.encodeFirstWant; state != nil; {
		state = state()
	}

	return e.err
}

func (e *ulReqEncoder) encodeFirstWant() stateFn {
	var err error
	if e.data.Capabilities.IsEmpty() {
		err = e.pe.Encodef("want %s\n", e.data.Wants[0])
	} else {
		err = e.pe.Encodef(
			"want %s %s\n",
			e.data.Wants[0],
			e.data.Capabilities.String(),
		)
	}

	if err != nil {
		e.err = fmt.Errorf("encoding first want line: %s", err)
		return nil
	}

	return e.encodeAdditionalWants
}

func (e *ulReqEncoder) encodeAdditionalWants() stateFn {
	last := e.data.Wants[0]
	for _, w := range e.data.Wants[1:] {
		if bytes.Equal(last[:], w[:]) {
			continue
		}

		if err := e.pe.Encodef("want %s\n", w); err != nil {
			e.err = fmt.Errorf("encoding want %q: %s", w, err)
			return nil
		}

		last = w
	}

	return e.encodeShallows
}

func (e *ulReqEncoder) encodeShallows() stateFn {
	plumbing.HashesSort(e.data.Shallows)

	var last plumbing.Hash
	for _, s := range e.data.Shallows {
		if bytes.Equal(last[:], s[:]) {
			continue
		}

		if err := e.pe.Encodef("shallow %s\n", s); err != nil {
			e.err = fmt.Errorf("encoding shallow %q: %s", s, err)
			return nil
		}

		last = s
	}

	return e.encodeDepth
}

func (e *ulReqEncoder) encodeDepth() stateFn {
	switch depth := e.data.Depth.(type) {
	case DepthCommits:
		if depth != 0 {
			commits := int(depth)
			if err := e.pe.Encodef("deepen %d\n", commits); err != nil {
				e.err = fmt.Errorf("encoding depth %d: %s", depth, err)
				return nil
			}
		}
	case DepthSince:
		when := time.Time(depth).UTC()
		if err := e.pe.Encodef("deepen-since %d\n", when.Unix()); err != nil {
			e.err = fmt.Errorf("encoding depth %s: %s", when, err)
			return nil
		}
	case DepthReference:
		reference := string(depth)
		if err := e.pe.Encodef("deepen-not %s\n", reference); err != nil {
			e.err = fmt.Errorf("encoding depth %s: %s", reference, err)
			return nil
		}
	default:
		e.err = fmt.Errorf("unsupported depth type")
		return nil
	}

	return e.encodeFlush
}

func (e *ulReqEncoder) encodeFlush() stateFn {
	if err := e.pe.Flush(); err != nil {
		e.err = fmt.Errorf("encoding flush-pkt: %s", err)
		return nil
	}

	return nil
}
0707010000056B000081A4000000000000000000000001645E367C00000AD3000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/updreq.go  package packp

import (
	"errors"
	"io"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/protocol/packp/capability"
	"github.com/go-git/go-git/v5/plumbing/protocol/packp/sideband"
)

var (
	ErrEmptyCommands    = errors.New("commands cannot be empty")
	ErrMalformedCommand = errors.New("malformed command")
)

// ReferenceUpdateRequest values represent reference upload requests.
// Values from this type are not zero-value safe, use the New function instead.
type ReferenceUpdateRequest struct {
	Capabilities *capability.List
	Commands     []*Command
	Shallow      *plumbing.Hash
	// Packfile contains an optional packfile reader.
	Packfile io.ReadCloser

	// Progress receives sideband progress messages from the server
	Progress sideband.Progress
}

// New returns a pointer to a new ReferenceUpdateRequest value.
func NewReferenceUpdateRequest() *ReferenceUpdateRequest {
	return &ReferenceUpdateRequest{
		// TODO: Add support for push-cert
		Capabilities: capability.NewList(),
		Commands:     nil,
	}
}

// NewReferenceUpdateRequestFromCapabilities returns a pointer to a new
// ReferenceUpdateRequest value, the request capabilities are filled with the
// most optimal ones, based on the adv value (advertised capabilities), the
// ReferenceUpdateRequest contains no commands
//
// It does set the following capabilities:
//   - agent
//   - report-status
//   - ofs-delta
//   - ref-delta
//   - delete-refs
// It leaves up to the user to add the following capabilities later:
//   - atomic
//   - ofs-delta
//   - side-band
//   - side-band-64k
//   - quiet
//   - push-cert
func NewReferenceUpdateRequestFromCapabilities(adv *capability.List) *ReferenceUpdateRequest {
	r := NewReferenceUpdateRequest()

	if adv.Supports(capability.Agent) {
		r.Capabilities.Set(capability.Agent, capability.DefaultAgent)
	}

	if adv.Supports(capability.ReportStatus) {
		r.Capabilities.Set(capability.ReportStatus)
	}

	return r
}

func (req *ReferenceUpdateRequest) validate() error {
	if len(req.Commands) == 0 {
		return ErrEmptyCommands
	}

	for _, c := range req.Commands {
		if err := c.validate(); err != nil {
			return err
		}
	}

	return nil
}

type Action string

const (
	Create  Action = "create"
	Update         = "update"
	Delete         = "delete"
	Invalid        = "invalid"
)

type Command struct {
	Name plumbing.ReferenceName
	Old  plumbing.Hash
	New  plumbing.Hash
}

func (c *Command) Action() Action {
	if c.Old == plumbing.ZeroHash && c.New == plumbing.ZeroHash {
		return Invalid
	}

	if c.Old == plumbing.ZeroHash {
		return Create
	}

	if c.New == plumbing.ZeroHash {
		return Delete
	}

	return Update
}

func (c *Command) validate() error {
	if c.Action() == Invalid {
		return ErrMalformedCommand
	}

	return nil
}
 0707010000056C000081A4000000000000000000000001645E367C00001424000000000000000000000000000000000000006000000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/updreq_decode.go   package packp

import (
	"bytes"
	"encoding/hex"
	"errors"
	"fmt"
	"io"
	"io/ioutil"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/format/pktline"
)

var (
	shallowLineLength       = len(shallow) + hashSize
	minCommandLength        = hashSize*2 + 2 + 1
	minCommandAndCapsLength = minCommandLength + 1
)

var (
	ErrEmpty                        = errors.New("empty update-request message")
	errNoCommands                   = errors.New("unexpected EOF before any command")
	errMissingCapabilitiesDelimiter = errors.New("capabilities delimiter not found")
)

func errMalformedRequest(reason string) error {
	return fmt.Errorf("malformed request: %s", reason)
}

func errInvalidHashSize(got int) error {
	return fmt.Errorf("invalid hash size: expected %d, got %d",
		hashSize, got)
}

func errInvalidHash(err error) error {
	return fmt.Errorf("invalid hash: %s", err.Error())
}

func errInvalidShallowLineLength(got int) error {
	return errMalformedRequest(fmt.Sprintf(
		"invalid shallow line length: expected %d, got %d",
		shallowLineLength, got))
}

func errInvalidCommandCapabilitiesLineLength(got int) error {
	return errMalformedRequest(fmt.Sprintf(
		"invalid command and capabilities line length: expected at least %d, got %d",
		minCommandAndCapsLength, got))
}

func errInvalidCommandLineLength(got int) error {
	return errMalformedRequest(fmt.Sprintf(
		"invalid command line length: expected at least %d, got %d",
		minCommandLength, got))
}

func errInvalidShallowObjId(err error) error {
	return errMalformedRequest(
		fmt.Sprintf("invalid shallow object id: %s", err.Error()))
}

func errInvalidOldObjId(err error) error {
	return errMalformedRequest(
		fmt.Sprintf("invalid old object id: %s", err.Error()))
}

func errInvalidNewObjId(err error) error {
	return errMalformedRequest(
		fmt.Sprintf("invalid new object id: %s", err.Error()))
}

func errMalformedCommand(err error) error {
	return errMalformedRequest(fmt.Sprintf(
		"malformed command: %s", err.Error()))
}

// Decode reads the next update-request message form the reader and wr
func (req *ReferenceUpdateRequest) Decode(r io.Reader) error {
	var rc io.ReadCloser
	var ok bool
	rc, ok = r.(io.ReadCloser)
	if !ok {
		rc = ioutil.NopCloser(r)
	}

	d := &updReqDecoder{r: rc, s: pktline.NewScanner(r)}
	return d.Decode(req)
}

type updReqDecoder struct {
	r   io.ReadCloser
	s   *pktline.Scanner
	req *ReferenceUpdateRequest
}

func (d *updReqDecoder) Decode(req *ReferenceUpdateRequest) error {
	d.req = req
	funcs := []func() error{
		d.scanLine,
		d.decodeShallow,
		d.decodeCommandAndCapabilities,
		d.decodeCommands,
		d.setPackfile,
		req.validate,
	}

	for _, f := range funcs {
		if err := f(); err != nil {
			return err
		}
	}

	return nil
}

func (d *updReqDecoder) scanLine() error {
	if ok := d.s.Scan(); !ok {
		return d.scanErrorOr(ErrEmpty)
	}

	return nil
}

func (d *updReqDecoder) decodeShallow() error {
	b := d.s.Bytes()

	if !bytes.HasPrefix(b, shallowNoSp) {
		return nil
	}

	if len(b) != shallowLineLength {
		return errInvalidShallowLineLength(len(b))
	}

	h, err := parseHash(string(b[len(shallow):]))
	if err != nil {
		return errInvalidShallowObjId(err)
	}

	if ok := d.s.Scan(); !ok {
		return d.scanErrorOr(errNoCommands)
	}

	d.req.Shallow = &h

	return nil
}

func (d *updReqDecoder) decodeCommands() error {
	for {
		b := d.s.Bytes()
		if bytes.Equal(b, pktline.Flush) {
			return nil
		}

		c, err := parseCommand(b)
		if err != nil {
			return err
		}

		d.req.Commands = append(d.req.Commands, c)

		if ok := d.s.Scan(); !ok {
			return d.s.Err()
		}
	}
}

func (d *updReqDecoder) decodeCommandAndCapabilities() error {
	b := d.s.Bytes()
	i := bytes.IndexByte(b, 0)
	if i == -1 {
		return errMissingCapabilitiesDelimiter
	}

	if len(b) < minCommandAndCapsLength {
		return errInvalidCommandCapabilitiesLineLength(len(b))
	}

	cmd, err := parseCommand(b[:i])
	if err != nil {
		return err
	}

	d.req.Commands = append(d.req.Commands, cmd)

	if err := d.req.Capabilities.Decode(b[i+1:]); err != nil {
		return err
	}

	if err := d.scanLine(); err != nil {
		return err
	}

	return nil
}

func (d *updReqDecoder) setPackfile() error {
	d.req.Packfile = d.r

	return nil
}

func parseCommand(b []byte) (*Command, error) {
	if len(b) < minCommandLength {
		return nil, errInvalidCommandLineLength(len(b))
	}

	var (
		os, ns string
		n      plumbing.ReferenceName
	)
	if _, err := fmt.Sscanf(string(b), "%s %s %s", &os, &ns, &n); err != nil {
		return nil, errMalformedCommand(err)
	}

	oh, err := parseHash(os)
	if err != nil {
		return nil, errInvalidOldObjId(err)
	}

	nh, err := parseHash(ns)
	if err != nil {
		return nil, errInvalidNewObjId(err)
	}

	return &Command{Old: oh, New: nh, Name: n}, nil
}

func parseHash(s string) (plumbing.Hash, error) {
	if len(s) != hashSize {
		return plumbing.ZeroHash, errInvalidHashSize(len(s))
	}

	if _, err := hex.DecodeString(s); err != nil {
		return plumbing.ZeroHash, errInvalidHash(err)
	}

	h := plumbing.NewHash(s)
	return h, nil
}

func (d *updReqDecoder) scanErrorOr(origErr error) error {
	if err := d.s.Err(); err != nil {
		return err
	}

	return origErr
}
0707010000056D000081A4000000000000000000000001645E367C000005D0000000000000000000000000000000000000006000000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/updreq_encode.go   package packp

import (
	"fmt"
	"io"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/format/pktline"
	"github.com/go-git/go-git/v5/plumbing/protocol/packp/capability"
)

var (
	zeroHashString = plumbing.ZeroHash.String()
)

// Encode writes the ReferenceUpdateRequest encoding to the stream.
func (req *ReferenceUpdateRequest) Encode(w io.Writer) error {
	if err := req.validate(); err != nil {
		return err
	}

	e := pktline.NewEncoder(w)

	if err := req.encodeShallow(e, req.Shallow); err != nil {
		return err
	}

	if err := req.encodeCommands(e, req.Commands, req.Capabilities); err != nil {
		return err
	}

	if req.Packfile != nil {
		if _, err := io.Copy(w, req.Packfile); err != nil {
			return err
		}

		return req.Packfile.Close()
	}

	return nil
}

func (req *ReferenceUpdateRequest) encodeShallow(e *pktline.Encoder,
	h *plumbing.Hash) error {

	if h == nil {
		return nil
	}

	objId := []byte(h.String())
	return e.Encodef("%s%s", shallow, objId)
}

func (req *ReferenceUpdateRequest) encodeCommands(e *pktline.Encoder,
	cmds []*Command, cap *capability.List) error {

	if err := e.Encodef("%s\x00%s",
		formatCommand(cmds[0]), cap.String()); err != nil {
		return err
	}

	for _, cmd := range cmds[1:] {
		if err := e.Encodef(formatCommand(cmd)); err != nil {
			return err
		}
	}

	return e.Flush()
}

func formatCommand(cmd *Command) string {
	o := cmd.Old.String()
	n := cmd.New.String()
	return fmt.Sprintf("%s %s %s", o, n, cmd.Name)
}
0707010000056E000081A4000000000000000000000001645E367C00000995000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/uppackreq.go   package packp

import (
	"bytes"
	"fmt"
	"io"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/format/pktline"
	"github.com/go-git/go-git/v5/plumbing/protocol/packp/capability"
)

// UploadPackRequest represents a upload-pack request.
// Zero-value is not safe, use NewUploadPackRequest instead.
type UploadPackRequest struct {
	UploadRequest
	UploadHaves
}

// NewUploadPackRequest creates a new UploadPackRequest and returns a pointer.
func NewUploadPackRequest() *UploadPackRequest {
	ur := NewUploadRequest()
	return &UploadPackRequest{
		UploadHaves:   UploadHaves{},
		UploadRequest: *ur,
	}
}

// NewUploadPackRequestFromCapabilities creates a new UploadPackRequest and
// returns a pointer. The request capabilities are filled with the most optimal
// ones, based on the adv value (advertised capabilities), the UploadPackRequest
// it has no wants, haves or shallows and an infinite depth
func NewUploadPackRequestFromCapabilities(adv *capability.List) *UploadPackRequest {
	ur := NewUploadRequestFromCapabilities(adv)
	return &UploadPackRequest{
		UploadHaves:   UploadHaves{},
		UploadRequest: *ur,
	}
}

// IsEmpty a request if empty if Haves are contained in the Wants, or if Wants
// length is zero
func (r *UploadPackRequest) IsEmpty() bool {
	return isSubset(r.Wants, r.Haves)
}

func isSubset(needle []plumbing.Hash, haystack []plumbing.Hash) bool {
	for _, h := range needle {
		found := false
		for _, oh := range haystack {
			if h == oh {
				found = true
				break
			}
		}

		if !found {
			return false
		}
	}

	return true
}

// UploadHaves is a message to signal the references that a client has in a
// upload-pack. Do not use this directly. Use UploadPackRequest request instead.
type UploadHaves struct {
	Haves []plumbing.Hash
}

// Encode encodes the UploadHaves into the Writer. If flush is true, a flush
// command will be encoded at the end of the writer content.
func (u *UploadHaves) Encode(w io.Writer, flush bool) error {
	e := pktline.NewEncoder(w)

	plumbing.HashesSort(u.Haves)

	var last plumbing.Hash
	for _, have := range u.Haves {
		if bytes.Equal(last[:], have[:]) {
			continue
		}

		if err := e.Encodef("have %s\n", have); err != nil {
			return fmt.Errorf("sending haves for %q: %s", have, err)
		}

		last = have
	}

	if flush && len(u.Haves) != 0 {
		if err := e.Flush(); err != nil {
			return fmt.Errorf("sending flush-pkt after haves: %s", err)
		}
	}

	return nil
}
   0707010000056F000081A4000000000000000000000001645E367C00000AD9000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/protocol/packp/uppackresp.go  package packp

import (
	"errors"
	"io"

	"bufio"

	"github.com/go-git/go-git/v5/plumbing/protocol/packp/capability"
	"github.com/go-git/go-git/v5/utils/ioutil"
)

// ErrUploadPackResponseNotDecoded is returned if Read is called without
// decoding first
var ErrUploadPackResponseNotDecoded = errors.New("upload-pack-response should be decoded")

// UploadPackResponse contains all the information responded by the upload-pack
// service, the response implements io.ReadCloser that allows to read the
// packfile directly from it.
type UploadPackResponse struct {
	ShallowUpdate
	ServerResponse

	r          io.ReadCloser
	isShallow  bool
	isMultiACK bool
	isOk       bool
}

// NewUploadPackResponse create a new UploadPackResponse instance, the request
// being responded by the response is required.
func NewUploadPackResponse(req *UploadPackRequest) *UploadPackResponse {
	isShallow := !req.Depth.IsZero()
	isMultiACK := req.Capabilities.Supports(capability.MultiACK) ||
		req.Capabilities.Supports(capability.MultiACKDetailed)

	return &UploadPackResponse{
		isShallow:  isShallow,
		isMultiACK: isMultiACK,
	}
}

// NewUploadPackResponseWithPackfile creates a new UploadPackResponse instance,
// and sets its packfile reader.
func NewUploadPackResponseWithPackfile(req *UploadPackRequest,
	pf io.ReadCloser) *UploadPackResponse {

	r := NewUploadPackResponse(req)
	r.r = pf
	return r
}

// Decode decodes all the responses sent by upload-pack service into the struct
// and prepares it to read the packfile using the Read method
func (r *UploadPackResponse) Decode(reader io.ReadCloser) error {
	buf := bufio.NewReader(reader)

	if r.isShallow {
		if err := r.ShallowUpdate.Decode(buf); err != nil {
			return err
		}
	}

	if err := r.ServerResponse.Decode(buf, r.isMultiACK); err != nil {
		return err
	}

	// now the reader is ready to read the packfile content
	r.r = ioutil.NewReadCloser(buf, reader)

	return nil
}

// Encode encodes an UploadPackResponse.
func (r *UploadPackResponse) Encode(w io.Writer) (err error) {
	if r.isShallow {
		if err := r.ShallowUpdate.Encode(w); err != nil {
			return err
		}
	}

	if err := r.ServerResponse.Encode(w); err != nil {
		return err
	}

	defer ioutil.CheckClose(r.r, &err)
	_, err = io.Copy(w, r.r)
	return err
}

// Read reads the packfile data, if the request was done with any Sideband
// capability the content read should be demultiplexed. If the methods wasn't
// called before the ErrUploadPackResponseNotDecoded will be return
func (r *UploadPackResponse) Read(p []byte) (int, error) {
	if r.r == nil {
		return 0, ErrUploadPackResponseNotDecoded
	}

	return r.r.Read(p)
}

// Close the underlying reader, if any
func (r *UploadPackResponse) Close() error {
	if r.r == nil {
		return nil
	}

	return r.r.Close()
}
   07070100000570000081A4000000000000000000000001645E367C000013B7000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/reference.go  package plumbing

import (
	"errors"
	"fmt"
	"strings"
)

const (
	refPrefix       = "refs/"
	refHeadPrefix   = refPrefix + "heads/"
	refTagPrefix    = refPrefix + "tags/"
	refRemotePrefix = refPrefix + "remotes/"
	refNotePrefix   = refPrefix + "notes/"
	symrefPrefix    = "ref: "
)

// RefRevParseRules are a set of rules to parse references into short names.
// These are the same rules as used by git in shorten_unambiguous_ref.
// See: https://github.com/git/git/blob/e0aaa1b6532cfce93d87af9bc813fb2e7a7ce9d7/refs.c#L417
var RefRevParseRules = []string{
	"refs/%s",
	"refs/tags/%s",
	"refs/heads/%s",
	"refs/remotes/%s",
	"refs/remotes/%s/HEAD",
}

var (
	ErrReferenceNotFound = errors.New("reference not found")
)

// ReferenceType reference type's
type ReferenceType int8

const (
	InvalidReference  ReferenceType = 0
	HashReference     ReferenceType = 1
	SymbolicReference ReferenceType = 2
)

func (r ReferenceType) String() string {
	switch r {
	case InvalidReference:
		return "invalid-reference"
	case HashReference:
		return "hash-reference"
	case SymbolicReference:
		return "symbolic-reference"
	}

	return ""
}

// ReferenceName reference name's
type ReferenceName string

// NewBranchReferenceName returns a reference name describing a branch based on
// his short name.
func NewBranchReferenceName(name string) ReferenceName {
	return ReferenceName(refHeadPrefix + name)
}

// NewNoteReferenceName returns a reference name describing a note based on his
// short name.
func NewNoteReferenceName(name string) ReferenceName {
	return ReferenceName(refNotePrefix + name)
}

// NewRemoteReferenceName returns a reference name describing a remote branch
// based on his short name and the remote name.
func NewRemoteReferenceName(remote, name string) ReferenceName {
	return ReferenceName(refRemotePrefix + fmt.Sprintf("%s/%s", remote, name))
}

// NewRemoteHEADReferenceName returns a reference name describing a the HEAD
// branch of a remote.
func NewRemoteHEADReferenceName(remote string) ReferenceName {
	return ReferenceName(refRemotePrefix + fmt.Sprintf("%s/%s", remote, HEAD))
}

// NewTagReferenceName returns a reference name describing a tag based on short
// his name.
func NewTagReferenceName(name string) ReferenceName {
	return ReferenceName(refTagPrefix + name)
}

// IsBranch check if a reference is a branch
func (r ReferenceName) IsBranch() bool {
	return strings.HasPrefix(string(r), refHeadPrefix)
}

// IsNote check if a reference is a note
func (r ReferenceName) IsNote() bool {
	return strings.HasPrefix(string(r), refNotePrefix)
}

// IsRemote check if a reference is a remote
func (r ReferenceName) IsRemote() bool {
	return strings.HasPrefix(string(r), refRemotePrefix)
}

// IsTag check if a reference is a tag
func (r ReferenceName) IsTag() bool {
	return strings.HasPrefix(string(r), refTagPrefix)
}

func (r ReferenceName) String() string {
	return string(r)
}

// Short returns the short name of a ReferenceName
func (r ReferenceName) Short() string {
	s := string(r)
	res := s
	for _, format := range RefRevParseRules {
		_, err := fmt.Sscanf(s, format, &res)
		if err == nil {
			continue
		}
	}

	return res
}

const (
	HEAD   ReferenceName = "HEAD"
	Master ReferenceName = "refs/heads/master"
)

// Reference is a representation of git reference
type Reference struct {
	t      ReferenceType
	n      ReferenceName
	h      Hash
	target ReferenceName
}

// NewReferenceFromStrings creates a reference from name and target as string,
// the resulting reference can be a SymbolicReference or a HashReference base
// on the target provided
func NewReferenceFromStrings(name, target string) *Reference {
	n := ReferenceName(name)

	if strings.HasPrefix(target, symrefPrefix) {
		target := ReferenceName(target[len(symrefPrefix):])
		return NewSymbolicReference(n, target)
	}

	return NewHashReference(n, NewHash(target))
}

// NewSymbolicReference creates a new SymbolicReference reference
func NewSymbolicReference(n, target ReferenceName) *Reference {
	return &Reference{
		t:      SymbolicReference,
		n:      n,
		target: target,
	}
}

// NewHashReference creates a new HashReference reference
func NewHashReference(n ReferenceName, h Hash) *Reference {
	return &Reference{
		t: HashReference,
		n: n,
		h: h,
	}
}

// Type return the type of a reference
func (r *Reference) Type() ReferenceType {
	return r.t
}

// Name return the name of a reference
func (r *Reference) Name() ReferenceName {
	return r.n
}

// Hash return the hash of a hash reference
func (r *Reference) Hash() Hash {
	return r.h
}

// Target return the target of a symbolic reference
func (r *Reference) Target() ReferenceName {
	return r.target
}

// Strings dump a reference as a [2]string
func (r *Reference) Strings() [2]string {
	var o [2]string
	o[0] = r.Name().String()

	switch r.Type() {
	case HashReference:
		o[1] = r.Hash().String()
	case SymbolicReference:
		o[1] = symrefPrefix + r.Target().String()
	}

	return o
}

func (r *Reference) String() string {
	s := r.Strings()
	return fmt.Sprintf("%s %s", s[1], s[0])
}
 07070100000571000081A4000000000000000000000001645E367C00000119000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/revision.go   package plumbing

// Revision represents a git revision
// to get more details about git revisions
// please check git manual page :
// https://www.kernel.org/pub/software/scm/git/docs/gitrevisions.html
type Revision string

func (r Revision) String() string {
	return string(r)
}
   07070100000572000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/revlist   07070100000573000081A4000000000000000000000001645E367C000013C8000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/revlist/revlist.go    // Package revlist provides support to access the ancestors of commits, in a
// similar way as the git-rev-list command.
package revlist

import (
	"fmt"
	"io"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/filemode"
	"github.com/go-git/go-git/v5/plumbing/object"
	"github.com/go-git/go-git/v5/plumbing/storer"
)

// Objects applies a complementary set. It gets all the hashes from all
// the reachable objects from the given objects. Ignore param are object hashes
// that we want to ignore on the result. All that objects must be accessible
// from the object storer.
func Objects(
	s storer.EncodedObjectStorer,
	objs,
	ignore []plumbing.Hash,
) ([]plumbing.Hash, error) {
	return ObjectsWithStorageForIgnores(s, s, objs, ignore)
}

// ObjectsWithStorageForIgnores is the same as Objects, but a
// secondary storage layer can be provided, to be used to finding the
// full set of objects to be ignored while finding the reachable
// objects.  This is useful when the main `s` storage layer is slow
// and/or remote, while the ignore list is available somewhere local.
func ObjectsWithStorageForIgnores(
	s, ignoreStore storer.EncodedObjectStorer,
	objs,
	ignore []plumbing.Hash,
) ([]plumbing.Hash, error) {
	ignore, err := objects(ignoreStore, ignore, nil, true)
	if err != nil {
		return nil, err
	}

	return objects(s, objs, ignore, false)
}

func objects(
	s storer.EncodedObjectStorer,
	objects,
	ignore []plumbing.Hash,
	allowMissingObjects bool,
) ([]plumbing.Hash, error) {
	seen := hashListToSet(ignore)
	result := make(map[plumbing.Hash]bool)
	visited := make(map[plumbing.Hash]bool)

	walkerFunc := func(h plumbing.Hash) {
		if !seen[h] {
			result[h] = true
			seen[h] = true
		}
	}

	for _, h := range objects {
		if err := processObject(s, h, seen, visited, ignore, walkerFunc); err != nil {
			if allowMissingObjects && err == plumbing.ErrObjectNotFound {
				continue
			}

			return nil, err
		}
	}

	return hashSetToList(result), nil
}

// processObject obtains the object using the hash an process it depending of its type
func processObject(
	s storer.EncodedObjectStorer,
	h plumbing.Hash,
	seen map[plumbing.Hash]bool,
	visited map[plumbing.Hash]bool,
	ignore []plumbing.Hash,
	walkerFunc func(h plumbing.Hash),
) error {
	if seen[h] {
		return nil
	}

	o, err := s.EncodedObject(plumbing.AnyObject, h)
	if err != nil {
		return err
	}

	do, err := object.DecodeObject(s, o)
	if err != nil {
		return err
	}

	switch do := do.(type) {
	case *object.Commit:
		return reachableObjects(do, seen, visited, ignore, walkerFunc)
	case *object.Tree:
		return iterateCommitTrees(seen, do, walkerFunc)
	case *object.Tag:
		walkerFunc(do.Hash)
		return processObject(s, do.Target, seen, visited, ignore, walkerFunc)
	case *object.Blob:
		walkerFunc(do.Hash)
	default:
		return fmt.Errorf("object type not valid: %s. "+
			"Object reference: %s", o.Type(), o.Hash())
	}

	return nil
}

// reachableObjects returns, using the callback function, all the reachable
// objects from the specified commit. To avoid to iterate over seen commits,
// if a commit hash is into the 'seen' set, we will not iterate all his trees
// and blobs objects.
func reachableObjects(
	commit *object.Commit,
	seen map[plumbing.Hash]bool,
	visited map[plumbing.Hash]bool,
	ignore []plumbing.Hash,
	cb func(h plumbing.Hash),
) error {
	i := object.NewCommitPreorderIter(commit, seen, ignore)
	pending := make(map[plumbing.Hash]bool)
	addPendingParents(pending, visited, commit)
	for {
		commit, err := i.Next()
		if err == io.EOF {
			break
		}

		if err != nil {
			return err
		}

		if pending[commit.Hash] {
			delete(pending, commit.Hash)
		}

		addPendingParents(pending, visited, commit)

		if visited[commit.Hash] && len(pending) == 0 {
			break
		}

		if seen[commit.Hash] {
			continue
		}

		cb(commit.Hash)

		tree, err := commit.Tree()
		if err != nil {
			return err
		}

		if err := iterateCommitTrees(seen, tree, cb); err != nil {
			return err
		}
	}

	return nil
}

func addPendingParents(pending, visited map[plumbing.Hash]bool, commit *object.Commit) {
	for _, p := range commit.ParentHashes {
		if !visited[p] {
			pending[p] = true
		}
	}
}

// iterateCommitTrees iterate all reachable trees from the given commit
func iterateCommitTrees(
	seen map[plumbing.Hash]bool,
	tree *object.Tree,
	cb func(h plumbing.Hash),
) error {
	if seen[tree.Hash] {
		return nil
	}

	cb(tree.Hash)

	treeWalker := object.NewTreeWalker(tree, true, seen)

	for {
		_, e, err := treeWalker.Next()
		if err == io.EOF {
			break
		}
		if err != nil {
			return err
		}

		if e.Mode == filemode.Submodule {
			continue
		}

		if seen[e.Hash] {
			continue
		}

		cb(e.Hash)
	}

	return nil
}

func hashSetToList(hashes map[plumbing.Hash]bool) []plumbing.Hash {
	var result []plumbing.Hash
	for key := range hashes {
		result = append(result, key)
	}

	return result
}

func hashListToSet(hashes []plumbing.Hash) map[plumbing.Hash]bool {
	result := make(map[plumbing.Hash]bool)
	for _, h := range hashes {
		result[h] = true
	}

	return result
}
07070100000574000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/storer    07070100000575000081A4000000000000000000000001645E367C0000005B000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/storer/doc.go // Package storer defines the interfaces to store objects, references, etc.
package storer
 07070100000576000081A4000000000000000000000001645E367C000000D6000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/storer/index.go   package storer

import "github.com/go-git/go-git/v5/plumbing/format/index"

// IndexStorer generic storage of index.Index
type IndexStorer interface {
	SetIndex(*index.Index) error
	Index() (*index.Index, error)
}
  07070100000577000081A4000000000000000000000001645E367C00002693000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/storer/object.go  package storer

import (
	"errors"
	"io"
	"time"

	"github.com/go-git/go-git/v5/plumbing"
)

var (
	//ErrStop is used to stop a ForEach function in an Iter
	ErrStop = errors.New("stop iter")
)

// EncodedObjectStorer generic storage of objects
type EncodedObjectStorer interface {
	// NewEncodedObject returns a new plumbing.EncodedObject, the real type
	// of the object can be a custom implementation or the default one,
	// plumbing.MemoryObject.
	NewEncodedObject() plumbing.EncodedObject
	// SetEncodedObject saves an object into the storage, the object should
	// be create with the NewEncodedObject, method, and file if the type is
	// not supported.
	SetEncodedObject(plumbing.EncodedObject) (plumbing.Hash, error)
	// EncodedObject gets an object by hash with the given
	// plumbing.ObjectType. Implementors should return
	// (nil, plumbing.ErrObjectNotFound) if an object doesn't exist with
	// both the given hash and object type.
	//
	// Valid plumbing.ObjectType values are CommitObject, BlobObject, TagObject,
	// TreeObject and AnyObject. If plumbing.AnyObject is given, the object must
	// be looked up regardless of its type.
	EncodedObject(plumbing.ObjectType, plumbing.Hash) (plumbing.EncodedObject, error)
	// IterObjects returns a custom EncodedObjectStorer over all the object
	// on the storage.
	//
	// Valid plumbing.ObjectType values are CommitObject, BlobObject, TagObject,
	IterEncodedObjects(plumbing.ObjectType) (EncodedObjectIter, error)
	// HasEncodedObject returns ErrObjNotFound if the object doesn't
	// exist.  If the object does exist, it returns nil.
	HasEncodedObject(plumbing.Hash) error
	// EncodedObjectSize returns the plaintext size of the encoded object.
	EncodedObjectSize(plumbing.Hash) (int64, error)
}

// DeltaObjectStorer is an EncodedObjectStorer that can return delta
// objects.
type DeltaObjectStorer interface {
	// DeltaObject is the same as EncodedObject but without resolving deltas.
	// Deltas will be returned as plumbing.DeltaObject instances.
	DeltaObject(plumbing.ObjectType, plumbing.Hash) (plumbing.EncodedObject, error)
}

// Transactioner is a optional method for ObjectStorer, it enable transaction
// base write and read operations in the storage
type Transactioner interface {
	// Begin starts a transaction.
	Begin() Transaction
}

// LooseObjectStorer is an optional interface for managing "loose"
// objects, i.e. those not in packfiles.
type LooseObjectStorer interface {
	// ForEachObjectHash iterates over all the (loose) object hashes
	// in the repository without necessarily having to read those objects.
	// Objects only inside pack files may be omitted.
	// If ErrStop is sent the iteration is stop but no error is returned.
	ForEachObjectHash(func(plumbing.Hash) error) error
	// LooseObjectTime looks up the (m)time associated with the
	// loose object (that is not in a pack file). Some
	// implementations (e.g. without loose objects)
	// always return an error.
	LooseObjectTime(plumbing.Hash) (time.Time, error)
	// DeleteLooseObject deletes a loose object if it exists.
	DeleteLooseObject(plumbing.Hash) error
}

// PackedObjectStorer is an optional interface for managing objects in
// packfiles.
type PackedObjectStorer interface {
	// ObjectPacks returns hashes of object packs if the underlying
	// implementation has pack files.
	ObjectPacks() ([]plumbing.Hash, error)
	// DeleteOldObjectPackAndIndex deletes an object pack and the corresponding index file if they exist.
	// Deletion is only performed if the pack is older than the supplied time (or the time is zero).
	DeleteOldObjectPackAndIndex(plumbing.Hash, time.Time) error
}

// PackfileWriter is a optional method for ObjectStorer, it enable direct write
// of packfile to the storage
type PackfileWriter interface {
	// PackfileWriter returns a writer for writing a packfile to the storage
	//
	// If the Storer not implements PackfileWriter the objects should be written
	// using the Set method.
	PackfileWriter() (io.WriteCloser, error)
}

// EncodedObjectIter is a generic closable interface for iterating over objects.
type EncodedObjectIter interface {
	Next() (plumbing.EncodedObject, error)
	ForEach(func(plumbing.EncodedObject) error) error
	Close()
}

// Transaction is an in-progress storage transaction. A transaction must end
// with a call to Commit or Rollback.
type Transaction interface {
	SetEncodedObject(plumbing.EncodedObject) (plumbing.Hash, error)
	EncodedObject(plumbing.ObjectType, plumbing.Hash) (plumbing.EncodedObject, error)
	Commit() error
	Rollback() error
}

// EncodedObjectLookupIter implements EncodedObjectIter. It iterates over a
// series of object hashes and yields their associated objects by retrieving
// each one from object storage. The retrievals are lazy and only occur when the
// iterator moves forward with a call to Next().
//
// The EncodedObjectLookupIter must be closed with a call to Close() when it is
// no longer needed.
type EncodedObjectLookupIter struct {
	storage EncodedObjectStorer
	series  []plumbing.Hash
	t       plumbing.ObjectType
	pos     int
}

// NewEncodedObjectLookupIter returns an object iterator given an object storage
// and a slice of object hashes.
func NewEncodedObjectLookupIter(
	storage EncodedObjectStorer, t plumbing.ObjectType, series []plumbing.Hash) *EncodedObjectLookupIter {
	return &EncodedObjectLookupIter{
		storage: storage,
		series:  series,
		t:       t,
	}
}

// Next returns the next object from the iterator. If the iterator has reached
// the end it will return io.EOF as an error. If the object can't be found in
// the object storage, it will return plumbing.ErrObjectNotFound as an error.
// If the object is retrieved successfully error will be nil.
func (iter *EncodedObjectLookupIter) Next() (plumbing.EncodedObject, error) {
	if iter.pos >= len(iter.series) {
		return nil, io.EOF
	}

	hash := iter.series[iter.pos]
	obj, err := iter.storage.EncodedObject(iter.t, hash)
	if err == nil {
		iter.pos++
	}

	return obj, err
}

// ForEach call the cb function for each object contained on this iter until
// an error happens or the end of the iter is reached. If ErrStop is sent
// the iteration is stop but no error is returned. The iterator is closed.
func (iter *EncodedObjectLookupIter) ForEach(cb func(plumbing.EncodedObject) error) error {
	return ForEachIterator(iter, cb)
}

// Close releases any resources used by the iterator.
func (iter *EncodedObjectLookupIter) Close() {
	iter.pos = len(iter.series)
}

// EncodedObjectSliceIter implements EncodedObjectIter. It iterates over a
// series of objects stored in a slice and yields each one in turn when Next()
// is called.
//
// The EncodedObjectSliceIter must be closed with a call to Close() when it is
// no longer needed.
type EncodedObjectSliceIter struct {
	series []plumbing.EncodedObject
}

// NewEncodedObjectSliceIter returns an object iterator for the given slice of
// objects.
func NewEncodedObjectSliceIter(series []plumbing.EncodedObject) *EncodedObjectSliceIter {
	return &EncodedObjectSliceIter{
		series: series,
	}
}

// Next returns the next object from the iterator. If the iterator has reached
// the end it will return io.EOF as an error. If the object is retrieved
// successfully error will be nil.
func (iter *EncodedObjectSliceIter) Next() (plumbing.EncodedObject, error) {
	if len(iter.series) == 0 {
		return nil, io.EOF
	}

	obj := iter.series[0]
	iter.series = iter.series[1:]

	return obj, nil
}

// ForEach call the cb function for each object contained on this iter until
// an error happens or the end of the iter is reached. If ErrStop is sent
// the iteration is stop but no error is returned. The iterator is closed.
func (iter *EncodedObjectSliceIter) ForEach(cb func(plumbing.EncodedObject) error) error {
	return ForEachIterator(iter, cb)
}

// Close releases any resources used by the iterator.
func (iter *EncodedObjectSliceIter) Close() {
	iter.series = []plumbing.EncodedObject{}
}

// MultiEncodedObjectIter implements EncodedObjectIter. It iterates over several
// EncodedObjectIter,
//
// The MultiObjectIter must be closed with a call to Close() when it is no
// longer needed.
type MultiEncodedObjectIter struct {
	iters []EncodedObjectIter
}

// NewMultiEncodedObjectIter returns an object iterator for the given slice of
// EncodedObjectIters.
func NewMultiEncodedObjectIter(iters []EncodedObjectIter) EncodedObjectIter {
	return &MultiEncodedObjectIter{iters: iters}
}

// Next returns the next object from the iterator, if one iterator reach io.EOF
// is removed and the next one is used.
func (iter *MultiEncodedObjectIter) Next() (plumbing.EncodedObject, error) {
	if len(iter.iters) == 0 {
		return nil, io.EOF
	}

	obj, err := iter.iters[0].Next()
	if err == io.EOF {
		iter.iters[0].Close()
		iter.iters = iter.iters[1:]
		return iter.Next()
	}

	return obj, err
}

// ForEach call the cb function for each object contained on this iter until
// an error happens or the end of the iter is reached. If ErrStop is sent
// the iteration is stop but no error is returned. The iterator is closed.
func (iter *MultiEncodedObjectIter) ForEach(cb func(plumbing.EncodedObject) error) error {
	return ForEachIterator(iter, cb)
}

// Close releases any resources used by the iterator.
func (iter *MultiEncodedObjectIter) Close() {
	for _, i := range iter.iters {
		i.Close()
	}
}

type bareIterator interface {
	Next() (plumbing.EncodedObject, error)
	Close()
}

// ForEachIterator is a helper function to build iterators without need to
// rewrite the same ForEach function each time.
func ForEachIterator(iter bareIterator, cb func(plumbing.EncodedObject) error) error {
	defer iter.Close()
	for {
		obj, err := iter.Next()
		if err != nil {
			if err == io.EOF {
				return nil
			}

			return err
		}

		if err := cb(obj); err != nil {
			if err == ErrStop {
				return nil
			}

			return err
		}
	}
}
 07070100000578000081A4000000000000000000000001645E367C000018E5000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/storer/reference.go   package storer

import (
	"errors"
	"io"

	"github.com/go-git/go-git/v5/plumbing"
)

const MaxResolveRecursion = 1024

// ErrMaxResolveRecursion is returned by ResolveReference is MaxResolveRecursion
// is exceeded
var ErrMaxResolveRecursion = errors.New("max. recursion level reached")

// ReferenceStorer is a generic storage of references.
type ReferenceStorer interface {
	SetReference(*plumbing.Reference) error
	// CheckAndSetReference sets the reference `new`, but if `old` is
	// not `nil`, it first checks that the current stored value for
	// `old.Name()` matches the given reference value in `old`.  If
	// not, it returns an error and doesn't update `new`.
	CheckAndSetReference(new, old *plumbing.Reference) error
	Reference(plumbing.ReferenceName) (*plumbing.Reference, error)
	IterReferences() (ReferenceIter, error)
	RemoveReference(plumbing.ReferenceName) error
	CountLooseRefs() (int, error)
	PackRefs() error
}

// ReferenceIter is a generic closable interface for iterating over references.
type ReferenceIter interface {
	Next() (*plumbing.Reference, error)
	ForEach(func(*plumbing.Reference) error) error
	Close()
}

type referenceFilteredIter struct {
	ff   func(r *plumbing.Reference) bool
	iter ReferenceIter
}

// NewReferenceFilteredIter returns a reference iterator for the given reference
// Iterator. This iterator will iterate only references that accomplish the
// provided function.
func NewReferenceFilteredIter(
	ff func(r *plumbing.Reference) bool, iter ReferenceIter) ReferenceIter {
	return &referenceFilteredIter{ff, iter}
}

// Next returns the next reference from the iterator. If the iterator has reached
// the end it will return io.EOF as an error.
func (iter *referenceFilteredIter) Next() (*plumbing.Reference, error) {
	for {
		r, err := iter.iter.Next()
		if err != nil {
			return nil, err
		}

		if iter.ff(r) {
			return r, nil
		}

		continue
	}
}

// ForEach call the cb function for each reference contained on this iter until
// an error happens or the end of the iter is reached. If ErrStop is sent
// the iteration is stopped but no error is returned. The iterator is closed.
func (iter *referenceFilteredIter) ForEach(cb func(*plumbing.Reference) error) error {
	defer iter.Close()
	for {
		r, err := iter.Next()
		if err == io.EOF {
			break
		}
		if err != nil {
			return err
		}

		if err := cb(r); err != nil {
			if err == ErrStop {
				break
			}

			return err
		}
	}

	return nil
}

// Close releases any resources used by the iterator.
func (iter *referenceFilteredIter) Close() {
	iter.iter.Close()
}

// ReferenceSliceIter implements ReferenceIter. It iterates over a series of
// references stored in a slice and yields each one in turn when Next() is
// called.
//
// The ReferenceSliceIter must be closed with a call to Close() when it is no
// longer needed.
type ReferenceSliceIter struct {
	series []*plumbing.Reference
	pos    int
}

// NewReferenceSliceIter returns a reference iterator for the given slice of
// objects.
func NewReferenceSliceIter(series []*plumbing.Reference) ReferenceIter {
	return &ReferenceSliceIter{
		series: series,
	}
}

// Next returns the next reference from the iterator. If the iterator has
// reached the end it will return io.EOF as an error.
func (iter *ReferenceSliceIter) Next() (*plumbing.Reference, error) {
	if iter.pos >= len(iter.series) {
		return nil, io.EOF
	}

	obj := iter.series[iter.pos]
	iter.pos++
	return obj, nil
}

// ForEach call the cb function for each reference contained on this iter until
// an error happens or the end of the iter is reached. If ErrStop is sent
// the iteration is stop but no error is returned. The iterator is closed.
func (iter *ReferenceSliceIter) ForEach(cb func(*plumbing.Reference) error) error {
	return forEachReferenceIter(iter, cb)
}

type bareReferenceIterator interface {
	Next() (*plumbing.Reference, error)
	Close()
}

func forEachReferenceIter(iter bareReferenceIterator, cb func(*plumbing.Reference) error) error {
	defer iter.Close()
	for {
		obj, err := iter.Next()
		if err != nil {
			if err == io.EOF {
				return nil
			}

			return err
		}

		if err := cb(obj); err != nil {
			if err == ErrStop {
				return nil
			}

			return err
		}
	}
}

// Close releases any resources used by the iterator.
func (iter *ReferenceSliceIter) Close() {
	iter.pos = len(iter.series)
}

// MultiReferenceIter implements ReferenceIter. It iterates over several
// ReferenceIter,
//
// The MultiReferenceIter must be closed with a call to Close() when it is no
// longer needed.
type MultiReferenceIter struct {
	iters []ReferenceIter
}

// NewMultiReferenceIter returns an reference iterator for the given slice of
// EncodedObjectIters.
func NewMultiReferenceIter(iters []ReferenceIter) ReferenceIter {
	return &MultiReferenceIter{iters: iters}
}

// Next returns the next reference from the iterator, if one iterator reach
// io.EOF is removed and the next one is used.
func (iter *MultiReferenceIter) Next() (*plumbing.Reference, error) {
	if len(iter.iters) == 0 {
		return nil, io.EOF
	}

	obj, err := iter.iters[0].Next()
	if err == io.EOF {
		iter.iters[0].Close()
		iter.iters = iter.iters[1:]
		return iter.Next()
	}

	return obj, err
}

// ForEach call the cb function for each reference contained on this iter until
// an error happens or the end of the iter is reached. If ErrStop is sent
// the iteration is stop but no error is returned. The iterator is closed.
func (iter *MultiReferenceIter) ForEach(cb func(*plumbing.Reference) error) error {
	return forEachReferenceIter(iter, cb)
}

// Close releases any resources used by the iterator.
func (iter *MultiReferenceIter) Close() {
	for _, i := range iter.iters {
		i.Close()
	}
}

// ResolveReference resolves a SymbolicReference to a HashReference.
func ResolveReference(s ReferenceStorer, n plumbing.ReferenceName) (*plumbing.Reference, error) {
	r, err := s.Reference(n)
	if err != nil || r == nil {
		return r, err
	}
	return resolveReference(s, r, 0)
}

func resolveReference(s ReferenceStorer, r *plumbing.Reference, recursion int) (*plumbing.Reference, error) {
	if r.Type() != plumbing.SymbolicReference {
		return r, nil
	}

	if recursion > MaxResolveRecursion {
		return nil, ErrMaxResolveRecursion
	}

	t, err := s.Reference(r.Target())
	if err != nil {
		return nil, err
	}

	recursion++
	return resolveReference(s, t, recursion)
}
   07070100000579000081A4000000000000000000000001645E367C0000013E000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/storer/shallow.go package storer

import "github.com/go-git/go-git/v5/plumbing"

// ShallowStorer is a storage of references to shallow commits by hash,
// meaning that these commits have missing parents because of a shallow fetch.
type ShallowStorer interface {
	SetShallow([]plumbing.Hash) error
	Shallow() ([]plumbing.Hash, error)
}
  0707010000057A000081A4000000000000000000000001645E367C00000199000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/storer/storer.go  package storer

// Storer is a basic storer for encoded objects and references.
type Storer interface {
	EncodedObjectStorer
	ReferenceStorer
}

// Initializer should be implemented by storers that require to perform any
// operation when creating a new repository (i.e. git init).
type Initializer interface {
	// Init performs initialization of the storer and returns the error, if
	// any.
	Init() error
}
   0707010000057B000041ED000000000000000000000009645E367C00000000000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/transport 0707010000057C000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/transport/client  0707010000057D000081A4000000000000000000000001645E367C00000855000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/transport/client/client.go    // Package client contains helper function to deal with the different client
// protocols.
package client

import (
	"crypto/tls"
	"crypto/x509"
	"fmt"
	gohttp "net/http"

	"github.com/go-git/go-git/v5/plumbing/transport"
	"github.com/go-git/go-git/v5/plumbing/transport/file"
	"github.com/go-git/go-git/v5/plumbing/transport/git"
	"github.com/go-git/go-git/v5/plumbing/transport/http"
	"github.com/go-git/go-git/v5/plumbing/transport/ssh"
)

// Protocols are the protocols supported by default.
var Protocols = map[string]transport.Transport{
	"http":  http.DefaultClient,
	"https": http.DefaultClient,
	"ssh":   ssh.DefaultClient,
	"git":   git.DefaultClient,
	"file":  file.DefaultClient,
}

var insecureClient = http.NewClient(&gohttp.Client{
	Transport: &gohttp.Transport{
		TLSClientConfig: &tls.Config{
			InsecureSkipVerify: true,
		},
	},
})

// InstallProtocol adds or modifies an existing protocol.
func InstallProtocol(scheme string, c transport.Transport) {
	if c == nil {
		delete(Protocols, scheme)
		return
	}

	Protocols[scheme] = c
}

// NewClient returns the appropriate client among of the set of known protocols:
// http://, https://, ssh:// and file://.
// See `InstallProtocol` to add or modify protocols.
func NewClient(endpoint *transport.Endpoint) (transport.Transport, error) {
	return getTransport(endpoint)
}

func getTransport(endpoint *transport.Endpoint) (transport.Transport, error) {
	if endpoint.Protocol == "https" {
		if endpoint.InsecureSkipTLS {
			return insecureClient, nil
		}

		if len(endpoint.CaBundle) != 0 {
			rootCAs, _ := x509.SystemCertPool()
			if rootCAs == nil {
				rootCAs = x509.NewCertPool()
			}
			rootCAs.AppendCertsFromPEM(endpoint.CaBundle)
			return http.NewClient(&gohttp.Client{
				Transport: &gohttp.Transport{
					TLSClientConfig: &tls.Config{
						RootCAs: rootCAs,
					},
				},
			}), nil
		}
	}

	f, ok := Protocols[endpoint.Protocol]
	if !ok {
		return nil, fmt.Errorf("unsupported scheme %q", endpoint.Protocol)
	}

	if f == nil {
		return nil, fmt.Errorf("malformed client for scheme %q, client is defined as nil", endpoint.Protocol)
	}
	return f, nil
}
   0707010000057E000081A4000000000000000000000001645E367C00001DAF000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/transport/common.go   // Package transport includes the implementation for different transport
// protocols.
//
// `Client` can be used to fetch and send packfiles to a git server.
// The `client` package provides higher level functions to instantiate the
// appropriate `Client` based on the repository URL.
//
// go-git supports HTTP and SSH (see `Protocols`), but you can also install
// your own protocols (see the `client` package).
//
// Each protocol has its own implementation of `Client`, but you should
// generally not use them directly, use `client.NewClient` instead.
package transport

import (
	"bytes"
	"context"
	"errors"
	"fmt"
	"io"
	"net/url"
	"strconv"
	"strings"

	giturl "github.com/go-git/go-git/v5/internal/url"
	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/protocol/packp"
	"github.com/go-git/go-git/v5/plumbing/protocol/packp/capability"
)

var (
	ErrRepositoryNotFound     = errors.New("repository not found")
	ErrEmptyRemoteRepository  = errors.New("remote repository is empty")
	ErrAuthenticationRequired = errors.New("authentication required")
	ErrAuthorizationFailed    = errors.New("authorization failed")
	ErrEmptyUploadPackRequest = errors.New("empty git-upload-pack given")
	ErrInvalidAuthMethod      = errors.New("invalid auth method")
	ErrAlreadyConnected       = errors.New("session already established")
)

const (
	UploadPackServiceName  = "git-upload-pack"
	ReceivePackServiceName = "git-receive-pack"
)

// Transport can initiate git-upload-pack and git-receive-pack processes.
// It is implemented both by the client and the server, making this a RPC.
type Transport interface {
	// NewUploadPackSession starts a git-upload-pack session for an endpoint.
	NewUploadPackSession(*Endpoint, AuthMethod) (UploadPackSession, error)
	// NewReceivePackSession starts a git-receive-pack session for an endpoint.
	NewReceivePackSession(*Endpoint, AuthMethod) (ReceivePackSession, error)
}

type Session interface {
	// AdvertisedReferences retrieves the advertised references for a
	// repository.
	// If the repository does not exist, returns ErrRepositoryNotFound.
	// If the repository exists, but is empty, returns ErrEmptyRemoteRepository.
	AdvertisedReferences() (*packp.AdvRefs, error)
	// AdvertisedReferencesContext retrieves the advertised references for a
	// repository.
	// If the repository does not exist, returns ErrRepositoryNotFound.
	// If the repository exists, but is empty, returns ErrEmptyRemoteRepository.
	AdvertisedReferencesContext(context.Context) (*packp.AdvRefs, error)
	io.Closer
}

type AuthMethod interface {
	fmt.Stringer
	Name() string
}

// UploadPackSession represents a git-upload-pack session.
// A git-upload-pack session has two steps: reference discovery
// (AdvertisedReferences) and uploading pack (UploadPack).
type UploadPackSession interface {
	Session
	// UploadPack takes a git-upload-pack request and returns a response,
	// including a packfile. Don't be confused by terminology, the client
	// side of a git-upload-pack is called git-fetch-pack, although here
	// the same interface is used to make it RPC-like.
	UploadPack(context.Context, *packp.UploadPackRequest) (*packp.UploadPackResponse, error)
}

// ReceivePackSession represents a git-receive-pack session.
// A git-receive-pack session has two steps: reference discovery
// (AdvertisedReferences) and receiving pack (ReceivePack).
// In that order.
type ReceivePackSession interface {
	Session
	// ReceivePack sends an update references request and a packfile
	// reader and returns a ReportStatus and error. Don't be confused by
	// terminology, the client side of a git-receive-pack is called
	// git-send-pack, although here the same interface is used to make it
	// RPC-like.
	ReceivePack(context.Context, *packp.ReferenceUpdateRequest) (*packp.ReportStatus, error)
}

// Endpoint represents a Git URL in any supported protocol.
type Endpoint struct {
	// Protocol is the protocol of the endpoint (e.g. git, https, file).
	Protocol string
	// User is the user.
	User string
	// Password is the password.
	Password string
	// Host is the host.
	Host string
	// Port is the port to connect, if 0 the default port for the given protocol
	// wil be used.
	Port int
	// Path is the repository path.
	Path string
	// InsecureSkipTLS skips ssl verify if protocal is https
	InsecureSkipTLS bool
	// CaBundle specify additional ca bundle with system cert pool
	CaBundle []byte
}

var defaultPorts = map[string]int{
	"http":  80,
	"https": 443,
	"git":   9418,
	"ssh":   22,
}

// String returns a string representation of the Git URL.
func (u *Endpoint) String() string {
	var buf bytes.Buffer
	if u.Protocol != "" {
		buf.WriteString(u.Protocol)
		buf.WriteByte(':')
	}

	if u.Protocol != "" || u.Host != "" || u.User != "" || u.Password != "" {
		buf.WriteString("//")

		if u.User != "" || u.Password != "" {
			buf.WriteString(url.PathEscape(u.User))
			if u.Password != "" {
				buf.WriteByte(':')
				buf.WriteString(url.PathEscape(u.Password))
			}

			buf.WriteByte('@')
		}

		if u.Host != "" {
			buf.WriteString(u.Host)

			if u.Port != 0 {
				port, ok := defaultPorts[strings.ToLower(u.Protocol)]
				if !ok || ok && port != u.Port {
					fmt.Fprintf(&buf, ":%d", u.Port)
				}
			}
		}
	}

	if u.Path != "" && u.Path[0] != '/' && u.Host != "" {
		buf.WriteByte('/')
	}

	buf.WriteString(u.Path)
	return buf.String()
}

func NewEndpoint(endpoint string) (*Endpoint, error) {
	if e, ok := parseSCPLike(endpoint); ok {
		return e, nil
	}

	if e, ok := parseFile(endpoint); ok {
		return e, nil
	}

	return parseURL(endpoint)
}

func parseURL(endpoint string) (*Endpoint, error) {
	u, err := url.Parse(endpoint)
	if err != nil {
		return nil, err
	}

	if !u.IsAbs() {
		return nil, plumbing.NewPermanentError(fmt.Errorf(
			"invalid endpoint: %s", endpoint,
		))
	}

	var user, pass string
	if u.User != nil {
		user = u.User.Username()
		pass, _ = u.User.Password()
	}

	return &Endpoint{
		Protocol: u.Scheme,
		User:     user,
		Password: pass,
		Host:     u.Hostname(),
		Port:     getPort(u),
		Path:     getPath(u),
	}, nil
}

func getPort(u *url.URL) int {
	p := u.Port()
	if p == "" {
		return 0
	}

	i, err := strconv.Atoi(p)
	if err != nil {
		return 0
	}

	return i
}

func getPath(u *url.URL) string {
	var res string = u.Path
	if u.RawQuery != "" {
		res += "?" + u.RawQuery
	}

	if u.Fragment != "" {
		res += "#" + u.Fragment
	}

	return res
}

func parseSCPLike(endpoint string) (*Endpoint, bool) {
	if giturl.MatchesScheme(endpoint) || !giturl.MatchesScpLike(endpoint) {
		return nil, false
	}

	user, host, portStr, path := giturl.FindScpLikeComponents(endpoint)
	port, err := strconv.Atoi(portStr)
	if err != nil {
		port = 22
	}

	return &Endpoint{
		Protocol: "ssh",
		User:     user,
		Host:     host,
		Port:     port,
		Path:     path,
	}, true
}

func parseFile(endpoint string) (*Endpoint, bool) {
	if giturl.MatchesScheme(endpoint) {
		return nil, false
	}

	path := endpoint
	return &Endpoint{
		Protocol: "file",
		Path:     path,
	}, true
}

// UnsupportedCapabilities are the capabilities not supported by any client
// implementation
var UnsupportedCapabilities = []capability.Capability{
	capability.MultiACK,
	capability.MultiACKDetailed,
	capability.ThinPack,
}

// FilterUnsupportedCapabilities it filter out all the UnsupportedCapabilities
// from a capability.List, the intended usage is on the client implementation
// to filter the capabilities from an AdvRefs message.
func FilterUnsupportedCapabilities(list *capability.List) {
	for _, c := range UnsupportedCapabilities {
		list.Delete(c)
	}
}
 0707010000057F000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/transport/file    07070100000580000081A4000000000000000000000001645E367C00000CC0000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/transport/file/client.go  // Package file implements the file transport protocol.
package file

import (
	"bufio"
	"errors"
	"io"
	"os"
	"path/filepath"
	"strings"

	"github.com/go-git/go-git/v5/plumbing/transport"
	"github.com/go-git/go-git/v5/plumbing/transport/internal/common"
	"github.com/go-git/go-git/v5/utils/ioutil"
	"golang.org/x/sys/execabs"
)

// DefaultClient is the default local client.
var DefaultClient = NewClient(
	transport.UploadPackServiceName,
	transport.ReceivePackServiceName,
)

type runner struct {
	UploadPackBin  string
	ReceivePackBin string
}

// NewClient returns a new local client using the given git-upload-pack and
// git-receive-pack binaries.
func NewClient(uploadPackBin, receivePackBin string) transport.Transport {
	return common.NewClient(&runner{
		UploadPackBin:  uploadPackBin,
		ReceivePackBin: receivePackBin,
	})
}

func prefixExecPath(cmd string) (string, error) {
	// Use `git --exec-path` to find the exec path.
	execCmd := execabs.Command("git", "--exec-path")

	stdout, err := execCmd.StdoutPipe()
	if err != nil {
		return "", err
	}
	stdoutBuf := bufio.NewReader(stdout)

	err = execCmd.Start()
	if err != nil {
		return "", err
	}

	execPathBytes, isPrefix, err := stdoutBuf.ReadLine()
	if err != nil {
		return "", err
	}
	if isPrefix {
		return "", errors.New("couldn't read exec-path line all at once")
	}

	err = execCmd.Wait()
	if err != nil {
		return "", err
	}
	execPath := string(execPathBytes)
	execPath = strings.TrimSpace(execPath)
	cmd = filepath.Join(execPath, cmd)

	// Make sure it actually exists.
	_, err = execabs.LookPath(cmd)
	if err != nil {
		return "", err
	}
	return cmd, nil
}

func (r *runner) Command(cmd string, ep *transport.Endpoint, auth transport.AuthMethod,
) (common.Command, error) {

	switch cmd {
	case transport.UploadPackServiceName:
		cmd = r.UploadPackBin
	case transport.ReceivePackServiceName:
		cmd = r.ReceivePackBin
	}

	_, err := execabs.LookPath(cmd)
	if err != nil {
		if e, ok := err.(*execabs.Error); ok && e.Err == execabs.ErrNotFound {
			cmd, err = prefixExecPath(cmd)
			if err != nil {
				return nil, err
			}
		} else {
			return nil, err
		}
	}

	return &command{cmd: execabs.Command(cmd, ep.Path)}, nil
}

type command struct {
	cmd          *execabs.Cmd
	stderrCloser io.Closer
	closed       bool
}

func (c *command) Start() error {
	return c.cmd.Start()
}

func (c *command) StderrPipe() (io.Reader, error) {
	// Pipe returned by Command.StderrPipe has a race with Read + Command.Wait.
	// We use an io.Pipe and close it after the command finishes.
	r, w := ioutil.Pipe()
	c.cmd.Stderr = w
	c.stderrCloser = r
	return r, nil
}

func (c *command) StdinPipe() (io.WriteCloser, error) {
	return c.cmd.StdinPipe()
}

func (c *command) StdoutPipe() (io.Reader, error) {
	return c.cmd.StdoutPipe()
}

func (c *command) Kill() error {
	c.cmd.Process.Kill()
	return c.Close()
}

// Close waits for the command to exit.
func (c *command) Close() error {
	if c.closed {
		return nil
	}

	defer func() {
		c.closed = true
		_ = c.stderrCloser.Close()

	}()

	err := c.cmd.Wait()
	if _, ok := err.(*os.PathError); ok {
		return nil
	}

	// When a repository does not exist, the command exits with code 128.
	if _, ok := err.(*execabs.ExitError); ok {
		return nil
	}

	return err
}
07070100000581000081A4000000000000000000000001645E367C00000594000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/transport/file/server.go  package file

import (
	"fmt"
	"os"

	"github.com/go-git/go-git/v5/plumbing/transport"
	"github.com/go-git/go-git/v5/plumbing/transport/internal/common"
	"github.com/go-git/go-git/v5/plumbing/transport/server"
	"github.com/go-git/go-git/v5/utils/ioutil"
)

// ServeUploadPack serves a git-upload-pack request using standard output, input
// and error. This is meant to be used when implementing a git-upload-pack
// command.
func ServeUploadPack(path string) error {
	ep, err := transport.NewEndpoint(path)
	if err != nil {
		return err
	}

	// TODO: define and implement a server-side AuthMethod
	s, err := server.DefaultServer.NewUploadPackSession(ep, nil)
	if err != nil {
		return fmt.Errorf("error creating session: %s", err)
	}

	return common.ServeUploadPack(srvCmd, s)
}

// ServeReceivePack serves a git-receive-pack request using standard output,
// input and error. This is meant to be used when implementing a
// git-receive-pack command.
func ServeReceivePack(path string) error {
	ep, err := transport.NewEndpoint(path)
	if err != nil {
		return err
	}

	// TODO: define and implement a server-side AuthMethod
	s, err := server.DefaultServer.NewReceivePackSession(ep, nil)
	if err != nil {
		return fmt.Errorf("error creating session: %s", err)
	}

	return common.ServeReceivePack(srvCmd, s)
}

var srvCmd = common.ServerCommand{
	Stdin:  os.Stdin,
	Stdout: ioutil.WriteNopCloser(os.Stdout),
	Stderr: os.Stderr,
}
07070100000582000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/transport/git 07070100000583000081A4000000000000000000000001645E367C00000A42000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/transport/git/common.go   // Package git implements the git transport protocol.
package git

import (
	"fmt"
	"io"
	"net"

	"github.com/go-git/go-git/v5/plumbing/format/pktline"
	"github.com/go-git/go-git/v5/plumbing/transport"
	"github.com/go-git/go-git/v5/plumbing/transport/internal/common"
	"github.com/go-git/go-git/v5/utils/ioutil"
)

// DefaultClient is the default git client.
var DefaultClient = common.NewClient(&runner{})

const DefaultPort = 9418

type runner struct{}

// Command returns a new Command for the given cmd in the given Endpoint
func (r *runner) Command(cmd string, ep *transport.Endpoint, auth transport.AuthMethod) (common.Command, error) {
	// auth not allowed since git protocol doesn't support authentication
	if auth != nil {
		return nil, transport.ErrInvalidAuthMethod
	}
	c := &command{command: cmd, endpoint: ep}
	if err := c.connect(); err != nil {
		return nil, err
	}
	return c, nil
}

type command struct {
	conn      net.Conn
	connected bool
	command   string
	endpoint  *transport.Endpoint
}

// Start executes the command sending the required message to the TCP connection
func (c *command) Start() error {
	cmd := endpointToCommand(c.command, c.endpoint)

	e := pktline.NewEncoder(c.conn)
	return e.Encode([]byte(cmd))
}

func (c *command) connect() error {
	if c.connected {
		return transport.ErrAlreadyConnected
	}

	var err error
	c.conn, err = net.Dial("tcp", c.getHostWithPort())
	if err != nil {
		return err
	}

	c.connected = true
	return nil
}

func (c *command) getHostWithPort() string {
	host := c.endpoint.Host
	port := c.endpoint.Port
	if port <= 0 {
		port = DefaultPort
	}

	return fmt.Sprintf("%s:%d", host, port)
}

// StderrPipe git protocol doesn't have any dedicated error channel
func (c *command) StderrPipe() (io.Reader, error) {
	return nil, nil
}

// StdinPipe return the underlying connection as WriteCloser, wrapped to prevent
// call to the Close function from the connection, a command execution in git
// protocol can't be closed or killed
func (c *command) StdinPipe() (io.WriteCloser, error) {
	return ioutil.WriteNopCloser(c.conn), nil
}

// StdoutPipe return the underlying connection as Reader
func (c *command) StdoutPipe() (io.Reader, error) {
	return c.conn, nil
}

func endpointToCommand(cmd string, ep *transport.Endpoint) string {
	host := ep.Host
	if ep.Port != DefaultPort {
		host = fmt.Sprintf("%s:%d", ep.Host, ep.Port)
	}

	return fmt.Sprintf("%s %s%chost=%s%c", cmd, ep.Path, 0, host, 0)
}

// Close closes the TCP connection and connection.
func (c *command) Close() error {
	if !c.connected {
		return nil
	}

	c.connected = false
	return c.conn.Close()
}
  07070100000584000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/transport/http    07070100000585000081A4000000000000000000000001645E367C00001982000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/transport/http/common.go  // Package http implements the HTTP transport protocol.
package http

import (
	"bytes"
	"context"
	"fmt"
	"net"
	"net/http"
	"strconv"
	"strings"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/protocol/packp"
	"github.com/go-git/go-git/v5/plumbing/transport"
	"github.com/go-git/go-git/v5/utils/ioutil"
)

// it requires a bytes.Buffer, because we need to know the length
func applyHeadersToRequest(req *http.Request, content *bytes.Buffer, host string, requestType string) {
	req.Header.Add("User-Agent", "git/1.0")
	req.Header.Add("Host", host) // host:port

	if content == nil {
		req.Header.Add("Accept", "*/*")
		return
	}

	req.Header.Add("Accept", fmt.Sprintf("application/x-%s-result", requestType))
	req.Header.Add("Content-Type", fmt.Sprintf("application/x-%s-request", requestType))
	req.Header.Add("Content-Length", strconv.Itoa(content.Len()))
}

const infoRefsPath = "/info/refs"

func advertisedReferences(ctx context.Context, s *session, serviceName string) (ref *packp.AdvRefs, err error) {
	url := fmt.Sprintf(
		"%s%s?service=%s",
		s.endpoint.String(), infoRefsPath, serviceName,
	)

	req, err := http.NewRequest(http.MethodGet, url, nil)
	if err != nil {
		return nil, err
	}

	s.ApplyAuthToRequest(req)
	applyHeadersToRequest(req, nil, s.endpoint.Host, serviceName)
	res, err := s.client.Do(req.WithContext(ctx))
	if err != nil {
		return nil, err
	}

	s.ModifyEndpointIfRedirect(res)
	defer ioutil.CheckClose(res.Body, &err)

	if err = NewErr(res); err != nil {
		return nil, err
	}

	ar := packp.NewAdvRefs()
	if err = ar.Decode(res.Body); err != nil {
		if err == packp.ErrEmptyAdvRefs {
			err = transport.ErrEmptyRemoteRepository
		}

		return nil, err
	}

	transport.FilterUnsupportedCapabilities(ar.Capabilities)
	s.advRefs = ar

	return ar, nil
}

type client struct {
	c *http.Client
}

// DefaultClient is the default HTTP client, which uses `http.DefaultClient`.
var DefaultClient = NewClient(nil)

// NewClient creates a new client with a custom net/http client.
// See `InstallProtocol` to install and override default http client.
// Unless a properly initialized client is given, it will fall back into
// `http.DefaultClient`.
//
// Note that for HTTP client cannot distinguish between private repositories and
// unexistent repositories on GitHub. So it returns `ErrAuthorizationRequired`
// for both.
func NewClient(c *http.Client) transport.Transport {
	if c == nil {
		return &client{http.DefaultClient}
	}

	return &client{
		c: c,
	}
}

func (c *client) NewUploadPackSession(ep *transport.Endpoint, auth transport.AuthMethod) (
	transport.UploadPackSession, error) {

	return newUploadPackSession(c.c, ep, auth)
}

func (c *client) NewReceivePackSession(ep *transport.Endpoint, auth transport.AuthMethod) (
	transport.ReceivePackSession, error) {

	return newReceivePackSession(c.c, ep, auth)
}

type session struct {
	auth     AuthMethod
	client   *http.Client
	endpoint *transport.Endpoint
	advRefs  *packp.AdvRefs
}

func newSession(c *http.Client, ep *transport.Endpoint, auth transport.AuthMethod) (*session, error) {
	s := &session{
		auth:     basicAuthFromEndpoint(ep),
		client:   c,
		endpoint: ep,
	}
	if auth != nil {
		a, ok := auth.(AuthMethod)
		if !ok {
			return nil, transport.ErrInvalidAuthMethod
		}

		s.auth = a
	}

	return s, nil
}

func (s *session) ApplyAuthToRequest(req *http.Request) {
	if s.auth == nil {
		return
	}

	s.auth.SetAuth(req)
}

func (s *session) ModifyEndpointIfRedirect(res *http.Response) {
	if res.Request == nil {
		return
	}

	r := res.Request
	if !strings.HasSuffix(r.URL.Path, infoRefsPath) {
		return
	}

	h, p, err := net.SplitHostPort(r.URL.Host)
	if err != nil {
		h = r.URL.Host
	}
	if p != "" {
		port, err := strconv.Atoi(p)
		if err == nil {
			s.endpoint.Port = port
		}
	}
	s.endpoint.Host = h

	s.endpoint.Protocol = r.URL.Scheme
	s.endpoint.Path = r.URL.Path[:len(r.URL.Path)-len(infoRefsPath)]
}

func (*session) Close() error {
	return nil
}

// AuthMethod is concrete implementation of common.AuthMethod for HTTP services
type AuthMethod interface {
	transport.AuthMethod
	SetAuth(r *http.Request)
}

func basicAuthFromEndpoint(ep *transport.Endpoint) *BasicAuth {
	u := ep.User
	if u == "" {
		return nil
	}

	return &BasicAuth{u, ep.Password}
}

// BasicAuth represent a HTTP basic auth
type BasicAuth struct {
	Username, Password string
}

func (a *BasicAuth) SetAuth(r *http.Request) {
	if a == nil {
		return
	}

	r.SetBasicAuth(a.Username, a.Password)
}

// Name is name of the auth
func (a *BasicAuth) Name() string {
	return "http-basic-auth"
}

func (a *BasicAuth) String() string {
	masked := "*******"
	if a.Password == "" {
		masked = "<empty>"
	}

	return fmt.Sprintf("%s - %s:%s", a.Name(), a.Username, masked)
}

// TokenAuth implements an http.AuthMethod that can be used with http transport
// to authenticate with HTTP token authentication (also known as bearer
// authentication).
//
// IMPORTANT: If you are looking to use OAuth tokens with popular servers (e.g.
// GitHub, Bitbucket, GitLab) you should use BasicAuth instead. These servers
// use basic HTTP authentication, with the OAuth token as user or password.
// Check the documentation of your git server for details.
type TokenAuth struct {
	Token string
}

func (a *TokenAuth) SetAuth(r *http.Request) {
	if a == nil {
		return
	}
	r.Header.Add("Authorization", fmt.Sprintf("Bearer %s", a.Token))
}

// Name is name of the auth
func (a *TokenAuth) Name() string {
	return "http-token-auth"
}

func (a *TokenAuth) String() string {
	masked := "*******"
	if a.Token == "" {
		masked = "<empty>"
	}
	return fmt.Sprintf("%s - %s", a.Name(), masked)
}

// Err is a dedicated error to return errors based on status code
type Err struct {
	Response *http.Response
}

// NewErr returns a new Err based on a http response
func NewErr(r *http.Response) error {
	if r.StatusCode >= http.StatusOK && r.StatusCode < http.StatusMultipleChoices {
		return nil
	}

	switch r.StatusCode {
	case http.StatusUnauthorized:
		return transport.ErrAuthenticationRequired
	case http.StatusForbidden:
		return transport.ErrAuthorizationFailed
	case http.StatusNotFound:
		return transport.ErrRepositoryNotFound
	}

	return plumbing.NewUnexpectedError(&Err{r})
}

// StatusCode returns the status code of the response
func (e *Err) StatusCode() int {
	return e.Response.StatusCode
}

func (e *Err) Error() string {
	return fmt.Sprintf("unexpected requesting %q status code: %d",
		e.Response.Request.URL, e.Response.StatusCode,
	)
}
  07070100000586000081A4000000000000000000000001645E367C00000A37000000000000000000000000000000000000005F00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/transport/http/receive_pack.go    package http

import (
	"bytes"
	"context"
	"fmt"
	"io"
	"net/http"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/protocol/packp"
	"github.com/go-git/go-git/v5/plumbing/protocol/packp/capability"
	"github.com/go-git/go-git/v5/plumbing/protocol/packp/sideband"
	"github.com/go-git/go-git/v5/plumbing/transport"
	"github.com/go-git/go-git/v5/utils/ioutil"
)

type rpSession struct {
	*session
}

func newReceivePackSession(c *http.Client, ep *transport.Endpoint, auth transport.AuthMethod) (transport.ReceivePackSession, error) {
	s, err := newSession(c, ep, auth)
	return &rpSession{s}, err
}

func (s *rpSession) AdvertisedReferences() (*packp.AdvRefs, error) {
	return advertisedReferences(context.TODO(), s.session, transport.ReceivePackServiceName)
}

func (s *rpSession) AdvertisedReferencesContext(ctx context.Context) (*packp.AdvRefs, error) {
	return advertisedReferences(ctx, s.session, transport.ReceivePackServiceName)
}

func (s *rpSession) ReceivePack(ctx context.Context, req *packp.ReferenceUpdateRequest) (
	*packp.ReportStatus, error) {
	url := fmt.Sprintf(
		"%s/%s",
		s.endpoint.String(), transport.ReceivePackServiceName,
	)

	buf := bytes.NewBuffer(nil)
	if err := req.Encode(buf); err != nil {
		return nil, err
	}

	res, err := s.doRequest(ctx, http.MethodPost, url, buf)
	if err != nil {
		return nil, err
	}

	r, err := ioutil.NonEmptyReader(res.Body)
	if err == ioutil.ErrEmptyReader {
		return nil, nil
	}

	if err != nil {
		return nil, err
	}

	var d *sideband.Demuxer
	if req.Capabilities.Supports(capability.Sideband64k) {
		d = sideband.NewDemuxer(sideband.Sideband64k, r)
	} else if req.Capabilities.Supports(capability.Sideband) {
		d = sideband.NewDemuxer(sideband.Sideband, r)
	}
	if d != nil {
		d.Progress = req.Progress
		r = d
	}

	rc := ioutil.NewReadCloser(r, res.Body)

	report := packp.NewReportStatus()
	if err := report.Decode(rc); err != nil {
		return nil, err
	}

	return report, report.Error()
}

func (s *rpSession) doRequest(
	ctx context.Context, method, url string, content *bytes.Buffer,
) (*http.Response, error) {

	var body io.Reader
	if content != nil {
		body = content
	}

	req, err := http.NewRequest(method, url, body)
	if err != nil {
		return nil, plumbing.NewPermanentError(err)
	}

	applyHeadersToRequest(req, content, s.endpoint.Host, transport.ReceivePackServiceName)
	s.ApplyAuthToRequest(req)

	res, err := s.client.Do(req.WithContext(ctx))
	if err != nil {
		return nil, plumbing.NewUnexpectedError(err)
	}

	if err := NewErr(res); err != nil {
		_ = res.Body.Close()
		return nil, err
	}

	return res, nil
}
 07070100000587000081A4000000000000000000000001645E367C00000BA4000000000000000000000000000000000000005E00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/transport/http/upload_pack.go package http

import (
	"bytes"
	"context"
	"fmt"
	"io"
	"net/http"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/format/pktline"
	"github.com/go-git/go-git/v5/plumbing/protocol/packp"
	"github.com/go-git/go-git/v5/plumbing/transport"
	"github.com/go-git/go-git/v5/plumbing/transport/internal/common"
	"github.com/go-git/go-git/v5/utils/ioutil"
)

type upSession struct {
	*session
}

func newUploadPackSession(c *http.Client, ep *transport.Endpoint, auth transport.AuthMethod) (transport.UploadPackSession, error) {
	s, err := newSession(c, ep, auth)
	return &upSession{s}, err
}

func (s *upSession) AdvertisedReferences() (*packp.AdvRefs, error) {
	return advertisedReferences(context.TODO(), s.session, transport.UploadPackServiceName)
}

func (s *upSession) AdvertisedReferencesContext(ctx context.Context) (*packp.AdvRefs, error) {
	return advertisedReferences(ctx, s.session, transport.UploadPackServiceName)
}

func (s *upSession) UploadPack(
	ctx context.Context, req *packp.UploadPackRequest,
) (*packp.UploadPackResponse, error) {

	if req.IsEmpty() {
		return nil, transport.ErrEmptyUploadPackRequest
	}

	if err := req.Validate(); err != nil {
		return nil, err
	}

	url := fmt.Sprintf(
		"%s/%s",
		s.endpoint.String(), transport.UploadPackServiceName,
	)

	content, err := uploadPackRequestToReader(req)
	if err != nil {
		return nil, err
	}

	res, err := s.doRequest(ctx, http.MethodPost, url, content)
	if err != nil {
		return nil, err
	}

	r, err := ioutil.NonEmptyReader(res.Body)
	if err != nil {
		if err == ioutil.ErrEmptyReader || err == io.ErrUnexpectedEOF {
			return nil, transport.ErrEmptyUploadPackRequest
		}

		return nil, err
	}

	rc := ioutil.NewReadCloser(r, res.Body)
	return common.DecodeUploadPackResponse(rc, req)
}

// Close does nothing.
func (s *upSession) Close() error {
	return nil
}

func (s *upSession) doRequest(
	ctx context.Context, method, url string, content *bytes.Buffer,
) (*http.Response, error) {

	var body io.Reader
	if content != nil {
		body = content
	}

	req, err := http.NewRequest(method, url, body)
	if err != nil {
		return nil, plumbing.NewPermanentError(err)
	}

	applyHeadersToRequest(req, content, s.endpoint.Host, transport.UploadPackServiceName)
	s.ApplyAuthToRequest(req)

	res, err := s.client.Do(req.WithContext(ctx))
	if err != nil {
		return nil, plumbing.NewUnexpectedError(err)
	}

	if err := NewErr(res); err != nil {
		_ = res.Body.Close()
		return nil, err
	}

	return res, nil
}

func uploadPackRequestToReader(req *packp.UploadPackRequest) (*bytes.Buffer, error) {
	buf := bytes.NewBuffer(nil)
	e := pktline.NewEncoder(buf)

	if err := req.UploadRequest.Encode(buf); err != nil {
		return nil, fmt.Errorf("sending upload-req message: %s", err)
	}

	if err := req.UploadHaves.Encode(buf, false); err != nil {
		return nil, fmt.Errorf("sending haves message: %s", err)
	}

	if err := e.EncodeString("done\n"); err != nil {
		return nil, err
	}

	return buf, nil
}
07070100000588000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/transport/internal    07070100000589000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/transport/internal/common 0707010000058A000081A4000000000000000000000001645E367C00002EDE000000000000000000000000000000000000006400000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/transport/internal/common/common.go   // Package common implements the git pack protocol with a pluggable transport.
// This is a low-level package to implement new transports. Use a concrete
// implementation instead (e.g. http, file, ssh).
//
// A simple example of usage can be found in the file package.
package common

import (
	"bufio"
	"context"
	"errors"
	"fmt"
	"io"
	stdioutil "io/ioutil"
	"strings"
	"time"

	"github.com/go-git/go-git/v5/plumbing/format/pktline"
	"github.com/go-git/go-git/v5/plumbing/protocol/packp"
	"github.com/go-git/go-git/v5/plumbing/protocol/packp/capability"
	"github.com/go-git/go-git/v5/plumbing/protocol/packp/sideband"
	"github.com/go-git/go-git/v5/plumbing/transport"
	"github.com/go-git/go-git/v5/utils/ioutil"
)

const (
	readErrorSecondsTimeout = 10
)

var (
	ErrTimeoutExceeded = errors.New("timeout exceeded")
)

// Commander creates Command instances. This is the main entry point for
// transport implementations.
type Commander interface {
	// Command creates a new Command for the given git command and
	// endpoint. cmd can be git-upload-pack or git-receive-pack. An
	// error should be returned if the endpoint is not supported or the
	// command cannot be created (e.g. binary does not exist, connection
	// cannot be established).
	Command(cmd string, ep *transport.Endpoint, auth transport.AuthMethod) (Command, error)
}

// Command is used for a single command execution.
// This interface is modeled after exec.Cmd and ssh.Session in the standard
// library.
type Command interface {
	// StderrPipe returns a pipe that will be connected to the command's
	// standard error when the command starts. It should not be called after
	// Start.
	StderrPipe() (io.Reader, error)
	// StdinPipe returns a pipe that will be connected to the command's
	// standard input when the command starts. It should not be called after
	// Start. The pipe should be closed when no more input is expected.
	StdinPipe() (io.WriteCloser, error)
	// StdoutPipe returns a pipe that will be connected to the command's
	// standard output when the command starts. It should not be called after
	// Start.
	StdoutPipe() (io.Reader, error)
	// Start starts the specified command. It does not wait for it to
	// complete.
	Start() error
	// Close closes the command and releases any resources used by it. It
	// will block until the command exits.
	Close() error
}

// CommandKiller expands the Command interface, enabling it for being killed.
type CommandKiller interface {
	// Kill and close the session whatever the state it is. It will block until
	// the command is terminated.
	Kill() error
}

type client struct {
	cmdr Commander
}

// NewClient creates a new client using the given Commander.
func NewClient(runner Commander) transport.Transport {
	return &client{runner}
}

// NewUploadPackSession creates a new UploadPackSession.
func (c *client) NewUploadPackSession(ep *transport.Endpoint, auth transport.AuthMethod) (
	transport.UploadPackSession, error) {

	return c.newSession(transport.UploadPackServiceName, ep, auth)
}

// NewReceivePackSession creates a new ReceivePackSession.
func (c *client) NewReceivePackSession(ep *transport.Endpoint, auth transport.AuthMethod) (
	transport.ReceivePackSession, error) {

	return c.newSession(transport.ReceivePackServiceName, ep, auth)
}

type session struct {
	Stdin   io.WriteCloser
	Stdout  io.Reader
	Command Command

	isReceivePack bool
	advRefs       *packp.AdvRefs
	packRun       bool
	finished      bool
	firstErrLine  chan string
}

func (c *client) newSession(s string, ep *transport.Endpoint, auth transport.AuthMethod) (*session, error) {
	cmd, err := c.cmdr.Command(s, ep, auth)
	if err != nil {
		return nil, err
	}

	stdin, err := cmd.StdinPipe()
	if err != nil {
		return nil, err
	}

	stdout, err := cmd.StdoutPipe()
	if err != nil {
		return nil, err
	}

	stderr, err := cmd.StderrPipe()
	if err != nil {
		return nil, err
	}

	if err := cmd.Start(); err != nil {
		return nil, err
	}

	return &session{
		Stdin:         stdin,
		Stdout:        stdout,
		Command:       cmd,
		firstErrLine:  c.listenFirstError(stderr),
		isReceivePack: s == transport.ReceivePackServiceName,
	}, nil
}

func (c *client) listenFirstError(r io.Reader) chan string {
	if r == nil {
		return nil
	}

	errLine := make(chan string, 1)
	go func() {
		s := bufio.NewScanner(r)
		if s.Scan() {
			errLine <- s.Text()
		} else {
			close(errLine)
		}

		_, _ = io.Copy(stdioutil.Discard, r)
	}()

	return errLine
}

func (s *session) AdvertisedReferences() (*packp.AdvRefs, error) {
	return s.AdvertisedReferencesContext(context.TODO())
}

// AdvertisedReferences retrieves the advertised references from the server.
func (s *session) AdvertisedReferencesContext(ctx context.Context) (*packp.AdvRefs, error) {
	if s.advRefs != nil {
		return s.advRefs, nil
	}

	ar := packp.NewAdvRefs()
	if err := ar.Decode(s.StdoutContext(ctx)); err != nil {
		if err := s.handleAdvRefDecodeError(err); err != nil {
			return nil, err
		}
	}

	// Some servers like jGit, announce capabilities instead of returning an
	// packp message with a flush. This verifies that we received a empty
	// adv-refs, even it contains capabilities.
	if !s.isReceivePack && ar.IsEmpty() {
		return nil, transport.ErrEmptyRemoteRepository
	}

	transport.FilterUnsupportedCapabilities(ar.Capabilities)
	s.advRefs = ar
	return ar, nil
}

func (s *session) handleAdvRefDecodeError(err error) error {
	// If repository is not found, we get empty stdout and server writes an
	// error to stderr.
	if err == packp.ErrEmptyInput {
		s.finished = true
		if err := s.checkNotFoundError(); err != nil {
			return err
		}

		return io.ErrUnexpectedEOF
	}

	// For empty (but existing) repositories, we get empty advertised-references
	// message. But valid. That is, it includes at least a flush.
	if err == packp.ErrEmptyAdvRefs {
		// Empty repositories are valid for git-receive-pack.
		if s.isReceivePack {
			return nil
		}

		if err := s.finish(); err != nil {
			return err
		}

		return transport.ErrEmptyRemoteRepository
	}

	// Some server sends the errors as normal content (git protocol), so when
	// we try to decode it fails, we need to check the content of it, to detect
	// not found errors
	if uerr, ok := err.(*packp.ErrUnexpectedData); ok {
		if isRepoNotFoundError(string(uerr.Data)) {
			return transport.ErrRepositoryNotFound
		}
	}

	return err
}

// UploadPack performs a request to the server to fetch a packfile. A reader is
// returned with the packfile content. The reader must be closed after reading.
func (s *session) UploadPack(ctx context.Context, req *packp.UploadPackRequest) (*packp.UploadPackResponse, error) {
	if req.IsEmpty() && len(req.Shallows) == 0 {
		return nil, transport.ErrEmptyUploadPackRequest
	}

	if err := req.Validate(); err != nil {
		return nil, err
	}

	if _, err := s.AdvertisedReferencesContext(ctx); err != nil {
		return nil, err
	}

	s.packRun = true

	in := s.StdinContext(ctx)
	out := s.StdoutContext(ctx)

	if err := uploadPack(in, out, req); err != nil {
		return nil, err
	}

	r, err := ioutil.NonEmptyReader(out)
	if err == ioutil.ErrEmptyReader {
		if c, ok := s.Stdout.(io.Closer); ok {
			_ = c.Close()
		}

		return nil, transport.ErrEmptyUploadPackRequest
	}

	if err != nil {
		return nil, err
	}

	rc := ioutil.NewReadCloser(r, s)
	return DecodeUploadPackResponse(rc, req)
}

func (s *session) StdinContext(ctx context.Context) io.WriteCloser {
	return ioutil.NewWriteCloserOnError(
		ioutil.NewContextWriteCloser(ctx, s.Stdin),
		s.onError,
	)
}

func (s *session) StdoutContext(ctx context.Context) io.Reader {
	return ioutil.NewReaderOnError(
		ioutil.NewContextReader(ctx, s.Stdout),
		s.onError,
	)
}

func (s *session) onError(err error) {
	if k, ok := s.Command.(CommandKiller); ok {
		_ = k.Kill()
	}

	_ = s.Close()
}

func (s *session) ReceivePack(ctx context.Context, req *packp.ReferenceUpdateRequest) (*packp.ReportStatus, error) {
	if _, err := s.AdvertisedReferences(); err != nil {
		return nil, err
	}

	s.packRun = true

	w := s.StdinContext(ctx)
	if err := req.Encode(w); err != nil {
		return nil, err
	}

	if err := w.Close(); err != nil {
		return nil, err
	}

	if !req.Capabilities.Supports(capability.ReportStatus) {
		// If we don't have report-status, we can only
		// check return value error.
		return nil, s.Command.Close()
	}

	r := s.StdoutContext(ctx)

	var d *sideband.Demuxer
	if req.Capabilities.Supports(capability.Sideband64k) {
		d = sideband.NewDemuxer(sideband.Sideband64k, r)
	} else if req.Capabilities.Supports(capability.Sideband) {
		d = sideband.NewDemuxer(sideband.Sideband, r)
	}
	if d != nil {
		d.Progress = req.Progress
		r = d
	}

	report := packp.NewReportStatus()
	if err := report.Decode(r); err != nil {
		return nil, err
	}

	if err := report.Error(); err != nil {
		defer s.Close()
		return report, err
	}

	return report, s.Command.Close()
}

func (s *session) finish() error {
	if s.finished {
		return nil
	}

	s.finished = true

	// If we did not run a upload/receive-pack, we close the connection
	// gracefully by sending a flush packet to the server. If the server
	// operates correctly, it will exit with status 0.
	if !s.packRun {
		_, err := s.Stdin.Write(pktline.FlushPkt)
		return err
	}

	return nil
}

func (s *session) Close() (err error) {
	err = s.finish()

	defer ioutil.CheckClose(s.Command, &err)
	return
}

func (s *session) checkNotFoundError() error {
	t := time.NewTicker(time.Second * readErrorSecondsTimeout)
	defer t.Stop()

	select {
	case <-t.C:
		return ErrTimeoutExceeded
	case line, ok := <-s.firstErrLine:
		if !ok {
			return nil
		}

		if isRepoNotFoundError(line) {
			return transport.ErrRepositoryNotFound
		}

		return fmt.Errorf("unknown error: %s", line)
	}
}

var (
	githubRepoNotFoundErr      = "ERROR: Repository not found."
	bitbucketRepoNotFoundErr   = "conq: repository does not exist."
	localRepoNotFoundErr       = "does not appear to be a git repository"
	gitProtocolNotFoundErr     = "ERR \n  Repository not found."
	gitProtocolNoSuchErr       = "ERR no such repository"
	gitProtocolAccessDeniedErr = "ERR access denied"
	gogsAccessDeniedErr        = "Gogs: Repository does not exist or you do not have access"
)

func isRepoNotFoundError(s string) bool {
	if strings.HasPrefix(s, githubRepoNotFoundErr) {
		return true
	}

	if strings.HasPrefix(s, bitbucketRepoNotFoundErr) {
		return true
	}

	if strings.HasSuffix(s, localRepoNotFoundErr) {
		return true
	}

	if strings.HasPrefix(s, gitProtocolNotFoundErr) {
		return true
	}

	if strings.HasPrefix(s, gitProtocolNoSuchErr) {
		return true
	}

	if strings.HasPrefix(s, gitProtocolAccessDeniedErr) {
		return true
	}

	if strings.HasPrefix(s, gogsAccessDeniedErr) {
		return true
	}

	return false
}

var (
	nak = []byte("NAK")
	eol = []byte("\n")
)

// uploadPack implements the git-upload-pack protocol.
func uploadPack(w io.WriteCloser, r io.Reader, req *packp.UploadPackRequest) error {
	// TODO support multi_ack mode
	// TODO support multi_ack_detailed mode
	// TODO support acks for common objects
	// TODO build a proper state machine for all these processing options

	if err := req.UploadRequest.Encode(w); err != nil {
		return fmt.Errorf("sending upload-req message: %s", err)
	}

	if err := req.UploadHaves.Encode(w, true); err != nil {
		return fmt.Errorf("sending haves message: %s", err)
	}

	if err := sendDone(w); err != nil {
		return fmt.Errorf("sending done message: %s", err)
	}

	if err := w.Close(); err != nil {
		return fmt.Errorf("closing input: %s", err)
	}

	return nil
}

func sendDone(w io.Writer) error {
	e := pktline.NewEncoder(w)

	return e.Encodef("done\n")
}

// DecodeUploadPackResponse decodes r into a new packp.UploadPackResponse
func DecodeUploadPackResponse(r io.ReadCloser, req *packp.UploadPackRequest) (
	*packp.UploadPackResponse, error,
) {
	res := packp.NewUploadPackResponse(req)
	if err := res.Decode(r); err != nil {
		return nil, fmt.Errorf("error decoding upload-pack response: %s", err)
	}

	return res, nil
}
  0707010000058B000081A4000000000000000000000001645E367C0000064D000000000000000000000000000000000000006400000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/transport/internal/common/server.go   package common

import (
	"context"
	"fmt"
	"io"

	"github.com/go-git/go-git/v5/plumbing/protocol/packp"
	"github.com/go-git/go-git/v5/plumbing/transport"
	"github.com/go-git/go-git/v5/utils/ioutil"
)

// ServerCommand is used for a single server command execution.
type ServerCommand struct {
	Stderr io.Writer
	Stdout io.WriteCloser
	Stdin  io.Reader
}

func ServeUploadPack(cmd ServerCommand, s transport.UploadPackSession) (err error) {
	ioutil.CheckClose(cmd.Stdout, &err)

	ar, err := s.AdvertisedReferences()
	if err != nil {
		return err
	}

	if err := ar.Encode(cmd.Stdout); err != nil {
		return err
	}

	req := packp.NewUploadPackRequest()
	if err := req.Decode(cmd.Stdin); err != nil {
		return err
	}

	var resp *packp.UploadPackResponse
	resp, err = s.UploadPack(context.TODO(), req)
	if err != nil {
		return err
	}

	return resp.Encode(cmd.Stdout)
}

func ServeReceivePack(cmd ServerCommand, s transport.ReceivePackSession) error {
	ar, err := s.AdvertisedReferences()
	if err != nil {
		return fmt.Errorf("internal error in advertised references: %s", err)
	}

	if err := ar.Encode(cmd.Stdout); err != nil {
		return fmt.Errorf("error in advertised references encoding: %s", err)
	}

	req := packp.NewReferenceUpdateRequest()
	if err := req.Decode(cmd.Stdin); err != nil {
		return fmt.Errorf("error decoding: %s", err)
	}

	rs, err := s.ReceivePack(context.TODO(), req)
	if rs != nil {
		if err := rs.Encode(cmd.Stdout); err != nil {
			return fmt.Errorf("error in encoding report status %s", err)
		}
	}

	if err != nil {
		return fmt.Errorf("error in receive pack: %s", err)
	}

	return nil
}
   0707010000058C000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/transport/server  0707010000058D000081A4000000000000000000000001645E367C0000079E000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/transport/server/loader.go    package server

import (
	"github.com/go-git/go-git/v5/plumbing/cache"
	"github.com/go-git/go-git/v5/plumbing/storer"
	"github.com/go-git/go-git/v5/plumbing/transport"
	"github.com/go-git/go-git/v5/storage/filesystem"

	"github.com/go-git/go-billy/v5"
	"github.com/go-git/go-billy/v5/osfs"
)

// DefaultLoader is a filesystem loader ignoring host and resolving paths to /.
var DefaultLoader = NewFilesystemLoader(osfs.New(""))

// Loader loads repository's storer.Storer based on an optional host and a path.
type Loader interface {
	// Load loads a storer.Storer given a transport.Endpoint.
	// Returns transport.ErrRepositoryNotFound if the repository does not
	// exist.
	Load(ep *transport.Endpoint) (storer.Storer, error)
}

type fsLoader struct {
	base billy.Filesystem
}

// NewFilesystemLoader creates a Loader that ignores host and resolves paths
// with a given base filesystem.
func NewFilesystemLoader(base billy.Filesystem) Loader {
	return &fsLoader{base}
}

// Load looks up the endpoint's path in the base file system and returns a
// storer for it. Returns transport.ErrRepositoryNotFound if a repository does
// not exist in the given path.
func (l *fsLoader) Load(ep *transport.Endpoint) (storer.Storer, error) {
	fs, err := l.base.Chroot(ep.Path)
	if err != nil {
		return nil, err
	}

	if _, err := fs.Stat("config"); err != nil {
		return nil, transport.ErrRepositoryNotFound
	}

	return filesystem.NewStorage(fs, cache.NewObjectLRUDefault()), nil
}

// MapLoader is a Loader that uses a lookup map of storer.Storer by
// transport.Endpoint.
type MapLoader map[string]storer.Storer

// Load returns a storer.Storer for given a transport.Endpoint by looking it up
// in the map. Returns transport.ErrRepositoryNotFound if the endpoint does not
// exist.
func (l MapLoader) Load(ep *transport.Endpoint) (storer.Storer, error) {
	s, ok := l[ep.String()]
	if !ok {
		return nil, transport.ErrRepositoryNotFound
	}

	return s, nil
}
  0707010000058E000081A4000000000000000000000001645E367C0000248F000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/transport/server/server.go    // Package server implements the git server protocol. For most use cases, the
// transport-specific implementations should be used.
package server

import (
	"context"
	"errors"
	"fmt"
	"io"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/format/packfile"
	"github.com/go-git/go-git/v5/plumbing/protocol/packp"
	"github.com/go-git/go-git/v5/plumbing/protocol/packp/capability"
	"github.com/go-git/go-git/v5/plumbing/revlist"
	"github.com/go-git/go-git/v5/plumbing/storer"
	"github.com/go-git/go-git/v5/plumbing/transport"
	"github.com/go-git/go-git/v5/utils/ioutil"
)

var DefaultServer = NewServer(DefaultLoader)

type server struct {
	loader  Loader
	handler *handler
}

// NewServer returns a transport.Transport implementing a git server,
// independent of transport. Each transport must wrap this.
func NewServer(loader Loader) transport.Transport {
	return &server{
		loader,
		&handler{asClient: false},
	}
}

// NewClient returns a transport.Transport implementing a client with an
// embedded server.
func NewClient(loader Loader) transport.Transport {
	return &server{
		loader,
		&handler{asClient: true},
	}
}

func (s *server) NewUploadPackSession(ep *transport.Endpoint, auth transport.AuthMethod) (transport.UploadPackSession, error) {
	sto, err := s.loader.Load(ep)
	if err != nil {
		return nil, err
	}

	return s.handler.NewUploadPackSession(sto)
}

func (s *server) NewReceivePackSession(ep *transport.Endpoint, auth transport.AuthMethod) (transport.ReceivePackSession, error) {
	sto, err := s.loader.Load(ep)
	if err != nil {
		return nil, err
	}

	return s.handler.NewReceivePackSession(sto)
}

type handler struct {
	asClient bool
}

func (h *handler) NewUploadPackSession(s storer.Storer) (transport.UploadPackSession, error) {
	return &upSession{
		session: session{storer: s, asClient: h.asClient},
	}, nil
}

func (h *handler) NewReceivePackSession(s storer.Storer) (transport.ReceivePackSession, error) {
	return &rpSession{
		session:   session{storer: s, asClient: h.asClient},
		cmdStatus: map[plumbing.ReferenceName]error{},
	}, nil
}

type session struct {
	storer   storer.Storer
	caps     *capability.List
	asClient bool
}

func (s *session) Close() error {
	return nil
}

func (s *session) SetAuth(transport.AuthMethod) error {
	//TODO: deprecate
	return nil
}

func (s *session) checkSupportedCapabilities(cl *capability.List) error {
	for _, c := range cl.All() {
		if !s.caps.Supports(c) {
			return fmt.Errorf("unsupported capability: %s", c)
		}
	}

	return nil
}

type upSession struct {
	session
}

func (s *upSession) AdvertisedReferences() (*packp.AdvRefs, error) {
	return s.AdvertisedReferencesContext(context.TODO())
}

func (s *upSession) AdvertisedReferencesContext(ctx context.Context) (*packp.AdvRefs, error) {
	ar := packp.NewAdvRefs()

	if err := s.setSupportedCapabilities(ar.Capabilities); err != nil {
		return nil, err
	}

	s.caps = ar.Capabilities

	if err := setReferences(s.storer, ar); err != nil {
		return nil, err
	}

	if err := setHEAD(s.storer, ar); err != nil {
		return nil, err
	}

	if s.asClient && len(ar.References) == 0 {
		return nil, transport.ErrEmptyRemoteRepository
	}

	return ar, nil
}

func (s *upSession) UploadPack(ctx context.Context, req *packp.UploadPackRequest) (*packp.UploadPackResponse, error) {
	if req.IsEmpty() {
		return nil, transport.ErrEmptyUploadPackRequest
	}

	if err := req.Validate(); err != nil {
		return nil, err
	}

	if s.caps == nil {
		s.caps = capability.NewList()
		if err := s.setSupportedCapabilities(s.caps); err != nil {
			return nil, err
		}
	}

	if err := s.checkSupportedCapabilities(req.Capabilities); err != nil {
		return nil, err
	}

	s.caps = req.Capabilities

	if len(req.Shallows) > 0 {
		return nil, fmt.Errorf("shallow not supported")
	}

	objs, err := s.objectsToUpload(req)
	if err != nil {
		return nil, err
	}

	pr, pw := ioutil.Pipe()
	e := packfile.NewEncoder(pw, s.storer, false)
	go func() {
		// TODO: plumb through a pack window.
		_, err := e.Encode(objs, 10)
		pw.CloseWithError(err)
	}()

	return packp.NewUploadPackResponseWithPackfile(req,
		ioutil.NewContextReadCloser(ctx, pr),
	), nil
}

func (s *upSession) objectsToUpload(req *packp.UploadPackRequest) ([]plumbing.Hash, error) {
	haves, err := revlist.Objects(s.storer, req.Haves, nil)
	if err != nil {
		return nil, err
	}

	return revlist.Objects(s.storer, req.Wants, haves)
}

func (*upSession) setSupportedCapabilities(c *capability.List) error {
	if err := c.Set(capability.Agent, capability.DefaultAgent); err != nil {
		return err
	}

	if err := c.Set(capability.OFSDelta); err != nil {
		return err
	}

	return nil
}

type rpSession struct {
	session
	cmdStatus map[plumbing.ReferenceName]error
	firstErr  error
	unpackErr error
}

func (s *rpSession) AdvertisedReferences() (*packp.AdvRefs, error) {
	return s.AdvertisedReferencesContext(context.TODO())
}

func (s *rpSession) AdvertisedReferencesContext(ctx context.Context) (*packp.AdvRefs, error) {
	ar := packp.NewAdvRefs()

	if err := s.setSupportedCapabilities(ar.Capabilities); err != nil {
		return nil, err
	}

	s.caps = ar.Capabilities

	if err := setReferences(s.storer, ar); err != nil {
		return nil, err
	}

	if err := setHEAD(s.storer, ar); err != nil {
		return nil, err
	}

	return ar, nil
}

var (
	ErrUpdateReference = errors.New("failed to update ref")
)

func (s *rpSession) ReceivePack(ctx context.Context, req *packp.ReferenceUpdateRequest) (*packp.ReportStatus, error) {
	if s.caps == nil {
		s.caps = capability.NewList()
		if err := s.setSupportedCapabilities(s.caps); err != nil {
			return nil, err
		}
	}

	if err := s.checkSupportedCapabilities(req.Capabilities); err != nil {
		return nil, err
	}

	s.caps = req.Capabilities

	//TODO: Implement 'atomic' update of references.

	if req.Packfile != nil {
		r := ioutil.NewContextReadCloser(ctx, req.Packfile)
		if err := s.writePackfile(r); err != nil {
			s.unpackErr = err
			s.firstErr = err
			return s.reportStatus(), err
		}
	}

	s.updateReferences(req)
	return s.reportStatus(), s.firstErr
}

func (s *rpSession) updateReferences(req *packp.ReferenceUpdateRequest) {
	for _, cmd := range req.Commands {
		exists, err := referenceExists(s.storer, cmd.Name)
		if err != nil {
			s.setStatus(cmd.Name, err)
			continue
		}

		switch cmd.Action() {
		case packp.Create:
			if exists {
				s.setStatus(cmd.Name, ErrUpdateReference)
				continue
			}

			ref := plumbing.NewHashReference(cmd.Name, cmd.New)
			err := s.storer.SetReference(ref)
			s.setStatus(cmd.Name, err)
		case packp.Delete:
			if !exists {
				s.setStatus(cmd.Name, ErrUpdateReference)
				continue
			}

			err := s.storer.RemoveReference(cmd.Name)
			s.setStatus(cmd.Name, err)
		case packp.Update:
			if !exists {
				s.setStatus(cmd.Name, ErrUpdateReference)
				continue
			}

			ref := plumbing.NewHashReference(cmd.Name, cmd.New)
			err := s.storer.SetReference(ref)
			s.setStatus(cmd.Name, err)
		}
	}
}

func (s *rpSession) writePackfile(r io.ReadCloser) error {
	if r == nil {
		return nil
	}

	if err := packfile.UpdateObjectStorage(s.storer, r); err != nil {
		_ = r.Close()
		return err
	}

	return r.Close()
}

func (s *rpSession) setStatus(ref plumbing.ReferenceName, err error) {
	s.cmdStatus[ref] = err
	if s.firstErr == nil && err != nil {
		s.firstErr = err
	}
}

func (s *rpSession) reportStatus() *packp.ReportStatus {
	if !s.caps.Supports(capability.ReportStatus) {
		return nil
	}

	rs := packp.NewReportStatus()
	rs.UnpackStatus = "ok"

	if s.unpackErr != nil {
		rs.UnpackStatus = s.unpackErr.Error()
	}

	if s.cmdStatus == nil {
		return rs
	}

	for ref, err := range s.cmdStatus {
		msg := "ok"
		if err != nil {
			msg = err.Error()
		}
		status := &packp.CommandStatus{
			ReferenceName: ref,
			Status:        msg,
		}
		rs.CommandStatuses = append(rs.CommandStatuses, status)
	}

	return rs
}

func (*rpSession) setSupportedCapabilities(c *capability.List) error {
	if err := c.Set(capability.Agent, capability.DefaultAgent); err != nil {
		return err
	}

	if err := c.Set(capability.OFSDelta); err != nil {
		return err
	}

	if err := c.Set(capability.DeleteRefs); err != nil {
		return err
	}

	return c.Set(capability.ReportStatus)
}

func setHEAD(s storer.Storer, ar *packp.AdvRefs) error {
	ref, err := s.Reference(plumbing.HEAD)
	if err == plumbing.ErrReferenceNotFound {
		return nil
	}

	if err != nil {
		return err
	}

	if ref.Type() == plumbing.SymbolicReference {
		if err := ar.AddReference(ref); err != nil {
			return nil
		}

		ref, err = storer.ResolveReference(s, ref.Target())
		if err == plumbing.ErrReferenceNotFound {
			return nil
		}

		if err != nil {
			return err
		}
	}

	if ref.Type() != plumbing.HashReference {
		return plumbing.ErrInvalidType
	}

	h := ref.Hash()
	ar.Head = &h

	return nil
}

func setReferences(s storer.Storer, ar *packp.AdvRefs) error {
	//TODO: add peeled references.
	iter, err := s.IterReferences()
	if err != nil {
		return err
	}

	return iter.ForEach(func(ref *plumbing.Reference) error {
		if ref.Type() != plumbing.HashReference {
			return nil
		}

		ar.References[ref.Name().String()] = ref.Hash()
		return nil
	})
}

func referenceExists(s storer.ReferenceStorer, n plumbing.ReferenceName) (bool, error) {
	_, err := s.Reference(n)
	if err == plumbing.ErrReferenceNotFound {
		return false, nil
	}

	return err == nil, err
}
 0707010000058F000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/transport/ssh 07070100000590000081A4000000000000000000000001645E367C00002015000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/transport/ssh/auth_method.go  package ssh

import (
	"errors"
	"fmt"
	"io/ioutil"
	"os"
	"os/user"
	"path/filepath"

	"github.com/go-git/go-git/v5/plumbing/transport"

	"github.com/mitchellh/go-homedir"
	sshagent "github.com/xanzy/ssh-agent"
	"golang.org/x/crypto/ssh"
	"golang.org/x/crypto/ssh/knownhosts"
)

const DefaultUsername = "git"

// AuthMethod is the interface all auth methods for the ssh client
// must implement. The clientConfig method returns the ssh client
// configuration needed to establish an ssh connection.
type AuthMethod interface {
	transport.AuthMethod
	// ClientConfig should return a valid ssh.ClientConfig to be used to create
	// a connection to the SSH server.
	ClientConfig() (*ssh.ClientConfig, error)
}

// The names of the AuthMethod implementations. To be returned by the
// Name() method. Most git servers only allow PublicKeysName and
// PublicKeysCallbackName.
const (
	KeyboardInteractiveName = "ssh-keyboard-interactive"
	PasswordName            = "ssh-password"
	PasswordCallbackName    = "ssh-password-callback"
	PublicKeysName          = "ssh-public-keys"
	PublicKeysCallbackName  = "ssh-public-key-callback"
)

// KeyboardInteractive implements AuthMethod by using a
// prompt/response sequence controlled by the server.
type KeyboardInteractive struct {
	User      string
	Challenge ssh.KeyboardInteractiveChallenge
	HostKeyCallbackHelper
}

func (a *KeyboardInteractive) Name() string {
	return KeyboardInteractiveName
}

func (a *KeyboardInteractive) String() string {
	return fmt.Sprintf("user: %s, name: %s", a.User, a.Name())
}

func (a *KeyboardInteractive) ClientConfig() (*ssh.ClientConfig, error) {
	return a.SetHostKeyCallback(&ssh.ClientConfig{
		User: a.User,
		Auth: []ssh.AuthMethod{
			a.Challenge,
		},
	})
}

// Password implements AuthMethod by using the given password.
type Password struct {
	User     string
	Password string
	HostKeyCallbackHelper
}

func (a *Password) Name() string {
	return PasswordName
}

func (a *Password) String() string {
	return fmt.Sprintf("user: %s, name: %s", a.User, a.Name())
}

func (a *Password) ClientConfig() (*ssh.ClientConfig, error) {
	return a.SetHostKeyCallback(&ssh.ClientConfig{
		User: a.User,
		Auth: []ssh.AuthMethod{ssh.Password(a.Password)},
	})
}

// PasswordCallback implements AuthMethod by using a callback
// to fetch the password.
type PasswordCallback struct {
	User     string
	Callback func() (pass string, err error)
	HostKeyCallbackHelper
}

func (a *PasswordCallback) Name() string {
	return PasswordCallbackName
}

func (a *PasswordCallback) String() string {
	return fmt.Sprintf("user: %s, name: %s", a.User, a.Name())
}

func (a *PasswordCallback) ClientConfig() (*ssh.ClientConfig, error) {
	return a.SetHostKeyCallback(&ssh.ClientConfig{
		User: a.User,
		Auth: []ssh.AuthMethod{ssh.PasswordCallback(a.Callback)},
	})
}

// PublicKeys implements AuthMethod by using the given key pairs.
type PublicKeys struct {
	User   string
	Signer ssh.Signer
	HostKeyCallbackHelper
}

// NewPublicKeys returns a PublicKeys from a PEM encoded private key. An
// encryption password should be given if the pemBytes contains a password
// encrypted PEM block otherwise password should be empty. It supports RSA
// (PKCS#1), PKCS#8, DSA (OpenSSL), and ECDSA private keys.
func NewPublicKeys(user string, pemBytes []byte, password string) (*PublicKeys, error) {
	signer, err := ssh.ParsePrivateKey(pemBytes)
	if _, ok := err.(*ssh.PassphraseMissingError); ok {
		signer, err = ssh.ParsePrivateKeyWithPassphrase(pemBytes, []byte(password))
	}
	if err != nil {
		return nil, err
	}
	return &PublicKeys{User: user, Signer: signer}, nil
}

// NewPublicKeysFromFile returns a PublicKeys from a file containing a PEM
// encoded private key. An encryption password should be given if the pemBytes
// contains a password encrypted PEM block otherwise password should be empty.
func NewPublicKeysFromFile(user, pemFile, password string) (*PublicKeys, error) {
	bytes, err := ioutil.ReadFile(pemFile)
	if err != nil {
		return nil, err
	}

	return NewPublicKeys(user, bytes, password)
}

func (a *PublicKeys) Name() string {
	return PublicKeysName
}

func (a *PublicKeys) String() string {
	return fmt.Sprintf("user: %s, name: %s", a.User, a.Name())
}

func (a *PublicKeys) ClientConfig() (*ssh.ClientConfig, error) {
	return a.SetHostKeyCallback(&ssh.ClientConfig{
		User: a.User,
		Auth: []ssh.AuthMethod{ssh.PublicKeys(a.Signer)},
	})
}

func username() (string, error) {
	var username string
	if user, err := user.Current(); err == nil {
		username = user.Username
	} else {
		username = os.Getenv("USER")
	}

	if username == "" {
		return "", errors.New("failed to get username")
	}

	return username, nil
}

// PublicKeysCallback implements AuthMethod by asking a
// ssh.agent.Agent to act as a signer.
type PublicKeysCallback struct {
	User     string
	Callback func() (signers []ssh.Signer, err error)
	HostKeyCallbackHelper
}

// NewSSHAgentAuth returns a PublicKeysCallback based on a SSH agent, it opens
// a pipe with the SSH agent and uses the pipe as the implementer of the public
// key callback function.
func NewSSHAgentAuth(u string) (*PublicKeysCallback, error) {
	var err error
	if u == "" {
		u, err = username()
		if err != nil {
			return nil, err
		}
	}

	a, _, err := sshagent.New()
	if err != nil {
		return nil, fmt.Errorf("error creating SSH agent: %q", err)
	}

	return &PublicKeysCallback{
		User:     u,
		Callback: a.Signers,
	}, nil
}

func (a *PublicKeysCallback) Name() string {
	return PublicKeysCallbackName
}

func (a *PublicKeysCallback) String() string {
	return fmt.Sprintf("user: %s, name: %s", a.User, a.Name())
}

func (a *PublicKeysCallback) ClientConfig() (*ssh.ClientConfig, error) {
	return a.SetHostKeyCallback(&ssh.ClientConfig{
		User: a.User,
		Auth: []ssh.AuthMethod{ssh.PublicKeysCallback(a.Callback)},
	})
}

// NewKnownHostsCallback returns ssh.HostKeyCallback based on a file based on a
// known_hosts file. http://man.openbsd.org/sshd#SSH_KNOWN_HOSTS_FILE_FORMAT
//
// If list of files is empty, then it will be read from the SSH_KNOWN_HOSTS
// environment variable, example:
//   /home/foo/custom_known_hosts_file:/etc/custom_known/hosts_file
//
// If SSH_KNOWN_HOSTS is not set the following file locations will be used:
//   ~/.ssh/known_hosts
//   /etc/ssh/ssh_known_hosts
func NewKnownHostsCallback(files ...string) (ssh.HostKeyCallback, error) {
	var err error

	if len(files) == 0 {
		if files, err = getDefaultKnownHostsFiles(); err != nil {
			return nil, err
		}
	}

	if files, err = filterKnownHostsFiles(files...); err != nil {
		return nil, err
	}

	return knownhosts.New(files...)
}

func getDefaultKnownHostsFiles() ([]string, error) {
	files := filepath.SplitList(os.Getenv("SSH_KNOWN_HOSTS"))
	if len(files) != 0 {
		return files, nil
	}

	homeDirPath, err := homedir.Dir()
	if err != nil {
		return nil, err
	}

	return []string{
		filepath.Join(homeDirPath, "/.ssh/known_hosts"),
		"/etc/ssh/ssh_known_hosts",
	}, nil
}

func filterKnownHostsFiles(files ...string) ([]string, error) {
	var out []string
	for _, file := range files {
		_, err := os.Stat(file)
		if err == nil {
			out = append(out, file)
			continue
		}

		if !os.IsNotExist(err) {
			return nil, err
		}
	}

	if len(out) == 0 {
		return nil, fmt.Errorf("unable to find any valid known_hosts file, set SSH_KNOWN_HOSTS env variable")
	}

	return out, nil
}

// HostKeyCallbackHelper is a helper that provides common functionality to
// configure HostKeyCallback into a ssh.ClientConfig.
type HostKeyCallbackHelper struct {
	// HostKeyCallback is the function type used for verifying server keys.
	// If nil default callback will be create using NewKnownHostsCallback
	// without argument.
	HostKeyCallback ssh.HostKeyCallback
}

// SetHostKeyCallback sets the field HostKeyCallback in the given cfg. If
// HostKeyCallback is empty a default callback is created using
// NewKnownHostsCallback.
func (m *HostKeyCallbackHelper) SetHostKeyCallback(cfg *ssh.ClientConfig) (*ssh.ClientConfig, error) {
	var err error
	if m.HostKeyCallback == nil {
		if m.HostKeyCallback, err = NewKnownHostsCallback(); err != nil {
			return cfg, err
		}
	}

	cfg.HostKeyCallback = m.HostKeyCallback
	return cfg, nil
}
   07070100000591000081A4000000000000000000000001645E367C000013F1000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/plumbing/transport/ssh/common.go   // Package ssh implements the SSH transport protocol.
package ssh

import (
	"context"
	"fmt"
	"reflect"
	"strconv"
	"strings"

	"github.com/go-git/go-git/v5/plumbing/transport"
	"github.com/go-git/go-git/v5/plumbing/transport/internal/common"

	"github.com/kevinburke/ssh_config"
	"golang.org/x/crypto/ssh"
	"golang.org/x/net/proxy"
)

// DefaultClient is the default SSH client.
var DefaultClient = NewClient(nil)

// DefaultSSHConfig is the reader used to access parameters stored in the
// system's ssh_config files. If nil all the ssh_config are ignored.
var DefaultSSHConfig sshConfig = ssh_config.DefaultUserSettings

type sshConfig interface {
	Get(alias, key string) string
}

// NewClient creates a new SSH client with an optional *ssh.ClientConfig.
func NewClient(config *ssh.ClientConfig) transport.Transport {
	return common.NewClient(&runner{config: config})
}

// DefaultAuthBuilder is the function used to create a default AuthMethod, when
// the user doesn't provide any.
var DefaultAuthBuilder = func(user string) (AuthMethod, error) {
	return NewSSHAgentAuth(user)
}

const DefaultPort = 22

type runner struct {
	config *ssh.ClientConfig
}

func (r *runner) Command(cmd string, ep *transport.Endpoint, auth transport.AuthMethod) (common.Command, error) {
	c := &command{command: cmd, endpoint: ep, config: r.config}
	if auth != nil {
		c.setAuth(auth)
	}

	if err := c.connect(); err != nil {
		return nil, err
	}
	return c, nil
}

type command struct {
	*ssh.Session
	connected bool
	command   string
	endpoint  *transport.Endpoint
	client    *ssh.Client
	auth      AuthMethod
	config    *ssh.ClientConfig
}

func (c *command) setAuth(auth transport.AuthMethod) error {
	a, ok := auth.(AuthMethod)
	if !ok {
		return transport.ErrInvalidAuthMethod
	}

	c.auth = a
	return nil
}

func (c *command) Start() error {
	return c.Session.Start(endpointToCommand(c.command, c.endpoint))
}

// Close closes the SSH session and connection.
func (c *command) Close() error {
	if !c.connected {
		return nil
	}

	c.connected = false

	//XXX: If did read the full packfile, then the session might be already
	//     closed.
	_ = c.Session.Close()
	err := c.client.Close()

	//XXX: in go1.16+ we can use errors.Is(err, net.ErrClosed)
	if err != nil && strings.HasSuffix(err.Error(), "use of closed network connection") {
		return nil
	}

	return err
}

// connect connects to the SSH server, unless a AuthMethod was set with
// SetAuth method, by default uses an auth method based on PublicKeysCallback,
// it connects to a SSH agent, using the address stored in the SSH_AUTH_SOCK
// environment var.
func (c *command) connect() error {
	if c.connected {
		return transport.ErrAlreadyConnected
	}

	if c.auth == nil {
		if err := c.setAuthFromEndpoint(); err != nil {
			return err
		}
	}

	var err error
	config, err := c.auth.ClientConfig()
	if err != nil {
		return err
	}

	overrideConfig(c.config, config)

	c.client, err = dial("tcp", c.getHostWithPort(), config)
	if err != nil {
		return err
	}

	c.Session, err = c.client.NewSession()
	if err != nil {
		_ = c.client.Close()
		return err
	}

	c.connected = true
	return nil
}

func dial(network, addr string, config *ssh.ClientConfig) (*ssh.Client, error) {
	var (
		ctx    = context.Background()
		cancel context.CancelFunc
	)
	if config.Timeout > 0 {
		ctx, cancel = context.WithTimeout(ctx, config.Timeout)
	} else {
		ctx, cancel = context.WithCancel(ctx)
	}
	defer cancel()

	conn, err := proxy.Dial(ctx, network, addr)
	if err != nil {
		return nil, err
	}
	c, chans, reqs, err := ssh.NewClientConn(conn, addr, config)
	if err != nil {
		return nil, err
	}
	return ssh.NewClient(c, chans, reqs), nil
}

func (c *command) getHostWithPort() string {
	if addr, found := c.doGetHostWithPortFromSSHConfig(); found {
		return addr
	}

	host := c.endpoint.Host
	port := c.endpoint.Port
	if port <= 0 {
		port = DefaultPort
	}

	return fmt.Sprintf("%s:%d", host, port)
}

func (c *command) doGetHostWithPortFromSSHConfig() (addr string, found bool) {
	if DefaultSSHConfig == nil {
		return
	}

	host := c.endpoint.Host
	port := c.endpoint.Port

	configHost := DefaultSSHConfig.Get(c.endpoint.Host, "Hostname")
	if configHost != "" {
		host = configHost
		found = true
	}

	if !found {
		return
	}

	configPort := DefaultSSHConfig.Get(c.endpoint.Host, "Port")
	if configPort != "" {
		if i, err := strconv.Atoi(configPort); err == nil {
			port = i
		}
	}

	addr = fmt.Sprintf("%s:%d", host, port)
	return
}

func (c *command) setAuthFromEndpoint() error {
	var err error
	c.auth, err = DefaultAuthBuilder(c.endpoint.User)
	return err
}

func endpointToCommand(cmd string, ep *transport.Endpoint) string {
	return fmt.Sprintf("%s '%s'", cmd, ep.Path)
}

func overrideConfig(overrides *ssh.ClientConfig, c *ssh.ClientConfig) {
	if overrides == nil {
		return
	}

	t := reflect.TypeOf(*c)
	vc := reflect.ValueOf(c).Elem()
	vo := reflect.ValueOf(overrides).Elem()

	for i := 0; i < t.NumField(); i++ {
		f := t.Field(i)
		vcf := vc.FieldByName(f.Name)
		vof := vo.FieldByName(f.Name)
		vcf.Set(vof)
	}

	*c = vc.Interface().(ssh.ClientConfig)
}
   07070100000592000081A4000000000000000000000001645E367C0000069A000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/prune.go   package git

import (
	"errors"
	"time"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/storer"
)

type PruneHandler func(unreferencedObjectHash plumbing.Hash) error
type PruneOptions struct {
	// OnlyObjectsOlderThan if set to non-zero value
	// selects only objects older than the time provided.
	OnlyObjectsOlderThan time.Time
	// Handler is called on matching objects
	Handler PruneHandler
}

var ErrLooseObjectsNotSupported = errors.New("Loose objects not supported")

// DeleteObject deletes an object from a repository.
// The type conveniently matches PruneHandler.
func (r *Repository) DeleteObject(hash plumbing.Hash) error {
	los, ok := r.Storer.(storer.LooseObjectStorer)
	if !ok {
		return ErrLooseObjectsNotSupported
	}

	return los.DeleteLooseObject(hash)
}

func (r *Repository) Prune(opt PruneOptions) error {
	los, ok := r.Storer.(storer.LooseObjectStorer)
	if !ok {
		return ErrLooseObjectsNotSupported
	}

	pw := newObjectWalker(r.Storer)
	err := pw.walkAllRefs()
	if err != nil {
		return err
	}
	// Now walk all (loose) objects in storage.
	return los.ForEachObjectHash(func(hash plumbing.Hash) error {
		// Get out if we have seen this object.
		if pw.isSeen(hash) {
			return nil
		}
		// Otherwise it is a candidate for pruning.
		// Check out for too new objects next.
		if !opt.OnlyObjectsOlderThan.IsZero() {
			// Errors here are non-fatal. The object may be e.g. packed.
			// Or concurrently deleted. Skip such objects.
			t, err := los.LooseObjectTime(hash)
			if err != nil {
				return nil
			}
			// Skip too new objects.
			if !t.Before(opt.OnlyObjectsOlderThan) {
				return nil
			}
		}
		return opt.Handler(hash)
	})
}
  07070100000593000081A4000000000000000000000001645E367C00001B28000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/references.go  package git

import (
	"io"
	"sort"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/object"
	"github.com/go-git/go-git/v5/utils/diff"

	"github.com/sergi/go-diff/diffmatchpatch"
)

// References returns a slice of Commits for the file at "path", starting from
// the commit provided that contains the file from the provided path. The last
// commit into the returned slice is the commit where the file was created.
// If the provided commit does not contains the specified path, a nil slice is
// returned. The commits are sorted in commit order, newer to older.
//
// Caveats:
//
// - Moves and copies are not currently supported.
//
// - Cherry-picks are not detected unless there are no commits between them and
// therefore can appear repeated in the list. (see git path-id for hints on how
// to fix this).
func references(c *object.Commit, path string) ([]*object.Commit, error) {
	var result []*object.Commit
	seen := make(map[plumbing.Hash]struct{})
	if err := walkGraph(&result, &seen, c, path); err != nil {
		return nil, err
	}

	// TODO result should be returned without ordering
	sortCommits(result)

	// for merges of identical cherry-picks
	return removeComp(path, result, equivalent)
}

type commitSorterer struct {
	l []*object.Commit
}

func (s commitSorterer) Len() int {
	return len(s.l)
}

func (s commitSorterer) Less(i, j int) bool {
	return s.l[i].Committer.When.Before(s.l[j].Committer.When) ||
		s.l[i].Committer.When.Equal(s.l[j].Committer.When) &&
			s.l[i].Author.When.Before(s.l[j].Author.When)
}

func (s commitSorterer) Swap(i, j int) {
	s.l[i], s.l[j] = s.l[j], s.l[i]
}

// SortCommits sorts a commit list by commit date, from older to newer.
func sortCommits(l []*object.Commit) {
	s := &commitSorterer{l}
	sort.Sort(s)
}

// Recursive traversal of the commit graph, generating a linear history of the
// path.
func walkGraph(result *[]*object.Commit, seen *map[plumbing.Hash]struct{}, current *object.Commit, path string) error {
	// check and update seen
	if _, ok := (*seen)[current.Hash]; ok {
		return nil
	}
	(*seen)[current.Hash] = struct{}{}

	// if the path is not in the current commit, stop searching.
	if _, err := current.File(path); err != nil {
		return nil
	}

	// optimization: don't traverse branches that does not
	// contain the path.
	parents, err := parentsContainingPath(path, current)
	if err != nil {
		return err
	}
	switch len(parents) {
	// if the path is not found in any of its parents, the path was
	// created by this commit; we must add it to the revisions list and
	// stop searching. This includes the case when current is the
	// initial commit.
	case 0:
		*result = append(*result, current)
		return nil
	case 1: // only one parent contains the path
		// if the file contents has change, add the current commit
		different, err := differentContents(path, current, parents)
		if err != nil {
			return err
		}
		if len(different) == 1 {
			*result = append(*result, current)
		}
		// in any case, walk the parent
		return walkGraph(result, seen, parents[0], path)
	default: // more than one parent contains the path
		// TODO: detect merges that had a conflict, because they must be
		// included in the result here.
		for _, p := range parents {
			err := walkGraph(result, seen, p, path)
			if err != nil {
				return err
			}
		}
	}
	return nil
}

func parentsContainingPath(path string, c *object.Commit) ([]*object.Commit, error) {
	// TODO: benchmark this method making git.object.Commit.parent public instead of using
	// an iterator
	var result []*object.Commit
	iter := c.Parents()
	for {
		parent, err := iter.Next()
		if err == io.EOF {
			return result, nil
		}
		if err != nil {
			return nil, err
		}
		if _, err := parent.File(path); err == nil {
			result = append(result, parent)
		}
	}
}

// Returns an slice of the commits in "cs" that has the file "path", but with different
// contents than what can be found in "c".
func differentContents(path string, c *object.Commit, cs []*object.Commit) ([]*object.Commit, error) {
	result := make([]*object.Commit, 0, len(cs))
	h, found := blobHash(path, c)
	if !found {
		return nil, object.ErrFileNotFound
	}
	for _, cx := range cs {
		if hx, found := blobHash(path, cx); found && h != hx {
			result = append(result, cx)
		}
	}
	return result, nil
}

// blobHash returns the hash of a path in a commit
func blobHash(path string, commit *object.Commit) (hash plumbing.Hash, found bool) {
	file, err := commit.File(path)
	if err != nil {
		var empty plumbing.Hash
		return empty, found
	}
	return file.Hash, true
}

type contentsComparatorFn func(path string, a, b *object.Commit) (bool, error)

// Returns a new slice of commits, with duplicates removed.  Expects a
// sorted commit list.  Duplication is defined according to "comp".  It
// will always keep the first commit of a series of duplicated commits.
func removeComp(path string, cs []*object.Commit, comp contentsComparatorFn) ([]*object.Commit, error) {
	result := make([]*object.Commit, 0, len(cs))
	if len(cs) == 0 {
		return result, nil
	}
	result = append(result, cs[0])
	for i := 1; i < len(cs); i++ {
		equals, err := comp(path, cs[i], cs[i-1])
		if err != nil {
			return nil, err
		}
		if !equals {
			result = append(result, cs[i])
		}
	}
	return result, nil
}

// Equivalent commits are commits whose patch is the same.
func equivalent(path string, a, b *object.Commit) (bool, error) {
	numParentsA := a.NumParents()
	numParentsB := b.NumParents()

	// the first commit is not equivalent to anyone
	// and "I think" merges can not be equivalent to anything
	if numParentsA != 1 || numParentsB != 1 {
		return false, nil
	}

	diffsA, err := patch(a, path)
	if err != nil {
		return false, err
	}
	diffsB, err := patch(b, path)
	if err != nil {
		return false, err
	}

	return sameDiffs(diffsA, diffsB), nil
}

func patch(c *object.Commit, path string) ([]diffmatchpatch.Diff, error) {
	// get contents of the file in the commit
	file, err := c.File(path)
	if err != nil {
		return nil, err
	}
	content, err := file.Contents()
	if err != nil {
		return nil, err
	}

	// get contents of the file in the first parent of the commit
	var contentParent string
	iter := c.Parents()
	parent, err := iter.Next()
	if err != nil {
		return nil, err
	}
	file, err = parent.File(path)
	if err != nil {
		contentParent = ""
	} else {
		contentParent, err = file.Contents()
		if err != nil {
			return nil, err
		}
	}

	// compare the contents of parent and child
	return diff.Do(content, contentParent), nil
}

func sameDiffs(a, b []diffmatchpatch.Diff) bool {
	if len(a) != len(b) {
		return false
	}
	for i := range a {
		if !sameDiff(a[i], b[i]) {
			return false
		}
	}
	return true
}

func sameDiff(a, b diffmatchpatch.Diff) bool {
	if a.Type != b.Type {
		return false
	}
	switch a.Type {
	case 0:
		return countLines(a.Text) == countLines(b.Text)
	case 1, -1:
		return a.Text == b.Text
	default:
		panic("unreachable")
	}
}
07070100000594000081A4000000000000000000000001645E367C00006F55000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/remote.go  package git

import (
	"context"
	"errors"
	"fmt"
	"io"
	"time"

	"github.com/go-git/go-billy/v5/osfs"
	"github.com/go-git/go-git/v5/config"
	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/cache"
	"github.com/go-git/go-git/v5/plumbing/format/packfile"
	"github.com/go-git/go-git/v5/plumbing/object"
	"github.com/go-git/go-git/v5/plumbing/protocol/packp"
	"github.com/go-git/go-git/v5/plumbing/protocol/packp/capability"
	"github.com/go-git/go-git/v5/plumbing/protocol/packp/sideband"
	"github.com/go-git/go-git/v5/plumbing/revlist"
	"github.com/go-git/go-git/v5/plumbing/storer"
	"github.com/go-git/go-git/v5/plumbing/transport"
	"github.com/go-git/go-git/v5/plumbing/transport/client"
	"github.com/go-git/go-git/v5/storage"
	"github.com/go-git/go-git/v5/storage/filesystem"
	"github.com/go-git/go-git/v5/storage/memory"
	"github.com/go-git/go-git/v5/utils/ioutil"
)

var (
	NoErrAlreadyUpToDate     = errors.New("already up-to-date")
	ErrDeleteRefNotSupported = errors.New("server does not support delete-refs")
	ErrForceNeeded           = errors.New("some refs were not updated")
	ErrExactSHA1NotSupported = errors.New("server does not support exact SHA1 refspec")
)

type NoMatchingRefSpecError struct {
	refSpec config.RefSpec
}

func (e NoMatchingRefSpecError) Error() string {
	return fmt.Sprintf("couldn't find remote ref %q", e.refSpec.Src())
}

func (e NoMatchingRefSpecError) Is(target error) bool {
	_, ok := target.(NoMatchingRefSpecError)
	return ok
}

const (
	// This describes the maximum number of commits to walk when
	// computing the haves to send to a server, for each ref in the
	// repo containing this remote, when not using the multi-ack
	// protocol.  Setting this to 0 means there is no limit.
	maxHavesToVisitPerRef = 100
)

// Remote represents a connection to a remote repository.
type Remote struct {
	c *config.RemoteConfig
	s storage.Storer
}

// NewRemote creates a new Remote.
// The intended purpose is to use the Remote for tasks such as listing remote references (like using git ls-remote).
// Otherwise Remotes should be created via the use of a Repository.
func NewRemote(s storage.Storer, c *config.RemoteConfig) *Remote {
	return &Remote{s: s, c: c}
}

// Config returns the RemoteConfig object used to instantiate this Remote.
func (r *Remote) Config() *config.RemoteConfig {
	return r.c
}

func (r *Remote) String() string {
	var fetch, push string
	if len(r.c.URLs) > 0 {
		fetch = r.c.URLs[0]
		push = r.c.URLs[0]
	}

	return fmt.Sprintf("%s\t%s (fetch)\n%[1]s\t%[3]s (push)", r.c.Name, fetch, push)
}

// Push performs a push to the remote. Returns NoErrAlreadyUpToDate if the
// remote was already up-to-date.
func (r *Remote) Push(o *PushOptions) error {
	return r.PushContext(context.Background(), o)
}

// PushContext performs a push to the remote. Returns NoErrAlreadyUpToDate if
// the remote was already up-to-date.
//
// The provided Context must be non-nil. If the context expires before the
// operation is complete, an error is returned. The context only affects the
// transport operations.
func (r *Remote) PushContext(ctx context.Context, o *PushOptions) (err error) {
	if err := o.Validate(); err != nil {
		return err
	}

	if o.RemoteName != r.c.Name {
		return fmt.Errorf("remote names don't match: %s != %s", o.RemoteName, r.c.Name)
	}

	s, err := newSendPackSession(r.c.URLs[0], o.Auth, o.InsecureSkipTLS, o.CABundle)
	if err != nil {
		return err
	}

	defer ioutil.CheckClose(s, &err)

	ar, err := s.AdvertisedReferencesContext(ctx)
	if err != nil {
		return err
	}

	remoteRefs, err := ar.AllReferences()
	if err != nil {
		return err
	}

	if err := r.checkRequireRemoteRefs(o.RequireRemoteRefs, remoteRefs); err != nil {
		return err
	}

	isDelete := false
	allDelete := true
	for _, rs := range o.RefSpecs {
		if rs.IsDelete() {
			isDelete = true
		} else {
			allDelete = false
		}
		if isDelete && !allDelete {
			break
		}
	}

	if isDelete && !ar.Capabilities.Supports(capability.DeleteRefs) {
		return ErrDeleteRefNotSupported
	}

	if o.Force {
		for i := 0; i < len(o.RefSpecs); i++ {
			rs := &o.RefSpecs[i]
			if !rs.IsForceUpdate() && !rs.IsDelete() {
				o.RefSpecs[i] = config.RefSpec("+" + rs.String())
			}
		}
	}

	localRefs, err := r.references()
	if err != nil {
		return err
	}

	req, err := r.newReferenceUpdateRequest(o, localRefs, remoteRefs, ar)
	if err != nil {
		return err
	}

	if len(req.Commands) == 0 {
		return NoErrAlreadyUpToDate
	}

	objects := objectsToPush(req.Commands)

	haves, err := referencesToHashes(remoteRefs)
	if err != nil {
		return err
	}

	stop, err := r.s.Shallow()
	if err != nil {
		return err
	}

	// if we have shallow we should include this as part of the objects that
	// we are aware.
	haves = append(haves, stop...)

	var hashesToPush []plumbing.Hash
	// Avoid the expensive revlist operation if we're only doing deletes.
	if !allDelete {
		if r.c.IsFirstURLLocal() {
			// If we're are pushing to a local repo, it might be much
			// faster to use a local storage layer to get the commits
			// to ignore, when calculating the object revlist.
			localStorer := filesystem.NewStorage(
				osfs.New(r.c.URLs[0]), cache.NewObjectLRUDefault())
			hashesToPush, err = revlist.ObjectsWithStorageForIgnores(
				r.s, localStorer, objects, haves)
		} else {
			hashesToPush, err = revlist.Objects(r.s, objects, haves)
		}
		if err != nil {
			return err
		}
	}

	if len(hashesToPush) == 0 {
		allDelete = true
		for _, command := range req.Commands {
			if command.Action() != packp.Delete {
				allDelete = false
				break
			}
		}
	}

	rs, err := pushHashes(ctx, s, r.s, req, hashesToPush, r.useRefDeltas(ar), allDelete)
	if err != nil {
		return err
	}

	if err = rs.Error(); err != nil {
		return err
	}

	return r.updateRemoteReferenceStorage(req, rs)
}

func (r *Remote) useRefDeltas(ar *packp.AdvRefs) bool {
	return !ar.Capabilities.Supports(capability.OFSDelta)
}

func (r *Remote) newReferenceUpdateRequest(
	o *PushOptions,
	localRefs []*plumbing.Reference,
	remoteRefs storer.ReferenceStorer,
	ar *packp.AdvRefs,
) (*packp.ReferenceUpdateRequest, error) {
	req := packp.NewReferenceUpdateRequestFromCapabilities(ar.Capabilities)

	if o.Progress != nil {
		req.Progress = o.Progress
		if ar.Capabilities.Supports(capability.Sideband64k) {
			_ = req.Capabilities.Set(capability.Sideband64k)
		} else if ar.Capabilities.Supports(capability.Sideband) {
			_ = req.Capabilities.Set(capability.Sideband)
		}
	}

	if err := r.addReferencesToUpdate(o.RefSpecs, localRefs, remoteRefs, req, o.Prune); err != nil {
		return nil, err
	}

	return req, nil
}

func (r *Remote) updateRemoteReferenceStorage(
	req *packp.ReferenceUpdateRequest,
	result *packp.ReportStatus,
) error {

	for _, spec := range r.c.Fetch {
		for _, c := range req.Commands {
			if !spec.Match(c.Name) {
				continue
			}

			local := spec.Dst(c.Name)
			ref := plumbing.NewHashReference(local, c.New)
			switch c.Action() {
			case packp.Create, packp.Update:
				if err := r.s.SetReference(ref); err != nil {
					return err
				}
			case packp.Delete:
				if err := r.s.RemoveReference(local); err != nil {
					return err
				}
			}
		}
	}

	return nil
}

// FetchContext fetches references along with the objects necessary to complete
// their histories.
//
// Returns nil if the operation is successful, NoErrAlreadyUpToDate if there are
// no changes to be fetched, or an error.
//
// The provided Context must be non-nil. If the context expires before the
// operation is complete, an error is returned. The context only affects the
// transport operations.
func (r *Remote) FetchContext(ctx context.Context, o *FetchOptions) error {
	_, err := r.fetch(ctx, o)
	return err
}

// Fetch fetches references along with the objects necessary to complete their
// histories.
//
// Returns nil if the operation is successful, NoErrAlreadyUpToDate if there are
// no changes to be fetched, or an error.
func (r *Remote) Fetch(o *FetchOptions) error {
	return r.FetchContext(context.Background(), o)
}

func (r *Remote) fetch(ctx context.Context, o *FetchOptions) (sto storer.ReferenceStorer, err error) {
	if o.RemoteName == "" {
		o.RemoteName = r.c.Name
	}

	if err = o.Validate(); err != nil {
		return nil, err
	}

	if len(o.RefSpecs) == 0 {
		o.RefSpecs = r.c.Fetch
	}

	s, err := newUploadPackSession(r.c.URLs[0], o.Auth, o.InsecureSkipTLS, o.CABundle)
	if err != nil {
		return nil, err
	}

	defer ioutil.CheckClose(s, &err)

	ar, err := s.AdvertisedReferencesContext(ctx)
	if err != nil {
		return nil, err
	}

	req, err := r.newUploadPackRequest(o, ar)
	if err != nil {
		return nil, err
	}

	if err := r.isSupportedRefSpec(o.RefSpecs, ar); err != nil {
		return nil, err
	}

	remoteRefs, err := ar.AllReferences()
	if err != nil {
		return nil, err
	}

	localRefs, err := r.references()
	if err != nil {
		return nil, err
	}

	refs, err := calculateRefs(o.RefSpecs, remoteRefs, o.Tags)
	if err != nil {
		return nil, err
	}

	if !req.Depth.IsZero() {
		req.Shallows, err = r.s.Shallow()
		if err != nil {
			return nil, fmt.Errorf("existing checkout is not shallow")
		}
	}

	req.Wants, err = getWants(r.s, refs)
	if len(req.Wants) > 0 {
		req.Haves, err = getHaves(localRefs, remoteRefs, r.s)
		if err != nil {
			return nil, err
		}

		if err = r.fetchPack(ctx, o, s, req); err != nil {
			return nil, err
		}
	}

	updated, err := r.updateLocalReferenceStorage(o.RefSpecs, refs, remoteRefs, o.Tags, o.Force)
	if err != nil {
		return nil, err
	}

	if !updated {
		updated, err = depthChanged(req.Shallows, r.s)
		if err != nil {
			return nil, fmt.Errorf("error checking depth change: %v", err)
		}
	}

	if !updated {
		return remoteRefs, NoErrAlreadyUpToDate
	}

	return remoteRefs, nil
}

func depthChanged(before []plumbing.Hash, s storage.Storer) (bool, error) {
	after, err := s.Shallow()
	if err != nil {
		return false, err
	}

	if len(before) != len(after) {
		return true, nil
	}

	bm := make(map[plumbing.Hash]bool, len(before))
	for _, b := range before {
		bm[b] = true
	}
	for _, a := range after {
		if _, ok := bm[a]; !ok {
			return true, nil
		}
	}

	return false, nil
}

func newUploadPackSession(url string, auth transport.AuthMethod, insecure bool, cabundle []byte) (transport.UploadPackSession, error) {
	c, ep, err := newClient(url, auth, insecure, cabundle)
	if err != nil {
		return nil, err
	}

	return c.NewUploadPackSession(ep, auth)
}

func newSendPackSession(url string, auth transport.AuthMethod, insecure bool, cabundle []byte) (transport.ReceivePackSession, error) {
	c, ep, err := newClient(url, auth, insecure, cabundle)
	if err != nil {
		return nil, err
	}

	return c.NewReceivePackSession(ep, auth)
}

func newClient(url string, auth transport.AuthMethod, insecure bool, cabundle []byte) (transport.Transport, *transport.Endpoint, error) {
	ep, err := transport.NewEndpoint(url)
	if err != nil {
		return nil, nil, err
	}
	ep.InsecureSkipTLS = insecure
	ep.CaBundle = cabundle

	c, err := client.NewClient(ep)
	if err != nil {
		return nil, nil, err
	}

	return c, ep, err
}

func (r *Remote) fetchPack(ctx context.Context, o *FetchOptions, s transport.UploadPackSession,
	req *packp.UploadPackRequest) (err error) {

	reader, err := s.UploadPack(ctx, req)
	if err != nil {
		return err
	}

	defer ioutil.CheckClose(reader, &err)

	if err = r.updateShallow(o, reader); err != nil {
		return err
	}

	if err = packfile.UpdateObjectStorage(r.s,
		buildSidebandIfSupported(req.Capabilities, reader, o.Progress),
	); err != nil {
		return err
	}

	return err
}

func (r *Remote) addReferencesToUpdate(
	refspecs []config.RefSpec,
	localRefs []*plumbing.Reference,
	remoteRefs storer.ReferenceStorer,
	req *packp.ReferenceUpdateRequest,
	prune bool,
) error {
	// This references dictionary will be used to search references by name.
	refsDict := make(map[string]*plumbing.Reference)
	for _, ref := range localRefs {
		refsDict[ref.Name().String()] = ref
	}

	for _, rs := range refspecs {
		if rs.IsDelete() {
			if err := r.deleteReferences(rs, remoteRefs, refsDict, req, false); err != nil {
				return err
			}
		} else {
			err := r.addOrUpdateReferences(rs, localRefs, refsDict, remoteRefs, req)
			if err != nil {
				return err
			}

			if prune {
				if err := r.deleteReferences(rs, remoteRefs, refsDict, req, true); err != nil {
					return err
				}
			}
		}
	}

	return nil
}

func (r *Remote) addOrUpdateReferences(
	rs config.RefSpec,
	localRefs []*plumbing.Reference,
	refsDict map[string]*plumbing.Reference,
	remoteRefs storer.ReferenceStorer,
	req *packp.ReferenceUpdateRequest,
) error {
	// If it is not a wilcard refspec we can directly search for the reference
	// in the references dictionary.
	if !rs.IsWildcard() {
		ref, ok := refsDict[rs.Src()]
		if !ok {
			return nil
		}

		return r.addReferenceIfRefSpecMatches(rs, remoteRefs, ref, req)
	}

	for _, ref := range localRefs {
		err := r.addReferenceIfRefSpecMatches(rs, remoteRefs, ref, req)
		if err != nil {
			return err
		}
	}

	return nil
}

func (r *Remote) deleteReferences(rs config.RefSpec,
	remoteRefs storer.ReferenceStorer,
	refsDict map[string]*plumbing.Reference,
	req *packp.ReferenceUpdateRequest,
	prune bool) error {
	iter, err := remoteRefs.IterReferences()
	if err != nil {
		return err
	}

	return iter.ForEach(func(ref *plumbing.Reference) error {
		if ref.Type() != plumbing.HashReference {
			return nil
		}

		if prune {
			rs := rs.Reverse()
			if !rs.Match(ref.Name()) {
				return nil
			}

			if _, ok := refsDict[rs.Dst(ref.Name()).String()]; ok {
				return nil
			}
		} else if rs.Dst("") != ref.Name() {
			return nil
		}

		cmd := &packp.Command{
			Name: ref.Name(),
			Old:  ref.Hash(),
			New:  plumbing.ZeroHash,
		}
		req.Commands = append(req.Commands, cmd)
		return nil
	})
}

func (r *Remote) addReferenceIfRefSpecMatches(rs config.RefSpec,
	remoteRefs storer.ReferenceStorer, localRef *plumbing.Reference,
	req *packp.ReferenceUpdateRequest) error {

	if localRef.Type() != plumbing.HashReference {
		return nil
	}

	if !rs.Match(localRef.Name()) {
		return nil
	}

	cmd := &packp.Command{
		Name: rs.Dst(localRef.Name()),
		Old:  plumbing.ZeroHash,
		New:  localRef.Hash(),
	}

	remoteRef, err := remoteRefs.Reference(cmd.Name)
	if err == nil {
		if remoteRef.Type() != plumbing.HashReference {
			//TODO: check actual git behavior here
			return nil
		}

		cmd.Old = remoteRef.Hash()
	} else if err != plumbing.ErrReferenceNotFound {
		return err
	}

	if cmd.Old == cmd.New {
		return nil
	}

	if !rs.IsForceUpdate() {
		if err := checkFastForwardUpdate(r.s, remoteRefs, cmd); err != nil {
			return err
		}
	}

	req.Commands = append(req.Commands, cmd)
	return nil
}

func (r *Remote) references() ([]*plumbing.Reference, error) {
	var localRefs []*plumbing.Reference

	iter, err := r.s.IterReferences()
	if err != nil {
		return nil, err
	}

	for {
		ref, err := iter.Next()
		if err == io.EOF {
			break
		}

		if err != nil {
			return nil, err
		}

		localRefs = append(localRefs, ref)
	}

	return localRefs, nil
}

func getRemoteRefsFromStorer(remoteRefStorer storer.ReferenceStorer) (
	map[plumbing.Hash]bool, error) {
	remoteRefs := map[plumbing.Hash]bool{}
	iter, err := remoteRefStorer.IterReferences()
	if err != nil {
		return nil, err
	}
	err = iter.ForEach(func(ref *plumbing.Reference) error {
		if ref.Type() != plumbing.HashReference {
			return nil
		}
		remoteRefs[ref.Hash()] = true
		return nil
	})
	if err != nil {
		return nil, err
	}
	return remoteRefs, nil
}

// getHavesFromRef populates the given `haves` map with the given
// reference, and up to `maxHavesToVisitPerRef` ancestor commits.
func getHavesFromRef(
	ref *plumbing.Reference,
	remoteRefs map[plumbing.Hash]bool,
	s storage.Storer,
	haves map[plumbing.Hash]bool,
) error {
	h := ref.Hash()
	if haves[h] {
		return nil
	}

	// No need to load the commit if we know the remote already
	// has this hash.
	if remoteRefs[h] {
		haves[h] = true
		return nil
	}

	commit, err := object.GetCommit(s, h)
	if err != nil {
		// Ignore the error if this isn't a commit.
		haves[ref.Hash()] = true
		return nil
	}

	// Until go-git supports proper commit negotiation during an
	// upload pack request, include up to `maxHavesToVisitPerRef`
	// commits from the history of each ref.
	walker := object.NewCommitPreorderIter(commit, haves, nil)
	toVisit := maxHavesToVisitPerRef
	return walker.ForEach(func(c *object.Commit) error {
		haves[c.Hash] = true
		toVisit--
		// If toVisit starts out at 0 (indicating there is no
		// max), then it will be negative here and we won't stop
		// early.
		if toVisit == 0 || remoteRefs[c.Hash] {
			return storer.ErrStop
		}
		return nil
	})
}

func getHaves(
	localRefs []*plumbing.Reference,
	remoteRefStorer storer.ReferenceStorer,
	s storage.Storer,
) ([]plumbing.Hash, error) {
	haves := map[plumbing.Hash]bool{}

	// Build a map of all the remote references, to avoid loading too
	// many parent commits for references we know don't need to be
	// transferred.
	remoteRefs, err := getRemoteRefsFromStorer(remoteRefStorer)
	if err != nil {
		return nil, err
	}

	for _, ref := range localRefs {
		if haves[ref.Hash()] {
			continue
		}

		if ref.Type() != plumbing.HashReference {
			continue
		}

		err = getHavesFromRef(ref, remoteRefs, s, haves)
		if err != nil {
			return nil, err
		}
	}

	var result []plumbing.Hash
	for h := range haves {
		result = append(result, h)
	}

	return result, nil
}

const refspecAllTags = "+refs/tags/*:refs/tags/*"

func calculateRefs(
	spec []config.RefSpec,
	remoteRefs storer.ReferenceStorer,
	tagMode TagMode,
) (memory.ReferenceStorage, error) {
	if tagMode == AllTags {
		spec = append(spec, refspecAllTags)
	}

	refs := make(memory.ReferenceStorage)
	for _, s := range spec {
		if err := doCalculateRefs(s, remoteRefs, refs); err != nil {
			return nil, err
		}
	}

	return refs, nil
}

func doCalculateRefs(
	s config.RefSpec,
	remoteRefs storer.ReferenceStorer,
	refs memory.ReferenceStorage,
) error {
	iter, err := remoteRefs.IterReferences()
	if err != nil {
		return err
	}

	if s.IsExactSHA1() {
		ref := plumbing.NewHashReference(s.Dst(""), plumbing.NewHash(s.Src()))
		return refs.SetReference(ref)
	}

	var matched bool
	err = iter.ForEach(func(ref *plumbing.Reference) error {
		if !s.Match(ref.Name()) {
			return nil
		}

		if ref.Type() == plumbing.SymbolicReference {
			target, err := storer.ResolveReference(remoteRefs, ref.Name())
			if err != nil {
				return err
			}

			ref = plumbing.NewHashReference(ref.Name(), target.Hash())
		}

		if ref.Type() != plumbing.HashReference {
			return nil
		}

		matched = true
		if err := refs.SetReference(ref); err != nil {
			return err
		}

		if !s.IsWildcard() {
			return storer.ErrStop
		}

		return nil
	})

	if !matched && !s.IsWildcard() {
		return NoMatchingRefSpecError{refSpec: s}
	}

	return err
}

func getWants(localStorer storage.Storer, refs memory.ReferenceStorage) ([]plumbing.Hash, error) {
	shallow := false
	if s, _ := localStorer.Shallow(); len(s) > 0 {
		shallow = true
	}

	wants := map[plumbing.Hash]bool{}
	for _, ref := range refs {
		hash := ref.Hash()
		exists, err := objectExists(localStorer, ref.Hash())
		if err != nil {
			return nil, err
		}

		if !exists || shallow {
			wants[hash] = true
		}
	}

	var result []plumbing.Hash
	for h := range wants {
		result = append(result, h)
	}

	return result, nil
}

func objectExists(s storer.EncodedObjectStorer, h plumbing.Hash) (bool, error) {
	_, err := s.EncodedObject(plumbing.AnyObject, h)
	if err == plumbing.ErrObjectNotFound {
		return false, nil
	}

	return true, err
}

func checkFastForwardUpdate(s storer.EncodedObjectStorer, remoteRefs storer.ReferenceStorer, cmd *packp.Command) error {
	if cmd.Old == plumbing.ZeroHash {
		_, err := remoteRefs.Reference(cmd.Name)
		if err == plumbing.ErrReferenceNotFound {
			return nil
		}

		if err != nil {
			return err
		}

		return fmt.Errorf("non-fast-forward update: %s", cmd.Name.String())
	}

	ff, err := isFastForward(s, cmd.Old, cmd.New)
	if err != nil {
		return err
	}

	if !ff {
		return fmt.Errorf("non-fast-forward update: %s", cmd.Name.String())
	}

	return nil
}

func isFastForward(s storer.EncodedObjectStorer, old, new plumbing.Hash) (bool, error) {
	c, err := object.GetCommit(s, new)
	if err != nil {
		return false, err
	}

	found := false
	iter := object.NewCommitPreorderIter(c, nil, nil)
	err = iter.ForEach(func(c *object.Commit) error {
		if c.Hash != old {
			return nil
		}

		found = true
		return storer.ErrStop
	})
	return found, err
}

func (r *Remote) newUploadPackRequest(o *FetchOptions,
	ar *packp.AdvRefs) (*packp.UploadPackRequest, error) {

	req := packp.NewUploadPackRequestFromCapabilities(ar.Capabilities)

	if o.Depth != 0 {
		req.Depth = packp.DepthCommits(o.Depth)
		if err := req.Capabilities.Set(capability.Shallow); err != nil {
			return nil, err
		}
	}

	if o.Progress == nil && ar.Capabilities.Supports(capability.NoProgress) {
		if err := req.Capabilities.Set(capability.NoProgress); err != nil {
			return nil, err
		}
	}

	isWildcard := true
	for _, s := range o.RefSpecs {
		if !s.IsWildcard() {
			isWildcard = false
			break
		}
	}

	if isWildcard && o.Tags == TagFollowing && ar.Capabilities.Supports(capability.IncludeTag) {
		if err := req.Capabilities.Set(capability.IncludeTag); err != nil {
			return nil, err
		}
	}

	return req, nil
}

func (r *Remote) isSupportedRefSpec(refs []config.RefSpec, ar *packp.AdvRefs) error {
	var containsIsExact bool
	for _, ref := range refs {
		if ref.IsExactSHA1() {
			containsIsExact = true
		}
	}

	if !containsIsExact {
		return nil
	}

	if ar.Capabilities.Supports(capability.AllowReachableSHA1InWant) ||
		ar.Capabilities.Supports(capability.AllowTipSHA1InWant) {
		return nil
	}

	return ErrExactSHA1NotSupported
}

func buildSidebandIfSupported(l *capability.List, reader io.Reader, p sideband.Progress) io.Reader {
	var t sideband.Type

	switch {
	case l.Supports(capability.Sideband):
		t = sideband.Sideband
	case l.Supports(capability.Sideband64k):
		t = sideband.Sideband64k
	default:
		return reader
	}

	d := sideband.NewDemuxer(t, reader)
	d.Progress = p

	return d
}

func (r *Remote) updateLocalReferenceStorage(
	specs []config.RefSpec,
	fetchedRefs, remoteRefs memory.ReferenceStorage,
	tagMode TagMode,
	force bool,
) (updated bool, err error) {
	isWildcard := true
	forceNeeded := false

	for _, spec := range specs {
		if !spec.IsWildcard() {
			isWildcard = false
		}

		for _, ref := range fetchedRefs {
			if !spec.Match(ref.Name()) && !spec.IsExactSHA1() {
				continue
			}

			if ref.Type() != plumbing.HashReference {
				continue
			}

			localName := spec.Dst(ref.Name())
			old, _ := storer.ResolveReference(r.s, localName)
			new := plumbing.NewHashReference(localName, ref.Hash())

			// If the ref exists locally as a branch and force is not specified,
			// only update if the new ref is an ancestor of the old
			if old != nil && old.Name().IsBranch() && !force && !spec.IsForceUpdate() {
				ff, err := isFastForward(r.s, old.Hash(), new.Hash())
				if err != nil {
					return updated, err
				}

				if !ff {
					forceNeeded = true
					continue
				}
			}

			refUpdated, err := checkAndUpdateReferenceStorerIfNeeded(r.s, new, old)
			if err != nil {
				return updated, err
			}

			if refUpdated {
				updated = true
			}
		}
	}

	if tagMode == NoTags {
		return updated, nil
	}

	tags := fetchedRefs
	if isWildcard {
		tags = remoteRefs
	}
	tagUpdated, err := r.buildFetchedTags(tags)
	if err != nil {
		return updated, err
	}

	if tagUpdated {
		updated = true
	}

	if forceNeeded {
		err = ErrForceNeeded
	}

	return
}

func (r *Remote) buildFetchedTags(refs memory.ReferenceStorage) (updated bool, err error) {
	for _, ref := range refs {
		if !ref.Name().IsTag() {
			continue
		}

		_, err := r.s.EncodedObject(plumbing.AnyObject, ref.Hash())
		if err == plumbing.ErrObjectNotFound {
			continue
		}

		if err != nil {
			return false, err
		}

		refUpdated, err := updateReferenceStorerIfNeeded(r.s, ref)
		if err != nil {
			return updated, err
		}

		if refUpdated {
			updated = true
		}
	}

	return
}

// List the references on the remote repository.
// The provided Context must be non-nil. If the context expires before the
// operation is complete, an error is returned. The context only affects to the
// transport operations.
func (r *Remote) ListContext(ctx context.Context, o *ListOptions) (rfs []*plumbing.Reference, err error) {
	refs, err := r.list(ctx, o)
	if err != nil {
		return refs, err
	}
	return refs, nil
}

func (r *Remote) List(o *ListOptions) (rfs []*plumbing.Reference, err error) {
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()
	return r.ListContext(ctx, o)
}

func (r *Remote) list(ctx context.Context, o *ListOptions) (rfs []*plumbing.Reference, err error) {
	s, err := newUploadPackSession(r.c.URLs[0], o.Auth, o.InsecureSkipTLS, o.CABundle)
	if err != nil {
		return nil, err
	}

	defer ioutil.CheckClose(s, &err)

	ar, err := s.AdvertisedReferencesContext(ctx)
	if err != nil {
		return nil, err
	}

	allRefs, err := ar.AllReferences()
	if err != nil {
		return nil, err
	}

	refs, err := allRefs.IterReferences()
	if err != nil {
		return nil, err
	}

	var resultRefs []*plumbing.Reference
	err = refs.ForEach(func(ref *plumbing.Reference) error {
		resultRefs = append(resultRefs, ref)
		return nil
	})
	if err != nil {
		return nil, err
	}
	return resultRefs, nil
}

func objectsToPush(commands []*packp.Command) []plumbing.Hash {
	objects := make([]plumbing.Hash, 0, len(commands))
	for _, cmd := range commands {
		if cmd.New == plumbing.ZeroHash {
			continue
		}
		objects = append(objects, cmd.New)
	}
	return objects
}

func referencesToHashes(refs storer.ReferenceStorer) ([]plumbing.Hash, error) {
	iter, err := refs.IterReferences()
	if err != nil {
		return nil, err
	}

	var hs []plumbing.Hash
	err = iter.ForEach(func(ref *plumbing.Reference) error {
		if ref.Type() != plumbing.HashReference {
			return nil
		}

		hs = append(hs, ref.Hash())
		return nil
	})
	if err != nil {
		return nil, err
	}

	return hs, nil
}

func pushHashes(
	ctx context.Context,
	sess transport.ReceivePackSession,
	s storage.Storer,
	req *packp.ReferenceUpdateRequest,
	hs []plumbing.Hash,
	useRefDeltas bool,
	allDelete bool,
) (*packp.ReportStatus, error) {

	rd, wr := ioutil.Pipe()

	config, err := s.Config()
	if err != nil {
		return nil, err
	}

	// Set buffer size to 1 so the error message can be written when
	// ReceivePack fails. Otherwise the goroutine will be blocked writing
	// to the channel.
	done := make(chan error, 1)

	if !allDelete {
		req.Packfile = rd
		go func() {
			e := packfile.NewEncoder(wr, s, useRefDeltas)
			if _, err := e.Encode(hs, config.Pack.Window); err != nil {
				done <- wr.CloseWithError(err)
				return
			}

			done <- wr.Close()
		}()
	} else {
		close(done)
	}

	rs, err := sess.ReceivePack(ctx, req)
	if err != nil {
		// close the pipe to unlock encode write
		_ = rd.Close()
		return nil, err
	}

	if err := <-done; err != nil {
		return nil, err
	}

	return rs, nil
}

func (r *Remote) updateShallow(o *FetchOptions, resp *packp.UploadPackResponse) error {
	if o.Depth == 0 || len(resp.Shallows) == 0 {
		return nil
	}

	shallows, err := r.s.Shallow()
	if err != nil {
		return err
	}

outer:
	for _, s := range resp.Shallows {
		for _, oldS := range shallows {
			if s == oldS {
				continue outer
			}
		}
		shallows = append(shallows, s)
	}

	return r.s.SetShallow(shallows)
}

func (r *Remote) checkRequireRemoteRefs(requires []config.RefSpec, remoteRefs storer.ReferenceStorer) error {
	for _, require := range requires {
		if require.IsWildcard() {
			return fmt.Errorf("wildcards not supported in RequireRemoteRefs, got %s", require.String())
		}

		name := require.Dst("")
		remote, err := remoteRefs.Reference(name)
		if err != nil {
			return fmt.Errorf("remote ref %s required to be %s but is absent", name.String(), require.Src())
		}

		var requireHash string
		if require.IsExactSHA1() {
			requireHash = require.Src()
		} else {
			target, err := storer.ResolveReference(remoteRefs, plumbing.ReferenceName(require.Src()))
			if err != nil {
				return fmt.Errorf("could not resolve ref %s in RequireRemoteRefs", require.Src())
			}
			requireHash = target.Hash().String()
		}

		if remote.Hash().String() != requireHash {
			return fmt.Errorf("remote ref %s required to be %s but is %s", name.String(), requireHash, remote.Hash().String())
		}
	}
	return nil
}
   07070100000595000081A4000000000000000000000001645E367C0000AB82000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/repository.go  package git

import (
	"bytes"
	"context"
	"encoding/hex"
	"errors"
	"fmt"
	stdioutil "io/ioutil"
	"os"
	"path"
	"path/filepath"
	"strings"
	"time"

	"github.com/ProtonMail/go-crypto/openpgp"
	"github.com/go-git/go-billy/v5"
	"github.com/go-git/go-billy/v5/osfs"
	"github.com/go-git/go-billy/v5/util"
	"github.com/go-git/go-git/v5/config"
	"github.com/go-git/go-git/v5/internal/revision"
	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/cache"
	"github.com/go-git/go-git/v5/plumbing/format/packfile"
	"github.com/go-git/go-git/v5/plumbing/object"
	"github.com/go-git/go-git/v5/plumbing/storer"
	"github.com/go-git/go-git/v5/storage"
	"github.com/go-git/go-git/v5/storage/filesystem"
	"github.com/go-git/go-git/v5/storage/filesystem/dotgit"
	"github.com/go-git/go-git/v5/utils/ioutil"
	"github.com/imdario/mergo"
)

// GitDirName this is a special folder where all the git stuff is.
const GitDirName = ".git"

var (
	// ErrBranchExists an error stating the specified branch already exists
	ErrBranchExists = errors.New("branch already exists")
	// ErrBranchNotFound an error stating the specified branch does not exist
	ErrBranchNotFound = errors.New("branch not found")
	// ErrTagExists an error stating the specified tag already exists
	ErrTagExists = errors.New("tag already exists")
	// ErrTagNotFound an error stating the specified tag does not exist
	ErrTagNotFound = errors.New("tag not found")
	// ErrFetching is returned when the packfile could not be downloaded
	ErrFetching = errors.New("unable to fetch packfile")

	ErrInvalidReference          = errors.New("invalid reference, should be a tag or a branch")
	ErrRepositoryNotExists       = errors.New("repository does not exist")
	ErrRepositoryIncomplete      = errors.New("repository's commondir path does not exist")
	ErrRepositoryAlreadyExists   = errors.New("repository already exists")
	ErrRemoteNotFound            = errors.New("remote not found")
	ErrRemoteExists              = errors.New("remote already exists")
	ErrAnonymousRemoteName       = errors.New("anonymous remote name must be 'anonymous'")
	ErrWorktreeNotProvided       = errors.New("worktree should be provided")
	ErrIsBareRepository          = errors.New("worktree not available in a bare repository")
	ErrUnableToResolveCommit     = errors.New("unable to resolve commit")
	ErrPackedObjectsNotSupported = errors.New("Packed objects not supported")
)

// Repository represents a git repository
type Repository struct {
	Storer storage.Storer

	r  map[string]*Remote
	wt billy.Filesystem
}

// Init creates an empty git repository, based on the given Storer and worktree.
// The worktree Filesystem is optional, if nil a bare repository is created. If
// the given storer is not empty ErrRepositoryAlreadyExists is returned
func Init(s storage.Storer, worktree billy.Filesystem) (*Repository, error) {
	if err := initStorer(s); err != nil {
		return nil, err
	}

	r := newRepository(s, worktree)
	_, err := r.Reference(plumbing.HEAD, false)
	switch err {
	case plumbing.ErrReferenceNotFound:
	case nil:
		return nil, ErrRepositoryAlreadyExists
	default:
		return nil, err
	}

	h := plumbing.NewSymbolicReference(plumbing.HEAD, plumbing.Master)
	if err := s.SetReference(h); err != nil {
		return nil, err
	}

	if worktree == nil {
		_ = r.setIsBare(true)
		return r, nil
	}

	return r, setWorktreeAndStoragePaths(r, worktree)
}

func initStorer(s storer.Storer) error {
	i, ok := s.(storer.Initializer)
	if !ok {
		return nil
	}

	return i.Init()
}

func setWorktreeAndStoragePaths(r *Repository, worktree billy.Filesystem) error {
	type fsBased interface {
		Filesystem() billy.Filesystem
	}

	// .git file is only created if the storage is file based and the file
	// system is osfs.OS
	fs, isFSBased := r.Storer.(fsBased)
	if !isFSBased {
		return nil
	}

	if err := createDotGitFile(worktree, fs.Filesystem()); err != nil {
		return err
	}

	return setConfigWorktree(r, worktree, fs.Filesystem())
}

func createDotGitFile(worktree, storage billy.Filesystem) error {
	path, err := filepath.Rel(worktree.Root(), storage.Root())
	if err != nil {
		path = storage.Root()
	}

	if path == GitDirName {
		// not needed, since the folder is the default place
		return nil
	}

	f, err := worktree.Create(GitDirName)
	if err != nil {
		return err
	}

	defer f.Close()
	_, err = fmt.Fprintf(f, "gitdir: %s\n", path)
	return err
}

func setConfigWorktree(r *Repository, worktree, storage billy.Filesystem) error {
	path, err := filepath.Rel(storage.Root(), worktree.Root())
	if err != nil {
		path = worktree.Root()
	}

	if path == ".." {
		// not needed, since the folder is the default place
		return nil
	}

	cfg, err := r.Config()
	if err != nil {
		return err
	}

	cfg.Core.Worktree = path
	return r.Storer.SetConfig(cfg)
}

// Open opens a git repository using the given Storer and worktree filesystem,
// if the given storer is complete empty ErrRepositoryNotExists is returned.
// The worktree can be nil when the repository being opened is bare, if the
// repository is a normal one (not bare) and worktree is nil the err
// ErrWorktreeNotProvided is returned
func Open(s storage.Storer, worktree billy.Filesystem) (*Repository, error) {
	_, err := s.Reference(plumbing.HEAD)
	if err == plumbing.ErrReferenceNotFound {
		return nil, ErrRepositoryNotExists
	}

	if err != nil {
		return nil, err
	}

	return newRepository(s, worktree), nil
}

// Clone a repository into the given Storer and worktree Filesystem with the
// given options, if worktree is nil a bare repository is created. If the given
// storer is not empty ErrRepositoryAlreadyExists is returned.
func Clone(s storage.Storer, worktree billy.Filesystem, o *CloneOptions) (*Repository, error) {
	return CloneContext(context.Background(), s, worktree, o)
}

// CloneContext a repository into the given Storer and worktree Filesystem with
// the given options, if worktree is nil a bare repository is created. If the
// given storer is not empty ErrRepositoryAlreadyExists is returned.
//
// The provided Context must be non-nil. If the context expires before the
// operation is complete, an error is returned. The context only affects the
// transport operations.
func CloneContext(
	ctx context.Context, s storage.Storer, worktree billy.Filesystem, o *CloneOptions,
) (*Repository, error) {
	r, err := Init(s, worktree)
	if err != nil {
		return nil, err
	}

	return r, r.clone(ctx, o)
}

// PlainInit create an empty git repository at the given path. isBare defines
// if the repository will have worktree (non-bare) or not (bare), if the path
// is not empty ErrRepositoryAlreadyExists is returned.
func PlainInit(path string, isBare bool) (*Repository, error) {
	var wt, dot billy.Filesystem

	if isBare {
		dot = osfs.New(path)
	} else {
		wt = osfs.New(path)
		dot, _ = wt.Chroot(GitDirName)
	}

	s := filesystem.NewStorage(dot, cache.NewObjectLRUDefault())

	return Init(s, wt)
}

// PlainOpen opens a git repository from the given path. It detects if the
// repository is bare or a normal one. If the path doesn't contain a valid
// repository ErrRepositoryNotExists is returned
func PlainOpen(path string) (*Repository, error) {
	return PlainOpenWithOptions(path, &PlainOpenOptions{})
}

// PlainOpenWithOptions opens a git repository from the given path with specific
// options. See PlainOpen for more info.
func PlainOpenWithOptions(path string, o *PlainOpenOptions) (*Repository, error) {
	dot, wt, err := dotGitToOSFilesystems(path, o.DetectDotGit)
	if err != nil {
		return nil, err
	}

	if _, err := dot.Stat(""); err != nil {
		if os.IsNotExist(err) {
			return nil, ErrRepositoryNotExists
		}

		return nil, err
	}

	var repositoryFs billy.Filesystem

	if o.EnableDotGitCommonDir {
		dotGitCommon, err := dotGitCommonDirectory(dot)
		if err != nil {
			return nil, err
		}
		repositoryFs = dotgit.NewRepositoryFilesystem(dot, dotGitCommon)
	} else {
		repositoryFs = dot
	}

	s := filesystem.NewStorage(repositoryFs, cache.NewObjectLRUDefault())

	return Open(s, wt)
}

func dotGitToOSFilesystems(path string, detect bool) (dot, wt billy.Filesystem, err error) {
	if path, err = filepath.Abs(path); err != nil {
		return nil, nil, err
	}

	var fs billy.Filesystem
	var fi os.FileInfo
	for {
		fs = osfs.New(path)

		pathinfo, err := fs.Stat("/")
		if !os.IsNotExist(err) {
			if !pathinfo.IsDir() && detect {
				fs = osfs.New(filepath.Dir(path))
			}
		}

		fi, err = fs.Stat(GitDirName)
		if err == nil {
			// no error; stop
			break
		}
		if !os.IsNotExist(err) {
			// unknown error; stop
			return nil, nil, err
		}
		if detect {
			// try its parent as long as we haven't reached
			// the root dir
			if dir := filepath.Dir(path); dir != path {
				path = dir
				continue
			}
		}
		// not detecting via parent dirs and the dir does not exist;
		// stop
		return fs, nil, nil
	}

	if fi.IsDir() {
		dot, err = fs.Chroot(GitDirName)
		return dot, fs, err
	}

	dot, err = dotGitFileToOSFilesystem(path, fs)
	if err != nil {
		return nil, nil, err
	}

	return dot, fs, nil
}

func dotGitFileToOSFilesystem(path string, fs billy.Filesystem) (bfs billy.Filesystem, err error) {
	f, err := fs.Open(GitDirName)
	if err != nil {
		return nil, err
	}
	defer ioutil.CheckClose(f, &err)

	b, err := stdioutil.ReadAll(f)
	if err != nil {
		return nil, err
	}

	line := string(b)
	const prefix = "gitdir: "
	if !strings.HasPrefix(line, prefix) {
		return nil, fmt.Errorf(".git file has no %s prefix", prefix)
	}

	gitdir := strings.Split(line[len(prefix):], "\n")[0]
	gitdir = strings.TrimSpace(gitdir)
	if filepath.IsAbs(gitdir) {
		return osfs.New(gitdir), nil
	}

	return osfs.New(fs.Join(path, gitdir)), nil
}

func dotGitCommonDirectory(fs billy.Filesystem) (commonDir billy.Filesystem, err error) {
	f, err := fs.Open("commondir")
	if os.IsNotExist(err) {
		return nil, nil
	}
	if err != nil {
		return nil, err
	}

	b, err := stdioutil.ReadAll(f)
	if err != nil {
		return nil, err
	}
	if len(b) > 0 {
		path := strings.TrimSpace(string(b))
		if filepath.IsAbs(path) {
			commonDir = osfs.New(path)
		} else {
			commonDir = osfs.New(filepath.Join(fs.Root(), path))
		}
		if _, err := commonDir.Stat(""); err != nil {
			if os.IsNotExist(err) {
				return nil, ErrRepositoryIncomplete
			}

			return nil, err
		}
	}

	return commonDir, nil
}

// PlainClone a repository into the path with the given options, isBare defines
// if the new repository will be bare or normal. If the path is not empty
// ErrRepositoryAlreadyExists is returned.
//
// TODO(mcuadros): move isBare to CloneOptions in v5
func PlainClone(path string, isBare bool, o *CloneOptions) (*Repository, error) {
	return PlainCloneContext(context.Background(), path, isBare, o)
}

// PlainCloneContext a repository into the path with the given options, isBare
// defines if the new repository will be bare or normal. If the path is not empty
// ErrRepositoryAlreadyExists is returned.
//
// The provided Context must be non-nil. If the context expires before the
// operation is complete, an error is returned. The context only affects the
// transport operations.
//
// TODO(mcuadros): move isBare to CloneOptions in v5
// TODO(smola): refuse upfront to clone on a non-empty directory in v5, see #1027
func PlainCloneContext(ctx context.Context, path string, isBare bool, o *CloneOptions) (*Repository, error) {
	cleanup, cleanupParent, err := checkIfCleanupIsNeeded(path)
	if err != nil {
		return nil, err
	}

	r, err := PlainInit(path, isBare)
	if err != nil {
		return nil, err
	}

	err = r.clone(ctx, o)
	if err != nil && err != ErrRepositoryAlreadyExists {
		if cleanup {
			_ = cleanUpDir(path, cleanupParent)
		}
	}

	return r, err
}

func newRepository(s storage.Storer, worktree billy.Filesystem) *Repository {
	return &Repository{
		Storer: s,
		wt:     worktree,
		r:      make(map[string]*Remote),
	}
}

func checkIfCleanupIsNeeded(path string) (cleanup bool, cleanParent bool, err error) {
	fi, err := osfs.Default.Stat(path)
	if err != nil {
		if os.IsNotExist(err) {
			return true, true, nil
		}

		return false, false, err
	}

	if !fi.IsDir() {
		return false, false, fmt.Errorf("path is not a directory: %s", path)
	}

	files, err := osfs.Default.ReadDir(path)
	if err != nil {
		return false, false, err
	}

	if len(files) == 0 {
		return true, false, nil
	}

	return false, false, nil
}

func cleanUpDir(path string, all bool) error {
	if all {
		return util.RemoveAll(osfs.Default, path)
	}

	files, err := osfs.Default.ReadDir(path)
	if err != nil {
		return err
	}

	for _, fi := range files {
		if err := util.RemoveAll(osfs.Default, osfs.Default.Join(path, fi.Name())); err != nil {
			return err
		}
	}

	return err
}

// Config return the repository config. In a filesystem backed repository this
// means read the `.git/config`.
func (r *Repository) Config() (*config.Config, error) {
	return r.Storer.Config()
}

// SetConfig marshall and writes the repository config. In a filesystem backed
// repository this means write the `.git/config`. This function should be called
// with the result of `Repository.Config` and never with the output of
// `Repository.ConfigScoped`.
func (r *Repository) SetConfig(cfg *config.Config) error {
	return r.Storer.SetConfig(cfg)
}

// ConfigScoped returns the repository config, merged with requested scope and
// lower. For example if, config.GlobalScope is given the local and global config
// are returned merged in one config value.
func (r *Repository) ConfigScoped(scope config.Scope) (*config.Config, error) {
	// TODO(mcuadros): v6, add this as ConfigOptions.Scoped

	var err error
	system := config.NewConfig()
	if scope >= config.SystemScope {
		system, err = config.LoadConfig(config.SystemScope)
		if err != nil {
			return nil, err
		}
	}

	global := config.NewConfig()
	if scope >= config.GlobalScope {
		global, err = config.LoadConfig(config.GlobalScope)
		if err != nil {
			return nil, err
		}
	}

	local, err := r.Storer.Config()
	if err != nil {
		return nil, err
	}

	_ = mergo.Merge(global, system)
	_ = mergo.Merge(local, global)
	return local, nil
}

// Remote return a remote if exists
func (r *Repository) Remote(name string) (*Remote, error) {
	cfg, err := r.Config()
	if err != nil {
		return nil, err
	}

	c, ok := cfg.Remotes[name]
	if !ok {
		return nil, ErrRemoteNotFound
	}

	return NewRemote(r.Storer, c), nil
}

// Remotes returns a list with all the remotes
func (r *Repository) Remotes() ([]*Remote, error) {
	cfg, err := r.Config()
	if err != nil {
		return nil, err
	}

	remotes := make([]*Remote, len(cfg.Remotes))

	var i int
	for _, c := range cfg.Remotes {
		remotes[i] = NewRemote(r.Storer, c)
		i++
	}

	return remotes, nil
}

// CreateRemote creates a new remote
func (r *Repository) CreateRemote(c *config.RemoteConfig) (*Remote, error) {
	if err := c.Validate(); err != nil {
		return nil, err
	}

	remote := NewRemote(r.Storer, c)

	cfg, err := r.Config()
	if err != nil {
		return nil, err
	}

	if _, ok := cfg.Remotes[c.Name]; ok {
		return nil, ErrRemoteExists
	}

	cfg.Remotes[c.Name] = c
	return remote, r.Storer.SetConfig(cfg)
}

// CreateRemoteAnonymous creates a new anonymous remote. c.Name must be "anonymous".
// It's used like 'git fetch git@github.com:src-d/go-git.git master:master'.
func (r *Repository) CreateRemoteAnonymous(c *config.RemoteConfig) (*Remote, error) {
	if err := c.Validate(); err != nil {
		return nil, err
	}

	if c.Name != "anonymous" {
		return nil, ErrAnonymousRemoteName
	}

	remote := NewRemote(r.Storer, c)

	return remote, nil
}

// DeleteRemote delete a remote from the repository and delete the config
func (r *Repository) DeleteRemote(name string) error {
	cfg, err := r.Config()
	if err != nil {
		return err
	}

	if _, ok := cfg.Remotes[name]; !ok {
		return ErrRemoteNotFound
	}

	delete(cfg.Remotes, name)
	return r.Storer.SetConfig(cfg)
}

// Branch return a Branch if exists
func (r *Repository) Branch(name string) (*config.Branch, error) {
	cfg, err := r.Config()
	if err != nil {
		return nil, err
	}

	b, ok := cfg.Branches[name]
	if !ok {
		return nil, ErrBranchNotFound
	}

	return b, nil
}

// CreateBranch creates a new Branch
func (r *Repository) CreateBranch(c *config.Branch) error {
	if err := c.Validate(); err != nil {
		return err
	}

	cfg, err := r.Config()
	if err != nil {
		return err
	}

	if _, ok := cfg.Branches[c.Name]; ok {
		return ErrBranchExists
	}

	cfg.Branches[c.Name] = c
	return r.Storer.SetConfig(cfg)
}

// DeleteBranch delete a Branch from the repository and delete the config
func (r *Repository) DeleteBranch(name string) error {
	cfg, err := r.Config()
	if err != nil {
		return err
	}

	if _, ok := cfg.Branches[name]; !ok {
		return ErrBranchNotFound
	}

	delete(cfg.Branches, name)
	return r.Storer.SetConfig(cfg)
}

// CreateTag creates a tag. If opts is included, the tag is an annotated tag,
// otherwise a lightweight tag is created.
func (r *Repository) CreateTag(name string, hash plumbing.Hash, opts *CreateTagOptions) (*plumbing.Reference, error) {
	rname := plumbing.ReferenceName(path.Join("refs", "tags", name))

	_, err := r.Storer.Reference(rname)
	switch err {
	case nil:
		// Tag exists, this is an error
		return nil, ErrTagExists
	case plumbing.ErrReferenceNotFound:
		// Tag missing, available for creation, pass this
	default:
		// Some other error
		return nil, err
	}

	var target plumbing.Hash
	if opts != nil {
		target, err = r.createTagObject(name, hash, opts)
		if err != nil {
			return nil, err
		}
	} else {
		target = hash
	}

	ref := plumbing.NewHashReference(rname, target)
	if err = r.Storer.SetReference(ref); err != nil {
		return nil, err
	}

	return ref, nil
}

func (r *Repository) createTagObject(name string, hash plumbing.Hash, opts *CreateTagOptions) (plumbing.Hash, error) {
	if err := opts.Validate(r, hash); err != nil {
		return plumbing.ZeroHash, err
	}

	rawobj, err := object.GetObject(r.Storer, hash)
	if err != nil {
		return plumbing.ZeroHash, err
	}

	tag := &object.Tag{
		Name:       name,
		Tagger:     *opts.Tagger,
		Message:    opts.Message,
		TargetType: rawobj.Type(),
		Target:     hash,
	}

	if opts.SignKey != nil {
		sig, err := r.buildTagSignature(tag, opts.SignKey)
		if err != nil {
			return plumbing.ZeroHash, err
		}

		tag.PGPSignature = sig
	}

	obj := r.Storer.NewEncodedObject()
	if err := tag.Encode(obj); err != nil {
		return plumbing.ZeroHash, err
	}

	return r.Storer.SetEncodedObject(obj)
}

func (r *Repository) buildTagSignature(tag *object.Tag, signKey *openpgp.Entity) (string, error) {
	encoded := &plumbing.MemoryObject{}
	if err := tag.Encode(encoded); err != nil {
		return "", err
	}

	rdr, err := encoded.Reader()
	if err != nil {
		return "", err
	}

	var b bytes.Buffer
	if err := openpgp.ArmoredDetachSign(&b, signKey, rdr, nil); err != nil {
		return "", err
	}

	return b.String(), nil
}

// Tag returns a tag from the repository.
//
// If you want to check to see if the tag is an annotated tag, you can call
// TagObject on the hash of the reference in ForEach:
//
//   ref, err := r.Tag("v0.1.0")
//   if err != nil {
//     // Handle error
//   }
//
//   obj, err := r.TagObject(ref.Hash())
//   switch err {
//   case nil:
//     // Tag object present
//   case plumbing.ErrObjectNotFound:
//     // Not a tag object
//   default:
//     // Some other error
//   }
//
func (r *Repository) Tag(name string) (*plumbing.Reference, error) {
	ref, err := r.Reference(plumbing.ReferenceName(path.Join("refs", "tags", name)), false)
	if err != nil {
		if err == plumbing.ErrReferenceNotFound {
			// Return a friendly error for this one, versus just ReferenceNotFound.
			return nil, ErrTagNotFound
		}

		return nil, err
	}

	return ref, nil
}

// DeleteTag deletes a tag from the repository.
func (r *Repository) DeleteTag(name string) error {
	_, err := r.Tag(name)
	if err != nil {
		return err
	}

	return r.Storer.RemoveReference(plumbing.ReferenceName(path.Join("refs", "tags", name)))
}

func (r *Repository) resolveToCommitHash(h plumbing.Hash) (plumbing.Hash, error) {
	obj, err := r.Storer.EncodedObject(plumbing.AnyObject, h)
	if err != nil {
		return plumbing.ZeroHash, err
	}
	switch obj.Type() {
	case plumbing.TagObject:
		t, err := object.DecodeTag(r.Storer, obj)
		if err != nil {
			return plumbing.ZeroHash, err
		}
		return r.resolveToCommitHash(t.Target)
	case plumbing.CommitObject:
		return h, nil
	default:
		return plumbing.ZeroHash, ErrUnableToResolveCommit
	}
}

// Clone clones a remote repository
func (r *Repository) clone(ctx context.Context, o *CloneOptions) error {
	if err := o.Validate(); err != nil {
		return err
	}

	c := &config.RemoteConfig{
		Name:  o.RemoteName,
		URLs:  []string{o.URL},
		Fetch: r.cloneRefSpec(o),
	}

	if _, err := r.CreateRemote(c); err != nil {
		return err
	}

	ref, err := r.fetchAndUpdateReferences(ctx, &FetchOptions{
		RefSpecs:        c.Fetch,
		Depth:           o.Depth,
		Auth:            o.Auth,
		Progress:        o.Progress,
		Tags:            o.Tags,
		RemoteName:      o.RemoteName,
		InsecureSkipTLS: o.InsecureSkipTLS,
		CABundle:        o.CABundle,
	}, o.ReferenceName)
	if err != nil {
		return err
	}

	if r.wt != nil && !o.NoCheckout {
		w, err := r.Worktree()
		if err != nil {
			return err
		}

		head, err := r.Head()
		if err != nil {
			return err
		}

		if err := w.Reset(&ResetOptions{
			Mode:   MergeReset,
			Commit: head.Hash(),
		}); err != nil {
			return err
		}

		if o.RecurseSubmodules != NoRecurseSubmodules {
			if err := w.updateSubmodules(&SubmoduleUpdateOptions{
				RecurseSubmodules: o.RecurseSubmodules,
				Auth:              o.Auth,
			}); err != nil {
				return err
			}
		}
	}

	if err := r.updateRemoteConfigIfNeeded(o, c, ref); err != nil {
		return err
	}

	if ref.Name().IsBranch() {
		branchRef := ref.Name()
		branchName := strings.Split(string(branchRef), "refs/heads/")[1]

		b := &config.Branch{
			Name:  branchName,
			Merge: branchRef,
		}

		if o.RemoteName == "" {
			b.Remote = "origin"
		} else {
			b.Remote = o.RemoteName
		}

		if err := r.CreateBranch(b); err != nil {
			return err
		}
	}

	return nil
}

const (
	refspecTag              = "+refs/tags/%s:refs/tags/%[1]s"
	refspecSingleBranch     = "+refs/heads/%s:refs/remotes/%s/%[1]s"
	refspecSingleBranchHEAD = "+HEAD:refs/remotes/%s/HEAD"
)

func (r *Repository) cloneRefSpec(o *CloneOptions) []config.RefSpec {
	switch {
	case o.ReferenceName.IsTag():
		return []config.RefSpec{
			config.RefSpec(fmt.Sprintf(refspecTag, o.ReferenceName.Short())),
		}
	case o.SingleBranch && o.ReferenceName == plumbing.HEAD:
		return []config.RefSpec{
			config.RefSpec(fmt.Sprintf(refspecSingleBranchHEAD, o.RemoteName)),
			config.RefSpec(fmt.Sprintf(refspecSingleBranch, plumbing.Master.Short(), o.RemoteName)),
		}
	case o.SingleBranch:
		return []config.RefSpec{
			config.RefSpec(fmt.Sprintf(refspecSingleBranch, o.ReferenceName.Short(), o.RemoteName)),
		}
	default:
		return []config.RefSpec{
			config.RefSpec(fmt.Sprintf(config.DefaultFetchRefSpec, o.RemoteName)),
		}
	}
}

func (r *Repository) setIsBare(isBare bool) error {
	cfg, err := r.Config()
	if err != nil {
		return err
	}

	cfg.Core.IsBare = isBare
	return r.Storer.SetConfig(cfg)
}

func (r *Repository) updateRemoteConfigIfNeeded(o *CloneOptions, c *config.RemoteConfig, head *plumbing.Reference) error {
	if !o.SingleBranch {
		return nil
	}

	c.Fetch = r.cloneRefSpec(o)

	cfg, err := r.Config()
	if err != nil {
		return err
	}

	cfg.Remotes[c.Name] = c
	return r.Storer.SetConfig(cfg)
}

func (r *Repository) fetchAndUpdateReferences(
	ctx context.Context, o *FetchOptions, ref plumbing.ReferenceName,
) (*plumbing.Reference, error) {

	if err := o.Validate(); err != nil {
		return nil, err
	}

	remote, err := r.Remote(o.RemoteName)
	if err != nil {
		return nil, err
	}

	objsUpdated := true
	remoteRefs, err := remote.fetch(ctx, o)
	if err == NoErrAlreadyUpToDate {
		objsUpdated = false
	} else if err == packfile.ErrEmptyPackfile {
		return nil, ErrFetching
	} else if err != nil {
		return nil, err
	}

	resolvedRef, err := storer.ResolveReference(remoteRefs, ref)
	if err != nil {
		return nil, err
	}

	refsUpdated, err := r.updateReferences(remote.c.Fetch, resolvedRef)
	if err != nil {
		return nil, err
	}

	if !objsUpdated && !refsUpdated {
		return nil, NoErrAlreadyUpToDate
	}

	return resolvedRef, nil
}

func (r *Repository) updateReferences(spec []config.RefSpec,
	resolvedRef *plumbing.Reference) (updated bool, err error) {

	if !resolvedRef.Name().IsBranch() {
		// Detached HEAD mode
		h, err := r.resolveToCommitHash(resolvedRef.Hash())
		if err != nil {
			return false, err
		}
		head := plumbing.NewHashReference(plumbing.HEAD, h)
		return updateReferenceStorerIfNeeded(r.Storer, head)
	}

	refs := []*plumbing.Reference{
		// Create local reference for the resolved ref
		resolvedRef,
		// Create local symbolic HEAD
		plumbing.NewSymbolicReference(plumbing.HEAD, resolvedRef.Name()),
	}

	refs = append(refs, r.calculateRemoteHeadReference(spec, resolvedRef)...)

	for _, ref := range refs {
		u, err := updateReferenceStorerIfNeeded(r.Storer, ref)
		if err != nil {
			return updated, err
		}

		if u {
			updated = true
		}
	}

	return
}

func (r *Repository) calculateRemoteHeadReference(spec []config.RefSpec,
	resolvedHead *plumbing.Reference) []*plumbing.Reference {

	var refs []*plumbing.Reference

	// Create resolved HEAD reference with remote prefix if it does not
	// exist. This is needed when using single branch and HEAD.
	for _, rs := range spec {
		name := resolvedHead.Name()
		if !rs.Match(name) {
			continue
		}

		name = rs.Dst(name)
		_, err := r.Storer.Reference(name)
		if err == plumbing.ErrReferenceNotFound {
			refs = append(refs, plumbing.NewHashReference(name, resolvedHead.Hash()))
		}
	}

	return refs
}

func checkAndUpdateReferenceStorerIfNeeded(
	s storer.ReferenceStorer, r, old *plumbing.Reference) (
	updated bool, err error) {
	p, err := s.Reference(r.Name())
	if err != nil && err != plumbing.ErrReferenceNotFound {
		return false, err
	}

	// we use the string method to compare references, is the easiest way
	if err == plumbing.ErrReferenceNotFound || r.String() != p.String() {
		if err := s.CheckAndSetReference(r, old); err != nil {
			return false, err
		}

		return true, nil
	}

	return false, nil
}

func updateReferenceStorerIfNeeded(
	s storer.ReferenceStorer, r *plumbing.Reference) (updated bool, err error) {
	return checkAndUpdateReferenceStorerIfNeeded(s, r, nil)
}

// Fetch fetches references along with the objects necessary to complete
// their histories, from the remote named as FetchOptions.RemoteName.
//
// Returns nil if the operation is successful, NoErrAlreadyUpToDate if there are
// no changes to be fetched, or an error.
func (r *Repository) Fetch(o *FetchOptions) error {
	return r.FetchContext(context.Background(), o)
}

// FetchContext fetches references along with the objects necessary to complete
// their histories, from the remote named as FetchOptions.RemoteName.
//
// Returns nil if the operation is successful, NoErrAlreadyUpToDate if there are
// no changes to be fetched, or an error.
//
// The provided Context must be non-nil. If the context expires before the
// operation is complete, an error is returned. The context only affects the
// transport operations.
func (r *Repository) FetchContext(ctx context.Context, o *FetchOptions) error {
	if err := o.Validate(); err != nil {
		return err
	}

	remote, err := r.Remote(o.RemoteName)
	if err != nil {
		return err
	}

	return remote.FetchContext(ctx, o)
}

// Push performs a push to the remote. Returns NoErrAlreadyUpToDate if
// the remote was already up-to-date, from the remote named as
// FetchOptions.RemoteName.
func (r *Repository) Push(o *PushOptions) error {
	return r.PushContext(context.Background(), o)
}

// PushContext performs a push to the remote. Returns NoErrAlreadyUpToDate if
// the remote was already up-to-date, from the remote named as
// FetchOptions.RemoteName.
//
// The provided Context must be non-nil. If the context expires before the
// operation is complete, an error is returned. The context only affects the
// transport operations.
func (r *Repository) PushContext(ctx context.Context, o *PushOptions) error {
	if err := o.Validate(); err != nil {
		return err
	}

	remote, err := r.Remote(o.RemoteName)
	if err != nil {
		return err
	}

	return remote.PushContext(ctx, o)
}

// Log returns the commit history from the given LogOptions.
func (r *Repository) Log(o *LogOptions) (object.CommitIter, error) {
	fn := commitIterFunc(o.Order)
	if fn == nil {
		return nil, fmt.Errorf("invalid Order=%v", o.Order)
	}

	var (
		it  object.CommitIter
		err error
	)
	if o.All {
		it, err = r.logAll(fn)
	} else {
		it, err = r.log(o.From, fn)
	}

	if err != nil {
		return nil, err
	}

	if o.FileName != nil {
		// for `git log --all` also check parent (if the next commit comes from the real parent)
		it = r.logWithFile(*o.FileName, it, o.All)
	}
	if o.PathFilter != nil {
		it = r.logWithPathFilter(o.PathFilter, it, o.All)
	}

	if o.Since != nil || o.Until != nil {
		limitOptions := object.LogLimitOptions{Since: o.Since, Until: o.Until}
		it = r.logWithLimit(it, limitOptions)
	}

	return it, nil
}

func (r *Repository) log(from plumbing.Hash, commitIterFunc func(*object.Commit) object.CommitIter) (object.CommitIter, error) {
	h := from
	if from == plumbing.ZeroHash {
		head, err := r.Head()
		if err != nil {
			return nil, err
		}

		h = head.Hash()
	}

	commit, err := r.CommitObject(h)
	if err != nil {
		return nil, err
	}
	return commitIterFunc(commit), nil
}

func (r *Repository) logAll(commitIterFunc func(*object.Commit) object.CommitIter) (object.CommitIter, error) {
	return object.NewCommitAllIter(r.Storer, commitIterFunc)
}

func (*Repository) logWithFile(fileName string, commitIter object.CommitIter, checkParent bool) object.CommitIter {
	return object.NewCommitPathIterFromIter(
		func(path string) bool {
			return path == fileName
		},
		commitIter,
		checkParent,
	)
}

func (*Repository) logWithPathFilter(pathFilter func(string) bool, commitIter object.CommitIter, checkParent bool) object.CommitIter {
	return object.NewCommitPathIterFromIter(
		pathFilter,
		commitIter,
		checkParent,
	)
}

func (*Repository) logWithLimit(commitIter object.CommitIter, limitOptions object.LogLimitOptions) object.CommitIter {
	return object.NewCommitLimitIterFromIter(commitIter, limitOptions)
}

func commitIterFunc(order LogOrder) func(c *object.Commit) object.CommitIter {
	switch order {
	case LogOrderDefault:
		return func(c *object.Commit) object.CommitIter {
			return object.NewCommitPreorderIter(c, nil, nil)
		}
	case LogOrderDFS:
		return func(c *object.Commit) object.CommitIter {
			return object.NewCommitPreorderIter(c, nil, nil)
		}
	case LogOrderDFSPost:
		return func(c *object.Commit) object.CommitIter {
			return object.NewCommitPostorderIter(c, nil)
		}
	case LogOrderBSF:
		return func(c *object.Commit) object.CommitIter {
			return object.NewCommitIterBSF(c, nil, nil)
		}
	case LogOrderCommitterTime:
		return func(c *object.Commit) object.CommitIter {
			return object.NewCommitIterCTime(c, nil, nil)
		}
	}
	return nil
}

// Tags returns all the tag References in a repository.
//
// If you want to check to see if the tag is an annotated tag, you can call
// TagObject on the hash Reference passed in through ForEach:
//
//   iter, err := r.Tags()
//   if err != nil {
//     // Handle error
//   }
//
//   if err := iter.ForEach(func (ref *plumbing.Reference) error {
//     obj, err := r.TagObject(ref.Hash())
//     switch err {
//     case nil:
//       // Tag object present
//     case plumbing.ErrObjectNotFound:
//       // Not a tag object
//     default:
//       // Some other error
//       return err
//     }
//   }); err != nil {
//     // Handle outer iterator error
//   }
//
func (r *Repository) Tags() (storer.ReferenceIter, error) {
	refIter, err := r.Storer.IterReferences()
	if err != nil {
		return nil, err
	}

	return storer.NewReferenceFilteredIter(
		func(r *plumbing.Reference) bool {
			return r.Name().IsTag()
		}, refIter), nil
}

// Branches returns all the References that are Branches.
func (r *Repository) Branches() (storer.ReferenceIter, error) {
	refIter, err := r.Storer.IterReferences()
	if err != nil {
		return nil, err
	}

	return storer.NewReferenceFilteredIter(
		func(r *plumbing.Reference) bool {
			return r.Name().IsBranch()
		}, refIter), nil
}

// Notes returns all the References that are notes. For more information:
// https://git-scm.com/docs/git-notes
func (r *Repository) Notes() (storer.ReferenceIter, error) {
	refIter, err := r.Storer.IterReferences()
	if err != nil {
		return nil, err
	}

	return storer.NewReferenceFilteredIter(
		func(r *plumbing.Reference) bool {
			return r.Name().IsNote()
		}, refIter), nil
}

// TreeObject return a Tree with the given hash. If not found
// plumbing.ErrObjectNotFound is returned
func (r *Repository) TreeObject(h plumbing.Hash) (*object.Tree, error) {
	return object.GetTree(r.Storer, h)
}

// TreeObjects returns an unsorted TreeIter with all the trees in the repository
func (r *Repository) TreeObjects() (*object.TreeIter, error) {
	iter, err := r.Storer.IterEncodedObjects(plumbing.TreeObject)
	if err != nil {
		return nil, err
	}

	return object.NewTreeIter(r.Storer, iter), nil
}

// CommitObject return a Commit with the given hash. If not found
// plumbing.ErrObjectNotFound is returned.
func (r *Repository) CommitObject(h plumbing.Hash) (*object.Commit, error) {
	return object.GetCommit(r.Storer, h)
}

// CommitObjects returns an unsorted CommitIter with all the commits in the repository.
func (r *Repository) CommitObjects() (object.CommitIter, error) {
	iter, err := r.Storer.IterEncodedObjects(plumbing.CommitObject)
	if err != nil {
		return nil, err
	}

	return object.NewCommitIter(r.Storer, iter), nil
}

// BlobObject returns a Blob with the given hash. If not found
// plumbing.ErrObjectNotFound is returned.
func (r *Repository) BlobObject(h plumbing.Hash) (*object.Blob, error) {
	return object.GetBlob(r.Storer, h)
}

// BlobObjects returns an unsorted BlobIter with all the blobs in the repository.
func (r *Repository) BlobObjects() (*object.BlobIter, error) {
	iter, err := r.Storer.IterEncodedObjects(plumbing.BlobObject)
	if err != nil {
		return nil, err
	}

	return object.NewBlobIter(r.Storer, iter), nil
}

// TagObject returns a Tag with the given hash. If not found
// plumbing.ErrObjectNotFound is returned. This method only returns
// annotated Tags, no lightweight Tags.
func (r *Repository) TagObject(h plumbing.Hash) (*object.Tag, error) {
	return object.GetTag(r.Storer, h)
}

// TagObjects returns a unsorted TagIter that can step through all of the annotated
// tags in the repository.
func (r *Repository) TagObjects() (*object.TagIter, error) {
	iter, err := r.Storer.IterEncodedObjects(plumbing.TagObject)
	if err != nil {
		return nil, err
	}

	return object.NewTagIter(r.Storer, iter), nil
}

// Object returns an Object with the given hash. If not found
// plumbing.ErrObjectNotFound is returned.
func (r *Repository) Object(t plumbing.ObjectType, h plumbing.Hash) (object.Object, error) {
	obj, err := r.Storer.EncodedObject(t, h)
	if err != nil {
		return nil, err
	}

	return object.DecodeObject(r.Storer, obj)
}

// Objects returns an unsorted ObjectIter with all the objects in the repository.
func (r *Repository) Objects() (*object.ObjectIter, error) {
	iter, err := r.Storer.IterEncodedObjects(plumbing.AnyObject)
	if err != nil {
		return nil, err
	}

	return object.NewObjectIter(r.Storer, iter), nil
}

// Head returns the reference where HEAD is pointing to.
func (r *Repository) Head() (*plumbing.Reference, error) {
	return storer.ResolveReference(r.Storer, plumbing.HEAD)
}

// Reference returns the reference for a given reference name. If resolved is
// true, any symbolic reference will be resolved.
func (r *Repository) Reference(name plumbing.ReferenceName, resolved bool) (
	*plumbing.Reference, error) {

	if resolved {
		return storer.ResolveReference(r.Storer, name)
	}

	return r.Storer.Reference(name)
}

// References returns an unsorted ReferenceIter for all references.
func (r *Repository) References() (storer.ReferenceIter, error) {
	return r.Storer.IterReferences()
}

// Worktree returns a worktree based on the given fs, if nil the default
// worktree will be used.
func (r *Repository) Worktree() (*Worktree, error) {
	if r.wt == nil {
		return nil, ErrIsBareRepository
	}

	return &Worktree{r: r, Filesystem: r.wt}, nil
}

// ResolveRevision resolves revision to corresponding hash. It will always
// resolve to a commit hash, not a tree or annotated tag.
//
// Implemented resolvers : HEAD, branch, tag, heads/branch, refs/heads/branch,
// refs/tags/tag, refs/remotes/origin/branch, refs/remotes/origin/HEAD, tilde and caret (HEAD~1, master~^, tag~2, ref/heads/master~1, ...), selection by text (HEAD^{/fix nasty bug}), hash (prefix and full)
func (r *Repository) ResolveRevision(rev plumbing.Revision) (*plumbing.Hash, error) {
	p := revision.NewParserFromString(string(rev))

	items, err := p.Parse()

	if err != nil {
		return nil, err
	}

	var commit *object.Commit

	for _, item := range items {
		switch item := item.(type) {
		case revision.Ref:
			revisionRef := item

			var tryHashes []plumbing.Hash

			tryHashes = append(tryHashes, r.resolveHashPrefix(string(revisionRef))...)

			for _, rule := range append([]string{"%s"}, plumbing.RefRevParseRules...) {
				ref, err := storer.ResolveReference(r.Storer, plumbing.ReferenceName(fmt.Sprintf(rule, revisionRef)))

				if err == nil {
					tryHashes = append(tryHashes, ref.Hash())
					break
				}
			}

			// in ambiguous cases, `git rev-parse` will emit a warning, but
			// will always return the oid in preference to a ref; we don't have
			// the ability to emit a warning here, so (for speed purposes)
			// don't bother to detect the ambiguity either, just return in the
			// priority that git would.
			gotOne := false
			for _, hash := range tryHashes {
				commitObj, err := r.CommitObject(hash)
				if err == nil {
					commit = commitObj
					gotOne = true
					break
				}

				tagObj, err := r.TagObject(hash)
				if err == nil {
					// If the tag target lookup fails here, this most likely
					// represents some sort of repo corruption, so let the
					// error bubble up.
					tagCommit, err := tagObj.Commit()
					if err != nil {
						return &plumbing.ZeroHash, err
					}
					commit = tagCommit
					gotOne = true
					break
				}
			}

			if !gotOne {
				return &plumbing.ZeroHash, plumbing.ErrReferenceNotFound
			}

		case revision.CaretPath:
			depth := item.Depth

			if depth == 0 {
				break
			}

			iter := commit.Parents()

			c, err := iter.Next()

			if err != nil {
				return &plumbing.ZeroHash, err
			}

			if depth == 1 {
				commit = c

				break
			}

			c, err = iter.Next()

			if err != nil {
				return &plumbing.ZeroHash, err
			}

			commit = c
		case revision.TildePath:
			for i := 0; i < item.Depth; i++ {
				c, err := commit.Parents().Next()

				if err != nil {
					return &plumbing.ZeroHash, err
				}

				commit = c
			}
		case revision.CaretReg:
			history := object.NewCommitPreorderIter(commit, nil, nil)

			re := item.Regexp
			negate := item.Negate

			var c *object.Commit

			err := history.ForEach(func(hc *object.Commit) error {
				if !negate && re.MatchString(hc.Message) {
					c = hc
					return storer.ErrStop
				}

				if negate && !re.MatchString(hc.Message) {
					c = hc
					return storer.ErrStop
				}

				return nil
			})
			if err != nil {
				return &plumbing.ZeroHash, err
			}

			if c == nil {
				return &plumbing.ZeroHash, fmt.Errorf(`No commit message match regexp : "%s"`, re.String())
			}

			commit = c
		}
	}

	return &commit.Hash, nil
}

// resolveHashPrefix returns a list of potential hashes that the given string
// is a prefix of. It quietly swallows errors, returning nil.
func (r *Repository) resolveHashPrefix(hashStr string) []plumbing.Hash {
	// Handle complete and partial hashes.
	// plumbing.NewHash forces args into a full 20 byte hash, which isn't suitable
	// for partial hashes since they will become zero-filled.

	if hashStr == "" {
		return nil
	}
	if len(hashStr) == len(plumbing.ZeroHash)*2 {
		// Only a full hash is possible.
		hexb, err := hex.DecodeString(hashStr)
		if err != nil {
			return nil
		}
		var h plumbing.Hash
		copy(h[:], hexb)
		return []plumbing.Hash{h}
	}

	// Partial hash.
	// hex.DecodeString only decodes to complete bytes, so only works with pairs of hex digits.
	evenHex := hashStr[:len(hashStr)&^1]
	hexb, err := hex.DecodeString(evenHex)
	if err != nil {
		return nil
	}
	candidates := expandPartialHash(r.Storer, hexb)
	if len(evenHex) == len(hashStr) {
		// The prefix was an exact number of bytes.
		return candidates
	}
	// Do another prefix check to ensure the dangling nybble is correct.
	var hashes []plumbing.Hash
	for _, h := range candidates {
		if strings.HasPrefix(h.String(), hashStr) {
			hashes = append(hashes, h)
		}
	}
	return hashes
}

type RepackConfig struct {
	// UseRefDeltas configures whether packfile encoder will use reference deltas.
	// By default OFSDeltaObject is used.
	UseRefDeltas bool
	// OnlyDeletePacksOlderThan if set to non-zero value
	// selects only objects older than the time provided.
	OnlyDeletePacksOlderThan time.Time
}

func (r *Repository) RepackObjects(cfg *RepackConfig) (err error) {
	pos, ok := r.Storer.(storer.PackedObjectStorer)
	if !ok {
		return ErrPackedObjectsNotSupported
	}

	// Get the existing object packs.
	hs, err := pos.ObjectPacks()
	if err != nil {
		return err
	}

	// Create a new pack.
	nh, err := r.createNewObjectPack(cfg)
	if err != nil {
		return err
	}

	// Delete old packs.
	for _, h := range hs {
		// Skip if new hash is the same as an old one.
		if h == nh {
			continue
		}
		err = pos.DeleteOldObjectPackAndIndex(h, cfg.OnlyDeletePacksOlderThan)
		if err != nil {
			return err
		}
	}

	return nil
}

// createNewObjectPack is a helper for RepackObjects taking care
// of creating a new pack. It is used so the the PackfileWriter
// deferred close has the right scope.
func (r *Repository) createNewObjectPack(cfg *RepackConfig) (h plumbing.Hash, err error) {
	ow := newObjectWalker(r.Storer)
	err = ow.walkAllRefs()
	if err != nil {
		return h, err
	}
	objs := make([]plumbing.Hash, 0, len(ow.seen))
	for h := range ow.seen {
		objs = append(objs, h)
	}
	pfw, ok := r.Storer.(storer.PackfileWriter)
	if !ok {
		return h, fmt.Errorf("Repository storer is not a storer.PackfileWriter")
	}
	wc, err := pfw.PackfileWriter()
	if err != nil {
		return h, err
	}
	defer ioutil.CheckClose(wc, &err)
	scfg, err := r.Config()
	if err != nil {
		return h, err
	}
	enc := packfile.NewEncoder(wc, r.Storer, cfg.UseRefDeltas)
	h, err = enc.Encode(objs, scfg.Pack.Window)
	if err != nil {
		return h, err
	}

	// Delete the packed, loose objects.
	if los, ok := r.Storer.(storer.LooseObjectStorer); ok {
		err = los.ForEachObjectHash(func(hash plumbing.Hash) error {
			if ow.isSeen(hash) {
				err = los.DeleteLooseObject(hash)
				if err != nil {
					return err
				}
			}
			return nil
		})
		if err != nil {
			return h, err
		}
	}

	return h, err
}

func expandPartialHash(st storer.EncodedObjectStorer, prefix []byte) (hashes []plumbing.Hash) {
	// The fast version is implemented by storage/filesystem.ObjectStorage.
	type fastIter interface {
		HashesWithPrefix(prefix []byte) ([]plumbing.Hash, error)
	}
	if fi, ok := st.(fastIter); ok {
		h, err := fi.HashesWithPrefix(prefix)
		if err != nil {
			return nil
		}
		return h
	}

	// Slow path.
	iter, err := st.IterEncodedObjects(plumbing.AnyObject)
	if err != nil {
		return nil
	}
	iter.ForEach(func(obj plumbing.EncodedObject) error {
		h := obj.Hash()
		if bytes.HasPrefix(h[:], prefix) {
			hashes = append(hashes, h)
		}
		return nil
	})
	return
}
  07070100000596000081A4000000000000000000000001645E367C000007E0000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/status.go  package git

import (
	"bytes"
	"fmt"
	"path/filepath"
)

// Status represents the current status of a Worktree.
// The key of the map is the path of the file.
type Status map[string]*FileStatus

// File returns the FileStatus for a given path, if the FileStatus doesn't
// exists a new FileStatus is added to the map using the path as key.
func (s Status) File(path string) *FileStatus {
	if _, ok := (s)[path]; !ok {
		s[path] = &FileStatus{Worktree: Untracked, Staging: Untracked}
	}

	return s[path]
}

// IsUntracked checks if file for given path is 'Untracked'
func (s Status) IsUntracked(path string) bool {
	stat, ok := (s)[filepath.ToSlash(path)]
	return ok && stat.Worktree == Untracked
}

// IsClean returns true if all the files are in Unmodified status.
func (s Status) IsClean() bool {
	for _, status := range s {
		if status.Worktree != Unmodified || status.Staging != Unmodified {
			return false
		}
	}

	return true
}

func (s Status) String() string {
	buf := bytes.NewBuffer(nil)
	for path, status := range s {
		if status.Staging == Unmodified && status.Worktree == Unmodified {
			continue
		}

		if status.Staging == Renamed {
			path = fmt.Sprintf("%s -> %s", path, status.Extra)
		}

		fmt.Fprintf(buf, "%c%c %s\n", status.Staging, status.Worktree, path)
	}

	return buf.String()
}

// FileStatus contains the status of a file in the worktree
type FileStatus struct {
	// Staging is the status of a file in the staging area
	Staging StatusCode
	// Worktree is the status of a file in the worktree
	Worktree StatusCode
	// Extra contains extra information, such as the previous name in a rename
	Extra string
}

// StatusCode status code of a file in the Worktree
type StatusCode byte

const (
	Unmodified         StatusCode = ' '
	Untracked          StatusCode = '?'
	Modified           StatusCode = 'M'
	Added              StatusCode = 'A'
	Deleted            StatusCode = 'D'
	Renamed            StatusCode = 'R'
	Copied             StatusCode = 'C'
	UpdatedButUnmerged StatusCode = 'U'
)
07070100000597000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/storage    07070100000598000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/storage/filesystem 07070100000599000081A4000000000000000000000001645E367C0000032C000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/storage/filesystem/config.go   package filesystem

import (
	"os"

	"github.com/go-git/go-git/v5/config"
	"github.com/go-git/go-git/v5/storage/filesystem/dotgit"
	"github.com/go-git/go-git/v5/utils/ioutil"
)

type ConfigStorage struct {
	dir *dotgit.DotGit
}

func (c *ConfigStorage) Config() (conf *config.Config, err error) {
	f, err := c.dir.Config()
	if err != nil {
		if os.IsNotExist(err) {
			return config.NewConfig(), nil
		}

		return nil, err
	}

	defer ioutil.CheckClose(f, &err)
	return config.ReadConfig(f)
}

func (c *ConfigStorage) SetConfig(cfg *config.Config) (err error) {
	if err = cfg.Validate(); err != nil {
		return err
	}

	f, err := c.dir.ConfigWriter()
	if err != nil {
		return err
	}

	defer ioutil.CheckClose(f, &err)

	b, err := cfg.Marshal()
	if err != nil {
		return err
	}

	_, err = f.Write(b)
	return err
}
0707010000059A000081A4000000000000000000000001645E367C0000026C000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/storage/filesystem/deltaobject.go  package filesystem

import (
	"github.com/go-git/go-git/v5/plumbing"
)

type deltaObject struct {
	plumbing.EncodedObject
	base plumbing.Hash
	hash plumbing.Hash
	size int64
}

func newDeltaObject(
	obj plumbing.EncodedObject,
	hash plumbing.Hash,
	base plumbing.Hash,
	size int64) plumbing.DeltaObject {
	return &deltaObject{
		EncodedObject: obj,
		hash:          hash,
		base:          base,
		size:          size,
	}
}

func (o *deltaObject) BaseHash() plumbing.Hash {
	return o.base
}

func (o *deltaObject) ActualSize() int64 {
	return o.size
}

func (o *deltaObject) ActualHash() plumbing.Hash {
	return o.hash
}
0707010000059B000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/storage/filesystem/dotgit  0707010000059C000081A4000000000000000000000001645E367C00006D10000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/storage/filesystem/dotgit/dotgit.go    // https://github.com/git/git/blob/master/Documentation/gitrepository-layout.txt
package dotgit

import (
	"bufio"
	"bytes"
	"errors"
	"fmt"
	"io"
	stdioutil "io/ioutil"
	"os"
	"path/filepath"
	"sort"
	"strings"
	"time"

	"github.com/go-git/go-billy/v5/osfs"
	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/storage"
	"github.com/go-git/go-git/v5/utils/ioutil"

	"github.com/go-git/go-billy/v5"
)

const (
	suffix         = ".git"
	packedRefsPath = "packed-refs"
	configPath     = "config"
	indexPath      = "index"
	shallowPath    = "shallow"
	modulePath     = "modules"
	objectsPath    = "objects"
	packPath       = "pack"
	refsPath       = "refs"
	branchesPath   = "branches"
	hooksPath      = "hooks"
	infoPath       = "info"
	remotesPath    = "remotes"
	logsPath       = "logs"
	worktreesPath  = "worktrees"

	tmpPackedRefsPrefix = "._packed-refs"

	packPrefix = "pack-"
	packExt    = ".pack"
	idxExt     = ".idx"
)

var (
	// ErrNotFound is returned by New when the path is not found.
	ErrNotFound = errors.New("path not found")
	// ErrIdxNotFound is returned by Idxfile when the idx file is not found
	ErrIdxNotFound = errors.New("idx file not found")
	// ErrPackfileNotFound is returned by Packfile when the packfile is not found
	ErrPackfileNotFound = errors.New("packfile not found")
	// ErrConfigNotFound is returned by Config when the config is not found
	ErrConfigNotFound = errors.New("config file not found")
	// ErrPackedRefsDuplicatedRef is returned when a duplicated reference is
	// found in the packed-ref file. This is usually the case for corrupted git
	// repositories.
	ErrPackedRefsDuplicatedRef = errors.New("duplicated ref found in packed-ref file")
	// ErrPackedRefsBadFormat is returned when the packed-ref file corrupt.
	ErrPackedRefsBadFormat = errors.New("malformed packed-ref")
	// ErrSymRefTargetNotFound is returned when a symbolic reference is
	// targeting a non-existing object. This usually means the repository
	// is corrupt.
	ErrSymRefTargetNotFound = errors.New("symbolic reference target not found")
	// ErrIsDir is returned when a reference file is attempting to be read,
	// but the path specified is a directory.
	ErrIsDir = errors.New("reference path is a directory")
)

// Options holds configuration for the storage.
type Options struct {
	// ExclusiveAccess means that the filesystem is not modified externally
	// while the repo is open.
	ExclusiveAccess bool
	// KeepDescriptors makes the file descriptors to be reused but they will
	// need to be manually closed calling Close().
	KeepDescriptors bool
}

// The DotGit type represents a local git repository on disk. This
// type is not zero-value-safe, use the New function to initialize it.
type DotGit struct {
	options Options
	fs      billy.Filesystem

	// incoming object directory information
	incomingChecked bool
	incomingDirName string

	objectList []plumbing.Hash // sorted
	objectMap  map[plumbing.Hash]struct{}
	packList   []plumbing.Hash
	packMap    map[plumbing.Hash]struct{}

	files map[plumbing.Hash]billy.File
}

// New returns a DotGit value ready to be used. The path argument must
// be the absolute path of a git repository directory (e.g.
// "/foo/bar/.git").
func New(fs billy.Filesystem) *DotGit {
	return NewWithOptions(fs, Options{})
}

// NewWithOptions sets non default configuration options.
// See New for complete help.
func NewWithOptions(fs billy.Filesystem, o Options) *DotGit {
	return &DotGit{
		options: o,
		fs:      fs,
	}
}

// Initialize creates all the folder scaffolding.
func (d *DotGit) Initialize() error {
	mustExists := []string{
		d.fs.Join("objects", "info"),
		d.fs.Join("objects", "pack"),
		d.fs.Join("refs", "heads"),
		d.fs.Join("refs", "tags"),
	}

	for _, path := range mustExists {
		_, err := d.fs.Stat(path)
		if err == nil {
			continue
		}

		if !os.IsNotExist(err) {
			return err
		}

		if err := d.fs.MkdirAll(path, os.ModeDir|os.ModePerm); err != nil {
			return err
		}
	}

	return nil
}

// Close closes all opened files.
func (d *DotGit) Close() error {
	var firstError error
	if d.files != nil {
		for _, f := range d.files {
			err := f.Close()
			if err != nil && firstError == nil {
				firstError = err
				continue
			}
		}

		d.files = nil
	}

	if firstError != nil {
		return firstError
	}

	return nil
}

// ConfigWriter returns a file pointer for write to the config file
func (d *DotGit) ConfigWriter() (billy.File, error) {
	return d.fs.Create(configPath)
}

// Config returns a file pointer for read to the config file
func (d *DotGit) Config() (billy.File, error) {
	return d.fs.Open(configPath)
}

// IndexWriter returns a file pointer for write to the index file
func (d *DotGit) IndexWriter() (billy.File, error) {
	return d.fs.Create(indexPath)
}

// Index returns a file pointer for read to the index file
func (d *DotGit) Index() (billy.File, error) {
	return d.fs.Open(indexPath)
}

// ShallowWriter returns a file pointer for write to the shallow file
func (d *DotGit) ShallowWriter() (billy.File, error) {
	return d.fs.Create(shallowPath)
}

// Shallow returns a file pointer for read to the shallow file
func (d *DotGit) Shallow() (billy.File, error) {
	f, err := d.fs.Open(shallowPath)
	if err != nil {
		if os.IsNotExist(err) {
			return nil, nil
		}

		return nil, err
	}

	return f, nil
}

// NewObjectPack return a writer for a new packfile, it saves the packfile to
// disk and also generates and save the index for the given packfile.
func (d *DotGit) NewObjectPack() (*PackWriter, error) {
	d.cleanPackList()
	return newPackWrite(d.fs)
}

// ObjectPacks returns the list of availables packfiles
func (d *DotGit) ObjectPacks() ([]plumbing.Hash, error) {
	if !d.options.ExclusiveAccess {
		return d.objectPacks()
	}

	err := d.genPackList()
	if err != nil {
		return nil, err
	}

	return d.packList, nil
}

func (d *DotGit) objectPacks() ([]plumbing.Hash, error) {
	packDir := d.fs.Join(objectsPath, packPath)
	files, err := d.fs.ReadDir(packDir)
	if err != nil {
		if os.IsNotExist(err) {
			return nil, nil
		}

		return nil, err
	}

	var packs []plumbing.Hash
	for _, f := range files {
		n := f.Name()
		if !strings.HasSuffix(n, packExt) || !strings.HasPrefix(n, packPrefix) {
			continue
		}

		h := plumbing.NewHash(n[5 : len(n)-5]) //pack-(hash).pack
		if h.IsZero() {
			// Ignore files with badly-formatted names.
			continue
		}
		packs = append(packs, h)
	}

	return packs, nil
}

func (d *DotGit) objectPackPath(hash plumbing.Hash, extension string) string {
	return d.fs.Join(objectsPath, packPath, fmt.Sprintf("pack-%s.%s", hash.String(), extension))
}

func (d *DotGit) objectPackOpen(hash plumbing.Hash, extension string) (billy.File, error) {
	if d.options.KeepDescriptors && extension == "pack" {
		if d.files == nil {
			d.files = make(map[plumbing.Hash]billy.File)
		}

		f, ok := d.files[hash]
		if ok {
			return f, nil
		}
	}

	err := d.hasPack(hash)
	if err != nil {
		return nil, err
	}

	path := d.objectPackPath(hash, extension)
	pack, err := d.fs.Open(path)
	if err != nil {
		if os.IsNotExist(err) {
			return nil, ErrPackfileNotFound
		}

		return nil, err
	}

	if d.options.KeepDescriptors && extension == "pack" {
		d.files[hash] = pack
	}

	return pack, nil
}

// ObjectPack returns a fs.File of the given packfile
func (d *DotGit) ObjectPack(hash plumbing.Hash) (billy.File, error) {
	err := d.hasPack(hash)
	if err != nil {
		return nil, err
	}

	return d.objectPackOpen(hash, `pack`)
}

// ObjectPackIdx returns a fs.File of the index file for a given packfile
func (d *DotGit) ObjectPackIdx(hash plumbing.Hash) (billy.File, error) {
	err := d.hasPack(hash)
	if err != nil {
		return nil, err
	}

	return d.objectPackOpen(hash, `idx`)
}

func (d *DotGit) DeleteOldObjectPackAndIndex(hash plumbing.Hash, t time.Time) error {
	d.cleanPackList()

	path := d.objectPackPath(hash, `pack`)
	if !t.IsZero() {
		fi, err := d.fs.Stat(path)
		if err != nil {
			return err
		}
		// too new, skip deletion.
		if !fi.ModTime().Before(t) {
			return nil
		}
	}
	err := d.fs.Remove(path)
	if err != nil {
		return err
	}
	return d.fs.Remove(d.objectPackPath(hash, `idx`))
}

// NewObject return a writer for a new object file.
func (d *DotGit) NewObject() (*ObjectWriter, error) {
	d.cleanObjectList()

	return newObjectWriter(d.fs)
}

// ObjectsWithPrefix returns the hashes of objects that have the given prefix.
func (d *DotGit) ObjectsWithPrefix(prefix []byte) ([]plumbing.Hash, error) {
	// Handle edge cases.
	if len(prefix) < 1 {
		return d.Objects()
	} else if len(prefix) > len(plumbing.ZeroHash) {
		return nil, nil
	}

	if d.options.ExclusiveAccess {
		err := d.genObjectList()
		if err != nil {
			return nil, err
		}

		// Rely on d.objectList being sorted.
		// Figure out the half-open interval defined by the prefix.
		first := sort.Search(len(d.objectList), func(i int) bool {
			// Same as plumbing.HashSlice.Less.
			return bytes.Compare(d.objectList[i][:], prefix) >= 0
		})
		lim := len(d.objectList)
		if limPrefix, overflow := incBytes(prefix); !overflow {
			lim = sort.Search(len(d.objectList), func(i int) bool {
				// Same as plumbing.HashSlice.Less.
				return bytes.Compare(d.objectList[i][:], limPrefix) >= 0
			})
		}
		return d.objectList[first:lim], nil
	}

	// This is the slow path.
	var objects []plumbing.Hash
	var n int
	err := d.ForEachObjectHash(func(hash plumbing.Hash) error {
		n++
		if bytes.HasPrefix(hash[:], prefix) {
			objects = append(objects, hash)
		}
		return nil
	})
	if err != nil {
		return nil, err
	}
	return objects, nil
}

// Objects returns a slice with the hashes of objects found under the
// .git/objects/ directory.
func (d *DotGit) Objects() ([]plumbing.Hash, error) {
	if d.options.ExclusiveAccess {
		err := d.genObjectList()
		if err != nil {
			return nil, err
		}

		return d.objectList, nil
	}

	var objects []plumbing.Hash
	err := d.ForEachObjectHash(func(hash plumbing.Hash) error {
		objects = append(objects, hash)
		return nil
	})
	if err != nil {
		return nil, err
	}
	return objects, nil
}

// ForEachObjectHash iterates over the hashes of objects found under the
// .git/objects/ directory and executes the provided function.
func (d *DotGit) ForEachObjectHash(fun func(plumbing.Hash) error) error {
	if !d.options.ExclusiveAccess {
		return d.forEachObjectHash(fun)
	}

	err := d.genObjectList()
	if err != nil {
		return err
	}

	for _, h := range d.objectList {
		err := fun(h)
		if err != nil {
			return err
		}
	}

	return nil
}

func (d *DotGit) forEachObjectHash(fun func(plumbing.Hash) error) error {
	files, err := d.fs.ReadDir(objectsPath)
	if err != nil {
		if os.IsNotExist(err) {
			return nil
		}

		return err
	}

	for _, f := range files {
		if f.IsDir() && len(f.Name()) == 2 && isHex(f.Name()) {
			base := f.Name()
			d, err := d.fs.ReadDir(d.fs.Join(objectsPath, base))
			if err != nil {
				return err
			}

			for _, o := range d {
				h := plumbing.NewHash(base + o.Name())
				if h.IsZero() {
					// Ignore files with badly-formatted names.
					continue
				}
				err = fun(h)
				if err != nil {
					return err
				}
			}
		}
	}

	return nil
}

func (d *DotGit) cleanObjectList() {
	d.objectMap = nil
	d.objectList = nil
}

func (d *DotGit) genObjectList() error {
	if d.objectMap != nil {
		return nil
	}

	d.objectMap = make(map[plumbing.Hash]struct{})
	populate := func(h plumbing.Hash) error {
		d.objectList = append(d.objectList, h)
		d.objectMap[h] = struct{}{}

		return nil
	}
	if err := d.forEachObjectHash(populate); err != nil {
		return err
	}
	plumbing.HashesSort(d.objectList)
	return nil
}

func (d *DotGit) hasObject(h plumbing.Hash) error {
	if !d.options.ExclusiveAccess {
		return nil
	}

	err := d.genObjectList()
	if err != nil {
		return err
	}

	_, ok := d.objectMap[h]
	if !ok {
		return plumbing.ErrObjectNotFound
	}

	return nil
}

func (d *DotGit) cleanPackList() {
	d.packMap = nil
	d.packList = nil
}

func (d *DotGit) genPackList() error {
	if d.packMap != nil {
		return nil
	}

	op, err := d.objectPacks()
	if err != nil {
		return err
	}

	d.packMap = make(map[plumbing.Hash]struct{})
	d.packList = nil

	for _, h := range op {
		d.packList = append(d.packList, h)
		d.packMap[h] = struct{}{}
	}

	return nil
}

func (d *DotGit) hasPack(h plumbing.Hash) error {
	if !d.options.ExclusiveAccess {
		return nil
	}

	err := d.genPackList()
	if err != nil {
		return err
	}

	_, ok := d.packMap[h]
	if !ok {
		return ErrPackfileNotFound
	}

	return nil
}

func (d *DotGit) objectPath(h plumbing.Hash) string {
	hash := h.String()
	return d.fs.Join(objectsPath, hash[0:2], hash[2:40])
}

// incomingObjectPath is intended to add support for a git pre-receive hook
// to be written it adds support for go-git to find objects in an "incoming"
// directory, so that the library can be used to write a pre-receive hook
// that deals with the incoming objects.
//
// More on git hooks found here : https://git-scm.com/docs/githooks
// More on 'quarantine'/incoming directory here:
//     https://git-scm.com/docs/git-receive-pack
func (d *DotGit) incomingObjectPath(h plumbing.Hash) string {
	hString := h.String()

	if d.incomingDirName == "" {
		return d.fs.Join(objectsPath, hString[0:2], hString[2:40])
	}

	return d.fs.Join(objectsPath, d.incomingDirName, hString[0:2], hString[2:40])
}

// hasIncomingObjects searches for an incoming directory and keeps its name
// so it doesn't have to be found each time an object is accessed.
func (d *DotGit) hasIncomingObjects() bool {
	if !d.incomingChecked {
		directoryContents, err := d.fs.ReadDir(objectsPath)
		if err == nil {
			for _, file := range directoryContents {
				if strings.HasPrefix(file.Name(), "incoming-") && file.IsDir() {
					d.incomingDirName = file.Name()
				}
			}
		}

		d.incomingChecked = true
	}

	return d.incomingDirName != ""
}

// Object returns a fs.File pointing the object file, if exists
func (d *DotGit) Object(h plumbing.Hash) (billy.File, error) {
	err := d.hasObject(h)
	if err != nil {
		return nil, err
	}

	obj1, err1 := d.fs.Open(d.objectPath(h))
	if os.IsNotExist(err1) && d.hasIncomingObjects() {
		obj2, err2 := d.fs.Open(d.incomingObjectPath(h))
		if err2 != nil {
			return obj1, err1
		}
		return obj2, err2
	}
	return obj1, err1
}

// ObjectStat returns a os.FileInfo pointing the object file, if exists
func (d *DotGit) ObjectStat(h plumbing.Hash) (os.FileInfo, error) {
	err := d.hasObject(h)
	if err != nil {
		return nil, err
	}

	obj1, err1 := d.fs.Stat(d.objectPath(h))
	if os.IsNotExist(err1) && d.hasIncomingObjects() {
		obj2, err2 := d.fs.Stat(d.incomingObjectPath(h))
		if err2 != nil {
			return obj1, err1
		}
		return obj2, err2
	}
	return obj1, err1
}

// ObjectDelete removes the object file, if exists
func (d *DotGit) ObjectDelete(h plumbing.Hash) error {
	d.cleanObjectList()

	err1 := d.fs.Remove(d.objectPath(h))
	if os.IsNotExist(err1) && d.hasIncomingObjects() {
		err2 := d.fs.Remove(d.incomingObjectPath(h))
		if err2 != nil {
			return err1
		}
		return err2
	}
	return err1
}

func (d *DotGit) readReferenceFrom(rd io.Reader, name string) (ref *plumbing.Reference, err error) {
	b, err := stdioutil.ReadAll(rd)
	if err != nil {
		return nil, err
	}

	line := strings.TrimSpace(string(b))
	return plumbing.NewReferenceFromStrings(name, line), nil
}

func (d *DotGit) checkReferenceAndTruncate(f billy.File, old *plumbing.Reference) error {
	if old == nil {
		return nil
	}
	ref, err := d.readReferenceFrom(f, old.Name().String())
	if err != nil {
		return err
	}
	if ref.Hash() != old.Hash() {
		return storage.ErrReferenceHasChanged
	}
	_, err = f.Seek(0, io.SeekStart)
	if err != nil {
		return err
	}
	return f.Truncate(0)
}

func (d *DotGit) SetRef(r, old *plumbing.Reference) error {
	var content string
	switch r.Type() {
	case plumbing.SymbolicReference:
		content = fmt.Sprintf("ref: %s\n", r.Target())
	case plumbing.HashReference:
		content = fmt.Sprintln(r.Hash().String())
	}

	fileName := r.Name().String()

	return d.setRef(fileName, content, old)
}

// Refs scans the git directory collecting references, which it returns.
// Symbolic references are resolved and included in the output.
func (d *DotGit) Refs() ([]*plumbing.Reference, error) {
	var refs []*plumbing.Reference
	var seen = make(map[plumbing.ReferenceName]bool)
	if err := d.addRefsFromRefDir(&refs, seen); err != nil {
		return nil, err
	}

	if err := d.addRefsFromPackedRefs(&refs, seen); err != nil {
		return nil, err
	}

	if err := d.addRefFromHEAD(&refs); err != nil {
		return nil, err
	}

	return refs, nil
}

// Ref returns the reference for a given reference name.
func (d *DotGit) Ref(name plumbing.ReferenceName) (*plumbing.Reference, error) {
	ref, err := d.readReferenceFile(".", name.String())
	if err == nil {
		return ref, nil
	}

	return d.packedRef(name)
}

func (d *DotGit) findPackedRefsInFile(f billy.File) ([]*plumbing.Reference, error) {
	s := bufio.NewScanner(f)
	var refs []*plumbing.Reference
	for s.Scan() {
		ref, err := d.processLine(s.Text())
		if err != nil {
			return nil, err
		}

		if ref != nil {
			refs = append(refs, ref)
		}
	}

	return refs, s.Err()
}

func (d *DotGit) findPackedRefs() (r []*plumbing.Reference, err error) {
	f, err := d.fs.Open(packedRefsPath)
	if err != nil {
		if os.IsNotExist(err) {
			return nil, nil
		}
		return nil, err
	}

	defer ioutil.CheckClose(f, &err)
	return d.findPackedRefsInFile(f)
}

func (d *DotGit) packedRef(name plumbing.ReferenceName) (*plumbing.Reference, error) {
	refs, err := d.findPackedRefs()
	if err != nil {
		return nil, err
	}

	for _, ref := range refs {
		if ref.Name() == name {
			return ref, nil
		}
	}

	return nil, plumbing.ErrReferenceNotFound
}

// RemoveRef removes a reference by name.
func (d *DotGit) RemoveRef(name plumbing.ReferenceName) error {
	path := d.fs.Join(".", name.String())
	_, err := d.fs.Stat(path)
	if err == nil {
		err = d.fs.Remove(path)
		// Drop down to remove it from the packed refs file, too.
	}

	if err != nil && !os.IsNotExist(err) {
		return err
	}

	return d.rewritePackedRefsWithoutRef(name)
}

func (d *DotGit) addRefsFromPackedRefs(refs *[]*plumbing.Reference, seen map[plumbing.ReferenceName]bool) (err error) {
	packedRefs, err := d.findPackedRefs()
	if err != nil {
		return err
	}

	for _, ref := range packedRefs {
		if !seen[ref.Name()] {
			*refs = append(*refs, ref)
			seen[ref.Name()] = true
		}
	}
	return nil
}

func (d *DotGit) addRefsFromPackedRefsFile(refs *[]*plumbing.Reference, f billy.File, seen map[plumbing.ReferenceName]bool) (err error) {
	packedRefs, err := d.findPackedRefsInFile(f)
	if err != nil {
		return err
	}

	for _, ref := range packedRefs {
		if !seen[ref.Name()] {
			*refs = append(*refs, ref)
			seen[ref.Name()] = true
		}
	}
	return nil
}

func (d *DotGit) openAndLockPackedRefs(doCreate bool) (
	pr billy.File, err error) {
	var f billy.File
	defer func() {
		if err != nil && f != nil {
			ioutil.CheckClose(f, &err)
		}
	}()

	// File mode is retrieved from a constant defined in the target specific
	// files (dotgit_rewrite_packed_refs_*). Some modes are not available
	// in all filesystems.
	openFlags := d.openAndLockPackedRefsMode()
	if doCreate {
		openFlags |= os.O_CREATE
	}

	// Keep trying to open and lock the file until we're sure the file
	// didn't change between the open and the lock.
	for {
		f, err = d.fs.OpenFile(packedRefsPath, openFlags, 0600)
		if err != nil {
			if os.IsNotExist(err) && !doCreate {
				return nil, nil
			}

			return nil, err
		}
		fi, err := d.fs.Stat(packedRefsPath)
		if err != nil {
			return nil, err
		}
		mtime := fi.ModTime()

		err = f.Lock()
		if err != nil {
			return nil, err
		}

		fi, err = d.fs.Stat(packedRefsPath)
		if err != nil {
			return nil, err
		}
		if mtime.Equal(fi.ModTime()) {
			break
		}
		// The file has changed since we opened it.  Close and retry.
		err = f.Close()
		if err != nil {
			return nil, err
		}
	}
	return f, nil
}

func (d *DotGit) rewritePackedRefsWithoutRef(name plumbing.ReferenceName) (err error) {
	pr, err := d.openAndLockPackedRefs(false)
	if err != nil {
		return err
	}
	if pr == nil {
		return nil
	}
	defer ioutil.CheckClose(pr, &err)

	// Creating the temp file in the same directory as the target file
	// improves our chances for rename operation to be atomic.
	tmp, err := d.fs.TempFile("", tmpPackedRefsPrefix)
	if err != nil {
		return err
	}
	tmpName := tmp.Name()
	defer func() {
		ioutil.CheckClose(tmp, &err)
		_ = d.fs.Remove(tmpName) // don't check err, we might have renamed it
	}()

	s := bufio.NewScanner(pr)
	found := false
	for s.Scan() {
		line := s.Text()
		ref, err := d.processLine(line)
		if err != nil {
			return err
		}

		if ref != nil && ref.Name() == name {
			found = true
			continue
		}

		if _, err := fmt.Fprintln(tmp, line); err != nil {
			return err
		}
	}

	if err := s.Err(); err != nil {
		return err
	}

	if !found {
		return nil
	}

	return d.rewritePackedRefsWhileLocked(tmp, pr)
}

// process lines from a packed-refs file
func (d *DotGit) processLine(line string) (*plumbing.Reference, error) {
	if len(line) == 0 {
		return nil, nil
	}

	switch line[0] {
	case '#': // comment - ignore
		return nil, nil
	case '^': // annotated tag commit of the previous line - ignore
		return nil, nil
	default:
		ws := strings.Split(line, " ") // hash then ref
		if len(ws) != 2 {
			return nil, ErrPackedRefsBadFormat
		}

		return plumbing.NewReferenceFromStrings(ws[1], ws[0]), nil
	}
}

func (d *DotGit) addRefsFromRefDir(refs *[]*plumbing.Reference, seen map[plumbing.ReferenceName]bool) error {
	return d.walkReferencesTree(refs, []string{refsPath}, seen)
}

func (d *DotGit) walkReferencesTree(refs *[]*plumbing.Reference, relPath []string, seen map[plumbing.ReferenceName]bool) error {
	files, err := d.fs.ReadDir(d.fs.Join(relPath...))
	if err != nil {
		if os.IsNotExist(err) {
			return nil
		}

		return err
	}

	for _, f := range files {
		newRelPath := append(append([]string(nil), relPath...), f.Name())
		if f.IsDir() {
			if err = d.walkReferencesTree(refs, newRelPath, seen); err != nil {
				return err
			}

			continue
		}

		ref, err := d.readReferenceFile(".", strings.Join(newRelPath, "/"))
		if err != nil {
			return err
		}

		if ref != nil && !seen[ref.Name()] {
			*refs = append(*refs, ref)
			seen[ref.Name()] = true
		}
	}

	return nil
}

func (d *DotGit) addRefFromHEAD(refs *[]*plumbing.Reference) error {
	ref, err := d.readReferenceFile(".", "HEAD")
	if err != nil {
		if os.IsNotExist(err) {
			return nil
		}

		return err
	}

	*refs = append(*refs, ref)
	return nil
}

func (d *DotGit) readReferenceFile(path, name string) (ref *plumbing.Reference, err error) {
	path = d.fs.Join(path, d.fs.Join(strings.Split(name, "/")...))
	st, err := d.fs.Stat(path)
	if err != nil {
		return nil, err
	}
	if st.IsDir() {
		return nil, ErrIsDir
	}

	f, err := d.fs.Open(path)
	if err != nil {
		return nil, err
	}
	defer ioutil.CheckClose(f, &err)

	return d.readReferenceFrom(f, name)
}

func (d *DotGit) CountLooseRefs() (int, error) {
	var refs []*plumbing.Reference
	var seen = make(map[plumbing.ReferenceName]bool)
	if err := d.addRefsFromRefDir(&refs, seen); err != nil {
		return 0, err
	}

	return len(refs), nil
}

// PackRefs packs all loose refs into the packed-refs file.
//
// This implementation only works under the assumption that the view
// of the file system won't be updated during this operation.  This
// strategy would not work on a general file system though, without
// locking each loose reference and checking it again before deleting
// the file, because otherwise an updated reference could sneak in and
// then be deleted by the packed-refs process.  Alternatively, every
// ref update could also lock packed-refs, so only one lock is
// required during ref-packing.  But that would worsen performance in
// the common case.
//
// TODO: add an "all" boolean like the `git pack-refs --all` flag.
// When `all` is false, it would only pack refs that have already been
// packed, plus all tags.
func (d *DotGit) PackRefs() (err error) {
	// Lock packed-refs, and create it if it doesn't exist yet.
	f, err := d.openAndLockPackedRefs(true)
	if err != nil {
		return err
	}
	defer ioutil.CheckClose(f, &err)

	// Gather all refs using addRefsFromRefDir and addRefsFromPackedRefs.
	var refs []*plumbing.Reference
	seen := make(map[plumbing.ReferenceName]bool)
	if err = d.addRefsFromRefDir(&refs, seen); err != nil {
		return err
	}
	if len(refs) == 0 {
		// Nothing to do!
		return nil
	}
	numLooseRefs := len(refs)
	if err = d.addRefsFromPackedRefsFile(&refs, f, seen); err != nil {
		return err
	}

	// Write them all to a new temp packed-refs file.
	tmp, err := d.fs.TempFile("", tmpPackedRefsPrefix)
	if err != nil {
		return err
	}
	tmpName := tmp.Name()
	defer func() {
		ioutil.CheckClose(tmp, &err)
		_ = d.fs.Remove(tmpName) // don't check err, we might have renamed it
	}()

	w := bufio.NewWriter(tmp)
	for _, ref := range refs {
		_, err = w.WriteString(ref.String() + "\n")
		if err != nil {
			return err
		}
	}
	err = w.Flush()
	if err != nil {
		return err
	}

	// Rename the temp packed-refs file.
	err = d.rewritePackedRefsWhileLocked(tmp, f)
	if err != nil {
		return err
	}

	// Delete all the loose refs, while still holding the packed-refs
	// lock.
	for _, ref := range refs[:numLooseRefs] {
		path := d.fs.Join(".", ref.Name().String())
		err = d.fs.Remove(path)
		if err != nil && !os.IsNotExist(err) {
			return err
		}
	}

	return nil
}

// Module return a billy.Filesystem pointing to the module folder
func (d *DotGit) Module(name string) (billy.Filesystem, error) {
	return d.fs.Chroot(d.fs.Join(modulePath, name))
}

// Alternates returns DotGit(s) based off paths in objects/info/alternates if
// available. This can be used to checks if it's a shared repository.
func (d *DotGit) Alternates() ([]*DotGit, error) {
	altpath := d.fs.Join("objects", "info", "alternates")
	f, err := d.fs.Open(altpath)
	if err != nil {
		return nil, err
	}
	defer f.Close()

	var alternates []*DotGit

	// Read alternate paths line-by-line and create DotGit objects.
	scanner := bufio.NewScanner(f)
	for scanner.Scan() {
		path := scanner.Text()
		if !filepath.IsAbs(path) {
			// For relative paths, we can perform an internal conversion to
			// slash so that they work cross-platform.
			slashPath := filepath.ToSlash(path)
			// If the path is not absolute, it must be relative to object
			// database (.git/objects/info).
			// https://www.kernel.org/pub/software/scm/git/docs/gitrepository-layout.html
			// Hence, derive a path relative to DotGit's root.
			// "../../../reponame/.git/" -> "../../reponame/.git"
			// Remove the first ../
			relpath := filepath.Join(strings.Split(slashPath, "/")[1:]...)
			normalPath := filepath.FromSlash(relpath)
			path = filepath.Join(d.fs.Root(), normalPath)
		}
		fs := osfs.New(filepath.Dir(path))
		alternates = append(alternates, New(fs))
	}

	if err = scanner.Err(); err != nil {
		return nil, err
	}

	return alternates, nil
}

// Fs returns the underlying filesystem of the DotGit folder.
func (d *DotGit) Fs() billy.Filesystem {
	return d.fs
}

func isHex(s string) bool {
	for _, b := range []byte(s) {
		if isNum(b) {
			continue
		}
		if isHexAlpha(b) {
			continue
		}

		return false
	}

	return true
}

func isNum(b byte) bool {
	return b >= '0' && b <= '9'
}

func isHexAlpha(b byte) bool {
	return b >= 'a' && b <= 'f' || b >= 'A' && b <= 'F'
}

// incBytes increments a byte slice, which involves incrementing the
// right-most byte, and following carry leftward.
// It makes a copy so that the provided slice's underlying array is not modified.
// If the overall operation overflows (e.g. incBytes(0xff, 0xff)), the second return parameter indicates that.
func incBytes(in []byte) (out []byte, overflow bool) {
	out = make([]byte, len(in))
	copy(out, in)
	for i := len(out) - 1; i >= 0; i-- {
		out[i]++
		if out[i] != 0 {
			return // Didn't overflow.
		}
	}
	overflow = true
	return
}
0707010000059D000081A4000000000000000000000001645E367C000006A5000000000000000000000000000000000000006F00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/storage/filesystem/dotgit/dotgit_rewrite_packed_refs.go    package dotgit

import (
	"io"
	"os"
	"runtime"

	"github.com/go-git/go-billy/v5"
	"github.com/go-git/go-git/v5/utils/ioutil"
)

func (d *DotGit) openAndLockPackedRefsMode() int {
	if billy.CapabilityCheck(d.fs, billy.ReadAndWriteCapability) {
		return os.O_RDWR
	}

	return os.O_RDONLY
}

func (d *DotGit) rewritePackedRefsWhileLocked(
	tmp billy.File, pr billy.File) error {
	// Try plain rename. If we aren't using the bare Windows filesystem as the
	// storage layer, we might be able to get away with a rename over a locked
	// file.
	err := d.fs.Rename(tmp.Name(), pr.Name())
	if err == nil {
		return nil
	}

	// If we are in a filesystem that does not support rename (e.g. sivafs)
	// a full copy is done.
	if err == billy.ErrNotSupported {
		return d.copyNewFile(tmp, pr)
	}

	if runtime.GOOS != "windows" {
		return err
	}

	// Otherwise, Windows doesn't let us rename over a locked file, so
	// we have to do a straight copy.  Unfortunately this could result
	// in a partially-written file if the process fails before the
	// copy completes.
	return d.copyToExistingFile(tmp, pr)
}

func (d *DotGit) copyToExistingFile(tmp, pr billy.File) error {
	_, err := pr.Seek(0, io.SeekStart)
	if err != nil {
		return err
	}
	err = pr.Truncate(0)
	if err != nil {
		return err
	}
	_, err = tmp.Seek(0, io.SeekStart)
	if err != nil {
		return err
	}
	_, err = io.Copy(pr, tmp)

	return err
}

func (d *DotGit) copyNewFile(tmp billy.File, pr billy.File) (err error) {
	prWrite, err := d.fs.Create(pr.Name())
	if err != nil {
		return err
	}

	defer ioutil.CheckClose(prWrite, &err)

	_, err = tmp.Seek(0, io.SeekStart)
	if err != nil {
		return err
	}

	_, err = io.Copy(prWrite, tmp)

	return err
}
   0707010000059E000081A4000000000000000000000001645E367C000008F4000000000000000000000000000000000000006200000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/storage/filesystem/dotgit/dotgit_setref.go package dotgit

import (
	"fmt"
	"os"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/utils/ioutil"

	"github.com/go-git/go-billy/v5"
)

func (d *DotGit) setRef(fileName, content string, old *plumbing.Reference) (err error) {
	if billy.CapabilityCheck(d.fs, billy.ReadAndWriteCapability) {
		return d.setRefRwfs(fileName, content, old)
	}

	return d.setRefNorwfs(fileName, content, old)
}

func (d *DotGit) setRefRwfs(fileName, content string, old *plumbing.Reference) (err error) {
	// If we are not checking an old ref, just truncate the file.
	mode := os.O_RDWR | os.O_CREATE
	if old == nil {
		mode |= os.O_TRUNC
	}

	f, err := d.fs.OpenFile(fileName, mode, 0666)
	if err != nil {
		return err
	}

	defer ioutil.CheckClose(f, &err)

	// Lock is unlocked by the deferred Close above. This is because Unlock
	// does not imply a fsync and thus there would be a race between
	// Unlock+Close and other concurrent writers. Adding Sync to go-billy
	// could work, but this is better (and avoids superfluous syncs).
	err = f.Lock()
	if err != nil {
		return err
	}

	// this is a no-op to call even when old is nil.
	err = d.checkReferenceAndTruncate(f, old)
	if err != nil {
		return err
	}

	_, err = f.Write([]byte(content))
	return err
}

// There are some filesystems that don't support opening files in RDWD mode.
// In these filesystems the standard SetRef function can not be used as it
// reads the reference file to check that it's not modified before updating it.
//
// This version of the function writes the reference without extra checks
// making it compatible with these simple filesystems. This is usually not
// a problem as they should be accessed by only one process at a time.
func (d *DotGit) setRefNorwfs(fileName, content string, old *plumbing.Reference) error {
	_, err := d.fs.Stat(fileName)
	if err == nil && old != nil {
		fRead, err := d.fs.Open(fileName)
		if err != nil {
			return err
		}

		ref, err := d.readReferenceFrom(fRead, old.Name().String())
		fRead.Close()

		if err != nil {
			return err
		}

		if ref.Hash() != old.Hash() {
			return fmt.Errorf("reference has changed concurrently")
		}
	}

	f, err := d.fs.Create(fileName)
	if err != nil {
		return err
	}

	defer f.Close()

	_, err = f.Write([]byte(content))
	return err
}
0707010000059F000081A4000000000000000000000001645E367C00000E9F000000000000000000000000000000000000006A00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/storage/filesystem/dotgit/repository_filesystem.go package dotgit

import (
	"os"
	"path/filepath"
	"strings"

	"github.com/go-git/go-billy/v5"
)

// RepositoryFilesystem is a billy.Filesystem compatible object wrapper
// which handles dot-git filesystem operations and supports commondir according to git scm layout:
// https://github.com/git/git/blob/master/Documentation/gitrepository-layout.txt
type RepositoryFilesystem struct {
	dotGitFs       billy.Filesystem
	commonDotGitFs billy.Filesystem
}

func NewRepositoryFilesystem(dotGitFs, commonDotGitFs billy.Filesystem) *RepositoryFilesystem {
	return &RepositoryFilesystem{
		dotGitFs:       dotGitFs,
		commonDotGitFs: commonDotGitFs,
	}
}

func (fs *RepositoryFilesystem) mapToRepositoryFsByPath(path string) billy.Filesystem {
	// Nothing to decide if commondir not defined
	if fs.commonDotGitFs == nil {
		return fs.dotGitFs
	}

	cleanPath := filepath.Clean(path)

	// Check exceptions for commondir (https://git-scm.com/docs/gitrepository-layout#Documentation/gitrepository-layout.txt)
	switch cleanPath {
	case fs.dotGitFs.Join(logsPath, "HEAD"):
		return fs.dotGitFs
	case fs.dotGitFs.Join(refsPath, "bisect"), fs.dotGitFs.Join(refsPath, "rewritten"), fs.dotGitFs.Join(refsPath, "worktree"):
		return fs.dotGitFs
	}

	// Determine dot-git root by first path element.
	// There are some elements which should always use commondir when commondir defined.
	// Usual dot-git root will be used for the rest of files.
	switch strings.Split(cleanPath, string(filepath.Separator))[0] {
	case objectsPath, refsPath, packedRefsPath, configPath, branchesPath, hooksPath, infoPath, remotesPath, logsPath, shallowPath, worktreesPath:
		return fs.commonDotGitFs
	default:
		return fs.dotGitFs
	}
}

func (fs *RepositoryFilesystem) Create(filename string) (billy.File, error) {
	return fs.mapToRepositoryFsByPath(filename).Create(filename)
}

func (fs *RepositoryFilesystem) Open(filename string) (billy.File, error) {
	return fs.mapToRepositoryFsByPath(filename).Open(filename)
}

func (fs *RepositoryFilesystem) OpenFile(filename string, flag int, perm os.FileMode) (billy.File, error) {
	return fs.mapToRepositoryFsByPath(filename).OpenFile(filename, flag, perm)
}

func (fs *RepositoryFilesystem) Stat(filename string) (os.FileInfo, error) {
	return fs.mapToRepositoryFsByPath(filename).Stat(filename)
}

func (fs *RepositoryFilesystem) Rename(oldpath, newpath string) error {
	return fs.mapToRepositoryFsByPath(oldpath).Rename(oldpath, newpath)
}

func (fs *RepositoryFilesystem) Remove(filename string) error {
	return fs.mapToRepositoryFsByPath(filename).Remove(filename)
}

func (fs *RepositoryFilesystem) Join(elem ...string) string {
	return fs.dotGitFs.Join(elem...)
}

func (fs *RepositoryFilesystem) TempFile(dir, prefix string) (billy.File, error) {
	return fs.mapToRepositoryFsByPath(dir).TempFile(dir, prefix)
}

func (fs *RepositoryFilesystem) ReadDir(path string) ([]os.FileInfo, error) {
	return fs.mapToRepositoryFsByPath(path).ReadDir(path)
}

func (fs *RepositoryFilesystem) MkdirAll(filename string, perm os.FileMode) error {
	return fs.mapToRepositoryFsByPath(filename).MkdirAll(filename, perm)
}

func (fs *RepositoryFilesystem) Lstat(filename string) (os.FileInfo, error) {
	return fs.mapToRepositoryFsByPath(filename).Lstat(filename)
}

func (fs *RepositoryFilesystem) Symlink(target, link string) error {
	return fs.mapToRepositoryFsByPath(target).Symlink(target, link)
}

func (fs *RepositoryFilesystem) Readlink(link string) (string, error) {
	return fs.mapToRepositoryFsByPath(link).Readlink(link)
}

func (fs *RepositoryFilesystem) Chroot(path string) (billy.Filesystem, error) {
	return fs.mapToRepositoryFsByPath(path).Chroot(path)
}

func (fs *RepositoryFilesystem) Root() string {
	return fs.dotGitFs.Root()
}
 070701000005A0000081A4000000000000000000000001645E367C0000162F000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/storage/filesystem/dotgit/writers.go   package dotgit

import (
	"fmt"
	"io"
	"sync/atomic"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/format/idxfile"
	"github.com/go-git/go-git/v5/plumbing/format/objfile"
	"github.com/go-git/go-git/v5/plumbing/format/packfile"

	"github.com/go-git/go-billy/v5"
)

// PackWriter is a io.Writer that generates the packfile index simultaneously,
// a packfile.Decoder is used with a file reader to read the file being written
// this operation is synchronized with the write operations.
// The packfile is written in a temp file, when Close is called this file
// is renamed/moved (depends on the Filesystem implementation) to the final
// location, if the PackWriter is not used, nothing is written
type PackWriter struct {
	Notify func(plumbing.Hash, *idxfile.Writer)

	fs       billy.Filesystem
	fr, fw   billy.File
	synced   *syncedReader
	checksum plumbing.Hash
	parser   *packfile.Parser
	writer   *idxfile.Writer
	result   chan error
}

func newPackWrite(fs billy.Filesystem) (*PackWriter, error) {
	fw, err := fs.TempFile(fs.Join(objectsPath, packPath), "tmp_pack_")
	if err != nil {
		return nil, err
	}

	fr, err := fs.Open(fw.Name())
	if err != nil {
		return nil, err
	}

	writer := &PackWriter{
		fs:     fs,
		fw:     fw,
		fr:     fr,
		synced: newSyncedReader(fw, fr),
		result: make(chan error),
	}

	go writer.buildIndex()
	return writer, nil
}

func (w *PackWriter) buildIndex() {
	s := packfile.NewScanner(w.synced)
	w.writer = new(idxfile.Writer)
	var err error
	w.parser, err = packfile.NewParser(s, w.writer)
	if err != nil {
		w.result <- err
		return
	}

	checksum, err := w.parser.Parse()
	if err != nil {
		w.result <- err
		return
	}

	w.checksum = checksum
	w.result <- err
}

// waitBuildIndex waits until buildIndex function finishes, this can terminate
// with a packfile.ErrEmptyPackfile, this means that nothing was written so we
// ignore the error
func (w *PackWriter) waitBuildIndex() error {
	err := <-w.result
	if err == packfile.ErrEmptyPackfile {
		return nil
	}

	return err
}

func (w *PackWriter) Write(p []byte) (int, error) {
	return w.synced.Write(p)
}

// Close closes all the file descriptors and save the final packfile, if nothing
// was written, the tempfiles are deleted without writing a packfile.
func (w *PackWriter) Close() error {
	defer func() {
		if w.Notify != nil && w.writer != nil && w.writer.Finished() {
			w.Notify(w.checksum, w.writer)
		}

		close(w.result)
	}()

	if err := w.synced.Close(); err != nil {
		return err
	}

	if err := w.waitBuildIndex(); err != nil {
		return err
	}

	if err := w.fr.Close(); err != nil {
		return err
	}

	if err := w.fw.Close(); err != nil {
		return err
	}

	if w.writer == nil || !w.writer.Finished() {
		return w.clean()
	}

	return w.save()
}

func (w *PackWriter) clean() error {
	return w.fs.Remove(w.fw.Name())
}

func (w *PackWriter) save() error {
	base := w.fs.Join(objectsPath, packPath, fmt.Sprintf("pack-%s", w.checksum))
	idx, err := w.fs.Create(fmt.Sprintf("%s.idx", base))
	if err != nil {
		return err
	}

	if err := w.encodeIdx(idx); err != nil {
		return err
	}

	if err := idx.Close(); err != nil {
		return err
	}

	return w.fs.Rename(w.fw.Name(), fmt.Sprintf("%s.pack", base))
}

func (w *PackWriter) encodeIdx(writer io.Writer) error {
	idx, err := w.writer.Index()
	if err != nil {
		return err
	}

	e := idxfile.NewEncoder(writer)
	_, err = e.Encode(idx)
	return err
}

type syncedReader struct {
	w io.Writer
	r io.ReadSeeker

	blocked, done uint32
	written, read uint64
	news          chan bool
}

func newSyncedReader(w io.Writer, r io.ReadSeeker) *syncedReader {
	return &syncedReader{
		w:    w,
		r:    r,
		news: make(chan bool),
	}
}

func (s *syncedReader) Write(p []byte) (n int, err error) {
	defer func() {
		written := atomic.AddUint64(&s.written, uint64(n))
		read := atomic.LoadUint64(&s.read)
		if written > read {
			s.wake()
		}
	}()

	n, err = s.w.Write(p)
	return
}

func (s *syncedReader) Read(p []byte) (n int, err error) {
	defer func() { atomic.AddUint64(&s.read, uint64(n)) }()

	for {
		s.sleep()
		n, err = s.r.Read(p)
		if err == io.EOF && !s.isDone() && n == 0 {
			continue
		}

		break
	}

	return
}

func (s *syncedReader) isDone() bool {
	return atomic.LoadUint32(&s.done) == 1
}

func (s *syncedReader) isBlocked() bool {
	return atomic.LoadUint32(&s.blocked) == 1
}

func (s *syncedReader) wake() {
	if s.isBlocked() {
		atomic.StoreUint32(&s.blocked, 0)
		s.news <- true
	}
}

func (s *syncedReader) sleep() {
	read := atomic.LoadUint64(&s.read)
	written := atomic.LoadUint64(&s.written)
	if read >= written {
		atomic.StoreUint32(&s.blocked, 1)
		<-s.news
	}

}

func (s *syncedReader) Seek(offset int64, whence int) (int64, error) {
	if whence == io.SeekCurrent {
		return s.r.Seek(offset, whence)
	}

	p, err := s.r.Seek(offset, whence)
	atomic.StoreUint64(&s.read, uint64(p))

	return p, err
}

func (s *syncedReader) Close() error {
	atomic.StoreUint32(&s.done, 1)
	close(s.news)
	return nil
}

type ObjectWriter struct {
	objfile.Writer
	fs billy.Filesystem
	f  billy.File
}

func newObjectWriter(fs billy.Filesystem) (*ObjectWriter, error) {
	f, err := fs.TempFile(fs.Join(objectsPath, packPath), "tmp_obj_")
	if err != nil {
		return nil, err
	}

	return &ObjectWriter{
		Writer: (*objfile.NewWriter(f)),
		fs:     fs,
		f:      f,
	}, nil
}

func (w *ObjectWriter) Close() error {
	if err := w.Writer.Close(); err != nil {
		return err
	}

	if err := w.f.Close(); err != nil {
		return err
	}

	return w.save()
}

func (w *ObjectWriter) save() error {
	hash := w.Hash().String()
	file := w.fs.Join(objectsPath, hash[0:2], hash[2:40])

	return w.fs.Rename(w.f.Name(), file)
}
 070701000005A1000081A4000000000000000000000001645E367C00000399000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/storage/filesystem/index.go    package filesystem

import (
	"bufio"
	"os"

	"github.com/go-git/go-git/v5/plumbing/format/index"
	"github.com/go-git/go-git/v5/storage/filesystem/dotgit"
	"github.com/go-git/go-git/v5/utils/ioutil"
)

type IndexStorage struct {
	dir *dotgit.DotGit
}

func (s *IndexStorage) SetIndex(idx *index.Index) (err error) {
	f, err := s.dir.IndexWriter()
	if err != nil {
		return err
	}

	defer ioutil.CheckClose(f, &err)
	bw := bufio.NewWriter(f)
	defer func() {
		if e := bw.Flush(); err == nil && e != nil {
			err = e
		}
	}()

	e := index.NewEncoder(bw)
	err = e.Encode(idx)
	return err
}

func (s *IndexStorage) Index() (i *index.Index, err error) {
	idx := &index.Index{
		Version: 2,
	}

	f, err := s.dir.Index()
	if err != nil {
		if os.IsNotExist(err) {
			return idx, nil
		}

		return nil, err
	}

	defer ioutil.CheckClose(f, &err)

	d := index.NewDecoder(bufio.NewReader(f))
	err = d.Decode(idx)
	return idx, err
}
   070701000005A2000081A4000000000000000000000001645E367C000001A8000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/storage/filesystem/module.go   package filesystem

import (
	"github.com/go-git/go-git/v5/plumbing/cache"
	"github.com/go-git/go-git/v5/storage"
	"github.com/go-git/go-git/v5/storage/filesystem/dotgit"
)

type ModuleStorage struct {
	dir *dotgit.DotGit
}

func (s *ModuleStorage) Module(name string) (storage.Storer, error) {
	fs, err := s.dir.Module(name)
	if err != nil {
		return nil, err
	}

	return NewStorage(fs, cache.NewObjectLRUDefault()), nil
}
070701000005A3000081A4000000000000000000000001645E367C0000480F000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/storage/filesystem/object.go   package filesystem

import (
	"bytes"
	"io"
	"os"
	"time"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/cache"
	"github.com/go-git/go-git/v5/plumbing/format/idxfile"
	"github.com/go-git/go-git/v5/plumbing/format/objfile"
	"github.com/go-git/go-git/v5/plumbing/format/packfile"
	"github.com/go-git/go-git/v5/plumbing/storer"
	"github.com/go-git/go-git/v5/storage/filesystem/dotgit"
	"github.com/go-git/go-git/v5/utils/ioutil"

	"github.com/go-git/go-billy/v5"
)

type ObjectStorage struct {
	options Options

	// objectCache is an object cache uses to cache delta's bases and also recently
	// loaded loose objects
	objectCache cache.Object

	dir   *dotgit.DotGit
	index map[plumbing.Hash]idxfile.Index

	packList    []plumbing.Hash
	packListIdx int
	packfiles   map[plumbing.Hash]*packfile.Packfile
}

// NewObjectStorage creates a new ObjectStorage with the given .git directory and cache.
func NewObjectStorage(dir *dotgit.DotGit, objectCache cache.Object) *ObjectStorage {
	return NewObjectStorageWithOptions(dir, objectCache, Options{})
}

// NewObjectStorageWithOptions creates a new ObjectStorage with the given .git directory, cache and extra options
func NewObjectStorageWithOptions(dir *dotgit.DotGit, objectCache cache.Object, ops Options) *ObjectStorage {
	return &ObjectStorage{
		options:     ops,
		objectCache: objectCache,
		dir:         dir,
	}
}

func (s *ObjectStorage) requireIndex() error {
	if s.index != nil {
		return nil
	}

	s.index = make(map[plumbing.Hash]idxfile.Index)
	packs, err := s.dir.ObjectPacks()
	if err != nil {
		return err
	}

	for _, h := range packs {
		if err := s.loadIdxFile(h); err != nil {
			return err
		}
	}

	return nil
}

// Reindex indexes again all packfiles. Useful if git changed packfiles externally
func (s *ObjectStorage) Reindex() {
	s.index = nil
}

func (s *ObjectStorage) loadIdxFile(h plumbing.Hash) (err error) {
	f, err := s.dir.ObjectPackIdx(h)
	if err != nil {
		return err
	}

	defer ioutil.CheckClose(f, &err)

	idxf := idxfile.NewMemoryIndex()
	d := idxfile.NewDecoder(f)
	if err = d.Decode(idxf); err != nil {
		return err
	}

	s.index[h] = idxf
	return err
}

func (s *ObjectStorage) NewEncodedObject() plumbing.EncodedObject {
	return &plumbing.MemoryObject{}
}

func (s *ObjectStorage) PackfileWriter() (io.WriteCloser, error) {
	if err := s.requireIndex(); err != nil {
		return nil, err
	}

	w, err := s.dir.NewObjectPack()
	if err != nil {
		return nil, err
	}

	w.Notify = func(h plumbing.Hash, writer *idxfile.Writer) {
		index, err := writer.Index()
		if err == nil {
			s.index[h] = index
		}
	}

	return w, nil
}

// SetEncodedObject adds a new object to the storage.
func (s *ObjectStorage) SetEncodedObject(o plumbing.EncodedObject) (h plumbing.Hash, err error) {
	if o.Type() == plumbing.OFSDeltaObject || o.Type() == plumbing.REFDeltaObject {
		return plumbing.ZeroHash, plumbing.ErrInvalidType
	}

	ow, err := s.dir.NewObject()
	if err != nil {
		return plumbing.ZeroHash, err
	}

	defer ioutil.CheckClose(ow, &err)

	or, err := o.Reader()
	if err != nil {
		return plumbing.ZeroHash, err
	}

	defer ioutil.CheckClose(or, &err)

	if err = ow.WriteHeader(o.Type(), o.Size()); err != nil {
		return plumbing.ZeroHash, err
	}

	if _, err = io.Copy(ow, or); err != nil {
		return plumbing.ZeroHash, err
	}

	return o.Hash(), err
}

// HasEncodedObject returns nil if the object exists, without actually
// reading the object data from storage.
func (s *ObjectStorage) HasEncodedObject(h plumbing.Hash) (err error) {
	// Check unpacked objects
	f, err := s.dir.Object(h)
	if err != nil {
		if !os.IsNotExist(err) {
			return err
		}
		// Fall through to check packed objects.
	} else {
		defer ioutil.CheckClose(f, &err)
		return nil
	}

	// Check packed objects.
	if err := s.requireIndex(); err != nil {
		return err
	}
	_, _, offset := s.findObjectInPackfile(h)
	if offset == -1 {
		return plumbing.ErrObjectNotFound
	}
	return nil
}

func (s *ObjectStorage) encodedObjectSizeFromUnpacked(h plumbing.Hash) (
	size int64, err error) {
	f, err := s.dir.Object(h)
	if err != nil {
		if os.IsNotExist(err) {
			return 0, plumbing.ErrObjectNotFound
		}

		return 0, err
	}

	r, err := objfile.NewReader(f)
	if err != nil {
		return 0, err
	}
	defer ioutil.CheckClose(r, &err)

	_, size, err = r.Header()
	return size, err
}

func (s *ObjectStorage) packfile(idx idxfile.Index, pack plumbing.Hash) (*packfile.Packfile, error) {
	if p := s.packfileFromCache(pack); p != nil {
		return p, nil
	}

	f, err := s.dir.ObjectPack(pack)
	if err != nil {
		return nil, err
	}

	var p *packfile.Packfile
	if s.objectCache != nil {
		p = packfile.NewPackfileWithCache(idx, s.dir.Fs(), f, s.objectCache)
	} else {
		p = packfile.NewPackfile(idx, s.dir.Fs(), f)
	}

	return p, s.storePackfileInCache(pack, p)
}

func (s *ObjectStorage) packfileFromCache(hash plumbing.Hash) *packfile.Packfile {
	if s.packfiles == nil {
		if s.options.KeepDescriptors {
			s.packfiles = make(map[plumbing.Hash]*packfile.Packfile)
		} else if s.options.MaxOpenDescriptors > 0 {
			s.packList = make([]plumbing.Hash, s.options.MaxOpenDescriptors)
			s.packfiles = make(map[plumbing.Hash]*packfile.Packfile, s.options.MaxOpenDescriptors)
		}
	}

	return s.packfiles[hash]
}

func (s *ObjectStorage) storePackfileInCache(hash plumbing.Hash, p *packfile.Packfile) error {
	if s.options.KeepDescriptors {
		s.packfiles[hash] = p
		return nil
	}

	if s.options.MaxOpenDescriptors <= 0 {
		return nil
	}

	// start over as the limit of packList is hit
	if s.packListIdx >= len(s.packList) {
		s.packListIdx = 0
	}

	// close the existing packfile if open
	if next := s.packList[s.packListIdx]; !next.IsZero() {
		open := s.packfiles[next]
		delete(s.packfiles, next)
		if open != nil {
			if err := open.Close(); err != nil {
				return err
			}
		}
	}

	// cache newly open packfile
	s.packList[s.packListIdx] = hash
	s.packfiles[hash] = p
	s.packListIdx++

	return nil
}

func (s *ObjectStorage) encodedObjectSizeFromPackfile(h plumbing.Hash) (
	size int64, err error) {
	if err := s.requireIndex(); err != nil {
		return 0, err
	}

	pack, _, offset := s.findObjectInPackfile(h)
	if offset == -1 {
		return 0, plumbing.ErrObjectNotFound
	}

	idx := s.index[pack]
	hash, err := idx.FindHash(offset)
	if err == nil {
		obj, ok := s.objectCache.Get(hash)
		if ok {
			return obj.Size(), nil
		}
	} else if err != nil && err != plumbing.ErrObjectNotFound {
		return 0, err
	}

	p, err := s.packfile(idx, pack)
	if err != nil {
		return 0, err
	}

	if !s.options.KeepDescriptors && s.options.MaxOpenDescriptors == 0 {
		defer ioutil.CheckClose(p, &err)
	}

	return p.GetSizeByOffset(offset)
}

// EncodedObjectSize returns the plaintext size of the given object,
// without actually reading the full object data from storage.
func (s *ObjectStorage) EncodedObjectSize(h plumbing.Hash) (
	size int64, err error) {
	size, err = s.encodedObjectSizeFromUnpacked(h)
	if err != nil && err != plumbing.ErrObjectNotFound {
		return 0, err
	} else if err == nil {
		return size, nil
	}

	return s.encodedObjectSizeFromPackfile(h)
}

// EncodedObject returns the object with the given hash, by searching for it in
// the packfile and the git object directories.
func (s *ObjectStorage) EncodedObject(t plumbing.ObjectType, h plumbing.Hash) (plumbing.EncodedObject, error) {
	var obj plumbing.EncodedObject
	var err error

	if s.index != nil {
		obj, err = s.getFromPackfile(h, false)
		if err == plumbing.ErrObjectNotFound {
			obj, err = s.getFromUnpacked(h)
		}
	} else {
		obj, err = s.getFromUnpacked(h)
		if err == plumbing.ErrObjectNotFound {
			obj, err = s.getFromPackfile(h, false)
		}
	}

	// If the error is still object not found, check if it's a shared object
	// repository.
	if err == plumbing.ErrObjectNotFound {
		dotgits, e := s.dir.Alternates()
		if e == nil {
			// Create a new object storage with the DotGit(s) and check for the
			// required hash object. Skip when not found.
			for _, dg := range dotgits {
				o := NewObjectStorage(dg, s.objectCache)
				enobj, enerr := o.EncodedObject(t, h)
				if enerr != nil {
					continue
				}
				return enobj, nil
			}
		}
	}

	if err != nil {
		return nil, err
	}

	if plumbing.AnyObject != t && obj.Type() != t {
		return nil, plumbing.ErrObjectNotFound
	}

	return obj, nil
}

// DeltaObject returns the object with the given hash, by searching for
// it in the packfile and the git object directories.
func (s *ObjectStorage) DeltaObject(t plumbing.ObjectType,
	h plumbing.Hash) (plumbing.EncodedObject, error) {
	obj, err := s.getFromUnpacked(h)
	if err == plumbing.ErrObjectNotFound {
		obj, err = s.getFromPackfile(h, true)
	}

	if err != nil {
		return nil, err
	}

	if plumbing.AnyObject != t && obj.Type() != t {
		return nil, plumbing.ErrObjectNotFound
	}

	return obj, nil
}

func (s *ObjectStorage) getFromUnpacked(h plumbing.Hash) (obj plumbing.EncodedObject, err error) {
	f, err := s.dir.Object(h)
	if err != nil {
		if os.IsNotExist(err) {
			return nil, plumbing.ErrObjectNotFound
		}

		return nil, err
	}
	defer ioutil.CheckClose(f, &err)

	if cacheObj, found := s.objectCache.Get(h); found {
		return cacheObj, nil
	}

	obj = s.NewEncodedObject()
	r, err := objfile.NewReader(f)
	if err != nil {
		return nil, err
	}

	defer ioutil.CheckClose(r, &err)

	t, size, err := r.Header()
	if err != nil {
		return nil, err
	}

	obj.SetType(t)
	obj.SetSize(size)
	w, err := obj.Writer()
	if err != nil {
		return nil, err
	}

	defer ioutil.CheckClose(w, &err)

	s.objectCache.Put(obj)

	_, err = io.Copy(w, r)
	return obj, err
}

// Get returns the object with the given hash, by searching for it in
// the packfile.
func (s *ObjectStorage) getFromPackfile(h plumbing.Hash, canBeDelta bool) (
	plumbing.EncodedObject, error) {

	if err := s.requireIndex(); err != nil {
		return nil, err
	}

	pack, hash, offset := s.findObjectInPackfile(h)
	if offset == -1 {
		return nil, plumbing.ErrObjectNotFound
	}

	idx := s.index[pack]
	p, err := s.packfile(idx, pack)
	if err != nil {
		return nil, err
	}

	if !s.options.KeepDescriptors && s.options.MaxOpenDescriptors == 0 {
		defer ioutil.CheckClose(p, &err)
	}

	if canBeDelta {
		return s.decodeDeltaObjectAt(p, offset, hash)
	}

	return s.decodeObjectAt(p, offset)
}

func (s *ObjectStorage) decodeObjectAt(
	p *packfile.Packfile,
	offset int64,
) (plumbing.EncodedObject, error) {
	hash, err := p.FindHash(offset)
	if err == nil {
		obj, ok := s.objectCache.Get(hash)
		if ok {
			return obj, nil
		}
	}

	if err != nil && err != plumbing.ErrObjectNotFound {
		return nil, err
	}

	return p.GetByOffset(offset)
}

func (s *ObjectStorage) decodeDeltaObjectAt(
	p *packfile.Packfile,
	offset int64,
	hash plumbing.Hash,
) (plumbing.EncodedObject, error) {
	scan := p.Scanner()
	header, err := scan.SeekObjectHeader(offset)
	if err != nil {
		return nil, err
	}

	var (
		base plumbing.Hash
	)

	switch header.Type {
	case plumbing.REFDeltaObject:
		base = header.Reference
	case plumbing.OFSDeltaObject:
		base, err = p.FindHash(header.OffsetReference)
		if err != nil {
			return nil, err
		}
	default:
		return s.decodeObjectAt(p, offset)
	}

	obj := &plumbing.MemoryObject{}
	obj.SetType(header.Type)
	w, err := obj.Writer()
	if err != nil {
		return nil, err
	}

	if _, _, err := scan.NextObject(w); err != nil {
		return nil, err
	}

	return newDeltaObject(obj, hash, base, header.Length), nil
}

func (s *ObjectStorage) findObjectInPackfile(h plumbing.Hash) (plumbing.Hash, plumbing.Hash, int64) {
	for packfile, index := range s.index {
		offset, err := index.FindOffset(h)
		if err == nil {
			return packfile, h, offset
		}
	}

	return plumbing.ZeroHash, plumbing.ZeroHash, -1
}

func (s *ObjectStorage) HashesWithPrefix(prefix []byte) ([]plumbing.Hash, error) {
	hashes, err := s.dir.ObjectsWithPrefix(prefix)
	if err != nil {
		return nil, err
	}

	// TODO: This could be faster with some idxfile changes,
	// or diving into the packfile.
	for _, index := range s.index {
		ei, err := index.Entries()
		if err != nil {
			return nil, err
		}
		for {
			e, err := ei.Next()
			if err == io.EOF {
				break
			} else if err != nil {
				return nil, err
			}
			if bytes.HasPrefix(e.Hash[:], prefix) {
				hashes = append(hashes, e.Hash)
			}
		}
		ei.Close()
	}

	return hashes, nil
}

// IterEncodedObjects returns an iterator for all the objects in the packfile
// with the given type.
func (s *ObjectStorage) IterEncodedObjects(t plumbing.ObjectType) (storer.EncodedObjectIter, error) {
	objects, err := s.dir.Objects()
	if err != nil {
		return nil, err
	}

	seen := make(map[plumbing.Hash]struct{})
	var iters []storer.EncodedObjectIter
	if len(objects) != 0 {
		iters = append(iters, &objectsIter{s: s, t: t, h: objects})
		seen = hashListAsMap(objects)
	}

	packi, err := s.buildPackfileIters(t, seen)
	if err != nil {
		return nil, err
	}

	iters = append(iters, packi)
	return storer.NewMultiEncodedObjectIter(iters), nil
}

func (s *ObjectStorage) buildPackfileIters(
	t plumbing.ObjectType,
	seen map[plumbing.Hash]struct{},
) (storer.EncodedObjectIter, error) {
	if err := s.requireIndex(); err != nil {
		return nil, err
	}

	packs, err := s.dir.ObjectPacks()
	if err != nil {
		return nil, err
	}
	return &lazyPackfilesIter{
		hashes: packs,
		open: func(h plumbing.Hash) (storer.EncodedObjectIter, error) {
			pack, err := s.dir.ObjectPack(h)
			if err != nil {
				return nil, err
			}
			return newPackfileIter(
				s.dir.Fs(), pack, t, seen, s.index[h],
				s.objectCache, s.options.KeepDescriptors,
			)
		},
	}, nil
}

// Close closes all opened files.
func (s *ObjectStorage) Close() error {
	var firstError error
	if s.options.KeepDescriptors || s.options.MaxOpenDescriptors > 0 {
		for _, packfile := range s.packfiles {
			err := packfile.Close()
			if firstError == nil && err != nil {
				firstError = err
			}
		}
	}

	s.packfiles = nil
	s.dir.Close()

	return firstError
}

type lazyPackfilesIter struct {
	hashes []plumbing.Hash
	open   func(h plumbing.Hash) (storer.EncodedObjectIter, error)
	cur    storer.EncodedObjectIter
}

func (it *lazyPackfilesIter) Next() (plumbing.EncodedObject, error) {
	for {
		if it.cur == nil {
			if len(it.hashes) == 0 {
				return nil, io.EOF
			}
			h := it.hashes[0]
			it.hashes = it.hashes[1:]

			sub, err := it.open(h)
			if err == io.EOF {
				continue
			} else if err != nil {
				return nil, err
			}
			it.cur = sub
		}
		ob, err := it.cur.Next()
		if err == io.EOF {
			it.cur.Close()
			it.cur = nil
			continue
		} else if err != nil {
			return nil, err
		}
		return ob, nil
	}
}

func (it *lazyPackfilesIter) ForEach(cb func(plumbing.EncodedObject) error) error {
	return storer.ForEachIterator(it, cb)
}

func (it *lazyPackfilesIter) Close() {
	if it.cur != nil {
		it.cur.Close()
		it.cur = nil
	}
	it.hashes = nil
}

type packfileIter struct {
	pack billy.File
	iter storer.EncodedObjectIter
	seen map[plumbing.Hash]struct{}

	// tells whether the pack file should be left open after iteration or not
	keepPack bool
}

// NewPackfileIter returns a new EncodedObjectIter for the provided packfile
// and object type. Packfile and index file will be closed after they're
// used. If keepPack is true the packfile won't be closed after the iteration
// finished.
func NewPackfileIter(
	fs billy.Filesystem,
	f billy.File,
	idxFile billy.File,
	t plumbing.ObjectType,
	keepPack bool,
) (storer.EncodedObjectIter, error) {
	idx := idxfile.NewMemoryIndex()
	if err := idxfile.NewDecoder(idxFile).Decode(idx); err != nil {
		return nil, err
	}

	if err := idxFile.Close(); err != nil {
		return nil, err
	}

	seen := make(map[plumbing.Hash]struct{})
	return newPackfileIter(fs, f, t, seen, idx, nil, keepPack)
}

func newPackfileIter(
	fs billy.Filesystem,
	f billy.File,
	t plumbing.ObjectType,
	seen map[plumbing.Hash]struct{},
	index idxfile.Index,
	cache cache.Object,
	keepPack bool,
) (storer.EncodedObjectIter, error) {
	var p *packfile.Packfile
	if cache != nil {
		p = packfile.NewPackfileWithCache(index, fs, f, cache)
	} else {
		p = packfile.NewPackfile(index, fs, f)
	}

	iter, err := p.GetByType(t)
	if err != nil {
		return nil, err
	}

	return &packfileIter{
		pack:     f,
		iter:     iter,
		seen:     seen,
		keepPack: keepPack,
	}, nil
}

func (iter *packfileIter) Next() (plumbing.EncodedObject, error) {
	for {
		obj, err := iter.iter.Next()
		if err != nil {
			return nil, err
		}

		if _, ok := iter.seen[obj.Hash()]; ok {
			continue
		}

		return obj, nil
	}
}

func (iter *packfileIter) ForEach(cb func(plumbing.EncodedObject) error) error {
	for {
		o, err := iter.Next()
		if err != nil {
			if err == io.EOF {
				iter.Close()
				return nil
			}
			return err
		}

		if err := cb(o); err != nil {
			return err
		}
	}
}

func (iter *packfileIter) Close() {
	iter.iter.Close()
	if !iter.keepPack {
		_ = iter.pack.Close()
	}
}

type objectsIter struct {
	s *ObjectStorage
	t plumbing.ObjectType
	h []plumbing.Hash
}

func (iter *objectsIter) Next() (plumbing.EncodedObject, error) {
	if len(iter.h) == 0 {
		return nil, io.EOF
	}

	obj, err := iter.s.getFromUnpacked(iter.h[0])
	iter.h = iter.h[1:]

	if err != nil {
		return nil, err
	}

	if iter.t != plumbing.AnyObject && iter.t != obj.Type() {
		return iter.Next()
	}

	return obj, err
}

func (iter *objectsIter) ForEach(cb func(plumbing.EncodedObject) error) error {
	for {
		o, err := iter.Next()
		if err != nil {
			if err == io.EOF {
				return nil
			}
			return err
		}

		if err := cb(o); err != nil {
			return err
		}
	}
}

func (iter *objectsIter) Close() {
	iter.h = []plumbing.Hash{}
}

func hashListAsMap(l []plumbing.Hash) map[plumbing.Hash]struct{} {
	m := make(map[plumbing.Hash]struct{}, len(l))
	for _, h := range l {
		m[h] = struct{}{}
	}
	return m
}

func (s *ObjectStorage) ForEachObjectHash(fun func(plumbing.Hash) error) error {
	err := s.dir.ForEachObjectHash(fun)
	if err == storer.ErrStop {
		return nil
	}
	return err
}

func (s *ObjectStorage) LooseObjectTime(hash plumbing.Hash) (time.Time, error) {
	fi, err := s.dir.ObjectStat(hash)
	if err != nil {
		return time.Time{}, err
	}
	return fi.ModTime(), nil
}

func (s *ObjectStorage) DeleteLooseObject(hash plumbing.Hash) error {
	return s.dir.ObjectDelete(hash)
}

func (s *ObjectStorage) ObjectPacks() ([]plumbing.Hash, error) {
	return s.dir.ObjectPacks()
}

func (s *ObjectStorage) DeleteOldObjectPackAndIndex(h plumbing.Hash, t time.Time) error {
	return s.dir.DeleteOldObjectPackAndIndex(h, t)
}
 070701000005A4000081A4000000000000000000000001645E367C00000411000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/storage/filesystem/reference.go    package filesystem

import (
	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/storer"
	"github.com/go-git/go-git/v5/storage/filesystem/dotgit"
)

type ReferenceStorage struct {
	dir *dotgit.DotGit
}

func (r *ReferenceStorage) SetReference(ref *plumbing.Reference) error {
	return r.dir.SetRef(ref, nil)
}

func (r *ReferenceStorage) CheckAndSetReference(ref, old *plumbing.Reference) error {
	return r.dir.SetRef(ref, old)
}

func (r *ReferenceStorage) Reference(n plumbing.ReferenceName) (*plumbing.Reference, error) {
	return r.dir.Ref(n)
}

func (r *ReferenceStorage) IterReferences() (storer.ReferenceIter, error) {
	refs, err := r.dir.Refs()
	if err != nil {
		return nil, err
	}

	return storer.NewReferenceSliceIter(refs), nil
}

func (r *ReferenceStorage) RemoveReference(n plumbing.ReferenceName) error {
	return r.dir.RemoveRef(n)
}

func (r *ReferenceStorage) CountLooseRefs() (int, error) {
	return r.dir.CountLooseRefs()
}

func (r *ReferenceStorage) PackRefs() error {
	return r.dir.PackRefs()
}
   070701000005A5000081A4000000000000000000000001645E367C000004B5000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/storage/filesystem/shallow.go  package filesystem

import (
	"bufio"
	"fmt"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/storage/filesystem/dotgit"
	"github.com/go-git/go-git/v5/utils/ioutil"
)

// ShallowStorage where the shallow commits are stored, an internal to
// manipulate the shallow file
type ShallowStorage struct {
	dir *dotgit.DotGit
}

// SetShallow save the shallows in the shallow file in the .git folder as one
// commit per line represented by 40-byte hexadecimal object terminated by a
// newline.
func (s *ShallowStorage) SetShallow(commits []plumbing.Hash) error {
	f, err := s.dir.ShallowWriter()
	if err != nil {
		return err
	}

	defer ioutil.CheckClose(f, &err)
	for _, h := range commits {
		if _, err := fmt.Fprintf(f, "%s\n", h); err != nil {
			return err
		}
	}

	return err
}

// Shallow return the shallow commits reading from shallo file from .git
func (s *ShallowStorage) Shallow() ([]plumbing.Hash, error) {
	f, err := s.dir.Shallow()
	if f == nil || err != nil {
		return nil, err
	}

	defer ioutil.CheckClose(f, &err)

	var hash []plumbing.Hash

	scn := bufio.NewScanner(f)
	for scn.Scan() {
		hash = append(hash, plumbing.NewHash(scn.Text()))
	}

	return hash, scn.Err()
}
   070701000005A6000081A4000000000000000000000001645E367C00000895000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/storage/filesystem/storage.go  // Package filesystem is a storage backend base on filesystems
package filesystem

import (
	"github.com/go-git/go-git/v5/plumbing/cache"
	"github.com/go-git/go-git/v5/storage/filesystem/dotgit"

	"github.com/go-git/go-billy/v5"
)

// Storage is an implementation of git.Storer that stores data on disk in the
// standard git format (this is, the .git directory). Zero values of this type
// are not safe to use, see the NewStorage function below.
type Storage struct {
	fs  billy.Filesystem
	dir *dotgit.DotGit

	ObjectStorage
	ReferenceStorage
	IndexStorage
	ShallowStorage
	ConfigStorage
	ModuleStorage
}

// Options holds configuration for the storage.
type Options struct {
	// ExclusiveAccess means that the filesystem is not modified externally
	// while the repo is open.
	ExclusiveAccess bool
	// KeepDescriptors makes the file descriptors to be reused but they will
	// need to be manually closed calling Close().
	KeepDescriptors bool
	// MaxOpenDescriptors is the max number of file descriptors to keep
	// open. If KeepDescriptors is true, all file descriptors will remain open.
	MaxOpenDescriptors int
}

// NewStorage returns a new Storage backed by a given `fs.Filesystem` and cache.
func NewStorage(fs billy.Filesystem, cache cache.Object) *Storage {
	return NewStorageWithOptions(fs, cache, Options{})
}

// NewStorageWithOptions returns a new Storage with extra options,
// backed by a given `fs.Filesystem` and cache.
func NewStorageWithOptions(fs billy.Filesystem, cache cache.Object, ops Options) *Storage {
	dirOps := dotgit.Options{
		ExclusiveAccess: ops.ExclusiveAccess,
	}
	dir := dotgit.NewWithOptions(fs, dirOps)

	return &Storage{
		fs:  fs,
		dir: dir,

		ObjectStorage:    *NewObjectStorageWithOptions(dir, cache, ops),
		ReferenceStorage: ReferenceStorage{dir: dir},
		IndexStorage:     IndexStorage{dir: dir},
		ShallowStorage:   ShallowStorage{dir: dir},
		ConfigStorage:    ConfigStorage{dir: dir},
		ModuleStorage:    ModuleStorage{dir: dir},
	}
}

// Filesystem returns the underlying filesystem
func (s *Storage) Filesystem() billy.Filesystem {
	return s.fs
}

// Init initializes .git directory
func (s *Storage) Init() error {
	return s.dir.Initialize()
}
   070701000005A7000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/storage/memory 070701000005A8000081A4000000000000000000000001645E367C00001D33000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/storage/memory/storage.go  // Package memory is a storage backend base on memory
package memory

import (
	"fmt"
	"time"

	"github.com/go-git/go-git/v5/config"
	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/format/index"
	"github.com/go-git/go-git/v5/plumbing/storer"
	"github.com/go-git/go-git/v5/storage"
)

var ErrUnsupportedObjectType = fmt.Errorf("unsupported object type")

// Storage is an implementation of git.Storer that stores data on memory, being
// ephemeral. The use of this storage should be done in controlled environments,
// since the representation in memory of some repository can fill the machine
// memory. in the other hand this storage has the best performance.
type Storage struct {
	ConfigStorage
	ObjectStorage
	ShallowStorage
	IndexStorage
	ReferenceStorage
	ModuleStorage
}

// NewStorage returns a new Storage base on memory
func NewStorage() *Storage {
	return &Storage{
		ReferenceStorage: make(ReferenceStorage),
		ConfigStorage:    ConfigStorage{},
		ShallowStorage:   ShallowStorage{},
		ObjectStorage: ObjectStorage{
			Objects: make(map[plumbing.Hash]plumbing.EncodedObject),
			Commits: make(map[plumbing.Hash]plumbing.EncodedObject),
			Trees:   make(map[plumbing.Hash]plumbing.EncodedObject),
			Blobs:   make(map[plumbing.Hash]plumbing.EncodedObject),
			Tags:    make(map[plumbing.Hash]plumbing.EncodedObject),
		},
		ModuleStorage: make(ModuleStorage),
	}
}

type ConfigStorage struct {
	config *config.Config
}

func (c *ConfigStorage) SetConfig(cfg *config.Config) error {
	if err := cfg.Validate(); err != nil {
		return err
	}

	c.config = cfg
	return nil
}

func (c *ConfigStorage) Config() (*config.Config, error) {
	if c.config == nil {
		c.config = config.NewConfig()
	}

	return c.config, nil
}

type IndexStorage struct {
	index *index.Index
}

func (c *IndexStorage) SetIndex(idx *index.Index) error {
	c.index = idx
	return nil
}

func (c *IndexStorage) Index() (*index.Index, error) {
	if c.index == nil {
		c.index = &index.Index{Version: 2}
	}

	return c.index, nil
}

type ObjectStorage struct {
	Objects map[plumbing.Hash]plumbing.EncodedObject
	Commits map[plumbing.Hash]plumbing.EncodedObject
	Trees   map[plumbing.Hash]plumbing.EncodedObject
	Blobs   map[plumbing.Hash]plumbing.EncodedObject
	Tags    map[plumbing.Hash]plumbing.EncodedObject
}

func (o *ObjectStorage) NewEncodedObject() plumbing.EncodedObject {
	return &plumbing.MemoryObject{}
}

func (o *ObjectStorage) SetEncodedObject(obj plumbing.EncodedObject) (plumbing.Hash, error) {
	h := obj.Hash()
	o.Objects[h] = obj

	switch obj.Type() {
	case plumbing.CommitObject:
		o.Commits[h] = o.Objects[h]
	case plumbing.TreeObject:
		o.Trees[h] = o.Objects[h]
	case plumbing.BlobObject:
		o.Blobs[h] = o.Objects[h]
	case plumbing.TagObject:
		o.Tags[h] = o.Objects[h]
	default:
		return h, ErrUnsupportedObjectType
	}

	return h, nil
}

func (o *ObjectStorage) HasEncodedObject(h plumbing.Hash) (err error) {
	if _, ok := o.Objects[h]; !ok {
		return plumbing.ErrObjectNotFound
	}
	return nil
}

func (o *ObjectStorage) EncodedObjectSize(h plumbing.Hash) (
	size int64, err error) {
	obj, ok := o.Objects[h]
	if !ok {
		return 0, plumbing.ErrObjectNotFound
	}

	return obj.Size(), nil
}

func (o *ObjectStorage) EncodedObject(t plumbing.ObjectType, h plumbing.Hash) (plumbing.EncodedObject, error) {
	obj, ok := o.Objects[h]
	if !ok || (plumbing.AnyObject != t && obj.Type() != t) {
		return nil, plumbing.ErrObjectNotFound
	}

	return obj, nil
}

func (o *ObjectStorage) IterEncodedObjects(t plumbing.ObjectType) (storer.EncodedObjectIter, error) {
	var series []plumbing.EncodedObject
	switch t {
	case plumbing.AnyObject:
		series = flattenObjectMap(o.Objects)
	case plumbing.CommitObject:
		series = flattenObjectMap(o.Commits)
	case plumbing.TreeObject:
		series = flattenObjectMap(o.Trees)
	case plumbing.BlobObject:
		series = flattenObjectMap(o.Blobs)
	case plumbing.TagObject:
		series = flattenObjectMap(o.Tags)
	}

	return storer.NewEncodedObjectSliceIter(series), nil
}

func flattenObjectMap(m map[plumbing.Hash]plumbing.EncodedObject) []plumbing.EncodedObject {
	objects := make([]plumbing.EncodedObject, 0, len(m))
	for _, obj := range m {
		objects = append(objects, obj)
	}
	return objects
}

func (o *ObjectStorage) Begin() storer.Transaction {
	return &TxObjectStorage{
		Storage: o,
		Objects: make(map[plumbing.Hash]plumbing.EncodedObject),
	}
}

func (o *ObjectStorage) ForEachObjectHash(fun func(plumbing.Hash) error) error {
	for h := range o.Objects {
		err := fun(h)
		if err != nil {
			if err == storer.ErrStop {
				return nil
			}
			return err
		}
	}
	return nil
}

func (o *ObjectStorage) ObjectPacks() ([]plumbing.Hash, error) {
	return nil, nil
}
func (o *ObjectStorage) DeleteOldObjectPackAndIndex(plumbing.Hash, time.Time) error {
	return nil
}

var errNotSupported = fmt.Errorf("Not supported")

func (o *ObjectStorage) LooseObjectTime(hash plumbing.Hash) (time.Time, error) {
	return time.Time{}, errNotSupported
}
func (o *ObjectStorage) DeleteLooseObject(plumbing.Hash) error {
	return errNotSupported
}

type TxObjectStorage struct {
	Storage *ObjectStorage
	Objects map[plumbing.Hash]plumbing.EncodedObject
}

func (tx *TxObjectStorage) SetEncodedObject(obj plumbing.EncodedObject) (plumbing.Hash, error) {
	h := obj.Hash()
	tx.Objects[h] = obj

	return h, nil
}

func (tx *TxObjectStorage) EncodedObject(t plumbing.ObjectType, h plumbing.Hash) (plumbing.EncodedObject, error) {
	obj, ok := tx.Objects[h]
	if !ok || (plumbing.AnyObject != t && obj.Type() != t) {
		return nil, plumbing.ErrObjectNotFound
	}

	return obj, nil
}

func (tx *TxObjectStorage) Commit() error {
	for h, obj := range tx.Objects {
		delete(tx.Objects, h)
		if _, err := tx.Storage.SetEncodedObject(obj); err != nil {
			return err
		}
	}

	return nil
}

func (tx *TxObjectStorage) Rollback() error {
	tx.Objects = make(map[plumbing.Hash]plumbing.EncodedObject)
	return nil
}

type ReferenceStorage map[plumbing.ReferenceName]*plumbing.Reference

func (r ReferenceStorage) SetReference(ref *plumbing.Reference) error {
	if ref != nil {
		r[ref.Name()] = ref
	}

	return nil
}

func (r ReferenceStorage) CheckAndSetReference(ref, old *plumbing.Reference) error {
	if ref == nil {
		return nil
	}

	if old != nil {
		tmp := r[ref.Name()]
		if tmp != nil && tmp.Hash() != old.Hash() {
			return storage.ErrReferenceHasChanged
		}
	}
	r[ref.Name()] = ref
	return nil
}

func (r ReferenceStorage) Reference(n plumbing.ReferenceName) (*plumbing.Reference, error) {
	ref, ok := r[n]
	if !ok {
		return nil, plumbing.ErrReferenceNotFound
	}

	return ref, nil
}

func (r ReferenceStorage) IterReferences() (storer.ReferenceIter, error) {
	var refs []*plumbing.Reference
	for _, ref := range r {
		refs = append(refs, ref)
	}

	return storer.NewReferenceSliceIter(refs), nil
}

func (r ReferenceStorage) CountLooseRefs() (int, error) {
	return len(r), nil
}

func (r ReferenceStorage) PackRefs() error {
	return nil
}

func (r ReferenceStorage) RemoveReference(n plumbing.ReferenceName) error {
	delete(r, n)
	return nil
}

type ShallowStorage []plumbing.Hash

func (s *ShallowStorage) SetShallow(commits []plumbing.Hash) error {
	*s = commits
	return nil
}

func (s ShallowStorage) Shallow() ([]plumbing.Hash, error) {
	return s, nil
}

type ModuleStorage map[string]*Storage

func (s ModuleStorage) Module(name string) (storage.Storer, error) {
	if m, ok := s[name]; ok {
		return m, nil
	}

	m := NewStorage()
	s[name] = m

	return m, nil
}
 070701000005A9000081A4000000000000000000000001645E367C00000378000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/storage/storer.go  package storage

import (
	"errors"

	"github.com/go-git/go-git/v5/config"
	"github.com/go-git/go-git/v5/plumbing/storer"
)

var ErrReferenceHasChanged = errors.New("reference has changed concurrently")

// Storer is a generic storage of objects, references and any information
// related to a particular repository. The package github.com/go-git/go-git/v5/storage
// contains two implementation a filesystem base implementation (such as `.git`)
// and a memory implementations being ephemeral
type Storer interface {
	storer.EncodedObjectStorer
	storer.ReferenceStorer
	storer.ShallowStorer
	storer.IndexStorer
	config.ConfigStorer
	ModuleStorer
}

// ModuleStorer allows interact with the modules' Storers
type ModuleStorer interface {
	// Module returns a Storer representing a submodule, if not exists returns a
	// new empty Storer is returned
	Module(name string) (Storer, error)
}
070701000005AA000081A4000000000000000000000001645E367C000022D6000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/submodule.go   package git

import (
	"bytes"
	"context"
	"errors"
	"fmt"
	"net/url"
	"path"

	"github.com/go-git/go-billy/v5"
	"github.com/go-git/go-git/v5/config"
	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/format/index"
)

var (
	ErrSubmoduleAlreadyInitialized = errors.New("submodule already initialized")
	ErrSubmoduleNotInitialized     = errors.New("submodule not initialized")
)

// Submodule a submodule allows you to keep another Git repository in a
// subdirectory of your repository.
type Submodule struct {
	// initialized defines if a submodule was already initialized.
	initialized bool

	c *config.Submodule
	w *Worktree
}

// Config returns the submodule config
func (s *Submodule) Config() *config.Submodule {
	return s.c
}

// Init initialize the submodule reading the recorded Entry in the index for
// the given submodule
func (s *Submodule) Init() error {
	cfg, err := s.w.r.Config()
	if err != nil {
		return err
	}

	_, ok := cfg.Submodules[s.c.Name]
	if ok {
		return ErrSubmoduleAlreadyInitialized
	}

	s.initialized = true

	cfg.Submodules[s.c.Name] = s.c
	return s.w.r.Storer.SetConfig(cfg)
}

// Status returns the status of the submodule.
func (s *Submodule) Status() (*SubmoduleStatus, error) {
	idx, err := s.w.r.Storer.Index()
	if err != nil {
		return nil, err
	}

	return s.status(idx)
}

func (s *Submodule) status(idx *index.Index) (*SubmoduleStatus, error) {
	status := &SubmoduleStatus{
		Path: s.c.Path,
	}

	e, err := idx.Entry(s.c.Path)
	if err != nil && err != index.ErrEntryNotFound {
		return nil, err
	}

	if e != nil {
		status.Expected = e.Hash
	}

	if !s.initialized {
		return status, nil
	}

	r, err := s.Repository()
	if err != nil {
		return nil, err
	}

	head, err := r.Head()
	if err == nil {
		status.Current = head.Hash()
	}

	if err != nil && err == plumbing.ErrReferenceNotFound {
		err = nil
	}

	return status, err
}

// Repository returns the Repository represented by this submodule
func (s *Submodule) Repository() (*Repository, error) {
	if !s.initialized {
		return nil, ErrSubmoduleNotInitialized
	}

	storer, err := s.w.r.Storer.Module(s.c.Name)
	if err != nil {
		return nil, err
	}

	_, err = storer.Reference(plumbing.HEAD)
	if err != nil && err != plumbing.ErrReferenceNotFound {
		return nil, err
	}

	var exists bool
	if err == nil {
		exists = true
	}

	var worktree billy.Filesystem
	if worktree, err = s.w.Filesystem.Chroot(s.c.Path); err != nil {
		return nil, err
	}

	if exists {
		return Open(storer, worktree)
	}

	r, err := Init(storer, worktree)
	if err != nil {
		return nil, err
	}

	moduleURL, err := url.Parse(s.c.URL)
	if err != nil {
		return nil, err
	}

	if !path.IsAbs(moduleURL.Path) {
		remotes, err := s.w.r.Remotes()
		if err != nil {
			return nil, err
		}

		rootURL, err := url.Parse(remotes[0].c.URLs[0])
		if err != nil {
			return nil, err
		}

		rootURL.Path = path.Join(rootURL.Path, moduleURL.Path)
		*moduleURL = *rootURL
	}

	_, err = r.CreateRemote(&config.RemoteConfig{
		Name: DefaultRemoteName,
		URLs: []string{moduleURL.String()},
	})

	return r, err
}

// Update the registered submodule to match what the superproject expects, the
// submodule should be initialized first calling the Init method or setting in
// the options SubmoduleUpdateOptions.Init equals true
func (s *Submodule) Update(o *SubmoduleUpdateOptions) error {
	return s.UpdateContext(context.Background(), o)
}

// UpdateContext the registered submodule to match what the superproject
// expects, the submodule should be initialized first calling the Init method or
// setting in the options SubmoduleUpdateOptions.Init equals true.
//
// The provided Context must be non-nil. If the context expires before the
// operation is complete, an error is returned. The context only affects the
// transport operations.
func (s *Submodule) UpdateContext(ctx context.Context, o *SubmoduleUpdateOptions) error {
	return s.update(ctx, o, plumbing.ZeroHash)
}

func (s *Submodule) update(ctx context.Context, o *SubmoduleUpdateOptions, forceHash plumbing.Hash) error {
	if !s.initialized && !o.Init {
		return ErrSubmoduleNotInitialized
	}

	if !s.initialized && o.Init {
		if err := s.Init(); err != nil {
			return err
		}
	}

	idx, err := s.w.r.Storer.Index()
	if err != nil {
		return err
	}

	hash := forceHash
	if hash.IsZero() {
		e, err := idx.Entry(s.c.Path)
		if err != nil {
			return err
		}

		hash = e.Hash
	}

	r, err := s.Repository()
	if err != nil {
		return err
	}

	if err := s.fetchAndCheckout(ctx, r, o, hash); err != nil {
		return err
	}

	return s.doRecursiveUpdate(r, o)
}

func (s *Submodule) doRecursiveUpdate(r *Repository, o *SubmoduleUpdateOptions) error {
	if o.RecurseSubmodules == NoRecurseSubmodules {
		return nil
	}

	w, err := r.Worktree()
	if err != nil {
		return err
	}

	l, err := w.Submodules()
	if err != nil {
		return err
	}

	new := &SubmoduleUpdateOptions{}
	*new = *o

	new.RecurseSubmodules--
	return l.Update(new)
}

func (s *Submodule) fetchAndCheckout(
	ctx context.Context, r *Repository, o *SubmoduleUpdateOptions, hash plumbing.Hash,
) error {
	if !o.NoFetch {
		err := r.FetchContext(ctx, &FetchOptions{Auth: o.Auth})
		if err != nil && err != NoErrAlreadyUpToDate {
			return err
		}
	}

	w, err := r.Worktree()
	if err != nil {
		return err
	}

	// Handle a case when submodule refers to an orphaned commit that's still reachable
	// through Git server using a special protocol capability[1].
	//
	// [1]: https://git-scm.com/docs/protocol-capabilities#_allow_reachable_sha1_in_want
	if !o.NoFetch {
		if _, err := w.r.Object(plumbing.AnyObject, hash); err != nil {
			refSpec := config.RefSpec("+" + hash.String() + ":" + hash.String())

			err := r.FetchContext(ctx, &FetchOptions{
				Auth:     o.Auth,
				RefSpecs: []config.RefSpec{refSpec},
			})
			if err != nil && err != NoErrAlreadyUpToDate && err != ErrExactSHA1NotSupported {
				return err
			}
		}
	}

	if err := w.Checkout(&CheckoutOptions{Hash: hash}); err != nil {
		return err
	}

	head := plumbing.NewHashReference(plumbing.HEAD, hash)
	return r.Storer.SetReference(head)
}

// Submodules list of several submodules from the same repository.
type Submodules []*Submodule

// Init initializes the submodules in this list.
func (s Submodules) Init() error {
	for _, sub := range s {
		if err := sub.Init(); err != nil {
			return err
		}
	}

	return nil
}

// Update updates all the submodules in this list.
func (s Submodules) Update(o *SubmoduleUpdateOptions) error {
	return s.UpdateContext(context.Background(), o)
}

// UpdateContext updates all the submodules in this list.
//
// The provided Context must be non-nil. If the context expires before the
// operation is complete, an error is returned. The context only affects the
// transport operations.
func (s Submodules) UpdateContext(ctx context.Context, o *SubmoduleUpdateOptions) error {
	for _, sub := range s {
		if err := sub.UpdateContext(ctx, o); err != nil {
			return err
		}
	}

	return nil
}

// Status returns the status of the submodules.
func (s Submodules) Status() (SubmodulesStatus, error) {
	var list SubmodulesStatus

	var r *Repository
	for _, sub := range s {
		if r == nil {
			r = sub.w.r
		}

		idx, err := r.Storer.Index()
		if err != nil {
			return nil, err
		}

		status, err := sub.status(idx)
		if err != nil {
			return nil, err
		}

		list = append(list, status)
	}

	return list, nil
}

// SubmodulesStatus contains the status for all submodiles in the worktree
type SubmodulesStatus []*SubmoduleStatus

// String is equivalent to `git submodule status`
func (s SubmodulesStatus) String() string {
	buf := bytes.NewBuffer(nil)
	for _, sub := range s {
		fmt.Fprintln(buf, sub)
	}

	return buf.String()
}

// SubmoduleStatus contains the status for a submodule in the worktree
type SubmoduleStatus struct {
	Path     string
	Current  plumbing.Hash
	Expected plumbing.Hash
	Branch   plumbing.ReferenceName
}

// IsClean is the HEAD of the submodule is equals to the expected commit
func (s *SubmoduleStatus) IsClean() bool {
	return s.Current == s.Expected
}

// String is equivalent to `git submodule status <submodule>`
//
// This will print the SHA-1 of the currently checked out commit for a
// submodule, along with the submodule path and the output of git describe fo
// the SHA-1. Each SHA-1 will be prefixed with - if the submodule is not
// initialized, + if the currently checked out submodule commit does not match
// the SHA-1 found in the index of the containing repository.
func (s *SubmoduleStatus) String() string {
	var extra string
	var status = ' '

	if s.Current.IsZero() {
		status = '-'
	} else if !s.IsClean() {
		status = '+'
	}

	if len(s.Branch) != 0 {
		extra = string(s.Branch[5:])
	} else if !s.Current.IsZero() {
		extra = s.Current.String()[:7]
	}

	if extra != "" {
		extra = fmt.Sprintf(" (%s)", extra)
	}

	return fmt.Sprintf("%c%s %s%s", status, s.Expected, s.Path, extra)
}
  070701000005AB000041ED000000000000000000000006645E367C00000000000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/utils  070701000005AC000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/utils/binary   070701000005AD000081A4000000000000000000000001645E367C0000111D000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/utils/binary/read.go   // Package binary implements sintax-sugar functions on top of the standard
// library binary package
package binary

import (
	"bufio"
	"encoding/binary"
	"io"

	"github.com/go-git/go-git/v5/plumbing"
)

// Read reads structured binary data from r into data. Bytes are read and
// decoded in BigEndian order
// https://golang.org/pkg/encoding/binary/#Read
func Read(r io.Reader, data ...interface{}) error {
	for _, v := range data {
		if err := binary.Read(r, binary.BigEndian, v); err != nil {
			return err
		}
	}

	return nil
}

// ReadUntil reads from r untin delim is found
func ReadUntil(r io.Reader, delim byte) ([]byte, error) {
	if bufr, ok := r.(*bufio.Reader); ok {
		return ReadUntilFromBufioReader(bufr, delim)
	}

	var buf [1]byte
	value := make([]byte, 0, 16)
	for {
		if _, err := io.ReadFull(r, buf[:]); err != nil {
			if err == io.EOF {
				return nil, err
			}

			return nil, err
		}

		if buf[0] == delim {
			return value, nil
		}

		value = append(value, buf[0])
	}
}

// ReadUntilFromBufioReader is like bufio.ReadBytes but drops the delimiter
// from the result.
func ReadUntilFromBufioReader(r *bufio.Reader, delim byte) ([]byte, error) {
	value, err := r.ReadBytes(delim)
	if err != nil || len(value) == 0 {
		return nil, err
	}

	return value[:len(value)-1], nil
}

// ReadVariableWidthInt reads and returns an int in Git VLQ special format:
//
// Ordinary VLQ has some redundancies, example:  the number 358 can be
// encoded as the 2-octet VLQ 0x8166 or the 3-octet VLQ 0x808166 or the
// 4-octet VLQ 0x80808166 and so forth.
//
// To avoid these redundancies, the VLQ format used in Git removes this
// prepending redundancy and extends the representable range of shorter
// VLQs by adding an offset to VLQs of 2 or more octets in such a way
// that the lowest possible value for such an (N+1)-octet VLQ becomes
// exactly one more than the maximum possible value for an N-octet VLQ.
// In particular, since a 1-octet VLQ can store a maximum value of 127,
// the minimum 2-octet VLQ (0x8000) is assigned the value 128 instead of
// 0. Conversely, the maximum value of such a 2-octet VLQ (0xff7f) is
// 16511 instead of just 16383. Similarly, the minimum 3-octet VLQ
// (0x808000) has a value of 16512 instead of zero, which means
// that the maximum 3-octet VLQ (0xffff7f) is 2113663 instead of
// just 2097151.  And so forth.
//
// This is how the offset is saved in C:
//
//     dheader[pos] = ofs & 127;
//     while (ofs >>= 7)
//         dheader[--pos] = 128 | (--ofs & 127);
//
func ReadVariableWidthInt(r io.Reader) (int64, error) {
	var c byte
	if err := Read(r, &c); err != nil {
		return 0, err
	}

	var v = int64(c & maskLength)
	for c&maskContinue > 0 {
		v++
		if err := Read(r, &c); err != nil {
			return 0, err
		}

		v = (v << lengthBits) + int64(c&maskLength)
	}

	return v, nil
}

const (
	maskContinue = uint8(128) // 1000 000
	maskLength   = uint8(127) // 0111 1111
	lengthBits   = uint8(7)   // subsequent bytes has 7 bits to store the length
)

// ReadUint64 reads 8 bytes and returns them as a BigEndian uint32
func ReadUint64(r io.Reader) (uint64, error) {
	var v uint64
	if err := binary.Read(r, binary.BigEndian, &v); err != nil {
		return 0, err
	}

	return v, nil
}

// ReadUint32 reads 4 bytes and returns them as a BigEndian uint32
func ReadUint32(r io.Reader) (uint32, error) {
	var v uint32
	if err := binary.Read(r, binary.BigEndian, &v); err != nil {
		return 0, err
	}

	return v, nil
}

// ReadUint16 reads 2 bytes and returns them as a BigEndian uint16
func ReadUint16(r io.Reader) (uint16, error) {
	var v uint16
	if err := binary.Read(r, binary.BigEndian, &v); err != nil {
		return 0, err
	}

	return v, nil
}

// ReadHash reads a plumbing.Hash from r
func ReadHash(r io.Reader) (plumbing.Hash, error) {
	var h plumbing.Hash
	if err := binary.Read(r, binary.BigEndian, h[:]); err != nil {
		return plumbing.ZeroHash, err
	}

	return h, nil
}

const sniffLen = 8000

// IsBinary detects if data is a binary value based on:
// http://git.kernel.org/cgit/git/git.git/tree/xdiff-interface.c?id=HEAD#n198
func IsBinary(r io.Reader) (bool, error) {
	reader := bufio.NewReader(r)
	c := 0
	for {
		if c == sniffLen {
			break
		}

		b, err := reader.ReadByte()
		if err == io.EOF {
			break
		}
		if err != nil {
			return false, err
		}

		if b == byte(0) {
			return true, nil
		}

		c++
	}

	return false, nil
}
   070701000005AE000081A4000000000000000000000001645E367C00000491000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/utils/binary/write.go  package binary

import (
	"encoding/binary"
	"io"
)

// Write writes the binary representation of data into w, using BigEndian order
// https://golang.org/pkg/encoding/binary/#Write
func Write(w io.Writer, data ...interface{}) error {
	for _, v := range data {
		if err := binary.Write(w, binary.BigEndian, v); err != nil {
			return err
		}
	}

	return nil
}

func WriteVariableWidthInt(w io.Writer, n int64) error {
	buf := []byte{byte(n & 0x7f)}
	n >>= 7
	for n != 0 {
		n--
		buf = append([]byte{0x80 | (byte(n & 0x7f))}, buf...)
		n >>= 7
	}

	_, err := w.Write(buf)

	return err
}

// WriteUint64 writes the binary representation of a uint64 into w, in BigEndian
// order
func WriteUint64(w io.Writer, value uint64) error {
	return binary.Write(w, binary.BigEndian, value)
}

// WriteUint32 writes the binary representation of a uint32 into w, in BigEndian
// order
func WriteUint32(w io.Writer, value uint32) error {
	return binary.Write(w, binary.BigEndian, value)
}

// WriteUint16 writes the binary representation of a uint16 into w, in BigEndian
// order
func WriteUint16(w io.Writer, value uint16) error {
	return binary.Write(w, binary.BigEndian, value)
}
   070701000005AF000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/utils/diff 070701000005B0000081A4000000000000000000000001645E367C0000083C000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/utils/diff/diff.go // Package diff implements line oriented diffs, similar to the ancient
// Unix diff command.
//
// The current implementation is just a wrapper around Sergi's
// go-diff/diffmatchpatch library, which is a go port of Neil
// Fraser's google-diff-match-patch code
package diff

import (
	"bytes"
	"time"

	"github.com/sergi/go-diff/diffmatchpatch"
)

// Do computes the (line oriented) modifications needed to turn the src
// string into the dst string. The underlying algorithm is Meyers,
// its complexity is O(N*d) where N is min(lines(src), lines(dst)) and d
// is the size of the diff.
func Do(src, dst string) (diffs []diffmatchpatch.Diff) {
	// the default timeout is time.Second which may be too small under heavy load
	return DoWithTimeout(src, dst, time.Hour)
}

// DoWithTimeout computes the (line oriented) modifications needed to turn the src
// string into the dst string. The `timeout` argument specifies the maximum
// amount of time it is allowed to spend in this function. If the timeout
// is exceeded, the parts of the strings which were not considered are turned into
// a bulk delete+insert and the half-baked suboptimal result is returned at once.
// The underlying algorithm is Meyers, its complexity is O(N*d) where N is
// min(lines(src), lines(dst)) and d is the size of the diff.
func DoWithTimeout(src, dst string, timeout time.Duration) (diffs []diffmatchpatch.Diff) {
	dmp := diffmatchpatch.New()
	dmp.DiffTimeout = timeout
	wSrc, wDst, warray := dmp.DiffLinesToRunes(src, dst)
	diffs = dmp.DiffMainRunes(wSrc, wDst, false)
	diffs = dmp.DiffCharsToLines(diffs, warray)
	return diffs
}

// Dst computes and returns the destination text.
func Dst(diffs []diffmatchpatch.Diff) string {
	var text bytes.Buffer
	for _, d := range diffs {
		if d.Type != diffmatchpatch.DiffDelete {
			text.WriteString(d.Text)
		}
	}
	return text.String()
}

// Src computes and returns the source text
func Src(diffs []diffmatchpatch.Diff) string {
	var text bytes.Buffer
	for _, d := range diffs {
		if d.Type != diffmatchpatch.DiffInsert {
			text.WriteString(d.Text)
		}
	}
	return text.String()
}
070701000005B1000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/utils/ioutil   070701000005B2000081A4000000000000000000000001645E367C000012A4000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/utils/ioutil/common.go // Package ioutil implements some I/O utility functions.
package ioutil

import (
	"bufio"
	"context"
	"errors"
	"io"

	ctxio "github.com/jbenet/go-context/io"
)

type readPeeker interface {
	io.Reader
	Peek(int) ([]byte, error)
}

var (
	ErrEmptyReader = errors.New("reader is empty")
)

// NonEmptyReader takes a reader and returns it if it is not empty, or
// `ErrEmptyReader` if it is empty. If there is an error when reading the first
// byte of the given reader, it will be propagated.
func NonEmptyReader(r io.Reader) (io.Reader, error) {
	pr, ok := r.(readPeeker)
	if !ok {
		pr = bufio.NewReader(r)
	}

	_, err := pr.Peek(1)
	if err == io.EOF {
		return nil, ErrEmptyReader
	}

	if err != nil {
		return nil, err
	}

	return pr, nil
}

type readCloser struct {
	io.Reader
	closer io.Closer
}

func (r *readCloser) Close() error {
	return r.closer.Close()
}

// NewReadCloser creates an `io.ReadCloser` with the given `io.Reader` and
// `io.Closer`.
func NewReadCloser(r io.Reader, c io.Closer) io.ReadCloser {
	return &readCloser{Reader: r, closer: c}
}

type writeCloser struct {
	io.Writer
	closer io.Closer
}

func (r *writeCloser) Close() error {
	return r.closer.Close()
}

// NewWriteCloser creates an `io.WriteCloser` with the given `io.Writer` and
// `io.Closer`.
func NewWriteCloser(w io.Writer, c io.Closer) io.WriteCloser {
	return &writeCloser{Writer: w, closer: c}
}

type writeNopCloser struct {
	io.Writer
}

func (writeNopCloser) Close() error { return nil }

// WriteNopCloser returns a WriteCloser with a no-op Close method wrapping
// the provided Writer w.
func WriteNopCloser(w io.Writer) io.WriteCloser {
	return writeNopCloser{w}
}

// CheckClose calls Close on the given io.Closer. If the given *error points to
// nil, it will be assigned the error returned by Close. Otherwise, any error
// returned by Close will be ignored. CheckClose is usually called with defer.
func CheckClose(c io.Closer, err *error) {
	if cerr := c.Close(); cerr != nil && *err == nil {
		*err = cerr
	}
}

// NewContextWriter wraps a writer to make it respect given Context.
// If there is a blocking write, the returned Writer will return whenever the
// context is cancelled (the return values are n=0 and err=ctx.Err()).
func NewContextWriter(ctx context.Context, w io.Writer) io.Writer {
	return ctxio.NewWriter(ctx, w)
}

// NewContextReader wraps a reader to make it respect given Context.
// If there is a blocking read, the returned Reader will return whenever the
// context is cancelled (the return values are n=0 and err=ctx.Err()).
func NewContextReader(ctx context.Context, r io.Reader) io.Reader {
	return ctxio.NewReader(ctx, r)
}

// NewContextWriteCloser as NewContextWriter but with io.Closer interface.
func NewContextWriteCloser(ctx context.Context, w io.WriteCloser) io.WriteCloser {
	ctxw := ctxio.NewWriter(ctx, w)
	return NewWriteCloser(ctxw, w)
}

// NewContextReadCloser as NewContextReader but with io.Closer interface.
func NewContextReadCloser(ctx context.Context, r io.ReadCloser) io.ReadCloser {
	ctxr := ctxio.NewReader(ctx, r)
	return NewReadCloser(ctxr, r)
}

type readerOnError struct {
	io.Reader
	notify func(error)
}

// NewReaderOnError returns a io.Reader that call the notify function when an
// unexpected (!io.EOF) error happens, after call Read function.
func NewReaderOnError(r io.Reader, notify func(error)) io.Reader {
	return &readerOnError{r, notify}
}

// NewReadCloserOnError returns a io.ReadCloser that call the notify function
// when an unexpected (!io.EOF) error happens, after call Read function.
func NewReadCloserOnError(r io.ReadCloser, notify func(error)) io.ReadCloser {
	return NewReadCloser(NewReaderOnError(r, notify), r)
}

func (r *readerOnError) Read(buf []byte) (n int, err error) {
	n, err = r.Reader.Read(buf)
	if err != nil && err != io.EOF {
		r.notify(err)
	}

	return
}

type writerOnError struct {
	io.Writer
	notify func(error)
}

// NewWriterOnError returns a io.Writer that call the notify function when an
// unexpected (!io.EOF) error happens, after call Write function.
func NewWriterOnError(w io.Writer, notify func(error)) io.Writer {
	return &writerOnError{w, notify}
}

// NewWriteCloserOnError returns a io.WriteCloser that call the notify function
//when an unexpected (!io.EOF) error happens, after call Write function.
func NewWriteCloserOnError(w io.WriteCloser, notify func(error)) io.WriteCloser {
	return NewWriteCloser(NewWriterOnError(w, notify), w)
}

func (r *writerOnError) Write(p []byte) (n int, err error) {
	n, err = r.Writer.Write(p)
	if err != nil && err != io.EOF {
		r.notify(err)
	}

	return
}

type PipeReader interface {
	io.ReadCloser
	CloseWithError(err error) error
}

type PipeWriter interface {
	io.WriteCloser
	CloseWithError(err error) error
}
070701000005B3000081A4000000000000000000000001645E367C00000067000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/utils/ioutil/pipe.go   // +build !js

package ioutil

import "io"

func Pipe() (PipeReader, PipeWriter) {
	return io.Pipe()
}
 070701000005B4000081A4000000000000000000000001645E367C00000085000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/utils/ioutil/pipe_js.go    // +build js

package ioutil

import "github.com/acomagu/bufpipe"

func Pipe() (PipeReader, PipeWriter) {
	return bufpipe.New(nil)
}
   070701000005B5000041ED000000000000000000000006645E367C00000000000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/utils/merkletrie   070701000005B6000081A4000000000000000000000001645E367C00000D19000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/utils/merkletrie/change.go package merkletrie

import (
	"fmt"
	"io"

	"github.com/go-git/go-git/v5/utils/merkletrie/noder"
)

// Action values represent the kind of things a Change can represent:
// insertion, deletions or modifications of files.
type Action int

// The set of possible actions in a change.
const (
	_ Action = iota
	Insert
	Delete
	Modify
)

// String returns the action as a human readable text.
func (a Action) String() string {
	switch a {
	case Insert:
		return "Insert"
	case Delete:
		return "Delete"
	case Modify:
		return "Modify"
	default:
		panic(fmt.Sprintf("unsupported action: %d", a))
	}
}

// A Change value represent how a noder has change between to merkletries.
type Change struct {
	// The noder before the change or nil if it was inserted.
	From noder.Path
	// The noder after the change or nil if it was deleted.
	To noder.Path
}

// Action is convenience method that returns what Action c represents.
func (c *Change) Action() (Action, error) {
	if c.From == nil && c.To == nil {
		return Action(0), fmt.Errorf("malformed change: nil from and to")
	}
	if c.From == nil {
		return Insert, nil
	}
	if c.To == nil {
		return Delete, nil
	}

	return Modify, nil
}

// NewInsert returns a new Change representing the insertion of n.
func NewInsert(n noder.Path) Change { return Change{To: n} }

// NewDelete returns a new Change representing the deletion of n.
func NewDelete(n noder.Path) Change { return Change{From: n} }

// NewModify returns a new Change representing that a has been modified and
// it is now b.
func NewModify(a, b noder.Path) Change {
	return Change{
		From: a,
		To:   b,
	}
}

// String returns a single change in human readable form, using the
// format: '<' + action + space + path + '>'.  The contents of the file
// before or after the change are not included in this format.
//
// Example: inserting a file at the path a/b/c.txt will return "<Insert
// a/b/c.txt>".
func (c Change) String() string {
	action, err := c.Action()
	if err != nil {
		panic(err)
	}

	var path string
	if action == Delete {
		path = c.From.String()
	} else {
		path = c.To.String()
	}

	return fmt.Sprintf("<%s %s>", action, path)
}

// Changes is a list of changes between to merkletries.
type Changes []Change

// NewChanges returns an empty list of changes.
func NewChanges() Changes {
	return Changes{}
}

// Add adds the change c to the list of changes.
func (l *Changes) Add(c Change) {
	*l = append(*l, c)
}

// AddRecursiveInsert adds the required changes to insert all the
// file-like noders found in root, recursively.
func (l *Changes) AddRecursiveInsert(root noder.Path) error {
	return l.addRecursive(root, NewInsert)
}

// AddRecursiveDelete adds the required changes to delete all the
// file-like noders found in root, recursively.
func (l *Changes) AddRecursiveDelete(root noder.Path) error {
	return l.addRecursive(root, NewDelete)
}

type noderToChangeFn func(noder.Path) Change // NewInsert or NewDelete

func (l *Changes) addRecursive(root noder.Path, ctor noderToChangeFn) error {
	if !root.IsDir() {
		l.Add(ctor(root))
		return nil
	}

	i, err := NewIterFromPath(root)
	if err != nil {
		return err
	}

	var current noder.Path
	for {
		if current, err = i.Step(); err != nil {
			if err == io.EOF {
				break
			}
			return err
		}
		if current.IsDir() {
			continue
		}
		l.Add(ctor(current))
	}

	return nil
}
   070701000005B7000081A4000000000000000000000001645E367C000038D2000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/utils/merkletrie/difftree.go   package merkletrie

// The focus of this difftree implementation is to save time by
// skipping whole directories if their hash is the same in both
// trees.
//
// The diff algorithm implemented here is based on the doubleiter
// type defined in this same package; we will iterate over both
// trees at the same time, while comparing the current noders in
// each iterator.  Depending on how they differ we will output the
// corresponding changes and move the iterators further over both
// trees.
//
// The table bellow show all the possible comparison results, along
// with what changes should we produce and how to advance the
// iterators.
//
// The table is implemented by the switches in this function,
// diffTwoNodes, diffTwoNodesSameName and diffTwoDirs.
//
// Many Bothans died to bring us this information, make sure you
// understand the table before modifying this code.

// # Cases
//
// When comparing noders in both trees you will find yourself in
// one of 169 possible cases, but if we ignore moves, we can
// simplify a lot the search space into the following table:
//
// - "-": nothing, no file or directory
// - a<>: an empty file named "a".
// - a<1>: a file named "a", with "1" as its contents.
// - a<2>: a file named "a", with "2" as its contents.
// - a(): an empty dir named "a".
// - a(...): a dir named "a", with some files and/or dirs inside (possibly
//   empty).
// - a(;;;): a dir named "a", with some other files and/or dirs inside
//   (possibly empty), which different from the ones in "a(...)".
//
//     \ to     -   a<>  a<1>  a<2>  a()  a(...)  a(;;;)
// from \
// -           00    01    02    03   04     05      06
// a<>         10    11    12    13   14     15      16
// a<1>        20    21    22    23   24     25      26
// a<2>        30    31    32    33   34     35      36
// a()         40    41    42    43   44     45      46
// a(...)      50    51    52    53   54     55      56
// a(;;;)      60    61    62    63   64     65      66
//
// Every (from, to) combination in the table is a special case, but
// some of them can be merged into some more general cases, for
// instance 11 and 22 can be merged into the general case: both
// noders are equal.
//
// Here is a full list of all the cases that are similar and how to
// merge them together into more general cases.  Each general case
// is labeled with an uppercase letter for further reference, and it
// is followed by the pseudocode of the checks you have to perfrom
// on both noders to see if you are in such a case, the actions to
// perform (i.e. what changes to output) and how to advance the
// iterators of each tree to continue the comparison process.
//
// ## A. Impossible: 00
//
// ## B. Same thing on both sides: 11, 22, 33, 44, 55, 66
//   - check: `SameName() && SameHash()`
//   - action: do nothing.
//   - advance: `FromNext(); ToNext()`
//
// ### C. To was created: 01, 02, 03, 04, 05, 06
//   - check: `DifferentName() && ToBeforeFrom()`
//   - action: insertRecursively(to)
//   - advance: `ToNext()`
//
// ### D. From was deleted: 10, 20, 30, 40, 50, 60
//   - check: `DifferentName() && FromBeforeTo()`
//   - action: `DeleteRecursively(from)`
//   - advance: `FromNext()`
//
// ### E. Empty file to file with contents: 12, 13
//   - check: `SameName() && DifferentHash() && FromIsFile() &&
//             ToIsFile() && FromIsEmpty()`
//   - action: `modifyFile(from, to)`
//   - advance: `FromNext()` or `FromStep()`
//
// ### E'. file with contents to empty file: 21, 31
//   - check: `SameName() && DifferentHash() && FromIsFile() &&
//             ToIsFile() && ToIsEmpty()`
//   - action: `modifyFile(from, to)`
//   - advance: `FromNext()` or `FromStep()`
//
// ### F. empty file to empty dir with the same name: 14
//   - check: `SameName() && FromIsFile() && FromIsEmpty() &&
//             ToIsDir() && ToIsEmpty()`
//   - action: `DeleteFile(from); InsertEmptyDir(to)`
//   - advance: `FromNext(); ToNext()`
//
// ### F'. empty dir to empty file of the same name: 41
//   - check: `SameName() && FromIsDir() && FromIsEmpty &&
//             ToIsFile() && ToIsEmpty()`
//   - action: `DeleteEmptyDir(from); InsertFile(to)`
//   - advance: `FromNext(); ToNext()` or step for any of them.
//
// ### G. empty file to non-empty dir of the same name: 15, 16
//   - check: `SameName() && FromIsFile() && ToIsDir() &&
//             FromIsEmpty() && ToIsNotEmpty()`
//   - action: `DeleteFile(from); InsertDirRecursively(to)`
//   - advance: `FromNext(); ToNext()`
//
// ### G'. non-empty dir to empty file of the same name: 51, 61
//   - check: `SameName() && FromIsDir() && FromIsNotEmpty() &&
//             ToIsFile() && FromIsEmpty()`
//   - action: `DeleteDirRecursively(from); InsertFile(to)`
//   - advance: `FromNext(); ToNext()`
//
// ### H. modify file contents: 23, 32
//   - check: `SameName() && FromIsFile() && ToIsFile() &&
//             FromIsNotEmpty() && ToIsNotEmpty()`
//   - action: `ModifyFile(from, to)`
//   - advance: `FromNext(); ToNext()`
//
// ### I. file with contents to empty dir: 24, 34
//   - check: `SameName() && DifferentHash() && FromIsFile() &&
//             FromIsNotEmpty() && ToIsDir() && ToIsEmpty()`
//   - action: `DeleteFile(from); InsertEmptyDir(to)`
//   - advance: `FromNext(); ToNext()`
//
// ### I'. empty dir to file with contents: 42, 43
//   - check: `SameName() && DifferentHash() && FromIsDir() &&
//             FromIsEmpty() && ToIsFile() && ToIsEmpty()`
//   - action: `DeleteDir(from); InsertFile(to)`
//   - advance: `FromNext(); ToNext()`
//
// ### J. file with contents to dir with contents: 25, 26, 35, 36
//   - check: `SameName() && DifferentHash() && FromIsFile() &&
//             FromIsNotEmpty() && ToIsDir() && ToIsNotEmpty()`
//   - action: `DeleteFile(from); InsertDirRecursively(to)`
//   - advance: `FromNext(); ToNext()`
//
// ### J'. dir with contents to file with contents: 52, 62, 53, 63
//   - check: `SameName() && DifferentHash() && FromIsDir() &&
//             FromIsNotEmpty() && ToIsFile() && ToIsNotEmpty()`
//   - action: `DeleteDirRecursively(from); InsertFile(to)`
//   - advance: `FromNext(); ToNext()`
//
// ### K. empty dir to dir with contents: 45, 46
//   - check: `SameName() && DifferentHash() && FromIsDir() &&
//             FromIsEmpty() && ToIsDir() && ToIsNotEmpty()`
//   - action: `InsertChildrenRecursively(to)`
//   - advance: `FromNext(); ToNext()`
//
// ### K'. dir with contents to empty dir: 54, 64
//   - check: `SameName() && DifferentHash() && FromIsDir() &&
//             FromIsEmpty() && ToIsDir() && ToIsNotEmpty()`
//   - action: `DeleteChildrenRecursively(from)`
//   - advance: `FromNext(); ToNext()`
//
// ### L. dir with contents to dir with different contents: 56, 65
//   - check: `SameName() && DifferentHash() && FromIsDir() &&
//             FromIsNotEmpty() && ToIsDir() && ToIsNotEmpty()`
//   - action: nothing
//   - advance: `FromStep(); ToStep()`
//
//

// All these cases can be further simplified by a truth table
// reduction process, in which we gather similar checks together to
// make the final code easier to read and understand.
//
// The first 6 columns are the outputs of the checks to perform on
// both noders.  I have labeled them 1 to 6, this is what they mean:
//
// 1: SameName()
// 2: SameHash()
// 3: FromIsDir()
// 4: ToIsDir()
// 5: FromIsEmpty()
// 6: ToIsEmpty()
//
// The from and to columns are a fsnoder example of the elements
// that you will find on each tree under the specified comparison
// results (columns 1 to 6).
//
// The type column identifies the case we are into, from the list above.
//
// The type' column identifies the new set of reduced cases, using
// lowercase letters, and they are explained after the table.
//
// The last column is the set of actions and advances for each case.
//
// "---" means impossible except in case of hash collision.
//
// advance meaning:
// - NN: from.Next(); to.Next()
// - SS: from.Step(); to.Step()
//
// 1 2 3 4 5 6 | from   |  to    |type|type'|action ; advance
// ------------+--------+--------+----+------------------------------------
// 0 0 0 0 0 0 |        |        |    |     | if !SameName() {
//     .       |        |        |    |     |    if FromBeforeTo() {
//     .       |        |        | D  |  d  |       delete(from); from.Next()
//     .       |        |        |    |     |    } else {
//     .       |        |        | C  |  c  |       insert(to); to.Next()
//     .       |        |        |    |     |    }
// 0 1 1 1 1 1 |        |        |    |     | }
// 1 0 0 0 0 0 |  a<1>  |  a<2>  | H  |  e  | modify(from, to); NN
// 1 0 0 0 0 1 |  a<1>  |   a<>  | E' |  e  | modify(from, to); NN
// 1 0 0 0 1 0 |   a<>  |  a<1>  | E  |  e  | modify(from, to); NN
// 1 0 0 0 1 1 |  ----  |  ----  |    |  e  |
// 1 0 0 1 0 0 |  a<1>  | a(...) | J  |  f  | delete(from); insert(to); NN
// 1 0 0 1 0 1 |  a<1>  |    a() | I  |  f  | delete(from); insert(to); NN
// 1 0 0 1 1 0 |   a<>  | a(...) | G  |  f  | delete(from); insert(to); NN
// 1 0 0 1 1 1 |   a<>  |    a() | F  |  f  | delete(from); insert(to); NN
// 1 0 1 0 0 0 | a(...) |  a<1>  | J' |  f  | delete(from); insert(to); NN
// 1 0 1 0 0 1 | a(...) |   a<>  | G' |  f  | delete(from); insert(to); NN
// 1 0 1 0 1 0 |    a() |  a<1>  | I' |  f  | delete(from); insert(to); NN
// 1 0 1 0 1 1 |    a() |   a<>  | F' |  f  | delete(from); insert(to); NN
// 1 0 1 1 0 0 | a(...) | a(;;;) | L  |  g  | nothing; SS
// 1 0 1 1 0 1 | a(...) |    a() | K' |  h  | deleteChildren(from); NN
// 1 0 1 1 1 0 |    a() | a(...) | K  |  i  | insertChildren(to); NN
// 1 0 1 1 1 1 |  ----  |  ----  |    |     |
// 1 1 0 0 0 0 |  a<1>  |  a<1>  | B  |  b  | nothing; NN
// 1 1 0 0 0 1 |  ----  |  ----  |    |  b  |
// 1 1 0 0 1 0 |  ----  |  ----  |    |  b  |
// 1 1 0 0 1 1 |   a<>  |   a<>  | B  |  b  | nothing; NN
// 1 1 0 1 0 0 |  ----  |  ----  |    |  b  |
// 1 1 0 1 0 1 |  ----  |  ----  |    |  b  |
// 1 1 0 1 1 0 |  ----  |  ----  |    |  b  |
// 1 1 0 1 1 1 |  ----  |  ----  |    |  b  |
// 1 1 1 0 0 0 |  ----  |  ----  |    |  b  |
// 1 1 1 0 0 1 |  ----  |  ----  |    |  b  |
// 1 1 1 0 1 0 |  ----  |  ----  |    |  b  |
// 1 1 1 0 1 1 |  ----  |  ----  |    |  b  |
// 1 1 1 1 0 0 | a(...) | a(...) | B  |  b  | nothing; NN
// 1 1 1 1 0 1 |  ----  |  ----  |    |  b  |
// 1 1 1 1 1 0 |  ----  |  ----  |    |  b  |
// 1 1 1 1 1 1 |   a()  |   a()  | B  |  b  | nothing; NN
//
// c and d:
//     if !SameName()
//         d if FromBeforeTo()
//         c else
// b: SameName) && sameHash()
// e: SameName() && !sameHash() && BothAreFiles()
// f: SameName() && !sameHash() && FileAndDir()
// g: SameName() && !sameHash() && BothAreDirs() && NoneIsEmpty
// i: SameName() && !sameHash() && BothAreDirs() && FromIsEmpty
// h: else of i

import (
	"context"
	"errors"
	"fmt"

	"github.com/go-git/go-git/v5/utils/merkletrie/noder"
)

var (
	// ErrCanceled is returned whenever the operation is canceled.
	ErrCanceled = errors.New("operation canceled")
)

// DiffTree calculates the list of changes between two merkletries.  It
// uses the provided hashEqual callback to compare noders.
func DiffTree(
	fromTree,
	toTree noder.Noder,
	hashEqual noder.Equal,
) (Changes, error) {
	return DiffTreeContext(context.Background(), fromTree, toTree, hashEqual)
}

// DiffTreeContext calculates the list of changes between two merkletries. It
// uses the provided hashEqual callback to compare noders.
// Error will be returned if context expires
// Provided context must be non nil
func DiffTreeContext(ctx context.Context, fromTree, toTree noder.Noder,
	hashEqual noder.Equal) (Changes, error) {
	ret := NewChanges()

	ii, err := newDoubleIter(fromTree, toTree, hashEqual)
	if err != nil {
		return nil, err
	}

	for {
		select {
		case <-ctx.Done():
			return nil, ErrCanceled
		default:
		}

		from := ii.from.current
		to := ii.to.current

		switch r := ii.remaining(); r {
		case noMoreNoders:
			return ret, nil
		case onlyFromRemains:
			if err = ret.AddRecursiveDelete(from); err != nil {
				return nil, err
			}
			if err = ii.nextFrom(); err != nil {
				return nil, err
			}
		case onlyToRemains:
			if err = ret.AddRecursiveInsert(to); err != nil {
				return nil, err
			}
			if err = ii.nextTo(); err != nil {
				return nil, err
			}
		case bothHaveNodes:
			if err = diffNodes(&ret, ii); err != nil {
				return nil, err
			}
		default:
			panic(fmt.Sprintf("unknown remaining value: %d", r))
		}
	}
}

func diffNodes(changes *Changes, ii *doubleIter) error {
	from := ii.from.current
	to := ii.to.current
	var err error

	// compare their full paths as strings
	switch from.Compare(to) {
	case -1:
		if err = changes.AddRecursiveDelete(from); err != nil {
			return err
		}
		if err = ii.nextFrom(); err != nil {
			return err
		}
	case 1:
		if err = changes.AddRecursiveInsert(to); err != nil {
			return err
		}
		if err = ii.nextTo(); err != nil {
			return err
		}
	default:
		if err := diffNodesSameName(changes, ii); err != nil {
			return err
		}
	}

	return nil
}

func diffNodesSameName(changes *Changes, ii *doubleIter) error {
	from := ii.from.current
	to := ii.to.current

	status, err := ii.compare()
	if err != nil {
		return err
	}

	switch {
	case status.sameHash:
		// do nothing
		if err = ii.nextBoth(); err != nil {
			return err
		}
	case status.bothAreFiles:
		changes.Add(NewModify(from, to))
		if err = ii.nextBoth(); err != nil {
			return err
		}
	case status.fileAndDir:
		if err = changes.AddRecursiveDelete(from); err != nil {
			return err
		}
		if err = changes.AddRecursiveInsert(to); err != nil {
			return err
		}
		if err = ii.nextBoth(); err != nil {
			return err
		}
	case status.bothAreDirs:
		if err = diffDirs(changes, ii); err != nil {
			return err
		}
	default:
		return fmt.Errorf("bad status from double iterator")
	}

	return nil
}

func diffDirs(changes *Changes, ii *doubleIter) error {
	from := ii.from.current
	to := ii.to.current

	status, err := ii.compare()
	if err != nil {
		return err
	}

	switch {
	case status.fromIsEmptyDir:
		if err = changes.AddRecursiveInsert(to); err != nil {
			return err
		}
		if err = ii.nextBoth(); err != nil {
			return err
		}
	case status.toIsEmptyDir:
		if err = changes.AddRecursiveDelete(from); err != nil {
			return err
		}
		if err = ii.nextBoth(); err != nil {
			return err
		}
	case !status.fromIsEmptyDir && !status.toIsEmptyDir:
		// do nothing
		if err = ii.stepBoth(); err != nil {
			return err
		}
	default:
		return fmt.Errorf("both dirs are empty but has different hash")
	}

	return nil
}
  070701000005B8000081A4000000000000000000000001645E367C00000586000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/utils/merkletrie/doc.go    /*
Package merkletrie provides support for n-ary trees that are at the same
time Merkle trees and Radix trees (tries).

Git trees are Radix n-ary trees in virtue of the names of their
tree entries.  At the same time, git trees are Merkle trees thanks to
their hashes.

This package defines Merkle tries as nodes that should have:

- a hash: the Merkle part of the Merkle trie

- a key: the Radix part of the Merkle trie

The Merkle hash condition is not enforced by this package though.  This
means that the hash of a node doesn't have to take into account the hashes of
their children,  which is good for testing purposes.

Nodes in the Merkle trie are abstracted by the Noder interface.  The
intended use is that git trees implements this interface, either
directly or using a simple wrapper.

This package provides an iterator for merkletries that can skip whole
directory-like noders and an efficient merkletrie comparison algorithm.

When comparing git trees, the simple approach of alphabetically sorting
their elements and comparing the resulting lists is too slow as it
depends linearly on the number of files in the trees: When a directory
has lots of files but none of them has been modified, this approach is
very expensive.  We can do better by prunning whole directories that
have not change, just by looking at their hashes.  This package provides
the tools to do exactly that.
*/
package merkletrie
  070701000005B9000081A4000000000000000000000001645E367C00001367000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/utils/merkletrie/doubleiter.go package merkletrie

import (
	"fmt"
	"io"

	"github.com/go-git/go-git/v5/utils/merkletrie/noder"
)

// A doubleIter is a convenience type to keep track of the current
// noders in two merkletries that are going to be iterated in parallel.
// It has methods for:
//
// - iterating over the merkletries, both at the same time or
// individually: nextFrom, nextTo, nextBoth, stepBoth
//
// - checking if there are noders left in one or both of them with the
// remaining method and its associated returned type.
//
// - comparing the current noders of both merkletries in several ways,
// with the compare method and its associated returned type.
type doubleIter struct {
	from struct {
		iter    *Iter
		current noder.Path // nil if no more nodes
	}
	to struct {
		iter    *Iter
		current noder.Path // nil if no more nodes
	}
	hashEqual noder.Equal
}

// NewdoubleIter returns a new doubleIter for the merkletries "from" and
// "to".  The hashEqual callback function will be used by the doubleIter
// to compare the hash of the noders in the merkletries.  The doubleIter
// will be initialized to the first elements in each merkletrie if any.
func newDoubleIter(from, to noder.Noder, hashEqual noder.Equal) (
	*doubleIter, error) {
	var ii doubleIter
	var err error

	if ii.from.iter, err = NewIter(from); err != nil {
		return nil, fmt.Errorf("from: %s", err)
	}
	if ii.from.current, err = ii.from.iter.Next(); turnEOFIntoNil(err) != nil {
		return nil, fmt.Errorf("from: %s", err)
	}

	if ii.to.iter, err = NewIter(to); err != nil {
		return nil, fmt.Errorf("to: %s", err)
	}
	if ii.to.current, err = ii.to.iter.Next(); turnEOFIntoNil(err) != nil {
		return nil, fmt.Errorf("to: %s", err)
	}

	ii.hashEqual = hashEqual

	return &ii, nil
}

func turnEOFIntoNil(e error) error {
	if e != nil && e != io.EOF {
		return e
	}
	return nil
}

// NextBoth makes d advance to the next noder in both merkletries.  If
// any of them is a directory, it skips its contents.
func (d *doubleIter) nextBoth() error {
	if err := d.nextFrom(); err != nil {
		return err
	}
	if err := d.nextTo(); err != nil {
		return err
	}

	return nil
}

// NextFrom makes d advance to the next noder in the "from" merkletrie,
// skipping its contents if it is a directory.
func (d *doubleIter) nextFrom() (err error) {
	d.from.current, err = d.from.iter.Next()
	return turnEOFIntoNil(err)
}

// NextTo makes d advance to the next noder in the "to" merkletrie,
// skipping its contents if it is a directory.
func (d *doubleIter) nextTo() (err error) {
	d.to.current, err = d.to.iter.Next()
	return turnEOFIntoNil(err)
}

// StepBoth makes d advance to the next noder in both merkletries,
// getting deeper into directories if that is the case.
func (d *doubleIter) stepBoth() (err error) {
	if d.from.current, err = d.from.iter.Step(); turnEOFIntoNil(err) != nil {
		return err
	}
	if d.to.current, err = d.to.iter.Step(); turnEOFIntoNil(err) != nil {
		return err
	}
	return nil
}

// Remaining returns if there are no more noders in the tree, if both
// have noders or if one of them doesn't.
func (d *doubleIter) remaining() remaining {
	if d.from.current == nil && d.to.current == nil {
		return noMoreNoders
	}

	if d.from.current == nil && d.to.current != nil {
		return onlyToRemains
	}

	if d.from.current != nil && d.to.current == nil {
		return onlyFromRemains
	}

	return bothHaveNodes
}

// Remaining values tells you whether both trees still have noders, or
// only one of them or none of them.
type remaining int

const (
	noMoreNoders remaining = iota
	onlyToRemains
	onlyFromRemains
	bothHaveNodes
)

// Compare returns the comparison between the current elements in the
// merkletries.
func (d *doubleIter) compare() (s comparison, err error) {
	s.sameHash = d.hashEqual(d.from.current, d.to.current)

	fromIsDir := d.from.current.IsDir()
	toIsDir := d.to.current.IsDir()

	s.bothAreDirs = fromIsDir && toIsDir
	s.bothAreFiles = !fromIsDir && !toIsDir
	s.fileAndDir = !s.bothAreDirs && !s.bothAreFiles

	fromNumChildren, err := d.from.current.NumChildren()
	if err != nil {
		return comparison{}, fmt.Errorf("from: %s", err)
	}

	toNumChildren, err := d.to.current.NumChildren()
	if err != nil {
		return comparison{}, fmt.Errorf("to: %s", err)
	}

	s.fromIsEmptyDir = fromIsDir && fromNumChildren == 0
	s.toIsEmptyDir = toIsDir && toNumChildren == 0

	return
}

// Answers to a lot of questions you can ask about how to noders are
// equal or different.
type comparison struct {
	// the following are only valid if both nodes have the same name
	// (i.e. nameComparison == 0)

	// Do both nodes have the same hash?
	sameHash bool
	// Are both nodes files?
	bothAreFiles bool

	// the following are only valid if any of the noders are dirs,
	// this is, if !bothAreFiles

	// Is one a file and the other a dir?
	fileAndDir bool
	// Are both nodes dirs?
	bothAreDirs bool
	// Is the from node an empty dir?
	fromIsEmptyDir bool
	// Is the to Node an empty dir?
	toIsEmptyDir bool
}
 070701000005BA000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/utils/merkletrie/filesystem    070701000005BB000081A4000000000000000000000001645E367C00001009000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/utils/merkletrie/filesystem/node.go    package filesystem

import (
	"io"
	"os"
	"path"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/filemode"
	"github.com/go-git/go-git/v5/utils/merkletrie/noder"

	"github.com/go-git/go-billy/v5"
)

var ignore = map[string]bool{
	".git": true,
}

// The node represents a file or a directory in a billy.Filesystem. It
// implements the interface noder.Noder of merkletrie package.
//
// This implementation implements a "standard" hash method being able to be
// compared with any other noder.Noder implementation inside of go-git.
type node struct {
	fs         billy.Filesystem
	submodules map[string]plumbing.Hash

	path     string
	hash     []byte
	children []noder.Noder
	isDir    bool
}

// NewRootNode returns the root node based on a given billy.Filesystem.
//
// In order to provide the submodule hash status, a map[string]plumbing.Hash
// should be provided where the key is the path of the submodule and the commit
// of the submodule HEAD
func NewRootNode(
	fs billy.Filesystem,
	submodules map[string]plumbing.Hash,
) noder.Noder {
	return &node{fs: fs, submodules: submodules, isDir: true}
}

// Hash the hash of a filesystem is the result of concatenating the computed
// plumbing.Hash of the file as a Blob and its plumbing.FileMode; that way the
// difftree algorithm will detect changes in the contents of files and also in
// their mode.
//
// The hash of a directory is always a 24-bytes slice of zero values
func (n *node) Hash() []byte {
	return n.hash
}

func (n *node) Name() string {
	return path.Base(n.path)
}

func (n *node) IsDir() bool {
	return n.isDir
}

func (n *node) Children() ([]noder.Noder, error) {
	if err := n.calculateChildren(); err != nil {
		return nil, err
	}

	return n.children, nil
}

func (n *node) NumChildren() (int, error) {
	if err := n.calculateChildren(); err != nil {
		return -1, err
	}

	return len(n.children), nil
}

func (n *node) calculateChildren() error {
	if !n.IsDir() {
		return nil
	}

	if len(n.children) != 0 {
		return nil
	}

	files, err := n.fs.ReadDir(n.path)
	if err != nil {
		if os.IsNotExist(err) {
			return nil
		}
		return err
	}

	for _, file := range files {
		if _, ok := ignore[file.Name()]; ok {
			continue
		}

		c, err := n.newChildNode(file)
		if err != nil {
			return err
		}

		n.children = append(n.children, c)
	}

	return nil
}

func (n *node) newChildNode(file os.FileInfo) (*node, error) {
	path := path.Join(n.path, file.Name())

	hash, err := n.calculateHash(path, file)
	if err != nil {
		return nil, err
	}

	node := &node{
		fs:         n.fs,
		submodules: n.submodules,

		path:  path,
		hash:  hash,
		isDir: file.IsDir(),
	}

	if hash, isSubmodule := n.submodules[path]; isSubmodule {
		node.hash = append(hash[:], filemode.Submodule.Bytes()...)
		node.isDir = false
	}

	return node, nil
}

func (n *node) calculateHash(path string, file os.FileInfo) ([]byte, error) {
	if file.IsDir() {
		return make([]byte, 24), nil
	}

	var hash plumbing.Hash
	var err error
	if file.Mode()&os.ModeSymlink != 0 {
		hash, err = n.doCalculateHashForSymlink(path, file)
	} else {
		hash, err = n.doCalculateHashForRegular(path, file)
	}

	if err != nil {
		return nil, err
	}

	mode, err := filemode.NewFromOSFileMode(file.Mode())
	if err != nil {
		return nil, err
	}

	return append(hash[:], mode.Bytes()...), nil
}

func (n *node) doCalculateHashForRegular(path string, file os.FileInfo) (plumbing.Hash, error) {
	f, err := n.fs.Open(path)
	if err != nil {
		return plumbing.ZeroHash, err
	}

	defer f.Close()

	h := plumbing.NewHasher(plumbing.BlobObject, file.Size())
	if _, err := io.Copy(h, f); err != nil {
		return plumbing.ZeroHash, err
	}

	return h.Sum(), nil
}

func (n *node) doCalculateHashForSymlink(path string, file os.FileInfo) (plumbing.Hash, error) {
	target, err := n.fs.Readlink(path)
	if err != nil {
		return plumbing.ZeroHash, err
	}

	h := plumbing.NewHasher(plumbing.BlobObject, file.Size())
	if _, err := h.Write([]byte(target)); err != nil {
		return plumbing.ZeroHash, err
	}

	return h.Sum(), nil
}

func (n *node) String() string {
	return n.path
}
   070701000005BC000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/utils/merkletrie/index 070701000005BD000081A4000000000000000000000001645E367C00000812000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/utils/merkletrie/index/node.go package index

import (
	"path"
	"strings"

	"github.com/go-git/go-git/v5/plumbing/format/index"
	"github.com/go-git/go-git/v5/utils/merkletrie/noder"
)

// The node represents a index.Entry or a directory inferred from the path
// of all entries. It implements the interface noder.Noder of merkletrie
// package.
//
// This implementation implements a "standard" hash method being able to be
// compared with any other noder.Noder implementation inside of go-git
type node struct {
	path     string
	entry    *index.Entry
	children []noder.Noder
	isDir    bool
}

// NewRootNode returns the root node of a computed tree from a index.Index,
func NewRootNode(idx *index.Index) noder.Noder {
	const rootNode = ""

	m := map[string]*node{rootNode: {isDir: true}}

	for _, e := range idx.Entries {
		parts := strings.Split(e.Name, string("/"))

		var fullpath string
		for _, part := range parts {
			parent := fullpath
			fullpath = path.Join(fullpath, part)

			if _, ok := m[fullpath]; ok {
				continue
			}

			n := &node{path: fullpath}
			if fullpath == e.Name {
				n.entry = e
			} else {
				n.isDir = true
			}

			m[n.path] = n
			m[parent].children = append(m[parent].children, n)
		}
	}

	return m[rootNode]
}

func (n *node) String() string {
	return n.path
}

// Hash the hash of a filesystem is a 24-byte slice, is the result of
// concatenating the computed plumbing.Hash of the file as a Blob and its
// plumbing.FileMode; that way the difftree algorithm will detect changes in the
// contents of files and also in their mode.
//
// If the node is computed and not based on a index.Entry the hash is equals
// to a 24-bytes slices of zero values.
func (n *node) Hash() []byte {
	if n.entry == nil {
		return make([]byte, 24)
	}

	return append(n.entry.Hash[:], n.entry.Mode.Bytes()...)
}

func (n *node) Name() string {
	return path.Base(n.path)
}

func (n *node) IsDir() bool {
	return n.isDir
}

func (n *node) Children() ([]noder.Noder, error) {
	return n.children, nil
}

func (n *node) NumChildren() (int, error) {
	return len(n.children), nil
}
  070701000005BE000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/utils/merkletrie/internal  070701000005BF000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/utils/merkletrie/internal/frame    070701000005C0000081A4000000000000000000000001645E367C0000079F000000000000000000000000000000000000006000000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/utils/merkletrie/internal/frame/frame.go   package frame

import (
	"bytes"
	"fmt"
	"sort"
	"strings"

	"github.com/go-git/go-git/v5/utils/merkletrie/noder"
)

// A Frame is a collection of siblings in a trie, sorted alphabetically
// by name.
type Frame struct {
	// siblings, sorted in reverse alphabetical order by name
	stack []noder.Noder
}

type byName []noder.Noder

func (a byName) Len() int      { return len(a) }
func (a byName) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a byName) Less(i, j int) bool {
	return strings.Compare(a[i].Name(), a[j].Name()) < 0
}

// New returns a frame with the children of the provided node.
func New(n noder.Noder) (*Frame, error) {
	children, err := n.Children()
	if err != nil {
		return nil, err
	}

	sort.Sort(sort.Reverse(byName(children)))
	return &Frame{
		stack: children,
	}, nil
}

// String returns the quoted names of the noders in the frame sorted in
// alphabetical order by name, surrounded by square brackets and
// separated by comas.
//
// Examples:
//     []
//     ["a", "b"]
func (f *Frame) String() string {
	var buf bytes.Buffer
	_ = buf.WriteByte('[')

	sep := ""
	for i := f.Len() - 1; i >= 0; i-- {
		_, _ = buf.WriteString(sep)
		sep = ", "
		_, _ = buf.WriteString(fmt.Sprintf("%q", f.stack[i].Name()))
	}

	_ = buf.WriteByte(']')

	return buf.String()
}

// First returns, but dont extract, the noder with the alphabetically
// smaller name in the frame and true if the frame was not empty.
// Otherwise it returns nil and false.
func (f *Frame) First() (noder.Noder, bool) {
	if f.Len() == 0 {
		return nil, false
	}

	top := f.Len() - 1

	return f.stack[top], true
}

// Drop extracts the noder with the alphabetically smaller name in the
// frame or does nothing if the frame was empty.
func (f *Frame) Drop() {
	if f.Len() == 0 {
		return
	}

	top := f.Len() - 1
	f.stack[top] = nil
	f.stack = f.stack[:top]
}

// Len returns the number of noders in the frame.
func (f *Frame) Len() int {
	return len(f.stack)
}
 070701000005C1000081A4000000000000000000000001645E367C0000184D000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/utils/merkletrie/iter.go   package merkletrie

import (
	"fmt"
	"io"

	"github.com/go-git/go-git/v5/utils/merkletrie/internal/frame"
	"github.com/go-git/go-git/v5/utils/merkletrie/noder"
)

// Iter is an iterator for merkletries (only the trie part of the
// merkletrie is relevant here, it does not use the Hasher interface).
//
// The iteration is performed in depth-first pre-order.  Entries at each
// depth are traversed in (case-sensitive) alphabetical order.
//
// This is the kind of traversal you will expect when listing ordinary
// files and directories recursively, for example:
//
//          Trie           Traversal order
//          ----           ---------------
//           .
//         / | \           c
//        /  |  \          d/
//       d   c   z   ===>  d/a
//      / \                d/b
//     b   a               z
//
//
// This iterator is somewhat especial as you can chose to skip whole
// "directories" when iterating:
//
// - The Step method will iterate normally.
//
// - the Next method will not descend deeper into the tree.
//
// For example, if the iterator is at `d/`, the Step method will return
// `d/a` while the Next would have returned `z` instead (skipping `d/`
// and its descendants).  The name of the these two methods are based on
// the well known "next" and "step" operations, quite common in
// debuggers, like gdb.
//
// The paths returned by the iterator will be relative, if the iterator
// was created from a single node, or absolute, if the iterator was
// created from the path to the node (the path will be prefixed to all
// returned paths).
type Iter struct {
	// Tells if the iteration has started.
	hasStarted bool
	// The top of this stack has the current node and its siblings.  The
	// rest of the stack keeps the ancestors of the current node and
	// their corresponding siblings.  The current element is always the
	// top element of the top frame.
	//
	// When "step"ping into a node, its children are pushed as a new
	// frame.
	//
	// When "next"ing pass a node, the current element is dropped by
	// popping the top frame.
	frameStack []*frame.Frame
	// The base path used to turn the relative paths used internally by
	// the iterator into absolute paths used by external applications.
	// For relative iterator this will be nil.
	base noder.Path
}

// NewIter returns a new relative iterator using the provider noder as
// its unnamed root.  When iterating, all returned paths will be
// relative to node.
func NewIter(n noder.Noder) (*Iter, error) {
	return newIter(n, nil)
}

// NewIterFromPath returns a new absolute iterator from the noder at the
// end of the path p.  When iterating, all returned paths will be
// absolute, using the root of the path p as their root.
func NewIterFromPath(p noder.Path) (*Iter, error) {
	return newIter(p, p) // Path implements Noder
}

func newIter(root noder.Noder, base noder.Path) (*Iter, error) {
	ret := &Iter{
		base: base,
	}

	if root == nil {
		return ret, nil
	}

	frame, err := frame.New(root)
	if err != nil {
		return nil, err
	}
	ret.push(frame)

	return ret, nil
}

func (iter *Iter) top() (*frame.Frame, bool) {
	if len(iter.frameStack) == 0 {
		return nil, false
	}
	top := len(iter.frameStack) - 1

	return iter.frameStack[top], true
}

func (iter *Iter) push(f *frame.Frame) {
	iter.frameStack = append(iter.frameStack, f)
}

const (
	doDescend   = true
	dontDescend = false
)

// Next returns the path of the next node without descending deeper into
// the trie and nil.  If there are no more entries in the trie it
// returns nil and io.EOF.  In case of error, it will return nil and the
// error.
func (iter *Iter) Next() (noder.Path, error) {
	return iter.advance(dontDescend)
}

// Step returns the path to the next node in the trie, descending deeper
// into it if needed, and nil. If there are no more nodes in the trie,
// it returns nil and io.EOF.  In case of error, it will return nil and
// the error.
func (iter *Iter) Step() (noder.Path, error) {
	return iter.advance(doDescend)
}

// Advances the iterator in the desired direction: descend or
// dontDescend.
//
// Returns the new current element and a nil error on success.  If there
// are no more elements in the trie below the base, it returns nil, and
// io.EOF.  Returns nil and an error in case of errors.
func (iter *Iter) advance(wantDescend bool) (noder.Path, error) {
	current, err := iter.current()
	if err != nil {
		return nil, err
	}

	// The first time we just return the current node.
	if !iter.hasStarted {
		iter.hasStarted = true
		return current, nil
	}

	// Advances means getting a next current node, either its first child or
	// its next sibling, depending if we must descend or not.
	numChildren, err := current.NumChildren()
	if err != nil {
		return nil, err
	}

	mustDescend := numChildren != 0 && wantDescend
	if mustDescend {
		// descend: add a new frame with the current's children.
		frame, err := frame.New(current)
		if err != nil {
			return nil, err
		}
		iter.push(frame)
	} else {
		// don't descend: just drop the current node
		iter.drop()
	}

	return iter.current()
}

// Returns the path to the current node, adding the base if there was
// one, and a nil error.  If there were no noders left, it returns nil
// and io.EOF.  If an error occurred, it returns nil and the error.
func (iter *Iter) current() (noder.Path, error) {
	if topFrame, ok := iter.top(); !ok {
		return nil, io.EOF
	} else if _, ok := topFrame.First(); !ok {
		return nil, io.EOF
	}

	ret := make(noder.Path, 0, len(iter.base)+len(iter.frameStack))

	// concat the base...
	ret = append(ret, iter.base...)
	// ... and the current node and all its ancestors
	for i, f := range iter.frameStack {
		t, ok := f.First()
		if !ok {
			panic(fmt.Sprintf("frame %d is empty", i))
		}
		ret = append(ret, t)
	}

	return ret, nil
}

// removes the current node if any, and all the frames that become empty as a
// consequence of this action.
func (iter *Iter) drop() {
	frame, ok := iter.top()
	if !ok {
		return
	}

	frame.Drop()
	// if the frame is empty, remove it and its parent, recursively
	if frame.Len() == 0 {
		top := len(iter.frameStack) - 1
		iter.frameStack[top] = nil
		iter.frameStack = iter.frameStack[:top]
		iter.drop()
	}
}
   070701000005C2000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/utils/merkletrie/noder 070701000005C3000081A4000000000000000000000001645E367C00000854000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/utils/merkletrie/noder/noder.go    // Package noder provide an interface for defining nodes in a
// merkletrie, their hashes and their paths (a noders and its
// ancestors).
//
// The hasher interface is easy to implement naively by elements that
// already have a hash, like git blobs and trees.  More sophisticated
// implementations can implement the Equal function in exotic ways
// though: for instance, comparing the modification time of directories
// in a filesystem.
package noder

import "fmt"

// Hasher interface is implemented by types that can tell you
// their hash.
type Hasher interface {
	Hash() []byte
}

// Equal functions take two hashers and return if they are equal.
//
// These functions are expected to be faster than reflect.Equal or
// reflect.DeepEqual because they can compare just the hash of the
// objects, instead of their contents, so they are expected to be O(1).
type Equal func(a, b Hasher) bool

// The Noder interface is implemented by the elements of a Merkle Trie.
//
// There are two types of elements in a Merkle Trie:
//
// - file-like nodes: they cannot have children.
//
// - directory-like nodes: they can have 0 or more children and their
// hash is calculated by combining their children hashes.
type Noder interface {
	Hasher
	fmt.Stringer // for testing purposes
	// Name returns the name of an element (relative, not its full
	// path).
	Name() string
	// IsDir returns true if the element is a directory-like node or
	// false if it is a file-like node.
	IsDir() bool
	// Children returns the children of the element.  Note that empty
	// directory-like noders and file-like noders will both return
	// NoChildren.
	Children() ([]Noder, error)
	// NumChildren returns the number of children this element has.
	//
	// This method is an optimization: the number of children is easily
	// calculated as the length of the value returned by the Children
	// method (above); yet, some implementations will be able to
	// implement NumChildren in O(1) while Children is usually more
	// complex.
	NumChildren() (int, error)
}

// NoChildren represents the children of a noder without children.
var NoChildren = []Noder{}
070701000005C4000081A4000000000000000000000001645E367C00000800000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/utils/merkletrie/noder/path.go package noder

import (
	"bytes"
	"strings"
)

// Path values represent a noder and its ancestors.  The root goes first
// and the actual final noder the path is referring to will be the last.
//
// A path implements the Noder interface, redirecting all the interface
// calls to its final noder.
//
// Paths build from an empty Noder slice are not valid paths and should
// not be used.
type Path []Noder

// String returns the full path of the final noder as a string, using
// "/" as the separator.
func (p Path) String() string {
	var buf bytes.Buffer
	sep := ""
	for _, e := range p {
		_, _ = buf.WriteString(sep)
		sep = "/"
		_, _ = buf.WriteString(e.Name())
	}

	return buf.String()
}

// Last returns the final noder in the path.
func (p Path) Last() Noder {
	return p[len(p)-1]
}

// Hash returns the hash of the final noder of the path.
func (p Path) Hash() []byte {
	return p.Last().Hash()
}

// Name returns the name of the final noder of the path.
func (p Path) Name() string {
	return p.Last().Name()
}

// IsDir returns if the final noder of the path is a directory-like
// noder.
func (p Path) IsDir() bool {
	return p.Last().IsDir()
}

// Children returns the children of the final noder in the path.
func (p Path) Children() ([]Noder, error) {
	return p.Last().Children()
}

// NumChildren returns the number of children the final noder of the
// path has.
func (p Path) NumChildren() (int, error) {
	return p.Last().NumChildren()
}

// Compare returns -1, 0 or 1 if the path p is smaller, equal or bigger
// than other, in "directory order"; for example:
//
// "a" < "b"
// "a/b/c/d/z" < "b"
// "a/b/a" > "a/b"
func (p Path) Compare(other Path) int {
	i := 0
	for {
		switch {
		case len(other) == len(p) && i == len(p):
			return 0
		case i == len(other):
			return 1
		case i == len(p):
			return -1
		default:
			// We do *not* normalize Unicode here. CGit doesn't.
			// https://github.com/src-d/go-git/issues/1057
			cmp := strings.Compare(p[i].Name(), other[i].Name())
			if cmp != 0 {
				return cmp
			}
		}
		i++
	}
}
070701000005C5000081A4000000000000000000000001645E367C0000515A000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/worktree.go    package git

import (
	"context"
	"errors"
	"fmt"
	"io"
	stdioutil "io/ioutil"
	"os"
	"path/filepath"
	"strings"
	"sync"

	"github.com/go-git/go-git/v5/config"
	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/filemode"
	"github.com/go-git/go-git/v5/plumbing/format/gitignore"
	"github.com/go-git/go-git/v5/plumbing/format/index"
	"github.com/go-git/go-git/v5/plumbing/object"
	"github.com/go-git/go-git/v5/plumbing/storer"
	"github.com/go-git/go-git/v5/utils/ioutil"
	"github.com/go-git/go-git/v5/utils/merkletrie"

	"github.com/go-git/go-billy/v5"
	"github.com/go-git/go-billy/v5/util"
)

var (
	ErrWorktreeNotClean     = errors.New("worktree is not clean")
	ErrSubmoduleNotFound    = errors.New("submodule not found")
	ErrUnstagedChanges      = errors.New("worktree contains unstaged changes")
	ErrGitModulesSymlink    = errors.New(gitmodulesFile + " is a symlink")
	ErrNonFastForwardUpdate = errors.New("non-fast-forward update")
)

// Worktree represents a git worktree.
type Worktree struct {
	// Filesystem underlying filesystem.
	Filesystem billy.Filesystem
	// External excludes not found in the repository .gitignore
	Excludes []gitignore.Pattern

	r *Repository
}

// Pull incorporates changes from a remote repository into the current branch.
// Returns nil if the operation is successful, NoErrAlreadyUpToDate if there are
// no changes to be fetched, or an error.
//
// Pull only supports merges where the can be resolved as a fast-forward.
func (w *Worktree) Pull(o *PullOptions) error {
	return w.PullContext(context.Background(), o)
}

// PullContext incorporates changes from a remote repository into the current
// branch. Returns nil if the operation is successful, NoErrAlreadyUpToDate if
// there are no changes to be fetched, or an error.
//
// Pull only supports merges where the can be resolved as a fast-forward.
//
// The provided Context must be non-nil. If the context expires before the
// operation is complete, an error is returned. The context only affects the
// transport operations.
func (w *Worktree) PullContext(ctx context.Context, o *PullOptions) error {
	if err := o.Validate(); err != nil {
		return err
	}

	remote, err := w.r.Remote(o.RemoteName)
	if err != nil {
		return err
	}

	fetchHead, err := remote.fetch(ctx, &FetchOptions{
		RemoteName:      o.RemoteName,
		Depth:           o.Depth,
		Auth:            o.Auth,
		Progress:        o.Progress,
		Force:           o.Force,
		InsecureSkipTLS: o.InsecureSkipTLS,
		CABundle:        o.CABundle,
	})

	updated := true
	if err == NoErrAlreadyUpToDate {
		updated = false
	} else if err != nil {
		return err
	}

	ref, err := storer.ResolveReference(fetchHead, o.ReferenceName)
	if err != nil {
		return err
	}

	head, err := w.r.Head()
	if err == nil {
		headAheadOfRef, err := isFastForward(w.r.Storer, ref.Hash(), head.Hash())
		if err != nil {
			return err
		}

		if !updated && headAheadOfRef {
			return NoErrAlreadyUpToDate
		}

		ff, err := isFastForward(w.r.Storer, head.Hash(), ref.Hash())
		if err != nil {
			return err
		}

		if !ff {
			return ErrNonFastForwardUpdate
		}
	}

	if err != nil && err != plumbing.ErrReferenceNotFound {
		return err
	}

	if err := w.updateHEAD(ref.Hash()); err != nil {
		return err
	}

	if err := w.Reset(&ResetOptions{
		Mode:   MergeReset,
		Commit: ref.Hash(),
	}); err != nil {
		return err
	}

	if o.RecurseSubmodules != NoRecurseSubmodules {
		return w.updateSubmodules(&SubmoduleUpdateOptions{
			RecurseSubmodules: o.RecurseSubmodules,
			Auth:              o.Auth,
		})
	}

	return nil
}

func (w *Worktree) updateSubmodules(o *SubmoduleUpdateOptions) error {
	s, err := w.Submodules()
	if err != nil {
		return err
	}
	o.Init = true
	return s.Update(o)
}

// Checkout switch branches or restore working tree files.
func (w *Worktree) Checkout(opts *CheckoutOptions) error {
	if err := opts.Validate(); err != nil {
		return err
	}

	if opts.Create {
		if err := w.createBranch(opts); err != nil {
			return err
		}
	}

	c, err := w.getCommitFromCheckoutOptions(opts)
	if err != nil {
		return err
	}

	ro := &ResetOptions{Commit: c, Mode: MergeReset}
	if opts.Force {
		ro.Mode = HardReset
	} else if opts.Keep {
		ro.Mode = SoftReset
	}

	if !opts.Hash.IsZero() && !opts.Create {
		err = w.setHEADToCommit(opts.Hash)
	} else {
		err = w.setHEADToBranch(opts.Branch, c)
	}

	if err != nil {
		return err
	}

	return w.Reset(ro)
}
func (w *Worktree) createBranch(opts *CheckoutOptions) error {
	_, err := w.r.Storer.Reference(opts.Branch)
	if err == nil {
		return fmt.Errorf("a branch named %q already exists", opts.Branch)
	}

	if err != plumbing.ErrReferenceNotFound {
		return err
	}

	if opts.Hash.IsZero() {
		ref, err := w.r.Head()
		if err != nil {
			return err
		}

		opts.Hash = ref.Hash()
	}

	return w.r.Storer.SetReference(
		plumbing.NewHashReference(opts.Branch, opts.Hash),
	)
}

func (w *Worktree) getCommitFromCheckoutOptions(opts *CheckoutOptions) (plumbing.Hash, error) {
	if !opts.Hash.IsZero() {
		return opts.Hash, nil
	}

	b, err := w.r.Reference(opts.Branch, true)
	if err != nil {
		return plumbing.ZeroHash, err
	}

	if !b.Name().IsTag() {
		return b.Hash(), nil
	}

	o, err := w.r.Object(plumbing.AnyObject, b.Hash())
	if err != nil {
		return plumbing.ZeroHash, err
	}

	switch o := o.(type) {
	case *object.Tag:
		if o.TargetType != plumbing.CommitObject {
			return plumbing.ZeroHash, fmt.Errorf("unsupported tag object target %q", o.TargetType)
		}

		return o.Target, nil
	case *object.Commit:
		return o.Hash, nil
	}

	return plumbing.ZeroHash, fmt.Errorf("unsupported tag target %q", o.Type())
}

func (w *Worktree) setHEADToCommit(commit plumbing.Hash) error {
	head := plumbing.NewHashReference(plumbing.HEAD, commit)
	return w.r.Storer.SetReference(head)
}

func (w *Worktree) setHEADToBranch(branch plumbing.ReferenceName, commit plumbing.Hash) error {
	target, err := w.r.Storer.Reference(branch)
	if err != nil {
		return err
	}

	var head *plumbing.Reference
	if target.Name().IsBranch() {
		head = plumbing.NewSymbolicReference(plumbing.HEAD, target.Name())
	} else {
		head = plumbing.NewHashReference(plumbing.HEAD, commit)
	}

	return w.r.Storer.SetReference(head)
}

// Reset the worktree to a specified state.
func (w *Worktree) Reset(opts *ResetOptions) error {
	if err := opts.Validate(w.r); err != nil {
		return err
	}

	if opts.Mode == MergeReset {
		unstaged, err := w.containsUnstagedChanges()
		if err != nil {
			return err
		}

		if unstaged {
			return ErrUnstagedChanges
		}
	}

	if err := w.setHEADCommit(opts.Commit); err != nil {
		return err
	}

	if opts.Mode == SoftReset {
		return nil
	}

	t, err := w.getTreeFromCommitHash(opts.Commit)
	if err != nil {
		return err
	}

	if opts.Mode == MixedReset || opts.Mode == MergeReset || opts.Mode == HardReset {
		if err := w.resetIndex(t); err != nil {
			return err
		}
	}

	if opts.Mode == MergeReset || opts.Mode == HardReset {
		if err := w.resetWorktree(t); err != nil {
			return err
		}
	}

	return nil
}

func (w *Worktree) resetIndex(t *object.Tree) error {
	idx, err := w.r.Storer.Index()
	if err != nil {
		return err
	}
	b := newIndexBuilder(idx)

	changes, err := w.diffTreeWithStaging(t, true)
	if err != nil {
		return err
	}

	for _, ch := range changes {
		a, err := ch.Action()
		if err != nil {
			return err
		}

		var name string
		var e *object.TreeEntry

		switch a {
		case merkletrie.Modify, merkletrie.Insert:
			name = ch.To.String()
			e, err = t.FindEntry(name)
			if err != nil {
				return err
			}
		case merkletrie.Delete:
			name = ch.From.String()
		}

		b.Remove(name)
		if e == nil {
			continue
		}

		b.Add(&index.Entry{
			Name: name,
			Hash: e.Hash,
			Mode: e.Mode,
		})

	}

	b.Write(idx)
	return w.r.Storer.SetIndex(idx)
}

func (w *Worktree) resetWorktree(t *object.Tree) error {
	changes, err := w.diffStagingWithWorktree(true)
	if err != nil {
		return err
	}

	idx, err := w.r.Storer.Index()
	if err != nil {
		return err
	}
	b := newIndexBuilder(idx)

	for _, ch := range changes {
		if err := w.checkoutChange(ch, t, b); err != nil {
			return err
		}
	}

	b.Write(idx)
	return w.r.Storer.SetIndex(idx)
}

func (w *Worktree) checkoutChange(ch merkletrie.Change, t *object.Tree, idx *indexBuilder) error {
	a, err := ch.Action()
	if err != nil {
		return err
	}

	var e *object.TreeEntry
	var name string
	var isSubmodule bool

	switch a {
	case merkletrie.Modify, merkletrie.Insert:
		name = ch.To.String()
		e, err = t.FindEntry(name)
		if err != nil {
			return err
		}

		isSubmodule = e.Mode == filemode.Submodule
	case merkletrie.Delete:
		return rmFileAndDirIfEmpty(w.Filesystem, ch.From.String())
	}

	if isSubmodule {
		return w.checkoutChangeSubmodule(name, a, e, idx)
	}

	return w.checkoutChangeRegularFile(name, a, t, e, idx)
}

func (w *Worktree) containsUnstagedChanges() (bool, error) {
	ch, err := w.diffStagingWithWorktree(false)
	if err != nil {
		return false, err
	}

	for _, c := range ch {
		a, err := c.Action()
		if err != nil {
			return false, err
		}

		if a == merkletrie.Insert {
			continue
		}

		return true, nil
	}

	return false, nil
}

func (w *Worktree) setHEADCommit(commit plumbing.Hash) error {
	head, err := w.r.Reference(plumbing.HEAD, false)
	if err != nil {
		return err
	}

	if head.Type() == plumbing.HashReference {
		head = plumbing.NewHashReference(plumbing.HEAD, commit)
		return w.r.Storer.SetReference(head)
	}

	branch, err := w.r.Reference(head.Target(), false)
	if err != nil {
		return err
	}

	if !branch.Name().IsBranch() {
		return fmt.Errorf("invalid HEAD target should be a branch, found %s", branch.Type())
	}

	branch = plumbing.NewHashReference(branch.Name(), commit)
	return w.r.Storer.SetReference(branch)
}

func (w *Worktree) checkoutChangeSubmodule(name string,
	a merkletrie.Action,
	e *object.TreeEntry,
	idx *indexBuilder,
) error {
	switch a {
	case merkletrie.Modify:
		sub, err := w.Submodule(name)
		if err != nil {
			return err
		}

		if !sub.initialized {
			return nil
		}

		return w.addIndexFromTreeEntry(name, e, idx)
	case merkletrie.Insert:
		mode, err := e.Mode.ToOSFileMode()
		if err != nil {
			return err
		}

		if err := w.Filesystem.MkdirAll(name, mode); err != nil {
			return err
		}

		return w.addIndexFromTreeEntry(name, e, idx)
	}

	return nil
}

func (w *Worktree) checkoutChangeRegularFile(name string,
	a merkletrie.Action,
	t *object.Tree,
	e *object.TreeEntry,
	idx *indexBuilder,
) error {
	switch a {
	case merkletrie.Modify:
		idx.Remove(name)

		// to apply perm changes the file is deleted, billy doesn't implement
		// chmod
		if err := w.Filesystem.Remove(name); err != nil {
			return err
		}

		fallthrough
	case merkletrie.Insert:
		f, err := t.File(name)
		if err != nil {
			return err
		}

		if err := w.checkoutFile(f); err != nil {
			return err
		}

		return w.addIndexFromFile(name, e.Hash, idx)
	}

	return nil
}

var copyBufferPool = sync.Pool{
	New: func() interface{} {
		return make([]byte, 32*1024)
	},
}

func (w *Worktree) checkoutFile(f *object.File) (err error) {
	mode, err := f.Mode.ToOSFileMode()
	if err != nil {
		return
	}

	if mode&os.ModeSymlink != 0 {
		return w.checkoutFileSymlink(f)
	}

	from, err := f.Reader()
	if err != nil {
		return
	}

	defer ioutil.CheckClose(from, &err)

	to, err := w.Filesystem.OpenFile(f.Name, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, mode.Perm())
	if err != nil {
		return
	}

	defer ioutil.CheckClose(to, &err)
	buf := copyBufferPool.Get().([]byte)
	_, err = io.CopyBuffer(to, from, buf)
	copyBufferPool.Put(buf)
	return
}

func (w *Worktree) checkoutFileSymlink(f *object.File) (err error) {
	from, err := f.Reader()
	if err != nil {
		return
	}

	defer ioutil.CheckClose(from, &err)

	bytes, err := stdioutil.ReadAll(from)
	if err != nil {
		return
	}

	err = w.Filesystem.Symlink(string(bytes), f.Name)

	// On windows, this might fail.
	// Follow Git on Windows behavior by writing the link as it is.
	if err != nil && isSymlinkWindowsNonAdmin(err) {
		mode, _ := f.Mode.ToOSFileMode()

		to, err := w.Filesystem.OpenFile(f.Name, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, mode.Perm())
		if err != nil {
			return err
		}

		defer ioutil.CheckClose(to, &err)

		_, err = to.Write(bytes)
		return err
	}
	return
}

func (w *Worktree) addIndexFromTreeEntry(name string, f *object.TreeEntry, idx *indexBuilder) error {
	idx.Remove(name)
	idx.Add(&index.Entry{
		Hash: f.Hash,
		Name: name,
		Mode: filemode.Submodule,
	})
	return nil
}

func (w *Worktree) addIndexFromFile(name string, h plumbing.Hash, idx *indexBuilder) error {
	idx.Remove(name)
	fi, err := w.Filesystem.Lstat(name)
	if err != nil {
		return err
	}

	mode, err := filemode.NewFromOSFileMode(fi.Mode())
	if err != nil {
		return err
	}

	e := &index.Entry{
		Hash:       h,
		Name:       name,
		Mode:       mode,
		ModifiedAt: fi.ModTime(),
		Size:       uint32(fi.Size()),
	}

	// if the FileInfo.Sys() comes from os the ctime, dev, inode, uid and gid
	// can be retrieved, otherwise this doesn't apply
	if fillSystemInfo != nil {
		fillSystemInfo(e, fi.Sys())
	}
	idx.Add(e)
	return nil
}

func (w *Worktree) getTreeFromCommitHash(commit plumbing.Hash) (*object.Tree, error) {
	c, err := w.r.CommitObject(commit)
	if err != nil {
		return nil, err
	}

	return c.Tree()
}

var fillSystemInfo func(e *index.Entry, sys interface{})

const gitmodulesFile = ".gitmodules"

// Submodule returns the submodule with the given name
func (w *Worktree) Submodule(name string) (*Submodule, error) {
	l, err := w.Submodules()
	if err != nil {
		return nil, err
	}

	for _, m := range l {
		if m.Config().Name == name {
			return m, nil
		}
	}

	return nil, ErrSubmoduleNotFound
}

// Submodules returns all the available submodules
func (w *Worktree) Submodules() (Submodules, error) {
	l := make(Submodules, 0)
	m, err := w.readGitmodulesFile()
	if err != nil || m == nil {
		return l, err
	}

	c, err := w.r.Config()
	if err != nil {
		return nil, err
	}

	for _, s := range m.Submodules {
		l = append(l, w.newSubmodule(s, c.Submodules[s.Name]))
	}

	return l, nil
}

func (w *Worktree) newSubmodule(fromModules, fromConfig *config.Submodule) *Submodule {
	m := &Submodule{w: w}
	m.initialized = fromConfig != nil

	if !m.initialized {
		m.c = fromModules
		return m
	}

	m.c = fromConfig
	m.c.Path = fromModules.Path
	return m
}

func (w *Worktree) isSymlink(path string) bool {
	if s, err := w.Filesystem.Lstat(path); err == nil {
		return s.Mode()&os.ModeSymlink != 0
	}
	return false
}

func (w *Worktree) readGitmodulesFile() (*config.Modules, error) {
	if w.isSymlink(gitmodulesFile) {
		return nil, ErrGitModulesSymlink
	}

	f, err := w.Filesystem.Open(gitmodulesFile)
	if err != nil {
		if os.IsNotExist(err) {
			return nil, nil
		}

		return nil, err
	}

	defer f.Close()
	input, err := stdioutil.ReadAll(f)
	if err != nil {
		return nil, err
	}

	m := config.NewModules()
	if err := m.Unmarshal(input); err != nil {
		return m, err
	}

	return m, nil
}

// Clean the worktree by removing untracked files.
// An empty dir could be removed - this is what  `git clean -f -d .` does.
func (w *Worktree) Clean(opts *CleanOptions) error {
	s, err := w.Status()
	if err != nil {
		return err
	}

	root := ""
	files, err := w.Filesystem.ReadDir(root)
	if err != nil {
		return err
	}
	return w.doClean(s, opts, root, files)
}

func (w *Worktree) doClean(status Status, opts *CleanOptions, dir string, files []os.FileInfo) error {
	for _, fi := range files {
		if fi.Name() == GitDirName {
			continue
		}

		// relative path under the root
		path := filepath.Join(dir, fi.Name())
		if fi.IsDir() {
			if !opts.Dir {
				continue
			}

			subfiles, err := w.Filesystem.ReadDir(path)
			if err != nil {
				return err
			}
			err = w.doClean(status, opts, path, subfiles)
			if err != nil {
				return err
			}
		} else {
			if status.IsUntracked(path) {
				if err := w.Filesystem.Remove(path); err != nil {
					return err
				}
			}
		}
	}

	if opts.Dir && dir != "" {
		return doCleanDirectories(w.Filesystem, dir)
	}
	return nil
}

// GrepResult is structure of a grep result.
type GrepResult struct {
	// FileName is the name of file which contains match.
	FileName string
	// LineNumber is the line number of a file at which a match was found.
	LineNumber int
	// Content is the content of the file at the matching line.
	Content string
	// TreeName is the name of the tree (reference name/commit hash) at
	// which the match was performed.
	TreeName string
}

func (gr GrepResult) String() string {
	return fmt.Sprintf("%s:%s:%d:%s", gr.TreeName, gr.FileName, gr.LineNumber, gr.Content)
}

// Grep performs grep on a worktree.
func (w *Worktree) Grep(opts *GrepOptions) ([]GrepResult, error) {
	if err := opts.Validate(w); err != nil {
		return nil, err
	}

	// Obtain commit hash from options (CommitHash or ReferenceName).
	var commitHash plumbing.Hash
	// treeName contains the value of TreeName in GrepResult.
	var treeName string

	if opts.ReferenceName != "" {
		ref, err := w.r.Reference(opts.ReferenceName, true)
		if err != nil {
			return nil, err
		}
		commitHash = ref.Hash()
		treeName = opts.ReferenceName.String()
	} else if !opts.CommitHash.IsZero() {
		commitHash = opts.CommitHash
		treeName = opts.CommitHash.String()
	}

	// Obtain a tree from the commit hash and get a tracked files iterator from
	// the tree.
	tree, err := w.getTreeFromCommitHash(commitHash)
	if err != nil {
		return nil, err
	}
	fileiter := tree.Files()

	return findMatchInFiles(fileiter, treeName, opts)
}

// findMatchInFiles takes a FileIter, worktree name and GrepOptions, and
// returns a slice of GrepResult containing the result of regex pattern matching
// in content of all the files.
func findMatchInFiles(fileiter *object.FileIter, treeName string, opts *GrepOptions) ([]GrepResult, error) {
	var results []GrepResult

	err := fileiter.ForEach(func(file *object.File) error {
		var fileInPathSpec bool

		// When no pathspecs are provided, search all the files.
		if len(opts.PathSpecs) == 0 {
			fileInPathSpec = true
		}

		// Check if the file name matches with the pathspec. Break out of the
		// loop once a match is found.
		for _, pathSpec := range opts.PathSpecs {
			if pathSpec != nil && pathSpec.MatchString(file.Name) {
				fileInPathSpec = true
				break
			}
		}

		// If the file does not match with any of the pathspec, skip it.
		if !fileInPathSpec {
			return nil
		}

		grepResults, err := findMatchInFile(file, treeName, opts)
		if err != nil {
			return err
		}
		results = append(results, grepResults...)

		return nil
	})

	return results, err
}

// findMatchInFile takes a single File, worktree name and GrepOptions,
// and returns a slice of GrepResult containing the result of regex pattern
// matching in the given file.
func findMatchInFile(file *object.File, treeName string, opts *GrepOptions) ([]GrepResult, error) {
	var grepResults []GrepResult

	content, err := file.Contents()
	if err != nil {
		return grepResults, err
	}

	// Split the file content and parse line-by-line.
	contentByLine := strings.Split(content, "\n")
	for lineNum, cnt := range contentByLine {
		addToResult := false

		// Match the patterns and content. Break out of the loop once a
		// match is found.
		for _, pattern := range opts.Patterns {
			if pattern != nil && pattern.MatchString(cnt) {
				// Add to result only if invert match is not enabled.
				if !opts.InvertMatch {
					addToResult = true
					break
				}
			} else if opts.InvertMatch {
				// If matching fails, and invert match is enabled, add to
				// results.
				addToResult = true
				break
			}
		}

		if addToResult {
			grepResults = append(grepResults, GrepResult{
				FileName:   file.Name,
				LineNumber: lineNum + 1,
				Content:    cnt,
				TreeName:   treeName,
			})
		}
	}

	return grepResults, nil
}

func rmFileAndDirIfEmpty(fs billy.Filesystem, name string) error {
	if err := util.RemoveAll(fs, name); err != nil {
		return err
	}

	dir := filepath.Dir(name)
	return doCleanDirectories(fs, dir)
}

// doCleanDirectories removes empty subdirs (without files)
func doCleanDirectories(fs billy.Filesystem, dir string) error {
	files, err := fs.ReadDir(dir)
	if err != nil {
		return err
	}
	if len(files) == 0 {
		return fs.Remove(dir)
	}
	return nil
}

type indexBuilder struct {
	entries map[string]*index.Entry
}

func newIndexBuilder(idx *index.Index) *indexBuilder {
	entries := make(map[string]*index.Entry, len(idx.Entries))
	for _, e := range idx.Entries {
		entries[e.Name] = e
	}
	return &indexBuilder{
		entries: entries,
	}
}

func (b *indexBuilder) Write(idx *index.Index) {
	idx.Entries = idx.Entries[:0]
	for _, e := range b.entries {
		idx.Entries = append(idx.Entries, e)
	}
}

func (b *indexBuilder) Add(e *index.Entry) {
	b.entries[e.Name] = e
}

func (b *indexBuilder) Remove(name string) {
	delete(b.entries, filepath.ToSlash(name))
}
  070701000005C6000081A4000000000000000000000001645E367C000001E8000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/worktree_bsd.go    // +build darwin freebsd netbsd

package git

import (
	"syscall"
	"time"

	"github.com/go-git/go-git/v5/plumbing/format/index"
)

func init() {
	fillSystemInfo = func(e *index.Entry, sys interface{}) {
		if os, ok := sys.(*syscall.Stat_t); ok {
			e.CreatedAt = time.Unix(int64(os.Atimespec.Sec), int64(os.Atimespec.Nsec))
			e.Dev = uint32(os.Dev)
			e.Inode = uint32(os.Ino)
			e.GID = os.Gid
			e.UID = os.Uid
		}
	}
}

func isSymlinkWindowsNonAdmin(err error) bool {
	return false
}
070701000005C7000081A4000000000000000000000001645E367C000015CD000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/worktree_commit.go package git

import (
	"bytes"
	"path"
	"sort"
	"strings"

	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/filemode"
	"github.com/go-git/go-git/v5/plumbing/format/index"
	"github.com/go-git/go-git/v5/plumbing/object"
	"github.com/go-git/go-git/v5/storage"

	"github.com/ProtonMail/go-crypto/openpgp"
	"github.com/go-git/go-billy/v5"
)

// Commit stores the current contents of the index in a new commit along with
// a log message from the user describing the changes.
func (w *Worktree) Commit(msg string, opts *CommitOptions) (plumbing.Hash, error) {
	if err := opts.Validate(w.r); err != nil {
		return plumbing.ZeroHash, err
	}

	if opts.All {
		if err := w.autoAddModifiedAndDeleted(); err != nil {
			return plumbing.ZeroHash, err
		}
	}

	idx, err := w.r.Storer.Index()
	if err != nil {
		return plumbing.ZeroHash, err
	}

	h := &buildTreeHelper{
		fs: w.Filesystem,
		s:  w.r.Storer,
	}

	tree, err := h.BuildTree(idx)
	if err != nil {
		return plumbing.ZeroHash, err
	}

	commit, err := w.buildCommitObject(msg, opts, tree)
	if err != nil {
		return plumbing.ZeroHash, err
	}

	return commit, w.updateHEAD(commit)
}

func (w *Worktree) autoAddModifiedAndDeleted() error {
	s, err := w.Status()
	if err != nil {
		return err
	}

	idx, err := w.r.Storer.Index()
	if err != nil {
		return err
	}

	for path, fs := range s {
		if fs.Worktree != Modified && fs.Worktree != Deleted {
			continue
		}

		if _, _, err := w.doAddFile(idx, s, path, nil); err != nil {
			return err
		}

	}

	return w.r.Storer.SetIndex(idx)
}

func (w *Worktree) updateHEAD(commit plumbing.Hash) error {
	head, err := w.r.Storer.Reference(plumbing.HEAD)
	if err != nil {
		return err
	}

	name := plumbing.HEAD
	if head.Type() != plumbing.HashReference {
		name = head.Target()
	}

	ref := plumbing.NewHashReference(name, commit)
	return w.r.Storer.SetReference(ref)
}

func (w *Worktree) buildCommitObject(msg string, opts *CommitOptions, tree plumbing.Hash) (plumbing.Hash, error) {
	commit := &object.Commit{
		Author:       *opts.Author,
		Committer:    *opts.Committer,
		Message:      msg,
		TreeHash:     tree,
		ParentHashes: opts.Parents,
	}

	if opts.SignKey != nil {
		sig, err := w.buildCommitSignature(commit, opts.SignKey)
		if err != nil {
			return plumbing.ZeroHash, err
		}
		commit.PGPSignature = sig
	}

	obj := w.r.Storer.NewEncodedObject()
	if err := commit.Encode(obj); err != nil {
		return plumbing.ZeroHash, err
	}
	return w.r.Storer.SetEncodedObject(obj)
}

func (w *Worktree) buildCommitSignature(commit *object.Commit, signKey *openpgp.Entity) (string, error) {
	encoded := &plumbing.MemoryObject{}
	if err := commit.Encode(encoded); err != nil {
		return "", err
	}
	r, err := encoded.Reader()
	if err != nil {
		return "", err
	}
	var b bytes.Buffer
	if err := openpgp.ArmoredDetachSign(&b, signKey, r, nil); err != nil {
		return "", err
	}
	return b.String(), nil
}

// buildTreeHelper converts a given index.Index file into multiple git objects
// reading the blobs from the given filesystem and creating the trees from the
// index structure. The created objects are pushed to a given Storer.
type buildTreeHelper struct {
	fs billy.Filesystem
	s  storage.Storer

	trees   map[string]*object.Tree
	entries map[string]*object.TreeEntry
}

// BuildTree builds the tree objects and push its to the storer, the hash
// of the root tree is returned.
func (h *buildTreeHelper) BuildTree(idx *index.Index) (plumbing.Hash, error) {
	const rootNode = ""
	h.trees = map[string]*object.Tree{rootNode: {}}
	h.entries = map[string]*object.TreeEntry{}

	for _, e := range idx.Entries {
		if err := h.commitIndexEntry(e); err != nil {
			return plumbing.ZeroHash, err
		}
	}

	return h.copyTreeToStorageRecursive(rootNode, h.trees[rootNode])
}

func (h *buildTreeHelper) commitIndexEntry(e *index.Entry) error {
	parts := strings.Split(e.Name, "/")

	var fullpath string
	for _, part := range parts {
		parent := fullpath
		fullpath = path.Join(fullpath, part)

		h.doBuildTree(e, parent, fullpath)
	}

	return nil
}

func (h *buildTreeHelper) doBuildTree(e *index.Entry, parent, fullpath string) {
	if _, ok := h.trees[fullpath]; ok {
		return
	}

	if _, ok := h.entries[fullpath]; ok {
		return
	}

	te := object.TreeEntry{Name: path.Base(fullpath)}

	if fullpath == e.Name {
		te.Mode = e.Mode
		te.Hash = e.Hash
	} else {
		te.Mode = filemode.Dir
		h.trees[fullpath] = &object.Tree{}
	}

	h.trees[parent].Entries = append(h.trees[parent].Entries, te)
}

type sortableEntries []object.TreeEntry

func (sortableEntries) sortName(te object.TreeEntry) string {
	if te.Mode == filemode.Dir {
		return te.Name + "/"
	}
	return te.Name
}
func (se sortableEntries) Len() int               { return len(se) }
func (se sortableEntries) Less(i int, j int) bool { return se.sortName(se[i]) < se.sortName(se[j]) }
func (se sortableEntries) Swap(i int, j int)      { se[i], se[j] = se[j], se[i] }

func (h *buildTreeHelper) copyTreeToStorageRecursive(parent string, t *object.Tree) (plumbing.Hash, error) {
	sort.Sort(sortableEntries(t.Entries))
	for i, e := range t.Entries {
		if e.Mode != filemode.Dir && !e.Hash.IsZero() {
			continue
		}

		path := path.Join(parent, e.Name)

		var err error
		e.Hash, err = h.copyTreeToStorageRecursive(path, h.trees[path])
		if err != nil {
			return plumbing.ZeroHash, err
		}

		t.Entries[i] = e
	}

	o := h.s.NewEncodedObject()
	if err := t.Encode(o); err != nil {
		return plumbing.ZeroHash, err
	}

	hash := o.Hash()
	if h.s.HasEncodedObject(hash) == nil {
		return hash, nil
	}
	return h.s.SetEncodedObject(o)
}
   070701000005C8000081A4000000000000000000000001645E367C000001C8000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/worktree_js.go // +build js

package git

import (
	"syscall"
	"time"

	"github.com/go-git/go-git/v5/plumbing/format/index"
)

func init() {
	fillSystemInfo = func(e *index.Entry, sys interface{}) {
		if os, ok := sys.(*syscall.Stat_t); ok {
			e.CreatedAt = time.Unix(int64(os.Ctime), int64(os.CtimeNsec))
			e.Dev = uint32(os.Dev)
			e.Inode = uint32(os.Ino)
			e.GID = os.Gid
			e.UID = os.Uid
		}
	}
}

func isSymlinkWindowsNonAdmin(err error) bool {
	return false
}
070701000005C9000081A4000000000000000000000001645E367C000001CE000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/worktree_linux.go  // +build linux

package git

import (
	"syscall"
	"time"

	"github.com/go-git/go-git/v5/plumbing/format/index"
)

func init() {
	fillSystemInfo = func(e *index.Entry, sys interface{}) {
		if os, ok := sys.(*syscall.Stat_t); ok {
			e.CreatedAt = time.Unix(int64(os.Ctim.Sec), int64(os.Ctim.Nsec))
			e.Dev = uint32(os.Dev)
			e.Inode = uint32(os.Ino)
			e.GID = os.Gid
			e.UID = os.Uid
		}
	}
}

func isSymlinkWindowsNonAdmin(err error) bool {
	return false
}
  070701000005CA000081A4000000000000000000000001645E367C0000023F000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/worktree_plan9.go  package git

import (
	"syscall"
	"time"

	"github.com/go-git/go-git/v5/plumbing/format/index"
)

func init() {
	fillSystemInfo = func(e *index.Entry, sys interface{}) {
		if os, ok := sys.(*syscall.Dir); ok {
			// Plan 9 doesn't have a CreatedAt field.
			e.CreatedAt = time.Unix(int64(os.Mtime), 0)

			e.Dev = uint32(os.Dev)

			// Plan 9 has no Inode.
			// ext2srv(4) appears to store Inode in Qid.Path.
			e.Inode = uint32(os.Qid.Path)

			// Plan 9 has string UID/GID
			e.GID = 0
			e.UID = 0
		}
	}
}

func isSymlinkWindowsNonAdmin(err error) bool {
	return true
}
 070701000005CB000081A4000000000000000000000001645E367C00003E04000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/worktree_status.go package git

import (
	"bytes"
	"errors"
	"io"
	"os"
	"path"
	"path/filepath"
	"strings"

	"github.com/go-git/go-billy/v5/util"
	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/filemode"
	"github.com/go-git/go-git/v5/plumbing/format/gitignore"
	"github.com/go-git/go-git/v5/plumbing/format/index"
	"github.com/go-git/go-git/v5/plumbing/object"
	"github.com/go-git/go-git/v5/utils/ioutil"
	"github.com/go-git/go-git/v5/utils/merkletrie"
	"github.com/go-git/go-git/v5/utils/merkletrie/filesystem"
	mindex "github.com/go-git/go-git/v5/utils/merkletrie/index"
	"github.com/go-git/go-git/v5/utils/merkletrie/noder"
)

var (
	// ErrDestinationExists in an Move operation means that the target exists on
	// the worktree.
	ErrDestinationExists = errors.New("destination exists")
	// ErrGlobNoMatches in an AddGlob if the glob pattern does not match any
	// files in the worktree.
	ErrGlobNoMatches = errors.New("glob pattern did not match any files")
)

// Status returns the working tree status.
func (w *Worktree) Status() (Status, error) {
	var hash plumbing.Hash

	ref, err := w.r.Head()
	if err != nil && err != plumbing.ErrReferenceNotFound {
		return nil, err
	}

	if err == nil {
		hash = ref.Hash()
	}

	return w.status(hash)
}

func (w *Worktree) status(commit plumbing.Hash) (Status, error) {
	s := make(Status)

	left, err := w.diffCommitWithStaging(commit, false)
	if err != nil {
		return nil, err
	}

	for _, ch := range left {
		a, err := ch.Action()
		if err != nil {
			return nil, err
		}

		fs := s.File(nameFromAction(&ch))
		fs.Worktree = Unmodified

		switch a {
		case merkletrie.Delete:
			s.File(ch.From.String()).Staging = Deleted
		case merkletrie.Insert:
			s.File(ch.To.String()).Staging = Added
		case merkletrie.Modify:
			s.File(ch.To.String()).Staging = Modified
		}
	}

	right, err := w.diffStagingWithWorktree(false)
	if err != nil {
		return nil, err
	}

	for _, ch := range right {
		a, err := ch.Action()
		if err != nil {
			return nil, err
		}

		fs := s.File(nameFromAction(&ch))
		if fs.Staging == Untracked {
			fs.Staging = Unmodified
		}

		switch a {
		case merkletrie.Delete:
			fs.Worktree = Deleted
		case merkletrie.Insert:
			fs.Worktree = Untracked
			fs.Staging = Untracked
		case merkletrie.Modify:
			fs.Worktree = Modified
		}
	}

	return s, nil
}

func nameFromAction(ch *merkletrie.Change) string {
	name := ch.To.String()
	if name == "" {
		return ch.From.String()
	}

	return name
}

func (w *Worktree) diffStagingWithWorktree(reverse bool) (merkletrie.Changes, error) {
	idx, err := w.r.Storer.Index()
	if err != nil {
		return nil, err
	}

	from := mindex.NewRootNode(idx)
	submodules, err := w.getSubmodulesStatus()
	if err != nil {
		return nil, err
	}

	to := filesystem.NewRootNode(w.Filesystem, submodules)

	var c merkletrie.Changes
	if reverse {
		c, err = merkletrie.DiffTree(to, from, diffTreeIsEquals)
	} else {
		c, err = merkletrie.DiffTree(from, to, diffTreeIsEquals)
	}

	if err != nil {
		return nil, err
	}

	return w.excludeIgnoredChanges(c), nil
}

func (w *Worktree) excludeIgnoredChanges(changes merkletrie.Changes) merkletrie.Changes {
	patterns, err := gitignore.ReadPatterns(w.Filesystem, nil)
	if err != nil {
		return changes
	}

	patterns = append(patterns, w.Excludes...)

	if len(patterns) == 0 {
		return changes
	}

	m := gitignore.NewMatcher(patterns)

	var res merkletrie.Changes
	for _, ch := range changes {
		var path []string
		for _, n := range ch.To {
			path = append(path, n.Name())
		}
		if len(path) == 0 {
			for _, n := range ch.From {
				path = append(path, n.Name())
			}
		}
		if len(path) != 0 {
			isDir := (len(ch.To) > 0 && ch.To.IsDir()) || (len(ch.From) > 0 && ch.From.IsDir())
			if m.Match(path, isDir) {
				continue
			}
		}
		res = append(res, ch)
	}
	return res
}

func (w *Worktree) getSubmodulesStatus() (map[string]plumbing.Hash, error) {
	o := map[string]plumbing.Hash{}

	sub, err := w.Submodules()
	if err != nil {
		return nil, err
	}

	status, err := sub.Status()
	if err != nil {
		return nil, err
	}

	for _, s := range status {
		if s.Current.IsZero() {
			o[s.Path] = s.Expected
			continue
		}

		o[s.Path] = s.Current
	}

	return o, nil
}

func (w *Worktree) diffCommitWithStaging(commit plumbing.Hash, reverse bool) (merkletrie.Changes, error) {
	var t *object.Tree
	if !commit.IsZero() {
		c, err := w.r.CommitObject(commit)
		if err != nil {
			return nil, err
		}

		t, err = c.Tree()
		if err != nil {
			return nil, err
		}
	}

	return w.diffTreeWithStaging(t, reverse)
}

func (w *Worktree) diffTreeWithStaging(t *object.Tree, reverse bool) (merkletrie.Changes, error) {
	var from noder.Noder
	if t != nil {
		from = object.NewTreeRootNode(t)
	}

	idx, err := w.r.Storer.Index()
	if err != nil {
		return nil, err
	}

	to := mindex.NewRootNode(idx)

	if reverse {
		return merkletrie.DiffTree(to, from, diffTreeIsEquals)
	}

	return merkletrie.DiffTree(from, to, diffTreeIsEquals)
}

var emptyNoderHash = make([]byte, 24)

// diffTreeIsEquals is a implementation of noder.Equals, used to compare
// noder.Noder, it compare the content and the length of the hashes.
//
// Since some of the noder.Noder implementations doesn't compute a hash for
// some directories, if any of the hashes is a 24-byte slice of zero values
// the comparison is not done and the hashes are take as different.
func diffTreeIsEquals(a, b noder.Hasher) bool {
	hashA := a.Hash()
	hashB := b.Hash()

	if bytes.Equal(hashA, emptyNoderHash) || bytes.Equal(hashB, emptyNoderHash) {
		return false
	}

	return bytes.Equal(hashA, hashB)
}

// Add adds the file contents of a file in the worktree to the index. if the
// file is already staged in the index no error is returned. If a file deleted
// from the Workspace is given, the file is removed from the index. If a
// directory given, adds the files and all his sub-directories recursively in
// the worktree to the index. If any of the files is already staged in the index
// no error is returned. When path is a file, the blob.Hash is returned.
func (w *Worktree) Add(path string) (plumbing.Hash, error) {
	// TODO(mcuadros): deprecate in favor of AddWithOption in v6.
	return w.doAdd(path, make([]gitignore.Pattern, 0))
}

func (w *Worktree) doAddDirectory(idx *index.Index, s Status, directory string, ignorePattern []gitignore.Pattern) (added bool, err error) {
	files, err := w.Filesystem.ReadDir(directory)
	if err != nil {
		return false, err
	}
	if len(ignorePattern) > 0 {
		m := gitignore.NewMatcher(ignorePattern)
		matchPath := strings.Split(directory, string(os.PathSeparator))
		if m.Match(matchPath, true) {
			// ignore
			return false, nil
		}
	}

	for _, file := range files {
		name := path.Join(directory, file.Name())

		var a bool
		if file.IsDir() {
			if file.Name() == GitDirName {
				// ignore special git directory
				continue
			}
			a, err = w.doAddDirectory(idx, s, name, ignorePattern)
		} else {
			a, _, err = w.doAddFile(idx, s, name, ignorePattern)
		}

		if err != nil {
			return
		}

		if !added && a {
			added = true
		}
	}

	return
}

// AddWithOptions file contents to the index,  updates the index using the
// current content found in the working tree, to prepare the content staged for
// the next commit.
//
// It typically adds the current content of existing paths as a whole, but with
// some options it can also be used to add content with only part of the changes
// made to the working tree files applied, or remove paths that do not exist in
// the working tree anymore.
func (w *Worktree) AddWithOptions(opts *AddOptions) error {
	if err := opts.Validate(w.r); err != nil {
		return err
	}

	if opts.All {
		_, err := w.doAdd(".", w.Excludes)
		return err
	}

	if opts.Glob != "" {
		return w.AddGlob(opts.Glob)
	}

	_, err := w.Add(opts.Path)
	return err
}

func (w *Worktree) doAdd(path string, ignorePattern []gitignore.Pattern) (plumbing.Hash, error) {
	s, err := w.Status()
	if err != nil {
		return plumbing.ZeroHash, err
	}

	idx, err := w.r.Storer.Index()
	if err != nil {
		return plumbing.ZeroHash, err
	}

	var h plumbing.Hash
	var added bool

	fi, err := w.Filesystem.Lstat(path)
	if err != nil || !fi.IsDir() {
		added, h, err = w.doAddFile(idx, s, path, ignorePattern)
	} else {
		added, err = w.doAddDirectory(idx, s, path, ignorePattern)
	}

	if err != nil {
		return h, err
	}

	if !added {
		return h, nil
	}

	return h, w.r.Storer.SetIndex(idx)
}

// AddGlob adds all paths, matching pattern, to the index. If pattern matches a
// directory path, all directory contents are added to the index recursively. No
// error is returned if all matching paths are already staged in index.
func (w *Worktree) AddGlob(pattern string) error {
	// TODO(mcuadros): deprecate in favor of AddWithOption in v6.
	files, err := util.Glob(w.Filesystem, pattern)
	if err != nil {
		return err
	}

	if len(files) == 0 {
		return ErrGlobNoMatches
	}

	s, err := w.Status()
	if err != nil {
		return err
	}

	idx, err := w.r.Storer.Index()
	if err != nil {
		return err
	}

	var saveIndex bool
	for _, file := range files {
		fi, err := w.Filesystem.Lstat(file)
		if err != nil {
			return err
		}

		var added bool
		if fi.IsDir() {
			added, err = w.doAddDirectory(idx, s, file, make([]gitignore.Pattern, 0))
		} else {
			added, _, err = w.doAddFile(idx, s, file, make([]gitignore.Pattern, 0))
		}

		if err != nil {
			return err
		}

		if !saveIndex && added {
			saveIndex = true
		}
	}

	if saveIndex {
		return w.r.Storer.SetIndex(idx)
	}

	return nil
}

// doAddFile create a new blob from path and update the index, added is true if
// the file added is different from the index.
func (w *Worktree) doAddFile(idx *index.Index, s Status, path string, ignorePattern []gitignore.Pattern) (added bool, h plumbing.Hash, err error) {
	if s.File(path).Worktree == Unmodified {
		return false, h, nil
	}
	if len(ignorePattern) > 0 {
		m := gitignore.NewMatcher(ignorePattern)
		matchPath := strings.Split(path, string(os.PathSeparator))
		if m.Match(matchPath, true) {
			// ignore
			return false, h, nil
		}
	}

	h, err = w.copyFileToStorage(path)
	if err != nil {
		if os.IsNotExist(err) {
			added = true
			h, err = w.deleteFromIndex(idx, path)
		}

		return
	}

	if err := w.addOrUpdateFileToIndex(idx, path, h); err != nil {
		return false, h, err
	}

	return true, h, err
}

func (w *Worktree) copyFileToStorage(path string) (hash plumbing.Hash, err error) {
	fi, err := w.Filesystem.Lstat(path)
	if err != nil {
		return plumbing.ZeroHash, err
	}

	obj := w.r.Storer.NewEncodedObject()
	obj.SetType(plumbing.BlobObject)
	obj.SetSize(fi.Size())

	writer, err := obj.Writer()
	if err != nil {
		return plumbing.ZeroHash, err
	}

	defer ioutil.CheckClose(writer, &err)

	if fi.Mode()&os.ModeSymlink != 0 {
		err = w.fillEncodedObjectFromSymlink(writer, path, fi)
	} else {
		err = w.fillEncodedObjectFromFile(writer, path, fi)
	}

	if err != nil {
		return plumbing.ZeroHash, err
	}

	return w.r.Storer.SetEncodedObject(obj)
}

func (w *Worktree) fillEncodedObjectFromFile(dst io.Writer, path string, fi os.FileInfo) (err error) {
	src, err := w.Filesystem.Open(path)
	if err != nil {
		return err
	}

	defer ioutil.CheckClose(src, &err)

	if _, err := io.Copy(dst, src); err != nil {
		return err
	}

	return err
}

func (w *Worktree) fillEncodedObjectFromSymlink(dst io.Writer, path string, fi os.FileInfo) error {
	target, err := w.Filesystem.Readlink(path)
	if err != nil {
		return err
	}

	_, err = dst.Write([]byte(target))
	return err
}

func (w *Worktree) addOrUpdateFileToIndex(idx *index.Index, filename string, h plumbing.Hash) error {
	e, err := idx.Entry(filename)
	if err != nil && err != index.ErrEntryNotFound {
		return err
	}

	if err == index.ErrEntryNotFound {
		return w.doAddFileToIndex(idx, filename, h)
	}

	return w.doUpdateFileToIndex(e, filename, h)
}

func (w *Worktree) doAddFileToIndex(idx *index.Index, filename string, h plumbing.Hash) error {
	return w.doUpdateFileToIndex(idx.Add(filename), filename, h)
}

func (w *Worktree) doUpdateFileToIndex(e *index.Entry, filename string, h plumbing.Hash) error {
	info, err := w.Filesystem.Lstat(filename)
	if err != nil {
		return err
	}

	e.Hash = h
	e.ModifiedAt = info.ModTime()
	e.Mode, err = filemode.NewFromOSFileMode(info.Mode())
	if err != nil {
		return err
	}

	if e.Mode.IsRegular() {
		e.Size = uint32(info.Size())
	}

	fillSystemInfo(e, info.Sys())
	return nil
}

// Remove removes files from the working tree and from the index.
func (w *Worktree) Remove(path string) (plumbing.Hash, error) {
	// TODO(mcuadros): remove plumbing.Hash from signature at v5.
	idx, err := w.r.Storer.Index()
	if err != nil {
		return plumbing.ZeroHash, err
	}

	var h plumbing.Hash

	fi, err := w.Filesystem.Lstat(path)
	if err != nil || !fi.IsDir() {
		h, err = w.doRemoveFile(idx, path)
	} else {
		_, err = w.doRemoveDirectory(idx, path)
	}
	if err != nil {
		return h, err
	}

	return h, w.r.Storer.SetIndex(idx)
}

func (w *Worktree) doRemoveDirectory(idx *index.Index, directory string) (removed bool, err error) {
	files, err := w.Filesystem.ReadDir(directory)
	if err != nil {
		return false, err
	}

	for _, file := range files {
		name := path.Join(directory, file.Name())

		var r bool
		if file.IsDir() {
			r, err = w.doRemoveDirectory(idx, name)
		} else {
			_, err = w.doRemoveFile(idx, name)
			if err == index.ErrEntryNotFound {
				err = nil
			}
		}

		if err != nil {
			return
		}

		if !removed && r {
			removed = true
		}
	}

	err = w.removeEmptyDirectory(directory)
	return
}

func (w *Worktree) removeEmptyDirectory(path string) error {
	files, err := w.Filesystem.ReadDir(path)
	if err != nil {
		return err
	}

	if len(files) != 0 {
		return nil
	}

	return w.Filesystem.Remove(path)
}

func (w *Worktree) doRemoveFile(idx *index.Index, path string) (plumbing.Hash, error) {
	hash, err := w.deleteFromIndex(idx, path)
	if err != nil {
		return plumbing.ZeroHash, err
	}

	return hash, w.deleteFromFilesystem(path)
}

func (w *Worktree) deleteFromIndex(idx *index.Index, path string) (plumbing.Hash, error) {
	e, err := idx.Remove(path)
	if err != nil {
		return plumbing.ZeroHash, err
	}

	return e.Hash, nil
}

func (w *Worktree) deleteFromFilesystem(path string) error {
	err := w.Filesystem.Remove(path)
	if os.IsNotExist(err) {
		return nil
	}

	return err
}

// RemoveGlob removes all paths, matching pattern, from the index. If pattern
// matches a directory path, all directory contents are removed from the index
// recursively.
func (w *Worktree) RemoveGlob(pattern string) error {
	idx, err := w.r.Storer.Index()
	if err != nil {
		return err
	}

	entries, err := idx.Glob(pattern)
	if err != nil {
		return err
	}

	for _, e := range entries {
		file := filepath.FromSlash(e.Name)
		if _, err := w.Filesystem.Lstat(file); err != nil && !os.IsNotExist(err) {
			return err
		}

		if _, err := w.doRemoveFile(idx, file); err != nil {
			return err
		}

		dir, _ := filepath.Split(file)
		if err := w.removeEmptyDirectory(dir); err != nil {
			return err
		}
	}

	return w.r.Storer.SetIndex(idx)
}

// Move moves or rename a file in the worktree and the index, directories are
// not supported.
func (w *Worktree) Move(from, to string) (plumbing.Hash, error) {
	// TODO(mcuadros): support directories and/or implement support for glob
	if _, err := w.Filesystem.Lstat(from); err != nil {
		return plumbing.ZeroHash, err
	}

	if _, err := w.Filesystem.Lstat(to); err == nil {
		return plumbing.ZeroHash, ErrDestinationExists
	}

	idx, err := w.r.Storer.Index()
	if err != nil {
		return plumbing.ZeroHash, err
	}

	hash, err := w.deleteFromIndex(idx, from)
	if err != nil {
		return plumbing.ZeroHash, err
	}

	if err := w.Filesystem.Rename(from, to); err != nil {
		return hash, err
	}

	if err := w.addOrUpdateFileToIndex(idx, to, hash); err != nil {
		return hash, err
	}

	return hash, w.r.Storer.SetIndex(idx)
}
070701000005CC000081A4000000000000000000000001645E367C000001E2000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/worktree_unix_other.go // +build openbsd dragonfly solaris

package git

import (
	"syscall"
	"time"

	"github.com/go-git/go-git/v5/plumbing/format/index"
)

func init() {
	fillSystemInfo = func(e *index.Entry, sys interface{}) {
		if os, ok := sys.(*syscall.Stat_t); ok {
			e.CreatedAt = time.Unix(int64(os.Atim.Sec), int64(os.Atim.Nsec))
			e.Dev = uint32(os.Dev)
			e.Inode = uint32(os.Ino)
			e.GID = os.Gid
			e.UID = os.Uid
		}
	}
}

func isSymlinkWindowsNonAdmin(err error) bool {
	return false
}
  070701000005CD000081A4000000000000000000000001645E367C000002DB000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/go-git/go-git/v5/worktree_windows.go    // +build windows

package git

import (
	"os"
	"syscall"
	"time"

	"github.com/go-git/go-git/v5/plumbing/format/index"
)

func init() {
	fillSystemInfo = func(e *index.Entry, sys interface{}) {
		if os, ok := sys.(*syscall.Win32FileAttributeData); ok {
			seconds := os.CreationTime.Nanoseconds() / 1000000000
			nanoseconds := os.CreationTime.Nanoseconds() - seconds*1000000000
			e.CreatedAt = time.Unix(seconds, nanoseconds)
		}
	}
}

func isSymlinkWindowsNonAdmin(err error) bool {
	const ERROR_PRIVILEGE_NOT_HELD syscall.Errno = 1314

	if err != nil {
		if errLink, ok := err.(*os.LinkError); ok {
			if errNo, ok := errLink.Err.(syscall.Errno); ok {
				return errNo == ERROR_PRIVILEGE_NOT_HELD
			}
		}
	}

	return false
}
 070701000005CE000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002E00000000elemental-cli-0.3.1/vendor/github.com/go-logr 070701000005CF000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003300000000elemental-cli-0.3.1/vendor/github.com/go-logr/logr    070701000005D0000081A4000000000000000000000001645E367C000001A9000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/go-logr/logr/.golangci.yaml run:
  timeout: 1m
  tests: true

linters:
  disable-all: true
  enable:
    - asciicheck
    - deadcode
    - errcheck
    - forcetypeassert
    - gocritic
    - gofmt
    - goimports
    - gosimple
    - govet
    - ineffassign
    - misspell
    - revive
    - staticcheck
    - structcheck
    - typecheck
    - unused
    - varcheck

issues:
  exclude-use-default: false
  max-issues-per-linter: 0
  max-same-issues: 10
   070701000005D1000081A4000000000000000000000001645E367C0000008C000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/go-logr/logr/CHANGELOG.md   # CHANGELOG

## v1.0.0-rc1

This is the first logged release.  Major changes (including breaking changes)
have occurred since earlier tags.
070701000005D2000081A4000000000000000000000001645E367C00000243000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/go-logr/logr/CONTRIBUTING.md    # Contributing

Logr is open to pull-requests, provided they fit within the intended scope of
the project.  Specifically, this library aims to be VERY small and minimalist,
with no external dependencies.

## Compatibility

This project intends to follow [semantic versioning](http://semver.org) and
is very strict about compatibility.  Any proposed changes MUST follow those
rules.

## Performance

As a logging library, logr must be as light-weight as possible.  Any proposed
code change must include results of running the [benchmark](./benchmark)
before and after the change.
 070701000005D3000081A4000000000000000000000001645E367C00002C5D000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/go-logr/logr/LICENSE                                     Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "{}"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright {yyyy} {name of copyright owner}

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
   070701000005D4000081A4000000000000000000000001645E367C00002FF8000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/go-logr/logr/README.md  # A minimal logging API for Go

[![Go Reference](https://pkg.go.dev/badge/github.com/go-logr/logr.svg)](https://pkg.go.dev/github.com/go-logr/logr)

logr offers an(other) opinion on how Go programs and libraries can do logging
without becoming coupled to a particular logging implementation.  This is not
an implementation of logging - it is an API.  In fact it is two APIs with two
different sets of users.

The `Logger` type is intended for application and library authors.  It provides
a relatively small API which can be used everywhere you want to emit logs.  It
defers the actual act of writing logs (to files, to stdout, or whatever) to the
`LogSink` interface.

The `LogSink` interface is intended for logging library implementers.  It is a
pure interface which can be implemented by logging frameworks to provide the actual logging
functionality.

This decoupling allows application and library developers to write code in
terms of `logr.Logger` (which has very low dependency fan-out) while the
implementation of logging is managed "up stack" (e.g. in or near `main()`.)
Application developers can then switch out implementations as necessary.

Many people assert that libraries should not be logging, and as such efforts
like this are pointless.  Those people are welcome to convince the authors of
the tens-of-thousands of libraries that *DO* write logs that they are all
wrong.  In the meantime, logr takes a more practical approach.

## Typical usage

Somewhere, early in an application's life, it will make a decision about which
logging library (implementation) it actually wants to use.  Something like:

```
    func main() {
        // ... other setup code ...

        // Create the "root" logger.  We have chosen the "logimpl" implementation,
        // which takes some initial parameters and returns a logr.Logger.
        logger := logimpl.New(param1, param2)

        // ... other setup code ...
```

Most apps will call into other libraries, create structures to govern the flow,
etc.  The `logr.Logger` object can be passed to these other libraries, stored
in structs, or even used as a package-global variable, if needed.  For example:

```
    app := createTheAppObject(logger)
    app.Run()
```

Outside of this early setup, no other packages need to know about the choice of
implementation.  They write logs in terms of the `logr.Logger` that they
received:

```
    type appObject struct {
        // ... other fields ...
        logger logr.Logger
        // ... other fields ...
    }

    func (app *appObject) Run() {
        app.logger.Info("starting up", "timestamp", time.Now())

        // ... app code ...
```

## Background

If the Go standard library had defined an interface for logging, this project
probably would not be needed.  Alas, here we are.

### Inspiration

Before you consider this package, please read [this blog post by the
inimitable Dave Cheney][warning-makes-no-sense].  We really appreciate what
he has to say, and it largely aligns with our own experiences.

### Differences from Dave's ideas

The main differences are:

1. Dave basically proposes doing away with the notion of a logging API in favor
of `fmt.Printf()`.  We disagree, especially when you consider things like output
locations, timestamps, file and line decorations, and structured logging.  This
package restricts the logging API to just 2 types of logs: info and error.

Info logs are things you want to tell the user which are not errors.  Error
logs are, well, errors.  If your code receives an `error` from a subordinate
function call and is logging that `error` *and not returning it*, use error
logs.

2. Verbosity-levels on info logs.  This gives developers a chance to indicate
arbitrary grades of importance for info logs, without assigning names with
semantic meaning such as "warning", "trace", and "debug."  Superficially this
may feel very similar, but the primary difference is the lack of semantics.
Because verbosity is a numerical value, it's safe to assume that an app running
with higher verbosity means more (and less important) logs will be generated.

## Implementations (non-exhaustive)

There are implementations for the following logging libraries:

- **a function** (can bridge to non-structured libraries): [funcr](https://github.com/go-logr/logr/tree/master/funcr)
- **a testing.T** (for use in Go tests, with JSON-like output): [testr](https://github.com/go-logr/logr/tree/master/testr)
- **github.com/google/glog**: [glogr](https://github.com/go-logr/glogr)
- **k8s.io/klog** (for Kubernetes): [klogr](https://git.k8s.io/klog/klogr)
- **a testing.T** (with klog-like text output): [ktesting](https://git.k8s.io/klog/ktesting)
- **go.uber.org/zap**: [zapr](https://github.com/go-logr/zapr)
- **log** (the Go standard library logger): [stdr](https://github.com/go-logr/stdr)
- **github.com/sirupsen/logrus**: [logrusr](https://github.com/bombsimon/logrusr)
- **github.com/wojas/genericr**: [genericr](https://github.com/wojas/genericr) (makes it easy to implement your own backend)
- **logfmt** (Heroku style [logging](https://www.brandur.org/logfmt)): [logfmtr](https://github.com/iand/logfmtr)
- **github.com/rs/zerolog**: [zerologr](https://github.com/go-logr/zerologr)
- **github.com/go-kit/log**: [gokitlogr](https://github.com/tonglil/gokitlogr) (also compatible with github.com/go-kit/kit/log since v0.12.0)
- **bytes.Buffer** (writing to a buffer): [bufrlogr](https://github.com/tonglil/buflogr) (useful for ensuring values were logged, like during testing)

## FAQ

### Conceptual

#### Why structured logging?

- **Structured logs are more easily queryable**: Since you've got
  key-value pairs, it's much easier to query your structured logs for
  particular values by filtering on the contents of a particular key --
  think searching request logs for error codes, Kubernetes reconcilers for
  the name and namespace of the reconciled object, etc.

- **Structured logging makes it easier to have cross-referenceable logs**:
  Similarly to searchability, if you maintain conventions around your
  keys, it becomes easy to gather all log lines related to a particular
  concept.

- **Structured logs allow better dimensions of filtering**: if you have
  structure to your logs, you've got more precise control over how much
  information is logged -- you might choose in a particular configuration
  to log certain keys but not others, only log lines where a certain key
  matches a certain value, etc., instead of just having v-levels and names
  to key off of.

- **Structured logs better represent structured data**: sometimes, the
  data that you want to log is inherently structured (think tuple-link
  objects.)  Structured logs allow you to preserve that structure when
  outputting.

#### Why V-levels?

**V-levels give operators an easy way to control the chattiness of log
operations**.  V-levels provide a way for a given package to distinguish
the relative importance or verbosity of a given log message.  Then, if
a particular logger or package is logging too many messages, the user
of the package can simply change the v-levels for that library.

#### Why not named levels, like Info/Warning/Error?

Read [Dave Cheney's post][warning-makes-no-sense].  Then read [Differences
from Dave's ideas](#differences-from-daves-ideas).

#### Why not allow format strings, too?

**Format strings negate many of the benefits of structured logs**:

- They're not easily searchable without resorting to fuzzy searching,
  regular expressions, etc.

- They don't store structured data well, since contents are flattened into
  a string.

- They're not cross-referenceable.

- They don't compress easily, since the message is not constant.

(Unless you turn positional parameters into key-value pairs with numerical
keys, at which point you've gotten key-value logging with meaningless
keys.)

### Practical

#### Why key-value pairs, and not a map?

Key-value pairs are *much* easier to optimize, especially around
allocations.  Zap (a structured logger that inspired logr's interface) has
[performance measurements](https://github.com/uber-go/zap#performance)
that show this quite nicely.

While the interface ends up being a little less obvious, you get
potentially better performance, plus avoid making users type
`map[string]string{}` every time they want to log.

#### What if my V-levels differ between libraries?

That's fine.  Control your V-levels on a per-logger basis, and use the
`WithName` method to pass different loggers to different libraries.

Generally, you should take care to ensure that you have relatively
consistent V-levels within a given logger, however, as this makes deciding
on what verbosity of logs to request easier.

#### But I really want to use a format string!

That's not actually a question.  Assuming your question is "how do
I convert my mental model of logging with format strings to logging with
constant messages":

1. Figure out what the error actually is, as you'd write in a TL;DR style,
   and use that as a message.

2. For every place you'd write a format specifier, look to the word before
   it, and add that as a key value pair.

For instance, consider the following examples (all taken from spots in the
Kubernetes codebase):

- `klog.V(4).Infof("Client is returning errors: code %v, error %v",
  responseCode, err)` becomes `logger.Error(err, "client returned an
  error", "code", responseCode)`

- `klog.V(4).Infof("Got a Retry-After %ds response for attempt %d to %v",
  seconds, retries, url)` becomes `logger.V(4).Info("got a retry-after
  response when requesting url", "attempt", retries, "after
  seconds", seconds, "url", url)`

If you *really* must use a format string, use it in a key's value, and
call `fmt.Sprintf` yourself.  For instance: `log.Printf("unable to
reflect over type %T")` becomes `logger.Info("unable to reflect over
type", "type", fmt.Sprintf("%T"))`.  In general though, the cases where
this is necessary should be few and far between.

#### How do I choose my V-levels?

This is basically the only hard constraint: increase V-levels to denote
more verbose or more debug-y logs.

Otherwise, you can start out with `0` as "you always want to see this",
`1` as "common logging that you might *possibly* want to turn off", and
`10` as "I would like to performance-test your log collection stack."

Then gradually choose levels in between as you need them, working your way
down from 10 (for debug and trace style logs) and up from 1 (for chattier
info-type logs.)

#### How do I choose my keys?

Keys are fairly flexible, and can hold more or less any string
value. For best compatibility with implementations and consistency
with existing code in other projects, there are a few conventions you
should consider.

- Make your keys human-readable.
- Constant keys are generally a good idea.
- Be consistent across your codebase.
- Keys should naturally match parts of the message string.
- Use lower case for simple keys and
  [lowerCamelCase](https://en.wiktionary.org/wiki/lowerCamelCase) for
  more complex ones. Kubernetes is one example of a project that has
  [adopted that
  convention](https://github.com/kubernetes/community/blob/HEAD/contributors/devel/sig-instrumentation/migration-to-structured-logging.md#name-arguments).

While key names are mostly unrestricted (and spaces are acceptable),
it's generally a good idea to stick to printable ascii characters, or at
least match the general character set of your log lines.

#### Why should keys be constant values?

The point of structured logging is to make later log processing easier.  Your
keys are, effectively, the schema of each log message.  If you use different
keys across instances of the same log line, you will make your structured logs
much harder to use.  `Sprintf()` is for values, not for keys!

#### Why is this not a pure interface?

The Logger type is implemented as a struct in order to allow the Go compiler to
optimize things like high-V `Info` logs that are not triggered.  Not all of
these implementations are implemented yet, but this structure was suggested as
a way to ensure they *can* be implemented.  All of the real work is behind the
`LogSink` interface.

[warning-makes-no-sense]: http://dave.cheney.net/2015/11/05/lets-talk-about-logging
070701000005D5000081A4000000000000000000000001645E367C00000590000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/go-logr/logr/discard.go /*
Copyright 2020 The logr Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package logr

// Discard returns a Logger that discards all messages logged to it.  It can be
// used whenever the caller is not interested in the logs.  Logger instances
// produced by this function always compare as equal.
func Discard() Logger {
	return Logger{
		level: 0,
		sink:  discardLogSink{},
	}
}

// discardLogSink is a LogSink that discards all messages.
type discardLogSink struct{}

// Verify that it actually implements the interface
var _ LogSink = discardLogSink{}

func (l discardLogSink) Init(RuntimeInfo) {
}

func (l discardLogSink) Enabled(int) bool {
	return false
}

func (l discardLogSink) Info(int, string, ...interface{}) {
}

func (l discardLogSink) Error(error, string, ...interface{}) {
}

func (l discardLogSink) WithValues(...interface{}) LogSink {
	return l
}

func (l discardLogSink) WithName(string) LogSink {
	return l
}
070701000005D6000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/go-logr/logr/funcr  070701000005D7000081A4000000000000000000000001645E367C00005CE6000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/go-logr/logr/funcr/funcr.go /*
Copyright 2021 The logr Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

// Package funcr implements formatting of structured log messages and
// optionally captures the call site and timestamp.
//
// The simplest way to use it is via its implementation of a
// github.com/go-logr/logr.LogSink with output through an arbitrary
// "write" function.  See New and NewJSON for details.
//
// Custom LogSinks
//
// For users who need more control, a funcr.Formatter can be embedded inside
// your own custom LogSink implementation. This is useful when the LogSink
// needs to implement additional methods, for example.
//
// Formatting
//
// This will respect logr.Marshaler, fmt.Stringer, and error interfaces for
// values which are being logged.  When rendering a struct, funcr will use Go's
// standard JSON tags (all except "string").
package funcr

import (
	"bytes"
	"encoding"
	"fmt"
	"path/filepath"
	"reflect"
	"runtime"
	"strconv"
	"strings"
	"time"

	"github.com/go-logr/logr"
)

// New returns a logr.Logger which is implemented by an arbitrary function.
func New(fn func(prefix, args string), opts Options) logr.Logger {
	return logr.New(newSink(fn, NewFormatter(opts)))
}

// NewJSON returns a logr.Logger which is implemented by an arbitrary function
// and produces JSON output.
func NewJSON(fn func(obj string), opts Options) logr.Logger {
	fnWrapper := func(_, obj string) {
		fn(obj)
	}
	return logr.New(newSink(fnWrapper, NewFormatterJSON(opts)))
}

// Underlier exposes access to the underlying logging function. Since
// callers only have a logr.Logger, they have to know which
// implementation is in use, so this interface is less of an
// abstraction and more of a way to test type conversion.
type Underlier interface {
	GetUnderlying() func(prefix, args string)
}

func newSink(fn func(prefix, args string), formatter Formatter) logr.LogSink {
	l := &fnlogger{
		Formatter: formatter,
		write:     fn,
	}
	// For skipping fnlogger.Info and fnlogger.Error.
	l.Formatter.AddCallDepth(1)
	return l
}

// Options carries parameters which influence the way logs are generated.
type Options struct {
	// LogCaller tells funcr to add a "caller" key to some or all log lines.
	// This has some overhead, so some users might not want it.
	LogCaller MessageClass

	// LogCallerFunc tells funcr to also log the calling function name.  This
	// has no effect if caller logging is not enabled (see Options.LogCaller).
	LogCallerFunc bool

	// LogTimestamp tells funcr to add a "ts" key to log lines.  This has some
	// overhead, so some users might not want it.
	LogTimestamp bool

	// TimestampFormat tells funcr how to render timestamps when LogTimestamp
	// is enabled.  If not specified, a default format will be used.  For more
	// details, see docs for Go's time.Layout.
	TimestampFormat string

	// Verbosity tells funcr which V logs to produce.  Higher values enable
	// more logs.  Info logs at or below this level will be written, while logs
	// above this level will be discarded.
	Verbosity int

	// RenderBuiltinsHook allows users to mutate the list of key-value pairs
	// while a log line is being rendered.  The kvList argument follows logr
	// conventions - each pair of slice elements is comprised of a string key
	// and an arbitrary value (verified and sanitized before calling this
	// hook).  The value returned must follow the same conventions.  This hook
	// can be used to audit or modify logged data.  For example, you might want
	// to prefix all of funcr's built-in keys with some string.  This hook is
	// only called for built-in (provided by funcr itself) key-value pairs.
	// Equivalent hooks are offered for key-value pairs saved via
	// logr.Logger.WithValues or Formatter.AddValues (see RenderValuesHook) and
	// for user-provided pairs (see RenderArgsHook).
	RenderBuiltinsHook func(kvList []interface{}) []interface{}

	// RenderValuesHook is the same as RenderBuiltinsHook, except that it is
	// only called for key-value pairs saved via logr.Logger.WithValues.  See
	// RenderBuiltinsHook for more details.
	RenderValuesHook func(kvList []interface{}) []interface{}

	// RenderArgsHook is the same as RenderBuiltinsHook, except that it is only
	// called for key-value pairs passed directly to Info and Error.  See
	// RenderBuiltinsHook for more details.
	RenderArgsHook func(kvList []interface{}) []interface{}

	// MaxLogDepth tells funcr how many levels of nested fields (e.g. a struct
	// that contains a struct, etc.) it may log.  Every time it finds a struct,
	// slice, array, or map the depth is increased by one.  When the maximum is
	// reached, the value will be converted to a string indicating that the max
	// depth has been exceeded.  If this field is not specified, a default
	// value will be used.
	MaxLogDepth int
}

// MessageClass indicates which category or categories of messages to consider.
type MessageClass int

const (
	// None ignores all message classes.
	None MessageClass = iota
	// All considers all message classes.
	All
	// Info only considers info messages.
	Info
	// Error only considers error messages.
	Error
)

// fnlogger inherits some of its LogSink implementation from Formatter
// and just needs to add some glue code.
type fnlogger struct {
	Formatter
	write func(prefix, args string)
}

func (l fnlogger) WithName(name string) logr.LogSink {
	l.Formatter.AddName(name)
	return &l
}

func (l fnlogger) WithValues(kvList ...interface{}) logr.LogSink {
	l.Formatter.AddValues(kvList)
	return &l
}

func (l fnlogger) WithCallDepth(depth int) logr.LogSink {
	l.Formatter.AddCallDepth(depth)
	return &l
}

func (l fnlogger) Info(level int, msg string, kvList ...interface{}) {
	prefix, args := l.FormatInfo(level, msg, kvList)
	l.write(prefix, args)
}

func (l fnlogger) Error(err error, msg string, kvList ...interface{}) {
	prefix, args := l.FormatError(err, msg, kvList)
	l.write(prefix, args)
}

func (l fnlogger) GetUnderlying() func(prefix, args string) {
	return l.write
}

// Assert conformance to the interfaces.
var _ logr.LogSink = &fnlogger{}
var _ logr.CallDepthLogSink = &fnlogger{}
var _ Underlier = &fnlogger{}

// NewFormatter constructs a Formatter which emits a JSON-like key=value format.
func NewFormatter(opts Options) Formatter {
	return newFormatter(opts, outputKeyValue)
}

// NewFormatterJSON constructs a Formatter which emits strict JSON.
func NewFormatterJSON(opts Options) Formatter {
	return newFormatter(opts, outputJSON)
}

// Defaults for Options.
const defaultTimestampFormat = "2006-01-02 15:04:05.000000"
const defaultMaxLogDepth = 16

func newFormatter(opts Options, outfmt outputFormat) Formatter {
	if opts.TimestampFormat == "" {
		opts.TimestampFormat = defaultTimestampFormat
	}
	if opts.MaxLogDepth == 0 {
		opts.MaxLogDepth = defaultMaxLogDepth
	}
	f := Formatter{
		outputFormat: outfmt,
		prefix:       "",
		values:       nil,
		depth:        0,
		opts:         opts,
	}
	return f
}

// Formatter is an opaque struct which can be embedded in a LogSink
// implementation. It should be constructed with NewFormatter. Some of
// its methods directly implement logr.LogSink.
type Formatter struct {
	outputFormat outputFormat
	prefix       string
	values       []interface{}
	valuesStr    string
	depth        int
	opts         Options
}

// outputFormat indicates which outputFormat to use.
type outputFormat int

const (
	// outputKeyValue emits a JSON-like key=value format, but not strict JSON.
	outputKeyValue outputFormat = iota
	// outputJSON emits strict JSON.
	outputJSON
)

// PseudoStruct is a list of key-value pairs that gets logged as a struct.
type PseudoStruct []interface{}

// render produces a log line, ready to use.
func (f Formatter) render(builtins, args []interface{}) string {
	// Empirically bytes.Buffer is faster than strings.Builder for this.
	buf := bytes.NewBuffer(make([]byte, 0, 1024))
	if f.outputFormat == outputJSON {
		buf.WriteByte('{')
	}
	vals := builtins
	if hook := f.opts.RenderBuiltinsHook; hook != nil {
		vals = hook(f.sanitize(vals))
	}
	f.flatten(buf, vals, false, false) // keys are ours, no need to escape
	continuing := len(builtins) > 0
	if len(f.valuesStr) > 0 {
		if continuing {
			if f.outputFormat == outputJSON {
				buf.WriteByte(',')
			} else {
				buf.WriteByte(' ')
			}
		}
		continuing = true
		buf.WriteString(f.valuesStr)
	}
	vals = args
	if hook := f.opts.RenderArgsHook; hook != nil {
		vals = hook(f.sanitize(vals))
	}
	f.flatten(buf, vals, continuing, true) // escape user-provided keys
	if f.outputFormat == outputJSON {
		buf.WriteByte('}')
	}
	return buf.String()
}

// flatten renders a list of key-value pairs into a buffer.  If continuing is
// true, it assumes that the buffer has previous values and will emit a
// separator (which depends on the output format) before the first pair it
// writes.  If escapeKeys is true, the keys are assumed to have
// non-JSON-compatible characters in them and must be evaluated for escapes.
//
// This function returns a potentially modified version of kvList, which
// ensures that there is a value for every key (adding a value if needed) and
// that each key is a string (substituting a key if needed).
func (f Formatter) flatten(buf *bytes.Buffer, kvList []interface{}, continuing bool, escapeKeys bool) []interface{} {
	// This logic overlaps with sanitize() but saves one type-cast per key,
	// which can be measurable.
	if len(kvList)%2 != 0 {
		kvList = append(kvList, noValue)
	}
	for i := 0; i < len(kvList); i += 2 {
		k, ok := kvList[i].(string)
		if !ok {
			k = f.nonStringKey(kvList[i])
			kvList[i] = k
		}
		v := kvList[i+1]

		if i > 0 || continuing {
			if f.outputFormat == outputJSON {
				buf.WriteByte(',')
			} else {
				// In theory the format could be something we don't understand.  In
				// practice, we control it, so it won't be.
				buf.WriteByte(' ')
			}
		}

		if escapeKeys {
			buf.WriteString(prettyString(k))
		} else {
			// this is faster
			buf.WriteByte('"')
			buf.WriteString(k)
			buf.WriteByte('"')
		}
		if f.outputFormat == outputJSON {
			buf.WriteByte(':')
		} else {
			buf.WriteByte('=')
		}
		buf.WriteString(f.pretty(v))
	}
	return kvList
}

func (f Formatter) pretty(value interface{}) string {
	return f.prettyWithFlags(value, 0, 0)
}

const (
	flagRawStruct = 0x1 // do not print braces on structs
)

// TODO: This is not fast. Most of the overhead goes here.
func (f Formatter) prettyWithFlags(value interface{}, flags uint32, depth int) string {
	if depth > f.opts.MaxLogDepth {
		return `"<max-log-depth-exceeded>"`
	}

	// Handle types that take full control of logging.
	if v, ok := value.(logr.Marshaler); ok {
		// Replace the value with what the type wants to get logged.
		// That then gets handled below via reflection.
		value = invokeMarshaler(v)
	}

	// Handle types that want to format themselves.
	switch v := value.(type) {
	case fmt.Stringer:
		value = invokeStringer(v)
	case error:
		value = invokeError(v)
	}

	// Handling the most common types without reflect is a small perf win.
	switch v := value.(type) {
	case bool:
		return strconv.FormatBool(v)
	case string:
		return prettyString(v)
	case int:
		return strconv.FormatInt(int64(v), 10)
	case int8:
		return strconv.FormatInt(int64(v), 10)
	case int16:
		return strconv.FormatInt(int64(v), 10)
	case int32:
		return strconv.FormatInt(int64(v), 10)
	case int64:
		return strconv.FormatInt(int64(v), 10)
	case uint:
		return strconv.FormatUint(uint64(v), 10)
	case uint8:
		return strconv.FormatUint(uint64(v), 10)
	case uint16:
		return strconv.FormatUint(uint64(v), 10)
	case uint32:
		return strconv.FormatUint(uint64(v), 10)
	case uint64:
		return strconv.FormatUint(v, 10)
	case uintptr:
		return strconv.FormatUint(uint64(v), 10)
	case float32:
		return strconv.FormatFloat(float64(v), 'f', -1, 32)
	case float64:
		return strconv.FormatFloat(v, 'f', -1, 64)
	case complex64:
		return `"` + strconv.FormatComplex(complex128(v), 'f', -1, 64) + `"`
	case complex128:
		return `"` + strconv.FormatComplex(v, 'f', -1, 128) + `"`
	case PseudoStruct:
		buf := bytes.NewBuffer(make([]byte, 0, 1024))
		v = f.sanitize(v)
		if flags&flagRawStruct == 0 {
			buf.WriteByte('{')
		}
		for i := 0; i < len(v); i += 2 {
			if i > 0 {
				buf.WriteByte(',')
			}
			k, _ := v[i].(string) // sanitize() above means no need to check success
			// arbitrary keys might need escaping
			buf.WriteString(prettyString(k))
			buf.WriteByte(':')
			buf.WriteString(f.prettyWithFlags(v[i+1], 0, depth+1))
		}
		if flags&flagRawStruct == 0 {
			buf.WriteByte('}')
		}
		return buf.String()
	}

	buf := bytes.NewBuffer(make([]byte, 0, 256))
	t := reflect.TypeOf(value)
	if t == nil {
		return "null"
	}
	v := reflect.ValueOf(value)
	switch t.Kind() {
	case reflect.Bool:
		return strconv.FormatBool(v.Bool())
	case reflect.String:
		return prettyString(v.String())
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		return strconv.FormatInt(int64(v.Int()), 10)
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		return strconv.FormatUint(uint64(v.Uint()), 10)
	case reflect.Float32:
		return strconv.FormatFloat(float64(v.Float()), 'f', -1, 32)
	case reflect.Float64:
		return strconv.FormatFloat(v.Float(), 'f', -1, 64)
	case reflect.Complex64:
		return `"` + strconv.FormatComplex(complex128(v.Complex()), 'f', -1, 64) + `"`
	case reflect.Complex128:
		return `"` + strconv.FormatComplex(v.Complex(), 'f', -1, 128) + `"`
	case reflect.Struct:
		if flags&flagRawStruct == 0 {
			buf.WriteByte('{')
		}
		for i := 0; i < t.NumField(); i++ {
			fld := t.Field(i)
			if fld.PkgPath != "" {
				// reflect says this field is only defined for non-exported fields.
				continue
			}
			if !v.Field(i).CanInterface() {
				// reflect isn't clear exactly what this means, but we can't use it.
				continue
			}
			name := ""
			omitempty := false
			if tag, found := fld.Tag.Lookup("json"); found {
				if tag == "-" {
					continue
				}
				if comma := strings.Index(tag, ","); comma != -1 {
					if n := tag[:comma]; n != "" {
						name = n
					}
					rest := tag[comma:]
					if strings.Contains(rest, ",omitempty,") || strings.HasSuffix(rest, ",omitempty") {
						omitempty = true
					}
				} else {
					name = tag
				}
			}
			if omitempty && isEmpty(v.Field(i)) {
				continue
			}
			if i > 0 {
				buf.WriteByte(',')
			}
			if fld.Anonymous && fld.Type.Kind() == reflect.Struct && name == "" {
				buf.WriteString(f.prettyWithFlags(v.Field(i).Interface(), flags|flagRawStruct, depth+1))
				continue
			}
			if name == "" {
				name = fld.Name
			}
			// field names can't contain characters which need escaping
			buf.WriteByte('"')
			buf.WriteString(name)
			buf.WriteByte('"')
			buf.WriteByte(':')
			buf.WriteString(f.prettyWithFlags(v.Field(i).Interface(), 0, depth+1))
		}
		if flags&flagRawStruct == 0 {
			buf.WriteByte('}')
		}
		return buf.String()
	case reflect.Slice, reflect.Array:
		buf.WriteByte('[')
		for i := 0; i < v.Len(); i++ {
			if i > 0 {
				buf.WriteByte(',')
			}
			e := v.Index(i)
			buf.WriteString(f.prettyWithFlags(e.Interface(), 0, depth+1))
		}
		buf.WriteByte(']')
		return buf.String()
	case reflect.Map:
		buf.WriteByte('{')
		// This does not sort the map keys, for best perf.
		it := v.MapRange()
		i := 0
		for it.Next() {
			if i > 0 {
				buf.WriteByte(',')
			}
			// If a map key supports TextMarshaler, use it.
			keystr := ""
			if m, ok := it.Key().Interface().(encoding.TextMarshaler); ok {
				txt, err := m.MarshalText()
				if err != nil {
					keystr = fmt.Sprintf("<error-MarshalText: %s>", err.Error())
				} else {
					keystr = string(txt)
				}
				keystr = prettyString(keystr)
			} else {
				// prettyWithFlags will produce already-escaped values
				keystr = f.prettyWithFlags(it.Key().Interface(), 0, depth+1)
				if t.Key().Kind() != reflect.String {
					// JSON only does string keys.  Unlike Go's standard JSON, we'll
					// convert just about anything to a string.
					keystr = prettyString(keystr)
				}
			}
			buf.WriteString(keystr)
			buf.WriteByte(':')
			buf.WriteString(f.prettyWithFlags(it.Value().Interface(), 0, depth+1))
			i++
		}
		buf.WriteByte('}')
		return buf.String()
	case reflect.Ptr, reflect.Interface:
		if v.IsNil() {
			return "null"
		}
		return f.prettyWithFlags(v.Elem().Interface(), 0, depth)
	}
	return fmt.Sprintf(`"<unhandled-%s>"`, t.Kind().String())
}

func prettyString(s string) string {
	// Avoid escaping (which does allocations) if we can.
	if needsEscape(s) {
		return strconv.Quote(s)
	}
	b := bytes.NewBuffer(make([]byte, 0, 1024))
	b.WriteByte('"')
	b.WriteString(s)
	b.WriteByte('"')
	return b.String()
}

// needsEscape determines whether the input string needs to be escaped or not,
// without doing any allocations.
func needsEscape(s string) bool {
	for _, r := range s {
		if !strconv.IsPrint(r) || r == '\\' || r == '"' {
			return true
		}
	}
	return false
}

func isEmpty(v reflect.Value) bool {
	switch v.Kind() {
	case reflect.Array, reflect.Map, reflect.Slice, reflect.String:
		return v.Len() == 0
	case reflect.Bool:
		return !v.Bool()
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		return v.Int() == 0
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		return v.Uint() == 0
	case reflect.Float32, reflect.Float64:
		return v.Float() == 0
	case reflect.Complex64, reflect.Complex128:
		return v.Complex() == 0
	case reflect.Interface, reflect.Ptr:
		return v.IsNil()
	}
	return false
}

func invokeMarshaler(m logr.Marshaler) (ret interface{}) {
	defer func() {
		if r := recover(); r != nil {
			ret = fmt.Sprintf("<panic: %s>", r)
		}
	}()
	return m.MarshalLog()
}

func invokeStringer(s fmt.Stringer) (ret string) {
	defer func() {
		if r := recover(); r != nil {
			ret = fmt.Sprintf("<panic: %s>", r)
		}
	}()
	return s.String()
}

func invokeError(e error) (ret string) {
	defer func() {
		if r := recover(); r != nil {
			ret = fmt.Sprintf("<panic: %s>", r)
		}
	}()
	return e.Error()
}

// Caller represents the original call site for a log line, after considering
// logr.Logger.WithCallDepth and logr.Logger.WithCallStackHelper.  The File and
// Line fields will always be provided, while the Func field is optional.
// Users can set the render hook fields in Options to examine logged key-value
// pairs, one of which will be {"caller", Caller} if the Options.LogCaller
// field is enabled for the given MessageClass.
type Caller struct {
	// File is the basename of the file for this call site.
	File string `json:"file"`
	// Line is the line number in the file for this call site.
	Line int `json:"line"`
	// Func is the function name for this call site, or empty if
	// Options.LogCallerFunc is not enabled.
	Func string `json:"function,omitempty"`
}

func (f Formatter) caller() Caller {
	// +1 for this frame, +1 for Info/Error.
	pc, file, line, ok := runtime.Caller(f.depth + 2)
	if !ok {
		return Caller{"<unknown>", 0, ""}
	}
	fn := ""
	if f.opts.LogCallerFunc {
		if fp := runtime.FuncForPC(pc); fp != nil {
			fn = fp.Name()
		}
	}

	return Caller{filepath.Base(file), line, fn}
}

const noValue = "<no-value>"

func (f Formatter) nonStringKey(v interface{}) string {
	return fmt.Sprintf("<non-string-key: %s>", f.snippet(v))
}

// snippet produces a short snippet string of an arbitrary value.
func (f Formatter) snippet(v interface{}) string {
	const snipLen = 16

	snip := f.pretty(v)
	if len(snip) > snipLen {
		snip = snip[:snipLen]
	}
	return snip
}

// sanitize ensures that a list of key-value pairs has a value for every key
// (adding a value if needed) and that each key is a string (substituting a key
// if needed).
func (f Formatter) sanitize(kvList []interface{}) []interface{} {
	if len(kvList)%2 != 0 {
		kvList = append(kvList, noValue)
	}
	for i := 0; i < len(kvList); i += 2 {
		_, ok := kvList[i].(string)
		if !ok {
			kvList[i] = f.nonStringKey(kvList[i])
		}
	}
	return kvList
}

// Init configures this Formatter from runtime info, such as the call depth
// imposed by logr itself.
// Note that this receiver is a pointer, so depth can be saved.
func (f *Formatter) Init(info logr.RuntimeInfo) {
	f.depth += info.CallDepth
}

// Enabled checks whether an info message at the given level should be logged.
func (f Formatter) Enabled(level int) bool {
	return level <= f.opts.Verbosity
}

// GetDepth returns the current depth of this Formatter.  This is useful for
// implementations which do their own caller attribution.
func (f Formatter) GetDepth() int {
	return f.depth
}

// FormatInfo renders an Info log message into strings.  The prefix will be
// empty when no names were set (via AddNames), or when the output is
// configured for JSON.
func (f Formatter) FormatInfo(level int, msg string, kvList []interface{}) (prefix, argsStr string) {
	args := make([]interface{}, 0, 64) // using a constant here impacts perf
	prefix = f.prefix
	if f.outputFormat == outputJSON {
		args = append(args, "logger", prefix)
		prefix = ""
	}
	if f.opts.LogTimestamp {
		args = append(args, "ts", time.Now().Format(f.opts.TimestampFormat))
	}
	if policy := f.opts.LogCaller; policy == All || policy == Info {
		args = append(args, "caller", f.caller())
	}
	args = append(args, "level", level, "msg", msg)
	return prefix, f.render(args, kvList)
}

// FormatError renders an Error log message into strings.  The prefix will be
// empty when no names were set (via AddNames),  or when the output is
// configured for JSON.
func (f Formatter) FormatError(err error, msg string, kvList []interface{}) (prefix, argsStr string) {
	args := make([]interface{}, 0, 64) // using a constant here impacts perf
	prefix = f.prefix
	if f.outputFormat == outputJSON {
		args = append(args, "logger", prefix)
		prefix = ""
	}
	if f.opts.LogTimestamp {
		args = append(args, "ts", time.Now().Format(f.opts.TimestampFormat))
	}
	if policy := f.opts.LogCaller; policy == All || policy == Error {
		args = append(args, "caller", f.caller())
	}
	args = append(args, "msg", msg)
	var loggableErr interface{}
	if err != nil {
		loggableErr = err.Error()
	}
	args = append(args, "error", loggableErr)
	return f.prefix, f.render(args, kvList)
}

// AddName appends the specified name.  funcr uses '/' characters to separate
// name elements.  Callers should not pass '/' in the provided name string, but
// this library does not actually enforce that.
func (f *Formatter) AddName(name string) {
	if len(f.prefix) > 0 {
		f.prefix += "/"
	}
	f.prefix += name
}

// AddValues adds key-value pairs to the set of saved values to be logged with
// each log line.
func (f *Formatter) AddValues(kvList []interface{}) {
	// Three slice args forces a copy.
	n := len(f.values)
	f.values = append(f.values[:n:n], kvList...)

	vals := f.values
	if hook := f.opts.RenderValuesHook; hook != nil {
		vals = hook(f.sanitize(vals))
	}

	// Pre-render values, so we don't have to do it on each Info/Error call.
	buf := bytes.NewBuffer(make([]byte, 0, 1024))
	f.flatten(buf, vals, false, true) // escape user-provided keys
	f.valuesStr = buf.String()
}

// AddCallDepth increases the number of stack-frames to skip when attributing
// the log line to a file and line.
func (f *Formatter) AddCallDepth(depth int) {
	f.depth += depth
}
  070701000005D8000081A4000000000000000000000001645E367C00005098000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/go-logr/logr/logr.go    /*
Copyright 2019 The logr Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

// This design derives from Dave Cheney's blog:
//     http://dave.cheney.net/2015/11/05/lets-talk-about-logging

// Package logr defines a general-purpose logging API and abstract interfaces
// to back that API.  Packages in the Go ecosystem can depend on this package,
// while callers can implement logging with whatever backend is appropriate.
//
// Usage
//
// Logging is done using a Logger instance.  Logger is a concrete type with
// methods, which defers the actual logging to a LogSink interface.  The main
// methods of Logger are Info() and Error().  Arguments to Info() and Error()
// are key/value pairs rather than printf-style formatted strings, emphasizing
// "structured logging".
//
// With Go's standard log package, we might write:
//   log.Printf("setting target value %s", targetValue)
//
// With logr's structured logging, we'd write:
//   logger.Info("setting target", "value", targetValue)
//
// Errors are much the same.  Instead of:
//   log.Printf("failed to open the pod bay door for user %s: %v", user, err)
//
// We'd write:
//   logger.Error(err, "failed to open the pod bay door", "user", user)
//
// Info() and Error() are very similar, but they are separate methods so that
// LogSink implementations can choose to do things like attach additional
// information (such as stack traces) on calls to Error(). Error() messages are
// always logged, regardless of the current verbosity.  If there is no error
// instance available, passing nil is valid.
//
// Verbosity
//
// Often we want to log information only when the application in "verbose
// mode".  To write log lines that are more verbose, Logger has a V() method.
// The higher the V-level of a log line, the less critical it is considered.
// Log-lines with V-levels that are not enabled (as per the LogSink) will not
// be written.  Level V(0) is the default, and logger.V(0).Info() has the same
// meaning as logger.Info().  Negative V-levels have the same meaning as V(0).
// Error messages do not have a verbosity level and are always logged.
//
// Where we might have written:
//   if flVerbose >= 2 {
//       log.Printf("an unusual thing happened")
//   }
//
// We can write:
//   logger.V(2).Info("an unusual thing happened")
//
// Logger Names
//
// Logger instances can have name strings so that all messages logged through
// that instance have additional context.  For example, you might want to add
// a subsystem name:
//
//   logger.WithName("compactor").Info("started", "time", time.Now())
//
// The WithName() method returns a new Logger, which can be passed to
// constructors or other functions for further use.  Repeated use of WithName()
// will accumulate name "segments".  These name segments will be joined in some
// way by the LogSink implementation.  It is strongly recommended that name
// segments contain simple identifiers (letters, digits, and hyphen), and do
// not contain characters that could muddle the log output or confuse the
// joining operation (e.g. whitespace, commas, periods, slashes, brackets,
// quotes, etc).
//
// Saved Values
//
// Logger instances can store any number of key/value pairs, which will be
// logged alongside all messages logged through that instance.  For example,
// you might want to create a Logger instance per managed object:
//
// With the standard log package, we might write:
//   log.Printf("decided to set field foo to value %q for object %s/%s",
//       targetValue, object.Namespace, object.Name)
//
// With logr we'd write:
//   // Elsewhere: set up the logger to log the object name.
//   obj.logger = mainLogger.WithValues(
//       "name", obj.name, "namespace", obj.namespace)
//
//   // later on...
//   obj.logger.Info("setting foo", "value", targetValue)
//
// Best Practices
//
// Logger has very few hard rules, with the goal that LogSink implementations
// might have a lot of freedom to differentiate.  There are, however, some
// things to consider.
//
// The log message consists of a constant message attached to the log line.
// This should generally be a simple description of what's occurring, and should
// never be a format string.  Variable information can then be attached using
// named values.
//
// Keys are arbitrary strings, but should generally be constant values.  Values
// may be any Go value, but how the value is formatted is determined by the
// LogSink implementation.
//
// Logger instances are meant to be passed around by value. Code that receives
// such a value can call its methods without having to check whether the
// instance is ready for use.
//
// Calling methods with the null logger (Logger{}) as instance will crash
// because it has no LogSink. Therefore this null logger should never be passed
// around. For cases where passing a logger is optional, a pointer to Logger
// should be used.
//
// Key Naming Conventions
//
// Keys are not strictly required to conform to any specification or regex, but
// it is recommended that they:
//   * be human-readable and meaningful (not auto-generated or simple ordinals)
//   * be constant (not dependent on input data)
//   * contain only printable characters
//   * not contain whitespace or punctuation
//   * use lower case for simple keys and lowerCamelCase for more complex ones
//
// These guidelines help ensure that log data is processed properly regardless
// of the log implementation.  For example, log implementations will try to
// output JSON data or will store data for later database (e.g. SQL) queries.
//
// While users are generally free to use key names of their choice, it's
// generally best to avoid using the following keys, as they're frequently used
// by implementations:
//   * "caller": the calling information (file/line) of a particular log line
//   * "error": the underlying error value in the `Error` method
//   * "level": the log level
//   * "logger": the name of the associated logger
//   * "msg": the log message
//   * "stacktrace": the stack trace associated with a particular log line or
//                   error (often from the `Error` message)
//   * "ts": the timestamp for a log line
//
// Implementations are encouraged to make use of these keys to represent the
// above concepts, when necessary (for example, in a pure-JSON output form, it
// would be necessary to represent at least message and timestamp as ordinary
// named values).
//
// Break Glass
//
// Implementations may choose to give callers access to the underlying
// logging implementation.  The recommended pattern for this is:
//   // Underlier exposes access to the underlying logging implementation.
//   // Since callers only have a logr.Logger, they have to know which
//   // implementation is in use, so this interface is less of an abstraction
//   // and more of way to test type conversion.
//   type Underlier interface {
//       GetUnderlying() <underlying-type>
//   }
//
// Logger grants access to the sink to enable type assertions like this:
//   func DoSomethingWithImpl(log logr.Logger) {
//       if underlier, ok := log.GetSink()(impl.Underlier) {
//          implLogger := underlier.GetUnderlying()
//          ...
//       }
//   }
//
// Custom `With*` functions can be implemented by copying the complete
// Logger struct and replacing the sink in the copy:
//   // WithFooBar changes the foobar parameter in the log sink and returns a
//   // new logger with that modified sink.  It does nothing for loggers where
//   // the sink doesn't support that parameter.
//   func WithFoobar(log logr.Logger, foobar int) logr.Logger {
//      if foobarLogSink, ok := log.GetSink()(FoobarSink); ok {
//         log = log.WithSink(foobarLogSink.WithFooBar(foobar))
//      }
//      return log
//   }
//
// Don't use New to construct a new Logger with a LogSink retrieved from an
// existing Logger. Source code attribution might not work correctly and
// unexported fields in Logger get lost.
//
// Beware that the same LogSink instance may be shared by different logger
// instances. Calling functions that modify the LogSink will affect all of
// those.
package logr

import (
	"context"
)

// New returns a new Logger instance.  This is primarily used by libraries
// implementing LogSink, rather than end users.
func New(sink LogSink) Logger {
	logger := Logger{}
	logger.setSink(sink)
	sink.Init(runtimeInfo)
	return logger
}

// setSink stores the sink and updates any related fields. It mutates the
// logger and thus is only safe to use for loggers that are not currently being
// used concurrently.
func (l *Logger) setSink(sink LogSink) {
	l.sink = sink
}

// GetSink returns the stored sink.
func (l Logger) GetSink() LogSink {
	return l.sink
}

// WithSink returns a copy of the logger with the new sink.
func (l Logger) WithSink(sink LogSink) Logger {
	l.setSink(sink)
	return l
}

// Logger is an interface to an abstract logging implementation.  This is a
// concrete type for performance reasons, but all the real work is passed on to
// a LogSink.  Implementations of LogSink should provide their own constructors
// that return Logger, not LogSink.
//
// The underlying sink can be accessed through GetSink and be modified through
// WithSink. This enables the implementation of custom extensions (see "Break
// Glass" in the package documentation). Normally the sink should be used only
// indirectly.
type Logger struct {
	sink  LogSink
	level int
}

// Enabled tests whether this Logger is enabled.  For example, commandline
// flags might be used to set the logging verbosity and disable some info logs.
func (l Logger) Enabled() bool {
	return l.sink.Enabled(l.level)
}

// Info logs a non-error message with the given key/value pairs as context.
//
// The msg argument should be used to add some constant description to the log
// line.  The key/value pairs can then be used to add additional variable
// information.  The key/value pairs must alternate string keys and arbitrary
// values.
func (l Logger) Info(msg string, keysAndValues ...interface{}) {
	if l.Enabled() {
		if withHelper, ok := l.sink.(CallStackHelperLogSink); ok {
			withHelper.GetCallStackHelper()()
		}
		l.sink.Info(l.level, msg, keysAndValues...)
	}
}

// Error logs an error, with the given message and key/value pairs as context.
// It functions similarly to Info, but may have unique behavior, and should be
// preferred for logging errors (see the package documentations for more
// information). The log message will always be emitted, regardless of
// verbosity level.
//
// The msg argument should be used to add context to any underlying error,
// while the err argument should be used to attach the actual error that
// triggered this log line, if present. The err parameter is optional
// and nil may be passed instead of an error instance.
func (l Logger) Error(err error, msg string, keysAndValues ...interface{}) {
	if withHelper, ok := l.sink.(CallStackHelperLogSink); ok {
		withHelper.GetCallStackHelper()()
	}
	l.sink.Error(err, msg, keysAndValues...)
}

// V returns a new Logger instance for a specific verbosity level, relative to
// this Logger.  In other words, V-levels are additive.  A higher verbosity
// level means a log message is less important.  Negative V-levels are treated
// as 0.
func (l Logger) V(level int) Logger {
	if level < 0 {
		level = 0
	}
	l.level += level
	return l
}

// WithValues returns a new Logger instance with additional key/value pairs.
// See Info for documentation on how key/value pairs work.
func (l Logger) WithValues(keysAndValues ...interface{}) Logger {
	l.setSink(l.sink.WithValues(keysAndValues...))
	return l
}

// WithName returns a new Logger instance with the specified name element added
// to the Logger's name.  Successive calls with WithName append additional
// suffixes to the Logger's name.  It's strongly recommended that name segments
// contain only letters, digits, and hyphens (see the package documentation for
// more information).
func (l Logger) WithName(name string) Logger {
	l.setSink(l.sink.WithName(name))
	return l
}

// WithCallDepth returns a Logger instance that offsets the call stack by the
// specified number of frames when logging call site information, if possible.
// This is useful for users who have helper functions between the "real" call
// site and the actual calls to Logger methods.  If depth is 0 the attribution
// should be to the direct caller of this function.  If depth is 1 the
// attribution should skip 1 call frame, and so on.  Successive calls to this
// are additive.
//
// If the underlying log implementation supports a WithCallDepth(int) method,
// it will be called and the result returned.  If the implementation does not
// support CallDepthLogSink, the original Logger will be returned.
//
// To skip one level, WithCallStackHelper() should be used instead of
// WithCallDepth(1) because it works with implementions that support the
// CallDepthLogSink and/or CallStackHelperLogSink interfaces.
func (l Logger) WithCallDepth(depth int) Logger {
	if withCallDepth, ok := l.sink.(CallDepthLogSink); ok {
		l.setSink(withCallDepth.WithCallDepth(depth))
	}
	return l
}

// WithCallStackHelper returns a new Logger instance that skips the direct
// caller when logging call site information, if possible.  This is useful for
// users who have helper functions between the "real" call site and the actual
// calls to Logger methods and want to support loggers which depend on marking
// each individual helper function, like loggers based on testing.T.
//
// In addition to using that new logger instance, callers also must call the
// returned function.
//
// If the underlying log implementation supports a WithCallDepth(int) method,
// WithCallDepth(1) will be called to produce a new logger. If it supports a
// WithCallStackHelper() method, that will be also called. If the
// implementation does not support either of these, the original Logger will be
// returned.
func (l Logger) WithCallStackHelper() (func(), Logger) {
	var helper func()
	if withCallDepth, ok := l.sink.(CallDepthLogSink); ok {
		l.setSink(withCallDepth.WithCallDepth(1))
	}
	if withHelper, ok := l.sink.(CallStackHelperLogSink); ok {
		helper = withHelper.GetCallStackHelper()
	} else {
		helper = func() {}
	}
	return helper, l
}

// contextKey is how we find Loggers in a context.Context.
type contextKey struct{}

// FromContext returns a Logger from ctx or an error if no Logger is found.
func FromContext(ctx context.Context) (Logger, error) {
	if v, ok := ctx.Value(contextKey{}).(Logger); ok {
		return v, nil
	}

	return Logger{}, notFoundError{}
}

// notFoundError exists to carry an IsNotFound method.
type notFoundError struct{}

func (notFoundError) Error() string {
	return "no logr.Logger was present"
}

func (notFoundError) IsNotFound() bool {
	return true
}

// FromContextOrDiscard returns a Logger from ctx.  If no Logger is found, this
// returns a Logger that discards all log messages.
func FromContextOrDiscard(ctx context.Context) Logger {
	if v, ok := ctx.Value(contextKey{}).(Logger); ok {
		return v
	}

	return Discard()
}

// NewContext returns a new Context, derived from ctx, which carries the
// provided Logger.
func NewContext(ctx context.Context, logger Logger) context.Context {
	return context.WithValue(ctx, contextKey{}, logger)
}

// RuntimeInfo holds information that the logr "core" library knows which
// LogSinks might want to know.
type RuntimeInfo struct {
	// CallDepth is the number of call frames the logr library adds between the
	// end-user and the LogSink.  LogSink implementations which choose to print
	// the original logging site (e.g. file & line) should climb this many
	// additional frames to find it.
	CallDepth int
}

// runtimeInfo is a static global.  It must not be changed at run time.
var runtimeInfo = RuntimeInfo{
	CallDepth: 1,
}

// LogSink represents a logging implementation.  End-users will generally not
// interact with this type.
type LogSink interface {
	// Init receives optional information about the logr library for LogSink
	// implementations that need it.
	Init(info RuntimeInfo)

	// Enabled tests whether this LogSink is enabled at the specified V-level.
	// For example, commandline flags might be used to set the logging
	// verbosity and disable some info logs.
	Enabled(level int) bool

	// Info logs a non-error message with the given key/value pairs as context.
	// The level argument is provided for optional logging.  This method will
	// only be called when Enabled(level) is true. See Logger.Info for more
	// details.
	Info(level int, msg string, keysAndValues ...interface{})

	// Error logs an error, with the given message and key/value pairs as
	// context.  See Logger.Error for more details.
	Error(err error, msg string, keysAndValues ...interface{})

	// WithValues returns a new LogSink with additional key/value pairs.  See
	// Logger.WithValues for more details.
	WithValues(keysAndValues ...interface{}) LogSink

	// WithName returns a new LogSink with the specified name appended.  See
	// Logger.WithName for more details.
	WithName(name string) LogSink
}

// CallDepthLogSink represents a Logger that knows how to climb the call stack
// to identify the original call site and can offset the depth by a specified
// number of frames.  This is useful for users who have helper functions
// between the "real" call site and the actual calls to Logger methods.
// Implementations that log information about the call site (such as file,
// function, or line) would otherwise log information about the intermediate
// helper functions.
//
// This is an optional interface and implementations are not required to
// support it.
type CallDepthLogSink interface {
	// WithCallDepth returns a LogSink that will offset the call
	// stack by the specified number of frames when logging call
	// site information.
	//
	// If depth is 0, the LogSink should skip exactly the number
	// of call frames defined in RuntimeInfo.CallDepth when Info
	// or Error are called, i.e. the attribution should be to the
	// direct caller of Logger.Info or Logger.Error.
	//
	// If depth is 1 the attribution should skip 1 call frame, and so on.
	// Successive calls to this are additive.
	WithCallDepth(depth int) LogSink
}

// CallStackHelperLogSink represents a Logger that knows how to climb
// the call stack to identify the original call site and can skip
// intermediate helper functions if they mark themselves as
// helper. Go's testing package uses that approach.
//
// This is useful for users who have helper functions between the
// "real" call site and the actual calls to Logger methods.
// Implementations that log information about the call site (such as
// file, function, or line) would otherwise log information about the
// intermediate helper functions.
//
// This is an optional interface and implementations are not required
// to support it. Implementations that choose to support this must not
// simply implement it as WithCallDepth(1), because
// Logger.WithCallStackHelper will call both methods if they are
// present. This should only be implemented for LogSinks that actually
// need it, as with testing.T.
type CallStackHelperLogSink interface {
	// GetCallStackHelper returns a function that must be called
	// to mark the direct caller as helper function when logging
	// call site information.
	GetCallStackHelper() func()
}

// Marshaler is an optional interface that logged values may choose to
// implement. Loggers with structured output, such as JSON, should
// log the object return by the MarshalLog method instead of the
// original value.
type Marshaler interface {
	// MarshalLog can be used to:
	//   - ensure that structs are not logged as strings when the original
	//     value has a String method: return a different type without a
	//     String method
	//   - select which fields of a complex type should get logged:
	//     return a simpler struct with fewer fields
	//   - log unexported fields: return a different struct
	//     with exported fields
	//
	// It may return any value of any type.
	MarshalLog() interface{}
}
070701000005D9000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/vendor/github.com/go-ole  070701000005DA000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole   070701000005DB000081A4000000000000000000000001645E367C00000046000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/.travis.yml   language: go
sudo: false

go:
  - 1.9.x
  - 1.10.x
  - 1.11.x
  - tip
  070701000005DC000081A4000000000000000000000001645E367C000007C2000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/ChangeLog.md  # Version 1.x.x

* **Add more test cases and reference new test COM server project.** (Placeholder for future additions)

# Version 1.2.0-alphaX

**Minimum supported version is now Go 1.4. Go 1.1 support is deprecated, but should still build.**

 * Added CI configuration for Travis-CI and AppVeyor.
 * Added test InterfaceID and ClassID for the COM Test Server project.
 * Added more inline documentation (#83).
 * Added IEnumVARIANT implementation (#88).
 * Added IEnumVARIANT test cases (#99, #100, #101).
 * Added support for retrieving `time.Time` from VARIANT (#92).
 * Added test case for IUnknown (#64).
 * Added test case for IDispatch (#64).
 * Added test cases for scalar variants (#64, #76).

# Version 1.1.1

 * Fixes for Linux build.
 * Fixes for Windows build.

# Version 1.1.0

The change to provide building on all platforms is a new feature. The increase in minor version reflects that and allows those who wish to stay on 1.0.x to continue to do so. Support for 1.0.x will be limited to bug fixes.

 * Move GUID out of variables.go into its own file to make new documentation available.
 * Move OleError out of ole.go into its own file to make new documentation available.
 * Add documentation to utility functions.
 * Add documentation to variant receiver functions.
 * Add documentation to ole structures.
 * Make variant available to other systems outside of Windows.
 * Make OLE structures available to other systems outside of Windows.

## New Features

 * Library should now be built on all platforms supported by Go. Library will NOOP on any platform that is not Windows.
 * More functions are now documented and available on godoc.org.

# Version 1.0.1

 1. Fix package references from repository location change.

# Version 1.0.0

This version is stable enough for use. The COM API is still incomplete, but provides enough functionality for accessing COM servers using IDispatch interface.

There is no changelog for this version. Check commits for history.
  070701000005DD000081A4000000000000000000000001645E367C0000045F000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/LICENSE   The MIT License (MIT)

Copyright © 2013-2017 Yasuhiro Matsumoto, <mattn.jp@gmail.com>

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the “Software”), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
 070701000005DE000081A4000000000000000000000001645E367C000008D4000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/README.md # Go OLE

[![Build status](https://ci.appveyor.com/api/projects/status/qr0u2sf7q43us9fj?svg=true)](https://ci.appveyor.com/project/jacobsantos/go-ole-jgs28)
[![Build Status](https://travis-ci.org/go-ole/go-ole.svg?branch=master)](https://travis-ci.org/go-ole/go-ole)
[![GoDoc](https://godoc.org/github.com/go-ole/go-ole?status.svg)](https://godoc.org/github.com/go-ole/go-ole)

Go bindings for Windows COM using shared libraries instead of cgo.

By Yasuhiro Matsumoto.

## Install

To experiment with go-ole, you can just compile and run the example program:

```
go get github.com/go-ole/go-ole
cd /path/to/go-ole/
go test

cd /path/to/go-ole/example/excel
go run excel.go
```

## Continuous Integration

Continuous integration configuration has been added for both Travis-CI and AppVeyor. You will have to add these to your own account for your fork in order for it to run.

**Travis-CI**

Travis-CI was added to check builds on Linux to ensure that `go get` works when cross building. Currently, Travis-CI is not used to test cross-building, but this may be changed in the future. It is also not currently possible to test the library on Linux, since COM API is specific to Windows and it is not currently possible to run a COM server on Linux or even connect to a remote COM server.

**AppVeyor**

AppVeyor is used to build on Windows using the (in-development) test COM server. It is currently only used to test the build and ensure that the code works on Windows. It will be used to register a COM server and then run the test cases based on the test COM server.

The tests currently do run and do pass and this should be maintained with commits.

## Versioning

Go OLE uses [semantic versioning](http://semver.org) for version numbers, which is similar to the version contract of the Go language. Which means that the major version will always maintain backwards compatibility with minor versions. Minor versions will only add new additions and changes. Fixes will always be in patch. 

This contract should allow you to upgrade to new minor and patch versions without breakage or modifications to your existing code. Leave a ticket, if there is breakage, so that it could be fixed.

## LICENSE

Under the MIT License: http://mattn.mit-license.org/2013
070701000005DF000081A4000000000000000000000001645E367C0000054E000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/appveyor.yml  # Notes:
#   - Minimal appveyor.yml file is an empty file. All sections are optional.
#   - Indent each level of configuration with 2 spaces. Do not use tabs!
#   - All section names are case-sensitive.
#   - Section names should be unique on each level.

version: "1.3.0.{build}-alpha-{branch}"

os: Windows Server 2012 R2

branches:
  only:
    - master
    - v1.2
    - v1.1
    - v1.0

skip_tags: true

clone_folder: c:\gopath\src\github.com\go-ole\go-ole

environment:
  GOPATH: c:\gopath
  matrix:
  - GOARCH: amd64
    GOVERSION: 1.5
    GOROOT: c:\go
    DOWNLOADPLATFORM: "x64"

install:
  - choco install mingw
  - SET PATH=c:\tools\mingw64\bin;%PATH%
  # - Download COM Server
  - ps: Start-FileDownload "https://github.com/go-ole/test-com-server/releases/download/v1.0.2/test-com-server-${env:DOWNLOADPLATFORM}.zip"
  - 7z e test-com-server-%DOWNLOADPLATFORM%.zip -oc:\gopath\src\github.com\go-ole\go-ole > NUL
  - c:\gopath\src\github.com\go-ole\go-ole\build\register-assembly.bat
  # - set
  - go version
  - go env
  - go get -u golang.org/x/tools/cmd/cover
  - go get -u golang.org/x/tools/cmd/godoc
  - go get -u golang.org/x/tools/cmd/stringer

build_script:
  - cd c:\gopath\src\github.com\go-ole\go-ole
  - go get -v -t ./...
  - go build
  - go test -v -cover ./...

# disable automatic tests
test: off

# disable deployment
deploy: off
  070701000005E0000081A4000000000000000000000001645E367C00002B3B000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/com.go    // +build windows

package ole

import (
	"syscall"
	"unicode/utf16"
	"unsafe"
)

var (
	procCoInitialize            = modole32.NewProc("CoInitialize")
	procCoInitializeEx          = modole32.NewProc("CoInitializeEx")
	procCoUninitialize          = modole32.NewProc("CoUninitialize")
	procCoCreateInstance        = modole32.NewProc("CoCreateInstance")
	procCoTaskMemFree           = modole32.NewProc("CoTaskMemFree")
	procCLSIDFromProgID         = modole32.NewProc("CLSIDFromProgID")
	procCLSIDFromString         = modole32.NewProc("CLSIDFromString")
	procStringFromCLSID         = modole32.NewProc("StringFromCLSID")
	procStringFromIID           = modole32.NewProc("StringFromIID")
	procIIDFromString           = modole32.NewProc("IIDFromString")
	procCoGetObject             = modole32.NewProc("CoGetObject")
	procGetUserDefaultLCID      = modkernel32.NewProc("GetUserDefaultLCID")
	procCopyMemory              = modkernel32.NewProc("RtlMoveMemory")
	procVariantInit             = modoleaut32.NewProc("VariantInit")
	procVariantClear            = modoleaut32.NewProc("VariantClear")
	procVariantTimeToSystemTime = modoleaut32.NewProc("VariantTimeToSystemTime")
	procSysAllocString          = modoleaut32.NewProc("SysAllocString")
	procSysAllocStringLen       = modoleaut32.NewProc("SysAllocStringLen")
	procSysFreeString           = modoleaut32.NewProc("SysFreeString")
	procSysStringLen            = modoleaut32.NewProc("SysStringLen")
	procCreateDispTypeInfo      = modoleaut32.NewProc("CreateDispTypeInfo")
	procCreateStdDispatch       = modoleaut32.NewProc("CreateStdDispatch")
	procGetActiveObject         = modoleaut32.NewProc("GetActiveObject")

	procGetMessageW      = moduser32.NewProc("GetMessageW")
	procDispatchMessageW = moduser32.NewProc("DispatchMessageW")
)

// coInitialize initializes COM library on current thread.
//
// MSDN documentation suggests that this function should not be called. Call
// CoInitializeEx() instead. The reason has to do with threading and this
// function is only for single-threaded apartments.
//
// That said, most users of the library have gotten away with just this
// function. If you are experiencing threading issues, then use
// CoInitializeEx().
func coInitialize() (err error) {
	// http://msdn.microsoft.com/en-us/library/windows/desktop/ms678543(v=vs.85).aspx
	// Suggests that no value should be passed to CoInitialized.
	// Could just be Call() since the parameter is optional. <-- Needs testing to be sure.
	hr, _, _ := procCoInitialize.Call(uintptr(0))
	if hr != 0 {
		err = NewError(hr)
	}
	return
}

// coInitializeEx initializes COM library with concurrency model.
func coInitializeEx(coinit uint32) (err error) {
	// http://msdn.microsoft.com/en-us/library/windows/desktop/ms695279(v=vs.85).aspx
	// Suggests that the first parameter is not only optional but should always be NULL.
	hr, _, _ := procCoInitializeEx.Call(uintptr(0), uintptr(coinit))
	if hr != 0 {
		err = NewError(hr)
	}
	return
}

// CoInitialize initializes COM library on current thread.
//
// MSDN documentation suggests that this function should not be called. Call
// CoInitializeEx() instead. The reason has to do with threading and this
// function is only for single-threaded apartments.
//
// That said, most users of the library have gotten away with just this
// function. If you are experiencing threading issues, then use
// CoInitializeEx().
func CoInitialize(p uintptr) (err error) {
	// p is ignored and won't be used.
	// Avoid any variable not used errors.
	p = uintptr(0)
	return coInitialize()
}

// CoInitializeEx initializes COM library with concurrency model.
func CoInitializeEx(p uintptr, coinit uint32) (err error) {
	// Avoid any variable not used errors.
	p = uintptr(0)
	return coInitializeEx(coinit)
}

// CoUninitialize uninitializes COM Library.
func CoUninitialize() {
	procCoUninitialize.Call()
}

// CoTaskMemFree frees memory pointer.
func CoTaskMemFree(memptr uintptr) {
	procCoTaskMemFree.Call(memptr)
}

// CLSIDFromProgID retrieves Class Identifier with the given Program Identifier.
//
// The Programmatic Identifier must be registered, because it will be looked up
// in the Windows Registry. The registry entry has the following keys: CLSID,
// Insertable, Protocol and Shell
// (https://msdn.microsoft.com/en-us/library/dd542719(v=vs.85).aspx).
//
// programID identifies the class id with less precision and is not guaranteed
// to be unique. These are usually found in the registry under
// HKEY_LOCAL_MACHINE\SOFTWARE\Classes, usually with the format of
// "Program.Component.Version" with version being optional.
//
// CLSIDFromProgID in Windows API.
func CLSIDFromProgID(progId string) (clsid *GUID, err error) {
	var guid GUID
	lpszProgID := uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(progId)))
	hr, _, _ := procCLSIDFromProgID.Call(lpszProgID, uintptr(unsafe.Pointer(&guid)))
	if hr != 0 {
		err = NewError(hr)
	}
	clsid = &guid
	return
}

// CLSIDFromString retrieves Class ID from string representation.
//
// This is technically the string version of the GUID and will convert the
// string to object.
//
// CLSIDFromString in Windows API.
func CLSIDFromString(str string) (clsid *GUID, err error) {
	var guid GUID
	lpsz := uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(str)))
	hr, _, _ := procCLSIDFromString.Call(lpsz, uintptr(unsafe.Pointer(&guid)))
	if hr != 0 {
		err = NewError(hr)
	}
	clsid = &guid
	return
}

// StringFromCLSID returns GUID formated string from GUID object.
func StringFromCLSID(clsid *GUID) (str string, err error) {
	var p *uint16
	hr, _, _ := procStringFromCLSID.Call(uintptr(unsafe.Pointer(clsid)), uintptr(unsafe.Pointer(&p)))
	if hr != 0 {
		err = NewError(hr)
	}
	str = LpOleStrToString(p)
	return
}

// IIDFromString returns GUID from program ID.
func IIDFromString(progId string) (clsid *GUID, err error) {
	var guid GUID
	lpsz := uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(progId)))
	hr, _, _ := procIIDFromString.Call(lpsz, uintptr(unsafe.Pointer(&guid)))
	if hr != 0 {
		err = NewError(hr)
	}
	clsid = &guid
	return
}

// StringFromIID returns GUID formatted string from GUID object.
func StringFromIID(iid *GUID) (str string, err error) {
	var p *uint16
	hr, _, _ := procStringFromIID.Call(uintptr(unsafe.Pointer(iid)), uintptr(unsafe.Pointer(&p)))
	if hr != 0 {
		err = NewError(hr)
	}
	str = LpOleStrToString(p)
	return
}

// CreateInstance of single uninitialized object with GUID.
func CreateInstance(clsid *GUID, iid *GUID) (unk *IUnknown, err error) {
	if iid == nil {
		iid = IID_IUnknown
	}
	hr, _, _ := procCoCreateInstance.Call(
		uintptr(unsafe.Pointer(clsid)),
		0,
		CLSCTX_SERVER,
		uintptr(unsafe.Pointer(iid)),
		uintptr(unsafe.Pointer(&unk)))
	if hr != 0 {
		err = NewError(hr)
	}
	return
}

// GetActiveObject retrieves pointer to active object.
func GetActiveObject(clsid *GUID, iid *GUID) (unk *IUnknown, err error) {
	if iid == nil {
		iid = IID_IUnknown
	}
	hr, _, _ := procGetActiveObject.Call(
		uintptr(unsafe.Pointer(clsid)),
		uintptr(unsafe.Pointer(iid)),
		uintptr(unsafe.Pointer(&unk)))
	if hr != 0 {
		err = NewError(hr)
	}
	return
}

type BindOpts struct {
	CbStruct          uint32
	GrfFlags          uint32
	GrfMode           uint32
	TickCountDeadline uint32
}

// GetObject retrieves pointer to active object.
func GetObject(programID string, bindOpts *BindOpts, iid *GUID) (unk *IUnknown, err error) {
	if bindOpts != nil {
		bindOpts.CbStruct = uint32(unsafe.Sizeof(BindOpts{}))
	}
	if iid == nil {
		iid = IID_IUnknown
	}
	hr, _, _ := procCoGetObject.Call(
		uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(programID))),
		uintptr(unsafe.Pointer(bindOpts)),
		uintptr(unsafe.Pointer(iid)),
		uintptr(unsafe.Pointer(&unk)))
	if hr != 0 {
		err = NewError(hr)
	}
	return
}

// VariantInit initializes variant.
func VariantInit(v *VARIANT) (err error) {
	hr, _, _ := procVariantInit.Call(uintptr(unsafe.Pointer(v)))
	if hr != 0 {
		err = NewError(hr)
	}
	return
}

// VariantClear clears value in Variant settings to VT_EMPTY.
func VariantClear(v *VARIANT) (err error) {
	hr, _, _ := procVariantClear.Call(uintptr(unsafe.Pointer(v)))
	if hr != 0 {
		err = NewError(hr)
	}
	return
}

// SysAllocString allocates memory for string and copies string into memory.
func SysAllocString(v string) (ss *int16) {
	pss, _, _ := procSysAllocString.Call(uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(v))))
	ss = (*int16)(unsafe.Pointer(pss))
	return
}

// SysAllocStringLen copies up to length of given string returning pointer.
func SysAllocStringLen(v string) (ss *int16) {
	utf16 := utf16.Encode([]rune(v + "\x00"))
	ptr := &utf16[0]

	pss, _, _ := procSysAllocStringLen.Call(uintptr(unsafe.Pointer(ptr)), uintptr(len(utf16)-1))
	ss = (*int16)(unsafe.Pointer(pss))
	return
}

// SysFreeString frees string system memory. This must be called with SysAllocString.
func SysFreeString(v *int16) (err error) {
	hr, _, _ := procSysFreeString.Call(uintptr(unsafe.Pointer(v)))
	if hr != 0 {
		err = NewError(hr)
	}
	return
}

// SysStringLen is the length of the system allocated string.
func SysStringLen(v *int16) uint32 {
	l, _, _ := procSysStringLen.Call(uintptr(unsafe.Pointer(v)))
	return uint32(l)
}

// CreateStdDispatch provides default IDispatch implementation for IUnknown.
//
// This handles default IDispatch implementation for objects. It haves a few
// limitations with only supporting one language. It will also only return
// default exception codes.
func CreateStdDispatch(unk *IUnknown, v uintptr, ptinfo *IUnknown) (disp *IDispatch, err error) {
	hr, _, _ := procCreateStdDispatch.Call(
		uintptr(unsafe.Pointer(unk)),
		v,
		uintptr(unsafe.Pointer(ptinfo)),
		uintptr(unsafe.Pointer(&disp)))
	if hr != 0 {
		err = NewError(hr)
	}
	return
}

// CreateDispTypeInfo provides default ITypeInfo implementation for IDispatch.
//
// This will not handle the full implementation of the interface.
func CreateDispTypeInfo(idata *INTERFACEDATA) (pptinfo *IUnknown, err error) {
	hr, _, _ := procCreateDispTypeInfo.Call(
		uintptr(unsafe.Pointer(idata)),
		uintptr(GetUserDefaultLCID()),
		uintptr(unsafe.Pointer(&pptinfo)))
	if hr != 0 {
		err = NewError(hr)
	}
	return
}

// copyMemory moves location of a block of memory.
func copyMemory(dest unsafe.Pointer, src unsafe.Pointer, length uint32) {
	procCopyMemory.Call(uintptr(dest), uintptr(src), uintptr(length))
}

// GetUserDefaultLCID retrieves current user default locale.
func GetUserDefaultLCID() (lcid uint32) {
	ret, _, _ := procGetUserDefaultLCID.Call()
	lcid = uint32(ret)
	return
}

// GetMessage in message queue from runtime.
//
// This function appears to block. PeekMessage does not block.
func GetMessage(msg *Msg, hwnd uint32, MsgFilterMin uint32, MsgFilterMax uint32) (ret int32, err error) {
	r0, _, err := procGetMessageW.Call(uintptr(unsafe.Pointer(msg)), uintptr(hwnd), uintptr(MsgFilterMin), uintptr(MsgFilterMax))
	ret = int32(r0)
	return
}

// DispatchMessage to window procedure.
func DispatchMessage(msg *Msg) (ret int32) {
	r0, _, _ := procDispatchMessageW.Call(uintptr(unsafe.Pointer(msg)))
	ret = int32(r0)
	return
}
 070701000005E1000081A4000000000000000000000001645E367C00001512000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/com_func.go   // +build !windows

package ole

import (
	"time"
	"unsafe"
)

// coInitialize initializes COM library on current thread.
//
// MSDN documentation suggests that this function should not be called. Call
// CoInitializeEx() instead. The reason has to do with threading and this
// function is only for single-threaded apartments.
//
// That said, most users of the library have gotten away with just this
// function. If you are experiencing threading issues, then use
// CoInitializeEx().
func coInitialize() error {
	return NewError(E_NOTIMPL)
}

// coInitializeEx initializes COM library with concurrency model.
func coInitializeEx(coinit uint32) error {
	return NewError(E_NOTIMPL)
}

// CoInitialize initializes COM library on current thread.
//
// MSDN documentation suggests that this function should not be called. Call
// CoInitializeEx() instead. The reason has to do with threading and this
// function is only for single-threaded apartments.
//
// That said, most users of the library have gotten away with just this
// function. If you are experiencing threading issues, then use
// CoInitializeEx().
func CoInitialize(p uintptr) error {
	return NewError(E_NOTIMPL)
}

// CoInitializeEx initializes COM library with concurrency model.
func CoInitializeEx(p uintptr, coinit uint32) error {
	return NewError(E_NOTIMPL)
}

// CoUninitialize uninitializes COM Library.
func CoUninitialize() {}

// CoTaskMemFree frees memory pointer.
func CoTaskMemFree(memptr uintptr) {}

// CLSIDFromProgID retrieves Class Identifier with the given Program Identifier.
//
// The Programmatic Identifier must be registered, because it will be looked up
// in the Windows Registry. The registry entry has the following keys: CLSID,
// Insertable, Protocol and Shell
// (https://msdn.microsoft.com/en-us/library/dd542719(v=vs.85).aspx).
//
// programID identifies the class id with less precision and is not guaranteed
// to be unique. These are usually found in the registry under
// HKEY_LOCAL_MACHINE\SOFTWARE\Classes, usually with the format of
// "Program.Component.Version" with version being optional.
//
// CLSIDFromProgID in Windows API.
func CLSIDFromProgID(progId string) (*GUID, error) {
	return nil, NewError(E_NOTIMPL)
}

// CLSIDFromString retrieves Class ID from string representation.
//
// This is technically the string version of the GUID and will convert the
// string to object.
//
// CLSIDFromString in Windows API.
func CLSIDFromString(str string) (*GUID, error) {
	return nil, NewError(E_NOTIMPL)
}

// StringFromCLSID returns GUID formated string from GUID object.
func StringFromCLSID(clsid *GUID) (string, error) {
	return "", NewError(E_NOTIMPL)
}

// IIDFromString returns GUID from program ID.
func IIDFromString(progId string) (*GUID, error) {
	return nil, NewError(E_NOTIMPL)
}

// StringFromIID returns GUID formatted string from GUID object.
func StringFromIID(iid *GUID) (string, error) {
	return "", NewError(E_NOTIMPL)
}

// CreateInstance of single uninitialized object with GUID.
func CreateInstance(clsid *GUID, iid *GUID) (*IUnknown, error) {
	return nil, NewError(E_NOTIMPL)
}

// GetActiveObject retrieves pointer to active object.
func GetActiveObject(clsid *GUID, iid *GUID) (*IUnknown, error) {
	return nil, NewError(E_NOTIMPL)
}

// VariantInit initializes variant.
func VariantInit(v *VARIANT) error {
	return NewError(E_NOTIMPL)
}

// VariantClear clears value in Variant settings to VT_EMPTY.
func VariantClear(v *VARIANT) error {
	return NewError(E_NOTIMPL)
}

// SysAllocString allocates memory for string and copies string into memory.
func SysAllocString(v string) *int16 {
	u := int16(0)
	return &u
}

// SysAllocStringLen copies up to length of given string returning pointer.
func SysAllocStringLen(v string) *int16 {
	u := int16(0)
	return &u
}

// SysFreeString frees string system memory. This must be called with SysAllocString.
func SysFreeString(v *int16) error {
	return NewError(E_NOTIMPL)
}

// SysStringLen is the length of the system allocated string.
func SysStringLen(v *int16) uint32 {
	return uint32(0)
}

// CreateStdDispatch provides default IDispatch implementation for IUnknown.
//
// This handles default IDispatch implementation for objects. It haves a few
// limitations with only supporting one language. It will also only return
// default exception codes.
func CreateStdDispatch(unk *IUnknown, v uintptr, ptinfo *IUnknown) (*IDispatch, error) {
	return nil, NewError(E_NOTIMPL)
}

// CreateDispTypeInfo provides default ITypeInfo implementation for IDispatch.
//
// This will not handle the full implementation of the interface.
func CreateDispTypeInfo(idata *INTERFACEDATA) (*IUnknown, error) {
	return nil, NewError(E_NOTIMPL)
}

// copyMemory moves location of a block of memory.
func copyMemory(dest unsafe.Pointer, src unsafe.Pointer, length uint32) {}

// GetUserDefaultLCID retrieves current user default locale.
func GetUserDefaultLCID() uint32 {
	return uint32(0)
}

// GetMessage in message queue from runtime.
//
// This function appears to block. PeekMessage does not block.
func GetMessage(msg *Msg, hwnd uint32, MsgFilterMin uint32, MsgFilterMax uint32) (int32, error) {
	return int32(0), NewError(E_NOTIMPL)
}

// DispatchMessage to window procedure.
func DispatchMessage(msg *Msg) int32 {
	return int32(0)
}

func GetVariantDate(value uint64) (time.Time, error) {
	return time.Now(), NewError(E_NOTIMPL)
}
  070701000005E2000081A4000000000000000000000001645E367C0000110D000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/connect.go    package ole

// Connection contains IUnknown for fluent interface interaction.
//
// Deprecated. Use oleutil package instead.
type Connection struct {
	Object *IUnknown // Access COM
}

// Initialize COM.
func (*Connection) Initialize() (err error) {
	return coInitialize()
}

// Uninitialize COM.
func (*Connection) Uninitialize() {
	CoUninitialize()
}

// Create IUnknown object based first on ProgId and then from String.
func (c *Connection) Create(progId string) (err error) {
	var clsid *GUID
	clsid, err = CLSIDFromProgID(progId)
	if err != nil {
		clsid, err = CLSIDFromString(progId)
		if err != nil {
			return
		}
	}

	unknown, err := CreateInstance(clsid, IID_IUnknown)
	if err != nil {
		return
	}
	c.Object = unknown

	return
}

// Release IUnknown object.
func (c *Connection) Release() {
	c.Object.Release()
}

// Load COM object from list of programIDs or strings.
func (c *Connection) Load(names ...string) (errors []error) {
	var tempErrors []error = make([]error, len(names))
	var numErrors int = 0
	for _, name := range names {
		err := c.Create(name)
		if err != nil {
			tempErrors = append(tempErrors, err)
			numErrors += 1
			continue
		}
		break
	}

	copy(errors, tempErrors[0:numErrors])
	return
}

// Dispatch returns Dispatch object.
func (c *Connection) Dispatch() (object *Dispatch, err error) {
	dispatch, err := c.Object.QueryInterface(IID_IDispatch)
	if err != nil {
		return
	}
	object = &Dispatch{dispatch}
	return
}

// Dispatch stores IDispatch object.
type Dispatch struct {
	Object *IDispatch // Dispatch object.
}

// Call method on IDispatch with parameters.
func (d *Dispatch) Call(method string, params ...interface{}) (result *VARIANT, err error) {
	id, err := d.GetId(method)
	if err != nil {
		return
	}

	result, err = d.Invoke(id, DISPATCH_METHOD, params)
	return
}

// MustCall method on IDispatch with parameters.
func (d *Dispatch) MustCall(method string, params ...interface{}) (result *VARIANT) {
	id, err := d.GetId(method)
	if err != nil {
		panic(err)
	}

	result, err = d.Invoke(id, DISPATCH_METHOD, params)
	if err != nil {
		panic(err)
	}

	return
}

// Get property on IDispatch with parameters.
func (d *Dispatch) Get(name string, params ...interface{}) (result *VARIANT, err error) {
	id, err := d.GetId(name)
	if err != nil {
		return
	}
	result, err = d.Invoke(id, DISPATCH_PROPERTYGET, params)
	return
}

// MustGet property on IDispatch with parameters.
func (d *Dispatch) MustGet(name string, params ...interface{}) (result *VARIANT) {
	id, err := d.GetId(name)
	if err != nil {
		panic(err)
	}

	result, err = d.Invoke(id, DISPATCH_PROPERTYGET, params)
	if err != nil {
		panic(err)
	}
	return
}

// Set property on IDispatch with parameters.
func (d *Dispatch) Set(name string, params ...interface{}) (result *VARIANT, err error) {
	id, err := d.GetId(name)
	if err != nil {
		return
	}
	result, err = d.Invoke(id, DISPATCH_PROPERTYPUT, params)
	return
}

// MustSet property on IDispatch with parameters.
func (d *Dispatch) MustSet(name string, params ...interface{}) (result *VARIANT) {
	id, err := d.GetId(name)
	if err != nil {
		panic(err)
	}

	result, err = d.Invoke(id, DISPATCH_PROPERTYPUT, params)
	if err != nil {
		panic(err)
	}
	return
}

// GetId retrieves ID of name on IDispatch.
func (d *Dispatch) GetId(name string) (id int32, err error) {
	var dispid []int32
	dispid, err = d.Object.GetIDsOfName([]string{name})
	if err != nil {
		return
	}
	id = dispid[0]
	return
}

// GetIds retrieves all IDs of names on IDispatch.
func (d *Dispatch) GetIds(names ...string) (dispid []int32, err error) {
	dispid, err = d.Object.GetIDsOfName(names)
	return
}

// Invoke IDispatch on DisplayID of dispatch type with parameters.
//
// There have been problems where if send cascading params..., it would error
// out because the parameters would be empty.
func (d *Dispatch) Invoke(id int32, dispatch int16, params []interface{}) (result *VARIANT, err error) {
	if len(params) < 1 {
		result, err = d.Object.Invoke(id, dispatch)
	} else {
		result, err = d.Object.Invoke(id, dispatch, params...)
	}
	return
}

// Release IDispatch object.
func (d *Dispatch) Release() {
	d.Object.Release()
}

// Connect initializes COM and attempts to load IUnknown based on given names.
func Connect(names ...string) (connection *Connection) {
	connection.Initialize()
	connection.Load(names...)
	return
}
   070701000005E3000081A4000000000000000000000001645E367C00000E06000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/constants.go  package ole

const (
	CLSCTX_INPROC_SERVER   = 1
	CLSCTX_INPROC_HANDLER  = 2
	CLSCTX_LOCAL_SERVER    = 4
	CLSCTX_INPROC_SERVER16 = 8
	CLSCTX_REMOTE_SERVER   = 16
	CLSCTX_ALL             = CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER
	CLSCTX_INPROC          = CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER
	CLSCTX_SERVER          = CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER
)

const (
	COINIT_APARTMENTTHREADED = 0x2
	COINIT_MULTITHREADED     = 0x0
	COINIT_DISABLE_OLE1DDE   = 0x4
	COINIT_SPEED_OVER_MEMORY = 0x8
)

const (
	DISPATCH_METHOD         = 1
	DISPATCH_PROPERTYGET    = 2
	DISPATCH_PROPERTYPUT    = 4
	DISPATCH_PROPERTYPUTREF = 8
)

const (
	S_OK           = 0x00000000
	E_UNEXPECTED   = 0x8000FFFF
	E_NOTIMPL      = 0x80004001
	E_OUTOFMEMORY  = 0x8007000E
	E_INVALIDARG   = 0x80070057
	E_NOINTERFACE  = 0x80004002
	E_POINTER      = 0x80004003
	E_HANDLE       = 0x80070006
	E_ABORT        = 0x80004004
	E_FAIL         = 0x80004005
	E_ACCESSDENIED = 0x80070005
	E_PENDING      = 0x8000000A

	CO_E_CLASSSTRING = 0x800401F3
)

const (
	CC_FASTCALL = iota
	CC_CDECL
	CC_MSCPASCAL
	CC_PASCAL = CC_MSCPASCAL
	CC_MACPASCAL
	CC_STDCALL
	CC_FPFASTCALL
	CC_SYSCALL
	CC_MPWCDECL
	CC_MPWPASCAL
	CC_MAX = CC_MPWPASCAL
)

type VT uint16

const (
	VT_EMPTY           VT = 0x0
	VT_NULL            VT = 0x1
	VT_I2              VT = 0x2
	VT_I4              VT = 0x3
	VT_R4              VT = 0x4
	VT_R8              VT = 0x5
	VT_CY              VT = 0x6
	VT_DATE            VT = 0x7
	VT_BSTR            VT = 0x8
	VT_DISPATCH        VT = 0x9
	VT_ERROR           VT = 0xa
	VT_BOOL            VT = 0xb
	VT_VARIANT         VT = 0xc
	VT_UNKNOWN         VT = 0xd
	VT_DECIMAL         VT = 0xe
	VT_I1              VT = 0x10
	VT_UI1             VT = 0x11
	VT_UI2             VT = 0x12
	VT_UI4             VT = 0x13
	VT_I8              VT = 0x14
	VT_UI8             VT = 0x15
	VT_INT             VT = 0x16
	VT_UINT            VT = 0x17
	VT_VOID            VT = 0x18
	VT_HRESULT         VT = 0x19
	VT_PTR             VT = 0x1a
	VT_SAFEARRAY       VT = 0x1b
	VT_CARRAY          VT = 0x1c
	VT_USERDEFINED     VT = 0x1d
	VT_LPSTR           VT = 0x1e
	VT_LPWSTR          VT = 0x1f
	VT_RECORD          VT = 0x24
	VT_INT_PTR         VT = 0x25
	VT_UINT_PTR        VT = 0x26
	VT_FILETIME        VT = 0x40
	VT_BLOB            VT = 0x41
	VT_STREAM          VT = 0x42
	VT_STORAGE         VT = 0x43
	VT_STREAMED_OBJECT VT = 0x44
	VT_STORED_OBJECT   VT = 0x45
	VT_BLOB_OBJECT     VT = 0x46
	VT_CF              VT = 0x47
	VT_CLSID           VT = 0x48
	VT_BSTR_BLOB       VT = 0xfff
	VT_VECTOR          VT = 0x1000
	VT_ARRAY           VT = 0x2000
	VT_BYREF           VT = 0x4000
	VT_RESERVED        VT = 0x8000
	VT_ILLEGAL         VT = 0xffff
	VT_ILLEGALMASKED   VT = 0xfff
	VT_TYPEMASK        VT = 0xfff
)

const (
	DISPID_UNKNOWN     = -1
	DISPID_VALUE       = 0
	DISPID_PROPERTYPUT = -3
	DISPID_NEWENUM     = -4
	DISPID_EVALUATE    = -5
	DISPID_CONSTRUCTOR = -6
	DISPID_DESTRUCTOR  = -7
	DISPID_COLLECT     = -8
)

const (
	TKIND_ENUM      = 1
	TKIND_RECORD    = 2
	TKIND_MODULE    = 3
	TKIND_INTERFACE = 4
	TKIND_DISPATCH  = 5
	TKIND_COCLASS   = 6
	TKIND_ALIAS     = 7
	TKIND_UNION     = 8
	TKIND_MAX       = 9
)

// Safe Array Feature Flags

const (
	FADF_AUTO        = 0x0001
	FADF_STATIC      = 0x0002
	FADF_EMBEDDED    = 0x0004
	FADF_FIXEDSIZE   = 0x0010
	FADF_RECORD      = 0x0020
	FADF_HAVEIID     = 0x0040
	FADF_HAVEVARTYPE = 0x0080
	FADF_BSTR        = 0x0100
	FADF_UNKNOWN     = 0x0200
	FADF_DISPATCH    = 0x0400
	FADF_VARIANT     = 0x0800
	FADF_RESERVED    = 0xF008
)
  070701000005E4000081A4000000000000000000000001645E367C0000051B000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/error.go  package ole

// OleError stores COM errors.
type OleError struct {
	hr          uintptr
	description string
	subError    error
}

// NewError creates new error with HResult.
func NewError(hr uintptr) *OleError {
	return &OleError{hr: hr}
}

// NewErrorWithDescription creates new COM error with HResult and description.
func NewErrorWithDescription(hr uintptr, description string) *OleError {
	return &OleError{hr: hr, description: description}
}

// NewErrorWithSubError creates new COM error with parent error.
func NewErrorWithSubError(hr uintptr, description string, err error) *OleError {
	return &OleError{hr: hr, description: description, subError: err}
}

// Code is the HResult.
func (v *OleError) Code() uintptr {
	return uintptr(v.hr)
}

// String description, either manually set or format message with error code.
func (v *OleError) String() string {
	if v.description != "" {
		return errstr(int(v.hr)) + " (" + v.description + ")"
	}
	return errstr(int(v.hr))
}

// Error implements error interface.
func (v *OleError) Error() string {
	return v.String()
}

// Description retrieves error summary, if there is one.
func (v *OleError) Description() string {
	return v.description
}

// SubError returns parent error, if there is one.
func (v *OleError) SubError() error {
	return v.subError
}
 070701000005E5000081A4000000000000000000000001645E367C00000077000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/error_func.go // +build !windows

package ole

// errstr converts error code to string.
func errstr(errno int) string {
	return ""
}
 070701000005E6000081A4000000000000000000000001645E367C0000028A000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/error_windows.go  // +build windows

package ole

import (
	"fmt"
	"syscall"
	"unicode/utf16"
)

// errstr converts error code to string.
func errstr(errno int) string {
	// ask windows for the remaining errors
	var flags uint32 = syscall.FORMAT_MESSAGE_FROM_SYSTEM | syscall.FORMAT_MESSAGE_ARGUMENT_ARRAY | syscall.FORMAT_MESSAGE_IGNORE_INSERTS
	b := make([]uint16, 300)
	n, err := syscall.FormatMessage(flags, 0, uint32(errno), 0, b, nil)
	if err != nil {
		return fmt.Sprintf("error %d (FormatMessage failed with: %v)", errno, err)
	}
	// trim terminating \r and \n
	for ; n > 0 && (b[n-1] == '\n' || b[n-1] == '\r'); n-- {
	}
	return string(utf16.Decode(b[:n]))
}
  070701000005E7000081A4000000000000000000000001645E367C00001FBC000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/guid.go   package ole

var (
	// IID_NULL is null Interface ID, used when no other Interface ID is known.
	IID_NULL = NewGUID("{00000000-0000-0000-0000-000000000000}")

	// IID_IUnknown is for IUnknown interfaces.
	IID_IUnknown = NewGUID("{00000000-0000-0000-C000-000000000046}")

	// IID_IDispatch is for IDispatch interfaces.
	IID_IDispatch = NewGUID("{00020400-0000-0000-C000-000000000046}")

	// IID_IEnumVariant is for IEnumVariant interfaces
	IID_IEnumVariant = NewGUID("{00020404-0000-0000-C000-000000000046}")

	// IID_IConnectionPointContainer is for IConnectionPointContainer interfaces.
	IID_IConnectionPointContainer = NewGUID("{B196B284-BAB4-101A-B69C-00AA00341D07}")

	// IID_IConnectionPoint is for IConnectionPoint interfaces.
	IID_IConnectionPoint = NewGUID("{B196B286-BAB4-101A-B69C-00AA00341D07}")

	// IID_IInspectable is for IInspectable interfaces.
	IID_IInspectable = NewGUID("{AF86E2E0-B12D-4C6A-9C5A-D7AA65101E90}")

	// IID_IProvideClassInfo is for IProvideClassInfo interfaces.
	IID_IProvideClassInfo = NewGUID("{B196B283-BAB4-101A-B69C-00AA00341D07}")
)

// These are for testing and not part of any library.
var (
	// IID_ICOMTestString is for ICOMTestString interfaces.
	//
	// {E0133EB4-C36F-469A-9D3D-C66B84BE19ED}
	IID_ICOMTestString = NewGUID("{E0133EB4-C36F-469A-9D3D-C66B84BE19ED}")

	// IID_ICOMTestInt8 is for ICOMTestInt8 interfaces.
	//
	// {BEB06610-EB84-4155-AF58-E2BFF53680B4}
	IID_ICOMTestInt8 = NewGUID("{BEB06610-EB84-4155-AF58-E2BFF53680B4}")

	// IID_ICOMTestInt16 is for ICOMTestInt16 interfaces.
	//
	// {DAA3F9FA-761E-4976-A860-8364CE55F6FC}
	IID_ICOMTestInt16 = NewGUID("{DAA3F9FA-761E-4976-A860-8364CE55F6FC}")

	// IID_ICOMTestInt32 is for ICOMTestInt32 interfaces.
	//
	// {E3DEDEE7-38A2-4540-91D1-2EEF1D8891B0}
	IID_ICOMTestInt32 = NewGUID("{E3DEDEE7-38A2-4540-91D1-2EEF1D8891B0}")

	// IID_ICOMTestInt64 is for ICOMTestInt64 interfaces.
	//
	// {8D437CBC-B3ED-485C-BC32-C336432A1623}
	IID_ICOMTestInt64 = NewGUID("{8D437CBC-B3ED-485C-BC32-C336432A1623}")

	// IID_ICOMTestFloat is for ICOMTestFloat interfaces.
	//
	// {BF1ED004-EA02-456A-AA55-2AC8AC6B054C}
	IID_ICOMTestFloat = NewGUID("{BF1ED004-EA02-456A-AA55-2AC8AC6B054C}")

	// IID_ICOMTestDouble is for ICOMTestDouble interfaces.
	//
	// {BF908A81-8687-4E93-999F-D86FAB284BA0}
	IID_ICOMTestDouble = NewGUID("{BF908A81-8687-4E93-999F-D86FAB284BA0}")

	// IID_ICOMTestBoolean is for ICOMTestBoolean interfaces.
	//
	// {D530E7A6-4EE8-40D1-8931-3D63B8605010}
	IID_ICOMTestBoolean = NewGUID("{D530E7A6-4EE8-40D1-8931-3D63B8605010}")

	// IID_ICOMEchoTestObject is for ICOMEchoTestObject interfaces.
	//
	// {6485B1EF-D780-4834-A4FE-1EBB51746CA3}
	IID_ICOMEchoTestObject = NewGUID("{6485B1EF-D780-4834-A4FE-1EBB51746CA3}")

	// IID_ICOMTestTypes is for ICOMTestTypes interfaces.
	//
	// {CCA8D7AE-91C0-4277-A8B3-FF4EDF28D3C0}
	IID_ICOMTestTypes = NewGUID("{CCA8D7AE-91C0-4277-A8B3-FF4EDF28D3C0}")

	// CLSID_COMEchoTestObject is for COMEchoTestObject class.
	//
	// {3C24506A-AE9E-4D50-9157-EF317281F1B0}
	CLSID_COMEchoTestObject = NewGUID("{3C24506A-AE9E-4D50-9157-EF317281F1B0}")

	// CLSID_COMTestScalarClass is for COMTestScalarClass class.
	//
	// {865B85C5-0334-4AC6-9EF6-AACEC8FC5E86}
	CLSID_COMTestScalarClass = NewGUID("{865B85C5-0334-4AC6-9EF6-AACEC8FC5E86}")
)

const hextable = "0123456789ABCDEF"
const emptyGUID = "{00000000-0000-0000-0000-000000000000}"

// GUID is Windows API specific GUID type.
//
// This exists to match Windows GUID type for direct passing for COM.
// Format is in xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx.
type GUID struct {
	Data1 uint32
	Data2 uint16
	Data3 uint16
	Data4 [8]byte
}

// NewGUID converts the given string into a globally unique identifier that is
// compliant with the Windows API.
//
// The supplied string may be in any of these formats:
//
//  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//  XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
//  {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
//
// The conversion of the supplied string is not case-sensitive.
func NewGUID(guid string) *GUID {
	d := []byte(guid)
	var d1, d2, d3, d4a, d4b []byte

	switch len(d) {
	case 38:
		if d[0] != '{' || d[37] != '}' {
			return nil
		}
		d = d[1:37]
		fallthrough
	case 36:
		if d[8] != '-' || d[13] != '-' || d[18] != '-' || d[23] != '-' {
			return nil
		}
		d1 = d[0:8]
		d2 = d[9:13]
		d3 = d[14:18]
		d4a = d[19:23]
		d4b = d[24:36]
	case 32:
		d1 = d[0:8]
		d2 = d[8:12]
		d3 = d[12:16]
		d4a = d[16:20]
		d4b = d[20:32]
	default:
		return nil
	}

	var g GUID
	var ok1, ok2, ok3, ok4 bool
	g.Data1, ok1 = decodeHexUint32(d1)
	g.Data2, ok2 = decodeHexUint16(d2)
	g.Data3, ok3 = decodeHexUint16(d3)
	g.Data4, ok4 = decodeHexByte64(d4a, d4b)
	if ok1 && ok2 && ok3 && ok4 {
		return &g
	}
	return nil
}

func decodeHexUint32(src []byte) (value uint32, ok bool) {
	var b1, b2, b3, b4 byte
	var ok1, ok2, ok3, ok4 bool
	b1, ok1 = decodeHexByte(src[0], src[1])
	b2, ok2 = decodeHexByte(src[2], src[3])
	b3, ok3 = decodeHexByte(src[4], src[5])
	b4, ok4 = decodeHexByte(src[6], src[7])
	value = (uint32(b1) << 24) | (uint32(b2) << 16) | (uint32(b3) << 8) | uint32(b4)
	ok = ok1 && ok2 && ok3 && ok4
	return
}

func decodeHexUint16(src []byte) (value uint16, ok bool) {
	var b1, b2 byte
	var ok1, ok2 bool
	b1, ok1 = decodeHexByte(src[0], src[1])
	b2, ok2 = decodeHexByte(src[2], src[3])
	value = (uint16(b1) << 8) | uint16(b2)
	ok = ok1 && ok2
	return
}

func decodeHexByte64(s1 []byte, s2 []byte) (value [8]byte, ok bool) {
	var ok1, ok2, ok3, ok4, ok5, ok6, ok7, ok8 bool
	value[0], ok1 = decodeHexByte(s1[0], s1[1])
	value[1], ok2 = decodeHexByte(s1[2], s1[3])
	value[2], ok3 = decodeHexByte(s2[0], s2[1])
	value[3], ok4 = decodeHexByte(s2[2], s2[3])
	value[4], ok5 = decodeHexByte(s2[4], s2[5])
	value[5], ok6 = decodeHexByte(s2[6], s2[7])
	value[6], ok7 = decodeHexByte(s2[8], s2[9])
	value[7], ok8 = decodeHexByte(s2[10], s2[11])
	ok = ok1 && ok2 && ok3 && ok4 && ok5 && ok6 && ok7 && ok8
	return
}

func decodeHexByte(c1, c2 byte) (value byte, ok bool) {
	var n1, n2 byte
	var ok1, ok2 bool
	n1, ok1 = decodeHexChar(c1)
	n2, ok2 = decodeHexChar(c2)
	value = (n1 << 4) | n2
	ok = ok1 && ok2
	return
}

func decodeHexChar(c byte) (byte, bool) {
	switch {
	case '0' <= c && c <= '9':
		return c - '0', true
	case 'a' <= c && c <= 'f':
		return c - 'a' + 10, true
	case 'A' <= c && c <= 'F':
		return c - 'A' + 10, true
	}

	return 0, false
}

// String converts the GUID to string form. It will adhere to this pattern:
//
//  {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
//
// If the GUID is nil, the string representation of an empty GUID is returned:
//
//  {00000000-0000-0000-0000-000000000000}
func (guid *GUID) String() string {
	if guid == nil {
		return emptyGUID
	}

	var c [38]byte
	c[0] = '{'
	putUint32Hex(c[1:9], guid.Data1)
	c[9] = '-'
	putUint16Hex(c[10:14], guid.Data2)
	c[14] = '-'
	putUint16Hex(c[15:19], guid.Data3)
	c[19] = '-'
	putByteHex(c[20:24], guid.Data4[0:2])
	c[24] = '-'
	putByteHex(c[25:37], guid.Data4[2:8])
	c[37] = '}'
	return string(c[:])
}

func putUint32Hex(b []byte, v uint32) {
	b[0] = hextable[byte(v>>24)>>4]
	b[1] = hextable[byte(v>>24)&0x0f]
	b[2] = hextable[byte(v>>16)>>4]
	b[3] = hextable[byte(v>>16)&0x0f]
	b[4] = hextable[byte(v>>8)>>4]
	b[5] = hextable[byte(v>>8)&0x0f]
	b[6] = hextable[byte(v)>>4]
	b[7] = hextable[byte(v)&0x0f]
}

func putUint16Hex(b []byte, v uint16) {
	b[0] = hextable[byte(v>>8)>>4]
	b[1] = hextable[byte(v>>8)&0x0f]
	b[2] = hextable[byte(v)>>4]
	b[3] = hextable[byte(v)&0x0f]
}

func putByteHex(dst, src []byte) {
	for i := 0; i < len(src); i++ {
		dst[i*2] = hextable[src[i]>>4]
		dst[i*2+1] = hextable[src[i]&0x0f]
	}
}

// IsEqualGUID compares two GUID.
//
// Not constant time comparison.
func IsEqualGUID(guid1 *GUID, guid2 *GUID) bool {
	return guid1.Data1 == guid2.Data1 &&
		guid1.Data2 == guid2.Data2 &&
		guid1.Data3 == guid2.Data3 &&
		guid1.Data4[0] == guid2.Data4[0] &&
		guid1.Data4[1] == guid2.Data4[1] &&
		guid1.Data4[2] == guid2.Data4[2] &&
		guid1.Data4[3] == guid2.Data4[3] &&
		guid1.Data4[4] == guid2.Data4[4] &&
		guid1.Data4[5] == guid2.Data4[5] &&
		guid1.Data4[6] == guid2.Data4[6] &&
		guid1.Data4[7] == guid2.Data4[7]
}
070701000005E8000081A4000000000000000000000001645E367C000001B2000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/iconnectionpoint.go   package ole

import "unsafe"

type IConnectionPoint struct {
	IUnknown
}

type IConnectionPointVtbl struct {
	IUnknownVtbl
	GetConnectionInterface      uintptr
	GetConnectionPointContainer uintptr
	Advise                      uintptr
	Unadvise                    uintptr
	EnumConnections             uintptr
}

func (v *IConnectionPoint) VTable() *IConnectionPointVtbl {
	return (*IConnectionPointVtbl)(unsafe.Pointer(v.RawVTable))
}
  070701000005E9000081A4000000000000000000000001645E367C000001C2000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/iconnectionpoint_func.go  // +build !windows

package ole

import "unsafe"

func (v *IConnectionPoint) GetConnectionInterface(piid **GUID) int32 {
	return int32(0)
}

func (v *IConnectionPoint) Advise(unknown *IUnknown) (uint32, error) {
	return uint32(0), NewError(E_NOTIMPL)
}

func (v *IConnectionPoint) Unadvise(cookie uint32) error {
	return NewError(E_NOTIMPL)
}

func (v *IConnectionPoint) EnumConnections(p *unsafe.Pointer) (err error) {
	return NewError(E_NOTIMPL)
}
  070701000005EA000081A4000000000000000000000001645E367C00000360000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/iconnectionpoint_windows.go   // +build windows

package ole

import (
	"syscall"
	"unsafe"
)

func (v *IConnectionPoint) GetConnectionInterface(piid **GUID) int32 {
	// XXX: This doesn't look like it does what it's supposed to
	return release((*IUnknown)(unsafe.Pointer(v)))
}

func (v *IConnectionPoint) Advise(unknown *IUnknown) (cookie uint32, err error) {
	hr, _, _ := syscall.Syscall(
		v.VTable().Advise,
		3,
		uintptr(unsafe.Pointer(v)),
		uintptr(unsafe.Pointer(unknown)),
		uintptr(unsafe.Pointer(&cookie)))
	if hr != 0 {
		err = NewError(hr)
	}
	return
}

func (v *IConnectionPoint) Unadvise(cookie uint32) (err error) {
	hr, _, _ := syscall.Syscall(
		v.VTable().Unadvise,
		2,
		uintptr(unsafe.Pointer(v)),
		uintptr(cookie),
		0)
	if hr != 0 {
		err = NewError(hr)
	}
	return
}

func (v *IConnectionPoint) EnumConnections(p *unsafe.Pointer) error {
	return NewError(E_NOTIMPL)
}
070701000005EB000081A4000000000000000000000001645E367C00000162000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/iconnectionpointcontainer.go  package ole

import "unsafe"

type IConnectionPointContainer struct {
	IUnknown
}

type IConnectionPointContainerVtbl struct {
	IUnknownVtbl
	EnumConnectionPoints uintptr
	FindConnectionPoint  uintptr
}

func (v *IConnectionPointContainer) VTable() *IConnectionPointContainerVtbl {
	return (*IConnectionPointContainerVtbl)(unsafe.Pointer(v.RawVTable))
}
  070701000005EC000081A4000000000000000000000001645E367C00000118000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/iconnectionpointcontainer_func.go // +build !windows

package ole

func (v *IConnectionPointContainer) EnumConnectionPoints(points interface{}) error {
	return NewError(E_NOTIMPL)
}

func (v *IConnectionPointContainer) FindConnectionPoint(iid *GUID, point **IConnectionPoint) error {
	return NewError(E_NOTIMPL)
}
070701000005ED000081A4000000000000000000000001645E367C000001F5000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/iconnectionpointcontainer_windows.go  // +build windows

package ole

import (
	"syscall"
	"unsafe"
)

func (v *IConnectionPointContainer) EnumConnectionPoints(points interface{}) error {
	return NewError(E_NOTIMPL)
}

func (v *IConnectionPointContainer) FindConnectionPoint(iid *GUID, point **IConnectionPoint) (err error) {
	hr, _, _ := syscall.Syscall(
		v.VTable().FindConnectionPoint,
		3,
		uintptr(unsafe.Pointer(v)),
		uintptr(unsafe.Pointer(iid)),
		uintptr(unsafe.Pointer(point)))
	if hr != 0 {
		err = NewError(hr)
	}
	return
}
   070701000005EE000081A4000000000000000000000001645E367C00000BA4000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/idispatch.go  package ole

import "unsafe"

type IDispatch struct {
	IUnknown
}

type IDispatchVtbl struct {
	IUnknownVtbl
	GetTypeInfoCount uintptr
	GetTypeInfo      uintptr
	GetIDsOfNames    uintptr
	Invoke           uintptr
}

func (v *IDispatch) VTable() *IDispatchVtbl {
	return (*IDispatchVtbl)(unsafe.Pointer(v.RawVTable))
}

func (v *IDispatch) GetIDsOfName(names []string) (dispid []int32, err error) {
	dispid, err = getIDsOfName(v, names)
	return
}

func (v *IDispatch) Invoke(dispid int32, dispatch int16, params ...interface{}) (result *VARIANT, err error) {
	result, err = invoke(v, dispid, dispatch, params...)
	return
}

func (v *IDispatch) GetTypeInfoCount() (c uint32, err error) {
	c, err = getTypeInfoCount(v)
	return
}

func (v *IDispatch) GetTypeInfo() (tinfo *ITypeInfo, err error) {
	tinfo, err = getTypeInfo(v)
	return
}

// GetSingleIDOfName is a helper that returns single display ID for IDispatch name.
//
// This replaces the common pattern of attempting to get a single name from the list of available
// IDs. It gives the first ID, if it is available.
func (v *IDispatch) GetSingleIDOfName(name string) (displayID int32, err error) {
	var displayIDs []int32
	displayIDs, err = v.GetIDsOfName([]string{name})
	if err != nil {
		return
	}
	displayID = displayIDs[0]
	return
}

// InvokeWithOptionalArgs accepts arguments as an array, works like Invoke.
//
// Accepts name and will attempt to retrieve Display ID to pass to Invoke.
//
// Passing params as an array is a workaround that could be fixed in later versions of Go that
// prevent passing empty params. During testing it was discovered that this is an acceptable way of
// getting around not being able to pass params normally.
func (v *IDispatch) InvokeWithOptionalArgs(name string, dispatch int16, params []interface{}) (result *VARIANT, err error) {
	displayID, err := v.GetSingleIDOfName(name)
	if err != nil {
		return
	}

	if len(params) < 1 {
		result, err = v.Invoke(displayID, dispatch)
	} else {
		result, err = v.Invoke(displayID, dispatch, params...)
	}

	return
}

// CallMethod invokes named function with arguments on object.
func (v *IDispatch) CallMethod(name string, params ...interface{}) (*VARIANT, error) {
	return v.InvokeWithOptionalArgs(name, DISPATCH_METHOD, params)
}

// GetProperty retrieves the property with the name with the ability to pass arguments.
//
// Most of the time you will not need to pass arguments as most objects do not allow for this
// feature. Or at least, should not allow for this feature. Some servers don't follow best practices
// and this is provided for those edge cases.
func (v *IDispatch) GetProperty(name string, params ...interface{}) (*VARIANT, error) {
	return v.InvokeWithOptionalArgs(name, DISPATCH_PROPERTYGET, params)
}

// PutProperty attempts to mutate a property in the object.
func (v *IDispatch) PutProperty(name string, params ...interface{}) (*VARIANT, error) {
	return v.InvokeWithOptionalArgs(name, DISPATCH_PROPERTYPUT, params)
}
070701000005EF000081A4000000000000000000000001645E367C000001D9000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/idispatch_func.go // +build !windows

package ole

func getIDsOfName(disp *IDispatch, names []string) ([]int32, error) {
	return []int32{}, NewError(E_NOTIMPL)
}

func getTypeInfoCount(disp *IDispatch) (uint32, error) {
	return uint32(0), NewError(E_NOTIMPL)
}

func getTypeInfo(disp *IDispatch) (*ITypeInfo, error) {
	return nil, NewError(E_NOTIMPL)
}

func invoke(disp *IDispatch, dispid int32, dispatch int16, params ...interface{}) (*VARIANT, error) {
	return nil, NewError(E_NOTIMPL)
}
   070701000005F0000081A4000000000000000000000001645E367C000019E4000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/idispatch_windows.go  // +build windows

package ole

import (
	"math/big"
	"syscall"
	"time"
	"unsafe"
)

func getIDsOfName(disp *IDispatch, names []string) (dispid []int32, err error) {
	wnames := make([]*uint16, len(names))
	for i := 0; i < len(names); i++ {
		wnames[i] = syscall.StringToUTF16Ptr(names[i])
	}
	dispid = make([]int32, len(names))
	namelen := uint32(len(names))
	hr, _, _ := syscall.Syscall6(
		disp.VTable().GetIDsOfNames,
		6,
		uintptr(unsafe.Pointer(disp)),
		uintptr(unsafe.Pointer(IID_NULL)),
		uintptr(unsafe.Pointer(&wnames[0])),
		uintptr(namelen),
		uintptr(GetUserDefaultLCID()),
		uintptr(unsafe.Pointer(&dispid[0])))
	if hr != 0 {
		err = NewError(hr)
	}
	return
}

func getTypeInfoCount(disp *IDispatch) (c uint32, err error) {
	hr, _, _ := syscall.Syscall(
		disp.VTable().GetTypeInfoCount,
		2,
		uintptr(unsafe.Pointer(disp)),
		uintptr(unsafe.Pointer(&c)),
		0)
	if hr != 0 {
		err = NewError(hr)
	}
	return
}

func getTypeInfo(disp *IDispatch) (tinfo *ITypeInfo, err error) {
	hr, _, _ := syscall.Syscall(
		disp.VTable().GetTypeInfo,
		3,
		uintptr(unsafe.Pointer(disp)),
		uintptr(GetUserDefaultLCID()),
		uintptr(unsafe.Pointer(&tinfo)))
	if hr != 0 {
		err = NewError(hr)
	}
	return
}

func invoke(disp *IDispatch, dispid int32, dispatch int16, params ...interface{}) (result *VARIANT, err error) {
	var dispparams DISPPARAMS

	if dispatch&DISPATCH_PROPERTYPUT != 0 {
		dispnames := [1]int32{DISPID_PROPERTYPUT}
		dispparams.rgdispidNamedArgs = uintptr(unsafe.Pointer(&dispnames[0]))
		dispparams.cNamedArgs = 1
	} else if dispatch&DISPATCH_PROPERTYPUTREF != 0 {
		dispnames := [1]int32{DISPID_PROPERTYPUT}
		dispparams.rgdispidNamedArgs = uintptr(unsafe.Pointer(&dispnames[0]))
		dispparams.cNamedArgs = 1
	}
	var vargs []VARIANT
	if len(params) > 0 {
		vargs = make([]VARIANT, len(params))
		for i, v := range params {
			//n := len(params)-i-1
			n := len(params) - i - 1
			VariantInit(&vargs[n])
			switch vv := v.(type) {
			case bool:
				if vv {
					vargs[n] = NewVariant(VT_BOOL, 0xffff)
				} else {
					vargs[n] = NewVariant(VT_BOOL, 0)
				}
			case *bool:
				vargs[n] = NewVariant(VT_BOOL|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*bool)))))
			case uint8:
				vargs[n] = NewVariant(VT_I1, int64(v.(uint8)))
			case *uint8:
				vargs[n] = NewVariant(VT_I1|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*uint8)))))
			case int8:
				vargs[n] = NewVariant(VT_I1, int64(v.(int8)))
			case *int8:
				vargs[n] = NewVariant(VT_I1|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*uint8)))))
			case int16:
				vargs[n] = NewVariant(VT_I2, int64(v.(int16)))
			case *int16:
				vargs[n] = NewVariant(VT_I2|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*int16)))))
			case uint16:
				vargs[n] = NewVariant(VT_UI2, int64(v.(uint16)))
			case *uint16:
				vargs[n] = NewVariant(VT_UI2|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*uint16)))))
			case int32:
				vargs[n] = NewVariant(VT_I4, int64(v.(int32)))
			case *int32:
				vargs[n] = NewVariant(VT_I4|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*int32)))))
			case uint32:
				vargs[n] = NewVariant(VT_UI4, int64(v.(uint32)))
			case *uint32:
				vargs[n] = NewVariant(VT_UI4|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*uint32)))))
			case int64:
				vargs[n] = NewVariant(VT_I8, int64(v.(int64)))
			case *int64:
				vargs[n] = NewVariant(VT_I8|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*int64)))))
			case uint64:
				vargs[n] = NewVariant(VT_UI8, int64(uintptr(v.(uint64))))
			case *uint64:
				vargs[n] = NewVariant(VT_UI8|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*uint64)))))
			case int:
				vargs[n] = NewVariant(VT_I4, int64(v.(int)))
			case *int:
				vargs[n] = NewVariant(VT_I4|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*int)))))
			case uint:
				vargs[n] = NewVariant(VT_UI4, int64(v.(uint)))
			case *uint:
				vargs[n] = NewVariant(VT_UI4|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*uint)))))
			case float32:
				vargs[n] = NewVariant(VT_R4, *(*int64)(unsafe.Pointer(&vv)))
			case *float32:
				vargs[n] = NewVariant(VT_R4|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*float32)))))
			case float64:
				vargs[n] = NewVariant(VT_R8, *(*int64)(unsafe.Pointer(&vv)))
			case *float64:
				vargs[n] = NewVariant(VT_R8|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*float64)))))
			case *big.Int:
				vargs[n] = NewVariant(VT_DECIMAL, v.(*big.Int).Int64())
			case string:
				vargs[n] = NewVariant(VT_BSTR, int64(uintptr(unsafe.Pointer(SysAllocStringLen(v.(string))))))
			case *string:
				vargs[n] = NewVariant(VT_BSTR|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*string)))))
			case time.Time:
				s := vv.Format("2006-01-02 15:04:05")
				vargs[n] = NewVariant(VT_BSTR, int64(uintptr(unsafe.Pointer(SysAllocStringLen(s)))))
			case *time.Time:
				s := vv.Format("2006-01-02 15:04:05")
				vargs[n] = NewVariant(VT_BSTR|VT_BYREF, int64(uintptr(unsafe.Pointer(&s))))
			case *IDispatch:
				vargs[n] = NewVariant(VT_DISPATCH, int64(uintptr(unsafe.Pointer(v.(*IDispatch)))))
			case **IDispatch:
				vargs[n] = NewVariant(VT_DISPATCH|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(**IDispatch)))))
			case nil:
				vargs[n] = NewVariant(VT_NULL, 0)
			case *VARIANT:
				vargs[n] = NewVariant(VT_VARIANT|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*VARIANT)))))
			case []byte:
				safeByteArray := safeArrayFromByteSlice(v.([]byte))
				vargs[n] = NewVariant(VT_ARRAY|VT_UI1, int64(uintptr(unsafe.Pointer(safeByteArray))))
				defer VariantClear(&vargs[n])
			case []string:
				safeByteArray := safeArrayFromStringSlice(v.([]string))
				vargs[n] = NewVariant(VT_ARRAY|VT_BSTR, int64(uintptr(unsafe.Pointer(safeByteArray))))
				defer VariantClear(&vargs[n])
			default:
				panic("unknown type")
			}
		}
		dispparams.rgvarg = uintptr(unsafe.Pointer(&vargs[0]))
		dispparams.cArgs = uint32(len(params))
	}

	result = new(VARIANT)
	var excepInfo EXCEPINFO
	VariantInit(result)
	hr, _, _ := syscall.Syscall9(
		disp.VTable().Invoke,
		9,
		uintptr(unsafe.Pointer(disp)),
		uintptr(dispid),
		uintptr(unsafe.Pointer(IID_NULL)),
		uintptr(GetUserDefaultLCID()),
		uintptr(dispatch),
		uintptr(unsafe.Pointer(&dispparams)),
		uintptr(unsafe.Pointer(result)),
		uintptr(unsafe.Pointer(&excepInfo)),
		0)
	if hr != 0 {
		excepInfo.renderStrings()
		excepInfo.Clear()
		err = NewErrorWithSubError(hr, excepInfo.description, excepInfo)
	}
	for i, varg := range vargs {
		n := len(params) - i - 1
		if varg.VT == VT_BSTR && varg.Val != 0 {
			SysFreeString(((*int16)(unsafe.Pointer(uintptr(varg.Val)))))
		}
		if varg.VT == (VT_BSTR|VT_BYREF) && varg.Val != 0 {
			*(params[n].(*string)) = LpOleStrToString(*(**uint16)(unsafe.Pointer(uintptr(varg.Val))))
		}
	}
	return
}
070701000005F1000081A4000000000000000000000001645E367C00000121000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/ienumvariant.go   package ole

import "unsafe"

type IEnumVARIANT struct {
	IUnknown
}

type IEnumVARIANTVtbl struct {
	IUnknownVtbl
	Next  uintptr
	Skip  uintptr
	Reset uintptr
	Clone uintptr
}

func (v *IEnumVARIANT) VTable() *IEnumVARIANTVtbl {
	return (*IEnumVARIANTVtbl)(unsafe.Pointer(v.RawVTable))
}
   070701000005F2000081A4000000000000000000000001645E367C0000019D000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/ienumvariant_func.go  // +build !windows

package ole

func (enum *IEnumVARIANT) Clone() (*IEnumVARIANT, error) {
	return nil, NewError(E_NOTIMPL)
}

func (enum *IEnumVARIANT) Reset() error {
	return NewError(E_NOTIMPL)
}

func (enum *IEnumVARIANT) Skip(celt uint) error {
	return NewError(E_NOTIMPL)
}

func (enum *IEnumVARIANT) Next(celt uint) (VARIANT, uint, error) {
	return NewVariant(VT_NULL, int64(0)), 0, NewError(E_NOTIMPL)
}
   070701000005F3000081A4000000000000000000000001645E367C0000041C000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/ienumvariant_windows.go   // +build windows

package ole

import (
	"syscall"
	"unsafe"
)

func (enum *IEnumVARIANT) Clone() (cloned *IEnumVARIANT, err error) {
	hr, _, _ := syscall.Syscall(
		enum.VTable().Clone,
		2,
		uintptr(unsafe.Pointer(enum)),
		uintptr(unsafe.Pointer(&cloned)),
		0)
	if hr != 0 {
		err = NewError(hr)
	}
	return
}

func (enum *IEnumVARIANT) Reset() (err error) {
	hr, _, _ := syscall.Syscall(
		enum.VTable().Reset,
		1,
		uintptr(unsafe.Pointer(enum)),
		0,
		0)
	if hr != 0 {
		err = NewError(hr)
	}
	return
}

func (enum *IEnumVARIANT) Skip(celt uint) (err error) {
	hr, _, _ := syscall.Syscall(
		enum.VTable().Skip,
		2,
		uintptr(unsafe.Pointer(enum)),
		uintptr(celt),
		0)
	if hr != 0 {
		err = NewError(hr)
	}
	return
}

func (enum *IEnumVARIANT) Next(celt uint) (array VARIANT, length uint, err error) {
	hr, _, _ := syscall.Syscall6(
		enum.VTable().Next,
		4,
		uintptr(unsafe.Pointer(enum)),
		uintptr(celt),
		uintptr(unsafe.Pointer(&array)),
		uintptr(unsafe.Pointer(&length)),
		0,
		0)
	if hr != 0 {
		err = NewError(hr)
	}
	return
}
070701000005F4000081A4000000000000000000000001645E367C0000013C000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/iinspectable.go   package ole

import "unsafe"

type IInspectable struct {
	IUnknown
}

type IInspectableVtbl struct {
	IUnknownVtbl
	GetIIds             uintptr
	GetRuntimeClassName uintptr
	GetTrustLevel       uintptr
}

func (v *IInspectable) VTable() *IInspectableVtbl {
	return (*IInspectableVtbl)(unsafe.Pointer(v.RawVTable))
}
070701000005F5000081A4000000000000000000000001645E367C00000143000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/iinspectable_func.go  // +build !windows

package ole

func (v *IInspectable) GetIids() ([]*GUID, error) {
	return []*GUID{}, NewError(E_NOTIMPL)
}

func (v *IInspectable) GetRuntimeClassName() (string, error) {
	return "", NewError(E_NOTIMPL)
}

func (v *IInspectable) GetTrustLevel() (uint32, error) {
	return uint32(0), NewError(E_NOTIMPL)
}
 070701000005F6000081A4000000000000000000000001645E367C0000059D000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/iinspectable_windows.go   // +build windows

package ole

import (
	"bytes"
	"encoding/binary"
	"reflect"
	"syscall"
	"unsafe"
)

func (v *IInspectable) GetIids() (iids []*GUID, err error) {
	var count uint32
	var array uintptr
	hr, _, _ := syscall.Syscall(
		v.VTable().GetIIds,
		3,
		uintptr(unsafe.Pointer(v)),
		uintptr(unsafe.Pointer(&count)),
		uintptr(unsafe.Pointer(&array)))
	if hr != 0 {
		err = NewError(hr)
		return
	}
	defer CoTaskMemFree(array)

	iids = make([]*GUID, count)
	byteCount := count * uint32(unsafe.Sizeof(GUID{}))
	slicehdr := reflect.SliceHeader{Data: array, Len: int(byteCount), Cap: int(byteCount)}
	byteSlice := *(*[]byte)(unsafe.Pointer(&slicehdr))
	reader := bytes.NewReader(byteSlice)
	for i := range iids {
		guid := GUID{}
		err = binary.Read(reader, binary.LittleEndian, &guid)
		if err != nil {
			return
		}
		iids[i] = &guid
	}
	return
}

func (v *IInspectable) GetRuntimeClassName() (s string, err error) {
	var hstring HString
	hr, _, _ := syscall.Syscall(
		v.VTable().GetRuntimeClassName,
		2,
		uintptr(unsafe.Pointer(v)),
		uintptr(unsafe.Pointer(&hstring)),
		0)
	if hr != 0 {
		err = NewError(hr)
		return
	}
	s = hstring.String()
	DeleteHString(hstring)
	return
}

func (v *IInspectable) GetTrustLevel() (level uint32, err error) {
	hr, _, _ := syscall.Syscall(
		v.VTable().GetTrustLevel,
		2,
		uintptr(unsafe.Pointer(v)),
		uintptr(unsafe.Pointer(&level)),
		0)
	if hr != 0 {
		err = NewError(hr)
	}
	return
}
   070701000005F7000081A4000000000000000000000001645E367C00000188000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/iprovideclassinfo.go  package ole

import "unsafe"

type IProvideClassInfo struct {
	IUnknown
}

type IProvideClassInfoVtbl struct {
	IUnknownVtbl
	GetClassInfo uintptr
}

func (v *IProvideClassInfo) VTable() *IProvideClassInfoVtbl {
	return (*IProvideClassInfoVtbl)(unsafe.Pointer(v.RawVTable))
}

func (v *IProvideClassInfo) GetClassInfo() (cinfo *ITypeInfo, err error) {
	cinfo, err = getClassInfo(v)
	return
}
070701000005F8000081A4000000000000000000000001645E367C0000008F000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/iprovideclassinfo_func.go // +build !windows

package ole

func getClassInfo(disp *IProvideClassInfo) (tinfo *ITypeInfo, err error) {
	return nil, NewError(E_NOTIMPL)
}
 070701000005F9000081A4000000000000000000000001645E367C00000146000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/iprovideclassinfo_windows.go  // +build windows

package ole

import (
	"syscall"
	"unsafe"
)

func getClassInfo(disp *IProvideClassInfo) (tinfo *ITypeInfo, err error) {
	hr, _, _ := syscall.Syscall(
		disp.VTable().GetClassInfo,
		2,
		uintptr(unsafe.Pointer(disp)),
		uintptr(unsafe.Pointer(&tinfo)),
		0)
	if hr != 0 {
		err = NewError(hr)
	}
	return
}
  070701000005FA000081A4000000000000000000000001645E367C00000310000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/itypeinfo.go  package ole

import "unsafe"

type ITypeInfo struct {
	IUnknown
}

type ITypeInfoVtbl struct {
	IUnknownVtbl
	GetTypeAttr          uintptr
	GetTypeComp          uintptr
	GetFuncDesc          uintptr
	GetVarDesc           uintptr
	GetNames             uintptr
	GetRefTypeOfImplType uintptr
	GetImplTypeFlags     uintptr
	GetIDsOfNames        uintptr
	Invoke               uintptr
	GetDocumentation     uintptr
	GetDllEntry          uintptr
	GetRefTypeInfo       uintptr
	AddressOfMember      uintptr
	CreateInstance       uintptr
	GetMops              uintptr
	GetContainingTypeLib uintptr
	ReleaseTypeAttr      uintptr
	ReleaseFuncDesc      uintptr
	ReleaseVarDesc       uintptr
}

func (v *ITypeInfo) VTable() *ITypeInfoVtbl {
	return (*ITypeInfoVtbl)(unsafe.Pointer(v.RawVTable))
}
070701000005FB000081A4000000000000000000000001645E367C0000007B000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/itypeinfo_func.go // +build !windows

package ole

func (v *ITypeInfo) GetTypeAttr() (*TYPEATTR, error) {
	return nil, NewError(E_NOTIMPL)
}
 070701000005FC000081A4000000000000000000000001645E367C0000013E000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/itypeinfo_windows.go  // +build windows

package ole

import (
	"syscall"
	"unsafe"
)

func (v *ITypeInfo) GetTypeAttr() (tattr *TYPEATTR, err error) {
	hr, _, _ := syscall.Syscall(
		uintptr(v.VTable().GetTypeAttr),
		2,
		uintptr(unsafe.Pointer(v)),
		uintptr(unsafe.Pointer(&tattr)),
		0)
	if hr != 0 {
		err = NewError(hr)
	}
	return
}
  070701000005FD000081A4000000000000000000000001645E367C000004C6000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/iunknown.go   package ole

import "unsafe"

type IUnknown struct {
	RawVTable *interface{}
}

type IUnknownVtbl struct {
	QueryInterface uintptr
	AddRef         uintptr
	Release        uintptr
}

type UnknownLike interface {
	QueryInterface(iid *GUID) (disp *IDispatch, err error)
	AddRef() int32
	Release() int32
}

func (v *IUnknown) VTable() *IUnknownVtbl {
	return (*IUnknownVtbl)(unsafe.Pointer(v.RawVTable))
}

func (v *IUnknown) PutQueryInterface(interfaceID *GUID, obj interface{}) error {
	return reflectQueryInterface(v, v.VTable().QueryInterface, interfaceID, obj)
}

func (v *IUnknown) IDispatch(interfaceID *GUID) (dispatch *IDispatch, err error) {
	err = v.PutQueryInterface(interfaceID, &dispatch)
	return
}

func (v *IUnknown) IEnumVARIANT(interfaceID *GUID) (enum *IEnumVARIANT, err error) {
	err = v.PutQueryInterface(interfaceID, &enum)
	return
}

func (v *IUnknown) QueryInterface(iid *GUID) (*IDispatch, error) {
	return queryInterface(v, iid)
}

func (v *IUnknown) MustQueryInterface(iid *GUID) (disp *IDispatch) {
	unk, err := queryInterface(v, iid)
	if err != nil {
		panic(err)
	}
	return unk
}

func (v *IUnknown) AddRef() int32 {
	return addRef(v)
}

func (v *IUnknown) Release() int32 {
	return release(v)
}
  070701000005FE000081A4000000000000000000000001645E367C00000180000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/iunknown_func.go  // +build !windows

package ole

func reflectQueryInterface(self interface{}, method uintptr, interfaceID *GUID, obj interface{}) (err error) {
	return NewError(E_NOTIMPL)
}

func queryInterface(unk *IUnknown, iid *GUID) (disp *IDispatch, err error) {
	return nil, NewError(E_NOTIMPL)
}

func addRef(unk *IUnknown) int32 {
	return 0
}

func release(unk *IUnknown) int32 {
	return 0
}
070701000005FF000081A4000000000000000000000001645E367C0000042C000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/iunknown_windows.go   // +build windows

package ole

import (
	"reflect"
	"syscall"
	"unsafe"
)

func reflectQueryInterface(self interface{}, method uintptr, interfaceID *GUID, obj interface{}) (err error) {
	selfValue := reflect.ValueOf(self).Elem()
	objValue := reflect.ValueOf(obj).Elem()

	hr, _, _ := syscall.Syscall(
		method,
		3,
		selfValue.UnsafeAddr(),
		uintptr(unsafe.Pointer(interfaceID)),
		objValue.Addr().Pointer())
	if hr != 0 {
		err = NewError(hr)
	}
	return
}

func queryInterface(unk *IUnknown, iid *GUID) (disp *IDispatch, err error) {
	hr, _, _ := syscall.Syscall(
		unk.VTable().QueryInterface,
		3,
		uintptr(unsafe.Pointer(unk)),
		uintptr(unsafe.Pointer(iid)),
		uintptr(unsafe.Pointer(&disp)))
	if hr != 0 {
		err = NewError(hr)
	}
	return
}

func addRef(unk *IUnknown) int32 {
	ret, _, _ := syscall.Syscall(
		unk.VTable().AddRef,
		1,
		uintptr(unsafe.Pointer(unk)),
		0,
		0)
	return int32(ret)
}

func release(unk *IUnknown) int32 {
	ret, _, _ := syscall.Syscall(
		unk.VTable().Release,
		1,
		uintptr(unsafe.Pointer(unk)),
		0,
		0)
	return int32(ret)
}
07070100000600000081A4000000000000000000000001645E367C00000FCC000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/ole.go    package ole

import (
	"fmt"
	"strings"
	"unsafe"
)

// DISPPARAMS are the arguments that passed to methods or property.
type DISPPARAMS struct {
	rgvarg            uintptr
	rgdispidNamedArgs uintptr
	cArgs             uint32
	cNamedArgs        uint32
}

// EXCEPINFO defines exception info.
type EXCEPINFO struct {
	wCode             uint16
	wReserved         uint16
	bstrSource        *uint16
	bstrDescription   *uint16
	bstrHelpFile      *uint16
	dwHelpContext     uint32
	pvReserved        uintptr
	pfnDeferredFillIn uintptr
	scode             uint32

	// Go-specific part. Don't move upper cos it'll break structure layout for native code.
	rendered    bool
	source      string
	description string
	helpFile    string
}

// renderStrings translates BSTR strings to Go ones so `.Error` and `.String`
// could be safely called after `.Clear`. We need this when we can't rely on
// a caller to call `.Clear`.
func (e *EXCEPINFO) renderStrings() {
	e.rendered = true
	if e.bstrSource == nil {
		e.source = "<nil>"
	} else {
		e.source = BstrToString(e.bstrSource)
	}
	if e.bstrDescription == nil {
		e.description = "<nil>"
	} else {
		e.description = BstrToString(e.bstrDescription)
	}
	if e.bstrHelpFile == nil {
		e.helpFile = "<nil>"
	} else {
		e.helpFile = BstrToString(e.bstrHelpFile)
	}
}

// Clear frees BSTR strings inside an EXCEPINFO and set it to NULL.
func (e *EXCEPINFO) Clear() {
	freeBSTR := func(s *uint16) {
		// SysFreeString don't return errors and is safe for call's on NULL.
		// https://docs.microsoft.com/en-us/windows/win32/api/oleauto/nf-oleauto-sysfreestring
		_ = SysFreeString((*int16)(unsafe.Pointer(s)))
	}

	if e.bstrSource != nil {
		freeBSTR(e.bstrSource)
		e.bstrSource = nil
	}
	if e.bstrDescription != nil {
		freeBSTR(e.bstrDescription)
		e.bstrDescription = nil
	}
	if e.bstrHelpFile != nil {
		freeBSTR(e.bstrHelpFile)
		e.bstrHelpFile = nil
	}
}

// WCode return wCode in EXCEPINFO.
func (e EXCEPINFO) WCode() uint16 {
	return e.wCode
}

// SCODE return scode in EXCEPINFO.
func (e EXCEPINFO) SCODE() uint32 {
	return e.scode
}

// String convert EXCEPINFO to string.
func (e EXCEPINFO) String() string {
	if !e.rendered {
		e.renderStrings()
	}
	return fmt.Sprintf(
		"wCode: %#x, bstrSource: %v, bstrDescription: %v, bstrHelpFile: %v, dwHelpContext: %#x, scode: %#x",
		e.wCode, e.source, e.description, e.helpFile, e.dwHelpContext, e.scode,
	)
}

// Error implements error interface and returns error string.
func (e EXCEPINFO) Error() string {
	if !e.rendered {
		e.renderStrings()
	}

	if e.description != "<nil>" {
		return strings.TrimSpace(e.description)
	}

	code := e.scode
	if e.wCode != 0 {
		code = uint32(e.wCode)
	}
	return fmt.Sprintf("%v: %#x", e.source, code)
}

// PARAMDATA defines parameter data type.
type PARAMDATA struct {
	Name *int16
	Vt   uint16
}

// METHODDATA defines method info.
type METHODDATA struct {
	Name     *uint16
	Data     *PARAMDATA
	Dispid   int32
	Meth     uint32
	CC       int32
	CArgs    uint32
	Flags    uint16
	VtReturn uint32
}

// INTERFACEDATA defines interface info.
type INTERFACEDATA struct {
	MethodData *METHODDATA
	CMembers   uint32
}

// Point is 2D vector type.
type Point struct {
	X int32
	Y int32
}

// Msg is message between processes.
type Msg struct {
	Hwnd    uint32
	Message uint32
	Wparam  int32
	Lparam  int32
	Time    uint32
	Pt      Point
}

// TYPEDESC defines data type.
type TYPEDESC struct {
	Hreftype uint32
	VT       uint16
}

// IDLDESC defines IDL info.
type IDLDESC struct {
	DwReserved uint32
	WIDLFlags  uint16
}

// TYPEATTR defines type info.
type TYPEATTR struct {
	Guid             GUID
	Lcid             uint32
	dwReserved       uint32
	MemidConstructor int32
	MemidDestructor  int32
	LpstrSchema      *uint16
	CbSizeInstance   uint32
	Typekind         int32
	CFuncs           uint16
	CVars            uint16
	CImplTypes       uint16
	CbSizeVft        uint16
	CbAlignment      uint16
	WTypeFlags       uint16
	WMajorVerNum     uint16
	WMinorVerNum     uint16
	TdescAlias       TYPEDESC
	IdldescType      IDLDESC
}
07070100000601000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/oleutil   07070100000602000081A4000000000000000000000001645E367C000008C2000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/oleutil/connection.go // +build windows

package oleutil

import (
	"reflect"
	"unsafe"

	ole "github.com/go-ole/go-ole"
)

type stdDispatch struct {
	lpVtbl  *stdDispatchVtbl
	ref     int32
	iid     *ole.GUID
	iface   interface{}
	funcMap map[string]int32
}

type stdDispatchVtbl struct {
	pQueryInterface   uintptr
	pAddRef           uintptr
	pRelease          uintptr
	pGetTypeInfoCount uintptr
	pGetTypeInfo      uintptr
	pGetIDsOfNames    uintptr
	pInvoke           uintptr
}

func dispQueryInterface(this *ole.IUnknown, iid *ole.GUID, punk **ole.IUnknown) uint32 {
	pthis := (*stdDispatch)(unsafe.Pointer(this))
	*punk = nil
	if ole.IsEqualGUID(iid, ole.IID_IUnknown) ||
		ole.IsEqualGUID(iid, ole.IID_IDispatch) {
		dispAddRef(this)
		*punk = this
		return ole.S_OK
	}
	if ole.IsEqualGUID(iid, pthis.iid) {
		dispAddRef(this)
		*punk = this
		return ole.S_OK
	}
	return ole.E_NOINTERFACE
}

func dispAddRef(this *ole.IUnknown) int32 {
	pthis := (*stdDispatch)(unsafe.Pointer(this))
	pthis.ref++
	return pthis.ref
}

func dispRelease(this *ole.IUnknown) int32 {
	pthis := (*stdDispatch)(unsafe.Pointer(this))
	pthis.ref--
	return pthis.ref
}

func dispGetIDsOfNames(this *ole.IUnknown, iid *ole.GUID, wnames []*uint16, namelen int, lcid int, pdisp []int32) uintptr {
	pthis := (*stdDispatch)(unsafe.Pointer(this))
	names := make([]string, len(wnames))
	for i := 0; i < len(names); i++ {
		names[i] = ole.LpOleStrToString(wnames[i])
	}
	for n := 0; n < namelen; n++ {
		if id, ok := pthis.funcMap[names[n]]; ok {
			pdisp[n] = id
		}
	}
	return ole.S_OK
}

func dispGetTypeInfoCount(pcount *int) uintptr {
	if pcount != nil {
		*pcount = 0
	}
	return ole.S_OK
}

func dispGetTypeInfo(ptypeif *uintptr) uintptr {
	return ole.E_NOTIMPL
}

func dispInvoke(this *ole.IDispatch, dispid int32, riid *ole.GUID, lcid int, flags int16, dispparams *ole.DISPPARAMS, result *ole.VARIANT, pexcepinfo *ole.EXCEPINFO, nerr *uint) uintptr {
	pthis := (*stdDispatch)(unsafe.Pointer(this))
	found := ""
	for name, id := range pthis.funcMap {
		if id == dispid {
			found = name
		}
	}
	if found != "" {
		rv := reflect.ValueOf(pthis.iface).Elem()
		rm := rv.MethodByName(found)
		rr := rm.Call([]reflect.Value{})
		println(len(rr))
		return ole.S_OK
	}
	return ole.E_NOTIMPL
}
  07070100000603000081A4000000000000000000000001645E367C00000125000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/oleutil/connection_func.go    // +build !windows

package oleutil

import ole "github.com/go-ole/go-ole"

// ConnectObject creates a connection point between two services for communication.
func ConnectObject(disp *ole.IDispatch, iid *ole.GUID, idisp interface{}) (uint32, error) {
	return 0, ole.NewError(ole.E_NOTIMPL)
}
   07070100000604000081A4000000000000000000000001645E367C00000624000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/oleutil/connection_windows.go // +build windows

package oleutil

import (
	"reflect"
	"syscall"
	"unsafe"

	ole "github.com/go-ole/go-ole"
)

// ConnectObject creates a connection point between two services for communication.
func ConnectObject(disp *ole.IDispatch, iid *ole.GUID, idisp interface{}) (cookie uint32, err error) {
	unknown, err := disp.QueryInterface(ole.IID_IConnectionPointContainer)
	if err != nil {
		return
	}

	container := (*ole.IConnectionPointContainer)(unsafe.Pointer(unknown))
	var point *ole.IConnectionPoint
	err = container.FindConnectionPoint(iid, &point)
	if err != nil {
		return
	}
	if edisp, ok := idisp.(*ole.IUnknown); ok {
		cookie, err = point.Advise(edisp)
		container.Release()
		if err != nil {
			return
		}
	}
	rv := reflect.ValueOf(disp).Elem()
	if rv.Type().Kind() == reflect.Struct {
		dest := &stdDispatch{}
		dest.lpVtbl = &stdDispatchVtbl{}
		dest.lpVtbl.pQueryInterface = syscall.NewCallback(dispQueryInterface)
		dest.lpVtbl.pAddRef = syscall.NewCallback(dispAddRef)
		dest.lpVtbl.pRelease = syscall.NewCallback(dispRelease)
		dest.lpVtbl.pGetTypeInfoCount = syscall.NewCallback(dispGetTypeInfoCount)
		dest.lpVtbl.pGetTypeInfo = syscall.NewCallback(dispGetTypeInfo)
		dest.lpVtbl.pGetIDsOfNames = syscall.NewCallback(dispGetIDsOfNames)
		dest.lpVtbl.pInvoke = syscall.NewCallback(dispInvoke)
		dest.iface = disp
		dest.iid = iid
		cookie, err = point.Advise((*ole.IUnknown)(unsafe.Pointer(dest)))
		container.Release()
		if err != nil {
			point.Release()
			return
		}
		return
	}

	container.Release()

	return 0, ole.NewError(ole.E_INVALIDARG)
}
07070100000605000081A4000000000000000000000001645E367C00000091000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/oleutil/go-get.go // This file is here so go get succeeds as without it errors with:
// no buildable Go source files in ...
//
// +build !windows

package oleutil
   07070100000606000081A4000000000000000000000001645E367C00000E14000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/oleutil/oleutil.go    package oleutil

import ole "github.com/go-ole/go-ole"

// ClassIDFrom retrieves class ID whether given is program ID or application string.
func ClassIDFrom(programID string) (classID *ole.GUID, err error) {
	return ole.ClassIDFrom(programID)
}

// CreateObject creates object from programID based on interface type.
//
// Only supports IUnknown.
//
// Program ID can be either program ID or application string.
func CreateObject(programID string) (unknown *ole.IUnknown, err error) {
	classID, err := ole.ClassIDFrom(programID)
	if err != nil {
		return
	}

	unknown, err = ole.CreateInstance(classID, ole.IID_IUnknown)
	if err != nil {
		return
	}

	return
}

// GetActiveObject retrieves active object for program ID and interface ID based
// on interface type.
//
// Only supports IUnknown.
//
// Program ID can be either program ID or application string.
func GetActiveObject(programID string) (unknown *ole.IUnknown, err error) {
	classID, err := ole.ClassIDFrom(programID)
	if err != nil {
		return
	}

	unknown, err = ole.GetActiveObject(classID, ole.IID_IUnknown)
	if err != nil {
		return
	}

	return
}

// CallMethod calls method on IDispatch with parameters.
func CallMethod(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT, err error) {
	return disp.InvokeWithOptionalArgs(name, ole.DISPATCH_METHOD, params)
}

// MustCallMethod calls method on IDispatch with parameters or panics.
func MustCallMethod(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT) {
	r, err := CallMethod(disp, name, params...)
	if err != nil {
		panic(err.Error())
	}
	return r
}

// GetProperty retrieves property from IDispatch.
func GetProperty(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT, err error) {
	return disp.InvokeWithOptionalArgs(name, ole.DISPATCH_PROPERTYGET, params)
}

// MustGetProperty retrieves property from IDispatch or panics.
func MustGetProperty(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT) {
	r, err := GetProperty(disp, name, params...)
	if err != nil {
		panic(err.Error())
	}
	return r
}

// PutProperty mutates property.
func PutProperty(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT, err error) {
	return disp.InvokeWithOptionalArgs(name, ole.DISPATCH_PROPERTYPUT, params)
}

// MustPutProperty mutates property or panics.
func MustPutProperty(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT) {
	r, err := PutProperty(disp, name, params...)
	if err != nil {
		panic(err.Error())
	}
	return r
}

// PutPropertyRef mutates property reference.
func PutPropertyRef(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT, err error) {
	return disp.InvokeWithOptionalArgs(name, ole.DISPATCH_PROPERTYPUTREF, params)
}

// MustPutPropertyRef mutates property reference or panics.
func MustPutPropertyRef(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT) {
	r, err := PutPropertyRef(disp, name, params...)
	if err != nil {
		panic(err.Error())
	}
	return r
}

func ForEach(disp *ole.IDispatch, f func(v *ole.VARIANT) error) error {
	newEnum, err := disp.GetProperty("_NewEnum")
	if err != nil {
		return err
	}
	defer newEnum.Clear()

	enum, err := newEnum.ToIUnknown().IEnumVARIANT(ole.IID_IEnumVariant)
	if err != nil {
		return err
	}
	defer enum.Release()

	for item, length, err := enum.Next(1); length > 0; item, length, err = enum.Next(1) {
		if err != nil {
			return err
		}
		if ferr := f(&item); ferr != nil {
			return ferr
		}
	}
	return nil
}
07070100000607000081A4000000000000000000000001645E367C0000027E000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/safearray.go  // Package is meant to retrieve and process safe array data returned from COM.

package ole

// SafeArrayBound defines the SafeArray boundaries.
type SafeArrayBound struct {
	Elements   uint32
	LowerBound int32
}

// SafeArray is how COM handles arrays.
type SafeArray struct {
	Dimensions   uint16
	FeaturesFlag uint16
	ElementsSize uint32
	LocksAmount  uint32
	Data         uint32
	Bounds       [16]byte
}

// SAFEARRAY is obsolete, exists for backwards compatibility.
// Use SafeArray
type SAFEARRAY SafeArray

// SAFEARRAYBOUND is obsolete, exists for backwards compatibility.
// Use SafeArrayBound
type SAFEARRAYBOUND SafeArrayBound
  07070100000608000081A4000000000000000000000001645E367C00001888000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/safearray_func.go // +build !windows

package ole

import (
	"unsafe"
)

// safeArrayAccessData returns raw array pointer.
//
// AKA: SafeArrayAccessData in Windows API.
func safeArrayAccessData(safearray *SafeArray) (uintptr, error) {
	return uintptr(0), NewError(E_NOTIMPL)
}

// safeArrayUnaccessData releases raw array.
//
// AKA: SafeArrayUnaccessData in Windows API.
func safeArrayUnaccessData(safearray *SafeArray) error {
	return NewError(E_NOTIMPL)
}

// safeArrayAllocData allocates SafeArray.
//
// AKA: SafeArrayAllocData in Windows API.
func safeArrayAllocData(safearray *SafeArray) error {
	return NewError(E_NOTIMPL)
}

// safeArrayAllocDescriptor allocates SafeArray.
//
// AKA: SafeArrayAllocDescriptor in Windows API.
func safeArrayAllocDescriptor(dimensions uint32) (*SafeArray, error) {
	return nil, NewError(E_NOTIMPL)
}

// safeArrayAllocDescriptorEx allocates SafeArray.
//
// AKA: SafeArrayAllocDescriptorEx in Windows API.
func safeArrayAllocDescriptorEx(variantType VT, dimensions uint32) (*SafeArray, error) {
	return nil, NewError(E_NOTIMPL)
}

// safeArrayCopy returns copy of SafeArray.
//
// AKA: SafeArrayCopy in Windows API.
func safeArrayCopy(original *SafeArray) (*SafeArray, error) {
	return nil, NewError(E_NOTIMPL)
}

// safeArrayCopyData duplicates SafeArray into another SafeArray object.
//
// AKA: SafeArrayCopyData in Windows API.
func safeArrayCopyData(original *SafeArray, duplicate *SafeArray) error {
	return NewError(E_NOTIMPL)
}

// safeArrayCreate creates SafeArray.
//
// AKA: SafeArrayCreate in Windows API.
func safeArrayCreate(variantType VT, dimensions uint32, bounds *SafeArrayBound) (*SafeArray, error) {
	return nil, NewError(E_NOTIMPL)
}

// safeArrayCreateEx creates SafeArray.
//
// AKA: SafeArrayCreateEx in Windows API.
func safeArrayCreateEx(variantType VT, dimensions uint32, bounds *SafeArrayBound, extra uintptr) (*SafeArray, error) {
	return nil, NewError(E_NOTIMPL)
}

// safeArrayCreateVector creates SafeArray.
//
// AKA: SafeArrayCreateVector in Windows API.
func safeArrayCreateVector(variantType VT, lowerBound int32, length uint32) (*SafeArray, error) {
	return nil, NewError(E_NOTIMPL)
}

// safeArrayCreateVectorEx creates SafeArray.
//
// AKA: SafeArrayCreateVectorEx in Windows API.
func safeArrayCreateVectorEx(variantType VT, lowerBound int32, length uint32, extra uintptr) (*SafeArray, error) {
	return nil, NewError(E_NOTIMPL)
}

// safeArrayDestroy destroys SafeArray object.
//
// AKA: SafeArrayDestroy in Windows API.
func safeArrayDestroy(safearray *SafeArray) error {
	return NewError(E_NOTIMPL)
}

// safeArrayDestroyData destroys SafeArray object.
//
// AKA: SafeArrayDestroyData in Windows API.
func safeArrayDestroyData(safearray *SafeArray) error {
	return NewError(E_NOTIMPL)
}

// safeArrayDestroyDescriptor destroys SafeArray object.
//
// AKA: SafeArrayDestroyDescriptor in Windows API.
func safeArrayDestroyDescriptor(safearray *SafeArray) error {
	return NewError(E_NOTIMPL)
}

// safeArrayGetDim is the amount of dimensions in the SafeArray.
//
// SafeArrays may have multiple dimensions. Meaning, it could be
// multidimensional array.
//
// AKA: SafeArrayGetDim in Windows API.
func safeArrayGetDim(safearray *SafeArray) (*uint32, error) {
	u := uint32(0)
	return &u, NewError(E_NOTIMPL)
}

// safeArrayGetElementSize is the element size in bytes.
//
// AKA: SafeArrayGetElemsize in Windows API.
func safeArrayGetElementSize(safearray *SafeArray) (*uint32, error) {
	u := uint32(0)
	return &u, NewError(E_NOTIMPL)
}

// safeArrayGetElement retrieves element at given index.
func safeArrayGetElement(safearray *SafeArray, index int32, pv unsafe.Pointer) error {
	return NewError(E_NOTIMPL)
}

// safeArrayGetElement retrieves element at given index and converts to string.
func safeArrayGetElementString(safearray *SafeArray, index int32) (string, error) {
	return "", NewError(E_NOTIMPL)
}

// safeArrayGetIID is the InterfaceID of the elements in the SafeArray.
//
// AKA: SafeArrayGetIID in Windows API.
func safeArrayGetIID(safearray *SafeArray) (*GUID, error) {
	return nil, NewError(E_NOTIMPL)
}

// safeArrayGetLBound returns lower bounds of SafeArray.
//
// SafeArrays may have multiple dimensions. Meaning, it could be
// multidimensional array.
//
// AKA: SafeArrayGetLBound in Windows API.
func safeArrayGetLBound(safearray *SafeArray, dimension uint32) (int32, error) {
	return int32(0), NewError(E_NOTIMPL)
}

// safeArrayGetUBound returns upper bounds of SafeArray.
//
// SafeArrays may have multiple dimensions. Meaning, it could be
// multidimensional array.
//
// AKA: SafeArrayGetUBound in Windows API.
func safeArrayGetUBound(safearray *SafeArray, dimension uint32) (int32, error) {
	return int32(0), NewError(E_NOTIMPL)
}

// safeArrayGetVartype returns data type of SafeArray.
//
// AKA: SafeArrayGetVartype in Windows API.
func safeArrayGetVartype(safearray *SafeArray) (uint16, error) {
	return uint16(0), NewError(E_NOTIMPL)
}

// safeArrayLock locks SafeArray for reading to modify SafeArray.
//
// This must be called during some calls to ensure that another process does not
// read or write to the SafeArray during editing.
//
// AKA: SafeArrayLock in Windows API.
func safeArrayLock(safearray *SafeArray) error {
	return NewError(E_NOTIMPL)
}

// safeArrayUnlock unlocks SafeArray for reading.
//
// AKA: SafeArrayUnlock in Windows API.
func safeArrayUnlock(safearray *SafeArray) error {
	return NewError(E_NOTIMPL)
}

// safeArrayPutElement stores the data element at the specified location in the
// array.
//
// AKA: SafeArrayPutElement in Windows API.
func safeArrayPutElement(safearray *SafeArray, index int64, element uintptr) error {
	return NewError(E_NOTIMPL)
}

// safeArrayGetRecordInfo accesses IRecordInfo info for custom types.
//
// AKA: SafeArrayGetRecordInfo in Windows API.
//
// XXX: Must implement IRecordInfo interface for this to return.
func safeArrayGetRecordInfo(safearray *SafeArray) (interface{}, error) {
	return nil, NewError(E_NOTIMPL)
}

// safeArraySetRecordInfo mutates IRecordInfo info for custom types.
//
// AKA: SafeArraySetRecordInfo in Windows API.
//
// XXX: Must implement IRecordInfo interface for this to return.
func safeArraySetRecordInfo(safearray *SafeArray, recordInfo interface{}) error {
	return NewError(E_NOTIMPL)
}
07070100000609000081A4000000000000000000000001645E367C00002E85000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/safearray_windows.go  // +build windows

package ole

import (
	"unsafe"
)

var (
	procSafeArrayAccessData        = modoleaut32.NewProc("SafeArrayAccessData")
	procSafeArrayAllocData         = modoleaut32.NewProc("SafeArrayAllocData")
	procSafeArrayAllocDescriptor   = modoleaut32.NewProc("SafeArrayAllocDescriptor")
	procSafeArrayAllocDescriptorEx = modoleaut32.NewProc("SafeArrayAllocDescriptorEx")
	procSafeArrayCopy              = modoleaut32.NewProc("SafeArrayCopy")
	procSafeArrayCopyData          = modoleaut32.NewProc("SafeArrayCopyData")
	procSafeArrayCreate            = modoleaut32.NewProc("SafeArrayCreate")
	procSafeArrayCreateEx          = modoleaut32.NewProc("SafeArrayCreateEx")
	procSafeArrayCreateVector      = modoleaut32.NewProc("SafeArrayCreateVector")
	procSafeArrayCreateVectorEx    = modoleaut32.NewProc("SafeArrayCreateVectorEx")
	procSafeArrayDestroy           = modoleaut32.NewProc("SafeArrayDestroy")
	procSafeArrayDestroyData       = modoleaut32.NewProc("SafeArrayDestroyData")
	procSafeArrayDestroyDescriptor = modoleaut32.NewProc("SafeArrayDestroyDescriptor")
	procSafeArrayGetDim            = modoleaut32.NewProc("SafeArrayGetDim")
	procSafeArrayGetElement        = modoleaut32.NewProc("SafeArrayGetElement")
	procSafeArrayGetElemsize       = modoleaut32.NewProc("SafeArrayGetElemsize")
	procSafeArrayGetIID            = modoleaut32.NewProc("SafeArrayGetIID")
	procSafeArrayGetLBound         = modoleaut32.NewProc("SafeArrayGetLBound")
	procSafeArrayGetUBound         = modoleaut32.NewProc("SafeArrayGetUBound")
	procSafeArrayGetVartype        = modoleaut32.NewProc("SafeArrayGetVartype")
	procSafeArrayLock              = modoleaut32.NewProc("SafeArrayLock")
	procSafeArrayPtrOfIndex        = modoleaut32.NewProc("SafeArrayPtrOfIndex")
	procSafeArrayUnaccessData      = modoleaut32.NewProc("SafeArrayUnaccessData")
	procSafeArrayUnlock            = modoleaut32.NewProc("SafeArrayUnlock")
	procSafeArrayPutElement        = modoleaut32.NewProc("SafeArrayPutElement")
	//procSafeArrayRedim             = modoleaut32.NewProc("SafeArrayRedim") // TODO
	//procSafeArraySetIID            = modoleaut32.NewProc("SafeArraySetIID") // TODO
	procSafeArrayGetRecordInfo = modoleaut32.NewProc("SafeArrayGetRecordInfo")
	procSafeArraySetRecordInfo = modoleaut32.NewProc("SafeArraySetRecordInfo")
)

// safeArrayAccessData returns raw array pointer.
//
// AKA: SafeArrayAccessData in Windows API.
// Todo: Test
func safeArrayAccessData(safearray *SafeArray) (element uintptr, err error) {
	err = convertHresultToError(
		procSafeArrayAccessData.Call(
			uintptr(unsafe.Pointer(safearray)),
			uintptr(unsafe.Pointer(&element))))
	return
}

// safeArrayUnaccessData releases raw array.
//
// AKA: SafeArrayUnaccessData in Windows API.
func safeArrayUnaccessData(safearray *SafeArray) (err error) {
	err = convertHresultToError(procSafeArrayUnaccessData.Call(uintptr(unsafe.Pointer(safearray))))
	return
}

// safeArrayAllocData allocates SafeArray.
//
// AKA: SafeArrayAllocData in Windows API.
func safeArrayAllocData(safearray *SafeArray) (err error) {
	err = convertHresultToError(procSafeArrayAllocData.Call(uintptr(unsafe.Pointer(safearray))))
	return
}

// safeArrayAllocDescriptor allocates SafeArray.
//
// AKA: SafeArrayAllocDescriptor in Windows API.
func safeArrayAllocDescriptor(dimensions uint32) (safearray *SafeArray, err error) {
	err = convertHresultToError(
		procSafeArrayAllocDescriptor.Call(uintptr(dimensions), uintptr(unsafe.Pointer(&safearray))))
	return
}

// safeArrayAllocDescriptorEx allocates SafeArray.
//
// AKA: SafeArrayAllocDescriptorEx in Windows API.
func safeArrayAllocDescriptorEx(variantType VT, dimensions uint32) (safearray *SafeArray, err error) {
	err = convertHresultToError(
		procSafeArrayAllocDescriptorEx.Call(
			uintptr(variantType),
			uintptr(dimensions),
			uintptr(unsafe.Pointer(&safearray))))
	return
}

// safeArrayCopy returns copy of SafeArray.
//
// AKA: SafeArrayCopy in Windows API.
func safeArrayCopy(original *SafeArray) (safearray *SafeArray, err error) {
	err = convertHresultToError(
		procSafeArrayCopy.Call(
			uintptr(unsafe.Pointer(original)),
			uintptr(unsafe.Pointer(&safearray))))
	return
}

// safeArrayCopyData duplicates SafeArray into another SafeArray object.
//
// AKA: SafeArrayCopyData in Windows API.
func safeArrayCopyData(original *SafeArray, duplicate *SafeArray) (err error) {
	err = convertHresultToError(
		procSafeArrayCopyData.Call(
			uintptr(unsafe.Pointer(original)),
			uintptr(unsafe.Pointer(duplicate))))
	return
}

// safeArrayCreate creates SafeArray.
//
// AKA: SafeArrayCreate in Windows API.
func safeArrayCreate(variantType VT, dimensions uint32, bounds *SafeArrayBound) (safearray *SafeArray, err error) {
	sa, _, err := procSafeArrayCreate.Call(
		uintptr(variantType),
		uintptr(dimensions),
		uintptr(unsafe.Pointer(bounds)))
	safearray = (*SafeArray)(unsafe.Pointer(&sa))
	return
}

// safeArrayCreateEx creates SafeArray.
//
// AKA: SafeArrayCreateEx in Windows API.
func safeArrayCreateEx(variantType VT, dimensions uint32, bounds *SafeArrayBound, extra uintptr) (safearray *SafeArray, err error) {
	sa, _, err := procSafeArrayCreateEx.Call(
		uintptr(variantType),
		uintptr(dimensions),
		uintptr(unsafe.Pointer(bounds)),
		extra)
	safearray = (*SafeArray)(unsafe.Pointer(sa))
	return
}

// safeArrayCreateVector creates SafeArray.
//
// AKA: SafeArrayCreateVector in Windows API.
func safeArrayCreateVector(variantType VT, lowerBound int32, length uint32) (safearray *SafeArray, err error) {
	sa, _, err := procSafeArrayCreateVector.Call(
		uintptr(variantType),
		uintptr(lowerBound),
		uintptr(length))
	safearray = (*SafeArray)(unsafe.Pointer(sa))
	return
}

// safeArrayCreateVectorEx creates SafeArray.
//
// AKA: SafeArrayCreateVectorEx in Windows API.
func safeArrayCreateVectorEx(variantType VT, lowerBound int32, length uint32, extra uintptr) (safearray *SafeArray, err error) {
	sa, _, err := procSafeArrayCreateVectorEx.Call(
		uintptr(variantType),
		uintptr(lowerBound),
		uintptr(length),
		extra)
	safearray = (*SafeArray)(unsafe.Pointer(sa))
	return
}

// safeArrayDestroy destroys SafeArray object.
//
// AKA: SafeArrayDestroy in Windows API.
func safeArrayDestroy(safearray *SafeArray) (err error) {
	err = convertHresultToError(procSafeArrayDestroy.Call(uintptr(unsafe.Pointer(safearray))))
	return
}

// safeArrayDestroyData destroys SafeArray object.
//
// AKA: SafeArrayDestroyData in Windows API.
func safeArrayDestroyData(safearray *SafeArray) (err error) {
	err = convertHresultToError(procSafeArrayDestroyData.Call(uintptr(unsafe.Pointer(safearray))))
	return
}

// safeArrayDestroyDescriptor destroys SafeArray object.
//
// AKA: SafeArrayDestroyDescriptor in Windows API.
func safeArrayDestroyDescriptor(safearray *SafeArray) (err error) {
	err = convertHresultToError(procSafeArrayDestroyDescriptor.Call(uintptr(unsafe.Pointer(safearray))))
	return
}

// safeArrayGetDim is the amount of dimensions in the SafeArray.
//
// SafeArrays may have multiple dimensions. Meaning, it could be
// multidimensional array.
//
// AKA: SafeArrayGetDim in Windows API.
func safeArrayGetDim(safearray *SafeArray) (dimensions *uint32, err error) {
	l, _, err := procSafeArrayGetDim.Call(uintptr(unsafe.Pointer(safearray)))
	dimensions = (*uint32)(unsafe.Pointer(l))
	return
}

// safeArrayGetElementSize is the element size in bytes.
//
// AKA: SafeArrayGetElemsize in Windows API.
func safeArrayGetElementSize(safearray *SafeArray) (length *uint32, err error) {
	l, _, err := procSafeArrayGetElemsize.Call(uintptr(unsafe.Pointer(safearray)))
	length = (*uint32)(unsafe.Pointer(l))
	return
}

// safeArrayGetElement retrieves element at given index.
func safeArrayGetElement(safearray *SafeArray, index int32, pv unsafe.Pointer) error {
	return convertHresultToError(
		procSafeArrayGetElement.Call(
			uintptr(unsafe.Pointer(safearray)),
			uintptr(unsafe.Pointer(&index)),
			uintptr(pv)))
}

// safeArrayGetElementString retrieves element at given index and converts to string.
func safeArrayGetElementString(safearray *SafeArray, index int32) (str string, err error) {
	var element *int16
	err = convertHresultToError(
		procSafeArrayGetElement.Call(
			uintptr(unsafe.Pointer(safearray)),
			uintptr(unsafe.Pointer(&index)),
			uintptr(unsafe.Pointer(&element))))
	str = BstrToString(*(**uint16)(unsafe.Pointer(&element)))
	SysFreeString(element)
	return
}

// safeArrayGetIID is the InterfaceID of the elements in the SafeArray.
//
// AKA: SafeArrayGetIID in Windows API.
func safeArrayGetIID(safearray *SafeArray) (guid *GUID, err error) {
	err = convertHresultToError(
		procSafeArrayGetIID.Call(
			uintptr(unsafe.Pointer(safearray)),
			uintptr(unsafe.Pointer(&guid))))
	return
}

// safeArrayGetLBound returns lower bounds of SafeArray.
//
// SafeArrays may have multiple dimensions. Meaning, it could be
// multidimensional array.
//
// AKA: SafeArrayGetLBound in Windows API.
func safeArrayGetLBound(safearray *SafeArray, dimension uint32) (lowerBound int32, err error) {
	err = convertHresultToError(
		procSafeArrayGetLBound.Call(
			uintptr(unsafe.Pointer(safearray)),
			uintptr(dimension),
			uintptr(unsafe.Pointer(&lowerBound))))
	return
}

// safeArrayGetUBound returns upper bounds of SafeArray.
//
// SafeArrays may have multiple dimensions. Meaning, it could be
// multidimensional array.
//
// AKA: SafeArrayGetUBound in Windows API.
func safeArrayGetUBound(safearray *SafeArray, dimension uint32) (upperBound int32, err error) {
	err = convertHresultToError(
		procSafeArrayGetUBound.Call(
			uintptr(unsafe.Pointer(safearray)),
			uintptr(dimension),
			uintptr(unsafe.Pointer(&upperBound))))
	return
}

// safeArrayGetVartype returns data type of SafeArray.
//
// AKA: SafeArrayGetVartype in Windows API.
func safeArrayGetVartype(safearray *SafeArray) (varType uint16, err error) {
	err = convertHresultToError(
		procSafeArrayGetVartype.Call(
			uintptr(unsafe.Pointer(safearray)),
			uintptr(unsafe.Pointer(&varType))))
	return
}

// safeArrayLock locks SafeArray for reading to modify SafeArray.
//
// This must be called during some calls to ensure that another process does not
// read or write to the SafeArray during editing.
//
// AKA: SafeArrayLock in Windows API.
func safeArrayLock(safearray *SafeArray) (err error) {
	err = convertHresultToError(procSafeArrayLock.Call(uintptr(unsafe.Pointer(safearray))))
	return
}

// safeArrayUnlock unlocks SafeArray for reading.
//
// AKA: SafeArrayUnlock in Windows API.
func safeArrayUnlock(safearray *SafeArray) (err error) {
	err = convertHresultToError(procSafeArrayUnlock.Call(uintptr(unsafe.Pointer(safearray))))
	return
}

// safeArrayPutElement stores the data element at the specified location in the
// array.
//
// AKA: SafeArrayPutElement in Windows API.
func safeArrayPutElement(safearray *SafeArray, index int64, element uintptr) (err error) {
	err = convertHresultToError(
		procSafeArrayPutElement.Call(
			uintptr(unsafe.Pointer(safearray)),
			uintptr(unsafe.Pointer(&index)),
			uintptr(unsafe.Pointer(element))))
	return
}

// safeArrayGetRecordInfo accesses IRecordInfo info for custom types.
//
// AKA: SafeArrayGetRecordInfo in Windows API.
//
// XXX: Must implement IRecordInfo interface for this to return.
func safeArrayGetRecordInfo(safearray *SafeArray) (recordInfo interface{}, err error) {
	err = convertHresultToError(
		procSafeArrayGetRecordInfo.Call(
			uintptr(unsafe.Pointer(safearray)),
			uintptr(unsafe.Pointer(&recordInfo))))
	return
}

// safeArraySetRecordInfo mutates IRecordInfo info for custom types.
//
// AKA: SafeArraySetRecordInfo in Windows API.
//
// XXX: Must implement IRecordInfo interface for this to return.
func safeArraySetRecordInfo(safearray *SafeArray, recordInfo interface{}) (err error) {
	err = convertHresultToError(
		procSafeArraySetRecordInfo.Call(
			uintptr(unsafe.Pointer(safearray)),
			uintptr(unsafe.Pointer(&recordInfo))))
	return
}
   0707010000060A000081A4000000000000000000000001645E367C00000CAE000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/safearrayconversion.go    // Helper for converting SafeArray to array of objects.

package ole

import (
	"unsafe"
)

type SafeArrayConversion struct {
	Array *SafeArray
}

func (sac *SafeArrayConversion) ToStringArray() (strings []string) {
	totalElements, _ := sac.TotalElements(0)
	strings = make([]string, totalElements)

	for i := int32(0); i < totalElements; i++ {
		strings[int32(i)], _ = safeArrayGetElementString(sac.Array, i)
	}

	return
}

func (sac *SafeArrayConversion) ToByteArray() (bytes []byte) {
	totalElements, _ := sac.TotalElements(0)
	bytes = make([]byte, totalElements)

	for i := int32(0); i < totalElements; i++ {
		safeArrayGetElement(sac.Array, i, unsafe.Pointer(&bytes[int32(i)]))
	}

	return
}

func (sac *SafeArrayConversion) ToValueArray() (values []interface{}) {
	totalElements, _ := sac.TotalElements(0)
	values = make([]interface{}, totalElements)
	vt, _ := safeArrayGetVartype(sac.Array)

	for i := int32(0); i < totalElements; i++ {
		switch VT(vt) {
		case VT_BOOL:
			var v bool
			safeArrayGetElement(sac.Array, i, unsafe.Pointer(&v))
			values[i] = v
		case VT_I1:
			var v int8
			safeArrayGetElement(sac.Array, i, unsafe.Pointer(&v))
			values[i] = v
		case VT_I2:
			var v int16
			safeArrayGetElement(sac.Array, i, unsafe.Pointer(&v))
			values[i] = v
		case VT_I4:
			var v int32
			safeArrayGetElement(sac.Array, i, unsafe.Pointer(&v))
			values[i] = v
		case VT_I8:
			var v int64
			safeArrayGetElement(sac.Array, i, unsafe.Pointer(&v))
			values[i] = v
		case VT_UI1:
			var v uint8
			safeArrayGetElement(sac.Array, i, unsafe.Pointer(&v))
			values[i] = v
		case VT_UI2:
			var v uint16
			safeArrayGetElement(sac.Array, i, unsafe.Pointer(&v))
			values[i] = v
		case VT_UI4:
			var v uint32
			safeArrayGetElement(sac.Array, i, unsafe.Pointer(&v))
			values[i] = v
		case VT_UI8:
			var v uint64
			safeArrayGetElement(sac.Array, i, unsafe.Pointer(&v))
			values[i] = v
		case VT_R4:
			var v float32
			safeArrayGetElement(sac.Array, i, unsafe.Pointer(&v))
			values[i] = v
		case VT_R8:
			var v float64
			safeArrayGetElement(sac.Array, i, unsafe.Pointer(&v))
			values[i] = v
		case VT_BSTR:
			v , _ := safeArrayGetElementString(sac.Array, i)
			values[i] = v
		case VT_VARIANT:
			var v VARIANT
			safeArrayGetElement(sac.Array, i, unsafe.Pointer(&v))
			values[i] = v.Value()
			v.Clear()
		default:
			// TODO
		}
	}

	return
}

func (sac *SafeArrayConversion) GetType() (varType uint16, err error) {
	return safeArrayGetVartype(sac.Array)
}

func (sac *SafeArrayConversion) GetDimensions() (dimensions *uint32, err error) {
	return safeArrayGetDim(sac.Array)
}

func (sac *SafeArrayConversion) GetSize() (length *uint32, err error) {
	return safeArrayGetElementSize(sac.Array)
}

func (sac *SafeArrayConversion) TotalElements(index uint32) (totalElements int32, err error) {
	if index < 1 {
		index = 1
	}

	// Get array bounds
	var LowerBounds int32
	var UpperBounds int32

	LowerBounds, err = safeArrayGetLBound(sac.Array, index)
	if err != nil {
		return
	}

	UpperBounds, err = safeArrayGetUBound(sac.Array, index)
	if err != nil {
		return
	}

	totalElements = UpperBounds - LowerBounds + 1
	return
}

// Release Safe Array memory
func (sac *SafeArrayConversion) Release() {
	safeArrayDestroy(sac.Array)
}
  0707010000060B000081A4000000000000000000000001645E367C000002D0000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/safearrayslices.go    // +build windows

package ole

import (
	"unsafe"
)

func safeArrayFromByteSlice(slice []byte) *SafeArray {
	array, _ := safeArrayCreateVector(VT_UI1, 0, uint32(len(slice)))

	if array == nil {
		panic("Could not convert []byte to SAFEARRAY")
	}

	for i, v := range slice {
		safeArrayPutElement(array, int64(i), uintptr(unsafe.Pointer(&v)))
	}
	return array
}

func safeArrayFromStringSlice(slice []string) *SafeArray {
	array, _ := safeArrayCreateVector(VT_BSTR, 0, uint32(len(slice)))

	if array == nil {
		panic("Could not convert []string to SAFEARRAY")
	}
	// SysAllocStringLen(s)
	for i, v := range slice {
		safeArrayPutElement(array, int64(i), uintptr(unsafe.Pointer(SysAllocStringLen(v))))
	}
	return array
}
0707010000060C000081A4000000000000000000000001645E367C0000087D000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/utility.go    package ole

import (
	"unicode/utf16"
	"unsafe"
)

// ClassIDFrom retrieves class ID whether given is program ID or application string.
//
// Helper that provides check against both Class ID from Program ID and Class ID from string. It is
// faster, if you know which you are using, to use the individual functions, but this will check
// against available functions for you.
func ClassIDFrom(programID string) (classID *GUID, err error) {
	classID, err = CLSIDFromProgID(programID)
	if err != nil {
		classID, err = CLSIDFromString(programID)
		if err != nil {
			return
		}
	}
	return
}

// BytePtrToString converts byte pointer to a Go string.
func BytePtrToString(p *byte) string {
	a := (*[10000]uint8)(unsafe.Pointer(p))
	i := 0
	for a[i] != 0 {
		i++
	}
	return string(a[:i])
}

// UTF16PtrToString is alias for LpOleStrToString.
//
// Kept for compatibility reasons.
func UTF16PtrToString(p *uint16) string {
	return LpOleStrToString(p)
}

// LpOleStrToString converts COM Unicode to Go string.
func LpOleStrToString(p *uint16) string {
	if p == nil {
		return ""
	}

	length := lpOleStrLen(p)
	a := make([]uint16, length)

	ptr := unsafe.Pointer(p)

	for i := 0; i < int(length); i++ {
		a[i] = *(*uint16)(ptr)
		ptr = unsafe.Pointer(uintptr(ptr) + 2)
	}

	return string(utf16.Decode(a))
}

// BstrToString converts COM binary string to Go string.
func BstrToString(p *uint16) string {
	if p == nil {
		return ""
	}
	length := SysStringLen((*int16)(unsafe.Pointer(p)))
	a := make([]uint16, length)

	ptr := unsafe.Pointer(p)

	for i := 0; i < int(length); i++ {
		a[i] = *(*uint16)(ptr)
		ptr = unsafe.Pointer(uintptr(ptr) + 2)
	}
	return string(utf16.Decode(a))
}

// lpOleStrLen returns the length of Unicode string.
func lpOleStrLen(p *uint16) (length int64) {
	if p == nil {
		return 0
	}

	ptr := unsafe.Pointer(p)

	for i := 0; ; i++ {
		if 0 == *(*uint16)(ptr) {
			length = int64(i)
			break
		}
		ptr = unsafe.Pointer(uintptr(ptr) + 2)
	}
	return
}

// convertHresultToError converts syscall to error, if call is unsuccessful.
func convertHresultToError(hr uintptr, r2 uintptr, ignore error) (err error) {
	if hr != 0 {
		err = NewError(hr)
	}
	return
}
   0707010000060D000081A4000000000000000000000001645E367C00000162000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/variables.go  // +build windows

package ole

import (
	"golang.org/x/sys/windows"
)

var (
	modcombase  = windows.NewLazySystemDLL("combase.dll")
	modkernel32 = windows.NewLazySystemDLL("kernel32.dll")
	modole32    = windows.NewLazySystemDLL("ole32.dll")
	modoleaut32 = windows.NewLazySystemDLL("oleaut32.dll")
	moduser32   = windows.NewLazySystemDLL("user32.dll")
)
  0707010000060E000081A4000000000000000000000001645E367C00000973000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/variant.go    package ole

import "unsafe"

// NewVariant returns new variant based on type and value.
func NewVariant(vt VT, val int64) VARIANT {
	return VARIANT{VT: vt, Val: val}
}

// ToIUnknown converts Variant to Unknown object.
func (v *VARIANT) ToIUnknown() *IUnknown {
	if v.VT != VT_UNKNOWN {
		return nil
	}
	return (*IUnknown)(unsafe.Pointer(uintptr(v.Val)))
}

// ToIDispatch converts variant to dispatch object.
func (v *VARIANT) ToIDispatch() *IDispatch {
	if v.VT != VT_DISPATCH {
		return nil
	}
	return (*IDispatch)(unsafe.Pointer(uintptr(v.Val)))
}

// ToArray converts variant to SafeArray helper.
func (v *VARIANT) ToArray() *SafeArrayConversion {
	if v.VT != VT_SAFEARRAY {
		if v.VT&VT_ARRAY == 0 {
			return nil
		}
	}
	var safeArray *SafeArray = (*SafeArray)(unsafe.Pointer(uintptr(v.Val)))
	return &SafeArrayConversion{safeArray}
}

// ToString converts variant to Go string.
func (v *VARIANT) ToString() string {
	if v.VT != VT_BSTR {
		return ""
	}
	return BstrToString(*(**uint16)(unsafe.Pointer(&v.Val)))
}

// Clear the memory of variant object.
func (v *VARIANT) Clear() error {
	return VariantClear(v)
}

// Value returns variant value based on its type.
//
// Currently supported types: 2- and 4-byte integers, strings, bools.
// Note that 64-bit integers, datetimes, and other types are stored as strings
// and will be returned as strings.
//
// Needs to be further converted, because this returns an interface{}.
func (v *VARIANT) Value() interface{} {
	switch v.VT {
	case VT_I1:
		return int8(v.Val)
	case VT_UI1:
		return uint8(v.Val)
	case VT_I2:
		return int16(v.Val)
	case VT_UI2:
		return uint16(v.Val)
	case VT_I4:
		return int32(v.Val)
	case VT_UI4:
		return uint32(v.Val)
	case VT_I8:
		return int64(v.Val)
	case VT_UI8:
		return uint64(v.Val)
	case VT_INT:
		return int(v.Val)
	case VT_UINT:
		return uint(v.Val)
	case VT_INT_PTR:
		return uintptr(v.Val) // TODO
	case VT_UINT_PTR:
		return uintptr(v.Val)
	case VT_R4:
		return *(*float32)(unsafe.Pointer(&v.Val))
	case VT_R8:
		return *(*float64)(unsafe.Pointer(&v.Val))
	case VT_BSTR:
		return v.ToString()
	case VT_DATE:
		// VT_DATE type will either return float64 or time.Time.
		d := uint64(v.Val)
		date, err := GetVariantDate(d)
		if err != nil {
			return float64(v.Val)
		}
		return date
	case VT_UNKNOWN:
		return v.ToIUnknown()
	case VT_DISPATCH:
		return v.ToIDispatch()
	case VT_BOOL:
		return v.Val != 0
	}
	return nil
}
 0707010000060F000081A4000000000000000000000001645E367C000000B1000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/variant_386.go    // +build 386

package ole

type VARIANT struct {
	VT         VT     //  2
	wReserved1 uint16 //  4
	wReserved2 uint16 //  6
	wReserved3 uint16 //  8
	Val        int64  // 16
}
   07070100000610000081A4000000000000000000000001645E367C000000D2000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/variant_amd64.go  // +build amd64

package ole

type VARIANT struct {
	VT         VT      //  2
	wReserved1 uint16  //  4
	wReserved2 uint16  //  6
	wReserved3 uint16  //  8
	Val        int64   // 16
	_          [8]byte // 24
}
  07070100000611000081A4000000000000000000000001645E367C000000B1000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/variant_arm.go    // +build arm

package ole

type VARIANT struct {
	VT         VT     //  2
	wReserved1 uint16 //  4
	wReserved2 uint16 //  6
	wReserved3 uint16 //  8
	Val        int64  // 16
}
   07070100000612000081A4000000000000000000000001645E367C000000E3000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/variant_arm64.go  //go:build arm64
// +build arm64

package ole

type VARIANT struct {
	VT         VT      //  2
	wReserved1 uint16  //  4
	wReserved2 uint16  //  6
	wReserved3 uint16  //  8
	Val        int64   // 16
	_          [8]byte // 24
}
 07070100000613000081A4000000000000000000000001645E367C00000282000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/variant_date_386.go   // +build windows,386

package ole

import (
	"errors"
	"syscall"
	"time"
	"unsafe"
)

// GetVariantDate converts COM Variant Time value to Go time.Time.
func GetVariantDate(value uint64) (time.Time, error) {
	var st syscall.Systemtime
	v1 := uint32(value)
	v2 := uint32(value >> 32)
	r, _, _ := procVariantTimeToSystemTime.Call(uintptr(v1), uintptr(v2), uintptr(unsafe.Pointer(&st)))
	if r != 0 {
		return time.Date(int(st.Year), time.Month(st.Month), int(st.Day), int(st.Hour), int(st.Minute), int(st.Second), int(st.Milliseconds/1000), time.UTC), nil
	}
	return time.Now(), errors.New("Could not convert to time, passing current time.")
}
  07070100000614000081A4000000000000000000000001645E367C0000024A000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/variant_date_amd64.go // +build windows,amd64

package ole

import (
	"errors"
	"syscall"
	"time"
	"unsafe"
)

// GetVariantDate converts COM Variant Time value to Go time.Time.
func GetVariantDate(value uint64) (time.Time, error) {
	var st syscall.Systemtime
	r, _, _ := procVariantTimeToSystemTime.Call(uintptr(value), uintptr(unsafe.Pointer(&st)))
	if r != 0 {
		return time.Date(int(st.Year), time.Month(st.Month), int(st.Day), int(st.Hour), int(st.Minute), int(st.Second), int(st.Milliseconds/1000), time.UTC), nil
	}
	return time.Now(), errors.New("Could not convert to time, passing current time.")
}
  07070100000615000081A4000000000000000000000001645E367C00000282000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/variant_date_arm.go   // +build windows,arm

package ole

import (
	"errors"
	"syscall"
	"time"
	"unsafe"
)

// GetVariantDate converts COM Variant Time value to Go time.Time.
func GetVariantDate(value uint64) (time.Time, error) {
	var st syscall.Systemtime
	v1 := uint32(value)
	v2 := uint32(value >> 32)
	r, _, _ := procVariantTimeToSystemTime.Call(uintptr(v1), uintptr(v2), uintptr(unsafe.Pointer(&st)))
	if r != 0 {
		return time.Date(int(st.Year), time.Month(st.Month), int(st.Day), int(st.Hour), int(st.Minute), int(st.Second), int(st.Milliseconds/1000), time.UTC), nil
	}
	return time.Now(), errors.New("Could not convert to time, passing current time.")
}
  07070100000616000081A4000000000000000000000001645E367C000002A0000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/variant_date_arm64.go //go:build windows && arm64
// +build windows,arm64

package ole

import (
	"errors"
	"syscall"
	"time"
	"unsafe"
)

// GetVariantDate converts COM Variant Time value to Go time.Time.
func GetVariantDate(value uint64) (time.Time, error) {
	var st syscall.Systemtime
	v1 := uint32(value)
	v2 := uint32(value >> 32)
	r, _, _ := procVariantTimeToSystemTime.Call(uintptr(v1), uintptr(v2), uintptr(unsafe.Pointer(&st)))
	if r != 0 {
		return time.Date(int(st.Year), time.Month(st.Month), int(st.Day), int(st.Hour), int(st.Minute), int(st.Second), int(st.Milliseconds/1000), time.UTC), nil
	}
	return time.Now(), errors.New("Could not convert to time, passing current time.")
}
07070100000617000081A4000000000000000000000001645E367C000000D4000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/variant_ppc64le.go    // +build ppc64le

package ole

type VARIANT struct {
	VT         VT      //  2
	wReserved1 uint16  //  4
	wReserved2 uint16  //  6
	wReserved3 uint16  //  8
	Val        int64   // 16
	_          [8]byte // 24
}
07070100000618000081A4000000000000000000000001645E367C000000D2000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/variant_s390x.go  // +build s390x

package ole

type VARIANT struct {
	VT         VT      //  2
	wReserved1 uint16  //  4
	wReserved2 uint16  //  6
	wReserved3 uint16  //  8
	Val        int64   // 16
	_          [8]byte // 24
}
  07070100000619000081A4000000000000000000000001645E367C00000720000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/vt_string.go  // generated by stringer -output vt_string.go -type VT; DO NOT EDIT

package ole

import "fmt"

const (
	_VT_name_0 = "VT_EMPTYVT_NULLVT_I2VT_I4VT_R4VT_R8VT_CYVT_DATEVT_BSTRVT_DISPATCHVT_ERRORVT_BOOLVT_VARIANTVT_UNKNOWNVT_DECIMAL"
	_VT_name_1 = "VT_I1VT_UI1VT_UI2VT_UI4VT_I8VT_UI8VT_INTVT_UINTVT_VOIDVT_HRESULTVT_PTRVT_SAFEARRAYVT_CARRAYVT_USERDEFINEDVT_LPSTRVT_LPWSTR"
	_VT_name_2 = "VT_RECORDVT_INT_PTRVT_UINT_PTR"
	_VT_name_3 = "VT_FILETIMEVT_BLOBVT_STREAMVT_STORAGEVT_STREAMED_OBJECTVT_STORED_OBJECTVT_BLOB_OBJECTVT_CFVT_CLSID"
	_VT_name_4 = "VT_BSTR_BLOBVT_VECTOR"
	_VT_name_5 = "VT_ARRAY"
	_VT_name_6 = "VT_BYREF"
	_VT_name_7 = "VT_RESERVED"
	_VT_name_8 = "VT_ILLEGAL"
)

var (
	_VT_index_0 = [...]uint8{0, 8, 15, 20, 25, 30, 35, 40, 47, 54, 65, 73, 80, 90, 100, 110}
	_VT_index_1 = [...]uint8{0, 5, 11, 17, 23, 28, 34, 40, 47, 54, 64, 70, 82, 91, 105, 113, 122}
	_VT_index_2 = [...]uint8{0, 9, 19, 30}
	_VT_index_3 = [...]uint8{0, 11, 18, 27, 37, 55, 71, 85, 90, 98}
	_VT_index_4 = [...]uint8{0, 12, 21}
	_VT_index_5 = [...]uint8{0, 8}
	_VT_index_6 = [...]uint8{0, 8}
	_VT_index_7 = [...]uint8{0, 11}
	_VT_index_8 = [...]uint8{0, 10}
)

func (i VT) String() string {
	switch {
	case 0 <= i && i <= 14:
		return _VT_name_0[_VT_index_0[i]:_VT_index_0[i+1]]
	case 16 <= i && i <= 31:
		i -= 16
		return _VT_name_1[_VT_index_1[i]:_VT_index_1[i+1]]
	case 36 <= i && i <= 38:
		i -= 36
		return _VT_name_2[_VT_index_2[i]:_VT_index_2[i+1]]
	case 64 <= i && i <= 72:
		i -= 64
		return _VT_name_3[_VT_index_3[i]:_VT_index_3[i+1]]
	case 4095 <= i && i <= 4096:
		i -= 4095
		return _VT_name_4[_VT_index_4[i]:_VT_index_4[i+1]]
	case i == 8192:
		return _VT_name_5
	case i == 16384:
		return _VT_name_6
	case i == 32768:
		return _VT_name_7
	case i == 65535:
		return _VT_name_8
	default:
		return fmt.Sprintf("VT(%d)", i)
	}
}
0707010000061A000081A4000000000000000000000001645E367C00000980000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/winrt.go  // +build windows

package ole

import (
	"reflect"
	"syscall"
	"unicode/utf8"
	"unsafe"
)

var (
	procRoInitialize              = modcombase.NewProc("RoInitialize")
	procRoActivateInstance        = modcombase.NewProc("RoActivateInstance")
	procRoGetActivationFactory    = modcombase.NewProc("RoGetActivationFactory")
	procWindowsCreateString       = modcombase.NewProc("WindowsCreateString")
	procWindowsDeleteString       = modcombase.NewProc("WindowsDeleteString")
	procWindowsGetStringRawBuffer = modcombase.NewProc("WindowsGetStringRawBuffer")
)

func RoInitialize(thread_type uint32) (err error) {
	hr, _, _ := procRoInitialize.Call(uintptr(thread_type))
	if hr != 0 {
		err = NewError(hr)
	}
	return
}

func RoActivateInstance(clsid string) (ins *IInspectable, err error) {
	hClsid, err := NewHString(clsid)
	if err != nil {
		return nil, err
	}
	defer DeleteHString(hClsid)

	hr, _, _ := procRoActivateInstance.Call(
		uintptr(unsafe.Pointer(hClsid)),
		uintptr(unsafe.Pointer(&ins)))
	if hr != 0 {
		err = NewError(hr)
	}
	return
}

func RoGetActivationFactory(clsid string, iid *GUID) (ins *IInspectable, err error) {
	hClsid, err := NewHString(clsid)
	if err != nil {
		return nil, err
	}
	defer DeleteHString(hClsid)

	hr, _, _ := procRoGetActivationFactory.Call(
		uintptr(unsafe.Pointer(hClsid)),
		uintptr(unsafe.Pointer(iid)),
		uintptr(unsafe.Pointer(&ins)))
	if hr != 0 {
		err = NewError(hr)
	}
	return
}

// HString is handle string for pointers.
type HString uintptr

// NewHString returns a new HString for Go string.
func NewHString(s string) (hstring HString, err error) {
	u16 := syscall.StringToUTF16Ptr(s)
	len := uint32(utf8.RuneCountInString(s))
	hr, _, _ := procWindowsCreateString.Call(
		uintptr(unsafe.Pointer(u16)),
		uintptr(len),
		uintptr(unsafe.Pointer(&hstring)))
	if hr != 0 {
		err = NewError(hr)
	}
	return
}

// DeleteHString deletes HString.
func DeleteHString(hstring HString) (err error) {
	hr, _, _ := procWindowsDeleteString.Call(uintptr(hstring))
	if hr != 0 {
		err = NewError(hr)
	}
	return
}

// String returns Go string value of HString.
func (h HString) String() string {
	var u16buf uintptr
	var u16len uint32
	u16buf, _, _ = procWindowsGetStringRawBuffer.Call(
		uintptr(h),
		uintptr(unsafe.Pointer(&u16len)))

	u16hdr := reflect.SliceHeader{Data: u16buf, Len: int(u16len), Cap: int(u16len)}
	u16 := *(*[]uint16)(unsafe.Pointer(&u16hdr))
	return syscall.UTF16ToString(u16)
}
0707010000061B000081A4000000000000000000000001645E367C0000034A000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/go-ole/go-ole/winrt_doc.go  // +build !windows

package ole

// RoInitialize
func RoInitialize(thread_type uint32) (err error) {
	return NewError(E_NOTIMPL)
}

// RoActivateInstance
func RoActivateInstance(clsid string) (ins *IInspectable, err error) {
	return nil, NewError(E_NOTIMPL)
}

// RoGetActivationFactory
func RoGetActivationFactory(clsid string, iid *GUID) (ins *IInspectable, err error) {
	return nil, NewError(E_NOTIMPL)
}

// HString is handle string for pointers.
type HString uintptr

// NewHString returns a new HString for Go string.
func NewHString(s string) (hstring HString, err error) {
	return HString(uintptr(0)), NewError(E_NOTIMPL)
}

// DeleteHString deletes HString.
func DeleteHString(hstring HString) (err error) {
	return NewError(E_NOTIMPL)
}

// String returns Go string value of HString.
func (h HString) String() string {
	return ""
}
  0707010000061C000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002E00000000elemental-cli-0.3.1/vendor/github.com/go-task 0707010000061D000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/go-task/slim-sprig  0707010000061E000081A4000000000000000000000001645E367C000000D1000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/go-task/slim-sprig/.editorconfig    # editorconfig.org

root = true

[*]
insert_final_newline = true
charset = utf-8
trim_trailing_whitespace = true
indent_style = tab
indent_size = 8

[*.{md,yml,yaml,json}]
indent_style = space
indent_size = 2
   0707010000061F000081A4000000000000000000000001645E367C0000000C000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/go-task/slim-sprig/.gitattributes   * text=auto
07070100000620000081A4000000000000000000000001645E367C00000010000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/go-task/slim-sprig/.gitignore   vendor/
/.glide
07070100000621000081A4000000000000000000000001645E367C00003228000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/go-task/slim-sprig/CHANGELOG.md # Changelog

## Release 3.2.0 (2020-12-14)

### Added

- #211: Added randInt function (thanks @kochurovro)
- #223: Added fromJson and mustFromJson functions (thanks @mholt)
- #242: Added a bcrypt function (thanks @robbiet480)
- #253: Added randBytes function (thanks @MikaelSmith)
- #254: Added dig function for dicts (thanks @nyarly)
- #257: Added regexQuoteMeta for quoting regex metadata (thanks @rheaton)
- #261: Added filepath functions osBase, osDir, osExt, osClean, osIsAbs (thanks @zugl)
- #268: Added and and all functions for testing conditions (thanks @phuslu)
- #181: Added float64 arithmetic addf, add1f, subf, divf, mulf, maxf, and minf
  (thanks @andrewmostello)
- #265: Added chunk function to split array into smaller arrays (thanks @karelbilek)
- #270: Extend certificate functions to handle non-RSA keys + add support for
  ed25519 keys (thanks @misberner)

### Changed

- Removed testing and support for Go 1.12. ed25519 support requires Go 1.13 or newer
- Using semver 3.1.1 and mergo 0.3.11

### Fixed

- #249: Fix htmlDateInZone example (thanks @spawnia)

NOTE: The dependency github.com/imdario/mergo reverted the breaking change in
0.3.9 via 0.3.10 release.

## Release 3.1.0 (2020-04-16)

NOTE: The dependency github.com/imdario/mergo made a behavior change in 0.3.9
that impacts sprig functionality. Do not use sprig with a version newer than 0.3.8.

### Added

- #225: Added support for generating htpasswd hash (thanks @rustycl0ck)
- #224: Added duration filter (thanks @frebib)
- #205: Added `seq` function (thanks @thadc23)

### Changed

- #203: Unlambda functions with correct signature (thanks @muesli)
- #236: Updated the license formatting for GitHub display purposes
- #238: Updated package dependency versions. Note, mergo not updated to 0.3.9
        as it causes a breaking change for sprig. That issue is tracked at
        https://github.com/imdario/mergo/issues/139

### Fixed

- #229: Fix `seq` example in docs (thanks @kalmant)

## Release 3.0.2 (2019-12-13)

### Fixed

- #220: Updating to semver v3.0.3 to fix issue with <= ranges
- #218: fix typo elyptical->elliptic in ecdsa key description (thanks @laverya)

## Release 3.0.1 (2019-12-08)

### Fixed

- #212: Updated semver fixing broken constraint checking with ^0.0

## Release 3.0.0 (2019-10-02)

### Added

- #187: Added durationRound function (thanks @yjp20)
- #189: Added numerous template functions that return errors rather than panic (thanks @nrvnrvn)
- #193: Added toRawJson support (thanks @Dean-Coakley)
- #197: Added get support to dicts (thanks @Dean-Coakley)

### Changed

- #186: Moving dependency management to Go modules
- #186: Updated semver to v3. This has changes in the way ^ is handled
- #194: Updated documentation on merging and how it copies. Added example using deepCopy
- #196: trunc now supports negative values (thanks @Dean-Coakley)

## Release 2.22.0 (2019-10-02)

### Added

- #173: Added getHostByName function to resolve dns names to ips (thanks @fcgravalos)
- #195: Added deepCopy function for use with dicts

### Changed

- Updated merge and mergeOverwrite documentation to explain copying and how to
  use deepCopy with it

## Release 2.21.0 (2019-09-18)

### Added

- #122: Added encryptAES/decryptAES functions (thanks @n0madic)
- #128: Added toDecimal support (thanks @Dean-Coakley)
- #169: Added list contcat (thanks @astorath)
- #174: Added deepEqual function (thanks @bonifaido)
- #170: Added url parse and join functions (thanks @astorath)

### Changed

- #171: Updated glide config for Google UUID to v1 and to add ranges to semver and testify

### Fixed

- #172: Fix semver wildcard example (thanks @piepmatz)
- #175: Fix dateInZone doc example (thanks @s3than)

## Release 2.20.0 (2019-06-18)

### Added

- #164: Adding function to get unix epoch for a time (@mattfarina)
- #166: Adding tests for date_in_zone (@mattfarina)

### Changed

- #144: Fix function comments based on best practices from Effective Go (@CodeLingoTeam)
- #150: Handles pointer type for time.Time in "htmlDate" (@mapreal19)
- #161, #157, #160,  #153, #158, #156,  #155,  #159, #152 documentation updates (@badeadan)

### Fixed

## Release 2.19.0 (2019-03-02)

IMPORTANT: This release reverts a change from 2.18.0

In the previous release (2.18), we prematurely merged a partial change to the crypto functions that led to creating two sets of crypto functions (I blame @technosophos -- since that's me). This release rolls back that change, and does what was originally intended: It alters the existing crypto functions to use secure random.

We debated whether this classifies as a change worthy of major revision, but given the proximity to the last release, we have decided that treating 2.18 as a faulty release is the correct course of action. We apologize for any inconvenience.

### Changed

- Fix substr panic 35fb796 (Alexey igrychev)
- Remove extra period 1eb7729 (Matthew Lorimor)
- Make random string functions use crypto by default 6ceff26 (Matthew Lorimor)
- README edits/fixes/suggestions 08fe136 (Lauri Apple)


## Release 2.18.0 (2019-02-12)

### Added

- Added mergeOverwrite function
- cryptographic functions that use secure random (see fe1de12)

### Changed

- Improve documentation of regexMatch function, resolves #139 90b89ce (Jan Tagscherer)
- Handle has for nil list 9c10885 (Daniel Cohen)
- Document behaviour of mergeOverwrite fe0dbe9 (Lukas Rieder)
- doc: adds missing documentation. 4b871e6 (Fernandez Ludovic)
- Replace outdated goutils imports 01893d2 (Matthew Lorimor)
- Surface crypto secure random strings from goutils fe1de12 (Matthew Lorimor)
- Handle untyped nil values as paramters to string functions 2b2ec8f (Morten Torkildsen)

### Fixed

- Fix dict merge issue and provide mergeOverwrite .dst .src1 to overwrite from src -> dst 4c59c12 (Lukas Rieder)
- Fix substr var names and comments d581f80 (Dean Coakley)
- Fix substr documentation 2737203 (Dean Coakley)

## Release 2.17.1 (2019-01-03)

### Fixed

The 2.17.0 release did not have a version pinned for xstrings, which caused compilation failures when xstrings < 1.2 was used. This adds the correct version string to glide.yaml.

## Release 2.17.0 (2019-01-03)

### Added

- adds alder32sum function and test 6908fc2 (marshallford)
- Added kebabcase function ca331a1 (Ilyes512)

### Changed

- Update goutils to 1.1.0 4e1125d (Matt Butcher)

### Fixed

- Fix 'has' documentation e3f2a85 (dean-coakley)
- docs(dict): fix typo in pick example dc424f9 (Dustin Specker)
- fixes spelling errors... not sure how that happened 4cf188a (marshallford)

## Release 2.16.0 (2018-08-13)

### Added

- add splitn function fccb0b0 (Helgi Þorbjörnsson)
- Add slice func df28ca7 (gongdo)
- Generate serial number a3bdffd (Cody Coons)
- Extract values of dict with values function df39312 (Lawrence Jones)

### Changed

- Modify panic message for list.slice ae38335 (gongdo)
- Minor improvement in code quality - Removed an unreachable piece of code at defaults.go#L26:6 - Resolve formatting issues. 5834241 (Abhishek Kashyap)
- Remove duplicated documentation 1d97af1 (Matthew Fisher)
- Test on go 1.11 49df809 (Helgi Þormar Þorbjörnsson)

### Fixed

- Fix file permissions c5f40b5 (gongdo)
- Fix example for buildCustomCert 7779e0d (Tin Lam)

## Release 2.15.0 (2018-04-02)

### Added

- #68 and #69: Add json helpers to docs (thanks @arunvelsriram)
- #66: Add ternary function (thanks @binoculars)
- #67: Allow keys function to take multiple dicts (thanks @binoculars)
- #89: Added sha1sum to crypto function (thanks @benkeil)
- #81: Allow customizing Root CA that used by genSignedCert (thanks @chenzhiwei)
- #92: Add travis testing for go 1.10
- #93: Adding appveyor config for windows testing

### Changed

- #90: Updating to more recent dependencies
- #73: replace satori/go.uuid with google/uuid (thanks @petterw)

### Fixed

- #76: Fixed documentation typos (thanks @Thiht)
- Fixed rounding issue on the `ago` function. Note, the removes support for Go 1.8 and older

## Release 2.14.1 (2017-12-01)

### Fixed

- #60: Fix typo in function name documentation (thanks @neil-ca-moore)
- #61: Removing line with {{ due to blocking github pages genertion
- #64: Update the list functions to handle int, string, and other slices for compatibility

## Release 2.14.0 (2017-10-06)

This new version of Sprig adds a set of functions for generating and working with SSL certificates.

- `genCA` generates an SSL Certificate Authority
- `genSelfSignedCert` generates an SSL self-signed certificate
- `genSignedCert` generates an SSL certificate and key based on a given CA

## Release 2.13.0 (2017-09-18)

This release adds new functions, including:

- `regexMatch`, `regexFindAll`, `regexFind`, `regexReplaceAll`, `regexReplaceAllLiteral`, and `regexSplit` to work with regular expressions
- `floor`, `ceil`, and `round` math functions
- `toDate` converts a string to a date
- `nindent` is just like `indent` but also prepends a new line
- `ago` returns the time from `time.Now`

### Added

- #40: Added basic regex functionality (thanks @alanquillin)
- #41: Added ceil floor and round functions (thanks @alanquillin)
- #48: Added toDate function (thanks @andreynering)
- #50: Added nindent function (thanks @binoculars)
- #46: Added ago function (thanks @slayer)

### Changed

- #51: Updated godocs to include new string functions (thanks @curtisallen)
- #49: Added ability to merge multiple dicts (thanks @binoculars)

## Release 2.12.0 (2017-05-17)

- `snakecase`, `camelcase`, and `shuffle` are three new string functions
- `fail` allows you to bail out of a template render when conditions are not met

## Release 2.11.0 (2017-05-02)

- Added `toJson` and `toPrettyJson`
- Added `merge`
- Refactored documentation

## Release 2.10.0 (2017-03-15)

- Added `semver` and `semverCompare` for Semantic Versions
- `list` replaces `tuple`
- Fixed issue with `join`
- Added `first`, `last`, `intial`, `rest`, `prepend`, `append`, `toString`, `toStrings`, `sortAlpha`, `reverse`, `coalesce`, `pluck`, `pick`, `compact`, `keys`, `omit`, `uniq`, `has`, `without`

## Release 2.9.0 (2017-02-23)

- Added `splitList` to split a list
- Added crypto functions of `genPrivateKey` and `derivePassword`

## Release 2.8.0 (2016-12-21)

- Added access to several path functions (`base`, `dir`, `clean`, `ext`, and `abs`)
- Added functions for _mutating_ dictionaries (`set`, `unset`, `hasKey`)

## Release 2.7.0 (2016-12-01)

- Added `sha256sum` to generate a hash of an input
- Added functions to convert a numeric or string to `int`, `int64`, `float64`

## Release 2.6.0 (2016-10-03)

- Added a `uuidv4` template function for generating UUIDs inside of a template.

## Release 2.5.0 (2016-08-19)

- New `trimSuffix`, `trimPrefix`, `hasSuffix`, and `hasPrefix` functions
- New aliases have been added for a few functions that didn't follow the naming conventions (`trimAll` and `abbrevBoth`)
- `trimall` and `abbrevboth` (notice the case) are deprecated and will be removed in 3.0.0

## Release 2.4.0 (2016-08-16)

- Adds two functions: `until` and `untilStep`

## Release 2.3.0 (2016-06-21)

- cat: Concatenate strings with whitespace separators.
- replace: Replace parts of a string: `replace " " "-" "Me First"` renders "Me-First"
- plural: Format plurals: `len "foo" | plural "one foo" "many foos"` renders "many foos"
- indent: Indent blocks of text in a way that is sensitive to "\n" characters.

## Release 2.2.0 (2016-04-21)

- Added a `genPrivateKey` function (Thanks @bacongobbler)

## Release 2.1.0 (2016-03-30)

- `default` now prints the default value when it does not receive a value down the pipeline. It is much safer now to do `{{.Foo | default "bar"}}`.
- Added accessors for "hermetic" functions. These return only functions that, when given the same input, produce the same output.

## Release 2.0.0 (2016-03-29)

Because we switched from `int` to `int64` as the return value for all integer math functions, the library's major version number has been incremented.

- `min` complements `max` (formerly `biggest`)
- `empty` indicates that a value is the empty value for its type
- `tuple` creates a tuple inside of a template: `{{$t := tuple "a", "b" "c"}}`
- `dict` creates a dictionary inside of a template `{{$d := dict "key1" "val1" "key2" "val2"}}` 
- Date formatters have been added for HTML dates (as used in `date` input fields)
- Integer math functions can convert from a number of types, including `string` (via `strconv.ParseInt`).

## Release 1.2.0 (2016-02-01)

- Added quote and squote
- Added b32enc and b32dec
- add now takes varargs
- biggest now takes varargs

## Release 1.1.0 (2015-12-29)

- Added #4: Added contains function. strings.Contains, but with the arguments
  switched to simplify common pipelines. (thanks krancour)
- Added Travis-CI testing support

## Release 1.0.0 (2015-12-23)

- Initial release
07070100000622000081A4000000000000000000000001645E367C00000424000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/go-task/slim-sprig/LICENSE.txt  Copyright (C) 2013-2020 Masterminds

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
07070100000623000081A4000000000000000000000001645E367C00000AAB000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/go-task/slim-sprig/README.md    # Slim-Sprig: Template functions for Go templates [![GoDoc](https://godoc.org/github.com/go-task/slim-sprig?status.svg)](https://godoc.org/github.com/go-task/slim-sprig) [![Go Report Card](https://goreportcard.com/badge/github.com/go-task/slim-sprig)](https://goreportcard.com/report/github.com/go-task/slim-sprig)

Slim-Sprig is a fork of [Sprig](https://github.com/Masterminds/sprig), but with
all functions that depend on external (non standard library) or crypto packages
removed.
The reason for this is to make this library more lightweight. Most of these
functions (specially crypto ones) are not needed on most apps, but costs a lot
in terms of binary size and compilation time.

## Usage

**Template developers**: Please use Slim-Sprig's [function documentation](https://go-task.github.io/slim-sprig/) for
detailed instructions and code snippets for the >100 template functions available.

**Go developers**: If you'd like to include Slim-Sprig as a library in your program,
our API documentation is available [at GoDoc.org](http://godoc.org/github.com/go-task/slim-sprig).

For standard usage, read on.

### Load the Slim-Sprig library

To load the Slim-Sprig `FuncMap`:

```go

import (
  "html/template"

  "github.com/go-task/slim-sprig"
)

// This example illustrates that the FuncMap *must* be set before the
// templates themselves are loaded.
tpl := template.Must(
  template.New("base").Funcs(sprig.FuncMap()).ParseGlob("*.html")
)
```

### Calling the functions inside of templates

By convention, all functions are lowercase. This seems to follow the Go
idiom for template functions (as opposed to template methods, which are
TitleCase). For example, this:

```
{{ "hello!" | upper | repeat 5 }}
```

produces this:

```
HELLO!HELLO!HELLO!HELLO!HELLO!
```

## Principles Driving Our Function Selection

We followed these principles to decide which functions to add and how to implement them:

- Use template functions to build layout. The following
  types of operations are within the domain of template functions:
  - Formatting
  - Layout
  - Simple type conversions
  - Utilities that assist in handling common formatting and layout needs (e.g. arithmetic)
- Template functions should not return errors unless there is no way to print
  a sensible value. For example, converting a string to an integer should not
  produce an error if conversion fails. Instead, it should display a default
  value.
- Simple math is necessary for grid layouts, pagers, and so on. Complex math
  (anything other than arithmetic) should be done outside of templates.
- Template functions only deal with the data passed into them. They never retrieve
  data from a source.
- Finally, do not override core Go template functions.
 07070100000624000081A4000000000000000000000001645E367C0000007D000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/go-task/slim-sprig/Taskfile.yml # https://taskfile.dev

version: '2'

tasks:
  default:
    cmds:
      - task: test

  test:
    cmds:
      - go test -v .
   07070100000625000081A4000000000000000000000001645E367C000001B3000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/go-task/slim-sprig/crypto.go    package sprig

import (
	"crypto/sha1"
	"crypto/sha256"
	"encoding/hex"
	"fmt"
	"hash/adler32"
)

func sha256sum(input string) string {
	hash := sha256.Sum256([]byte(input))
	return hex.EncodeToString(hash[:])
}

func sha1sum(input string) string {
	hash := sha1.Sum([]byte(input))
	return hex.EncodeToString(hash[:])
}

func adler32sum(input string) string {
	hash := adler32.Checksum([]byte(input))
	return fmt.Sprintf("%d", hash)
}
 07070100000626000081A4000000000000000000000001645E367C00000C2D000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/go-task/slim-sprig/date.go  package sprig

import (
	"strconv"
	"time"
)

// Given a format and a date, format the date string.
//
// Date can be a `time.Time` or an `int, int32, int64`.
// In the later case, it is treated as seconds since UNIX
// epoch.
func date(fmt string, date interface{}) string {
	return dateInZone(fmt, date, "Local")
}

func htmlDate(date interface{}) string {
	return dateInZone("2006-01-02", date, "Local")
}

func htmlDateInZone(date interface{}, zone string) string {
	return dateInZone("2006-01-02", date, zone)
}

func dateInZone(fmt string, date interface{}, zone string) string {
	var t time.Time
	switch date := date.(type) {
	default:
		t = time.Now()
	case time.Time:
		t = date
	case *time.Time:
		t = *date
	case int64:
		t = time.Unix(date, 0)
	case int:
		t = time.Unix(int64(date), 0)
	case int32:
		t = time.Unix(int64(date), 0)
	}

	loc, err := time.LoadLocation(zone)
	if err != nil {
		loc, _ = time.LoadLocation("UTC")
	}

	return t.In(loc).Format(fmt)
}

func dateModify(fmt string, date time.Time) time.Time {
	d, err := time.ParseDuration(fmt)
	if err != nil {
		return date
	}
	return date.Add(d)
}

func mustDateModify(fmt string, date time.Time) (time.Time, error) {
	d, err := time.ParseDuration(fmt)
	if err != nil {
		return time.Time{}, err
	}
	return date.Add(d), nil
}

func dateAgo(date interface{}) string {
	var t time.Time

	switch date := date.(type) {
	default:
		t = time.Now()
	case time.Time:
		t = date
	case int64:
		t = time.Unix(date, 0)
	case int:
		t = time.Unix(int64(date), 0)
	}
	// Drop resolution to seconds
	duration := time.Since(t).Round(time.Second)
	return duration.String()
}

func duration(sec interface{}) string {
	var n int64
	switch value := sec.(type) {
	default:
		n = 0
	case string:
		n, _ = strconv.ParseInt(value, 10, 64)
	case int64:
		n = value
	}
	return (time.Duration(n) * time.Second).String()
}

func durationRound(duration interface{}) string {
	var d time.Duration
	switch duration := duration.(type) {
	default:
		d = 0
	case string:
		d, _ = time.ParseDuration(duration)
	case int64:
		d = time.Duration(duration)
	case time.Time:
		d = time.Since(duration)
	}

	u := uint64(d)
	neg := d < 0
	if neg {
		u = -u
	}

	var (
		year   = uint64(time.Hour) * 24 * 365
		month  = uint64(time.Hour) * 24 * 30
		day    = uint64(time.Hour) * 24
		hour   = uint64(time.Hour)
		minute = uint64(time.Minute)
		second = uint64(time.Second)
	)
	switch {
	case u > year:
		return strconv.FormatUint(u/year, 10) + "y"
	case u > month:
		return strconv.FormatUint(u/month, 10) + "mo"
	case u > day:
		return strconv.FormatUint(u/day, 10) + "d"
	case u > hour:
		return strconv.FormatUint(u/hour, 10) + "h"
	case u > minute:
		return strconv.FormatUint(u/minute, 10) + "m"
	case u > second:
		return strconv.FormatUint(u/second, 10) + "s"
	}
	return "0s"
}

func toDate(fmt, str string) time.Time {
	t, _ := time.ParseInLocation(fmt, str, time.Local)
	return t
}

func mustToDate(fmt, str string) (time.Time, error) {
	return time.ParseInLocation(fmt, str, time.Local)
}

func unixEpoch(date time.Time) string {
	return strconv.FormatInt(date.Unix(), 10)
}
   07070100000627000081A4000000000000000000000001645E367C00000F15000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/go-task/slim-sprig/defaults.go  package sprig

import (
	"bytes"
	"encoding/json"
	"math/rand"
	"reflect"
	"strings"
	"time"
)

func init() {
	rand.Seed(time.Now().UnixNano())
}

// dfault checks whether `given` is set, and returns default if not set.
//
// This returns `d` if `given` appears not to be set, and `given` otherwise.
//
// For numeric types 0 is unset.
// For strings, maps, arrays, and slices, len() = 0 is considered unset.
// For bool, false is unset.
// Structs are never considered unset.
//
// For everything else, including pointers, a nil value is unset.
func dfault(d interface{}, given ...interface{}) interface{} {

	if empty(given) || empty(given[0]) {
		return d
	}
	return given[0]
}

// empty returns true if the given value has the zero value for its type.
func empty(given interface{}) bool {
	g := reflect.ValueOf(given)
	if !g.IsValid() {
		return true
	}

	// Basically adapted from text/template.isTrue
	switch g.Kind() {
	default:
		return g.IsNil()
	case reflect.Array, reflect.Slice, reflect.Map, reflect.String:
		return g.Len() == 0
	case reflect.Bool:
		return !g.Bool()
	case reflect.Complex64, reflect.Complex128:
		return g.Complex() == 0
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		return g.Int() == 0
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		return g.Uint() == 0
	case reflect.Float32, reflect.Float64:
		return g.Float() == 0
	case reflect.Struct:
		return false
	}
}

// coalesce returns the first non-empty value.
func coalesce(v ...interface{}) interface{} {
	for _, val := range v {
		if !empty(val) {
			return val
		}
	}
	return nil
}

// all returns true if empty(x) is false for all values x in the list.
// If the list is empty, return true.
func all(v ...interface{}) bool {
	for _, val := range v {
		if empty(val) {
			return false
		}
	}
	return true
}

// any returns true if empty(x) is false for any x in the list.
// If the list is empty, return false.
func any(v ...interface{}) bool {
	for _, val := range v {
		if !empty(val) {
			return true
		}
	}
	return false
}

// fromJson decodes JSON into a structured value, ignoring errors.
func fromJson(v string) interface{} {
	output, _ := mustFromJson(v)
	return output
}

// mustFromJson decodes JSON into a structured value, returning errors.
func mustFromJson(v string) (interface{}, error) {
	var output interface{}
	err := json.Unmarshal([]byte(v), &output)
	return output, err
}

// toJson encodes an item into a JSON string
func toJson(v interface{}) string {
	output, _ := json.Marshal(v)
	return string(output)
}

func mustToJson(v interface{}) (string, error) {
	output, err := json.Marshal(v)
	if err != nil {
		return "", err
	}
	return string(output), nil
}

// toPrettyJson encodes an item into a pretty (indented) JSON string
func toPrettyJson(v interface{}) string {
	output, _ := json.MarshalIndent(v, "", "  ")
	return string(output)
}

func mustToPrettyJson(v interface{}) (string, error) {
	output, err := json.MarshalIndent(v, "", "  ")
	if err != nil {
		return "", err
	}
	return string(output), nil
}

// toRawJson encodes an item into a JSON string with no escaping of HTML characters.
func toRawJson(v interface{}) string {
	output, err := mustToRawJson(v)
	if err != nil {
		panic(err)
	}
	return string(output)
}

// mustToRawJson encodes an item into a JSON string with no escaping of HTML characters.
func mustToRawJson(v interface{}) (string, error) {
	buf := new(bytes.Buffer)
	enc := json.NewEncoder(buf)
	enc.SetEscapeHTML(false)
	err := enc.Encode(&v)
	if err != nil {
		return "", err
	}
	return strings.TrimSuffix(buf.String(), "\n"), nil
}

// ternary returns the first value if the last value is true, otherwise returns the second value.
func ternary(vt interface{}, vf interface{}, v bool) interface{} {
	if v {
		return vt
	}

	return vf
}
   07070100000628000081A4000000000000000000000001645E367C00000919000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/go-task/slim-sprig/dict.go  package sprig

func get(d map[string]interface{}, key string) interface{} {
	if val, ok := d[key]; ok {
		return val
	}
	return ""
}

func set(d map[string]interface{}, key string, value interface{}) map[string]interface{} {
	d[key] = value
	return d
}

func unset(d map[string]interface{}, key string) map[string]interface{} {
	delete(d, key)
	return d
}

func hasKey(d map[string]interface{}, key string) bool {
	_, ok := d[key]
	return ok
}

func pluck(key string, d ...map[string]interface{}) []interface{} {
	res := []interface{}{}
	for _, dict := range d {
		if val, ok := dict[key]; ok {
			res = append(res, val)
		}
	}
	return res
}

func keys(dicts ...map[string]interface{}) []string {
	k := []string{}
	for _, dict := range dicts {
		for key := range dict {
			k = append(k, key)
		}
	}
	return k
}

func pick(dict map[string]interface{}, keys ...string) map[string]interface{} {
	res := map[string]interface{}{}
	for _, k := range keys {
		if v, ok := dict[k]; ok {
			res[k] = v
		}
	}
	return res
}

func omit(dict map[string]interface{}, keys ...string) map[string]interface{} {
	res := map[string]interface{}{}

	omit := make(map[string]bool, len(keys))
	for _, k := range keys {
		omit[k] = true
	}

	for k, v := range dict {
		if _, ok := omit[k]; !ok {
			res[k] = v
		}
	}
	return res
}

func dict(v ...interface{}) map[string]interface{} {
	dict := map[string]interface{}{}
	lenv := len(v)
	for i := 0; i < lenv; i += 2 {
		key := strval(v[i])
		if i+1 >= lenv {
			dict[key] = ""
			continue
		}
		dict[key] = v[i+1]
	}
	return dict
}

func values(dict map[string]interface{}) []interface{} {
	values := []interface{}{}
	for _, value := range dict {
		values = append(values, value)
	}

	return values
}

func dig(ps ...interface{}) (interface{}, error) {
	if len(ps) < 3 {
		panic("dig needs at least three arguments")
	}
	dict := ps[len(ps)-1].(map[string]interface{})
	def := ps[len(ps)-2]
	ks := make([]string, len(ps)-2)
	for i := 0; i < len(ks); i++ {
		ks[i] = ps[i].(string)
	}

	return digFromDict(dict, def, ks)
}

func digFromDict(dict map[string]interface{}, d interface{}, ks []string) (interface{}, error) {
	k, ns := ks[0], ks[1:len(ks)]
	step, has := dict[k]
	if !has {
		return d, nil
	}
	if len(ns) == 0 {
		return step, nil
	}
	return digFromDict(step.(map[string]interface{}), d, ns)
}
   07070100000629000081A4000000000000000000000001645E367C0000029F000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/go-task/slim-sprig/doc.go   /*
Package sprig provides template functions for Go.

This package contains a number of utility functions for working with data
inside of Go `html/template` and `text/template` files.

To add these functions, use the `template.Funcs()` method:

	t := templates.New("foo").Funcs(sprig.FuncMap())

Note that you should add the function map before you parse any template files.

	In several cases, Sprig reverses the order of arguments from the way they
	appear in the standard library. This is to make it easier to pipe
	arguments into functions.

See http://masterminds.github.io/sprig/ for more detailed documentation on each of the available functions.
*/
package sprig
 0707010000062A000081A4000000000000000000000001645E367C00002097000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/go-task/slim-sprig/functions.go package sprig

import (
	"errors"
	"html/template"
	"math/rand"
	"os"
	"path"
	"path/filepath"
	"reflect"
	"strconv"
	"strings"
	ttemplate "text/template"
	"time"
)

// FuncMap produces the function map.
//
// Use this to pass the functions into the template engine:
//
// 	tpl := template.New("foo").Funcs(sprig.FuncMap()))
//
func FuncMap() template.FuncMap {
	return HtmlFuncMap()
}

// HermeticTxtFuncMap returns a 'text/template'.FuncMap with only repeatable functions.
func HermeticTxtFuncMap() ttemplate.FuncMap {
	r := TxtFuncMap()
	for _, name := range nonhermeticFunctions {
		delete(r, name)
	}
	return r
}

// HermeticHtmlFuncMap returns an 'html/template'.Funcmap with only repeatable functions.
func HermeticHtmlFuncMap() template.FuncMap {
	r := HtmlFuncMap()
	for _, name := range nonhermeticFunctions {
		delete(r, name)
	}
	return r
}

// TxtFuncMap returns a 'text/template'.FuncMap
func TxtFuncMap() ttemplate.FuncMap {
	return ttemplate.FuncMap(GenericFuncMap())
}

// HtmlFuncMap returns an 'html/template'.Funcmap
func HtmlFuncMap() template.FuncMap {
	return template.FuncMap(GenericFuncMap())
}

// GenericFuncMap returns a copy of the basic function map as a map[string]interface{}.
func GenericFuncMap() map[string]interface{} {
	gfm := make(map[string]interface{}, len(genericMap))
	for k, v := range genericMap {
		gfm[k] = v
	}
	return gfm
}

// These functions are not guaranteed to evaluate to the same result for given input, because they
// refer to the environment or global state.
var nonhermeticFunctions = []string{
	// Date functions
	"date",
	"date_in_zone",
	"date_modify",
	"now",
	"htmlDate",
	"htmlDateInZone",
	"dateInZone",
	"dateModify",

	// Strings
	"randAlphaNum",
	"randAlpha",
	"randAscii",
	"randNumeric",
	"randBytes",
	"uuidv4",

	// OS
	"env",
	"expandenv",

	// Network
	"getHostByName",
}

var genericMap = map[string]interface{}{
	"hello": func() string { return "Hello!" },

	// Date functions
	"ago":              dateAgo,
	"date":             date,
	"date_in_zone":     dateInZone,
	"date_modify":      dateModify,
	"dateInZone":       dateInZone,
	"dateModify":       dateModify,
	"duration":         duration,
	"durationRound":    durationRound,
	"htmlDate":         htmlDate,
	"htmlDateInZone":   htmlDateInZone,
	"must_date_modify": mustDateModify,
	"mustDateModify":   mustDateModify,
	"mustToDate":       mustToDate,
	"now":              time.Now,
	"toDate":           toDate,
	"unixEpoch":        unixEpoch,

	// Strings
	"trunc":  trunc,
	"trim":   strings.TrimSpace,
	"upper":  strings.ToUpper,
	"lower":  strings.ToLower,
	"title":  strings.Title,
	"substr": substring,
	// Switch order so that "foo" | repeat 5
	"repeat": func(count int, str string) string { return strings.Repeat(str, count) },
	// Deprecated: Use trimAll.
	"trimall": func(a, b string) string { return strings.Trim(b, a) },
	// Switch order so that "$foo" | trimall "$"
	"trimAll":    func(a, b string) string { return strings.Trim(b, a) },
	"trimSuffix": func(a, b string) string { return strings.TrimSuffix(b, a) },
	"trimPrefix": func(a, b string) string { return strings.TrimPrefix(b, a) },
	// Switch order so that "foobar" | contains "foo"
	"contains":   func(substr string, str string) bool { return strings.Contains(str, substr) },
	"hasPrefix":  func(substr string, str string) bool { return strings.HasPrefix(str, substr) },
	"hasSuffix":  func(substr string, str string) bool { return strings.HasSuffix(str, substr) },
	"quote":      quote,
	"squote":     squote,
	"cat":        cat,
	"indent":     indent,
	"nindent":    nindent,
	"replace":    replace,
	"plural":     plural,
	"sha1sum":    sha1sum,
	"sha256sum":  sha256sum,
	"adler32sum": adler32sum,
	"toString":   strval,

	// Wrap Atoi to stop errors.
	"atoi":      func(a string) int { i, _ := strconv.Atoi(a); return i },
	"int64":     toInt64,
	"int":       toInt,
	"float64":   toFloat64,
	"seq":       seq,
	"toDecimal": toDecimal,

	//"gt": func(a, b int) bool {return a > b},
	//"gte": func(a, b int) bool {return a >= b},
	//"lt": func(a, b int) bool {return a < b},
	//"lte": func(a, b int) bool {return a <= b},

	// split "/" foo/bar returns map[int]string{0: foo, 1: bar}
	"split":     split,
	"splitList": func(sep, orig string) []string { return strings.Split(orig, sep) },
	// splitn "/" foo/bar/fuu returns map[int]string{0: foo, 1: bar/fuu}
	"splitn":    splitn,
	"toStrings": strslice,

	"until":     until,
	"untilStep": untilStep,

	// VERY basic arithmetic.
	"add1": func(i interface{}) int64 { return toInt64(i) + 1 },
	"add": func(i ...interface{}) int64 {
		var a int64 = 0
		for _, b := range i {
			a += toInt64(b)
		}
		return a
	},
	"sub": func(a, b interface{}) int64 { return toInt64(a) - toInt64(b) },
	"div": func(a, b interface{}) int64 { return toInt64(a) / toInt64(b) },
	"mod": func(a, b interface{}) int64 { return toInt64(a) % toInt64(b) },
	"mul": func(a interface{}, v ...interface{}) int64 {
		val := toInt64(a)
		for _, b := range v {
			val = val * toInt64(b)
		}
		return val
	},
	"randInt": func(min, max int) int { return rand.Intn(max-min) + min },
	"biggest": max,
	"max":     max,
	"min":     min,
	"maxf":    maxf,
	"minf":    minf,
	"ceil":    ceil,
	"floor":   floor,
	"round":   round,

	// string slices. Note that we reverse the order b/c that's better
	// for template processing.
	"join":      join,
	"sortAlpha": sortAlpha,

	// Defaults
	"default":          dfault,
	"empty":            empty,
	"coalesce":         coalesce,
	"all":              all,
	"any":              any,
	"compact":          compact,
	"mustCompact":      mustCompact,
	"fromJson":         fromJson,
	"toJson":           toJson,
	"toPrettyJson":     toPrettyJson,
	"toRawJson":        toRawJson,
	"mustFromJson":     mustFromJson,
	"mustToJson":       mustToJson,
	"mustToPrettyJson": mustToPrettyJson,
	"mustToRawJson":    mustToRawJson,
	"ternary":          ternary,

	// Reflection
	"typeOf":     typeOf,
	"typeIs":     typeIs,
	"typeIsLike": typeIsLike,
	"kindOf":     kindOf,
	"kindIs":     kindIs,
	"deepEqual":  reflect.DeepEqual,

	// OS:
	"env":       os.Getenv,
	"expandenv": os.ExpandEnv,

	// Network:
	"getHostByName": getHostByName,

	// Paths:
	"base":  path.Base,
	"dir":   path.Dir,
	"clean": path.Clean,
	"ext":   path.Ext,
	"isAbs": path.IsAbs,

	// Filepaths:
	"osBase":  filepath.Base,
	"osClean": filepath.Clean,
	"osDir":   filepath.Dir,
	"osExt":   filepath.Ext,
	"osIsAbs": filepath.IsAbs,

	// Encoding:
	"b64enc": base64encode,
	"b64dec": base64decode,
	"b32enc": base32encode,
	"b32dec": base32decode,

	// Data Structures:
	"tuple":  list, // FIXME: with the addition of append/prepend these are no longer immutable.
	"list":   list,
	"dict":   dict,
	"get":    get,
	"set":    set,
	"unset":  unset,
	"hasKey": hasKey,
	"pluck":  pluck,
	"keys":   keys,
	"pick":   pick,
	"omit":   omit,
	"values": values,

	"append": push, "push": push,
	"mustAppend": mustPush, "mustPush": mustPush,
	"prepend":     prepend,
	"mustPrepend": mustPrepend,
	"first":       first,
	"mustFirst":   mustFirst,
	"rest":        rest,
	"mustRest":    mustRest,
	"last":        last,
	"mustLast":    mustLast,
	"initial":     initial,
	"mustInitial": mustInitial,
	"reverse":     reverse,
	"mustReverse": mustReverse,
	"uniq":        uniq,
	"mustUniq":    mustUniq,
	"without":     without,
	"mustWithout": mustWithout,
	"has":         has,
	"mustHas":     mustHas,
	"slice":       slice,
	"mustSlice":   mustSlice,
	"concat":      concat,
	"dig":         dig,
	"chunk":       chunk,
	"mustChunk":   mustChunk,

	// Flow Control:
	"fail": func(msg string) (string, error) { return "", errors.New(msg) },

	// Regex
	"regexMatch":                 regexMatch,
	"mustRegexMatch":             mustRegexMatch,
	"regexFindAll":               regexFindAll,
	"mustRegexFindAll":           mustRegexFindAll,
	"regexFind":                  regexFind,
	"mustRegexFind":              mustRegexFind,
	"regexReplaceAll":            regexReplaceAll,
	"mustRegexReplaceAll":        mustRegexReplaceAll,
	"regexReplaceAllLiteral":     regexReplaceAllLiteral,
	"mustRegexReplaceAllLiteral": mustRegexReplaceAllLiteral,
	"regexSplit":                 regexSplit,
	"mustRegexSplit":             mustRegexSplit,
	"regexQuoteMeta":             regexQuoteMeta,

	// URLs:
	"urlParse": urlParse,
	"urlJoin":  urlJoin,
}
 0707010000062B000081A4000000000000000000000001645E367C00002353000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/go-task/slim-sprig/list.go  package sprig

import (
	"fmt"
	"math"
	"reflect"
	"sort"
)

// Reflection is used in these functions so that slices and arrays of strings,
// ints, and other types not implementing []interface{} can be worked with.
// For example, this is useful if you need to work on the output of regexs.

func list(v ...interface{}) []interface{} {
	return v
}

func push(list interface{}, v interface{}) []interface{} {
	l, err := mustPush(list, v)
	if err != nil {
		panic(err)
	}

	return l
}

func mustPush(list interface{}, v interface{}) ([]interface{}, error) {
	tp := reflect.TypeOf(list).Kind()
	switch tp {
	case reflect.Slice, reflect.Array:
		l2 := reflect.ValueOf(list)

		l := l2.Len()
		nl := make([]interface{}, l)
		for i := 0; i < l; i++ {
			nl[i] = l2.Index(i).Interface()
		}

		return append(nl, v), nil

	default:
		return nil, fmt.Errorf("Cannot push on type %s", tp)
	}
}

func prepend(list interface{}, v interface{}) []interface{} {
	l, err := mustPrepend(list, v)
	if err != nil {
		panic(err)
	}

	return l
}

func mustPrepend(list interface{}, v interface{}) ([]interface{}, error) {
	//return append([]interface{}{v}, list...)

	tp := reflect.TypeOf(list).Kind()
	switch tp {
	case reflect.Slice, reflect.Array:
		l2 := reflect.ValueOf(list)

		l := l2.Len()
		nl := make([]interface{}, l)
		for i := 0; i < l; i++ {
			nl[i] = l2.Index(i).Interface()
		}

		return append([]interface{}{v}, nl...), nil

	default:
		return nil, fmt.Errorf("Cannot prepend on type %s", tp)
	}
}

func chunk(size int, list interface{}) [][]interface{} {
	l, err := mustChunk(size, list)
	if err != nil {
		panic(err)
	}

	return l
}

func mustChunk(size int, list interface{}) ([][]interface{}, error) {
	tp := reflect.TypeOf(list).Kind()
	switch tp {
	case reflect.Slice, reflect.Array:
		l2 := reflect.ValueOf(list)

		l := l2.Len()

		cs := int(math.Floor(float64(l-1)/float64(size)) + 1)
		nl := make([][]interface{}, cs)

		for i := 0; i < cs; i++ {
			clen := size
			if i == cs-1 {
				clen = int(math.Floor(math.Mod(float64(l), float64(size))))
				if clen == 0 {
					clen = size
				}
			}

			nl[i] = make([]interface{}, clen)

			for j := 0; j < clen; j++ {
				ix := i*size + j
				nl[i][j] = l2.Index(ix).Interface()
			}
		}

		return nl, nil

	default:
		return nil, fmt.Errorf("Cannot chunk type %s", tp)
	}
}

func last(list interface{}) interface{} {
	l, err := mustLast(list)
	if err != nil {
		panic(err)
	}

	return l
}

func mustLast(list interface{}) (interface{}, error) {
	tp := reflect.TypeOf(list).Kind()
	switch tp {
	case reflect.Slice, reflect.Array:
		l2 := reflect.ValueOf(list)

		l := l2.Len()
		if l == 0 {
			return nil, nil
		}

		return l2.Index(l - 1).Interface(), nil
	default:
		return nil, fmt.Errorf("Cannot find last on type %s", tp)
	}
}

func first(list interface{}) interface{} {
	l, err := mustFirst(list)
	if err != nil {
		panic(err)
	}

	return l
}

func mustFirst(list interface{}) (interface{}, error) {
	tp := reflect.TypeOf(list).Kind()
	switch tp {
	case reflect.Slice, reflect.Array:
		l2 := reflect.ValueOf(list)

		l := l2.Len()
		if l == 0 {
			return nil, nil
		}

		return l2.Index(0).Interface(), nil
	default:
		return nil, fmt.Errorf("Cannot find first on type %s", tp)
	}
}

func rest(list interface{}) []interface{} {
	l, err := mustRest(list)
	if err != nil {
		panic(err)
	}

	return l
}

func mustRest(list interface{}) ([]interface{}, error) {
	tp := reflect.TypeOf(list).Kind()
	switch tp {
	case reflect.Slice, reflect.Array:
		l2 := reflect.ValueOf(list)

		l := l2.Len()
		if l == 0 {
			return nil, nil
		}

		nl := make([]interface{}, l-1)
		for i := 1; i < l; i++ {
			nl[i-1] = l2.Index(i).Interface()
		}

		return nl, nil
	default:
		return nil, fmt.Errorf("Cannot find rest on type %s", tp)
	}
}

func initial(list interface{}) []interface{} {
	l, err := mustInitial(list)
	if err != nil {
		panic(err)
	}

	return l
}

func mustInitial(list interface{}) ([]interface{}, error) {
	tp := reflect.TypeOf(list).Kind()
	switch tp {
	case reflect.Slice, reflect.Array:
		l2 := reflect.ValueOf(list)

		l := l2.Len()
		if l == 0 {
			return nil, nil
		}

		nl := make([]interface{}, l-1)
		for i := 0; i < l-1; i++ {
			nl[i] = l2.Index(i).Interface()
		}

		return nl, nil
	default:
		return nil, fmt.Errorf("Cannot find initial on type %s", tp)
	}
}

func sortAlpha(list interface{}) []string {
	k := reflect.Indirect(reflect.ValueOf(list)).Kind()
	switch k {
	case reflect.Slice, reflect.Array:
		a := strslice(list)
		s := sort.StringSlice(a)
		s.Sort()
		return s
	}
	return []string{strval(list)}
}

func reverse(v interface{}) []interface{} {
	l, err := mustReverse(v)
	if err != nil {
		panic(err)
	}

	return l
}

func mustReverse(v interface{}) ([]interface{}, error) {
	tp := reflect.TypeOf(v).Kind()
	switch tp {
	case reflect.Slice, reflect.Array:
		l2 := reflect.ValueOf(v)

		l := l2.Len()
		// We do not sort in place because the incoming array should not be altered.
		nl := make([]interface{}, l)
		for i := 0; i < l; i++ {
			nl[l-i-1] = l2.Index(i).Interface()
		}

		return nl, nil
	default:
		return nil, fmt.Errorf("Cannot find reverse on type %s", tp)
	}
}

func compact(list interface{}) []interface{} {
	l, err := mustCompact(list)
	if err != nil {
		panic(err)
	}

	return l
}

func mustCompact(list interface{}) ([]interface{}, error) {
	tp := reflect.TypeOf(list).Kind()
	switch tp {
	case reflect.Slice, reflect.Array:
		l2 := reflect.ValueOf(list)

		l := l2.Len()
		nl := []interface{}{}
		var item interface{}
		for i := 0; i < l; i++ {
			item = l2.Index(i).Interface()
			if !empty(item) {
				nl = append(nl, item)
			}
		}

		return nl, nil
	default:
		return nil, fmt.Errorf("Cannot compact on type %s", tp)
	}
}

func uniq(list interface{}) []interface{} {
	l, err := mustUniq(list)
	if err != nil {
		panic(err)
	}

	return l
}

func mustUniq(list interface{}) ([]interface{}, error) {
	tp := reflect.TypeOf(list).Kind()
	switch tp {
	case reflect.Slice, reflect.Array:
		l2 := reflect.ValueOf(list)

		l := l2.Len()
		dest := []interface{}{}
		var item interface{}
		for i := 0; i < l; i++ {
			item = l2.Index(i).Interface()
			if !inList(dest, item) {
				dest = append(dest, item)
			}
		}

		return dest, nil
	default:
		return nil, fmt.Errorf("Cannot find uniq on type %s", tp)
	}
}

func inList(haystack []interface{}, needle interface{}) bool {
	for _, h := range haystack {
		if reflect.DeepEqual(needle, h) {
			return true
		}
	}
	return false
}

func without(list interface{}, omit ...interface{}) []interface{} {
	l, err := mustWithout(list, omit...)
	if err != nil {
		panic(err)
	}

	return l
}

func mustWithout(list interface{}, omit ...interface{}) ([]interface{}, error) {
	tp := reflect.TypeOf(list).Kind()
	switch tp {
	case reflect.Slice, reflect.Array:
		l2 := reflect.ValueOf(list)

		l := l2.Len()
		res := []interface{}{}
		var item interface{}
		for i := 0; i < l; i++ {
			item = l2.Index(i).Interface()
			if !inList(omit, item) {
				res = append(res, item)
			}
		}

		return res, nil
	default:
		return nil, fmt.Errorf("Cannot find without on type %s", tp)
	}
}

func has(needle interface{}, haystack interface{}) bool {
	l, err := mustHas(needle, haystack)
	if err != nil {
		panic(err)
	}

	return l
}

func mustHas(needle interface{}, haystack interface{}) (bool, error) {
	if haystack == nil {
		return false, nil
	}
	tp := reflect.TypeOf(haystack).Kind()
	switch tp {
	case reflect.Slice, reflect.Array:
		l2 := reflect.ValueOf(haystack)
		var item interface{}
		l := l2.Len()
		for i := 0; i < l; i++ {
			item = l2.Index(i).Interface()
			if reflect.DeepEqual(needle, item) {
				return true, nil
			}
		}

		return false, nil
	default:
		return false, fmt.Errorf("Cannot find has on type %s", tp)
	}
}

// $list := [1, 2, 3, 4, 5]
// slice $list     -> list[0:5] = list[:]
// slice $list 0 3 -> list[0:3] = list[:3]
// slice $list 3 5 -> list[3:5]
// slice $list 3   -> list[3:5] = list[3:]
func slice(list interface{}, indices ...interface{}) interface{} {
	l, err := mustSlice(list, indices...)
	if err != nil {
		panic(err)
	}

	return l
}

func mustSlice(list interface{}, indices ...interface{}) (interface{}, error) {
	tp := reflect.TypeOf(list).Kind()
	switch tp {
	case reflect.Slice, reflect.Array:
		l2 := reflect.ValueOf(list)

		l := l2.Len()
		if l == 0 {
			return nil, nil
		}

		var start, end int
		if len(indices) > 0 {
			start = toInt(indices[0])
		}
		if len(indices) < 2 {
			end = l
		} else {
			end = toInt(indices[1])
		}

		return l2.Slice(start, end).Interface(), nil
	default:
		return nil, fmt.Errorf("list should be type of slice or array but %s", tp)
	}
}

func concat(lists ...interface{}) interface{} {
	var res []interface{}
	for _, list := range lists {
		tp := reflect.TypeOf(list).Kind()
		switch tp {
		case reflect.Slice, reflect.Array:
			l2 := reflect.ValueOf(list)
			for i := 0; i < l2.Len(); i++ {
				res = append(res, l2.Index(i).Interface())
			}
		default:
			panic(fmt.Sprintf("Cannot concat type %s as list", tp))
		}
	}
	return res
}
 0707010000062C000081A4000000000000000000000001645E367C000000D6000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/go-task/slim-sprig/network.go   package sprig

import (
	"math/rand"
	"net"
)

func getHostByName(name string) string {
	addrs, _ := net.LookupHost(name)
	//TODO: add error handing when release v3 comes out
	return addrs[rand.Intn(len(addrs))]
}
  0707010000062D000081A4000000000000000000000001645E367C00001076000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/go-task/slim-sprig/numeric.go   package sprig

import (
	"fmt"
	"math"
	"reflect"
	"strconv"
	"strings"
)

// toFloat64 converts 64-bit floats
func toFloat64(v interface{}) float64 {
	if str, ok := v.(string); ok {
		iv, err := strconv.ParseFloat(str, 64)
		if err != nil {
			return 0
		}
		return iv
	}

	val := reflect.Indirect(reflect.ValueOf(v))
	switch val.Kind() {
	case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int:
		return float64(val.Int())
	case reflect.Uint8, reflect.Uint16, reflect.Uint32:
		return float64(val.Uint())
	case reflect.Uint, reflect.Uint64:
		return float64(val.Uint())
	case reflect.Float32, reflect.Float64:
		return val.Float()
	case reflect.Bool:
		if val.Bool() {
			return 1
		}
		return 0
	default:
		return 0
	}
}

func toInt(v interface{}) int {
	//It's not optimal. Bud I don't want duplicate toInt64 code.
	return int(toInt64(v))
}

// toInt64 converts integer types to 64-bit integers
func toInt64(v interface{}) int64 {
	if str, ok := v.(string); ok {
		iv, err := strconv.ParseInt(str, 10, 64)
		if err != nil {
			return 0
		}
		return iv
	}

	val := reflect.Indirect(reflect.ValueOf(v))
	switch val.Kind() {
	case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int:
		return val.Int()
	case reflect.Uint8, reflect.Uint16, reflect.Uint32:
		return int64(val.Uint())
	case reflect.Uint, reflect.Uint64:
		tv := val.Uint()
		if tv <= math.MaxInt64 {
			return int64(tv)
		}
		// TODO: What is the sensible thing to do here?
		return math.MaxInt64
	case reflect.Float32, reflect.Float64:
		return int64(val.Float())
	case reflect.Bool:
		if val.Bool() {
			return 1
		}
		return 0
	default:
		return 0
	}
}

func max(a interface{}, i ...interface{}) int64 {
	aa := toInt64(a)
	for _, b := range i {
		bb := toInt64(b)
		if bb > aa {
			aa = bb
		}
	}
	return aa
}

func maxf(a interface{}, i ...interface{}) float64 {
	aa := toFloat64(a)
	for _, b := range i {
		bb := toFloat64(b)
		aa = math.Max(aa, bb)
	}
	return aa
}

func min(a interface{}, i ...interface{}) int64 {
	aa := toInt64(a)
	for _, b := range i {
		bb := toInt64(b)
		if bb < aa {
			aa = bb
		}
	}
	return aa
}

func minf(a interface{}, i ...interface{}) float64 {
	aa := toFloat64(a)
	for _, b := range i {
		bb := toFloat64(b)
		aa = math.Min(aa, bb)
	}
	return aa
}

func until(count int) []int {
	step := 1
	if count < 0 {
		step = -1
	}
	return untilStep(0, count, step)
}

func untilStep(start, stop, step int) []int {
	v := []int{}

	if stop < start {
		if step >= 0 {
			return v
		}
		for i := start; i > stop; i += step {
			v = append(v, i)
		}
		return v
	}

	if step <= 0 {
		return v
	}
	for i := start; i < stop; i += step {
		v = append(v, i)
	}
	return v
}

func floor(a interface{}) float64 {
	aa := toFloat64(a)
	return math.Floor(aa)
}

func ceil(a interface{}) float64 {
	aa := toFloat64(a)
	return math.Ceil(aa)
}

func round(a interface{}, p int, rOpt ...float64) float64 {
	roundOn := .5
	if len(rOpt) > 0 {
		roundOn = rOpt[0]
	}
	val := toFloat64(a)
	places := toFloat64(p)

	var round float64
	pow := math.Pow(10, places)
	digit := pow * val
	_, div := math.Modf(digit)
	if div >= roundOn {
		round = math.Ceil(digit)
	} else {
		round = math.Floor(digit)
	}
	return round / pow
}

// converts unix octal to decimal
func toDecimal(v interface{}) int64 {
	result, err := strconv.ParseInt(fmt.Sprint(v), 8, 64)
	if err != nil {
		return 0
	}
	return result
}

func seq(params ...int) string {
	increment := 1
	switch len(params) {
	case 0:
		return ""
	case 1:
		start := 1
		end := params[0]
		if end < start {
			increment = -1
		}
		return intArrayToString(untilStep(start, end+increment, increment), " ")
	case 3:
		start := params[0]
		end := params[2]
		step := params[1]
		if end < start {
			increment = -1
			if step > 0 {
				return ""
			}
		}
		return intArrayToString(untilStep(start, end+increment, step), " ")
	case 2:
		start := params[0]
		end := params[1]
		step := 1
		if end < start {
			step = -1
		}
		return intArrayToString(untilStep(start, end+step, step), " ")
	default:
		return ""
	}
}

func intArrayToString(slice []int, delimeter string) string {
	return strings.Trim(strings.Join(strings.Fields(fmt.Sprint(slice)), delimeter), "[]")
}
  0707010000062E000081A4000000000000000000000001645E367C00000224000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/go-task/slim-sprig/reflect.go   package sprig

import (
	"fmt"
	"reflect"
)

// typeIs returns true if the src is the type named in target.
func typeIs(target string, src interface{}) bool {
	return target == typeOf(src)
}

func typeIsLike(target string, src interface{}) bool {
	t := typeOf(src)
	return target == t || "*"+target == t
}

func typeOf(src interface{}) string {
	return fmt.Sprintf("%T", src)
}

func kindIs(target string, src interface{}) bool {
	return target == kindOf(src)
}

func kindOf(src interface{}) string {
	return reflect.ValueOf(src).Kind().String()
}
0707010000062F000081A4000000000000000000000001645E367C0000075A000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/go-task/slim-sprig/regex.go package sprig

import (
	"regexp"
)

func regexMatch(regex string, s string) bool {
	match, _ := regexp.MatchString(regex, s)
	return match
}

func mustRegexMatch(regex string, s string) (bool, error) {
	return regexp.MatchString(regex, s)
}

func regexFindAll(regex string, s string, n int) []string {
	r := regexp.MustCompile(regex)
	return r.FindAllString(s, n)
}

func mustRegexFindAll(regex string, s string, n int) ([]string, error) {
	r, err := regexp.Compile(regex)
	if err != nil {
		return []string{}, err
	}
	return r.FindAllString(s, n), nil
}

func regexFind(regex string, s string) string {
	r := regexp.MustCompile(regex)
	return r.FindString(s)
}

func mustRegexFind(regex string, s string) (string, error) {
	r, err := regexp.Compile(regex)
	if err != nil {
		return "", err
	}
	return r.FindString(s), nil
}

func regexReplaceAll(regex string, s string, repl string) string {
	r := regexp.MustCompile(regex)
	return r.ReplaceAllString(s, repl)
}

func mustRegexReplaceAll(regex string, s string, repl string) (string, error) {
	r, err := regexp.Compile(regex)
	if err != nil {
		return "", err
	}
	return r.ReplaceAllString(s, repl), nil
}

func regexReplaceAllLiteral(regex string, s string, repl string) string {
	r := regexp.MustCompile(regex)
	return r.ReplaceAllLiteralString(s, repl)
}

func mustRegexReplaceAllLiteral(regex string, s string, repl string) (string, error) {
	r, err := regexp.Compile(regex)
	if err != nil {
		return "", err
	}
	return r.ReplaceAllLiteralString(s, repl), nil
}

func regexSplit(regex string, s string, n int) []string {
	r := regexp.MustCompile(regex)
	return r.Split(s, n)
}

func mustRegexSplit(regex string, s string, n int) ([]string, error) {
	r, err := regexp.Compile(regex)
	if err != nil {
		return []string{}, err
	}
	return r.Split(s, n), nil
}

func regexQuoteMeta(s string) string {
	return regexp.QuoteMeta(s)
}
  07070100000630000081A4000000000000000000000001645E367C00000E5F000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/go-task/slim-sprig/strings.go   package sprig

import (
	"encoding/base32"
	"encoding/base64"
	"fmt"
	"reflect"
	"strconv"
	"strings"
)

func base64encode(v string) string {
	return base64.StdEncoding.EncodeToString([]byte(v))
}

func base64decode(v string) string {
	data, err := base64.StdEncoding.DecodeString(v)
	if err != nil {
		return err.Error()
	}
	return string(data)
}

func base32encode(v string) string {
	return base32.StdEncoding.EncodeToString([]byte(v))
}

func base32decode(v string) string {
	data, err := base32.StdEncoding.DecodeString(v)
	if err != nil {
		return err.Error()
	}
	return string(data)
}

func quote(str ...interface{}) string {
	out := make([]string, 0, len(str))
	for _, s := range str {
		if s != nil {
			out = append(out, fmt.Sprintf("%q", strval(s)))
		}
	}
	return strings.Join(out, " ")
}

func squote(str ...interface{}) string {
	out := make([]string, 0, len(str))
	for _, s := range str {
		if s != nil {
			out = append(out, fmt.Sprintf("'%v'", s))
		}
	}
	return strings.Join(out, " ")
}

func cat(v ...interface{}) string {
	v = removeNilElements(v)
	r := strings.TrimSpace(strings.Repeat("%v ", len(v)))
	return fmt.Sprintf(r, v...)
}

func indent(spaces int, v string) string {
	pad := strings.Repeat(" ", spaces)
	return pad + strings.Replace(v, "\n", "\n"+pad, -1)
}

func nindent(spaces int, v string) string {
	return "\n" + indent(spaces, v)
}

func replace(old, new, src string) string {
	return strings.Replace(src, old, new, -1)
}

func plural(one, many string, count int) string {
	if count == 1 {
		return one
	}
	return many
}

func strslice(v interface{}) []string {
	switch v := v.(type) {
	case []string:
		return v
	case []interface{}:
		b := make([]string, 0, len(v))
		for _, s := range v {
			if s != nil {
				b = append(b, strval(s))
			}
		}
		return b
	default:
		val := reflect.ValueOf(v)
		switch val.Kind() {
		case reflect.Array, reflect.Slice:
			l := val.Len()
			b := make([]string, 0, l)
			for i := 0; i < l; i++ {
				value := val.Index(i).Interface()
				if value != nil {
					b = append(b, strval(value))
				}
			}
			return b
		default:
			if v == nil {
				return []string{}
			}

			return []string{strval(v)}
		}
	}
}

func removeNilElements(v []interface{}) []interface{} {
	newSlice := make([]interface{}, 0, len(v))
	for _, i := range v {
		if i != nil {
			newSlice = append(newSlice, i)
		}
	}
	return newSlice
}

func strval(v interface{}) string {
	switch v := v.(type) {
	case string:
		return v
	case []byte:
		return string(v)
	case error:
		return v.Error()
	case fmt.Stringer:
		return v.String()
	default:
		return fmt.Sprintf("%v", v)
	}
}

func trunc(c int, s string) string {
	if c < 0 && len(s)+c > 0 {
		return s[len(s)+c:]
	}
	if c >= 0 && len(s) > c {
		return s[:c]
	}
	return s
}

func join(sep string, v interface{}) string {
	return strings.Join(strslice(v), sep)
}

func split(sep, orig string) map[string]string {
	parts := strings.Split(orig, sep)
	res := make(map[string]string, len(parts))
	for i, v := range parts {
		res["_"+strconv.Itoa(i)] = v
	}
	return res
}

func splitn(sep string, n int, orig string) map[string]string {
	parts := strings.SplitN(orig, sep, n)
	res := make(map[string]string, len(parts))
	for i, v := range parts {
		res["_"+strconv.Itoa(i)] = v
	}
	return res
}

// substring creates a substring of the given string.
//
// If start is < 0, this calls string[:end].
//
// If start is >= 0 and end < 0 or end bigger than s length, this calls string[start:]
//
// Otherwise, this calls string[start, end].
func substring(start, end int, s string) string {
	if start < 0 {
		return s[:end]
	}
	if end < 0 || end > len(s) {
		return s[start:]
	}
	return s[start:end]
}
 07070100000631000081A4000000000000000000000001645E367C0000067A000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/go-task/slim-sprig/url.go   package sprig

import (
	"fmt"
	"net/url"
	"reflect"
)

func dictGetOrEmpty(dict map[string]interface{}, key string) string {
	value, ok := dict[key]
	if !ok {
		return ""
	}
	tp := reflect.TypeOf(value).Kind()
	if tp != reflect.String {
		panic(fmt.Sprintf("unable to parse %s key, must be of type string, but %s found", key, tp.String()))
	}
	return reflect.ValueOf(value).String()
}

// parses given URL to return dict object
func urlParse(v string) map[string]interface{} {
	dict := map[string]interface{}{}
	parsedURL, err := url.Parse(v)
	if err != nil {
		panic(fmt.Sprintf("unable to parse url: %s", err))
	}
	dict["scheme"] = parsedURL.Scheme
	dict["host"] = parsedURL.Host
	dict["hostname"] = parsedURL.Hostname()
	dict["path"] = parsedURL.Path
	dict["query"] = parsedURL.RawQuery
	dict["opaque"] = parsedURL.Opaque
	dict["fragment"] = parsedURL.Fragment
	if parsedURL.User != nil {
		dict["userinfo"] = parsedURL.User.String()
	} else {
		dict["userinfo"] = ""
	}

	return dict
}

// join given dict to URL string
func urlJoin(d map[string]interface{}) string {
	resURL := url.URL{
		Scheme:   dictGetOrEmpty(d, "scheme"),
		Host:     dictGetOrEmpty(d, "host"),
		Path:     dictGetOrEmpty(d, "path"),
		RawQuery: dictGetOrEmpty(d, "query"),
		Opaque:   dictGetOrEmpty(d, "opaque"),
		Fragment: dictGetOrEmpty(d, "fragment"),
	}
	userinfo := dictGetOrEmpty(d, "userinfo")
	var user *url.Userinfo
	if userinfo != "" {
		tempURL, err := url.Parse(fmt.Sprintf("proto://%s@host", userinfo))
		if err != nil {
			panic(fmt.Sprintf("unable to parse userinfo in dict: %s", err))
		}
		user = tempURL.User
	}

	resURL.User = user
	return resURL.String()
}
  07070100000632000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002B00000000elemental-cli-0.3.1/vendor/github.com/gogo    07070100000633000041ED000000000000000000000005645E367C00000000000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf   07070100000634000081A4000000000000000000000001645E367C00000232000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/AUTHORS   # This is the official list of GoGo authors for copyright purposes.
# This file is distinct from the CONTRIBUTORS file, which
# lists people.  For example, employees are listed in CONTRIBUTORS,
# but not in AUTHORS, because the employer holds the copyright.

# Names should be added to this file as one of
#     Organization's name
#     Individual's name <submission email address>
#     Individual's name <submission email address> <email2> <emailN>

# Please keep the list sorted.

Sendgrid, Inc
Vastech SA (PTY) LTD
Walter Schulze <awalterschulze@gmail.com>
  07070100000635000081A4000000000000000000000001645E367C0000034D000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/CONTRIBUTORS  Anton Povarov <anton.povarov@gmail.com>
Brian Goff <cpuguy83@gmail.com>
Clayton Coleman <ccoleman@redhat.com>
Denis Smirnov <denis.smirnov.91@gmail.com>
DongYun Kang <ceram1000@gmail.com>
Dwayne Schultz <dschultz@pivotal.io>
Georg Apitz <gapitz@pivotal.io>
Gustav Paul <gustav.paul@gmail.com>
Johan Brandhorst <johan.brandhorst@gmail.com>
John Shahid <jvshahid@gmail.com>
John Tuley <john@tuley.org>
Laurent <laurent@adyoulike.com>
Patrick Lee <patrick@dropbox.com>
Peter Edge <peter.edge@gmail.com>
Roger Johansson <rogeralsing@gmail.com>
Sam Nguyen <sam.nguyen@sendgrid.com>
Sergio Arbeo <serabe@gmail.com>
Stephen J Day <stephen.day@docker.com>
Tamir Duberstein <tamird@gmail.com>
Todd Eisenberger <teisenberger@dropbox.com>
Tormod Erevik Lea <tormodlea@gmail.com>
Vyacheslav Kim <kane@sendgrid.com>
Walter Schulze <awalterschulze@gmail.com>
   07070100000636000081A4000000000000000000000001645E367C00000691000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/LICENSE   Copyright (c) 2013, The GoGo Authors. All rights reserved.

Protocol Buffers for Go with Gadgets

Go support for Protocol Buffers - Google's data interchange format

Copyright 2010 The Go Authors.  All rights reserved.
https://github.com/golang/protobuf

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

    * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
    * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

   07070100000637000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/gogoproto 07070100000638000081A4000000000000000000000001645E367C000006C6000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/gogoproto/Makefile    # Protocol Buffers for Go with Gadgets
#
# Copyright (c) 2013, The GoGo Authors. All rights reserved.
# http://github.com/gogo/protobuf
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
#     * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#     * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

regenerate:
	go install github.com/gogo/protobuf/protoc-gen-gogo
	protoc --gogo_out=Mgoogle/protobuf/descriptor.proto=github.com/gogo/protobuf/protoc-gen-gogo/descriptor:../../../../ --proto_path=../../../../:../protobuf/:. *.proto

restore:
	cp gogo.pb.golden gogo.pb.go

preserve:
	cp gogo.pb.go gogo.pb.golden
  07070100000639000081A4000000000000000000000001645E367C000022D1000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/gogoproto/doc.go  // Protocol Buffers for Go with Gadgets
//
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

/*
Package gogoproto provides extensions for protocol buffers to achieve:

  - fast marshalling and unmarshalling.
  - peace of mind by optionally generating test and benchmark code.
  - more canonical Go structures.
  - less typing by optionally generating extra helper code.
  - goprotobuf compatibility

More Canonical Go Structures

A lot of time working with a goprotobuf struct will lead you to a place where you create another struct that is easier to work with and then have a function to copy the values between the two structs.
You might also find that basic structs that started their life as part of an API need to be sent over the wire. With gob, you could just send it. With goprotobuf, you need to make a parallel struct.
Gogoprotobuf tries to fix these problems with the nullable, embed, customtype and customname field extensions.

  - nullable, if false, a field is generated without a pointer (see warning below).
  - embed, if true, the field is generated as an embedded field.
  - customtype, It works with the Marshal and Unmarshal methods, to allow you to have your own types in your struct, but marshal to bytes. For example, custom.Uuid or custom.Fixed128
  - customname (beta), Changes the generated fieldname. This is especially useful when generated methods conflict with fieldnames.
  - casttype (beta), Changes the generated fieldtype.  All generated code assumes that this type is castable to the protocol buffer field type.  It does not work for structs or enums.
  - castkey (beta), Changes the generated fieldtype for a map key.  All generated code assumes that this type is castable to the protocol buffer field type.  Only supported on maps.
  - castvalue (beta), Changes the generated fieldtype for a map value.  All generated code assumes that this type is castable to the protocol buffer field type.  Only supported on maps.

Warning about nullable: According to the Protocol Buffer specification, you should be able to tell whether a field is set or unset. With the option nullable=false this feature is lost, since your non-nullable fields will always be set. It can be seen as a layer on top of Protocol Buffers, where before and after marshalling all non-nullable fields are set and they cannot be unset.

Let us look at:

	github.com/gogo/protobuf/test/example/example.proto

for a quicker overview.

The following message:

  package test;

  import "github.com/gogo/protobuf/gogoproto/gogo.proto";

	message A {
		optional string Description = 1 [(gogoproto.nullable) = false];
		optional int64 Number = 2 [(gogoproto.nullable) = false];
		optional bytes Id = 3 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uuid", (gogoproto.nullable) = false];
	}

Will generate a go struct which looks a lot like this:

	type A struct {
		Description string
		Number      int64
		Id          github_com_gogo_protobuf_test_custom.Uuid
	}

You will see there are no pointers, since all fields are non-nullable.
You will also see a custom type which marshals to a string.
Be warned it is your responsibility to test your custom types thoroughly.
You should think of every possible empty and nil case for your marshaling, unmarshaling and size methods.

Next we will embed the message A in message B.

	message B {
		optional A A = 1 [(gogoproto.nullable) = false, (gogoproto.embed) = true];
		repeated bytes G = 2 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uint128", (gogoproto.nullable) = false];
	}

See below that A is embedded in B.

	type B struct {
		A
		G []github_com_gogo_protobuf_test_custom.Uint128
	}

Also see the repeated custom type.

	type Uint128 [2]uint64

Next we will create a custom name for one of our fields.

	message C {
		optional int64 size = 1 [(gogoproto.customname) = "MySize"];
	}

See below that the field's name is MySize and not Size.

	type C struct {
		MySize		*int64
	}

The is useful when having a protocol buffer message with a field name which conflicts with a generated method.
As an example, having a field name size and using the sizer plugin to generate a Size method will cause a go compiler error.
Using customname you can fix this error without changing the field name.
This is typically useful when working with a protocol buffer that was designed before these methods and/or the go language were avialable.

Gogoprotobuf also has some more subtle changes, these could be changed back:

  - the generated package name for imports do not have the extra /filename.pb,
  but are actually the imports specified in the .proto file.

Gogoprotobuf also has lost some features which should be brought back with time:

  - Marshalling and unmarshalling with reflect and without the unsafe package,
  this requires work in pointer_reflect.go

Why does nullable break protocol buffer specifications:

The protocol buffer specification states, somewhere, that you should be able to tell whether a
field is set or unset.  With the option nullable=false this feature is lost,
since your non-nullable fields will always be set.  It can be seen as a layer on top of
protocol buffers, where before and after marshalling all non-nullable fields are set
and they cannot be unset.

Goprotobuf Compatibility:

Gogoprotobuf is compatible with Goprotobuf, because it is compatible with protocol buffers.
Gogoprotobuf generates the same code as goprotobuf if no extensions are used.
The enumprefix, getters and stringer extensions can be used to remove some of the unnecessary code generated by goprotobuf:

  - gogoproto_import, if false, the generated code imports github.com/golang/protobuf/proto instead of github.com/gogo/protobuf/proto.
  - goproto_enum_prefix, if false, generates the enum constant names without the messagetype prefix
  - goproto_enum_stringer (experimental), if false, the enum is generated without the default string method, this is useful for rather using enum_stringer, or allowing you to write your own string method.
  - goproto_getters, if false, the message is generated without get methods, this is useful when you would rather want to use face
  - goproto_stringer, if false, the message is generated without the default string method, this is useful for rather using stringer, or allowing you to write your own string method.
  - goproto_extensions_map (beta), if false, the extensions field is generated as type []byte instead of type map[int32]proto.Extension
  - goproto_unrecognized (beta), if false, XXX_unrecognized field is not generated. This is useful in conjunction with gogoproto.nullable=false, to generate structures completely devoid of pointers and reduce GC pressure at the cost of losing information about unrecognized fields.
  - goproto_registration (beta), if true, the generated files will register all messages and types against both gogo/protobuf and golang/protobuf. This is necessary when using third-party packages which read registrations from golang/protobuf (such as the grpc-gateway).

Less Typing and Peace of Mind is explained in their specific plugin folders godoc:

	- github.com/gogo/protobuf/plugin/<extension_name>

If you do not use any of these extension the code that is generated
will be the same as if goprotobuf has generated it.

The most complete way to see examples is to look at

	github.com/gogo/protobuf/test/thetest.proto

Gogoprototest is a seperate project,
because we want to keep gogoprotobuf independent of goprotobuf,
but we still want to test it thoroughly.

*/
package gogoproto
   0707010000063A000081A4000000000000000000000001645E367C00008172000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.go  // Code generated by protoc-gen-gogo. DO NOT EDIT.
// source: gogo.proto

package gogoproto

import (
	fmt "fmt"
	proto "github.com/gogo/protobuf/proto"
	descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package

var E_GoprotoEnumPrefix = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.EnumOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         62001,
	Name:          "gogoproto.goproto_enum_prefix",
	Tag:           "varint,62001,opt,name=goproto_enum_prefix",
	Filename:      "gogo.proto",
}

var E_GoprotoEnumStringer = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.EnumOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         62021,
	Name:          "gogoproto.goproto_enum_stringer",
	Tag:           "varint,62021,opt,name=goproto_enum_stringer",
	Filename:      "gogo.proto",
}

var E_EnumStringer = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.EnumOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         62022,
	Name:          "gogoproto.enum_stringer",
	Tag:           "varint,62022,opt,name=enum_stringer",
	Filename:      "gogo.proto",
}

var E_EnumCustomname = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.EnumOptions)(nil),
	ExtensionType: (*string)(nil),
	Field:         62023,
	Name:          "gogoproto.enum_customname",
	Tag:           "bytes,62023,opt,name=enum_customname",
	Filename:      "gogo.proto",
}

var E_Enumdecl = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.EnumOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         62024,
	Name:          "gogoproto.enumdecl",
	Tag:           "varint,62024,opt,name=enumdecl",
	Filename:      "gogo.proto",
}

var E_EnumvalueCustomname = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.EnumValueOptions)(nil),
	ExtensionType: (*string)(nil),
	Field:         66001,
	Name:          "gogoproto.enumvalue_customname",
	Tag:           "bytes,66001,opt,name=enumvalue_customname",
	Filename:      "gogo.proto",
}

var E_GoprotoGettersAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63001,
	Name:          "gogoproto.goproto_getters_all",
	Tag:           "varint,63001,opt,name=goproto_getters_all",
	Filename:      "gogo.proto",
}

var E_GoprotoEnumPrefixAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63002,
	Name:          "gogoproto.goproto_enum_prefix_all",
	Tag:           "varint,63002,opt,name=goproto_enum_prefix_all",
	Filename:      "gogo.proto",
}

var E_GoprotoStringerAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63003,
	Name:          "gogoproto.goproto_stringer_all",
	Tag:           "varint,63003,opt,name=goproto_stringer_all",
	Filename:      "gogo.proto",
}

var E_VerboseEqualAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63004,
	Name:          "gogoproto.verbose_equal_all",
	Tag:           "varint,63004,opt,name=verbose_equal_all",
	Filename:      "gogo.proto",
}

var E_FaceAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63005,
	Name:          "gogoproto.face_all",
	Tag:           "varint,63005,opt,name=face_all",
	Filename:      "gogo.proto",
}

var E_GostringAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63006,
	Name:          "gogoproto.gostring_all",
	Tag:           "varint,63006,opt,name=gostring_all",
	Filename:      "gogo.proto",
}

var E_PopulateAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63007,
	Name:          "gogoproto.populate_all",
	Tag:           "varint,63007,opt,name=populate_all",
	Filename:      "gogo.proto",
}

var E_StringerAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63008,
	Name:          "gogoproto.stringer_all",
	Tag:           "varint,63008,opt,name=stringer_all",
	Filename:      "gogo.proto",
}

var E_OnlyoneAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63009,
	Name:          "gogoproto.onlyone_all",
	Tag:           "varint,63009,opt,name=onlyone_all",
	Filename:      "gogo.proto",
}

var E_EqualAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63013,
	Name:          "gogoproto.equal_all",
	Tag:           "varint,63013,opt,name=equal_all",
	Filename:      "gogo.proto",
}

var E_DescriptionAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63014,
	Name:          "gogoproto.description_all",
	Tag:           "varint,63014,opt,name=description_all",
	Filename:      "gogo.proto",
}

var E_TestgenAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63015,
	Name:          "gogoproto.testgen_all",
	Tag:           "varint,63015,opt,name=testgen_all",
	Filename:      "gogo.proto",
}

var E_BenchgenAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63016,
	Name:          "gogoproto.benchgen_all",
	Tag:           "varint,63016,opt,name=benchgen_all",
	Filename:      "gogo.proto",
}

var E_MarshalerAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63017,
	Name:          "gogoproto.marshaler_all",
	Tag:           "varint,63017,opt,name=marshaler_all",
	Filename:      "gogo.proto",
}

var E_UnmarshalerAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63018,
	Name:          "gogoproto.unmarshaler_all",
	Tag:           "varint,63018,opt,name=unmarshaler_all",
	Filename:      "gogo.proto",
}

var E_StableMarshalerAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63019,
	Name:          "gogoproto.stable_marshaler_all",
	Tag:           "varint,63019,opt,name=stable_marshaler_all",
	Filename:      "gogo.proto",
}

var E_SizerAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63020,
	Name:          "gogoproto.sizer_all",
	Tag:           "varint,63020,opt,name=sizer_all",
	Filename:      "gogo.proto",
}

var E_GoprotoEnumStringerAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63021,
	Name:          "gogoproto.goproto_enum_stringer_all",
	Tag:           "varint,63021,opt,name=goproto_enum_stringer_all",
	Filename:      "gogo.proto",
}

var E_EnumStringerAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63022,
	Name:          "gogoproto.enum_stringer_all",
	Tag:           "varint,63022,opt,name=enum_stringer_all",
	Filename:      "gogo.proto",
}

var E_UnsafeMarshalerAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63023,
	Name:          "gogoproto.unsafe_marshaler_all",
	Tag:           "varint,63023,opt,name=unsafe_marshaler_all",
	Filename:      "gogo.proto",
}

var E_UnsafeUnmarshalerAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63024,
	Name:          "gogoproto.unsafe_unmarshaler_all",
	Tag:           "varint,63024,opt,name=unsafe_unmarshaler_all",
	Filename:      "gogo.proto",
}

var E_GoprotoExtensionsMapAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63025,
	Name:          "gogoproto.goproto_extensions_map_all",
	Tag:           "varint,63025,opt,name=goproto_extensions_map_all",
	Filename:      "gogo.proto",
}

var E_GoprotoUnrecognizedAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63026,
	Name:          "gogoproto.goproto_unrecognized_all",
	Tag:           "varint,63026,opt,name=goproto_unrecognized_all",
	Filename:      "gogo.proto",
}

var E_GogoprotoImport = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63027,
	Name:          "gogoproto.gogoproto_import",
	Tag:           "varint,63027,opt,name=gogoproto_import",
	Filename:      "gogo.proto",
}

var E_ProtosizerAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63028,
	Name:          "gogoproto.protosizer_all",
	Tag:           "varint,63028,opt,name=protosizer_all",
	Filename:      "gogo.proto",
}

var E_CompareAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63029,
	Name:          "gogoproto.compare_all",
	Tag:           "varint,63029,opt,name=compare_all",
	Filename:      "gogo.proto",
}

var E_TypedeclAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63030,
	Name:          "gogoproto.typedecl_all",
	Tag:           "varint,63030,opt,name=typedecl_all",
	Filename:      "gogo.proto",
}

var E_EnumdeclAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63031,
	Name:          "gogoproto.enumdecl_all",
	Tag:           "varint,63031,opt,name=enumdecl_all",
	Filename:      "gogo.proto",
}

var E_GoprotoRegistration = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63032,
	Name:          "gogoproto.goproto_registration",
	Tag:           "varint,63032,opt,name=goproto_registration",
	Filename:      "gogo.proto",
}

var E_MessagenameAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63033,
	Name:          "gogoproto.messagename_all",
	Tag:           "varint,63033,opt,name=messagename_all",
	Filename:      "gogo.proto",
}

var E_GoprotoSizecacheAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63034,
	Name:          "gogoproto.goproto_sizecache_all",
	Tag:           "varint,63034,opt,name=goproto_sizecache_all",
	Filename:      "gogo.proto",
}

var E_GoprotoUnkeyedAll = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FileOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         63035,
	Name:          "gogoproto.goproto_unkeyed_all",
	Tag:           "varint,63035,opt,name=goproto_unkeyed_all",
	Filename:      "gogo.proto",
}

var E_GoprotoGetters = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         64001,
	Name:          "gogoproto.goproto_getters",
	Tag:           "varint,64001,opt,name=goproto_getters",
	Filename:      "gogo.proto",
}

var E_GoprotoStringer = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         64003,
	Name:          "gogoproto.goproto_stringer",
	Tag:           "varint,64003,opt,name=goproto_stringer",
	Filename:      "gogo.proto",
}

var E_VerboseEqual = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         64004,
	Name:          "gogoproto.verbose_equal",
	Tag:           "varint,64004,opt,name=verbose_equal",
	Filename:      "gogo.proto",
}

var E_Face = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         64005,
	Name:          "gogoproto.face",
	Tag:           "varint,64005,opt,name=face",
	Filename:      "gogo.proto",
}

var E_Gostring = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         64006,
	Name:          "gogoproto.gostring",
	Tag:           "varint,64006,opt,name=gostring",
	Filename:      "gogo.proto",
}

var E_Populate = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         64007,
	Name:          "gogoproto.populate",
	Tag:           "varint,64007,opt,name=populate",
	Filename:      "gogo.proto",
}

var E_Stringer = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         67008,
	Name:          "gogoproto.stringer",
	Tag:           "varint,67008,opt,name=stringer",
	Filename:      "gogo.proto",
}

var E_Onlyone = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         64009,
	Name:          "gogoproto.onlyone",
	Tag:           "varint,64009,opt,name=onlyone",
	Filename:      "gogo.proto",
}

var E_Equal = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         64013,
	Name:          "gogoproto.equal",
	Tag:           "varint,64013,opt,name=equal",
	Filename:      "gogo.proto",
}

var E_Description = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         64014,
	Name:          "gogoproto.description",
	Tag:           "varint,64014,opt,name=description",
	Filename:      "gogo.proto",
}

var E_Testgen = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         64015,
	Name:          "gogoproto.testgen",
	Tag:           "varint,64015,opt,name=testgen",
	Filename:      "gogo.proto",
}

var E_Benchgen = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         64016,
	Name:          "gogoproto.benchgen",
	Tag:           "varint,64016,opt,name=benchgen",
	Filename:      "gogo.proto",
}

var E_Marshaler = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         64017,
	Name:          "gogoproto.marshaler",
	Tag:           "varint,64017,opt,name=marshaler",
	Filename:      "gogo.proto",
}

var E_Unmarshaler = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         64018,
	Name:          "gogoproto.unmarshaler",
	Tag:           "varint,64018,opt,name=unmarshaler",
	Filename:      "gogo.proto",
}

var E_StableMarshaler = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         64019,
	Name:          "gogoproto.stable_marshaler",
	Tag:           "varint,64019,opt,name=stable_marshaler",
	Filename:      "gogo.proto",
}

var E_Sizer = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         64020,
	Name:          "gogoproto.sizer",
	Tag:           "varint,64020,opt,name=sizer",
	Filename:      "gogo.proto",
}

var E_UnsafeMarshaler = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         64023,
	Name:          "gogoproto.unsafe_marshaler",
	Tag:           "varint,64023,opt,name=unsafe_marshaler",
	Filename:      "gogo.proto",
}

var E_UnsafeUnmarshaler = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         64024,
	Name:          "gogoproto.unsafe_unmarshaler",
	Tag:           "varint,64024,opt,name=unsafe_unmarshaler",
	Filename:      "gogo.proto",
}

var E_GoprotoExtensionsMap = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         64025,
	Name:          "gogoproto.goproto_extensions_map",
	Tag:           "varint,64025,opt,name=goproto_extensions_map",
	Filename:      "gogo.proto",
}

var E_GoprotoUnrecognized = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         64026,
	Name:          "gogoproto.goproto_unrecognized",
	Tag:           "varint,64026,opt,name=goproto_unrecognized",
	Filename:      "gogo.proto",
}

var E_Protosizer = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         64028,
	Name:          "gogoproto.protosizer",
	Tag:           "varint,64028,opt,name=protosizer",
	Filename:      "gogo.proto",
}

var E_Compare = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         64029,
	Name:          "gogoproto.compare",
	Tag:           "varint,64029,opt,name=compare",
	Filename:      "gogo.proto",
}

var E_Typedecl = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         64030,
	Name:          "gogoproto.typedecl",
	Tag:           "varint,64030,opt,name=typedecl",
	Filename:      "gogo.proto",
}

var E_Messagename = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         64033,
	Name:          "gogoproto.messagename",
	Tag:           "varint,64033,opt,name=messagename",
	Filename:      "gogo.proto",
}

var E_GoprotoSizecache = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         64034,
	Name:          "gogoproto.goproto_sizecache",
	Tag:           "varint,64034,opt,name=goproto_sizecache",
	Filename:      "gogo.proto",
}

var E_GoprotoUnkeyed = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         64035,
	Name:          "gogoproto.goproto_unkeyed",
	Tag:           "varint,64035,opt,name=goproto_unkeyed",
	Filename:      "gogo.proto",
}

var E_Nullable = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FieldOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         65001,
	Name:          "gogoproto.nullable",
	Tag:           "varint,65001,opt,name=nullable",
	Filename:      "gogo.proto",
}

var E_Embed = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FieldOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         65002,
	Name:          "gogoproto.embed",
	Tag:           "varint,65002,opt,name=embed",
	Filename:      "gogo.proto",
}

var E_Customtype = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FieldOptions)(nil),
	ExtensionType: (*string)(nil),
	Field:         65003,
	Name:          "gogoproto.customtype",
	Tag:           "bytes,65003,opt,name=customtype",
	Filename:      "gogo.proto",
}

var E_Customname = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FieldOptions)(nil),
	ExtensionType: (*string)(nil),
	Field:         65004,
	Name:          "gogoproto.customname",
	Tag:           "bytes,65004,opt,name=customname",
	Filename:      "gogo.proto",
}

var E_Jsontag = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FieldOptions)(nil),
	ExtensionType: (*string)(nil),
	Field:         65005,
	Name:          "gogoproto.jsontag",
	Tag:           "bytes,65005,opt,name=jsontag",
	Filename:      "gogo.proto",
}

var E_Moretags = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FieldOptions)(nil),
	ExtensionType: (*string)(nil),
	Field:         65006,
	Name:          "gogoproto.moretags",
	Tag:           "bytes,65006,opt,name=moretags",
	Filename:      "gogo.proto",
}

var E_Casttype = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FieldOptions)(nil),
	ExtensionType: (*string)(nil),
	Field:         65007,
	Name:          "gogoproto.casttype",
	Tag:           "bytes,65007,opt,name=casttype",
	Filename:      "gogo.proto",
}

var E_Castkey = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FieldOptions)(nil),
	ExtensionType: (*string)(nil),
	Field:         65008,
	Name:          "gogoproto.castkey",
	Tag:           "bytes,65008,opt,name=castkey",
	Filename:      "gogo.proto",
}

var E_Castvalue = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FieldOptions)(nil),
	ExtensionType: (*string)(nil),
	Field:         65009,
	Name:          "gogoproto.castvalue",
	Tag:           "bytes,65009,opt,name=castvalue",
	Filename:      "gogo.proto",
}

var E_Stdtime = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FieldOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         65010,
	Name:          "gogoproto.stdtime",
	Tag:           "varint,65010,opt,name=stdtime",
	Filename:      "gogo.proto",
}

var E_Stdduration = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FieldOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         65011,
	Name:          "gogoproto.stdduration",
	Tag:           "varint,65011,opt,name=stdduration",
	Filename:      "gogo.proto",
}

var E_Wktpointer = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.FieldOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         65012,
	Name:          "gogoproto.wktpointer",
	Tag:           "varint,65012,opt,name=wktpointer",
	Filename:      "gogo.proto",
}

func init() {
	proto.RegisterExtension(E_GoprotoEnumPrefix)
	proto.RegisterExtension(E_GoprotoEnumStringer)
	proto.RegisterExtension(E_EnumStringer)
	proto.RegisterExtension(E_EnumCustomname)
	proto.RegisterExtension(E_Enumdecl)
	proto.RegisterExtension(E_EnumvalueCustomname)
	proto.RegisterExtension(E_GoprotoGettersAll)
	proto.RegisterExtension(E_GoprotoEnumPrefixAll)
	proto.RegisterExtension(E_GoprotoStringerAll)
	proto.RegisterExtension(E_VerboseEqualAll)
	proto.RegisterExtension(E_FaceAll)
	proto.RegisterExtension(E_GostringAll)
	proto.RegisterExtension(E_PopulateAll)
	proto.RegisterExtension(E_StringerAll)
	proto.RegisterExtension(E_OnlyoneAll)
	proto.RegisterExtension(E_EqualAll)
	proto.RegisterExtension(E_DescriptionAll)
	proto.RegisterExtension(E_TestgenAll)
	proto.RegisterExtension(E_BenchgenAll)
	proto.RegisterExtension(E_MarshalerAll)
	proto.RegisterExtension(E_UnmarshalerAll)
	proto.RegisterExtension(E_StableMarshalerAll)
	proto.RegisterExtension(E_SizerAll)
	proto.RegisterExtension(E_GoprotoEnumStringerAll)
	proto.RegisterExtension(E_EnumStringerAll)
	proto.RegisterExtension(E_UnsafeMarshalerAll)
	proto.RegisterExtension(E_UnsafeUnmarshalerAll)
	proto.RegisterExtension(E_GoprotoExtensionsMapAll)
	proto.RegisterExtension(E_GoprotoUnrecognizedAll)
	proto.RegisterExtension(E_GogoprotoImport)
	proto.RegisterExtension(E_ProtosizerAll)
	proto.RegisterExtension(E_CompareAll)
	proto.RegisterExtension(E_TypedeclAll)
	proto.RegisterExtension(E_EnumdeclAll)
	proto.RegisterExtension(E_GoprotoRegistration)
	proto.RegisterExtension(E_MessagenameAll)
	proto.RegisterExtension(E_GoprotoSizecacheAll)
	proto.RegisterExtension(E_GoprotoUnkeyedAll)
	proto.RegisterExtension(E_GoprotoGetters)
	proto.RegisterExtension(E_GoprotoStringer)
	proto.RegisterExtension(E_VerboseEqual)
	proto.RegisterExtension(E_Face)
	proto.RegisterExtension(E_Gostring)
	proto.RegisterExtension(E_Populate)
	proto.RegisterExtension(E_Stringer)
	proto.RegisterExtension(E_Onlyone)
	proto.RegisterExtension(E_Equal)
	proto.RegisterExtension(E_Description)
	proto.RegisterExtension(E_Testgen)
	proto.RegisterExtension(E_Benchgen)
	proto.RegisterExtension(E_Marshaler)
	proto.RegisterExtension(E_Unmarshaler)
	proto.RegisterExtension(E_StableMarshaler)
	proto.RegisterExtension(E_Sizer)
	proto.RegisterExtension(E_UnsafeMarshaler)
	proto.RegisterExtension(E_UnsafeUnmarshaler)
	proto.RegisterExtension(E_GoprotoExtensionsMap)
	proto.RegisterExtension(E_GoprotoUnrecognized)
	proto.RegisterExtension(E_Protosizer)
	proto.RegisterExtension(E_Compare)
	proto.RegisterExtension(E_Typedecl)
	proto.RegisterExtension(E_Messagename)
	proto.RegisterExtension(E_GoprotoSizecache)
	proto.RegisterExtension(E_GoprotoUnkeyed)
	proto.RegisterExtension(E_Nullable)
	proto.RegisterExtension(E_Embed)
	proto.RegisterExtension(E_Customtype)
	proto.RegisterExtension(E_Customname)
	proto.RegisterExtension(E_Jsontag)
	proto.RegisterExtension(E_Moretags)
	proto.RegisterExtension(E_Casttype)
	proto.RegisterExtension(E_Castkey)
	proto.RegisterExtension(E_Castvalue)
	proto.RegisterExtension(E_Stdtime)
	proto.RegisterExtension(E_Stdduration)
	proto.RegisterExtension(E_Wktpointer)
}

func init() { proto.RegisterFile("gogo.proto", fileDescriptor_592445b5231bc2b9) }

var fileDescriptor_592445b5231bc2b9 = []byte{
	// 1328 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x98, 0x49, 0x6f, 0x1c, 0x45,
	0x14, 0x80, 0x85, 0x48, 0x64, 0x4f, 0x79, 0x8b, 0xc7, 0xc6, 0x84, 0x08, 0x44, 0xe0, 0xc4, 0xc9,
	0x3e, 0x45, 0x28, 0x65, 0x45, 0x96, 0x63, 0x39, 0x56, 0x10, 0x0e, 0xc6, 0x89, 0xc3, 0x76, 0x18,
	0xf5, 0xf4, 0x94, 0xdb, 0x8d, 0xbb, 0xbb, 0x9a, 0xee, 0xea, 0x10, 0xe7, 0x86, 0xc2, 0x22, 0x84,
	0xd8, 0x91, 0x20, 0x21, 0x09, 0x04, 0xc4, 0xbe, 0x86, 0x7d, 0xb9, 0x70, 0x61, 0xb9, 0xf2, 0x1f,
	0xb8, 0x00, 0x66, 0xf7, 0xcd, 0x17, 0xf4, 0xba, 0xdf, 0xeb, 0xa9, 0x69, 0x8f, 0x54, 0x35, 0xb7,
	0xf6, 0xb8, 0xbe, 0x6f, 0xaa, 0xdf, 0xeb, 0x7a, 0xef, 0x4d, 0x33, 0xe6, 0x49, 0x4f, 0x4e, 0xc6,
	0x89, 0x54, 0xb2, 0x5e, 0x83, 0xeb, 0xfc, 0x72, 0xdf, 0x7e, 0x4f, 0x4a, 0x2f, 0x10, 0x53, 0xf9,
	0x5f, 0xcd, 0x6c, 0x75, 0xaa, 0x25, 0x52, 0x37, 0xf1, 0x63, 0x25, 0x93, 0x62, 0x31, 0x3f, 0xc6,
	0xc6, 0x70, 0x71, 0x43, 0x44, 0x59, 0xd8, 0x88, 0x13, 0xb1, 0xea, 0x9f, 0xae, 0x5f, 0x3f, 0x59,
	0x90, 0x93, 0x44, 0x4e, 0xce, 0x47, 0x59, 0x78, 0x47, 0xac, 0x7c, 0x19, 0xa5, 0x7b, 0xaf, 0xfc,
	0x72, 0xf5, 0xfe, 0xab, 0x6e, 0xe9, 0x5f, 0x1e, 0x45, 0x14, 0xfe, 0xb7, 0x94, 0x83, 0x7c, 0x99,
	0x5d, 0xd3, 0xe1, 0x4b, 0x55, 0xe2, 0x47, 0x9e, 0x48, 0x0c, 0xc6, 0xef, 0xd1, 0x38, 0xa6, 0x19,
	0x8f, 0x23, 0xca, 0xe7, 0xd8, 0x50, 0x2f, 0xae, 0x1f, 0xd0, 0x35, 0x28, 0x74, 0xc9, 0x02, 0x1b,
	0xc9, 0x25, 0x6e, 0x96, 0x2a, 0x19, 0x46, 0x4e, 0x28, 0x0c, 0x9a, 0x1f, 0x73, 0x4d, 0x6d, 0x79,
	0x18, 0xb0, 0xb9, 0x92, 0xe2, 0x9c, 0xf5, 0xc3, 0x27, 0x2d, 0xe1, 0x06, 0x06, 0xc3, 0x4f, 0xb8,
	0x91, 0x72, 0x3d, 0x3f, 0xc9, 0xc6, 0xe1, 0xfa, 0x94, 0x13, 0x64, 0x42, 0xdf, 0xc9, 0x4d, 0x5d,
	0x3d, 0x27, 0x61, 0x19, 0xc9, 0x7e, 0x3e, 0xbb, 0x2b, 0xdf, 0xce, 0x58, 0x29, 0xd0, 0xf6, 0xa4,
	0x65, 0xd1, 0x13, 0x4a, 0x89, 0x24, 0x6d, 0x38, 0x41, 0xb7, 0xed, 0x1d, 0xf1, 0x83, 0xd2, 0x78,
	0x6e, 0xb3, 0x33, 0x8b, 0x0b, 0x05, 0x39, 0x1b, 0x04, 0x7c, 0x85, 0x5d, 0xdb, 0xe5, 0xa9, 0xb0,
	0x70, 0x9e, 0x47, 0xe7, 0xf8, 0x8e, 0x27, 0x03, 0xb4, 0x4b, 0x8c, 0x3e, 0x2f, 0x73, 0x69, 0xe1,
	0x7c, 0x19, 0x9d, 0x75, 0x64, 0x29, 0xa5, 0x60, 0xbc, 0x8d, 0x8d, 0x9e, 0x12, 0x49, 0x53, 0xa6,
	0xa2, 0x21, 0x1e, 0xc8, 0x9c, 0xc0, 0x42, 0x77, 0x01, 0x75, 0x23, 0x08, 0xce, 0x03, 0x07, 0xae,
	0x83, 0xac, 0x7f, 0xd5, 0x71, 0x85, 0x85, 0xe2, 0x22, 0x2a, 0xfa, 0x60, 0x3d, 0xa0, 0xb3, 0x6c,
	0xd0, 0x93, 0xc5, 0x2d, 0x59, 0xe0, 0x97, 0x10, 0x1f, 0x20, 0x06, 0x15, 0xb1, 0x8c, 0xb3, 0xc0,
	0x51, 0x36, 0x3b, 0x78, 0x85, 0x14, 0xc4, 0xa0, 0xa2, 0x87, 0xb0, 0xbe, 0x4a, 0x8a, 0x54, 0x8b,
	0xe7, 0x0c, 0x1b, 0x90, 0x51, 0xb0, 0x21, 0x23, 0x9b, 0x4d, 0x5c, 0x46, 0x03, 0x43, 0x04, 0x04,
	0xd3, 0xac, 0x66, 0x9b, 0x88, 0x37, 0x36, 0xe9, 0x78, 0x50, 0x06, 0x16, 0xd8, 0x08, 0x15, 0x28,
	0x5f, 0x46, 0x16, 0x8a, 0x37, 0x51, 0x31, 0xac, 0x61, 0x78, 0x1b, 0x4a, 0xa4, 0xca, 0x13, 0x36,
	0x92, 0xb7, 0xe8, 0x36, 0x10, 0xc1, 0x50, 0x36, 0x45, 0xe4, 0xae, 0xd9, 0x19, 0xde, 0xa6, 0x50,
	0x12, 0x03, 0x8a, 0x39, 0x36, 0x14, 0x3a, 0x49, 0xba, 0xe6, 0x04, 0x56, 0xe9, 0x78, 0x07, 0x1d,
	0x83, 0x25, 0x84, 0x11, 0xc9, 0xa2, 0x5e, 0x34, 0xef, 0x52, 0x44, 0x34, 0x0c, 0x8f, 0x5e, 0xaa,
	0x9c, 0x66, 0x20, 0x1a, 0xbd, 0xd8, 0xde, 0xa3, 0xa3, 0x57, 0xb0, 0x8b, 0xba, 0x71, 0x9a, 0xd5,
	0x52, 0xff, 0x8c, 0x95, 0xe6, 0x7d, 0xca, 0x74, 0x0e, 0x00, 0x7c, 0x0f, 0xbb, 0xae, 0x6b, 0x9b,
	0xb0, 0x90, 0x7d, 0x80, 0xb2, 0x89, 0x2e, 0xad, 0x02, 0x4b, 0x42, 0xaf, 0xca, 0x0f, 0xa9, 0x24,
	0x88, 0x8a, 0x6b, 0x89, 0x8d, 0x67, 0x51, 0xea, 0xac, 0xf6, 0x16, 0xb5, 0x8f, 0x28, 0x6a, 0x05,
	0xdb, 0x11, 0xb5, 0x13, 0x6c, 0x02, 0x8d, 0xbd, 0xe5, 0xf5, 0x63, 0x2a, 0xac, 0x05, 0xbd, 0xd2,
	0x99, 0xdd, 0xfb, 0xd8, 0xbe, 0x32, 0x9c, 0xa7, 0x95, 0x88, 0x52, 0x60, 0x1a, 0xa1, 0x13, 0x5b,
	0x98, 0xaf, 0xa0, 0x99, 0x2a, 0xfe, 0x7c, 0x29, 0x58, 0x74, 0x62, 0x90, 0xdf, 0xcd, 0xf6, 0x92,
	0x3c, 0x8b, 0x12, 0xe1, 0x4a, 0x2f, 0xf2, 0xcf, 0x88, 0x96, 0x85, 0xfa, 0x93, 0x4a, 0xaa, 0x56,
	0x34, 0x1c, 0xcc, 0x47, 0xd9, 0x9e, 0x72, 0x56, 0x69, 0xf8, 0x61, 0x2c, 0x13, 0x65, 0x30, 0x7e,
	0x4a, 0x99, 0x2a, 0xb9, 0xa3, 0x39, 0xc6, 0xe7, 0xd9, 0x70, 0xfe, 0xa7, 0xed, 0x23, 0xf9, 0x19,
	0x8a, 0x86, 0xda, 0x14, 0x16, 0x0e, 0x57, 0x86, 0xb1, 0x93, 0xd8, 0xd4, 0xbf, 0xcf, 0xa9, 0x70,
	0x20, 0x82, 0x85, 0x43, 0x6d, 0xc4, 0x02, 0xba, 0xbd, 0x85, 0xe1, 0x0b, 0x2a, 0x1c, 0xc4, 0xa0,
	0x82, 0x06, 0x06, 0x0b, 0xc5, 0x97, 0xa4, 0x20, 0x06, 0x14, 0x77, 0xb6, 0x1b, 0x6d, 0x22, 0x3c,
	0x3f, 0x55, 0x89, 0x03, 0xab, 0x0d, 0xaa, 0xaf, 0x36, 0x3b, 0x87, 0xb0, 0x65, 0x0d, 0x85, 0x4a,
	0x14, 0x8a, 0x34, 0x75, 0x3c, 0x01, 0x13, 0x87, 0xc5, 0xc6, 0xbe, 0xa6, 0x4a, 0xa4, 0x61, 0xb0,
	0x37, 0x6d, 0x42, 0x84, 0xb0, 0xbb, 0x8e, 0xbb, 0x66, 0xa3, 0xfb, 0xa6, 0xb2, 0xb9, 0xe3, 0xc4,
	0x82, 0x53, 0x9b, 0x7f, 0xb2, 0x68, 0x5d, 0x6c, 0x58, 0x3d, 0x9d, 0xdf, 0x56, 0xe6, 0x9f, 0x95,
	0x82, 0x2c, 0x6a, 0xc8, 0x48, 0x65, 0x9e, 0xaa, 0xdf, 0xb8, 0xc3, 0xb5, 0x58, 0xdc, 0x17, 0xe9,
	0x1e, 0xda, 0xc2, 0xfb, 0xed, 0x1c, 0xa7, 0xf8, 0xed, 0xf0, 0x90, 0x77, 0x0e, 0x3d, 0x66, 0xd9,
	0xd9, 0xad, 0xf2, 0x39, 0xef, 0x98, 0x79, 0xf8, 0x11, 0x36, 0xd4, 0x31, 0xf0, 0x98, 0x55, 0x0f,
	0xa3, 0x6a, 0x50, 0x9f, 0x77, 0xf8, 0x01, 0xb6, 0x0b, 0x86, 0x17, 0x33, 0xfe, 0x08, 0xe2, 0xf9,
	0x72, 0x7e, 0x88, 0xf5, 0xd3, 0xd0, 0x62, 0x46, 0x1f, 0x45, 0xb4, 0x44, 0x00, 0xa7, 0x81, 0xc5,
	0x8c, 0x3f, 0x46, 0x38, 0x21, 0x80, 0xdb, 0x87, 0xf0, 0xbb, 0x27, 0x76, 0x61, 0xd3, 0xa1, 0xd8,
	0x4d, 0xb3, 0x3e, 0x9c, 0x54, 0xcc, 0xf4, 0xe3, 0xf8, 0xe5, 0x44, 0xf0, 0x5b, 0xd9, 0x6e, 0xcb,
	0x80, 0x3f, 0x89, 0x68, 0xb1, 0x9e, 0xcf, 0xb1, 0x01, 0x6d, 0x3a, 0x31, 0xe3, 0x4f, 0x21, 0xae,
	0x53, 0xb0, 0x75, 0x9c, 0x4e, 0xcc, 0x82, 0xa7, 0x69, 0xeb, 0x48, 0x40, 0xd8, 0x68, 0x30, 0x31,
	0xd3, 0xcf, 0x50, 0xd4, 0x09, 0xe1, 0x33, 0xac, 0x56, 0x36, 0x1b, 0x33, 0xff, 0x2c, 0xf2, 0x6d,
	0x06, 0x22, 0xa0, 0x35, 0x3b, 0xb3, 0xe2, 0x39, 0x8a, 0x80, 0x46, 0xc1, 0x31, 0xaa, 0x0e, 0x30,
	0x66, 0xd3, 0xf3, 0x74, 0x8c, 0x2a, 0xf3, 0x0b, 0x64, 0x33, 0xaf, 0xf9, 0x66, 0xc5, 0x0b, 0x94,
	0xcd, 0x7c, 0x3d, 0x6c, 0xa3, 0x3a, 0x11, 0x98, 0x1d, 0x2f, 0xd2, 0x36, 0x2a, 0x03, 0x01, 0x5f,
	0x62, 0xf5, 0x9d, 0xd3, 0x80, 0xd9, 0xf7, 0x12, 0xfa, 0x46, 0x77, 0x0c, 0x03, 0xfc, 0x2e, 0x36,
	0xd1, 0x7d, 0x12, 0x30, 0x5b, 0xcf, 0x6d, 0x55, 0x7e, 0xbb, 0xe9, 0x83, 0x00, 0x3f, 0xd1, 0x6e,
	0x29, 0xfa, 0x14, 0x60, 0xd6, 0x9e, 0xdf, 0xea, 0x2c, 0xdc, 0xfa, 0x10, 0xc0, 0x67, 0x19, 0x6b,
	0x37, 0x60, 0xb3, 0xeb, 0x02, 0xba, 0x34, 0x08, 0x8e, 0x06, 0xf6, 0x5f, 0x33, 0x7f, 0x91, 0x8e,
	0x06, 0x12, 0x70, 0x34, 0xa8, 0xf5, 0x9a, 0xe9, 0x4b, 0x74, 0x34, 0x08, 0x81, 0x27, 0x5b, 0xeb,
	0x6e, 0x66, 0xc3, 0x65, 0x7a, 0xb2, 0x35, 0x8a, 0x1f, 0x63, 0xa3, 0x3b, 0x1a, 0xa2, 0x59, 0xf5,
	0x1a, 0xaa, 0xf6, 0x54, 0xfb, 0xa1, 0xde, 0xbc, 0xb0, 0x19, 0x9a, 0x6d, 0xaf, 0x57, 0x9a, 0x17,
	0xf6, 0x42, 0x3e, 0xcd, 0xfa, 0xa3, 0x2c, 0x08, 0xe0, 0xf0, 0xd4, 0x6f, 0xe8, 0xd2, 0x4d, 0x45,
	0xd0, 0x22, 0xc5, 0xaf, 0xdb, 0x18, 0x1d, 0x02, 0xf8, 0x01, 0xb6, 0x5b, 0x84, 0x4d, 0xd1, 0x32,
	0x91, 0xbf, 0x6d, 0x53, 0xc1, 0x84, 0xd5, 0x7c, 0x86, 0xb1, 0xe2, 0xd5, 0x08, 0x84, 0xd9, 0xc4,
	0xfe, 0xbe, 0x5d, 0xbc, 0xa5, 0xd1, 0x90, 0xb6, 0x20, 0x4f, 0x8a, 0x41, 0xb0, 0xd9, 0x29, 0xc8,
	0x33, 0x72, 0x90, 0xf5, 0xdd, 0x9f, 0xca, 0x48, 0x39, 0x9e, 0x89, 0xfe, 0x03, 0x69, 0x5a, 0x0f,
	0x01, 0x0b, 0x65, 0x22, 0x94, 0xe3, 0xa5, 0x26, 0xf6, 0x4f, 0x64, 0x4b, 0x00, 0x60, 0xd7, 0x49,
	0x95, 0xcd, 0x7d, 0xff, 0x45, 0x30, 0x01, 0xb0, 0x69, 0xb8, 0x5e, 0x17, 0x1b, 0x26, 0xf6, 0x6f,
	0xda, 0x34, 0xae, 0xe7, 0x87, 0x58, 0x0d, 0x2e, 0xf3, 0xb7, 0x4a, 0x26, 0xf8, 0x1f, 0x84, 0xdb,
	0x04, 0x7c, 0x73, 0xaa, 0x5a, 0xca, 0x37, 0x07, 0xfb, 0x5f, 0xcc, 0x34, 0xad, 0xe7, 0xb3, 0x6c,
	0x20, 0x55, 0xad, 0x56, 0x86, 0xf3, 0xa9, 0x01, 0xff, 0x6f, 0xbb, 0x7c, 0x65, 0x51, 0x32, 0x90,
	0xed, 0x07, 0xd7, 0x55, 0x2c, 0xfd, 0x48, 0x89, 0xc4, 0x64, 0xd8, 0x42, 0x83, 0x86, 0x1c, 0x9e,
	0x67, 0x63, 0xae, 0x0c, 0xab, 0xdc, 0x61, 0xb6, 0x20, 0x17, 0xe4, 0x52, 0x5e, 0x67, 0xee, 0xbd,
	0xd9, 0xf3, 0xd5, 0x5a, 0xd6, 0x9c, 0x74, 0x65, 0x38, 0x05, 0xbf, 0x3c, 0xda, 0x2f, 0x54, 0xcb,
	0xdf, 0x21, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0x9c, 0xaf, 0x70, 0x4e, 0x83, 0x15, 0x00, 0x00,
}
  0707010000063B000081A4000000000000000000000001645E367C000004ED000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.golden  // Code generated by protoc-gen-go.
// source: gogo.proto
// DO NOT EDIT!

package gogoproto

import proto "github.com/gogo/protobuf/proto"
import json "encoding/json"
import math "math"
import google_protobuf "github.com/gogo/protobuf/protoc-gen-gogo/descriptor"

// Reference proto, json, and math imports to suppress error if they are not otherwise used.
var _ = proto.Marshal
var _ = &json.SyntaxError{}
var _ = math.Inf

var E_Nullable = &proto.ExtensionDesc{
	ExtendedType:  (*google_protobuf.FieldOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         51235,
	Name:          "gogoproto.nullable",
	Tag:           "varint,51235,opt,name=nullable",
}

var E_Embed = &proto.ExtensionDesc{
	ExtendedType:  (*google_protobuf.FieldOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         51236,
	Name:          "gogoproto.embed",
	Tag:           "varint,51236,opt,name=embed",
}

var E_Customtype = &proto.ExtensionDesc{
	ExtendedType:  (*google_protobuf.FieldOptions)(nil),
	ExtensionType: (*string)(nil),
	Field:         51237,
	Name:          "gogoproto.customtype",
	Tag:           "bytes,51237,opt,name=customtype",
}

func init() {
	proto.RegisterExtension(E_Nullable)
	proto.RegisterExtension(E_Embed)
	proto.RegisterExtension(E_Customtype)
}
   0707010000063C000081A4000000000000000000000001645E367C000012DF000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/gogoproto/gogo.proto  // Protocol Buffers for Go with Gadgets
//
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

syntax = "proto2";
package gogoproto;

import "google/protobuf/descriptor.proto";

option java_package = "com.google.protobuf";
option java_outer_classname = "GoGoProtos";
option go_package = "github.com/gogo/protobuf/gogoproto";

extend google.protobuf.EnumOptions {
	optional bool goproto_enum_prefix = 62001;
	optional bool goproto_enum_stringer = 62021;
	optional bool enum_stringer = 62022;
	optional string enum_customname = 62023;
	optional bool enumdecl = 62024;
}

extend google.protobuf.EnumValueOptions {
	optional string enumvalue_customname = 66001;
}

extend google.protobuf.FileOptions {
	optional bool goproto_getters_all = 63001;
	optional bool goproto_enum_prefix_all = 63002;
	optional bool goproto_stringer_all = 63003;
	optional bool verbose_equal_all = 63004;
	optional bool face_all = 63005;
	optional bool gostring_all = 63006;
	optional bool populate_all = 63007;
	optional bool stringer_all = 63008;
	optional bool onlyone_all = 63009;

	optional bool equal_all = 63013;
	optional bool description_all = 63014;
	optional bool testgen_all = 63015;
	optional bool benchgen_all = 63016;
	optional bool marshaler_all = 63017;
	optional bool unmarshaler_all = 63018;
	optional bool stable_marshaler_all = 63019;

	optional bool sizer_all = 63020;

	optional bool goproto_enum_stringer_all = 63021;
	optional bool enum_stringer_all = 63022;

	optional bool unsafe_marshaler_all = 63023;
	optional bool unsafe_unmarshaler_all = 63024;

	optional bool goproto_extensions_map_all = 63025;
	optional bool goproto_unrecognized_all = 63026;
	optional bool gogoproto_import = 63027;
	optional bool protosizer_all = 63028;
	optional bool compare_all = 63029;
    optional bool typedecl_all = 63030;
    optional bool enumdecl_all = 63031;

	optional bool goproto_registration = 63032;
	optional bool messagename_all = 63033;

	optional bool goproto_sizecache_all = 63034;
	optional bool goproto_unkeyed_all = 63035;
}

extend google.protobuf.MessageOptions {
	optional bool goproto_getters = 64001;
	optional bool goproto_stringer = 64003;
	optional bool verbose_equal = 64004;
	optional bool face = 64005;
	optional bool gostring = 64006;
	optional bool populate = 64007;
	optional bool stringer = 67008;
	optional bool onlyone = 64009;

	optional bool equal = 64013;
	optional bool description = 64014;
	optional bool testgen = 64015;
	optional bool benchgen = 64016;
	optional bool marshaler = 64017;
	optional bool unmarshaler = 64018;
	optional bool stable_marshaler = 64019;

	optional bool sizer = 64020;

	optional bool unsafe_marshaler = 64023;
	optional bool unsafe_unmarshaler = 64024;

	optional bool goproto_extensions_map = 64025;
	optional bool goproto_unrecognized = 64026;

	optional bool protosizer = 64028;
	optional bool compare = 64029;

	optional bool typedecl = 64030;

	optional bool messagename = 64033;

	optional bool goproto_sizecache = 64034;
	optional bool goproto_unkeyed = 64035;
}

extend google.protobuf.FieldOptions {
	optional bool nullable = 65001;
	optional bool embed = 65002;
	optional string customtype = 65003;
	optional string customname = 65004;
	optional string jsontag = 65005;
	optional string moretags = 65006;
	optional string casttype = 65007;
	optional string castkey = 65008;
	optional string castvalue = 65009;

	optional bool stdtime = 65010;
	optional bool stdduration = 65011;
	optional bool wktpointer = 65012;

}
 0707010000063D000081A4000000000000000000000001645E367C00003E37000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/gogoproto/helper.go   // Protocol Buffers for Go with Gadgets
//
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package gogoproto

import google_protobuf "github.com/gogo/protobuf/protoc-gen-gogo/descriptor"
import proto "github.com/gogo/protobuf/proto"

func IsEmbed(field *google_protobuf.FieldDescriptorProto) bool {
	return proto.GetBoolExtension(field.Options, E_Embed, false)
}

func IsNullable(field *google_protobuf.FieldDescriptorProto) bool {
	return proto.GetBoolExtension(field.Options, E_Nullable, true)
}

func IsStdTime(field *google_protobuf.FieldDescriptorProto) bool {
	return proto.GetBoolExtension(field.Options, E_Stdtime, false)
}

func IsStdDuration(field *google_protobuf.FieldDescriptorProto) bool {
	return proto.GetBoolExtension(field.Options, E_Stdduration, false)
}

func IsStdDouble(field *google_protobuf.FieldDescriptorProto) bool {
	return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.DoubleValue"
}

func IsStdFloat(field *google_protobuf.FieldDescriptorProto) bool {
	return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.FloatValue"
}

func IsStdInt64(field *google_protobuf.FieldDescriptorProto) bool {
	return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.Int64Value"
}

func IsStdUInt64(field *google_protobuf.FieldDescriptorProto) bool {
	return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.UInt64Value"
}

func IsStdInt32(field *google_protobuf.FieldDescriptorProto) bool {
	return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.Int32Value"
}

func IsStdUInt32(field *google_protobuf.FieldDescriptorProto) bool {
	return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.UInt32Value"
}

func IsStdBool(field *google_protobuf.FieldDescriptorProto) bool {
	return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.BoolValue"
}

func IsStdString(field *google_protobuf.FieldDescriptorProto) bool {
	return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.StringValue"
}

func IsStdBytes(field *google_protobuf.FieldDescriptorProto) bool {
	return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.BytesValue"
}

func IsStdType(field *google_protobuf.FieldDescriptorProto) bool {
	return (IsStdTime(field) || IsStdDuration(field) ||
		IsStdDouble(field) || IsStdFloat(field) ||
		IsStdInt64(field) || IsStdUInt64(field) ||
		IsStdInt32(field) || IsStdUInt32(field) ||
		IsStdBool(field) ||
		IsStdString(field) || IsStdBytes(field))
}

func IsWktPtr(field *google_protobuf.FieldDescriptorProto) bool {
	return proto.GetBoolExtension(field.Options, E_Wktpointer, false)
}

func NeedsNilCheck(proto3 bool, field *google_protobuf.FieldDescriptorProto) bool {
	nullable := IsNullable(field)
	if field.IsMessage() || IsCustomType(field) {
		return nullable
	}
	if proto3 {
		return false
	}
	return nullable || *field.Type == google_protobuf.FieldDescriptorProto_TYPE_BYTES
}

func IsCustomType(field *google_protobuf.FieldDescriptorProto) bool {
	typ := GetCustomType(field)
	if len(typ) > 0 {
		return true
	}
	return false
}

func IsCastType(field *google_protobuf.FieldDescriptorProto) bool {
	typ := GetCastType(field)
	if len(typ) > 0 {
		return true
	}
	return false
}

func IsCastKey(field *google_protobuf.FieldDescriptorProto) bool {
	typ := GetCastKey(field)
	if len(typ) > 0 {
		return true
	}
	return false
}

func IsCastValue(field *google_protobuf.FieldDescriptorProto) bool {
	typ := GetCastValue(field)
	if len(typ) > 0 {
		return true
	}
	return false
}

func HasEnumDecl(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool {
	return proto.GetBoolExtension(enum.Options, E_Enumdecl, proto.GetBoolExtension(file.Options, E_EnumdeclAll, true))
}

func HasTypeDecl(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
	return proto.GetBoolExtension(message.Options, E_Typedecl, proto.GetBoolExtension(file.Options, E_TypedeclAll, true))
}

func GetCustomType(field *google_protobuf.FieldDescriptorProto) string {
	if field == nil {
		return ""
	}
	if field.Options != nil {
		v, err := proto.GetExtension(field.Options, E_Customtype)
		if err == nil && v.(*string) != nil {
			return *(v.(*string))
		}
	}
	return ""
}

func GetCastType(field *google_protobuf.FieldDescriptorProto) string {
	if field == nil {
		return ""
	}
	if field.Options != nil {
		v, err := proto.GetExtension(field.Options, E_Casttype)
		if err == nil && v.(*string) != nil {
			return *(v.(*string))
		}
	}
	return ""
}

func GetCastKey(field *google_protobuf.FieldDescriptorProto) string {
	if field == nil {
		return ""
	}
	if field.Options != nil {
		v, err := proto.GetExtension(field.Options, E_Castkey)
		if err == nil && v.(*string) != nil {
			return *(v.(*string))
		}
	}
	return ""
}

func GetCastValue(field *google_protobuf.FieldDescriptorProto) string {
	if field == nil {
		return ""
	}
	if field.Options != nil {
		v, err := proto.GetExtension(field.Options, E_Castvalue)
		if err == nil && v.(*string) != nil {
			return *(v.(*string))
		}
	}
	return ""
}

func IsCustomName(field *google_protobuf.FieldDescriptorProto) bool {
	name := GetCustomName(field)
	if len(name) > 0 {
		return true
	}
	return false
}

func IsEnumCustomName(field *google_protobuf.EnumDescriptorProto) bool {
	name := GetEnumCustomName(field)
	if len(name) > 0 {
		return true
	}
	return false
}

func IsEnumValueCustomName(field *google_protobuf.EnumValueDescriptorProto) bool {
	name := GetEnumValueCustomName(field)
	if len(name) > 0 {
		return true
	}
	return false
}

func GetCustomName(field *google_protobuf.FieldDescriptorProto) string {
	if field == nil {
		return ""
	}
	if field.Options != nil {
		v, err := proto.GetExtension(field.Options, E_Customname)
		if err == nil && v.(*string) != nil {
			return *(v.(*string))
		}
	}
	return ""
}

func GetEnumCustomName(field *google_protobuf.EnumDescriptorProto) string {
	if field == nil {
		return ""
	}
	if field.Options != nil {
		v, err := proto.GetExtension(field.Options, E_EnumCustomname)
		if err == nil && v.(*string) != nil {
			return *(v.(*string))
		}
	}
	return ""
}

func GetEnumValueCustomName(field *google_protobuf.EnumValueDescriptorProto) string {
	if field == nil {
		return ""
	}
	if field.Options != nil {
		v, err := proto.GetExtension(field.Options, E_EnumvalueCustomname)
		if err == nil && v.(*string) != nil {
			return *(v.(*string))
		}
	}
	return ""
}

func GetJsonTag(field *google_protobuf.FieldDescriptorProto) *string {
	if field == nil {
		return nil
	}
	if field.Options != nil {
		v, err := proto.GetExtension(field.Options, E_Jsontag)
		if err == nil && v.(*string) != nil {
			return (v.(*string))
		}
	}
	return nil
}

func GetMoreTags(field *google_protobuf.FieldDescriptorProto) *string {
	if field == nil {
		return nil
	}
	if field.Options != nil {
		v, err := proto.GetExtension(field.Options, E_Moretags)
		if err == nil && v.(*string) != nil {
			return (v.(*string))
		}
	}
	return nil
}

type EnableFunc func(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool

func EnabledGoEnumPrefix(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool {
	return proto.GetBoolExtension(enum.Options, E_GoprotoEnumPrefix, proto.GetBoolExtension(file.Options, E_GoprotoEnumPrefixAll, true))
}

func EnabledGoStringer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
	return proto.GetBoolExtension(message.Options, E_GoprotoStringer, proto.GetBoolExtension(file.Options, E_GoprotoStringerAll, true))
}

func HasGoGetters(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
	return proto.GetBoolExtension(message.Options, E_GoprotoGetters, proto.GetBoolExtension(file.Options, E_GoprotoGettersAll, true))
}

func IsUnion(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
	return proto.GetBoolExtension(message.Options, E_Onlyone, proto.GetBoolExtension(file.Options, E_OnlyoneAll, false))
}

func HasGoString(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
	return proto.GetBoolExtension(message.Options, E_Gostring, proto.GetBoolExtension(file.Options, E_GostringAll, false))
}

func HasEqual(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
	return proto.GetBoolExtension(message.Options, E_Equal, proto.GetBoolExtension(file.Options, E_EqualAll, false))
}

func HasVerboseEqual(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
	return proto.GetBoolExtension(message.Options, E_VerboseEqual, proto.GetBoolExtension(file.Options, E_VerboseEqualAll, false))
}

func IsStringer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
	return proto.GetBoolExtension(message.Options, E_Stringer, proto.GetBoolExtension(file.Options, E_StringerAll, false))
}

func IsFace(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
	return proto.GetBoolExtension(message.Options, E_Face, proto.GetBoolExtension(file.Options, E_FaceAll, false))
}

func HasDescription(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
	return proto.GetBoolExtension(message.Options, E_Description, proto.GetBoolExtension(file.Options, E_DescriptionAll, false))
}

func HasPopulate(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
	return proto.GetBoolExtension(message.Options, E_Populate, proto.GetBoolExtension(file.Options, E_PopulateAll, false))
}

func HasTestGen(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
	return proto.GetBoolExtension(message.Options, E_Testgen, proto.GetBoolExtension(file.Options, E_TestgenAll, false))
}

func HasBenchGen(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
	return proto.GetBoolExtension(message.Options, E_Benchgen, proto.GetBoolExtension(file.Options, E_BenchgenAll, false))
}

func IsMarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
	return proto.GetBoolExtension(message.Options, E_Marshaler, proto.GetBoolExtension(file.Options, E_MarshalerAll, false))
}

func IsUnmarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
	return proto.GetBoolExtension(message.Options, E_Unmarshaler, proto.GetBoolExtension(file.Options, E_UnmarshalerAll, false))
}

func IsStableMarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
	return proto.GetBoolExtension(message.Options, E_StableMarshaler, proto.GetBoolExtension(file.Options, E_StableMarshalerAll, false))
}

func IsSizer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
	return proto.GetBoolExtension(message.Options, E_Sizer, proto.GetBoolExtension(file.Options, E_SizerAll, false))
}

func IsProtoSizer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
	return proto.GetBoolExtension(message.Options, E_Protosizer, proto.GetBoolExtension(file.Options, E_ProtosizerAll, false))
}

func IsGoEnumStringer(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool {
	return proto.GetBoolExtension(enum.Options, E_GoprotoEnumStringer, proto.GetBoolExtension(file.Options, E_GoprotoEnumStringerAll, true))
}

func IsEnumStringer(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool {
	return proto.GetBoolExtension(enum.Options, E_EnumStringer, proto.GetBoolExtension(file.Options, E_EnumStringerAll, false))
}

func IsUnsafeMarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
	return proto.GetBoolExtension(message.Options, E_UnsafeMarshaler, proto.GetBoolExtension(file.Options, E_UnsafeMarshalerAll, false))
}

func IsUnsafeUnmarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
	return proto.GetBoolExtension(message.Options, E_UnsafeUnmarshaler, proto.GetBoolExtension(file.Options, E_UnsafeUnmarshalerAll, false))
}

func HasExtensionsMap(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
	return proto.GetBoolExtension(message.Options, E_GoprotoExtensionsMap, proto.GetBoolExtension(file.Options, E_GoprotoExtensionsMapAll, true))
}

func HasUnrecognized(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
	return proto.GetBoolExtension(message.Options, E_GoprotoUnrecognized, proto.GetBoolExtension(file.Options, E_GoprotoUnrecognizedAll, true))
}

func IsProto3(file *google_protobuf.FileDescriptorProto) bool {
	return file.GetSyntax() == "proto3"
}

func ImportsGoGoProto(file *google_protobuf.FileDescriptorProto) bool {
	return proto.GetBoolExtension(file.Options, E_GogoprotoImport, true)
}

func HasCompare(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
	return proto.GetBoolExtension(message.Options, E_Compare, proto.GetBoolExtension(file.Options, E_CompareAll, false))
}

func RegistersGolangProto(file *google_protobuf.FileDescriptorProto) bool {
	return proto.GetBoolExtension(file.Options, E_GoprotoRegistration, false)
}

func HasMessageName(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
	return proto.GetBoolExtension(message.Options, E_Messagename, proto.GetBoolExtension(file.Options, E_MessagenameAll, false))
}

func HasSizecache(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
	return proto.GetBoolExtension(message.Options, E_GoprotoSizecache, proto.GetBoolExtension(file.Options, E_GoprotoSizecacheAll, true))
}

func HasUnkeyed(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
	return proto.GetBoolExtension(message.Options, E_GoprotoUnkeyed, proto.GetBoolExtension(file.Options, E_GoprotoUnkeyedAll, true))
}
 0707010000063E000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto 0707010000063F000081A4000000000000000000000001645E367C000006F9000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/Makefile    # Go support for Protocol Buffers - Google's data interchange format
#
# Copyright 2010 The Go Authors.  All rights reserved.
# https://github.com/golang/protobuf
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
#     * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#     * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
#     * Neither the name of Google Inc. nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

install:
	go install

test: install generate-test-pbs
	go test


generate-test-pbs:
	make install
	make -C test_proto
	make -C proto3_proto
	make
   07070100000640000081A4000000000000000000000001645E367C00001EEC000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/clone.go    // Go support for Protocol Buffers - Google's data interchange format
//
// Copyright 2011 The Go Authors.  All rights reserved.
// https://github.com/golang/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

// Protocol buffer deep copy and merge.
// TODO: RawMessage.

package proto

import (
	"fmt"
	"log"
	"reflect"
	"strings"
)

// Clone returns a deep copy of a protocol buffer.
func Clone(src Message) Message {
	in := reflect.ValueOf(src)
	if in.IsNil() {
		return src
	}
	out := reflect.New(in.Type().Elem())
	dst := out.Interface().(Message)
	Merge(dst, src)
	return dst
}

// Merger is the interface representing objects that can merge messages of the same type.
type Merger interface {
	// Merge merges src into this message.
	// Required and optional fields that are set in src will be set to that value in dst.
	// Elements of repeated fields will be appended.
	//
	// Merge may panic if called with a different argument type than the receiver.
	Merge(src Message)
}

// generatedMerger is the custom merge method that generated protos will have.
// We must add this method since a generate Merge method will conflict with
// many existing protos that have a Merge data field already defined.
type generatedMerger interface {
	XXX_Merge(src Message)
}

// Merge merges src into dst.
// Required and optional fields that are set in src will be set to that value in dst.
// Elements of repeated fields will be appended.
// Merge panics if src and dst are not the same type, or if dst is nil.
func Merge(dst, src Message) {
	if m, ok := dst.(Merger); ok {
		m.Merge(src)
		return
	}

	in := reflect.ValueOf(src)
	out := reflect.ValueOf(dst)
	if out.IsNil() {
		panic("proto: nil destination")
	}
	if in.Type() != out.Type() {
		panic(fmt.Sprintf("proto.Merge(%T, %T) type mismatch", dst, src))
	}
	if in.IsNil() {
		return // Merge from nil src is a noop
	}
	if m, ok := dst.(generatedMerger); ok {
		m.XXX_Merge(src)
		return
	}
	mergeStruct(out.Elem(), in.Elem())
}

func mergeStruct(out, in reflect.Value) {
	sprop := GetProperties(in.Type())
	for i := 0; i < in.NumField(); i++ {
		f := in.Type().Field(i)
		if strings.HasPrefix(f.Name, "XXX_") {
			continue
		}
		mergeAny(out.Field(i), in.Field(i), false, sprop.Prop[i])
	}

	if emIn, ok := in.Addr().Interface().(extensionsBytes); ok {
		emOut := out.Addr().Interface().(extensionsBytes)
		bIn := emIn.GetExtensions()
		bOut := emOut.GetExtensions()
		*bOut = append(*bOut, *bIn...)
	} else if emIn, err := extendable(in.Addr().Interface()); err == nil {
		emOut, _ := extendable(out.Addr().Interface())
		mIn, muIn := emIn.extensionsRead()
		if mIn != nil {
			mOut := emOut.extensionsWrite()
			muIn.Lock()
			mergeExtension(mOut, mIn)
			muIn.Unlock()
		}
	}

	uf := in.FieldByName("XXX_unrecognized")
	if !uf.IsValid() {
		return
	}
	uin := uf.Bytes()
	if len(uin) > 0 {
		out.FieldByName("XXX_unrecognized").SetBytes(append([]byte(nil), uin...))
	}
}

// mergeAny performs a merge between two values of the same type.
// viaPtr indicates whether the values were indirected through a pointer (implying proto2).
// prop is set if this is a struct field (it may be nil).
func mergeAny(out, in reflect.Value, viaPtr bool, prop *Properties) {
	if in.Type() == protoMessageType {
		if !in.IsNil() {
			if out.IsNil() {
				out.Set(reflect.ValueOf(Clone(in.Interface().(Message))))
			} else {
				Merge(out.Interface().(Message), in.Interface().(Message))
			}
		}
		return
	}
	switch in.Kind() {
	case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64,
		reflect.String, reflect.Uint32, reflect.Uint64:
		if !viaPtr && isProto3Zero(in) {
			return
		}
		out.Set(in)
	case reflect.Interface:
		// Probably a oneof field; copy non-nil values.
		if in.IsNil() {
			return
		}
		// Allocate destination if it is not set, or set to a different type.
		// Otherwise we will merge as normal.
		if out.IsNil() || out.Elem().Type() != in.Elem().Type() {
			out.Set(reflect.New(in.Elem().Elem().Type())) // interface -> *T -> T -> new(T)
		}
		mergeAny(out.Elem(), in.Elem(), false, nil)
	case reflect.Map:
		if in.Len() == 0 {
			return
		}
		if out.IsNil() {
			out.Set(reflect.MakeMap(in.Type()))
		}
		// For maps with value types of *T or []byte we need to deep copy each value.
		elemKind := in.Type().Elem().Kind()
		for _, key := range in.MapKeys() {
			var val reflect.Value
			switch elemKind {
			case reflect.Ptr:
				val = reflect.New(in.Type().Elem().Elem())
				mergeAny(val, in.MapIndex(key), false, nil)
			case reflect.Slice:
				val = in.MapIndex(key)
				val = reflect.ValueOf(append([]byte{}, val.Bytes()...))
			default:
				val = in.MapIndex(key)
			}
			out.SetMapIndex(key, val)
		}
	case reflect.Ptr:
		if in.IsNil() {
			return
		}
		if out.IsNil() {
			out.Set(reflect.New(in.Elem().Type()))
		}
		mergeAny(out.Elem(), in.Elem(), true, nil)
	case reflect.Slice:
		if in.IsNil() {
			return
		}
		if in.Type().Elem().Kind() == reflect.Uint8 {
			// []byte is a scalar bytes field, not a repeated field.

			// Edge case: if this is in a proto3 message, a zero length
			// bytes field is considered the zero value, and should not
			// be merged.
			if prop != nil && prop.proto3 && in.Len() == 0 {
				return
			}

			// Make a deep copy.
			// Append to []byte{} instead of []byte(nil) so that we never end up
			// with a nil result.
			out.SetBytes(append([]byte{}, in.Bytes()...))
			return
		}
		n := in.Len()
		if out.IsNil() {
			out.Set(reflect.MakeSlice(in.Type(), 0, n))
		}
		switch in.Type().Elem().Kind() {
		case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64,
			reflect.String, reflect.Uint32, reflect.Uint64:
			out.Set(reflect.AppendSlice(out, in))
		default:
			for i := 0; i < n; i++ {
				x := reflect.Indirect(reflect.New(in.Type().Elem()))
				mergeAny(x, in.Index(i), false, nil)
				out.Set(reflect.Append(out, x))
			}
		}
	case reflect.Struct:
		mergeStruct(out, in)
	default:
		// unknown type, so not a protocol buffer
		log.Printf("proto: don't know how to copy %v", in)
	}
}

func mergeExtension(out, in map[int32]Extension) {
	for extNum, eIn := range in {
		eOut := Extension{desc: eIn.desc}
		if eIn.value != nil {
			v := reflect.New(reflect.TypeOf(eIn.value)).Elem()
			mergeAny(v, reflect.ValueOf(eIn.value), false, nil)
			eOut.value = v.Interface()
		}
		if eIn.enc != nil {
			eOut.enc = make([]byte, len(eIn.enc))
			copy(eOut.enc, eIn.enc)
		}

		out[extNum] = eOut
	}
}
07070100000641000081A4000000000000000000000001645E367C00000660000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/custom_gogo.go  // Protocol Buffers for Go with Gadgets
//
// Copyright (c) 2018, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package proto

import "reflect"

type custom interface {
	Marshal() ([]byte, error)
	Unmarshal(data []byte) error
	Size() int
}

var customType = reflect.TypeOf((*custom)(nil)).Elem()
07070100000642000081A4000000000000000000000001645E367C00002CB8000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/decode.go   // Go support for Protocol Buffers - Google's data interchange format
//
// Copyright 2010 The Go Authors.  All rights reserved.
// https://github.com/golang/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package proto

/*
 * Routines for decoding protocol buffer data to construct in-memory representations.
 */

import (
	"errors"
	"fmt"
	"io"
)

// errOverflow is returned when an integer is too large to be represented.
var errOverflow = errors.New("proto: integer overflow")

// ErrInternalBadWireType is returned by generated code when an incorrect
// wire type is encountered. It does not get returned to user code.
var ErrInternalBadWireType = errors.New("proto: internal error: bad wiretype for oneof")

// DecodeVarint reads a varint-encoded integer from the slice.
// It returns the integer and the number of bytes consumed, or
// zero if there is not enough.
// This is the format for the
// int32, int64, uint32, uint64, bool, and enum
// protocol buffer types.
func DecodeVarint(buf []byte) (x uint64, n int) {
	for shift := uint(0); shift < 64; shift += 7 {
		if n >= len(buf) {
			return 0, 0
		}
		b := uint64(buf[n])
		n++
		x |= (b & 0x7F) << shift
		if (b & 0x80) == 0 {
			return x, n
		}
	}

	// The number is too large to represent in a 64-bit value.
	return 0, 0
}

func (p *Buffer) decodeVarintSlow() (x uint64, err error) {
	i := p.index
	l := len(p.buf)

	for shift := uint(0); shift < 64; shift += 7 {
		if i >= l {
			err = io.ErrUnexpectedEOF
			return
		}
		b := p.buf[i]
		i++
		x |= (uint64(b) & 0x7F) << shift
		if b < 0x80 {
			p.index = i
			return
		}
	}

	// The number is too large to represent in a 64-bit value.
	err = errOverflow
	return
}

// DecodeVarint reads a varint-encoded integer from the Buffer.
// This is the format for the
// int32, int64, uint32, uint64, bool, and enum
// protocol buffer types.
func (p *Buffer) DecodeVarint() (x uint64, err error) {
	i := p.index
	buf := p.buf

	if i >= len(buf) {
		return 0, io.ErrUnexpectedEOF
	} else if buf[i] < 0x80 {
		p.index++
		return uint64(buf[i]), nil
	} else if len(buf)-i < 10 {
		return p.decodeVarintSlow()
	}

	var b uint64
	// we already checked the first byte
	x = uint64(buf[i]) - 0x80
	i++

	b = uint64(buf[i])
	i++
	x += b << 7
	if b&0x80 == 0 {
		goto done
	}
	x -= 0x80 << 7

	b = uint64(buf[i])
	i++
	x += b << 14
	if b&0x80 == 0 {
		goto done
	}
	x -= 0x80 << 14

	b = uint64(buf[i])
	i++
	x += b << 21
	if b&0x80 == 0 {
		goto done
	}
	x -= 0x80 << 21

	b = uint64(buf[i])
	i++
	x += b << 28
	if b&0x80 == 0 {
		goto done
	}
	x -= 0x80 << 28

	b = uint64(buf[i])
	i++
	x += b << 35
	if b&0x80 == 0 {
		goto done
	}
	x -= 0x80 << 35

	b = uint64(buf[i])
	i++
	x += b << 42
	if b&0x80 == 0 {
		goto done
	}
	x -= 0x80 << 42

	b = uint64(buf[i])
	i++
	x += b << 49
	if b&0x80 == 0 {
		goto done
	}
	x -= 0x80 << 49

	b = uint64(buf[i])
	i++
	x += b << 56
	if b&0x80 == 0 {
		goto done
	}
	x -= 0x80 << 56

	b = uint64(buf[i])
	i++
	x += b << 63
	if b&0x80 == 0 {
		goto done
	}

	return 0, errOverflow

done:
	p.index = i
	return x, nil
}

// DecodeFixed64 reads a 64-bit integer from the Buffer.
// This is the format for the
// fixed64, sfixed64, and double protocol buffer types.
func (p *Buffer) DecodeFixed64() (x uint64, err error) {
	// x, err already 0
	i := p.index + 8
	if i < 0 || i > len(p.buf) {
		err = io.ErrUnexpectedEOF
		return
	}
	p.index = i

	x = uint64(p.buf[i-8])
	x |= uint64(p.buf[i-7]) << 8
	x |= uint64(p.buf[i-6]) << 16
	x |= uint64(p.buf[i-5]) << 24
	x |= uint64(p.buf[i-4]) << 32
	x |= uint64(p.buf[i-3]) << 40
	x |= uint64(p.buf[i-2]) << 48
	x |= uint64(p.buf[i-1]) << 56
	return
}

// DecodeFixed32 reads a 32-bit integer from the Buffer.
// This is the format for the
// fixed32, sfixed32, and float protocol buffer types.
func (p *Buffer) DecodeFixed32() (x uint64, err error) {
	// x, err already 0
	i := p.index + 4
	if i < 0 || i > len(p.buf) {
		err = io.ErrUnexpectedEOF
		return
	}
	p.index = i

	x = uint64(p.buf[i-4])
	x |= uint64(p.buf[i-3]) << 8
	x |= uint64(p.buf[i-2]) << 16
	x |= uint64(p.buf[i-1]) << 24
	return
}

// DecodeZigzag64 reads a zigzag-encoded 64-bit integer
// from the Buffer.
// This is the format used for the sint64 protocol buffer type.
func (p *Buffer) DecodeZigzag64() (x uint64, err error) {
	x, err = p.DecodeVarint()
	if err != nil {
		return
	}
	x = (x >> 1) ^ uint64((int64(x&1)<<63)>>63)
	return
}

// DecodeZigzag32 reads a zigzag-encoded 32-bit integer
// from  the Buffer.
// This is the format used for the sint32 protocol buffer type.
func (p *Buffer) DecodeZigzag32() (x uint64, err error) {
	x, err = p.DecodeVarint()
	if err != nil {
		return
	}
	x = uint64((uint32(x) >> 1) ^ uint32((int32(x&1)<<31)>>31))
	return
}

// DecodeRawBytes reads a count-delimited byte buffer from the Buffer.
// This is the format used for the bytes protocol buffer
// type and for embedded messages.
func (p *Buffer) DecodeRawBytes(alloc bool) (buf []byte, err error) {
	n, err := p.DecodeVarint()
	if err != nil {
		return nil, err
	}

	nb := int(n)
	if nb < 0 {
		return nil, fmt.Errorf("proto: bad byte length %d", nb)
	}
	end := p.index + nb
	if end < p.index || end > len(p.buf) {
		return nil, io.ErrUnexpectedEOF
	}

	if !alloc {
		// todo: check if can get more uses of alloc=false
		buf = p.buf[p.index:end]
		p.index += nb
		return
	}

	buf = make([]byte, nb)
	copy(buf, p.buf[p.index:])
	p.index += nb
	return
}

// DecodeStringBytes reads an encoded string from the Buffer.
// This is the format used for the proto2 string type.
func (p *Buffer) DecodeStringBytes() (s string, err error) {
	buf, err := p.DecodeRawBytes(false)
	if err != nil {
		return
	}
	return string(buf), nil
}

// Unmarshaler is the interface representing objects that can
// unmarshal themselves.  The argument points to data that may be
// overwritten, so implementations should not keep references to the
// buffer.
// Unmarshal implementations should not clear the receiver.
// Any unmarshaled data should be merged into the receiver.
// Callers of Unmarshal that do not want to retain existing data
// should Reset the receiver before calling Unmarshal.
type Unmarshaler interface {
	Unmarshal([]byte) error
}

// newUnmarshaler is the interface representing objects that can
// unmarshal themselves. The semantics are identical to Unmarshaler.
//
// This exists to support protoc-gen-go generated messages.
// The proto package will stop type-asserting to this interface in the future.
//
// DO NOT DEPEND ON THIS.
type newUnmarshaler interface {
	XXX_Unmarshal([]byte) error
}

// Unmarshal parses the protocol buffer representation in buf and places the
// decoded result in pb.  If the struct underlying pb does not match
// the data in buf, the results can be unpredictable.
//
// Unmarshal resets pb before starting to unmarshal, so any
// existing data in pb is always removed. Use UnmarshalMerge
// to preserve and append to existing data.
func Unmarshal(buf []byte, pb Message) error {
	pb.Reset()
	if u, ok := pb.(newUnmarshaler); ok {
		return u.XXX_Unmarshal(buf)
	}
	if u, ok := pb.(Unmarshaler); ok {
		return u.Unmarshal(buf)
	}
	return NewBuffer(buf).Unmarshal(pb)
}

// UnmarshalMerge parses the protocol buffer representation in buf and
// writes the decoded result to pb.  If the struct underlying pb does not match
// the data in buf, the results can be unpredictable.
//
// UnmarshalMerge merges into existing data in pb.
// Most code should use Unmarshal instead.
func UnmarshalMerge(buf []byte, pb Message) error {
	if u, ok := pb.(newUnmarshaler); ok {
		return u.XXX_Unmarshal(buf)
	}
	if u, ok := pb.(Unmarshaler); ok {
		// NOTE: The history of proto have unfortunately been inconsistent
		// whether Unmarshaler should or should not implicitly clear itself.
		// Some implementations do, most do not.
		// Thus, calling this here may or may not do what people want.
		//
		// See https://github.com/golang/protobuf/issues/424
		return u.Unmarshal(buf)
	}
	return NewBuffer(buf).Unmarshal(pb)
}

// DecodeMessage reads a count-delimited message from the Buffer.
func (p *Buffer) DecodeMessage(pb Message) error {
	enc, err := p.DecodeRawBytes(false)
	if err != nil {
		return err
	}
	return NewBuffer(enc).Unmarshal(pb)
}

// DecodeGroup reads a tag-delimited group from the Buffer.
// StartGroup tag is already consumed. This function consumes
// EndGroup tag.
func (p *Buffer) DecodeGroup(pb Message) error {
	b := p.buf[p.index:]
	x, y := findEndGroup(b)
	if x < 0 {
		return io.ErrUnexpectedEOF
	}
	err := Unmarshal(b[:x], pb)
	p.index += y
	return err
}

// Unmarshal parses the protocol buffer representation in the
// Buffer and places the decoded result in pb.  If the struct
// underlying pb does not match the data in the buffer, the results can be
// unpredictable.
//
// Unlike proto.Unmarshal, this does not reset pb before starting to unmarshal.
func (p *Buffer) Unmarshal(pb Message) error {
	// If the object can unmarshal itself, let it.
	if u, ok := pb.(newUnmarshaler); ok {
		err := u.XXX_Unmarshal(p.buf[p.index:])
		p.index = len(p.buf)
		return err
	}
	if u, ok := pb.(Unmarshaler); ok {
		// NOTE: The history of proto have unfortunately been inconsistent
		// whether Unmarshaler should or should not implicitly clear itself.
		// Some implementations do, most do not.
		// Thus, calling this here may or may not do what people want.
		//
		// See https://github.com/golang/protobuf/issues/424
		err := u.Unmarshal(p.buf[p.index:])
		p.index = len(p.buf)
		return err
	}

	// Slow workaround for messages that aren't Unmarshalers.
	// This includes some hand-coded .pb.go files and
	// bootstrap protos.
	// TODO: fix all of those and then add Unmarshal to
	// the Message interface. Then:
	// The cast above and code below can be deleted.
	// The old unmarshaler can be deleted.
	// Clients can call Unmarshal directly (can already do that, actually).
	var info InternalMessageInfo
	err := info.Unmarshal(pb, p.buf[p.index:])
	p.index = len(p.buf)
	return err
}
07070100000643000081A4000000000000000000000001645E367C000009BE000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/deprecated.go   // Go support for Protocol Buffers - Google's data interchange format
//
// Copyright 2018 The Go Authors.  All rights reserved.
// https://github.com/golang/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package proto

import "errors"

// Deprecated: do not use.
type Stats struct{ Emalloc, Dmalloc, Encode, Decode, Chit, Cmiss, Size uint64 }

// Deprecated: do not use.
func GetStats() Stats { return Stats{} }

// Deprecated: do not use.
func MarshalMessageSet(interface{}) ([]byte, error) {
	return nil, errors.New("proto: not implemented")
}

// Deprecated: do not use.
func UnmarshalMessageSet([]byte, interface{}) error {
	return errors.New("proto: not implemented")
}

// Deprecated: do not use.
func MarshalMessageSetJSON(interface{}) ([]byte, error) {
	return nil, errors.New("proto: not implemented")
}

// Deprecated: do not use.
func UnmarshalMessageSetJSON([]byte, interface{}) error {
	return errors.New("proto: not implemented")
}

// Deprecated: do not use.
func RegisterMessageSetType(Message, int32, string) {}
  07070100000644000081A4000000000000000000000001645E367C0000274B000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/discard.go  // Go support for Protocol Buffers - Google's data interchange format
//
// Copyright 2017 The Go Authors.  All rights reserved.
// https://github.com/golang/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package proto

import (
	"fmt"
	"reflect"
	"strings"
	"sync"
	"sync/atomic"
)

type generatedDiscarder interface {
	XXX_DiscardUnknown()
}

// DiscardUnknown recursively discards all unknown fields from this message
// and all embedded messages.
//
// When unmarshaling a message with unrecognized fields, the tags and values
// of such fields are preserved in the Message. This allows a later call to
// marshal to be able to produce a message that continues to have those
// unrecognized fields. To avoid this, DiscardUnknown is used to
// explicitly clear the unknown fields after unmarshaling.
//
// For proto2 messages, the unknown fields of message extensions are only
// discarded from messages that have been accessed via GetExtension.
func DiscardUnknown(m Message) {
	if m, ok := m.(generatedDiscarder); ok {
		m.XXX_DiscardUnknown()
		return
	}
	// TODO: Dynamically populate a InternalMessageInfo for legacy messages,
	// but the master branch has no implementation for InternalMessageInfo,
	// so it would be more work to replicate that approach.
	discardLegacy(m)
}

// DiscardUnknown recursively discards all unknown fields.
func (a *InternalMessageInfo) DiscardUnknown(m Message) {
	di := atomicLoadDiscardInfo(&a.discard)
	if di == nil {
		di = getDiscardInfo(reflect.TypeOf(m).Elem())
		atomicStoreDiscardInfo(&a.discard, di)
	}
	di.discard(toPointer(&m))
}

type discardInfo struct {
	typ reflect.Type

	initialized int32 // 0: only typ is valid, 1: everything is valid
	lock        sync.Mutex

	fields       []discardFieldInfo
	unrecognized field
}

type discardFieldInfo struct {
	field   field // Offset of field, guaranteed to be valid
	discard func(src pointer)
}

var (
	discardInfoMap  = map[reflect.Type]*discardInfo{}
	discardInfoLock sync.Mutex
)

func getDiscardInfo(t reflect.Type) *discardInfo {
	discardInfoLock.Lock()
	defer discardInfoLock.Unlock()
	di := discardInfoMap[t]
	if di == nil {
		di = &discardInfo{typ: t}
		discardInfoMap[t] = di
	}
	return di
}

func (di *discardInfo) discard(src pointer) {
	if src.isNil() {
		return // Nothing to do.
	}

	if atomic.LoadInt32(&di.initialized) == 0 {
		di.computeDiscardInfo()
	}

	for _, fi := range di.fields {
		sfp := src.offset(fi.field)
		fi.discard(sfp)
	}

	// For proto2 messages, only discard unknown fields in message extensions
	// that have been accessed via GetExtension.
	if em, err := extendable(src.asPointerTo(di.typ).Interface()); err == nil {
		// Ignore lock since DiscardUnknown is not concurrency safe.
		emm, _ := em.extensionsRead()
		for _, mx := range emm {
			if m, ok := mx.value.(Message); ok {
				DiscardUnknown(m)
			}
		}
	}

	if di.unrecognized.IsValid() {
		*src.offset(di.unrecognized).toBytes() = nil
	}
}

func (di *discardInfo) computeDiscardInfo() {
	di.lock.Lock()
	defer di.lock.Unlock()
	if di.initialized != 0 {
		return
	}
	t := di.typ
	n := t.NumField()

	for i := 0; i < n; i++ {
		f := t.Field(i)
		if strings.HasPrefix(f.Name, "XXX_") {
			continue
		}

		dfi := discardFieldInfo{field: toField(&f)}
		tf := f.Type

		// Unwrap tf to get its most basic type.
		var isPointer, isSlice bool
		if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 {
			isSlice = true
			tf = tf.Elem()
		}
		if tf.Kind() == reflect.Ptr {
			isPointer = true
			tf = tf.Elem()
		}
		if isPointer && isSlice && tf.Kind() != reflect.Struct {
			panic(fmt.Sprintf("%v.%s cannot be a slice of pointers to primitive types", t, f.Name))
		}

		switch tf.Kind() {
		case reflect.Struct:
			switch {
			case !isPointer:
				panic(fmt.Sprintf("%v.%s cannot be a direct struct value", t, f.Name))
			case isSlice: // E.g., []*pb.T
				discardInfo := getDiscardInfo(tf)
				dfi.discard = func(src pointer) {
					sps := src.getPointerSlice()
					for _, sp := range sps {
						if !sp.isNil() {
							discardInfo.discard(sp)
						}
					}
				}
			default: // E.g., *pb.T
				discardInfo := getDiscardInfo(tf)
				dfi.discard = func(src pointer) {
					sp := src.getPointer()
					if !sp.isNil() {
						discardInfo.discard(sp)
					}
				}
			}
		case reflect.Map:
			switch {
			case isPointer || isSlice:
				panic(fmt.Sprintf("%v.%s cannot be a pointer to a map or a slice of map values", t, f.Name))
			default: // E.g., map[K]V
				if tf.Elem().Kind() == reflect.Ptr { // Proto struct (e.g., *T)
					dfi.discard = func(src pointer) {
						sm := src.asPointerTo(tf).Elem()
						if sm.Len() == 0 {
							return
						}
						for _, key := range sm.MapKeys() {
							val := sm.MapIndex(key)
							DiscardUnknown(val.Interface().(Message))
						}
					}
				} else {
					dfi.discard = func(pointer) {} // Noop
				}
			}
		case reflect.Interface:
			// Must be oneof field.
			switch {
			case isPointer || isSlice:
				panic(fmt.Sprintf("%v.%s cannot be a pointer to a interface or a slice of interface values", t, f.Name))
			default: // E.g., interface{}
				// TODO: Make this faster?
				dfi.discard = func(src pointer) {
					su := src.asPointerTo(tf).Elem()
					if !su.IsNil() {
						sv := su.Elem().Elem().Field(0)
						if sv.Kind() == reflect.Ptr && sv.IsNil() {
							return
						}
						switch sv.Type().Kind() {
						case reflect.Ptr: // Proto struct (e.g., *T)
							DiscardUnknown(sv.Interface().(Message))
						}
					}
				}
			}
		default:
			continue
		}
		di.fields = append(di.fields, dfi)
	}

	di.unrecognized = invalidField
	if f, ok := t.FieldByName("XXX_unrecognized"); ok {
		if f.Type != reflect.TypeOf([]byte{}) {
			panic("expected XXX_unrecognized to be of type []byte")
		}
		di.unrecognized = toField(&f)
	}

	atomic.StoreInt32(&di.initialized, 1)
}

func discardLegacy(m Message) {
	v := reflect.ValueOf(m)
	if v.Kind() != reflect.Ptr || v.IsNil() {
		return
	}
	v = v.Elem()
	if v.Kind() != reflect.Struct {
		return
	}
	t := v.Type()

	for i := 0; i < v.NumField(); i++ {
		f := t.Field(i)
		if strings.HasPrefix(f.Name, "XXX_") {
			continue
		}
		vf := v.Field(i)
		tf := f.Type

		// Unwrap tf to get its most basic type.
		var isPointer, isSlice bool
		if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 {
			isSlice = true
			tf = tf.Elem()
		}
		if tf.Kind() == reflect.Ptr {
			isPointer = true
			tf = tf.Elem()
		}
		if isPointer && isSlice && tf.Kind() != reflect.Struct {
			panic(fmt.Sprintf("%T.%s cannot be a slice of pointers to primitive types", m, f.Name))
		}

		switch tf.Kind() {
		case reflect.Struct:
			switch {
			case !isPointer:
				panic(fmt.Sprintf("%T.%s cannot be a direct struct value", m, f.Name))
			case isSlice: // E.g., []*pb.T
				for j := 0; j < vf.Len(); j++ {
					discardLegacy(vf.Index(j).Interface().(Message))
				}
			default: // E.g., *pb.T
				discardLegacy(vf.Interface().(Message))
			}
		case reflect.Map:
			switch {
			case isPointer || isSlice:
				panic(fmt.Sprintf("%T.%s cannot be a pointer to a map or a slice of map values", m, f.Name))
			default: // E.g., map[K]V
				tv := vf.Type().Elem()
				if tv.Kind() == reflect.Ptr && tv.Implements(protoMessageType) { // Proto struct (e.g., *T)
					for _, key := range vf.MapKeys() {
						val := vf.MapIndex(key)
						discardLegacy(val.Interface().(Message))
					}
				}
			}
		case reflect.Interface:
			// Must be oneof field.
			switch {
			case isPointer || isSlice:
				panic(fmt.Sprintf("%T.%s cannot be a pointer to a interface or a slice of interface values", m, f.Name))
			default: // E.g., test_proto.isCommunique_Union interface
				if !vf.IsNil() && f.Tag.Get("protobuf_oneof") != "" {
					vf = vf.Elem() // E.g., *test_proto.Communique_Msg
					if !vf.IsNil() {
						vf = vf.Elem()   // E.g., test_proto.Communique_Msg
						vf = vf.Field(0) // E.g., Proto struct (e.g., *T) or primitive value
						if vf.Kind() == reflect.Ptr {
							discardLegacy(vf.Interface().(Message))
						}
					}
				}
			}
		}
	}

	if vf := v.FieldByName("XXX_unrecognized"); vf.IsValid() {
		if vf.Type() != reflect.TypeOf([]byte{}) {
			panic("expected XXX_unrecognized to be of type []byte")
		}
		vf.Set(reflect.ValueOf([]byte(nil)))
	}

	// For proto2 messages, only discard unknown fields in message extensions
	// that have been accessed via GetExtension.
	if em, err := extendable(m); err == nil {
		// Ignore lock since discardLegacy is not concurrency safe.
		emm, _ := em.extensionsRead()
		for _, mx := range emm {
			if m, ok := mx.value.(Message); ok {
				discardLegacy(m)
			}
		}
	}
}
 07070100000645000081A4000000000000000000000001645E367C00000ECB000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/duration.go // Go support for Protocol Buffers - Google's data interchange format
//
// Copyright 2016 The Go Authors.  All rights reserved.
// https://github.com/golang/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package proto

// This file implements conversions between google.protobuf.Duration
// and time.Duration.

import (
	"errors"
	"fmt"
	"time"
)

const (
	// Range of a Duration in seconds, as specified in
	// google/protobuf/duration.proto. This is about 10,000 years in seconds.
	maxSeconds = int64(10000 * 365.25 * 24 * 60 * 60)
	minSeconds = -maxSeconds
)

// validateDuration determines whether the Duration is valid according to the
// definition in google/protobuf/duration.proto. A valid Duration
// may still be too large to fit into a time.Duration (the range of Duration
// is about 10,000 years, and the range of time.Duration is about 290).
func validateDuration(d *duration) error {
	if d == nil {
		return errors.New("duration: nil Duration")
	}
	if d.Seconds < minSeconds || d.Seconds > maxSeconds {
		return fmt.Errorf("duration: %#v: seconds out of range", d)
	}
	if d.Nanos <= -1e9 || d.Nanos >= 1e9 {
		return fmt.Errorf("duration: %#v: nanos out of range", d)
	}
	// Seconds and Nanos must have the same sign, unless d.Nanos is zero.
	if (d.Seconds < 0 && d.Nanos > 0) || (d.Seconds > 0 && d.Nanos < 0) {
		return fmt.Errorf("duration: %#v: seconds and nanos have different signs", d)
	}
	return nil
}

// DurationFromProto converts a Duration to a time.Duration. DurationFromProto
// returns an error if the Duration is invalid or is too large to be
// represented in a time.Duration.
func durationFromProto(p *duration) (time.Duration, error) {
	if err := validateDuration(p); err != nil {
		return 0, err
	}
	d := time.Duration(p.Seconds) * time.Second
	if int64(d/time.Second) != p.Seconds {
		return 0, fmt.Errorf("duration: %#v is out of range for time.Duration", p)
	}
	if p.Nanos != 0 {
		d += time.Duration(p.Nanos)
		if (d < 0) != (p.Nanos < 0) {
			return 0, fmt.Errorf("duration: %#v is out of range for time.Duration", p)
		}
	}
	return d, nil
}

// DurationProto converts a time.Duration to a Duration.
func durationProto(d time.Duration) *duration {
	nanos := d.Nanoseconds()
	secs := nanos / 1e9
	nanos -= secs * 1e9
	return &duration{
		Seconds: secs,
		Nanos:   int32(nanos),
	}
}
 07070100000646000081A4000000000000000000000001645E367C000007C2000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/duration_gogo.go    // Protocol Buffers for Go with Gadgets
//
// Copyright (c) 2016, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package proto

import (
	"reflect"
	"time"
)

var durationType = reflect.TypeOf((*time.Duration)(nil)).Elem()

type duration struct {
	Seconds int64 `protobuf:"varint,1,opt,name=seconds,proto3" json:"seconds,omitempty"`
	Nanos   int32 `protobuf:"varint,2,opt,name=nanos,proto3" json:"nanos,omitempty"`
}

func (m *duration) Reset()       { *m = duration{} }
func (*duration) ProtoMessage()  {}
func (*duration) String() string { return "duration<string>" }

func init() {
	RegisterType((*duration)(nil), "gogo.protobuf.proto.duration")
}
  07070100000647000081A4000000000000000000000001645E367C0000188F000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/encode.go   // Go support for Protocol Buffers - Google's data interchange format
//
// Copyright 2010 The Go Authors.  All rights reserved.
// https://github.com/golang/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package proto

/*
 * Routines for encoding data into the wire format for protocol buffers.
 */

import (
	"errors"
	"reflect"
)

var (
	// errRepeatedHasNil is the error returned if Marshal is called with
	// a struct with a repeated field containing a nil element.
	errRepeatedHasNil = errors.New("proto: repeated field has nil element")

	// errOneofHasNil is the error returned if Marshal is called with
	// a struct with a oneof field containing a nil element.
	errOneofHasNil = errors.New("proto: oneof field has nil value")

	// ErrNil is the error returned if Marshal is called with nil.
	ErrNil = errors.New("proto: Marshal called with nil")

	// ErrTooLarge is the error returned if Marshal is called with a
	// message that encodes to >2GB.
	ErrTooLarge = errors.New("proto: message encodes to over 2 GB")
)

// The fundamental encoders that put bytes on the wire.
// Those that take integer types all accept uint64 and are
// therefore of type valueEncoder.

const maxVarintBytes = 10 // maximum length of a varint

// EncodeVarint returns the varint encoding of x.
// This is the format for the
// int32, int64, uint32, uint64, bool, and enum
// protocol buffer types.
// Not used by the package itself, but helpful to clients
// wishing to use the same encoding.
func EncodeVarint(x uint64) []byte {
	var buf [maxVarintBytes]byte
	var n int
	for n = 0; x > 127; n++ {
		buf[n] = 0x80 | uint8(x&0x7F)
		x >>= 7
	}
	buf[n] = uint8(x)
	n++
	return buf[0:n]
}

// EncodeVarint writes a varint-encoded integer to the Buffer.
// This is the format for the
// int32, int64, uint32, uint64, bool, and enum
// protocol buffer types.
func (p *Buffer) EncodeVarint(x uint64) error {
	for x >= 1<<7 {
		p.buf = append(p.buf, uint8(x&0x7f|0x80))
		x >>= 7
	}
	p.buf = append(p.buf, uint8(x))
	return nil
}

// SizeVarint returns the varint encoding size of an integer.
func SizeVarint(x uint64) int {
	switch {
	case x < 1<<7:
		return 1
	case x < 1<<14:
		return 2
	case x < 1<<21:
		return 3
	case x < 1<<28:
		return 4
	case x < 1<<35:
		return 5
	case x < 1<<42:
		return 6
	case x < 1<<49:
		return 7
	case x < 1<<56:
		return 8
	case x < 1<<63:
		return 9
	}
	return 10
}

// EncodeFixed64 writes a 64-bit integer to the Buffer.
// This is the format for the
// fixed64, sfixed64, and double protocol buffer types.
func (p *Buffer) EncodeFixed64(x uint64) error {
	p.buf = append(p.buf,
		uint8(x),
		uint8(x>>8),
		uint8(x>>16),
		uint8(x>>24),
		uint8(x>>32),
		uint8(x>>40),
		uint8(x>>48),
		uint8(x>>56))
	return nil
}

// EncodeFixed32 writes a 32-bit integer to the Buffer.
// This is the format for the
// fixed32, sfixed32, and float protocol buffer types.
func (p *Buffer) EncodeFixed32(x uint64) error {
	p.buf = append(p.buf,
		uint8(x),
		uint8(x>>8),
		uint8(x>>16),
		uint8(x>>24))
	return nil
}

// EncodeZigzag64 writes a zigzag-encoded 64-bit integer
// to the Buffer.
// This is the format used for the sint64 protocol buffer type.
func (p *Buffer) EncodeZigzag64(x uint64) error {
	// use signed number to get arithmetic right shift.
	return p.EncodeVarint(uint64((x << 1) ^ uint64((int64(x) >> 63))))
}

// EncodeZigzag32 writes a zigzag-encoded 32-bit integer
// to the Buffer.
// This is the format used for the sint32 protocol buffer type.
func (p *Buffer) EncodeZigzag32(x uint64) error {
	// use signed number to get arithmetic right shift.
	return p.EncodeVarint(uint64((uint32(x) << 1) ^ uint32((int32(x) >> 31))))
}

// EncodeRawBytes writes a count-delimited byte buffer to the Buffer.
// This is the format used for the bytes protocol buffer
// type and for embedded messages.
func (p *Buffer) EncodeRawBytes(b []byte) error {
	p.EncodeVarint(uint64(len(b)))
	p.buf = append(p.buf, b...)
	return nil
}

// EncodeStringBytes writes an encoded string to the Buffer.
// This is the format used for the proto2 string type.
func (p *Buffer) EncodeStringBytes(s string) error {
	p.EncodeVarint(uint64(len(s)))
	p.buf = append(p.buf, s...)
	return nil
}

// Marshaler is the interface representing objects that can marshal themselves.
type Marshaler interface {
	Marshal() ([]byte, error)
}

// EncodeMessage writes the protocol buffer to the Buffer,
// prefixed by a varint-encoded length.
func (p *Buffer) EncodeMessage(pb Message) error {
	siz := Size(pb)
	sizVar := SizeVarint(uint64(siz))
	p.grow(siz + sizVar)
	p.EncodeVarint(uint64(siz))
	return p.Marshal(pb)
}

// All protocol buffer fields are nillable, but be careful.
func isNil(v reflect.Value) bool {
	switch v.Kind() {
	case reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice:
		return v.IsNil()
	}
	return false
}
 07070100000648000081A4000000000000000000000001645E367C0000061E000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/encode_gogo.go  // Protocol Buffers for Go with Gadgets
//
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package proto

func NewRequiredNotSetError(field string) *RequiredNotSetError {
	return &RequiredNotSetError{field}
}
  07070100000649000081A4000000000000000000000001645E367C000022A4000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/equal.go    // Go support for Protocol Buffers - Google's data interchange format
//
// Copyright 2011 The Go Authors.  All rights reserved.
// https://github.com/golang/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

// Protocol buffer comparison.

package proto

import (
	"bytes"
	"log"
	"reflect"
	"strings"
)

/*
Equal returns true iff protocol buffers a and b are equal.
The arguments must both be pointers to protocol buffer structs.

Equality is defined in this way:
  - Two messages are equal iff they are the same type,
    corresponding fields are equal, unknown field sets
    are equal, and extensions sets are equal.
  - Two set scalar fields are equal iff their values are equal.
    If the fields are of a floating-point type, remember that
    NaN != x for all x, including NaN. If the message is defined
    in a proto3 .proto file, fields are not "set"; specifically,
    zero length proto3 "bytes" fields are equal (nil == {}).
  - Two repeated fields are equal iff their lengths are the same,
    and their corresponding elements are equal. Note a "bytes" field,
    although represented by []byte, is not a repeated field and the
    rule for the scalar fields described above applies.
  - Two unset fields are equal.
  - Two unknown field sets are equal if their current
    encoded state is equal.
  - Two extension sets are equal iff they have corresponding
    elements that are pairwise equal.
  - Two map fields are equal iff their lengths are the same,
    and they contain the same set of elements. Zero-length map
    fields are equal.
  - Every other combination of things are not equal.

The return value is undefined if a and b are not protocol buffers.
*/
func Equal(a, b Message) bool {
	if a == nil || b == nil {
		return a == b
	}
	v1, v2 := reflect.ValueOf(a), reflect.ValueOf(b)
	if v1.Type() != v2.Type() {
		return false
	}
	if v1.Kind() == reflect.Ptr {
		if v1.IsNil() {
			return v2.IsNil()
		}
		if v2.IsNil() {
			return false
		}
		v1, v2 = v1.Elem(), v2.Elem()
	}
	if v1.Kind() != reflect.Struct {
		return false
	}
	return equalStruct(v1, v2)
}

// v1 and v2 are known to have the same type.
func equalStruct(v1, v2 reflect.Value) bool {
	sprop := GetProperties(v1.Type())
	for i := 0; i < v1.NumField(); i++ {
		f := v1.Type().Field(i)
		if strings.HasPrefix(f.Name, "XXX_") {
			continue
		}
		f1, f2 := v1.Field(i), v2.Field(i)
		if f.Type.Kind() == reflect.Ptr {
			if n1, n2 := f1.IsNil(), f2.IsNil(); n1 && n2 {
				// both unset
				continue
			} else if n1 != n2 {
				// set/unset mismatch
				return false
			}
			f1, f2 = f1.Elem(), f2.Elem()
		}
		if !equalAny(f1, f2, sprop.Prop[i]) {
			return false
		}
	}

	if em1 := v1.FieldByName("XXX_InternalExtensions"); em1.IsValid() {
		em2 := v2.FieldByName("XXX_InternalExtensions")
		if !equalExtensions(v1.Type(), em1.Interface().(XXX_InternalExtensions), em2.Interface().(XXX_InternalExtensions)) {
			return false
		}
	}

	if em1 := v1.FieldByName("XXX_extensions"); em1.IsValid() {
		em2 := v2.FieldByName("XXX_extensions")
		if !equalExtMap(v1.Type(), em1.Interface().(map[int32]Extension), em2.Interface().(map[int32]Extension)) {
			return false
		}
	}

	uf := v1.FieldByName("XXX_unrecognized")
	if !uf.IsValid() {
		return true
	}

	u1 := uf.Bytes()
	u2 := v2.FieldByName("XXX_unrecognized").Bytes()
	return bytes.Equal(u1, u2)
}

// v1 and v2 are known to have the same type.
// prop may be nil.
func equalAny(v1, v2 reflect.Value, prop *Properties) bool {
	if v1.Type() == protoMessageType {
		m1, _ := v1.Interface().(Message)
		m2, _ := v2.Interface().(Message)
		return Equal(m1, m2)
	}
	switch v1.Kind() {
	case reflect.Bool:
		return v1.Bool() == v2.Bool()
	case reflect.Float32, reflect.Float64:
		return v1.Float() == v2.Float()
	case reflect.Int32, reflect.Int64:
		return v1.Int() == v2.Int()
	case reflect.Interface:
		// Probably a oneof field; compare the inner values.
		n1, n2 := v1.IsNil(), v2.IsNil()
		if n1 || n2 {
			return n1 == n2
		}
		e1, e2 := v1.Elem(), v2.Elem()
		if e1.Type() != e2.Type() {
			return false
		}
		return equalAny(e1, e2, nil)
	case reflect.Map:
		if v1.Len() != v2.Len() {
			return false
		}
		for _, key := range v1.MapKeys() {
			val2 := v2.MapIndex(key)
			if !val2.IsValid() {
				// This key was not found in the second map.
				return false
			}
			if !equalAny(v1.MapIndex(key), val2, nil) {
				return false
			}
		}
		return true
	case reflect.Ptr:
		// Maps may have nil values in them, so check for nil.
		if v1.IsNil() && v2.IsNil() {
			return true
		}
		if v1.IsNil() != v2.IsNil() {
			return false
		}
		return equalAny(v1.Elem(), v2.Elem(), prop)
	case reflect.Slice:
		if v1.Type().Elem().Kind() == reflect.Uint8 {
			// short circuit: []byte

			// Edge case: if this is in a proto3 message, a zero length
			// bytes field is considered the zero value.
			if prop != nil && prop.proto3 && v1.Len() == 0 && v2.Len() == 0 {
				return true
			}
			if v1.IsNil() != v2.IsNil() {
				return false
			}
			return bytes.Equal(v1.Interface().([]byte), v2.Interface().([]byte))
		}

		if v1.Len() != v2.Len() {
			return false
		}
		for i := 0; i < v1.Len(); i++ {
			if !equalAny(v1.Index(i), v2.Index(i), prop) {
				return false
			}
		}
		return true
	case reflect.String:
		return v1.Interface().(string) == v2.Interface().(string)
	case reflect.Struct:
		return equalStruct(v1, v2)
	case reflect.Uint32, reflect.Uint64:
		return v1.Uint() == v2.Uint()
	}

	// unknown type, so not a protocol buffer
	log.Printf("proto: don't know how to compare %v", v1)
	return false
}

// base is the struct type that the extensions are based on.
// x1 and x2 are InternalExtensions.
func equalExtensions(base reflect.Type, x1, x2 XXX_InternalExtensions) bool {
	em1, _ := x1.extensionsRead()
	em2, _ := x2.extensionsRead()
	return equalExtMap(base, em1, em2)
}

func equalExtMap(base reflect.Type, em1, em2 map[int32]Extension) bool {
	if len(em1) != len(em2) {
		return false
	}

	for extNum, e1 := range em1 {
		e2, ok := em2[extNum]
		if !ok {
			return false
		}

		m1, m2 := e1.value, e2.value

		if m1 == nil && m2 == nil {
			// Both have only encoded form.
			if bytes.Equal(e1.enc, e2.enc) {
				continue
			}
			// The bytes are different, but the extensions might still be
			// equal. We need to decode them to compare.
		}

		if m1 != nil && m2 != nil {
			// Both are unencoded.
			if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) {
				return false
			}
			continue
		}

		// At least one is encoded. To do a semantically correct comparison
		// we need to unmarshal them first.
		var desc *ExtensionDesc
		if m := extensionMaps[base]; m != nil {
			desc = m[extNum]
		}
		if desc == nil {
			// If both have only encoded form and the bytes are the same,
			// it is handled above. We get here when the bytes are different.
			// We don't know how to decode it, so just compare them as byte
			// slices.
			log.Printf("proto: don't know how to compare extension %d of %v", extNum, base)
			return false
		}
		var err error
		if m1 == nil {
			m1, err = decodeExtension(e1.enc, desc)
		}
		if m2 == nil && err == nil {
			m2, err = decodeExtension(e2.enc, desc)
		}
		if err != nil {
			// The encoded form is invalid.
			log.Printf("proto: badly encoded extension %d of %v: %v", extNum, base, err)
			return false
		}
		if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) {
			return false
		}
	}

	return true
}
0707010000064A000081A4000000000000000000000001645E367C00004776000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/extensions.go   // Go support for Protocol Buffers - Google's data interchange format
//
// Copyright 2010 The Go Authors.  All rights reserved.
// https://github.com/golang/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package proto

/*
 * Types and routines for supporting protocol buffer extensions.
 */

import (
	"errors"
	"fmt"
	"io"
	"reflect"
	"strconv"
	"sync"
)

// ErrMissingExtension is the error returned by GetExtension if the named extension is not in the message.
var ErrMissingExtension = errors.New("proto: missing extension")

// ExtensionRange represents a range of message extensions for a protocol buffer.
// Used in code generated by the protocol compiler.
type ExtensionRange struct {
	Start, End int32 // both inclusive
}

// extendableProto is an interface implemented by any protocol buffer generated by the current
// proto compiler that may be extended.
type extendableProto interface {
	Message
	ExtensionRangeArray() []ExtensionRange
	extensionsWrite() map[int32]Extension
	extensionsRead() (map[int32]Extension, sync.Locker)
}

// extendableProtoV1 is an interface implemented by a protocol buffer generated by the previous
// version of the proto compiler that may be extended.
type extendableProtoV1 interface {
	Message
	ExtensionRangeArray() []ExtensionRange
	ExtensionMap() map[int32]Extension
}

// extensionAdapter is a wrapper around extendableProtoV1 that implements extendableProto.
type extensionAdapter struct {
	extendableProtoV1
}

func (e extensionAdapter) extensionsWrite() map[int32]Extension {
	return e.ExtensionMap()
}

func (e extensionAdapter) extensionsRead() (map[int32]Extension, sync.Locker) {
	return e.ExtensionMap(), notLocker{}
}

// notLocker is a sync.Locker whose Lock and Unlock methods are nops.
type notLocker struct{}

func (n notLocker) Lock()   {}
func (n notLocker) Unlock() {}

// extendable returns the extendableProto interface for the given generated proto message.
// If the proto message has the old extension format, it returns a wrapper that implements
// the extendableProto interface.
func extendable(p interface{}) (extendableProto, error) {
	switch p := p.(type) {
	case extendableProto:
		if isNilPtr(p) {
			return nil, fmt.Errorf("proto: nil %T is not extendable", p)
		}
		return p, nil
	case extendableProtoV1:
		if isNilPtr(p) {
			return nil, fmt.Errorf("proto: nil %T is not extendable", p)
		}
		return extensionAdapter{p}, nil
	case extensionsBytes:
		return slowExtensionAdapter{p}, nil
	}
	// Don't allocate a specific error containing %T:
	// this is the hot path for Clone and MarshalText.
	return nil, errNotExtendable
}

var errNotExtendable = errors.New("proto: not an extendable proto.Message")

func isNilPtr(x interface{}) bool {
	v := reflect.ValueOf(x)
	return v.Kind() == reflect.Ptr && v.IsNil()
}

// XXX_InternalExtensions is an internal representation of proto extensions.
//
// Each generated message struct type embeds an anonymous XXX_InternalExtensions field,
// thus gaining the unexported 'extensions' method, which can be called only from the proto package.
//
// The methods of XXX_InternalExtensions are not concurrency safe in general,
// but calls to logically read-only methods such as has and get may be executed concurrently.
type XXX_InternalExtensions struct {
	// The struct must be indirect so that if a user inadvertently copies a
	// generated message and its embedded XXX_InternalExtensions, they
	// avoid the mayhem of a copied mutex.
	//
	// The mutex serializes all logically read-only operations to p.extensionMap.
	// It is up to the client to ensure that write operations to p.extensionMap are
	// mutually exclusive with other accesses.
	p *struct {
		mu           sync.Mutex
		extensionMap map[int32]Extension
	}
}

// extensionsWrite returns the extension map, creating it on first use.
func (e *XXX_InternalExtensions) extensionsWrite() map[int32]Extension {
	if e.p == nil {
		e.p = new(struct {
			mu           sync.Mutex
			extensionMap map[int32]Extension
		})
		e.p.extensionMap = make(map[int32]Extension)
	}
	return e.p.extensionMap
}

// extensionsRead returns the extensions map for read-only use.  It may be nil.
// The caller must hold the returned mutex's lock when accessing Elements within the map.
func (e *XXX_InternalExtensions) extensionsRead() (map[int32]Extension, sync.Locker) {
	if e.p == nil {
		return nil, nil
	}
	return e.p.extensionMap, &e.p.mu
}

// ExtensionDesc represents an extension specification.
// Used in generated code from the protocol compiler.
type ExtensionDesc struct {
	ExtendedType  Message     // nil pointer to the type that is being extended
	ExtensionType interface{} // nil pointer to the extension type
	Field         int32       // field number
	Name          string      // fully-qualified name of extension, for text formatting
	Tag           string      // protobuf tag style
	Filename      string      // name of the file in which the extension is defined
}

func (ed *ExtensionDesc) repeated() bool {
	t := reflect.TypeOf(ed.ExtensionType)
	return t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8
}

// Extension represents an extension in a message.
type Extension struct {
	// When an extension is stored in a message using SetExtension
	// only desc and value are set. When the message is marshaled
	// enc will be set to the encoded form of the message.
	//
	// When a message is unmarshaled and contains extensions, each
	// extension will have only enc set. When such an extension is
	// accessed using GetExtension (or GetExtensions) desc and value
	// will be set.
	desc  *ExtensionDesc
	value interface{}
	enc   []byte
}

// SetRawExtension is for testing only.
func SetRawExtension(base Message, id int32, b []byte) {
	if ebase, ok := base.(extensionsBytes); ok {
		clearExtension(base, id)
		ext := ebase.GetExtensions()
		*ext = append(*ext, b...)
		return
	}
	epb, err := extendable(base)
	if err != nil {
		return
	}
	extmap := epb.extensionsWrite()
	extmap[id] = Extension{enc: b}
}

// isExtensionField returns true iff the given field number is in an extension range.
func isExtensionField(pb extendableProto, field int32) bool {
	for _, er := range pb.ExtensionRangeArray() {
		if er.Start <= field && field <= er.End {
			return true
		}
	}
	return false
}

// checkExtensionTypes checks that the given extension is valid for pb.
func checkExtensionTypes(pb extendableProto, extension *ExtensionDesc) error {
	var pbi interface{} = pb
	// Check the extended type.
	if ea, ok := pbi.(extensionAdapter); ok {
		pbi = ea.extendableProtoV1
	}
	if ea, ok := pbi.(slowExtensionAdapter); ok {
		pbi = ea.extensionsBytes
	}
	if a, b := reflect.TypeOf(pbi), reflect.TypeOf(extension.ExtendedType); a != b {
		return fmt.Errorf("proto: bad extended type; %v does not extend %v", b, a)
	}
	// Check the range.
	if !isExtensionField(pb, extension.Field) {
		return errors.New("proto: bad extension number; not in declared ranges")
	}
	return nil
}

// extPropKey is sufficient to uniquely identify an extension.
type extPropKey struct {
	base  reflect.Type
	field int32
}

var extProp = struct {
	sync.RWMutex
	m map[extPropKey]*Properties
}{
	m: make(map[extPropKey]*Properties),
}

func extensionProperties(ed *ExtensionDesc) *Properties {
	key := extPropKey{base: reflect.TypeOf(ed.ExtendedType), field: ed.Field}

	extProp.RLock()
	if prop, ok := extProp.m[key]; ok {
		extProp.RUnlock()
		return prop
	}
	extProp.RUnlock()

	extProp.Lock()
	defer extProp.Unlock()
	// Check again.
	if prop, ok := extProp.m[key]; ok {
		return prop
	}

	prop := new(Properties)
	prop.Init(reflect.TypeOf(ed.ExtensionType), "unknown_name", ed.Tag, nil)
	extProp.m[key] = prop
	return prop
}

// HasExtension returns whether the given extension is present in pb.
func HasExtension(pb Message, extension *ExtensionDesc) bool {
	if epb, doki := pb.(extensionsBytes); doki {
		ext := epb.GetExtensions()
		buf := *ext
		o := 0
		for o < len(buf) {
			tag, n := DecodeVarint(buf[o:])
			fieldNum := int32(tag >> 3)
			if int32(fieldNum) == extension.Field {
				return true
			}
			wireType := int(tag & 0x7)
			o += n
			l, err := size(buf[o:], wireType)
			if err != nil {
				return false
			}
			o += l
		}
		return false
	}
	// TODO: Check types, field numbers, etc.?
	epb, err := extendable(pb)
	if err != nil {
		return false
	}
	extmap, mu := epb.extensionsRead()
	if extmap == nil {
		return false
	}
	mu.Lock()
	_, ok := extmap[extension.Field]
	mu.Unlock()
	return ok
}

// ClearExtension removes the given extension from pb.
func ClearExtension(pb Message, extension *ExtensionDesc) {
	clearExtension(pb, extension.Field)
}

func clearExtension(pb Message, fieldNum int32) {
	if epb, ok := pb.(extensionsBytes); ok {
		offset := 0
		for offset != -1 {
			offset = deleteExtension(epb, fieldNum, offset)
		}
		return
	}
	epb, err := extendable(pb)
	if err != nil {
		return
	}
	// TODO: Check types, field numbers, etc.?
	extmap := epb.extensionsWrite()
	delete(extmap, fieldNum)
}

// GetExtension retrieves a proto2 extended field from pb.
//
// If the descriptor is type complete (i.e., ExtensionDesc.ExtensionType is non-nil),
// then GetExtension parses the encoded field and returns a Go value of the specified type.
// If the field is not present, then the default value is returned (if one is specified),
// otherwise ErrMissingExtension is reported.
//
// If the descriptor is not type complete (i.e., ExtensionDesc.ExtensionType is nil),
// then GetExtension returns the raw encoded bytes of the field extension.
func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) {
	if epb, doki := pb.(extensionsBytes); doki {
		ext := epb.GetExtensions()
		return decodeExtensionFromBytes(extension, *ext)
	}

	epb, err := extendable(pb)
	if err != nil {
		return nil, err
	}

	if extension.ExtendedType != nil {
		// can only check type if this is a complete descriptor
		if cerr := checkExtensionTypes(epb, extension); cerr != nil {
			return nil, cerr
		}
	}

	emap, mu := epb.extensionsRead()
	if emap == nil {
		return defaultExtensionValue(extension)
	}
	mu.Lock()
	defer mu.Unlock()
	e, ok := emap[extension.Field]
	if !ok {
		// defaultExtensionValue returns the default value or
		// ErrMissingExtension if there is no default.
		return defaultExtensionValue(extension)
	}

	if e.value != nil {
		// Already decoded. Check the descriptor, though.
		if e.desc != extension {
			// This shouldn't happen. If it does, it means that
			// GetExtension was called twice with two different
			// descriptors with the same field number.
			return nil, errors.New("proto: descriptor conflict")
		}
		return e.value, nil
	}

	if extension.ExtensionType == nil {
		// incomplete descriptor
		return e.enc, nil
	}

	v, err := decodeExtension(e.enc, extension)
	if err != nil {
		return nil, err
	}

	// Remember the decoded version and drop the encoded version.
	// That way it is safe to mutate what we return.
	e.value = v
	e.desc = extension
	e.enc = nil
	emap[extension.Field] = e
	return e.value, nil
}

// defaultExtensionValue returns the default value for extension.
// If no default for an extension is defined ErrMissingExtension is returned.
func defaultExtensionValue(extension *ExtensionDesc) (interface{}, error) {
	if extension.ExtensionType == nil {
		// incomplete descriptor, so no default
		return nil, ErrMissingExtension
	}

	t := reflect.TypeOf(extension.ExtensionType)
	props := extensionProperties(extension)

	sf, _, err := fieldDefault(t, props)
	if err != nil {
		return nil, err
	}

	if sf == nil || sf.value == nil {
		// There is no default value.
		return nil, ErrMissingExtension
	}

	if t.Kind() != reflect.Ptr {
		// We do not need to return a Ptr, we can directly return sf.value.
		return sf.value, nil
	}

	// We need to return an interface{} that is a pointer to sf.value.
	value := reflect.New(t).Elem()
	value.Set(reflect.New(value.Type().Elem()))
	if sf.kind == reflect.Int32 {
		// We may have an int32 or an enum, but the underlying data is int32.
		// Since we can't set an int32 into a non int32 reflect.value directly
		// set it as a int32.
		value.Elem().SetInt(int64(sf.value.(int32)))
	} else {
		value.Elem().Set(reflect.ValueOf(sf.value))
	}
	return value.Interface(), nil
}

// decodeExtension decodes an extension encoded in b.
func decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, error) {
	t := reflect.TypeOf(extension.ExtensionType)
	unmarshal := typeUnmarshaler(t, extension.Tag)

	// t is a pointer to a struct, pointer to basic type or a slice.
	// Allocate space to store the pointer/slice.
	value := reflect.New(t).Elem()

	var err error
	for {
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		wire := int(x) & 7

		b, err = unmarshal(b, valToPointer(value.Addr()), wire)
		if err != nil {
			return nil, err
		}

		if len(b) == 0 {
			break
		}
	}
	return value.Interface(), nil
}

// GetExtensions returns a slice of the extensions present in pb that are also listed in es.
// The returned slice has the same length as es; missing extensions will appear as nil elements.
func GetExtensions(pb Message, es []*ExtensionDesc) (extensions []interface{}, err error) {
	epb, err := extendable(pb)
	if err != nil {
		return nil, err
	}
	extensions = make([]interface{}, len(es))
	for i, e := range es {
		extensions[i], err = GetExtension(epb, e)
		if err == ErrMissingExtension {
			err = nil
		}
		if err != nil {
			return
		}
	}
	return
}

// ExtensionDescs returns a new slice containing pb's extension descriptors, in undefined order.
// For non-registered extensions, ExtensionDescs returns an incomplete descriptor containing
// just the Field field, which defines the extension's field number.
func ExtensionDescs(pb Message) ([]*ExtensionDesc, error) {
	epb, err := extendable(pb)
	if err != nil {
		return nil, err
	}
	registeredExtensions := RegisteredExtensions(pb)

	emap, mu := epb.extensionsRead()
	if emap == nil {
		return nil, nil
	}
	mu.Lock()
	defer mu.Unlock()
	extensions := make([]*ExtensionDesc, 0, len(emap))
	for extid, e := range emap {
		desc := e.desc
		if desc == nil {
			desc = registeredExtensions[extid]
			if desc == nil {
				desc = &ExtensionDesc{Field: extid}
			}
		}

		extensions = append(extensions, desc)
	}
	return extensions, nil
}

// SetExtension sets the specified extension of pb to the specified value.
func SetExtension(pb Message, extension *ExtensionDesc, value interface{}) error {
	if epb, ok := pb.(extensionsBytes); ok {
		ClearExtension(pb, extension)
		newb, err := encodeExtension(extension, value)
		if err != nil {
			return err
		}
		bb := epb.GetExtensions()
		*bb = append(*bb, newb...)
		return nil
	}
	epb, err := extendable(pb)
	if err != nil {
		return err
	}
	if err := checkExtensionTypes(epb, extension); err != nil {
		return err
	}
	typ := reflect.TypeOf(extension.ExtensionType)
	if typ != reflect.TypeOf(value) {
		return fmt.Errorf("proto: bad extension value type. got: %T, want: %T", value, extension.ExtensionType)
	}
	// nil extension values need to be caught early, because the
	// encoder can't distinguish an ErrNil due to a nil extension
	// from an ErrNil due to a missing field. Extensions are
	// always optional, so the encoder would just swallow the error
	// and drop all the extensions from the encoded message.
	if reflect.ValueOf(value).IsNil() {
		return fmt.Errorf("proto: SetExtension called with nil value of type %T", value)
	}

	extmap := epb.extensionsWrite()
	extmap[extension.Field] = Extension{desc: extension, value: value}
	return nil
}

// ClearAllExtensions clears all extensions from pb.
func ClearAllExtensions(pb Message) {
	if epb, doki := pb.(extensionsBytes); doki {
		ext := epb.GetExtensions()
		*ext = []byte{}
		return
	}
	epb, err := extendable(pb)
	if err != nil {
		return
	}
	m := epb.extensionsWrite()
	for k := range m {
		delete(m, k)
	}
}

// A global registry of extensions.
// The generated code will register the generated descriptors by calling RegisterExtension.

var extensionMaps = make(map[reflect.Type]map[int32]*ExtensionDesc)

// RegisterExtension is called from the generated code.
func RegisterExtension(desc *ExtensionDesc) {
	st := reflect.TypeOf(desc.ExtendedType).Elem()
	m := extensionMaps[st]
	if m == nil {
		m = make(map[int32]*ExtensionDesc)
		extensionMaps[st] = m
	}
	if _, ok := m[desc.Field]; ok {
		panic("proto: duplicate extension registered: " + st.String() + " " + strconv.Itoa(int(desc.Field)))
	}
	m[desc.Field] = desc
}

// RegisteredExtensions returns a map of the registered extensions of a
// protocol buffer struct, indexed by the extension number.
// The argument pb should be a nil pointer to the struct type.
func RegisteredExtensions(pb Message) map[int32]*ExtensionDesc {
	return extensionMaps[reflect.TypeOf(pb).Elem()]
}
  0707010000064B000081A4000000000000000000000001645E367C000026F1000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/extensions_gogo.go  // Protocol Buffers for Go with Gadgets
//
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package proto

import (
	"bytes"
	"errors"
	"fmt"
	"io"
	"reflect"
	"sort"
	"strings"
	"sync"
)

type extensionsBytes interface {
	Message
	ExtensionRangeArray() []ExtensionRange
	GetExtensions() *[]byte
}

type slowExtensionAdapter struct {
	extensionsBytes
}

func (s slowExtensionAdapter) extensionsWrite() map[int32]Extension {
	panic("Please report a bug to github.com/gogo/protobuf if you see this message: Writing extensions is not supported for extensions stored in a byte slice field.")
}

func (s slowExtensionAdapter) extensionsRead() (map[int32]Extension, sync.Locker) {
	b := s.GetExtensions()
	m, err := BytesToExtensionsMap(*b)
	if err != nil {
		panic(err)
	}
	return m, notLocker{}
}

func GetBoolExtension(pb Message, extension *ExtensionDesc, ifnotset bool) bool {
	if reflect.ValueOf(pb).IsNil() {
		return ifnotset
	}
	value, err := GetExtension(pb, extension)
	if err != nil {
		return ifnotset
	}
	if value == nil {
		return ifnotset
	}
	if value.(*bool) == nil {
		return ifnotset
	}
	return *(value.(*bool))
}

func (this *Extension) Equal(that *Extension) bool {
	if err := this.Encode(); err != nil {
		return false
	}
	if err := that.Encode(); err != nil {
		return false
	}
	return bytes.Equal(this.enc, that.enc)
}

func (this *Extension) Compare(that *Extension) int {
	if err := this.Encode(); err != nil {
		return 1
	}
	if err := that.Encode(); err != nil {
		return -1
	}
	return bytes.Compare(this.enc, that.enc)
}

func SizeOfInternalExtension(m extendableProto) (n int) {
	info := getMarshalInfo(reflect.TypeOf(m))
	return info.sizeV1Extensions(m.extensionsWrite())
}

type sortableMapElem struct {
	field int32
	ext   Extension
}

func newSortableExtensionsFromMap(m map[int32]Extension) sortableExtensions {
	s := make(sortableExtensions, 0, len(m))
	for k, v := range m {
		s = append(s, &sortableMapElem{field: k, ext: v})
	}
	return s
}

type sortableExtensions []*sortableMapElem

func (this sortableExtensions) Len() int { return len(this) }

func (this sortableExtensions) Swap(i, j int) { this[i], this[j] = this[j], this[i] }

func (this sortableExtensions) Less(i, j int) bool { return this[i].field < this[j].field }

func (this sortableExtensions) String() string {
	sort.Sort(this)
	ss := make([]string, len(this))
	for i := range this {
		ss[i] = fmt.Sprintf("%d: %v", this[i].field, this[i].ext)
	}
	return "map[" + strings.Join(ss, ",") + "]"
}

func StringFromInternalExtension(m extendableProto) string {
	return StringFromExtensionsMap(m.extensionsWrite())
}

func StringFromExtensionsMap(m map[int32]Extension) string {
	return newSortableExtensionsFromMap(m).String()
}

func StringFromExtensionsBytes(ext []byte) string {
	m, err := BytesToExtensionsMap(ext)
	if err != nil {
		panic(err)
	}
	return StringFromExtensionsMap(m)
}

func EncodeInternalExtension(m extendableProto, data []byte) (n int, err error) {
	return EncodeExtensionMap(m.extensionsWrite(), data)
}

func EncodeInternalExtensionBackwards(m extendableProto, data []byte) (n int, err error) {
	return EncodeExtensionMapBackwards(m.extensionsWrite(), data)
}

func EncodeExtensionMap(m map[int32]Extension, data []byte) (n int, err error) {
	o := 0
	for _, e := range m {
		if err := e.Encode(); err != nil {
			return 0, err
		}
		n := copy(data[o:], e.enc)
		if n != len(e.enc) {
			return 0, io.ErrShortBuffer
		}
		o += n
	}
	return o, nil
}

func EncodeExtensionMapBackwards(m map[int32]Extension, data []byte) (n int, err error) {
	o := 0
	end := len(data)
	for _, e := range m {
		if err := e.Encode(); err != nil {
			return 0, err
		}
		n := copy(data[end-len(e.enc):], e.enc)
		if n != len(e.enc) {
			return 0, io.ErrShortBuffer
		}
		end -= n
		o += n
	}
	return o, nil
}

func GetRawExtension(m map[int32]Extension, id int32) ([]byte, error) {
	e := m[id]
	if err := e.Encode(); err != nil {
		return nil, err
	}
	return e.enc, nil
}

func size(buf []byte, wire int) (int, error) {
	switch wire {
	case WireVarint:
		_, n := DecodeVarint(buf)
		return n, nil
	case WireFixed64:
		return 8, nil
	case WireBytes:
		v, n := DecodeVarint(buf)
		return int(v) + n, nil
	case WireFixed32:
		return 4, nil
	case WireStartGroup:
		offset := 0
		for {
			u, n := DecodeVarint(buf[offset:])
			fwire := int(u & 0x7)
			offset += n
			if fwire == WireEndGroup {
				return offset, nil
			}
			s, err := size(buf[offset:], wire)
			if err != nil {
				return 0, err
			}
			offset += s
		}
	}
	return 0, fmt.Errorf("proto: can't get size for unknown wire type %d", wire)
}

func BytesToExtensionsMap(buf []byte) (map[int32]Extension, error) {
	m := make(map[int32]Extension)
	i := 0
	for i < len(buf) {
		tag, n := DecodeVarint(buf[i:])
		if n <= 0 {
			return nil, fmt.Errorf("unable to decode varint")
		}
		fieldNum := int32(tag >> 3)
		wireType := int(tag & 0x7)
		l, err := size(buf[i+n:], wireType)
		if err != nil {
			return nil, err
		}
		end := i + int(l) + n
		m[int32(fieldNum)] = Extension{enc: buf[i:end]}
		i = end
	}
	return m, nil
}

func NewExtension(e []byte) Extension {
	ee := Extension{enc: make([]byte, len(e))}
	copy(ee.enc, e)
	return ee
}

func AppendExtension(e Message, tag int32, buf []byte) {
	if ee, eok := e.(extensionsBytes); eok {
		ext := ee.GetExtensions()
		*ext = append(*ext, buf...)
		return
	}
	if ee, eok := e.(extendableProto); eok {
		m := ee.extensionsWrite()
		ext := m[int32(tag)] // may be missing
		ext.enc = append(ext.enc, buf...)
		m[int32(tag)] = ext
	}
}

func encodeExtension(extension *ExtensionDesc, value interface{}) ([]byte, error) {
	u := getMarshalInfo(reflect.TypeOf(extension.ExtendedType))
	ei := u.getExtElemInfo(extension)
	v := value
	p := toAddrPointer(&v, ei.isptr)
	siz := ei.sizer(p, SizeVarint(ei.wiretag))
	buf := make([]byte, 0, siz)
	return ei.marshaler(buf, p, ei.wiretag, false)
}

func decodeExtensionFromBytes(extension *ExtensionDesc, buf []byte) (interface{}, error) {
	o := 0
	for o < len(buf) {
		tag, n := DecodeVarint((buf)[o:])
		fieldNum := int32(tag >> 3)
		wireType := int(tag & 0x7)
		if o+n > len(buf) {
			return nil, fmt.Errorf("unable to decode extension")
		}
		l, err := size((buf)[o+n:], wireType)
		if err != nil {
			return nil, err
		}
		if int32(fieldNum) == extension.Field {
			if o+n+l > len(buf) {
				return nil, fmt.Errorf("unable to decode extension")
			}
			v, err := decodeExtension((buf)[o:o+n+l], extension)
			if err != nil {
				return nil, err
			}
			return v, nil
		}
		o += n + l
	}
	return defaultExtensionValue(extension)
}

func (this *Extension) Encode() error {
	if this.enc == nil {
		var err error
		this.enc, err = encodeExtension(this.desc, this.value)
		if err != nil {
			return err
		}
	}
	return nil
}

func (this Extension) GoString() string {
	if err := this.Encode(); err != nil {
		return fmt.Sprintf("error encoding extension: %v", err)
	}
	return fmt.Sprintf("proto.NewExtension(%#v)", this.enc)
}

func SetUnsafeExtension(pb Message, fieldNum int32, value interface{}) error {
	typ := reflect.TypeOf(pb).Elem()
	ext, ok := extensionMaps[typ]
	if !ok {
		return fmt.Errorf("proto: bad extended type; %s is not extendable", typ.String())
	}
	desc, ok := ext[fieldNum]
	if !ok {
		return errors.New("proto: bad extension number; not in declared ranges")
	}
	return SetExtension(pb, desc, value)
}

func GetUnsafeExtension(pb Message, fieldNum int32) (interface{}, error) {
	typ := reflect.TypeOf(pb).Elem()
	ext, ok := extensionMaps[typ]
	if !ok {
		return nil, fmt.Errorf("proto: bad extended type; %s is not extendable", typ.String())
	}
	desc, ok := ext[fieldNum]
	if !ok {
		return nil, fmt.Errorf("unregistered field number %d", fieldNum)
	}
	return GetExtension(pb, desc)
}

func NewUnsafeXXX_InternalExtensions(m map[int32]Extension) XXX_InternalExtensions {
	x := &XXX_InternalExtensions{
		p: new(struct {
			mu           sync.Mutex
			extensionMap map[int32]Extension
		}),
	}
	x.p.extensionMap = m
	return *x
}

func GetUnsafeExtensionsMap(extendable Message) map[int32]Extension {
	pb := extendable.(extendableProto)
	return pb.extensionsWrite()
}

func deleteExtension(pb extensionsBytes, theFieldNum int32, offset int) int {
	ext := pb.GetExtensions()
	for offset < len(*ext) {
		tag, n1 := DecodeVarint((*ext)[offset:])
		fieldNum := int32(tag >> 3)
		wireType := int(tag & 0x7)
		n2, err := size((*ext)[offset+n1:], wireType)
		if err != nil {
			panic(err)
		}
		newOffset := offset + n1 + n2
		if fieldNum == theFieldNum {
			*ext = append((*ext)[:offset], (*ext)[newOffset:]...)
			return offset
		}
		offset = newOffset
	}
	return -1
}
   0707010000064C000081A4000000000000000000000001645E367C00006994000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/lib.go  // Go support for Protocol Buffers - Google's data interchange format
//
// Copyright 2010 The Go Authors.  All rights reserved.
// https://github.com/golang/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

/*
Package proto converts data structures to and from the wire format of
protocol buffers.  It works in concert with the Go source code generated
for .proto files by the protocol compiler.

A summary of the properties of the protocol buffer interface
for a protocol buffer variable v:

  - Names are turned from camel_case to CamelCase for export.
  - There are no methods on v to set fields; just treat
	them as structure fields.
  - There are getters that return a field's value if set,
	and return the field's default value if unset.
	The getters work even if the receiver is a nil message.
  - The zero value for a struct is its correct initialization state.
	All desired fields must be set before marshaling.
  - A Reset() method will restore a protobuf struct to its zero state.
  - Non-repeated fields are pointers to the values; nil means unset.
	That is, optional or required field int32 f becomes F *int32.
  - Repeated fields are slices.
  - Helper functions are available to aid the setting of fields.
	msg.Foo = proto.String("hello") // set field
  - Constants are defined to hold the default values of all fields that
	have them.  They have the form Default_StructName_FieldName.
	Because the getter methods handle defaulted values,
	direct use of these constants should be rare.
  - Enums are given type names and maps from names to values.
	Enum values are prefixed by the enclosing message's name, or by the
	enum's type name if it is a top-level enum. Enum types have a String
	method, and a Enum method to assist in message construction.
  - Nested messages, groups and enums have type names prefixed with the name of
	the surrounding message type.
  - Extensions are given descriptor names that start with E_,
	followed by an underscore-delimited list of the nested messages
	that contain it (if any) followed by the CamelCased name of the
	extension field itself.  HasExtension, ClearExtension, GetExtension
	and SetExtension are functions for manipulating extensions.
  - Oneof field sets are given a single field in their message,
	with distinguished wrapper types for each possible field value.
  - Marshal and Unmarshal are functions to encode and decode the wire format.

When the .proto file specifies `syntax="proto3"`, there are some differences:

  - Non-repeated fields of non-message type are values instead of pointers.
  - Enum types do not get an Enum method.

The simplest way to describe this is to see an example.
Given file test.proto, containing

	package example;

	enum FOO { X = 17; }

	message Test {
	  required string label = 1;
	  optional int32 type = 2 [default=77];
	  repeated int64 reps = 3;
	  optional group OptionalGroup = 4 {
	    required string RequiredField = 5;
	  }
	  oneof union {
	    int32 number = 6;
	    string name = 7;
	  }
	}

The resulting file, test.pb.go, is:

	package example

	import proto "github.com/gogo/protobuf/proto"
	import math "math"

	type FOO int32
	const (
		FOO_X FOO = 17
	)
	var FOO_name = map[int32]string{
		17: "X",
	}
	var FOO_value = map[string]int32{
		"X": 17,
	}

	func (x FOO) Enum() *FOO {
		p := new(FOO)
		*p = x
		return p
	}
	func (x FOO) String() string {
		return proto.EnumName(FOO_name, int32(x))
	}
	func (x *FOO) UnmarshalJSON(data []byte) error {
		value, err := proto.UnmarshalJSONEnum(FOO_value, data)
		if err != nil {
			return err
		}
		*x = FOO(value)
		return nil
	}

	type Test struct {
		Label         *string             `protobuf:"bytes,1,req,name=label" json:"label,omitempty"`
		Type          *int32              `protobuf:"varint,2,opt,name=type,def=77" json:"type,omitempty"`
		Reps          []int64             `protobuf:"varint,3,rep,name=reps" json:"reps,omitempty"`
		Optionalgroup *Test_OptionalGroup `protobuf:"group,4,opt,name=OptionalGroup" json:"optionalgroup,omitempty"`
		// Types that are valid to be assigned to Union:
		//	*Test_Number
		//	*Test_Name
		Union            isTest_Union `protobuf_oneof:"union"`
		XXX_unrecognized []byte       `json:"-"`
	}
	func (m *Test) Reset()         { *m = Test{} }
	func (m *Test) String() string { return proto.CompactTextString(m) }
	func (*Test) ProtoMessage() {}

	type isTest_Union interface {
		isTest_Union()
	}

	type Test_Number struct {
		Number int32 `protobuf:"varint,6,opt,name=number"`
	}
	type Test_Name struct {
		Name string `protobuf:"bytes,7,opt,name=name"`
	}

	func (*Test_Number) isTest_Union() {}
	func (*Test_Name) isTest_Union()   {}

	func (m *Test) GetUnion() isTest_Union {
		if m != nil {
			return m.Union
		}
		return nil
	}
	const Default_Test_Type int32 = 77

	func (m *Test) GetLabel() string {
		if m != nil && m.Label != nil {
			return *m.Label
		}
		return ""
	}

	func (m *Test) GetType() int32 {
		if m != nil && m.Type != nil {
			return *m.Type
		}
		return Default_Test_Type
	}

	func (m *Test) GetOptionalgroup() *Test_OptionalGroup {
		if m != nil {
			return m.Optionalgroup
		}
		return nil
	}

	type Test_OptionalGroup struct {
		RequiredField *string `protobuf:"bytes,5,req" json:"RequiredField,omitempty"`
	}
	func (m *Test_OptionalGroup) Reset()         { *m = Test_OptionalGroup{} }
	func (m *Test_OptionalGroup) String() string { return proto.CompactTextString(m) }

	func (m *Test_OptionalGroup) GetRequiredField() string {
		if m != nil && m.RequiredField != nil {
			return *m.RequiredField
		}
		return ""
	}

	func (m *Test) GetNumber() int32 {
		if x, ok := m.GetUnion().(*Test_Number); ok {
			return x.Number
		}
		return 0
	}

	func (m *Test) GetName() string {
		if x, ok := m.GetUnion().(*Test_Name); ok {
			return x.Name
		}
		return ""
	}

	func init() {
		proto.RegisterEnum("example.FOO", FOO_name, FOO_value)
	}

To create and play with a Test object:

	package main

	import (
		"log"

		"github.com/gogo/protobuf/proto"
		pb "./example.pb"
	)

	func main() {
		test := &pb.Test{
			Label: proto.String("hello"),
			Type:  proto.Int32(17),
			Reps:  []int64{1, 2, 3},
			Optionalgroup: &pb.Test_OptionalGroup{
				RequiredField: proto.String("good bye"),
			},
			Union: &pb.Test_Name{"fred"},
		}
		data, err := proto.Marshal(test)
		if err != nil {
			log.Fatal("marshaling error: ", err)
		}
		newTest := &pb.Test{}
		err = proto.Unmarshal(data, newTest)
		if err != nil {
			log.Fatal("unmarshaling error: ", err)
		}
		// Now test and newTest contain the same data.
		if test.GetLabel() != newTest.GetLabel() {
			log.Fatalf("data mismatch %q != %q", test.GetLabel(), newTest.GetLabel())
		}
		// Use a type switch to determine which oneof was set.
		switch u := test.Union.(type) {
		case *pb.Test_Number: // u.Number contains the number.
		case *pb.Test_Name: // u.Name contains the string.
		}
		// etc.
	}
*/
package proto

import (
	"encoding/json"
	"fmt"
	"log"
	"reflect"
	"sort"
	"strconv"
	"sync"
)

// RequiredNotSetError is an error type returned by either Marshal or Unmarshal.
// Marshal reports this when a required field is not initialized.
// Unmarshal reports this when a required field is missing from the wire data.
type RequiredNotSetError struct{ field string }

func (e *RequiredNotSetError) Error() string {
	if e.field == "" {
		return fmt.Sprintf("proto: required field not set")
	}
	return fmt.Sprintf("proto: required field %q not set", e.field)
}
func (e *RequiredNotSetError) RequiredNotSet() bool {
	return true
}

type invalidUTF8Error struct{ field string }

func (e *invalidUTF8Error) Error() string {
	if e.field == "" {
		return "proto: invalid UTF-8 detected"
	}
	return fmt.Sprintf("proto: field %q contains invalid UTF-8", e.field)
}
func (e *invalidUTF8Error) InvalidUTF8() bool {
	return true
}

// errInvalidUTF8 is a sentinel error to identify fields with invalid UTF-8.
// This error should not be exposed to the external API as such errors should
// be recreated with the field information.
var errInvalidUTF8 = &invalidUTF8Error{}

// isNonFatal reports whether the error is either a RequiredNotSet error
// or a InvalidUTF8 error.
func isNonFatal(err error) bool {
	if re, ok := err.(interface{ RequiredNotSet() bool }); ok && re.RequiredNotSet() {
		return true
	}
	if re, ok := err.(interface{ InvalidUTF8() bool }); ok && re.InvalidUTF8() {
		return true
	}
	return false
}

type nonFatal struct{ E error }

// Merge merges err into nf and reports whether it was successful.
// Otherwise it returns false for any fatal non-nil errors.
func (nf *nonFatal) Merge(err error) (ok bool) {
	if err == nil {
		return true // not an error
	}
	if !isNonFatal(err) {
		return false // fatal error
	}
	if nf.E == nil {
		nf.E = err // store first instance of non-fatal error
	}
	return true
}

// Message is implemented by generated protocol buffer messages.
type Message interface {
	Reset()
	String() string
	ProtoMessage()
}

// A Buffer is a buffer manager for marshaling and unmarshaling
// protocol buffers.  It may be reused between invocations to
// reduce memory usage.  It is not necessary to use a Buffer;
// the global functions Marshal and Unmarshal create a
// temporary Buffer and are fine for most applications.
type Buffer struct {
	buf   []byte // encode/decode byte stream
	index int    // read point

	deterministic bool
}

// NewBuffer allocates a new Buffer and initializes its internal data to
// the contents of the argument slice.
func NewBuffer(e []byte) *Buffer {
	return &Buffer{buf: e}
}

// Reset resets the Buffer, ready for marshaling a new protocol buffer.
func (p *Buffer) Reset() {
	p.buf = p.buf[0:0] // for reading/writing
	p.index = 0        // for reading
}

// SetBuf replaces the internal buffer with the slice,
// ready for unmarshaling the contents of the slice.
func (p *Buffer) SetBuf(s []byte) {
	p.buf = s
	p.index = 0
}

// Bytes returns the contents of the Buffer.
func (p *Buffer) Bytes() []byte { return p.buf }

// SetDeterministic sets whether to use deterministic serialization.
//
// Deterministic serialization guarantees that for a given binary, equal
// messages will always be serialized to the same bytes. This implies:
//
//   - Repeated serialization of a message will return the same bytes.
//   - Different processes of the same binary (which may be executing on
//     different machines) will serialize equal messages to the same bytes.
//
// Note that the deterministic serialization is NOT canonical across
// languages. It is not guaranteed to remain stable over time. It is unstable
// across different builds with schema changes due to unknown fields.
// Users who need canonical serialization (e.g., persistent storage in a
// canonical form, fingerprinting, etc.) should define their own
// canonicalization specification and implement their own serializer rather
// than relying on this API.
//
// If deterministic serialization is requested, map entries will be sorted
// by keys in lexographical order. This is an implementation detail and
// subject to change.
func (p *Buffer) SetDeterministic(deterministic bool) {
	p.deterministic = deterministic
}

/*
 * Helper routines for simplifying the creation of optional fields of basic type.
 */

// Bool is a helper routine that allocates a new bool value
// to store v and returns a pointer to it.
func Bool(v bool) *bool {
	return &v
}

// Int32 is a helper routine that allocates a new int32 value
// to store v and returns a pointer to it.
func Int32(v int32) *int32 {
	return &v
}

// Int is a helper routine that allocates a new int32 value
// to store v and returns a pointer to it, but unlike Int32
// its argument value is an int.
func Int(v int) *int32 {
	p := new(int32)
	*p = int32(v)
	return p
}

// Int64 is a helper routine that allocates a new int64 value
// to store v and returns a pointer to it.
func Int64(v int64) *int64 {
	return &v
}

// Float32 is a helper routine that allocates a new float32 value
// to store v and returns a pointer to it.
func Float32(v float32) *float32 {
	return &v
}

// Float64 is a helper routine that allocates a new float64 value
// to store v and returns a pointer to it.
func Float64(v float64) *float64 {
	return &v
}

// Uint32 is a helper routine that allocates a new uint32 value
// to store v and returns a pointer to it.
func Uint32(v uint32) *uint32 {
	return &v
}

// Uint64 is a helper routine that allocates a new uint64 value
// to store v and returns a pointer to it.
func Uint64(v uint64) *uint64 {
	return &v
}

// String is a helper routine that allocates a new string value
// to store v and returns a pointer to it.
func String(v string) *string {
	return &v
}

// EnumName is a helper function to simplify printing protocol buffer enums
// by name.  Given an enum map and a value, it returns a useful string.
func EnumName(m map[int32]string, v int32) string {
	s, ok := m[v]
	if ok {
		return s
	}
	return strconv.Itoa(int(v))
}

// UnmarshalJSONEnum is a helper function to simplify recovering enum int values
// from their JSON-encoded representation. Given a map from the enum's symbolic
// names to its int values, and a byte buffer containing the JSON-encoded
// value, it returns an int32 that can be cast to the enum type by the caller.
//
// The function can deal with both JSON representations, numeric and symbolic.
func UnmarshalJSONEnum(m map[string]int32, data []byte, enumName string) (int32, error) {
	if data[0] == '"' {
		// New style: enums are strings.
		var repr string
		if err := json.Unmarshal(data, &repr); err != nil {
			return -1, err
		}
		val, ok := m[repr]
		if !ok {
			return 0, fmt.Errorf("unrecognized enum %s value %q", enumName, repr)
		}
		return val, nil
	}
	// Old style: enums are ints.
	var val int32
	if err := json.Unmarshal(data, &val); err != nil {
		return 0, fmt.Errorf("cannot unmarshal %#q into enum %s", data, enumName)
	}
	return val, nil
}

// DebugPrint dumps the encoded data in b in a debugging format with a header
// including the string s. Used in testing but made available for general debugging.
func (p *Buffer) DebugPrint(s string, b []byte) {
	var u uint64

	obuf := p.buf
	sindex := p.index
	p.buf = b
	p.index = 0
	depth := 0

	fmt.Printf("\n--- %s ---\n", s)

out:
	for {
		for i := 0; i < depth; i++ {
			fmt.Print("  ")
		}

		index := p.index
		if index == len(p.buf) {
			break
		}

		op, err := p.DecodeVarint()
		if err != nil {
			fmt.Printf("%3d: fetching op err %v\n", index, err)
			break out
		}
		tag := op >> 3
		wire := op & 7

		switch wire {
		default:
			fmt.Printf("%3d: t=%3d unknown wire=%d\n",
				index, tag, wire)
			break out

		case WireBytes:
			var r []byte

			r, err = p.DecodeRawBytes(false)
			if err != nil {
				break out
			}
			fmt.Printf("%3d: t=%3d bytes [%d]", index, tag, len(r))
			if len(r) <= 6 {
				for i := 0; i < len(r); i++ {
					fmt.Printf(" %.2x", r[i])
				}
			} else {
				for i := 0; i < 3; i++ {
					fmt.Printf(" %.2x", r[i])
				}
				fmt.Printf(" ..")
				for i := len(r) - 3; i < len(r); i++ {
					fmt.Printf(" %.2x", r[i])
				}
			}
			fmt.Printf("\n")

		case WireFixed32:
			u, err = p.DecodeFixed32()
			if err != nil {
				fmt.Printf("%3d: t=%3d fix32 err %v\n", index, tag, err)
				break out
			}
			fmt.Printf("%3d: t=%3d fix32 %d\n", index, tag, u)

		case WireFixed64:
			u, err = p.DecodeFixed64()
			if err != nil {
				fmt.Printf("%3d: t=%3d fix64 err %v\n", index, tag, err)
				break out
			}
			fmt.Printf("%3d: t=%3d fix64 %d\n", index, tag, u)

		case WireVarint:
			u, err = p.DecodeVarint()
			if err != nil {
				fmt.Printf("%3d: t=%3d varint err %v\n", index, tag, err)
				break out
			}
			fmt.Printf("%3d: t=%3d varint %d\n", index, tag, u)

		case WireStartGroup:
			fmt.Printf("%3d: t=%3d start\n", index, tag)
			depth++

		case WireEndGroup:
			depth--
			fmt.Printf("%3d: t=%3d end\n", index, tag)
		}
	}

	if depth != 0 {
		fmt.Printf("%3d: start-end not balanced %d\n", p.index, depth)
	}
	fmt.Printf("\n")

	p.buf = obuf
	p.index = sindex
}

// SetDefaults sets unset protocol buffer fields to their default values.
// It only modifies fields that are both unset and have defined defaults.
// It recursively sets default values in any non-nil sub-messages.
func SetDefaults(pb Message) {
	setDefaults(reflect.ValueOf(pb), true, false)
}

// v is a struct.
func setDefaults(v reflect.Value, recur, zeros bool) {
	if v.Kind() == reflect.Ptr {
		v = v.Elem()
	}

	defaultMu.RLock()
	dm, ok := defaults[v.Type()]
	defaultMu.RUnlock()
	if !ok {
		dm = buildDefaultMessage(v.Type())
		defaultMu.Lock()
		defaults[v.Type()] = dm
		defaultMu.Unlock()
	}

	for _, sf := range dm.scalars {
		f := v.Field(sf.index)
		if !f.IsNil() {
			// field already set
			continue
		}
		dv := sf.value
		if dv == nil && !zeros {
			// no explicit default, and don't want to set zeros
			continue
		}
		fptr := f.Addr().Interface() // **T
		// TODO: Consider batching the allocations we do here.
		switch sf.kind {
		case reflect.Bool:
			b := new(bool)
			if dv != nil {
				*b = dv.(bool)
			}
			*(fptr.(**bool)) = b
		case reflect.Float32:
			f := new(float32)
			if dv != nil {
				*f = dv.(float32)
			}
			*(fptr.(**float32)) = f
		case reflect.Float64:
			f := new(float64)
			if dv != nil {
				*f = dv.(float64)
			}
			*(fptr.(**float64)) = f
		case reflect.Int32:
			// might be an enum
			if ft := f.Type(); ft != int32PtrType {
				// enum
				f.Set(reflect.New(ft.Elem()))
				if dv != nil {
					f.Elem().SetInt(int64(dv.(int32)))
				}
			} else {
				// int32 field
				i := new(int32)
				if dv != nil {
					*i = dv.(int32)
				}
				*(fptr.(**int32)) = i
			}
		case reflect.Int64:
			i := new(int64)
			if dv != nil {
				*i = dv.(int64)
			}
			*(fptr.(**int64)) = i
		case reflect.String:
			s := new(string)
			if dv != nil {
				*s = dv.(string)
			}
			*(fptr.(**string)) = s
		case reflect.Uint8:
			// exceptional case: []byte
			var b []byte
			if dv != nil {
				db := dv.([]byte)
				b = make([]byte, len(db))
				copy(b, db)
			} else {
				b = []byte{}
			}
			*(fptr.(*[]byte)) = b
		case reflect.Uint32:
			u := new(uint32)
			if dv != nil {
				*u = dv.(uint32)
			}
			*(fptr.(**uint32)) = u
		case reflect.Uint64:
			u := new(uint64)
			if dv != nil {
				*u = dv.(uint64)
			}
			*(fptr.(**uint64)) = u
		default:
			log.Printf("proto: can't set default for field %v (sf.kind=%v)", f, sf.kind)
		}
	}

	for _, ni := range dm.nested {
		f := v.Field(ni)
		// f is *T or T or []*T or []T
		switch f.Kind() {
		case reflect.Struct:
			setDefaults(f, recur, zeros)

		case reflect.Ptr:
			if f.IsNil() {
				continue
			}
			setDefaults(f, recur, zeros)

		case reflect.Slice:
			for i := 0; i < f.Len(); i++ {
				e := f.Index(i)
				if e.Kind() == reflect.Ptr && e.IsNil() {
					continue
				}
				setDefaults(e, recur, zeros)
			}

		case reflect.Map:
			for _, k := range f.MapKeys() {
				e := f.MapIndex(k)
				if e.IsNil() {
					continue
				}
				setDefaults(e, recur, zeros)
			}
		}
	}
}

var (
	// defaults maps a protocol buffer struct type to a slice of the fields,
	// with its scalar fields set to their proto-declared non-zero default values.
	defaultMu sync.RWMutex
	defaults  = make(map[reflect.Type]defaultMessage)

	int32PtrType = reflect.TypeOf((*int32)(nil))
)

// defaultMessage represents information about the default values of a message.
type defaultMessage struct {
	scalars []scalarField
	nested  []int // struct field index of nested messages
}

type scalarField struct {
	index int          // struct field index
	kind  reflect.Kind // element type (the T in *T or []T)
	value interface{}  // the proto-declared default value, or nil
}

// t is a struct type.
func buildDefaultMessage(t reflect.Type) (dm defaultMessage) {
	sprop := GetProperties(t)
	for _, prop := range sprop.Prop {
		fi, ok := sprop.decoderTags.get(prop.Tag)
		if !ok {
			// XXX_unrecognized
			continue
		}
		ft := t.Field(fi).Type

		sf, nested, err := fieldDefault(ft, prop)
		switch {
		case err != nil:
			log.Print(err)
		case nested:
			dm.nested = append(dm.nested, fi)
		case sf != nil:
			sf.index = fi
			dm.scalars = append(dm.scalars, *sf)
		}
	}

	return dm
}

// fieldDefault returns the scalarField for field type ft.
// sf will be nil if the field can not have a default.
// nestedMessage will be true if this is a nested message.
// Note that sf.index is not set on return.
func fieldDefault(ft reflect.Type, prop *Properties) (sf *scalarField, nestedMessage bool, err error) {
	var canHaveDefault bool
	switch ft.Kind() {
	case reflect.Struct:
		nestedMessage = true // non-nullable

	case reflect.Ptr:
		if ft.Elem().Kind() == reflect.Struct {
			nestedMessage = true
		} else {
			canHaveDefault = true // proto2 scalar field
		}

	case reflect.Slice:
		switch ft.Elem().Kind() {
		case reflect.Ptr, reflect.Struct:
			nestedMessage = true // repeated message
		case reflect.Uint8:
			canHaveDefault = true // bytes field
		}

	case reflect.Map:
		if ft.Elem().Kind() == reflect.Ptr {
			nestedMessage = true // map with message values
		}
	}

	if !canHaveDefault {
		if nestedMessage {
			return nil, true, nil
		}
		return nil, false, nil
	}

	// We now know that ft is a pointer or slice.
	sf = &scalarField{kind: ft.Elem().Kind()}

	// scalar fields without defaults
	if !prop.HasDefault {
		return sf, false, nil
	}

	// a scalar field: either *T or []byte
	switch ft.Elem().Kind() {
	case reflect.Bool:
		x, err := strconv.ParseBool(prop.Default)
		if err != nil {
			return nil, false, fmt.Errorf("proto: bad default bool %q: %v", prop.Default, err)
		}
		sf.value = x
	case reflect.Float32:
		x, err := strconv.ParseFloat(prop.Default, 32)
		if err != nil {
			return nil, false, fmt.Errorf("proto: bad default float32 %q: %v", prop.Default, err)
		}
		sf.value = float32(x)
	case reflect.Float64:
		x, err := strconv.ParseFloat(prop.Default, 64)
		if err != nil {
			return nil, false, fmt.Errorf("proto: bad default float64 %q: %v", prop.Default, err)
		}
		sf.value = x
	case reflect.Int32:
		x, err := strconv.ParseInt(prop.Default, 10, 32)
		if err != nil {
			return nil, false, fmt.Errorf("proto: bad default int32 %q: %v", prop.Default, err)
		}
		sf.value = int32(x)
	case reflect.Int64:
		x, err := strconv.ParseInt(prop.Default, 10, 64)
		if err != nil {
			return nil, false, fmt.Errorf("proto: bad default int64 %q: %v", prop.Default, err)
		}
		sf.value = x
	case reflect.String:
		sf.value = prop.Default
	case reflect.Uint8:
		// []byte (not *uint8)
		sf.value = []byte(prop.Default)
	case reflect.Uint32:
		x, err := strconv.ParseUint(prop.Default, 10, 32)
		if err != nil {
			return nil, false, fmt.Errorf("proto: bad default uint32 %q: %v", prop.Default, err)
		}
		sf.value = uint32(x)
	case reflect.Uint64:
		x, err := strconv.ParseUint(prop.Default, 10, 64)
		if err != nil {
			return nil, false, fmt.Errorf("proto: bad default uint64 %q: %v", prop.Default, err)
		}
		sf.value = x
	default:
		return nil, false, fmt.Errorf("proto: unhandled def kind %v", ft.Elem().Kind())
	}

	return sf, false, nil
}

// mapKeys returns a sort.Interface to be used for sorting the map keys.
// Map fields may have key types of non-float scalars, strings and enums.
func mapKeys(vs []reflect.Value) sort.Interface {
	s := mapKeySorter{vs: vs}

	// Type specialization per https://developers.google.com/protocol-buffers/docs/proto#maps.
	if len(vs) == 0 {
		return s
	}
	switch vs[0].Kind() {
	case reflect.Int32, reflect.Int64:
		s.less = func(a, b reflect.Value) bool { return a.Int() < b.Int() }
	case reflect.Uint32, reflect.Uint64:
		s.less = func(a, b reflect.Value) bool { return a.Uint() < b.Uint() }
	case reflect.Bool:
		s.less = func(a, b reflect.Value) bool { return !a.Bool() && b.Bool() } // false < true
	case reflect.String:
		s.less = func(a, b reflect.Value) bool { return a.String() < b.String() }
	default:
		panic(fmt.Sprintf("unsupported map key type: %v", vs[0].Kind()))
	}

	return s
}

type mapKeySorter struct {
	vs   []reflect.Value
	less func(a, b reflect.Value) bool
}

func (s mapKeySorter) Len() int      { return len(s.vs) }
func (s mapKeySorter) Swap(i, j int) { s.vs[i], s.vs[j] = s.vs[j], s.vs[i] }
func (s mapKeySorter) Less(i, j int) bool {
	return s.less(s.vs[i], s.vs[j])
}

// isProto3Zero reports whether v is a zero proto3 value.
func isProto3Zero(v reflect.Value) bool {
	switch v.Kind() {
	case reflect.Bool:
		return !v.Bool()
	case reflect.Int32, reflect.Int64:
		return v.Int() == 0
	case reflect.Uint32, reflect.Uint64:
		return v.Uint() == 0
	case reflect.Float32, reflect.Float64:
		return v.Float() == 0
	case reflect.String:
		return v.String() == ""
	}
	return false
}

const (
	// ProtoPackageIsVersion3 is referenced from generated protocol buffer files
	// to assert that that code is compatible with this version of the proto package.
	GoGoProtoPackageIsVersion3 = true

	// ProtoPackageIsVersion2 is referenced from generated protocol buffer files
	// to assert that that code is compatible with this version of the proto package.
	GoGoProtoPackageIsVersion2 = true

	// ProtoPackageIsVersion1 is referenced from generated protocol buffer files
	// to assert that that code is compatible with this version of the proto package.
	GoGoProtoPackageIsVersion1 = true
)

// InternalMessageInfo is a type used internally by generated .pb.go files.
// This type is not intended to be used by non-generated code.
// This type is not subject to any compatibility guarantee.
type InternalMessageInfo struct {
	marshal   *marshalInfo
	unmarshal *unmarshalInfo
	merge     *mergeInfo
	discard   *discardInfo
}
0707010000064D000081A4000000000000000000000001645E367C000006D6000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/lib_gogo.go // Protocol Buffers for Go with Gadgets
//
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package proto

import (
	"encoding/json"
	"strconv"
)

type Sizer interface {
	Size() int
}

type ProtoSizer interface {
	ProtoSize() int
}

func MarshalJSONEnum(m map[int32]string, value int32) ([]byte, error) {
	s, ok := m[value]
	if !ok {
		s = strconv.Itoa(int(value))
	}
	return json.Marshal(s)
}
  0707010000064E000081A4000000000000000000000001645E367C000015F8000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/message_set.go  // Go support for Protocol Buffers - Google's data interchange format
//
// Copyright 2010 The Go Authors.  All rights reserved.
// https://github.com/golang/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package proto

/*
 * Support for message sets.
 */

import (
	"errors"
)

// errNoMessageTypeID occurs when a protocol buffer does not have a message type ID.
// A message type ID is required for storing a protocol buffer in a message set.
var errNoMessageTypeID = errors.New("proto does not have a message type ID")

// The first two types (_MessageSet_Item and messageSet)
// model what the protocol compiler produces for the following protocol message:
//   message MessageSet {
//     repeated group Item = 1 {
//       required int32 type_id = 2;
//       required string message = 3;
//     };
//   }
// That is the MessageSet wire format. We can't use a proto to generate these
// because that would introduce a circular dependency between it and this package.

type _MessageSet_Item struct {
	TypeId  *int32 `protobuf:"varint,2,req,name=type_id"`
	Message []byte `protobuf:"bytes,3,req,name=message"`
}

type messageSet struct {
	Item             []*_MessageSet_Item `protobuf:"group,1,rep"`
	XXX_unrecognized []byte
	// TODO: caching?
}

// Make sure messageSet is a Message.
var _ Message = (*messageSet)(nil)

// messageTypeIder is an interface satisfied by a protocol buffer type
// that may be stored in a MessageSet.
type messageTypeIder interface {
	MessageTypeId() int32
}

func (ms *messageSet) find(pb Message) *_MessageSet_Item {
	mti, ok := pb.(messageTypeIder)
	if !ok {
		return nil
	}
	id := mti.MessageTypeId()
	for _, item := range ms.Item {
		if *item.TypeId == id {
			return item
		}
	}
	return nil
}

func (ms *messageSet) Has(pb Message) bool {
	return ms.find(pb) != nil
}

func (ms *messageSet) Unmarshal(pb Message) error {
	if item := ms.find(pb); item != nil {
		return Unmarshal(item.Message, pb)
	}
	if _, ok := pb.(messageTypeIder); !ok {
		return errNoMessageTypeID
	}
	return nil // TODO: return error instead?
}

func (ms *messageSet) Marshal(pb Message) error {
	msg, err := Marshal(pb)
	if err != nil {
		return err
	}
	if item := ms.find(pb); item != nil {
		// reuse existing item
		item.Message = msg
		return nil
	}

	mti, ok := pb.(messageTypeIder)
	if !ok {
		return errNoMessageTypeID
	}

	mtid := mti.MessageTypeId()
	ms.Item = append(ms.Item, &_MessageSet_Item{
		TypeId:  &mtid,
		Message: msg,
	})
	return nil
}

func (ms *messageSet) Reset()         { *ms = messageSet{} }
func (ms *messageSet) String() string { return CompactTextString(ms) }
func (*messageSet) ProtoMessage()     {}

// Support for the message_set_wire_format message option.

func skipVarint(buf []byte) []byte {
	i := 0
	for ; buf[i]&0x80 != 0; i++ {
	}
	return buf[i+1:]
}

// unmarshalMessageSet decodes the extension map encoded in buf in the message set wire format.
// It is called by Unmarshal methods on protocol buffer messages with the message_set_wire_format option.
func unmarshalMessageSet(buf []byte, exts interface{}) error {
	var m map[int32]Extension
	switch exts := exts.(type) {
	case *XXX_InternalExtensions:
		m = exts.extensionsWrite()
	case map[int32]Extension:
		m = exts
	default:
		return errors.New("proto: not an extension map")
	}

	ms := new(messageSet)
	if err := Unmarshal(buf, ms); err != nil {
		return err
	}
	for _, item := range ms.Item {
		id := *item.TypeId
		msg := item.Message

		// Restore wire type and field number varint, plus length varint.
		// Be careful to preserve duplicate items.
		b := EncodeVarint(uint64(id)<<3 | WireBytes)
		if ext, ok := m[id]; ok {
			// Existing data; rip off the tag and length varint
			// so we join the new data correctly.
			// We can assume that ext.enc is set because we are unmarshaling.
			o := ext.enc[len(b):]   // skip wire type and field number
			_, n := DecodeVarint(o) // calculate length of length varint
			o = o[n:]               // skip length varint
			msg = append(o, msg...) // join old data and new data
		}
		b = append(b, EncodeVarint(uint64(len(msg)))...)
		b = append(b, msg...)

		m[id] = Extension{enc: b}
	}
	return nil
}
0707010000064F000081A4000000000000000000000001645E367C0000294C000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/pointer_reflect.go  // Go support for Protocol Buffers - Google's data interchange format
//
// Copyright 2012 The Go Authors.  All rights reserved.
// https://github.com/golang/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

// +build purego appengine js

// This file contains an implementation of proto field accesses using package reflect.
// It is slower than the code in pointer_unsafe.go but it avoids package unsafe and can
// be used on App Engine.

package proto

import (
	"reflect"
	"sync"
)

const unsafeAllowed = false

// A field identifies a field in a struct, accessible from a pointer.
// In this implementation, a field is identified by the sequence of field indices
// passed to reflect's FieldByIndex.
type field []int

// toField returns a field equivalent to the given reflect field.
func toField(f *reflect.StructField) field {
	return f.Index
}

// invalidField is an invalid field identifier.
var invalidField = field(nil)

// zeroField is a noop when calling pointer.offset.
var zeroField = field([]int{})

// IsValid reports whether the field identifier is valid.
func (f field) IsValid() bool { return f != nil }

// The pointer type is for the table-driven decoder.
// The implementation here uses a reflect.Value of pointer type to
// create a generic pointer. In pointer_unsafe.go we use unsafe
// instead of reflect to implement the same (but faster) interface.
type pointer struct {
	v reflect.Value
}

// toPointer converts an interface of pointer type to a pointer
// that points to the same target.
func toPointer(i *Message) pointer {
	return pointer{v: reflect.ValueOf(*i)}
}

// toAddrPointer converts an interface to a pointer that points to
// the interface data.
func toAddrPointer(i *interface{}, isptr bool) pointer {
	v := reflect.ValueOf(*i)
	u := reflect.New(v.Type())
	u.Elem().Set(v)
	return pointer{v: u}
}

// valToPointer converts v to a pointer.  v must be of pointer type.
func valToPointer(v reflect.Value) pointer {
	return pointer{v: v}
}

// offset converts from a pointer to a structure to a pointer to
// one of its fields.
func (p pointer) offset(f field) pointer {
	return pointer{v: p.v.Elem().FieldByIndex(f).Addr()}
}

func (p pointer) isNil() bool {
	return p.v.IsNil()
}

// grow updates the slice s in place to make it one element longer.
// s must be addressable.
// Returns the (addressable) new element.
func grow(s reflect.Value) reflect.Value {
	n, m := s.Len(), s.Cap()
	if n < m {
		s.SetLen(n + 1)
	} else {
		s.Set(reflect.Append(s, reflect.Zero(s.Type().Elem())))
	}
	return s.Index(n)
}

func (p pointer) toInt64() *int64 {
	return p.v.Interface().(*int64)
}
func (p pointer) toInt64Ptr() **int64 {
	return p.v.Interface().(**int64)
}
func (p pointer) toInt64Slice() *[]int64 {
	return p.v.Interface().(*[]int64)
}

var int32ptr = reflect.TypeOf((*int32)(nil))

func (p pointer) toInt32() *int32 {
	return p.v.Convert(int32ptr).Interface().(*int32)
}

// The toInt32Ptr/Slice methods don't work because of enums.
// Instead, we must use set/get methods for the int32ptr/slice case.
/*
	func (p pointer) toInt32Ptr() **int32 {
		return p.v.Interface().(**int32)
}
	func (p pointer) toInt32Slice() *[]int32 {
		return p.v.Interface().(*[]int32)
}
*/
func (p pointer) getInt32Ptr() *int32 {
	if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) {
		// raw int32 type
		return p.v.Elem().Interface().(*int32)
	}
	// an enum
	return p.v.Elem().Convert(int32PtrType).Interface().(*int32)
}
func (p pointer) setInt32Ptr(v int32) {
	// Allocate value in a *int32. Possibly convert that to a *enum.
	// Then assign it to a **int32 or **enum.
	// Note: we can convert *int32 to *enum, but we can't convert
	// **int32 to **enum!
	p.v.Elem().Set(reflect.ValueOf(&v).Convert(p.v.Type().Elem()))
}

// getInt32Slice copies []int32 from p as a new slice.
// This behavior differs from the implementation in pointer_unsafe.go.
func (p pointer) getInt32Slice() []int32 {
	if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) {
		// raw int32 type
		return p.v.Elem().Interface().([]int32)
	}
	// an enum
	// Allocate a []int32, then assign []enum's values into it.
	// Note: we can't convert []enum to []int32.
	slice := p.v.Elem()
	s := make([]int32, slice.Len())
	for i := 0; i < slice.Len(); i++ {
		s[i] = int32(slice.Index(i).Int())
	}
	return s
}

// setInt32Slice copies []int32 into p as a new slice.
// This behavior differs from the implementation in pointer_unsafe.go.
func (p pointer) setInt32Slice(v []int32) {
	if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) {
		// raw int32 type
		p.v.Elem().Set(reflect.ValueOf(v))
		return
	}
	// an enum
	// Allocate a []enum, then assign []int32's values into it.
	// Note: we can't convert []enum to []int32.
	slice := reflect.MakeSlice(p.v.Type().Elem(), len(v), cap(v))
	for i, x := range v {
		slice.Index(i).SetInt(int64(x))
	}
	p.v.Elem().Set(slice)
}
func (p pointer) appendInt32Slice(v int32) {
	grow(p.v.Elem()).SetInt(int64(v))
}

func (p pointer) toUint64() *uint64 {
	return p.v.Interface().(*uint64)
}
func (p pointer) toUint64Ptr() **uint64 {
	return p.v.Interface().(**uint64)
}
func (p pointer) toUint64Slice() *[]uint64 {
	return p.v.Interface().(*[]uint64)
}
func (p pointer) toUint32() *uint32 {
	return p.v.Interface().(*uint32)
}
func (p pointer) toUint32Ptr() **uint32 {
	return p.v.Interface().(**uint32)
}
func (p pointer) toUint32Slice() *[]uint32 {
	return p.v.Interface().(*[]uint32)
}
func (p pointer) toBool() *bool {
	return p.v.Interface().(*bool)
}
func (p pointer) toBoolPtr() **bool {
	return p.v.Interface().(**bool)
}
func (p pointer) toBoolSlice() *[]bool {
	return p.v.Interface().(*[]bool)
}
func (p pointer) toFloat64() *float64 {
	return p.v.Interface().(*float64)
}
func (p pointer) toFloat64Ptr() **float64 {
	return p.v.Interface().(**float64)
}
func (p pointer) toFloat64Slice() *[]float64 {
	return p.v.Interface().(*[]float64)
}
func (p pointer) toFloat32() *float32 {
	return p.v.Interface().(*float32)
}
func (p pointer) toFloat32Ptr() **float32 {
	return p.v.Interface().(**float32)
}
func (p pointer) toFloat32Slice() *[]float32 {
	return p.v.Interface().(*[]float32)
}
func (p pointer) toString() *string {
	return p.v.Interface().(*string)
}
func (p pointer) toStringPtr() **string {
	return p.v.Interface().(**string)
}
func (p pointer) toStringSlice() *[]string {
	return p.v.Interface().(*[]string)
}
func (p pointer) toBytes() *[]byte {
	return p.v.Interface().(*[]byte)
}
func (p pointer) toBytesSlice() *[][]byte {
	return p.v.Interface().(*[][]byte)
}
func (p pointer) toExtensions() *XXX_InternalExtensions {
	return p.v.Interface().(*XXX_InternalExtensions)
}
func (p pointer) toOldExtensions() *map[int32]Extension {
	return p.v.Interface().(*map[int32]Extension)
}
func (p pointer) getPointer() pointer {
	return pointer{v: p.v.Elem()}
}
func (p pointer) setPointer(q pointer) {
	p.v.Elem().Set(q.v)
}
func (p pointer) appendPointer(q pointer) {
	grow(p.v.Elem()).Set(q.v)
}

// getPointerSlice copies []*T from p as a new []pointer.
// This behavior differs from the implementation in pointer_unsafe.go.
func (p pointer) getPointerSlice() []pointer {
	if p.v.IsNil() {
		return nil
	}
	n := p.v.Elem().Len()
	s := make([]pointer, n)
	for i := 0; i < n; i++ {
		s[i] = pointer{v: p.v.Elem().Index(i)}
	}
	return s
}

// setPointerSlice copies []pointer into p as a new []*T.
// This behavior differs from the implementation in pointer_unsafe.go.
func (p pointer) setPointerSlice(v []pointer) {
	if v == nil {
		p.v.Elem().Set(reflect.New(p.v.Elem().Type()).Elem())
		return
	}
	s := reflect.MakeSlice(p.v.Elem().Type(), 0, len(v))
	for _, p := range v {
		s = reflect.Append(s, p.v)
	}
	p.v.Elem().Set(s)
}

// getInterfacePointer returns a pointer that points to the
// interface data of the interface pointed by p.
func (p pointer) getInterfacePointer() pointer {
	if p.v.Elem().IsNil() {
		return pointer{v: p.v.Elem()}
	}
	return pointer{v: p.v.Elem().Elem().Elem().Field(0).Addr()} // *interface -> interface -> *struct -> struct
}

func (p pointer) asPointerTo(t reflect.Type) reflect.Value {
	// TODO: check that p.v.Type().Elem() == t?
	return p.v
}

func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo {
	atomicLock.Lock()
	defer atomicLock.Unlock()
	return *p
}
func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) {
	atomicLock.Lock()
	defer atomicLock.Unlock()
	*p = v
}
func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo {
	atomicLock.Lock()
	defer atomicLock.Unlock()
	return *p
}
func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) {
	atomicLock.Lock()
	defer atomicLock.Unlock()
	*p = v
}
func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo {
	atomicLock.Lock()
	defer atomicLock.Unlock()
	return *p
}
func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) {
	atomicLock.Lock()
	defer atomicLock.Unlock()
	*p = v
}
func atomicLoadDiscardInfo(p **discardInfo) *discardInfo {
	atomicLock.Lock()
	defer atomicLock.Unlock()
	return *p
}
func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) {
	atomicLock.Lock()
	defer atomicLock.Unlock()
	*p = v
}

var atomicLock sync.Mutex
07070100000650000081A4000000000000000000000001645E367C00000886000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/pointer_reflect_gogo.go // Protocol Buffers for Go with Gadgets
//
// Copyright (c) 2018, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

// +build purego appengine js

// This file contains an implementation of proto field accesses using package reflect.
// It is slower than the code in pointer_unsafe.go but it avoids package unsafe and can
// be used on App Engine.

package proto

import (
	"reflect"
)

// TODO: untested, so probably incorrect.

func (p pointer) getRef() pointer {
	return pointer{v: p.v.Addr()}
}

func (p pointer) appendRef(v pointer, typ reflect.Type) {
	slice := p.getSlice(typ)
	elem := v.asPointerTo(typ).Elem()
	newSlice := reflect.Append(slice, elem)
	slice.Set(newSlice)
}

func (p pointer) getSlice(typ reflect.Type) reflect.Value {
	sliceTyp := reflect.SliceOf(typ)
	slice := p.asPointerTo(sliceTyp)
	slice = slice.Elem()
	return slice
}
  07070100000651000081A4000000000000000000000001645E367C000026CB000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/pointer_unsafe.go   // Go support for Protocol Buffers - Google's data interchange format
//
// Copyright 2012 The Go Authors.  All rights reserved.
// https://github.com/golang/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

// +build !purego,!appengine,!js

// This file contains the implementation of the proto field accesses using package unsafe.

package proto

import (
	"reflect"
	"sync/atomic"
	"unsafe"
)

const unsafeAllowed = true

// A field identifies a field in a struct, accessible from a pointer.
// In this implementation, a field is identified by its byte offset from the start of the struct.
type field uintptr

// toField returns a field equivalent to the given reflect field.
func toField(f *reflect.StructField) field {
	return field(f.Offset)
}

// invalidField is an invalid field identifier.
const invalidField = ^field(0)

// zeroField is a noop when calling pointer.offset.
const zeroField = field(0)

// IsValid reports whether the field identifier is valid.
func (f field) IsValid() bool {
	return f != invalidField
}

// The pointer type below is for the new table-driven encoder/decoder.
// The implementation here uses unsafe.Pointer to create a generic pointer.
// In pointer_reflect.go we use reflect instead of unsafe to implement
// the same (but slower) interface.
type pointer struct {
	p unsafe.Pointer
}

// size of pointer
var ptrSize = unsafe.Sizeof(uintptr(0))

// toPointer converts an interface of pointer type to a pointer
// that points to the same target.
func toPointer(i *Message) pointer {
	// Super-tricky - read pointer out of data word of interface value.
	// Saves ~25ns over the equivalent:
	// return valToPointer(reflect.ValueOf(*i))
	return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]}
}

// toAddrPointer converts an interface to a pointer that points to
// the interface data.
func toAddrPointer(i *interface{}, isptr bool) pointer {
	// Super-tricky - read or get the address of data word of interface value.
	if isptr {
		// The interface is of pointer type, thus it is a direct interface.
		// The data word is the pointer data itself. We take its address.
		return pointer{p: unsafe.Pointer(uintptr(unsafe.Pointer(i)) + ptrSize)}
	}
	// The interface is not of pointer type. The data word is the pointer
	// to the data.
	return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]}
}

// valToPointer converts v to a pointer. v must be of pointer type.
func valToPointer(v reflect.Value) pointer {
	return pointer{p: unsafe.Pointer(v.Pointer())}
}

// offset converts from a pointer to a structure to a pointer to
// one of its fields.
func (p pointer) offset(f field) pointer {
	// For safety, we should panic if !f.IsValid, however calling panic causes
	// this to no longer be inlineable, which is a serious performance cost.
	/*
		if !f.IsValid() {
			panic("invalid field")
		}
	*/
	return pointer{p: unsafe.Pointer(uintptr(p.p) + uintptr(f))}
}

func (p pointer) isNil() bool {
	return p.p == nil
}

func (p pointer) toInt64() *int64 {
	return (*int64)(p.p)
}
func (p pointer) toInt64Ptr() **int64 {
	return (**int64)(p.p)
}
func (p pointer) toInt64Slice() *[]int64 {
	return (*[]int64)(p.p)
}
func (p pointer) toInt32() *int32 {
	return (*int32)(p.p)
}

// See pointer_reflect.go for why toInt32Ptr/Slice doesn't exist.
/*
	func (p pointer) toInt32Ptr() **int32 {
		return (**int32)(p.p)
	}
	func (p pointer) toInt32Slice() *[]int32 {
		return (*[]int32)(p.p)
	}
*/
func (p pointer) getInt32Ptr() *int32 {
	return *(**int32)(p.p)
}
func (p pointer) setInt32Ptr(v int32) {
	*(**int32)(p.p) = &v
}

// getInt32Slice loads a []int32 from p.
// The value returned is aliased with the original slice.
// This behavior differs from the implementation in pointer_reflect.go.
func (p pointer) getInt32Slice() []int32 {
	return *(*[]int32)(p.p)
}

// setInt32Slice stores a []int32 to p.
// The value set is aliased with the input slice.
// This behavior differs from the implementation in pointer_reflect.go.
func (p pointer) setInt32Slice(v []int32) {
	*(*[]int32)(p.p) = v
}

// TODO: Can we get rid of appendInt32Slice and use setInt32Slice instead?
func (p pointer) appendInt32Slice(v int32) {
	s := (*[]int32)(p.p)
	*s = append(*s, v)
}

func (p pointer) toUint64() *uint64 {
	return (*uint64)(p.p)
}
func (p pointer) toUint64Ptr() **uint64 {
	return (**uint64)(p.p)
}
func (p pointer) toUint64Slice() *[]uint64 {
	return (*[]uint64)(p.p)
}
func (p pointer) toUint32() *uint32 {
	return (*uint32)(p.p)
}
func (p pointer) toUint32Ptr() **uint32 {
	return (**uint32)(p.p)
}
func (p pointer) toUint32Slice() *[]uint32 {
	return (*[]uint32)(p.p)
}
func (p pointer) toBool() *bool {
	return (*bool)(p.p)
}
func (p pointer) toBoolPtr() **bool {
	return (**bool)(p.p)
}
func (p pointer) toBoolSlice() *[]bool {
	return (*[]bool)(p.p)
}
func (p pointer) toFloat64() *float64 {
	return (*float64)(p.p)
}
func (p pointer) toFloat64Ptr() **float64 {
	return (**float64)(p.p)
}
func (p pointer) toFloat64Slice() *[]float64 {
	return (*[]float64)(p.p)
}
func (p pointer) toFloat32() *float32 {
	return (*float32)(p.p)
}
func (p pointer) toFloat32Ptr() **float32 {
	return (**float32)(p.p)
}
func (p pointer) toFloat32Slice() *[]float32 {
	return (*[]float32)(p.p)
}
func (p pointer) toString() *string {
	return (*string)(p.p)
}
func (p pointer) toStringPtr() **string {
	return (**string)(p.p)
}
func (p pointer) toStringSlice() *[]string {
	return (*[]string)(p.p)
}
func (p pointer) toBytes() *[]byte {
	return (*[]byte)(p.p)
}
func (p pointer) toBytesSlice() *[][]byte {
	return (*[][]byte)(p.p)
}
func (p pointer) toExtensions() *XXX_InternalExtensions {
	return (*XXX_InternalExtensions)(p.p)
}
func (p pointer) toOldExtensions() *map[int32]Extension {
	return (*map[int32]Extension)(p.p)
}

// getPointerSlice loads []*T from p as a []pointer.
// The value returned is aliased with the original slice.
// This behavior differs from the implementation in pointer_reflect.go.
func (p pointer) getPointerSlice() []pointer {
	// Super-tricky - p should point to a []*T where T is a
	// message type. We load it as []pointer.
	return *(*[]pointer)(p.p)
}

// setPointerSlice stores []pointer into p as a []*T.
// The value set is aliased with the input slice.
// This behavior differs from the implementation in pointer_reflect.go.
func (p pointer) setPointerSlice(v []pointer) {
	// Super-tricky - p should point to a []*T where T is a
	// message type. We store it as []pointer.
	*(*[]pointer)(p.p) = v
}

// getPointer loads the pointer at p and returns it.
func (p pointer) getPointer() pointer {
	return pointer{p: *(*unsafe.Pointer)(p.p)}
}

// setPointer stores the pointer q at p.
func (p pointer) setPointer(q pointer) {
	*(*unsafe.Pointer)(p.p) = q.p
}

// append q to the slice pointed to by p.
func (p pointer) appendPointer(q pointer) {
	s := (*[]unsafe.Pointer)(p.p)
	*s = append(*s, q.p)
}

// getInterfacePointer returns a pointer that points to the
// interface data of the interface pointed by p.
func (p pointer) getInterfacePointer() pointer {
	// Super-tricky - read pointer out of data word of interface value.
	return pointer{p: (*(*[2]unsafe.Pointer)(p.p))[1]}
}

// asPointerTo returns a reflect.Value that is a pointer to an
// object of type t stored at p.
func (p pointer) asPointerTo(t reflect.Type) reflect.Value {
	return reflect.NewAt(t, p.p)
}

func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo {
	return (*unmarshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))
}
func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) {
	atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))
}
func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo {
	return (*marshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))
}
func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) {
	atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))
}
func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo {
	return (*mergeInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))
}
func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) {
	atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))
}
func atomicLoadDiscardInfo(p **discardInfo) *discardInfo {
	return (*discardInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))
}
func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) {
	atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))
}
 07070100000652000081A4000000000000000000000001645E367C00000806000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.go  // Protocol Buffers for Go with Gadgets
//
// Copyright (c) 2018, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

// +build !purego,!appengine,!js

// This file contains the implementation of the proto field accesses using package unsafe.

package proto

import (
	"reflect"
	"unsafe"
)

func (p pointer) getRef() pointer {
	return pointer{p: (unsafe.Pointer)(&p.p)}
}

func (p pointer) appendRef(v pointer, typ reflect.Type) {
	slice := p.getSlice(typ)
	elem := v.asPointerTo(typ).Elem()
	newSlice := reflect.Append(slice, elem)
	slice.Set(newSlice)
}

func (p pointer) getSlice(typ reflect.Type) reflect.Value {
	sliceTyp := reflect.SliceOf(typ)
	slice := p.asPointerTo(sliceTyp)
	slice = slice.Elem()
	return slice
}
  07070100000653000081A4000000000000000000000001645E367C00004417000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/properties.go   // Protocol Buffers for Go with Gadgets
//
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Go support for Protocol Buffers - Google's data interchange format
//
// Copyright 2010 The Go Authors.  All rights reserved.
// https://github.com/golang/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package proto

/*
 * Routines for encoding data into the wire format for protocol buffers.
 */

import (
	"fmt"
	"log"
	"reflect"
	"sort"
	"strconv"
	"strings"
	"sync"
)

const debug bool = false

// Constants that identify the encoding of a value on the wire.
const (
	WireVarint     = 0
	WireFixed64    = 1
	WireBytes      = 2
	WireStartGroup = 3
	WireEndGroup   = 4
	WireFixed32    = 5
)

// tagMap is an optimization over map[int]int for typical protocol buffer
// use-cases. Encoded protocol buffers are often in tag order with small tag
// numbers.
type tagMap struct {
	fastTags []int
	slowTags map[int]int
}

// tagMapFastLimit is the upper bound on the tag number that will be stored in
// the tagMap slice rather than its map.
const tagMapFastLimit = 1024

func (p *tagMap) get(t int) (int, bool) {
	if t > 0 && t < tagMapFastLimit {
		if t >= len(p.fastTags) {
			return 0, false
		}
		fi := p.fastTags[t]
		return fi, fi >= 0
	}
	fi, ok := p.slowTags[t]
	return fi, ok
}

func (p *tagMap) put(t int, fi int) {
	if t > 0 && t < tagMapFastLimit {
		for len(p.fastTags) < t+1 {
			p.fastTags = append(p.fastTags, -1)
		}
		p.fastTags[t] = fi
		return
	}
	if p.slowTags == nil {
		p.slowTags = make(map[int]int)
	}
	p.slowTags[t] = fi
}

// StructProperties represents properties for all the fields of a struct.
// decoderTags and decoderOrigNames should only be used by the decoder.
type StructProperties struct {
	Prop             []*Properties  // properties for each field
	reqCount         int            // required count
	decoderTags      tagMap         // map from proto tag to struct field number
	decoderOrigNames map[string]int // map from original name to struct field number
	order            []int          // list of struct field numbers in tag order

	// OneofTypes contains information about the oneof fields in this message.
	// It is keyed by the original name of a field.
	OneofTypes map[string]*OneofProperties
}

// OneofProperties represents information about a specific field in a oneof.
type OneofProperties struct {
	Type  reflect.Type // pointer to generated struct type for this oneof field
	Field int          // struct field number of the containing oneof in the message
	Prop  *Properties
}

// Implement the sorting interface so we can sort the fields in tag order, as recommended by the spec.
// See encode.go, (*Buffer).enc_struct.

func (sp *StructProperties) Len() int { return len(sp.order) }
func (sp *StructProperties) Less(i, j int) bool {
	return sp.Prop[sp.order[i]].Tag < sp.Prop[sp.order[j]].Tag
}
func (sp *StructProperties) Swap(i, j int) { sp.order[i], sp.order[j] = sp.order[j], sp.order[i] }

// Properties represents the protocol-specific behavior of a single struct field.
type Properties struct {
	Name     string // name of the field, for error messages
	OrigName string // original name before protocol compiler (always set)
	JSONName string // name to use for JSON; determined by protoc
	Wire     string
	WireType int
	Tag      int
	Required bool
	Optional bool
	Repeated bool
	Packed   bool   // relevant for repeated primitives only
	Enum     string // set for enum types only
	proto3   bool   // whether this is known to be a proto3 field
	oneof    bool   // whether this is a oneof field

	Default     string // default value
	HasDefault  bool   // whether an explicit default was provided
	CustomType  string
	CastType    string
	StdTime     bool
	StdDuration bool
	WktPointer  bool

	stype reflect.Type      // set for struct types only
	ctype reflect.Type      // set for custom types only
	sprop *StructProperties // set for struct types only

	mtype      reflect.Type // set for map types only
	MapKeyProp *Properties  // set for map types only
	MapValProp *Properties  // set for map types only
}

// String formats the properties in the protobuf struct field tag style.
func (p *Properties) String() string {
	s := p.Wire
	s += ","
	s += strconv.Itoa(p.Tag)
	if p.Required {
		s += ",req"
	}
	if p.Optional {
		s += ",opt"
	}
	if p.Repeated {
		s += ",rep"
	}
	if p.Packed {
		s += ",packed"
	}
	s += ",name=" + p.OrigName
	if p.JSONName != p.OrigName {
		s += ",json=" + p.JSONName
	}
	if p.proto3 {
		s += ",proto3"
	}
	if p.oneof {
		s += ",oneof"
	}
	if len(p.Enum) > 0 {
		s += ",enum=" + p.Enum
	}
	if p.HasDefault {
		s += ",def=" + p.Default
	}
	return s
}

// Parse populates p by parsing a string in the protobuf struct field tag style.
func (p *Properties) Parse(s string) {
	// "bytes,49,opt,name=foo,def=hello!"
	fields := strings.Split(s, ",") // breaks def=, but handled below.
	if len(fields) < 2 {
		log.Printf("proto: tag has too few fields: %q", s)
		return
	}

	p.Wire = fields[0]
	switch p.Wire {
	case "varint":
		p.WireType = WireVarint
	case "fixed32":
		p.WireType = WireFixed32
	case "fixed64":
		p.WireType = WireFixed64
	case "zigzag32":
		p.WireType = WireVarint
	case "zigzag64":
		p.WireType = WireVarint
	case "bytes", "group":
		p.WireType = WireBytes
		// no numeric converter for non-numeric types
	default:
		log.Printf("proto: tag has unknown wire type: %q", s)
		return
	}

	var err error
	p.Tag, err = strconv.Atoi(fields[1])
	if err != nil {
		return
	}

outer:
	for i := 2; i < len(fields); i++ {
		f := fields[i]
		switch {
		case f == "req":
			p.Required = true
		case f == "opt":
			p.Optional = true
		case f == "rep":
			p.Repeated = true
		case f == "packed":
			p.Packed = true
		case strings.HasPrefix(f, "name="):
			p.OrigName = f[5:]
		case strings.HasPrefix(f, "json="):
			p.JSONName = f[5:]
		case strings.HasPrefix(f, "enum="):
			p.Enum = f[5:]
		case f == "proto3":
			p.proto3 = true
		case f == "oneof":
			p.oneof = true
		case strings.HasPrefix(f, "def="):
			p.HasDefault = true
			p.Default = f[4:] // rest of string
			if i+1 < len(fields) {
				// Commas aren't escaped, and def is always last.
				p.Default += "," + strings.Join(fields[i+1:], ",")
				break outer
			}
		case strings.HasPrefix(f, "embedded="):
			p.OrigName = strings.Split(f, "=")[1]
		case strings.HasPrefix(f, "customtype="):
			p.CustomType = strings.Split(f, "=")[1]
		case strings.HasPrefix(f, "casttype="):
			p.CastType = strings.Split(f, "=")[1]
		case f == "stdtime":
			p.StdTime = true
		case f == "stdduration":
			p.StdDuration = true
		case f == "wktptr":
			p.WktPointer = true
		}
	}
}

var protoMessageType = reflect.TypeOf((*Message)(nil)).Elem()

// setFieldProps initializes the field properties for submessages and maps.
func (p *Properties) setFieldProps(typ reflect.Type, f *reflect.StructField, lockGetProp bool) {
	isMap := typ.Kind() == reflect.Map
	if len(p.CustomType) > 0 && !isMap {
		p.ctype = typ
		p.setTag(lockGetProp)
		return
	}
	if p.StdTime && !isMap {
		p.setTag(lockGetProp)
		return
	}
	if p.StdDuration && !isMap {
		p.setTag(lockGetProp)
		return
	}
	if p.WktPointer && !isMap {
		p.setTag(lockGetProp)
		return
	}
	switch t1 := typ; t1.Kind() {
	case reflect.Struct:
		p.stype = typ
	case reflect.Ptr:
		if t1.Elem().Kind() == reflect.Struct {
			p.stype = t1.Elem()
		}
	case reflect.Slice:
		switch t2 := t1.Elem(); t2.Kind() {
		case reflect.Ptr:
			switch t3 := t2.Elem(); t3.Kind() {
			case reflect.Struct:
				p.stype = t3
			}
		case reflect.Struct:
			p.stype = t2
		}

	case reflect.Map:

		p.mtype = t1
		p.MapKeyProp = &Properties{}
		p.MapKeyProp.init(reflect.PtrTo(p.mtype.Key()), "Key", f.Tag.Get("protobuf_key"), nil, lockGetProp)
		p.MapValProp = &Properties{}
		vtype := p.mtype.Elem()
		if vtype.Kind() != reflect.Ptr && vtype.Kind() != reflect.Slice {
			// The value type is not a message (*T) or bytes ([]byte),
			// so we need encoders for the pointer to this type.
			vtype = reflect.PtrTo(vtype)
		}

		p.MapValProp.CustomType = p.CustomType
		p.MapValProp.StdDuration = p.StdDuration
		p.MapValProp.StdTime = p.StdTime
		p.MapValProp.WktPointer = p.WktPointer
		p.MapValProp.init(vtype, "Value", f.Tag.Get("protobuf_val"), nil, lockGetProp)
	}
	p.setTag(lockGetProp)
}

func (p *Properties) setTag(lockGetProp bool) {
	if p.stype != nil {
		if lockGetProp {
			p.sprop = GetProperties(p.stype)
		} else {
			p.sprop = getPropertiesLocked(p.stype)
		}
	}
}

var (
	marshalerType = reflect.TypeOf((*Marshaler)(nil)).Elem()
)

// Init populates the properties from a protocol buffer struct tag.
func (p *Properties) Init(typ reflect.Type, name, tag string, f *reflect.StructField) {
	p.init(typ, name, tag, f, true)
}

func (p *Properties) init(typ reflect.Type, name, tag string, f *reflect.StructField, lockGetProp bool) {
	// "bytes,49,opt,def=hello!"
	p.Name = name
	p.OrigName = name
	if tag == "" {
		return
	}
	p.Parse(tag)
	p.setFieldProps(typ, f, lockGetProp)
}

var (
	propertiesMu  sync.RWMutex
	propertiesMap = make(map[reflect.Type]*StructProperties)
)

// GetProperties returns the list of properties for the type represented by t.
// t must represent a generated struct type of a protocol message.
func GetProperties(t reflect.Type) *StructProperties {
	if t.Kind() != reflect.Struct {
		panic("proto: type must have kind struct")
	}

	// Most calls to GetProperties in a long-running program will be
	// retrieving details for types we have seen before.
	propertiesMu.RLock()
	sprop, ok := propertiesMap[t]
	propertiesMu.RUnlock()
	if ok {
		return sprop
	}

	propertiesMu.Lock()
	sprop = getPropertiesLocked(t)
	propertiesMu.Unlock()
	return sprop
}

type (
	oneofFuncsIface interface {
		XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{})
	}
	oneofWrappersIface interface {
		XXX_OneofWrappers() []interface{}
	}
)

// getPropertiesLocked requires that propertiesMu is held.
func getPropertiesLocked(t reflect.Type) *StructProperties {
	if prop, ok := propertiesMap[t]; ok {
		return prop
	}

	prop := new(StructProperties)
	// in case of recursive protos, fill this in now.
	propertiesMap[t] = prop

	// build properties
	prop.Prop = make([]*Properties, t.NumField())
	prop.order = make([]int, t.NumField())

	isOneofMessage := false
	for i := 0; i < t.NumField(); i++ {
		f := t.Field(i)
		p := new(Properties)
		name := f.Name
		p.init(f.Type, name, f.Tag.Get("protobuf"), &f, false)

		oneof := f.Tag.Get("protobuf_oneof") // special case
		if oneof != "" {
			isOneofMessage = true
			// Oneof fields don't use the traditional protobuf tag.
			p.OrigName = oneof
		}
		prop.Prop[i] = p
		prop.order[i] = i
		if debug {
			print(i, " ", f.Name, " ", t.String(), " ")
			if p.Tag > 0 {
				print(p.String())
			}
			print("\n")
		}
	}

	// Re-order prop.order.
	sort.Sort(prop)

	if isOneofMessage {
		var oots []interface{}
		switch m := reflect.Zero(reflect.PtrTo(t)).Interface().(type) {
		case oneofFuncsIface:
			_, _, _, oots = m.XXX_OneofFuncs()
		case oneofWrappersIface:
			oots = m.XXX_OneofWrappers()
		}
		if len(oots) > 0 {
			// Interpret oneof metadata.
			prop.OneofTypes = make(map[string]*OneofProperties)
			for _, oot := range oots {
				oop := &OneofProperties{
					Type: reflect.ValueOf(oot).Type(), // *T
					Prop: new(Properties),
				}
				sft := oop.Type.Elem().Field(0)
				oop.Prop.Name = sft.Name
				oop.Prop.Parse(sft.Tag.Get("protobuf"))
				// There will be exactly one interface field that
				// this new value is assignable to.
				for i := 0; i < t.NumField(); i++ {
					f := t.Field(i)
					if f.Type.Kind() != reflect.Interface {
						continue
					}
					if !oop.Type.AssignableTo(f.Type) {
						continue
					}
					oop.Field = i
					break
				}
				prop.OneofTypes[oop.Prop.OrigName] = oop
			}
		}
	}

	// build required counts
	// build tags
	reqCount := 0
	prop.decoderOrigNames = make(map[string]int)
	for i, p := range prop.Prop {
		if strings.HasPrefix(p.Name, "XXX_") {
			// Internal fields should not appear in tags/origNames maps.
			// They are handled specially when encoding and decoding.
			continue
		}
		if p.Required {
			reqCount++
		}
		prop.decoderTags.put(p.Tag, i)
		prop.decoderOrigNames[p.OrigName] = i
	}
	prop.reqCount = reqCount

	return prop
}

// A global registry of enum types.
// The generated code will register the generated maps by calling RegisterEnum.

var enumValueMaps = make(map[string]map[string]int32)
var enumStringMaps = make(map[string]map[int32]string)

// RegisterEnum is called from the generated code to install the enum descriptor
// maps into the global table to aid parsing text format protocol buffers.
func RegisterEnum(typeName string, unusedNameMap map[int32]string, valueMap map[string]int32) {
	if _, ok := enumValueMaps[typeName]; ok {
		panic("proto: duplicate enum registered: " + typeName)
	}
	enumValueMaps[typeName] = valueMap
	if _, ok := enumStringMaps[typeName]; ok {
		panic("proto: duplicate enum registered: " + typeName)
	}
	enumStringMaps[typeName] = unusedNameMap
}

// EnumValueMap returns the mapping from names to integers of the
// enum type enumType, or a nil if not found.
func EnumValueMap(enumType string) map[string]int32 {
	return enumValueMaps[enumType]
}

// A registry of all linked message types.
// The string is a fully-qualified proto name ("pkg.Message").
var (
	protoTypedNils = make(map[string]Message)      // a map from proto names to typed nil pointers
	protoMapTypes  = make(map[string]reflect.Type) // a map from proto names to map types
	revProtoTypes  = make(map[reflect.Type]string)
)

// RegisterType is called from generated code and maps from the fully qualified
// proto name to the type (pointer to struct) of the protocol buffer.
func RegisterType(x Message, name string) {
	if _, ok := protoTypedNils[name]; ok {
		// TODO: Some day, make this a panic.
		log.Printf("proto: duplicate proto type registered: %s", name)
		return
	}
	t := reflect.TypeOf(x)
	if v := reflect.ValueOf(x); v.Kind() == reflect.Ptr && v.Pointer() == 0 {
		// Generated code always calls RegisterType with nil x.
		// This check is just for extra safety.
		protoTypedNils[name] = x
	} else {
		protoTypedNils[name] = reflect.Zero(t).Interface().(Message)
	}
	revProtoTypes[t] = name
}

// RegisterMapType is called from generated code and maps from the fully qualified
// proto name to the native map type of the proto map definition.
func RegisterMapType(x interface{}, name string) {
	if reflect.TypeOf(x).Kind() != reflect.Map {
		panic(fmt.Sprintf("RegisterMapType(%T, %q); want map", x, name))
	}
	if _, ok := protoMapTypes[name]; ok {
		log.Printf("proto: duplicate proto type registered: %s", name)
		return
	}
	t := reflect.TypeOf(x)
	protoMapTypes[name] = t
	revProtoTypes[t] = name
}

// MessageName returns the fully-qualified proto name for the given message type.
func MessageName(x Message) string {
	type xname interface {
		XXX_MessageName() string
	}
	if m, ok := x.(xname); ok {
		return m.XXX_MessageName()
	}
	return revProtoTypes[reflect.TypeOf(x)]
}

// MessageType returns the message type (pointer to struct) for a named message.
// The type is not guaranteed to implement proto.Message if the name refers to a
// map entry.
func MessageType(name string) reflect.Type {
	if t, ok := protoTypedNils[name]; ok {
		return reflect.TypeOf(t)
	}
	return protoMapTypes[name]
}

// A registry of all linked proto files.
var (
	protoFiles = make(map[string][]byte) // file name => fileDescriptor
)

// RegisterFile is called from generated code and maps from the
// full file name of a .proto file to its compressed FileDescriptorProto.
func RegisterFile(filename string, fileDescriptor []byte) {
	protoFiles[filename] = fileDescriptor
}

// FileDescriptor returns the compressed FileDescriptorProto for a .proto file.
func FileDescriptor(filename string) []byte { return protoFiles[filename] }
 07070100000654000081A4000000000000000000000001645E367C00000642000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/properties_gogo.go  // Protocol Buffers for Go with Gadgets
//
// Copyright (c) 2018, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package proto

import (
	"reflect"
)

var sizerType = reflect.TypeOf((*Sizer)(nil)).Elem()
var protosizerType = reflect.TypeOf((*ProtoSizer)(nil)).Elem()
  07070100000655000081A4000000000000000000000001645E367C00000BE0000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/skip_gogo.go    // Protocol Buffers for Go with Gadgets
//
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package proto

import (
	"fmt"
	"io"
)

func Skip(data []byte) (n int, err error) {
	l := len(data)
	index := 0
	for index < l {
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if index >= l {
				return 0, io.ErrUnexpectedEOF
			}
			b := data[index]
			index++
			wire |= (uint64(b) & 0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		wireType := int(wire & 0x7)
		switch wireType {
		case 0:
			for {
				if index >= l {
					return 0, io.ErrUnexpectedEOF
				}
				index++
				if data[index-1] < 0x80 {
					break
				}
			}
			return index, nil
		case 1:
			index += 8
			return index, nil
		case 2:
			var length int
			for shift := uint(0); ; shift += 7 {
				if index >= l {
					return 0, io.ErrUnexpectedEOF
				}
				b := data[index]
				index++
				length |= (int(b) & 0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			index += length
			return index, nil
		case 3:
			for {
				var innerWire uint64
				var start int = index
				for shift := uint(0); ; shift += 7 {
					if index >= l {
						return 0, io.ErrUnexpectedEOF
					}
					b := data[index]
					index++
					innerWire |= (uint64(b) & 0x7F) << shift
					if b < 0x80 {
						break
					}
				}
				innerWireType := int(innerWire & 0x7)
				if innerWireType == 4 {
					break
				}
				next, err := Skip(data[start:])
				if err != nil {
					return 0, err
				}
				index = start + next
			}
			return index, nil
		case 4:
			return index, nil
		case 5:
			index += 4
			return index, nil
		default:
			return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
		}
	}
	panic("unreachable")
}
07070100000656000081A4000000000000000000000001645E367C00013B01000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/table_marshal.go    // Go support for Protocol Buffers - Google's data interchange format
//
// Copyright 2016 The Go Authors.  All rights reserved.
// https://github.com/golang/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package proto

import (
	"errors"
	"fmt"
	"math"
	"reflect"
	"sort"
	"strconv"
	"strings"
	"sync"
	"sync/atomic"
	"unicode/utf8"
)

// a sizer takes a pointer to a field and the size of its tag, computes the size of
// the encoded data.
type sizer func(pointer, int) int

// a marshaler takes a byte slice, a pointer to a field, and its tag (in wire format),
// marshals the field to the end of the slice, returns the slice and error (if any).
type marshaler func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error)

// marshalInfo is the information used for marshaling a message.
type marshalInfo struct {
	typ          reflect.Type
	fields       []*marshalFieldInfo
	unrecognized field                      // offset of XXX_unrecognized
	extensions   field                      // offset of XXX_InternalExtensions
	v1extensions field                      // offset of XXX_extensions
	sizecache    field                      // offset of XXX_sizecache
	initialized  int32                      // 0 -- only typ is set, 1 -- fully initialized
	messageset   bool                       // uses message set wire format
	hasmarshaler bool                       // has custom marshaler
	sync.RWMutex                            // protect extElems map, also for initialization
	extElems     map[int32]*marshalElemInfo // info of extension elements

	hassizer      bool // has custom sizer
	hasprotosizer bool // has custom protosizer

	bytesExtensions field // offset of XXX_extensions where the field type is []byte
}

// marshalFieldInfo is the information used for marshaling a field of a message.
type marshalFieldInfo struct {
	field      field
	wiretag    uint64 // tag in wire format
	tagsize    int    // size of tag in wire format
	sizer      sizer
	marshaler  marshaler
	isPointer  bool
	required   bool                              // field is required
	name       string                            // name of the field, for error reporting
	oneofElems map[reflect.Type]*marshalElemInfo // info of oneof elements
}

// marshalElemInfo is the information used for marshaling an extension or oneof element.
type marshalElemInfo struct {
	wiretag   uint64 // tag in wire format
	tagsize   int    // size of tag in wire format
	sizer     sizer
	marshaler marshaler
	isptr     bool // elem is pointer typed, thus interface of this type is a direct interface (extension only)
}

var (
	marshalInfoMap  = map[reflect.Type]*marshalInfo{}
	marshalInfoLock sync.Mutex

	uint8SliceType = reflect.TypeOf(([]uint8)(nil)).Kind()
)

// getMarshalInfo returns the information to marshal a given type of message.
// The info it returns may not necessarily initialized.
// t is the type of the message (NOT the pointer to it).
func getMarshalInfo(t reflect.Type) *marshalInfo {
	marshalInfoLock.Lock()
	u, ok := marshalInfoMap[t]
	if !ok {
		u = &marshalInfo{typ: t}
		marshalInfoMap[t] = u
	}
	marshalInfoLock.Unlock()
	return u
}

// Size is the entry point from generated code,
// and should be ONLY called by generated code.
// It computes the size of encoded data of msg.
// a is a pointer to a place to store cached marshal info.
func (a *InternalMessageInfo) Size(msg Message) int {
	u := getMessageMarshalInfo(msg, a)
	ptr := toPointer(&msg)
	if ptr.isNil() {
		// We get here if msg is a typed nil ((*SomeMessage)(nil)),
		// so it satisfies the interface, and msg == nil wouldn't
		// catch it. We don't want crash in this case.
		return 0
	}
	return u.size(ptr)
}

// Marshal is the entry point from generated code,
// and should be ONLY called by generated code.
// It marshals msg to the end of b.
// a is a pointer to a place to store cached marshal info.
func (a *InternalMessageInfo) Marshal(b []byte, msg Message, deterministic bool) ([]byte, error) {
	u := getMessageMarshalInfo(msg, a)
	ptr := toPointer(&msg)
	if ptr.isNil() {
		// We get here if msg is a typed nil ((*SomeMessage)(nil)),
		// so it satisfies the interface, and msg == nil wouldn't
		// catch it. We don't want crash in this case.
		return b, ErrNil
	}
	return u.marshal(b, ptr, deterministic)
}

func getMessageMarshalInfo(msg interface{}, a *InternalMessageInfo) *marshalInfo {
	// u := a.marshal, but atomically.
	// We use an atomic here to ensure memory consistency.
	u := atomicLoadMarshalInfo(&a.marshal)
	if u == nil {
		// Get marshal information from type of message.
		t := reflect.ValueOf(msg).Type()
		if t.Kind() != reflect.Ptr {
			panic(fmt.Sprintf("cannot handle non-pointer message type %v", t))
		}
		u = getMarshalInfo(t.Elem())
		// Store it in the cache for later users.
		// a.marshal = u, but atomically.
		atomicStoreMarshalInfo(&a.marshal, u)
	}
	return u
}

// size is the main function to compute the size of the encoded data of a message.
// ptr is the pointer to the message.
func (u *marshalInfo) size(ptr pointer) int {
	if atomic.LoadInt32(&u.initialized) == 0 {
		u.computeMarshalInfo()
	}

	// If the message can marshal itself, let it do it, for compatibility.
	// NOTE: This is not efficient.
	if u.hasmarshaler {
		// Uses the message's Size method if available
		if u.hassizer {
			s := ptr.asPointerTo(u.typ).Interface().(Sizer)
			return s.Size()
		}
		// Uses the message's ProtoSize method if available
		if u.hasprotosizer {
			s := ptr.asPointerTo(u.typ).Interface().(ProtoSizer)
			return s.ProtoSize()
		}

		m := ptr.asPointerTo(u.typ).Interface().(Marshaler)
		b, _ := m.Marshal()
		return len(b)
	}

	n := 0
	for _, f := range u.fields {
		if f.isPointer && ptr.offset(f.field).getPointer().isNil() {
			// nil pointer always marshals to nothing
			continue
		}
		n += f.sizer(ptr.offset(f.field), f.tagsize)
	}
	if u.extensions.IsValid() {
		e := ptr.offset(u.extensions).toExtensions()
		if u.messageset {
			n += u.sizeMessageSet(e)
		} else {
			n += u.sizeExtensions(e)
		}
	}
	if u.v1extensions.IsValid() {
		m := *ptr.offset(u.v1extensions).toOldExtensions()
		n += u.sizeV1Extensions(m)
	}
	if u.bytesExtensions.IsValid() {
		s := *ptr.offset(u.bytesExtensions).toBytes()
		n += len(s)
	}
	if u.unrecognized.IsValid() {
		s := *ptr.offset(u.unrecognized).toBytes()
		n += len(s)
	}

	// cache the result for use in marshal
	if u.sizecache.IsValid() {
		atomic.StoreInt32(ptr.offset(u.sizecache).toInt32(), int32(n))
	}
	return n
}

// cachedsize gets the size from cache. If there is no cache (i.e. message is not generated),
// fall back to compute the size.
func (u *marshalInfo) cachedsize(ptr pointer) int {
	if u.sizecache.IsValid() {
		return int(atomic.LoadInt32(ptr.offset(u.sizecache).toInt32()))
	}
	return u.size(ptr)
}

// marshal is the main function to marshal a message. It takes a byte slice and appends
// the encoded data to the end of the slice, returns the slice and error (if any).
// ptr is the pointer to the message.
// If deterministic is true, map is marshaled in deterministic order.
func (u *marshalInfo) marshal(b []byte, ptr pointer, deterministic bool) ([]byte, error) {
	if atomic.LoadInt32(&u.initialized) == 0 {
		u.computeMarshalInfo()
	}

	// If the message can marshal itself, let it do it, for compatibility.
	// NOTE: This is not efficient.
	if u.hasmarshaler {
		m := ptr.asPointerTo(u.typ).Interface().(Marshaler)
		b1, err := m.Marshal()
		b = append(b, b1...)
		return b, err
	}

	var err, errLater error
	// The old marshaler encodes extensions at beginning.
	if u.extensions.IsValid() {
		e := ptr.offset(u.extensions).toExtensions()
		if u.messageset {
			b, err = u.appendMessageSet(b, e, deterministic)
		} else {
			b, err = u.appendExtensions(b, e, deterministic)
		}
		if err != nil {
			return b, err
		}
	}
	if u.v1extensions.IsValid() {
		m := *ptr.offset(u.v1extensions).toOldExtensions()
		b, err = u.appendV1Extensions(b, m, deterministic)
		if err != nil {
			return b, err
		}
	}
	if u.bytesExtensions.IsValid() {
		s := *ptr.offset(u.bytesExtensions).toBytes()
		b = append(b, s...)
	}
	for _, f := range u.fields {
		if f.required {
			if f.isPointer && ptr.offset(f.field).getPointer().isNil() {
				// Required field is not set.
				// We record the error but keep going, to give a complete marshaling.
				if errLater == nil {
					errLater = &RequiredNotSetError{f.name}
				}
				continue
			}
		}
		if f.isPointer && ptr.offset(f.field).getPointer().isNil() {
			// nil pointer always marshals to nothing
			continue
		}
		b, err = f.marshaler(b, ptr.offset(f.field), f.wiretag, deterministic)
		if err != nil {
			if err1, ok := err.(*RequiredNotSetError); ok {
				// Required field in submessage is not set.
				// We record the error but keep going, to give a complete marshaling.
				if errLater == nil {
					errLater = &RequiredNotSetError{f.name + "." + err1.field}
				}
				continue
			}
			if err == errRepeatedHasNil {
				err = errors.New("proto: repeated field " + f.name + " has nil element")
			}
			if err == errInvalidUTF8 {
				if errLater == nil {
					fullName := revProtoTypes[reflect.PtrTo(u.typ)] + "." + f.name
					errLater = &invalidUTF8Error{fullName}
				}
				continue
			}
			return b, err
		}
	}
	if u.unrecognized.IsValid() {
		s := *ptr.offset(u.unrecognized).toBytes()
		b = append(b, s...)
	}
	return b, errLater
}

// computeMarshalInfo initializes the marshal info.
func (u *marshalInfo) computeMarshalInfo() {
	u.Lock()
	defer u.Unlock()
	if u.initialized != 0 { // non-atomic read is ok as it is protected by the lock
		return
	}

	t := u.typ
	u.unrecognized = invalidField
	u.extensions = invalidField
	u.v1extensions = invalidField
	u.bytesExtensions = invalidField
	u.sizecache = invalidField
	isOneofMessage := false

	if reflect.PtrTo(t).Implements(sizerType) {
		u.hassizer = true
	}
	if reflect.PtrTo(t).Implements(protosizerType) {
		u.hasprotosizer = true
	}
	// If the message can marshal itself, let it do it, for compatibility.
	// NOTE: This is not efficient.
	if reflect.PtrTo(t).Implements(marshalerType) {
		u.hasmarshaler = true
		atomic.StoreInt32(&u.initialized, 1)
		return
	}

	n := t.NumField()

	// deal with XXX fields first
	for i := 0; i < t.NumField(); i++ {
		f := t.Field(i)
		if f.Tag.Get("protobuf_oneof") != "" {
			isOneofMessage = true
		}
		if !strings.HasPrefix(f.Name, "XXX_") {
			continue
		}
		switch f.Name {
		case "XXX_sizecache":
			u.sizecache = toField(&f)
		case "XXX_unrecognized":
			u.unrecognized = toField(&f)
		case "XXX_InternalExtensions":
			u.extensions = toField(&f)
			u.messageset = f.Tag.Get("protobuf_messageset") == "1"
		case "XXX_extensions":
			if f.Type.Kind() == reflect.Map {
				u.v1extensions = toField(&f)
			} else {
				u.bytesExtensions = toField(&f)
			}
		case "XXX_NoUnkeyedLiteral":
			// nothing to do
		default:
			panic("unknown XXX field: " + f.Name)
		}
		n--
	}

	// get oneof implementers
	var oneofImplementers []interface{}
	// gogo: isOneofMessage is needed for embedded oneof messages, without a marshaler and unmarshaler
	if isOneofMessage {
		switch m := reflect.Zero(reflect.PtrTo(t)).Interface().(type) {
		case oneofFuncsIface:
			_, _, _, oneofImplementers = m.XXX_OneofFuncs()
		case oneofWrappersIface:
			oneofImplementers = m.XXX_OneofWrappers()
		}
	}

	// normal fields
	fields := make([]marshalFieldInfo, n) // batch allocation
	u.fields = make([]*marshalFieldInfo, 0, n)
	for i, j := 0, 0; i < t.NumField(); i++ {
		f := t.Field(i)

		if strings.HasPrefix(f.Name, "XXX_") {
			continue
		}
		field := &fields[j]
		j++
		field.name = f.Name
		u.fields = append(u.fields, field)
		if f.Tag.Get("protobuf_oneof") != "" {
			field.computeOneofFieldInfo(&f, oneofImplementers)
			continue
		}
		if f.Tag.Get("protobuf") == "" {
			// field has no tag (not in generated message), ignore it
			u.fields = u.fields[:len(u.fields)-1]
			j--
			continue
		}
		field.computeMarshalFieldInfo(&f)
	}

	// fields are marshaled in tag order on the wire.
	sort.Sort(byTag(u.fields))

	atomic.StoreInt32(&u.initialized, 1)
}

// helper for sorting fields by tag
type byTag []*marshalFieldInfo

func (a byTag) Len() int           { return len(a) }
func (a byTag) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
func (a byTag) Less(i, j int) bool { return a[i].wiretag < a[j].wiretag }

// getExtElemInfo returns the information to marshal an extension element.
// The info it returns is initialized.
func (u *marshalInfo) getExtElemInfo(desc *ExtensionDesc) *marshalElemInfo {
	// get from cache first
	u.RLock()
	e, ok := u.extElems[desc.Field]
	u.RUnlock()
	if ok {
		return e
	}

	t := reflect.TypeOf(desc.ExtensionType) // pointer or slice to basic type or struct
	tags := strings.Split(desc.Tag, ",")
	tag, err := strconv.Atoi(tags[1])
	if err != nil {
		panic("tag is not an integer")
	}
	wt := wiretype(tags[0])
	sizr, marshalr := typeMarshaler(t, tags, false, false)
	e = &marshalElemInfo{
		wiretag:   uint64(tag)<<3 | wt,
		tagsize:   SizeVarint(uint64(tag) << 3),
		sizer:     sizr,
		marshaler: marshalr,
		isptr:     t.Kind() == reflect.Ptr,
	}

	// update cache
	u.Lock()
	if u.extElems == nil {
		u.extElems = make(map[int32]*marshalElemInfo)
	}
	u.extElems[desc.Field] = e
	u.Unlock()
	return e
}

// computeMarshalFieldInfo fills up the information to marshal a field.
func (fi *marshalFieldInfo) computeMarshalFieldInfo(f *reflect.StructField) {
	// parse protobuf tag of the field.
	// tag has format of "bytes,49,opt,name=foo,def=hello!"
	tags := strings.Split(f.Tag.Get("protobuf"), ",")
	if tags[0] == "" {
		return
	}
	tag, err := strconv.Atoi(tags[1])
	if err != nil {
		panic("tag is not an integer")
	}
	wt := wiretype(tags[0])
	if tags[2] == "req" {
		fi.required = true
	}
	fi.setTag(f, tag, wt)
	fi.setMarshaler(f, tags)
}

func (fi *marshalFieldInfo) computeOneofFieldInfo(f *reflect.StructField, oneofImplementers []interface{}) {
	fi.field = toField(f)
	fi.wiretag = math.MaxInt32 // Use a large tag number, make oneofs sorted at the end. This tag will not appear on the wire.
	fi.isPointer = true
	fi.sizer, fi.marshaler = makeOneOfMarshaler(fi, f)
	fi.oneofElems = make(map[reflect.Type]*marshalElemInfo)

	ityp := f.Type // interface type
	for _, o := range oneofImplementers {
		t := reflect.TypeOf(o)
		if !t.Implements(ityp) {
			continue
		}
		sf := t.Elem().Field(0) // oneof implementer is a struct with a single field
		tags := strings.Split(sf.Tag.Get("protobuf"), ",")
		tag, err := strconv.Atoi(tags[1])
		if err != nil {
			panic("tag is not an integer")
		}
		wt := wiretype(tags[0])
		sizr, marshalr := typeMarshaler(sf.Type, tags, false, true) // oneof should not omit any zero value
		fi.oneofElems[t.Elem()] = &marshalElemInfo{
			wiretag:   uint64(tag)<<3 | wt,
			tagsize:   SizeVarint(uint64(tag) << 3),
			sizer:     sizr,
			marshaler: marshalr,
		}
	}
}

// wiretype returns the wire encoding of the type.
func wiretype(encoding string) uint64 {
	switch encoding {
	case "fixed32":
		return WireFixed32
	case "fixed64":
		return WireFixed64
	case "varint", "zigzag32", "zigzag64":
		return WireVarint
	case "bytes":
		return WireBytes
	case "group":
		return WireStartGroup
	}
	panic("unknown wire type " + encoding)
}

// setTag fills up the tag (in wire format) and its size in the info of a field.
func (fi *marshalFieldInfo) setTag(f *reflect.StructField, tag int, wt uint64) {
	fi.field = toField(f)
	fi.wiretag = uint64(tag)<<3 | wt
	fi.tagsize = SizeVarint(uint64(tag) << 3)
}

// setMarshaler fills up the sizer and marshaler in the info of a field.
func (fi *marshalFieldInfo) setMarshaler(f *reflect.StructField, tags []string) {
	switch f.Type.Kind() {
	case reflect.Map:
		// map field
		fi.isPointer = true
		fi.sizer, fi.marshaler = makeMapMarshaler(f)
		return
	case reflect.Ptr, reflect.Slice:
		fi.isPointer = true
	}
	fi.sizer, fi.marshaler = typeMarshaler(f.Type, tags, true, false)
}

// typeMarshaler returns the sizer and marshaler of a given field.
// t is the type of the field.
// tags is the generated "protobuf" tag of the field.
// If nozero is true, zero value is not marshaled to the wire.
// If oneof is true, it is a oneof field.
func typeMarshaler(t reflect.Type, tags []string, nozero, oneof bool) (sizer, marshaler) {
	encoding := tags[0]

	pointer := false
	slice := false
	if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 {
		slice = true
		t = t.Elem()
	}
	if t.Kind() == reflect.Ptr {
		pointer = true
		t = t.Elem()
	}

	packed := false
	proto3 := false
	ctype := false
	isTime := false
	isDuration := false
	isWktPointer := false
	validateUTF8 := true
	for i := 2; i < len(tags); i++ {
		if tags[i] == "packed" {
			packed = true
		}
		if tags[i] == "proto3" {
			proto3 = true
		}
		if strings.HasPrefix(tags[i], "customtype=") {
			ctype = true
		}
		if tags[i] == "stdtime" {
			isTime = true
		}
		if tags[i] == "stdduration" {
			isDuration = true
		}
		if tags[i] == "wktptr" {
			isWktPointer = true
		}
	}
	validateUTF8 = validateUTF8 && proto3
	if !proto3 && !pointer && !slice {
		nozero = false
	}

	if ctype {
		if reflect.PtrTo(t).Implements(customType) {
			if slice {
				return makeMessageRefSliceMarshaler(getMarshalInfo(t))
			}
			if pointer {
				return makeCustomPtrMarshaler(getMarshalInfo(t))
			}
			return makeCustomMarshaler(getMarshalInfo(t))
		} else {
			panic(fmt.Sprintf("custom type: type: %v, does not implement the proto.custom interface", t))
		}
	}

	if isTime {
		if pointer {
			if slice {
				return makeTimePtrSliceMarshaler(getMarshalInfo(t))
			}
			return makeTimePtrMarshaler(getMarshalInfo(t))
		}
		if slice {
			return makeTimeSliceMarshaler(getMarshalInfo(t))
		}
		return makeTimeMarshaler(getMarshalInfo(t))
	}

	if isDuration {
		if pointer {
			if slice {
				return makeDurationPtrSliceMarshaler(getMarshalInfo(t))
			}
			return makeDurationPtrMarshaler(getMarshalInfo(t))
		}
		if slice {
			return makeDurationSliceMarshaler(getMarshalInfo(t))
		}
		return makeDurationMarshaler(getMarshalInfo(t))
	}

	if isWktPointer {
		switch t.Kind() {
		case reflect.Float64:
			if pointer {
				if slice {
					return makeStdDoubleValuePtrSliceMarshaler(getMarshalInfo(t))
				}
				return makeStdDoubleValuePtrMarshaler(getMarshalInfo(t))
			}
			if slice {
				return makeStdDoubleValueSliceMarshaler(getMarshalInfo(t))
			}
			return makeStdDoubleValueMarshaler(getMarshalInfo(t))
		case reflect.Float32:
			if pointer {
				if slice {
					return makeStdFloatValuePtrSliceMarshaler(getMarshalInfo(t))
				}
				return makeStdFloatValuePtrMarshaler(getMarshalInfo(t))
			}
			if slice {
				return makeStdFloatValueSliceMarshaler(getMarshalInfo(t))
			}
			return makeStdFloatValueMarshaler(getMarshalInfo(t))
		case reflect.Int64:
			if pointer {
				if slice {
					return makeStdInt64ValuePtrSliceMarshaler(getMarshalInfo(t))
				}
				return makeStdInt64ValuePtrMarshaler(getMarshalInfo(t))
			}
			if slice {
				return makeStdInt64ValueSliceMarshaler(getMarshalInfo(t))
			}
			return makeStdInt64ValueMarshaler(getMarshalInfo(t))
		case reflect.Uint64:
			if pointer {
				if slice {
					return makeStdUInt64ValuePtrSliceMarshaler(getMarshalInfo(t))
				}
				return makeStdUInt64ValuePtrMarshaler(getMarshalInfo(t))
			}
			if slice {
				return makeStdUInt64ValueSliceMarshaler(getMarshalInfo(t))
			}
			return makeStdUInt64ValueMarshaler(getMarshalInfo(t))
		case reflect.Int32:
			if pointer {
				if slice {
					return makeStdInt32ValuePtrSliceMarshaler(getMarshalInfo(t))
				}
				return makeStdInt32ValuePtrMarshaler(getMarshalInfo(t))
			}
			if slice {
				return makeStdInt32ValueSliceMarshaler(getMarshalInfo(t))
			}
			return makeStdInt32ValueMarshaler(getMarshalInfo(t))
		case reflect.Uint32:
			if pointer {
				if slice {
					return makeStdUInt32ValuePtrSliceMarshaler(getMarshalInfo(t))
				}
				return makeStdUInt32ValuePtrMarshaler(getMarshalInfo(t))
			}
			if slice {
				return makeStdUInt32ValueSliceMarshaler(getMarshalInfo(t))
			}
			return makeStdUInt32ValueMarshaler(getMarshalInfo(t))
		case reflect.Bool:
			if pointer {
				if slice {
					return makeStdBoolValuePtrSliceMarshaler(getMarshalInfo(t))
				}
				return makeStdBoolValuePtrMarshaler(getMarshalInfo(t))
			}
			if slice {
				return makeStdBoolValueSliceMarshaler(getMarshalInfo(t))
			}
			return makeStdBoolValueMarshaler(getMarshalInfo(t))
		case reflect.String:
			if pointer {
				if slice {
					return makeStdStringValuePtrSliceMarshaler(getMarshalInfo(t))
				}
				return makeStdStringValuePtrMarshaler(getMarshalInfo(t))
			}
			if slice {
				return makeStdStringValueSliceMarshaler(getMarshalInfo(t))
			}
			return makeStdStringValueMarshaler(getMarshalInfo(t))
		case uint8SliceType:
			if pointer {
				if slice {
					return makeStdBytesValuePtrSliceMarshaler(getMarshalInfo(t))
				}
				return makeStdBytesValuePtrMarshaler(getMarshalInfo(t))
			}
			if slice {
				return makeStdBytesValueSliceMarshaler(getMarshalInfo(t))
			}
			return makeStdBytesValueMarshaler(getMarshalInfo(t))
		default:
			panic(fmt.Sprintf("unknown wktpointer type %#v", t))
		}
	}

	switch t.Kind() {
	case reflect.Bool:
		if pointer {
			return sizeBoolPtr, appendBoolPtr
		}
		if slice {
			if packed {
				return sizeBoolPackedSlice, appendBoolPackedSlice
			}
			return sizeBoolSlice, appendBoolSlice
		}
		if nozero {
			return sizeBoolValueNoZero, appendBoolValueNoZero
		}
		return sizeBoolValue, appendBoolValue
	case reflect.Uint32:
		switch encoding {
		case "fixed32":
			if pointer {
				return sizeFixed32Ptr, appendFixed32Ptr
			}
			if slice {
				if packed {
					return sizeFixed32PackedSlice, appendFixed32PackedSlice
				}
				return sizeFixed32Slice, appendFixed32Slice
			}
			if nozero {
				return sizeFixed32ValueNoZero, appendFixed32ValueNoZero
			}
			return sizeFixed32Value, appendFixed32Value
		case "varint":
			if pointer {
				return sizeVarint32Ptr, appendVarint32Ptr
			}
			if slice {
				if packed {
					return sizeVarint32PackedSlice, appendVarint32PackedSlice
				}
				return sizeVarint32Slice, appendVarint32Slice
			}
			if nozero {
				return sizeVarint32ValueNoZero, appendVarint32ValueNoZero
			}
			return sizeVarint32Value, appendVarint32Value
		}
	case reflect.Int32:
		switch encoding {
		case "fixed32":
			if pointer {
				return sizeFixedS32Ptr, appendFixedS32Ptr
			}
			if slice {
				if packed {
					return sizeFixedS32PackedSlice, appendFixedS32PackedSlice
				}
				return sizeFixedS32Slice, appendFixedS32Slice
			}
			if nozero {
				return sizeFixedS32ValueNoZero, appendFixedS32ValueNoZero
			}
			return sizeFixedS32Value, appendFixedS32Value
		case "varint":
			if pointer {
				return sizeVarintS32Ptr, appendVarintS32Ptr
			}
			if slice {
				if packed {
					return sizeVarintS32PackedSlice, appendVarintS32PackedSlice
				}
				return sizeVarintS32Slice, appendVarintS32Slice
			}
			if nozero {
				return sizeVarintS32ValueNoZero, appendVarintS32ValueNoZero
			}
			return sizeVarintS32Value, appendVarintS32Value
		case "zigzag32":
			if pointer {
				return sizeZigzag32Ptr, appendZigzag32Ptr
			}
			if slice {
				if packed {
					return sizeZigzag32PackedSlice, appendZigzag32PackedSlice
				}
				return sizeZigzag32Slice, appendZigzag32Slice
			}
			if nozero {
				return sizeZigzag32ValueNoZero, appendZigzag32ValueNoZero
			}
			return sizeZigzag32Value, appendZigzag32Value
		}
	case reflect.Uint64:
		switch encoding {
		case "fixed64":
			if pointer {
				return sizeFixed64Ptr, appendFixed64Ptr
			}
			if slice {
				if packed {
					return sizeFixed64PackedSlice, appendFixed64PackedSlice
				}
				return sizeFixed64Slice, appendFixed64Slice
			}
			if nozero {
				return sizeFixed64ValueNoZero, appendFixed64ValueNoZero
			}
			return sizeFixed64Value, appendFixed64Value
		case "varint":
			if pointer {
				return sizeVarint64Ptr, appendVarint64Ptr
			}
			if slice {
				if packed {
					return sizeVarint64PackedSlice, appendVarint64PackedSlice
				}
				return sizeVarint64Slice, appendVarint64Slice
			}
			if nozero {
				return sizeVarint64ValueNoZero, appendVarint64ValueNoZero
			}
			return sizeVarint64Value, appendVarint64Value
		}
	case reflect.Int64:
		switch encoding {
		case "fixed64":
			if pointer {
				return sizeFixedS64Ptr, appendFixedS64Ptr
			}
			if slice {
				if packed {
					return sizeFixedS64PackedSlice, appendFixedS64PackedSlice
				}
				return sizeFixedS64Slice, appendFixedS64Slice
			}
			if nozero {
				return sizeFixedS64ValueNoZero, appendFixedS64ValueNoZero
			}
			return sizeFixedS64Value, appendFixedS64Value
		case "varint":
			if pointer {
				return sizeVarintS64Ptr, appendVarintS64Ptr
			}
			if slice {
				if packed {
					return sizeVarintS64PackedSlice, appendVarintS64PackedSlice
				}
				return sizeVarintS64Slice, appendVarintS64Slice
			}
			if nozero {
				return sizeVarintS64ValueNoZero, appendVarintS64ValueNoZero
			}
			return sizeVarintS64Value, appendVarintS64Value
		case "zigzag64":
			if pointer {
				return sizeZigzag64Ptr, appendZigzag64Ptr
			}
			if slice {
				if packed {
					return sizeZigzag64PackedSlice, appendZigzag64PackedSlice
				}
				return sizeZigzag64Slice, appendZigzag64Slice
			}
			if nozero {
				return sizeZigzag64ValueNoZero, appendZigzag64ValueNoZero
			}
			return sizeZigzag64Value, appendZigzag64Value
		}
	case reflect.Float32:
		if pointer {
			return sizeFloat32Ptr, appendFloat32Ptr
		}
		if slice {
			if packed {
				return sizeFloat32PackedSlice, appendFloat32PackedSlice
			}
			return sizeFloat32Slice, appendFloat32Slice
		}
		if nozero {
			return sizeFloat32ValueNoZero, appendFloat32ValueNoZero
		}
		return sizeFloat32Value, appendFloat32Value
	case reflect.Float64:
		if pointer {
			return sizeFloat64Ptr, appendFloat64Ptr
		}
		if slice {
			if packed {
				return sizeFloat64PackedSlice, appendFloat64PackedSlice
			}
			return sizeFloat64Slice, appendFloat64Slice
		}
		if nozero {
			return sizeFloat64ValueNoZero, appendFloat64ValueNoZero
		}
		return sizeFloat64Value, appendFloat64Value
	case reflect.String:
		if validateUTF8 {
			if pointer {
				return sizeStringPtr, appendUTF8StringPtr
			}
			if slice {
				return sizeStringSlice, appendUTF8StringSlice
			}
			if nozero {
				return sizeStringValueNoZero, appendUTF8StringValueNoZero
			}
			return sizeStringValue, appendUTF8StringValue
		}
		if pointer {
			return sizeStringPtr, appendStringPtr
		}
		if slice {
			return sizeStringSlice, appendStringSlice
		}
		if nozero {
			return sizeStringValueNoZero, appendStringValueNoZero
		}
		return sizeStringValue, appendStringValue
	case reflect.Slice:
		if slice {
			return sizeBytesSlice, appendBytesSlice
		}
		if oneof {
			// Oneof bytes field may also have "proto3" tag.
			// We want to marshal it as a oneof field. Do this
			// check before the proto3 check.
			return sizeBytesOneof, appendBytesOneof
		}
		if proto3 {
			return sizeBytes3, appendBytes3
		}
		return sizeBytes, appendBytes
	case reflect.Struct:
		switch encoding {
		case "group":
			if slice {
				return makeGroupSliceMarshaler(getMarshalInfo(t))
			}
			return makeGroupMarshaler(getMarshalInfo(t))
		case "bytes":
			if pointer {
				if slice {
					return makeMessageSliceMarshaler(getMarshalInfo(t))
				}
				return makeMessageMarshaler(getMarshalInfo(t))
			} else {
				if slice {
					return makeMessageRefSliceMarshaler(getMarshalInfo(t))
				}
				return makeMessageRefMarshaler(getMarshalInfo(t))
			}
		}
	}
	panic(fmt.Sprintf("unknown or mismatched type: type: %v, wire type: %v", t, encoding))
}

// Below are functions to size/marshal a specific type of a field.
// They are stored in the field's info, and called by function pointers.
// They have type sizer or marshaler.

func sizeFixed32Value(_ pointer, tagsize int) int {
	return 4 + tagsize
}
func sizeFixed32ValueNoZero(ptr pointer, tagsize int) int {
	v := *ptr.toUint32()
	if v == 0 {
		return 0
	}
	return 4 + tagsize
}
func sizeFixed32Ptr(ptr pointer, tagsize int) int {
	p := *ptr.toUint32Ptr()
	if p == nil {
		return 0
	}
	return 4 + tagsize
}
func sizeFixed32Slice(ptr pointer, tagsize int) int {
	s := *ptr.toUint32Slice()
	return (4 + tagsize) * len(s)
}
func sizeFixed32PackedSlice(ptr pointer, tagsize int) int {
	s := *ptr.toUint32Slice()
	if len(s) == 0 {
		return 0
	}
	return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize
}
func sizeFixedS32Value(_ pointer, tagsize int) int {
	return 4 + tagsize
}
func sizeFixedS32ValueNoZero(ptr pointer, tagsize int) int {
	v := *ptr.toInt32()
	if v == 0 {
		return 0
	}
	return 4 + tagsize
}
func sizeFixedS32Ptr(ptr pointer, tagsize int) int {
	p := ptr.getInt32Ptr()
	if p == nil {
		return 0
	}
	return 4 + tagsize
}
func sizeFixedS32Slice(ptr pointer, tagsize int) int {
	s := ptr.getInt32Slice()
	return (4 + tagsize) * len(s)
}
func sizeFixedS32PackedSlice(ptr pointer, tagsize int) int {
	s := ptr.getInt32Slice()
	if len(s) == 0 {
		return 0
	}
	return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize
}
func sizeFloat32Value(_ pointer, tagsize int) int {
	return 4 + tagsize
}
func sizeFloat32ValueNoZero(ptr pointer, tagsize int) int {
	v := math.Float32bits(*ptr.toFloat32())
	if v == 0 {
		return 0
	}
	return 4 + tagsize
}
func sizeFloat32Ptr(ptr pointer, tagsize int) int {
	p := *ptr.toFloat32Ptr()
	if p == nil {
		return 0
	}
	return 4 + tagsize
}
func sizeFloat32Slice(ptr pointer, tagsize int) int {
	s := *ptr.toFloat32Slice()
	return (4 + tagsize) * len(s)
}
func sizeFloat32PackedSlice(ptr pointer, tagsize int) int {
	s := *ptr.toFloat32Slice()
	if len(s) == 0 {
		return 0
	}
	return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize
}
func sizeFixed64Value(_ pointer, tagsize int) int {
	return 8 + tagsize
}
func sizeFixed64ValueNoZero(ptr pointer, tagsize int) int {
	v := *ptr.toUint64()
	if v == 0 {
		return 0
	}
	return 8 + tagsize
}
func sizeFixed64Ptr(ptr pointer, tagsize int) int {
	p := *ptr.toUint64Ptr()
	if p == nil {
		return 0
	}
	return 8 + tagsize
}
func sizeFixed64Slice(ptr pointer, tagsize int) int {
	s := *ptr.toUint64Slice()
	return (8 + tagsize) * len(s)
}
func sizeFixed64PackedSlice(ptr pointer, tagsize int) int {
	s := *ptr.toUint64Slice()
	if len(s) == 0 {
		return 0
	}
	return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize
}
func sizeFixedS64Value(_ pointer, tagsize int) int {
	return 8 + tagsize
}
func sizeFixedS64ValueNoZero(ptr pointer, tagsize int) int {
	v := *ptr.toInt64()
	if v == 0 {
		return 0
	}
	return 8 + tagsize
}
func sizeFixedS64Ptr(ptr pointer, tagsize int) int {
	p := *ptr.toInt64Ptr()
	if p == nil {
		return 0
	}
	return 8 + tagsize
}
func sizeFixedS64Slice(ptr pointer, tagsize int) int {
	s := *ptr.toInt64Slice()
	return (8 + tagsize) * len(s)
}
func sizeFixedS64PackedSlice(ptr pointer, tagsize int) int {
	s := *ptr.toInt64Slice()
	if len(s) == 0 {
		return 0
	}
	return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize
}
func sizeFloat64Value(_ pointer, tagsize int) int {
	return 8 + tagsize
}
func sizeFloat64ValueNoZero(ptr pointer, tagsize int) int {
	v := math.Float64bits(*ptr.toFloat64())
	if v == 0 {
		return 0
	}
	return 8 + tagsize
}
func sizeFloat64Ptr(ptr pointer, tagsize int) int {
	p := *ptr.toFloat64Ptr()
	if p == nil {
		return 0
	}
	return 8 + tagsize
}
func sizeFloat64Slice(ptr pointer, tagsize int) int {
	s := *ptr.toFloat64Slice()
	return (8 + tagsize) * len(s)
}
func sizeFloat64PackedSlice(ptr pointer, tagsize int) int {
	s := *ptr.toFloat64Slice()
	if len(s) == 0 {
		return 0
	}
	return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize
}
func sizeVarint32Value(ptr pointer, tagsize int) int {
	v := *ptr.toUint32()
	return SizeVarint(uint64(v)) + tagsize
}
func sizeVarint32ValueNoZero(ptr pointer, tagsize int) int {
	v := *ptr.toUint32()
	if v == 0 {
		return 0
	}
	return SizeVarint(uint64(v)) + tagsize
}
func sizeVarint32Ptr(ptr pointer, tagsize int) int {
	p := *ptr.toUint32Ptr()
	if p == nil {
		return 0
	}
	return SizeVarint(uint64(*p)) + tagsize
}
func sizeVarint32Slice(ptr pointer, tagsize int) int {
	s := *ptr.toUint32Slice()
	n := 0
	for _, v := range s {
		n += SizeVarint(uint64(v)) + tagsize
	}
	return n
}
func sizeVarint32PackedSlice(ptr pointer, tagsize int) int {
	s := *ptr.toUint32Slice()
	if len(s) == 0 {
		return 0
	}
	n := 0
	for _, v := range s {
		n += SizeVarint(uint64(v))
	}
	return n + SizeVarint(uint64(n)) + tagsize
}
func sizeVarintS32Value(ptr pointer, tagsize int) int {
	v := *ptr.toInt32()
	return SizeVarint(uint64(v)) + tagsize
}
func sizeVarintS32ValueNoZero(ptr pointer, tagsize int) int {
	v := *ptr.toInt32()
	if v == 0 {
		return 0
	}
	return SizeVarint(uint64(v)) + tagsize
}
func sizeVarintS32Ptr(ptr pointer, tagsize int) int {
	p := ptr.getInt32Ptr()
	if p == nil {
		return 0
	}
	return SizeVarint(uint64(*p)) + tagsize
}
func sizeVarintS32Slice(ptr pointer, tagsize int) int {
	s := ptr.getInt32Slice()
	n := 0
	for _, v := range s {
		n += SizeVarint(uint64(v)) + tagsize
	}
	return n
}
func sizeVarintS32PackedSlice(ptr pointer, tagsize int) int {
	s := ptr.getInt32Slice()
	if len(s) == 0 {
		return 0
	}
	n := 0
	for _, v := range s {
		n += SizeVarint(uint64(v))
	}
	return n + SizeVarint(uint64(n)) + tagsize
}
func sizeVarint64Value(ptr pointer, tagsize int) int {
	v := *ptr.toUint64()
	return SizeVarint(v) + tagsize
}
func sizeVarint64ValueNoZero(ptr pointer, tagsize int) int {
	v := *ptr.toUint64()
	if v == 0 {
		return 0
	}
	return SizeVarint(v) + tagsize
}
func sizeVarint64Ptr(ptr pointer, tagsize int) int {
	p := *ptr.toUint64Ptr()
	if p == nil {
		return 0
	}
	return SizeVarint(*p) + tagsize
}
func sizeVarint64Slice(ptr pointer, tagsize int) int {
	s := *ptr.toUint64Slice()
	n := 0
	for _, v := range s {
		n += SizeVarint(v) + tagsize
	}
	return n
}
func sizeVarint64PackedSlice(ptr pointer, tagsize int) int {
	s := *ptr.toUint64Slice()
	if len(s) == 0 {
		return 0
	}
	n := 0
	for _, v := range s {
		n += SizeVarint(v)
	}
	return n + SizeVarint(uint64(n)) + tagsize
}
func sizeVarintS64Value(ptr pointer, tagsize int) int {
	v := *ptr.toInt64()
	return SizeVarint(uint64(v)) + tagsize
}
func sizeVarintS64ValueNoZero(ptr pointer, tagsize int) int {
	v := *ptr.toInt64()
	if v == 0 {
		return 0
	}
	return SizeVarint(uint64(v)) + tagsize
}
func sizeVarintS64Ptr(ptr pointer, tagsize int) int {
	p := *ptr.toInt64Ptr()
	if p == nil {
		return 0
	}
	return SizeVarint(uint64(*p)) + tagsize
}
func sizeVarintS64Slice(ptr pointer, tagsize int) int {
	s := *ptr.toInt64Slice()
	n := 0
	for _, v := range s {
		n += SizeVarint(uint64(v)) + tagsize
	}
	return n
}
func sizeVarintS64PackedSlice(ptr pointer, tagsize int) int {
	s := *ptr.toInt64Slice()
	if len(s) == 0 {
		return 0
	}
	n := 0
	for _, v := range s {
		n += SizeVarint(uint64(v))
	}
	return n + SizeVarint(uint64(n)) + tagsize
}
func sizeZigzag32Value(ptr pointer, tagsize int) int {
	v := *ptr.toInt32()
	return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize
}
func sizeZigzag32ValueNoZero(ptr pointer, tagsize int) int {
	v := *ptr.toInt32()
	if v == 0 {
		return 0
	}
	return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize
}
func sizeZigzag32Ptr(ptr pointer, tagsize int) int {
	p := ptr.getInt32Ptr()
	if p == nil {
		return 0
	}
	v := *p
	return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize
}
func sizeZigzag32Slice(ptr pointer, tagsize int) int {
	s := ptr.getInt32Slice()
	n := 0
	for _, v := range s {
		n += SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize
	}
	return n
}
func sizeZigzag32PackedSlice(ptr pointer, tagsize int) int {
	s := ptr.getInt32Slice()
	if len(s) == 0 {
		return 0
	}
	n := 0
	for _, v := range s {
		n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31))))
	}
	return n + SizeVarint(uint64(n)) + tagsize
}
func sizeZigzag64Value(ptr pointer, tagsize int) int {
	v := *ptr.toInt64()
	return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize
}
func sizeZigzag64ValueNoZero(ptr pointer, tagsize int) int {
	v := *ptr.toInt64()
	if v == 0 {
		return 0
	}
	return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize
}
func sizeZigzag64Ptr(ptr pointer, tagsize int) int {
	p := *ptr.toInt64Ptr()
	if p == nil {
		return 0
	}
	v := *p
	return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize
}
func sizeZigzag64Slice(ptr pointer, tagsize int) int {
	s := *ptr.toInt64Slice()
	n := 0
	for _, v := range s {
		n += SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize
	}
	return n
}
func sizeZigzag64PackedSlice(ptr pointer, tagsize int) int {
	s := *ptr.toInt64Slice()
	if len(s) == 0 {
		return 0
	}
	n := 0
	for _, v := range s {
		n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63)))
	}
	return n + SizeVarint(uint64(n)) + tagsize
}
func sizeBoolValue(_ pointer, tagsize int) int {
	return 1 + tagsize
}
func sizeBoolValueNoZero(ptr pointer, tagsize int) int {
	v := *ptr.toBool()
	if !v {
		return 0
	}
	return 1 + tagsize
}
func sizeBoolPtr(ptr pointer, tagsize int) int {
	p := *ptr.toBoolPtr()
	if p == nil {
		return 0
	}
	return 1 + tagsize
}
func sizeBoolSlice(ptr pointer, tagsize int) int {
	s := *ptr.toBoolSlice()
	return (1 + tagsize) * len(s)
}
func sizeBoolPackedSlice(ptr pointer, tagsize int) int {
	s := *ptr.toBoolSlice()
	if len(s) == 0 {
		return 0
	}
	return len(s) + SizeVarint(uint64(len(s))) + tagsize
}
func sizeStringValue(ptr pointer, tagsize int) int {
	v := *ptr.toString()
	return len(v) + SizeVarint(uint64(len(v))) + tagsize
}
func sizeStringValueNoZero(ptr pointer, tagsize int) int {
	v := *ptr.toString()
	if v == "" {
		return 0
	}
	return len(v) + SizeVarint(uint64(len(v))) + tagsize
}
func sizeStringPtr(ptr pointer, tagsize int) int {
	p := *ptr.toStringPtr()
	if p == nil {
		return 0
	}
	v := *p
	return len(v) + SizeVarint(uint64(len(v))) + tagsize
}
func sizeStringSlice(ptr pointer, tagsize int) int {
	s := *ptr.toStringSlice()
	n := 0
	for _, v := range s {
		n += len(v) + SizeVarint(uint64(len(v))) + tagsize
	}
	return n
}
func sizeBytes(ptr pointer, tagsize int) int {
	v := *ptr.toBytes()
	if v == nil {
		return 0
	}
	return len(v) + SizeVarint(uint64(len(v))) + tagsize
}
func sizeBytes3(ptr pointer, tagsize int) int {
	v := *ptr.toBytes()
	if len(v) == 0 {
		return 0
	}
	return len(v) + SizeVarint(uint64(len(v))) + tagsize
}
func sizeBytesOneof(ptr pointer, tagsize int) int {
	v := *ptr.toBytes()
	return len(v) + SizeVarint(uint64(len(v))) + tagsize
}
func sizeBytesSlice(ptr pointer, tagsize int) int {
	s := *ptr.toBytesSlice()
	n := 0
	for _, v := range s {
		n += len(v) + SizeVarint(uint64(len(v))) + tagsize
	}
	return n
}

// appendFixed32 appends an encoded fixed32 to b.
func appendFixed32(b []byte, v uint32) []byte {
	b = append(b,
		byte(v),
		byte(v>>8),
		byte(v>>16),
		byte(v>>24))
	return b
}

// appendFixed64 appends an encoded fixed64 to b.
func appendFixed64(b []byte, v uint64) []byte {
	b = append(b,
		byte(v),
		byte(v>>8),
		byte(v>>16),
		byte(v>>24),
		byte(v>>32),
		byte(v>>40),
		byte(v>>48),
		byte(v>>56))
	return b
}

// appendVarint appends an encoded varint to b.
func appendVarint(b []byte, v uint64) []byte {
	// TODO: make 1-byte (maybe 2-byte) case inline-able, once we
	// have non-leaf inliner.
	switch {
	case v < 1<<7:
		b = append(b, byte(v))
	case v < 1<<14:
		b = append(b,
			byte(v&0x7f|0x80),
			byte(v>>7))
	case v < 1<<21:
		b = append(b,
			byte(v&0x7f|0x80),
			byte((v>>7)&0x7f|0x80),
			byte(v>>14))
	case v < 1<<28:
		b = append(b,
			byte(v&0x7f|0x80),
			byte((v>>7)&0x7f|0x80),
			byte((v>>14)&0x7f|0x80),
			byte(v>>21))
	case v < 1<<35:
		b = append(b,
			byte(v&0x7f|0x80),
			byte((v>>7)&0x7f|0x80),
			byte((v>>14)&0x7f|0x80),
			byte((v>>21)&0x7f|0x80),
			byte(v>>28))
	case v < 1<<42:
		b = append(b,
			byte(v&0x7f|0x80),
			byte((v>>7)&0x7f|0x80),
			byte((v>>14)&0x7f|0x80),
			byte((v>>21)&0x7f|0x80),
			byte((v>>28)&0x7f|0x80),
			byte(v>>35))
	case v < 1<<49:
		b = append(b,
			byte(v&0x7f|0x80),
			byte((v>>7)&0x7f|0x80),
			byte((v>>14)&0x7f|0x80),
			byte((v>>21)&0x7f|0x80),
			byte((v>>28)&0x7f|0x80),
			byte((v>>35)&0x7f|0x80),
			byte(v>>42))
	case v < 1<<56:
		b = append(b,
			byte(v&0x7f|0x80),
			byte((v>>7)&0x7f|0x80),
			byte((v>>14)&0x7f|0x80),
			byte((v>>21)&0x7f|0x80),
			byte((v>>28)&0x7f|0x80),
			byte((v>>35)&0x7f|0x80),
			byte((v>>42)&0x7f|0x80),
			byte(v>>49))
	case v < 1<<63:
		b = append(b,
			byte(v&0x7f|0x80),
			byte((v>>7)&0x7f|0x80),
			byte((v>>14)&0x7f|0x80),
			byte((v>>21)&0x7f|0x80),
			byte((v>>28)&0x7f|0x80),
			byte((v>>35)&0x7f|0x80),
			byte((v>>42)&0x7f|0x80),
			byte((v>>49)&0x7f|0x80),
			byte(v>>56))
	default:
		b = append(b,
			byte(v&0x7f|0x80),
			byte((v>>7)&0x7f|0x80),
			byte((v>>14)&0x7f|0x80),
			byte((v>>21)&0x7f|0x80),
			byte((v>>28)&0x7f|0x80),
			byte((v>>35)&0x7f|0x80),
			byte((v>>42)&0x7f|0x80),
			byte((v>>49)&0x7f|0x80),
			byte((v>>56)&0x7f|0x80),
			1)
	}
	return b
}

func appendFixed32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := *ptr.toUint32()
	b = appendVarint(b, wiretag)
	b = appendFixed32(b, v)
	return b, nil
}
func appendFixed32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := *ptr.toUint32()
	if v == 0 {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	b = appendFixed32(b, v)
	return b, nil
}
func appendFixed32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	p := *ptr.toUint32Ptr()
	if p == nil {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	b = appendFixed32(b, *p)
	return b, nil
}
func appendFixed32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := *ptr.toUint32Slice()
	for _, v := range s {
		b = appendVarint(b, wiretag)
		b = appendFixed32(b, v)
	}
	return b, nil
}
func appendFixed32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := *ptr.toUint32Slice()
	if len(s) == 0 {
		return b, nil
	}
	b = appendVarint(b, wiretag&^7|WireBytes)
	b = appendVarint(b, uint64(4*len(s)))
	for _, v := range s {
		b = appendFixed32(b, v)
	}
	return b, nil
}
func appendFixedS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := *ptr.toInt32()
	b = appendVarint(b, wiretag)
	b = appendFixed32(b, uint32(v))
	return b, nil
}
func appendFixedS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := *ptr.toInt32()
	if v == 0 {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	b = appendFixed32(b, uint32(v))
	return b, nil
}
func appendFixedS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	p := ptr.getInt32Ptr()
	if p == nil {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	b = appendFixed32(b, uint32(*p))
	return b, nil
}
func appendFixedS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := ptr.getInt32Slice()
	for _, v := range s {
		b = appendVarint(b, wiretag)
		b = appendFixed32(b, uint32(v))
	}
	return b, nil
}
func appendFixedS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := ptr.getInt32Slice()
	if len(s) == 0 {
		return b, nil
	}
	b = appendVarint(b, wiretag&^7|WireBytes)
	b = appendVarint(b, uint64(4*len(s)))
	for _, v := range s {
		b = appendFixed32(b, uint32(v))
	}
	return b, nil
}
func appendFloat32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := math.Float32bits(*ptr.toFloat32())
	b = appendVarint(b, wiretag)
	b = appendFixed32(b, v)
	return b, nil
}
func appendFloat32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := math.Float32bits(*ptr.toFloat32())
	if v == 0 {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	b = appendFixed32(b, v)
	return b, nil
}
func appendFloat32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	p := *ptr.toFloat32Ptr()
	if p == nil {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	b = appendFixed32(b, math.Float32bits(*p))
	return b, nil
}
func appendFloat32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := *ptr.toFloat32Slice()
	for _, v := range s {
		b = appendVarint(b, wiretag)
		b = appendFixed32(b, math.Float32bits(v))
	}
	return b, nil
}
func appendFloat32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := *ptr.toFloat32Slice()
	if len(s) == 0 {
		return b, nil
	}
	b = appendVarint(b, wiretag&^7|WireBytes)
	b = appendVarint(b, uint64(4*len(s)))
	for _, v := range s {
		b = appendFixed32(b, math.Float32bits(v))
	}
	return b, nil
}
func appendFixed64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := *ptr.toUint64()
	b = appendVarint(b, wiretag)
	b = appendFixed64(b, v)
	return b, nil
}
func appendFixed64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := *ptr.toUint64()
	if v == 0 {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	b = appendFixed64(b, v)
	return b, nil
}
func appendFixed64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	p := *ptr.toUint64Ptr()
	if p == nil {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	b = appendFixed64(b, *p)
	return b, nil
}
func appendFixed64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := *ptr.toUint64Slice()
	for _, v := range s {
		b = appendVarint(b, wiretag)
		b = appendFixed64(b, v)
	}
	return b, nil
}
func appendFixed64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := *ptr.toUint64Slice()
	if len(s) == 0 {
		return b, nil
	}
	b = appendVarint(b, wiretag&^7|WireBytes)
	b = appendVarint(b, uint64(8*len(s)))
	for _, v := range s {
		b = appendFixed64(b, v)
	}
	return b, nil
}
func appendFixedS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := *ptr.toInt64()
	b = appendVarint(b, wiretag)
	b = appendFixed64(b, uint64(v))
	return b, nil
}
func appendFixedS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := *ptr.toInt64()
	if v == 0 {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	b = appendFixed64(b, uint64(v))
	return b, nil
}
func appendFixedS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	p := *ptr.toInt64Ptr()
	if p == nil {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	b = appendFixed64(b, uint64(*p))
	return b, nil
}
func appendFixedS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := *ptr.toInt64Slice()
	for _, v := range s {
		b = appendVarint(b, wiretag)
		b = appendFixed64(b, uint64(v))
	}
	return b, nil
}
func appendFixedS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := *ptr.toInt64Slice()
	if len(s) == 0 {
		return b, nil
	}
	b = appendVarint(b, wiretag&^7|WireBytes)
	b = appendVarint(b, uint64(8*len(s)))
	for _, v := range s {
		b = appendFixed64(b, uint64(v))
	}
	return b, nil
}
func appendFloat64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := math.Float64bits(*ptr.toFloat64())
	b = appendVarint(b, wiretag)
	b = appendFixed64(b, v)
	return b, nil
}
func appendFloat64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := math.Float64bits(*ptr.toFloat64())
	if v == 0 {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	b = appendFixed64(b, v)
	return b, nil
}
func appendFloat64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	p := *ptr.toFloat64Ptr()
	if p == nil {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	b = appendFixed64(b, math.Float64bits(*p))
	return b, nil
}
func appendFloat64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := *ptr.toFloat64Slice()
	for _, v := range s {
		b = appendVarint(b, wiretag)
		b = appendFixed64(b, math.Float64bits(v))
	}
	return b, nil
}
func appendFloat64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := *ptr.toFloat64Slice()
	if len(s) == 0 {
		return b, nil
	}
	b = appendVarint(b, wiretag&^7|WireBytes)
	b = appendVarint(b, uint64(8*len(s)))
	for _, v := range s {
		b = appendFixed64(b, math.Float64bits(v))
	}
	return b, nil
}
func appendVarint32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := *ptr.toUint32()
	b = appendVarint(b, wiretag)
	b = appendVarint(b, uint64(v))
	return b, nil
}
func appendVarint32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := *ptr.toUint32()
	if v == 0 {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	b = appendVarint(b, uint64(v))
	return b, nil
}
func appendVarint32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	p := *ptr.toUint32Ptr()
	if p == nil {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	b = appendVarint(b, uint64(*p))
	return b, nil
}
func appendVarint32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := *ptr.toUint32Slice()
	for _, v := range s {
		b = appendVarint(b, wiretag)
		b = appendVarint(b, uint64(v))
	}
	return b, nil
}
func appendVarint32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := *ptr.toUint32Slice()
	if len(s) == 0 {
		return b, nil
	}
	b = appendVarint(b, wiretag&^7|WireBytes)
	// compute size
	n := 0
	for _, v := range s {
		n += SizeVarint(uint64(v))
	}
	b = appendVarint(b, uint64(n))
	for _, v := range s {
		b = appendVarint(b, uint64(v))
	}
	return b, nil
}
func appendVarintS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := *ptr.toInt32()
	b = appendVarint(b, wiretag)
	b = appendVarint(b, uint64(v))
	return b, nil
}
func appendVarintS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := *ptr.toInt32()
	if v == 0 {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	b = appendVarint(b, uint64(v))
	return b, nil
}
func appendVarintS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	p := ptr.getInt32Ptr()
	if p == nil {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	b = appendVarint(b, uint64(*p))
	return b, nil
}
func appendVarintS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := ptr.getInt32Slice()
	for _, v := range s {
		b = appendVarint(b, wiretag)
		b = appendVarint(b, uint64(v))
	}
	return b, nil
}
func appendVarintS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := ptr.getInt32Slice()
	if len(s) == 0 {
		return b, nil
	}
	b = appendVarint(b, wiretag&^7|WireBytes)
	// compute size
	n := 0
	for _, v := range s {
		n += SizeVarint(uint64(v))
	}
	b = appendVarint(b, uint64(n))
	for _, v := range s {
		b = appendVarint(b, uint64(v))
	}
	return b, nil
}
func appendVarint64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := *ptr.toUint64()
	b = appendVarint(b, wiretag)
	b = appendVarint(b, v)
	return b, nil
}
func appendVarint64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := *ptr.toUint64()
	if v == 0 {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	b = appendVarint(b, v)
	return b, nil
}
func appendVarint64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	p := *ptr.toUint64Ptr()
	if p == nil {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	b = appendVarint(b, *p)
	return b, nil
}
func appendVarint64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := *ptr.toUint64Slice()
	for _, v := range s {
		b = appendVarint(b, wiretag)
		b = appendVarint(b, v)
	}
	return b, nil
}
func appendVarint64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := *ptr.toUint64Slice()
	if len(s) == 0 {
		return b, nil
	}
	b = appendVarint(b, wiretag&^7|WireBytes)
	// compute size
	n := 0
	for _, v := range s {
		n += SizeVarint(v)
	}
	b = appendVarint(b, uint64(n))
	for _, v := range s {
		b = appendVarint(b, v)
	}
	return b, nil
}
func appendVarintS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := *ptr.toInt64()
	b = appendVarint(b, wiretag)
	b = appendVarint(b, uint64(v))
	return b, nil
}
func appendVarintS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := *ptr.toInt64()
	if v == 0 {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	b = appendVarint(b, uint64(v))
	return b, nil
}
func appendVarintS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	p := *ptr.toInt64Ptr()
	if p == nil {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	b = appendVarint(b, uint64(*p))
	return b, nil
}
func appendVarintS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := *ptr.toInt64Slice()
	for _, v := range s {
		b = appendVarint(b, wiretag)
		b = appendVarint(b, uint64(v))
	}
	return b, nil
}
func appendVarintS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := *ptr.toInt64Slice()
	if len(s) == 0 {
		return b, nil
	}
	b = appendVarint(b, wiretag&^7|WireBytes)
	// compute size
	n := 0
	for _, v := range s {
		n += SizeVarint(uint64(v))
	}
	b = appendVarint(b, uint64(n))
	for _, v := range s {
		b = appendVarint(b, uint64(v))
	}
	return b, nil
}
func appendZigzag32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := *ptr.toInt32()
	b = appendVarint(b, wiretag)
	b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
	return b, nil
}
func appendZigzag32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := *ptr.toInt32()
	if v == 0 {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
	return b, nil
}
func appendZigzag32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	p := ptr.getInt32Ptr()
	if p == nil {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	v := *p
	b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
	return b, nil
}
func appendZigzag32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := ptr.getInt32Slice()
	for _, v := range s {
		b = appendVarint(b, wiretag)
		b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
	}
	return b, nil
}
func appendZigzag32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := ptr.getInt32Slice()
	if len(s) == 0 {
		return b, nil
	}
	b = appendVarint(b, wiretag&^7|WireBytes)
	// compute size
	n := 0
	for _, v := range s {
		n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31))))
	}
	b = appendVarint(b, uint64(n))
	for _, v := range s {
		b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
	}
	return b, nil
}
func appendZigzag64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := *ptr.toInt64()
	b = appendVarint(b, wiretag)
	b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
	return b, nil
}
func appendZigzag64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := *ptr.toInt64()
	if v == 0 {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
	return b, nil
}
func appendZigzag64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	p := *ptr.toInt64Ptr()
	if p == nil {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	v := *p
	b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
	return b, nil
}
func appendZigzag64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := *ptr.toInt64Slice()
	for _, v := range s {
		b = appendVarint(b, wiretag)
		b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
	}
	return b, nil
}
func appendZigzag64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := *ptr.toInt64Slice()
	if len(s) == 0 {
		return b, nil
	}
	b = appendVarint(b, wiretag&^7|WireBytes)
	// compute size
	n := 0
	for _, v := range s {
		n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63)))
	}
	b = appendVarint(b, uint64(n))
	for _, v := range s {
		b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
	}
	return b, nil
}
func appendBoolValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := *ptr.toBool()
	b = appendVarint(b, wiretag)
	if v {
		b = append(b, 1)
	} else {
		b = append(b, 0)
	}
	return b, nil
}
func appendBoolValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := *ptr.toBool()
	if !v {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	b = append(b, 1)
	return b, nil
}

func appendBoolPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	p := *ptr.toBoolPtr()
	if p == nil {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	if *p {
		b = append(b, 1)
	} else {
		b = append(b, 0)
	}
	return b, nil
}
func appendBoolSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := *ptr.toBoolSlice()
	for _, v := range s {
		b = appendVarint(b, wiretag)
		if v {
			b = append(b, 1)
		} else {
			b = append(b, 0)
		}
	}
	return b, nil
}
func appendBoolPackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := *ptr.toBoolSlice()
	if len(s) == 0 {
		return b, nil
	}
	b = appendVarint(b, wiretag&^7|WireBytes)
	b = appendVarint(b, uint64(len(s)))
	for _, v := range s {
		if v {
			b = append(b, 1)
		} else {
			b = append(b, 0)
		}
	}
	return b, nil
}
func appendStringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := *ptr.toString()
	b = appendVarint(b, wiretag)
	b = appendVarint(b, uint64(len(v)))
	b = append(b, v...)
	return b, nil
}
func appendStringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := *ptr.toString()
	if v == "" {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	b = appendVarint(b, uint64(len(v)))
	b = append(b, v...)
	return b, nil
}
func appendStringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	p := *ptr.toStringPtr()
	if p == nil {
		return b, nil
	}
	v := *p
	b = appendVarint(b, wiretag)
	b = appendVarint(b, uint64(len(v)))
	b = append(b, v...)
	return b, nil
}
func appendStringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := *ptr.toStringSlice()
	for _, v := range s {
		b = appendVarint(b, wiretag)
		b = appendVarint(b, uint64(len(v)))
		b = append(b, v...)
	}
	return b, nil
}
func appendUTF8StringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	var invalidUTF8 bool
	v := *ptr.toString()
	if !utf8.ValidString(v) {
		invalidUTF8 = true
	}
	b = appendVarint(b, wiretag)
	b = appendVarint(b, uint64(len(v)))
	b = append(b, v...)
	if invalidUTF8 {
		return b, errInvalidUTF8
	}
	return b, nil
}
func appendUTF8StringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	var invalidUTF8 bool
	v := *ptr.toString()
	if v == "" {
		return b, nil
	}
	if !utf8.ValidString(v) {
		invalidUTF8 = true
	}
	b = appendVarint(b, wiretag)
	b = appendVarint(b, uint64(len(v)))
	b = append(b, v...)
	if invalidUTF8 {
		return b, errInvalidUTF8
	}
	return b, nil
}
func appendUTF8StringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	var invalidUTF8 bool
	p := *ptr.toStringPtr()
	if p == nil {
		return b, nil
	}
	v := *p
	if !utf8.ValidString(v) {
		invalidUTF8 = true
	}
	b = appendVarint(b, wiretag)
	b = appendVarint(b, uint64(len(v)))
	b = append(b, v...)
	if invalidUTF8 {
		return b, errInvalidUTF8
	}
	return b, nil
}
func appendUTF8StringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	var invalidUTF8 bool
	s := *ptr.toStringSlice()
	for _, v := range s {
		if !utf8.ValidString(v) {
			invalidUTF8 = true
		}
		b = appendVarint(b, wiretag)
		b = appendVarint(b, uint64(len(v)))
		b = append(b, v...)
	}
	if invalidUTF8 {
		return b, errInvalidUTF8
	}
	return b, nil
}
func appendBytes(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := *ptr.toBytes()
	if v == nil {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	b = appendVarint(b, uint64(len(v)))
	b = append(b, v...)
	return b, nil
}
func appendBytes3(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := *ptr.toBytes()
	if len(v) == 0 {
		return b, nil
	}
	b = appendVarint(b, wiretag)
	b = appendVarint(b, uint64(len(v)))
	b = append(b, v...)
	return b, nil
}
func appendBytesOneof(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	v := *ptr.toBytes()
	b = appendVarint(b, wiretag)
	b = appendVarint(b, uint64(len(v)))
	b = append(b, v...)
	return b, nil
}
func appendBytesSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
	s := *ptr.toBytesSlice()
	for _, v := range s {
		b = appendVarint(b, wiretag)
		b = appendVarint(b, uint64(len(v)))
		b = append(b, v...)
	}
	return b, nil
}

// makeGroupMarshaler returns the sizer and marshaler for a group.
// u is the marshal info of the underlying message.
func makeGroupMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			p := ptr.getPointer()
			if p.isNil() {
				return 0
			}
			return u.size(p) + 2*tagsize
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			p := ptr.getPointer()
			if p.isNil() {
				return b, nil
			}
			var err error
			b = appendVarint(b, wiretag) // start group
			b, err = u.marshal(b, p, deterministic)
			b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group
			return b, err
		}
}

// makeGroupSliceMarshaler returns the sizer and marshaler for a group slice.
// u is the marshal info of the underlying message.
func makeGroupSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			s := ptr.getPointerSlice()
			n := 0
			for _, v := range s {
				if v.isNil() {
					continue
				}
				n += u.size(v) + 2*tagsize
			}
			return n
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			s := ptr.getPointerSlice()
			var err error
			var nerr nonFatal
			for _, v := range s {
				if v.isNil() {
					return b, errRepeatedHasNil
				}
				b = appendVarint(b, wiretag) // start group
				b, err = u.marshal(b, v, deterministic)
				b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group
				if !nerr.Merge(err) {
					if err == ErrNil {
						err = errRepeatedHasNil
					}
					return b, err
				}
			}
			return b, nerr.E
		}
}

// makeMessageMarshaler returns the sizer and marshaler for a message field.
// u is the marshal info of the message.
func makeMessageMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			p := ptr.getPointer()
			if p.isNil() {
				return 0
			}
			siz := u.size(p)
			return siz + SizeVarint(uint64(siz)) + tagsize
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			p := ptr.getPointer()
			if p.isNil() {
				return b, nil
			}
			b = appendVarint(b, wiretag)
			siz := u.cachedsize(p)
			b = appendVarint(b, uint64(siz))
			return u.marshal(b, p, deterministic)
		}
}

// makeMessageSliceMarshaler returns the sizer and marshaler for a message slice.
// u is the marshal info of the message.
func makeMessageSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			s := ptr.getPointerSlice()
			n := 0
			for _, v := range s {
				if v.isNil() {
					continue
				}
				siz := u.size(v)
				n += siz + SizeVarint(uint64(siz)) + tagsize
			}
			return n
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			s := ptr.getPointerSlice()
			var err error
			var nerr nonFatal
			for _, v := range s {
				if v.isNil() {
					return b, errRepeatedHasNil
				}
				b = appendVarint(b, wiretag)
				siz := u.cachedsize(v)
				b = appendVarint(b, uint64(siz))
				b, err = u.marshal(b, v, deterministic)

				if !nerr.Merge(err) {
					if err == ErrNil {
						err = errRepeatedHasNil
					}
					return b, err
				}
			}
			return b, nerr.E
		}
}

// makeMapMarshaler returns the sizer and marshaler for a map field.
// f is the pointer to the reflect data structure of the field.
func makeMapMarshaler(f *reflect.StructField) (sizer, marshaler) {
	// figure out key and value type
	t := f.Type
	keyType := t.Key()
	valType := t.Elem()
	tags := strings.Split(f.Tag.Get("protobuf"), ",")
	keyTags := strings.Split(f.Tag.Get("protobuf_key"), ",")
	valTags := strings.Split(f.Tag.Get("protobuf_val"), ",")
	stdOptions := false
	for _, t := range tags {
		if strings.HasPrefix(t, "customtype=") {
			valTags = append(valTags, t)
		}
		if t == "stdtime" {
			valTags = append(valTags, t)
			stdOptions = true
		}
		if t == "stdduration" {
			valTags = append(valTags, t)
			stdOptions = true
		}
		if t == "wktptr" {
			valTags = append(valTags, t)
		}
	}
	keySizer, keyMarshaler := typeMarshaler(keyType, keyTags, false, false) // don't omit zero value in map
	valSizer, valMarshaler := typeMarshaler(valType, valTags, false, false) // don't omit zero value in map
	keyWireTag := 1<<3 | wiretype(keyTags[0])
	valWireTag := 2<<3 | wiretype(valTags[0])

	// We create an interface to get the addresses of the map key and value.
	// If value is pointer-typed, the interface is a direct interface, the
	// idata itself is the value. Otherwise, the idata is the pointer to the
	// value.
	// Key cannot be pointer-typed.
	valIsPtr := valType.Kind() == reflect.Ptr

	// If value is a message with nested maps, calling
	// valSizer in marshal may be quadratic. We should use
	// cached version in marshal (but not in size).
	// If value is not message type, we don't have size cache,
	// but it cannot be nested either. Just use valSizer.
	valCachedSizer := valSizer
	if valIsPtr && !stdOptions && valType.Elem().Kind() == reflect.Struct {
		u := getMarshalInfo(valType.Elem())
		valCachedSizer = func(ptr pointer, tagsize int) int {
			// Same as message sizer, but use cache.
			p := ptr.getPointer()
			if p.isNil() {
				return 0
			}
			siz := u.cachedsize(p)
			return siz + SizeVarint(uint64(siz)) + tagsize
		}
	}
	return func(ptr pointer, tagsize int) int {
			m := ptr.asPointerTo(t).Elem() // the map
			n := 0
			for _, k := range m.MapKeys() {
				ki := k.Interface()
				vi := m.MapIndex(k).Interface()
				kaddr := toAddrPointer(&ki, false)             // pointer to key
				vaddr := toAddrPointer(&vi, valIsPtr)          // pointer to value
				siz := keySizer(kaddr, 1) + valSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1)
				n += siz + SizeVarint(uint64(siz)) + tagsize
			}
			return n
		},
		func(b []byte, ptr pointer, tag uint64, deterministic bool) ([]byte, error) {
			m := ptr.asPointerTo(t).Elem() // the map
			var err error
			keys := m.MapKeys()
			if len(keys) > 1 && deterministic {
				sort.Sort(mapKeys(keys))
			}

			var nerr nonFatal
			for _, k := range keys {
				ki := k.Interface()
				vi := m.MapIndex(k).Interface()
				kaddr := toAddrPointer(&ki, false)    // pointer to key
				vaddr := toAddrPointer(&vi, valIsPtr) // pointer to value
				b = appendVarint(b, tag)
				siz := keySizer(kaddr, 1) + valCachedSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1)
				b = appendVarint(b, uint64(siz))
				b, err = keyMarshaler(b, kaddr, keyWireTag, deterministic)
				if !nerr.Merge(err) {
					return b, err
				}
				b, err = valMarshaler(b, vaddr, valWireTag, deterministic)
				if err != ErrNil && !nerr.Merge(err) { // allow nil value in map
					return b, err
				}
			}
			return b, nerr.E
		}
}

// makeOneOfMarshaler returns the sizer and marshaler for a oneof field.
// fi is the marshal info of the field.
// f is the pointer to the reflect data structure of the field.
func makeOneOfMarshaler(fi *marshalFieldInfo, f *reflect.StructField) (sizer, marshaler) {
	// Oneof field is an interface. We need to get the actual data type on the fly.
	t := f.Type
	return func(ptr pointer, _ int) int {
			p := ptr.getInterfacePointer()
			if p.isNil() {
				return 0
			}
			v := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct
			telem := v.Type()
			e := fi.oneofElems[telem]
			return e.sizer(p, e.tagsize)
		},
		func(b []byte, ptr pointer, _ uint64, deterministic bool) ([]byte, error) {
			p := ptr.getInterfacePointer()
			if p.isNil() {
				return b, nil
			}
			v := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct
			telem := v.Type()
			if telem.Field(0).Type.Kind() == reflect.Ptr && p.getPointer().isNil() {
				return b, errOneofHasNil
			}
			e := fi.oneofElems[telem]
			return e.marshaler(b, p, e.wiretag, deterministic)
		}
}

// sizeExtensions computes the size of encoded data for a XXX_InternalExtensions field.
func (u *marshalInfo) sizeExtensions(ext *XXX_InternalExtensions) int {
	m, mu := ext.extensionsRead()
	if m == nil {
		return 0
	}
	mu.Lock()

	n := 0
	for _, e := range m {
		if e.value == nil || e.desc == nil {
			// Extension is only in its encoded form.
			n += len(e.enc)
			continue
		}

		// We don't skip extensions that have an encoded form set,
		// because the extension value may have been mutated after
		// the last time this function was called.
		ei := u.getExtElemInfo(e.desc)
		v := e.value
		p := toAddrPointer(&v, ei.isptr)
		n += ei.sizer(p, ei.tagsize)
	}
	mu.Unlock()
	return n
}

// appendExtensions marshals a XXX_InternalExtensions field to the end of byte slice b.
func (u *marshalInfo) appendExtensions(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) {
	m, mu := ext.extensionsRead()
	if m == nil {
		return b, nil
	}
	mu.Lock()
	defer mu.Unlock()

	var err error
	var nerr nonFatal

	// Fast-path for common cases: zero or one extensions.
	// Don't bother sorting the keys.
	if len(m) <= 1 {
		for _, e := range m {
			if e.value == nil || e.desc == nil {
				// Extension is only in its encoded form.
				b = append(b, e.enc...)
				continue
			}

			// We don't skip extensions that have an encoded form set,
			// because the extension value may have been mutated after
			// the last time this function was called.

			ei := u.getExtElemInfo(e.desc)
			v := e.value
			p := toAddrPointer(&v, ei.isptr)
			b, err = ei.marshaler(b, p, ei.wiretag, deterministic)
			if !nerr.Merge(err) {
				return b, err
			}
		}
		return b, nerr.E
	}

	// Sort the keys to provide a deterministic encoding.
	// Not sure this is required, but the old code does it.
	keys := make([]int, 0, len(m))
	for k := range m {
		keys = append(keys, int(k))
	}
	sort.Ints(keys)

	for _, k := range keys {
		e := m[int32(k)]
		if e.value == nil || e.desc == nil {
			// Extension is only in its encoded form.
			b = append(b, e.enc...)
			continue
		}

		// We don't skip extensions that have an encoded form set,
		// because the extension value may have been mutated after
		// the last time this function was called.

		ei := u.getExtElemInfo(e.desc)
		v := e.value
		p := toAddrPointer(&v, ei.isptr)
		b, err = ei.marshaler(b, p, ei.wiretag, deterministic)
		if !nerr.Merge(err) {
			return b, err
		}
	}
	return b, nerr.E
}

// message set format is:
//   message MessageSet {
//     repeated group Item = 1 {
//       required int32 type_id = 2;
//       required string message = 3;
//     };
//   }

// sizeMessageSet computes the size of encoded data for a XXX_InternalExtensions field
// in message set format (above).
func (u *marshalInfo) sizeMessageSet(ext *XXX_InternalExtensions) int {
	m, mu := ext.extensionsRead()
	if m == nil {
		return 0
	}
	mu.Lock()

	n := 0
	for id, e := range m {
		n += 2                          // start group, end group. tag = 1 (size=1)
		n += SizeVarint(uint64(id)) + 1 // type_id, tag = 2 (size=1)

		if e.value == nil || e.desc == nil {
			// Extension is only in its encoded form.
			msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint
			siz := len(msgWithLen)
			n += siz + 1 // message, tag = 3 (size=1)
			continue
		}

		// We don't skip extensions that have an encoded form set,
		// because the extension value may have been mutated after
		// the last time this function was called.

		ei := u.getExtElemInfo(e.desc)
		v := e.value
		p := toAddrPointer(&v, ei.isptr)
		n += ei.sizer(p, 1) // message, tag = 3 (size=1)
	}
	mu.Unlock()
	return n
}

// appendMessageSet marshals a XXX_InternalExtensions field in message set format (above)
// to the end of byte slice b.
func (u *marshalInfo) appendMessageSet(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) {
	m, mu := ext.extensionsRead()
	if m == nil {
		return b, nil
	}
	mu.Lock()
	defer mu.Unlock()

	var err error
	var nerr nonFatal

	// Fast-path for common cases: zero or one extensions.
	// Don't bother sorting the keys.
	if len(m) <= 1 {
		for id, e := range m {
			b = append(b, 1<<3|WireStartGroup)
			b = append(b, 2<<3|WireVarint)
			b = appendVarint(b, uint64(id))

			if e.value == nil || e.desc == nil {
				// Extension is only in its encoded form.
				msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint
				b = append(b, 3<<3|WireBytes)
				b = append(b, msgWithLen...)
				b = append(b, 1<<3|WireEndGroup)
				continue
			}

			// We don't skip extensions that have an encoded form set,
			// because the extension value may have been mutated after
			// the last time this function was called.

			ei := u.getExtElemInfo(e.desc)
			v := e.value
			p := toAddrPointer(&v, ei.isptr)
			b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic)
			if !nerr.Merge(err) {
				return b, err
			}
			b = append(b, 1<<3|WireEndGroup)
		}
		return b, nerr.E
	}

	// Sort the keys to provide a deterministic encoding.
	keys := make([]int, 0, len(m))
	for k := range m {
		keys = append(keys, int(k))
	}
	sort.Ints(keys)

	for _, id := range keys {
		e := m[int32(id)]
		b = append(b, 1<<3|WireStartGroup)
		b = append(b, 2<<3|WireVarint)
		b = appendVarint(b, uint64(id))

		if e.value == nil || e.desc == nil {
			// Extension is only in its encoded form.
			msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint
			b = append(b, 3<<3|WireBytes)
			b = append(b, msgWithLen...)
			b = append(b, 1<<3|WireEndGroup)
			continue
		}

		// We don't skip extensions that have an encoded form set,
		// because the extension value may have been mutated after
		// the last time this function was called.

		ei := u.getExtElemInfo(e.desc)
		v := e.value
		p := toAddrPointer(&v, ei.isptr)
		b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic)
		b = append(b, 1<<3|WireEndGroup)
		if !nerr.Merge(err) {
			return b, err
		}
	}
	return b, nerr.E
}

// sizeV1Extensions computes the size of encoded data for a V1-API extension field.
func (u *marshalInfo) sizeV1Extensions(m map[int32]Extension) int {
	if m == nil {
		return 0
	}

	n := 0
	for _, e := range m {
		if e.value == nil || e.desc == nil {
			// Extension is only in its encoded form.
			n += len(e.enc)
			continue
		}

		// We don't skip extensions that have an encoded form set,
		// because the extension value may have been mutated after
		// the last time this function was called.

		ei := u.getExtElemInfo(e.desc)
		v := e.value
		p := toAddrPointer(&v, ei.isptr)
		n += ei.sizer(p, ei.tagsize)
	}
	return n
}

// appendV1Extensions marshals a V1-API extension field to the end of byte slice b.
func (u *marshalInfo) appendV1Extensions(b []byte, m map[int32]Extension, deterministic bool) ([]byte, error) {
	if m == nil {
		return b, nil
	}

	// Sort the keys to provide a deterministic encoding.
	keys := make([]int, 0, len(m))
	for k := range m {
		keys = append(keys, int(k))
	}
	sort.Ints(keys)

	var err error
	var nerr nonFatal
	for _, k := range keys {
		e := m[int32(k)]
		if e.value == nil || e.desc == nil {
			// Extension is only in its encoded form.
			b = append(b, e.enc...)
			continue
		}

		// We don't skip extensions that have an encoded form set,
		// because the extension value may have been mutated after
		// the last time this function was called.

		ei := u.getExtElemInfo(e.desc)
		v := e.value
		p := toAddrPointer(&v, ei.isptr)
		b, err = ei.marshaler(b, p, ei.wiretag, deterministic)
		if !nerr.Merge(err) {
			return b, err
		}
	}
	return b, nerr.E
}

// newMarshaler is the interface representing objects that can marshal themselves.
//
// This exists to support protoc-gen-go generated messages.
// The proto package will stop type-asserting to this interface in the future.
//
// DO NOT DEPEND ON THIS.
type newMarshaler interface {
	XXX_Size() int
	XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
}

// Size returns the encoded size of a protocol buffer message.
// This is the main entry point.
func Size(pb Message) int {
	if m, ok := pb.(newMarshaler); ok {
		return m.XXX_Size()
	}
	if m, ok := pb.(Marshaler); ok {
		// If the message can marshal itself, let it do it, for compatibility.
		// NOTE: This is not efficient.
		b, _ := m.Marshal()
		return len(b)
	}
	// in case somehow we didn't generate the wrapper
	if pb == nil {
		return 0
	}
	var info InternalMessageInfo
	return info.Size(pb)
}

// Marshal takes a protocol buffer message
// and encodes it into the wire format, returning the data.
// This is the main entry point.
func Marshal(pb Message) ([]byte, error) {
	if m, ok := pb.(newMarshaler); ok {
		siz := m.XXX_Size()
		b := make([]byte, 0, siz)
		return m.XXX_Marshal(b, false)
	}
	if m, ok := pb.(Marshaler); ok {
		// If the message can marshal itself, let it do it, for compatibility.
		// NOTE: This is not efficient.
		return m.Marshal()
	}
	// in case somehow we didn't generate the wrapper
	if pb == nil {
		return nil, ErrNil
	}
	var info InternalMessageInfo
	siz := info.Size(pb)
	b := make([]byte, 0, siz)
	return info.Marshal(b, pb, false)
}

// Marshal takes a protocol buffer message
// and encodes it into the wire format, writing the result to the
// Buffer.
// This is an alternative entry point. It is not necessary to use
// a Buffer for most applications.
func (p *Buffer) Marshal(pb Message) error {
	var err error
	if p.deterministic {
		if _, ok := pb.(Marshaler); ok {
			return fmt.Errorf("proto: deterministic not supported by the Marshal method of %T", pb)
		}
	}
	if m, ok := pb.(newMarshaler); ok {
		siz := m.XXX_Size()
		p.grow(siz) // make sure buf has enough capacity
		pp := p.buf[len(p.buf) : len(p.buf) : len(p.buf)+siz]
		pp, err = m.XXX_Marshal(pp, p.deterministic)
		p.buf = append(p.buf, pp...)
		return err
	}
	if m, ok := pb.(Marshaler); ok {
		// If the message can marshal itself, let it do it, for compatibility.
		// NOTE: This is not efficient.
		var b []byte
		b, err = m.Marshal()
		p.buf = append(p.buf, b...)
		return err
	}
	// in case somehow we didn't generate the wrapper
	if pb == nil {
		return ErrNil
	}
	var info InternalMessageInfo
	siz := info.Size(pb)
	p.grow(siz) // make sure buf has enough capacity
	p.buf, err = info.Marshal(p.buf, pb, p.deterministic)
	return err
}

// grow grows the buffer's capacity, if necessary, to guarantee space for
// another n bytes. After grow(n), at least n bytes can be written to the
// buffer without another allocation.
func (p *Buffer) grow(n int) {
	need := len(p.buf) + n
	if need <= cap(p.buf) {
		return
	}
	newCap := len(p.buf) * 2
	if newCap < need {
		newCap = need
	}
	p.buf = append(make([]byte, 0, newCap), p.buf...)
}
   07070100000657000081A4000000000000000000000001645E367C00002B5D000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/table_marshal_gogo.go   // Protocol Buffers for Go with Gadgets
//
// Copyright (c) 2018, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package proto

import (
	"reflect"
	"time"
)

// makeMessageRefMarshaler differs a bit from makeMessageMarshaler
// It marshal a message T instead of a *T
func makeMessageRefMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			siz := u.size(ptr)
			return siz + SizeVarint(uint64(siz)) + tagsize
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			b = appendVarint(b, wiretag)
			siz := u.cachedsize(ptr)
			b = appendVarint(b, uint64(siz))
			return u.marshal(b, ptr, deterministic)
		}
}

// makeMessageRefSliceMarshaler differs quite a lot from makeMessageSliceMarshaler
// It marshals a slice of messages []T instead of []*T
func makeMessageRefSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			s := ptr.getSlice(u.typ)
			n := 0
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				e := elem.Interface()
				v := toAddrPointer(&e, false)
				siz := u.size(v)
				n += siz + SizeVarint(uint64(siz)) + tagsize
			}
			return n
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			s := ptr.getSlice(u.typ)
			var err, errreq error
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				e := elem.Interface()
				v := toAddrPointer(&e, false)
				b = appendVarint(b, wiretag)
				siz := u.size(v)
				b = appendVarint(b, uint64(siz))
				b, err = u.marshal(b, v, deterministic)

				if err != nil {
					if _, ok := err.(*RequiredNotSetError); ok {
						// Required field in submessage is not set.
						// We record the error but keep going, to give a complete marshaling.
						if errreq == nil {
							errreq = err
						}
						continue
					}
					if err == ErrNil {
						err = errRepeatedHasNil
					}
					return b, err
				}
			}

			return b, errreq
		}
}

func makeCustomPtrMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			if ptr.isNil() {
				return 0
			}
			m := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(custom)
			siz := m.Size()
			return tagsize + SizeVarint(uint64(siz)) + siz
		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			if ptr.isNil() {
				return b, nil
			}
			m := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(custom)
			siz := m.Size()
			buf, err := m.Marshal()
			if err != nil {
				return nil, err
			}
			b = appendVarint(b, wiretag)
			b = appendVarint(b, uint64(siz))
			b = append(b, buf...)
			return b, nil
		}
}

func makeCustomMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			m := ptr.asPointerTo(u.typ).Interface().(custom)
			siz := m.Size()
			return tagsize + SizeVarint(uint64(siz)) + siz
		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			m := ptr.asPointerTo(u.typ).Interface().(custom)
			siz := m.Size()
			buf, err := m.Marshal()
			if err != nil {
				return nil, err
			}
			b = appendVarint(b, wiretag)
			b = appendVarint(b, uint64(siz))
			b = append(b, buf...)
			return b, nil
		}
}

func makeTimeMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			t := ptr.asPointerTo(u.typ).Interface().(*time.Time)
			ts, err := timestampProto(*t)
			if err != nil {
				return 0
			}
			siz := Size(ts)
			return tagsize + SizeVarint(uint64(siz)) + siz
		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			t := ptr.asPointerTo(u.typ).Interface().(*time.Time)
			ts, err := timestampProto(*t)
			if err != nil {
				return nil, err
			}
			buf, err := Marshal(ts)
			if err != nil {
				return nil, err
			}
			b = appendVarint(b, wiretag)
			b = appendVarint(b, uint64(len(buf)))
			b = append(b, buf...)
			return b, nil
		}
}

func makeTimePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			if ptr.isNil() {
				return 0
			}
			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*time.Time)
			ts, err := timestampProto(*t)
			if err != nil {
				return 0
			}
			siz := Size(ts)
			return tagsize + SizeVarint(uint64(siz)) + siz
		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			if ptr.isNil() {
				return b, nil
			}
			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*time.Time)
			ts, err := timestampProto(*t)
			if err != nil {
				return nil, err
			}
			buf, err := Marshal(ts)
			if err != nil {
				return nil, err
			}
			b = appendVarint(b, wiretag)
			b = appendVarint(b, uint64(len(buf)))
			b = append(b, buf...)
			return b, nil
		}
}

func makeTimeSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			s := ptr.getSlice(u.typ)
			n := 0
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(time.Time)
				ts, err := timestampProto(t)
				if err != nil {
					return 0
				}
				siz := Size(ts)
				n += siz + SizeVarint(uint64(siz)) + tagsize
			}
			return n
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			s := ptr.getSlice(u.typ)
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(time.Time)
				ts, err := timestampProto(t)
				if err != nil {
					return nil, err
				}
				siz := Size(ts)
				buf, err := Marshal(ts)
				if err != nil {
					return nil, err
				}
				b = appendVarint(b, wiretag)
				b = appendVarint(b, uint64(siz))
				b = append(b, buf...)
			}

			return b, nil
		}
}

func makeTimePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			s := ptr.getSlice(reflect.PtrTo(u.typ))
			n := 0
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(*time.Time)
				ts, err := timestampProto(*t)
				if err != nil {
					return 0
				}
				siz := Size(ts)
				n += siz + SizeVarint(uint64(siz)) + tagsize
			}
			return n
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			s := ptr.getSlice(reflect.PtrTo(u.typ))
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(*time.Time)
				ts, err := timestampProto(*t)
				if err != nil {
					return nil, err
				}
				siz := Size(ts)
				buf, err := Marshal(ts)
				if err != nil {
					return nil, err
				}
				b = appendVarint(b, wiretag)
				b = appendVarint(b, uint64(siz))
				b = append(b, buf...)
			}

			return b, nil
		}
}

func makeDurationMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			d := ptr.asPointerTo(u.typ).Interface().(*time.Duration)
			dur := durationProto(*d)
			siz := Size(dur)
			return tagsize + SizeVarint(uint64(siz)) + siz
		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			d := ptr.asPointerTo(u.typ).Interface().(*time.Duration)
			dur := durationProto(*d)
			buf, err := Marshal(dur)
			if err != nil {
				return nil, err
			}
			b = appendVarint(b, wiretag)
			b = appendVarint(b, uint64(len(buf)))
			b = append(b, buf...)
			return b, nil
		}
}

func makeDurationPtrMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			if ptr.isNil() {
				return 0
			}
			d := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*time.Duration)
			dur := durationProto(*d)
			siz := Size(dur)
			return tagsize + SizeVarint(uint64(siz)) + siz
		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			if ptr.isNil() {
				return b, nil
			}
			d := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*time.Duration)
			dur := durationProto(*d)
			buf, err := Marshal(dur)
			if err != nil {
				return nil, err
			}
			b = appendVarint(b, wiretag)
			b = appendVarint(b, uint64(len(buf)))
			b = append(b, buf...)
			return b, nil
		}
}

func makeDurationSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			s := ptr.getSlice(u.typ)
			n := 0
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				d := elem.Interface().(time.Duration)
				dur := durationProto(d)
				siz := Size(dur)
				n += siz + SizeVarint(uint64(siz)) + tagsize
			}
			return n
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			s := ptr.getSlice(u.typ)
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				d := elem.Interface().(time.Duration)
				dur := durationProto(d)
				siz := Size(dur)
				buf, err := Marshal(dur)
				if err != nil {
					return nil, err
				}
				b = appendVarint(b, wiretag)
				b = appendVarint(b, uint64(siz))
				b = append(b, buf...)
			}

			return b, nil
		}
}

func makeDurationPtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			s := ptr.getSlice(reflect.PtrTo(u.typ))
			n := 0
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				d := elem.Interface().(*time.Duration)
				dur := durationProto(*d)
				siz := Size(dur)
				n += siz + SizeVarint(uint64(siz)) + tagsize
			}
			return n
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			s := ptr.getSlice(reflect.PtrTo(u.typ))
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				d := elem.Interface().(*time.Duration)
				dur := durationProto(*d)
				siz := Size(dur)
				buf, err := Marshal(dur)
				if err != nil {
					return nil, err
				}
				b = appendVarint(b, wiretag)
				b = appendVarint(b, uint64(siz))
				b = append(b, buf...)
			}

			return b, nil
		}
}
   07070100000658000081A4000000000000000000000001645E367C000045F4000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/table_merge.go  // Go support for Protocol Buffers - Google's data interchange format
//
// Copyright 2016 The Go Authors.  All rights reserved.
// https://github.com/golang/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package proto

import (
	"fmt"
	"reflect"
	"strings"
	"sync"
	"sync/atomic"
)

// Merge merges the src message into dst.
// This assumes that dst and src of the same type and are non-nil.
func (a *InternalMessageInfo) Merge(dst, src Message) {
	mi := atomicLoadMergeInfo(&a.merge)
	if mi == nil {
		mi = getMergeInfo(reflect.TypeOf(dst).Elem())
		atomicStoreMergeInfo(&a.merge, mi)
	}
	mi.merge(toPointer(&dst), toPointer(&src))
}

type mergeInfo struct {
	typ reflect.Type

	initialized int32 // 0: only typ is valid, 1: everything is valid
	lock        sync.Mutex

	fields       []mergeFieldInfo
	unrecognized field // Offset of XXX_unrecognized
}

type mergeFieldInfo struct {
	field field // Offset of field, guaranteed to be valid

	// isPointer reports whether the value in the field is a pointer.
	// This is true for the following situations:
	//	* Pointer to struct
	//	* Pointer to basic type (proto2 only)
	//	* Slice (first value in slice header is a pointer)
	//	* String (first value in string header is a pointer)
	isPointer bool

	// basicWidth reports the width of the field assuming that it is directly
	// embedded in the struct (as is the case for basic types in proto3).
	// The possible values are:
	// 	0: invalid
	//	1: bool
	//	4: int32, uint32, float32
	//	8: int64, uint64, float64
	basicWidth int

	// Where dst and src are pointers to the types being merged.
	merge func(dst, src pointer)
}

var (
	mergeInfoMap  = map[reflect.Type]*mergeInfo{}
	mergeInfoLock sync.Mutex
)

func getMergeInfo(t reflect.Type) *mergeInfo {
	mergeInfoLock.Lock()
	defer mergeInfoLock.Unlock()
	mi := mergeInfoMap[t]
	if mi == nil {
		mi = &mergeInfo{typ: t}
		mergeInfoMap[t] = mi
	}
	return mi
}

// merge merges src into dst assuming they are both of type *mi.typ.
func (mi *mergeInfo) merge(dst, src pointer) {
	if dst.isNil() {
		panic("proto: nil destination")
	}
	if src.isNil() {
		return // Nothing to do.
	}

	if atomic.LoadInt32(&mi.initialized) == 0 {
		mi.computeMergeInfo()
	}

	for _, fi := range mi.fields {
		sfp := src.offset(fi.field)

		// As an optimization, we can avoid the merge function call cost
		// if we know for sure that the source will have no effect
		// by checking if it is the zero value.
		if unsafeAllowed {
			if fi.isPointer && sfp.getPointer().isNil() { // Could be slice or string
				continue
			}
			if fi.basicWidth > 0 {
				switch {
				case fi.basicWidth == 1 && !*sfp.toBool():
					continue
				case fi.basicWidth == 4 && *sfp.toUint32() == 0:
					continue
				case fi.basicWidth == 8 && *sfp.toUint64() == 0:
					continue
				}
			}
		}

		dfp := dst.offset(fi.field)
		fi.merge(dfp, sfp)
	}

	// TODO: Make this faster?
	out := dst.asPointerTo(mi.typ).Elem()
	in := src.asPointerTo(mi.typ).Elem()
	if emIn, err := extendable(in.Addr().Interface()); err == nil {
		emOut, _ := extendable(out.Addr().Interface())
		mIn, muIn := emIn.extensionsRead()
		if mIn != nil {
			mOut := emOut.extensionsWrite()
			muIn.Lock()
			mergeExtension(mOut, mIn)
			muIn.Unlock()
		}
	}

	if mi.unrecognized.IsValid() {
		if b := *src.offset(mi.unrecognized).toBytes(); len(b) > 0 {
			*dst.offset(mi.unrecognized).toBytes() = append([]byte(nil), b...)
		}
	}
}

func (mi *mergeInfo) computeMergeInfo() {
	mi.lock.Lock()
	defer mi.lock.Unlock()
	if mi.initialized != 0 {
		return
	}
	t := mi.typ
	n := t.NumField()

	props := GetProperties(t)
	for i := 0; i < n; i++ {
		f := t.Field(i)
		if strings.HasPrefix(f.Name, "XXX_") {
			continue
		}

		mfi := mergeFieldInfo{field: toField(&f)}
		tf := f.Type

		// As an optimization, we can avoid the merge function call cost
		// if we know for sure that the source will have no effect
		// by checking if it is the zero value.
		if unsafeAllowed {
			switch tf.Kind() {
			case reflect.Ptr, reflect.Slice, reflect.String:
				// As a special case, we assume slices and strings are pointers
				// since we know that the first field in the SliceSlice or
				// StringHeader is a data pointer.
				mfi.isPointer = true
			case reflect.Bool:
				mfi.basicWidth = 1
			case reflect.Int32, reflect.Uint32, reflect.Float32:
				mfi.basicWidth = 4
			case reflect.Int64, reflect.Uint64, reflect.Float64:
				mfi.basicWidth = 8
			}
		}

		// Unwrap tf to get at its most basic type.
		var isPointer, isSlice bool
		if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 {
			isSlice = true
			tf = tf.Elem()
		}
		if tf.Kind() == reflect.Ptr {
			isPointer = true
			tf = tf.Elem()
		}
		if isPointer && isSlice && tf.Kind() != reflect.Struct {
			panic("both pointer and slice for basic type in " + tf.Name())
		}

		switch tf.Kind() {
		case reflect.Int32:
			switch {
			case isSlice: // E.g., []int32
				mfi.merge = func(dst, src pointer) {
					// NOTE: toInt32Slice is not defined (see pointer_reflect.go).
					/*
						sfsp := src.toInt32Slice()
						if *sfsp != nil {
							dfsp := dst.toInt32Slice()
							*dfsp = append(*dfsp, *sfsp...)
							if *dfsp == nil {
								*dfsp = []int64{}
							}
						}
					*/
					sfs := src.getInt32Slice()
					if sfs != nil {
						dfs := dst.getInt32Slice()
						dfs = append(dfs, sfs...)
						if dfs == nil {
							dfs = []int32{}
						}
						dst.setInt32Slice(dfs)
					}
				}
			case isPointer: // E.g., *int32
				mfi.merge = func(dst, src pointer) {
					// NOTE: toInt32Ptr is not defined (see pointer_reflect.go).
					/*
						sfpp := src.toInt32Ptr()
						if *sfpp != nil {
							dfpp := dst.toInt32Ptr()
							if *dfpp == nil {
								*dfpp = Int32(**sfpp)
							} else {
								**dfpp = **sfpp
							}
						}
					*/
					sfp := src.getInt32Ptr()
					if sfp != nil {
						dfp := dst.getInt32Ptr()
						if dfp == nil {
							dst.setInt32Ptr(*sfp)
						} else {
							*dfp = *sfp
						}
					}
				}
			default: // E.g., int32
				mfi.merge = func(dst, src pointer) {
					if v := *src.toInt32(); v != 0 {
						*dst.toInt32() = v
					}
				}
			}
		case reflect.Int64:
			switch {
			case isSlice: // E.g., []int64
				mfi.merge = func(dst, src pointer) {
					sfsp := src.toInt64Slice()
					if *sfsp != nil {
						dfsp := dst.toInt64Slice()
						*dfsp = append(*dfsp, *sfsp...)
						if *dfsp == nil {
							*dfsp = []int64{}
						}
					}
				}
			case isPointer: // E.g., *int64
				mfi.merge = func(dst, src pointer) {
					sfpp := src.toInt64Ptr()
					if *sfpp != nil {
						dfpp := dst.toInt64Ptr()
						if *dfpp == nil {
							*dfpp = Int64(**sfpp)
						} else {
							**dfpp = **sfpp
						}
					}
				}
			default: // E.g., int64
				mfi.merge = func(dst, src pointer) {
					if v := *src.toInt64(); v != 0 {
						*dst.toInt64() = v
					}
				}
			}
		case reflect.Uint32:
			switch {
			case isSlice: // E.g., []uint32
				mfi.merge = func(dst, src pointer) {
					sfsp := src.toUint32Slice()
					if *sfsp != nil {
						dfsp := dst.toUint32Slice()
						*dfsp = append(*dfsp, *sfsp...)
						if *dfsp == nil {
							*dfsp = []uint32{}
						}
					}
				}
			case isPointer: // E.g., *uint32
				mfi.merge = func(dst, src pointer) {
					sfpp := src.toUint32Ptr()
					if *sfpp != nil {
						dfpp := dst.toUint32Ptr()
						if *dfpp == nil {
							*dfpp = Uint32(**sfpp)
						} else {
							**dfpp = **sfpp
						}
					}
				}
			default: // E.g., uint32
				mfi.merge = func(dst, src pointer) {
					if v := *src.toUint32(); v != 0 {
						*dst.toUint32() = v
					}
				}
			}
		case reflect.Uint64:
			switch {
			case isSlice: // E.g., []uint64
				mfi.merge = func(dst, src pointer) {
					sfsp := src.toUint64Slice()
					if *sfsp != nil {
						dfsp := dst.toUint64Slice()
						*dfsp = append(*dfsp, *sfsp...)
						if *dfsp == nil {
							*dfsp = []uint64{}
						}
					}
				}
			case isPointer: // E.g., *uint64
				mfi.merge = func(dst, src pointer) {
					sfpp := src.toUint64Ptr()
					if *sfpp != nil {
						dfpp := dst.toUint64Ptr()
						if *dfpp == nil {
							*dfpp = Uint64(**sfpp)
						} else {
							**dfpp = **sfpp
						}
					}
				}
			default: // E.g., uint64
				mfi.merge = func(dst, src pointer) {
					if v := *src.toUint64(); v != 0 {
						*dst.toUint64() = v
					}
				}
			}
		case reflect.Float32:
			switch {
			case isSlice: // E.g., []float32
				mfi.merge = func(dst, src pointer) {
					sfsp := src.toFloat32Slice()
					if *sfsp != nil {
						dfsp := dst.toFloat32Slice()
						*dfsp = append(*dfsp, *sfsp...)
						if *dfsp == nil {
							*dfsp = []float32{}
						}
					}
				}
			case isPointer: // E.g., *float32
				mfi.merge = func(dst, src pointer) {
					sfpp := src.toFloat32Ptr()
					if *sfpp != nil {
						dfpp := dst.toFloat32Ptr()
						if *dfpp == nil {
							*dfpp = Float32(**sfpp)
						} else {
							**dfpp = **sfpp
						}
					}
				}
			default: // E.g., float32
				mfi.merge = func(dst, src pointer) {
					if v := *src.toFloat32(); v != 0 {
						*dst.toFloat32() = v
					}
				}
			}
		case reflect.Float64:
			switch {
			case isSlice: // E.g., []float64
				mfi.merge = func(dst, src pointer) {
					sfsp := src.toFloat64Slice()
					if *sfsp != nil {
						dfsp := dst.toFloat64Slice()
						*dfsp = append(*dfsp, *sfsp...)
						if *dfsp == nil {
							*dfsp = []float64{}
						}
					}
				}
			case isPointer: // E.g., *float64
				mfi.merge = func(dst, src pointer) {
					sfpp := src.toFloat64Ptr()
					if *sfpp != nil {
						dfpp := dst.toFloat64Ptr()
						if *dfpp == nil {
							*dfpp = Float64(**sfpp)
						} else {
							**dfpp = **sfpp
						}
					}
				}
			default: // E.g., float64
				mfi.merge = func(dst, src pointer) {
					if v := *src.toFloat64(); v != 0 {
						*dst.toFloat64() = v
					}
				}
			}
		case reflect.Bool:
			switch {
			case isSlice: // E.g., []bool
				mfi.merge = func(dst, src pointer) {
					sfsp := src.toBoolSlice()
					if *sfsp != nil {
						dfsp := dst.toBoolSlice()
						*dfsp = append(*dfsp, *sfsp...)
						if *dfsp == nil {
							*dfsp = []bool{}
						}
					}
				}
			case isPointer: // E.g., *bool
				mfi.merge = func(dst, src pointer) {
					sfpp := src.toBoolPtr()
					if *sfpp != nil {
						dfpp := dst.toBoolPtr()
						if *dfpp == nil {
							*dfpp = Bool(**sfpp)
						} else {
							**dfpp = **sfpp
						}
					}
				}
			default: // E.g., bool
				mfi.merge = func(dst, src pointer) {
					if v := *src.toBool(); v {
						*dst.toBool() = v
					}
				}
			}
		case reflect.String:
			switch {
			case isSlice: // E.g., []string
				mfi.merge = func(dst, src pointer) {
					sfsp := src.toStringSlice()
					if *sfsp != nil {
						dfsp := dst.toStringSlice()
						*dfsp = append(*dfsp, *sfsp...)
						if *dfsp == nil {
							*dfsp = []string{}
						}
					}
				}
			case isPointer: // E.g., *string
				mfi.merge = func(dst, src pointer) {
					sfpp := src.toStringPtr()
					if *sfpp != nil {
						dfpp := dst.toStringPtr()
						if *dfpp == nil {
							*dfpp = String(**sfpp)
						} else {
							**dfpp = **sfpp
						}
					}
				}
			default: // E.g., string
				mfi.merge = func(dst, src pointer) {
					if v := *src.toString(); v != "" {
						*dst.toString() = v
					}
				}
			}
		case reflect.Slice:
			isProto3 := props.Prop[i].proto3
			switch {
			case isPointer:
				panic("bad pointer in byte slice case in " + tf.Name())
			case tf.Elem().Kind() != reflect.Uint8:
				panic("bad element kind in byte slice case in " + tf.Name())
			case isSlice: // E.g., [][]byte
				mfi.merge = func(dst, src pointer) {
					sbsp := src.toBytesSlice()
					if *sbsp != nil {
						dbsp := dst.toBytesSlice()
						for _, sb := range *sbsp {
							if sb == nil {
								*dbsp = append(*dbsp, nil)
							} else {
								*dbsp = append(*dbsp, append([]byte{}, sb...))
							}
						}
						if *dbsp == nil {
							*dbsp = [][]byte{}
						}
					}
				}
			default: // E.g., []byte
				mfi.merge = func(dst, src pointer) {
					sbp := src.toBytes()
					if *sbp != nil {
						dbp := dst.toBytes()
						if !isProto3 || len(*sbp) > 0 {
							*dbp = append([]byte{}, *sbp...)
						}
					}
				}
			}
		case reflect.Struct:
			switch {
			case isSlice && !isPointer: // E.g. []pb.T
				mergeInfo := getMergeInfo(tf)
				zero := reflect.Zero(tf)
				mfi.merge = func(dst, src pointer) {
					// TODO: Make this faster?
					dstsp := dst.asPointerTo(f.Type)
					dsts := dstsp.Elem()
					srcs := src.asPointerTo(f.Type).Elem()
					for i := 0; i < srcs.Len(); i++ {
						dsts = reflect.Append(dsts, zero)
						srcElement := srcs.Index(i).Addr()
						dstElement := dsts.Index(dsts.Len() - 1).Addr()
						mergeInfo.merge(valToPointer(dstElement), valToPointer(srcElement))
					}
					if dsts.IsNil() {
						dsts = reflect.MakeSlice(f.Type, 0, 0)
					}
					dstsp.Elem().Set(dsts)
				}
			case !isPointer:
				mergeInfo := getMergeInfo(tf)
				mfi.merge = func(dst, src pointer) {
					mergeInfo.merge(dst, src)
				}
			case isSlice: // E.g., []*pb.T
				mergeInfo := getMergeInfo(tf)
				mfi.merge = func(dst, src pointer) {
					sps := src.getPointerSlice()
					if sps != nil {
						dps := dst.getPointerSlice()
						for _, sp := range sps {
							var dp pointer
							if !sp.isNil() {
								dp = valToPointer(reflect.New(tf))
								mergeInfo.merge(dp, sp)
							}
							dps = append(dps, dp)
						}
						if dps == nil {
							dps = []pointer{}
						}
						dst.setPointerSlice(dps)
					}
				}
			default: // E.g., *pb.T
				mergeInfo := getMergeInfo(tf)
				mfi.merge = func(dst, src pointer) {
					sp := src.getPointer()
					if !sp.isNil() {
						dp := dst.getPointer()
						if dp.isNil() {
							dp = valToPointer(reflect.New(tf))
							dst.setPointer(dp)
						}
						mergeInfo.merge(dp, sp)
					}
				}
			}
		case reflect.Map:
			switch {
			case isPointer || isSlice:
				panic("bad pointer or slice in map case in " + tf.Name())
			default: // E.g., map[K]V
				mfi.merge = func(dst, src pointer) {
					sm := src.asPointerTo(tf).Elem()
					if sm.Len() == 0 {
						return
					}
					dm := dst.asPointerTo(tf).Elem()
					if dm.IsNil() {
						dm.Set(reflect.MakeMap(tf))
					}

					switch tf.Elem().Kind() {
					case reflect.Ptr: // Proto struct (e.g., *T)
						for _, key := range sm.MapKeys() {
							val := sm.MapIndex(key)
							val = reflect.ValueOf(Clone(val.Interface().(Message)))
							dm.SetMapIndex(key, val)
						}
					case reflect.Slice: // E.g. Bytes type (e.g., []byte)
						for _, key := range sm.MapKeys() {
							val := sm.MapIndex(key)
							val = reflect.ValueOf(append([]byte{}, val.Bytes()...))
							dm.SetMapIndex(key, val)
						}
					default: // Basic type (e.g., string)
						for _, key := range sm.MapKeys() {
							val := sm.MapIndex(key)
							dm.SetMapIndex(key, val)
						}
					}
				}
			}
		case reflect.Interface:
			// Must be oneof field.
			switch {
			case isPointer || isSlice:
				panic("bad pointer or slice in interface case in " + tf.Name())
			default: // E.g., interface{}
				// TODO: Make this faster?
				mfi.merge = func(dst, src pointer) {
					su := src.asPointerTo(tf).Elem()
					if !su.IsNil() {
						du := dst.asPointerTo(tf).Elem()
						typ := su.Elem().Type()
						if du.IsNil() || du.Elem().Type() != typ {
							du.Set(reflect.New(typ.Elem())) // Initialize interface if empty
						}
						sv := su.Elem().Elem().Field(0)
						if sv.Kind() == reflect.Ptr && sv.IsNil() {
							return
						}
						dv := du.Elem().Elem().Field(0)
						if dv.Kind() == reflect.Ptr && dv.IsNil() {
							dv.Set(reflect.New(sv.Type().Elem())) // Initialize proto message if empty
						}
						switch sv.Type().Kind() {
						case reflect.Ptr: // Proto struct (e.g., *T)
							Merge(dv.Interface().(Message), sv.Interface().(Message))
						case reflect.Slice: // E.g. Bytes type (e.g., []byte)
							dv.Set(reflect.ValueOf(append([]byte{}, sv.Bytes()...)))
						default: // Basic type (e.g., string)
							dv.Set(sv)
						}
					}
				}
			}
		default:
			panic(fmt.Sprintf("merger not found for type:%s", tf))
		}
		mi.fields = append(mi.fields, mfi)
	}

	mi.unrecognized = invalidField
	if f, ok := t.FieldByName("XXX_unrecognized"); ok {
		if f.Type != reflect.TypeOf([]byte{}) {
			panic("expected XXX_unrecognized to be of type []byte")
		}
		mi.unrecognized = toField(&f)
	}

	atomic.StoreInt32(&mi.initialized, 1)
}
07070100000659000081A4000000000000000000000001645E367C0000D891000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/table_unmarshal.go  // Go support for Protocol Buffers - Google's data interchange format
//
// Copyright 2016 The Go Authors.  All rights reserved.
// https://github.com/golang/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package proto

import (
	"errors"
	"fmt"
	"io"
	"math"
	"reflect"
	"strconv"
	"strings"
	"sync"
	"sync/atomic"
	"unicode/utf8"
)

// Unmarshal is the entry point from the generated .pb.go files.
// This function is not intended to be used by non-generated code.
// This function is not subject to any compatibility guarantee.
// msg contains a pointer to a protocol buffer struct.
// b is the data to be unmarshaled into the protocol buffer.
// a is a pointer to a place to store cached unmarshal information.
func (a *InternalMessageInfo) Unmarshal(msg Message, b []byte) error {
	// Load the unmarshal information for this message type.
	// The atomic load ensures memory consistency.
	u := atomicLoadUnmarshalInfo(&a.unmarshal)
	if u == nil {
		// Slow path: find unmarshal info for msg, update a with it.
		u = getUnmarshalInfo(reflect.TypeOf(msg).Elem())
		atomicStoreUnmarshalInfo(&a.unmarshal, u)
	}
	// Then do the unmarshaling.
	err := u.unmarshal(toPointer(&msg), b)
	return err
}

type unmarshalInfo struct {
	typ reflect.Type // type of the protobuf struct

	// 0 = only typ field is initialized
	// 1 = completely initialized
	initialized     int32
	lock            sync.Mutex                    // prevents double initialization
	dense           []unmarshalFieldInfo          // fields indexed by tag #
	sparse          map[uint64]unmarshalFieldInfo // fields indexed by tag #
	reqFields       []string                      // names of required fields
	reqMask         uint64                        // 1<<len(reqFields)-1
	unrecognized    field                         // offset of []byte to put unrecognized data (or invalidField if we should throw it away)
	extensions      field                         // offset of extensions field (of type proto.XXX_InternalExtensions), or invalidField if it does not exist
	oldExtensions   field                         // offset of old-form extensions field (of type map[int]Extension)
	extensionRanges []ExtensionRange              // if non-nil, implies extensions field is valid
	isMessageSet    bool                          // if true, implies extensions field is valid

	bytesExtensions field // offset of XXX_extensions with type []byte
}

// An unmarshaler takes a stream of bytes and a pointer to a field of a message.
// It decodes the field, stores it at f, and returns the unused bytes.
// w is the wire encoding.
// b is the data after the tag and wire encoding have been read.
type unmarshaler func(b []byte, f pointer, w int) ([]byte, error)

type unmarshalFieldInfo struct {
	// location of the field in the proto message structure.
	field field

	// function to unmarshal the data for the field.
	unmarshal unmarshaler

	// if a required field, contains a single set bit at this field's index in the required field list.
	reqMask uint64

	name string // name of the field, for error reporting
}

var (
	unmarshalInfoMap  = map[reflect.Type]*unmarshalInfo{}
	unmarshalInfoLock sync.Mutex
)

// getUnmarshalInfo returns the data structure which can be
// subsequently used to unmarshal a message of the given type.
// t is the type of the message (note: not pointer to message).
func getUnmarshalInfo(t reflect.Type) *unmarshalInfo {
	// It would be correct to return a new unmarshalInfo
	// unconditionally. We would end up allocating one
	// per occurrence of that type as a message or submessage.
	// We use a cache here just to reduce memory usage.
	unmarshalInfoLock.Lock()
	defer unmarshalInfoLock.Unlock()
	u := unmarshalInfoMap[t]
	if u == nil {
		u = &unmarshalInfo{typ: t}
		// Note: we just set the type here. The rest of the fields
		// will be initialized on first use.
		unmarshalInfoMap[t] = u
	}
	return u
}

// unmarshal does the main work of unmarshaling a message.
// u provides type information used to unmarshal the message.
// m is a pointer to a protocol buffer message.
// b is a byte stream to unmarshal into m.
// This is top routine used when recursively unmarshaling submessages.
func (u *unmarshalInfo) unmarshal(m pointer, b []byte) error {
	if atomic.LoadInt32(&u.initialized) == 0 {
		u.computeUnmarshalInfo()
	}
	if u.isMessageSet {
		return unmarshalMessageSet(b, m.offset(u.extensions).toExtensions())
	}
	var reqMask uint64 // bitmask of required fields we've seen.
	var errLater error
	for len(b) > 0 {
		// Read tag and wire type.
		// Special case 1 and 2 byte varints.
		var x uint64
		if b[0] < 128 {
			x = uint64(b[0])
			b = b[1:]
		} else if len(b) >= 2 && b[1] < 128 {
			x = uint64(b[0]&0x7f) + uint64(b[1])<<7
			b = b[2:]
		} else {
			var n int
			x, n = decodeVarint(b)
			if n == 0 {
				return io.ErrUnexpectedEOF
			}
			b = b[n:]
		}
		tag := x >> 3
		wire := int(x) & 7

		// Dispatch on the tag to one of the unmarshal* functions below.
		var f unmarshalFieldInfo
		if tag < uint64(len(u.dense)) {
			f = u.dense[tag]
		} else {
			f = u.sparse[tag]
		}
		if fn := f.unmarshal; fn != nil {
			var err error
			b, err = fn(b, m.offset(f.field), wire)
			if err == nil {
				reqMask |= f.reqMask
				continue
			}
			if r, ok := err.(*RequiredNotSetError); ok {
				// Remember this error, but keep parsing. We need to produce
				// a full parse even if a required field is missing.
				if errLater == nil {
					errLater = r
				}
				reqMask |= f.reqMask
				continue
			}
			if err != errInternalBadWireType {
				if err == errInvalidUTF8 {
					if errLater == nil {
						fullName := revProtoTypes[reflect.PtrTo(u.typ)] + "." + f.name
						errLater = &invalidUTF8Error{fullName}
					}
					continue
				}
				return err
			}
			// Fragments with bad wire type are treated as unknown fields.
		}

		// Unknown tag.
		if !u.unrecognized.IsValid() {
			// Don't keep unrecognized data; just skip it.
			var err error
			b, err = skipField(b, wire)
			if err != nil {
				return err
			}
			continue
		}
		// Keep unrecognized data around.
		// maybe in extensions, maybe in the unrecognized field.
		z := m.offset(u.unrecognized).toBytes()
		var emap map[int32]Extension
		var e Extension
		for _, r := range u.extensionRanges {
			if uint64(r.Start) <= tag && tag <= uint64(r.End) {
				if u.extensions.IsValid() {
					mp := m.offset(u.extensions).toExtensions()
					emap = mp.extensionsWrite()
					e = emap[int32(tag)]
					z = &e.enc
					break
				}
				if u.oldExtensions.IsValid() {
					p := m.offset(u.oldExtensions).toOldExtensions()
					emap = *p
					if emap == nil {
						emap = map[int32]Extension{}
						*p = emap
					}
					e = emap[int32(tag)]
					z = &e.enc
					break
				}
				if u.bytesExtensions.IsValid() {
					z = m.offset(u.bytesExtensions).toBytes()
					break
				}
				panic("no extensions field available")
			}
		}
		// Use wire type to skip data.
		var err error
		b0 := b
		b, err = skipField(b, wire)
		if err != nil {
			return err
		}
		*z = encodeVarint(*z, tag<<3|uint64(wire))
		*z = append(*z, b0[:len(b0)-len(b)]...)

		if emap != nil {
			emap[int32(tag)] = e
		}
	}
	if reqMask != u.reqMask && errLater == nil {
		// A required field of this message is missing.
		for _, n := range u.reqFields {
			if reqMask&1 == 0 {
				errLater = &RequiredNotSetError{n}
			}
			reqMask >>= 1
		}
	}
	return errLater
}

// computeUnmarshalInfo fills in u with information for use
// in unmarshaling protocol buffers of type u.typ.
func (u *unmarshalInfo) computeUnmarshalInfo() {
	u.lock.Lock()
	defer u.lock.Unlock()
	if u.initialized != 0 {
		return
	}
	t := u.typ
	n := t.NumField()

	// Set up the "not found" value for the unrecognized byte buffer.
	// This is the default for proto3.
	u.unrecognized = invalidField
	u.extensions = invalidField
	u.oldExtensions = invalidField
	u.bytesExtensions = invalidField

	// List of the generated type and offset for each oneof field.
	type oneofField struct {
		ityp  reflect.Type // interface type of oneof field
		field field        // offset in containing message
	}
	var oneofFields []oneofField

	for i := 0; i < n; i++ {
		f := t.Field(i)
		if f.Name == "XXX_unrecognized" {
			// The byte slice used to hold unrecognized input is special.
			if f.Type != reflect.TypeOf(([]byte)(nil)) {
				panic("bad type for XXX_unrecognized field: " + f.Type.Name())
			}
			u.unrecognized = toField(&f)
			continue
		}
		if f.Name == "XXX_InternalExtensions" {
			// Ditto here.
			if f.Type != reflect.TypeOf(XXX_InternalExtensions{}) {
				panic("bad type for XXX_InternalExtensions field: " + f.Type.Name())
			}
			u.extensions = toField(&f)
			if f.Tag.Get("protobuf_messageset") == "1" {
				u.isMessageSet = true
			}
			continue
		}
		if f.Name == "XXX_extensions" {
			// An older form of the extensions field.
			if f.Type == reflect.TypeOf((map[int32]Extension)(nil)) {
				u.oldExtensions = toField(&f)
				continue
			} else if f.Type == reflect.TypeOf(([]byte)(nil)) {
				u.bytesExtensions = toField(&f)
				continue
			}
			panic("bad type for XXX_extensions field: " + f.Type.Name())
		}
		if f.Name == "XXX_NoUnkeyedLiteral" || f.Name == "XXX_sizecache" {
			continue
		}

		oneof := f.Tag.Get("protobuf_oneof")
		if oneof != "" {
			oneofFields = append(oneofFields, oneofField{f.Type, toField(&f)})
			// The rest of oneof processing happens below.
			continue
		}

		tags := f.Tag.Get("protobuf")
		tagArray := strings.Split(tags, ",")
		if len(tagArray) < 2 {
			panic("protobuf tag not enough fields in " + t.Name() + "." + f.Name + ": " + tags)
		}
		tag, err := strconv.Atoi(tagArray[1])
		if err != nil {
			panic("protobuf tag field not an integer: " + tagArray[1])
		}

		name := ""
		for _, tag := range tagArray[3:] {
			if strings.HasPrefix(tag, "name=") {
				name = tag[5:]
			}
		}

		// Extract unmarshaling function from the field (its type and tags).
		unmarshal := fieldUnmarshaler(&f)

		// Required field?
		var reqMask uint64
		if tagArray[2] == "req" {
			bit := len(u.reqFields)
			u.reqFields = append(u.reqFields, name)
			reqMask = uint64(1) << uint(bit)
			// TODO: if we have more than 64 required fields, we end up
			// not verifying that all required fields are present.
			// Fix this, perhaps using a count of required fields?
		}

		// Store the info in the correct slot in the message.
		u.setTag(tag, toField(&f), unmarshal, reqMask, name)
	}

	// Find any types associated with oneof fields.
	// gogo: len(oneofFields) > 0 is needed for embedded oneof messages, without a marshaler and unmarshaler
	if len(oneofFields) > 0 {
		var oneofImplementers []interface{}
		switch m := reflect.Zero(reflect.PtrTo(t)).Interface().(type) {
		case oneofFuncsIface:
			_, _, _, oneofImplementers = m.XXX_OneofFuncs()
		case oneofWrappersIface:
			oneofImplementers = m.XXX_OneofWrappers()
		}
		for _, v := range oneofImplementers {
			tptr := reflect.TypeOf(v) // *Msg_X
			typ := tptr.Elem()        // Msg_X

			f := typ.Field(0) // oneof implementers have one field
			baseUnmarshal := fieldUnmarshaler(&f)
			tags := strings.Split(f.Tag.Get("protobuf"), ",")
			fieldNum, err := strconv.Atoi(tags[1])
			if err != nil {
				panic("protobuf tag field not an integer: " + tags[1])
			}
			var name string
			for _, tag := range tags {
				if strings.HasPrefix(tag, "name=") {
					name = strings.TrimPrefix(tag, "name=")
					break
				}
			}

			// Find the oneof field that this struct implements.
			// Might take O(n^2) to process all of the oneofs, but who cares.
			for _, of := range oneofFields {
				if tptr.Implements(of.ityp) {
					// We have found the corresponding interface for this struct.
					// That lets us know where this struct should be stored
					// when we encounter it during unmarshaling.
					unmarshal := makeUnmarshalOneof(typ, of.ityp, baseUnmarshal)
					u.setTag(fieldNum, of.field, unmarshal, 0, name)
				}
			}

		}
	}

	// Get extension ranges, if any.
	fn := reflect.Zero(reflect.PtrTo(t)).MethodByName("ExtensionRangeArray")
	if fn.IsValid() {
		if !u.extensions.IsValid() && !u.oldExtensions.IsValid() && !u.bytesExtensions.IsValid() {
			panic("a message with extensions, but no extensions field in " + t.Name())
		}
		u.extensionRanges = fn.Call(nil)[0].Interface().([]ExtensionRange)
	}

	// Explicitly disallow tag 0. This will ensure we flag an error
	// when decoding a buffer of all zeros. Without this code, we
	// would decode and skip an all-zero buffer of even length.
	// [0 0] is [tag=0/wiretype=varint varint-encoded-0].
	u.setTag(0, zeroField, func(b []byte, f pointer, w int) ([]byte, error) {
		return nil, fmt.Errorf("proto: %s: illegal tag 0 (wire type %d)", t, w)
	}, 0, "")

	// Set mask for required field check.
	u.reqMask = uint64(1)<<uint(len(u.reqFields)) - 1

	atomic.StoreInt32(&u.initialized, 1)
}

// setTag stores the unmarshal information for the given tag.
// tag = tag # for field
// field/unmarshal = unmarshal info for that field.
// reqMask = if required, bitmask for field position in required field list. 0 otherwise.
// name = short name of the field.
func (u *unmarshalInfo) setTag(tag int, field field, unmarshal unmarshaler, reqMask uint64, name string) {
	i := unmarshalFieldInfo{field: field, unmarshal: unmarshal, reqMask: reqMask, name: name}
	n := u.typ.NumField()
	if tag >= 0 && (tag < 16 || tag < 2*n) { // TODO: what are the right numbers here?
		for len(u.dense) <= tag {
			u.dense = append(u.dense, unmarshalFieldInfo{})
		}
		u.dense[tag] = i
		return
	}
	if u.sparse == nil {
		u.sparse = map[uint64]unmarshalFieldInfo{}
	}
	u.sparse[uint64(tag)] = i
}

// fieldUnmarshaler returns an unmarshaler for the given field.
func fieldUnmarshaler(f *reflect.StructField) unmarshaler {
	if f.Type.Kind() == reflect.Map {
		return makeUnmarshalMap(f)
	}
	return typeUnmarshaler(f.Type, f.Tag.Get("protobuf"))
}

// typeUnmarshaler returns an unmarshaler for the given field type / field tag pair.
func typeUnmarshaler(t reflect.Type, tags string) unmarshaler {
	tagArray := strings.Split(tags, ",")
	encoding := tagArray[0]
	name := "unknown"
	ctype := false
	isTime := false
	isDuration := false
	isWktPointer := false
	proto3 := false
	validateUTF8 := true
	for _, tag := range tagArray[3:] {
		if strings.HasPrefix(tag, "name=") {
			name = tag[5:]
		}
		if tag == "proto3" {
			proto3 = true
		}
		if strings.HasPrefix(tag, "customtype=") {
			ctype = true
		}
		if tag == "stdtime" {
			isTime = true
		}
		if tag == "stdduration" {
			isDuration = true
		}
		if tag == "wktptr" {
			isWktPointer = true
		}
	}
	validateUTF8 = validateUTF8 && proto3

	// Figure out packaging (pointer, slice, or both)
	slice := false
	pointer := false
	if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 {
		slice = true
		t = t.Elem()
	}
	if t.Kind() == reflect.Ptr {
		pointer = true
		t = t.Elem()
	}

	if ctype {
		if reflect.PtrTo(t).Implements(customType) {
			if slice {
				return makeUnmarshalCustomSlice(getUnmarshalInfo(t), name)
			}
			if pointer {
				return makeUnmarshalCustomPtr(getUnmarshalInfo(t), name)
			}
			return makeUnmarshalCustom(getUnmarshalInfo(t), name)
		} else {
			panic(fmt.Sprintf("custom type: type: %v, does not implement the proto.custom interface", t))
		}
	}

	if isTime {
		if pointer {
			if slice {
				return makeUnmarshalTimePtrSlice(getUnmarshalInfo(t), name)
			}
			return makeUnmarshalTimePtr(getUnmarshalInfo(t), name)
		}
		if slice {
			return makeUnmarshalTimeSlice(getUnmarshalInfo(t), name)
		}
		return makeUnmarshalTime(getUnmarshalInfo(t), name)
	}

	if isDuration {
		if pointer {
			if slice {
				return makeUnmarshalDurationPtrSlice(getUnmarshalInfo(t), name)
			}
			return makeUnmarshalDurationPtr(getUnmarshalInfo(t), name)
		}
		if slice {
			return makeUnmarshalDurationSlice(getUnmarshalInfo(t), name)
		}
		return makeUnmarshalDuration(getUnmarshalInfo(t), name)
	}

	if isWktPointer {
		switch t.Kind() {
		case reflect.Float64:
			if pointer {
				if slice {
					return makeStdDoubleValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name)
				}
				return makeStdDoubleValuePtrUnmarshaler(getUnmarshalInfo(t), name)
			}
			if slice {
				return makeStdDoubleValueSliceUnmarshaler(getUnmarshalInfo(t), name)
			}
			return makeStdDoubleValueUnmarshaler(getUnmarshalInfo(t), name)
		case reflect.Float32:
			if pointer {
				if slice {
					return makeStdFloatValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name)
				}
				return makeStdFloatValuePtrUnmarshaler(getUnmarshalInfo(t), name)
			}
			if slice {
				return makeStdFloatValueSliceUnmarshaler(getUnmarshalInfo(t), name)
			}
			return makeStdFloatValueUnmarshaler(getUnmarshalInfo(t), name)
		case reflect.Int64:
			if pointer {
				if slice {
					return makeStdInt64ValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name)
				}
				return makeStdInt64ValuePtrUnmarshaler(getUnmarshalInfo(t), name)
			}
			if slice {
				return makeStdInt64ValueSliceUnmarshaler(getUnmarshalInfo(t), name)
			}
			return makeStdInt64ValueUnmarshaler(getUnmarshalInfo(t), name)
		case reflect.Uint64:
			if pointer {
				if slice {
					return makeStdUInt64ValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name)
				}
				return makeStdUInt64ValuePtrUnmarshaler(getUnmarshalInfo(t), name)
			}
			if slice {
				return makeStdUInt64ValueSliceUnmarshaler(getUnmarshalInfo(t), name)
			}
			return makeStdUInt64ValueUnmarshaler(getUnmarshalInfo(t), name)
		case reflect.Int32:
			if pointer {
				if slice {
					return makeStdInt32ValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name)
				}
				return makeStdInt32ValuePtrUnmarshaler(getUnmarshalInfo(t), name)
			}
			if slice {
				return makeStdInt32ValueSliceUnmarshaler(getUnmarshalInfo(t), name)
			}
			return makeStdInt32ValueUnmarshaler(getUnmarshalInfo(t), name)
		case reflect.Uint32:
			if pointer {
				if slice {
					return makeStdUInt32ValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name)
				}
				return makeStdUInt32ValuePtrUnmarshaler(getUnmarshalInfo(t), name)
			}
			if slice {
				return makeStdUInt32ValueSliceUnmarshaler(getUnmarshalInfo(t), name)
			}
			return makeStdUInt32ValueUnmarshaler(getUnmarshalInfo(t), name)
		case reflect.Bool:
			if pointer {
				if slice {
					return makeStdBoolValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name)
				}
				return makeStdBoolValuePtrUnmarshaler(getUnmarshalInfo(t), name)
			}
			if slice {
				return makeStdBoolValueSliceUnmarshaler(getUnmarshalInfo(t), name)
			}
			return makeStdBoolValueUnmarshaler(getUnmarshalInfo(t), name)
		case reflect.String:
			if pointer {
				if slice {
					return makeStdStringValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name)
				}
				return makeStdStringValuePtrUnmarshaler(getUnmarshalInfo(t), name)
			}
			if slice {
				return makeStdStringValueSliceUnmarshaler(getUnmarshalInfo(t), name)
			}
			return makeStdStringValueUnmarshaler(getUnmarshalInfo(t), name)
		case uint8SliceType:
			if pointer {
				if slice {
					return makeStdBytesValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name)
				}
				return makeStdBytesValuePtrUnmarshaler(getUnmarshalInfo(t), name)
			}
			if slice {
				return makeStdBytesValueSliceUnmarshaler(getUnmarshalInfo(t), name)
			}
			return makeStdBytesValueUnmarshaler(getUnmarshalInfo(t), name)
		default:
			panic(fmt.Sprintf("unknown wktpointer type %#v", t))
		}
	}

	// We'll never have both pointer and slice for basic types.
	if pointer && slice && t.Kind() != reflect.Struct {
		panic("both pointer and slice for basic type in " + t.Name())
	}

	switch t.Kind() {
	case reflect.Bool:
		if pointer {
			return unmarshalBoolPtr
		}
		if slice {
			return unmarshalBoolSlice
		}
		return unmarshalBoolValue
	case reflect.Int32:
		switch encoding {
		case "fixed32":
			if pointer {
				return unmarshalFixedS32Ptr
			}
			if slice {
				return unmarshalFixedS32Slice
			}
			return unmarshalFixedS32Value
		case "varint":
			// this could be int32 or enum
			if pointer {
				return unmarshalInt32Ptr
			}
			if slice {
				return unmarshalInt32Slice
			}
			return unmarshalInt32Value
		case "zigzag32":
			if pointer {
				return unmarshalSint32Ptr
			}
			if slice {
				return unmarshalSint32Slice
			}
			return unmarshalSint32Value
		}
	case reflect.Int64:
		switch encoding {
		case "fixed64":
			if pointer {
				return unmarshalFixedS64Ptr
			}
			if slice {
				return unmarshalFixedS64Slice
			}
			return unmarshalFixedS64Value
		case "varint":
			if pointer {
				return unmarshalInt64Ptr
			}
			if slice {
				return unmarshalInt64Slice
			}
			return unmarshalInt64Value
		case "zigzag64":
			if pointer {
				return unmarshalSint64Ptr
			}
			if slice {
				return unmarshalSint64Slice
			}
			return unmarshalSint64Value
		}
	case reflect.Uint32:
		switch encoding {
		case "fixed32":
			if pointer {
				return unmarshalFixed32Ptr
			}
			if slice {
				return unmarshalFixed32Slice
			}
			return unmarshalFixed32Value
		case "varint":
			if pointer {
				return unmarshalUint32Ptr
			}
			if slice {
				return unmarshalUint32Slice
			}
			return unmarshalUint32Value
		}
	case reflect.Uint64:
		switch encoding {
		case "fixed64":
			if pointer {
				return unmarshalFixed64Ptr
			}
			if slice {
				return unmarshalFixed64Slice
			}
			return unmarshalFixed64Value
		case "varint":
			if pointer {
				return unmarshalUint64Ptr
			}
			if slice {
				return unmarshalUint64Slice
			}
			return unmarshalUint64Value
		}
	case reflect.Float32:
		if pointer {
			return unmarshalFloat32Ptr
		}
		if slice {
			return unmarshalFloat32Slice
		}
		return unmarshalFloat32Value
	case reflect.Float64:
		if pointer {
			return unmarshalFloat64Ptr
		}
		if slice {
			return unmarshalFloat64Slice
		}
		return unmarshalFloat64Value
	case reflect.Map:
		panic("map type in typeUnmarshaler in " + t.Name())
	case reflect.Slice:
		if pointer {
			panic("bad pointer in slice case in " + t.Name())
		}
		if slice {
			return unmarshalBytesSlice
		}
		return unmarshalBytesValue
	case reflect.String:
		if validateUTF8 {
			if pointer {
				return unmarshalUTF8StringPtr
			}
			if slice {
				return unmarshalUTF8StringSlice
			}
			return unmarshalUTF8StringValue
		}
		if pointer {
			return unmarshalStringPtr
		}
		if slice {
			return unmarshalStringSlice
		}
		return unmarshalStringValue
	case reflect.Struct:
		// message or group field
		if !pointer {
			switch encoding {
			case "bytes":
				if slice {
					return makeUnmarshalMessageSlice(getUnmarshalInfo(t), name)
				}
				return makeUnmarshalMessage(getUnmarshalInfo(t), name)
			}
		}
		switch encoding {
		case "bytes":
			if slice {
				return makeUnmarshalMessageSlicePtr(getUnmarshalInfo(t), name)
			}
			return makeUnmarshalMessagePtr(getUnmarshalInfo(t), name)
		case "group":
			if slice {
				return makeUnmarshalGroupSlicePtr(getUnmarshalInfo(t), name)
			}
			return makeUnmarshalGroupPtr(getUnmarshalInfo(t), name)
		}
	}
	panic(fmt.Sprintf("unmarshaler not found type:%s encoding:%s", t, encoding))
}

// Below are all the unmarshalers for individual fields of various types.

func unmarshalInt64Value(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireVarint {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	b = b[n:]
	v := int64(x)
	*f.toInt64() = v
	return b, nil
}

func unmarshalInt64Ptr(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireVarint {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	b = b[n:]
	v := int64(x)
	*f.toInt64Ptr() = &v
	return b, nil
}

func unmarshalInt64Slice(b []byte, f pointer, w int) ([]byte, error) {
	if w == WireBytes { // packed
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		res := b[x:]
		b = b[:x]
		for len(b) > 0 {
			x, n = decodeVarint(b)
			if n == 0 {
				return nil, io.ErrUnexpectedEOF
			}
			b = b[n:]
			v := int64(x)
			s := f.toInt64Slice()
			*s = append(*s, v)
		}
		return res, nil
	}
	if w != WireVarint {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	b = b[n:]
	v := int64(x)
	s := f.toInt64Slice()
	*s = append(*s, v)
	return b, nil
}

func unmarshalSint64Value(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireVarint {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	b = b[n:]
	v := int64(x>>1) ^ int64(x)<<63>>63
	*f.toInt64() = v
	return b, nil
}

func unmarshalSint64Ptr(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireVarint {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	b = b[n:]
	v := int64(x>>1) ^ int64(x)<<63>>63
	*f.toInt64Ptr() = &v
	return b, nil
}

func unmarshalSint64Slice(b []byte, f pointer, w int) ([]byte, error) {
	if w == WireBytes { // packed
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		res := b[x:]
		b = b[:x]
		for len(b) > 0 {
			x, n = decodeVarint(b)
			if n == 0 {
				return nil, io.ErrUnexpectedEOF
			}
			b = b[n:]
			v := int64(x>>1) ^ int64(x)<<63>>63
			s := f.toInt64Slice()
			*s = append(*s, v)
		}
		return res, nil
	}
	if w != WireVarint {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	b = b[n:]
	v := int64(x>>1) ^ int64(x)<<63>>63
	s := f.toInt64Slice()
	*s = append(*s, v)
	return b, nil
}

func unmarshalUint64Value(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireVarint {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	b = b[n:]
	v := uint64(x)
	*f.toUint64() = v
	return b, nil
}

func unmarshalUint64Ptr(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireVarint {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	b = b[n:]
	v := uint64(x)
	*f.toUint64Ptr() = &v
	return b, nil
}

func unmarshalUint64Slice(b []byte, f pointer, w int) ([]byte, error) {
	if w == WireBytes { // packed
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		res := b[x:]
		b = b[:x]
		for len(b) > 0 {
			x, n = decodeVarint(b)
			if n == 0 {
				return nil, io.ErrUnexpectedEOF
			}
			b = b[n:]
			v := uint64(x)
			s := f.toUint64Slice()
			*s = append(*s, v)
		}
		return res, nil
	}
	if w != WireVarint {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	b = b[n:]
	v := uint64(x)
	s := f.toUint64Slice()
	*s = append(*s, v)
	return b, nil
}

func unmarshalInt32Value(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireVarint {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	b = b[n:]
	v := int32(x)
	*f.toInt32() = v
	return b, nil
}

func unmarshalInt32Ptr(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireVarint {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	b = b[n:]
	v := int32(x)
	f.setInt32Ptr(v)
	return b, nil
}

func unmarshalInt32Slice(b []byte, f pointer, w int) ([]byte, error) {
	if w == WireBytes { // packed
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		res := b[x:]
		b = b[:x]
		for len(b) > 0 {
			x, n = decodeVarint(b)
			if n == 0 {
				return nil, io.ErrUnexpectedEOF
			}
			b = b[n:]
			v := int32(x)
			f.appendInt32Slice(v)
		}
		return res, nil
	}
	if w != WireVarint {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	b = b[n:]
	v := int32(x)
	f.appendInt32Slice(v)
	return b, nil
}

func unmarshalSint32Value(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireVarint {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	b = b[n:]
	v := int32(x>>1) ^ int32(x)<<31>>31
	*f.toInt32() = v
	return b, nil
}

func unmarshalSint32Ptr(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireVarint {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	b = b[n:]
	v := int32(x>>1) ^ int32(x)<<31>>31
	f.setInt32Ptr(v)
	return b, nil
}

func unmarshalSint32Slice(b []byte, f pointer, w int) ([]byte, error) {
	if w == WireBytes { // packed
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		res := b[x:]
		b = b[:x]
		for len(b) > 0 {
			x, n = decodeVarint(b)
			if n == 0 {
				return nil, io.ErrUnexpectedEOF
			}
			b = b[n:]
			v := int32(x>>1) ^ int32(x)<<31>>31
			f.appendInt32Slice(v)
		}
		return res, nil
	}
	if w != WireVarint {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	b = b[n:]
	v := int32(x>>1) ^ int32(x)<<31>>31
	f.appendInt32Slice(v)
	return b, nil
}

func unmarshalUint32Value(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireVarint {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	b = b[n:]
	v := uint32(x)
	*f.toUint32() = v
	return b, nil
}

func unmarshalUint32Ptr(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireVarint {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	b = b[n:]
	v := uint32(x)
	*f.toUint32Ptr() = &v
	return b, nil
}

func unmarshalUint32Slice(b []byte, f pointer, w int) ([]byte, error) {
	if w == WireBytes { // packed
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		res := b[x:]
		b = b[:x]
		for len(b) > 0 {
			x, n = decodeVarint(b)
			if n == 0 {
				return nil, io.ErrUnexpectedEOF
			}
			b = b[n:]
			v := uint32(x)
			s := f.toUint32Slice()
			*s = append(*s, v)
		}
		return res, nil
	}
	if w != WireVarint {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	b = b[n:]
	v := uint32(x)
	s := f.toUint32Slice()
	*s = append(*s, v)
	return b, nil
}

func unmarshalFixed64Value(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireFixed64 {
		return b, errInternalBadWireType
	}
	if len(b) < 8 {
		return nil, io.ErrUnexpectedEOF
	}
	v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
	*f.toUint64() = v
	return b[8:], nil
}

func unmarshalFixed64Ptr(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireFixed64 {
		return b, errInternalBadWireType
	}
	if len(b) < 8 {
		return nil, io.ErrUnexpectedEOF
	}
	v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
	*f.toUint64Ptr() = &v
	return b[8:], nil
}

func unmarshalFixed64Slice(b []byte, f pointer, w int) ([]byte, error) {
	if w == WireBytes { // packed
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		res := b[x:]
		b = b[:x]
		for len(b) > 0 {
			if len(b) < 8 {
				return nil, io.ErrUnexpectedEOF
			}
			v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
			s := f.toUint64Slice()
			*s = append(*s, v)
			b = b[8:]
		}
		return res, nil
	}
	if w != WireFixed64 {
		return b, errInternalBadWireType
	}
	if len(b) < 8 {
		return nil, io.ErrUnexpectedEOF
	}
	v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
	s := f.toUint64Slice()
	*s = append(*s, v)
	return b[8:], nil
}

func unmarshalFixedS64Value(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireFixed64 {
		return b, errInternalBadWireType
	}
	if len(b) < 8 {
		return nil, io.ErrUnexpectedEOF
	}
	v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56
	*f.toInt64() = v
	return b[8:], nil
}

func unmarshalFixedS64Ptr(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireFixed64 {
		return b, errInternalBadWireType
	}
	if len(b) < 8 {
		return nil, io.ErrUnexpectedEOF
	}
	v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56
	*f.toInt64Ptr() = &v
	return b[8:], nil
}

func unmarshalFixedS64Slice(b []byte, f pointer, w int) ([]byte, error) {
	if w == WireBytes { // packed
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		res := b[x:]
		b = b[:x]
		for len(b) > 0 {
			if len(b) < 8 {
				return nil, io.ErrUnexpectedEOF
			}
			v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56
			s := f.toInt64Slice()
			*s = append(*s, v)
			b = b[8:]
		}
		return res, nil
	}
	if w != WireFixed64 {
		return b, errInternalBadWireType
	}
	if len(b) < 8 {
		return nil, io.ErrUnexpectedEOF
	}
	v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56
	s := f.toInt64Slice()
	*s = append(*s, v)
	return b[8:], nil
}

func unmarshalFixed32Value(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireFixed32 {
		return b, errInternalBadWireType
	}
	if len(b) < 4 {
		return nil, io.ErrUnexpectedEOF
	}
	v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
	*f.toUint32() = v
	return b[4:], nil
}

func unmarshalFixed32Ptr(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireFixed32 {
		return b, errInternalBadWireType
	}
	if len(b) < 4 {
		return nil, io.ErrUnexpectedEOF
	}
	v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
	*f.toUint32Ptr() = &v
	return b[4:], nil
}

func unmarshalFixed32Slice(b []byte, f pointer, w int) ([]byte, error) {
	if w == WireBytes { // packed
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		res := b[x:]
		b = b[:x]
		for len(b) > 0 {
			if len(b) < 4 {
				return nil, io.ErrUnexpectedEOF
			}
			v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
			s := f.toUint32Slice()
			*s = append(*s, v)
			b = b[4:]
		}
		return res, nil
	}
	if w != WireFixed32 {
		return b, errInternalBadWireType
	}
	if len(b) < 4 {
		return nil, io.ErrUnexpectedEOF
	}
	v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
	s := f.toUint32Slice()
	*s = append(*s, v)
	return b[4:], nil
}

func unmarshalFixedS32Value(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireFixed32 {
		return b, errInternalBadWireType
	}
	if len(b) < 4 {
		return nil, io.ErrUnexpectedEOF
	}
	v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24
	*f.toInt32() = v
	return b[4:], nil
}

func unmarshalFixedS32Ptr(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireFixed32 {
		return b, errInternalBadWireType
	}
	if len(b) < 4 {
		return nil, io.ErrUnexpectedEOF
	}
	v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24
	f.setInt32Ptr(v)
	return b[4:], nil
}

func unmarshalFixedS32Slice(b []byte, f pointer, w int) ([]byte, error) {
	if w == WireBytes { // packed
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		res := b[x:]
		b = b[:x]
		for len(b) > 0 {
			if len(b) < 4 {
				return nil, io.ErrUnexpectedEOF
			}
			v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24
			f.appendInt32Slice(v)
			b = b[4:]
		}
		return res, nil
	}
	if w != WireFixed32 {
		return b, errInternalBadWireType
	}
	if len(b) < 4 {
		return nil, io.ErrUnexpectedEOF
	}
	v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24
	f.appendInt32Slice(v)
	return b[4:], nil
}

func unmarshalBoolValue(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireVarint {
		return b, errInternalBadWireType
	}
	// Note: any length varint is allowed, even though any sane
	// encoder will use one byte.
	// See https://github.com/golang/protobuf/issues/76
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	// TODO: check if x>1? Tests seem to indicate no.
	v := x != 0
	*f.toBool() = v
	return b[n:], nil
}

func unmarshalBoolPtr(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireVarint {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	v := x != 0
	*f.toBoolPtr() = &v
	return b[n:], nil
}

func unmarshalBoolSlice(b []byte, f pointer, w int) ([]byte, error) {
	if w == WireBytes { // packed
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		res := b[x:]
		b = b[:x]
		for len(b) > 0 {
			x, n = decodeVarint(b)
			if n == 0 {
				return nil, io.ErrUnexpectedEOF
			}
			v := x != 0
			s := f.toBoolSlice()
			*s = append(*s, v)
			b = b[n:]
		}
		return res, nil
	}
	if w != WireVarint {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	v := x != 0
	s := f.toBoolSlice()
	*s = append(*s, v)
	return b[n:], nil
}

func unmarshalFloat64Value(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireFixed64 {
		return b, errInternalBadWireType
	}
	if len(b) < 8 {
		return nil, io.ErrUnexpectedEOF
	}
	v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56)
	*f.toFloat64() = v
	return b[8:], nil
}

func unmarshalFloat64Ptr(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireFixed64 {
		return b, errInternalBadWireType
	}
	if len(b) < 8 {
		return nil, io.ErrUnexpectedEOF
	}
	v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56)
	*f.toFloat64Ptr() = &v
	return b[8:], nil
}

func unmarshalFloat64Slice(b []byte, f pointer, w int) ([]byte, error) {
	if w == WireBytes { // packed
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		res := b[x:]
		b = b[:x]
		for len(b) > 0 {
			if len(b) < 8 {
				return nil, io.ErrUnexpectedEOF
			}
			v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56)
			s := f.toFloat64Slice()
			*s = append(*s, v)
			b = b[8:]
		}
		return res, nil
	}
	if w != WireFixed64 {
		return b, errInternalBadWireType
	}
	if len(b) < 8 {
		return nil, io.ErrUnexpectedEOF
	}
	v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56)
	s := f.toFloat64Slice()
	*s = append(*s, v)
	return b[8:], nil
}

func unmarshalFloat32Value(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireFixed32 {
		return b, errInternalBadWireType
	}
	if len(b) < 4 {
		return nil, io.ErrUnexpectedEOF
	}
	v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)
	*f.toFloat32() = v
	return b[4:], nil
}

func unmarshalFloat32Ptr(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireFixed32 {
		return b, errInternalBadWireType
	}
	if len(b) < 4 {
		return nil, io.ErrUnexpectedEOF
	}
	v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)
	*f.toFloat32Ptr() = &v
	return b[4:], nil
}

func unmarshalFloat32Slice(b []byte, f pointer, w int) ([]byte, error) {
	if w == WireBytes { // packed
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		res := b[x:]
		b = b[:x]
		for len(b) > 0 {
			if len(b) < 4 {
				return nil, io.ErrUnexpectedEOF
			}
			v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)
			s := f.toFloat32Slice()
			*s = append(*s, v)
			b = b[4:]
		}
		return res, nil
	}
	if w != WireFixed32 {
		return b, errInternalBadWireType
	}
	if len(b) < 4 {
		return nil, io.ErrUnexpectedEOF
	}
	v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)
	s := f.toFloat32Slice()
	*s = append(*s, v)
	return b[4:], nil
}

func unmarshalStringValue(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireBytes {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	b = b[n:]
	if x > uint64(len(b)) {
		return nil, io.ErrUnexpectedEOF
	}
	v := string(b[:x])
	*f.toString() = v
	return b[x:], nil
}

func unmarshalStringPtr(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireBytes {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	b = b[n:]
	if x > uint64(len(b)) {
		return nil, io.ErrUnexpectedEOF
	}
	v := string(b[:x])
	*f.toStringPtr() = &v
	return b[x:], nil
}

func unmarshalStringSlice(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireBytes {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	b = b[n:]
	if x > uint64(len(b)) {
		return nil, io.ErrUnexpectedEOF
	}
	v := string(b[:x])
	s := f.toStringSlice()
	*s = append(*s, v)
	return b[x:], nil
}

func unmarshalUTF8StringValue(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireBytes {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	b = b[n:]
	if x > uint64(len(b)) {
		return nil, io.ErrUnexpectedEOF
	}
	v := string(b[:x])
	*f.toString() = v
	if !utf8.ValidString(v) {
		return b[x:], errInvalidUTF8
	}
	return b[x:], nil
}

func unmarshalUTF8StringPtr(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireBytes {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	b = b[n:]
	if x > uint64(len(b)) {
		return nil, io.ErrUnexpectedEOF
	}
	v := string(b[:x])
	*f.toStringPtr() = &v
	if !utf8.ValidString(v) {
		return b[x:], errInvalidUTF8
	}
	return b[x:], nil
}

func unmarshalUTF8StringSlice(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireBytes {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	b = b[n:]
	if x > uint64(len(b)) {
		return nil, io.ErrUnexpectedEOF
	}
	v := string(b[:x])
	s := f.toStringSlice()
	*s = append(*s, v)
	if !utf8.ValidString(v) {
		return b[x:], errInvalidUTF8
	}
	return b[x:], nil
}

var emptyBuf [0]byte

func unmarshalBytesValue(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireBytes {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	b = b[n:]
	if x > uint64(len(b)) {
		return nil, io.ErrUnexpectedEOF
	}
	// The use of append here is a trick which avoids the zeroing
	// that would be required if we used a make/copy pair.
	// We append to emptyBuf instead of nil because we want
	// a non-nil result even when the length is 0.
	v := append(emptyBuf[:], b[:x]...)
	*f.toBytes() = v
	return b[x:], nil
}

func unmarshalBytesSlice(b []byte, f pointer, w int) ([]byte, error) {
	if w != WireBytes {
		return b, errInternalBadWireType
	}
	x, n := decodeVarint(b)
	if n == 0 {
		return nil, io.ErrUnexpectedEOF
	}
	b = b[n:]
	if x > uint64(len(b)) {
		return nil, io.ErrUnexpectedEOF
	}
	v := append(emptyBuf[:], b[:x]...)
	s := f.toBytesSlice()
	*s = append(*s, v)
	return b[x:], nil
}

func makeUnmarshalMessagePtr(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return b, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		// First read the message field to see if something is there.
		// The semantics of multiple submessages are weird.  Instead of
		// the last one winning (as it is for all other fields), multiple
		// submessages are merged.
		v := f.getPointer()
		if v.isNil() {
			v = valToPointer(reflect.New(sub.typ))
			f.setPointer(v)
		}
		err := sub.unmarshal(v, b[:x])
		if err != nil {
			if r, ok := err.(*RequiredNotSetError); ok {
				r.field = name + "." + r.field
			} else {
				return nil, err
			}
		}
		return b[x:], err
	}
}

func makeUnmarshalMessageSlicePtr(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return b, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		v := valToPointer(reflect.New(sub.typ))
		err := sub.unmarshal(v, b[:x])
		if err != nil {
			if r, ok := err.(*RequiredNotSetError); ok {
				r.field = name + "." + r.field
			} else {
				return nil, err
			}
		}
		f.appendPointer(v)
		return b[x:], err
	}
}

func makeUnmarshalGroupPtr(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireStartGroup {
			return b, errInternalBadWireType
		}
		x, y := findEndGroup(b)
		if x < 0 {
			return nil, io.ErrUnexpectedEOF
		}
		v := f.getPointer()
		if v.isNil() {
			v = valToPointer(reflect.New(sub.typ))
			f.setPointer(v)
		}
		err := sub.unmarshal(v, b[:x])
		if err != nil {
			if r, ok := err.(*RequiredNotSetError); ok {
				r.field = name + "." + r.field
			} else {
				return nil, err
			}
		}
		return b[y:], err
	}
}

func makeUnmarshalGroupSlicePtr(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireStartGroup {
			return b, errInternalBadWireType
		}
		x, y := findEndGroup(b)
		if x < 0 {
			return nil, io.ErrUnexpectedEOF
		}
		v := valToPointer(reflect.New(sub.typ))
		err := sub.unmarshal(v, b[:x])
		if err != nil {
			if r, ok := err.(*RequiredNotSetError); ok {
				r.field = name + "." + r.field
			} else {
				return nil, err
			}
		}
		f.appendPointer(v)
		return b[y:], err
	}
}

func makeUnmarshalMap(f *reflect.StructField) unmarshaler {
	t := f.Type
	kt := t.Key()
	vt := t.Elem()
	tagArray := strings.Split(f.Tag.Get("protobuf"), ",")
	valTags := strings.Split(f.Tag.Get("protobuf_val"), ",")
	for _, t := range tagArray {
		if strings.HasPrefix(t, "customtype=") {
			valTags = append(valTags, t)
		}
		if t == "stdtime" {
			valTags = append(valTags, t)
		}
		if t == "stdduration" {
			valTags = append(valTags, t)
		}
		if t == "wktptr" {
			valTags = append(valTags, t)
		}
	}
	unmarshalKey := typeUnmarshaler(kt, f.Tag.Get("protobuf_key"))
	unmarshalVal := typeUnmarshaler(vt, strings.Join(valTags, ","))
	return func(b []byte, f pointer, w int) ([]byte, error) {
		// The map entry is a submessage. Figure out how big it is.
		if w != WireBytes {
			return nil, fmt.Errorf("proto: bad wiretype for map field: got %d want %d", w, WireBytes)
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		r := b[x:] // unused data to return
		b = b[:x]  // data for map entry

		// Note: we could use #keys * #values ~= 200 functions
		// to do map decoding without reflection. Probably not worth it.
		// Maps will be somewhat slow. Oh well.

		// Read key and value from data.
		var nerr nonFatal
		k := reflect.New(kt)
		v := reflect.New(vt)
		for len(b) > 0 {
			x, n := decodeVarint(b)
			if n == 0 {
				return nil, io.ErrUnexpectedEOF
			}
			wire := int(x) & 7
			b = b[n:]

			var err error
			switch x >> 3 {
			case 1:
				b, err = unmarshalKey(b, valToPointer(k), wire)
			case 2:
				b, err = unmarshalVal(b, valToPointer(v), wire)
			default:
				err = errInternalBadWireType // skip unknown tag
			}

			if nerr.Merge(err) {
				continue
			}
			if err != errInternalBadWireType {
				return nil, err
			}

			// Skip past unknown fields.
			b, err = skipField(b, wire)
			if err != nil {
				return nil, err
			}
		}

		// Get map, allocate if needed.
		m := f.asPointerTo(t).Elem() // an addressable map[K]T
		if m.IsNil() {
			m.Set(reflect.MakeMap(t))
		}

		// Insert into map.
		m.SetMapIndex(k.Elem(), v.Elem())

		return r, nerr.E
	}
}

// makeUnmarshalOneof makes an unmarshaler for oneof fields.
// for:
// message Msg {
//   oneof F {
//     int64 X = 1;
//     float64 Y = 2;
//   }
// }
// typ is the type of the concrete entry for a oneof case (e.g. Msg_X).
// ityp is the interface type of the oneof field (e.g. isMsg_F).
// unmarshal is the unmarshaler for the base type of the oneof case (e.g. int64).
// Note that this function will be called once for each case in the oneof.
func makeUnmarshalOneof(typ, ityp reflect.Type, unmarshal unmarshaler) unmarshaler {
	sf := typ.Field(0)
	field0 := toField(&sf)
	return func(b []byte, f pointer, w int) ([]byte, error) {
		// Allocate holder for value.
		v := reflect.New(typ)

		// Unmarshal data into holder.
		// We unmarshal into the first field of the holder object.
		var err error
		var nerr nonFatal
		b, err = unmarshal(b, valToPointer(v).offset(field0), w)
		if !nerr.Merge(err) {
			return nil, err
		}

		// Write pointer to holder into target field.
		f.asPointerTo(ityp).Elem().Set(v)

		return b, nerr.E
	}
}

// Error used by decode internally.
var errInternalBadWireType = errors.New("proto: internal error: bad wiretype")

// skipField skips past a field of type wire and returns the remaining bytes.
func skipField(b []byte, wire int) ([]byte, error) {
	switch wire {
	case WireVarint:
		_, k := decodeVarint(b)
		if k == 0 {
			return b, io.ErrUnexpectedEOF
		}
		b = b[k:]
	case WireFixed32:
		if len(b) < 4 {
			return b, io.ErrUnexpectedEOF
		}
		b = b[4:]
	case WireFixed64:
		if len(b) < 8 {
			return b, io.ErrUnexpectedEOF
		}
		b = b[8:]
	case WireBytes:
		m, k := decodeVarint(b)
		if k == 0 || uint64(len(b)-k) < m {
			return b, io.ErrUnexpectedEOF
		}
		b = b[uint64(k)+m:]
	case WireStartGroup:
		_, i := findEndGroup(b)
		if i == -1 {
			return b, io.ErrUnexpectedEOF
		}
		b = b[i:]
	default:
		return b, fmt.Errorf("proto: can't skip unknown wire type %d", wire)
	}
	return b, nil
}

// findEndGroup finds the index of the next EndGroup tag.
// Groups may be nested, so the "next" EndGroup tag is the first
// unpaired EndGroup.
// findEndGroup returns the indexes of the start and end of the EndGroup tag.
// Returns (-1,-1) if it can't find one.
func findEndGroup(b []byte) (int, int) {
	depth := 1
	i := 0
	for {
		x, n := decodeVarint(b[i:])
		if n == 0 {
			return -1, -1
		}
		j := i
		i += n
		switch x & 7 {
		case WireVarint:
			_, k := decodeVarint(b[i:])
			if k == 0 {
				return -1, -1
			}
			i += k
		case WireFixed32:
			if len(b)-4 < i {
				return -1, -1
			}
			i += 4
		case WireFixed64:
			if len(b)-8 < i {
				return -1, -1
			}
			i += 8
		case WireBytes:
			m, k := decodeVarint(b[i:])
			if k == 0 {
				return -1, -1
			}
			i += k
			if uint64(len(b)-i) < m {
				return -1, -1
			}
			i += int(m)
		case WireStartGroup:
			depth++
		case WireEndGroup:
			depth--
			if depth == 0 {
				return j, i
			}
		default:
			return -1, -1
		}
	}
}

// encodeVarint appends a varint-encoded integer to b and returns the result.
func encodeVarint(b []byte, x uint64) []byte {
	for x >= 1<<7 {
		b = append(b, byte(x&0x7f|0x80))
		x >>= 7
	}
	return append(b, byte(x))
}

// decodeVarint reads a varint-encoded integer from b.
// Returns the decoded integer and the number of bytes read.
// If there is an error, it returns 0,0.
func decodeVarint(b []byte) (uint64, int) {
	var x, y uint64
	if len(b) == 0 {
		goto bad
	}
	x = uint64(b[0])
	if x < 0x80 {
		return x, 1
	}
	x -= 0x80

	if len(b) <= 1 {
		goto bad
	}
	y = uint64(b[1])
	x += y << 7
	if y < 0x80 {
		return x, 2
	}
	x -= 0x80 << 7

	if len(b) <= 2 {
		goto bad
	}
	y = uint64(b[2])
	x += y << 14
	if y < 0x80 {
		return x, 3
	}
	x -= 0x80 << 14

	if len(b) <= 3 {
		goto bad
	}
	y = uint64(b[3])
	x += y << 21
	if y < 0x80 {
		return x, 4
	}
	x -= 0x80 << 21

	if len(b) <= 4 {
		goto bad
	}
	y = uint64(b[4])
	x += y << 28
	if y < 0x80 {
		return x, 5
	}
	x -= 0x80 << 28

	if len(b) <= 5 {
		goto bad
	}
	y = uint64(b[5])
	x += y << 35
	if y < 0x80 {
		return x, 6
	}
	x -= 0x80 << 35

	if len(b) <= 6 {
		goto bad
	}
	y = uint64(b[6])
	x += y << 42
	if y < 0x80 {
		return x, 7
	}
	x -= 0x80 << 42

	if len(b) <= 7 {
		goto bad
	}
	y = uint64(b[7])
	x += y << 49
	if y < 0x80 {
		return x, 8
	}
	x -= 0x80 << 49

	if len(b) <= 8 {
		goto bad
	}
	y = uint64(b[8])
	x += y << 56
	if y < 0x80 {
		return x, 9
	}
	x -= 0x80 << 56

	if len(b) <= 9 {
		goto bad
	}
	y = uint64(b[9])
	x += y << 63
	if y < 2 {
		return x, 10
	}

bad:
	return 0, 0
}
   0707010000065A000081A4000000000000000000000001645E367C00002646000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/table_unmarshal_gogo.go // Protocol Buffers for Go with Gadgets
//
// Copyright (c) 2018, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package proto

import (
	"io"
	"reflect"
)

func makeUnmarshalMessage(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		// First read the message field to see if something is there.
		// The semantics of multiple submessages are weird.  Instead of
		// the last one winning (as it is for all other fields), multiple
		// submessages are merged.
		v := f // gogo: changed from v := f.getPointer()
		if v.isNil() {
			v = valToPointer(reflect.New(sub.typ))
			f.setPointer(v)
		}
		err := sub.unmarshal(v, b[:x])
		if err != nil {
			if r, ok := err.(*RequiredNotSetError); ok {
				r.field = name + "." + r.field
			} else {
				return nil, err
			}
		}
		return b[x:], err
	}
}

func makeUnmarshalMessageSlice(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		v := valToPointer(reflect.New(sub.typ))
		err := sub.unmarshal(v, b[:x])
		if err != nil {
			if r, ok := err.(*RequiredNotSetError); ok {
				r.field = name + "." + r.field
			} else {
				return nil, err
			}
		}
		f.appendRef(v, sub.typ) // gogo: changed from f.appendPointer(v)
		return b[x:], err
	}
}

func makeUnmarshalCustomPtr(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}

		s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
		s.Set(reflect.New(sub.typ))
		m := s.Interface().(custom)
		if err := m.Unmarshal(b[:x]); err != nil {
			return nil, err
		}
		return b[x:], nil
	}
}

func makeUnmarshalCustomSlice(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := reflect.New(sub.typ)
		c := m.Interface().(custom)
		if err := c.Unmarshal(b[:x]); err != nil {
			return nil, err
		}
		v := valToPointer(m)
		f.appendRef(v, sub.typ)
		return b[x:], nil
	}
}

func makeUnmarshalCustom(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}

		m := f.asPointerTo(sub.typ).Interface().(custom)
		if err := m.Unmarshal(b[:x]); err != nil {
			return nil, err
		}
		return b[x:], nil
	}
}

func makeUnmarshalTime(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &timestamp{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		t, err := timestampFromProto(m)
		if err != nil {
			return nil, err
		}
		s := f.asPointerTo(sub.typ).Elem()
		s.Set(reflect.ValueOf(t))
		return b[x:], nil
	}
}

func makeUnmarshalTimePtr(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &timestamp{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		t, err := timestampFromProto(m)
		if err != nil {
			return nil, err
		}
		s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
		s.Set(reflect.ValueOf(&t))
		return b[x:], nil
	}
}

func makeUnmarshalTimePtrSlice(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &timestamp{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		t, err := timestampFromProto(m)
		if err != nil {
			return nil, err
		}
		slice := f.getSlice(reflect.PtrTo(sub.typ))
		newSlice := reflect.Append(slice, reflect.ValueOf(&t))
		slice.Set(newSlice)
		return b[x:], nil
	}
}

func makeUnmarshalTimeSlice(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &timestamp{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		t, err := timestampFromProto(m)
		if err != nil {
			return nil, err
		}
		slice := f.getSlice(sub.typ)
		newSlice := reflect.Append(slice, reflect.ValueOf(t))
		slice.Set(newSlice)
		return b[x:], nil
	}
}

func makeUnmarshalDurationPtr(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &duration{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		d, err := durationFromProto(m)
		if err != nil {
			return nil, err
		}
		s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
		s.Set(reflect.ValueOf(&d))
		return b[x:], nil
	}
}

func makeUnmarshalDuration(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &duration{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		d, err := durationFromProto(m)
		if err != nil {
			return nil, err
		}
		s := f.asPointerTo(sub.typ).Elem()
		s.Set(reflect.ValueOf(d))
		return b[x:], nil
	}
}

func makeUnmarshalDurationPtrSlice(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &duration{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		d, err := durationFromProto(m)
		if err != nil {
			return nil, err
		}
		slice := f.getSlice(reflect.PtrTo(sub.typ))
		newSlice := reflect.Append(slice, reflect.ValueOf(&d))
		slice.Set(newSlice)
		return b[x:], nil
	}
}

func makeUnmarshalDurationSlice(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &duration{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		d, err := durationFromProto(m)
		if err != nil {
			return nil, err
		}
		slice := f.getSlice(sub.typ)
		newSlice := reflect.Append(slice, reflect.ValueOf(d))
		slice.Set(newSlice)
		return b[x:], nil
	}
}
  0707010000065B000081A4000000000000000000000001645E367C00005BC4000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/text.go // Protocol Buffers for Go with Gadgets
//
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Go support for Protocol Buffers - Google's data interchange format
//
// Copyright 2010 The Go Authors.  All rights reserved.
// https://github.com/golang/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package proto

// Functions for writing the text protocol buffer format.

import (
	"bufio"
	"bytes"
	"encoding"
	"errors"
	"fmt"
	"io"
	"log"
	"math"
	"reflect"
	"sort"
	"strings"
	"sync"
	"time"
)

var (
	newline         = []byte("\n")
	spaces          = []byte("                                        ")
	endBraceNewline = []byte("}\n")
	backslashN      = []byte{'\\', 'n'}
	backslashR      = []byte{'\\', 'r'}
	backslashT      = []byte{'\\', 't'}
	backslashDQ     = []byte{'\\', '"'}
	backslashBS     = []byte{'\\', '\\'}
	posInf          = []byte("inf")
	negInf          = []byte("-inf")
	nan             = []byte("nan")
)

type writer interface {
	io.Writer
	WriteByte(byte) error
}

// textWriter is an io.Writer that tracks its indentation level.
type textWriter struct {
	ind      int
	complete bool // if the current position is a complete line
	compact  bool // whether to write out as a one-liner
	w        writer
}

func (w *textWriter) WriteString(s string) (n int, err error) {
	if !strings.Contains(s, "\n") {
		if !w.compact && w.complete {
			w.writeIndent()
		}
		w.complete = false
		return io.WriteString(w.w, s)
	}
	// WriteString is typically called without newlines, so this
	// codepath and its copy are rare.  We copy to avoid
	// duplicating all of Write's logic here.
	return w.Write([]byte(s))
}

func (w *textWriter) Write(p []byte) (n int, err error) {
	newlines := bytes.Count(p, newline)
	if newlines == 0 {
		if !w.compact && w.complete {
			w.writeIndent()
		}
		n, err = w.w.Write(p)
		w.complete = false
		return n, err
	}

	frags := bytes.SplitN(p, newline, newlines+1)
	if w.compact {
		for i, frag := range frags {
			if i > 0 {
				if err := w.w.WriteByte(' '); err != nil {
					return n, err
				}
				n++
			}
			nn, err := w.w.Write(frag)
			n += nn
			if err != nil {
				return n, err
			}
		}
		return n, nil
	}

	for i, frag := range frags {
		if w.complete {
			w.writeIndent()
		}
		nn, err := w.w.Write(frag)
		n += nn
		if err != nil {
			return n, err
		}
		if i+1 < len(frags) {
			if err := w.w.WriteByte('\n'); err != nil {
				return n, err
			}
			n++
		}
	}
	w.complete = len(frags[len(frags)-1]) == 0
	return n, nil
}

func (w *textWriter) WriteByte(c byte) error {
	if w.compact && c == '\n' {
		c = ' '
	}
	if !w.compact && w.complete {
		w.writeIndent()
	}
	err := w.w.WriteByte(c)
	w.complete = c == '\n'
	return err
}

func (w *textWriter) indent() { w.ind++ }

func (w *textWriter) unindent() {
	if w.ind == 0 {
		log.Print("proto: textWriter unindented too far")
		return
	}
	w.ind--
}

func writeName(w *textWriter, props *Properties) error {
	if _, err := w.WriteString(props.OrigName); err != nil {
		return err
	}
	if props.Wire != "group" {
		return w.WriteByte(':')
	}
	return nil
}

func requiresQuotes(u string) bool {
	// When type URL contains any characters except [0-9A-Za-z./\-]*, it must be quoted.
	for _, ch := range u {
		switch {
		case ch == '.' || ch == '/' || ch == '_':
			continue
		case '0' <= ch && ch <= '9':
			continue
		case 'A' <= ch && ch <= 'Z':
			continue
		case 'a' <= ch && ch <= 'z':
			continue
		default:
			return true
		}
	}
	return false
}

// isAny reports whether sv is a google.protobuf.Any message
func isAny(sv reflect.Value) bool {
	type wkt interface {
		XXX_WellKnownType() string
	}
	t, ok := sv.Addr().Interface().(wkt)
	return ok && t.XXX_WellKnownType() == "Any"
}

// writeProto3Any writes an expanded google.protobuf.Any message.
//
// It returns (false, nil) if sv value can't be unmarshaled (e.g. because
// required messages are not linked in).
//
// It returns (true, error) when sv was written in expanded format or an error
// was encountered.
func (tm *TextMarshaler) writeProto3Any(w *textWriter, sv reflect.Value) (bool, error) {
	turl := sv.FieldByName("TypeUrl")
	val := sv.FieldByName("Value")
	if !turl.IsValid() || !val.IsValid() {
		return true, errors.New("proto: invalid google.protobuf.Any message")
	}

	b, ok := val.Interface().([]byte)
	if !ok {
		return true, errors.New("proto: invalid google.protobuf.Any message")
	}

	parts := strings.Split(turl.String(), "/")
	mt := MessageType(parts[len(parts)-1])
	if mt == nil {
		return false, nil
	}
	m := reflect.New(mt.Elem())
	if err := Unmarshal(b, m.Interface().(Message)); err != nil {
		return false, nil
	}
	w.Write([]byte("["))
	u := turl.String()
	if requiresQuotes(u) {
		writeString(w, u)
	} else {
		w.Write([]byte(u))
	}
	if w.compact {
		w.Write([]byte("]:<"))
	} else {
		w.Write([]byte("]: <\n"))
		w.ind++
	}
	if err := tm.writeStruct(w, m.Elem()); err != nil {
		return true, err
	}
	if w.compact {
		w.Write([]byte("> "))
	} else {
		w.ind--
		w.Write([]byte(">\n"))
	}
	return true, nil
}

func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error {
	if tm.ExpandAny && isAny(sv) {
		if canExpand, err := tm.writeProto3Any(w, sv); canExpand {
			return err
		}
	}
	st := sv.Type()
	sprops := GetProperties(st)
	for i := 0; i < sv.NumField(); i++ {
		fv := sv.Field(i)
		props := sprops.Prop[i]
		name := st.Field(i).Name

		if name == "XXX_NoUnkeyedLiteral" {
			continue
		}

		if strings.HasPrefix(name, "XXX_") {
			// There are two XXX_ fields:
			//   XXX_unrecognized []byte
			//   XXX_extensions   map[int32]proto.Extension
			// The first is handled here;
			// the second is handled at the bottom of this function.
			if name == "XXX_unrecognized" && !fv.IsNil() {
				if err := writeUnknownStruct(w, fv.Interface().([]byte)); err != nil {
					return err
				}
			}
			continue
		}
		if fv.Kind() == reflect.Ptr && fv.IsNil() {
			// Field not filled in. This could be an optional field or
			// a required field that wasn't filled in. Either way, there
			// isn't anything we can show for it.
			continue
		}
		if fv.Kind() == reflect.Slice && fv.IsNil() {
			// Repeated field that is empty, or a bytes field that is unused.
			continue
		}

		if props.Repeated && fv.Kind() == reflect.Slice {
			// Repeated field.
			for j := 0; j < fv.Len(); j++ {
				if err := writeName(w, props); err != nil {
					return err
				}
				if !w.compact {
					if err := w.WriteByte(' '); err != nil {
						return err
					}
				}
				v := fv.Index(j)
				if v.Kind() == reflect.Ptr && v.IsNil() {
					// A nil message in a repeated field is not valid,
					// but we can handle that more gracefully than panicking.
					if _, err := w.Write([]byte("<nil>\n")); err != nil {
						return err
					}
					continue
				}
				if len(props.Enum) > 0 {
					if err := tm.writeEnum(w, v, props); err != nil {
						return err
					}
				} else if err := tm.writeAny(w, v, props); err != nil {
					return err
				}
				if err := w.WriteByte('\n'); err != nil {
					return err
				}
			}
			continue
		}
		if fv.Kind() == reflect.Map {
			// Map fields are rendered as a repeated struct with key/value fields.
			keys := fv.MapKeys()
			sort.Sort(mapKeys(keys))
			for _, key := range keys {
				val := fv.MapIndex(key)
				if err := writeName(w, props); err != nil {
					return err
				}
				if !w.compact {
					if err := w.WriteByte(' '); err != nil {
						return err
					}
				}
				// open struct
				if err := w.WriteByte('<'); err != nil {
					return err
				}
				if !w.compact {
					if err := w.WriteByte('\n'); err != nil {
						return err
					}
				}
				w.indent()
				// key
				if _, err := w.WriteString("key:"); err != nil {
					return err
				}
				if !w.compact {
					if err := w.WriteByte(' '); err != nil {
						return err
					}
				}
				if err := tm.writeAny(w, key, props.MapKeyProp); err != nil {
					return err
				}
				if err := w.WriteByte('\n'); err != nil {
					return err
				}
				// nil values aren't legal, but we can avoid panicking because of them.
				if val.Kind() != reflect.Ptr || !val.IsNil() {
					// value
					if _, err := w.WriteString("value:"); err != nil {
						return err
					}
					if !w.compact {
						if err := w.WriteByte(' '); err != nil {
							return err
						}
					}
					if err := tm.writeAny(w, val, props.MapValProp); err != nil {
						return err
					}
					if err := w.WriteByte('\n'); err != nil {
						return err
					}
				}
				// close struct
				w.unindent()
				if err := w.WriteByte('>'); err != nil {
					return err
				}
				if err := w.WriteByte('\n'); err != nil {
					return err
				}
			}
			continue
		}
		if props.proto3 && fv.Kind() == reflect.Slice && fv.Len() == 0 {
			// empty bytes field
			continue
		}
		if props.proto3 && fv.Kind() != reflect.Ptr && fv.Kind() != reflect.Slice {
			// proto3 non-repeated scalar field; skip if zero value
			if isProto3Zero(fv) {
				continue
			}
		}

		if fv.Kind() == reflect.Interface {
			// Check if it is a oneof.
			if st.Field(i).Tag.Get("protobuf_oneof") != "" {
				// fv is nil, or holds a pointer to generated struct.
				// That generated struct has exactly one field,
				// which has a protobuf struct tag.
				if fv.IsNil() {
					continue
				}
				inner := fv.Elem().Elem() // interface -> *T -> T
				tag := inner.Type().Field(0).Tag.Get("protobuf")
				props = new(Properties) // Overwrite the outer props var, but not its pointee.
				props.Parse(tag)
				// Write the value in the oneof, not the oneof itself.
				fv = inner.Field(0)

				// Special case to cope with malformed messages gracefully:
				// If the value in the oneof is a nil pointer, don't panic
				// in writeAny.
				if fv.Kind() == reflect.Ptr && fv.IsNil() {
					// Use errors.New so writeAny won't render quotes.
					msg := errors.New("/* nil */")
					fv = reflect.ValueOf(&msg).Elem()
				}
			}
		}

		if err := writeName(w, props); err != nil {
			return err
		}
		if !w.compact {
			if err := w.WriteByte(' '); err != nil {
				return err
			}
		}

		if len(props.Enum) > 0 {
			if err := tm.writeEnum(w, fv, props); err != nil {
				return err
			}
		} else if err := tm.writeAny(w, fv, props); err != nil {
			return err
		}

		if err := w.WriteByte('\n'); err != nil {
			return err
		}
	}

	// Extensions (the XXX_extensions field).
	pv := sv
	if pv.CanAddr() {
		pv = sv.Addr()
	} else {
		pv = reflect.New(sv.Type())
		pv.Elem().Set(sv)
	}
	if _, err := extendable(pv.Interface()); err == nil {
		if err := tm.writeExtensions(w, pv); err != nil {
			return err
		}
	}

	return nil
}

var textMarshalerType = reflect.TypeOf((*encoding.TextMarshaler)(nil)).Elem()

// writeAny writes an arbitrary field.
func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Properties) error {
	v = reflect.Indirect(v)

	if props != nil {
		if len(props.CustomType) > 0 {
			custom, ok := v.Interface().(Marshaler)
			if ok {
				data, err := custom.Marshal()
				if err != nil {
					return err
				}
				if err := writeString(w, string(data)); err != nil {
					return err
				}
				return nil
			}
		} else if len(props.CastType) > 0 {
			if _, ok := v.Interface().(interface {
				String() string
			}); ok {
				switch v.Kind() {
				case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,
					reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
					_, err := fmt.Fprintf(w, "%d", v.Interface())
					return err
				}
			}
		} else if props.StdTime {
			t, ok := v.Interface().(time.Time)
			if !ok {
				return fmt.Errorf("stdtime is not time.Time, but %T", v.Interface())
			}
			tproto, err := timestampProto(t)
			if err != nil {
				return err
			}
			propsCopy := *props // Make a copy so that this is goroutine-safe
			propsCopy.StdTime = false
			err = tm.writeAny(w, reflect.ValueOf(tproto), &propsCopy)
			return err
		} else if props.StdDuration {
			d, ok := v.Interface().(time.Duration)
			if !ok {
				return fmt.Errorf("stdtime is not time.Duration, but %T", v.Interface())
			}
			dproto := durationProto(d)
			propsCopy := *props // Make a copy so that this is goroutine-safe
			propsCopy.StdDuration = false
			err := tm.writeAny(w, reflect.ValueOf(dproto), &propsCopy)
			return err
		}
	}

	// Floats have special cases.
	if v.Kind() == reflect.Float32 || v.Kind() == reflect.Float64 {
		x := v.Float()
		var b []byte
		switch {
		case math.IsInf(x, 1):
			b = posInf
		case math.IsInf(x, -1):
			b = negInf
		case math.IsNaN(x):
			b = nan
		}
		if b != nil {
			_, err := w.Write(b)
			return err
		}
		// Other values are handled below.
	}

	// We don't attempt to serialise every possible value type; only those
	// that can occur in protocol buffers.
	switch v.Kind() {
	case reflect.Slice:
		// Should only be a []byte; repeated fields are handled in writeStruct.
		if err := writeString(w, string(v.Bytes())); err != nil {
			return err
		}
	case reflect.String:
		if err := writeString(w, v.String()); err != nil {
			return err
		}
	case reflect.Struct:
		// Required/optional group/message.
		var bra, ket byte = '<', '>'
		if props != nil && props.Wire == "group" {
			bra, ket = '{', '}'
		}
		if err := w.WriteByte(bra); err != nil {
			return err
		}
		if !w.compact {
			if err := w.WriteByte('\n'); err != nil {
				return err
			}
		}
		w.indent()
		if v.CanAddr() {
			// Calling v.Interface on a struct causes the reflect package to
			// copy the entire struct. This is racy with the new Marshaler
			// since we atomically update the XXX_sizecache.
			//
			// Thus, we retrieve a pointer to the struct if possible to avoid
			// a race since v.Interface on the pointer doesn't copy the struct.
			//
			// If v is not addressable, then we are not worried about a race
			// since it implies that the binary Marshaler cannot possibly be
			// mutating this value.
			v = v.Addr()
		}
		if v.Type().Implements(textMarshalerType) {
			text, err := v.Interface().(encoding.TextMarshaler).MarshalText()
			if err != nil {
				return err
			}
			if _, err = w.Write(text); err != nil {
				return err
			}
		} else {
			if v.Kind() == reflect.Ptr {
				v = v.Elem()
			}
			if err := tm.writeStruct(w, v); err != nil {
				return err
			}
		}
		w.unindent()
		if err := w.WriteByte(ket); err != nil {
			return err
		}
	default:
		_, err := fmt.Fprint(w, v.Interface())
		return err
	}
	return nil
}

// equivalent to C's isprint.
func isprint(c byte) bool {
	return c >= 0x20 && c < 0x7f
}

// writeString writes a string in the protocol buffer text format.
// It is similar to strconv.Quote except we don't use Go escape sequences,
// we treat the string as a byte sequence, and we use octal escapes.
// These differences are to maintain interoperability with the other
// languages' implementations of the text format.
func writeString(w *textWriter, s string) error {
	// use WriteByte here to get any needed indent
	if err := w.WriteByte('"'); err != nil {
		return err
	}
	// Loop over the bytes, not the runes.
	for i := 0; i < len(s); i++ {
		var err error
		// Divergence from C++: we don't escape apostrophes.
		// There's no need to escape them, and the C++ parser
		// copes with a naked apostrophe.
		switch c := s[i]; c {
		case '\n':
			_, err = w.w.Write(backslashN)
		case '\r':
			_, err = w.w.Write(backslashR)
		case '\t':
			_, err = w.w.Write(backslashT)
		case '"':
			_, err = w.w.Write(backslashDQ)
		case '\\':
			_, err = w.w.Write(backslashBS)
		default:
			if isprint(c) {
				err = w.w.WriteByte(c)
			} else {
				_, err = fmt.Fprintf(w.w, "\\%03o", c)
			}
		}
		if err != nil {
			return err
		}
	}
	return w.WriteByte('"')
}

func writeUnknownStruct(w *textWriter, data []byte) (err error) {
	if !w.compact {
		if _, err := fmt.Fprintf(w, "/* %d unknown bytes */\n", len(data)); err != nil {
			return err
		}
	}
	b := NewBuffer(data)
	for b.index < len(b.buf) {
		x, err := b.DecodeVarint()
		if err != nil {
			_, ferr := fmt.Fprintf(w, "/* %v */\n", err)
			return ferr
		}
		wire, tag := x&7, x>>3
		if wire == WireEndGroup {
			w.unindent()
			if _, werr := w.Write(endBraceNewline); werr != nil {
				return werr
			}
			continue
		}
		if _, ferr := fmt.Fprint(w, tag); ferr != nil {
			return ferr
		}
		if wire != WireStartGroup {
			if err = w.WriteByte(':'); err != nil {
				return err
			}
		}
		if !w.compact || wire == WireStartGroup {
			if err = w.WriteByte(' '); err != nil {
				return err
			}
		}
		switch wire {
		case WireBytes:
			buf, e := b.DecodeRawBytes(false)
			if e == nil {
				_, err = fmt.Fprintf(w, "%q", buf)
			} else {
				_, err = fmt.Fprintf(w, "/* %v */", e)
			}
		case WireFixed32:
			x, err = b.DecodeFixed32()
			err = writeUnknownInt(w, x, err)
		case WireFixed64:
			x, err = b.DecodeFixed64()
			err = writeUnknownInt(w, x, err)
		case WireStartGroup:
			err = w.WriteByte('{')
			w.indent()
		case WireVarint:
			x, err = b.DecodeVarint()
			err = writeUnknownInt(w, x, err)
		default:
			_, err = fmt.Fprintf(w, "/* unknown wire type %d */", wire)
		}
		if err != nil {
			return err
		}
		if err := w.WriteByte('\n'); err != nil {
			return err
		}
	}
	return nil
}

func writeUnknownInt(w *textWriter, x uint64, err error) error {
	if err == nil {
		_, err = fmt.Fprint(w, x)
	} else {
		_, err = fmt.Fprintf(w, "/* %v */", err)
	}
	return err
}

type int32Slice []int32

func (s int32Slice) Len() int           { return len(s) }
func (s int32Slice) Less(i, j int) bool { return s[i] < s[j] }
func (s int32Slice) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }

// writeExtensions writes all the extensions in pv.
// pv is assumed to be a pointer to a protocol message struct that is extendable.
func (tm *TextMarshaler) writeExtensions(w *textWriter, pv reflect.Value) error {
	emap := extensionMaps[pv.Type().Elem()]
	e := pv.Interface().(Message)

	var m map[int32]Extension
	var mu sync.Locker
	if em, ok := e.(extensionsBytes); ok {
		eb := em.GetExtensions()
		var err error
		m, err = BytesToExtensionsMap(*eb)
		if err != nil {
			return err
		}
		mu = notLocker{}
	} else if _, ok := e.(extendableProto); ok {
		ep, _ := extendable(e)
		m, mu = ep.extensionsRead()
		if m == nil {
			return nil
		}
	}

	// Order the extensions by ID.
	// This isn't strictly necessary, but it will give us
	// canonical output, which will also make testing easier.

	mu.Lock()
	ids := make([]int32, 0, len(m))
	for id := range m {
		ids = append(ids, id)
	}
	sort.Sort(int32Slice(ids))
	mu.Unlock()

	for _, extNum := range ids {
		ext := m[extNum]
		var desc *ExtensionDesc
		if emap != nil {
			desc = emap[extNum]
		}
		if desc == nil {
			// Unknown extension.
			if err := writeUnknownStruct(w, ext.enc); err != nil {
				return err
			}
			continue
		}

		pb, err := GetExtension(e, desc)
		if err != nil {
			return fmt.Errorf("failed getting extension: %v", err)
		}

		// Repeated extensions will appear as a slice.
		if !desc.repeated() {
			if err := tm.writeExtension(w, desc.Name, pb); err != nil {
				return err
			}
		} else {
			v := reflect.ValueOf(pb)
			for i := 0; i < v.Len(); i++ {
				if err := tm.writeExtension(w, desc.Name, v.Index(i).Interface()); err != nil {
					return err
				}
			}
		}
	}
	return nil
}

func (tm *TextMarshaler) writeExtension(w *textWriter, name string, pb interface{}) error {
	if _, err := fmt.Fprintf(w, "[%s]:", name); err != nil {
		return err
	}
	if !w.compact {
		if err := w.WriteByte(' '); err != nil {
			return err
		}
	}
	if err := tm.writeAny(w, reflect.ValueOf(pb), nil); err != nil {
		return err
	}
	if err := w.WriteByte('\n'); err != nil {
		return err
	}
	return nil
}

func (w *textWriter) writeIndent() {
	if !w.complete {
		return
	}
	remain := w.ind * 2
	for remain > 0 {
		n := remain
		if n > len(spaces) {
			n = len(spaces)
		}
		w.w.Write(spaces[:n])
		remain -= n
	}
	w.complete = false
}

// TextMarshaler is a configurable text format marshaler.
type TextMarshaler struct {
	Compact   bool // use compact text format (one line).
	ExpandAny bool // expand google.protobuf.Any messages of known types
}

// Marshal writes a given protocol buffer in text format.
// The only errors returned are from w.
func (tm *TextMarshaler) Marshal(w io.Writer, pb Message) error {
	val := reflect.ValueOf(pb)
	if pb == nil || val.IsNil() {
		w.Write([]byte("<nil>"))
		return nil
	}
	var bw *bufio.Writer
	ww, ok := w.(writer)
	if !ok {
		bw = bufio.NewWriter(w)
		ww = bw
	}
	aw := &textWriter{
		w:        ww,
		complete: true,
		compact:  tm.Compact,
	}

	if etm, ok := pb.(encoding.TextMarshaler); ok {
		text, err := etm.MarshalText()
		if err != nil {
			return err
		}
		if _, err = aw.Write(text); err != nil {
			return err
		}
		if bw != nil {
			return bw.Flush()
		}
		return nil
	}
	// Dereference the received pointer so we don't have outer < and >.
	v := reflect.Indirect(val)
	if err := tm.writeStruct(aw, v); err != nil {
		return err
	}
	if bw != nil {
		return bw.Flush()
	}
	return nil
}

// Text is the same as Marshal, but returns the string directly.
func (tm *TextMarshaler) Text(pb Message) string {
	var buf bytes.Buffer
	tm.Marshal(&buf, pb)
	return buf.String()
}

var (
	defaultTextMarshaler = TextMarshaler{}
	compactTextMarshaler = TextMarshaler{Compact: true}
)

// TODO: consider removing some of the Marshal functions below.

// MarshalText writes a given protocol buffer in text format.
// The only errors returned are from w.
func MarshalText(w io.Writer, pb Message) error { return defaultTextMarshaler.Marshal(w, pb) }

// MarshalTextString is the same as MarshalText, but returns the string directly.
func MarshalTextString(pb Message) string { return defaultTextMarshaler.Text(pb) }

// CompactText writes a given protocol buffer in compact text format (one line).
func CompactText(w io.Writer, pb Message) error { return compactTextMarshaler.Marshal(w, pb) }

// CompactTextString is the same as CompactText, but returns the string directly.
func CompactTextString(pb Message) string { return compactTextMarshaler.Text(pb) }
0707010000065C000081A4000000000000000000000001645E367C000007A8000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/text_gogo.go    // Protocol Buffers for Go with Gadgets
//
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package proto

import (
	"fmt"
	"reflect"
)

func (tm *TextMarshaler) writeEnum(w *textWriter, v reflect.Value, props *Properties) error {
	m, ok := enumStringMaps[props.Enum]
	if !ok {
		if err := tm.writeAny(w, v, props); err != nil {
			return err
		}
	}
	key := int32(0)
	if v.Kind() == reflect.Ptr {
		key = int32(v.Elem().Int())
	} else {
		key = int32(v.Int())
	}
	s, ok := m[key]
	if !ok {
		if err := tm.writeAny(w, v, props); err != nil {
			return err
		}
	}
	_, err := fmt.Fprint(w, s)
	return err
}
0707010000065D000081A4000000000000000000000001645E367C000064C5000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/text_parser.go  // Protocol Buffers for Go with Gadgets
//
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Go support for Protocol Buffers - Google's data interchange format
//
// Copyright 2010 The Go Authors.  All rights reserved.
// https://github.com/golang/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package proto

// Functions for parsing the Text protocol buffer format.
// TODO: message sets.

import (
	"encoding"
	"errors"
	"fmt"
	"reflect"
	"strconv"
	"strings"
	"time"
	"unicode/utf8"
)

// Error string emitted when deserializing Any and fields are already set
const anyRepeatedlyUnpacked = "Any message unpacked multiple times, or %q already set"

type ParseError struct {
	Message string
	Line    int // 1-based line number
	Offset  int // 0-based byte offset from start of input
}

func (p *ParseError) Error() string {
	if p.Line == 1 {
		// show offset only for first line
		return fmt.Sprintf("line 1.%d: %v", p.Offset, p.Message)
	}
	return fmt.Sprintf("line %d: %v", p.Line, p.Message)
}

type token struct {
	value    string
	err      *ParseError
	line     int    // line number
	offset   int    // byte number from start of input, not start of line
	unquoted string // the unquoted version of value, if it was a quoted string
}

func (t *token) String() string {
	if t.err == nil {
		return fmt.Sprintf("%q (line=%d, offset=%d)", t.value, t.line, t.offset)
	}
	return fmt.Sprintf("parse error: %v", t.err)
}

type textParser struct {
	s            string // remaining input
	done         bool   // whether the parsing is finished (success or error)
	backed       bool   // whether back() was called
	offset, line int
	cur          token
}

func newTextParser(s string) *textParser {
	p := new(textParser)
	p.s = s
	p.line = 1
	p.cur.line = 1
	return p
}

func (p *textParser) errorf(format string, a ...interface{}) *ParseError {
	pe := &ParseError{fmt.Sprintf(format, a...), p.cur.line, p.cur.offset}
	p.cur.err = pe
	p.done = true
	return pe
}

// Numbers and identifiers are matched by [-+._A-Za-z0-9]
func isIdentOrNumberChar(c byte) bool {
	switch {
	case 'A' <= c && c <= 'Z', 'a' <= c && c <= 'z':
		return true
	case '0' <= c && c <= '9':
		return true
	}
	switch c {
	case '-', '+', '.', '_':
		return true
	}
	return false
}

func isWhitespace(c byte) bool {
	switch c {
	case ' ', '\t', '\n', '\r':
		return true
	}
	return false
}

func isQuote(c byte) bool {
	switch c {
	case '"', '\'':
		return true
	}
	return false
}

func (p *textParser) skipWhitespace() {
	i := 0
	for i < len(p.s) && (isWhitespace(p.s[i]) || p.s[i] == '#') {
		if p.s[i] == '#' {
			// comment; skip to end of line or input
			for i < len(p.s) && p.s[i] != '\n' {
				i++
			}
			if i == len(p.s) {
				break
			}
		}
		if p.s[i] == '\n' {
			p.line++
		}
		i++
	}
	p.offset += i
	p.s = p.s[i:len(p.s)]
	if len(p.s) == 0 {
		p.done = true
	}
}

func (p *textParser) advance() {
	// Skip whitespace
	p.skipWhitespace()
	if p.done {
		return
	}

	// Start of non-whitespace
	p.cur.err = nil
	p.cur.offset, p.cur.line = p.offset, p.line
	p.cur.unquoted = ""
	switch p.s[0] {
	case '<', '>', '{', '}', ':', '[', ']', ';', ',', '/':
		// Single symbol
		p.cur.value, p.s = p.s[0:1], p.s[1:len(p.s)]
	case '"', '\'':
		// Quoted string
		i := 1
		for i < len(p.s) && p.s[i] != p.s[0] && p.s[i] != '\n' {
			if p.s[i] == '\\' && i+1 < len(p.s) {
				// skip escaped char
				i++
			}
			i++
		}
		if i >= len(p.s) || p.s[i] != p.s[0] {
			p.errorf("unmatched quote")
			return
		}
		unq, err := unquoteC(p.s[1:i], rune(p.s[0]))
		if err != nil {
			p.errorf("invalid quoted string %s: %v", p.s[0:i+1], err)
			return
		}
		p.cur.value, p.s = p.s[0:i+1], p.s[i+1:len(p.s)]
		p.cur.unquoted = unq
	default:
		i := 0
		for i < len(p.s) && isIdentOrNumberChar(p.s[i]) {
			i++
		}
		if i == 0 {
			p.errorf("unexpected byte %#x", p.s[0])
			return
		}
		p.cur.value, p.s = p.s[0:i], p.s[i:len(p.s)]
	}
	p.offset += len(p.cur.value)
}

var (
	errBadUTF8 = errors.New("proto: bad UTF-8")
)

func unquoteC(s string, quote rune) (string, error) {
	// This is based on C++'s tokenizer.cc.
	// Despite its name, this is *not* parsing C syntax.
	// For instance, "\0" is an invalid quoted string.

	// Avoid allocation in trivial cases.
	simple := true
	for _, r := range s {
		if r == '\\' || r == quote {
			simple = false
			break
		}
	}
	if simple {
		return s, nil
	}

	buf := make([]byte, 0, 3*len(s)/2)
	for len(s) > 0 {
		r, n := utf8.DecodeRuneInString(s)
		if r == utf8.RuneError && n == 1 {
			return "", errBadUTF8
		}
		s = s[n:]
		if r != '\\' {
			if r < utf8.RuneSelf {
				buf = append(buf, byte(r))
			} else {
				buf = append(buf, string(r)...)
			}
			continue
		}

		ch, tail, err := unescape(s)
		if err != nil {
			return "", err
		}
		buf = append(buf, ch...)
		s = tail
	}
	return string(buf), nil
}

func unescape(s string) (ch string, tail string, err error) {
	r, n := utf8.DecodeRuneInString(s)
	if r == utf8.RuneError && n == 1 {
		return "", "", errBadUTF8
	}
	s = s[n:]
	switch r {
	case 'a':
		return "\a", s, nil
	case 'b':
		return "\b", s, nil
	case 'f':
		return "\f", s, nil
	case 'n':
		return "\n", s, nil
	case 'r':
		return "\r", s, nil
	case 't':
		return "\t", s, nil
	case 'v':
		return "\v", s, nil
	case '?':
		return "?", s, nil // trigraph workaround
	case '\'', '"', '\\':
		return string(r), s, nil
	case '0', '1', '2', '3', '4', '5', '6', '7':
		if len(s) < 2 {
			return "", "", fmt.Errorf(`\%c requires 2 following digits`, r)
		}
		ss := string(r) + s[:2]
		s = s[2:]
		i, err := strconv.ParseUint(ss, 8, 8)
		if err != nil {
			return "", "", fmt.Errorf(`\%s contains non-octal digits`, ss)
		}
		return string([]byte{byte(i)}), s, nil
	case 'x', 'X', 'u', 'U':
		var n int
		switch r {
		case 'x', 'X':
			n = 2
		case 'u':
			n = 4
		case 'U':
			n = 8
		}
		if len(s) < n {
			return "", "", fmt.Errorf(`\%c requires %d following digits`, r, n)
		}
		ss := s[:n]
		s = s[n:]
		i, err := strconv.ParseUint(ss, 16, 64)
		if err != nil {
			return "", "", fmt.Errorf(`\%c%s contains non-hexadecimal digits`, r, ss)
		}
		if r == 'x' || r == 'X' {
			return string([]byte{byte(i)}), s, nil
		}
		if i > utf8.MaxRune {
			return "", "", fmt.Errorf(`\%c%s is not a valid Unicode code point`, r, ss)
		}
		return string(rune(i)), s, nil
	}
	return "", "", fmt.Errorf(`unknown escape \%c`, r)
}

// Back off the parser by one token. Can only be done between calls to next().
// It makes the next advance() a no-op.
func (p *textParser) back() { p.backed = true }

// Advances the parser and returns the new current token.
func (p *textParser) next() *token {
	if p.backed || p.done {
		p.backed = false
		return &p.cur
	}
	p.advance()
	if p.done {
		p.cur.value = ""
	} else if len(p.cur.value) > 0 && isQuote(p.cur.value[0]) {
		// Look for multiple quoted strings separated by whitespace,
		// and concatenate them.
		cat := p.cur
		for {
			p.skipWhitespace()
			if p.done || !isQuote(p.s[0]) {
				break
			}
			p.advance()
			if p.cur.err != nil {
				return &p.cur
			}
			cat.value += " " + p.cur.value
			cat.unquoted += p.cur.unquoted
		}
		p.done = false // parser may have seen EOF, but we want to return cat
		p.cur = cat
	}
	return &p.cur
}

func (p *textParser) consumeToken(s string) error {
	tok := p.next()
	if tok.err != nil {
		return tok.err
	}
	if tok.value != s {
		p.back()
		return p.errorf("expected %q, found %q", s, tok.value)
	}
	return nil
}

// Return a RequiredNotSetError indicating which required field was not set.
func (p *textParser) missingRequiredFieldError(sv reflect.Value) *RequiredNotSetError {
	st := sv.Type()
	sprops := GetProperties(st)
	for i := 0; i < st.NumField(); i++ {
		if !isNil(sv.Field(i)) {
			continue
		}

		props := sprops.Prop[i]
		if props.Required {
			return &RequiredNotSetError{fmt.Sprintf("%v.%v", st, props.OrigName)}
		}
	}
	return &RequiredNotSetError{fmt.Sprintf("%v.<unknown field name>", st)} // should not happen
}

// Returns the index in the struct for the named field, as well as the parsed tag properties.
func structFieldByName(sprops *StructProperties, name string) (int, *Properties, bool) {
	i, ok := sprops.decoderOrigNames[name]
	if ok {
		return i, sprops.Prop[i], true
	}
	return -1, nil, false
}

// Consume a ':' from the input stream (if the next token is a colon),
// returning an error if a colon is needed but not present.
func (p *textParser) checkForColon(props *Properties, typ reflect.Type) *ParseError {
	tok := p.next()
	if tok.err != nil {
		return tok.err
	}
	if tok.value != ":" {
		// Colon is optional when the field is a group or message.
		needColon := true
		switch props.Wire {
		case "group":
			needColon = false
		case "bytes":
			// A "bytes" field is either a message, a string, or a repeated field;
			// those three become *T, *string and []T respectively, so we can check for
			// this field being a pointer to a non-string.
			if typ.Kind() == reflect.Ptr {
				// *T or *string
				if typ.Elem().Kind() == reflect.String {
					break
				}
			} else if typ.Kind() == reflect.Slice {
				// []T or []*T
				if typ.Elem().Kind() != reflect.Ptr {
					break
				}
			} else if typ.Kind() == reflect.String {
				// The proto3 exception is for a string field,
				// which requires a colon.
				break
			}
			needColon = false
		}
		if needColon {
			return p.errorf("expected ':', found %q", tok.value)
		}
		p.back()
	}
	return nil
}

func (p *textParser) readStruct(sv reflect.Value, terminator string) error {
	st := sv.Type()
	sprops := GetProperties(st)
	reqCount := sprops.reqCount
	var reqFieldErr error
	fieldSet := make(map[string]bool)
	// A struct is a sequence of "name: value", terminated by one of
	// '>' or '}', or the end of the input.  A name may also be
	// "[extension]" or "[type/url]".
	//
	// The whole struct can also be an expanded Any message, like:
	// [type/url] < ... struct contents ... >
	for {
		tok := p.next()
		if tok.err != nil {
			return tok.err
		}
		if tok.value == terminator {
			break
		}
		if tok.value == "[" {
			// Looks like an extension or an Any.
			//
			// TODO: Check whether we need to handle
			// namespace rooted names (e.g. ".something.Foo").
			extName, err := p.consumeExtName()
			if err != nil {
				return err
			}

			if s := strings.LastIndex(extName, "/"); s >= 0 {
				// If it contains a slash, it's an Any type URL.
				messageName := extName[s+1:]
				mt := MessageType(messageName)
				if mt == nil {
					return p.errorf("unrecognized message %q in google.protobuf.Any", messageName)
				}
				tok = p.next()
				if tok.err != nil {
					return tok.err
				}
				// consume an optional colon
				if tok.value == ":" {
					tok = p.next()
					if tok.err != nil {
						return tok.err
					}
				}
				var terminator string
				switch tok.value {
				case "<":
					terminator = ">"
				case "{":
					terminator = "}"
				default:
					return p.errorf("expected '{' or '<', found %q", tok.value)
				}
				v := reflect.New(mt.Elem())
				if pe := p.readStruct(v.Elem(), terminator); pe != nil {
					return pe
				}
				b, err := Marshal(v.Interface().(Message))
				if err != nil {
					return p.errorf("failed to marshal message of type %q: %v", messageName, err)
				}
				if fieldSet["type_url"] {
					return p.errorf(anyRepeatedlyUnpacked, "type_url")
				}
				if fieldSet["value"] {
					return p.errorf(anyRepeatedlyUnpacked, "value")
				}
				sv.FieldByName("TypeUrl").SetString(extName)
				sv.FieldByName("Value").SetBytes(b)
				fieldSet["type_url"] = true
				fieldSet["value"] = true
				continue
			}

			var desc *ExtensionDesc
			// This could be faster, but it's functional.
			// TODO: Do something smarter than a linear scan.
			for _, d := range RegisteredExtensions(reflect.New(st).Interface().(Message)) {
				if d.Name == extName {
					desc = d
					break
				}
			}
			if desc == nil {
				return p.errorf("unrecognized extension %q", extName)
			}

			props := &Properties{}
			props.Parse(desc.Tag)

			typ := reflect.TypeOf(desc.ExtensionType)
			if err := p.checkForColon(props, typ); err != nil {
				return err
			}

			rep := desc.repeated()

			// Read the extension structure, and set it in
			// the value we're constructing.
			var ext reflect.Value
			if !rep {
				ext = reflect.New(typ).Elem()
			} else {
				ext = reflect.New(typ.Elem()).Elem()
			}
			if err := p.readAny(ext, props); err != nil {
				if _, ok := err.(*RequiredNotSetError); !ok {
					return err
				}
				reqFieldErr = err
			}
			ep := sv.Addr().Interface().(Message)
			if !rep {
				SetExtension(ep, desc, ext.Interface())
			} else {
				old, err := GetExtension(ep, desc)
				var sl reflect.Value
				if err == nil {
					sl = reflect.ValueOf(old) // existing slice
				} else {
					sl = reflect.MakeSlice(typ, 0, 1)
				}
				sl = reflect.Append(sl, ext)
				SetExtension(ep, desc, sl.Interface())
			}
			if err := p.consumeOptionalSeparator(); err != nil {
				return err
			}
			continue
		}

		// This is a normal, non-extension field.
		name := tok.value
		var dst reflect.Value
		fi, props, ok := structFieldByName(sprops, name)
		if ok {
			dst = sv.Field(fi)
		} else if oop, ok := sprops.OneofTypes[name]; ok {
			// It is a oneof.
			props = oop.Prop
			nv := reflect.New(oop.Type.Elem())
			dst = nv.Elem().Field(0)
			field := sv.Field(oop.Field)
			if !field.IsNil() {
				return p.errorf("field '%s' would overwrite already parsed oneof '%s'", name, sv.Type().Field(oop.Field).Name)
			}
			field.Set(nv)
		}
		if !dst.IsValid() {
			return p.errorf("unknown field name %q in %v", name, st)
		}

		if dst.Kind() == reflect.Map {
			// Consume any colon.
			if err := p.checkForColon(props, dst.Type()); err != nil {
				return err
			}

			// Construct the map if it doesn't already exist.
			if dst.IsNil() {
				dst.Set(reflect.MakeMap(dst.Type()))
			}
			key := reflect.New(dst.Type().Key()).Elem()
			val := reflect.New(dst.Type().Elem()).Elem()

			// The map entry should be this sequence of tokens:
			//	< key : KEY value : VALUE >
			// However, implementations may omit key or value, and technically
			// we should support them in any order.  See b/28924776 for a time
			// this went wrong.

			tok := p.next()
			var terminator string
			switch tok.value {
			case "<":
				terminator = ">"
			case "{":
				terminator = "}"
			default:
				return p.errorf("expected '{' or '<', found %q", tok.value)
			}
			for {
				tok := p.next()
				if tok.err != nil {
					return tok.err
				}
				if tok.value == terminator {
					break
				}
				switch tok.value {
				case "key":
					if err := p.consumeToken(":"); err != nil {
						return err
					}
					if err := p.readAny(key, props.MapKeyProp); err != nil {
						return err
					}
					if err := p.consumeOptionalSeparator(); err != nil {
						return err
					}
				case "value":
					if err := p.checkForColon(props.MapValProp, dst.Type().Elem()); err != nil {
						return err
					}
					if err := p.readAny(val, props.MapValProp); err != nil {
						return err
					}
					if err := p.consumeOptionalSeparator(); err != nil {
						return err
					}
				default:
					p.back()
					return p.errorf(`expected "key", "value", or %q, found %q`, terminator, tok.value)
				}
			}

			dst.SetMapIndex(key, val)
			continue
		}

		// Check that it's not already set if it's not a repeated field.
		if !props.Repeated && fieldSet[name] {
			return p.errorf("non-repeated field %q was repeated", name)
		}

		if err := p.checkForColon(props, dst.Type()); err != nil {
			return err
		}

		// Parse into the field.
		fieldSet[name] = true
		if err := p.readAny(dst, props); err != nil {
			if _, ok := err.(*RequiredNotSetError); !ok {
				return err
			}
			reqFieldErr = err
		}
		if props.Required {
			reqCount--
		}

		if err := p.consumeOptionalSeparator(); err != nil {
			return err
		}

	}

	if reqCount > 0 {
		return p.missingRequiredFieldError(sv)
	}
	return reqFieldErr
}

// consumeExtName consumes extension name or expanded Any type URL and the
// following ']'. It returns the name or URL consumed.
func (p *textParser) consumeExtName() (string, error) {
	tok := p.next()
	if tok.err != nil {
		return "", tok.err
	}

	// If extension name or type url is quoted, it's a single token.
	if len(tok.value) > 2 && isQuote(tok.value[0]) && tok.value[len(tok.value)-1] == tok.value[0] {
		name, err := unquoteC(tok.value[1:len(tok.value)-1], rune(tok.value[0]))
		if err != nil {
			return "", err
		}
		return name, p.consumeToken("]")
	}

	// Consume everything up to "]"
	var parts []string
	for tok.value != "]" {
		parts = append(parts, tok.value)
		tok = p.next()
		if tok.err != nil {
			return "", p.errorf("unrecognized type_url or extension name: %s", tok.err)
		}
		if p.done && tok.value != "]" {
			return "", p.errorf("unclosed type_url or extension name")
		}
	}
	return strings.Join(parts, ""), nil
}

// consumeOptionalSeparator consumes an optional semicolon or comma.
// It is used in readStruct to provide backward compatibility.
func (p *textParser) consumeOptionalSeparator() error {
	tok := p.next()
	if tok.err != nil {
		return tok.err
	}
	if tok.value != ";" && tok.value != "," {
		p.back()
	}
	return nil
}

func (p *textParser) readAny(v reflect.Value, props *Properties) error {
	tok := p.next()
	if tok.err != nil {
		return tok.err
	}
	if tok.value == "" {
		return p.errorf("unexpected EOF")
	}
	if len(props.CustomType) > 0 {
		if props.Repeated {
			t := reflect.TypeOf(v.Interface())
			if t.Kind() == reflect.Slice {
				tc := reflect.TypeOf(new(Marshaler))
				ok := t.Elem().Implements(tc.Elem())
				if ok {
					fv := v
					flen := fv.Len()
					if flen == fv.Cap() {
						nav := reflect.MakeSlice(v.Type(), flen, 2*flen+1)
						reflect.Copy(nav, fv)
						fv.Set(nav)
					}
					fv.SetLen(flen + 1)

					// Read one.
					p.back()
					return p.readAny(fv.Index(flen), props)
				}
			}
		}
		if reflect.TypeOf(v.Interface()).Kind() == reflect.Ptr {
			custom := reflect.New(props.ctype.Elem()).Interface().(Unmarshaler)
			err := custom.Unmarshal([]byte(tok.unquoted))
			if err != nil {
				return p.errorf("%v %v: %v", err, v.Type(), tok.value)
			}
			v.Set(reflect.ValueOf(custom))
		} else {
			custom := reflect.New(reflect.TypeOf(v.Interface())).Interface().(Unmarshaler)
			err := custom.Unmarshal([]byte(tok.unquoted))
			if err != nil {
				return p.errorf("%v %v: %v", err, v.Type(), tok.value)
			}
			v.Set(reflect.Indirect(reflect.ValueOf(custom)))
		}
		return nil
	}
	if props.StdTime {
		fv := v
		p.back()
		props.StdTime = false
		tproto := &timestamp{}
		err := p.readAny(reflect.ValueOf(tproto).Elem(), props)
		props.StdTime = true
		if err != nil {
			return err
		}
		tim, err := timestampFromProto(tproto)
		if err != nil {
			return err
		}
		if props.Repeated {
			t := reflect.TypeOf(v.Interface())
			if t.Kind() == reflect.Slice {
				if t.Elem().Kind() == reflect.Ptr {
					ts := fv.Interface().([]*time.Time)
					ts = append(ts, &tim)
					fv.Set(reflect.ValueOf(ts))
					return nil
				} else {
					ts := fv.Interface().([]time.Time)
					ts = append(ts, tim)
					fv.Set(reflect.ValueOf(ts))
					return nil
				}
			}
		}
		if reflect.TypeOf(v.Interface()).Kind() == reflect.Ptr {
			v.Set(reflect.ValueOf(&tim))
		} else {
			v.Set(reflect.Indirect(reflect.ValueOf(&tim)))
		}
		return nil
	}
	if props.StdDuration {
		fv := v
		p.back()
		props.StdDuration = false
		dproto := &duration{}
		err := p.readAny(reflect.ValueOf(dproto).Elem(), props)
		props.StdDuration = true
		if err != nil {
			return err
		}
		dur, err := durationFromProto(dproto)
		if err != nil {
			return err
		}
		if props.Repeated {
			t := reflect.TypeOf(v.Interface())
			if t.Kind() == reflect.Slice {
				if t.Elem().Kind() == reflect.Ptr {
					ds := fv.Interface().([]*time.Duration)
					ds = append(ds, &dur)
					fv.Set(reflect.ValueOf(ds))
					return nil
				} else {
					ds := fv.Interface().([]time.Duration)
					ds = append(ds, dur)
					fv.Set(reflect.ValueOf(ds))
					return nil
				}
			}
		}
		if reflect.TypeOf(v.Interface()).Kind() == reflect.Ptr {
			v.Set(reflect.ValueOf(&dur))
		} else {
			v.Set(reflect.Indirect(reflect.ValueOf(&dur)))
		}
		return nil
	}
	switch fv := v; fv.Kind() {
	case reflect.Slice:
		at := v.Type()
		if at.Elem().Kind() == reflect.Uint8 {
			// Special case for []byte
			if tok.value[0] != '"' && tok.value[0] != '\'' {
				// Deliberately written out here, as the error after
				// this switch statement would write "invalid []byte: ...",
				// which is not as user-friendly.
				return p.errorf("invalid string: %v", tok.value)
			}
			bytes := []byte(tok.unquoted)
			fv.Set(reflect.ValueOf(bytes))
			return nil
		}
		// Repeated field.
		if tok.value == "[" {
			// Repeated field with list notation, like [1,2,3].
			for {
				fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem()))
				err := p.readAny(fv.Index(fv.Len()-1), props)
				if err != nil {
					return err
				}
				ntok := p.next()
				if ntok.err != nil {
					return ntok.err
				}
				if ntok.value == "]" {
					break
				}
				if ntok.value != "," {
					return p.errorf("Expected ']' or ',' found %q", ntok.value)
				}
			}
			return nil
		}
		// One value of the repeated field.
		p.back()
		fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem()))
		return p.readAny(fv.Index(fv.Len()-1), props)
	case reflect.Bool:
		// true/1/t/True or false/f/0/False.
		switch tok.value {
		case "true", "1", "t", "True":
			fv.SetBool(true)
			return nil
		case "false", "0", "f", "False":
			fv.SetBool(false)
			return nil
		}
	case reflect.Float32, reflect.Float64:
		v := tok.value
		// Ignore 'f' for compatibility with output generated by C++, but don't
		// remove 'f' when the value is "-inf" or "inf".
		if strings.HasSuffix(v, "f") && tok.value != "-inf" && tok.value != "inf" {
			v = v[:len(v)-1]
		}
		if f, err := strconv.ParseFloat(v, fv.Type().Bits()); err == nil {
			fv.SetFloat(f)
			return nil
		}
	case reflect.Int8:
		if x, err := strconv.ParseInt(tok.value, 0, 8); err == nil {
			fv.SetInt(x)
			return nil
		}
	case reflect.Int16:
		if x, err := strconv.ParseInt(tok.value, 0, 16); err == nil {
			fv.SetInt(x)
			return nil
		}
	case reflect.Int32:
		if x, err := strconv.ParseInt(tok.value, 0, 32); err == nil {
			fv.SetInt(x)
			return nil
		}

		if len(props.Enum) == 0 {
			break
		}
		m, ok := enumValueMaps[props.Enum]
		if !ok {
			break
		}
		x, ok := m[tok.value]
		if !ok {
			break
		}
		fv.SetInt(int64(x))
		return nil
	case reflect.Int64:
		if x, err := strconv.ParseInt(tok.value, 0, 64); err == nil {
			fv.SetInt(x)
			return nil
		}

	case reflect.Ptr:
		// A basic field (indirected through pointer), or a repeated message/group
		p.back()
		fv.Set(reflect.New(fv.Type().Elem()))
		return p.readAny(fv.Elem(), props)
	case reflect.String:
		if tok.value[0] == '"' || tok.value[0] == '\'' {
			fv.SetString(tok.unquoted)
			return nil
		}
	case reflect.Struct:
		var terminator string
		switch tok.value {
		case "{":
			terminator = "}"
		case "<":
			terminator = ">"
		default:
			return p.errorf("expected '{' or '<', found %q", tok.value)
		}
		// TODO: Handle nested messages which implement encoding.TextUnmarshaler.
		return p.readStruct(fv, terminator)
	case reflect.Uint8:
		if x, err := strconv.ParseUint(tok.value, 0, 8); err == nil {
			fv.SetUint(x)
			return nil
		}
	case reflect.Uint16:
		if x, err := strconv.ParseUint(tok.value, 0, 16); err == nil {
			fv.SetUint(x)
			return nil
		}
	case reflect.Uint32:
		if x, err := strconv.ParseUint(tok.value, 0, 32); err == nil {
			fv.SetUint(uint64(x))
			return nil
		}
	case reflect.Uint64:
		if x, err := strconv.ParseUint(tok.value, 0, 64); err == nil {
			fv.SetUint(x)
			return nil
		}
	}
	return p.errorf("invalid %v: %v", v.Type(), tok.value)
}

// UnmarshalText reads a protocol buffer in Text format. UnmarshalText resets pb
// before starting to unmarshal, so any existing data in pb is always removed.
// If a required field is not set and no other error occurs,
// UnmarshalText returns *RequiredNotSetError.
func UnmarshalText(s string, pb Message) error {
	if um, ok := pb.(encoding.TextUnmarshaler); ok {
		return um.UnmarshalText([]byte(s))
	}
	pb.Reset()
	v := reflect.ValueOf(pb)
	return newTextParser(s).readStruct(v.Elem(), "")
}
   0707010000065E000081A4000000000000000000000001645E367C000010DA000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/timestamp.go    // Go support for Protocol Buffers - Google's data interchange format
//
// Copyright 2016 The Go Authors.  All rights reserved.
// https://github.com/golang/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package proto

// This file implements operations on google.protobuf.Timestamp.

import (
	"errors"
	"fmt"
	"time"
)

const (
	// Seconds field of the earliest valid Timestamp.
	// This is time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC).Unix().
	minValidSeconds = -62135596800
	// Seconds field just after the latest valid Timestamp.
	// This is time.Date(10000, 1, 1, 0, 0, 0, 0, time.UTC).Unix().
	maxValidSeconds = 253402300800
)

// validateTimestamp determines whether a Timestamp is valid.
// A valid timestamp represents a time in the range
// [0001-01-01, 10000-01-01) and has a Nanos field
// in the range [0, 1e9).
//
// If the Timestamp is valid, validateTimestamp returns nil.
// Otherwise, it returns an error that describes
// the problem.
//
// Every valid Timestamp can be represented by a time.Time, but the converse is not true.
func validateTimestamp(ts *timestamp) error {
	if ts == nil {
		return errors.New("timestamp: nil Timestamp")
	}
	if ts.Seconds < minValidSeconds {
		return fmt.Errorf("timestamp: %#v before 0001-01-01", ts)
	}
	if ts.Seconds >= maxValidSeconds {
		return fmt.Errorf("timestamp: %#v after 10000-01-01", ts)
	}
	if ts.Nanos < 0 || ts.Nanos >= 1e9 {
		return fmt.Errorf("timestamp: %#v: nanos not in range [0, 1e9)", ts)
	}
	return nil
}

// TimestampFromProto converts a google.protobuf.Timestamp proto to a time.Time.
// It returns an error if the argument is invalid.
//
// Unlike most Go functions, if Timestamp returns an error, the first return value
// is not the zero time.Time. Instead, it is the value obtained from the
// time.Unix function when passed the contents of the Timestamp, in the UTC
// locale. This may or may not be a meaningful time; many invalid Timestamps
// do map to valid time.Times.
//
// A nil Timestamp returns an error. The first return value in that case is
// undefined.
func timestampFromProto(ts *timestamp) (time.Time, error) {
	// Don't return the zero value on error, because corresponds to a valid
	// timestamp. Instead return whatever time.Unix gives us.
	var t time.Time
	if ts == nil {
		t = time.Unix(0, 0).UTC() // treat nil like the empty Timestamp
	} else {
		t = time.Unix(ts.Seconds, int64(ts.Nanos)).UTC()
	}
	return t, validateTimestamp(ts)
}

// TimestampProto converts the time.Time to a google.protobuf.Timestamp proto.
// It returns an error if the resulting Timestamp is invalid.
func timestampProto(t time.Time) (*timestamp, error) {
	seconds := t.Unix()
	nanos := int32(t.Sub(time.Unix(seconds, 0)))
	ts := &timestamp{
		Seconds: seconds,
		Nanos:   nanos,
	}
	if err := validateTimestamp(ts); err != nil {
		return nil, err
	}
	return ts, nil
}
  0707010000065F000081A4000000000000000000000001645E367C000007C2000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/timestamp_gogo.go   // Protocol Buffers for Go with Gadgets
//
// Copyright (c) 2016, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package proto

import (
	"reflect"
	"time"
)

var timeType = reflect.TypeOf((*time.Time)(nil)).Elem()

type timestamp struct {
	Seconds int64 `protobuf:"varint,1,opt,name=seconds,proto3" json:"seconds,omitempty"`
	Nanos   int32 `protobuf:"varint,2,opt,name=nanos,proto3" json:"nanos,omitempty"`
}

func (m *timestamp) Reset()       { *m = timestamp{} }
func (*timestamp) ProtoMessage()  {}
func (*timestamp) String() string { return "timestamp<string>" }

func init() {
	RegisterType((*timestamp)(nil), "gogo.protobuf.proto.timestamp")
}
  07070100000660000081A4000000000000000000000001645E367C0000C1D6000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/wrappers.go // Protocol Buffers for Go with Gadgets
//
// Copyright (c) 2018, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package proto

import (
	"io"
	"reflect"
)

func makeStdDoubleValueMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			t := ptr.asPointerTo(u.typ).Interface().(*float64)
			v := &float64Value{*t}
			siz := Size(v)
			return tagsize + SizeVarint(uint64(siz)) + siz
		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			t := ptr.asPointerTo(u.typ).Interface().(*float64)
			v := &float64Value{*t}
			buf, err := Marshal(v)
			if err != nil {
				return nil, err
			}
			b = appendVarint(b, wiretag)
			b = appendVarint(b, uint64(len(buf)))
			b = append(b, buf...)
			return b, nil
		}
}

func makeStdDoubleValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			if ptr.isNil() {
				return 0
			}
			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*float64)
			v := &float64Value{*t}
			siz := Size(v)
			return tagsize + SizeVarint(uint64(siz)) + siz
		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			if ptr.isNil() {
				return b, nil
			}
			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*float64)
			v := &float64Value{*t}
			buf, err := Marshal(v)
			if err != nil {
				return nil, err
			}
			b = appendVarint(b, wiretag)
			b = appendVarint(b, uint64(len(buf)))
			b = append(b, buf...)
			return b, nil
		}
}

func makeStdDoubleValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			s := ptr.getSlice(u.typ)
			n := 0
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(float64)
				v := &float64Value{t}
				siz := Size(v)
				n += siz + SizeVarint(uint64(siz)) + tagsize
			}
			return n
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			s := ptr.getSlice(u.typ)
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(float64)
				v := &float64Value{t}
				siz := Size(v)
				buf, err := Marshal(v)
				if err != nil {
					return nil, err
				}
				b = appendVarint(b, wiretag)
				b = appendVarint(b, uint64(siz))
				b = append(b, buf...)
			}

			return b, nil
		}
}

func makeStdDoubleValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			s := ptr.getSlice(reflect.PtrTo(u.typ))
			n := 0
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(*float64)
				v := &float64Value{*t}
				siz := Size(v)
				n += siz + SizeVarint(uint64(siz)) + tagsize
			}
			return n
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			s := ptr.getSlice(reflect.PtrTo(u.typ))
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(*float64)
				v := &float64Value{*t}
				siz := Size(v)
				buf, err := Marshal(v)
				if err != nil {
					return nil, err
				}
				b = appendVarint(b, wiretag)
				b = appendVarint(b, uint64(siz))
				b = append(b, buf...)
			}

			return b, nil
		}
}

func makeStdDoubleValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &float64Value{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		s := f.asPointerTo(sub.typ).Elem()
		s.Set(reflect.ValueOf(m.Value))
		return b[x:], nil
	}
}

func makeStdDoubleValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &float64Value{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
		s.Set(reflect.ValueOf(&m.Value))
		return b[x:], nil
	}
}

func makeStdDoubleValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &float64Value{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		slice := f.getSlice(reflect.PtrTo(sub.typ))
		newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))
		slice.Set(newSlice)
		return b[x:], nil
	}
}

func makeStdDoubleValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &float64Value{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		slice := f.getSlice(sub.typ)
		newSlice := reflect.Append(slice, reflect.ValueOf(m.Value))
		slice.Set(newSlice)
		return b[x:], nil
	}
}

func makeStdFloatValueMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			t := ptr.asPointerTo(u.typ).Interface().(*float32)
			v := &float32Value{*t}
			siz := Size(v)
			return tagsize + SizeVarint(uint64(siz)) + siz
		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			t := ptr.asPointerTo(u.typ).Interface().(*float32)
			v := &float32Value{*t}
			buf, err := Marshal(v)
			if err != nil {
				return nil, err
			}
			b = appendVarint(b, wiretag)
			b = appendVarint(b, uint64(len(buf)))
			b = append(b, buf...)
			return b, nil
		}
}

func makeStdFloatValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			if ptr.isNil() {
				return 0
			}
			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*float32)
			v := &float32Value{*t}
			siz := Size(v)
			return tagsize + SizeVarint(uint64(siz)) + siz
		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			if ptr.isNil() {
				return b, nil
			}
			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*float32)
			v := &float32Value{*t}
			buf, err := Marshal(v)
			if err != nil {
				return nil, err
			}
			b = appendVarint(b, wiretag)
			b = appendVarint(b, uint64(len(buf)))
			b = append(b, buf...)
			return b, nil
		}
}

func makeStdFloatValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			s := ptr.getSlice(u.typ)
			n := 0
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(float32)
				v := &float32Value{t}
				siz := Size(v)
				n += siz + SizeVarint(uint64(siz)) + tagsize
			}
			return n
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			s := ptr.getSlice(u.typ)
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(float32)
				v := &float32Value{t}
				siz := Size(v)
				buf, err := Marshal(v)
				if err != nil {
					return nil, err
				}
				b = appendVarint(b, wiretag)
				b = appendVarint(b, uint64(siz))
				b = append(b, buf...)
			}

			return b, nil
		}
}

func makeStdFloatValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			s := ptr.getSlice(reflect.PtrTo(u.typ))
			n := 0
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(*float32)
				v := &float32Value{*t}
				siz := Size(v)
				n += siz + SizeVarint(uint64(siz)) + tagsize
			}
			return n
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			s := ptr.getSlice(reflect.PtrTo(u.typ))
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(*float32)
				v := &float32Value{*t}
				siz := Size(v)
				buf, err := Marshal(v)
				if err != nil {
					return nil, err
				}
				b = appendVarint(b, wiretag)
				b = appendVarint(b, uint64(siz))
				b = append(b, buf...)
			}

			return b, nil
		}
}

func makeStdFloatValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &float32Value{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		s := f.asPointerTo(sub.typ).Elem()
		s.Set(reflect.ValueOf(m.Value))
		return b[x:], nil
	}
}

func makeStdFloatValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &float32Value{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
		s.Set(reflect.ValueOf(&m.Value))
		return b[x:], nil
	}
}

func makeStdFloatValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &float32Value{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		slice := f.getSlice(reflect.PtrTo(sub.typ))
		newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))
		slice.Set(newSlice)
		return b[x:], nil
	}
}

func makeStdFloatValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &float32Value{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		slice := f.getSlice(sub.typ)
		newSlice := reflect.Append(slice, reflect.ValueOf(m.Value))
		slice.Set(newSlice)
		return b[x:], nil
	}
}

func makeStdInt64ValueMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			t := ptr.asPointerTo(u.typ).Interface().(*int64)
			v := &int64Value{*t}
			siz := Size(v)
			return tagsize + SizeVarint(uint64(siz)) + siz
		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			t := ptr.asPointerTo(u.typ).Interface().(*int64)
			v := &int64Value{*t}
			buf, err := Marshal(v)
			if err != nil {
				return nil, err
			}
			b = appendVarint(b, wiretag)
			b = appendVarint(b, uint64(len(buf)))
			b = append(b, buf...)
			return b, nil
		}
}

func makeStdInt64ValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			if ptr.isNil() {
				return 0
			}
			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*int64)
			v := &int64Value{*t}
			siz := Size(v)
			return tagsize + SizeVarint(uint64(siz)) + siz
		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			if ptr.isNil() {
				return b, nil
			}
			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*int64)
			v := &int64Value{*t}
			buf, err := Marshal(v)
			if err != nil {
				return nil, err
			}
			b = appendVarint(b, wiretag)
			b = appendVarint(b, uint64(len(buf)))
			b = append(b, buf...)
			return b, nil
		}
}

func makeStdInt64ValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			s := ptr.getSlice(u.typ)
			n := 0
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(int64)
				v := &int64Value{t}
				siz := Size(v)
				n += siz + SizeVarint(uint64(siz)) + tagsize
			}
			return n
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			s := ptr.getSlice(u.typ)
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(int64)
				v := &int64Value{t}
				siz := Size(v)
				buf, err := Marshal(v)
				if err != nil {
					return nil, err
				}
				b = appendVarint(b, wiretag)
				b = appendVarint(b, uint64(siz))
				b = append(b, buf...)
			}

			return b, nil
		}
}

func makeStdInt64ValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			s := ptr.getSlice(reflect.PtrTo(u.typ))
			n := 0
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(*int64)
				v := &int64Value{*t}
				siz := Size(v)
				n += siz + SizeVarint(uint64(siz)) + tagsize
			}
			return n
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			s := ptr.getSlice(reflect.PtrTo(u.typ))
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(*int64)
				v := &int64Value{*t}
				siz := Size(v)
				buf, err := Marshal(v)
				if err != nil {
					return nil, err
				}
				b = appendVarint(b, wiretag)
				b = appendVarint(b, uint64(siz))
				b = append(b, buf...)
			}

			return b, nil
		}
}

func makeStdInt64ValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &int64Value{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		s := f.asPointerTo(sub.typ).Elem()
		s.Set(reflect.ValueOf(m.Value))
		return b[x:], nil
	}
}

func makeStdInt64ValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &int64Value{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
		s.Set(reflect.ValueOf(&m.Value))
		return b[x:], nil
	}
}

func makeStdInt64ValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &int64Value{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		slice := f.getSlice(reflect.PtrTo(sub.typ))
		newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))
		slice.Set(newSlice)
		return b[x:], nil
	}
}

func makeStdInt64ValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &int64Value{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		slice := f.getSlice(sub.typ)
		newSlice := reflect.Append(slice, reflect.ValueOf(m.Value))
		slice.Set(newSlice)
		return b[x:], nil
	}
}

func makeStdUInt64ValueMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			t := ptr.asPointerTo(u.typ).Interface().(*uint64)
			v := &uint64Value{*t}
			siz := Size(v)
			return tagsize + SizeVarint(uint64(siz)) + siz
		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			t := ptr.asPointerTo(u.typ).Interface().(*uint64)
			v := &uint64Value{*t}
			buf, err := Marshal(v)
			if err != nil {
				return nil, err
			}
			b = appendVarint(b, wiretag)
			b = appendVarint(b, uint64(len(buf)))
			b = append(b, buf...)
			return b, nil
		}
}

func makeStdUInt64ValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			if ptr.isNil() {
				return 0
			}
			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*uint64)
			v := &uint64Value{*t}
			siz := Size(v)
			return tagsize + SizeVarint(uint64(siz)) + siz
		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			if ptr.isNil() {
				return b, nil
			}
			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*uint64)
			v := &uint64Value{*t}
			buf, err := Marshal(v)
			if err != nil {
				return nil, err
			}
			b = appendVarint(b, wiretag)
			b = appendVarint(b, uint64(len(buf)))
			b = append(b, buf...)
			return b, nil
		}
}

func makeStdUInt64ValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			s := ptr.getSlice(u.typ)
			n := 0
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(uint64)
				v := &uint64Value{t}
				siz := Size(v)
				n += siz + SizeVarint(uint64(siz)) + tagsize
			}
			return n
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			s := ptr.getSlice(u.typ)
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(uint64)
				v := &uint64Value{t}
				siz := Size(v)
				buf, err := Marshal(v)
				if err != nil {
					return nil, err
				}
				b = appendVarint(b, wiretag)
				b = appendVarint(b, uint64(siz))
				b = append(b, buf...)
			}

			return b, nil
		}
}

func makeStdUInt64ValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			s := ptr.getSlice(reflect.PtrTo(u.typ))
			n := 0
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(*uint64)
				v := &uint64Value{*t}
				siz := Size(v)
				n += siz + SizeVarint(uint64(siz)) + tagsize
			}
			return n
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			s := ptr.getSlice(reflect.PtrTo(u.typ))
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(*uint64)
				v := &uint64Value{*t}
				siz := Size(v)
				buf, err := Marshal(v)
				if err != nil {
					return nil, err
				}
				b = appendVarint(b, wiretag)
				b = appendVarint(b, uint64(siz))
				b = append(b, buf...)
			}

			return b, nil
		}
}

func makeStdUInt64ValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &uint64Value{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		s := f.asPointerTo(sub.typ).Elem()
		s.Set(reflect.ValueOf(m.Value))
		return b[x:], nil
	}
}

func makeStdUInt64ValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &uint64Value{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
		s.Set(reflect.ValueOf(&m.Value))
		return b[x:], nil
	}
}

func makeStdUInt64ValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &uint64Value{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		slice := f.getSlice(reflect.PtrTo(sub.typ))
		newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))
		slice.Set(newSlice)
		return b[x:], nil
	}
}

func makeStdUInt64ValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &uint64Value{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		slice := f.getSlice(sub.typ)
		newSlice := reflect.Append(slice, reflect.ValueOf(m.Value))
		slice.Set(newSlice)
		return b[x:], nil
	}
}

func makeStdInt32ValueMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			t := ptr.asPointerTo(u.typ).Interface().(*int32)
			v := &int32Value{*t}
			siz := Size(v)
			return tagsize + SizeVarint(uint64(siz)) + siz
		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			t := ptr.asPointerTo(u.typ).Interface().(*int32)
			v := &int32Value{*t}
			buf, err := Marshal(v)
			if err != nil {
				return nil, err
			}
			b = appendVarint(b, wiretag)
			b = appendVarint(b, uint64(len(buf)))
			b = append(b, buf...)
			return b, nil
		}
}

func makeStdInt32ValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			if ptr.isNil() {
				return 0
			}
			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*int32)
			v := &int32Value{*t}
			siz := Size(v)
			return tagsize + SizeVarint(uint64(siz)) + siz
		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			if ptr.isNil() {
				return b, nil
			}
			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*int32)
			v := &int32Value{*t}
			buf, err := Marshal(v)
			if err != nil {
				return nil, err
			}
			b = appendVarint(b, wiretag)
			b = appendVarint(b, uint64(len(buf)))
			b = append(b, buf...)
			return b, nil
		}
}

func makeStdInt32ValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			s := ptr.getSlice(u.typ)
			n := 0
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(int32)
				v := &int32Value{t}
				siz := Size(v)
				n += siz + SizeVarint(uint64(siz)) + tagsize
			}
			return n
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			s := ptr.getSlice(u.typ)
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(int32)
				v := &int32Value{t}
				siz := Size(v)
				buf, err := Marshal(v)
				if err != nil {
					return nil, err
				}
				b = appendVarint(b, wiretag)
				b = appendVarint(b, uint64(siz))
				b = append(b, buf...)
			}

			return b, nil
		}
}

func makeStdInt32ValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			s := ptr.getSlice(reflect.PtrTo(u.typ))
			n := 0
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(*int32)
				v := &int32Value{*t}
				siz := Size(v)
				n += siz + SizeVarint(uint64(siz)) + tagsize
			}
			return n
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			s := ptr.getSlice(reflect.PtrTo(u.typ))
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(*int32)
				v := &int32Value{*t}
				siz := Size(v)
				buf, err := Marshal(v)
				if err != nil {
					return nil, err
				}
				b = appendVarint(b, wiretag)
				b = appendVarint(b, uint64(siz))
				b = append(b, buf...)
			}

			return b, nil
		}
}

func makeStdInt32ValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &int32Value{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		s := f.asPointerTo(sub.typ).Elem()
		s.Set(reflect.ValueOf(m.Value))
		return b[x:], nil
	}
}

func makeStdInt32ValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &int32Value{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
		s.Set(reflect.ValueOf(&m.Value))
		return b[x:], nil
	}
}

func makeStdInt32ValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &int32Value{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		slice := f.getSlice(reflect.PtrTo(sub.typ))
		newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))
		slice.Set(newSlice)
		return b[x:], nil
	}
}

func makeStdInt32ValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &int32Value{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		slice := f.getSlice(sub.typ)
		newSlice := reflect.Append(slice, reflect.ValueOf(m.Value))
		slice.Set(newSlice)
		return b[x:], nil
	}
}

func makeStdUInt32ValueMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			t := ptr.asPointerTo(u.typ).Interface().(*uint32)
			v := &uint32Value{*t}
			siz := Size(v)
			return tagsize + SizeVarint(uint64(siz)) + siz
		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			t := ptr.asPointerTo(u.typ).Interface().(*uint32)
			v := &uint32Value{*t}
			buf, err := Marshal(v)
			if err != nil {
				return nil, err
			}
			b = appendVarint(b, wiretag)
			b = appendVarint(b, uint64(len(buf)))
			b = append(b, buf...)
			return b, nil
		}
}

func makeStdUInt32ValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			if ptr.isNil() {
				return 0
			}
			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*uint32)
			v := &uint32Value{*t}
			siz := Size(v)
			return tagsize + SizeVarint(uint64(siz)) + siz
		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			if ptr.isNil() {
				return b, nil
			}
			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*uint32)
			v := &uint32Value{*t}
			buf, err := Marshal(v)
			if err != nil {
				return nil, err
			}
			b = appendVarint(b, wiretag)
			b = appendVarint(b, uint64(len(buf)))
			b = append(b, buf...)
			return b, nil
		}
}

func makeStdUInt32ValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			s := ptr.getSlice(u.typ)
			n := 0
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(uint32)
				v := &uint32Value{t}
				siz := Size(v)
				n += siz + SizeVarint(uint64(siz)) + tagsize
			}
			return n
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			s := ptr.getSlice(u.typ)
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(uint32)
				v := &uint32Value{t}
				siz := Size(v)
				buf, err := Marshal(v)
				if err != nil {
					return nil, err
				}
				b = appendVarint(b, wiretag)
				b = appendVarint(b, uint64(siz))
				b = append(b, buf...)
			}

			return b, nil
		}
}

func makeStdUInt32ValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			s := ptr.getSlice(reflect.PtrTo(u.typ))
			n := 0
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(*uint32)
				v := &uint32Value{*t}
				siz := Size(v)
				n += siz + SizeVarint(uint64(siz)) + tagsize
			}
			return n
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			s := ptr.getSlice(reflect.PtrTo(u.typ))
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(*uint32)
				v := &uint32Value{*t}
				siz := Size(v)
				buf, err := Marshal(v)
				if err != nil {
					return nil, err
				}
				b = appendVarint(b, wiretag)
				b = appendVarint(b, uint64(siz))
				b = append(b, buf...)
			}

			return b, nil
		}
}

func makeStdUInt32ValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &uint32Value{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		s := f.asPointerTo(sub.typ).Elem()
		s.Set(reflect.ValueOf(m.Value))
		return b[x:], nil
	}
}

func makeStdUInt32ValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &uint32Value{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
		s.Set(reflect.ValueOf(&m.Value))
		return b[x:], nil
	}
}

func makeStdUInt32ValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &uint32Value{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		slice := f.getSlice(reflect.PtrTo(sub.typ))
		newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))
		slice.Set(newSlice)
		return b[x:], nil
	}
}

func makeStdUInt32ValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &uint32Value{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		slice := f.getSlice(sub.typ)
		newSlice := reflect.Append(slice, reflect.ValueOf(m.Value))
		slice.Set(newSlice)
		return b[x:], nil
	}
}

func makeStdBoolValueMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			t := ptr.asPointerTo(u.typ).Interface().(*bool)
			v := &boolValue{*t}
			siz := Size(v)
			return tagsize + SizeVarint(uint64(siz)) + siz
		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			t := ptr.asPointerTo(u.typ).Interface().(*bool)
			v := &boolValue{*t}
			buf, err := Marshal(v)
			if err != nil {
				return nil, err
			}
			b = appendVarint(b, wiretag)
			b = appendVarint(b, uint64(len(buf)))
			b = append(b, buf...)
			return b, nil
		}
}

func makeStdBoolValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			if ptr.isNil() {
				return 0
			}
			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*bool)
			v := &boolValue{*t}
			siz := Size(v)
			return tagsize + SizeVarint(uint64(siz)) + siz
		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			if ptr.isNil() {
				return b, nil
			}
			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*bool)
			v := &boolValue{*t}
			buf, err := Marshal(v)
			if err != nil {
				return nil, err
			}
			b = appendVarint(b, wiretag)
			b = appendVarint(b, uint64(len(buf)))
			b = append(b, buf...)
			return b, nil
		}
}

func makeStdBoolValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			s := ptr.getSlice(u.typ)
			n := 0
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(bool)
				v := &boolValue{t}
				siz := Size(v)
				n += siz + SizeVarint(uint64(siz)) + tagsize
			}
			return n
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			s := ptr.getSlice(u.typ)
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(bool)
				v := &boolValue{t}
				siz := Size(v)
				buf, err := Marshal(v)
				if err != nil {
					return nil, err
				}
				b = appendVarint(b, wiretag)
				b = appendVarint(b, uint64(siz))
				b = append(b, buf...)
			}

			return b, nil
		}
}

func makeStdBoolValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			s := ptr.getSlice(reflect.PtrTo(u.typ))
			n := 0
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(*bool)
				v := &boolValue{*t}
				siz := Size(v)
				n += siz + SizeVarint(uint64(siz)) + tagsize
			}
			return n
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			s := ptr.getSlice(reflect.PtrTo(u.typ))
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(*bool)
				v := &boolValue{*t}
				siz := Size(v)
				buf, err := Marshal(v)
				if err != nil {
					return nil, err
				}
				b = appendVarint(b, wiretag)
				b = appendVarint(b, uint64(siz))
				b = append(b, buf...)
			}

			return b, nil
		}
}

func makeStdBoolValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &boolValue{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		s := f.asPointerTo(sub.typ).Elem()
		s.Set(reflect.ValueOf(m.Value))
		return b[x:], nil
	}
}

func makeStdBoolValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &boolValue{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
		s.Set(reflect.ValueOf(&m.Value))
		return b[x:], nil
	}
}

func makeStdBoolValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &boolValue{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		slice := f.getSlice(reflect.PtrTo(sub.typ))
		newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))
		slice.Set(newSlice)
		return b[x:], nil
	}
}

func makeStdBoolValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &boolValue{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		slice := f.getSlice(sub.typ)
		newSlice := reflect.Append(slice, reflect.ValueOf(m.Value))
		slice.Set(newSlice)
		return b[x:], nil
	}
}

func makeStdStringValueMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			t := ptr.asPointerTo(u.typ).Interface().(*string)
			v := &stringValue{*t}
			siz := Size(v)
			return tagsize + SizeVarint(uint64(siz)) + siz
		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			t := ptr.asPointerTo(u.typ).Interface().(*string)
			v := &stringValue{*t}
			buf, err := Marshal(v)
			if err != nil {
				return nil, err
			}
			b = appendVarint(b, wiretag)
			b = appendVarint(b, uint64(len(buf)))
			b = append(b, buf...)
			return b, nil
		}
}

func makeStdStringValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			if ptr.isNil() {
				return 0
			}
			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*string)
			v := &stringValue{*t}
			siz := Size(v)
			return tagsize + SizeVarint(uint64(siz)) + siz
		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			if ptr.isNil() {
				return b, nil
			}
			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*string)
			v := &stringValue{*t}
			buf, err := Marshal(v)
			if err != nil {
				return nil, err
			}
			b = appendVarint(b, wiretag)
			b = appendVarint(b, uint64(len(buf)))
			b = append(b, buf...)
			return b, nil
		}
}

func makeStdStringValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			s := ptr.getSlice(u.typ)
			n := 0
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(string)
				v := &stringValue{t}
				siz := Size(v)
				n += siz + SizeVarint(uint64(siz)) + tagsize
			}
			return n
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			s := ptr.getSlice(u.typ)
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(string)
				v := &stringValue{t}
				siz := Size(v)
				buf, err := Marshal(v)
				if err != nil {
					return nil, err
				}
				b = appendVarint(b, wiretag)
				b = appendVarint(b, uint64(siz))
				b = append(b, buf...)
			}

			return b, nil
		}
}

func makeStdStringValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			s := ptr.getSlice(reflect.PtrTo(u.typ))
			n := 0
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(*string)
				v := &stringValue{*t}
				siz := Size(v)
				n += siz + SizeVarint(uint64(siz)) + tagsize
			}
			return n
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			s := ptr.getSlice(reflect.PtrTo(u.typ))
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(*string)
				v := &stringValue{*t}
				siz := Size(v)
				buf, err := Marshal(v)
				if err != nil {
					return nil, err
				}
				b = appendVarint(b, wiretag)
				b = appendVarint(b, uint64(siz))
				b = append(b, buf...)
			}

			return b, nil
		}
}

func makeStdStringValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &stringValue{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		s := f.asPointerTo(sub.typ).Elem()
		s.Set(reflect.ValueOf(m.Value))
		return b[x:], nil
	}
}

func makeStdStringValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &stringValue{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
		s.Set(reflect.ValueOf(&m.Value))
		return b[x:], nil
	}
}

func makeStdStringValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &stringValue{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		slice := f.getSlice(reflect.PtrTo(sub.typ))
		newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))
		slice.Set(newSlice)
		return b[x:], nil
	}
}

func makeStdStringValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &stringValue{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		slice := f.getSlice(sub.typ)
		newSlice := reflect.Append(slice, reflect.ValueOf(m.Value))
		slice.Set(newSlice)
		return b[x:], nil
	}
}

func makeStdBytesValueMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			t := ptr.asPointerTo(u.typ).Interface().(*[]byte)
			v := &bytesValue{*t}
			siz := Size(v)
			return tagsize + SizeVarint(uint64(siz)) + siz
		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			t := ptr.asPointerTo(u.typ).Interface().(*[]byte)
			v := &bytesValue{*t}
			buf, err := Marshal(v)
			if err != nil {
				return nil, err
			}
			b = appendVarint(b, wiretag)
			b = appendVarint(b, uint64(len(buf)))
			b = append(b, buf...)
			return b, nil
		}
}

func makeStdBytesValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			if ptr.isNil() {
				return 0
			}
			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*[]byte)
			v := &bytesValue{*t}
			siz := Size(v)
			return tagsize + SizeVarint(uint64(siz)) + siz
		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			if ptr.isNil() {
				return b, nil
			}
			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*[]byte)
			v := &bytesValue{*t}
			buf, err := Marshal(v)
			if err != nil {
				return nil, err
			}
			b = appendVarint(b, wiretag)
			b = appendVarint(b, uint64(len(buf)))
			b = append(b, buf...)
			return b, nil
		}
}

func makeStdBytesValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			s := ptr.getSlice(u.typ)
			n := 0
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().([]byte)
				v := &bytesValue{t}
				siz := Size(v)
				n += siz + SizeVarint(uint64(siz)) + tagsize
			}
			return n
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			s := ptr.getSlice(u.typ)
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().([]byte)
				v := &bytesValue{t}
				siz := Size(v)
				buf, err := Marshal(v)
				if err != nil {
					return nil, err
				}
				b = appendVarint(b, wiretag)
				b = appendVarint(b, uint64(siz))
				b = append(b, buf...)
			}

			return b, nil
		}
}

func makeStdBytesValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
	return func(ptr pointer, tagsize int) int {
			s := ptr.getSlice(reflect.PtrTo(u.typ))
			n := 0
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(*[]byte)
				v := &bytesValue{*t}
				siz := Size(v)
				n += siz + SizeVarint(uint64(siz)) + tagsize
			}
			return n
		},
		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
			s := ptr.getSlice(reflect.PtrTo(u.typ))
			for i := 0; i < s.Len(); i++ {
				elem := s.Index(i)
				t := elem.Interface().(*[]byte)
				v := &bytesValue{*t}
				siz := Size(v)
				buf, err := Marshal(v)
				if err != nil {
					return nil, err
				}
				b = appendVarint(b, wiretag)
				b = appendVarint(b, uint64(siz))
				b = append(b, buf...)
			}

			return b, nil
		}
}

func makeStdBytesValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &bytesValue{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		s := f.asPointerTo(sub.typ).Elem()
		s.Set(reflect.ValueOf(m.Value))
		return b[x:], nil
	}
}

func makeStdBytesValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &bytesValue{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
		s.Set(reflect.ValueOf(&m.Value))
		return b[x:], nil
	}
}

func makeStdBytesValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &bytesValue{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		slice := f.getSlice(reflect.PtrTo(sub.typ))
		newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))
		slice.Set(newSlice)
		return b[x:], nil
	}
}

func makeStdBytesValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
	return func(b []byte, f pointer, w int) ([]byte, error) {
		if w != WireBytes {
			return nil, errInternalBadWireType
		}
		x, n := decodeVarint(b)
		if n == 0 {
			return nil, io.ErrUnexpectedEOF
		}
		b = b[n:]
		if x > uint64(len(b)) {
			return nil, io.ErrUnexpectedEOF
		}
		m := &bytesValue{}
		if err := Unmarshal(b[:x], m); err != nil {
			return nil, err
		}
		slice := f.getSlice(sub.typ)
		newSlice := reflect.Append(slice, reflect.ValueOf(m.Value))
		slice.Set(newSlice)
		return b[x:], nil
	}
}
  07070100000661000081A4000000000000000000000001645E367C000011BA000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/proto/wrappers_gogo.go    // Protocol Buffers for Go with Gadgets
//
// Copyright (c) 2018, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package proto

type float64Value struct {
	Value float64 `protobuf:"fixed64,1,opt,name=value,proto3" json:"value,omitempty"`
}

func (m *float64Value) Reset()       { *m = float64Value{} }
func (*float64Value) ProtoMessage()  {}
func (*float64Value) String() string { return "float64<string>" }

type float32Value struct {
	Value float32 `protobuf:"fixed32,1,opt,name=value,proto3" json:"value,omitempty"`
}

func (m *float32Value) Reset()       { *m = float32Value{} }
func (*float32Value) ProtoMessage()  {}
func (*float32Value) String() string { return "float32<string>" }

type int64Value struct {
	Value int64 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"`
}

func (m *int64Value) Reset()       { *m = int64Value{} }
func (*int64Value) ProtoMessage()  {}
func (*int64Value) String() string { return "int64<string>" }

type uint64Value struct {
	Value uint64 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"`
}

func (m *uint64Value) Reset()       { *m = uint64Value{} }
func (*uint64Value) ProtoMessage()  {}
func (*uint64Value) String() string { return "uint64<string>" }

type int32Value struct {
	Value int32 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"`
}

func (m *int32Value) Reset()       { *m = int32Value{} }
func (*int32Value) ProtoMessage()  {}
func (*int32Value) String() string { return "int32<string>" }

type uint32Value struct {
	Value uint32 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"`
}

func (m *uint32Value) Reset()       { *m = uint32Value{} }
func (*uint32Value) ProtoMessage()  {}
func (*uint32Value) String() string { return "uint32<string>" }

type boolValue struct {
	Value bool `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"`
}

func (m *boolValue) Reset()       { *m = boolValue{} }
func (*boolValue) ProtoMessage()  {}
func (*boolValue) String() string { return "bool<string>" }

type stringValue struct {
	Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
}

func (m *stringValue) Reset()       { *m = stringValue{} }
func (*stringValue) ProtoMessage()  {}
func (*stringValue) String() string { return "string<string>" }

type bytesValue struct {
	Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
}

func (m *bytesValue) Reset()       { *m = bytesValue{} }
func (*bytesValue) ProtoMessage()  {}
func (*bytesValue) String() string { return "[]byte<string>" }

func init() {
	RegisterType((*float64Value)(nil), "gogo.protobuf.proto.DoubleValue")
	RegisterType((*float32Value)(nil), "gogo.protobuf.proto.FloatValue")
	RegisterType((*int64Value)(nil), "gogo.protobuf.proto.Int64Value")
	RegisterType((*uint64Value)(nil), "gogo.protobuf.proto.UInt64Value")
	RegisterType((*int32Value)(nil), "gogo.protobuf.proto.Int32Value")
	RegisterType((*uint32Value)(nil), "gogo.protobuf.proto.UInt32Value")
	RegisterType((*boolValue)(nil), "gogo.protobuf.proto.BoolValue")
	RegisterType((*stringValue)(nil), "gogo.protobuf.proto.StringValue")
	RegisterType((*bytesValue)(nil), "gogo.protobuf.proto.BytesValue")
}
  07070100000662000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/protoc-gen-gogo   07070100000663000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor    07070100000664000081A4000000000000000000000001645E367C000007B3000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/Makefile   # Go support for Protocol Buffers - Google's data interchange format
#
# Copyright 2010 The Go Authors.  All rights reserved.
# https://github.com/golang/protobuf
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
#     * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#     * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
#     * Neither the name of Google Inc. nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

regenerate:
	go install github.com/gogo/protobuf/protoc-gen-gogo
	go install github.com/gogo/protobuf/protoc-gen-gostring
	protoc --gogo_out=. -I=../../protobuf/google/protobuf ../../protobuf/google/protobuf/descriptor.proto
	protoc --gostring_out=. -I=../../protobuf/google/protobuf ../../protobuf/google/protobuf/descriptor.proto
 07070100000665000081A4000000000000000000000001645E367C00000FA7000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.go  // Go support for Protocol Buffers - Google's data interchange format
//
// Copyright 2016 The Go Authors.  All rights reserved.
// https://github.com/golang/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

// Package descriptor provides functions for obtaining protocol buffer
// descriptors for generated Go types.
//
// These functions cannot go in package proto because they depend on the
// generated protobuf descriptor messages, which themselves depend on proto.
package descriptor

import (
	"bytes"
	"compress/gzip"
	"fmt"
	"io/ioutil"

	"github.com/gogo/protobuf/proto"
)

// extractFile extracts a FileDescriptorProto from a gzip'd buffer.
func extractFile(gz []byte) (*FileDescriptorProto, error) {
	r, err := gzip.NewReader(bytes.NewReader(gz))
	if err != nil {
		return nil, fmt.Errorf("failed to open gzip reader: %v", err)
	}
	defer r.Close()

	b, err := ioutil.ReadAll(r)
	if err != nil {
		return nil, fmt.Errorf("failed to uncompress descriptor: %v", err)
	}

	fd := new(FileDescriptorProto)
	if err := proto.Unmarshal(b, fd); err != nil {
		return nil, fmt.Errorf("malformed FileDescriptorProto: %v", err)
	}

	return fd, nil
}

// Message is a proto.Message with a method to return its descriptor.
//
// Message types generated by the protocol compiler always satisfy
// the Message interface.
type Message interface {
	proto.Message
	Descriptor() ([]byte, []int)
}

// ForMessage returns a FileDescriptorProto and a DescriptorProto from within it
// describing the given message.
func ForMessage(msg Message) (fd *FileDescriptorProto, md *DescriptorProto) {
	gz, path := msg.Descriptor()
	fd, err := extractFile(gz)
	if err != nil {
		panic(fmt.Sprintf("invalid FileDescriptorProto for %T: %v", msg, err))
	}

	md = fd.MessageType[path[0]]
	for _, i := range path[1:] {
		md = md.NestedType[i]
	}
	return fd, md
}

// Is this field a scalar numeric type?
func (field *FieldDescriptorProto) IsScalar() bool {
	if field.Type == nil {
		return false
	}
	switch *field.Type {
	case FieldDescriptorProto_TYPE_DOUBLE,
		FieldDescriptorProto_TYPE_FLOAT,
		FieldDescriptorProto_TYPE_INT64,
		FieldDescriptorProto_TYPE_UINT64,
		FieldDescriptorProto_TYPE_INT32,
		FieldDescriptorProto_TYPE_FIXED64,
		FieldDescriptorProto_TYPE_FIXED32,
		FieldDescriptorProto_TYPE_BOOL,
		FieldDescriptorProto_TYPE_UINT32,
		FieldDescriptorProto_TYPE_ENUM,
		FieldDescriptorProto_TYPE_SFIXED32,
		FieldDescriptorProto_TYPE_SFIXED64,
		FieldDescriptorProto_TYPE_SINT32,
		FieldDescriptorProto_TYPE_SINT64:
		return true
	default:
		return false
	}
}
 07070100000666000081A4000000000000000000000001645E367C0001CB04000000000000000000000000000000000000006000000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.pb.go   // Code generated by protoc-gen-gogo. DO NOT EDIT.
// source: descriptor.proto

package descriptor

import (
	fmt "fmt"
	proto "github.com/gogo/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package

type FieldDescriptorProto_Type int32

const (
	// 0 is reserved for errors.
	// Order is weird for historical reasons.
	FieldDescriptorProto_TYPE_DOUBLE FieldDescriptorProto_Type = 1
	FieldDescriptorProto_TYPE_FLOAT  FieldDescriptorProto_Type = 2
	// Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT64 if
	// negative values are likely.
	FieldDescriptorProto_TYPE_INT64  FieldDescriptorProto_Type = 3
	FieldDescriptorProto_TYPE_UINT64 FieldDescriptorProto_Type = 4
	// Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT32 if
	// negative values are likely.
	FieldDescriptorProto_TYPE_INT32   FieldDescriptorProto_Type = 5
	FieldDescriptorProto_TYPE_FIXED64 FieldDescriptorProto_Type = 6
	FieldDescriptorProto_TYPE_FIXED32 FieldDescriptorProto_Type = 7
	FieldDescriptorProto_TYPE_BOOL    FieldDescriptorProto_Type = 8
	FieldDescriptorProto_TYPE_STRING  FieldDescriptorProto_Type = 9
	// Tag-delimited aggregate.
	// Group type is deprecated and not supported in proto3. However, Proto3
	// implementations should still be able to parse the group wire format and
	// treat group fields as unknown fields.
	FieldDescriptorProto_TYPE_GROUP   FieldDescriptorProto_Type = 10
	FieldDescriptorProto_TYPE_MESSAGE FieldDescriptorProto_Type = 11
	// New in version 2.
	FieldDescriptorProto_TYPE_BYTES    FieldDescriptorProto_Type = 12
	FieldDescriptorProto_TYPE_UINT32   FieldDescriptorProto_Type = 13
	FieldDescriptorProto_TYPE_ENUM     FieldDescriptorProto_Type = 14
	FieldDescriptorProto_TYPE_SFIXED32 FieldDescriptorProto_Type = 15
	FieldDescriptorProto_TYPE_SFIXED64 FieldDescriptorProto_Type = 16
	FieldDescriptorProto_TYPE_SINT32   FieldDescriptorProto_Type = 17
	FieldDescriptorProto_TYPE_SINT64   FieldDescriptorProto_Type = 18
)

var FieldDescriptorProto_Type_name = map[int32]string{
	1:  "TYPE_DOUBLE",
	2:  "TYPE_FLOAT",
	3:  "TYPE_INT64",
	4:  "TYPE_UINT64",
	5:  "TYPE_INT32",
	6:  "TYPE_FIXED64",
	7:  "TYPE_FIXED32",
	8:  "TYPE_BOOL",
	9:  "TYPE_STRING",
	10: "TYPE_GROUP",
	11: "TYPE_MESSAGE",
	12: "TYPE_BYTES",
	13: "TYPE_UINT32",
	14: "TYPE_ENUM",
	15: "TYPE_SFIXED32",
	16: "TYPE_SFIXED64",
	17: "TYPE_SINT32",
	18: "TYPE_SINT64",
}

var FieldDescriptorProto_Type_value = map[string]int32{
	"TYPE_DOUBLE":   1,
	"TYPE_FLOAT":    2,
	"TYPE_INT64":    3,
	"TYPE_UINT64":   4,
	"TYPE_INT32":    5,
	"TYPE_FIXED64":  6,
	"TYPE_FIXED32":  7,
	"TYPE_BOOL":     8,
	"TYPE_STRING":   9,
	"TYPE_GROUP":    10,
	"TYPE_MESSAGE":  11,
	"TYPE_BYTES":    12,
	"TYPE_UINT32":   13,
	"TYPE_ENUM":     14,
	"TYPE_SFIXED32": 15,
	"TYPE_SFIXED64": 16,
	"TYPE_SINT32":   17,
	"TYPE_SINT64":   18,
}

func (x FieldDescriptorProto_Type) Enum() *FieldDescriptorProto_Type {
	p := new(FieldDescriptorProto_Type)
	*p = x
	return p
}

func (x FieldDescriptorProto_Type) String() string {
	return proto.EnumName(FieldDescriptorProto_Type_name, int32(x))
}

func (x *FieldDescriptorProto_Type) UnmarshalJSON(data []byte) error {
	value, err := proto.UnmarshalJSONEnum(FieldDescriptorProto_Type_value, data, "FieldDescriptorProto_Type")
	if err != nil {
		return err
	}
	*x = FieldDescriptorProto_Type(value)
	return nil
}

func (FieldDescriptorProto_Type) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{4, 0}
}

type FieldDescriptorProto_Label int32

const (
	// 0 is reserved for errors
	FieldDescriptorProto_LABEL_OPTIONAL FieldDescriptorProto_Label = 1
	FieldDescriptorProto_LABEL_REQUIRED FieldDescriptorProto_Label = 2
	FieldDescriptorProto_LABEL_REPEATED FieldDescriptorProto_Label = 3
)

var FieldDescriptorProto_Label_name = map[int32]string{
	1: "LABEL_OPTIONAL",
	2: "LABEL_REQUIRED",
	3: "LABEL_REPEATED",
}

var FieldDescriptorProto_Label_value = map[string]int32{
	"LABEL_OPTIONAL": 1,
	"LABEL_REQUIRED": 2,
	"LABEL_REPEATED": 3,
}

func (x FieldDescriptorProto_Label) Enum() *FieldDescriptorProto_Label {
	p := new(FieldDescriptorProto_Label)
	*p = x
	return p
}

func (x FieldDescriptorProto_Label) String() string {
	return proto.EnumName(FieldDescriptorProto_Label_name, int32(x))
}

func (x *FieldDescriptorProto_Label) UnmarshalJSON(data []byte) error {
	value, err := proto.UnmarshalJSONEnum(FieldDescriptorProto_Label_value, data, "FieldDescriptorProto_Label")
	if err != nil {
		return err
	}
	*x = FieldDescriptorProto_Label(value)
	return nil
}

func (FieldDescriptorProto_Label) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{4, 1}
}

// Generated classes can be optimized for speed or code size.
type FileOptions_OptimizeMode int32

const (
	FileOptions_SPEED FileOptions_OptimizeMode = 1
	// etc.
	FileOptions_CODE_SIZE    FileOptions_OptimizeMode = 2
	FileOptions_LITE_RUNTIME FileOptions_OptimizeMode = 3
)

var FileOptions_OptimizeMode_name = map[int32]string{
	1: "SPEED",
	2: "CODE_SIZE",
	3: "LITE_RUNTIME",
}

var FileOptions_OptimizeMode_value = map[string]int32{
	"SPEED":        1,
	"CODE_SIZE":    2,
	"LITE_RUNTIME": 3,
}

func (x FileOptions_OptimizeMode) Enum() *FileOptions_OptimizeMode {
	p := new(FileOptions_OptimizeMode)
	*p = x
	return p
}

func (x FileOptions_OptimizeMode) String() string {
	return proto.EnumName(FileOptions_OptimizeMode_name, int32(x))
}

func (x *FileOptions_OptimizeMode) UnmarshalJSON(data []byte) error {
	value, err := proto.UnmarshalJSONEnum(FileOptions_OptimizeMode_value, data, "FileOptions_OptimizeMode")
	if err != nil {
		return err
	}
	*x = FileOptions_OptimizeMode(value)
	return nil
}

func (FileOptions_OptimizeMode) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{10, 0}
}

type FieldOptions_CType int32

const (
	// Default mode.
	FieldOptions_STRING       FieldOptions_CType = 0
	FieldOptions_CORD         FieldOptions_CType = 1
	FieldOptions_STRING_PIECE FieldOptions_CType = 2
)

var FieldOptions_CType_name = map[int32]string{
	0: "STRING",
	1: "CORD",
	2: "STRING_PIECE",
}

var FieldOptions_CType_value = map[string]int32{
	"STRING":       0,
	"CORD":         1,
	"STRING_PIECE": 2,
}

func (x FieldOptions_CType) Enum() *FieldOptions_CType {
	p := new(FieldOptions_CType)
	*p = x
	return p
}

func (x FieldOptions_CType) String() string {
	return proto.EnumName(FieldOptions_CType_name, int32(x))
}

func (x *FieldOptions_CType) UnmarshalJSON(data []byte) error {
	value, err := proto.UnmarshalJSONEnum(FieldOptions_CType_value, data, "FieldOptions_CType")
	if err != nil {
		return err
	}
	*x = FieldOptions_CType(value)
	return nil
}

func (FieldOptions_CType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{12, 0}
}

type FieldOptions_JSType int32

const (
	// Use the default type.
	FieldOptions_JS_NORMAL FieldOptions_JSType = 0
	// Use JavaScript strings.
	FieldOptions_JS_STRING FieldOptions_JSType = 1
	// Use JavaScript numbers.
	FieldOptions_JS_NUMBER FieldOptions_JSType = 2
)

var FieldOptions_JSType_name = map[int32]string{
	0: "JS_NORMAL",
	1: "JS_STRING",
	2: "JS_NUMBER",
}

var FieldOptions_JSType_value = map[string]int32{
	"JS_NORMAL": 0,
	"JS_STRING": 1,
	"JS_NUMBER": 2,
}

func (x FieldOptions_JSType) Enum() *FieldOptions_JSType {
	p := new(FieldOptions_JSType)
	*p = x
	return p
}

func (x FieldOptions_JSType) String() string {
	return proto.EnumName(FieldOptions_JSType_name, int32(x))
}

func (x *FieldOptions_JSType) UnmarshalJSON(data []byte) error {
	value, err := proto.UnmarshalJSONEnum(FieldOptions_JSType_value, data, "FieldOptions_JSType")
	if err != nil {
		return err
	}
	*x = FieldOptions_JSType(value)
	return nil
}

func (FieldOptions_JSType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{12, 1}
}

// Is this method side-effect-free (or safe in HTTP parlance), or idempotent,
// or neither? HTTP based RPC implementation may choose GET verb for safe
// methods, and PUT verb for idempotent methods instead of the default POST.
type MethodOptions_IdempotencyLevel int32

const (
	MethodOptions_IDEMPOTENCY_UNKNOWN MethodOptions_IdempotencyLevel = 0
	MethodOptions_NO_SIDE_EFFECTS     MethodOptions_IdempotencyLevel = 1
	MethodOptions_IDEMPOTENT          MethodOptions_IdempotencyLevel = 2
)

var MethodOptions_IdempotencyLevel_name = map[int32]string{
	0: "IDEMPOTENCY_UNKNOWN",
	1: "NO_SIDE_EFFECTS",
	2: "IDEMPOTENT",
}

var MethodOptions_IdempotencyLevel_value = map[string]int32{
	"IDEMPOTENCY_UNKNOWN": 0,
	"NO_SIDE_EFFECTS":     1,
	"IDEMPOTENT":          2,
}

func (x MethodOptions_IdempotencyLevel) Enum() *MethodOptions_IdempotencyLevel {
	p := new(MethodOptions_IdempotencyLevel)
	*p = x
	return p
}

func (x MethodOptions_IdempotencyLevel) String() string {
	return proto.EnumName(MethodOptions_IdempotencyLevel_name, int32(x))
}

func (x *MethodOptions_IdempotencyLevel) UnmarshalJSON(data []byte) error {
	value, err := proto.UnmarshalJSONEnum(MethodOptions_IdempotencyLevel_value, data, "MethodOptions_IdempotencyLevel")
	if err != nil {
		return err
	}
	*x = MethodOptions_IdempotencyLevel(value)
	return nil
}

func (MethodOptions_IdempotencyLevel) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{17, 0}
}

// The protocol compiler can output a FileDescriptorSet containing the .proto
// files it parses.
type FileDescriptorSet struct {
	File                 []*FileDescriptorProto `protobuf:"bytes,1,rep,name=file" json:"file,omitempty"`
	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
	XXX_unrecognized     []byte                 `json:"-"`
	XXX_sizecache        int32                  `json:"-"`
}

func (m *FileDescriptorSet) Reset()         { *m = FileDescriptorSet{} }
func (m *FileDescriptorSet) String() string { return proto.CompactTextString(m) }
func (*FileDescriptorSet) ProtoMessage()    {}
func (*FileDescriptorSet) Descriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{0}
}
func (m *FileDescriptorSet) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_FileDescriptorSet.Unmarshal(m, b)
}
func (m *FileDescriptorSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_FileDescriptorSet.Marshal(b, m, deterministic)
}
func (m *FileDescriptorSet) XXX_Merge(src proto.Message) {
	xxx_messageInfo_FileDescriptorSet.Merge(m, src)
}
func (m *FileDescriptorSet) XXX_Size() int {
	return xxx_messageInfo_FileDescriptorSet.Size(m)
}
func (m *FileDescriptorSet) XXX_DiscardUnknown() {
	xxx_messageInfo_FileDescriptorSet.DiscardUnknown(m)
}

var xxx_messageInfo_FileDescriptorSet proto.InternalMessageInfo

func (m *FileDescriptorSet) GetFile() []*FileDescriptorProto {
	if m != nil {
		return m.File
	}
	return nil
}

// Describes a complete .proto file.
type FileDescriptorProto struct {
	Name    *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
	Package *string `protobuf:"bytes,2,opt,name=package" json:"package,omitempty"`
	// Names of files imported by this file.
	Dependency []string `protobuf:"bytes,3,rep,name=dependency" json:"dependency,omitempty"`
	// Indexes of the public imported files in the dependency list above.
	PublicDependency []int32 `protobuf:"varint,10,rep,name=public_dependency,json=publicDependency" json:"public_dependency,omitempty"`
	// Indexes of the weak imported files in the dependency list.
	// For Google-internal migration only. Do not use.
	WeakDependency []int32 `protobuf:"varint,11,rep,name=weak_dependency,json=weakDependency" json:"weak_dependency,omitempty"`
	// All top-level definitions in this file.
	MessageType []*DescriptorProto        `protobuf:"bytes,4,rep,name=message_type,json=messageType" json:"message_type,omitempty"`
	EnumType    []*EnumDescriptorProto    `protobuf:"bytes,5,rep,name=enum_type,json=enumType" json:"enum_type,omitempty"`
	Service     []*ServiceDescriptorProto `protobuf:"bytes,6,rep,name=service" json:"service,omitempty"`
	Extension   []*FieldDescriptorProto   `protobuf:"bytes,7,rep,name=extension" json:"extension,omitempty"`
	Options     *FileOptions              `protobuf:"bytes,8,opt,name=options" json:"options,omitempty"`
	// This field contains optional information about the original source code.
	// You may safely remove this entire field without harming runtime
	// functionality of the descriptors -- the information is needed only by
	// development tools.
	SourceCodeInfo *SourceCodeInfo `protobuf:"bytes,9,opt,name=source_code_info,json=sourceCodeInfo" json:"source_code_info,omitempty"`
	// The syntax of the proto file.
	// The supported values are "proto2" and "proto3".
	Syntax               *string  `protobuf:"bytes,12,opt,name=syntax" json:"syntax,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *FileDescriptorProto) Reset()         { *m = FileDescriptorProto{} }
func (m *FileDescriptorProto) String() string { return proto.CompactTextString(m) }
func (*FileDescriptorProto) ProtoMessage()    {}
func (*FileDescriptorProto) Descriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{1}
}
func (m *FileDescriptorProto) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_FileDescriptorProto.Unmarshal(m, b)
}
func (m *FileDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_FileDescriptorProto.Marshal(b, m, deterministic)
}
func (m *FileDescriptorProto) XXX_Merge(src proto.Message) {
	xxx_messageInfo_FileDescriptorProto.Merge(m, src)
}
func (m *FileDescriptorProto) XXX_Size() int {
	return xxx_messageInfo_FileDescriptorProto.Size(m)
}
func (m *FileDescriptorProto) XXX_DiscardUnknown() {
	xxx_messageInfo_FileDescriptorProto.DiscardUnknown(m)
}

var xxx_messageInfo_FileDescriptorProto proto.InternalMessageInfo

func (m *FileDescriptorProto) GetName() string {
	if m != nil && m.Name != nil {
		return *m.Name
	}
	return ""
}

func (m *FileDescriptorProto) GetPackage() string {
	if m != nil && m.Package != nil {
		return *m.Package
	}
	return ""
}

func (m *FileDescriptorProto) GetDependency() []string {
	if m != nil {
		return m.Dependency
	}
	return nil
}

func (m *FileDescriptorProto) GetPublicDependency() []int32 {
	if m != nil {
		return m.PublicDependency
	}
	return nil
}

func (m *FileDescriptorProto) GetWeakDependency() []int32 {
	if m != nil {
		return m.WeakDependency
	}
	return nil
}

func (m *FileDescriptorProto) GetMessageType() []*DescriptorProto {
	if m != nil {
		return m.MessageType
	}
	return nil
}

func (m *FileDescriptorProto) GetEnumType() []*EnumDescriptorProto {
	if m != nil {
		return m.EnumType
	}
	return nil
}

func (m *FileDescriptorProto) GetService() []*ServiceDescriptorProto {
	if m != nil {
		return m.Service
	}
	return nil
}

func (m *FileDescriptorProto) GetExtension() []*FieldDescriptorProto {
	if m != nil {
		return m.Extension
	}
	return nil
}

func (m *FileDescriptorProto) GetOptions() *FileOptions {
	if m != nil {
		return m.Options
	}
	return nil
}

func (m *FileDescriptorProto) GetSourceCodeInfo() *SourceCodeInfo {
	if m != nil {
		return m.SourceCodeInfo
	}
	return nil
}

func (m *FileDescriptorProto) GetSyntax() string {
	if m != nil && m.Syntax != nil {
		return *m.Syntax
	}
	return ""
}

// Describes a message type.
type DescriptorProto struct {
	Name           *string                           `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
	Field          []*FieldDescriptorProto           `protobuf:"bytes,2,rep,name=field" json:"field,omitempty"`
	Extension      []*FieldDescriptorProto           `protobuf:"bytes,6,rep,name=extension" json:"extension,omitempty"`
	NestedType     []*DescriptorProto                `protobuf:"bytes,3,rep,name=nested_type,json=nestedType" json:"nested_type,omitempty"`
	EnumType       []*EnumDescriptorProto            `protobuf:"bytes,4,rep,name=enum_type,json=enumType" json:"enum_type,omitempty"`
	ExtensionRange []*DescriptorProto_ExtensionRange `protobuf:"bytes,5,rep,name=extension_range,json=extensionRange" json:"extension_range,omitempty"`
	OneofDecl      []*OneofDescriptorProto           `protobuf:"bytes,8,rep,name=oneof_decl,json=oneofDecl" json:"oneof_decl,omitempty"`
	Options        *MessageOptions                   `protobuf:"bytes,7,opt,name=options" json:"options,omitempty"`
	ReservedRange  []*DescriptorProto_ReservedRange  `protobuf:"bytes,9,rep,name=reserved_range,json=reservedRange" json:"reserved_range,omitempty"`
	// Reserved field names, which may not be used by fields in the same message.
	// A given name may only be reserved once.
	ReservedName         []string `protobuf:"bytes,10,rep,name=reserved_name,json=reservedName" json:"reserved_name,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *DescriptorProto) Reset()         { *m = DescriptorProto{} }
func (m *DescriptorProto) String() string { return proto.CompactTextString(m) }
func (*DescriptorProto) ProtoMessage()    {}
func (*DescriptorProto) Descriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{2}
}
func (m *DescriptorProto) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DescriptorProto.Unmarshal(m, b)
}
func (m *DescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DescriptorProto.Marshal(b, m, deterministic)
}
func (m *DescriptorProto) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DescriptorProto.Merge(m, src)
}
func (m *DescriptorProto) XXX_Size() int {
	return xxx_messageInfo_DescriptorProto.Size(m)
}
func (m *DescriptorProto) XXX_DiscardUnknown() {
	xxx_messageInfo_DescriptorProto.DiscardUnknown(m)
}

var xxx_messageInfo_DescriptorProto proto.InternalMessageInfo

func (m *DescriptorProto) GetName() string {
	if m != nil && m.Name != nil {
		return *m.Name
	}
	return ""
}

func (m *DescriptorProto) GetField() []*FieldDescriptorProto {
	if m != nil {
		return m.Field
	}
	return nil
}

func (m *DescriptorProto) GetExtension() []*FieldDescriptorProto {
	if m != nil {
		return m.Extension
	}
	return nil
}

func (m *DescriptorProto) GetNestedType() []*DescriptorProto {
	if m != nil {
		return m.NestedType
	}
	return nil
}

func (m *DescriptorProto) GetEnumType() []*EnumDescriptorProto {
	if m != nil {
		return m.EnumType
	}
	return nil
}

func (m *DescriptorProto) GetExtensionRange() []*DescriptorProto_ExtensionRange {
	if m != nil {
		return m.ExtensionRange
	}
	return nil
}

func (m *DescriptorProto) GetOneofDecl() []*OneofDescriptorProto {
	if m != nil {
		return m.OneofDecl
	}
	return nil
}

func (m *DescriptorProto) GetOptions() *MessageOptions {
	if m != nil {
		return m.Options
	}
	return nil
}

func (m *DescriptorProto) GetReservedRange() []*DescriptorProto_ReservedRange {
	if m != nil {
		return m.ReservedRange
	}
	return nil
}

func (m *DescriptorProto) GetReservedName() []string {
	if m != nil {
		return m.ReservedName
	}
	return nil
}

type DescriptorProto_ExtensionRange struct {
	Start                *int32                 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"`
	End                  *int32                 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"`
	Options              *ExtensionRangeOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"`
	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
	XXX_unrecognized     []byte                 `json:"-"`
	XXX_sizecache        int32                  `json:"-"`
}

func (m *DescriptorProto_ExtensionRange) Reset()         { *m = DescriptorProto_ExtensionRange{} }
func (m *DescriptorProto_ExtensionRange) String() string { return proto.CompactTextString(m) }
func (*DescriptorProto_ExtensionRange) ProtoMessage()    {}
func (*DescriptorProto_ExtensionRange) Descriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{2, 0}
}
func (m *DescriptorProto_ExtensionRange) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DescriptorProto_ExtensionRange.Unmarshal(m, b)
}
func (m *DescriptorProto_ExtensionRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DescriptorProto_ExtensionRange.Marshal(b, m, deterministic)
}
func (m *DescriptorProto_ExtensionRange) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DescriptorProto_ExtensionRange.Merge(m, src)
}
func (m *DescriptorProto_ExtensionRange) XXX_Size() int {
	return xxx_messageInfo_DescriptorProto_ExtensionRange.Size(m)
}
func (m *DescriptorProto_ExtensionRange) XXX_DiscardUnknown() {
	xxx_messageInfo_DescriptorProto_ExtensionRange.DiscardUnknown(m)
}

var xxx_messageInfo_DescriptorProto_ExtensionRange proto.InternalMessageInfo

func (m *DescriptorProto_ExtensionRange) GetStart() int32 {
	if m != nil && m.Start != nil {
		return *m.Start
	}
	return 0
}

func (m *DescriptorProto_ExtensionRange) GetEnd() int32 {
	if m != nil && m.End != nil {
		return *m.End
	}
	return 0
}

func (m *DescriptorProto_ExtensionRange) GetOptions() *ExtensionRangeOptions {
	if m != nil {
		return m.Options
	}
	return nil
}

// Range of reserved tag numbers. Reserved tag numbers may not be used by
// fields or extension ranges in the same message. Reserved ranges may
// not overlap.
type DescriptorProto_ReservedRange struct {
	Start                *int32   `protobuf:"varint,1,opt,name=start" json:"start,omitempty"`
	End                  *int32   `protobuf:"varint,2,opt,name=end" json:"end,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *DescriptorProto_ReservedRange) Reset()         { *m = DescriptorProto_ReservedRange{} }
func (m *DescriptorProto_ReservedRange) String() string { return proto.CompactTextString(m) }
func (*DescriptorProto_ReservedRange) ProtoMessage()    {}
func (*DescriptorProto_ReservedRange) Descriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{2, 1}
}
func (m *DescriptorProto_ReservedRange) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DescriptorProto_ReservedRange.Unmarshal(m, b)
}
func (m *DescriptorProto_ReservedRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DescriptorProto_ReservedRange.Marshal(b, m, deterministic)
}
func (m *DescriptorProto_ReservedRange) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DescriptorProto_ReservedRange.Merge(m, src)
}
func (m *DescriptorProto_ReservedRange) XXX_Size() int {
	return xxx_messageInfo_DescriptorProto_ReservedRange.Size(m)
}
func (m *DescriptorProto_ReservedRange) XXX_DiscardUnknown() {
	xxx_messageInfo_DescriptorProto_ReservedRange.DiscardUnknown(m)
}

var xxx_messageInfo_DescriptorProto_ReservedRange proto.InternalMessageInfo

func (m *DescriptorProto_ReservedRange) GetStart() int32 {
	if m != nil && m.Start != nil {
		return *m.Start
	}
	return 0
}

func (m *DescriptorProto_ReservedRange) GetEnd() int32 {
	if m != nil && m.End != nil {
		return *m.End
	}
	return 0
}

type ExtensionRangeOptions struct {
	// The parser stores options it doesn't recognize here. See above.
	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
	XXX_NoUnkeyedLiteral         struct{}               `json:"-"`
	proto.XXX_InternalExtensions `json:"-"`
	XXX_unrecognized             []byte `json:"-"`
	XXX_sizecache                int32  `json:"-"`
}

func (m *ExtensionRangeOptions) Reset()         { *m = ExtensionRangeOptions{} }
func (m *ExtensionRangeOptions) String() string { return proto.CompactTextString(m) }
func (*ExtensionRangeOptions) ProtoMessage()    {}
func (*ExtensionRangeOptions) Descriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{3}
}

var extRange_ExtensionRangeOptions = []proto.ExtensionRange{
	{Start: 1000, End: 536870911},
}

func (*ExtensionRangeOptions) ExtensionRangeArray() []proto.ExtensionRange {
	return extRange_ExtensionRangeOptions
}

func (m *ExtensionRangeOptions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ExtensionRangeOptions.Unmarshal(m, b)
}
func (m *ExtensionRangeOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ExtensionRangeOptions.Marshal(b, m, deterministic)
}
func (m *ExtensionRangeOptions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ExtensionRangeOptions.Merge(m, src)
}
func (m *ExtensionRangeOptions) XXX_Size() int {
	return xxx_messageInfo_ExtensionRangeOptions.Size(m)
}
func (m *ExtensionRangeOptions) XXX_DiscardUnknown() {
	xxx_messageInfo_ExtensionRangeOptions.DiscardUnknown(m)
}

var xxx_messageInfo_ExtensionRangeOptions proto.InternalMessageInfo

func (m *ExtensionRangeOptions) GetUninterpretedOption() []*UninterpretedOption {
	if m != nil {
		return m.UninterpretedOption
	}
	return nil
}

// Describes a field within a message.
type FieldDescriptorProto struct {
	Name   *string                     `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
	Number *int32                      `protobuf:"varint,3,opt,name=number" json:"number,omitempty"`
	Label  *FieldDescriptorProto_Label `protobuf:"varint,4,opt,name=label,enum=google.protobuf.FieldDescriptorProto_Label" json:"label,omitempty"`
	// If type_name is set, this need not be set.  If both this and type_name
	// are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
	Type *FieldDescriptorProto_Type `protobuf:"varint,5,opt,name=type,enum=google.protobuf.FieldDescriptorProto_Type" json:"type,omitempty"`
	// For message and enum types, this is the name of the type.  If the name
	// starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
	// rules are used to find the type (i.e. first the nested types within this
	// message are searched, then within the parent, on up to the root
	// namespace).
	TypeName *string `protobuf:"bytes,6,opt,name=type_name,json=typeName" json:"type_name,omitempty"`
	// For extensions, this is the name of the type being extended.  It is
	// resolved in the same manner as type_name.
	Extendee *string `protobuf:"bytes,2,opt,name=extendee" json:"extendee,omitempty"`
	// For numeric types, contains the original text representation of the value.
	// For booleans, "true" or "false".
	// For strings, contains the default text contents (not escaped in any way).
	// For bytes, contains the C escaped value.  All bytes >= 128 are escaped.
	// TODO(kenton):  Base-64 encode?
	DefaultValue *string `protobuf:"bytes,7,opt,name=default_value,json=defaultValue" json:"default_value,omitempty"`
	// If set, gives the index of a oneof in the containing type's oneof_decl
	// list.  This field is a member of that oneof.
	OneofIndex *int32 `protobuf:"varint,9,opt,name=oneof_index,json=oneofIndex" json:"oneof_index,omitempty"`
	// JSON name of this field. The value is set by protocol compiler. If the
	// user has set a "json_name" option on this field, that option's value
	// will be used. Otherwise, it's deduced from the field's name by converting
	// it to camelCase.
	JsonName             *string       `protobuf:"bytes,10,opt,name=json_name,json=jsonName" json:"json_name,omitempty"`
	Options              *FieldOptions `protobuf:"bytes,8,opt,name=options" json:"options,omitempty"`
	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
	XXX_unrecognized     []byte        `json:"-"`
	XXX_sizecache        int32         `json:"-"`
}

func (m *FieldDescriptorProto) Reset()         { *m = FieldDescriptorProto{} }
func (m *FieldDescriptorProto) String() string { return proto.CompactTextString(m) }
func (*FieldDescriptorProto) ProtoMessage()    {}
func (*FieldDescriptorProto) Descriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{4}
}
func (m *FieldDescriptorProto) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_FieldDescriptorProto.Unmarshal(m, b)
}
func (m *FieldDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_FieldDescriptorProto.Marshal(b, m, deterministic)
}
func (m *FieldDescriptorProto) XXX_Merge(src proto.Message) {
	xxx_messageInfo_FieldDescriptorProto.Merge(m, src)
}
func (m *FieldDescriptorProto) XXX_Size() int {
	return xxx_messageInfo_FieldDescriptorProto.Size(m)
}
func (m *FieldDescriptorProto) XXX_DiscardUnknown() {
	xxx_messageInfo_FieldDescriptorProto.DiscardUnknown(m)
}

var xxx_messageInfo_FieldDescriptorProto proto.InternalMessageInfo

func (m *FieldDescriptorProto) GetName() string {
	if m != nil && m.Name != nil {
		return *m.Name
	}
	return ""
}

func (m *FieldDescriptorProto) GetNumber() int32 {
	if m != nil && m.Number != nil {
		return *m.Number
	}
	return 0
}

func (m *FieldDescriptorProto) GetLabel() FieldDescriptorProto_Label {
	if m != nil && m.Label != nil {
		return *m.Label
	}
	return FieldDescriptorProto_LABEL_OPTIONAL
}

func (m *FieldDescriptorProto) GetType() FieldDescriptorProto_Type {
	if m != nil && m.Type != nil {
		return *m.Type
	}
	return FieldDescriptorProto_TYPE_DOUBLE
}

func (m *FieldDescriptorProto) GetTypeName() string {
	if m != nil && m.TypeName != nil {
		return *m.TypeName
	}
	return ""
}

func (m *FieldDescriptorProto) GetExtendee() string {
	if m != nil && m.Extendee != nil {
		return *m.Extendee
	}
	return ""
}

func (m *FieldDescriptorProto) GetDefaultValue() string {
	if m != nil && m.DefaultValue != nil {
		return *m.DefaultValue
	}
	return ""
}

func (m *FieldDescriptorProto) GetOneofIndex() int32 {
	if m != nil && m.OneofIndex != nil {
		return *m.OneofIndex
	}
	return 0
}

func (m *FieldDescriptorProto) GetJsonName() string {
	if m != nil && m.JsonName != nil {
		return *m.JsonName
	}
	return ""
}

func (m *FieldDescriptorProto) GetOptions() *FieldOptions {
	if m != nil {
		return m.Options
	}
	return nil
}

// Describes a oneof.
type OneofDescriptorProto struct {
	Name                 *string       `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
	Options              *OneofOptions `protobuf:"bytes,2,opt,name=options" json:"options,omitempty"`
	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
	XXX_unrecognized     []byte        `json:"-"`
	XXX_sizecache        int32         `json:"-"`
}

func (m *OneofDescriptorProto) Reset()         { *m = OneofDescriptorProto{} }
func (m *OneofDescriptorProto) String() string { return proto.CompactTextString(m) }
func (*OneofDescriptorProto) ProtoMessage()    {}
func (*OneofDescriptorProto) Descriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{5}
}
func (m *OneofDescriptorProto) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_OneofDescriptorProto.Unmarshal(m, b)
}
func (m *OneofDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_OneofDescriptorProto.Marshal(b, m, deterministic)
}
func (m *OneofDescriptorProto) XXX_Merge(src proto.Message) {
	xxx_messageInfo_OneofDescriptorProto.Merge(m, src)
}
func (m *OneofDescriptorProto) XXX_Size() int {
	return xxx_messageInfo_OneofDescriptorProto.Size(m)
}
func (m *OneofDescriptorProto) XXX_DiscardUnknown() {
	xxx_messageInfo_OneofDescriptorProto.DiscardUnknown(m)
}

var xxx_messageInfo_OneofDescriptorProto proto.InternalMessageInfo

func (m *OneofDescriptorProto) GetName() string {
	if m != nil && m.Name != nil {
		return *m.Name
	}
	return ""
}

func (m *OneofDescriptorProto) GetOptions() *OneofOptions {
	if m != nil {
		return m.Options
	}
	return nil
}

// Describes an enum type.
type EnumDescriptorProto struct {
	Name    *string                     `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
	Value   []*EnumValueDescriptorProto `protobuf:"bytes,2,rep,name=value" json:"value,omitempty"`
	Options *EnumOptions                `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"`
	// Range of reserved numeric values. Reserved numeric values may not be used
	// by enum values in the same enum declaration. Reserved ranges may not
	// overlap.
	ReservedRange []*EnumDescriptorProto_EnumReservedRange `protobuf:"bytes,4,rep,name=reserved_range,json=reservedRange" json:"reserved_range,omitempty"`
	// Reserved enum value names, which may not be reused. A given name may only
	// be reserved once.
	ReservedName         []string `protobuf:"bytes,5,rep,name=reserved_name,json=reservedName" json:"reserved_name,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *EnumDescriptorProto) Reset()         { *m = EnumDescriptorProto{} }
func (m *EnumDescriptorProto) String() string { return proto.CompactTextString(m) }
func (*EnumDescriptorProto) ProtoMessage()    {}
func (*EnumDescriptorProto) Descriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{6}
}
func (m *EnumDescriptorProto) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_EnumDescriptorProto.Unmarshal(m, b)
}
func (m *EnumDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_EnumDescriptorProto.Marshal(b, m, deterministic)
}
func (m *EnumDescriptorProto) XXX_Merge(src proto.Message) {
	xxx_messageInfo_EnumDescriptorProto.Merge(m, src)
}
func (m *EnumDescriptorProto) XXX_Size() int {
	return xxx_messageInfo_EnumDescriptorProto.Size(m)
}
func (m *EnumDescriptorProto) XXX_DiscardUnknown() {
	xxx_messageInfo_EnumDescriptorProto.DiscardUnknown(m)
}

var xxx_messageInfo_EnumDescriptorProto proto.InternalMessageInfo

func (m *EnumDescriptorProto) GetName() string {
	if m != nil && m.Name != nil {
		return *m.Name
	}
	return ""
}

func (m *EnumDescriptorProto) GetValue() []*EnumValueDescriptorProto {
	if m != nil {
		return m.Value
	}
	return nil
}

func (m *EnumDescriptorProto) GetOptions() *EnumOptions {
	if m != nil {
		return m.Options
	}
	return nil
}

func (m *EnumDescriptorProto) GetReservedRange() []*EnumDescriptorProto_EnumReservedRange {
	if m != nil {
		return m.ReservedRange
	}
	return nil
}

func (m *EnumDescriptorProto) GetReservedName() []string {
	if m != nil {
		return m.ReservedName
	}
	return nil
}

// Range of reserved numeric values. Reserved values may not be used by
// entries in the same enum. Reserved ranges may not overlap.
//
// Note that this is distinct from DescriptorProto.ReservedRange in that it
// is inclusive such that it can appropriately represent the entire int32
// domain.
type EnumDescriptorProto_EnumReservedRange struct {
	Start                *int32   `protobuf:"varint,1,opt,name=start" json:"start,omitempty"`
	End                  *int32   `protobuf:"varint,2,opt,name=end" json:"end,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *EnumDescriptorProto_EnumReservedRange) Reset()         { *m = EnumDescriptorProto_EnumReservedRange{} }
func (m *EnumDescriptorProto_EnumReservedRange) String() string { return proto.CompactTextString(m) }
func (*EnumDescriptorProto_EnumReservedRange) ProtoMessage()    {}
func (*EnumDescriptorProto_EnumReservedRange) Descriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{6, 0}
}
func (m *EnumDescriptorProto_EnumReservedRange) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Unmarshal(m, b)
}
func (m *EnumDescriptorProto_EnumReservedRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Marshal(b, m, deterministic)
}
func (m *EnumDescriptorProto_EnumReservedRange) XXX_Merge(src proto.Message) {
	xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Merge(m, src)
}
func (m *EnumDescriptorProto_EnumReservedRange) XXX_Size() int {
	return xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Size(m)
}
func (m *EnumDescriptorProto_EnumReservedRange) XXX_DiscardUnknown() {
	xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.DiscardUnknown(m)
}

var xxx_messageInfo_EnumDescriptorProto_EnumReservedRange proto.InternalMessageInfo

func (m *EnumDescriptorProto_EnumReservedRange) GetStart() int32 {
	if m != nil && m.Start != nil {
		return *m.Start
	}
	return 0
}

func (m *EnumDescriptorProto_EnumReservedRange) GetEnd() int32 {
	if m != nil && m.End != nil {
		return *m.End
	}
	return 0
}

// Describes a value within an enum.
type EnumValueDescriptorProto struct {
	Name                 *string           `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
	Number               *int32            `protobuf:"varint,2,opt,name=number" json:"number,omitempty"`
	Options              *EnumValueOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (m *EnumValueDescriptorProto) Reset()         { *m = EnumValueDescriptorProto{} }
func (m *EnumValueDescriptorProto) String() string { return proto.CompactTextString(m) }
func (*EnumValueDescriptorProto) ProtoMessage()    {}
func (*EnumValueDescriptorProto) Descriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{7}
}
func (m *EnumValueDescriptorProto) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_EnumValueDescriptorProto.Unmarshal(m, b)
}
func (m *EnumValueDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_EnumValueDescriptorProto.Marshal(b, m, deterministic)
}
func (m *EnumValueDescriptorProto) XXX_Merge(src proto.Message) {
	xxx_messageInfo_EnumValueDescriptorProto.Merge(m, src)
}
func (m *EnumValueDescriptorProto) XXX_Size() int {
	return xxx_messageInfo_EnumValueDescriptorProto.Size(m)
}
func (m *EnumValueDescriptorProto) XXX_DiscardUnknown() {
	xxx_messageInfo_EnumValueDescriptorProto.DiscardUnknown(m)
}

var xxx_messageInfo_EnumValueDescriptorProto proto.InternalMessageInfo

func (m *EnumValueDescriptorProto) GetName() string {
	if m != nil && m.Name != nil {
		return *m.Name
	}
	return ""
}

func (m *EnumValueDescriptorProto) GetNumber() int32 {
	if m != nil && m.Number != nil {
		return *m.Number
	}
	return 0
}

func (m *EnumValueDescriptorProto) GetOptions() *EnumValueOptions {
	if m != nil {
		return m.Options
	}
	return nil
}

// Describes a service.
type ServiceDescriptorProto struct {
	Name                 *string                  `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
	Method               []*MethodDescriptorProto `protobuf:"bytes,2,rep,name=method" json:"method,omitempty"`
	Options              *ServiceOptions          `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
	XXX_unrecognized     []byte                   `json:"-"`
	XXX_sizecache        int32                    `json:"-"`
}

func (m *ServiceDescriptorProto) Reset()         { *m = ServiceDescriptorProto{} }
func (m *ServiceDescriptorProto) String() string { return proto.CompactTextString(m) }
func (*ServiceDescriptorProto) ProtoMessage()    {}
func (*ServiceDescriptorProto) Descriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{8}
}
func (m *ServiceDescriptorProto) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ServiceDescriptorProto.Unmarshal(m, b)
}
func (m *ServiceDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ServiceDescriptorProto.Marshal(b, m, deterministic)
}
func (m *ServiceDescriptorProto) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ServiceDescriptorProto.Merge(m, src)
}
func (m *ServiceDescriptorProto) XXX_Size() int {
	return xxx_messageInfo_ServiceDescriptorProto.Size(m)
}
func (m *ServiceDescriptorProto) XXX_DiscardUnknown() {
	xxx_messageInfo_ServiceDescriptorProto.DiscardUnknown(m)
}

var xxx_messageInfo_ServiceDescriptorProto proto.InternalMessageInfo

func (m *ServiceDescriptorProto) GetName() string {
	if m != nil && m.Name != nil {
		return *m.Name
	}
	return ""
}

func (m *ServiceDescriptorProto) GetMethod() []*MethodDescriptorProto {
	if m != nil {
		return m.Method
	}
	return nil
}

func (m *ServiceDescriptorProto) GetOptions() *ServiceOptions {
	if m != nil {
		return m.Options
	}
	return nil
}

// Describes a method of a service.
type MethodDescriptorProto struct {
	Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
	// Input and output type names.  These are resolved in the same way as
	// FieldDescriptorProto.type_name, but must refer to a message type.
	InputType  *string        `protobuf:"bytes,2,opt,name=input_type,json=inputType" json:"input_type,omitempty"`
	OutputType *string        `protobuf:"bytes,3,opt,name=output_type,json=outputType" json:"output_type,omitempty"`
	Options    *MethodOptions `protobuf:"bytes,4,opt,name=options" json:"options,omitempty"`
	// Identifies if client streams multiple client messages
	ClientStreaming *bool `protobuf:"varint,5,opt,name=client_streaming,json=clientStreaming,def=0" json:"client_streaming,omitempty"`
	// Identifies if server streams multiple server messages
	ServerStreaming      *bool    `protobuf:"varint,6,opt,name=server_streaming,json=serverStreaming,def=0" json:"server_streaming,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *MethodDescriptorProto) Reset()         { *m = MethodDescriptorProto{} }
func (m *MethodDescriptorProto) String() string { return proto.CompactTextString(m) }
func (*MethodDescriptorProto) ProtoMessage()    {}
func (*MethodDescriptorProto) Descriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{9}
}
func (m *MethodDescriptorProto) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_MethodDescriptorProto.Unmarshal(m, b)
}
func (m *MethodDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_MethodDescriptorProto.Marshal(b, m, deterministic)
}
func (m *MethodDescriptorProto) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MethodDescriptorProto.Merge(m, src)
}
func (m *MethodDescriptorProto) XXX_Size() int {
	return xxx_messageInfo_MethodDescriptorProto.Size(m)
}
func (m *MethodDescriptorProto) XXX_DiscardUnknown() {
	xxx_messageInfo_MethodDescriptorProto.DiscardUnknown(m)
}

var xxx_messageInfo_MethodDescriptorProto proto.InternalMessageInfo

const Default_MethodDescriptorProto_ClientStreaming bool = false
const Default_MethodDescriptorProto_ServerStreaming bool = false

func (m *MethodDescriptorProto) GetName() string {
	if m != nil && m.Name != nil {
		return *m.Name
	}
	return ""
}

func (m *MethodDescriptorProto) GetInputType() string {
	if m != nil && m.InputType != nil {
		return *m.InputType
	}
	return ""
}

func (m *MethodDescriptorProto) GetOutputType() string {
	if m != nil && m.OutputType != nil {
		return *m.OutputType
	}
	return ""
}

func (m *MethodDescriptorProto) GetOptions() *MethodOptions {
	if m != nil {
		return m.Options
	}
	return nil
}

func (m *MethodDescriptorProto) GetClientStreaming() bool {
	if m != nil && m.ClientStreaming != nil {
		return *m.ClientStreaming
	}
	return Default_MethodDescriptorProto_ClientStreaming
}

func (m *MethodDescriptorProto) GetServerStreaming() bool {
	if m != nil && m.ServerStreaming != nil {
		return *m.ServerStreaming
	}
	return Default_MethodDescriptorProto_ServerStreaming
}

type FileOptions struct {
	// Sets the Java package where classes generated from this .proto will be
	// placed.  By default, the proto package is used, but this is often
	// inappropriate because proto packages do not normally start with backwards
	// domain names.
	JavaPackage *string `protobuf:"bytes,1,opt,name=java_package,json=javaPackage" json:"java_package,omitempty"`
	// If set, all the classes from the .proto file are wrapped in a single
	// outer class with the given name.  This applies to both Proto1
	// (equivalent to the old "--one_java_file" option) and Proto2 (where
	// a .proto always translates to a single class, but you may want to
	// explicitly choose the class name).
	JavaOuterClassname *string `protobuf:"bytes,8,opt,name=java_outer_classname,json=javaOuterClassname" json:"java_outer_classname,omitempty"`
	// If set true, then the Java code generator will generate a separate .java
	// file for each top-level message, enum, and service defined in the .proto
	// file.  Thus, these types will *not* be nested inside the outer class
	// named by java_outer_classname.  However, the outer class will still be
	// generated to contain the file's getDescriptor() method as well as any
	// top-level extensions defined in the file.
	JavaMultipleFiles *bool `protobuf:"varint,10,opt,name=java_multiple_files,json=javaMultipleFiles,def=0" json:"java_multiple_files,omitempty"`
	// This option does nothing.
	JavaGenerateEqualsAndHash *bool `protobuf:"varint,20,opt,name=java_generate_equals_and_hash,json=javaGenerateEqualsAndHash" json:"java_generate_equals_and_hash,omitempty"` // Deprecated: Do not use.
	// If set true, then the Java2 code generator will generate code that
	// throws an exception whenever an attempt is made to assign a non-UTF-8
	// byte sequence to a string field.
	// Message reflection will do the same.
	// However, an extension field still accepts non-UTF-8 byte sequences.
	// This option has no effect on when used with the lite runtime.
	JavaStringCheckUtf8 *bool                     `protobuf:"varint,27,opt,name=java_string_check_utf8,json=javaStringCheckUtf8,def=0" json:"java_string_check_utf8,omitempty"`
	OptimizeFor         *FileOptions_OptimizeMode `protobuf:"varint,9,opt,name=optimize_for,json=optimizeFor,enum=google.protobuf.FileOptions_OptimizeMode,def=1" json:"optimize_for,omitempty"`
	// Sets the Go package where structs generated from this .proto will be
	// placed. If omitted, the Go package will be derived from the following:
	//   - The basename of the package import path, if provided.
	//   - Otherwise, the package statement in the .proto file, if present.
	//   - Otherwise, the basename of the .proto file, without extension.
	GoPackage *string `protobuf:"bytes,11,opt,name=go_package,json=goPackage" json:"go_package,omitempty"`
	// Should generic services be generated in each language?  "Generic" services
	// are not specific to any particular RPC system.  They are generated by the
	// main code generators in each language (without additional plugins).
	// Generic services were the only kind of service generation supported by
	// early versions of google.protobuf.
	//
	// Generic services are now considered deprecated in favor of using plugins
	// that generate code specific to your particular RPC system.  Therefore,
	// these default to false.  Old code which depends on generic services should
	// explicitly set them to true.
	CcGenericServices   *bool `protobuf:"varint,16,opt,name=cc_generic_services,json=ccGenericServices,def=0" json:"cc_generic_services,omitempty"`
	JavaGenericServices *bool `protobuf:"varint,17,opt,name=java_generic_services,json=javaGenericServices,def=0" json:"java_generic_services,omitempty"`
	PyGenericServices   *bool `protobuf:"varint,18,opt,name=py_generic_services,json=pyGenericServices,def=0" json:"py_generic_services,omitempty"`
	PhpGenericServices  *bool `protobuf:"varint,42,opt,name=php_generic_services,json=phpGenericServices,def=0" json:"php_generic_services,omitempty"`
	// Is this file deprecated?
	// Depending on the target platform, this can emit Deprecated annotations
	// for everything in the file, or it will be completely ignored; in the very
	// least, this is a formalization for deprecating files.
	Deprecated *bool `protobuf:"varint,23,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
	// Enables the use of arenas for the proto messages in this file. This applies
	// only to generated classes for C++.
	CcEnableArenas *bool `protobuf:"varint,31,opt,name=cc_enable_arenas,json=ccEnableArenas,def=0" json:"cc_enable_arenas,omitempty"`
	// Sets the objective c class prefix which is prepended to all objective c
	// generated classes from this .proto. There is no default.
	ObjcClassPrefix *string `protobuf:"bytes,36,opt,name=objc_class_prefix,json=objcClassPrefix" json:"objc_class_prefix,omitempty"`
	// Namespace for generated classes; defaults to the package.
	CsharpNamespace *string `protobuf:"bytes,37,opt,name=csharp_namespace,json=csharpNamespace" json:"csharp_namespace,omitempty"`
	// By default Swift generators will take the proto package and CamelCase it
	// replacing '.' with underscore and use that to prefix the types/symbols
	// defined. When this options is provided, they will use this value instead
	// to prefix the types/symbols defined.
	SwiftPrefix *string `protobuf:"bytes,39,opt,name=swift_prefix,json=swiftPrefix" json:"swift_prefix,omitempty"`
	// Sets the php class prefix which is prepended to all php generated classes
	// from this .proto. Default is empty.
	PhpClassPrefix *string `protobuf:"bytes,40,opt,name=php_class_prefix,json=phpClassPrefix" json:"php_class_prefix,omitempty"`
	// Use this option to change the namespace of php generated classes. Default
	// is empty. When this option is empty, the package name will be used for
	// determining the namespace.
	PhpNamespace *string `protobuf:"bytes,41,opt,name=php_namespace,json=phpNamespace" json:"php_namespace,omitempty"`
	// Use this option to change the namespace of php generated metadata classes.
	// Default is empty. When this option is empty, the proto file name will be
	// used for determining the namespace.
	PhpMetadataNamespace *string `protobuf:"bytes,44,opt,name=php_metadata_namespace,json=phpMetadataNamespace" json:"php_metadata_namespace,omitempty"`
	// Use this option to change the package of ruby generated classes. Default
	// is empty. When this option is not set, the package name will be used for
	// determining the ruby package.
	RubyPackage *string `protobuf:"bytes,45,opt,name=ruby_package,json=rubyPackage" json:"ruby_package,omitempty"`
	// The parser stores options it doesn't recognize here.
	// See the documentation for the "Options" section above.
	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
	XXX_NoUnkeyedLiteral         struct{}               `json:"-"`
	proto.XXX_InternalExtensions `json:"-"`
	XXX_unrecognized             []byte `json:"-"`
	XXX_sizecache                int32  `json:"-"`
}

func (m *FileOptions) Reset()         { *m = FileOptions{} }
func (m *FileOptions) String() string { return proto.CompactTextString(m) }
func (*FileOptions) ProtoMessage()    {}
func (*FileOptions) Descriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{10}
}

var extRange_FileOptions = []proto.ExtensionRange{
	{Start: 1000, End: 536870911},
}

func (*FileOptions) ExtensionRangeArray() []proto.ExtensionRange {
	return extRange_FileOptions
}

func (m *FileOptions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_FileOptions.Unmarshal(m, b)
}
func (m *FileOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_FileOptions.Marshal(b, m, deterministic)
}
func (m *FileOptions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_FileOptions.Merge(m, src)
}
func (m *FileOptions) XXX_Size() int {
	return xxx_messageInfo_FileOptions.Size(m)
}
func (m *FileOptions) XXX_DiscardUnknown() {
	xxx_messageInfo_FileOptions.DiscardUnknown(m)
}

var xxx_messageInfo_FileOptions proto.InternalMessageInfo

const Default_FileOptions_JavaMultipleFiles bool = false
const Default_FileOptions_JavaStringCheckUtf8 bool = false
const Default_FileOptions_OptimizeFor FileOptions_OptimizeMode = FileOptions_SPEED
const Default_FileOptions_CcGenericServices bool = false
const Default_FileOptions_JavaGenericServices bool = false
const Default_FileOptions_PyGenericServices bool = false
const Default_FileOptions_PhpGenericServices bool = false
const Default_FileOptions_Deprecated bool = false
const Default_FileOptions_CcEnableArenas bool = false

func (m *FileOptions) GetJavaPackage() string {
	if m != nil && m.JavaPackage != nil {
		return *m.JavaPackage
	}
	return ""
}

func (m *FileOptions) GetJavaOuterClassname() string {
	if m != nil && m.JavaOuterClassname != nil {
		return *m.JavaOuterClassname
	}
	return ""
}

func (m *FileOptions) GetJavaMultipleFiles() bool {
	if m != nil && m.JavaMultipleFiles != nil {
		return *m.JavaMultipleFiles
	}
	return Default_FileOptions_JavaMultipleFiles
}

// Deprecated: Do not use.
func (m *FileOptions) GetJavaGenerateEqualsAndHash() bool {
	if m != nil && m.JavaGenerateEqualsAndHash != nil {
		return *m.JavaGenerateEqualsAndHash
	}
	return false
}

func (m *FileOptions) GetJavaStringCheckUtf8() bool {
	if m != nil && m.JavaStringCheckUtf8 != nil {
		return *m.JavaStringCheckUtf8
	}
	return Default_FileOptions_JavaStringCheckUtf8
}

func (m *FileOptions) GetOptimizeFor() FileOptions_OptimizeMode {
	if m != nil && m.OptimizeFor != nil {
		return *m.OptimizeFor
	}
	return Default_FileOptions_OptimizeFor
}

func (m *FileOptions) GetGoPackage() string {
	if m != nil && m.GoPackage != nil {
		return *m.GoPackage
	}
	return ""
}

func (m *FileOptions) GetCcGenericServices() bool {
	if m != nil && m.CcGenericServices != nil {
		return *m.CcGenericServices
	}
	return Default_FileOptions_CcGenericServices
}

func (m *FileOptions) GetJavaGenericServices() bool {
	if m != nil && m.JavaGenericServices != nil {
		return *m.JavaGenericServices
	}
	return Default_FileOptions_JavaGenericServices
}

func (m *FileOptions) GetPyGenericServices() bool {
	if m != nil && m.PyGenericServices != nil {
		return *m.PyGenericServices
	}
	return Default_FileOptions_PyGenericServices
}

func (m *FileOptions) GetPhpGenericServices() bool {
	if m != nil && m.PhpGenericServices != nil {
		return *m.PhpGenericServices
	}
	return Default_FileOptions_PhpGenericServices
}

func (m *FileOptions) GetDeprecated() bool {
	if m != nil && m.Deprecated != nil {
		return *m.Deprecated
	}
	return Default_FileOptions_Deprecated
}

func (m *FileOptions) GetCcEnableArenas() bool {
	if m != nil && m.CcEnableArenas != nil {
		return *m.CcEnableArenas
	}
	return Default_FileOptions_CcEnableArenas
}

func (m *FileOptions) GetObjcClassPrefix() string {
	if m != nil && m.ObjcClassPrefix != nil {
		return *m.ObjcClassPrefix
	}
	return ""
}

func (m *FileOptions) GetCsharpNamespace() string {
	if m != nil && m.CsharpNamespace != nil {
		return *m.CsharpNamespace
	}
	return ""
}

func (m *FileOptions) GetSwiftPrefix() string {
	if m != nil && m.SwiftPrefix != nil {
		return *m.SwiftPrefix
	}
	return ""
}

func (m *FileOptions) GetPhpClassPrefix() string {
	if m != nil && m.PhpClassPrefix != nil {
		return *m.PhpClassPrefix
	}
	return ""
}

func (m *FileOptions) GetPhpNamespace() string {
	if m != nil && m.PhpNamespace != nil {
		return *m.PhpNamespace
	}
	return ""
}

func (m *FileOptions) GetPhpMetadataNamespace() string {
	if m != nil && m.PhpMetadataNamespace != nil {
		return *m.PhpMetadataNamespace
	}
	return ""
}

func (m *FileOptions) GetRubyPackage() string {
	if m != nil && m.RubyPackage != nil {
		return *m.RubyPackage
	}
	return ""
}

func (m *FileOptions) GetUninterpretedOption() []*UninterpretedOption {
	if m != nil {
		return m.UninterpretedOption
	}
	return nil
}

type MessageOptions struct {
	// Set true to use the old proto1 MessageSet wire format for extensions.
	// This is provided for backwards-compatibility with the MessageSet wire
	// format.  You should not use this for any other reason:  It's less
	// efficient, has fewer features, and is more complicated.
	//
	// The message must be defined exactly as follows:
	//   message Foo {
	//     option message_set_wire_format = true;
	//     extensions 4 to max;
	//   }
	// Note that the message cannot have any defined fields; MessageSets only
	// have extensions.
	//
	// All extensions of your type must be singular messages; e.g. they cannot
	// be int32s, enums, or repeated messages.
	//
	// Because this is an option, the above two restrictions are not enforced by
	// the protocol compiler.
	MessageSetWireFormat *bool `protobuf:"varint,1,opt,name=message_set_wire_format,json=messageSetWireFormat,def=0" json:"message_set_wire_format,omitempty"`
	// Disables the generation of the standard "descriptor()" accessor, which can
	// conflict with a field of the same name.  This is meant to make migration
	// from proto1 easier; new code should avoid fields named "descriptor".
	NoStandardDescriptorAccessor *bool `protobuf:"varint,2,opt,name=no_standard_descriptor_accessor,json=noStandardDescriptorAccessor,def=0" json:"no_standard_descriptor_accessor,omitempty"`
	// Is this message deprecated?
	// Depending on the target platform, this can emit Deprecated annotations
	// for the message, or it will be completely ignored; in the very least,
	// this is a formalization for deprecating messages.
	Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
	// Whether the message is an automatically generated map entry type for the
	// maps field.
	//
	// For maps fields:
	//     map<KeyType, ValueType> map_field = 1;
	// The parsed descriptor looks like:
	//     message MapFieldEntry {
	//         option map_entry = true;
	//         optional KeyType key = 1;
	//         optional ValueType value = 2;
	//     }
	//     repeated MapFieldEntry map_field = 1;
	//
	// Implementations may choose not to generate the map_entry=true message, but
	// use a native map in the target language to hold the keys and values.
	// The reflection APIs in such implementations still need to work as
	// if the field is a repeated message field.
	//
	// NOTE: Do not set the option in .proto files. Always use the maps syntax
	// instead. The option should only be implicitly set by the proto compiler
	// parser.
	MapEntry *bool `protobuf:"varint,7,opt,name=map_entry,json=mapEntry" json:"map_entry,omitempty"`
	// The parser stores options it doesn't recognize here. See above.
	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
	XXX_NoUnkeyedLiteral         struct{}               `json:"-"`
	proto.XXX_InternalExtensions `json:"-"`
	XXX_unrecognized             []byte `json:"-"`
	XXX_sizecache                int32  `json:"-"`
}

func (m *MessageOptions) Reset()         { *m = MessageOptions{} }
func (m *MessageOptions) String() string { return proto.CompactTextString(m) }
func (*MessageOptions) ProtoMessage()    {}
func (*MessageOptions) Descriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{11}
}

var extRange_MessageOptions = []proto.ExtensionRange{
	{Start: 1000, End: 536870911},
}

func (*MessageOptions) ExtensionRangeArray() []proto.ExtensionRange {
	return extRange_MessageOptions
}

func (m *MessageOptions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_MessageOptions.Unmarshal(m, b)
}
func (m *MessageOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_MessageOptions.Marshal(b, m, deterministic)
}
func (m *MessageOptions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MessageOptions.Merge(m, src)
}
func (m *MessageOptions) XXX_Size() int {
	return xxx_messageInfo_MessageOptions.Size(m)
}
func (m *MessageOptions) XXX_DiscardUnknown() {
	xxx_messageInfo_MessageOptions.DiscardUnknown(m)
}

var xxx_messageInfo_MessageOptions proto.InternalMessageInfo

const Default_MessageOptions_MessageSetWireFormat bool = false
const Default_MessageOptions_NoStandardDescriptorAccessor bool = false
const Default_MessageOptions_Deprecated bool = false

func (m *MessageOptions) GetMessageSetWireFormat() bool {
	if m != nil && m.MessageSetWireFormat != nil {
		return *m.MessageSetWireFormat
	}
	return Default_MessageOptions_MessageSetWireFormat
}

func (m *MessageOptions) GetNoStandardDescriptorAccessor() bool {
	if m != nil && m.NoStandardDescriptorAccessor != nil {
		return *m.NoStandardDescriptorAccessor
	}
	return Default_MessageOptions_NoStandardDescriptorAccessor
}

func (m *MessageOptions) GetDeprecated() bool {
	if m != nil && m.Deprecated != nil {
		return *m.Deprecated
	}
	return Default_MessageOptions_Deprecated
}

func (m *MessageOptions) GetMapEntry() bool {
	if m != nil && m.MapEntry != nil {
		return *m.MapEntry
	}
	return false
}

func (m *MessageOptions) GetUninterpretedOption() []*UninterpretedOption {
	if m != nil {
		return m.UninterpretedOption
	}
	return nil
}

type FieldOptions struct {
	// The ctype option instructs the C++ code generator to use a different
	// representation of the field than it normally would.  See the specific
	// options below.  This option is not yet implemented in the open source
	// release -- sorry, we'll try to include it in a future version!
	Ctype *FieldOptions_CType `protobuf:"varint,1,opt,name=ctype,enum=google.protobuf.FieldOptions_CType,def=0" json:"ctype,omitempty"`
	// The packed option can be enabled for repeated primitive fields to enable
	// a more efficient representation on the wire. Rather than repeatedly
	// writing the tag and type for each element, the entire array is encoded as
	// a single length-delimited blob. In proto3, only explicit setting it to
	// false will avoid using packed encoding.
	Packed *bool `protobuf:"varint,2,opt,name=packed" json:"packed,omitempty"`
	// The jstype option determines the JavaScript type used for values of the
	// field.  The option is permitted only for 64 bit integral and fixed types
	// (int64, uint64, sint64, fixed64, sfixed64).  A field with jstype JS_STRING
	// is represented as JavaScript string, which avoids loss of precision that
	// can happen when a large value is converted to a floating point JavaScript.
	// Specifying JS_NUMBER for the jstype causes the generated JavaScript code to
	// use the JavaScript "number" type.  The behavior of the default option
	// JS_NORMAL is implementation dependent.
	//
	// This option is an enum to permit additional types to be added, e.g.
	// goog.math.Integer.
	Jstype *FieldOptions_JSType `protobuf:"varint,6,opt,name=jstype,enum=google.protobuf.FieldOptions_JSType,def=0" json:"jstype,omitempty"`
	// Should this field be parsed lazily?  Lazy applies only to message-type
	// fields.  It means that when the outer message is initially parsed, the
	// inner message's contents will not be parsed but instead stored in encoded
	// form.  The inner message will actually be parsed when it is first accessed.
	//
	// This is only a hint.  Implementations are free to choose whether to use
	// eager or lazy parsing regardless of the value of this option.  However,
	// setting this option true suggests that the protocol author believes that
	// using lazy parsing on this field is worth the additional bookkeeping
	// overhead typically needed to implement it.
	//
	// This option does not affect the public interface of any generated code;
	// all method signatures remain the same.  Furthermore, thread-safety of the
	// interface is not affected by this option; const methods remain safe to
	// call from multiple threads concurrently, while non-const methods continue
	// to require exclusive access.
	//
	//
	// Note that implementations may choose not to check required fields within
	// a lazy sub-message.  That is, calling IsInitialized() on the outer message
	// may return true even if the inner message has missing required fields.
	// This is necessary because otherwise the inner message would have to be
	// parsed in order to perform the check, defeating the purpose of lazy
	// parsing.  An implementation which chooses not to check required fields
	// must be consistent about it.  That is, for any particular sub-message, the
	// implementation must either *always* check its required fields, or *never*
	// check its required fields, regardless of whether or not the message has
	// been parsed.
	Lazy *bool `protobuf:"varint,5,opt,name=lazy,def=0" json:"lazy,omitempty"`
	// Is this field deprecated?
	// Depending on the target platform, this can emit Deprecated annotations
	// for accessors, or it will be completely ignored; in the very least, this
	// is a formalization for deprecating fields.
	Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
	// For Google-internal migration only. Do not use.
	Weak *bool `protobuf:"varint,10,opt,name=weak,def=0" json:"weak,omitempty"`
	// The parser stores options it doesn't recognize here. See above.
	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
	XXX_NoUnkeyedLiteral         struct{}               `json:"-"`
	proto.XXX_InternalExtensions `json:"-"`
	XXX_unrecognized             []byte `json:"-"`
	XXX_sizecache                int32  `json:"-"`
}

func (m *FieldOptions) Reset()         { *m = FieldOptions{} }
func (m *FieldOptions) String() string { return proto.CompactTextString(m) }
func (*FieldOptions) ProtoMessage()    {}
func (*FieldOptions) Descriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{12}
}

var extRange_FieldOptions = []proto.ExtensionRange{
	{Start: 1000, End: 536870911},
}

func (*FieldOptions) ExtensionRangeArray() []proto.ExtensionRange {
	return extRange_FieldOptions
}

func (m *FieldOptions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_FieldOptions.Unmarshal(m, b)
}
func (m *FieldOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_FieldOptions.Marshal(b, m, deterministic)
}
func (m *FieldOptions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_FieldOptions.Merge(m, src)
}
func (m *FieldOptions) XXX_Size() int {
	return xxx_messageInfo_FieldOptions.Size(m)
}
func (m *FieldOptions) XXX_DiscardUnknown() {
	xxx_messageInfo_FieldOptions.DiscardUnknown(m)
}

var xxx_messageInfo_FieldOptions proto.InternalMessageInfo

const Default_FieldOptions_Ctype FieldOptions_CType = FieldOptions_STRING
const Default_FieldOptions_Jstype FieldOptions_JSType = FieldOptions_JS_NORMAL
const Default_FieldOptions_Lazy bool = false
const Default_FieldOptions_Deprecated bool = false
const Default_FieldOptions_Weak bool = false

func (m *FieldOptions) GetCtype() FieldOptions_CType {
	if m != nil && m.Ctype != nil {
		return *m.Ctype
	}
	return Default_FieldOptions_Ctype
}

func (m *FieldOptions) GetPacked() bool {
	if m != nil && m.Packed != nil {
		return *m.Packed
	}
	return false
}

func (m *FieldOptions) GetJstype() FieldOptions_JSType {
	if m != nil && m.Jstype != nil {
		return *m.Jstype
	}
	return Default_FieldOptions_Jstype
}

func (m *FieldOptions) GetLazy() bool {
	if m != nil && m.Lazy != nil {
		return *m.Lazy
	}
	return Default_FieldOptions_Lazy
}

func (m *FieldOptions) GetDeprecated() bool {
	if m != nil && m.Deprecated != nil {
		return *m.Deprecated
	}
	return Default_FieldOptions_Deprecated
}

func (m *FieldOptions) GetWeak() bool {
	if m != nil && m.Weak != nil {
		return *m.Weak
	}
	return Default_FieldOptions_Weak
}

func (m *FieldOptions) GetUninterpretedOption() []*UninterpretedOption {
	if m != nil {
		return m.UninterpretedOption
	}
	return nil
}

type OneofOptions struct {
	// The parser stores options it doesn't recognize here. See above.
	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
	XXX_NoUnkeyedLiteral         struct{}               `json:"-"`
	proto.XXX_InternalExtensions `json:"-"`
	XXX_unrecognized             []byte `json:"-"`
	XXX_sizecache                int32  `json:"-"`
}

func (m *OneofOptions) Reset()         { *m = OneofOptions{} }
func (m *OneofOptions) String() string { return proto.CompactTextString(m) }
func (*OneofOptions) ProtoMessage()    {}
func (*OneofOptions) Descriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{13}
}

var extRange_OneofOptions = []proto.ExtensionRange{
	{Start: 1000, End: 536870911},
}

func (*OneofOptions) ExtensionRangeArray() []proto.ExtensionRange {
	return extRange_OneofOptions
}

func (m *OneofOptions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_OneofOptions.Unmarshal(m, b)
}
func (m *OneofOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_OneofOptions.Marshal(b, m, deterministic)
}
func (m *OneofOptions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_OneofOptions.Merge(m, src)
}
func (m *OneofOptions) XXX_Size() int {
	return xxx_messageInfo_OneofOptions.Size(m)
}
func (m *OneofOptions) XXX_DiscardUnknown() {
	xxx_messageInfo_OneofOptions.DiscardUnknown(m)
}

var xxx_messageInfo_OneofOptions proto.InternalMessageInfo

func (m *OneofOptions) GetUninterpretedOption() []*UninterpretedOption {
	if m != nil {
		return m.UninterpretedOption
	}
	return nil
}

type EnumOptions struct {
	// Set this option to true to allow mapping different tag names to the same
	// value.
	AllowAlias *bool `protobuf:"varint,2,opt,name=allow_alias,json=allowAlias" json:"allow_alias,omitempty"`
	// Is this enum deprecated?
	// Depending on the target platform, this can emit Deprecated annotations
	// for the enum, or it will be completely ignored; in the very least, this
	// is a formalization for deprecating enums.
	Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
	// The parser stores options it doesn't recognize here. See above.
	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
	XXX_NoUnkeyedLiteral         struct{}               `json:"-"`
	proto.XXX_InternalExtensions `json:"-"`
	XXX_unrecognized             []byte `json:"-"`
	XXX_sizecache                int32  `json:"-"`
}

func (m *EnumOptions) Reset()         { *m = EnumOptions{} }
func (m *EnumOptions) String() string { return proto.CompactTextString(m) }
func (*EnumOptions) ProtoMessage()    {}
func (*EnumOptions) Descriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{14}
}

var extRange_EnumOptions = []proto.ExtensionRange{
	{Start: 1000, End: 536870911},
}

func (*EnumOptions) ExtensionRangeArray() []proto.ExtensionRange {
	return extRange_EnumOptions
}

func (m *EnumOptions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_EnumOptions.Unmarshal(m, b)
}
func (m *EnumOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_EnumOptions.Marshal(b, m, deterministic)
}
func (m *EnumOptions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_EnumOptions.Merge(m, src)
}
func (m *EnumOptions) XXX_Size() int {
	return xxx_messageInfo_EnumOptions.Size(m)
}
func (m *EnumOptions) XXX_DiscardUnknown() {
	xxx_messageInfo_EnumOptions.DiscardUnknown(m)
}

var xxx_messageInfo_EnumOptions proto.InternalMessageInfo

const Default_EnumOptions_Deprecated bool = false

func (m *EnumOptions) GetAllowAlias() bool {
	if m != nil && m.AllowAlias != nil {
		return *m.AllowAlias
	}
	return false
}

func (m *EnumOptions) GetDeprecated() bool {
	if m != nil && m.Deprecated != nil {
		return *m.Deprecated
	}
	return Default_EnumOptions_Deprecated
}

func (m *EnumOptions) GetUninterpretedOption() []*UninterpretedOption {
	if m != nil {
		return m.UninterpretedOption
	}
	return nil
}

type EnumValueOptions struct {
	// Is this enum value deprecated?
	// Depending on the target platform, this can emit Deprecated annotations
	// for the enum value, or it will be completely ignored; in the very least,
	// this is a formalization for deprecating enum values.
	Deprecated *bool `protobuf:"varint,1,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
	// The parser stores options it doesn't recognize here. See above.
	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
	XXX_NoUnkeyedLiteral         struct{}               `json:"-"`
	proto.XXX_InternalExtensions `json:"-"`
	XXX_unrecognized             []byte `json:"-"`
	XXX_sizecache                int32  `json:"-"`
}

func (m *EnumValueOptions) Reset()         { *m = EnumValueOptions{} }
func (m *EnumValueOptions) String() string { return proto.CompactTextString(m) }
func (*EnumValueOptions) ProtoMessage()    {}
func (*EnumValueOptions) Descriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{15}
}

var extRange_EnumValueOptions = []proto.ExtensionRange{
	{Start: 1000, End: 536870911},
}

func (*EnumValueOptions) ExtensionRangeArray() []proto.ExtensionRange {
	return extRange_EnumValueOptions
}

func (m *EnumValueOptions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_EnumValueOptions.Unmarshal(m, b)
}
func (m *EnumValueOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_EnumValueOptions.Marshal(b, m, deterministic)
}
func (m *EnumValueOptions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_EnumValueOptions.Merge(m, src)
}
func (m *EnumValueOptions) XXX_Size() int {
	return xxx_messageInfo_EnumValueOptions.Size(m)
}
func (m *EnumValueOptions) XXX_DiscardUnknown() {
	xxx_messageInfo_EnumValueOptions.DiscardUnknown(m)
}

var xxx_messageInfo_EnumValueOptions proto.InternalMessageInfo

const Default_EnumValueOptions_Deprecated bool = false

func (m *EnumValueOptions) GetDeprecated() bool {
	if m != nil && m.Deprecated != nil {
		return *m.Deprecated
	}
	return Default_EnumValueOptions_Deprecated
}

func (m *EnumValueOptions) GetUninterpretedOption() []*UninterpretedOption {
	if m != nil {
		return m.UninterpretedOption
	}
	return nil
}

type ServiceOptions struct {
	// Is this service deprecated?
	// Depending on the target platform, this can emit Deprecated annotations
	// for the service, or it will be completely ignored; in the very least,
	// this is a formalization for deprecating services.
	Deprecated *bool `protobuf:"varint,33,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
	// The parser stores options it doesn't recognize here. See above.
	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
	XXX_NoUnkeyedLiteral         struct{}               `json:"-"`
	proto.XXX_InternalExtensions `json:"-"`
	XXX_unrecognized             []byte `json:"-"`
	XXX_sizecache                int32  `json:"-"`
}

func (m *ServiceOptions) Reset()         { *m = ServiceOptions{} }
func (m *ServiceOptions) String() string { return proto.CompactTextString(m) }
func (*ServiceOptions) ProtoMessage()    {}
func (*ServiceOptions) Descriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{16}
}

var extRange_ServiceOptions = []proto.ExtensionRange{
	{Start: 1000, End: 536870911},
}

func (*ServiceOptions) ExtensionRangeArray() []proto.ExtensionRange {
	return extRange_ServiceOptions
}

func (m *ServiceOptions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ServiceOptions.Unmarshal(m, b)
}
func (m *ServiceOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ServiceOptions.Marshal(b, m, deterministic)
}
func (m *ServiceOptions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ServiceOptions.Merge(m, src)
}
func (m *ServiceOptions) XXX_Size() int {
	return xxx_messageInfo_ServiceOptions.Size(m)
}
func (m *ServiceOptions) XXX_DiscardUnknown() {
	xxx_messageInfo_ServiceOptions.DiscardUnknown(m)
}

var xxx_messageInfo_ServiceOptions proto.InternalMessageInfo

const Default_ServiceOptions_Deprecated bool = false

func (m *ServiceOptions) GetDeprecated() bool {
	if m != nil && m.Deprecated != nil {
		return *m.Deprecated
	}
	return Default_ServiceOptions_Deprecated
}

func (m *ServiceOptions) GetUninterpretedOption() []*UninterpretedOption {
	if m != nil {
		return m.UninterpretedOption
	}
	return nil
}

type MethodOptions struct {
	// Is this method deprecated?
	// Depending on the target platform, this can emit Deprecated annotations
	// for the method, or it will be completely ignored; in the very least,
	// this is a formalization for deprecating methods.
	Deprecated       *bool                           `protobuf:"varint,33,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
	IdempotencyLevel *MethodOptions_IdempotencyLevel `protobuf:"varint,34,opt,name=idempotency_level,json=idempotencyLevel,enum=google.protobuf.MethodOptions_IdempotencyLevel,def=0" json:"idempotency_level,omitempty"`
	// The parser stores options it doesn't recognize here. See above.
	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
	XXX_NoUnkeyedLiteral         struct{}               `json:"-"`
	proto.XXX_InternalExtensions `json:"-"`
	XXX_unrecognized             []byte `json:"-"`
	XXX_sizecache                int32  `json:"-"`
}

func (m *MethodOptions) Reset()         { *m = MethodOptions{} }
func (m *MethodOptions) String() string { return proto.CompactTextString(m) }
func (*MethodOptions) ProtoMessage()    {}
func (*MethodOptions) Descriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{17}
}

var extRange_MethodOptions = []proto.ExtensionRange{
	{Start: 1000, End: 536870911},
}

func (*MethodOptions) ExtensionRangeArray() []proto.ExtensionRange {
	return extRange_MethodOptions
}

func (m *MethodOptions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_MethodOptions.Unmarshal(m, b)
}
func (m *MethodOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_MethodOptions.Marshal(b, m, deterministic)
}
func (m *MethodOptions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MethodOptions.Merge(m, src)
}
func (m *MethodOptions) XXX_Size() int {
	return xxx_messageInfo_MethodOptions.Size(m)
}
func (m *MethodOptions) XXX_DiscardUnknown() {
	xxx_messageInfo_MethodOptions.DiscardUnknown(m)
}

var xxx_messageInfo_MethodOptions proto.InternalMessageInfo

const Default_MethodOptions_Deprecated bool = false
const Default_MethodOptions_IdempotencyLevel MethodOptions_IdempotencyLevel = MethodOptions_IDEMPOTENCY_UNKNOWN

func (m *MethodOptions) GetDeprecated() bool {
	if m != nil && m.Deprecated != nil {
		return *m.Deprecated
	}
	return Default_MethodOptions_Deprecated
}

func (m *MethodOptions) GetIdempotencyLevel() MethodOptions_IdempotencyLevel {
	if m != nil && m.IdempotencyLevel != nil {
		return *m.IdempotencyLevel
	}
	return Default_MethodOptions_IdempotencyLevel
}

func (m *MethodOptions) GetUninterpretedOption() []*UninterpretedOption {
	if m != nil {
		return m.UninterpretedOption
	}
	return nil
}

// A message representing a option the parser does not recognize. This only
// appears in options protos created by the compiler::Parser class.
// DescriptorPool resolves these when building Descriptor objects. Therefore,
// options protos in descriptor objects (e.g. returned by Descriptor::options(),
// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions
// in them.
type UninterpretedOption struct {
	Name []*UninterpretedOption_NamePart `protobuf:"bytes,2,rep,name=name" json:"name,omitempty"`
	// The value of the uninterpreted option, in whatever type the tokenizer
	// identified it as during parsing. Exactly one of these should be set.
	IdentifierValue      *string  `protobuf:"bytes,3,opt,name=identifier_value,json=identifierValue" json:"identifier_value,omitempty"`
	PositiveIntValue     *uint64  `protobuf:"varint,4,opt,name=positive_int_value,json=positiveIntValue" json:"positive_int_value,omitempty"`
	NegativeIntValue     *int64   `protobuf:"varint,5,opt,name=negative_int_value,json=negativeIntValue" json:"negative_int_value,omitempty"`
	DoubleValue          *float64 `protobuf:"fixed64,6,opt,name=double_value,json=doubleValue" json:"double_value,omitempty"`
	StringValue          []byte   `protobuf:"bytes,7,opt,name=string_value,json=stringValue" json:"string_value,omitempty"`
	AggregateValue       *string  `protobuf:"bytes,8,opt,name=aggregate_value,json=aggregateValue" json:"aggregate_value,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *UninterpretedOption) Reset()         { *m = UninterpretedOption{} }
func (m *UninterpretedOption) String() string { return proto.CompactTextString(m) }
func (*UninterpretedOption) ProtoMessage()    {}
func (*UninterpretedOption) Descriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{18}
}
func (m *UninterpretedOption) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_UninterpretedOption.Unmarshal(m, b)
}
func (m *UninterpretedOption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_UninterpretedOption.Marshal(b, m, deterministic)
}
func (m *UninterpretedOption) XXX_Merge(src proto.Message) {
	xxx_messageInfo_UninterpretedOption.Merge(m, src)
}
func (m *UninterpretedOption) XXX_Size() int {
	return xxx_messageInfo_UninterpretedOption.Size(m)
}
func (m *UninterpretedOption) XXX_DiscardUnknown() {
	xxx_messageInfo_UninterpretedOption.DiscardUnknown(m)
}

var xxx_messageInfo_UninterpretedOption proto.InternalMessageInfo

func (m *UninterpretedOption) GetName() []*UninterpretedOption_NamePart {
	if m != nil {
		return m.Name
	}
	return nil
}

func (m *UninterpretedOption) GetIdentifierValue() string {
	if m != nil && m.IdentifierValue != nil {
		return *m.IdentifierValue
	}
	return ""
}

func (m *UninterpretedOption) GetPositiveIntValue() uint64 {
	if m != nil && m.PositiveIntValue != nil {
		return *m.PositiveIntValue
	}
	return 0
}

func (m *UninterpretedOption) GetNegativeIntValue() int64 {
	if m != nil && m.NegativeIntValue != nil {
		return *m.NegativeIntValue
	}
	return 0
}

func (m *UninterpretedOption) GetDoubleValue() float64 {
	if m != nil && m.DoubleValue != nil {
		return *m.DoubleValue
	}
	return 0
}

func (m *UninterpretedOption) GetStringValue() []byte {
	if m != nil {
		return m.StringValue
	}
	return nil
}

func (m *UninterpretedOption) GetAggregateValue() string {
	if m != nil && m.AggregateValue != nil {
		return *m.AggregateValue
	}
	return ""
}

// The name of the uninterpreted option.  Each string represents a segment in
// a dot-separated name.  is_extension is true iff a segment represents an
// extension (denoted with parentheses in options specs in .proto files).
// E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents
// "foo.(bar.baz).qux".
type UninterpretedOption_NamePart struct {
	NamePart             *string  `protobuf:"bytes,1,req,name=name_part,json=namePart" json:"name_part,omitempty"`
	IsExtension          *bool    `protobuf:"varint,2,req,name=is_extension,json=isExtension" json:"is_extension,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *UninterpretedOption_NamePart) Reset()         { *m = UninterpretedOption_NamePart{} }
func (m *UninterpretedOption_NamePart) String() string { return proto.CompactTextString(m) }
func (*UninterpretedOption_NamePart) ProtoMessage()    {}
func (*UninterpretedOption_NamePart) Descriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{18, 0}
}
func (m *UninterpretedOption_NamePart) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_UninterpretedOption_NamePart.Unmarshal(m, b)
}
func (m *UninterpretedOption_NamePart) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_UninterpretedOption_NamePart.Marshal(b, m, deterministic)
}
func (m *UninterpretedOption_NamePart) XXX_Merge(src proto.Message) {
	xxx_messageInfo_UninterpretedOption_NamePart.Merge(m, src)
}
func (m *UninterpretedOption_NamePart) XXX_Size() int {
	return xxx_messageInfo_UninterpretedOption_NamePart.Size(m)
}
func (m *UninterpretedOption_NamePart) XXX_DiscardUnknown() {
	xxx_messageInfo_UninterpretedOption_NamePart.DiscardUnknown(m)
}

var xxx_messageInfo_UninterpretedOption_NamePart proto.InternalMessageInfo

func (m *UninterpretedOption_NamePart) GetNamePart() string {
	if m != nil && m.NamePart != nil {
		return *m.NamePart
	}
	return ""
}

func (m *UninterpretedOption_NamePart) GetIsExtension() bool {
	if m != nil && m.IsExtension != nil {
		return *m.IsExtension
	}
	return false
}

// Encapsulates information about the original source file from which a
// FileDescriptorProto was generated.
type SourceCodeInfo struct {
	// A Location identifies a piece of source code in a .proto file which
	// corresponds to a particular definition.  This information is intended
	// to be useful to IDEs, code indexers, documentation generators, and similar
	// tools.
	//
	// For example, say we have a file like:
	//   message Foo {
	//     optional string foo = 1;
	//   }
	// Let's look at just the field definition:
	//   optional string foo = 1;
	//   ^       ^^     ^^  ^  ^^^
	//   a       bc     de  f  ghi
	// We have the following locations:
	//   span   path               represents
	//   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
	//   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
	//   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
	//   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
	//   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
	//
	// Notes:
	// - A location may refer to a repeated field itself (i.e. not to any
	//   particular index within it).  This is used whenever a set of elements are
	//   logically enclosed in a single code segment.  For example, an entire
	//   extend block (possibly containing multiple extension definitions) will
	//   have an outer location whose path refers to the "extensions" repeated
	//   field without an index.
	// - Multiple locations may have the same path.  This happens when a single
	//   logical declaration is spread out across multiple places.  The most
	//   obvious example is the "extend" block again -- there may be multiple
	//   extend blocks in the same scope, each of which will have the same path.
	// - A location's span is not always a subset of its parent's span.  For
	//   example, the "extendee" of an extension declaration appears at the
	//   beginning of the "extend" block and is shared by all extensions within
	//   the block.
	// - Just because a location's span is a subset of some other location's span
	//   does not mean that it is a descendant.  For example, a "group" defines
	//   both a type and a field in a single declaration.  Thus, the locations
	//   corresponding to the type and field and their components will overlap.
	// - Code which tries to interpret locations should probably be designed to
	//   ignore those that it doesn't understand, as more types of locations could
	//   be recorded in the future.
	Location             []*SourceCodeInfo_Location `protobuf:"bytes,1,rep,name=location" json:"location,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
	XXX_unrecognized     []byte                     `json:"-"`
	XXX_sizecache        int32                      `json:"-"`
}

func (m *SourceCodeInfo) Reset()         { *m = SourceCodeInfo{} }
func (m *SourceCodeInfo) String() string { return proto.CompactTextString(m) }
func (*SourceCodeInfo) ProtoMessage()    {}
func (*SourceCodeInfo) Descriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{19}
}
func (m *SourceCodeInfo) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_SourceCodeInfo.Unmarshal(m, b)
}
func (m *SourceCodeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_SourceCodeInfo.Marshal(b, m, deterministic)
}
func (m *SourceCodeInfo) XXX_Merge(src proto.Message) {
	xxx_messageInfo_SourceCodeInfo.Merge(m, src)
}
func (m *SourceCodeInfo) XXX_Size() int {
	return xxx_messageInfo_SourceCodeInfo.Size(m)
}
func (m *SourceCodeInfo) XXX_DiscardUnknown() {
	xxx_messageInfo_SourceCodeInfo.DiscardUnknown(m)
}

var xxx_messageInfo_SourceCodeInfo proto.InternalMessageInfo

func (m *SourceCodeInfo) GetLocation() []*SourceCodeInfo_Location {
	if m != nil {
		return m.Location
	}
	return nil
}

type SourceCodeInfo_Location struct {
	// Identifies which part of the FileDescriptorProto was defined at this
	// location.
	//
	// Each element is a field number or an index.  They form a path from
	// the root FileDescriptorProto to the place where the definition.  For
	// example, this path:
	//   [ 4, 3, 2, 7, 1 ]
	// refers to:
	//   file.message_type(3)  // 4, 3
	//       .field(7)         // 2, 7
	//       .name()           // 1
	// This is because FileDescriptorProto.message_type has field number 4:
	//   repeated DescriptorProto message_type = 4;
	// and DescriptorProto.field has field number 2:
	//   repeated FieldDescriptorProto field = 2;
	// and FieldDescriptorProto.name has field number 1:
	//   optional string name = 1;
	//
	// Thus, the above path gives the location of a field name.  If we removed
	// the last element:
	//   [ 4, 3, 2, 7 ]
	// this path refers to the whole field declaration (from the beginning
	// of the label to the terminating semicolon).
	Path []int32 `protobuf:"varint,1,rep,packed,name=path" json:"path,omitempty"`
	// Always has exactly three or four elements: start line, start column,
	// end line (optional, otherwise assumed same as start line), end column.
	// These are packed into a single field for efficiency.  Note that line
	// and column numbers are zero-based -- typically you will want to add
	// 1 to each before displaying to a user.
	Span []int32 `protobuf:"varint,2,rep,packed,name=span" json:"span,omitempty"`
	// If this SourceCodeInfo represents a complete declaration, these are any
	// comments appearing before and after the declaration which appear to be
	// attached to the declaration.
	//
	// A series of line comments appearing on consecutive lines, with no other
	// tokens appearing on those lines, will be treated as a single comment.
	//
	// leading_detached_comments will keep paragraphs of comments that appear
	// before (but not connected to) the current element. Each paragraph,
	// separated by empty lines, will be one comment element in the repeated
	// field.
	//
	// Only the comment content is provided; comment markers (e.g. //) are
	// stripped out.  For block comments, leading whitespace and an asterisk
	// will be stripped from the beginning of each line other than the first.
	// Newlines are included in the output.
	//
	// Examples:
	//
	//   optional int32 foo = 1;  // Comment attached to foo.
	//   // Comment attached to bar.
	//   optional int32 bar = 2;
	//
	//   optional string baz = 3;
	//   // Comment attached to baz.
	//   // Another line attached to baz.
	//
	//   // Comment attached to qux.
	//   //
	//   // Another line attached to qux.
	//   optional double qux = 4;
	//
	//   // Detached comment for corge. This is not leading or trailing comments
	//   // to qux or corge because there are blank lines separating it from
	//   // both.
	//
	//   // Detached comment for corge paragraph 2.
	//
	//   optional string corge = 5;
	//   /* Block comment attached
	//    * to corge.  Leading asterisks
	//    * will be removed. */
	//   /* Block comment attached to
	//    * grault. */
	//   optional int32 grault = 6;
	//
	//   // ignored detached comments.
	LeadingComments         *string  `protobuf:"bytes,3,opt,name=leading_comments,json=leadingComments" json:"leading_comments,omitempty"`
	TrailingComments        *string  `protobuf:"bytes,4,opt,name=trailing_comments,json=trailingComments" json:"trailing_comments,omitempty"`
	LeadingDetachedComments []string `protobuf:"bytes,6,rep,name=leading_detached_comments,json=leadingDetachedComments" json:"leading_detached_comments,omitempty"`
	XXX_NoUnkeyedLiteral    struct{} `json:"-"`
	XXX_unrecognized        []byte   `json:"-"`
	XXX_sizecache           int32    `json:"-"`
}

func (m *SourceCodeInfo_Location) Reset()         { *m = SourceCodeInfo_Location{} }
func (m *SourceCodeInfo_Location) String() string { return proto.CompactTextString(m) }
func (*SourceCodeInfo_Location) ProtoMessage()    {}
func (*SourceCodeInfo_Location) Descriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{19, 0}
}
func (m *SourceCodeInfo_Location) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_SourceCodeInfo_Location.Unmarshal(m, b)
}
func (m *SourceCodeInfo_Location) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_SourceCodeInfo_Location.Marshal(b, m, deterministic)
}
func (m *SourceCodeInfo_Location) XXX_Merge(src proto.Message) {
	xxx_messageInfo_SourceCodeInfo_Location.Merge(m, src)
}
func (m *SourceCodeInfo_Location) XXX_Size() int {
	return xxx_messageInfo_SourceCodeInfo_Location.Size(m)
}
func (m *SourceCodeInfo_Location) XXX_DiscardUnknown() {
	xxx_messageInfo_SourceCodeInfo_Location.DiscardUnknown(m)
}

var xxx_messageInfo_SourceCodeInfo_Location proto.InternalMessageInfo

func (m *SourceCodeInfo_Location) GetPath() []int32 {
	if m != nil {
		return m.Path
	}
	return nil
}

func (m *SourceCodeInfo_Location) GetSpan() []int32 {
	if m != nil {
		return m.Span
	}
	return nil
}

func (m *SourceCodeInfo_Location) GetLeadingComments() string {
	if m != nil && m.LeadingComments != nil {
		return *m.LeadingComments
	}
	return ""
}

func (m *SourceCodeInfo_Location) GetTrailingComments() string {
	if m != nil && m.TrailingComments != nil {
		return *m.TrailingComments
	}
	return ""
}

func (m *SourceCodeInfo_Location) GetLeadingDetachedComments() []string {
	if m != nil {
		return m.LeadingDetachedComments
	}
	return nil
}

// Describes the relationship between generated code and its original source
// file. A GeneratedCodeInfo message is associated with only one generated
// source file, but may contain references to different source .proto files.
type GeneratedCodeInfo struct {
	// An Annotation connects some span of text in generated code to an element
	// of its generating .proto file.
	Annotation           []*GeneratedCodeInfo_Annotation `protobuf:"bytes,1,rep,name=annotation" json:"annotation,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
	XXX_unrecognized     []byte                          `json:"-"`
	XXX_sizecache        int32                           `json:"-"`
}

func (m *GeneratedCodeInfo) Reset()         { *m = GeneratedCodeInfo{} }
func (m *GeneratedCodeInfo) String() string { return proto.CompactTextString(m) }
func (*GeneratedCodeInfo) ProtoMessage()    {}
func (*GeneratedCodeInfo) Descriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{20}
}
func (m *GeneratedCodeInfo) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GeneratedCodeInfo.Unmarshal(m, b)
}
func (m *GeneratedCodeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GeneratedCodeInfo.Marshal(b, m, deterministic)
}
func (m *GeneratedCodeInfo) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GeneratedCodeInfo.Merge(m, src)
}
func (m *GeneratedCodeInfo) XXX_Size() int {
	return xxx_messageInfo_GeneratedCodeInfo.Size(m)
}
func (m *GeneratedCodeInfo) XXX_DiscardUnknown() {
	xxx_messageInfo_GeneratedCodeInfo.DiscardUnknown(m)
}

var xxx_messageInfo_GeneratedCodeInfo proto.InternalMessageInfo

func (m *GeneratedCodeInfo) GetAnnotation() []*GeneratedCodeInfo_Annotation {
	if m != nil {
		return m.Annotation
	}
	return nil
}

type GeneratedCodeInfo_Annotation struct {
	// Identifies the element in the original source .proto file. This field
	// is formatted the same as SourceCodeInfo.Location.path.
	Path []int32 `protobuf:"varint,1,rep,packed,name=path" json:"path,omitempty"`
	// Identifies the filesystem path to the original source .proto.
	SourceFile *string `protobuf:"bytes,2,opt,name=source_file,json=sourceFile" json:"source_file,omitempty"`
	// Identifies the starting offset in bytes in the generated code
	// that relates to the identified object.
	Begin *int32 `protobuf:"varint,3,opt,name=begin" json:"begin,omitempty"`
	// Identifies the ending offset in bytes in the generated code that
	// relates to the identified offset. The end offset should be one past
	// the last relevant byte (so the length of the text = end - begin).
	End                  *int32   `protobuf:"varint,4,opt,name=end" json:"end,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *GeneratedCodeInfo_Annotation) Reset()         { *m = GeneratedCodeInfo_Annotation{} }
func (m *GeneratedCodeInfo_Annotation) String() string { return proto.CompactTextString(m) }
func (*GeneratedCodeInfo_Annotation) ProtoMessage()    {}
func (*GeneratedCodeInfo_Annotation) Descriptor() ([]byte, []int) {
	return fileDescriptor_308767df5ffe18af, []int{20, 0}
}
func (m *GeneratedCodeInfo_Annotation) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GeneratedCodeInfo_Annotation.Unmarshal(m, b)
}
func (m *GeneratedCodeInfo_Annotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GeneratedCodeInfo_Annotation.Marshal(b, m, deterministic)
}
func (m *GeneratedCodeInfo_Annotation) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GeneratedCodeInfo_Annotation.Merge(m, src)
}
func (m *GeneratedCodeInfo_Annotation) XXX_Size() int {
	return xxx_messageInfo_GeneratedCodeInfo_Annotation.Size(m)
}
func (m *GeneratedCodeInfo_Annotation) XXX_DiscardUnknown() {
	xxx_messageInfo_GeneratedCodeInfo_Annotation.DiscardUnknown(m)
}

var xxx_messageInfo_GeneratedCodeInfo_Annotation proto.InternalMessageInfo

func (m *GeneratedCodeInfo_Annotation) GetPath() []int32 {
	if m != nil {
		return m.Path
	}
	return nil
}

func (m *GeneratedCodeInfo_Annotation) GetSourceFile() string {
	if m != nil && m.SourceFile != nil {
		return *m.SourceFile
	}
	return ""
}

func (m *GeneratedCodeInfo_Annotation) GetBegin() int32 {
	if m != nil && m.Begin != nil {
		return *m.Begin
	}
	return 0
}

func (m *GeneratedCodeInfo_Annotation) GetEnd() int32 {
	if m != nil && m.End != nil {
		return *m.End
	}
	return 0
}

func init() {
	proto.RegisterEnum("google.protobuf.FieldDescriptorProto_Type", FieldDescriptorProto_Type_name, FieldDescriptorProto_Type_value)
	proto.RegisterEnum("google.protobuf.FieldDescriptorProto_Label", FieldDescriptorProto_Label_name, FieldDescriptorProto_Label_value)
	proto.RegisterEnum("google.protobuf.FileOptions_OptimizeMode", FileOptions_OptimizeMode_name, FileOptions_OptimizeMode_value)
	proto.RegisterEnum("google.protobuf.FieldOptions_CType", FieldOptions_CType_name, FieldOptions_CType_value)
	proto.RegisterEnum("google.protobuf.FieldOptions_JSType", FieldOptions_JSType_name, FieldOptions_JSType_value)
	proto.RegisterEnum("google.protobuf.MethodOptions_IdempotencyLevel", MethodOptions_IdempotencyLevel_name, MethodOptions_IdempotencyLevel_value)
	proto.RegisterType((*FileDescriptorSet)(nil), "google.protobuf.FileDescriptorSet")
	proto.RegisterType((*FileDescriptorProto)(nil), "google.protobuf.FileDescriptorProto")
	proto.RegisterType((*DescriptorProto)(nil), "google.protobuf.DescriptorProto")
	proto.RegisterType((*DescriptorProto_ExtensionRange)(nil), "google.protobuf.DescriptorProto.ExtensionRange")
	proto.RegisterType((*DescriptorProto_ReservedRange)(nil), "google.protobuf.DescriptorProto.ReservedRange")
	proto.RegisterType((*ExtensionRangeOptions)(nil), "google.protobuf.ExtensionRangeOptions")
	proto.RegisterType((*FieldDescriptorProto)(nil), "google.protobuf.FieldDescriptorProto")
	proto.RegisterType((*OneofDescriptorProto)(nil), "google.protobuf.OneofDescriptorProto")
	proto.RegisterType((*EnumDescriptorProto)(nil), "google.protobuf.EnumDescriptorProto")
	proto.RegisterType((*EnumDescriptorProto_EnumReservedRange)(nil), "google.protobuf.EnumDescriptorProto.EnumReservedRange")
	proto.RegisterType((*EnumValueDescriptorProto)(nil), "google.protobuf.EnumValueDescriptorProto")
	proto.RegisterType((*ServiceDescriptorProto)(nil), "google.protobuf.ServiceDescriptorProto")
	proto.RegisterType((*MethodDescriptorProto)(nil), "google.protobuf.MethodDescriptorProto")
	proto.RegisterType((*FileOptions)(nil), "google.protobuf.FileOptions")
	proto.RegisterType((*MessageOptions)(nil), "google.protobuf.MessageOptions")
	proto.RegisterType((*FieldOptions)(nil), "google.protobuf.FieldOptions")
	proto.RegisterType((*OneofOptions)(nil), "google.protobuf.OneofOptions")
	proto.RegisterType((*EnumOptions)(nil), "google.protobuf.EnumOptions")
	proto.RegisterType((*EnumValueOptions)(nil), "google.protobuf.EnumValueOptions")
	proto.RegisterType((*ServiceOptions)(nil), "google.protobuf.ServiceOptions")
	proto.RegisterType((*MethodOptions)(nil), "google.protobuf.MethodOptions")
	proto.RegisterType((*UninterpretedOption)(nil), "google.protobuf.UninterpretedOption")
	proto.RegisterType((*UninterpretedOption_NamePart)(nil), "google.protobuf.UninterpretedOption.NamePart")
	proto.RegisterType((*SourceCodeInfo)(nil), "google.protobuf.SourceCodeInfo")
	proto.RegisterType((*SourceCodeInfo_Location)(nil), "google.protobuf.SourceCodeInfo.Location")
	proto.RegisterType((*GeneratedCodeInfo)(nil), "google.protobuf.GeneratedCodeInfo")
	proto.RegisterType((*GeneratedCodeInfo_Annotation)(nil), "google.protobuf.GeneratedCodeInfo.Annotation")
}

func init() { proto.RegisterFile("descriptor.proto", fileDescriptor_308767df5ffe18af) }

var fileDescriptor_308767df5ffe18af = []byte{
	// 2522 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0xcd, 0x6f, 0xdb, 0xc8,
	0x15, 0x5f, 0x7d, 0x5a, 0x7a, 0x92, 0x65, 0x7a, 0xec, 0x75, 0x18, 0xef, 0x47, 0x1c, 0xed, 0x66,
	0xe3, 0x24, 0xbb, 0xca, 0xc2, 0x49, 0x9c, 0xac, 0x53, 0x6c, 0x2b, 0x4b, 0x8c, 0x57, 0xa9, 0xbe,
	0x4a, 0xc9, 0xdd, 0x64, 0x8b, 0x82, 0x18, 0x93, 0x23, 0x89, 0x09, 0x45, 0x72, 0x49, 0x2a, 0x89,
	0x83, 0x1e, 0x02, 0xf4, 0x54, 0xa0, 0x7f, 0x40, 0x51, 0x14, 0x3d, 0xf4, 0xb2, 0x40, 0xff, 0x80,
	0x02, 0xed, 0xbd, 0xd7, 0x02, 0xbd, 0xf7, 0x50, 0xa0, 0x05, 0xda, 0x3f, 0xa1, 0xc7, 0x62, 0x66,
	0x48, 0x8a, 0xd4, 0x47, 0xe2, 0x5d, 0x20, 0xd9, 0x93, 0x3d, 0xef, 0xfd, 0xde, 0x9b, 0x37, 0x8f,
	0xbf, 0x79, 0xf3, 0x66, 0x04, 0x82, 0x46, 0x5c, 0xd5, 0xd1, 0x6d, 0xcf, 0x72, 0x2a, 0xb6, 0x63,
	0x79, 0x16, 0x5a, 0x1b, 0x5a, 0xd6, 0xd0, 0x20, 0x7c, 0x74, 0x32, 0x19, 0x94, 0x5b, 0xb0, 0x7e,
	0x4f, 0x37, 0x48, 0x3d, 0x04, 0xf6, 0x88, 0x87, 0xee, 0x40, 0x7a, 0xa0, 0x1b, 0x44, 0x4c, 0xec,
	0xa4, 0x76, 0x0b, 0x7b, 0x1f, 0x56, 0x66, 0x8c, 0x2a, 0x71, 0x8b, 0x2e, 0x15, 0xcb, 0xcc, 0xa2,
	0xfc, 0xef, 0x34, 0x6c, 0x2c, 0xd0, 0x22, 0x04, 0x69, 0x13, 0x8f, 0xa9, 0xc7, 0xc4, 0x6e, 0x5e,
	0x66, 0xff, 0x23, 0x11, 0x56, 0x6c, 0xac, 0x3e, 0xc6, 0x43, 0x22, 0x26, 0x99, 0x38, 0x18, 0xa2,
	0xf7, 0x01, 0x34, 0x62, 0x13, 0x53, 0x23, 0xa6, 0x7a, 0x2a, 0xa6, 0x76, 0x52, 0xbb, 0x79, 0x39,
	0x22, 0x41, 0xd7, 0x60, 0xdd, 0x9e, 0x9c, 0x18, 0xba, 0xaa, 0x44, 0x60, 0xb0, 0x93, 0xda, 0xcd,
	0xc8, 0x02, 0x57, 0xd4, 0xa7, 0xe0, 0xcb, 0xb0, 0xf6, 0x94, 0xe0, 0xc7, 0x51, 0x68, 0x81, 0x41,
	0x4b, 0x54, 0x1c, 0x01, 0xd6, 0xa0, 0x38, 0x26, 0xae, 0x8b, 0x87, 0x44, 0xf1, 0x4e, 0x6d, 0x22,
	0xa6, 0xd9, 0xea, 0x77, 0xe6, 0x56, 0x3f, 0xbb, 0xf2, 0x82, 0x6f, 0xd5, 0x3f, 0xb5, 0x09, 0xaa,
	0x42, 0x9e, 0x98, 0x93, 0x31, 0xf7, 0x90, 0x59, 0x92, 0x3f, 0xc9, 0x9c, 0x8c, 0x67, 0xbd, 0xe4,
	0xa8, 0x99, 0xef, 0x62, 0xc5, 0x25, 0xce, 0x13, 0x5d, 0x25, 0x62, 0x96, 0x39, 0xb8, 0x3c, 0xe7,
	0xa0, 0xc7, 0xf5, 0xb3, 0x3e, 0x02, 0x3b, 0x54, 0x83, 0x3c, 0x79, 0xe6, 0x11, 0xd3, 0xd5, 0x2d,
	0x53, 0x5c, 0x61, 0x4e, 0x2e, 0x2d, 0xf8, 0x8a, 0xc4, 0xd0, 0x66, 0x5d, 0x4c, 0xed, 0xd0, 0x3e,
	0xac, 0x58, 0xb6, 0xa7, 0x5b, 0xa6, 0x2b, 0xe6, 0x76, 0x12, 0xbb, 0x85, 0xbd, 0x77, 0x17, 0x12,
	0xa1, 0xc3, 0x31, 0x72, 0x00, 0x46, 0x0d, 0x10, 0x5c, 0x6b, 0xe2, 0xa8, 0x44, 0x51, 0x2d, 0x8d,
	0x28, 0xba, 0x39, 0xb0, 0xc4, 0x3c, 0x73, 0x70, 0x61, 0x7e, 0x21, 0x0c, 0x58, 0xb3, 0x34, 0xd2,
	0x30, 0x07, 0x96, 0x5c, 0x72, 0x63, 0x63, 0xb4, 0x05, 0x59, 0xf7, 0xd4, 0xf4, 0xf0, 0x33, 0xb1,
	0xc8, 0x18, 0xe2, 0x8f, 0xca, 0x7f, 0xce, 0xc2, 0xda, 0x59, 0x28, 0x76, 0x17, 0x32, 0x03, 0xba,
	0x4a, 0x31, 0xf9, 0x6d, 0x72, 0xc0, 0x6d, 0xe2, 0x49, 0xcc, 0x7e, 0xc7, 0x24, 0x56, 0xa1, 0x60,
	0x12, 0xd7, 0x23, 0x1a, 0x67, 0x44, 0xea, 0x8c, 0x9c, 0x02, 0x6e, 0x34, 0x4f, 0xa9, 0xf4, 0x77,
	0xa2, 0xd4, 0x03, 0x58, 0x0b, 0x43, 0x52, 0x1c, 0x6c, 0x0e, 0x03, 0x6e, 0x5e, 0x7f, 0x55, 0x24,
	0x15, 0x29, 0xb0, 0x93, 0xa9, 0x99, 0x5c, 0x22, 0xb1, 0x31, 0xaa, 0x03, 0x58, 0x26, 0xb1, 0x06,
	0x8a, 0x46, 0x54, 0x43, 0xcc, 0x2d, 0xc9, 0x52, 0x87, 0x42, 0xe6, 0xb2, 0x64, 0x71, 0xa9, 0x6a,
	0xa0, 0xcf, 0xa6, 0x54, 0x5b, 0x59, 0xc2, 0x94, 0x16, 0xdf, 0x64, 0x73, 0x6c, 0x3b, 0x86, 0x92,
	0x43, 0x28, 0xef, 0x89, 0xe6, 0xaf, 0x2c, 0xcf, 0x82, 0xa8, 0xbc, 0x72, 0x65, 0xb2, 0x6f, 0xc6,
	0x17, 0xb6, 0xea, 0x44, 0x87, 0xe8, 0x03, 0x08, 0x05, 0x0a, 0xa3, 0x15, 0xb0, 0x2a, 0x54, 0x0c,
	0x84, 0x6d, 0x3c, 0x26, 0xdb, 0xcf, 0xa1, 0x14, 0x4f, 0x0f, 0xda, 0x84, 0x8c, 0xeb, 0x61, 0xc7,
	0x63, 0x2c, 0xcc, 0xc8, 0x7c, 0x80, 0x04, 0x48, 0x11, 0x53, 0x63, 0x55, 0x2e, 0x23, 0xd3, 0x7f,
	0xd1, 0x8f, 0xa6, 0x0b, 0x4e, 0xb1, 0x05, 0x7f, 0x34, 0xff, 0x45, 0x63, 0x9e, 0x67, 0xd7, 0xbd,
	0x7d, 0x1b, 0x56, 0x63, 0x0b, 0x38, 0xeb, 0xd4, 0xe5, 0x5f, 0xc0, 0xdb, 0x0b, 0x5d, 0xa3, 0x07,
	0xb0, 0x39, 0x31, 0x75, 0xd3, 0x23, 0x8e, 0xed, 0x10, 0xca, 0x58, 0x3e, 0x95, 0xf8, 0x9f, 0x95,
	0x25, 0x9c, 0x3b, 0x8e, 0xa2, 0xb9, 0x17, 0x79, 0x63, 0x32, 0x2f, 0xbc, 0x9a, 0xcf, 0xfd, 0x77,
	0x45, 0x78, 0xf1, 0xe2, 0xc5, 0x8b, 0x64, 0xf9, 0x37, 0x59, 0xd8, 0x5c, 0xb4, 0x67, 0x16, 0x6e,
	0xdf, 0x2d, 0xc8, 0x9a, 0x93, 0xf1, 0x09, 0x71, 0x58, 0x92, 0x32, 0xb2, 0x3f, 0x42, 0x55, 0xc8,
	0x18, 0xf8, 0x84, 0x18, 0x62, 0x7a, 0x27, 0xb1, 0x5b, 0xda, 0xbb, 0x76, 0xa6, 0x5d, 0x59, 0x69,
	0x52, 0x13, 0x99, 0x5b, 0xa2, 0xcf, 0x21, 0xed, 0x97, 0x68, 0xea, 0xe1, 0xea, 0xd9, 0x3c, 0xd0,
	0xbd, 0x24, 0x33, 0x3b, 0xf4, 0x0e, 0xe4, 0xe9, 0x5f, 0xce, 0x8d, 0x2c, 0x8b, 0x39, 0x47, 0x05,
	0x94, 0x17, 0x68, 0x1b, 0x72, 0x6c, 0x9b, 0x68, 0x24, 0x38, 0xda, 0xc2, 0x31, 0x25, 0x96, 0x46,
	0x06, 0x78, 0x62, 0x78, 0xca, 0x13, 0x6c, 0x4c, 0x08, 0x23, 0x7c, 0x5e, 0x2e, 0xfa, 0xc2, 0x9f,
	0x52, 0x19, 0xba, 0x00, 0x05, 0xbe, 0xab, 0x74, 0x53, 0x23, 0xcf, 0x58, 0xf5, 0xcc, 0xc8, 0x7c,
	0xa3, 0x35, 0xa8, 0x84, 0x4e, 0xff, 0xc8, 0xb5, 0xcc, 0x80, 0x9a, 0x6c, 0x0a, 0x2a, 0x60, 0xd3,
	0xdf, 0x9e, 0x2d, 0xdc, 0xef, 0x2d, 0x5e, 0xde, 0x2c, 0xa7, 0xca, 0x7f, 0x4a, 0x42, 0x9a, 0xd5,
	0x8b, 0x35, 0x28, 0xf4, 0x1f, 0x76, 0x25, 0xa5, 0xde, 0x39, 0x3e, 0x6c, 0x4a, 0x42, 0x02, 0x95,
	0x00, 0x98, 0xe0, 0x5e, 0xb3, 0x53, 0xed, 0x0b, 0xc9, 0x70, 0xdc, 0x68, 0xf7, 0xf7, 0x6f, 0x0a,
	0xa9, 0xd0, 0xe0, 0x98, 0x0b, 0xd2, 0x51, 0xc0, 0x8d, 0x3d, 0x21, 0x83, 0x04, 0x28, 0x72, 0x07,
	0x8d, 0x07, 0x52, 0x7d, 0xff, 0xa6, 0x90, 0x8d, 0x4b, 0x6e, 0xec, 0x09, 0x2b, 0x68, 0x15, 0xf2,
	0x4c, 0x72, 0xd8, 0xe9, 0x34, 0x85, 0x5c, 0xe8, 0xb3, 0xd7, 0x97, 0x1b, 0xed, 0x23, 0x21, 0x1f,
	0xfa, 0x3c, 0x92, 0x3b, 0xc7, 0x5d, 0x01, 0x42, 0x0f, 0x2d, 0xa9, 0xd7, 0xab, 0x1e, 0x49, 0x42,
	0x21, 0x44, 0x1c, 0x3e, 0xec, 0x4b, 0x3d, 0xa1, 0x18, 0x0b, 0xeb, 0xc6, 0x9e, 0xb0, 0x1a, 0x4e,
	0x21, 0xb5, 0x8f, 0x5b, 0x42, 0x09, 0xad, 0xc3, 0x2a, 0x9f, 0x22, 0x08, 0x62, 0x6d, 0x46, 0xb4,
	0x7f, 0x53, 0x10, 0xa6, 0x81, 0x70, 0x2f, 0xeb, 0x31, 0xc1, 0xfe, 0x4d, 0x01, 0x95, 0x6b, 0x90,
	0x61, 0xec, 0x42, 0x08, 0x4a, 0xcd, 0xea, 0xa1, 0xd4, 0x54, 0x3a, 0xdd, 0x7e, 0xa3, 0xd3, 0xae,
	0x36, 0x85, 0xc4, 0x54, 0x26, 0x4b, 0x3f, 0x39, 0x6e, 0xc8, 0x52, 0x5d, 0x48, 0x46, 0x65, 0x5d,
	0xa9, 0xda, 0x97, 0xea, 0x42, 0xaa, 0xac, 0xc2, 0xe6, 0xa2, 0x3a, 0xb9, 0x70, 0x67, 0x44, 0x3e,
	0x71, 0x72, 0xc9, 0x27, 0x66, 0xbe, 0xe6, 0x3e, 0xf1, 0xbf, 0x92, 0xb0, 0xb1, 0xe0, 0xac, 0x58,
	0x38, 0xc9, 0x0f, 0x21, 0xc3, 0x29, 0xca, 0x4f, 0xcf, 0x2b, 0x0b, 0x0f, 0x1d, 0x46, 0xd8, 0xb9,
	0x13, 0x94, 0xd9, 0x45, 0x3b, 0x88, 0xd4, 0x92, 0x0e, 0x82, 0xba, 0x98, 0xab, 0xe9, 0x3f, 0x9f,
	0xab, 0xe9, 0xfc, 0xd8, 0xdb, 0x3f, 0xcb, 0xb1, 0xc7, 0x64, 0xdf, 0xae, 0xb6, 0x67, 0x16, 0xd4,
	0xf6, 0xbb, 0xb0, 0x3e, 0xe7, 0xe8, 0xcc, 0x35, 0xf6, 0x97, 0x09, 0x10, 0x97, 0x25, 0xe7, 0x15,
	0x95, 0x2e, 0x19, 0xab, 0x74, 0x77, 0x67, 0x33, 0x78, 0x71, 0xf9, 0x47, 0x98, 0xfb, 0xd6, 0xdf,
	0x24, 0x60, 0x6b, 0x71, 0xa7, 0xb8, 0x30, 0x86, 0xcf, 0x21, 0x3b, 0x26, 0xde, 0xc8, 0x0a, 0xba,
	0xa5, 0x8f, 0x16, 0x9c, 0xc1, 0x54, 0x3d, 0xfb, 0xb1, 0x7d, 0xab, 0xe8, 0x21, 0x9e, 0x5a, 0xd6,
	0xee, 0xf1, 0x68, 0xe6, 0x22, 0xfd, 0x55, 0x12, 0xde, 0x5e, 0xe8, 0x7c, 0x61, 0xa0, 0xef, 0x01,
	0xe8, 0xa6, 0x3d, 0xf1, 0x78, 0x47, 0xc4, 0x0b, 0x6c, 0x9e, 0x49, 0x58, 0xf1, 0xa2, 0xc5, 0x73,
	0xe2, 0x85, 0xfa, 0x14, 0xd3, 0x03, 0x17, 0x31, 0xc0, 0x9d, 0x69, 0xa0, 0x69, 0x16, 0xe8, 0xfb,
	0x4b, 0x56, 0x3a, 0x47, 0xcc, 0x4f, 0x41, 0x50, 0x0d, 0x9d, 0x98, 0x9e, 0xe2, 0x7a, 0x0e, 0xc1,
	0x63, 0xdd, 0x1c, 0xb2, 0x13, 0x24, 0x77, 0x90, 0x19, 0x60, 0xc3, 0x25, 0xf2, 0x1a, 0x57, 0xf7,
	0x02, 0x2d, 0xb5, 0x60, 0x04, 0x72, 0x22, 0x16, 0xd9, 0x98, 0x05, 0x57, 0x87, 0x16, 0xe5, 0x5f,
	0xe7, 0xa1, 0x10, 0xe9, 0xab, 0xd1, 0x45, 0x28, 0x3e, 0xc2, 0x4f, 0xb0, 0x12, 0xdc, 0x95, 0x78,
	0x26, 0x0a, 0x54, 0xd6, 0xf5, 0xef, 0x4b, 0x9f, 0xc2, 0x26, 0x83, 0x58, 0x13, 0x8f, 0x38, 0x8a,
	0x6a, 0x60, 0xd7, 0x65, 0x49, 0xcb, 0x31, 0x28, 0xa2, 0xba, 0x0e, 0x55, 0xd5, 0x02, 0x0d, 0xba,
	0x05, 0x1b, 0xcc, 0x62, 0x3c, 0x31, 0x3c, 0xdd, 0x36, 0x88, 0x42, 0x6f, 0x6f, 0x2e, 0x3b, 0x49,
	0xc2, 0xc8, 0xd6, 0x29, 0xa2, 0xe5, 0x03, 0x68, 0x44, 0x2e, 0xaa, 0xc3, 0x7b, 0xcc, 0x6c, 0x48,
	0x4c, 0xe2, 0x60, 0x8f, 0x28, 0xe4, 0xeb, 0x09, 0x36, 0x5c, 0x05, 0x9b, 0x9a, 0x32, 0xc2, 0xee,
	0x48, 0xdc, 0xa4, 0x0e, 0x0e, 0x93, 0x62, 0x42, 0x3e, 0x4f, 0x81, 0x47, 0x3e, 0x4e, 0x62, 0xb0,
	0xaa, 0xa9, 0x7d, 0x81, 0xdd, 0x11, 0x3a, 0x80, 0x2d, 0xe6, 0xc5, 0xf5, 0x1c, 0xdd, 0x1c, 0x2a,
	0xea, 0x88, 0xa8, 0x8f, 0x95, 0x89, 0x37, 0xb8, 0x23, 0xbe, 0x13, 0x9d, 0x9f, 0x45, 0xd8, 0x63,
	0x98, 0x1a, 0x85, 0x1c, 0x7b, 0x83, 0x3b, 0xa8, 0x07, 0x45, 0xfa, 0x31, 0xc6, 0xfa, 0x73, 0xa2,
	0x0c, 0x2c, 0x87, 0x1d, 0x8d, 0xa5, 0x05, 0xa5, 0x29, 0x92, 0xc1, 0x4a, 0xc7, 0x37, 0x68, 0x59,
	0x1a, 0x39, 0xc8, 0xf4, 0xba, 0x92, 0x54, 0x97, 0x0b, 0x81, 0x97, 0x7b, 0x96, 0x43, 0x09, 0x35,
	0xb4, 0xc2, 0x04, 0x17, 0x38, 0xa1, 0x86, 0x56, 0x90, 0xde, 0x5b, 0xb0, 0xa1, 0xaa, 0x7c, 0xcd,
	0xba, 0xaa, 0xf8, 0x77, 0x2c, 0x57, 0x14, 0x62, 0xc9, 0x52, 0xd5, 0x23, 0x0e, 0xf0, 0x39, 0xee,
	0xa2, 0xcf, 0xe0, 0xed, 0x69, 0xb2, 0xa2, 0x86, 0xeb, 0x73, 0xab, 0x9c, 0x35, 0xbd, 0x05, 0x1b,
	0xf6, 0xe9, 0xbc, 0x21, 0x8a, 0xcd, 0x68, 0x9f, 0xce, 0x9a, 0xdd, 0x86, 0x4d, 0x7b, 0x64, 0xcf,
	0xdb, 0x5d, 0x8d, 0xda, 0x21, 0x7b, 0x64, 0xcf, 0x1a, 0x5e, 0x62, 0x17, 0x6e, 0x87, 0xa8, 0xd8,
	0x23, 0x9a, 0x78, 0x2e, 0x0a, 0x8f, 0x28, 0xd0, 0x75, 0x10, 0x54, 0x55, 0x21, 0x26, 0x3e, 0x31,
	0x88, 0x82, 0x1d, 0x62, 0x62, 0x57, 0xbc, 0x10, 0x05, 0x97, 0x54, 0x55, 0x62, 0xda, 0x2a, 0x53,
	0xa2, 0xab, 0xb0, 0x6e, 0x9d, 0x3c, 0x52, 0x39, 0x25, 0x15, 0xdb, 0x21, 0x03, 0xfd, 0x99, 0xf8,
	0x21, 0xcb, 0xef, 0x1a, 0x55, 0x30, 0x42, 0x76, 0x99, 0x18, 0x5d, 0x01, 0x41, 0x75, 0x47, 0xd8,
	0xb1, 0x59, 0x4d, 0x76, 0x6d, 0xac, 0x12, 0xf1, 0x12, 0x87, 0x72, 0x79, 0x3b, 0x10, 0xd3, 0x2d,
	0xe1, 0x3e, 0xd5, 0x07, 0x5e, 0xe0, 0xf1, 0x32, 0xdf, 0x12, 0x4c, 0xe6, 0x7b, 0xdb, 0x05, 0x81,
	0xa6, 0x22, 0x36, 0xf1, 0x2e, 0x83, 0x95, 0xec, 0x91, 0x1d, 0x9d, 0xf7, 0x03, 0x58, 0xa5, 0xc8,
	0xe9, 0xa4, 0x57, 0x78, 0x43, 0x66, 0x8f, 0x22, 0x33, 0xde, 0x84, 0x2d, 0x0a, 0x1a, 0x13, 0x0f,
	0x6b, 0xd8, 0xc3, 0x11, 0xf4, 0xc7, 0x0c, 0x4d, 0xf3, 0xde, 0xf2, 0x95, 0xb1, 0x38, 0x9d, 0xc9,
	0xc9, 0x69, 0xc8, 0xac, 0x4f, 0x78, 0x9c, 0x54, 0x16, 0x70, 0xeb, 0xb5, 0x35, 0xdd, 0xe5, 0x03,
	0x28, 0x46, 0x89, 0x8f, 0xf2, 0xc0, 0xa9, 0x2f, 0x24, 0x68, 0x17, 0x54, 0xeb, 0xd4, 0x69, 0xff,
	0xf2, 0x95, 0x24, 0x24, 0x69, 0x1f, 0xd5, 0x6c, 0xf4, 0x25, 0x45, 0x3e, 0x6e, 0xf7, 0x1b, 0x2d,
	0x49, 0x48, 0x45, 0x1b, 0xf6, 0xbf, 0x26, 0xa1, 0x14, 0xbf, 0x7b, 0xa1, 0x1f, 0xc0, 0xb9, 0xe0,
	0xa1, 0xc4, 0x25, 0x9e, 0xf2, 0x54, 0x77, 0xd8, 0x5e, 0x1c, 0x63, 0x7e, 0x2e, 0x86, 0x6c, 0xd8,
	0xf4, 0x51, 0x3d, 0xe2, 0x7d, 0xa9, 0x3b, 0x74, 0xa7, 0x8d, 0xb1, 0x87, 0x9a, 0x70, 0xc1, 0xb4,
	0x14, 0xd7, 0xc3, 0xa6, 0x86, 0x1d, 0x4d, 0x99, 0x3e, 0x51, 0x29, 0x58, 0x55, 0x89, 0xeb, 0x5a,
	0xfc, 0x0c, 0x0c, 0xbd, 0xbc, 0x6b, 0x5a, 0x3d, 0x1f, 0x3c, 0x3d, 0x1c, 0xaa, 0x3e, 0x74, 0x86,
	0xb9, 0xa9, 0x65, 0xcc, 0x7d, 0x07, 0xf2, 0x63, 0x6c, 0x2b, 0xc4, 0xf4, 0x9c, 0x53, 0xd6, 0x71,
	0xe7, 0xe4, 0xdc, 0x18, 0xdb, 0x12, 0x1d, 0xbf, 0x99, 0x8b, 0xcf, 0x3f, 0x52, 0x50, 0x8c, 0x76,
	0xdd, 0xf4, 0x12, 0xa3, 0xb2, 0x03, 0x2a, 0xc1, 0x4a, 0xd8, 0x07, 0x2f, 0xed, 0xd1, 0x2b, 0x35,
	0x7a, 0x72, 0x1d, 0x64, 0x79, 0x2f, 0x2c, 0x73, 0x4b, 0xda, 0x35, 0x50, 0x6a, 0x11, 0xde, 0x7b,
	0xe4, 0x64, 0x7f, 0x84, 0x8e, 0x20, 0xfb, 0xc8, 0x65, 0xbe, 0xb3, 0xcc, 0xf7, 0x87, 0x2f, 0xf7,
	0x7d, 0xbf, 0xc7, 0x9c, 0xe7, 0xef, 0xf7, 0x94, 0x76, 0x47, 0x6e, 0x55, 0x9b, 0xb2, 0x6f, 0x8e,
	0xce, 0x43, 0xda, 0xc0, 0xcf, 0x4f, 0xe3, 0x67, 0x1c, 0x13, 0x9d, 0x35, 0xf1, 0xe7, 0x21, 0xfd,
	0x94, 0xe0, 0xc7, 0xf1, 0x93, 0x85, 0x89, 0x5e, 0x23, 0xf5, 0xaf, 0x43, 0x86, 0xe5, 0x0b, 0x01,
	0xf8, 0x19, 0x13, 0xde, 0x42, 0x39, 0x48, 0xd7, 0x3a, 0x32, 0xa5, 0xbf, 0x00, 0x45, 0x2e, 0x55,
	0xba, 0x0d, 0xa9, 0x26, 0x09, 0xc9, 0xf2, 0x2d, 0xc8, 0xf2, 0x24, 0xd0, 0xad, 0x11, 0xa6, 0x41,
	0x78, 0xcb, 0x1f, 0xfa, 0x3e, 0x12, 0x81, 0xf6, 0xb8, 0x75, 0x28, 0xc9, 0x42, 0x32, 0xfa, 0x79,
	0x5d, 0x28, 0x46, 0x1b, 0xee, 0x37, 0xc3, 0xa9, 0xbf, 0x24, 0xa0, 0x10, 0x69, 0xa0, 0x69, 0xe7,
	0x83, 0x0d, 0xc3, 0x7a, 0xaa, 0x60, 0x43, 0xc7, 0xae, 0x4f, 0x0a, 0x60, 0xa2, 0x2a, 0x95, 0x9c,
	0xf5, 0xa3, 0xbd, 0x91, 0xe0, 0x7f, 0x9f, 0x00, 0x61, 0xb6, 0x77, 0x9d, 0x09, 0x30, 0xf1, 0xbd,
	0x06, 0xf8, 0xbb, 0x04, 0x94, 0xe2, 0x0d, 0xeb, 0x4c, 0x78, 0x17, 0xbf, 0xd7, 0xf0, 0xfe, 0x99,
	0x84, 0xd5, 0x58, 0x9b, 0x7a, 0xd6, 0xe8, 0xbe, 0x86, 0x75, 0x5d, 0x23, 0x63, 0xdb, 0xf2, 0x88,
	0xa9, 0x9e, 0x2a, 0x06, 0x79, 0x42, 0x0c, 0xb1, 0xcc, 0x0a, 0xc5, 0xf5, 0x97, 0x37, 0xc2, 0x95,
	0xc6, 0xd4, 0xae, 0x49, 0xcd, 0x0e, 0x36, 0x1a, 0x75, 0xa9, 0xd5, 0xed, 0xf4, 0xa5, 0x76, 0xed,
	0xa1, 0x72, 0xdc, 0xfe, 0x71, 0xbb, 0xf3, 0x65, 0x5b, 0x16, 0xf4, 0x19, 0xd8, 0x6b, 0xdc, 0xea,
	0x5d, 0x10, 0x66, 0x83, 0x42, 0xe7, 0x60, 0x51, 0x58, 0xc2, 0x5b, 0x68, 0x03, 0xd6, 0xda, 0x1d,
	0xa5, 0xd7, 0xa8, 0x4b, 0x8a, 0x74, 0xef, 0x9e, 0x54, 0xeb, 0xf7, 0xf8, 0xd3, 0x46, 0x88, 0xee,
	0xc7, 0x37, 0xf5, 0x6f, 0x53, 0xb0, 0xb1, 0x20, 0x12, 0x54, 0xf5, 0x2f, 0x25, 0xfc, 0x9e, 0xf4,
	0xc9, 0x59, 0xa2, 0xaf, 0xd0, 0xae, 0xa0, 0x8b, 0x1d, 0xcf, 0xbf, 0xc3, 0x5c, 0x01, 0x9a, 0x25,
	0xd3, 0xd3, 0x07, 0x3a, 0x71, 0xfc, 0x97, 0x20, 0x7e, 0x53, 0x59, 0x9b, 0xca, 0xf9, 0x63, 0xd0,
	0xc7, 0x80, 0x6c, 0xcb, 0xd5, 0x3d, 0xfd, 0x09, 0x51, 0x74, 0x33, 0x78, 0x36, 0xa2, 0x37, 0x97,
	0xb4, 0x2c, 0x04, 0x9a, 0x86, 0xe9, 0x85, 0x68, 0x93, 0x0c, 0xf1, 0x0c, 0x9a, 0x16, 0xf0, 0x94,
	0x2c, 0x04, 0x9a, 0x10, 0x7d, 0x11, 0x8a, 0x9a, 0x35, 0xa1, 0xed, 0x1c, 0xc7, 0xd1, 0xf3, 0x22,
	0x21, 0x17, 0xb8, 0x2c, 0x84, 0xf8, 0x8d, 0xfa, 0xf4, 0xbd, 0xaa, 0x28, 0x17, 0xb8, 0x8c, 0x43,
	0x2e, 0xc3, 0x1a, 0x1e, 0x0e, 0x1d, 0xea, 0x3c, 0x70, 0xc4, 0xaf, 0x1e, 0xa5, 0x50, 0xcc, 0x80,
	0xdb, 0xf7, 0x21, 0x17, 0xe4, 0x81, 0x1e, 0xc9, 0x34, 0x13, 0x8a, 0xcd, 0xef, 0xd3, 0xc9, 0xdd,
	0xbc, 0x9c, 0x33, 0x03, 0xe5, 0x45, 0x28, 0xea, 0xae, 0x32, 0x7d, 0x7e, 0x4f, 0xee, 0x24, 0x77,
	0x73, 0x72, 0x41, 0x77, 0xc3, 0xa7, 0xcb, 0xf2, 0x37, 0x49, 0x28, 0xc5, 0x7f, 0x3e, 0x40, 0x75,
	0xc8, 0x19, 0x96, 0x8a, 0x19, 0xb5, 0xf8, 0x6f, 0x57, 0xbb, 0xaf, 0xf8, 0xc5, 0xa1, 0xd2, 0xf4,
	0xf1, 0x72, 0x68, 0xb9, 0xfd, 0xb7, 0x04, 0xe4, 0x02, 0x31, 0xda, 0x82, 0xb4, 0x8d, 0xbd, 0x11,
	0x73, 0x97, 0x39, 0x4c, 0x0a, 0x09, 0x99, 0x8d, 0xa9, 0xdc, 0xb5, 0xb1, 0xc9, 0x28, 0xe0, 0xcb,
	0xe9, 0x98, 0x7e, 0x57, 0x83, 0x60, 0x8d, 0xdd, 0x6b, 0xac, 0xf1, 0x98, 0x98, 0x9e, 0x1b, 0x7c,
	0x57, 0x5f, 0x5e, 0xf3, 0xc5, 0xe8, 0x1a, 0xac, 0x7b, 0x0e, 0xd6, 0x8d, 0x18, 0x36, 0xcd, 0xb0,
	0x42, 0xa0, 0x08, 0xc1, 0x07, 0x70, 0x3e, 0xf0, 0xab, 0x11, 0x0f, 0xab, 0x23, 0xa2, 0x4d, 0x8d,
	0xb2, 0xec, 0xfd, 0xe2, 0x9c, 0x0f, 0xa8, 0xfb, 0xfa, 0xc0, 0xb6, 0xfc, 0xf7, 0x04, 0xac, 0x07,
	0x37, 0x31, 0x2d, 0x4c, 0x56, 0x0b, 0x00, 0x9b, 0xa6, 0xe5, 0x45, 0xd3, 0x35, 0x4f, 0xe5, 0x39,
	0xbb, 0x4a, 0x35, 0x34, 0x92, 0x23, 0x0e, 0xb6, 0xc7, 0x00, 0x53, 0xcd, 0xd2, 0xb4, 0x5d, 0x80,
	0x82, 0xff, 0xdb, 0x10, 0xfb, 0x81, 0x91, 0xdf, 0xdd, 0x81, 0x8b, 0xe8, 0x95, 0x0d, 0x6d, 0x42,
	0xe6, 0x84, 0x0c, 0x75, 0xd3, 0x7f, 0xf1, 0xe5, 0x83, 0xe0, 0x85, 0x25, 0x1d, 0xbe, 0xb0, 0x1c,
	0xfe, 0x0c, 0x36, 0x54, 0x6b, 0x3c, 0x1b, 0xee, 0xa1, 0x30, 0xf3, 0x7e, 0xe0, 0x7e, 0x91, 0xf8,
	0x0a, 0xa6, 0x2d, 0xe6, 0xff, 0x12, 0x89, 0x3f, 0x24, 0x53, 0x47, 0xdd, 0xc3, 0x3f, 0x26, 0xb7,
	0x8f, 0xb8, 0x69, 0x37, 0x58, 0xa9, 0x4c, 0x06, 0x06, 0x51, 0x69, 0xf4, 0xff, 0x0f, 0x00, 0x00,
	0xff, 0xff, 0x88, 0x17, 0xc1, 0xbe, 0x38, 0x1d, 0x00, 0x00,
}
07070100000667000081A4000000000000000000000001645E367C00006521000000000000000000000000000000000000006A00000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor_gostring.gen.go // Code generated by protoc-gen-gogo. DO NOT EDIT.
// source: descriptor.proto

package descriptor

import (
	fmt "fmt"
	github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto"
	proto "github.com/gogo/protobuf/proto"
	math "math"
	reflect "reflect"
	sort "sort"
	strconv "strconv"
	strings "strings"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

func (this *FileDescriptorSet) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 5)
	s = append(s, "&descriptor.FileDescriptorSet{")
	if this.File != nil {
		s = append(s, "File: "+fmt.Sprintf("%#v", this.File)+",\n")
	}
	if this.XXX_unrecognized != nil {
		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *FileDescriptorProto) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 16)
	s = append(s, "&descriptor.FileDescriptorProto{")
	if this.Name != nil {
		s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n")
	}
	if this.Package != nil {
		s = append(s, "Package: "+valueToGoStringDescriptor(this.Package, "string")+",\n")
	}
	if this.Dependency != nil {
		s = append(s, "Dependency: "+fmt.Sprintf("%#v", this.Dependency)+",\n")
	}
	if this.PublicDependency != nil {
		s = append(s, "PublicDependency: "+fmt.Sprintf("%#v", this.PublicDependency)+",\n")
	}
	if this.WeakDependency != nil {
		s = append(s, "WeakDependency: "+fmt.Sprintf("%#v", this.WeakDependency)+",\n")
	}
	if this.MessageType != nil {
		s = append(s, "MessageType: "+fmt.Sprintf("%#v", this.MessageType)+",\n")
	}
	if this.EnumType != nil {
		s = append(s, "EnumType: "+fmt.Sprintf("%#v", this.EnumType)+",\n")
	}
	if this.Service != nil {
		s = append(s, "Service: "+fmt.Sprintf("%#v", this.Service)+",\n")
	}
	if this.Extension != nil {
		s = append(s, "Extension: "+fmt.Sprintf("%#v", this.Extension)+",\n")
	}
	if this.Options != nil {
		s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n")
	}
	if this.SourceCodeInfo != nil {
		s = append(s, "SourceCodeInfo: "+fmt.Sprintf("%#v", this.SourceCodeInfo)+",\n")
	}
	if this.Syntax != nil {
		s = append(s, "Syntax: "+valueToGoStringDescriptor(this.Syntax, "string")+",\n")
	}
	if this.XXX_unrecognized != nil {
		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *DescriptorProto) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 14)
	s = append(s, "&descriptor.DescriptorProto{")
	if this.Name != nil {
		s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n")
	}
	if this.Field != nil {
		s = append(s, "Field: "+fmt.Sprintf("%#v", this.Field)+",\n")
	}
	if this.Extension != nil {
		s = append(s, "Extension: "+fmt.Sprintf("%#v", this.Extension)+",\n")
	}
	if this.NestedType != nil {
		s = append(s, "NestedType: "+fmt.Sprintf("%#v", this.NestedType)+",\n")
	}
	if this.EnumType != nil {
		s = append(s, "EnumType: "+fmt.Sprintf("%#v", this.EnumType)+",\n")
	}
	if this.ExtensionRange != nil {
		s = append(s, "ExtensionRange: "+fmt.Sprintf("%#v", this.ExtensionRange)+",\n")
	}
	if this.OneofDecl != nil {
		s = append(s, "OneofDecl: "+fmt.Sprintf("%#v", this.OneofDecl)+",\n")
	}
	if this.Options != nil {
		s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n")
	}
	if this.ReservedRange != nil {
		s = append(s, "ReservedRange: "+fmt.Sprintf("%#v", this.ReservedRange)+",\n")
	}
	if this.ReservedName != nil {
		s = append(s, "ReservedName: "+fmt.Sprintf("%#v", this.ReservedName)+",\n")
	}
	if this.XXX_unrecognized != nil {
		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *DescriptorProto_ExtensionRange) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 7)
	s = append(s, "&descriptor.DescriptorProto_ExtensionRange{")
	if this.Start != nil {
		s = append(s, "Start: "+valueToGoStringDescriptor(this.Start, "int32")+",\n")
	}
	if this.End != nil {
		s = append(s, "End: "+valueToGoStringDescriptor(this.End, "int32")+",\n")
	}
	if this.Options != nil {
		s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n")
	}
	if this.XXX_unrecognized != nil {
		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *DescriptorProto_ReservedRange) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 6)
	s = append(s, "&descriptor.DescriptorProto_ReservedRange{")
	if this.Start != nil {
		s = append(s, "Start: "+valueToGoStringDescriptor(this.Start, "int32")+",\n")
	}
	if this.End != nil {
		s = append(s, "End: "+valueToGoStringDescriptor(this.End, "int32")+",\n")
	}
	if this.XXX_unrecognized != nil {
		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *ExtensionRangeOptions) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 5)
	s = append(s, "&descriptor.ExtensionRangeOptions{")
	if this.UninterpretedOption != nil {
		s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n")
	}
	s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n")
	if this.XXX_unrecognized != nil {
		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *FieldDescriptorProto) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 14)
	s = append(s, "&descriptor.FieldDescriptorProto{")
	if this.Name != nil {
		s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n")
	}
	if this.Number != nil {
		s = append(s, "Number: "+valueToGoStringDescriptor(this.Number, "int32")+",\n")
	}
	if this.Label != nil {
		s = append(s, "Label: "+valueToGoStringDescriptor(this.Label, "FieldDescriptorProto_Label")+",\n")
	}
	if this.Type != nil {
		s = append(s, "Type: "+valueToGoStringDescriptor(this.Type, "FieldDescriptorProto_Type")+",\n")
	}
	if this.TypeName != nil {
		s = append(s, "TypeName: "+valueToGoStringDescriptor(this.TypeName, "string")+",\n")
	}
	if this.Extendee != nil {
		s = append(s, "Extendee: "+valueToGoStringDescriptor(this.Extendee, "string")+",\n")
	}
	if this.DefaultValue != nil {
		s = append(s, "DefaultValue: "+valueToGoStringDescriptor(this.DefaultValue, "string")+",\n")
	}
	if this.OneofIndex != nil {
		s = append(s, "OneofIndex: "+valueToGoStringDescriptor(this.OneofIndex, "int32")+",\n")
	}
	if this.JsonName != nil {
		s = append(s, "JsonName: "+valueToGoStringDescriptor(this.JsonName, "string")+",\n")
	}
	if this.Options != nil {
		s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n")
	}
	if this.XXX_unrecognized != nil {
		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *OneofDescriptorProto) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 6)
	s = append(s, "&descriptor.OneofDescriptorProto{")
	if this.Name != nil {
		s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n")
	}
	if this.Options != nil {
		s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n")
	}
	if this.XXX_unrecognized != nil {
		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *EnumDescriptorProto) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 9)
	s = append(s, "&descriptor.EnumDescriptorProto{")
	if this.Name != nil {
		s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n")
	}
	if this.Value != nil {
		s = append(s, "Value: "+fmt.Sprintf("%#v", this.Value)+",\n")
	}
	if this.Options != nil {
		s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n")
	}
	if this.ReservedRange != nil {
		s = append(s, "ReservedRange: "+fmt.Sprintf("%#v", this.ReservedRange)+",\n")
	}
	if this.ReservedName != nil {
		s = append(s, "ReservedName: "+fmt.Sprintf("%#v", this.ReservedName)+",\n")
	}
	if this.XXX_unrecognized != nil {
		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *EnumDescriptorProto_EnumReservedRange) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 6)
	s = append(s, "&descriptor.EnumDescriptorProto_EnumReservedRange{")
	if this.Start != nil {
		s = append(s, "Start: "+valueToGoStringDescriptor(this.Start, "int32")+",\n")
	}
	if this.End != nil {
		s = append(s, "End: "+valueToGoStringDescriptor(this.End, "int32")+",\n")
	}
	if this.XXX_unrecognized != nil {
		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *EnumValueDescriptorProto) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 7)
	s = append(s, "&descriptor.EnumValueDescriptorProto{")
	if this.Name != nil {
		s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n")
	}
	if this.Number != nil {
		s = append(s, "Number: "+valueToGoStringDescriptor(this.Number, "int32")+",\n")
	}
	if this.Options != nil {
		s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n")
	}
	if this.XXX_unrecognized != nil {
		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *ServiceDescriptorProto) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 7)
	s = append(s, "&descriptor.ServiceDescriptorProto{")
	if this.Name != nil {
		s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n")
	}
	if this.Method != nil {
		s = append(s, "Method: "+fmt.Sprintf("%#v", this.Method)+",\n")
	}
	if this.Options != nil {
		s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n")
	}
	if this.XXX_unrecognized != nil {
		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *MethodDescriptorProto) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 10)
	s = append(s, "&descriptor.MethodDescriptorProto{")
	if this.Name != nil {
		s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n")
	}
	if this.InputType != nil {
		s = append(s, "InputType: "+valueToGoStringDescriptor(this.InputType, "string")+",\n")
	}
	if this.OutputType != nil {
		s = append(s, "OutputType: "+valueToGoStringDescriptor(this.OutputType, "string")+",\n")
	}
	if this.Options != nil {
		s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n")
	}
	if this.ClientStreaming != nil {
		s = append(s, "ClientStreaming: "+valueToGoStringDescriptor(this.ClientStreaming, "bool")+",\n")
	}
	if this.ServerStreaming != nil {
		s = append(s, "ServerStreaming: "+valueToGoStringDescriptor(this.ServerStreaming, "bool")+",\n")
	}
	if this.XXX_unrecognized != nil {
		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *FileOptions) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 25)
	s = append(s, "&descriptor.FileOptions{")
	if this.JavaPackage != nil {
		s = append(s, "JavaPackage: "+valueToGoStringDescriptor(this.JavaPackage, "string")+",\n")
	}
	if this.JavaOuterClassname != nil {
		s = append(s, "JavaOuterClassname: "+valueToGoStringDescriptor(this.JavaOuterClassname, "string")+",\n")
	}
	if this.JavaMultipleFiles != nil {
		s = append(s, "JavaMultipleFiles: "+valueToGoStringDescriptor(this.JavaMultipleFiles, "bool")+",\n")
	}
	if this.JavaGenerateEqualsAndHash != nil {
		s = append(s, "JavaGenerateEqualsAndHash: "+valueToGoStringDescriptor(this.JavaGenerateEqualsAndHash, "bool")+",\n")
	}
	if this.JavaStringCheckUtf8 != nil {
		s = append(s, "JavaStringCheckUtf8: "+valueToGoStringDescriptor(this.JavaStringCheckUtf8, "bool")+",\n")
	}
	if this.OptimizeFor != nil {
		s = append(s, "OptimizeFor: "+valueToGoStringDescriptor(this.OptimizeFor, "FileOptions_OptimizeMode")+",\n")
	}
	if this.GoPackage != nil {
		s = append(s, "GoPackage: "+valueToGoStringDescriptor(this.GoPackage, "string")+",\n")
	}
	if this.CcGenericServices != nil {
		s = append(s, "CcGenericServices: "+valueToGoStringDescriptor(this.CcGenericServices, "bool")+",\n")
	}
	if this.JavaGenericServices != nil {
		s = append(s, "JavaGenericServices: "+valueToGoStringDescriptor(this.JavaGenericServices, "bool")+",\n")
	}
	if this.PyGenericServices != nil {
		s = append(s, "PyGenericServices: "+valueToGoStringDescriptor(this.PyGenericServices, "bool")+",\n")
	}
	if this.PhpGenericServices != nil {
		s = append(s, "PhpGenericServices: "+valueToGoStringDescriptor(this.PhpGenericServices, "bool")+",\n")
	}
	if this.Deprecated != nil {
		s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n")
	}
	if this.CcEnableArenas != nil {
		s = append(s, "CcEnableArenas: "+valueToGoStringDescriptor(this.CcEnableArenas, "bool")+",\n")
	}
	if this.ObjcClassPrefix != nil {
		s = append(s, "ObjcClassPrefix: "+valueToGoStringDescriptor(this.ObjcClassPrefix, "string")+",\n")
	}
	if this.CsharpNamespace != nil {
		s = append(s, "CsharpNamespace: "+valueToGoStringDescriptor(this.CsharpNamespace, "string")+",\n")
	}
	if this.SwiftPrefix != nil {
		s = append(s, "SwiftPrefix: "+valueToGoStringDescriptor(this.SwiftPrefix, "string")+",\n")
	}
	if this.PhpClassPrefix != nil {
		s = append(s, "PhpClassPrefix: "+valueToGoStringDescriptor(this.PhpClassPrefix, "string")+",\n")
	}
	if this.PhpNamespace != nil {
		s = append(s, "PhpNamespace: "+valueToGoStringDescriptor(this.PhpNamespace, "string")+",\n")
	}
	if this.PhpMetadataNamespace != nil {
		s = append(s, "PhpMetadataNamespace: "+valueToGoStringDescriptor(this.PhpMetadataNamespace, "string")+",\n")
	}
	if this.RubyPackage != nil {
		s = append(s, "RubyPackage: "+valueToGoStringDescriptor(this.RubyPackage, "string")+",\n")
	}
	if this.UninterpretedOption != nil {
		s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n")
	}
	s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n")
	if this.XXX_unrecognized != nil {
		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *MessageOptions) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 9)
	s = append(s, "&descriptor.MessageOptions{")
	if this.MessageSetWireFormat != nil {
		s = append(s, "MessageSetWireFormat: "+valueToGoStringDescriptor(this.MessageSetWireFormat, "bool")+",\n")
	}
	if this.NoStandardDescriptorAccessor != nil {
		s = append(s, "NoStandardDescriptorAccessor: "+valueToGoStringDescriptor(this.NoStandardDescriptorAccessor, "bool")+",\n")
	}
	if this.Deprecated != nil {
		s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n")
	}
	if this.MapEntry != nil {
		s = append(s, "MapEntry: "+valueToGoStringDescriptor(this.MapEntry, "bool")+",\n")
	}
	if this.UninterpretedOption != nil {
		s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n")
	}
	s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n")
	if this.XXX_unrecognized != nil {
		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *FieldOptions) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 11)
	s = append(s, "&descriptor.FieldOptions{")
	if this.Ctype != nil {
		s = append(s, "Ctype: "+valueToGoStringDescriptor(this.Ctype, "FieldOptions_CType")+",\n")
	}
	if this.Packed != nil {
		s = append(s, "Packed: "+valueToGoStringDescriptor(this.Packed, "bool")+",\n")
	}
	if this.Jstype != nil {
		s = append(s, "Jstype: "+valueToGoStringDescriptor(this.Jstype, "FieldOptions_JSType")+",\n")
	}
	if this.Lazy != nil {
		s = append(s, "Lazy: "+valueToGoStringDescriptor(this.Lazy, "bool")+",\n")
	}
	if this.Deprecated != nil {
		s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n")
	}
	if this.Weak != nil {
		s = append(s, "Weak: "+valueToGoStringDescriptor(this.Weak, "bool")+",\n")
	}
	if this.UninterpretedOption != nil {
		s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n")
	}
	s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n")
	if this.XXX_unrecognized != nil {
		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *OneofOptions) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 5)
	s = append(s, "&descriptor.OneofOptions{")
	if this.UninterpretedOption != nil {
		s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n")
	}
	s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n")
	if this.XXX_unrecognized != nil {
		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *EnumOptions) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 7)
	s = append(s, "&descriptor.EnumOptions{")
	if this.AllowAlias != nil {
		s = append(s, "AllowAlias: "+valueToGoStringDescriptor(this.AllowAlias, "bool")+",\n")
	}
	if this.Deprecated != nil {
		s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n")
	}
	if this.UninterpretedOption != nil {
		s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n")
	}
	s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n")
	if this.XXX_unrecognized != nil {
		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *EnumValueOptions) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 6)
	s = append(s, "&descriptor.EnumValueOptions{")
	if this.Deprecated != nil {
		s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n")
	}
	if this.UninterpretedOption != nil {
		s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n")
	}
	s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n")
	if this.XXX_unrecognized != nil {
		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *ServiceOptions) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 6)
	s = append(s, "&descriptor.ServiceOptions{")
	if this.Deprecated != nil {
		s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n")
	}
	if this.UninterpretedOption != nil {
		s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n")
	}
	s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n")
	if this.XXX_unrecognized != nil {
		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *MethodOptions) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 7)
	s = append(s, "&descriptor.MethodOptions{")
	if this.Deprecated != nil {
		s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n")
	}
	if this.IdempotencyLevel != nil {
		s = append(s, "IdempotencyLevel: "+valueToGoStringDescriptor(this.IdempotencyLevel, "MethodOptions_IdempotencyLevel")+",\n")
	}
	if this.UninterpretedOption != nil {
		s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n")
	}
	s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n")
	if this.XXX_unrecognized != nil {
		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *UninterpretedOption) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 11)
	s = append(s, "&descriptor.UninterpretedOption{")
	if this.Name != nil {
		s = append(s, "Name: "+fmt.Sprintf("%#v", this.Name)+",\n")
	}
	if this.IdentifierValue != nil {
		s = append(s, "IdentifierValue: "+valueToGoStringDescriptor(this.IdentifierValue, "string")+",\n")
	}
	if this.PositiveIntValue != nil {
		s = append(s, "PositiveIntValue: "+valueToGoStringDescriptor(this.PositiveIntValue, "uint64")+",\n")
	}
	if this.NegativeIntValue != nil {
		s = append(s, "NegativeIntValue: "+valueToGoStringDescriptor(this.NegativeIntValue, "int64")+",\n")
	}
	if this.DoubleValue != nil {
		s = append(s, "DoubleValue: "+valueToGoStringDescriptor(this.DoubleValue, "float64")+",\n")
	}
	if this.StringValue != nil {
		s = append(s, "StringValue: "+valueToGoStringDescriptor(this.StringValue, "byte")+",\n")
	}
	if this.AggregateValue != nil {
		s = append(s, "AggregateValue: "+valueToGoStringDescriptor(this.AggregateValue, "string")+",\n")
	}
	if this.XXX_unrecognized != nil {
		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *UninterpretedOption_NamePart) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 6)
	s = append(s, "&descriptor.UninterpretedOption_NamePart{")
	if this.NamePart != nil {
		s = append(s, "NamePart: "+valueToGoStringDescriptor(this.NamePart, "string")+",\n")
	}
	if this.IsExtension != nil {
		s = append(s, "IsExtension: "+valueToGoStringDescriptor(this.IsExtension, "bool")+",\n")
	}
	if this.XXX_unrecognized != nil {
		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *SourceCodeInfo) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 5)
	s = append(s, "&descriptor.SourceCodeInfo{")
	if this.Location != nil {
		s = append(s, "Location: "+fmt.Sprintf("%#v", this.Location)+",\n")
	}
	if this.XXX_unrecognized != nil {
		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *SourceCodeInfo_Location) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 9)
	s = append(s, "&descriptor.SourceCodeInfo_Location{")
	if this.Path != nil {
		s = append(s, "Path: "+fmt.Sprintf("%#v", this.Path)+",\n")
	}
	if this.Span != nil {
		s = append(s, "Span: "+fmt.Sprintf("%#v", this.Span)+",\n")
	}
	if this.LeadingComments != nil {
		s = append(s, "LeadingComments: "+valueToGoStringDescriptor(this.LeadingComments, "string")+",\n")
	}
	if this.TrailingComments != nil {
		s = append(s, "TrailingComments: "+valueToGoStringDescriptor(this.TrailingComments, "string")+",\n")
	}
	if this.LeadingDetachedComments != nil {
		s = append(s, "LeadingDetachedComments: "+fmt.Sprintf("%#v", this.LeadingDetachedComments)+",\n")
	}
	if this.XXX_unrecognized != nil {
		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *GeneratedCodeInfo) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 5)
	s = append(s, "&descriptor.GeneratedCodeInfo{")
	if this.Annotation != nil {
		s = append(s, "Annotation: "+fmt.Sprintf("%#v", this.Annotation)+",\n")
	}
	if this.XXX_unrecognized != nil {
		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *GeneratedCodeInfo_Annotation) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 8)
	s = append(s, "&descriptor.GeneratedCodeInfo_Annotation{")
	if this.Path != nil {
		s = append(s, "Path: "+fmt.Sprintf("%#v", this.Path)+",\n")
	}
	if this.SourceFile != nil {
		s = append(s, "SourceFile: "+valueToGoStringDescriptor(this.SourceFile, "string")+",\n")
	}
	if this.Begin != nil {
		s = append(s, "Begin: "+valueToGoStringDescriptor(this.Begin, "int32")+",\n")
	}
	if this.End != nil {
		s = append(s, "End: "+valueToGoStringDescriptor(this.End, "int32")+",\n")
	}
	if this.XXX_unrecognized != nil {
		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func valueToGoStringDescriptor(v interface{}, typ string) string {
	rv := reflect.ValueOf(v)
	if rv.IsNil() {
		return "nil"
	}
	pv := reflect.Indirect(rv).Interface()
	return fmt.Sprintf("func(v %v) *%v { return &v } ( %#v )", typ, typ, pv)
}
func extensionToGoStringDescriptor(m github_com_gogo_protobuf_proto.Message) string {
	e := github_com_gogo_protobuf_proto.GetUnsafeExtensionsMap(m)
	if e == nil {
		return "nil"
	}
	s := "proto.NewUnsafeXXX_InternalExtensions(map[int32]proto.Extension{"
	keys := make([]int, 0, len(e))
	for k := range e {
		keys = append(keys, int(k))
	}
	sort.Ints(keys)
	ss := []string{}
	for _, k := range keys {
		ss = append(ss, strconv.Itoa(k)+": "+e[int32(k)].GoString())
	}
	s += strings.Join(ss, ",") + "})"
	return s
}
   07070100000668000081A4000000000000000000000001645E367C000029DF000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/helper.go  // Protocol Buffers for Go with Gadgets
//
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

package descriptor

import (
	"strings"
)

func (msg *DescriptorProto) GetMapFields() (*FieldDescriptorProto, *FieldDescriptorProto) {
	if !msg.GetOptions().GetMapEntry() {
		return nil, nil
	}
	return msg.GetField()[0], msg.GetField()[1]
}

func dotToUnderscore(r rune) rune {
	if r == '.' {
		return '_'
	}
	return r
}

func (field *FieldDescriptorProto) WireType() (wire int) {
	switch *field.Type {
	case FieldDescriptorProto_TYPE_DOUBLE:
		return 1
	case FieldDescriptorProto_TYPE_FLOAT:
		return 5
	case FieldDescriptorProto_TYPE_INT64:
		return 0
	case FieldDescriptorProto_TYPE_UINT64:
		return 0
	case FieldDescriptorProto_TYPE_INT32:
		return 0
	case FieldDescriptorProto_TYPE_UINT32:
		return 0
	case FieldDescriptorProto_TYPE_FIXED64:
		return 1
	case FieldDescriptorProto_TYPE_FIXED32:
		return 5
	case FieldDescriptorProto_TYPE_BOOL:
		return 0
	case FieldDescriptorProto_TYPE_STRING:
		return 2
	case FieldDescriptorProto_TYPE_GROUP:
		return 2
	case FieldDescriptorProto_TYPE_MESSAGE:
		return 2
	case FieldDescriptorProto_TYPE_BYTES:
		return 2
	case FieldDescriptorProto_TYPE_ENUM:
		return 0
	case FieldDescriptorProto_TYPE_SFIXED32:
		return 5
	case FieldDescriptorProto_TYPE_SFIXED64:
		return 1
	case FieldDescriptorProto_TYPE_SINT32:
		return 0
	case FieldDescriptorProto_TYPE_SINT64:
		return 0
	}
	panic("unreachable")
}

func (field *FieldDescriptorProto) GetKeyUint64() (x uint64) {
	packed := field.IsPacked()
	wireType := field.WireType()
	fieldNumber := field.GetNumber()
	if packed {
		wireType = 2
	}
	x = uint64(uint32(fieldNumber)<<3 | uint32(wireType))
	return x
}

func (field *FieldDescriptorProto) GetKey3Uint64() (x uint64) {
	packed := field.IsPacked3()
	wireType := field.WireType()
	fieldNumber := field.GetNumber()
	if packed {
		wireType = 2
	}
	x = uint64(uint32(fieldNumber)<<3 | uint32(wireType))
	return x
}

func (field *FieldDescriptorProto) GetKey() []byte {
	x := field.GetKeyUint64()
	i := 0
	keybuf := make([]byte, 0)
	for i = 0; x > 127; i++ {
		keybuf = append(keybuf, 0x80|uint8(x&0x7F))
		x >>= 7
	}
	keybuf = append(keybuf, uint8(x))
	return keybuf
}

func (field *FieldDescriptorProto) GetKey3() []byte {
	x := field.GetKey3Uint64()
	i := 0
	keybuf := make([]byte, 0)
	for i = 0; x > 127; i++ {
		keybuf = append(keybuf, 0x80|uint8(x&0x7F))
		x >>= 7
	}
	keybuf = append(keybuf, uint8(x))
	return keybuf
}

func (desc *FileDescriptorSet) GetField(packageName, messageName, fieldName string) *FieldDescriptorProto {
	msg := desc.GetMessage(packageName, messageName)
	if msg == nil {
		return nil
	}
	for _, field := range msg.GetField() {
		if field.GetName() == fieldName {
			return field
		}
	}
	return nil
}

func (file *FileDescriptorProto) GetMessage(typeName string) *DescriptorProto {
	for _, msg := range file.GetMessageType() {
		if msg.GetName() == typeName {
			return msg
		}
		nes := file.GetNestedMessage(msg, strings.TrimPrefix(typeName, msg.GetName()+"."))
		if nes != nil {
			return nes
		}
	}
	return nil
}

func (file *FileDescriptorProto) GetNestedMessage(msg *DescriptorProto, typeName string) *DescriptorProto {
	for _, nes := range msg.GetNestedType() {
		if nes.GetName() == typeName {
			return nes
		}
		res := file.GetNestedMessage(nes, strings.TrimPrefix(typeName, nes.GetName()+"."))
		if res != nil {
			return res
		}
	}
	return nil
}

func (desc *FileDescriptorSet) GetMessage(packageName string, typeName string) *DescriptorProto {
	for _, file := range desc.GetFile() {
		if strings.Map(dotToUnderscore, file.GetPackage()) != strings.Map(dotToUnderscore, packageName) {
			continue
		}
		for _, msg := range file.GetMessageType() {
			if msg.GetName() == typeName {
				return msg
			}
		}
		for _, msg := range file.GetMessageType() {
			for _, nes := range msg.GetNestedType() {
				if nes.GetName() == typeName {
					return nes
				}
				if msg.GetName()+"."+nes.GetName() == typeName {
					return nes
				}
			}
		}
	}
	return nil
}

func (desc *FileDescriptorSet) IsProto3(packageName string, typeName string) bool {
	for _, file := range desc.GetFile() {
		if strings.Map(dotToUnderscore, file.GetPackage()) != strings.Map(dotToUnderscore, packageName) {
			continue
		}
		for _, msg := range file.GetMessageType() {
			if msg.GetName() == typeName {
				return file.GetSyntax() == "proto3"
			}
		}
		for _, msg := range file.GetMessageType() {
			for _, nes := range msg.GetNestedType() {
				if nes.GetName() == typeName {
					return file.GetSyntax() == "proto3"
				}
				if msg.GetName()+"."+nes.GetName() == typeName {
					return file.GetSyntax() == "proto3"
				}
			}
		}
	}
	return false
}

func (msg *DescriptorProto) IsExtendable() bool {
	return len(msg.GetExtensionRange()) > 0
}

func (desc *FileDescriptorSet) FindExtension(packageName string, typeName string, fieldName string) (extPackageName string, field *FieldDescriptorProto) {
	parent := desc.GetMessage(packageName, typeName)
	if parent == nil {
		return "", nil
	}
	if !parent.IsExtendable() {
		return "", nil
	}
	extendee := "." + packageName + "." + typeName
	for _, file := range desc.GetFile() {
		for _, ext := range file.GetExtension() {
			if strings.Map(dotToUnderscore, file.GetPackage()) == strings.Map(dotToUnderscore, packageName) {
				if !(ext.GetExtendee() == typeName || ext.GetExtendee() == extendee) {
					continue
				}
			} else {
				if ext.GetExtendee() != extendee {
					continue
				}
			}
			if ext.GetName() == fieldName {
				return file.GetPackage(), ext
			}
		}
	}
	return "", nil
}

func (desc *FileDescriptorSet) FindExtensionByFieldNumber(packageName string, typeName string, fieldNum int32) (extPackageName string, field *FieldDescriptorProto) {
	parent := desc.GetMessage(packageName, typeName)
	if parent == nil {
		return "", nil
	}
	if !parent.IsExtendable() {
		return "", nil
	}
	extendee := "." + packageName + "." + typeName
	for _, file := range desc.GetFile() {
		for _, ext := range file.GetExtension() {
			if strings.Map(dotToUnderscore, file.GetPackage()) == strings.Map(dotToUnderscore, packageName) {
				if !(ext.GetExtendee() == typeName || ext.GetExtendee() == extendee) {
					continue
				}
			} else {
				if ext.GetExtendee() != extendee {
					continue
				}
			}
			if ext.GetNumber() == fieldNum {
				return file.GetPackage(), ext
			}
		}
	}
	return "", nil
}

func (desc *FileDescriptorSet) FindMessage(packageName string, typeName string, fieldName string) (msgPackageName string, msgName string) {
	parent := desc.GetMessage(packageName, typeName)
	if parent == nil {
		return "", ""
	}
	field := parent.GetFieldDescriptor(fieldName)
	if field == nil {
		var extPackageName string
		extPackageName, field = desc.FindExtension(packageName, typeName, fieldName)
		if field == nil {
			return "", ""
		}
		packageName = extPackageName
	}
	typeNames := strings.Split(field.GetTypeName(), ".")
	if len(typeNames) == 1 {
		msg := desc.GetMessage(packageName, typeName)
		if msg == nil {
			return "", ""
		}
		return packageName, msg.GetName()
	}
	if len(typeNames) > 2 {
		for i := 1; i < len(typeNames)-1; i++ {
			packageName = strings.Join(typeNames[1:len(typeNames)-i], ".")
			typeName = strings.Join(typeNames[len(typeNames)-i:], ".")
			msg := desc.GetMessage(packageName, typeName)
			if msg != nil {
				typeNames := strings.Split(msg.GetName(), ".")
				if len(typeNames) == 1 {
					return packageName, msg.GetName()
				}
				return strings.Join(typeNames[1:len(typeNames)-1], "."), typeNames[len(typeNames)-1]
			}
		}
	}
	return "", ""
}

func (msg *DescriptorProto) GetFieldDescriptor(fieldName string) *FieldDescriptorProto {
	for _, field := range msg.GetField() {
		if field.GetName() == fieldName {
			return field
		}
	}
	return nil
}

func (desc *FileDescriptorSet) GetEnum(packageName string, typeName string) *EnumDescriptorProto {
	for _, file := range desc.GetFile() {
		if strings.Map(dotToUnderscore, file.GetPackage()) != strings.Map(dotToUnderscore, packageName) {
			continue
		}
		for _, enum := range file.GetEnumType() {
			if enum.GetName() == typeName {
				return enum
			}
		}
	}
	return nil
}

func (f *FieldDescriptorProto) IsEnum() bool {
	return *f.Type == FieldDescriptorProto_TYPE_ENUM
}

func (f *FieldDescriptorProto) IsMessage() bool {
	return *f.Type == FieldDescriptorProto_TYPE_MESSAGE
}

func (f *FieldDescriptorProto) IsBytes() bool {
	return *f.Type == FieldDescriptorProto_TYPE_BYTES
}

func (f *FieldDescriptorProto) IsRepeated() bool {
	return f.Label != nil && *f.Label == FieldDescriptorProto_LABEL_REPEATED
}

func (f *FieldDescriptorProto) IsString() bool {
	return *f.Type == FieldDescriptorProto_TYPE_STRING
}

func (f *FieldDescriptorProto) IsBool() bool {
	return *f.Type == FieldDescriptorProto_TYPE_BOOL
}

func (f *FieldDescriptorProto) IsRequired() bool {
	return f.Label != nil && *f.Label == FieldDescriptorProto_LABEL_REQUIRED
}

func (f *FieldDescriptorProto) IsPacked() bool {
	return f.Options != nil && f.GetOptions().GetPacked()
}

func (f *FieldDescriptorProto) IsPacked3() bool {
	if f.IsRepeated() && f.IsScalar() {
		if f.Options == nil || f.GetOptions().Packed == nil {
			return true
		}
		return f.Options != nil && f.GetOptions().GetPacked()
	}
	return false
}

func (m *DescriptorProto) HasExtension() bool {
	return len(m.ExtensionRange) > 0
}
 07070100000669000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/vendor/github.com/golang  0707010000066A000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/golang/groupcache   0707010000066B000081A4000000000000000000000001645E367C00002821000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/golang/groupcache/LICENSE   Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

"License" shall mean the terms and conditions for use, reproduction, and
distribution as defined by Sections 1 through 9 of this document.

"Licensor" shall mean the copyright owner or entity authorized by the copyright
owner that is granting the License.

"Legal Entity" shall mean the union of the acting entity and all other entities
that control, are controlled by, or are under common control with that entity.
For the purposes of this definition, "control" means (i) the power, direct or
indirect, to cause the direction or management of such entity, whether by
contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.

"You" (or "Your") shall mean an individual or Legal Entity exercising
permissions granted by this License.

"Source" form shall mean the preferred form for making modifications, including
but not limited to software source code, documentation source, and configuration
files.

"Object" form shall mean any form resulting from mechanical transformation or
translation of a Source form, including but not limited to compiled object code,
generated documentation, and conversions to other media types.

"Work" shall mean the work of authorship, whether in Source or Object form, made
available under the License, as indicated by a copyright notice that is included
in or attached to the work (an example is provided in the Appendix below).

"Derivative Works" shall mean any work, whether in Source or Object form, that
is based on (or derived from) the Work and for which the editorial revisions,
annotations, elaborations, or other modifications represent, as a whole, an
original work of authorship. For the purposes of this License, Derivative Works
shall not include works that remain separable from, or merely link (or bind by
name) to the interfaces of, the Work and Derivative Works thereof.

"Contribution" shall mean any work of authorship, including the original version
of the Work and any modifications or additions to that Work or Derivative Works
thereof, that is intentionally submitted to Licensor for inclusion in the Work
by the copyright owner or by an individual or Legal Entity authorized to submit
on behalf of the copyright owner. For the purposes of this definition,
"submitted" means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems, and
issue tracking systems that are managed by, or on behalf of, the Licensor for
the purpose of discussing and improving the Work, but excluding communication
that is conspicuously marked or otherwise designated in writing by the copyright
owner as "Not a Contribution."

"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
of whom a Contribution has been received by Licensor and subsequently
incorporated within the Work.

2. Grant of Copyright License.

Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the Work and such
Derivative Works in Source or Object form.

3. Grant of Patent License.

Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable (except as stated in this section) patent license to make, have
made, use, offer to sell, sell, import, and otherwise transfer the Work, where
such license applies only to those patent claims licensable by such Contributor
that are necessarily infringed by their Contribution(s) alone or by combination
of their Contribution(s) with the Work to which such Contribution(s) was
submitted. If You institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work or a
Contribution incorporated within the Work constitutes direct or contributory
patent infringement, then any patent licenses granted to You under this License
for that Work shall terminate as of the date such litigation is filed.

4. Redistribution.

You may reproduce and distribute copies of the Work or Derivative Works thereof
in any medium, with or without modifications, and in Source or Object form,
provided that You meet the following conditions:

You must give any other recipients of the Work or Derivative Works a copy of
this License; and
You must cause any modified files to carry prominent notices stating that You
changed the files; and
You must retain, in the Source form of any Derivative Works that You distribute,
all copyright, patent, trademark, and attribution notices from the Source form
of the Work, excluding those notices that do not pertain to any part of the
Derivative Works; and
If the Work includes a "NOTICE" text file as part of its distribution, then any
Derivative Works that You distribute must include a readable copy of the
attribution notices contained within such NOTICE file, excluding those notices
that do not pertain to any part of the Derivative Works, in at least one of the
following places: within a NOTICE text file distributed as part of the
Derivative Works; within the Source form or documentation, if provided along
with the Derivative Works; or, within a display generated by the Derivative
Works, if and wherever such third-party notices normally appear. The contents of
the NOTICE file are for informational purposes only and do not modify the
License. You may add Your own attribution notices within Derivative Works that
You distribute, alongside or as an addendum to the NOTICE text from the Work,
provided that such additional attribution notices cannot be construed as
modifying the License.
You may add Your own copyright statement to Your modifications and may provide
additional or different license terms and conditions for use, reproduction, or
distribution of Your modifications, or for any such Derivative Works as a whole,
provided Your use, reproduction, and distribution of the Work otherwise complies
with the conditions stated in this License.

5. Submission of Contributions.

Unless You explicitly state otherwise, any Contribution intentionally submitted
for inclusion in the Work by You to the Licensor shall be under the terms and
conditions of this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify the terms of
any separate license agreement you may have executed with Licensor regarding
such Contributions.

6. Trademarks.

This License does not grant permission to use the trade names, trademarks,
service marks, or product names of the Licensor, except as required for
reasonable and customary use in describing the origin of the Work and
reproducing the content of the NOTICE file.

7. Disclaimer of Warranty.

Unless required by applicable law or agreed to in writing, Licensor provides the
Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
including, without limitation, any warranties or conditions of TITLE,
NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
solely responsible for determining the appropriateness of using or
redistributing the Work and assume any risks associated with Your exercise of
permissions under this License.

8. Limitation of Liability.

In no event and under no legal theory, whether in tort (including negligence),
contract, or otherwise, unless required by applicable law (such as deliberate
and grossly negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special, incidental,
or consequential damages of any character arising as a result of this License or
out of the use or inability to use the Work (including but not limited to
damages for loss of goodwill, work stoppage, computer failure or malfunction, or
any and all other commercial damages or losses), even if such Contributor has
been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability.

While redistributing the Work or Derivative Works thereof, You may choose to
offer, and charge a fee for, acceptance of support, warranty, indemnity, or
other liability obligations and/or rights consistent with this License. However,
in accepting such obligations, You may act only on Your own behalf and on Your
sole responsibility, not on behalf of any other Contributor, and only if You
agree to indemnify, defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason of your
accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work

To apply the Apache License to your work, attach the following boilerplate
notice, with the fields enclosed by brackets "[]" replaced with your own
identifying information. (Don't include the brackets!) The text should be
enclosed in the appropriate comment syntax for the file format. We also
recommend that a file or class name and description of purpose be included on
the same "printed page" as the copyright notice for easier identification within
third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
   0707010000066C000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/golang/groupcache/lru   0707010000066D000081A4000000000000000000000001645E367C00000C23000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/golang/groupcache/lru/lru.go    /*
Copyright 2013 Google Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

// Package lru implements an LRU cache.
package lru

import "container/list"

// Cache is an LRU cache. It is not safe for concurrent access.
type Cache struct {
	// MaxEntries is the maximum number of cache entries before
	// an item is evicted. Zero means no limit.
	MaxEntries int

	// OnEvicted optionally specifies a callback function to be
	// executed when an entry is purged from the cache.
	OnEvicted func(key Key, value interface{})

	ll    *list.List
	cache map[interface{}]*list.Element
}

// A Key may be any value that is comparable. See http://golang.org/ref/spec#Comparison_operators
type Key interface{}

type entry struct {
	key   Key
	value interface{}
}

// New creates a new Cache.
// If maxEntries is zero, the cache has no limit and it's assumed
// that eviction is done by the caller.
func New(maxEntries int) *Cache {
	return &Cache{
		MaxEntries: maxEntries,
		ll:         list.New(),
		cache:      make(map[interface{}]*list.Element),
	}
}

// Add adds a value to the cache.
func (c *Cache) Add(key Key, value interface{}) {
	if c.cache == nil {
		c.cache = make(map[interface{}]*list.Element)
		c.ll = list.New()
	}
	if ee, ok := c.cache[key]; ok {
		c.ll.MoveToFront(ee)
		ee.Value.(*entry).value = value
		return
	}
	ele := c.ll.PushFront(&entry{key, value})
	c.cache[key] = ele
	if c.MaxEntries != 0 && c.ll.Len() > c.MaxEntries {
		c.RemoveOldest()
	}
}

// Get looks up a key's value from the cache.
func (c *Cache) Get(key Key) (value interface{}, ok bool) {
	if c.cache == nil {
		return
	}
	if ele, hit := c.cache[key]; hit {
		c.ll.MoveToFront(ele)
		return ele.Value.(*entry).value, true
	}
	return
}

// Remove removes the provided key from the cache.
func (c *Cache) Remove(key Key) {
	if c.cache == nil {
		return
	}
	if ele, hit := c.cache[key]; hit {
		c.removeElement(ele)
	}
}

// RemoveOldest removes the oldest item from the cache.
func (c *Cache) RemoveOldest() {
	if c.cache == nil {
		return
	}
	ele := c.ll.Back()
	if ele != nil {
		c.removeElement(ele)
	}
}

func (c *Cache) removeElement(e *list.Element) {
	c.ll.Remove(e)
	kv := e.Value.(*entry)
	delete(c.cache, kv.key)
	if c.OnEvicted != nil {
		c.OnEvicted(kv.key, kv.value)
	}
}

// Len returns the number of items in the cache.
func (c *Cache) Len() int {
	if c.cache == nil {
		return 0
	}
	return c.ll.Len()
}

// Clear purges all stored items from the cache.
func (c *Cache) Clear() {
	if c.OnEvicted != nil {
		for _, e := range c.cache {
			kv := e.Value.(*entry)
			c.OnEvicted(kv.key, kv.value)
		}
	}
	c.ll = nil
	c.cache = nil
}
 0707010000066E000041ED000000000000000000000007645E367C00000000000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/vendor/github.com/google  0707010000066F000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp   07070100000670000081A4000000000000000000000001645E367C000005C7000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/LICENSE   Copyright (c) 2017 The Go Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 07070100000671000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/cmp   07070100000672000081A4000000000000000000000001645E367C0000588C000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/cmp/compare.go    // Copyright 2017, The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package cmp determines equality of values.
//
// This package is intended to be a more powerful and safer alternative to
// reflect.DeepEqual for comparing whether two values are semantically equal.
// It is intended to only be used in tests, as performance is not a goal and
// it may panic if it cannot compare the values. Its propensity towards
// panicking means that its unsuitable for production environments where a
// spurious panic may be fatal.
//
// The primary features of cmp are:
//
//   - When the default behavior of equality does not suit the test's needs,
//     custom equality functions can override the equality operation.
//     For example, an equality function may report floats as equal so long as
//     they are within some tolerance of each other.
//
//   - Types with an Equal method may use that method to determine equality.
//     This allows package authors to determine the equality operation
//     for the types that they define.
//
//   - If no custom equality functions are used and no Equal method is defined,
//     equality is determined by recursively comparing the primitive kinds on
//     both values, much like reflect.DeepEqual. Unlike reflect.DeepEqual,
//     unexported fields are not compared by default; they result in panics
//     unless suppressed by using an Ignore option (see cmpopts.IgnoreUnexported)
//     or explicitly compared using the Exporter option.
package cmp

import (
	"fmt"
	"reflect"
	"strings"

	"github.com/google/go-cmp/cmp/internal/diff"
	"github.com/google/go-cmp/cmp/internal/function"
	"github.com/google/go-cmp/cmp/internal/value"
)

// TODO(≥go1.18): Use any instead of interface{}.

// Equal reports whether x and y are equal by recursively applying the
// following rules in the given order to x and y and all of their sub-values:
//
//   - Let S be the set of all Ignore, Transformer, and Comparer options that
//     remain after applying all path filters, value filters, and type filters.
//     If at least one Ignore exists in S, then the comparison is ignored.
//     If the number of Transformer and Comparer options in S is non-zero,
//     then Equal panics because it is ambiguous which option to use.
//     If S contains a single Transformer, then use that to transform
//     the current values and recursively call Equal on the output values.
//     If S contains a single Comparer, then use that to compare the current values.
//     Otherwise, evaluation proceeds to the next rule.
//
//   - If the values have an Equal method of the form "(T) Equal(T) bool" or
//     "(T) Equal(I) bool" where T is assignable to I, then use the result of
//     x.Equal(y) even if x or y is nil. Otherwise, no such method exists and
//     evaluation proceeds to the next rule.
//
//   - Lastly, try to compare x and y based on their basic kinds.
//     Simple kinds like booleans, integers, floats, complex numbers, strings,
//     and channels are compared using the equivalent of the == operator in Go.
//     Functions are only equal if they are both nil, otherwise they are unequal.
//
// Structs are equal if recursively calling Equal on all fields report equal.
// If a struct contains unexported fields, Equal panics unless an Ignore option
// (e.g., cmpopts.IgnoreUnexported) ignores that field or the Exporter option
// explicitly permits comparing the unexported field.
//
// Slices are equal if they are both nil or both non-nil, where recursively
// calling Equal on all non-ignored slice or array elements report equal.
// Empty non-nil slices and nil slices are not equal; to equate empty slices,
// consider using cmpopts.EquateEmpty.
//
// Maps are equal if they are both nil or both non-nil, where recursively
// calling Equal on all non-ignored map entries report equal.
// Map keys are equal according to the == operator.
// To use custom comparisons for map keys, consider using cmpopts.SortMaps.
// Empty non-nil maps and nil maps are not equal; to equate empty maps,
// consider using cmpopts.EquateEmpty.
//
// Pointers and interfaces are equal if they are both nil or both non-nil,
// where they have the same underlying concrete type and recursively
// calling Equal on the underlying values reports equal.
//
// Before recursing into a pointer, slice element, or map, the current path
// is checked to detect whether the address has already been visited.
// If there is a cycle, then the pointed at values are considered equal
// only if both addresses were previously visited in the same path step.
func Equal(x, y interface{}, opts ...Option) bool {
	s := newState(opts)
	s.compareAny(rootStep(x, y))
	return s.result.Equal()
}

// Diff returns a human-readable report of the differences between two values:
// y - x. It returns an empty string if and only if Equal returns true for the
// same input values and options.
//
// The output is displayed as a literal in pseudo-Go syntax.
// At the start of each line, a "-" prefix indicates an element removed from x,
// a "+" prefix to indicates an element added from y, and the lack of a prefix
// indicates an element common to both x and y. If possible, the output
// uses fmt.Stringer.String or error.Error methods to produce more humanly
// readable outputs. In such cases, the string is prefixed with either an
// 's' or 'e' character, respectively, to indicate that the method was called.
//
// Do not depend on this output being stable. If you need the ability to
// programmatically interpret the difference, consider using a custom Reporter.
func Diff(x, y interface{}, opts ...Option) string {
	s := newState(opts)

	// Optimization: If there are no other reporters, we can optimize for the
	// common case where the result is equal (and thus no reported difference).
	// This avoids the expensive construction of a difference tree.
	if len(s.reporters) == 0 {
		s.compareAny(rootStep(x, y))
		if s.result.Equal() {
			return ""
		}
		s.result = diff.Result{} // Reset results
	}

	r := new(defaultReporter)
	s.reporters = append(s.reporters, reporter{r})
	s.compareAny(rootStep(x, y))
	d := r.String()
	if (d == "") != s.result.Equal() {
		panic("inconsistent difference and equality results")
	}
	return d
}

// rootStep constructs the first path step. If x and y have differing types,
// then they are stored within an empty interface type.
func rootStep(x, y interface{}) PathStep {
	vx := reflect.ValueOf(x)
	vy := reflect.ValueOf(y)

	// If the inputs are different types, auto-wrap them in an empty interface
	// so that they have the same parent type.
	var t reflect.Type
	if !vx.IsValid() || !vy.IsValid() || vx.Type() != vy.Type() {
		t = anyType
		if vx.IsValid() {
			vvx := reflect.New(t).Elem()
			vvx.Set(vx)
			vx = vvx
		}
		if vy.IsValid() {
			vvy := reflect.New(t).Elem()
			vvy.Set(vy)
			vy = vvy
		}
	} else {
		t = vx.Type()
	}

	return &pathStep{t, vx, vy}
}

type state struct {
	// These fields represent the "comparison state".
	// Calling statelessCompare must not result in observable changes to these.
	result    diff.Result // The current result of comparison
	curPath   Path        // The current path in the value tree
	curPtrs   pointerPath // The current set of visited pointers
	reporters []reporter  // Optional reporters

	// recChecker checks for infinite cycles applying the same set of
	// transformers upon the output of itself.
	recChecker recChecker

	// dynChecker triggers pseudo-random checks for option correctness.
	// It is safe for statelessCompare to mutate this value.
	dynChecker dynChecker

	// These fields, once set by processOption, will not change.
	exporters []exporter // List of exporters for structs with unexported fields
	opts      Options    // List of all fundamental and filter options
}

func newState(opts []Option) *state {
	// Always ensure a validator option exists to validate the inputs.
	s := &state{opts: Options{validator{}}}
	s.curPtrs.Init()
	s.processOption(Options(opts))
	return s
}

func (s *state) processOption(opt Option) {
	switch opt := opt.(type) {
	case nil:
	case Options:
		for _, o := range opt {
			s.processOption(o)
		}
	case coreOption:
		type filtered interface {
			isFiltered() bool
		}
		if fopt, ok := opt.(filtered); ok && !fopt.isFiltered() {
			panic(fmt.Sprintf("cannot use an unfiltered option: %v", opt))
		}
		s.opts = append(s.opts, opt)
	case exporter:
		s.exporters = append(s.exporters, opt)
	case reporter:
		s.reporters = append(s.reporters, opt)
	default:
		panic(fmt.Sprintf("unknown option %T", opt))
	}
}

// statelessCompare compares two values and returns the result.
// This function is stateless in that it does not alter the current result,
// or output to any registered reporters.
func (s *state) statelessCompare(step PathStep) diff.Result {
	// We do not save and restore curPath and curPtrs because all of the
	// compareX methods should properly push and pop from them.
	// It is an implementation bug if the contents of the paths differ from
	// when calling this function to when returning from it.

	oldResult, oldReporters := s.result, s.reporters
	s.result = diff.Result{} // Reset result
	s.reporters = nil        // Remove reporters to avoid spurious printouts
	s.compareAny(step)
	res := s.result
	s.result, s.reporters = oldResult, oldReporters
	return res
}

func (s *state) compareAny(step PathStep) {
	// Update the path stack.
	s.curPath.push(step)
	defer s.curPath.pop()
	for _, r := range s.reporters {
		r.PushStep(step)
		defer r.PopStep()
	}
	s.recChecker.Check(s.curPath)

	// Cycle-detection for slice elements (see NOTE in compareSlice).
	t := step.Type()
	vx, vy := step.Values()
	if si, ok := step.(SliceIndex); ok && si.isSlice && vx.IsValid() && vy.IsValid() {
		px, py := vx.Addr(), vy.Addr()
		if eq, visited := s.curPtrs.Push(px, py); visited {
			s.report(eq, reportByCycle)
			return
		}
		defer s.curPtrs.Pop(px, py)
	}

	// Rule 1: Check whether an option applies on this node in the value tree.
	if s.tryOptions(t, vx, vy) {
		return
	}

	// Rule 2: Check whether the type has a valid Equal method.
	if s.tryMethod(t, vx, vy) {
		return
	}

	// Rule 3: Compare based on the underlying kind.
	switch t.Kind() {
	case reflect.Bool:
		s.report(vx.Bool() == vy.Bool(), 0)
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		s.report(vx.Int() == vy.Int(), 0)
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		s.report(vx.Uint() == vy.Uint(), 0)
	case reflect.Float32, reflect.Float64:
		s.report(vx.Float() == vy.Float(), 0)
	case reflect.Complex64, reflect.Complex128:
		s.report(vx.Complex() == vy.Complex(), 0)
	case reflect.String:
		s.report(vx.String() == vy.String(), 0)
	case reflect.Chan, reflect.UnsafePointer:
		s.report(vx.Pointer() == vy.Pointer(), 0)
	case reflect.Func:
		s.report(vx.IsNil() && vy.IsNil(), 0)
	case reflect.Struct:
		s.compareStruct(t, vx, vy)
	case reflect.Slice, reflect.Array:
		s.compareSlice(t, vx, vy)
	case reflect.Map:
		s.compareMap(t, vx, vy)
	case reflect.Ptr:
		s.comparePtr(t, vx, vy)
	case reflect.Interface:
		s.compareInterface(t, vx, vy)
	default:
		panic(fmt.Sprintf("%v kind not handled", t.Kind()))
	}
}

func (s *state) tryOptions(t reflect.Type, vx, vy reflect.Value) bool {
	// Evaluate all filters and apply the remaining options.
	if opt := s.opts.filter(s, t, vx, vy); opt != nil {
		opt.apply(s, vx, vy)
		return true
	}
	return false
}

func (s *state) tryMethod(t reflect.Type, vx, vy reflect.Value) bool {
	// Check if this type even has an Equal method.
	m, ok := t.MethodByName("Equal")
	if !ok || !function.IsType(m.Type, function.EqualAssignable) {
		return false
	}

	eq := s.callTTBFunc(m.Func, vx, vy)
	s.report(eq, reportByMethod)
	return true
}

func (s *state) callTRFunc(f, v reflect.Value, step Transform) reflect.Value {
	if !s.dynChecker.Next() {
		return f.Call([]reflect.Value{v})[0]
	}

	// Run the function twice and ensure that we get the same results back.
	// We run in goroutines so that the race detector (if enabled) can detect
	// unsafe mutations to the input.
	c := make(chan reflect.Value)
	go detectRaces(c, f, v)
	got := <-c
	want := f.Call([]reflect.Value{v})[0]
	if step.vx, step.vy = got, want; !s.statelessCompare(step).Equal() {
		// To avoid false-positives with non-reflexive equality operations,
		// we sanity check whether a value is equal to itself.
		if step.vx, step.vy = want, want; !s.statelessCompare(step).Equal() {
			return want
		}
		panic(fmt.Sprintf("non-deterministic function detected: %s", function.NameOf(f)))
	}
	return want
}

func (s *state) callTTBFunc(f, x, y reflect.Value) bool {
	if !s.dynChecker.Next() {
		return f.Call([]reflect.Value{x, y})[0].Bool()
	}

	// Swapping the input arguments is sufficient to check that
	// f is symmetric and deterministic.
	// We run in goroutines so that the race detector (if enabled) can detect
	// unsafe mutations to the input.
	c := make(chan reflect.Value)
	go detectRaces(c, f, y, x)
	got := <-c
	want := f.Call([]reflect.Value{x, y})[0].Bool()
	if !got.IsValid() || got.Bool() != want {
		panic(fmt.Sprintf("non-deterministic or non-symmetric function detected: %s", function.NameOf(f)))
	}
	return want
}

func detectRaces(c chan<- reflect.Value, f reflect.Value, vs ...reflect.Value) {
	var ret reflect.Value
	defer func() {
		recover() // Ignore panics, let the other call to f panic instead
		c <- ret
	}()
	ret = f.Call(vs)[0]
}

func (s *state) compareStruct(t reflect.Type, vx, vy reflect.Value) {
	var addr bool
	var vax, vay reflect.Value // Addressable versions of vx and vy

	var mayForce, mayForceInit bool
	step := StructField{&structField{}}
	for i := 0; i < t.NumField(); i++ {
		step.typ = t.Field(i).Type
		step.vx = vx.Field(i)
		step.vy = vy.Field(i)
		step.name = t.Field(i).Name
		step.idx = i
		step.unexported = !isExported(step.name)
		if step.unexported {
			if step.name == "_" {
				continue
			}
			// Defer checking of unexported fields until later to give an
			// Ignore a chance to ignore the field.
			if !vax.IsValid() || !vay.IsValid() {
				// For retrieveUnexportedField to work, the parent struct must
				// be addressable. Create a new copy of the values if
				// necessary to make them addressable.
				addr = vx.CanAddr() || vy.CanAddr()
				vax = makeAddressable(vx)
				vay = makeAddressable(vy)
			}
			if !mayForceInit {
				for _, xf := range s.exporters {
					mayForce = mayForce || xf(t)
				}
				mayForceInit = true
			}
			step.mayForce = mayForce
			step.paddr = addr
			step.pvx = vax
			step.pvy = vay
			step.field = t.Field(i)
		}
		s.compareAny(step)
	}
}

func (s *state) compareSlice(t reflect.Type, vx, vy reflect.Value) {
	isSlice := t.Kind() == reflect.Slice
	if isSlice && (vx.IsNil() || vy.IsNil()) {
		s.report(vx.IsNil() && vy.IsNil(), 0)
		return
	}

	// NOTE: It is incorrect to call curPtrs.Push on the slice header pointer
	// since slices represents a list of pointers, rather than a single pointer.
	// The pointer checking logic must be handled on a per-element basis
	// in compareAny.
	//
	// A slice header (see reflect.SliceHeader) in Go is a tuple of a starting
	// pointer P, a length N, and a capacity C. Supposing each slice element has
	// a memory size of M, then the slice is equivalent to the list of pointers:
	//	[P+i*M for i in range(N)]
	//
	// For example, v[:0] and v[:1] are slices with the same starting pointer,
	// but they are clearly different values. Using the slice pointer alone
	// violates the assumption that equal pointers implies equal values.

	step := SliceIndex{&sliceIndex{pathStep: pathStep{typ: t.Elem()}, isSlice: isSlice}}
	withIndexes := func(ix, iy int) SliceIndex {
		if ix >= 0 {
			step.vx, step.xkey = vx.Index(ix), ix
		} else {
			step.vx, step.xkey = reflect.Value{}, -1
		}
		if iy >= 0 {
			step.vy, step.ykey = vy.Index(iy), iy
		} else {
			step.vy, step.ykey = reflect.Value{}, -1
		}
		return step
	}

	// Ignore options are able to ignore missing elements in a slice.
	// However, detecting these reliably requires an optimal differencing
	// algorithm, for which diff.Difference is not.
	//
	// Instead, we first iterate through both slices to detect which elements
	// would be ignored if standing alone. The index of non-discarded elements
	// are stored in a separate slice, which diffing is then performed on.
	var indexesX, indexesY []int
	var ignoredX, ignoredY []bool
	for ix := 0; ix < vx.Len(); ix++ {
		ignored := s.statelessCompare(withIndexes(ix, -1)).NumDiff == 0
		if !ignored {
			indexesX = append(indexesX, ix)
		}
		ignoredX = append(ignoredX, ignored)
	}
	for iy := 0; iy < vy.Len(); iy++ {
		ignored := s.statelessCompare(withIndexes(-1, iy)).NumDiff == 0
		if !ignored {
			indexesY = append(indexesY, iy)
		}
		ignoredY = append(ignoredY, ignored)
	}

	// Compute an edit-script for slices vx and vy (excluding ignored elements).
	edits := diff.Difference(len(indexesX), len(indexesY), func(ix, iy int) diff.Result {
		return s.statelessCompare(withIndexes(indexesX[ix], indexesY[iy]))
	})

	// Replay the ignore-scripts and the edit-script.
	var ix, iy int
	for ix < vx.Len() || iy < vy.Len() {
		var e diff.EditType
		switch {
		case ix < len(ignoredX) && ignoredX[ix]:
			e = diff.UniqueX
		case iy < len(ignoredY) && ignoredY[iy]:
			e = diff.UniqueY
		default:
			e, edits = edits[0], edits[1:]
		}
		switch e {
		case diff.UniqueX:
			s.compareAny(withIndexes(ix, -1))
			ix++
		case diff.UniqueY:
			s.compareAny(withIndexes(-1, iy))
			iy++
		default:
			s.compareAny(withIndexes(ix, iy))
			ix++
			iy++
		}
	}
}

func (s *state) compareMap(t reflect.Type, vx, vy reflect.Value) {
	if vx.IsNil() || vy.IsNil() {
		s.report(vx.IsNil() && vy.IsNil(), 0)
		return
	}

	// Cycle-detection for maps.
	if eq, visited := s.curPtrs.Push(vx, vy); visited {
		s.report(eq, reportByCycle)
		return
	}
	defer s.curPtrs.Pop(vx, vy)

	// We combine and sort the two map keys so that we can perform the
	// comparisons in a deterministic order.
	step := MapIndex{&mapIndex{pathStep: pathStep{typ: t.Elem()}}}
	for _, k := range value.SortKeys(append(vx.MapKeys(), vy.MapKeys()...)) {
		step.vx = vx.MapIndex(k)
		step.vy = vy.MapIndex(k)
		step.key = k
		if !step.vx.IsValid() && !step.vy.IsValid() {
			// It is possible for both vx and vy to be invalid if the
			// key contained a NaN value in it.
			//
			// Even with the ability to retrieve NaN keys in Go 1.12,
			// there still isn't a sensible way to compare the values since
			// a NaN key may map to multiple unordered values.
			// The most reasonable way to compare NaNs would be to compare the
			// set of values. However, this is impossible to do efficiently
			// since set equality is provably an O(n^2) operation given only
			// an Equal function. If we had a Less function or Hash function,
			// this could be done in O(n*log(n)) or O(n), respectively.
			//
			// Rather than adding complex logic to deal with NaNs, make it
			// the user's responsibility to compare such obscure maps.
			const help = "consider providing a Comparer to compare the map"
			panic(fmt.Sprintf("%#v has map key with NaNs\n%s", s.curPath, help))
		}
		s.compareAny(step)
	}
}

func (s *state) comparePtr(t reflect.Type, vx, vy reflect.Value) {
	if vx.IsNil() || vy.IsNil() {
		s.report(vx.IsNil() && vy.IsNil(), 0)
		return
	}

	// Cycle-detection for pointers.
	if eq, visited := s.curPtrs.Push(vx, vy); visited {
		s.report(eq, reportByCycle)
		return
	}
	defer s.curPtrs.Pop(vx, vy)

	vx, vy = vx.Elem(), vy.Elem()
	s.compareAny(Indirect{&indirect{pathStep{t.Elem(), vx, vy}}})
}

func (s *state) compareInterface(t reflect.Type, vx, vy reflect.Value) {
	if vx.IsNil() || vy.IsNil() {
		s.report(vx.IsNil() && vy.IsNil(), 0)
		return
	}
	vx, vy = vx.Elem(), vy.Elem()
	if vx.Type() != vy.Type() {
		s.report(false, 0)
		return
	}
	s.compareAny(TypeAssertion{&typeAssertion{pathStep{vx.Type(), vx, vy}}})
}

func (s *state) report(eq bool, rf resultFlags) {
	if rf&reportByIgnore == 0 {
		if eq {
			s.result.NumSame++
			rf |= reportEqual
		} else {
			s.result.NumDiff++
			rf |= reportUnequal
		}
	}
	for _, r := range s.reporters {
		r.Report(Result{flags: rf})
	}
}

// recChecker tracks the state needed to periodically perform checks that
// user provided transformers are not stuck in an infinitely recursive cycle.
type recChecker struct{ next int }

// Check scans the Path for any recursive transformers and panics when any
// recursive transformers are detected. Note that the presence of a
// recursive Transformer does not necessarily imply an infinite cycle.
// As such, this check only activates after some minimal number of path steps.
func (rc *recChecker) Check(p Path) {
	const minLen = 1 << 16
	if rc.next == 0 {
		rc.next = minLen
	}
	if len(p) < rc.next {
		return
	}
	rc.next <<= 1

	// Check whether the same transformer has appeared at least twice.
	var ss []string
	m := map[Option]int{}
	for _, ps := range p {
		if t, ok := ps.(Transform); ok {
			t := t.Option()
			if m[t] == 1 { // Transformer was used exactly once before
				tf := t.(*transformer).fnc.Type()
				ss = append(ss, fmt.Sprintf("%v: %v => %v", t, tf.In(0), tf.Out(0)))
			}
			m[t]++
		}
	}
	if len(ss) > 0 {
		const warning = "recursive set of Transformers detected"
		const help = "consider using cmpopts.AcyclicTransformer"
		set := strings.Join(ss, "\n\t")
		panic(fmt.Sprintf("%s:\n\t%s\n%s", warning, set, help))
	}
}

// dynChecker tracks the state needed to periodically perform checks that
// user provided functions are symmetric and deterministic.
// The zero value is safe for immediate use.
type dynChecker struct{ curr, next int }

// Next increments the state and reports whether a check should be performed.
//
// Checks occur every Nth function call, where N is a triangular number:
//
//	0 1 3 6 10 15 21 28 36 45 55 66 78 91 105 120 136 153 171 190 ...
//
// See https://en.wikipedia.org/wiki/Triangular_number
//
// This sequence ensures that the cost of checks drops significantly as
// the number of functions calls grows larger.
func (dc *dynChecker) Next() bool {
	ok := dc.curr == dc.next
	if ok {
		dc.curr = 0
		dc.next++
	}
	dc.curr++
	return ok
}

// makeAddressable returns a value that is always addressable.
// It returns the input verbatim if it is already addressable,
// otherwise it creates a new value and returns an addressable copy.
func makeAddressable(v reflect.Value) reflect.Value {
	if v.CanAddr() {
		return v
	}
	vc := reflect.New(v.Type()).Elem()
	vc.Set(v)
	return vc
}
07070100000673000081A4000000000000000000000001645E367C0000019B000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/cmp/export_panic.go   // Copyright 2017, The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build purego
// +build purego

package cmp

import "reflect"

const supportExporters = false

func retrieveUnexportedField(reflect.Value, reflect.StructField, bool) reflect.Value {
	panic("no support for forcibly accessing unexported fields")
}
 07070100000674000081A4000000000000000000000001645E367C000004EA000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/cmp/export_unsafe.go  // Copyright 2017, The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build !purego
// +build !purego

package cmp

import (
	"reflect"
	"unsafe"
)

const supportExporters = true

// retrieveUnexportedField uses unsafe to forcibly retrieve any field from
// a struct such that the value has read-write permissions.
//
// The parent struct, v, must be addressable, while f must be a StructField
// describing the field to retrieve. If addr is false,
// then the returned value will be shallowed copied to be non-addressable.
func retrieveUnexportedField(v reflect.Value, f reflect.StructField, addr bool) reflect.Value {
	ve := reflect.NewAt(f.Type, unsafe.Pointer(uintptr(unsafe.Pointer(v.UnsafeAddr()))+f.Offset)).Elem()
	if !addr {
		// A field is addressable if and only if the struct is addressable.
		// If the original parent value was not addressable, shallow copy the
		// value to make it non-addressable to avoid leaking an implementation
		// detail of how forcibly exporting a field works.
		if ve.Kind() == reflect.Interface && ve.IsNil() {
			return reflect.Zero(f.Type)
		}
		return reflect.ValueOf(ve.Interface()).Convert(f.Type)
	}
	return ve
}
  07070100000675000041ED000000000000000000000006645E367C00000000000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/cmp/internal  07070100000676000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/cmp/internal/diff 07070100000677000081A4000000000000000000000001645E367C00000196000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/cmp/internal/diff/debug_disable.go    // Copyright 2017, The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build !cmp_debug
// +build !cmp_debug

package diff

var debug debugger

type debugger struct{}

func (debugger) Begin(_, _ int, f EqualFunc, _, _ *EditScript) EqualFunc {
	return f
}
func (debugger) Update() {}
func (debugger) Finish() {}
  07070100000678000081A4000000000000000000000001645E367C00000FF2000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/cmp/internal/diff/debug_enable.go // Copyright 2017, The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build cmp_debug
// +build cmp_debug

package diff

import (
	"fmt"
	"strings"
	"sync"
	"time"
)

// The algorithm can be seen running in real-time by enabling debugging:
//	go test -tags=cmp_debug -v
//
// Example output:
//	=== RUN   TestDifference/#34
//	┌───────────────────────────────┐
//	│ \ · · · · · · · · · · · · · · │
//	│ · # · · · · · · · · · · · · · │
//	│ · \ · · · · · · · · · · · · · │
//	│ · · \ · · · · · · · · · · · · │
//	│ · · · X # · · · · · · · · · · │
//	│ · · · # \ · · · · · · · · · · │
//	│ · · · · · # # · · · · · · · · │
//	│ · · · · · # \ · · · · · · · · │
//	│ · · · · · · · \ · · · · · · · │
//	│ · · · · · · · · \ · · · · · · │
//	│ · · · · · · · · · \ · · · · · │
//	│ · · · · · · · · · · \ · · # · │
//	│ · · · · · · · · · · · \ # # · │
//	│ · · · · · · · · · · · # # # · │
//	│ · · · · · · · · · · # # # # · │
//	│ · · · · · · · · · # # # # # · │
//	│ · · · · · · · · · · · · · · \ │
//	└───────────────────────────────┘
//	[.Y..M.XY......YXYXY.|]
//
// The grid represents the edit-graph where the horizontal axis represents
// list X and the vertical axis represents list Y. The start of the two lists
// is the top-left, while the ends are the bottom-right. The '·' represents
// an unexplored node in the graph. The '\' indicates that the two symbols
// from list X and Y are equal. The 'X' indicates that two symbols are similar
// (but not exactly equal) to each other. The '#' indicates that the two symbols
// are different (and not similar). The algorithm traverses this graph trying to
// make the paths starting in the top-left and the bottom-right connect.
//
// The series of '.', 'X', 'Y', and 'M' characters at the bottom represents
// the currently established path from the forward and reverse searches,
// separated by a '|' character.

const (
	updateDelay  = 100 * time.Millisecond
	finishDelay  = 500 * time.Millisecond
	ansiTerminal = true // ANSI escape codes used to move terminal cursor
)

var debug debugger

type debugger struct {
	sync.Mutex
	p1, p2           EditScript
	fwdPath, revPath *EditScript
	grid             []byte
	lines            int
}

func (dbg *debugger) Begin(nx, ny int, f EqualFunc, p1, p2 *EditScript) EqualFunc {
	dbg.Lock()
	dbg.fwdPath, dbg.revPath = p1, p2
	top := "┌─" + strings.Repeat("──", nx) + "┐\n"
	row := "│ " + strings.Repeat("· ", nx) + "│\n"
	btm := "└─" + strings.Repeat("──", nx) + "┘\n"
	dbg.grid = []byte(top + strings.Repeat(row, ny) + btm)
	dbg.lines = strings.Count(dbg.String(), "\n")
	fmt.Print(dbg)

	// Wrap the EqualFunc so that we can intercept each result.
	return func(ix, iy int) (r Result) {
		cell := dbg.grid[len(top)+iy*len(row):][len("│ ")+len("· ")*ix:][:len("·")]
		for i := range cell {
			cell[i] = 0 // Zero out the multiple bytes of UTF-8 middle-dot
		}
		switch r = f(ix, iy); {
		case r.Equal():
			cell[0] = '\\'
		case r.Similar():
			cell[0] = 'X'
		default:
			cell[0] = '#'
		}
		return
	}
}

func (dbg *debugger) Update() {
	dbg.print(updateDelay)
}

func (dbg *debugger) Finish() {
	dbg.print(finishDelay)
	dbg.Unlock()
}

func (dbg *debugger) String() string {
	dbg.p1, dbg.p2 = *dbg.fwdPath, dbg.p2[:0]
	for i := len(*dbg.revPath) - 1; i >= 0; i-- {
		dbg.p2 = append(dbg.p2, (*dbg.revPath)[i])
	}
	return fmt.Sprintf("%s[%v|%v]\n\n", dbg.grid, dbg.p1, dbg.p2)
}

func (dbg *debugger) print(d time.Duration) {
	if ansiTerminal {
		fmt.Printf("\x1b[%dA", dbg.lines) // Reset terminal cursor
	}
	fmt.Print(dbg)
	time.Sleep(d)
}
  07070100000679000081A4000000000000000000000001645E367C00003368000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/cmp/internal/diff/diff.go // Copyright 2017, The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package diff implements an algorithm for producing edit-scripts.
// The edit-script is a sequence of operations needed to transform one list
// of symbols into another (or vice-versa). The edits allowed are insertions,
// deletions, and modifications. The summation of all edits is called the
// Levenshtein distance as this problem is well-known in computer science.
//
// This package prioritizes performance over accuracy. That is, the run time
// is more important than obtaining a minimal Levenshtein distance.
package diff

import (
	"math/rand"
	"time"

	"github.com/google/go-cmp/cmp/internal/flags"
)

// EditType represents a single operation within an edit-script.
type EditType uint8

const (
	// Identity indicates that a symbol pair is identical in both list X and Y.
	Identity EditType = iota
	// UniqueX indicates that a symbol only exists in X and not Y.
	UniqueX
	// UniqueY indicates that a symbol only exists in Y and not X.
	UniqueY
	// Modified indicates that a symbol pair is a modification of each other.
	Modified
)

// EditScript represents the series of differences between two lists.
type EditScript []EditType

// String returns a human-readable string representing the edit-script where
// Identity, UniqueX, UniqueY, and Modified are represented by the
// '.', 'X', 'Y', and 'M' characters, respectively.
func (es EditScript) String() string {
	b := make([]byte, len(es))
	for i, e := range es {
		switch e {
		case Identity:
			b[i] = '.'
		case UniqueX:
			b[i] = 'X'
		case UniqueY:
			b[i] = 'Y'
		case Modified:
			b[i] = 'M'
		default:
			panic("invalid edit-type")
		}
	}
	return string(b)
}

// stats returns a histogram of the number of each type of edit operation.
func (es EditScript) stats() (s struct{ NI, NX, NY, NM int }) {
	for _, e := range es {
		switch e {
		case Identity:
			s.NI++
		case UniqueX:
			s.NX++
		case UniqueY:
			s.NY++
		case Modified:
			s.NM++
		default:
			panic("invalid edit-type")
		}
	}
	return
}

// Dist is the Levenshtein distance and is guaranteed to be 0 if and only if
// lists X and Y are equal.
func (es EditScript) Dist() int { return len(es) - es.stats().NI }

// LenX is the length of the X list.
func (es EditScript) LenX() int { return len(es) - es.stats().NY }

// LenY is the length of the Y list.
func (es EditScript) LenY() int { return len(es) - es.stats().NX }

// EqualFunc reports whether the symbols at indexes ix and iy are equal.
// When called by Difference, the index is guaranteed to be within nx and ny.
type EqualFunc func(ix int, iy int) Result

// Result is the result of comparison.
// NumSame is the number of sub-elements that are equal.
// NumDiff is the number of sub-elements that are not equal.
type Result struct{ NumSame, NumDiff int }

// BoolResult returns a Result that is either Equal or not Equal.
func BoolResult(b bool) Result {
	if b {
		return Result{NumSame: 1} // Equal, Similar
	} else {
		return Result{NumDiff: 2} // Not Equal, not Similar
	}
}

// Equal indicates whether the symbols are equal. Two symbols are equal
// if and only if NumDiff == 0. If Equal, then they are also Similar.
func (r Result) Equal() bool { return r.NumDiff == 0 }

// Similar indicates whether two symbols are similar and may be represented
// by using the Modified type. As a special case, we consider binary comparisons
// (i.e., those that return Result{1, 0} or Result{0, 1}) to be similar.
//
// The exact ratio of NumSame to NumDiff to determine similarity may change.
func (r Result) Similar() bool {
	// Use NumSame+1 to offset NumSame so that binary comparisons are similar.
	return r.NumSame+1 >= r.NumDiff
}

var randBool = rand.New(rand.NewSource(time.Now().Unix())).Intn(2) == 0

// Difference reports whether two lists of lengths nx and ny are equal
// given the definition of equality provided as f.
//
// This function returns an edit-script, which is a sequence of operations
// needed to convert one list into the other. The following invariants for
// the edit-script are maintained:
//   - eq == (es.Dist()==0)
//   - nx == es.LenX()
//   - ny == es.LenY()
//
// This algorithm is not guaranteed to be an optimal solution (i.e., one that
// produces an edit-script with a minimal Levenshtein distance). This algorithm
// favors performance over optimality. The exact output is not guaranteed to
// be stable and may change over time.
func Difference(nx, ny int, f EqualFunc) (es EditScript) {
	// This algorithm is based on traversing what is known as an "edit-graph".
	// See Figure 1 from "An O(ND) Difference Algorithm and Its Variations"
	// by Eugene W. Myers. Since D can be as large as N itself, this is
	// effectively O(N^2). Unlike the algorithm from that paper, we are not
	// interested in the optimal path, but at least some "decent" path.
	//
	// For example, let X and Y be lists of symbols:
	//	X = [A B C A B B A]
	//	Y = [C B A B A C]
	//
	// The edit-graph can be drawn as the following:
	//	   A B C A B B A
	//	  ┌─────────────┐
	//	C │_|_|\|_|_|_|_│ 0
	//	B │_|\|_|_|\|\|_│ 1
	//	A │\|_|_|\|_|_|\│ 2
	//	B │_|\|_|_|\|\|_│ 3
	//	A │\|_|_|\|_|_|\│ 4
	//	C │ | |\| | | | │ 5
	//	  └─────────────┘ 6
	//	   0 1 2 3 4 5 6 7
	//
	// List X is written along the horizontal axis, while list Y is written
	// along the vertical axis. At any point on this grid, if the symbol in
	// list X matches the corresponding symbol in list Y, then a '\' is drawn.
	// The goal of any minimal edit-script algorithm is to find a path from the
	// top-left corner to the bottom-right corner, while traveling through the
	// fewest horizontal or vertical edges.
	// A horizontal edge is equivalent to inserting a symbol from list X.
	// A vertical edge is equivalent to inserting a symbol from list Y.
	// A diagonal edge is equivalent to a matching symbol between both X and Y.

	// Invariants:
	//   - 0 ≤ fwdPath.X ≤ (fwdFrontier.X, revFrontier.X) ≤ revPath.X ≤ nx
	//   - 0 ≤ fwdPath.Y ≤ (fwdFrontier.Y, revFrontier.Y) ≤ revPath.Y ≤ ny
	//
	// In general:
	//   - fwdFrontier.X < revFrontier.X
	//   - fwdFrontier.Y < revFrontier.Y
	//
	// Unless, it is time for the algorithm to terminate.
	fwdPath := path{+1, point{0, 0}, make(EditScript, 0, (nx+ny)/2)}
	revPath := path{-1, point{nx, ny}, make(EditScript, 0)}
	fwdFrontier := fwdPath.point // Forward search frontier
	revFrontier := revPath.point // Reverse search frontier

	// Search budget bounds the cost of searching for better paths.
	// The longest sequence of non-matching symbols that can be tolerated is
	// approximately the square-root of the search budget.
	searchBudget := 4 * (nx + ny) // O(n)

	// Running the tests with the "cmp_debug" build tag prints a visualization
	// of the algorithm running in real-time. This is educational for
	// understanding how the algorithm works. See debug_enable.go.
	f = debug.Begin(nx, ny, f, &fwdPath.es, &revPath.es)

	// The algorithm below is a greedy, meet-in-the-middle algorithm for
	// computing sub-optimal edit-scripts between two lists.
	//
	// The algorithm is approximately as follows:
	//   - Searching for differences switches back-and-forth between
	//     a search that starts at the beginning (the top-left corner), and
	//     a search that starts at the end (the bottom-right corner).
	//     The goal of the search is connect with the search
	//     from the opposite corner.
	//   - As we search, we build a path in a greedy manner,
	//     where the first match seen is added to the path (this is sub-optimal,
	//     but provides a decent result in practice). When matches are found,
	//     we try the next pair of symbols in the lists and follow all matches
	//     as far as possible.
	//   - When searching for matches, we search along a diagonal going through
	//     through the "frontier" point. If no matches are found,
	//     we advance the frontier towards the opposite corner.
	//   - This algorithm terminates when either the X coordinates or the
	//     Y coordinates of the forward and reverse frontier points ever intersect.

	// This algorithm is correct even if searching only in the forward direction
	// or in the reverse direction. We do both because it is commonly observed
	// that two lists commonly differ because elements were added to the front
	// or end of the other list.
	//
	// Non-deterministically start with either the forward or reverse direction
	// to introduce some deliberate instability so that we have the flexibility
	// to change this algorithm in the future.
	if flags.Deterministic || randBool {
		goto forwardSearch
	} else {
		goto reverseSearch
	}

forwardSearch:
	{
		// Forward search from the beginning.
		if fwdFrontier.X >= revFrontier.X || fwdFrontier.Y >= revFrontier.Y || searchBudget == 0 {
			goto finishSearch
		}
		for stop1, stop2, i := false, false, 0; !(stop1 && stop2) && searchBudget > 0; i++ {
			// Search in a diagonal pattern for a match.
			z := zigzag(i)
			p := point{fwdFrontier.X + z, fwdFrontier.Y - z}
			switch {
			case p.X >= revPath.X || p.Y < fwdPath.Y:
				stop1 = true // Hit top-right corner
			case p.Y >= revPath.Y || p.X < fwdPath.X:
				stop2 = true // Hit bottom-left corner
			case f(p.X, p.Y).Equal():
				// Match found, so connect the path to this point.
				fwdPath.connect(p, f)
				fwdPath.append(Identity)
				// Follow sequence of matches as far as possible.
				for fwdPath.X < revPath.X && fwdPath.Y < revPath.Y {
					if !f(fwdPath.X, fwdPath.Y).Equal() {
						break
					}
					fwdPath.append(Identity)
				}
				fwdFrontier = fwdPath.point
				stop1, stop2 = true, true
			default:
				searchBudget-- // Match not found
			}
			debug.Update()
		}
		// Advance the frontier towards reverse point.
		if revPath.X-fwdFrontier.X >= revPath.Y-fwdFrontier.Y {
			fwdFrontier.X++
		} else {
			fwdFrontier.Y++
		}
		goto reverseSearch
	}

reverseSearch:
	{
		// Reverse search from the end.
		if fwdFrontier.X >= revFrontier.X || fwdFrontier.Y >= revFrontier.Y || searchBudget == 0 {
			goto finishSearch
		}
		for stop1, stop2, i := false, false, 0; !(stop1 && stop2) && searchBudget > 0; i++ {
			// Search in a diagonal pattern for a match.
			z := zigzag(i)
			p := point{revFrontier.X - z, revFrontier.Y + z}
			switch {
			case fwdPath.X >= p.X || revPath.Y < p.Y:
				stop1 = true // Hit bottom-left corner
			case fwdPath.Y >= p.Y || revPath.X < p.X:
				stop2 = true // Hit top-right corner
			case f(p.X-1, p.Y-1).Equal():
				// Match found, so connect the path to this point.
				revPath.connect(p, f)
				revPath.append(Identity)
				// Follow sequence of matches as far as possible.
				for fwdPath.X < revPath.X && fwdPath.Y < revPath.Y {
					if !f(revPath.X-1, revPath.Y-1).Equal() {
						break
					}
					revPath.append(Identity)
				}
				revFrontier = revPath.point
				stop1, stop2 = true, true
			default:
				searchBudget-- // Match not found
			}
			debug.Update()
		}
		// Advance the frontier towards forward point.
		if revFrontier.X-fwdPath.X >= revFrontier.Y-fwdPath.Y {
			revFrontier.X--
		} else {
			revFrontier.Y--
		}
		goto forwardSearch
	}

finishSearch:
	// Join the forward and reverse paths and then append the reverse path.
	fwdPath.connect(revPath.point, f)
	for i := len(revPath.es) - 1; i >= 0; i-- {
		t := revPath.es[i]
		revPath.es = revPath.es[:i]
		fwdPath.append(t)
	}
	debug.Finish()
	return fwdPath.es
}

type path struct {
	dir   int // +1 if forward, -1 if reverse
	point     // Leading point of the EditScript path
	es    EditScript
}

// connect appends any necessary Identity, Modified, UniqueX, or UniqueY types
// to the edit-script to connect p.point to dst.
func (p *path) connect(dst point, f EqualFunc) {
	if p.dir > 0 {
		// Connect in forward direction.
		for dst.X > p.X && dst.Y > p.Y {
			switch r := f(p.X, p.Y); {
			case r.Equal():
				p.append(Identity)
			case r.Similar():
				p.append(Modified)
			case dst.X-p.X >= dst.Y-p.Y:
				p.append(UniqueX)
			default:
				p.append(UniqueY)
			}
		}
		for dst.X > p.X {
			p.append(UniqueX)
		}
		for dst.Y > p.Y {
			p.append(UniqueY)
		}
	} else {
		// Connect in reverse direction.
		for p.X > dst.X && p.Y > dst.Y {
			switch r := f(p.X-1, p.Y-1); {
			case r.Equal():
				p.append(Identity)
			case r.Similar():
				p.append(Modified)
			case p.Y-dst.Y >= p.X-dst.X:
				p.append(UniqueY)
			default:
				p.append(UniqueX)
			}
		}
		for p.X > dst.X {
			p.append(UniqueX)
		}
		for p.Y > dst.Y {
			p.append(UniqueY)
		}
	}
}

func (p *path) append(t EditType) {
	p.es = append(p.es, t)
	switch t {
	case Identity, Modified:
		p.add(p.dir, p.dir)
	case UniqueX:
		p.add(p.dir, 0)
	case UniqueY:
		p.add(0, p.dir)
	}
	debug.Update()
}

type point struct{ X, Y int }

func (p *point) add(dx, dy int) { p.X += dx; p.Y += dy }

// zigzag maps a consecutive sequence of integers to a zig-zag sequence.
//
//	[0 1 2 3 4 5 ...] => [0 -1 +1 -2 +2 ...]
func zigzag(x int) int {
	if x&1 != 0 {
		x = ^x
	}
	return x >> 1
}
0707010000067A000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/cmp/internal/flags    0707010000067B000081A4000000000000000000000001645E367C00000137000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/cmp/internal/flags/flags.go   // Copyright 2019, The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package flags

// Deterministic controls whether the output of Diff should be deterministic.
// This is only used for testing.
var Deterministic bool
 0707010000067C000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/cmp/internal/function 0707010000067D000081A4000000000000000000000001645E367C00000A13000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/cmp/internal/function/func.go // Copyright 2017, The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package function provides functionality for identifying function types.
package function

import (
	"reflect"
	"regexp"
	"runtime"
	"strings"
)

type funcType int

const (
	_ funcType = iota

	tbFunc  // func(T) bool
	ttbFunc // func(T, T) bool
	trbFunc // func(T, R) bool
	tibFunc // func(T, I) bool
	trFunc  // func(T) R

	Equal             = ttbFunc // func(T, T) bool
	EqualAssignable   = tibFunc // func(T, I) bool; encapsulates func(T, T) bool
	Transformer       = trFunc  // func(T) R
	ValueFilter       = ttbFunc // func(T, T) bool
	Less              = ttbFunc // func(T, T) bool
	ValuePredicate    = tbFunc  // func(T) bool
	KeyValuePredicate = trbFunc // func(T, R) bool
)

var boolType = reflect.TypeOf(true)

// IsType reports whether the reflect.Type is of the specified function type.
func IsType(t reflect.Type, ft funcType) bool {
	if t == nil || t.Kind() != reflect.Func || t.IsVariadic() {
		return false
	}
	ni, no := t.NumIn(), t.NumOut()
	switch ft {
	case tbFunc: // func(T) bool
		if ni == 1 && no == 1 && t.Out(0) == boolType {
			return true
		}
	case ttbFunc: // func(T, T) bool
		if ni == 2 && no == 1 && t.In(0) == t.In(1) && t.Out(0) == boolType {
			return true
		}
	case trbFunc: // func(T, R) bool
		if ni == 2 && no == 1 && t.Out(0) == boolType {
			return true
		}
	case tibFunc: // func(T, I) bool
		if ni == 2 && no == 1 && t.In(0).AssignableTo(t.In(1)) && t.Out(0) == boolType {
			return true
		}
	case trFunc: // func(T) R
		if ni == 1 && no == 1 {
			return true
		}
	}
	return false
}

var lastIdentRx = regexp.MustCompile(`[_\p{L}][_\p{L}\p{N}]*$`)

// NameOf returns the name of the function value.
func NameOf(v reflect.Value) string {
	fnc := runtime.FuncForPC(v.Pointer())
	if fnc == nil {
		return "<unknown>"
	}
	fullName := fnc.Name() // e.g., "long/path/name/mypkg.(*MyType).(long/path/name/mypkg.myMethod)-fm"

	// Method closures have a "-fm" suffix.
	fullName = strings.TrimSuffix(fullName, "-fm")

	var name string
	for len(fullName) > 0 {
		inParen := strings.HasSuffix(fullName, ")")
		fullName = strings.TrimSuffix(fullName, ")")

		s := lastIdentRx.FindString(fullName)
		if s == "" {
			break
		}
		name = s + "." + name
		fullName = strings.TrimSuffix(fullName, s)

		if i := strings.LastIndexByte(fullName, '('); inParen && i >= 0 {
			fullName = fullName[:i]
		}
		fullName = strings.TrimSuffix(fullName, ".")
	}
	return strings.TrimSuffix(name, ".")
}
 0707010000067E000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/cmp/internal/value    0707010000067F000081A4000000000000000000000001645E367C0000107E000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/cmp/internal/value/name.go    // Copyright 2020, The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package value

import (
	"reflect"
	"strconv"
)

var anyType = reflect.TypeOf((*interface{})(nil)).Elem()

// TypeString is nearly identical to reflect.Type.String,
// but has an additional option to specify that full type names be used.
func TypeString(t reflect.Type, qualified bool) string {
	return string(appendTypeName(nil, t, qualified, false))
}

func appendTypeName(b []byte, t reflect.Type, qualified, elideFunc bool) []byte {
	// BUG: Go reflection provides no way to disambiguate two named types
	// of the same name and within the same package,
	// but declared within the namespace of different functions.

	// Use the "any" alias instead of "interface{}" for better readability.
	if t == anyType {
		return append(b, "any"...)
	}

	// Named type.
	if t.Name() != "" {
		if qualified && t.PkgPath() != "" {
			b = append(b, '"')
			b = append(b, t.PkgPath()...)
			b = append(b, '"')
			b = append(b, '.')
			b = append(b, t.Name()...)
		} else {
			b = append(b, t.String()...)
		}
		return b
	}

	// Unnamed type.
	switch k := t.Kind(); k {
	case reflect.Bool, reflect.String, reflect.UnsafePointer,
		reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,
		reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr,
		reflect.Float32, reflect.Float64, reflect.Complex64, reflect.Complex128:
		b = append(b, k.String()...)
	case reflect.Chan:
		if t.ChanDir() == reflect.RecvDir {
			b = append(b, "<-"...)
		}
		b = append(b, "chan"...)
		if t.ChanDir() == reflect.SendDir {
			b = append(b, "<-"...)
		}
		b = append(b, ' ')
		b = appendTypeName(b, t.Elem(), qualified, false)
	case reflect.Func:
		if !elideFunc {
			b = append(b, "func"...)
		}
		b = append(b, '(')
		for i := 0; i < t.NumIn(); i++ {
			if i > 0 {
				b = append(b, ", "...)
			}
			if i == t.NumIn()-1 && t.IsVariadic() {
				b = append(b, "..."...)
				b = appendTypeName(b, t.In(i).Elem(), qualified, false)
			} else {
				b = appendTypeName(b, t.In(i), qualified, false)
			}
		}
		b = append(b, ')')
		switch t.NumOut() {
		case 0:
			// Do nothing
		case 1:
			b = append(b, ' ')
			b = appendTypeName(b, t.Out(0), qualified, false)
		default:
			b = append(b, " ("...)
			for i := 0; i < t.NumOut(); i++ {
				if i > 0 {
					b = append(b, ", "...)
				}
				b = appendTypeName(b, t.Out(i), qualified, false)
			}
			b = append(b, ')')
		}
	case reflect.Struct:
		b = append(b, "struct{ "...)
		for i := 0; i < t.NumField(); i++ {
			if i > 0 {
				b = append(b, "; "...)
			}
			sf := t.Field(i)
			if !sf.Anonymous {
				if qualified && sf.PkgPath != "" {
					b = append(b, '"')
					b = append(b, sf.PkgPath...)
					b = append(b, '"')
					b = append(b, '.')
				}
				b = append(b, sf.Name...)
				b = append(b, ' ')
			}
			b = appendTypeName(b, sf.Type, qualified, false)
			if sf.Tag != "" {
				b = append(b, ' ')
				b = strconv.AppendQuote(b, string(sf.Tag))
			}
		}
		if b[len(b)-1] == ' ' {
			b = b[:len(b)-1]
		} else {
			b = append(b, ' ')
		}
		b = append(b, '}')
	case reflect.Slice, reflect.Array:
		b = append(b, '[')
		if k == reflect.Array {
			b = strconv.AppendUint(b, uint64(t.Len()), 10)
		}
		b = append(b, ']')
		b = appendTypeName(b, t.Elem(), qualified, false)
	case reflect.Map:
		b = append(b, "map["...)
		b = appendTypeName(b, t.Key(), qualified, false)
		b = append(b, ']')
		b = appendTypeName(b, t.Elem(), qualified, false)
	case reflect.Ptr:
		b = append(b, '*')
		b = appendTypeName(b, t.Elem(), qualified, false)
	case reflect.Interface:
		b = append(b, "interface{ "...)
		for i := 0; i < t.NumMethod(); i++ {
			if i > 0 {
				b = append(b, "; "...)
			}
			m := t.Method(i)
			if qualified && m.PkgPath != "" {
				b = append(b, '"')
				b = append(b, m.PkgPath...)
				b = append(b, '"')
				b = append(b, '.')
			}
			b = append(b, m.Name...)
			b = appendTypeName(b, m.Type, qualified, true)
		}
		if b[len(b)-1] == ' ' {
			b = b[:len(b)-1]
		} else {
			b = append(b, ' ')
		}
		b = append(b, '}')
	default:
		panic("invalid kind: " + k.String())
	}
	return b
}
  07070100000680000081A4000000000000000000000001645E367C00000370000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/cmp/internal/value/pointer_purego.go  // Copyright 2018, The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build purego
// +build purego

package value

import "reflect"

// Pointer is an opaque typed pointer and is guaranteed to be comparable.
type Pointer struct {
	p uintptr
	t reflect.Type
}

// PointerOf returns a Pointer from v, which must be a
// reflect.Ptr, reflect.Slice, or reflect.Map.
func PointerOf(v reflect.Value) Pointer {
	// NOTE: Storing a pointer as an uintptr is technically incorrect as it
	// assumes that the GC implementation does not use a moving collector.
	return Pointer{v.Pointer(), v.Type()}
}

// IsNil reports whether the pointer is nil.
func (p Pointer) IsNil() bool {
	return p.p == 0
}

// Uintptr returns the pointer as a uintptr.
func (p Pointer) Uintptr() uintptr {
	return p.p
}
07070100000681000081A4000000000000000000000001645E367C0000038F000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/cmp/internal/value/pointer_unsafe.go  // Copyright 2018, The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build !purego
// +build !purego

package value

import (
	"reflect"
	"unsafe"
)

// Pointer is an opaque typed pointer and is guaranteed to be comparable.
type Pointer struct {
	p unsafe.Pointer
	t reflect.Type
}

// PointerOf returns a Pointer from v, which must be a
// reflect.Ptr, reflect.Slice, or reflect.Map.
func PointerOf(v reflect.Value) Pointer {
	// The proper representation of a pointer is unsafe.Pointer,
	// which is necessary if the GC ever uses a moving collector.
	return Pointer{unsafe.Pointer(v.Pointer()), v.Type()}
}

// IsNil reports whether the pointer is nil.
func (p Pointer) IsNil() bool {
	return p.p == nil
}

// Uintptr returns the pointer as a uintptr.
func (p Pointer) Uintptr() uintptr {
	return uintptr(p.p)
}
 07070100000682000081A4000000000000000000000001645E367C00000C27000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/cmp/internal/value/sort.go    // Copyright 2017, The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package value

import (
	"fmt"
	"math"
	"reflect"
	"sort"
)

// SortKeys sorts a list of map keys, deduplicating keys if necessary.
// The type of each value must be comparable.
func SortKeys(vs []reflect.Value) []reflect.Value {
	if len(vs) == 0 {
		return vs
	}

	// Sort the map keys.
	sort.SliceStable(vs, func(i, j int) bool { return isLess(vs[i], vs[j]) })

	// Deduplicate keys (fails for NaNs).
	vs2 := vs[:1]
	for _, v := range vs[1:] {
		if isLess(vs2[len(vs2)-1], v) {
			vs2 = append(vs2, v)
		}
	}
	return vs2
}

// isLess is a generic function for sorting arbitrary map keys.
// The inputs must be of the same type and must be comparable.
func isLess(x, y reflect.Value) bool {
	switch x.Type().Kind() {
	case reflect.Bool:
		return !x.Bool() && y.Bool()
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		return x.Int() < y.Int()
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		return x.Uint() < y.Uint()
	case reflect.Float32, reflect.Float64:
		// NOTE: This does not sort -0 as less than +0
		// since Go maps treat -0 and +0 as equal keys.
		fx, fy := x.Float(), y.Float()
		return fx < fy || math.IsNaN(fx) && !math.IsNaN(fy)
	case reflect.Complex64, reflect.Complex128:
		cx, cy := x.Complex(), y.Complex()
		rx, ix, ry, iy := real(cx), imag(cx), real(cy), imag(cy)
		if rx == ry || (math.IsNaN(rx) && math.IsNaN(ry)) {
			return ix < iy || math.IsNaN(ix) && !math.IsNaN(iy)
		}
		return rx < ry || math.IsNaN(rx) && !math.IsNaN(ry)
	case reflect.Ptr, reflect.UnsafePointer, reflect.Chan:
		return x.Pointer() < y.Pointer()
	case reflect.String:
		return x.String() < y.String()
	case reflect.Array:
		for i := 0; i < x.Len(); i++ {
			if isLess(x.Index(i), y.Index(i)) {
				return true
			}
			if isLess(y.Index(i), x.Index(i)) {
				return false
			}
		}
		return false
	case reflect.Struct:
		for i := 0; i < x.NumField(); i++ {
			if isLess(x.Field(i), y.Field(i)) {
				return true
			}
			if isLess(y.Field(i), x.Field(i)) {
				return false
			}
		}
		return false
	case reflect.Interface:
		vx, vy := x.Elem(), y.Elem()
		if !vx.IsValid() || !vy.IsValid() {
			return !vx.IsValid() && vy.IsValid()
		}
		tx, ty := vx.Type(), vy.Type()
		if tx == ty {
			return isLess(x.Elem(), y.Elem())
		}
		if tx.Kind() != ty.Kind() {
			return vx.Kind() < vy.Kind()
		}
		if tx.String() != ty.String() {
			return tx.String() < ty.String()
		}
		if tx.PkgPath() != ty.PkgPath() {
			return tx.PkgPath() < ty.PkgPath()
		}
		// This can happen in rare situations, so we fallback to just comparing
		// the unique pointer for a reflect.Type. This guarantees deterministic
		// ordering within a program, but it is obviously not stable.
		return reflect.ValueOf(vx.Type()).Pointer() < reflect.ValueOf(vy.Type()).Pointer()
	default:
		// Must be Func, Map, or Slice; which are not comparable.
		panic(fmt.Sprintf("%T is not comparable", x.Type()))
	}
}
 07070100000683000081A4000000000000000000000001645E367C00004984000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/cmp/options.go    // Copyright 2017, The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package cmp

import (
	"fmt"
	"reflect"
	"regexp"
	"strings"

	"github.com/google/go-cmp/cmp/internal/function"
)

// Option configures for specific behavior of Equal and Diff. In particular,
// the fundamental Option functions (Ignore, Transformer, and Comparer),
// configure how equality is determined.
//
// The fundamental options may be composed with filters (FilterPath and
// FilterValues) to control the scope over which they are applied.
//
// The cmp/cmpopts package provides helper functions for creating options that
// may be used with Equal and Diff.
type Option interface {
	// filter applies all filters and returns the option that remains.
	// Each option may only read s.curPath and call s.callTTBFunc.
	//
	// An Options is returned only if multiple comparers or transformers
	// can apply simultaneously and will only contain values of those types
	// or sub-Options containing values of those types.
	filter(s *state, t reflect.Type, vx, vy reflect.Value) applicableOption
}

// applicableOption represents the following types:
//
//	Fundamental: ignore | validator | *comparer | *transformer
//	Grouping:    Options
type applicableOption interface {
	Option

	// apply executes the option, which may mutate s or panic.
	apply(s *state, vx, vy reflect.Value)
}

// coreOption represents the following types:
//
//	Fundamental: ignore | validator | *comparer | *transformer
//	Filters:     *pathFilter | *valuesFilter
type coreOption interface {
	Option
	isCore()
}

type core struct{}

func (core) isCore() {}

// Options is a list of Option values that also satisfies the Option interface.
// Helper comparison packages may return an Options value when packing multiple
// Option values into a single Option. When this package processes an Options,
// it will be implicitly expanded into a flat list.
//
// Applying a filter on an Options is equivalent to applying that same filter
// on all individual options held within.
type Options []Option

func (opts Options) filter(s *state, t reflect.Type, vx, vy reflect.Value) (out applicableOption) {
	for _, opt := range opts {
		switch opt := opt.filter(s, t, vx, vy); opt.(type) {
		case ignore:
			return ignore{} // Only ignore can short-circuit evaluation
		case validator:
			out = validator{} // Takes precedence over comparer or transformer
		case *comparer, *transformer, Options:
			switch out.(type) {
			case nil:
				out = opt
			case validator:
				// Keep validator
			case *comparer, *transformer, Options:
				out = Options{out, opt} // Conflicting comparers or transformers
			}
		}
	}
	return out
}

func (opts Options) apply(s *state, _, _ reflect.Value) {
	const warning = "ambiguous set of applicable options"
	const help = "consider using filters to ensure at most one Comparer or Transformer may apply"
	var ss []string
	for _, opt := range flattenOptions(nil, opts) {
		ss = append(ss, fmt.Sprint(opt))
	}
	set := strings.Join(ss, "\n\t")
	panic(fmt.Sprintf("%s at %#v:\n\t%s\n%s", warning, s.curPath, set, help))
}

func (opts Options) String() string {
	var ss []string
	for _, opt := range opts {
		ss = append(ss, fmt.Sprint(opt))
	}
	return fmt.Sprintf("Options{%s}", strings.Join(ss, ", "))
}

// FilterPath returns a new Option where opt is only evaluated if filter f
// returns true for the current Path in the value tree.
//
// This filter is called even if a slice element or map entry is missing and
// provides an opportunity to ignore such cases. The filter function must be
// symmetric such that the filter result is identical regardless of whether the
// missing value is from x or y.
//
// The option passed in may be an Ignore, Transformer, Comparer, Options, or
// a previously filtered Option.
func FilterPath(f func(Path) bool, opt Option) Option {
	if f == nil {
		panic("invalid path filter function")
	}
	if opt := normalizeOption(opt); opt != nil {
		return &pathFilter{fnc: f, opt: opt}
	}
	return nil
}

type pathFilter struct {
	core
	fnc func(Path) bool
	opt Option
}

func (f pathFilter) filter(s *state, t reflect.Type, vx, vy reflect.Value) applicableOption {
	if f.fnc(s.curPath) {
		return f.opt.filter(s, t, vx, vy)
	}
	return nil
}

func (f pathFilter) String() string {
	return fmt.Sprintf("FilterPath(%s, %v)", function.NameOf(reflect.ValueOf(f.fnc)), f.opt)
}

// FilterValues returns a new Option where opt is only evaluated if filter f,
// which is a function of the form "func(T, T) bool", returns true for the
// current pair of values being compared. If either value is invalid or
// the type of the values is not assignable to T, then this filter implicitly
// returns false.
//
// The filter function must be
// symmetric (i.e., agnostic to the order of the inputs) and
// deterministic (i.e., produces the same result when given the same inputs).
// If T is an interface, it is possible that f is called with two values with
// different concrete types that both implement T.
//
// The option passed in may be an Ignore, Transformer, Comparer, Options, or
// a previously filtered Option.
func FilterValues(f interface{}, opt Option) Option {
	v := reflect.ValueOf(f)
	if !function.IsType(v.Type(), function.ValueFilter) || v.IsNil() {
		panic(fmt.Sprintf("invalid values filter function: %T", f))
	}
	if opt := normalizeOption(opt); opt != nil {
		vf := &valuesFilter{fnc: v, opt: opt}
		if ti := v.Type().In(0); ti.Kind() != reflect.Interface || ti.NumMethod() > 0 {
			vf.typ = ti
		}
		return vf
	}
	return nil
}

type valuesFilter struct {
	core
	typ reflect.Type  // T
	fnc reflect.Value // func(T, T) bool
	opt Option
}

func (f valuesFilter) filter(s *state, t reflect.Type, vx, vy reflect.Value) applicableOption {
	if !vx.IsValid() || !vx.CanInterface() || !vy.IsValid() || !vy.CanInterface() {
		return nil
	}
	if (f.typ == nil || t.AssignableTo(f.typ)) && s.callTTBFunc(f.fnc, vx, vy) {
		return f.opt.filter(s, t, vx, vy)
	}
	return nil
}

func (f valuesFilter) String() string {
	return fmt.Sprintf("FilterValues(%s, %v)", function.NameOf(f.fnc), f.opt)
}

// Ignore is an Option that causes all comparisons to be ignored.
// This value is intended to be combined with FilterPath or FilterValues.
// It is an error to pass an unfiltered Ignore option to Equal.
func Ignore() Option { return ignore{} }

type ignore struct{ core }

func (ignore) isFiltered() bool                                                     { return false }
func (ignore) filter(_ *state, _ reflect.Type, _, _ reflect.Value) applicableOption { return ignore{} }
func (ignore) apply(s *state, _, _ reflect.Value)                                   { s.report(true, reportByIgnore) }
func (ignore) String() string                                                       { return "Ignore()" }

// validator is a sentinel Option type to indicate that some options could not
// be evaluated due to unexported fields, missing slice elements, or
// missing map entries. Both values are validator only for unexported fields.
type validator struct{ core }

func (validator) filter(_ *state, _ reflect.Type, vx, vy reflect.Value) applicableOption {
	if !vx.IsValid() || !vy.IsValid() {
		return validator{}
	}
	if !vx.CanInterface() || !vy.CanInterface() {
		return validator{}
	}
	return nil
}
func (validator) apply(s *state, vx, vy reflect.Value) {
	// Implies missing slice element or map entry.
	if !vx.IsValid() || !vy.IsValid() {
		s.report(vx.IsValid() == vy.IsValid(), 0)
		return
	}

	// Unable to Interface implies unexported field without visibility access.
	if !vx.CanInterface() || !vy.CanInterface() {
		help := "consider using a custom Comparer; if you control the implementation of type, you can also consider using an Exporter, AllowUnexported, or cmpopts.IgnoreUnexported"
		var name string
		if t := s.curPath.Index(-2).Type(); t.Name() != "" {
			// Named type with unexported fields.
			name = fmt.Sprintf("%q.%v", t.PkgPath(), t.Name()) // e.g., "path/to/package".MyType
			if _, ok := reflect.New(t).Interface().(error); ok {
				help = "consider using cmpopts.EquateErrors to compare error values"
			}
		} else {
			// Unnamed type with unexported fields. Derive PkgPath from field.
			var pkgPath string
			for i := 0; i < t.NumField() && pkgPath == ""; i++ {
				pkgPath = t.Field(i).PkgPath
			}
			name = fmt.Sprintf("%q.(%v)", pkgPath, t.String()) // e.g., "path/to/package".(struct { a int })
		}
		panic(fmt.Sprintf("cannot handle unexported field at %#v:\n\t%v\n%s", s.curPath, name, help))
	}

	panic("not reachable")
}

// identRx represents a valid identifier according to the Go specification.
const identRx = `[_\p{L}][_\p{L}\p{N}]*`

var identsRx = regexp.MustCompile(`^` + identRx + `(\.` + identRx + `)*$`)

// Transformer returns an Option that applies a transformation function that
// converts values of a certain type into that of another.
//
// The transformer f must be a function "func(T) R" that converts values of
// type T to those of type R and is implicitly filtered to input values
// assignable to T. The transformer must not mutate T in any way.
//
// To help prevent some cases of infinite recursive cycles applying the
// same transform to the output of itself (e.g., in the case where the
// input and output types are the same), an implicit filter is added such that
// a transformer is applicable only if that exact transformer is not already
// in the tail of the Path since the last non-Transform step.
// For situations where the implicit filter is still insufficient,
// consider using cmpopts.AcyclicTransformer, which adds a filter
// to prevent the transformer from being recursively applied upon itself.
//
// The name is a user provided label that is used as the Transform.Name in the
// transformation PathStep (and eventually shown in the Diff output).
// The name must be a valid identifier or qualified identifier in Go syntax.
// If empty, an arbitrary name is used.
func Transformer(name string, f interface{}) Option {
	v := reflect.ValueOf(f)
	if !function.IsType(v.Type(), function.Transformer) || v.IsNil() {
		panic(fmt.Sprintf("invalid transformer function: %T", f))
	}
	if name == "" {
		name = function.NameOf(v)
		if !identsRx.MatchString(name) {
			name = "λ" // Lambda-symbol as placeholder name
		}
	} else if !identsRx.MatchString(name) {
		panic(fmt.Sprintf("invalid name: %q", name))
	}
	tr := &transformer{name: name, fnc: reflect.ValueOf(f)}
	if ti := v.Type().In(0); ti.Kind() != reflect.Interface || ti.NumMethod() > 0 {
		tr.typ = ti
	}
	return tr
}

type transformer struct {
	core
	name string
	typ  reflect.Type  // T
	fnc  reflect.Value // func(T) R
}

func (tr *transformer) isFiltered() bool { return tr.typ != nil }

func (tr *transformer) filter(s *state, t reflect.Type, _, _ reflect.Value) applicableOption {
	for i := len(s.curPath) - 1; i >= 0; i-- {
		if t, ok := s.curPath[i].(Transform); !ok {
			break // Hit most recent non-Transform step
		} else if tr == t.trans {
			return nil // Cannot directly use same Transform
		}
	}
	if tr.typ == nil || t.AssignableTo(tr.typ) {
		return tr
	}
	return nil
}

func (tr *transformer) apply(s *state, vx, vy reflect.Value) {
	step := Transform{&transform{pathStep{typ: tr.fnc.Type().Out(0)}, tr}}
	vvx := s.callTRFunc(tr.fnc, vx, step)
	vvy := s.callTRFunc(tr.fnc, vy, step)
	step.vx, step.vy = vvx, vvy
	s.compareAny(step)
}

func (tr transformer) String() string {
	return fmt.Sprintf("Transformer(%s, %s)", tr.name, function.NameOf(tr.fnc))
}

// Comparer returns an Option that determines whether two values are equal
// to each other.
//
// The comparer f must be a function "func(T, T) bool" and is implicitly
// filtered to input values assignable to T. If T is an interface, it is
// possible that f is called with two values of different concrete types that
// both implement T.
//
// The equality function must be:
//   - Symmetric: equal(x, y) == equal(y, x)
//   - Deterministic: equal(x, y) == equal(x, y)
//   - Pure: equal(x, y) does not modify x or y
func Comparer(f interface{}) Option {
	v := reflect.ValueOf(f)
	if !function.IsType(v.Type(), function.Equal) || v.IsNil() {
		panic(fmt.Sprintf("invalid comparer function: %T", f))
	}
	cm := &comparer{fnc: v}
	if ti := v.Type().In(0); ti.Kind() != reflect.Interface || ti.NumMethod() > 0 {
		cm.typ = ti
	}
	return cm
}

type comparer struct {
	core
	typ reflect.Type  // T
	fnc reflect.Value // func(T, T) bool
}

func (cm *comparer) isFiltered() bool { return cm.typ != nil }

func (cm *comparer) filter(_ *state, t reflect.Type, _, _ reflect.Value) applicableOption {
	if cm.typ == nil || t.AssignableTo(cm.typ) {
		return cm
	}
	return nil
}

func (cm *comparer) apply(s *state, vx, vy reflect.Value) {
	eq := s.callTTBFunc(cm.fnc, vx, vy)
	s.report(eq, reportByFunc)
}

func (cm comparer) String() string {
	return fmt.Sprintf("Comparer(%s)", function.NameOf(cm.fnc))
}

// Exporter returns an Option that specifies whether Equal is allowed to
// introspect into the unexported fields of certain struct types.
//
// Users of this option must understand that comparing on unexported fields
// from external packages is not safe since changes in the internal
// implementation of some external package may cause the result of Equal
// to unexpectedly change. However, it may be valid to use this option on types
// defined in an internal package where the semantic meaning of an unexported
// field is in the control of the user.
//
// In many cases, a custom Comparer should be used instead that defines
// equality as a function of the public API of a type rather than the underlying
// unexported implementation.
//
// For example, the reflect.Type documentation defines equality to be determined
// by the == operator on the interface (essentially performing a shallow pointer
// comparison) and most attempts to compare *regexp.Regexp types are interested
// in only checking that the regular expression strings are equal.
// Both of these are accomplished using Comparers:
//
//	Comparer(func(x, y reflect.Type) bool { return x == y })
//	Comparer(func(x, y *regexp.Regexp) bool { return x.String() == y.String() })
//
// In other cases, the cmpopts.IgnoreUnexported option can be used to ignore
// all unexported fields on specified struct types.
func Exporter(f func(reflect.Type) bool) Option {
	if !supportExporters {
		panic("Exporter is not supported on purego builds")
	}
	return exporter(f)
}

type exporter func(reflect.Type) bool

func (exporter) filter(_ *state, _ reflect.Type, _, _ reflect.Value) applicableOption {
	panic("not implemented")
}

// AllowUnexported returns an Options that allows Equal to forcibly introspect
// unexported fields of the specified struct types.
//
// See Exporter for the proper use of this option.
func AllowUnexported(types ...interface{}) Option {
	m := make(map[reflect.Type]bool)
	for _, typ := range types {
		t := reflect.TypeOf(typ)
		if t.Kind() != reflect.Struct {
			panic(fmt.Sprintf("invalid struct type: %T", typ))
		}
		m[t] = true
	}
	return exporter(func(t reflect.Type) bool { return m[t] })
}

// Result represents the comparison result for a single node and
// is provided by cmp when calling Report (see Reporter).
type Result struct {
	_     [0]func() // Make Result incomparable
	flags resultFlags
}

// Equal reports whether the node was determined to be equal or not.
// As a special case, ignored nodes are considered equal.
func (r Result) Equal() bool {
	return r.flags&(reportEqual|reportByIgnore) != 0
}

// ByIgnore reports whether the node is equal because it was ignored.
// This never reports true if Equal reports false.
func (r Result) ByIgnore() bool {
	return r.flags&reportByIgnore != 0
}

// ByMethod reports whether the Equal method determined equality.
func (r Result) ByMethod() bool {
	return r.flags&reportByMethod != 0
}

// ByFunc reports whether a Comparer function determined equality.
func (r Result) ByFunc() bool {
	return r.flags&reportByFunc != 0
}

// ByCycle reports whether a reference cycle was detected.
func (r Result) ByCycle() bool {
	return r.flags&reportByCycle != 0
}

type resultFlags uint

const (
	_ resultFlags = (1 << iota) / 2

	reportEqual
	reportUnequal
	reportByIgnore
	reportByMethod
	reportByFunc
	reportByCycle
)

// Reporter is an Option that can be passed to Equal. When Equal traverses
// the value trees, it calls PushStep as it descends into each node in the
// tree and PopStep as it ascend out of the node. The leaves of the tree are
// either compared (determined to be equal or not equal) or ignored and reported
// as such by calling the Report method.
func Reporter(r interface {
	// PushStep is called when a tree-traversal operation is performed.
	// The PathStep itself is only valid until the step is popped.
	// The PathStep.Values are valid for the duration of the entire traversal
	// and must not be mutated.
	//
	// Equal always calls PushStep at the start to provide an operation-less
	// PathStep used to report the root values.
	//
	// Within a slice, the exact set of inserted, removed, or modified elements
	// is unspecified and may change in future implementations.
	// The entries of a map are iterated through in an unspecified order.
	PushStep(PathStep)

	// Report is called exactly once on leaf nodes to report whether the
	// comparison identified the node as equal, unequal, or ignored.
	// A leaf node is one that is immediately preceded by and followed by
	// a pair of PushStep and PopStep calls.
	Report(Result)

	// PopStep ascends back up the value tree.
	// There is always a matching pop call for every push call.
	PopStep()
}) Option {
	return reporter{r}
}

type reporter struct{ reporterIface }
type reporterIface interface {
	PushStep(PathStep)
	Report(Result)
	PopStep()
}

func (reporter) filter(_ *state, _ reflect.Type, _, _ reflect.Value) applicableOption {
	panic("not implemented")
}

// normalizeOption normalizes the input options such that all Options groups
// are flattened and groups with a single element are reduced to that element.
// Only coreOptions and Options containing coreOptions are allowed.
func normalizeOption(src Option) Option {
	switch opts := flattenOptions(nil, Options{src}); len(opts) {
	case 0:
		return nil
	case 1:
		return opts[0]
	default:
		return opts
	}
}

// flattenOptions copies all options in src to dst as a flat list.
// Only coreOptions and Options containing coreOptions are allowed.
func flattenOptions(dst, src Options) Options {
	for _, opt := range src {
		switch opt := opt.(type) {
		case nil:
			continue
		case Options:
			dst = flattenOptions(dst, opt)
		case coreOption:
			dst = append(dst, opt)
		default:
			panic(fmt.Sprintf("invalid option type: %T", opt))
		}
	}
	return dst
}
07070100000684000081A4000000000000000000000001645E367C00003272000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/cmp/path.go   // Copyright 2017, The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package cmp

import (
	"fmt"
	"reflect"
	"strings"
	"unicode"
	"unicode/utf8"

	"github.com/google/go-cmp/cmp/internal/value"
)

// Path is a list of PathSteps describing the sequence of operations to get
// from some root type to the current position in the value tree.
// The first Path element is always an operation-less PathStep that exists
// simply to identify the initial type.
//
// When traversing structs with embedded structs, the embedded struct will
// always be accessed as a field before traversing the fields of the
// embedded struct themselves. That is, an exported field from the
// embedded struct will never be accessed directly from the parent struct.
type Path []PathStep

// PathStep is a union-type for specific operations to traverse
// a value's tree structure. Users of this package never need to implement
// these types as values of this type will be returned by this package.
//
// Implementations of this interface are
// StructField, SliceIndex, MapIndex, Indirect, TypeAssertion, and Transform.
type PathStep interface {
	String() string

	// Type is the resulting type after performing the path step.
	Type() reflect.Type

	// Values is the resulting values after performing the path step.
	// The type of each valid value is guaranteed to be identical to Type.
	//
	// In some cases, one or both may be invalid or have restrictions:
	//   - For StructField, both are not interface-able if the current field
	//     is unexported and the struct type is not explicitly permitted by
	//     an Exporter to traverse unexported fields.
	//   - For SliceIndex, one may be invalid if an element is missing from
	//     either the x or y slice.
	//   - For MapIndex, one may be invalid if an entry is missing from
	//     either the x or y map.
	//
	// The provided values must not be mutated.
	Values() (vx, vy reflect.Value)
}

var (
	_ PathStep = StructField{}
	_ PathStep = SliceIndex{}
	_ PathStep = MapIndex{}
	_ PathStep = Indirect{}
	_ PathStep = TypeAssertion{}
	_ PathStep = Transform{}
)

func (pa *Path) push(s PathStep) {
	*pa = append(*pa, s)
}

func (pa *Path) pop() {
	*pa = (*pa)[:len(*pa)-1]
}

// Last returns the last PathStep in the Path.
// If the path is empty, this returns a non-nil PathStep that reports a nil Type.
func (pa Path) Last() PathStep {
	return pa.Index(-1)
}

// Index returns the ith step in the Path and supports negative indexing.
// A negative index starts counting from the tail of the Path such that -1
// refers to the last step, -2 refers to the second-to-last step, and so on.
// If index is invalid, this returns a non-nil PathStep that reports a nil Type.
func (pa Path) Index(i int) PathStep {
	if i < 0 {
		i = len(pa) + i
	}
	if i < 0 || i >= len(pa) {
		return pathStep{}
	}
	return pa[i]
}

// String returns the simplified path to a node.
// The simplified path only contains struct field accesses.
//
// For example:
//
//	MyMap.MySlices.MyField
func (pa Path) String() string {
	var ss []string
	for _, s := range pa {
		if _, ok := s.(StructField); ok {
			ss = append(ss, s.String())
		}
	}
	return strings.TrimPrefix(strings.Join(ss, ""), ".")
}

// GoString returns the path to a specific node using Go syntax.
//
// For example:
//
//	(*root.MyMap["key"].(*mypkg.MyStruct).MySlices)[2][3].MyField
func (pa Path) GoString() string {
	var ssPre, ssPost []string
	var numIndirect int
	for i, s := range pa {
		var nextStep PathStep
		if i+1 < len(pa) {
			nextStep = pa[i+1]
		}
		switch s := s.(type) {
		case Indirect:
			numIndirect++
			pPre, pPost := "(", ")"
			switch nextStep.(type) {
			case Indirect:
				continue // Next step is indirection, so let them batch up
			case StructField:
				numIndirect-- // Automatic indirection on struct fields
			case nil:
				pPre, pPost = "", "" // Last step; no need for parenthesis
			}
			if numIndirect > 0 {
				ssPre = append(ssPre, pPre+strings.Repeat("*", numIndirect))
				ssPost = append(ssPost, pPost)
			}
			numIndirect = 0
			continue
		case Transform:
			ssPre = append(ssPre, s.trans.name+"(")
			ssPost = append(ssPost, ")")
			continue
		}
		ssPost = append(ssPost, s.String())
	}
	for i, j := 0, len(ssPre)-1; i < j; i, j = i+1, j-1 {
		ssPre[i], ssPre[j] = ssPre[j], ssPre[i]
	}
	return strings.Join(ssPre, "") + strings.Join(ssPost, "")
}

type pathStep struct {
	typ    reflect.Type
	vx, vy reflect.Value
}

func (ps pathStep) Type() reflect.Type             { return ps.typ }
func (ps pathStep) Values() (vx, vy reflect.Value) { return ps.vx, ps.vy }
func (ps pathStep) String() string {
	if ps.typ == nil {
		return "<nil>"
	}
	s := value.TypeString(ps.typ, false)
	if s == "" || strings.ContainsAny(s, "{}\n") {
		return "root" // Type too simple or complex to print
	}
	return fmt.Sprintf("{%s}", s)
}

// StructField represents a struct field access on a field called Name.
type StructField struct{ *structField }
type structField struct {
	pathStep
	name string
	idx  int

	// These fields are used for forcibly accessing an unexported field.
	// pvx, pvy, and field are only valid if unexported is true.
	unexported bool
	mayForce   bool                // Forcibly allow visibility
	paddr      bool                // Was parent addressable?
	pvx, pvy   reflect.Value       // Parent values (always addressable)
	field      reflect.StructField // Field information
}

func (sf StructField) Type() reflect.Type { return sf.typ }
func (sf StructField) Values() (vx, vy reflect.Value) {
	if !sf.unexported {
		return sf.vx, sf.vy // CanInterface reports true
	}

	// Forcibly obtain read-write access to an unexported struct field.
	if sf.mayForce {
		vx = retrieveUnexportedField(sf.pvx, sf.field, sf.paddr)
		vy = retrieveUnexportedField(sf.pvy, sf.field, sf.paddr)
		return vx, vy // CanInterface reports true
	}
	return sf.vx, sf.vy // CanInterface reports false
}
func (sf StructField) String() string { return fmt.Sprintf(".%s", sf.name) }

// Name is the field name.
func (sf StructField) Name() string { return sf.name }

// Index is the index of the field in the parent struct type.
// See reflect.Type.Field.
func (sf StructField) Index() int { return sf.idx }

// SliceIndex is an index operation on a slice or array at some index Key.
type SliceIndex struct{ *sliceIndex }
type sliceIndex struct {
	pathStep
	xkey, ykey int
	isSlice    bool // False for reflect.Array
}

func (si SliceIndex) Type() reflect.Type             { return si.typ }
func (si SliceIndex) Values() (vx, vy reflect.Value) { return si.vx, si.vy }
func (si SliceIndex) String() string {
	switch {
	case si.xkey == si.ykey:
		return fmt.Sprintf("[%d]", si.xkey)
	case si.ykey == -1:
		// [5->?] means "I don't know where X[5] went"
		return fmt.Sprintf("[%d->?]", si.xkey)
	case si.xkey == -1:
		// [?->3] means "I don't know where Y[3] came from"
		return fmt.Sprintf("[?->%d]", si.ykey)
	default:
		// [5->3] means "X[5] moved to Y[3]"
		return fmt.Sprintf("[%d->%d]", si.xkey, si.ykey)
	}
}

// Key is the index key; it may return -1 if in a split state
func (si SliceIndex) Key() int {
	if si.xkey != si.ykey {
		return -1
	}
	return si.xkey
}

// SplitKeys are the indexes for indexing into slices in the
// x and y values, respectively. These indexes may differ due to the
// insertion or removal of an element in one of the slices, causing
// all of the indexes to be shifted. If an index is -1, then that
// indicates that the element does not exist in the associated slice.
//
// Key is guaranteed to return -1 if and only if the indexes returned
// by SplitKeys are not the same. SplitKeys will never return -1 for
// both indexes.
func (si SliceIndex) SplitKeys() (ix, iy int) { return si.xkey, si.ykey }

// MapIndex is an index operation on a map at some index Key.
type MapIndex struct{ *mapIndex }
type mapIndex struct {
	pathStep
	key reflect.Value
}

func (mi MapIndex) Type() reflect.Type             { return mi.typ }
func (mi MapIndex) Values() (vx, vy reflect.Value) { return mi.vx, mi.vy }
func (mi MapIndex) String() string                 { return fmt.Sprintf("[%#v]", mi.key) }

// Key is the value of the map key.
func (mi MapIndex) Key() reflect.Value { return mi.key }

// Indirect represents pointer indirection on the parent type.
type Indirect struct{ *indirect }
type indirect struct {
	pathStep
}

func (in Indirect) Type() reflect.Type             { return in.typ }
func (in Indirect) Values() (vx, vy reflect.Value) { return in.vx, in.vy }
func (in Indirect) String() string                 { return "*" }

// TypeAssertion represents a type assertion on an interface.
type TypeAssertion struct{ *typeAssertion }
type typeAssertion struct {
	pathStep
}

func (ta TypeAssertion) Type() reflect.Type             { return ta.typ }
func (ta TypeAssertion) Values() (vx, vy reflect.Value) { return ta.vx, ta.vy }
func (ta TypeAssertion) String() string                 { return fmt.Sprintf(".(%v)", value.TypeString(ta.typ, false)) }

// Transform is a transformation from the parent type to the current type.
type Transform struct{ *transform }
type transform struct {
	pathStep
	trans *transformer
}

func (tf Transform) Type() reflect.Type             { return tf.typ }
func (tf Transform) Values() (vx, vy reflect.Value) { return tf.vx, tf.vy }
func (tf Transform) String() string                 { return fmt.Sprintf("%s()", tf.trans.name) }

// Name is the name of the Transformer.
func (tf Transform) Name() string { return tf.trans.name }

// Func is the function pointer to the transformer function.
func (tf Transform) Func() reflect.Value { return tf.trans.fnc }

// Option returns the originally constructed Transformer option.
// The == operator can be used to detect the exact option used.
func (tf Transform) Option() Option { return tf.trans }

// pointerPath represents a dual-stack of pointers encountered when
// recursively traversing the x and y values. This data structure supports
// detection of cycles and determining whether the cycles are equal.
// In Go, cycles can occur via pointers, slices, and maps.
//
// The pointerPath uses a map to represent a stack; where descension into a
// pointer pushes the address onto the stack, and ascension from a pointer
// pops the address from the stack. Thus, when traversing into a pointer from
// reflect.Ptr, reflect.Slice element, or reflect.Map, we can detect cycles
// by checking whether the pointer has already been visited. The cycle detection
// uses a separate stack for the x and y values.
//
// If a cycle is detected we need to determine whether the two pointers
// should be considered equal. The definition of equality chosen by Equal
// requires two graphs to have the same structure. To determine this, both the
// x and y values must have a cycle where the previous pointers were also
// encountered together as a pair.
//
// Semantically, this is equivalent to augmenting Indirect, SliceIndex, and
// MapIndex with pointer information for the x and y values.
// Suppose px and py are two pointers to compare, we then search the
// Path for whether px was ever encountered in the Path history of x, and
// similarly so with py. If either side has a cycle, the comparison is only
// equal if both px and py have a cycle resulting from the same PathStep.
//
// Using a map as a stack is more performant as we can perform cycle detection
// in O(1) instead of O(N) where N is len(Path).
type pointerPath struct {
	// mx is keyed by x pointers, where the value is the associated y pointer.
	mx map[value.Pointer]value.Pointer
	// my is keyed by y pointers, where the value is the associated x pointer.
	my map[value.Pointer]value.Pointer
}

func (p *pointerPath) Init() {
	p.mx = make(map[value.Pointer]value.Pointer)
	p.my = make(map[value.Pointer]value.Pointer)
}

// Push indicates intent to descend into pointers vx and vy where
// visited reports whether either has been seen before. If visited before,
// equal reports whether both pointers were encountered together.
// Pop must be called if and only if the pointers were never visited.
//
// The pointers vx and vy must be a reflect.Ptr, reflect.Slice, or reflect.Map
// and be non-nil.
func (p pointerPath) Push(vx, vy reflect.Value) (equal, visited bool) {
	px := value.PointerOf(vx)
	py := value.PointerOf(vy)
	_, ok1 := p.mx[px]
	_, ok2 := p.my[py]
	if ok1 || ok2 {
		equal = p.mx[px] == py && p.my[py] == px // Pointers paired together
		return equal, true
	}
	p.mx[px] = py
	p.my[py] = px
	return false, false
}

// Pop ascends from pointers vx and vy.
func (p pointerPath) Pop(vx, vy reflect.Value) {
	delete(p.mx, value.PointerOf(vx))
	delete(p.my, value.PointerOf(vy))
}

// isExported reports whether the identifier is exported.
func isExported(id string) bool {
	r, _ := utf8.DecodeRuneInString(id)
	return unicode.IsUpper(r)
}
  07070100000685000081A4000000000000000000000001645E367C00000607000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/cmp/report.go // Copyright 2017, The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package cmp

// defaultReporter implements the reporter interface.
//
// As Equal serially calls the PushStep, Report, and PopStep methods, the
// defaultReporter constructs a tree-based representation of the compared value
// and the result of each comparison (see valueNode).
//
// When the String method is called, the FormatDiff method transforms the
// valueNode tree into a textNode tree, which is a tree-based representation
// of the textual output (see textNode).
//
// Lastly, the textNode.String method produces the final report as a string.
type defaultReporter struct {
	root *valueNode
	curr *valueNode
}

func (r *defaultReporter) PushStep(ps PathStep) {
	r.curr = r.curr.PushStep(ps)
	if r.root == nil {
		r.root = r.curr
	}
}
func (r *defaultReporter) Report(rs Result) {
	r.curr.Report(rs)
}
func (r *defaultReporter) PopStep() {
	r.curr = r.curr.PopStep()
}

// String provides a full report of the differences detected as a structured
// literal in pseudo-Go syntax. String may only be called after the entire tree
// has been traversed.
func (r *defaultReporter) String() string {
	assert(r.root != nil && r.curr == nil)
	if r.root.NumDiff == 0 {
		return ""
	}
	ptrs := new(pointerReferences)
	text := formatOptions{}.FormatDiff(r.root, ptrs)
	resolveReferences(text)
	return text.String()
}

func assert(ok bool) {
	if !ok {
		panic("assertion failure")
	}
}
 07070100000686000081A4000000000000000000000001645E367C000033B4000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/cmp/report_compare.go // Copyright 2019, The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package cmp

import (
	"fmt"
	"reflect"
)

// numContextRecords is the number of surrounding equal records to print.
const numContextRecords = 2

type diffMode byte

const (
	diffUnknown   diffMode = 0
	diffIdentical diffMode = ' '
	diffRemoved   diffMode = '-'
	diffInserted  diffMode = '+'
)

type typeMode int

const (
	// emitType always prints the type.
	emitType typeMode = iota
	// elideType never prints the type.
	elideType
	// autoType prints the type only for composite kinds
	// (i.e., structs, slices, arrays, and maps).
	autoType
)

type formatOptions struct {
	// DiffMode controls the output mode of FormatDiff.
	//
	// If diffUnknown,   then produce a diff of the x and y values.
	// If diffIdentical, then emit values as if they were equal.
	// If diffRemoved,   then only emit x values (ignoring y values).
	// If diffInserted,  then only emit y values (ignoring x values).
	DiffMode diffMode

	// TypeMode controls whether to print the type for the current node.
	//
	// As a general rule of thumb, we always print the type of the next node
	// after an interface, and always elide the type of the next node after
	// a slice or map node.
	TypeMode typeMode

	// formatValueOptions are options specific to printing reflect.Values.
	formatValueOptions
}

func (opts formatOptions) WithDiffMode(d diffMode) formatOptions {
	opts.DiffMode = d
	return opts
}
func (opts formatOptions) WithTypeMode(t typeMode) formatOptions {
	opts.TypeMode = t
	return opts
}
func (opts formatOptions) WithVerbosity(level int) formatOptions {
	opts.VerbosityLevel = level
	opts.LimitVerbosity = true
	return opts
}
func (opts formatOptions) verbosity() uint {
	switch {
	case opts.VerbosityLevel < 0:
		return 0
	case opts.VerbosityLevel > 16:
		return 16 // some reasonable maximum to avoid shift overflow
	default:
		return uint(opts.VerbosityLevel)
	}
}

const maxVerbosityPreset = 6

// verbosityPreset modifies the verbosity settings given an index
// between 0 and maxVerbosityPreset, inclusive.
func verbosityPreset(opts formatOptions, i int) formatOptions {
	opts.VerbosityLevel = int(opts.verbosity()) + 2*i
	if i > 0 {
		opts.AvoidStringer = true
	}
	if i >= maxVerbosityPreset {
		opts.PrintAddresses = true
		opts.QualifiedNames = true
	}
	return opts
}

// FormatDiff converts a valueNode tree into a textNode tree, where the later
// is a textual representation of the differences detected in the former.
func (opts formatOptions) FormatDiff(v *valueNode, ptrs *pointerReferences) (out textNode) {
	if opts.DiffMode == diffIdentical {
		opts = opts.WithVerbosity(1)
	} else if opts.verbosity() < 3 {
		opts = opts.WithVerbosity(3)
	}

	// Check whether we have specialized formatting for this node.
	// This is not necessary, but helpful for producing more readable outputs.
	if opts.CanFormatDiffSlice(v) {
		return opts.FormatDiffSlice(v)
	}

	var parentKind reflect.Kind
	if v.parent != nil && v.parent.TransformerName == "" {
		parentKind = v.parent.Type.Kind()
	}

	// For leaf nodes, format the value based on the reflect.Values alone.
	// As a special case, treat equal []byte as a leaf nodes.
	isBytes := v.Type.Kind() == reflect.Slice && v.Type.Elem() == byteType
	isEqualBytes := isBytes && v.NumDiff+v.NumIgnored+v.NumTransformed == 0
	if v.MaxDepth == 0 || isEqualBytes {
		switch opts.DiffMode {
		case diffUnknown, diffIdentical:
			// Format Equal.
			if v.NumDiff == 0 {
				outx := opts.FormatValue(v.ValueX, parentKind, ptrs)
				outy := opts.FormatValue(v.ValueY, parentKind, ptrs)
				if v.NumIgnored > 0 && v.NumSame == 0 {
					return textEllipsis
				} else if outx.Len() < outy.Len() {
					return outx
				} else {
					return outy
				}
			}

			// Format unequal.
			assert(opts.DiffMode == diffUnknown)
			var list textList
			outx := opts.WithTypeMode(elideType).FormatValue(v.ValueX, parentKind, ptrs)
			outy := opts.WithTypeMode(elideType).FormatValue(v.ValueY, parentKind, ptrs)
			for i := 0; i <= maxVerbosityPreset && outx != nil && outy != nil && outx.Equal(outy); i++ {
				opts2 := verbosityPreset(opts, i).WithTypeMode(elideType)
				outx = opts2.FormatValue(v.ValueX, parentKind, ptrs)
				outy = opts2.FormatValue(v.ValueY, parentKind, ptrs)
			}
			if outx != nil {
				list = append(list, textRecord{Diff: '-', Value: outx})
			}
			if outy != nil {
				list = append(list, textRecord{Diff: '+', Value: outy})
			}
			return opts.WithTypeMode(emitType).FormatType(v.Type, list)
		case diffRemoved:
			return opts.FormatValue(v.ValueX, parentKind, ptrs)
		case diffInserted:
			return opts.FormatValue(v.ValueY, parentKind, ptrs)
		default:
			panic("invalid diff mode")
		}
	}

	// Register slice element to support cycle detection.
	if parentKind == reflect.Slice {
		ptrRefs := ptrs.PushPair(v.ValueX, v.ValueY, opts.DiffMode, true)
		defer ptrs.Pop()
		defer func() { out = wrapTrunkReferences(ptrRefs, out) }()
	}

	// Descend into the child value node.
	if v.TransformerName != "" {
		out := opts.WithTypeMode(emitType).FormatDiff(v.Value, ptrs)
		out = &textWrap{Prefix: "Inverse(" + v.TransformerName + ", ", Value: out, Suffix: ")"}
		return opts.FormatType(v.Type, out)
	} else {
		switch k := v.Type.Kind(); k {
		case reflect.Struct, reflect.Array, reflect.Slice:
			out = opts.formatDiffList(v.Records, k, ptrs)
			out = opts.FormatType(v.Type, out)
		case reflect.Map:
			// Register map to support cycle detection.
			ptrRefs := ptrs.PushPair(v.ValueX, v.ValueY, opts.DiffMode, false)
			defer ptrs.Pop()

			out = opts.formatDiffList(v.Records, k, ptrs)
			out = wrapTrunkReferences(ptrRefs, out)
			out = opts.FormatType(v.Type, out)
		case reflect.Ptr:
			// Register pointer to support cycle detection.
			ptrRefs := ptrs.PushPair(v.ValueX, v.ValueY, opts.DiffMode, false)
			defer ptrs.Pop()

			out = opts.FormatDiff(v.Value, ptrs)
			out = wrapTrunkReferences(ptrRefs, out)
			out = &textWrap{Prefix: "&", Value: out}
		case reflect.Interface:
			out = opts.WithTypeMode(emitType).FormatDiff(v.Value, ptrs)
		default:
			panic(fmt.Sprintf("%v cannot have children", k))
		}
		return out
	}
}

func (opts formatOptions) formatDiffList(recs []reportRecord, k reflect.Kind, ptrs *pointerReferences) textNode {
	// Derive record name based on the data structure kind.
	var name string
	var formatKey func(reflect.Value) string
	switch k {
	case reflect.Struct:
		name = "field"
		opts = opts.WithTypeMode(autoType)
		formatKey = func(v reflect.Value) string { return v.String() }
	case reflect.Slice, reflect.Array:
		name = "element"
		opts = opts.WithTypeMode(elideType)
		formatKey = func(reflect.Value) string { return "" }
	case reflect.Map:
		name = "entry"
		opts = opts.WithTypeMode(elideType)
		formatKey = func(v reflect.Value) string { return formatMapKey(v, false, ptrs) }
	}

	maxLen := -1
	if opts.LimitVerbosity {
		if opts.DiffMode == diffIdentical {
			maxLen = ((1 << opts.verbosity()) >> 1) << 2 // 0, 4, 8, 16, 32, etc...
		} else {
			maxLen = (1 << opts.verbosity()) << 1 // 2, 4, 8, 16, 32, 64, etc...
		}
		opts.VerbosityLevel--
	}

	// Handle unification.
	switch opts.DiffMode {
	case diffIdentical, diffRemoved, diffInserted:
		var list textList
		var deferredEllipsis bool // Add final "..." to indicate records were dropped
		for _, r := range recs {
			if len(list) == maxLen {
				deferredEllipsis = true
				break
			}

			// Elide struct fields that are zero value.
			if k == reflect.Struct {
				var isZero bool
				switch opts.DiffMode {
				case diffIdentical:
					isZero = r.Value.ValueX.IsZero() || r.Value.ValueY.IsZero()
				case diffRemoved:
					isZero = r.Value.ValueX.IsZero()
				case diffInserted:
					isZero = r.Value.ValueY.IsZero()
				}
				if isZero {
					continue
				}
			}
			// Elide ignored nodes.
			if r.Value.NumIgnored > 0 && r.Value.NumSame+r.Value.NumDiff == 0 {
				deferredEllipsis = !(k == reflect.Slice || k == reflect.Array)
				if !deferredEllipsis {
					list.AppendEllipsis(diffStats{})
				}
				continue
			}
			if out := opts.FormatDiff(r.Value, ptrs); out != nil {
				list = append(list, textRecord{Key: formatKey(r.Key), Value: out})
			}
		}
		if deferredEllipsis {
			list.AppendEllipsis(diffStats{})
		}
		return &textWrap{Prefix: "{", Value: list, Suffix: "}"}
	case diffUnknown:
	default:
		panic("invalid diff mode")
	}

	// Handle differencing.
	var numDiffs int
	var list textList
	var keys []reflect.Value // invariant: len(list) == len(keys)
	groups := coalesceAdjacentRecords(name, recs)
	maxGroup := diffStats{Name: name}
	for i, ds := range groups {
		if maxLen >= 0 && numDiffs >= maxLen {
			maxGroup = maxGroup.Append(ds)
			continue
		}

		// Handle equal records.
		if ds.NumDiff() == 0 {
			// Compute the number of leading and trailing records to print.
			var numLo, numHi int
			numEqual := ds.NumIgnored + ds.NumIdentical
			for numLo < numContextRecords && numLo+numHi < numEqual && i != 0 {
				if r := recs[numLo].Value; r.NumIgnored > 0 && r.NumSame+r.NumDiff == 0 {
					break
				}
				numLo++
			}
			for numHi < numContextRecords && numLo+numHi < numEqual && i != len(groups)-1 {
				if r := recs[numEqual-numHi-1].Value; r.NumIgnored > 0 && r.NumSame+r.NumDiff == 0 {
					break
				}
				numHi++
			}
			if numEqual-(numLo+numHi) == 1 && ds.NumIgnored == 0 {
				numHi++ // Avoid pointless coalescing of a single equal record
			}

			// Format the equal values.
			for _, r := range recs[:numLo] {
				out := opts.WithDiffMode(diffIdentical).FormatDiff(r.Value, ptrs)
				list = append(list, textRecord{Key: formatKey(r.Key), Value: out})
				keys = append(keys, r.Key)
			}
			if numEqual > numLo+numHi {
				ds.NumIdentical -= numLo + numHi
				list.AppendEllipsis(ds)
				for len(keys) < len(list) {
					keys = append(keys, reflect.Value{})
				}
			}
			for _, r := range recs[numEqual-numHi : numEqual] {
				out := opts.WithDiffMode(diffIdentical).FormatDiff(r.Value, ptrs)
				list = append(list, textRecord{Key: formatKey(r.Key), Value: out})
				keys = append(keys, r.Key)
			}
			recs = recs[numEqual:]
			continue
		}

		// Handle unequal records.
		for _, r := range recs[:ds.NumDiff()] {
			switch {
			case opts.CanFormatDiffSlice(r.Value):
				out := opts.FormatDiffSlice(r.Value)
				list = append(list, textRecord{Key: formatKey(r.Key), Value: out})
				keys = append(keys, r.Key)
			case r.Value.NumChildren == r.Value.MaxDepth:
				outx := opts.WithDiffMode(diffRemoved).FormatDiff(r.Value, ptrs)
				outy := opts.WithDiffMode(diffInserted).FormatDiff(r.Value, ptrs)
				for i := 0; i <= maxVerbosityPreset && outx != nil && outy != nil && outx.Equal(outy); i++ {
					opts2 := verbosityPreset(opts, i)
					outx = opts2.WithDiffMode(diffRemoved).FormatDiff(r.Value, ptrs)
					outy = opts2.WithDiffMode(diffInserted).FormatDiff(r.Value, ptrs)
				}
				if outx != nil {
					list = append(list, textRecord{Diff: diffRemoved, Key: formatKey(r.Key), Value: outx})
					keys = append(keys, r.Key)
				}
				if outy != nil {
					list = append(list, textRecord{Diff: diffInserted, Key: formatKey(r.Key), Value: outy})
					keys = append(keys, r.Key)
				}
			default:
				out := opts.FormatDiff(r.Value, ptrs)
				list = append(list, textRecord{Key: formatKey(r.Key), Value: out})
				keys = append(keys, r.Key)
			}
		}
		recs = recs[ds.NumDiff():]
		numDiffs += ds.NumDiff()
	}
	if maxGroup.IsZero() {
		assert(len(recs) == 0)
	} else {
		list.AppendEllipsis(maxGroup)
		for len(keys) < len(list) {
			keys = append(keys, reflect.Value{})
		}
	}
	assert(len(list) == len(keys))

	// For maps, the default formatting logic uses fmt.Stringer which may
	// produce ambiguous output. Avoid calling String to disambiguate.
	if k == reflect.Map {
		var ambiguous bool
		seenKeys := map[string]reflect.Value{}
		for i, currKey := range keys {
			if currKey.IsValid() {
				strKey := list[i].Key
				prevKey, seen := seenKeys[strKey]
				if seen && prevKey.CanInterface() && currKey.CanInterface() {
					ambiguous = prevKey.Interface() != currKey.Interface()
					if ambiguous {
						break
					}
				}
				seenKeys[strKey] = currKey
			}
		}
		if ambiguous {
			for i, k := range keys {
				if k.IsValid() {
					list[i].Key = formatMapKey(k, true, ptrs)
				}
			}
		}
	}

	return &textWrap{Prefix: "{", Value: list, Suffix: "}"}
}

// coalesceAdjacentRecords coalesces the list of records into groups of
// adjacent equal, or unequal counts.
func coalesceAdjacentRecords(name string, recs []reportRecord) (groups []diffStats) {
	var prevCase int // Arbitrary index into which case last occurred
	lastStats := func(i int) *diffStats {
		if prevCase != i {
			groups = append(groups, diffStats{Name: name})
			prevCase = i
		}
		return &groups[len(groups)-1]
	}
	for _, r := range recs {
		switch rv := r.Value; {
		case rv.NumIgnored > 0 && rv.NumSame+rv.NumDiff == 0:
			lastStats(1).NumIgnored++
		case rv.NumDiff == 0:
			lastStats(1).NumIdentical++
		case rv.NumDiff > 0 && !rv.ValueY.IsValid():
			lastStats(2).NumRemoved++
		case rv.NumDiff > 0 && !rv.ValueX.IsValid():
			lastStats(2).NumInserted++
		default:
			lastStats(2).NumModified++
		}
	}
	return groups
}
07070100000687000081A4000000000000000000000001645E367C00001E3B000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/cmp/report_references.go  // Copyright 2020, The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package cmp

import (
	"fmt"
	"reflect"
	"strings"

	"github.com/google/go-cmp/cmp/internal/flags"
	"github.com/google/go-cmp/cmp/internal/value"
)

const (
	pointerDelimPrefix = "⟪"
	pointerDelimSuffix = "⟫"
)

// formatPointer prints the address of the pointer.
func formatPointer(p value.Pointer, withDelims bool) string {
	v := p.Uintptr()
	if flags.Deterministic {
		v = 0xdeadf00f // Only used for stable testing purposes
	}
	if withDelims {
		return pointerDelimPrefix + formatHex(uint64(v)) + pointerDelimSuffix
	}
	return formatHex(uint64(v))
}

// pointerReferences is a stack of pointers visited so far.
type pointerReferences [][2]value.Pointer

func (ps *pointerReferences) PushPair(vx, vy reflect.Value, d diffMode, deref bool) (pp [2]value.Pointer) {
	if deref && vx.IsValid() {
		vx = vx.Addr()
	}
	if deref && vy.IsValid() {
		vy = vy.Addr()
	}
	switch d {
	case diffUnknown, diffIdentical:
		pp = [2]value.Pointer{value.PointerOf(vx), value.PointerOf(vy)}
	case diffRemoved:
		pp = [2]value.Pointer{value.PointerOf(vx), value.Pointer{}}
	case diffInserted:
		pp = [2]value.Pointer{value.Pointer{}, value.PointerOf(vy)}
	}
	*ps = append(*ps, pp)
	return pp
}

func (ps *pointerReferences) Push(v reflect.Value) (p value.Pointer, seen bool) {
	p = value.PointerOf(v)
	for _, pp := range *ps {
		if p == pp[0] || p == pp[1] {
			return p, true
		}
	}
	*ps = append(*ps, [2]value.Pointer{p, p})
	return p, false
}

func (ps *pointerReferences) Pop() {
	*ps = (*ps)[:len(*ps)-1]
}

// trunkReferences is metadata for a textNode indicating that the sub-tree
// represents the value for either pointer in a pair of references.
type trunkReferences struct{ pp [2]value.Pointer }

// trunkReference is metadata for a textNode indicating that the sub-tree
// represents the value for the given pointer reference.
type trunkReference struct{ p value.Pointer }

// leafReference is metadata for a textNode indicating that the value is
// truncated as it refers to another part of the tree (i.e., a trunk).
type leafReference struct{ p value.Pointer }

func wrapTrunkReferences(pp [2]value.Pointer, s textNode) textNode {
	switch {
	case pp[0].IsNil():
		return &textWrap{Value: s, Metadata: trunkReference{pp[1]}}
	case pp[1].IsNil():
		return &textWrap{Value: s, Metadata: trunkReference{pp[0]}}
	case pp[0] == pp[1]:
		return &textWrap{Value: s, Metadata: trunkReference{pp[0]}}
	default:
		return &textWrap{Value: s, Metadata: trunkReferences{pp}}
	}
}
func wrapTrunkReference(p value.Pointer, printAddress bool, s textNode) textNode {
	var prefix string
	if printAddress {
		prefix = formatPointer(p, true)
	}
	return &textWrap{Prefix: prefix, Value: s, Metadata: trunkReference{p}}
}
func makeLeafReference(p value.Pointer, printAddress bool) textNode {
	out := &textWrap{Prefix: "(", Value: textEllipsis, Suffix: ")"}
	var prefix string
	if printAddress {
		prefix = formatPointer(p, true)
	}
	return &textWrap{Prefix: prefix, Value: out, Metadata: leafReference{p}}
}

// resolveReferences walks the textNode tree searching for any leaf reference
// metadata and resolves each against the corresponding trunk references.
// Since pointer addresses in memory are not particularly readable to the user,
// it replaces each pointer value with an arbitrary and unique reference ID.
func resolveReferences(s textNode) {
	var walkNodes func(textNode, func(textNode))
	walkNodes = func(s textNode, f func(textNode)) {
		f(s)
		switch s := s.(type) {
		case *textWrap:
			walkNodes(s.Value, f)
		case textList:
			for _, r := range s {
				walkNodes(r.Value, f)
			}
		}
	}

	// Collect all trunks and leaves with reference metadata.
	var trunks, leaves []*textWrap
	walkNodes(s, func(s textNode) {
		if s, ok := s.(*textWrap); ok {
			switch s.Metadata.(type) {
			case leafReference:
				leaves = append(leaves, s)
			case trunkReference, trunkReferences:
				trunks = append(trunks, s)
			}
		}
	})

	// No leaf references to resolve.
	if len(leaves) == 0 {
		return
	}

	// Collect the set of all leaf references to resolve.
	leafPtrs := make(map[value.Pointer]bool)
	for _, leaf := range leaves {
		leafPtrs[leaf.Metadata.(leafReference).p] = true
	}

	// Collect the set of trunk pointers that are always paired together.
	// This allows us to assign a single ID to both pointers for brevity.
	// If a pointer in a pair ever occurs by itself or as a different pair,
	// then the pair is broken.
	pairedTrunkPtrs := make(map[value.Pointer]value.Pointer)
	unpair := func(p value.Pointer) {
		if !pairedTrunkPtrs[p].IsNil() {
			pairedTrunkPtrs[pairedTrunkPtrs[p]] = value.Pointer{} // invalidate other half
		}
		pairedTrunkPtrs[p] = value.Pointer{} // invalidate this half
	}
	for _, trunk := range trunks {
		switch p := trunk.Metadata.(type) {
		case trunkReference:
			unpair(p.p) // standalone pointer cannot be part of a pair
		case trunkReferences:
			p0, ok0 := pairedTrunkPtrs[p.pp[0]]
			p1, ok1 := pairedTrunkPtrs[p.pp[1]]
			switch {
			case !ok0 && !ok1:
				// Register the newly seen pair.
				pairedTrunkPtrs[p.pp[0]] = p.pp[1]
				pairedTrunkPtrs[p.pp[1]] = p.pp[0]
			case ok0 && ok1 && p0 == p.pp[1] && p1 == p.pp[0]:
				// Exact pair already seen; do nothing.
			default:
				// Pair conflicts with some other pair; break all pairs.
				unpair(p.pp[0])
				unpair(p.pp[1])
			}
		}
	}

	// Correlate each pointer referenced by leaves to a unique identifier,
	// and print the IDs for each trunk that matches those pointers.
	var nextID uint
	ptrIDs := make(map[value.Pointer]uint)
	newID := func() uint {
		id := nextID
		nextID++
		return id
	}
	for _, trunk := range trunks {
		switch p := trunk.Metadata.(type) {
		case trunkReference:
			if print := leafPtrs[p.p]; print {
				id, ok := ptrIDs[p.p]
				if !ok {
					id = newID()
					ptrIDs[p.p] = id
				}
				trunk.Prefix = updateReferencePrefix(trunk.Prefix, formatReference(id))
			}
		case trunkReferences:
			print0 := leafPtrs[p.pp[0]]
			print1 := leafPtrs[p.pp[1]]
			if print0 || print1 {
				id0, ok0 := ptrIDs[p.pp[0]]
				id1, ok1 := ptrIDs[p.pp[1]]
				isPair := pairedTrunkPtrs[p.pp[0]] == p.pp[1] && pairedTrunkPtrs[p.pp[1]] == p.pp[0]
				if isPair {
					var id uint
					assert(ok0 == ok1) // must be seen together or not at all
					if ok0 {
						assert(id0 == id1) // must have the same ID
						id = id0
					} else {
						id = newID()
						ptrIDs[p.pp[0]] = id
						ptrIDs[p.pp[1]] = id
					}
					trunk.Prefix = updateReferencePrefix(trunk.Prefix, formatReference(id))
				} else {
					if print0 && !ok0 {
						id0 = newID()
						ptrIDs[p.pp[0]] = id0
					}
					if print1 && !ok1 {
						id1 = newID()
						ptrIDs[p.pp[1]] = id1
					}
					switch {
					case print0 && print1:
						trunk.Prefix = updateReferencePrefix(trunk.Prefix, formatReference(id0)+","+formatReference(id1))
					case print0:
						trunk.Prefix = updateReferencePrefix(trunk.Prefix, formatReference(id0))
					case print1:
						trunk.Prefix = updateReferencePrefix(trunk.Prefix, formatReference(id1))
					}
				}
			}
		}
	}

	// Update all leaf references with the unique identifier.
	for _, leaf := range leaves {
		if id, ok := ptrIDs[leaf.Metadata.(leafReference).p]; ok {
			leaf.Prefix = updateReferencePrefix(leaf.Prefix, formatReference(id))
		}
	}
}

func formatReference(id uint) string {
	return fmt.Sprintf("ref#%d", id)
}

func updateReferencePrefix(prefix, ref string) string {
	if prefix == "" {
		return pointerDelimPrefix + ref + pointerDelimSuffix
	}
	suffix := strings.TrimPrefix(prefix, pointerDelimPrefix)
	return pointerDelimPrefix + ref + ": " + suffix
}
 07070100000688000081A4000000000000000000000001645E367C000033CE000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/cmp/report_reflect.go // Copyright 2019, The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package cmp

import (
	"bytes"
	"fmt"
	"reflect"
	"strconv"
	"strings"
	"unicode"
	"unicode/utf8"

	"github.com/google/go-cmp/cmp/internal/value"
)

var (
	anyType    = reflect.TypeOf((*interface{})(nil)).Elem()
	stringType = reflect.TypeOf((*string)(nil)).Elem()
	bytesType  = reflect.TypeOf((*[]byte)(nil)).Elem()
	byteType   = reflect.TypeOf((*byte)(nil)).Elem()
)

type formatValueOptions struct {
	// AvoidStringer controls whether to avoid calling custom stringer
	// methods like error.Error or fmt.Stringer.String.
	AvoidStringer bool

	// PrintAddresses controls whether to print the address of all pointers,
	// slice elements, and maps.
	PrintAddresses bool

	// QualifiedNames controls whether FormatType uses the fully qualified name
	// (including the full package path as opposed to just the package name).
	QualifiedNames bool

	// VerbosityLevel controls the amount of output to produce.
	// A higher value produces more output. A value of zero or lower produces
	// no output (represented using an ellipsis).
	// If LimitVerbosity is false, then the level is treated as infinite.
	VerbosityLevel int

	// LimitVerbosity specifies that formatting should respect VerbosityLevel.
	LimitVerbosity bool
}

// FormatType prints the type as if it were wrapping s.
// This may return s as-is depending on the current type and TypeMode mode.
func (opts formatOptions) FormatType(t reflect.Type, s textNode) textNode {
	// Check whether to emit the type or not.
	switch opts.TypeMode {
	case autoType:
		switch t.Kind() {
		case reflect.Struct, reflect.Slice, reflect.Array, reflect.Map:
			if s.Equal(textNil) {
				return s
			}
		default:
			return s
		}
		if opts.DiffMode == diffIdentical {
			return s // elide type for identical nodes
		}
	case elideType:
		return s
	}

	// Determine the type label, applying special handling for unnamed types.
	typeName := value.TypeString(t, opts.QualifiedNames)
	if t.Name() == "" {
		// According to Go grammar, certain type literals contain symbols that
		// do not strongly bind to the next lexicographical token (e.g., *T).
		switch t.Kind() {
		case reflect.Chan, reflect.Func, reflect.Ptr:
			typeName = "(" + typeName + ")"
		}
	}
	return &textWrap{Prefix: typeName, Value: wrapParens(s)}
}

// wrapParens wraps s with a set of parenthesis, but avoids it if the
// wrapped node itself is already surrounded by a pair of parenthesis or braces.
// It handles unwrapping one level of pointer-reference nodes.
func wrapParens(s textNode) textNode {
	var refNode *textWrap
	if s2, ok := s.(*textWrap); ok {
		// Unwrap a single pointer reference node.
		switch s2.Metadata.(type) {
		case leafReference, trunkReference, trunkReferences:
			refNode = s2
			if s3, ok := refNode.Value.(*textWrap); ok {
				s2 = s3
			}
		}

		// Already has delimiters that make parenthesis unnecessary.
		hasParens := strings.HasPrefix(s2.Prefix, "(") && strings.HasSuffix(s2.Suffix, ")")
		hasBraces := strings.HasPrefix(s2.Prefix, "{") && strings.HasSuffix(s2.Suffix, "}")
		if hasParens || hasBraces {
			return s
		}
	}
	if refNode != nil {
		refNode.Value = &textWrap{Prefix: "(", Value: refNode.Value, Suffix: ")"}
		return s
	}
	return &textWrap{Prefix: "(", Value: s, Suffix: ")"}
}

// FormatValue prints the reflect.Value, taking extra care to avoid descending
// into pointers already in ptrs. As pointers are visited, ptrs is also updated.
func (opts formatOptions) FormatValue(v reflect.Value, parentKind reflect.Kind, ptrs *pointerReferences) (out textNode) {
	if !v.IsValid() {
		return nil
	}
	t := v.Type()

	// Check slice element for cycles.
	if parentKind == reflect.Slice {
		ptrRef, visited := ptrs.Push(v.Addr())
		if visited {
			return makeLeafReference(ptrRef, false)
		}
		defer ptrs.Pop()
		defer func() { out = wrapTrunkReference(ptrRef, false, out) }()
	}

	// Check whether there is an Error or String method to call.
	if !opts.AvoidStringer && v.CanInterface() {
		// Avoid calling Error or String methods on nil receivers since many
		// implementations crash when doing so.
		if (t.Kind() != reflect.Ptr && t.Kind() != reflect.Interface) || !v.IsNil() {
			var prefix, strVal string
			func() {
				// Swallow and ignore any panics from String or Error.
				defer func() { recover() }()
				switch v := v.Interface().(type) {
				case error:
					strVal = v.Error()
					prefix = "e"
				case fmt.Stringer:
					strVal = v.String()
					prefix = "s"
				}
			}()
			if prefix != "" {
				return opts.formatString(prefix, strVal)
			}
		}
	}

	// Check whether to explicitly wrap the result with the type.
	var skipType bool
	defer func() {
		if !skipType {
			out = opts.FormatType(t, out)
		}
	}()

	switch t.Kind() {
	case reflect.Bool:
		return textLine(fmt.Sprint(v.Bool()))
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		return textLine(fmt.Sprint(v.Int()))
	case reflect.Uint, reflect.Uint16, reflect.Uint32, reflect.Uint64:
		return textLine(fmt.Sprint(v.Uint()))
	case reflect.Uint8:
		if parentKind == reflect.Slice || parentKind == reflect.Array {
			return textLine(formatHex(v.Uint()))
		}
		return textLine(fmt.Sprint(v.Uint()))
	case reflect.Uintptr:
		return textLine(formatHex(v.Uint()))
	case reflect.Float32, reflect.Float64:
		return textLine(fmt.Sprint(v.Float()))
	case reflect.Complex64, reflect.Complex128:
		return textLine(fmt.Sprint(v.Complex()))
	case reflect.String:
		return opts.formatString("", v.String())
	case reflect.UnsafePointer, reflect.Chan, reflect.Func:
		return textLine(formatPointer(value.PointerOf(v), true))
	case reflect.Struct:
		var list textList
		v := makeAddressable(v) // needed for retrieveUnexportedField
		maxLen := v.NumField()
		if opts.LimitVerbosity {
			maxLen = ((1 << opts.verbosity()) >> 1) << 2 // 0, 4, 8, 16, 32, etc...
			opts.VerbosityLevel--
		}
		for i := 0; i < v.NumField(); i++ {
			vv := v.Field(i)
			if vv.IsZero() {
				continue // Elide fields with zero values
			}
			if len(list) == maxLen {
				list.AppendEllipsis(diffStats{})
				break
			}
			sf := t.Field(i)
			if supportExporters && !isExported(sf.Name) {
				vv = retrieveUnexportedField(v, sf, true)
			}
			s := opts.WithTypeMode(autoType).FormatValue(vv, t.Kind(), ptrs)
			list = append(list, textRecord{Key: sf.Name, Value: s})
		}
		return &textWrap{Prefix: "{", Value: list, Suffix: "}"}
	case reflect.Slice:
		if v.IsNil() {
			return textNil
		}

		// Check whether this is a []byte of text data.
		if t.Elem() == byteType {
			b := v.Bytes()
			isPrintSpace := func(r rune) bool { return unicode.IsPrint(r) || unicode.IsSpace(r) }
			if len(b) > 0 && utf8.Valid(b) && len(bytes.TrimFunc(b, isPrintSpace)) == 0 {
				out = opts.formatString("", string(b))
				skipType = true
				return opts.FormatType(t, out)
			}
		}

		fallthrough
	case reflect.Array:
		maxLen := v.Len()
		if opts.LimitVerbosity {
			maxLen = ((1 << opts.verbosity()) >> 1) << 2 // 0, 4, 8, 16, 32, etc...
			opts.VerbosityLevel--
		}
		var list textList
		for i := 0; i < v.Len(); i++ {
			if len(list) == maxLen {
				list.AppendEllipsis(diffStats{})
				break
			}
			s := opts.WithTypeMode(elideType).FormatValue(v.Index(i), t.Kind(), ptrs)
			list = append(list, textRecord{Value: s})
		}

		out = &textWrap{Prefix: "{", Value: list, Suffix: "}"}
		if t.Kind() == reflect.Slice && opts.PrintAddresses {
			header := fmt.Sprintf("ptr:%v, len:%d, cap:%d", formatPointer(value.PointerOf(v), false), v.Len(), v.Cap())
			out = &textWrap{Prefix: pointerDelimPrefix + header + pointerDelimSuffix, Value: out}
		}
		return out
	case reflect.Map:
		if v.IsNil() {
			return textNil
		}

		// Check pointer for cycles.
		ptrRef, visited := ptrs.Push(v)
		if visited {
			return makeLeafReference(ptrRef, opts.PrintAddresses)
		}
		defer ptrs.Pop()

		maxLen := v.Len()
		if opts.LimitVerbosity {
			maxLen = ((1 << opts.verbosity()) >> 1) << 2 // 0, 4, 8, 16, 32, etc...
			opts.VerbosityLevel--
		}
		var list textList
		for _, k := range value.SortKeys(v.MapKeys()) {
			if len(list) == maxLen {
				list.AppendEllipsis(diffStats{})
				break
			}
			sk := formatMapKey(k, false, ptrs)
			sv := opts.WithTypeMode(elideType).FormatValue(v.MapIndex(k), t.Kind(), ptrs)
			list = append(list, textRecord{Key: sk, Value: sv})
		}

		out = &textWrap{Prefix: "{", Value: list, Suffix: "}"}
		out = wrapTrunkReference(ptrRef, opts.PrintAddresses, out)
		return out
	case reflect.Ptr:
		if v.IsNil() {
			return textNil
		}

		// Check pointer for cycles.
		ptrRef, visited := ptrs.Push(v)
		if visited {
			out = makeLeafReference(ptrRef, opts.PrintAddresses)
			return &textWrap{Prefix: "&", Value: out}
		}
		defer ptrs.Pop()

		// Skip the name only if this is an unnamed pointer type.
		// Otherwise taking the address of a value does not reproduce
		// the named pointer type.
		if v.Type().Name() == "" {
			skipType = true // Let the underlying value print the type instead
		}
		out = opts.FormatValue(v.Elem(), t.Kind(), ptrs)
		out = wrapTrunkReference(ptrRef, opts.PrintAddresses, out)
		out = &textWrap{Prefix: "&", Value: out}
		return out
	case reflect.Interface:
		if v.IsNil() {
			return textNil
		}
		// Interfaces accept different concrete types,
		// so configure the underlying value to explicitly print the type.
		return opts.WithTypeMode(emitType).FormatValue(v.Elem(), t.Kind(), ptrs)
	default:
		panic(fmt.Sprintf("%v kind not handled", v.Kind()))
	}
}

func (opts formatOptions) formatString(prefix, s string) textNode {
	maxLen := len(s)
	maxLines := strings.Count(s, "\n") + 1
	if opts.LimitVerbosity {
		maxLen = (1 << opts.verbosity()) << 5   // 32, 64, 128, 256, etc...
		maxLines = (1 << opts.verbosity()) << 2 //  4, 8, 16, 32, 64, etc...
	}

	// For multiline strings, use the triple-quote syntax,
	// but only use it when printing removed or inserted nodes since
	// we only want the extra verbosity for those cases.
	lines := strings.Split(strings.TrimSuffix(s, "\n"), "\n")
	isTripleQuoted := len(lines) >= 4 && (opts.DiffMode == '-' || opts.DiffMode == '+')
	for i := 0; i < len(lines) && isTripleQuoted; i++ {
		lines[i] = strings.TrimPrefix(strings.TrimSuffix(lines[i], "\r"), "\r") // trim leading/trailing carriage returns for legacy Windows endline support
		isPrintable := func(r rune) bool {
			return unicode.IsPrint(r) || r == '\t' // specially treat tab as printable
		}
		line := lines[i]
		isTripleQuoted = !strings.HasPrefix(strings.TrimPrefix(line, prefix), `"""`) && !strings.HasPrefix(line, "...") && strings.TrimFunc(line, isPrintable) == "" && len(line) <= maxLen
	}
	if isTripleQuoted {
		var list textList
		list = append(list, textRecord{Diff: opts.DiffMode, Value: textLine(prefix + `"""`), ElideComma: true})
		for i, line := range lines {
			if numElided := len(lines) - i; i == maxLines-1 && numElided > 1 {
				comment := commentString(fmt.Sprintf("%d elided lines", numElided))
				list = append(list, textRecord{Diff: opts.DiffMode, Value: textEllipsis, ElideComma: true, Comment: comment})
				break
			}
			list = append(list, textRecord{Diff: opts.DiffMode, Value: textLine(line), ElideComma: true})
		}
		list = append(list, textRecord{Diff: opts.DiffMode, Value: textLine(prefix + `"""`), ElideComma: true})
		return &textWrap{Prefix: "(", Value: list, Suffix: ")"}
	}

	// Format the string as a single-line quoted string.
	if len(s) > maxLen+len(textEllipsis) {
		return textLine(prefix + formatString(s[:maxLen]) + string(textEllipsis))
	}
	return textLine(prefix + formatString(s))
}

// formatMapKey formats v as if it were a map key.
// The result is guaranteed to be a single line.
func formatMapKey(v reflect.Value, disambiguate bool, ptrs *pointerReferences) string {
	var opts formatOptions
	opts.DiffMode = diffIdentical
	opts.TypeMode = elideType
	opts.PrintAddresses = disambiguate
	opts.AvoidStringer = disambiguate
	opts.QualifiedNames = disambiguate
	opts.VerbosityLevel = maxVerbosityPreset
	opts.LimitVerbosity = true
	s := opts.FormatValue(v, reflect.Map, ptrs).String()
	return strings.TrimSpace(s)
}

// formatString prints s as a double-quoted or backtick-quoted string.
func formatString(s string) string {
	// Use quoted string if it the same length as a raw string literal.
	// Otherwise, attempt to use the raw string form.
	qs := strconv.Quote(s)
	if len(qs) == 1+len(s)+1 {
		return qs
	}

	// Disallow newlines to ensure output is a single line.
	// Only allow printable runes for readability purposes.
	rawInvalid := func(r rune) bool {
		return r == '`' || r == '\n' || !(unicode.IsPrint(r) || r == '\t')
	}
	if utf8.ValidString(s) && strings.IndexFunc(s, rawInvalid) < 0 {
		return "`" + s + "`"
	}
	return qs
}

// formatHex prints u as a hexadecimal integer in Go notation.
func formatHex(u uint64) string {
	var f string
	switch {
	case u <= 0xff:
		f = "0x%02x"
	case u <= 0xffff:
		f = "0x%04x"
	case u <= 0xffffff:
		f = "0x%06x"
	case u <= 0xffffffff:
		f = "0x%08x"
	case u <= 0xffffffffff:
		f = "0x%010x"
	case u <= 0xffffffffffff:
		f = "0x%012x"
	case u <= 0xffffffffffffff:
		f = "0x%014x"
	case u <= 0xffffffffffffffff:
		f = "0x%016x"
	}
	return fmt.Sprintf(f, u)
}
  07070100000689000081A4000000000000000000000001645E367C00004F9D000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/cmp/report_slices.go  // Copyright 2019, The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package cmp

import (
	"bytes"
	"fmt"
	"math"
	"reflect"
	"strconv"
	"strings"
	"unicode"
	"unicode/utf8"

	"github.com/google/go-cmp/cmp/internal/diff"
)

// CanFormatDiffSlice reports whether we support custom formatting for nodes
// that are slices of primitive kinds or strings.
func (opts formatOptions) CanFormatDiffSlice(v *valueNode) bool {
	switch {
	case opts.DiffMode != diffUnknown:
		return false // Must be formatting in diff mode
	case v.NumDiff == 0:
		return false // No differences detected
	case !v.ValueX.IsValid() || !v.ValueY.IsValid():
		return false // Both values must be valid
	case v.NumIgnored > 0:
		return false // Some ignore option was used
	case v.NumTransformed > 0:
		return false // Some transform option was used
	case v.NumCompared > 1:
		return false // More than one comparison was used
	case v.NumCompared == 1 && v.Type.Name() != "":
		// The need for cmp to check applicability of options on every element
		// in a slice is a significant performance detriment for large []byte.
		// The workaround is to specify Comparer(bytes.Equal),
		// which enables cmp to compare []byte more efficiently.
		// If they differ, we still want to provide batched diffing.
		// The logic disallows named types since they tend to have their own
		// String method, with nicer formatting than what this provides.
		return false
	}

	// Check whether this is an interface with the same concrete types.
	t := v.Type
	vx, vy := v.ValueX, v.ValueY
	if t.Kind() == reflect.Interface && !vx.IsNil() && !vy.IsNil() && vx.Elem().Type() == vy.Elem().Type() {
		vx, vy = vx.Elem(), vy.Elem()
		t = vx.Type()
	}

	// Check whether we provide specialized diffing for this type.
	switch t.Kind() {
	case reflect.String:
	case reflect.Array, reflect.Slice:
		// Only slices of primitive types have specialized handling.
		switch t.Elem().Kind() {
		case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,
			reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr,
			reflect.Bool, reflect.Float32, reflect.Float64, reflect.Complex64, reflect.Complex128:
		default:
			return false
		}

		// Both slice values have to be non-empty.
		if t.Kind() == reflect.Slice && (vx.Len() == 0 || vy.Len() == 0) {
			return false
		}

		// If a sufficient number of elements already differ,
		// use specialized formatting even if length requirement is not met.
		if v.NumDiff > v.NumSame {
			return true
		}
	default:
		return false
	}

	// Use specialized string diffing for longer slices or strings.
	const minLength = 32
	return vx.Len() >= minLength && vy.Len() >= minLength
}

// FormatDiffSlice prints a diff for the slices (or strings) represented by v.
// This provides custom-tailored logic to make printing of differences in
// textual strings and slices of primitive kinds more readable.
func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode {
	assert(opts.DiffMode == diffUnknown)
	t, vx, vy := v.Type, v.ValueX, v.ValueY
	if t.Kind() == reflect.Interface {
		vx, vy = vx.Elem(), vy.Elem()
		t = vx.Type()
		opts = opts.WithTypeMode(emitType)
	}

	// Auto-detect the type of the data.
	var sx, sy string
	var ssx, ssy []string
	var isString, isMostlyText, isPureLinedText, isBinary bool
	switch {
	case t.Kind() == reflect.String:
		sx, sy = vx.String(), vy.String()
		isString = true
	case t.Kind() == reflect.Slice && t.Elem() == byteType:
		sx, sy = string(vx.Bytes()), string(vy.Bytes())
		isString = true
	case t.Kind() == reflect.Array:
		// Arrays need to be addressable for slice operations to work.
		vx2, vy2 := reflect.New(t).Elem(), reflect.New(t).Elem()
		vx2.Set(vx)
		vy2.Set(vy)
		vx, vy = vx2, vy2
	}
	if isString {
		var numTotalRunes, numValidRunes, numLines, lastLineIdx, maxLineLen int
		for i, r := range sx + sy {
			numTotalRunes++
			if (unicode.IsPrint(r) || unicode.IsSpace(r)) && r != utf8.RuneError {
				numValidRunes++
			}
			if r == '\n' {
				if maxLineLen < i-lastLineIdx {
					maxLineLen = i - lastLineIdx
				}
				lastLineIdx = i + 1
				numLines++
			}
		}
		isPureText := numValidRunes == numTotalRunes
		isMostlyText = float64(numValidRunes) > math.Floor(0.90*float64(numTotalRunes))
		isPureLinedText = isPureText && numLines >= 4 && maxLineLen <= 1024
		isBinary = !isMostlyText

		// Avoid diffing by lines if it produces a significantly more complex
		// edit script than diffing by bytes.
		if isPureLinedText {
			ssx = strings.Split(sx, "\n")
			ssy = strings.Split(sy, "\n")
			esLines := diff.Difference(len(ssx), len(ssy), func(ix, iy int) diff.Result {
				return diff.BoolResult(ssx[ix] == ssy[iy])
			})
			esBytes := diff.Difference(len(sx), len(sy), func(ix, iy int) diff.Result {
				return diff.BoolResult(sx[ix] == sy[iy])
			})
			efficiencyLines := float64(esLines.Dist()) / float64(len(esLines))
			efficiencyBytes := float64(esBytes.Dist()) / float64(len(esBytes))
			quotedLength := len(strconv.Quote(sx + sy))
			unquotedLength := len(sx) + len(sy)
			escapeExpansionRatio := float64(quotedLength) / float64(unquotedLength)
			isPureLinedText = efficiencyLines < 4*efficiencyBytes || escapeExpansionRatio > 1.1
		}
	}

	// Format the string into printable records.
	var list textList
	var delim string
	switch {
	// If the text appears to be multi-lined text,
	// then perform differencing across individual lines.
	case isPureLinedText:
		list = opts.formatDiffSlice(
			reflect.ValueOf(ssx), reflect.ValueOf(ssy), 1, "line",
			func(v reflect.Value, d diffMode) textRecord {
				s := formatString(v.Index(0).String())
				return textRecord{Diff: d, Value: textLine(s)}
			},
		)
		delim = "\n"

		// If possible, use a custom triple-quote (""") syntax for printing
		// differences in a string literal. This format is more readable,
		// but has edge-cases where differences are visually indistinguishable.
		// This format is avoided under the following conditions:
		//   - A line starts with `"""`
		//   - A line starts with "..."
		//   - A line contains non-printable characters
		//   - Adjacent different lines differ only by whitespace
		//
		// For example:
		//
		//		"""
		//		... // 3 identical lines
		//		foo
		//		bar
		//	-	baz
		//	+	BAZ
		//		"""
		isTripleQuoted := true
		prevRemoveLines := map[string]bool{}
		prevInsertLines := map[string]bool{}
		var list2 textList
		list2 = append(list2, textRecord{Value: textLine(`"""`), ElideComma: true})
		for _, r := range list {
			if !r.Value.Equal(textEllipsis) {
				line, _ := strconv.Unquote(string(r.Value.(textLine)))
				line = strings.TrimPrefix(strings.TrimSuffix(line, "\r"), "\r") // trim leading/trailing carriage returns for legacy Windows endline support
				normLine := strings.Map(func(r rune) rune {
					if unicode.IsSpace(r) {
						return -1 // drop whitespace to avoid visually indistinguishable output
					}
					return r
				}, line)
				isPrintable := func(r rune) bool {
					return unicode.IsPrint(r) || r == '\t' // specially treat tab as printable
				}
				isTripleQuoted = !strings.HasPrefix(line, `"""`) && !strings.HasPrefix(line, "...") && strings.TrimFunc(line, isPrintable) == ""
				switch r.Diff {
				case diffRemoved:
					isTripleQuoted = isTripleQuoted && !prevInsertLines[normLine]
					prevRemoveLines[normLine] = true
				case diffInserted:
					isTripleQuoted = isTripleQuoted && !prevRemoveLines[normLine]
					prevInsertLines[normLine] = true
				}
				if !isTripleQuoted {
					break
				}
				r.Value = textLine(line)
				r.ElideComma = true
			}
			if !(r.Diff == diffRemoved || r.Diff == diffInserted) { // start a new non-adjacent difference group
				prevRemoveLines = map[string]bool{}
				prevInsertLines = map[string]bool{}
			}
			list2 = append(list2, r)
		}
		if r := list2[len(list2)-1]; r.Diff == diffIdentical && len(r.Value.(textLine)) == 0 {
			list2 = list2[:len(list2)-1] // elide single empty line at the end
		}
		list2 = append(list2, textRecord{Value: textLine(`"""`), ElideComma: true})
		if isTripleQuoted {
			var out textNode = &textWrap{Prefix: "(", Value: list2, Suffix: ")"}
			switch t.Kind() {
			case reflect.String:
				if t != stringType {
					out = opts.FormatType(t, out)
				}
			case reflect.Slice:
				// Always emit type for slices since the triple-quote syntax
				// looks like a string (not a slice).
				opts = opts.WithTypeMode(emitType)
				out = opts.FormatType(t, out)
			}
			return out
		}

	// If the text appears to be single-lined text,
	// then perform differencing in approximately fixed-sized chunks.
	// The output is printed as quoted strings.
	case isMostlyText:
		list = opts.formatDiffSlice(
			reflect.ValueOf(sx), reflect.ValueOf(sy), 64, "byte",
			func(v reflect.Value, d diffMode) textRecord {
				s := formatString(v.String())
				return textRecord{Diff: d, Value: textLine(s)}
			},
		)

	// If the text appears to be binary data,
	// then perform differencing in approximately fixed-sized chunks.
	// The output is inspired by hexdump.
	case isBinary:
		list = opts.formatDiffSlice(
			reflect.ValueOf(sx), reflect.ValueOf(sy), 16, "byte",
			func(v reflect.Value, d diffMode) textRecord {
				var ss []string
				for i := 0; i < v.Len(); i++ {
					ss = append(ss, formatHex(v.Index(i).Uint()))
				}
				s := strings.Join(ss, ", ")
				comment := commentString(fmt.Sprintf("%c|%v|", d, formatASCII(v.String())))
				return textRecord{Diff: d, Value: textLine(s), Comment: comment}
			},
		)

	// For all other slices of primitive types,
	// then perform differencing in approximately fixed-sized chunks.
	// The size of each chunk depends on the width of the element kind.
	default:
		var chunkSize int
		if t.Elem().Kind() == reflect.Bool {
			chunkSize = 16
		} else {
			switch t.Elem().Bits() {
			case 8:
				chunkSize = 16
			case 16:
				chunkSize = 12
			case 32:
				chunkSize = 8
			default:
				chunkSize = 8
			}
		}
		list = opts.formatDiffSlice(
			vx, vy, chunkSize, t.Elem().Kind().String(),
			func(v reflect.Value, d diffMode) textRecord {
				var ss []string
				for i := 0; i < v.Len(); i++ {
					switch t.Elem().Kind() {
					case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
						ss = append(ss, fmt.Sprint(v.Index(i).Int()))
					case reflect.Uint, reflect.Uint16, reflect.Uint32, reflect.Uint64:
						ss = append(ss, fmt.Sprint(v.Index(i).Uint()))
					case reflect.Uint8, reflect.Uintptr:
						ss = append(ss, formatHex(v.Index(i).Uint()))
					case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Complex64, reflect.Complex128:
						ss = append(ss, fmt.Sprint(v.Index(i).Interface()))
					}
				}
				s := strings.Join(ss, ", ")
				return textRecord{Diff: d, Value: textLine(s)}
			},
		)
	}

	// Wrap the output with appropriate type information.
	var out textNode = &textWrap{Prefix: "{", Value: list, Suffix: "}"}
	if !isMostlyText {
		// The "{...}" byte-sequence literal is not valid Go syntax for strings.
		// Emit the type for extra clarity (e.g. "string{...}").
		if t.Kind() == reflect.String {
			opts = opts.WithTypeMode(emitType)
		}
		return opts.FormatType(t, out)
	}
	switch t.Kind() {
	case reflect.String:
		out = &textWrap{Prefix: "strings.Join(", Value: out, Suffix: fmt.Sprintf(", %q)", delim)}
		if t != stringType {
			out = opts.FormatType(t, out)
		}
	case reflect.Slice:
		out = &textWrap{Prefix: "bytes.Join(", Value: out, Suffix: fmt.Sprintf(", %q)", delim)}
		if t != bytesType {
			out = opts.FormatType(t, out)
		}
	}
	return out
}

// formatASCII formats s as an ASCII string.
// This is useful for printing binary strings in a semi-legible way.
func formatASCII(s string) string {
	b := bytes.Repeat([]byte{'.'}, len(s))
	for i := 0; i < len(s); i++ {
		if ' ' <= s[i] && s[i] <= '~' {
			b[i] = s[i]
		}
	}
	return string(b)
}

func (opts formatOptions) formatDiffSlice(
	vx, vy reflect.Value, chunkSize int, name string,
	makeRec func(reflect.Value, diffMode) textRecord,
) (list textList) {
	eq := func(ix, iy int) bool {
		return vx.Index(ix).Interface() == vy.Index(iy).Interface()
	}
	es := diff.Difference(vx.Len(), vy.Len(), func(ix, iy int) diff.Result {
		return diff.BoolResult(eq(ix, iy))
	})

	appendChunks := func(v reflect.Value, d diffMode) int {
		n0 := v.Len()
		for v.Len() > 0 {
			n := chunkSize
			if n > v.Len() {
				n = v.Len()
			}
			list = append(list, makeRec(v.Slice(0, n), d))
			v = v.Slice(n, v.Len())
		}
		return n0 - v.Len()
	}

	var numDiffs int
	maxLen := -1
	if opts.LimitVerbosity {
		maxLen = (1 << opts.verbosity()) << 2 // 4, 8, 16, 32, 64, etc...
		opts.VerbosityLevel--
	}

	groups := coalesceAdjacentEdits(name, es)
	groups = coalesceInterveningIdentical(groups, chunkSize/4)
	groups = cleanupSurroundingIdentical(groups, eq)
	maxGroup := diffStats{Name: name}
	for i, ds := range groups {
		if maxLen >= 0 && numDiffs >= maxLen {
			maxGroup = maxGroup.Append(ds)
			continue
		}

		// Print equal.
		if ds.NumDiff() == 0 {
			// Compute the number of leading and trailing equal bytes to print.
			var numLo, numHi int
			numEqual := ds.NumIgnored + ds.NumIdentical
			for numLo < chunkSize*numContextRecords && numLo+numHi < numEqual && i != 0 {
				numLo++
			}
			for numHi < chunkSize*numContextRecords && numLo+numHi < numEqual && i != len(groups)-1 {
				numHi++
			}
			if numEqual-(numLo+numHi) <= chunkSize && ds.NumIgnored == 0 {
				numHi = numEqual - numLo // Avoid pointless coalescing of single equal row
			}

			// Print the equal bytes.
			appendChunks(vx.Slice(0, numLo), diffIdentical)
			if numEqual > numLo+numHi {
				ds.NumIdentical -= numLo + numHi
				list.AppendEllipsis(ds)
			}
			appendChunks(vx.Slice(numEqual-numHi, numEqual), diffIdentical)
			vx = vx.Slice(numEqual, vx.Len())
			vy = vy.Slice(numEqual, vy.Len())
			continue
		}

		// Print unequal.
		len0 := len(list)
		nx := appendChunks(vx.Slice(0, ds.NumIdentical+ds.NumRemoved+ds.NumModified), diffRemoved)
		vx = vx.Slice(nx, vx.Len())
		ny := appendChunks(vy.Slice(0, ds.NumIdentical+ds.NumInserted+ds.NumModified), diffInserted)
		vy = vy.Slice(ny, vy.Len())
		numDiffs += len(list) - len0
	}
	if maxGroup.IsZero() {
		assert(vx.Len() == 0 && vy.Len() == 0)
	} else {
		list.AppendEllipsis(maxGroup)
	}
	return list
}

// coalesceAdjacentEdits coalesces the list of edits into groups of adjacent
// equal or unequal counts.
//
// Example:
//
//	Input:  "..XXY...Y"
//	Output: [
//		{NumIdentical: 2},
//		{NumRemoved: 2, NumInserted 1},
//		{NumIdentical: 3},
//		{NumInserted: 1},
//	]
func coalesceAdjacentEdits(name string, es diff.EditScript) (groups []diffStats) {
	var prevMode byte
	lastStats := func(mode byte) *diffStats {
		if prevMode != mode {
			groups = append(groups, diffStats{Name: name})
			prevMode = mode
		}
		return &groups[len(groups)-1]
	}
	for _, e := range es {
		switch e {
		case diff.Identity:
			lastStats('=').NumIdentical++
		case diff.UniqueX:
			lastStats('!').NumRemoved++
		case diff.UniqueY:
			lastStats('!').NumInserted++
		case diff.Modified:
			lastStats('!').NumModified++
		}
	}
	return groups
}

// coalesceInterveningIdentical coalesces sufficiently short (<= windowSize)
// equal groups into adjacent unequal groups that currently result in a
// dual inserted/removed printout. This acts as a high-pass filter to smooth
// out high-frequency changes within the windowSize.
//
// Example:
//
//	WindowSize: 16,
//	Input: [
//		{NumIdentical: 61},              // group 0
//		{NumRemoved: 3, NumInserted: 1}, // group 1
//		{NumIdentical: 6},               // ├── coalesce
//		{NumInserted: 2},                // ├── coalesce
//		{NumIdentical: 1},               // ├── coalesce
//		{NumRemoved: 9},                 // └── coalesce
//		{NumIdentical: 64},              // group 2
//		{NumRemoved: 3, NumInserted: 1}, // group 3
//		{NumIdentical: 6},               // ├── coalesce
//		{NumInserted: 2},                // ├── coalesce
//		{NumIdentical: 1},               // ├── coalesce
//		{NumRemoved: 7},                 // ├── coalesce
//		{NumIdentical: 1},               // ├── coalesce
//		{NumRemoved: 2},                 // └── coalesce
//		{NumIdentical: 63},              // group 4
//	]
//	Output: [
//		{NumIdentical: 61},
//		{NumIdentical: 7, NumRemoved: 12, NumInserted: 3},
//		{NumIdentical: 64},
//		{NumIdentical: 8, NumRemoved: 12, NumInserted: 3},
//		{NumIdentical: 63},
//	]
func coalesceInterveningIdentical(groups []diffStats, windowSize int) []diffStats {
	groups, groupsOrig := groups[:0], groups
	for i, ds := range groupsOrig {
		if len(groups) >= 2 && ds.NumDiff() > 0 {
			prev := &groups[len(groups)-2] // Unequal group
			curr := &groups[len(groups)-1] // Equal group
			next := &groupsOrig[i]         // Unequal group
			hadX, hadY := prev.NumRemoved > 0, prev.NumInserted > 0
			hasX, hasY := next.NumRemoved > 0, next.NumInserted > 0
			if ((hadX || hasX) && (hadY || hasY)) && curr.NumIdentical <= windowSize {
				*prev = prev.Append(*curr).Append(*next)
				groups = groups[:len(groups)-1] // Truncate off equal group
				continue
			}
		}
		groups = append(groups, ds)
	}
	return groups
}

// cleanupSurroundingIdentical scans through all unequal groups, and
// moves any leading sequence of equal elements to the preceding equal group and
// moves and trailing sequence of equal elements to the succeeding equal group.
//
// This is necessary since coalesceInterveningIdentical may coalesce edit groups
// together such that leading/trailing spans of equal elements becomes possible.
// Note that this can occur even with an optimal diffing algorithm.
//
// Example:
//
//	Input: [
//		{NumIdentical: 61},
//		{NumIdentical: 1 , NumRemoved: 11, NumInserted: 2}, // assume 3 leading identical elements
//		{NumIdentical: 67},
//		{NumIdentical: 7, NumRemoved: 12, NumInserted: 3},  // assume 10 trailing identical elements
//		{NumIdentical: 54},
//	]
//	Output: [
//		{NumIdentical: 64}, // incremented by 3
//		{NumRemoved: 9},
//		{NumIdentical: 67},
//		{NumRemoved: 9},
//		{NumIdentical: 64}, // incremented by 10
//	]
func cleanupSurroundingIdentical(groups []diffStats, eq func(i, j int) bool) []diffStats {
	var ix, iy int // indexes into sequence x and y
	for i, ds := range groups {
		// Handle equal group.
		if ds.NumDiff() == 0 {
			ix += ds.NumIdentical
			iy += ds.NumIdentical
			continue
		}

		// Handle unequal group.
		nx := ds.NumIdentical + ds.NumRemoved + ds.NumModified
		ny := ds.NumIdentical + ds.NumInserted + ds.NumModified
		var numLeadingIdentical, numTrailingIdentical int
		for j := 0; j < nx && j < ny && eq(ix+j, iy+j); j++ {
			numLeadingIdentical++
		}
		for j := 0; j < nx && j < ny && eq(ix+nx-1-j, iy+ny-1-j); j++ {
			numTrailingIdentical++
		}
		if numIdentical := numLeadingIdentical + numTrailingIdentical; numIdentical > 0 {
			if numLeadingIdentical > 0 {
				// Remove leading identical span from this group and
				// insert it into the preceding group.
				if i-1 >= 0 {
					groups[i-1].NumIdentical += numLeadingIdentical
				} else {
					// No preceding group exists, so prepend a new group,
					// but do so after we finish iterating over all groups.
					defer func() {
						groups = append([]diffStats{{Name: groups[0].Name, NumIdentical: numLeadingIdentical}}, groups...)
					}()
				}
				// Increment indexes since the preceding group would have handled this.
				ix += numLeadingIdentical
				iy += numLeadingIdentical
			}
			if numTrailingIdentical > 0 {
				// Remove trailing identical span from this group and
				// insert it into the succeeding group.
				if i+1 < len(groups) {
					groups[i+1].NumIdentical += numTrailingIdentical
				} else {
					// No succeeding group exists, so append a new group,
					// but do so after we finish iterating over all groups.
					defer func() {
						groups = append(groups, diffStats{Name: groups[len(groups)-1].Name, NumIdentical: numTrailingIdentical})
					}()
				}
				// Do not increment indexes since the succeeding group will handle this.
			}

			// Update this group since some identical elements were removed.
			nx -= numIdentical
			ny -= numIdentical
			groups[i] = diffStats{Name: ds.Name, NumRemoved: nx, NumInserted: ny}
		}
		ix += nx
		iy += ny
	}
	return groups
}
   0707010000068A000081A4000000000000000000000001645E367C00002DEF000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/cmp/report_text.go    // Copyright 2019, The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package cmp

import (
	"bytes"
	"fmt"
	"math/rand"
	"strings"
	"time"
	"unicode/utf8"

	"github.com/google/go-cmp/cmp/internal/flags"
)

var randBool = rand.New(rand.NewSource(time.Now().Unix())).Intn(2) == 0

const maxColumnLength = 80

type indentMode int

func (n indentMode) appendIndent(b []byte, d diffMode) []byte {
	// The output of Diff is documented as being unstable to provide future
	// flexibility in changing the output for more humanly readable reports.
	// This logic intentionally introduces instability to the exact output
	// so that users can detect accidental reliance on stability early on,
	// rather than much later when an actual change to the format occurs.
	if flags.Deterministic || randBool {
		// Use regular spaces (U+0020).
		switch d {
		case diffUnknown, diffIdentical:
			b = append(b, "  "...)
		case diffRemoved:
			b = append(b, "- "...)
		case diffInserted:
			b = append(b, "+ "...)
		}
	} else {
		// Use non-breaking spaces (U+00a0).
		switch d {
		case diffUnknown, diffIdentical:
			b = append(b, "  "...)
		case diffRemoved:
			b = append(b, "- "...)
		case diffInserted:
			b = append(b, "+ "...)
		}
	}
	return repeatCount(n).appendChar(b, '\t')
}

type repeatCount int

func (n repeatCount) appendChar(b []byte, c byte) []byte {
	for ; n > 0; n-- {
		b = append(b, c)
	}
	return b
}

// textNode is a simplified tree-based representation of structured text.
// Possible node types are textWrap, textList, or textLine.
type textNode interface {
	// Len reports the length in bytes of a single-line version of the tree.
	// Nested textRecord.Diff and textRecord.Comment fields are ignored.
	Len() int
	// Equal reports whether the two trees are structurally identical.
	// Nested textRecord.Diff and textRecord.Comment fields are compared.
	Equal(textNode) bool
	// String returns the string representation of the text tree.
	// It is not guaranteed that len(x.String()) == x.Len(),
	// nor that x.String() == y.String() implies that x.Equal(y).
	String() string

	// formatCompactTo formats the contents of the tree as a single-line string
	// to the provided buffer. Any nested textRecord.Diff and textRecord.Comment
	// fields are ignored.
	//
	// However, not all nodes in the tree should be collapsed as a single-line.
	// If a node can be collapsed as a single-line, it is replaced by a textLine
	// node. Since the top-level node cannot replace itself, this also returns
	// the current node itself.
	//
	// This does not mutate the receiver.
	formatCompactTo([]byte, diffMode) ([]byte, textNode)
	// formatExpandedTo formats the contents of the tree as a multi-line string
	// to the provided buffer. In order for column alignment to operate well,
	// formatCompactTo must be called before calling formatExpandedTo.
	formatExpandedTo([]byte, diffMode, indentMode) []byte
}

// textWrap is a wrapper that concatenates a prefix and/or a suffix
// to the underlying node.
type textWrap struct {
	Prefix   string      // e.g., "bytes.Buffer{"
	Value    textNode    // textWrap | textList | textLine
	Suffix   string      // e.g., "}"
	Metadata interface{} // arbitrary metadata; has no effect on formatting
}

func (s *textWrap) Len() int {
	return len(s.Prefix) + s.Value.Len() + len(s.Suffix)
}
func (s1 *textWrap) Equal(s2 textNode) bool {
	if s2, ok := s2.(*textWrap); ok {
		return s1.Prefix == s2.Prefix && s1.Value.Equal(s2.Value) && s1.Suffix == s2.Suffix
	}
	return false
}
func (s *textWrap) String() string {
	var d diffMode
	var n indentMode
	_, s2 := s.formatCompactTo(nil, d)
	b := n.appendIndent(nil, d)      // Leading indent
	b = s2.formatExpandedTo(b, d, n) // Main body
	b = append(b, '\n')              // Trailing newline
	return string(b)
}
func (s *textWrap) formatCompactTo(b []byte, d diffMode) ([]byte, textNode) {
	n0 := len(b) // Original buffer length
	b = append(b, s.Prefix...)
	b, s.Value = s.Value.formatCompactTo(b, d)
	b = append(b, s.Suffix...)
	if _, ok := s.Value.(textLine); ok {
		return b, textLine(b[n0:])
	}
	return b, s
}
func (s *textWrap) formatExpandedTo(b []byte, d diffMode, n indentMode) []byte {
	b = append(b, s.Prefix...)
	b = s.Value.formatExpandedTo(b, d, n)
	b = append(b, s.Suffix...)
	return b
}

// textList is a comma-separated list of textWrap or textLine nodes.
// The list may be formatted as multi-lines or single-line at the discretion
// of the textList.formatCompactTo method.
type textList []textRecord
type textRecord struct {
	Diff       diffMode     // e.g., 0 or '-' or '+'
	Key        string       // e.g., "MyField"
	Value      textNode     // textWrap | textLine
	ElideComma bool         // avoid trailing comma
	Comment    fmt.Stringer // e.g., "6 identical fields"
}

// AppendEllipsis appends a new ellipsis node to the list if none already
// exists at the end. If cs is non-zero it coalesces the statistics with the
// previous diffStats.
func (s *textList) AppendEllipsis(ds diffStats) {
	hasStats := !ds.IsZero()
	if len(*s) == 0 || !(*s)[len(*s)-1].Value.Equal(textEllipsis) {
		if hasStats {
			*s = append(*s, textRecord{Value: textEllipsis, ElideComma: true, Comment: ds})
		} else {
			*s = append(*s, textRecord{Value: textEllipsis, ElideComma: true})
		}
		return
	}
	if hasStats {
		(*s)[len(*s)-1].Comment = (*s)[len(*s)-1].Comment.(diffStats).Append(ds)
	}
}

func (s textList) Len() (n int) {
	for i, r := range s {
		n += len(r.Key)
		if r.Key != "" {
			n += len(": ")
		}
		n += r.Value.Len()
		if i < len(s)-1 {
			n += len(", ")
		}
	}
	return n
}

func (s1 textList) Equal(s2 textNode) bool {
	if s2, ok := s2.(textList); ok {
		if len(s1) != len(s2) {
			return false
		}
		for i := range s1 {
			r1, r2 := s1[i], s2[i]
			if !(r1.Diff == r2.Diff && r1.Key == r2.Key && r1.Value.Equal(r2.Value) && r1.Comment == r2.Comment) {
				return false
			}
		}
		return true
	}
	return false
}

func (s textList) String() string {
	return (&textWrap{Prefix: "{", Value: s, Suffix: "}"}).String()
}

func (s textList) formatCompactTo(b []byte, d diffMode) ([]byte, textNode) {
	s = append(textList(nil), s...) // Avoid mutating original

	// Determine whether we can collapse this list as a single line.
	n0 := len(b) // Original buffer length
	var multiLine bool
	for i, r := range s {
		if r.Diff == diffInserted || r.Diff == diffRemoved {
			multiLine = true
		}
		b = append(b, r.Key...)
		if r.Key != "" {
			b = append(b, ": "...)
		}
		b, s[i].Value = r.Value.formatCompactTo(b, d|r.Diff)
		if _, ok := s[i].Value.(textLine); !ok {
			multiLine = true
		}
		if r.Comment != nil {
			multiLine = true
		}
		if i < len(s)-1 {
			b = append(b, ", "...)
		}
	}
	// Force multi-lined output when printing a removed/inserted node that
	// is sufficiently long.
	if (d == diffInserted || d == diffRemoved) && len(b[n0:]) > maxColumnLength {
		multiLine = true
	}
	if !multiLine {
		return b, textLine(b[n0:])
	}
	return b, s
}

func (s textList) formatExpandedTo(b []byte, d diffMode, n indentMode) []byte {
	alignKeyLens := s.alignLens(
		func(r textRecord) bool {
			_, isLine := r.Value.(textLine)
			return r.Key == "" || !isLine
		},
		func(r textRecord) int { return utf8.RuneCountInString(r.Key) },
	)
	alignValueLens := s.alignLens(
		func(r textRecord) bool {
			_, isLine := r.Value.(textLine)
			return !isLine || r.Value.Equal(textEllipsis) || r.Comment == nil
		},
		func(r textRecord) int { return utf8.RuneCount(r.Value.(textLine)) },
	)

	// Format lists of simple lists in a batched form.
	// If the list is sequence of only textLine values,
	// then batch multiple values on a single line.
	var isSimple bool
	for _, r := range s {
		_, isLine := r.Value.(textLine)
		isSimple = r.Diff == 0 && r.Key == "" && isLine && r.Comment == nil
		if !isSimple {
			break
		}
	}
	if isSimple {
		n++
		var batch []byte
		emitBatch := func() {
			if len(batch) > 0 {
				b = n.appendIndent(append(b, '\n'), d)
				b = append(b, bytes.TrimRight(batch, " ")...)
				batch = batch[:0]
			}
		}
		for _, r := range s {
			line := r.Value.(textLine)
			if len(batch)+len(line)+len(", ") > maxColumnLength {
				emitBatch()
			}
			batch = append(batch, line...)
			batch = append(batch, ", "...)
		}
		emitBatch()
		n--
		return n.appendIndent(append(b, '\n'), d)
	}

	// Format the list as a multi-lined output.
	n++
	for i, r := range s {
		b = n.appendIndent(append(b, '\n'), d|r.Diff)
		if r.Key != "" {
			b = append(b, r.Key+": "...)
		}
		b = alignKeyLens[i].appendChar(b, ' ')

		b = r.Value.formatExpandedTo(b, d|r.Diff, n)
		if !r.ElideComma {
			b = append(b, ',')
		}
		b = alignValueLens[i].appendChar(b, ' ')

		if r.Comment != nil {
			b = append(b, " // "+r.Comment.String()...)
		}
	}
	n--

	return n.appendIndent(append(b, '\n'), d)
}

func (s textList) alignLens(
	skipFunc func(textRecord) bool,
	lenFunc func(textRecord) int,
) []repeatCount {
	var startIdx, endIdx, maxLen int
	lens := make([]repeatCount, len(s))
	for i, r := range s {
		if skipFunc(r) {
			for j := startIdx; j < endIdx && j < len(s); j++ {
				lens[j] = repeatCount(maxLen - lenFunc(s[j]))
			}
			startIdx, endIdx, maxLen = i+1, i+1, 0
		} else {
			if maxLen < lenFunc(r) {
				maxLen = lenFunc(r)
			}
			endIdx = i + 1
		}
	}
	for j := startIdx; j < endIdx && j < len(s); j++ {
		lens[j] = repeatCount(maxLen - lenFunc(s[j]))
	}
	return lens
}

// textLine is a single-line segment of text and is always a leaf node
// in the textNode tree.
type textLine []byte

var (
	textNil      = textLine("nil")
	textEllipsis = textLine("...")
)

func (s textLine) Len() int {
	return len(s)
}
func (s1 textLine) Equal(s2 textNode) bool {
	if s2, ok := s2.(textLine); ok {
		return bytes.Equal([]byte(s1), []byte(s2))
	}
	return false
}
func (s textLine) String() string {
	return string(s)
}
func (s textLine) formatCompactTo(b []byte, d diffMode) ([]byte, textNode) {
	return append(b, s...), s
}
func (s textLine) formatExpandedTo(b []byte, _ diffMode, _ indentMode) []byte {
	return append(b, s...)
}

type diffStats struct {
	Name         string
	NumIgnored   int
	NumIdentical int
	NumRemoved   int
	NumInserted  int
	NumModified  int
}

func (s diffStats) IsZero() bool {
	s.Name = ""
	return s == diffStats{}
}

func (s diffStats) NumDiff() int {
	return s.NumRemoved + s.NumInserted + s.NumModified
}

func (s diffStats) Append(ds diffStats) diffStats {
	assert(s.Name == ds.Name)
	s.NumIgnored += ds.NumIgnored
	s.NumIdentical += ds.NumIdentical
	s.NumRemoved += ds.NumRemoved
	s.NumInserted += ds.NumInserted
	s.NumModified += ds.NumModified
	return s
}

// String prints a humanly-readable summary of coalesced records.
//
// Example:
//
//	diffStats{Name: "Field", NumIgnored: 5}.String() => "5 ignored fields"
func (s diffStats) String() string {
	var ss []string
	var sum int
	labels := [...]string{"ignored", "identical", "removed", "inserted", "modified"}
	counts := [...]int{s.NumIgnored, s.NumIdentical, s.NumRemoved, s.NumInserted, s.NumModified}
	for i, n := range counts {
		if n > 0 {
			ss = append(ss, fmt.Sprintf("%d %v", n, labels[i]))
		}
		sum += n
	}

	// Pluralize the name (adjusting for some obscure English grammar rules).
	name := s.Name
	if sum > 1 {
		name += "s"
		if strings.HasSuffix(name, "ys") {
			name = name[:len(name)-2] + "ies" // e.g., "entrys" => "entries"
		}
	}

	// Format the list according to English grammar (with Oxford comma).
	switch n := len(ss); n {
	case 0:
		return ""
	case 1, 2:
		return strings.Join(ss, " and ") + " " + name
	default:
		return strings.Join(ss[:n-1], ", ") + ", and " + ss[n-1] + " " + name
	}
}

type commentString string

func (s commentString) String() string { return string(s) }
 0707010000068B000081A4000000000000000000000001645E367C00000E2D000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/google/go-cmp/cmp/report_value.go   // Copyright 2019, The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package cmp

import "reflect"

// valueNode represents a single node within a report, which is a
// structured representation of the value tree, containing information
// regarding which nodes are equal or not.
type valueNode struct {
	parent *valueNode

	Type   reflect.Type
	ValueX reflect.Value
	ValueY reflect.Value

	// NumSame is the number of leaf nodes that are equal.
	// All descendants are equal only if NumDiff is 0.
	NumSame int
	// NumDiff is the number of leaf nodes that are not equal.
	NumDiff int
	// NumIgnored is the number of leaf nodes that are ignored.
	NumIgnored int
	// NumCompared is the number of leaf nodes that were compared
	// using an Equal method or Comparer function.
	NumCompared int
	// NumTransformed is the number of non-leaf nodes that were transformed.
	NumTransformed int
	// NumChildren is the number of transitive descendants of this node.
	// This counts from zero; thus, leaf nodes have no descendants.
	NumChildren int
	// MaxDepth is the maximum depth of the tree. This counts from zero;
	// thus, leaf nodes have a depth of zero.
	MaxDepth int

	// Records is a list of struct fields, slice elements, or map entries.
	Records []reportRecord // If populated, implies Value is not populated

	// Value is the result of a transformation, pointer indirect, of
	// type assertion.
	Value *valueNode // If populated, implies Records is not populated

	// TransformerName is the name of the transformer.
	TransformerName string // If non-empty, implies Value is populated
}
type reportRecord struct {
	Key   reflect.Value // Invalid for slice element
	Value *valueNode
}

func (parent *valueNode) PushStep(ps PathStep) (child *valueNode) {
	vx, vy := ps.Values()
	child = &valueNode{parent: parent, Type: ps.Type(), ValueX: vx, ValueY: vy}
	switch s := ps.(type) {
	case StructField:
		assert(parent.Value == nil)
		parent.Records = append(parent.Records, reportRecord{Key: reflect.ValueOf(s.Name()), Value: child})
	case SliceIndex:
		assert(parent.Value == nil)
		parent.Records = append(parent.Records, reportRecord{Value: child})
	case MapIndex:
		assert(parent.Value == nil)
		parent.Records = append(parent.Records, reportRecord{Key: s.Key(), Value: child})
	case Indirect:
		assert(parent.Value == nil && parent.Records == nil)
		parent.Value = child
	case TypeAssertion:
		assert(parent.Value == nil && parent.Records == nil)
		parent.Value = child
	case Transform:
		assert(parent.Value == nil && parent.Records == nil)
		parent.Value = child
		parent.TransformerName = s.Name()
		parent.NumTransformed++
	default:
		assert(parent == nil) // Must be the root step
	}
	return child
}

func (r *valueNode) Report(rs Result) {
	assert(r.MaxDepth == 0) // May only be called on leaf nodes

	if rs.ByIgnore() {
		r.NumIgnored++
	} else {
		if rs.Equal() {
			r.NumSame++
		} else {
			r.NumDiff++
		}
	}
	assert(r.NumSame+r.NumDiff+r.NumIgnored == 1)

	if rs.ByMethod() {
		r.NumCompared++
	}
	if rs.ByFunc() {
		r.NumCompared++
	}
	assert(r.NumCompared <= 1)
}

func (child *valueNode) PopStep() (parent *valueNode) {
	if child.parent == nil {
		return nil
	}
	parent = child.parent
	parent.NumSame += child.NumSame
	parent.NumDiff += child.NumDiff
	parent.NumIgnored += child.NumIgnored
	parent.NumCompared += child.NumCompared
	parent.NumTransformed += child.NumTransformed
	parent.NumChildren += child.NumChildren + 1
	if parent.MaxDepth < child.MaxDepth+1 {
		parent.MaxDepth = child.MaxDepth + 1
	}
	return parent
}
   0707010000068C000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry 0707010000068D000081A4000000000000000000000001645E367C00002C5D000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/LICENSE 
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.   0707010000068E000041ED00000000000000000000000A645E367C00000000000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/internal    0707010000068F000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/internal/and    07070100000690000081A4000000000000000000000001645E367C00000569000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/internal/and/and_closer.go  // Copyright 2020 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package and provides helpers for adding Close to io.{Reader|Writer}.
package and

import (
	"io"
)

// ReadCloser implements io.ReadCloser by reading from a particular io.Reader
// and then calling the provided "Close()" method.
type ReadCloser struct {
	io.Reader
	CloseFunc func() error
}

var _ io.ReadCloser = (*ReadCloser)(nil)

// Close implements io.ReadCloser
func (rac *ReadCloser) Close() error {
	return rac.CloseFunc()
}

// WriteCloser implements io.WriteCloser by reading from a particular io.Writer
// and then calling the provided "Close()" method.
type WriteCloser struct {
	io.Writer
	CloseFunc func() error
}

var _ io.WriteCloser = (*WriteCloser)(nil)

// Close implements io.WriteCloser
func (wac *WriteCloser) Close() error {
	return wac.CloseFunc()
}
   07070100000691000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/internal/compression    07070100000692000081A4000000000000000000000001645E367C00000B9A000000000000000000000000000000000000006600000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/internal/compression/compression.go // Copyright 2022 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package compression abstracts over gzip and zstd.
package compression

import (
	"bufio"
	"bytes"
	"io"

	"github.com/google/go-containerregistry/internal/gzip"
	"github.com/google/go-containerregistry/internal/zstd"
	"github.com/google/go-containerregistry/pkg/compression"
)

// Opener represents e.g. opening a file.
type Opener = func() (io.ReadCloser, error)

// GetCompression detects whether an Opener is compressed and which algorithm is used.
func GetCompression(opener Opener) (compression.Compression, error) {
	rc, err := opener()
	if err != nil {
		return compression.None, err
	}
	defer rc.Close()

	cp, _, err := PeekCompression(rc)
	if err != nil {
		return compression.None, err
	}

	return cp, nil
}

// PeekCompression detects whether the input stream is compressed and which algorithm is used.
//
// If r implements Peek, we will use that directly, otherwise a small number
// of bytes are buffered to Peek at the gzip/zstd header, and the returned
// PeekReader can be used as a replacement for the consumed input io.Reader.
func PeekCompression(r io.Reader) (compression.Compression, PeekReader, error) {
	pr := intoPeekReader(r)

	if isGZip, _, err := checkHeader(pr, gzip.MagicHeader); err != nil {
		return compression.None, pr, err
	} else if isGZip {
		return compression.GZip, pr, nil
	}

	if isZStd, _, err := checkHeader(pr, zstd.MagicHeader); err != nil {
		return compression.None, pr, err
	} else if isZStd {
		return compression.ZStd, pr, nil
	}

	return compression.None, pr, nil
}

// PeekReader is an io.Reader that also implements Peek a la bufio.Reader.
type PeekReader interface {
	io.Reader
	Peek(n int) ([]byte, error)
}

// IntoPeekReader creates a PeekReader from an io.Reader.
// If the reader already has a Peek method, it will just return the passed reader.
func intoPeekReader(r io.Reader) PeekReader {
	if p, ok := r.(PeekReader); ok {
		return p
	}

	return bufio.NewReader(r)
}

// CheckHeader checks whether the first bytes from a PeekReader match an expected header
func checkHeader(pr PeekReader, expectedHeader []byte) (bool, PeekReader, error) {
	header, err := pr.Peek(len(expectedHeader))
	if err != nil {
		// https://github.com/google/go-containerregistry/issues/367
		if err == io.EOF {
			return false, pr, nil
		}
		return false, pr, err
	}
	return bytes.Equal(header, expectedHeader), pr, nil
}
  07070100000693000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/internal/estargz    07070100000694000081A4000000000000000000000001645E367C00000709000000000000000000000000000000000000005E00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/internal/estargz/estargz.go // Copyright 2020 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package estargz adapts the containerd estargz package to our abstractions.
package estargz

import (
	"bytes"
	"io"

	"github.com/containerd/stargz-snapshotter/estargz"
	v1 "github.com/google/go-containerregistry/pkg/v1"
)

// Assert that what we're returning is an io.ReadCloser
var _ io.ReadCloser = (*estargz.Blob)(nil)

// ReadCloser reads uncompressed tarball input from the io.ReadCloser and
// returns:
//   - An io.ReadCloser from which compressed data may be read, and
//   - A v1.Hash with the hash of the estargz table of contents, or
//   - An error if the estargz processing encountered a problem.
//
// Refer to estargz for the options:
// https://pkg.go.dev/github.com/containerd/stargz-snapshotter/estargz@v0.4.1#Option
func ReadCloser(r io.ReadCloser, opts ...estargz.Option) (*estargz.Blob, v1.Hash, error) {
	defer r.Close()

	// TODO(#876): Avoid buffering into memory.
	bs, err := io.ReadAll(r)
	if err != nil {
		return nil, v1.Hash{}, err
	}
	br := bytes.NewReader(bs)

	rc, err := estargz.Build(io.NewSectionReader(br, 0, int64(len(bs))), opts...)
	if err != nil {
		return nil, v1.Hash{}, err
	}

	h, err := v1.NewHash(rc.TOCDigest().String())
	return rc, h, err
}
   07070100000695000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/internal/gzip   07070100000696000081A4000000000000000000000001645E367C00000E19000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/internal/gzip/zip.go    // Copyright 2020 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package gzip provides helper functions for interacting with gzipped streams.
package gzip

import (
	"bufio"
	"bytes"
	"compress/gzip"
	"io"

	"github.com/google/go-containerregistry/internal/and"
)

// MagicHeader is the start of gzip files.
var MagicHeader = []byte{'\x1f', '\x8b'}

// ReadCloser reads uncompressed input data from the io.ReadCloser and
// returns an io.ReadCloser from which compressed data may be read.
// This uses gzip.BestSpeed for the compression level.
func ReadCloser(r io.ReadCloser) io.ReadCloser {
	return ReadCloserLevel(r, gzip.BestSpeed)
}

// ReadCloserLevel reads uncompressed input data from the io.ReadCloser and
// returns an io.ReadCloser from which compressed data may be read.
// Refer to compress/gzip for the level:
// https://golang.org/pkg/compress/gzip/#pkg-constants
func ReadCloserLevel(r io.ReadCloser, level int) io.ReadCloser {
	pr, pw := io.Pipe()

	// For highly compressible layers, gzip.Writer will output a very small
	// number of bytes per Write(). This is normally fine, but when pushing
	// to a registry, we want to ensure that we're taking full advantage of
	// the available bandwidth instead of sending tons of tiny writes over
	// the wire.
	// 64K ought to be small enough for anybody.
	bw := bufio.NewWriterSize(pw, 2<<16)

	// Returns err so we can pw.CloseWithError(err)
	go func() error {
		// TODO(go1.14): Just defer {pw,gw,r}.Close like you'd expect.
		// Context: https://golang.org/issue/24283
		gw, err := gzip.NewWriterLevel(bw, level)
		if err != nil {
			return pw.CloseWithError(err)
		}

		if _, err := io.Copy(gw, r); err != nil {
			defer r.Close()
			defer gw.Close()
			return pw.CloseWithError(err)
		}

		// Close gzip writer to Flush it and write gzip trailers.
		if err := gw.Close(); err != nil {
			return pw.CloseWithError(err)
		}

		// Flush bufio writer to ensure we write out everything.
		if err := bw.Flush(); err != nil {
			return pw.CloseWithError(err)
		}

		// We don't really care if these fail.
		defer pw.Close()
		defer r.Close()

		return nil
	}()

	return pr
}

// UnzipReadCloser reads compressed input data from the io.ReadCloser and
// returns an io.ReadCloser from which uncompressed data may be read.
func UnzipReadCloser(r io.ReadCloser) (io.ReadCloser, error) {
	gr, err := gzip.NewReader(r)
	if err != nil {
		return nil, err
	}
	return &and.ReadCloser{
		Reader: gr,
		CloseFunc: func() error {
			// If the unzip fails, then this seems to return the same
			// error as the read.  We don't want this to interfere with
			// us closing the main ReadCloser, since this could leave
			// an open file descriptor (fails on Windows).
			gr.Close()
			return r.Close()
		},
	}, nil
}

// Is detects whether the input stream is compressed.
func Is(r io.Reader) (bool, error) {
	magicHeader := make([]byte, 2)
	n, err := r.Read(magicHeader)
	if n == 0 && err == io.EOF {
		return false, nil
	}
	if err != nil {
		return false, err
	}
	return bytes.Equal(magicHeader, MagicHeader), nil
}
   07070100000697000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/internal/redact 07070100000698000081A4000000000000000000000001645E367C00000A51000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/internal/redact/redact.go   // Copyright 2020 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package redact contains a simple context signal for redacting requests.
package redact

import (
	"context"
	"errors"
	"net/url"
)

type contextKey string

var redactKey = contextKey("redact")

// NewContext creates a new ctx with the reason for redaction.
func NewContext(ctx context.Context, reason string) context.Context {
	return context.WithValue(ctx, redactKey, reason)
}

// FromContext returns the redaction reason, if any.
func FromContext(ctx context.Context) (bool, string) {
	reason, ok := ctx.Value(redactKey).(string)
	return ok, reason
}

// Error redacts potentially sensitive query parameter values in the URL from the error's message.
//
// If the error is a *url.Error, this returns a *url.Error with the URL redacted.
// Any other error type, or nil, is returned unchanged.
func Error(err error) error {
	// If the error is a url.Error, we can redact the URL.
	// Otherwise (including if err is nil), we can't redact.
	var uerr *url.Error
	if ok := errors.As(err, &uerr); !ok {
		return err
	}
	u, perr := url.Parse(uerr.URL)
	if perr != nil {
		return err // If the URL can't be parsed, just return the original error.
	}
	uerr.URL = URL(u).String() // Update the URL to the redacted URL.
	return uerr
}

// The set of query string keys that we expect to send as part of the registry
// protocol. Anything else is potentially dangerous to leak, as it's probably
// from a redirect. These redirects often included tokens or signed URLs.
var paramAllowlist = map[string]struct{}{
	// Token exchange
	"scope":   {},
	"service": {},
	// Cross-repo mounting
	"mount": {},
	"from":  {},
	// Layer PUT
	"digest": {},
	// Listing tags and catalog
	"n":    {},
	"last": {},
}

// URL redacts potentially sensitive query parameter values from the URL's query string.
func URL(u *url.URL) *url.URL {
	qs := u.Query()
	for k, v := range qs {
		for i := range v {
			if _, ok := paramAllowlist[k]; !ok {
				// key is not in the Allowlist
				v[i] = "REDACTED"
			}
		}
	}
	r := *u
	r.RawQuery = qs.Encode()
	return &r
}
   07070100000699000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/internal/retry  0707010000069A000081A4000000000000000000000001645E367C00000AB5000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/internal/retry/retry.go // Copyright 2019 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package retry provides methods for retrying operations. It is a thin wrapper
// around k8s.io/apimachinery/pkg/util/wait to make certain operations easier.
package retry

import (
	"context"
	"errors"
	"fmt"

	"github.com/google/go-containerregistry/internal/retry/wait"
)

// Backoff is an alias of our own wait.Backoff to avoid name conflicts with
// the kubernetes wait package. Typing retry.Backoff is aesier than fixing
// the wrong import every time you use wait.Backoff.
type Backoff = wait.Backoff

// This is implemented by several errors in the net package as well as our
// transport.Error.
type temporary interface {
	Temporary() bool
}

// IsTemporary returns true if err implements Temporary() and it returns true.
func IsTemporary(err error) bool {
	if errors.Is(err, context.DeadlineExceeded) {
		return false
	}
	if te, ok := err.(temporary); ok && te.Temporary() {
		return true
	}
	return false
}

// IsNotNil returns true if err is not nil.
func IsNotNil(err error) bool {
	return err != nil
}

// Predicate determines whether an error should be retried.
type Predicate func(error) (retry bool)

// Retry retries a given function, f, until a predicate is satisfied, using
// exponential backoff. If the predicate is never satisfied, it will return the
// last error returned by f.
func Retry(f func() error, p Predicate, backoff wait.Backoff) (err error) {
	if f == nil {
		return fmt.Errorf("nil f passed to retry")
	}
	if p == nil {
		return fmt.Errorf("nil p passed to retry")
	}

	condition := func() (bool, error) {
		err = f()
		if p(err) {
			return false, nil
		}
		return true, err
	}

	wait.ExponentialBackoff(backoff, condition)
	return
}

type contextKey string

var key = contextKey("never")

// Never returns a context that signals something should not be retried.
// This is a hack and can be used to communicate across package boundaries
// to avoid retry amplification.
func Never(ctx context.Context) context.Context {
	return context.WithValue(ctx, key, true)
}

// Ever returns true if the context was wrapped by Never.
func Ever(ctx context.Context) bool {
	return ctx.Value(key) == nil
}
   0707010000069B000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/internal/retry/wait 0707010000069C000081A4000000000000000000000001645E367C00000FC5000000000000000000000000000000000000007600000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/internal/retry/wait/kubernetes_apimachinery_wait.go /*
Copyright 2014 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

// Package wait is a subset of k8s.io/apimachinery to avoid conflicts
// in dependencies (specifically, logging).
package wait

import (
	"errors"
	"math/rand"
	"time"
)

// Jitter returns a time.Duration between duration and duration + maxFactor *
// duration.
//
// This allows clients to avoid converging on periodic behavior. If maxFactor
// is 0.0, a suggested default value will be chosen.
func Jitter(duration time.Duration, maxFactor float64) time.Duration {
	if maxFactor <= 0.0 {
		maxFactor = 1.0
	}
	wait := duration + time.Duration(rand.Float64()*maxFactor*float64(duration))
	return wait
}

// ErrWaitTimeout is returned when the condition exited without success.
var ErrWaitTimeout = errors.New("timed out waiting for the condition")

// ConditionFunc returns true if the condition is satisfied, or an error
// if the loop should be aborted.
type ConditionFunc func() (done bool, err error)

// Backoff holds parameters applied to a Backoff function.
type Backoff struct {
	// The initial duration.
	Duration time.Duration
	// Duration is multiplied by factor each iteration, if factor is not zero
	// and the limits imposed by Steps and Cap have not been reached.
	// Should not be negative.
	// The jitter does not contribute to the updates to the duration parameter.
	Factor float64
	// The sleep at each iteration is the duration plus an additional
	// amount chosen uniformly at random from the interval between
	// zero and `jitter*duration`.
	Jitter float64
	// The remaining number of iterations in which the duration
	// parameter may change (but progress can be stopped earlier by
	// hitting the cap). If not positive, the duration is not
	// changed. Used for exponential backoff in combination with
	// Factor and Cap.
	Steps int
	// A limit on revised values of the duration parameter. If a
	// multiplication by the factor parameter would make the duration
	// exceed the cap then the duration is set to the cap and the
	// steps parameter is set to zero.
	Cap time.Duration
}

// Step (1) returns an amount of time to sleep determined by the
// original Duration and Jitter and (2) mutates the provided Backoff
// to update its Steps and Duration.
func (b *Backoff) Step() time.Duration {
	if b.Steps < 1 {
		if b.Jitter > 0 {
			return Jitter(b.Duration, b.Jitter)
		}
		return b.Duration
	}
	b.Steps--

	duration := b.Duration

	// calculate the next step
	if b.Factor != 0 {
		b.Duration = time.Duration(float64(b.Duration) * b.Factor)
		if b.Cap > 0 && b.Duration > b.Cap {
			b.Duration = b.Cap
			b.Steps = 0
		}
	}

	if b.Jitter > 0 {
		duration = Jitter(duration, b.Jitter)
	}
	return duration
}

// ExponentialBackoff repeats a condition check with exponential backoff.
//
// It repeatedly checks the condition and then sleeps, using `backoff.Step()`
// to determine the length of the sleep and adjust Duration and Steps.
// Stops and returns as soon as:
// 1. the condition check returns true or an error,
// 2. `backoff.Steps` checks of the condition have been done, or
// 3. a sleep truncated by the cap on duration has been completed.
// In case (1) the returned error is what the condition function returned.
// In all other cases, ErrWaitTimeout is returned.
func ExponentialBackoff(backoff Backoff, condition ConditionFunc) error {
	for backoff.Steps > 0 {
		if ok, err := condition(); err != nil || ok {
			return err
		}
		if backoff.Steps == 1 {
			break
		}
		time.Sleep(backoff.Step())
	}
	return ErrWaitTimeout
}
   0707010000069D000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/internal/verify 0707010000069E000081A4000000000000000000000001645E367C00000DB4000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/internal/verify/verify.go   // Copyright 2020 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package verify provides a ReadCloser that verifies content matches the
// expected hash values.
package verify

import (
	"bytes"
	"encoding/hex"
	"errors"
	"fmt"
	"hash"
	"io"

	"github.com/google/go-containerregistry/internal/and"
	v1 "github.com/google/go-containerregistry/pkg/v1"
)

// SizeUnknown is a sentinel value to indicate that the expected size is not known.
const SizeUnknown = -1

type verifyReader struct {
	inner             io.Reader
	hasher            hash.Hash
	expected          v1.Hash
	gotSize, wantSize int64
}

// Error provides information about the failed hash verification.
type Error struct {
	got     string
	want    v1.Hash
	gotSize int64
}

func (v Error) Error() string {
	return fmt.Sprintf("error verifying %s checksum after reading %d bytes; got %q, want %q",
		v.want.Algorithm, v.gotSize, v.got, v.want)
}

// Read implements io.Reader
func (vc *verifyReader) Read(b []byte) (int, error) {
	n, err := vc.inner.Read(b)
	vc.gotSize += int64(n)
	if err == io.EOF {
		if vc.wantSize != SizeUnknown && vc.gotSize != vc.wantSize {
			return n, fmt.Errorf("error verifying size; got %d, want %d", vc.gotSize, vc.wantSize)
		}
		got := hex.EncodeToString(vc.hasher.Sum(nil))
		if want := vc.expected.Hex; got != want {
			return n, Error{
				got:     vc.expected.Algorithm + ":" + got,
				want:    vc.expected,
				gotSize: vc.gotSize,
			}
		}
	}
	return n, err
}

// ReadCloser wraps the given io.ReadCloser to verify that its contents match
// the provided v1.Hash before io.EOF is returned.
//
// The reader will only be read up to size bytes, to prevent resource
// exhaustion. If EOF is returned before size bytes are read, an error is
// returned.
//
// A size of SizeUnknown (-1) indicates disables size verification when the size
// is unknown ahead of time.
func ReadCloser(r io.ReadCloser, size int64, h v1.Hash) (io.ReadCloser, error) {
	w, err := v1.Hasher(h.Algorithm)
	if err != nil {
		return nil, err
	}
	r2 := io.TeeReader(r, w) // pass all writes to the hasher.
	if size != SizeUnknown {
		r2 = io.LimitReader(r2, size) // if we know the size, limit to that size.
	}
	return &and.ReadCloser{
		Reader: &verifyReader{
			inner:    r2,
			hasher:   w,
			expected: h,
			wantSize: size,
		},
		CloseFunc: r.Close,
	}, nil
}

// Descriptor verifies that the embedded Data field matches the Size and Digest
// fields of the given v1.Descriptor, returning an error if the Data field is
// missing or if it contains incorrect data.
func Descriptor(d v1.Descriptor) error {
	if d.Data == nil {
		return errors.New("error verifying descriptor; Data == nil")
	}

	h, sz, err := v1.SHA256(bytes.NewReader(d.Data))
	if err != nil {
		return err
	}
	if h != d.Digest {
		return fmt.Errorf("error verifying Digest; got %q, want %q", h, d.Digest)
	}
	if sz != d.Size {
		return fmt.Errorf("error verifying Size; got %d, want %d", sz, d.Size)
	}

	return nil
}
0707010000069F000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/internal/zstd   070701000006A0000081A4000000000000000000000001645E367C00000DF3000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/internal/zstd/zstd.go   // Copyright 2022 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package zstd provides helper functions for interacting with zstd streams.
package zstd

import (
	"bufio"
	"bytes"
	"io"

	"github.com/google/go-containerregistry/internal/and"
	"github.com/klauspost/compress/zstd"
)

// MagicHeader is the start of zstd files.
var MagicHeader = []byte{'\x28', '\xb5', '\x2f', '\xfd'}

// ReadCloser reads uncompressed input data from the io.ReadCloser and
// returns an io.ReadCloser from which compressed data may be read.
// This uses zstd level 1 for the compression.
func ReadCloser(r io.ReadCloser) io.ReadCloser {
	return ReadCloserLevel(r, 1)
}

// ReadCloserLevel reads uncompressed input data from the io.ReadCloser and
// returns an io.ReadCloser from which compressed data may be read.
func ReadCloserLevel(r io.ReadCloser, level int) io.ReadCloser {
	pr, pw := io.Pipe()

	// For highly compressible layers, zstd.Writer will output a very small
	// number of bytes per Write(). This is normally fine, but when pushing
	// to a registry, we want to ensure that we're taking full advantage of
	// the available bandwidth instead of sending tons of tiny writes over
	// the wire.
	// 64K ought to be small enough for anybody.
	bw := bufio.NewWriterSize(pw, 2<<16)

	// Returns err so we can pw.CloseWithError(err)
	go func() error {
		// TODO(go1.14): Just defer {pw,zw,r}.Close like you'd expect.
		// Context: https://golang.org/issue/24283
		zw, err := zstd.NewWriter(bw, zstd.WithEncoderLevel(zstd.EncoderLevelFromZstd(level)))
		if err != nil {
			return pw.CloseWithError(err)
		}

		if _, err := io.Copy(zw, r); err != nil {
			defer r.Close()
			defer zw.Close()
			return pw.CloseWithError(err)
		}

		// Close zstd writer to Flush it and write zstd trailers.
		if err := zw.Close(); err != nil {
			return pw.CloseWithError(err)
		}

		// Flush bufio writer to ensure we write out everything.
		if err := bw.Flush(); err != nil {
			return pw.CloseWithError(err)
		}

		// We don't really care if these fail.
		defer pw.Close()
		defer r.Close()

		return nil
	}()

	return pr
}

// UnzipReadCloser reads compressed input data from the io.ReadCloser and
// returns an io.ReadCloser from which uncompressed data may be read.
func UnzipReadCloser(r io.ReadCloser) (io.ReadCloser, error) {
	gr, err := zstd.NewReader(r)
	if err != nil {
		return nil, err
	}
	return &and.ReadCloser{
		Reader: gr,
		CloseFunc: func() error {
			// If the unzip fails, then this seems to return the same
			// error as the read.  We don't want this to interfere with
			// us closing the main ReadCloser, since this could leave
			// an open file descriptor (fails on Windows).
			gr.Close()
			return r.Close()
		},
	}, nil
}

// Is detects whether the input stream is compressed.
func Is(r io.Reader) (bool, error) {
	magicHeader := make([]byte, 4)
	n, err := r.Read(magicHeader)
	if n == 0 && err == io.EOF {
		return false, nil
	}
	if err != nil {
		return false, err
	}
	return bytes.Equal(magicHeader, MagicHeader), nil
}
 070701000006A1000041ED000000000000000000000007645E367C00000000000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg 070701000006A2000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/authn   070701000006A3000081A4000000000000000000000001645E367C000032BD000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/authn/README.md # `authn`

[![GoDoc](https://godoc.org/github.com/google/go-containerregistry/pkg/authn?status.svg)](https://godoc.org/github.com/google/go-containerregistry/pkg/authn)

This README outlines how we acquire and use credentials when interacting with a registry.

As much as possible, we attempt to emulate `docker`'s authentication behavior and configuration so that this library "just works" if you've already configured credentials that work with `docker`; however, when things don't work, a basic understanding of what's going on can help with debugging.

The official documentation for how authentication with `docker` works is (reasonably) scattered across several different sites and GitHub repositories, so we've tried to summarize the relevant bits here.

## tl;dr for consumers of this package

By default, [`pkg/v1/remote`](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/remote) uses [`Anonymous`](https://godoc.org/github.com/google/go-containerregistry/pkg/authn#Anonymous) credentials (i.e. _none_), which for most registries will only allow read access to public images.

To use the credentials found in your Docker config file, you can use the [`DefaultKeychain`](https://godoc.org/github.com/google/go-containerregistry/pkg/authn#DefaultKeychain), e.g.:

```go
package main

import (
	"fmt"

	"github.com/google/go-containerregistry/pkg/authn"
	"github.com/google/go-containerregistry/pkg/name"
	"github.com/google/go-containerregistry/pkg/v1/remote"
)

func main() {
	ref, err := name.ParseReference("registry.example.com/private/repo")
	if err != nil {
		panic(err)
	}

	// Fetch the manifest using default credentials.
	img, err := remote.Get(ref, remote.WithAuthFromKeychain(authn.DefaultKeychain))
	if err != nil {
		panic(err)
	}

	// Prints the digest of registry.example.com/private/repo
	fmt.Println(img.Digest)
}
```

The `DefaultKeychain` will use credentials as described in your Docker config file -- usually `~/.docker/config.json`, or `%USERPROFILE%\.docker\config.json` on Windows -- or the location described by the `DOCKER_CONFIG` environment variable, if set.

If those are not found, `DefaultKeychain` will look for credentials configured using [Podman's expectation](https://docs.podman.io/en/latest/markdown/podman-login.1.html) that these are found in `${XDG_RUNTIME_DIR}/containers/auth.json`.

[See below](#docker-config-auth) for more information about what is configured in this file.

## Emulating Cloud Provider Credential Helpers

[`pkg/v1/google.Keychain`](https://pkg.go.dev/github.com/google/go-containerregistry/pkg/v1/google#Keychain) provides a `Keychain` implementation that emulates [`docker-credential-gcr`](https://github.com/GoogleCloudPlatform/docker-credential-gcr) to find credentials in the environment.
See [`google.NewEnvAuthenticator`](https://pkg.go.dev/github.com/google/go-containerregistry/pkg/v1/google#NewEnvAuthenticator) and [`google.NewGcloudAuthenticator`](https://pkg.go.dev/github.com/google/go-containerregistry/pkg/v1/google#NewGcloudAuthenticator) for more information.

To emulate other credential helpers without requiring them to be available as executables, [`NewKeychainFromHelper`](https://pkg.go.dev/github.com/google/go-containerregistry/pkg/authn#NewKeychainFromHelper) provides an adapter that takes a Go implementation satisfying a subset of the [`credentials.Helper`](https://pkg.go.dev/github.com/docker/docker-credential-helpers/credentials#Helper) interface, and makes it available as a `Keychain`.

This means that you can emulate, for example, [Amazon ECR's `docker-credential-ecr-login` credential helper](https://github.com/awslabs/amazon-ecr-credential-helper) using the same implementation:

```go
import (
	ecr "github.com/awslabs/amazon-ecr-credential-helper/ecr-login"
	"github.com/awslabs/amazon-ecr-credential-helper/ecr-login/api"

	"github.com/google/go-containerregistry/pkg/authn"
	"github.com/google/go-containerregistry/pkg/v1/remote"
)

func main() {
	// ...
	ecrHelper := ecr.ECRHelper{ClientFactory: api.DefaultClientFactory{}}
	img, err := remote.Get(ref, remote.WithAuthFromKeychain(authn.NewKeychainFromHelper(ecrHelper)))
	if err != nil {
		panic(err)
	}
	// ...
}
```

Likewise, you can emulate [Azure's ACR `docker-credential-acr-env` credential helper](https://github.com/chrismellard/docker-credential-acr-env):

```go
import (
	"github.com/chrismellard/docker-credential-acr-env/pkg/credhelper"

	"github.com/google/go-containerregistry/pkg/authn"
	"github.com/google/go-containerregistry/pkg/v1/remote"
)

func main() {
	// ...
	acrHelper := credhelper.NewACRCredentialsHelper()
	img, err := remote.Get(ref, remote.WithAuthFromKeychain(authn.NewKeychainFromHelper(acrHelper)))
	if err != nil {
		panic(err)
	}
	// ...
}
```

<!-- TODO(jasonhall): Wrap these in docker-credential-magic and reference those from here. -->

## Using Multiple `Keychain`s

[`NewMultiKeychain`](https://pkg.go.dev/github.com/google/go-containerregistry/pkg/authn#NewMultiKeychain) allows you to specify multiple `Keychain` implementations, which will be checked in order when credentials are needed.

For example:

```go
kc := authn.NewMultiKeychain(
    authn.DefaultKeychain,
    google.Keychain,
    authn.NewKeychainFromHelper(ecr.ECRHelper{ClientFactory: api.DefaultClientFactory{}}),
    authn.NewKeychainFromHelper(acr.ACRCredHelper{}),
)
```

This multi-keychain will:

- first check for credentials found in the Docker config file, as describe above, then
- check for GCP credentials available in the environment, as described above, then
- check for ECR credentials by emulating the ECR credential helper, then
- check for ACR credentials by emulating the ACR credential helper.

If any keychain implementation is able to provide credentials for the request, they will be used, and further keychain implementations will not be consulted.

If no implementations are able to provide credentials, `Anonymous` credentials will be used.

## Docker Config Auth

What follows attempts to gather useful information about Docker's config.json and make it available in one place.

If you have questions, please [file an issue](https://github.com/google/go-containerregistry/issues/new).

### Plaintext

The config file is where your credentials are stored when you invoke `docker login`, e.g. the contents may look something like this:

```json
{
	"auths": {
		"registry.example.com": {
			"auth": "QXp1cmVEaWFtb25kOmh1bnRlcjI="
		}
	}
}
```

The `auths` map has an entry per registry, and the `auth` field contains your username and password encoded as [HTTP 'Basic' Auth](https://tools.ietf.org/html/rfc7617).

**NOTE**: This means that your credentials are stored _in plaintext_:

```bash
$ echo "QXp1cmVEaWFtb25kOmh1bnRlcjI=" | base64 -d
AzureDiamond:hunter2
```

For what it's worth, this config file is equivalent to:

```json
{
	"auths": {
		"registry.example.com": {
			"username": "AzureDiamond",
			"password": "hunter2"
		}
	}
}
```

... which is useful to know if e.g. your CI system provides you a registry username and password via environment variables and you want to populate this file manually without invoking `docker login`.

### Helpers

If you log in like this, `docker` will warn you that you should use a [credential helper](https://docs.docker.com/engine/reference/commandline/login/#credentials-store), and you should!

To configure a global credential helper:
```json
{
	"credsStore": "osxkeychain"
}
```

To configure a per-registry credential helper:
```json
{
	"credHelpers": {
		"gcr.io": "gcr"
	}
}
```

We use [`github.com/docker/cli/cli/config.Load`](https://godoc.org/github.com/docker/cli/cli/config#Load) to parse the config file and invoke any necessary credential helpers. This handles the logic of taking a [`ConfigFile`](https://github.com/docker/cli/blob/ba63a92655c0bea4857b8d6cc4991498858b3c60/cli/config/configfile/file.go#L25-L54) + registry domain and producing an [`AuthConfig`](https://github.com/docker/cli/blob/ba63a92655c0bea4857b8d6cc4991498858b3c60/cli/config/types/authconfig.go#L3-L22), which determines how we authenticate to the registry.

## Credential Helpers

The [credential helper protocol](https://github.com/docker/docker-credential-helpers) allows you to configure a binary that supplies credentials for the registry, rather than hard-coding them in the config file.

The protocol has several verbs, but the one we most care about is `get`.

For example, using the following config file:
```json
{
	"credHelpers": {
		"gcr.io": "gcr",
		"eu.gcr.io": "gcr"
	}
}
```

To acquire credentials for `gcr.io`, we look in the `credHelpers` map to find
the credential helper for `gcr.io` is `gcr`. By appending that value to
`docker-credential-`, we can get the name of the binary we need to use.

For this example, that's `docker-credential-gcr`, which must be on our `$PATH`.
We'll then invoke that binary to get credentials:

```bash
$ echo "gcr.io" | docker-credential-gcr get
{"Username":"_token","Secret":"<long access token>"}
```

You can configure the same credential helper for multiple registries, which is
why we need to pass the domain in via STDIN, e.g. if we were trying to access
`eu.gcr.io`, we'd do this instead:

```bash
$ echo "eu.gcr.io" | docker-credential-gcr get
{"Username":"_token","Secret":"<long access token>"}
```

### Debugging credential helpers

If a credential helper is configured but doesn't seem to be working, it can be
challenging to debug. Implementing a fake credential helper lets you poke around
to make it easier to see where the failure is happening.

This "implements" a credential helper with hard-coded values:
```
#!/usr/bin/env bash
echo '{"Username":"<token>","Secret":"hunter2"}'
```


This implements a credential helper that prints the output of
`docker-credential-gcr` to both stderr and whatever called it, which allows you
to snoop on another credential helper:
```
#!/usr/bin/env bash
docker-credential-gcr $@ | tee >(cat 1>&2)
```

Put those files somewhere on your path, naming them e.g.
`docker-credential-hardcoded` and `docker-credential-tee`, then modify the
config file to use them:

```json
{
	"credHelpers": {
		"gcr.io": "tee",
		"eu.gcr.io": "hardcoded"
	}
}
```

The `docker-credential-tee` trick works with both `crane` and `docker`:

```bash
$ crane manifest gcr.io/google-containers/pause > /dev/null
{"ServerURL":"","Username":"_dcgcr_1_5_0_token","Secret":"<redacted>"}

$ docker pull gcr.io/google-containers/pause
Using default tag: latest
{"ServerURL":"","Username":"_dcgcr_1_5_0_token","Secret":"<redacted>"}
latest: Pulling from google-containers/pause
a3ed95caeb02: Pull complete
4964c72cd024: Pull complete
Digest: sha256:a78c2d6208eff9b672de43f880093100050983047b7b0afe0217d3656e1b0d5f
Status: Downloaded newer image for gcr.io/google-containers/pause:latest
gcr.io/google-containers/pause:latest
```

## The Registry

There are two methods for authenticating against a registry:
[token](https://docs.docker.com/registry/spec/auth/token/) and
[oauth2](https://docs.docker.com/registry/spec/auth/oauth/).

Both methods are used to acquire an opaque `Bearer` token (or
[RegistryToken](https://github.com/docker/cli/blob/ba63a92655c0bea4857b8d6cc4991498858b3c60/cli/config/types/authconfig.go#L21))
to use in the `Authorization` header. The registry will return a `401
Unauthorized` during the [version
check](https://github.com/opencontainers/distribution-spec/blob/2c3975d1f03b67c9a0203199038adea0413f0573/spec.md#api-version-check)
(or during normal operations) with
[Www-Authenticate](https://tools.ietf.org/html/rfc7235#section-4.1) challenge
indicating how to proceed.

### Token

If we get back an `AuthConfig` containing a [`Username/Password`](https://github.com/docker/cli/blob/ba63a92655c0bea4857b8d6cc4991498858b3c60/cli/config/types/authconfig.go#L5-L6)
or
[`Auth`](https://github.com/docker/cli/blob/ba63a92655c0bea4857b8d6cc4991498858b3c60/cli/config/types/authconfig.go#L7),
we'll use the token method for authentication:

![basic](../../images/credhelper-basic.svg)

### OAuth 2

If we get back an `AuthConfig` containing an [`IdentityToken`](https://github.com/docker/cli/blob/ba63a92655c0bea4857b8d6cc4991498858b3c60/cli/config/types/authconfig.go#L18)
we'll use the oauth2 method for authentication:

![oauth](../../images/credhelper-oauth.svg)

This happens when a credential helper returns a response with the
[`Username`](https://github.com/docker/docker-credential-helpers/blob/f78081d1f7fef6ad74ad6b79368de6348386e591/credentials/credentials.go#L16)
set to `<token>` (no, that's not a placeholder, the literal string `"<token>"`).
It is unclear why: [moby/moby#36926](https://github.com/moby/moby/issues/36926).

We only support the oauth2 `grant_type` for `refresh_token` ([#629](https://github.com/google/go-containerregistry/issues/629)),
since it's impossible to determine from the registry response whether we should
use oauth, and the token method for authentication is widely implemented by
registries.
   070701000006A4000081A4000000000000000000000001645E367C000003C3000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/authn/anon.go   // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package authn

// anonymous implements Authenticator for anonymous authentication.
type anonymous struct{}

// Authorization implements Authenticator.
func (a *anonymous) Authorization() (*AuthConfig, error) {
	return &AuthConfig{}, nil
}

// Anonymous is a singleton Authenticator for providing anonymous auth.
var Anonymous Authenticator = &anonymous{}
 070701000006A5000081A4000000000000000000000001645E367C000003EF000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/authn/auth.go   // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package authn

// auth is an Authenticator that simply returns the wrapped AuthConfig.
type auth struct {
	config AuthConfig
}

// FromConfig returns an Authenticator that just returns the given AuthConfig.
func FromConfig(cfg AuthConfig) Authenticator {
	return &auth{cfg}
}

// Authorization implements Authenticator.
func (a *auth) Authorization() (*AuthConfig, error) {
	return &a.config, nil
}
 070701000006A6000081A4000000000000000000000001645E367C00000E4F000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/authn/authn.go  // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package authn

import (
	"encoding/base64"
	"encoding/json"
	"fmt"
	"strings"
)

// Authenticator is used to authenticate Docker transports.
type Authenticator interface {
	// Authorization returns the value to use in an http transport's Authorization header.
	Authorization() (*AuthConfig, error)
}

// AuthConfig contains authorization information for connecting to a Registry
// Inlined what we use from github.com/docker/cli/cli/config/types
type AuthConfig struct {
	Username string `json:"username,omitempty"`
	Password string `json:"password,omitempty"`
	Auth     string `json:"auth,omitempty"`

	// IdentityToken is used to authenticate the user and get
	// an access token for the registry.
	IdentityToken string `json:"identitytoken,omitempty"`

	// RegistryToken is a bearer token to be sent to a registry
	RegistryToken string `json:"registrytoken,omitempty"`
}

// This is effectively a copy of the type AuthConfig. This simplifies
// JSON unmarshalling since AuthConfig methods are not inherited
type authConfig AuthConfig

// UnmarshalJSON implements json.Unmarshaler
func (a *AuthConfig) UnmarshalJSON(data []byte) error {
	var shadow authConfig
	err := json.Unmarshal(data, &shadow)
	if err != nil {
		return err
	}

	*a = (AuthConfig)(shadow)

	if len(shadow.Auth) != 0 {
		var derr error
		a.Username, a.Password, derr = decodeDockerConfigFieldAuth(shadow.Auth)
		if derr != nil {
			err = fmt.Errorf("unable to decode auth field: %w", derr)
		}
	} else if len(a.Username) != 0 && len(a.Password) != 0 {
		a.Auth = encodeDockerConfigFieldAuth(shadow.Username, shadow.Password)
	}

	return err
}

// MarshalJSON implements json.Marshaler
func (a AuthConfig) MarshalJSON() ([]byte, error) {
	shadow := (authConfig)(a)
	shadow.Auth = encodeDockerConfigFieldAuth(shadow.Username, shadow.Password)
	return json.Marshal(shadow)
}

// decodeDockerConfigFieldAuth deserializes the "auth" field from dockercfg into a
// username and a password. The format of the auth field is base64(<username>:<password>).
//
// From https://github.com/kubernetes/kubernetes/blob/75e49ec824b183288e1dbaccfd7dbe77d89db381/pkg/credentialprovider/config.go
// Copyright 2014 The Kubernetes Authors.
// SPDX-License-Identifier: Apache-2.0
func decodeDockerConfigFieldAuth(field string) (username, password string, err error) {
	var decoded []byte
	// StdEncoding can only decode padded string
	// RawStdEncoding can only decode unpadded string
	if strings.HasSuffix(strings.TrimSpace(field), "=") {
		// decode padded data
		decoded, err = base64.StdEncoding.DecodeString(field)
	} else {
		// decode unpadded data
		decoded, err = base64.RawStdEncoding.DecodeString(field)
	}

	if err != nil {
		return
	}

	parts := strings.SplitN(string(decoded), ":", 2)
	if len(parts) != 2 {
		err = fmt.Errorf("must be formatted as base64(username:password)")
		return
	}

	username = parts[0]
	password = parts[1]

	return
}

func encodeDockerConfigFieldAuth(username, password string) string {
	return base64.StdEncoding.EncodeToString([]byte(username + ":" + password))
}
 070701000006A7000081A4000000000000000000000001645E367C00000395000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/authn/basic.go  // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package authn

// Basic implements Authenticator for basic authentication.
type Basic struct {
	Username string
	Password string
}

// Authorization implements Authenticator.
func (b *Basic) Authorization() (*AuthConfig, error) {
	return &AuthConfig{
		Username: b.Username,
		Password: b.Password,
	}, nil
}
   070701000006A8000081A4000000000000000000000001645E367C0000037E000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/authn/bearer.go // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package authn

// Bearer implements Authenticator for bearer authentication.
type Bearer struct {
	Token string `json:"token"`
}

// Authorization implements Authenticator.
func (b *Bearer) Authorization() (*AuthConfig, error) {
	return &AuthConfig{
		RegistryToken: b.Token,
	}, nil
}
  070701000006A9000081A4000000000000000000000001645E367C000002D3000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/authn/doc.go    // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package authn defines different methods of authentication for
// talking to a container registry.
package authn
 070701000006AA000081A4000000000000000000000001645E367C0000168A000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/authn/keychain.go   // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package authn

import (
	"os"
	"path/filepath"
	"sync"

	"github.com/docker/cli/cli/config"
	"github.com/docker/cli/cli/config/configfile"
	"github.com/docker/cli/cli/config/types"
	"github.com/google/go-containerregistry/pkg/name"
	"github.com/mitchellh/go-homedir"
)

// Resource represents a registry or repository that can be authenticated against.
type Resource interface {
	// String returns the full string representation of the target, e.g.
	// gcr.io/my-project or just gcr.io.
	String() string

	// RegistryStr returns just the registry portion of the target, e.g. for
	// gcr.io/my-project, this should just return gcr.io. This is needed to
	// pull out an appropriate hostname.
	RegistryStr() string
}

// Keychain is an interface for resolving an image reference to a credential.
type Keychain interface {
	// Resolve looks up the most appropriate credential for the specified target.
	Resolve(Resource) (Authenticator, error)
}

// defaultKeychain implements Keychain with the semantics of the standard Docker
// credential keychain.
type defaultKeychain struct {
	mu sync.Mutex
}

var (
	// DefaultKeychain implements Keychain by interpreting the docker config file.
	DefaultKeychain Keychain = &defaultKeychain{}
)

const (
	// DefaultAuthKey is the key used for dockerhub in config files, which
	// is hardcoded for historical reasons.
	DefaultAuthKey = "https://" + name.DefaultRegistry + "/v1/"
)

// Resolve implements Keychain.
func (dk *defaultKeychain) Resolve(target Resource) (Authenticator, error) {
	dk.mu.Lock()
	defer dk.mu.Unlock()

	// Podman users may have their container registry auth configured in a
	// different location, that Docker packages aren't aware of.
	// If the Docker config file isn't found, we'll fallback to look where
	// Podman configures it, and parse that as a Docker auth config instead.

	// First, check $HOME/.docker/config.json
	foundDockerConfig := false
	home, err := homedir.Dir()
	if err == nil {
		foundDockerConfig = fileExists(filepath.Join(home, ".docker/config.json"))
	}
	// If $HOME/.docker/config.json isn't found, check $DOCKER_CONFIG (if set)
	if !foundDockerConfig && os.Getenv("DOCKER_CONFIG") != "" {
		foundDockerConfig = fileExists(filepath.Join(os.Getenv("DOCKER_CONFIG"), "config.json"))
	}
	// If either of those locations are found, load it using Docker's
	// config.Load, which may fail if the config can't be parsed.
	//
	// If neither was found, look for Podman's auth at
	// $XDG_RUNTIME_DIR/containers/auth.json and attempt to load it as a
	// Docker config.
	//
	// If neither are found, fallback to Anonymous.
	var cf *configfile.ConfigFile
	if foundDockerConfig {
		cf, err = config.Load(os.Getenv("DOCKER_CONFIG"))
		if err != nil {
			return nil, err
		}
	} else {
		f, err := os.Open(filepath.Join(os.Getenv("XDG_RUNTIME_DIR"), "containers/auth.json"))
		if err != nil {
			return Anonymous, nil
		}
		defer f.Close()
		cf, err = config.LoadFromReader(f)
		if err != nil {
			return nil, err
		}
	}

	// See:
	// https://github.com/google/ko/issues/90
	// https://github.com/moby/moby/blob/fc01c2b481097a6057bec3cd1ab2d7b4488c50c4/registry/config.go#L397-L404
	var cfg, empty types.AuthConfig
	for _, key := range []string{
		target.String(),
		target.RegistryStr(),
	} {
		if key == name.DefaultRegistry {
			key = DefaultAuthKey
		}

		cfg, err = cf.GetAuthConfig(key)
		if err != nil {
			return nil, err
		}
		// cf.GetAuthConfig automatically sets the ServerAddress attribute. Since
		// we don't make use of it, clear the value for a proper "is-empty" test.
		// See: https://github.com/google/go-containerregistry/issues/1510
		cfg.ServerAddress = ""
		if cfg != empty {
			break
		}
	}
	if cfg == empty {
		return Anonymous, nil
	}

	return FromConfig(AuthConfig{
		Username:      cfg.Username,
		Password:      cfg.Password,
		Auth:          cfg.Auth,
		IdentityToken: cfg.IdentityToken,
		RegistryToken: cfg.RegistryToken,
	}), nil
}

// fileExists returns true if the given path exists and is not a directory.
func fileExists(path string) bool {
	fi, err := os.Stat(path)
	return err == nil && !fi.IsDir()
}

// Helper is a subset of the Docker credential helper credentials.Helper
// interface used by NewKeychainFromHelper.
//
// See:
// https://pkg.go.dev/github.com/docker/docker-credential-helpers/credentials#Helper
type Helper interface {
	Get(serverURL string) (string, string, error)
}

// NewKeychainFromHelper returns a Keychain based on a Docker credential helper
// implementation that can Get username and password credentials for a given
// server URL.
func NewKeychainFromHelper(h Helper) Keychain { return wrapper{h} }

type wrapper struct{ h Helper }

func (w wrapper) Resolve(r Resource) (Authenticator, error) {
	u, p, err := w.h.Get(r.RegistryStr())
	if err != nil {
		return Anonymous, nil
	}
	// If the secret being stored is an identity token, the Username should be set to <token>
	// ref: https://docs.docker.com/engine/reference/commandline/login/#credential-helper-protocol
	if u == "<token>" {
		return FromConfig(AuthConfig{Username: u, IdentityToken: p}), nil
	}
	return FromConfig(AuthConfig{Username: u, Password: p}), nil
}
  070701000006AB000081A4000000000000000000000001645E367C000004CF000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/authn/multikeychain.go  // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package authn

type multiKeychain struct {
	keychains []Keychain
}

// Assert that our multi-keychain implements Keychain.
var _ (Keychain) = (*multiKeychain)(nil)

// NewMultiKeychain composes a list of keychains into one new keychain.
func NewMultiKeychain(kcs ...Keychain) Keychain {
	return &multiKeychain{keychains: kcs}
}

// Resolve implements Keychain.
func (mk *multiKeychain) Resolve(target Resource) (Authenticator, error) {
	for _, kc := range mk.keychains {
		auth, err := kc.Resolve(target)
		if err != nil {
			return nil, err
		}
		if auth != Anonymous {
			return auth, nil
		}
	}
	return Anonymous, nil
}
 070701000006AC000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/compression 070701000006AD000081A4000000000000000000000001645E367C00000394000000000000000000000000000000000000006100000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/compression/compression.go  // Copyright 2022 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package compression abstracts over gzip and zstd.
package compression

// Compression is an enumeration of the supported compression algorithms
type Compression string

// The collection of known MediaType values.
const (
	None Compression = "none"
	GZip Compression = "gzip"
	ZStd Compression = "zstd"
)
070701000006AE000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/logs    070701000006AF000081A4000000000000000000000001645E367C00000502000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/logs/logs.go    // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package logs exposes the loggers used by this library.
package logs

import (
	"io"
	"log"
)

var (
	// Warn is used to log non-fatal errors.
	Warn = log.New(io.Discard, "", log.LstdFlags)

	// Progress is used to log notable, successful events.
	Progress = log.New(io.Discard, "", log.LstdFlags)

	// Debug is used to log information that is useful for debugging.
	Debug = log.New(io.Discard, "", log.LstdFlags)
)

// Enabled checks to see if the logger's writer is set to something other
// than io.Discard. This allows callers to avoid expensive operations
// that will end up in /dev/null anyway.
func Enabled(l *log.Logger) bool {
	return l.Writer() != io.Discard
}
  070701000006B0000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/name    070701000006B1000081A4000000000000000000000001645E367C000000A6000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/name/README.md  # `name`

[![GoDoc](https://godoc.org/github.com/google/go-containerregistry/pkg/name?status.svg)](https://godoc.org/github.com/google/go-containerregistry/pkg/name)
  070701000006B2000081A4000000000000000000000001645E367C0000065D000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/name/check.go   // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package name

import (
	"strings"
	"unicode/utf8"
)

// stripRunesFn returns a function which returns -1 (i.e. a value which
// signals deletion in strings.Map) for runes in 'runes', and the rune otherwise.
func stripRunesFn(runes string) func(rune) rune {
	return func(r rune) rune {
		if strings.ContainsRune(runes, r) {
			return -1
		}
		return r
	}
}

// checkElement checks a given named element matches character and length restrictions.
// Returns true if the given element adheres to the given restrictions, false otherwise.
func checkElement(name, element, allowedRunes string, minRunes, maxRunes int) error {
	numRunes := utf8.RuneCountInString(element)
	if (numRunes < minRunes) || (maxRunes < numRunes) {
		return newErrBadName("%s must be between %d and %d characters in length: %s", name, minRunes, maxRunes, element)
	} else if len(strings.Map(stripRunesFn(allowedRunes), element)) != 0 {
		return newErrBadName("%s can only contain the characters `%s`: %s", name, allowedRunes, element)
	}
	return nil
}
   070701000006B3000081A4000000000000000000000001645E367C00000995000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/name/digest.go  // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package name

import (
	// nolint: depguard
	_ "crypto/sha256" // Recommended by go-digest.
	"strings"

	"github.com/opencontainers/go-digest"
)

const digestDelim = "@"

// Digest stores a digest name in a structured form.
type Digest struct {
	Repository
	digest   string
	original string
}

// Ensure Digest implements Reference
var _ Reference = (*Digest)(nil)

// Context implements Reference.
func (d Digest) Context() Repository {
	return d.Repository
}

// Identifier implements Reference.
func (d Digest) Identifier() string {
	return d.DigestStr()
}

// DigestStr returns the digest component of the Digest.
func (d Digest) DigestStr() string {
	return d.digest
}

// Name returns the name from which the Digest was derived.
func (d Digest) Name() string {
	return d.Repository.Name() + digestDelim + d.DigestStr()
}

// String returns the original input string.
func (d Digest) String() string {
	return d.original
}

// NewDigest returns a new Digest representing the given name.
func NewDigest(name string, opts ...Option) (Digest, error) {
	// Split on "@"
	parts := strings.Split(name, digestDelim)
	if len(parts) != 2 {
		return Digest{}, newErrBadName("a digest must contain exactly one '@' separator (e.g. registry/repository@digest) saw: %s", name)
	}
	base := parts[0]
	dig := parts[1]
	prefix := digest.Canonical.String() + ":"
	if !strings.HasPrefix(dig, prefix) {
		return Digest{}, newErrBadName("unsupported digest algorithm: %s", dig)
	}
	hex := strings.TrimPrefix(dig, prefix)
	if err := digest.Canonical.Validate(hex); err != nil {
		return Digest{}, err
	}

	tag, err := NewTag(base, opts...)
	if err == nil {
		base = tag.Repository.Name()
	}

	repo, err := NewRepository(base, opts...)
	if err != nil {
		return Digest{}, err
	}
	return Digest{
		Repository: repo,
		digest:     dig,
		original:   name,
	}, nil
}
   070701000006B4000081A4000000000000000000000001645E367C00000835000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/name/doc.go // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package name defines structured types for representing image references.
//
// What's in a name? For image references, not nearly enough!
//
// Image references look a lot like URLs, but they differ in that they don't
// contain the scheme (http or https), they can end with a :tag or a @digest
// (the latter being validated), and they perform defaulting for missing
// components.
//
// Since image references don't contain the scheme, we do our best to infer
// if we use http or https from the given hostname. We allow http fallback for
// any host that looks like localhost (localhost, 127.0.0.1, ::1), ends in
// ".local", or is in the "private" address space per RFC 1918. For everything
// else, we assume https only. To override this heuristic, use the Insecure
// option.
//
// Image references with a digest signal to us that we should verify the content
// of the image matches the digest. E.g. when pulling a Digest reference, we'll
// calculate the sha256 of the manifest returned by the registry and error out
// if it doesn't match what we asked for.
//
// For defaulting, we interpret "ubuntu" as
// "index.docker.io/library/ubuntu:latest" because we add the missing repo
// "library", the missing registry "index.docker.io", and the missing tag
// "latest". To disable this defaulting, use the StrictValidation option. This
// is useful e.g. to only allow image references that explicitly set a tag or
// digest, so that you don't accidentally pull "latest".
package name
   070701000006B5000081A4000000000000000000000001645E367C0000055D000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/name/errors.go  // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package name

import (
	"errors"
	"fmt"
)

// ErrBadName is an error for when a bad docker name is supplied.
type ErrBadName struct {
	info string
}

func (e *ErrBadName) Error() string {
	return e.info
}

// Is reports whether target is an error of type ErrBadName
func (e *ErrBadName) Is(target error) bool {
	var berr *ErrBadName
	return errors.As(target, &berr)
}

// newErrBadName returns a ErrBadName which returns the given formatted string from Error().
func newErrBadName(fmtStr string, args ...any) *ErrBadName {
	return &ErrBadName{fmt.Sprintf(fmtStr, args...)}
}

// IsErrBadName returns true if the given error is an ErrBadName.
//
// Deprecated: Use errors.Is.
func IsErrBadName(err error) bool {
	var berr *ErrBadName
	return errors.As(err, &berr)
}
   070701000006B6000081A4000000000000000000000001645E367C0000093F000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/name/options.go // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package name

const (
	// DefaultRegistry is the registry name that will be used if no registry
	// provided and the default is not overridden.
	DefaultRegistry      = "index.docker.io"
	defaultRegistryAlias = "docker.io"

	// DefaultTag is the tag name that will be used if no tag provided and the
	// default is not overridden.
	DefaultTag = "latest"
)

type options struct {
	strict          bool // weak by default
	insecure        bool // secure by default
	defaultRegistry string
	defaultTag      string
}

func makeOptions(opts ...Option) options {
	opt := options{
		defaultRegistry: DefaultRegistry,
		defaultTag:      DefaultTag,
	}
	for _, o := range opts {
		o(&opt)
	}
	return opt
}

// Option is a functional option for name parsing.
type Option func(*options)

// StrictValidation is an Option that requires image references to be fully
// specified; i.e. no defaulting for registry (dockerhub), repo (library),
// or tag (latest).
func StrictValidation(opts *options) {
	opts.strict = true
}

// WeakValidation is an Option that sets defaults when parsing names, see
// StrictValidation.
func WeakValidation(opts *options) {
	opts.strict = false
}

// Insecure is an Option that allows image references to be fetched without TLS.
func Insecure(opts *options) {
	opts.insecure = true
}

// OptionFn is a function that returns an option.
type OptionFn func() Option

// WithDefaultRegistry sets the default registry that will be used if one is not
// provided.
func WithDefaultRegistry(r string) Option {
	return func(opts *options) {
		opts.defaultRegistry = r
	}
}

// WithDefaultTag sets the default tag that will be used if one is not provided.
func WithDefaultTag(t string) Option {
	return func(opts *options) {
		opts.defaultTag = t
	}
}
 070701000006B7000081A4000000000000000000000001645E367C000008DE000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/name/ref.go // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package name

import (
	"fmt"
)

// Reference defines the interface that consumers use when they can
// take either a tag or a digest.
type Reference interface {
	fmt.Stringer

	// Context accesses the Repository context of the reference.
	Context() Repository

	// Identifier accesses the type-specific portion of the reference.
	Identifier() string

	// Name is the fully-qualified reference name.
	Name() string

	// Scope is the scope needed to access this reference.
	Scope(string) string
}

// ParseReference parses the string as a reference, either by tag or digest.
func ParseReference(s string, opts ...Option) (Reference, error) {
	if t, err := NewTag(s, opts...); err == nil {
		return t, nil
	}
	if d, err := NewDigest(s, opts...); err == nil {
		return d, nil
	}
	return nil, newErrBadName("could not parse reference: " + s)
}

type stringConst string

// MustParseReference behaves like ParseReference, but panics instead of
// returning an error. It's intended for use in tests, or when a value is
// expected to be valid at code authoring time.
//
// To discourage its use in scenarios where the value is not known at code
// authoring time, it must be passed a string constant:
//
//	const str = "valid/string"
//	MustParseReference(str)
//	MustParseReference("another/valid/string")
//	MustParseReference(str + "/and/more")
//
// These will not compile:
//
//	var str = "valid/string"
//	MustParseReference(str)
//	MustParseReference(strings.Join([]string{"valid", "string"}, "/"))
func MustParseReference(s stringConst, opts ...Option) Reference {
	ref, err := ParseReference(string(s), opts...)
	if err != nil {
		panic(err)
	}
	return ref
}
  070701000006B8000081A4000000000000000000000001645E367C00000ED8000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/name/registry.go    // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package name

import (
	"net"
	"net/url"
	"regexp"
	"strings"
)

// Detect more complex forms of local references.
var reLocal = regexp.MustCompile(`.*\.local(?:host)?(?::\d{1,5})?$`)

// Detect the loopback IP (127.0.0.1)
var reLoopback = regexp.MustCompile(regexp.QuoteMeta("127.0.0.1"))

// Detect the loopback IPV6 (::1)
var reipv6Loopback = regexp.MustCompile(regexp.QuoteMeta("::1"))

// Registry stores a docker registry name in a structured form.
type Registry struct {
	insecure bool
	registry string
}

// RegistryStr returns the registry component of the Registry.
func (r Registry) RegistryStr() string {
	return r.registry
}

// Name returns the name from which the Registry was derived.
func (r Registry) Name() string {
	return r.RegistryStr()
}

func (r Registry) String() string {
	return r.Name()
}

// Scope returns the scope required to access the registry.
func (r Registry) Scope(string) string {
	// The only resource under 'registry' is 'catalog'. http://goo.gl/N9cN9Z
	return "registry:catalog:*"
}

func (r Registry) isRFC1918() bool {
	ipStr := strings.Split(r.Name(), ":")[0]
	ip := net.ParseIP(ipStr)
	if ip == nil {
		return false
	}
	for _, cidr := range []string{"10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"} {
		_, block, _ := net.ParseCIDR(cidr)
		if block.Contains(ip) {
			return true
		}
	}
	return false
}

// Scheme returns https scheme for all the endpoints except localhost or when explicitly defined.
func (r Registry) Scheme() string {
	if r.insecure {
		return "http"
	}
	if r.isRFC1918() {
		return "http"
	}
	if strings.HasPrefix(r.Name(), "localhost:") {
		return "http"
	}
	if reLocal.MatchString(r.Name()) {
		return "http"
	}
	if reLoopback.MatchString(r.Name()) {
		return "http"
	}
	if reipv6Loopback.MatchString(r.Name()) {
		return "http"
	}
	return "https"
}

func checkRegistry(name string) error {
	// Per RFC 3986, registries (authorities) are required to be prefixed with "//"
	// url.Host == hostname[:port] == authority
	if url, err := url.Parse("//" + name); err != nil || url.Host != name {
		return newErrBadName("registries must be valid RFC 3986 URI authorities: %s", name)
	}
	return nil
}

// NewRegistry returns a Registry based on the given name.
// Strict validation requires explicit, valid RFC 3986 URI authorities to be given.
func NewRegistry(name string, opts ...Option) (Registry, error) {
	opt := makeOptions(opts...)
	if opt.strict && len(name) == 0 {
		return Registry{}, newErrBadName("strict validation requires the registry to be explicitly defined")
	}

	if err := checkRegistry(name); err != nil {
		return Registry{}, err
	}

	if name == "" {
		name = opt.defaultRegistry
	}
	// Rewrite "docker.io" to "index.docker.io".
	// See: https://github.com/google/go-containerregistry/issues/68
	if name == defaultRegistryAlias {
		name = DefaultRegistry
	}

	return Registry{registry: name, insecure: opt.insecure}, nil
}

// NewInsecureRegistry returns an Insecure Registry based on the given name.
//
// Deprecated: Use the Insecure Option with NewRegistry instead.
func NewInsecureRegistry(name string, opts ...Option) (Registry, error) {
	opts = append(opts, Insecure)
	return NewRegistry(name, opts...)
}
070701000006B9000081A4000000000000000000000001645E367C00000E05000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/name/repository.go  // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package name

import (
	"fmt"
	"strings"
)

const (
	defaultNamespace = "library"
	repositoryChars  = "abcdefghijklmnopqrstuvwxyz0123456789_-./"
	regRepoDelimiter = "/"
)

// Repository stores a docker repository name in a structured form.
type Repository struct {
	Registry
	repository string
}

// See https://docs.docker.com/docker-hub/official_repos
func hasImplicitNamespace(repo string, reg Registry) bool {
	return !strings.ContainsRune(repo, '/') && reg.RegistryStr() == DefaultRegistry
}

// RepositoryStr returns the repository component of the Repository.
func (r Repository) RepositoryStr() string {
	if hasImplicitNamespace(r.repository, r.Registry) {
		return fmt.Sprintf("%s/%s", defaultNamespace, r.repository)
	}
	return r.repository
}

// Name returns the name from which the Repository was derived.
func (r Repository) Name() string {
	regName := r.Registry.Name()
	if regName != "" {
		return regName + regRepoDelimiter + r.RepositoryStr()
	}
	// TODO: As far as I can tell, this is unreachable.
	return r.RepositoryStr()
}

func (r Repository) String() string {
	return r.Name()
}

// Scope returns the scope required to perform the given action on the registry.
// TODO(jonjohnsonjr): consider moving scopes to a separate package.
func (r Repository) Scope(action string) string {
	return fmt.Sprintf("repository:%s:%s", r.RepositoryStr(), action)
}

func checkRepository(repository string) error {
	return checkElement("repository", repository, repositoryChars, 2, 255)
}

// NewRepository returns a new Repository representing the given name, according to the given strictness.
func NewRepository(name string, opts ...Option) (Repository, error) {
	opt := makeOptions(opts...)
	if len(name) == 0 {
		return Repository{}, newErrBadName("a repository name must be specified")
	}

	var registry string
	repo := name
	parts := strings.SplitN(name, regRepoDelimiter, 2)
	if len(parts) == 2 && (strings.ContainsRune(parts[0], '.') || strings.ContainsRune(parts[0], ':')) {
		// The first part of the repository is treated as the registry domain
		// iff it contains a '.' or ':' character, otherwise it is all repository
		// and the domain defaults to Docker Hub.
		registry = parts[0]
		repo = parts[1]
	}

	if err := checkRepository(repo); err != nil {
		return Repository{}, err
	}

	reg, err := NewRegistry(registry, opts...)
	if err != nil {
		return Repository{}, err
	}
	if hasImplicitNamespace(repo, reg) && opt.strict {
		return Repository{}, newErrBadName("strict validation requires the full repository path (missing 'library')")
	}
	return Repository{reg, repo}, nil
}

// Tag returns a Tag in this Repository.
func (r Repository) Tag(identifier string) Tag {
	t := Tag{
		tag:        identifier,
		Repository: r,
	}
	t.original = t.Name()
	return t
}

// Digest returns a Digest in this Repository.
func (r Repository) Digest(identifier string) Digest {
	d := Digest{
		digest:     identifier,
		Repository: r,
	}
	d.original = d.Name()
	return d
}
   070701000006BA000081A4000000000000000000000001645E367C00000AF5000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/name/tag.go // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package name

import (
	"strings"
)

const (
	// TODO(dekkagaijin): use the docker/distribution regexes for validation.
	tagChars = "abcdefghijklmnopqrstuvwxyz0123456789_-.ABCDEFGHIJKLMNOPQRSTUVWXYZ"
	tagDelim = ":"
)

// Tag stores a docker tag name in a structured form.
type Tag struct {
	Repository
	tag      string
	original string
}

// Ensure Tag implements Reference
var _ Reference = (*Tag)(nil)

// Context implements Reference.
func (t Tag) Context() Repository {
	return t.Repository
}

// Identifier implements Reference.
func (t Tag) Identifier() string {
	return t.TagStr()
}

// TagStr returns the tag component of the Tag.
func (t Tag) TagStr() string {
	return t.tag
}

// Name returns the name from which the Tag was derived.
func (t Tag) Name() string {
	return t.Repository.Name() + tagDelim + t.TagStr()
}

// String returns the original input string.
func (t Tag) String() string {
	return t.original
}

// Scope returns the scope required to perform the given action on the tag.
func (t Tag) Scope(action string) string {
	return t.Repository.Scope(action)
}

func checkTag(name string) error {
	return checkElement("tag", name, tagChars, 1, 128)
}

// NewTag returns a new Tag representing the given name, according to the given strictness.
func NewTag(name string, opts ...Option) (Tag, error) {
	opt := makeOptions(opts...)
	base := name
	tag := ""

	// Split on ":"
	parts := strings.Split(name, tagDelim)
	// Verify that we aren't confusing a tag for a hostname w/ port for the purposes of weak validation.
	if len(parts) > 1 && !strings.Contains(parts[len(parts)-1], regRepoDelimiter) {
		base = strings.Join(parts[:len(parts)-1], tagDelim)
		tag = parts[len(parts)-1]
	}

	// We don't require a tag, but if we get one check it's valid,
	// even when not being strict.
	// If we are being strict, we want to validate the tag regardless in case
	// it's empty.
	if tag != "" || opt.strict {
		if err := checkTag(tag); err != nil {
			return Tag{}, err
		}
	}

	if tag == "" {
		tag = opt.defaultTag
	}

	repo, err := NewRepository(base, opts...)
	if err != nil {
		return Tag{}, err
	}
	return Tag{
		Repository: repo,
		tag:        tag,
		original:   name,
	}, nil
}
   070701000006BB000041ED00000000000000000000000B645E367C00000000000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1  070701000006BC000081A4000000000000000000000001645E367C0000181C000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/config.go    // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package v1

import (
	"encoding/json"
	"io"
	"time"
)

// ConfigFile is the configuration file that holds the metadata describing
// how to launch a container. See:
// https://github.com/opencontainers/image-spec/blob/master/config.md
//
// docker_version and os.version are not part of the spec but included
// for backwards compatibility.
type ConfigFile struct {
	Architecture  string    `json:"architecture"`
	Author        string    `json:"author,omitempty"`
	Container     string    `json:"container,omitempty"`
	Created       Time      `json:"created,omitempty"`
	DockerVersion string    `json:"docker_version,omitempty"`
	History       []History `json:"history,omitempty"`
	OS            string    `json:"os"`
	RootFS        RootFS    `json:"rootfs"`
	Config        Config    `json:"config"`
	OSVersion     string    `json:"os.version,omitempty"`
	Variant       string    `json:"variant,omitempty"`
	OSFeatures    []string  `json:"os.features,omitempty"`
}

// Platform attempts to generates a Platform from the ConfigFile fields.
func (cf *ConfigFile) Platform() *Platform {
	if cf.OS == "" && cf.Architecture == "" && cf.OSVersion == "" && cf.Variant == "" && len(cf.OSFeatures) == 0 {
		return nil
	}
	return &Platform{
		OS:           cf.OS,
		Architecture: cf.Architecture,
		OSVersion:    cf.OSVersion,
		Variant:      cf.Variant,
		OSFeatures:   cf.OSFeatures,
	}
}

// History is one entry of a list recording how this container image was built.
type History struct {
	Author     string `json:"author,omitempty"`
	Created    Time   `json:"created,omitempty"`
	CreatedBy  string `json:"created_by,omitempty"`
	Comment    string `json:"comment,omitempty"`
	EmptyLayer bool   `json:"empty_layer,omitempty"`
}

// Time is a wrapper around time.Time to help with deep copying
type Time struct {
	time.Time
}

// DeepCopyInto creates a deep-copy of the Time value.  The underlying time.Time
// type is effectively immutable in the time API, so it is safe to
// copy-by-assign, despite the presence of (unexported) Pointer fields.
func (t *Time) DeepCopyInto(out *Time) {
	*out = *t
}

// RootFS holds the ordered list of file system deltas that comprise the
// container image's root filesystem.
type RootFS struct {
	Type    string `json:"type"`
	DiffIDs []Hash `json:"diff_ids"`
}

// HealthConfig holds configuration settings for the HEALTHCHECK feature.
type HealthConfig struct {
	// Test is the test to perform to check that the container is healthy.
	// An empty slice means to inherit the default.
	// The options are:
	// {} : inherit healthcheck
	// {"NONE"} : disable healthcheck
	// {"CMD", args...} : exec arguments directly
	// {"CMD-SHELL", command} : run command with system's default shell
	Test []string `json:",omitempty"`

	// Zero means to inherit. Durations are expressed as integer nanoseconds.
	Interval    time.Duration `json:",omitempty"` // Interval is the time to wait between checks.
	Timeout     time.Duration `json:",omitempty"` // Timeout is the time to wait before considering the check to have hung.
	StartPeriod time.Duration `json:",omitempty"` // The start period for the container to initialize before the retries starts to count down.

	// Retries is the number of consecutive failures needed to consider a container as unhealthy.
	// Zero means inherit.
	Retries int `json:",omitempty"`
}

// Config is a submessage of the config file described as:
//
//	The execution parameters which SHOULD be used as a base when running
//	a container using the image.
//
// The names of the fields in this message are chosen to reflect the JSON
// payload of the Config as defined here:
// https://git.io/vrAET
// and
// https://github.com/opencontainers/image-spec/blob/master/config.md
type Config struct {
	AttachStderr    bool                `json:"AttachStderr,omitempty"`
	AttachStdin     bool                `json:"AttachStdin,omitempty"`
	AttachStdout    bool                `json:"AttachStdout,omitempty"`
	Cmd             []string            `json:"Cmd,omitempty"`
	Healthcheck     *HealthConfig       `json:"Healthcheck,omitempty"`
	Domainname      string              `json:"Domainname,omitempty"`
	Entrypoint      []string            `json:"Entrypoint,omitempty"`
	Env             []string            `json:"Env,omitempty"`
	Hostname        string              `json:"Hostname,omitempty"`
	Image           string              `json:"Image,omitempty"`
	Labels          map[string]string   `json:"Labels,omitempty"`
	OnBuild         []string            `json:"OnBuild,omitempty"`
	OpenStdin       bool                `json:"OpenStdin,omitempty"`
	StdinOnce       bool                `json:"StdinOnce,omitempty"`
	Tty             bool                `json:"Tty,omitempty"`
	User            string              `json:"User,omitempty"`
	Volumes         map[string]struct{} `json:"Volumes,omitempty"`
	WorkingDir      string              `json:"WorkingDir,omitempty"`
	ExposedPorts    map[string]struct{} `json:"ExposedPorts,omitempty"`
	ArgsEscaped     bool                `json:"ArgsEscaped,omitempty"`
	NetworkDisabled bool                `json:"NetworkDisabled,omitempty"`
	MacAddress      string              `json:"MacAddress,omitempty"`
	StopSignal      string              `json:"StopSignal,omitempty"`
	Shell           []string            `json:"Shell,omitempty"`
}

// ParseConfigFile parses the io.Reader's contents into a ConfigFile.
func ParseConfigFile(r io.Reader) (*ConfigFile, error) {
	cf := ConfigFile{}
	if err := json.NewDecoder(r).Decode(&cf); err != nil {
		return nil, err
	}
	return &cf, nil
}
070701000006BD000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/daemon   070701000006BE000081A4000000000000000000000001645E367C0000020D000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/daemon/README.md # `daemon`

[![GoDoc](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/daemon?status.svg)](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/daemon)

The `daemon` package enables reading/writing images from/to the docker daemon.

It is not fully fleshed out, but is useful for interoperability, see various issues:

* https://github.com/google/go-containerregistry/issues/205
* https://github.com/google/go-containerregistry/issues/552
* https://github.com/google/go-containerregistry/issues/627
   070701000006BF000081A4000000000000000000000001645E367C000002CF000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/daemon/doc.go    // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package daemon provides facilities for reading/writing v1.Image from/to
// a running daemon.
package daemon
 070701000006C0000081A4000000000000000000000001645E367C0000125D000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/daemon/image.go  // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package daemon

import (
	"bytes"
	"context"
	"io"
	"sync"

	"github.com/google/go-containerregistry/pkg/name"
	v1 "github.com/google/go-containerregistry/pkg/v1"
	"github.com/google/go-containerregistry/pkg/v1/tarball"
	"github.com/google/go-containerregistry/pkg/v1/types"
)

type image struct {
	ref          name.Reference
	opener       *imageOpener
	tarballImage v1.Image
	id           *v1.Hash

	once sync.Once
	err  error
}

type imageOpener struct {
	ref name.Reference
	ctx context.Context

	buffered bool
	client   Client

	once  sync.Once
	bytes []byte
	err   error
}

func (i *imageOpener) saveImage() (io.ReadCloser, error) {
	return i.client.ImageSave(i.ctx, []string{i.ref.Name()})
}

func (i *imageOpener) bufferedOpener() (io.ReadCloser, error) {
	// Store the tarball in memory and return a new reader into the bytes each time we need to access something.
	i.once.Do(func() {
		i.bytes, i.err = func() ([]byte, error) {
			rc, err := i.saveImage()
			if err != nil {
				return nil, err
			}
			defer rc.Close()

			return io.ReadAll(rc)
		}()
	})

	// Wrap the bytes in a ReadCloser so it looks like an opened file.
	return io.NopCloser(bytes.NewReader(i.bytes)), i.err
}

func (i *imageOpener) opener() tarball.Opener {
	if i.buffered {
		return i.bufferedOpener
	}

	// To avoid storing the tarball in memory, do a save every time we need to access something.
	return i.saveImage
}

// Image provides access to an image reference from the Docker daemon,
// applying functional options to the underlying imageOpener before
// resolving the reference into a v1.Image.
func Image(ref name.Reference, options ...Option) (v1.Image, error) {
	o, err := makeOptions(options...)
	if err != nil {
		return nil, err
	}

	i := &imageOpener{
		ref:      ref,
		buffered: o.buffered,
		client:   o.client,
		ctx:      o.ctx,
	}

	img := &image{
		ref:    ref,
		opener: i,
	}

	// Eagerly fetch Image ID to ensure it actually exists.
	// https://github.com/google/go-containerregistry/issues/1186
	id, err := img.ConfigName()
	if err != nil {
		return nil, err
	}
	img.id = &id

	return img, nil
}

func (i *image) initialize() error {
	// Don't re-initialize tarball if already initialized.
	if i.tarballImage == nil {
		i.once.Do(func() {
			i.tarballImage, i.err = tarball.Image(i.opener.opener(), nil)
		})
	}
	return i.err
}

func (i *image) Layers() ([]v1.Layer, error) {
	if err := i.initialize(); err != nil {
		return nil, err
	}
	return i.tarballImage.Layers()
}

func (i *image) MediaType() (types.MediaType, error) {
	if err := i.initialize(); err != nil {
		return "", err
	}
	return i.tarballImage.MediaType()
}

func (i *image) Size() (int64, error) {
	if err := i.initialize(); err != nil {
		return 0, err
	}
	return i.tarballImage.Size()
}

func (i *image) ConfigName() (v1.Hash, error) {
	if i.id != nil {
		return *i.id, nil
	}
	res, _, err := i.opener.client.ImageInspectWithRaw(i.opener.ctx, i.ref.String())
	if err != nil {
		return v1.Hash{}, err
	}
	return v1.NewHash(res.ID)
}

func (i *image) ConfigFile() (*v1.ConfigFile, error) {
	if err := i.initialize(); err != nil {
		return nil, err
	}
	return i.tarballImage.ConfigFile()
}

func (i *image) RawConfigFile() ([]byte, error) {
	if err := i.initialize(); err != nil {
		return nil, err
	}
	return i.tarballImage.RawConfigFile()
}

func (i *image) Digest() (v1.Hash, error) {
	if err := i.initialize(); err != nil {
		return v1.Hash{}, err
	}
	return i.tarballImage.Digest()
}

func (i *image) Manifest() (*v1.Manifest, error) {
	if err := i.initialize(); err != nil {
		return nil, err
	}
	return i.tarballImage.Manifest()
}

func (i *image) RawManifest() ([]byte, error) {
	if err := i.initialize(); err != nil {
		return nil, err
	}
	return i.tarballImage.RawManifest()
}

func (i *image) LayerByDigest(h v1.Hash) (v1.Layer, error) {
	if err := i.initialize(); err != nil {
		return nil, err
	}
	return i.tarballImage.LayerByDigest(h)
}

func (i *image) LayerByDiffID(h v1.Hash) (v1.Layer, error) {
	if err := i.initialize(); err != nil {
		return nil, err
	}
	return i.tarballImage.LayerByDiffID(h)
}
   070701000006C1000081A4000000000000000000000001645E367C00000A16000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/daemon/options.go    // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package daemon

import (
	"context"
	"io"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/client"
)

// ImageOption is an alias for Option.
// Deprecated: Use Option instead.
type ImageOption Option

// Option is a functional option for daemon operations.
type Option func(*options)

type options struct {
	ctx      context.Context
	client   Client
	buffered bool
}

var defaultClient = func() (Client, error) {
	return client.NewClientWithOpts(client.FromEnv)
}

func makeOptions(opts ...Option) (*options, error) {
	o := &options{
		buffered: true,
		ctx:      context.Background(),
	}
	for _, opt := range opts {
		opt(o)
	}

	if o.client == nil {
		client, err := defaultClient()
		if err != nil {
			return nil, err
		}
		o.client = client
	}
	o.client.NegotiateAPIVersion(o.ctx)

	return o, nil
}

// WithBufferedOpener buffers the image.
func WithBufferedOpener() Option {
	return func(o *options) {
		o.buffered = true
	}
}

// WithUnbufferedOpener streams the image to avoid buffering.
func WithUnbufferedOpener() Option {
	return func(o *options) {
		o.buffered = false
	}
}

// WithClient is a functional option to allow injecting a docker client.
//
// By default, github.com/docker/docker/client.FromEnv is used.
func WithClient(client Client) Option {
	return func(o *options) {
		o.client = client
	}
}

// WithContext is a functional option to pass through a context.Context.
//
// By default, context.Background() is used.
func WithContext(ctx context.Context) Option {
	return func(o *options) {
		o.ctx = ctx
	}
}

// Client represents the subset of a docker client that the daemon
// package uses.
type Client interface {
	NegotiateAPIVersion(ctx context.Context)
	ImageSave(context.Context, []string) (io.ReadCloser, error)
	ImageLoad(context.Context, io.Reader, bool) (types.ImageLoadResponse, error)
	ImageTag(context.Context, string, string) error
	ImageInspectWithRaw(context.Context, string) (types.ImageInspect, []byte, error)
}
  070701000006C2000081A4000000000000000000000001645E367C000006C6000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/daemon/write.go  // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package daemon

import (
	"fmt"
	"io"

	"github.com/google/go-containerregistry/pkg/name"
	v1 "github.com/google/go-containerregistry/pkg/v1"
	"github.com/google/go-containerregistry/pkg/v1/tarball"
)

// Tag adds a tag to an already existent image.
func Tag(src, dest name.Tag, options ...Option) error {
	o, err := makeOptions(options...)
	if err != nil {
		return err
	}

	return o.client.ImageTag(o.ctx, src.String(), dest.String())
}

// Write saves the image into the daemon as the given tag.
func Write(tag name.Tag, img v1.Image, options ...Option) (string, error) {
	o, err := makeOptions(options...)
	if err != nil {
		return "", err
	}

	pr, pw := io.Pipe()
	go func() {
		pw.CloseWithError(tarball.Write(tag, img, pw))
	}()

	// write the image in docker save format first, then load it
	resp, err := o.client.ImageLoad(o.ctx, pr, false)
	if err != nil {
		return "", fmt.Errorf("error loading image: %w", err)
	}
	defer resp.Body.Close()
	b, err := io.ReadAll(resp.Body)
	response := string(b)
	if err != nil {
		return response, fmt.Errorf("error reading load response body: %w", err)
	}
	return response, nil
}
  070701000006C3000081A4000000000000000000000001645E367C000002C2000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/doc.go   // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// +k8s:deepcopy-gen=package

// Package v1 defines structured types for OCI v1 images
package v1
  070701000006C4000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/empty    070701000006C5000081A4000000000000000000000001645E367C0000023C000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/empty/README.md  # `empty`

[![GoDoc](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/empty?status.svg)](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/empty)

The empty packages provides an empty base for constructing a `v1.Image` or `v1.ImageIndex`.
This is especially useful when paired with the [`mutate`](/pkg/v1/mutate) package,
see [`mutate.Append`](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/mutate#Append)
and [`mutate.AppendManifests`](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/mutate#AppendManifests).
070701000006C6000081A4000000000000000000000001645E367C000002C4000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/empty/doc.go // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package empty provides an implementation of v1.Image equivalent to "FROM scratch".
package empty
070701000006C7000081A4000000000000000000000001645E367C00000646000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/empty/image.go   // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package empty

import (
	"fmt"

	v1 "github.com/google/go-containerregistry/pkg/v1"
	"github.com/google/go-containerregistry/pkg/v1/partial"
	"github.com/google/go-containerregistry/pkg/v1/types"
)

// Image is a singleton empty image, think: FROM scratch.
var Image, _ = partial.UncompressedToImage(emptyImage{})

type emptyImage struct{}

// MediaType implements partial.UncompressedImageCore.
func (i emptyImage) MediaType() (types.MediaType, error) {
	return types.DockerManifestSchema2, nil
}

// RawConfigFile implements partial.UncompressedImageCore.
func (i emptyImage) RawConfigFile() ([]byte, error) {
	return partial.RawConfigFile(i)
}

// ConfigFile implements v1.Image.
func (i emptyImage) ConfigFile() (*v1.ConfigFile, error) {
	return &v1.ConfigFile{
		RootFS: v1.RootFS{
			// Some clients check this.
			Type: "layers",
		},
	}, nil
}

func (i emptyImage) LayerByDiffID(h v1.Hash) (partial.UncompressedLayer, error) {
	return nil, fmt.Errorf("LayerByDiffID(%s): empty image", h)
}
  070701000006C8000081A4000000000000000000000001645E367C0000068E000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/empty/index.go   // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package empty

import (
	"encoding/json"
	"errors"

	v1 "github.com/google/go-containerregistry/pkg/v1"
	"github.com/google/go-containerregistry/pkg/v1/partial"
	"github.com/google/go-containerregistry/pkg/v1/types"
)

// Index is a singleton empty index, think: FROM scratch.
var Index = emptyIndex{}

type emptyIndex struct{}

func (i emptyIndex) MediaType() (types.MediaType, error) {
	return types.OCIImageIndex, nil
}

func (i emptyIndex) Digest() (v1.Hash, error) {
	return partial.Digest(i)
}

func (i emptyIndex) Size() (int64, error) {
	return partial.Size(i)
}

func (i emptyIndex) IndexManifest() (*v1.IndexManifest, error) {
	return base(), nil
}

func (i emptyIndex) RawManifest() ([]byte, error) {
	return json.Marshal(base())
}

func (i emptyIndex) Image(v1.Hash) (v1.Image, error) {
	return nil, errors.New("empty index")
}

func (i emptyIndex) ImageIndex(v1.Hash) (v1.ImageIndex, error) {
	return nil, errors.New("empty index")
}

func base() *v1.IndexManifest {
	return &v1.IndexManifest{
		SchemaVersion: 2,
		MediaType:     types.OCIImageIndex,
	}
}
  070701000006C9000081A4000000000000000000000001645E367C00000CDF000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/hash.go  // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package v1

import (
	"crypto"
	"encoding/hex"
	"encoding/json"
	"fmt"
	"hash"
	"io"
	"strconv"
	"strings"
)

// Hash is an unqualified digest of some content, e.g. sha256:deadbeef
type Hash struct {
	// Algorithm holds the algorithm used to compute the hash.
	Algorithm string

	// Hex holds the hex portion of the content hash.
	Hex string
}

// String reverses NewHash returning the string-form of the hash.
func (h Hash) String() string {
	return fmt.Sprintf("%s:%s", h.Algorithm, h.Hex)
}

// NewHash validates the input string is a hash and returns a strongly type Hash object.
func NewHash(s string) (Hash, error) {
	h := Hash{}
	if err := h.parse(s); err != nil {
		return Hash{}, err
	}
	return h, nil
}

// MarshalJSON implements json.Marshaler
func (h Hash) MarshalJSON() ([]byte, error) {
	return json.Marshal(h.String())
}

// UnmarshalJSON implements json.Unmarshaler
func (h *Hash) UnmarshalJSON(data []byte) error {
	s, err := strconv.Unquote(string(data))
	if err != nil {
		return err
	}
	return h.parse(s)
}

// MarshalText implements encoding.TextMarshaler. This is required to use
// v1.Hash as a key in a map when marshalling JSON.
func (h Hash) MarshalText() (text []byte, err error) {
	return []byte(h.String()), nil
}

// UnmarshalText implements encoding.TextUnmarshaler. This is required to use
// v1.Hash as a key in a map when unmarshalling JSON.
func (h *Hash) UnmarshalText(text []byte) error {
	return h.parse(string(text))
}

// Hasher returns a hash.Hash for the named algorithm (e.g. "sha256")
func Hasher(name string) (hash.Hash, error) {
	switch name {
	case "sha256":
		return crypto.SHA256.New(), nil
	default:
		return nil, fmt.Errorf("unsupported hash: %q", name)
	}
}

func (h *Hash) parse(unquoted string) error {
	parts := strings.Split(unquoted, ":")
	if len(parts) != 2 {
		return fmt.Errorf("cannot parse hash: %q", unquoted)
	}

	rest := strings.TrimLeft(parts[1], "0123456789abcdef")
	if len(rest) != 0 {
		return fmt.Errorf("found non-hex character in hash: %c", rest[0])
	}

	hasher, err := Hasher(parts[0])
	if err != nil {
		return err
	}
	// Compare the hex to the expected size (2 hex characters per byte)
	if len(parts[1]) != hasher.Size()*2 {
		return fmt.Errorf("wrong number of hex digits for %s: %s", parts[0], parts[1])
	}

	h.Algorithm = parts[0]
	h.Hex = parts[1]
	return nil
}

// SHA256 computes the Hash of the provided io.Reader's content.
func SHA256(r io.Reader) (Hash, int64, error) {
	hasher := crypto.SHA256.New()
	n, err := io.Copy(hasher, r)
	if err != nil {
		return Hash{}, 0, err
	}
	return Hash{
		Algorithm: "sha256",
		Hex:       hex.EncodeToString(hasher.Sum(make([]byte, 0, hasher.Size()))),
	}, n, nil
}
 070701000006CA000081A4000000000000000000000001645E367C000007D5000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/image.go // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package v1

import (
	"github.com/google/go-containerregistry/pkg/v1/types"
)

// Image defines the interface for interacting with an OCI v1 image.
type Image interface {
	// Layers returns the ordered collection of filesystem layers that comprise this image.
	// The order of the list is oldest/base layer first, and most-recent/top layer last.
	Layers() ([]Layer, error)

	// MediaType of this image's manifest.
	MediaType() (types.MediaType, error)

	// Size returns the size of the manifest.
	Size() (int64, error)

	// ConfigName returns the hash of the image's config file, also known as
	// the Image ID.
	ConfigName() (Hash, error)

	// ConfigFile returns this image's config file.
	ConfigFile() (*ConfigFile, error)

	// RawConfigFile returns the serialized bytes of ConfigFile().
	RawConfigFile() ([]byte, error)

	// Digest returns the sha256 of this image's manifest.
	Digest() (Hash, error)

	// Manifest returns this image's Manifest object.
	Manifest() (*Manifest, error)

	// RawManifest returns the serialized bytes of Manifest()
	RawManifest() ([]byte, error)

	// LayerByDigest returns a Layer for interacting with a particular layer of
	// the image, looking it up by "digest" (the compressed hash).
	LayerByDigest(Hash) (Layer, error)

	// LayerByDiffID is an analog to LayerByDigest, looking up by "diff id"
	// (the uncompressed hash).
	LayerByDiffID(Hash) (Layer, error)
}
   070701000006CB000081A4000000000000000000000001645E367C0000058F000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/index.go // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package v1

import (
	"github.com/google/go-containerregistry/pkg/v1/types"
)

// ImageIndex defines the interface for interacting with an OCI image index.
type ImageIndex interface {
	// MediaType of this image's manifest.
	MediaType() (types.MediaType, error)

	// Digest returns the sha256 of this index's manifest.
	Digest() (Hash, error)

	// Size returns the size of the manifest.
	Size() (int64, error)

	// IndexManifest returns this image index's manifest object.
	IndexManifest() (*IndexManifest, error)

	// RawManifest returns the serialized bytes of IndexManifest().
	RawManifest() ([]byte, error)

	// Image returns a v1.Image that this ImageIndex references.
	Image(Hash) (Image, error)

	// ImageIndex returns a v1.ImageIndex that this ImageIndex references.
	ImageIndex(Hash) (ImageIndex, error)
}
 070701000006CC000081A4000000000000000000000001645E367C00000553000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/layer.go // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package v1

import (
	"io"

	"github.com/google/go-containerregistry/pkg/v1/types"
)

// Layer is an interface for accessing the properties of a particular layer of a v1.Image
type Layer interface {
	// Digest returns the Hash of the compressed layer.
	Digest() (Hash, error)

	// DiffID returns the Hash of the uncompressed layer.
	DiffID() (Hash, error)

	// Compressed returns an io.ReadCloser for the compressed layer contents.
	Compressed() (io.ReadCloser, error)

	// Uncompressed returns an io.ReadCloser for the uncompressed layer contents.
	Uncompressed() (io.ReadCloser, error)

	// Size returns the compressed size of the Layer.
	Size() (int64, error)

	// MediaType returns the media type of the Layer.
	MediaType() (types.MediaType, error)
}
 070701000006CD000081A4000000000000000000000001645E367C00000A19000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/manifest.go  // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package v1

import (
	"encoding/json"
	"io"

	"github.com/google/go-containerregistry/pkg/v1/types"
)

// Manifest represents the OCI image manifest in a structured way.
type Manifest struct {
	SchemaVersion int64             `json:"schemaVersion"`
	MediaType     types.MediaType   `json:"mediaType,omitempty"`
	Config        Descriptor        `json:"config"`
	Layers        []Descriptor      `json:"layers"`
	Annotations   map[string]string `json:"annotations,omitempty"`
	Subject       *Descriptor       `json:"subject,omitempty"`
}

// IndexManifest represents an OCI image index in a structured way.
type IndexManifest struct {
	SchemaVersion int64             `json:"schemaVersion"`
	MediaType     types.MediaType   `json:"mediaType,omitempty"`
	Manifests     []Descriptor      `json:"manifests"`
	Annotations   map[string]string `json:"annotations,omitempty"`
	Subject       *Descriptor       `json:"subject,omitempty"`
}

// Descriptor holds a reference from the manifest to one of its constituent elements.
type Descriptor struct {
	MediaType    types.MediaType   `json:"mediaType"`
	Size         int64             `json:"size"`
	Digest       Hash              `json:"digest"`
	Data         []byte            `json:"data,omitempty"`
	URLs         []string          `json:"urls,omitempty"`
	Annotations  map[string]string `json:"annotations,omitempty"`
	Platform     *Platform         `json:"platform,omitempty"`
	ArtifactType string            `json:"artifactType,omitempty"`
}

// ParseManifest parses the io.Reader's contents into a Manifest.
func ParseManifest(r io.Reader) (*Manifest, error) {
	m := Manifest{}
	if err := json.NewDecoder(r).Decode(&m); err != nil {
		return nil, err
	}
	return &m, nil
}

// ParseIndexManifest parses the io.Reader's contents into an IndexManifest.
func ParseIndexManifest(r io.Reader) (*IndexManifest, error) {
	im := IndexManifest{}
	if err := json.NewDecoder(r).Decode(&im); err != nil {
		return nil, err
	}
	return &im, nil
}
   070701000006CE000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/match    070701000006CF000081A4000000000000000000000001645E367C00000ADE000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/match/match.go   // Copyright 2020 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package match provides functionality for conveniently matching a v1.Descriptor.
package match

import (
	v1 "github.com/google/go-containerregistry/pkg/v1"
	imagespec "github.com/opencontainers/image-spec/specs-go/v1"
)

// Matcher function that is given a v1.Descriptor, and returns whether or
// not it matches a given rule. Can match on anything it wants in the Descriptor.
type Matcher func(desc v1.Descriptor) bool

// Name returns a match.Matcher that matches based on the value of the
//
//	"org.opencontainers.image.ref.name" annotation:
//
// github.com/opencontainers/image-spec/blob/v1.0.1/annotations.md#pre-defined-annotation-keys
func Name(name string) Matcher {
	return Annotation(imagespec.AnnotationRefName, name)
}

// Annotation returns a match.Matcher that matches based on the provided annotation.
func Annotation(key, value string) Matcher {
	return func(desc v1.Descriptor) bool {
		if desc.Annotations == nil {
			return false
		}
		if aValue, ok := desc.Annotations[key]; ok && aValue == value {
			return true
		}
		return false
	}
}

// Platforms returns a match.Matcher that matches on any one of the provided platforms.
// Ignores any descriptors that do not have a platform.
func Platforms(platforms ...v1.Platform) Matcher {
	return func(desc v1.Descriptor) bool {
		if desc.Platform == nil {
			return false
		}
		for _, platform := range platforms {
			if desc.Platform.Equals(platform) {
				return true
			}
		}
		return false
	}
}

// MediaTypes returns a match.Matcher that matches at least one of the provided media types.
func MediaTypes(mediaTypes ...string) Matcher {
	mts := map[string]bool{}
	for _, media := range mediaTypes {
		mts[media] = true
	}
	return func(desc v1.Descriptor) bool {
		if desc.MediaType == "" {
			return false
		}
		if _, ok := mts[string(desc.MediaType)]; ok {
			return true
		}
		return false
	}
}

// Digests returns a match.Matcher that matches at least one of the provided Digests
func Digests(digests ...v1.Hash) Matcher {
	digs := map[v1.Hash]bool{}
	for _, digest := range digests {
		digs[digest] = true
	}
	return func(desc v1.Descriptor) bool {
		_, ok := digs[desc.Digest]
		return ok
	}
}
  070701000006D0000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/mutate   070701000006D1000081A4000000000000000000000001645E367C0000087B000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/README.md # `mutate`

[![GoDoc](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/mutate?status.svg)](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/mutate)

The `v1.Image`, `v1.ImageIndex`, and `v1.Layer` interfaces provide only
accessor methods, so they are essentially immutable. If you want to change
something about them, you need to produce a new instance of that interface.

A common use case for this library is to read an image from somewhere (a source),
change something about it, and write the image somewhere else (a sink).

Graphically, this looks something like:

<p align="center">
  <img src="/images/mutate.dot.svg" />
</p>

## Mutations

This is obviously not a comprehensive set of useful transformations (PRs welcome!),
but a rough summary of what the `mutate` package currently does:

### `Config` and `ConfigFile`

These allow you to change the [image configuration](https://github.com/opencontainers/image-spec/blob/master/config.md#properties),
e.g. to change the entrypoint, environment, author, etc.

### `Time`, `Canonical`, and `CreatedAt`

These are useful in the context of [reproducible builds](https://reproducible-builds.org/),
where you may want to strip timestamps and other non-reproducible information.

### `Append`, `AppendLayers`, and `AppendManifests`

These functions allow the extension of a `v1.Image` or `v1.ImageIndex` with
new layers or manifests.

For constructing an image `FROM scratch`, see the [`empty`](/pkg/v1/empty) package.

### `MediaType` and `IndexMediaType`

Sometimes, it is necessary to change the media type of an image or index,
e.g. to appease a registry with strict validation of images (_looking at you, GCR_).

### `Rebase`

Rebase has [its own README](/cmd/crane/rebase.md).

This is the underlying implementation of [`crane rebase`](https://github.com/google/go-containerregistry/blob/main/cmd/crane/doc/crane_rebase.md).

### `Extract`

Extract will flatten an image filesystem into a single tar stream,
respecting whiteout files.

This is the underlying implementation of [`crane export`](https://github.com/google/go-containerregistry/blob/main/cmd/crane/doc/crane_export.md).
 070701000006D2000081A4000000000000000000000001645E367C000002B9000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/doc.go    // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package mutate provides facilities for mutating v1.Images of any kind.
package mutate
   070701000006D3000081A4000000000000000000000001645E367C00001B36000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/image.go  // Copyright 2019 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package mutate

import (
	"bytes"
	"encoding/json"
	"errors"

	v1 "github.com/google/go-containerregistry/pkg/v1"
	"github.com/google/go-containerregistry/pkg/v1/partial"
	"github.com/google/go-containerregistry/pkg/v1/stream"
	"github.com/google/go-containerregistry/pkg/v1/types"
)

type image struct {
	base v1.Image
	adds []Addendum

	computed        bool
	configFile      *v1.ConfigFile
	manifest        *v1.Manifest
	annotations     map[string]string
	mediaType       *types.MediaType
	configMediaType *types.MediaType
	diffIDMap       map[v1.Hash]v1.Layer
	digestMap       map[v1.Hash]v1.Layer
	subject         *v1.Descriptor
}

var _ v1.Image = (*image)(nil)

func (i *image) MediaType() (types.MediaType, error) {
	if i.mediaType != nil {
		return *i.mediaType, nil
	}
	return i.base.MediaType()
}

func (i *image) compute() error {
	// Don't re-compute if already computed.
	if i.computed {
		return nil
	}
	var configFile *v1.ConfigFile
	if i.configFile != nil {
		configFile = i.configFile
	} else {
		cf, err := i.base.ConfigFile()
		if err != nil {
			return err
		}
		configFile = cf.DeepCopy()
	}
	diffIDs := configFile.RootFS.DiffIDs
	history := configFile.History

	diffIDMap := make(map[v1.Hash]v1.Layer)
	digestMap := make(map[v1.Hash]v1.Layer)

	for _, add := range i.adds {
		history = append(history, add.History)
		if add.Layer != nil {
			diffID, err := add.Layer.DiffID()
			if err != nil {
				return err
			}
			diffIDs = append(diffIDs, diffID)
			diffIDMap[diffID] = add.Layer
		}
	}

	m, err := i.base.Manifest()
	if err != nil {
		return err
	}
	manifest := m.DeepCopy()
	manifestLayers := manifest.Layers
	for _, add := range i.adds {
		if add.Layer == nil {
			// Empty layers include only history in manifest.
			continue
		}

		desc, err := partial.Descriptor(add.Layer)
		if err != nil {
			return err
		}

		// Fields in the addendum override the original descriptor.
		if len(add.Annotations) != 0 {
			desc.Annotations = add.Annotations
		}
		if len(add.URLs) != 0 {
			desc.URLs = add.URLs
		}

		if add.MediaType != "" {
			desc.MediaType = add.MediaType
		}

		manifestLayers = append(manifestLayers, *desc)
		digestMap[desc.Digest] = add.Layer
	}

	configFile.RootFS.DiffIDs = diffIDs
	configFile.History = history

	manifest.Layers = manifestLayers

	rcfg, err := json.Marshal(configFile)
	if err != nil {
		return err
	}
	d, sz, err := v1.SHA256(bytes.NewBuffer(rcfg))
	if err != nil {
		return err
	}
	manifest.Config.Digest = d
	manifest.Config.Size = sz

	// If Data was set in the base image, we need to update it in the mutated image.
	if m.Config.Data != nil {
		manifest.Config.Data = rcfg
	}

	// If the user wants to mutate the media type of the config
	if i.configMediaType != nil {
		manifest.Config.MediaType = *i.configMediaType
	}

	if i.mediaType != nil {
		manifest.MediaType = *i.mediaType
	}

	if i.annotations != nil {
		if manifest.Annotations == nil {
			manifest.Annotations = map[string]string{}
		}

		for k, v := range i.annotations {
			manifest.Annotations[k] = v
		}
	}
	manifest.Subject = i.subject

	i.configFile = configFile
	i.manifest = manifest
	i.diffIDMap = diffIDMap
	i.digestMap = digestMap
	i.computed = true
	return nil
}

// Layers returns the ordered collection of filesystem layers that comprise this image.
// The order of the list is oldest/base layer first, and most-recent/top layer last.
func (i *image) Layers() ([]v1.Layer, error) {
	if err := i.compute(); errors.Is(err, stream.ErrNotComputed) {
		// Image contains a streamable layer which has not yet been
		// consumed. Just return the layers we have in case the caller
		// is going to consume the layers.
		layers, err := i.base.Layers()
		if err != nil {
			return nil, err
		}
		for _, add := range i.adds {
			layers = append(layers, add.Layer)
		}
		return layers, nil
	} else if err != nil {
		return nil, err
	}

	diffIDs, err := partial.DiffIDs(i)
	if err != nil {
		return nil, err
	}
	ls := make([]v1.Layer, 0, len(diffIDs))
	for _, h := range diffIDs {
		l, err := i.LayerByDiffID(h)
		if err != nil {
			return nil, err
		}
		ls = append(ls, l)
	}
	return ls, nil
}

// ConfigName returns the hash of the image's config file.
func (i *image) ConfigName() (v1.Hash, error) {
	if err := i.compute(); err != nil {
		return v1.Hash{}, err
	}
	return partial.ConfigName(i)
}

// ConfigFile returns this image's config file.
func (i *image) ConfigFile() (*v1.ConfigFile, error) {
	if err := i.compute(); err != nil {
		return nil, err
	}
	return i.configFile.DeepCopy(), nil
}

// RawConfigFile returns the serialized bytes of ConfigFile()
func (i *image) RawConfigFile() ([]byte, error) {
	if err := i.compute(); err != nil {
		return nil, err
	}
	return json.Marshal(i.configFile)
}

// Digest returns the sha256 of this image's manifest.
func (i *image) Digest() (v1.Hash, error) {
	if err := i.compute(); err != nil {
		return v1.Hash{}, err
	}
	return partial.Digest(i)
}

// Size implements v1.Image.
func (i *image) Size() (int64, error) {
	if err := i.compute(); err != nil {
		return -1, err
	}
	return partial.Size(i)
}

// Manifest returns this image's Manifest object.
func (i *image) Manifest() (*v1.Manifest, error) {
	if err := i.compute(); err != nil {
		return nil, err
	}
	return i.manifest.DeepCopy(), nil
}

// RawManifest returns the serialized bytes of Manifest()
func (i *image) RawManifest() ([]byte, error) {
	if err := i.compute(); err != nil {
		return nil, err
	}
	return json.Marshal(i.manifest)
}

// LayerByDigest returns a Layer for interacting with a particular layer of
// the image, looking it up by "digest" (the compressed hash).
func (i *image) LayerByDigest(h v1.Hash) (v1.Layer, error) {
	if cn, err := i.ConfigName(); err != nil {
		return nil, err
	} else if h == cn {
		return partial.ConfigLayer(i)
	}
	if layer, ok := i.digestMap[h]; ok {
		return layer, nil
	}
	return i.base.LayerByDigest(h)
}

// LayerByDiffID is an analog to LayerByDigest, looking up by "diff id"
// (the uncompressed hash).
func (i *image) LayerByDiffID(h v1.Hash) (v1.Layer, error) {
	if layer, ok := i.diffIDMap[h]; ok {
		return layer, nil
	}
	return i.base.LayerByDiffID(h)
}

func validate(adds []Addendum) error {
	for _, add := range adds {
		if add.Layer == nil && !add.History.EmptyLayer {
			return errors.New("unable to add a nil layer to the image")
		}
	}
	return nil
}
  070701000006D4000081A4000000000000000000000001645E367C00001341000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/index.go  // Copyright 2019 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package mutate

import (
	"encoding/json"
	"fmt"

	"github.com/google/go-containerregistry/pkg/logs"
	v1 "github.com/google/go-containerregistry/pkg/v1"
	"github.com/google/go-containerregistry/pkg/v1/match"
	"github.com/google/go-containerregistry/pkg/v1/partial"
	"github.com/google/go-containerregistry/pkg/v1/types"
)

func computeDescriptor(ia IndexAddendum) (*v1.Descriptor, error) {
	desc, err := partial.Descriptor(ia.Add)
	if err != nil {
		return nil, err
	}

	// The IndexAddendum allows overriding Descriptor values.
	if ia.Descriptor.Size != 0 {
		desc.Size = ia.Descriptor.Size
	}
	if string(ia.Descriptor.MediaType) != "" {
		desc.MediaType = ia.Descriptor.MediaType
	}
	if ia.Descriptor.Digest != (v1.Hash{}) {
		desc.Digest = ia.Descriptor.Digest
	}
	if ia.Descriptor.Platform != nil {
		desc.Platform = ia.Descriptor.Platform
	}
	if len(ia.Descriptor.URLs) != 0 {
		desc.URLs = ia.Descriptor.URLs
	}
	if len(ia.Descriptor.Annotations) != 0 {
		desc.Annotations = ia.Descriptor.Annotations
	}
	if ia.Descriptor.Data != nil {
		desc.Data = ia.Descriptor.Data
	}

	return desc, nil
}

type index struct {
	base v1.ImageIndex
	adds []IndexAddendum
	// remove is removed before adds
	remove match.Matcher

	computed    bool
	manifest    *v1.IndexManifest
	annotations map[string]string
	mediaType   *types.MediaType
	imageMap    map[v1.Hash]v1.Image
	indexMap    map[v1.Hash]v1.ImageIndex
	layerMap    map[v1.Hash]v1.Layer
	subject     *v1.Descriptor
}

var _ v1.ImageIndex = (*index)(nil)

func (i *index) MediaType() (types.MediaType, error) {
	if i.mediaType != nil {
		return *i.mediaType, nil
	}
	return i.base.MediaType()
}

func (i *index) Size() (int64, error) { return partial.Size(i) }

func (i *index) compute() error {
	// Don't re-compute if already computed.
	if i.computed {
		return nil
	}

	i.imageMap = make(map[v1.Hash]v1.Image)
	i.indexMap = make(map[v1.Hash]v1.ImageIndex)
	i.layerMap = make(map[v1.Hash]v1.Layer)

	m, err := i.base.IndexManifest()
	if err != nil {
		return err
	}
	manifest := m.DeepCopy()
	manifests := manifest.Manifests

	if i.remove != nil {
		var cleanedManifests []v1.Descriptor
		for _, m := range manifests {
			if !i.remove(m) {
				cleanedManifests = append(cleanedManifests, m)
			}
		}
		manifests = cleanedManifests
	}

	for _, add := range i.adds {
		desc, err := computeDescriptor(add)
		if err != nil {
			return err
		}

		manifests = append(manifests, *desc)
		if idx, ok := add.Add.(v1.ImageIndex); ok {
			i.indexMap[desc.Digest] = idx
		} else if img, ok := add.Add.(v1.Image); ok {
			i.imageMap[desc.Digest] = img
		} else if l, ok := add.Add.(v1.Layer); ok {
			i.layerMap[desc.Digest] = l
		} else {
			logs.Warn.Printf("Unexpected index addendum: %T", add.Add)
		}
	}

	manifest.Manifests = manifests

	if i.mediaType != nil {
		manifest.MediaType = *i.mediaType
	}

	if i.annotations != nil {
		if manifest.Annotations == nil {
			manifest.Annotations = map[string]string{}
		}
		for k, v := range i.annotations {
			manifest.Annotations[k] = v
		}
	}
	manifest.Subject = i.subject

	i.manifest = manifest
	i.computed = true
	return nil
}

func (i *index) Image(h v1.Hash) (v1.Image, error) {
	if img, ok := i.imageMap[h]; ok {
		return img, nil
	}
	return i.base.Image(h)
}

func (i *index) ImageIndex(h v1.Hash) (v1.ImageIndex, error) {
	if idx, ok := i.indexMap[h]; ok {
		return idx, nil
	}
	return i.base.ImageIndex(h)
}

type withLayer interface {
	Layer(v1.Hash) (v1.Layer, error)
}

// Workaround for #819.
func (i *index) Layer(h v1.Hash) (v1.Layer, error) {
	if layer, ok := i.layerMap[h]; ok {
		return layer, nil
	}
	if wl, ok := i.base.(withLayer); ok {
		return wl.Layer(h)
	}
	return nil, fmt.Errorf("layer not found: %s", h)
}

// Digest returns the sha256 of this image's manifest.
func (i *index) Digest() (v1.Hash, error) {
	if err := i.compute(); err != nil {
		return v1.Hash{}, err
	}
	return partial.Digest(i)
}

// Manifest returns this image's Manifest object.
func (i *index) IndexManifest() (*v1.IndexManifest, error) {
	if err := i.compute(); err != nil {
		return nil, err
	}
	return i.manifest.DeepCopy(), nil
}

// RawManifest returns the serialized bytes of Manifest()
func (i *index) RawManifest() ([]byte, error) {
	if err := i.compute(); err != nil {
		return nil, err
	}
	return json.Marshal(i.manifest)
}
   070701000006D5000081A4000000000000000000000001645E367C000038CB000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/mutate.go // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package mutate

import (
	"archive/tar"
	"bytes"
	"encoding/json"
	"errors"
	"fmt"
	"io"
	"path/filepath"
	"strings"
	"time"

	"github.com/google/go-containerregistry/internal/gzip"
	v1 "github.com/google/go-containerregistry/pkg/v1"
	"github.com/google/go-containerregistry/pkg/v1/empty"
	"github.com/google/go-containerregistry/pkg/v1/match"
	"github.com/google/go-containerregistry/pkg/v1/partial"
	"github.com/google/go-containerregistry/pkg/v1/tarball"
	"github.com/google/go-containerregistry/pkg/v1/types"
)

const whiteoutPrefix = ".wh."

// Addendum contains layers and history to be appended
// to a base image
type Addendum struct {
	Layer       v1.Layer
	History     v1.History
	URLs        []string
	Annotations map[string]string
	MediaType   types.MediaType
}

// AppendLayers applies layers to a base image.
func AppendLayers(base v1.Image, layers ...v1.Layer) (v1.Image, error) {
	additions := make([]Addendum, 0, len(layers))
	for _, layer := range layers {
		additions = append(additions, Addendum{Layer: layer})
	}

	return Append(base, additions...)
}

// Append will apply the list of addendums to the base image
func Append(base v1.Image, adds ...Addendum) (v1.Image, error) {
	if len(adds) == 0 {
		return base, nil
	}
	if err := validate(adds); err != nil {
		return nil, err
	}

	return &image{
		base: base,
		adds: adds,
	}, nil
}

// Appendable is an interface that represents something that can be appended
// to an ImageIndex. We need to be able to construct a v1.Descriptor in order
// to append something, and this is the minimum required information for that.
type Appendable interface {
	MediaType() (types.MediaType, error)
	Digest() (v1.Hash, error)
	Size() (int64, error)
}

// IndexAddendum represents an appendable thing and all the properties that
// we may want to override in the resulting v1.Descriptor.
type IndexAddendum struct {
	Add Appendable
	v1.Descriptor
}

// AppendManifests appends a manifest to the ImageIndex.
func AppendManifests(base v1.ImageIndex, adds ...IndexAddendum) v1.ImageIndex {
	return &index{
		base: base,
		adds: adds,
	}
}

// RemoveManifests removes any descriptors that match the match.Matcher.
func RemoveManifests(base v1.ImageIndex, matcher match.Matcher) v1.ImageIndex {
	return &index{
		base:   base,
		remove: matcher,
	}
}

// Config mutates the provided v1.Image to have the provided v1.Config
func Config(base v1.Image, cfg v1.Config) (v1.Image, error) {
	cf, err := base.ConfigFile()
	if err != nil {
		return nil, err
	}

	cf.Config = cfg

	return ConfigFile(base, cf)
}

// Subject mutates the subject on an image or index manifest.
//
// The input is expected to be a v1.Image or v1.ImageIndex, and
// returns the same type. You can type-assert the result like so:
//
//	img := Subject(empty.Image, subj).(v1.Image)
//
// Or for an index:
//
//	idx := Subject(empty.Index, subj).(v1.ImageIndex)
//
// If the input is not an Image or ImageIndex, the result will
// attempt to lazily annotate the raw manifest.
func Subject(f partial.WithRawManifest, subject v1.Descriptor) partial.WithRawManifest {
	if img, ok := f.(v1.Image); ok {
		return &image{
			base:    img,
			subject: &subject,
		}
	}
	if idx, ok := f.(v1.ImageIndex); ok {
		return &index{
			base:    idx,
			subject: &subject,
		}
	}
	return arbitraryRawManifest{a: f, subject: &subject}
}

// Annotations mutates the annotations on an annotatable image or index manifest.
//
// The annotatable input is expected to be a v1.Image or v1.ImageIndex, and
// returns the same type. You can type-assert the result like so:
//
//	img := Annotations(empty.Image, map[string]string{
//	    "foo": "bar",
//	}).(v1.Image)
//
// Or for an index:
//
//	idx := Annotations(empty.Index, map[string]string{
//	    "foo": "bar",
//	}).(v1.ImageIndex)
//
// If the input Annotatable is not an Image or ImageIndex, the result will
// attempt to lazily annotate the raw manifest.
func Annotations(f partial.WithRawManifest, anns map[string]string) partial.WithRawManifest {
	if img, ok := f.(v1.Image); ok {
		return &image{
			base:        img,
			annotations: anns,
		}
	}
	if idx, ok := f.(v1.ImageIndex); ok {
		return &index{
			base:        idx,
			annotations: anns,
		}
	}
	return arbitraryRawManifest{a: f, anns: anns}
}

type arbitraryRawManifest struct {
	a       partial.WithRawManifest
	anns    map[string]string
	subject *v1.Descriptor
}

func (a arbitraryRawManifest) RawManifest() ([]byte, error) {
	b, err := a.a.RawManifest()
	if err != nil {
		return nil, err
	}
	var m map[string]any
	if err := json.Unmarshal(b, &m); err != nil {
		return nil, err
	}
	if ann, ok := m["annotations"]; ok {
		if annm, ok := ann.(map[string]string); ok {
			for k, v := range a.anns {
				annm[k] = v
			}
		} else {
			return nil, fmt.Errorf(".annotations is not a map: %T", ann)
		}
	} else {
		m["annotations"] = a.anns
	}
	if a.subject != nil {
		m["subject"] = a.subject
	}
	return json.Marshal(m)
}

// ConfigFile mutates the provided v1.Image to have the provided v1.ConfigFile
func ConfigFile(base v1.Image, cfg *v1.ConfigFile) (v1.Image, error) {
	m, err := base.Manifest()
	if err != nil {
		return nil, err
	}

	image := &image{
		base:       base,
		manifest:   m.DeepCopy(),
		configFile: cfg,
	}

	return image, nil
}

// CreatedAt mutates the provided v1.Image to have the provided v1.Time
func CreatedAt(base v1.Image, created v1.Time) (v1.Image, error) {
	cf, err := base.ConfigFile()
	if err != nil {
		return nil, err
	}

	cfg := cf.DeepCopy()
	cfg.Created = created

	return ConfigFile(base, cfg)
}

// Extract takes an image and returns an io.ReadCloser containing the image's
// flattened filesystem.
//
// Callers can read the filesystem contents by passing the reader to
// tar.NewReader, or io.Copy it directly to some output.
//
// If a caller doesn't read the full contents, they should Close it to free up
// resources used during extraction.
func Extract(img v1.Image) io.ReadCloser {
	pr, pw := io.Pipe()

	go func() {
		// Close the writer with any errors encountered during
		// extraction. These errors will be returned by the reader end
		// on subsequent reads. If err == nil, the reader will return
		// EOF.
		pw.CloseWithError(extract(img, pw))
	}()

	return pr
}

// Adapted from https://github.com/google/containerregistry/blob/da03b395ccdc4e149e34fbb540483efce962dc64/client/v2_2/docker_image_.py#L816
func extract(img v1.Image, w io.Writer) error {
	tarWriter := tar.NewWriter(w)
	defer tarWriter.Close()

	fileMap := map[string]bool{}

	layers, err := img.Layers()
	if err != nil {
		return fmt.Errorf("retrieving image layers: %w", err)
	}

	// we iterate through the layers in reverse order because it makes handling
	// whiteout layers more efficient, since we can just keep track of the removed
	// files as we see .wh. layers and ignore those in previous layers.
	for i := len(layers) - 1; i >= 0; i-- {
		layer := layers[i]
		layerReader, err := layer.Uncompressed()
		if err != nil {
			return fmt.Errorf("reading layer contents: %w", err)
		}
		defer layerReader.Close()
		tarReader := tar.NewReader(layerReader)
		for {
			header, err := tarReader.Next()
			if errors.Is(err, io.EOF) {
				break
			}
			if err != nil {
				return fmt.Errorf("reading tar: %w", err)
			}

			// Some tools prepend everything with "./", so if we don't Clean the
			// name, we may have duplicate entries, which angers tar-split.
			header.Name = filepath.Clean(header.Name)
			// force PAX format to remove Name/Linkname length limit of 100 characters
			// required by USTAR and to not depend on internal tar package guess which
			// prefers USTAR over PAX
			header.Format = tar.FormatPAX

			basename := filepath.Base(header.Name)
			dirname := filepath.Dir(header.Name)
			tombstone := strings.HasPrefix(basename, whiteoutPrefix)
			if tombstone {
				basename = basename[len(whiteoutPrefix):]
			}

			// check if we have seen value before
			// if we're checking a directory, don't filepath.Join names
			var name string
			if header.Typeflag == tar.TypeDir {
				name = header.Name
			} else {
				name = filepath.Join(dirname, basename)
			}

			if _, ok := fileMap[name]; ok {
				continue
			}

			// check for a whited out parent directory
			if inWhiteoutDir(fileMap, name) {
				continue
			}

			// mark file as handled. non-directory implicitly tombstones
			// any entries with a matching (or child) name
			fileMap[name] = tombstone || !(header.Typeflag == tar.TypeDir)
			if !tombstone {
				if err := tarWriter.WriteHeader(header); err != nil {
					return err
				}
				if header.Size > 0 {
					if _, err := io.CopyN(tarWriter, tarReader, header.Size); err != nil {
						return err
					}
				}
			}
		}
	}
	return nil
}

func inWhiteoutDir(fileMap map[string]bool, file string) bool {
	for {
		if file == "" {
			break
		}
		dirname := filepath.Dir(file)
		if file == dirname {
			break
		}
		if val, ok := fileMap[dirname]; ok && val {
			return true
		}
		file = dirname
	}
	return false
}

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}

// Time sets all timestamps in an image to the given timestamp.
func Time(img v1.Image, t time.Time) (v1.Image, error) {
	newImage := empty.Image

	layers, err := img.Layers()
	if err != nil {
		return nil, fmt.Errorf("getting image layers: %w", err)
	}

	ocf, err := img.ConfigFile()
	if err != nil {
		return nil, fmt.Errorf("getting original config file: %w", err)
	}

	addendums := make([]Addendum, max(len(ocf.History), len(layers)))
	var historyIdx, addendumIdx int
	for layerIdx := 0; layerIdx < len(layers); addendumIdx, layerIdx = addendumIdx+1, layerIdx+1 {
		newLayer, err := layerTime(layers[layerIdx], t)
		if err != nil {
			return nil, fmt.Errorf("setting layer times: %w", err)
		}

		// try to search for the history entry that corresponds to this layer
		for ; historyIdx < len(ocf.History); historyIdx++ {
			addendums[addendumIdx].History = ocf.History[historyIdx]
			// if it's an EmptyLayer, do not set the Layer and have the Addendum with just the History
			// and move on to the next History entry
			if ocf.History[historyIdx].EmptyLayer {
				addendumIdx++
				continue
			}
			// otherwise, we can exit from the cycle
			historyIdx++
			break
		}
		addendums[addendumIdx].Layer = newLayer
	}

	// add all leftover History entries
	for ; historyIdx < len(ocf.History); historyIdx, addendumIdx = historyIdx+1, addendumIdx+1 {
		addendums[addendumIdx].History = ocf.History[historyIdx]
	}

	newImage, err = Append(newImage, addendums...)
	if err != nil {
		return nil, fmt.Errorf("appending layers: %w", err)
	}

	cf, err := newImage.ConfigFile()
	if err != nil {
		return nil, fmt.Errorf("setting config file: %w", err)
	}

	cfg := cf.DeepCopy()

	// Copy basic config over
	cfg.Architecture = ocf.Architecture
	cfg.OS = ocf.OS
	cfg.OSVersion = ocf.OSVersion
	cfg.Config = ocf.Config

	// Strip away timestamps from the config file
	cfg.Created = v1.Time{Time: t}

	for i, h := range cfg.History {
		h.Created = v1.Time{Time: t}
		h.CreatedBy = ocf.History[i].CreatedBy
		h.Comment = ocf.History[i].Comment
		h.EmptyLayer = ocf.History[i].EmptyLayer
		// Explicitly ignore Author field; which hinders reproducibility
		h.Author = ""
		cfg.History[i] = h
	}

	return ConfigFile(newImage, cfg)
}

func layerTime(layer v1.Layer, t time.Time) (v1.Layer, error) {
	layerReader, err := layer.Uncompressed()
	if err != nil {
		return nil, fmt.Errorf("getting layer: %w", err)
	}
	defer layerReader.Close()
	w := new(bytes.Buffer)
	tarWriter := tar.NewWriter(w)
	defer tarWriter.Close()

	tarReader := tar.NewReader(layerReader)
	for {
		header, err := tarReader.Next()
		if errors.Is(err, io.EOF) {
			break
		}
		if err != nil {
			return nil, fmt.Errorf("reading layer: %w", err)
		}

		header.ModTime = t

		//PAX and GNU Format support additional timestamps in the header
		if header.Format == tar.FormatPAX || header.Format == tar.FormatGNU {
			header.AccessTime = t
			header.ChangeTime = t
		}

		if err := tarWriter.WriteHeader(header); err != nil {
			return nil, fmt.Errorf("writing tar header: %w", err)
		}

		if header.Typeflag == tar.TypeReg {
			// TODO(#1168): This should be lazy, and not buffer the entire layer contents.
			if _, err = io.CopyN(tarWriter, tarReader, header.Size); err != nil {
				return nil, fmt.Errorf("writing layer file: %w", err)
			}
		}
	}

	if err := tarWriter.Close(); err != nil {
		return nil, err
	}

	b := w.Bytes()
	// gzip the contents, then create the layer
	opener := func() (io.ReadCloser, error) {
		return gzip.ReadCloser(io.NopCloser(bytes.NewReader(b))), nil
	}
	layer, err = tarball.LayerFromOpener(opener)
	if err != nil {
		return nil, fmt.Errorf("creating layer: %w", err)
	}

	return layer, nil
}

// Canonical is a helper function to combine Time and configFile
// to remove any randomness during a docker build.
func Canonical(img v1.Image) (v1.Image, error) {
	// Set all timestamps to 0
	created := time.Time{}
	img, err := Time(img, created)
	if err != nil {
		return nil, err
	}

	cf, err := img.ConfigFile()
	if err != nil {
		return nil, err
	}

	// Get rid of host-dependent random config
	cfg := cf.DeepCopy()

	cfg.Container = ""
	cfg.Config.Hostname = ""
	cfg.DockerVersion = ""

	return ConfigFile(img, cfg)
}

// MediaType modifies the MediaType() of the given image.
func MediaType(img v1.Image, mt types.MediaType) v1.Image {
	return &image{
		base:      img,
		mediaType: &mt,
	}
}

// ConfigMediaType modifies the MediaType() of the given image's Config.
//
// If !mt.IsConfig(), this will be the image's artifactType in any indexes it's a part of.
func ConfigMediaType(img v1.Image, mt types.MediaType) v1.Image {
	return &image{
		base:            img,
		configMediaType: &mt,
	}
}

// IndexMediaType modifies the MediaType() of the given index.
func IndexMediaType(idx v1.ImageIndex, mt types.MediaType) v1.ImageIndex {
	return &index{
		base:      idx,
		mediaType: &mt,
	}
}
 070701000006D6000081A4000000000000000000000001645E367C000013AF000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/rebase.go // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package mutate

import (
	"fmt"

	v1 "github.com/google/go-containerregistry/pkg/v1"
	"github.com/google/go-containerregistry/pkg/v1/empty"
)

// Rebase returns a new v1.Image where the oldBase in orig is replaced by newBase.
func Rebase(orig, oldBase, newBase v1.Image) (v1.Image, error) {
	// Verify that oldBase's layers are present in orig, otherwise orig is
	// not based on oldBase at all.
	origLayers, err := orig.Layers()
	if err != nil {
		return nil, fmt.Errorf("failed to get layers for original: %w", err)
	}
	oldBaseLayers, err := oldBase.Layers()
	if err != nil {
		return nil, err
	}
	if len(oldBaseLayers) > len(origLayers) {
		return nil, fmt.Errorf("image %q is not based on %q (too few layers)", orig, oldBase)
	}
	for i, l := range oldBaseLayers {
		oldLayerDigest, err := l.Digest()
		if err != nil {
			return nil, fmt.Errorf("failed to get digest of layer %d of %q: %w", i, oldBase, err)
		}
		origLayerDigest, err := origLayers[i].Digest()
		if err != nil {
			return nil, fmt.Errorf("failed to get digest of layer %d of %q: %w", i, orig, err)
		}
		if oldLayerDigest != origLayerDigest {
			return nil, fmt.Errorf("image %q is not based on %q (layer %d mismatch)", orig, oldBase, i)
		}
	}

	oldConfig, err := oldBase.ConfigFile()
	if err != nil {
		return nil, fmt.Errorf("failed to get config for old base: %w", err)
	}

	origConfig, err := orig.ConfigFile()
	if err != nil {
		return nil, fmt.Errorf("failed to get config for original: %w", err)
	}

	newConfig, err := newBase.ConfigFile()
	if err != nil {
		return nil, fmt.Errorf("could not get config for new base: %w", err)
	}

	// Stitch together an image that contains:
	// - original image's config
	// - new base image's os/arch properties
	// - new base image's layers + top of original image's layers
	// - new base image's history + top of original image's history
	rebasedImage, err := Config(empty.Image, *origConfig.Config.DeepCopy())
	if err != nil {
		return nil, fmt.Errorf("failed to create empty image with original config: %w", err)
	}

	// Add new config properties from existing images.
	rebasedConfig, err := rebasedImage.ConfigFile()
	if err != nil {
		return nil, fmt.Errorf("could not get config for rebased image: %w", err)
	}
	// OS/Arch properties from new base
	rebasedConfig.Architecture = newConfig.Architecture
	rebasedConfig.OS = newConfig.OS
	rebasedConfig.OSVersion = newConfig.OSVersion

	// Apply config properties to rebased.
	rebasedImage, err = ConfigFile(rebasedImage, rebasedConfig)
	if err != nil {
		return nil, fmt.Errorf("failed to replace config for rebased image: %w", err)
	}

	// Get new base layers and config for history.
	newBaseLayers, err := newBase.Layers()
	if err != nil {
		return nil, fmt.Errorf("could not get new base layers for new base: %w", err)
	}
	// Add new base layers.
	rebasedImage, err = Append(rebasedImage, createAddendums(0, 0, newConfig.History, newBaseLayers)...)
	if err != nil {
		return nil, fmt.Errorf("failed to append new base image: %w", err)
	}

	// Add original layers above the old base.
	rebasedImage, err = Append(rebasedImage, createAddendums(len(oldConfig.History), len(oldBaseLayers)+1, origConfig.History, origLayers)...)
	if err != nil {
		return nil, fmt.Errorf("failed to append original image: %w", err)
	}

	return rebasedImage, nil
}

// createAddendums makes a list of addendums from a history and layers starting from a specific history and layer
// indexes.
func createAddendums(startHistory, startLayer int, history []v1.History, layers []v1.Layer) []Addendum {
	var adds []Addendum
	// History should be a superset of layers; empty layers (e.g. ENV statements) only exist in history.
	// They cannot be iterated identically but must be walked independently, only advancing the iterator for layers
	// when a history entry for a non-empty layer is seen.
	layerIndex := 0
	for historyIndex := range history {
		var layer v1.Layer
		emptyLayer := history[historyIndex].EmptyLayer
		if !emptyLayer {
			layer = layers[layerIndex]
			layerIndex++
		}
		if historyIndex >= startHistory || layerIndex >= startLayer {
			adds = append(adds, Addendum{
				Layer:   layer,
				History: history[historyIndex],
			})
		}
	}
	// In the event history was malformed or non-existent, append the remaining layers.
	for i := layerIndex; i < len(layers); i++ {
		if i >= startLayer {
			adds = append(adds, Addendum{Layer: layers[layerIndex]})
		}
	}

	return adds
}
 070701000006D7000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/partial  070701000006D8000081A4000000000000000000000001645E367C00000D3E000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/partial/README.md    # `partial`

[![GoDoc](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/partial?status.svg)](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/partial)

## Partial Implementations

There are roughly two kinds of image representations: compressed and uncompressed.

The implementations for these kinds of images are almost identical, with the only
major difference being how blobs (config and layers) are fetched. This common
code lives in this package, where you provide a _partial_ implementation of a
compressed or uncompressed image, and you get back a full `v1.Image` implementation.

### Examples

In a registry, blobs are compressed, so it's easiest to implement a `v1.Image` in terms
of compressed layers. `remote.remoteImage` does this by implementing `CompressedImageCore`:

```go
type CompressedImageCore interface {
	RawConfigFile() ([]byte, error)
	MediaType() (types.MediaType, error)
	RawManifest() ([]byte, error)
	LayerByDigest(v1.Hash) (CompressedLayer, error)
}
```

In a tarball, blobs are (often) uncompressed, so it's easiest to implement a `v1.Image` in terms
of uncompressed layers. `tarball.uncompressedImage` does this by implementing `UncompressedImageCore`:

```go
type UncompressedImageCore interface {
	RawConfigFile() ([]byte, error)
	MediaType() (types.MediaType, error)
	LayerByDiffID(v1.Hash) (UncompressedLayer, error)
}
```

## Optional Methods

Where possible, we access some information via optional methods as an optimization.

### [`partial.Descriptor`](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/partial#Descriptor)

There are some properties of a [`Descriptor`](https://github.com/opencontainers/image-spec/blob/master/descriptor.md#properties) that aren't derivable from just image data:

* `MediaType`
* `Platform`
* `URLs`
* `Annotations`

For example, in a `tarball.Image`, there is a `LayerSources` field that contains
an entire layer descriptor with `URLs` information for foreign layers. This
information can be passed through to callers by implementing this optional
`Descriptor` method.

See [`#654`](https://github.com/google/go-containerregistry/pull/654).

### [`partial.UncompressedSize`](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/partial#UncompressedSize)

Usually, you don't need to know the uncompressed size of a layer, since that
information isn't stored in a config file (just he sha256 is needed); however,
there are cases where it is very helpful to know the layer size, e.g. when
writing the uncompressed layer into a tarball.

See [`#655`](https://github.com/google/go-containerregistry/pull/655).

### [`partial.Exists`](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/partial#Exists)

We generally don't care about the existence of something as granular as a
layer, and would rather ensure all the invariants of an image are upheld via
the `validate` package. However, there are situations where we want to do a
quick smoke test to ensure that the underlying storage engine hasn't been
corrupted by something e.g. deleting files or blobs. Thus, we've exposed an
optional `Exists` method that does an existence check without actually reading
any bytes.

The `remote` package implements this via `HEAD` requests.

The `layout` package implements this via `os.Stat`.

See [`#838`](https://github.com/google/go-containerregistry/pull/838).
  070701000006D9000081A4000000000000000000000001645E367C0000150F000000000000000000000000000000000000005F00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/partial/compressed.go    // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package partial

import (
	"io"

	"github.com/google/go-containerregistry/internal/and"
	"github.com/google/go-containerregistry/internal/compression"
	"github.com/google/go-containerregistry/internal/gzip"
	"github.com/google/go-containerregistry/internal/zstd"
	comp "github.com/google/go-containerregistry/pkg/compression"
	v1 "github.com/google/go-containerregistry/pkg/v1"
	"github.com/google/go-containerregistry/pkg/v1/types"
)

// CompressedLayer represents the bare minimum interface a natively
// compressed layer must implement for us to produce a v1.Layer
type CompressedLayer interface {
	// Digest returns the Hash of the compressed layer.
	Digest() (v1.Hash, error)

	// Compressed returns an io.ReadCloser for the compressed layer contents.
	Compressed() (io.ReadCloser, error)

	// Size returns the compressed size of the Layer.
	Size() (int64, error)

	// Returns the mediaType for the compressed Layer
	MediaType() (types.MediaType, error)
}

// compressedLayerExtender implements v1.Image using the compressed base properties.
type compressedLayerExtender struct {
	CompressedLayer
}

// Uncompressed implements v1.Layer
func (cle *compressedLayerExtender) Uncompressed() (io.ReadCloser, error) {
	rc, err := cle.Compressed()
	if err != nil {
		return nil, err
	}

	// Often, the "compressed" bytes are not actually-compressed.
	// Peek at the first two bytes to determine whether it's correct to
	// wrap this with gzip.UnzipReadCloser or zstd.UnzipReadCloser.
	cp, pr, err := compression.PeekCompression(rc)
	if err != nil {
		return nil, err
	}

	prc := &and.ReadCloser{
		Reader:    pr,
		CloseFunc: rc.Close,
	}

	switch cp {
	case comp.GZip:
		return gzip.UnzipReadCloser(prc)
	case comp.ZStd:
		return zstd.UnzipReadCloser(prc)
	default:
		return prc, nil
	}
}

// DiffID implements v1.Layer
func (cle *compressedLayerExtender) DiffID() (v1.Hash, error) {
	// If our nested CompressedLayer implements DiffID,
	// then delegate to it instead.
	if wdi, ok := cle.CompressedLayer.(WithDiffID); ok {
		return wdi.DiffID()
	}
	r, err := cle.Uncompressed()
	if err != nil {
		return v1.Hash{}, err
	}
	defer r.Close()
	h, _, err := v1.SHA256(r)
	return h, err
}

// CompressedToLayer fills in the missing methods from a CompressedLayer so that it implements v1.Layer
func CompressedToLayer(ul CompressedLayer) (v1.Layer, error) {
	return &compressedLayerExtender{ul}, nil
}

// CompressedImageCore represents the base minimum interface a natively
// compressed image must implement for us to produce a v1.Image.
type CompressedImageCore interface {
	ImageCore

	// RawManifest returns the serialized bytes of the manifest.
	RawManifest() ([]byte, error)

	// LayerByDigest is a variation on the v1.Image method, which returns
	// a CompressedLayer instead.
	LayerByDigest(v1.Hash) (CompressedLayer, error)
}

// compressedImageExtender implements v1.Image by extending CompressedImageCore with the
// appropriate methods computed from the minimal core.
type compressedImageExtender struct {
	CompressedImageCore
}

// Assert that our extender type completes the v1.Image interface
var _ v1.Image = (*compressedImageExtender)(nil)

// Digest implements v1.Image
func (i *compressedImageExtender) Digest() (v1.Hash, error) {
	return Digest(i)
}

// ConfigName implements v1.Image
func (i *compressedImageExtender) ConfigName() (v1.Hash, error) {
	return ConfigName(i)
}

// Layers implements v1.Image
func (i *compressedImageExtender) Layers() ([]v1.Layer, error) {
	hs, err := FSLayers(i)
	if err != nil {
		return nil, err
	}
	ls := make([]v1.Layer, 0, len(hs))
	for _, h := range hs {
		l, err := i.LayerByDigest(h)
		if err != nil {
			return nil, err
		}
		ls = append(ls, l)
	}
	return ls, nil
}

// LayerByDigest implements v1.Image
func (i *compressedImageExtender) LayerByDigest(h v1.Hash) (v1.Layer, error) {
	cl, err := i.CompressedImageCore.LayerByDigest(h)
	if err != nil {
		return nil, err
	}
	return CompressedToLayer(cl)
}

// LayerByDiffID implements v1.Image
func (i *compressedImageExtender) LayerByDiffID(h v1.Hash) (v1.Layer, error) {
	h, err := DiffIDToBlob(i, h)
	if err != nil {
		return nil, err
	}
	return i.LayerByDigest(h)
}

// ConfigFile implements v1.Image
func (i *compressedImageExtender) ConfigFile() (*v1.ConfigFile, error) {
	return ConfigFile(i)
}

// Manifest implements v1.Image
func (i *compressedImageExtender) Manifest() (*v1.Manifest, error) {
	return Manifest(i)
}

// Size implements v1.Image
func (i *compressedImageExtender) Size() (int64, error) {
	return Size(i)
}

// CompressedToImage fills in the missing methods from a CompressedImageCore so that it implements v1.Image
func CompressedToImage(cic CompressedImageCore) (v1.Image, error) {
	return &compressedImageExtender{
		CompressedImageCore: cic,
	}, nil
}
 070701000006DA000081A4000000000000000000000001645E367C000002F3000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/partial/doc.go   // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package partial defines methods for building up a v1.Image from
// minimal subsets that are sufficient for defining a v1.Image.
package partial
 070701000006DB000081A4000000000000000000000001645E367C000003E1000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/partial/image.go // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package partial

import (
	"github.com/google/go-containerregistry/pkg/v1/types"
)

// ImageCore is the core set of properties without which we cannot build a v1.Image
type ImageCore interface {
	// RawConfigFile returns the serialized bytes of this image's config file.
	RawConfigFile() ([]byte, error)

	// MediaType of this image's manifest.
	MediaType() (types.MediaType, error)
}
   070701000006DC000081A4000000000000000000000001645E367C00000A94000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/partial/index.go // Copyright 2020 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package partial

import (
	"fmt"

	v1 "github.com/google/go-containerregistry/pkg/v1"
	"github.com/google/go-containerregistry/pkg/v1/match"
)

// FindManifests given a v1.ImageIndex, find the manifests that fit the matcher.
func FindManifests(index v1.ImageIndex, matcher match.Matcher) ([]v1.Descriptor, error) {
	// get the actual manifest list
	indexManifest, err := index.IndexManifest()
	if err != nil {
		return nil, fmt.Errorf("unable to get raw index: %w", err)
	}
	manifests := []v1.Descriptor{}
	// try to get the root of our image
	for _, manifest := range indexManifest.Manifests {
		if matcher(manifest) {
			manifests = append(manifests, manifest)
		}
	}
	return manifests, nil
}

// FindImages given a v1.ImageIndex, find the images that fit the matcher. If a Descriptor
// matches the provider Matcher, but the referenced item is not an Image, ignores it.
// Only returns those that match the Matcher and are images.
func FindImages(index v1.ImageIndex, matcher match.Matcher) ([]v1.Image, error) {
	matches := []v1.Image{}
	manifests, err := FindManifests(index, matcher)
	if err != nil {
		return nil, err
	}
	for _, desc := range manifests {
		// if it is not an image, ignore it
		if !desc.MediaType.IsImage() {
			continue
		}
		img, err := index.Image(desc.Digest)
		if err != nil {
			return nil, err
		}
		matches = append(matches, img)
	}
	return matches, nil
}

// FindIndexes given a v1.ImageIndex, find the indexes that fit the matcher. If a Descriptor
// matches the provider Matcher, but the referenced item is not an Index, ignores it.
// Only returns those that match the Matcher and are indexes.
func FindIndexes(index v1.ImageIndex, matcher match.Matcher) ([]v1.ImageIndex, error) {
	matches := []v1.ImageIndex{}
	manifests, err := FindManifests(index, matcher)
	if err != nil {
		return nil, err
	}
	for _, desc := range manifests {
		if !desc.MediaType.IsIndex() {
			continue
		}
		// if it is not an index, ignore it
		idx, err := index.ImageIndex(desc.Digest)
		if err != nil {
			return nil, err
		}
		matches = append(matches, idx)
	}
	return matches, nil
}
070701000006DD000081A4000000000000000000000001645E367C00001717000000000000000000000000000000000000006100000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/partial/uncompressed.go  // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package partial

import (
	"bytes"
	"io"
	"sync"

	"github.com/google/go-containerregistry/internal/gzip"
	v1 "github.com/google/go-containerregistry/pkg/v1"
	"github.com/google/go-containerregistry/pkg/v1/types"
)

// UncompressedLayer represents the bare minimum interface a natively
// uncompressed layer must implement for us to produce a v1.Layer
type UncompressedLayer interface {
	// DiffID returns the Hash of the uncompressed layer.
	DiffID() (v1.Hash, error)

	// Uncompressed returns an io.ReadCloser for the uncompressed layer contents.
	Uncompressed() (io.ReadCloser, error)

	// Returns the mediaType for the compressed Layer
	MediaType() (types.MediaType, error)
}

// uncompressedLayerExtender implements v1.Image using the uncompressed base properties.
type uncompressedLayerExtender struct {
	UncompressedLayer
	// Memoize size/hash so that the methods aren't twice as
	// expensive as doing this manually.
	hash          v1.Hash
	size          int64
	hashSizeError error
	once          sync.Once
}

// Compressed implements v1.Layer
func (ule *uncompressedLayerExtender) Compressed() (io.ReadCloser, error) {
	u, err := ule.Uncompressed()
	if err != nil {
		return nil, err
	}
	return gzip.ReadCloser(u), nil
}

// Digest implements v1.Layer
func (ule *uncompressedLayerExtender) Digest() (v1.Hash, error) {
	ule.calcSizeHash()
	return ule.hash, ule.hashSizeError
}

// Size implements v1.Layer
func (ule *uncompressedLayerExtender) Size() (int64, error) {
	ule.calcSizeHash()
	return ule.size, ule.hashSizeError
}

func (ule *uncompressedLayerExtender) calcSizeHash() {
	ule.once.Do(func() {
		var r io.ReadCloser
		r, ule.hashSizeError = ule.Compressed()
		if ule.hashSizeError != nil {
			return
		}
		defer r.Close()
		ule.hash, ule.size, ule.hashSizeError = v1.SHA256(r)
	})
}

// UncompressedToLayer fills in the missing methods from an UncompressedLayer so that it implements v1.Layer
func UncompressedToLayer(ul UncompressedLayer) (v1.Layer, error) {
	return &uncompressedLayerExtender{UncompressedLayer: ul}, nil
}

// UncompressedImageCore represents the bare minimum interface a natively
// uncompressed image must implement for us to produce a v1.Image
type UncompressedImageCore interface {
	ImageCore

	// LayerByDiffID is a variation on the v1.Image method, which returns
	// an UncompressedLayer instead.
	LayerByDiffID(v1.Hash) (UncompressedLayer, error)
}

// UncompressedToImage fills in the missing methods from an UncompressedImageCore so that it implements v1.Image.
func UncompressedToImage(uic UncompressedImageCore) (v1.Image, error) {
	return &uncompressedImageExtender{
		UncompressedImageCore: uic,
	}, nil
}

// uncompressedImageExtender implements v1.Image by extending UncompressedImageCore with the
// appropriate methods computed from the minimal core.
type uncompressedImageExtender struct {
	UncompressedImageCore

	lock     sync.Mutex
	manifest *v1.Manifest
}

// Assert that our extender type completes the v1.Image interface
var _ v1.Image = (*uncompressedImageExtender)(nil)

// Digest implements v1.Image
func (i *uncompressedImageExtender) Digest() (v1.Hash, error) {
	return Digest(i)
}

// Manifest implements v1.Image
func (i *uncompressedImageExtender) Manifest() (*v1.Manifest, error) {
	i.lock.Lock()
	defer i.lock.Unlock()
	if i.manifest != nil {
		return i.manifest, nil
	}

	b, err := i.RawConfigFile()
	if err != nil {
		return nil, err
	}

	cfgHash, cfgSize, err := v1.SHA256(bytes.NewReader(b))
	if err != nil {
		return nil, err
	}

	m := &v1.Manifest{
		SchemaVersion: 2,
		MediaType:     types.DockerManifestSchema2,
		Config: v1.Descriptor{
			MediaType: types.DockerConfigJSON,
			Size:      cfgSize,
			Digest:    cfgHash,
		},
	}

	ls, err := i.Layers()
	if err != nil {
		return nil, err
	}

	m.Layers = make([]v1.Descriptor, len(ls))
	for i, l := range ls {
		desc, err := Descriptor(l)
		if err != nil {
			return nil, err
		}

		m.Layers[i] = *desc
	}

	i.manifest = m
	return i.manifest, nil
}

// RawManifest implements v1.Image
func (i *uncompressedImageExtender) RawManifest() ([]byte, error) {
	return RawManifest(i)
}

// Size implements v1.Image
func (i *uncompressedImageExtender) Size() (int64, error) {
	return Size(i)
}

// ConfigName implements v1.Image
func (i *uncompressedImageExtender) ConfigName() (v1.Hash, error) {
	return ConfigName(i)
}

// ConfigFile implements v1.Image
func (i *uncompressedImageExtender) ConfigFile() (*v1.ConfigFile, error) {
	return ConfigFile(i)
}

// Layers implements v1.Image
func (i *uncompressedImageExtender) Layers() ([]v1.Layer, error) {
	diffIDs, err := DiffIDs(i)
	if err != nil {
		return nil, err
	}
	ls := make([]v1.Layer, 0, len(diffIDs))
	for _, h := range diffIDs {
		l, err := i.LayerByDiffID(h)
		if err != nil {
			return nil, err
		}
		ls = append(ls, l)
	}
	return ls, nil
}

// LayerByDiffID implements v1.Image
func (i *uncompressedImageExtender) LayerByDiffID(diffID v1.Hash) (v1.Layer, error) {
	ul, err := i.UncompressedImageCore.LayerByDiffID(diffID)
	if err != nil {
		return nil, err
	}
	return UncompressedToLayer(ul)
}

// LayerByDigest implements v1.Image
func (i *uncompressedImageExtender) LayerByDigest(h v1.Hash) (v1.Layer, error) {
	diffID, err := BlobToDiffID(i, h)
	if err != nil {
		return nil, err
	}
	return i.LayerByDiffID(diffID)
}
 070701000006DE000081A4000000000000000000000001645E367C00002E86000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/partial/with.go  // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package partial

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io"

	v1 "github.com/google/go-containerregistry/pkg/v1"
	"github.com/google/go-containerregistry/pkg/v1/types"
)

// WithRawConfigFile defines the subset of v1.Image used by these helper methods
type WithRawConfigFile interface {
	// RawConfigFile returns the serialized bytes of this image's config file.
	RawConfigFile() ([]byte, error)
}

// ConfigFile is a helper for implementing v1.Image
func ConfigFile(i WithRawConfigFile) (*v1.ConfigFile, error) {
	b, err := i.RawConfigFile()
	if err != nil {
		return nil, err
	}
	return v1.ParseConfigFile(bytes.NewReader(b))
}

// ConfigName is a helper for implementing v1.Image
func ConfigName(i WithRawConfigFile) (v1.Hash, error) {
	b, err := i.RawConfigFile()
	if err != nil {
		return v1.Hash{}, err
	}
	h, _, err := v1.SHA256(bytes.NewReader(b))
	return h, err
}

type configLayer struct {
	hash    v1.Hash
	content []byte
}

// Digest implements v1.Layer
func (cl *configLayer) Digest() (v1.Hash, error) {
	return cl.hash, nil
}

// DiffID implements v1.Layer
func (cl *configLayer) DiffID() (v1.Hash, error) {
	return cl.hash, nil
}

// Uncompressed implements v1.Layer
func (cl *configLayer) Uncompressed() (io.ReadCloser, error) {
	return io.NopCloser(bytes.NewBuffer(cl.content)), nil
}

// Compressed implements v1.Layer
func (cl *configLayer) Compressed() (io.ReadCloser, error) {
	return io.NopCloser(bytes.NewBuffer(cl.content)), nil
}

// Size implements v1.Layer
func (cl *configLayer) Size() (int64, error) {
	return int64(len(cl.content)), nil
}

func (cl *configLayer) MediaType() (types.MediaType, error) {
	// Defaulting this to OCIConfigJSON as it should remain
	// backwards compatible with DockerConfigJSON
	return types.OCIConfigJSON, nil
}

var _ v1.Layer = (*configLayer)(nil)

// withConfigLayer allows partial image implementations to provide a layer
// for their config file.
type withConfigLayer interface {
	ConfigLayer() (v1.Layer, error)
}

// ConfigLayer implements v1.Layer from the raw config bytes.
// This is so that clients (e.g. remote) can access the config as a blob.
//
// Images that want to return a specific layer implementation can implement
// withConfigLayer.
func ConfigLayer(i WithRawConfigFile) (v1.Layer, error) {
	if wcl, ok := unwrap(i).(withConfigLayer); ok {
		return wcl.ConfigLayer()
	}

	h, err := ConfigName(i)
	if err != nil {
		return nil, err
	}
	rcfg, err := i.RawConfigFile()
	if err != nil {
		return nil, err
	}
	return &configLayer{
		hash:    h,
		content: rcfg,
	}, nil
}

// WithConfigFile defines the subset of v1.Image used by these helper methods
type WithConfigFile interface {
	// ConfigFile returns this image's config file.
	ConfigFile() (*v1.ConfigFile, error)
}

// DiffIDs is a helper for implementing v1.Image
func DiffIDs(i WithConfigFile) ([]v1.Hash, error) {
	cfg, err := i.ConfigFile()
	if err != nil {
		return nil, err
	}
	return cfg.RootFS.DiffIDs, nil
}

// RawConfigFile is a helper for implementing v1.Image
func RawConfigFile(i WithConfigFile) ([]byte, error) {
	cfg, err := i.ConfigFile()
	if err != nil {
		return nil, err
	}
	return json.Marshal(cfg)
}

// WithRawManifest defines the subset of v1.Image used by these helper methods
type WithRawManifest interface {
	// RawManifest returns the serialized bytes of this image's config file.
	RawManifest() ([]byte, error)
}

// Digest is a helper for implementing v1.Image
func Digest(i WithRawManifest) (v1.Hash, error) {
	mb, err := i.RawManifest()
	if err != nil {
		return v1.Hash{}, err
	}
	digest, _, err := v1.SHA256(bytes.NewReader(mb))
	return digest, err
}

// Manifest is a helper for implementing v1.Image
func Manifest(i WithRawManifest) (*v1.Manifest, error) {
	b, err := i.RawManifest()
	if err != nil {
		return nil, err
	}
	return v1.ParseManifest(bytes.NewReader(b))
}

// WithManifest defines the subset of v1.Image used by these helper methods
type WithManifest interface {
	// Manifest returns this image's Manifest object.
	Manifest() (*v1.Manifest, error)
}

// RawManifest is a helper for implementing v1.Image
func RawManifest(i WithManifest) ([]byte, error) {
	m, err := i.Manifest()
	if err != nil {
		return nil, err
	}
	return json.Marshal(m)
}

// Size is a helper for implementing v1.Image
func Size(i WithRawManifest) (int64, error) {
	b, err := i.RawManifest()
	if err != nil {
		return -1, err
	}
	return int64(len(b)), nil
}

// FSLayers is a helper for implementing v1.Image
func FSLayers(i WithManifest) ([]v1.Hash, error) {
	m, err := i.Manifest()
	if err != nil {
		return nil, err
	}
	fsl := make([]v1.Hash, len(m.Layers))
	for i, l := range m.Layers {
		fsl[i] = l.Digest
	}
	return fsl, nil
}

// BlobSize is a helper for implementing v1.Image
func BlobSize(i WithManifest, h v1.Hash) (int64, error) {
	d, err := BlobDescriptor(i, h)
	if err != nil {
		return -1, err
	}
	return d.Size, nil
}

// BlobDescriptor is a helper for implementing v1.Image
func BlobDescriptor(i WithManifest, h v1.Hash) (*v1.Descriptor, error) {
	m, err := i.Manifest()
	if err != nil {
		return nil, err
	}

	if m.Config.Digest == h {
		return &m.Config, nil
	}

	for _, l := range m.Layers {
		if l.Digest == h {
			return &l, nil
		}
	}
	return nil, fmt.Errorf("blob %v not found", h)
}

// WithManifestAndConfigFile defines the subset of v1.Image used by these helper methods
type WithManifestAndConfigFile interface {
	WithConfigFile

	// Manifest returns this image's Manifest object.
	Manifest() (*v1.Manifest, error)
}

// BlobToDiffID is a helper for mapping between compressed
// and uncompressed blob hashes.
func BlobToDiffID(i WithManifestAndConfigFile, h v1.Hash) (v1.Hash, error) {
	blobs, err := FSLayers(i)
	if err != nil {
		return v1.Hash{}, err
	}
	diffIDs, err := DiffIDs(i)
	if err != nil {
		return v1.Hash{}, err
	}
	if len(blobs) != len(diffIDs) {
		return v1.Hash{}, fmt.Errorf("mismatched fs layers (%d) and diff ids (%d)", len(blobs), len(diffIDs))
	}
	for i, blob := range blobs {
		if blob == h {
			return diffIDs[i], nil
		}
	}
	return v1.Hash{}, fmt.Errorf("unknown blob %v", h)
}

// DiffIDToBlob is a helper for mapping between uncompressed
// and compressed blob hashes.
func DiffIDToBlob(wm WithManifestAndConfigFile, h v1.Hash) (v1.Hash, error) {
	blobs, err := FSLayers(wm)
	if err != nil {
		return v1.Hash{}, err
	}
	diffIDs, err := DiffIDs(wm)
	if err != nil {
		return v1.Hash{}, err
	}
	if len(blobs) != len(diffIDs) {
		return v1.Hash{}, fmt.Errorf("mismatched fs layers (%d) and diff ids (%d)", len(blobs), len(diffIDs))
	}
	for i, diffID := range diffIDs {
		if diffID == h {
			return blobs[i], nil
		}
	}
	return v1.Hash{}, fmt.Errorf("unknown diffID %v", h)
}

// WithDiffID defines the subset of v1.Layer for exposing the DiffID method.
type WithDiffID interface {
	DiffID() (v1.Hash, error)
}

// withDescriptor allows partial layer implementations to provide a layer
// descriptor to the partial image manifest builder. This allows partial
// uncompressed layers to provide foreign layer metadata like URLs to the
// uncompressed image manifest.
type withDescriptor interface {
	Descriptor() (*v1.Descriptor, error)
}

// Describable represents something for which we can produce a v1.Descriptor.
type Describable interface {
	Digest() (v1.Hash, error)
	MediaType() (types.MediaType, error)
	Size() (int64, error)
}

// Descriptor returns a v1.Descriptor given a Describable. It also encodes
// some logic for unwrapping things that have been wrapped by
// CompressedToLayer, UncompressedToLayer, CompressedToImage, or
// UncompressedToImage.
func Descriptor(d Describable) (*v1.Descriptor, error) {
	// If Describable implements Descriptor itself, return that.
	if wd, ok := unwrap(d).(withDescriptor); ok {
		return wd.Descriptor()
	}

	// If all else fails, compute the descriptor from the individual methods.
	var (
		desc v1.Descriptor
		err  error
	)

	if desc.Size, err = d.Size(); err != nil {
		return nil, err
	}
	if desc.Digest, err = d.Digest(); err != nil {
		return nil, err
	}
	if desc.MediaType, err = d.MediaType(); err != nil {
		return nil, err
	}
	if wat, ok := d.(withArtifactType); ok {
		if desc.ArtifactType, err = wat.ArtifactType(); err != nil {
			return nil, err
		}
	} else {
		if wrm, ok := d.(WithRawManifest); ok && desc.MediaType.IsImage() {
			mf, _ := Manifest(wrm)
			// Failing to parse as a manifest should just be ignored.
			// The manifest might not be valid, and that's okay.
			if mf != nil && !mf.Config.MediaType.IsConfig() {
				desc.ArtifactType = string(mf.Config.MediaType)
			}
		}
	}

	return &desc, nil
}

type withArtifactType interface {
	ArtifactType() (string, error)
}

type withUncompressedSize interface {
	UncompressedSize() (int64, error)
}

// UncompressedSize returns the size of the Uncompressed layer. If the
// underlying implementation doesn't implement UncompressedSize directly,
// this will compute the uncompressedSize by reading everything returned
// by Compressed(). This is potentially expensive and may consume the contents
// for streaming layers.
func UncompressedSize(l v1.Layer) (int64, error) {
	// If the layer implements UncompressedSize itself, return that.
	if wus, ok := unwrap(l).(withUncompressedSize); ok {
		return wus.UncompressedSize()
	}

	// The layer doesn't implement UncompressedSize, we need to compute it.
	rc, err := l.Uncompressed()
	if err != nil {
		return -1, err
	}
	defer rc.Close()

	return io.Copy(io.Discard, rc)
}

type withExists interface {
	Exists() (bool, error)
}

// Exists checks to see if a layer exists. This is a hack to work around the
// mistakes of the partial package. Don't use this.
func Exists(l v1.Layer) (bool, error) {
	// If the layer implements Exists itself, return that.
	if we, ok := unwrap(l).(withExists); ok {
		return we.Exists()
	}

	// The layer doesn't implement Exists, so we hope that calling Compressed()
	// is enough to trigger an error if the layer does not exist.
	rc, err := l.Compressed()
	if err != nil {
		return false, err
	}
	defer rc.Close()

	// We may want to try actually reading a single byte, but if we need to do
	// that, we should just fix this hack.
	return true, nil
}

// Recursively unwrap our wrappers so that we can check for the original implementation.
// We might want to expose this?
func unwrap(i any) any {
	if ule, ok := i.(*uncompressedLayerExtender); ok {
		return unwrap(ule.UncompressedLayer)
	}
	if cle, ok := i.(*compressedLayerExtender); ok {
		return unwrap(cle.CompressedLayer)
	}
	if uie, ok := i.(*uncompressedImageExtender); ok {
		return unwrap(uie.UncompressedImageCore)
	}
	if cie, ok := i.(*compressedImageExtender); ok {
		return unwrap(cie.CompressedImageCore)
	}
	return i
}

// ArtifactType returns the artifact type for the given manifest.
//
// If the manifest reports its own artifact type, that's returned, otherwise
// the manifest is parsed and, if successful, its config.mediaType is returned.
func ArtifactType(w WithManifest) (string, error) {
	if wat, ok := w.(withArtifactType); ok {
		return wat.ArtifactType()
	}
	mf, _ := w.Manifest()
	// Failing to parse as a manifest should just be ignored.
	// The manifest might not be valid, and that's okay.
	if mf != nil && !mf.Config.MediaType.IsConfig() {
		return string(mf.Config.MediaType), nil
	}
	return "", nil
}
  070701000006DF000081A4000000000000000000000001645E367C00000F82000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/platform.go  // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package v1

import (
	"fmt"
	"sort"
	"strings"
)

// Platform represents the target os/arch for an image.
type Platform struct {
	Architecture string   `json:"architecture"`
	OS           string   `json:"os"`
	OSVersion    string   `json:"os.version,omitempty"`
	OSFeatures   []string `json:"os.features,omitempty"`
	Variant      string   `json:"variant,omitempty"`
	Features     []string `json:"features,omitempty"`
}

func (p Platform) String() string {
	if p.OS == "" {
		return ""
	}
	var b strings.Builder
	b.WriteString(p.OS)
	if p.Architecture != "" {
		b.WriteString("/")
		b.WriteString(p.Architecture)
	}
	if p.Variant != "" {
		b.WriteString("/")
		b.WriteString(p.Variant)
	}
	if p.OSVersion != "" {
		b.WriteString(":")
		b.WriteString(p.OSVersion)
	}
	return b.String()
}

// ParsePlatform parses a string representing a Platform, if possible.
func ParsePlatform(s string) (*Platform, error) {
	var p Platform
	parts := strings.Split(strings.TrimSpace(s), ":")
	if len(parts) == 2 {
		p.OSVersion = parts[1]
	}
	parts = strings.Split(parts[0], "/")
	if len(parts) > 0 {
		p.OS = parts[0]
	}
	if len(parts) > 1 {
		p.Architecture = parts[1]
	}
	if len(parts) > 2 {
		p.Variant = parts[2]
	}
	if len(parts) > 3 {
		return nil, fmt.Errorf("too many slashes in platform spec: %s", s)
	}
	return &p, nil
}

// Equals returns true if the given platform is semantically equivalent to this one.
// The order of Features and OSFeatures is not important.
func (p Platform) Equals(o Platform) bool {
	return p.OS == o.OS &&
		p.Architecture == o.Architecture &&
		p.Variant == o.Variant &&
		p.OSVersion == o.OSVersion &&
		stringSliceEqualIgnoreOrder(p.OSFeatures, o.OSFeatures) &&
		stringSliceEqualIgnoreOrder(p.Features, o.Features)
}

// Satisfies returns true if this Platform "satisfies" the given spec Platform.
//
// Note that this is different from Equals and that Satisfies is not reflexive.
//
// The given spec represents "requirements" such that any missing values in the
// spec are not compared.
//
// For OSFeatures and Features, Satisfies will return true if this Platform's
// fields contain a superset of the values in the spec's fields (order ignored).
func (p Platform) Satisfies(spec Platform) bool {
	return satisfies(spec.OS, p.OS) &&
		satisfies(spec.Architecture, p.Architecture) &&
		satisfies(spec.Variant, p.Variant) &&
		satisfies(spec.OSVersion, p.OSVersion) &&
		satisfiesList(spec.OSFeatures, p.OSFeatures) &&
		satisfiesList(spec.Features, p.Features)
}

func satisfies(want, have string) bool {
	return want == "" || want == have
}

func satisfiesList(want, have []string) bool {
	if len(want) == 0 {
		return true
	}

	set := map[string]struct{}{}
	for _, h := range have {
		set[h] = struct{}{}
	}

	for _, w := range want {
		if _, ok := set[w]; !ok {
			return false
		}
	}

	return true
}

// stringSliceEqual compares 2 string slices and returns if their contents are identical.
func stringSliceEqual(a, b []string) bool {
	if len(a) != len(b) {
		return false
	}
	for i, elm := range a {
		if elm != b[i] {
			return false
		}
	}
	return true
}

// stringSliceEqualIgnoreOrder compares 2 string slices and returns if their contents are identical, ignoring order
func stringSliceEqualIgnoreOrder(a, b []string) bool {
	if a != nil && b != nil {
		sort.Strings(a)
		sort.Strings(b)
	}
	return stringSliceEqual(a, b)
}
  070701000006E0000081A4000000000000000000000001645E367C00000380000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/progress.go  // Copyright 2020 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package v1

// Update representation of an update of transfer progress. Some functions
// in this module can take a channel to which updates will be sent while a
// transfer is in progress.
// +k8s:deepcopy-gen=false
type Update struct {
	Total    int64
	Complete int64
	Error    error
}
070701000006E1000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote   070701000006E2000081A4000000000000000000000001645E367C00001235000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/README.md # `remote`

[![GoDoc](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/remote?status.svg)](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/remote)

The `remote` package implements a client for accessing a registry,
per the [OCI distribution spec](https://github.com/opencontainers/distribution-spec/blob/master/spec.md).

It leans heavily on the lower level [`transport`](/pkg/v1/remote/transport) package, which handles the
authentication handshake and structured errors.

## Usage

```go
package main

import (
	"github.com/google/go-containerregistry/pkg/authn"
	"github.com/google/go-containerregistry/pkg/name"
	"github.com/google/go-containerregistry/pkg/v1/remote"
)

func main() {
	ref, err := name.ParseReference("gcr.io/google-containers/pause")
	if err != nil {
		panic(err)
	}

	img, err := remote.Image(ref, remote.WithAuthFromKeychain(authn.DefaultKeychain))
	if err != nil {
		panic(err)
	}

	// do stuff with img
}
```

## Structure

<p align="center">
  <img src="/images/remote.dot.svg" />
</p>


## Background

There are a lot of confusingly similar terms that come up when talking about images in registries.

### Anatomy of an image

In general...

* A tag refers to an image manifest.
* An image manifest references a config file and an orderered list of _compressed_ layers by sha256 digest.
* A config file references an ordered list of _uncompressed_ layers by sha256 digest and contains runtime configuration.
* The sha256 digest of the config file is the [image id](https://github.com/opencontainers/image-spec/blob/master/config.md#imageid) for the image.

For example, an image with two layers would look something like this:

![image anatomy](/images/image-anatomy.dot.svg)

### Anatomy of an index

In the normal case, an [index](https://github.com/opencontainers/image-spec/blob/master/image-index.md) is used to represent a multi-platform image.
This was the original use case for a [manifest
list](https://docs.docker.com/registry/spec/manifest-v2-2/#manifest-list).

![image index anatomy](/images/index-anatomy.dot.svg)

It is possible for an index to reference another index, per the OCI
[image-spec](https://github.com/opencontainers/image-spec/blob/master/media-types.md#compatibility-matrix).
In theory, both an image and image index can reference arbitrary things via
[descriptors](https://github.com/opencontainers/image-spec/blob/master/descriptor.md),
e.g. see the [image layout
example](https://github.com/opencontainers/image-spec/blob/master/image-layout.md#index-example),
which references an application/xml file from an image index.

That could look something like this:

![strange image index anatomy](/images/index-anatomy-strange.dot.svg)

Using a recursive index like this might not be possible with all registries,
but this flexibility allows for some interesting applications, e.g. the
[OCI Artifacts](https://github.com/opencontainers/artifacts) effort.

### Anatomy of an image upload

The structure of an image requires a delicate ordering when uploading an image to a registry.
Below is a (slightly simplified) figure that describes how an image is prepared for upload
to a registry and how the data flows between various artifacts:

![upload](/images/upload.dot.svg)

Note that:

* A config file references the uncompressed layer contents by sha256.
* A manifest references the compressed layer contents by sha256 and the size of the layer.
* A manifest references the config file contents by sha256 and the size of the file.

It follows that during an upload, we need to upload layers before the config file,
and we need to upload the config file before the manifest.

Sometimes, we know all of this information ahead of time, (e.g. when copying from remote.Image),
so the ordering is less important.

In other cases, e.g. when using a [`stream.Layer`](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/stream#Layer),
we can't compute anything until we have already uploaded the layer, so we need to be careful about ordering.

## Caveats

### schema 1

This package does not support schema 1 images, see [`#377`](https://github.com/google/go-containerregistry/issues/377),
however, it's possible to do _something_ useful with them via [`remote.Get`](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/remote#Get),
which doesn't try to interpret what is returned by the registry.

[`crane.Copy`](https://godoc.org/github.com/google/go-containerregistry/pkg/crane#Copy) takes advantage of this to implement support for copying schema 1 images,
see [here](https://github.com/google/go-containerregistry/blob/main/pkg/internal/legacy/copy.go).
   070701000006E3000081A4000000000000000000000001645E367C00000E09000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/catalog.go    // Copyright 2019 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package remote

import (
	"context"
	"encoding/json"
	"fmt"
	"net/http"
	"net/url"

	"github.com/google/go-containerregistry/pkg/name"
	"github.com/google/go-containerregistry/pkg/v1/remote/transport"
)

type catalog struct {
	Repos []string `json:"repositories"`
}

// CatalogPage calls /_catalog, returning the list of repositories on the registry.
func CatalogPage(target name.Registry, last string, n int, options ...Option) ([]string, error) {
	o, err := makeOptions(target, options...)
	if err != nil {
		return nil, err
	}

	scopes := []string{target.Scope(transport.PullScope)}
	tr, err := transport.NewWithContext(o.context, target, o.auth, o.transport, scopes)
	if err != nil {
		return nil, err
	}

	query := fmt.Sprintf("last=%s&n=%d", url.QueryEscape(last), n)

	uri := url.URL{
		Scheme:   target.Scheme(),
		Host:     target.RegistryStr(),
		Path:     "/v2/_catalog",
		RawQuery: query,
	}

	client := http.Client{Transport: tr}
	req, err := http.NewRequest(http.MethodGet, uri.String(), nil)
	if err != nil {
		return nil, err
	}
	resp, err := client.Do(req.WithContext(o.context))
	if err != nil {
		return nil, err
	}
	defer resp.Body.Close()

	if err := transport.CheckError(resp, http.StatusOK); err != nil {
		return nil, err
	}

	var parsed catalog
	if err := json.NewDecoder(resp.Body).Decode(&parsed); err != nil {
		return nil, err
	}

	return parsed.Repos, nil
}

// Catalog calls /_catalog, returning the list of repositories on the registry.
func Catalog(ctx context.Context, target name.Registry, options ...Option) ([]string, error) {
	o, err := makeOptions(target, options...)
	if err != nil {
		return nil, err
	}

	scopes := []string{target.Scope(transport.PullScope)}
	tr, err := transport.NewWithContext(o.context, target, o.auth, o.transport, scopes)
	if err != nil {
		return nil, err
	}

	uri := &url.URL{
		Scheme: target.Scheme(),
		Host:   target.RegistryStr(),
		Path:   "/v2/_catalog",
	}

	if o.pageSize > 0 {
		uri.RawQuery = fmt.Sprintf("n=%d", o.pageSize)
	}

	client := http.Client{Transport: tr}

	// WithContext overrides the ctx passed directly.
	if o.context != context.Background() {
		ctx = o.context
	}

	var (
		parsed   catalog
		repoList []string
	)

	// get responses until there is no next page
	for {
		select {
		case <-ctx.Done():
			return nil, ctx.Err()
		default:
		}

		req, err := http.NewRequest("GET", uri.String(), nil)
		if err != nil {
			return nil, err
		}
		req = req.WithContext(ctx)

		resp, err := client.Do(req)
		if err != nil {
			return nil, err
		}

		if err := transport.CheckError(resp, http.StatusOK); err != nil {
			return nil, err
		}

		if err := json.NewDecoder(resp.Body).Decode(&parsed); err != nil {
			return nil, err
		}
		if err := resp.Body.Close(); err != nil {
			return nil, err
		}

		repoList = append(repoList, parsed.Repos...)

		uri, err = getNextPageURL(resp)
		if err != nil {
			return nil, err
		}
		// no next page
		if uri == nil {
			break
		}
	}
	return repoList, nil
}
   070701000006E4000081A4000000000000000000000001645E367C00000A61000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/check.go  // Copyright 2019 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package remote

import (
	"context"
	"fmt"
	"net/http"

	"github.com/google/go-containerregistry/pkg/authn"
	"github.com/google/go-containerregistry/pkg/name"
	"github.com/google/go-containerregistry/pkg/v1/remote/transport"
)

// CheckPushPermission returns an error if the given keychain cannot authorize
// a push operation to the given ref.
//
// This can be useful to check whether the caller has permission to push an
// image before doing work to construct the image.
//
// TODO(#412): Remove the need for this method.
func CheckPushPermission(ref name.Reference, kc authn.Keychain, t http.RoundTripper) error {
	auth, err := kc.Resolve(ref.Context().Registry)
	if err != nil {
		return fmt.Errorf("resolving authorization for %v failed: %w", ref.Context().Registry, err)
	}

	scopes := []string{ref.Scope(transport.PushScope)}
	tr, err := transport.NewWithContext(context.TODO(), ref.Context().Registry, auth, t, scopes)
	if err != nil {
		return fmt.Errorf("creating push check transport for %v failed: %w", ref.Context().Registry, err)
	}
	// TODO(jasonhall): Against GCR, just doing the token handshake is
	// enough, but this doesn't extend to Dockerhub
	// (https://github.com/docker/hub-feedback/issues/1771), so we actually
	// need to initiate an upload to tell whether the credentials can
	// authorize a push. Figure out how to return early here when we can,
	// to avoid a roundtrip for spec-compliant registries.
	w := writer{
		repo:   ref.Context(),
		client: &http.Client{Transport: tr},
	}
	loc, _, err := w.initiateUpload(context.Background(), "", "", "")
	if loc != "" {
		// Since we're only initiating the upload to check whether we
		// can, we should attempt to cancel it, in case initiating
		// reserves some resources on the server. We shouldn't wait for
		// cancelling to complete, and we don't care if it fails.
		go w.cancelUpload(loc)
	}
	return err
}

func (w *writer) cancelUpload(loc string) {
	req, err := http.NewRequest(http.MethodDelete, loc, nil)
	if err != nil {
		return
	}
	_, _ = w.client.Do(req)
}
   070701000006E5000081A4000000000000000000000001645E367C00000771000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/delete.go // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package remote

import (
	"fmt"
	"net/http"
	"net/url"

	"github.com/google/go-containerregistry/pkg/name"
	"github.com/google/go-containerregistry/pkg/v1/remote/transport"
)

// Delete removes the specified image reference from the remote registry.
func Delete(ref name.Reference, options ...Option) error {
	o, err := makeOptions(ref.Context(), options...)
	if err != nil {
		return err
	}
	scopes := []string{ref.Scope(transport.DeleteScope)}
	tr, err := transport.NewWithContext(o.context, ref.Context().Registry, o.auth, o.transport, scopes)
	if err != nil {
		return err
	}
	c := &http.Client{Transport: tr}

	u := url.URL{
		Scheme: ref.Context().Registry.Scheme(),
		Host:   ref.Context().RegistryStr(),
		Path:   fmt.Sprintf("/v2/%s/manifests/%s", ref.Context().RepositoryStr(), ref.Identifier()),
	}

	req, err := http.NewRequest(http.MethodDelete, u.String(), nil)
	if err != nil {
		return err
	}

	resp, err := c.Do(req.WithContext(o.context))
	if err != nil {
		return err
	}
	defer resp.Body.Close()

	return transport.CheckError(resp, http.StatusOK, http.StatusAccepted)

	// TODO(jason): If the manifest had a `subject`, and if the registry
	// doesn't support Referrers, update the index pointed to by the
	// subject's fallback tag to remove the descriptor for this manifest.
}
   070701000006E6000081A4000000000000000000000001645E367C00003DE8000000000000000000000000000000000000005E00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/descriptor.go // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package remote

import (
	"bytes"
	"context"
	"encoding/json"
	"errors"
	"fmt"
	"io"
	"net/http"
	"net/url"
	"strings"

	"github.com/google/go-containerregistry/internal/redact"
	"github.com/google/go-containerregistry/internal/verify"
	"github.com/google/go-containerregistry/pkg/logs"
	"github.com/google/go-containerregistry/pkg/name"
	v1 "github.com/google/go-containerregistry/pkg/v1"
	"github.com/google/go-containerregistry/pkg/v1/partial"
	"github.com/google/go-containerregistry/pkg/v1/remote/transport"
	"github.com/google/go-containerregistry/pkg/v1/types"
)

// ErrSchema1 indicates that we received a schema1 manifest from the registry.
// This library doesn't have plans to support this legacy image format:
// https://github.com/google/go-containerregistry/issues/377
type ErrSchema1 struct {
	schema string
}

// newErrSchema1 returns an ErrSchema1 with the unexpected MediaType.
func newErrSchema1(schema types.MediaType) error {
	return &ErrSchema1{
		schema: string(schema),
	}
}

// Error implements error.
func (e *ErrSchema1) Error() string {
	return fmt.Sprintf("unsupported MediaType: %q, see https://github.com/google/go-containerregistry/issues/377", e.schema)
}

// Descriptor provides access to metadata about remote artifact and accessors
// for efficiently converting it into a v1.Image or v1.ImageIndex.
type Descriptor struct {
	fetcher
	v1.Descriptor
	Manifest []byte

	// So we can share this implementation with Image.
	platform v1.Platform
}

// RawManifest exists to satisfy the Taggable interface.
func (d *Descriptor) RawManifest() ([]byte, error) {
	return d.Manifest, nil
}

// Get returns a remote.Descriptor for the given reference. The response from
// the registry is left un-interpreted, for the most part. This is useful for
// querying what kind of artifact a reference represents.
//
// See Head if you don't need the response body.
func Get(ref name.Reference, options ...Option) (*Descriptor, error) {
	acceptable := []types.MediaType{
		// Just to look at them.
		types.DockerManifestSchema1,
		types.DockerManifestSchema1Signed,
	}
	acceptable = append(acceptable, acceptableImageMediaTypes...)
	acceptable = append(acceptable, acceptableIndexMediaTypes...)
	return get(ref, acceptable, options...)
}

// Head returns a v1.Descriptor for the given reference by issuing a HEAD
// request.
//
// Note that the server response will not have a body, so any errors encountered
// should be retried with Get to get more details.
func Head(ref name.Reference, options ...Option) (*v1.Descriptor, error) {
	acceptable := []types.MediaType{
		// Just to look at them.
		types.DockerManifestSchema1,
		types.DockerManifestSchema1Signed,
	}
	acceptable = append(acceptable, acceptableImageMediaTypes...)
	acceptable = append(acceptable, acceptableIndexMediaTypes...)

	o, err := makeOptions(ref.Context(), options...)
	if err != nil {
		return nil, err
	}

	f, err := makeFetcher(ref, o)
	if err != nil {
		return nil, err
	}

	return f.headManifest(ref, acceptable)
}

// Handle options and fetch the manifest with the acceptable MediaTypes in the
// Accept header.
func get(ref name.Reference, acceptable []types.MediaType, options ...Option) (*Descriptor, error) {
	o, err := makeOptions(ref.Context(), options...)
	if err != nil {
		return nil, err
	}
	f, err := makeFetcher(ref, o)
	if err != nil {
		return nil, err
	}
	b, desc, err := f.fetchManifest(ref, acceptable)
	if err != nil {
		return nil, err
	}
	return &Descriptor{
		fetcher:    *f,
		Manifest:   b,
		Descriptor: *desc,
		platform:   o.platform,
	}, nil
}

// Image converts the Descriptor into a v1.Image.
//
// If the fetched artifact is already an image, it will just return it.
//
// If the fetched artifact is an index, it will attempt to resolve the index to
// a child image with the appropriate platform.
//
// See WithPlatform to set the desired platform.
func (d *Descriptor) Image() (v1.Image, error) {
	switch d.MediaType {
	case types.DockerManifestSchema1, types.DockerManifestSchema1Signed:
		// We don't care to support schema 1 images:
		// https://github.com/google/go-containerregistry/issues/377
		return nil, newErrSchema1(d.MediaType)
	case types.OCIImageIndex, types.DockerManifestList:
		// We want an image but the registry has an index, resolve it to an image.
		return d.remoteIndex().imageByPlatform(d.platform)
	case types.OCIManifestSchema1, types.DockerManifestSchema2:
		// These are expected. Enumerated here to allow a default case.
	default:
		// We could just return an error here, but some registries (e.g. static
		// registries) don't set the Content-Type headers correctly, so instead...
		logs.Warn.Printf("Unexpected media type for Image(): %s", d.MediaType)
	}

	// Wrap the v1.Layers returned by this v1.Image in a hint for downstream
	// remote.Write calls to facilitate cross-repo "mounting".
	imgCore, err := partial.CompressedToImage(d.remoteImage())
	if err != nil {
		return nil, err
	}
	return &mountableImage{
		Image:     imgCore,
		Reference: d.Ref,
	}, nil
}

// ImageIndex converts the Descriptor into a v1.ImageIndex.
func (d *Descriptor) ImageIndex() (v1.ImageIndex, error) {
	switch d.MediaType {
	case types.DockerManifestSchema1, types.DockerManifestSchema1Signed:
		// We don't care to support schema 1 images:
		// https://github.com/google/go-containerregistry/issues/377
		return nil, newErrSchema1(d.MediaType)
	case types.OCIManifestSchema1, types.DockerManifestSchema2:
		// We want an index but the registry has an image, nothing we can do.
		return nil, fmt.Errorf("unexpected media type for ImageIndex(): %s; call Image() instead", d.MediaType)
	case types.OCIImageIndex, types.DockerManifestList:
		// These are expected.
	default:
		// We could just return an error here, but some registries (e.g. static
		// registries) don't set the Content-Type headers correctly, so instead...
		logs.Warn.Printf("Unexpected media type for ImageIndex(): %s", d.MediaType)
	}
	return d.remoteIndex(), nil
}

func (d *Descriptor) remoteImage() *remoteImage {
	return &remoteImage{
		fetcher:    d.fetcher,
		manifest:   d.Manifest,
		mediaType:  d.MediaType,
		descriptor: &d.Descriptor,
	}
}

func (d *Descriptor) remoteIndex() *remoteIndex {
	return &remoteIndex{
		fetcher:    d.fetcher,
		manifest:   d.Manifest,
		mediaType:  d.MediaType,
		descriptor: &d.Descriptor,
	}
}

// fetcher implements methods for reading from a registry.
type fetcher struct {
	Ref     name.Reference
	Client  *http.Client
	context context.Context
}

func makeFetcher(ref name.Reference, o *options) (*fetcher, error) {
	tr, err := transport.NewWithContext(o.context, ref.Context().Registry, o.auth, o.transport, []string{ref.Scope(transport.PullScope)})
	if err != nil {
		return nil, err
	}
	return &fetcher{
		Ref:     ref,
		Client:  &http.Client{Transport: tr},
		context: o.context,
	}, nil
}

// url returns a url.Url for the specified path in the context of this remote image reference.
func (f *fetcher) url(resource, identifier string) url.URL {
	return url.URL{
		Scheme: f.Ref.Context().Registry.Scheme(),
		Host:   f.Ref.Context().RegistryStr(),
		Path:   fmt.Sprintf("/v2/%s/%s/%s", f.Ref.Context().RepositoryStr(), resource, identifier),
	}
}

// https://github.com/opencontainers/distribution-spec/blob/main/spec.md#referrers-tag-schema
func fallbackTag(d name.Digest) name.Tag {
	return d.Context().Tag(strings.Replace(d.DigestStr(), ":", "-", 1))
}

func (f *fetcher) fetchReferrers(ctx context.Context, filter map[string]string, d name.Digest) (*v1.IndexManifest, error) {
	// Check the Referrers API endpoint first.
	u := f.url("referrers", d.DigestStr())
	req, err := http.NewRequestWithContext(ctx, http.MethodGet, u.String(), nil)
	if err != nil {
		return nil, err
	}
	req.Header.Set("Accept", string(types.OCIImageIndex))

	resp, err := f.Client.Do(req)
	if err != nil {
		return nil, err
	}
	defer resp.Body.Close()

	if err := transport.CheckError(resp, http.StatusOK, http.StatusNotFound, http.StatusBadRequest); err != nil {
		return nil, err
	}
	if resp.StatusCode == http.StatusOK {
		var im v1.IndexManifest
		if err := json.NewDecoder(resp.Body).Decode(&im); err != nil {
			return nil, err
		}
		return filterReferrersResponse(filter, &im), nil
	}

	// The registry doesn't support the Referrers API endpoint, so we'll use the fallback tag scheme.
	b, _, err := f.fetchManifest(fallbackTag(d), []types.MediaType{types.OCIImageIndex})
	if err != nil {
		return nil, err
	}
	var terr *transport.Error
	if ok := errors.As(err, &terr); ok && terr.StatusCode == http.StatusNotFound {
		// Not found just means there are no attachments yet. Start with an empty manifest.
		return &v1.IndexManifest{MediaType: types.OCIImageIndex}, nil
	}

	var im v1.IndexManifest
	if err := json.Unmarshal(b, &im); err != nil {
		return nil, err
	}

	return filterReferrersResponse(filter, &im), nil
}

func (f *fetcher) fetchManifest(ref name.Reference, acceptable []types.MediaType) ([]byte, *v1.Descriptor, error) {
	u := f.url("manifests", ref.Identifier())
	req, err := http.NewRequest(http.MethodGet, u.String(), nil)
	if err != nil {
		return nil, nil, err
	}
	accept := []string{}
	for _, mt := range acceptable {
		accept = append(accept, string(mt))
	}
	req.Header.Set("Accept", strings.Join(accept, ","))

	resp, err := f.Client.Do(req.WithContext(f.context))
	if err != nil {
		return nil, nil, err
	}
	defer resp.Body.Close()

	if err := transport.CheckError(resp, http.StatusOK); err != nil {
		return nil, nil, err
	}

	manifest, err := io.ReadAll(resp.Body)
	if err != nil {
		return nil, nil, err
	}

	digest, size, err := v1.SHA256(bytes.NewReader(manifest))
	if err != nil {
		return nil, nil, err
	}

	mediaType := types.MediaType(resp.Header.Get("Content-Type"))
	contentDigest, err := v1.NewHash(resp.Header.Get("Docker-Content-Digest"))
	if err == nil && mediaType == types.DockerManifestSchema1Signed {
		// If we can parse the digest from the header, and it's a signed schema 1
		// manifest, let's use that for the digest to appease older registries.
		digest = contentDigest
	}

	// Validate the digest matches what we asked for, if pulling by digest.
	if dgst, ok := ref.(name.Digest); ok {
		if digest.String() != dgst.DigestStr() {
			return nil, nil, fmt.Errorf("manifest digest: %q does not match requested digest: %q for %q", digest, dgst.DigestStr(), f.Ref)
		}
	}

	var artifactType string
	mf, _ := v1.ParseManifest(bytes.NewReader(manifest))
	// Failing to parse as a manifest should just be ignored.
	// The manifest might not be valid, and that's okay.
	if mf != nil && !mf.Config.MediaType.IsConfig() {
		artifactType = string(mf.Config.MediaType)
	}

	// Do nothing for tags; I give up.
	//
	// We'd like to validate that the "Docker-Content-Digest" header matches what is returned by the registry,
	// but so many registries implement this incorrectly that it's not worth checking.
	//
	// For reference:
	// https://github.com/GoogleContainerTools/kaniko/issues/298

	// Return all this info since we have to calculate it anyway.
	desc := v1.Descriptor{
		Digest:       digest,
		Size:         size,
		MediaType:    mediaType,
		ArtifactType: artifactType,
	}

	return manifest, &desc, nil
}

func (f *fetcher) headManifest(ref name.Reference, acceptable []types.MediaType) (*v1.Descriptor, error) {
	u := f.url("manifests", ref.Identifier())
	req, err := http.NewRequest(http.MethodHead, u.String(), nil)
	if err != nil {
		return nil, err
	}
	accept := []string{}
	for _, mt := range acceptable {
		accept = append(accept, string(mt))
	}
	req.Header.Set("Accept", strings.Join(accept, ","))

	resp, err := f.Client.Do(req.WithContext(f.context))
	if err != nil {
		return nil, err
	}
	defer resp.Body.Close()

	if err := transport.CheckError(resp, http.StatusOK); err != nil {
		return nil, err
	}

	mth := resp.Header.Get("Content-Type")
	if mth == "" {
		return nil, fmt.Errorf("HEAD %s: response did not include Content-Type header", u.String())
	}
	mediaType := types.MediaType(mth)

	size := resp.ContentLength
	if size == -1 {
		return nil, fmt.Errorf("GET %s: response did not include Content-Length header", u.String())
	}

	dh := resp.Header.Get("Docker-Content-Digest")
	if dh == "" {
		return nil, fmt.Errorf("HEAD %s: response did not include Docker-Content-Digest header", u.String())
	}
	digest, err := v1.NewHash(dh)
	if err != nil {
		return nil, err
	}

	// Validate the digest matches what we asked for, if pulling by digest.
	if dgst, ok := ref.(name.Digest); ok {
		if digest.String() != dgst.DigestStr() {
			return nil, fmt.Errorf("manifest digest: %q does not match requested digest: %q for %q", digest, dgst.DigestStr(), f.Ref)
		}
	}

	// Return all this info since we have to calculate it anyway.
	return &v1.Descriptor{
		Digest:    digest,
		Size:      size,
		MediaType: mediaType,
	}, nil
}

func (f *fetcher) fetchBlob(ctx context.Context, size int64, h v1.Hash) (io.ReadCloser, error) {
	u := f.url("blobs", h.String())
	req, err := http.NewRequest(http.MethodGet, u.String(), nil)
	if err != nil {
		return nil, err
	}

	resp, err := f.Client.Do(req.WithContext(ctx))
	if err != nil {
		return nil, redact.Error(err)
	}

	if err := transport.CheckError(resp, http.StatusOK); err != nil {
		resp.Body.Close()
		return nil, err
	}

	// Do whatever we can.
	// If we have an expected size and Content-Length doesn't match, return an error.
	// If we don't have an expected size and we do have a Content-Length, use Content-Length.
	if hsize := resp.ContentLength; hsize != -1 {
		if size == verify.SizeUnknown {
			size = hsize
		} else if hsize != size {
			return nil, fmt.Errorf("GET %s: Content-Length header %d does not match expected size %d", u.String(), hsize, size)
		}
	}

	return verify.ReadCloser(resp.Body, size, h)
}

func (f *fetcher) headBlob(h v1.Hash) (*http.Response, error) {
	u := f.url("blobs", h.String())
	req, err := http.NewRequest(http.MethodHead, u.String(), nil)
	if err != nil {
		return nil, err
	}

	resp, err := f.Client.Do(req.WithContext(f.context))
	if err != nil {
		return nil, redact.Error(err)
	}

	if err := transport.CheckError(resp, http.StatusOK); err != nil {
		resp.Body.Close()
		return nil, err
	}

	return resp, nil
}

func (f *fetcher) blobExists(h v1.Hash) (bool, error) {
	u := f.url("blobs", h.String())
	req, err := http.NewRequest(http.MethodHead, u.String(), nil)
	if err != nil {
		return false, err
	}

	resp, err := f.Client.Do(req.WithContext(f.context))
	if err != nil {
		return false, redact.Error(err)
	}
	defer resp.Body.Close()

	if err := transport.CheckError(resp, http.StatusOK, http.StatusNotFound); err != nil {
		return false, err
	}

	return resp.StatusCode == http.StatusOK, nil
}

// If filter applied, filter out by artifactType.
// See https://github.com/opencontainers/distribution-spec/blob/main/spec.md#listing-referrers
func filterReferrersResponse(filter map[string]string, origIndex *v1.IndexManifest) *v1.IndexManifest {
	newIndex := origIndex
	if filter == nil {
		return newIndex
	}
	if v, ok := filter["artifactType"]; ok {
		tmp := []v1.Descriptor{}
		for _, desc := range newIndex.Manifests {
			if desc.ArtifactType == v {
				tmp = append(tmp, desc)
			}
		}
		newIndex.Manifests = tmp
	}
	return newIndex
}
070701000006E7000081A4000000000000000000000001645E367C000002D7000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/doc.go    // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package remote provides facilities for reading/writing v1.Images from/to
// a remote image registry.
package remote
 070701000006E8000081A4000000000000000000000001645E367C00001B67000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/image.go  // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package remote

import (
	"bytes"
	"io"
	"net/http"
	"net/url"
	"sync"

	"github.com/google/go-containerregistry/internal/redact"
	"github.com/google/go-containerregistry/internal/verify"
	"github.com/google/go-containerregistry/pkg/name"
	v1 "github.com/google/go-containerregistry/pkg/v1"
	"github.com/google/go-containerregistry/pkg/v1/partial"
	"github.com/google/go-containerregistry/pkg/v1/remote/transport"
	"github.com/google/go-containerregistry/pkg/v1/types"
)

var acceptableImageMediaTypes = []types.MediaType{
	types.DockerManifestSchema2,
	types.OCIManifestSchema1,
}

// remoteImage accesses an image from a remote registry
type remoteImage struct {
	fetcher
	manifestLock sync.Mutex // Protects manifest
	manifest     []byte
	configLock   sync.Mutex // Protects config
	config       []byte
	mediaType    types.MediaType
	descriptor   *v1.Descriptor
}

func (r *remoteImage) ArtifactType() (string, error) {
	// kind of a hack, but RawManifest does appropriate locking/memoization
	// and makes sure r.descriptor is populated.
	if _, err := r.RawManifest(); err != nil {
		return "", err
	}
	return r.descriptor.ArtifactType, nil
}

var _ partial.CompressedImageCore = (*remoteImage)(nil)

// Image provides access to a remote image reference.
func Image(ref name.Reference, options ...Option) (v1.Image, error) {
	desc, err := Get(ref, options...)
	if err != nil {
		return nil, err
	}

	return desc.Image()
}

func (r *remoteImage) MediaType() (types.MediaType, error) {
	if string(r.mediaType) != "" {
		return r.mediaType, nil
	}
	return types.DockerManifestSchema2, nil
}

func (r *remoteImage) RawManifest() ([]byte, error) {
	r.manifestLock.Lock()
	defer r.manifestLock.Unlock()
	if r.manifest != nil {
		return r.manifest, nil
	}

	// NOTE(jonjohnsonjr): We should never get here because the public entrypoints
	// do type-checking via remote.Descriptor. I've left this here for tests that
	// directly instantiate a remoteImage.
	manifest, desc, err := r.fetchManifest(r.Ref, acceptableImageMediaTypes)
	if err != nil {
		return nil, err
	}

	if r.descriptor == nil {
		r.descriptor = desc
	}
	r.mediaType = desc.MediaType
	r.manifest = manifest
	return r.manifest, nil
}

func (r *remoteImage) RawConfigFile() ([]byte, error) {
	r.configLock.Lock()
	defer r.configLock.Unlock()
	if r.config != nil {
		return r.config, nil
	}

	m, err := partial.Manifest(r)
	if err != nil {
		return nil, err
	}

	if m.Config.Data != nil {
		if err := verify.Descriptor(m.Config); err != nil {
			return nil, err
		}
		r.config = m.Config.Data
		return r.config, nil
	}

	body, err := r.fetchBlob(r.context, m.Config.Size, m.Config.Digest)
	if err != nil {
		return nil, err
	}
	defer body.Close()

	r.config, err = io.ReadAll(body)
	if err != nil {
		return nil, err
	}
	return r.config, nil
}

// Descriptor retains the original descriptor from an index manifest.
// See partial.Descriptor.
func (r *remoteImage) Descriptor() (*v1.Descriptor, error) {
	// kind of a hack, but RawManifest does appropriate locking/memoization
	// and makes sure r.descriptor is populated.
	_, err := r.RawManifest()
	return r.descriptor, err
}

// remoteImageLayer implements partial.CompressedLayer
type remoteImageLayer struct {
	ri     *remoteImage
	digest v1.Hash
}

// Digest implements partial.CompressedLayer
func (rl *remoteImageLayer) Digest() (v1.Hash, error) {
	return rl.digest, nil
}

// Compressed implements partial.CompressedLayer
func (rl *remoteImageLayer) Compressed() (io.ReadCloser, error) {
	urls := []url.URL{rl.ri.url("blobs", rl.digest.String())}

	// Add alternative layer sources from URLs (usually none).
	d, err := partial.BlobDescriptor(rl, rl.digest)
	if err != nil {
		return nil, err
	}

	if d.Data != nil {
		return verify.ReadCloser(io.NopCloser(bytes.NewReader(d.Data)), d.Size, d.Digest)
	}

	// We don't want to log binary layers -- this can break terminals.
	ctx := redact.NewContext(rl.ri.context, "omitting binary blobs from logs")

	for _, s := range d.URLs {
		u, err := url.Parse(s)
		if err != nil {
			return nil, err
		}
		urls = append(urls, *u)
	}

	// The lastErr for most pulls will be the same (the first error), but for
	// foreign layers we'll want to surface the last one, since we try to pull
	// from the registry first, which would often fail.
	// TODO: Maybe we don't want to try pulling from the registry first?
	var lastErr error
	for _, u := range urls {
		req, err := http.NewRequest(http.MethodGet, u.String(), nil)
		if err != nil {
			return nil, err
		}

		resp, err := rl.ri.Client.Do(req.WithContext(ctx))
		if err != nil {
			lastErr = err
			continue
		}

		if err := transport.CheckError(resp, http.StatusOK); err != nil {
			resp.Body.Close()
			lastErr = err
			continue
		}

		return verify.ReadCloser(resp.Body, d.Size, rl.digest)
	}

	return nil, lastErr
}

// Manifest implements partial.WithManifest so that we can use partial.BlobSize below.
func (rl *remoteImageLayer) Manifest() (*v1.Manifest, error) {
	return partial.Manifest(rl.ri)
}

// MediaType implements v1.Layer
func (rl *remoteImageLayer) MediaType() (types.MediaType, error) {
	bd, err := partial.BlobDescriptor(rl, rl.digest)
	if err != nil {
		return "", err
	}

	return bd.MediaType, nil
}

// Size implements partial.CompressedLayer
func (rl *remoteImageLayer) Size() (int64, error) {
	// Look up the size of this digest in the manifest to avoid a request.
	return partial.BlobSize(rl, rl.digest)
}

// ConfigFile implements partial.WithManifestAndConfigFile so that we can use partial.BlobToDiffID below.
func (rl *remoteImageLayer) ConfigFile() (*v1.ConfigFile, error) {
	return partial.ConfigFile(rl.ri)
}

// DiffID implements partial.WithDiffID so that we don't recompute a DiffID that we already have
// available in our ConfigFile.
func (rl *remoteImageLayer) DiffID() (v1.Hash, error) {
	return partial.BlobToDiffID(rl, rl.digest)
}

// Descriptor retains the original descriptor from an image manifest.
// See partial.Descriptor.
func (rl *remoteImageLayer) Descriptor() (*v1.Descriptor, error) {
	return partial.BlobDescriptor(rl, rl.digest)
}

// See partial.Exists.
func (rl *remoteImageLayer) Exists() (bool, error) {
	return rl.ri.blobExists(rl.digest)
}

// LayerByDigest implements partial.CompressedLayer
func (r *remoteImage) LayerByDigest(h v1.Hash) (partial.CompressedLayer, error) {
	return &remoteImageLayer{
		ri:     r,
		digest: h,
	}, nil
}
 070701000006E9000081A4000000000000000000000001645E367C00002127000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/index.go  // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package remote

import (
	"bytes"
	"fmt"
	"sync"

	"github.com/google/go-containerregistry/internal/verify"
	"github.com/google/go-containerregistry/pkg/name"
	v1 "github.com/google/go-containerregistry/pkg/v1"
	"github.com/google/go-containerregistry/pkg/v1/partial"
	"github.com/google/go-containerregistry/pkg/v1/types"
)

var acceptableIndexMediaTypes = []types.MediaType{
	types.DockerManifestList,
	types.OCIImageIndex,
}

// remoteIndex accesses an index from a remote registry
type remoteIndex struct {
	fetcher
	manifestLock sync.Mutex // Protects manifest
	manifest     []byte
	mediaType    types.MediaType
	descriptor   *v1.Descriptor
}

// Index provides access to a remote index reference.
func Index(ref name.Reference, options ...Option) (v1.ImageIndex, error) {
	desc, err := get(ref, acceptableIndexMediaTypes, options...)
	if err != nil {
		return nil, err
	}

	return desc.ImageIndex()
}

func (r *remoteIndex) MediaType() (types.MediaType, error) {
	if string(r.mediaType) != "" {
		return r.mediaType, nil
	}
	return types.DockerManifestList, nil
}

func (r *remoteIndex) Digest() (v1.Hash, error) {
	return partial.Digest(r)
}

func (r *remoteIndex) Size() (int64, error) {
	return partial.Size(r)
}

func (r *remoteIndex) RawManifest() ([]byte, error) {
	r.manifestLock.Lock()
	defer r.manifestLock.Unlock()
	if r.manifest != nil {
		return r.manifest, nil
	}

	// NOTE(jonjohnsonjr): We should never get here because the public entrypoints
	// do type-checking via remote.Descriptor. I've left this here for tests that
	// directly instantiate a remoteIndex.
	manifest, desc, err := r.fetchManifest(r.Ref, acceptableIndexMediaTypes)
	if err != nil {
		return nil, err
	}

	if r.descriptor == nil {
		r.descriptor = desc
	}
	r.mediaType = desc.MediaType
	r.manifest = manifest
	return r.manifest, nil
}

func (r *remoteIndex) IndexManifest() (*v1.IndexManifest, error) {
	b, err := r.RawManifest()
	if err != nil {
		return nil, err
	}
	return v1.ParseIndexManifest(bytes.NewReader(b))
}

func (r *remoteIndex) Image(h v1.Hash) (v1.Image, error) {
	desc, err := r.childByHash(h)
	if err != nil {
		return nil, err
	}

	// Descriptor.Image will handle coercing nested indexes into an Image.
	return desc.Image()
}

// Descriptor retains the original descriptor from an index manifest.
// See partial.Descriptor.
func (r *remoteIndex) Descriptor() (*v1.Descriptor, error) {
	// kind of a hack, but RawManifest does appropriate locking/memoization
	// and makes sure r.descriptor is populated.
	_, err := r.RawManifest()
	return r.descriptor, err
}

func (r *remoteIndex) ImageIndex(h v1.Hash) (v1.ImageIndex, error) {
	desc, err := r.childByHash(h)
	if err != nil {
		return nil, err
	}
	return desc.ImageIndex()
}

// Workaround for #819.
func (r *remoteIndex) Layer(h v1.Hash) (v1.Layer, error) {
	index, err := r.IndexManifest()
	if err != nil {
		return nil, err
	}
	for _, childDesc := range index.Manifests {
		if h == childDesc.Digest {
			l, err := partial.CompressedToLayer(&remoteLayer{
				fetcher: r.fetcher,
				digest:  h,
			})
			if err != nil {
				return nil, err
			}
			return &MountableLayer{
				Layer:     l,
				Reference: r.Ref.Context().Digest(h.String()),
			}, nil
		}
	}
	return nil, fmt.Errorf("layer not found: %s", h)
}

// Experiment with a better API for v1.ImageIndex. We might want to move this
// to partial?
func (r *remoteIndex) Manifests() ([]partial.Describable, error) {
	m, err := r.IndexManifest()
	if err != nil {
		return nil, err
	}
	manifests := []partial.Describable{}
	for _, desc := range m.Manifests {
		switch {
		case desc.MediaType.IsImage():
			img, err := r.Image(desc.Digest)
			if err != nil {
				return nil, err
			}
			manifests = append(manifests, img)
		case desc.MediaType.IsIndex():
			idx, err := r.ImageIndex(desc.Digest)
			if err != nil {
				return nil, err
			}
			manifests = append(manifests, idx)
		default:
			layer, err := r.Layer(desc.Digest)
			if err != nil {
				return nil, err
			}
			manifests = append(manifests, layer)
		}
	}

	return manifests, nil
}

func (r *remoteIndex) imageByPlatform(platform v1.Platform) (v1.Image, error) {
	desc, err := r.childByPlatform(platform)
	if err != nil {
		return nil, err
	}

	// Descriptor.Image will handle coercing nested indexes into an Image.
	return desc.Image()
}

// This naively matches the first manifest with matching platform attributes.
//
// We should probably use this instead:
//
//	github.com/containerd/containerd/platforms
//
// But first we'd need to migrate to:
//
//	github.com/opencontainers/image-spec/specs-go/v1
func (r *remoteIndex) childByPlatform(platform v1.Platform) (*Descriptor, error) {
	index, err := r.IndexManifest()
	if err != nil {
		return nil, err
	}
	for _, childDesc := range index.Manifests {
		// If platform is missing from child descriptor, assume it's amd64/linux.
		p := defaultPlatform
		if childDesc.Platform != nil {
			p = *childDesc.Platform
		}

		if matchesPlatform(p, platform) {
			return r.childDescriptor(childDesc, platform)
		}
	}
	return nil, fmt.Errorf("no child with platform %+v in index %s", platform, r.Ref)
}

func (r *remoteIndex) childByHash(h v1.Hash) (*Descriptor, error) {
	index, err := r.IndexManifest()
	if err != nil {
		return nil, err
	}
	for _, childDesc := range index.Manifests {
		if h == childDesc.Digest {
			return r.childDescriptor(childDesc, defaultPlatform)
		}
	}
	return nil, fmt.Errorf("no child with digest %s in index %s", h, r.Ref)
}

// Convert one of this index's child's v1.Descriptor into a remote.Descriptor, with the given platform option.
func (r *remoteIndex) childDescriptor(child v1.Descriptor, platform v1.Platform) (*Descriptor, error) {
	ref := r.Ref.Context().Digest(child.Digest.String())
	var (
		manifest []byte
		err      error
	)
	if child.Data != nil {
		if err := verify.Descriptor(child); err != nil {
			return nil, err
		}
		manifest = child.Data
	} else {
		manifest, _, err = r.fetchManifest(ref, []types.MediaType{child.MediaType})
		if err != nil {
			return nil, err
		}
	}

	if child.MediaType.IsImage() {
		mf, _ := v1.ParseManifest(bytes.NewReader(manifest))
		// Failing to parse as a manifest should just be ignored.
		// The manifest might not be valid, and that's okay.
		if mf != nil && !mf.Config.MediaType.IsConfig() {
			child.ArtifactType = string(mf.Config.MediaType)
		}
	}

	return &Descriptor{
		fetcher: fetcher{
			Ref:     ref,
			Client:  r.Client,
			context: r.context,
		},
		Manifest:   manifest,
		Descriptor: child,
		platform:   platform,
	}, nil
}

// matchesPlatform checks if the given platform matches the required platforms.
// The given platform matches the required platform if
// - architecture and OS are identical.
// - OS version and variant are identical if provided.
// - features and OS features of the required platform are subsets of those of the given platform.
func matchesPlatform(given, required v1.Platform) bool {
	// Required fields that must be identical.
	if given.Architecture != required.Architecture || given.OS != required.OS {
		return false
	}

	// Optional fields that may be empty, but must be identical if provided.
	if required.OSVersion != "" && given.OSVersion != required.OSVersion {
		return false
	}
	if required.Variant != "" && given.Variant != required.Variant {
		return false
	}

	// Verify required platform's features are a subset of given platform's features.
	if !isSubset(given.OSFeatures, required.OSFeatures) {
		return false
	}
	if !isSubset(given.Features, required.Features) {
		return false
	}

	return true
}

// isSubset checks if the required array of strings is a subset of the given lst.
func isSubset(lst, required []string) bool {
	set := make(map[string]bool)
	for _, value := range lst {
		set[value] = true
	}

	for _, value := range required {
		if _, ok := set[value]; !ok {
			return false
		}
	}

	return true
}
 070701000006EA000081A4000000000000000000000001645E367C00000AA7000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/layer.go  // Copyright 2019 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package remote

import (
	"io"

	"github.com/google/go-containerregistry/internal/redact"
	"github.com/google/go-containerregistry/internal/verify"
	"github.com/google/go-containerregistry/pkg/name"
	v1 "github.com/google/go-containerregistry/pkg/v1"
	"github.com/google/go-containerregistry/pkg/v1/partial"
	"github.com/google/go-containerregistry/pkg/v1/types"
)

// remoteImagelayer implements partial.CompressedLayer
type remoteLayer struct {
	fetcher
	digest v1.Hash
}

// Compressed implements partial.CompressedLayer
func (rl *remoteLayer) Compressed() (io.ReadCloser, error) {
	// We don't want to log binary layers -- this can break terminals.
	ctx := redact.NewContext(rl.context, "omitting binary blobs from logs")
	return rl.fetchBlob(ctx, verify.SizeUnknown, rl.digest)
}

// Compressed implements partial.CompressedLayer
func (rl *remoteLayer) Size() (int64, error) {
	resp, err := rl.headBlob(rl.digest)
	if err != nil {
		return -1, err
	}
	defer resp.Body.Close()
	return resp.ContentLength, nil
}

// Digest implements partial.CompressedLayer
func (rl *remoteLayer) Digest() (v1.Hash, error) {
	return rl.digest, nil
}

// MediaType implements v1.Layer
func (rl *remoteLayer) MediaType() (types.MediaType, error) {
	return types.DockerLayer, nil
}

// See partial.Exists.
func (rl *remoteLayer) Exists() (bool, error) {
	return rl.blobExists(rl.digest)
}

// Layer reads the given blob reference from a registry as a Layer. A blob
// reference here is just a punned name.Digest where the digest portion is the
// digest of the blob to be read and the repository portion is the repo where
// that blob lives.
func Layer(ref name.Digest, options ...Option) (v1.Layer, error) {
	o, err := makeOptions(ref.Context(), options...)
	if err != nil {
		return nil, err
	}
	f, err := makeFetcher(ref, o)
	if err != nil {
		return nil, err
	}
	h, err := v1.NewHash(ref.Identifier())
	if err != nil {
		return nil, err
	}
	l, err := partial.CompressedToLayer(&remoteLayer{
		fetcher: *f,
		digest:  h,
	})
	if err != nil {
		return nil, err
	}
	return &MountableLayer{
		Layer:     l,
		Reference: ref,
	}, nil
}
 070701000006EB000081A4000000000000000000000001645E367C00000DD9000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/list.go   // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package remote

import (
	"context"
	"encoding/json"
	"fmt"
	"net/http"
	"net/url"
	"strings"

	"github.com/google/go-containerregistry/pkg/name"
	"github.com/google/go-containerregistry/pkg/v1/remote/transport"
)

type tags struct {
	Name string   `json:"name"`
	Tags []string `json:"tags"`
}

// ListWithContext calls List with the given context.
//
// Deprecated: Use List and WithContext. This will be removed in a future release.
func ListWithContext(ctx context.Context, repo name.Repository, options ...Option) ([]string, error) {
	return List(repo, append(options, WithContext(ctx))...)
}

// List calls /tags/list for the given repository, returning the list of tags
// in the "tags" property.
func List(repo name.Repository, options ...Option) ([]string, error) {
	o, err := makeOptions(repo, options...)
	if err != nil {
		return nil, err
	}
	scopes := []string{repo.Scope(transport.PullScope)}
	tr, err := transport.NewWithContext(o.context, repo.Registry, o.auth, o.transport, scopes)
	if err != nil {
		return nil, err
	}

	uri := &url.URL{
		Scheme: repo.Registry.Scheme(),
		Host:   repo.Registry.RegistryStr(),
		Path:   fmt.Sprintf("/v2/%s/tags/list", repo.RepositoryStr()),
	}

	if o.pageSize > 0 {
		uri.RawQuery = fmt.Sprintf("n=%d", o.pageSize)
	}

	client := http.Client{Transport: tr}
	tagList := []string{}
	parsed := tags{}

	// get responses until there is no next page
	for {
		select {
		case <-o.context.Done():
			return nil, o.context.Err()
		default:
		}

		req, err := http.NewRequestWithContext(o.context, "GET", uri.String(), nil)
		if err != nil {
			return nil, err
		}

		resp, err := client.Do(req)
		if err != nil {
			return nil, err
		}

		if err := transport.CheckError(resp, http.StatusOK); err != nil {
			return nil, err
		}

		if err := json.NewDecoder(resp.Body).Decode(&parsed); err != nil {
			return nil, err
		}

		if err := resp.Body.Close(); err != nil {
			return nil, err
		}

		tagList = append(tagList, parsed.Tags...)

		uri, err = getNextPageURL(resp)
		if err != nil {
			return nil, err
		}
		// no next page
		if uri == nil {
			break
		}
	}

	return tagList, nil
}

// getNextPageURL checks if there is a Link header in a http.Response which
// contains a link to the next page. If yes it returns the url.URL of the next
// page otherwise it returns nil.
func getNextPageURL(resp *http.Response) (*url.URL, error) {
	link := resp.Header.Get("Link")
	if link == "" {
		return nil, nil
	}

	if link[0] != '<' {
		return nil, fmt.Errorf("failed to parse link header: missing '<' in: %s", link)
	}

	end := strings.Index(link, ">")
	if end == -1 {
		return nil, fmt.Errorf("failed to parse link header: missing '>' in: %s", link)
	}
	link = link[1:end]

	linkURL, err := url.Parse(link)
	if err != nil {
		return nil, err
	}
	if resp.Request == nil || resp.Request.URL == nil {
		return nil, nil
	}
	linkURL = resp.Request.URL.ResolveReference(linkURL)
	return linkURL, nil
}
   070701000006EC000081A4000000000000000000000001645E367C00000B80000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/mount.go  // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package remote

import (
	"github.com/google/go-containerregistry/pkg/name"
	v1 "github.com/google/go-containerregistry/pkg/v1"
	"github.com/google/go-containerregistry/pkg/v1/partial"
)

// MountableLayer wraps a v1.Layer in a shim that enables the layer to be
// "mounted" when published to another registry.
type MountableLayer struct {
	v1.Layer

	Reference name.Reference
}

// Descriptor retains the original descriptor from an image manifest.
// See partial.Descriptor.
func (ml *MountableLayer) Descriptor() (*v1.Descriptor, error) {
	return partial.Descriptor(ml.Layer)
}

// Exists is a hack. See partial.Exists.
func (ml *MountableLayer) Exists() (bool, error) {
	return partial.Exists(ml.Layer)
}

// mountableImage wraps the v1.Layer references returned by the embedded v1.Image
// in MountableLayer's so that remote.Write might attempt to mount them from their
// source repository.
type mountableImage struct {
	v1.Image

	Reference name.Reference
}

// Layers implements v1.Image
func (mi *mountableImage) Layers() ([]v1.Layer, error) {
	ls, err := mi.Image.Layers()
	if err != nil {
		return nil, err
	}
	mls := make([]v1.Layer, 0, len(ls))
	for _, l := range ls {
		mls = append(mls, &MountableLayer{
			Layer:     l,
			Reference: mi.Reference,
		})
	}
	return mls, nil
}

// LayerByDigest implements v1.Image
func (mi *mountableImage) LayerByDigest(d v1.Hash) (v1.Layer, error) {
	l, err := mi.Image.LayerByDigest(d)
	if err != nil {
		return nil, err
	}
	return &MountableLayer{
		Layer:     l,
		Reference: mi.Reference,
	}, nil
}

// LayerByDiffID implements v1.Image
func (mi *mountableImage) LayerByDiffID(d v1.Hash) (v1.Layer, error) {
	l, err := mi.Image.LayerByDiffID(d)
	if err != nil {
		return nil, err
	}
	return &MountableLayer{
		Layer:     l,
		Reference: mi.Reference,
	}, nil
}

// Descriptor retains the original descriptor from an index manifest.
// See partial.Descriptor.
func (mi *mountableImage) Descriptor() (*v1.Descriptor, error) {
	return partial.Descriptor(mi.Image)
}

// ConfigLayer retains the original reference so that it can be mounted.
// See partial.ConfigLayer.
func (mi *mountableImage) ConfigLayer() (v1.Layer, error) {
	l, err := partial.ConfigLayer(mi.Image)
	if err != nil {
		return nil, err
	}
	return &MountableLayer{
		Layer:     l,
		Reference: mi.Reference,
	}, nil
}
070701000006ED000081A4000000000000000000000001645E367C000020E5000000000000000000000000000000000000005F00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/multi_write.go    // Copyright 2020 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package remote

import (
	"context"
	"fmt"
	"net/http"

	"github.com/google/go-containerregistry/pkg/name"
	v1 "github.com/google/go-containerregistry/pkg/v1"
	"github.com/google/go-containerregistry/pkg/v1/partial"
	"github.com/google/go-containerregistry/pkg/v1/remote/transport"
	"github.com/google/go-containerregistry/pkg/v1/types"
	"golang.org/x/sync/errgroup"
)

// MultiWrite writes the given Images or ImageIndexes to the given refs, as
// efficiently as possible, by deduping shared layer blobs and uploading layers
// in parallel, then uploading all manifests in parallel.
//
// Current limitations:
// - All refs must share the same repository.
// - Images cannot consist of stream.Layers.
func MultiWrite(m map[name.Reference]Taggable, options ...Option) (rerr error) {
	// Determine the repository being pushed to; if asked to push to
	// multiple repositories, give up.
	var repo, zero name.Repository
	for ref := range m {
		if repo == zero {
			repo = ref.Context()
		} else if ref.Context() != repo {
			return fmt.Errorf("MultiWrite can only push to the same repository (saw %q and %q)", repo, ref.Context())
		}
	}

	o, err := makeOptions(repo, options...)
	if err != nil {
		return err
	}

	// Collect unique blobs (layers and config blobs).
	blobs := map[v1.Hash]v1.Layer{}
	newManifests := []map[name.Reference]Taggable{}
	// Separate originally requested images and indexes, so we can push images first.
	images, indexes := map[name.Reference]Taggable{}, map[name.Reference]Taggable{}
	for ref, i := range m {
		if img, ok := i.(v1.Image); ok {
			images[ref] = i
			if err := addImageBlobs(img, blobs, o.allowNondistributableArtifacts); err != nil {
				return err
			}
			continue
		}
		if idx, ok := i.(v1.ImageIndex); ok {
			indexes[ref] = i
			newManifests, err = addIndexBlobs(idx, blobs, repo, newManifests, 0, o.allowNondistributableArtifacts)
			if err != nil {
				return err
			}
			continue
		}
		return fmt.Errorf("pushable resource was not Image or ImageIndex: %T", i)
	}

	// Determine if any of the layers are Mountable, because if so we need
	// to request Pull scope too.
	ls := []v1.Layer{}
	for _, l := range blobs {
		ls = append(ls, l)
	}
	scopes := scopesForUploadingImage(repo, ls)
	tr, err := transport.NewWithContext(o.context, repo.Registry, o.auth, o.transport, scopes)
	if err != nil {
		return err
	}
	w := writer{
		repo:      repo,
		client:    &http.Client{Transport: tr},
		backoff:   o.retryBackoff,
		predicate: o.retryPredicate,
	}

	// Collect the total size of blobs and manifests we're about to write.
	if o.updates != nil {
		w.progress = &progress{updates: o.updates}
		w.progress.lastUpdate = &v1.Update{}
		defer close(o.updates)
		defer func() { _ = w.progress.err(rerr) }()
		for _, b := range blobs {
			size, err := b.Size()
			if err != nil {
				return err
			}
			w.progress.total(size)
		}
		countManifest := func(t Taggable) error {
			b, err := t.RawManifest()
			if err != nil {
				return err
			}
			w.progress.total(int64(len(b)))
			return nil
		}
		for _, i := range images {
			if err := countManifest(i); err != nil {
				return err
			}
		}
		for _, nm := range newManifests {
			for _, i := range nm {
				if err := countManifest(i); err != nil {
					return err
				}
			}
		}
		for _, i := range indexes {
			if err := countManifest(i); err != nil {
				return err
			}
		}
	}

	// Upload individual blobs and collect any errors.
	blobChan := make(chan v1.Layer, 2*o.jobs)
	ctx := o.context
	g, gctx := errgroup.WithContext(o.context)
	for i := 0; i < o.jobs; i++ {
		// Start N workers consuming blobs to upload.
		g.Go(func() error {
			for b := range blobChan {
				if err := w.uploadOne(gctx, b); err != nil {
					return err
				}
			}
			return nil
		})
	}
	g.Go(func() error {
		defer close(blobChan)
		for _, b := range blobs {
			select {
			case blobChan <- b:
			case <-gctx.Done():
				return gctx.Err()
			}
		}
		return nil
	})
	if err := g.Wait(); err != nil {
		return err
	}

	commitMany := func(ctx context.Context, m map[name.Reference]Taggable) error {
		g, ctx := errgroup.WithContext(ctx)
		// With all of the constituent elements uploaded, upload the manifests
		// to commit the images and indexes, and collect any errors.
		type task struct {
			i   Taggable
			ref name.Reference
		}
		taskChan := make(chan task, 2*o.jobs)
		for i := 0; i < o.jobs; i++ {
			// Start N workers consuming tasks to upload manifests.
			g.Go(func() error {
				for t := range taskChan {
					if err := w.commitManifest(ctx, t.i, t.ref); err != nil {
						return err
					}
				}
				return nil
			})
		}
		go func() {
			for ref, i := range m {
				taskChan <- task{i, ref}
			}
			close(taskChan)
		}()
		return g.Wait()
	}
	// Push originally requested image manifests. These have no
	// dependencies.
	if err := commitMany(ctx, images); err != nil {
		return err
	}
	// Push new manifests from lowest levels up.
	for i := len(newManifests) - 1; i >= 0; i-- {
		if err := commitMany(ctx, newManifests[i]); err != nil {
			return err
		}
	}
	// Push originally requested index manifests, which might depend on
	// newly discovered manifests.

	return commitMany(ctx, indexes)
}

// addIndexBlobs adds blobs to the set of blobs we intend to upload, and
// returns the latest copy of the ordered collection of manifests to upload.
func addIndexBlobs(idx v1.ImageIndex, blobs map[v1.Hash]v1.Layer, repo name.Repository, newManifests []map[name.Reference]Taggable, lvl int, allowNondistributableArtifacts bool) ([]map[name.Reference]Taggable, error) {
	if lvl > len(newManifests)-1 {
		newManifests = append(newManifests, map[name.Reference]Taggable{})
	}

	im, err := idx.IndexManifest()
	if err != nil {
		return nil, err
	}
	for _, desc := range im.Manifests {
		switch desc.MediaType {
		case types.OCIImageIndex, types.DockerManifestList:
			idx, err := idx.ImageIndex(desc.Digest)
			if err != nil {
				return nil, err
			}
			newManifests, err = addIndexBlobs(idx, blobs, repo, newManifests, lvl+1, allowNondistributableArtifacts)
			if err != nil {
				return nil, err
			}

			// Also track the sub-index manifest to upload later by digest.
			newManifests[lvl][repo.Digest(desc.Digest.String())] = idx
		case types.OCIManifestSchema1, types.DockerManifestSchema2:
			img, err := idx.Image(desc.Digest)
			if err != nil {
				return nil, err
			}
			if err := addImageBlobs(img, blobs, allowNondistributableArtifacts); err != nil {
				return nil, err
			}

			// Also track the sub-image manifest to upload later by digest.
			newManifests[lvl][repo.Digest(desc.Digest.String())] = img
		default:
			// Workaround for #819.
			if wl, ok := idx.(withLayer); ok {
				layer, err := wl.Layer(desc.Digest)
				if err != nil {
					return nil, err
				}
				if err := addLayerBlob(layer, blobs, allowNondistributableArtifacts); err != nil {
					return nil, err
				}
			} else {
				return nil, fmt.Errorf("unknown media type: %v", desc.MediaType)
			}
		}
	}
	return newManifests, nil
}

func addLayerBlob(l v1.Layer, blobs map[v1.Hash]v1.Layer, allowNondistributableArtifacts bool) error {
	// Ignore foreign layers.
	mt, err := l.MediaType()
	if err != nil {
		return err
	}

	if mt.IsDistributable() || allowNondistributableArtifacts {
		d, err := l.Digest()
		if err != nil {
			return err
		}

		blobs[d] = l
	}

	return nil
}

func addImageBlobs(img v1.Image, blobs map[v1.Hash]v1.Layer, allowNondistributableArtifacts bool) error {
	ls, err := img.Layers()
	if err != nil {
		return err
	}
	// Collect all layers.
	for _, l := range ls {
		if err := addLayerBlob(l, blobs, allowNondistributableArtifacts); err != nil {
			return err
		}
	}

	// Collect config blob.
	cl, err := partial.ConfigLayer(img)
	if err != nil {
		return err
	}
	return addLayerBlob(cl, blobs, allowNondistributableArtifacts)
}
   070701000006EE000081A4000000000000000000000001645E367C0000261F000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/options.go    // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package remote

import (
	"context"
	"errors"
	"io"
	"net"
	"net/http"
	"syscall"
	"time"

	"github.com/google/go-containerregistry/internal/retry"
	"github.com/google/go-containerregistry/pkg/authn"
	"github.com/google/go-containerregistry/pkg/logs"
	v1 "github.com/google/go-containerregistry/pkg/v1"
	"github.com/google/go-containerregistry/pkg/v1/remote/transport"
)

// Option is a functional option for remote operations.
type Option func(*options) error

type options struct {
	auth                           authn.Authenticator
	keychain                       authn.Keychain
	transport                      http.RoundTripper
	platform                       v1.Platform
	context                        context.Context
	jobs                           int
	userAgent                      string
	allowNondistributableArtifacts bool
	updates                        chan<- v1.Update
	pageSize                       int
	retryBackoff                   Backoff
	retryPredicate                 retry.Predicate
	filter                         map[string]string
}

var defaultPlatform = v1.Platform{
	Architecture: "amd64",
	OS:           "linux",
}

// Backoff is an alias of retry.Backoff to expose this configuration option to consumers of this lib
type Backoff = retry.Backoff

var defaultRetryPredicate retry.Predicate = func(err error) bool {
	// Various failure modes here, as we're often reading from and writing to
	// the network.
	if retry.IsTemporary(err) || errors.Is(err, io.ErrUnexpectedEOF) || errors.Is(err, io.EOF) || errors.Is(err, syscall.EPIPE) || errors.Is(err, syscall.ECONNRESET) {
		logs.Warn.Printf("retrying %v", err)
		return true
	}
	return false
}

// Try this three times, waiting 1s after first failure, 3s after second.
var defaultRetryBackoff = Backoff{
	Duration: 1.0 * time.Second,
	Factor:   3.0,
	Jitter:   0.1,
	Steps:    3,
}

// Useful for tests
var fastBackoff = Backoff{
	Duration: 1.0 * time.Millisecond,
	Factor:   3.0,
	Jitter:   0.1,
	Steps:    3,
}

var retryableStatusCodes = []int{
	http.StatusRequestTimeout,
	http.StatusInternalServerError,
	http.StatusBadGateway,
	http.StatusServiceUnavailable,
	http.StatusGatewayTimeout,
}

const (
	defaultJobs = 4

	// ECR returns an error if n > 1000:
	// https://github.com/google/go-containerregistry/issues/1091
	defaultPageSize = 1000
)

// DefaultTransport is based on http.DefaultTransport with modifications
// documented inline below.
var DefaultTransport http.RoundTripper = &http.Transport{
	Proxy: http.ProxyFromEnvironment,
	DialContext: (&net.Dialer{
		Timeout:   30 * time.Second,
		KeepAlive: 30 * time.Second,
	}).DialContext,
	ForceAttemptHTTP2:     true,
	MaxIdleConns:          100,
	IdleConnTimeout:       90 * time.Second,
	TLSHandshakeTimeout:   10 * time.Second,
	ExpectContinueTimeout: 1 * time.Second,
}

func makeOptions(target authn.Resource, opts ...Option) (*options, error) {
	o := &options{
		transport:      DefaultTransport,
		platform:       defaultPlatform,
		context:        context.Background(),
		jobs:           defaultJobs,
		pageSize:       defaultPageSize,
		retryPredicate: defaultRetryPredicate,
		retryBackoff:   defaultRetryBackoff,
	}

	for _, option := range opts {
		if err := option(o); err != nil {
			return nil, err
		}
	}

	switch {
	case o.auth != nil && o.keychain != nil:
		// It is a better experience to explicitly tell a caller their auth is misconfigured
		// than potentially fail silently when the correct auth is overridden by option misuse.
		return nil, errors.New("provide an option for either authn.Authenticator or authn.Keychain, not both")
	case o.keychain != nil:
		auth, err := o.keychain.Resolve(target)
		if err != nil {
			return nil, err
		}
		o.auth = auth
	case o.auth == nil:
		o.auth = authn.Anonymous
	}

	// transport.Wrapper is a signal that consumers are opt-ing into providing their own transport without any additional wrapping.
	// This is to allow consumers full control over the transports logic, such as providing retry logic.
	if _, ok := o.transport.(*transport.Wrapper); !ok {
		// Wrap the transport in something that logs requests and responses.
		// It's expensive to generate the dumps, so skip it if we're writing
		// to nothing.
		if logs.Enabled(logs.Debug) {
			o.transport = transport.NewLogger(o.transport)
		}

		// Wrap the transport in something that can retry network flakes.
		o.transport = transport.NewRetry(o.transport, transport.WithRetryPredicate(defaultRetryPredicate), transport.WithRetryStatusCodes(retryableStatusCodes...))

		// Wrap this last to prevent transport.New from double-wrapping.
		if o.userAgent != "" {
			o.transport = transport.NewUserAgent(o.transport, o.userAgent)
		}
	}

	return o, nil
}

// WithTransport is a functional option for overriding the default transport
// for remote operations.
// If transport.Wrapper is provided, this signals that the consumer does *not* want any further wrapping to occur.
// i.e. logging, retry and useragent
//
// The default transport is DefaultTransport.
func WithTransport(t http.RoundTripper) Option {
	return func(o *options) error {
		o.transport = t
		return nil
	}
}

// WithAuth is a functional option for overriding the default authenticator
// for remote operations.
// It is an error to use both WithAuth and WithAuthFromKeychain in the same Option set.
//
// The default authenticator is authn.Anonymous.
func WithAuth(auth authn.Authenticator) Option {
	return func(o *options) error {
		o.auth = auth
		return nil
	}
}

// WithAuthFromKeychain is a functional option for overriding the default
// authenticator for remote operations, using an authn.Keychain to find
// credentials.
// It is an error to use both WithAuth and WithAuthFromKeychain in the same Option set.
//
// The default authenticator is authn.Anonymous.
func WithAuthFromKeychain(keys authn.Keychain) Option {
	return func(o *options) error {
		o.keychain = keys
		return nil
	}
}

// WithPlatform is a functional option for overriding the default platform
// that Image and Descriptor.Image use for resolving an index to an image.
//
// The default platform is amd64/linux.
func WithPlatform(p v1.Platform) Option {
	return func(o *options) error {
		o.platform = p
		return nil
	}
}

// WithContext is a functional option for setting the context in http requests
// performed by a given function. Note that this context is used for _all_
// http requests, not just the initial volley. E.g., for remote.Image, the
// context will be set on http requests generated by subsequent calls to
// RawConfigFile() and even methods on layers returned by Layers().
//
// The default context is context.Background().
func WithContext(ctx context.Context) Option {
	return func(o *options) error {
		o.context = ctx
		return nil
	}
}

// WithJobs is a functional option for setting the parallelism of remote
// operations performed by a given function. Note that not all remote
// operations support parallelism.
//
// The default value is 4.
func WithJobs(jobs int) Option {
	return func(o *options) error {
		if jobs <= 0 {
			return errors.New("jobs must be greater than zero")
		}
		o.jobs = jobs
		return nil
	}
}

// WithUserAgent adds the given string to the User-Agent header for any HTTP
// requests. This header will also include "go-containerregistry/${version}".
//
// If you want to completely overwrite the User-Agent header, use WithTransport.
func WithUserAgent(ua string) Option {
	return func(o *options) error {
		o.userAgent = ua
		return nil
	}
}

// WithNondistributable includes non-distributable (foreign) layers
// when writing images, see:
// https://github.com/opencontainers/image-spec/blob/master/layer.md#non-distributable-layers
//
// The default behaviour is to skip these layers
func WithNondistributable(o *options) error {
	o.allowNondistributableArtifacts = true
	return nil
}

// WithProgress takes a channel that will receive progress updates as bytes are written.
//
// Sending updates to an unbuffered channel will block writes, so callers
// should provide a buffered channel to avoid potential deadlocks.
func WithProgress(updates chan<- v1.Update) Option {
	return func(o *options) error {
		o.updates = updates
		return nil
	}
}

// WithPageSize sets the given size as the value of parameter 'n' in the request.
//
// To omit the `n` parameter entirely, use WithPageSize(0).
// The default value is 1000.
func WithPageSize(size int) Option {
	return func(o *options) error {
		o.pageSize = size
		return nil
	}
}

// WithRetryBackoff sets the httpBackoff for retry HTTP operations.
func WithRetryBackoff(backoff Backoff) Option {
	return func(o *options) error {
		o.retryBackoff = backoff
		return nil
	}
}

// WithRetryPredicate sets the predicate for retry HTTP operations.
func WithRetryPredicate(predicate retry.Predicate) Option {
	return func(o *options) error {
		o.retryPredicate = predicate
		return nil
	}
}

// WithFilter sets the filter querystring for HTTP operations.
func WithFilter(key string, value string) Option {
	return func(o *options) error {
		if o.filter == nil {
			o.filter = map[string]string{}
		}
		o.filter[key] = value
		return nil
	}
}
 070701000006EF000081A4000000000000000000000001645E367C000006D7000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/progress.go   // Copyright 2022 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package remote

import (
	"io"
	"sync"
	"sync/atomic"

	v1 "github.com/google/go-containerregistry/pkg/v1"
)

type progress struct {
	sync.Mutex
	updates    chan<- v1.Update
	lastUpdate *v1.Update
}

func (p *progress) total(delta int64) {
	atomic.AddInt64(&p.lastUpdate.Total, delta)
}

func (p *progress) complete(delta int64) {
	p.Lock()
	defer p.Unlock()
	p.updates <- v1.Update{
		Total:    p.lastUpdate.Total,
		Complete: atomic.AddInt64(&p.lastUpdate.Complete, delta),
	}
}

func (p *progress) err(err error) error {
	if err != nil && p.updates != nil {
		p.updates <- v1.Update{Error: err}
	}
	return err
}

type progressReader struct {
	rc io.ReadCloser

	count    *int64 // number of bytes this reader has read, to support resetting on retry.
	progress *progress
}

func (r *progressReader) Read(b []byte) (int, error) {
	n, err := r.rc.Read(b)
	if err != nil {
		return n, err
	}
	atomic.AddInt64(r.count, int64(n))
	// TODO: warn/debug log if sending takes too long, or if sending is blocked while context is canceled.
	r.progress.complete(int64(n))
	return n, nil
}

func (r *progressReader) Close() error { return r.rc.Close() }
 070701000006F0000081A4000000000000000000000001645E367C000004C0000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/referrers.go  // Copyright 2023 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package remote

import (
	"github.com/google/go-containerregistry/pkg/name"
	v1 "github.com/google/go-containerregistry/pkg/v1"
)

// Referrers returns a list of descriptors that refer to the given manifest digest.
//
// The subject manifest doesn't have to exist in the registry for there to be descriptors that refer to it.
func Referrers(d name.Digest, options ...Option) (*v1.IndexManifest, error) {
	o, err := makeOptions(d.Context(), options...)
	if err != nil {
		return nil, err
	}
	f, err := makeFetcher(d, o)
	if err != nil {
		return nil, err
	}
	return f.fetchReferrers(o.context, o.filter, d)
}
070701000006F1000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport 070701000006F2000081A4000000000000000000000001645E367C000015FA000000000000000000000000000000000000006400000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/README.md   # `transport`

[![GoDoc](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/transport?status.svg)](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/transport)

The [distribution protocol](https://github.com/opencontainers/distribution-spec) is fairly simple, but correctly [implementing authentication](../../../authn/README.md) is **hard**.

This package [implements](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/remote/transport#New) an [`http.RoundTripper`](https://godoc.org/net/http#RoundTripper)
that transparently performs:
* [Token
Authentication](https://docs.docker.com/registry/spec/auth/token/) and
* [OAuth2
Authentication](https://docs.docker.com/registry/spec/auth/oauth/)

for registry clients.

## Raison d'être

> Why not just use the [`docker/distribution`](https://godoc.org/github.com/docker/distribution/registry/client/auth) client?

Great question! Mostly, because I don't want to depend on [`prometheus/client_golang`](https://github.com/prometheus/client_golang).

As a performance optimization, that client uses [a cache](https://github.com/docker/distribution/blob/a8371794149d1d95f1e846744b05c87f2f825e5a/registry/client/repository.go#L173) to keep track of a mapping between blob digests and their [descriptors](https://github.com/docker/distribution/blob/a8371794149d1d95f1e846744b05c87f2f825e5a/blobs.go#L57-L86). Unfortunately, the cache [uses prometheus](https://github.com/docker/distribution/blob/a8371794149d1d95f1e846744b05c87f2f825e5a/registry/storage/cache/cachedblobdescriptorstore.go#L44) to track hits and misses, so if you want to use that client you have to pull in all of prometheus, which is pretty large.

![docker/distribution](../../../../images/docker.dot.svg)

> Why does it matter if you depend on prometheus? Who cares?

It's generally polite to your downstream to reduce the number of dependencies your package requires:

* Downloading your package is faster, which helps our Australian friends and people on airplanes.
* There is less code to compile, which speeds up builds and saves the planet from global warming.
* You reduce the likelihood of inflicting dependency hell upon your consumers.
* [Tim Hockin](https://twitter.com/thockin/status/958606077456654336) prefers it based on his experience working on Kubernetes, and he's a pretty smart guy.

> Okay, what about [`containerd/containerd`](https://godoc.org/github.com/containerd/containerd/remotes/docker)?

Similar reasons! That ends up pulling in grpc, protobuf, and logrus.

![containerd/containerd](../../../../images/containerd.dot.svg)

> Well... what about [`containers/image`](https://godoc.org/github.com/containers/image/docker)?

That just uses the the `docker/distribution` client... and more!

![containers/image](../../../../images/containers.dot.svg)

> Wow, what about this package?

Of course, this package isn't perfect either. `transport` depends on `authn`,
which in turn depends on docker's config file parsing and handling package,
which you don't strictly need but almost certainly want if you're going to be
interacting with a registry.

![google/go-containerregistry](../../../../images/ggcr.dot.svg)

*These graphs were generated by
[`kisielk/godepgraph`](https://github.com/kisielk/godepgraph).*

## Usage

This is heavily used by the
[`remote`](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/remote)
package, which implements higher level image-centric functionality, but this
package is useful if you want to interact directly with the registry to do
something that `remote` doesn't support, e.g. [to handle with schema 1
images](https://github.com/google/go-containerregistry/pull/509).

This package also includes some [error
handling](https://github.com/opencontainers/distribution-spec/blob/60be706c34ee7805bdd1d3d11affec53b0dfb8fb/spec.md#errors)
facilities in the form of
[`CheckError`](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/remote/transport#CheckError),
which will parse the response body into a structured error for unexpected http
status codes.

Here's a "simple" program that writes the result of
[listing tags](https://github.com/opencontainers/distribution-spec/blob/60be706c34ee7805bdd1d3d11affec53b0dfb8fb/spec.md#tags)
for [`gcr.io/google-containers/pause`](https://gcr.io/google-containers/pause)
to stdout.

```go
package main

import (
	"io"
	"net/http"
	"os"

	"github.com/google/go-containerregistry/pkg/authn"
	"github.com/google/go-containerregistry/pkg/name"
	"github.com/google/go-containerregistry/pkg/v1/remote/transport"
)

func main() {
	repo, err := name.NewRepository("gcr.io/google-containers/pause")
	if err != nil {
		panic(err)
	}

	// Fetch credentials based on your docker config file, which is $HOME/.docker/config.json or $DOCKER_CONFIG.
	auth, err := authn.DefaultKeychain.Resolve(repo.Registry)
	if err != nil {
		panic(err)
	}

	// Construct an http.Client that is authorized to pull from gcr.io/google-containers/pause.
	scopes := []string{repo.Scope(transport.PullScope)}
	t, err := transport.New(repo.Registry, auth, http.DefaultTransport, scopes)
	if err != nil {
		panic(err)
	}
	client := &http.Client{Transport: t}

	// Make the actual request.
	resp, err := client.Get("https://gcr.io/v2/google-containers/pause/tags/list")
	if err != nil {
		panic(err)
	}

	// Assert that we get a 200, otherwise attempt to parse body as a structured error.
	if err := transport.CheckError(resp, http.StatusOK); err != nil {
		panic(err)
	}

	// Write the response to stdout.
	if _, err := io.Copy(os.Stdout, resp.Body); err != nil {
		panic(err)
	}
}
```
  070701000006F3000081A4000000000000000000000001645E367C0000083D000000000000000000000000000000000000006300000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/basic.go    // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package transport

import (
	"encoding/base64"
	"fmt"
	"net/http"

	"github.com/google/go-containerregistry/pkg/authn"
)

type basicTransport struct {
	inner  http.RoundTripper
	auth   authn.Authenticator
	target string
}

var _ http.RoundTripper = (*basicTransport)(nil)

// RoundTrip implements http.RoundTripper
func (bt *basicTransport) RoundTrip(in *http.Request) (*http.Response, error) {
	if bt.auth != authn.Anonymous {
		auth, err := bt.auth.Authorization()
		if err != nil {
			return nil, err
		}

		// http.Client handles redirects at a layer above the http.RoundTripper
		// abstraction, so to avoid forwarding Authorization headers to places
		// we are redirected, only set it when the authorization header matches
		// the host with which we are interacting.
		// In case of redirect http.Client can use an empty Host, check URL too.
		if in.Host == bt.target || in.URL.Host == bt.target {
			if bearer := auth.RegistryToken; bearer != "" {
				hdr := fmt.Sprintf("Bearer %s", bearer)
				in.Header.Set("Authorization", hdr)
			} else if user, pass := auth.Username, auth.Password; user != "" && pass != "" {
				delimited := fmt.Sprintf("%s:%s", user, pass)
				encoded := base64.StdEncoding.EncodeToString([]byte(delimited))
				hdr := fmt.Sprintf("Basic %s", encoded)
				in.Header.Set("Authorization", hdr)
			} else if token := auth.Auth; token != "" {
				hdr := fmt.Sprintf("Basic %s", token)
				in.Header.Set("Authorization", hdr)
			}
		}
	}
	return bt.inner.RoundTrip(in)
}
   070701000006F4000081A4000000000000000000000001645E367C00002508000000000000000000000000000000000000006400000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/bearer.go   // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package transport

import (
	"context"
	"encoding/json"
	"errors"
	"fmt"
	"io"
	"net"
	"net/http"
	"net/url"
	"strings"

	authchallenge "github.com/docker/distribution/registry/client/auth/challenge"
	"github.com/google/go-containerregistry/internal/redact"
	"github.com/google/go-containerregistry/pkg/authn"
	"github.com/google/go-containerregistry/pkg/logs"
	"github.com/google/go-containerregistry/pkg/name"
)

type bearerTransport struct {
	// Wrapped by bearerTransport.
	inner http.RoundTripper
	// Basic credentials that we exchange for bearer tokens.
	basic authn.Authenticator
	// Holds the bearer response from the token service.
	bearer authn.AuthConfig
	// Registry to which we send bearer tokens.
	registry name.Registry
	// See https://tools.ietf.org/html/rfc6750#section-3
	realm string
	// See https://docs.docker.com/registry/spec/auth/token/
	service string
	scopes  []string
	// Scheme we should use, determined by ping response.
	scheme string
}

var _ http.RoundTripper = (*bearerTransport)(nil)

var portMap = map[string]string{
	"http":  "80",
	"https": "443",
}

func stringSet(ss []string) map[string]struct{} {
	set := make(map[string]struct{})
	for _, s := range ss {
		set[s] = struct{}{}
	}
	return set
}

// RoundTrip implements http.RoundTripper
func (bt *bearerTransport) RoundTrip(in *http.Request) (*http.Response, error) {
	sendRequest := func() (*http.Response, error) {
		// http.Client handles redirects at a layer above the http.RoundTripper
		// abstraction, so to avoid forwarding Authorization headers to places
		// we are redirected, only set it when the authorization header matches
		// the registry with which we are interacting.
		// In case of redirect http.Client can use an empty Host, check URL too.
		if matchesHost(bt.registry, in, bt.scheme) {
			hdr := fmt.Sprintf("Bearer %s", bt.bearer.RegistryToken)
			in.Header.Set("Authorization", hdr)
		}
		return bt.inner.RoundTrip(in)
	}

	res, err := sendRequest()
	if err != nil {
		return nil, err
	}

	// If we hit a WWW-Authenticate challenge, it might be due to expired tokens or insufficient scope.
	if challenges := authchallenge.ResponseChallenges(res); len(challenges) != 0 {
		// close out old response, since we will not return it.
		res.Body.Close()

		newScopes := []string{}
		for _, wac := range challenges {
			// TODO(jonjohnsonjr): Should we also update "realm" or "service"?
			if want, ok := wac.Parameters["scope"]; ok {
				// Add any scopes that we don't already request.
				got := stringSet(bt.scopes)
				if _, ok := got[want]; !ok {
					newScopes = append(newScopes, want)
				}
			}
		}

		// Some registries seem to only look at the first scope parameter during a token exchange.
		// If a request fails because it's missing a scope, we should put those at the beginning,
		// otherwise the registry might just ignore it :/
		newScopes = append(newScopes, bt.scopes...)
		bt.scopes = newScopes

		// TODO(jonjohnsonjr): Teach transport.Error about "error" and "error_description" from challenge.

		// Retry the request to attempt to get a valid token.
		if err = bt.refresh(in.Context()); err != nil {
			return nil, err
		}
		return sendRequest()
	}

	return res, err
}

// It's unclear which authentication flow to use based purely on the protocol,
// so we rely on heuristics and fallbacks to support as many registries as possible.
// The basic token exchange is attempted first, falling back to the oauth flow.
// If the IdentityToken is set, this indicates that we should start with the oauth flow.
func (bt *bearerTransport) refresh(ctx context.Context) error {
	auth, err := bt.basic.Authorization()
	if err != nil {
		return err
	}

	if auth.RegistryToken != "" {
		bt.bearer.RegistryToken = auth.RegistryToken
		return nil
	}

	var content []byte
	if auth.IdentityToken != "" {
		// If the secret being stored is an identity token,
		// the Username should be set to <token>, which indicates
		// we are using an oauth flow.
		content, err = bt.refreshOauth(ctx)
		var terr *Error
		if errors.As(err, &terr) && terr.StatusCode == http.StatusNotFound {
			// Note: Not all token servers implement oauth2.
			// If the request to the endpoint returns 404 using the HTTP POST method,
			// refer to Token Documentation for using the HTTP GET method supported by all token servers.
			content, err = bt.refreshBasic(ctx)
		}
	} else {
		content, err = bt.refreshBasic(ctx)
	}
	if err != nil {
		return err
	}

	// Some registries don't have "token" in the response. See #54.
	type tokenResponse struct {
		Token        string `json:"token"`
		AccessToken  string `json:"access_token"`
		RefreshToken string `json:"refresh_token"`
		// TODO: handle expiry?
	}

	var response tokenResponse
	if err := json.Unmarshal(content, &response); err != nil {
		return err
	}

	// Some registries set access_token instead of token.
	if response.AccessToken != "" {
		response.Token = response.AccessToken
	}

	// Find a token to turn into a Bearer authenticator
	if response.Token != "" {
		bt.bearer.RegistryToken = response.Token
	} else {
		return fmt.Errorf("no token in bearer response:\n%s", content)
	}

	// If we obtained a refresh token from the oauth flow, use that for refresh() now.
	if response.RefreshToken != "" {
		bt.basic = authn.FromConfig(authn.AuthConfig{
			IdentityToken: response.RefreshToken,
		})
	}

	return nil
}

func matchesHost(reg name.Registry, in *http.Request, scheme string) bool {
	canonicalHeaderHost := canonicalAddress(in.Host, scheme)
	canonicalURLHost := canonicalAddress(in.URL.Host, scheme)
	canonicalRegistryHost := canonicalAddress(reg.RegistryStr(), scheme)
	return canonicalHeaderHost == canonicalRegistryHost || canonicalURLHost == canonicalRegistryHost
}

func canonicalAddress(host, scheme string) (address string) {
	// The host may be any one of:
	// - hostname
	// - hostname:port
	// - ipv4
	// - ipv4:port
	// - ipv6
	// - [ipv6]:port
	// As net.SplitHostPort returns an error if the host does not contain a port, we should only attempt
	// to call it when we know that the address contains a port
	if strings.Count(host, ":") == 1 || (strings.Count(host, ":") >= 2 && strings.Contains(host, "]:")) {
		hostname, port, err := net.SplitHostPort(host)
		if err != nil {
			return host
		}
		if port == "" {
			port = portMap[scheme]
		}

		return net.JoinHostPort(hostname, port)
	}

	return net.JoinHostPort(host, portMap[scheme])
}

// https://docs.docker.com/registry/spec/auth/oauth/
func (bt *bearerTransport) refreshOauth(ctx context.Context) ([]byte, error) {
	auth, err := bt.basic.Authorization()
	if err != nil {
		return nil, err
	}

	u, err := url.Parse(bt.realm)
	if err != nil {
		return nil, err
	}

	v := url.Values{}
	v.Set("scope", strings.Join(bt.scopes, " "))
	if bt.service != "" {
		v.Set("service", bt.service)
	}
	v.Set("client_id", defaultUserAgent)
	if auth.IdentityToken != "" {
		v.Set("grant_type", "refresh_token")
		v.Set("refresh_token", auth.IdentityToken)
	} else if auth.Username != "" && auth.Password != "" {
		// TODO(#629): This is unreachable.
		v.Set("grant_type", "password")
		v.Set("username", auth.Username)
		v.Set("password", auth.Password)
		v.Set("access_type", "offline")
	}

	client := http.Client{Transport: bt.inner}
	req, err := http.NewRequest(http.MethodPost, u.String(), strings.NewReader(v.Encode()))
	if err != nil {
		return nil, err
	}
	req.Header.Set("Content-Type", "application/x-www-form-urlencoded")

	// We don't want to log credentials.
	ctx = redact.NewContext(ctx, "oauth token response contains credentials")

	resp, err := client.Do(req.WithContext(ctx))
	if err != nil {
		return nil, err
	}
	defer resp.Body.Close()

	if err := CheckError(resp, http.StatusOK); err != nil {
		if bt.basic == authn.Anonymous {
			logs.Warn.Printf("No matching credentials were found for %q", bt.registry)
		}
		return nil, err
	}

	return io.ReadAll(resp.Body)
}

// https://docs.docker.com/registry/spec/auth/token/
func (bt *bearerTransport) refreshBasic(ctx context.Context) ([]byte, error) {
	u, err := url.Parse(bt.realm)
	if err != nil {
		return nil, err
	}
	b := &basicTransport{
		inner:  bt.inner,
		auth:   bt.basic,
		target: u.Host,
	}
	client := http.Client{Transport: b}

	v := u.Query()
	v["scope"] = bt.scopes
	v.Set("service", bt.service)
	u.RawQuery = v.Encode()

	req, err := http.NewRequest(http.MethodGet, u.String(), nil)
	if err != nil {
		return nil, err
	}

	// We don't want to log credentials.
	ctx = redact.NewContext(ctx, "basic token response contains credentials")

	resp, err := client.Do(req.WithContext(ctx))
	if err != nil {
		return nil, err
	}
	defer resp.Body.Close()

	if err := CheckError(resp, http.StatusOK); err != nil {
		if bt.basic == authn.Anonymous {
			logs.Warn.Printf("No matching credentials were found for %q", bt.registry)
		}
		return nil, err
	}

	return io.ReadAll(resp.Body)
}
070701000006F5000081A4000000000000000000000001645E367C0000032A000000000000000000000000000000000000006100000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/doc.go  // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package transport provides facilities for setting up an authenticated
// http.RoundTripper given an Authenticator and base RoundTripper.  See
// transport.New for more information.
package transport
  070701000006F6000081A4000000000000000000000001645E367C00001665000000000000000000000000000000000000006300000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/error.go    // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package transport

import (
	"encoding/json"
	"fmt"
	"io"
	"net/http"
	"strings"

	"github.com/google/go-containerregistry/internal/redact"
)

// Error implements error to support the following error specification:
// https://github.com/docker/distribution/blob/master/docs/spec/api.md#errors
type Error struct {
	Errors []Diagnostic `json:"errors,omitempty"`
	// The http status code returned.
	StatusCode int
	// The request that failed.
	Request *http.Request
	// The raw body if we couldn't understand it.
	rawBody string
}

// Check that Error implements error
var _ error = (*Error)(nil)

// Error implements error
func (e *Error) Error() string {
	prefix := ""
	if e.Request != nil {
		prefix = fmt.Sprintf("%s %s: ", e.Request.Method, redact.URL(e.Request.URL))
	}
	return prefix + e.responseErr()
}

func (e *Error) responseErr() string {
	switch len(e.Errors) {
	case 0:
		if len(e.rawBody) == 0 {
			if e.Request != nil && e.Request.Method == http.MethodHead {
				return fmt.Sprintf("unexpected status code %d %s (HEAD responses have no body, use GET for details)", e.StatusCode, http.StatusText(e.StatusCode))
			}
			return fmt.Sprintf("unexpected status code %d %s", e.StatusCode, http.StatusText(e.StatusCode))
		}
		return fmt.Sprintf("unexpected status code %d %s: %s", e.StatusCode, http.StatusText(e.StatusCode), e.rawBody)
	case 1:
		return e.Errors[0].String()
	default:
		var errors []string
		for _, d := range e.Errors {
			errors = append(errors, d.String())
		}
		return fmt.Sprintf("multiple errors returned: %s",
			strings.Join(errors, "; "))
	}
}

// Temporary returns whether the request that preceded the error is temporary.
func (e *Error) Temporary() bool {
	if len(e.Errors) == 0 {
		_, ok := temporaryStatusCodes[e.StatusCode]
		return ok
	}
	for _, d := range e.Errors {
		if _, ok := temporaryErrorCodes[d.Code]; !ok {
			return false
		}
	}
	return true
}

// Diagnostic represents a single error returned by a Docker registry interaction.
type Diagnostic struct {
	Code    ErrorCode `json:"code"`
	Message string    `json:"message,omitempty"`
	Detail  any       `json:"detail,omitempty"`
}

// String stringifies the Diagnostic in the form: $Code: $Message[; $Detail]
func (d Diagnostic) String() string {
	msg := fmt.Sprintf("%s: %s", d.Code, d.Message)
	if d.Detail != nil {
		msg = fmt.Sprintf("%s; %v", msg, d.Detail)
	}
	return msg
}

// ErrorCode is an enumeration of supported error codes.
type ErrorCode string

// The set of error conditions a registry may return:
// https://github.com/docker/distribution/blob/master/docs/spec/api.md#errors-2
const (
	BlobUnknownErrorCode         ErrorCode = "BLOB_UNKNOWN"
	BlobUploadInvalidErrorCode   ErrorCode = "BLOB_UPLOAD_INVALID"
	BlobUploadUnknownErrorCode   ErrorCode = "BLOB_UPLOAD_UNKNOWN"
	DigestInvalidErrorCode       ErrorCode = "DIGEST_INVALID"
	ManifestBlobUnknownErrorCode ErrorCode = "MANIFEST_BLOB_UNKNOWN"
	ManifestInvalidErrorCode     ErrorCode = "MANIFEST_INVALID"
	ManifestUnknownErrorCode     ErrorCode = "MANIFEST_UNKNOWN"
	ManifestUnverifiedErrorCode  ErrorCode = "MANIFEST_UNVERIFIED"
	NameInvalidErrorCode         ErrorCode = "NAME_INVALID"
	NameUnknownErrorCode         ErrorCode = "NAME_UNKNOWN"
	SizeInvalidErrorCode         ErrorCode = "SIZE_INVALID"
	TagInvalidErrorCode          ErrorCode = "TAG_INVALID"
	UnauthorizedErrorCode        ErrorCode = "UNAUTHORIZED"
	DeniedErrorCode              ErrorCode = "DENIED"
	UnsupportedErrorCode         ErrorCode = "UNSUPPORTED"
	TooManyRequestsErrorCode     ErrorCode = "TOOMANYREQUESTS"
	UnknownErrorCode             ErrorCode = "UNKNOWN"

	// This isn't defined by either docker or OCI spec, but is defined by docker/distribution:
	// https://github.com/distribution/distribution/blob/6a977a5a754baa213041443f841705888107362a/registry/api/errcode/register.go#L60
	UnavailableErrorCode ErrorCode = "UNAVAILABLE"
)

// TODO: Include other error types.
var temporaryErrorCodes = map[ErrorCode]struct{}{
	BlobUploadInvalidErrorCode: {},
	TooManyRequestsErrorCode:   {},
	UnknownErrorCode:           {},
	UnavailableErrorCode:       {},
}

var temporaryStatusCodes = map[int]struct{}{
	http.StatusRequestTimeout:      {},
	http.StatusInternalServerError: {},
	http.StatusBadGateway:          {},
	http.StatusServiceUnavailable:  {},
	http.StatusGatewayTimeout:      {},
}

// CheckError returns a structured error if the response status is not in codes.
func CheckError(resp *http.Response, codes ...int) error {
	for _, code := range codes {
		if resp.StatusCode == code {
			// This is one of the supported status codes.
			return nil
		}
	}
	b, err := io.ReadAll(resp.Body)
	if err != nil {
		return err
	}

	// https://github.com/docker/distribution/blob/master/docs/spec/api.md#errors
	structuredError := &Error{}

	// This can fail if e.g. the response body is not valid JSON. That's fine,
	// we'll construct an appropriate error string from the body and status code.
	_ = json.Unmarshal(b, structuredError)

	structuredError.rawBody = string(b)
	structuredError.StatusCode = resp.StatusCode
	structuredError.Request = resp.Request

	return structuredError
}
   070701000006F7000081A4000000000000000000000001645E367C00000A50000000000000000000000000000000000000006400000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/logger.go   // Copyright 2020 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package transport

import (
	"fmt"
	"net/http"
	"net/http/httputil"
	"time"

	"github.com/google/go-containerregistry/internal/redact"
	"github.com/google/go-containerregistry/pkg/logs"
)

type logTransport struct {
	inner http.RoundTripper
}

// NewLogger returns a transport that logs requests and responses to
// github.com/google/go-containerregistry/pkg/logs.Debug.
func NewLogger(inner http.RoundTripper) http.RoundTripper {
	return &logTransport{inner}
}

func (t *logTransport) RoundTrip(in *http.Request) (out *http.Response, err error) {
	// Inspired by: github.com/motemen/go-loghttp

	// We redact token responses and binary blobs in response/request.
	omitBody, reason := redact.FromContext(in.Context())
	if omitBody {
		logs.Debug.Printf("--> %s %s [body redacted: %s]", in.Method, in.URL, reason)
	} else {
		logs.Debug.Printf("--> %s %s", in.Method, in.URL)
	}

	// Save these headers so we can redact Authorization.
	savedHeaders := in.Header.Clone()
	if in.Header != nil && in.Header.Get("authorization") != "" {
		in.Header.Set("authorization", "<redacted>")
	}

	b, err := httputil.DumpRequestOut(in, !omitBody)
	if err == nil {
		logs.Debug.Println(string(b))
	} else {
		logs.Debug.Printf("Failed to dump request %s %s: %v", in.Method, in.URL, err)
	}

	// Restore the non-redacted headers.
	in.Header = savedHeaders

	start := time.Now()
	out, err = t.inner.RoundTrip(in)
	duration := time.Since(start)
	if err != nil {
		logs.Debug.Printf("<-- %v %s %s (%s)", err, in.Method, in.URL, duration)
	}
	if out != nil {
		msg := fmt.Sprintf("<-- %d", out.StatusCode)
		if out.Request != nil {
			msg = fmt.Sprintf("%s %s", msg, out.Request.URL)
		}
		msg = fmt.Sprintf("%s (%s)", msg, duration)

		if omitBody {
			msg = fmt.Sprintf("%s [body redacted: %s]", msg, reason)
		}

		logs.Debug.Print(msg)

		b, err := httputil.DumpResponse(out, !omitBody)
		if err == nil {
			logs.Debug.Println(string(b))
		} else {
			logs.Debug.Printf("Failed to dump response %s %s: %v", in.Method, in.URL, err)
		}
	}
	return
}
070701000006F8000081A4000000000000000000000001645E367C00001817000000000000000000000000000000000000006200000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/ping.go // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package transport

import (
	"context"
	"errors"
	"fmt"
	"io"
	"net/http"
	"strings"
	"time"

	authchallenge "github.com/docker/distribution/registry/client/auth/challenge"
	"github.com/google/go-containerregistry/pkg/logs"
	"github.com/google/go-containerregistry/pkg/name"
)

type challenge string

const (
	anonymous challenge = "anonymous"
	basic     challenge = "basic"
	bearer    challenge = "bearer"
)

// 300ms is the default fallback period for go's DNS dialer but we could make this configurable.
var fallbackDelay = 300 * time.Millisecond

type pingResp struct {
	challenge challenge

	// Following the challenge there are often key/value pairs
	// e.g. Bearer service="gcr.io",realm="https://auth.gcr.io/v36/tokenz"
	parameters map[string]string

	// The registry's scheme to use. Communicates whether we fell back to http.
	scheme string
}

func (c challenge) Canonical() challenge {
	return challenge(strings.ToLower(string(c)))
}

func ping(ctx context.Context, reg name.Registry, t http.RoundTripper) (*pingResp, error) {
	// This first attempts to use "https" for every request, falling back to http
	// if the registry matches our localhost heuristic or if it is intentionally
	// set to insecure via name.NewInsecureRegistry.
	schemes := []string{"https"}
	if reg.Scheme() == "http" {
		schemes = append(schemes, "http")
	}
	if len(schemes) == 1 {
		return pingSingle(ctx, reg, t, schemes[0])
	}
	return pingParallel(ctx, reg, t, schemes)
}

func pingSingle(ctx context.Context, reg name.Registry, t http.RoundTripper, scheme string) (*pingResp, error) {
	client := http.Client{Transport: t}
	url := fmt.Sprintf("%s://%s/v2/", scheme, reg.Name())
	req, err := http.NewRequest(http.MethodGet, url, nil)
	if err != nil {
		return nil, err
	}
	resp, err := client.Do(req.WithContext(ctx))
	if err != nil {
		return nil, err
	}
	defer func() {
		// By draining the body, make sure to reuse the connection made by
		// the ping for the following access to the registry
		io.Copy(io.Discard, resp.Body)
		resp.Body.Close()
	}()

	switch resp.StatusCode {
	case http.StatusOK:
		// If we get a 200, then no authentication is needed.
		return &pingResp{
			challenge: anonymous,
			scheme:    scheme,
		}, nil
	case http.StatusUnauthorized:
		if challenges := authchallenge.ResponseChallenges(resp); len(challenges) != 0 {
			// If we hit more than one, let's try to find one that we know how to handle.
			wac := pickFromMultipleChallenges(challenges)
			return &pingResp{
				challenge:  challenge(wac.Scheme).Canonical(),
				parameters: wac.Parameters,
				scheme:     scheme,
			}, nil
		}
		// Otherwise, just return the challenge without parameters.
		return &pingResp{
			challenge: challenge(resp.Header.Get("WWW-Authenticate")).Canonical(),
			scheme:    scheme,
		}, nil
	default:
		return nil, CheckError(resp, http.StatusOK, http.StatusUnauthorized)
	}
}

// Based on the golang happy eyeballs dialParallel impl in net/dial.go.
func pingParallel(ctx context.Context, reg name.Registry, t http.RoundTripper, schemes []string) (*pingResp, error) {
	returned := make(chan struct{})
	defer close(returned)

	type pingResult struct {
		*pingResp
		error
		primary bool
		done    bool
	}

	results := make(chan pingResult)

	startRacer := func(ctx context.Context, scheme string) {
		pr, err := pingSingle(ctx, reg, t, scheme)
		select {
		case results <- pingResult{pingResp: pr, error: err, primary: scheme == "https", done: true}:
		case <-returned:
			if pr != nil {
				logs.Debug.Printf("%s lost race", scheme)
			}
		}
	}

	var primary, fallback pingResult

	primaryCtx, primaryCancel := context.WithCancel(ctx)
	defer primaryCancel()
	go startRacer(primaryCtx, schemes[0])

	fallbackTimer := time.NewTimer(fallbackDelay)
	defer fallbackTimer.Stop()

	for {
		select {
		case <-fallbackTimer.C:
			fallbackCtx, fallbackCancel := context.WithCancel(ctx)
			defer fallbackCancel()
			go startRacer(fallbackCtx, schemes[1])

		case res := <-results:
			if res.error == nil {
				return res.pingResp, nil
			}
			if res.primary {
				primary = res
			} else {
				fallback = res
			}
			if primary.done && fallback.done {
				return nil, multierrs([]error{primary.error, fallback.error})
			}
			if res.primary && fallbackTimer.Stop() {
				// Primary failed and we haven't started the fallback,
				// reset time to start fallback immediately.
				fallbackTimer.Reset(0)
			}
		}
	}
}

func pickFromMultipleChallenges(challenges []authchallenge.Challenge) authchallenge.Challenge {
	// It might happen there are multiple www-authenticate headers, e.g. `Negotiate` and `Basic`.
	// Picking simply the first one could result eventually in `unrecognized challenge` error,
	// that's why we're looping through the challenges in search for one that can be handled.
	allowedSchemes := []string{"basic", "bearer"}

	for _, wac := range challenges {
		currentScheme := strings.ToLower(wac.Scheme)
		for _, allowed := range allowedSchemes {
			if allowed == currentScheme {
				return wac
			}
		}
	}

	return challenges[0]
}

type multierrs []error

func (m multierrs) Error() string {
	var b strings.Builder
	hasWritten := false
	for _, err := range m {
		if hasWritten {
			b.WriteString("; ")
		}
		hasWritten = true
		b.WriteString(err.Error())
	}
	return b.String()
}

func (m multierrs) As(target any) bool {
	for _, err := range m {
		if errors.As(err, target) {
			return true
		}
	}
	return false
}

func (m multierrs) Is(target error) bool {
	for _, err := range m {
		if errors.Is(err, target) {
			return true
		}
	}
	return false
}
 070701000006F9000081A4000000000000000000000001645E367C00000ACC000000000000000000000000000000000000006300000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/retry.go    // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package transport

import (
	"net/http"
	"time"

	"github.com/google/go-containerregistry/internal/retry"
)

// Sleep for 0.1 then 0.3 seconds. This should cover networking blips.
var defaultBackoff = retry.Backoff{
	Duration: 100 * time.Millisecond,
	Factor:   3.0,
	Jitter:   0.1,
	Steps:    3,
}

var _ http.RoundTripper = (*retryTransport)(nil)

// retryTransport wraps a RoundTripper and retries temporary network errors.
type retryTransport struct {
	inner     http.RoundTripper
	backoff   retry.Backoff
	predicate retry.Predicate
	codes     []int
}

// Option is a functional option for retryTransport.
type Option func(*options)

type options struct {
	backoff   retry.Backoff
	predicate retry.Predicate
	codes     []int
}

// Backoff is an alias of retry.Backoff to expose this configuration option to consumers of this lib
type Backoff = retry.Backoff

// WithRetryBackoff sets the backoff for retry operations.
func WithRetryBackoff(backoff Backoff) Option {
	return func(o *options) {
		o.backoff = backoff
	}
}

// WithRetryPredicate sets the predicate for retry operations.
func WithRetryPredicate(predicate func(error) bool) Option {
	return func(o *options) {
		o.predicate = predicate
	}
}

// WithRetryStatusCodes sets which http response codes will be retried.
func WithRetryStatusCodes(codes ...int) Option {
	return func(o *options) {
		o.codes = codes
	}
}

// NewRetry returns a transport that retries errors.
func NewRetry(inner http.RoundTripper, opts ...Option) http.RoundTripper {
	o := &options{
		backoff:   defaultBackoff,
		predicate: retry.IsTemporary,
	}

	for _, opt := range opts {
		opt(o)
	}

	return &retryTransport{
		inner:     inner,
		backoff:   o.backoff,
		predicate: o.predicate,
		codes:     o.codes,
	}
}

func (t *retryTransport) RoundTrip(in *http.Request) (out *http.Response, err error) {
	roundtrip := func() error {
		out, err = t.inner.RoundTrip(in)
		if !retry.Ever(in.Context()) {
			return nil
		}
		if out != nil {
			for _, code := range t.codes {
				if out.StatusCode == code {
					return CheckError(out)
				}
			}
		}
		return err
	}
	retry.Retry(roundtrip, t.predicate, t.backoff)
	return
}
070701000006FA000081A4000000000000000000000001645E367C000005A2000000000000000000000000000000000000006500000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/schemer.go  // Copyright 2019 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package transport

import (
	"net/http"

	"github.com/google/go-containerregistry/pkg/name"
)

type schemeTransport struct {
	// Scheme we should use, determined by ping response.
	scheme string

	// Registry we're talking to.
	registry name.Registry

	// Wrapped by schemeTransport.
	inner http.RoundTripper
}

// RoundTrip implements http.RoundTripper
func (st *schemeTransport) RoundTrip(in *http.Request) (*http.Response, error) {
	// When we ping() the registry, we determine whether to use http or https
	// based on which scheme was successful. That is only valid for the
	// registry server and not e.g. a separate token server or blob storage,
	// so we should only override the scheme if the host is the registry.
	if matchesHost(st.registry, in, st.scheme) {
		in.URL.Scheme = st.scheme
	}
	return st.inner.RoundTrip(in)
}
  070701000006FB000081A4000000000000000000000001645E367C00000361000000000000000000000000000000000000006300000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/scope.go    // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package transport

// Scopes suitable to qualify each Repository
const (
	PullScope string = "pull"
	PushScope string = "push,pull"
	// For now DELETE is PUSH, which is the read/write ACL.
	DeleteScope  string = PushScope
	CatalogScope string = "catalog"
)
   070701000006FC000081A4000000000000000000000001645E367C0000103D000000000000000000000000000000000000006700000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/transport.go    // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package transport

import (
	"context"
	"fmt"
	"net/http"

	"github.com/google/go-containerregistry/pkg/authn"
	"github.com/google/go-containerregistry/pkg/name"
)

// New returns a new RoundTripper based on the provided RoundTripper that has been
// setup to authenticate with the remote registry "reg", in the capacity
// laid out by the specified scopes.
//
// Deprecated: Use NewWithContext.
func New(reg name.Registry, auth authn.Authenticator, t http.RoundTripper, scopes []string) (http.RoundTripper, error) {
	return NewWithContext(context.Background(), reg, auth, t, scopes)
}

// NewWithContext returns a new RoundTripper based on the provided RoundTripper that has been
// set up to authenticate with the remote registry "reg", in the capacity
// laid out by the specified scopes.
// In case the RoundTripper is already of the type Wrapper it assumes
// authentication was already done prior to this call, so it just returns
// the provided RoundTripper without further action
func NewWithContext(ctx context.Context, reg name.Registry, auth authn.Authenticator, t http.RoundTripper, scopes []string) (http.RoundTripper, error) {
	// When the transport provided is of the type Wrapper this function assumes that the caller already
	// executed the necessary login and check.
	switch t.(type) {
	case *Wrapper:
		return t, nil
	}
	// The handshake:
	//  1. Use "t" to ping() the registry for the authentication challenge.
	//
	//  2a. If we get back a 200, then simply use "t".
	//
	//  2b. If we get back a 401 with a Basic challenge, then use a transport
	//     that just attachs auth each roundtrip.
	//
	//  2c. If we get back a 401 with a Bearer challenge, then use a transport
	//     that attaches a bearer token to each request, and refreshes is on 401s.
	//     Perform an initial refresh to seed the bearer token.

	// First we ping the registry to determine the parameters of the authentication handshake
	// (if one is even necessary).
	pr, err := ping(ctx, reg, t)
	if err != nil {
		return nil, err
	}

	// Wrap t with a useragent transport unless we already have one.
	if _, ok := t.(*userAgentTransport); !ok {
		t = NewUserAgent(t, "")
	}

	// Wrap t in a transport that selects the appropriate scheme based on the ping response.
	t = &schemeTransport{
		scheme:   pr.scheme,
		registry: reg,
		inner:    t,
	}

	switch pr.challenge.Canonical() {
	case anonymous, basic:
		return &Wrapper{&basicTransport{inner: t, auth: auth, target: reg.RegistryStr()}}, nil
	case bearer:
		// We require the realm, which tells us where to send our Basic auth to turn it into Bearer auth.
		realm, ok := pr.parameters["realm"]
		if !ok {
			return nil, fmt.Errorf("malformed www-authenticate, missing realm: %v", pr.parameters)
		}
		service := pr.parameters["service"]
		bt := &bearerTransport{
			inner:    t,
			basic:    auth,
			realm:    realm,
			registry: reg,
			service:  service,
			scopes:   scopes,
			scheme:   pr.scheme,
		}
		if err := bt.refresh(ctx); err != nil {
			return nil, err
		}
		return &Wrapper{bt}, nil
	default:
		return nil, fmt.Errorf("unrecognized challenge: %s", pr.challenge)
	}
}

// Wrapper results in *not* wrapping supplied transport with additional logic such as retries, useragent and debug logging
// Consumers are opt-ing into providing their own transport without any additional wrapping.
type Wrapper struct {
	inner http.RoundTripper
}

// RoundTrip delegates to the inner RoundTripper
func (w *Wrapper) RoundTrip(in *http.Request) (*http.Response, error) {
	return w.inner.RoundTrip(in)
}
   070701000006FD000081A4000000000000000000000001645E367C000008D4000000000000000000000000000000000000006700000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/useragent.go    // Copyright 2019 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package transport

import (
	"fmt"
	"net/http"
	"runtime/debug"
)

var (
	// Version can be set via:
	// -ldflags="-X 'github.com/google/go-containerregistry/pkg/v1/remote/transport.Version=$TAG'"
	Version string

	ggcrVersion = defaultUserAgent
)

const (
	defaultUserAgent = "go-containerregistry"
	moduleName       = "github.com/google/go-containerregistry"
)

type userAgentTransport struct {
	inner http.RoundTripper
	ua    string
}

func init() {
	if v := version(); v != "" {
		ggcrVersion = fmt.Sprintf("%s/%s", defaultUserAgent, v)
	}
}

func version() string {
	if Version != "" {
		// Version was set via ldflags, just return it.
		return Version
	}

	info, ok := debug.ReadBuildInfo()
	if !ok {
		return ""
	}

	// Happens for crane and gcrane.
	if info.Main.Path == moduleName {
		return info.Main.Version
	}

	// Anything else.
	for _, dep := range info.Deps {
		if dep.Path == moduleName {
			return dep.Version
		}
	}

	return ""
}

// NewUserAgent returns an http.Roundtripper that sets the user agent to
// The provided string plus additional go-containerregistry information,
// e.g. if provided "crane/v0.1.4" and this modules was built at v0.1.4:
//
// User-Agent: crane/v0.1.4 go-containerregistry/v0.1.4
func NewUserAgent(inner http.RoundTripper, ua string) http.RoundTripper {
	if ua == "" {
		ua = ggcrVersion
	} else {
		ua = fmt.Sprintf("%s %s", ua, ggcrVersion)
	}
	return &userAgentTransport{
		inner: inner,
		ua:    ua,
	}
}

// RoundTrip implements http.RoundTripper
func (ut *userAgentTransport) RoundTrip(in *http.Request) (*http.Response, error) {
	in.Header.Set("User-Agent", ut.ua)
	return ut.inner.RoundTrip(in)
}
070701000006FE000081A4000000000000000000000001645E367C000070ED000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/remote/write.go  // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package remote

import (
	"bytes"
	"context"
	"encoding/json"
	"errors"
	"fmt"
	"io"
	"net/http"
	"net/url"
	"sort"
	"strings"

	"github.com/google/go-containerregistry/internal/redact"
	"github.com/google/go-containerregistry/internal/retry"
	"github.com/google/go-containerregistry/pkg/logs"
	"github.com/google/go-containerregistry/pkg/name"
	v1 "github.com/google/go-containerregistry/pkg/v1"
	"github.com/google/go-containerregistry/pkg/v1/partial"
	"github.com/google/go-containerregistry/pkg/v1/remote/transport"
	"github.com/google/go-containerregistry/pkg/v1/stream"
	"github.com/google/go-containerregistry/pkg/v1/types"
	"golang.org/x/sync/errgroup"
)

// Taggable is an interface that enables a manifest PUT (e.g. for tagging).
type Taggable interface {
	RawManifest() ([]byte, error)
}

// Write pushes the provided img to the specified image reference.
func Write(ref name.Reference, img v1.Image, options ...Option) (rerr error) {
	o, err := makeOptions(ref.Context(), options...)
	if err != nil {
		return err
	}

	var p *progress
	if o.updates != nil {
		p = &progress{updates: o.updates}
		p.lastUpdate = &v1.Update{}
		p.lastUpdate.Total, err = countImage(img, o.allowNondistributableArtifacts)
		if err != nil {
			return err
		}
		defer close(o.updates)
		defer func() { _ = p.err(rerr) }()
	}
	return writeImage(o.context, ref, img, o, p)
}

func writeImage(ctx context.Context, ref name.Reference, img v1.Image, o *options, progress *progress) error {
	ls, err := img.Layers()
	if err != nil {
		return err
	}
	scopes := scopesForUploadingImage(ref.Context(), ls)
	tr, err := transport.NewWithContext(o.context, ref.Context().Registry, o.auth, o.transport, scopes)
	if err != nil {
		return err
	}
	w := writer{
		repo:      ref.Context(),
		client:    &http.Client{Transport: tr},
		progress:  progress,
		backoff:   o.retryBackoff,
		predicate: o.retryPredicate,
	}

	// Upload individual blobs and collect any errors.
	blobChan := make(chan v1.Layer, 2*o.jobs)
	g, gctx := errgroup.WithContext(ctx)
	for i := 0; i < o.jobs; i++ {
		// Start N workers consuming blobs to upload.
		g.Go(func() error {
			for b := range blobChan {
				if err := w.uploadOne(gctx, b); err != nil {
					return err
				}
			}
			return nil
		})
	}

	// Upload individual layers in goroutines and collect any errors.
	// If we can dedupe by the layer digest, try to do so. If we can't determine
	// the digest for whatever reason, we can't dedupe and might re-upload.
	g.Go(func() error {
		defer close(blobChan)
		uploaded := map[v1.Hash]bool{}
		for _, l := range ls {
			l := l

			// Handle foreign layers.
			mt, err := l.MediaType()
			if err != nil {
				return err
			}
			if !mt.IsDistributable() && !o.allowNondistributableArtifacts {
				continue
			}

			// Streaming layers calculate their digests while uploading them. Assume
			// an error here indicates we need to upload the layer.
			h, err := l.Digest()
			if err == nil {
				// If we can determine the layer's digest ahead of
				// time, use it to dedupe uploads.
				if uploaded[h] {
					continue // Already uploading.
				}
				uploaded[h] = true
			}
			select {
			case blobChan <- l:
			case <-gctx.Done():
				return gctx.Err()
			}
		}
		return nil
	})

	if l, err := partial.ConfigLayer(img); err != nil {
		// We can't read the ConfigLayer, possibly because of streaming layers,
		// since the layer DiffIDs haven't been calculated yet. Attempt to wait
		// for the other layers to be uploaded, then try the config again.
		if err := g.Wait(); err != nil {
			return err
		}

		// Now that all the layers are uploaded, try to upload the config file blob.
		l, err := partial.ConfigLayer(img)
		if err != nil {
			return err
		}
		if err := w.uploadOne(ctx, l); err != nil {
			return err
		}
	} else {
		// We *can* read the ConfigLayer, so upload it concurrently with the layers.
		g.Go(func() error {
			return w.uploadOne(gctx, l)
		})

		// Wait for the layers + config.
		if err := g.Wait(); err != nil {
			return err
		}
	}

	// With all of the constituent elements uploaded, upload the manifest
	// to commit the image.
	return w.commitManifest(ctx, img, ref)
}

// writer writes the elements of an image to a remote image reference.
type writer struct {
	repo   name.Repository
	client *http.Client

	progress  *progress
	backoff   Backoff
	predicate retry.Predicate
}

// url returns a url.Url for the specified path in the context of this remote image reference.
func (w *writer) url(path string) url.URL {
	return url.URL{
		Scheme: w.repo.Registry.Scheme(),
		Host:   w.repo.RegistryStr(),
		Path:   path,
	}
}

// nextLocation extracts the fully-qualified URL to which we should send the next request in an upload sequence.
func (w *writer) nextLocation(resp *http.Response) (string, error) {
	loc := resp.Header.Get("Location")
	if len(loc) == 0 {
		return "", errors.New("missing Location header")
	}
	u, err := url.Parse(loc)
	if err != nil {
		return "", err
	}

	// If the location header returned is just a url path, then fully qualify it.
	// We cannot simply call w.url, since there might be an embedded query string.
	return resp.Request.URL.ResolveReference(u).String(), nil
}

// checkExistingBlob checks if a blob exists already in the repository by making a
// HEAD request to the blob store API.  GCR performs an existence check on the
// initiation if "mount" is specified, even if no "from" sources are specified.
// However, this is not broadly applicable to all registries, e.g. ECR.
func (w *writer) checkExistingBlob(ctx context.Context, h v1.Hash) (bool, error) {
	u := w.url(fmt.Sprintf("/v2/%s/blobs/%s", w.repo.RepositoryStr(), h.String()))

	req, err := http.NewRequest(http.MethodHead, u.String(), nil)
	if err != nil {
		return false, err
	}

	resp, err := w.client.Do(req.WithContext(ctx))
	if err != nil {
		return false, err
	}
	defer resp.Body.Close()

	if err := transport.CheckError(resp, http.StatusOK, http.StatusNotFound); err != nil {
		return false, err
	}

	return resp.StatusCode == http.StatusOK, nil
}

// checkExistingManifest checks if a manifest exists already in the repository
// by making a HEAD request to the manifest API.
func (w *writer) checkExistingManifest(ctx context.Context, h v1.Hash, mt types.MediaType) (bool, error) {
	u := w.url(fmt.Sprintf("/v2/%s/manifests/%s", w.repo.RepositoryStr(), h.String()))

	req, err := http.NewRequest(http.MethodHead, u.String(), nil)
	if err != nil {
		return false, err
	}
	req.Header.Set("Accept", string(mt))

	resp, err := w.client.Do(req.WithContext(ctx))
	if err != nil {
		return false, err
	}
	defer resp.Body.Close()

	if err := transport.CheckError(resp, http.StatusOK, http.StatusNotFound); err != nil {
		return false, err
	}

	return resp.StatusCode == http.StatusOK, nil
}

// initiateUpload initiates the blob upload, which starts with a POST that can
// optionally include the hash of the layer and a list of repositories from
// which that layer might be read. On failure, an error is returned.
// On success, the layer was either mounted (nothing more to do) or a blob
// upload was initiated and the body of that blob should be sent to the returned
// location.
func (w *writer) initiateUpload(ctx context.Context, from, mount, origin string) (location string, mounted bool, err error) {
	u := w.url(fmt.Sprintf("/v2/%s/blobs/uploads/", w.repo.RepositoryStr()))
	uv := url.Values{}
	if mount != "" && from != "" {
		// Quay will fail if we specify a "mount" without a "from".
		uv.Set("mount", mount)
		uv.Set("from", from)
		if origin != "" {
			uv.Set("origin", origin)
		}
	}
	u.RawQuery = uv.Encode()

	// Make the request to initiate the blob upload.
	req, err := http.NewRequest(http.MethodPost, u.String(), nil)
	if err != nil {
		return "", false, err
	}
	req.Header.Set("Content-Type", "application/json")
	resp, err := w.client.Do(req.WithContext(ctx))
	if err != nil {
		return "", false, err
	}
	defer resp.Body.Close()

	if err := transport.CheckError(resp, http.StatusCreated, http.StatusAccepted); err != nil {
		if origin != "" && origin != w.repo.RegistryStr() {
			// https://github.com/google/go-containerregistry/issues/1404
			logs.Warn.Printf("retrying without mount: %v", err)
			return w.initiateUpload(ctx, "", "", "")
		}
		return "", false, err
	}

	// Check the response code to determine the result.
	switch resp.StatusCode {
	case http.StatusCreated:
		// We're done, we were able to fast-path.
		return "", true, nil
	case http.StatusAccepted:
		// Proceed to PATCH, upload has begun.
		loc, err := w.nextLocation(resp)
		return loc, false, err
	default:
		panic("Unreachable: initiateUpload")
	}
}

// streamBlob streams the contents of the blob to the specified location.
// On failure, this will return an error.  On success, this will return the location
// header indicating how to commit the streamed blob.
func (w *writer) streamBlob(ctx context.Context, layer v1.Layer, streamLocation string) (commitLocation string, rerr error) {
	reset := func() {}
	defer func() {
		if rerr != nil {
			reset()
		}
	}()
	blob, err := layer.Compressed()
	if err != nil {
		return "", err
	}

	getBody := layer.Compressed
	if w.progress != nil {
		var count int64
		blob = &progressReader{rc: blob, progress: w.progress, count: &count}
		getBody = func() (io.ReadCloser, error) {
			blob, err := layer.Compressed()
			if err != nil {
				return nil, err
			}
			return &progressReader{rc: blob, progress: w.progress, count: &count}, nil
		}
		reset = func() {
			w.progress.complete(-count)
		}
	}

	req, err := http.NewRequest(http.MethodPatch, streamLocation, blob)
	if err != nil {
		return "", err
	}
	if _, ok := layer.(*stream.Layer); !ok {
		// We can't retry streaming layers.
		req.GetBody = getBody
	}
	req.Header.Set("Content-Type", "application/octet-stream")

	resp, err := w.client.Do(req.WithContext(ctx))
	if err != nil {
		return "", err
	}
	defer resp.Body.Close()

	if err := transport.CheckError(resp, http.StatusNoContent, http.StatusAccepted, http.StatusCreated); err != nil {
		return "", err
	}

	// The blob has been uploaded, return the location header indicating
	// how to commit this layer.
	return w.nextLocation(resp)
}

// commitBlob commits this blob by sending a PUT to the location returned from
// streaming the blob.
func (w *writer) commitBlob(ctx context.Context, location, digest string) error {
	u, err := url.Parse(location)
	if err != nil {
		return err
	}
	v := u.Query()
	v.Set("digest", digest)
	u.RawQuery = v.Encode()

	req, err := http.NewRequest(http.MethodPut, u.String(), nil)
	if err != nil {
		return err
	}
	req.Header.Set("Content-Type", "application/octet-stream")

	resp, err := w.client.Do(req.WithContext(ctx))
	if err != nil {
		return err
	}
	defer resp.Body.Close()

	return transport.CheckError(resp, http.StatusCreated)
}

// incrProgress increments and sends a progress update, if WithProgress is used.
func (w *writer) incrProgress(written int64) {
	if w.progress == nil {
		return
	}
	w.progress.complete(written)
}

// uploadOne performs a complete upload of a single layer.
func (w *writer) uploadOne(ctx context.Context, l v1.Layer) error {
	tryUpload := func() error {
		ctx := retry.Never(ctx)
		var from, mount, origin string
		if h, err := l.Digest(); err == nil {
			// If we know the digest, this isn't a streaming layer. Do an existence
			// check so we can skip uploading the layer if possible.
			existing, err := w.checkExistingBlob(ctx, h)
			if err != nil {
				return err
			}
			if existing {
				size, err := l.Size()
				if err != nil {
					return err
				}
				w.incrProgress(size)
				logs.Progress.Printf("existing blob: %v", h)
				return nil
			}

			mount = h.String()
		}
		if ml, ok := l.(*MountableLayer); ok {
			from = ml.Reference.Context().RepositoryStr()
			origin = ml.Reference.Context().RegistryStr()
		}

		location, mounted, err := w.initiateUpload(ctx, from, mount, origin)
		if err != nil {
			return err
		} else if mounted {
			size, err := l.Size()
			if err != nil {
				return err
			}
			w.incrProgress(size)
			h, err := l.Digest()
			if err != nil {
				return err
			}
			logs.Progress.Printf("mounted blob: %s", h.String())
			return nil
		}

		// Only log layers with +json or +yaml. We can let through other stuff if it becomes popular.
		// TODO(opencontainers/image-spec#791): Would be great to have an actual parser.
		mt, err := l.MediaType()
		if err != nil {
			return err
		}
		smt := string(mt)
		if !(strings.HasSuffix(smt, "+json") || strings.HasSuffix(smt, "+yaml")) {
			ctx = redact.NewContext(ctx, "omitting binary blobs from logs")
		}

		location, err = w.streamBlob(ctx, l, location)
		if err != nil {
			return err
		}

		h, err := l.Digest()
		if err != nil {
			return err
		}
		digest := h.String()

		if err := w.commitBlob(ctx, location, digest); err != nil {
			return err
		}
		logs.Progress.Printf("pushed blob: %s", digest)
		return nil
	}

	return retry.Retry(tryUpload, w.predicate, w.backoff)
}

type withLayer interface {
	Layer(v1.Hash) (v1.Layer, error)
}

func (w *writer) writeIndex(ctx context.Context, ref name.Reference, ii v1.ImageIndex, options ...Option) error {
	index, err := ii.IndexManifest()
	if err != nil {
		return err
	}

	o, err := makeOptions(ref.Context(), options...)
	if err != nil {
		return err
	}

	// TODO(#803): Pipe through remote.WithJobs and upload these in parallel.
	for _, desc := range index.Manifests {
		ref := ref.Context().Digest(desc.Digest.String())
		exists, err := w.checkExistingManifest(ctx, desc.Digest, desc.MediaType)
		if err != nil {
			return err
		}
		if exists {
			logs.Progress.Print("existing manifest: ", desc.Digest)
			continue
		}

		switch desc.MediaType {
		case types.OCIImageIndex, types.DockerManifestList:
			ii, err := ii.ImageIndex(desc.Digest)
			if err != nil {
				return err
			}
			if err := w.writeIndex(ctx, ref, ii, options...); err != nil {
				return err
			}
		case types.OCIManifestSchema1, types.DockerManifestSchema2:
			img, err := ii.Image(desc.Digest)
			if err != nil {
				return err
			}
			if err := writeImage(ctx, ref, img, o, w.progress); err != nil {
				return err
			}
		default:
			// Workaround for #819.
			if wl, ok := ii.(withLayer); ok {
				layer, err := wl.Layer(desc.Digest)
				if err != nil {
					return err
				}
				if err := w.uploadOne(ctx, layer); err != nil {
					return err
				}
			}
		}
	}

	// With all of the constituent elements uploaded, upload the manifest
	// to commit the image.
	return w.commitManifest(ctx, ii, ref)
}

type withMediaType interface {
	MediaType() (types.MediaType, error)
}

// This is really silly, but go interfaces don't let me satisfy remote.Taggable
// with remote.Descriptor because of name collisions between method names and
// struct fields.
//
// Use reflection to either pull the v1.Descriptor out of remote.Descriptor or
// create a descriptor based on the RawManifest and (optionally) MediaType.
func unpackTaggable(t Taggable) ([]byte, *v1.Descriptor, error) {
	if d, ok := t.(*Descriptor); ok {
		return d.Manifest, &d.Descriptor, nil
	}
	b, err := t.RawManifest()
	if err != nil {
		return nil, nil, err
	}

	// A reasonable default if Taggable doesn't implement MediaType.
	mt := types.DockerManifestSchema2

	if wmt, ok := t.(withMediaType); ok {
		m, err := wmt.MediaType()
		if err != nil {
			return nil, nil, err
		}
		mt = m
	}

	h, sz, err := v1.SHA256(bytes.NewReader(b))
	if err != nil {
		return nil, nil, err
	}

	return b, &v1.Descriptor{
		MediaType: mt,
		Size:      sz,
		Digest:    h,
	}, nil
}

// commitSubjectReferrers is responsible for updating the fallback tag manifest to track descriptors referring to a subject for registries that don't yet support the Referrers API.
// TODO: use conditional requests to avoid race conditions
func (w *writer) commitSubjectReferrers(ctx context.Context, sub name.Digest, add v1.Descriptor) error {
	// Check if the registry supports Referrers API.
	// TODO: This should be done once per registry, not once per subject.
	u := w.url(fmt.Sprintf("/v2/%s/referrers/%s", w.repo.RepositoryStr(), sub.DigestStr()))
	req, err := http.NewRequest(http.MethodGet, u.String(), nil)
	if err != nil {
		return err
	}
	req.Header.Set("Accept", string(types.OCIImageIndex))
	resp, err := w.client.Do(req.WithContext(ctx))
	if err != nil {
		return err
	}
	defer resp.Body.Close()

	if err := transport.CheckError(resp, http.StatusOK, http.StatusNotFound, http.StatusBadRequest); err != nil {
		return err
	}
	if resp.StatusCode == http.StatusOK {
		// The registry supports Referrers API. The registry is responsible for updating the referrers list.
		return nil
	}

	// The registry doesn't support Referrers API, we need to update the manifest tagged with the fallback tag.
	// Make the request to GET the current manifest.
	t := fallbackTag(sub)
	u = w.url(fmt.Sprintf("/v2/%s/manifests/%s", w.repo.RepositoryStr(), t.Identifier()))
	req, err = http.NewRequest(http.MethodGet, u.String(), nil)
	if err != nil {
		return err
	}
	req.Header.Set("Accept", string(types.OCIImageIndex))
	resp, err = w.client.Do(req.WithContext(ctx))
	if err != nil {
		return err
	}
	defer resp.Body.Close()

	var im v1.IndexManifest
	if err := transport.CheckError(resp, http.StatusOK, http.StatusNotFound); err != nil {
		return err
	} else if resp.StatusCode == http.StatusNotFound {
		// Not found just means there are no attachments. Start with an empty index.
		im = v1.IndexManifest{
			SchemaVersion: 2,
			MediaType:     types.OCIImageIndex,
			Manifests:     []v1.Descriptor{add},
		}
	} else {
		if err := json.NewDecoder(resp.Body).Decode(&im); err != nil {
			return err
		}
		if im.SchemaVersion != 2 {
			return fmt.Errorf("fallback tag manifest is not a schema version 2: %d", im.SchemaVersion)
		}
		if im.MediaType != types.OCIImageIndex {
			return fmt.Errorf("fallback tag manifest is not an OCI image index: %s", im.MediaType)
		}
		for _, desc := range im.Manifests {
			if desc.Digest == add.Digest {
				// The digest is already attached, nothing to do.
				logs.Progress.Printf("fallback tag %s already had referrer", t.Identifier())
				return nil
			}
		}
		// Append the new descriptor to the index.
		im.Manifests = append(im.Manifests, add)
	}

	// Sort the manifests for reproducibility.
	sort.Slice(im.Manifests, func(i, j int) bool {
		return im.Manifests[i].Digest.String() < im.Manifests[j].Digest.String()
	})
	logs.Progress.Printf("updating fallback tag %s with new referrer", t.Identifier())
	if err := w.commitManifest(ctx, fallbackTaggable{im}, t); err != nil {
		return err
	}
	return nil
}

type fallbackTaggable struct {
	im v1.IndexManifest
}

func (f fallbackTaggable) RawManifest() ([]byte, error)        { return json.Marshal(f.im) }
func (f fallbackTaggable) MediaType() (types.MediaType, error) { return types.OCIImageIndex, nil }

// commitManifest does a PUT of the image's manifest.
func (w *writer) commitManifest(ctx context.Context, t Taggable, ref name.Reference) error {
	// If the manifest refers to a subject, we need to check whether we need to update the fallback tag manifest.
	raw, err := t.RawManifest()
	if err != nil {
		return err
	}
	var mf struct {
		MediaType types.MediaType `json:"mediaType"`
		Subject   *v1.Descriptor  `json:"subject,omitempty"`
		Config    struct {
			MediaType types.MediaType `json:"mediaType"`
		} `json:"config"`
	}
	if err := json.Unmarshal(raw, &mf); err != nil {
		return err
	}

	tryUpload := func() error {
		ctx := retry.Never(ctx)
		raw, desc, err := unpackTaggable(t)
		if err != nil {
			return err
		}

		u := w.url(fmt.Sprintf("/v2/%s/manifests/%s", w.repo.RepositoryStr(), ref.Identifier()))

		// Make the request to PUT the serialized manifest
		req, err := http.NewRequest(http.MethodPut, u.String(), bytes.NewBuffer(raw))
		if err != nil {
			return err
		}
		req.Header.Set("Content-Type", string(desc.MediaType))

		resp, err := w.client.Do(req.WithContext(ctx))
		if err != nil {
			return err
		}
		defer resp.Body.Close()

		if err := transport.CheckError(resp, http.StatusOK, http.StatusCreated, http.StatusAccepted); err != nil {
			return err
		}

		// If the manifest referred to a subject, we may need to update the fallback tag manifest.
		// TODO: If this fails, we'll retry the whole upload. We should retry just this part.
		if mf.Subject != nil {
			h, size, err := v1.SHA256(bytes.NewReader(raw))
			if err != nil {
				return err
			}
			desc := v1.Descriptor{
				ArtifactType: string(mf.Config.MediaType),
				MediaType:    mf.MediaType,
				Digest:       h,
				Size:         size,
			}
			if err := w.commitSubjectReferrers(ctx,
				ref.Context().Digest(mf.Subject.Digest.String()),
				desc); err != nil {
				return err
			}
		}

		// The image was successfully pushed!
		logs.Progress.Printf("%v: digest: %v size: %d", ref, desc.Digest, desc.Size)
		w.incrProgress(int64(len(raw)))
		return nil
	}

	return retry.Retry(tryUpload, w.predicate, w.backoff)
}

func scopesForUploadingImage(repo name.Repository, layers []v1.Layer) []string {
	// use a map as set to remove duplicates scope strings
	scopeSet := map[string]struct{}{}

	for _, l := range layers {
		if ml, ok := l.(*MountableLayer); ok {
			// we will add push scope for ref.Context() after the loop.
			// for now we ask pull scope for references of the same registry
			if ml.Reference.Context().String() != repo.String() && ml.Reference.Context().Registry.String() == repo.Registry.String() {
				scopeSet[ml.Reference.Scope(transport.PullScope)] = struct{}{}
			}
		}
	}

	scopes := make([]string, 0)
	// Push scope should be the first element because a few registries just look at the first scope to determine access.
	scopes = append(scopes, repo.Scope(transport.PushScope))

	for scope := range scopeSet {
		scopes = append(scopes, scope)
	}

	return scopes
}

// WriteIndex pushes the provided ImageIndex to the specified image reference.
// WriteIndex will attempt to push all of the referenced manifests before
// attempting to push the ImageIndex, to retain referential integrity.
func WriteIndex(ref name.Reference, ii v1.ImageIndex, options ...Option) (rerr error) {
	o, err := makeOptions(ref.Context(), options...)
	if err != nil {
		return err
	}

	scopes := []string{ref.Scope(transport.PushScope)}
	tr, err := transport.NewWithContext(o.context, ref.Context().Registry, o.auth, o.transport, scopes)
	if err != nil {
		return err
	}
	w := writer{
		repo:      ref.Context(),
		client:    &http.Client{Transport: tr},
		backoff:   o.retryBackoff,
		predicate: o.retryPredicate,
	}

	if o.updates != nil {
		w.progress = &progress{updates: o.updates}
		w.progress.lastUpdate = &v1.Update{}

		defer close(o.updates)
		defer func() { w.progress.err(rerr) }()

		w.progress.lastUpdate.Total, err = countIndex(ii, o.allowNondistributableArtifacts)
		if err != nil {
			return err
		}
	}

	return w.writeIndex(o.context, ref, ii, options...)
}

// countImage counts the total size of all layers + config blob + manifest for
// an image. It de-dupes duplicate layers.
func countImage(img v1.Image, allowNondistributableArtifacts bool) (int64, error) {
	var total int64
	ls, err := img.Layers()
	if err != nil {
		return 0, err
	}
	seen := map[v1.Hash]bool{}
	for _, l := range ls {
		// Handle foreign layers.
		mt, err := l.MediaType()
		if err != nil {
			return 0, err
		}
		if !mt.IsDistributable() && !allowNondistributableArtifacts {
			continue
		}

		// TODO: support streaming layers which update the total count as they write.
		if _, ok := l.(*stream.Layer); ok {
			return 0, errors.New("cannot use stream.Layer and WithProgress")
		}

		// Dedupe layers.
		d, err := l.Digest()
		if err != nil {
			return 0, err
		}
		if seen[d] {
			continue
		}
		seen[d] = true

		size, err := l.Size()
		if err != nil {
			return 0, err
		}
		total += size
	}
	b, err := img.RawConfigFile()
	if err != nil {
		return 0, err
	}
	total += int64(len(b))
	size, err := img.Size()
	if err != nil {
		return 0, err
	}
	total += size
	return total, nil
}

// countIndex counts the total size of all images + sub-indexes for an index.
// It does not attempt to de-dupe duplicate images, etc.
func countIndex(idx v1.ImageIndex, allowNondistributableArtifacts bool) (int64, error) {
	var total int64
	mf, err := idx.IndexManifest()
	if err != nil {
		return 0, err
	}

	for _, desc := range mf.Manifests {
		switch desc.MediaType {
		case types.OCIImageIndex, types.DockerManifestList:
			sidx, err := idx.ImageIndex(desc.Digest)
			if err != nil {
				return 0, err
			}
			size, err := countIndex(sidx, allowNondistributableArtifacts)
			if err != nil {
				return 0, err
			}
			total += size
		case types.OCIManifestSchema1, types.DockerManifestSchema2:
			simg, err := idx.Image(desc.Digest)
			if err != nil {
				return 0, err
			}
			size, err := countImage(simg, allowNondistributableArtifacts)
			if err != nil {
				return 0, err
			}
			total += size
		default:
			// Workaround for #819.
			if wl, ok := idx.(withLayer); ok {
				layer, err := wl.Layer(desc.Digest)
				if err != nil {
					return 0, err
				}
				size, err := layer.Size()
				if err != nil {
					return 0, err
				}
				total += size
			}
		}
	}

	size, err := idx.Size()
	if err != nil {
		return 0, err
	}
	total += size
	return total, nil
}

// WriteLayer uploads the provided Layer to the specified repo.
func WriteLayer(repo name.Repository, layer v1.Layer, options ...Option) (rerr error) {
	o, err := makeOptions(repo, options...)
	if err != nil {
		return err
	}
	scopes := scopesForUploadingImage(repo, []v1.Layer{layer})
	tr, err := transport.NewWithContext(o.context, repo.Registry, o.auth, o.transport, scopes)
	if err != nil {
		return err
	}
	w := writer{
		repo:      repo,
		client:    &http.Client{Transport: tr},
		backoff:   o.retryBackoff,
		predicate: o.retryPredicate,
	}

	if o.updates != nil {
		w.progress = &progress{updates: o.updates}
		w.progress.lastUpdate = &v1.Update{}

		defer close(o.updates)
		defer func() { w.progress.err(rerr) }()

		// TODO: support streaming layers which update the total count as they write.
		if _, ok := layer.(*stream.Layer); ok {
			return errors.New("cannot use stream.Layer and WithProgress")
		}
		size, err := layer.Size()
		if err != nil {
			return err
		}
		w.progress.total(size)
	}
	return w.uploadOne(o.context, layer)
}

// Tag adds a tag to the given Taggable via PUT /v2/.../manifests/<tag>
//
// Notable implementations of Taggable are v1.Image, v1.ImageIndex, and
// remote.Descriptor.
//
// If t implements MediaType, we will use that for the Content-Type, otherwise
// we will default to types.DockerManifestSchema2.
//
// Tag does not attempt to write anything other than the manifest, so callers
// should ensure that all blobs or manifests that are referenced by t exist
// in the target registry.
func Tag(tag name.Tag, t Taggable, options ...Option) error {
	return Put(tag, t, options...)
}

// Put adds a manifest from the given Taggable via PUT /v1/.../manifest/<ref>
//
// Notable implementations of Taggable are v1.Image, v1.ImageIndex, and
// remote.Descriptor.
//
// If t implements MediaType, we will use that for the Content-Type, otherwise
// we will default to types.DockerManifestSchema2.
//
// Put does not attempt to write anything other than the manifest, so callers
// should ensure that all blobs or manifests that are referenced by t exist
// in the target registry.
func Put(ref name.Reference, t Taggable, options ...Option) error {
	o, err := makeOptions(ref.Context(), options...)
	if err != nil {
		return err
	}
	scopes := []string{ref.Scope(transport.PushScope)}

	// TODO: This *always* does a token exchange. For some registries,
	// that's pretty slow. Some ideas;
	// * Tag could take a list of tags.
	// * Allow callers to pass in a transport.Transport, typecheck
	//   it to allow them to reuse the transport across multiple calls.
	// * WithTag option to do multiple manifest PUTs in commitManifest.
	tr, err := transport.NewWithContext(o.context, ref.Context().Registry, o.auth, o.transport, scopes)
	if err != nil {
		return err
	}
	w := writer{
		repo:      ref.Context(),
		client:    &http.Client{Transport: tr},
		backoff:   o.retryBackoff,
		predicate: o.retryPredicate,
	}

	return w.commitManifest(o.context, t, ref)
}
   070701000006FF000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/stream   07070100000700000081A4000000000000000000000001645E367C00000941000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/stream/README.md # `stream`

[![GoDoc](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/stream?status.svg)](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/stream)

The `stream` package contains an implementation of
[`v1.Layer`](https://godoc.org/github.com/google/go-containerregistry/pkg/v1#Layer)
that supports _streaming_ access, i.e. the layer contents are read once and not
buffered.

## Usage

```go
package main

import (
	"os"

	"github.com/google/go-containerregistry/pkg/name"
	"github.com/google/go-containerregistry/pkg/v1/remote"
	"github.com/google/go-containerregistry/pkg/v1/stream"
)

// upload the contents of stdin as a layer to a local registry
func main() {
	repo, err := name.NewRepository("localhost:5000/stream")
	if err != nil {
		panic(err)
	}

	layer := stream.NewLayer(os.Stdin)

	if err := remote.WriteLayer(repo, layer); err != nil {
		panic(err)
	}
}
```

## Structure

This implements the layer portion of an [image
upload](/pkg/v1/remote#anatomy-of-an-image-upload). We launch a goroutine that
is responsible for hashing the uncompressed contents to compute the `DiffID`,
gzipping them to produce the `Compressed` contents, and hashing/counting the
bytes to produce the `Digest`/`Size`. This goroutine writes to an
`io.PipeWriter`, which blocks until `Compressed` reads the gzipped contents from
the corresponding `io.PipeReader`.

<p align="center">
  <img src="/images/stream.dot.svg" />
</p>

## Caveats

This assumes that you have an uncompressed layer (i.e. a tarball) and would like
to compress it. Calling `Uncompressed` is always an error. Likewise, other
methods are invalid until the contents of `Compressed` have been completely
consumed and `Close`d.

Using a `stream.Layer` will likely not work without careful consideration. For
example, in the `mutate` package, we defer computing the manifest and config
file until they are actually called. This allows you to `mutate.Append` a
streaming layer to an image without accidentally consuming it. Similarly, in
`remote.Write`, if calling `Digest` on a layer fails, we attempt to upload the
layer anyway, understanding that we may be dealing with a `stream.Layer` whose
contents need to be uploaded before we can upload the config file.

Given the [structure](#structure) of how this is implemented, forgetting to
`Close` a `stream.Layer` will leak a goroutine.
   07070100000701000081A4000000000000000000000001645E367C00001CE1000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/stream/layer.go  // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package stream implements a single-pass streaming v1.Layer.
package stream

import (
	"bufio"
	"compress/gzip"
	"crypto"
	"encoding/hex"
	"errors"
	"hash"
	"io"
	"os"
	"sync"

	v1 "github.com/google/go-containerregistry/pkg/v1"
	"github.com/google/go-containerregistry/pkg/v1/types"
)

var (
	// ErrNotComputed is returned when the requested value is not yet
	// computed because the stream has not been consumed yet.
	ErrNotComputed = errors.New("value not computed until stream is consumed")

	// ErrConsumed is returned by Compressed when the underlying stream has
	// already been consumed and closed.
	ErrConsumed = errors.New("stream was already consumed")
)

// Layer is a streaming implementation of v1.Layer.
type Layer struct {
	blob        io.ReadCloser
	consumed    bool
	compression int

	mu             sync.Mutex
	digest, diffID *v1.Hash
	size           int64
	mediaType      types.MediaType
}

var _ v1.Layer = (*Layer)(nil)

// LayerOption applies options to layer
type LayerOption func(*Layer)

// WithCompressionLevel sets the gzip compression. See `gzip.NewWriterLevel` for possible values.
func WithCompressionLevel(level int) LayerOption {
	return func(l *Layer) {
		l.compression = level
	}
}

// WithMediaType is a functional option for overriding the layer's media type.
func WithMediaType(mt types.MediaType) LayerOption {
	return func(l *Layer) {
		l.mediaType = mt
	}
}

// NewLayer creates a Layer from an io.ReadCloser.
func NewLayer(rc io.ReadCloser, opts ...LayerOption) *Layer {
	layer := &Layer{
		blob:        rc,
		compression: gzip.BestSpeed,
		// We use DockerLayer for now as uncompressed layers
		// are unimplemented
		mediaType: types.DockerLayer,
	}

	for _, opt := range opts {
		opt(layer)
	}

	return layer
}

// Digest implements v1.Layer.
func (l *Layer) Digest() (v1.Hash, error) {
	l.mu.Lock()
	defer l.mu.Unlock()
	if l.digest == nil {
		return v1.Hash{}, ErrNotComputed
	}
	return *l.digest, nil
}

// DiffID implements v1.Layer.
func (l *Layer) DiffID() (v1.Hash, error) {
	l.mu.Lock()
	defer l.mu.Unlock()
	if l.diffID == nil {
		return v1.Hash{}, ErrNotComputed
	}
	return *l.diffID, nil
}

// Size implements v1.Layer.
func (l *Layer) Size() (int64, error) {
	l.mu.Lock()
	defer l.mu.Unlock()
	if l.size == 0 {
		return 0, ErrNotComputed
	}
	return l.size, nil
}

// MediaType implements v1.Layer
func (l *Layer) MediaType() (types.MediaType, error) {
	return l.mediaType, nil
}

// Uncompressed implements v1.Layer.
func (l *Layer) Uncompressed() (io.ReadCloser, error) {
	return nil, errors.New("NYI: stream.Layer.Uncompressed is not implemented")
}

// Compressed implements v1.Layer.
func (l *Layer) Compressed() (io.ReadCloser, error) {
	if l.consumed {
		return nil, ErrConsumed
	}
	return newCompressedReader(l)
}

// finalize sets the layer to consumed and computes all hash and size values.
func (l *Layer) finalize(uncompressed, compressed hash.Hash, size int64) error {
	l.mu.Lock()
	defer l.mu.Unlock()

	diffID, err := v1.NewHash("sha256:" + hex.EncodeToString(uncompressed.Sum(nil)))
	if err != nil {
		return err
	}
	l.diffID = &diffID

	digest, err := v1.NewHash("sha256:" + hex.EncodeToString(compressed.Sum(nil)))
	if err != nil {
		return err
	}
	l.digest = &digest

	l.size = size
	l.consumed = true
	return nil
}

type compressedReader struct {
	pr     io.Reader
	closer func() error
}

func newCompressedReader(l *Layer) (*compressedReader, error) {
	// Collect digests of compressed and uncompressed stream and size of
	// compressed stream.
	h := crypto.SHA256.New()
	zh := crypto.SHA256.New()
	count := &countWriter{}

	// gzip.Writer writes to the output stream via pipe, a hasher to
	// capture compressed digest, and a countWriter to capture compressed
	// size.
	pr, pw := io.Pipe()

	// Write compressed bytes to be read by the pipe.Reader, hashed by zh, and counted by count.
	mw := io.MultiWriter(pw, zh, count)

	// Buffer the output of the gzip writer so we don't have to wait on pr to keep writing.
	// 64K ought to be small enough for anybody.
	bw := bufio.NewWriterSize(mw, 2<<16)
	zw, err := gzip.NewWriterLevel(bw, l.compression)
	if err != nil {
		return nil, err
	}

	doneDigesting := make(chan struct{})

	cr := &compressedReader{
		pr: pr,
		closer: func() error {
			// Immediately close pw without error. There are three ways to get
			// here.
			//
			// 1. There was a copy error due from the underlying reader, in which
			//    case the error will not be overwritten.
			// 2. Copying from the underlying reader completed successfully.
			// 3. Close has been called before the underlying reader has been
			//    fully consumed. In this case pw must be closed in order to
			//    keep the flush of bw from blocking indefinitely.
			//
			// NOTE: pw.Close never returns an error. The signature is only to
			// implement io.Closer.
			_ = pw.Close()

			// Close the inner ReadCloser.
			//
			// NOTE: net/http will call close on success, so if we've already
			// closed the inner rc, it's not an error.
			if err := l.blob.Close(); err != nil && !errors.Is(err, os.ErrClosed) {
				return err
			}

			// Finalize layer with its digest and size values.
			<-doneDigesting
			return l.finalize(h, zh, count.n)
		},
	}
	go func() {
		// Copy blob into the gzip writer, which also hashes and counts the
		// size of the compressed output, and hasher of the raw contents.
		_, copyErr := io.Copy(io.MultiWriter(h, zw), l.blob)

		// Close the gzip writer once copying is done. If this is done in the
		// Close method of compressedReader instead, then it can cause a panic
		// when the compressedReader is closed before the blob is fully
		// consumed and io.Copy in this goroutine is still blocking.
		closeErr := zw.Close()

		// Check errors from writing and closing streams.
		if copyErr != nil {
			close(doneDigesting)
			pw.CloseWithError(copyErr)
			return
		}
		if closeErr != nil {
			close(doneDigesting)
			pw.CloseWithError(closeErr)
			return
		}

		// Flush the buffer once all writes are complete to the gzip writer.
		if err := bw.Flush(); err != nil {
			close(doneDigesting)
			pw.CloseWithError(err)
			return
		}

		// Notify closer that digests are done being written.
		close(doneDigesting)

		// Close the compressed reader to calculate digest/diffID/size. This
		// will cause pr to return EOF which will cause readers of the
		// Compressed stream to finish reading.
		pw.CloseWithError(cr.Close())
	}()

	return cr, nil
}

func (cr *compressedReader) Read(b []byte) (int, error) { return cr.pr.Read(b) }

func (cr *compressedReader) Close() error { return cr.closer() }

// countWriter counts bytes written to it.
type countWriter struct{ n int64 }

func (c *countWriter) Write(p []byte) (int, error) {
	c.n += int64(len(p))
	return len(p), nil
}
   07070100000702000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/tarball  07070100000703000081A4000000000000000000000001645E367C000026EF000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/tarball/README.md    # `tarball`

[![GoDoc](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/tarball?status.svg)](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/tarball)

This package produces tarballs that can consumed via `docker load`. Note
that this is a _different_ format from the [`legacy`](/pkg/legacy/tarball)
tarballs that are produced by `docker save`, but this package is still able to
read the legacy tarballs produced by `docker save`.

## Usage

```go
package main

import (
	"os"

	"github.com/google/go-containerregistry/pkg/name"
	"github.com/google/go-containerregistry/pkg/v1/tarball"
)

func main() {
	// Read a tarball from os.Args[1] that contains ubuntu.
	tag, err := name.NewTag("ubuntu")
	if err != nil {
		panic(err)
	}
	img, err := tarball.ImageFromPath(os.Args[1], &tag)
	if err != nil {
		panic(err)
	}

	// Write that tarball to os.Args[2] with a different tag.
	newTag, err := name.NewTag("ubuntu:newest")
	if err != nil {
		panic(err)
	}
	f, err := os.Create(os.Args[2])
	if err != nil {
		panic(err)
	}
	defer f.Close()

	if err := tarball.Write(newTag, img, f); err != nil {
		panic(err)
	}
}
```

## Structure

<p align="center">
  <img src="/images/tarball.dot.svg" />
</p>

Let's look at what happens when we write out a tarball:


### `ubuntu:latest`

```
$ crane pull ubuntu ubuntu.tar && mkdir ubuntu && tar xf ubuntu.tar -C ubuntu && rm ubuntu.tar
$ tree ubuntu/
ubuntu/
├── 423ae2b273f4c17ceee9e8482fa8d071d90c7d052ae208e1fe4963fceb3d6954.tar.gz
├── b6b53be908de2c0c78070fff0a9f04835211b3156c4e73785747af365e71a0d7.tar.gz
├── de83a2304fa1f7c4a13708a0d15b9704f5945c2be5cbb2b3ed9b2ccb718d0b3d.tar.gz
├── f9a83bce3af0648efaa60b9bb28225b09136d2d35d0bed25ac764297076dec1b.tar.gz
├── manifest.json
└── sha256:72300a873c2ca11c70d0c8642177ce76ff69ae04d61a5813ef58d40ff66e3e7c

0 directories, 6 files
```

There are a couple interesting files here.

`manifest.json` is the entrypoint: a list of [`tarball.Descriptor`s](https://godoc.org/github.com/google/go-containerregistry/pkg/v1/tarball#Descriptor)
that describe the images contained in this tarball.

For each image, this has the `RepoTags` (how it was pulled), a `Config` file
that points to the image's config file, a list of `Layers`, and (optionally)
`LayerSources`.

```
$ jq < ubuntu/manifest.json
[
  {
    "Config": "sha256:72300a873c2ca11c70d0c8642177ce76ff69ae04d61a5813ef58d40ff66e3e7c",
    "RepoTags": [
      "ubuntu"
    ],
    "Layers": [
      "423ae2b273f4c17ceee9e8482fa8d071d90c7d052ae208e1fe4963fceb3d6954.tar.gz",
      "de83a2304fa1f7c4a13708a0d15b9704f5945c2be5cbb2b3ed9b2ccb718d0b3d.tar.gz",
      "f9a83bce3af0648efaa60b9bb28225b09136d2d35d0bed25ac764297076dec1b.tar.gz",
      "b6b53be908de2c0c78070fff0a9f04835211b3156c4e73785747af365e71a0d7.tar.gz"
    ]
  }
]
```

The config file and layers are exactly what you would expect, and match the
registry representations of the same artifacts. You'll notice that the
`manifest.json` contains similar information as the registry manifest, but isn't
quite the same:

```
$ crane manifest ubuntu@sha256:0925d086715714114c1988f7c947db94064fd385e171a63c07730f1fa014e6f9
{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
   "config": {
      "mediaType": "application/vnd.docker.container.image.v1+json",
      "size": 3408,
      "digest": "sha256:72300a873c2ca11c70d0c8642177ce76ff69ae04d61a5813ef58d40ff66e3e7c"
   },
   "layers": [
      {
         "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
         "size": 26692096,
         "digest": "sha256:423ae2b273f4c17ceee9e8482fa8d071d90c7d052ae208e1fe4963fceb3d6954"
      },
      {
         "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
         "size": 35365,
         "digest": "sha256:de83a2304fa1f7c4a13708a0d15b9704f5945c2be5cbb2b3ed9b2ccb718d0b3d"
      },
      {
         "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
         "size": 852,
         "digest": "sha256:f9a83bce3af0648efaa60b9bb28225b09136d2d35d0bed25ac764297076dec1b"
      },
      {
         "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
         "size": 163,
         "digest": "sha256:b6b53be908de2c0c78070fff0a9f04835211b3156c4e73785747af365e71a0d7"
      }
   ]
}
```

This makes it difficult to maintain image digests when roundtripping images
through the tarball format, so it's not a great format if you care about
provenance.

The ubuntu example didn't have any `LayerSources` -- let's look at another image
that does.

### `hello-world:nanoserver`

```
$ crane pull hello-world:nanoserver@sha256:63c287625c2b0b72900e562de73c0e381472a83b1b39217aef3856cd398eca0b nanoserver.tar
$ mkdir nanoserver && tar xf nanoserver.tar -C nanoserver && rm nanoserver.tar
$ tree nanoserver/
nanoserver/
├── 10d1439be4eb8819987ec2e9c140d44d74d6b42a823d57fe1953bd99948e1bc0.tar.gz
├── a35da61c356213336e646756218539950461ff2bf096badf307a23add6e70053.tar.gz
├── be21f08f670160cbae227e3053205b91d6bfa3de750b90c7e00bd2c511ccb63a.tar.gz
├── manifest.json
└── sha256:bc5d255ea81f83c8c38a982a6d29a6f2198427d258aea5f166e49856896b2da6

0 directories, 5 files

$ jq < nanoserver/manifest.json
[
  {
    "Config": "sha256:bc5d255ea81f83c8c38a982a6d29a6f2198427d258aea5f166e49856896b2da6",
    "RepoTags": [
      "index.docker.io/library/hello-world:i-was-a-digest"
    ],
    "Layers": [
      "a35da61c356213336e646756218539950461ff2bf096badf307a23add6e70053.tar.gz",
      "be21f08f670160cbae227e3053205b91d6bfa3de750b90c7e00bd2c511ccb63a.tar.gz",
      "10d1439be4eb8819987ec2e9c140d44d74d6b42a823d57fe1953bd99948e1bc0.tar.gz"
    ],
    "LayerSources": {
      "sha256:26fd2d9d4c64a4f965bbc77939a454a31b607470f430b5d69fc21ded301fa55e": {
        "mediaType": "application/vnd.docker.image.rootfs.foreign.diff.tar.gzip",
        "size": 101145811,
        "digest": "sha256:a35da61c356213336e646756218539950461ff2bf096badf307a23add6e70053",
        "urls": [
          "https://mcr.microsoft.com/v2/windows/nanoserver/blobs/sha256:a35da61c356213336e646756218539950461ff2bf096badf307a23add6e70053"
        ]
      }
    }
  }
]
```

A couple things to note about this `manifest.json` versus the other:
* The `RepoTags` field is a bit weird here. `hello-world` is a multi-platform
  image, so We had to pull this image by digest, since we're (I'm) on
  amd64/linux and wanted to grab a windows image. Since the tarball format
  expects a tag under `RepoTags`, and we didn't pull by tag, we replace the
  digest with a sentinel `i-was-a-digest` "tag" to appease docker.
* The `LayerSources` has enough information to reconstruct the foreign layers
  pointer when pushing/pulling from the registry. For legal reasons, microsoft
  doesn't want anyone but them to serve windows base images, so the mediaType
  here indicates a "foreign" or "non-distributable" layer with an URL for where
  you can download it from microsoft (see the [OCI
  image-spec](https://github.com/opencontainers/image-spec/blob/master/layer.md#non-distributable-layers)).

We can look at what's in the registry to explain both of these things:
```
$ crane manifest hello-world:nanoserver | jq .
{
  "manifests": [
    {
      "digest": "sha256:63c287625c2b0b72900e562de73c0e381472a83b1b39217aef3856cd398eca0b",
      "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
      "platform": {
        "architecture": "amd64",
        "os": "windows",
        "os.version": "10.0.17763.1040"
      },
      "size": 1124
    }
  ],
  "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
  "schemaVersion": 2
}


# Note the media type and "urls" field.
$ crane manifest hello-world:nanoserver@sha256:63c287625c2b0b72900e562de73c0e381472a83b1b39217aef3856cd398eca0b | jq .
{
  "schemaVersion": 2,
  "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
  "config": {
    "mediaType": "application/vnd.docker.container.image.v1+json",
    "size": 1721,
    "digest": "sha256:bc5d255ea81f83c8c38a982a6d29a6f2198427d258aea5f166e49856896b2da6"
  },
  "layers": [
    {
      "mediaType": "application/vnd.docker.image.rootfs.foreign.diff.tar.gzip",
      "size": 101145811,
      "digest": "sha256:a35da61c356213336e646756218539950461ff2bf096badf307a23add6e70053",
      "urls": [
        "https://mcr.microsoft.com/v2/windows/nanoserver/blobs/sha256:a35da61c356213336e646756218539950461ff2bf096badf307a23add6e70053"
      ]
    },
    {
      "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
      "size": 1669,
      "digest": "sha256:be21f08f670160cbae227e3053205b91d6bfa3de750b90c7e00bd2c511ccb63a"
    },
    {
      "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
      "size": 949,
      "digest": "sha256:10d1439be4eb8819987ec2e9c140d44d74d6b42a823d57fe1953bd99948e1bc0"
    }
  ]
}
```

The `LayerSources` map is keyed by the diffid. Note that `sha256:26fd2d9d4c64a4f965bbc77939a454a31b607470f430b5d69fc21ded301fa55e` matches the first layer in the config file:
```
$ jq '.[0].LayerSources' < nanoserver/manifest.json
{
  "sha256:26fd2d9d4c64a4f965bbc77939a454a31b607470f430b5d69fc21ded301fa55e": {
    "mediaType": "application/vnd.docker.image.rootfs.foreign.diff.tar.gzip",
    "size": 101145811,
    "digest": "sha256:a35da61c356213336e646756218539950461ff2bf096badf307a23add6e70053",
    "urls": [
      "https://mcr.microsoft.com/v2/windows/nanoserver/blobs/sha256:a35da61c356213336e646756218539950461ff2bf096badf307a23add6e70053"
    ]
  }
}

$ jq < nanoserver/sha256\:bc5d255ea81f83c8c38a982a6d29a6f2198427d258aea5f166e49856896b2da6 | jq .rootfs
{
  "type": "layers",
  "diff_ids": [
    "sha256:26fd2d9d4c64a4f965bbc77939a454a31b607470f430b5d69fc21ded301fa55e",
    "sha256:601cf7d78c62e4b4d32a7bbf96a17606a9cea5bd9d22ffa6f34aa431d056b0e8",
    "sha256:a1e1a3bf6529adcce4d91dce2cad86c2604a66b507ccbc4d2239f3da0ec5aab9"
  ]
}
```
 07070100000704000081A4000000000000000000000001645E367C000002D3000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/tarball/doc.go   // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package tarball provides facilities for reading/writing v1.Images from/to
// a tarball on-disk.
package tarball
 07070100000705000081A4000000000000000000000001645E367C0000298B000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/tarball/image.go // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package tarball

import (
	"archive/tar"
	"bytes"
	"encoding/json"
	"errors"
	"fmt"
	"io"
	"os"
	"path"
	"path/filepath"
	"sync"

	comp "github.com/google/go-containerregistry/internal/compression"
	"github.com/google/go-containerregistry/pkg/compression"
	"github.com/google/go-containerregistry/pkg/name"
	v1 "github.com/google/go-containerregistry/pkg/v1"
	"github.com/google/go-containerregistry/pkg/v1/partial"
	"github.com/google/go-containerregistry/pkg/v1/types"
)

type image struct {
	opener        Opener
	manifest      *Manifest
	config        []byte
	imgDescriptor *Descriptor

	tag *name.Tag
}

type uncompressedImage struct {
	*image
}

type compressedImage struct {
	*image
	manifestLock sync.Mutex // Protects manifest
	manifest     *v1.Manifest
}

var _ partial.UncompressedImageCore = (*uncompressedImage)(nil)
var _ partial.CompressedImageCore = (*compressedImage)(nil)

// Opener is a thunk for opening a tar file.
type Opener func() (io.ReadCloser, error)

func pathOpener(path string) Opener {
	return func() (io.ReadCloser, error) {
		return os.Open(path)
	}
}

// ImageFromPath returns a v1.Image from a tarball located on path.
func ImageFromPath(path string, tag *name.Tag) (v1.Image, error) {
	return Image(pathOpener(path), tag)
}

// LoadManifest load manifest
func LoadManifest(opener Opener) (Manifest, error) {
	m, err := extractFileFromTar(opener, "manifest.json")
	if err != nil {
		return nil, err
	}
	defer m.Close()

	var manifest Manifest

	if err := json.NewDecoder(m).Decode(&manifest); err != nil {
		return nil, err
	}
	return manifest, nil
}

// Image exposes an image from the tarball at the provided path.
func Image(opener Opener, tag *name.Tag) (v1.Image, error) {
	img := &image{
		opener: opener,
		tag:    tag,
	}
	if err := img.loadTarDescriptorAndConfig(); err != nil {
		return nil, err
	}

	// Peek at the first layer and see if it's compressed.
	if len(img.imgDescriptor.Layers) > 0 {
		compressed, err := img.areLayersCompressed()
		if err != nil {
			return nil, err
		}
		if compressed {
			c := compressedImage{
				image: img,
			}
			return partial.CompressedToImage(&c)
		}
	}

	uc := uncompressedImage{
		image: img,
	}
	return partial.UncompressedToImage(&uc)
}

func (i *image) MediaType() (types.MediaType, error) {
	return types.DockerManifestSchema2, nil
}

// Descriptor stores the manifest data for a single image inside a `docker save` tarball.
type Descriptor struct {
	Config   string
	RepoTags []string
	Layers   []string

	// Tracks foreign layer info. Key is DiffID.
	LayerSources map[v1.Hash]v1.Descriptor `json:",omitempty"`
}

// Manifest represents the manifests of all images as the `manifest.json` file in a `docker save` tarball.
type Manifest []Descriptor

func (m Manifest) findDescriptor(tag *name.Tag) (*Descriptor, error) {
	if tag == nil {
		if len(m) != 1 {
			return nil, errors.New("tarball must contain only a single image to be used with tarball.Image")
		}
		return &(m)[0], nil
	}
	for _, img := range m {
		for _, tagStr := range img.RepoTags {
			repoTag, err := name.NewTag(tagStr)
			if err != nil {
				return nil, err
			}

			// Compare the resolved names, since there are several ways to specify the same tag.
			if repoTag.Name() == tag.Name() {
				return &img, nil
			}
		}
	}
	return nil, fmt.Errorf("tag %s not found in tarball", tag)
}

func (i *image) areLayersCompressed() (bool, error) {
	if len(i.imgDescriptor.Layers) == 0 {
		return false, errors.New("0 layers found in image")
	}
	layer := i.imgDescriptor.Layers[0]
	blob, err := extractFileFromTar(i.opener, layer)
	if err != nil {
		return false, err
	}
	defer blob.Close()

	cp, _, err := comp.PeekCompression(blob)
	if err != nil {
		return false, err
	}

	return cp != compression.None, nil
}

func (i *image) loadTarDescriptorAndConfig() error {
	m, err := extractFileFromTar(i.opener, "manifest.json")
	if err != nil {
		return err
	}
	defer m.Close()

	if err := json.NewDecoder(m).Decode(&i.manifest); err != nil {
		return err
	}

	if i.manifest == nil {
		return errors.New("no valid manifest.json in tarball")
	}

	i.imgDescriptor, err = i.manifest.findDescriptor(i.tag)
	if err != nil {
		return err
	}

	cfg, err := extractFileFromTar(i.opener, i.imgDescriptor.Config)
	if err != nil {
		return err
	}
	defer cfg.Close()

	i.config, err = io.ReadAll(cfg)
	if err != nil {
		return err
	}
	return nil
}

func (i *image) RawConfigFile() ([]byte, error) {
	return i.config, nil
}

// tarFile represents a single file inside a tar. Closing it closes the tar itself.
type tarFile struct {
	io.Reader
	io.Closer
}

func extractFileFromTar(opener Opener, filePath string) (io.ReadCloser, error) {
	f, err := opener()
	if err != nil {
		return nil, err
	}
	close := true
	defer func() {
		if close {
			f.Close()
		}
	}()

	tf := tar.NewReader(f)
	for {
		hdr, err := tf.Next()
		if errors.Is(err, io.EOF) {
			break
		}
		if err != nil {
			return nil, err
		}
		if hdr.Name == filePath {
			if hdr.Typeflag == tar.TypeSymlink || hdr.Typeflag == tar.TypeLink {
				currentDir := filepath.Dir(filePath)
				return extractFileFromTar(opener, path.Join(currentDir, path.Clean(hdr.Linkname)))
			}
			close = false
			return tarFile{
				Reader: tf,
				Closer: f,
			}, nil
		}
	}
	return nil, fmt.Errorf("file %s not found in tar", filePath)
}

// uncompressedLayerFromTarball implements partial.UncompressedLayer
type uncompressedLayerFromTarball struct {
	diffID    v1.Hash
	mediaType types.MediaType
	opener    Opener
	filePath  string
}

// foreignUncompressedLayer implements partial.UncompressedLayer but returns
// a custom descriptor. This allows the foreign layer URLs to be included in
// the generated image manifest for uncompressed layers.
type foreignUncompressedLayer struct {
	uncompressedLayerFromTarball
	desc v1.Descriptor
}

func (fl *foreignUncompressedLayer) Descriptor() (*v1.Descriptor, error) {
	return &fl.desc, nil
}

// DiffID implements partial.UncompressedLayer
func (ulft *uncompressedLayerFromTarball) DiffID() (v1.Hash, error) {
	return ulft.diffID, nil
}

// Uncompressed implements partial.UncompressedLayer
func (ulft *uncompressedLayerFromTarball) Uncompressed() (io.ReadCloser, error) {
	return extractFileFromTar(ulft.opener, ulft.filePath)
}

func (ulft *uncompressedLayerFromTarball) MediaType() (types.MediaType, error) {
	return ulft.mediaType, nil
}

func (i *uncompressedImage) LayerByDiffID(h v1.Hash) (partial.UncompressedLayer, error) {
	cfg, err := partial.ConfigFile(i)
	if err != nil {
		return nil, err
	}
	for idx, diffID := range cfg.RootFS.DiffIDs {
		if diffID == h {
			// Technically the media type should be 'application/tar' but given that our
			// v1.Layer doesn't force consumers to care about whether the layer is compressed
			// we should be fine returning the DockerLayer media type
			mt := types.DockerLayer
			if bd, ok := i.imgDescriptor.LayerSources[h]; ok {
				// Overwrite the mediaType for foreign layers.
				return &foreignUncompressedLayer{
					uncompressedLayerFromTarball: uncompressedLayerFromTarball{
						diffID:    diffID,
						mediaType: bd.MediaType,
						opener:    i.opener,
						filePath:  i.imgDescriptor.Layers[idx],
					},
					desc: bd,
				}, nil
			}
			return &uncompressedLayerFromTarball{
				diffID:    diffID,
				mediaType: mt,
				opener:    i.opener,
				filePath:  i.imgDescriptor.Layers[idx],
			}, nil
		}
	}
	return nil, fmt.Errorf("diff id %q not found", h)
}

func (c *compressedImage) Manifest() (*v1.Manifest, error) {
	c.manifestLock.Lock()
	defer c.manifestLock.Unlock()
	if c.manifest != nil {
		return c.manifest, nil
	}

	b, err := c.RawConfigFile()
	if err != nil {
		return nil, err
	}

	cfgHash, cfgSize, err := v1.SHA256(bytes.NewReader(b))
	if err != nil {
		return nil, err
	}

	c.manifest = &v1.Manifest{
		SchemaVersion: 2,
		MediaType:     types.DockerManifestSchema2,
		Config: v1.Descriptor{
			MediaType: types.DockerConfigJSON,
			Size:      cfgSize,
			Digest:    cfgHash,
		},
	}

	for i, p := range c.imgDescriptor.Layers {
		cfg, err := partial.ConfigFile(c)
		if err != nil {
			return nil, err
		}
		diffid := cfg.RootFS.DiffIDs[i]
		if d, ok := c.imgDescriptor.LayerSources[diffid]; ok {
			// If it's a foreign layer, just append the descriptor so we can avoid
			// reading the entire file.
			c.manifest.Layers = append(c.manifest.Layers, d)
		} else {
			l, err := extractFileFromTar(c.opener, p)
			if err != nil {
				return nil, err
			}
			defer l.Close()
			sha, size, err := v1.SHA256(l)
			if err != nil {
				return nil, err
			}
			c.manifest.Layers = append(c.manifest.Layers, v1.Descriptor{
				MediaType: types.DockerLayer,
				Size:      size,
				Digest:    sha,
			})
		}
	}
	return c.manifest, nil
}

func (c *compressedImage) RawManifest() ([]byte, error) {
	return partial.RawManifest(c)
}

// compressedLayerFromTarball implements partial.CompressedLayer
type compressedLayerFromTarball struct {
	desc     v1.Descriptor
	opener   Opener
	filePath string
}

// Digest implements partial.CompressedLayer
func (clft *compressedLayerFromTarball) Digest() (v1.Hash, error) {
	return clft.desc.Digest, nil
}

// Compressed implements partial.CompressedLayer
func (clft *compressedLayerFromTarball) Compressed() (io.ReadCloser, error) {
	return extractFileFromTar(clft.opener, clft.filePath)
}

// MediaType implements partial.CompressedLayer
func (clft *compressedLayerFromTarball) MediaType() (types.MediaType, error) {
	return clft.desc.MediaType, nil
}

// Size implements partial.CompressedLayer
func (clft *compressedLayerFromTarball) Size() (int64, error) {
	return clft.desc.Size, nil
}

func (c *compressedImage) LayerByDigest(h v1.Hash) (partial.CompressedLayer, error) {
	m, err := c.Manifest()
	if err != nil {
		return nil, err
	}
	for i, l := range m.Layers {
		if l.Digest == h {
			fp := c.imgDescriptor.Layers[i]
			return &compressedLayerFromTarball{
				desc:     l,
				opener:   c.opener,
				filePath: fp,
			}, nil
		}
	}
	return nil, fmt.Errorf("blob %v not found", h)
}
 07070100000706000081A4000000000000000000000001645E367C000025F8000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/tarball/layer.go // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package tarball

import (
	"bytes"
	"compress/gzip"
	"fmt"
	"io"
	"os"
	"sync"

	"github.com/containerd/stargz-snapshotter/estargz"
	"github.com/google/go-containerregistry/internal/and"
	comp "github.com/google/go-containerregistry/internal/compression"
	gestargz "github.com/google/go-containerregistry/internal/estargz"
	ggzip "github.com/google/go-containerregistry/internal/gzip"
	"github.com/google/go-containerregistry/internal/zstd"
	"github.com/google/go-containerregistry/pkg/compression"
	"github.com/google/go-containerregistry/pkg/logs"
	v1 "github.com/google/go-containerregistry/pkg/v1"
	"github.com/google/go-containerregistry/pkg/v1/types"
)

type layer struct {
	digest             v1.Hash
	diffID             v1.Hash
	size               int64
	compressedopener   Opener
	uncompressedopener Opener
	compression        compression.Compression
	compressionLevel   int
	annotations        map[string]string
	estgzopts          []estargz.Option
	mediaType          types.MediaType
}

// Descriptor implements partial.withDescriptor.
func (l *layer) Descriptor() (*v1.Descriptor, error) {
	digest, err := l.Digest()
	if err != nil {
		return nil, err
	}
	return &v1.Descriptor{
		Size:        l.size,
		Digest:      digest,
		Annotations: l.annotations,
		MediaType:   l.mediaType,
	}, nil
}

// Digest implements v1.Layer
func (l *layer) Digest() (v1.Hash, error) {
	return l.digest, nil
}

// DiffID implements v1.Layer
func (l *layer) DiffID() (v1.Hash, error) {
	return l.diffID, nil
}

// Compressed implements v1.Layer
func (l *layer) Compressed() (io.ReadCloser, error) {
	return l.compressedopener()
}

// Uncompressed implements v1.Layer
func (l *layer) Uncompressed() (io.ReadCloser, error) {
	return l.uncompressedopener()
}

// Size implements v1.Layer
func (l *layer) Size() (int64, error) {
	return l.size, nil
}

// MediaType implements v1.Layer
func (l *layer) MediaType() (types.MediaType, error) {
	return l.mediaType, nil
}

// LayerOption applies options to layer
type LayerOption func(*layer)

// WithCompression is a functional option for overriding the default
// compression algorithm used for compressing uncompressed tarballs.
// Please note that WithCompression(compression.ZStd) should be used
// in conjunction with WithMediaType(types.OCILayerZStd)
func WithCompression(comp compression.Compression) LayerOption {
	return func(l *layer) {
		switch comp {
		case compression.ZStd:
			l.compression = compression.ZStd
		case compression.GZip:
			l.compression = compression.GZip
		case compression.None:
			logs.Warn.Printf("Compression type 'none' is not supported for tarball layers; using gzip compression.")
			l.compression = compression.GZip
		default:
			logs.Warn.Printf("Unexpected compression type for WithCompression(): %s; using gzip compression instead.", comp)
			l.compression = compression.GZip
		}
	}
}

// WithCompressionLevel is a functional option for overriding the default
// compression level used for compressing uncompressed tarballs.
func WithCompressionLevel(level int) LayerOption {
	return func(l *layer) {
		l.compressionLevel = level
	}
}

// WithMediaType is a functional option for overriding the layer's media type.
func WithMediaType(mt types.MediaType) LayerOption {
	return func(l *layer) {
		l.mediaType = mt
	}
}

// WithCompressedCaching is a functional option that overrides the
// logic for accessing the compressed bytes to memoize the result
// and avoid expensive repeated gzips.
func WithCompressedCaching(l *layer) {
	var once sync.Once
	var err error

	buf := bytes.NewBuffer(nil)
	og := l.compressedopener

	l.compressedopener = func() (io.ReadCloser, error) {
		once.Do(func() {
			var rc io.ReadCloser
			rc, err = og()
			if err == nil {
				defer rc.Close()
				_, err = io.Copy(buf, rc)
			}
		})
		if err != nil {
			return nil, err
		}

		return io.NopCloser(bytes.NewBuffer(buf.Bytes())), nil
	}
}

// WithEstargzOptions is a functional option that allow the caller to pass
// through estargz.Options to the underlying compression layer.  This is
// only meaningful when estargz is enabled.
func WithEstargzOptions(opts ...estargz.Option) LayerOption {
	return func(l *layer) {
		l.estgzopts = opts
	}
}

// WithEstargz is a functional option that explicitly enables estargz support.
func WithEstargz(l *layer) {
	oguncompressed := l.uncompressedopener
	estargz := func() (io.ReadCloser, error) {
		crc, err := oguncompressed()
		if err != nil {
			return nil, err
		}
		eopts := append(l.estgzopts, estargz.WithCompressionLevel(l.compressionLevel))
		rc, h, err := gestargz.ReadCloser(crc, eopts...)
		if err != nil {
			return nil, err
		}
		l.annotations[estargz.TOCJSONDigestAnnotation] = h.String()
		return &and.ReadCloser{
			Reader: rc,
			CloseFunc: func() error {
				err := rc.Close()
				if err != nil {
					return err
				}
				// As an optimization, leverage the DiffID exposed by the estargz ReadCloser
				l.diffID, err = v1.NewHash(rc.DiffID().String())
				return err
			},
		}, nil
	}
	uncompressed := func() (io.ReadCloser, error) {
		urc, err := estargz()
		if err != nil {
			return nil, err
		}
		return ggzip.UnzipReadCloser(urc)
	}

	l.compressedopener = estargz
	l.uncompressedopener = uncompressed
}

// LayerFromFile returns a v1.Layer given a tarball
func LayerFromFile(path string, opts ...LayerOption) (v1.Layer, error) {
	opener := func() (io.ReadCloser, error) {
		return os.Open(path)
	}
	return LayerFromOpener(opener, opts...)
}

// LayerFromOpener returns a v1.Layer given an Opener function.
// The Opener may return either an uncompressed tarball (common),
// or a compressed tarball (uncommon).
//
// When using this in conjunction with something like remote.Write
// the uncompressed path may end up gzipping things multiple times:
//  1. Compute the layer SHA256
//  2. Upload the compressed layer.
//
// Since gzip can be expensive, we support an option to memoize the
// compression that can be passed here: tarball.WithCompressedCaching
func LayerFromOpener(opener Opener, opts ...LayerOption) (v1.Layer, error) {
	comp, err := comp.GetCompression(opener)
	if err != nil {
		return nil, err
	}

	layer := &layer{
		compression:      compression.GZip,
		compressionLevel: gzip.BestSpeed,
		annotations:      make(map[string]string, 1),
		mediaType:        types.DockerLayer,
	}

	if estgz := os.Getenv("GGCR_EXPERIMENT_ESTARGZ"); estgz == "1" {
		opts = append([]LayerOption{WithEstargz}, opts...)
	}

	switch comp {
	case compression.GZip:
		layer.compressedopener = opener
		layer.uncompressedopener = func() (io.ReadCloser, error) {
			urc, err := opener()
			if err != nil {
				return nil, err
			}
			return ggzip.UnzipReadCloser(urc)
		}
	case compression.ZStd:
		layer.compressedopener = opener
		layer.uncompressedopener = func() (io.ReadCloser, error) {
			urc, err := opener()
			if err != nil {
				return nil, err
			}
			return zstd.UnzipReadCloser(urc)
		}
	default:
		layer.uncompressedopener = opener
		layer.compressedopener = func() (io.ReadCloser, error) {
			crc, err := opener()
			if err != nil {
				return nil, err
			}

			if layer.compression == compression.ZStd {
				return zstd.ReadCloserLevel(crc, layer.compressionLevel), nil
			}

			return ggzip.ReadCloserLevel(crc, layer.compressionLevel), nil
		}
	}

	for _, opt := range opts {
		opt(layer)
	}

	// Warn if media type does not match compression
	var mediaTypeMismatch = false
	switch layer.compression {
	case compression.GZip:
		mediaTypeMismatch =
			layer.mediaType != types.OCILayer &&
				layer.mediaType != types.OCIRestrictedLayer &&
				layer.mediaType != types.DockerLayer

	case compression.ZStd:
		mediaTypeMismatch = layer.mediaType != types.OCILayerZStd
	}

	if mediaTypeMismatch {
		logs.Warn.Printf("Unexpected mediaType (%s) for selected compression in %s in LayerFromOpener().", layer.mediaType, layer.compression)
	}

	if layer.digest, layer.size, err = computeDigest(layer.compressedopener); err != nil {
		return nil, err
	}

	empty := v1.Hash{}
	if layer.diffID == empty {
		if layer.diffID, err = computeDiffID(layer.uncompressedopener); err != nil {
			return nil, err
		}
	}

	return layer, nil
}

// LayerFromReader returns a v1.Layer given a io.Reader.
//
// The reader's contents are read and buffered to a temp file in the process.
//
// Deprecated: Use LayerFromOpener or stream.NewLayer instead, if possible.
func LayerFromReader(reader io.Reader, opts ...LayerOption) (v1.Layer, error) {
	tmp, err := os.CreateTemp("", "")
	if err != nil {
		return nil, fmt.Errorf("creating temp file to buffer reader: %w", err)
	}
	if _, err := io.Copy(tmp, reader); err != nil {
		return nil, fmt.Errorf("writing temp file to buffer reader: %w", err)
	}
	return LayerFromFile(tmp.Name(), opts...)
}

func computeDigest(opener Opener) (v1.Hash, int64, error) {
	rc, err := opener()
	if err != nil {
		return v1.Hash{}, 0, err
	}
	defer rc.Close()

	return v1.SHA256(rc)
}

func computeDiffID(opener Opener) (v1.Hash, error) {
	rc, err := opener()
	if err != nil {
		return v1.Hash{}, err
	}
	defer rc.Close()

	digest, _, err := v1.SHA256(rc)
	return digest, err
}
07070100000707000081A4000000000000000000000001645E367C00003593000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/tarball/write.go // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package tarball

import (
	"archive/tar"
	"bytes"
	"encoding/json"
	"errors"
	"fmt"
	"io"
	"os"
	"sort"
	"strings"

	"github.com/google/go-containerregistry/pkg/name"
	v1 "github.com/google/go-containerregistry/pkg/v1"
	"github.com/google/go-containerregistry/pkg/v1/partial"
)

// WriteToFile writes in the compressed format to a tarball, on disk.
// This is just syntactic sugar wrapping tarball.Write with a new file.
func WriteToFile(p string, ref name.Reference, img v1.Image, opts ...WriteOption) error {
	w, err := os.Create(p)
	if err != nil {
		return err
	}
	defer w.Close()

	return Write(ref, img, w, opts...)
}

// MultiWriteToFile writes in the compressed format to a tarball, on disk.
// This is just syntactic sugar wrapping tarball.MultiWrite with a new file.
func MultiWriteToFile(p string, tagToImage map[name.Tag]v1.Image, opts ...WriteOption) error {
	refToImage := make(map[name.Reference]v1.Image, len(tagToImage))
	for i, d := range tagToImage {
		refToImage[i] = d
	}
	return MultiRefWriteToFile(p, refToImage, opts...)
}

// MultiRefWriteToFile writes in the compressed format to a tarball, on disk.
// This is just syntactic sugar wrapping tarball.MultiRefWrite with a new file.
func MultiRefWriteToFile(p string, refToImage map[name.Reference]v1.Image, opts ...WriteOption) error {
	w, err := os.Create(p)
	if err != nil {
		return err
	}
	defer w.Close()

	return MultiRefWrite(refToImage, w, opts...)
}

// Write is a wrapper to write a single image and tag to a tarball.
func Write(ref name.Reference, img v1.Image, w io.Writer, opts ...WriteOption) error {
	return MultiRefWrite(map[name.Reference]v1.Image{ref: img}, w, opts...)
}

// MultiWrite writes the contents of each image to the provided writer, in the compressed format.
// The contents are written in the following format:
// One manifest.json file at the top level containing information about several images.
// One file for each layer, named after the layer's SHA.
// One file for the config blob, named after its SHA.
func MultiWrite(tagToImage map[name.Tag]v1.Image, w io.Writer, opts ...WriteOption) error {
	refToImage := make(map[name.Reference]v1.Image, len(tagToImage))
	for i, d := range tagToImage {
		refToImage[i] = d
	}
	return MultiRefWrite(refToImage, w, opts...)
}

// MultiRefWrite writes the contents of each image to the provided writer, in the compressed format.
// The contents are written in the following format:
// One manifest.json file at the top level containing information about several images.
// One file for each layer, named after the layer's SHA.
// One file for the config blob, named after its SHA.
func MultiRefWrite(refToImage map[name.Reference]v1.Image, w io.Writer, opts ...WriteOption) error {
	// process options
	o := &writeOptions{
		updates: nil,
	}
	for _, option := range opts {
		if err := option(o); err != nil {
			return err
		}
	}

	imageToTags := dedupRefToImage(refToImage)
	size, mBytes, err := getSizeAndManifest(imageToTags)
	if err != nil {
		return sendUpdateReturn(o, err)
	}

	return writeImagesToTar(imageToTags, mBytes, size, w, o)
}

// sendUpdateReturn return the passed in error message, also sending on update channel, if it exists
func sendUpdateReturn(o *writeOptions, err error) error {
	if o != nil && o.updates != nil {
		o.updates <- v1.Update{
			Error: err,
		}
	}
	return err
}

// sendProgressWriterReturn return the passed in error message, also sending on update channel, if it exists, along with downloaded information
func sendProgressWriterReturn(pw *progressWriter, err error) error {
	if pw != nil {
		return pw.Error(err)
	}
	return err
}

// writeImagesToTar writes the images to the tarball
func writeImagesToTar(imageToTags map[v1.Image][]string, m []byte, size int64, w io.Writer, o *writeOptions) (err error) {
	if w == nil {
		return sendUpdateReturn(o, errors.New("must pass valid writer"))
	}

	tw := w
	var pw *progressWriter

	// we only calculate the sizes and use a progressWriter if we were provided
	// an option with a progress channel
	if o != nil && o.updates != nil {
		pw = &progressWriter{
			w:       w,
			updates: o.updates,
			size:    size,
		}
		tw = pw
	}

	tf := tar.NewWriter(tw)
	defer tf.Close()

	seenLayerDigests := make(map[string]struct{})

	for img := range imageToTags {
		// Write the config.
		cfgName, err := img.ConfigName()
		if err != nil {
			return sendProgressWriterReturn(pw, err)
		}
		cfgBlob, err := img.RawConfigFile()
		if err != nil {
			return sendProgressWriterReturn(pw, err)
		}
		if err := writeTarEntry(tf, cfgName.String(), bytes.NewReader(cfgBlob), int64(len(cfgBlob))); err != nil {
			return sendProgressWriterReturn(pw, err)
		}

		// Write the layers.
		layers, err := img.Layers()
		if err != nil {
			return sendProgressWriterReturn(pw, err)
		}
		layerFiles := make([]string, len(layers))
		for i, l := range layers {
			d, err := l.Digest()
			if err != nil {
				return sendProgressWriterReturn(pw, err)
			}
			// Munge the file name to appease ancient technology.
			//
			// tar assumes anything with a colon is a remote tape drive:
			// https://www.gnu.org/software/tar/manual/html_section/tar_45.html
			// Drop the algorithm prefix, e.g. "sha256:"
			hex := d.Hex

			// gunzip expects certain file extensions:
			// https://www.gnu.org/software/gzip/manual/html_node/Overview.html
			layerFiles[i] = fmt.Sprintf("%s.tar.gz", hex)

			if _, ok := seenLayerDigests[hex]; ok {
				continue
			}
			seenLayerDigests[hex] = struct{}{}

			r, err := l.Compressed()
			if err != nil {
				return sendProgressWriterReturn(pw, err)
			}
			blobSize, err := l.Size()
			if err != nil {
				return sendProgressWriterReturn(pw, err)
			}

			if err := writeTarEntry(tf, layerFiles[i], r, blobSize); err != nil {
				return sendProgressWriterReturn(pw, err)
			}
		}
	}
	if err := writeTarEntry(tf, "manifest.json", bytes.NewReader(m), int64(len(m))); err != nil {
		return sendProgressWriterReturn(pw, err)
	}

	// be sure to close the tar writer so everything is flushed out before we send our EOF
	if err := tf.Close(); err != nil {
		return sendProgressWriterReturn(pw, err)
	}
	// send an EOF to indicate finished on the channel, but nil as our return error
	_ = sendProgressWriterReturn(pw, io.EOF)
	return nil
}

// calculateManifest calculates the manifest and optionally the size of the tar file
func calculateManifest(imageToTags map[v1.Image][]string) (m Manifest, err error) {
	if len(imageToTags) == 0 {
		return nil, errors.New("set of images is empty")
	}

	for img, tags := range imageToTags {
		cfgName, err := img.ConfigName()
		if err != nil {
			return nil, err
		}

		// Store foreign layer info.
		layerSources := make(map[v1.Hash]v1.Descriptor)

		// Write the layers.
		layers, err := img.Layers()
		if err != nil {
			return nil, err
		}
		layerFiles := make([]string, len(layers))
		for i, l := range layers {
			d, err := l.Digest()
			if err != nil {
				return nil, err
			}
			// Munge the file name to appease ancient technology.
			//
			// tar assumes anything with a colon is a remote tape drive:
			// https://www.gnu.org/software/tar/manual/html_section/tar_45.html
			// Drop the algorithm prefix, e.g. "sha256:"
			hex := d.Hex

			// gunzip expects certain file extensions:
			// https://www.gnu.org/software/gzip/manual/html_node/Overview.html
			layerFiles[i] = fmt.Sprintf("%s.tar.gz", hex)

			// Add to LayerSources if it's a foreign layer.
			desc, err := partial.BlobDescriptor(img, d)
			if err != nil {
				return nil, err
			}
			if !desc.MediaType.IsDistributable() {
				diffid, err := partial.BlobToDiffID(img, d)
				if err != nil {
					return nil, err
				}
				layerSources[diffid] = *desc
			}
		}

		// Generate the tar descriptor and write it.
		m = append(m, Descriptor{
			Config:       cfgName.String(),
			RepoTags:     tags,
			Layers:       layerFiles,
			LayerSources: layerSources,
		})
	}
	// sort by name of the repotags so it is consistent. Alternatively, we could sort by hash of the
	// descriptor, but that would make it hard for humans to process
	sort.Slice(m, func(i, j int) bool {
		return strings.Join(m[i].RepoTags, ",") < strings.Join(m[j].RepoTags, ",")
	})

	return m, nil
}

// CalculateSize calculates the expected complete size of the output tar file
func CalculateSize(refToImage map[name.Reference]v1.Image) (size int64, err error) {
	imageToTags := dedupRefToImage(refToImage)
	size, _, err = getSizeAndManifest(imageToTags)
	return size, err
}

func getSizeAndManifest(imageToTags map[v1.Image][]string) (int64, []byte, error) {
	m, err := calculateManifest(imageToTags)
	if err != nil {
		return 0, nil, fmt.Errorf("unable to calculate manifest: %w", err)
	}
	mBytes, err := json.Marshal(m)
	if err != nil {
		return 0, nil, fmt.Errorf("could not marshall manifest to bytes: %w", err)
	}

	size, err := calculateTarballSize(imageToTags, mBytes)
	if err != nil {
		return 0, nil, fmt.Errorf("error calculating tarball size: %w", err)
	}
	return size, mBytes, nil
}

// calculateTarballSize calculates the size of the tar file
func calculateTarballSize(imageToTags map[v1.Image][]string, mBytes []byte) (size int64, err error) {
	seenLayerDigests := make(map[string]struct{})
	for img, name := range imageToTags {
		manifest, err := img.Manifest()
		if err != nil {
			return size, fmt.Errorf("unable to get manifest for img %s: %w", name, err)
		}
		size += calculateSingleFileInTarSize(manifest.Config.Size)
		for _, l := range manifest.Layers {
			hex := l.Digest.Hex
			if _, ok := seenLayerDigests[hex]; ok {
				continue
			}
			seenLayerDigests[hex] = struct{}{}
			size += calculateSingleFileInTarSize(l.Size)
		}
	}
	// add the manifest
	size += calculateSingleFileInTarSize(int64(len(mBytes)))

	// add the two padding blocks that indicate end of a tar file
	size += 1024
	return size, nil
}

func dedupRefToImage(refToImage map[name.Reference]v1.Image) map[v1.Image][]string {
	imageToTags := make(map[v1.Image][]string)

	for ref, img := range refToImage {
		if tag, ok := ref.(name.Tag); ok {
			if tags, ok := imageToTags[img]; !ok || tags == nil {
				imageToTags[img] = []string{}
			}
			// Docker cannot load tarballs without an explicit tag:
			// https://github.com/google/go-containerregistry/issues/890
			//
			// We can't use the fully qualified tag.Name() because of rules_docker:
			// https://github.com/google/go-containerregistry/issues/527
			//
			// If the tag is "latest", but tag.String() doesn't end in ":latest",
			// just append it. Kind of gross, but should work for now.
			ts := tag.String()
			if tag.Identifier() == name.DefaultTag && !strings.HasSuffix(ts, ":"+name.DefaultTag) {
				ts = fmt.Sprintf("%s:%s", ts, name.DefaultTag)
			}
			imageToTags[img] = append(imageToTags[img], ts)
		} else if _, ok := imageToTags[img]; !ok {
			imageToTags[img] = nil
		}
	}

	return imageToTags
}

// writeTarEntry writes a file to the provided writer with a corresponding tar header
func writeTarEntry(tf *tar.Writer, path string, r io.Reader, size int64) error {
	hdr := &tar.Header{
		Mode:     0644,
		Typeflag: tar.TypeReg,
		Size:     size,
		Name:     path,
	}
	if err := tf.WriteHeader(hdr); err != nil {
		return err
	}
	_, err := io.Copy(tf, r)
	return err
}

// ComputeManifest get the manifest.json that will be written to the tarball
// for multiple references
func ComputeManifest(refToImage map[name.Reference]v1.Image) (Manifest, error) {
	imageToTags := dedupRefToImage(refToImage)
	return calculateManifest(imageToTags)
}

// WriteOption a function option to pass to Write()
type WriteOption func(*writeOptions) error
type writeOptions struct {
	updates chan<- v1.Update
}

// WithProgress create a WriteOption for passing to Write() that enables
// a channel to receive updates as they are downloaded and written to disk.
func WithProgress(updates chan<- v1.Update) WriteOption {
	return func(o *writeOptions) error {
		o.updates = updates
		return nil
	}
}

// progressWriter is a writer which will send the download progress
type progressWriter struct {
	w              io.Writer
	updates        chan<- v1.Update
	size, complete int64
}

func (pw *progressWriter) Write(p []byte) (int, error) {
	n, err := pw.w.Write(p)
	if err != nil {
		return n, err
	}

	pw.complete += int64(n)

	pw.updates <- v1.Update{
		Total:    pw.size,
		Complete: pw.complete,
	}

	return n, err
}

func (pw *progressWriter) Error(err error) error {
	pw.updates <- v1.Update{
		Total:    pw.size,
		Complete: pw.complete,
		Error:    err,
	}
	return err
}

func (pw *progressWriter) Close() error {
	pw.updates <- v1.Update{
		Total:    pw.size,
		Complete: pw.complete,
		Error:    io.EOF,
	}
	return io.EOF
}

// calculateSingleFileInTarSize calculate the size a file will take up in a tar archive,
// given the input data. Provided by rounding up to nearest whole block (512)
// and adding header 512
func calculateSingleFileInTarSize(in int64) (out int64) {
	// doing this manually, because math.Round() works with float64
	out += in
	if remainder := out % 512; remainder != 0 {
		out += (512 - remainder)
	}
	out += 512
	return out
}
 07070100000708000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/types    07070100000709000081A4000000000000000000000001645E367C00000E23000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/types/types.go   // Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package types holds common OCI media types.
package types

// MediaType is an enumeration of the supported mime types that an element of an image might have.
type MediaType string

// The collection of known MediaType values.
const (
	OCIContentDescriptor           MediaType = "application/vnd.oci.descriptor.v1+json"
	OCIImageIndex                  MediaType = "application/vnd.oci.image.index.v1+json"
	OCIManifestSchema1             MediaType = "application/vnd.oci.image.manifest.v1+json"
	OCIConfigJSON                  MediaType = "application/vnd.oci.image.config.v1+json"
	OCILayer                       MediaType = "application/vnd.oci.image.layer.v1.tar+gzip"
	OCILayerZStd                   MediaType = "application/vnd.oci.image.layer.v1.tar+zstd"
	OCIRestrictedLayer             MediaType = "application/vnd.oci.image.layer.nondistributable.v1.tar+gzip"
	OCIUncompressedLayer           MediaType = "application/vnd.oci.image.layer.v1.tar"
	OCIUncompressedRestrictedLayer MediaType = "application/vnd.oci.image.layer.nondistributable.v1.tar"

	DockerManifestSchema1       MediaType = "application/vnd.docker.distribution.manifest.v1+json"
	DockerManifestSchema1Signed MediaType = "application/vnd.docker.distribution.manifest.v1+prettyjws"
	DockerManifestSchema2       MediaType = "application/vnd.docker.distribution.manifest.v2+json"
	DockerManifestList          MediaType = "application/vnd.docker.distribution.manifest.list.v2+json"
	DockerLayer                 MediaType = "application/vnd.docker.image.rootfs.diff.tar.gzip"
	DockerConfigJSON            MediaType = "application/vnd.docker.container.image.v1+json"
	DockerPluginConfig          MediaType = "application/vnd.docker.plugin.v1+json"
	DockerForeignLayer          MediaType = "application/vnd.docker.image.rootfs.foreign.diff.tar.gzip"
	DockerUncompressedLayer     MediaType = "application/vnd.docker.image.rootfs.diff.tar"

	OCIVendorPrefix    = "vnd.oci"
	DockerVendorPrefix = "vnd.docker"
)

// IsDistributable returns true if a layer is distributable, see:
// https://github.com/opencontainers/image-spec/blob/master/layer.md#non-distributable-layers
func (m MediaType) IsDistributable() bool {
	switch m {
	case DockerForeignLayer, OCIRestrictedLayer, OCIUncompressedRestrictedLayer:
		return false
	}
	return true
}

// IsImage returns true if the mediaType represents an image manifest, as opposed to something else, like an index.
func (m MediaType) IsImage() bool {
	switch m {
	case OCIManifestSchema1, DockerManifestSchema2:
		return true
	}
	return false
}

// IsIndex returns true if the mediaType represents an index, as opposed to something else, like an image.
func (m MediaType) IsIndex() bool {
	switch m {
	case OCIImageIndex, DockerManifestList:
		return true
	}
	return false
}

// IsConfig returns true if the mediaType represents a config, as opposed to something else, like an image.
func (m MediaType) IsConfig() bool {
	switch m {
	case OCIConfigJSON, DockerConfigJSON:
		return true
	}
	return false
}
 0707010000070A000081A4000000000000000000000001645E367C0000225F000000000000000000000000000000000000006200000000elemental-cli-0.3.1/vendor/github.com/google/go-containerregistry/pkg/v1/zz_deepcopy_generated.go //go:build !ignore_autogenerated
// +build !ignore_autogenerated

// Copyright 2018 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Code generated by deepcopy-gen. DO NOT EDIT.

package v1

// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Config) DeepCopyInto(out *Config) {
	*out = *in
	if in.Cmd != nil {
		in, out := &in.Cmd, &out.Cmd
		*out = make([]string, len(*in))
		copy(*out, *in)
	}
	if in.Healthcheck != nil {
		in, out := &in.Healthcheck, &out.Healthcheck
		*out = new(HealthConfig)
		(*in).DeepCopyInto(*out)
	}
	if in.Entrypoint != nil {
		in, out := &in.Entrypoint, &out.Entrypoint
		*out = make([]string, len(*in))
		copy(*out, *in)
	}
	if in.Env != nil {
		in, out := &in.Env, &out.Env
		*out = make([]string, len(*in))
		copy(*out, *in)
	}
	if in.Labels != nil {
		in, out := &in.Labels, &out.Labels
		*out = make(map[string]string, len(*in))
		for key, val := range *in {
			(*out)[key] = val
		}
	}
	if in.OnBuild != nil {
		in, out := &in.OnBuild, &out.OnBuild
		*out = make([]string, len(*in))
		copy(*out, *in)
	}
	if in.Volumes != nil {
		in, out := &in.Volumes, &out.Volumes
		*out = make(map[string]struct{}, len(*in))
		for key, val := range *in {
			(*out)[key] = val
		}
	}
	if in.ExposedPorts != nil {
		in, out := &in.ExposedPorts, &out.ExposedPorts
		*out = make(map[string]struct{}, len(*in))
		for key, val := range *in {
			(*out)[key] = val
		}
	}
	if in.Shell != nil {
		in, out := &in.Shell, &out.Shell
		*out = make([]string, len(*in))
		copy(*out, *in)
	}
	return
}

// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Config.
func (in *Config) DeepCopy() *Config {
	if in == nil {
		return nil
	}
	out := new(Config)
	in.DeepCopyInto(out)
	return out
}

// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ConfigFile) DeepCopyInto(out *ConfigFile) {
	*out = *in
	in.Created.DeepCopyInto(&out.Created)
	if in.History != nil {
		in, out := &in.History, &out.History
		*out = make([]History, len(*in))
		for i := range *in {
			(*in)[i].DeepCopyInto(&(*out)[i])
		}
	}
	in.RootFS.DeepCopyInto(&out.RootFS)
	in.Config.DeepCopyInto(&out.Config)
	if in.OSFeatures != nil {
		in, out := &in.OSFeatures, &out.OSFeatures
		*out = make([]string, len(*in))
		copy(*out, *in)
	}
	return
}

// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigFile.
func (in *ConfigFile) DeepCopy() *ConfigFile {
	if in == nil {
		return nil
	}
	out := new(ConfigFile)
	in.DeepCopyInto(out)
	return out
}

// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Descriptor) DeepCopyInto(out *Descriptor) {
	*out = *in
	out.Digest = in.Digest
	if in.Data != nil {
		in, out := &in.Data, &out.Data
		*out = make([]byte, len(*in))
		copy(*out, *in)
	}
	if in.URLs != nil {
		in, out := &in.URLs, &out.URLs
		*out = make([]string, len(*in))
		copy(*out, *in)
	}
	if in.Annotations != nil {
		in, out := &in.Annotations, &out.Annotations
		*out = make(map[string]string, len(*in))
		for key, val := range *in {
			(*out)[key] = val
		}
	}
	if in.Platform != nil {
		in, out := &in.Platform, &out.Platform
		*out = new(Platform)
		(*in).DeepCopyInto(*out)
	}
	return
}

// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Descriptor.
func (in *Descriptor) DeepCopy() *Descriptor {
	if in == nil {
		return nil
	}
	out := new(Descriptor)
	in.DeepCopyInto(out)
	return out
}

// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Hash) DeepCopyInto(out *Hash) {
	*out = *in
	return
}

// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Hash.
func (in *Hash) DeepCopy() *Hash {
	if in == nil {
		return nil
	}
	out := new(Hash)
	in.DeepCopyInto(out)
	return out
}

// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *HealthConfig) DeepCopyInto(out *HealthConfig) {
	*out = *in
	if in.Test != nil {
		in, out := &in.Test, &out.Test
		*out = make([]string, len(*in))
		copy(*out, *in)
	}
	return
}

// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HealthConfig.
func (in *HealthConfig) DeepCopy() *HealthConfig {
	if in == nil {
		return nil
	}
	out := new(HealthConfig)
	in.DeepCopyInto(out)
	return out
}

// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *History) DeepCopyInto(out *History) {
	*out = *in
	in.Created.DeepCopyInto(&out.Created)
	return
}

// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new History.
func (in *History) DeepCopy() *History {
	if in == nil {
		return nil
	}
	out := new(History)
	in.DeepCopyInto(out)
	return out
}

// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *IndexManifest) DeepCopyInto(out *IndexManifest) {
	*out = *in
	if in.Manifests != nil {
		in, out := &in.Manifests, &out.Manifests
		*out = make([]Descriptor, len(*in))
		for i := range *in {
			(*in)[i].DeepCopyInto(&(*out)[i])
		}
	}
	if in.Annotations != nil {
		in, out := &in.Annotations, &out.Annotations
		*out = make(map[string]string, len(*in))
		for key, val := range *in {
			(*out)[key] = val
		}
	}
	if in.Subject != nil {
		in, out := &in.Subject, &out.Subject
		*out = new(Descriptor)
		(*in).DeepCopyInto(*out)
	}
	return
}

// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IndexManifest.
func (in *IndexManifest) DeepCopy() *IndexManifest {
	if in == nil {
		return nil
	}
	out := new(IndexManifest)
	in.DeepCopyInto(out)
	return out
}

// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Manifest) DeepCopyInto(out *Manifest) {
	*out = *in
	in.Config.DeepCopyInto(&out.Config)
	if in.Layers != nil {
		in, out := &in.Layers, &out.Layers
		*out = make([]Descriptor, len(*in))
		for i := range *in {
			(*in)[i].DeepCopyInto(&(*out)[i])
		}
	}
	if in.Annotations != nil {
		in, out := &in.Annotations, &out.Annotations
		*out = make(map[string]string, len(*in))
		for key, val := range *in {
			(*out)[key] = val
		}
	}
	if in.Subject != nil {
		in, out := &in.Subject, &out.Subject
		*out = new(Descriptor)
		(*in).DeepCopyInto(*out)
	}
	return
}

// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Manifest.
func (in *Manifest) DeepCopy() *Manifest {
	if in == nil {
		return nil
	}
	out := new(Manifest)
	in.DeepCopyInto(out)
	return out
}

// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Platform) DeepCopyInto(out *Platform) {
	*out = *in
	if in.OSFeatures != nil {
		in, out := &in.OSFeatures, &out.OSFeatures
		*out = make([]string, len(*in))
		copy(*out, *in)
	}
	if in.Features != nil {
		in, out := &in.Features, &out.Features
		*out = make([]string, len(*in))
		copy(*out, *in)
	}
	return
}

// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Platform.
func (in *Platform) DeepCopy() *Platform {
	if in == nil {
		return nil
	}
	out := new(Platform)
	in.DeepCopyInto(out)
	return out
}

// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *RootFS) DeepCopyInto(out *RootFS) {
	*out = *in
	if in.DiffIDs != nil {
		in, out := &in.DiffIDs, &out.DiffIDs
		*out = make([]Hash, len(*in))
		copy(*out, *in)
	}
	return
}

// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RootFS.
func (in *RootFS) DeepCopy() *RootFS {
	if in == nil {
		return nil
	}
	out := new(RootFS)
	in.DeepCopyInto(out)
	return out
}

// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Time.
func (in *Time) DeepCopy() *Time {
	if in == nil {
		return nil
	}
	out := new(Time)
	in.DeepCopyInto(out)
	return out
}
 0707010000070B000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003300000000elemental-cli-0.3.1/vendor/github.com/google/pprof    0707010000070C000081A4000000000000000000000001645E367C00000131000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/google/pprof/AUTHORS    # This is the official list of pprof authors for copyright purposes.
# This file is distinct from the CONTRIBUTORS files.
# See the latter for an explanation.
# Names should be added to this file as:
# Name or Organization <email address>
# The email address is not required for organizations.
Google Inc.   0707010000070D000081A4000000000000000000000001645E367C0000028E000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/google/pprof/CONTRIBUTORS   # People who have agreed to one of the CLAs and can contribute patches.
# The AUTHORS file lists the copyright holders; this file
# lists people.  For example, Google employees are listed here
# but not in AUTHORS, because Google holds the copyright.
#
# https://developers.google.com/open-source/cla/individual
# https://developers.google.com/open-source/cla/corporate
#
# Names should be added to this file as:
#     Name <email address>
Raul Silvera <rsilvera@google.com>
Tipp Moseley <tipp@google.com>
Hyoun Kyu Cho <netforce@google.com>
Martin Spier <spiermar@gmail.com>
Taco de Wolff <tacodewolff@gmail.com>
Andrew Hunter <andrewhhunter@gmail.com>
  0707010000070E000081A4000000000000000000000001645E367C00002C5E000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/google/pprof/LICENSE    
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
  0707010000070F000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/google/pprof/profile    07070100000710000081A4000000000000000000000001645E367C000043CB000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/google/pprof/profile/encode.go  // Copyright 2014 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package profile

import (
	"errors"
	"sort"
	"strings"
)

func (p *Profile) decoder() []decoder {
	return profileDecoder
}

// preEncode populates the unexported fields to be used by encode
// (with suffix X) from the corresponding exported fields. The
// exported fields are cleared up to facilitate testing.
func (p *Profile) preEncode() {
	strings := make(map[string]int)
	addString(strings, "")

	for _, st := range p.SampleType {
		st.typeX = addString(strings, st.Type)
		st.unitX = addString(strings, st.Unit)
	}

	for _, s := range p.Sample {
		s.labelX = nil
		var keys []string
		for k := range s.Label {
			keys = append(keys, k)
		}
		sort.Strings(keys)
		for _, k := range keys {
			vs := s.Label[k]
			for _, v := range vs {
				s.labelX = append(s.labelX,
					label{
						keyX: addString(strings, k),
						strX: addString(strings, v),
					},
				)
			}
		}
		var numKeys []string
		for k := range s.NumLabel {
			numKeys = append(numKeys, k)
		}
		sort.Strings(numKeys)
		for _, k := range numKeys {
			keyX := addString(strings, k)
			vs := s.NumLabel[k]
			units := s.NumUnit[k]
			for i, v := range vs {
				var unitX int64
				if len(units) != 0 {
					unitX = addString(strings, units[i])
				}
				s.labelX = append(s.labelX,
					label{
						keyX:  keyX,
						numX:  v,
						unitX: unitX,
					},
				)
			}
		}
		s.locationIDX = make([]uint64, len(s.Location))
		for i, loc := range s.Location {
			s.locationIDX[i] = loc.ID
		}
	}

	for _, m := range p.Mapping {
		m.fileX = addString(strings, m.File)
		m.buildIDX = addString(strings, m.BuildID)
	}

	for _, l := range p.Location {
		for i, ln := range l.Line {
			if ln.Function != nil {
				l.Line[i].functionIDX = ln.Function.ID
			} else {
				l.Line[i].functionIDX = 0
			}
		}
		if l.Mapping != nil {
			l.mappingIDX = l.Mapping.ID
		} else {
			l.mappingIDX = 0
		}
	}
	for _, f := range p.Function {
		f.nameX = addString(strings, f.Name)
		f.systemNameX = addString(strings, f.SystemName)
		f.filenameX = addString(strings, f.Filename)
	}

	p.dropFramesX = addString(strings, p.DropFrames)
	p.keepFramesX = addString(strings, p.KeepFrames)

	if pt := p.PeriodType; pt != nil {
		pt.typeX = addString(strings, pt.Type)
		pt.unitX = addString(strings, pt.Unit)
	}

	p.commentX = nil
	for _, c := range p.Comments {
		p.commentX = append(p.commentX, addString(strings, c))
	}

	p.defaultSampleTypeX = addString(strings, p.DefaultSampleType)

	p.stringTable = make([]string, len(strings))
	for s, i := range strings {
		p.stringTable[i] = s
	}
}

func (p *Profile) encode(b *buffer) {
	for _, x := range p.SampleType {
		encodeMessage(b, 1, x)
	}
	for _, x := range p.Sample {
		encodeMessage(b, 2, x)
	}
	for _, x := range p.Mapping {
		encodeMessage(b, 3, x)
	}
	for _, x := range p.Location {
		encodeMessage(b, 4, x)
	}
	for _, x := range p.Function {
		encodeMessage(b, 5, x)
	}
	encodeStrings(b, 6, p.stringTable)
	encodeInt64Opt(b, 7, p.dropFramesX)
	encodeInt64Opt(b, 8, p.keepFramesX)
	encodeInt64Opt(b, 9, p.TimeNanos)
	encodeInt64Opt(b, 10, p.DurationNanos)
	if pt := p.PeriodType; pt != nil && (pt.typeX != 0 || pt.unitX != 0) {
		encodeMessage(b, 11, p.PeriodType)
	}
	encodeInt64Opt(b, 12, p.Period)
	encodeInt64s(b, 13, p.commentX)
	encodeInt64(b, 14, p.defaultSampleTypeX)
}

var profileDecoder = []decoder{
	nil, // 0
	// repeated ValueType sample_type = 1
	func(b *buffer, m message) error {
		x := new(ValueType)
		pp := m.(*Profile)
		pp.SampleType = append(pp.SampleType, x)
		return decodeMessage(b, x)
	},
	// repeated Sample sample = 2
	func(b *buffer, m message) error {
		x := new(Sample)
		pp := m.(*Profile)
		pp.Sample = append(pp.Sample, x)
		return decodeMessage(b, x)
	},
	// repeated Mapping mapping = 3
	func(b *buffer, m message) error {
		x := new(Mapping)
		pp := m.(*Profile)
		pp.Mapping = append(pp.Mapping, x)
		return decodeMessage(b, x)
	},
	// repeated Location location = 4
	func(b *buffer, m message) error {
		x := new(Location)
		x.Line = b.tmpLines[:0] // Use shared space temporarily
		pp := m.(*Profile)
		pp.Location = append(pp.Location, x)
		err := decodeMessage(b, x)
		b.tmpLines = x.Line[:0]
		// Copy to shrink size and detach from shared space.
		x.Line = append([]Line(nil), x.Line...)
		return err
	},
	// repeated Function function = 5
	func(b *buffer, m message) error {
		x := new(Function)
		pp := m.(*Profile)
		pp.Function = append(pp.Function, x)
		return decodeMessage(b, x)
	},
	// repeated string string_table = 6
	func(b *buffer, m message) error {
		err := decodeStrings(b, &m.(*Profile).stringTable)
		if err != nil {
			return err
		}
		if m.(*Profile).stringTable[0] != "" {
			return errors.New("string_table[0] must be ''")
		}
		return nil
	},
	// int64 drop_frames = 7
	func(b *buffer, m message) error { return decodeInt64(b, &m.(*Profile).dropFramesX) },
	// int64 keep_frames = 8
	func(b *buffer, m message) error { return decodeInt64(b, &m.(*Profile).keepFramesX) },
	// int64 time_nanos = 9
	func(b *buffer, m message) error {
		if m.(*Profile).TimeNanos != 0 {
			return errConcatProfile
		}
		return decodeInt64(b, &m.(*Profile).TimeNanos)
	},
	// int64 duration_nanos = 10
	func(b *buffer, m message) error { return decodeInt64(b, &m.(*Profile).DurationNanos) },
	// ValueType period_type = 11
	func(b *buffer, m message) error {
		x := new(ValueType)
		pp := m.(*Profile)
		pp.PeriodType = x
		return decodeMessage(b, x)
	},
	// int64 period = 12
	func(b *buffer, m message) error { return decodeInt64(b, &m.(*Profile).Period) },
	// repeated int64 comment = 13
	func(b *buffer, m message) error { return decodeInt64s(b, &m.(*Profile).commentX) },
	// int64 defaultSampleType = 14
	func(b *buffer, m message) error { return decodeInt64(b, &m.(*Profile).defaultSampleTypeX) },
}

// postDecode takes the unexported fields populated by decode (with
// suffix X) and populates the corresponding exported fields.
// The unexported fields are cleared up to facilitate testing.
func (p *Profile) postDecode() error {
	var err error
	mappings := make(map[uint64]*Mapping, len(p.Mapping))
	mappingIds := make([]*Mapping, len(p.Mapping)+1)
	for _, m := range p.Mapping {
		m.File, err = getString(p.stringTable, &m.fileX, err)
		m.BuildID, err = getString(p.stringTable, &m.buildIDX, err)
		if m.ID < uint64(len(mappingIds)) {
			mappingIds[m.ID] = m
		} else {
			mappings[m.ID] = m
		}

		// If this a main linux kernel mapping with a relocation symbol suffix
		// ("[kernel.kallsyms]_text"), extract said suffix.
		// It is fairly hacky to handle at this level, but the alternatives appear even worse.
		if strings.HasPrefix(m.File, "[kernel.kallsyms]") {
			m.KernelRelocationSymbol = strings.ReplaceAll(m.File, "[kernel.kallsyms]", "")
		}

	}

	functions := make(map[uint64]*Function, len(p.Function))
	functionIds := make([]*Function, len(p.Function)+1)
	for _, f := range p.Function {
		f.Name, err = getString(p.stringTable, &f.nameX, err)
		f.SystemName, err = getString(p.stringTable, &f.systemNameX, err)
		f.Filename, err = getString(p.stringTable, &f.filenameX, err)
		if f.ID < uint64(len(functionIds)) {
			functionIds[f.ID] = f
		} else {
			functions[f.ID] = f
		}
	}

	locations := make(map[uint64]*Location, len(p.Location))
	locationIds := make([]*Location, len(p.Location)+1)
	for _, l := range p.Location {
		if id := l.mappingIDX; id < uint64(len(mappingIds)) {
			l.Mapping = mappingIds[id]
		} else {
			l.Mapping = mappings[id]
		}
		l.mappingIDX = 0
		for i, ln := range l.Line {
			if id := ln.functionIDX; id != 0 {
				l.Line[i].functionIDX = 0
				if id < uint64(len(functionIds)) {
					l.Line[i].Function = functionIds[id]
				} else {
					l.Line[i].Function = functions[id]
				}
			}
		}
		if l.ID < uint64(len(locationIds)) {
			locationIds[l.ID] = l
		} else {
			locations[l.ID] = l
		}
	}

	for _, st := range p.SampleType {
		st.Type, err = getString(p.stringTable, &st.typeX, err)
		st.Unit, err = getString(p.stringTable, &st.unitX, err)
	}

	// Pre-allocate space for all locations.
	numLocations := 0
	for _, s := range p.Sample {
		numLocations += len(s.locationIDX)
	}
	locBuffer := make([]*Location, numLocations)

	for _, s := range p.Sample {
		if len(s.labelX) > 0 {
			labels := make(map[string][]string, len(s.labelX))
			numLabels := make(map[string][]int64, len(s.labelX))
			numUnits := make(map[string][]string, len(s.labelX))
			for _, l := range s.labelX {
				var key, value string
				key, err = getString(p.stringTable, &l.keyX, err)
				if l.strX != 0 {
					value, err = getString(p.stringTable, &l.strX, err)
					labels[key] = append(labels[key], value)
				} else if l.numX != 0 || l.unitX != 0 {
					numValues := numLabels[key]
					units := numUnits[key]
					if l.unitX != 0 {
						var unit string
						unit, err = getString(p.stringTable, &l.unitX, err)
						units = padStringArray(units, len(numValues))
						numUnits[key] = append(units, unit)
					}
					numLabels[key] = append(numLabels[key], l.numX)
				}
			}
			if len(labels) > 0 {
				s.Label = labels
			}
			if len(numLabels) > 0 {
				s.NumLabel = numLabels
				for key, units := range numUnits {
					if len(units) > 0 {
						numUnits[key] = padStringArray(units, len(numLabels[key]))
					}
				}
				s.NumUnit = numUnits
			}
		}

		s.Location = locBuffer[:len(s.locationIDX)]
		locBuffer = locBuffer[len(s.locationIDX):]
		for i, lid := range s.locationIDX {
			if lid < uint64(len(locationIds)) {
				s.Location[i] = locationIds[lid]
			} else {
				s.Location[i] = locations[lid]
			}
		}
		s.locationIDX = nil
	}

	p.DropFrames, err = getString(p.stringTable, &p.dropFramesX, err)
	p.KeepFrames, err = getString(p.stringTable, &p.keepFramesX, err)

	if pt := p.PeriodType; pt == nil {
		p.PeriodType = &ValueType{}
	}

	if pt := p.PeriodType; pt != nil {
		pt.Type, err = getString(p.stringTable, &pt.typeX, err)
		pt.Unit, err = getString(p.stringTable, &pt.unitX, err)
	}

	for _, i := range p.commentX {
		var c string
		c, err = getString(p.stringTable, &i, err)
		p.Comments = append(p.Comments, c)
	}

	p.commentX = nil
	p.DefaultSampleType, err = getString(p.stringTable, &p.defaultSampleTypeX, err)
	p.stringTable = nil
	return err
}

// padStringArray pads arr with enough empty strings to make arr
// length l when arr's length is less than l.
func padStringArray(arr []string, l int) []string {
	if l <= len(arr) {
		return arr
	}
	return append(arr, make([]string, l-len(arr))...)
}

func (p *ValueType) decoder() []decoder {
	return valueTypeDecoder
}

func (p *ValueType) encode(b *buffer) {
	encodeInt64Opt(b, 1, p.typeX)
	encodeInt64Opt(b, 2, p.unitX)
}

var valueTypeDecoder = []decoder{
	nil, // 0
	// optional int64 type = 1
	func(b *buffer, m message) error { return decodeInt64(b, &m.(*ValueType).typeX) },
	// optional int64 unit = 2
	func(b *buffer, m message) error { return decodeInt64(b, &m.(*ValueType).unitX) },
}

func (p *Sample) decoder() []decoder {
	return sampleDecoder
}

func (p *Sample) encode(b *buffer) {
	encodeUint64s(b, 1, p.locationIDX)
	encodeInt64s(b, 2, p.Value)
	for _, x := range p.labelX {
		encodeMessage(b, 3, x)
	}
}

var sampleDecoder = []decoder{
	nil, // 0
	// repeated uint64 location = 1
	func(b *buffer, m message) error { return decodeUint64s(b, &m.(*Sample).locationIDX) },
	// repeated int64 value = 2
	func(b *buffer, m message) error { return decodeInt64s(b, &m.(*Sample).Value) },
	// repeated Label label = 3
	func(b *buffer, m message) error {
		s := m.(*Sample)
		n := len(s.labelX)
		s.labelX = append(s.labelX, label{})
		return decodeMessage(b, &s.labelX[n])
	},
}

func (p label) decoder() []decoder {
	return labelDecoder
}

func (p label) encode(b *buffer) {
	encodeInt64Opt(b, 1, p.keyX)
	encodeInt64Opt(b, 2, p.strX)
	encodeInt64Opt(b, 3, p.numX)
	encodeInt64Opt(b, 4, p.unitX)
}

var labelDecoder = []decoder{
	nil, // 0
	// optional int64 key = 1
	func(b *buffer, m message) error { return decodeInt64(b, &m.(*label).keyX) },
	// optional int64 str = 2
	func(b *buffer, m message) error { return decodeInt64(b, &m.(*label).strX) },
	// optional int64 num = 3
	func(b *buffer, m message) error { return decodeInt64(b, &m.(*label).numX) },
	// optional int64 num = 4
	func(b *buffer, m message) error { return decodeInt64(b, &m.(*label).unitX) },
}

func (p *Mapping) decoder() []decoder {
	return mappingDecoder
}

func (p *Mapping) encode(b *buffer) {
	encodeUint64Opt(b, 1, p.ID)
	encodeUint64Opt(b, 2, p.Start)
	encodeUint64Opt(b, 3, p.Limit)
	encodeUint64Opt(b, 4, p.Offset)
	encodeInt64Opt(b, 5, p.fileX)
	encodeInt64Opt(b, 6, p.buildIDX)
	encodeBoolOpt(b, 7, p.HasFunctions)
	encodeBoolOpt(b, 8, p.HasFilenames)
	encodeBoolOpt(b, 9, p.HasLineNumbers)
	encodeBoolOpt(b, 10, p.HasInlineFrames)
}

var mappingDecoder = []decoder{
	nil, // 0
	func(b *buffer, m message) error { return decodeUint64(b, &m.(*Mapping).ID) },            // optional uint64 id = 1
	func(b *buffer, m message) error { return decodeUint64(b, &m.(*Mapping).Start) },         // optional uint64 memory_offset = 2
	func(b *buffer, m message) error { return decodeUint64(b, &m.(*Mapping).Limit) },         // optional uint64 memory_limit = 3
	func(b *buffer, m message) error { return decodeUint64(b, &m.(*Mapping).Offset) },        // optional uint64 file_offset = 4
	func(b *buffer, m message) error { return decodeInt64(b, &m.(*Mapping).fileX) },          // optional int64 filename = 5
	func(b *buffer, m message) error { return decodeInt64(b, &m.(*Mapping).buildIDX) },       // optional int64 build_id = 6
	func(b *buffer, m message) error { return decodeBool(b, &m.(*Mapping).HasFunctions) },    // optional bool has_functions = 7
	func(b *buffer, m message) error { return decodeBool(b, &m.(*Mapping).HasFilenames) },    // optional bool has_filenames = 8
	func(b *buffer, m message) error { return decodeBool(b, &m.(*Mapping).HasLineNumbers) },  // optional bool has_line_numbers = 9
	func(b *buffer, m message) error { return decodeBool(b, &m.(*Mapping).HasInlineFrames) }, // optional bool has_inline_frames = 10
}

func (p *Location) decoder() []decoder {
	return locationDecoder
}

func (p *Location) encode(b *buffer) {
	encodeUint64Opt(b, 1, p.ID)
	encodeUint64Opt(b, 2, p.mappingIDX)
	encodeUint64Opt(b, 3, p.Address)
	for i := range p.Line {
		encodeMessage(b, 4, &p.Line[i])
	}
	encodeBoolOpt(b, 5, p.IsFolded)
}

var locationDecoder = []decoder{
	nil, // 0
	func(b *buffer, m message) error { return decodeUint64(b, &m.(*Location).ID) },         // optional uint64 id = 1;
	func(b *buffer, m message) error { return decodeUint64(b, &m.(*Location).mappingIDX) }, // optional uint64 mapping_id = 2;
	func(b *buffer, m message) error { return decodeUint64(b, &m.(*Location).Address) },    // optional uint64 address = 3;
	func(b *buffer, m message) error { // repeated Line line = 4
		pp := m.(*Location)
		n := len(pp.Line)
		pp.Line = append(pp.Line, Line{})
		return decodeMessage(b, &pp.Line[n])
	},
	func(b *buffer, m message) error { return decodeBool(b, &m.(*Location).IsFolded) }, // optional bool is_folded = 5;
}

func (p *Line) decoder() []decoder {
	return lineDecoder
}

func (p *Line) encode(b *buffer) {
	encodeUint64Opt(b, 1, p.functionIDX)
	encodeInt64Opt(b, 2, p.Line)
}

var lineDecoder = []decoder{
	nil, // 0
	// optional uint64 function_id = 1
	func(b *buffer, m message) error { return decodeUint64(b, &m.(*Line).functionIDX) },
	// optional int64 line = 2
	func(b *buffer, m message) error { return decodeInt64(b, &m.(*Line).Line) },
}

func (p *Function) decoder() []decoder {
	return functionDecoder
}

func (p *Function) encode(b *buffer) {
	encodeUint64Opt(b, 1, p.ID)
	encodeInt64Opt(b, 2, p.nameX)
	encodeInt64Opt(b, 3, p.systemNameX)
	encodeInt64Opt(b, 4, p.filenameX)
	encodeInt64Opt(b, 5, p.StartLine)
}

var functionDecoder = []decoder{
	nil, // 0
	// optional uint64 id = 1
	func(b *buffer, m message) error { return decodeUint64(b, &m.(*Function).ID) },
	// optional int64 function_name = 2
	func(b *buffer, m message) error { return decodeInt64(b, &m.(*Function).nameX) },
	// optional int64 function_system_name = 3
	func(b *buffer, m message) error { return decodeInt64(b, &m.(*Function).systemNameX) },
	// repeated int64 filename = 4
	func(b *buffer, m message) error { return decodeInt64(b, &m.(*Function).filenameX) },
	// optional int64 start_line = 5
	func(b *buffer, m message) error { return decodeInt64(b, &m.(*Function).StartLine) },
}

func addString(strings map[string]int, s string) int64 {
	i, ok := strings[s]
	if !ok {
		i = len(strings)
		strings[s] = i
	}
	return int64(i)
}

func getString(strings []string, strng *int64, err error) (string, error) {
	if err != nil {
		return "", err
	}
	s := int(*strng)
	if s < 0 || s >= len(strings) {
		return "", errMalformed
	}
	*strng = 0
	return strings[s], nil
}
 07070100000711000081A4000000000000000000000001645E367C00001E0B000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/google/pprof/profile/filter.go  // Copyright 2014 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package profile

// Implements methods to filter samples from profiles.

import "regexp"

// FilterSamplesByName filters the samples in a profile and only keeps
// samples where at least one frame matches focus but none match ignore.
// Returns true is the corresponding regexp matched at least one sample.
func (p *Profile) FilterSamplesByName(focus, ignore, hide, show *regexp.Regexp) (fm, im, hm, hnm bool) {
	if focus == nil && ignore == nil && hide == nil && show == nil {
		fm = true // Missing focus implies a match
		return
	}
	focusOrIgnore := make(map[uint64]bool)
	hidden := make(map[uint64]bool)
	for _, l := range p.Location {
		if ignore != nil && l.matchesName(ignore) {
			im = true
			focusOrIgnore[l.ID] = false
		} else if focus == nil || l.matchesName(focus) {
			fm = true
			focusOrIgnore[l.ID] = true
		}

		if hide != nil && l.matchesName(hide) {
			hm = true
			l.Line = l.unmatchedLines(hide)
			if len(l.Line) == 0 {
				hidden[l.ID] = true
			}
		}
		if show != nil {
			l.Line = l.matchedLines(show)
			if len(l.Line) == 0 {
				hidden[l.ID] = true
			} else {
				hnm = true
			}
		}
	}

	s := make([]*Sample, 0, len(p.Sample))
	for _, sample := range p.Sample {
		if focusedAndNotIgnored(sample.Location, focusOrIgnore) {
			if len(hidden) > 0 {
				var locs []*Location
				for _, loc := range sample.Location {
					if !hidden[loc.ID] {
						locs = append(locs, loc)
					}
				}
				if len(locs) == 0 {
					// Remove sample with no locations (by not adding it to s).
					continue
				}
				sample.Location = locs
			}
			s = append(s, sample)
		}
	}
	p.Sample = s

	return
}

// ShowFrom drops all stack frames above the highest matching frame and returns
// whether a match was found. If showFrom is nil it returns false and does not
// modify the profile.
//
// Example: consider a sample with frames [A, B, C, B], where A is the root.
// ShowFrom(nil) returns false and has frames [A, B, C, B].
// ShowFrom(A) returns true and has frames [A, B, C, B].
// ShowFrom(B) returns true and has frames [B, C, B].
// ShowFrom(C) returns true and has frames [C, B].
// ShowFrom(D) returns false and drops the sample because no frames remain.
func (p *Profile) ShowFrom(showFrom *regexp.Regexp) (matched bool) {
	if showFrom == nil {
		return false
	}
	// showFromLocs stores location IDs that matched ShowFrom.
	showFromLocs := make(map[uint64]bool)
	// Apply to locations.
	for _, loc := range p.Location {
		if filterShowFromLocation(loc, showFrom) {
			showFromLocs[loc.ID] = true
			matched = true
		}
	}
	// For all samples, strip locations after the highest matching one.
	s := make([]*Sample, 0, len(p.Sample))
	for _, sample := range p.Sample {
		for i := len(sample.Location) - 1; i >= 0; i-- {
			if showFromLocs[sample.Location[i].ID] {
				sample.Location = sample.Location[:i+1]
				s = append(s, sample)
				break
			}
		}
	}
	p.Sample = s
	return matched
}

// filterShowFromLocation tests a showFrom regex against a location, removes
// lines after the last match and returns whether a match was found. If the
// mapping is matched, then all lines are kept.
func filterShowFromLocation(loc *Location, showFrom *regexp.Regexp) bool {
	if m := loc.Mapping; m != nil && showFrom.MatchString(m.File) {
		return true
	}
	if i := loc.lastMatchedLineIndex(showFrom); i >= 0 {
		loc.Line = loc.Line[:i+1]
		return true
	}
	return false
}

// lastMatchedLineIndex returns the index of the last line that matches a regex,
// or -1 if no match is found.
func (loc *Location) lastMatchedLineIndex(re *regexp.Regexp) int {
	for i := len(loc.Line) - 1; i >= 0; i-- {
		if fn := loc.Line[i].Function; fn != nil {
			if re.MatchString(fn.Name) || re.MatchString(fn.Filename) {
				return i
			}
		}
	}
	return -1
}

// FilterTagsByName filters the tags in a profile and only keeps
// tags that match show and not hide.
func (p *Profile) FilterTagsByName(show, hide *regexp.Regexp) (sm, hm bool) {
	matchRemove := func(name string) bool {
		matchShow := show == nil || show.MatchString(name)
		matchHide := hide != nil && hide.MatchString(name)

		if matchShow {
			sm = true
		}
		if matchHide {
			hm = true
		}
		return !matchShow || matchHide
	}
	for _, s := range p.Sample {
		for lab := range s.Label {
			if matchRemove(lab) {
				delete(s.Label, lab)
			}
		}
		for lab := range s.NumLabel {
			if matchRemove(lab) {
				delete(s.NumLabel, lab)
			}
		}
	}
	return
}

// matchesName returns whether the location matches the regular
// expression. It checks any available function names, file names, and
// mapping object filename.
func (loc *Location) matchesName(re *regexp.Regexp) bool {
	for _, ln := range loc.Line {
		if fn := ln.Function; fn != nil {
			if re.MatchString(fn.Name) || re.MatchString(fn.Filename) {
				return true
			}
		}
	}
	if m := loc.Mapping; m != nil && re.MatchString(m.File) {
		return true
	}
	return false
}

// unmatchedLines returns the lines in the location that do not match
// the regular expression.
func (loc *Location) unmatchedLines(re *regexp.Regexp) []Line {
	if m := loc.Mapping; m != nil && re.MatchString(m.File) {
		return nil
	}
	var lines []Line
	for _, ln := range loc.Line {
		if fn := ln.Function; fn != nil {
			if re.MatchString(fn.Name) || re.MatchString(fn.Filename) {
				continue
			}
		}
		lines = append(lines, ln)
	}
	return lines
}

// matchedLines returns the lines in the location that match
// the regular expression.
func (loc *Location) matchedLines(re *regexp.Regexp) []Line {
	if m := loc.Mapping; m != nil && re.MatchString(m.File) {
		return loc.Line
	}
	var lines []Line
	for _, ln := range loc.Line {
		if fn := ln.Function; fn != nil {
			if !re.MatchString(fn.Name) && !re.MatchString(fn.Filename) {
				continue
			}
		}
		lines = append(lines, ln)
	}
	return lines
}

// focusedAndNotIgnored looks up a slice of ids against a map of
// focused/ignored locations. The map only contains locations that are
// explicitly focused or ignored. Returns whether there is at least
// one focused location but no ignored locations.
func focusedAndNotIgnored(locs []*Location, m map[uint64]bool) bool {
	var f bool
	for _, loc := range locs {
		if focus, focusOrIgnore := m[loc.ID]; focusOrIgnore {
			if focus {
				// Found focused location. Must keep searching in case there
				// is an ignored one as well.
				f = true
			} else {
				// Found ignored location. Can return false right away.
				return false
			}
		}
	}
	return f
}

// TagMatch selects tags for filtering
type TagMatch func(s *Sample) bool

// FilterSamplesByTag removes all samples from the profile, except
// those that match focus and do not match the ignore regular
// expression.
func (p *Profile) FilterSamplesByTag(focus, ignore TagMatch) (fm, im bool) {
	samples := make([]*Sample, 0, len(p.Sample))
	for _, s := range p.Sample {
		focused, ignored := true, false
		if focus != nil {
			focused = focus(s)
		}
		if ignore != nil {
			ignored = ignore(s)
		}
		fm = fm || focused
		im = im || ignored
		if focused && !ignored {
			samples = append(samples, s)
		}
	}
	p.Sample = samples
	return
}
 07070100000712000081A4000000000000000000000001645E367C000007A2000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/google/pprof/profile/index.go   // Copyright 2016 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package profile

import (
	"fmt"
	"strconv"
	"strings"
)

// SampleIndexByName returns the appropriate index for a value of sample index.
// If numeric, it returns the number, otherwise it looks up the text in the
// profile sample types.
func (p *Profile) SampleIndexByName(sampleIndex string) (int, error) {
	if sampleIndex == "" {
		if dst := p.DefaultSampleType; dst != "" {
			for i, t := range sampleTypes(p) {
				if t == dst {
					return i, nil
				}
			}
		}
		// By default select the last sample value
		return len(p.SampleType) - 1, nil
	}
	if i, err := strconv.Atoi(sampleIndex); err == nil {
		if i < 0 || i >= len(p.SampleType) {
			return 0, fmt.Errorf("sample_index %s is outside the range [0..%d]", sampleIndex, len(p.SampleType)-1)
		}
		return i, nil
	}

	// Remove the inuse_ prefix to support legacy pprof options
	// "inuse_space" and "inuse_objects" for profiles containing types
	// "space" and "objects".
	noInuse := strings.TrimPrefix(sampleIndex, "inuse_")
	for i, t := range p.SampleType {
		if t.Type == sampleIndex || t.Type == noInuse {
			return i, nil
		}
	}

	return 0, fmt.Errorf("sample_index %q must be one of: %v", sampleIndex, sampleTypes(p))
}

func sampleTypes(p *Profile) []string {
	types := make([]string, len(p.SampleType))
	for i, t := range p.SampleType {
		types[i] = t.Type
	}
	return types
}
  07070100000713000081A4000000000000000000000001645E367C0000234A000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/google/pprof/profile/legacy_java_profile.go // Copyright 2014 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// This file implements parsers to convert java legacy profiles into
// the profile.proto format.

package profile

import (
	"bytes"
	"fmt"
	"io"
	"path/filepath"
	"regexp"
	"strconv"
	"strings"
)

var (
	attributeRx            = regexp.MustCompile(`([\w ]+)=([\w ]+)`)
	javaSampleRx           = regexp.MustCompile(` *(\d+) +(\d+) +@ +([ x0-9a-f]*)`)
	javaLocationRx         = regexp.MustCompile(`^\s*0x([[:xdigit:]]+)\s+(.*)\s*$`)
	javaLocationFileLineRx = regexp.MustCompile(`^(.*)\s+\((.+):(-?[[:digit:]]+)\)$`)
	javaLocationPathRx     = regexp.MustCompile(`^(.*)\s+\((.*)\)$`)
)

// javaCPUProfile returns a new Profile from profilez data.
// b is the profile bytes after the header, period is the profiling
// period, and parse is a function to parse 8-byte chunks from the
// profile in its native endianness.
func javaCPUProfile(b []byte, period int64, parse func(b []byte) (uint64, []byte)) (*Profile, error) {
	p := &Profile{
		Period:     period * 1000,
		PeriodType: &ValueType{Type: "cpu", Unit: "nanoseconds"},
		SampleType: []*ValueType{{Type: "samples", Unit: "count"}, {Type: "cpu", Unit: "nanoseconds"}},
	}
	var err error
	var locs map[uint64]*Location
	if b, locs, err = parseCPUSamples(b, parse, false, p); err != nil {
		return nil, err
	}

	if err = parseJavaLocations(b, locs, p); err != nil {
		return nil, err
	}

	// Strip out addresses for better merge.
	if err = p.Aggregate(true, true, true, true, false); err != nil {
		return nil, err
	}

	return p, nil
}

// parseJavaProfile returns a new profile from heapz or contentionz
// data. b is the profile bytes after the header.
func parseJavaProfile(b []byte) (*Profile, error) {
	h := bytes.SplitAfterN(b, []byte("\n"), 2)
	if len(h) < 2 {
		return nil, errUnrecognized
	}

	p := &Profile{
		PeriodType: &ValueType{},
	}
	header := string(bytes.TrimSpace(h[0]))

	var err error
	var pType string
	switch header {
	case "--- heapz 1 ---":
		pType = "heap"
	case "--- contentionz 1 ---":
		pType = "contention"
	default:
		return nil, errUnrecognized
	}

	if b, err = parseJavaHeader(pType, h[1], p); err != nil {
		return nil, err
	}
	var locs map[uint64]*Location
	if b, locs, err = parseJavaSamples(pType, b, p); err != nil {
		return nil, err
	}
	if err = parseJavaLocations(b, locs, p); err != nil {
		return nil, err
	}

	// Strip out addresses for better merge.
	if err = p.Aggregate(true, true, true, true, false); err != nil {
		return nil, err
	}

	return p, nil
}

// parseJavaHeader parses the attribute section on a java profile and
// populates a profile. Returns the remainder of the buffer after all
// attributes.
func parseJavaHeader(pType string, b []byte, p *Profile) ([]byte, error) {
	nextNewLine := bytes.IndexByte(b, byte('\n'))
	for nextNewLine != -1 {
		line := string(bytes.TrimSpace(b[0:nextNewLine]))
		if line != "" {
			h := attributeRx.FindStringSubmatch(line)
			if h == nil {
				// Not a valid attribute, exit.
				return b, nil
			}

			attribute, value := strings.TrimSpace(h[1]), strings.TrimSpace(h[2])
			var err error
			switch pType + "/" + attribute {
			case "heap/format", "cpu/format", "contention/format":
				if value != "java" {
					return nil, errUnrecognized
				}
			case "heap/resolution":
				p.SampleType = []*ValueType{
					{Type: "inuse_objects", Unit: "count"},
					{Type: "inuse_space", Unit: value},
				}
			case "contention/resolution":
				p.SampleType = []*ValueType{
					{Type: "contentions", Unit: "count"},
					{Type: "delay", Unit: value},
				}
			case "contention/sampling period":
				p.PeriodType = &ValueType{
					Type: "contentions", Unit: "count",
				}
				if p.Period, err = strconv.ParseInt(value, 0, 64); err != nil {
					return nil, fmt.Errorf("failed to parse attribute %s: %v", line, err)
				}
			case "contention/ms since reset":
				millis, err := strconv.ParseInt(value, 0, 64)
				if err != nil {
					return nil, fmt.Errorf("failed to parse attribute %s: %v", line, err)
				}
				p.DurationNanos = millis * 1000 * 1000
			default:
				return nil, errUnrecognized
			}
		}
		// Grab next line.
		b = b[nextNewLine+1:]
		nextNewLine = bytes.IndexByte(b, byte('\n'))
	}
	return b, nil
}

// parseJavaSamples parses the samples from a java profile and
// populates the Samples in a profile. Returns the remainder of the
// buffer after the samples.
func parseJavaSamples(pType string, b []byte, p *Profile) ([]byte, map[uint64]*Location, error) {
	nextNewLine := bytes.IndexByte(b, byte('\n'))
	locs := make(map[uint64]*Location)
	for nextNewLine != -1 {
		line := string(bytes.TrimSpace(b[0:nextNewLine]))
		if line != "" {
			sample := javaSampleRx.FindStringSubmatch(line)
			if sample == nil {
				// Not a valid sample, exit.
				return b, locs, nil
			}

			// Java profiles have data/fields inverted compared to other
			// profile types.
			var err error
			value1, value2, value3 := sample[2], sample[1], sample[3]
			addrs, err := parseHexAddresses(value3)
			if err != nil {
				return nil, nil, fmt.Errorf("malformed sample: %s: %v", line, err)
			}

			var sloc []*Location
			for _, addr := range addrs {
				loc := locs[addr]
				if locs[addr] == nil {
					loc = &Location{
						Address: addr,
					}
					p.Location = append(p.Location, loc)
					locs[addr] = loc
				}
				sloc = append(sloc, loc)
			}
			s := &Sample{
				Value:    make([]int64, 2),
				Location: sloc,
			}

			if s.Value[0], err = strconv.ParseInt(value1, 0, 64); err != nil {
				return nil, nil, fmt.Errorf("parsing sample %s: %v", line, err)
			}
			if s.Value[1], err = strconv.ParseInt(value2, 0, 64); err != nil {
				return nil, nil, fmt.Errorf("parsing sample %s: %v", line, err)
			}

			switch pType {
			case "heap":
				const javaHeapzSamplingRate = 524288 // 512K
				if s.Value[0] == 0 {
					return nil, nil, fmt.Errorf("parsing sample %s: second value must be non-zero", line)
				}
				s.NumLabel = map[string][]int64{"bytes": {s.Value[1] / s.Value[0]}}
				s.Value[0], s.Value[1] = scaleHeapSample(s.Value[0], s.Value[1], javaHeapzSamplingRate)
			case "contention":
				if period := p.Period; period != 0 {
					s.Value[0] = s.Value[0] * p.Period
					s.Value[1] = s.Value[1] * p.Period
				}
			}
			p.Sample = append(p.Sample, s)
		}
		// Grab next line.
		b = b[nextNewLine+1:]
		nextNewLine = bytes.IndexByte(b, byte('\n'))
	}
	return b, locs, nil
}

// parseJavaLocations parses the location information in a java
// profile and populates the Locations in a profile. It uses the
// location addresses from the profile as both the ID of each
// location.
func parseJavaLocations(b []byte, locs map[uint64]*Location, p *Profile) error {
	r := bytes.NewBuffer(b)
	fns := make(map[string]*Function)
	for {
		line, err := r.ReadString('\n')
		if err != nil {
			if err != io.EOF {
				return err
			}
			if line == "" {
				break
			}
		}

		if line = strings.TrimSpace(line); line == "" {
			continue
		}

		jloc := javaLocationRx.FindStringSubmatch(line)
		if len(jloc) != 3 {
			continue
		}
		addr, err := strconv.ParseUint(jloc[1], 16, 64)
		if err != nil {
			return fmt.Errorf("parsing sample %s: %v", line, err)
		}
		loc := locs[addr]
		if loc == nil {
			// Unused/unseen
			continue
		}
		var lineFunc, lineFile string
		var lineNo int64

		if fileLine := javaLocationFileLineRx.FindStringSubmatch(jloc[2]); len(fileLine) == 4 {
			// Found a line of the form: "function (file:line)"
			lineFunc, lineFile = fileLine[1], fileLine[2]
			if n, err := strconv.ParseInt(fileLine[3], 10, 64); err == nil && n > 0 {
				lineNo = n
			}
		} else if filePath := javaLocationPathRx.FindStringSubmatch(jloc[2]); len(filePath) == 3 {
			// If there's not a file:line, it's a shared library path.
			// The path isn't interesting, so just give the .so.
			lineFunc, lineFile = filePath[1], filepath.Base(filePath[2])
		} else if strings.Contains(jloc[2], "generated stub/JIT") {
			lineFunc = "STUB"
		} else {
			// Treat whole line as the function name. This is used by the
			// java agent for internal states such as "GC" or "VM".
			lineFunc = jloc[2]
		}
		fn := fns[lineFunc]

		if fn == nil {
			fn = &Function{
				Name:       lineFunc,
				SystemName: lineFunc,
				Filename:   lineFile,
			}
			fns[lineFunc] = fn
			p.Function = append(p.Function, fn)
		}
		loc.Line = []Line{
			{
				Function: fn,
				Line:     lineNo,
			},
		}
		loc.Address = 0
	}

	p.remapLocationIDs()
	p.remapFunctionIDs()
	p.remapMappingIDs()

	return nil
}
  07070100000714000081A4000000000000000000000001645E367C0000834E000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/google/pprof/profile/legacy_profile.go  // Copyright 2014 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// This file implements parsers to convert legacy profiles into the
// profile.proto format.

package profile

import (
	"bufio"
	"bytes"
	"fmt"
	"io"
	"math"
	"regexp"
	"strconv"
	"strings"
)

var (
	countStartRE = regexp.MustCompile(`\A(\S+) profile: total \d+\z`)
	countRE      = regexp.MustCompile(`\A(\d+) @(( 0x[0-9a-f]+)+)\z`)

	heapHeaderRE = regexp.MustCompile(`heap profile: *(\d+): *(\d+) *\[ *(\d+): *(\d+) *\] *@ *(heap[_a-z0-9]*)/?(\d*)`)
	heapSampleRE = regexp.MustCompile(`(-?\d+): *(-?\d+) *\[ *(\d+): *(\d+) *] @([ x0-9a-f]*)`)

	contentionSampleRE = regexp.MustCompile(`(\d+) *(\d+) @([ x0-9a-f]*)`)

	hexNumberRE = regexp.MustCompile(`0x[0-9a-f]+`)

	growthHeaderRE = regexp.MustCompile(`heap profile: *(\d+): *(\d+) *\[ *(\d+): *(\d+) *\] @ growthz?`)

	fragmentationHeaderRE = regexp.MustCompile(`heap profile: *(\d+): *(\d+) *\[ *(\d+): *(\d+) *\] @ fragmentationz?`)

	threadzStartRE = regexp.MustCompile(`--- threadz \d+ ---`)
	threadStartRE  = regexp.MustCompile(`--- Thread ([[:xdigit:]]+) \(name: (.*)/(\d+)\) stack: ---`)

	// Regular expressions to parse process mappings. Support the format used by Linux /proc/.../maps and other tools.
	// Recommended format:
	// Start   End     object file name     offset(optional)   linker build id
	// 0x40000-0x80000 /path/to/binary      (@FF00)            abc123456
	spaceDigits = `\s+[[:digit:]]+`
	hexPair     = `\s+[[:xdigit:]]+:[[:xdigit:]]+`
	oSpace      = `\s*`
	// Capturing expressions.
	cHex           = `(?:0x)?([[:xdigit:]]+)`
	cHexRange      = `\s*` + cHex + `[\s-]?` + oSpace + cHex + `:?`
	cSpaceString   = `(?:\s+(\S+))?`
	cSpaceHex      = `(?:\s+([[:xdigit:]]+))?`
	cSpaceAtOffset = `(?:\s+\(@([[:xdigit:]]+)\))?`
	cPerm          = `(?:\s+([-rwxp]+))?`

	procMapsRE  = regexp.MustCompile(`^` + cHexRange + cPerm + cSpaceHex + hexPair + spaceDigits + cSpaceString)
	briefMapsRE = regexp.MustCompile(`^` + cHexRange + cPerm + cSpaceString + cSpaceAtOffset + cSpaceHex)

	// Regular expression to parse log data, of the form:
	// ... file:line] msg...
	logInfoRE = regexp.MustCompile(`^[^\[\]]+:[0-9]+]\s`)
)

func isSpaceOrComment(line string) bool {
	trimmed := strings.TrimSpace(line)
	return len(trimmed) == 0 || trimmed[0] == '#'
}

// parseGoCount parses a Go count profile (e.g., threadcreate or
// goroutine) and returns a new Profile.
func parseGoCount(b []byte) (*Profile, error) {
	s := bufio.NewScanner(bytes.NewBuffer(b))
	// Skip comments at the beginning of the file.
	for s.Scan() && isSpaceOrComment(s.Text()) {
	}
	if err := s.Err(); err != nil {
		return nil, err
	}
	m := countStartRE.FindStringSubmatch(s.Text())
	if m == nil {
		return nil, errUnrecognized
	}
	profileType := m[1]
	p := &Profile{
		PeriodType: &ValueType{Type: profileType, Unit: "count"},
		Period:     1,
		SampleType: []*ValueType{{Type: profileType, Unit: "count"}},
	}
	locations := make(map[uint64]*Location)
	for s.Scan() {
		line := s.Text()
		if isSpaceOrComment(line) {
			continue
		}
		if strings.HasPrefix(line, "---") {
			break
		}
		m := countRE.FindStringSubmatch(line)
		if m == nil {
			return nil, errMalformed
		}
		n, err := strconv.ParseInt(m[1], 0, 64)
		if err != nil {
			return nil, errMalformed
		}
		fields := strings.Fields(m[2])
		locs := make([]*Location, 0, len(fields))
		for _, stk := range fields {
			addr, err := strconv.ParseUint(stk, 0, 64)
			if err != nil {
				return nil, errMalformed
			}
			// Adjust all frames by -1 to land on top of the call instruction.
			addr--
			loc := locations[addr]
			if loc == nil {
				loc = &Location{
					Address: addr,
				}
				locations[addr] = loc
				p.Location = append(p.Location, loc)
			}
			locs = append(locs, loc)
		}
		p.Sample = append(p.Sample, &Sample{
			Location: locs,
			Value:    []int64{n},
		})
	}
	if err := s.Err(); err != nil {
		return nil, err
	}

	if err := parseAdditionalSections(s, p); err != nil {
		return nil, err
	}
	return p, nil
}

// remapLocationIDs ensures there is a location for each address
// referenced by a sample, and remaps the samples to point to the new
// location ids.
func (p *Profile) remapLocationIDs() {
	seen := make(map[*Location]bool, len(p.Location))
	var locs []*Location

	for _, s := range p.Sample {
		for _, l := range s.Location {
			if seen[l] {
				continue
			}
			l.ID = uint64(len(locs) + 1)
			locs = append(locs, l)
			seen[l] = true
		}
	}
	p.Location = locs
}

func (p *Profile) remapFunctionIDs() {
	seen := make(map[*Function]bool, len(p.Function))
	var fns []*Function

	for _, l := range p.Location {
		for _, ln := range l.Line {
			fn := ln.Function
			if fn == nil || seen[fn] {
				continue
			}
			fn.ID = uint64(len(fns) + 1)
			fns = append(fns, fn)
			seen[fn] = true
		}
	}
	p.Function = fns
}

// remapMappingIDs matches location addresses with existing mappings
// and updates them appropriately. This is O(N*M), if this ever shows
// up as a bottleneck, evaluate sorting the mappings and doing a
// binary search, which would make it O(N*log(M)).
func (p *Profile) remapMappingIDs() {
	// Some profile handlers will incorrectly set regions for the main
	// executable if its section is remapped. Fix them through heuristics.

	if len(p.Mapping) > 0 {
		// Remove the initial mapping if named '/anon_hugepage' and has a
		// consecutive adjacent mapping.
		if m := p.Mapping[0]; strings.HasPrefix(m.File, "/anon_hugepage") {
			if len(p.Mapping) > 1 && m.Limit == p.Mapping[1].Start {
				p.Mapping = p.Mapping[1:]
			}
		}
	}

	// Subtract the offset from the start of the main mapping if it
	// ends up at a recognizable start address.
	if len(p.Mapping) > 0 {
		const expectedStart = 0x400000
		if m := p.Mapping[0]; m.Start-m.Offset == expectedStart {
			m.Start = expectedStart
			m.Offset = 0
		}
	}

	// Associate each location with an address to the corresponding
	// mapping. Create fake mapping if a suitable one isn't found.
	var fake *Mapping
nextLocation:
	for _, l := range p.Location {
		a := l.Address
		if l.Mapping != nil || a == 0 {
			continue
		}
		for _, m := range p.Mapping {
			if m.Start <= a && a < m.Limit {
				l.Mapping = m
				continue nextLocation
			}
		}
		// Work around legacy handlers failing to encode the first
		// part of mappings split into adjacent ranges.
		for _, m := range p.Mapping {
			if m.Offset != 0 && m.Start-m.Offset <= a && a < m.Start {
				m.Start -= m.Offset
				m.Offset = 0
				l.Mapping = m
				continue nextLocation
			}
		}
		// If there is still no mapping, create a fake one.
		// This is important for the Go legacy handler, which produced
		// no mappings.
		if fake == nil {
			fake = &Mapping{
				ID:    1,
				Limit: ^uint64(0),
			}
			p.Mapping = append(p.Mapping, fake)
		}
		l.Mapping = fake
	}

	// Reset all mapping IDs.
	for i, m := range p.Mapping {
		m.ID = uint64(i + 1)
	}
}

var cpuInts = []func([]byte) (uint64, []byte){
	get32l,
	get32b,
	get64l,
	get64b,
}

func get32l(b []byte) (uint64, []byte) {
	if len(b) < 4 {
		return 0, nil
	}
	return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24, b[4:]
}

func get32b(b []byte) (uint64, []byte) {
	if len(b) < 4 {
		return 0, nil
	}
	return uint64(b[3]) | uint64(b[2])<<8 | uint64(b[1])<<16 | uint64(b[0])<<24, b[4:]
}

func get64l(b []byte) (uint64, []byte) {
	if len(b) < 8 {
		return 0, nil
	}
	return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56, b[8:]
}

func get64b(b []byte) (uint64, []byte) {
	if len(b) < 8 {
		return 0, nil
	}
	return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 | uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56, b[8:]
}

// parseCPU parses a profilez legacy profile and returns a newly
// populated Profile.
//
// The general format for profilez samples is a sequence of words in
// binary format. The first words are a header with the following data:
//
//	1st word -- 0
//	2nd word -- 3
//	3rd word -- 0 if a c++ application, 1 if a java application.
//	4th word -- Sampling period (in microseconds).
//	5th word -- Padding.
func parseCPU(b []byte) (*Profile, error) {
	var parse func([]byte) (uint64, []byte)
	var n1, n2, n3, n4, n5 uint64
	for _, parse = range cpuInts {
		var tmp []byte
		n1, tmp = parse(b)
		n2, tmp = parse(tmp)
		n3, tmp = parse(tmp)
		n4, tmp = parse(tmp)
		n5, tmp = parse(tmp)

		if tmp != nil && n1 == 0 && n2 == 3 && n3 == 0 && n4 > 0 && n5 == 0 {
			b = tmp
			return cpuProfile(b, int64(n4), parse)
		}
		if tmp != nil && n1 == 0 && n2 == 3 && n3 == 1 && n4 > 0 && n5 == 0 {
			b = tmp
			return javaCPUProfile(b, int64(n4), parse)
		}
	}
	return nil, errUnrecognized
}

// cpuProfile returns a new Profile from C++ profilez data.
// b is the profile bytes after the header, period is the profiling
// period, and parse is a function to parse 8-byte chunks from the
// profile in its native endianness.
func cpuProfile(b []byte, period int64, parse func(b []byte) (uint64, []byte)) (*Profile, error) {
	p := &Profile{
		Period:     period * 1000,
		PeriodType: &ValueType{Type: "cpu", Unit: "nanoseconds"},
		SampleType: []*ValueType{
			{Type: "samples", Unit: "count"},
			{Type: "cpu", Unit: "nanoseconds"},
		},
	}
	var err error
	if b, _, err = parseCPUSamples(b, parse, true, p); err != nil {
		return nil, err
	}

	// If *most* samples have the same second-to-the-bottom frame, it
	// strongly suggests that it is an uninteresting artifact of
	// measurement -- a stack frame pushed by the signal handler. The
	// bottom frame is always correct as it is picked up from the signal
	// structure, not the stack. Check if this is the case and if so,
	// remove.

	// Remove up to two frames.
	maxiter := 2
	// Allow one different sample for this many samples with the same
	// second-to-last frame.
	similarSamples := 32
	margin := len(p.Sample) / similarSamples

	for iter := 0; iter < maxiter; iter++ {
		addr1 := make(map[uint64]int)
		for _, s := range p.Sample {
			if len(s.Location) > 1 {
				a := s.Location[1].Address
				addr1[a] = addr1[a] + 1
			}
		}

		for id1, count := range addr1 {
			if count >= len(p.Sample)-margin {
				// Found uninteresting frame, strip it out from all samples
				for _, s := range p.Sample {
					if len(s.Location) > 1 && s.Location[1].Address == id1 {
						s.Location = append(s.Location[:1], s.Location[2:]...)
					}
				}
				break
			}
		}
	}

	if err := p.ParseMemoryMap(bytes.NewBuffer(b)); err != nil {
		return nil, err
	}

	cleanupDuplicateLocations(p)
	return p, nil
}

func cleanupDuplicateLocations(p *Profile) {
	// The profile handler may duplicate the leaf frame, because it gets
	// its address both from stack unwinding and from the signal
	// context. Detect this and delete the duplicate, which has been
	// adjusted by -1. The leaf address should not be adjusted as it is
	// not a call.
	for _, s := range p.Sample {
		if len(s.Location) > 1 && s.Location[0].Address == s.Location[1].Address+1 {
			s.Location = append(s.Location[:1], s.Location[2:]...)
		}
	}
}

// parseCPUSamples parses a collection of profilez samples from a
// profile.
//
// profilez samples are a repeated sequence of stack frames of the
// form:
//
//	1st word -- The number of times this stack was encountered.
//	2nd word -- The size of the stack (StackSize).
//	3rd word -- The first address on the stack.
//	...
//	StackSize + 2 -- The last address on the stack
//
// The last stack trace is of the form:
//
//	1st word -- 0
//	2nd word -- 1
//	3rd word -- 0
//
// Addresses from stack traces may point to the next instruction after
// each call. Optionally adjust by -1 to land somewhere on the actual
// call (except for the leaf, which is not a call).
func parseCPUSamples(b []byte, parse func(b []byte) (uint64, []byte), adjust bool, p *Profile) ([]byte, map[uint64]*Location, error) {
	locs := make(map[uint64]*Location)
	for len(b) > 0 {
		var count, nstk uint64
		count, b = parse(b)
		nstk, b = parse(b)
		if b == nil || nstk > uint64(len(b)/4) {
			return nil, nil, errUnrecognized
		}
		var sloc []*Location
		addrs := make([]uint64, nstk)
		for i := 0; i < int(nstk); i++ {
			addrs[i], b = parse(b)
		}

		if count == 0 && nstk == 1 && addrs[0] == 0 {
			// End of data marker
			break
		}
		for i, addr := range addrs {
			if adjust && i > 0 {
				addr--
			}
			loc := locs[addr]
			if loc == nil {
				loc = &Location{
					Address: addr,
				}
				locs[addr] = loc
				p.Location = append(p.Location, loc)
			}
			sloc = append(sloc, loc)
		}
		p.Sample = append(p.Sample,
			&Sample{
				Value:    []int64{int64(count), int64(count) * p.Period},
				Location: sloc,
			})
	}
	// Reached the end without finding the EOD marker.
	return b, locs, nil
}

// parseHeap parses a heapz legacy or a growthz profile and
// returns a newly populated Profile.
func parseHeap(b []byte) (p *Profile, err error) {
	s := bufio.NewScanner(bytes.NewBuffer(b))
	if !s.Scan() {
		if err := s.Err(); err != nil {
			return nil, err
		}
		return nil, errUnrecognized
	}
	p = &Profile{}

	sampling := ""
	hasAlloc := false

	line := s.Text()
	p.PeriodType = &ValueType{Type: "space", Unit: "bytes"}
	if header := heapHeaderRE.FindStringSubmatch(line); header != nil {
		sampling, p.Period, hasAlloc, err = parseHeapHeader(line)
		if err != nil {
			return nil, err
		}
	} else if header = growthHeaderRE.FindStringSubmatch(line); header != nil {
		p.Period = 1
	} else if header = fragmentationHeaderRE.FindStringSubmatch(line); header != nil {
		p.Period = 1
	} else {
		return nil, errUnrecognized
	}

	if hasAlloc {
		// Put alloc before inuse so that default pprof selection
		// will prefer inuse_space.
		p.SampleType = []*ValueType{
			{Type: "alloc_objects", Unit: "count"},
			{Type: "alloc_space", Unit: "bytes"},
			{Type: "inuse_objects", Unit: "count"},
			{Type: "inuse_space", Unit: "bytes"},
		}
	} else {
		p.SampleType = []*ValueType{
			{Type: "objects", Unit: "count"},
			{Type: "space", Unit: "bytes"},
		}
	}

	locs := make(map[uint64]*Location)
	for s.Scan() {
		line := strings.TrimSpace(s.Text())

		if isSpaceOrComment(line) {
			continue
		}

		if isMemoryMapSentinel(line) {
			break
		}

		value, blocksize, addrs, err := parseHeapSample(line, p.Period, sampling, hasAlloc)
		if err != nil {
			return nil, err
		}

		var sloc []*Location
		for _, addr := range addrs {
			// Addresses from stack traces point to the next instruction after
			// each call. Adjust by -1 to land somewhere on the actual call.
			addr--
			loc := locs[addr]
			if locs[addr] == nil {
				loc = &Location{
					Address: addr,
				}
				p.Location = append(p.Location, loc)
				locs[addr] = loc
			}
			sloc = append(sloc, loc)
		}

		p.Sample = append(p.Sample, &Sample{
			Value:    value,
			Location: sloc,
			NumLabel: map[string][]int64{"bytes": {blocksize}},
		})
	}
	if err := s.Err(); err != nil {
		return nil, err
	}
	if err := parseAdditionalSections(s, p); err != nil {
		return nil, err
	}
	return p, nil
}

func parseHeapHeader(line string) (sampling string, period int64, hasAlloc bool, err error) {
	header := heapHeaderRE.FindStringSubmatch(line)
	if header == nil {
		return "", 0, false, errUnrecognized
	}

	if len(header[6]) > 0 {
		if period, err = strconv.ParseInt(header[6], 10, 64); err != nil {
			return "", 0, false, errUnrecognized
		}
	}

	if (header[3] != header[1] && header[3] != "0") || (header[4] != header[2] && header[4] != "0") {
		hasAlloc = true
	}

	switch header[5] {
	case "heapz_v2", "heap_v2":
		return "v2", period, hasAlloc, nil
	case "heapprofile":
		return "", 1, hasAlloc, nil
	case "heap":
		return "v2", period / 2, hasAlloc, nil
	default:
		return "", 0, false, errUnrecognized
	}
}

// parseHeapSample parses a single row from a heap profile into a new Sample.
func parseHeapSample(line string, rate int64, sampling string, includeAlloc bool) (value []int64, blocksize int64, addrs []uint64, err error) {
	sampleData := heapSampleRE.FindStringSubmatch(line)
	if len(sampleData) != 6 {
		return nil, 0, nil, fmt.Errorf("unexpected number of sample values: got %d, want 6", len(sampleData))
	}

	// This is a local-scoped helper function to avoid needing to pass
	// around rate, sampling and many return parameters.
	addValues := func(countString, sizeString string, label string) error {
		count, err := strconv.ParseInt(countString, 10, 64)
		if err != nil {
			return fmt.Errorf("malformed sample: %s: %v", line, err)
		}
		size, err := strconv.ParseInt(sizeString, 10, 64)
		if err != nil {
			return fmt.Errorf("malformed sample: %s: %v", line, err)
		}
		if count == 0 && size != 0 {
			return fmt.Errorf("%s count was 0 but %s bytes was %d", label, label, size)
		}
		if count != 0 {
			blocksize = size / count
			if sampling == "v2" {
				count, size = scaleHeapSample(count, size, rate)
			}
		}
		value = append(value, count, size)
		return nil
	}

	if includeAlloc {
		if err := addValues(sampleData[3], sampleData[4], "allocation"); err != nil {
			return nil, 0, nil, err
		}
	}

	if err := addValues(sampleData[1], sampleData[2], "inuse"); err != nil {
		return nil, 0, nil, err
	}

	addrs, err = parseHexAddresses(sampleData[5])
	if err != nil {
		return nil, 0, nil, fmt.Errorf("malformed sample: %s: %v", line, err)
	}

	return value, blocksize, addrs, nil
}

// parseHexAddresses extracts hex numbers from a string, attempts to convert
// each to an unsigned 64-bit number and returns the resulting numbers as a
// slice, or an error if the string contains hex numbers which are too large to
// handle (which means a malformed profile).
func parseHexAddresses(s string) ([]uint64, error) {
	hexStrings := hexNumberRE.FindAllString(s, -1)
	var addrs []uint64
	for _, s := range hexStrings {
		if addr, err := strconv.ParseUint(s, 0, 64); err == nil {
			addrs = append(addrs, addr)
		} else {
			return nil, fmt.Errorf("failed to parse as hex 64-bit number: %s", s)
		}
	}
	return addrs, nil
}

// scaleHeapSample adjusts the data from a heapz Sample to
// account for its probability of appearing in the collected
// data. heapz profiles are a sampling of the memory allocations
// requests in a program. We estimate the unsampled value by dividing
// each collected sample by its probability of appearing in the
// profile. heapz v2 profiles rely on a poisson process to determine
// which samples to collect, based on the desired average collection
// rate R. The probability of a sample of size S to appear in that
// profile is 1-exp(-S/R).
func scaleHeapSample(count, size, rate int64) (int64, int64) {
	if count == 0 || size == 0 {
		return 0, 0
	}

	if rate <= 1 {
		// if rate==1 all samples were collected so no adjustment is needed.
		// if rate<1 treat as unknown and skip scaling.
		return count, size
	}

	avgSize := float64(size) / float64(count)
	scale := 1 / (1 - math.Exp(-avgSize/float64(rate)))

	return int64(float64(count) * scale), int64(float64(size) * scale)
}

// parseContention parses a mutex or contention profile. There are 2 cases:
// "--- contentionz " for legacy C++ profiles (and backwards compatibility)
// "--- mutex:" or "--- contention:" for profiles generated by the Go runtime.
func parseContention(b []byte) (*Profile, error) {
	s := bufio.NewScanner(bytes.NewBuffer(b))
	if !s.Scan() {
		if err := s.Err(); err != nil {
			return nil, err
		}
		return nil, errUnrecognized
	}

	switch l := s.Text(); {
	case strings.HasPrefix(l, "--- contentionz "):
	case strings.HasPrefix(l, "--- mutex:"):
	case strings.HasPrefix(l, "--- contention:"):
	default:
		return nil, errUnrecognized
	}

	p := &Profile{
		PeriodType: &ValueType{Type: "contentions", Unit: "count"},
		Period:     1,
		SampleType: []*ValueType{
			{Type: "contentions", Unit: "count"},
			{Type: "delay", Unit: "nanoseconds"},
		},
	}

	var cpuHz int64
	// Parse text of the form "attribute = value" before the samples.
	const delimiter = "="
	for s.Scan() {
		line := s.Text()
		if line = strings.TrimSpace(line); isSpaceOrComment(line) {
			continue
		}
		if strings.HasPrefix(line, "---") {
			break
		}
		attr := strings.SplitN(line, delimiter, 2)
		if len(attr) != 2 {
			break
		}
		key, val := strings.TrimSpace(attr[0]), strings.TrimSpace(attr[1])
		var err error
		switch key {
		case "cycles/second":
			if cpuHz, err = strconv.ParseInt(val, 0, 64); err != nil {
				return nil, errUnrecognized
			}
		case "sampling period":
			if p.Period, err = strconv.ParseInt(val, 0, 64); err != nil {
				return nil, errUnrecognized
			}
		case "ms since reset":
			ms, err := strconv.ParseInt(val, 0, 64)
			if err != nil {
				return nil, errUnrecognized
			}
			p.DurationNanos = ms * 1000 * 1000
		case "format":
			// CPP contentionz profiles don't have format.
			return nil, errUnrecognized
		case "resolution":
			// CPP contentionz profiles don't have resolution.
			return nil, errUnrecognized
		case "discarded samples":
		default:
			return nil, errUnrecognized
		}
	}
	if err := s.Err(); err != nil {
		return nil, err
	}

	locs := make(map[uint64]*Location)
	for {
		line := strings.TrimSpace(s.Text())
		if strings.HasPrefix(line, "---") {
			break
		}
		if !isSpaceOrComment(line) {
			value, addrs, err := parseContentionSample(line, p.Period, cpuHz)
			if err != nil {
				return nil, err
			}
			var sloc []*Location
			for _, addr := range addrs {
				// Addresses from stack traces point to the next instruction after
				// each call. Adjust by -1 to land somewhere on the actual call.
				addr--
				loc := locs[addr]
				if locs[addr] == nil {
					loc = &Location{
						Address: addr,
					}
					p.Location = append(p.Location, loc)
					locs[addr] = loc
				}
				sloc = append(sloc, loc)
			}
			p.Sample = append(p.Sample, &Sample{
				Value:    value,
				Location: sloc,
			})
		}
		if !s.Scan() {
			break
		}
	}
	if err := s.Err(); err != nil {
		return nil, err
	}

	if err := parseAdditionalSections(s, p); err != nil {
		return nil, err
	}

	return p, nil
}

// parseContentionSample parses a single row from a contention profile
// into a new Sample.
func parseContentionSample(line string, period, cpuHz int64) (value []int64, addrs []uint64, err error) {
	sampleData := contentionSampleRE.FindStringSubmatch(line)
	if sampleData == nil {
		return nil, nil, errUnrecognized
	}

	v1, err := strconv.ParseInt(sampleData[1], 10, 64)
	if err != nil {
		return nil, nil, fmt.Errorf("malformed sample: %s: %v", line, err)
	}
	v2, err := strconv.ParseInt(sampleData[2], 10, 64)
	if err != nil {
		return nil, nil, fmt.Errorf("malformed sample: %s: %v", line, err)
	}

	// Unsample values if period and cpuHz are available.
	// - Delays are scaled to cycles and then to nanoseconds.
	// - Contentions are scaled to cycles.
	if period > 0 {
		if cpuHz > 0 {
			cpuGHz := float64(cpuHz) / 1e9
			v1 = int64(float64(v1) * float64(period) / cpuGHz)
		}
		v2 = v2 * period
	}

	value = []int64{v2, v1}
	addrs, err = parseHexAddresses(sampleData[3])
	if err != nil {
		return nil, nil, fmt.Errorf("malformed sample: %s: %v", line, err)
	}

	return value, addrs, nil
}

// parseThread parses a Threadz profile and returns a new Profile.
func parseThread(b []byte) (*Profile, error) {
	s := bufio.NewScanner(bytes.NewBuffer(b))
	// Skip past comments and empty lines seeking a real header.
	for s.Scan() && isSpaceOrComment(s.Text()) {
	}

	line := s.Text()
	if m := threadzStartRE.FindStringSubmatch(line); m != nil {
		// Advance over initial comments until first stack trace.
		for s.Scan() {
			if line = s.Text(); isMemoryMapSentinel(line) || strings.HasPrefix(line, "-") {
				break
			}
		}
	} else if t := threadStartRE.FindStringSubmatch(line); len(t) != 4 {
		return nil, errUnrecognized
	}

	p := &Profile{
		SampleType: []*ValueType{{Type: "thread", Unit: "count"}},
		PeriodType: &ValueType{Type: "thread", Unit: "count"},
		Period:     1,
	}

	locs := make(map[uint64]*Location)
	// Recognize each thread and populate profile samples.
	for !isMemoryMapSentinel(line) {
		if strings.HasPrefix(line, "---- no stack trace for") {
			break
		}
		if t := threadStartRE.FindStringSubmatch(line); len(t) != 4 {
			return nil, errUnrecognized
		}

		var addrs []uint64
		var err error
		line, addrs, err = parseThreadSample(s)
		if err != nil {
			return nil, err
		}
		if len(addrs) == 0 {
			// We got a --same as previous threads--. Bump counters.
			if len(p.Sample) > 0 {
				s := p.Sample[len(p.Sample)-1]
				s.Value[0]++
			}
			continue
		}

		var sloc []*Location
		for i, addr := range addrs {
			// Addresses from stack traces point to the next instruction after
			// each call. Adjust by -1 to land somewhere on the actual call
			// (except for the leaf, which is not a call).
			if i > 0 {
				addr--
			}
			loc := locs[addr]
			if locs[addr] == nil {
				loc = &Location{
					Address: addr,
				}
				p.Location = append(p.Location, loc)
				locs[addr] = loc
			}
			sloc = append(sloc, loc)
		}

		p.Sample = append(p.Sample, &Sample{
			Value:    []int64{1},
			Location: sloc,
		})
	}

	if err := parseAdditionalSections(s, p); err != nil {
		return nil, err
	}

	cleanupDuplicateLocations(p)
	return p, nil
}

// parseThreadSample parses a symbolized or unsymbolized stack trace.
// Returns the first line after the traceback, the sample (or nil if
// it hits a 'same-as-previous' marker) and an error.
func parseThreadSample(s *bufio.Scanner) (nextl string, addrs []uint64, err error) {
	var line string
	sameAsPrevious := false
	for s.Scan() {
		line = strings.TrimSpace(s.Text())
		if line == "" {
			continue
		}

		if strings.HasPrefix(line, "---") {
			break
		}
		if strings.Contains(line, "same as previous thread") {
			sameAsPrevious = true
			continue
		}

		curAddrs, err := parseHexAddresses(line)
		if err != nil {
			return "", nil, fmt.Errorf("malformed sample: %s: %v", line, err)
		}
		addrs = append(addrs, curAddrs...)
	}
	if err := s.Err(); err != nil {
		return "", nil, err
	}
	if sameAsPrevious {
		return line, nil, nil
	}
	return line, addrs, nil
}

// parseAdditionalSections parses any additional sections in the
// profile, ignoring any unrecognized sections.
func parseAdditionalSections(s *bufio.Scanner, p *Profile) error {
	for !isMemoryMapSentinel(s.Text()) && s.Scan() {
	}
	if err := s.Err(); err != nil {
		return err
	}
	return p.ParseMemoryMapFromScanner(s)
}

// ParseProcMaps parses a memory map in the format of /proc/self/maps.
// ParseMemoryMap should be called after setting on a profile to
// associate locations to the corresponding mapping based on their
// address.
func ParseProcMaps(rd io.Reader) ([]*Mapping, error) {
	s := bufio.NewScanner(rd)
	return parseProcMapsFromScanner(s)
}

func parseProcMapsFromScanner(s *bufio.Scanner) ([]*Mapping, error) {
	var mapping []*Mapping

	var attrs []string
	const delimiter = "="
	r := strings.NewReplacer()
	for s.Scan() {
		line := r.Replace(removeLoggingInfo(s.Text()))
		m, err := parseMappingEntry(line)
		if err != nil {
			if err == errUnrecognized {
				// Recognize assignments of the form: attr=value, and replace
				// $attr with value on subsequent mappings.
				if attr := strings.SplitN(line, delimiter, 2); len(attr) == 2 {
					attrs = append(attrs, "$"+strings.TrimSpace(attr[0]), strings.TrimSpace(attr[1]))
					r = strings.NewReplacer(attrs...)
				}
				// Ignore any unrecognized entries
				continue
			}
			return nil, err
		}
		if m == nil {
			continue
		}
		mapping = append(mapping, m)
	}
	if err := s.Err(); err != nil {
		return nil, err
	}
	return mapping, nil
}

// removeLoggingInfo detects and removes log prefix entries generated
// by the glog package. If no logging prefix is detected, the string
// is returned unmodified.
func removeLoggingInfo(line string) string {
	if match := logInfoRE.FindStringIndex(line); match != nil {
		return line[match[1]:]
	}
	return line
}

// ParseMemoryMap parses a memory map in the format of
// /proc/self/maps, and overrides the mappings in the current profile.
// It renumbers the samples and locations in the profile correspondingly.
func (p *Profile) ParseMemoryMap(rd io.Reader) error {
	return p.ParseMemoryMapFromScanner(bufio.NewScanner(rd))
}

// ParseMemoryMapFromScanner parses a memory map in the format of
// /proc/self/maps or a variety of legacy format, and overrides the
// mappings in the current profile.  It renumbers the samples and
// locations in the profile correspondingly.
func (p *Profile) ParseMemoryMapFromScanner(s *bufio.Scanner) error {
	mapping, err := parseProcMapsFromScanner(s)
	if err != nil {
		return err
	}
	p.Mapping = append(p.Mapping, mapping...)
	p.massageMappings()
	p.remapLocationIDs()
	p.remapFunctionIDs()
	p.remapMappingIDs()
	return nil
}

func parseMappingEntry(l string) (*Mapping, error) {
	var start, end, perm, file, offset, buildID string
	if me := procMapsRE.FindStringSubmatch(l); len(me) == 6 {
		start, end, perm, offset, file = me[1], me[2], me[3], me[4], me[5]
	} else if me := briefMapsRE.FindStringSubmatch(l); len(me) == 7 {
		start, end, perm, file, offset, buildID = me[1], me[2], me[3], me[4], me[5], me[6]
	} else {
		return nil, errUnrecognized
	}

	var err error
	mapping := &Mapping{
		File:    file,
		BuildID: buildID,
	}
	if perm != "" && !strings.Contains(perm, "x") {
		// Skip non-executable entries.
		return nil, nil
	}
	if mapping.Start, err = strconv.ParseUint(start, 16, 64); err != nil {
		return nil, errUnrecognized
	}
	if mapping.Limit, err = strconv.ParseUint(end, 16, 64); err != nil {
		return nil, errUnrecognized
	}
	if offset != "" {
		if mapping.Offset, err = strconv.ParseUint(offset, 16, 64); err != nil {
			return nil, errUnrecognized
		}
	}
	return mapping, nil
}

var memoryMapSentinels = []string{
	"--- Memory map: ---",
	"MAPPED_LIBRARIES:",
}

// isMemoryMapSentinel returns true if the string contains one of the
// known sentinels for memory map information.
func isMemoryMapSentinel(line string) bool {
	for _, s := range memoryMapSentinels {
		if strings.Contains(line, s) {
			return true
		}
	}
	return false
}

func (p *Profile) addLegacyFrameInfo() {
	switch {
	case isProfileType(p, heapzSampleTypes):
		p.DropFrames, p.KeepFrames = allocRxStr, allocSkipRxStr
	case isProfileType(p, contentionzSampleTypes):
		p.DropFrames, p.KeepFrames = lockRxStr, ""
	default:
		p.DropFrames, p.KeepFrames = cpuProfilerRxStr, ""
	}
}

var heapzSampleTypes = [][]string{
	{"allocations", "size"}, // early Go pprof profiles
	{"objects", "space"},
	{"inuse_objects", "inuse_space"},
	{"alloc_objects", "alloc_space"},
	{"alloc_objects", "alloc_space", "inuse_objects", "inuse_space"}, // Go pprof legacy profiles
}
var contentionzSampleTypes = [][]string{
	{"contentions", "delay"},
}

func isProfileType(p *Profile, types [][]string) bool {
	st := p.SampleType
nextType:
	for _, t := range types {
		if len(st) != len(t) {
			continue
		}

		for i := range st {
			if st[i].Type != t[i] {
				continue nextType
			}
		}
		return true
	}
	return false
}

var allocRxStr = strings.Join([]string{
	// POSIX entry points.
	`calloc`,
	`cfree`,
	`malloc`,
	`free`,
	`memalign`,
	`do_memalign`,
	`(__)?posix_memalign`,
	`pvalloc`,
	`valloc`,
	`realloc`,

	// TC malloc.
	`tcmalloc::.*`,
	`tc_calloc`,
	`tc_cfree`,
	`tc_malloc`,
	`tc_free`,
	`tc_memalign`,
	`tc_posix_memalign`,
	`tc_pvalloc`,
	`tc_valloc`,
	`tc_realloc`,
	`tc_new`,
	`tc_delete`,
	`tc_newarray`,
	`tc_deletearray`,
	`tc_new_nothrow`,
	`tc_newarray_nothrow`,

	// Memory-allocation routines on OS X.
	`malloc_zone_malloc`,
	`malloc_zone_calloc`,
	`malloc_zone_valloc`,
	`malloc_zone_realloc`,
	`malloc_zone_memalign`,
	`malloc_zone_free`,

	// Go runtime
	`runtime\..*`,

	// Other misc. memory allocation routines
	`BaseArena::.*`,
	`(::)?do_malloc_no_errno`,
	`(::)?do_malloc_pages`,
	`(::)?do_malloc`,
	`DoSampledAllocation`,
	`MallocedMemBlock::MallocedMemBlock`,
	`_M_allocate`,
	`__builtin_(vec_)?delete`,
	`__builtin_(vec_)?new`,
	`__gnu_cxx::new_allocator::allocate`,
	`__libc_malloc`,
	`__malloc_alloc_template::allocate`,
	`allocate`,
	`cpp_alloc`,
	`operator new(\[\])?`,
	`simple_alloc::allocate`,
}, `|`)

var allocSkipRxStr = strings.Join([]string{
	// Preserve Go runtime frames that appear in the middle/bottom of
	// the stack.
	`runtime\.panic`,
	`runtime\.reflectcall`,
	`runtime\.call[0-9]*`,
}, `|`)

var cpuProfilerRxStr = strings.Join([]string{
	`ProfileData::Add`,
	`ProfileData::prof_handler`,
	`CpuProfiler::prof_handler`,
	`__pthread_sighandler`,
	`__restore`,
}, `|`)

var lockRxStr = strings.Join([]string{
	`RecordLockProfileData`,
	`(base::)?RecordLockProfileData.*`,
	`(base::)?SubmitMutexProfileData.*`,
	`(base::)?SubmitSpinLockProfileData.*`,
	`(base::Mutex::)?AwaitCommon.*`,
	`(base::Mutex::)?Unlock.*`,
	`(base::Mutex::)?UnlockSlow.*`,
	`(base::Mutex::)?ReaderUnlock.*`,
	`(base::MutexLock::)?~MutexLock.*`,
	`(Mutex::)?AwaitCommon.*`,
	`(Mutex::)?Unlock.*`,
	`(Mutex::)?UnlockSlow.*`,
	`(Mutex::)?ReaderUnlock.*`,
	`(MutexLock::)?~MutexLock.*`,
	`(SpinLock::)?Unlock.*`,
	`(SpinLock::)?SlowUnlock.*`,
	`(SpinLockHolder::)?~SpinLockHolder.*`,
}, `|`)
  07070100000715000081A4000000000000000000000001645E367C000043A5000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/google/pprof/profile/merge.go   // Copyright 2014 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package profile

import (
	"encoding/binary"
	"fmt"
	"sort"
	"strconv"
	"strings"
)

// Compact performs garbage collection on a profile to remove any
// unreferenced fields. This is useful to reduce the size of a profile
// after samples or locations have been removed.
func (p *Profile) Compact() *Profile {
	p, _ = Merge([]*Profile{p})
	return p
}

// Merge merges all the profiles in profs into a single Profile.
// Returns a new profile independent of the input profiles. The merged
// profile is compacted to eliminate unused samples, locations,
// functions and mappings. Profiles must have identical profile sample
// and period types or the merge will fail. profile.Period of the
// resulting profile will be the maximum of all profiles, and
// profile.TimeNanos will be the earliest nonzero one. Merges are
// associative with the caveat of the first profile having some
// specialization in how headers are combined. There may be other
// subtleties now or in the future regarding associativity.
func Merge(srcs []*Profile) (*Profile, error) {
	if len(srcs) == 0 {
		return nil, fmt.Errorf("no profiles to merge")
	}
	p, err := combineHeaders(srcs)
	if err != nil {
		return nil, err
	}

	pm := &profileMerger{
		p:         p,
		samples:   make(map[sampleKey]*Sample, len(srcs[0].Sample)),
		locations: make(map[locationKey]*Location, len(srcs[0].Location)),
		functions: make(map[functionKey]*Function, len(srcs[0].Function)),
		mappings:  make(map[mappingKey]*Mapping, len(srcs[0].Mapping)),
	}

	for _, src := range srcs {
		// Clear the profile-specific hash tables
		pm.locationsByID = makeLocationIDMap(len(src.Location))
		pm.functionsByID = make(map[uint64]*Function, len(src.Function))
		pm.mappingsByID = make(map[uint64]mapInfo, len(src.Mapping))

		if len(pm.mappings) == 0 && len(src.Mapping) > 0 {
			// The Mapping list has the property that the first mapping
			// represents the main binary. Take the first Mapping we see,
			// otherwise the operations below will add mappings in an
			// arbitrary order.
			pm.mapMapping(src.Mapping[0])
		}

		for _, s := range src.Sample {
			if !isZeroSample(s) {
				pm.mapSample(s)
			}
		}
	}

	for _, s := range p.Sample {
		if isZeroSample(s) {
			// If there are any zero samples, re-merge the profile to GC
			// them.
			return Merge([]*Profile{p})
		}
	}

	return p, nil
}

// Normalize normalizes the source profile by multiplying each value in profile by the
// ratio of the sum of the base profile's values of that sample type to the sum of the
// source profile's value of that sample type.
func (p *Profile) Normalize(pb *Profile) error {

	if err := p.compatible(pb); err != nil {
		return err
	}

	baseVals := make([]int64, len(p.SampleType))
	for _, s := range pb.Sample {
		for i, v := range s.Value {
			baseVals[i] += v
		}
	}

	srcVals := make([]int64, len(p.SampleType))
	for _, s := range p.Sample {
		for i, v := range s.Value {
			srcVals[i] += v
		}
	}

	normScale := make([]float64, len(baseVals))
	for i := range baseVals {
		if srcVals[i] == 0 {
			normScale[i] = 0.0
		} else {
			normScale[i] = float64(baseVals[i]) / float64(srcVals[i])
		}
	}
	p.ScaleN(normScale)
	return nil
}

func isZeroSample(s *Sample) bool {
	for _, v := range s.Value {
		if v != 0 {
			return false
		}
	}
	return true
}

type profileMerger struct {
	p *Profile

	// Memoization tables within a profile.
	locationsByID locationIDMap
	functionsByID map[uint64]*Function
	mappingsByID  map[uint64]mapInfo

	// Memoization tables for profile entities.
	samples   map[sampleKey]*Sample
	locations map[locationKey]*Location
	functions map[functionKey]*Function
	mappings  map[mappingKey]*Mapping
}

type mapInfo struct {
	m      *Mapping
	offset int64
}

func (pm *profileMerger) mapSample(src *Sample) *Sample {
	// Check memoization table
	k := pm.sampleKey(src)
	if ss, ok := pm.samples[k]; ok {
		for i, v := range src.Value {
			ss.Value[i] += v
		}
		return ss
	}

	// Make new sample.
	s := &Sample{
		Location: make([]*Location, len(src.Location)),
		Value:    make([]int64, len(src.Value)),
		Label:    make(map[string][]string, len(src.Label)),
		NumLabel: make(map[string][]int64, len(src.NumLabel)),
		NumUnit:  make(map[string][]string, len(src.NumLabel)),
	}
	for i, l := range src.Location {
		s.Location[i] = pm.mapLocation(l)
	}
	for k, v := range src.Label {
		vv := make([]string, len(v))
		copy(vv, v)
		s.Label[k] = vv
	}
	for k, v := range src.NumLabel {
		u := src.NumUnit[k]
		vv := make([]int64, len(v))
		uu := make([]string, len(u))
		copy(vv, v)
		copy(uu, u)
		s.NumLabel[k] = vv
		s.NumUnit[k] = uu
	}
	copy(s.Value, src.Value)
	pm.samples[k] = s
	pm.p.Sample = append(pm.p.Sample, s)
	return s
}

func (pm *profileMerger) sampleKey(sample *Sample) sampleKey {
	// Accumulate contents into a string.
	var buf strings.Builder
	buf.Grow(64) // Heuristic to avoid extra allocs

	// encode a number
	putNumber := func(v uint64) {
		var num [binary.MaxVarintLen64]byte
		n := binary.PutUvarint(num[:], v)
		buf.Write(num[:n])
	}

	// encode a string prefixed with its length.
	putDelimitedString := func(s string) {
		putNumber(uint64(len(s)))
		buf.WriteString(s)
	}

	for _, l := range sample.Location {
		// Get the location in the merged profile, which may have a different ID.
		if loc := pm.mapLocation(l); loc != nil {
			putNumber(loc.ID)
		}
	}
	putNumber(0) // Delimiter

	for _, l := range sortedKeys1(sample.Label) {
		putDelimitedString(l)
		values := sample.Label[l]
		putNumber(uint64(len(values)))
		for _, v := range values {
			putDelimitedString(v)
		}
	}

	for _, l := range sortedKeys2(sample.NumLabel) {
		putDelimitedString(l)
		values := sample.NumLabel[l]
		putNumber(uint64(len(values)))
		for _, v := range values {
			putNumber(uint64(v))
		}
		units := sample.NumUnit[l]
		putNumber(uint64(len(units)))
		for _, v := range units {
			putDelimitedString(v)
		}
	}

	return sampleKey(buf.String())
}

type sampleKey string

// sortedKeys1 returns the sorted keys found in a string->[]string map.
//
// Note: this is currently non-generic since github pprof runs golint,
// which does not support generics. When that issue is fixed, it can
// be merged with sortedKeys2 and made into a generic function.
func sortedKeys1(m map[string][]string) []string {
	if len(m) == 0 {
		return nil
	}
	keys := make([]string, 0, len(m))
	for k := range m {
		keys = append(keys, k)
	}
	sort.Strings(keys)
	return keys
}

// sortedKeys2 returns the sorted keys found in a string->[]int64 map.
//
// Note: this is currently non-generic since github pprof runs golint,
// which does not support generics. When that issue is fixed, it can
// be merged with sortedKeys1 and made into a generic function.
func sortedKeys2(m map[string][]int64) []string {
	if len(m) == 0 {
		return nil
	}
	keys := make([]string, 0, len(m))
	for k := range m {
		keys = append(keys, k)
	}
	sort.Strings(keys)
	return keys
}

func (pm *profileMerger) mapLocation(src *Location) *Location {
	if src == nil {
		return nil
	}

	if l := pm.locationsByID.get(src.ID); l != nil {
		return l
	}

	mi := pm.mapMapping(src.Mapping)
	l := &Location{
		ID:       uint64(len(pm.p.Location) + 1),
		Mapping:  mi.m,
		Address:  uint64(int64(src.Address) + mi.offset),
		Line:     make([]Line, len(src.Line)),
		IsFolded: src.IsFolded,
	}
	for i, ln := range src.Line {
		l.Line[i] = pm.mapLine(ln)
	}
	// Check memoization table. Must be done on the remapped location to
	// account for the remapped mapping ID.
	k := l.key()
	if ll, ok := pm.locations[k]; ok {
		pm.locationsByID.set(src.ID, ll)
		return ll
	}
	pm.locationsByID.set(src.ID, l)
	pm.locations[k] = l
	pm.p.Location = append(pm.p.Location, l)
	return l
}

// key generates locationKey to be used as a key for maps.
func (l *Location) key() locationKey {
	key := locationKey{
		addr:     l.Address,
		isFolded: l.IsFolded,
	}
	if l.Mapping != nil {
		// Normalizes address to handle address space randomization.
		key.addr -= l.Mapping.Start
		key.mappingID = l.Mapping.ID
	}
	lines := make([]string, len(l.Line)*2)
	for i, line := range l.Line {
		if line.Function != nil {
			lines[i*2] = strconv.FormatUint(line.Function.ID, 16)
		}
		lines[i*2+1] = strconv.FormatInt(line.Line, 16)
	}
	key.lines = strings.Join(lines, "|")
	return key
}

type locationKey struct {
	addr, mappingID uint64
	lines           string
	isFolded        bool
}

func (pm *profileMerger) mapMapping(src *Mapping) mapInfo {
	if src == nil {
		return mapInfo{}
	}

	if mi, ok := pm.mappingsByID[src.ID]; ok {
		return mi
	}

	// Check memoization tables.
	mk := src.key()
	if m, ok := pm.mappings[mk]; ok {
		mi := mapInfo{m, int64(m.Start) - int64(src.Start)}
		pm.mappingsByID[src.ID] = mi
		return mi
	}
	m := &Mapping{
		ID:                     uint64(len(pm.p.Mapping) + 1),
		Start:                  src.Start,
		Limit:                  src.Limit,
		Offset:                 src.Offset,
		File:                   src.File,
		KernelRelocationSymbol: src.KernelRelocationSymbol,
		BuildID:                src.BuildID,
		HasFunctions:           src.HasFunctions,
		HasFilenames:           src.HasFilenames,
		HasLineNumbers:         src.HasLineNumbers,
		HasInlineFrames:        src.HasInlineFrames,
	}
	pm.p.Mapping = append(pm.p.Mapping, m)

	// Update memoization tables.
	pm.mappings[mk] = m
	mi := mapInfo{m, 0}
	pm.mappingsByID[src.ID] = mi
	return mi
}

// key generates encoded strings of Mapping to be used as a key for
// maps.
func (m *Mapping) key() mappingKey {
	// Normalize addresses to handle address space randomization.
	// Round up to next 4K boundary to avoid minor discrepancies.
	const mapsizeRounding = 0x1000

	size := m.Limit - m.Start
	size = size + mapsizeRounding - 1
	size = size - (size % mapsizeRounding)
	key := mappingKey{
		size:   size,
		offset: m.Offset,
	}

	switch {
	case m.BuildID != "":
		key.buildIDOrFile = m.BuildID
	case m.File != "":
		key.buildIDOrFile = m.File
	default:
		// A mapping containing neither build ID nor file name is a fake mapping. A
		// key with empty buildIDOrFile is used for fake mappings so that they are
		// treated as the same mapping during merging.
	}
	return key
}

type mappingKey struct {
	size, offset  uint64
	buildIDOrFile string
}

func (pm *profileMerger) mapLine(src Line) Line {
	ln := Line{
		Function: pm.mapFunction(src.Function),
		Line:     src.Line,
	}
	return ln
}

func (pm *profileMerger) mapFunction(src *Function) *Function {
	if src == nil {
		return nil
	}
	if f, ok := pm.functionsByID[src.ID]; ok {
		return f
	}
	k := src.key()
	if f, ok := pm.functions[k]; ok {
		pm.functionsByID[src.ID] = f
		return f
	}
	f := &Function{
		ID:         uint64(len(pm.p.Function) + 1),
		Name:       src.Name,
		SystemName: src.SystemName,
		Filename:   src.Filename,
		StartLine:  src.StartLine,
	}
	pm.functions[k] = f
	pm.functionsByID[src.ID] = f
	pm.p.Function = append(pm.p.Function, f)
	return f
}

// key generates a struct to be used as a key for maps.
func (f *Function) key() functionKey {
	return functionKey{
		f.StartLine,
		f.Name,
		f.SystemName,
		f.Filename,
	}
}

type functionKey struct {
	startLine                  int64
	name, systemName, fileName string
}

// combineHeaders checks that all profiles can be merged and returns
// their combined profile.
func combineHeaders(srcs []*Profile) (*Profile, error) {
	for _, s := range srcs[1:] {
		if err := srcs[0].compatible(s); err != nil {
			return nil, err
		}
	}

	var timeNanos, durationNanos, period int64
	var comments []string
	seenComments := map[string]bool{}
	var defaultSampleType string
	for _, s := range srcs {
		if timeNanos == 0 || s.TimeNanos < timeNanos {
			timeNanos = s.TimeNanos
		}
		durationNanos += s.DurationNanos
		if period == 0 || period < s.Period {
			period = s.Period
		}
		for _, c := range s.Comments {
			if seen := seenComments[c]; !seen {
				comments = append(comments, c)
				seenComments[c] = true
			}
		}
		if defaultSampleType == "" {
			defaultSampleType = s.DefaultSampleType
		}
	}

	p := &Profile{
		SampleType: make([]*ValueType, len(srcs[0].SampleType)),

		DropFrames: srcs[0].DropFrames,
		KeepFrames: srcs[0].KeepFrames,

		TimeNanos:     timeNanos,
		DurationNanos: durationNanos,
		PeriodType:    srcs[0].PeriodType,
		Period:        period,

		Comments:          comments,
		DefaultSampleType: defaultSampleType,
	}
	copy(p.SampleType, srcs[0].SampleType)
	return p, nil
}

// compatible determines if two profiles can be compared/merged.
// returns nil if the profiles are compatible; otherwise an error with
// details on the incompatibility.
func (p *Profile) compatible(pb *Profile) error {
	if !equalValueType(p.PeriodType, pb.PeriodType) {
		return fmt.Errorf("incompatible period types %v and %v", p.PeriodType, pb.PeriodType)
	}

	if len(p.SampleType) != len(pb.SampleType) {
		return fmt.Errorf("incompatible sample types %v and %v", p.SampleType, pb.SampleType)
	}

	for i := range p.SampleType {
		if !equalValueType(p.SampleType[i], pb.SampleType[i]) {
			return fmt.Errorf("incompatible sample types %v and %v", p.SampleType, pb.SampleType)
		}
	}
	return nil
}

// equalValueType returns true if the two value types are semantically
// equal. It ignores the internal fields used during encode/decode.
func equalValueType(st1, st2 *ValueType) bool {
	return st1.Type == st2.Type && st1.Unit == st2.Unit
}

// locationIDMap is like a map[uint64]*Location, but provides efficiency for
// ids that are densely numbered, which is often the case.
type locationIDMap struct {
	dense  []*Location          // indexed by id for id < len(dense)
	sparse map[uint64]*Location // indexed by id for id >= len(dense)
}

func makeLocationIDMap(n int) locationIDMap {
	return locationIDMap{
		dense:  make([]*Location, n),
		sparse: map[uint64]*Location{},
	}
}

func (lm locationIDMap) get(id uint64) *Location {
	if id < uint64(len(lm.dense)) {
		return lm.dense[int(id)]
	}
	return lm.sparse[id]
}

func (lm locationIDMap) set(id uint64, loc *Location) {
	if id < uint64(len(lm.dense)) {
		lm.dense[id] = loc
		return
	}
	lm.sparse[id] = loc
}

// CompatibilizeSampleTypes makes profiles compatible to be compared/merged. It
// keeps sample types that appear in all profiles only and drops/reorders the
// sample types as necessary.
//
// In the case of sample types order is not the same for given profiles the
// order is derived from the first profile.
//
// Profiles are modified in-place.
//
// It returns an error if the sample type's intersection is empty.
func CompatibilizeSampleTypes(ps []*Profile) error {
	sTypes := commonSampleTypes(ps)
	if len(sTypes) == 0 {
		return fmt.Errorf("profiles have empty common sample type list")
	}
	for _, p := range ps {
		if err := compatibilizeSampleTypes(p, sTypes); err != nil {
			return err
		}
	}
	return nil
}

// commonSampleTypes returns sample types that appear in all profiles in the
// order how they ordered in the first profile.
func commonSampleTypes(ps []*Profile) []string {
	if len(ps) == 0 {
		return nil
	}
	sTypes := map[string]int{}
	for _, p := range ps {
		for _, st := range p.SampleType {
			sTypes[st.Type]++
		}
	}
	var res []string
	for _, st := range ps[0].SampleType {
		if sTypes[st.Type] == len(ps) {
			res = append(res, st.Type)
		}
	}
	return res
}

// compatibilizeSampleTypes drops sample types that are not present in sTypes
// list and reorder them if needed.
//
// It sets DefaultSampleType to sType[0] if it is not in sType list.
//
// It assumes that all sample types from the sTypes list are present in the
// given profile otherwise it returns an error.
func compatibilizeSampleTypes(p *Profile, sTypes []string) error {
	if len(sTypes) == 0 {
		return fmt.Errorf("sample type list is empty")
	}
	defaultSampleType := sTypes[0]
	reMap, needToModify := make([]int, len(sTypes)), false
	for i, st := range sTypes {
		if st == p.DefaultSampleType {
			defaultSampleType = p.DefaultSampleType
		}
		idx := searchValueType(p.SampleType, st)
		if idx < 0 {
			return fmt.Errorf("%q sample type is not found in profile", st)
		}
		reMap[i] = idx
		if idx != i {
			needToModify = true
		}
	}
	if !needToModify && len(sTypes) == len(p.SampleType) {
		return nil
	}
	p.DefaultSampleType = defaultSampleType
	oldSampleTypes := p.SampleType
	p.SampleType = make([]*ValueType, len(sTypes))
	for i, idx := range reMap {
		p.SampleType[i] = oldSampleTypes[idx]
	}
	values := make([]int64, len(sTypes))
	for _, s := range p.Sample {
		for i, idx := range reMap {
			values[i] = s.Value[idx]
		}
		s.Value = s.Value[:len(values)]
		copy(s.Value, values)
	}
	return nil
}

func searchValueType(vts []*ValueType, s string) int {
	for i, vt := range vts {
		if vt.Type == s {
			return i
		}
	}
	return -1
}
   07070100000716000081A4000000000000000000000001645E367C00005862000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/google/pprof/profile/profile.go // Copyright 2014 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package profile provides a representation of profile.proto and
// methods to encode/decode profiles in this format.
package profile

import (
	"bytes"
	"compress/gzip"
	"fmt"
	"io"
	"math"
	"path/filepath"
	"regexp"
	"sort"
	"strings"
	"sync"
	"time"
)

// Profile is an in-memory representation of profile.proto.
type Profile struct {
	SampleType        []*ValueType
	DefaultSampleType string
	Sample            []*Sample
	Mapping           []*Mapping
	Location          []*Location
	Function          []*Function
	Comments          []string

	DropFrames string
	KeepFrames string

	TimeNanos     int64
	DurationNanos int64
	PeriodType    *ValueType
	Period        int64

	// The following fields are modified during encoding and copying,
	// so are protected by a Mutex.
	encodeMu sync.Mutex

	commentX           []int64
	dropFramesX        int64
	keepFramesX        int64
	stringTable        []string
	defaultSampleTypeX int64
}

// ValueType corresponds to Profile.ValueType
type ValueType struct {
	Type string // cpu, wall, inuse_space, etc
	Unit string // seconds, nanoseconds, bytes, etc

	typeX int64
	unitX int64
}

// Sample corresponds to Profile.Sample
type Sample struct {
	Location []*Location
	Value    []int64
	// Label is a per-label-key map to values for string labels.
	//
	// In general, having multiple values for the given label key is strongly
	// discouraged - see docs for the sample label field in profile.proto.  The
	// main reason this unlikely state is tracked here is to make the
	// decoding->encoding roundtrip not lossy. But we expect that the value
	// slices present in this map are always of length 1.
	Label map[string][]string
	// NumLabel is a per-label-key map to values for numeric labels. See a note
	// above on handling multiple values for a label.
	NumLabel map[string][]int64
	// NumUnit is a per-label-key map to the unit names of corresponding numeric
	// label values. The unit info may be missing even if the label is in
	// NumLabel, see the docs in profile.proto for details. When the value is
	// slice is present and not nil, its length must be equal to the length of
	// the corresponding value slice in NumLabel.
	NumUnit map[string][]string

	locationIDX []uint64
	labelX      []label
}

// label corresponds to Profile.Label
type label struct {
	keyX int64
	// Exactly one of the two following values must be set
	strX int64
	numX int64 // Integer value for this label
	// can be set if numX has value
	unitX int64
}

// Mapping corresponds to Profile.Mapping
type Mapping struct {
	ID              uint64
	Start           uint64
	Limit           uint64
	Offset          uint64
	File            string
	BuildID         string
	HasFunctions    bool
	HasFilenames    bool
	HasLineNumbers  bool
	HasInlineFrames bool

	fileX    int64
	buildIDX int64

	// Name of the kernel relocation symbol ("_text" or "_stext"), extracted from File.
	// For linux kernel mappings generated by some tools, correct symbolization depends
	// on knowing which of the two possible relocation symbols was used for `Start`.
	// This is given to us as a suffix in `File` (e.g. "[kernel.kallsyms]_stext").
	//
	// Note, this public field is not persisted in the proto. For the purposes of
	// copying / merging / hashing profiles, it is considered subsumed by `File`.
	KernelRelocationSymbol string
}

// Location corresponds to Profile.Location
type Location struct {
	ID       uint64
	Mapping  *Mapping
	Address  uint64
	Line     []Line
	IsFolded bool

	mappingIDX uint64
}

// Line corresponds to Profile.Line
type Line struct {
	Function *Function
	Line     int64

	functionIDX uint64
}

// Function corresponds to Profile.Function
type Function struct {
	ID         uint64
	Name       string
	SystemName string
	Filename   string
	StartLine  int64

	nameX       int64
	systemNameX int64
	filenameX   int64
}

// Parse parses a profile and checks for its validity. The input
// may be a gzip-compressed encoded protobuf or one of many legacy
// profile formats which may be unsupported in the future.
func Parse(r io.Reader) (*Profile, error) {
	data, err := io.ReadAll(r)
	if err != nil {
		return nil, err
	}
	return ParseData(data)
}

// ParseData parses a profile from a buffer and checks for its
// validity.
func ParseData(data []byte) (*Profile, error) {
	var p *Profile
	var err error
	if len(data) >= 2 && data[0] == 0x1f && data[1] == 0x8b {
		gz, err := gzip.NewReader(bytes.NewBuffer(data))
		if err == nil {
			data, err = io.ReadAll(gz)
		}
		if err != nil {
			return nil, fmt.Errorf("decompressing profile: %v", err)
		}
	}
	if p, err = ParseUncompressed(data); err != nil && err != errNoData && err != errConcatProfile {
		p, err = parseLegacy(data)
	}

	if err != nil {
		return nil, fmt.Errorf("parsing profile: %v", err)
	}

	if err := p.CheckValid(); err != nil {
		return nil, fmt.Errorf("malformed profile: %v", err)
	}
	return p, nil
}

var errUnrecognized = fmt.Errorf("unrecognized profile format")
var errMalformed = fmt.Errorf("malformed profile format")
var errNoData = fmt.Errorf("empty input file")
var errConcatProfile = fmt.Errorf("concatenated profiles detected")

func parseLegacy(data []byte) (*Profile, error) {
	parsers := []func([]byte) (*Profile, error){
		parseCPU,
		parseHeap,
		parseGoCount, // goroutine, threadcreate
		parseThread,
		parseContention,
		parseJavaProfile,
	}

	for _, parser := range parsers {
		p, err := parser(data)
		if err == nil {
			p.addLegacyFrameInfo()
			return p, nil
		}
		if err != errUnrecognized {
			return nil, err
		}
	}
	return nil, errUnrecognized
}

// ParseUncompressed parses an uncompressed protobuf into a profile.
func ParseUncompressed(data []byte) (*Profile, error) {
	if len(data) == 0 {
		return nil, errNoData
	}
	p := &Profile{}
	if err := unmarshal(data, p); err != nil {
		return nil, err
	}

	if err := p.postDecode(); err != nil {
		return nil, err
	}

	return p, nil
}

var libRx = regexp.MustCompile(`([.]so$|[.]so[._][0-9]+)`)

// massageMappings applies heuristic-based changes to the profile
// mappings to account for quirks of some environments.
func (p *Profile) massageMappings() {
	// Merge adjacent regions with matching names, checking that the offsets match
	if len(p.Mapping) > 1 {
		mappings := []*Mapping{p.Mapping[0]}
		for _, m := range p.Mapping[1:] {
			lm := mappings[len(mappings)-1]
			if adjacent(lm, m) {
				lm.Limit = m.Limit
				if m.File != "" {
					lm.File = m.File
				}
				if m.BuildID != "" {
					lm.BuildID = m.BuildID
				}
				p.updateLocationMapping(m, lm)
				continue
			}
			mappings = append(mappings, m)
		}
		p.Mapping = mappings
	}

	// Use heuristics to identify main binary and move it to the top of the list of mappings
	for i, m := range p.Mapping {
		file := strings.TrimSpace(strings.Replace(m.File, "(deleted)", "", -1))
		if len(file) == 0 {
			continue
		}
		if len(libRx.FindStringSubmatch(file)) > 0 {
			continue
		}
		if file[0] == '[' {
			continue
		}
		// Swap what we guess is main to position 0.
		p.Mapping[0], p.Mapping[i] = p.Mapping[i], p.Mapping[0]
		break
	}

	// Keep the mapping IDs neatly sorted
	for i, m := range p.Mapping {
		m.ID = uint64(i + 1)
	}
}

// adjacent returns whether two mapping entries represent the same
// mapping that has been split into two. Check that their addresses are adjacent,
// and if the offsets match, if they are available.
func adjacent(m1, m2 *Mapping) bool {
	if m1.File != "" && m2.File != "" {
		if m1.File != m2.File {
			return false
		}
	}
	if m1.BuildID != "" && m2.BuildID != "" {
		if m1.BuildID != m2.BuildID {
			return false
		}
	}
	if m1.Limit != m2.Start {
		return false
	}
	if m1.Offset != 0 && m2.Offset != 0 {
		offset := m1.Offset + (m1.Limit - m1.Start)
		if offset != m2.Offset {
			return false
		}
	}
	return true
}

func (p *Profile) updateLocationMapping(from, to *Mapping) {
	for _, l := range p.Location {
		if l.Mapping == from {
			l.Mapping = to
		}
	}
}

func serialize(p *Profile) []byte {
	p.encodeMu.Lock()
	p.preEncode()
	b := marshal(p)
	p.encodeMu.Unlock()
	return b
}

// Write writes the profile as a gzip-compressed marshaled protobuf.
func (p *Profile) Write(w io.Writer) error {
	zw := gzip.NewWriter(w)
	defer zw.Close()
	_, err := zw.Write(serialize(p))
	return err
}

// WriteUncompressed writes the profile as a marshaled protobuf.
func (p *Profile) WriteUncompressed(w io.Writer) error {
	_, err := w.Write(serialize(p))
	return err
}

// CheckValid tests whether the profile is valid. Checks include, but are
// not limited to:
//   - len(Profile.Sample[n].value) == len(Profile.value_unit)
//   - Sample.id has a corresponding Profile.Location
func (p *Profile) CheckValid() error {
	// Check that sample values are consistent
	sampleLen := len(p.SampleType)
	if sampleLen == 0 && len(p.Sample) != 0 {
		return fmt.Errorf("missing sample type information")
	}
	for _, s := range p.Sample {
		if s == nil {
			return fmt.Errorf("profile has nil sample")
		}
		if len(s.Value) != sampleLen {
			return fmt.Errorf("mismatch: sample has %d values vs. %d types", len(s.Value), len(p.SampleType))
		}
		for _, l := range s.Location {
			if l == nil {
				return fmt.Errorf("sample has nil location")
			}
		}
	}

	// Check that all mappings/locations/functions are in the tables
	// Check that there are no duplicate ids
	mappings := make(map[uint64]*Mapping, len(p.Mapping))
	for _, m := range p.Mapping {
		if m == nil {
			return fmt.Errorf("profile has nil mapping")
		}
		if m.ID == 0 {
			return fmt.Errorf("found mapping with reserved ID=0")
		}
		if mappings[m.ID] != nil {
			return fmt.Errorf("multiple mappings with same id: %d", m.ID)
		}
		mappings[m.ID] = m
	}
	functions := make(map[uint64]*Function, len(p.Function))
	for _, f := range p.Function {
		if f == nil {
			return fmt.Errorf("profile has nil function")
		}
		if f.ID == 0 {
			return fmt.Errorf("found function with reserved ID=0")
		}
		if functions[f.ID] != nil {
			return fmt.Errorf("multiple functions with same id: %d", f.ID)
		}
		functions[f.ID] = f
	}
	locations := make(map[uint64]*Location, len(p.Location))
	for _, l := range p.Location {
		if l == nil {
			return fmt.Errorf("profile has nil location")
		}
		if l.ID == 0 {
			return fmt.Errorf("found location with reserved id=0")
		}
		if locations[l.ID] != nil {
			return fmt.Errorf("multiple locations with same id: %d", l.ID)
		}
		locations[l.ID] = l
		if m := l.Mapping; m != nil {
			if m.ID == 0 || mappings[m.ID] != m {
				return fmt.Errorf("inconsistent mapping %p: %d", m, m.ID)
			}
		}
		for _, ln := range l.Line {
			f := ln.Function
			if f == nil {
				return fmt.Errorf("location id: %d has a line with nil function", l.ID)
			}
			if f.ID == 0 || functions[f.ID] != f {
				return fmt.Errorf("inconsistent function %p: %d", f, f.ID)
			}
		}
	}
	return nil
}

// Aggregate merges the locations in the profile into equivalence
// classes preserving the request attributes. It also updates the
// samples to point to the merged locations.
func (p *Profile) Aggregate(inlineFrame, function, filename, linenumber, address bool) error {
	for _, m := range p.Mapping {
		m.HasInlineFrames = m.HasInlineFrames && inlineFrame
		m.HasFunctions = m.HasFunctions && function
		m.HasFilenames = m.HasFilenames && filename
		m.HasLineNumbers = m.HasLineNumbers && linenumber
	}

	// Aggregate functions
	if !function || !filename {
		for _, f := range p.Function {
			if !function {
				f.Name = ""
				f.SystemName = ""
			}
			if !filename {
				f.Filename = ""
			}
		}
	}

	// Aggregate locations
	if !inlineFrame || !address || !linenumber {
		for _, l := range p.Location {
			if !inlineFrame && len(l.Line) > 1 {
				l.Line = l.Line[len(l.Line)-1:]
			}
			if !linenumber {
				for i := range l.Line {
					l.Line[i].Line = 0
				}
			}
			if !address {
				l.Address = 0
			}
		}
	}

	return p.CheckValid()
}

// NumLabelUnits returns a map of numeric label keys to the units
// associated with those keys and a map of those keys to any units
// that were encountered but not used.
// Unit for a given key is the first encountered unit for that key. If multiple
// units are encountered for values paired with a particular key, then the first
// unit encountered is used and all other units are returned in sorted order
// in map of ignored units.
// If no units are encountered for a particular key, the unit is then inferred
// based on the key.
func (p *Profile) NumLabelUnits() (map[string]string, map[string][]string) {
	numLabelUnits := map[string]string{}
	ignoredUnits := map[string]map[string]bool{}
	encounteredKeys := map[string]bool{}

	// Determine units based on numeric tags for each sample.
	for _, s := range p.Sample {
		for k := range s.NumLabel {
			encounteredKeys[k] = true
			for _, unit := range s.NumUnit[k] {
				if unit == "" {
					continue
				}
				if wantUnit, ok := numLabelUnits[k]; !ok {
					numLabelUnits[k] = unit
				} else if wantUnit != unit {
					if v, ok := ignoredUnits[k]; ok {
						v[unit] = true
					} else {
						ignoredUnits[k] = map[string]bool{unit: true}
					}
				}
			}
		}
	}
	// Infer units for keys without any units associated with
	// numeric tag values.
	for key := range encounteredKeys {
		unit := numLabelUnits[key]
		if unit == "" {
			switch key {
			case "alignment", "request":
				numLabelUnits[key] = "bytes"
			default:
				numLabelUnits[key] = key
			}
		}
	}

	// Copy ignored units into more readable format
	unitsIgnored := make(map[string][]string, len(ignoredUnits))
	for key, values := range ignoredUnits {
		units := make([]string, len(values))
		i := 0
		for unit := range values {
			units[i] = unit
			i++
		}
		sort.Strings(units)
		unitsIgnored[key] = units
	}

	return numLabelUnits, unitsIgnored
}

// String dumps a text representation of a profile. Intended mainly
// for debugging purposes.
func (p *Profile) String() string {
	ss := make([]string, 0, len(p.Comments)+len(p.Sample)+len(p.Mapping)+len(p.Location))
	for _, c := range p.Comments {
		ss = append(ss, "Comment: "+c)
	}
	if pt := p.PeriodType; pt != nil {
		ss = append(ss, fmt.Sprintf("PeriodType: %s %s", pt.Type, pt.Unit))
	}
	ss = append(ss, fmt.Sprintf("Period: %d", p.Period))
	if p.TimeNanos != 0 {
		ss = append(ss, fmt.Sprintf("Time: %v", time.Unix(0, p.TimeNanos)))
	}
	if p.DurationNanos != 0 {
		ss = append(ss, fmt.Sprintf("Duration: %.4v", time.Duration(p.DurationNanos)))
	}

	ss = append(ss, "Samples:")
	var sh1 string
	for _, s := range p.SampleType {
		dflt := ""
		if s.Type == p.DefaultSampleType {
			dflt = "[dflt]"
		}
		sh1 = sh1 + fmt.Sprintf("%s/%s%s ", s.Type, s.Unit, dflt)
	}
	ss = append(ss, strings.TrimSpace(sh1))
	for _, s := range p.Sample {
		ss = append(ss, s.string())
	}

	ss = append(ss, "Locations")
	for _, l := range p.Location {
		ss = append(ss, l.string())
	}

	ss = append(ss, "Mappings")
	for _, m := range p.Mapping {
		ss = append(ss, m.string())
	}

	return strings.Join(ss, "\n") + "\n"
}

// string dumps a text representation of a mapping. Intended mainly
// for debugging purposes.
func (m *Mapping) string() string {
	bits := ""
	if m.HasFunctions {
		bits = bits + "[FN]"
	}
	if m.HasFilenames {
		bits = bits + "[FL]"
	}
	if m.HasLineNumbers {
		bits = bits + "[LN]"
	}
	if m.HasInlineFrames {
		bits = bits + "[IN]"
	}
	return fmt.Sprintf("%d: %#x/%#x/%#x %s %s %s",
		m.ID,
		m.Start, m.Limit, m.Offset,
		m.File,
		m.BuildID,
		bits)
}

// string dumps a text representation of a location. Intended mainly
// for debugging purposes.
func (l *Location) string() string {
	ss := []string{}
	locStr := fmt.Sprintf("%6d: %#x ", l.ID, l.Address)
	if m := l.Mapping; m != nil {
		locStr = locStr + fmt.Sprintf("M=%d ", m.ID)
	}
	if l.IsFolded {
		locStr = locStr + "[F] "
	}
	if len(l.Line) == 0 {
		ss = append(ss, locStr)
	}
	for li := range l.Line {
		lnStr := "??"
		if fn := l.Line[li].Function; fn != nil {
			lnStr = fmt.Sprintf("%s %s:%d s=%d",
				fn.Name,
				fn.Filename,
				l.Line[li].Line,
				fn.StartLine)
			if fn.Name != fn.SystemName {
				lnStr = lnStr + "(" + fn.SystemName + ")"
			}
		}
		ss = append(ss, locStr+lnStr)
		// Do not print location details past the first line
		locStr = "             "
	}
	return strings.Join(ss, "\n")
}

// string dumps a text representation of a sample. Intended mainly
// for debugging purposes.
func (s *Sample) string() string {
	ss := []string{}
	var sv string
	for _, v := range s.Value {
		sv = fmt.Sprintf("%s %10d", sv, v)
	}
	sv = sv + ": "
	for _, l := range s.Location {
		sv = sv + fmt.Sprintf("%d ", l.ID)
	}
	ss = append(ss, sv)
	const labelHeader = "                "
	if len(s.Label) > 0 {
		ss = append(ss, labelHeader+labelsToString(s.Label))
	}
	if len(s.NumLabel) > 0 {
		ss = append(ss, labelHeader+numLabelsToString(s.NumLabel, s.NumUnit))
	}
	return strings.Join(ss, "\n")
}

// labelsToString returns a string representation of a
// map representing labels.
func labelsToString(labels map[string][]string) string {
	ls := []string{}
	for k, v := range labels {
		ls = append(ls, fmt.Sprintf("%s:%v", k, v))
	}
	sort.Strings(ls)
	return strings.Join(ls, " ")
}

// numLabelsToString returns a string representation of a map
// representing numeric labels.
func numLabelsToString(numLabels map[string][]int64, numUnits map[string][]string) string {
	ls := []string{}
	for k, v := range numLabels {
		units := numUnits[k]
		var labelString string
		if len(units) == len(v) {
			values := make([]string, len(v))
			for i, vv := range v {
				values[i] = fmt.Sprintf("%d %s", vv, units[i])
			}
			labelString = fmt.Sprintf("%s:%v", k, values)
		} else {
			labelString = fmt.Sprintf("%s:%v", k, v)
		}
		ls = append(ls, labelString)
	}
	sort.Strings(ls)
	return strings.Join(ls, " ")
}

// SetLabel sets the specified key to the specified value for all samples in the
// profile.
func (p *Profile) SetLabel(key string, value []string) {
	for _, sample := range p.Sample {
		if sample.Label == nil {
			sample.Label = map[string][]string{key: value}
		} else {
			sample.Label[key] = value
		}
	}
}

// RemoveLabel removes all labels associated with the specified key for all
// samples in the profile.
func (p *Profile) RemoveLabel(key string) {
	for _, sample := range p.Sample {
		delete(sample.Label, key)
	}
}

// HasLabel returns true if a sample has a label with indicated key and value.
func (s *Sample) HasLabel(key, value string) bool {
	for _, v := range s.Label[key] {
		if v == value {
			return true
		}
	}
	return false
}

// SetNumLabel sets the specified key to the specified value for all samples in the
// profile. "unit" is a slice that describes the units that each corresponding member
// of "values" is measured in (e.g. bytes or seconds).  If there is no relevant
// unit for a given value, that member of "unit" should be the empty string.
// "unit" must either have the same length as "value", or be nil.
func (p *Profile) SetNumLabel(key string, value []int64, unit []string) {
	for _, sample := range p.Sample {
		if sample.NumLabel == nil {
			sample.NumLabel = map[string][]int64{key: value}
		} else {
			sample.NumLabel[key] = value
		}
		if sample.NumUnit == nil {
			sample.NumUnit = map[string][]string{key: unit}
		} else {
			sample.NumUnit[key] = unit
		}
	}
}

// RemoveNumLabel removes all numerical labels associated with the specified key for all
// samples in the profile.
func (p *Profile) RemoveNumLabel(key string) {
	for _, sample := range p.Sample {
		delete(sample.NumLabel, key)
		delete(sample.NumUnit, key)
	}
}

// DiffBaseSample returns true if a sample belongs to the diff base and false
// otherwise.
func (s *Sample) DiffBaseSample() bool {
	return s.HasLabel("pprof::base", "true")
}

// Scale multiplies all sample values in a profile by a constant and keeps
// only samples that have at least one non-zero value.
func (p *Profile) Scale(ratio float64) {
	if ratio == 1 {
		return
	}
	ratios := make([]float64, len(p.SampleType))
	for i := range p.SampleType {
		ratios[i] = ratio
	}
	p.ScaleN(ratios)
}

// ScaleN multiplies each sample values in a sample by a different amount
// and keeps only samples that have at least one non-zero value.
func (p *Profile) ScaleN(ratios []float64) error {
	if len(p.SampleType) != len(ratios) {
		return fmt.Errorf("mismatched scale ratios, got %d, want %d", len(ratios), len(p.SampleType))
	}
	allOnes := true
	for _, r := range ratios {
		if r != 1 {
			allOnes = false
			break
		}
	}
	if allOnes {
		return nil
	}
	fillIdx := 0
	for _, s := range p.Sample {
		keepSample := false
		for i, v := range s.Value {
			if ratios[i] != 1 {
				val := int64(math.Round(float64(v) * ratios[i]))
				s.Value[i] = val
				keepSample = keepSample || val != 0
			}
		}
		if keepSample {
			p.Sample[fillIdx] = s
			fillIdx++
		}
	}
	p.Sample = p.Sample[:fillIdx]
	return nil
}

// HasFunctions determines if all locations in this profile have
// symbolized function information.
func (p *Profile) HasFunctions() bool {
	for _, l := range p.Location {
		if l.Mapping != nil && !l.Mapping.HasFunctions {
			return false
		}
	}
	return true
}

// HasFileLines determines if all locations in this profile have
// symbolized file and line number information.
func (p *Profile) HasFileLines() bool {
	for _, l := range p.Location {
		if l.Mapping != nil && (!l.Mapping.HasFilenames || !l.Mapping.HasLineNumbers) {
			return false
		}
	}
	return true
}

// Unsymbolizable returns true if a mapping points to a binary for which
// locations can't be symbolized in principle, at least now. Examples are
// "[vdso]", [vsyscall]" and some others, see the code.
func (m *Mapping) Unsymbolizable() bool {
	name := filepath.Base(m.File)
	return strings.HasPrefix(name, "[") || strings.HasPrefix(name, "linux-vdso") || strings.HasPrefix(m.File, "/dev/dri/")
}

// Copy makes a fully independent copy of a profile.
func (p *Profile) Copy() *Profile {
	pp := &Profile{}
	if err := unmarshal(serialize(p), pp); err != nil {
		panic(err)
	}
	if err := pp.postDecode(); err != nil {
		panic(err)
	}

	return pp
}
  07070100000717000081A4000000000000000000000001645E367C00001DBF000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/google/pprof/profile/proto.go   // Copyright 2014 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// This file is a simple protocol buffer encoder and decoder.
// The format is described at
// https://developers.google.com/protocol-buffers/docs/encoding
//
// A protocol message must implement the message interface:
//   decoder() []decoder
//   encode(*buffer)
//
// The decode method returns a slice indexed by field number that gives the
// function to decode that field.
// The encode method encodes its receiver into the given buffer.
//
// The two methods are simple enough to be implemented by hand rather than
// by using a protocol compiler.
//
// See profile.go for examples of messages implementing this interface.
//
// There is no support for groups, message sets, or "has" bits.

package profile

import (
	"errors"
	"fmt"
)

type buffer struct {
	field    int // field tag
	typ      int // proto wire type code for field
	u64      uint64
	data     []byte
	tmp      [16]byte
	tmpLines []Line // temporary storage used while decoding "repeated Line".
}

type decoder func(*buffer, message) error

type message interface {
	decoder() []decoder
	encode(*buffer)
}

func marshal(m message) []byte {
	var b buffer
	m.encode(&b)
	return b.data
}

func encodeVarint(b *buffer, x uint64) {
	for x >= 128 {
		b.data = append(b.data, byte(x)|0x80)
		x >>= 7
	}
	b.data = append(b.data, byte(x))
}

func encodeLength(b *buffer, tag int, len int) {
	encodeVarint(b, uint64(tag)<<3|2)
	encodeVarint(b, uint64(len))
}

func encodeUint64(b *buffer, tag int, x uint64) {
	// append varint to b.data
	encodeVarint(b, uint64(tag)<<3)
	encodeVarint(b, x)
}

func encodeUint64s(b *buffer, tag int, x []uint64) {
	if len(x) > 2 {
		// Use packed encoding
		n1 := len(b.data)
		for _, u := range x {
			encodeVarint(b, u)
		}
		n2 := len(b.data)
		encodeLength(b, tag, n2-n1)
		n3 := len(b.data)
		copy(b.tmp[:], b.data[n2:n3])
		copy(b.data[n1+(n3-n2):], b.data[n1:n2])
		copy(b.data[n1:], b.tmp[:n3-n2])
		return
	}
	for _, u := range x {
		encodeUint64(b, tag, u)
	}
}

func encodeUint64Opt(b *buffer, tag int, x uint64) {
	if x == 0 {
		return
	}
	encodeUint64(b, tag, x)
}

func encodeInt64(b *buffer, tag int, x int64) {
	u := uint64(x)
	encodeUint64(b, tag, u)
}

func encodeInt64s(b *buffer, tag int, x []int64) {
	if len(x) > 2 {
		// Use packed encoding
		n1 := len(b.data)
		for _, u := range x {
			encodeVarint(b, uint64(u))
		}
		n2 := len(b.data)
		encodeLength(b, tag, n2-n1)
		n3 := len(b.data)
		copy(b.tmp[:], b.data[n2:n3])
		copy(b.data[n1+(n3-n2):], b.data[n1:n2])
		copy(b.data[n1:], b.tmp[:n3-n2])
		return
	}
	for _, u := range x {
		encodeInt64(b, tag, u)
	}
}

func encodeInt64Opt(b *buffer, tag int, x int64) {
	if x == 0 {
		return
	}
	encodeInt64(b, tag, x)
}

func encodeString(b *buffer, tag int, x string) {
	encodeLength(b, tag, len(x))
	b.data = append(b.data, x...)
}

func encodeStrings(b *buffer, tag int, x []string) {
	for _, s := range x {
		encodeString(b, tag, s)
	}
}

func encodeBool(b *buffer, tag int, x bool) {
	if x {
		encodeUint64(b, tag, 1)
	} else {
		encodeUint64(b, tag, 0)
	}
}

func encodeBoolOpt(b *buffer, tag int, x bool) {
	if x {
		encodeBool(b, tag, x)
	}
}

func encodeMessage(b *buffer, tag int, m message) {
	n1 := len(b.data)
	m.encode(b)
	n2 := len(b.data)
	encodeLength(b, tag, n2-n1)
	n3 := len(b.data)
	copy(b.tmp[:], b.data[n2:n3])
	copy(b.data[n1+(n3-n2):], b.data[n1:n2])
	copy(b.data[n1:], b.tmp[:n3-n2])
}

func unmarshal(data []byte, m message) (err error) {
	b := buffer{data: data, typ: 2}
	return decodeMessage(&b, m)
}

func le64(p []byte) uint64 {
	return uint64(p[0]) | uint64(p[1])<<8 | uint64(p[2])<<16 | uint64(p[3])<<24 | uint64(p[4])<<32 | uint64(p[5])<<40 | uint64(p[6])<<48 | uint64(p[7])<<56
}

func le32(p []byte) uint32 {
	return uint32(p[0]) | uint32(p[1])<<8 | uint32(p[2])<<16 | uint32(p[3])<<24
}

func decodeVarint(data []byte) (uint64, []byte, error) {
	var u uint64
	for i := 0; ; i++ {
		if i >= 10 || i >= len(data) {
			return 0, nil, errors.New("bad varint")
		}
		u |= uint64(data[i]&0x7F) << uint(7*i)
		if data[i]&0x80 == 0 {
			return u, data[i+1:], nil
		}
	}
}

func decodeField(b *buffer, data []byte) ([]byte, error) {
	x, data, err := decodeVarint(data)
	if err != nil {
		return nil, err
	}
	b.field = int(x >> 3)
	b.typ = int(x & 7)
	b.data = nil
	b.u64 = 0
	switch b.typ {
	case 0:
		b.u64, data, err = decodeVarint(data)
		if err != nil {
			return nil, err
		}
	case 1:
		if len(data) < 8 {
			return nil, errors.New("not enough data")
		}
		b.u64 = le64(data[:8])
		data = data[8:]
	case 2:
		var n uint64
		n, data, err = decodeVarint(data)
		if err != nil {
			return nil, err
		}
		if n > uint64(len(data)) {
			return nil, errors.New("too much data")
		}
		b.data = data[:n]
		data = data[n:]
	case 5:
		if len(data) < 4 {
			return nil, errors.New("not enough data")
		}
		b.u64 = uint64(le32(data[:4]))
		data = data[4:]
	default:
		return nil, fmt.Errorf("unknown wire type: %d", b.typ)
	}

	return data, nil
}

func checkType(b *buffer, typ int) error {
	if b.typ != typ {
		return errors.New("type mismatch")
	}
	return nil
}

func decodeMessage(b *buffer, m message) error {
	if err := checkType(b, 2); err != nil {
		return err
	}
	dec := m.decoder()
	data := b.data
	for len(data) > 0 {
		// pull varint field# + type
		var err error
		data, err = decodeField(b, data)
		if err != nil {
			return err
		}
		if b.field >= len(dec) || dec[b.field] == nil {
			continue
		}
		if err := dec[b.field](b, m); err != nil {
			return err
		}
	}
	return nil
}

func decodeInt64(b *buffer, x *int64) error {
	if err := checkType(b, 0); err != nil {
		return err
	}
	*x = int64(b.u64)
	return nil
}

func decodeInt64s(b *buffer, x *[]int64) error {
	if b.typ == 2 {
		// Packed encoding
		data := b.data
		for len(data) > 0 {
			var u uint64
			var err error

			if u, data, err = decodeVarint(data); err != nil {
				return err
			}
			*x = append(*x, int64(u))
		}
		return nil
	}
	var i int64
	if err := decodeInt64(b, &i); err != nil {
		return err
	}
	*x = append(*x, i)
	return nil
}

func decodeUint64(b *buffer, x *uint64) error {
	if err := checkType(b, 0); err != nil {
		return err
	}
	*x = b.u64
	return nil
}

func decodeUint64s(b *buffer, x *[]uint64) error {
	if b.typ == 2 {
		data := b.data
		// Packed encoding
		for len(data) > 0 {
			var u uint64
			var err error

			if u, data, err = decodeVarint(data); err != nil {
				return err
			}
			*x = append(*x, u)
		}
		return nil
	}
	var u uint64
	if err := decodeUint64(b, &u); err != nil {
		return err
	}
	*x = append(*x, u)
	return nil
}

func decodeString(b *buffer, x *string) error {
	if err := checkType(b, 2); err != nil {
		return err
	}
	*x = string(b.data)
	return nil
}

func decodeStrings(b *buffer, x *[]string) error {
	var s string
	if err := decodeString(b, &s); err != nil {
		return err
	}
	*x = append(*x, s)
	return nil
}

func decodeBool(b *buffer, x *bool) error {
	if err := checkType(b, 0); err != nil {
		return err
	}
	if int64(b.u64) == 0 {
		*x = false
	} else {
		*x = true
	}
	return nil
}
 07070100000718000081A4000000000000000000000001645E367C000015F5000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/google/pprof/profile/prune.go   // Copyright 2014 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Implements methods to remove frames from profiles.

package profile

import (
	"fmt"
	"regexp"
	"strings"
)

var (
	reservedNames = []string{"(anonymous namespace)", "operator()"}
	bracketRx     = func() *regexp.Regexp {
		var quotedNames []string
		for _, name := range append(reservedNames, "(") {
			quotedNames = append(quotedNames, regexp.QuoteMeta(name))
		}
		return regexp.MustCompile(strings.Join(quotedNames, "|"))
	}()
)

// simplifyFunc does some primitive simplification of function names.
func simplifyFunc(f string) string {
	// Account for leading '.' on the PPC ELF v1 ABI.
	funcName := strings.TrimPrefix(f, ".")
	// Account for unsimplified names -- try  to remove the argument list by trimming
	// starting from the first '(', but skipping reserved names that have '('.
	for _, ind := range bracketRx.FindAllStringSubmatchIndex(funcName, -1) {
		foundReserved := false
		for _, res := range reservedNames {
			if funcName[ind[0]:ind[1]] == res {
				foundReserved = true
				break
			}
		}
		if !foundReserved {
			funcName = funcName[:ind[0]]
			break
		}
	}
	return funcName
}

// Prune removes all nodes beneath a node matching dropRx, and not
// matching keepRx. If the root node of a Sample matches, the sample
// will have an empty stack.
func (p *Profile) Prune(dropRx, keepRx *regexp.Regexp) {
	prune := make(map[uint64]bool)
	pruneBeneath := make(map[uint64]bool)

	// simplifyFunc can be expensive, so cache results.
	// Note that the same function name can be encountered many times due
	// different lines and addresses in the same function.
	pruneCache := map[string]bool{} // Map from function to whether or not to prune
	pruneFromHere := func(s string) bool {
		if r, ok := pruneCache[s]; ok {
			return r
		}
		funcName := simplifyFunc(s)
		if dropRx.MatchString(funcName) {
			if keepRx == nil || !keepRx.MatchString(funcName) {
				pruneCache[s] = true
				return true
			}
		}
		pruneCache[s] = false
		return false
	}

	for _, loc := range p.Location {
		var i int
		for i = len(loc.Line) - 1; i >= 0; i-- {
			if fn := loc.Line[i].Function; fn != nil && fn.Name != "" {
				if pruneFromHere(fn.Name) {
					break
				}
			}
		}

		if i >= 0 {
			// Found matching entry to prune.
			pruneBeneath[loc.ID] = true

			// Remove the matching location.
			if i == len(loc.Line)-1 {
				// Matched the top entry: prune the whole location.
				prune[loc.ID] = true
			} else {
				loc.Line = loc.Line[i+1:]
			}
		}
	}

	// Prune locs from each Sample
	for _, sample := range p.Sample {
		// Scan from the root to the leaves to find the prune location.
		// Do not prune frames before the first user frame, to avoid
		// pruning everything.
		foundUser := false
		for i := len(sample.Location) - 1; i >= 0; i-- {
			id := sample.Location[i].ID
			if !prune[id] && !pruneBeneath[id] {
				foundUser = true
				continue
			}
			if !foundUser {
				continue
			}
			if prune[id] {
				sample.Location = sample.Location[i+1:]
				break
			}
			if pruneBeneath[id] {
				sample.Location = sample.Location[i:]
				break
			}
		}
	}
}

// RemoveUninteresting prunes and elides profiles using built-in
// tables of uninteresting function names.
func (p *Profile) RemoveUninteresting() error {
	var keep, drop *regexp.Regexp
	var err error

	if p.DropFrames != "" {
		if drop, err = regexp.Compile("^(" + p.DropFrames + ")$"); err != nil {
			return fmt.Errorf("failed to compile regexp %s: %v", p.DropFrames, err)
		}
		if p.KeepFrames != "" {
			if keep, err = regexp.Compile("^(" + p.KeepFrames + ")$"); err != nil {
				return fmt.Errorf("failed to compile regexp %s: %v", p.KeepFrames, err)
			}
		}
		p.Prune(drop, keep)
	}
	return nil
}

// PruneFrom removes all nodes beneath the lowest node matching dropRx, not including itself.
//
// Please see the example below to understand this method as well as
// the difference from Prune method.
//
// A sample contains Location of [A,B,C,B,D] where D is the top frame and there's no inline.
//
// PruneFrom(A) returns [A,B,C,B,D] because there's no node beneath A.
// Prune(A, nil) returns [B,C,B,D] by removing A itself.
//
// PruneFrom(B) returns [B,C,B,D] by removing all nodes beneath the first B when scanning from the bottom.
// Prune(B, nil) returns [D] because a matching node is found by scanning from the root.
func (p *Profile) PruneFrom(dropRx *regexp.Regexp) {
	pruneBeneath := make(map[uint64]bool)

	for _, loc := range p.Location {
		for i := 0; i < len(loc.Line); i++ {
			if fn := loc.Line[i].Function; fn != nil && fn.Name != "" {
				funcName := simplifyFunc(fn.Name)
				if dropRx.MatchString(funcName) {
					// Found matching entry to prune.
					pruneBeneath[loc.ID] = true
					loc.Line = loc.Line[i:]
					break
				}
			}
		}
	}

	// Prune locs from each Sample
	for _, sample := range p.Sample {
		// Scan from the bottom leaf to the root to find the prune location.
		for i, loc := range sample.Location {
			if pruneBeneath[loc.ID] {
				sample.Location = sample.Location[i:]
				break
			}
		}
	}
}
   07070100000719000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003300000000elemental-cli-0.3.1/vendor/github.com/google/shlex    0707010000071A000081A4000000000000000000000001645E367C00002C5E000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/google/shlex/COPYING    
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
  0707010000071B000081A4000000000000000000000001645E367C0000005F000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/google/shlex/README go-shlex is a simple lexer for go that supports shell-style quoting,
commenting, and escaping.
 0707010000071C000081A4000000000000000000000001645E367C000026E5000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/google/shlex/shlex.go   /*
Copyright 2012 Google Inc. All Rights Reserved.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

/*
Package shlex implements a simple lexer which splits input in to tokens using
shell-style rules for quoting and commenting.

The basic use case uses the default ASCII lexer to split a string into sub-strings:

  shlex.Split("one \"two three\" four") -> []string{"one", "two three", "four"}

To process a stream of strings:

  l := NewLexer(os.Stdin)
  for ; token, err := l.Next(); err != nil {
  	// process token
  }

To access the raw token stream (which includes tokens for comments):

  t := NewTokenizer(os.Stdin)
  for ; token, err := t.Next(); err != nil {
	// process token
  }

*/
package shlex

import (
	"bufio"
	"fmt"
	"io"
	"strings"
)

// TokenType is a top-level token classification: A word, space, comment, unknown.
type TokenType int

// runeTokenClass is the type of a UTF-8 character classification: A quote, space, escape.
type runeTokenClass int

// the internal state used by the lexer state machine
type lexerState int

// Token is a (type, value) pair representing a lexographical token.
type Token struct {
	tokenType TokenType
	value     string
}

// Equal reports whether tokens a, and b, are equal.
// Two tokens are equal if both their types and values are equal. A nil token can
// never be equal to another token.
func (a *Token) Equal(b *Token) bool {
	if a == nil || b == nil {
		return false
	}
	if a.tokenType != b.tokenType {
		return false
	}
	return a.value == b.value
}

// Named classes of UTF-8 runes
const (
	spaceRunes            = " \t\r\n"
	escapingQuoteRunes    = `"`
	nonEscapingQuoteRunes = "'"
	escapeRunes           = `\`
	commentRunes          = "#"
)

// Classes of rune token
const (
	unknownRuneClass runeTokenClass = iota
	spaceRuneClass
	escapingQuoteRuneClass
	nonEscapingQuoteRuneClass
	escapeRuneClass
	commentRuneClass
	eofRuneClass
)

// Classes of lexographic token
const (
	UnknownToken TokenType = iota
	WordToken
	SpaceToken
	CommentToken
)

// Lexer state machine states
const (
	startState           lexerState = iota // no runes have been seen
	inWordState                            // processing regular runes in a word
	escapingState                          // we have just consumed an escape rune; the next rune is literal
	escapingQuotedState                    // we have just consumed an escape rune within a quoted string
	quotingEscapingState                   // we are within a quoted string that supports escaping ("...")
	quotingState                           // we are within a string that does not support escaping ('...')
	commentState                           // we are within a comment (everything following an unquoted or unescaped #
)

// tokenClassifier is used for classifying rune characters.
type tokenClassifier map[rune]runeTokenClass

func (typeMap tokenClassifier) addRuneClass(runes string, tokenType runeTokenClass) {
	for _, runeChar := range runes {
		typeMap[runeChar] = tokenType
	}
}

// newDefaultClassifier creates a new classifier for ASCII characters.
func newDefaultClassifier() tokenClassifier {
	t := tokenClassifier{}
	t.addRuneClass(spaceRunes, spaceRuneClass)
	t.addRuneClass(escapingQuoteRunes, escapingQuoteRuneClass)
	t.addRuneClass(nonEscapingQuoteRunes, nonEscapingQuoteRuneClass)
	t.addRuneClass(escapeRunes, escapeRuneClass)
	t.addRuneClass(commentRunes, commentRuneClass)
	return t
}

// ClassifyRune classifiees a rune
func (t tokenClassifier) ClassifyRune(runeVal rune) runeTokenClass {
	return t[runeVal]
}

// Lexer turns an input stream into a sequence of tokens. Whitespace and comments are skipped.
type Lexer Tokenizer

// NewLexer creates a new lexer from an input stream.
func NewLexer(r io.Reader) *Lexer {

	return (*Lexer)(NewTokenizer(r))
}

// Next returns the next word, or an error. If there are no more words,
// the error will be io.EOF.
func (l *Lexer) Next() (string, error) {
	for {
		token, err := (*Tokenizer)(l).Next()
		if err != nil {
			return "", err
		}
		switch token.tokenType {
		case WordToken:
			return token.value, nil
		case CommentToken:
			// skip comments
		default:
			return "", fmt.Errorf("Unknown token type: %v", token.tokenType)
		}
	}
}

// Tokenizer turns an input stream into a sequence of typed tokens
type Tokenizer struct {
	input      bufio.Reader
	classifier tokenClassifier
}

// NewTokenizer creates a new tokenizer from an input stream.
func NewTokenizer(r io.Reader) *Tokenizer {
	input := bufio.NewReader(r)
	classifier := newDefaultClassifier()
	return &Tokenizer{
		input:      *input,
		classifier: classifier}
}

// scanStream scans the stream for the next token using the internal state machine.
// It will panic if it encounters a rune which it does not know how to handle.
func (t *Tokenizer) scanStream() (*Token, error) {
	state := startState
	var tokenType TokenType
	var value []rune
	var nextRune rune
	var nextRuneType runeTokenClass
	var err error

	for {
		nextRune, _, err = t.input.ReadRune()
		nextRuneType = t.classifier.ClassifyRune(nextRune)

		if err == io.EOF {
			nextRuneType = eofRuneClass
			err = nil
		} else if err != nil {
			return nil, err
		}

		switch state {
		case startState: // no runes read yet
			{
				switch nextRuneType {
				case eofRuneClass:
					{
						return nil, io.EOF
					}
				case spaceRuneClass:
					{
					}
				case escapingQuoteRuneClass:
					{
						tokenType = WordToken
						state = quotingEscapingState
					}
				case nonEscapingQuoteRuneClass:
					{
						tokenType = WordToken
						state = quotingState
					}
				case escapeRuneClass:
					{
						tokenType = WordToken
						state = escapingState
					}
				case commentRuneClass:
					{
						tokenType = CommentToken
						state = commentState
					}
				default:
					{
						tokenType = WordToken
						value = append(value, nextRune)
						state = inWordState
					}
				}
			}
		case inWordState: // in a regular word
			{
				switch nextRuneType {
				case eofRuneClass:
					{
						token := &Token{
							tokenType: tokenType,
							value:     string(value)}
						return token, err
					}
				case spaceRuneClass:
					{
						token := &Token{
							tokenType: tokenType,
							value:     string(value)}
						return token, err
					}
				case escapingQuoteRuneClass:
					{
						state = quotingEscapingState
					}
				case nonEscapingQuoteRuneClass:
					{
						state = quotingState
					}
				case escapeRuneClass:
					{
						state = escapingState
					}
				default:
					{
						value = append(value, nextRune)
					}
				}
			}
		case escapingState: // the rune after an escape character
			{
				switch nextRuneType {
				case eofRuneClass:
					{
						err = fmt.Errorf("EOF found after escape character")
						token := &Token{
							tokenType: tokenType,
							value:     string(value)}
						return token, err
					}
				default:
					{
						state = inWordState
						value = append(value, nextRune)
					}
				}
			}
		case escapingQuotedState: // the next rune after an escape character, in double quotes
			{
				switch nextRuneType {
				case eofRuneClass:
					{
						err = fmt.Errorf("EOF found after escape character")
						token := &Token{
							tokenType: tokenType,
							value:     string(value)}
						return token, err
					}
				default:
					{
						state = quotingEscapingState
						value = append(value, nextRune)
					}
				}
			}
		case quotingEscapingState: // in escaping double quotes
			{
				switch nextRuneType {
				case eofRuneClass:
					{
						err = fmt.Errorf("EOF found when expecting closing quote")
						token := &Token{
							tokenType: tokenType,
							value:     string(value)}
						return token, err
					}
				case escapingQuoteRuneClass:
					{
						state = inWordState
					}
				case escapeRuneClass:
					{
						state = escapingQuotedState
					}
				default:
					{
						value = append(value, nextRune)
					}
				}
			}
		case quotingState: // in non-escaping single quotes
			{
				switch nextRuneType {
				case eofRuneClass:
					{
						err = fmt.Errorf("EOF found when expecting closing quote")
						token := &Token{
							tokenType: tokenType,
							value:     string(value)}
						return token, err
					}
				case nonEscapingQuoteRuneClass:
					{
						state = inWordState
					}
				default:
					{
						value = append(value, nextRune)
					}
				}
			}
		case commentState: // in a comment
			{
				switch nextRuneType {
				case eofRuneClass:
					{
						token := &Token{
							tokenType: tokenType,
							value:     string(value)}
						return token, err
					}
				case spaceRuneClass:
					{
						if nextRune == '\n' {
							state = startState
							token := &Token{
								tokenType: tokenType,
								value:     string(value)}
							return token, err
						} else {
							value = append(value, nextRune)
						}
					}
				default:
					{
						value = append(value, nextRune)
					}
				}
			}
		default:
			{
				return nil, fmt.Errorf("Unexpected state: %v", state)
			}
		}
	}
}

// Next returns the next token in the stream.
func (t *Tokenizer) Next() (*Token, error) {
	return t.scanStream()
}

// Split partitions a string into a slice of strings.
func Split(s string) ([]string, error) {
	l := NewLexer(strings.NewReader(s))
	subStrings := make([]string, 0)
	for {
		word, err := l.Next()
		if err != nil {
			if err == io.EOF {
				return subStrings, nil
			}
			return subStrings, err
		}
		subStrings = append(subStrings, word)
	}
}
   0707010000071D000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003200000000elemental-cli-0.3.1/vendor/github.com/google/uuid 0707010000071E000081A4000000000000000000000001645E367C0000004C000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/google/uuid/.travis.yml language: go

go:
  - 1.4.3
  - 1.5.3
  - tip

script:
  - go test -v ./...
0707010000071F000081A4000000000000000000000001645E367C00000138000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/google/uuid/CONTRIBUTING.md # How to contribute

We definitely welcome patches and contribution to this project!

### Legal requirements

In order to protect both you and ourselves, you will need to sign the
[Contributor License Agreement](https://cla.developers.google.com/clas).

You may have already signed it for other Google projects.
07070100000720000081A4000000000000000000000001645E367C00000069000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/google/uuid/CONTRIBUTORS    Paul Borman <borman@google.com>
bmatsuo
shawnps
theory
jboverfelt
dsymonds
cd1
wallclockbuilder
dansouza
   07070100000721000081A4000000000000000000000001645E367C000005C8000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/google/uuid/LICENSE Copyright (c) 2009,2014 Google Inc. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
07070100000722000081A4000000000000000000000001645E367C00000370000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/google/uuid/README.md   # uuid ![build status](https://travis-ci.org/google/uuid.svg?branch=master)
The uuid package generates and inspects UUIDs based on
[RFC 4122](http://tools.ietf.org/html/rfc4122)
and DCE 1.1: Authentication and Security Services. 

This package is based on the github.com/pborman/uuid package (previously named
code.google.com/p/go-uuid).  It differs from these earlier packages in that
a UUID is a 16 byte array rather than a byte slice.  One loss due to this
change is the ability to represent an invalid UUID (vs a NIL UUID).

###### Install
`go get github.com/google/uuid`

###### Documentation 
[![GoDoc](https://godoc.org/github.com/google/uuid?status.svg)](http://godoc.org/github.com/google/uuid)

Full `go doc` style documentation for the package can be viewed online without
installing this package by using the GoDoc site here: 
http://pkg.go.dev/github.com/google/uuid
07070100000723000081A4000000000000000000000001645E367C00000818000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/google/uuid/dce.go  // Copyright 2016 Google Inc.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package uuid

import (
	"encoding/binary"
	"fmt"
	"os"
)

// A Domain represents a Version 2 domain
type Domain byte

// Domain constants for DCE Security (Version 2) UUIDs.
const (
	Person = Domain(0)
	Group  = Domain(1)
	Org    = Domain(2)
)

// NewDCESecurity returns a DCE Security (Version 2) UUID.
//
// The domain should be one of Person, Group or Org.
// On a POSIX system the id should be the users UID for the Person
// domain and the users GID for the Group.  The meaning of id for
// the domain Org or on non-POSIX systems is site defined.
//
// For a given domain/id pair the same token may be returned for up to
// 7 minutes and 10 seconds.
func NewDCESecurity(domain Domain, id uint32) (UUID, error) {
	uuid, err := NewUUID()
	if err == nil {
		uuid[6] = (uuid[6] & 0x0f) | 0x20 // Version 2
		uuid[9] = byte(domain)
		binary.BigEndian.PutUint32(uuid[0:], id)
	}
	return uuid, err
}

// NewDCEPerson returns a DCE Security (Version 2) UUID in the person
// domain with the id returned by os.Getuid.
//
//  NewDCESecurity(Person, uint32(os.Getuid()))
func NewDCEPerson() (UUID, error) {
	return NewDCESecurity(Person, uint32(os.Getuid()))
}

// NewDCEGroup returns a DCE Security (Version 2) UUID in the group
// domain with the id returned by os.Getgid.
//
//  NewDCESecurity(Group, uint32(os.Getgid()))
func NewDCEGroup() (UUID, error) {
	return NewDCESecurity(Group, uint32(os.Getgid()))
}

// Domain returns the domain for a Version 2 UUID.  Domains are only defined
// for Version 2 UUIDs.
func (uuid UUID) Domain() Domain {
	return Domain(uuid[9])
}

// ID returns the id for a Version 2 UUID. IDs are only defined for Version 2
// UUIDs.
func (uuid UUID) ID() uint32 {
	return binary.BigEndian.Uint32(uuid[0:4])
}

func (d Domain) String() string {
	switch d {
	case Person:
		return "Person"
	case Group:
		return "Group"
	case Org:
		return "Org"
	}
	return fmt.Sprintf("Domain%d", int(d))
}
07070100000724000081A4000000000000000000000001645E367C00000197000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/google/uuid/doc.go  // Copyright 2016 Google Inc.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package uuid generates and inspects UUIDs.
//
// UUIDs are based on RFC 4122 and DCE 1.1: Authentication and Security
// Services.
//
// A UUID is a 16 byte (128 bit) array.  UUIDs may be used as keys to
// maps or compared directly.
package uuid
 07070100000725000081A4000000000000000000000001645E367C000006DC000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/google/uuid/hash.go // Copyright 2016 Google Inc.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package uuid

import (
	"crypto/md5"
	"crypto/sha1"
	"hash"
)

// Well known namespace IDs and UUIDs
var (
	NameSpaceDNS  = Must(Parse("6ba7b810-9dad-11d1-80b4-00c04fd430c8"))
	NameSpaceURL  = Must(Parse("6ba7b811-9dad-11d1-80b4-00c04fd430c8"))
	NameSpaceOID  = Must(Parse("6ba7b812-9dad-11d1-80b4-00c04fd430c8"))
	NameSpaceX500 = Must(Parse("6ba7b814-9dad-11d1-80b4-00c04fd430c8"))
	Nil           UUID // empty UUID, all zeros
)

// NewHash returns a new UUID derived from the hash of space concatenated with
// data generated by h.  The hash should be at least 16 byte in length.  The
// first 16 bytes of the hash are used to form the UUID.  The version of the
// UUID will be the lower 4 bits of version.  NewHash is used to implement
// NewMD5 and NewSHA1.
func NewHash(h hash.Hash, space UUID, data []byte, version int) UUID {
	h.Reset()
	h.Write(space[:]) //nolint:errcheck
	h.Write(data)     //nolint:errcheck
	s := h.Sum(nil)
	var uuid UUID
	copy(uuid[:], s)
	uuid[6] = (uuid[6] & 0x0f) | uint8((version&0xf)<<4)
	uuid[8] = (uuid[8] & 0x3f) | 0x80 // RFC 4122 variant
	return uuid
}

// NewMD5 returns a new MD5 (Version 3) UUID based on the
// supplied name space and data.  It is the same as calling:
//
//  NewHash(md5.New(), space, data, 3)
func NewMD5(space UUID, data []byte) UUID {
	return NewHash(md5.New(), space, data, 3)
}

// NewSHA1 returns a new SHA1 (Version 5) UUID based on the
// supplied name space and data.  It is the same as calling:
//
//  NewHash(sha1.New(), space, data, 5)
func NewSHA1(space UUID, data []byte) UUID {
	return NewHash(sha1.New(), space, data, 5)
}
07070100000726000081A4000000000000000000000001645E367C0000038B000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/google/uuid/marshal.go  // Copyright 2016 Google Inc.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package uuid

import "fmt"

// MarshalText implements encoding.TextMarshaler.
func (uuid UUID) MarshalText() ([]byte, error) {
	var js [36]byte
	encodeHex(js[:], uuid)
	return js[:], nil
}

// UnmarshalText implements encoding.TextUnmarshaler.
func (uuid *UUID) UnmarshalText(data []byte) error {
	id, err := ParseBytes(data)
	if err != nil {
		return err
	}
	*uuid = id
	return nil
}

// MarshalBinary implements encoding.BinaryMarshaler.
func (uuid UUID) MarshalBinary() ([]byte, error) {
	return uuid[:], nil
}

// UnmarshalBinary implements encoding.BinaryUnmarshaler.
func (uuid *UUID) UnmarshalBinary(data []byte) error {
	if len(data) != 16 {
		return fmt.Errorf("invalid UUID (got %d bytes)", len(data))
	}
	copy(uuid[:], data)
	return nil
}
 07070100000727000081A4000000000000000000000001645E367C00000913000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/google/uuid/node.go // Copyright 2016 Google Inc.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package uuid

import (
	"sync"
)

var (
	nodeMu sync.Mutex
	ifname string  // name of interface being used
	nodeID [6]byte // hardware for version 1 UUIDs
	zeroID [6]byte // nodeID with only 0's
)

// NodeInterface returns the name of the interface from which the NodeID was
// derived.  The interface "user" is returned if the NodeID was set by
// SetNodeID.
func NodeInterface() string {
	defer nodeMu.Unlock()
	nodeMu.Lock()
	return ifname
}

// SetNodeInterface selects the hardware address to be used for Version 1 UUIDs.
// If name is "" then the first usable interface found will be used or a random
// Node ID will be generated.  If a named interface cannot be found then false
// is returned.
//
// SetNodeInterface never fails when name is "".
func SetNodeInterface(name string) bool {
	defer nodeMu.Unlock()
	nodeMu.Lock()
	return setNodeInterface(name)
}

func setNodeInterface(name string) bool {
	iname, addr := getHardwareInterface(name) // null implementation for js
	if iname != "" && addr != nil {
		ifname = iname
		copy(nodeID[:], addr)
		return true
	}

	// We found no interfaces with a valid hardware address.  If name
	// does not specify a specific interface generate a random Node ID
	// (section 4.1.6)
	if name == "" {
		ifname = "random"
		randomBits(nodeID[:])
		return true
	}
	return false
}

// NodeID returns a slice of a copy of the current Node ID, setting the Node ID
// if not already set.
func NodeID() []byte {
	defer nodeMu.Unlock()
	nodeMu.Lock()
	if nodeID == zeroID {
		setNodeInterface("")
	}
	nid := nodeID
	return nid[:]
}

// SetNodeID sets the Node ID to be used for Version 1 UUIDs.  The first 6 bytes
// of id are used.  If id is less than 6 bytes then false is returned and the
// Node ID is not set.
func SetNodeID(id []byte) bool {
	if len(id) < 6 {
		return false
	}
	defer nodeMu.Unlock()
	nodeMu.Lock()
	copy(nodeID[:], id)
	ifname = "user"
	return true
}

// NodeID returns the 6 byte node id encoded in uuid.  It returns nil if uuid is
// not valid.  The NodeID is only well defined for version 1 and 2 UUIDs.
func (uuid UUID) NodeID() []byte {
	var node [6]byte
	copy(node[:], uuid[10:])
	return node[:]
}
 07070100000728000081A4000000000000000000000001645E367C000001F3000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/google/uuid/node_js.go  // Copyright 2017 Google Inc.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build js

package uuid

// getHardwareInterface returns nil values for the JS version of the code.
// This remvoves the "net" dependency, because it is not used in the browser.
// Using the "net" library inflates the size of the transpiled JS code by 673k bytes.
func getHardwareInterface(name string) (string, []byte) { return "", nil }
 07070100000729000081A4000000000000000000000001645E367C000003B5000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/google/uuid/node_net.go // Copyright 2017 Google Inc.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build !js

package uuid

import "net"

var interfaces []net.Interface // cached list of interfaces

// getHardwareInterface returns the name and hardware address of interface name.
// If name is "" then the name and hardware address of one of the system's
// interfaces is returned.  If no interfaces are found (name does not exist or
// there are no interfaces) then "", nil is returned.
//
// Only addresses of at least 6 bytes are returned.
func getHardwareInterface(name string) (string, []byte) {
	if interfaces == nil {
		var err error
		interfaces, err = net.Interfaces()
		if err != nil {
			return "", nil
		}
	}
	for _, ifs := range interfaces {
		if len(ifs.HardwareAddr) >= 6 && (name == "" || name == ifs.Name) {
			return ifs.Name, ifs.HardwareAddr
		}
	}
	return "", nil
}
   0707010000072A000081A4000000000000000000000001645E367C0000099D000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/google/uuid/null.go // Copyright 2021 Google Inc.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package uuid

import (
	"bytes"
	"database/sql/driver"
	"encoding/json"
	"fmt"
)

var jsonNull = []byte("null")

// NullUUID represents a UUID that may be null.
// NullUUID implements the SQL driver.Scanner interface so
// it can be used as a scan destination:
//
//  var u uuid.NullUUID
//  err := db.QueryRow("SELECT name FROM foo WHERE id=?", id).Scan(&u)
//  ...
//  if u.Valid {
//     // use u.UUID
//  } else {
//     // NULL value
//  }
//
type NullUUID struct {
	UUID  UUID
	Valid bool // Valid is true if UUID is not NULL
}

// Scan implements the SQL driver.Scanner interface.
func (nu *NullUUID) Scan(value interface{}) error {
	if value == nil {
		nu.UUID, nu.Valid = Nil, false
		return nil
	}

	err := nu.UUID.Scan(value)
	if err != nil {
		nu.Valid = false
		return err
	}

	nu.Valid = true
	return nil
}

// Value implements the driver Valuer interface.
func (nu NullUUID) Value() (driver.Value, error) {
	if !nu.Valid {
		return nil, nil
	}
	// Delegate to UUID Value function
	return nu.UUID.Value()
}

// MarshalBinary implements encoding.BinaryMarshaler.
func (nu NullUUID) MarshalBinary() ([]byte, error) {
	if nu.Valid {
		return nu.UUID[:], nil
	}

	return []byte(nil), nil
}

// UnmarshalBinary implements encoding.BinaryUnmarshaler.
func (nu *NullUUID) UnmarshalBinary(data []byte) error {
	if len(data) != 16 {
		return fmt.Errorf("invalid UUID (got %d bytes)", len(data))
	}
	copy(nu.UUID[:], data)
	nu.Valid = true
	return nil
}

// MarshalText implements encoding.TextMarshaler.
func (nu NullUUID) MarshalText() ([]byte, error) {
	if nu.Valid {
		return nu.UUID.MarshalText()
	}

	return jsonNull, nil
}

// UnmarshalText implements encoding.TextUnmarshaler.
func (nu *NullUUID) UnmarshalText(data []byte) error {
	id, err := ParseBytes(data)
	if err != nil {
		nu.Valid = false
		return err
	}
	nu.UUID = id
	nu.Valid = true
	return nil
}

// MarshalJSON implements json.Marshaler.
func (nu NullUUID) MarshalJSON() ([]byte, error) {
	if nu.Valid {
		return json.Marshal(nu.UUID)
	}

	return jsonNull, nil
}

// UnmarshalJSON implements json.Unmarshaler.
func (nu *NullUUID) UnmarshalJSON(data []byte) error {
	if bytes.Equal(data, jsonNull) {
		*nu = NullUUID{}
		return nil // valid null UUID
	}
	err := json.Unmarshal(data, &nu.UUID)
	nu.Valid = err == nil
	return err
}
   0707010000072B000081A4000000000000000000000001645E367C000005B3000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/google/uuid/sql.go  // Copyright 2016 Google Inc.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package uuid

import (
	"database/sql/driver"
	"fmt"
)

// Scan implements sql.Scanner so UUIDs can be read from databases transparently.
// Currently, database types that map to string and []byte are supported. Please
// consult database-specific driver documentation for matching types.
func (uuid *UUID) Scan(src interface{}) error {
	switch src := src.(type) {
	case nil:
		return nil

	case string:
		// if an empty UUID comes from a table, we return a null UUID
		if src == "" {
			return nil
		}

		// see Parse for required string format
		u, err := Parse(src)
		if err != nil {
			return fmt.Errorf("Scan: %v", err)
		}

		*uuid = u

	case []byte:
		// if an empty UUID comes from a table, we return a null UUID
		if len(src) == 0 {
			return nil
		}

		// assumes a simple slice of bytes if 16 bytes
		// otherwise attempts to parse
		if len(src) != 16 {
			return uuid.Scan(string(src))
		}
		copy((*uuid)[:], src)

	default:
		return fmt.Errorf("Scan: unable to scan type %T into UUID", src)
	}

	return nil
}

// Value implements sql.Valuer so that UUIDs can be written to databases
// transparently. Currently, UUIDs map to strings. Please consult
// database-specific driver documentation for matching types.
func (uuid UUID) Value() (driver.Value, error) {
	return uuid.String(), nil
}
 0707010000072C000081A4000000000000000000000001645E367C00000DB5000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/google/uuid/time.go // Copyright 2016 Google Inc.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package uuid

import (
	"encoding/binary"
	"sync"
	"time"
)

// A Time represents a time as the number of 100's of nanoseconds since 15 Oct
// 1582.
type Time int64

const (
	lillian    = 2299160          // Julian day of 15 Oct 1582
	unix       = 2440587          // Julian day of 1 Jan 1970
	epoch      = unix - lillian   // Days between epochs
	g1582      = epoch * 86400    // seconds between epochs
	g1582ns100 = g1582 * 10000000 // 100s of a nanoseconds between epochs
)

var (
	timeMu   sync.Mutex
	lasttime uint64 // last time we returned
	clockSeq uint16 // clock sequence for this run

	timeNow = time.Now // for testing
)

// UnixTime converts t the number of seconds and nanoseconds using the Unix
// epoch of 1 Jan 1970.
func (t Time) UnixTime() (sec, nsec int64) {
	sec = int64(t - g1582ns100)
	nsec = (sec % 10000000) * 100
	sec /= 10000000
	return sec, nsec
}

// GetTime returns the current Time (100s of nanoseconds since 15 Oct 1582) and
// clock sequence as well as adjusting the clock sequence as needed.  An error
// is returned if the current time cannot be determined.
func GetTime() (Time, uint16, error) {
	defer timeMu.Unlock()
	timeMu.Lock()
	return getTime()
}

func getTime() (Time, uint16, error) {
	t := timeNow()

	// If we don't have a clock sequence already, set one.
	if clockSeq == 0 {
		setClockSequence(-1)
	}
	now := uint64(t.UnixNano()/100) + g1582ns100

	// If time has gone backwards with this clock sequence then we
	// increment the clock sequence
	if now <= lasttime {
		clockSeq = ((clockSeq + 1) & 0x3fff) | 0x8000
	}
	lasttime = now
	return Time(now), clockSeq, nil
}

// ClockSequence returns the current clock sequence, generating one if not
// already set.  The clock sequence is only used for Version 1 UUIDs.
//
// The uuid package does not use global static storage for the clock sequence or
// the last time a UUID was generated.  Unless SetClockSequence is used, a new
// random clock sequence is generated the first time a clock sequence is
// requested by ClockSequence, GetTime, or NewUUID.  (section 4.2.1.1)
func ClockSequence() int {
	defer timeMu.Unlock()
	timeMu.Lock()
	return clockSequence()
}

func clockSequence() int {
	if clockSeq == 0 {
		setClockSequence(-1)
	}
	return int(clockSeq & 0x3fff)
}

// SetClockSequence sets the clock sequence to the lower 14 bits of seq.  Setting to
// -1 causes a new sequence to be generated.
func SetClockSequence(seq int) {
	defer timeMu.Unlock()
	timeMu.Lock()
	setClockSequence(seq)
}

func setClockSequence(seq int) {
	if seq == -1 {
		var b [2]byte
		randomBits(b[:]) // clock sequence
		seq = int(b[0])<<8 | int(b[1])
	}
	oldSeq := clockSeq
	clockSeq = uint16(seq&0x3fff) | 0x8000 // Set our variant
	if oldSeq != clockSeq {
		lasttime = 0
	}
}

// Time returns the time in 100s of nanoseconds since 15 Oct 1582 encoded in
// uuid.  The time is only defined for version 1 and 2 UUIDs.
func (uuid UUID) Time() Time {
	time := int64(binary.BigEndian.Uint32(uuid[0:4]))
	time |= int64(binary.BigEndian.Uint16(uuid[4:6])) << 32
	time |= int64(binary.BigEndian.Uint16(uuid[6:8])&0xfff) << 48
	return Time(time)
}

// ClockSequence returns the clock sequence encoded in uuid.
// The clock sequence is only well defined for version 1 and 2 UUIDs.
func (uuid UUID) ClockSequence() int {
	return int(binary.BigEndian.Uint16(uuid[8:10])) & 0x3fff
}
   0707010000072D000081A4000000000000000000000001645E367C00000780000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/google/uuid/util.go // Copyright 2016 Google Inc.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package uuid

import (
	"io"
)

// randomBits completely fills slice b with random data.
func randomBits(b []byte) {
	if _, err := io.ReadFull(rander, b); err != nil {
		panic(err.Error()) // rand should never fail
	}
}

// xvalues returns the value of a byte as a hexadecimal digit or 255.
var xvalues = [256]byte{
	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
	0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 255, 255, 255, 255, 255, 255,
	255, 10, 11, 12, 13, 14, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255,
	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
	255, 10, 11, 12, 13, 14, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255,
	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
}

// xtob converts hex characters x1 and x2 into a byte.
func xtob(x1, x2 byte) (byte, bool) {
	b1 := xvalues[x1]
	b2 := xvalues[x2]
	return (b1 << 4) | b2, b1 != 255 && b2 != 255
}
0707010000072E000081A4000000000000000000000001645E367C00001E20000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/google/uuid/uuid.go // Copyright 2018 Google Inc.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package uuid

import (
	"bytes"
	"crypto/rand"
	"encoding/hex"
	"errors"
	"fmt"
	"io"
	"strings"
	"sync"
)

// A UUID is a 128 bit (16 byte) Universal Unique IDentifier as defined in RFC
// 4122.
type UUID [16]byte

// A Version represents a UUID's version.
type Version byte

// A Variant represents a UUID's variant.
type Variant byte

// Constants returned by Variant.
const (
	Invalid   = Variant(iota) // Invalid UUID
	RFC4122                   // The variant specified in RFC4122
	Reserved                  // Reserved, NCS backward compatibility.
	Microsoft                 // Reserved, Microsoft Corporation backward compatibility.
	Future                    // Reserved for future definition.
)

const randPoolSize = 16 * 16

var (
	rander      = rand.Reader // random function
	poolEnabled = false
	poolMu      sync.Mutex
	poolPos     = randPoolSize     // protected with poolMu
	pool        [randPoolSize]byte // protected with poolMu
)

type invalidLengthError struct{ len int }

func (err invalidLengthError) Error() string {
	return fmt.Sprintf("invalid UUID length: %d", err.len)
}

// IsInvalidLengthError is matcher function for custom error invalidLengthError
func IsInvalidLengthError(err error) bool {
	_, ok := err.(invalidLengthError)
	return ok
}

// Parse decodes s into a UUID or returns an error.  Both the standard UUID
// forms of xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx and
// urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx are decoded as well as the
// Microsoft encoding {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} and the raw hex
// encoding: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
func Parse(s string) (UUID, error) {
	var uuid UUID
	switch len(s) {
	// xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
	case 36:

	// urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
	case 36 + 9:
		if strings.ToLower(s[:9]) != "urn:uuid:" {
			return uuid, fmt.Errorf("invalid urn prefix: %q", s[:9])
		}
		s = s[9:]

	// {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
	case 36 + 2:
		s = s[1:]

	// xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
	case 32:
		var ok bool
		for i := range uuid {
			uuid[i], ok = xtob(s[i*2], s[i*2+1])
			if !ok {
				return uuid, errors.New("invalid UUID format")
			}
		}
		return uuid, nil
	default:
		return uuid, invalidLengthError{len(s)}
	}
	// s is now at least 36 bytes long
	// it must be of the form  xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
	if s[8] != '-' || s[13] != '-' || s[18] != '-' || s[23] != '-' {
		return uuid, errors.New("invalid UUID format")
	}
	for i, x := range [16]int{
		0, 2, 4, 6,
		9, 11,
		14, 16,
		19, 21,
		24, 26, 28, 30, 32, 34} {
		v, ok := xtob(s[x], s[x+1])
		if !ok {
			return uuid, errors.New("invalid UUID format")
		}
		uuid[i] = v
	}
	return uuid, nil
}

// ParseBytes is like Parse, except it parses a byte slice instead of a string.
func ParseBytes(b []byte) (UUID, error) {
	var uuid UUID
	switch len(b) {
	case 36: // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
	case 36 + 9: // urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
		if !bytes.Equal(bytes.ToLower(b[:9]), []byte("urn:uuid:")) {
			return uuid, fmt.Errorf("invalid urn prefix: %q", b[:9])
		}
		b = b[9:]
	case 36 + 2: // {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
		b = b[1:]
	case 32: // xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
		var ok bool
		for i := 0; i < 32; i += 2 {
			uuid[i/2], ok = xtob(b[i], b[i+1])
			if !ok {
				return uuid, errors.New("invalid UUID format")
			}
		}
		return uuid, nil
	default:
		return uuid, invalidLengthError{len(b)}
	}
	// s is now at least 36 bytes long
	// it must be of the form  xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
	if b[8] != '-' || b[13] != '-' || b[18] != '-' || b[23] != '-' {
		return uuid, errors.New("invalid UUID format")
	}
	for i, x := range [16]int{
		0, 2, 4, 6,
		9, 11,
		14, 16,
		19, 21,
		24, 26, 28, 30, 32, 34} {
		v, ok := xtob(b[x], b[x+1])
		if !ok {
			return uuid, errors.New("invalid UUID format")
		}
		uuid[i] = v
	}
	return uuid, nil
}

// MustParse is like Parse but panics if the string cannot be parsed.
// It simplifies safe initialization of global variables holding compiled UUIDs.
func MustParse(s string) UUID {
	uuid, err := Parse(s)
	if err != nil {
		panic(`uuid: Parse(` + s + `): ` + err.Error())
	}
	return uuid
}

// FromBytes creates a new UUID from a byte slice. Returns an error if the slice
// does not have a length of 16. The bytes are copied from the slice.
func FromBytes(b []byte) (uuid UUID, err error) {
	err = uuid.UnmarshalBinary(b)
	return uuid, err
}

// Must returns uuid if err is nil and panics otherwise.
func Must(uuid UUID, err error) UUID {
	if err != nil {
		panic(err)
	}
	return uuid
}

// String returns the string form of uuid, xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
// , or "" if uuid is invalid.
func (uuid UUID) String() string {
	var buf [36]byte
	encodeHex(buf[:], uuid)
	return string(buf[:])
}

// URN returns the RFC 2141 URN form of uuid,
// urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,  or "" if uuid is invalid.
func (uuid UUID) URN() string {
	var buf [36 + 9]byte
	copy(buf[:], "urn:uuid:")
	encodeHex(buf[9:], uuid)
	return string(buf[:])
}

func encodeHex(dst []byte, uuid UUID) {
	hex.Encode(dst, uuid[:4])
	dst[8] = '-'
	hex.Encode(dst[9:13], uuid[4:6])
	dst[13] = '-'
	hex.Encode(dst[14:18], uuid[6:8])
	dst[18] = '-'
	hex.Encode(dst[19:23], uuid[8:10])
	dst[23] = '-'
	hex.Encode(dst[24:], uuid[10:])
}

// Variant returns the variant encoded in uuid.
func (uuid UUID) Variant() Variant {
	switch {
	case (uuid[8] & 0xc0) == 0x80:
		return RFC4122
	case (uuid[8] & 0xe0) == 0xc0:
		return Microsoft
	case (uuid[8] & 0xe0) == 0xe0:
		return Future
	default:
		return Reserved
	}
}

// Version returns the version of uuid.
func (uuid UUID) Version() Version {
	return Version(uuid[6] >> 4)
}

func (v Version) String() string {
	if v > 15 {
		return fmt.Sprintf("BAD_VERSION_%d", v)
	}
	return fmt.Sprintf("VERSION_%d", v)
}

func (v Variant) String() string {
	switch v {
	case RFC4122:
		return "RFC4122"
	case Reserved:
		return "Reserved"
	case Microsoft:
		return "Microsoft"
	case Future:
		return "Future"
	case Invalid:
		return "Invalid"
	}
	return fmt.Sprintf("BadVariant%d", int(v))
}

// SetRand sets the random number generator to r, which implements io.Reader.
// If r.Read returns an error when the package requests random data then
// a panic will be issued.
//
// Calling SetRand with nil sets the random number generator to the default
// generator.
func SetRand(r io.Reader) {
	if r == nil {
		rander = rand.Reader
		return
	}
	rander = r
}

// EnableRandPool enables internal randomness pool used for Random
// (Version 4) UUID generation. The pool contains random bytes read from
// the random number generator on demand in batches. Enabling the pool
// may improve the UUID generation throughput significantly.
//
// Since the pool is stored on the Go heap, this feature may be a bad fit
// for security sensitive applications.
//
// Both EnableRandPool and DisableRandPool are not thread-safe and should
// only be called when there is no possibility that New or any other
// UUID Version 4 generation function will be called concurrently.
func EnableRandPool() {
	poolEnabled = true
}

// DisableRandPool disables the randomness pool if it was previously
// enabled with EnableRandPool.
//
// Both EnableRandPool and DisableRandPool are not thread-safe and should
// only be called when there is no possibility that New or any other
// UUID Version 4 generation function will be called concurrently.
func DisableRandPool() {
	poolEnabled = false
	defer poolMu.Unlock()
	poolMu.Lock()
	poolPos = randPoolSize
}
0707010000072F000081A4000000000000000000000001645E367C000004E9000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/google/uuid/version1.go // Copyright 2016 Google Inc.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package uuid

import (
	"encoding/binary"
)

// NewUUID returns a Version 1 UUID based on the current NodeID and clock
// sequence, and the current time.  If the NodeID has not been set by SetNodeID
// or SetNodeInterface then it will be set automatically.  If the NodeID cannot
// be set NewUUID returns nil.  If clock sequence has not been set by
// SetClockSequence then it will be set automatically.  If GetTime fails to
// return the current NewUUID returns nil and an error.
//
// In most cases, New should be used.
func NewUUID() (UUID, error) {
	var uuid UUID
	now, seq, err := GetTime()
	if err != nil {
		return uuid, err
	}

	timeLow := uint32(now & 0xffffffff)
	timeMid := uint16((now >> 32) & 0xffff)
	timeHi := uint16((now >> 48) & 0x0fff)
	timeHi |= 0x1000 // Version 1

	binary.BigEndian.PutUint32(uuid[0:], timeLow)
	binary.BigEndian.PutUint16(uuid[4:], timeMid)
	binary.BigEndian.PutUint16(uuid[6:], timeHi)
	binary.BigEndian.PutUint16(uuid[8:], seq)

	nodeMu.Lock()
	if nodeID == zeroID {
		setNodeInterface("")
	}
	copy(uuid[10:], nodeID[:])
	nodeMu.Unlock()

	return uuid, nil
}
   07070100000730000081A4000000000000000000000001645E367C00000809000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/google/uuid/version4.go // Copyright 2016 Google Inc.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package uuid

import "io"

// New creates a new random UUID or panics.  New is equivalent to
// the expression
//
//    uuid.Must(uuid.NewRandom())
func New() UUID {
	return Must(NewRandom())
}

// NewString creates a new random UUID and returns it as a string or panics.
// NewString is equivalent to the expression
//
//    uuid.New().String()
func NewString() string {
	return Must(NewRandom()).String()
}

// NewRandom returns a Random (Version 4) UUID.
//
// The strength of the UUIDs is based on the strength of the crypto/rand
// package.
//
// Uses the randomness pool if it was enabled with EnableRandPool.
//
// A note about uniqueness derived from the UUID Wikipedia entry:
//
//  Randomly generated UUIDs have 122 random bits.  One's annual risk of being
//  hit by a meteorite is estimated to be one chance in 17 billion, that
//  means the probability is about 0.00000000006 (6 × 10−11),
//  equivalent to the odds of creating a few tens of trillions of UUIDs in a
//  year and having one duplicate.
func NewRandom() (UUID, error) {
	if !poolEnabled {
		return NewRandomFromReader(rander)
	}
	return newRandomFromPool()
}

// NewRandomFromReader returns a UUID based on bytes read from a given io.Reader.
func NewRandomFromReader(r io.Reader) (UUID, error) {
	var uuid UUID
	_, err := io.ReadFull(r, uuid[:])
	if err != nil {
		return Nil, err
	}
	uuid[6] = (uuid[6] & 0x0f) | 0x40 // Version 4
	uuid[8] = (uuid[8] & 0x3f) | 0x80 // Variant is 10
	return uuid, nil
}

func newRandomFromPool() (UUID, error) {
	var uuid UUID
	poolMu.Lock()
	if poolPos == randPoolSize {
		_, err := io.ReadFull(rander, pool[:])
		if err != nil {
			poolMu.Unlock()
			return Nil, err
		}
		poolPos = 0
	}
	copy(uuid[:], pool[poolPos:(poolPos+16)])
	poolPos += 16
	poolMu.Unlock()

	uuid[6] = (uuid[6] & 0x0f) | 0x40 // Version 4
	uuid[8] = (uuid[8] & 0x3f) | 0x80 // Variant is 10
	return uuid, nil
}
   07070100000731000041ED000000000000000000000005645E367C00000000000000000000000000000000000000000000003000000000elemental-cli-0.3.1/vendor/github.com/hashicorp   07070100000732000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/hashicorp/errwrap   07070100000733000081A4000000000000000000000001645E367C00003E69000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/hashicorp/errwrap/LICENSE   Mozilla Public License, version 2.0

1. Definitions

1.1. “Contributor”

     means each individual or legal entity that creates, contributes to the
     creation of, or owns Covered Software.

1.2. “Contributor Version”

     means the combination of the Contributions of others (if any) used by a
     Contributor and that particular Contributor’s Contribution.

1.3. “Contribution”

     means Covered Software of a particular Contributor.

1.4. “Covered Software”

     means Source Code Form to which the initial Contributor has attached the
     notice in Exhibit A, the Executable Form of such Source Code Form, and
     Modifications of such Source Code Form, in each case including portions
     thereof.

1.5. “Incompatible With Secondary Licenses”
     means

     a. that the initial Contributor has attached the notice described in
        Exhibit B to the Covered Software; or

     b. that the Covered Software was made available under the terms of version
        1.1 or earlier of the License, but not also under the terms of a
        Secondary License.

1.6. “Executable Form”

     means any form of the work other than Source Code Form.

1.7. “Larger Work”

     means a work that combines Covered Software with other material, in a separate
     file or files, that is not Covered Software.

1.8. “License”

     means this document.

1.9. “Licensable”

     means having the right to grant, to the maximum extent possible, whether at the
     time of the initial grant or subsequently, any and all of the rights conveyed by
     this License.

1.10. “Modifications”

     means any of the following:

     a. any file in Source Code Form that results from an addition to, deletion
        from, or modification of the contents of Covered Software; or

     b. any new file in Source Code Form that contains any Covered Software.

1.11. “Patent Claims” of a Contributor

      means any patent claim(s), including without limitation, method, process,
      and apparatus claims, in any patent Licensable by such Contributor that
      would be infringed, but for the grant of the License, by the making,
      using, selling, offering for sale, having made, import, or transfer of
      either its Contributions or its Contributor Version.

1.12. “Secondary License”

      means either the GNU General Public License, Version 2.0, the GNU Lesser
      General Public License, Version 2.1, the GNU Affero General Public
      License, Version 3.0, or any later versions of those licenses.

1.13. “Source Code Form”

      means the form of the work preferred for making modifications.

1.14. “You” (or “Your”)

      means an individual or a legal entity exercising rights under this
      License. For legal entities, “You” includes any entity that controls, is
      controlled by, or is under common control with You. For purposes of this
      definition, “control” means (a) the power, direct or indirect, to cause
      the direction or management of such entity, whether by contract or
      otherwise, or (b) ownership of more than fifty percent (50%) of the
      outstanding shares or beneficial ownership of such entity.


2. License Grants and Conditions

2.1. Grants

     Each Contributor hereby grants You a world-wide, royalty-free,
     non-exclusive license:

     a. under intellectual property rights (other than patent or trademark)
        Licensable by such Contributor to use, reproduce, make available,
        modify, display, perform, distribute, and otherwise exploit its
        Contributions, either on an unmodified basis, with Modifications, or as
        part of a Larger Work; and

     b. under Patent Claims of such Contributor to make, use, sell, offer for
        sale, have made, import, and otherwise transfer either its Contributions
        or its Contributor Version.

2.2. Effective Date

     The licenses granted in Section 2.1 with respect to any Contribution become
     effective for each Contribution on the date the Contributor first distributes
     such Contribution.

2.3. Limitations on Grant Scope

     The licenses granted in this Section 2 are the only rights granted under this
     License. No additional rights or licenses will be implied from the distribution
     or licensing of Covered Software under this License. Notwithstanding Section
     2.1(b) above, no patent license is granted by a Contributor:

     a. for any code that a Contributor has removed from Covered Software; or

     b. for infringements caused by: (i) Your and any other third party’s
        modifications of Covered Software, or (ii) the combination of its
        Contributions with other software (except as part of its Contributor
        Version); or

     c. under Patent Claims infringed by Covered Software in the absence of its
        Contributions.

     This License does not grant any rights in the trademarks, service marks, or
     logos of any Contributor (except as may be necessary to comply with the
     notice requirements in Section 3.4).

2.4. Subsequent Licenses

     No Contributor makes additional grants as a result of Your choice to
     distribute the Covered Software under a subsequent version of this License
     (see Section 10.2) or under the terms of a Secondary License (if permitted
     under the terms of Section 3.3).

2.5. Representation

     Each Contributor represents that the Contributor believes its Contributions
     are its original creation(s) or it has sufficient rights to grant the
     rights to its Contributions conveyed by this License.

2.6. Fair Use

     This License is not intended to limit any rights You have under applicable
     copyright doctrines of fair use, fair dealing, or other equivalents.

2.7. Conditions

     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in
     Section 2.1.


3. Responsibilities

3.1. Distribution of Source Form

     All distribution of Covered Software in Source Code Form, including any
     Modifications that You create or to which You contribute, must be under the
     terms of this License. You must inform recipients that the Source Code Form
     of the Covered Software is governed by the terms of this License, and how
     they can obtain a copy of this License. You may not attempt to alter or
     restrict the recipients’ rights in the Source Code Form.

3.2. Distribution of Executable Form

     If You distribute Covered Software in Executable Form then:

     a. such Covered Software must also be made available in Source Code Form,
        as described in Section 3.1, and You must inform recipients of the
        Executable Form how they can obtain a copy of such Source Code Form by
        reasonable means in a timely manner, at a charge no more than the cost
        of distribution to the recipient; and

     b. You may distribute such Executable Form under the terms of this License,
        or sublicense it under different terms, provided that the license for
        the Executable Form does not attempt to limit or alter the recipients’
        rights in the Source Code Form under this License.

3.3. Distribution of a Larger Work

     You may create and distribute a Larger Work under terms of Your choice,
     provided that You also comply with the requirements of this License for the
     Covered Software. If the Larger Work is a combination of Covered Software
     with a work governed by one or more Secondary Licenses, and the Covered
     Software is not Incompatible With Secondary Licenses, this License permits
     You to additionally distribute such Covered Software under the terms of
     such Secondary License(s), so that the recipient of the Larger Work may, at
     their option, further distribute the Covered Software under the terms of
     either this License or such Secondary License(s).

3.4. Notices

     You may not remove or alter the substance of any license notices (including
     copyright notices, patent notices, disclaimers of warranty, or limitations
     of liability) contained within the Source Code Form of the Covered
     Software, except that You may alter any license notices to the extent
     required to remedy known factual inaccuracies.

3.5. Application of Additional Terms

     You may choose to offer, and to charge a fee for, warranty, support,
     indemnity or liability obligations to one or more recipients of Covered
     Software. However, You may do so only on Your own behalf, and not on behalf
     of any Contributor. You must make it absolutely clear that any such
     warranty, support, indemnity, or liability obligation is offered by You
     alone, and You hereby agree to indemnify every Contributor for any
     liability incurred by such Contributor as a result of warranty, support,
     indemnity or liability terms You offer. You may include additional
     disclaimers of warranty and limitations of liability specific to any
     jurisdiction.

4. Inability to Comply Due to Statute or Regulation

   If it is impossible for You to comply with any of the terms of this License
   with respect to some or all of the Covered Software due to statute, judicial
   order, or regulation then You must: (a) comply with the terms of this License
   to the maximum extent possible; and (b) describe the limitations and the code
   they affect. Such description must be placed in a text file included with all
   distributions of the Covered Software under this License. Except to the
   extent prohibited by statute or regulation, such description must be
   sufficiently detailed for a recipient of ordinary skill to be able to
   understand it.

5. Termination

5.1. The rights granted under this License will terminate automatically if You
     fail to comply with any of its terms. However, if You become compliant,
     then the rights granted under this License from a particular Contributor
     are reinstated (a) provisionally, unless and until such Contributor
     explicitly and finally terminates Your grants, and (b) on an ongoing basis,
     if such Contributor fails to notify You of the non-compliance by some
     reasonable means prior to 60 days after You have come back into compliance.
     Moreover, Your grants from a particular Contributor are reinstated on an
     ongoing basis if such Contributor notifies You of the non-compliance by
     some reasonable means, this is the first time You have received notice of
     non-compliance with this License from such Contributor, and You become
     compliant prior to 30 days after Your receipt of the notice.

5.2. If You initiate litigation against any entity by asserting a patent
     infringement claim (excluding declaratory judgment actions, counter-claims,
     and cross-claims) alleging that a Contributor Version directly or
     indirectly infringes any patent, then the rights granted to You by any and
     all Contributors for the Covered Software under Section 2.1 of this License
     shall terminate.

5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user
     license agreements (excluding distributors and resellers) which have been
     validly granted by You or Your distributors under this License prior to
     termination shall survive termination.

6. Disclaimer of Warranty

   Covered Software is provided under this License on an “as is” basis, without
   warranty of any kind, either expressed, implied, or statutory, including,
   without limitation, warranties that the Covered Software is free of defects,
   merchantable, fit for a particular purpose or non-infringing. The entire
   risk as to the quality and performance of the Covered Software is with You.
   Should any Covered Software prove defective in any respect, You (not any
   Contributor) assume the cost of any necessary servicing, repair, or
   correction. This disclaimer of warranty constitutes an essential part of this
   License. No use of  any Covered Software is authorized under this License
   except under this disclaimer.

7. Limitation of Liability

   Under no circumstances and under no legal theory, whether tort (including
   negligence), contract, or otherwise, shall any Contributor, or anyone who
   distributes Covered Software as permitted above, be liable to You for any
   direct, indirect, special, incidental, or consequential damages of any
   character including, without limitation, damages for lost profits, loss of
   goodwill, work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses, even if such party shall have been
   informed of the possibility of such damages. This limitation of liability
   shall not apply to liability for death or personal injury resulting from such
   party’s negligence to the extent applicable law prohibits such limitation.
   Some jurisdictions do not allow the exclusion or limitation of incidental or
   consequential damages, so this exclusion and limitation may not apply to You.

8. Litigation

   Any litigation relating to this License may be brought only in the courts of
   a jurisdiction where the defendant maintains its principal place of business
   and such litigation shall be governed by laws of that jurisdiction, without
   reference to its conflict-of-law provisions. Nothing in this Section shall
   prevent a party’s ability to bring cross-claims or counter-claims.

9. Miscellaneous

   This License represents the complete agreement concerning the subject matter
   hereof. If any provision of this License is held to be unenforceable, such
   provision shall be reformed only to the extent necessary to make it
   enforceable. Any law or regulation which provides that the language of a
   contract shall be construed against the drafter shall not be used to construe
   this License against a Contributor.


10. Versions of the License

10.1. New Versions

      Mozilla Foundation is the license steward. Except as provided in Section
      10.3, no one other than the license steward has the right to modify or
      publish new versions of this License. Each version will be given a
      distinguishing version number.

10.2. Effect of New Versions

      You may distribute the Covered Software under the terms of the version of
      the License under which You originally received the Covered Software, or
      under the terms of any subsequent version published by the license
      steward.

10.3. Modified Versions

      If you create software not governed by this License, and you want to
      create a new license for such software, you may create and use a modified
      version of this License if you rename the license and remove any
      references to the name of the license steward (except to note that such
      modified license differs from this License).

10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses
      If You choose to distribute Source Code Form that is Incompatible With
      Secondary Licenses under the terms of this version of the License, the
      notice described in Exhibit B of this License must be attached.

Exhibit A - Source Code Form License Notice

      This Source Code Form is subject to the
      terms of the Mozilla Public License, v.
      2.0. If a copy of the MPL was not
      distributed with this file, You can
      obtain one at
      http://mozilla.org/MPL/2.0/.

If it is not possible or desirable to put the notice in a particular file, then
You may include the notice in a location (such as a LICENSE file in a relevant
directory) where a recipient would be likely to look for such a notice.

You may add additional accurate notices of copyright ownership.

Exhibit B - “Incompatible With Secondary Licenses” Notice

      This Source Code Form is “Incompatible
      With Secondary Licenses”, as defined by
      the Mozilla Public License, v. 2.0.

   07070100000734000081A4000000000000000000000001645E367C000009B4000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/hashicorp/errwrap/README.md # errwrap

`errwrap` is a package for Go that formalizes the pattern of wrapping errors
and checking if an error contains another error.

There is a common pattern in Go of taking a returned `error` value and
then wrapping it (such as with `fmt.Errorf`) before returning it. The problem
with this pattern is that you completely lose the original `error` structure.

Arguably the _correct_ approach is that you should make a custom structure
implementing the `error` interface, and have the original error as a field
on that structure, such [as this example](http://golang.org/pkg/os/#PathError).
This is a good approach, but you have to know the entire chain of possible
rewrapping that happens, when you might just care about one.

`errwrap` formalizes this pattern (it doesn't matter what approach you use
above) by giving a single interface for wrapping errors, checking if a specific
error is wrapped, and extracting that error.

## Installation and Docs

Install using `go get github.com/hashicorp/errwrap`.

Full documentation is available at
http://godoc.org/github.com/hashicorp/errwrap

## Usage

#### Basic Usage

Below is a very basic example of its usage:

```go
// A function that always returns an error, but wraps it, like a real
// function might.
func tryOpen() error {
	_, err := os.Open("/i/dont/exist")
	if err != nil {
		return errwrap.Wrapf("Doesn't exist: {{err}}", err)
	}

	return nil
}

func main() {
	err := tryOpen()

	// We can use the Contains helpers to check if an error contains
	// another error. It is safe to do this with a nil error, or with
	// an error that doesn't even use the errwrap package.
	if errwrap.Contains(err, "does not exist") {
		// Do something
	}
	if errwrap.ContainsType(err, new(os.PathError)) {
		// Do something
	}

	// Or we can use the associated `Get` functions to just extract
	// a specific error. This would return nil if that specific error doesn't
	// exist.
	perr := errwrap.GetType(err, new(os.PathError))
}
```

#### Custom Types

If you're already making custom types that properly wrap errors, then
you can get all the functionality of `errwraps.Contains` and such by
implementing the `Wrapper` interface with just one function. Example:

```go
type AppError {
  Code ErrorCode
  Err  error
}

func (e *AppError) WrappedErrors() []error {
  return []error{e.Err}
}
```

Now this works:

```go
err := &AppError{Err: fmt.Errorf("an error")}
if errwrap.ContainsType(err, fmt.Errorf("")) {
	// This will work!
}
```
07070100000735000081A4000000000000000000000001645E367C000011BB000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/hashicorp/errwrap/errwrap.go    // Package errwrap implements methods to formalize error wrapping in Go.
//
// All of the top-level functions that take an `error` are built to be able
// to take any error, not just wrapped errors. This allows you to use errwrap
// without having to type-check and type-cast everywhere.
package errwrap

import (
	"errors"
	"reflect"
	"strings"
)

// WalkFunc is the callback called for Walk.
type WalkFunc func(error)

// Wrapper is an interface that can be implemented by custom types to
// have all the Contains, Get, etc. functions in errwrap work.
//
// When Walk reaches a Wrapper, it will call the callback for every
// wrapped error in addition to the wrapper itself. Since all the top-level
// functions in errwrap use Walk, this means that all those functions work
// with your custom type.
type Wrapper interface {
	WrappedErrors() []error
}

// Wrap defines that outer wraps inner, returning an error type that
// can be cleanly used with the other methods in this package, such as
// Contains, GetAll, etc.
//
// This function won't modify the error message at all (the outer message
// will be used).
func Wrap(outer, inner error) error {
	return &wrappedError{
		Outer: outer,
		Inner: inner,
	}
}

// Wrapf wraps an error with a formatting message. This is similar to using
// `fmt.Errorf` to wrap an error. If you're using `fmt.Errorf` to wrap
// errors, you should replace it with this.
//
// format is the format of the error message. The string '{{err}}' will
// be replaced with the original error message.
//
// Deprecated: Use fmt.Errorf()
func Wrapf(format string, err error) error {
	outerMsg := "<nil>"
	if err != nil {
		outerMsg = err.Error()
	}

	outer := errors.New(strings.Replace(
		format, "{{err}}", outerMsg, -1))

	return Wrap(outer, err)
}

// Contains checks if the given error contains an error with the
// message msg. If err is not a wrapped error, this will always return
// false unless the error itself happens to match this msg.
func Contains(err error, msg string) bool {
	return len(GetAll(err, msg)) > 0
}

// ContainsType checks if the given error contains an error with
// the same concrete type as v. If err is not a wrapped error, this will
// check the err itself.
func ContainsType(err error, v interface{}) bool {
	return len(GetAllType(err, v)) > 0
}

// Get is the same as GetAll but returns the deepest matching error.
func Get(err error, msg string) error {
	es := GetAll(err, msg)
	if len(es) > 0 {
		return es[len(es)-1]
	}

	return nil
}

// GetType is the same as GetAllType but returns the deepest matching error.
func GetType(err error, v interface{}) error {
	es := GetAllType(err, v)
	if len(es) > 0 {
		return es[len(es)-1]
	}

	return nil
}

// GetAll gets all the errors that might be wrapped in err with the
// given message. The order of the errors is such that the outermost
// matching error (the most recent wrap) is index zero, and so on.
func GetAll(err error, msg string) []error {
	var result []error

	Walk(err, func(err error) {
		if err.Error() == msg {
			result = append(result, err)
		}
	})

	return result
}

// GetAllType gets all the errors that are the same type as v.
//
// The order of the return value is the same as described in GetAll.
func GetAllType(err error, v interface{}) []error {
	var result []error

	var search string
	if v != nil {
		search = reflect.TypeOf(v).String()
	}
	Walk(err, func(err error) {
		var needle string
		if err != nil {
			needle = reflect.TypeOf(err).String()
		}

		if needle == search {
			result = append(result, err)
		}
	})

	return result
}

// Walk walks all the wrapped errors in err and calls the callback. If
// err isn't a wrapped error, this will be called once for err. If err
// is a wrapped error, the callback will be called for both the wrapper
// that implements error as well as the wrapped error itself.
func Walk(err error, cb WalkFunc) {
	if err == nil {
		return
	}

	switch e := err.(type) {
	case *wrappedError:
		cb(e.Outer)
		Walk(e.Inner, cb)
	case Wrapper:
		cb(err)

		for _, err := range e.WrappedErrors() {
			Walk(err, cb)
		}
	case interface{ Unwrap() error }:
		cb(err)
		Walk(e.Unwrap(), cb)
	default:
		cb(err)
	}
}

// wrappedError is an implementation of error that has both the
// outer and inner errors.
type wrappedError struct {
	Outer error
	Inner error
}

func (w *wrappedError) Error() string {
	return w.Outer.Error()
}

func (w *wrappedError) WrappedErrors() []error {
	return []error{w.Outer, w.Inner}
}

func (w *wrappedError) Unwrap() error {
	return w.Inner
}
 07070100000736000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/hashicorp/go-multierror 07070100000737000081A4000000000000000000000001645E367C00003E68000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/hashicorp/go-multierror/LICENSE Mozilla Public License, version 2.0

1. Definitions

1.1. “Contributor”

     means each individual or legal entity that creates, contributes to the
     creation of, or owns Covered Software.

1.2. “Contributor Version”

     means the combination of the Contributions of others (if any) used by a
     Contributor and that particular Contributor’s Contribution.

1.3. “Contribution”

     means Covered Software of a particular Contributor.

1.4. “Covered Software”

     means Source Code Form to which the initial Contributor has attached the
     notice in Exhibit A, the Executable Form of such Source Code Form, and
     Modifications of such Source Code Form, in each case including portions
     thereof.

1.5. “Incompatible With Secondary Licenses”
     means

     a. that the initial Contributor has attached the notice described in
        Exhibit B to the Covered Software; or

     b. that the Covered Software was made available under the terms of version
        1.1 or earlier of the License, but not also under the terms of a
        Secondary License.

1.6. “Executable Form”

     means any form of the work other than Source Code Form.

1.7. “Larger Work”

     means a work that combines Covered Software with other material, in a separate
     file or files, that is not Covered Software.

1.8. “License”

     means this document.

1.9. “Licensable”

     means having the right to grant, to the maximum extent possible, whether at the
     time of the initial grant or subsequently, any and all of the rights conveyed by
     this License.

1.10. “Modifications”

     means any of the following:

     a. any file in Source Code Form that results from an addition to, deletion
        from, or modification of the contents of Covered Software; or

     b. any new file in Source Code Form that contains any Covered Software.

1.11. “Patent Claims” of a Contributor

      means any patent claim(s), including without limitation, method, process,
      and apparatus claims, in any patent Licensable by such Contributor that
      would be infringed, but for the grant of the License, by the making,
      using, selling, offering for sale, having made, import, or transfer of
      either its Contributions or its Contributor Version.

1.12. “Secondary License”

      means either the GNU General Public License, Version 2.0, the GNU Lesser
      General Public License, Version 2.1, the GNU Affero General Public
      License, Version 3.0, or any later versions of those licenses.

1.13. “Source Code Form”

      means the form of the work preferred for making modifications.

1.14. “You” (or “Your”)

      means an individual or a legal entity exercising rights under this
      License. For legal entities, “You” includes any entity that controls, is
      controlled by, or is under common control with You. For purposes of this
      definition, “control” means (a) the power, direct or indirect, to cause
      the direction or management of such entity, whether by contract or
      otherwise, or (b) ownership of more than fifty percent (50%) of the
      outstanding shares or beneficial ownership of such entity.


2. License Grants and Conditions

2.1. Grants

     Each Contributor hereby grants You a world-wide, royalty-free,
     non-exclusive license:

     a. under intellectual property rights (other than patent or trademark)
        Licensable by such Contributor to use, reproduce, make available,
        modify, display, perform, distribute, and otherwise exploit its
        Contributions, either on an unmodified basis, with Modifications, or as
        part of a Larger Work; and

     b. under Patent Claims of such Contributor to make, use, sell, offer for
        sale, have made, import, and otherwise transfer either its Contributions
        or its Contributor Version.

2.2. Effective Date

     The licenses granted in Section 2.1 with respect to any Contribution become
     effective for each Contribution on the date the Contributor first distributes
     such Contribution.

2.3. Limitations on Grant Scope

     The licenses granted in this Section 2 are the only rights granted under this
     License. No additional rights or licenses will be implied from the distribution
     or licensing of Covered Software under this License. Notwithstanding Section
     2.1(b) above, no patent license is granted by a Contributor:

     a. for any code that a Contributor has removed from Covered Software; or

     b. for infringements caused by: (i) Your and any other third party’s
        modifications of Covered Software, or (ii) the combination of its
        Contributions with other software (except as part of its Contributor
        Version); or

     c. under Patent Claims infringed by Covered Software in the absence of its
        Contributions.

     This License does not grant any rights in the trademarks, service marks, or
     logos of any Contributor (except as may be necessary to comply with the
     notice requirements in Section 3.4).

2.4. Subsequent Licenses

     No Contributor makes additional grants as a result of Your choice to
     distribute the Covered Software under a subsequent version of this License
     (see Section 10.2) or under the terms of a Secondary License (if permitted
     under the terms of Section 3.3).

2.5. Representation

     Each Contributor represents that the Contributor believes its Contributions
     are its original creation(s) or it has sufficient rights to grant the
     rights to its Contributions conveyed by this License.

2.6. Fair Use

     This License is not intended to limit any rights You have under applicable
     copyright doctrines of fair use, fair dealing, or other equivalents.

2.7. Conditions

     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in
     Section 2.1.


3. Responsibilities

3.1. Distribution of Source Form

     All distribution of Covered Software in Source Code Form, including any
     Modifications that You create or to which You contribute, must be under the
     terms of this License. You must inform recipients that the Source Code Form
     of the Covered Software is governed by the terms of this License, and how
     they can obtain a copy of this License. You may not attempt to alter or
     restrict the recipients’ rights in the Source Code Form.

3.2. Distribution of Executable Form

     If You distribute Covered Software in Executable Form then:

     a. such Covered Software must also be made available in Source Code Form,
        as described in Section 3.1, and You must inform recipients of the
        Executable Form how they can obtain a copy of such Source Code Form by
        reasonable means in a timely manner, at a charge no more than the cost
        of distribution to the recipient; and

     b. You may distribute such Executable Form under the terms of this License,
        or sublicense it under different terms, provided that the license for
        the Executable Form does not attempt to limit or alter the recipients’
        rights in the Source Code Form under this License.

3.3. Distribution of a Larger Work

     You may create and distribute a Larger Work under terms of Your choice,
     provided that You also comply with the requirements of this License for the
     Covered Software. If the Larger Work is a combination of Covered Software
     with a work governed by one or more Secondary Licenses, and the Covered
     Software is not Incompatible With Secondary Licenses, this License permits
     You to additionally distribute such Covered Software under the terms of
     such Secondary License(s), so that the recipient of the Larger Work may, at
     their option, further distribute the Covered Software under the terms of
     either this License or such Secondary License(s).

3.4. Notices

     You may not remove or alter the substance of any license notices (including
     copyright notices, patent notices, disclaimers of warranty, or limitations
     of liability) contained within the Source Code Form of the Covered
     Software, except that You may alter any license notices to the extent
     required to remedy known factual inaccuracies.

3.5. Application of Additional Terms

     You may choose to offer, and to charge a fee for, warranty, support,
     indemnity or liability obligations to one or more recipients of Covered
     Software. However, You may do so only on Your own behalf, and not on behalf
     of any Contributor. You must make it absolutely clear that any such
     warranty, support, indemnity, or liability obligation is offered by You
     alone, and You hereby agree to indemnify every Contributor for any
     liability incurred by such Contributor as a result of warranty, support,
     indemnity or liability terms You offer. You may include additional
     disclaimers of warranty and limitations of liability specific to any
     jurisdiction.

4. Inability to Comply Due to Statute or Regulation

   If it is impossible for You to comply with any of the terms of this License
   with respect to some or all of the Covered Software due to statute, judicial
   order, or regulation then You must: (a) comply with the terms of this License
   to the maximum extent possible; and (b) describe the limitations and the code
   they affect. Such description must be placed in a text file included with all
   distributions of the Covered Software under this License. Except to the
   extent prohibited by statute or regulation, such description must be
   sufficiently detailed for a recipient of ordinary skill to be able to
   understand it.

5. Termination

5.1. The rights granted under this License will terminate automatically if You
     fail to comply with any of its terms. However, if You become compliant,
     then the rights granted under this License from a particular Contributor
     are reinstated (a) provisionally, unless and until such Contributor
     explicitly and finally terminates Your grants, and (b) on an ongoing basis,
     if such Contributor fails to notify You of the non-compliance by some
     reasonable means prior to 60 days after You have come back into compliance.
     Moreover, Your grants from a particular Contributor are reinstated on an
     ongoing basis if such Contributor notifies You of the non-compliance by
     some reasonable means, this is the first time You have received notice of
     non-compliance with this License from such Contributor, and You become
     compliant prior to 30 days after Your receipt of the notice.

5.2. If You initiate litigation against any entity by asserting a patent
     infringement claim (excluding declaratory judgment actions, counter-claims,
     and cross-claims) alleging that a Contributor Version directly or
     indirectly infringes any patent, then the rights granted to You by any and
     all Contributors for the Covered Software under Section 2.1 of this License
     shall terminate.

5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user
     license agreements (excluding distributors and resellers) which have been
     validly granted by You or Your distributors under this License prior to
     termination shall survive termination.

6. Disclaimer of Warranty

   Covered Software is provided under this License on an “as is” basis, without
   warranty of any kind, either expressed, implied, or statutory, including,
   without limitation, warranties that the Covered Software is free of defects,
   merchantable, fit for a particular purpose or non-infringing. The entire
   risk as to the quality and performance of the Covered Software is with You.
   Should any Covered Software prove defective in any respect, You (not any
   Contributor) assume the cost of any necessary servicing, repair, or
   correction. This disclaimer of warranty constitutes an essential part of this
   License. No use of  any Covered Software is authorized under this License
   except under this disclaimer.

7. Limitation of Liability

   Under no circumstances and under no legal theory, whether tort (including
   negligence), contract, or otherwise, shall any Contributor, or anyone who
   distributes Covered Software as permitted above, be liable to You for any
   direct, indirect, special, incidental, or consequential damages of any
   character including, without limitation, damages for lost profits, loss of
   goodwill, work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses, even if such party shall have been
   informed of the possibility of such damages. This limitation of liability
   shall not apply to liability for death or personal injury resulting from such
   party’s negligence to the extent applicable law prohibits such limitation.
   Some jurisdictions do not allow the exclusion or limitation of incidental or
   consequential damages, so this exclusion and limitation may not apply to You.

8. Litigation

   Any litigation relating to this License may be brought only in the courts of
   a jurisdiction where the defendant maintains its principal place of business
   and such litigation shall be governed by laws of that jurisdiction, without
   reference to its conflict-of-law provisions. Nothing in this Section shall
   prevent a party’s ability to bring cross-claims or counter-claims.

9. Miscellaneous

   This License represents the complete agreement concerning the subject matter
   hereof. If any provision of this License is held to be unenforceable, such
   provision shall be reformed only to the extent necessary to make it
   enforceable. Any law or regulation which provides that the language of a
   contract shall be construed against the drafter shall not be used to construe
   this License against a Contributor.


10. Versions of the License

10.1. New Versions

      Mozilla Foundation is the license steward. Except as provided in Section
      10.3, no one other than the license steward has the right to modify or
      publish new versions of this License. Each version will be given a
      distinguishing version number.

10.2. Effect of New Versions

      You may distribute the Covered Software under the terms of the version of
      the License under which You originally received the Covered Software, or
      under the terms of any subsequent version published by the license
      steward.

10.3. Modified Versions

      If you create software not governed by this License, and you want to
      create a new license for such software, you may create and use a modified
      version of this License if you rename the license and remove any
      references to the name of the license steward (except to note that such
      modified license differs from this License).

10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses
      If You choose to distribute Source Code Form that is Incompatible With
      Secondary Licenses under the terms of this version of the License, the
      notice described in Exhibit B of this License must be attached.

Exhibit A - Source Code Form License Notice

      This Source Code Form is subject to the
      terms of the Mozilla Public License, v.
      2.0. If a copy of the MPL was not
      distributed with this file, You can
      obtain one at
      http://mozilla.org/MPL/2.0/.

If it is not possible or desirable to put the notice in a particular file, then
You may include the notice in a location (such as a LICENSE file in a relevant
directory) where a recipient would be likely to look for such a notice.

You may add additional accurate notices of copyright ownership.

Exhibit B - “Incompatible With Secondary Licenses” Notice

      This Source Code Form is “Incompatible
      With Secondary Licenses”, as defined by
      the Mozilla Public License, v. 2.0.
07070100000738000081A4000000000000000000000001645E367C00000335000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/hashicorp/go-multierror/Makefile    TEST?=./...

default: test

# test runs the test suite and vets the code.
test: generate
	@echo "==> Running tests..."
	@go list $(TEST) \
		| grep -v "/vendor/" \
		| xargs -n1 go test -timeout=60s -parallel=10 ${TESTARGS}

# testrace runs the race checker
testrace: generate
	@echo "==> Running tests (race)..."
	@go list $(TEST) \
		| grep -v "/vendor/" \
		| xargs -n1 go test -timeout=60s -race ${TESTARGS}

# updatedeps installs all the dependencies needed to run and build.
updatedeps:
	@sh -c "'${CURDIR}/scripts/deps.sh' '${NAME}'"

# generate runs `go generate` to build the dynamically generated source files.
generate:
	@echo "==> Generating..."
	@find . -type f -name '.DS_Store' -delete
	@go list ./... \
		| grep -v "/vendor/" \
		| xargs -n1 go generate

.PHONY: default test testrace updatedeps generate
   07070100000739000081A4000000000000000000000001645E367C00001296000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/hashicorp/go-multierror/README.md   # go-multierror

[![CircleCI](https://img.shields.io/circleci/build/github/hashicorp/go-multierror/master)](https://circleci.com/gh/hashicorp/go-multierror)
[![Go Reference](https://pkg.go.dev/badge/github.com/hashicorp/go-multierror.svg)](https://pkg.go.dev/github.com/hashicorp/go-multierror)
![GitHub go.mod Go version](https://img.shields.io/github/go-mod/go-version/hashicorp/go-multierror)

[circleci]: https://app.circleci.com/pipelines/github/hashicorp/go-multierror
[godocs]: https://pkg.go.dev/github.com/hashicorp/go-multierror

`go-multierror` is a package for Go that provides a mechanism for
representing a list of `error` values as a single `error`.

This allows a function in Go to return an `error` that might actually
be a list of errors. If the caller knows this, they can unwrap the
list and access the errors. If the caller doesn't know, the error
formats to a nice human-readable format.

`go-multierror` is fully compatible with the Go standard library
[errors](https://golang.org/pkg/errors/) package, including the
functions `As`, `Is`, and `Unwrap`. This provides a standardized approach
for introspecting on error values.

## Installation and Docs

Install using `go get github.com/hashicorp/go-multierror`.

Full documentation is available at
https://pkg.go.dev/github.com/hashicorp/go-multierror

### Requires go version 1.13 or newer

`go-multierror` requires go version 1.13 or newer. Go 1.13 introduced
[error wrapping](https://golang.org/doc/go1.13#error_wrapping), which
this library takes advantage of.

If you need to use an earlier version of go, you can use the
[v1.0.0](https://github.com/hashicorp/go-multierror/tree/v1.0.0)
tag, which doesn't rely on features in go 1.13.

If you see compile errors that look like the below, it's likely that
you're on an older version of go:

```
/go/src/github.com/hashicorp/go-multierror/multierror.go:112:9: undefined: errors.As
/go/src/github.com/hashicorp/go-multierror/multierror.go:117:9: undefined: errors.Is
```

## Usage

go-multierror is easy to use and purposely built to be unobtrusive in
existing Go applications/libraries that may not be aware of it.

**Building a list of errors**

The `Append` function is used to create a list of errors. This function
behaves a lot like the Go built-in `append` function: it doesn't matter
if the first argument is nil, a `multierror.Error`, or any other `error`,
the function behaves as you would expect.

```go
var result error

if err := step1(); err != nil {
	result = multierror.Append(result, err)
}
if err := step2(); err != nil {
	result = multierror.Append(result, err)
}

return result
```

**Customizing the formatting of the errors**

By specifying a custom `ErrorFormat`, you can customize the format
of the `Error() string` function:

```go
var result *multierror.Error

// ... accumulate errors here, maybe using Append

if result != nil {
	result.ErrorFormat = func([]error) string {
		return "errors!"
	}
}
```

**Accessing the list of errors**

`multierror.Error` implements `error` so if the caller doesn't know about
multierror, it will work just fine. But if you're aware a multierror might
be returned, you can use type switches to access the list of errors:

```go
if err := something(); err != nil {
	if merr, ok := err.(*multierror.Error); ok {
		// Use merr.Errors
	}
}
```

You can also use the standard [`errors.Unwrap`](https://golang.org/pkg/errors/#Unwrap)
function. This will continue to unwrap into subsequent errors until none exist.

**Extracting an error**

The standard library [`errors.As`](https://golang.org/pkg/errors/#As)
function can be used directly with a multierror to extract a specific error:

```go
// Assume err is a multierror value
err := somefunc()

// We want to know if "err" has a "RichErrorType" in it and extract it.
var errRich RichErrorType
if errors.As(err, &errRich) {
	// It has it, and now errRich is populated.
}
```

**Checking for an exact error value**

Some errors are returned as exact errors such as the [`ErrNotExist`](https://golang.org/pkg/os/#pkg-variables)
error in the `os` package. You can check if this error is present by using
the standard [`errors.Is`](https://golang.org/pkg/errors/#Is) function.

```go
// Assume err is a multierror value
err := somefunc()
if errors.Is(err, os.ErrNotExist) {
	// err contains os.ErrNotExist
}
```

**Returning a multierror only if there are errors**

If you build a `multierror.Error`, you can use the `ErrorOrNil` function
to return an `error` implementation only if there are errors to return:

```go
var result *multierror.Error

// ... accumulate errors here

// Return the `error` only if errors were added to the multierror, otherwise
// return nil since there are no errors.
return result.ErrorOrNil()
```
  0707010000073A000081A4000000000000000000000001645E367C00000422000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/hashicorp/go-multierror/append.go   package multierror

// Append is a helper function that will append more errors
// onto an Error in order to create a larger multi-error.
//
// If err is not a multierror.Error, then it will be turned into
// one. If any of the errs are multierr.Error, they will be flattened
// one level into err.
// Any nil errors within errs will be ignored. If err is nil, a new
// *Error will be returned.
func Append(err error, errs ...error) *Error {
	switch err := err.(type) {
	case *Error:
		// Typed nils can reach here, so initialize if we are nil
		if err == nil {
			err = new(Error)
		}

		// Go through each error and flatten
		for _, e := range errs {
			switch e := e.(type) {
			case *Error:
				if e != nil {
					err.Errors = append(err.Errors, e.Errors...)
				}
			default:
				if e != nil {
					err.Errors = append(err.Errors, e)
				}
			}
		}

		return err
	default:
		newErrs := make([]error, 0, len(errs)+1)
		if err != nil {
			newErrs = append(newErrs, err)
		}
		newErrs = append(newErrs, errs...)

		return Append(&Error{}, newErrs...)
	}
}
  0707010000073B000081A4000000000000000000000001645E367C00000238000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/hashicorp/go-multierror/flatten.go  package multierror

// Flatten flattens the given error, merging any *Errors together into
// a single *Error.
func Flatten(err error) error {
	// If it isn't an *Error, just return the error as-is
	if _, ok := err.(*Error); !ok {
		return err
	}

	// Otherwise, make the result and flatten away!
	flatErr := new(Error)
	flatten(err, flatErr)
	return flatErr
}

func flatten(err error, flatErr *Error) {
	switch err := err.(type) {
	case *Error:
		for _, e := range err.Errors {
			flatten(e, flatErr)
		}
	default:
		flatErr.Errors = append(flatErr.Errors, err)
	}
}
0707010000073C000081A4000000000000000000000001645E367C0000029C000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/hashicorp/go-multierror/format.go   package multierror

import (
	"fmt"
	"strings"
)

// ErrorFormatFunc is a function callback that is called by Error to
// turn the list of errors into a string.
type ErrorFormatFunc func([]error) string

// ListFormatFunc is a basic formatter that outputs the number of errors
// that occurred along with a bullet point list of the errors.
func ListFormatFunc(es []error) string {
	if len(es) == 1 {
		return fmt.Sprintf("1 error occurred:\n\t* %s\n\n", es[0])
	}

	points := make([]string, len(es))
	for i, err := range es {
		points[i] = fmt.Sprintf("* %s", err)
	}

	return fmt.Sprintf(
		"%d errors occurred:\n\t%s\n\n",
		len(es), strings.Join(points, "\n\t"))
}
0707010000073D000081A4000000000000000000000001645E367C000002F7000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/hashicorp/go-multierror/group.go    package multierror

import "sync"

// Group is a collection of goroutines which return errors that need to be
// coalesced.
type Group struct {
	mutex sync.Mutex
	err   *Error
	wg    sync.WaitGroup
}

// Go calls the given function in a new goroutine.
//
// If the function returns an error it is added to the group multierror which
// is returned by Wait.
func (g *Group) Go(f func() error) {
	g.wg.Add(1)

	go func() {
		defer g.wg.Done()

		if err := f(); err != nil {
			g.mutex.Lock()
			g.err = Append(g.err, err)
			g.mutex.Unlock()
		}
	}()
}

// Wait blocks until all function calls from the Go method have returned, then
// returns the multierror.
func (g *Group) Wait() *Error {
	g.wg.Wait()
	g.mutex.Lock()
	defer g.mutex.Unlock()
	return g.err
}
 0707010000073E000081A4000000000000000000000001645E367C00000D7C000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/hashicorp/go-multierror/multierror.go   package multierror

import (
	"errors"
	"fmt"
)

// Error is an error type to track multiple errors. This is used to
// accumulate errors in cases and return them as a single "error".
type Error struct {
	Errors      []error
	ErrorFormat ErrorFormatFunc
}

func (e *Error) Error() string {
	fn := e.ErrorFormat
	if fn == nil {
		fn = ListFormatFunc
	}

	return fn(e.Errors)
}

// ErrorOrNil returns an error interface if this Error represents
// a list of errors, or returns nil if the list of errors is empty. This
// function is useful at the end of accumulation to make sure that the value
// returned represents the existence of errors.
func (e *Error) ErrorOrNil() error {
	if e == nil {
		return nil
	}
	if len(e.Errors) == 0 {
		return nil
	}

	return e
}

func (e *Error) GoString() string {
	return fmt.Sprintf("*%#v", *e)
}

// WrappedErrors returns the list of errors that this Error is wrapping. It is
// an implementation of the errwrap.Wrapper interface so that multierror.Error
// can be used with that library.
//
// This method is not safe to be called concurrently. Unlike accessing the
// Errors field directly, this function also checks if the multierror is nil to
// prevent a null-pointer panic. It satisfies the errwrap.Wrapper interface.
func (e *Error) WrappedErrors() []error {
	if e == nil {
		return nil
	}
	return e.Errors
}

// Unwrap returns an error from Error (or nil if there are no errors).
// This error returned will further support Unwrap to get the next error,
// etc. The order will match the order of Errors in the multierror.Error
// at the time of calling.
//
// The resulting error supports errors.As/Is/Unwrap so you can continue
// to use the stdlib errors package to introspect further.
//
// This will perform a shallow copy of the errors slice. Any errors appended
// to this error after calling Unwrap will not be available until a new
// Unwrap is called on the multierror.Error.
func (e *Error) Unwrap() error {
	// If we have no errors then we do nothing
	if e == nil || len(e.Errors) == 0 {
		return nil
	}

	// If we have exactly one error, we can just return that directly.
	if len(e.Errors) == 1 {
		return e.Errors[0]
	}

	// Shallow copy the slice
	errs := make([]error, len(e.Errors))
	copy(errs, e.Errors)
	return chain(errs)
}

// chain implements the interfaces necessary for errors.Is/As/Unwrap to
// work in a deterministic way with multierror. A chain tracks a list of
// errors while accounting for the current represented error. This lets
// Is/As be meaningful.
//
// Unwrap returns the next error. In the cleanest form, Unwrap would return
// the wrapped error here but we can't do that if we want to properly
// get access to all the errors. Instead, users are recommended to use
// Is/As to get the correct error type out.
//
// Precondition: []error is non-empty (len > 0)
type chain []error

// Error implements the error interface
func (e chain) Error() string {
	return e[0].Error()
}

// Unwrap implements errors.Unwrap by returning the next error in the
// chain or nil if there are no more errors.
func (e chain) Unwrap() error {
	if len(e) == 1 {
		return nil
	}

	return e[1:]
}

// As implements errors.As by attempting to map to the current value.
func (e chain) As(target interface{}) bool {
	return errors.As(e[0], target)
}

// Is implements errors.Is by comparing the current value directly.
func (e chain) Is(target error) bool {
	return errors.Is(e[0], target)
}
0707010000073F000081A4000000000000000000000001645E367C0000031A000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/hashicorp/go-multierror/prefix.go   package multierror

import (
	"fmt"

	"github.com/hashicorp/errwrap"
)

// Prefix is a helper function that will prefix some text
// to the given error. If the error is a multierror.Error, then
// it will be prefixed to each wrapped error.
//
// This is useful to use when appending multiple multierrors
// together in order to give better scoping.
func Prefix(err error, prefix string) error {
	if err == nil {
		return nil
	}

	format := fmt.Sprintf("%s {{err}}", prefix)
	switch err := err.(type) {
	case *Error:
		// Typed nils can reach here, so initialize if we are nil
		if err == nil {
			err = new(Error)
		}

		// Wrap each of the errors
		for i, e := range err.Errors {
			err.Errors[i] = errwrap.Wrapf(format, e)
		}

		return err
	default:
		return errwrap.Wrapf(format, err)
	}
}
  07070100000740000081A4000000000000000000000001645E367C000001C4000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/hashicorp/go-multierror/sort.go package multierror

// Len implements sort.Interface function for length
func (err Error) Len() int {
	return len(err.Errors)
}

// Swap implements sort.Interface function for swapping elements
func (err Error) Swap(i, j int) {
	err.Errors[i], err.Errors[j] = err.Errors[j], err.Errors[i]
}

// Less implements sort.Interface function for determining order
func (err Error) Less(i, j int) bool {
	return err.Errors[i].Error() < err.Errors[j].Error()
}
07070100000741000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl   07070100000742000081A4000000000000000000000001645E367C0000004B000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/.gitignore    y.output

# ignore intellij files
.idea
*.iml
*.ipr
*.iws

*.test
 07070100000743000081A4000000000000000000000001645E367C00000062000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/.travis.yml   sudo: false

language: go

go:
  - 1.x
  - tip

branches:
  only:
    - master

script: make test
  07070100000744000081A4000000000000000000000001645E367C00003E69000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/LICENSE   Mozilla Public License, version 2.0

1. Definitions

1.1. “Contributor”

     means each individual or legal entity that creates, contributes to the
     creation of, or owns Covered Software.

1.2. “Contributor Version”

     means the combination of the Contributions of others (if any) used by a
     Contributor and that particular Contributor’s Contribution.

1.3. “Contribution”

     means Covered Software of a particular Contributor.

1.4. “Covered Software”

     means Source Code Form to which the initial Contributor has attached the
     notice in Exhibit A, the Executable Form of such Source Code Form, and
     Modifications of such Source Code Form, in each case including portions
     thereof.

1.5. “Incompatible With Secondary Licenses”
     means

     a. that the initial Contributor has attached the notice described in
        Exhibit B to the Covered Software; or

     b. that the Covered Software was made available under the terms of version
        1.1 or earlier of the License, but not also under the terms of a
        Secondary License.

1.6. “Executable Form”

     means any form of the work other than Source Code Form.

1.7. “Larger Work”

     means a work that combines Covered Software with other material, in a separate
     file or files, that is not Covered Software.

1.8. “License”

     means this document.

1.9. “Licensable”

     means having the right to grant, to the maximum extent possible, whether at the
     time of the initial grant or subsequently, any and all of the rights conveyed by
     this License.

1.10. “Modifications”

     means any of the following:

     a. any file in Source Code Form that results from an addition to, deletion
        from, or modification of the contents of Covered Software; or

     b. any new file in Source Code Form that contains any Covered Software.

1.11. “Patent Claims” of a Contributor

      means any patent claim(s), including without limitation, method, process,
      and apparatus claims, in any patent Licensable by such Contributor that
      would be infringed, but for the grant of the License, by the making,
      using, selling, offering for sale, having made, import, or transfer of
      either its Contributions or its Contributor Version.

1.12. “Secondary License”

      means either the GNU General Public License, Version 2.0, the GNU Lesser
      General Public License, Version 2.1, the GNU Affero General Public
      License, Version 3.0, or any later versions of those licenses.

1.13. “Source Code Form”

      means the form of the work preferred for making modifications.

1.14. “You” (or “Your”)

      means an individual or a legal entity exercising rights under this
      License. For legal entities, “You” includes any entity that controls, is
      controlled by, or is under common control with You. For purposes of this
      definition, “control” means (a) the power, direct or indirect, to cause
      the direction or management of such entity, whether by contract or
      otherwise, or (b) ownership of more than fifty percent (50%) of the
      outstanding shares or beneficial ownership of such entity.


2. License Grants and Conditions

2.1. Grants

     Each Contributor hereby grants You a world-wide, royalty-free,
     non-exclusive license:

     a. under intellectual property rights (other than patent or trademark)
        Licensable by such Contributor to use, reproduce, make available,
        modify, display, perform, distribute, and otherwise exploit its
        Contributions, either on an unmodified basis, with Modifications, or as
        part of a Larger Work; and

     b. under Patent Claims of such Contributor to make, use, sell, offer for
        sale, have made, import, and otherwise transfer either its Contributions
        or its Contributor Version.

2.2. Effective Date

     The licenses granted in Section 2.1 with respect to any Contribution become
     effective for each Contribution on the date the Contributor first distributes
     such Contribution.

2.3. Limitations on Grant Scope

     The licenses granted in this Section 2 are the only rights granted under this
     License. No additional rights or licenses will be implied from the distribution
     or licensing of Covered Software under this License. Notwithstanding Section
     2.1(b) above, no patent license is granted by a Contributor:

     a. for any code that a Contributor has removed from Covered Software; or

     b. for infringements caused by: (i) Your and any other third party’s
        modifications of Covered Software, or (ii) the combination of its
        Contributions with other software (except as part of its Contributor
        Version); or

     c. under Patent Claims infringed by Covered Software in the absence of its
        Contributions.

     This License does not grant any rights in the trademarks, service marks, or
     logos of any Contributor (except as may be necessary to comply with the
     notice requirements in Section 3.4).

2.4. Subsequent Licenses

     No Contributor makes additional grants as a result of Your choice to
     distribute the Covered Software under a subsequent version of this License
     (see Section 10.2) or under the terms of a Secondary License (if permitted
     under the terms of Section 3.3).

2.5. Representation

     Each Contributor represents that the Contributor believes its Contributions
     are its original creation(s) or it has sufficient rights to grant the
     rights to its Contributions conveyed by this License.

2.6. Fair Use

     This License is not intended to limit any rights You have under applicable
     copyright doctrines of fair use, fair dealing, or other equivalents.

2.7. Conditions

     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in
     Section 2.1.


3. Responsibilities

3.1. Distribution of Source Form

     All distribution of Covered Software in Source Code Form, including any
     Modifications that You create or to which You contribute, must be under the
     terms of this License. You must inform recipients that the Source Code Form
     of the Covered Software is governed by the terms of this License, and how
     they can obtain a copy of this License. You may not attempt to alter or
     restrict the recipients’ rights in the Source Code Form.

3.2. Distribution of Executable Form

     If You distribute Covered Software in Executable Form then:

     a. such Covered Software must also be made available in Source Code Form,
        as described in Section 3.1, and You must inform recipients of the
        Executable Form how they can obtain a copy of such Source Code Form by
        reasonable means in a timely manner, at a charge no more than the cost
        of distribution to the recipient; and

     b. You may distribute such Executable Form under the terms of this License,
        or sublicense it under different terms, provided that the license for
        the Executable Form does not attempt to limit or alter the recipients’
        rights in the Source Code Form under this License.

3.3. Distribution of a Larger Work

     You may create and distribute a Larger Work under terms of Your choice,
     provided that You also comply with the requirements of this License for the
     Covered Software. If the Larger Work is a combination of Covered Software
     with a work governed by one or more Secondary Licenses, and the Covered
     Software is not Incompatible With Secondary Licenses, this License permits
     You to additionally distribute such Covered Software under the terms of
     such Secondary License(s), so that the recipient of the Larger Work may, at
     their option, further distribute the Covered Software under the terms of
     either this License or such Secondary License(s).

3.4. Notices

     You may not remove or alter the substance of any license notices (including
     copyright notices, patent notices, disclaimers of warranty, or limitations
     of liability) contained within the Source Code Form of the Covered
     Software, except that You may alter any license notices to the extent
     required to remedy known factual inaccuracies.

3.5. Application of Additional Terms

     You may choose to offer, and to charge a fee for, warranty, support,
     indemnity or liability obligations to one or more recipients of Covered
     Software. However, You may do so only on Your own behalf, and not on behalf
     of any Contributor. You must make it absolutely clear that any such
     warranty, support, indemnity, or liability obligation is offered by You
     alone, and You hereby agree to indemnify every Contributor for any
     liability incurred by such Contributor as a result of warranty, support,
     indemnity or liability terms You offer. You may include additional
     disclaimers of warranty and limitations of liability specific to any
     jurisdiction.

4. Inability to Comply Due to Statute or Regulation

   If it is impossible for You to comply with any of the terms of this License
   with respect to some or all of the Covered Software due to statute, judicial
   order, or regulation then You must: (a) comply with the terms of this License
   to the maximum extent possible; and (b) describe the limitations and the code
   they affect. Such description must be placed in a text file included with all
   distributions of the Covered Software under this License. Except to the
   extent prohibited by statute or regulation, such description must be
   sufficiently detailed for a recipient of ordinary skill to be able to
   understand it.

5. Termination

5.1. The rights granted under this License will terminate automatically if You
     fail to comply with any of its terms. However, if You become compliant,
     then the rights granted under this License from a particular Contributor
     are reinstated (a) provisionally, unless and until such Contributor
     explicitly and finally terminates Your grants, and (b) on an ongoing basis,
     if such Contributor fails to notify You of the non-compliance by some
     reasonable means prior to 60 days after You have come back into compliance.
     Moreover, Your grants from a particular Contributor are reinstated on an
     ongoing basis if such Contributor notifies You of the non-compliance by
     some reasonable means, this is the first time You have received notice of
     non-compliance with this License from such Contributor, and You become
     compliant prior to 30 days after Your receipt of the notice.

5.2. If You initiate litigation against any entity by asserting a patent
     infringement claim (excluding declaratory judgment actions, counter-claims,
     and cross-claims) alleging that a Contributor Version directly or
     indirectly infringes any patent, then the rights granted to You by any and
     all Contributors for the Covered Software under Section 2.1 of this License
     shall terminate.

5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user
     license agreements (excluding distributors and resellers) which have been
     validly granted by You or Your distributors under this License prior to
     termination shall survive termination.

6. Disclaimer of Warranty

   Covered Software is provided under this License on an “as is” basis, without
   warranty of any kind, either expressed, implied, or statutory, including,
   without limitation, warranties that the Covered Software is free of defects,
   merchantable, fit for a particular purpose or non-infringing. The entire
   risk as to the quality and performance of the Covered Software is with You.
   Should any Covered Software prove defective in any respect, You (not any
   Contributor) assume the cost of any necessary servicing, repair, or
   correction. This disclaimer of warranty constitutes an essential part of this
   License. No use of  any Covered Software is authorized under this License
   except under this disclaimer.

7. Limitation of Liability

   Under no circumstances and under no legal theory, whether tort (including
   negligence), contract, or otherwise, shall any Contributor, or anyone who
   distributes Covered Software as permitted above, be liable to You for any
   direct, indirect, special, incidental, or consequential damages of any
   character including, without limitation, damages for lost profits, loss of
   goodwill, work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses, even if such party shall have been
   informed of the possibility of such damages. This limitation of liability
   shall not apply to liability for death or personal injury resulting from such
   party’s negligence to the extent applicable law prohibits such limitation.
   Some jurisdictions do not allow the exclusion or limitation of incidental or
   consequential damages, so this exclusion and limitation may not apply to You.

8. Litigation

   Any litigation relating to this License may be brought only in the courts of
   a jurisdiction where the defendant maintains its principal place of business
   and such litigation shall be governed by laws of that jurisdiction, without
   reference to its conflict-of-law provisions. Nothing in this Section shall
   prevent a party’s ability to bring cross-claims or counter-claims.

9. Miscellaneous

   This License represents the complete agreement concerning the subject matter
   hereof. If any provision of this License is held to be unenforceable, such
   provision shall be reformed only to the extent necessary to make it
   enforceable. Any law or regulation which provides that the language of a
   contract shall be construed against the drafter shall not be used to construe
   this License against a Contributor.


10. Versions of the License

10.1. New Versions

      Mozilla Foundation is the license steward. Except as provided in Section
      10.3, no one other than the license steward has the right to modify or
      publish new versions of this License. Each version will be given a
      distinguishing version number.

10.2. Effect of New Versions

      You may distribute the Covered Software under the terms of the version of
      the License under which You originally received the Covered Software, or
      under the terms of any subsequent version published by the license
      steward.

10.3. Modified Versions

      If you create software not governed by this License, and you want to
      create a new license for such software, you may create and use a modified
      version of this License if you rename the license and remove any
      references to the name of the license steward (except to note that such
      modified license differs from this License).

10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses
      If You choose to distribute Source Code Form that is Incompatible With
      Secondary Licenses under the terms of this version of the License, the
      notice described in Exhibit B of this License must be attached.

Exhibit A - Source Code Form License Notice

      This Source Code Form is subject to the
      terms of the Mozilla Public License, v.
      2.0. If a copy of the MPL was not
      distributed with this file, You can
      obtain one at
      http://mozilla.org/MPL/2.0/.

If it is not possible or desirable to put the notice in a particular file, then
You may include the notice in a location (such as a LICENSE file in a relevant
directory) where a recipient would be likely to look for such a notice.

You may add additional accurate notices of copyright ownership.

Exhibit B - “Incompatible With Secondary Licenses” Notice

      This Source Code Form is “Incompatible
      With Secondary Licenses”, as defined by
      the Mozilla Public License, v. 2.0.

   07070100000745000081A4000000000000000000000001645E367C00000108000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/Makefile  TEST?=./...

default: test

fmt: generate
	go fmt ./...

test: generate
	go get -t ./...
	go test $(TEST) $(TESTARGS)

generate:
	go generate ./...

updatedeps:
	go get -u golang.org/x/tools/cmd/stringer

.PHONY: default generate test updatedeps
07070100000746000081A4000000000000000000000001645E367C000010B6000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/README.md # HCL

[![GoDoc](https://godoc.org/github.com/hashicorp/hcl?status.png)](https://godoc.org/github.com/hashicorp/hcl) [![Build Status](https://travis-ci.org/hashicorp/hcl.svg?branch=master)](https://travis-ci.org/hashicorp/hcl)

HCL (HashiCorp Configuration Language) is a configuration language built
by HashiCorp. The goal of HCL is to build a structured configuration language
that is both human and machine friendly for use with command-line tools, but
specifically targeted towards DevOps tools, servers, etc.

HCL is also fully JSON compatible. That is, JSON can be used as completely
valid input to a system expecting HCL. This helps makes systems
interoperable with other systems.

HCL is heavily inspired by
[libucl](https://github.com/vstakhov/libucl),
nginx configuration, and others similar.

## Why?

A common question when viewing HCL is to ask the question: why not
JSON, YAML, etc.?

Prior to HCL, the tools we built at [HashiCorp](http://www.hashicorp.com)
used a variety of configuration languages from full programming languages
such as Ruby to complete data structure languages such as JSON. What we
learned is that some people wanted human-friendly configuration languages
and some people wanted machine-friendly languages.

JSON fits a nice balance in this, but is fairly verbose and most
importantly doesn't support comments. With YAML, we found that beginners
had a really hard time determining what the actual structure was, and
ended up guessing more often than not whether to use a hyphen, colon, etc.
in order to represent some configuration key.

Full programming languages such as Ruby enable complex behavior
a configuration language shouldn't usually allow, and also forces
people to learn some set of Ruby.

Because of this, we decided to create our own configuration language
that is JSON-compatible. Our configuration language (HCL) is designed
to be written and modified by humans. The API for HCL allows JSON
as an input so that it is also machine-friendly (machines can generate
JSON instead of trying to generate HCL).

Our goal with HCL is not to alienate other configuration languages.
It is instead to provide HCL as a specialized language for our tools,
and JSON as the interoperability layer.

## Syntax

For a complete grammar, please see the parser itself. A high-level overview
of the syntax and grammar is listed here.

  * Single line comments start with `#` or `//`

  * Multi-line comments are wrapped in `/*` and `*/`. Nested block comments
    are not allowed. A multi-line comment (also known as a block comment)
    terminates at the first `*/` found.

  * Values are assigned with the syntax `key = value` (whitespace doesn't
    matter). The value can be any primitive: a string, number, boolean,
    object, or list.

  * Strings are double-quoted and can contain any UTF-8 characters.
    Example: `"Hello, World"`

  * Multi-line strings start with `<<EOF` at the end of a line, and end
    with `EOF` on its own line ([here documents](https://en.wikipedia.org/wiki/Here_document)).
    Any text may be used in place of `EOF`. Example:
```
<<FOO
hello
world
FOO
```

  * Numbers are assumed to be base 10. If you prefix a number with 0x,
    it is treated as a hexadecimal. If it is prefixed with 0, it is
    treated as an octal. Numbers can be in scientific notation: "1e10".

  * Boolean values: `true`, `false`

  * Arrays can be made by wrapping it in `[]`. Example:
    `["foo", "bar", 42]`. Arrays can contain primitives,
    other arrays, and objects. As an alternative, lists
    of objects can be created with repeated blocks, using
    this structure:

    ```hcl
    service {
        key = "value"
    }

    service {
        key = "value"
    }
    ```

Objects and nested objects are created using the structure shown below:

```
variable "ami" {
    description = "the AMI to use"
}
```
This would be equivalent to the following json:
``` json
{
  "variable": {
      "ami": {
          "description": "the AMI to use"
        }
    }
}
```

## Thanks

Thanks to:

  * [@vstakhov](https://github.com/vstakhov) - The original libucl parser
    and syntax that HCL was based off of.

  * [@fatih](https://github.com/fatih) - The rewritten HCL parser
    in pure Go (no goyacc) and support for a printer.
  07070100000747000081A4000000000000000000000001645E367C0000013F000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/appveyor.yml  version: "build-{branch}-{build}"
image: Visual Studio 2015
clone_folder: c:\gopath\src\github.com\hashicorp\hcl
environment:
  GOPATH: c:\gopath
init:
  - git config --global core.autocrlf false
install:
- cmd: >-
    echo %Path%

    go version

    go env

    go get -t ./...

build_script:
- cmd: go test -v ./...
 07070100000748000081A4000000000000000000000001645E367C00004790000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/decoder.go    package hcl

import (
	"errors"
	"fmt"
	"reflect"
	"sort"
	"strconv"
	"strings"

	"github.com/hashicorp/hcl/hcl/ast"
	"github.com/hashicorp/hcl/hcl/parser"
	"github.com/hashicorp/hcl/hcl/token"
)

// This is the tag to use with structures to have settings for HCL
const tagName = "hcl"

var (
	// nodeType holds a reference to the type of ast.Node
	nodeType reflect.Type = findNodeType()
)

// Unmarshal accepts a byte slice as input and writes the
// data to the value pointed to by v.
func Unmarshal(bs []byte, v interface{}) error {
	root, err := parse(bs)
	if err != nil {
		return err
	}

	return DecodeObject(v, root)
}

// Decode reads the given input and decodes it into the structure
// given by `out`.
func Decode(out interface{}, in string) error {
	obj, err := Parse(in)
	if err != nil {
		return err
	}

	return DecodeObject(out, obj)
}

// DecodeObject is a lower-level version of Decode. It decodes a
// raw Object into the given output.
func DecodeObject(out interface{}, n ast.Node) error {
	val := reflect.ValueOf(out)
	if val.Kind() != reflect.Ptr {
		return errors.New("result must be a pointer")
	}

	// If we have the file, we really decode the root node
	if f, ok := n.(*ast.File); ok {
		n = f.Node
	}

	var d decoder
	return d.decode("root", n, val.Elem())
}

type decoder struct {
	stack []reflect.Kind
}

func (d *decoder) decode(name string, node ast.Node, result reflect.Value) error {
	k := result

	// If we have an interface with a valid value, we use that
	// for the check.
	if result.Kind() == reflect.Interface {
		elem := result.Elem()
		if elem.IsValid() {
			k = elem
		}
	}

	// Push current onto stack unless it is an interface.
	if k.Kind() != reflect.Interface {
		d.stack = append(d.stack, k.Kind())

		// Schedule a pop
		defer func() {
			d.stack = d.stack[:len(d.stack)-1]
		}()
	}

	switch k.Kind() {
	case reflect.Bool:
		return d.decodeBool(name, node, result)
	case reflect.Float32, reflect.Float64:
		return d.decodeFloat(name, node, result)
	case reflect.Int, reflect.Int32, reflect.Int64:
		return d.decodeInt(name, node, result)
	case reflect.Interface:
		// When we see an interface, we make our own thing
		return d.decodeInterface(name, node, result)
	case reflect.Map:
		return d.decodeMap(name, node, result)
	case reflect.Ptr:
		return d.decodePtr(name, node, result)
	case reflect.Slice:
		return d.decodeSlice(name, node, result)
	case reflect.String:
		return d.decodeString(name, node, result)
	case reflect.Struct:
		return d.decodeStruct(name, node, result)
	default:
		return &parser.PosError{
			Pos: node.Pos(),
			Err: fmt.Errorf("%s: unknown kind to decode into: %s", name, k.Kind()),
		}
	}
}

func (d *decoder) decodeBool(name string, node ast.Node, result reflect.Value) error {
	switch n := node.(type) {
	case *ast.LiteralType:
		if n.Token.Type == token.BOOL {
			v, err := strconv.ParseBool(n.Token.Text)
			if err != nil {
				return err
			}

			result.Set(reflect.ValueOf(v))
			return nil
		}
	}

	return &parser.PosError{
		Pos: node.Pos(),
		Err: fmt.Errorf("%s: unknown type %T", name, node),
	}
}

func (d *decoder) decodeFloat(name string, node ast.Node, result reflect.Value) error {
	switch n := node.(type) {
	case *ast.LiteralType:
		if n.Token.Type == token.FLOAT || n.Token.Type == token.NUMBER {
			v, err := strconv.ParseFloat(n.Token.Text, 64)
			if err != nil {
				return err
			}

			result.Set(reflect.ValueOf(v).Convert(result.Type()))
			return nil
		}
	}

	return &parser.PosError{
		Pos: node.Pos(),
		Err: fmt.Errorf("%s: unknown type %T", name, node),
	}
}

func (d *decoder) decodeInt(name string, node ast.Node, result reflect.Value) error {
	switch n := node.(type) {
	case *ast.LiteralType:
		switch n.Token.Type {
		case token.NUMBER:
			v, err := strconv.ParseInt(n.Token.Text, 0, 0)
			if err != nil {
				return err
			}

			if result.Kind() == reflect.Interface {
				result.Set(reflect.ValueOf(int(v)))
			} else {
				result.SetInt(v)
			}
			return nil
		case token.STRING:
			v, err := strconv.ParseInt(n.Token.Value().(string), 0, 0)
			if err != nil {
				return err
			}

			if result.Kind() == reflect.Interface {
				result.Set(reflect.ValueOf(int(v)))
			} else {
				result.SetInt(v)
			}
			return nil
		}
	}

	return &parser.PosError{
		Pos: node.Pos(),
		Err: fmt.Errorf("%s: unknown type %T", name, node),
	}
}

func (d *decoder) decodeInterface(name string, node ast.Node, result reflect.Value) error {
	// When we see an ast.Node, we retain the value to enable deferred decoding.
	// Very useful in situations where we want to preserve ast.Node information
	// like Pos
	if result.Type() == nodeType && result.CanSet() {
		result.Set(reflect.ValueOf(node))
		return nil
	}

	var set reflect.Value
	redecode := true

	// For testing types, ObjectType should just be treated as a list. We
	// set this to a temporary var because we want to pass in the real node.
	testNode := node
	if ot, ok := node.(*ast.ObjectType); ok {
		testNode = ot.List
	}

	switch n := testNode.(type) {
	case *ast.ObjectList:
		// If we're at the root or we're directly within a slice, then we
		// decode objects into map[string]interface{}, otherwise we decode
		// them into lists.
		if len(d.stack) == 0 || d.stack[len(d.stack)-1] == reflect.Slice {
			var temp map[string]interface{}
			tempVal := reflect.ValueOf(temp)
			result := reflect.MakeMap(
				reflect.MapOf(
					reflect.TypeOf(""),
					tempVal.Type().Elem()))

			set = result
		} else {
			var temp []map[string]interface{}
			tempVal := reflect.ValueOf(temp)
			result := reflect.MakeSlice(
				reflect.SliceOf(tempVal.Type().Elem()), 0, len(n.Items))
			set = result
		}
	case *ast.ObjectType:
		// If we're at the root or we're directly within a slice, then we
		// decode objects into map[string]interface{}, otherwise we decode
		// them into lists.
		if len(d.stack) == 0 || d.stack[len(d.stack)-1] == reflect.Slice {
			var temp map[string]interface{}
			tempVal := reflect.ValueOf(temp)
			result := reflect.MakeMap(
				reflect.MapOf(
					reflect.TypeOf(""),
					tempVal.Type().Elem()))

			set = result
		} else {
			var temp []map[string]interface{}
			tempVal := reflect.ValueOf(temp)
			result := reflect.MakeSlice(
				reflect.SliceOf(tempVal.Type().Elem()), 0, 1)
			set = result
		}
	case *ast.ListType:
		var temp []interface{}
		tempVal := reflect.ValueOf(temp)
		result := reflect.MakeSlice(
			reflect.SliceOf(tempVal.Type().Elem()), 0, 0)
		set = result
	case *ast.LiteralType:
		switch n.Token.Type {
		case token.BOOL:
			var result bool
			set = reflect.Indirect(reflect.New(reflect.TypeOf(result)))
		case token.FLOAT:
			var result float64
			set = reflect.Indirect(reflect.New(reflect.TypeOf(result)))
		case token.NUMBER:
			var result int
			set = reflect.Indirect(reflect.New(reflect.TypeOf(result)))
		case token.STRING, token.HEREDOC:
			set = reflect.Indirect(reflect.New(reflect.TypeOf("")))
		default:
			return &parser.PosError{
				Pos: node.Pos(),
				Err: fmt.Errorf("%s: cannot decode into interface: %T", name, node),
			}
		}
	default:
		return fmt.Errorf(
			"%s: cannot decode into interface: %T",
			name, node)
	}

	// Set the result to what its supposed to be, then reset
	// result so we don't reflect into this method anymore.
	result.Set(set)

	if redecode {
		// Revisit the node so that we can use the newly instantiated
		// thing and populate it.
		if err := d.decode(name, node, result); err != nil {
			return err
		}
	}

	return nil
}

func (d *decoder) decodeMap(name string, node ast.Node, result reflect.Value) error {
	if item, ok := node.(*ast.ObjectItem); ok {
		node = &ast.ObjectList{Items: []*ast.ObjectItem{item}}
	}

	if ot, ok := node.(*ast.ObjectType); ok {
		node = ot.List
	}

	n, ok := node.(*ast.ObjectList)
	if !ok {
		return &parser.PosError{
			Pos: node.Pos(),
			Err: fmt.Errorf("%s: not an object type for map (%T)", name, node),
		}
	}

	// If we have an interface, then we can address the interface,
	// but not the slice itself, so get the element but set the interface
	set := result
	if result.Kind() == reflect.Interface {
		result = result.Elem()
	}

	resultType := result.Type()
	resultElemType := resultType.Elem()
	resultKeyType := resultType.Key()
	if resultKeyType.Kind() != reflect.String {
		return &parser.PosError{
			Pos: node.Pos(),
			Err: fmt.Errorf("%s: map must have string keys", name),
		}
	}

	// Make a map if it is nil
	resultMap := result
	if result.IsNil() {
		resultMap = reflect.MakeMap(
			reflect.MapOf(resultKeyType, resultElemType))
	}

	// Go through each element and decode it.
	done := make(map[string]struct{})
	for _, item := range n.Items {
		if item.Val == nil {
			continue
		}

		// github.com/hashicorp/terraform/issue/5740
		if len(item.Keys) == 0 {
			return &parser.PosError{
				Pos: node.Pos(),
				Err: fmt.Errorf("%s: map must have string keys", name),
			}
		}

		// Get the key we're dealing with, which is the first item
		keyStr := item.Keys[0].Token.Value().(string)

		// If we've already processed this key, then ignore it
		if _, ok := done[keyStr]; ok {
			continue
		}

		// Determine the value. If we have more than one key, then we
		// get the objectlist of only these keys.
		itemVal := item.Val
		if len(item.Keys) > 1 {
			itemVal = n.Filter(keyStr)
			done[keyStr] = struct{}{}
		}

		// Make the field name
		fieldName := fmt.Sprintf("%s.%s", name, keyStr)

		// Get the key/value as reflection values
		key := reflect.ValueOf(keyStr)
		val := reflect.Indirect(reflect.New(resultElemType))

		// If we have a pre-existing value in the map, use that
		oldVal := resultMap.MapIndex(key)
		if oldVal.IsValid() {
			val.Set(oldVal)
		}

		// Decode!
		if err := d.decode(fieldName, itemVal, val); err != nil {
			return err
		}

		// Set the value on the map
		resultMap.SetMapIndex(key, val)
	}

	// Set the final map if we can
	set.Set(resultMap)
	return nil
}

func (d *decoder) decodePtr(name string, node ast.Node, result reflect.Value) error {
	// Create an element of the concrete (non pointer) type and decode
	// into that. Then set the value of the pointer to this type.
	resultType := result.Type()
	resultElemType := resultType.Elem()
	val := reflect.New(resultElemType)
	if err := d.decode(name, node, reflect.Indirect(val)); err != nil {
		return err
	}

	result.Set(val)
	return nil
}

func (d *decoder) decodeSlice(name string, node ast.Node, result reflect.Value) error {
	// If we have an interface, then we can address the interface,
	// but not the slice itself, so get the element but set the interface
	set := result
	if result.Kind() == reflect.Interface {
		result = result.Elem()
	}
	// Create the slice if it isn't nil
	resultType := result.Type()
	resultElemType := resultType.Elem()
	if result.IsNil() {
		resultSliceType := reflect.SliceOf(resultElemType)
		result = reflect.MakeSlice(
			resultSliceType, 0, 0)
	}

	// Figure out the items we'll be copying into the slice
	var items []ast.Node
	switch n := node.(type) {
	case *ast.ObjectList:
		items = make([]ast.Node, len(n.Items))
		for i, item := range n.Items {
			items[i] = item
		}
	case *ast.ObjectType:
		items = []ast.Node{n}
	case *ast.ListType:
		items = n.List
	default:
		return &parser.PosError{
			Pos: node.Pos(),
			Err: fmt.Errorf("unknown slice type: %T", node),
		}
	}

	for i, item := range items {
		fieldName := fmt.Sprintf("%s[%d]", name, i)

		// Decode
		val := reflect.Indirect(reflect.New(resultElemType))

		// if item is an object that was decoded from ambiguous JSON and
		// flattened, make sure it's expanded if it needs to decode into a
		// defined structure.
		item := expandObject(item, val)

		if err := d.decode(fieldName, item, val); err != nil {
			return err
		}

		// Append it onto the slice
		result = reflect.Append(result, val)
	}

	set.Set(result)
	return nil
}

// expandObject detects if an ambiguous JSON object was flattened to a List which
// should be decoded into a struct, and expands the ast to properly deocode.
func expandObject(node ast.Node, result reflect.Value) ast.Node {
	item, ok := node.(*ast.ObjectItem)
	if !ok {
		return node
	}

	elemType := result.Type()

	// our target type must be a struct
	switch elemType.Kind() {
	case reflect.Ptr:
		switch elemType.Elem().Kind() {
		case reflect.Struct:
			//OK
		default:
			return node
		}
	case reflect.Struct:
		//OK
	default:
		return node
	}

	// A list value will have a key and field name. If it had more fields,
	// it wouldn't have been flattened.
	if len(item.Keys) != 2 {
		return node
	}

	keyToken := item.Keys[0].Token
	item.Keys = item.Keys[1:]

	// we need to un-flatten the ast enough to decode
	newNode := &ast.ObjectItem{
		Keys: []*ast.ObjectKey{
			&ast.ObjectKey{
				Token: keyToken,
			},
		},
		Val: &ast.ObjectType{
			List: &ast.ObjectList{
				Items: []*ast.ObjectItem{item},
			},
		},
	}

	return newNode
}

func (d *decoder) decodeString(name string, node ast.Node, result reflect.Value) error {
	switch n := node.(type) {
	case *ast.LiteralType:
		switch n.Token.Type {
		case token.NUMBER:
			result.Set(reflect.ValueOf(n.Token.Text).Convert(result.Type()))
			return nil
		case token.STRING, token.HEREDOC:
			result.Set(reflect.ValueOf(n.Token.Value()).Convert(result.Type()))
			return nil
		}
	}

	return &parser.PosError{
		Pos: node.Pos(),
		Err: fmt.Errorf("%s: unknown type for string %T", name, node),
	}
}

func (d *decoder) decodeStruct(name string, node ast.Node, result reflect.Value) error {
	var item *ast.ObjectItem
	if it, ok := node.(*ast.ObjectItem); ok {
		item = it
		node = it.Val
	}

	if ot, ok := node.(*ast.ObjectType); ok {
		node = ot.List
	}

	// Handle the special case where the object itself is a literal. Previously
	// the yacc parser would always ensure top-level elements were arrays. The new
	// parser does not make the same guarantees, thus we need to convert any
	// top-level literal elements into a list.
	if _, ok := node.(*ast.LiteralType); ok && item != nil {
		node = &ast.ObjectList{Items: []*ast.ObjectItem{item}}
	}

	list, ok := node.(*ast.ObjectList)
	if !ok {
		return &parser.PosError{
			Pos: node.Pos(),
			Err: fmt.Errorf("%s: not an object type for struct (%T)", name, node),
		}
	}

	// This slice will keep track of all the structs we'll be decoding.
	// There can be more than one struct if there are embedded structs
	// that are squashed.
	structs := make([]reflect.Value, 1, 5)
	structs[0] = result

	// Compile the list of all the fields that we're going to be decoding
	// from all the structs.
	type field struct {
		field reflect.StructField
		val   reflect.Value
	}
	fields := []field{}
	for len(structs) > 0 {
		structVal := structs[0]
		structs = structs[1:]

		structType := structVal.Type()
		for i := 0; i < structType.NumField(); i++ {
			fieldType := structType.Field(i)
			tagParts := strings.Split(fieldType.Tag.Get(tagName), ",")

			// Ignore fields with tag name "-"
			if tagParts[0] == "-" {
				continue
			}

			if fieldType.Anonymous {
				fieldKind := fieldType.Type.Kind()
				if fieldKind != reflect.Struct {
					return &parser.PosError{
						Pos: node.Pos(),
						Err: fmt.Errorf("%s: unsupported type to struct: %s",
							fieldType.Name, fieldKind),
					}
				}

				// We have an embedded field. We "squash" the fields down
				// if specified in the tag.
				squash := false
				for _, tag := range tagParts[1:] {
					if tag == "squash" {
						squash = true
						break
					}
				}

				if squash {
					structs = append(
						structs, result.FieldByName(fieldType.Name))
					continue
				}
			}

			// Normal struct field, store it away
			fields = append(fields, field{fieldType, structVal.Field(i)})
		}
	}

	usedKeys := make(map[string]struct{})
	decodedFields := make([]string, 0, len(fields))
	decodedFieldsVal := make([]reflect.Value, 0)
	unusedKeysVal := make([]reflect.Value, 0)
	for _, f := range fields {
		field, fieldValue := f.field, f.val
		if !fieldValue.IsValid() {
			// This should never happen
			panic("field is not valid")
		}

		// If we can't set the field, then it is unexported or something,
		// and we just continue onwards.
		if !fieldValue.CanSet() {
			continue
		}

		fieldName := field.Name

		tagValue := field.Tag.Get(tagName)
		tagParts := strings.SplitN(tagValue, ",", 2)
		if len(tagParts) >= 2 {
			switch tagParts[1] {
			case "decodedFields":
				decodedFieldsVal = append(decodedFieldsVal, fieldValue)
				continue
			case "key":
				if item == nil {
					return &parser.PosError{
						Pos: node.Pos(),
						Err: fmt.Errorf("%s: %s asked for 'key', impossible",
							name, fieldName),
					}
				}

				fieldValue.SetString(item.Keys[0].Token.Value().(string))
				continue
			case "unusedKeys":
				unusedKeysVal = append(unusedKeysVal, fieldValue)
				continue
			}
		}

		if tagParts[0] != "" {
			fieldName = tagParts[0]
		}

		// Determine the element we'll use to decode. If it is a single
		// match (only object with the field), then we decode it exactly.
		// If it is a prefix match, then we decode the matches.
		filter := list.Filter(fieldName)

		prefixMatches := filter.Children()
		matches := filter.Elem()
		if len(matches.Items) == 0 && len(prefixMatches.Items) == 0 {
			continue
		}

		// Track the used key
		usedKeys[fieldName] = struct{}{}

		// Create the field name and decode. We range over the elements
		// because we actually want the value.
		fieldName = fmt.Sprintf("%s.%s", name, fieldName)
		if len(prefixMatches.Items) > 0 {
			if err := d.decode(fieldName, prefixMatches, fieldValue); err != nil {
				return err
			}
		}
		for _, match := range matches.Items {
			var decodeNode ast.Node = match.Val
			if ot, ok := decodeNode.(*ast.ObjectType); ok {
				decodeNode = &ast.ObjectList{Items: ot.List.Items}
			}

			if err := d.decode(fieldName, decodeNode, fieldValue); err != nil {
				return err
			}
		}

		decodedFields = append(decodedFields, field.Name)
	}

	if len(decodedFieldsVal) > 0 {
		// Sort it so that it is deterministic
		sort.Strings(decodedFields)

		for _, v := range decodedFieldsVal {
			v.Set(reflect.ValueOf(decodedFields))
		}
	}

	return nil
}

// findNodeType returns the type of ast.Node
func findNodeType() reflect.Type {
	var nodeContainer struct {
		Node ast.Node
	}
	value := reflect.ValueOf(nodeContainer).FieldByName("Node")
	return value.Type()
}
07070100000749000041ED000000000000000000000008645E367C00000000000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/hcl   0707010000074A000081A4000000000000000000000001645E367C000001E0000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/hcl.go    // Package hcl decodes HCL into usable Go structures.
//
// hcl input can come in either pure HCL format or JSON format.
// It can be parsed into an AST, and then decoded into a structure,
// or it can be decoded directly from a string into a structure.
//
// If you choose to parse HCL into a raw AST, the benefit is that you
// can write custom visitor implementations to implement custom
// semantic checks. By default, HCL does not perform any semantic
// checks.
package hcl
0707010000074B000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/hcl/ast   0707010000074C000081A4000000000000000000000001645E367C0000157D000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/hcl/ast/ast.go    // Package ast declares the types used to represent syntax trees for HCL
// (HashiCorp Configuration Language)
package ast

import (
	"fmt"
	"strings"

	"github.com/hashicorp/hcl/hcl/token"
)

// Node is an element in the abstract syntax tree.
type Node interface {
	node()
	Pos() token.Pos
}

func (File) node()         {}
func (ObjectList) node()   {}
func (ObjectKey) node()    {}
func (ObjectItem) node()   {}
func (Comment) node()      {}
func (CommentGroup) node() {}
func (ObjectType) node()   {}
func (LiteralType) node()  {}
func (ListType) node()     {}

// File represents a single HCL file
type File struct {
	Node     Node            // usually a *ObjectList
	Comments []*CommentGroup // list of all comments in the source
}

func (f *File) Pos() token.Pos {
	return f.Node.Pos()
}

// ObjectList represents a list of ObjectItems. An HCL file itself is an
// ObjectList.
type ObjectList struct {
	Items []*ObjectItem
}

func (o *ObjectList) Add(item *ObjectItem) {
	o.Items = append(o.Items, item)
}

// Filter filters out the objects with the given key list as a prefix.
//
// The returned list of objects contain ObjectItems where the keys have
// this prefix already stripped off. This might result in objects with
// zero-length key lists if they have no children.
//
// If no matches are found, an empty ObjectList (non-nil) is returned.
func (o *ObjectList) Filter(keys ...string) *ObjectList {
	var result ObjectList
	for _, item := range o.Items {
		// If there aren't enough keys, then ignore this
		if len(item.Keys) < len(keys) {
			continue
		}

		match := true
		for i, key := range item.Keys[:len(keys)] {
			key := key.Token.Value().(string)
			if key != keys[i] && !strings.EqualFold(key, keys[i]) {
				match = false
				break
			}
		}
		if !match {
			continue
		}

		// Strip off the prefix from the children
		newItem := *item
		newItem.Keys = newItem.Keys[len(keys):]
		result.Add(&newItem)
	}

	return &result
}

// Children returns further nested objects (key length > 0) within this
// ObjectList. This should be used with Filter to get at child items.
func (o *ObjectList) Children() *ObjectList {
	var result ObjectList
	for _, item := range o.Items {
		if len(item.Keys) > 0 {
			result.Add(item)
		}
	}

	return &result
}

// Elem returns items in the list that are direct element assignments
// (key length == 0). This should be used with Filter to get at elements.
func (o *ObjectList) Elem() *ObjectList {
	var result ObjectList
	for _, item := range o.Items {
		if len(item.Keys) == 0 {
			result.Add(item)
		}
	}

	return &result
}

func (o *ObjectList) Pos() token.Pos {
	// always returns the uninitiliazed position
	return o.Items[0].Pos()
}

// ObjectItem represents a HCL Object Item. An item is represented with a key
// (or keys). It can be an assignment or an object (both normal and nested)
type ObjectItem struct {
	// keys is only one length long if it's of type assignment. If it's a
	// nested object it can be larger than one. In that case "assign" is
	// invalid as there is no assignments for a nested object.
	Keys []*ObjectKey

	// assign contains the position of "=", if any
	Assign token.Pos

	// val is the item itself. It can be an object,list, number, bool or a
	// string. If key length is larger than one, val can be only of type
	// Object.
	Val Node

	LeadComment *CommentGroup // associated lead comment
	LineComment *CommentGroup // associated line comment
}

func (o *ObjectItem) Pos() token.Pos {
	// I'm not entirely sure what causes this, but removing this causes
	// a test failure. We should investigate at some point.
	if len(o.Keys) == 0 {
		return token.Pos{}
	}

	return o.Keys[0].Pos()
}

// ObjectKeys are either an identifier or of type string.
type ObjectKey struct {
	Token token.Token
}

func (o *ObjectKey) Pos() token.Pos {
	return o.Token.Pos
}

// LiteralType represents a literal of basic type. Valid types are:
// token.NUMBER, token.FLOAT, token.BOOL and token.STRING
type LiteralType struct {
	Token token.Token

	// comment types, only used when in a list
	LeadComment *CommentGroup
	LineComment *CommentGroup
}

func (l *LiteralType) Pos() token.Pos {
	return l.Token.Pos
}

// ListStatement represents a HCL List type
type ListType struct {
	Lbrack token.Pos // position of "["
	Rbrack token.Pos // position of "]"
	List   []Node    // the elements in lexical order
}

func (l *ListType) Pos() token.Pos {
	return l.Lbrack
}

func (l *ListType) Add(node Node) {
	l.List = append(l.List, node)
}

// ObjectType represents a HCL Object Type
type ObjectType struct {
	Lbrace token.Pos   // position of "{"
	Rbrace token.Pos   // position of "}"
	List   *ObjectList // the nodes in lexical order
}

func (o *ObjectType) Pos() token.Pos {
	return o.Lbrace
}

// Comment node represents a single //, # style or /*- style commment
type Comment struct {
	Start token.Pos // position of / or #
	Text  string
}

func (c *Comment) Pos() token.Pos {
	return c.Start
}

// CommentGroup node represents a sequence of comments with no other tokens and
// no empty lines between.
type CommentGroup struct {
	List []*Comment // len(List) > 0
}

func (c *CommentGroup) Pos() token.Pos {
	return c.List[0].Pos()
}

//-------------------------------------------------------------------
// GoStringer
//-------------------------------------------------------------------

func (o *ObjectKey) GoString() string  { return fmt.Sprintf("*%#v", *o) }
func (o *ObjectList) GoString() string { return fmt.Sprintf("*%#v", *o) }
   0707010000074D000081A4000000000000000000000001645E367C000004FB000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/hcl/ast/walk.go   package ast

import "fmt"

// WalkFunc describes a function to be called for each node during a Walk. The
// returned node can be used to rewrite the AST. Walking stops the returned
// bool is false.
type WalkFunc func(Node) (Node, bool)

// Walk traverses an AST in depth-first order: It starts by calling fn(node);
// node must not be nil. If fn returns true, Walk invokes fn recursively for
// each of the non-nil children of node, followed by a call of fn(nil). The
// returned node of fn can be used to rewrite the passed node to fn.
func Walk(node Node, fn WalkFunc) Node {
	rewritten, ok := fn(node)
	if !ok {
		return rewritten
	}

	switch n := node.(type) {
	case *File:
		n.Node = Walk(n.Node, fn)
	case *ObjectList:
		for i, item := range n.Items {
			n.Items[i] = Walk(item, fn).(*ObjectItem)
		}
	case *ObjectKey:
		// nothing to do
	case *ObjectItem:
		for i, k := range n.Keys {
			n.Keys[i] = Walk(k, fn).(*ObjectKey)
		}

		if n.Val != nil {
			n.Val = Walk(n.Val, fn)
		}
	case *LiteralType:
		// nothing to do
	case *ListType:
		for i, l := range n.List {
			n.List[i] = Walk(l, fn)
		}
	case *ObjectType:
		n.List = Walk(n.List, fn).(*ObjectList)
	default:
		// should we panic here?
		fmt.Printf("unknown type: %T\n", n)
	}

	fn(nil)
	return rewritten
}
 0707010000074E000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/hcl/parser    0707010000074F000081A4000000000000000000000001645E367C0000010A000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/hcl/parser/error.go   package parser

import (
	"fmt"

	"github.com/hashicorp/hcl/hcl/token"
)

// PosError is a parse error that contains a position.
type PosError struct {
	Pos token.Pos
	Err error
}

func (e *PosError) Error() string {
	return fmt.Sprintf("At %s: %s", e.Pos, e.Err)
}
  07070100000750000081A4000000000000000000000001645E367C0000324B000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/hcl/parser/parser.go  // Package parser implements a parser for HCL (HashiCorp Configuration
// Language)
package parser

import (
	"bytes"
	"errors"
	"fmt"
	"strings"

	"github.com/hashicorp/hcl/hcl/ast"
	"github.com/hashicorp/hcl/hcl/scanner"
	"github.com/hashicorp/hcl/hcl/token"
)

type Parser struct {
	sc *scanner.Scanner

	// Last read token
	tok       token.Token
	commaPrev token.Token

	comments    []*ast.CommentGroup
	leadComment *ast.CommentGroup // last lead comment
	lineComment *ast.CommentGroup // last line comment

	enableTrace bool
	indent      int
	n           int // buffer size (max = 1)
}

func newParser(src []byte) *Parser {
	return &Parser{
		sc: scanner.New(src),
	}
}

// Parse returns the fully parsed source and returns the abstract syntax tree.
func Parse(src []byte) (*ast.File, error) {
	// normalize all line endings
	// since the scanner and output only work with "\n" line endings, we may
	// end up with dangling "\r" characters in the parsed data.
	src = bytes.Replace(src, []byte("\r\n"), []byte("\n"), -1)

	p := newParser(src)
	return p.Parse()
}

var errEofToken = errors.New("EOF token found")

// Parse returns the fully parsed source and returns the abstract syntax tree.
func (p *Parser) Parse() (*ast.File, error) {
	f := &ast.File{}
	var err, scerr error
	p.sc.Error = func(pos token.Pos, msg string) {
		scerr = &PosError{Pos: pos, Err: errors.New(msg)}
	}

	f.Node, err = p.objectList(false)
	if scerr != nil {
		return nil, scerr
	}
	if err != nil {
		return nil, err
	}

	f.Comments = p.comments
	return f, nil
}

// objectList parses a list of items within an object (generally k/v pairs).
// The parameter" obj" tells this whether to we are within an object (braces:
// '{', '}') or just at the top level. If we're within an object, we end
// at an RBRACE.
func (p *Parser) objectList(obj bool) (*ast.ObjectList, error) {
	defer un(trace(p, "ParseObjectList"))
	node := &ast.ObjectList{}

	for {
		if obj {
			tok := p.scan()
			p.unscan()
			if tok.Type == token.RBRACE {
				break
			}
		}

		n, err := p.objectItem()
		if err == errEofToken {
			break // we are finished
		}

		// we don't return a nil node, because might want to use already
		// collected items.
		if err != nil {
			return node, err
		}

		node.Add(n)

		// object lists can be optionally comma-delimited e.g. when a list of maps
		// is being expressed, so a comma is allowed here - it's simply consumed
		tok := p.scan()
		if tok.Type != token.COMMA {
			p.unscan()
		}
	}
	return node, nil
}

func (p *Parser) consumeComment() (comment *ast.Comment, endline int) {
	endline = p.tok.Pos.Line

	// count the endline if it's multiline comment, ie starting with /*
	if len(p.tok.Text) > 1 && p.tok.Text[1] == '*' {
		// don't use range here - no need to decode Unicode code points
		for i := 0; i < len(p.tok.Text); i++ {
			if p.tok.Text[i] == '\n' {
				endline++
			}
		}
	}

	comment = &ast.Comment{Start: p.tok.Pos, Text: p.tok.Text}
	p.tok = p.sc.Scan()
	return
}

func (p *Parser) consumeCommentGroup(n int) (comments *ast.CommentGroup, endline int) {
	var list []*ast.Comment
	endline = p.tok.Pos.Line

	for p.tok.Type == token.COMMENT && p.tok.Pos.Line <= endline+n {
		var comment *ast.Comment
		comment, endline = p.consumeComment()
		list = append(list, comment)
	}

	// add comment group to the comments list
	comments = &ast.CommentGroup{List: list}
	p.comments = append(p.comments, comments)

	return
}

// objectItem parses a single object item
func (p *Parser) objectItem() (*ast.ObjectItem, error) {
	defer un(trace(p, "ParseObjectItem"))

	keys, err := p.objectKey()
	if len(keys) > 0 && err == errEofToken {
		// We ignore eof token here since it is an error if we didn't
		// receive a value (but we did receive a key) for the item.
		err = nil
	}
	if len(keys) > 0 && err != nil && p.tok.Type == token.RBRACE {
		// This is a strange boolean statement, but what it means is:
		// We have keys with no value, and we're likely in an object
		// (since RBrace ends an object). For this, we set err to nil so
		// we continue and get the error below of having the wrong value
		// type.
		err = nil

		// Reset the token type so we don't think it completed fine. See
		// objectType which uses p.tok.Type to check if we're done with
		// the object.
		p.tok.Type = token.EOF
	}
	if err != nil {
		return nil, err
	}

	o := &ast.ObjectItem{
		Keys: keys,
	}

	if p.leadComment != nil {
		o.LeadComment = p.leadComment
		p.leadComment = nil
	}

	switch p.tok.Type {
	case token.ASSIGN:
		o.Assign = p.tok.Pos
		o.Val, err = p.object()
		if err != nil {
			return nil, err
		}
	case token.LBRACE:
		o.Val, err = p.objectType()
		if err != nil {
			return nil, err
		}
	default:
		keyStr := make([]string, 0, len(keys))
		for _, k := range keys {
			keyStr = append(keyStr, k.Token.Text)
		}

		return nil, &PosError{
			Pos: p.tok.Pos,
			Err: fmt.Errorf(
				"key '%s' expected start of object ('{') or assignment ('=')",
				strings.Join(keyStr, " ")),
		}
	}

	// key=#comment
	// val
	if p.lineComment != nil {
		o.LineComment, p.lineComment = p.lineComment, nil
	}

	// do a look-ahead for line comment
	p.scan()
	if len(keys) > 0 && o.Val.Pos().Line == keys[0].Pos().Line && p.lineComment != nil {
		o.LineComment = p.lineComment
		p.lineComment = nil
	}
	p.unscan()
	return o, nil
}

// objectKey parses an object key and returns a ObjectKey AST
func (p *Parser) objectKey() ([]*ast.ObjectKey, error) {
	keyCount := 0
	keys := make([]*ast.ObjectKey, 0)

	for {
		tok := p.scan()
		switch tok.Type {
		case token.EOF:
			// It is very important to also return the keys here as well as
			// the error. This is because we need to be able to tell if we
			// did parse keys prior to finding the EOF, or if we just found
			// a bare EOF.
			return keys, errEofToken
		case token.ASSIGN:
			// assignment or object only, but not nested objects. this is not
			// allowed: `foo bar = {}`
			if keyCount > 1 {
				return nil, &PosError{
					Pos: p.tok.Pos,
					Err: fmt.Errorf("nested object expected: LBRACE got: %s", p.tok.Type),
				}
			}

			if keyCount == 0 {
				return nil, &PosError{
					Pos: p.tok.Pos,
					Err: errors.New("no object keys found!"),
				}
			}

			return keys, nil
		case token.LBRACE:
			var err error

			// If we have no keys, then it is a syntax error. i.e. {{}} is not
			// allowed.
			if len(keys) == 0 {
				err = &PosError{
					Pos: p.tok.Pos,
					Err: fmt.Errorf("expected: IDENT | STRING got: %s", p.tok.Type),
				}
			}

			// object
			return keys, err
		case token.IDENT, token.STRING:
			keyCount++
			keys = append(keys, &ast.ObjectKey{Token: p.tok})
		case token.ILLEGAL:
			return keys, &PosError{
				Pos: p.tok.Pos,
				Err: fmt.Errorf("illegal character"),
			}
		default:
			return keys, &PosError{
				Pos: p.tok.Pos,
				Err: fmt.Errorf("expected: IDENT | STRING | ASSIGN | LBRACE got: %s", p.tok.Type),
			}
		}
	}
}

// object parses any type of object, such as number, bool, string, object or
// list.
func (p *Parser) object() (ast.Node, error) {
	defer un(trace(p, "ParseType"))
	tok := p.scan()

	switch tok.Type {
	case token.NUMBER, token.FLOAT, token.BOOL, token.STRING, token.HEREDOC:
		return p.literalType()
	case token.LBRACE:
		return p.objectType()
	case token.LBRACK:
		return p.listType()
	case token.COMMENT:
		// implement comment
	case token.EOF:
		return nil, errEofToken
	}

	return nil, &PosError{
		Pos: tok.Pos,
		Err: fmt.Errorf("Unknown token: %+v", tok),
	}
}

// objectType parses an object type and returns a ObjectType AST
func (p *Parser) objectType() (*ast.ObjectType, error) {
	defer un(trace(p, "ParseObjectType"))

	// we assume that the currently scanned token is a LBRACE
	o := &ast.ObjectType{
		Lbrace: p.tok.Pos,
	}

	l, err := p.objectList(true)

	// if we hit RBRACE, we are good to go (means we parsed all Items), if it's
	// not a RBRACE, it's an syntax error and we just return it.
	if err != nil && p.tok.Type != token.RBRACE {
		return nil, err
	}

	// No error, scan and expect the ending to be a brace
	if tok := p.scan(); tok.Type != token.RBRACE {
		return nil, &PosError{
			Pos: tok.Pos,
			Err: fmt.Errorf("object expected closing RBRACE got: %s", tok.Type),
		}
	}

	o.List = l
	o.Rbrace = p.tok.Pos // advanced via parseObjectList
	return o, nil
}

// listType parses a list type and returns a ListType AST
func (p *Parser) listType() (*ast.ListType, error) {
	defer un(trace(p, "ParseListType"))

	// we assume that the currently scanned token is a LBRACK
	l := &ast.ListType{
		Lbrack: p.tok.Pos,
	}

	needComma := false
	for {
		tok := p.scan()
		if needComma {
			switch tok.Type {
			case token.COMMA, token.RBRACK:
			default:
				return nil, &PosError{
					Pos: tok.Pos,
					Err: fmt.Errorf(
						"error parsing list, expected comma or list end, got: %s",
						tok.Type),
				}
			}
		}
		switch tok.Type {
		case token.BOOL, token.NUMBER, token.FLOAT, token.STRING, token.HEREDOC:
			node, err := p.literalType()
			if err != nil {
				return nil, err
			}

			// If there is a lead comment, apply it
			if p.leadComment != nil {
				node.LeadComment = p.leadComment
				p.leadComment = nil
			}

			l.Add(node)
			needComma = true
		case token.COMMA:
			// get next list item or we are at the end
			// do a look-ahead for line comment
			p.scan()
			if p.lineComment != nil && len(l.List) > 0 {
				lit, ok := l.List[len(l.List)-1].(*ast.LiteralType)
				if ok {
					lit.LineComment = p.lineComment
					l.List[len(l.List)-1] = lit
					p.lineComment = nil
				}
			}
			p.unscan()

			needComma = false
			continue
		case token.LBRACE:
			// Looks like a nested object, so parse it out
			node, err := p.objectType()
			if err != nil {
				return nil, &PosError{
					Pos: tok.Pos,
					Err: fmt.Errorf(
						"error while trying to parse object within list: %s", err),
				}
			}
			l.Add(node)
			needComma = true
		case token.LBRACK:
			node, err := p.listType()
			if err != nil {
				return nil, &PosError{
					Pos: tok.Pos,
					Err: fmt.Errorf(
						"error while trying to parse list within list: %s", err),
				}
			}
			l.Add(node)
		case token.RBRACK:
			// finished
			l.Rbrack = p.tok.Pos
			return l, nil
		default:
			return nil, &PosError{
				Pos: tok.Pos,
				Err: fmt.Errorf("unexpected token while parsing list: %s", tok.Type),
			}
		}
	}
}

// literalType parses a literal type and returns a LiteralType AST
func (p *Parser) literalType() (*ast.LiteralType, error) {
	defer un(trace(p, "ParseLiteral"))

	return &ast.LiteralType{
		Token: p.tok,
	}, nil
}

// scan returns the next token from the underlying scanner. If a token has
// been unscanned then read that instead. In the process, it collects any
// comment groups encountered, and remembers the last lead and line comments.
func (p *Parser) scan() token.Token {
	// If we have a token on the buffer, then return it.
	if p.n != 0 {
		p.n = 0
		return p.tok
	}

	// Otherwise read the next token from the scanner and Save it to the buffer
	// in case we unscan later.
	prev := p.tok
	p.tok = p.sc.Scan()

	if p.tok.Type == token.COMMENT {
		var comment *ast.CommentGroup
		var endline int

		// fmt.Printf("p.tok.Pos.Line = %+v prev: %d endline %d \n",
		// p.tok.Pos.Line, prev.Pos.Line, endline)
		if p.tok.Pos.Line == prev.Pos.Line {
			// The comment is on same line as the previous token; it
			// cannot be a lead comment but may be a line comment.
			comment, endline = p.consumeCommentGroup(0)
			if p.tok.Pos.Line != endline {
				// The next token is on a different line, thus
				// the last comment group is a line comment.
				p.lineComment = comment
			}
		}

		// consume successor comments, if any
		endline = -1
		for p.tok.Type == token.COMMENT {
			comment, endline = p.consumeCommentGroup(1)
		}

		if endline+1 == p.tok.Pos.Line && p.tok.Type != token.RBRACE {
			switch p.tok.Type {
			case token.RBRACE, token.RBRACK:
				// Do not count for these cases
			default:
				// The next token is following on the line immediately after the
				// comment group, thus the last comment group is a lead comment.
				p.leadComment = comment
			}
		}

	}

	return p.tok
}

// unscan pushes the previously read token back onto the buffer.
func (p *Parser) unscan() {
	p.n = 1
}

// ----------------------------------------------------------------------------
// Parsing support

func (p *Parser) printTrace(a ...interface{}) {
	if !p.enableTrace {
		return
	}

	const dots = ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "
	const n = len(dots)
	fmt.Printf("%5d:%3d: ", p.tok.Pos.Line, p.tok.Pos.Column)

	i := 2 * p.indent
	for i > n {
		fmt.Print(dots)
		i -= n
	}
	// i <= n
	fmt.Print(dots[0:i])
	fmt.Println(a...)
}

func trace(p *Parser, msg string) *Parser {
	p.printTrace(msg, "(")
	p.indent++
	return p
}

// Usage pattern: defer un(trace(p, "..."))
func un(p *Parser) {
	p.indent--
	p.printTrace(")")
}
 07070100000751000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/hcl/printer   07070100000752000081A4000000000000000000000001645E367C00004D1E000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/hcl/printer/nodes.go  package printer

import (
	"bytes"
	"fmt"
	"sort"

	"github.com/hashicorp/hcl/hcl/ast"
	"github.com/hashicorp/hcl/hcl/token"
)

const (
	blank    = byte(' ')
	newline  = byte('\n')
	tab      = byte('\t')
	infinity = 1 << 30 // offset or line
)

var (
	unindent = []byte("\uE123") // in the private use space
)

type printer struct {
	cfg  Config
	prev token.Pos

	comments           []*ast.CommentGroup // may be nil, contains all comments
	standaloneComments []*ast.CommentGroup // contains all standalone comments (not assigned to any node)

	enableTrace bool
	indentTrace int
}

type ByPosition []*ast.CommentGroup

func (b ByPosition) Len() int           { return len(b) }
func (b ByPosition) Swap(i, j int)      { b[i], b[j] = b[j], b[i] }
func (b ByPosition) Less(i, j int) bool { return b[i].Pos().Before(b[j].Pos()) }

// collectComments comments all standalone comments which are not lead or line
// comment
func (p *printer) collectComments(node ast.Node) {
	// first collect all comments. This is already stored in
	// ast.File.(comments)
	ast.Walk(node, func(nn ast.Node) (ast.Node, bool) {
		switch t := nn.(type) {
		case *ast.File:
			p.comments = t.Comments
			return nn, false
		}
		return nn, true
	})

	standaloneComments := make(map[token.Pos]*ast.CommentGroup, 0)
	for _, c := range p.comments {
		standaloneComments[c.Pos()] = c
	}

	// next remove all lead and line comments from the overall comment map.
	// This will give us comments which are standalone, comments which are not
	// assigned to any kind of node.
	ast.Walk(node, func(nn ast.Node) (ast.Node, bool) {
		switch t := nn.(type) {
		case *ast.LiteralType:
			if t.LeadComment != nil {
				for _, comment := range t.LeadComment.List {
					if _, ok := standaloneComments[comment.Pos()]; ok {
						delete(standaloneComments, comment.Pos())
					}
				}
			}

			if t.LineComment != nil {
				for _, comment := range t.LineComment.List {
					if _, ok := standaloneComments[comment.Pos()]; ok {
						delete(standaloneComments, comment.Pos())
					}
				}
			}
		case *ast.ObjectItem:
			if t.LeadComment != nil {
				for _, comment := range t.LeadComment.List {
					if _, ok := standaloneComments[comment.Pos()]; ok {
						delete(standaloneComments, comment.Pos())
					}
				}
			}

			if t.LineComment != nil {
				for _, comment := range t.LineComment.List {
					if _, ok := standaloneComments[comment.Pos()]; ok {
						delete(standaloneComments, comment.Pos())
					}
				}
			}
		}

		return nn, true
	})

	for _, c := range standaloneComments {
		p.standaloneComments = append(p.standaloneComments, c)
	}

	sort.Sort(ByPosition(p.standaloneComments))
}

// output prints creates b printable HCL output and returns it.
func (p *printer) output(n interface{}) []byte {
	var buf bytes.Buffer

	switch t := n.(type) {
	case *ast.File:
		// File doesn't trace so we add the tracing here
		defer un(trace(p, "File"))
		return p.output(t.Node)
	case *ast.ObjectList:
		defer un(trace(p, "ObjectList"))

		var index int
		for {
			// Determine the location of the next actual non-comment
			// item. If we're at the end, the next item is at "infinity"
			var nextItem token.Pos
			if index != len(t.Items) {
				nextItem = t.Items[index].Pos()
			} else {
				nextItem = token.Pos{Offset: infinity, Line: infinity}
			}

			// Go through the standalone comments in the file and print out
			// the comments that we should be for this object item.
			for _, c := range p.standaloneComments {
				// Go through all the comments in the group. The group
				// should be printed together, not separated by double newlines.
				printed := false
				newlinePrinted := false
				for _, comment := range c.List {
					// We only care about comments after the previous item
					// we've printed so that comments are printed in the
					// correct locations (between two objects for example).
					// And before the next item.
					if comment.Pos().After(p.prev) && comment.Pos().Before(nextItem) {
						// if we hit the end add newlines so we can print the comment
						// we don't do this if prev is invalid which means the
						// beginning of the file since the first comment should
						// be at the first line.
						if !newlinePrinted && p.prev.IsValid() && index == len(t.Items) {
							buf.Write([]byte{newline, newline})
							newlinePrinted = true
						}

						// Write the actual comment.
						buf.WriteString(comment.Text)
						buf.WriteByte(newline)

						// Set printed to true to note that we printed something
						printed = true
					}
				}

				// If we're not at the last item, write a new line so
				// that there is a newline separating this comment from
				// the next object.
				if printed && index != len(t.Items) {
					buf.WriteByte(newline)
				}
			}

			if index == len(t.Items) {
				break
			}

			buf.Write(p.output(t.Items[index]))
			if index != len(t.Items)-1 {
				// Always write a newline to separate us from the next item
				buf.WriteByte(newline)

				// Need to determine if we're going to separate the next item
				// with a blank line. The logic here is simple, though there
				// are a few conditions:
				//
				//   1. The next object is more than one line away anyways,
				//      so we need an empty line.
				//
				//   2. The next object is not a "single line" object, so
				//      we need an empty line.
				//
				//   3. This current object is not a single line object,
				//      so we need an empty line.
				current := t.Items[index]
				next := t.Items[index+1]
				if next.Pos().Line != t.Items[index].Pos().Line+1 ||
					!p.isSingleLineObject(next) ||
					!p.isSingleLineObject(current) {
					buf.WriteByte(newline)
				}
			}
			index++
		}
	case *ast.ObjectKey:
		buf.WriteString(t.Token.Text)
	case *ast.ObjectItem:
		p.prev = t.Pos()
		buf.Write(p.objectItem(t))
	case *ast.LiteralType:
		buf.Write(p.literalType(t))
	case *ast.ListType:
		buf.Write(p.list(t))
	case *ast.ObjectType:
		buf.Write(p.objectType(t))
	default:
		fmt.Printf(" unknown type: %T\n", n)
	}

	return buf.Bytes()
}

func (p *printer) literalType(lit *ast.LiteralType) []byte {
	result := []byte(lit.Token.Text)
	switch lit.Token.Type {
	case token.HEREDOC:
		// Clear the trailing newline from heredocs
		if result[len(result)-1] == '\n' {
			result = result[:len(result)-1]
		}

		// Poison lines 2+ so that we don't indent them
		result = p.heredocIndent(result)
	case token.STRING:
		// If this is a multiline string, poison lines 2+ so we don't
		// indent them.
		if bytes.IndexRune(result, '\n') >= 0 {
			result = p.heredocIndent(result)
		}
	}

	return result
}

// objectItem returns the printable HCL form of an object item. An object type
// starts with one/multiple keys and has a value. The value might be of any
// type.
func (p *printer) objectItem(o *ast.ObjectItem) []byte {
	defer un(trace(p, fmt.Sprintf("ObjectItem: %s", o.Keys[0].Token.Text)))
	var buf bytes.Buffer

	if o.LeadComment != nil {
		for _, comment := range o.LeadComment.List {
			buf.WriteString(comment.Text)
			buf.WriteByte(newline)
		}
	}

	// If key and val are on different lines, treat line comments like lead comments.
	if o.LineComment != nil && o.Val.Pos().Line != o.Keys[0].Pos().Line {
		for _, comment := range o.LineComment.List {
			buf.WriteString(comment.Text)
			buf.WriteByte(newline)
		}
	}

	for i, k := range o.Keys {
		buf.WriteString(k.Token.Text)
		buf.WriteByte(blank)

		// reach end of key
		if o.Assign.IsValid() && i == len(o.Keys)-1 && len(o.Keys) == 1 {
			buf.WriteString("=")
			buf.WriteByte(blank)
		}
	}

	buf.Write(p.output(o.Val))

	if o.LineComment != nil && o.Val.Pos().Line == o.Keys[0].Pos().Line {
		buf.WriteByte(blank)
		for _, comment := range o.LineComment.List {
			buf.WriteString(comment.Text)
		}
	}

	return buf.Bytes()
}

// objectType returns the printable HCL form of an object type. An object type
// begins with a brace and ends with a brace.
func (p *printer) objectType(o *ast.ObjectType) []byte {
	defer un(trace(p, "ObjectType"))
	var buf bytes.Buffer
	buf.WriteString("{")

	var index int
	var nextItem token.Pos
	var commented, newlinePrinted bool
	for {
		// Determine the location of the next actual non-comment
		// item. If we're at the end, the next item is the closing brace
		if index != len(o.List.Items) {
			nextItem = o.List.Items[index].Pos()
		} else {
			nextItem = o.Rbrace
		}

		// Go through the standalone comments in the file and print out
		// the comments that we should be for this object item.
		for _, c := range p.standaloneComments {
			printed := false
			var lastCommentPos token.Pos
			for _, comment := range c.List {
				// We only care about comments after the previous item
				// we've printed so that comments are printed in the
				// correct locations (between two objects for example).
				// And before the next item.
				if comment.Pos().After(p.prev) && comment.Pos().Before(nextItem) {
					// If there are standalone comments and the initial newline has not
					// been printed yet, do it now.
					if !newlinePrinted {
						newlinePrinted = true
						buf.WriteByte(newline)
					}

					// add newline if it's between other printed nodes
					if index > 0 {
						commented = true
						buf.WriteByte(newline)
					}

					// Store this position
					lastCommentPos = comment.Pos()

					// output the comment itself
					buf.Write(p.indent(p.heredocIndent([]byte(comment.Text))))

					// Set printed to true to note that we printed something
					printed = true

					/*
						if index != len(o.List.Items) {
							buf.WriteByte(newline) // do not print on the end
						}
					*/
				}
			}

			// Stuff to do if we had comments
			if printed {
				// Always write a newline
				buf.WriteByte(newline)

				// If there is another item in the object and our comment
				// didn't hug it directly, then make sure there is a blank
				// line separating them.
				if nextItem != o.Rbrace && nextItem.Line != lastCommentPos.Line+1 {
					buf.WriteByte(newline)
				}
			}
		}

		if index == len(o.List.Items) {
			p.prev = o.Rbrace
			break
		}

		// At this point we are sure that it's not a totally empty block: print
		// the initial newline if it hasn't been printed yet by the previous
		// block about standalone comments.
		if !newlinePrinted {
			buf.WriteByte(newline)
			newlinePrinted = true
		}

		// check if we have adjacent one liner items. If yes we'll going to align
		// the comments.
		var aligned []*ast.ObjectItem
		for _, item := range o.List.Items[index:] {
			// we don't group one line lists
			if len(o.List.Items) == 1 {
				break
			}

			// one means a oneliner with out any lead comment
			// two means a oneliner with lead comment
			// anything else might be something else
			cur := lines(string(p.objectItem(item)))
			if cur > 2 {
				break
			}

			curPos := item.Pos()

			nextPos := token.Pos{}
			if index != len(o.List.Items)-1 {
				nextPos = o.List.Items[index+1].Pos()
			}

			prevPos := token.Pos{}
			if index != 0 {
				prevPos = o.List.Items[index-1].Pos()
			}

			// fmt.Println("DEBUG ----------------")
			// fmt.Printf("prev = %+v prevPos: %s\n", prev, prevPos)
			// fmt.Printf("cur = %+v curPos: %s\n", cur, curPos)
			// fmt.Printf("next = %+v nextPos: %s\n", next, nextPos)

			if curPos.Line+1 == nextPos.Line {
				aligned = append(aligned, item)
				index++
				continue
			}

			if curPos.Line-1 == prevPos.Line {
				aligned = append(aligned, item)
				index++

				// finish if we have a new line or comment next. This happens
				// if the next item is not adjacent
				if curPos.Line+1 != nextPos.Line {
					break
				}
				continue
			}

			break
		}

		// put newlines if the items are between other non aligned items.
		// newlines are also added if there is a standalone comment already, so
		// check it too
		if !commented && index != len(aligned) {
			buf.WriteByte(newline)
		}

		if len(aligned) >= 1 {
			p.prev = aligned[len(aligned)-1].Pos()

			items := p.alignedItems(aligned)
			buf.Write(p.indent(items))
		} else {
			p.prev = o.List.Items[index].Pos()

			buf.Write(p.indent(p.objectItem(o.List.Items[index])))
			index++
		}

		buf.WriteByte(newline)
	}

	buf.WriteString("}")
	return buf.Bytes()
}

func (p *printer) alignedItems(items []*ast.ObjectItem) []byte {
	var buf bytes.Buffer

	// find the longest key and value length, needed for alignment
	var longestKeyLen int // longest key length
	var longestValLen int // longest value length
	for _, item := range items {
		key := len(item.Keys[0].Token.Text)
		val := len(p.output(item.Val))

		if key > longestKeyLen {
			longestKeyLen = key
		}

		if val > longestValLen {
			longestValLen = val
		}
	}

	for i, item := range items {
		if item.LeadComment != nil {
			for _, comment := range item.LeadComment.List {
				buf.WriteString(comment.Text)
				buf.WriteByte(newline)
			}
		}

		for i, k := range item.Keys {
			keyLen := len(k.Token.Text)
			buf.WriteString(k.Token.Text)
			for i := 0; i < longestKeyLen-keyLen+1; i++ {
				buf.WriteByte(blank)
			}

			// reach end of key
			if i == len(item.Keys)-1 && len(item.Keys) == 1 {
				buf.WriteString("=")
				buf.WriteByte(blank)
			}
		}

		val := p.output(item.Val)
		valLen := len(val)
		buf.Write(val)

		if item.Val.Pos().Line == item.Keys[0].Pos().Line && item.LineComment != nil {
			for i := 0; i < longestValLen-valLen+1; i++ {
				buf.WriteByte(blank)
			}

			for _, comment := range item.LineComment.List {
				buf.WriteString(comment.Text)
			}
		}

		// do not print for the last item
		if i != len(items)-1 {
			buf.WriteByte(newline)
		}
	}

	return buf.Bytes()
}

// list returns the printable HCL form of an list type.
func (p *printer) list(l *ast.ListType) []byte {
	if p.isSingleLineList(l) {
		return p.singleLineList(l)
	}

	var buf bytes.Buffer
	buf.WriteString("[")
	buf.WriteByte(newline)

	var longestLine int
	for _, item := range l.List {
		// for now we assume that the list only contains literal types
		if lit, ok := item.(*ast.LiteralType); ok {
			lineLen := len(lit.Token.Text)
			if lineLen > longestLine {
				longestLine = lineLen
			}
		}
	}

	haveEmptyLine := false
	for i, item := range l.List {
		// If we have a lead comment, then we want to write that first
		leadComment := false
		if lit, ok := item.(*ast.LiteralType); ok && lit.LeadComment != nil {
			leadComment = true

			// Ensure an empty line before every element with a
			// lead comment (except the first item in a list).
			if !haveEmptyLine && i != 0 {
				buf.WriteByte(newline)
			}

			for _, comment := range lit.LeadComment.List {
				buf.Write(p.indent([]byte(comment.Text)))
				buf.WriteByte(newline)
			}
		}

		// also indent each line
		val := p.output(item)
		curLen := len(val)
		buf.Write(p.indent(val))

		// if this item is a heredoc, then we output the comma on
		// the next line. This is the only case this happens.
		comma := []byte{','}
		if lit, ok := item.(*ast.LiteralType); ok && lit.Token.Type == token.HEREDOC {
			buf.WriteByte(newline)
			comma = p.indent(comma)
		}

		buf.Write(comma)

		if lit, ok := item.(*ast.LiteralType); ok && lit.LineComment != nil {
			// if the next item doesn't have any comments, do not align
			buf.WriteByte(blank) // align one space
			for i := 0; i < longestLine-curLen; i++ {
				buf.WriteByte(blank)
			}

			for _, comment := range lit.LineComment.List {
				buf.WriteString(comment.Text)
			}
		}

		buf.WriteByte(newline)

		// Ensure an empty line after every element with a
		// lead comment (except the first item in a list).
		haveEmptyLine = leadComment && i != len(l.List)-1
		if haveEmptyLine {
			buf.WriteByte(newline)
		}
	}

	buf.WriteString("]")
	return buf.Bytes()
}

// isSingleLineList returns true if:
// * they were previously formatted entirely on one line
// * they consist entirely of literals
// * there are either no heredoc strings or the list has exactly one element
// * there are no line comments
func (printer) isSingleLineList(l *ast.ListType) bool {
	for _, item := range l.List {
		if item.Pos().Line != l.Lbrack.Line {
			return false
		}

		lit, ok := item.(*ast.LiteralType)
		if !ok {
			return false
		}

		if lit.Token.Type == token.HEREDOC && len(l.List) != 1 {
			return false
		}

		if lit.LineComment != nil {
			return false
		}
	}

	return true
}

// singleLineList prints a simple single line list.
// For a definition of "simple", see isSingleLineList above.
func (p *printer) singleLineList(l *ast.ListType) []byte {
	buf := &bytes.Buffer{}

	buf.WriteString("[")
	for i, item := range l.List {
		if i != 0 {
			buf.WriteString(", ")
		}

		// Output the item itself
		buf.Write(p.output(item))

		// The heredoc marker needs to be at the end of line.
		if lit, ok := item.(*ast.LiteralType); ok && lit.Token.Type == token.HEREDOC {
			buf.WriteByte(newline)
		}
	}

	buf.WriteString("]")
	return buf.Bytes()
}

// indent indents the lines of the given buffer for each non-empty line
func (p *printer) indent(buf []byte) []byte {
	var prefix []byte
	if p.cfg.SpacesWidth != 0 {
		for i := 0; i < p.cfg.SpacesWidth; i++ {
			prefix = append(prefix, blank)
		}
	} else {
		prefix = []byte{tab}
	}

	var res []byte
	bol := true
	for _, c := range buf {
		if bol && c != '\n' {
			res = append(res, prefix...)
		}

		res = append(res, c)
		bol = c == '\n'
	}
	return res
}

// unindent removes all the indentation from the tombstoned lines
func (p *printer) unindent(buf []byte) []byte {
	var res []byte
	for i := 0; i < len(buf); i++ {
		skip := len(buf)-i <= len(unindent)
		if !skip {
			skip = !bytes.Equal(unindent, buf[i:i+len(unindent)])
		}
		if skip {
			res = append(res, buf[i])
			continue
		}

		// We have a marker. we have to backtrace here and clean out
		// any whitespace ahead of our tombstone up to a \n
		for j := len(res) - 1; j >= 0; j-- {
			if res[j] == '\n' {
				break
			}

			res = res[:j]
		}

		// Skip the entire unindent marker
		i += len(unindent) - 1
	}

	return res
}

// heredocIndent marks all the 2nd and further lines as unindentable
func (p *printer) heredocIndent(buf []byte) []byte {
	var res []byte
	bol := false
	for _, c := range buf {
		if bol && c != '\n' {
			res = append(res, unindent...)
		}
		res = append(res, c)
		bol = c == '\n'
	}
	return res
}

// isSingleLineObject tells whether the given object item is a single
// line object such as "obj {}".
//
// A single line object:
//
//   * has no lead comments (hence multi-line)
//   * has no assignment
//   * has no values in the stanza (within {})
//
func (p *printer) isSingleLineObject(val *ast.ObjectItem) bool {
	// If there is a lead comment, can't be one line
	if val.LeadComment != nil {
		return false
	}

	// If there is assignment, we always break by line
	if val.Assign.IsValid() {
		return false
	}

	// If it isn't an object type, then its not a single line object
	ot, ok := val.Val.(*ast.ObjectType)
	if !ok {
		return false
	}

	// If the object has no items, it is single line!
	return len(ot.List.Items) == 0
}

func lines(txt string) int {
	endline := 1
	for i := 0; i < len(txt); i++ {
		if txt[i] == '\n' {
			endline++
		}
	}
	return endline
}

// ----------------------------------------------------------------------------
// Tracing support

func (p *printer) printTrace(a ...interface{}) {
	if !p.enableTrace {
		return
	}

	const dots = ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "
	const n = len(dots)
	i := 2 * p.indentTrace
	for i > n {
		fmt.Print(dots)
		i -= n
	}
	// i <= n
	fmt.Print(dots[0:i])
	fmt.Println(a...)
}

func trace(p *printer, msg string) *printer {
	p.printTrace(msg, "(")
	p.indentTrace++
	return p
}

// Usage pattern: defer un(trace(p, "..."))
func un(p *printer) {
	p.indentTrace--
	p.printTrace(")")
}
  07070100000753000081A4000000000000000000000001645E367C000005A0000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/hcl/printer/printer.go    // Package printer implements printing of AST nodes to HCL format.
package printer

import (
	"bytes"
	"io"
	"text/tabwriter"

	"github.com/hashicorp/hcl/hcl/ast"
	"github.com/hashicorp/hcl/hcl/parser"
)

var DefaultConfig = Config{
	SpacesWidth: 2,
}

// A Config node controls the output of Fprint.
type Config struct {
	SpacesWidth int // if set, it will use spaces instead of tabs for alignment
}

func (c *Config) Fprint(output io.Writer, node ast.Node) error {
	p := &printer{
		cfg:                *c,
		comments:           make([]*ast.CommentGroup, 0),
		standaloneComments: make([]*ast.CommentGroup, 0),
		// enableTrace:        true,
	}

	p.collectComments(node)

	if _, err := output.Write(p.unindent(p.output(node))); err != nil {
		return err
	}

	// flush tabwriter, if any
	var err error
	if tw, _ := output.(*tabwriter.Writer); tw != nil {
		err = tw.Flush()
	}

	return err
}

// Fprint "pretty-prints" an HCL node to output
// It calls Config.Fprint with default settings.
func Fprint(output io.Writer, node ast.Node) error {
	return DefaultConfig.Fprint(output, node)
}

// Format formats src HCL and returns the result.
func Format(src []byte) ([]byte, error) {
	node, err := parser.Parse(src)
	if err != nil {
		return nil, err
	}

	var buf bytes.Buffer
	if err := DefaultConfig.Fprint(&buf, node); err != nil {
		return nil, err
	}

	// Add trailing newline to result
	buf.WriteString("\n")
	return buf.Bytes(), nil
}
07070100000754000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/hcl/scanner   07070100000755000081A4000000000000000000000001645E367C000039C2000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/hcl/scanner/scanner.go    // Package scanner implements a scanner for HCL (HashiCorp Configuration
// Language) source text.
package scanner

import (
	"bytes"
	"fmt"
	"os"
	"regexp"
	"unicode"
	"unicode/utf8"

	"github.com/hashicorp/hcl/hcl/token"
)

// eof represents a marker rune for the end of the reader.
const eof = rune(0)

// Scanner defines a lexical scanner
type Scanner struct {
	buf *bytes.Buffer // Source buffer for advancing and scanning
	src []byte        // Source buffer for immutable access

	// Source Position
	srcPos  token.Pos // current position
	prevPos token.Pos // previous position, used for peek() method

	lastCharLen int // length of last character in bytes
	lastLineLen int // length of last line in characters (for correct column reporting)

	tokStart int // token text start position
	tokEnd   int // token text end  position

	// Error is called for each error encountered. If no Error
	// function is set, the error is reported to os.Stderr.
	Error func(pos token.Pos, msg string)

	// ErrorCount is incremented by one for each error encountered.
	ErrorCount int

	// tokPos is the start position of most recently scanned token; set by
	// Scan. The Filename field is always left untouched by the Scanner.  If
	// an error is reported (via Error) and Position is invalid, the scanner is
	// not inside a token.
	tokPos token.Pos
}

// New creates and initializes a new instance of Scanner using src as
// its source content.
func New(src []byte) *Scanner {
	// even though we accept a src, we read from a io.Reader compatible type
	// (*bytes.Buffer). So in the future we might easily change it to streaming
	// read.
	b := bytes.NewBuffer(src)
	s := &Scanner{
		buf: b,
		src: src,
	}

	// srcPosition always starts with 1
	s.srcPos.Line = 1
	return s
}

// next reads the next rune from the bufferred reader. Returns the rune(0) if
// an error occurs (or io.EOF is returned).
func (s *Scanner) next() rune {
	ch, size, err := s.buf.ReadRune()
	if err != nil {
		// advance for error reporting
		s.srcPos.Column++
		s.srcPos.Offset += size
		s.lastCharLen = size
		return eof
	}

	// remember last position
	s.prevPos = s.srcPos

	s.srcPos.Column++
	s.lastCharLen = size
	s.srcPos.Offset += size

	if ch == utf8.RuneError && size == 1 {
		s.err("illegal UTF-8 encoding")
		return ch
	}

	if ch == '\n' {
		s.srcPos.Line++
		s.lastLineLen = s.srcPos.Column
		s.srcPos.Column = 0
	}

	if ch == '\x00' {
		s.err("unexpected null character (0x00)")
		return eof
	}

	if ch == '\uE123' {
		s.err("unicode code point U+E123 reserved for internal use")
		return utf8.RuneError
	}

	// debug
	// fmt.Printf("ch: %q, offset:column: %d:%d\n", ch, s.srcPos.Offset, s.srcPos.Column)
	return ch
}

// unread unreads the previous read Rune and updates the source position
func (s *Scanner) unread() {
	if err := s.buf.UnreadRune(); err != nil {
		panic(err) // this is user fault, we should catch it
	}
	s.srcPos = s.prevPos // put back last position
}

// peek returns the next rune without advancing the reader.
func (s *Scanner) peek() rune {
	peek, _, err := s.buf.ReadRune()
	if err != nil {
		return eof
	}

	s.buf.UnreadRune()
	return peek
}

// Scan scans the next token and returns the token.
func (s *Scanner) Scan() token.Token {
	ch := s.next()

	// skip white space
	for isWhitespace(ch) {
		ch = s.next()
	}

	var tok token.Type

	// token text markings
	s.tokStart = s.srcPos.Offset - s.lastCharLen

	// token position, initial next() is moving the offset by one(size of rune
	// actually), though we are interested with the starting point
	s.tokPos.Offset = s.srcPos.Offset - s.lastCharLen
	if s.srcPos.Column > 0 {
		// common case: last character was not a '\n'
		s.tokPos.Line = s.srcPos.Line
		s.tokPos.Column = s.srcPos.Column
	} else {
		// last character was a '\n'
		// (we cannot be at the beginning of the source
		// since we have called next() at least once)
		s.tokPos.Line = s.srcPos.Line - 1
		s.tokPos.Column = s.lastLineLen
	}

	switch {
	case isLetter(ch):
		tok = token.IDENT
		lit := s.scanIdentifier()
		if lit == "true" || lit == "false" {
			tok = token.BOOL
		}
	case isDecimal(ch):
		tok = s.scanNumber(ch)
	default:
		switch ch {
		case eof:
			tok = token.EOF
		case '"':
			tok = token.STRING
			s.scanString()
		case '#', '/':
			tok = token.COMMENT
			s.scanComment(ch)
		case '.':
			tok = token.PERIOD
			ch = s.peek()
			if isDecimal(ch) {
				tok = token.FLOAT
				ch = s.scanMantissa(ch)
				ch = s.scanExponent(ch)
			}
		case '<':
			tok = token.HEREDOC
			s.scanHeredoc()
		case '[':
			tok = token.LBRACK
		case ']':
			tok = token.RBRACK
		case '{':
			tok = token.LBRACE
		case '}':
			tok = token.RBRACE
		case ',':
			tok = token.COMMA
		case '=':
			tok = token.ASSIGN
		case '+':
			tok = token.ADD
		case '-':
			if isDecimal(s.peek()) {
				ch := s.next()
				tok = s.scanNumber(ch)
			} else {
				tok = token.SUB
			}
		default:
			s.err("illegal char")
		}
	}

	// finish token ending
	s.tokEnd = s.srcPos.Offset

	// create token literal
	var tokenText string
	if s.tokStart >= 0 {
		tokenText = string(s.src[s.tokStart:s.tokEnd])
	}
	s.tokStart = s.tokEnd // ensure idempotency of tokenText() call

	return token.Token{
		Type: tok,
		Pos:  s.tokPos,
		Text: tokenText,
	}
}

func (s *Scanner) scanComment(ch rune) {
	// single line comments
	if ch == '#' || (ch == '/' && s.peek() != '*') {
		if ch == '/' && s.peek() != '/' {
			s.err("expected '/' for comment")
			return
		}

		ch = s.next()
		for ch != '\n' && ch >= 0 && ch != eof {
			ch = s.next()
		}
		if ch != eof && ch >= 0 {
			s.unread()
		}
		return
	}

	// be sure we get the character after /* This allows us to find comment's
	// that are not erminated
	if ch == '/' {
		s.next()
		ch = s.next() // read character after "/*"
	}

	// look for /* - style comments
	for {
		if ch < 0 || ch == eof {
			s.err("comment not terminated")
			break
		}

		ch0 := ch
		ch = s.next()
		if ch0 == '*' && ch == '/' {
			break
		}
	}
}

// scanNumber scans a HCL number definition starting with the given rune
func (s *Scanner) scanNumber(ch rune) token.Type {
	if ch == '0' {
		// check for hexadecimal, octal or float
		ch = s.next()
		if ch == 'x' || ch == 'X' {
			// hexadecimal
			ch = s.next()
			found := false
			for isHexadecimal(ch) {
				ch = s.next()
				found = true
			}

			if !found {
				s.err("illegal hexadecimal number")
			}

			if ch != eof {
				s.unread()
			}

			return token.NUMBER
		}

		// now it's either something like: 0421(octal) or 0.1231(float)
		illegalOctal := false
		for isDecimal(ch) {
			ch = s.next()
			if ch == '8' || ch == '9' {
				// this is just a possibility. For example 0159 is illegal, but
				// 0159.23 is valid. So we mark a possible illegal octal. If
				// the next character is not a period, we'll print the error.
				illegalOctal = true
			}
		}

		if ch == 'e' || ch == 'E' {
			ch = s.scanExponent(ch)
			return token.FLOAT
		}

		if ch == '.' {
			ch = s.scanFraction(ch)

			if ch == 'e' || ch == 'E' {
				ch = s.next()
				ch = s.scanExponent(ch)
			}
			return token.FLOAT
		}

		if illegalOctal {
			s.err("illegal octal number")
		}

		if ch != eof {
			s.unread()
		}
		return token.NUMBER
	}

	s.scanMantissa(ch)
	ch = s.next() // seek forward
	if ch == 'e' || ch == 'E' {
		ch = s.scanExponent(ch)
		return token.FLOAT
	}

	if ch == '.' {
		ch = s.scanFraction(ch)
		if ch == 'e' || ch == 'E' {
			ch = s.next()
			ch = s.scanExponent(ch)
		}
		return token.FLOAT
	}

	if ch != eof {
		s.unread()
	}
	return token.NUMBER
}

// scanMantissa scans the mantissa beginning from the rune. It returns the next
// non decimal rune. It's used to determine wheter it's a fraction or exponent.
func (s *Scanner) scanMantissa(ch rune) rune {
	scanned := false
	for isDecimal(ch) {
		ch = s.next()
		scanned = true
	}

	if scanned && ch != eof {
		s.unread()
	}
	return ch
}

// scanFraction scans the fraction after the '.' rune
func (s *Scanner) scanFraction(ch rune) rune {
	if ch == '.' {
		ch = s.peek() // we peek just to see if we can move forward
		ch = s.scanMantissa(ch)
	}
	return ch
}

// scanExponent scans the remaining parts of an exponent after the 'e' or 'E'
// rune.
func (s *Scanner) scanExponent(ch rune) rune {
	if ch == 'e' || ch == 'E' {
		ch = s.next()
		if ch == '-' || ch == '+' {
			ch = s.next()
		}
		ch = s.scanMantissa(ch)
	}
	return ch
}

// scanHeredoc scans a heredoc string
func (s *Scanner) scanHeredoc() {
	// Scan the second '<' in example: '<<EOF'
	if s.next() != '<' {
		s.err("heredoc expected second '<', didn't see it")
		return
	}

	// Get the original offset so we can read just the heredoc ident
	offs := s.srcPos.Offset

	// Scan the identifier
	ch := s.next()

	// Indented heredoc syntax
	if ch == '-' {
		ch = s.next()
	}

	for isLetter(ch) || isDigit(ch) {
		ch = s.next()
	}

	// If we reached an EOF then that is not good
	if ch == eof {
		s.err("heredoc not terminated")
		return
	}

	// Ignore the '\r' in Windows line endings
	if ch == '\r' {
		if s.peek() == '\n' {
			ch = s.next()
		}
	}

	// If we didn't reach a newline then that is also not good
	if ch != '\n' {
		s.err("invalid characters in heredoc anchor")
		return
	}

	// Read the identifier
	identBytes := s.src[offs : s.srcPos.Offset-s.lastCharLen]
	if len(identBytes) == 0 || (len(identBytes) == 1 && identBytes[0] == '-') {
		s.err("zero-length heredoc anchor")
		return
	}

	var identRegexp *regexp.Regexp
	if identBytes[0] == '-' {
		identRegexp = regexp.MustCompile(fmt.Sprintf(`^[[:space:]]*%s\r*\z`, identBytes[1:]))
	} else {
		identRegexp = regexp.MustCompile(fmt.Sprintf(`^[[:space:]]*%s\r*\z`, identBytes))
	}

	// Read the actual string value
	lineStart := s.srcPos.Offset
	for {
		ch := s.next()

		// Special newline handling.
		if ch == '\n' {
			// Math is fast, so we first compare the byte counts to see if we have a chance
			// of seeing the same identifier - if the length is less than the number of bytes
			// in the identifier, this cannot be a valid terminator.
			lineBytesLen := s.srcPos.Offset - s.lastCharLen - lineStart
			if lineBytesLen >= len(identBytes) && identRegexp.Match(s.src[lineStart:s.srcPos.Offset-s.lastCharLen]) {
				break
			}

			// Not an anchor match, record the start of a new line
			lineStart = s.srcPos.Offset
		}

		if ch == eof {
			s.err("heredoc not terminated")
			return
		}
	}

	return
}

// scanString scans a quoted string
func (s *Scanner) scanString() {
	braces := 0
	for {
		// '"' opening already consumed
		// read character after quote
		ch := s.next()

		if (ch == '\n' && braces == 0) || ch < 0 || ch == eof {
			s.err("literal not terminated")
			return
		}

		if ch == '"' && braces == 0 {
			break
		}

		// If we're going into a ${} then we can ignore quotes for awhile
		if braces == 0 && ch == '$' && s.peek() == '{' {
			braces++
			s.next()
		} else if braces > 0 && ch == '{' {
			braces++
		}
		if braces > 0 && ch == '}' {
			braces--
		}

		if ch == '\\' {
			s.scanEscape()
		}
	}

	return
}

// scanEscape scans an escape sequence
func (s *Scanner) scanEscape() rune {
	// http://en.cppreference.com/w/cpp/language/escape
	ch := s.next() // read character after '/'
	switch ch {
	case 'a', 'b', 'f', 'n', 'r', 't', 'v', '\\', '"':
		// nothing to do
	case '0', '1', '2', '3', '4', '5', '6', '7':
		// octal notation
		ch = s.scanDigits(ch, 8, 3)
	case 'x':
		// hexademical notation
		ch = s.scanDigits(s.next(), 16, 2)
	case 'u':
		// universal character name
		ch = s.scanDigits(s.next(), 16, 4)
	case 'U':
		// universal character name
		ch = s.scanDigits(s.next(), 16, 8)
	default:
		s.err("illegal char escape")
	}
	return ch
}

// scanDigits scans a rune with the given base for n times. For example an
// octal notation \184 would yield in scanDigits(ch, 8, 3)
func (s *Scanner) scanDigits(ch rune, base, n int) rune {
	start := n
	for n > 0 && digitVal(ch) < base {
		ch = s.next()
		if ch == eof {
			// If we see an EOF, we halt any more scanning of digits
			// immediately.
			break
		}

		n--
	}
	if n > 0 {
		s.err("illegal char escape")
	}

	if n != start && ch != eof {
		// we scanned all digits, put the last non digit char back,
		// only if we read anything at all
		s.unread()
	}

	return ch
}

// scanIdentifier scans an identifier and returns the literal string
func (s *Scanner) scanIdentifier() string {
	offs := s.srcPos.Offset - s.lastCharLen
	ch := s.next()
	for isLetter(ch) || isDigit(ch) || ch == '-' || ch == '.' {
		ch = s.next()
	}

	if ch != eof {
		s.unread() // we got identifier, put back latest char
	}

	return string(s.src[offs:s.srcPos.Offset])
}

// recentPosition returns the position of the character immediately after the
// character or token returned by the last call to Scan.
func (s *Scanner) recentPosition() (pos token.Pos) {
	pos.Offset = s.srcPos.Offset - s.lastCharLen
	switch {
	case s.srcPos.Column > 0:
		// common case: last character was not a '\n'
		pos.Line = s.srcPos.Line
		pos.Column = s.srcPos.Column
	case s.lastLineLen > 0:
		// last character was a '\n'
		// (we cannot be at the beginning of the source
		// since we have called next() at least once)
		pos.Line = s.srcPos.Line - 1
		pos.Column = s.lastLineLen
	default:
		// at the beginning of the source
		pos.Line = 1
		pos.Column = 1
	}
	return
}

// err prints the error of any scanning to s.Error function. If the function is
// not defined, by default it prints them to os.Stderr
func (s *Scanner) err(msg string) {
	s.ErrorCount++
	pos := s.recentPosition()

	if s.Error != nil {
		s.Error(pos, msg)
		return
	}

	fmt.Fprintf(os.Stderr, "%s: %s\n", pos, msg)
}

// isHexadecimal returns true if the given rune is a letter
func isLetter(ch rune) bool {
	return 'a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z' || ch == '_' || ch >= 0x80 && unicode.IsLetter(ch)
}

// isDigit returns true if the given rune is a decimal digit
func isDigit(ch rune) bool {
	return '0' <= ch && ch <= '9' || ch >= 0x80 && unicode.IsDigit(ch)
}

// isDecimal returns true if the given rune is a decimal number
func isDecimal(ch rune) bool {
	return '0' <= ch && ch <= '9'
}

// isHexadecimal returns true if the given rune is an hexadecimal number
func isHexadecimal(ch rune) bool {
	return '0' <= ch && ch <= '9' || 'a' <= ch && ch <= 'f' || 'A' <= ch && ch <= 'F'
}

// isWhitespace returns true if the rune is a space, tab, newline or carriage return
func isWhitespace(ch rune) bool {
	return ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r'
}

// digitVal returns the integer value of a given octal,decimal or hexadecimal rune
func digitVal(ch rune) int {
	switch {
	case '0' <= ch && ch <= '9':
		return int(ch - '0')
	case 'a' <= ch && ch <= 'f':
		return int(ch - 'a' + 10)
	case 'A' <= ch && ch <= 'F':
		return int(ch - 'A' + 10)
	}
	return 16 // larger than any legal digit val
}
  07070100000756000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/hcl/strconv   07070100000757000081A4000000000000000000000001645E367C0000123E000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/hcl/strconv/quote.go  package strconv

import (
	"errors"
	"unicode/utf8"
)

// ErrSyntax indicates that a value does not have the right syntax for the target type.
var ErrSyntax = errors.New("invalid syntax")

// Unquote interprets s as a single-quoted, double-quoted,
// or backquoted Go string literal, returning the string value
// that s quotes.  (If s is single-quoted, it would be a Go
// character literal; Unquote returns the corresponding
// one-character string.)
func Unquote(s string) (t string, err error) {
	n := len(s)
	if n < 2 {
		return "", ErrSyntax
	}
	quote := s[0]
	if quote != s[n-1] {
		return "", ErrSyntax
	}
	s = s[1 : n-1]

	if quote != '"' {
		return "", ErrSyntax
	}
	if !contains(s, '$') && !contains(s, '{') && contains(s, '\n') {
		return "", ErrSyntax
	}

	// Is it trivial?  Avoid allocation.
	if !contains(s, '\\') && !contains(s, quote) && !contains(s, '$') {
		switch quote {
		case '"':
			return s, nil
		case '\'':
			r, size := utf8.DecodeRuneInString(s)
			if size == len(s) && (r != utf8.RuneError || size != 1) {
				return s, nil
			}
		}
	}

	var runeTmp [utf8.UTFMax]byte
	buf := make([]byte, 0, 3*len(s)/2) // Try to avoid more allocations.
	for len(s) > 0 {
		// If we're starting a '${}' then let it through un-unquoted.
		// Specifically: we don't unquote any characters within the `${}`
		// section.
		if s[0] == '$' && len(s) > 1 && s[1] == '{' {
			buf = append(buf, '$', '{')
			s = s[2:]

			// Continue reading until we find the closing brace, copying as-is
			braces := 1
			for len(s) > 0 && braces > 0 {
				r, size := utf8.DecodeRuneInString(s)
				if r == utf8.RuneError {
					return "", ErrSyntax
				}

				s = s[size:]

				n := utf8.EncodeRune(runeTmp[:], r)
				buf = append(buf, runeTmp[:n]...)

				switch r {
				case '{':
					braces++
				case '}':
					braces--
				}
			}
			if braces != 0 {
				return "", ErrSyntax
			}
			if len(s) == 0 {
				// If there's no string left, we're done!
				break
			} else {
				// If there's more left, we need to pop back up to the top of the loop
				// in case there's another interpolation in this string.
				continue
			}
		}

		if s[0] == '\n' {
			return "", ErrSyntax
		}

		c, multibyte, ss, err := unquoteChar(s, quote)
		if err != nil {
			return "", err
		}
		s = ss
		if c < utf8.RuneSelf || !multibyte {
			buf = append(buf, byte(c))
		} else {
			n := utf8.EncodeRune(runeTmp[:], c)
			buf = append(buf, runeTmp[:n]...)
		}
		if quote == '\'' && len(s) != 0 {
			// single-quoted must be single character
			return "", ErrSyntax
		}
	}
	return string(buf), nil
}

// contains reports whether the string contains the byte c.
func contains(s string, c byte) bool {
	for i := 0; i < len(s); i++ {
		if s[i] == c {
			return true
		}
	}
	return false
}

func unhex(b byte) (v rune, ok bool) {
	c := rune(b)
	switch {
	case '0' <= c && c <= '9':
		return c - '0', true
	case 'a' <= c && c <= 'f':
		return c - 'a' + 10, true
	case 'A' <= c && c <= 'F':
		return c - 'A' + 10, true
	}
	return
}

func unquoteChar(s string, quote byte) (value rune, multibyte bool, tail string, err error) {
	// easy cases
	switch c := s[0]; {
	case c == quote && (quote == '\'' || quote == '"'):
		err = ErrSyntax
		return
	case c >= utf8.RuneSelf:
		r, size := utf8.DecodeRuneInString(s)
		return r, true, s[size:], nil
	case c != '\\':
		return rune(s[0]), false, s[1:], nil
	}

	// hard case: c is backslash
	if len(s) <= 1 {
		err = ErrSyntax
		return
	}
	c := s[1]
	s = s[2:]

	switch c {
	case 'a':
		value = '\a'
	case 'b':
		value = '\b'
	case 'f':
		value = '\f'
	case 'n':
		value = '\n'
	case 'r':
		value = '\r'
	case 't':
		value = '\t'
	case 'v':
		value = '\v'
	case 'x', 'u', 'U':
		n := 0
		switch c {
		case 'x':
			n = 2
		case 'u':
			n = 4
		case 'U':
			n = 8
		}
		var v rune
		if len(s) < n {
			err = ErrSyntax
			return
		}
		for j := 0; j < n; j++ {
			x, ok := unhex(s[j])
			if !ok {
				err = ErrSyntax
				return
			}
			v = v<<4 | x
		}
		s = s[n:]
		if c == 'x' {
			// single-byte string, possibly not UTF-8
			value = v
			break
		}
		if v > utf8.MaxRune {
			err = ErrSyntax
			return
		}
		value = v
		multibyte = true
	case '0', '1', '2', '3', '4', '5', '6', '7':
		v := rune(c) - '0'
		if len(s) < 2 {
			err = ErrSyntax
			return
		}
		for j := 0; j < 2; j++ { // one digit already; two more
			x := rune(s[j]) - '0'
			if x < 0 || x > 7 {
				err = ErrSyntax
				return
			}
			v = (v << 3) | x
		}
		s = s[2:]
		if v > 255 {
			err = ErrSyntax
			return
		}
		value = v
	case '\\':
		value = '\\'
	case '\'', '"':
		if c != quote {
			err = ErrSyntax
			return
		}
		value = rune(c)
	default:
		err = ErrSyntax
		return
	}
	tail = s
	return
}
  07070100000758000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/hcl/token 07070100000759000081A4000000000000000000000001645E367C000004CA000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/hcl/token/position.go package token

import "fmt"

// Pos describes an arbitrary source position
// including the file, line, and column location.
// A Position is valid if the line number is > 0.
type Pos struct {
	Filename string // filename, if any
	Offset   int    // offset, starting at 0
	Line     int    // line number, starting at 1
	Column   int    // column number, starting at 1 (character count)
}

// IsValid returns true if the position is valid.
func (p *Pos) IsValid() bool { return p.Line > 0 }

// String returns a string in one of several forms:
//
//	file:line:column    valid position with file name
//	line:column         valid position without file name
//	file                invalid position with file name
//	-                   invalid position without file name
func (p Pos) String() string {
	s := p.Filename
	if p.IsValid() {
		if s != "" {
			s += ":"
		}
		s += fmt.Sprintf("%d:%d", p.Line, p.Column)
	}
	if s == "" {
		s = "-"
	}
	return s
}

// Before reports whether the position p is before u.
func (p Pos) Before(u Pos) bool {
	return u.Offset > p.Offset || u.Line > p.Line
}

// After reports whether the position p is after u.
func (p Pos) After(u Pos) bool {
	return u.Offset < p.Offset || u.Line < p.Line
}
  0707010000075A000081A4000000000000000000000001645E367C000013B4000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/hcl/token/token.go    // Package token defines constants representing the lexical tokens for HCL
// (HashiCorp Configuration Language)
package token

import (
	"fmt"
	"strconv"
	"strings"

	hclstrconv "github.com/hashicorp/hcl/hcl/strconv"
)

// Token defines a single HCL token which can be obtained via the Scanner
type Token struct {
	Type Type
	Pos  Pos
	Text string
	JSON bool
}

// Type is the set of lexical tokens of the HCL (HashiCorp Configuration Language)
type Type int

const (
	// Special tokens
	ILLEGAL Type = iota
	EOF
	COMMENT

	identifier_beg
	IDENT // literals
	literal_beg
	NUMBER  // 12345
	FLOAT   // 123.45
	BOOL    // true,false
	STRING  // "abc"
	HEREDOC // <<FOO\nbar\nFOO
	literal_end
	identifier_end

	operator_beg
	LBRACK // [
	LBRACE // {
	COMMA  // ,
	PERIOD // .

	RBRACK // ]
	RBRACE // }

	ASSIGN // =
	ADD    // +
	SUB    // -
	operator_end
)

var tokens = [...]string{
	ILLEGAL: "ILLEGAL",

	EOF:     "EOF",
	COMMENT: "COMMENT",

	IDENT:  "IDENT",
	NUMBER: "NUMBER",
	FLOAT:  "FLOAT",
	BOOL:   "BOOL",
	STRING: "STRING",

	LBRACK:  "LBRACK",
	LBRACE:  "LBRACE",
	COMMA:   "COMMA",
	PERIOD:  "PERIOD",
	HEREDOC: "HEREDOC",

	RBRACK: "RBRACK",
	RBRACE: "RBRACE",

	ASSIGN: "ASSIGN",
	ADD:    "ADD",
	SUB:    "SUB",
}

// String returns the string corresponding to the token tok.
func (t Type) String() string {
	s := ""
	if 0 <= t && t < Type(len(tokens)) {
		s = tokens[t]
	}
	if s == "" {
		s = "token(" + strconv.Itoa(int(t)) + ")"
	}
	return s
}

// IsIdentifier returns true for tokens corresponding to identifiers and basic
// type literals; it returns false otherwise.
func (t Type) IsIdentifier() bool { return identifier_beg < t && t < identifier_end }

// IsLiteral returns true for tokens corresponding to basic type literals; it
// returns false otherwise.
func (t Type) IsLiteral() bool { return literal_beg < t && t < literal_end }

// IsOperator returns true for tokens corresponding to operators and
// delimiters; it returns false otherwise.
func (t Type) IsOperator() bool { return operator_beg < t && t < operator_end }

// String returns the token's literal text. Note that this is only
// applicable for certain token types, such as token.IDENT,
// token.STRING, etc..
func (t Token) String() string {
	return fmt.Sprintf("%s %s %s", t.Pos.String(), t.Type.String(), t.Text)
}

// Value returns the properly typed value for this token. The type of
// the returned interface{} is guaranteed based on the Type field.
//
// This can only be called for literal types. If it is called for any other
// type, this will panic.
func (t Token) Value() interface{} {
	switch t.Type {
	case BOOL:
		if t.Text == "true" {
			return true
		} else if t.Text == "false" {
			return false
		}

		panic("unknown bool value: " + t.Text)
	case FLOAT:
		v, err := strconv.ParseFloat(t.Text, 64)
		if err != nil {
			panic(err)
		}

		return float64(v)
	case NUMBER:
		v, err := strconv.ParseInt(t.Text, 0, 64)
		if err != nil {
			panic(err)
		}

		return int64(v)
	case IDENT:
		return t.Text
	case HEREDOC:
		return unindentHeredoc(t.Text)
	case STRING:
		// Determine the Unquote method to use. If it came from JSON,
		// then we need to use the built-in unquote since we have to
		// escape interpolations there.
		f := hclstrconv.Unquote
		if t.JSON {
			f = strconv.Unquote
		}

		// This case occurs if json null is used
		if t.Text == "" {
			return ""
		}

		v, err := f(t.Text)
		if err != nil {
			panic(fmt.Sprintf("unquote %s err: %s", t.Text, err))
		}

		return v
	default:
		panic(fmt.Sprintf("unimplemented Value for type: %s", t.Type))
	}
}

// unindentHeredoc returns the string content of a HEREDOC if it is started with <<
// and the content of a HEREDOC with the hanging indent removed if it is started with
// a <<-, and the terminating line is at least as indented as the least indented line.
func unindentHeredoc(heredoc string) string {
	// We need to find the end of the marker
	idx := strings.IndexByte(heredoc, '\n')
	if idx == -1 {
		panic("heredoc doesn't contain newline")
	}

	unindent := heredoc[2] == '-'

	// We can optimize if the heredoc isn't marked for indentation
	if !unindent {
		return string(heredoc[idx+1 : len(heredoc)-idx+1])
	}

	// We need to unindent each line based on the indentation level of the marker
	lines := strings.Split(string(heredoc[idx+1:len(heredoc)-idx+2]), "\n")
	whitespacePrefix := lines[len(lines)-1]

	isIndented := true
	for _, v := range lines {
		if strings.HasPrefix(v, whitespacePrefix) {
			continue
		}

		isIndented = false
		break
	}

	// If all lines are not at least as indented as the terminating mark, return the
	// heredoc as is, but trim the leading space from the marker on the final line.
	if !isIndented {
		return strings.TrimRight(string(heredoc[idx+1:len(heredoc)-idx+1]), " \t")
	}

	unindentedLines := make([]string, len(lines))
	for k, v := range lines {
		if k == len(lines)-1 {
			unindentedLines[k] = ""
			break
		}

		unindentedLines[k] = strings.TrimPrefix(v, whitespacePrefix)
	}

	return strings.Join(unindentedLines, "\n")
}
0707010000075B000041ED000000000000000000000005645E367C00000000000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/json  0707010000075C000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/json/parser   0707010000075D000081A4000000000000000000000001645E367C00000C2D000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/json/parser/flatten.go    package parser

import "github.com/hashicorp/hcl/hcl/ast"

// flattenObjects takes an AST node, walks it, and flattens
func flattenObjects(node ast.Node) {
	ast.Walk(node, func(n ast.Node) (ast.Node, bool) {
		// We only care about lists, because this is what we modify
		list, ok := n.(*ast.ObjectList)
		if !ok {
			return n, true
		}

		// Rebuild the item list
		items := make([]*ast.ObjectItem, 0, len(list.Items))
		frontier := make([]*ast.ObjectItem, len(list.Items))
		copy(frontier, list.Items)
		for len(frontier) > 0 {
			// Pop the current item
			n := len(frontier)
			item := frontier[n-1]
			frontier = frontier[:n-1]

			switch v := item.Val.(type) {
			case *ast.ObjectType:
				items, frontier = flattenObjectType(v, item, items, frontier)
			case *ast.ListType:
				items, frontier = flattenListType(v, item, items, frontier)
			default:
				items = append(items, item)
			}
		}

		// Reverse the list since the frontier model runs things backwards
		for i := len(items)/2 - 1; i >= 0; i-- {
			opp := len(items) - 1 - i
			items[i], items[opp] = items[opp], items[i]
		}

		// Done! Set the original items
		list.Items = items
		return n, true
	})
}

func flattenListType(
	ot *ast.ListType,
	item *ast.ObjectItem,
	items []*ast.ObjectItem,
	frontier []*ast.ObjectItem) ([]*ast.ObjectItem, []*ast.ObjectItem) {
	// If the list is empty, keep the original list
	if len(ot.List) == 0 {
		items = append(items, item)
		return items, frontier
	}

	// All the elements of this object must also be objects!
	for _, subitem := range ot.List {
		if _, ok := subitem.(*ast.ObjectType); !ok {
			items = append(items, item)
			return items, frontier
		}
	}

	// Great! We have a match go through all the items and flatten
	for _, elem := range ot.List {
		// Add it to the frontier so that we can recurse
		frontier = append(frontier, &ast.ObjectItem{
			Keys:        item.Keys,
			Assign:      item.Assign,
			Val:         elem,
			LeadComment: item.LeadComment,
			LineComment: item.LineComment,
		})
	}

	return items, frontier
}

func flattenObjectType(
	ot *ast.ObjectType,
	item *ast.ObjectItem,
	items []*ast.ObjectItem,
	frontier []*ast.ObjectItem) ([]*ast.ObjectItem, []*ast.ObjectItem) {
	// If the list has no items we do not have to flatten anything
	if ot.List.Items == nil {
		items = append(items, item)
		return items, frontier
	}

	// All the elements of this object must also be objects!
	for _, subitem := range ot.List.Items {
		if _, ok := subitem.Val.(*ast.ObjectType); !ok {
			items = append(items, item)
			return items, frontier
		}
	}

	// Great! We have a match go through all the items and flatten
	for _, subitem := range ot.List.Items {
		// Copy the new key
		keys := make([]*ast.ObjectKey, len(item.Keys)+len(subitem.Keys))
		copy(keys, item.Keys)
		copy(keys[len(item.Keys):], subitem.Keys)

		// Add it to the frontier so that we can recurse
		frontier = append(frontier, &ast.ObjectItem{
			Keys:        keys,
			Assign:      item.Assign,
			Val:         subitem.Val,
			LeadComment: item.LeadComment,
			LineComment: item.LineComment,
		})
	}

	return items, frontier
}
   0707010000075E000081A4000000000000000000000001645E367C00001AA3000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/json/parser/parser.go package parser

import (
	"errors"
	"fmt"

	"github.com/hashicorp/hcl/hcl/ast"
	hcltoken "github.com/hashicorp/hcl/hcl/token"
	"github.com/hashicorp/hcl/json/scanner"
	"github.com/hashicorp/hcl/json/token"
)

type Parser struct {
	sc *scanner.Scanner

	// Last read token
	tok       token.Token
	commaPrev token.Token

	enableTrace bool
	indent      int
	n           int // buffer size (max = 1)
}

func newParser(src []byte) *Parser {
	return &Parser{
		sc: scanner.New(src),
	}
}

// Parse returns the fully parsed source and returns the abstract syntax tree.
func Parse(src []byte) (*ast.File, error) {
	p := newParser(src)
	return p.Parse()
}

var errEofToken = errors.New("EOF token found")

// Parse returns the fully parsed source and returns the abstract syntax tree.
func (p *Parser) Parse() (*ast.File, error) {
	f := &ast.File{}
	var err, scerr error
	p.sc.Error = func(pos token.Pos, msg string) {
		scerr = fmt.Errorf("%s: %s", pos, msg)
	}

	// The root must be an object in JSON
	object, err := p.object()
	if scerr != nil {
		return nil, scerr
	}
	if err != nil {
		return nil, err
	}

	// We make our final node an object list so it is more HCL compatible
	f.Node = object.List

	// Flatten it, which finds patterns and turns them into more HCL-like
	// AST trees.
	flattenObjects(f.Node)

	return f, nil
}

func (p *Parser) objectList() (*ast.ObjectList, error) {
	defer un(trace(p, "ParseObjectList"))
	node := &ast.ObjectList{}

	for {
		n, err := p.objectItem()
		if err == errEofToken {
			break // we are finished
		}

		// we don't return a nil node, because might want to use already
		// collected items.
		if err != nil {
			return node, err
		}

		node.Add(n)

		// Check for a followup comma. If it isn't a comma, then we're done
		if tok := p.scan(); tok.Type != token.COMMA {
			break
		}
	}

	return node, nil
}

// objectItem parses a single object item
func (p *Parser) objectItem() (*ast.ObjectItem, error) {
	defer un(trace(p, "ParseObjectItem"))

	keys, err := p.objectKey()
	if err != nil {
		return nil, err
	}

	o := &ast.ObjectItem{
		Keys: keys,
	}

	switch p.tok.Type {
	case token.COLON:
		pos := p.tok.Pos
		o.Assign = hcltoken.Pos{
			Filename: pos.Filename,
			Offset:   pos.Offset,
			Line:     pos.Line,
			Column:   pos.Column,
		}

		o.Val, err = p.objectValue()
		if err != nil {
			return nil, err
		}
	}

	return o, nil
}

// objectKey parses an object key and returns a ObjectKey AST
func (p *Parser) objectKey() ([]*ast.ObjectKey, error) {
	keyCount := 0
	keys := make([]*ast.ObjectKey, 0)

	for {
		tok := p.scan()
		switch tok.Type {
		case token.EOF:
			return nil, errEofToken
		case token.STRING:
			keyCount++
			keys = append(keys, &ast.ObjectKey{
				Token: p.tok.HCLToken(),
			})
		case token.COLON:
			// If we have a zero keycount it means that we never got
			// an object key, i.e. `{ :`. This is a syntax error.
			if keyCount == 0 {
				return nil, fmt.Errorf("expected: STRING got: %s", p.tok.Type)
			}

			// Done
			return keys, nil
		case token.ILLEGAL:
			return nil, errors.New("illegal")
		default:
			return nil, fmt.Errorf("expected: STRING got: %s", p.tok.Type)
		}
	}
}

// object parses any type of object, such as number, bool, string, object or
// list.
func (p *Parser) objectValue() (ast.Node, error) {
	defer un(trace(p, "ParseObjectValue"))
	tok := p.scan()

	switch tok.Type {
	case token.NUMBER, token.FLOAT, token.BOOL, token.NULL, token.STRING:
		return p.literalType()
	case token.LBRACE:
		return p.objectType()
	case token.LBRACK:
		return p.listType()
	case token.EOF:
		return nil, errEofToken
	}

	return nil, fmt.Errorf("Expected object value, got unknown token: %+v", tok)
}

// object parses any type of object, such as number, bool, string, object or
// list.
func (p *Parser) object() (*ast.ObjectType, error) {
	defer un(trace(p, "ParseType"))
	tok := p.scan()

	switch tok.Type {
	case token.LBRACE:
		return p.objectType()
	case token.EOF:
		return nil, errEofToken
	}

	return nil, fmt.Errorf("Expected object, got unknown token: %+v", tok)
}

// objectType parses an object type and returns a ObjectType AST
func (p *Parser) objectType() (*ast.ObjectType, error) {
	defer un(trace(p, "ParseObjectType"))

	// we assume that the currently scanned token is a LBRACE
	o := &ast.ObjectType{}

	l, err := p.objectList()

	// if we hit RBRACE, we are good to go (means we parsed all Items), if it's
	// not a RBRACE, it's an syntax error and we just return it.
	if err != nil && p.tok.Type != token.RBRACE {
		return nil, err
	}

	o.List = l
	return o, nil
}

// listType parses a list type and returns a ListType AST
func (p *Parser) listType() (*ast.ListType, error) {
	defer un(trace(p, "ParseListType"))

	// we assume that the currently scanned token is a LBRACK
	l := &ast.ListType{}

	for {
		tok := p.scan()
		switch tok.Type {
		case token.NUMBER, token.FLOAT, token.STRING:
			node, err := p.literalType()
			if err != nil {
				return nil, err
			}

			l.Add(node)
		case token.COMMA:
			continue
		case token.LBRACE:
			node, err := p.objectType()
			if err != nil {
				return nil, err
			}

			l.Add(node)
		case token.BOOL:
			// TODO(arslan) should we support? not supported by HCL yet
		case token.LBRACK:
			// TODO(arslan) should we support nested lists? Even though it's
			// written in README of HCL, it's not a part of the grammar
			// (not defined in parse.y)
		case token.RBRACK:
			// finished
			return l, nil
		default:
			return nil, fmt.Errorf("unexpected token while parsing list: %s", tok.Type)
		}

	}
}

// literalType parses a literal type and returns a LiteralType AST
func (p *Parser) literalType() (*ast.LiteralType, error) {
	defer un(trace(p, "ParseLiteral"))

	return &ast.LiteralType{
		Token: p.tok.HCLToken(),
	}, nil
}

// scan returns the next token from the underlying scanner. If a token has
// been unscanned then read that instead.
func (p *Parser) scan() token.Token {
	// If we have a token on the buffer, then return it.
	if p.n != 0 {
		p.n = 0
		return p.tok
	}

	p.tok = p.sc.Scan()
	return p.tok
}

// unscan pushes the previously read token back onto the buffer.
func (p *Parser) unscan() {
	p.n = 1
}

// ----------------------------------------------------------------------------
// Parsing support

func (p *Parser) printTrace(a ...interface{}) {
	if !p.enableTrace {
		return
	}

	const dots = ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "
	const n = len(dots)
	fmt.Printf("%5d:%3d: ", p.tok.Pos.Line, p.tok.Pos.Column)

	i := 2 * p.indent
	for i > n {
		fmt.Print(dots)
		i -= n
	}
	// i <= n
	fmt.Print(dots[0:i])
	fmt.Println(a...)
}

func trace(p *Parser, msg string) *Parser {
	p.printTrace(msg, "(")
	p.indent++
	return p
}

// Usage pattern: defer un(trace(p, "..."))
func un(p *Parser) {
	p.indent--
	p.printTrace(")")
}
 0707010000075F000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/json/scanner  07070100000760000081A4000000000000000000000001645E367C00002972000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/json/scanner/scanner.go   package scanner

import (
	"bytes"
	"fmt"
	"os"
	"unicode"
	"unicode/utf8"

	"github.com/hashicorp/hcl/json/token"
)

// eof represents a marker rune for the end of the reader.
const eof = rune(0)

// Scanner defines a lexical scanner
type Scanner struct {
	buf *bytes.Buffer // Source buffer for advancing and scanning
	src []byte        // Source buffer for immutable access

	// Source Position
	srcPos  token.Pos // current position
	prevPos token.Pos // previous position, used for peek() method

	lastCharLen int // length of last character in bytes
	lastLineLen int // length of last line in characters (for correct column reporting)

	tokStart int // token text start position
	tokEnd   int // token text end  position

	// Error is called for each error encountered. If no Error
	// function is set, the error is reported to os.Stderr.
	Error func(pos token.Pos, msg string)

	// ErrorCount is incremented by one for each error encountered.
	ErrorCount int

	// tokPos is the start position of most recently scanned token; set by
	// Scan. The Filename field is always left untouched by the Scanner.  If
	// an error is reported (via Error) and Position is invalid, the scanner is
	// not inside a token.
	tokPos token.Pos
}

// New creates and initializes a new instance of Scanner using src as
// its source content.
func New(src []byte) *Scanner {
	// even though we accept a src, we read from a io.Reader compatible type
	// (*bytes.Buffer). So in the future we might easily change it to streaming
	// read.
	b := bytes.NewBuffer(src)
	s := &Scanner{
		buf: b,
		src: src,
	}

	// srcPosition always starts with 1
	s.srcPos.Line = 1
	return s
}

// next reads the next rune from the bufferred reader. Returns the rune(0) if
// an error occurs (or io.EOF is returned).
func (s *Scanner) next() rune {
	ch, size, err := s.buf.ReadRune()
	if err != nil {
		// advance for error reporting
		s.srcPos.Column++
		s.srcPos.Offset += size
		s.lastCharLen = size
		return eof
	}

	if ch == utf8.RuneError && size == 1 {
		s.srcPos.Column++
		s.srcPos.Offset += size
		s.lastCharLen = size
		s.err("illegal UTF-8 encoding")
		return ch
	}

	// remember last position
	s.prevPos = s.srcPos

	s.srcPos.Column++
	s.lastCharLen = size
	s.srcPos.Offset += size

	if ch == '\n' {
		s.srcPos.Line++
		s.lastLineLen = s.srcPos.Column
		s.srcPos.Column = 0
	}

	// debug
	// fmt.Printf("ch: %q, offset:column: %d:%d\n", ch, s.srcPos.Offset, s.srcPos.Column)
	return ch
}

// unread unreads the previous read Rune and updates the source position
func (s *Scanner) unread() {
	if err := s.buf.UnreadRune(); err != nil {
		panic(err) // this is user fault, we should catch it
	}
	s.srcPos = s.prevPos // put back last position
}

// peek returns the next rune without advancing the reader.
func (s *Scanner) peek() rune {
	peek, _, err := s.buf.ReadRune()
	if err != nil {
		return eof
	}

	s.buf.UnreadRune()
	return peek
}

// Scan scans the next token and returns the token.
func (s *Scanner) Scan() token.Token {
	ch := s.next()

	// skip white space
	for isWhitespace(ch) {
		ch = s.next()
	}

	var tok token.Type

	// token text markings
	s.tokStart = s.srcPos.Offset - s.lastCharLen

	// token position, initial next() is moving the offset by one(size of rune
	// actually), though we are interested with the starting point
	s.tokPos.Offset = s.srcPos.Offset - s.lastCharLen
	if s.srcPos.Column > 0 {
		// common case: last character was not a '\n'
		s.tokPos.Line = s.srcPos.Line
		s.tokPos.Column = s.srcPos.Column
	} else {
		// last character was a '\n'
		// (we cannot be at the beginning of the source
		// since we have called next() at least once)
		s.tokPos.Line = s.srcPos.Line - 1
		s.tokPos.Column = s.lastLineLen
	}

	switch {
	case isLetter(ch):
		lit := s.scanIdentifier()
		if lit == "true" || lit == "false" {
			tok = token.BOOL
		} else if lit == "null" {
			tok = token.NULL
		} else {
			s.err("illegal char")
		}
	case isDecimal(ch):
		tok = s.scanNumber(ch)
	default:
		switch ch {
		case eof:
			tok = token.EOF
		case '"':
			tok = token.STRING
			s.scanString()
		case '.':
			tok = token.PERIOD
			ch = s.peek()
			if isDecimal(ch) {
				tok = token.FLOAT
				ch = s.scanMantissa(ch)
				ch = s.scanExponent(ch)
			}
		case '[':
			tok = token.LBRACK
		case ']':
			tok = token.RBRACK
		case '{':
			tok = token.LBRACE
		case '}':
			tok = token.RBRACE
		case ',':
			tok = token.COMMA
		case ':':
			tok = token.COLON
		case '-':
			if isDecimal(s.peek()) {
				ch := s.next()
				tok = s.scanNumber(ch)
			} else {
				s.err("illegal char")
			}
		default:
			s.err("illegal char: " + string(ch))
		}
	}

	// finish token ending
	s.tokEnd = s.srcPos.Offset

	// create token literal
	var tokenText string
	if s.tokStart >= 0 {
		tokenText = string(s.src[s.tokStart:s.tokEnd])
	}
	s.tokStart = s.tokEnd // ensure idempotency of tokenText() call

	return token.Token{
		Type: tok,
		Pos:  s.tokPos,
		Text: tokenText,
	}
}

// scanNumber scans a HCL number definition starting with the given rune
func (s *Scanner) scanNumber(ch rune) token.Type {
	zero := ch == '0'
	pos := s.srcPos

	s.scanMantissa(ch)
	ch = s.next() // seek forward
	if ch == 'e' || ch == 'E' {
		ch = s.scanExponent(ch)
		return token.FLOAT
	}

	if ch == '.' {
		ch = s.scanFraction(ch)
		if ch == 'e' || ch == 'E' {
			ch = s.next()
			ch = s.scanExponent(ch)
		}
		return token.FLOAT
	}

	if ch != eof {
		s.unread()
	}

	// If we have a larger number and this is zero, error
	if zero && pos != s.srcPos {
		s.err("numbers cannot start with 0")
	}

	return token.NUMBER
}

// scanMantissa scans the mantissa beginning from the rune. It returns the next
// non decimal rune. It's used to determine wheter it's a fraction or exponent.
func (s *Scanner) scanMantissa(ch rune) rune {
	scanned := false
	for isDecimal(ch) {
		ch = s.next()
		scanned = true
	}

	if scanned && ch != eof {
		s.unread()
	}
	return ch
}

// scanFraction scans the fraction after the '.' rune
func (s *Scanner) scanFraction(ch rune) rune {
	if ch == '.' {
		ch = s.peek() // we peek just to see if we can move forward
		ch = s.scanMantissa(ch)
	}
	return ch
}

// scanExponent scans the remaining parts of an exponent after the 'e' or 'E'
// rune.
func (s *Scanner) scanExponent(ch rune) rune {
	if ch == 'e' || ch == 'E' {
		ch = s.next()
		if ch == '-' || ch == '+' {
			ch = s.next()
		}
		ch = s.scanMantissa(ch)
	}
	return ch
}

// scanString scans a quoted string
func (s *Scanner) scanString() {
	braces := 0
	for {
		// '"' opening already consumed
		// read character after quote
		ch := s.next()

		if ch == '\n' || ch < 0 || ch == eof {
			s.err("literal not terminated")
			return
		}

		if ch == '"' {
			break
		}

		// If we're going into a ${} then we can ignore quotes for awhile
		if braces == 0 && ch == '$' && s.peek() == '{' {
			braces++
			s.next()
		} else if braces > 0 && ch == '{' {
			braces++
		}
		if braces > 0 && ch == '}' {
			braces--
		}

		if ch == '\\' {
			s.scanEscape()
		}
	}

	return
}

// scanEscape scans an escape sequence
func (s *Scanner) scanEscape() rune {
	// http://en.cppreference.com/w/cpp/language/escape
	ch := s.next() // read character after '/'
	switch ch {
	case 'a', 'b', 'f', 'n', 'r', 't', 'v', '\\', '"':
		// nothing to do
	case '0', '1', '2', '3', '4', '5', '6', '7':
		// octal notation
		ch = s.scanDigits(ch, 8, 3)
	case 'x':
		// hexademical notation
		ch = s.scanDigits(s.next(), 16, 2)
	case 'u':
		// universal character name
		ch = s.scanDigits(s.next(), 16, 4)
	case 'U':
		// universal character name
		ch = s.scanDigits(s.next(), 16, 8)
	default:
		s.err("illegal char escape")
	}
	return ch
}

// scanDigits scans a rune with the given base for n times. For example an
// octal notation \184 would yield in scanDigits(ch, 8, 3)
func (s *Scanner) scanDigits(ch rune, base, n int) rune {
	for n > 0 && digitVal(ch) < base {
		ch = s.next()
		n--
	}
	if n > 0 {
		s.err("illegal char escape")
	}

	// we scanned all digits, put the last non digit char back
	s.unread()
	return ch
}

// scanIdentifier scans an identifier and returns the literal string
func (s *Scanner) scanIdentifier() string {
	offs := s.srcPos.Offset - s.lastCharLen
	ch := s.next()
	for isLetter(ch) || isDigit(ch) || ch == '-' {
		ch = s.next()
	}

	if ch != eof {
		s.unread() // we got identifier, put back latest char
	}

	return string(s.src[offs:s.srcPos.Offset])
}

// recentPosition returns the position of the character immediately after the
// character or token returned by the last call to Scan.
func (s *Scanner) recentPosition() (pos token.Pos) {
	pos.Offset = s.srcPos.Offset - s.lastCharLen
	switch {
	case s.srcPos.Column > 0:
		// common case: last character was not a '\n'
		pos.Line = s.srcPos.Line
		pos.Column = s.srcPos.Column
	case s.lastLineLen > 0:
		// last character was a '\n'
		// (we cannot be at the beginning of the source
		// since we have called next() at least once)
		pos.Line = s.srcPos.Line - 1
		pos.Column = s.lastLineLen
	default:
		// at the beginning of the source
		pos.Line = 1
		pos.Column = 1
	}
	return
}

// err prints the error of any scanning to s.Error function. If the function is
// not defined, by default it prints them to os.Stderr
func (s *Scanner) err(msg string) {
	s.ErrorCount++
	pos := s.recentPosition()

	if s.Error != nil {
		s.Error(pos, msg)
		return
	}

	fmt.Fprintf(os.Stderr, "%s: %s\n", pos, msg)
}

// isHexadecimal returns true if the given rune is a letter
func isLetter(ch rune) bool {
	return 'a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z' || ch == '_' || ch >= 0x80 && unicode.IsLetter(ch)
}

// isHexadecimal returns true if the given rune is a decimal digit
func isDigit(ch rune) bool {
	return '0' <= ch && ch <= '9' || ch >= 0x80 && unicode.IsDigit(ch)
}

// isHexadecimal returns true if the given rune is a decimal number
func isDecimal(ch rune) bool {
	return '0' <= ch && ch <= '9'
}

// isHexadecimal returns true if the given rune is an hexadecimal number
func isHexadecimal(ch rune) bool {
	return '0' <= ch && ch <= '9' || 'a' <= ch && ch <= 'f' || 'A' <= ch && ch <= 'F'
}

// isWhitespace returns true if the rune is a space, tab, newline or carriage return
func isWhitespace(ch rune) bool {
	return ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r'
}

// digitVal returns the integer value of a given octal,decimal or hexadecimal rune
func digitVal(ch rune) int {
	switch {
	case '0' <= ch && ch <= '9':
		return int(ch - '0')
	case 'a' <= ch && ch <= 'f':
		return int(ch - 'a' + 10)
	case 'A' <= ch && ch <= 'F':
		return int(ch - 'A' + 10)
	}
	return 16 // larger than any legal digit val
}
  07070100000761000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/json/token    07070100000762000081A4000000000000000000000001645E367C000004CA000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/json/token/position.go    package token

import "fmt"

// Pos describes an arbitrary source position
// including the file, line, and column location.
// A Position is valid if the line number is > 0.
type Pos struct {
	Filename string // filename, if any
	Offset   int    // offset, starting at 0
	Line     int    // line number, starting at 1
	Column   int    // column number, starting at 1 (character count)
}

// IsValid returns true if the position is valid.
func (p *Pos) IsValid() bool { return p.Line > 0 }

// String returns a string in one of several forms:
//
//	file:line:column    valid position with file name
//	line:column         valid position without file name
//	file                invalid position with file name
//	-                   invalid position without file name
func (p Pos) String() string {
	s := p.Filename
	if p.IsValid() {
		if s != "" {
			s += ":"
		}
		s += fmt.Sprintf("%d:%d", p.Line, p.Column)
	}
	if s == "" {
		s = "-"
	}
	return s
}

// Before reports whether the position p is before u.
func (p Pos) Before(u Pos) bool {
	return u.Offset > p.Offset || u.Line > p.Line
}

// After reports whether the position p is after u.
func (p Pos) After(u Pos) bool {
	return u.Offset < p.Offset || u.Line < p.Line
}
  07070100000763000081A4000000000000000000000001645E367C00000A59000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/json/token/token.go   package token

import (
	"fmt"
	"strconv"

	hcltoken "github.com/hashicorp/hcl/hcl/token"
)

// Token defines a single HCL token which can be obtained via the Scanner
type Token struct {
	Type Type
	Pos  Pos
	Text string
}

// Type is the set of lexical tokens of the HCL (HashiCorp Configuration Language)
type Type int

const (
	// Special tokens
	ILLEGAL Type = iota
	EOF

	identifier_beg
	literal_beg
	NUMBER // 12345
	FLOAT  // 123.45
	BOOL   // true,false
	STRING // "abc"
	NULL   // null
	literal_end
	identifier_end

	operator_beg
	LBRACK // [
	LBRACE // {
	COMMA  // ,
	PERIOD // .
	COLON  // :

	RBRACK // ]
	RBRACE // }

	operator_end
)

var tokens = [...]string{
	ILLEGAL: "ILLEGAL",

	EOF: "EOF",

	NUMBER: "NUMBER",
	FLOAT:  "FLOAT",
	BOOL:   "BOOL",
	STRING: "STRING",
	NULL:   "NULL",

	LBRACK: "LBRACK",
	LBRACE: "LBRACE",
	COMMA:  "COMMA",
	PERIOD: "PERIOD",
	COLON:  "COLON",

	RBRACK: "RBRACK",
	RBRACE: "RBRACE",
}

// String returns the string corresponding to the token tok.
func (t Type) String() string {
	s := ""
	if 0 <= t && t < Type(len(tokens)) {
		s = tokens[t]
	}
	if s == "" {
		s = "token(" + strconv.Itoa(int(t)) + ")"
	}
	return s
}

// IsIdentifier returns true for tokens corresponding to identifiers and basic
// type literals; it returns false otherwise.
func (t Type) IsIdentifier() bool { return identifier_beg < t && t < identifier_end }

// IsLiteral returns true for tokens corresponding to basic type literals; it
// returns false otherwise.
func (t Type) IsLiteral() bool { return literal_beg < t && t < literal_end }

// IsOperator returns true for tokens corresponding to operators and
// delimiters; it returns false otherwise.
func (t Type) IsOperator() bool { return operator_beg < t && t < operator_end }

// String returns the token's literal text. Note that this is only
// applicable for certain token types, such as token.IDENT,
// token.STRING, etc..
func (t Token) String() string {
	return fmt.Sprintf("%s %s %s", t.Pos.String(), t.Type.String(), t.Text)
}

// HCLToken converts this token to an HCL token.
//
// The token type must be a literal type or this will panic.
func (t Token) HCLToken() hcltoken.Token {
	switch t.Type {
	case BOOL:
		return hcltoken.Token{Type: hcltoken.BOOL, Text: t.Text}
	case FLOAT:
		return hcltoken.Token{Type: hcltoken.FLOAT, Text: t.Text}
	case NULL:
		return hcltoken.Token{Type: hcltoken.STRING, Text: ""}
	case NUMBER:
		return hcltoken.Token{Type: hcltoken.NUMBER, Text: t.Text}
	case STRING:
		return hcltoken.Token{Type: hcltoken.STRING, Text: t.Text, JSON: true}
	default:
		panic(fmt.Sprintf("unimplemented HCLToken for type: %s", t.Type))
	}
}
   07070100000764000081A4000000000000000000000001645E367C000001EE000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/lex.go    package hcl

import (
	"unicode"
	"unicode/utf8"
)

type lexModeValue byte

const (
	lexModeUnknown lexModeValue = iota
	lexModeHcl
	lexModeJson
)

// lexMode returns whether we're going to be parsing in JSON
// mode or HCL mode.
func lexMode(v []byte) lexModeValue {
	var (
		r      rune
		w      int
		offset int
	)

	for {
		r, w = utf8.DecodeRune(v[offset:])
		offset += w
		if unicode.IsSpace(r) {
			continue
		}
		if r == '{' {
			return lexModeJson
		}
		break
	}

	return lexModeHcl
}
  07070100000765000081A4000000000000000000000001645E367C0000037C000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/hashicorp/hcl/parse.go  package hcl

import (
	"fmt"

	"github.com/hashicorp/hcl/hcl/ast"
	hclParser "github.com/hashicorp/hcl/hcl/parser"
	jsonParser "github.com/hashicorp/hcl/json/parser"
)

// ParseBytes accepts as input byte slice and returns ast tree.
//
// Input can be either JSON or HCL
func ParseBytes(in []byte) (*ast.File, error) {
	return parse(in)
}

// ParseString accepts input as a string and returns ast tree.
func ParseString(input string) (*ast.File, error) {
	return parse([]byte(input))
}

func parse(in []byte) (*ast.File, error) {
	switch lexMode(in) {
	case lexModeHcl:
		return hclParser.Parse(in)
	case lexModeJson:
		return jsonParser.Parse(in)
	}

	return nil, fmt.Errorf("unknown config format")
}

// Parse parses the given input and returns the root object.
//
// The input format can be either HCL or JSON.
func Parse(input string) (*ast.File, error) {
	return parse([]byte(input))
}
07070100000766000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/vendor/github.com/huandu  07070100000767000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/github.com/huandu/xstrings 07070100000768000081A4000000000000000000000001645E367C0000010A000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/huandu/xstrings/.gitignore  # Compiled Object files, Static and Dynamic libs (Shared Objects)
*.o
*.a
*.so

# Folders
_obj
_test

# Architecture specific extensions/prefixes
*.[568vq]
[568vq].out

*.cgo1.go
*.cgo2.c
_cgo_defun.c
_cgo_gotypes.go
_cgo_export.*

_testmain.go

*.exe
*.test
*.prof
  07070100000769000081A4000000000000000000000001645E367C0000057B000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/huandu/xstrings/CONTRIBUTING.md # Contributing #

Thanks for your contribution in advance. No matter what you will contribute to this project, pull request or bug report or feature discussion, it's always highly appreciated.

## New API or feature ##

I want to speak more about how to add new functions to this package.

Package `xstring` is a collection of useful string functions which should be implemented in Go. It's a bit subject to say which function should be included and which should not. I set up following rules in order to make it clear and as objective as possible.

* Rule 1: Only string algorithm, which takes string as input, can be included.
* Rule 2: If a function has been implemented in package `string`, it must not be included.
* Rule 3: If a function is not language neutral, it must not be included.
* Rule 4: If a function is a part of standard library in other languages, it can be included.
* Rule 5: If a function is quite useful in some famous framework or library, it can be included.

New function must be discussed in project issues before submitting any code. If a pull request with new functions is sent without any ref issue, it will be rejected.

## Pull request ##

Pull request is always welcome. Just make sure you have run `go fmt` and all test cases passed before submit.

If the pull request is to add a new API or feature, don't forget to update README.md and add new API in function list.
 0707010000076A000081A4000000000000000000000001645E367C00000433000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/huandu/xstrings/LICENSE The MIT License (MIT)

Copyright (c) 2015 Huan Du

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

 0707010000076B000081A4000000000000000000000001645E367C00003B66000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/huandu/xstrings/README.md   # xstrings

[![Build Status](https://github.com/huandu/xstrings/workflows/Go/badge.svg)](https://github.com/huandu/xstrings/actions)
[![Go Doc](https://godoc.org/github.com/huandu/xstrings?status.svg)](https://pkg.go.dev/github.com/huandu/xstrings)
[![Go Report](https://goreportcard.com/badge/github.com/huandu/xstrings)](https://goreportcard.com/report/github.com/huandu/xstrings)
[![Coverage Status](https://coveralls.io/repos/github/huandu/xstrings/badge.svg?branch=master)](https://coveralls.io/github/huandu/xstrings?branch=master)

Go package [xstrings](https://godoc.org/github.com/huandu/xstrings) is a collection of string functions, which are widely used in other languages but absent in Go package [strings](http://golang.org/pkg/strings).

All functions are well tested and carefully tuned for performance.

## Propose a new function

Please review [contributing guideline](CONTRIBUTING.md) and [create new issue](https://github.com/huandu/xstrings/issues) to state why it should be included.

## Install

Use `go get` to install this library.

    go get github.com/huandu/xstrings

## API document

See [GoDoc](https://godoc.org/github.com/huandu/xstrings) for full document.

## Function list

Go functions have a unique naming style. One, who has experience in other language but new in Go, may have difficulties to find out right string function to use.

Here is a list of functions in [strings](http://golang.org/pkg/strings) and [xstrings](https://godoc.org/github.com/huandu/xstrings) with enough extra information about how to map these functions to their friends in other languages. Hope this list could be helpful for fresh gophers.

### Package `xstrings` functions

_Keep this table sorted by Function in ascending order._

| Function                                                                          | Friends                                                                         | #                                                   |
| --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | --------------------------------------------------- |
| [Center](https://godoc.org/github.com/huandu/xstrings#Center)                     | `str.center` in Python; `String#center` in Ruby                                 | [#30](https://github.com/huandu/xstrings/issues/30) |
| [Count](https://godoc.org/github.com/huandu/xstrings#Count)                       | `String#count` in Ruby                                                          | [#16](https://github.com/huandu/xstrings/issues/16) |
| [Delete](https://godoc.org/github.com/huandu/xstrings#Delete)                     | `String#delete` in Ruby                                                         | [#17](https://github.com/huandu/xstrings/issues/17) |
| [ExpandTabs](https://godoc.org/github.com/huandu/xstrings#ExpandTabs)             | `str.expandtabs` in Python                                                      | [#27](https://github.com/huandu/xstrings/issues/27) |
| [FirstRuneToLower](https://godoc.org/github.com/huandu/xstrings#FirstRuneToLower) | `lcfirst` in PHP or Perl                                                        | [#15](https://github.com/huandu/xstrings/issues/15) |
| [FirstRuneToUpper](https://godoc.org/github.com/huandu/xstrings#FirstRuneToUpper) | `String#capitalize` in Ruby; `ucfirst` in PHP or Perl                           | [#15](https://github.com/huandu/xstrings/issues/15) |
| [Insert](https://godoc.org/github.com/huandu/xstrings#Insert)                     | `String#insert` in Ruby                                                         | [#18](https://github.com/huandu/xstrings/issues/18) |
| [LastPartition](https://godoc.org/github.com/huandu/xstrings#LastPartition)       | `str.rpartition` in Python; `String#rpartition` in Ruby                         | [#19](https://github.com/huandu/xstrings/issues/19) |
| [LeftJustify](https://godoc.org/github.com/huandu/xstrings#LeftJustify)           | `str.ljust` in Python; `String#ljust` in Ruby                                   | [#28](https://github.com/huandu/xstrings/issues/28) |
| [Len](https://godoc.org/github.com/huandu/xstrings#Len)                           | `mb_strlen` in PHP                                                              | [#23](https://github.com/huandu/xstrings/issues/23) |
| [Partition](https://godoc.org/github.com/huandu/xstrings#Partition)               | `str.partition` in Python; `String#partition` in Ruby                           | [#10](https://github.com/huandu/xstrings/issues/10) |
| [Reverse](https://godoc.org/github.com/huandu/xstrings#Reverse)                   | `String#reverse` in Ruby; `strrev` in PHP; `reverse` in Perl                    | [#7](https://github.com/huandu/xstrings/issues/7)   |
| [RightJustify](https://godoc.org/github.com/huandu/xstrings#RightJustify)         | `str.rjust` in Python; `String#rjust` in Ruby                                   | [#29](https://github.com/huandu/xstrings/issues/29) |
| [RuneWidth](https://godoc.org/github.com/huandu/xstrings#RuneWidth)               | -                                                                               | [#27](https://github.com/huandu/xstrings/issues/27) |
| [Scrub](https://godoc.org/github.com/huandu/xstrings#Scrub)                       | `String#scrub` in Ruby                                                          | [#20](https://github.com/huandu/xstrings/issues/20) |
| [Shuffle](https://godoc.org/github.com/huandu/xstrings#Shuffle)                   | `str_shuffle` in PHP                                                            | [#13](https://github.com/huandu/xstrings/issues/13) |
| [ShuffleSource](https://godoc.org/github.com/huandu/xstrings#ShuffleSource)       | `str_shuffle` in PHP                                                            | [#13](https://github.com/huandu/xstrings/issues/13) |
| [Slice](https://godoc.org/github.com/huandu/xstrings#Slice)                       | `mb_substr` in PHP                                                              | [#9](https://github.com/huandu/xstrings/issues/9)   |
| [Squeeze](https://godoc.org/github.com/huandu/xstrings#Squeeze)                   | `String#squeeze` in Ruby                                                        | [#11](https://github.com/huandu/xstrings/issues/11) |
| [Successor](https://godoc.org/github.com/huandu/xstrings#Successor)               | `String#succ` or `String#next` in Ruby                                          | [#22](https://github.com/huandu/xstrings/issues/22) |
| [SwapCase](https://godoc.org/github.com/huandu/xstrings#SwapCase)                 | `str.swapcase` in Python; `String#swapcase` in Ruby                             | [#12](https://github.com/huandu/xstrings/issues/12) |
| [ToCamelCase](https://godoc.org/github.com/huandu/xstrings#ToCamelCase)           | `String#camelize` in RoR                                                        | [#1](https://github.com/huandu/xstrings/issues/1)   |
| [ToKebab](https://godoc.org/github.com/huandu/xstrings#ToKebabCase)               | -                                                                               | [#41](https://github.com/huandu/xstrings/issues/41) |
| [ToSnakeCase](https://godoc.org/github.com/huandu/xstrings#ToSnakeCase)           | `String#underscore` in RoR                                                      | [#1](https://github.com/huandu/xstrings/issues/1)   |
| [Translate](https://godoc.org/github.com/huandu/xstrings#Translate)               | `str.translate` in Python; `String#tr` in Ruby; `strtr` in PHP; `tr///` in Perl | [#21](https://github.com/huandu/xstrings/issues/21) |
| [Width](https://godoc.org/github.com/huandu/xstrings#Width)                       | `mb_strwidth` in PHP                                                            | [#26](https://github.com/huandu/xstrings/issues/26) |
| [WordCount](https://godoc.org/github.com/huandu/xstrings#WordCount)               | `str_word_count` in PHP                                                         | [#14](https://github.com/huandu/xstrings/issues/14) |
| [WordSplit](https://godoc.org/github.com/huandu/xstrings#WordSplit)               | -                                                                               | [#14](https://github.com/huandu/xstrings/issues/14) |

### Package `strings` functions

_Keep this table sorted by Function in ascending order._

| Function                                                        | Friends                                                                             |
| --------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
| [Contains](http://golang.org/pkg/strings/#Contains)             | `String#include?` in Ruby                                                           |
| [ContainsAny](http://golang.org/pkg/strings/#ContainsAny)       | -                                                                                   |
| [ContainsRune](http://golang.org/pkg/strings/#ContainsRune)     | -                                                                                   |
| [Count](http://golang.org/pkg/strings/#Count)                   | `str.count` in Python; `substr_count` in PHP                                        |
| [EqualFold](http://golang.org/pkg/strings/#EqualFold)           | `stricmp` in PHP; `String#casecmp` in Ruby                                          |
| [Fields](http://golang.org/pkg/strings/#Fields)                 | `str.split` in Python; `split` in Perl; `String#split` in Ruby                      |
| [FieldsFunc](http://golang.org/pkg/strings/#FieldsFunc)         | -                                                                                   |
| [HasPrefix](http://golang.org/pkg/strings/#HasPrefix)           | `str.startswith` in Python; `String#start_with?` in Ruby                            |
| [HasSuffix](http://golang.org/pkg/strings/#HasSuffix)           | `str.endswith` in Python; `String#end_with?` in Ruby                                |
| [Index](http://golang.org/pkg/strings/#Index)                   | `str.index` in Python; `String#index` in Ruby; `strpos` in PHP; `index` in Perl     |
| [IndexAny](http://golang.org/pkg/strings/#IndexAny)             | -                                                                                   |
| [IndexByte](http://golang.org/pkg/strings/#IndexByte)           | -                                                                                   |
| [IndexFunc](http://golang.org/pkg/strings/#IndexFunc)           | -                                                                                   |
| [IndexRune](http://golang.org/pkg/strings/#IndexRune)           | -                                                                                   |
| [Join](http://golang.org/pkg/strings/#Join)                     | `str.join` in Python; `Array#join` in Ruby; `implode` in PHP; `join` in Perl        |
| [LastIndex](http://golang.org/pkg/strings/#LastIndex)           | `str.rindex` in Python; `String#rindex`; `strrpos` in PHP; `rindex` in Perl         |
| [LastIndexAny](http://golang.org/pkg/strings/#LastIndexAny)     | -                                                                                   |
| [LastIndexFunc](http://golang.org/pkg/strings/#LastIndexFunc)   | -                                                                                   |
| [Map](http://golang.org/pkg/strings/#Map)                       | `String#each_codepoint` in Ruby                                                     |
| [Repeat](http://golang.org/pkg/strings/#Repeat)                 | operator `*` in Python and Ruby; `str_repeat` in PHP                                |
| [Replace](http://golang.org/pkg/strings/#Replace)               | `str.replace` in Python; `String#sub` in Ruby; `str_replace` in PHP                 |
| [Split](http://golang.org/pkg/strings/#Split)                   | `str.split` in Python; `String#split` in Ruby; `explode` in PHP; `split` in Perl    |
| [SplitAfter](http://golang.org/pkg/strings/#SplitAfter)         | -                                                                                   |
| [SplitAfterN](http://golang.org/pkg/strings/#SplitAfterN)       | -                                                                                   |
| [SplitN](http://golang.org/pkg/strings/#SplitN)                 | `str.split` in Python; `String#split` in Ruby; `explode` in PHP; `split` in Perl    |
| [Title](http://golang.org/pkg/strings/#Title)                   | `str.title` in Python                                                               |
| [ToLower](http://golang.org/pkg/strings/#ToLower)               | `str.lower` in Python; `String#downcase` in Ruby; `strtolower` in PHP; `lc` in Perl |
| [ToLowerSpecial](http://golang.org/pkg/strings/#ToLowerSpecial) | -                                                                                   |
| [ToTitle](http://golang.org/pkg/strings/#ToTitle)               | -                                                                                   |
| [ToTitleSpecial](http://golang.org/pkg/strings/#ToTitleSpecial) | -                                                                                   |
| [ToUpper](http://golang.org/pkg/strings/#ToUpper)               | `str.upper` in Python; `String#upcase` in Ruby; `strtoupper` in PHP; `uc` in Perl   |
| [ToUpperSpecial](http://golang.org/pkg/strings/#ToUpperSpecial) | -                                                                                   |
| [Trim](http://golang.org/pkg/strings/#Trim)                     | `str.strip` in Python; `String#strip` in Ruby; `trim` in PHP                        |
| [TrimFunc](http://golang.org/pkg/strings/#TrimFunc)             | -                                                                                   |
| [TrimLeft](http://golang.org/pkg/strings/#TrimLeft)             | `str.lstrip` in Python; `String#lstrip` in Ruby; `ltrim` in PHP                     |
| [TrimLeftFunc](http://golang.org/pkg/strings/#TrimLeftFunc)     | -                                                                                   |
| [TrimPrefix](http://golang.org/pkg/strings/#TrimPrefix)         | -                                                                                   |
| [TrimRight](http://golang.org/pkg/strings/#TrimRight)           | `str.rstrip` in Python; `String#rstrip` in Ruby; `rtrim` in PHP                     |
| [TrimRightFunc](http://golang.org/pkg/strings/#TrimRightFunc)   | -                                                                                   |
| [TrimSpace](http://golang.org/pkg/strings/#TrimSpace)           | `str.strip` in Python; `String#strip` in Ruby; `trim` in PHP                        |
| [TrimSuffix](http://golang.org/pkg/strings/#TrimSuffix)         | `String#chomp` in Ruby; `chomp` in Perl                                             |

## License

This library is licensed under MIT license. See LICENSE for details.
  0707010000076C000081A4000000000000000000000001645E367C00000208000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/huandu/xstrings/common.go   // Copyright 2015 Huan Du. All rights reserved.
// Licensed under the MIT license that can be found in the LICENSE file.

package xstrings

const bufferMaxInitGrowSize = 2048

// Lazy initialize a buffer.
func allocBuffer(orig, cur string) *stringBuilder {
	output := &stringBuilder{}
	maxSize := len(orig) * 4

	// Avoid to reserve too much memory at once.
	if maxSize > bufferMaxInitGrowSize {
		maxSize = bufferMaxInitGrowSize
	}

	output.Grow(maxSize)
	output.WriteString(orig[:len(orig)-len(cur)])
	return output
}
0707010000076D000081A4000000000000000000000001645E367C00002D77000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/huandu/xstrings/convert.go  // Copyright 2015 Huan Du. All rights reserved.
// Licensed under the MIT license that can be found in the LICENSE file.

package xstrings

import (
	"math/rand"
	"unicode"
	"unicode/utf8"
)

// ToCamelCase is to convert words separated by space, underscore and hyphen to camel case.
//
// Some samples.
//
//	"some_words"      => "SomeWords"
//	"http_server"     => "HttpServer"
//	"no_https"        => "NoHttps"
//	"_complex__case_" => "_Complex_Case_"
//	"some words"      => "SomeWords"
func ToCamelCase(str string) string {
	if len(str) == 0 {
		return ""
	}

	buf := &stringBuilder{}
	var r0, r1 rune
	var size int

	// leading connector will appear in output.
	for len(str) > 0 {
		r0, size = utf8.DecodeRuneInString(str)
		str = str[size:]

		if !isConnector(r0) {
			r0 = unicode.ToUpper(r0)
			break
		}

		buf.WriteRune(r0)
	}

	if len(str) == 0 {
		// A special case for a string contains only 1 rune.
		if size != 0 {
			buf.WriteRune(r0)
		}

		return buf.String()
	}

	for len(str) > 0 {
		r1 = r0
		r0, size = utf8.DecodeRuneInString(str)
		str = str[size:]

		if isConnector(r0) && isConnector(r1) {
			buf.WriteRune(r1)
			continue
		}

		if isConnector(r1) {
			r0 = unicode.ToUpper(r0)
		} else {
			buf.WriteRune(r1)
		}
	}

	buf.WriteRune(r0)
	return buf.String()
}

// ToSnakeCase can convert all upper case characters in a string to
// snake case format.
//
// Some samples.
//
//	"FirstName"    => "first_name"
//	"HTTPServer"   => "http_server"
//	"NoHTTPS"      => "no_https"
//	"GO_PATH"      => "go_path"
//	"GO PATH"      => "go_path"  // space is converted to underscore.
//	"GO-PATH"      => "go_path"  // hyphen is converted to underscore.
//	"http2xx"      => "http_2xx" // insert an underscore before a number and after an alphabet.
//	"HTTP20xOK"    => "http_20x_ok"
//	"Duration2m3s" => "duration_2m3s"
//	"Bld4Floor3rd" => "bld4_floor_3rd"
func ToSnakeCase(str string) string {
	return camelCaseToLowerCase(str, '_')
}

// ToKebabCase can convert all upper case characters in a string to
// kebab case format.
//
// Some samples.
//
//	"FirstName"    => "first-name"
//	"HTTPServer"   => "http-server"
//	"NoHTTPS"      => "no-https"
//	"GO_PATH"      => "go-path"
//	"GO PATH"      => "go-path"  // space is converted to '-'.
//	"GO-PATH"      => "go-path"  // hyphen is converted to '-'.
//	"http2xx"      => "http-2xx" // insert an underscore before a number and after an alphabet.
//	"HTTP20xOK"    => "http-20x-ok"
//	"Duration2m3s" => "duration-2m3s"
//	"Bld4Floor3rd" => "bld4-floor-3rd"
func ToKebabCase(str string) string {
	return camelCaseToLowerCase(str, '-')
}

func camelCaseToLowerCase(str string, connector rune) string {
	if len(str) == 0 {
		return ""
	}

	buf := &stringBuilder{}
	wt, word, remaining := nextWord(str)

	for len(remaining) > 0 {
		if wt != connectorWord {
			toLower(buf, wt, word, connector)
		}

		prev := wt
		last := word
		wt, word, remaining = nextWord(remaining)

		switch prev {
		case numberWord:
			for wt == alphabetWord || wt == numberWord {
				toLower(buf, wt, word, connector)
				wt, word, remaining = nextWord(remaining)
			}

			if wt != invalidWord && wt != punctWord && wt != connectorWord {
				buf.WriteRune(connector)
			}

		case connectorWord:
			toLower(buf, prev, last, connector)

		case punctWord:
			// nothing.

		default:
			if wt != numberWord {
				if wt != connectorWord && wt != punctWord {
					buf.WriteRune(connector)
				}

				break
			}

			if len(remaining) == 0 {
				break
			}

			last := word
			wt, word, remaining = nextWord(remaining)

			// consider number as a part of previous word.
			// e.g. "Bld4Floor" => "bld4_floor"
			if wt != alphabetWord {
				toLower(buf, numberWord, last, connector)

				if wt != connectorWord && wt != punctWord {
					buf.WriteRune(connector)
				}

				break
			}

			// if there are some lower case letters following a number,
			// add connector before the number.
			// e.g. "HTTP2xx" => "http_2xx"
			buf.WriteRune(connector)
			toLower(buf, numberWord, last, connector)

			for wt == alphabetWord || wt == numberWord {
				toLower(buf, wt, word, connector)
				wt, word, remaining = nextWord(remaining)
			}

			if wt != invalidWord && wt != connectorWord && wt != punctWord {
				buf.WriteRune(connector)
			}
		}
	}

	toLower(buf, wt, word, connector)
	return buf.String()
}

func isConnector(r rune) bool {
	return r == '-' || r == '_' || unicode.IsSpace(r)
}

type wordType int

const (
	invalidWord wordType = iota
	numberWord
	upperCaseWord
	alphabetWord
	connectorWord
	punctWord
	otherWord
)

func nextWord(str string) (wt wordType, word, remaining string) {
	if len(str) == 0 {
		return
	}

	var offset int
	remaining = str
	r, size := nextValidRune(remaining, utf8.RuneError)
	offset += size

	if r == utf8.RuneError {
		wt = invalidWord
		word = str[:offset]
		remaining = str[offset:]
		return
	}

	switch {
	case isConnector(r):
		wt = connectorWord
		remaining = remaining[size:]

		for len(remaining) > 0 {
			r, size = nextValidRune(remaining, r)

			if !isConnector(r) {
				break
			}

			offset += size
			remaining = remaining[size:]
		}

	case unicode.IsPunct(r):
		wt = punctWord
		remaining = remaining[size:]

		for len(remaining) > 0 {
			r, size = nextValidRune(remaining, r)

			if !unicode.IsPunct(r) {
				break
			}

			offset += size
			remaining = remaining[size:]
		}

	case unicode.IsUpper(r):
		wt = upperCaseWord
		remaining = remaining[size:]

		if len(remaining) == 0 {
			break
		}

		r, size = nextValidRune(remaining, r)

		switch {
		case unicode.IsUpper(r):
			prevSize := size
			offset += size
			remaining = remaining[size:]

			for len(remaining) > 0 {
				r, size = nextValidRune(remaining, r)

				if !unicode.IsUpper(r) {
					break
				}

				prevSize = size
				offset += size
				remaining = remaining[size:]
			}

			// it's a bit complex when dealing with a case like "HTTPStatus".
			// it's expected to be splitted into "HTTP" and "Status".
			// Therefore "S" should be in remaining instead of word.
			if len(remaining) > 0 && isAlphabet(r) {
				offset -= prevSize
				remaining = str[offset:]
			}

		case isAlphabet(r):
			offset += size
			remaining = remaining[size:]

			for len(remaining) > 0 {
				r, size = nextValidRune(remaining, r)

				if !isAlphabet(r) || unicode.IsUpper(r) {
					break
				}

				offset += size
				remaining = remaining[size:]
			}
		}

	case isAlphabet(r):
		wt = alphabetWord
		remaining = remaining[size:]

		for len(remaining) > 0 {
			r, size = nextValidRune(remaining, r)

			if !isAlphabet(r) || unicode.IsUpper(r) {
				break
			}

			offset += size
			remaining = remaining[size:]
		}

	case unicode.IsNumber(r):
		wt = numberWord
		remaining = remaining[size:]

		for len(remaining) > 0 {
			r, size = nextValidRune(remaining, r)

			if !unicode.IsNumber(r) {
				break
			}

			offset += size
			remaining = remaining[size:]
		}

	default:
		wt = otherWord
		remaining = remaining[size:]

		for len(remaining) > 0 {
			r, size = nextValidRune(remaining, r)

			if size == 0 || isConnector(r) || isAlphabet(r) || unicode.IsNumber(r) || unicode.IsPunct(r) {
				break
			}

			offset += size
			remaining = remaining[size:]
		}
	}

	word = str[:offset]
	return
}

func nextValidRune(str string, prev rune) (r rune, size int) {
	var sz int

	for len(str) > 0 {
		r, sz = utf8.DecodeRuneInString(str)
		size += sz

		if r != utf8.RuneError {
			return
		}

		str = str[sz:]
	}

	r = prev
	return
}

func toLower(buf *stringBuilder, wt wordType, str string, connector rune) {
	buf.Grow(buf.Len() + len(str))

	if wt != upperCaseWord && wt != connectorWord {
		buf.WriteString(str)
		return
	}

	for len(str) > 0 {
		r, size := utf8.DecodeRuneInString(str)
		str = str[size:]

		if isConnector(r) {
			buf.WriteRune(connector)
		} else if unicode.IsUpper(r) {
			buf.WriteRune(unicode.ToLower(r))
		} else {
			buf.WriteRune(r)
		}
	}
}

// SwapCase will swap characters case from upper to lower or lower to upper.
func SwapCase(str string) string {
	var r rune
	var size int

	buf := &stringBuilder{}

	for len(str) > 0 {
		r, size = utf8.DecodeRuneInString(str)

		switch {
		case unicode.IsUpper(r):
			buf.WriteRune(unicode.ToLower(r))

		case unicode.IsLower(r):
			buf.WriteRune(unicode.ToUpper(r))

		default:
			buf.WriteRune(r)
		}

		str = str[size:]
	}

	return buf.String()
}

// FirstRuneToUpper converts first rune to upper case if necessary.
func FirstRuneToUpper(str string) string {
	if str == "" {
		return str
	}

	r, size := utf8.DecodeRuneInString(str)

	if !unicode.IsLower(r) {
		return str
	}

	buf := &stringBuilder{}
	buf.WriteRune(unicode.ToUpper(r))
	buf.WriteString(str[size:])
	return buf.String()
}

// FirstRuneToLower converts first rune to lower case if necessary.
func FirstRuneToLower(str string) string {
	if str == "" {
		return str
	}

	r, size := utf8.DecodeRuneInString(str)

	if !unicode.IsUpper(r) {
		return str
	}

	buf := &stringBuilder{}
	buf.WriteRune(unicode.ToLower(r))
	buf.WriteString(str[size:])
	return buf.String()
}

// Shuffle randomizes runes in a string and returns the result.
// It uses default random source in `math/rand`.
func Shuffle(str string) string {
	if str == "" {
		return str
	}

	runes := []rune(str)
	index := 0

	for i := len(runes) - 1; i > 0; i-- {
		index = rand.Intn(i + 1)

		if i != index {
			runes[i], runes[index] = runes[index], runes[i]
		}
	}

	return string(runes)
}

// ShuffleSource randomizes runes in a string with given random source.
func ShuffleSource(str string, src rand.Source) string {
	if str == "" {
		return str
	}

	runes := []rune(str)
	index := 0
	r := rand.New(src)

	for i := len(runes) - 1; i > 0; i-- {
		index = r.Intn(i + 1)

		if i != index {
			runes[i], runes[index] = runes[index], runes[i]
		}
	}

	return string(runes)
}

// Successor returns the successor to string.
//
// If there is one alphanumeric rune is found in string, increase the rune by 1.
// If increment generates a "carry", the rune to the left of it is incremented.
// This process repeats until there is no carry, adding an additional rune if necessary.
//
// If there is no alphanumeric rune, the rightmost rune will be increased by 1
// regardless whether the result is a valid rune or not.
//
// Only following characters are alphanumeric.
//   - a - z
//   - A - Z
//   - 0 - 9
//
// Samples (borrowed from ruby's String#succ document):
//
//	"abcd"      => "abce"
//	"THX1138"   => "THX1139"
//	"<<koala>>" => "<<koalb>>"
//	"1999zzz"   => "2000aaa"
//	"ZZZ9999"   => "AAAA0000"
//	"***"       => "**+"
func Successor(str string) string {
	if str == "" {
		return str
	}

	var r rune
	var i int
	carry := ' '
	runes := []rune(str)
	l := len(runes)
	lastAlphanumeric := l

	for i = l - 1; i >= 0; i-- {
		r = runes[i]

		if ('a' <= r && r <= 'y') ||
			('A' <= r && r <= 'Y') ||
			('0' <= r && r <= '8') {
			runes[i]++
			carry = ' '
			lastAlphanumeric = i
			break
		}

		switch r {
		case 'z':
			runes[i] = 'a'
			carry = 'a'
			lastAlphanumeric = i

		case 'Z':
			runes[i] = 'A'
			carry = 'A'
			lastAlphanumeric = i

		case '9':
			runes[i] = '0'
			carry = '0'
			lastAlphanumeric = i
		}
	}

	// Needs to add one character for carry.
	if i < 0 && carry != ' ' {
		buf := &stringBuilder{}
		buf.Grow(l + 4) // Reserve enough space for write.

		if lastAlphanumeric != 0 {
			buf.WriteString(str[:lastAlphanumeric])
		}

		buf.WriteRune(carry)

		for _, r = range runes[lastAlphanumeric:] {
			buf.WriteRune(r)
		}

		return buf.String()
	}

	// No alphanumeric character. Simply increase last rune's value.
	if lastAlphanumeric == l {
		runes[l-1]++
	}

	return string(runes)
}
 0707010000076E000081A4000000000000000000000001645E367C000008FE000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/huandu/xstrings/count.go    // Copyright 2015 Huan Du. All rights reserved.
// Licensed under the MIT license that can be found in the LICENSE file.

package xstrings

import (
	"unicode"
	"unicode/utf8"
)

// Len returns str's utf8 rune length.
func Len(str string) int {
	return utf8.RuneCountInString(str)
}

// WordCount returns number of words in a string.
//
// Word is defined as a locale dependent string containing alphabetic characters,
// which may also contain but not start with `'` and `-` characters.
func WordCount(str string) int {
	var r rune
	var size, n int

	inWord := false

	for len(str) > 0 {
		r, size = utf8.DecodeRuneInString(str)

		switch {
		case isAlphabet(r):
			if !inWord {
				inWord = true
				n++
			}

		case inWord && (r == '\'' || r == '-'):
			// Still in word.

		default:
			inWord = false
		}

		str = str[size:]
	}

	return n
}

const minCJKCharacter = '\u3400'

// Checks r is a letter but not CJK character.
func isAlphabet(r rune) bool {
	if !unicode.IsLetter(r) {
		return false
	}

	switch {
	// Quick check for non-CJK character.
	case r < minCJKCharacter:
		return true

	// Common CJK characters.
	case r >= '\u4E00' && r <= '\u9FCC':
		return false

	// Rare CJK characters.
	case r >= '\u3400' && r <= '\u4D85':
		return false

	// Rare and historic CJK characters.
	case r >= '\U00020000' && r <= '\U0002B81D':
		return false
	}

	return true
}

// Width returns string width in monotype font.
// Multi-byte characters are usually twice the width of single byte characters.
//
// Algorithm comes from `mb_strwidth` in PHP.
// http://php.net/manual/en/function.mb-strwidth.php
func Width(str string) int {
	var r rune
	var size, n int

	for len(str) > 0 {
		r, size = utf8.DecodeRuneInString(str)
		n += RuneWidth(r)
		str = str[size:]
	}

	return n
}

// RuneWidth returns character width in monotype font.
// Multi-byte characters are usually twice the width of single byte characters.
//
// Algorithm comes from `mb_strwidth` in PHP.
// http://php.net/manual/en/function.mb-strwidth.php
func RuneWidth(r rune) int {
	switch {
	case r == utf8.RuneError || r < '\x20':
		return 0

	case '\x20' <= r && r < '\u2000':
		return 1

	case '\u2000' <= r && r < '\uFF61':
		return 2

	case '\uFF61' <= r && r < '\uFFA0':
		return 1

	case '\uFFA0' <= r:
		return 2
	}

	return 0
}
  0707010000076F000081A4000000000000000000000001645E367C00000180000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/huandu/xstrings/doc.go  // Copyright 2015 Huan Du. All rights reserved.
// Licensed under the MIT license that can be found in the LICENSE file.

// Package xstrings is to provide string algorithms which are useful but not included in `strings` package.
// See project home page for details. https://github.com/huandu/xstrings
//
// Package xstrings assumes all strings are encoded in utf8.
package xstrings
07070100000770000081A4000000000000000000000001645E367C0000100E000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/huandu/xstrings/format.go   // Copyright 2015 Huan Du. All rights reserved.
// Licensed under the MIT license that can be found in the LICENSE file.

package xstrings

import (
	"unicode/utf8"
)

// ExpandTabs can expand tabs ('\t') rune in str to one or more spaces dpending on
// current column and tabSize.
// The column number is reset to zero after each newline ('\n') occurring in the str.
//
// ExpandTabs uses RuneWidth to decide rune's width.
// For example, CJK characters will be treated as two characters.
//
// If tabSize <= 0, ExpandTabs panics with error.
//
// Samples:
//
//	ExpandTabs("a\tbc\tdef\tghij\tk", 4) => "a   bc  def ghij    k"
//	ExpandTabs("abcdefg\thij\nk\tl", 4)  => "abcdefg hij\nk   l"
//	ExpandTabs("z中\t文\tw", 4)           => "z中 文  w"
func ExpandTabs(str string, tabSize int) string {
	if tabSize <= 0 {
		panic("tab size must be positive")
	}

	var r rune
	var i, size, column, expand int
	var output *stringBuilder

	orig := str

	for len(str) > 0 {
		r, size = utf8.DecodeRuneInString(str)

		if r == '\t' {
			expand = tabSize - column%tabSize

			if output == nil {
				output = allocBuffer(orig, str)
			}

			for i = 0; i < expand; i++ {
				output.WriteRune(' ')
			}

			column += expand
		} else {
			if r == '\n' {
				column = 0
			} else {
				column += RuneWidth(r)
			}

			if output != nil {
				output.WriteRune(r)
			}
		}

		str = str[size:]
	}

	if output == nil {
		return orig
	}

	return output.String()
}

// LeftJustify returns a string with pad string at right side if str's rune length is smaller than length.
// If str's rune length is larger than length, str itself will be returned.
//
// If pad is an empty string, str will be returned.
//
// Samples:
//
//	LeftJustify("hello", 4, " ")    => "hello"
//	LeftJustify("hello", 10, " ")   => "hello     "
//	LeftJustify("hello", 10, "123") => "hello12312"
func LeftJustify(str string, length int, pad string) string {
	l := Len(str)

	if l >= length || pad == "" {
		return str
	}

	remains := length - l
	padLen := Len(pad)

	output := &stringBuilder{}
	output.Grow(len(str) + (remains/padLen+1)*len(pad))
	output.WriteString(str)
	writePadString(output, pad, padLen, remains)
	return output.String()
}

// RightJustify returns a string with pad string at left side if str's rune length is smaller than length.
// If str's rune length is larger than length, str itself will be returned.
//
// If pad is an empty string, str will be returned.
//
// Samples:
//
//	RightJustify("hello", 4, " ")    => "hello"
//	RightJustify("hello", 10, " ")   => "     hello"
//	RightJustify("hello", 10, "123") => "12312hello"
func RightJustify(str string, length int, pad string) string {
	l := Len(str)

	if l >= length || pad == "" {
		return str
	}

	remains := length - l
	padLen := Len(pad)

	output := &stringBuilder{}
	output.Grow(len(str) + (remains/padLen+1)*len(pad))
	writePadString(output, pad, padLen, remains)
	output.WriteString(str)
	return output.String()
}

// Center returns a string with pad string at both side if str's rune length is smaller than length.
// If str's rune length is larger than length, str itself will be returned.
//
// If pad is an empty string, str will be returned.
//
// Samples:
//
//	Center("hello", 4, " ")    => "hello"
//	Center("hello", 10, " ")   => "  hello   "
//	Center("hello", 10, "123") => "12hello123"
func Center(str string, length int, pad string) string {
	l := Len(str)

	if l >= length || pad == "" {
		return str
	}

	remains := length - l
	padLen := Len(pad)

	output := &stringBuilder{}
	output.Grow(len(str) + (remains/padLen+1)*len(pad))
	writePadString(output, pad, padLen, remains/2)
	output.WriteString(str)
	writePadString(output, pad, padLen, (remains+1)/2)
	return output.String()
}

func writePadString(output *stringBuilder, pad string, padLen, remains int) {
	var r rune
	var size int

	repeats := remains / padLen

	for i := 0; i < repeats; i++ {
		output.WriteString(pad)
	}

	remains = remains % padLen

	if remains != 0 {
		for i := 0; i < remains; i++ {
			r, size = utf8.DecodeRuneInString(pad)
			output.WriteRune(r)
			pad = pad[size:]
		}
	}
}
  07070100000771000081A4000000000000000000000001645E367C00001117000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/huandu/xstrings/manipulate.go   // Copyright 2015 Huan Du. All rights reserved.
// Licensed under the MIT license that can be found in the LICENSE file.

package xstrings

import (
	"strings"
	"unicode/utf8"
)

// Reverse a utf8 encoded string.
func Reverse(str string) string {
	var size int

	tail := len(str)
	buf := make([]byte, tail)
	s := buf

	for len(str) > 0 {
		_, size = utf8.DecodeRuneInString(str)
		tail -= size
		s = append(s[:tail], []byte(str[:size])...)
		str = str[size:]
	}

	return string(buf)
}

// Slice a string by rune.
//
// Start must satisfy 0 <= start <= rune length.
//
// End can be positive, zero or negative.
// If end >= 0, start and end must satisfy start <= end <= rune length.
// If end < 0, it means slice to the end of string.
//
// Otherwise, Slice will panic as out of range.
func Slice(str string, start, end int) string {
	var size, startPos, endPos int

	origin := str

	if start < 0 || end > len(str) || (end >= 0 && start > end) {
		panic("out of range")
	}

	if end >= 0 {
		end -= start
	}

	for start > 0 && len(str) > 0 {
		_, size = utf8.DecodeRuneInString(str)
		start--
		startPos += size
		str = str[size:]
	}

	if end < 0 {
		return origin[startPos:]
	}

	endPos = startPos

	for end > 0 && len(str) > 0 {
		_, size = utf8.DecodeRuneInString(str)
		end--
		endPos += size
		str = str[size:]
	}

	if len(str) == 0 && (start > 0 || end > 0) {
		panic("out of range")
	}

	return origin[startPos:endPos]
}

// Partition splits a string by sep into three parts.
// The return value is a slice of strings with head, match and tail.
//
// If str contains sep, for example "hello" and "l", Partition returns
//
//	"he", "l", "lo"
//
// If str doesn't contain sep, for example "hello" and "x", Partition returns
//
//	"hello", "", ""
func Partition(str, sep string) (head, match, tail string) {
	index := strings.Index(str, sep)

	if index == -1 {
		head = str
		return
	}

	head = str[:index]
	match = str[index : index+len(sep)]
	tail = str[index+len(sep):]
	return
}

// LastPartition splits a string by last instance of sep into three parts.
// The return value is a slice of strings with head, match and tail.
//
// If str contains sep, for example "hello" and "l", LastPartition returns
//
//	"hel", "l", "o"
//
// If str doesn't contain sep, for example "hello" and "x", LastPartition returns
//
//	"", "", "hello"
func LastPartition(str, sep string) (head, match, tail string) {
	index := strings.LastIndex(str, sep)

	if index == -1 {
		tail = str
		return
	}

	head = str[:index]
	match = str[index : index+len(sep)]
	tail = str[index+len(sep):]
	return
}

// Insert src into dst at given rune index.
// Index is counted by runes instead of bytes.
//
// If index is out of range of dst, panic with out of range.
func Insert(dst, src string, index int) string {
	return Slice(dst, 0, index) + src + Slice(dst, index, -1)
}

// Scrub scrubs invalid utf8 bytes with repl string.
// Adjacent invalid bytes are replaced only once.
func Scrub(str, repl string) string {
	var buf *stringBuilder
	var r rune
	var size, pos int
	var hasError bool

	origin := str

	for len(str) > 0 {
		r, size = utf8.DecodeRuneInString(str)

		if r == utf8.RuneError {
			if !hasError {
				if buf == nil {
					buf = &stringBuilder{}
				}

				buf.WriteString(origin[:pos])
				hasError = true
			}
		} else if hasError {
			hasError = false
			buf.WriteString(repl)

			origin = origin[pos:]
			pos = 0
		}

		pos += size
		str = str[size:]
	}

	if buf != nil {
		buf.WriteString(origin)
		return buf.String()
	}

	// No invalid byte.
	return origin
}

// WordSplit splits a string into words. Returns a slice of words.
// If there is no word in a string, return nil.
//
// Word is defined as a locale dependent string containing alphabetic characters,
// which may also contain but not start with `'` and `-` characters.
func WordSplit(str string) []string {
	var word string
	var words []string
	var r rune
	var size, pos int

	inWord := false

	for len(str) > 0 {
		r, size = utf8.DecodeRuneInString(str)

		switch {
		case isAlphabet(r):
			if !inWord {
				inWord = true
				word = str
				pos = 0
			}

		case inWord && (r == '\'' || r == '-'):
			// Still in word.

		default:
			if inWord {
				inWord = false
				words = append(words, word[:pos])
			}
		}

		pos += size
		str = str[size:]
	}

	if inWord {
		words = append(words, word[:pos])
	}

	return words
}
 07070100000772000081A4000000000000000000000001645E367C0000006D000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/huandu/xstrings/stringbuilder.go    //go:build go1.10
// +build go1.10

package xstrings

import "strings"

type stringBuilder = strings.Builder
   07070100000773000081A4000000000000000000000001645E367C00000074000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/huandu/xstrings/stringbuilder_go110.go  //go:build !go1.10
// +build !go1.10

package xstrings

import "bytes"

type stringBuilder struct {
	bytes.Buffer
}
07070100000774000081A4000000000000000000000001645E367C00002EEE000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/huandu/xstrings/translate.go    // Copyright 2015 Huan Du. All rights reserved.
// Licensed under the MIT license that can be found in the LICENSE file.

package xstrings

import (
	"unicode"
	"unicode/utf8"
)

type runeRangeMap struct {
	FromLo rune // Lower bound of range map.
	FromHi rune // An inclusive higher bound of range map.
	ToLo   rune
	ToHi   rune
}

type runeDict struct {
	Dict [unicode.MaxASCII + 1]rune
}

type runeMap map[rune]rune

// Translator can translate string with pre-compiled from and to patterns.
// If a from/to pattern pair needs to be used more than once, it's recommended
// to create a Translator and reuse it.
type Translator struct {
	quickDict  *runeDict       // A quick dictionary to look up rune by index. Only available for latin runes.
	runeMap    runeMap         // Rune map for translation.
	ranges     []*runeRangeMap // Ranges of runes.
	mappedRune rune            // If mappedRune >= 0, all matched runes are translated to the mappedRune.
	reverted   bool            // If to pattern is empty, all matched characters will be deleted.
	hasPattern bool
}

// NewTranslator creates new Translator through a from/to pattern pair.
func NewTranslator(from, to string) *Translator {
	tr := &Translator{}

	if from == "" {
		return tr
	}

	reverted := from[0] == '^'
	deletion := len(to) == 0

	if reverted {
		from = from[1:]
	}

	var fromStart, fromEnd, fromRangeStep rune
	var toStart, toEnd, toRangeStep rune
	var fromRangeSize, toRangeSize rune
	var singleRunes []rune

	// Update the to rune range.
	updateRange := func() {
		// No more rune to read in the to rune pattern.
		if toEnd == utf8.RuneError {
			return
		}

		if toRangeStep == 0 {
			to, toStart, toEnd, toRangeStep = nextRuneRange(to, toEnd)
			return
		}

		// Current range is not empty. Consume 1 rune from start.
		if toStart != toEnd {
			toStart += toRangeStep
			return
		}

		// No more rune. Repeat the last rune.
		if to == "" {
			toEnd = utf8.RuneError
			return
		}

		// Both start and end are used. Read two more runes from the to pattern.
		to, toStart, toEnd, toRangeStep = nextRuneRange(to, utf8.RuneError)
	}

	if deletion {
		toStart = utf8.RuneError
		toEnd = utf8.RuneError
	} else {
		// If from pattern is reverted, only the last rune in the to pattern will be used.
		if reverted {
			var size int

			for len(to) > 0 {
				toStart, size = utf8.DecodeRuneInString(to)
				to = to[size:]
			}

			toEnd = utf8.RuneError
		} else {
			to, toStart, toEnd, toRangeStep = nextRuneRange(to, utf8.RuneError)
		}
	}

	fromEnd = utf8.RuneError

	for len(from) > 0 {
		from, fromStart, fromEnd, fromRangeStep = nextRuneRange(from, fromEnd)

		// fromStart is a single character. Just map it with a rune in the to pattern.
		if fromRangeStep == 0 {
			singleRunes = tr.addRune(fromStart, toStart, singleRunes)
			updateRange()
			continue
		}

		for toEnd != utf8.RuneError && fromStart != fromEnd {
			// If mapped rune is a single character instead of a range, simply shift first
			// rune in the range.
			if toRangeStep == 0 {
				singleRunes = tr.addRune(fromStart, toStart, singleRunes)
				updateRange()
				fromStart += fromRangeStep
				continue
			}

			fromRangeSize = (fromEnd - fromStart) * fromRangeStep
			toRangeSize = (toEnd - toStart) * toRangeStep

			// Not enough runes in the to pattern. Need to read more.
			if fromRangeSize > toRangeSize {
				fromStart, toStart = tr.addRuneRange(fromStart, fromStart+toRangeSize*fromRangeStep, toStart, toEnd, singleRunes)
				fromStart += fromRangeStep
				updateRange()

				// Edge case: If fromRangeSize == toRangeSize + 1, the last fromStart value needs be considered
				// as a single rune.
				if fromStart == fromEnd {
					singleRunes = tr.addRune(fromStart, toStart, singleRunes)
					updateRange()
				}

				continue
			}

			fromStart, toStart = tr.addRuneRange(fromStart, fromEnd, toStart, toStart+fromRangeSize*toRangeStep, singleRunes)
			updateRange()
			break
		}

		if fromStart == fromEnd {
			fromEnd = utf8.RuneError
			continue
		}

		_, toStart = tr.addRuneRange(fromStart, fromEnd, toStart, toStart, singleRunes)
		fromEnd = utf8.RuneError
	}

	if fromEnd != utf8.RuneError {
		tr.addRune(fromEnd, toStart, singleRunes)
	}

	tr.reverted = reverted
	tr.mappedRune = -1
	tr.hasPattern = true

	// Translate RuneError only if in deletion or reverted mode.
	if deletion || reverted {
		tr.mappedRune = toStart
	}

	return tr
}

func (tr *Translator) addRune(from, to rune, singleRunes []rune) []rune {
	if from <= unicode.MaxASCII {
		if tr.quickDict == nil {
			tr.quickDict = &runeDict{}
		}

		tr.quickDict.Dict[from] = to
	} else {
		if tr.runeMap == nil {
			tr.runeMap = make(runeMap)
		}

		tr.runeMap[from] = to
	}

	singleRunes = append(singleRunes, from)
	return singleRunes
}

func (tr *Translator) addRuneRange(fromLo, fromHi, toLo, toHi rune, singleRunes []rune) (rune, rune) {
	var r rune
	var rrm *runeRangeMap

	if fromLo < fromHi {
		rrm = &runeRangeMap{
			FromLo: fromLo,
			FromHi: fromHi,
			ToLo:   toLo,
			ToHi:   toHi,
		}
	} else {
		rrm = &runeRangeMap{
			FromLo: fromHi,
			FromHi: fromLo,
			ToLo:   toHi,
			ToHi:   toLo,
		}
	}

	// If there is any single rune conflicts with this rune range, clear single rune record.
	for _, r = range singleRunes {
		if rrm.FromLo <= r && r <= rrm.FromHi {
			if r <= unicode.MaxASCII {
				tr.quickDict.Dict[r] = 0
			} else {
				delete(tr.runeMap, r)
			}
		}
	}

	tr.ranges = append(tr.ranges, rrm)
	return fromHi, toHi
}

func nextRuneRange(str string, last rune) (remaining string, start, end rune, rangeStep rune) {
	var r rune
	var size int

	remaining = str
	escaping := false
	isRange := false

	for len(remaining) > 0 {
		r, size = utf8.DecodeRuneInString(remaining)
		remaining = remaining[size:]

		// Parse special characters.
		if !escaping {
			if r == '\\' {
				escaping = true
				continue
			}

			if r == '-' {
				// Ignore slash at beginning of string.
				if last == utf8.RuneError {
					continue
				}

				start = last
				isRange = true
				continue
			}
		}

		escaping = false

		if last != utf8.RuneError {
			// This is a range which start and end are the same.
			// Considier it as a normal character.
			if isRange && last == r {
				isRange = false
				continue
			}

			start = last
			end = r

			if isRange {
				if start < end {
					rangeStep = 1
				} else {
					rangeStep = -1
				}
			}

			return
		}

		last = r
	}

	start = last
	end = utf8.RuneError
	return
}

// Translate str with a from/to pattern pair.
//
// See comment in Translate function for usage and samples.
func (tr *Translator) Translate(str string) string {
	if !tr.hasPattern || str == "" {
		return str
	}

	var r rune
	var size int
	var needTr bool

	orig := str

	var output *stringBuilder

	for len(str) > 0 {
		r, size = utf8.DecodeRuneInString(str)
		r, needTr = tr.TranslateRune(r)

		if needTr && output == nil {
			output = allocBuffer(orig, str)
		}

		if r != utf8.RuneError && output != nil {
			output.WriteRune(r)
		}

		str = str[size:]
	}

	// No character is translated.
	if output == nil {
		return orig
	}

	return output.String()
}

// TranslateRune return translated rune and true if r matches the from pattern.
// If r doesn't match the pattern, original r is returned and translated is false.
func (tr *Translator) TranslateRune(r rune) (result rune, translated bool) {
	switch {
	case tr.quickDict != nil:
		if r <= unicode.MaxASCII {
			result = tr.quickDict.Dict[r]

			if result != 0 {
				translated = true

				if tr.mappedRune >= 0 {
					result = tr.mappedRune
				}

				break
			}
		}

		fallthrough

	case tr.runeMap != nil:
		var ok bool

		if result, ok = tr.runeMap[r]; ok {
			translated = true

			if tr.mappedRune >= 0 {
				result = tr.mappedRune
			}

			break
		}

		fallthrough

	default:
		var rrm *runeRangeMap
		ranges := tr.ranges

		for i := len(ranges) - 1; i >= 0; i-- {
			rrm = ranges[i]

			if rrm.FromLo <= r && r <= rrm.FromHi {
				translated = true

				if tr.mappedRune >= 0 {
					result = tr.mappedRune
					break
				}

				if rrm.ToLo < rrm.ToHi {
					result = rrm.ToLo + r - rrm.FromLo
				} else if rrm.ToLo > rrm.ToHi {
					// ToHi can be smaller than ToLo if range is from higher to lower.
					result = rrm.ToLo - r + rrm.FromLo
				} else {
					result = rrm.ToLo
				}

				break
			}
		}
	}

	if tr.reverted {
		if !translated {
			result = tr.mappedRune
		}

		translated = !translated
	}

	if !translated {
		result = r
	}

	return
}

// HasPattern returns true if Translator has one pattern at least.
func (tr *Translator) HasPattern() bool {
	return tr.hasPattern
}

// Translate str with the characters defined in from replaced by characters defined in to.
//
// From and to are patterns representing a set of characters. Pattern is defined as following.
//
// Special characters:
//
//  1. '-' means a range of runes, e.g.
//     "a-z" means all characters from 'a' to 'z' inclusive;
//     "z-a" means all characters from 'z' to 'a' inclusive.
//  2. '^' as first character means a set of all runes excepted listed, e.g.
//     "^a-z" means all characters except 'a' to 'z' inclusive.
//  3. '\' escapes special characters.
//
// Normal character represents itself, e.g. "abc" is a set including 'a', 'b' and 'c'.
//
// Translate will try to find a 1:1 mapping from from to to.
// If to is smaller than from, last rune in to will be used to map "out of range" characters in from.
//
// Note that '^' only works in the from pattern. It will be considered as a normal character in the to pattern.
//
// If the to pattern is an empty string, Translate works exactly the same as Delete.
//
// Samples:
//
//	Translate("hello", "aeiou", "12345")    => "h2ll4"
//	Translate("hello", "a-z", "A-Z")        => "HELLO"
//	Translate("hello", "z-a", "a-z")        => "svool"
//	Translate("hello", "aeiou", "*")        => "h*ll*"
//	Translate("hello", "^l", "*")           => "**ll*"
//	Translate("hello ^ world", `\^lo`, "*") => "he*** * w*r*d"
func Translate(str, from, to string) string {
	tr := NewTranslator(from, to)
	return tr.Translate(str)
}

// Delete runes in str matching the pattern.
// Pattern is defined in Translate function.
//
// Samples:
//
//	Delete("hello", "aeiou") => "hll"
//	Delete("hello", "a-k")   => "llo"
//	Delete("hello", "^a-k")  => "he"
func Delete(str, pattern string) string {
	tr := NewTranslator(pattern, "")
	return tr.Translate(str)
}

// Count how many runes in str match the pattern.
// Pattern is defined in Translate function.
//
// Samples:
//
//	Count("hello", "aeiou") => 3
//	Count("hello", "a-k")   => 3
//	Count("hello", "^a-k")  => 2
func Count(str, pattern string) int {
	if pattern == "" || str == "" {
		return 0
	}

	var r rune
	var size int
	var matched bool

	tr := NewTranslator(pattern, "")
	cnt := 0

	for len(str) > 0 {
		r, size = utf8.DecodeRuneInString(str)
		str = str[size:]

		if _, matched = tr.TranslateRune(r); matched {
			cnt++
		}
	}

	return cnt
}

// Squeeze deletes adjacent repeated runes in str.
// If pattern is not empty, only runes matching the pattern will be squeezed.
//
// Samples:
//
//	Squeeze("hello", "")             => "helo"
//	Squeeze("hello", "m-z")          => "hello"
//	Squeeze("hello   world", " ")    => "hello world"
func Squeeze(str, pattern string) string {
	var last, r rune
	var size int
	var skipSqueeze, matched bool
	var tr *Translator
	var output *stringBuilder

	orig := str
	last = -1

	if len(pattern) > 0 {
		tr = NewTranslator(pattern, "")
	}

	for len(str) > 0 {
		r, size = utf8.DecodeRuneInString(str)

		// Need to squeeze the str.
		if last == r && !skipSqueeze {
			if tr != nil {
				if _, matched = tr.TranslateRune(r); !matched {
					skipSqueeze = true
				}
			}

			if output == nil {
				output = allocBuffer(orig, str)
			}

			if skipSqueeze {
				output.WriteRune(r)
			}
		} else {
			if output != nil {
				output.WriteRune(r)
			}

			last = r
			skipSqueeze = false
		}

		str = str[size:]
	}

	if output == nil {
		return orig
	}

	return output.String()
}
  07070100000775000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002E00000000elemental-cli-0.3.1/vendor/github.com/imdario 07070100000776000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/github.com/imdario/mergo   07070100000777000081A4000000000000000000000001645E367C00000097000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/imdario/mergo/.deepsource.toml  version = 1

test_patterns = [
  "*_test.go"
]

[[analyzers]]
name = "go"
enabled = true

  [analyzers.meta]
  import_path = "github.com/imdario/mergo" 07070100000778000081A4000000000000000000000001645E367C000001EC000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/imdario/mergo/.gitignore    #### joe made this: http://goel.io/joe

#### go ####
# Binaries for programs and plugins
*.exe
*.dll
*.so
*.dylib

# Test binary, build with `go test -c`
*.test

# Output of the go coverage tool, specifically when used with LiteIDE
*.out

# Project-local glide cache, RE: https://github.com/Masterminds/glide/issues/736
.glide/

#### vim ####
# Swap
[._]*.s[a-v][a-z]
[._]*.sw[a-p]
[._]s[a-v][a-z]
[._]sw[a-p]

# Session
Session.vim

# Temporary
.netrwhist
*~
# Auto-generated tag files
tags
07070100000779000081A4000000000000000000000001645E367C00000111000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/imdario/mergo/.travis.yml   language: go
arch:
    - amd64
    - ppc64le
install:
  - go get -t
  - go get golang.org/x/tools/cmd/cover
  - go get github.com/mattn/goveralls
script:
  - go test -race -v ./...
after_script:
  - $HOME/gopath/bin/goveralls -service=travis-ci -repotoken $COVERALLS_TOKEN
   0707010000077A000081A4000000000000000000000001645E367C00000C87000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/imdario/mergo/CODE_OF_CONDUCT.md    # Contributor Covenant Code of Conduct

## Our Pledge

In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.

## Our Standards

Examples of behavior that contributes to creating a positive environment include:

* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members

Examples of unacceptable behavior by participants include:

* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting

## Our Responsibilities

Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.

Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.

## Scope

This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at i@dario.im. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.

Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]

[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/
 0707010000077B000081A4000000000000000000000001645E367C00001F88000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/imdario/mergo/CONTRIBUTING.md   <!-- omit in toc -->
# Contributing to mergo

First off, thanks for taking the time to contribute! ❤️

All types of contributions are encouraged and valued. See the [Table of Contents](#table-of-contents) for different ways to help and details about how this project handles them. Please make sure to read the relevant section before making your contribution. It will make it a lot easier for us maintainers and smooth out the experience for all involved. The community looks forward to your contributions. 🎉

> And if you like the project, but just don't have time to contribute, that's fine. There are other easy ways to support the project and show your appreciation, which we would also be very happy about:
> - Star the project
> - Tweet about it
> - Refer this project in your project's readme
> - Mention the project at local meetups and tell your friends/colleagues

<!-- omit in toc -->
## Table of Contents

- [Code of Conduct](#code-of-conduct)
- [I Have a Question](#i-have-a-question)
- [I Want To Contribute](#i-want-to-contribute)
- [Reporting Bugs](#reporting-bugs)
- [Suggesting Enhancements](#suggesting-enhancements)

## Code of Conduct

This project and everyone participating in it is governed by the
[mergo Code of Conduct](https://github.com/imdario/mergoblob/master/CODE_OF_CONDUCT.md).
By participating, you are expected to uphold this code. Please report unacceptable behavior
to <>.


## I Have a Question

> If you want to ask a question, we assume that you have read the available [Documentation](https://pkg.go.dev/github.com/imdario/mergo).

Before you ask a question, it is best to search for existing [Issues](https://github.com/imdario/mergo/issues) that might help you. In case you have found a suitable issue and still need clarification, you can write your question in this issue. It is also advisable to search the internet for answers first.

If you then still feel the need to ask a question and need clarification, we recommend the following:

- Open an [Issue](https://github.com/imdario/mergo/issues/new).
- Provide as much context as you can about what you're running into.
- Provide project and platform versions (nodejs, npm, etc), depending on what seems relevant.

We will then take care of the issue as soon as possible.

## I Want To Contribute

> ### Legal Notice <!-- omit in toc -->
> When contributing to this project, you must agree that you have authored 100% of the content, that you have the necessary rights to the content and that the content you contribute may be provided under the project license.

### Reporting Bugs

<!-- omit in toc -->
#### Before Submitting a Bug Report

A good bug report shouldn't leave others needing to chase you up for more information. Therefore, we ask you to investigate carefully, collect information and describe the issue in detail in your report. Please complete the following steps in advance to help us fix any potential bug as fast as possible.

- Make sure that you are using the latest version.
- Determine if your bug is really a bug and not an error on your side e.g. using incompatible environment components/versions (Make sure that you have read the [documentation](). If you are looking for support, you might want to check [this section](#i-have-a-question)).
- To see if other users have experienced (and potentially already solved) the same issue you are having, check if there is not already a bug report existing for your bug or error in the [bug tracker](https://github.com/imdario/mergoissues?q=label%3Abug).
- Also make sure to search the internet (including Stack Overflow) to see if users outside of the GitHub community have discussed the issue.
- Collect information about the bug:
- Stack trace (Traceback)
- OS, Platform and Version (Windows, Linux, macOS, x86, ARM)
- Version of the interpreter, compiler, SDK, runtime environment, package manager, depending on what seems relevant.
- Possibly your input and the output
- Can you reliably reproduce the issue? And can you also reproduce it with older versions?

<!-- omit in toc -->
#### How Do I Submit a Good Bug Report?

> You must never report security related issues, vulnerabilities or bugs including sensitive information to the issue tracker, or elsewhere in public. Instead sensitive bugs must be sent by email to .
<!-- You may add a PGP key to allow the messages to be sent encrypted as well. -->

We use GitHub issues to track bugs and errors. If you run into an issue with the project:

- Open an [Issue](https://github.com/imdario/mergo/issues/new). (Since we can't be sure at this point whether it is a bug or not, we ask you not to talk about a bug yet and not to label the issue.)
- Explain the behavior you would expect and the actual behavior.
- Please provide as much context as possible and describe the *reproduction steps* that someone else can follow to recreate the issue on their own. This usually includes your code. For good bug reports you should isolate the problem and create a reduced test case.
- Provide the information you collected in the previous section.

Once it's filed:

- The project team will label the issue accordingly.
- A team member will try to reproduce the issue with your provided steps. If there are no reproduction steps or no obvious way to reproduce the issue, the team will ask you for those steps and mark the issue as `needs-repro`. Bugs with the `needs-repro` tag will not be addressed until they are reproduced.
- If the team is able to reproduce the issue, it will be marked `needs-fix`, as well as possibly other tags (such as `critical`), and the issue will be left to be implemented by someone.

### Suggesting Enhancements

This section guides you through submitting an enhancement suggestion for mergo, **including completely new features and minor improvements to existing functionality**. Following these guidelines will help maintainers and the community to understand your suggestion and find related suggestions.

<!-- omit in toc -->
#### Before Submitting an Enhancement

- Make sure that you are using the latest version.
- Read the [documentation]() carefully and find out if the functionality is already covered, maybe by an individual configuration.
- Perform a [search](https://github.com/imdario/mergo/issues) to see if the enhancement has already been suggested. If it has, add a comment to the existing issue instead of opening a new one.
- Find out whether your idea fits with the scope and aims of the project. It's up to you to make a strong case to convince the project's developers of the merits of this feature. Keep in mind that we want features that will be useful to the majority of our users and not just a small subset. If you're just targeting a minority of users, consider writing an add-on/plugin library.

<!-- omit in toc -->
#### How Do I Submit a Good Enhancement Suggestion?

Enhancement suggestions are tracked as [GitHub issues](https://github.com/imdario/mergo/issues).

- Use a **clear and descriptive title** for the issue to identify the suggestion.
- Provide a **step-by-step description of the suggested enhancement** in as many details as possible.
- **Describe the current behavior** and **explain which behavior you expected to see instead** and why. At this point you can also tell which alternatives do not work for you.
- You may want to **include screenshots and animated GIFs** which help you demonstrate the steps or point out the part which the suggestion is related to. You can use [this tool](https://www.cockos.com/licecap/) to record GIFs on macOS and Windows, and [this tool](https://github.com/colinkeenan/silentcast) or [this tool](https://github.com/GNOME/byzanz) on Linux. <!-- this should only be included if the project has a GUI -->
- **Explain why this enhancement would be useful** to most mergo users. You may also want to point out the other projects that solved it better and which could serve as inspiration.

<!-- omit in toc -->
## Attribution
This guide is based on the **contributing-gen**. [Make your own](https://github.com/bttger/contributing-gen)!
0707010000077C000081A4000000000000000000000001645E367C00000600000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/imdario/mergo/LICENSE   Copyright (c) 2013 Dario Castañé. All rights reserved.
Copyright (c) 2012 The Go Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
0707010000077D000081A4000000000000000000000001645E367C000025AC000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/imdario/mergo/README.md # Mergo

[![GoDoc][3]][4]
[![GitHub release][5]][6]
[![GoCard][7]][8]
[![Build Status][1]][2]
[![Coverage Status][9]][10]
[![Sourcegraph][11]][12]
[![FOSSA Status][13]][14]
[![Become my sponsor][15]][16]
[![Tidelift][17]][18]

[1]: https://travis-ci.org/imdario/mergo.png
[2]: https://travis-ci.org/imdario/mergo
[3]: https://godoc.org/github.com/imdario/mergo?status.svg
[4]: https://godoc.org/github.com/imdario/mergo
[5]: https://img.shields.io/github/release/imdario/mergo.svg
[6]: https://github.com/imdario/mergo/releases
[7]: https://goreportcard.com/badge/imdario/mergo
[8]: https://goreportcard.com/report/github.com/imdario/mergo
[9]: https://coveralls.io/repos/github/imdario/mergo/badge.svg?branch=master
[10]: https://coveralls.io/github/imdario/mergo?branch=master
[11]: https://sourcegraph.com/github.com/imdario/mergo/-/badge.svg
[12]: https://sourcegraph.com/github.com/imdario/mergo?badge
[13]: https://app.fossa.io/api/projects/git%2Bgithub.com%2Fimdario%2Fmergo.svg?type=shield
[14]: https://app.fossa.io/projects/git%2Bgithub.com%2Fimdario%2Fmergo?ref=badge_shield
[15]: https://img.shields.io/github/sponsors/imdario
[16]: https://github.com/sponsors/imdario
[17]: https://tidelift.com/badges/package/go/github.com%2Fimdario%2Fmergo
[18]: https://tidelift.com/subscription/pkg/go-github.com-imdario-mergo

A helper to merge structs and maps in Golang. Useful for configuration default values, avoiding messy if-statements.

Mergo merges same-type structs and maps by setting default values in zero-value fields. Mergo won't merge unexported (private) fields. It will do recursively any exported one. It also won't merge structs inside maps (because they are not addressable using Go reflection).

Also a lovely [comune](http://en.wikipedia.org/wiki/Mergo) (municipality) in the Province of Ancona in the Italian region of Marche.

## Status

It is ready for production use. [It is used in several projects by Docker, Google, The Linux Foundation, VMWare, Shopify, Microsoft, etc](https://github.com/imdario/mergo#mergo-in-the-wild).

### Important note

Please keep in mind that a problematic PR broke [0.3.9](//github.com/imdario/mergo/releases/tag/0.3.9). I reverted it in [0.3.10](//github.com/imdario/mergo/releases/tag/0.3.10), and I consider it stable but not bug-free. Also, this version adds support for go modules.

Keep in mind that in [0.3.2](//github.com/imdario/mergo/releases/tag/0.3.2), Mergo changed `Merge()`and `Map()` signatures to support [transformers](#transformers). I added an optional/variadic argument so that it won't break the existing code.

If you were using Mergo before April 6th, 2015, please check your project works as intended after updating your local copy with ```go get -u github.com/imdario/mergo```. I apologize for any issue caused by its previous behavior and any future bug that Mergo could cause in existing projects after the change (release 0.2.0).

### Donations

If Mergo is useful to you, consider buying me a coffee, a beer, or making a monthly donation to allow me to keep building great free software. :heart_eyes:

<a href='https://ko-fi.com/B0B58839' target='_blank'><img height='36' style='border:0px;height:36px;' src='https://az743702.vo.msecnd.net/cdn/kofi1.png?v=0' border='0' alt='Buy Me a Coffee at ko-fi.com' /></a>
<a href="https://liberapay.com/dario/donate"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg"></a>
<a href='https://github.com/sponsors/imdario' target='_blank'><img alt="Become my sponsor" src="https://img.shields.io/github/sponsors/imdario?style=for-the-badge" /></a>

### Mergo in the wild

- [moby/moby](https://github.com/moby/moby)
- [kubernetes/kubernetes](https://github.com/kubernetes/kubernetes)
- [vmware/dispatch](https://github.com/vmware/dispatch)
- [Shopify/themekit](https://github.com/Shopify/themekit)
- [imdario/zas](https://github.com/imdario/zas)
- [matcornic/hermes](https://github.com/matcornic/hermes)
- [OpenBazaar/openbazaar-go](https://github.com/OpenBazaar/openbazaar-go)
- [kataras/iris](https://github.com/kataras/iris)
- [michaelsauter/crane](https://github.com/michaelsauter/crane)
- [go-task/task](https://github.com/go-task/task)
- [sensu/uchiwa](https://github.com/sensu/uchiwa)
- [ory/hydra](https://github.com/ory/hydra)
- [sisatech/vcli](https://github.com/sisatech/vcli)
- [dairycart/dairycart](https://github.com/dairycart/dairycart)
- [projectcalico/felix](https://github.com/projectcalico/felix)
- [resin-os/balena](https://github.com/resin-os/balena)
- [go-kivik/kivik](https://github.com/go-kivik/kivik)
- [Telefonica/govice](https://github.com/Telefonica/govice)
- [supergiant/supergiant](supergiant/supergiant)
- [SergeyTsalkov/brooce](https://github.com/SergeyTsalkov/brooce)
- [soniah/dnsmadeeasy](https://github.com/soniah/dnsmadeeasy)
- [ohsu-comp-bio/funnel](https://github.com/ohsu-comp-bio/funnel)
- [EagerIO/Stout](https://github.com/EagerIO/Stout)
- [lynndylanhurley/defsynth-api](https://github.com/lynndylanhurley/defsynth-api)
- [russross/canvasassignments](https://github.com/russross/canvasassignments)
- [rdegges/cryptly-api](https://github.com/rdegges/cryptly-api)
- [casualjim/exeggutor](https://github.com/casualjim/exeggutor)
- [divshot/gitling](https://github.com/divshot/gitling)
- [RWJMurphy/gorl](https://github.com/RWJMurphy/gorl)
- [andrerocker/deploy42](https://github.com/andrerocker/deploy42)
- [elwinar/rambler](https://github.com/elwinar/rambler)
- [tmaiaroto/gopartman](https://github.com/tmaiaroto/gopartman)
- [jfbus/impressionist](https://github.com/jfbus/impressionist)
- [Jmeyering/zealot](https://github.com/Jmeyering/zealot)
- [godep-migrator/rigger-host](https://github.com/godep-migrator/rigger-host)
- [Dronevery/MultiwaySwitch-Go](https://github.com/Dronevery/MultiwaySwitch-Go)
- [thoas/picfit](https://github.com/thoas/picfit)
- [mantasmatelis/whooplist-server](https://github.com/mantasmatelis/whooplist-server)
- [jnuthong/item_search](https://github.com/jnuthong/item_search)
- [bukalapak/snowboard](https://github.com/bukalapak/snowboard)
- [containerssh/containerssh](https://github.com/containerssh/containerssh)
- [goreleaser/goreleaser](https://github.com/goreleaser/goreleaser)
- [tjpnz/structbot](https://github.com/tjpnz/structbot)

## Install

    go get github.com/imdario/mergo

    // use in your .go code
    import (
        "github.com/imdario/mergo"
    )

## Usage

You can only merge same-type structs with exported fields initialized as zero value of their type and same-types maps. Mergo won't merge unexported (private) fields but will do recursively any exported one. It won't merge empty structs value as [they are zero values](https://golang.org/ref/spec#The_zero_value) too. Also, maps will be merged recursively except for structs inside maps (because they are not addressable using Go reflection).

```go
if err := mergo.Merge(&dst, src); err != nil {
    // ...
}
```

Also, you can merge overwriting values using the transformer `WithOverride`.

```go
if err := mergo.Merge(&dst, src, mergo.WithOverride); err != nil {
    // ...
}
```

Additionally, you can map a `map[string]interface{}` to a struct (and otherwise, from struct to map), following the same restrictions as in `Merge()`. Keys are capitalized to find each corresponding exported field.

```go
if err := mergo.Map(&dst, srcMap); err != nil {
    // ...
}
```

Warning: if you map a struct to map, it won't do it recursively. Don't expect Mergo to map struct members of your struct as `map[string]interface{}`. They will be just assigned as values.

Here is a nice example:

```go
package main

import (
	"fmt"
	"github.com/imdario/mergo"
)

type Foo struct {
	A string
	B int64
}

func main() {
	src := Foo{
		A: "one",
		B: 2,
	}
	dest := Foo{
		A: "two",
	}
	mergo.Merge(&dest, src)
	fmt.Println(dest)
	// Will print
	// {two 2}
}
```

Note: if test are failing due missing package, please execute:

    go get gopkg.in/yaml.v3

### Transformers

Transformers allow to merge specific types differently than in the default behavior. In other words, now you can customize how some types are merged. For example, `time.Time` is a struct; it doesn't have zero value but IsZero can return true because it has fields with zero value. How can we merge a non-zero `time.Time`?

```go
package main

import (
	"fmt"
	"github.com/imdario/mergo"
        "reflect"
        "time"
)

type timeTransformer struct {
}

func (t timeTransformer) Transformer(typ reflect.Type) func(dst, src reflect.Value) error {
	if typ == reflect.TypeOf(time.Time{}) {
		return func(dst, src reflect.Value) error {
			if dst.CanSet() {
				isZero := dst.MethodByName("IsZero")
				result := isZero.Call([]reflect.Value{})
				if result[0].Bool() {
					dst.Set(src)
				}
			}
			return nil
		}
	}
	return nil
}

type Snapshot struct {
	Time time.Time
	// ...
}

func main() {
	src := Snapshot{time.Now()}
	dest := Snapshot{}
	mergo.Merge(&dest, src, mergo.WithTransformers(timeTransformer{}))
	fmt.Println(dest)
	// Will print
	// { 2018-01-12 01:15:00 +0000 UTC m=+0.000000001 }
}
```

## Contact me

If I can help you, you have an idea or you are using Mergo in your projects, don't hesitate to drop me a line (or a pull request): [@im_dario](https://twitter.com/im_dario)

## About

Written by [Dario Castañé](http://dario.im).

## License

[BSD 3-Clause](http://opensource.org/licenses/BSD-3-Clause) license, as [Go language](http://golang.org/LICENSE).


[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fimdario%2Fmergo.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fimdario%2Fmergo?ref=badge_large)
0707010000077E000081A4000000000000000000000001645E367C00000170000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/imdario/mergo/SECURITY.md   # Security Policy

## Supported Versions

| Version | Supported          |
| ------- | ------------------ |
| 0.3.x   | :white_check_mark: |
| < 0.3   | :x:                |

## Security contact information

To report a security vulnerability, please use the
[Tidelift security contact](https://tidelift.com/security).
Tidelift will coordinate the fix and disclosure.
0707010000077F000081A4000000000000000000000001645E367C0000113D000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/imdario/mergo/doc.go    // Copyright 2013 Dario Castañé. All rights reserved.
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

/*
A helper to merge structs and maps in Golang. Useful for configuration default values, avoiding messy if-statements.

Mergo merges same-type structs and maps by setting default values in zero-value fields. Mergo won't merge unexported (private) fields. It will do recursively any exported one. It also won't merge structs inside maps (because they are not addressable using Go reflection).

Status

It is ready for production use. It is used in several projects by Docker, Google, The Linux Foundation, VMWare, Shopify, etc.

Important note

Please keep in mind that a problematic PR broke 0.3.9. We reverted it in 0.3.10. We consider 0.3.10 as stable but not bug-free. . Also, this version adds suppot for go modules.

Keep in mind that in 0.3.2, Mergo changed Merge() and Map() signatures to support transformers. We added an optional/variadic argument so that it won't break the existing code.

If you were using Mergo before April 6th, 2015, please check your project works as intended after updating your local copy with go get -u github.com/imdario/mergo. I apologize for any issue caused by its previous behavior and any future bug that Mergo could cause in existing projects after the change (release 0.2.0).

Install

Do your usual installation procedure:

    go get github.com/imdario/mergo

    // use in your .go code
    import (
        "github.com/imdario/mergo"
    )

Usage

You can only merge same-type structs with exported fields initialized as zero value of their type and same-types maps. Mergo won't merge unexported (private) fields but will do recursively any exported one. It won't merge empty structs value as they are zero values too. Also, maps will be merged recursively except for structs inside maps (because they are not addressable using Go reflection).

	if err := mergo.Merge(&dst, src); err != nil {
		// ...
	}

Also, you can merge overwriting values using the transformer WithOverride.

	if err := mergo.Merge(&dst, src, mergo.WithOverride); err != nil {
		// ...
	}

Additionally, you can map a map[string]interface{} to a struct (and otherwise, from struct to map), following the same restrictions as in Merge(). Keys are capitalized to find each corresponding exported field.

	if err := mergo.Map(&dst, srcMap); err != nil {
		// ...
	}

Warning: if you map a struct to map, it won't do it recursively. Don't expect Mergo to map struct members of your struct as map[string]interface{}. They will be just assigned as values.

Here is a nice example:

	package main

	import (
		"fmt"
		"github.com/imdario/mergo"
	)

	type Foo struct {
		A string
		B int64
	}

	func main() {
		src := Foo{
			A: "one",
			B: 2,
		}
		dest := Foo{
			A: "two",
		}
		mergo.Merge(&dest, src)
		fmt.Println(dest)
		// Will print
		// {two 2}
	}

Transformers

Transformers allow to merge specific types differently than in the default behavior. In other words, now you can customize how some types are merged. For example, time.Time is a struct; it doesn't have zero value but IsZero can return true because it has fields with zero value. How can we merge a non-zero time.Time?

	package main

	import (
		"fmt"
		"github.com/imdario/mergo"
			"reflect"
			"time"
	)

	type timeTransformer struct {
	}

	func (t timeTransformer) Transformer(typ reflect.Type) func(dst, src reflect.Value) error {
		if typ == reflect.TypeOf(time.Time{}) {
			return func(dst, src reflect.Value) error {
				if dst.CanSet() {
					isZero := dst.MethodByName("IsZero")
					result := isZero.Call([]reflect.Value{})
					if result[0].Bool() {
						dst.Set(src)
					}
				}
				return nil
			}
		}
		return nil
	}

	type Snapshot struct {
		Time time.Time
		// ...
	}

	func main() {
		src := Snapshot{time.Now()}
		dest := Snapshot{}
		mergo.Merge(&dest, src, mergo.WithTransformers(timeTransformer{}))
		fmt.Println(dest)
		// Will print
		// { 2018-01-12 01:15:00 +0000 UTC m=+0.000000001 }
	}

Contact me

If I can help you, you have an idea or you are using Mergo in your projects, don't hesitate to drop me a line (or a pull request): https://twitter.com/im_dario

About

Written by Dario Castañé: https://da.rio.hn

License

BSD 3-Clause license, as Go language.

*/
package mergo
   07070100000780000081A4000000000000000000000001645E367C00001549000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/imdario/mergo/map.go    // Copyright 2014 Dario Castañé. All rights reserved.
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Based on src/pkg/reflect/deepequal.go from official
// golang's stdlib.

package mergo

import (
	"fmt"
	"reflect"
	"unicode"
	"unicode/utf8"
)

func changeInitialCase(s string, mapper func(rune) rune) string {
	if s == "" {
		return s
	}
	r, n := utf8.DecodeRuneInString(s)
	return string(mapper(r)) + s[n:]
}

func isExported(field reflect.StructField) bool {
	r, _ := utf8.DecodeRuneInString(field.Name)
	return r >= 'A' && r <= 'Z'
}

// Traverses recursively both values, assigning src's fields values to dst.
// The map argument tracks comparisons that have already been seen, which allows
// short circuiting on recursive types.
func deepMap(dst, src reflect.Value, visited map[uintptr]*visit, depth int, config *Config) (err error) {
	overwrite := config.Overwrite
	if dst.CanAddr() {
		addr := dst.UnsafeAddr()
		h := 17 * addr
		seen := visited[h]
		typ := dst.Type()
		for p := seen; p != nil; p = p.next {
			if p.ptr == addr && p.typ == typ {
				return nil
			}
		}
		// Remember, remember...
		visited[h] = &visit{typ, seen, addr}
	}
	zeroValue := reflect.Value{}
	switch dst.Kind() {
	case reflect.Map:
		dstMap := dst.Interface().(map[string]interface{})
		for i, n := 0, src.NumField(); i < n; i++ {
			srcType := src.Type()
			field := srcType.Field(i)
			if !isExported(field) {
				continue
			}
			fieldName := field.Name
			fieldName = changeInitialCase(fieldName, unicode.ToLower)
			if v, ok := dstMap[fieldName]; !ok || (isEmptyValue(reflect.ValueOf(v), !config.ShouldNotDereference) || overwrite) {
				dstMap[fieldName] = src.Field(i).Interface()
			}
		}
	case reflect.Ptr:
		if dst.IsNil() {
			v := reflect.New(dst.Type().Elem())
			dst.Set(v)
		}
		dst = dst.Elem()
		fallthrough
	case reflect.Struct:
		srcMap := src.Interface().(map[string]interface{})
		for key := range srcMap {
			config.overwriteWithEmptyValue = true
			srcValue := srcMap[key]
			fieldName := changeInitialCase(key, unicode.ToUpper)
			dstElement := dst.FieldByName(fieldName)
			if dstElement == zeroValue {
				// We discard it because the field doesn't exist.
				continue
			}
			srcElement := reflect.ValueOf(srcValue)
			dstKind := dstElement.Kind()
			srcKind := srcElement.Kind()
			if srcKind == reflect.Ptr && dstKind != reflect.Ptr {
				srcElement = srcElement.Elem()
				srcKind = reflect.TypeOf(srcElement.Interface()).Kind()
			} else if dstKind == reflect.Ptr {
				// Can this work? I guess it can't.
				if srcKind != reflect.Ptr && srcElement.CanAddr() {
					srcPtr := srcElement.Addr()
					srcElement = reflect.ValueOf(srcPtr)
					srcKind = reflect.Ptr
				}
			}

			if !srcElement.IsValid() {
				continue
			}
			if srcKind == dstKind {
				if err = deepMerge(dstElement, srcElement, visited, depth+1, config); err != nil {
					return
				}
			} else if dstKind == reflect.Interface && dstElement.Kind() == reflect.Interface {
				if err = deepMerge(dstElement, srcElement, visited, depth+1, config); err != nil {
					return
				}
			} else if srcKind == reflect.Map {
				if err = deepMap(dstElement, srcElement, visited, depth+1, config); err != nil {
					return
				}
			} else {
				return fmt.Errorf("type mismatch on %s field: found %v, expected %v", fieldName, srcKind, dstKind)
			}
		}
	}
	return
}

// Map sets fields' values in dst from src.
// src can be a map with string keys or a struct. dst must be the opposite:
// if src is a map, dst must be a valid pointer to struct. If src is a struct,
// dst must be map[string]interface{}.
// It won't merge unexported (private) fields and will do recursively
// any exported field.
// If dst is a map, keys will be src fields' names in lower camel case.
// Missing key in src that doesn't match a field in dst will be skipped. This
// doesn't apply if dst is a map.
// This is separated method from Merge because it is cleaner and it keeps sane
// semantics: merging equal types, mapping different (restricted) types.
func Map(dst, src interface{}, opts ...func(*Config)) error {
	return _map(dst, src, opts...)
}

// MapWithOverwrite will do the same as Map except that non-empty dst attributes will be overridden by
// non-empty src attribute values.
// Deprecated: Use Map(…) with WithOverride
func MapWithOverwrite(dst, src interface{}, opts ...func(*Config)) error {
	return _map(dst, src, append(opts, WithOverride)...)
}

func _map(dst, src interface{}, opts ...func(*Config)) error {
	if dst != nil && reflect.ValueOf(dst).Kind() != reflect.Ptr {
		return ErrNonPointerArgument
	}
	var (
		vDst, vSrc reflect.Value
		err        error
	)
	config := &Config{}

	for _, opt := range opts {
		opt(config)
	}

	if vDst, vSrc, err = resolveValues(dst, src); err != nil {
		return err
	}
	// To be friction-less, we redirect equal-type arguments
	// to deepMerge. Only because arguments can be anything.
	if vSrc.Kind() == vDst.Kind() {
		return deepMerge(vDst, vSrc, make(map[uintptr]*visit), 0, config)
	}
	switch vSrc.Kind() {
	case reflect.Struct:
		if vDst.Kind() != reflect.Map {
			return ErrExpectedMapAsDestination
		}
	case reflect.Map:
		if vDst.Kind() != reflect.Struct {
			return ErrExpectedStructAsDestination
		}
	default:
		return ErrNotSupported
	}
	return deepMap(vDst, vSrc, make(map[uintptr]*visit), 0, config)
}
   07070100000781000081A4000000000000000000000001645E367C00002F94000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/imdario/mergo/merge.go  // Copyright 2013 Dario Castañé. All rights reserved.
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Based on src/pkg/reflect/deepequal.go from official
// golang's stdlib.

package mergo

import (
	"fmt"
	"reflect"
)

func hasMergeableFields(dst reflect.Value) (exported bool) {
	for i, n := 0, dst.NumField(); i < n; i++ {
		field := dst.Type().Field(i)
		if field.Anonymous && dst.Field(i).Kind() == reflect.Struct {
			exported = exported || hasMergeableFields(dst.Field(i))
		} else if isExportedComponent(&field) {
			exported = exported || len(field.PkgPath) == 0
		}
	}
	return
}

func isExportedComponent(field *reflect.StructField) bool {
	pkgPath := field.PkgPath
	if len(pkgPath) > 0 {
		return false
	}
	c := field.Name[0]
	if 'a' <= c && c <= 'z' || c == '_' {
		return false
	}
	return true
}

type Config struct {
	Transformers                 Transformers
	Overwrite                    bool
	ShouldNotDereference         bool
	AppendSlice                  bool
	TypeCheck                    bool
	overwriteWithEmptyValue      bool
	overwriteSliceWithEmptyValue bool
	sliceDeepCopy                bool
	debug                        bool
}

type Transformers interface {
	Transformer(reflect.Type) func(dst, src reflect.Value) error
}

// Traverses recursively both values, assigning src's fields values to dst.
// The map argument tracks comparisons that have already been seen, which allows
// short circuiting on recursive types.
func deepMerge(dst, src reflect.Value, visited map[uintptr]*visit, depth int, config *Config) (err error) {
	overwrite := config.Overwrite
	typeCheck := config.TypeCheck
	overwriteWithEmptySrc := config.overwriteWithEmptyValue
	overwriteSliceWithEmptySrc := config.overwriteSliceWithEmptyValue
	sliceDeepCopy := config.sliceDeepCopy

	if !src.IsValid() {
		return
	}
	if dst.CanAddr() {
		addr := dst.UnsafeAddr()
		h := 17 * addr
		seen := visited[h]
		typ := dst.Type()
		for p := seen; p != nil; p = p.next {
			if p.ptr == addr && p.typ == typ {
				return nil
			}
		}
		// Remember, remember...
		visited[h] = &visit{typ, seen, addr}
	}

	if config.Transformers != nil && !isReflectNil(dst) && dst.IsValid() {
		if fn := config.Transformers.Transformer(dst.Type()); fn != nil {
			err = fn(dst, src)
			return
		}
	}

	switch dst.Kind() {
	case reflect.Struct:
		if hasMergeableFields(dst) {
			for i, n := 0, dst.NumField(); i < n; i++ {
				if err = deepMerge(dst.Field(i), src.Field(i), visited, depth+1, config); err != nil {
					return
				}
			}
		} else {
			if dst.CanSet() && (isReflectNil(dst) || overwrite) && (!isEmptyValue(src, !config.ShouldNotDereference) || overwriteWithEmptySrc) {
				dst.Set(src)
			}
		}
	case reflect.Map:
		if dst.IsNil() && !src.IsNil() {
			if dst.CanSet() {
				dst.Set(reflect.MakeMap(dst.Type()))
			} else {
				dst = src
				return
			}
		}

		if src.Kind() != reflect.Map {
			if overwrite && dst.CanSet() {
				dst.Set(src)
			}
			return
		}

		for _, key := range src.MapKeys() {
			srcElement := src.MapIndex(key)
			if !srcElement.IsValid() {
				continue
			}
			dstElement := dst.MapIndex(key)
			switch srcElement.Kind() {
			case reflect.Chan, reflect.Func, reflect.Map, reflect.Interface, reflect.Slice:
				if srcElement.IsNil() {
					if overwrite {
						dst.SetMapIndex(key, srcElement)
					}
					continue
				}
				fallthrough
			default:
				if !srcElement.CanInterface() {
					continue
				}
				switch reflect.TypeOf(srcElement.Interface()).Kind() {
				case reflect.Struct:
					fallthrough
				case reflect.Ptr:
					fallthrough
				case reflect.Map:
					srcMapElm := srcElement
					dstMapElm := dstElement
					if srcMapElm.CanInterface() {
						srcMapElm = reflect.ValueOf(srcMapElm.Interface())
						if dstMapElm.IsValid() {
							dstMapElm = reflect.ValueOf(dstMapElm.Interface())
						}
					}
					if err = deepMerge(dstMapElm, srcMapElm, visited, depth+1, config); err != nil {
						return
					}
				case reflect.Slice:
					srcSlice := reflect.ValueOf(srcElement.Interface())

					var dstSlice reflect.Value
					if !dstElement.IsValid() || dstElement.IsNil() {
						dstSlice = reflect.MakeSlice(srcSlice.Type(), 0, srcSlice.Len())
					} else {
						dstSlice = reflect.ValueOf(dstElement.Interface())
					}

					if (!isEmptyValue(src, !config.ShouldNotDereference) || overwriteWithEmptySrc || overwriteSliceWithEmptySrc) && (overwrite || isEmptyValue(dst, !config.ShouldNotDereference)) && !config.AppendSlice && !sliceDeepCopy {
						if typeCheck && srcSlice.Type() != dstSlice.Type() {
							return fmt.Errorf("cannot override two slices with different type (%s, %s)", srcSlice.Type(), dstSlice.Type())
						}
						dstSlice = srcSlice
					} else if config.AppendSlice {
						if srcSlice.Type() != dstSlice.Type() {
							return fmt.Errorf("cannot append two slices with different type (%s, %s)", srcSlice.Type(), dstSlice.Type())
						}
						dstSlice = reflect.AppendSlice(dstSlice, srcSlice)
					} else if sliceDeepCopy {
						i := 0
						for ; i < srcSlice.Len() && i < dstSlice.Len(); i++ {
							srcElement := srcSlice.Index(i)
							dstElement := dstSlice.Index(i)

							if srcElement.CanInterface() {
								srcElement = reflect.ValueOf(srcElement.Interface())
							}
							if dstElement.CanInterface() {
								dstElement = reflect.ValueOf(dstElement.Interface())
							}

							if err = deepMerge(dstElement, srcElement, visited, depth+1, config); err != nil {
								return
							}
						}

					}
					dst.SetMapIndex(key, dstSlice)
				}
			}

			if dstElement.IsValid() && !isEmptyValue(dstElement, !config.ShouldNotDereference) {
				if reflect.TypeOf(srcElement.Interface()).Kind() == reflect.Slice {
					continue
				}
				if reflect.TypeOf(srcElement.Interface()).Kind() == reflect.Map && reflect.TypeOf(dstElement.Interface()).Kind() == reflect.Map {
					continue
				}
			}

			if srcElement.IsValid() && ((srcElement.Kind() != reflect.Ptr && overwrite) || !dstElement.IsValid() || isEmptyValue(dstElement, !config.ShouldNotDereference)) {
				if dst.IsNil() {
					dst.Set(reflect.MakeMap(dst.Type()))
				}
				dst.SetMapIndex(key, srcElement)
			}
		}

		// Ensure that all keys in dst are deleted if they are not in src.
		if overwriteWithEmptySrc {
			for _, key := range dst.MapKeys() {
				srcElement := src.MapIndex(key)
				if !srcElement.IsValid() {
					dst.SetMapIndex(key, reflect.Value{})
				}
			}
		}
	case reflect.Slice:
		if !dst.CanSet() {
			break
		}
		if (!isEmptyValue(src, !config.ShouldNotDereference) || overwriteWithEmptySrc || overwriteSliceWithEmptySrc) && (overwrite || isEmptyValue(dst, !config.ShouldNotDereference)) && !config.AppendSlice && !sliceDeepCopy {
			dst.Set(src)
		} else if config.AppendSlice {
			if src.Type() != dst.Type() {
				return fmt.Errorf("cannot append two slice with different type (%s, %s)", src.Type(), dst.Type())
			}
			dst.Set(reflect.AppendSlice(dst, src))
		} else if sliceDeepCopy {
			for i := 0; i < src.Len() && i < dst.Len(); i++ {
				srcElement := src.Index(i)
				dstElement := dst.Index(i)
				if srcElement.CanInterface() {
					srcElement = reflect.ValueOf(srcElement.Interface())
				}
				if dstElement.CanInterface() {
					dstElement = reflect.ValueOf(dstElement.Interface())
				}

				if err = deepMerge(dstElement, srcElement, visited, depth+1, config); err != nil {
					return
				}
			}
		}
	case reflect.Ptr:
		fallthrough
	case reflect.Interface:
		if isReflectNil(src) {
			if overwriteWithEmptySrc && dst.CanSet() && src.Type().AssignableTo(dst.Type()) {
				dst.Set(src)
			}
			break
		}

		if src.Kind() != reflect.Interface {
			if dst.IsNil() || (src.Kind() != reflect.Ptr && overwrite) {
				if dst.CanSet() && (overwrite || isEmptyValue(dst, !config.ShouldNotDereference)) {
					dst.Set(src)
				}
			} else if src.Kind() == reflect.Ptr {
				if !config.ShouldNotDereference {
					if err = deepMerge(dst.Elem(), src.Elem(), visited, depth+1, config); err != nil {
						return
					}
				} else {
					if overwriteWithEmptySrc || (overwrite && !src.IsNil()) || dst.IsNil() {
						dst.Set(src)
					}
				}
			} else if dst.Elem().Type() == src.Type() {
				if err = deepMerge(dst.Elem(), src, visited, depth+1, config); err != nil {
					return
				}
			} else {
				return ErrDifferentArgumentsTypes
			}
			break
		}

		if dst.IsNil() || overwrite {
			if dst.CanSet() && (overwrite || isEmptyValue(dst, !config.ShouldNotDereference)) {
				dst.Set(src)
			}
			break
		}

		if dst.Elem().Kind() == src.Elem().Kind() {
			if err = deepMerge(dst.Elem(), src.Elem(), visited, depth+1, config); err != nil {
				return
			}
			break
		}
	default:
		mustSet := (isEmptyValue(dst, !config.ShouldNotDereference) || overwrite) && (!isEmptyValue(src, !config.ShouldNotDereference) || overwriteWithEmptySrc)
		if mustSet {
			if dst.CanSet() {
				dst.Set(src)
			} else {
				dst = src
			}
		}
	}

	return
}

// Merge will fill any empty for value type attributes on the dst struct using corresponding
// src attributes if they themselves are not empty. dst and src must be valid same-type structs
// and dst must be a pointer to struct.
// It won't merge unexported (private) fields and will do recursively any exported field.
func Merge(dst, src interface{}, opts ...func(*Config)) error {
	return merge(dst, src, opts...)
}

// MergeWithOverwrite will do the same as Merge except that non-empty dst attributes will be overridden by
// non-empty src attribute values.
// Deprecated: use Merge(…) with WithOverride
func MergeWithOverwrite(dst, src interface{}, opts ...func(*Config)) error {
	return merge(dst, src, append(opts, WithOverride)...)
}

// WithTransformers adds transformers to merge, allowing to customize the merging of some types.
func WithTransformers(transformers Transformers) func(*Config) {
	return func(config *Config) {
		config.Transformers = transformers
	}
}

// WithOverride will make merge override non-empty dst attributes with non-empty src attributes values.
func WithOverride(config *Config) {
	config.Overwrite = true
}

// WithOverwriteWithEmptyValue will make merge override non empty dst attributes with empty src attributes values.
func WithOverwriteWithEmptyValue(config *Config) {
	config.Overwrite = true
	config.overwriteWithEmptyValue = true
}

// WithOverrideEmptySlice will make merge override empty dst slice with empty src slice.
func WithOverrideEmptySlice(config *Config) {
	config.overwriteSliceWithEmptyValue = true
}

// WithoutDereference prevents dereferencing pointers when evaluating whether they are empty
// (i.e. a non-nil pointer is never considered empty).
func WithoutDereference(config *Config) {
	config.ShouldNotDereference = true
}

// WithAppendSlice will make merge append slices instead of overwriting it.
func WithAppendSlice(config *Config) {
	config.AppendSlice = true
}

// WithTypeCheck will make merge check types while overwriting it (must be used with WithOverride).
func WithTypeCheck(config *Config) {
	config.TypeCheck = true
}

// WithSliceDeepCopy will merge slice element one by one with Overwrite flag.
func WithSliceDeepCopy(config *Config) {
	config.sliceDeepCopy = true
	config.Overwrite = true
}

func merge(dst, src interface{}, opts ...func(*Config)) error {
	if dst != nil && reflect.ValueOf(dst).Kind() != reflect.Ptr {
		return ErrNonPointerArgument
	}
	var (
		vDst, vSrc reflect.Value
		err        error
	)

	config := &Config{}

	for _, opt := range opts {
		opt(config)
	}

	if vDst, vSrc, err = resolveValues(dst, src); err != nil {
		return err
	}
	if vDst.Type() != vSrc.Type() {
		return ErrDifferentArgumentsTypes
	}
	return deepMerge(vDst, vSrc, make(map[uintptr]*visit), 0, config)
}

// IsReflectNil is the reflect value provided nil
func isReflectNil(v reflect.Value) bool {
	k := v.Kind()
	switch k {
	case reflect.Interface, reflect.Slice, reflect.Chan, reflect.Func, reflect.Map, reflect.Ptr:
		// Both interface and slice are nil if first word is 0.
		// Both are always bigger than a word; assume flagIndir.
		return v.IsNil()
	default:
		return false
	}
}
07070100000782000081A4000000000000000000000001645E367C00000999000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/imdario/mergo/mergo.go  // Copyright 2013 Dario Castañé. All rights reserved.
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Based on src/pkg/reflect/deepequal.go from official
// golang's stdlib.

package mergo

import (
	"errors"
	"reflect"
)

// Errors reported by Mergo when it finds invalid arguments.
var (
	ErrNilArguments                = errors.New("src and dst must not be nil")
	ErrDifferentArgumentsTypes     = errors.New("src and dst must be of same type")
	ErrNotSupported                = errors.New("only structs, maps, and slices are supported")
	ErrExpectedMapAsDestination    = errors.New("dst was expected to be a map")
	ErrExpectedStructAsDestination = errors.New("dst was expected to be a struct")
	ErrNonPointerArgument          = errors.New("dst must be a pointer")
)

// During deepMerge, must keep track of checks that are
// in progress.  The comparison algorithm assumes that all
// checks in progress are true when it reencounters them.
// Visited are stored in a map indexed by 17 * a1 + a2;
type visit struct {
	typ  reflect.Type
	next *visit
	ptr  uintptr
}

// From src/pkg/encoding/json/encode.go.
func isEmptyValue(v reflect.Value, shouldDereference bool) bool {
	switch v.Kind() {
	case reflect.Array, reflect.Map, reflect.Slice, reflect.String:
		return v.Len() == 0
	case reflect.Bool:
		return !v.Bool()
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		return v.Int() == 0
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		return v.Uint() == 0
	case reflect.Float32, reflect.Float64:
		return v.Float() == 0
	case reflect.Interface, reflect.Ptr:
		if v.IsNil() {
			return true
		}
		if shouldDereference {
			return isEmptyValue(v.Elem(), shouldDereference)
		}
		return false
	case reflect.Func:
		return v.IsNil()
	case reflect.Invalid:
		return true
	}
	return false
}

func resolveValues(dst, src interface{}) (vDst, vSrc reflect.Value, err error) {
	if dst == nil || src == nil {
		err = ErrNilArguments
		return
	}
	vDst = reflect.ValueOf(dst).Elem()
	if vDst.Kind() != reflect.Struct && vDst.Kind() != reflect.Map && vDst.Kind() != reflect.Slice {
		err = ErrNotSupported
		return
	}
	vSrc = reflect.ValueOf(src)
	// We check if vSrc is a pointer to dereference it.
	if vSrc.Kind() == reflect.Ptr {
		vSrc = vSrc.Elem()
	}
	return
}
   07070100000783000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/github.com/inconshreveable 07070100000784000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/inconshreveable/mousetrap   07070100000785000081A4000000000000000000000001645E367C00002C60000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/inconshreveable/mousetrap/LICENSE                                    Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright 2022 Alan Shreve (@inconshreveable)

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
07070100000786000081A4000000000000000000000001645E367C00000350000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/inconshreveable/mousetrap/README.md # mousetrap

mousetrap is a tiny library that answers a single question.

On a Windows machine, was the process invoked by someone double clicking on
the executable file while browsing in explorer?

### Motivation

Windows developers unfamiliar with command line tools will often "double-click"
the executable for a tool. Because most CLI tools print the help and then exit
when invoked without arguments, this is often very frustrating for those users.

mousetrap provides a way to detect these invocations so that you can provide
more helpful behavior and instructions on how to run the CLI tool. To see what
this looks like, both from an organizational and a technical perspective, see
https://inconshreveable.com/09-09-2014/sweat-the-small-stuff/

### The interface

The library exposes a single interface:

    func StartedByExplorer() (bool)
07070100000787000081A4000000000000000000000001645E367C000001F7000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/inconshreveable/mousetrap/trap_others.go    //go:build !windows
// +build !windows

package mousetrap

// StartedByExplorer returns true if the program was invoked by the user
// double-clicking on the executable from explorer.exe
//
// It is conservative and returns false if any of the internal calls fail.
// It does not guarantee that the program was run from a terminal. It only can tell you
// whether it was launched from explorer.exe
//
// On non-Windows platforms, it always returns false.
func StartedByExplorer() bool {
	return false
}
 07070100000788000081A4000000000000000000000001645E367C0000047D000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/inconshreveable/mousetrap/trap_windows.go   package mousetrap

import (
	"syscall"
	"unsafe"
)

func getProcessEntry(pid int) (*syscall.ProcessEntry32, error) {
	snapshot, err := syscall.CreateToolhelp32Snapshot(syscall.TH32CS_SNAPPROCESS, 0)
	if err != nil {
		return nil, err
	}
	defer syscall.CloseHandle(snapshot)
	var procEntry syscall.ProcessEntry32
	procEntry.Size = uint32(unsafe.Sizeof(procEntry))
	if err = syscall.Process32First(snapshot, &procEntry); err != nil {
		return nil, err
	}
	for {
		if procEntry.ProcessID == uint32(pid) {
			return &procEntry, nil
		}
		err = syscall.Process32Next(snapshot, &procEntry)
		if err != nil {
			return nil, err
		}
	}
}

// StartedByExplorer returns true if the program was invoked by the user double-clicking
// on the executable from explorer.exe
//
// It is conservative and returns false if any of the internal calls fail.
// It does not guarantee that the program was run from a terminal. It only can tell you
// whether it was launched from explorer.exe
func StartedByExplorer() bool {
	pe, err := getProcessEntry(syscall.Getppid())
	if err != nil {
		return false
	}
	return "explorer.exe" == syscall.UTF16ToString(pe.ExeFile[:])
}
   07070100000789000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000002E00000000elemental-cli-0.3.1/vendor/github.com/itchyny 0707010000078A000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003300000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq    0707010000078B000081A4000000000000000000000001645E367C00000041000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/.dockerignore  /gojq
/goxz
/CREDITS
/._*
/y.output
*.exe
*.test
*.out
/.github/
   0707010000078C000081A4000000000000000000000001645E367C0000002C000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/.gitattributes **/testdata/** binary
/builtin.go    eol=lf
0707010000078D000081A4000000000000000000000001645E367C00000037000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/.gitignore /gojq
/goxz
/CREDITS
/._*
/y.output
*.exe
*.test
*.out
 0707010000078E000081A4000000000000000000000001645E367C00004BEA000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/CHANGELOG.md   # Changelog
## [v0.12.12](https://github.com/itchyny/gojq/compare/v0.12.11..v0.12.12) (2023-03-01)
* fix assignment operator (`=`) with overlapping paths and multiple values (`[[]] | .. = ..`)
* fix crash on multiplying large numbers to an empty string (`9223372036854775807 * ""`)
* improve zsh completion file

## [v0.12.11](https://github.com/itchyny/gojq/compare/v0.12.10..v0.12.11) (2022-12-24)
* fix crash on assignment operator (`=`) with multiple values (`. = (0,0)`)
* fix `isnormal` and `normals` functions against subnormal numbers

## [v0.12.10](https://github.com/itchyny/gojq/compare/v0.12.9..v0.12.10) (2022-12-01)
* fix `break` in `try`-`catch` query (`label $x | try break $x catch .`)
* fix path value validation for `getpath` function (`path(getpath([[0]][0]))`)
* fix path value validation for custom iterator functions
* fix `walk` function with argument emitting multiple values (`[1],{x:1} | walk(.,0)`)
* fix `@csv`, `@tsv`, `@sh` to escape the null character (`["\u0000"] | @csv,@tsv,@sh`)
* improve performance of assignment operator (`=`), update-assignment operator (`|=`),
  `map_values`, `del`, `delpaths`, `walk`, `ascii_downcase`, and `ascii_upcase` functions

## [v0.12.9](https://github.com/itchyny/gojq/compare/v0.12.8..v0.12.9) (2022-09-01)
* fix `fromjson` to emit error on unexpected trailing string
* fix path analyzer on variable argument evaluation (`def f($x): .y; path(f(.x))`)
* fix raw input option `--raw-input` (`-R`) to keep carriage returns and support 64KiB+ lines

## [v0.12.8](https://github.com/itchyny/gojq/compare/v0.12.7..v0.12.8) (2022-06-01)
* implement `gojq.Compare` for comparing values in custom internal functions
* implement `gojq.TypeOf` for obtaining type name of values in custom internal functions
* implement `gojq.Preview` for previewing values for error messages of custom internal functions
* fix query lexer to parse string literals as JSON to support surrogate pairs (`"\ud83d\ude04"`)
* fix priority bug of declared and builtin functions (`def empty: .; null | select(.)`)
* fix string indexing by index out of bounds to emit `null` (`"abc" | .[3]`)
* fix array binding pattern not to match against strings (`"abc" as [$a] ?// $a | $a`)
* fix `sub` and `gsub` functions to emit results in the same order of jq
* fix `fromjson` to keep integer precision (`"10000000000000000" | fromjson + 1`)
* fix stream option to raise error against incomplete JSON input
* improve array updating index and string repetition to increase limitations
* improve `mktime` to support nanoseconds, just like `gmtime` and `now`
* improve query lexer to report unterminated string literals
* improve performance of string indexing and slicing by reducing allocations
* improve performance of object and array indexing, slicing, and iteration,
  by validating path values by comparing data addresses. This change improves jq
  compatibility of path value validation (`{} | {}.x = 0`, `[0] | [.[]][] = 1`).
  Also optimize constant indexing and slicing by specialized instruction
* improve performance of `add` (on array of strings), `flatten`, `min`, `max`,
  `sort`, `unique`, `join`, `to_entries`, `from_entries`, `indices`, `index`,
  `rindex`, `startswith`, `endswith`, `ltrimstr`, `rtrimstr`, `explode`,
  `capture`, `sub`, and `gsub` functions

## [v0.12.7](https://github.com/itchyny/gojq/compare/v0.12.6..v0.12.7) (2022-03-01)
* fix precedence of try expression against operators (`try 0 * error(0)`)
* fix iterator suffix with optional operator (`0 | .x[]?`)
* fix stream option with slurp option or `input`, `inputs` functions
* fix the command flag parser to support equal sign in short options with argument
* fix string conversion of query including empty strings in module and import metadata
* improve performance of `isempty` function

## [v0.12.6](https://github.com/itchyny/gojq/compare/v0.12.5..v0.12.6) (2021-12-01)
* implement options for consuming remaining arguments (`--args`, `--jsonargs`, `$ARGS.positional`)
* fix `delpaths` function with overlapped paths
* fix `--exit-status` flag with `halt`, `halt_error` functions
* fix `input_filename` function with null input option
* fix path value validation for `nan`
* fix crash on branch optimization (`if 0 then . else 0|0 end`)
* add validation on regular expression flags to reject unsupported ones
* improve performance of `range`, `join`, `flatten` functions
* improve constant value optimization for object with quoted keys
* remove dependency on forked `go-flags` package

## [v0.12.5](https://github.com/itchyny/gojq/compare/v0.12.4..v0.12.5) (2021-09-01)
* implement `input_filename` function for the command
* fix priority bug of declared functions and arguments (`def g: 1; def f(g): g; f(2)`)
* fix label handling to catch the correct break error (`first((0, 0) | first(0))`)
* fix `null|error` and `error(null)` to behave like `empty` (`null | [0, error, error(null), 1]`)
* fix integer division to keep precision when divisible (`1 / 1 * 1000000000000000000000`)
* fix modulo operator on negative number and large number (`(-1) % 10000000000`)
* fix combination of slurp (`--slurp`) and raw input option (`--raw-input`) to keep newlines
* change the default module paths to `~/.jq`, `$ORIGIN/../lib/gojq`, `$ORIGIN/lib`
  where `$ORIGIN` is the directory where the executable is located in
* improve command argument parser to recognize query with leading hyphen,
  allow hyphen for standard input, and force posix style on Windows
* improve `@base64d` to allow input without padding characters
* improve `fromdate`, `fromdateiso8601` to parse date time strings with timezone offset
* improve `halt_error` to print error values without prefix
* improve `sub`, `gsub` to allow the replacement string emitting multiple values
* improve encoding `\b` and `\f` in strings
* improve module loader for search path in query, and absolute path
* improve query lexer to support string literal including newlines
* improve performance of `index`, `rindex`, `indices`, `transpose`, and `walk` functions
* improve performance of value preview in errors and debug mode
* improve runtime performance including tail call optimization
* switch Docker base image to `distroless/static:debug`

## [v0.12.4](https://github.com/itchyny/gojq/compare/v0.12.3..v0.12.4) (2021-06-01)
* fix numeric conversion of large floating-point numbers in modulo operator
* implement a compiler option for adding custom iterator functions
* implement `gojq.NewIter` function for creating a new iterator from values
* implement `$ARGS.named` for listing command line variables
* remove `debug` and `stderr` functions from the library
* stop printing newlines on `stderr` function for jq compatibility

## [v0.12.3](https://github.com/itchyny/gojq/compare/v0.12.2..v0.12.3) (2021-04-01)
* fix array slicing with infinities and large numbers (`[0][-infinite:infinite], [0][:1e20]`)
* fix multiplying strings and modulo by infinities on MIPS 64 architecture
* fix git revision information in Docker images
* release multi-platform Docker images for ARM 64
* switch to `distroless` image for Docker base image

## [v0.12.2](https://github.com/itchyny/gojq/compare/v0.12.1..v0.12.2) (2021-03-01)
* implement `GOJQ_COLORS` environment variable to configure individual colors
* respect `--color-output` (`-C`) option even if `NO_COLOR` is set
* implement `gojq.ValueError` interface for custom internal functions
* fix crash on timestamps in YAML input
* fix calculation on `infinite` (`infinite-infinite | isnan`)
* fix comparison on `nan` (`nan < nan`)
* fix validation of `implode` (`[-1] | implode`)
* fix number normalization for custom JSON module loader
* print error line numbers on invalid JSON and YAML
* improve `strftime`, `strptime` for time zone offsets
* improve performance on reading a large JSON file given by command line argument
* improve performance and reduce memory allocation of the lexer, compiler and executor

## [v0.12.1](https://github.com/itchyny/gojq/compare/v0.12.0..v0.12.1) (2021-01-17)
* skip adding `$HOME/.jq` to module paths when `$HOME` is unset
* fix optional operator followed by division operator (`1?/1`)
* fix undefined format followed by optional operator (`@foo?`)
* fix parsing invalid consecutive dots while scanning a number (`0..[empty]`)
* fix panic on printing a query with `%#v`
* improve performance and reduce memory allocation of `query.String()`
* change all methods of `ModuleLoader` optional

## [v0.12.0](https://github.com/itchyny/gojq/compare/v0.11.2..v0.12.0) (2020-12-24)
* implement tab indentation option (`--tab`)
* implement a compiler option for adding custom internal functions
* implement `gojq.Marshal` function for jq-flavored encoding
* fix slurp option with JSON file arguments
* fix escaping characters in object keys
* fix normalizing negative `int64` to `int` on 32-bit architecture
* fix crash on continuing iteration after emitting an error
* `iter.Next()` does not normalize `NaN` and infinities anymore. Library users
  should take care of them. To handle them for encoding as JSON bytes, use
  `gojq.Marshal`. Also, `iter.Next()` does not clone values deeply anymore for
  performance reason. Users must not update the elements of the returned arrays
  and objects
* improve performance of outputting JSON values by about 3.5 times

## [v0.11.2](https://github.com/itchyny/gojq/compare/v0.11.1..v0.11.2) (2020-10-01)
* fix build for 32bit architecture
* release to [GitHub Container Registry](https://github.com/users/itchyny/packages/container/package/gojq)

## [v0.11.1](https://github.com/itchyny/gojq/compare/v0.11.0..v0.11.1) (2020-08-22)
* improve compatibility of `strftime`, `strptime` functions with jq
* fix YAML input with numbers in keys
* fix crash on multiplying a large number or `infinite` to a string
* fix crash on error while slicing a string (`""[:{}]`)
* fix crash on modulo by a number near 0.0 (`1 % 0.1`)
* include `CREDITS` file in artifacts

## [v0.11.0](https://github.com/itchyny/gojq/compare/v0.10.4..v0.11.0) (2020-07-08)
* improve parsing performance significantly
* rewrite the parser from `participle` library to `goyacc` generated parser
* release to [itchyny/gojq - Docker Hub](https://hub.docker.com/r/itchyny/gojq)
* support string interpolation for object pattern key

## [v0.10.4](https://github.com/itchyny/gojq/compare/v0.10.3..v0.10.4) (2020-06-30)
* implement variable in object key (`. as $x | { $x: 1 }`)
* fix modify operator (`|=`) with `try` `catch` expression
* fix optional operator (`?`) with alternative operator (`//`) in `map_values` function
* fix normalizing numeric types for library users
* export `gojq.NewModuleLoader` function for library users

## [v0.10.3](https://github.com/itchyny/gojq/compare/v0.10.2..v0.10.3) (2020-06-06)
* implement `add`, `unique_by`, `max_by`, `min_by`, `reverse` by internal
  functions for performance and reducing the binary size
* improve performance of `setpath`, `delpaths` functions
* fix assignment against nested slicing (`[1,2,3] | .[1:][:1] = [5]`)
* limit the array index of assignment operator
* optimize constant arrays and objects

## [v0.10.2](https://github.com/itchyny/gojq/compare/v0.10.1..v0.10.2) (2020-05-24)
* implement `sort_by`, `group_by`, `bsearch` by internal functions for performance
  and reducing the binary size
* fix object construction and constant object to allow trailing commas
* fix `tonumber` function to allow leading zeros
* minify the builtin functions to reduce the binary size

## [v0.10.1](https://github.com/itchyny/gojq/compare/v0.10.0..v0.10.1) (2020-04-24)
* fix array addition not to modify the left hand side

## [v0.10.0](https://github.com/itchyny/gojq/compare/v0.9.0..v0.10.0) (2020-04-02)
* implement various functions (`format`, `significand`, `modulemeta`, `halt_error`)
* implement `input`, `inputs` functions
* implement stream option (`--stream`)
* implement slicing with object (`.[{"start": 1, "end": 2}]`)
* implement `NO_COLOR` environment variable support
* implement `nul` output option (`-0`, `--nul-output`)
* implement exit status option (`-e`, `--exit-status`)
* implement `search` field of module meta object
* implement combination of `--yaml-input` and `--slurp`
* improve string token lexer and support nested string interpolation
* improve the exit code for jq compatibility
* improve default module search paths for jq compatibility
* improve documentation for the usage as a library
* change methods of `ModuleLoader` optional, implement `LoadModuleWithMeta` and `LoadJSONWithMeta`
* fix number normalization for JSON arguments (`--argjson`, `--slurpfile`)
* fix `0/0` and `infinite/infinite`
* fix `error` function against `null`

## [v0.9.0](https://github.com/itchyny/gojq/compare/v0.8.0..v0.9.0) (2020-03-15)
* implement various functions (`infinite`, `isfinite`, `isinfinite`, `finites`, `isnormal`, `normals`)
* implement environment variables loader as a compiler option
* implement `$NAME::NAME` syntax for imported JSON variable
* fix modify operator with empty against array (`[range(9)] | (.[] | select(. % 2 > 0)) |= empty`)
* fix variable and function scopes (`{ x: 1 } | . as $x | (.x as $x | $x) | ., $x`)
* fix path analyzer
* fix type check in `startswith` and `endswith`
* ignore type error of `ltrimstr` and `rtrimstr`
* remove nano seconds from `mktime` output
* trim newline at the end of error messages
* improve documents and examples

## [v0.8.0](https://github.com/itchyny/gojq/compare/v0.7.0..v0.8.0) (2020-03-02)
* implement format strings (`@text`, `@json`, `@html`, `@uri`, `@csv`, `@tsv`,
  `@sh`, `@base64`, `@base64d`)
* implement modules feature (`-L` option for directory to search modules from)
* implement options for binding variables from arguments (`--arg`, `--argjson`)
* implement options for binding variables from files (`--slurpfile`, `--rawfile`)
* implement an option for indentation count (`--indent`)
* fix `isnan` for `null`
* fix path analyzer
* fix error after optional operator (`1? | .x`)
* add `$ENV` variable
* add zsh completion file

## [v0.7.0](https://github.com/itchyny/gojq/compare/v0.6.0..v0.7.0) (2019-12-22)
* implement YAML input (`--yaml-input`) and output (`--yaml-output`)
* fix pipe in object value
* fix precedence of `if`, `try`, `reduce` and `foreach` expressions
* release from GitHub Actions

## [v0.6.0](https://github.com/itchyny/gojq/compare/v0.5.0..v0.6.0) (2019-08-26)
* implement arbitrary-precision integer calculation
* implement various functions (`repeat`, `pow10`, `nan`, `isnan`, `nearbyint`,
  `halt`, `INDEX`, `JOIN`, `IN`)
* implement long options (`--compact-output`, `--raw-output`, `--join-output`,
  `--color-output`, `--monochrome-output`, `--null-input`, `--raw-input`,
  `--slurp`, `--from-file`, `--version`)
* implement join output options (`-j`, `--join-output`)
* implement color/monochrome output options (`-C`, `--color-output`,
  `-M`, `--monochrome-output`)
* refactor builtin functions

## [v0.5.0](https://github.com/itchyny/gojq/compare/v0.4.0..v0.5.0) (2019-08-03)
* implement various functions (`with_entries`, `from_entries`, `leaf_paths`,
  `contains`, `inside`, `split`, `stream`, `fromstream`, `truncate_stream`,
  `bsearch`, `path`, `paths`, `map_values`, `del`, `delpaths`, `getpath`,
  `gmtime`, `localtime`, `mktime`, `strftime`, `strflocaltime`, `strptime`,
  `todate`, `fromdate`, `now`, `match`, `test`, `capture`, `scan`, `splits`,
  `sub`, `gsub`, `debug`, `stderr`)
* implement assignment operator (`=`)
* implement modify operator (`|=`)
* implement update operators (`+=`, `-=`, `*=`, `/=`, `%=`, `//=`)
* implement destructuring alternative operator (`?//`)
* allow function declaration inside query
* implement `-f` flag for loading query from file
* improve error message for parsing multiple line query

## [v0.4.0](https://github.com/itchyny/gojq/compare/v0.3.0..v0.4.0) (2019-07-20)
* improve performance significantly
* rewrite from recursive interpreter to stack machine based interpreter
* allow debugging with `make install-debug` and `export GOJQ_DEBUG=1`
* parse built-in functions and generate syntax trees before compilation
* optimize tail recursion
* fix behavior of optional operator
* fix scopes of arguments of recursive function call
* fix duplicate function argument names
* implement `setpath` function

## [v0.3.0](https://github.com/itchyny/gojq/compare/v0.2.0..v0.3.0) (2019-06-05)
* implement `reduce`, `foreach`, `label`, `break` syntax
* improve binding variable syntax to bind to an object or an array
* implement string interpolation
* implement object index by string (`."example"`)
* implement various functions (`add`, `flatten`, `min`, `min_by`, `max`,
  `max_by`, `sort`, `sort_by`, `group_by`, `unique`, `unique_by`, `tostring`,
  `indices`, `index`, `rindex`, `walk`, `transpose`, `first`, `last`, `nth`,
  `limit`, `all`, `any`, `isempty`, `error`, `builtins`, `env`)
* implement math functions (`sin`, `cos`, `tan`, `asin`, `acos`, `atan`,
  `sinh`, `cosh`, `tanh`, `asinh`, `acosh`, `atanh`, `floor`, `round`,
  `rint`, `ceil`, `trunc`, `fabs`, `sqrt`, `cbrt`, `exp`, `exp10`, `exp2`,
  `expm1`, `frexp`, `modf`, `log`, `log10`, `log1p`, `log2`, `logb`,
  `gamma`, `tgamma`, `lgamma`, `erf`, `erfc`, `j0`, `j1`, `y0`, `y1`,
  `atan2/2`, `copysign/2`, `drem/2`, `fdim/2`, `fmax/2`, `fmin/2`, `fmod/2`,
  `hypot/2`, `jn/2`, `ldexp/2`, `nextafter/2`, `nexttoward/2`, `remainder/2`,
  `scalb/2`, `scalbln/2`, `pow/2`, `yn/2`, `fma/3`)
* support object construction with variables
* support indexing against strings
* fix function evaluation for recursive call
* fix error handling of `//` operator
* fix string representation of NaN and Inf
* implement `-R` flag for reading input as raw strings
* implement `-c` flag for compact output
* implement `-n` flag for using null as input value
* implement `-r` flag for outputting raw string
* implement `-s` flag for reading all inputs into an array

## [v0.2.0](https://github.com/itchyny/gojq/compare/v0.1.0..v0.2.0) (2019-05-06)
* implement binding variable syntax (`... as $var`)
* implement `try` `catch` syntax
* implement alternative operator (`//`)
* implement various functions (`in`, `to_entries`, `startswith`, `endswith`,
  `ltrimstr`, `rtrimstr`, `combinations`, `ascii_downcase`, `ascii_upcase`,
  `tojson`, `fromjson`)
* support query for object indexing
* support object construction with variables
* support indexing against strings

## [v0.1.0](https://github.com/itchyny/gojq/compare/v0.0.1..v0.1.0) (2019-05-02)
* implement binary operators (`+`, `-`, `*`, `/`, `%`, `==`, `!=`, `>`, `<`,
  `>=`, `<=`, `and`, `or`)
* implement unary operators (`+`, `-`)
* implement booleans (`false`, `true`), `null`, number and string constant
  values
* implement `empty` value
* implement conditional syntax (`if` `then` `elif` `else` `end`)
* implement various functions (`length`, `utf8bytelength`, `not`, `keys`,
  `has`, `map`, `select`, `recurse`, `while`, `until`, `range`, `tonumber`,
  `type`, `arrays`, `objects`, `iterables`, `booleans`, `numbers`, `strings`,
  `nulls`, `values`, `scalars`, `reverse`, `explode`, `implode`, `join`)
* support function declaration
* support iterators in object keys
* support object construction shortcut
* support query in array indices
* support negative number indexing against arrays
* support json file name arguments

## [v0.0.1](https://github.com/itchyny/gojq/compare/0fa3241..v0.0.1) (2019-04-14)
* initial implementation
  0707010000078F000081A4000000000000000000000001645E367C000000BE000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/Dockerfile FROM golang:1.19 AS builder

WORKDIR /app
COPY . .
ENV CGO_ENABLED 0
RUN make build

FROM gcr.io/distroless/static:debug

COPY --from=builder /app/gojq /
ENTRYPOINT ["/gojq"]
CMD ["--help"]
  07070100000790000081A4000000000000000000000001645E367C00000437000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/LICENSE    The MIT License (MIT)

Copyright (c) 2019-2023 itchyny

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
 07070100000791000081A4000000000000000000000001645E367C00000A15000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/Makefile   BIN := gojq
VERSION := $$(make -s show-version)
VERSION_PATH := cli
CURRENT_REVISION = $(shell git rev-parse --short HEAD)
BUILD_LDFLAGS = "-s -w -X github.com/itchyny/$(BIN)/cli.revision=$(CURRENT_REVISION)"
GOBIN ?= $(shell go env GOPATH)/bin
SHELL := /bin/bash

.PHONY: all
all: build

.PHONY: build
build:
	go build -ldflags=$(BUILD_LDFLAGS) -o $(BIN) ./cmd/$(BIN)

.PHONY: build-dev
build-dev: parser.go builtin.go
	go build -ldflags=$(BUILD_LDFLAGS) -o $(BIN) ./cmd/$(BIN)

.PHONY: build-debug
build-debug: parser.go builtin.go
	go build -tags gojq_debug -ldflags=$(BUILD_LDFLAGS) -o $(BIN) ./cmd/$(BIN)

builtin.go: builtin.jq parser.go.y parser.go query.go operator.go _tools/*
	GOOS= GOARCH= go generate

.SUFFIXES:
parser.go: parser.go.y $(GOBIN)/goyacc
	goyacc -o $@ $<

$(GOBIN)/goyacc:
	@go install golang.org/x/tools/cmd/goyacc@latest

.PHONY: install
install:
	go install -ldflags=$(BUILD_LDFLAGS) ./cmd/$(BIN)

.PHONY: install-dev
install-dev: parser.go builtin.go
	go install -ldflags=$(BUILD_LDFLAGS) ./cmd/$(BIN)

.PHONY: install-debug
install-debug: parser.go builtin.go
	go install -tags gojq_debug -ldflags=$(BUILD_LDFLAGS) ./cmd/$(BIN)

.PHONY: show-version
show-version: $(GOBIN)/gobump
	@gobump show -r "$(VERSION_PATH)"

$(GOBIN)/gobump:
	@go install github.com/x-motemen/gobump/cmd/gobump@latest

.PHONY: cross
cross: $(GOBIN)/goxz CREDITS
	goxz -n $(BIN) -pv=v$(VERSION) -include _$(BIN) \
		-build-ldflags=$(BUILD_LDFLAGS) ./cmd/$(BIN)

$(GOBIN)/goxz:
	go install github.com/Songmu/goxz/cmd/goxz@latest

CREDITS: $(GOBIN)/gocredits go.sum
	go mod tidy
	gocredits -w .

$(GOBIN)/gocredits:
	go install github.com/Songmu/gocredits/cmd/gocredits@latest

.PHONY: test
test: build
	go test -v -race ./...

.PHONY: lint
lint: $(GOBIN)/staticcheck
	go vet ./...
	staticcheck -checks all -tags gojq_debug ./...

$(GOBIN)/staticcheck:
	go install honnef.co/go/tools/cmd/staticcheck@latest

.PHONY: check-tools
check-tools:
	go run _tools/print_builtin.go

.PHONY: clean
clean:
	rm -rf $(BIN) goxz CREDITS
	go clean

.PHONY: update
update: export GOPROXY=direct
update:
	go get -u -d ./... && go mod tidy
	go mod edit -modfile=go.dev.mod -droprequire=github.com/itchyny/{astgen,timefmt}-go
	go get -u -d -modfile=go.dev.mod github.com/itchyny/{astgen,timefmt}-go && go generate

.PHONY: bump
bump: $(GOBIN)/gobump
	test -z "$$(git status --porcelain || echo .)"
	test "$$(git branch --show-current)" = "main"
	@gobump up -w "$(VERSION_PATH)"
	git commit -am "bump up version to $(VERSION)"
	git tag "v$(VERSION)"
	git push --atomic origin main tag "v$(VERSION)"
   07070100000792000081A4000000000000000000000001645E367C000032E2000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/README.md  # gojq
[![CI Status](https://github.com/itchyny/gojq/workflows/CI/badge.svg)](https://github.com/itchyny/gojq/actions)
[![Go Report Card](https://goreportcard.com/badge/github.com/itchyny/gojq)](https://goreportcard.com/report/github.com/itchyny/gojq)
[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/itchyny/gojq/blob/main/LICENSE)
[![release](https://img.shields.io/github/release/itchyny/gojq/all.svg)](https://github.com/itchyny/gojq/releases)
[![pkg.go.dev](https://pkg.go.dev/badge/github.com/itchyny/gojq)](https://pkg.go.dev/github.com/itchyny/gojq)

### Pure Go implementation of [jq](https://github.com/stedolan/jq)
This is an implementation of jq command written in Go language.
You can also embed gojq as a library to your Go products.

## Usage
```sh
 $ echo '{"foo": 128}' | gojq '.foo'
128
 $ echo '{"a": {"b": 42}}' | gojq '.a.b'
42
 $ echo '{"id": "sample", "10": {"b": 42}}' | gojq '{(.id): .["10"].b}'
{
  "sample": 42
}
 $ echo '[{"id":1},{"id":2},{"id":3}]' | gojq '.[] | .id'
1
2
3
 $ echo '{"a":1,"b":2}' | gojq '.a += 1 | .b *= 2'
{
  "a": 2,
  "b": 4
}
 $ echo '{"a":1} [2] 3' | gojq '. as {$a} ?// [$a] ?// $a | $a'
1
2
3
 $ echo '{"foo": 4722366482869645213696}' | gojq .foo
4722366482869645213696  # keeps the precision of large numbers
 $ gojq -n 'def fact($n): if $n < 1 then 1 else $n * fact($n - 1) end; fact(50)'
30414093201713378043612608166064768844377641568960512000000000000 # arbitrary-precision integer calculation
```

Nice error messages.
```sh
 $ echo '[1,2,3]' | gojq '.foo & .bar'
gojq: invalid query: .foo & .bar
    .foo & .bar
         ^  unexpected token "&"
 $ echo '{"foo": { bar: [] } }' | gojq '.'
gojq: invalid json: <stdin>
    {"foo": { bar: [] } }
              ^  invalid character 'b' looking for beginning of object key string
```

## Installation
### Homebrew
```sh
brew install gojq
```

### Zero Install
```sh
0install add gojq https://apps.0install.net/utils/gojq.xml
```

### Build from source
```sh
go install github.com/itchyny/gojq/cmd/gojq@latest
```

### Docker
```sh
docker run -i --rm itchyny/gojq
docker run -i --rm ghcr.io/itchyny/gojq
```

## Difference to jq
- gojq is purely implemented with Go language and is completely portable. jq depends on the C standard library so the availability of math functions depends on the library. jq also depends on the regular expression library and it makes build scripts complex.
- gojq implements nice error messages for invalid query and JSON input. The error message of jq is sometimes difficult to tell where to fix the query.
- gojq does not keep the order of object keys. I understand this might cause problems for some scripts but basically, we should not rely on the order of object keys. Due to this limitation, gojq does not have `keys_unsorted` function and `--sort-keys` (`-S`) option. I would implement when ordered map is implemented in the standard library of Go but I'm less motivated.
- gojq supports arbitrary-precision integer calculation while jq does not; jq loses the precision of large integers when calculation is involved. Note that even with gojq, all mathematical functions, including `floor` and `round`, convert integers to floating-point numbers; only addition, subtraction, multiplication, modulo, and division operators (when divisible) keep the integer precision. To calculate floor division of integers without losing the precision, use `def idivide($n): (. - . % $n) / $n;`. To round down floating-point numbers to integers, use `def ifloor: floor | tostring | tonumber;`, but note that this function does not work with large floating-point numbers and also loses the precision of large integers.
- gojq fixes various bugs of jq. gojq correctly deletes elements of arrays by `|= empty` ([jq#2051](https://github.com/stedolan/jq/issues/2051)). gojq fixes `try`/`catch` handling ([jq#1859](https://github.com/stedolan/jq/issues/1859), [jq#1885](https://github.com/stedolan/jq/issues/1885), [jq#2140](https://github.com/stedolan/jq/issues/2140)). gojq fixes `nth/2` to output nothing when the count is equal to or larger than the stream size ([jq#1867](https://github.com/stedolan/jq/issues/1867)). gojq consistently counts by characters (not by bytes) in `index`, `rindex`, and `indices` functions; `"１２３４５" | .[index("３"):]` results in `"３４５"` ([jq#1430](https://github.com/stedolan/jq/issues/1430), [jq#1624](https://github.com/stedolan/jq/issues/1624)). gojq handles overlapping occurrence differently in `rindex` and `indices`; `"ababa" | [rindex("aba"), indices("aba")]` results in `[2,[0,2]]` ([jq#2433](https://github.com/stedolan/jq/issues/2433)). gojq supports string indexing; `"abcde"[2]` ([jq#1520](https://github.com/stedolan/jq/issues/1520)). gojq accepts indexing query `.e0` ([jq#1526](https://github.com/stedolan/jq/issues/1526), [jq#1651](https://github.com/stedolan/jq/issues/1651)), and allows `gsub` to handle patterns including `"^"` ([jq#2148](https://github.com/stedolan/jq/issues/2148)). gojq improves variable lexer to allow using keywords for variable names, especially in binding patterns, also disallows spaces after `$` ([jq#526](https://github.com/stedolan/jq/issues/526)). gojq fixes handling files with no newline characters at the end ([jq#2374](https://github.com/stedolan/jq/issues/2374)).
- gojq truncates down floating-point numbers on indexing (`[0] | .[0.5]` results in `0` not `null`), and slicing (`[0,1,2] | .[0.5:1.5]` results in `[0]` not `[0,1]`). gojq parses unary operators with higher precedence than variable binding (`[-1 as $x | 1,$x]` results in `[1,-1]` not `[-1,-1]`). gojq implements `@uri` to escape all the reserved characters defined in RFC 3986, Sec. 2.2 ([jq#1506](https://github.com/stedolan/jq/issues/1506)), and fixes `@base64d` to allow binary string as the decoded string ([jq#1931](https://github.com/stedolan/jq/issues/1931)). gojq improves time formatting and parsing; deals with `%f` in `strftime` and `strptime` ([jq#1409](https://github.com/stedolan/jq/issues/1409)), parses timezone offsets with `fromdate` and `fromdateiso8601` ([jq#1053](https://github.com/stedolan/jq/issues/1053)), supports timezone name/offset with `%Z`/`%z` in `strptime` ([jq#929](https://github.com/stedolan/jq/issues/929), [jq#2195](https://github.com/stedolan/jq/issues/2195)), and looks up correct timezone during daylight saving time on formatting with `%Z` ([jq#1912](https://github.com/stedolan/jq/issues/1912)). gojq supports nanoseconds in date and time functions.
- gojq does not support some functions intentionally; `get_jq_origin`, `get_prog_origin`, `get_search_list` (unstable, not listed in jq document), `input_line_number`, `$__loc__` (performance issue), `recurse_down` (deprecated in jq). gojq does not support some flags; `--ascii-output, -a` (performance issue), `--seq` (not used commonly), `--sort-keys, -S` (sorts by default because `map[string]any` does not keep the order), `--unbuffered` (unbuffered by default). gojq does not parse JSON extensions supported by jq; `NaN`, `Infinity`, and `[000]`. gojq normalizes floating-point numbers to fit to double-precision floating-point numbers. gojq does not support or behaves differently with some regular expression metacharacters and flags (regular expression engine differences). gojq does not support BOM (`encoding/json` does not support this). gojq disallows using keywords for function names (`def true: .; true` is a confusing query), and module name prefixes in function declarations (using module prefixes like `def m::f: .;` is undocumented).
- gojq supports reading from YAML input (`--yaml-input`) while jq does not. gojq also supports YAML output (`--yaml-output`).

### Color configuration
The gojq command automatically disables coloring output when the output is not a tty.
To force coloring output, specify `--color-output` (`-C`) option.
When [`NO_COLOR` environment variable](https://no-color.org/) is present or `--monochrome-output` (`-M`) option is specified, gojq disables coloring output.

Use `GOJQ_COLORS` environment variable to configure individual colors.
The variable is a colon-separated list of ANSI escape sequences of `null`, `false`, `true`, numbers, strings, object keys, arrays, and objects.
The default configuration is `90:33:33:36:32:34;1`.

## Usage as a library
You can use the gojq parser and interpreter from your Go products.

```go
package main

import (
	"fmt"
	"log"

	"github.com/itchyny/gojq"
)

func main() {
	query, err := gojq.Parse(".foo | ..")
	if err != nil {
		log.Fatalln(err)
	}
	input := map[string]any{"foo": []any{1, 2, 3}}
	iter := query.Run(input) // or query.RunWithContext
	for {
		v, ok := iter.Next()
		if !ok {
			break
		}
		if err, ok := v.(error); ok {
			log.Fatalln(err)
		}
		fmt.Printf("%#v\n", v)
	}
}
```

- Firstly, use [`gojq.Parse(string) (*Query, error)`](https://pkg.go.dev/github.com/itchyny/gojq#Parse) to get the query from a string.
- Secondly, get the result iterator
  - using [`query.Run`](https://pkg.go.dev/github.com/itchyny/gojq#Query.Run) or [`query.RunWithContext`](https://pkg.go.dev/github.com/itchyny/gojq#Query.RunWithContext)
  - or alternatively, compile the query using [`gojq.Compile`](https://pkg.go.dev/github.com/itchyny/gojq#Compile) and then [`code.Run`](https://pkg.go.dev/github.com/itchyny/gojq#Code.Run) or [`code.RunWithContext`](https://pkg.go.dev/github.com/itchyny/gojq#Code.RunWithContext). You can reuse the `*Code` against multiple inputs to avoid compilation of the same query. But for arguments of `code.Run`, do not give values sharing same data between multiple calls.
  - In either case, you cannot use custom type values as the query input. The type should be `[]any` for an array and `map[string]any` for a map (just like decoded to an `any` using the [encoding/json](https://golang.org/pkg/encoding/json/) package). You can't use `[]int` or `map[string]string`, for example. If you want to query your custom struct, marshal to JSON, unmarshal to `any` and use it as the query input.
- Thirdly, iterate through the results using [`iter.Next() (any, bool)`](https://pkg.go.dev/github.com/itchyny/gojq#Iter). The iterator can emit an error so make sure to handle it. The method returns `true` with results, and `false` when the iterator terminates.
  - The return type is not `(any, error)` because iterators can emit multiple errors and you can continue after an error. It is difficult for the iterator to tell the termination in this situation.
  - Note that the result iterator may emit infinite number of values; `repeat(0)` and `range(infinite)`. It may stuck with no output value; `def f: f; f`. Use `RunWithContext` when you want to limit the execution time.

[`gojq.Compile`](https://pkg.go.dev/github.com/itchyny/gojq#Compile) allows to configure the following compiler options.

- [`gojq.WithModuleLoader`](https://pkg.go.dev/github.com/itchyny/gojq#WithModuleLoader) allows to load modules. By default, the module feature is disabled. If you want to load modules from the file system, use [`gojq.NewModuleLoader`](https://pkg.go.dev/github.com/itchyny/gojq#NewModuleLoader).
- [`gojq.WithEnvironLoader`](https://pkg.go.dev/github.com/itchyny/gojq#WithEnvironLoader) allows to configure the environment variables referenced by `env` and `$ENV`. By default, OS environment variables are not accessible due to security reasons. You can use `gojq.WithEnvironLoader(os.Environ)` if you want.
- [`gojq.WithVariables`](https://pkg.go.dev/github.com/itchyny/gojq#WithVariables) allows to configure the variables which can be used in the query. Pass the values of the variables to [`code.Run`](https://pkg.go.dev/github.com/itchyny/gojq#Code.Run) in the same order.
- [`gojq.WithFunction`](https://pkg.go.dev/github.com/itchyny/gojq#WithFunction) allows to add a custom internal function. An internal function can return a single value (which can be an error) each invocation. To add a jq function (which may include a comma operator to emit multiple values, `empty` function, accept a filter for its argument, or call another built-in function), use `LoadInitModules` of the module loader.
- [`gojq.WithIterFunction`](https://pkg.go.dev/github.com/itchyny/gojq#WithIterFunction) allows to add a custom iterator function. An iterator function returns an iterator to emit multiple values. You cannot define both iterator and non-iterator functions of the same name (with possibly different arities). You can use [`gojq.NewIter`](https://pkg.go.dev/github.com/itchyny/gojq#NewIter) to convert values or an error to a [`gojq.Iter`](https://pkg.go.dev/github.com/itchyny/gojq#Iter).
- [`gojq.WithInputIter`](https://pkg.go.dev/github.com/itchyny/gojq#WithInputIter) allows to use `input` and `inputs` functions. By default, these functions are disabled.

## Bug Tracker
Report bug at [Issues・itchyny/gojq - GitHub](https://github.com/itchyny/gojq/issues).

## Author
itchyny (https://github.com/itchyny)

## License
This software is released under the MIT License, see LICENSE.
  07070100000793000081A4000000000000000000000001645E367C00000A0E000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/_gojq  #compdef gojq

_gojq()
{
  _arguments -s -S \
    '(-r --raw-output -j --join-output -0 --nul-output)'{-r,--raw-output}'[output raw strings]' \
    '(-r --raw-output -j --join-output -0 --nul-output)'{-j,--join-output}'[output without newlines]' \
    '(-r --raw-output -j --join-output -0 --nul-output)'{-0,--nul-output}'[output with NUL character]' \
    '(-c --compact-output --indent --tab --yaml-output)'{-c,--compact-output}'[output without pretty-printing]' \
    '(-c --compact-output          --tab --yaml-output)--indent=[number of spaces for indentation]:indentation count:(2 4 8)' \
    '(-c --compact-output --indent       --yaml-output)--tab[use tabs for indentation]' \
    '(-c --compact-output --indent --tab              )--yaml-output[output in YAML format]' \
    '(-C --color-output -M --monochrome-output)'{-C,--color-output}'[output with colors even if piped]' \
    '(-C --color-output -M --monochrome-output)'{-M,--monochrome-output}'[output without colors]' \
    '(-n --null-input)'{-n,--null-input}'[use null as input value]' \
    '(-R --raw-input --stream --yaml-input)'{-R,--raw-input}'[read input as raw strings]' \
    '(-R --raw-input          --yaml-input)--stream[parse input in stream fashion]' \
    '(-R --raw-input --stream             )--yaml-input[read input as YAML format]' \
    '(-s --slurp)'{-s,--slurp}'[read all inputs into an array]' \
    '(-f --from-file 1)'{-f,--from-file}='[load query from file]:filename of jq query:_files' \
    '*-L=[directory to search modules from]:module directory:_directories' \
    '*--arg[set a string value to a variable]:variable name: :string value' \
    '*--argjson[set a JSON value to a variable]:variable name: :JSON value' \
    '*--slurpfile[set the JSON contents of a file to a variable]:variable name: :JSON file:_files' \
    '*--rawfile[set the contents of a file to a variable]:variable name: :file:_files' \
    '*--args[consume remaining arguments as positional string values]' \
    '*--jsonargs[consume remaining arguments as positional JSON values]' \
    '(-e --exit-status)'{-e,--exit-status}'[exit 1 when the last value is false or null]' \
    '(- 1 *)'{-v,--version}'[display version information]' \
    '(- 1 *)'{-h,--help}'[display help information]' \
    '1: :_guard "^-([[:alpha:]0]#|-*)" "jq query"' \
    '*: :_gojq_args'
}

_gojq_args() {
  if (($words[(I)--args] > $words[(I)--jsonargs])); then
    _message 'string value'
  elif (($words[(I)--args] < $words[(I)--jsonargs])); then
    _message 'JSON value'
  else
    _arguments '*:input file:_files'
  fi
}
  07070100000794000081A4000000000000000000000001645E367C00008733000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/builtin.go // Code generated by _tools/gen_builtin.go; DO NOT EDIT.

package gojq

func init() {
	builtinFuncDefs = map[string][]*FuncDef{
		"IN": []*FuncDef{&FuncDef{Name: "IN", Args: []string{"s"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "any", Args: []*Query{&Query{Left: &Query{Func: "s"}, Op: OpEq, Right: &Query{Func: "."}}, &Query{Func: "."}}}}}}, &FuncDef{Name: "IN", Args: []string{"src", "s"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "any", Args: []*Query{&Query{Left: &Query{Func: "src"}, Op: OpEq, Right: &Query{Func: "s"}}, &Query{Func: "."}}}}}}},
		"INDEX": []*FuncDef{&FuncDef{Name: "INDEX", Args: []string{"stream", "idx_expr"}, Body: &Query{Term: &Term{Type: TermTypeReduce, Reduce: &Reduce{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "stream"}}, Pattern: &Pattern{Name: "$row"}, Start: &Query{Term: &Term{Type: TermTypeObject, Object: &Object{}}}, Update: &Query{Left: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Start: &Query{Left: &Query{Func: "$row"}, Op: OpPipe, Right: &Query{Left: &Query{Func: "idx_expr"}, Op: OpPipe, Right: &Query{Func: "tostring"}}}}}}, Op: OpAssign, Right: &Query{Func: "$row"}}}}}}, &FuncDef{Name: "INDEX", Args: []string{"idx_expr"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "INDEX", Args: []*Query{&Query{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{&Suffix{Iter: true}}}}, &Query{Func: "idx_expr"}}}}}}},
		"JOIN": []*FuncDef{&FuncDef{Name: "JOIN", Args: []string{"$idx", "idx_expr"}, Body: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{&Suffix{Iter: true}}}}, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Left: &Query{Func: "."}, Op: OpComma, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$idx"}, SuffixList: []*Suffix{&Suffix{Index: &Index{Start: &Query{Func: "idx_expr"}}}}}}}}}}}}}}}, &FuncDef{Name: "JOIN", Args: []string{"$idx", "stream", "idx_expr"}, Body: &Query{Left: &Query{Func: "stream"}, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Left: &Query{Func: "."}, Op: OpComma, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$idx"}, SuffixList: []*Suffix{&Suffix{Index: &Index{Start: &Query{Func: "idx_expr"}}}}}}}}}}}}, &FuncDef{Name: "JOIN", Args: []string{"$idx", "stream", "idx_expr", "join_expr"}, Body: &Query{Left: &Query{Func: "stream"}, Op: OpPipe, Right: &Query{Left: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Left: &Query{Func: "."}, Op: OpComma, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$idx"}, SuffixList: []*Suffix{&Suffix{Index: &Index{Start: &Query{Func: "idx_expr"}}}}}}}}}}, Op: OpPipe, Right: &Query{Func: "join_expr"}}}}},
		"_assign": []*FuncDef{},
		"_modify": []*FuncDef{},
		"all": []*FuncDef{&FuncDef{Name: "all", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "all", Args: []*Query{&Query{Func: "."}}}}}}, &FuncDef{Name: "all", Args: []string{"y"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "all", Args: []*Query{&Query{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{&Suffix{Iter: true}}}}, &Query{Func: "y"}}}}}}, &FuncDef{Name: "all", Args: []string{"g", "y"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "isempty", Args: []*Query{&Query{Left: &Query{Func: "g"}, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{&Query{Left: &Query{Func: "y"}, Op: OpPipe, Right: &Query{Func: "not"}}}}}}}}}}}}},
		"any": []*FuncDef{&FuncDef{Name: "any", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "any", Args: []*Query{&Query{Func: "."}}}}}}, &FuncDef{Name: "any", Args: []string{"y"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "any", Args: []*Query{&Query{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{&Suffix{Iter: true}}}}, &Query{Func: "y"}}}}}}, &FuncDef{Name: "any", Args: []string{"g", "y"}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "isempty", Args: []*Query{&Query{Left: &Query{Func: "g"}, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{&Query{Func: "y"}}}}}}}}}}, Op: OpPipe, Right: &Query{Func: "not"}}}},
		"arrays": []*FuncDef{&FuncDef{Name: "arrays", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{&Query{Left: &Query{Func: "type"}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "array"}}}}}}}}}},
		"booleans": []*FuncDef{&FuncDef{Name: "booleans", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{&Query{Left: &Query{Func: "type"}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "boolean"}}}}}}}}}},
		"capture": []*FuncDef{&FuncDef{Name: "capture", Args: []string{"$re"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "capture", Args: []*Query{&Query{Func: "$re"}, &Query{Func: "null"}}}}}}, &FuncDef{Name: "capture", Args: []string{"$re", "$flags"}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "match", Args: []*Query{&Query{Func: "$re"}, &Query{Func: "$flags"}}}}}, Op: OpPipe, Right: &Query{Func: "_capture"}}}},
		"combinations": []*FuncDef{&FuncDef{Name: "combinations", Body: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Func: "length"}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}, Then: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{}}}, Else: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Start: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}, SuffixList: []*Suffix{&Suffix{Iter: true}, &Suffix{Bind: &Bind{Patterns: []*Pattern{&Pattern{Name: "$x"}}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Func: "$x"}}}}, Op: OpAdd, Right: &Query{Term: &Term{Type: TermTypeQuery, Query: &Query{Left: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Start: &Query{Term: &Term{Type: TermTypeNumber, Number: "1"}}, IsSlice: true}}}, Op: OpPipe, Right: &Query{Func: "combinations"}}}}}}}}}}}}}}, &FuncDef{Name: "combinations", Args: []string{"n"}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "limit", Args: []*Query{&Query{Func: "n"}, &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "repeat", Args: []*Query{&Query{Func: "."}}}}}}}}}}}}, Op: OpPipe, Right: &Query{Func: "combinations"}}}},
		"del": []*FuncDef{&FuncDef{Name: "del", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "delpaths", Args: []*Query{&Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "path", Args: []*Query{&Query{Func: "f"}}}}}}}}}}}}}},
		"finites": []*FuncDef{&FuncDef{Name: "finites", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{&Query{Func: "isfinite"}}}}}}},
		"first": []*FuncDef{&FuncDef{Name: "first", Body: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Start: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}}}}, &FuncDef{Name: "first", Args: []string{"g"}, Body: &Query{Term: &Term{Type: TermTypeLabel, Label: &Label{Ident: "$out", Body: &Query{Left: &Query{Func: "g"}, Op: OpPipe, Right: &Query{Left: &Query{Func: "."}, Op: OpComma, Right: &Query{Term: &Term{Type: TermTypeBreak, Break: "$out"}}}}}}}}},
		"fromdate": []*FuncDef{&FuncDef{Name: "fromdate", Body: &Query{Func: "fromdateiso8601"}}},
		"fromdateiso8601": []*FuncDef{&FuncDef{Name: "fromdateiso8601", Body: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "strptime", Args: []*Query{&Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "%Y-%m-%dT%H:%M:%S%z"}}}}}}}, Op: OpPipe, Right: &Query{Func: "mktime"}}}},
		"fromstream": []*FuncDef{&FuncDef{Name: "fromstream", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeObject, Object: &Object{KeyVals: []*ObjectKeyVal{&ObjectKeyVal{Key: "x", Val: &ObjectVal{Queries: []*Query{&Query{Func: "null"}}}}, &ObjectKeyVal{Key: "e", Val: &ObjectVal{Queries: []*Query{&Query{Func: "false"}}}}}}, SuffixList: []*Suffix{&Suffix{Bind: &Bind{Patterns: []*Pattern{&Pattern{Name: "$init"}}, Body: &Query{Term: &Term{Type: TermTypeForeach, Foreach: &Foreach{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "f"}}, Pattern: &Pattern{Name: "$i"}, Start: &Query{Func: "$init"}, Update: &Query{Left: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "e"}}}, Then: &Query{Func: "$init"}}}}, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Func: "$i"}, Op: OpPipe, Right: &Query{Left: &Query{Func: "length"}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "2"}}}}, Then: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "setpath", Args: []*Query{&Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "e"}}}}}}, &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$i"}, SuffixList: []*Suffix{&Suffix{Index: &Index{Start: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}}}}}, Op: OpPipe, Right: &Query{Left: &Query{Func: "length"}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}}}}}}, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "setpath", Args: []*Query{&Query{Left: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "x"}}}}}}, Op: OpAdd, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$i"}, SuffixList: []*Suffix{&Suffix{Index: &Index{Start: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}}}}}}, &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$i"}, SuffixList: []*Suffix{&Suffix{Index: &Index{Start: &Query{Term: &Term{Type: TermTypeNumber, Number: "1"}}}}}}}}}}}}, Else: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "setpath", Args: []*Query{&Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "e"}}}}}}, &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$i"}, SuffixList: []*Suffix{&Suffix{Index: &Index{Start: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}}}}}, Op: OpPipe, Right: &Query{Left: &Query{Func: "length"}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "1"}}}}}}}}}}}}, Extract: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "e"}}}, Then: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "x"}}}, Else: &Query{Func: "empty"}}}}}}}}}}}}}},
		"group_by": []*FuncDef{&FuncDef{Name: "group_by", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_group_by", Args: []*Query{&Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "map", Args: []*Query{&Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Func: "f"}}}}}}}}}}}}}},
		"gsub": []*FuncDef{&FuncDef{Name: "gsub", Args: []string{"$re", "str"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "sub", Args: []*Query{&Query{Func: "$re"}, &Query{Func: "str"}, &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "g"}}}}}}}}, &FuncDef{Name: "gsub", Args: []string{"$re", "str", "$flags"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "sub", Args: []*Query{&Query{Func: "$re"}, &Query{Func: "str"}, &Query{Left: &Query{Func: "$flags"}, Op: OpAdd, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "g"}}}}}}}}}},
		"in": []*FuncDef{&FuncDef{Name: "in", Args: []string{"xs"}, Body: &Query{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{&Suffix{Bind: &Bind{Patterns: []*Pattern{&Pattern{Name: "$x"}}, Body: &Query{Left: &Query{Func: "xs"}, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "has", Args: []*Query{&Query{Func: "$x"}}}}}}}}}}}}},
		"inputs": []*FuncDef{&FuncDef{Name: "inputs", Body: &Query{Term: &Term{Type: TermTypeTry, Try: &Try{Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "repeat", Args: []*Query{&Query{Func: "input"}}}}}, Catch: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Func: "."}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "break"}}}}, Then: &Query{Func: "empty"}, Else: &Query{Func: "error"}}}}}}}}},
		"inside": []*FuncDef{&FuncDef{Name: "inside", Args: []string{"xs"}, Body: &Query{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{&Suffix{Bind: &Bind{Patterns: []*Pattern{&Pattern{Name: "$x"}}, Body: &Query{Left: &Query{Func: "xs"}, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "contains", Args: []*Query{&Query{Func: "$x"}}}}}}}}}}}}},
		"isempty": []*FuncDef{&FuncDef{Name: "isempty", Args: []string{"g"}, Body: &Query{Term: &Term{Type: TermTypeLabel, Label: &Label{Ident: "$out", Body: &Query{Left: &Query{Term: &Term{Type: TermTypeQuery, Query: &Query{Left: &Query{Func: "g"}, Op: OpPipe, Right: &Query{Left: &Query{Func: "false"}, Op: OpComma, Right: &Query{Term: &Term{Type: TermTypeBreak, Break: "$out"}}}}}}, Op: OpComma, Right: &Query{Func: "true"}}}}}}},
		"iterables": []*FuncDef{&FuncDef{Name: "iterables", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{&Query{Left: &Query{Func: "type"}, Op: OpPipe, Right: &Query{Left: &Query{Left: &Query{Func: "."}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "array"}}}}, Op: OpOr, Right: &Query{Left: &Query{Func: "."}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "object"}}}}}}}}}}}},
		"last": []*FuncDef{&FuncDef{Name: "last", Body: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Start: &Query{Term: &Term{Type: TermTypeUnary, Unary: &Unary{Op: OpSub, Term: &Term{Type: TermTypeNumber, Number: "1"}}}}}}}}, &FuncDef{Name: "last", Args: []string{"g"}, Body: &Query{Term: &Term{Type: TermTypeReduce, Reduce: &Reduce{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "g"}}, Pattern: &Pattern{Name: "$item"}, Start: &Query{Func: "null"}, Update: &Query{Func: "$item"}}}}}},
		"leaf_paths": []*FuncDef{&FuncDef{Name: "leaf_paths", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "paths", Args: []*Query{&Query{Func: "scalars"}}}}}}},
		"limit": []*FuncDef{&FuncDef{Name: "limit", Args: []string{"$n", "g"}, Body: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Func: "$n"}, Op: OpGt, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}, Then: &Query{Term: &Term{Type: TermTypeLabel, Label: &Label{Ident: "$out", Body: &Query{Term: &Term{Type: TermTypeForeach, Foreach: &Foreach{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "g"}}, Pattern: &Pattern{Name: "$item"}, Start: &Query{Func: "$n"}, Update: &Query{Left: &Query{Func: "."}, Op: OpSub, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "1"}}}, Extract: &Query{Left: &Query{Func: "$item"}, Op: OpComma, Right: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Func: "."}, Op: OpLe, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}, Then: &Query{Term: &Term{Type: TermTypeBreak, Break: "$out"}}, Else: &Query{Func: "empty"}}}}}}}}}}}, Elif: []*IfElif{&IfElif{Cond: &Query{Left: &Query{Func: "$n"}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}, Then: &Query{Func: "empty"}}}, Else: &Query{Func: "g"}}}}}},
		"map": []*FuncDef{&FuncDef{Name: "map", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{&Suffix{Iter: true}}}}, Op: OpPipe, Right: &Query{Func: "f"}}}}}}},
		"map_values": []*FuncDef{&FuncDef{Name: "map_values", Args: []string{"f"}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{&Suffix{Iter: true}}}}, Op: OpModify, Right: &Query{Func: "f"}}}},
		"match": []*FuncDef{&FuncDef{Name: "match", Args: []string{"$re"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "match", Args: []*Query{&Query{Func: "$re"}, &Query{Func: "null"}}}}}}, &FuncDef{Name: "match", Args: []string{"$re", "$flags"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_match", Args: []*Query{&Query{Func: "$re"}, &Query{Func: "$flags"}, &Query{Func: "false"}}}, SuffixList: []*Suffix{&Suffix{Iter: true}}}}}},
		"max_by": []*FuncDef{&FuncDef{Name: "max_by", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_max_by", Args: []*Query{&Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "map", Args: []*Query{&Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Func: "f"}}}}}}}}}}}}}},
		"min_by": []*FuncDef{&FuncDef{Name: "min_by", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_min_by", Args: []*Query{&Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "map", Args: []*Query{&Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Func: "f"}}}}}}}}}}}}}},
		"normals": []*FuncDef{&FuncDef{Name: "normals", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{&Query{Func: "isnormal"}}}}}}},
		"not": []*FuncDef{&FuncDef{Name: "not", Body: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Func: "."}, Then: &Query{Func: "false"}, Else: &Query{Func: "true"}}}}}},
		"nth": []*FuncDef{&FuncDef{Name: "nth", Args: []string{"$n"}, Body: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Start: &Query{Func: "$n"}}}}}, &FuncDef{Name: "nth", Args: []string{"$n", "g"}, Body: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Func: "$n"}, Op: OpLt, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}, Then: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "error", Args: []*Query{&Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "nth doesn't support negative indices"}}}}}}}, Else: &Query{Term: &Term{Type: TermTypeLabel, Label: &Label{Ident: "$out", Body: &Query{Term: &Term{Type: TermTypeForeach, Foreach: &Foreach{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "g"}}, Pattern: &Pattern{Name: "$item"}, Start: &Query{Left: &Query{Func: "$n"}, Op: OpAdd, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "1"}}}, Update: &Query{Left: &Query{Func: "."}, Op: OpSub, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "1"}}}, Extract: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Func: "."}, Op: OpLe, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}, Then: &Query{Left: &Query{Func: "$item"}, Op: OpComma, Right: &Query{Term: &Term{Type: TermTypeBreak, Break: "$out"}}}, Else: &Query{Func: "empty"}}}}}}}}}}}}}}},
		"nulls": []*FuncDef{&FuncDef{Name: "nulls", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{&Query{Left: &Query{Func: "."}, Op: OpEq, Right: &Query{Func: "null"}}}}}}}},
		"numbers": []*FuncDef{&FuncDef{Name: "numbers", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{&Query{Left: &Query{Func: "type"}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "number"}}}}}}}}}},
		"objects": []*FuncDef{&FuncDef{Name: "objects", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{&Query{Left: &Query{Func: "type"}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "object"}}}}}}}}}},
		"paths": []*FuncDef{&FuncDef{Name: "paths", Body: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "path", Args: []*Query{&Query{Func: ".."}}}}}, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{&Query{Left: &Query{Func: "."}, Op: OpNe, Right: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{}}}}}}}}}}, &FuncDef{Name: "paths", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "paths"}, SuffixList: []*Suffix{&Suffix{Bind: &Bind{Patterns: []*Pattern{&Pattern{Name: "$p"}}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{&Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "getpath", Args: []*Query{&Query{Func: "$p"}}}}}, Op: OpPipe, Right: &Query{Func: "f"}}}}}}, Op: OpPipe, Right: &Query{Func: "$p"}}}}}}}}},
		"range": []*FuncDef{&FuncDef{Name: "range", Args: []string{"$end"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_range", Args: []*Query{&Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}, &Query{Func: "$end"}, &Query{Term: &Term{Type: TermTypeNumber, Number: "1"}}}}}}}, &FuncDef{Name: "range", Args: []string{"$start", "$end"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_range", Args: []*Query{&Query{Func: "$start"}, &Query{Func: "$end"}, &Query{Term: &Term{Type: TermTypeNumber, Number: "1"}}}}}}}, &FuncDef{Name: "range", Args: []string{"$start", "$end", "$step"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_range", Args: []*Query{&Query{Func: "$start"}, &Query{Func: "$end"}, &Query{Func: "$step"}}}}}}},
		"recurse": []*FuncDef{&FuncDef{Name: "recurse", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "recurse", Args: []*Query{&Query{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{&Suffix{Iter: true}, &Suffix{Optional: true}}}}}}}}}, &FuncDef{Name: "recurse", Args: []string{"f"}, Body: &Query{FuncDefs: []*FuncDef{&FuncDef{Name: "r", Body: &Query{Left: &Query{Func: "."}, Op: OpComma, Right: &Query{Term: &Term{Type: TermTypeQuery, Query: &Query{Left: &Query{Func: "f"}, Op: OpPipe, Right: &Query{Func: "r"}}}}}}}, Func: "r"}}, &FuncDef{Name: "recurse", Args: []string{"f", "cond"}, Body: &Query{FuncDefs: []*FuncDef{&FuncDef{Name: "r", Body: &Query{Left: &Query{Func: "."}, Op: OpComma, Right: &Query{Term: &Term{Type: TermTypeQuery, Query: &Query{Left: &Query{Func: "f"}, Op: OpPipe, Right: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{&Query{Func: "cond"}}}}}, Op: OpPipe, Right: &Query{Func: "r"}}}}}}}}, Func: "r"}}},
		"repeat": []*FuncDef{&FuncDef{Name: "repeat", Args: []string{"f"}, Body: &Query{FuncDefs: []*FuncDef{&FuncDef{Name: "_repeat", Body: &Query{Left: &Query{Func: "f"}, Op: OpComma, Right: &Query{Func: "_repeat"}}}}, Func: "_repeat"}}},
		"scalars": []*FuncDef{&FuncDef{Name: "scalars", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{&Query{Left: &Query{Func: "type"}, Op: OpPipe, Right: &Query{Left: &Query{Left: &Query{Func: "."}, Op: OpNe, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "array"}}}}, Op: OpAnd, Right: &Query{Left: &Query{Func: "."}, Op: OpNe, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "object"}}}}}}}}}}}},
		"scan": []*FuncDef{&FuncDef{Name: "scan", Args: []string{"$re"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "scan", Args: []*Query{&Query{Func: "$re"}, &Query{Func: "null"}}}}}}, &FuncDef{Name: "scan", Args: []string{"$re", "$flags"}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "match", Args: []*Query{&Query{Func: "$re"}, &Query{Left: &Query{Func: "$flags"}, Op: OpAdd, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "g"}}}}}}}}, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "captures"}}}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{}}}}, Then: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "string"}}}, Else: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "captures"}, SuffixList: []*Suffix{&Suffix{Iter: true}, &Suffix{Index: &Index{Name: "string"}}}}}}}}}}}}}},
		"select": []*FuncDef{&FuncDef{Name: "select", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Func: "f"}, Then: &Query{Func: "."}, Else: &Query{Func: "empty"}}}}}},
		"sort_by": []*FuncDef{&FuncDef{Name: "sort_by", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_sort_by", Args: []*Query{&Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "map", Args: []*Query{&Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Func: "f"}}}}}}}}}}}}}},
		"splits": []*FuncDef{&FuncDef{Name: "splits", Args: []string{"$re"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "splits", Args: []*Query{&Query{Func: "$re"}, &Query{Func: "null"}}}}}}, &FuncDef{Name: "splits", Args: []string{"$re", "$flags"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "split", Args: []*Query{&Query{Func: "$re"}, &Query{Func: "$flags"}}}, SuffixList: []*Suffix{&Suffix{Iter: true}}}}}},
		"strings": []*FuncDef{&FuncDef{Name: "strings", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{&Query{Left: &Query{Func: "type"}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "string"}}}}}}}}}},
		"sub": []*FuncDef{&FuncDef{Name: "sub", Args: []string{"$re", "str"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "sub", Args: []*Query{&Query{Func: "$re"}, &Query{Func: "str"}, &Query{Func: "null"}}}}}}, &FuncDef{Name: "sub", Args: []string{"$re", "str", "$flags"}, Body: &Query{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{&Suffix{Bind: &Bind{Patterns: []*Pattern{&Pattern{Name: "$str"}}, Body: &Query{FuncDefs: []*FuncDef{&FuncDef{Name: "_sub", Body: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "matches"}}}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{}}}}, Then: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$str"}, SuffixList: []*Suffix{&Suffix{Index: &Index{End: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "offset"}}}, IsSlice: true}}}}}, Op: OpAdd, Right: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "string"}}}}, Else: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "matches"}, SuffixList: []*Suffix{&Suffix{Index: &Index{Start: &Query{Term: &Term{Type: TermTypeUnary, Unary: &Unary{Op: OpSub, Term: &Term{Type: TermTypeNumber, Number: "1"}}}}}}, &Suffix{Bind: &Bind{Patterns: []*Pattern{&Pattern{Name: "$r"}}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeObject, Object: &Object{KeyVals: []*ObjectKeyVal{&ObjectKeyVal{Key: "string", Val: &ObjectVal{Queries: []*Query{&Query{Term: &Term{Type: TermTypeQuery, Query: &Query{Left: &Query{Left: &Query{Term: &Term{Type: TermTypeQuery, Query: &Query{Left: &Query{Func: "$r"}, Op: OpPipe, Right: &Query{Left: &Query{Func: "_capture"}, Op: OpPipe, Right: &Query{Func: "str"}}}}}, Op: OpAdd, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$str"}, SuffixList: []*Suffix{&Suffix{Index: &Index{Start: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$r"}, SuffixList: []*Suffix{&Suffix{Index: &Index{Name: "offset"}}}}}, Op: OpAdd, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$r"}, SuffixList: []*Suffix{&Suffix{Index: &Index{Name: "length"}}}}}}, End: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "offset"}}}, IsSlice: true}}}}}}, Op: OpAdd, Right: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "string"}}}}}}}}}, &ObjectKeyVal{Key: "offset", Val: &ObjectVal{Queries: []*Query{&Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$r"}, SuffixList: []*Suffix{&Suffix{Index: &Index{Name: "offset"}}}}}}}}, &ObjectKeyVal{Key: "matches", Val: &ObjectVal{Queries: []*Query{&Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "matches"}, SuffixList: []*Suffix{&Suffix{Index: &Index{End: &Query{Term: &Term{Type: TermTypeUnary, Unary: &Unary{Op: OpSub, Term: &Term{Type: TermTypeNumber, Number: "1"}}}}, IsSlice: true}}}}}}}}}}}}, Op: OpPipe, Right: &Query{Func: "_sub"}}}}}}}}}}}}, Left: &Query{Term: &Term{Type: TermTypeObject, Object: &Object{KeyVals: []*ObjectKeyVal{&ObjectKeyVal{Key: "string", Val: &ObjectVal{Queries: []*Query{&Query{Term: &Term{Type: TermTypeString, Str: &String{}}}}}}, &ObjectKeyVal{Key: "matches", Val: &ObjectVal{Queries: []*Query{&Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "match", Args: []*Query{&Query{Func: "$re"}, &Query{Func: "$flags"}}}}}}}}}}}}}}}, Op: OpPipe, Right: &Query{Func: "_sub"}}}}}}}}},
		"test": []*FuncDef{&FuncDef{Name: "test", Args: []string{"$re"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "test", Args: []*Query{&Query{Func: "$re"}, &Query{Func: "null"}}}}}}, &FuncDef{Name: "test", Args: []string{"$re", "$flags"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_match", Args: []*Query{&Query{Func: "$re"}, &Query{Func: "$flags"}, &Query{Func: "true"}}}}}}},
		"todate": []*FuncDef{&FuncDef{Name: "todate", Body: &Query{Func: "todateiso8601"}}},
		"todateiso8601": []*FuncDef{&FuncDef{Name: "todateiso8601", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "strftime", Args: []*Query{&Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "%Y-%m-%dT%H:%M:%SZ"}}}}}}}}},
		"tostream": []*FuncDef{&FuncDef{Name: "tostream", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "path", Args: []*Query{&Query{FuncDefs: []*FuncDef{&FuncDef{Name: "r", Body: &Query{Left: &Query{Term: &Term{Type: TermTypeQuery, Query: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{&Suffix{Iter: true}, &Suffix{Optional: true}}}}, Op: OpPipe, Right: &Query{Func: "r"}}}}, Op: OpComma, Right: &Query{Func: "."}}}}, Func: "r"}}}, SuffixList: []*Suffix{&Suffix{Bind: &Bind{Patterns: []*Pattern{&Pattern{Name: "$p"}}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "getpath", Args: []*Query{&Query{Func: "$p"}}}}}, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeReduce, Reduce: &Reduce{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "path", Args: []*Query{&Query{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{&Suffix{Iter: true}, &Suffix{Optional: true}}}}}}}, Pattern: &Pattern{Name: "$q"}, Start: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Left: &Query{Func: "$p"}, Op: OpComma, Right: &Query{Func: "."}}}}}, Update: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Left: &Query{Func: "$p"}, Op: OpAdd, Right: &Query{Func: "$q"}}}}}}}}}}}}}}}},
		"truncate_stream": []*FuncDef{&FuncDef{Name: "truncate_stream", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{&Suffix{Bind: &Bind{Patterns: []*Pattern{&Pattern{Name: "$n"}}, Body: &Query{Left: &Query{Func: "null"}, Op: OpPipe, Right: &Query{Left: &Query{Func: "f"}, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Start: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}}}, Op: OpPipe, Right: &Query{Left: &Query{Func: "length"}, Op: OpGt, Right: &Query{Func: "$n"}}}, Then: &Query{Left: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Start: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}}}, Op: OpModify, Right: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Start: &Query{Func: "$n"}, IsSlice: true}}}}, Else: &Query{Func: "empty"}}}}}}}}}}}}},
		"unique_by": []*FuncDef{&FuncDef{Name: "unique_by", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_unique_by", Args: []*Query{&Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "map", Args: []*Query{&Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Func: "f"}}}}}}}}}}}}}},
		"until": []*FuncDef{&FuncDef{Name: "until", Args: []string{"cond", "next"}, Body: &Query{FuncDefs: []*FuncDef{&FuncDef{Name: "_until", Body: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Func: "cond"}, Then: &Query{Func: "."}, Else: &Query{Left: &Query{Func: "next"}, Op: OpPipe, Right: &Query{Func: "_until"}}}}}}}, Func: "_until"}}},
		"values": []*FuncDef{&FuncDef{Name: "values", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{&Query{Left: &Query{Func: "."}, Op: OpNe, Right: &Query{Func: "null"}}}}}}}},
		"walk": []*FuncDef{&FuncDef{Name: "walk", Args: []string{"f"}, Body: &Query{FuncDefs: []*FuncDef{&FuncDef{Name: "_walk", Body: &Query{Left: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Func: "type"}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "array"}}}}, Then: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "map", Args: []*Query{&Query{Func: "_walk"}}}}}, Elif: []*IfElif{&IfElif{Cond: &Query{Left: &Query{Func: "type"}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "object"}}}}, Then: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "map_values", Args: []*Query{&Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "last", Args: []*Query{&Query{Func: "_walk"}}}}}}}}}}}}}}, Op: OpPipe, Right: &Query{Func: "f"}}}}, Func: "_walk"}}},
		"while": []*FuncDef{&FuncDef{Name: "while", Args: []string{"cond", "update"}, Body: &Query{FuncDefs: []*FuncDef{&FuncDef{Name: "_while", Body: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Func: "cond"}, Then: &Query{Left: &Query{Func: "."}, Op: OpComma, Right: &Query{Term: &Term{Type: TermTypeQuery, Query: &Query{Left: &Query{Func: "update"}, Op: OpPipe, Right: &Query{Func: "_while"}}}}}, Else: &Query{Func: "empty"}}}}}}, Func: "_while"}}},
		"with_entries": []*FuncDef{&FuncDef{Name: "with_entries", Args: []string{"f"}, Body: &Query{Left: &Query{Func: "to_entries"}, Op: OpPipe, Right: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "map", Args: []*Query{&Query{Func: "f"}}}}}, Op: OpPipe, Right: &Query{Func: "from_entries"}}}}},
	}
}
 07070100000795000081A4000000000000000000000001645E367C0000136C000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/builtin.jq def not: if . then false else true end;
def in(xs): . as $x | xs | has($x);
def map(f): [.[] | f];
def with_entries(f): to_entries | map(f) | from_entries;
def select(f): if f then . else empty end;
def recurse: recurse(.[]?);
def recurse(f): def r: ., (f | r); r;
def recurse(f; cond): def r: ., (f | select(cond) | r); r;

def while(cond; update):
  def _while: if cond then ., (update | _while) else empty end;
  _while;
def until(cond; next):
  def _until: if cond then . else next | _until end;
  _until;
def repeat(f):
  def _repeat: f, _repeat;
  _repeat;
def range($end): _range(0; $end; 1);
def range($start; $end): _range($start; $end; 1);
def range($start; $end; $step): _range($start; $end; $step);

def min_by(f): _min_by(map([f]));
def max_by(f): _max_by(map([f]));
def sort_by(f): _sort_by(map([f]));
def group_by(f): _group_by(map([f]));
def unique_by(f): _unique_by(map([f]));

def arrays: select(type == "array");
def objects: select(type == "object");
def iterables: select(type | . == "array" or . == "object");
def booleans: select(type == "boolean");
def numbers: select(type == "number");
def finites: select(isfinite);
def normals: select(isnormal);
def strings: select(type == "string");
def nulls: select(. == null);
def values: select(. != null);
def scalars: select(type | . != "array" and . != "object");
def leaf_paths: paths(scalars);

def inside(xs): . as $x | xs | contains($x);
def combinations:
  if length == 0 then
    []
  else
    .[0][] as $x | [$x] + (.[1:] | combinations)
  end;
def combinations(n): [limit(n; repeat(.))] | combinations;
def walk(f):
  def _walk:
    if type == "array" then
      map(_walk)
    elif type == "object" then
      map_values(last(_walk))
    end | f;
  _walk;

def first: .[0];
def first(g): label $out | g | ., break $out;
def last: .[-1];
def last(g): reduce g as $item (null; $item);
def isempty(g): label $out | (g | false, break $out), true;
def all: all(.);
def all(y): all(.[]; y);
def all(g; y): isempty(g | select(y | not));
def any: any(.);
def any(y): any(.[]; y);
def any(g; y): isempty(g | select(y)) | not;
def limit($n; g):
  if $n > 0 then
    label $out |
    foreach g as $item (
      $n;
      . - 1;
      $item, if . <= 0 then break $out else empty end
    )
  elif $n == 0 then
    empty
  else
    g
  end;
def nth($n): .[$n];
def nth($n; g):
  if $n < 0 then
    error("nth doesn't support negative indices")
  else
    label $out |
    foreach g as $item (
      $n + 1;
      . - 1;
      if . <= 0 then $item, break $out else empty end
    )
  end;

def truncate_stream(f):
  . as $n | null | f |
  if .[0] | length > $n then .[0] |= .[$n:] else empty end;
def fromstream(f):
  { x: null, e: false } as $init |
  foreach f as $i (
    $init;
    if .e then $init end |
    if $i | length == 2 then
      setpath(["e"]; $i[0] | length == 0) |
      setpath(["x"] + $i[0]; $i[1])
    else
      setpath(["e"]; $i[0] | length == 1)
    end;
    if .e then .x else empty end
  );
def tostream:
  path(def r: (.[]? | r), .; r) as $p |
  getpath($p) |
  reduce path(.[]?) as $q ([$p, .]; [$p + $q]);

def map_values(f): .[] |= f;
def del(f): delpaths([path(f)]);
def paths: path(..) | select(. != []);
def paths(f): paths as $p | select(getpath($p) | f) | $p;

def fromdateiso8601: strptime("%Y-%m-%dT%H:%M:%S%z") | mktime;
def todateiso8601: strftime("%Y-%m-%dT%H:%M:%SZ");
def fromdate: fromdateiso8601;
def todate: todateiso8601;

def match($re): match($re; null);
def match($re; $flags): _match($re; $flags; false)[];
def test($re): test($re; null);
def test($re; $flags): _match($re; $flags; true);
def capture($re): capture($re; null);
def capture($re; $flags): match($re; $flags) | _capture;
def scan($re): scan($re; null);
def scan($re; $flags):
  match($re; $flags + "g") |
  if .captures == [] then
    .string
  else
    [.captures[].string]
  end;
def splits($re): splits($re; null);
def splits($re; $flags): split($re; $flags)[];
def sub($re; str): sub($re; str; null);
def sub($re; str; $flags):
  . as $str |
  def _sub:
    if .matches == [] then
      $str[:.offset] + .string
    else
      .matches[-1] as $r |
      {
        string: (($r | _capture | str) + $str[$r.offset+$r.length:.offset] + .string),
        offset: $r.offset,
        matches: .matches[:-1],
      } |
      _sub
    end;
  { string: "", matches: [match($re; $flags)] } | _sub;
def gsub($re; str): sub($re; str; "g");
def gsub($re; str; $flags): sub($re; str; $flags + "g");

def inputs:
  try
    repeat(input)
  catch
    if . == "break" then empty else error end;

def INDEX(stream; idx_expr):
  reduce stream as $row ({}; .[$row | idx_expr | tostring] = $row);
def INDEX(idx_expr):
  INDEX(.[]; idx_expr);
def JOIN($idx; idx_expr):
  [.[] | [., $idx[idx_expr]]];
def JOIN($idx; stream; idx_expr):
  stream | [., $idx[idx_expr]];
def JOIN($idx; stream; idx_expr; join_expr):
  stream | [., $idx[idx_expr]] | join_expr;
def IN(s): any(s == .; .);
def IN(src; s): any(src == s; .);
07070100000796000081A4000000000000000000000001645E367C000005DD000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/code.go    package gojq

type code struct {
	v  any
	op opcode
}

type opcode int

const (
	opnop opcode = iota
	oppush
	oppop
	opdup
	opconst
	opload
	opstore
	opobject
	opappend
	opfork
	opforktrybegin
	opforktryend
	opforkalt
	opforklabel
	opbacktrack
	opjump
	opjumpifnot
	opindex
	opindexarray
	opcall
	opcallrec
	oppushpc
	opcallpc
	opscope
	opret
	opiter
	opexpbegin
	opexpend
	oppathbegin
	oppathend
)

func (op opcode) String() string {
	switch op {
	case opnop:
		return "nop"
	case oppush:
		return "push"
	case oppop:
		return "pop"
	case opdup:
		return "dup"
	case opconst:
		return "const"
	case opload:
		return "load"
	case opstore:
		return "store"
	case opobject:
		return "object"
	case opappend:
		return "append"
	case opfork:
		return "fork"
	case opforktrybegin:
		return "forktrybegin"
	case opforktryend:
		return "forktryend"
	case opforkalt:
		return "forkalt"
	case opforklabel:
		return "forklabel"
	case opbacktrack:
		return "backtrack"
	case opjump:
		return "jump"
	case opjumpifnot:
		return "jumpifnot"
	case opindex:
		return "index"
	case opindexarray:
		return "indexarray"
	case opcall:
		return "call"
	case opcallrec:
		return "callrec"
	case oppushpc:
		return "pushpc"
	case opcallpc:
		return "callpc"
	case opscope:
		return "scope"
	case opret:
		return "ret"
	case opiter:
		return "iter"
	case opexpbegin:
		return "expbegin"
	case opexpend:
		return "expend"
	case oppathbegin:
		return "pathbegin"
	case oppathend:
		return "pathend"
	default:
		panic(op)
	}
}
   07070100000797000081A4000000000000000000000001645E367C00000673000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/compare.go package gojq

import (
	"math"
	"math/big"
)

// Compare l and r, and returns jq-flavored comparison value.
// The result will be 0 if l == r, -1 if l < r, and +1 if l > r.
// This comparison is used by built-in operators and functions.
func Compare(l, r any) int {
	return compare(l, r)
}

func compare(l, r any) int {
	return binopTypeSwitch(l, r,
		compareInt,
		func(l, r float64) any {
			switch {
			case l < r || math.IsNaN(l):
				return -1
			case l == r:
				return 0
			default:
				return 1
			}
		},
		func(l, r *big.Int) any {
			return l.Cmp(r)
		},
		func(l, r string) any {
			switch {
			case l < r:
				return -1
			case l == r:
				return 0
			default:
				return 1
			}
		},
		func(l, r []any) any {
			n := len(l)
			if len(r) < n {
				n = len(r)
			}
			for i := 0; i < n; i++ {
				if cmp := compare(l[i], r[i]); cmp != 0 {
					return cmp
				}
			}
			return compareInt(len(l), len(r))
		},
		func(l, r map[string]any) any {
			lk, rk := funcKeys(l), funcKeys(r)
			if cmp := compare(lk, rk); cmp != 0 {
				return cmp
			}
			for _, k := range lk.([]any) {
				if cmp := compare(l[k.(string)], r[k.(string)]); cmp != 0 {
					return cmp
				}
			}
			return 0
		},
		func(l, r any) any {
			return compareInt(typeIndex(l), typeIndex(r))
		},
	).(int)
}

func compareInt(l, r int) any {
	switch {
	case l < r:
		return -1
	case l == r:
		return 0
	default:
		return 1
	}
}

func typeIndex(v any) int {
	switch v := v.(type) {
	default:
		return 0
	case bool:
		if !v {
			return 1
		}
		return 2
	case int, float64, *big.Int:
		return 3
	case string:
		return 4
	case []any:
		return 5
	case map[string]any:
		return 6
	}
}
 07070100000798000081A4000000000000000000000001645E367C0000A2FD000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/compiler.go    package gojq

import (
	"context"
	"errors"
	"fmt"
	"sort"
	"strconv"
	"strings"
)

type compiler struct {
	moduleLoader  ModuleLoader
	environLoader func() []string
	variables     []string
	customFuncs   map[string]function
	inputIter     Iter
	codes         []*code
	codeinfos     []codeinfo
	builtinScope  *scopeinfo
	scopes        []*scopeinfo
	scopecnt      int
}

// Code is a compiled jq query.
type Code struct {
	variables []string
	codes     []*code
	codeinfos []codeinfo
}

// Run runs the code with the variable values (which should be in the
// same order as the given variables using [WithVariables]) and returns
// a result iterator.
//
// It is safe to call this method in goroutines, to reuse a compiled [*Code].
// But for arguments, do not give values sharing same data between goroutines.
func (c *Code) Run(v any, values ...any) Iter {
	return c.RunWithContext(context.Background(), v, values...)
}

// RunWithContext runs the code with context.
func (c *Code) RunWithContext(ctx context.Context, v any, values ...any) Iter {
	if len(values) > len(c.variables) {
		return NewIter(&tooManyVariableValuesError{})
	} else if len(values) < len(c.variables) {
		return NewIter(&expectedVariableError{c.variables[len(values)]})
	}
	for i, v := range values {
		values[i] = normalizeNumbers(v)
	}
	return newEnv(ctx).execute(c, normalizeNumbers(v), values...)
}

type scopeinfo struct {
	variables   []*varinfo
	funcs       []*funcinfo
	id          int
	depth       int
	variablecnt int
}

type varinfo struct {
	name  string
	index [2]int
	depth int
}

type funcinfo struct {
	name   string
	pc     int
	argcnt int
}

// Compile compiles a query.
func Compile(q *Query, options ...CompilerOption) (*Code, error) {
	c := &compiler{}
	for _, opt := range options {
		opt(c)
	}
	c.builtinScope = c.newScope()
	scope := c.newScope()
	c.scopes = []*scopeinfo{scope}
	setscope := c.lazy(func() *code {
		return &code{op: opscope, v: [3]int{scope.id, scope.variablecnt, 0}}
	})
	if c.moduleLoader != nil {
		if moduleLoader, ok := c.moduleLoader.(interface {
			LoadInitModules() ([]*Query, error)
		}); ok {
			qs, err := moduleLoader.LoadInitModules()
			if err != nil {
				return nil, err
			}
			for _, q := range qs {
				if err := c.compileModule(q, ""); err != nil {
					return nil, err
				}
			}
		}
	}
	if err := c.compile(q); err != nil {
		return nil, err
	}
	setscope()
	c.optimizeTailRec()
	c.optimizeCodeOps()
	return &Code{
		variables: c.variables,
		codes:     c.codes,
		codeinfos: c.codeinfos,
	}, nil
}

func (c *compiler) compile(q *Query) error {
	for _, name := range c.variables {
		if !newLexer(name).validVarName() {
			return &variableNameError{name}
		}
		c.appendCodeInfo(name)
		c.append(&code{op: opstore, v: c.pushVariable(name)})
	}
	for _, i := range q.Imports {
		if err := c.compileImport(i); err != nil {
			return err
		}
	}
	if err := c.compileQuery(q); err != nil {
		return err
	}
	c.append(&code{op: opret})
	return nil
}

func (c *compiler) compileImport(i *Import) error {
	var path, alias string
	var err error
	if i.ImportPath != "" {
		path, alias = i.ImportPath, i.ImportAlias
	} else {
		path = i.IncludePath
	}
	if c.moduleLoader == nil {
		return fmt.Errorf("cannot load module: %q", path)
	}
	if strings.HasPrefix(alias, "$") {
		var vals any
		if moduleLoader, ok := c.moduleLoader.(interface {
			LoadJSONWithMeta(string, map[string]any) (any, error)
		}); ok {
			if vals, err = moduleLoader.LoadJSONWithMeta(path, i.Meta.ToValue()); err != nil {
				return err
			}
		} else if moduleLoader, ok := c.moduleLoader.(interface {
			LoadJSON(string) (any, error)
		}); ok {
			if vals, err = moduleLoader.LoadJSON(path); err != nil {
				return err
			}
		} else {
			return fmt.Errorf("module not found: %q", path)
		}
		vals = normalizeNumbers(vals)
		c.append(&code{op: oppush, v: vals})
		c.append(&code{op: opstore, v: c.pushVariable(alias)})
		c.append(&code{op: oppush, v: vals})
		c.append(&code{op: opstore, v: c.pushVariable(alias + "::" + alias[1:])})
		return nil
	}
	var q *Query
	if moduleLoader, ok := c.moduleLoader.(interface {
		LoadModuleWithMeta(string, map[string]any) (*Query, error)
	}); ok {
		if q, err = moduleLoader.LoadModuleWithMeta(path, i.Meta.ToValue()); err != nil {
			return err
		}
	} else if moduleLoader, ok := c.moduleLoader.(interface {
		LoadModule(string) (*Query, error)
	}); ok {
		if q, err = moduleLoader.LoadModule(path); err != nil {
			return err
		}
	}
	c.appendCodeInfo("module " + path)
	if err = c.compileModule(q, alias); err != nil {
		return err
	}
	c.appendCodeInfo("end of module " + path)
	return nil
}

func (c *compiler) compileModule(q *Query, alias string) error {
	scope := c.scopes[len(c.scopes)-1]
	scope.depth++
	defer func(l int) {
		scope.depth--
		scope.variables = scope.variables[:l]
	}(len(scope.variables))
	if alias != "" {
		defer func(l int) {
			for _, f := range scope.funcs[l:] {
				f.name = alias + "::" + f.name
			}
		}(len(scope.funcs))
	}
	for _, i := range q.Imports {
		if err := c.compileImport(i); err != nil {
			return err
		}
	}
	for _, fd := range q.FuncDefs {
		if err := c.compileFuncDef(fd, false); err != nil {
			return err
		}
	}
	return nil
}

func (c *compiler) newVariable() [2]int {
	return c.createVariable("")
}

func (c *compiler) pushVariable(name string) [2]int {
	s := c.scopes[len(c.scopes)-1]
	for _, v := range s.variables {
		if v.name == name && v.depth == s.depth {
			return v.index
		}
	}
	return c.createVariable(name)
}

func (c *compiler) createVariable(name string) [2]int {
	s := c.scopes[len(c.scopes)-1]
	v := [2]int{s.id, s.variablecnt}
	s.variablecnt++
	s.variables = append(s.variables, &varinfo{name, v, s.depth})
	return v
}

func (c *compiler) lookupVariable(name string) ([2]int, error) {
	for i := len(c.scopes) - 1; i >= 0; i-- {
		s := c.scopes[i]
		for j := len(s.variables) - 1; j >= 0; j-- {
			if w := s.variables[j]; w.name == name {
				return w.index, nil
			}
		}
	}
	return [2]int{}, &variableNotFoundError{name}
}

func (c *compiler) lookupFuncOrVariable(name string) (*funcinfo, *varinfo) {
	for i, isFunc := len(c.scopes)-1, name[0] != '$'; i >= 0; i-- {
		s := c.scopes[i]
		if isFunc {
			for j := len(s.funcs) - 1; j >= 0; j-- {
				if f := s.funcs[j]; f.name == name && f.argcnt == 0 {
					return f, nil
				}
			}
		}
		for j := len(s.variables) - 1; j >= 0; j-- {
			if v := s.variables[j]; v.name == name {
				return nil, v
			}
		}
	}
	return nil, nil
}

func (c *compiler) lookupBuiltin(name string, argcnt int) *funcinfo {
	s := c.builtinScope
	for i := len(s.funcs) - 1; i >= 0; i-- {
		if f := s.funcs[i]; f.name == name && f.argcnt == argcnt {
			return f
		}
	}
	return nil
}

func (c *compiler) appendBuiltin(name string, argcnt int) func() {
	setjump := c.lazy(func() *code {
		return &code{op: opjump, v: len(c.codes)}
	})
	c.appendCodeInfo(name)
	c.builtinScope.funcs = append(
		c.builtinScope.funcs,
		&funcinfo{name, len(c.codes), argcnt},
	)
	return func() {
		setjump()
		c.appendCodeInfo("end of " + name)
	}
}

func (c *compiler) newScope() *scopeinfo {
	i := c.scopecnt // do not use len(c.scopes) because it pops
	c.scopecnt++
	return &scopeinfo{id: i}
}

func (c *compiler) newScopeDepth() func() {
	scope := c.scopes[len(c.scopes)-1]
	l, m := len(scope.variables), len(scope.funcs)
	scope.depth++
	return func() {
		scope.depth--
		scope.variables = scope.variables[:l]
		scope.funcs = scope.funcs[:m]
	}
}

func (c *compiler) compileFuncDef(e *FuncDef, builtin bool) error {
	var scope *scopeinfo
	if builtin {
		scope = c.builtinScope
	} else {
		scope = c.scopes[len(c.scopes)-1]
	}
	defer c.lazy(func() *code {
		return &code{op: opjump, v: len(c.codes)}
	})()
	c.appendCodeInfo(e.Name)
	scope.funcs = append(scope.funcs, &funcinfo{e.Name, len(c.codes), len(e.Args)})
	defer func(scopes []*scopeinfo, variables []string) {
		c.scopes, c.variables = scopes, variables
	}(c.scopes, c.variables)
	c.variables = c.variables[len(c.variables):]
	scope = c.newScope()
	if builtin {
		c.scopes = []*scopeinfo{c.builtinScope, scope}
	} else {
		c.scopes = append(c.scopes, scope)
	}
	defer c.lazy(func() *code {
		return &code{op: opscope, v: [3]int{scope.id, scope.variablecnt, len(e.Args)}}
	})()
	if len(e.Args) > 0 {
		type varIndex struct {
			name  string
			index [2]int
		}
		vis := make([]varIndex, 0, len(e.Args))
		v := c.newVariable()
		c.append(&code{op: opstore, v: v})
		for _, arg := range e.Args {
			if arg[0] == '$' {
				c.appendCodeInfo(arg[1:])
				w := c.createVariable(arg[1:])
				c.append(&code{op: opstore, v: w})
				vis = append(vis, varIndex{arg, w})
			} else {
				c.appendCodeInfo(arg)
				c.append(&code{op: opstore, v: c.createVariable(arg)})
			}
		}
		for _, w := range vis {
			c.append(&code{op: opload, v: v})
			c.append(&code{op: opexpbegin})
			c.append(&code{op: opload, v: w.index})
			c.append(&code{op: opcallpc})
			c.appendCodeInfo(w.name)
			c.append(&code{op: opstore, v: c.pushVariable(w.name)})
			c.append(&code{op: opexpend})
		}
		c.append(&code{op: opload, v: v})
	}
	if err := c.compile(e.Body); err != nil {
		return err
	}
	c.appendCodeInfo("end of " + e.Name)
	return nil
}

func (c *compiler) compileQuery(e *Query) error {
	for _, fd := range e.FuncDefs {
		if err := c.compileFuncDef(fd, false); err != nil {
			return err
		}
	}
	if e.Func != "" {
		switch e.Func {
		case ".":
			return c.compileTerm(&Term{Type: TermTypeIdentity})
		case "..":
			return c.compileTerm(&Term{Type: TermTypeRecurse})
		case "null":
			return c.compileTerm(&Term{Type: TermTypeNull})
		case "true":
			return c.compileTerm(&Term{Type: TermTypeTrue})
		case "false":
			return c.compileTerm(&Term{Type: TermTypeFalse})
		default:
			return c.compileFunc(&Func{Name: e.Func})
		}
	} else if e.Term != nil {
		return c.compileTerm(e.Term)
	}
	switch e.Op {
	case OpPipe:
		if err := c.compileQuery(e.Left); err != nil {
			return err
		}
		return c.compileQuery(e.Right)
	case OpComma:
		return c.compileComma(e.Left, e.Right)
	case OpAlt:
		return c.compileAlt(e.Left, e.Right)
	case OpAssign, OpModify, OpUpdateAdd, OpUpdateSub,
		OpUpdateMul, OpUpdateDiv, OpUpdateMod, OpUpdateAlt:
		return c.compileQueryUpdate(e.Left, e.Right, e.Op)
	case OpOr:
		return c.compileIf(
			&If{
				Cond: e.Left,
				Then: &Query{Term: &Term{Type: TermTypeTrue}},
				Else: &Query{Term: &Term{Type: TermTypeIf, If: &If{
					Cond: e.Right,
					Then: &Query{Term: &Term{Type: TermTypeTrue}},
					Else: &Query{Term: &Term{Type: TermTypeFalse}},
				}}},
			},
		)
	case OpAnd:
		return c.compileIf(
			&If{
				Cond: e.Left,
				Then: &Query{Term: &Term{Type: TermTypeIf, If: &If{
					Cond: e.Right,
					Then: &Query{Term: &Term{Type: TermTypeTrue}},
					Else: &Query{Term: &Term{Type: TermTypeFalse}},
				}}},
				Else: &Query{Term: &Term{Type: TermTypeFalse}},
			},
		)
	default:
		return c.compileCall(
			e.Op.getFunc(),
			[]*Query{e.Left, e.Right},
		)
	}
}

func (c *compiler) compileComma(l, r *Query) error {
	setfork := c.lazy(func() *code {
		return &code{op: opfork, v: len(c.codes)}
	})
	if err := c.compileQuery(l); err != nil {
		return err
	}
	defer c.lazy(func() *code {
		return &code{op: opjump, v: len(c.codes)}
	})()
	setfork()
	return c.compileQuery(r)
}

func (c *compiler) compileAlt(l, r *Query) error {
	c.append(&code{op: oppush, v: false})
	found := c.newVariable()
	c.append(&code{op: opstore, v: found})
	setfork := c.lazy(func() *code {
		return &code{op: opfork, v: len(c.codes)} // opload found
	})
	if err := c.compileQuery(l); err != nil {
		return err
	}
	c.append(&code{op: opdup})
	c.append(&code{op: opjumpifnot, v: len(c.codes) + 4}) // oppop
	c.append(&code{op: oppush, v: true})                  // found some value
	c.append(&code{op: opstore, v: found})
	defer c.lazy(func() *code {
		return &code{op: opjump, v: len(c.codes)}
	})()
	c.append(&code{op: oppop})
	c.append(&code{op: opbacktrack})
	setfork()
	c.append(&code{op: opload, v: found})
	c.append(&code{op: opjumpifnot, v: len(c.codes) + 3})
	c.append(&code{op: opbacktrack}) // if found, backtrack
	c.append(&code{op: oppop})
	return c.compileQuery(r)
}

func (c *compiler) compileQueryUpdate(l, r *Query, op Operator) error {
	switch op {
	case OpAssign:
		// optimize assignment operator with constant indexing and slicing
		//   .foo.[0].[1:2] = f => setpath(["foo",0,{"start":1,"end":2}]; f)
		if xs := l.toIndices(nil); xs != nil {
			// ref: compileCall
			v := c.newVariable()
			c.append(&code{op: opstore, v: v})
			c.append(&code{op: opload, v: v})
			if err := c.compileQuery(r); err != nil {
				return err
			}
			c.append(&code{op: oppush, v: xs})
			c.append(&code{op: opload, v: v})
			c.append(&code{op: opcall, v: [3]any{internalFuncs["setpath"].callback, 2, "setpath"}})
			return nil
		}
		fallthrough
	case OpModify:
		return c.compileFunc(
			&Func{
				Name: op.getFunc(),
				Args: []*Query{l, r},
			},
		)
	default:
		name := "$%0"
		c.append(&code{op: opdup})
		if err := c.compileQuery(r); err != nil {
			return err
		}
		c.append(&code{op: opstore, v: c.pushVariable(name)})
		return c.compileFunc(
			&Func{
				Name: "_modify",
				Args: []*Query{
					l,
					{Term: &Term{
						Type: TermTypeFunc,
						Func: &Func{
							Name: op.getFunc(),
							Args: []*Query{
								{Term: &Term{Type: TermTypeIdentity}},
								{Func: name},
							},
						},
					}},
				},
			},
		)
	}
}

func (c *compiler) compileBind(e *Term, b *Bind) error {
	c.append(&code{op: opdup})
	c.append(&code{op: opexpbegin})
	if err := c.compileTerm(e); err != nil {
		return err
	}
	var pc int
	var vs [][2]int
	for i, p := range b.Patterns {
		var pcc int
		var err error
		if i < len(b.Patterns)-1 {
			defer c.lazy(func() *code {
				return &code{op: opforkalt, v: pcc}
			})()
		}
		if 0 < i {
			for _, v := range vs {
				c.append(&code{op: oppush, v: nil})
				c.append(&code{op: opstore, v: v})
			}
		}
		if vs, err = c.compilePattern(vs[:0], p); err != nil {
			return err
		}
		if i < len(b.Patterns)-1 {
			defer c.lazy(func() *code {
				return &code{op: opjump, v: pc}
			})()
			pcc = len(c.codes)
		}
	}
	if len(b.Patterns) > 1 {
		pc = len(c.codes)
	}
	if len(b.Patterns) == 1 && c.codes[len(c.codes)-2].op == opexpbegin {
		c.codes[len(c.codes)-2].op = opnop
	} else {
		c.append(&code{op: opexpend})
	}
	return c.compileQuery(b.Body)
}

func (c *compiler) compilePattern(vs [][2]int, p *Pattern) ([][2]int, error) {
	var err error
	c.appendCodeInfo(p)
	if p.Name != "" {
		v := c.pushVariable(p.Name)
		c.append(&code{op: opstore, v: v})
		return append(vs, v), nil
	} else if len(p.Array) > 0 {
		v := c.newVariable()
		c.append(&code{op: opstore, v: v})
		for i, p := range p.Array {
			c.append(&code{op: opload, v: v})
			c.append(&code{op: opindexarray, v: i})
			if vs, err = c.compilePattern(vs, p); err != nil {
				return nil, err
			}
		}
		return vs, nil
	} else if len(p.Object) > 0 {
		v := c.newVariable()
		c.append(&code{op: opstore, v: v})
		for _, kv := range p.Object {
			var key, name string
			c.append(&code{op: opload, v: v})
			if key = kv.Key; key != "" {
				if key[0] == '$' {
					key, name = key[1:], key
				}
			} else if kv.KeyString != nil {
				if key = kv.KeyString.Str; key == "" {
					if err := c.compileString(kv.KeyString, nil); err != nil {
						return nil, err
					}
				}
			} else if kv.KeyQuery != nil {
				if err := c.compileQuery(kv.KeyQuery); err != nil {
					return nil, err
				}
			}
			if key != "" {
				c.append(&code{op: opindex, v: key})
			} else {
				c.append(&code{op: opload, v: v})
				c.append(&code{op: oppush, v: nil})
				// ref: compileCall
				c.append(&code{op: opcall, v: [3]any{internalFuncs["_index"].callback, 2, "_index"}})
			}
			if name != "" {
				if kv.Val != nil {
					c.append(&code{op: opdup})
				}
				if vs, err = c.compilePattern(vs, &Pattern{Name: name}); err != nil {
					return nil, err
				}
			}
			if kv.Val != nil {
				if vs, err = c.compilePattern(vs, kv.Val); err != nil {
					return nil, err
				}
			}
		}
		return vs, nil
	} else {
		return nil, fmt.Errorf("invalid pattern: %s", p)
	}
}

func (c *compiler) compileIf(e *If) error {
	c.appendCodeInfo(e)
	c.append(&code{op: opdup}) // duplicate the value for then or else clause
	c.append(&code{op: opexpbegin})
	pc := len(c.codes)
	f := c.newScopeDepth()
	if err := c.compileQuery(e.Cond); err != nil {
		return err
	}
	f()
	if pc == len(c.codes) {
		c.codes = c.codes[:pc-1]
	} else {
		c.append(&code{op: opexpend})
	}
	pcc := len(c.codes)
	setjumpifnot := c.lazy(func() *code {
		return &code{op: opjumpifnot, v: len(c.codes)} // skip then clause
	})
	f = c.newScopeDepth()
	if err := c.compileQuery(e.Then); err != nil {
		return err
	}
	f()
	defer c.lazy(func() *code {
		return &code{op: opjump, v: len(c.codes)}
	})()
	setjumpifnot()
	if len(e.Elif) > 0 {
		return c.compileIf(&If{e.Elif[0].Cond, e.Elif[0].Then, e.Elif[1:], e.Else})
	}
	if e.Else != nil {
		defer c.newScopeDepth()()
		defer func() {
			// optimize constant results
			//    opdup, ..., opjumpifnot, opconst, opjump, opconst
			// => opnop, ..., opjumpifnot, oppush,  opjump, oppush
			if pcc+4 == len(c.codes) &&
				c.codes[pcc+1] != nil && c.codes[pcc+1].op == opconst &&
				c.codes[pcc+3] != nil && c.codes[pcc+3].op == opconst {
				c.codes[pc-2].op = opnop
				c.codes[pcc+1].op = oppush
				c.codes[pcc+3].op = oppush
			}
		}()
		return c.compileQuery(e.Else)
	}
	return nil
}

func (c *compiler) compileTry(e *Try) error {
	c.appendCodeInfo(e)
	setforktrybegin := c.lazy(func() *code {
		return &code{op: opforktrybegin, v: len(c.codes)}
	})
	f := c.newScopeDepth()
	if err := c.compileQuery(e.Body); err != nil {
		return err
	}
	f()
	c.append(&code{op: opforktryend})
	defer c.lazy(func() *code {
		return &code{op: opjump, v: len(c.codes)}
	})()
	setforktrybegin()
	if e.Catch != nil {
		defer c.newScopeDepth()()
		return c.compileQuery(e.Catch)
	}
	c.append(&code{op: opbacktrack})
	return nil
}

func (c *compiler) compileReduce(e *Reduce) error {
	c.appendCodeInfo(e)
	defer c.newScopeDepth()()
	setfork := c.lazy(func() *code {
		return &code{op: opfork, v: len(c.codes)}
	})
	c.append(&code{op: opdup})
	v := c.newVariable()
	f := c.newScopeDepth()
	if err := c.compileQuery(e.Start); err != nil {
		return err
	}
	f()
	c.append(&code{op: opstore, v: v})
	if err := c.compileTerm(e.Term); err != nil {
		return err
	}
	if _, err := c.compilePattern(nil, e.Pattern); err != nil {
		return err
	}
	c.append(&code{op: opload, v: v})
	f = c.newScopeDepth()
	if err := c.compileQuery(e.Update); err != nil {
		return err
	}
	f()
	c.append(&code{op: opstore, v: v})
	c.append(&code{op: opbacktrack})
	setfork()
	c.append(&code{op: oppop})
	c.append(&code{op: opload, v: v})
	return nil
}

func (c *compiler) compileForeach(e *Foreach) error {
	c.appendCodeInfo(e)
	defer c.newScopeDepth()()
	c.append(&code{op: opdup})
	v := c.newVariable()
	f := c.newScopeDepth()
	if err := c.compileQuery(e.Start); err != nil {
		return err
	}
	f()
	c.append(&code{op: opstore, v: v})
	if err := c.compileTerm(e.Term); err != nil {
		return err
	}
	if _, err := c.compilePattern(nil, e.Pattern); err != nil {
		return err
	}
	c.append(&code{op: opload, v: v})
	f = c.newScopeDepth()
	if err := c.compileQuery(e.Update); err != nil {
		return err
	}
	f()
	c.append(&code{op: opdup})
	c.append(&code{op: opstore, v: v})
	if e.Extract != nil {
		defer c.newScopeDepth()()
		return c.compileQuery(e.Extract)
	}
	return nil
}

func (c *compiler) compileLabel(e *Label) error {
	c.appendCodeInfo(e)
	v := c.pushVariable("$%" + e.Ident[1:])
	c.append(&code{op: opforklabel, v: v})
	return c.compileQuery(e.Body)
}

func (c *compiler) compileBreak(label string) error {
	v, err := c.lookupVariable("$%" + label[1:])
	if err != nil {
		return &breakError{label, nil}
	}
	c.append(&code{op: oppop})
	c.append(&code{op: opload, v: v})
	c.append(&code{op: opcall, v: [3]any{funcBreak(label), 0, "_break"}})
	return nil
}

func funcBreak(label string) func(any, []any) any {
	return func(v any, _ []any) any {
		return &breakError{label, v}
	}
}

func (c *compiler) compileTerm(e *Term) error {
	if len(e.SuffixList) > 0 {
		s := e.SuffixList[len(e.SuffixList)-1]
		t := *e // clone without changing e
		t.SuffixList = t.SuffixList[:len(e.SuffixList)-1]
		return c.compileTermSuffix(&t, s)
	}
	switch e.Type {
	case TermTypeIdentity:
		return nil
	case TermTypeRecurse:
		return c.compileFunc(&Func{Name: "recurse"})
	case TermTypeNull:
		c.append(&code{op: opconst, v: nil})
		return nil
	case TermTypeTrue:
		c.append(&code{op: opconst, v: true})
		return nil
	case TermTypeFalse:
		c.append(&code{op: opconst, v: false})
		return nil
	case TermTypeIndex:
		return c.compileIndex(&Term{Type: TermTypeIdentity}, e.Index)
	case TermTypeFunc:
		return c.compileFunc(e.Func)
	case TermTypeObject:
		return c.compileObject(e.Object)
	case TermTypeArray:
		return c.compileArray(e.Array)
	case TermTypeNumber:
		c.append(&code{op: opconst, v: toNumber(e.Number)})
		return nil
	case TermTypeUnary:
		return c.compileUnary(e.Unary)
	case TermTypeFormat:
		return c.compileFormat(e.Format, e.Str)
	case TermTypeString:
		return c.compileString(e.Str, nil)
	case TermTypeIf:
		return c.compileIf(e.If)
	case TermTypeTry:
		return c.compileTry(e.Try)
	case TermTypeReduce:
		return c.compileReduce(e.Reduce)
	case TermTypeForeach:
		return c.compileForeach(e.Foreach)
	case TermTypeLabel:
		return c.compileLabel(e.Label)
	case TermTypeBreak:
		return c.compileBreak(e.Break)
	case TermTypeQuery:
		defer c.newScopeDepth()()
		return c.compileQuery(e.Query)
	default:
		panic("invalid term: " + e.String())
	}
}

func (c *compiler) compileIndex(e *Term, x *Index) error {
	if k := x.toIndexKey(); k != nil {
		if err := c.compileTerm(e); err != nil {
			return err
		}
		c.appendCodeInfo(x)
		c.append(&code{op: opindex, v: k})
		return nil
	}
	c.appendCodeInfo(x)
	if x.Str != nil {
		return c.compileCall("_index", []*Query{{Term: e}, {Term: &Term{Type: TermTypeString, Str: x.Str}}})
	}
	if !x.IsSlice {
		return c.compileCall("_index", []*Query{{Term: e}, x.Start})
	}
	if x.Start == nil {
		return c.compileCall("_slice", []*Query{{Term: e}, x.End, {Term: &Term{Type: TermTypeNull}}})
	}
	if x.End == nil {
		return c.compileCall("_slice", []*Query{{Term: e}, {Term: &Term{Type: TermTypeNull}}, x.Start})
	}
	return c.compileCall("_slice", []*Query{{Term: e}, x.End, x.Start})
}

func (c *compiler) compileFunc(e *Func) error {
	if len(e.Args) == 0 {
		if f, v := c.lookupFuncOrVariable(e.Name); f != nil {
			return c.compileCallPc(f, e.Args)
		} else if v != nil {
			if e.Name[0] == '$' {
				c.append(&code{op: oppop})
				c.append(&code{op: opload, v: v.index})
			} else {
				c.append(&code{op: opload, v: v.index})
				c.append(&code{op: opcallpc})
			}
			return nil
		} else if e.Name == "$ENV" || e.Name == "env" {
			env := make(map[string]any)
			if c.environLoader != nil {
				for _, kv := range c.environLoader() {
					if i := strings.IndexByte(kv, '='); i > 0 {
						env[kv[:i]] = kv[i+1:]
					}
				}
			}
			c.append(&code{op: opconst, v: env})
			return nil
		} else if e.Name[0] == '$' {
			return &variableNotFoundError{e.Name}
		}
	} else {
		for i := len(c.scopes) - 1; i >= 0; i-- {
			s := c.scopes[i]
			for j := len(s.funcs) - 1; j >= 0; j-- {
				if f := s.funcs[j]; f.name == e.Name && f.argcnt == len(e.Args) {
					return c.compileCallPc(f, e.Args)
				}
			}
		}
	}
	if f := c.lookupBuiltin(e.Name, len(e.Args)); f != nil {
		return c.compileCallPc(f, e.Args)
	}
	if fds, ok := builtinFuncDefs[e.Name]; ok {
		for _, fd := range fds {
			if len(fd.Args) == len(e.Args) {
				if err := c.compileFuncDef(fd, true); err != nil {
					return err
				}
				break
			}
		}
		if len(fds) == 0 {
			switch e.Name {
			case "_assign":
				c.compileAssign()
			case "_modify":
				c.compileModify()
			}
		}
		if f := c.lookupBuiltin(e.Name, len(e.Args)); f != nil {
			return c.compileCallPc(f, e.Args)
		}
	}
	if fn, ok := internalFuncs[e.Name]; ok && fn.accept(len(e.Args)) {
		switch e.Name {
		case "empty":
			c.append(&code{op: opbacktrack})
			return nil
		case "path":
			c.append(&code{op: oppathbegin})
			if err := c.compileCall(e.Name, e.Args); err != nil {
				return err
			}
			c.codes[len(c.codes)-1] = &code{op: oppathend}
			return nil
		case "builtins":
			return c.compileCallInternal(
				[3]any{c.funcBuiltins, 0, e.Name},
				e.Args,
				true,
				-1,
			)
		case "input":
			if c.inputIter == nil {
				return &inputNotAllowedError{}
			}
			return c.compileCallInternal(
				[3]any{c.funcInput, 0, e.Name},
				e.Args,
				true,
				-1,
			)
		case "modulemeta":
			return c.compileCallInternal(
				[3]any{c.funcModulemeta, 0, e.Name},
				e.Args,
				true,
				-1,
			)
		default:
			return c.compileCall(e.Name, e.Args)
		}
	}
	if fn, ok := c.customFuncs[e.Name]; ok && fn.accept(len(e.Args)) {
		if err := c.compileCallInternal(
			[3]any{fn.callback, len(e.Args), e.Name},
			e.Args,
			true,
			-1,
		); err != nil {
			return err
		}
		if fn.iter {
			c.append(&code{op: opiter})
		}
		return nil
	}
	return &funcNotFoundError{e}
}

// Appends the compiled code for the assignment operator (`=`) to maximize
// performance. Originally the operator was implemented as follows.
//
//	def _assign(p; $x): reduce path(p) as $q (.; setpath($q; $x));
//
// To overcome the difficulty of reducing allocations on `setpath`, we use the
// `allocator` type and track the allocated addresses during the reduction.
func (c *compiler) compileAssign() {
	defer c.appendBuiltin("_assign", 2)()
	scope := c.newScope()
	v, p := [2]int{scope.id, 0}, [2]int{scope.id, 1}
	x, a := [2]int{scope.id, 2}, [2]int{scope.id, 3}
	// Cannot reuse v, p due to backtracking in x.
	w, q := [2]int{scope.id, 4}, [2]int{scope.id, 5}
	c.appends(
		&code{op: opscope, v: [3]int{scope.id, 6, 2}},
		&code{op: opstore, v: v}, //                def _assign(p; $x):
		&code{op: opstore, v: p},
		&code{op: opstore, v: x},
		&code{op: opload, v: v},
		&code{op: opexpbegin},
		&code{op: opload, v: x},
		&code{op: opcallpc},
		&code{op: opstore, v: x},
		&code{op: opexpend},
		&code{op: oppush, v: nil},
		&code{op: opcall, v: [3]any{funcAllocator, 0, "_allocator"}},
		&code{op: opstore, v: a},
		&code{op: opload, v: v},
		&code{op: opfork, v: len(c.codes) + 30}, // reduce [L1]
		&code{op: opdup},
		&code{op: opstore, v: w},
		&code{op: oppathbegin}, // path(p)
		&code{op: opload, v: p},
		&code{op: opcallpc},
		&code{op: opload, v: w},
		&code{op: oppathend},
		&code{op: opstore, v: q}, //                as $q (.;
		&code{op: opload, v: a},  //                setpath($q; $x)
		&code{op: opload, v: x},
		&code{op: opload, v: q},
		&code{op: opload, v: w},
		&code{op: opcall, v: [3]any{funcSetpathWithAllocator, 3, "_setpath"}},
		&code{op: opstore, v: w},
		&code{op: opbacktrack}, //                  );
		&code{op: oppop},       //                  [L1]
		&code{op: opload, v: w},
		&code{op: opret},
	)
}

// Appends the compiled code for the update-assignment operator (`|=`) to
// maximize performance. We use the `allocator` type, just like `_assign/2`.
func (c *compiler) compileModify() {
	defer c.appendBuiltin("_modify", 2)()
	scope := c.newScope()
	v, p := [2]int{scope.id, 0}, [2]int{scope.id, 1}
	f, d := [2]int{scope.id, 2}, [2]int{scope.id, 3}
	a, l := [2]int{scope.id, 4}, [2]int{scope.id, 5}
	c.appends(
		&code{op: opscope, v: [3]int{scope.id, 6, 2}},
		&code{op: opstore, v: v}, //                def _modify(p; f):
		&code{op: opstore, v: p},
		&code{op: opstore, v: f},
		&code{op: oppush, v: []any{}},
		&code{op: opstore, v: d},
		&code{op: oppush, v: nil},
		&code{op: opcall, v: [3]any{funcAllocator, 0, "_allocator"}},
		&code{op: opstore, v: a},
		&code{op: opload, v: v},
		&code{op: opfork, v: len(c.codes) + 39}, // reduce [L1]
		&code{op: oppathbegin},                  // path(p)
		&code{op: opload, v: p},
		&code{op: opcallpc},
		&code{op: opload, v: v},
		&code{op: oppathend},
		&code{op: opstore, v: p},                // as $p (.;
		&code{op: opforklabel, v: l},            // label $l |
		&code{op: opload, v: v},                 //
		&code{op: opfork, v: len(c.codes) + 36}, // [L2]
		&code{op: oppop},                        // (getpath($p) |
		&code{op: opload, v: a},
		&code{op: opload, v: p},
		&code{op: opload, v: v},
		&code{op: opcall, v: [3]any{internalFuncs["getpath"].callback, 1, "getpath"}},
		&code{op: opload, v: f}, //                 f)
		&code{op: opcallpc},
		&code{op: opload, v: p}, //                 setpath($p; ...)
		&code{op: opload, v: v},
		&code{op: opcall, v: [3]any{funcSetpathWithAllocator, 3, "_setpath"}},
		&code{op: opstore, v: v},
		&code{op: opload, v: v},                 // ., break $l
		&code{op: opfork, v: len(c.codes) + 34}, // [L4]
		&code{op: opjump, v: len(c.codes) + 38}, // [L3]
		&code{op: opload, v: l},                 // [L4]
		&code{op: opcall, v: [3]any{funcBreak(""), 0, "_break"}},
		&code{op: opload, v: p},   //               append $p to $d [L2]
		&code{op: opappend, v: d}, //
		&code{op: opbacktrack},    //               ) |           [L3]
		&code{op: oppop},          //               delpaths($d); [L1]
		&code{op: opload, v: a},
		&code{op: opload, v: d},
		&code{op: opload, v: v},
		&code{op: opcall, v: [3]any{funcDelpathsWithAllocator, 2, "_delpaths"}},
		&code{op: opret},
	)
}

func (c *compiler) funcBuiltins(any, []any) any {
	type funcNameArity struct {
		name  string
		arity int
	}
	var xs []*funcNameArity
	for _, fds := range builtinFuncDefs {
		for _, fd := range fds {
			if fd.Name[0] != '_' {
				xs = append(xs, &funcNameArity{fd.Name, len(fd.Args)})
			}
		}
	}
	for name, fn := range internalFuncs {
		if name[0] != '_' {
			for i, cnt := 0, fn.argcount; cnt > 0; i, cnt = i+1, cnt>>1 {
				if cnt&1 > 0 {
					xs = append(xs, &funcNameArity{name, i})
				}
			}
		}
	}
	for name, fn := range c.customFuncs {
		if name[0] != '_' {
			for i, cnt := 0, fn.argcount; cnt > 0; i, cnt = i+1, cnt>>1 {
				if cnt&1 > 0 {
					xs = append(xs, &funcNameArity{name, i})
				}
			}
		}
	}
	sort.Slice(xs, func(i, j int) bool {
		return xs[i].name < xs[j].name ||
			xs[i].name == xs[j].name && xs[i].arity < xs[j].arity
	})
	ys := make([]any, len(xs))
	for i, x := range xs {
		ys[i] = x.name + "/" + strconv.Itoa(x.arity)
	}
	return ys
}

func (c *compiler) funcInput(any, []any) any {
	v, ok := c.inputIter.Next()
	if !ok {
		return errors.New("break")
	}
	return normalizeNumbers(v)
}

func (c *compiler) funcModulemeta(v any, _ []any) any {
	s, ok := v.(string)
	if !ok {
		return &funcTypeError{"modulemeta", v}
	}
	if c.moduleLoader == nil {
		return fmt.Errorf("cannot load module: %q", s)
	}
	var q *Query
	var err error
	if moduleLoader, ok := c.moduleLoader.(interface {
		LoadModuleWithMeta(string, map[string]any) (*Query, error)
	}); ok {
		if q, err = moduleLoader.LoadModuleWithMeta(s, nil); err != nil {
			return err
		}
	} else if moduleLoader, ok := c.moduleLoader.(interface {
		LoadModule(string) (*Query, error)
	}); ok {
		if q, err = moduleLoader.LoadModule(s); err != nil {
			return err
		}
	}
	meta := q.Meta.ToValue()
	if meta == nil {
		meta = make(map[string]any)
	}
	var deps []any
	for _, i := range q.Imports {
		v := i.Meta.ToValue()
		if v == nil {
			v = make(map[string]any)
		} else {
			for k := range v {
				// dirty hack to remove the internal fields
				if strings.HasPrefix(k, "$$") {
					delete(v, k)
				}
			}
		}
		if i.ImportPath == "" {
			v["relpath"] = i.IncludePath
		} else {
			v["relpath"] = i.ImportPath
		}
		if err != nil {
			return err
		}
		if i.ImportAlias != "" {
			v["as"] = strings.TrimPrefix(i.ImportAlias, "$")
		}
		v["is_data"] = strings.HasPrefix(i.ImportAlias, "$")
		deps = append(deps, v)
	}
	meta["deps"] = deps
	return meta
}

func (c *compiler) compileObject(e *Object) error {
	c.appendCodeInfo(e)
	if len(e.KeyVals) == 0 {
		c.append(&code{op: opconst, v: map[string]any{}})
		return nil
	}
	defer c.newScopeDepth()()
	v := c.newVariable()
	c.append(&code{op: opstore, v: v})
	pc := len(c.codes)
	for _, kv := range e.KeyVals {
		if err := c.compileObjectKeyVal(v, kv); err != nil {
			return err
		}
	}
	c.append(&code{op: opobject, v: len(e.KeyVals)})
	// optimize constant objects
	l := len(e.KeyVals)
	if pc+l*3+1 != len(c.codes) {
		return nil
	}
	for i := 0; i < l; i++ {
		if c.codes[pc+i*3].op != oppush ||
			c.codes[pc+i*3+1].op != opload ||
			c.codes[pc+i*3+2].op != opconst {
			return nil
		}
	}
	w := make(map[string]any, l)
	for i := 0; i < l; i++ {
		w[c.codes[pc+i*3].v.(string)] = c.codes[pc+i*3+2].v
	}
	c.codes[pc-1] = &code{op: opconst, v: w}
	c.codes = c.codes[:pc]
	return nil
}

func (c *compiler) compileObjectKeyVal(v [2]int, kv *ObjectKeyVal) error {
	if key := kv.Key; key != "" {
		if key[0] == '$' {
			if kv.Val == nil { // {$foo} == {foo:$foo}
				c.append(&code{op: oppush, v: key[1:]})
			}
			c.append(&code{op: opload, v: v})
			if err := c.compileFunc(&Func{Name: key}); err != nil {
				return err
			}
		} else {
			c.append(&code{op: oppush, v: key})
			if kv.Val == nil { // {foo} == {foo:.foo}
				c.append(&code{op: opload, v: v})
				c.append(&code{op: opindex, v: key})
			}
		}
	} else if key := kv.KeyString; key != nil {
		if key.Queries == nil {
			c.append(&code{op: oppush, v: key.Str})
			if kv.Val == nil { // {"foo"} == {"foo":.["foo"]}
				c.append(&code{op: opload, v: v})
				c.append(&code{op: opindex, v: key.Str})
			}
		} else {
			c.append(&code{op: opload, v: v})
			if err := c.compileString(key, nil); err != nil {
				return err
			}
			if kv.Val == nil {
				c.append(&code{op: opdup})
				c.append(&code{op: opload, v: v})
				c.append(&code{op: oppush, v: nil})
				// ref: compileCall
				c.append(&code{op: opcall, v: [3]any{internalFuncs["_index"].callback, 2, "_index"}})
			}
		}
	} else if kv.KeyQuery != nil {
		c.append(&code{op: opload, v: v})
		f := c.newScopeDepth()
		if err := c.compileQuery(kv.KeyQuery); err != nil {
			return err
		}
		f()
	}
	if kv.Val != nil {
		c.append(&code{op: opload, v: v})
		for _, e := range kv.Val.Queries {
			if err := c.compileQuery(e); err != nil {
				return err
			}
		}
	}
	return nil
}

func (c *compiler) compileArray(e *Array) error {
	c.appendCodeInfo(e)
	if e.Query == nil {
		c.append(&code{op: opconst, v: []any{}})
		return nil
	}
	c.append(&code{op: oppush, v: []any{}})
	arr := c.newVariable()
	c.append(&code{op: opstore, v: arr})
	pc := len(c.codes)
	setfork := c.lazy(func() *code {
		return &code{op: opfork, v: len(c.codes)}
	})
	defer c.newScopeDepth()()
	if err := c.compileQuery(e.Query); err != nil {
		return err
	}
	c.append(&code{op: opappend, v: arr})
	c.append(&code{op: opbacktrack})
	setfork()
	c.append(&code{op: oppop})
	c.append(&code{op: opload, v: arr})
	if e.Query.Op == OpPipe {
		return nil
	}
	// optimize constant arrays
	if (len(c.codes)-pc)%3 != 0 {
		return nil
	}
	l := (len(c.codes) - pc - 3) / 3
	for i := 0; i < l; i++ {
		if c.codes[pc+i].op != opfork ||
			c.codes[pc+i*2+l].op != opconst ||
			(i < l-1 && c.codes[pc+i*2+l+1].op != opjump) {
			return nil
		}
	}
	v := make([]any, l)
	for i := 0; i < l; i++ {
		v[i] = c.codes[pc+i*2+l].v
	}
	c.codes[pc-2] = &code{op: opconst, v: v}
	c.codes = c.codes[:pc-1]
	return nil
}

func (c *compiler) compileUnary(e *Unary) error {
	c.appendCodeInfo(e)
	if v := e.toNumber(); v != nil {
		c.append(&code{op: opconst, v: v})
		return nil
	}
	if err := c.compileTerm(e.Term); err != nil {
		return err
	}
	switch e.Op {
	case OpAdd:
		return c.compileCall("_plus", nil)
	case OpSub:
		return c.compileCall("_negate", nil)
	default:
		return fmt.Errorf("unexpected operator in Unary: %s", e.Op)
	}
}

func (c *compiler) compileFormat(format string, str *String) error {
	f := formatToFunc(format)
	if f == nil {
		f = &Func{
			Name: "format",
			Args: []*Query{{Term: &Term{Type: TermTypeString, Str: &String{Str: format[1:]}}}},
		}
	}
	if str == nil {
		return c.compileFunc(f)
	}
	return c.compileString(str, f)
}

func formatToFunc(format string) *Func {
	switch format {
	case "@text":
		return &Func{Name: "tostring"}
	case "@json":
		return &Func{Name: "tojson"}
	case "@html":
		return &Func{Name: "_tohtml"}
	case "@uri":
		return &Func{Name: "_touri"}
	case "@csv":
		return &Func{Name: "_tocsv"}
	case "@tsv":
		return &Func{Name: "_totsv"}
	case "@sh":
		return &Func{Name: "_tosh"}
	case "@base64":
		return &Func{Name: "_tobase64"}
	case "@base64d":
		return &Func{Name: "_tobase64d"}
	default:
		return nil
	}
}

func (c *compiler) compileString(s *String, f *Func) error {
	if s.Queries == nil {
		c.append(&code{op: opconst, v: s.Str})
		return nil
	}
	if f == nil {
		f = &Func{Name: "tostring"}
	}
	var q *Query
	for _, e := range s.Queries {
		if e.Term.Str == nil {
			e = &Query{Left: e, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: f}}}
		}
		if q == nil {
			q = e
		} else {
			q = &Query{Left: q, Op: OpAdd, Right: e}
		}
	}
	return c.compileQuery(q)
}

func (c *compiler) compileTermSuffix(e *Term, s *Suffix) error {
	if s.Index != nil {
		return c.compileIndex(e, s.Index)
	} else if s.Iter {
		if err := c.compileTerm(e); err != nil {
			return err
		}
		c.append(&code{op: opiter})
		return nil
	} else if s.Optional {
		if len(e.SuffixList) > 0 {
			if u := e.SuffixList[len(e.SuffixList)-1].toTerm(); u != nil {
				// no need to clone (ref: compileTerm)
				e.SuffixList = e.SuffixList[:len(e.SuffixList)-1]
				if err := c.compileTerm(e); err != nil {
					return err
				}
				e = u
			}
		}
		return c.compileTry(&Try{Body: &Query{Term: e}})
	} else if s.Bind != nil {
		return c.compileBind(e, s.Bind)
	} else {
		return fmt.Errorf("invalid suffix: %s", s)
	}
}

func (c *compiler) compileCall(name string, args []*Query) error {
	fn := internalFuncs[name]
	var indexing int
	switch name {
	case "_index", "_slice":
		indexing = 1
	case "getpath":
		indexing = 0
	default:
		indexing = -1
	}
	if err := c.compileCallInternal(
		[3]any{fn.callback, len(args), name},
		args,
		true,
		indexing,
	); err != nil {
		return err
	}
	if fn.iter {
		c.append(&code{op: opiter})
	}
	return nil
}

func (c *compiler) compileCallPc(fn *funcinfo, args []*Query) error {
	return c.compileCallInternal(fn.pc, args, false, -1)
}

func (c *compiler) compileCallInternal(
	fn any, args []*Query, internal bool, indexing int,
) error {
	if len(args) == 0 {
		c.append(&code{op: opcall, v: fn})
		return nil
	}
	v := c.newVariable()
	c.append(&code{op: opstore, v: v})
	if indexing >= 0 {
		c.append(&code{op: opexpbegin})
	}
	for i := len(args) - 1; i >= 0; i-- {
		pc := len(c.codes) + 1 // skip opjump (ref: compileFuncDef)
		name := "lambda:" + strconv.Itoa(pc)
		if err := c.compileFuncDef(&FuncDef{Name: name, Body: args[i]}, false); err != nil {
			return err
		}
		if internal {
			switch len(c.codes) - pc {
			case 2: // optimize identity argument (opscope, opret)
				j := len(c.codes) - 3
				c.codes[j] = &code{op: opload, v: v}
				c.codes = c.codes[:j+1]
				s := c.scopes[len(c.scopes)-1]
				s.funcs = s.funcs[:len(s.funcs)-1]
				c.deleteCodeInfo(name)
			case 3: // optimize one instruction argument (opscope, opX, opret)
				j := len(c.codes) - 4
				if c.codes[j+2].op == opconst {
					c.codes[j] = &code{op: oppush, v: c.codes[j+2].v}
					c.codes = c.codes[:j+1]
				} else {
					c.codes[j] = &code{op: opload, v: v}
					c.codes[j+1] = c.codes[j+2]
					c.codes = c.codes[:j+2]
				}
				s := c.scopes[len(c.scopes)-1]
				s.funcs = s.funcs[:len(s.funcs)-1]
				c.deleteCodeInfo(name)
			default:
				c.append(&code{op: opload, v: v})
				c.append(&code{op: oppushpc, v: pc})
				c.append(&code{op: opcallpc})
			}
		} else {
			c.append(&code{op: oppushpc, v: pc})
		}
		if i == indexing {
			if c.codes[len(c.codes)-2].op == opexpbegin {
				c.codes[len(c.codes)-2] = c.codes[len(c.codes)-1]
				c.codes = c.codes[:len(c.codes)-1]
			} else {
				c.append(&code{op: opexpend})
			}
		}
	}
	if indexing > 0 {
		c.append(&code{op: oppush, v: nil})
	} else {
		c.append(&code{op: opload, v: v})
	}
	c.append(&code{op: opcall, v: fn})
	return nil
}

func (c *compiler) append(code *code) {
	c.codes = append(c.codes, code)
}

func (c *compiler) appends(codes ...*code) {
	c.codes = append(c.codes, codes...)
}

func (c *compiler) lazy(f func() *code) func() {
	i := len(c.codes)
	c.codes = append(c.codes, nil)
	return func() { c.codes[i] = f() }
}

func (c *compiler) optimizeTailRec() {
	var pcs []int
	scopes := map[int]bool{}
L:
	for i, l := 0, len(c.codes); i < l; i++ {
		switch c.codes[i].op {
		case opscope:
			pcs = append(pcs, i)
			if v := c.codes[i].v.([3]int); v[2] == 0 {
				scopes[i] = v[1] == 0
			}
		case opcall:
			var canjump bool
			if j, ok := c.codes[i].v.(int); !ok ||
				len(pcs) == 0 || pcs[len(pcs)-1] != j {
				break
			} else if canjump, ok = scopes[j]; !ok {
				break
			}
			for j := i + 1; j < l; {
				switch c.codes[j].op {
				case opjump:
					j = c.codes[j].v.(int)
				case opret:
					if canjump {
						c.codes[i].op = opjump
						c.codes[i].v = pcs[len(pcs)-1] + 1
					} else {
						c.codes[i].op = opcallrec
					}
					continue L
				default:
					continue L
				}
			}
		case opret:
			if len(pcs) == 0 {
				break L
			}
			pcs = pcs[:len(pcs)-1]
		}
	}
}

func (c *compiler) optimizeCodeOps() {
	for i, next := len(c.codes)-1, (*code)(nil); i >= 0; i-- {
		code := c.codes[i]
		switch code.op {
		case oppush, opdup, opload:
			switch next.op {
			case oppop:
				code.op = opnop
				next.op = opnop
			case opconst:
				code.op = opnop
				next.op = oppush
			}
		case opjump, opjumpifnot:
			if j := code.v.(int); j-1 == i {
				code.op = opnop
			} else if next = c.codes[j]; next.op == opjump {
				code.v = next.v
			}
		}
		next = code
	}
}
   07070100000799000081A4000000000000000000000001645E367C0000108A000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/debug.go   //go:build gojq_debug
// +build gojq_debug

package gojq

import (
	"fmt"
	"io"
	"os"
	"strconv"
	"strings"
)

var (
	debug    bool
	debugOut io.Writer
)

func init() {
	if out := os.Getenv("GOJQ_DEBUG"); out != "" {
		debug = true
		if out == "stdout" {
			debugOut = os.Stdout
		} else {
			debugOut = os.Stderr
		}
	}
}

type codeinfo struct {
	name string
	pc   int
}

func (c *compiler) appendCodeInfo(x any) {
	if !debug {
		return
	}
	var name string
	switch x := x.(type) {
	case string:
		name = x
	default:
		name = fmt.Sprint(x)
	}
	var diff int
	if c.codes[len(c.codes)-1] != nil && c.codes[len(c.codes)-1].op == opret && strings.HasPrefix(name, "end of ") {
		diff = -1
	}
	c.codeinfos = append(c.codeinfos, codeinfo{name, len(c.codes) + diff})
}

func (c *compiler) deleteCodeInfo(name string) {
	for i := 0; i < len(c.codeinfos); i++ {
		if strings.HasSuffix(c.codeinfos[i].name, name) {
			copy(c.codeinfos[i:], c.codeinfos[i+1:])
			c.codeinfos = c.codeinfos[:len(c.codeinfos)-1]
			i--
		}
	}
}

func (env *env) lookupInfoName(pc int) string {
	var name string
	for _, ci := range env.codeinfos {
		if ci.pc == pc {
			if name != "" {
				name += ", "
			}
			name += ci.name
		}
	}
	return name
}

func (env *env) debugCodes() {
	if !debug {
		return
	}
	for i, c := range env.codes {
		pc := i
		switch c.op {
		case opcall, opcallrec:
			if x, ok := c.v.(int); ok {
				pc = x
			}
		case opjump:
			x := c.v.(int)
			if x > 0 && env.codes[x-1].op == opscope {
				pc = x - 1
			}
		}
		var s string
		if name := env.lookupInfoName(pc); name != "" {
			switch c.op {
			case opcall, opcallrec, opjump:
				if !strings.HasPrefix(name, "module ") {
					s = "\t## call " + name
					break
				}
				fallthrough
			default:
				s = "\t## " + name
			}
		}
		fmt.Fprintf(debugOut, "\t%d\t%s%s%s\n", i, formatOp(c.op, false), debugOperand(c), s)
	}
	fmt.Fprintln(debugOut, "\t"+strings.Repeat("-", 40)+"+")
}

func (env *env) debugState(pc int, backtrack bool) {
	if !debug {
		return
	}
	var sb strings.Builder
	c := env.codes[pc]
	fmt.Fprintf(&sb, "\t%d\t%s%s\t|", pc, formatOp(c.op, backtrack), debugOperand(c))
	var xs []int
	for i := env.stack.index; i >= 0; i = env.stack.data[i].next {
		xs = append(xs, i)
	}
	for i := len(xs) - 1; i >= 0; i-- {
		sb.WriteString("\t")
		sb.WriteString(debugValue(env.stack.data[xs[i]].value))
	}
	switch c.op {
	case opcall, opcallrec:
		if x, ok := c.v.(int); ok {
			pc = x
		}
	case opjump:
		x := c.v.(int)
		if x > 0 && env.codes[x-1].op == opscope {
			pc = x - 1
		}
	}
	if name := env.lookupInfoName(pc); name != "" {
		switch c.op {
		case opcall, opcallrec, opjump:
			if !strings.HasPrefix(name, "module ") {
				sb.WriteString("\t\t\t## call " + name)
				break
			}
			fallthrough
		default:
			sb.WriteString("\t\t\t## " + name)
		}
	}
	fmt.Fprintln(debugOut, sb.String())
}

func formatOp(c opcode, backtrack bool) string {
	if backtrack {
		return c.String() + " <backtrack>" + strings.Repeat(" ", 13-len(c.String()))
	}
	return c.String() + strings.Repeat(" ", 25-len(c.String()))
}

func (env *env) debugForks(pc int, op string) {
	if !debug {
		return
	}
	var sb strings.Builder
	for i, v := range env.forks {
		if i > 0 {
			sb.WriteByte('\t')
		}
		if i == len(env.forks)-1 {
			sb.WriteByte('<')
		}
		fmt.Fprintf(&sb, "%d, %s", v.pc, debugValue(env.stack.data[v.stackindex].value))
		if i == len(env.forks)-1 {
			sb.WriteByte('>')
		}
	}
	fmt.Fprintf(debugOut, "\t-\t%s%s%d\t|\t%s\n", op, strings.Repeat(" ", 22), pc, sb.String())
}

func debugOperand(c *code) string {
	switch c.op {
	case opcall, opcallrec:
		switch v := c.v.(type) {
		case int:
			return strconv.Itoa(v)
		case [3]any:
			return fmt.Sprintf("%s/%d", v[2], v[1])
		default:
			panic(c)
		}
	default:
		return debugValue(c.v)
	}
}

func debugValue(v any) string {
	switch v := v.(type) {
	case Iter:
		return fmt.Sprintf("gojq.Iter(%#v)", v)
	case []pathValue:
		return fmt.Sprintf("[]gojq.pathValue(%v)", v)
	case [2]int:
		return fmt.Sprintf("[%d,%d]", v[0], v[1])
	case [3]int:
		return fmt.Sprintf("[%d,%d,%d]", v[0], v[1], v[2])
	case [3]any:
		return fmt.Sprintf("[%v,%v,%v]", v[0], v[1], v[2])
	case allocator:
		return fmt.Sprintf("%v", v)
	default:
		return Preview(v)
	}
}
  0707010000079A000081A4000000000000000000000001645E367C00000F6C000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/encoder.go package gojq

import (
	"bytes"
	"fmt"
	"io"
	"math"
	"math/big"
	"sort"
	"strconv"
	"strings"
	"unicode/utf8"
)

// Marshal returns the jq-flavored JSON encoding of v.
//
// This method accepts only limited types (nil, bool, int, float64, *big.Int,
// string, []any, and map[string]any) because these are the possible types a
// gojq iterator can emit. This method marshals NaN to null, truncates
// infinities to (+|-) math.MaxFloat64, uses \b and \f in strings, and does not
// escape '<', '>', '&', '\u2028', and '\u2029'. These behaviors are based on
// the marshaler of jq command, and different from json.Marshal in the Go
// standard library. Note that the result is not safe to embed in HTML.
func Marshal(v any) ([]byte, error) {
	var b bytes.Buffer
	(&encoder{w: &b}).encode(v)
	return b.Bytes(), nil
}

func jsonMarshal(v any) string {
	var sb strings.Builder
	(&encoder{w: &sb}).encode(v)
	return sb.String()
}

func jsonEncodeString(sb *strings.Builder, v string) {
	(&encoder{w: sb}).encodeString(v)
}

type encoder struct {
	w interface {
		io.Writer
		io.ByteWriter
		io.StringWriter
	}
	buf [64]byte
}

func (e *encoder) encode(v any) {
	switch v := v.(type) {
	case nil:
		e.w.WriteString("null")
	case bool:
		if v {
			e.w.WriteString("true")
		} else {
			e.w.WriteString("false")
		}
	case int:
		e.w.Write(strconv.AppendInt(e.buf[:0], int64(v), 10))
	case float64:
		e.encodeFloat64(v)
	case *big.Int:
		e.w.Write(v.Append(e.buf[:0], 10))
	case string:
		e.encodeString(v)
	case []any:
		e.encodeArray(v)
	case map[string]any:
		e.encodeObject(v)
	default:
		panic(fmt.Sprintf("invalid type: %[1]T (%[1]v)", v))
	}
}

// ref: floatEncoder in encoding/json
func (e *encoder) encodeFloat64(f float64) {
	if math.IsNaN(f) {
		e.w.WriteString("null")
		return
	}
	if f >= math.MaxFloat64 {
		f = math.MaxFloat64
	} else if f <= -math.MaxFloat64 {
		f = -math.MaxFloat64
	}
	format := byte('f')
	if x := math.Abs(f); x != 0 && x < 1e-6 || x >= 1e21 {
		format = 'e'
	}
	buf := strconv.AppendFloat(e.buf[:0], f, format, -1, 64)
	if format == 'e' {
		// clean up e-09 to e-9
		if n := len(buf); n >= 4 && buf[n-4] == 'e' && buf[n-3] == '-' && buf[n-2] == '0' {
			buf[n-2] = buf[n-1]
			buf = buf[:n-1]
		}
	}
	e.w.Write(buf)
}

// ref: encodeState#string in encoding/json
func (e *encoder) encodeString(s string) {
	e.w.WriteByte('"')
	start := 0
	for i := 0; i < len(s); {
		if b := s[i]; b < utf8.RuneSelf {
			if ' ' <= b && b <= '~' && b != '"' && b != '\\' {
				i++
				continue
			}
			if start < i {
				e.w.WriteString(s[start:i])
			}
			switch b {
			case '"':
				e.w.WriteString(`\"`)
			case '\\':
				e.w.WriteString(`\\`)
			case '\b':
				e.w.WriteString(`\b`)
			case '\f':
				e.w.WriteString(`\f`)
			case '\n':
				e.w.WriteString(`\n`)
			case '\r':
				e.w.WriteString(`\r`)
			case '\t':
				e.w.WriteString(`\t`)
			default:
				const hex = "0123456789abcdef"
				e.w.WriteString(`\u00`)
				e.w.WriteByte(hex[b>>4])
				e.w.WriteByte(hex[b&0xF])
			}
			i++
			start = i
			continue
		}
		c, size := utf8.DecodeRuneInString(s[i:])
		if c == utf8.RuneError && size == 1 {
			if start < i {
				e.w.WriteString(s[start:i])
			}
			e.w.WriteString(`\ufffd`)
			i += size
			start = i
			continue
		}
		i += size
	}
	if start < len(s) {
		e.w.WriteString(s[start:])
	}
	e.w.WriteByte('"')
}

func (e *encoder) encodeArray(vs []any) {
	e.w.WriteByte('[')
	for i, v := range vs {
		if i > 0 {
			e.w.WriteByte(',')
		}
		e.encode(v)
	}
	e.w.WriteByte(']')
}

func (e *encoder) encodeObject(vs map[string]any) {
	e.w.WriteByte('{')
	type keyVal struct {
		key string
		val any
	}
	kvs := make([]keyVal, len(vs))
	var i int
	for k, v := range vs {
		kvs[i] = keyVal{k, v}
		i++
	}
	sort.Slice(kvs, func(i, j int) bool {
		return kvs[i].key < kvs[j].key
	})
	for i, kv := range kvs {
		if i > 0 {
			e.w.WriteByte(',')
		}
		e.encodeString(kv.key)
		e.w.WriteByte(':')
		e.encode(kv.val)
	}
	e.w.WriteByte('}')
}
0707010000079B000081A4000000000000000000000001645E367C000002E0000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/env.go package gojq

import "context"

type env struct {
	pc        int
	stack     *stack
	paths     *stack
	scopes    *scopeStack
	values    []any
	codes     []*code
	codeinfos []codeinfo
	forks     []fork
	backtrack bool
	offset    int
	expdepth  int
	label     int
	args      [32]any // len(env.args) > maxarity
	ctx       context.Context
}

func newEnv(ctx context.Context) *env {
	return &env{
		stack:  newStack(),
		paths:  newStack(),
		scopes: newScopeStack(),
		ctx:    ctx,
	}
}

type scope struct {
	id         int
	offset     int
	pc         int
	saveindex  int
	outerindex int
}

type fork struct {
	pc         int
	stackindex int
	stacklimit int
	scopeindex int
	scopelimit int
	pathindex  int
	pathlimit  int
	expdepth   int
}
0707010000079C000081A4000000000000000000000001645E367C00001B30000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/error.go   package gojq

import "strconv"

// ValueError is an interface for errors with a value for internal function.
// Return an error implementing this interface when you want to catch error
// values (not error messages) by try-catch, just like built-in error function.
// Refer to [WithFunction] to add a custom internal function.
type ValueError interface {
	error
	Value() any
}

type expectedObjectError struct {
	v any
}

func (err *expectedObjectError) Error() string {
	return "expected an object but got: " + typeErrorPreview(err.v)
}

type expectedArrayError struct {
	v any
}

func (err *expectedArrayError) Error() string {
	return "expected an array but got: " + typeErrorPreview(err.v)
}

type expectedStringError struct {
	v any
}

func (err *expectedStringError) Error() string {
	return "expected a string but got: " + typeErrorPreview(err.v)
}

type iteratorError struct {
	v any
}

func (err *iteratorError) Error() string {
	return "cannot iterate over: " + typeErrorPreview(err.v)
}

type arrayIndexTooLargeError struct {
	v any
}

func (err *arrayIndexTooLargeError) Error() string {
	return "array index too large: " + Preview(err.v)
}

type objectKeyNotStringError struct {
	v any
}

func (err *objectKeyNotStringError) Error() string {
	return "expected a string for object key but got: " + typeErrorPreview(err.v)
}

type arrayIndexNotNumberError struct {
	v any
}

func (err *arrayIndexNotNumberError) Error() string {
	return "expected a number for indexing an array but got: " + typeErrorPreview(err.v)
}

type stringIndexNotNumberError struct {
	v any
}

func (err *stringIndexNotNumberError) Error() string {
	return "expected a number for indexing a string but got: " + typeErrorPreview(err.v)
}

type expectedStartEndError struct {
	v any
}

func (err *expectedStartEndError) Error() string {
	return `expected "start" and "end" for slicing but got: ` + typeErrorPreview(err.v)
}

type lengthMismatchError struct {
	name string
	v, x []any
}

func (err *lengthMismatchError) Error() string {
	return "length mismatch in " + err.name + ": " + typeErrorPreview(err.v) + ", " + typeErrorPreview(err.x)
}

type inputNotAllowedError struct{}

func (*inputNotAllowedError) Error() string {
	return "input(s)/0 is not allowed"
}

type funcNotFoundError struct {
	f *Func
}

func (err *funcNotFoundError) Error() string {
	return "function not defined: " + err.f.Name + "/" + strconv.Itoa(len(err.f.Args))
}

type funcTypeError struct {
	name string
	v    any
}

func (err *funcTypeError) Error() string {
	return err.name + " cannot be applied to: " + typeErrorPreview(err.v)
}

type exitCodeError struct {
	value any
	code  int
	halt  bool
}

func (err *exitCodeError) Error() string {
	if s, ok := err.value.(string); ok {
		return "error: " + s
	}
	return "error: " + jsonMarshal(err.value)
}

func (err *exitCodeError) IsEmptyError() bool {
	return err.value == nil
}

func (err *exitCodeError) Value() any {
	return err.value
}

func (err *exitCodeError) ExitCode() int {
	return err.code
}

func (err *exitCodeError) IsHaltError() bool {
	return err.halt
}

type containsTypeError struct {
	l, r any
}

func (err *containsTypeError) Error() string {
	return "cannot check contains(" + Preview(err.r) + "): " + typeErrorPreview(err.l)
}

type hasKeyTypeError struct {
	l, r any
}

func (err *hasKeyTypeError) Error() string {
	return "cannot check whether " + typeErrorPreview(err.l) + " has a key: " + typeErrorPreview(err.r)
}

type flattenDepthError struct {
	v float64
}

func (err *flattenDepthError) Error() string {
	return "flatten depth must not be negative: " + typeErrorPreview(err.v)
}

type joinTypeError struct {
	v any
}

func (err *joinTypeError) Error() string {
	return "cannot join: " + typeErrorPreview(err.v)
}

type unaryTypeError struct {
	name string
	v    any
}

func (err *unaryTypeError) Error() string {
	return "cannot " + err.name + ": " + typeErrorPreview(err.v)
}

type binopTypeError struct {
	name string
	l, r any
}

func (err *binopTypeError) Error() string {
	return "cannot " + err.name + ": " + typeErrorPreview(err.l) + " and " + typeErrorPreview(err.r)
}

type zeroDivisionError struct {
	l, r any
}

func (err *zeroDivisionError) Error() string {
	return "cannot divide " + typeErrorPreview(err.l) + " by: " + typeErrorPreview(err.r)
}

type zeroModuloError struct {
	l, r any
}

func (err *zeroModuloError) Error() string {
	return "cannot modulo " + typeErrorPreview(err.l) + " by: " + typeErrorPreview(err.r)
}

type formatNotFoundError struct {
	n string
}

func (err *formatNotFoundError) Error() string {
	return "format not defined: " + err.n
}

type formatRowError struct {
	typ string
	v   any
}

func (err *formatRowError) Error() string {
	return "@" + err.typ + " cannot format an array including: " + typeErrorPreview(err.v)
}

type tooManyVariableValuesError struct{}

func (err *tooManyVariableValuesError) Error() string {
	return "too many variable values provided"
}

type expectedVariableError struct {
	n string
}

func (err *expectedVariableError) Error() string {
	return "variable defined but not bound: " + err.n
}

type variableNotFoundError struct {
	n string
}

func (err *variableNotFoundError) Error() string {
	return "variable not defined: " + err.n
}

type variableNameError struct {
	n string
}

func (err *variableNameError) Error() string {
	return "invalid variable name: " + err.n
}

type breakError struct {
	n string
	v any
}

func (err *breakError) Error() string {
	return "label not defined: " + err.n
}

func (err *breakError) ExitCode() int {
	return 3
}

type tryEndError struct {
	err error
}

func (err *tryEndError) Error() string {
	return err.err.Error()
}

type invalidPathError struct {
	v any
}

func (err *invalidPathError) Error() string {
	return "invalid path against: " + typeErrorPreview(err.v)
}

type invalidPathIterError struct {
	v any
}

func (err *invalidPathIterError) Error() string {
	return "invalid path on iterating against: " + typeErrorPreview(err.v)
}

type getpathError struct {
	v, path any
}

func (err *getpathError) Error() string {
	return "cannot getpath with " + Preview(err.path) + " against: " + typeErrorPreview(err.v)
}

type queryParseError struct {
	fname, contents string
	err             error
}

func (err *queryParseError) QueryParseError() (string, string, error) {
	return err.fname, err.contents, err.err
}

func (err *queryParseError) Error() string {
	return "invalid query: " + err.fname + ": " + err.err.Error()
}

type jsonParseError struct {
	fname, contents string
	err             error
}

func (err *jsonParseError) JSONParseError() (string, string, error) {
	return err.fname, err.contents, err.err
}

func (err *jsonParseError) Error() string {
	return "invalid json: " + err.fname + ": " + err.err.Error()
}

func typeErrorPreview(v any) string {
	switch v.(type) {
	case nil:
		return "null"
	case Iter:
		return "gojq.Iter"
	default:
		return TypeOf(v) + " (" + Preview(v) + ")"
	}
}
0707010000079D000081A4000000000000000000000001645E367C000025E4000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/execute.go package gojq

import (
	"context"
	"math"
	"reflect"
	"sort"
)

func (env *env) execute(bc *Code, v any, vars ...any) Iter {
	env.codes = bc.codes
	env.codeinfos = bc.codeinfos
	env.push(v)
	for i := len(vars) - 1; i >= 0; i-- {
		env.push(vars[i])
	}
	env.debugCodes()
	return env
}

func (env *env) Next() (any, bool) {
	var err error
	pc, callpc, index := env.pc, len(env.codes)-1, -1
	backtrack, hasCtx := env.backtrack, env.ctx != context.Background()
	defer func() { env.pc, env.backtrack = pc, true }()
loop:
	for ; pc < len(env.codes); pc++ {
		env.debugState(pc, backtrack)
		code := env.codes[pc]
		if hasCtx {
			select {
			case <-env.ctx.Done():
				pc, env.forks = len(env.codes), nil
				return env.ctx.Err(), true
			default:
			}
		}
		switch code.op {
		case opnop:
			// nop
		case oppush:
			env.push(code.v)
		case oppop:
			env.pop()
		case opdup:
			v := env.pop()
			env.push(v)
			env.push(v)
		case opconst:
			env.pop()
			env.push(code.v)
		case opload:
			env.push(env.values[env.index(code.v.([2]int))])
		case opstore:
			env.values[env.index(code.v.([2]int))] = env.pop()
		case opobject:
			if backtrack {
				break loop
			}
			n := code.v.(int)
			m := make(map[string]any, n)
			for i := 0; i < n; i++ {
				v, k := env.pop(), env.pop()
				s, ok := k.(string)
				if !ok {
					err = &objectKeyNotStringError{k}
					break loop
				}
				m[s] = v
			}
			env.push(m)
		case opappend:
			i := env.index(code.v.([2]int))
			env.values[i] = append(env.values[i].([]any), env.pop())
		case opfork:
			if backtrack {
				if err != nil {
					break loop
				}
				pc, backtrack = code.v.(int), false
				goto loop
			}
			env.pushfork(pc)
		case opforktrybegin:
			if backtrack {
				if err == nil {
					break loop
				}
				switch er := err.(type) {
				case *tryEndError:
					err = er.err
					break loop
				case *breakError:
					break loop
				case ValueError:
					if er, ok := er.(*exitCodeError); ok && er.halt {
						break loop
					}
					if v := er.Value(); v != nil {
						env.pop()
						env.push(v)
					} else {
						err = nil
						break loop
					}
				default:
					env.pop()
					env.push(err.Error())
				}
				pc, backtrack, err = code.v.(int), false, nil
				goto loop
			}
			env.pushfork(pc)
		case opforktryend:
			if backtrack {
				if err != nil {
					err = &tryEndError{err}
				}
				break loop
			}
			env.pushfork(pc)
		case opforkalt:
			if backtrack {
				if err == nil {
					break loop
				}
				pc, backtrack, err = code.v.(int), false, nil
				goto loop
			}
			env.pushfork(pc)
		case opforklabel:
			if backtrack {
				label := env.pop()
				if e, ok := err.(*breakError); ok && e.v == label {
					err = nil
				}
				break loop
			}
			env.push(env.label)
			env.pushfork(pc)
			env.pop()
			env.values[env.index(code.v.([2]int))] = env.label
			env.label++
		case opbacktrack:
			break loop
		case opjump:
			pc = code.v.(int)
			goto loop
		case opjumpifnot:
			if v := env.pop(); v == nil || v == false {
				pc = code.v.(int)
				goto loop
			}
		case opindex, opindexarray:
			if backtrack {
				break loop
			}
			p, v := code.v, env.pop()
			if code.op == opindexarray && v != nil {
				if _, ok := v.([]any); !ok {
					err = &expectedArrayError{v}
					break loop
				}
			}
			w := funcIndex2(nil, v, p)
			if e, ok := w.(error); ok {
				err = e
				break loop
			}
			env.push(w)
			if !env.paths.empty() && env.expdepth == 0 {
				if !env.pathIntact(v) {
					err = &invalidPathError{v}
					break loop
				}
				env.paths.push(pathValue{path: p, value: w})
			}
		case opcall:
			if backtrack {
				break loop
			}
			switch v := code.v.(type) {
			case int:
				pc, callpc, index = v, pc, env.scopes.index
				goto loop
			case [3]any:
				argcnt := v[1].(int)
				x, args := env.pop(), env.args[:argcnt]
				for i := 0; i < argcnt; i++ {
					args[i] = env.pop()
				}
				w := v[0].(func(any, []any) any)(x, args)
				if e, ok := w.(error); ok {
					if er, ok := e.(*exitCodeError); !ok || er.value != nil || er.halt {
						err = e
					}
					break loop
				}
				env.push(w)
				if !env.paths.empty() && env.expdepth == 0 {
					switch v[2].(string) {
					case "_index":
						if x = args[0]; !env.pathIntact(x) {
							err = &invalidPathError{x}
							break loop
						}
						env.paths.push(pathValue{path: args[1], value: w})
					case "_slice":
						if x = args[0]; !env.pathIntact(x) {
							err = &invalidPathError{x}
							break loop
						}
						env.paths.push(pathValue{
							path:  map[string]any{"start": args[2], "end": args[1]},
							value: w,
						})
					case "getpath":
						if !env.pathIntact(x) {
							err = &invalidPathError{x}
							break loop
						}
						for _, p := range args[0].([]any) {
							env.paths.push(pathValue{path: p, value: w})
						}
					}
				}
			default:
				panic(v)
			}
		case opcallrec:
			pc, callpc, index = code.v.(int), -1, env.scopes.index
			goto loop
		case oppushpc:
			env.push([2]int{code.v.(int), env.scopes.index})
		case opcallpc:
			xs := env.pop().([2]int)
			pc, callpc, index = xs[0], pc, xs[1]
			goto loop
		case opscope:
			xs := code.v.([3]int)
			var saveindex, outerindex int
			if index == env.scopes.index {
				if callpc >= 0 {
					saveindex = index
				} else {
					callpc, saveindex = env.popscope()
				}
			} else {
				saveindex, _ = env.scopes.save()
				env.scopes.index = index
			}
			if outerindex = index; outerindex >= 0 {
				if s := env.scopes.data[outerindex].value; s.id == xs[0] {
					outerindex = s.outerindex
				}
			}
			env.scopes.push(scope{xs[0], env.offset, callpc, saveindex, outerindex})
			env.offset += xs[1]
			if env.offset > len(env.values) {
				vs := make([]any, env.offset*2)
				copy(vs, env.values)
				env.values = vs
			}
		case opret:
			if backtrack {
				break loop
			}
			pc, env.scopes.index = env.popscope()
			if env.scopes.empty() {
				return env.pop(), true
			}
		case opiter:
			if err != nil {
				break loop
			}
			backtrack = false
			var xs []pathValue
			switch v := env.pop().(type) {
			case []pathValue:
				xs = v
			case []any:
				if !env.paths.empty() && env.expdepth == 0 && !env.pathIntact(v) {
					err = &invalidPathIterError{v}
					break loop
				}
				if len(v) == 0 {
					break loop
				}
				xs = make([]pathValue, len(v))
				for i, v := range v {
					xs[i] = pathValue{path: i, value: v}
				}
			case map[string]any:
				if !env.paths.empty() && env.expdepth == 0 && !env.pathIntact(v) {
					err = &invalidPathIterError{v}
					break loop
				}
				if len(v) == 0 {
					break loop
				}
				xs = make([]pathValue, len(v))
				var i int
				for k, v := range v {
					xs[i] = pathValue{path: k, value: v}
					i++
				}
				sort.Slice(xs, func(i, j int) bool {
					return xs[i].path.(string) < xs[j].path.(string)
				})
			case Iter:
				if w, ok := v.Next(); ok {
					env.push(v)
					env.pushfork(pc)
					env.pop()
					if e, ok := w.(error); ok {
						err = e
						break loop
					}
					env.push(w)
					continue
				}
				break loop
			default:
				err = &iteratorError{v}
				env.push(emptyIter{})
				break loop
			}
			if len(xs) > 1 {
				env.push(xs[1:])
				env.pushfork(pc)
				env.pop()
			}
			env.push(xs[0].value)
			if !env.paths.empty() && env.expdepth == 0 {
				env.paths.push(xs[0])
			}
		case opexpbegin:
			env.expdepth++
		case opexpend:
			env.expdepth--
		case oppathbegin:
			env.paths.push(env.expdepth)
			env.paths.push(pathValue{value: env.stack.top()})
			env.expdepth = 0
		case oppathend:
			if backtrack {
				break loop
			}
			env.pop()
			if v := env.pop(); !env.pathIntact(v) {
				err = &invalidPathError{v}
				break loop
			}
			env.push(env.poppaths())
			env.expdepth = env.paths.pop().(int)
		default:
			panic(code.op)
		}
	}
	if len(env.forks) > 0 {
		pc, backtrack = env.popfork(), true
		goto loop
	}
	if err != nil {
		return err, true
	}
	return nil, false
}

func (env *env) push(v any) {
	env.stack.push(v)
}

func (env *env) pop() any {
	return env.stack.pop()
}

func (env *env) popscope() (int, int) {
	free := env.scopes.index > env.scopes.limit
	s := env.scopes.pop()
	if free {
		env.offset = s.offset
	}
	return s.pc, s.saveindex
}

func (env *env) pushfork(pc int) {
	f := fork{pc: pc, expdepth: env.expdepth}
	f.stackindex, f.stacklimit = env.stack.save()
	f.scopeindex, f.scopelimit = env.scopes.save()
	f.pathindex, f.pathlimit = env.paths.save()
	env.forks = append(env.forks, f)
	env.debugForks(pc, ">>>")
}

func (env *env) popfork() int {
	f := env.forks[len(env.forks)-1]
	env.debugForks(f.pc, "<<<")
	env.forks, env.expdepth = env.forks[:len(env.forks)-1], f.expdepth
	env.stack.restore(f.stackindex, f.stacklimit)
	env.scopes.restore(f.scopeindex, f.scopelimit)
	env.paths.restore(f.pathindex, f.pathlimit)
	return f.pc
}

func (env *env) index(v [2]int) int {
	for id, i := v[0], env.scopes.index; i >= 0; {
		s := env.scopes.data[i].value
		if s.id == id {
			return s.offset + v[1]
		}
		i = s.outerindex
	}
	panic("env.index")
}

type pathValue struct {
	path, value any
}

func (env *env) pathIntact(v any) bool {
	w := env.paths.top().(pathValue).value
	switch v := v.(type) {
	case []any, map[string]any:
		switch w.(type) {
		case []any, map[string]any:
			v, w := reflect.ValueOf(v), reflect.ValueOf(w)
			return v.Pointer() == w.Pointer() && v.Len() == w.Len()
		}
	case float64:
		if w, ok := w.(float64); ok {
			return v == w || math.IsNaN(v) && math.IsNaN(w)
		}
	}
	return v == w
}

func (env *env) poppaths() []any {
	var xs []any
	for {
		p := env.paths.pop().(pathValue)
		if p.path == nil {
			break
		}
		xs = append(xs, p.path)
	}
	for i, j := 0, len(xs)-1; i < j; i, j = i+1, j-1 {
		xs[i], xs[j] = xs[j], xs[i]
	}
	return xs
}
0707010000079E000081A4000000000000000000000001645E367C0000A74C000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/func.go    package gojq

import (
	"encoding/base64"
	"encoding/json"
	"fmt"
	"io"
	"math"
	"math/big"
	"net/url"
	"reflect"
	"regexp"
	"sort"
	"strconv"
	"strings"
	"time"
	"unicode/utf8"

	"github.com/itchyny/timefmt-go"
)

//go:generate go run -modfile=go.dev.mod _tools/gen_builtin.go -i builtin.jq -o builtin.go
var builtinFuncDefs map[string][]*FuncDef

const (
	argcount0 = 1 << iota
	argcount1
	argcount2
	argcount3
)

type function struct {
	argcount int
	iter     bool
	callback func(any, []any) any
}

func (fn function) accept(cnt int) bool {
	return fn.argcount&(1<<cnt) != 0
}

var internalFuncs map[string]function

func init() {
	internalFuncs = map[string]function{
		"empty":          argFunc0(nil),
		"path":           argFunc1(nil),
		"env":            argFunc0(nil),
		"builtins":       argFunc0(nil),
		"input":          argFunc0(nil),
		"modulemeta":     argFunc0(nil),
		"length":         argFunc0(funcLength),
		"utf8bytelength": argFunc0(funcUtf8ByteLength),
		"keys":           argFunc0(funcKeys),
		"has":            argFunc1(funcHas),
		"to_entries":     argFunc0(funcToEntries),
		"from_entries":   argFunc0(funcFromEntries),
		"add":            argFunc0(funcAdd),
		"tonumber":       argFunc0(funcToNumber),
		"tostring":       argFunc0(funcToString),
		"type":           argFunc0(funcType),
		"reverse":        argFunc0(funcReverse),
		"contains":       argFunc1(funcContains),
		"indices":        argFunc1(funcIndices),
		"index":          argFunc1(funcIndex),
		"rindex":         argFunc1(funcRindex),
		"startswith":     argFunc1(funcStartsWith),
		"endswith":       argFunc1(funcEndsWith),
		"ltrimstr":       argFunc1(funcLtrimstr),
		"rtrimstr":       argFunc1(funcRtrimstr),
		"explode":        argFunc0(funcExplode),
		"implode":        argFunc0(funcImplode),
		"split":          {argcount1 | argcount2, false, funcSplit},
		"ascii_downcase": argFunc0(funcASCIIDowncase),
		"ascii_upcase":   argFunc0(funcASCIIUpcase),
		"tojson":         argFunc0(funcToJSON),
		"fromjson":       argFunc0(funcFromJSON),
		"format":         argFunc1(funcFormat),
		"_tohtml":        argFunc0(funcToHTML),
		"_touri":         argFunc0(funcToURI),
		"_tocsv":         argFunc0(funcToCSV),
		"_totsv":         argFunc0(funcToTSV),
		"_tosh":          argFunc0(funcToSh),
		"_tobase64":      argFunc0(funcToBase64),
		"_tobase64d":     argFunc0(funcToBase64d),
		"_index":         argFunc2(funcIndex2),
		"_slice":         argFunc3(funcSlice),
		"_plus":          argFunc0(funcOpPlus),
		"_negate":        argFunc0(funcOpNegate),
		"_add":           argFunc2(funcOpAdd),
		"_subtract":      argFunc2(funcOpSub),
		"_multiply":      argFunc2(funcOpMul),
		"_divide":        argFunc2(funcOpDiv),
		"_modulo":        argFunc2(funcOpMod),
		"_alternative":   argFunc2(funcOpAlt),
		"_equal":         argFunc2(funcOpEq),
		"_notequal":      argFunc2(funcOpNe),
		"_greater":       argFunc2(funcOpGt),
		"_less":          argFunc2(funcOpLt),
		"_greatereq":     argFunc2(funcOpGe),
		"_lesseq":        argFunc2(funcOpLe),
		"flatten":        {argcount0 | argcount1, false, funcFlatten},
		"_range":         {argcount3, true, funcRange},
		"min":            argFunc0(funcMin),
		"_min_by":        argFunc1(funcMinBy),
		"max":            argFunc0(funcMax),
		"_max_by":        argFunc1(funcMaxBy),
		"sort":           argFunc0(funcSort),
		"_sort_by":       argFunc1(funcSortBy),
		"_group_by":      argFunc1(funcGroupBy),
		"unique":         argFunc0(funcUnique),
		"_unique_by":     argFunc1(funcUniqueBy),
		"join":           argFunc1(funcJoin),
		"sin":            mathFunc("sin", math.Sin),
		"cos":            mathFunc("cos", math.Cos),
		"tan":            mathFunc("tan", math.Tan),
		"asin":           mathFunc("asin", math.Asin),
		"acos":           mathFunc("acos", math.Acos),
		"atan":           mathFunc("atan", math.Atan),
		"sinh":           mathFunc("sinh", math.Sinh),
		"cosh":           mathFunc("cosh", math.Cosh),
		"tanh":           mathFunc("tanh", math.Tanh),
		"asinh":          mathFunc("asinh", math.Asinh),
		"acosh":          mathFunc("acosh", math.Acosh),
		"atanh":          mathFunc("atanh", math.Atanh),
		"floor":          mathFunc("floor", math.Floor),
		"round":          mathFunc("round", math.Round),
		"nearbyint":      mathFunc("nearbyint", math.Round),
		"rint":           mathFunc("rint", math.Round),
		"ceil":           mathFunc("ceil", math.Ceil),
		"trunc":          mathFunc("trunc", math.Trunc),
		"significand":    mathFunc("significand", funcSignificand),
		"fabs":           mathFunc("fabs", math.Abs),
		"sqrt":           mathFunc("sqrt", math.Sqrt),
		"cbrt":           mathFunc("cbrt", math.Cbrt),
		"exp":            mathFunc("exp", math.Exp),
		"exp10":          mathFunc("exp10", funcExp10),
		"exp2":           mathFunc("exp2", math.Exp2),
		"expm1":          mathFunc("expm1", math.Expm1),
		"frexp":          argFunc0(funcFrexp),
		"modf":           argFunc0(funcModf),
		"log":            mathFunc("log", math.Log),
		"log10":          mathFunc("log10", math.Log10),
		"log1p":          mathFunc("log1p", math.Log1p),
		"log2":           mathFunc("log2", math.Log2),
		"logb":           mathFunc("logb", math.Logb),
		"gamma":          mathFunc("gamma", math.Gamma),
		"tgamma":         mathFunc("tgamma", math.Gamma),
		"lgamma":         mathFunc("lgamma", funcLgamma),
		"erf":            mathFunc("erf", math.Erf),
		"erfc":           mathFunc("erfc", math.Erfc),
		"j0":             mathFunc("j0", math.J0),
		"j1":             mathFunc("j1", math.J1),
		"y0":             mathFunc("y0", math.Y0),
		"y1":             mathFunc("y1", math.Y1),
		"atan2":          mathFunc2("atan2", math.Atan2),
		"copysign":       mathFunc2("copysign", math.Copysign),
		"drem":           mathFunc2("drem", funcDrem),
		"fdim":           mathFunc2("fdim", math.Dim),
		"fmax":           mathFunc2("fmax", math.Max),
		"fmin":           mathFunc2("fmin", math.Min),
		"fmod":           mathFunc2("fmod", math.Mod),
		"hypot":          mathFunc2("hypot", math.Hypot),
		"jn":             mathFunc2("jn", funcJn),
		"ldexp":          mathFunc2("ldexp", funcLdexp),
		"nextafter":      mathFunc2("nextafter", math.Nextafter),
		"nexttoward":     mathFunc2("nexttoward", math.Nextafter),
		"remainder":      mathFunc2("remainder", math.Remainder),
		"scalb":          mathFunc2("scalb", funcScalb),
		"scalbln":        mathFunc2("scalbln", funcScalbln),
		"yn":             mathFunc2("yn", funcYn),
		"pow":            mathFunc2("pow", math.Pow),
		"pow10":          mathFunc("pow10", funcExp10),
		"fma":            mathFunc3("fma", math.FMA),
		"infinite":       argFunc0(funcInfinite),
		"isfinite":       argFunc0(funcIsfinite),
		"isinfinite":     argFunc0(funcIsinfinite),
		"nan":            argFunc0(funcNan),
		"isnan":          argFunc0(funcIsnan),
		"isnormal":       argFunc0(funcIsnormal),
		"setpath":        argFunc2(funcSetpath),
		"delpaths":       argFunc1(funcDelpaths),
		"getpath":        argFunc1(funcGetpath),
		"transpose":      argFunc0(funcTranspose),
		"bsearch":        argFunc1(funcBsearch),
		"gmtime":         argFunc0(funcGmtime),
		"localtime":      argFunc0(funcLocaltime),
		"mktime":         argFunc0(funcMktime),
		"strftime":       argFunc1(funcStrftime),
		"strflocaltime":  argFunc1(funcStrflocaltime),
		"strptime":       argFunc1(funcStrptime),
		"now":            argFunc0(funcNow),
		"_match":         argFunc3(funcMatch),
		"_capture":       argFunc0(funcCapture),
		"error":          {argcount0 | argcount1, false, funcError},
		"halt":           argFunc0(funcHalt),
		"halt_error":     {argcount0 | argcount1, false, funcHaltError},
	}
}

func argFunc0(f func(any) any) function {
	return function{
		argcount0, false, func(v any, _ []any) any {
			return f(v)
		},
	}
}

func argFunc1(f func(_, _ any) any) function {
	return function{
		argcount1, false, func(v any, args []any) any {
			return f(v, args[0])
		},
	}
}

func argFunc2(f func(_, _, _ any) any) function {
	return function{
		argcount2, false, func(v any, args []any) any {
			return f(v, args[0], args[1])
		},
	}
}

func argFunc3(f func(_, _, _, _ any) any) function {
	return function{
		argcount3, false, func(v any, args []any) any {
			return f(v, args[0], args[1], args[2])
		},
	}
}

func mathFunc(name string, f func(float64) float64) function {
	return argFunc0(func(v any) any {
		x, ok := toFloat(v)
		if !ok {
			return &funcTypeError{name, v}
		}
		return f(x)
	})
}

func mathFunc2(name string, f func(_, _ float64) float64) function {
	return argFunc2(func(_, x, y any) any {
		l, ok := toFloat(x)
		if !ok {
			return &funcTypeError{name, x}
		}
		r, ok := toFloat(y)
		if !ok {
			return &funcTypeError{name, y}
		}
		return f(l, r)
	})
}

func mathFunc3(name string, f func(_, _, _ float64) float64) function {
	return argFunc3(func(_, a, b, c any) any {
		x, ok := toFloat(a)
		if !ok {
			return &funcTypeError{name, a}
		}
		y, ok := toFloat(b)
		if !ok {
			return &funcTypeError{name, b}
		}
		z, ok := toFloat(c)
		if !ok {
			return &funcTypeError{name, c}
		}
		return f(x, y, z)
	})
}

func funcLength(v any) any {
	switch v := v.(type) {
	case nil:
		return 0
	case int:
		if v >= 0 {
			return v
		}
		return -v
	case float64:
		return math.Abs(v)
	case *big.Int:
		if v.Sign() >= 0 {
			return v
		}
		return new(big.Int).Abs(v)
	case string:
		return len([]rune(v))
	case []any:
		return len(v)
	case map[string]any:
		return len(v)
	default:
		return &funcTypeError{"length", v}
	}
}

func funcUtf8ByteLength(v any) any {
	s, ok := v.(string)
	if !ok {
		return &funcTypeError{"utf8bytelength", v}
	}
	return len(s)
}

func funcKeys(v any) any {
	switch v := v.(type) {
	case []any:
		w := make([]any, len(v))
		for i := range v {
			w[i] = i
		}
		return w
	case map[string]any:
		w := make([]any, len(v))
		for i, k := range keys(v) {
			w[i] = k
		}
		return w
	default:
		return &funcTypeError{"keys", v}
	}
}

func keys(v map[string]any) []string {
	w := make([]string, len(v))
	var i int
	for k := range v {
		w[i] = k
		i++
	}
	sort.Strings(w)
	return w
}

func values(v any) ([]any, bool) {
	switch v := v.(type) {
	case []any:
		return v, true
	case map[string]any:
		vs := make([]any, len(v))
		for i, k := range keys(v) {
			vs[i] = v[k]
		}
		return vs, true
	default:
		return nil, false
	}
}

func funcHas(v, x any) any {
	switch v := v.(type) {
	case []any:
		if x, ok := toInt(x); ok {
			return 0 <= x && x < len(v)
		}
	case map[string]any:
		if x, ok := x.(string); ok {
			_, ok := v[x]
			return ok
		}
	case nil:
		return false
	}
	return &hasKeyTypeError{v, x}
}

func funcToEntries(v any) any {
	switch v := v.(type) {
	case []any:
		w := make([]any, len(v))
		for i, x := range v {
			w[i] = map[string]any{"key": i, "value": x}
		}
		return w
	case map[string]any:
		w := make([]any, len(v))
		for i, k := range keys(v) {
			w[i] = map[string]any{"key": k, "value": v[k]}
		}
		return w
	default:
		return &funcTypeError{"to_entries", v}
	}
}

func funcFromEntries(v any) any {
	vs, ok := v.([]any)
	if !ok {
		return &funcTypeError{"from_entries", v}
	}
	w := make(map[string]any, len(vs))
	for _, v := range vs {
		switch v := v.(type) {
		case map[string]any:
			var (
				key   string
				value any
				ok    bool
			)
			for _, k := range [4]string{"key", "Key", "name", "Name"} {
				if k := v[k]; k != nil && k != false {
					if key, ok = k.(string); !ok {
						return &objectKeyNotStringError{k}
					}
					break
				}
			}
			if !ok {
				return &objectKeyNotStringError{nil}
			}
			for _, k := range [2]string{"value", "Value"} {
				if value, ok = v[k]; ok {
					break
				}
			}
			w[key] = value
		default:
			return &funcTypeError{"from_entries", v}
		}
	}
	return w
}

func funcAdd(v any) any {
	vs, ok := values(v)
	if !ok {
		return &funcTypeError{"add", v}
	}
	v = nil
	for _, x := range vs {
		switch x := x.(type) {
		case nil:
			continue
		case string:
			switch w := v.(type) {
			case nil:
				var sb strings.Builder
				sb.WriteString(x)
				v = &sb
				continue
			case *strings.Builder:
				w.WriteString(x)
				continue
			}
		case []any:
			switch w := v.(type) {
			case nil:
				s := make([]any, len(x))
				copy(s, x)
				v = s
				continue
			case []any:
				v = append(w, x...)
				continue
			}
		case map[string]any:
			switch w := v.(type) {
			case nil:
				m := make(map[string]any, len(x))
				for k, e := range x {
					m[k] = e
				}
				v = m
				continue
			case map[string]any:
				for k, e := range x {
					w[k] = e
				}
				continue
			}
		}
		if sb, ok := v.(*strings.Builder); ok {
			v = sb.String()
		}
		v = funcOpAdd(nil, v, x)
		if err, ok := v.(error); ok {
			return err
		}
	}
	if sb, ok := v.(*strings.Builder); ok {
		v = sb.String()
	}
	return v
}

func funcToNumber(v any) any {
	switch v := v.(type) {
	case int, float64, *big.Int:
		return v
	case string:
		if !newLexer(v).validNumber() {
			return fmt.Errorf("invalid number: %q", v)
		}
		return toNumber(v)
	default:
		return &funcTypeError{"tonumber", v}
	}
}

func toNumber(v string) any {
	return normalizeNumber(json.Number(v))
}

func funcToString(v any) any {
	if s, ok := v.(string); ok {
		return s
	}
	return funcToJSON(v)
}

func funcType(v any) any {
	return TypeOf(v)
}

func funcReverse(v any) any {
	vs, ok := v.([]any)
	if !ok {
		return &funcTypeError{"reverse", v}
	}
	ws := make([]any, len(vs))
	for i, v := range vs {
		ws[len(ws)-i-1] = v
	}
	return ws
}

func funcContains(v, x any) any {
	return binopTypeSwitch(v, x,
		func(l, r int) any { return l == r },
		func(l, r float64) any { return l == r },
		func(l, r *big.Int) any { return l.Cmp(r) == 0 },
		func(l, r string) any { return strings.Contains(l, r) },
		func(l, r []any) any {
		R:
			for _, r := range r {
				for _, l := range l {
					if funcContains(l, r) == true {
						continue R
					}
				}
				return false
			}
			return true
		},
		func(l, r map[string]any) any {
			if len(l) < len(r) {
				return false
			}
			for k, r := range r {
				if l, ok := l[k]; !ok || funcContains(l, r) != true {
					return false
				}
			}
			return true
		},
		func(l, r any) any {
			if l == r {
				return true
			}
			return &containsTypeError{l, r}
		},
	)
}

func funcIndices(v, x any) any {
	return indexFunc(v, x, indices)
}

func indices(vs, xs []any) any {
	var rs []any
	if len(xs) == 0 {
		return rs
	}
	for i := 0; i <= len(vs)-len(xs); i++ {
		if compare(vs[i:i+len(xs)], xs) == 0 {
			rs = append(rs, i)
		}
	}
	return rs
}

func funcIndex(v, x any) any {
	return indexFunc(v, x, func(vs, xs []any) any {
		if len(xs) == 0 {
			return nil
		}
		for i := 0; i <= len(vs)-len(xs); i++ {
			if compare(vs[i:i+len(xs)], xs) == 0 {
				return i
			}
		}
		return nil
	})
}

func funcRindex(v, x any) any {
	return indexFunc(v, x, func(vs, xs []any) any {
		if len(xs) == 0 {
			return nil
		}
		for i := len(vs) - len(xs); i >= 0; i-- {
			if compare(vs[i:i+len(xs)], xs) == 0 {
				return i
			}
		}
		return nil
	})
}

func indexFunc(v, x any, f func(_, _ []any) any) any {
	switch v := v.(type) {
	case nil:
		return nil
	case []any:
		switch x := x.(type) {
		case []any:
			return f(v, x)
		default:
			return f(v, []any{x})
		}
	case string:
		if x, ok := x.(string); ok {
			return f(explode(v), explode(x))
		}
		return &expectedStringError{x}
	default:
		return &expectedArrayError{v}
	}
}

func funcStartsWith(v, x any) any {
	s, ok := v.(string)
	if !ok {
		return &funcTypeError{"startswith", v}
	}
	t, ok := x.(string)
	if !ok {
		return &funcTypeError{"startswith", x}
	}
	return strings.HasPrefix(s, t)
}

func funcEndsWith(v, x any) any {
	s, ok := v.(string)
	if !ok {
		return &funcTypeError{"endswith", v}
	}
	t, ok := x.(string)
	if !ok {
		return &funcTypeError{"endswith", x}
	}
	return strings.HasSuffix(s, t)
}

func funcLtrimstr(v, x any) any {
	s, ok := v.(string)
	if !ok {
		return v
	}
	t, ok := x.(string)
	if !ok {
		return v
	}
	return strings.TrimPrefix(s, t)
}

func funcRtrimstr(v, x any) any {
	s, ok := v.(string)
	if !ok {
		return v
	}
	t, ok := x.(string)
	if !ok {
		return v
	}
	return strings.TrimSuffix(s, t)
}

func funcExplode(v any) any {
	s, ok := v.(string)
	if !ok {
		return &funcTypeError{"explode", v}
	}
	return explode(s)
}

func explode(s string) []any {
	xs := make([]any, len([]rune(s)))
	var i int
	for _, r := range s {
		xs[i] = int(r)
		i++
	}
	return xs
}

func funcImplode(v any) any {
	vs, ok := v.([]any)
	if !ok {
		return &funcTypeError{"implode", v}
	}
	var sb strings.Builder
	sb.Grow(len(vs))
	for _, v := range vs {
		if r, ok := toInt(v); ok && 0 <= r && r <= utf8.MaxRune {
			sb.WriteRune(rune(r))
		} else {
			return &funcTypeError{"implode", vs}
		}
	}
	return sb.String()
}

func funcSplit(v any, args []any) any {
	s, ok := v.(string)
	if !ok {
		return &funcTypeError{"split", v}
	}
	x, ok := args[0].(string)
	if !ok {
		return &funcTypeError{"split", x}
	}
	var ss []string
	if len(args) == 1 {
		ss = strings.Split(s, x)
	} else {
		var flags string
		if args[1] != nil {
			v, ok := args[1].(string)
			if !ok {
				return &funcTypeError{"split", args[1]}
			}
			flags = v
		}
		r, err := compileRegexp(x, flags)
		if err != nil {
			return err
		}
		ss = r.Split(s, -1)
	}
	xs := make([]any, len(ss))
	for i, s := range ss {
		xs[i] = s
	}
	return xs
}

func funcASCIIDowncase(v any) any {
	s, ok := v.(string)
	if !ok {
		return &funcTypeError{"ascii_downcase", v}
	}
	return strings.Map(func(r rune) rune {
		if 'A' <= r && r <= 'Z' {
			return r + ('a' - 'A')
		}
		return r
	}, s)
}

func funcASCIIUpcase(v any) any {
	s, ok := v.(string)
	if !ok {
		return &funcTypeError{"ascii_upcase", v}
	}
	return strings.Map(func(r rune) rune {
		if 'a' <= r && r <= 'z' {
			return r - ('a' - 'A')
		}
		return r
	}, s)
}

func funcToJSON(v any) any {
	return jsonMarshal(v)
}

func funcFromJSON(v any) any {
	s, ok := v.(string)
	if !ok {
		return &funcTypeError{"fromjson", v}
	}
	var w any
	dec := json.NewDecoder(strings.NewReader(s))
	dec.UseNumber()
	if err := dec.Decode(&w); err != nil {
		return err
	}
	if _, err := dec.Token(); err != io.EOF {
		return &funcTypeError{"fromjson", v}
	}
	return normalizeNumbers(w)
}

func funcFormat(v, x any) any {
	s, ok := x.(string)
	if !ok {
		return &funcTypeError{"format", x}
	}
	format := "@" + s
	f := formatToFunc(format)
	if f == nil {
		return &formatNotFoundError{format}
	}
	return internalFuncs[f.Name].callback(v, nil)
}

var htmlEscaper = strings.NewReplacer(
	`<`, "&lt;",
	`>`, "&gt;",
	`&`, "&amp;",
	`'`, "&apos;",
	`"`, "&quot;",
)

func funcToHTML(v any) any {
	switch x := funcToString(v).(type) {
	case string:
		return htmlEscaper.Replace(x)
	default:
		return x
	}
}

func funcToURI(v any) any {
	switch x := funcToString(v).(type) {
	case string:
		return url.QueryEscape(x)
	default:
		return x
	}
}

var csvEscaper = strings.NewReplacer(
	`"`, `""`,
	"\x00", `\0`,
)

func funcToCSV(v any) any {
	return formatJoin("csv", v, ",", func(s string) string {
		return `"` + csvEscaper.Replace(s) + `"`
	})
}

var tsvEscaper = strings.NewReplacer(
	"\t", `\t`,
	"\r", `\r`,
	"\n", `\n`,
	"\\", `\\`,
	"\x00", `\0`,
)

func funcToTSV(v any) any {
	return formatJoin("tsv", v, "\t", tsvEscaper.Replace)
}

var shEscaper = strings.NewReplacer(
	"'", `'\''`,
	"\x00", `\0`,
)

func funcToSh(v any) any {
	if _, ok := v.([]any); !ok {
		v = []any{v}
	}
	return formatJoin("sh", v, " ", func(s string) string {
		return "'" + shEscaper.Replace(s) + "'"
	})
}

func formatJoin(typ string, v any, sep string, escape func(string) string) any {
	vs, ok := v.([]any)
	if !ok {
		return &funcTypeError{"@" + typ, v}
	}
	ss := make([]string, len(vs))
	for i, v := range vs {
		switch v := v.(type) {
		case []any, map[string]any:
			return &formatRowError{typ, v}
		case string:
			ss[i] = escape(v)
		default:
			if s := jsonMarshal(v); s != "null" || typ == "sh" {
				ss[i] = s
			}
		}
	}
	return strings.Join(ss, sep)
}

func funcToBase64(v any) any {
	switch x := funcToString(v).(type) {
	case string:
		return base64.StdEncoding.EncodeToString([]byte(x))
	default:
		return x
	}
}

func funcToBase64d(v any) any {
	switch x := funcToString(v).(type) {
	case string:
		if i := strings.IndexRune(x, base64.StdPadding); i >= 0 {
			x = x[:i]
		}
		y, err := base64.RawStdEncoding.DecodeString(x)
		if err != nil {
			return err
		}
		return string(y)
	default:
		return x
	}
}

func funcIndex2(_, v, x any) any {
	switch x := x.(type) {
	case string:
		switch v := v.(type) {
		case nil:
			return nil
		case map[string]any:
			return v[x]
		default:
			return &expectedObjectError{v}
		}
	case int, float64, *big.Int:
		i, _ := toInt(x)
		switch v := v.(type) {
		case nil:
			return nil
		case []any:
			return index(v, i)
		case string:
			return indexString(v, i)
		default:
			return &expectedArrayError{v}
		}
	case []any:
		switch v := v.(type) {
		case nil:
			return nil
		case []any:
			return indices(v, x)
		default:
			return &expectedArrayError{v}
		}
	case map[string]any:
		if v == nil {
			return nil
		}
		start, ok := x["start"]
		if !ok {
			return &expectedStartEndError{x}
		}
		end, ok := x["end"]
		if !ok {
			return &expectedStartEndError{x}
		}
		return funcSlice(nil, v, end, start)
	default:
		switch v.(type) {
		case []any:
			return &arrayIndexNotNumberError{x}
		case string:
			return &stringIndexNotNumberError{x}
		default:
			return &objectKeyNotStringError{x}
		}
	}
}

func index(vs []any, i int) any {
	i = clampIndex(i, -1, len(vs))
	if 0 <= i && i < len(vs) {
		return vs[i]
	}
	return nil
}

func indexString(s string, i int) any {
	l := len([]rune(s))
	i = clampIndex(i, -1, l)
	if 0 <= i && i < l {
		for _, r := range s {
			if i--; i < 0 {
				return string(r)
			}
		}
	}
	return nil
}

func funcSlice(_, v, e, s any) (r any) {
	switch v := v.(type) {
	case nil:
		return nil
	case []any:
		return slice(v, e, s)
	case string:
		return sliceString(v, e, s)
	default:
		return &expectedArrayError{v}
	}
}

func slice(vs []any, e, s any) any {
	var start, end int
	if s != nil {
		if i, ok := toInt(s); ok {
			start = clampIndex(i, 0, len(vs))
		} else {
			return &arrayIndexNotNumberError{s}
		}
	}
	if e != nil {
		if i, ok := toInt(e); ok {
			end = clampIndex(i, start, len(vs))
		} else {
			return &arrayIndexNotNumberError{e}
		}
	} else {
		end = len(vs)
	}
	return vs[start:end]
}

func sliceString(v string, e, s any) any {
	var start, end int
	l := len([]rune(v))
	if s != nil {
		if i, ok := toInt(s); ok {
			start = clampIndex(i, 0, l)
		} else {
			return &stringIndexNotNumberError{s}
		}
	}
	if e != nil {
		if i, ok := toInt(e); ok {
			end = clampIndex(i, start, l)
		} else {
			return &stringIndexNotNumberError{e}
		}
	} else {
		end = l
	}
	if start < l {
		for i := range v {
			if start--; start < 0 {
				start = i
				break
			}
		}
	} else {
		start = len(v)
	}
	if end < l {
		for i := range v {
			if end--; end < 0 {
				end = i
				break
			}
		}
	} else {
		end = len(v)
	}
	return v[start:end]
}

func clampIndex(i, min, max int) int {
	if i < 0 {
		i += max
	}
	if i < min {
		return min
	} else if i < max {
		return i
	} else {
		return max
	}
}

func funcFlatten(v any, args []any) any {
	vs, ok := values(v)
	if !ok {
		return &funcTypeError{"flatten", v}
	}
	var depth float64
	if len(args) == 0 {
		depth = -1
	} else {
		depth, ok = toFloat(args[0])
		if !ok {
			return &funcTypeError{"flatten", args[0]}
		}
		if depth < 0 {
			return &flattenDepthError{depth}
		}
	}
	return flatten(nil, vs, depth)
}

func flatten(xs, vs []any, depth float64) []any {
	for _, v := range vs {
		if vs, ok := v.([]any); ok && depth != 0 {
			xs = flatten(xs, vs, depth-1)
		} else {
			xs = append(xs, v)
		}
	}
	return xs
}

type rangeIter struct {
	value, end, step any
}

func (iter *rangeIter) Next() (any, bool) {
	if compare(iter.step, 0)*compare(iter.value, iter.end) >= 0 {
		return nil, false
	}
	v := iter.value
	iter.value = funcOpAdd(nil, v, iter.step)
	return v, true
}

func funcRange(_ any, xs []any) any {
	for _, x := range xs {
		switch x.(type) {
		case int, float64, *big.Int:
		default:
			return &funcTypeError{"range", x}
		}
	}
	return &rangeIter{xs[0], xs[1], xs[2]}
}

func funcMin(v any) any {
	vs, ok := v.([]any)
	if !ok {
		return &funcTypeError{"min", v}
	}
	return minMaxBy(vs, vs, true)
}

func funcMinBy(v, x any) any {
	vs, ok := v.([]any)
	if !ok {
		return &funcTypeError{"min_by", v}
	}
	xs, ok := x.([]any)
	if !ok {
		return &funcTypeError{"min_by", x}
	}
	if len(vs) != len(xs) {
		return &lengthMismatchError{"min_by", vs, xs}
	}
	return minMaxBy(vs, xs, true)
}

func funcMax(v any) any {
	vs, ok := v.([]any)
	if !ok {
		return &funcTypeError{"max", v}
	}
	return minMaxBy(vs, vs, false)
}

func funcMaxBy(v, x any) any {
	vs, ok := v.([]any)
	if !ok {
		return &funcTypeError{"max_by", v}
	}
	xs, ok := x.([]any)
	if !ok {
		return &funcTypeError{"max_by", x}
	}
	if len(vs) != len(xs) {
		return &lengthMismatchError{"max_by", vs, xs}
	}
	return minMaxBy(vs, xs, false)
}

func minMaxBy(vs, xs []any, isMin bool) any {
	if len(vs) == 0 {
		return nil
	}
	i, j, x := 0, 0, xs[0]
	for i++; i < len(xs); i++ {
		if compare(x, xs[i]) > 0 == isMin {
			j, x = i, xs[i]
		}
	}
	return vs[j]
}

type sortItem struct {
	value, key any
}

func sortItems(name string, v, x any) ([]*sortItem, error) {
	vs, ok := v.([]any)
	if !ok {
		return nil, &funcTypeError{name, v}
	}
	xs, ok := x.([]any)
	if !ok {
		return nil, &funcTypeError{name, x}
	}
	if len(vs) != len(xs) {
		return nil, &lengthMismatchError{name, vs, xs}
	}
	items := make([]*sortItem, len(vs))
	for i, v := range vs {
		items[i] = &sortItem{v, xs[i]}
	}
	sort.SliceStable(items, func(i, j int) bool {
		return compare(items[i].key, items[j].key) < 0
	})
	return items, nil
}

func funcSort(v any) any {
	return sortBy("sort", v, v)
}

func funcSortBy(v, x any) any {
	return sortBy("sort_by", v, x)
}

func sortBy(name string, v, x any) any {
	items, err := sortItems(name, v, x)
	if err != nil {
		return err
	}
	rs := make([]any, len(items))
	for i, x := range items {
		rs[i] = x.value
	}
	return rs
}

func funcGroupBy(v, x any) any {
	items, err := sortItems("group_by", v, x)
	if err != nil {
		return err
	}
	var rs []any
	var last any
	for i, r := range items {
		if i == 0 || compare(last, r.key) != 0 {
			rs, last = append(rs, []any{r.value}), r.key
		} else {
			rs[len(rs)-1] = append(rs[len(rs)-1].([]any), r.value)
		}
	}
	return rs
}

func funcUnique(v any) any {
	return uniqueBy("unique", v, v)
}

func funcUniqueBy(v, x any) any {
	return uniqueBy("unique_by", v, x)
}

func uniqueBy(name string, v, x any) any {
	items, err := sortItems(name, v, x)
	if err != nil {
		return err
	}
	var rs []any
	var last any
	for i, r := range items {
		if i == 0 || compare(last, r.key) != 0 {
			rs, last = append(rs, r.value), r.key
		}
	}
	return rs
}

func funcJoin(v, x any) any {
	vs, ok := values(v)
	if !ok {
		return &funcTypeError{"join", v}
	}
	if len(vs) == 0 {
		return ""
	}
	sep, ok := x.(string)
	if len(vs) > 1 && !ok {
		return &funcTypeError{"join", x}
	}
	ss := make([]string, len(vs))
	for i, v := range vs {
		switch v := v.(type) {
		case nil:
		case string:
			ss[i] = v
		case bool:
			if v {
				ss[i] = "true"
			} else {
				ss[i] = "false"
			}
		case int, float64, *big.Int:
			ss[i] = jsonMarshal(v)
		default:
			return &joinTypeError{v}
		}
	}
	return strings.Join(ss, sep)
}

func funcSignificand(v float64) float64 {
	if math.IsNaN(v) || math.IsInf(v, 0) || v == 0.0 {
		return v
	}
	return math.Float64frombits((math.Float64bits(v) & 0x800fffffffffffff) | 0x3ff0000000000000)
}

func funcExp10(v float64) float64 {
	return math.Pow(10, v)
}

func funcFrexp(v any) any {
	x, ok := toFloat(v)
	if !ok {
		return &funcTypeError{"frexp", v}
	}
	f, e := math.Frexp(x)
	return []any{f, e}
}

func funcModf(v any) any {
	x, ok := toFloat(v)
	if !ok {
		return &funcTypeError{"modf", v}
	}
	i, f := math.Modf(x)
	return []any{f, i}
}

func funcLgamma(v float64) float64 {
	v, _ = math.Lgamma(v)
	return v
}

func funcDrem(l, r float64) float64 {
	x := math.Remainder(l, r)
	if x == 0.0 {
		return math.Copysign(x, l)
	}
	return x
}

func funcJn(l, r float64) float64 {
	return math.Jn(int(l), r)
}

func funcLdexp(l, r float64) float64 {
	return math.Ldexp(l, int(r))
}

func funcScalb(l, r float64) float64 {
	return l * math.Pow(2, r)
}

func funcScalbln(l, r float64) float64 {
	return l * math.Pow(2, r)
}

func funcYn(l, r float64) float64 {
	return math.Yn(int(l), r)
}

func funcInfinite(any) any {
	return math.Inf(1)
}

func funcIsfinite(v any) any {
	x, ok := toFloat(v)
	return ok && !math.IsInf(x, 0)
}

func funcIsinfinite(v any) any {
	x, ok := toFloat(v)
	return ok && math.IsInf(x, 0)
}

func funcNan(any) any {
	return math.NaN()
}

func funcIsnan(v any) any {
	x, ok := toFloat(v)
	if !ok {
		if v == nil {
			return false
		}
		return &funcTypeError{"isnan", v}
	}
	return math.IsNaN(x)
}

func funcIsnormal(v any) any {
	if v, ok := toFloat(v); ok {
		e := math.Float64bits(v) & 0x7ff0000000000000 >> 52
		return 0 < e && e < 0x7ff
	}
	return false
}

// An `allocator` creates new maps and slices, stores the allocated addresses.
// This allocator is used to reduce allocations on assignment operator (`=`),
// update-assignment operator (`|=`), and the `map_values`, `del`, `delpaths`
// functions.
type allocator map[uintptr]struct{}

func funcAllocator(any, []any) any {
	return allocator{}
}

func (a allocator) allocated(v any) bool {
	_, ok := a[reflect.ValueOf(v).Pointer()]
	return ok
}

func (a allocator) makeObject(l int) map[string]any {
	v := make(map[string]any, l)
	if a != nil {
		a[reflect.ValueOf(v).Pointer()] = struct{}{}
	}
	return v
}

func (a allocator) makeArray(l, c int) []any {
	if c < l {
		c = l
	}
	v := make([]any, l, c)
	if a != nil {
		a[reflect.ValueOf(v).Pointer()] = struct{}{}
	}
	return v
}

func funcSetpath(v, p, n any) any {
	// There is no need to use an allocator on a single update.
	return setpath(v, p, n, nil)
}

// Used in compiler#compileAssign and compiler#compileModify.
func funcSetpathWithAllocator(v any, args []any) any {
	return setpath(v, args[0], args[1], args[2].(allocator))
}

func setpath(v, p, n any, a allocator) any {
	path, ok := p.([]any)
	if !ok {
		return &funcTypeError{"setpath", p}
	}
	var err error
	if v, err = update(v, path, n, a); err != nil {
		if err, ok := err.(*funcTypeError); ok {
			err.name = "setpath"
		}
		return err
	}
	return v
}

func funcDelpaths(v, p any) any {
	return delpaths(v, p, allocator{})
}

// Used in compiler#compileAssign and compiler#compileModify.
func funcDelpathsWithAllocator(v any, args []any) any {
	return delpaths(v, args[0], args[1].(allocator))
}

func delpaths(v, p any, a allocator) any {
	paths, ok := p.([]any)
	if !ok {
		return &funcTypeError{"delpaths", p}
	}
	if len(paths) == 0 {
		return v
	}
	// Fills the paths with an empty value and then delete them. We cannot delete
	// in each loop because array indices should not change. For example,
	//   jq -n "[0, 1, 2, 3] | delpaths([[1], [2]])" #=> [0, 3].
	var empty struct{}
	var err error
	for _, p := range paths {
		path, ok := p.([]any)
		if !ok {
			return &funcTypeError{"delpaths", p}
		}
		if v, err = update(v, path, empty, a); err != nil {
			return err
		}
	}
	return deleteEmpty(v)
}

func update(v any, path []any, n any, a allocator) (any, error) {
	if len(path) == 0 {
		return n, nil
	}
	switch p := path[0].(type) {
	case string:
		switch v := v.(type) {
		case nil:
			return updateObject(nil, p, path[1:], n, a)
		case map[string]any:
			return updateObject(v, p, path[1:], n, a)
		case struct{}:
			return v, nil
		default:
			return nil, &expectedObjectError{v}
		}
	case int, float64, *big.Int:
		i, _ := toInt(p)
		switch v := v.(type) {
		case nil:
			return updateArrayIndex(nil, i, path[1:], n, a)
		case []any:
			return updateArrayIndex(v, i, path[1:], n, a)
		case struct{}:
			return v, nil
		default:
			return nil, &expectedArrayError{v}
		}
	case map[string]any:
		switch v := v.(type) {
		case nil:
			return updateArraySlice(nil, p, path[1:], n, a)
		case []any:
			return updateArraySlice(v, p, path[1:], n, a)
		case struct{}:
			return v, nil
		default:
			return nil, &expectedArrayError{v}
		}
	default:
		switch v.(type) {
		case []any:
			return nil, &arrayIndexNotNumberError{p}
		default:
			return nil, &objectKeyNotStringError{p}
		}
	}
}

func updateObject(v map[string]any, k string, path []any, n any, a allocator) (any, error) {
	x, ok := v[k]
	if !ok && n == struct{}{} {
		return v, nil
	}
	u, err := update(x, path, n, a)
	if err != nil {
		return nil, err
	}
	if a.allocated(v) {
		v[k] = u
		return v, nil
	}
	w := a.makeObject(len(v) + 1)
	for k, v := range v {
		w[k] = v
	}
	w[k] = u
	return w, nil
}

func updateArrayIndex(v []any, i int, path []any, n any, a allocator) (any, error) {
	var x any
	if j := clampIndex(i, -1, len(v)); j < 0 {
		if n == struct{}{} {
			return v, nil
		}
		return nil, &funcTypeError{v: i}
	} else if j < len(v) {
		i = j
		x = v[i]
	} else {
		if n == struct{}{} {
			return v, nil
		}
		if i >= 0x8000000 {
			return nil, &arrayIndexTooLargeError{i}
		}
	}
	u, err := update(x, path, n, a)
	if err != nil {
		return nil, err
	}
	l, c := len(v), cap(v)
	if a.allocated(v) {
		if i < c {
			if i >= l {
				v = v[:i+1]
			}
			v[i] = u
			return v, nil
		}
		c *= 2
	}
	if i >= l {
		l = i + 1
	}
	w := a.makeArray(l, c)
	copy(w, v)
	w[i] = u
	return w, nil
}

func updateArraySlice(v []any, m map[string]any, path []any, n any, a allocator) (any, error) {
	s, ok := m["start"]
	if !ok {
		return nil, &expectedStartEndError{m}
	}
	e, ok := m["end"]
	if !ok {
		return nil, &expectedStartEndError{m}
	}
	var start, end int
	if i, ok := toInt(s); ok {
		start = clampIndex(i, 0, len(v))
	}
	if i, ok := toInt(e); ok {
		end = clampIndex(i, start, len(v))
	} else {
		end = len(v)
	}
	if start == end && n == struct{}{} {
		return v, nil
	}
	u, err := update(v[start:end], path, n, a)
	if err != nil {
		return nil, err
	}
	switch u := u.(type) {
	case []any:
		var w []any
		if len(u) == end-start && a.allocated(v) {
			w = v
		} else {
			w = a.makeArray(len(v)-(end-start)+len(u), 0)
			copy(w, v[:start])
			copy(w[start+len(u):], v[end:])
		}
		copy(w[start:], u)
		return w, nil
	case struct{}:
		var w []any
		if a.allocated(v) {
			w = v
		} else {
			w = a.makeArray(len(v), 0)
			copy(w, v)
		}
		for i := start; i < end; i++ {
			w[i] = u
		}
		return w, nil
	default:
		return nil, &expectedArrayError{u}
	}
}

func deleteEmpty(v any) any {
	switch v := v.(type) {
	case struct{}:
		return nil
	case map[string]any:
		for k, w := range v {
			if w == struct{}{} {
				delete(v, k)
			} else {
				v[k] = deleteEmpty(w)
			}
		}
		return v
	case []any:
		var j int
		for _, w := range v {
			if w != struct{}{} {
				v[j] = deleteEmpty(w)
				j++
			}
		}
		for i := j; i < len(v); i++ {
			v[i] = nil
		}
		return v[:j]
	default:
		return v
	}
}

func funcGetpath(v, p any) any {
	keys, ok := p.([]any)
	if !ok {
		return &funcTypeError{"getpath", p}
	}
	u := v
	for _, x := range keys {
		switch v.(type) {
		case nil, []any, map[string]any:
			v = funcIndex2(nil, v, x)
			if _, ok := v.(error); ok {
				return &getpathError{u, p}
			}
		default:
			return &getpathError{u, p}
		}
	}
	return v
}

func funcTranspose(v any) any {
	vss, ok := v.([]any)
	if !ok {
		return &funcTypeError{"transpose", v}
	}
	if len(vss) == 0 {
		return []any{}
	}
	var l int
	for _, vs := range vss {
		vs, ok := vs.([]any)
		if !ok {
			return &funcTypeError{"transpose", v}
		}
		if k := len(vs); l < k {
			l = k
		}
	}
	wss := make([][]any, l)
	xs := make([]any, l)
	for i, k := 0, len(vss); i < l; i++ {
		s := make([]any, k)
		wss[i] = s
		xs[i] = s
	}
	for i, vs := range vss {
		for j, v := range vs.([]any) {
			wss[j][i] = v
		}
	}
	return xs
}

func funcBsearch(v, t any) any {
	vs, ok := v.([]any)
	if !ok {
		return &funcTypeError{"bsearch", v}
	}
	i := sort.Search(len(vs), func(i int) bool {
		return compare(vs[i], t) >= 0
	})
	if i < len(vs) && compare(vs[i], t) == 0 {
		return i
	}
	return -i - 1
}

func funcGmtime(v any) any {
	if v, ok := toFloat(v); ok {
		return epochToArray(v, time.UTC)
	}
	return &funcTypeError{"gmtime", v}
}

func funcLocaltime(v any) any {
	if v, ok := toFloat(v); ok {
		return epochToArray(v, time.Local)
	}
	return &funcTypeError{"localtime", v}
}

func epochToArray(v float64, loc *time.Location) []any {
	t := time.Unix(int64(v), int64((v-math.Floor(v))*1e9)).In(loc)
	return []any{
		t.Year(),
		int(t.Month()) - 1,
		t.Day(),
		t.Hour(),
		t.Minute(),
		float64(t.Second()) + float64(t.Nanosecond())/1e9,
		int(t.Weekday()),
		t.YearDay() - 1,
	}
}

func funcMktime(v any) any {
	if a, ok := v.([]any); ok {
		t, err := arrayToTime("mktime", a, time.UTC)
		if err != nil {
			return err
		}
		return timeToEpoch(t)
	}
	return &funcTypeError{"mktime", v}
}

func timeToEpoch(t time.Time) float64 {
	return float64(t.Unix()) + float64(t.Nanosecond())/1e9
}

func funcStrftime(v, x any) any {
	if w, ok := toFloat(v); ok {
		v = epochToArray(w, time.UTC)
	}
	if a, ok := v.([]any); ok {
		if format, ok := x.(string); ok {
			t, err := arrayToTime("strftime", a, time.UTC)
			if err != nil {
				return err
			}
			return timefmt.Format(t, format)
		}
		return &funcTypeError{"strftime", x}
	}
	return &funcTypeError{"strftime", v}
}

func funcStrflocaltime(v, x any) any {
	if w, ok := toFloat(v); ok {
		v = epochToArray(w, time.Local)
	}
	if a, ok := v.([]any); ok {
		if format, ok := x.(string); ok {
			t, err := arrayToTime("strflocaltime", a, time.Local)
			if err != nil {
				return err
			}
			return timefmt.Format(t, format)
		}
		return &funcTypeError{"strflocaltime", x}
	}
	return &funcTypeError{"strflocaltime", v}
}

func funcStrptime(v, x any) any {
	if v, ok := v.(string); ok {
		if format, ok := x.(string); ok {
			t, err := timefmt.Parse(v, format)
			if err != nil {
				return err
			}
			var s time.Time
			if t == s {
				return &funcTypeError{"strptime", v}
			}
			return epochToArray(timeToEpoch(t), time.UTC)
		}
		return &funcTypeError{"strptime", x}
	}
	return &funcTypeError{"strptime", v}
}

func arrayToTime(name string, a []any, loc *time.Location) (time.Time, error) {
	var t time.Time
	if len(a) != 8 {
		return t, &funcTypeError{name, a}
	}
	var y, m, d, h, min, sec, nsec int
	if x, ok := toInt(a[0]); ok {
		y = x
	} else {
		return t, &funcTypeError{name, a}
	}
	if x, ok := toInt(a[1]); ok {
		m = x + 1
	} else {
		return t, &funcTypeError{name, a}
	}
	if x, ok := toInt(a[2]); ok {
		d = x
	} else {
		return t, &funcTypeError{name, a}
	}
	if x, ok := toInt(a[3]); ok {
		h = x
	} else {
		return t, &funcTypeError{name, a}
	}
	if x, ok := toInt(a[4]); ok {
		min = x
	} else {
		return t, &funcTypeError{name, a}
	}
	if x, ok := toFloat(a[5]); ok {
		sec = int(x)
		nsec = int((x - math.Floor(x)) * 1e9)
	} else {
		return t, &funcTypeError{name, a}
	}
	return time.Date(y, time.Month(m), d, h, min, sec, nsec, loc), nil
}

func funcNow(any) any {
	return timeToEpoch(time.Now())
}

func funcMatch(v, re, fs, testing any) any {
	var flags string
	if fs != nil {
		v, ok := fs.(string)
		if !ok {
			return &funcTypeError{"match", fs}
		}
		flags = v
	}
	s, ok := v.(string)
	if !ok {
		return &funcTypeError{"match", v}
	}
	restr, ok := re.(string)
	if !ok {
		return &funcTypeError{"match", v}
	}
	r, err := compileRegexp(restr, flags)
	if err != nil {
		return err
	}
	var xs [][]int
	if strings.ContainsRune(flags, 'g') && testing != true {
		xs = r.FindAllStringSubmatchIndex(s, -1)
	} else {
		got := r.FindStringSubmatchIndex(s)
		if testing == true {
			return got != nil
		}
		if got != nil {
			xs = [][]int{got}
		}
	}
	res, names := make([]any, len(xs)), r.SubexpNames()
	for i, x := range xs {
		captures := make([]any, (len(x)-2)/2)
		for j := 1; j < len(x)/2; j++ {
			var name any
			if n := names[j]; n != "" {
				name = n
			}
			if x[j*2] < 0 {
				captures[j-1] = map[string]any{
					"name":   name,
					"offset": -1,
					"length": 0,
					"string": nil,
				}
				continue
			}
			captures[j-1] = map[string]any{
				"name":   name,
				"offset": len([]rune(s[:x[j*2]])),
				"length": len([]rune(s[:x[j*2+1]])) - len([]rune(s[:x[j*2]])),
				"string": s[x[j*2]:x[j*2+1]],
			}
		}
		res[i] = map[string]any{
			"offset":   len([]rune(s[:x[0]])),
			"length":   len([]rune(s[:x[1]])) - len([]rune(s[:x[0]])),
			"string":   s[x[0]:x[1]],
			"captures": captures,
		}
	}
	return res
}

func compileRegexp(re, flags string) (*regexp.Regexp, error) {
	if strings.IndexFunc(flags, func(r rune) bool {
		return r != 'g' && r != 'i' && r != 'm'
	}) >= 0 {
		return nil, fmt.Errorf("unsupported regular expression flag: %q", flags)
	}
	re = strings.ReplaceAll(re, "(?<", "(?P<")
	if strings.ContainsRune(flags, 'i') {
		re = "(?i)" + re
	}
	if strings.ContainsRune(flags, 'm') {
		re = "(?s)" + re
	}
	r, err := regexp.Compile(re)
	if err != nil {
		return nil, fmt.Errorf("invalid regular expression %q: %s", re, err)
	}
	return r, nil
}

func funcCapture(v any) any {
	vs, ok := v.(map[string]any)
	if !ok {
		return &expectedObjectError{v}
	}
	v = vs["captures"]
	captures, ok := v.([]any)
	if !ok {
		return &expectedArrayError{v}
	}
	w := make(map[string]any, len(captures))
	for _, capture := range captures {
		if capture, ok := capture.(map[string]any); ok {
			if name, ok := capture["name"].(string); ok {
				w[name] = capture["string"]
			}
		}
	}
	return w
}

func funcError(v any, args []any) any {
	if len(args) > 0 {
		v = args[0]
	}
	code := 5
	if v == nil {
		code = 0
	}
	return &exitCodeError{v, code, false}
}

func funcHalt(any) any {
	return &exitCodeError{nil, 0, true}
}

func funcHaltError(v any, args []any) any {
	code := 5
	if len(args) > 0 {
		var ok bool
		if code, ok = toInt(args[0]); !ok {
			return &funcTypeError{"halt_error", args[0]}
		}
	}
	return &exitCodeError{v, code, true}
}

func toInt(x any) (int, bool) {
	switch x := x.(type) {
	case int:
		return x, true
	case float64:
		return floatToInt(x), true
	case *big.Int:
		if x.IsInt64() {
			if i := x.Int64(); math.MinInt <= i && i <= math.MaxInt {
				return int(i), true
			}
		}
		if x.Sign() > 0 {
			return math.MaxInt, true
		}
		return math.MinInt, true
	default:
		return 0, false
	}
}

func floatToInt(x float64) int {
	if math.MinInt <= x && x <= math.MaxInt {
		return int(x)
	}
	if x > 0 {
		return math.MaxInt
	}
	return math.MinInt
}

func toFloat(x any) (float64, bool) {
	switch x := x.(type) {
	case int:
		return float64(x), true
	case float64:
		return x, true
	case *big.Int:
		return bigToFloat(x), true
	default:
		return 0.0, false
	}
}

func bigToFloat(x *big.Int) float64 {
	if x.IsInt64() {
		return float64(x.Int64())
	}
	if f, err := strconv.ParseFloat(x.String(), 64); err == nil {
		return f
	}
	return math.Inf(x.Sign())
}
0707010000079F000081A4000000000000000000000001645E367C000000B4000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/go.dev.mod module github.com/itchyny/gojq

go 1.18

require (
	github.com/itchyny/astgen-go v0.0.0-20210914105503-cc8fccf6f972 // indirect
	github.com/itchyny/timefmt-go v0.1.5 // indirect
)
070701000007A0000081A4000000000000000000000001645E367C00000198000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/go.dev.sum github.com/itchyny/astgen-go v0.0.0-20210914105503-cc8fccf6f972 h1:XYWolmPDLTY9B1O5o/Ad811/mtVkaHWMiZdbPLm/nDA=
github.com/itchyny/astgen-go v0.0.0-20210914105503-cc8fccf6f972/go.mod h1:jTXcxGeQMJfFN3wWjtzb4aAaWDDN+QbezE0HjH1XfNk=
github.com/itchyny/timefmt-go v0.1.5 h1:G0INE2la8S6ru/ZI5JecgyzbbJNs5lG1RcBqa7Jm6GE=
github.com/itchyny/timefmt-go v0.1.5/go.mod h1:nEP7L+2YmAbT2kZ2HfSs1d8Xtw9LY8D2stDBckWakZ8=
070701000007A1000081A4000000000000000000000001645E367C000000D7000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/gojq.go    // Package gojq provides the parser and the interpreter of gojq.
// Please refer to [Usage as a library] for introduction.
//
// [Usage as a library]: https://github.com/itchyny/gojq#usage-as-a-library
package gojq
 070701000007A2000081A4000000000000000000000001645E367C00000306000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/iter.go    package gojq

// Iter is an interface for an iterator.
type Iter interface {
	Next() (any, bool)
}

// NewIter creates a new [Iter] from values.
func NewIter(values ...any) Iter {
	switch len(values) {
	case 0:
		return emptyIter{}
	case 1:
		return &unitIter{value: values[0]}
	default:
		iter := sliceIter(values)
		return &iter
	}
}

type emptyIter struct{}

func (emptyIter) Next() (any, bool) {
	return nil, false
}

type unitIter struct {
	value any
	done  bool
}

func (iter *unitIter) Next() (any, bool) {
	if iter.done {
		return nil, false
	}
	iter.done = true
	return iter.value, true
}

type sliceIter []any

func (iter *sliceIter) Next() (any, bool) {
	if len(*iter) == 0 {
		return nil, false
	}
	value := (*iter)[0]
	*iter = (*iter)[1:]
	return value, true
}
  070701000007A3000081A4000000000000000000000001645E367C00002A00000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/lexer.go   package gojq

import (
	"encoding/json"
	"unicode/utf8"
)

type lexer struct {
	source    string
	offset    int
	result    *Query
	token     string
	tokenType int
	inString  bool
	err       error
}

func newLexer(src string) *lexer {
	return &lexer{source: src}
}

const eof = -1

var keywords = map[string]int{
	"or":      tokOrOp,
	"and":     tokAndOp,
	"module":  tokModule,
	"import":  tokImport,
	"include": tokInclude,
	"def":     tokDef,
	"as":      tokAs,
	"label":   tokLabel,
	"break":   tokBreak,
	"null":    tokNull,
	"true":    tokTrue,
	"false":   tokFalse,
	"if":      tokIf,
	"then":    tokThen,
	"elif":    tokElif,
	"else":    tokElse,
	"end":     tokEnd,
	"try":     tokTry,
	"catch":   tokCatch,
	"reduce":  tokReduce,
	"foreach": tokForeach,
}

func (l *lexer) Lex(lval *yySymType) (tokenType int) {
	defer func() { l.tokenType = tokenType }()
	if len(l.source) == l.offset {
		l.token = ""
		return eof
	}
	if l.inString {
		tok, str := l.scanString(l.offset)
		lval.token = str
		return tok
	}
	ch, iseof := l.next()
	if iseof {
		l.token = ""
		return eof
	}
	switch {
	case isIdent(ch, false):
		i := l.offset - 1
		j, isModule := l.scanIdentOrModule()
		l.token = l.source[i:j]
		lval.token = l.token
		if isModule {
			return tokModuleIdent
		}
		if tok, ok := keywords[l.token]; ok {
			return tok
		}
		return tokIdent
	case isNumber(ch):
		i := l.offset - 1
		j := l.scanNumber(numberStateLead)
		if j < 0 {
			l.token = l.source[i:-j]
			return tokInvalid
		}
		l.token = l.source[i:j]
		lval.token = l.token
		return tokNumber
	}
	switch ch {
	case '.':
		ch := l.peek()
		switch {
		case ch == '.':
			l.offset++
			l.token = ".."
			return tokRecurse
		case isIdent(ch, false):
			l.token = l.source[l.offset-1 : l.scanIdent()]
			lval.token = l.token[1:]
			return tokIndex
		case isNumber(ch):
			i := l.offset - 1
			j := l.scanNumber(numberStateFloat)
			if j < 0 {
				l.token = l.source[i:-j]
				return tokInvalid
			}
			l.token = l.source[i:j]
			lval.token = l.token
			return tokNumber
		default:
			return '.'
		}
	case '$':
		if isIdent(l.peek(), false) {
			i := l.offset - 1
			j, isModule := l.scanIdentOrModule()
			l.token = l.source[i:j]
			lval.token = l.token
			if isModule {
				return tokModuleVariable
			}
			return tokVariable
		}
	case '|':
		if l.peek() == '=' {
			l.offset++
			l.token = "|="
			lval.operator = OpModify
			return tokUpdateOp
		}
	case '?':
		if l.peek() == '/' {
			l.offset++
			if l.peek() == '/' {
				l.offset++
				l.token = "?//"
				return tokDestAltOp
			}
			l.offset--
		}
	case '+':
		if l.peek() == '=' {
			l.offset++
			l.token = "+="
			lval.operator = OpUpdateAdd
			return tokUpdateOp
		}
	case '-':
		if l.peek() == '=' {
			l.offset++
			l.token = "-="
			lval.operator = OpUpdateSub
			return tokUpdateOp
		}
	case '*':
		if l.peek() == '=' {
			l.offset++
			l.token = "*="
			lval.operator = OpUpdateMul
			return tokUpdateOp
		}
	case '/':
		switch l.peek() {
		case '=':
			l.offset++
			l.token = "/="
			lval.operator = OpUpdateDiv
			return tokUpdateOp
		case '/':
			l.offset++
			if l.peek() == '=' {
				l.offset++
				l.token = "//="
				lval.operator = OpUpdateAlt
				return tokUpdateOp
			}
			l.token = "//"
			lval.operator = OpAlt
			return tokAltOp
		}
	case '%':
		if l.peek() == '=' {
			l.offset++
			l.token = "%="
			lval.operator = OpUpdateMod
			return tokUpdateOp
		}
	case '=':
		if l.peek() == '=' {
			l.offset++
			l.token = "=="
			lval.operator = OpEq
			return tokCompareOp
		}
		l.token = "="
		lval.operator = OpAssign
		return tokUpdateOp
	case '!':
		if l.peek() == '=' {
			l.offset++
			l.token = "!="
			lval.operator = OpNe
			return tokCompareOp
		}
	case '>':
		if l.peek() == '=' {
			l.offset++
			l.token = ">="
			lval.operator = OpGe
			return tokCompareOp
		}
		l.token = ">"
		lval.operator = OpGt
		return tokCompareOp
	case '<':
		if l.peek() == '=' {
			l.offset++
			l.token = "<="
			lval.operator = OpLe
			return tokCompareOp
		}
		l.token = "<"
		lval.operator = OpLt
		return tokCompareOp
	case '@':
		if isIdent(l.peek(), true) {
			l.token = l.source[l.offset-1 : l.scanIdent()]
			lval.token = l.token
			return tokFormat
		}
	case '"':
		tok, str := l.scanString(l.offset - 1)
		lval.token = str
		return tok
	default:
		if ch >= utf8.RuneSelf {
			r, size := utf8.DecodeRuneInString(l.source[l.offset-1:])
			l.offset += size
			l.token = string(r)
		}
	}
	return int(ch)
}

func (l *lexer) next() (byte, bool) {
	for {
		ch := l.source[l.offset]
		l.offset++
		if ch == '#' {
			if len(l.source) == l.offset {
				return 0, true
			}
			for !isNewLine(l.source[l.offset]) {
				l.offset++
				if len(l.source) == l.offset {
					return 0, true
				}
			}
		} else if !isWhite(ch) {
			return ch, false
		} else if len(l.source) == l.offset {
			return 0, true
		}
	}
}

func (l *lexer) peek() byte {
	if len(l.source) == l.offset {
		return 0
	}
	return l.source[l.offset]
}

func (l *lexer) scanIdent() int {
	for isIdent(l.peek(), true) {
		l.offset++
	}
	return l.offset
}

func (l *lexer) scanIdentOrModule() (int, bool) {
	index := l.scanIdent()
	var isModule bool
	if l.peek() == ':' {
		l.offset++
		if l.peek() == ':' {
			l.offset++
			if isIdent(l.peek(), false) {
				l.offset++
				index = l.scanIdent()
				isModule = true
			} else {
				l.offset -= 2
			}
		} else {
			l.offset--
		}
	}
	return index, isModule
}

func (l *lexer) validVarName() bool {
	if l.peek() != '$' {
		return false
	}
	l.offset++
	return isIdent(l.peek(), false) && l.scanIdent() == len(l.source)
}

const (
	numberStateLead = iota
	numberStateFloat
	numberStateExpLead
	numberStateExp
)

func (l *lexer) scanNumber(state int) int {
	for {
		switch state {
		case numberStateLead, numberStateFloat:
			if ch := l.peek(); isNumber(ch) {
				l.offset++
			} else {
				switch ch {
				case '.':
					if state != numberStateLead {
						l.offset++
						return -l.offset
					}
					l.offset++
					state = numberStateFloat
				case 'e', 'E':
					l.offset++
					switch l.peek() {
					case '-', '+':
						l.offset++
					}
					state = numberStateExpLead
				default:
					if isIdent(ch, false) {
						l.offset++
						return -l.offset
					}
					return l.offset
				}
			}
		case numberStateExpLead, numberStateExp:
			if ch := l.peek(); !isNumber(ch) {
				if isIdent(ch, false) {
					l.offset++
					return -l.offset
				}
				if state == numberStateExpLead {
					return -l.offset
				}
				return l.offset
			}
			l.offset++
			state = numberStateExp
		default:
			panic(state)
		}
	}
}

func (l *lexer) validNumber() bool {
	ch := l.peek()
	switch ch {
	case '+', '-':
		l.offset++
		ch = l.peek()
	}
	state := numberStateLead
	if ch == '.' {
		l.offset++
		ch = l.peek()
		state = numberStateFloat
	}
	return isNumber(ch) && l.scanNumber(state) == len(l.source)
}

func (l *lexer) scanString(start int) (int, string) {
	var decode bool
	var controls int
	unquote := func(src string, quote bool) (string, error) {
		if !decode {
			if quote {
				return src, nil
			}
			return src[1 : len(src)-1], nil
		}
		var buf []byte
		if !quote && controls == 0 {
			buf = []byte(src)
		} else {
			buf = quoteAndEscape(src, quote, controls)
		}
		if err := json.Unmarshal(buf, &src); err != nil {
			return "", err
		}
		return src, nil
	}
	for i := l.offset; i < len(l.source); i++ {
		ch := l.source[i]
		switch ch {
		case '\\':
			if i++; i >= len(l.source) {
				break
			}
			switch l.source[i] {
			case 'u':
				for j := 1; j <= 4; j++ {
					if i+j >= len(l.source) || !isHex(l.source[i+j]) {
						l.offset = i + j
						l.token = l.source[i-1 : l.offset]
						return tokInvalidEscapeSequence, ""
					}
				}
				i += 4
				fallthrough
			case '"', '/', '\\', 'b', 'f', 'n', 'r', 't':
				decode = true
			case '(':
				if !l.inString {
					l.inString = true
					return tokStringStart, ""
				}
				if i == l.offset+1 {
					l.offset += 2
					l.inString = false
					return tokStringQuery, ""
				}
				l.offset = i - 1
				l.token = l.source[start:l.offset]
				str, err := unquote(l.token, true)
				if err != nil {
					return tokInvalid, ""
				}
				return tokString, str
			default:
				l.offset = i + 1
				l.token = l.source[l.offset-2 : l.offset]
				return tokInvalidEscapeSequence, ""
			}
		case '"':
			if !l.inString {
				l.offset = i + 1
				l.token = l.source[start:l.offset]
				str, err := unquote(l.token, false)
				if err != nil {
					return tokInvalid, ""
				}
				return tokString, str
			}
			if i > l.offset {
				l.offset = i
				l.token = l.source[start:l.offset]
				str, err := unquote(l.token, true)
				if err != nil {
					return tokInvalid, ""
				}
				return tokString, str
			}
			l.inString = false
			l.offset = i + 1
			return tokStringEnd, ""
		default:
			if !decode {
				decode = ch > '~'
			}
			if ch < ' ' { // ref: unquoteBytes in encoding/json
				controls++
			}
		}
	}
	l.offset = len(l.source)
	l.token = ""
	return tokUnterminatedString, ""
}

func quoteAndEscape(src string, quote bool, controls int) []byte {
	size := len(src) + controls*5
	if quote {
		size += 2
	}
	buf := make([]byte, size)
	var j int
	if quote {
		buf[0] = '"'
		buf[len(buf)-1] = '"'
		j++
	}
	for i := 0; i < len(src); i++ {
		if ch := src[i]; ch < ' ' {
			const hex = "0123456789abcdef"
			copy(buf[j:], `\u00`)
			buf[j+4] = hex[ch>>4]
			buf[j+5] = hex[ch&0xF]
			j += 6
		} else {
			buf[j] = ch
			j++
		}
	}
	return buf
}

type parseError struct {
	offset    int
	token     string
	tokenType int
}

func (err *parseError) Error() string {
	switch err.tokenType {
	case eof:
		return "unexpected EOF"
	case tokInvalid:
		return "invalid token " + jsonMarshal(err.token)
	case tokInvalidEscapeSequence:
		return `invalid escape sequence "` + err.token + `" in string literal`
	case tokUnterminatedString:
		return "unterminated string literal"
	default:
		return "unexpected token " + jsonMarshal(err.token)
	}
}

func (err *parseError) Token() (string, int) {
	return err.token, err.offset
}

func (l *lexer) Error(string) {
	offset, token := l.offset, l.token
	if l.tokenType != eof && l.tokenType < utf8.RuneSelf {
		token = string(rune(l.tokenType))
	}
	l.err = &parseError{offset, token, l.tokenType}
}

func isWhite(ch byte) bool {
	switch ch {
	case '\t', '\n', '\r', ' ':
		return true
	default:
		return false
	}
}

func isIdent(ch byte, tail bool) bool {
	return 'a' <= ch && ch <= 'z' ||
		'A' <= ch && ch <= 'Z' || ch == '_' ||
		tail && isNumber(ch)
}

func isHex(ch byte) bool {
	return 'a' <= ch && ch <= 'f' ||
		'A' <= ch && ch <= 'F' ||
		isNumber(ch)
}

func isNumber(ch byte) bool {
	return '0' <= ch && ch <= '9'
}

func isNewLine(ch byte) bool {
	switch ch {
	case '\n', '\r':
		return true
	default:
		return false
	}
}
070701000007A4000081A4000000000000000000000001645E367C00000FEB000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/module_loader.go   package gojq

import (
	"encoding/json"
	"fmt"
	"io"
	"os"
	"path/filepath"
	"strings"
)

// ModuleLoader is the interface for loading modules.
//
// Implement following optional methods. Use [NewModuleLoader] to load local modules.
//
//	LoadModule(string) (*Query, error)
//	LoadModuleWithMeta(string, map[string]any) (*Query, error)
//	LoadInitModules() ([]*Query, error)
//	LoadJSON(string) (any, error)
//	LoadJSONWithMeta(string, map[string]any) (any, error)
type ModuleLoader any

// NewModuleLoader creates a new [ModuleLoader] reading local modules in the paths.
func NewModuleLoader(paths []string) ModuleLoader {
	return &moduleLoader{expandHomeDir(paths)}
}

type moduleLoader struct {
	paths []string
}

func (l *moduleLoader) LoadInitModules() ([]*Query, error) {
	var qs []*Query
	for _, path := range l.paths {
		if filepath.Base(path) != ".jq" {
			continue
		}
		fi, err := os.Stat(path)
		if err != nil {
			if os.IsNotExist(err) {
				continue
			}
			return nil, err
		}
		if fi.IsDir() {
			continue
		}
		cnt, err := os.ReadFile(path)
		if err != nil {
			return nil, err
		}
		q, err := parseModule(path, string(cnt))
		if err != nil {
			return nil, &queryParseError{path, string(cnt), err}
		}
		qs = append(qs, q)
	}
	return qs, nil
}

func (l *moduleLoader) LoadModuleWithMeta(name string, meta map[string]any) (*Query, error) {
	path, err := l.lookupModule(name, ".jq", meta)
	if err != nil {
		return nil, err
	}
	cnt, err := os.ReadFile(path)
	if err != nil {
		return nil, err
	}
	q, err := parseModule(path, string(cnt))
	if err != nil {
		return nil, &queryParseError{path, string(cnt), err}
	}
	return q, nil
}

func (l *moduleLoader) LoadJSONWithMeta(name string, meta map[string]any) (any, error) {
	path, err := l.lookupModule(name, ".json", meta)
	if err != nil {
		return nil, err
	}
	f, err := os.Open(path)
	if err != nil {
		return nil, err
	}
	defer f.Close()
	var vals []any
	dec := json.NewDecoder(f)
	dec.UseNumber()
	for {
		var val any
		if err := dec.Decode(&val); err != nil {
			if err == io.EOF {
				break
			}
			if _, err := f.Seek(0, io.SeekStart); err != nil {
				return nil, err
			}
			cnt, er := io.ReadAll(f)
			if er != nil {
				return nil, er
			}
			return nil, &jsonParseError{path, string(cnt), err}
		}
		vals = append(vals, val)
	}
	return vals, nil
}

func (l *moduleLoader) lookupModule(name, extension string, meta map[string]any) (string, error) {
	paths := l.paths
	if path := searchPath(meta); path != "" {
		paths = append([]string{path}, paths...)
	}
	for _, base := range paths {
		path := filepath.Clean(filepath.Join(base, name+extension))
		if _, err := os.Stat(path); err == nil {
			return path, err
		}
		path = filepath.Clean(filepath.Join(base, name, filepath.Base(name)+extension))
		if _, err := os.Stat(path); err == nil {
			return path, err
		}
	}
	return "", fmt.Errorf("module not found: %q", name)
}

// This is a dirty hack to implement the "search" field.
func parseModule(path, cnt string) (*Query, error) {
	q, err := Parse(cnt)
	if err != nil {
		return nil, err
	}
	for _, i := range q.Imports {
		if i.Meta == nil {
			continue
		}
		i.Meta.KeyVals = append(
			i.Meta.KeyVals,
			&ConstObjectKeyVal{
				Key: "$$path",
				Val: &ConstTerm{Str: path},
			},
		)
	}
	return q, nil
}

func searchPath(meta map[string]any) string {
	x, ok := meta["search"]
	if !ok {
		return ""
	}
	s, ok := x.(string)
	if !ok {
		return ""
	}
	if filepath.IsAbs(s) {
		return s
	}
	if strings.HasPrefix(s, "~") {
		if homeDir, err := os.UserHomeDir(); err == nil {
			return filepath.Join(homeDir, s[1:])
		}
	}
	var path string
	if x, ok := meta["$$path"]; ok {
		path, _ = x.(string)
	}
	if path == "" {
		return s
	}
	return filepath.Join(filepath.Dir(path), s)
}

func expandHomeDir(paths []string) []string {
	var homeDir string
	var err error
	for i, path := range paths {
		if strings.HasPrefix(path, "~") {
			if homeDir == "" && err == nil {
				homeDir, err = os.UserHomeDir()
			}
			if homeDir != "" {
				paths[i] = filepath.Join(homeDir, path[1:])
			}
		}
	}
	return paths
}
 070701000007A5000081A4000000000000000000000001645E367C000005E1000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/normalize.go   package gojq

import (
	"encoding/json"
	"math"
	"math/big"
	"strings"
)

func normalizeNumber(v json.Number) any {
	if i, err := v.Int64(); err == nil && math.MinInt <= i && i <= math.MaxInt {
		return int(i)
	}
	if strings.ContainsAny(v.String(), ".eE") {
		if f, err := v.Float64(); err == nil {
			return f
		}
	}
	if bi, ok := new(big.Int).SetString(v.String(), 10); ok {
		return bi
	}
	if strings.HasPrefix(v.String(), "-") {
		return math.Inf(-1)
	}
	return math.Inf(1)
}

func normalizeNumbers(v any) any {
	switch v := v.(type) {
	case json.Number:
		return normalizeNumber(v)
	case *big.Int:
		if v.IsInt64() {
			if i := v.Int64(); math.MinInt <= i && i <= math.MaxInt {
				return int(i)
			}
		}
		return v
	case int64:
		if math.MinInt <= v && v <= math.MaxInt {
			return int(v)
		}
		return big.NewInt(v)
	case int32:
		return int(v)
	case int16:
		return int(v)
	case int8:
		return int(v)
	case uint:
		if v <= math.MaxInt {
			return int(v)
		}
		return new(big.Int).SetUint64(uint64(v))
	case uint64:
		if v <= math.MaxInt {
			return int(v)
		}
		return new(big.Int).SetUint64(v)
	case uint32:
		if uint64(v) <= math.MaxInt {
			return int(v)
		}
		return new(big.Int).SetUint64(uint64(v))
	case uint16:
		return int(v)
	case uint8:
		return int(v)
	case float32:
		return float64(v)
	case []any:
		for i, x := range v {
			v[i] = normalizeNumbers(x)
		}
		return v
	case map[string]any:
		for k, x := range v {
			v[k] = normalizeNumbers(x)
		}
		return v
	default:
		return v
	}
}
   070701000007A6000081A4000000000000000000000001645E367C00002817000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/operator.go    package gojq

import (
	"math"
	"math/big"
	"strings"
)

// Operator ...
type Operator int

// Operators ...
const (
	OpPipe Operator = iota + 1
	OpComma
	OpAdd
	OpSub
	OpMul
	OpDiv
	OpMod
	OpEq
	OpNe
	OpGt
	OpLt
	OpGe
	OpLe
	OpAnd
	OpOr
	OpAlt
	OpAssign
	OpModify
	OpUpdateAdd
	OpUpdateSub
	OpUpdateMul
	OpUpdateDiv
	OpUpdateMod
	OpUpdateAlt
)

// String implements [fmt.Stringer].
func (op Operator) String() string {
	switch op {
	case OpPipe:
		return "|"
	case OpComma:
		return ","
	case OpAdd:
		return "+"
	case OpSub:
		return "-"
	case OpMul:
		return "*"
	case OpDiv:
		return "/"
	case OpMod:
		return "%"
	case OpEq:
		return "=="
	case OpNe:
		return "!="
	case OpGt:
		return ">"
	case OpLt:
		return "<"
	case OpGe:
		return ">="
	case OpLe:
		return "<="
	case OpAnd:
		return "and"
	case OpOr:
		return "or"
	case OpAlt:
		return "//"
	case OpAssign:
		return "="
	case OpModify:
		return "|="
	case OpUpdateAdd:
		return "+="
	case OpUpdateSub:
		return "-="
	case OpUpdateMul:
		return "*="
	case OpUpdateDiv:
		return "/="
	case OpUpdateMod:
		return "%="
	case OpUpdateAlt:
		return "//="
	default:
		panic(op)
	}
}

// GoString implements [fmt.GoStringer].
func (op Operator) GoString() (str string) {
	defer func() { str = "gojq." + str }()
	switch op {
	case Operator(0):
		return "Operator(0)"
	case OpPipe:
		return "OpPipe"
	case OpComma:
		return "OpComma"
	case OpAdd:
		return "OpAdd"
	case OpSub:
		return "OpSub"
	case OpMul:
		return "OpMul"
	case OpDiv:
		return "OpDiv"
	case OpMod:
		return "OpMod"
	case OpEq:
		return "OpEq"
	case OpNe:
		return "OpNe"
	case OpGt:
		return "OpGt"
	case OpLt:
		return "OpLt"
	case OpGe:
		return "OpGe"
	case OpLe:
		return "OpLe"
	case OpAnd:
		return "OpAnd"
	case OpOr:
		return "OpOr"
	case OpAlt:
		return "OpAlt"
	case OpAssign:
		return "OpAssign"
	case OpModify:
		return "OpModify"
	case OpUpdateAdd:
		return "OpUpdateAdd"
	case OpUpdateSub:
		return "OpUpdateSub"
	case OpUpdateMul:
		return "OpUpdateMul"
	case OpUpdateDiv:
		return "OpUpdateDiv"
	case OpUpdateMod:
		return "OpUpdateMod"
	case OpUpdateAlt:
		return "OpUpdateAlt"
	default:
		panic(op)
	}
}

func (op Operator) getFunc() string {
	switch op {
	case OpPipe:
		panic("unreachable")
	case OpComma:
		panic("unreachable")
	case OpAdd:
		return "_add"
	case OpSub:
		return "_subtract"
	case OpMul:
		return "_multiply"
	case OpDiv:
		return "_divide"
	case OpMod:
		return "_modulo"
	case OpEq:
		return "_equal"
	case OpNe:
		return "_notequal"
	case OpGt:
		return "_greater"
	case OpLt:
		return "_less"
	case OpGe:
		return "_greatereq"
	case OpLe:
		return "_lesseq"
	case OpAnd:
		panic("unreachable")
	case OpOr:
		panic("unreachable")
	case OpAlt:
		panic("unreachable")
	case OpAssign:
		return "_assign"
	case OpModify:
		return "_modify"
	case OpUpdateAdd:
		return "_add"
	case OpUpdateSub:
		return "_subtract"
	case OpUpdateMul:
		return "_multiply"
	case OpUpdateDiv:
		return "_divide"
	case OpUpdateMod:
		return "_modulo"
	case OpUpdateAlt:
		return "_alternative"
	default:
		panic(op)
	}
}

func binopTypeSwitch(
	l, r any,
	callbackInts func(_, _ int) any,
	callbackFloats func(_, _ float64) any,
	callbackBigInts func(_, _ *big.Int) any,
	callbackStrings func(_, _ string) any,
	callbackArrays func(_, _ []any) any,
	callbackMaps func(_, _ map[string]any) any,
	fallback func(_, _ any) any) any {
	switch l := l.(type) {
	case int:
		switch r := r.(type) {
		case int:
			return callbackInts(l, r)
		case float64:
			return callbackFloats(float64(l), r)
		case *big.Int:
			return callbackBigInts(big.NewInt(int64(l)), r)
		default:
			return fallback(l, r)
		}
	case float64:
		switch r := r.(type) {
		case int:
			return callbackFloats(l, float64(r))
		case float64:
			return callbackFloats(l, r)
		case *big.Int:
			return callbackFloats(l, bigToFloat(r))
		default:
			return fallback(l, r)
		}
	case *big.Int:
		switch r := r.(type) {
		case int:
			return callbackBigInts(l, big.NewInt(int64(r)))
		case float64:
			return callbackFloats(bigToFloat(l), r)
		case *big.Int:
			return callbackBigInts(l, r)
		default:
			return fallback(l, r)
		}
	case string:
		switch r := r.(type) {
		case string:
			return callbackStrings(l, r)
		default:
			return fallback(l, r)
		}
	case []any:
		switch r := r.(type) {
		case []any:
			return callbackArrays(l, r)
		default:
			return fallback(l, r)
		}
	case map[string]any:
		switch r := r.(type) {
		case map[string]any:
			return callbackMaps(l, r)
		default:
			return fallback(l, r)
		}
	default:
		return fallback(l, r)
	}
}

func funcOpPlus(v any) any {
	switch v := v.(type) {
	case int:
		return v
	case float64:
		return v
	case *big.Int:
		return v
	default:
		return &unaryTypeError{"plus", v}
	}
}

func funcOpNegate(v any) any {
	switch v := v.(type) {
	case int:
		return -v
	case float64:
		return -v
	case *big.Int:
		return new(big.Int).Neg(v)
	default:
		return &unaryTypeError{"negate", v}
	}
}

func funcOpAdd(_, l, r any) any {
	return binopTypeSwitch(l, r,
		func(l, r int) any {
			if v := l + r; (v >= l) == (r >= 0) {
				return v
			}
			x, y := big.NewInt(int64(l)), big.NewInt(int64(r))
			return x.Add(x, y)
		},
		func(l, r float64) any { return l + r },
		func(l, r *big.Int) any { return new(big.Int).Add(l, r) },
		func(l, r string) any { return l + r },
		func(l, r []any) any {
			if len(l) == 0 {
				return r
			}
			if len(r) == 0 {
				return l
			}
			v := make([]any, len(l)+len(r))
			copy(v, l)
			copy(v[len(l):], r)
			return v
		},
		func(l, r map[string]any) any {
			if len(l) == 0 {
				return r
			}
			if len(r) == 0 {
				return l
			}
			m := make(map[string]any, len(l)+len(r))
			for k, v := range l {
				m[k] = v
			}
			for k, v := range r {
				m[k] = v
			}
			return m
		},
		func(l, r any) any {
			if l == nil {
				return r
			}
			if r == nil {
				return l
			}
			return &binopTypeError{"add", l, r}
		},
	)
}

func funcOpSub(_, l, r any) any {
	return binopTypeSwitch(l, r,
		func(l, r int) any {
			if v := l - r; (v <= l) == (r >= 0) {
				return v
			}
			x, y := big.NewInt(int64(l)), big.NewInt(int64(r))
			return x.Sub(x, y)
		},
		func(l, r float64) any { return l - r },
		func(l, r *big.Int) any { return new(big.Int).Sub(l, r) },
		func(l, r string) any { return &binopTypeError{"subtract", l, r} },
		func(l, r []any) any {
			v := make([]any, 0, len(l))
		L:
			for _, l := range l {
				for _, r := range r {
					if compare(l, r) == 0 {
						continue L
					}
				}
				v = append(v, l)
			}
			return v
		},
		func(l, r map[string]any) any { return &binopTypeError{"subtract", l, r} },
		func(l, r any) any { return &binopTypeError{"subtract", l, r} },
	)
}

func funcOpMul(_, l, r any) any {
	return binopTypeSwitch(l, r,
		func(l, r int) any {
			if v := l * r; r == 0 || v/r == l {
				return v
			}
			x, y := big.NewInt(int64(l)), big.NewInt(int64(r))
			return x.Mul(x, y)
		},
		func(l, r float64) any { return l * r },
		func(l, r *big.Int) any { return new(big.Int).Mul(l, r) },
		func(l, r string) any { return &binopTypeError{"multiply", l, r} },
		func(l, r []any) any { return &binopTypeError{"multiply", l, r} },
		deepMergeObjects,
		func(l, r any) any {
			if l, ok := l.(string); ok {
				if r, ok := toFloat(r); ok {
					return repeatString(l, r)
				}
			}
			if r, ok := r.(string); ok {
				if l, ok := toFloat(l); ok {
					return repeatString(r, l)
				}
			}
			return &binopTypeError{"multiply", l, r}
		},
	)
}

func deepMergeObjects(l, r map[string]any) any {
	m := make(map[string]any, len(l)+len(r))
	for k, v := range l {
		m[k] = v
	}
	for k, v := range r {
		if mk, ok := m[k]; ok {
			if mk, ok := mk.(map[string]any); ok {
				if w, ok := v.(map[string]any); ok {
					v = deepMergeObjects(mk, w)
				}
			}
		}
		m[k] = v
	}
	return m
}

func repeatString(s string, n float64) any {
	if n <= 0.0 || len(s) > 0 && n > float64(0x10000000/len(s)) || math.IsNaN(n) {
		return nil
	}
	if int(n) < 1 {
		return s
	}
	return strings.Repeat(s, int(n))
}

func funcOpDiv(_, l, r any) any {
	return binopTypeSwitch(l, r,
		func(l, r int) any {
			if r == 0 {
				if l == 0 {
					return math.NaN()
				}
				return &zeroDivisionError{l, r}
			}
			if l%r == 0 {
				return l / r
			}
			return float64(l) / float64(r)
		},
		func(l, r float64) any {
			if r == 0.0 {
				if l == 0.0 {
					return math.NaN()
				}
				return &zeroDivisionError{l, r}
			}
			return l / r
		},
		func(l, r *big.Int) any {
			if r.Sign() == 0 {
				if l.Sign() == 0 {
					return math.NaN()
				}
				return &zeroDivisionError{l, r}
			}
			d, m := new(big.Int).DivMod(l, r, new(big.Int))
			if m.Sign() == 0 {
				return d
			}
			return bigToFloat(l) / bigToFloat(r)
		},
		func(l, r string) any {
			if l == "" {
				return []any{}
			}
			xs := strings.Split(l, r)
			vs := make([]any, len(xs))
			for i, x := range xs {
				vs[i] = x
			}
			return vs
		},
		func(l, r []any) any { return &binopTypeError{"divide", l, r} },
		func(l, r map[string]any) any { return &binopTypeError{"divide", l, r} },
		func(l, r any) any { return &binopTypeError{"divide", l, r} },
	)
}

func funcOpMod(_, l, r any) any {
	return binopTypeSwitch(l, r,
		func(l, r int) any {
			if r == 0 {
				return &zeroModuloError{l, r}
			}
			return l % r
		},
		func(l, r float64) any {
			ri := floatToInt(r)
			if ri == 0 {
				return &zeroModuloError{l, r}
			}
			return floatToInt(l) % ri
		},
		func(l, r *big.Int) any {
			if r.Sign() == 0 {
				return &zeroModuloError{l, r}
			}
			return new(big.Int).Rem(l, r)
		},
		func(l, r string) any { return &binopTypeError{"modulo", l, r} },
		func(l, r []any) any { return &binopTypeError{"modulo", l, r} },
		func(l, r map[string]any) any { return &binopTypeError{"modulo", l, r} },
		func(l, r any) any { return &binopTypeError{"modulo", l, r} },
	)
}

func funcOpAlt(_, l, r any) any {
	if l == nil || l == false {
		return r
	}
	return l
}

func funcOpEq(_, l, r any) any {
	return compare(l, r) == 0
}

func funcOpNe(_, l, r any) any {
	return compare(l, r) != 0
}

func funcOpGt(_, l, r any) any {
	return compare(l, r) > 0
}

func funcOpLt(_, l, r any) any {
	return compare(l, r) < 0
}

func funcOpGe(_, l, r any) any {
	return compare(l, r) >= 0
}

func funcOpLe(_, l, r any) any {
	return compare(l, r) <= 0
}
 070701000007A7000081A4000000000000000000000001645E367C00000EC7000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/option.go  package gojq

import "fmt"

// CompilerOption is a compiler option.
type CompilerOption func(*compiler)

// WithModuleLoader is a compiler option for module loader.
// If you want to load modules from the filesystem, use [NewModuleLoader].
func WithModuleLoader(moduleLoader ModuleLoader) CompilerOption {
	return func(c *compiler) {
		c.moduleLoader = moduleLoader
	}
}

// WithEnvironLoader is a compiler option for environment variables loader.
// The OS environment variables are not accessible by default due to security
// reasons. You can specify [os.Environ] as argument if you allow to access.
func WithEnvironLoader(environLoader func() []string) CompilerOption {
	return func(c *compiler) {
		c.environLoader = environLoader
	}
}

// WithVariables is a compiler option for variable names. The variables can be
// used in the query. You have to give the values to [*Code.Run] in the same order.
func WithVariables(variables []string) CompilerOption {
	return func(c *compiler) {
		c.variables = variables
	}
}

// WithFunction is a compiler option for adding a custom internal function.
// Specify the minimum and maximum count of the function arguments. These
// values should satisfy 0 <= minarity <= maxarity <= 30, otherwise panics.
// On handling numbers, you should take account to int, float64 and *big.Int.
// These are the number types you are allowed to return, so do not return int64.
// Refer to [ValueError] to return a value error just like built-in error
// function. If you want to emit multiple values, call the empty function,
// accept a filter for its argument, or call another built-in function, then
// use LoadInitModules of the module loader.
func WithFunction(name string, minarity, maxarity int, f func(any, []any) any) CompilerOption {
	return withFunction(name, minarity, maxarity, false, f)
}

// WithIterFunction is a compiler option for adding a custom iterator function.
// This is like the [WithFunction] option, but you can add a function which
// returns an Iter to emit multiple values. You cannot define both iterator and
// non-iterator functions of the same name (with possibly different arities).
// See also [NewIter], which can be used to convert values or an error to an Iter.
func WithIterFunction(name string, minarity, maxarity int, f func(any, []any) Iter) CompilerOption {
	return withFunction(name, minarity, maxarity, true,
		func(v any, args []any) any {
			return f(v, args)
		},
	)
}

func withFunction(name string, minarity, maxarity int, iter bool, f func(any, []any) any) CompilerOption {
	if !(0 <= minarity && minarity <= maxarity && maxarity <= 30) {
		panic(fmt.Sprintf("invalid arity for %q: %d, %d", name, minarity, maxarity))
	}
	argcount := 1<<(maxarity+1) - 1<<minarity
	return func(c *compiler) {
		if c.customFuncs == nil {
			c.customFuncs = make(map[string]function)
		}
		if fn, ok := c.customFuncs[name]; ok {
			if fn.iter != iter {
				panic(fmt.Sprintf("cannot define both iterator and non-iterator functions for %q", name))
			}
			c.customFuncs[name] = function{
				argcount | fn.argcount, iter,
				func(x any, xs []any) any {
					if argcount&(1<<len(xs)) != 0 {
						return f(x, xs)
					}
					return fn.callback(x, xs)
				},
			}
		} else {
			c.customFuncs[name] = function{argcount, iter, f}
		}
	}
}

// WithInputIter is a compiler option for input iterator used by input(s)/0.
// Note that input and inputs functions are not allowed by default. We have
// to distinguish the query input and the values for input(s) functions. For
// example, consider using inputs with --null-input. If you want to allow
// input(s) functions, create an [Iter] and use WithInputIter option.
func WithInputIter(inputIter Iter) CompilerOption {
	return func(c *compiler) {
		c.inputIter = inputIter
	}
}
 070701000007A8000081A4000000000000000000000001645E367C0000AB3B000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/parser.go  // Code generated by goyacc -o parser.go parser.go.y. DO NOT EDIT.

//line parser.go.y:2
package gojq

import __yyfmt__ "fmt"

// Parse a query string, and returns the query struct.
//
// If parsing failed, the returned error has the method Token() (string, int),
// which reports the invalid token and the byte offset in the query string. The
// token is empty if the error occurred after scanning the entire query string.
// The byte offset is the scanned bytes when the error occurred.
//
//line parser.go.y:2
func Parse(src string) (*Query, error) {
	l := newLexer(src)
	if yyParse(l) > 0 {
		return nil, l.err
	}
	return l.result, nil
}

func reverseFuncDef(xs []*FuncDef) []*FuncDef {
	for i, j := 0, len(xs)-1; i < j; i, j = i+1, j-1 {
		xs[i], xs[j] = xs[j], xs[i]
	}
	return xs
}

func prependFuncDef(xs []*FuncDef, x *FuncDef) []*FuncDef {
	xs = append(xs, nil)
	copy(xs[1:], xs)
	xs[0] = x
	return xs
}

//line parser.go.y:33
type yySymType struct {
	yys      int
	value    any
	token    string
	operator Operator
}

const tokAltOp = 57346
const tokUpdateOp = 57347
const tokDestAltOp = 57348
const tokOrOp = 57349
const tokAndOp = 57350
const tokCompareOp = 57351
const tokModule = 57352
const tokImport = 57353
const tokInclude = 57354
const tokDef = 57355
const tokAs = 57356
const tokLabel = 57357
const tokBreak = 57358
const tokNull = 57359
const tokTrue = 57360
const tokFalse = 57361
const tokIdent = 57362
const tokVariable = 57363
const tokModuleIdent = 57364
const tokModuleVariable = 57365
const tokIndex = 57366
const tokNumber = 57367
const tokFormat = 57368
const tokString = 57369
const tokStringStart = 57370
const tokStringQuery = 57371
const tokStringEnd = 57372
const tokIf = 57373
const tokThen = 57374
const tokElif = 57375
const tokElse = 57376
const tokEnd = 57377
const tokTry = 57378
const tokCatch = 57379
const tokReduce = 57380
const tokForeach = 57381
const tokRecurse = 57382
const tokFuncDefPost = 57383
const tokTermPost = 57384
const tokEmptyCatch = 57385
const tokInvalid = 57386
const tokInvalidEscapeSequence = 57387
const tokUnterminatedString = 57388

var yyToknames = [...]string{
	"$end",
	"error",
	"$unk",
	"tokAltOp",
	"tokUpdateOp",
	"tokDestAltOp",
	"tokOrOp",
	"tokAndOp",
	"tokCompareOp",
	"tokModule",
	"tokImport",
	"tokInclude",
	"tokDef",
	"tokAs",
	"tokLabel",
	"tokBreak",
	"tokNull",
	"tokTrue",
	"tokFalse",
	"tokIdent",
	"tokVariable",
	"tokModuleIdent",
	"tokModuleVariable",
	"tokIndex",
	"tokNumber",
	"tokFormat",
	"tokString",
	"tokStringStart",
	"tokStringQuery",
	"tokStringEnd",
	"tokIf",
	"tokThen",
	"tokElif",
	"tokElse",
	"tokEnd",
	"tokTry",
	"tokCatch",
	"tokReduce",
	"tokForeach",
	"tokRecurse",
	"tokFuncDefPost",
	"tokTermPost",
	"tokEmptyCatch",
	"tokInvalid",
	"tokInvalidEscapeSequence",
	"tokUnterminatedString",
	"'|'",
	"','",
	"'+'",
	"'-'",
	"'*'",
	"'/'",
	"'%'",
	"'.'",
	"'?'",
	"'['",
	"';'",
	"':'",
	"'('",
	"')'",
	"']'",
	"'{'",
	"'}'",
}

var yyStatenames = [...]string{}

const yyEofCode = 1
const yyErrCode = 2
const yyInitialStackSize = 16

//line parser.go.y:693

//line yacctab:1
var yyExca = [...]int16{
	-1, 1,
	1, -1,
	-2, 0,
	-1, 97,
	55, 0,
	-2, 104,
	-1, 130,
	5, 0,
	-2, 32,
	-1, 133,
	9, 0,
	-2, 35,
	-1, 194,
	58, 114,
	-2, 54,
}

const yyPrivate = 57344

const yyLast = 1127

var yyAct = [...]int16{
	86, 214, 174, 112, 12, 203, 9, 175, 111, 31,
	190, 6, 156, 140, 117, 47, 95, 97, 93, 94,
	89, 141, 49, 7, 179, 180, 181, 240, 246, 264,
	239, 103, 177, 106, 178, 227, 164, 119, 107, 108,
	105, 245, 102, 75, 76, 113, 77, 78, 79, 123,
	226, 163, 211, 225, 259, 210, 142, 179, 180, 181,
	158, 159, 143, 182, 122, 177, 224, 178, 219, 7,
	235, 234, 104, 127, 243, 128, 129, 130, 131, 132,
	133, 134, 135, 136, 137, 138, 72, 74, 80, 81,
	82, 83, 84, 147, 73, 88, 182, 196, 73, 229,
	195, 145, 7, 150, 228, 161, 166, 165, 157, 126,
	125, 124, 144, 88, 258, 167, 80, 81, 82, 83,
	84, 206, 73, 44, 242, 91, 90, 92, 183, 184,
	82, 83, 84, 154, 73, 153, 267, 186, 49, 173,
	42, 43, 100, 91, 90, 92, 99, 191, 120, 197,
	256, 257, 200, 192, 201, 202, 188, 75, 76, 207,
	77, 78, 79, 198, 199, 209, 42, 43, 216, 92,
	215, 215, 218, 213, 113, 98, 75, 76, 185, 77,
	78, 79, 204, 205, 101, 221, 222, 170, 155, 171,
	169, 3, 28, 27, 230, 96, 220, 232, 176, 46,
	223, 11, 80, 81, 82, 83, 84, 11, 73, 78,
	79, 157, 241, 110, 8, 152, 237, 255, 236, 72,
	74, 80, 81, 82, 83, 84, 85, 73, 79, 278,
	160, 191, 277, 121, 189, 253, 254, 192, 248, 247,
	187, 139, 249, 250, 208, 262, 260, 261, 215, 263,
	80, 81, 82, 83, 84, 149, 73, 268, 269, 10,
	270, 5, 4, 2, 1, 88, 272, 273, 80, 81,
	82, 83, 84, 0, 73, 279, 0, 0, 271, 280,
	51, 52, 0, 53, 54, 55, 56, 57, 58, 59,
	60, 61, 62, 115, 116, 91, 90, 92, 0, 0,
	42, 43, 0, 87, 63, 64, 65, 66, 67, 68,
	69, 70, 71, 88, 0, 20, 0, 17, 37, 24,
	25, 26, 38, 40, 39, 41, 23, 29, 30, 42,
	43, 0, 114, 15, 0, 0, 212, 0, 16, 0,
	13, 14, 22, 91, 90, 92, 0, 0, 0, 0,
	0, 33, 34, 0, 0, 0, 21, 0, 36, 0,
	148, 32, 0, 146, 35, 51, 52, 0, 53, 54,
	55, 56, 57, 58, 59, 60, 61, 62, 115, 116,
	0, 0, 0, 0, 0, 42, 43, 0, 0, 63,
	64, 65, 66, 67, 68, 69, 70, 71, 18, 19,
	20, 0, 17, 37, 24, 25, 26, 38, 40, 39,
	41, 23, 29, 30, 42, 43, 0, 114, 15, 0,
	0, 109, 0, 16, 0, 13, 14, 22, 0, 0,
	0, 0, 0, 0, 0, 0, 33, 34, 0, 0,
	0, 21, 0, 36, 0, 0, 32, 0, 20, 35,
	17, 37, 24, 25, 26, 38, 40, 39, 41, 23,
	29, 30, 42, 43, 0, 0, 15, 0, 0, 0,
	0, 16, 0, 13, 14, 22, 0, 0, 0, 0,
	0, 0, 0, 0, 33, 34, 0, 0, 0, 21,
	0, 36, 0, 0, 32, 0, 231, 35, 20, 0,
	17, 37, 24, 25, 26, 38, 40, 39, 41, 23,
	29, 30, 42, 43, 0, 0, 15, 0, 0, 0,
	0, 16, 0, 13, 14, 22, 0, 0, 0, 0,
	0, 0, 0, 0, 33, 34, 0, 0, 0, 21,
	0, 36, 0, 0, 32, 0, 118, 35, 20, 0,
	17, 37, 24, 25, 26, 38, 40, 39, 41, 23,
	29, 30, 42, 43, 0, 0, 15, 0, 77, 78,
	79, 16, 0, 13, 14, 22, 0, 0, 0, 0,
	0, 0, 0, 0, 33, 34, 0, 0, 0, 21,
	0, 36, 0, 0, 32, 51, 52, 35, 53, 54,
	55, 56, 57, 58, 59, 60, 61, 62, 48, 0,
	80, 81, 82, 83, 84, 50, 73, 0, 0, 63,
	64, 65, 66, 67, 68, 69, 70, 71, 51, 52,
	0, 53, 54, 55, 56, 57, 58, 59, 60, 61,
	62, 48, 0, 0, 0, 0, 0, 0, 50, 0,
	0, 172, 63, 64, 65, 66, 67, 68, 69, 70,
	71, 51, 52, 0, 53, 54, 55, 56, 57, 58,
	59, 60, 61, 62, 115, 194, 0, 0, 0, 0,
	0, 42, 43, 0, 45, 63, 64, 65, 66, 67,
	68, 69, 70, 71, 37, 24, 25, 26, 38, 40,
	39, 41, 23, 29, 30, 42, 43, 75, 76, 0,
	77, 78, 79, 193, 0, 0, 0, 0, 22, 0,
	0, 0, 0, 0, 0, 0, 0, 33, 34, 0,
	0, 0, 21, 0, 36, 0, 0, 32, 75, 76,
	35, 77, 78, 79, 0, 0, 0, 0, 0, 0,
	72, 74, 80, 81, 82, 83, 84, 0, 73, 0,
	0, 0, 75, 76, 252, 77, 78, 79, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 72, 74, 80, 81, 82, 83, 84, 0, 73,
	0, 0, 0, 75, 76, 233, 77, 78, 79, 0,
	0, 0, 0, 0, 0, 72, 74, 80, 81, 82,
	83, 84, 0, 73, 0, 0, 0, 75, 76, 168,
	77, 78, 79, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 72, 74, 80, 81,
	82, 83, 84, 0, 73, 0, 0, 75, 76, 281,
	77, 78, 79, 0, 0, 0, 0, 0, 0, 0,
	72, 74, 80, 81, 82, 83, 84, 0, 73, 0,
	0, 75, 76, 276, 77, 78, 79, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	72, 74, 80, 81, 82, 83, 84, 0, 73, 0,
	0, 75, 76, 251, 77, 78, 79, 0, 0, 0,
	0, 0, 0, 0, 72, 74, 80, 81, 82, 83,
	84, 0, 73, 0, 0, 75, 76, 244, 77, 78,
	79, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 72, 74, 80, 81, 82, 83,
	84, 0, 73, 0, 0, 75, 76, 217, 77, 78,
	79, 0, 0, 0, 0, 0, 0, 0, 72, 74,
	80, 81, 82, 83, 84, 0, 73, 0, 0, 75,
	76, 162, 77, 78, 79, 0, 0, 0, 0, 0,
	75, 76, 0, 77, 78, 79, 0, 0, 72, 74,
	80, 81, 82, 83, 84, 0, 73, 0, 275, 75,
	76, 0, 77, 78, 79, 0, 0, 0, 0, 0,
	0, 0, 72, 74, 80, 81, 82, 83, 84, 0,
	73, 0, 266, 72, 74, 80, 81, 82, 83, 84,
	0, 73, 0, 265, 75, 76, 0, 77, 78, 79,
	0, 0, 72, 74, 80, 81, 82, 83, 84, 0,
	73, 0, 238, 0, 0, 0, 75, 76, 0, 77,
	78, 79, 274, 0, 0, 75, 76, 0, 77, 78,
	79, 0, 0, 0, 0, 0, 0, 72, 74, 80,
	81, 82, 83, 84, 151, 73, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 72,
	74, 80, 81, 82, 83, 84, 0, 73, 72, 74,
	80, 81, 82, 83, 84, 0, 73,
}

var yyPact = [...]int16{
	181, -1000, -1000, -39, -1000, 387, 66, 621, -1000, 1071,
	-1000, 535, 289, 678, 678, 535, 535, 154, 119, 115,
	164, 113, -1000, -1000, -1000, -1000, -1000, 13, -1000, -1000,
	139, -1000, 535, 678, 678, 358, 485, 127, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, 1, -1000, 53, 52,
	51, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, 535, -1000, 535, 535, 535, 535, 535, 535,
	535, 535, 535, 535, 535, -1000, 1071, 0, -1000, -1000,
	-1000, 113, 302, 241, 89, 1062, 535, 98, 86, 174,
	-39, 2, -1000, -1000, 535, -1000, 921, 71, 71, -1000,
	-12, -1000, 49, 48, 535, -1000, -1000, -1000, -1000, 758,
	-1000, 160, -1000, 588, 40, 40, 40, 1071, 153, 153,
	561, 201, 219, 67, 79, 79, 43, 43, 43, 131,
	-1000, -1000, 0, 654, -1000, -1000, -1000, 39, 535, 0,
	0, 535, -1000, 535, 535, 162, 64, -1000, 535, 162,
	-5, 1071, -1000, -1000, 273, 678, 678, 897, -1000, -1000,
	-1000, 535, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, 7, -1000, -1000, 535, 0, 5, -1000, -13,
	-1000, 46, 41, 535, -1000, -1000, 435, 734, 12, 11,
	1071, -1000, 1071, -39, -1000, -1000, -1000, 1005, -30, -1000,
	-1000, 535, -1000, -1000, 77, 71, 77, 16, 867, -1000,
	-20, -1000, 1071, -1000, -1000, 0, -1000, 654, 0, 0,
	843, -1000, 703, -1000, 535, 535, 117, 57, -1000, -4,
	162, 1071, 678, 678, -1000, -1000, 40, -1000, -1000, -1000,
	-1000, -29, -1000, 986, 975, 101, 535, 535, -1000, 535,
	-1000, 71, 77, -1000, 0, 535, 535, -1000, 1040, 1071,
	951, -1000, 813, 172, 535, -1000, -1000, -1000, 535, 1071,
	789, -1000,
}

var yyPgo = [...]int16{
	0, 264, 263, 262, 261, 259, 12, 214, 195, 244,
	0, 241, 13, 240, 234, 10, 4, 9, 233, 20,
	230, 218, 217, 215, 213, 8, 1, 2, 7, 199,
	15, 198, 196, 5, 193, 192, 14, 3,
}

var yyR1 = [...]int8{
	0, 1, 2, 2, 3, 3, 4, 4, 5, 5,
	6, 6, 7, 7, 8, 8, 9, 9, 33, 33,
	10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
	10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
	10, 10, 11, 11, 12, 12, 12, 13, 13, 14,
	14, 15, 15, 15, 15, 16, 16, 16, 16, 16,
	16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
	16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
	16, 16, 16, 16, 17, 17, 18, 18, 18, 34,
	34, 35, 35, 19, 19, 19, 19, 19, 20, 20,
	21, 21, 22, 22, 23, 23, 24, 24, 25, 25,
	25, 25, 25, 37, 37, 37, 26, 26, 27, 27,
	27, 27, 27, 27, 27, 28, 28, 28, 29, 29,
	30, 30, 30, 31, 31, 32, 32, 36, 36, 36,
	36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
	36, 36, 36, 36, 36, 36, 36, 36,
}

var yyR2 = [...]int8{
	0, 2, 0, 3, 2, 2, 0, 2, 6, 4,
	0, 1, 0, 2, 5, 8, 1, 3, 1, 1,
	2, 3, 5, 9, 9, 11, 7, 3, 4, 2,
	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 1, 1, 3, 1, 3, 3, 1, 3, 1,
	3, 3, 3, 5, 1, 1, 1, 1, 2, 2,
	1, 1, 1, 1, 4, 1, 1, 1, 2, 1,
	3, 2, 2, 2, 3, 4, 2, 3, 2, 2,
	2, 2, 3, 3, 1, 3, 0, 2, 4, 1,
	1, 1, 1, 2, 3, 4, 4, 5, 1, 3,
	0, 5, 0, 2, 0, 2, 1, 3, 3, 3,
	5, 1, 1, 1, 1, 1, 1, 3, 1, 1,
	1, 1, 1, 1, 1, 2, 3, 4, 1, 3,
	3, 3, 3, 2, 3, 1, 3, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1,
}

var yyChk = [...]int16{
	-1000, -1, -2, 10, -3, -4, -28, 62, -7, -10,
	-5, -8, -16, 38, 39, 31, 36, 15, 11, 12,
	13, 54, 40, 24, 17, 18, 19, -34, -35, 25,
	26, -17, 59, 49, 50, 62, 56, 16, 20, 22,
	21, 23, 27, 28, 57, 63, -29, -30, 20, -36,
	27, 7, 8, 10, 11, 12, 13, 14, 15, 16,
	17, 18, 19, 31, 32, 33, 34, 35, 36, 37,
	38, 39, 47, 55, 48, 4, 5, 7, 8, 9,
	49, 50, 51, 52, 53, -7, -10, 14, 24, -19,
	55, 54, 56, -16, -16, -10, -8, -10, 21, 27,
	27, 20, -19, -17, 59, -17, -10, -16, -16, 63,
	-24, -25, -37, -17, 59, 20, 21, -36, 61, -10,
	21, -18, 63, 48, 58, 58, 58, -10, -10, -10,
	-10, -10, -10, -10, -10, -10, -10, -10, -10, -11,
	-12, 21, 56, 62, -19, -17, 61, -10, 58, 14,
	14, 32, -23, 37, 47, 14, -6, -28, 58, 59,
	-20, -10, 60, 63, 48, 58, 58, -10, 61, 30,
	27, 29, 63, -30, -27, -28, -31, 25, 27, 17,
	18, 19, 56, -27, -27, 47, 6, -13, -12, -14,
	-15, -37, -17, 59, 21, 61, 58, -10, -12, -12,
	-10, -10, -10, -33, 20, 21, 57, -10, -9, -33,
	60, 57, 63, -25, -26, -16, -26, 60, -10, 61,
	-32, -27, -10, -12, 61, 48, 63, 48, 58, 58,
	-10, 61, -10, 61, 59, 59, -21, -6, 57, 60,
	57, -10, 47, 58, 60, 61, 48, -12, -15, -12,
	-12, 60, 61, -10, -10, -22, 33, 34, 57, 58,
	-33, -16, -26, -27, 58, 57, 57, 35, -10, -10,
	-10, -12, -10, -10, 32, 57, 60, 60, 57, -10,
	-10, 60,
}

var yyDef = [...]int16{
	2, -2, 6, 0, 1, 12, 0, 0, 4, 5,
	7, 12, 41, 0, 0, 0, 0, 0, 0, 0,
	0, 55, 56, 57, 60, 61, 62, 63, 65, 66,
	67, 69, 0, 0, 0, 0, 0, 0, 89, 90,
	91, 92, 84, 86, 3, 125, 0, 128, 0, 0,
	0, 137, 138, 139, 140, 141, 142, 143, 144, 145,
	146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
	156, 157, 0, 29, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 13, 20, 0, 79, 80,
	81, 0, 0, 0, 0, 0, 0, -2, 0, 0,
	10, 0, 58, 59, 0, 68, 0, 71, 72, 73,
	0, 106, 111, 112, 0, 113, 114, 115, 76, 0,
	78, 0, 126, 0, 0, 0, 0, 21, 30, 31,
	-2, 33, 34, -2, 36, 37, 38, 39, 40, 0,
	42, 44, 0, 0, 82, 83, 93, 0, 0, 0,
	0, 0, 27, 0, 0, 0, 0, 11, 0, 0,
	0, 98, 70, 74, 0, 0, 0, 0, 77, 85,
	87, 0, 127, 129, 130, 118, 119, 120, 121, 122,
	123, 124, 0, 131, 132, 0, 0, 0, 47, 0,
	49, 0, 0, 0, -2, 94, 0, 0, 0, 0,
	100, 105, 28, 10, 18, 19, 9, 0, 0, 16,
	64, 0, 75, 107, 108, 116, 109, 0, 0, 133,
	0, 135, 22, 43, 45, 0, 46, 0, 0, 0,
	0, 95, 0, 96, 0, 0, 102, 0, 14, 0,
	0, 99, 0, 0, 88, 134, 0, 48, 50, 51,
	52, 0, 97, 0, 0, 0, 0, 0, 8, 0,
	17, 117, 110, 136, 0, 0, 0, 26, 0, 103,
	0, 53, 0, 0, 0, 15, 23, 24, 0, 101,
	0, 25,
}

var yyTok1 = [...]int8{
	1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 53, 3, 3,
	59, 60, 51, 49, 48, 50, 54, 52, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 58, 57,
	3, 3, 3, 55, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 56, 3, 61, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 62, 47, 63,
}

var yyTok2 = [...]int8{
	2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
	12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
	22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
	32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
	42, 43, 44, 45, 46,
}

var yyTok3 = [...]int8{
	0,
}

var yyErrorMessages = [...]struct {
	state int
	token int
	msg   string
}{}

//line yaccpar:1

/*	parser for yacc output	*/

var (
	yyDebug        = 0
	yyErrorVerbose = false
)

type yyLexer interface {
	Lex(lval *yySymType) int
	Error(s string)
}

type yyParser interface {
	Parse(yyLexer) int
	Lookahead() int
}

type yyParserImpl struct {
	lval  yySymType
	stack [yyInitialStackSize]yySymType
	char  int
}

func (p *yyParserImpl) Lookahead() int {
	return p.char
}

func yyNewParser() yyParser {
	return &yyParserImpl{}
}

const yyFlag = -1000

func yyTokname(c int) string {
	if c >= 1 && c-1 < len(yyToknames) {
		if yyToknames[c-1] != "" {
			return yyToknames[c-1]
		}
	}
	return __yyfmt__.Sprintf("tok-%v", c)
}

func yyStatname(s int) string {
	if s >= 0 && s < len(yyStatenames) {
		if yyStatenames[s] != "" {
			return yyStatenames[s]
		}
	}
	return __yyfmt__.Sprintf("state-%v", s)
}

func yyErrorMessage(state, lookAhead int) string {
	const TOKSTART = 4

	if !yyErrorVerbose {
		return "syntax error"
	}

	for _, e := range yyErrorMessages {
		if e.state == state && e.token == lookAhead {
			return "syntax error: " + e.msg
		}
	}

	res := "syntax error: unexpected " + yyTokname(lookAhead)

	// To match Bison, suggest at most four expected tokens.
	expected := make([]int, 0, 4)

	// Look for shiftable tokens.
	base := int(yyPact[state])
	for tok := TOKSTART; tok-1 < len(yyToknames); tok++ {
		if n := base + tok; n >= 0 && n < yyLast && int(yyChk[int(yyAct[n])]) == tok {
			if len(expected) == cap(expected) {
				return res
			}
			expected = append(expected, tok)
		}
	}

	if yyDef[state] == -2 {
		i := 0
		for yyExca[i] != -1 || int(yyExca[i+1]) != state {
			i += 2
		}

		// Look for tokens that we accept or reduce.
		for i += 2; yyExca[i] >= 0; i += 2 {
			tok := int(yyExca[i])
			if tok < TOKSTART || yyExca[i+1] == 0 {
				continue
			}
			if len(expected) == cap(expected) {
				return res
			}
			expected = append(expected, tok)
		}

		// If the default action is to accept or reduce, give up.
		if yyExca[i+1] != 0 {
			return res
		}
	}

	for i, tok := range expected {
		if i == 0 {
			res += ", expecting "
		} else {
			res += " or "
		}
		res += yyTokname(tok)
	}
	return res
}

func yylex1(lex yyLexer, lval *yySymType) (char, token int) {
	token = 0
	char = lex.Lex(lval)
	if char <= 0 {
		token = int(yyTok1[0])
		goto out
	}
	if char < len(yyTok1) {
		token = int(yyTok1[char])
		goto out
	}
	if char >= yyPrivate {
		if char < yyPrivate+len(yyTok2) {
			token = int(yyTok2[char-yyPrivate])
			goto out
		}
	}
	for i := 0; i < len(yyTok3); i += 2 {
		token = int(yyTok3[i+0])
		if token == char {
			token = int(yyTok3[i+1])
			goto out
		}
	}

out:
	if token == 0 {
		token = int(yyTok2[1]) /* unknown char */
	}
	if yyDebug >= 3 {
		__yyfmt__.Printf("lex %s(%d)\n", yyTokname(token), uint(char))
	}
	return char, token
}

func yyParse(yylex yyLexer) int {
	return yyNewParser().Parse(yylex)
}

func (yyrcvr *yyParserImpl) Parse(yylex yyLexer) int {
	var yyn int
	var yyVAL yySymType
	var yyDollar []yySymType
	_ = yyDollar // silence set and not used
	yyS := yyrcvr.stack[:]

	Nerrs := 0   /* number of errors */
	Errflag := 0 /* error recovery flag */
	yystate := 0
	yyrcvr.char = -1
	yytoken := -1 // yyrcvr.char translated into internal numbering
	defer func() {
		// Make sure we report no lookahead when not parsing.
		yystate = -1
		yyrcvr.char = -1
		yytoken = -1
	}()
	yyp := -1
	goto yystack

ret0:
	return 0

ret1:
	return 1

yystack:
	/* put a state and value onto the stack */
	if yyDebug >= 4 {
		__yyfmt__.Printf("char %v in %v\n", yyTokname(yytoken), yyStatname(yystate))
	}

	yyp++
	if yyp >= len(yyS) {
		nyys := make([]yySymType, len(yyS)*2)
		copy(nyys, yyS)
		yyS = nyys
	}
	yyS[yyp] = yyVAL
	yyS[yyp].yys = yystate

yynewstate:
	yyn = int(yyPact[yystate])
	if yyn <= yyFlag {
		goto yydefault /* simple state */
	}
	if yyrcvr.char < 0 {
		yyrcvr.char, yytoken = yylex1(yylex, &yyrcvr.lval)
	}
	yyn += yytoken
	if yyn < 0 || yyn >= yyLast {
		goto yydefault
	}
	yyn = int(yyAct[yyn])
	if int(yyChk[yyn]) == yytoken { /* valid shift */
		yyrcvr.char = -1
		yytoken = -1
		yyVAL = yyrcvr.lval
		yystate = yyn
		if Errflag > 0 {
			Errflag--
		}
		goto yystack
	}

yydefault:
	/* default state action */
	yyn = int(yyDef[yystate])
	if yyn == -2 {
		if yyrcvr.char < 0 {
			yyrcvr.char, yytoken = yylex1(yylex, &yyrcvr.lval)
		}

		/* look through exception table */
		xi := 0
		for {
			if yyExca[xi+0] == -1 && int(yyExca[xi+1]) == yystate {
				break
			}
			xi += 2
		}
		for xi += 2; ; xi += 2 {
			yyn = int(yyExca[xi+0])
			if yyn < 0 || yyn == yytoken {
				break
			}
		}
		yyn = int(yyExca[xi+1])
		if yyn < 0 {
			goto ret0
		}
	}
	if yyn == 0 {
		/* error ... attempt to resume parsing */
		switch Errflag {
		case 0: /* brand new error */
			yylex.Error(yyErrorMessage(yystate, yytoken))
			Nerrs++
			if yyDebug >= 1 {
				__yyfmt__.Printf("%s", yyStatname(yystate))
				__yyfmt__.Printf(" saw %s\n", yyTokname(yytoken))
			}
			fallthrough

		case 1, 2: /* incompletely recovered error ... try again */
			Errflag = 3

			/* find a state where "error" is a legal shift action */
			for yyp >= 0 {
				yyn = int(yyPact[yyS[yyp].yys]) + yyErrCode
				if yyn >= 0 && yyn < yyLast {
					yystate = int(yyAct[yyn]) /* simulate a shift of "error" */
					if int(yyChk[yystate]) == yyErrCode {
						goto yystack
					}
				}

				/* the current p has no shift on "error", pop stack */
				if yyDebug >= 2 {
					__yyfmt__.Printf("error recovery pops state %d\n", yyS[yyp].yys)
				}
				yyp--
			}
			/* there is no state on the stack with an error shift ... abort */
			goto ret1

		case 3: /* no shift yet; clobber input char */
			if yyDebug >= 2 {
				__yyfmt__.Printf("error recovery discards %s\n", yyTokname(yytoken))
			}
			if yytoken == yyEofCode {
				goto ret1
			}
			yyrcvr.char = -1
			yytoken = -1
			goto yynewstate /* try again in the same state */
		}
	}

	/* reduction by production yyn */
	if yyDebug >= 2 {
		__yyfmt__.Printf("reduce %v in:\n\t%v\n", yyn, yyStatname(yystate))
	}

	yynt := yyn
	yypt := yyp
	_ = yypt // guard against "declared and not used"

	yyp -= int(yyR2[yyn])
	// yyp is now the index of $0. Perform the default action. Iff the
	// reduced production is ε, $1 is possibly out of range.
	if yyp+1 >= len(yyS) {
		nyys := make([]yySymType, len(yyS)*2)
		copy(nyys, yyS)
		yyS = nyys
	}
	yyVAL = yyS[yyp+1]

	/* consult goto table to find next state */
	yyn = int(yyR1[yyn])
	yyg := int(yyPgo[yyn])
	yyj := yyg + yyS[yyp].yys + 1

	if yyj >= yyLast {
		yystate = int(yyAct[yyg])
	} else {
		yystate = int(yyAct[yyj])
		if int(yyChk[yystate]) != -yyn {
			yystate = int(yyAct[yyg])
		}
	}
	// dummy call; replaced with literal code
	switch yynt {

	case 1:
		yyDollar = yyS[yypt-2 : yypt+1]
//line parser.go.y:73
		{
			if yyDollar[1].value != nil {
				yyDollar[2].value.(*Query).Meta = yyDollar[1].value.(*ConstObject)
			}
			yylex.(*lexer).result = yyDollar[2].value.(*Query)
		}
	case 2:
		yyDollar = yyS[yypt-0 : yypt+1]
//line parser.go.y:80
		{
			yyVAL.value = nil
		}
	case 3:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:84
		{
			yyVAL.value = yyDollar[2].value
		}
	case 4:
		yyDollar = yyS[yypt-2 : yypt+1]
//line parser.go.y:90
		{
			yyVAL.value = &Query{Imports: yyDollar[1].value.([]*Import), FuncDefs: reverseFuncDef(yyDollar[2].value.([]*FuncDef)), Term: &Term{Type: TermTypeIdentity}}
		}
	case 5:
		yyDollar = yyS[yypt-2 : yypt+1]
//line parser.go.y:94
		{
			if yyDollar[1].value != nil {
				yyDollar[2].value.(*Query).Imports = yyDollar[1].value.([]*Import)
			}
			yyVAL.value = yyDollar[2].value
		}
	case 6:
		yyDollar = yyS[yypt-0 : yypt+1]
//line parser.go.y:101
		{
			yyVAL.value = []*Import(nil)
		}
	case 7:
		yyDollar = yyS[yypt-2 : yypt+1]
//line parser.go.y:105
		{
			yyVAL.value = append(yyDollar[1].value.([]*Import), yyDollar[2].value.(*Import))
		}
	case 8:
		yyDollar = yyS[yypt-6 : yypt+1]
//line parser.go.y:111
		{
			yyVAL.value = &Import{ImportPath: yyDollar[2].token, ImportAlias: yyDollar[4].token, Meta: yyDollar[5].value.(*ConstObject)}
		}
	case 9:
		yyDollar = yyS[yypt-4 : yypt+1]
//line parser.go.y:115
		{
			yyVAL.value = &Import{IncludePath: yyDollar[2].token, Meta: yyDollar[3].value.(*ConstObject)}
		}
	case 10:
		yyDollar = yyS[yypt-0 : yypt+1]
//line parser.go.y:121
		{
			yyVAL.value = (*ConstObject)(nil)
		}
	case 11:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:124
		{
		}
	case 12:
		yyDollar = yyS[yypt-0 : yypt+1]
//line parser.go.y:128
		{
			yyVAL.value = []*FuncDef(nil)
		}
	case 13:
		yyDollar = yyS[yypt-2 : yypt+1]
//line parser.go.y:132
		{
			yyVAL.value = append(yyDollar[2].value.([]*FuncDef), yyDollar[1].value.(*FuncDef))
		}
	case 14:
		yyDollar = yyS[yypt-5 : yypt+1]
//line parser.go.y:138
		{
			yyVAL.value = &FuncDef{Name: yyDollar[2].token, Body: yyDollar[4].value.(*Query)}
		}
	case 15:
		yyDollar = yyS[yypt-8 : yypt+1]
//line parser.go.y:142
		{
			yyVAL.value = &FuncDef{yyDollar[2].token, yyDollar[4].value.([]string), yyDollar[7].value.(*Query)}
		}
	case 16:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:148
		{
			yyVAL.value = []string{yyDollar[1].token}
		}
	case 17:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:152
		{
			yyVAL.value = append(yyDollar[1].value.([]string), yyDollar[3].token)
		}
	case 18:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:157
		{
		}
	case 19:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:158
		{
		}
	case 20:
		yyDollar = yyS[yypt-2 : yypt+1]
//line parser.go.y:162
		{
			yyDollar[2].value.(*Query).FuncDefs = prependFuncDef(yyDollar[2].value.(*Query).FuncDefs, yyDollar[1].value.(*FuncDef))
			yyVAL.value = yyDollar[2].value
		}
	case 21:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:167
		{
			yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpPipe, Right: yyDollar[3].value.(*Query)}
		}
	case 22:
		yyDollar = yyS[yypt-5 : yypt+1]
//line parser.go.y:171
		{
			yyDollar[1].value.(*Term).SuffixList = append(yyDollar[1].value.(*Term).SuffixList, &Suffix{Bind: &Bind{yyDollar[3].value.([]*Pattern), yyDollar[5].value.(*Query)}})
			yyVAL.value = &Query{Term: yyDollar[1].value.(*Term)}
		}
	case 23:
		yyDollar = yyS[yypt-9 : yypt+1]
//line parser.go.y:176
		{
			yyVAL.value = &Query{Term: &Term{Type: TermTypeReduce, Reduce: &Reduce{yyDollar[2].value.(*Term), yyDollar[4].value.(*Pattern), yyDollar[6].value.(*Query), yyDollar[8].value.(*Query)}}}
		}
	case 24:
		yyDollar = yyS[yypt-9 : yypt+1]
//line parser.go.y:180
		{
			yyVAL.value = &Query{Term: &Term{Type: TermTypeForeach, Foreach: &Foreach{yyDollar[2].value.(*Term), yyDollar[4].value.(*Pattern), yyDollar[6].value.(*Query), yyDollar[8].value.(*Query), nil}}}
		}
	case 25:
		yyDollar = yyS[yypt-11 : yypt+1]
//line parser.go.y:184
		{
			yyVAL.value = &Query{Term: &Term{Type: TermTypeForeach, Foreach: &Foreach{yyDollar[2].value.(*Term), yyDollar[4].value.(*Pattern), yyDollar[6].value.(*Query), yyDollar[8].value.(*Query), yyDollar[10].value.(*Query)}}}
		}
	case 26:
		yyDollar = yyS[yypt-7 : yypt+1]
//line parser.go.y:188
		{
			yyVAL.value = &Query{Term: &Term{Type: TermTypeIf, If: &If{yyDollar[2].value.(*Query), yyDollar[4].value.(*Query), yyDollar[5].value.([]*IfElif), yyDollar[6].value.(*Query)}}}
		}
	case 27:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:192
		{
			yyVAL.value = &Query{Term: &Term{Type: TermTypeTry, Try: &Try{yyDollar[2].value.(*Query), yyDollar[3].value.(*Query)}}}
		}
	case 28:
		yyDollar = yyS[yypt-4 : yypt+1]
//line parser.go.y:196
		{
			yyVAL.value = &Query{Term: &Term{Type: TermTypeLabel, Label: &Label{yyDollar[2].token, yyDollar[4].value.(*Query)}}}
		}
	case 29:
		yyDollar = yyS[yypt-2 : yypt+1]
//line parser.go.y:200
		{
			if t := yyDollar[1].value.(*Query).Term; t != nil {
				t.SuffixList = append(t.SuffixList, &Suffix{Optional: true})
			} else {
				yyVAL.value = &Query{Term: &Term{Type: TermTypeQuery, Query: yyDollar[1].value.(*Query), SuffixList: []*Suffix{{Optional: true}}}}
			}
		}
	case 30:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:208
		{
			yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpComma, Right: yyDollar[3].value.(*Query)}
		}
	case 31:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:212
		{
			yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: yyDollar[2].operator, Right: yyDollar[3].value.(*Query)}
		}
	case 32:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:216
		{
			yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: yyDollar[2].operator, Right: yyDollar[3].value.(*Query)}
		}
	case 33:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:220
		{
			yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpOr, Right: yyDollar[3].value.(*Query)}
		}
	case 34:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:224
		{
			yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpAnd, Right: yyDollar[3].value.(*Query)}
		}
	case 35:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:228
		{
			yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: yyDollar[2].operator, Right: yyDollar[3].value.(*Query)}
		}
	case 36:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:232
		{
			yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpAdd, Right: yyDollar[3].value.(*Query)}
		}
	case 37:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:236
		{
			yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpSub, Right: yyDollar[3].value.(*Query)}
		}
	case 38:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:240
		{
			yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpMul, Right: yyDollar[3].value.(*Query)}
		}
	case 39:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:244
		{
			yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpDiv, Right: yyDollar[3].value.(*Query)}
		}
	case 40:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:248
		{
			yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpMod, Right: yyDollar[3].value.(*Query)}
		}
	case 41:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:252
		{
			yyVAL.value = &Query{Term: yyDollar[1].value.(*Term)}
		}
	case 42:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:258
		{
			yyVAL.value = []*Pattern{yyDollar[1].value.(*Pattern)}
		}
	case 43:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:262
		{
			yyVAL.value = append(yyDollar[1].value.([]*Pattern), yyDollar[3].value.(*Pattern))
		}
	case 44:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:268
		{
			yyVAL.value = &Pattern{Name: yyDollar[1].token}
		}
	case 45:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:272
		{
			yyVAL.value = &Pattern{Array: yyDollar[2].value.([]*Pattern)}
		}
	case 46:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:276
		{
			yyVAL.value = &Pattern{Object: yyDollar[2].value.([]*PatternObject)}
		}
	case 47:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:282
		{
			yyVAL.value = []*Pattern{yyDollar[1].value.(*Pattern)}
		}
	case 48:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:286
		{
			yyVAL.value = append(yyDollar[1].value.([]*Pattern), yyDollar[3].value.(*Pattern))
		}
	case 49:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:292
		{
			yyVAL.value = []*PatternObject{yyDollar[1].value.(*PatternObject)}
		}
	case 50:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:296
		{
			yyVAL.value = append(yyDollar[1].value.([]*PatternObject), yyDollar[3].value.(*PatternObject))
		}
	case 51:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:302
		{
			yyVAL.value = &PatternObject{Key: yyDollar[1].token, Val: yyDollar[3].value.(*Pattern)}
		}
	case 52:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:306
		{
			yyVAL.value = &PatternObject{KeyString: yyDollar[1].value.(*String), Val: yyDollar[3].value.(*Pattern)}
		}
	case 53:
		yyDollar = yyS[yypt-5 : yypt+1]
//line parser.go.y:310
		{
			yyVAL.value = &PatternObject{KeyQuery: yyDollar[2].value.(*Query), Val: yyDollar[5].value.(*Pattern)}
		}
	case 54:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:314
		{
			yyVAL.value = &PatternObject{Key: yyDollar[1].token}
		}
	case 55:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:320
		{
			yyVAL.value = &Term{Type: TermTypeIdentity}
		}
	case 56:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:324
		{
			yyVAL.value = &Term{Type: TermTypeRecurse}
		}
	case 57:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:328
		{
			yyVAL.value = &Term{Type: TermTypeIndex, Index: &Index{Name: yyDollar[1].token}}
		}
	case 58:
		yyDollar = yyS[yypt-2 : yypt+1]
//line parser.go.y:332
		{
			if yyDollar[2].value.(*Suffix).Iter {
				yyVAL.value = &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{yyDollar[2].value.(*Suffix)}}
			} else {
				yyVAL.value = &Term{Type: TermTypeIndex, Index: yyDollar[2].value.(*Suffix).Index}
			}
		}
	case 59:
		yyDollar = yyS[yypt-2 : yypt+1]
//line parser.go.y:340
		{
			yyVAL.value = &Term{Type: TermTypeIndex, Index: &Index{Str: yyDollar[2].value.(*String)}}
		}
	case 60:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:344
		{
			yyVAL.value = &Term{Type: TermTypeNull}
		}
	case 61:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:348
		{
			yyVAL.value = &Term{Type: TermTypeTrue}
		}
	case 62:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:352
		{
			yyVAL.value = &Term{Type: TermTypeFalse}
		}
	case 63:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:356
		{
			yyVAL.value = &Term{Type: TermTypeFunc, Func: &Func{Name: yyDollar[1].token}}
		}
	case 64:
		yyDollar = yyS[yypt-4 : yypt+1]
//line parser.go.y:360
		{
			yyVAL.value = &Term{Type: TermTypeFunc, Func: &Func{Name: yyDollar[1].token, Args: yyDollar[3].value.([]*Query)}}
		}
	case 65:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:364
		{
			yyVAL.value = &Term{Type: TermTypeFunc, Func: &Func{Name: yyDollar[1].token}}
		}
	case 66:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:368
		{
			yyVAL.value = &Term{Type: TermTypeNumber, Number: yyDollar[1].token}
		}
	case 67:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:372
		{
			yyVAL.value = &Term{Type: TermTypeFormat, Format: yyDollar[1].token}
		}
	case 68:
		yyDollar = yyS[yypt-2 : yypt+1]
//line parser.go.y:376
		{
			yyVAL.value = &Term{Type: TermTypeFormat, Format: yyDollar[1].token, Str: yyDollar[2].value.(*String)}
		}
	case 69:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:380
		{
			yyVAL.value = &Term{Type: TermTypeString, Str: yyDollar[1].value.(*String)}
		}
	case 70:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:384
		{
			yyVAL.value = &Term{Type: TermTypeQuery, Query: yyDollar[2].value.(*Query)}
		}
	case 71:
		yyDollar = yyS[yypt-2 : yypt+1]
//line parser.go.y:388
		{
			yyVAL.value = &Term{Type: TermTypeUnary, Unary: &Unary{OpAdd, yyDollar[2].value.(*Term)}}
		}
	case 72:
		yyDollar = yyS[yypt-2 : yypt+1]
//line parser.go.y:392
		{
			yyVAL.value = &Term{Type: TermTypeUnary, Unary: &Unary{OpSub, yyDollar[2].value.(*Term)}}
		}
	case 73:
		yyDollar = yyS[yypt-2 : yypt+1]
//line parser.go.y:396
		{
			yyVAL.value = &Term{Type: TermTypeObject, Object: &Object{}}
		}
	case 74:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:400
		{
			yyVAL.value = &Term{Type: TermTypeObject, Object: &Object{yyDollar[2].value.([]*ObjectKeyVal)}}
		}
	case 75:
		yyDollar = yyS[yypt-4 : yypt+1]
//line parser.go.y:404
		{
			yyVAL.value = &Term{Type: TermTypeObject, Object: &Object{yyDollar[2].value.([]*ObjectKeyVal)}}
		}
	case 76:
		yyDollar = yyS[yypt-2 : yypt+1]
//line parser.go.y:408
		{
			yyVAL.value = &Term{Type: TermTypeArray, Array: &Array{}}
		}
	case 77:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:412
		{
			yyVAL.value = &Term{Type: TermTypeArray, Array: &Array{yyDollar[2].value.(*Query)}}
		}
	case 78:
		yyDollar = yyS[yypt-2 : yypt+1]
//line parser.go.y:416
		{
			yyVAL.value = &Term{Type: TermTypeBreak, Break: yyDollar[2].token}
		}
	case 79:
		yyDollar = yyS[yypt-2 : yypt+1]
//line parser.go.y:420
		{
			yyDollar[1].value.(*Term).SuffixList = append(yyDollar[1].value.(*Term).SuffixList, &Suffix{Index: &Index{Name: yyDollar[2].token}})
		}
	case 80:
		yyDollar = yyS[yypt-2 : yypt+1]
//line parser.go.y:424
		{
			yyDollar[1].value.(*Term).SuffixList = append(yyDollar[1].value.(*Term).SuffixList, yyDollar[2].value.(*Suffix))
		}
	case 81:
		yyDollar = yyS[yypt-2 : yypt+1]
//line parser.go.y:428
		{
			yyDollar[1].value.(*Term).SuffixList = append(yyDollar[1].value.(*Term).SuffixList, &Suffix{Optional: true})
		}
	case 82:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:432
		{
			yyDollar[1].value.(*Term).SuffixList = append(yyDollar[1].value.(*Term).SuffixList, yyDollar[3].value.(*Suffix))
		}
	case 83:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:436
		{
			yyDollar[1].value.(*Term).SuffixList = append(yyDollar[1].value.(*Term).SuffixList, &Suffix{Index: &Index{Str: yyDollar[3].value.(*String)}})
		}
	case 84:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:442
		{
			yyVAL.value = &String{Str: yyDollar[1].token}
		}
	case 85:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:446
		{
			yyVAL.value = &String{Queries: yyDollar[2].value.([]*Query)}
		}
	case 86:
		yyDollar = yyS[yypt-0 : yypt+1]
//line parser.go.y:452
		{
			yyVAL.value = []*Query{}
		}
	case 87:
		yyDollar = yyS[yypt-2 : yypt+1]
//line parser.go.y:456
		{
			yyVAL.value = append(yyDollar[1].value.([]*Query), &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: yyDollar[2].token}}})
		}
	case 88:
		yyDollar = yyS[yypt-4 : yypt+1]
//line parser.go.y:460
		{
			yylex.(*lexer).inString = true
			yyVAL.value = append(yyDollar[1].value.([]*Query), &Query{Term: &Term{Type: TermTypeQuery, Query: yyDollar[3].value.(*Query)}})
		}
	case 89:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:466
		{
		}
	case 90:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:467
		{
		}
	case 91:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:470
		{
		}
	case 92:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:471
		{
		}
	case 93:
		yyDollar = yyS[yypt-2 : yypt+1]
//line parser.go.y:475
		{
			yyVAL.value = &Suffix{Iter: true}
		}
	case 94:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:479
		{
			yyVAL.value = &Suffix{Index: &Index{Start: yyDollar[2].value.(*Query)}}
		}
	case 95:
		yyDollar = yyS[yypt-4 : yypt+1]
//line parser.go.y:483
		{
			yyVAL.value = &Suffix{Index: &Index{Start: yyDollar[2].value.(*Query), IsSlice: true}}
		}
	case 96:
		yyDollar = yyS[yypt-4 : yypt+1]
//line parser.go.y:487
		{
			yyVAL.value = &Suffix{Index: &Index{End: yyDollar[3].value.(*Query), IsSlice: true}}
		}
	case 97:
		yyDollar = yyS[yypt-5 : yypt+1]
//line parser.go.y:491
		{
			yyVAL.value = &Suffix{Index: &Index{Start: yyDollar[2].value.(*Query), End: yyDollar[4].value.(*Query), IsSlice: true}}
		}
	case 98:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:497
		{
			yyVAL.value = []*Query{yyDollar[1].value.(*Query)}
		}
	case 99:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:501
		{
			yyVAL.value = append(yyDollar[1].value.([]*Query), yyDollar[3].value.(*Query))
		}
	case 100:
		yyDollar = yyS[yypt-0 : yypt+1]
//line parser.go.y:507
		{
			yyVAL.value = []*IfElif(nil)
		}
	case 101:
		yyDollar = yyS[yypt-5 : yypt+1]
//line parser.go.y:511
		{
			yyVAL.value = append(yyDollar[1].value.([]*IfElif), &IfElif{yyDollar[3].value.(*Query), yyDollar[5].value.(*Query)})
		}
	case 102:
		yyDollar = yyS[yypt-0 : yypt+1]
//line parser.go.y:517
		{
			yyVAL.value = (*Query)(nil)
		}
	case 103:
		yyDollar = yyS[yypt-2 : yypt+1]
//line parser.go.y:521
		{
			yyVAL.value = yyDollar[2].value
		}
	case 104:
		yyDollar = yyS[yypt-0 : yypt+1]
//line parser.go.y:527
		{
			yyVAL.value = (*Query)(nil)
		}
	case 105:
		yyDollar = yyS[yypt-2 : yypt+1]
//line parser.go.y:531
		{
			yyVAL.value = yyDollar[2].value
		}
	case 106:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:537
		{
			yyVAL.value = []*ObjectKeyVal{yyDollar[1].value.(*ObjectKeyVal)}
		}
	case 107:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:541
		{
			yyVAL.value = append(yyDollar[1].value.([]*ObjectKeyVal), yyDollar[3].value.(*ObjectKeyVal))
		}
	case 108:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:547
		{
			yyVAL.value = &ObjectKeyVal{Key: yyDollar[1].token, Val: yyDollar[3].value.(*ObjectVal)}
		}
	case 109:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:551
		{
			yyVAL.value = &ObjectKeyVal{KeyString: yyDollar[1].value.(*String), Val: yyDollar[3].value.(*ObjectVal)}
		}
	case 110:
		yyDollar = yyS[yypt-5 : yypt+1]
//line parser.go.y:555
		{
			yyVAL.value = &ObjectKeyVal{KeyQuery: yyDollar[2].value.(*Query), Val: yyDollar[5].value.(*ObjectVal)}
		}
	case 111:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:559
		{
			yyVAL.value = &ObjectKeyVal{Key: yyDollar[1].token}
		}
	case 112:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:563
		{
			yyVAL.value = &ObjectKeyVal{KeyString: yyDollar[1].value.(*String)}
		}
	case 113:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:568
		{
		}
	case 114:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:569
		{
		}
	case 115:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:570
		{
		}
	case 116:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:574
		{
			yyVAL.value = &ObjectVal{[]*Query{{Term: yyDollar[1].value.(*Term)}}}
		}
	case 117:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:578
		{
			yyVAL.value = &ObjectVal{append(yyDollar[1].value.(*ObjectVal).Queries, &Query{Term: yyDollar[3].value.(*Term)})}
		}
	case 118:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:584
		{
			yyVAL.value = &ConstTerm{Object: yyDollar[1].value.(*ConstObject)}
		}
	case 119:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:588
		{
			yyVAL.value = &ConstTerm{Array: yyDollar[1].value.(*ConstArray)}
		}
	case 120:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:592
		{
			yyVAL.value = &ConstTerm{Number: yyDollar[1].token}
		}
	case 121:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:596
		{
			yyVAL.value = &ConstTerm{Str: yyDollar[1].token}
		}
	case 122:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:600
		{
			yyVAL.value = &ConstTerm{Null: true}
		}
	case 123:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:604
		{
			yyVAL.value = &ConstTerm{True: true}
		}
	case 124:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:608
		{
			yyVAL.value = &ConstTerm{False: true}
		}
	case 125:
		yyDollar = yyS[yypt-2 : yypt+1]
//line parser.go.y:614
		{
			yyVAL.value = &ConstObject{}
		}
	case 126:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:618
		{
			yyVAL.value = &ConstObject{yyDollar[2].value.([]*ConstObjectKeyVal)}
		}
	case 127:
		yyDollar = yyS[yypt-4 : yypt+1]
//line parser.go.y:622
		{
			yyVAL.value = &ConstObject{yyDollar[2].value.([]*ConstObjectKeyVal)}
		}
	case 128:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:628
		{
			yyVAL.value = []*ConstObjectKeyVal{yyDollar[1].value.(*ConstObjectKeyVal)}
		}
	case 129:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:632
		{
			yyVAL.value = append(yyDollar[1].value.([]*ConstObjectKeyVal), yyDollar[3].value.(*ConstObjectKeyVal))
		}
	case 130:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:638
		{
			yyVAL.value = &ConstObjectKeyVal{Key: yyDollar[1].token, Val: yyDollar[3].value.(*ConstTerm)}
		}
	case 131:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:642
		{
			yyVAL.value = &ConstObjectKeyVal{Key: yyDollar[1].token, Val: yyDollar[3].value.(*ConstTerm)}
		}
	case 132:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:646
		{
			yyVAL.value = &ConstObjectKeyVal{KeyString: yyDollar[1].token, Val: yyDollar[3].value.(*ConstTerm)}
		}
	case 133:
		yyDollar = yyS[yypt-2 : yypt+1]
//line parser.go.y:652
		{
			yyVAL.value = &ConstArray{}
		}
	case 134:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:656
		{
			yyVAL.value = &ConstArray{yyDollar[2].value.([]*ConstTerm)}
		}
	case 135:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:662
		{
			yyVAL.value = []*ConstTerm{yyDollar[1].value.(*ConstTerm)}
		}
	case 136:
		yyDollar = yyS[yypt-3 : yypt+1]
//line parser.go.y:666
		{
			yyVAL.value = append(yyDollar[1].value.([]*ConstTerm), yyDollar[3].value.(*ConstTerm))
		}
	case 137:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:671
		{
		}
	case 138:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:672
		{
		}
	case 139:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:673
		{
		}
	case 140:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:674
		{
		}
	case 141:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:675
		{
		}
	case 142:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:676
		{
		}
	case 143:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:677
		{
		}
	case 144:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:678
		{
		}
	case 145:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:679
		{
		}
	case 146:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:680
		{
		}
	case 147:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:681
		{
		}
	case 148:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:682
		{
		}
	case 149:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:683
		{
		}
	case 150:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:684
		{
		}
	case 151:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:685
		{
		}
	case 152:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:686
		{
		}
	case 153:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:687
		{
		}
	case 154:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:688
		{
		}
	case 155:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:689
		{
		}
	case 156:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:690
		{
		}
	case 157:
		yyDollar = yyS[yypt-1 : yypt+1]
//line parser.go.y:691
		{
		}
	}
	goto yystack /* stack new state and value */
}
 070701000007A9000081A4000000000000000000000001645E367C00003E15000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/parser.go.y    %{
package gojq

// Parse a query string, and returns the query struct.
//
// If parsing failed, the returned error has the method Token() (string, int),
// which reports the invalid token and the byte offset in the query string. The
// token is empty if the error occurred after scanning the entire query string.
// The byte offset is the scanned bytes when the error occurred.
func Parse(src string) (*Query, error) {
	l := newLexer(src)
	if yyParse(l) > 0 {
		return nil, l.err
	}
	return l.result, nil
}

func reverseFuncDef(xs []*FuncDef) []*FuncDef {
	for i, j := 0, len(xs)-1; i < j; i, j = i+1, j-1 {
		xs[i], xs[j] = xs[j], xs[i]
	}
	return xs
}

func prependFuncDef(xs []*FuncDef, x *FuncDef) []*FuncDef {
	xs = append(xs, nil)
	copy(xs[1:], xs)
	xs[0] = x
	return xs
}
%}

%union {
  value    any
  token    string
  operator Operator
}

%type<value> program moduleheader programbody imports import metaopt funcdefs funcdef funcdefargs query
%type<value> bindpatterns pattern arraypatterns objectpatterns objectpattern
%type<value> term string stringparts suffix args ifelifs ifelse trycatch
%type<value> objectkeyvals objectkeyval objectval
%type<value> constterm constobject constobjectkeyvals constobjectkeyval constarray constarrayelems
%type<token> tokIdentVariable tokIdentModuleIdent tokVariableModuleVariable tokKeyword objectkey
%token<operator> tokAltOp tokUpdateOp tokDestAltOp tokOrOp tokAndOp tokCompareOp
%token<token> tokModule tokImport tokInclude tokDef tokAs tokLabel tokBreak
%token<token> tokNull tokTrue tokFalse
%token<token> tokIdent tokVariable tokModuleIdent tokModuleVariable
%token<token> tokIndex tokNumber tokFormat
%token<token> tokString tokStringStart tokStringQuery tokStringEnd
%token<token> tokIf tokThen tokElif tokElse tokEnd
%token<token> tokTry tokCatch tokReduce tokForeach
%token tokRecurse tokFuncDefPost tokTermPost tokEmptyCatch
%token tokInvalid tokInvalidEscapeSequence tokUnterminatedString

%nonassoc tokFuncDefPost tokTermPost
%right '|'
%left ','
%right tokAltOp
%nonassoc tokUpdateOp
%left tokOrOp
%left tokAndOp
%nonassoc tokCompareOp
%left '+' '-'
%left '*' '/' '%'
%nonassoc tokAs tokIndex '.' '?' tokEmptyCatch
%nonassoc '[' tokTry tokCatch

%%

program
    : moduleheader programbody
    {
        if $1 != nil { $2.(*Query).Meta = $1.(*ConstObject) }
        yylex.(*lexer).result = $2.(*Query)
    }

moduleheader
    :
    {
        $$ = nil
    }
    | tokModule constobject ';'
    {
        $$ = $2;
    }

programbody
    : imports funcdefs
    {
        $$ = &Query{Imports: $1.([]*Import), FuncDefs: reverseFuncDef($2.([]*FuncDef)), Term: &Term{Type: TermTypeIdentity}}
    }
    | imports query
    {
        if $1 != nil { $2.(*Query).Imports = $1.([]*Import) }
        $$ = $2
    }

imports
    :
    {
        $$ = []*Import(nil)
    }
    | imports import
    {
        $$ = append($1.([]*Import), $2.(*Import))
    }

import
    : tokImport tokString tokAs tokIdentVariable metaopt ';'
    {
        $$ = &Import{ImportPath: $2, ImportAlias: $4, Meta: $5.(*ConstObject)}
    }
    | tokInclude tokString metaopt ';'
    {
        $$ = &Import{IncludePath: $2, Meta: $3.(*ConstObject)}
    }

metaopt
    :
    {
        $$ = (*ConstObject)(nil)
    }
    | constobject {}

funcdefs
    :
    {
        $$ = []*FuncDef(nil)
    }
    | funcdef funcdefs
    {
        $$ = append($2.([]*FuncDef), $1.(*FuncDef))
    }

funcdef
    : tokDef tokIdent ':' query ';'
    {
        $$ = &FuncDef{Name: $2, Body: $4.(*Query)}
    }
    | tokDef tokIdent '(' funcdefargs ')' ':' query ';'
    {
        $$ = &FuncDef{$2, $4.([]string), $7.(*Query)}
    }

funcdefargs
    : tokIdentVariable
    {
        $$ = []string{$1}
    }
    | funcdefargs ';' tokIdentVariable
    {
        $$ = append($1.([]string), $3)
    }

tokIdentVariable
    : tokIdent {}
    | tokVariable {}

query
    : funcdef query %prec tokFuncDefPost
    {
        $2.(*Query).FuncDefs = prependFuncDef($2.(*Query).FuncDefs, $1.(*FuncDef))
        $$ = $2
    }
    | query '|' query
    {
        $$ = &Query{Left: $1.(*Query), Op: OpPipe, Right: $3.(*Query)}
    }
    | term tokAs bindpatterns '|' query
    {
        $1.(*Term).SuffixList = append($1.(*Term).SuffixList, &Suffix{Bind: &Bind{$3.([]*Pattern), $5.(*Query)}})
        $$ = &Query{Term: $1.(*Term)}
    }
    | tokReduce term tokAs pattern '(' query ';' query ')'
    {
        $$ = &Query{Term: &Term{Type: TermTypeReduce, Reduce: &Reduce{$2.(*Term), $4.(*Pattern), $6.(*Query), $8.(*Query)}}}
    }
    | tokForeach term tokAs pattern '(' query ';' query ')'
    {
        $$ = &Query{Term: &Term{Type: TermTypeForeach, Foreach: &Foreach{$2.(*Term), $4.(*Pattern), $6.(*Query), $8.(*Query), nil}}}
    }
    | tokForeach term tokAs pattern '(' query ';' query ';' query ')'
    {
        $$ = &Query{Term: &Term{Type: TermTypeForeach, Foreach: &Foreach{$2.(*Term), $4.(*Pattern), $6.(*Query), $8.(*Query), $10.(*Query)}}}
    }
    | tokIf query tokThen query ifelifs ifelse tokEnd
    {
        $$ = &Query{Term: &Term{Type: TermTypeIf, If: &If{$2.(*Query), $4.(*Query), $5.([]*IfElif), $6.(*Query)}}}
    }
    | tokTry query trycatch
    {
        $$ = &Query{Term: &Term{Type: TermTypeTry, Try: &Try{$2.(*Query), $3.(*Query)}}}
    }
    | tokLabel tokVariable '|' query
    {
        $$ = &Query{Term: &Term{Type: TermTypeLabel, Label: &Label{$2, $4.(*Query)}}}
    }
    | query '?'
    {
        if t := $1.(*Query).Term; t != nil {
            t.SuffixList = append(t.SuffixList, &Suffix{Optional: true})
        } else {
            $$ = &Query{Term: &Term{Type: TermTypeQuery, Query: $1.(*Query), SuffixList: []*Suffix{{Optional: true}}}}
        }
    }
    | query ',' query
    {
        $$ = &Query{Left: $1.(*Query), Op: OpComma, Right: $3.(*Query)}
    }
    | query tokAltOp query
    {
        $$ = &Query{Left: $1.(*Query), Op: $2, Right: $3.(*Query)}
    }
    | query tokUpdateOp query
    {
        $$ = &Query{Left: $1.(*Query), Op: $2, Right: $3.(*Query)}
    }
    | query tokOrOp query
    {
        $$ = &Query{Left: $1.(*Query), Op: OpOr, Right: $3.(*Query)}
    }
    | query tokAndOp query
    {
        $$ = &Query{Left: $1.(*Query), Op: OpAnd, Right: $3.(*Query)}
    }
    | query tokCompareOp query
    {
        $$ = &Query{Left: $1.(*Query), Op: $2, Right: $3.(*Query)}
    }
    | query '+' query
    {
        $$ = &Query{Left: $1.(*Query), Op: OpAdd, Right: $3.(*Query)}
    }
    | query '-' query
    {
        $$ = &Query{Left: $1.(*Query), Op: OpSub, Right: $3.(*Query)}
    }
    | query '*' query
    {
        $$ = &Query{Left: $1.(*Query), Op: OpMul, Right: $3.(*Query)}
    }
    | query '/' query
    {
        $$ = &Query{Left: $1.(*Query), Op: OpDiv, Right: $3.(*Query)}
    }
    | query '%' query
    {
        $$ = &Query{Left: $1.(*Query), Op: OpMod, Right: $3.(*Query)}
    }
    | term %prec tokTermPost
    {
        $$ = &Query{Term: $1.(*Term)}
    }

bindpatterns
    : pattern
    {
        $$ = []*Pattern{$1.(*Pattern)}
    }
    | bindpatterns tokDestAltOp pattern
    {
        $$ = append($1.([]*Pattern), $3.(*Pattern))
    }

pattern
    : tokVariable
    {
        $$ = &Pattern{Name: $1}
    }
    | '[' arraypatterns ']'
    {
        $$ = &Pattern{Array: $2.([]*Pattern)}
    }
    | '{' objectpatterns '}'
    {
        $$ = &Pattern{Object: $2.([]*PatternObject)}
    }

arraypatterns
    : pattern
    {
        $$ = []*Pattern{$1.(*Pattern)}
    }
    | arraypatterns ',' pattern
    {
        $$ = append($1.([]*Pattern), $3.(*Pattern))
    }

objectpatterns
    : objectpattern
    {
        $$ = []*PatternObject{$1.(*PatternObject)}
    }
    | objectpatterns ',' objectpattern
    {
        $$ = append($1.([]*PatternObject), $3.(*PatternObject))
    }

objectpattern
    : objectkey ':' pattern
    {
        $$ = &PatternObject{Key: $1, Val: $3.(*Pattern)}
    }
    | string ':' pattern
    {
        $$ = &PatternObject{KeyString: $1.(*String), Val: $3.(*Pattern)}
    }
    | '(' query ')' ':' pattern
    {
        $$ = &PatternObject{KeyQuery: $2.(*Query), Val: $5.(*Pattern)}
    }
    | tokVariable
    {
        $$ = &PatternObject{Key: $1}
    }

term
    : '.'
    {
        $$ = &Term{Type: TermTypeIdentity}
    }
    | tokRecurse
    {
        $$ = &Term{Type: TermTypeRecurse}
    }
    | tokIndex
    {
        $$ = &Term{Type: TermTypeIndex, Index: &Index{Name: $1}}
    }
    | '.' suffix
    {
        if $2.(*Suffix).Iter {
            $$ = &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{$2.(*Suffix)}}
        } else {
            $$ = &Term{Type: TermTypeIndex, Index: $2.(*Suffix).Index}
        }
    }
    | '.' string
    {
        $$ = &Term{Type: TermTypeIndex, Index: &Index{Str: $2.(*String)}}
    }
    | tokNull
    {
        $$ = &Term{Type: TermTypeNull}
    }
    | tokTrue
    {
        $$ = &Term{Type: TermTypeTrue}
    }
    | tokFalse
    {
        $$ = &Term{Type: TermTypeFalse}
    }
    | tokIdentModuleIdent
    {
        $$ = &Term{Type: TermTypeFunc, Func: &Func{Name: $1}}
    }
    | tokIdentModuleIdent '(' args ')'
    {
        $$ = &Term{Type: TermTypeFunc, Func: &Func{Name: $1, Args: $3.([]*Query)}}
    }
    | tokVariableModuleVariable
    {
        $$ = &Term{Type: TermTypeFunc, Func: &Func{Name: $1}}
    }
    | tokNumber
    {
        $$ = &Term{Type: TermTypeNumber, Number: $1}
    }
    | tokFormat
    {
        $$ = &Term{Type: TermTypeFormat, Format: $1}
    }
    | tokFormat string
    {
        $$ = &Term{Type: TermTypeFormat, Format: $1, Str: $2.(*String)}
    }
    | string
    {
        $$ = &Term{Type: TermTypeString, Str: $1.(*String)}
    }
    | '(' query ')'
    {
        $$ = &Term{Type: TermTypeQuery, Query: $2.(*Query)}
    }
    | '+' term
    {
        $$ = &Term{Type: TermTypeUnary, Unary: &Unary{OpAdd, $2.(*Term)}}
    }
    | '-' term
    {
        $$ = &Term{Type: TermTypeUnary, Unary: &Unary{OpSub, $2.(*Term)}}
    }
    | '{' '}'
    {
        $$ = &Term{Type: TermTypeObject, Object: &Object{}}
    }
    | '{' objectkeyvals '}'
    {
        $$ = &Term{Type: TermTypeObject, Object: &Object{$2.([]*ObjectKeyVal)}}
    }
    | '{' objectkeyvals ',' '}'
    {
        $$ = &Term{Type: TermTypeObject, Object: &Object{$2.([]*ObjectKeyVal)}}
    }
    | '[' ']'
    {
        $$ = &Term{Type: TermTypeArray, Array: &Array{}}
    }
    | '[' query ']'
    {
        $$ = &Term{Type: TermTypeArray, Array: &Array{$2.(*Query)}}
    }
    | tokBreak tokVariable
    {
        $$ = &Term{Type: TermTypeBreak, Break: $2}
    }
    | term tokIndex
    {
        $1.(*Term).SuffixList = append($1.(*Term).SuffixList, &Suffix{Index: &Index{Name: $2}})
    }
    | term suffix
    {
        $1.(*Term).SuffixList = append($1.(*Term).SuffixList, $2.(*Suffix))
    }
    | term '?'
    {
        $1.(*Term).SuffixList = append($1.(*Term).SuffixList, &Suffix{Optional: true})
    }
    | term '.' suffix
    {
        $1.(*Term).SuffixList = append($1.(*Term).SuffixList, $3.(*Suffix))
    }
    | term '.' string
    {
        $1.(*Term).SuffixList = append($1.(*Term).SuffixList, &Suffix{Index: &Index{Str: $3.(*String)}})
    }

string
    : tokString
    {
        $$ = &String{Str: $1}
    }
    | tokStringStart stringparts tokStringEnd
    {
        $$ = &String{Queries: $2.([]*Query)}
    }

stringparts
    :
    {
        $$ = []*Query{}
    }
    | stringparts tokString
    {
        $$ = append($1.([]*Query), &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: $2}}})
    }
    | stringparts tokStringQuery query ')'
    {
        yylex.(*lexer).inString = true
        $$ = append($1.([]*Query), &Query{Term: &Term{Type: TermTypeQuery, Query: $3.(*Query)}})
    }

tokIdentModuleIdent
    : tokIdent {}
    | tokModuleIdent {}

tokVariableModuleVariable
    : tokVariable {}
    | tokModuleVariable {}

suffix
    : '[' ']'
    {
        $$ = &Suffix{Iter: true}
    }
    | '[' query ']'
    {
        $$ = &Suffix{Index: &Index{Start: $2.(*Query)}}
    }
    | '[' query ':' ']'
    {
        $$ = &Suffix{Index: &Index{Start: $2.(*Query), IsSlice: true}}
    }
    | '[' ':' query ']'
    {
        $$ = &Suffix{Index: &Index{End: $3.(*Query), IsSlice: true}}
    }
    | '[' query ':' query ']'
    {
        $$ = &Suffix{Index: &Index{Start: $2.(*Query), End: $4.(*Query), IsSlice: true}}
    }

args
    : query
    {
        $$ = []*Query{$1.(*Query)}
    }
    | args ';' query
    {
        $$ = append($1.([]*Query), $3.(*Query))
    }

ifelifs
    :
    {
        $$ = []*IfElif(nil)
    }
    | ifelifs tokElif query tokThen query
    {
        $$ = append($1.([]*IfElif), &IfElif{$3.(*Query), $5.(*Query)})
    }

ifelse
    :
    {
        $$ = (*Query)(nil)
    }
    | tokElse query
    {
        $$ = $2
    }

trycatch
    : %prec tokEmptyCatch
    {
        $$ = (*Query)(nil)
    }
    | tokCatch query
    {
        $$ = $2
    }

objectkeyvals
    : objectkeyval
    {
        $$ = []*ObjectKeyVal{$1.(*ObjectKeyVal)}
    }
    | objectkeyvals ',' objectkeyval
    {
        $$ = append($1.([]*ObjectKeyVal), $3.(*ObjectKeyVal))
    }

objectkeyval
    : objectkey ':' objectval
    {
        $$ = &ObjectKeyVal{Key: $1, Val: $3.(*ObjectVal)}
    }
    | string ':' objectval
    {
        $$ = &ObjectKeyVal{KeyString: $1.(*String), Val: $3.(*ObjectVal)}
    }
    | '(' query ')' ':' objectval
    {
        $$ = &ObjectKeyVal{KeyQuery: $2.(*Query), Val: $5.(*ObjectVal)}
    }
    | objectkey
    {
        $$ = &ObjectKeyVal{Key: $1}
    }
    | string
    {
        $$ = &ObjectKeyVal{KeyString: $1.(*String)}
    }

objectkey
    : tokIdent {}
    | tokVariable {}
    | tokKeyword {}

objectval
    : term
    {
        $$ = &ObjectVal{[]*Query{{Term: $1.(*Term)}}}
    }
    | objectval '|' term
    {
        $$ = &ObjectVal{append($1.(*ObjectVal).Queries, &Query{Term: $3.(*Term)})}
    }

constterm
    : constobject
    {
        $$ = &ConstTerm{Object: $1.(*ConstObject)}
    }
    | constarray
    {
        $$ = &ConstTerm{Array: $1.(*ConstArray)}
    }
    | tokNumber
    {
        $$ = &ConstTerm{Number: $1}
    }
    | tokString
    {
        $$ = &ConstTerm{Str: $1}
    }
    | tokNull
    {
        $$ = &ConstTerm{Null: true}
    }
    | tokTrue
    {
        $$ = &ConstTerm{True: true}
    }
    | tokFalse
    {
        $$ = &ConstTerm{False: true}
    }

constobject
    : '{' '}'
    {
        $$ = &ConstObject{}
    }
    | '{' constobjectkeyvals '}'
    {
        $$ = &ConstObject{$2.([]*ConstObjectKeyVal)}
    }
    | '{' constobjectkeyvals ',' '}'
    {
        $$ = &ConstObject{$2.([]*ConstObjectKeyVal)}
    }

constobjectkeyvals
    : constobjectkeyval
    {
        $$ = []*ConstObjectKeyVal{$1.(*ConstObjectKeyVal)}
    }
    | constobjectkeyvals ',' constobjectkeyval
    {
        $$ = append($1.([]*ConstObjectKeyVal), $3.(*ConstObjectKeyVal))
    }

constobjectkeyval
    : tokIdent ':' constterm
    {
        $$ = &ConstObjectKeyVal{Key: $1, Val: $3.(*ConstTerm)}
    }
    | tokKeyword ':' constterm
    {
        $$ = &ConstObjectKeyVal{Key: $1, Val: $3.(*ConstTerm)}
    }
    | tokString ':' constterm
    {
        $$ = &ConstObjectKeyVal{KeyString: $1, Val: $3.(*ConstTerm)}
    }

constarray
    : '[' ']'
    {
        $$ = &ConstArray{}
    }
    | '[' constarrayelems ']'
    {
        $$ = &ConstArray{$2.([]*ConstTerm)}
    }

constarrayelems
    : constterm
    {
        $$ = []*ConstTerm{$1.(*ConstTerm)}
    }
    | constarrayelems ',' constterm
    {
        $$ = append($1.([]*ConstTerm), $3.(*ConstTerm))
    }

tokKeyword
    : tokOrOp {}
    | tokAndOp {}
    | tokModule {}
    | tokImport {}
    | tokInclude {}
    | tokDef {}
    | tokAs {}
    | tokLabel {}
    | tokBreak {}
    | tokNull {}
    | tokTrue {}
    | tokFalse {}
    | tokIf {}
    | tokThen {}
    | tokElif {}
    | tokElse {}
    | tokEnd {}
    | tokTry {}
    | tokCatch {}
    | tokReduce {}
    | tokForeach {}

%%
   070701000007AA000081A4000000000000000000000001645E367C000006F7000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/preview.go package gojq

import "unicode/utf8"

// Preview returns the preview string of v. The preview string is basically the
// same as the jq-flavored JSON encoding returned by [Marshal], but is truncated
// by 30 bytes, and more efficient than truncating the result of [Marshal].
//
// This method is used by error messages of built-in operators and functions,
// and accepts only limited types (nil, bool, int, float64, *big.Int, string,
// []any, and map[string]any). Note that the maximum width and trailing strings
// on truncation may be changed in the future.
func Preview(v any) string {
	bs := jsonLimitedMarshal(v, 32)
	if l := 30; len(bs) > l {
		var trailing string
		switch v.(type) {
		case string:
			trailing = ` ..."`
		case []any:
			trailing = " ...]"
		case map[string]any:
			trailing = " ...}"
		default:
			trailing = " ..."
		}
		for len(bs) > l-len(trailing) {
			_, size := utf8.DecodeLastRune(bs)
			bs = bs[:len(bs)-size]
		}
		bs = append(bs, trailing...)
	}
	return string(bs)
}

func jsonLimitedMarshal(v any, n int) (bs []byte) {
	w := &limitedWriter{buf: make([]byte, n)}
	defer func() {
		_ = recover()
		bs = w.Bytes()
	}()
	(&encoder{w: w}).encode(v)
	return
}

type limitedWriter struct {
	buf []byte
	off int
}

func (w *limitedWriter) Write(bs []byte) (int, error) {
	n := copy(w.buf[w.off:], bs)
	if w.off += n; w.off == len(w.buf) {
		panic(struct{}{})
	}
	return n, nil
}

func (w *limitedWriter) WriteByte(b byte) error {
	w.buf[w.off] = b
	if w.off++; w.off == len(w.buf) {
		panic(struct{}{})
	}
	return nil
}

func (w *limitedWriter) WriteString(s string) (int, error) {
	n := copy(w.buf[w.off:], s)
	if w.off += n; w.off == len(w.buf) {
		panic(struct{}{})
	}
	return n, nil
}

func (w *limitedWriter) Bytes() []byte {
	return w.buf[:w.off]
}
 070701000007AB000081A4000000000000000000000001645E367C00004C71000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/query.go   package gojq

import (
	"context"
	"strings"
)

// Query represents the abstract syntax tree of a jq query.
type Query struct {
	Meta     *ConstObject
	Imports  []*Import
	FuncDefs []*FuncDef
	Term     *Term
	Left     *Query
	Op       Operator
	Right    *Query
	Func     string
}

// Run the query.
//
// It is safe to call this method in goroutines, to reuse a parsed [*Query].
// But for arguments, do not give values sharing same data between goroutines.
func (e *Query) Run(v any) Iter {
	return e.RunWithContext(context.Background(), v)
}

// RunWithContext runs the query with context.
func (e *Query) RunWithContext(ctx context.Context, v any) Iter {
	code, err := Compile(e)
	if err != nil {
		return NewIter(err)
	}
	return code.RunWithContext(ctx, v)
}

func (e *Query) String() string {
	var s strings.Builder
	e.writeTo(&s)
	return s.String()
}

func (e *Query) writeTo(s *strings.Builder) {
	if e.Meta != nil {
		s.WriteString("module ")
		e.Meta.writeTo(s)
		s.WriteString(";\n")
	}
	for _, im := range e.Imports {
		im.writeTo(s)
	}
	for i, fd := range e.FuncDefs {
		if i > 0 {
			s.WriteByte(' ')
		}
		fd.writeTo(s)
	}
	if len(e.FuncDefs) > 0 {
		s.WriteByte(' ')
	}
	if e.Func != "" {
		s.WriteString(e.Func)
	} else if e.Term != nil {
		e.Term.writeTo(s)
	} else if e.Right != nil {
		e.Left.writeTo(s)
		if e.Op == OpComma {
			s.WriteString(", ")
		} else {
			s.WriteByte(' ')
			s.WriteString(e.Op.String())
			s.WriteByte(' ')
		}
		e.Right.writeTo(s)
	}
}

func (e *Query) minify() {
	for _, e := range e.FuncDefs {
		e.Minify()
	}
	if e.Term != nil {
		if name := e.Term.toFunc(); name != "" {
			e.Term = nil
			e.Func = name
		} else {
			e.Term.minify()
		}
	} else if e.Right != nil {
		e.Left.minify()
		e.Right.minify()
	}
}

func (e *Query) toIndexKey() any {
	if e.Term == nil {
		return nil
	}
	return e.Term.toIndexKey()
}

func (e *Query) toIndices(xs []any) []any {
	if e.Term == nil {
		return nil
	}
	return e.Term.toIndices(xs)
}

// Import ...
type Import struct {
	ImportPath  string
	ImportAlias string
	IncludePath string
	Meta        *ConstObject
}

func (e *Import) String() string {
	var s strings.Builder
	e.writeTo(&s)
	return s.String()
}

func (e *Import) writeTo(s *strings.Builder) {
	if e.ImportPath != "" {
		s.WriteString("import ")
		jsonEncodeString(s, e.ImportPath)
		s.WriteString(" as ")
		s.WriteString(e.ImportAlias)
	} else {
		s.WriteString("include ")
		jsonEncodeString(s, e.IncludePath)
	}
	if e.Meta != nil {
		s.WriteByte(' ')
		e.Meta.writeTo(s)
	}
	s.WriteString(";\n")
}

// FuncDef ...
type FuncDef struct {
	Name string
	Args []string
	Body *Query
}

func (e *FuncDef) String() string {
	var s strings.Builder
	e.writeTo(&s)
	return s.String()
}

func (e *FuncDef) writeTo(s *strings.Builder) {
	s.WriteString("def ")
	s.WriteString(e.Name)
	if len(e.Args) > 0 {
		s.WriteByte('(')
		for i, e := range e.Args {
			if i > 0 {
				s.WriteString("; ")
			}
			s.WriteString(e)
		}
		s.WriteByte(')')
	}
	s.WriteString(": ")
	e.Body.writeTo(s)
	s.WriteByte(';')
}

// Minify ...
func (e *FuncDef) Minify() {
	e.Body.minify()
}

// Term ...
type Term struct {
	Type       TermType
	Index      *Index
	Func       *Func
	Object     *Object
	Array      *Array
	Number     string
	Unary      *Unary
	Format     string
	Str        *String
	If         *If
	Try        *Try
	Reduce     *Reduce
	Foreach    *Foreach
	Label      *Label
	Break      string
	Query      *Query
	SuffixList []*Suffix
}

func (e *Term) String() string {
	var s strings.Builder
	e.writeTo(&s)
	return s.String()
}

func (e *Term) writeTo(s *strings.Builder) {
	switch e.Type {
	case TermTypeIdentity:
		s.WriteByte('.')
	case TermTypeRecurse:
		s.WriteString("..")
	case TermTypeNull:
		s.WriteString("null")
	case TermTypeTrue:
		s.WriteString("true")
	case TermTypeFalse:
		s.WriteString("false")
	case TermTypeIndex:
		e.Index.writeTo(s)
	case TermTypeFunc:
		e.Func.writeTo(s)
	case TermTypeObject:
		e.Object.writeTo(s)
	case TermTypeArray:
		e.Array.writeTo(s)
	case TermTypeNumber:
		s.WriteString(e.Number)
	case TermTypeUnary:
		e.Unary.writeTo(s)
	case TermTypeFormat:
		s.WriteString(e.Format)
		if e.Str != nil {
			s.WriteByte(' ')
			e.Str.writeTo(s)
		}
	case TermTypeString:
		e.Str.writeTo(s)
	case TermTypeIf:
		e.If.writeTo(s)
	case TermTypeTry:
		e.Try.writeTo(s)
	case TermTypeReduce:
		e.Reduce.writeTo(s)
	case TermTypeForeach:
		e.Foreach.writeTo(s)
	case TermTypeLabel:
		e.Label.writeTo(s)
	case TermTypeBreak:
		s.WriteString("break ")
		s.WriteString(e.Break)
	case TermTypeQuery:
		s.WriteByte('(')
		e.Query.writeTo(s)
		s.WriteByte(')')
	}
	for _, e := range e.SuffixList {
		e.writeTo(s)
	}
}

func (e *Term) minify() {
	switch e.Type {
	case TermTypeIndex:
		e.Index.minify()
	case TermTypeFunc:
		e.Func.minify()
	case TermTypeObject:
		e.Object.minify()
	case TermTypeArray:
		e.Array.minify()
	case TermTypeUnary:
		e.Unary.minify()
	case TermTypeFormat:
		if e.Str != nil {
			e.Str.minify()
		}
	case TermTypeString:
		e.Str.minify()
	case TermTypeIf:
		e.If.minify()
	case TermTypeTry:
		e.Try.minify()
	case TermTypeReduce:
		e.Reduce.minify()
	case TermTypeForeach:
		e.Foreach.minify()
	case TermTypeLabel:
		e.Label.minify()
	case TermTypeQuery:
		e.Query.minify()
	}
	for _, e := range e.SuffixList {
		e.minify()
	}
}

func (e *Term) toFunc() string {
	if len(e.SuffixList) != 0 {
		return ""
	}
	// ref: compiler#compileQuery
	switch e.Type {
	case TermTypeIdentity:
		return "."
	case TermTypeRecurse:
		return ".."
	case TermTypeNull:
		return "null"
	case TermTypeTrue:
		return "true"
	case TermTypeFalse:
		return "false"
	case TermTypeFunc:
		return e.Func.toFunc()
	default:
		return ""
	}
}

func (e *Term) toIndexKey() any {
	switch e.Type {
	case TermTypeNumber:
		return toNumber(e.Number)
	case TermTypeUnary:
		return e.Unary.toNumber()
	case TermTypeString:
		if e.Str.Queries == nil {
			return e.Str.Str
		}
		return nil
	default:
		return nil
	}
}

func (e *Term) toIndices(xs []any) []any {
	switch e.Type {
	case TermTypeIndex:
		if xs = e.Index.toIndices(xs); xs == nil {
			return nil
		}
	case TermTypeQuery:
		if xs = e.Query.toIndices(xs); xs == nil {
			return nil
		}
	default:
		return nil
	}
	for _, s := range e.SuffixList {
		if xs = s.toIndices(xs); xs == nil {
			return nil
		}
	}
	return xs
}

func (e *Term) toNumber() any {
	if e.Type == TermTypeNumber {
		return toNumber(e.Number)
	}
	return nil
}

// Unary ...
type Unary struct {
	Op   Operator
	Term *Term
}

func (e *Unary) String() string {
	var s strings.Builder
	e.writeTo(&s)
	return s.String()
}

func (e *Unary) writeTo(s *strings.Builder) {
	s.WriteString(e.Op.String())
	e.Term.writeTo(s)
}

func (e *Unary) minify() {
	e.Term.minify()
}

func (e *Unary) toNumber() any {
	v := e.Term.toNumber()
	if v != nil && e.Op == OpSub {
		v = funcOpNegate(v)
	}
	return v
}

// Pattern ...
type Pattern struct {
	Name   string
	Array  []*Pattern
	Object []*PatternObject
}

func (e *Pattern) String() string {
	var s strings.Builder
	e.writeTo(&s)
	return s.String()
}

func (e *Pattern) writeTo(s *strings.Builder) {
	if e.Name != "" {
		s.WriteString(e.Name)
	} else if len(e.Array) > 0 {
		s.WriteByte('[')
		for i, e := range e.Array {
			if i > 0 {
				s.WriteString(", ")
			}
			e.writeTo(s)
		}
		s.WriteByte(']')
	} else if len(e.Object) > 0 {
		s.WriteByte('{')
		for i, e := range e.Object {
			if i > 0 {
				s.WriteString(", ")
			}
			e.writeTo(s)
		}
		s.WriteByte('}')
	}
}

// PatternObject ...
type PatternObject struct {
	Key       string
	KeyString *String
	KeyQuery  *Query
	Val       *Pattern
}

func (e *PatternObject) String() string {
	var s strings.Builder
	e.writeTo(&s)
	return s.String()
}

func (e *PatternObject) writeTo(s *strings.Builder) {
	if e.Key != "" {
		s.WriteString(e.Key)
	} else if e.KeyString != nil {
		e.KeyString.writeTo(s)
	} else if e.KeyQuery != nil {
		s.WriteByte('(')
		e.KeyQuery.writeTo(s)
		s.WriteByte(')')
	}
	if e.Val != nil {
		s.WriteString(": ")
		e.Val.writeTo(s)
	}
}

// Index ...
type Index struct {
	Name    string
	Str     *String
	Start   *Query
	End     *Query
	IsSlice bool
}

func (e *Index) String() string {
	var s strings.Builder
	e.writeTo(&s)
	return s.String()
}

func (e *Index) writeTo(s *strings.Builder) {
	if l := s.Len(); l > 0 {
		// ". .x" != "..x" and "0 .x" != "0.x"
		if c := s.String()[l-1]; c == '.' || '0' <= c && c <= '9' {
			s.WriteByte(' ')
		}
	}
	s.WriteByte('.')
	e.writeSuffixTo(s)
}

func (e *Index) writeSuffixTo(s *strings.Builder) {
	if e.Name != "" {
		s.WriteString(e.Name)
	} else if e.Str != nil {
		e.Str.writeTo(s)
	} else {
		s.WriteByte('[')
		if e.IsSlice {
			if e.Start != nil {
				e.Start.writeTo(s)
			}
			s.WriteByte(':')
			if e.End != nil {
				e.End.writeTo(s)
			}
		} else {
			e.Start.writeTo(s)
		}
		s.WriteByte(']')
	}
}

func (e *Index) minify() {
	if e.Str != nil {
		e.Str.minify()
	}
	if e.Start != nil {
		e.Start.minify()
	}
	if e.End != nil {
		e.End.minify()
	}
}

func (e *Index) toIndexKey() any {
	if e.Name != "" {
		return e.Name
	} else if e.Str != nil {
		if e.Str.Queries == nil {
			return e.Str.Str
		}
	} else if !e.IsSlice {
		return e.Start.toIndexKey()
	} else {
		var start, end any
		ok := true
		if e.Start != nil {
			start = e.Start.toIndexKey()
			ok = start != nil
		}
		if e.End != nil && ok {
			end = e.End.toIndexKey()
			ok = end != nil
		}
		if ok {
			return map[string]any{"start": start, "end": end}
		}
	}
	return nil
}

func (e *Index) toIndices(xs []any) []any {
	if k := e.toIndexKey(); k != nil {
		return append(xs, k)
	}
	return nil
}

// Func ...
type Func struct {
	Name string
	Args []*Query
}

func (e *Func) String() string {
	var s strings.Builder
	e.writeTo(&s)
	return s.String()
}

func (e *Func) writeTo(s *strings.Builder) {
	s.WriteString(e.Name)
	if len(e.Args) > 0 {
		s.WriteByte('(')
		for i, e := range e.Args {
			if i > 0 {
				s.WriteString("; ")
			}
			e.writeTo(s)
		}
		s.WriteByte(')')
	}
}

func (e *Func) minify() {
	for _, x := range e.Args {
		x.minify()
	}
}

func (e *Func) toFunc() string {
	if len(e.Args) != 0 {
		return ""
	}
	return e.Name
}

// String ...
type String struct {
	Str     string
	Queries []*Query
}

func (e *String) String() string {
	var s strings.Builder
	e.writeTo(&s)
	return s.String()
}

func (e *String) writeTo(s *strings.Builder) {
	if e.Queries == nil {
		jsonEncodeString(s, e.Str)
		return
	}
	s.WriteByte('"')
	for _, e := range e.Queries {
		if e.Term.Str == nil {
			s.WriteString(`\`)
			e.writeTo(s)
		} else {
			es := e.String()
			s.WriteString(es[1 : len(es)-1])
		}
	}
	s.WriteByte('"')
}

func (e *String) minify() {
	for _, e := range e.Queries {
		e.minify()
	}
}

// Object ...
type Object struct {
	KeyVals []*ObjectKeyVal
}

func (e *Object) String() string {
	var s strings.Builder
	e.writeTo(&s)
	return s.String()
}

func (e *Object) writeTo(s *strings.Builder) {
	if len(e.KeyVals) == 0 {
		s.WriteString("{}")
		return
	}
	s.WriteString("{ ")
	for i, kv := range e.KeyVals {
		if i > 0 {
			s.WriteString(", ")
		}
		kv.writeTo(s)
	}
	s.WriteString(" }")
}

func (e *Object) minify() {
	for _, e := range e.KeyVals {
		e.minify()
	}
}

// ObjectKeyVal ...
type ObjectKeyVal struct {
	Key       string
	KeyString *String
	KeyQuery  *Query
	Val       *ObjectVal
}

func (e *ObjectKeyVal) String() string {
	var s strings.Builder
	e.writeTo(&s)
	return s.String()
}

func (e *ObjectKeyVal) writeTo(s *strings.Builder) {
	if e.Key != "" {
		s.WriteString(e.Key)
	} else if e.KeyString != nil {
		e.KeyString.writeTo(s)
	} else if e.KeyQuery != nil {
		s.WriteByte('(')
		e.KeyQuery.writeTo(s)
		s.WriteByte(')')
	}
	if e.Val != nil {
		s.WriteString(": ")
		e.Val.writeTo(s)
	}
}

func (e *ObjectKeyVal) minify() {
	if e.KeyString != nil {
		e.KeyString.minify()
	} else if e.KeyQuery != nil {
		e.KeyQuery.minify()
	}
	if e.Val != nil {
		e.Val.minify()
	}
}

// ObjectVal ...
type ObjectVal struct {
	Queries []*Query
}

func (e *ObjectVal) String() string {
	var s strings.Builder
	e.writeTo(&s)
	return s.String()
}

func (e *ObjectVal) writeTo(s *strings.Builder) {
	for i, e := range e.Queries {
		if i > 0 {
			s.WriteString(" | ")
		}
		e.writeTo(s)
	}
}

func (e *ObjectVal) minify() {
	for _, e := range e.Queries {
		e.minify()
	}
}

// Array ...
type Array struct {
	Query *Query
}

func (e *Array) String() string {
	var s strings.Builder
	e.writeTo(&s)
	return s.String()
}

func (e *Array) writeTo(s *strings.Builder) {
	s.WriteByte('[')
	if e.Query != nil {
		e.Query.writeTo(s)
	}
	s.WriteByte(']')
}

func (e *Array) minify() {
	if e.Query != nil {
		e.Query.minify()
	}
}

// Suffix ...
type Suffix struct {
	Index    *Index
	Iter     bool
	Optional bool
	Bind     *Bind
}

func (e *Suffix) String() string {
	var s strings.Builder
	e.writeTo(&s)
	return s.String()
}

func (e *Suffix) writeTo(s *strings.Builder) {
	if e.Index != nil {
		if e.Index.Name != "" || e.Index.Str != nil {
			e.Index.writeTo(s)
		} else {
			e.Index.writeSuffixTo(s)
		}
	} else if e.Iter {
		s.WriteString("[]")
	} else if e.Optional {
		s.WriteByte('?')
	} else if e.Bind != nil {
		e.Bind.writeTo(s)
	}
}

func (e *Suffix) minify() {
	if e.Index != nil {
		e.Index.minify()
	} else if e.Bind != nil {
		e.Bind.minify()
	}
}

func (e *Suffix) toTerm() *Term {
	if e.Index != nil {
		return &Term{Type: TermTypeIndex, Index: e.Index}
	} else if e.Iter {
		return &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{{Iter: true}}}
	} else {
		return nil
	}
}

func (e *Suffix) toIndices(xs []any) []any {
	if e.Index == nil {
		return nil
	}
	return e.Index.toIndices(xs)
}

// Bind ...
type Bind struct {
	Patterns []*Pattern
	Body     *Query
}

func (e *Bind) String() string {
	var s strings.Builder
	e.writeTo(&s)
	return s.String()
}

func (e *Bind) writeTo(s *strings.Builder) {
	for i, p := range e.Patterns {
		if i == 0 {
			s.WriteString(" as ")
			p.writeTo(s)
			s.WriteByte(' ')
		} else {
			s.WriteString("?// ")
			p.writeTo(s)
			s.WriteByte(' ')
		}
	}
	s.WriteString("| ")
	e.Body.writeTo(s)
}

func (e *Bind) minify() {
	e.Body.minify()
}

// If ...
type If struct {
	Cond *Query
	Then *Query
	Elif []*IfElif
	Else *Query
}

func (e *If) String() string {
	var s strings.Builder
	e.writeTo(&s)
	return s.String()
}

func (e *If) writeTo(s *strings.Builder) {
	s.WriteString("if ")
	e.Cond.writeTo(s)
	s.WriteString(" then ")
	e.Then.writeTo(s)
	for _, e := range e.Elif {
		s.WriteByte(' ')
		e.writeTo(s)
	}
	if e.Else != nil {
		s.WriteString(" else ")
		e.Else.writeTo(s)
	}
	s.WriteString(" end")
}

func (e *If) minify() {
	e.Cond.minify()
	e.Then.minify()
	for _, x := range e.Elif {
		x.minify()
	}
	if e.Else != nil {
		e.Else.minify()
	}
}

// IfElif ...
type IfElif struct {
	Cond *Query
	Then *Query
}

func (e *IfElif) String() string {
	var s strings.Builder
	e.writeTo(&s)
	return s.String()
}

func (e *IfElif) writeTo(s *strings.Builder) {
	s.WriteString("elif ")
	e.Cond.writeTo(s)
	s.WriteString(" then ")
	e.Then.writeTo(s)
}

func (e *IfElif) minify() {
	e.Cond.minify()
	e.Then.minify()
}

// Try ...
type Try struct {
	Body  *Query
	Catch *Query
}

func (e *Try) String() string {
	var s strings.Builder
	e.writeTo(&s)
	return s.String()
}

func (e *Try) writeTo(s *strings.Builder) {
	s.WriteString("try ")
	e.Body.writeTo(s)
	if e.Catch != nil {
		s.WriteString(" catch ")
		e.Catch.writeTo(s)
	}
}

func (e *Try) minify() {
	e.Body.minify()
	if e.Catch != nil {
		e.Catch.minify()
	}
}

// Reduce ...
type Reduce struct {
	Term    *Term
	Pattern *Pattern
	Start   *Query
	Update  *Query
}

func (e *Reduce) String() string {
	var s strings.Builder
	e.writeTo(&s)
	return s.String()
}

func (e *Reduce) writeTo(s *strings.Builder) {
	s.WriteString("reduce ")
	e.Term.writeTo(s)
	s.WriteString(" as ")
	e.Pattern.writeTo(s)
	s.WriteString(" (")
	e.Start.writeTo(s)
	s.WriteString("; ")
	e.Update.writeTo(s)
	s.WriteByte(')')
}

func (e *Reduce) minify() {
	e.Term.minify()
	e.Start.minify()
	e.Update.minify()
}

// Foreach ...
type Foreach struct {
	Term    *Term
	Pattern *Pattern
	Start   *Query
	Update  *Query
	Extract *Query
}

func (e *Foreach) String() string {
	var s strings.Builder
	e.writeTo(&s)
	return s.String()
}

func (e *Foreach) writeTo(s *strings.Builder) {
	s.WriteString("foreach ")
	e.Term.writeTo(s)
	s.WriteString(" as ")
	e.Pattern.writeTo(s)
	s.WriteString(" (")
	e.Start.writeTo(s)
	s.WriteString("; ")
	e.Update.writeTo(s)
	if e.Extract != nil {
		s.WriteString("; ")
		e.Extract.writeTo(s)
	}
	s.WriteByte(')')
}

func (e *Foreach) minify() {
	e.Term.minify()
	e.Start.minify()
	e.Update.minify()
	if e.Extract != nil {
		e.Extract.minify()
	}
}

// Label ...
type Label struct {
	Ident string
	Body  *Query
}

func (e *Label) String() string {
	var s strings.Builder
	e.writeTo(&s)
	return s.String()
}

func (e *Label) writeTo(s *strings.Builder) {
	s.WriteString("label ")
	s.WriteString(e.Ident)
	s.WriteString(" | ")
	e.Body.writeTo(s)
}

func (e *Label) minify() {
	e.Body.minify()
}

// ConstTerm ...
type ConstTerm struct {
	Object *ConstObject
	Array  *ConstArray
	Number string
	Str    string
	Null   bool
	True   bool
	False  bool
}

func (e *ConstTerm) String() string {
	var s strings.Builder
	e.writeTo(&s)
	return s.String()
}

func (e *ConstTerm) writeTo(s *strings.Builder) {
	if e.Object != nil {
		e.Object.writeTo(s)
	} else if e.Array != nil {
		e.Array.writeTo(s)
	} else if e.Number != "" {
		s.WriteString(e.Number)
	} else if e.Null {
		s.WriteString("null")
	} else if e.True {
		s.WriteString("true")
	} else if e.False {
		s.WriteString("false")
	} else {
		jsonEncodeString(s, e.Str)
	}
}

func (e *ConstTerm) toValue() any {
	if e.Object != nil {
		return e.Object.ToValue()
	} else if e.Array != nil {
		return e.Array.toValue()
	} else if e.Number != "" {
		return toNumber(e.Number)
	} else if e.Null {
		return nil
	} else if e.True {
		return true
	} else if e.False {
		return false
	} else {
		return e.Str
	}
}

// ConstObject ...
type ConstObject struct {
	KeyVals []*ConstObjectKeyVal
}

func (e *ConstObject) String() string {
	var s strings.Builder
	e.writeTo(&s)
	return s.String()
}

func (e *ConstObject) writeTo(s *strings.Builder) {
	if len(e.KeyVals) == 0 {
		s.WriteString("{}")
		return
	}
	s.WriteString("{ ")
	for i, kv := range e.KeyVals {
		if i > 0 {
			s.WriteString(", ")
		}
		kv.writeTo(s)
	}
	s.WriteString(" }")
}

// ToValue converts the object to map[string]any.
func (e *ConstObject) ToValue() map[string]any {
	if e == nil {
		return nil
	}
	v := make(map[string]any, len(e.KeyVals))
	for _, e := range e.KeyVals {
		key := e.Key
		if key == "" {
			key = e.KeyString
		}
		v[key] = e.Val.toValue()
	}
	return v
}

// ConstObjectKeyVal ...
type ConstObjectKeyVal struct {
	Key       string
	KeyString string
	Val       *ConstTerm
}

func (e *ConstObjectKeyVal) String() string {
	var s strings.Builder
	e.writeTo(&s)
	return s.String()
}

func (e *ConstObjectKeyVal) writeTo(s *strings.Builder) {
	if e.Key != "" {
		s.WriteString(e.Key)
	} else {
		s.WriteString(e.KeyString)
	}
	s.WriteString(": ")
	e.Val.writeTo(s)
}

// ConstArray ...
type ConstArray struct {
	Elems []*ConstTerm
}

func (e *ConstArray) String() string {
	var s strings.Builder
	e.writeTo(&s)
	return s.String()
}

func (e *ConstArray) writeTo(s *strings.Builder) {
	s.WriteByte('[')
	for i, e := range e.Elems {
		if i > 0 {
			s.WriteString(", ")
		}
		e.writeTo(s)
	}
	s.WriteByte(']')
}

func (e *ConstArray) toValue() []any {
	v := make([]any, len(e.Elems))
	for i, e := range e.Elems {
		v[i] = e.toValue()
	}
	return v
}
   070701000007AC000081A4000000000000000000000001645E367C00000123000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/release.go //go:build !gojq_debug
// +build !gojq_debug

package gojq

type codeinfo struct{}

func (c *compiler) appendCodeInfo(any) {}

func (c *compiler) deleteCodeInfo(string) {}

func (env *env) debugCodes() {}

func (env *env) debugState(int, bool) {}

func (env *env) debugForks(int, string) {}
 070701000007AD000081A4000000000000000000000001645E367C0000032D000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/scope_stack.go package gojq

type scopeStack struct {
	data  []scopeBlock
	index int
	limit int
}

type scopeBlock struct {
	value scope
	next  int
}

func newScopeStack() *scopeStack {
	return &scopeStack{index: -1, limit: -1}
}

func (s *scopeStack) push(v scope) {
	b := scopeBlock{v, s.index}
	i := s.index + 1
	if i <= s.limit {
		i = s.limit + 1
	}
	s.index = i
	if i < len(s.data) {
		s.data[i] = b
	} else {
		s.data = append(s.data, b)
	}
}

func (s *scopeStack) pop() scope {
	b := s.data[s.index]
	s.index = b.next
	return b.value
}

func (s *scopeStack) empty() bool {
	return s.index < 0
}

func (s *scopeStack) save() (index, limit int) {
	index, limit = s.index, s.limit
	if s.index > s.limit {
		s.limit = s.index
	}
	return
}

func (s *scopeStack) restore(index, limit int) {
	s.index, s.limit = index, limit
}
   070701000007AE000081A4000000000000000000000001645E367C00000328000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/stack.go   package gojq

type stack struct {
	data  []block
	index int
	limit int
}

type block struct {
	value any
	next  int
}

func newStack() *stack {
	return &stack{index: -1, limit: -1}
}

func (s *stack) push(v any) {
	b := block{v, s.index}
	i := s.index + 1
	if i <= s.limit {
		i = s.limit + 1
	}
	s.index = i
	if i < len(s.data) {
		s.data[i] = b
	} else {
		s.data = append(s.data, b)
	}
}

func (s *stack) pop() any {
	b := s.data[s.index]
	s.index = b.next
	return b.value
}

func (s *stack) top() any {
	return s.data[s.index].value
}

func (s *stack) empty() bool {
	return s.index < 0
}

func (s *stack) save() (index, limit int) {
	index, limit = s.index, s.limit
	if s.index > s.limit {
		s.limit = s.index
	}
	return
}

func (s *stack) restore(index, limit int) {
	s.index, s.limit = index, limit
}
070701000007AF000081A4000000000000000000000001645E367C00000605000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/term_type.go   package gojq

// TermType represents the type of [Term].
type TermType int

// TermType list.
const (
	TermTypeIdentity TermType = iota + 1
	TermTypeRecurse
	TermTypeNull
	TermTypeTrue
	TermTypeFalse
	TermTypeIndex
	TermTypeFunc
	TermTypeObject
	TermTypeArray
	TermTypeNumber
	TermTypeUnary
	TermTypeFormat
	TermTypeString
	TermTypeIf
	TermTypeTry
	TermTypeReduce
	TermTypeForeach
	TermTypeLabel
	TermTypeBreak
	TermTypeQuery
)

// GoString implements [fmt.GoStringer].
func (termType TermType) GoString() (str string) {
	defer func() { str = "gojq." + str }()
	switch termType {
	case TermTypeIdentity:
		return "TermTypeIdentity"
	case TermTypeRecurse:
		return "TermTypeRecurse"
	case TermTypeNull:
		return "TermTypeNull"
	case TermTypeTrue:
		return "TermTypeTrue"
	case TermTypeFalse:
		return "TermTypeFalse"
	case TermTypeIndex:
		return "TermTypeIndex"
	case TermTypeFunc:
		return "TermTypeFunc"
	case TermTypeObject:
		return "TermTypeObject"
	case TermTypeArray:
		return "TermTypeArray"
	case TermTypeNumber:
		return "TermTypeNumber"
	case TermTypeUnary:
		return "TermTypeUnary"
	case TermTypeFormat:
		return "TermTypeFormat"
	case TermTypeString:
		return "TermTypeString"
	case TermTypeIf:
		return "TermTypeIf"
	case TermTypeTry:
		return "TermTypeTry"
	case TermTypeReduce:
		return "TermTypeReduce"
	case TermTypeForeach:
		return "TermTypeForeach"
	case TermTypeLabel:
		return "TermTypeLabel"
	case TermTypeBreak:
		return "TermTypeBreak"
	case TermTypeQuery:
		return "TermTypeQuery"
	default:
		panic(termType)
	}
}
   070701000007B0000081A4000000000000000000000001645E367C00000245000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/itchyny/gojq/type.go    package gojq

import (
	"fmt"
	"math/big"
)

// TypeOf returns the jq-flavored type name of v.
//
// This method is used by built-in type/0 function, and accepts only limited
// types (nil, bool, int, float64, *big.Int, string, []any, and map[string]any).
func TypeOf(v any) string {
	switch v.(type) {
	case nil:
		return "null"
	case bool:
		return "boolean"
	case int, float64, *big.Int:
		return "number"
	case string:
		return "string"
	case []any:
		return "array"
	case map[string]any:
		return "object"
	default:
		panic(fmt.Sprintf("invalid type: %[1]T (%[1]v)", v))
	}
}
   070701000007B1000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/itchyny/timefmt-go  070701000007B2000081A4000000000000000000000001645E367C000003DC000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/itchyny/timefmt-go/CHANGELOG.md # Changelog
## [v0.1.5](https://github.com/itchyny/timefmt-go/compare/v0.1.4..v0.1.5) (2022-12-01)
* support parsing time zone offset with name using both `%z` and `%Z`

## [v0.1.4](https://github.com/itchyny/timefmt-go/compare/v0.1.3..v0.1.4) (2022-09-01)
* improve documents
* drop support for Go 1.16

## [v0.1.3](https://github.com/itchyny/timefmt-go/compare/v0.1.2..v0.1.3) (2021-04-14)
* implement `ParseInLocation` for configuring the default location

## [v0.1.2](https://github.com/itchyny/timefmt-go/compare/v0.1.1..v0.1.2) (2021-02-22)
* implement parsing/formatting time zone offset with colons (`%:z`, `%::z`, `%:::z`)
* recognize `Z` as UTC on parsing time zone offset (`%z`)
* fix padding on formatting time zone offset (`%z`)

## [v0.1.1](https://github.com/itchyny/timefmt-go/compare/v0.1.0..v0.1.1) (2020-09-01)
* fix overflow check in 32-bit architecture

## [v0.1.0](https://github.com/itchyny/timefmt-go/compare/2c02364..v0.1.0) (2020-08-16)
* initial implementation
070701000007B3000081A4000000000000000000000001645E367C00000437000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/itchyny/timefmt-go/LICENSE  The MIT License (MIT)

Copyright (c) 2020-2022 itchyny

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
 070701000007B4000081A4000000000000000000000001645E367C00000132000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/itchyny/timefmt-go/Makefile GOBIN ?= $(shell go env GOPATH)/bin

.PHONY: all
all: test

.PHONY: test
test:
	go test -v -race ./...

.PHONY: lint
lint: $(GOBIN)/staticcheck
	go vet ./...
	staticcheck -checks all,-ST1000 ./...

$(GOBIN)/staticcheck:
	go install honnef.co/go/tools/cmd/staticcheck@latest

.PHONY: clean
clean:
	go clean
  070701000007B5000081A4000000000000000000000001645E367C00000AE9000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/itchyny/timefmt-go/README.md    # timefmt-go
[![CI Status](https://github.com/itchyny/timefmt-go/workflows/CI/badge.svg)](https://github.com/itchyny/timefmt-go/actions)
[![Go Report Card](https://goreportcard.com/badge/github.com/itchyny/timefmt-go)](https://goreportcard.com/report/github.com/itchyny/timefmt-go)
[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/itchyny/timefmt-go/blob/main/LICENSE)
[![release](https://img.shields.io/github/release/itchyny/timefmt-go/all.svg)](https://github.com/itchyny/timefmt-go/releases)
[![pkg.go.dev](https://pkg.go.dev/badge/github.com/itchyny/timefmt-go)](https://pkg.go.dev/github.com/itchyny/timefmt-go)

### Efficient time formatting library (strftime, strptime) for Golang
This is a Go language package for formatting and parsing date time strings.

```go
package main

import (
	"fmt"
	"log"

	"github.com/itchyny/timefmt-go"
)

func main() {
	t, err := timefmt.Parse("2020/07/24 09:07:29", "%Y/%m/%d %H:%M:%S")
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(t) // 2020-07-24 09:07:29 +0000 UTC

	str := timefmt.Format(t, "%Y/%m/%d %H:%M:%S")
	fmt.Println(str) // 2020/07/24 09:07:29

	str = timefmt.Format(t, "%a, %d %b %Y %T %z")
	fmt.Println(str) // Fri, 24 Jul 2020 09:07:29 +0000
}
```

Please refer to [`man 3 strftime`](https://linux.die.net/man/3/strftime) and
[`man 3 strptime`](https://linux.die.net/man/3/strptime) for formatters.
As an extension, `%f` directive is supported for zero-padded microseconds, which originates from Python.
Note that `E` and `O` modifier characters are not supported.

## Comparison to other libraries
- This library
  - provides both formatting and parsing functions in pure Go language,
  - depends only on the Go standard libraries not to grow up dependency.
- `Format` (`strftime`) implements glibc extensions including
  - width specifier like `%6Y %10B %4Z` (limited to 1024 bytes),
  - omitting padding modifier like `%-y-%-m-%-d`,
  - space padding modifier like `%_y-%_m-%_d`,
  - upper case modifier like `%^a %^b`,
  - swapping case modifier like `%#Z`,
  - time zone offset modifier like `%:z %::z %:::z`,
  - and its performance is very good.
- `AppendFormat` is provided for reducing allocations.
- `Parse` (`strptime`) allows to parse
  - composed directives like `%F %T`,
  - century years like `%C %y`,
  - week names like `%A` `%a` (parsed results are discarded).
- `ParseInLocation` is provided for configuring the default location.

![](https://user-images.githubusercontent.com/375258/88606920-de475c80-d0b8-11ea-8d40-cbfee9e35c2e.jpg)

## Bug Tracker
Report bug at [Issues・itchyny/timefmt-go - GitHub](https://github.com/itchyny/timefmt-go/issues).

## Author
itchyny (https://github.com/itchyny)

## License
This software is released under the MIT License, see LICENSE.
   070701000007B6000081A4000000000000000000000001645E367C0000298A000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/itchyny/timefmt-go/format.go    package timefmt

import (
	"math"
	"strconv"
	"time"
)

// Format time to string using the format.
func Format(t time.Time, format string) string {
	return string(AppendFormat(make([]byte, 0, 64), t, format))
}

// AppendFormat appends formatted time string to the buffer.
func AppendFormat(buf []byte, t time.Time, format string) []byte {
	year, month, day := t.Date()
	hour, min, sec := t.Clock()
	var width, colons int
	var padding byte
	var pending string
	var upper, swap bool
	for i := 0; i < len(format); i++ {
		if b := format[i]; b == '%' {
			if i++; i == len(format) {
				buf = append(buf, '%')
				break
			}
			b, width, padding, upper, swap = format[i], 0, '0', false, false
		L:
			switch b {
			case '-':
				if pending != "" {
					buf = append(buf, '-')
					break
				}
				if i++; i == len(format) {
					goto K
				}
				padding = ^paddingMask
				b = format[i]
				goto L
			case '_':
				if i++; i == len(format) {
					goto K
				}
				padding = ' ' | ^paddingMask
				b = format[i]
				goto L
			case '^':
				if i++; i == len(format) {
					goto K
				}
				upper = true
				b = format[i]
				goto L
			case '#':
				if i++; i == len(format) {
					goto K
				}
				swap = true
				b = format[i]
				goto L
			case '0':
				if i++; i == len(format) {
					goto K
				}
				padding = '0' | ^paddingMask
				b = format[i]
				goto L
			case '1', '2', '3', '4', '5', '6', '7', '8', '9':
				width = int(b & 0x0F)
				const maxWidth = 1024
				for i++; i < len(format); i++ {
					b = format[i]
					if b <= '9' && '0' <= b {
						width = width*10 + int(b&0x0F)
						if width >= math.MaxInt/10 {
							width = maxWidth
						}
					} else {
						break
					}
				}
				if width > maxWidth {
					width = maxWidth
				}
				if padding == ^paddingMask {
					padding = ' ' | ^paddingMask
				}
				if i == len(format) {
					goto K
				}
				goto L
			case 'Y':
				if width == 0 {
					width = 4
				}
				buf = appendInt(buf, year, width, padding)
			case 'y':
				if width < 2 {
					width = 2
				}
				buf = appendInt(buf, year%100, width, padding)
			case 'C':
				if width < 2 {
					width = 2
				}
				buf = appendInt(buf, year/100, width, padding)
			case 'g':
				if width < 2 {
					width = 2
				}
				year, _ := t.ISOWeek()
				buf = appendInt(buf, year%100, width, padding)
			case 'G':
				if width == 0 {
					width = 4
				}
				year, _ := t.ISOWeek()
				buf = appendInt(buf, year, width, padding)
			case 'm':
				if width < 2 {
					width = 2
				}
				buf = appendInt(buf, int(month), width, padding)
			case 'B':
				buf = appendString(buf, longMonthNames[month-1], width, padding, upper, swap)
			case 'b', 'h':
				buf = appendString(buf, shortMonthNames[month-1], width, padding, upper, swap)
			case 'A':
				buf = appendString(buf, longWeekNames[t.Weekday()], width, padding, upper, swap)
			case 'a':
				buf = appendString(buf, shortWeekNames[t.Weekday()], width, padding, upper, swap)
			case 'w':
				for ; width > 1; width-- {
					buf = append(buf, padding&paddingMask)
				}
				buf = append(buf, '0'+byte(t.Weekday()))
			case 'u':
				w := int(t.Weekday())
				if w == 0 {
					w = 7
				}
				for ; width > 1; width-- {
					buf = append(buf, padding&paddingMask)
				}
				buf = append(buf, '0'+byte(w))
			case 'V':
				if width < 2 {
					width = 2
				}
				_, week := t.ISOWeek()
				buf = appendInt(buf, week, width, padding)
			case 'U':
				if width < 2 {
					width = 2
				}
				week := (t.YearDay() + 6 - int(t.Weekday())) / 7
				buf = appendInt(buf, week, width, padding)
			case 'W':
				if width < 2 {
					width = 2
				}
				week := t.YearDay()
				if int(t.Weekday()) > 0 {
					week -= int(t.Weekday()) - 7
				}
				week /= 7
				buf = appendInt(buf, week, width, padding)
			case 'e':
				if padding < ^paddingMask {
					padding = ' '
				}
				fallthrough
			case 'd':
				if width < 2 {
					width = 2
				}
				buf = appendInt(buf, day, width, padding)
			case 'j':
				if width < 3 {
					width = 3
				}
				buf = appendInt(buf, t.YearDay(), width, padding)
			case 'k':
				if padding < ^paddingMask {
					padding = ' '
				}
				fallthrough
			case 'H':
				if width < 2 {
					width = 2
				}
				buf = appendInt(buf, hour, width, padding)
			case 'l':
				if width < 2 {
					width = 2
				}
				if padding < ^paddingMask {
					padding = ' '
				}
				h := hour
				if h > 12 {
					h -= 12
				}
				buf = appendInt(buf, h, width, padding)
			case 'I':
				if width < 2 {
					width = 2
				}
				h := hour
				if h > 12 {
					h -= 12
				} else if h == 0 {
					h = 12
				}
				buf = appendInt(buf, h, width, padding)
			case 'p':
				if hour < 12 {
					buf = appendString(buf, "AM", width, padding, upper, swap)
				} else {
					buf = appendString(buf, "PM", width, padding, upper, swap)
				}
			case 'P':
				if hour < 12 {
					buf = appendString(buf, "am", width, padding, upper, swap)
				} else {
					buf = appendString(buf, "pm", width, padding, upper, swap)
				}
			case 'M':
				if width < 2 {
					width = 2
				}
				buf = appendInt(buf, min, width, padding)
			case 'S':
				if width < 2 {
					width = 2
				}
				buf = appendInt(buf, sec, width, padding)
			case 's':
				if padding < ^paddingMask {
					padding = ' '
				}
				buf = appendInt(buf, int(t.Unix()), width, padding)
			case 'f':
				if width == 0 {
					width = 6
				}
				buf = appendInt(buf, t.Nanosecond()/1000, width, padding)
			case 'Z', 'z':
				name, offset := t.Zone()
				if b == 'Z' && name != "" {
					buf = appendString(buf, name, width, padding, upper, swap)
					break
				}
				i := len(buf)
				if padding != ^paddingMask {
					for ; width > 1; width-- {
						buf = append(buf, padding&paddingMask)
					}
				}
				j := len(buf)
				if offset < 0 {
					buf = append(buf, '-')
					offset = -offset
				} else {
					buf = append(buf, '+')
				}
				k := len(buf)
				buf = appendInt(buf, offset/3600, 2, padding)
				if buf[k] == ' ' {
					buf[k-1], buf[k] = buf[k], buf[k-1]
				}
				if k = offset % 3600; colons <= 2 || k != 0 {
					if colons != 0 {
						buf = append(buf, ':')
					}
					buf = appendInt(buf, k/60, 2, '0')
					if k %= 60; colons == 2 || colons == 3 && k != 0 {
						buf = append(buf, ':')
						buf = appendInt(buf, k, 2, '0')
					}
				}
				colons = 0
				if i != j {
					l := len(buf)
					k = j + 1 - (l - j)
					if k < i {
						l = j + 1 + i - k
						k = i
					} else {
						l = j + 1
					}
					copy(buf[k:], buf[j:])
					buf = buf[:l]
					if padding&paddingMask == '0' {
						for ; k > i; k-- {
							buf[k-1], buf[k] = buf[k], buf[k-1]
						}
					}
				}
			case ':':
				if pending != "" {
					buf = append(buf, ':')
				} else {
					colons = 1
				M:
					for i++; i < len(format); i++ {
						switch format[i] {
						case ':':
							colons++
						case 'z':
							if colons > 3 {
								i++
								break M
							}
							b = 'z'
							goto L
						default:
							break M
						}
					}
					buf = appendLast(buf, format[:i], width, padding)
					i--
					colons = 0
				}
			case 't':
				buf = appendString(buf, "\t", width, padding, false, false)
			case 'n':
				buf = appendString(buf, "\n", width, padding, false, false)
			case '%':
				buf = appendString(buf, "%", width, padding, false, false)
			default:
				if pending == "" {
					var ok bool
					if pending, ok = compositions[b]; ok {
						swap = false
						break
					}
					buf = appendLast(buf, format[:i], width-1, padding)
				}
				buf = append(buf, b)
			}
			if pending != "" {
				b, pending, width, padding = pending[0], pending[1:], 0, '0'
				goto L
			}
		} else {
			buf = append(buf, b)
		}
	}
	return buf
K:
	return appendLast(buf, format, width, padding)
}

func appendInt(buf []byte, num, width int, padding byte) []byte {
	if padding != ^paddingMask {
		padding &= paddingMask
		switch width {
		case 2:
			if num < 10 {
				buf = append(buf, padding)
				goto L1
			} else if num < 100 {
				goto L2
			} else if num < 1000 {
				goto L3
			} else if num < 10000 {
				goto L4
			}
		case 4:
			if num < 1000 {
				buf = append(buf, padding)
				if num < 100 {
					buf = append(buf, padding)
					if num < 10 {
						buf = append(buf, padding)
						goto L1
					}
					goto L2
				}
				goto L3
			} else if num < 10000 {
				goto L4
			}
		default:
			i := len(buf)
			for ; width > 1; width-- {
				buf = append(buf, padding)
			}
			j := len(buf)
			buf = strconv.AppendInt(buf, int64(num), 10)
			l := len(buf)
			if j+1 == l || i == j {
				return buf
			}
			k := j + 1 - (l - j)
			if k < i {
				l = j + 1 + i - k
				k = i
			} else {
				l = j + 1
			}
			copy(buf[k:], buf[j:])
			return buf[:l]
		}
	}
	if num < 100 {
		if num < 10 {
			goto L1
		}
		goto L2
	} else if num < 10000 {
		if num < 1000 {
			goto L3
		}
		goto L4
	}
	return strconv.AppendInt(buf, int64(num), 10)
L4:
	buf = append(buf, byte(num/1000)|'0')
	num %= 1000
L3:
	buf = append(buf, byte(num/100)|'0')
	num %= 100
L2:
	buf = append(buf, byte(num/10)|'0')
	num %= 10
L1:
	return append(buf, byte(num)|'0')
}

func appendString(buf []byte, str string, width int, padding byte, upper, swap bool) []byte {
	if width > len(str) && padding != ^paddingMask {
		if padding < ^paddingMask {
			padding = ' '
		} else {
			padding &= paddingMask
		}
		for width -= len(str); width > 0; width-- {
			buf = append(buf, padding)
		}
	}
	switch {
	case swap:
		if str[len(str)-1] < 'a' {
			for _, b := range []byte(str) {
				buf = append(buf, b|0x20)
			}
			break
		}
		fallthrough
	case upper:
		for _, b := range []byte(str) {
			buf = append(buf, b&0x5F)
		}
	default:
		buf = append(buf, str...)
	}
	return buf
}

func appendLast(buf []byte, format string, width int, padding byte) []byte {
	for i := len(format) - 1; i >= 0; i-- {
		if format[i] == '%' {
			buf = appendString(buf, format[i:], width, padding, false, false)
			break
		}
	}
	return buf
}

const paddingMask byte = 0x7F

var longMonthNames = []string{
	"January",
	"February",
	"March",
	"April",
	"May",
	"June",
	"July",
	"August",
	"September",
	"October",
	"November",
	"December",
}

var shortMonthNames = []string{
	"Jan",
	"Feb",
	"Mar",
	"Apr",
	"May",
	"Jun",
	"Jul",
	"Aug",
	"Sep",
	"Oct",
	"Nov",
	"Dec",
}

var longWeekNames = []string{
	"Sunday",
	"Monday",
	"Tuesday",
	"Wednesday",
	"Thursday",
	"Friday",
	"Saturday",
}

var shortWeekNames = []string{
	"Sun",
	"Mon",
	"Tue",
	"Wed",
	"Thu",
	"Fri",
	"Sat",
}

var compositions = map[byte]string{
	'c': "a b e H:M:S Y",
	'+': "a b e H:M:S Z Y",
	'F': "Y-m-d",
	'D': "m/d/y",
	'x': "m/d/y",
	'v': "e-b-Y",
	'T': "H:M:S",
	'X': "H:M:S",
	'r': "I:M:S p",
	'R': "H:M",
}
  070701000007B7000081A4000000000000000000000001645E367C000023D6000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/itchyny/timefmt-go/parse.go package timefmt

import (
	"errors"
	"fmt"
	"time"
)

// Parse time string using the format.
func Parse(source, format string) (t time.Time, err error) {
	return parse(source, format, time.UTC, time.Local)
}

// ParseInLocation parses time string with the default location.
// The location is also used to parse the time zone name (%Z).
func ParseInLocation(source, format string, loc *time.Location) (t time.Time, err error) {
	return parse(source, format, loc, loc)
}

func parse(source, format string, loc, base *time.Location) (t time.Time, err error) {
	year, month, day, hour, min, sec, nsec := 1900, 1, 1, 0, 0, 0, 0
	defer func() {
		if err != nil {
			err = fmt.Errorf("failed to parse %q with %q: %w", source, format, err)
		}
	}()
	var j, century, yday, colons int
	var pm, hasZoneName, hasZoneOffset bool
	var pending string
	for i, l := 0, len(source); i < len(format); i++ {
		if b := format[i]; b == '%' {
			i++
			if i == len(format) {
				err = errors.New("stray %")
				return
			}
			b = format[i]
		L:
			switch b {
			case 'Y':
				if year, j, err = parseNumber(source, j, 4, 'Y'); err != nil {
					return
				}
			case 'y':
				if year, j, err = parseNumber(source, j, 2, 'y'); err != nil {
					return
				}
				if year < 69 {
					year += 2000
				} else {
					year += 1900
				}
			case 'C':
				if century, j, err = parseNumber(source, j, 2, 'C'); err != nil {
					return
				}
			case 'g':
				if year, j, err = parseNumber(source, j, 2, b); err != nil {
					return
				}
				year += 2000
			case 'G':
				if year, j, err = parseNumber(source, j, 4, b); err != nil {
					return
				}
			case 'm':
				if month, j, err = parseNumber(source, j, 2, 'm'); err != nil {
					return
				}
			case 'B':
				if month, j, err = lookup(source, j, longMonthNames, 'B'); err != nil {
					return
				}
			case 'b', 'h':
				if month, j, err = lookup(source, j, shortMonthNames, b); err != nil {
					return
				}
			case 'A':
				if _, j, err = lookup(source, j, longWeekNames, 'A'); err != nil {
					return
				}
			case 'a':
				if _, j, err = lookup(source, j, shortWeekNames, 'a'); err != nil {
					return
				}
			case 'w':
				if j >= l || source[j] < '0' || '6' < source[j] {
					err = parseFormatError(b)
					return
				}
				j++
			case 'u':
				if j >= l || source[j] < '1' || '7' < source[j] {
					err = parseFormatError(b)
					return
				}
				j++
			case 'V', 'U', 'W':
				if _, j, err = parseNumber(source, j, 2, b); err != nil {
					return
				}
			case 'e':
				if j < l && source[j] == ' ' {
					j++
				}
				fallthrough
			case 'd':
				if day, j, err = parseNumber(source, j, 2, b); err != nil {
					return
				}
			case 'j':
				if yday, j, err = parseNumber(source, j, 3, 'j'); err != nil {
					return
				}
			case 'k':
				if j < l && source[j] == ' ' {
					j++
				}
				fallthrough
			case 'H':
				if hour, j, err = parseNumber(source, j, 2, b); err != nil {
					return
				}
			case 'l':
				if j < l && source[j] == ' ' {
					j++
				}
				fallthrough
			case 'I':
				if hour, j, err = parseNumber(source, j, 2, b); err != nil {
					return
				}
				if hour == 12 {
					hour = 0
				}
			case 'p', 'P':
				var ampm int
				if ampm, j, err = lookup(source, j, []string{"AM", "PM"}, 'p'); err != nil {
					return
				}
				pm = ampm == 2
			case 'M':
				if min, j, err = parseNumber(source, j, 2, 'M'); err != nil {
					return
				}
			case 'S':
				if sec, j, err = parseNumber(source, j, 2, 'S'); err != nil {
					return
				}
			case 's':
				var unix int
				if unix, j, err = parseNumber(source, j, 10, 's'); err != nil {
					return
				}
				t = time.Unix(int64(unix), 0).In(time.UTC)
				var mon time.Month
				year, mon, day = t.Date()
				hour, min, sec = t.Clock()
				month = int(mon)
			case 'f':
				var usec, k, d int
				if usec, k, err = parseNumber(source, j, 6, 'f'); err != nil {
					return
				}
				for j, d = k, k-j; d < 6; d++ {
					usec *= 10
				}
				nsec = usec * 1000
			case 'Z':
				k := j
				for ; k < l; k++ {
					if c := source[k]; c < 'A' || 'Z' < c {
						break
					}
				}
				t, err = time.ParseInLocation("MST", source[j:k], base)
				if err != nil {
					err = fmt.Errorf(`cannot parse %q with "%%Z"`, source[j:k])
					return
				}
				if hasZoneOffset {
					name, _ := t.Zone()
					_, offset := locationZone(loc)
					loc = time.FixedZone(name, offset)
				} else {
					loc = t.Location()
				}
				hasZoneName = true
				j = k
			case 'z':
				if j >= l {
					err = parseZFormatError(colons)
					return
				}
				sign := 1
				switch source[j] {
				case '-':
					sign = -1
					fallthrough
				case '+':
					var hour, min, sec, k int
					if hour, k, _ = parseNumber(source, j+1, 2, 'z'); k != j+3 {
						err = parseZFormatError(colons)
						return
					}
					if j = k; j >= l || source[j] != ':' {
						switch colons {
						case 1:
							err = errors.New("expected ':' for %:z")
							return
						case 2:
							err = errors.New("expected ':' for %::z")
							return
						}
					} else if j++; colons == 0 {
						colons = 4
					}
					if min, k, _ = parseNumber(source, j, 2, 'z'); k != j+2 {
						if colons == 0 {
							k = j
						} else {
							err = parseZFormatError(colons & 3)
							return
						}
					}
					if j = k; colons > 1 {
						if j >= l || source[j] != ':' {
							if colons == 2 {
								err = errors.New("expected ':' for %::z")
								return
							}
						} else if sec, k, _ = parseNumber(source, j+1, 2, 'z'); k != j+3 {
							if colons == 2 {
								err = parseZFormatError(colons)
								return
							}
						} else {
							j = k
						}
					}
					var name string
					if hasZoneName {
						name, _ = locationZone(loc)
					}
					loc, colons = time.FixedZone(name, sign*((hour*60+min)*60+sec)), 0
					hasZoneOffset = true
				case 'Z':
					loc, colons, j = time.UTC, 0, j+1
				default:
					err = parseZFormatError(colons)
					return
				}
			case ':':
				if pending != "" {
					if j >= l || source[j] != b {
						err = expectedFormatError(b)
						return
					}
					j++
				} else {
					if i++; i == len(format) {
						err = errors.New(`expected 'z' after "%:"`)
						return
					} else if b = format[i]; b == 'z' {
						colons = 1
					} else if b != ':' {
						err = errors.New(`expected 'z' after "%:"`)
						return
					} else if i++; i == len(format) {
						err = errors.New(`expected 'z' after "%::"`)
						return
					} else if b = format[i]; b == 'z' {
						colons = 2
					} else {
						err = errors.New(`expected 'z' after "%::"`)
						return
					}
					goto L
				}
			case 't', 'n':
				k := j
			K:
				for ; k < l; k++ {
					switch source[k] {
					case ' ', '\t', '\n', '\v', '\f', '\r':
					default:
						break K
					}
				}
				if k == j {
					err = fmt.Errorf("expected a space for %%%c", b)
					return
				}
				j = k
			case '%':
				if j >= l || source[j] != b {
					err = expectedFormatError(b)
					return
				}
				j++
			default:
				if pending == "" {
					var ok bool
					if pending, ok = compositions[b]; ok {
						break
					}
					err = fmt.Errorf(`unexpected format: "%%%c"`, b)
					return
				}
				if j >= l || source[j] != b {
					err = expectedFormatError(b)
					return
				}
				j++
			}
			if pending != "" {
				b, pending = pending[0], pending[1:]
				goto L
			}
		} else if j >= len(source) || source[j] != b {
			err = expectedFormatError(b)
			return
		} else {
			j++
		}
	}
	if j < len(source) {
		err = fmt.Errorf("unconverted string: %q", source[j:])
		return
	}
	if pm {
		hour += 12
	}
	if century > 0 {
		year = century*100 + year%100
	}
	if yday > 0 {
		return time.Date(year, time.January, 1, hour, min, sec, nsec, loc).AddDate(0, 0, yday-1), nil
	}
	return time.Date(year, time.Month(month), day, hour, min, sec, nsec, loc), nil
}

func locationZone(loc *time.Location) (name string, offset int) {
	return time.Date(2000, time.January, 1, 0, 0, 0, 0, loc).Zone()
}

type parseFormatError byte

func (err parseFormatError) Error() string {
	return fmt.Sprintf("cannot parse %%%c", byte(err))
}

type expectedFormatError byte

func (err expectedFormatError) Error() string {
	return fmt.Sprintf("expected %q", byte(err))
}

type parseZFormatError int

func (err parseZFormatError) Error() string {
	switch int(err) {
	case 0:
		return "cannot parse %z"
	case 1:
		return "cannot parse %:z"
	default:
		return "cannot parse %::z"
	}
}

func parseNumber(source string, min, size int, format byte) (int, int, error) {
	var val int
	if l := len(source); min+size > l {
		size = l
	} else {
		size += min
	}
	i := min
	for ; i < size; i++ {
		if b := source[i]; '0' <= b && b <= '9' {
			val = val*10 + int(b&0x0F)
		} else {
			break
		}
	}
	if i == min {
		return 0, 0, parseFormatError(format)
	}
	return val, i, nil
}

func lookup(source string, min int, candidates []string, format byte) (int, int, error) {
L:
	for i, xs := range candidates {
		j := min
		for k := 0; k < len(xs); k, j = k+1, j+1 {
			if j >= len(source) {
				continue L
			}
			if x, y := xs[k], source[j]; x != y && x|('a'-'A') != y|('a'-'A') {
				continue L
			}
		}
		return i + 1, j, nil
	}
	return 0, 0, parseFormatError(format)
}
  070701000007B8000081A4000000000000000000000001645E367C00000064000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/itchyny/timefmt-go/timefmt.go   // Package timefmt provides functions for formatting and parsing date time strings.
package timefmt
070701000007B9000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000002F00000000elemental-cli-0.3.1/vendor/github.com/jaypipes    070701000007BA000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003300000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw    070701000007BB000081A4000000000000000000000001645E367C00000017000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/.gitignore vendor/
coverage*.*
*~
 070701000007BC000081A4000000000000000000000001645E367C00001573000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/CODE_OF_CONDUCT.md 
# Contributor Covenant Code of Conduct

## Our Pledge

We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, caste, color, religion, or sexual identity
and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.

## Our Standards

Examples of behavior that contributes to a positive environment for our
community include:

* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
  and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
  overall community

Examples of unacceptable behavior include:

* The use of sexualized language or imagery, and sexual attention or
  advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
  address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
  professional setting

## Enforcement Responsibilities

Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.

Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.

## Scope

This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
[INSERT CONTACT METHOD].
All complaints will be reviewed and investigated promptly and fairly.

All community leaders are obligated to respect the privacy and security of the
reporter of any incident.

## Enforcement Guidelines

Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:

### 1. Correction

**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.

**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.

### 2. Warning

**Community Impact**: A violation through a single incident or series
of actions.

**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.

### 3. Temporary Ban

**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.

**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.

### 4. Permanent Ban

**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior,  harassment of an
individual, or aggression toward or disparagement of classes of individuals.

**Consequence**: A permanent ban from any sort of public interaction within
the community.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.1, available at
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].

Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].

For answers to common questions about this code of conduct, see the FAQ at
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available
at [https://www.contributor-covenant.org/translations][translations].

[homepage]: https://www.contributor-covenant.org
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations

 070701000007BD000081A4000000000000000000000001645E367C00000859000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/CONTRIBUTING.md    # How to Contribute

We welcome any and all contributions to `ghw`! Filing [bug reports][gh-issues],
asking questions and submitting patches are all encouraged.

[gh-issues]: https://github.com/jaypipes/ghw/issues

## Submitting patches via pull requests

We use GitHub pull requests to review code submissions.

Consult [GitHub Help][pr-help] for more information on using pull requests.

[pr-help]: https://help.github.com/articles/about-pull-requests/

We ask that contributors submitting a pull request sign their commits and
attest to the Developer Certificate of Origin (DCO).

## Developer Certificate of Origin

The DCO is a lightweight way for contributors to certify that they wrote or
otherwise have the right to submit the code they are contributing to the
project. Here is the [full text of the DCO][dco], reformatted for readability:

> By making a contribution to this project, I certify that:
> 
> a. The contribution was created in whole or in part by me and I have the
> right to submit it under the open source license indicated in the file; or
> 
> b. The contribution is based upon previous work that, to the best of my
> knowledge, is covered under an appropriate open source license and I have the
> right under that license to submit that work with modifications, whether
> created in whole or in part by me, under the same open source license (unless
> I am permitted to submit under a different license), as indicated in the
> file; or
> 
> c. The contribution was provided directly to me by some other person who
> certified (a), (b) or (c) and I have not modified it.
> 
> d. I understand and agree that this project and the contribution are public
> and that a record of the contribution (including all personal information I
> submit with it, including my sign-off) is maintained indefinitely and may be
> redistributed consistent with this project or the open source license(s)
> involved.

[dco]: https://developercertificate.org/

You can sign your commits using `git commit -s` before pushing commits to
Github and creating a pull request.

## Community Guidelines

1. Be kind.
2. Seriously, that's it.
   070701000007BE000081A4000000000000000000000001645E367C0000279F000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/COPYING    
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

 070701000007BF000081A4000000000000000000000001645E367C00000208000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/Dockerfile FROM golang:1.15-buster as builder
WORKDIR /go/src/github.com/jaypipes/ghw

# Force the go compiler to use modules.
ENV GO111MODULE=on
ENV GOPROXY=direct

# go.mod and go.sum go into their own layers.
COPY go.mod .
COPY go.sum .

# This ensures `go mod download` happens only when go.mod and go.sum change.
RUN go mod download

COPY . .

RUN CGO_ENABLED=0 go build -o ghwc ./cmd/ghwc/

FROM alpine:3.7
RUN apk add --no-cache ethtool

WORKDIR /bin

COPY --from=builder /go/src/github.com/jaypipes/ghw/ghwc /bin

CMD ghwc
070701000007C0000081A4000000000000000000000001645E367C00000397000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/Makefile   VENDOR := vendor
PKGS := $(shell go list ./... | grep -v /$(VENDOR)/)
SRC = $(shell find . -type f -name '*.go' -not -path "*/$(VENDOR)/*")
BIN_DIR := $(GOPATH)/bin
GOMETALINTER := $(BIN_DIR)/gometalinter

.PHONY: test
test: vet
	go test $(PKGS)

$(GOMETALINTER):
	go get -u github.com/alecthomas/gometalinter
	$(GOMETALINTER) --install &> /dev/null

.PHONY: lint
lint: $(GOMETALINTER)
	$(GOMETALINTER) ./... --vendor

.PHONY: fmt
fmt:
	@echo "Running gofmt on all sources..."
	@gofmt -s -l -w $(SRC)

.PHONY: fmtcheck
fmtcheck:
	@bash -c "diff -u <(echo -n) <(gofmt -d $(SRC))"

.PHONY: vet
vet:
	go vet $(PKGS)

.PHONY: cover
cover:
	$(shell [ -e coverage.out ] && rm coverage.out)
	@echo "mode: count" > coverage-all.out
	$(foreach pkg,$(PKGS),\
		go test -coverprofile=coverage.out -covermode=count $(pkg);\
		tail -n +2 coverage.out >> coverage-all.out;)
	go tool cover -html=coverage-all.out -o=coverage-all.html
 070701000007C1000081A4000000000000000000000001645E367C0000C1EA000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/README.md  # `ghw` - Golang HardWare discovery/inspection library

[![Build Status](https://github.com/jaypipes/ghw/actions/workflows/go.yml/badge.svg?branch=main)](https://github.com/jaypipes/ghw/actions)
[![Go Report Card](https://goreportcard.com/badge/github.com/jaypipes/ghw)](https://goreportcard.com/report/github.com/jaypipes/ghw)
[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](CODE_OF_CONDUCT.md)

![ghw mascot](images/ghw-gopher.png)

`ghw` is a small Golang library providing hardware inspection and discovery
for Linux and Windows. There currently exists partial support for MacOSX.

## Design Principles

* No root privileges needed for discovery

  `ghw` goes the extra mile to be useful without root priveleges. We query for
  host hardware information as directly as possible without relying on shellouts
  to programs like `dmidecode` that require root privileges to execute.

  Elevated privileges are indeed required to query for some information, but
  `ghw` will never error out if blocked from reading that information. Instead,
  `ghw` will print a warning message about the information that could not be
  retrieved. You may disable these warning messages with `GHW_DISABLE_WARNINGS`
  environment variable.

* Well-documented code and plenty of example code

  The code itself should be well-documented with lots of usage
  examples.

* Interfaces should be consistent across modules

  Each module in the library should be structured in a consistent fashion, and
  the structs returned by various library functions should have consistent
  attribute and method names.

## Inspecting != Monitoring

`ghw` is a tool for gathering information about your hardware's **capacity**
and **capabilities**.

It is important to point out that `ghw` does **NOT** report information that is
temporary or variable. It is **NOT** a system monitor nor is it an appropriate
tool for gathering data points for metrics that change over time.  If you are
looking for a system that tracks usage of CPU, memory, network I/O or disk I/O,
there are plenty of great open source tools that do this! Check out the
[Prometheus project](https://prometheus.io/) for a great example.

## Usage

You can use the functions in `ghw` to determine various hardware-related
information about the host computer:

* [Memory](#memory)
* [CPU](#cpu)
* [Block storage](#block-storage)
* [Topology](#topology)
* [Network](#network)
* [PCI](#pci)
* [GPU](#gpu)
* [Chassis](#chassis)
* [BIOS](#bios)
* [Baseboard](#baseboard)
* [Product](#product)
* [YAML and JSON serialization](#serialization)

### Overriding the root mountpoint `ghw` uses

The default root mountpoint that `ghw` uses when looking for information about
the host system is `/`. So, for example, when looking up CPU information on a
Linux system, `ghw.CPU()` will use the path `/proc/cpuinfo`.

If you are calling `ghw` from a system that has an alternate root mountpoint,
you can either set the `GHW_CHROOT` environment variable to that alternate
path, or call the module constructor function with the `ghw.WithChroot()`
modifier.

For example, if you are executing from within an application container that has
bind-mounted the root host filesystem to the mount point `/host`, you would set
`GHW_CHROOT` to `/host` so that `ghw` can find `/proc/cpuinfo` at
`/host/proc/cpuinfo`.

Alternately, you can use the `ghw.WithChroot()` function like so:

```go
cpu, err := ghw.CPU(ghw.WithChroot("/host"))
```

### Overriding the per-mountpoint `ghw` uses

When running inside containers, it could be a bit cumbersome to just override
the root mountpoint. Inside containers, when granting access to the host
file systems, is more common to bind-mount them in non standard location,
like `/sys` on `/host-sys` or `/proc` on `/host-proc`.
Is rarer to mount them in a common subtree (e.g. `/sys` on `/host/sys` and
 `/proc` on /host/proc...)

To better cover this use case, `ghw` allows to *programmatically* override
the initial component of filesystems subtrees, allowing to access `sysfs`
(or `procfs` or...) mounted on non-standard locations.


```go
cpu, err := ghw.CPU(ghw.WithPathOverrides(ghw.PathOverrides{
	"/proc": "/host-proc",
	"/sys": "/host-sys",
}))
```

Please note
- this feature works in addition and is composable with the
  `WithChroot`/`GHW_CHROOT` feature.
- `ghw` doesn't support yet environs variable to override individual
   mountpoints, because this could lead to significant environs variables
   proliferation.

### Consuming snapshots

You can make `ghw` read from snapshots (created with `ghw-snapshot`) using
environment variables or programmatically.
Please check `SNAPSHOT.md` to learn more about how ghw creates and consumes
snapshots.

The environment variable `GHW_SNAPSHOT_PATH` let users specify a snapshot
that `ghw` will automatically consume. All the needed chroot changes will be
automatically performed. By default, the snapshot is unpacked on a temporary
directory managed by `ghw`, and cleaned up when no longer needed, avoiding
leftovers.

The rest of the environment variables are relevant iff `GHW_SNAPSHOT_PATH` is given.
`GHW_SNAPSHOT_ROOT` let users specify the directory
on which the snapshot should be unpacked. This moves the ownership of that
directory from `ghw` to users. For this reason, `ghw` will *not* clean up automatically
the content unpacked in `GHW_SNAPSHOT_ROOT`.

`GHW_SNAPSHOT_EXCLUSIVE` is relevant iff `GHW_SNAPSHOT_ROOT` is given.
Set it to any value to toggle it on. This tells `ghw` that the directory is meant
only to contain the given snapshot, thus `ghw` will *not* attempt to unpack it
(and will go ahead silently!) unless the directory is empty.
You can use both `GHW_SNAPSHOT_ROOT` and `GHW_SNAPSHOT_EXCLUSIVE` to make sure
`ghw` unpacks the snapshot only once regardless of how many `ghw` packages
(e.g. cpu, memory) access it.

Set `GHW_SNAPSHOT_PRESERVE` to any value to enable it. If set, `ghw` will *not*
clean up the unpacked snapshot once done, leaving it into the system.

```go
cpu, err := ghw.CPU(ghw.WithSnapshot(ghw.SnapshotOptions{
	Path: "/path/to/linux-amd64-d4771ed3300339bc75f856be09fc6430.tar.gz",
}))


myRoot := "/my/safe/directory"
cpu, err := ghw.CPU(ghw.WithSnapshot(ghw.SnapshotOptions{
	Path: "/path/to/linux-amd64-d4771ed3300339bc75f856be09fc6430.tar.gz",
	Root: &myRoot,
}))

myOtherRoot := "/my/other/safe/directory"
cpu, err := ghw.CPU(ghw.WithSnapshot(ghw.SnapshotOptions{
	Path:      "/path/to/linux-amd64-d4771ed3300339bc75f856be09fc6430.tar.gz",
	Root:      &myOtherRoot,
	Exclusive: true,
}))
```

### Creating snapshots

You can create ghw snapshots in two ways.
You can just consume the `ghw-snapshot` tool, or you can create them programmatically
from your golang code. We explore now the latter case.

Snapshotting takes two phases:
1. clone the relevant pseudofiles/pseudodirectories into a temporary tree
   This tree is usually deleted once the packing is successful.
2. pack the cloned tree into a tar.gz

```go

import (
	"fmt"
	"io/ioutil"
	"os"

	"github.com/jaypipes/ghw/pkg/snapshot"
)

// ...

scratchDir, err := ioutil.TempDir("", "ghw-snapshot-*")
if err != nil {
	fmt.Printf("Error creating clone directory: %v", err)
}
defer os.RemoveAll(scratchDir)

// this step clones all the files and directories ghw cares about
if err := snapshot.CloneTreeInto(scratchDir); err != nil {
	fmt.Printf("error cloning into %q: %v", scratchDir, err)
}

// optionally, you may add extra content into your snapshot.
// ghw will ignore the extra content.
// Glob patterns like `filepath.Glob` are supported.
fileSpecs := []string{
	"/proc/cmdline",
}

// options allows the client code to optionally deference symlinks, or copy
// them into the cloned tree as symlinks
var opts *snapshot.CopyFileOptions
if err := snapshot.CopyFilesInto(fileSpecs, scratchDir, opts); err != nil {
	fmt.Printf("error cloning extra files into %q: %v", scratchDir, err)
}

// automates the creation of the gzipped tarball out of the given tree.
if err := snapshot.PackFrom("my-snapshot.tgz", scratchDir); err != nil {
	fmt.Printf("error packing %q into %q: %v", scratchDir, *output, err)
}
```

### Disabling warning messages

When `ghw` isn't able to retrieve some information, it may print certain
warning messages to `stderr`. To disable these warnings, simply set the
`GHW_DISABLE_WARNINGS` environs variable:

```
$ ghwc memory
WARNING:
Could not determine total physical bytes of memory. This may
be due to the host being a virtual machine or container with no
/var/log/syslog file, or the current user may not have necessary
privileges to read the syslog. We are falling back to setting the
total physical amount of memory to the total usable amount of memory
memory (24GB physical, 24GB usable)
```

```
$ GHW_DISABLE_WARNINGS=1 ghwc memory
memory (24GB physical, 24GB usable)
```

You can disable warning programmatically using the `WithDisableWarnings` option:

```go

import (
	"github.com/jaypipes/ghw"
)

mem, err := ghw.Memory(ghw.WithDisableWarnings())
```

`WithDisableWarnings` is a alias for the `WithNullAlerter` option, which in turn
leverages the more general `Alerter` feature of ghw.

You may supply a `Alerter` to ghw to redirect all the warnings there, like
logger objects (see for example golang's stdlib `log.Logger`).
`Alerter` is in fact the minimal logging interface `ghw needs.
To learn more, please check the `option.Alerter` interface and the `ghw.WithAlerter()`
function.

### Memory

The basic building block of the memory support in ghw is the `ghw.MemoryArea` struct.
A "memory area" is a block of memory which share common properties. In the simplest
case, the whole system memory fits in a single memory area; in more complex scenarios,
like multi-NUMA systems, many memory areas may be present in the system (e.g. one for
each NUMA cell).

The `ghw.MemoryArea` struct contains the following fields:

* `ghw.MemoryInfo.TotalPhysicalBytes` contains the amount of physical memory on
  the host
* `ghw.MemoryInfo.TotalUsableBytes` contains the amount of memory the
  system can actually use. Usable memory accounts for things like the kernel's
  resident memory size and some reserved system bits

Information about the host computer's memory can be retrieved using the
`ghw.Memory()` function which returns a pointer to a `ghw.MemoryInfo` struct.
`ghw.MemoryInfo` is a superset of `ghw.MemoryArea`. Thus, it contains all the
fields found in the `ghw.MemoryArea` (replicated for clarity) plus some:

* `ghw.MemoryInfo.TotalPhysicalBytes` contains the amount of physical memory on
  the host
* `ghw.MemoryInfo.TotalUsableBytes` contains the amount of memory the
  system can actually use. Usable memory accounts for things like the kernel's
  resident memory size and some reserved system bits
* `ghw.MemoryInfo.SupportedPageSizes` is an array of integers representing the
  size, in bytes, of memory pages the system supports
* `ghw.MemoryInfo.Modules` is an array of pointers to `ghw.MemoryModule`
  structs, one for each physical [DIMM](https://en.wikipedia.org/wiki/DIMM).
  Currently, this information is only included on Windows, with Linux support
  [planned](https://github.com/jaypipes/ghw/pull/171#issuecomment-597082409).

```go
package main

import (
	"fmt"

	"github.com/jaypipes/ghw"
)

func main() {
	memory, err := ghw.Memory()
	if err != nil {
		fmt.Printf("Error getting memory info: %v", err)
	}

	fmt.Println(memory.String())
}
```

Example output from my personal workstation:

```
memory (24GB physical, 24GB usable)
```

#### Physical versus Usable Memory

There has been [some](https://github.com/jaypipes/ghw/pull/171)
[confusion](https://github.com/jaypipes/ghw/issues/183) regarding the
difference between the total physical bytes versus total usable bytes of
memory.

Some of this confusion has been due to a misunderstanding of the term "usable".
As mentioned [above](#inspection!=monitoring), `ghw` does inspection of the
system's capacity.

A host computer has two capacities when it comes to RAM. The first capacity is
the amount of RAM that is contained in all memory banks (DIMMs) that are
attached to the motherboard. `ghw.MemoryInfo.TotalPhysicalBytes` refers to this
first capacity.

There is a (usually small) amount of RAM that is consumed by the bootloader
before the operating system is started (booted). Once the bootloader has booted
the operating system, the amount of RAM that may be used by the operating
system and its applications is fixed. `ghw.MemoryInfo.TotalUsableBytes` refers
to this second capacity.

You can determine the amount of RAM that the bootloader used (that is not made
available to the operating system) by subtracting
`ghw.MemoryInfo.TotalUsableBytes` from `ghw.MemoryInfo.TotalPhysicalBytes`:

```go
package main

import (
	"fmt"

	"github.com/jaypipes/ghw"
)

func main() {
	memory, err := ghw.Memory()
	if err != nil {
		fmt.Printf("Error getting memory info: %v", err)
	}

        phys := memory.TotalPhysicalBytes
        usable := memory.TotalUsableBytes

	fmt.Printf("The bootloader consumes %d bytes of RAM\n", phys - usable)
}
```

Example output from my personal workstation booted into a Windows10 operating
system with a Linux GRUB bootloader:

```
The bootloader consumes 3832720 bytes of RAM
```

### CPU

The `ghw.CPU()` function returns a `ghw.CPUInfo` struct that contains
information about the CPUs on the host system.

`ghw.CPUInfo` contains the following fields:

* `ghw.CPUInfo.TotalCores` has the total number of physical cores the host
  system contains
* `ghw.CPUInfo.TotalThreads` has the total number of hardware threads the
  host system contains
* `ghw.CPUInfo.Processors` is an array of `ghw.Processor` structs, one for each
  physical processor package contained in the host

Each `ghw.Processor` struct contains a number of fields:

* `ghw.Processor.ID` is the physical processor `uint32` ID according to the
  system
* `ghw.Processor.NumCores` is the number of physical cores in the processor
  package
* `ghw.Processor.NumThreads` is the number of hardware threads in the processor
  package
* `ghw.Processor.Vendor` is a string containing the vendor name
* `ghw.Processor.Model` is a string containing the vendor's model name
* `ghw.Processor.Capabilities` is an array of strings indicating the features
  the processor has enabled
* `ghw.Processor.Cores` is an array of `ghw.ProcessorCore` structs that are
  packed onto this physical processor

A `ghw.ProcessorCore` has the following fields:

* `ghw.ProcessorCore.ID` is the `uint32` identifier that the host gave this
  core. Note that this does *not* necessarily equate to a zero-based index of
  the core within a physical package. For example, the core IDs for an Intel Core
  i7 are 0, 1, 2, 8, 9, and 10
* `ghw.ProcessorCore.Index` is the zero-based index of the core on the physical
  processor package
* `ghw.ProcessorCore.NumThreads` is the number of hardware threads associated
  with the core
* `ghw.ProcessorCore.LogicalProcessors` is an array of logical processor IDs
  assigned to any processing unit for the core

```go
package main

import (
	"fmt"
	"math"
	"strings"

	"github.com/jaypipes/ghw"
)

func main() {
	cpu, err := ghw.CPU()
	if err != nil {
		fmt.Printf("Error getting CPU info: %v", err)
	}

	fmt.Printf("%v\n", cpu)

	for _, proc := range cpu.Processors {
		fmt.Printf(" %v\n", proc)
		for _, core := range proc.Cores {
			fmt.Printf("  %v\n", core)
		}
		if len(proc.Capabilities) > 0 {
			// pretty-print the (large) block of capability strings into rows
			// of 6 capability strings
			rows := int(math.Ceil(float64(len(proc.Capabilities)) / float64(6)))
			for row := 1; row < rows; row = row + 1 {
				rowStart := (row * 6) - 1
				rowEnd := int(math.Min(float64(rowStart+6), float64(len(proc.Capabilities))))
				rowElems := proc.Capabilities[rowStart:rowEnd]
				capStr := strings.Join(rowElems, " ")
				if row == 1 {
					fmt.Printf("  capabilities: [%s\n", capStr)
				} else if rowEnd < len(proc.Capabilities) {
					fmt.Printf("                 %s\n", capStr)
				} else {
					fmt.Printf("                 %s]\n", capStr)
				}
			}
		}
	}
}
```

Example output from my personal workstation:

```
cpu (1 physical package, 6 cores, 12 hardware threads)
 physical package #0 (6 cores, 12 hardware threads)
  processor core #0 (2 threads), logical processors [0 6]
  processor core #1 (2 threads), logical processors [1 7]
  processor core #2 (2 threads), logical processors [2 8]
  processor core #3 (2 threads), logical processors [3 9]
  processor core #4 (2 threads), logical processors [4 10]
  processor core #5 (2 threads), logical processors [5 11]
  capabilities: [msr pae mce cx8 apic sep
                 mtrr pge mca cmov pat pse36
                 clflush dts acpi mmx fxsr sse
                 sse2 ss ht tm pbe syscall
                 nx pdpe1gb rdtscp lm constant_tsc arch_perfmon
                 pebs bts rep_good nopl xtopology nonstop_tsc
                 cpuid aperfmperf pni pclmulqdq dtes64 monitor
                 ds_cpl vmx est tm2 ssse3 cx16
                 xtpr pdcm pcid sse4_1 sse4_2 popcnt
                 aes lahf_lm pti retpoline tpr_shadow vnmi
                 flexpriority ept vpid dtherm ida arat]
```

### Block storage

Information about the host computer's local block storage is returned from the
`ghw.Block()` function. This function returns a pointer to a `ghw.BlockInfo`
struct.

The `ghw.BlockInfo` struct contains two fields:

* `ghw.BlockInfo.TotalPhysicalBytes` contains the amount of physical block
  storage on the host
* `ghw.BlockInfo.Disks` is an array of pointers to `ghw.Disk` structs, one for
  each disk drive found by the system

Each `ghw.Disk` struct contains the following fields:

* `ghw.Disk.Name` contains a string with the short name of the disk, e.g. "sda"
* `ghw.Disk.SizeBytes` contains the amount of storage the disk provides
* `ghw.Disk.PhysicalBlockSizeBytes` contains the size of the physical blocks
  used on the disk, in bytes
* `ghw.Disk.IsRemovable` contains a boolean indicating if the disk drive is
  removable
* `ghw.Disk.DriveType` is the type of drive. It is of type `ghw.DriveType`
  which has a `ghw.DriveType.String()` method that can be called to return a
  string representation of the bus. This string will be "HDD", "FDD", "ODD",
  or "SSD", which correspond to a hard disk drive (rotational), floppy drive,
  optical (CD/DVD) drive and solid-state drive.
* `ghw.Disk.StorageController` is the type of storage controller/drive. It is
  of type `ghw.StorageController` which has a `ghw.StorageController.String()`
  method that can be called to return a string representation of the bus. This
  string will be "SCSI", "IDE", "virtio", "MMC", or "NVMe"
* `ghw.Disk.NUMANodeID` is the numeric index of the NUMA node this disk is
  local to, or -1
* `ghw.Disk.Vendor` contains a string with the name of the hardware vendor for
  the disk drive
* `ghw.Disk.Model` contains a string with the vendor-assigned disk model name
* `ghw.Disk.SerialNumber` contains a string with the disk's serial number
* `ghw.Disk.WWN` contains a string with the disk's
  [World Wide Name](https://en.wikipedia.org/wiki/World_Wide_Name)
* `ghw.Disk.Partitions` contains an array of pointers to `ghw.Partition`
  structs, one for each partition on the disk

Each `ghw.Partition` struct contains these fields:

* `ghw.Partition.Name` contains a string with the short name of the partition,
  e.g. "sda1"
* `ghw.Partition.Label` contains the label for the partition itself. On Linux
  systems, this is derived from the `ID_PART_ENTRY_NAME` udev entry for the
  partition.
* `ghw.Partition.FilesystemLabel` contains the label for the filesystem housed
  on the partition. On Linux systems, this is derived from the `ID_FS_NAME`
  udev entry for the partition.
* `ghw.Partition.SizeBytes` contains the amount of storage the partition
  provides
* `ghw.Partition.MountPoint` contains a string with the partition's mount
  point, or "" if no mount point was discovered
* `ghw.Partition.Type` contains a string indicated the filesystem type for the
  partition, or "" if the system could not determine the type
* `ghw.Partition.IsReadOnly` is a bool indicating the partition is read-only
* `ghw.Partition.Disk` is a pointer to the `ghw.Disk` object associated with
  the partition. This will be `nil` if the `ghw.Partition` struct was returned
  by the `ghw.DiskPartitions()` library function.
* `ghw.Partition.UUID` is a string containing the partition UUID on Linux, the
  partition UUID on MacOS and nothing on Windows. On Linux
  systems, this is derived from the `ID_PART_ENTRY_UUID` udev entry for the
  partition.

```go
package main

import (
	"fmt"

	"github.com/jaypipes/ghw"
)

func main() {
	block, err := ghw.Block()
	if err != nil {
		fmt.Printf("Error getting block storage info: %v", err)
	}

	fmt.Printf("%v\n", block)

	for _, disk := range block.Disks {
		fmt.Printf(" %v\n", disk)
		for _, part := range disk.Partitions {
			fmt.Printf("  %v\n", part)
		}
	}
}
```

Example output from my personal workstation:

```
block storage (1 disk, 2TB physical storage)
 sda HDD (2TB) SCSI [@pci-0000:04:00.0-scsi-0:1:0:0 (node #0)] vendor=LSI model=Logical_Volume serial=600508e000000000f8253aac9a1abd0c WWN=0x600508e000000000f8253aac9a1abd0c
  /dev/sda1 (100MB)
  /dev/sda2 (187GB)
  /dev/sda3 (449MB)
  /dev/sda4 (1KB)
  /dev/sda5 (15GB)
  /dev/sda6 (2TB) [ext4] mounted@/
```

> Note that `ghw` looks in the udev runtime database for some information. If
> you are using `ghw` in a container, remember to bind mount `/dev/disk` and
> `/run` into your container, otherwise `ghw` won't be able to query the udev
> DB or sysfs paths for information.

### Topology

> **NOTE**: Topology support is currently Linux-only. Windows support is
> [planned](https://github.com/jaypipes/ghw/issues/166).

Information about the host computer's architecture (NUMA vs. SMP), the host's
node layout and processor caches can be retrieved from the `ghw.Topology()`
function. This function returns a pointer to a `ghw.TopologyInfo` struct.

The `ghw.TopologyInfo` struct contains two fields:

* `ghw.TopologyInfo.Architecture` contains an enum with the value `ghw.NUMA` or
  `ghw.SMP` depending on what the topology of the system is
* `ghw.TopologyInfo.Nodes` is an array of pointers to `ghw.TopologyNode`
  structs, one for each topology node (typically physical processor package)
  found by the system

Each `ghw.TopologyNode` struct contains the following fields:

* `ghw.TopologyNode.ID` is the system's `uint32` identifier for the node
* `ghw.TopologyNode.Cores` is an array of pointers to `ghw.ProcessorCore` structs that
  are contained in this node
* `ghw.TopologyNode.Caches` is an array of pointers to `ghw.MemoryCache` structs that
  represent the low-level caches associated with processors and cores on the
  system
* `ghw.TopologyNode.Distance` is an array of distances between NUMA nodes as reported
  by the system.
* `ghw.TopologyNode.Memory` is a struct describing the memory attached to this node.
   Please refer to the documentation of `ghw.MemoryArea`.

See above in the [CPU](#cpu) section for information about the
`ghw.ProcessorCore` struct and how to use and query it.

Each `ghw.MemoryCache` struct contains the following fields:

* `ghw.MemoryCache.Type` is an enum that contains one of `ghw.DATA`,
  `ghw.INSTRUCTION` or `ghw.UNIFIED` depending on whether the cache stores CPU
  instructions, program data, or both
* `ghw.MemoryCache.Level` is a positive integer indicating how close the cache
  is to the processor
* `ghw.MemoryCache.SizeBytes` is an integer containing the number of bytes the
  cache can contain
* `ghw.MemoryCache.LogicalProcessors` is an array of integers representing the
  logical processors that use the cache

```go
package main

import (
	"fmt"

	"github.com/jaypipes/ghw"
)

func main() {
	topology, err := ghw.Topology()
	if err != nil {
		fmt.Printf("Error getting topology info: %v", err)
	}

	fmt.Printf("%v\n", topology)

	for _, node := range topology.Nodes {
		fmt.Printf(" %v\n", node)
		for _, cache := range node.Caches {
			fmt.Printf("  %v\n", cache)
		}
	}
}
```

Example output from my personal workstation:

```
topology SMP (1 nodes)
 node #0 (6 cores)
  L1i cache (32 KB) shared with logical processors: 3,9
  L1i cache (32 KB) shared with logical processors: 2,8
  L1i cache (32 KB) shared with logical processors: 11,5
  L1i cache (32 KB) shared with logical processors: 10,4
  L1i cache (32 KB) shared with logical processors: 0,6
  L1i cache (32 KB) shared with logical processors: 1,7
  L1d cache (32 KB) shared with logical processors: 11,5
  L1d cache (32 KB) shared with logical processors: 10,4
  L1d cache (32 KB) shared with logical processors: 3,9
  L1d cache (32 KB) shared with logical processors: 1,7
  L1d cache (32 KB) shared with logical processors: 0,6
  L1d cache (32 KB) shared with logical processors: 2,8
  L2 cache (256 KB) shared with logical processors: 2,8
  L2 cache (256 KB) shared with logical processors: 3,9
  L2 cache (256 KB) shared with logical processors: 0,6
  L2 cache (256 KB) shared with logical processors: 10,4
  L2 cache (256 KB) shared with logical processors: 1,7
  L2 cache (256 KB) shared with logical processors: 11,5
  L3 cache (12288 KB) shared with logical processors: 0,1,10,11,2,3,4,5,6,7,8,9
```

### Network

Information about the host computer's networking hardware is returned from the
`ghw.Network()` function. This function returns a pointer to a
`ghw.NetworkInfo` struct.

The `ghw.NetworkInfo` struct contains one field:

* `ghw.NetworkInfo.NICs` is an array of pointers to `ghw.NIC` structs, one
  for each network interface controller found for the systen

Each `ghw.NIC` struct contains the following fields:

* `ghw.NIC.Name` is the system's identifier for the NIC
* `ghw.NIC.MacAddress` is the MAC address for the NIC, if any
* `ghw.NIC.IsVirtual` is a boolean indicating if the NIC is a virtualized
  device
* `ghw.NIC.Capabilities` is an array of pointers to `ghw.NICCapability` structs
  that can describe the things the NIC supports. These capabilities match the
  returned values from the `ethtool -k <DEVICE>` call on Linux
* `ghw.NIC.PCIAddress` is the PCI device address of the device backing the NIC.
  this is not-nil only if the backing device is indeed a PCI device; more backing
  devices (e.g. USB) will be added in future versions.

The `ghw.NICCapability` struct contains the following fields:

* `ghw.NICCapability.Name` is the string name of the capability (e.g.
  "tcp-segmentation-offload")
* `ghw.NICCapability.IsEnabled` is a boolean indicating whether the capability
  is currently enabled/active on the NIC
* `ghw.NICCapability.CanEnable` is a boolean indicating whether the capability
  may be enabled

```go
package main

import (
    "fmt"

    "github.com/jaypipes/ghw"
)

func main() {
    net, err := ghw.Network()
    if err != nil {
        fmt.Printf("Error getting network info: %v", err)
    }

    fmt.Printf("%v\n", net)

    for _, nic := range net.NICs {
        fmt.Printf(" %v\n", nic)

        enabledCaps := make([]int, 0)
        for x, cap := range nic.Capabilities {
            if cap.IsEnabled {
                enabledCaps = append(enabledCaps, x)
            }
        }
        if len(enabledCaps) > 0 {
            fmt.Printf("  enabled capabilities:\n")
            for _, x := range enabledCaps {
                fmt.Printf("   - %s\n", nic.Capabilities[x].Name)
            }
        }
    }
}
```

Example output from my personal laptop:

```
net (3 NICs)
 docker0
  enabled capabilities:
   - tx-checksumming
   - tx-checksum-ip-generic
   - scatter-gather
   - tx-scatter-gather
   - tx-scatter-gather-fraglist
   - tcp-segmentation-offload
   - tx-tcp-segmentation
   - tx-tcp-ecn-segmentation
   - tx-tcp-mangleid-segmentation
   - tx-tcp6-segmentation
   - udp-fragmentation-offload
   - generic-segmentation-offload
   - generic-receive-offload
   - tx-vlan-offload
   - highdma
   - tx-lockless
   - netns-local
   - tx-gso-robust
   - tx-fcoe-segmentation
   - tx-gre-segmentation
   - tx-gre-csum-segmentation
   - tx-ipxip4-segmentation
   - tx-ipxip6-segmentation
   - tx-udp_tnl-segmentation
   - tx-udp_tnl-csum-segmentation
   - tx-gso-partial
   - tx-sctp-segmentation
   - tx-esp-segmentation
   - tx-vlan-stag-hw-insert
 enp58s0f1
  enabled capabilities:
   - rx-checksumming
   - generic-receive-offload
   - rx-vlan-offload
   - tx-vlan-offload
   - highdma
 wlp59s0
  enabled capabilities:
   - scatter-gather
   - tx-scatter-gather
   - generic-segmentation-offload
   - generic-receive-offload
   - highdma
   - netns-local
```

### PCI

`ghw` contains a PCI database inspection and querying facility that allows
developers to not only gather information about devices on a local PCI bus but
also query for information about hardware device classes, vendor and product
information.

**NOTE**: Parsing of the PCI-IDS file database is provided by the separate
[github.com/jaypipes/pcidb library](http://github.com/jaypipes/pcidb). You can
read that library's README for more information about the various structs that
are exposed on the `ghw.PCIInfo` struct.

The `ghw.PCI()` function returns a `ghw.PCIInfo` struct. The `ghw.PCIInfo`
struct contains a number of fields that may be queried for PCI information:

* `ghw.PCIInfo.Devices` is a slice of pointers to `ghw.PCIDevice` structs that
  describe the PCI devices on the host system
* `ghw.PCIInfo.Classes` is a map, keyed by the PCI class ID (a hex-encoded
  string) of pointers to `pcidb.Class` structs, one for each class of PCI
  device known to `ghw`
  (**DEPRECATED**, will be removed in `ghw` `v1.0`. Use the
  `github.com/jaypipes/pcidb` library for exploring PCI database information)
* `ghw.PCIInfo.Vendors` is a map, keyed by the PCI vendor ID (a hex-encoded
  string) of pointers to `pcidb.Vendor` structs, one for each PCI vendor
  known to `ghw`
  (**DEPRECATED**, will be removed in `ghw` `v1.0`. Use the
  `github.com/jaypipes/pcidb` library for exploring PCI database information)
* `ghw.PCIInfo.Products` is a map, keyed by the PCI product ID (a hex-encoded
  string) of pointers to `pcidb.Product` structs, one for each PCI product
  known to `ghw`
  (**DEPRECATED**, will be removed in `ghw` `v1.0`. Use the
  `github.com/jaypipes/pcidb` library for exploring PCI database information)

**NOTE**: PCI products are often referred to by their "device ID". We use
the term "product ID" in `ghw` because it more accurately reflects what the
identifier is for: a specific product line produced by the vendor.

The `ghw.PCIDevice` struct has the following fields:

* `ghw.PCIDevice.Vendor` is a pointer to a `pcidb.Vendor` struct that
  describes the device's primary vendor. This will always be non-nil.
* `ghw.PCIDevice.Product` is a pointer to a `pcidb.Product` struct that
  describes the device's primary product. This will always be non-nil.
* `ghw.PCIDevice.Subsystem` is a pointer to a `pcidb.Product` struct that
  describes the device's secondary/sub-product. This will always be non-nil.
* `ghw.PCIDevice.Class` is a pointer to a `pcidb.Class` struct that
  describes the device's class. This will always be non-nil.
* `ghw.PCIDevice.Subclass` is a pointer to a `pcidb.Subclass` struct
  that describes the device's subclass. This will always be non-nil.
* `ghw.PCIDevice.ProgrammingInterface` is a pointer to a
  `pcidb.ProgrammingInterface` struct that describes the device subclass'
  programming interface. This will always be non-nil.
* `ghw.PCIDevice.Driver` is a string representing the device driver the
  system is using to handle this device. Can be empty string if this
  information is not available. If the information is not available,
  this doesn't mean at all the device is not functioning, but only the
  fact `ghw` was not able to retrieve this information.

The `ghw.PCIAddress` (which is an alias for the `ghw.pci.address.Address`
struct) contains the PCI address fields. It has a `ghw.PCIAddress.String()`
method that returns the canonical Domain:Bus:Device.Function ([D]BDF)
representation of this Address.

The `ghw.PCIAddress` struct has the following fields:

* `ghw.PCIAddress.Domain` is a string representing the PCI domain component of
  the address.
* `ghw.PCIAddress.Bus` is a string representing the PCI bus component of
  the address.
* `ghw.PCIAddress.Device` is a string representing the PCI device component of
  the address.
* `ghw.PCIAddress.Function` is a string representing the PCI function component of
  the address.

**NOTE**: Older versions (pre-`v0.9.0`) erroneously referred to the `Device`
field as the `Slot` field. As noted by [@pearsonk](https://github.com/pearsonk)
in [#220](https://github.com/jaypipes/ghw/issues/220), this was a misnomer.

#### Finding a PCI device by PCI address

In addition to the above information, the `ghw.PCIInfo` struct has the
following method:

* `ghw.PCIInfo.GetDevice(address string)`

The following code snippet shows how to call the `ghw.PCIInfo.ListDevices()`
method and output a simple list of PCI address and vendor/product information:

```go
package main

import (
	"fmt"

	"github.com/jaypipes/ghw"
)

func main() {
	pci, err := ghw.PCI()
	if err != nil {
		fmt.Printf("Error getting PCI info: %v", err)
	}
	fmt.Printf("host PCI devices:\n")
	fmt.Println("====================================================")

	for _, device := range pci.Devices {
		vendor := device.Vendor
		vendorName := vendor.Name
		if len(vendor.Name) > 20 {
			vendorName = string([]byte(vendorName)[0:17]) + "..."
		}
		product := device.Product
		productName := product.Name
		if len(product.Name) > 40 {
			productName = string([]byte(productName)[0:37]) + "..."
		}
		fmt.Printf("%-12s\t%-20s\t%-40s\n", device.Address, vendorName, productName)
	}
}
```

on my local workstation the output of the above looks like the following:

```
host PCI devices:
====================================================
0000:00:00.0	Intel Corporation   	5520/5500/X58 I/O Hub to ESI Port
0000:00:01.0	Intel Corporation   	5520/5500/X58 I/O Hub PCI Express Roo...
0000:00:02.0	Intel Corporation   	5520/5500/X58 I/O Hub PCI Express Roo...
0000:00:03.0	Intel Corporation   	5520/5500/X58 I/O Hub PCI Express Roo...
0000:00:07.0	Intel Corporation   	5520/5500/X58 I/O Hub PCI Express Roo...
0000:00:10.0	Intel Corporation   	7500/5520/5500/X58 Physical and Link ...
0000:00:10.1	Intel Corporation   	7500/5520/5500/X58 Routing and Protoc...
0000:00:14.0	Intel Corporation   	7500/5520/5500/X58 I/O Hub System Man...
0000:00:14.1	Intel Corporation   	7500/5520/5500/X58 I/O Hub GPIO and S...
0000:00:14.2	Intel Corporation   	7500/5520/5500/X58 I/O Hub Control St...
0000:00:14.3	Intel Corporation   	7500/5520/5500/X58 I/O Hub Throttle R...
0000:00:19.0	Intel Corporation   	82567LF-2 Gigabit Network Connection
0000:00:1a.0	Intel Corporation   	82801JI (ICH10 Family) USB UHCI Contr...
0000:00:1a.1	Intel Corporation   	82801JI (ICH10 Family) USB UHCI Contr...
0000:00:1a.2	Intel Corporation   	82801JI (ICH10 Family) USB UHCI Contr...
0000:00:1a.7	Intel Corporation   	82801JI (ICH10 Family) USB2 EHCI Cont...
0000:00:1b.0	Intel Corporation   	82801JI (ICH10 Family) HD Audio Contr...
0000:00:1c.0	Intel Corporation   	82801JI (ICH10 Family) PCI Express Ro...
0000:00:1c.1	Intel Corporation   	82801JI (ICH10 Family) PCI Express Po...
0000:00:1c.4	Intel Corporation   	82801JI (ICH10 Family) PCI Express Ro...
0000:00:1d.0	Intel Corporation   	82801JI (ICH10 Family) USB UHCI Contr...
0000:00:1d.1	Intel Corporation   	82801JI (ICH10 Family) USB UHCI Contr...
0000:00:1d.2	Intel Corporation   	82801JI (ICH10 Family) USB UHCI Contr...
0000:00:1d.7	Intel Corporation   	82801JI (ICH10 Family) USB2 EHCI Cont...
0000:00:1e.0	Intel Corporation   	82801 PCI Bridge
0000:00:1f.0	Intel Corporation   	82801JIR (ICH10R) LPC Interface Contr...
0000:00:1f.2	Intel Corporation   	82801JI (ICH10 Family) SATA AHCI Cont...
0000:00:1f.3	Intel Corporation   	82801JI (ICH10 Family) SMBus Controller
0000:01:00.0	NEC Corporation     	uPD720200 USB 3.0 Host Controller
0000:02:00.0	Marvell Technolog...	88SE9123 PCIe SATA 6.0 Gb/s controller
0000:02:00.1	Marvell Technolog...	88SE912x IDE Controller
0000:03:00.0	NVIDIA Corporation  	GP107 [GeForce GTX 1050 Ti]
0000:03:00.1	NVIDIA Corporation  	UNKNOWN
0000:04:00.0	LSI Logic / Symbi...	SAS2004 PCI-Express Fusion-MPT SAS-2 ...
0000:06:00.0	Qualcomm Atheros    	AR5418 Wireless Network Adapter [AR50...
0000:08:03.0	LSI Corporation     	FW322/323 [TrueFire] 1394a Controller
0000:3f:00.0	Intel Corporation   	UNKNOWN
0000:3f:00.1	Intel Corporation   	Xeon 5600 Series QuickPath Architectu...
0000:3f:02.0	Intel Corporation   	Xeon 5600 Series QPI Link 0
0000:3f:02.1	Intel Corporation   	Xeon 5600 Series QPI Physical 0
0000:3f:02.2	Intel Corporation   	Xeon 5600 Series Mirror Port Link 0
0000:3f:02.3	Intel Corporation   	Xeon 5600 Series Mirror Port Link 1
0000:3f:03.0	Intel Corporation   	Xeon 5600 Series Integrated Memory Co...
0000:3f:03.1	Intel Corporation   	Xeon 5600 Series Integrated Memory Co...
0000:3f:03.4	Intel Corporation   	Xeon 5600 Series Integrated Memory Co...
0000:3f:04.0	Intel Corporation   	Xeon 5600 Series Integrated Memory Co...
0000:3f:04.1	Intel Corporation   	Xeon 5600 Series Integrated Memory Co...
0000:3f:04.2	Intel Corporation   	Xeon 5600 Series Integrated Memory Co...
0000:3f:04.3	Intel Corporation   	Xeon 5600 Series Integrated Memory Co...
0000:3f:05.0	Intel Corporation   	Xeon 5600 Series Integrated Memory Co...
0000:3f:05.1	Intel Corporation   	Xeon 5600 Series Integrated Memory Co...
0000:3f:05.2	Intel Corporation   	Xeon 5600 Series Integrated Memory Co...
0000:3f:05.3	Intel Corporation   	Xeon 5600 Series Integrated Memory Co...
0000:3f:06.0	Intel Corporation   	Xeon 5600 Series Integrated Memory Co...
0000:3f:06.1	Intel Corporation   	Xeon 5600 Series Integrated Memory Co...
0000:3f:06.2	Intel Corporation   	Xeon 5600 Series Integrated Memory Co...
0000:3f:06.3	Intel Corporation   	Xeon 5600 Series Integrated Memory Co...
```

The following code snippet shows how to call the `ghw.PCIInfo.GetDevice()`
method and use its returned `ghw.PCIDevice` struct pointer:

```go
package main

import (
	"fmt"
	"os"

	"github.com/jaypipes/ghw"
)

func main() {
	pci, err := ghw.PCI()
	if err != nil {
		fmt.Printf("Error getting PCI info: %v", err)
	}

	addr := "0000:00:00.0"
	if len(os.Args) == 2 {
		addr = os.Args[1]
	}
	fmt.Printf("PCI device information for %s\n", addr)
	fmt.Println("====================================================")
	deviceInfo := pci.GetDevice(addr)
	if deviceInfo == nil {
		fmt.Printf("could not retrieve PCI device information for %s\n", addr)
		return
	}

	vendor := deviceInfo.Vendor
	fmt.Printf("Vendor: %s [%s]\n", vendor.Name, vendor.ID)
	product := deviceInfo.Product
	fmt.Printf("Product: %s [%s]\n", product.Name, product.ID)
	subsystem := deviceInfo.Subsystem
	subvendor := pci.Vendors[subsystem.VendorID]
	subvendorName := "UNKNOWN"
	if subvendor != nil {
		subvendorName = subvendor.Name
	}
	fmt.Printf("Subsystem: %s [%s] (Subvendor: %s)\n", subsystem.Name, subsystem.ID, subvendorName)
	class := deviceInfo.Class
	fmt.Printf("Class: %s [%s]\n", class.Name, class.ID)
	subclass := deviceInfo.Subclass
	fmt.Printf("Subclass: %s [%s]\n", subclass.Name, subclass.ID)
	progIface := deviceInfo.ProgrammingInterface
	fmt.Printf("Programming Interface: %s [%s]\n", progIface.Name, progIface.ID)
}
```

Here's a sample output from my local workstation:

```
PCI device information for 0000:03:00.0
====================================================
Vendor: NVIDIA Corporation [10de]
Product: GP107 [GeForce GTX 1050 Ti] [1c82]
Subsystem: UNKNOWN [8613] (Subvendor: ASUSTeK Computer Inc.)
Class: Display controller [03]
Subclass: VGA compatible controller [00]
Programming Interface: VGA controller [00]
```

### GPU

Information about the host computer's graphics hardware is returned from the
`ghw.GPU()` function. This function returns a pointer to a `ghw.GPUInfo`
struct.

The `ghw.GPUInfo` struct contains one field:

* `ghw.GPUInfo.GraphicCards` is an array of pointers to `ghw.GraphicsCard`
  structs, one for each graphics card found for the systen

Each `ghw.GraphicsCard` struct contains the following fields:

* `ghw.GraphicsCard.Index` is the system's numeric zero-based index for the
  card on the bus
* `ghw.GraphicsCard.Address` is the PCI address for the graphics card
* `ghw.GraphicsCard.DeviceInfo` is a pointer to a `ghw.PCIDevice` struct
  describing the graphics card. This may be `nil` if no PCI device information
  could be determined for the card.
* `ghw.GraphicsCard.Node` is an pointer to a `ghw.TopologyNode` struct that the
  GPU/graphics card is affined to. On non-NUMA systems, this will always be
  `nil`.

```go
package main

import (
	"fmt"

	"github.com/jaypipes/ghw"
)

func main() {
	gpu, err := ghw.GPU()
	if err != nil {
		fmt.Printf("Error getting GPU info: %v", err)
	}

	fmt.Printf("%v\n", gpu)

	for _, card := range gpu.GraphicsCards {
		fmt.Printf(" %v\n", card)
	}
}
```

Example output from my personal workstation:

```
gpu (1 graphics card)
 card #0 @0000:03:00.0 -> class: 'Display controller' vendor: 'NVIDIA Corporation' product: 'GP107 [GeForce GTX 1050 Ti]'
```

**NOTE**: You can [read more](#pci) about the fields of the `ghw.PCIDevice`
struct if you'd like to dig deeper into PCI subsystem and programming interface
information

**NOTE**: You can [read more](#topology) about the fields of the
`ghw.TopologyNode` struct if you'd like to dig deeper into the NUMA/topology
subsystem

### Chassis

The host's chassis information is accessible with the `ghw.Chassis()` function.  This
function returns a pointer to a `ghw.ChassisInfo` struct.

The `ghw.ChassisInfo` struct contains multiple fields:

* `ghw.ChassisInfo.AssetTag` is a string with the chassis asset tag
* `ghw.ChassisInfo.SerialNumber` is a string with the chassis serial number
* `ghw.ChassisInfo.Type` is a string with the chassis type *code*
* `ghw.ChassisInfo.TypeDescription` is a string with a description of the chassis type
* `ghw.ChassisInfo.Vendor` is a string with the chassis vendor
* `ghw.ChassisInfo.Version` is a string with the chassis version

**NOTE**: These fields are often missing for non-server hardware. Don't be
surprised to see empty string or "None" values.

```go
package main

import (
	"fmt"

	"github.com/jaypipes/ghw"
)

func main() {
	chassis, err := ghw.Chassis()
	if err != nil {
		fmt.Printf("Error getting chassis info: %v", err)
	}

	fmt.Printf("%v\n", chassis)
}
```

Example output from my personal workstation:

```
chassis type=Desktop vendor=System76 version=thelio-r1
```

**NOTE**: Some of the values such as serial numbers are shown as unknown because
the Linux kernel by default disallows access to those fields if you're not running
as root.  They will be populated if it runs as root or otherwise you may see warnings
like the following:

```
WARNING: Unable to read chassis_serial: open /sys/class/dmi/id/chassis_serial: permission denied
```

You can ignore them or use the [Disabling warning messages](#disabling-warning-messages)
feature to quiet things down.

### BIOS

The host's basis input/output system (BIOS) information is accessible with the `ghw.BIOS()` function.  This
function returns a pointer to a `ghw.BIOSInfo` struct.

The `ghw.BIOSInfo` struct contains multiple fields:

* `ghw.BIOSInfo.Vendor` is a string with the BIOS vendor
* `ghw.BIOSInfo.Version` is a string with the BIOS version
* `ghw.BIOSInfo.Date` is a string with the date the BIOS was flashed/created

```go
package main

import (
	"fmt"

	"github.com/jaypipes/ghw"
)

func main() {
	bios, err := ghw.BIOS()
	if err != nil {
		fmt.Printf("Error getting BIOS info: %v", err)
	}

	fmt.Printf("%v\n", bios)
}
```

Example output from my personal workstation:

```
bios vendor=System76 version=F2 Z5 date=11/14/2018
```

### Baseboard

The host's baseboard information is accessible with the `ghw.Baseboard()` function.  This
function returns a pointer to a `ghw.BaseboardInfo` struct.

The `ghw.BaseboardInfo` struct contains multiple fields:

* `ghw.BaseboardInfo.AssetTag` is a string with the baseboard asset tag
* `ghw.BaseboardInfo.SerialNumber` is a string with the baseboard serial number
* `ghw.BaseboardInfo.Vendor` is a string with the baseboard vendor
* `ghw.BaseboardInfo.Product` is a string with the baseboard name on Linux and
  Product on Windows
* `ghw.BaseboardInfo.Version` is a string with the baseboard version

**NOTE**: These fields are often missing for non-server hardware. Don't be
surprised to see empty string or "None" values.

```go
package main

import (
	"fmt"

	"github.com/jaypipes/ghw"
)

func main() {
	baseboard, err := ghw.Baseboard()
	if err != nil {
		fmt.Printf("Error getting baseboard info: %v", err)
	}

	fmt.Printf("%v\n", baseboard)
}
```

Example output from my personal workstation:

```
baseboard vendor=System76 version=thelio-r1
```

**NOTE**: Some of the values such as serial numbers are shown as unknown because
the Linux kernel by default disallows access to those fields if you're not running
as root.  They will be populated if it runs as root or otherwise you may see warnings
like the following:

```
WARNING: Unable to read board_serial: open /sys/class/dmi/id/board_serial: permission denied
```

You can ignore them or use the [Disabling warning messages](#disabling-warning-messages)
feature to quiet things down.

### Product

The host's product information is accessible with the `ghw.Product()` function.  This
function returns a pointer to a `ghw.ProductInfo` struct.

The `ghw.ProductInfo` struct contains multiple fields:

* `ghw.ProductInfo.Family` is a string describing the product family
* `ghw.ProductInfo.Name` is a string with the product name
* `ghw.ProductInfo.SerialNumber` is a string with the product serial number
* `ghw.ProductInfo.UUID` is a string with the product UUID
* `ghw.ProductInfo.SKU` is a string with the product stock unit identifier (SKU)
* `ghw.ProductInfo.Vendor` is a string with the product vendor
* `ghw.ProductInfo.Version` is a string with the product version

**NOTE**: These fields are often missing for non-server hardware. Don't be
surprised to see empty string, "Default string" or "None" values.

```go
package main

import (
	"fmt"

	"github.com/jaypipes/ghw"
)

func main() {
	product, err := ghw.Product()
	if err != nil {
		fmt.Printf("Error getting product info: %v", err)
	}

	fmt.Printf("%v\n", product)
}
```

Example output from my personal workstation:

```
product family=Default string name=Thelio vendor=System76 sku=Default string version=thelio-r1
```

**NOTE**: Some of the values such as serial numbers are shown as unknown because
the Linux kernel by default disallows access to those fields if you're not running
as root.  They will be populated if it runs as root or otherwise you may see warnings
like the following:

```
WARNING: Unable to read product_serial: open /sys/class/dmi/id/product_serial: permission denied
```

You can ignore them or use the [Disabling warning messages](#disabling-warning-messages)
feature to quiet things down.

## Serialization

All of the `ghw` `XXXInfo` structs -- e.g. `ghw.CPUInfo` -- have two methods
for producing a serialized JSON or YAML string representation of the contained
information:

* `JSONString()` returns a string containing the information serialized into
  JSON. It accepts a single boolean parameter indicating whether to use
  indentation when outputting the string
* `YAMLString()` returns a string containing the information serialized into
  YAML

```go
package main

import (
	"fmt"

	"github.com/jaypipes/ghw"
)

func main() {
	mem, err := ghw.Memory()
	if err != nil {
		fmt.Printf("Error getting memory info: %v", err)
	}

	fmt.Printf("%s", mem.YAMLString())
}
```

the above example code prints the following out on my local workstation:

```
memory:
  supported_page_sizes:
  - 1073741824
  - 2097152
  total_physical_bytes: 25263415296
  total_usable_bytes: 25263415296
```

## Calling external programs

By default ghw may call external programs, for example `ethtool`, to learn about hardware capabilities.
In some rare circumstances it may be useful to opt out from this behaviour and rely only on the data
provided by pseudo-filesystems, like sysfs.
The most common use case is when we want to consume a snapshot from ghw. In these cases the information
provided by tools will be most likely inconsistent with the data from the snapshot - they will run on
a different host!
To prevent ghw from calling external tools, set the environs variable `GHW_DISABLE_TOOLS` to any value,
or, programmatically, check the `WithDisableTools` function.
The default behaviour of ghw is to call external tools when available.

**WARNING**:
- on all platforms, disabling external tools make ghw return less data.
  Unless noted otherwise, there is _no fallback flow_ if external tools are disabled.
- on darwin, disabling external tools disable block support entirely

## Developers

[Contributions](CONTRIBUTING.md) to `ghw` are welcomed! Fork the repo on GitHub
and submit a pull request with your proposed changes. Or, feel free to log an
issue for a feature request or bug report.

### Running tests

You can run unit tests easily using the `make test` command, like so:

```
[jaypipes@uberbox ghw]$ make test
go test github.com/jaypipes/ghw github.com/jaypipes/ghw/cmd/ghwc
ok      github.com/jaypipes/ghw 0.084s
?       github.com/jaypipes/ghw/cmd/ghwc    [no test files]
```
  070701000007C2000081A4000000000000000000000001645E367C00000BF8000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/SNAPSHOT.md    # ghw snapshots

For ghw, snapshots are partial clones of the `/proc`, `/sys` (et. al.) subtrees copied from arbitrary
machines, which ghw can consume later. "partial" is because the snapshot doesn't need to contain a
complete copy of all the filesystem subtree (that is doable but inpractical). It only needs to contain
the paths ghw cares about. The snapshot concept was introduced [to make ghw easier to test](https://github.com/jaypipes/ghw/issues/66).

## Create and consume snapshot

The recommended way to create snapshots for ghw is to use the `ghw-snapshot` tool.
This tool is maintained by the ghw authors, and snapshots created with this tool are guaranteed to work.

To consume the ghw snapshots, please check the `README.md` document.

## Snapshot design and definitions

The remainder of this document will describe how a snapshot looks like and provides rationale for all the major design decisions.
Even though this document aims to provide all the necessary information to understand how ghw creates snapshots and what you should
expect, we recommend to check also the [project issues](https://github.com/jaypipes/ghw/issues) and the `git` history to have the full picture.

### Scope

ghw supports snapshots only on linux platforms. This restriction may be lifted in future releases.
Snapshots must be consumable in the following supported ways:

1. (way 1) from docker (or podman), mounting them as volumes. See `hack/run-against-snapshot.sh`
2. (way 2) using the environment variables `GHW_SNAPSHOT_*`. See `README.md` for the full documentation.

Other combinations are possible, but are unsupported and may stop working any time.
You should depend only on the supported ways to consume snapshots.

### Snapshot content constraints

Stemming from the use cases, the snapshot content must have the following properties:

0. (constraint 0) MUST contain the same information as live system (obviously). Whatever you learn from a live system, you MUST be able to learn from a snapshot.
1. (constraint 1) MUST NOT require any post processing before it is consumable besides, obviously, unpacking the `.tar.gz` on the right directory - and pointing ghw to that directory.
2. (constraint 2) MUST NOT require any special handling nor special code path in ghw. From ghw perspective running against a live system or against a snapshot should be completely transparent.
3. (constraint 3) MUST contain only data - no executable code is allowed ever. This makes snapshots trivially safe to share and consume.
4. (constraint 4) MUST NOT contain any personally-identifiable data. Data gathered into a snapshot is for testing and troubleshooting purposes and should be safe to send to troubleshooters to analyze.

It must be noted that trivially cloning subtrees from `/proc` and `/sys` and creating a tarball out of them doesn't work
because both pseudo filesystems make use of symlinks, and [docker doesn't really play nice with symlinks](https://github.com/jaypipes/ghw/commit/f8ffd4d24e62eb9017511f072ccf51f13d4a3399).
This conflcits with (way 1) above.

070701000007C3000081A4000000000000000000000001645E367C00000CB7000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/alias.go   //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package ghw

import (
	"github.com/jaypipes/ghw/pkg/baseboard"
	"github.com/jaypipes/ghw/pkg/bios"
	"github.com/jaypipes/ghw/pkg/block"
	"github.com/jaypipes/ghw/pkg/chassis"
	"github.com/jaypipes/ghw/pkg/cpu"
	"github.com/jaypipes/ghw/pkg/gpu"
	"github.com/jaypipes/ghw/pkg/memory"
	"github.com/jaypipes/ghw/pkg/net"
	"github.com/jaypipes/ghw/pkg/option"
	"github.com/jaypipes/ghw/pkg/pci"
	pciaddress "github.com/jaypipes/ghw/pkg/pci/address"
	"github.com/jaypipes/ghw/pkg/product"
	"github.com/jaypipes/ghw/pkg/topology"
)

type WithOption = option.Option

var (
	WithChroot      = option.WithChroot
	WithSnapshot    = option.WithSnapshot
	WithAlerter     = option.WithAlerter
	WithNullAlerter = option.WithNullAlerter
	// match the existing environ variable to minimize surprises
	WithDisableWarnings = option.WithNullAlerter
	WithDisableTools    = option.WithDisableTools
	WithPathOverrides   = option.WithPathOverrides
)

type SnapshotOptions = option.SnapshotOptions

type PathOverrides = option.PathOverrides

type CPUInfo = cpu.Info

var (
	CPU = cpu.New
)

type MemoryArea = memory.Area
type MemoryInfo = memory.Info
type MemoryCacheType = memory.CacheType
type MemoryModule = memory.Module

const (
	MEMORY_CACHE_TYPE_UNIFIED     = memory.CACHE_TYPE_UNIFIED
	MEMORY_CACHE_TYPE_INSTRUCTION = memory.CACHE_TYPE_INSTRUCTION
	MEMORY_CACHE_TYPE_DATA        = memory.CACHE_TYPE_DATA
)

var (
	Memory = memory.New
)

type BlockInfo = block.Info
type Disk = block.Disk
type Partition = block.Partition

var (
	Block = block.New
)

type DriveType = block.DriveType

const (
	DRIVE_TYPE_UNKNOWN = block.DRIVE_TYPE_UNKNOWN
	DRIVE_TYPE_HDD     = block.DRIVE_TYPE_HDD
	DRIVE_TYPE_FDD     = block.DRIVE_TYPE_FDD
	DRIVE_TYPE_ODD     = block.DRIVE_TYPE_ODD
	DRIVE_TYPE_SSD     = block.DRIVE_TYPE_SSD
)

type StorageController = block.StorageController

const (
	STORAGE_CONTROLLER_UNKNOWN = block.STORAGE_CONTROLLER_UNKNOWN
	STORAGE_CONTROLLER_IDE     = block.STORAGE_CONTROLLER_IDE
	STORAGE_CONTROLLER_SCSI    = block.STORAGE_CONTROLLER_SCSI
	STORAGE_CONTROLLER_NVME    = block.STORAGE_CONTROLLER_NVME
	STORAGE_CONTROLLER_VIRTIO  = block.STORAGE_CONTROLLER_VIRTIO
	STORAGE_CONTROLLER_MMC     = block.STORAGE_CONTROLLER_MMC
)

type NetworkInfo = net.Info
type NIC = net.NIC
type NICCapability = net.NICCapability

var (
	Network = net.New
)

type BIOSInfo = bios.Info

var (
	BIOS = bios.New
)

type ChassisInfo = chassis.Info

var (
	Chassis = chassis.New
)

type BaseboardInfo = baseboard.Info

var (
	Baseboard = baseboard.New
)

type TopologyInfo = topology.Info
type TopologyNode = topology.Node

var (
	Topology = topology.New
)

type Architecture = topology.Architecture

const (
	ARCHITECTURE_SMP  = topology.ARCHITECTURE_SMP
	ARCHITECTURE_NUMA = topology.ARCHITECTURE_NUMA
)

type PCIInfo = pci.Info
type PCIAddress = pciaddress.Address
type PCIDevice = pci.Device

var (
	PCI                  = pci.New
	PCIAddressFromString = pciaddress.FromString
)

type ProductInfo = product.Info

var (
	Product = product.New
)

type GPUInfo = gpu.Info
type GraphicsCard = gpu.GraphicsCard

var (
	GPU = gpu.New
)
 070701000007C4000081A4000000000000000000000001645E367C00001C72000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/doc.go //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

/*
	package ghw can determine various hardware-related
	information about the host computer:

	* Memory
	* CPU
	* Block storage
	* Topology
	* Network
	* PCI
	* GPU

	Memory

	Information about the host computer's memory can be retrieved using the
	Memory function which returns a pointer to a MemoryInfo struct.

		package main

		import (
			"fmt"

			"github.com/jaypipes/ghw"
		)

		func main() {
			memory, err := ghw.Memory()
			if err != nil {
				fmt.Printf("Error getting memory info: %v", err)
			}

			fmt.Println(memory.String())
		}

	CPU

	The CPU function returns a CPUInfo struct that contains information about
	the CPUs on the host system.

		package main

		import (
			"fmt"
			"math"
			"strings"

			"github.com/jaypipes/ghw"
		)

		func main() {
			cpu, err := ghw.CPU()
			if err != nil {
				fmt.Printf("Error getting CPU info: %v", err)
			}

			fmt.Printf("%v\n", cpu)

			for _, proc := range cpu.Processors {
				fmt.Printf(" %v\n", proc)
				for _, core := range proc.Cores {
					fmt.Printf("  %v\n", core)
				}
				if len(proc.Capabilities) > 0 {
					// pretty-print the (large) block of capability strings into rows
					// of 6 capability strings
					rows := int(math.Ceil(float64(len(proc.Capabilities)) / float64(6)))
					for row := 1; row < rows; row = row + 1 {
						rowStart := (row * 6) - 1
						rowEnd := int(math.Min(float64(rowStart+6), float64(len(proc.Capabilities))))
						rowElems := proc.Capabilities[rowStart:rowEnd]
						capStr := strings.Join(rowElems, " ")
						if row == 1 {
							fmt.Printf("  capabilities: [%s\n", capStr)
						} else if rowEnd < len(proc.Capabilities) {
							fmt.Printf("                 %s\n", capStr)
						} else {
							fmt.Printf("                 %s]\n", capStr)
						}
					}
				}
			}
		}

	Block storage

	Information about the host computer's local block storage is returned from
	the Block function. This function returns a pointer to a BlockInfo struct.

		package main

		import (
			"fmt"

			"github.com/jaypipes/ghw"
		)

		func main() {
			block, err := ghw.Block()
			if err != nil {
				fmt.Printf("Error getting block storage info: %v", err)
			}

			fmt.Printf("%v\n", block)

			for _, disk := range block.Disks {
				fmt.Printf(" %v\n", disk)
				for _, part := range disk.Partitions {
					fmt.Printf("  %v\n", part)
				}
			}
		}

	Topology

	Information about the host computer's architecture (NUMA vs. SMP), the
	host's node layout and processor caches can be retrieved from the Topology
	function. This function returns a pointer to a TopologyInfo struct.

		package main

		import (
			"fmt"

			"github.com/jaypipes/ghw"
		)

		func main() {
			topology, err := ghw.Topology()
			if err != nil {
				fmt.Printf("Error getting topology info: %v", err)
			}

			fmt.Printf("%v\n", topology)

			for _, node := range topology.Nodes {
				fmt.Printf(" %v\n", node)
				for _, cache := range node.Caches {
					fmt.Printf("  %v\n", cache)
				}
			}
		}

	Network

	Information about the host computer's networking hardware is returned from
	the Network function. This function returns a pointer to a NetworkInfo
	struct.

		package main

		import (
			"fmt"

			"github.com/jaypipes/ghw"
		)

		func main() {
			net, err := ghw.Network()
			if err != nil {
				fmt.Printf("Error getting network info: %v", err)
			}

			fmt.Printf("%v\n", net)

			for _, nic := range net.NICs {
				fmt.Printf(" %v\n", nic)

				enabledCaps := make([]int, 0)
				for x, cap := range nic.Capabilities {
					if cap.IsEnabled {
						enabledCaps = append(enabledCaps, x)
					}
				}
				if len(enabledCaps) > 0 {
					fmt.Printf("  enabled capabilities:\n")
					for _, x := range enabledCaps {
						fmt.Printf("   - %s\n", nic.Capabilities[x].Name)
					}
				}
			}
		}

	PCI

	ghw contains a PCI database inspection and querying facility that allows
	developers to not only gather information about devices on a local PCI bus
	but also query for information about hardware device classes, vendor and
	product information.

	**NOTE**: Parsing of the PCI-IDS file database is provided by the separate
	http://github.com/jaypipes/pcidb library. You can read that library's
	README for more information about the various structs that are exposed on
	the PCIInfo struct.

	PCIInfo.ListDevices is used to iterate over a host's PCI devices:

		package main

		import (
			"fmt"

			"github.com/jaypipes/ghw"
		)

		func main() {
			pci, err := ghw.PCI()
			if err != nil {
				fmt.Printf("Error getting PCI info: %v", err)
			}
			fmt.Printf("host PCI devices:\n")
			fmt.Println("====================================================")
			devices := pci.ListDevices()
			if len(devices) == 0 {
				fmt.Printf("error: could not retrieve PCI devices\n")
				return
			}

			for _, device := range devices {
				vendor := device.Vendor
				vendorName := vendor.Name
				if len(vendor.Name) > 20 {
					vendorName = string([]byte(vendorName)[0:17]) + "..."
				}
				product := device.Product
				productName := product.Name
				if len(product.Name) > 40 {
					productName = string([]byte(productName)[0:37]) + "..."
				}
				fmt.Printf("%-12s\t%-20s\t%-40s\n", device.Address, vendorName, productName)
			}
		}

	The following code snippet shows how to call the PCIInfo.GetDevice method
	and use its returned PCIDevice struct pointer:

		package main

		import (
			"fmt"
			"os"

			"github.com/jaypipes/ghw"
		)

		func main() {
			pci, err := ghw.PCI()
			if err != nil {
				fmt.Printf("Error getting PCI info: %v", err)
			}

			addr := "0000:00:00.0"
			if len(os.Args) == 2 {
				addr = os.Args[1]
			}
			fmt.Printf("PCI device information for %s\n", addr)
			fmt.Println("====================================================")
			deviceInfo := pci.GetDevice(addr)
			if deviceInfo == nil {
				fmt.Printf("could not retrieve PCI device information for %s\n", addr)
				return
			}

			vendor := deviceInfo.Vendor
			fmt.Printf("Vendor: %s [%s]\n", vendor.Name, vendor.ID)
			product := deviceInfo.Product
			fmt.Printf("Product: %s [%s]\n", product.Name, product.ID)
			subsystem := deviceInfo.Subsystem
			subvendor := pci.Vendors[subsystem.VendorID]
			subvendorName := "UNKNOWN"
			if subvendor != nil {
				subvendorName = subvendor.Name
			}
			fmt.Printf("Subsystem: %s [%s] (Subvendor: %s)\n", subsystem.Name, subsystem.ID, subvendorName)
			class := deviceInfo.Class
			fmt.Printf("Class: %s [%s]\n", class.Name, class.ID)
			subclass := deviceInfo.Subclass
			fmt.Printf("Subclass: %s [%s]\n", subclass.Name, subclass.ID)
			progIface := deviceInfo.ProgrammingInterface
			fmt.Printf("Programming Interface: %s [%s]\n", progIface.Name, progIface.ID)
		}

	GPU

	Information about the host computer's graphics hardware is returned from
	the GPU function. This function returns a pointer to a GPUInfo struct.

		package main

		import (
			"fmt"

			"github.com/jaypipes/ghw"
		)

		func main() {
			gpu, err := ghw.GPU()
			if err != nil {
				fmt.Printf("Error getting GPU info: %v", err)
			}

			fmt.Printf("%v\n", gpu)

			for _, card := range gpu.GraphicsCards {
				fmt.Printf(" %v\n", card)
			}
		}
*/
package ghw
  070701000007C5000081A4000000000000000000000001645E367C00000DE8000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/host.go    //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package ghw

import (
	"fmt"

	"github.com/jaypipes/ghw/pkg/context"

	"github.com/jaypipes/ghw/pkg/baseboard"
	"github.com/jaypipes/ghw/pkg/bios"
	"github.com/jaypipes/ghw/pkg/block"
	"github.com/jaypipes/ghw/pkg/chassis"
	"github.com/jaypipes/ghw/pkg/cpu"
	"github.com/jaypipes/ghw/pkg/gpu"
	"github.com/jaypipes/ghw/pkg/marshal"
	"github.com/jaypipes/ghw/pkg/memory"
	"github.com/jaypipes/ghw/pkg/net"
	"github.com/jaypipes/ghw/pkg/pci"
	"github.com/jaypipes/ghw/pkg/product"
	"github.com/jaypipes/ghw/pkg/topology"
)

// HostInfo is a wrapper struct containing information about the host system's
// memory, block storage, CPU, etc
type HostInfo struct {
	ctx       *context.Context
	Memory    *memory.Info    `json:"memory"`
	Block     *block.Info     `json:"block"`
	CPU       *cpu.Info       `json:"cpu"`
	Topology  *topology.Info  `json:"topology"`
	Network   *net.Info       `json:"network"`
	GPU       *gpu.Info       `json:"gpu"`
	Chassis   *chassis.Info   `json:"chassis"`
	BIOS      *bios.Info      `json:"bios"`
	Baseboard *baseboard.Info `json:"baseboard"`
	Product   *product.Info   `json:"product"`
	PCI       *pci.Info       `json:"pci"`
}

// Host returns a pointer to a HostInfo struct that contains fields with
// information about the host system's CPU, memory, network devices, etc
func Host(opts ...*WithOption) (*HostInfo, error) {
	ctx := context.New(opts...)

	memInfo, err := memory.New(opts...)
	if err != nil {
		return nil, err
	}
	blockInfo, err := block.New(opts...)
	if err != nil {
		return nil, err
	}
	cpuInfo, err := cpu.New(opts...)
	if err != nil {
		return nil, err
	}
	topologyInfo, err := topology.New(opts...)
	if err != nil {
		return nil, err
	}
	netInfo, err := net.New(opts...)
	if err != nil {
		return nil, err
	}
	gpuInfo, err := gpu.New(opts...)
	if err != nil {
		return nil, err
	}
	chassisInfo, err := chassis.New(opts...)
	if err != nil {
		return nil, err
	}
	biosInfo, err := bios.New(opts...)
	if err != nil {
		return nil, err
	}
	baseboardInfo, err := baseboard.New(opts...)
	if err != nil {
		return nil, err
	}
	productInfo, err := product.New(opts...)
	if err != nil {
		return nil, err
	}
	pciInfo, err := pci.New(opts...)
	if err != nil {
		return nil, err
	}
	return &HostInfo{
		ctx:       ctx,
		CPU:       cpuInfo,
		Memory:    memInfo,
		Block:     blockInfo,
		Topology:  topologyInfo,
		Network:   netInfo,
		GPU:       gpuInfo,
		Chassis:   chassisInfo,
		BIOS:      biosInfo,
		Baseboard: baseboardInfo,
		Product:   productInfo,
		PCI:       pciInfo,
	}, nil
}

// String returns a newline-separated output of the HostInfo's component
// structs' String-ified output
func (info *HostInfo) String() string {
	return fmt.Sprintf(
		"%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n",
		info.Block.String(),
		info.CPU.String(),
		info.GPU.String(),
		info.Memory.String(),
		info.Network.String(),
		info.Topology.String(),
		info.Chassis.String(),
		info.BIOS.String(),
		info.Baseboard.String(),
		info.Product.String(),
		info.PCI.String(),
	)
}

// YAMLString returns a string with the host information formatted as YAML
// under a top-level "host:" key
func (i *HostInfo) YAMLString() string {
	return marshal.SafeYAML(i.ctx, i)
}

// JSONString returns a string with the host information formatted as JSON
// under a top-level "host:" key
func (i *HostInfo) JSONString(indent bool) string {
	return marshal.SafeJSON(i.ctx, i, indent)
}
070701000007C6000041ED000000000000000000000015645E367C00000000000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg    070701000007C7000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/baseboard  070701000007C8000081A4000000000000000000000001645E367C00000804000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/baseboard/baseboard.go //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package baseboard

import (
	"github.com/jaypipes/ghw/pkg/context"
	"github.com/jaypipes/ghw/pkg/marshal"
	"github.com/jaypipes/ghw/pkg/option"
	"github.com/jaypipes/ghw/pkg/util"
)

// Info defines baseboard release information
type Info struct {
	ctx          *context.Context
	AssetTag     string `json:"asset_tag"`
	SerialNumber string `json:"serial_number"`
	Vendor       string `json:"vendor"`
	Version      string `json:"version"`
	Product      string `json:"product"`
}

func (i *Info) String() string {
	vendorStr := ""
	if i.Vendor != "" {
		vendorStr = " vendor=" + i.Vendor
	}
	serialStr := ""
	if i.SerialNumber != "" && i.SerialNumber != util.UNKNOWN {
		serialStr = " serial=" + i.SerialNumber
	}
	versionStr := ""
	if i.Version != "" {
		versionStr = " version=" + i.Version
	}

	productStr := ""
	if i.Product != "" {
		productStr = " product=" + i.Product
	}

	return "baseboard" + util.ConcatStrings(
		vendorStr,
		serialStr,
		versionStr,
		productStr,
	)
}

// New returns a pointer to an Info struct containing information about the
// host's baseboard
func New(opts ...*option.Option) (*Info, error) {
	ctx := context.New(opts...)
	info := &Info{ctx: ctx}
	if err := ctx.Do(info.load); err != nil {
		return nil, err
	}
	return info, nil
}

// simple private struct used to encapsulate baseboard information in a top-level
// "baseboard" YAML/JSON map/object key
type baseboardPrinter struct {
	Info *Info `json:"baseboard"`
}

// YAMLString returns a string with the baseboard information formatted as YAML
// under a top-level "dmi:" key
func (info *Info) YAMLString() string {
	return marshal.SafeYAML(info.ctx, baseboardPrinter{info})
}

// JSONString returns a string with the baseboard information formatted as JSON
// under a top-level "baseboard:" key
func (info *Info) JSONString(indent bool) string {
	return marshal.SafeJSON(info.ctx, baseboardPrinter{info}, indent)
}
070701000007C9000081A4000000000000000000000001645E367C00000206000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/baseboard/baseboard_linux.go   // Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package baseboard

import (
	"github.com/jaypipes/ghw/pkg/linuxdmi"
)

func (i *Info) load() error {
	i.AssetTag = linuxdmi.Item(i.ctx, "board_asset_tag")
	i.SerialNumber = linuxdmi.Item(i.ctx, "board_serial")
	i.Vendor = linuxdmi.Item(i.ctx, "board_vendor")
	i.Version = linuxdmi.Item(i.ctx, "board_version")
	i.Product = linuxdmi.Item(i.ctx, "board_name")

	return nil
}
  070701000007CA000081A4000000000000000000000001645E367C00000179000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/baseboard/baseboard_stub.go    //go:build !linux && !windows
// +build !linux,!windows

// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package baseboard

import (
	"runtime"

	"github.com/pkg/errors"
)

func (i *Info) load() error {
	return errors.New("baseboardFillInfo not implemented on " + runtime.GOOS)
}
   070701000007CB000081A4000000000000000000000001645E367C000003DB000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/baseboard/baseboard_windows.go // Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package baseboard

import (
	"github.com/StackExchange/wmi"
)

const wqlBaseboard = "SELECT Manufacturer, SerialNumber, Tag, Version, Product FROM Win32_BaseBoard"

type win32Baseboard struct {
	Manufacturer *string
	SerialNumber *string
	Tag          *string
	Version      *string
	Product      *string
}

func (i *Info) load() error {
	// Getting data from WMI
	var win32BaseboardDescriptions []win32Baseboard
	if err := wmi.Query(wqlBaseboard, &win32BaseboardDescriptions); err != nil {
		return err
	}
	if len(win32BaseboardDescriptions) > 0 {
		i.AssetTag = *win32BaseboardDescriptions[0].Tag
		i.SerialNumber = *win32BaseboardDescriptions[0].SerialNumber
		i.Vendor = *win32BaseboardDescriptions[0].Manufacturer
		i.Version = *win32BaseboardDescriptions[0].Version
		i.Product = *win32BaseboardDescriptions[0].Product
	}

	return nil
}
 070701000007CC000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/bios   070701000007CD000081A4000000000000000000000001645E367C000006EB000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/bios/bios.go   //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package bios

import (
	"fmt"

	"github.com/jaypipes/ghw/pkg/context"
	"github.com/jaypipes/ghw/pkg/marshal"
	"github.com/jaypipes/ghw/pkg/option"
	"github.com/jaypipes/ghw/pkg/util"
)

// Info defines BIOS release information
type Info struct {
	ctx     *context.Context
	Vendor  string `json:"vendor"`
	Version string `json:"version"`
	Date    string `json:"date"`
}

func (i *Info) String() string {

	vendorStr := ""
	if i.Vendor != "" {
		vendorStr = " vendor=" + i.Vendor
	}
	versionStr := ""
	if i.Version != "" {
		versionStr = " version=" + i.Version
	}
	dateStr := ""
	if i.Date != "" && i.Date != util.UNKNOWN {
		dateStr = " date=" + i.Date
	}

	res := fmt.Sprintf(
		"bios%s%s%s",
		vendorStr,
		versionStr,
		dateStr,
	)
	return res
}

// New returns a pointer to a Info struct containing information
// about the host's BIOS
func New(opts ...*option.Option) (*Info, error) {
	ctx := context.New(opts...)
	info := &Info{ctx: ctx}
	if err := ctx.Do(info.load); err != nil {
		return nil, err
	}
	return info, nil
}

// simple private struct used to encapsulate BIOS information in a top-level
// "bios" YAML/JSON map/object key
type biosPrinter struct {
	Info *Info `json:"bios"`
}

// YAMLString returns a string with the BIOS information formatted as YAML
// under a top-level "dmi:" key
func (info *Info) YAMLString() string {
	return marshal.SafeYAML(info.ctx, biosPrinter{info})
}

// JSONString returns a string with the BIOS information formatted as JSON
// under a top-level "bios:" key
func (info *Info) JSONString(indent bool) string {
	return marshal.SafeJSON(info.ctx, biosPrinter{info}, indent)
}
 070701000007CE000081A4000000000000000000000001645E367C00000189000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/bios/bios_linux.go // Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package bios

import "github.com/jaypipes/ghw/pkg/linuxdmi"

func (i *Info) load() error {
	i.Vendor = linuxdmi.Item(i.ctx, "bios_vendor")
	i.Version = linuxdmi.Item(i.ctx, "bios_version")
	i.Date = linuxdmi.Item(i.ctx, "bios_date")

	return nil
}
   070701000007CF000081A4000000000000000000000001645E367C0000016F000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/bios/bios_stub.go  //go:build !linux && !windows
// +build !linux,!windows

// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package bios

import (
	"runtime"

	"github.com/pkg/errors"
)

func (i *Info) load() error {
	return errors.New("biosFillInfo not implemented on " + runtime.GOOS)
}
 070701000007D0000081A4000000000000000000000001645E367C000002F8000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/bios/bios_windows.go   // Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package bios

import (
	"github.com/StackExchange/wmi"
)

const wqlBIOS = "SELECT InstallDate, Manufacturer, Version FROM CIM_BIOSElement"

type win32BIOS struct {
	InstallDate  *string
	Manufacturer *string
	Version      *string
}

func (i *Info) load() error {
	// Getting data from WMI
	var win32BIOSDescriptions []win32BIOS
	if err := wmi.Query(wqlBIOS, &win32BIOSDescriptions); err != nil {
		return err
	}
	if len(win32BIOSDescriptions) > 0 {
		i.Vendor = *win32BIOSDescriptions[0].Manufacturer
		i.Version = *win32BIOSDescriptions[0].Version
		i.Date = *win32BIOSDescriptions[0].InstallDate
	}
	return nil
}
070701000007D1000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/block  070701000007D2000081A4000000000000000000000001645E367C0000251B000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/block/block.go //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package block

import (
	"encoding/json"
	"fmt"
	"math"
	"strconv"
	"strings"

	"github.com/jaypipes/ghw/pkg/context"
	"github.com/jaypipes/ghw/pkg/marshal"
	"github.com/jaypipes/ghw/pkg/option"
	"github.com/jaypipes/ghw/pkg/unitutil"
	"github.com/jaypipes/ghw/pkg/util"
)

// DriveType describes the general category of drive device
type DriveType int

const (
	DRIVE_TYPE_UNKNOWN DriveType = iota
	DRIVE_TYPE_HDD               // Hard disk drive
	DRIVE_TYPE_FDD               // Floppy disk drive
	DRIVE_TYPE_ODD               // Optical disk drive
	DRIVE_TYPE_SSD               // Solid-state drive
	DRIVE_TYPE_VIRTUAL           // virtual drive i.e. loop devices
)

var (
	driveTypeString = map[DriveType]string{
		DRIVE_TYPE_UNKNOWN: "Unknown",
		DRIVE_TYPE_HDD:     "HDD",
		DRIVE_TYPE_FDD:     "FDD",
		DRIVE_TYPE_ODD:     "ODD",
		DRIVE_TYPE_SSD:     "SSD",
		DRIVE_TYPE_VIRTUAL: "virtual",
	}

	// NOTE(fromani): the keys are all lowercase and do not match
	// the keys in the opposite table `driveTypeString`.
	// This is done because of the choice we made in
	// DriveType::MarshalJSON.
	// We use this table only in UnmarshalJSON, so it should be OK.
	stringDriveType = map[string]DriveType{
		"unknown": DRIVE_TYPE_UNKNOWN,
		"hdd":     DRIVE_TYPE_HDD,
		"fdd":     DRIVE_TYPE_FDD,
		"odd":     DRIVE_TYPE_ODD,
		"ssd":     DRIVE_TYPE_SSD,
		"virtual": DRIVE_TYPE_VIRTUAL,
	}
)

func (dt DriveType) String() string {
	return driveTypeString[dt]
}

// NOTE(jaypipes): since serialized output is as "official" as we're going to
// get, let's lowercase the string output when serializing, in order to
// "normalize" the expected serialized output
func (dt DriveType) MarshalJSON() ([]byte, error) {
	return []byte(strconv.Quote(strings.ToLower(dt.String()))), nil
}

func (dt *DriveType) UnmarshalJSON(b []byte) error {
	var s string
	if err := json.Unmarshal(b, &s); err != nil {
		return err
	}
	key := strings.ToLower(s)
	val, ok := stringDriveType[key]
	if !ok {
		return fmt.Errorf("unknown drive type: %q", key)
	}
	*dt = val
	return nil
}

// StorageController is a category of block storage controller/driver. It
// represents more of the physical hardware interface than the storage
// protocol, which represents more of the software interface.
//
// See discussion on https://github.com/jaypipes/ghw/issues/117
type StorageController int

const (
	STORAGE_CONTROLLER_UNKNOWN StorageController = iota
	STORAGE_CONTROLLER_IDE                       // Integrated Drive Electronics
	STORAGE_CONTROLLER_SCSI                      // Small computer system interface
	STORAGE_CONTROLLER_NVME                      // Non-volatile Memory Express
	STORAGE_CONTROLLER_VIRTIO                    // Virtualized storage controller/driver
	STORAGE_CONTROLLER_MMC                       // Multi-media controller (used for mobile phone storage devices)
	STORAGE_CONTROLLER_LOOP                      // loop device
)

var (
	storageControllerString = map[StorageController]string{
		STORAGE_CONTROLLER_UNKNOWN: "Unknown",
		STORAGE_CONTROLLER_IDE:     "IDE",
		STORAGE_CONTROLLER_SCSI:    "SCSI",
		STORAGE_CONTROLLER_NVME:    "NVMe",
		STORAGE_CONTROLLER_VIRTIO:  "virtio",
		STORAGE_CONTROLLER_MMC:     "MMC",
		STORAGE_CONTROLLER_LOOP:    "loop",
	}

	// NOTE(fromani): the keys are all lowercase and do not match
	// the keys in the opposite table `storageControllerString`.
	// This is done/ because of the choice we made in
	// StorageController::MarshalJSON.
	// We use this table only in UnmarshalJSON, so it should be OK.
	stringStorageController = map[string]StorageController{
		"unknown": STORAGE_CONTROLLER_UNKNOWN,
		"ide":     STORAGE_CONTROLLER_IDE,
		"scsi":    STORAGE_CONTROLLER_SCSI,
		"nvme":    STORAGE_CONTROLLER_NVME,
		"virtio":  STORAGE_CONTROLLER_VIRTIO,
		"mmc":     STORAGE_CONTROLLER_MMC,
		"loop":    STORAGE_CONTROLLER_LOOP,
	}
)

func (sc StorageController) String() string {
	return storageControllerString[sc]
}

func (sc *StorageController) UnmarshalJSON(b []byte) error {
	var s string
	if err := json.Unmarshal(b, &s); err != nil {
		return err
	}
	key := strings.ToLower(s)
	val, ok := stringStorageController[key]
	if !ok {
		return fmt.Errorf("unknown storage controller: %q", key)
	}
	*sc = val
	return nil
}

// NOTE(jaypipes): since serialized output is as "official" as we're going to
// get, let's lowercase the string output when serializing, in order to
// "normalize" the expected serialized output
func (sc StorageController) MarshalJSON() ([]byte, error) {
	return []byte(strconv.Quote(strings.ToLower(sc.String()))), nil
}

// Disk describes a single disk drive on the host system. Disk drives provide
// raw block storage resources.
type Disk struct {
	Name                   string            `json:"name"`
	SizeBytes              uint64            `json:"size_bytes"`
	PhysicalBlockSizeBytes uint64            `json:"physical_block_size_bytes"`
	DriveType              DriveType         `json:"drive_type"`
	IsRemovable            bool              `json:"removable"`
	StorageController      StorageController `json:"storage_controller"`
	BusPath                string            `json:"bus_path"`
	// TODO(jaypipes): Convert this to a TopologyNode struct pointer and then
	// add to serialized output as "numa_node,omitempty"
	NUMANodeID   int          `json:"-"`
	Vendor       string       `json:"vendor"`
	Model        string       `json:"model"`
	SerialNumber string       `json:"serial_number"`
	WWN          string       `json:"wwn"`
	Partitions   []*Partition `json:"partitions"`
	// TODO(jaypipes): Add PCI field for accessing PCI device information
	// PCI *PCIDevice `json:"pci"`
}

// Partition describes a logical division of a Disk.
type Partition struct {
	Disk            *Disk  `json:"-"`
	Name            string `json:"name"`
	Label           string `json:"label"`
	MountPoint      string `json:"mount_point"`
	SizeBytes       uint64 `json:"size_bytes"`
	Type            string `json:"type"`
	IsReadOnly      bool   `json:"read_only"`
	UUID            string `json:"uuid"` // This would be volume UUID on macOS, PartUUID on linux, empty on Windows
	FilesystemLabel string `json:"filesystem_label"`
}

// Info describes all disk drives and partitions in the host system.
type Info struct {
	ctx *context.Context
	// TODO(jaypipes): Deprecate this field and replace with TotalSizeBytes
	TotalPhysicalBytes uint64       `json:"total_size_bytes"`
	Disks              []*Disk      `json:"disks"`
	Partitions         []*Partition `json:"-"`
}

// New returns a pointer to an Info struct that describes the block storage
// resources of the host system.
func New(opts ...*option.Option) (*Info, error) {
	ctx := context.New(opts...)
	info := &Info{ctx: ctx}
	if err := ctx.Do(info.load); err != nil {
		return nil, err
	}
	return info, nil
}

func (i *Info) String() string {
	tpbs := util.UNKNOWN
	if i.TotalPhysicalBytes > 0 {
		tpb := i.TotalPhysicalBytes
		unit, unitStr := unitutil.AmountString(int64(tpb))
		tpb = uint64(math.Ceil(float64(tpb) / float64(unit)))
		tpbs = fmt.Sprintf("%d%s", tpb, unitStr)
	}
	dplural := "disks"
	if len(i.Disks) == 1 {
		dplural = "disk"
	}
	return fmt.Sprintf("block storage (%d %s, %s physical storage)",
		len(i.Disks), dplural, tpbs)
}

func (d *Disk) String() string {
	sizeStr := util.UNKNOWN
	if d.SizeBytes > 0 {
		size := d.SizeBytes
		unit, unitStr := unitutil.AmountString(int64(size))
		size = uint64(math.Ceil(float64(size) / float64(unit)))
		sizeStr = fmt.Sprintf("%d%s", size, unitStr)
	}
	atNode := ""
	if d.NUMANodeID >= 0 {
		atNode = fmt.Sprintf(" (node #%d)", d.NUMANodeID)
	}
	vendor := ""
	if d.Vendor != "" {
		vendor = " vendor=" + d.Vendor
	}
	model := ""
	if d.Model != util.UNKNOWN {
		model = " model=" + d.Model
	}
	serial := ""
	if d.SerialNumber != util.UNKNOWN {
		serial = " serial=" + d.SerialNumber
	}
	wwn := ""
	if d.WWN != util.UNKNOWN {
		wwn = " WWN=" + d.WWN
	}
	removable := ""
	if d.IsRemovable {
		removable = " removable=true"
	}
	return fmt.Sprintf(
		"%s %s (%s) %s [@%s%s]%s",
		d.Name,
		d.DriveType.String(),
		sizeStr,
		d.StorageController.String(),
		d.BusPath,
		atNode,
		util.ConcatStrings(
			vendor,
			model,
			serial,
			wwn,
			removable,
		),
	)
}

func (p *Partition) String() string {
	typeStr := ""
	if p.Type != "" {
		typeStr = fmt.Sprintf("[%s]", p.Type)
	}
	mountStr := ""
	if p.MountPoint != "" {
		mountStr = fmt.Sprintf(" mounted@%s", p.MountPoint)
	}
	sizeStr := util.UNKNOWN
	if p.SizeBytes > 0 {
		size := p.SizeBytes
		unit, unitStr := unitutil.AmountString(int64(size))
		size = uint64(math.Ceil(float64(size) / float64(unit)))
		sizeStr = fmt.Sprintf("%d%s", size, unitStr)
	}
	return fmt.Sprintf(
		"%s (%s) %s%s",
		p.Name,
		sizeStr,
		typeStr,
		mountStr,
	)
}

// simple private struct used to encapsulate block information in a top-level
// "block" YAML/JSON map/object key
type blockPrinter struct {
	Info *Info `json:"block" yaml:"block"`
}

// YAMLString returns a string with the block information formatted as YAML
// under a top-level "block:" key
func (i *Info) YAMLString() string {
	return marshal.SafeYAML(i.ctx, blockPrinter{i})
}

// JSONString returns a string with the block information formatted as JSON
// under a top-level "block:" key
func (i *Info) JSONString(indent bool) string {
	return marshal.SafeJSON(i.ctx, blockPrinter{i}, indent)
}
 070701000007D3000081A4000000000000000000000001645E367C000026AD000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/block/block_darwin.go  // Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package block

import (
	"fmt"
	"os"
	"os/exec"
	"path"
	"strings"

	"github.com/pkg/errors"
	"howett.net/plist"
)

type diskOrPartitionPlistNode struct {
	Content          string
	DeviceIdentifier string
	DiskUUID         string
	VolumeName       string
	VolumeUUID       string
	Size             int64
	MountPoint       string
	Partitions       []diskOrPartitionPlistNode
	APFSVolumes      []diskOrPartitionPlistNode
}

type diskUtilListPlist struct {
	AllDisks              []string
	AllDisksAndPartitions []diskOrPartitionPlistNode
	VolumesFromDisks      []string
	WholeDisks            []string
}

type diskUtilInfoPlist struct {
	AESHardware                                 bool   // true
	Bootable                                    bool   // true
	BooterDeviceIdentifier                      string // disk1s2
	BusProtocol                                 string // PCI-Express
	CanBeMadeBootable                           bool   // false
	CanBeMadeBootableRequiresDestroy            bool   // false
	Content                                     string // some-uuid-foo-bar
	DeviceBlockSize                             int64  // 4096
	DeviceIdentifier                            string // disk1s1
	DeviceNode                                  string // /dev/disk1s1
	DeviceTreePath                              string // IODeviceTree:/PCI0@0/RP17@1B/ANS2@0/AppleANS2Controller
	DiskUUID                                    string // some-uuid-foo-bar
	Ejectable                                   bool   // false
	EjectableMediaAutomaticUnderSoftwareControl bool   // false
	EjectableOnly                               bool   // false
	FilesystemName                              string // APFS
	FilesystemType                              string // apfs
	FilesystemUserVisibleName                   string // APFS
	FreeSpace                                   int64  // 343975677952
	GlobalPermissionsEnabled                    bool   // true
	IOKitSize                                   int64  // 499963174912
	IORegistryEntryName                         string // Macintosh HD
	Internal                                    bool   // true
	MediaName                                   string //
	MediaType                                   string // Generic
	MountPoint                                  string // /
	ParentWholeDisk                             string // disk1
	PartitionMapPartition                       bool   // false
	RAIDMaster                                  bool   // false
	RAIDSlice                                   bool   // false
	RecoveryDeviceIdentifier                    string // disk1s3
	Removable                                   bool   // false
	RemovableMedia                              bool   // false
	RemovableMediaOrExternalDevice              bool   // false
	SMARTStatus                                 string // Verified
	Size                                        int64  // 499963174912
	SolidState                                  bool   // true
	SupportsGlobalPermissionsDisable            bool   // true
	SystemImage                                 bool   // false
	TotalSize                                   int64  // 499963174912
	VolumeAllocationBlockSize                   int64  // 4096
	VolumeName                                  string // Macintosh HD
	VolumeSize                                  int64  // 499963174912
	VolumeUUID                                  string // some-uuid-foo-bar
	WholeDisk                                   bool   // false
	Writable                                    bool   // true
	WritableMedia                               bool   // true
	WritableVolume                              bool   // true
	// also has a SMARTDeviceSpecificKeysMayVaryNotGuaranteed dict with various info
	// NOTE: VolumeUUID sometimes == DiskUUID, but not always. So far Content is always a different UUID.
}

type ioregPlist struct {
	// there's a lot more than just this...
	ModelNumber  string `plist:"Model Number"`
	SerialNumber string `plist:"Serial Number"`
	VendorName   string `plist:"Vendor Name"`
}

func getDiskUtilListPlist() (*diskUtilListPlist, error) {
	out, err := exec.Command("diskutil", "list", "-plist").Output()
	if err != nil {
		return nil, errors.Wrap(err, "diskutil list failed")
	}

	var data diskUtilListPlist
	if _, err := plist.Unmarshal(out, &data); err != nil {
		return nil, errors.Wrap(err, "diskutil list plist unmarshal failed")
	}

	return &data, nil
}

func getDiskUtilInfoPlist(device string) (*diskUtilInfoPlist, error) {
	out, err := exec.Command("diskutil", "info", "-plist", device).Output()
	if err != nil {
		return nil, errors.Wrapf(err, "diskutil info for %q failed", device)
	}

	var data diskUtilInfoPlist
	if _, err := plist.Unmarshal(out, &data); err != nil {
		return nil, errors.Wrapf(err, "diskutil info plist unmarshal for %q failed", device)
	}

	return &data, nil
}

func getIoregPlist(ioDeviceTreePath string) (*ioregPlist, error) {
	name := path.Base(ioDeviceTreePath)

	args := []string{
		"ioreg",
		"-a",      // use XML output
		"-d", "1", // limit device tree output depth to root node
		"-r",       // root device tree at matched node
		"-n", name, // match by name
	}
	out, err := exec.Command(args[0], args[1:]...).Output()
	if err != nil {
		return nil, errors.Wrapf(err, "ioreg query for %q failed", ioDeviceTreePath)
	}
	if out == nil || len(out) == 0 {
		return nil, nil
	}

	var data []ioregPlist
	if _, err := plist.Unmarshal(out, &data); err != nil {
		return nil, errors.Wrapf(err, "ioreg unmarshal for %q failed", ioDeviceTreePath)
	}
	if len(data) != 1 {
		err := errors.Errorf("ioreg unmarshal resulted in %d I/O device tree nodes (expected 1)", len(data))
		return nil, err
	}

	return &data[0], nil
}

func makePartition(disk, s diskOrPartitionPlistNode, isAPFS bool) (*Partition, error) {
	if s.Size < 0 {
		return nil, errors.Errorf("invalid size %q of partition %q", s.Size, s.DeviceIdentifier)
	}

	var partType string
	if isAPFS {
		partType = "APFS Volume"
	} else {
		partType = s.Content
	}

	info, err := getDiskUtilInfoPlist(s.DeviceIdentifier)
	if err != nil {
		return nil, err
	}

	return &Partition{
		Disk:       nil, // filled in later
		Name:       s.DeviceIdentifier,
		Label:      s.VolumeName,
		MountPoint: s.MountPoint,
		SizeBytes:  uint64(s.Size),
		Type:       partType,
		IsReadOnly: !info.WritableVolume,
		UUID:       s.VolumeUUID,
	}, nil
}

// driveTypeFromPlist looks at the supplied property list struct and attempts to
// determine the disk type
func driveTypeFromPlist(infoPlist *diskUtilInfoPlist) DriveType {
	dt := DRIVE_TYPE_HDD
	if infoPlist.SolidState {
		dt = DRIVE_TYPE_SSD
	}
	// TODO(jaypipes): Figure out how to determine floppy and/or CD/optical
	// drive type on Mac
	return dt
}

// storageControllerFromPlist looks at the supplied property list struct and
// attempts to determine the storage controller in use for the device
func storageControllerFromPlist(infoPlist *diskUtilInfoPlist) StorageController {
	sc := STORAGE_CONTROLLER_SCSI
	if strings.HasSuffix(infoPlist.DeviceTreePath, "IONVMeController") {
		sc = STORAGE_CONTROLLER_NVME
	}
	// TODO(jaypipes): I don't know if Mac even supports IDE controllers and
	// the "virtio" controller is libvirt-specific
	return sc
}

func (info *Info) load() error {
	if !info.ctx.EnableTools {
		return fmt.Errorf("EnableTools=false on darwin disables block support entirely.")
	}

	listPlist, err := getDiskUtilListPlist()
	if err != nil {
		fmt.Fprintln(os.Stderr, err.Error())
		return err
	}

	info.TotalPhysicalBytes = 0
	info.Disks = make([]*Disk, 0, len(listPlist.AllDisksAndPartitions))
	info.Partitions = []*Partition{}

	for _, disk := range listPlist.AllDisksAndPartitions {
		if disk.Size < 0 {
			return errors.Errorf("invalid size %q of disk %q", disk.Size, disk.DeviceIdentifier)
		}

		infoPlist, err := getDiskUtilInfoPlist(disk.DeviceIdentifier)
		if err != nil {
			return err
		}
		if infoPlist.DeviceBlockSize < 0 {
			return errors.Errorf("invalid block size %q of disk %q", infoPlist.DeviceBlockSize, disk.DeviceIdentifier)
		}

		busPath := strings.TrimPrefix(infoPlist.DeviceTreePath, "IODeviceTree:")

		ioregPlist, err := getIoregPlist(infoPlist.DeviceTreePath)
		if err != nil {
			return err
		}
		if ioregPlist == nil {
			continue
		}

		// The NUMA node & WWN don't seem to be reported by any tools available by default in macOS.
		diskReport := &Disk{
			Name:                   disk.DeviceIdentifier,
			SizeBytes:              uint64(disk.Size),
			PhysicalBlockSizeBytes: uint64(infoPlist.DeviceBlockSize),
			DriveType:              driveTypeFromPlist(infoPlist),
			IsRemovable:            infoPlist.Removable,
			StorageController:      storageControllerFromPlist(infoPlist),
			BusPath:                busPath,
			NUMANodeID:             -1,
			Vendor:                 ioregPlist.VendorName,
			Model:                  ioregPlist.ModelNumber,
			SerialNumber:           ioregPlist.SerialNumber,
			WWN:                    "",
			Partitions:             make([]*Partition, 0, len(disk.Partitions)+len(disk.APFSVolumes)),
		}

		for _, partition := range disk.Partitions {
			part, err := makePartition(disk, partition, false)
			if err != nil {
				return err
			}
			part.Disk = diskReport
			diskReport.Partitions = append(diskReport.Partitions, part)
		}
		for _, volume := range disk.APFSVolumes {
			part, err := makePartition(disk, volume, true)
			if err != nil {
				return err
			}
			part.Disk = diskReport
			diskReport.Partitions = append(diskReport.Partitions, part)
		}

		info.TotalPhysicalBytes += uint64(disk.Size)
		info.Disks = append(info.Disks, diskReport)
		info.Partitions = append(info.Partitions, diskReport.Partitions...)
	}

	return nil
}
   070701000007D4000081A4000000000000000000000001645E367C000037E4000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/block/block_linux.go   // Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package block

import (
	"bufio"
	"io"
	"io/ioutil"
	"os"
	"path/filepath"
	"strconv"
	"strings"

	"github.com/jaypipes/ghw/pkg/context"
	"github.com/jaypipes/ghw/pkg/linuxpath"
	"github.com/jaypipes/ghw/pkg/util"
)

const (
	sectorSize = 512
)

func (i *Info) load() error {
	paths := linuxpath.New(i.ctx)
	i.Disks = disks(i.ctx, paths)
	var tpb uint64
	for _, d := range i.Disks {
		tpb += d.SizeBytes
	}
	i.TotalPhysicalBytes = tpb
	return nil
}

func diskPhysicalBlockSizeBytes(paths *linuxpath.Paths, disk string) uint64 {
	// We can find the sector size in Linux by looking at the
	// /sys/block/$DEVICE/queue/physical_block_size file in sysfs
	path := filepath.Join(paths.SysBlock, disk, "queue", "physical_block_size")
	contents, err := ioutil.ReadFile(path)
	if err != nil {
		return 0
	}
	size, err := strconv.ParseUint(strings.TrimSpace(string(contents)), 10, 64)
	if err != nil {
		return 0
	}
	return size
}

func diskSizeBytes(paths *linuxpath.Paths, disk string) uint64 {
	// We can find the number of 512-byte sectors by examining the contents of
	// /sys/block/$DEVICE/size and calculate the physical bytes accordingly.
	path := filepath.Join(paths.SysBlock, disk, "size")
	contents, err := ioutil.ReadFile(path)
	if err != nil {
		return 0
	}
	size, err := strconv.ParseUint(strings.TrimSpace(string(contents)), 10, 64)
	if err != nil {
		return 0
	}
	return size * sectorSize
}

func diskNUMANodeID(paths *linuxpath.Paths, disk string) int {
	link, err := os.Readlink(filepath.Join(paths.SysBlock, disk))
	if err != nil {
		return -1
	}
	for partial := link; strings.HasPrefix(partial, "../devices/"); partial = filepath.Base(partial) {
		if nodeContents, err := ioutil.ReadFile(filepath.Join(paths.SysBlock, partial, "numa_node")); err != nil {
			if nodeInt, err := strconv.Atoi(string(nodeContents)); err != nil {
				return nodeInt
			}
		}
	}
	return -1
}

func diskVendor(paths *linuxpath.Paths, disk string) string {
	// In Linux, the vendor for a disk device is found in the
	// /sys/block/$DEVICE/device/vendor file in sysfs
	path := filepath.Join(paths.SysBlock, disk, "device", "vendor")
	contents, err := ioutil.ReadFile(path)
	if err != nil {
		return util.UNKNOWN
	}
	return strings.TrimSpace(string(contents))
}

// udevInfoDisk gets the udev info for a disk
func udevInfoDisk(paths *linuxpath.Paths, disk string) (map[string]string, error) {
	// Get device major:minor numbers
	devNo, err := ioutil.ReadFile(filepath.Join(paths.SysBlock, disk, "dev"))
	if err != nil {
		return nil, err
	}
	return udevInfo(paths, string(devNo))
}

// udevInfoPartition gets the udev info for a partition
func udevInfoPartition(paths *linuxpath.Paths, disk string, partition string) (map[string]string, error) {
	// Get device major:minor numbers
	devNo, err := ioutil.ReadFile(filepath.Join(paths.SysBlock, disk, partition, "dev"))
	if err != nil {
		return nil, err
	}
	return udevInfo(paths, string(devNo))
}

func udevInfo(paths *linuxpath.Paths, devNo string) (map[string]string, error) {
	// Look up block device in udev runtime database
	udevID := "b" + strings.TrimSpace(devNo)
	udevBytes, err := ioutil.ReadFile(filepath.Join(paths.RunUdevData, udevID))
	if err != nil {
		return nil, err
	}

	udevInfo := make(map[string]string)
	for _, udevLine := range strings.Split(string(udevBytes), "\n") {
		if strings.HasPrefix(udevLine, "E:") {
			if s := strings.SplitN(udevLine[2:], "=", 2); len(s) == 2 {
				udevInfo[s[0]] = s[1]
			}
		}
	}
	return udevInfo, nil
}

func diskModel(paths *linuxpath.Paths, disk string) string {
	info, err := udevInfoDisk(paths, disk)
	if err != nil {
		return util.UNKNOWN
	}

	if model, ok := info["ID_MODEL"]; ok {
		return model
	}
	return util.UNKNOWN
}

func diskSerialNumber(paths *linuxpath.Paths, disk string) string {
	info, err := udevInfoDisk(paths, disk)
	if err != nil {
		return util.UNKNOWN
	}

	// There are two serial number keys, ID_SERIAL and ID_SERIAL_SHORT The
	// non-_SHORT version often duplicates vendor information collected
	// elsewhere, so use _SHORT and fall back to ID_SERIAL if missing...
	if serial, ok := info["ID_SERIAL_SHORT"]; ok {
		return serial
	}
	if serial, ok := info["ID_SERIAL"]; ok {
		return serial
	}
	return util.UNKNOWN
}

func diskBusPath(paths *linuxpath.Paths, disk string) string {
	info, err := udevInfoDisk(paths, disk)
	if err != nil {
		return util.UNKNOWN
	}

	// There are two path keys, ID_PATH and ID_PATH_TAG.
	// The difference seems to be _TAG has funky characters converted to underscores.
	if path, ok := info["ID_PATH"]; ok {
		return path
	}
	return util.UNKNOWN
}

func diskWWN(paths *linuxpath.Paths, disk string) string {
	info, err := udevInfoDisk(paths, disk)
	if err != nil {
		return util.UNKNOWN
	}

	// Trying ID_WWN_WITH_EXTENSION and falling back to ID_WWN is the same logic lsblk uses
	if wwn, ok := info["ID_WWN_WITH_EXTENSION"]; ok {
		return wwn
	}
	if wwn, ok := info["ID_WWN"]; ok {
		return wwn
	}
	return util.UNKNOWN
}

// diskPartitions takes the name of a disk (note: *not* the path of the disk,
// but just the name. In other words, "sda", not "/dev/sda" and "nvme0n1" not
// "/dev/nvme0n1") and returns a slice of pointers to Partition structs
// representing the partitions in that disk
func diskPartitions(ctx *context.Context, paths *linuxpath.Paths, disk string) []*Partition {
	out := make([]*Partition, 0)
	path := filepath.Join(paths.SysBlock, disk)
	files, err := ioutil.ReadDir(path)
	if err != nil {
		ctx.Warn("failed to read disk partitions: %s\n", err)
		return out
	}
	for _, file := range files {
		fname := file.Name()
		if !strings.HasPrefix(fname, disk) {
			continue
		}
		size := partitionSizeBytes(paths, disk, fname)
		mp, pt, ro := partitionInfo(paths, fname)
		du := diskPartUUID(paths, disk, fname)
		label := diskPartLabel(paths, disk, fname)
		if pt == "" {
			pt = diskPartTypeUdev(paths, disk, fname)
		}
		fsLabel := diskFSLabel(paths, disk, fname)
		p := &Partition{
			Name:            fname,
			SizeBytes:       size,
			MountPoint:      mp,
			Type:            pt,
			IsReadOnly:      ro,
			UUID:            du,
			Label:           label,
			FilesystemLabel: fsLabel,
		}
		out = append(out, p)
	}
	return out
}

func diskFSLabel(paths *linuxpath.Paths, disk string, partition string) string {
	info, err := udevInfoPartition(paths, disk, partition)
	if err != nil {
		return util.UNKNOWN
	}

	if label, ok := info["ID_FS_LABEL"]; ok {
		return label
	}
	return util.UNKNOWN
}

func diskPartLabel(paths *linuxpath.Paths, disk string, partition string) string {
	info, err := udevInfoPartition(paths, disk, partition)
	if err != nil {
		return util.UNKNOWN
	}

	if label, ok := info["ID_PART_ENTRY_NAME"]; ok {
		return label
	}
	return util.UNKNOWN
}

// diskPartTypeUdev gets the partition type from the udev database directly and its only used as fallback when
// the partition is not mounted, so we cannot get the type from paths.ProcMounts from the partitionInfo function
func diskPartTypeUdev(paths *linuxpath.Paths, disk string, partition string) string {
	info, err := udevInfoPartition(paths, disk, partition)
	if err != nil {
		return util.UNKNOWN
	}

	if pType, ok := info["ID_FS_TYPE"]; ok {
		return pType
	}
	return util.UNKNOWN
}

func diskPartUUID(paths *linuxpath.Paths, disk string, partition string) string {
	info, err := udevInfoPartition(paths, disk, partition)
	if err != nil {
		return util.UNKNOWN
	}

	if pType, ok := info["ID_PART_ENTRY_UUID"]; ok {
		return pType
	}
	return util.UNKNOWN
}

func diskIsRemovable(paths *linuxpath.Paths, disk string) bool {
	path := filepath.Join(paths.SysBlock, disk, "removable")
	contents, err := ioutil.ReadFile(path)
	if err != nil {
		return false
	}
	removable := strings.TrimSpace(string(contents))
	return removable == "1"
}

func disks(ctx *context.Context, paths *linuxpath.Paths) []*Disk {
	// In Linux, we could use the fdisk, lshw or blockdev commands to list disk
	// information, however all of these utilities require root privileges to
	// run. We can get all of this information by examining the /sys/block
	// and /sys/class/block files
	disks := make([]*Disk, 0)
	files, err := ioutil.ReadDir(paths.SysBlock)
	if err != nil {
		return nil
	}
	for _, file := range files {
		dname := file.Name()

		driveType, storageController := diskTypes(dname)
		// TODO(jaypipes): Move this into diskTypes() once abstracting
		// diskIsRotational for ease of unit testing
		if !diskIsRotational(ctx, paths, dname) {
			driveType = DRIVE_TYPE_SSD
		}
		size := diskSizeBytes(paths, dname)
		pbs := diskPhysicalBlockSizeBytes(paths, dname)
		busPath := diskBusPath(paths, dname)
		node := diskNUMANodeID(paths, dname)
		vendor := diskVendor(paths, dname)
		model := diskModel(paths, dname)
		serialNo := diskSerialNumber(paths, dname)
		wwn := diskWWN(paths, dname)
		removable := diskIsRemovable(paths, dname)

		if storageController == STORAGE_CONTROLLER_LOOP && size == 0 {
			// We don't care about unused loop devices...
			continue
		}
		d := &Disk{
			Name:                   dname,
			SizeBytes:              size,
			PhysicalBlockSizeBytes: pbs,
			DriveType:              driveType,
			IsRemovable:            removable,
			StorageController:      storageController,
			BusPath:                busPath,
			NUMANodeID:             node,
			Vendor:                 vendor,
			Model:                  model,
			SerialNumber:           serialNo,
			WWN:                    wwn,
		}

		parts := diskPartitions(ctx, paths, dname)
		// Map this Disk object into the Partition...
		for _, part := range parts {
			part.Disk = d
		}
		d.Partitions = parts

		disks = append(disks, d)
	}

	return disks
}

// diskTypes returns the drive type, storage controller and bus type of a disk
func diskTypes(dname string) (
	DriveType,
	StorageController,
) {
	// The conditionals below which set the controller and drive type are
	// based on information listed here:
	// https://en.wikipedia.org/wiki/Device_file
	driveType := DRIVE_TYPE_UNKNOWN
	storageController := STORAGE_CONTROLLER_UNKNOWN
	if strings.HasPrefix(dname, "fd") {
		driveType = DRIVE_TYPE_FDD
	} else if strings.HasPrefix(dname, "sd") {
		driveType = DRIVE_TYPE_HDD
		storageController = STORAGE_CONTROLLER_SCSI
	} else if strings.HasPrefix(dname, "hd") {
		driveType = DRIVE_TYPE_HDD
		storageController = STORAGE_CONTROLLER_IDE
	} else if strings.HasPrefix(dname, "vd") {
		driveType = DRIVE_TYPE_HDD
		storageController = STORAGE_CONTROLLER_VIRTIO
	} else if strings.HasPrefix(dname, "nvme") {
		driveType = DRIVE_TYPE_SSD
		storageController = STORAGE_CONTROLLER_NVME
	} else if strings.HasPrefix(dname, "sr") {
		driveType = DRIVE_TYPE_ODD
		storageController = STORAGE_CONTROLLER_SCSI
	} else if strings.HasPrefix(dname, "xvd") {
		driveType = DRIVE_TYPE_HDD
		storageController = STORAGE_CONTROLLER_SCSI
	} else if strings.HasPrefix(dname, "mmc") {
		driveType = DRIVE_TYPE_SSD
		storageController = STORAGE_CONTROLLER_MMC
	} else if strings.HasPrefix(dname, "loop") {
		driveType = DRIVE_TYPE_VIRTUAL
		storageController = STORAGE_CONTROLLER_LOOP
	}

	return driveType, storageController
}

func diskIsRotational(ctx *context.Context, paths *linuxpath.Paths, devName string) bool {
	path := filepath.Join(paths.SysBlock, devName, "queue", "rotational")
	contents := util.SafeIntFromFile(ctx, path)
	return contents == 1
}

// partitionSizeBytes returns the size in bytes of the partition given a disk
// name and a partition name. Note: disk name and partition name do *not*
// contain any leading "/dev" parts. In other words, they are *names*, not
// paths.
func partitionSizeBytes(paths *linuxpath.Paths, disk string, part string) uint64 {
	path := filepath.Join(paths.SysBlock, disk, part, "size")
	contents, err := ioutil.ReadFile(path)
	if err != nil {
		return 0
	}
	size, err := strconv.ParseUint(strings.TrimSpace(string(contents)), 10, 64)
	if err != nil {
		return 0
	}
	return size * sectorSize
}

// Given a full or short partition name, returns the mount point, the type of
// the partition and whether it's readonly
func partitionInfo(paths *linuxpath.Paths, part string) (string, string, bool) {
	// Allow calling PartitionInfo with either the full partition name
	// "/dev/sda1" or just "sda1"
	if !strings.HasPrefix(part, "/dev") {
		part = "/dev/" + part
	}

	// mount entries for mounted partitions look like this:
	// /dev/sda6 / ext4 rw,relatime,errors=remount-ro,data=ordered 0 0
	var r io.ReadCloser
	r, err := os.Open(paths.ProcMounts)
	if err != nil {
		return "", "", true
	}
	defer util.SafeClose(r)

	scanner := bufio.NewScanner(r)
	for scanner.Scan() {
		line := scanner.Text()
		entry := parseMountEntry(line)
		if entry == nil || entry.Partition != part {
			continue
		}
		ro := true
		for _, opt := range entry.Options {
			if opt == "rw" {
				ro = false
				break
			}
		}

		return entry.Mountpoint, entry.FilesystemType, ro
	}
	return "", "", true
}

type mountEntry struct {
	Partition      string
	Mountpoint     string
	FilesystemType string
	Options        []string
}

func parseMountEntry(line string) *mountEntry {
	// mount entries for mounted partitions look like this:
	// /dev/sda6 / ext4 rw,relatime,errors=remount-ro,data=ordered 0 0
	if line[0] != '/' {
		return nil
	}
	fields := strings.Fields(line)

	if len(fields) < 4 {
		return nil
	}

	// We do some special parsing of the mountpoint, which may contain space,
	// tab and newline characters, encoded into the mount entry line using their
	// octal-to-string representations. From the GNU mtab man pages:
	//
	//   "Therefore these characters are encoded in the files and the getmntent
	//   function takes care of the decoding while reading the entries back in.
	//   '\040' is used to encode a space character, '\011' to encode a tab
	//   character, '\012' to encode a newline character, and '\\' to encode a
	//   backslash."
	mp := fields[1]
	r := strings.NewReplacer(
		"\\011", "\t", "\\012", "\n", "\\040", " ", "\\\\", "\\",
	)
	mp = r.Replace(mp)

	res := &mountEntry{
		Partition:      fields[0],
		Mountpoint:     mp,
		FilesystemType: fields[2],
	}
	opts := strings.Split(fields[3], ",")
	res.Options = opts
	return res
}
070701000007D5000081A4000000000000000000000001645E367C00000184000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/block/block_stub.go    //go:build !linux && !darwin && !windows
// +build !linux,!darwin,!windows

// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package block

import (
	"runtime"

	"github.com/pkg/errors"
)

func (i *Info) load() error {
	return errors.New("blockFillInfo not implemented on " + runtime.GOOS)
}
070701000007D6000081A4000000000000000000000001645E367C00001CC3000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/block/block_windows.go // Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package block

import (
	"strings"

	"github.com/StackExchange/wmi"

	"github.com/jaypipes/ghw/pkg/util"
)

const wqlDiskDrive = "SELECT Caption, CreationClassName, DefaultBlockSize, Description, DeviceID, Index, InterfaceType, Manufacturer, MediaType, Model, Name, Partitions, SerialNumber, Size, TotalCylinders, TotalHeads, TotalSectors, TotalTracks, TracksPerCylinder FROM Win32_DiskDrive"

type win32DiskDrive struct {
	Caption           *string
	CreationClassName *string
	DefaultBlockSize  *uint64
	Description       *string
	DeviceID          *string
	Index             *uint32 // Used to link with partition
	InterfaceType     *string
	Manufacturer      *string
	MediaType         *string
	Model             *string
	Name              *string
	Partitions        *int32
	SerialNumber      *string
	Size              *uint64
	TotalCylinders    *int64
	TotalHeads        *int32
	TotalSectors      *int64
	TotalTracks       *int64
	TracksPerCylinder *int32
}

const wqlDiskPartition = "SELECT Access, BlockSize, Caption, CreationClassName, Description, DeviceID, DiskIndex, Index, Name, Size, SystemName, Type FROM Win32_DiskPartition"

type win32DiskPartition struct {
	Access            *uint16
	BlockSize         *uint64
	Caption           *string
	CreationClassName *string
	Description       *string
	DeviceID          *string
	DiskIndex         *uint32 // Used to link with Disk Drive
	Index             *uint32
	Name              *string
	Size              *int64
	SystemName        *string
	Type              *string
}

const wqlLogicalDiskToPartition = "SELECT Antecedent, Dependent FROM Win32_LogicalDiskToPartition"

type win32LogicalDiskToPartition struct {
	Antecedent *string
	Dependent  *string
}

const wqlLogicalDisk = "SELECT Caption, CreationClassName, Description, DeviceID, FileSystem, FreeSpace, Name, Size, SystemName FROM Win32_LogicalDisk"

type win32LogicalDisk struct {
	Caption           *string
	CreationClassName *string
	Description       *string
	DeviceID          *string
	FileSystem        *string
	FreeSpace         *uint64
	Name              *string
	Size              *uint64
	SystemName        *string
}

func (i *Info) load() error {
	win32DiskDriveDescriptions, err := getDiskDrives()
	if err != nil {
		return err
	}

	win32DiskPartitionDescriptions, err := getDiskPartitions()
	if err != nil {
		return err
	}

	win32LogicalDiskToPartitionDescriptions, err := getLogicalDisksToPartitions()
	if err != nil {
		return err
	}

	win32LogicalDiskDescriptions, err := getLogicalDisks()
	if err != nil {
		return err
	}

	// Converting into standard structures
	disks := make([]*Disk, 0)
	for _, diskdrive := range win32DiskDriveDescriptions {
		disk := &Disk{
			Name:                   strings.TrimSpace(*diskdrive.DeviceID),
			SizeBytes:              *diskdrive.Size,
			PhysicalBlockSizeBytes: *diskdrive.DefaultBlockSize,
			DriveType:              toDriveType(*diskdrive.MediaType, *diskdrive.Caption),
			StorageController:      toStorageController(*diskdrive.InterfaceType),
			BusPath:                util.UNKNOWN, // TODO: add information
			NUMANodeID:             -1,
			Vendor:                 strings.TrimSpace(*diskdrive.Manufacturer),
			Model:                  strings.TrimSpace(*diskdrive.Caption),
			SerialNumber:           strings.TrimSpace(*diskdrive.SerialNumber),
			WWN:                    util.UNKNOWN, // TODO: add information
			Partitions:             make([]*Partition, 0),
		}
		for _, diskpartition := range win32DiskPartitionDescriptions {
			// Finding disk partition linked to current disk drive
			if diskdrive.Index == diskpartition.DiskIndex {
				disk.PhysicalBlockSizeBytes = *diskpartition.BlockSize
				// Finding logical partition linked to current disk partition
				for _, logicaldisk := range win32LogicalDiskDescriptions {
					for _, logicaldisktodiskpartition := range win32LogicalDiskToPartitionDescriptions {
						var desiredAntecedent = "\\\\" + *diskpartition.SystemName + "\\root\\cimv2:" + *diskpartition.CreationClassName + ".DeviceID=\"" + *diskpartition.DeviceID + "\""
						var desiredDependent = "\\\\" + *logicaldisk.SystemName + "\\root\\cimv2:" + *logicaldisk.CreationClassName + ".DeviceID=\"" + *logicaldisk.DeviceID + "\""
						if *logicaldisktodiskpartition.Antecedent == desiredAntecedent && *logicaldisktodiskpartition.Dependent == desiredDependent {
							// Appending Partition
							p := &Partition{
								Name:       strings.TrimSpace(*logicaldisk.Caption),
								Label:      strings.TrimSpace(*logicaldisk.Caption),
								SizeBytes:  *logicaldisk.Size,
								MountPoint: *logicaldisk.DeviceID,
								Type:       *diskpartition.Type,
								IsReadOnly: toReadOnly(*diskpartition.Access),
								UUID:       "",
							}
							disk.Partitions = append(disk.Partitions, p)
							break
						}
					}
				}
			}
		}
		disks = append(disks, disk)
	}

	i.Disks = disks
	var tpb uint64
	for _, d := range i.Disks {
		tpb += d.SizeBytes
	}
	i.TotalPhysicalBytes = tpb
	return nil
}

func getDiskDrives() ([]win32DiskDrive, error) {
	// Getting disks drives data from WMI
	var win3232DiskDriveDescriptions []win32DiskDrive
	if err := wmi.Query(wqlDiskDrive, &win3232DiskDriveDescriptions); err != nil {
		return nil, err
	}
	return win3232DiskDriveDescriptions, nil
}

func getDiskPartitions() ([]win32DiskPartition, error) {
	// Getting disk partitions from WMI
	var win32DiskPartitionDescriptions []win32DiskPartition
	if err := wmi.Query(wqlDiskPartition, &win32DiskPartitionDescriptions); err != nil {
		return nil, err
	}
	return win32DiskPartitionDescriptions, nil
}

func getLogicalDisksToPartitions() ([]win32LogicalDiskToPartition, error) {
	// Getting links between logical disks and partitions from WMI
	var win32LogicalDiskToPartitionDescriptions []win32LogicalDiskToPartition
	if err := wmi.Query(wqlLogicalDiskToPartition, &win32LogicalDiskToPartitionDescriptions); err != nil {
		return nil, err
	}
	return win32LogicalDiskToPartitionDescriptions, nil
}

func getLogicalDisks() ([]win32LogicalDisk, error) {
	// Getting logical disks from WMI
	var win32LogicalDiskDescriptions []win32LogicalDisk
	if err := wmi.Query(wqlLogicalDisk, &win32LogicalDiskDescriptions); err != nil {
		return nil, err
	}
	return win32LogicalDiskDescriptions, nil
}

func toDriveType(mediaType string, caption string) DriveType {
	mediaType = strings.ToLower(mediaType)
	caption = strings.ToLower(caption)
	if strings.Contains(mediaType, "fixed") || strings.Contains(mediaType, "ssd") || strings.Contains(caption, "ssd") {
		return DRIVE_TYPE_SSD
	} else if strings.ContainsAny(mediaType, "hdd") {
		return DRIVE_TYPE_HDD
	}
	return DRIVE_TYPE_UNKNOWN
}

// TODO: improve
func toStorageController(interfaceType string) StorageController {
	var storageController StorageController
	switch interfaceType {
	case "SCSI":
		storageController = STORAGE_CONTROLLER_SCSI
	case "IDE":
		storageController = STORAGE_CONTROLLER_IDE
	default:
		storageController = STORAGE_CONTROLLER_UNKNOWN
	}
	return storageController
}

// TODO: improve
func toReadOnly(access uint16) bool {
	// See Access property from: https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-diskpartition
	return access == 0x1
}
 070701000007D7000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/chassis    070701000007D8000081A4000000000000000000000001645E367C00000B65000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/chassis/chassis.go //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package chassis

import (
	"github.com/jaypipes/ghw/pkg/context"
	"github.com/jaypipes/ghw/pkg/marshal"
	"github.com/jaypipes/ghw/pkg/option"
	"github.com/jaypipes/ghw/pkg/util"
)

var (
	chassisTypeDescriptions = map[string]string{
		"1":  "Other",
		"2":  "Unknown",
		"3":  "Desktop",
		"4":  "Low profile desktop",
		"5":  "Pizza box",
		"6":  "Mini tower",
		"7":  "Tower",
		"8":  "Portable",
		"9":  "Laptop",
		"10": "Notebook",
		"11": "Hand held",
		"12": "Docking station",
		"13": "All in one",
		"14": "Sub notebook",
		"15": "Space-saving",
		"16": "Lunch box",
		"17": "Main server chassis",
		"18": "Expansion chassis",
		"19": "SubChassis",
		"20": "Bus Expansion chassis",
		"21": "Peripheral chassis",
		"22": "RAID chassis",
		"23": "Rack mount chassis",
		"24": "Sealed-case PC",
		"25": "Multi-system chassis",
		"26": "Compact PCI",
		"27": "Advanced TCA",
		"28": "Blade",
		"29": "Blade enclosure",
		"30": "Tablet",
		"31": "Convertible",
		"32": "Detachable",
		"33": "IoT gateway",
		"34": "Embedded PC",
		"35": "Mini PC",
		"36": "Stick PC",
	}
)

// Info defines chassis release information
type Info struct {
	ctx             *context.Context
	AssetTag        string `json:"asset_tag"`
	SerialNumber    string `json:"serial_number"`
	Type            string `json:"type"`
	TypeDescription string `json:"type_description"`
	Vendor          string `json:"vendor"`
	Version         string `json:"version"`
}

func (i *Info) String() string {
	vendorStr := ""
	if i.Vendor != "" {
		vendorStr = " vendor=" + i.Vendor
	}
	serialStr := ""
	if i.SerialNumber != "" && i.SerialNumber != util.UNKNOWN {
		serialStr = " serial=" + i.SerialNumber
	}
	versionStr := ""
	if i.Version != "" {
		versionStr = " version=" + i.Version
	}

	return "chassis type=" + util.ConcatStrings(
		i.TypeDescription,
		vendorStr,
		serialStr,
		versionStr,
	)
}

// New returns a pointer to a Info struct containing information
// about the host's chassis
func New(opts ...*option.Option) (*Info, error) {
	ctx := context.New(opts...)
	info := &Info{ctx: ctx}
	if err := ctx.Do(info.load); err != nil {
		return nil, err
	}
	return info, nil
}

// simple private struct used to encapsulate chassis information in a top-level
// "chassis" YAML/JSON map/object key
type chassisPrinter struct {
	Info *Info `json:"chassis"`
}

// YAMLString returns a string with the chassis information formatted as YAML
// under a top-level "dmi:" key
func (info *Info) YAMLString() string {
	return marshal.SafeYAML(info.ctx, chassisPrinter{info})
}

// JSONString returns a string with the chassis information formatted as JSON
// under a top-level "chassis:" key
func (info *Info) JSONString(indent bool) string {
	return marshal.SafeJSON(info.ctx, chassisPrinter{info}, indent)
}
   070701000007D9000081A4000000000000000000000001645E367C000002AB000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/chassis/chassis_linux.go   // Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package chassis

import (
	"github.com/jaypipes/ghw/pkg/linuxdmi"
	"github.com/jaypipes/ghw/pkg/util"
)

func (i *Info) load() error {
	i.AssetTag = linuxdmi.Item(i.ctx, "chassis_asset_tag")
	i.SerialNumber = linuxdmi.Item(i.ctx, "chassis_serial")
	i.Type = linuxdmi.Item(i.ctx, "chassis_type")
	typeDesc, found := chassisTypeDescriptions[i.Type]
	if !found {
		typeDesc = util.UNKNOWN
	}
	i.TypeDescription = typeDesc
	i.Vendor = linuxdmi.Item(i.ctx, "chassis_vendor")
	i.Version = linuxdmi.Item(i.ctx, "chassis_version")

	return nil
}
 070701000007DA000081A4000000000000000000000001645E367C00000175000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/chassis/chassis_stub.go    //go:build !linux && !windows
// +build !linux,!windows

// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package chassis

import (
	"runtime"

	"github.com/pkg/errors"
)

func (i *Info) load() error {
	return errors.New("chassisFillInfo not implemented on " + runtime.GOOS)
}
   070701000007DB000081A4000000000000000000000001645E367C000004B1000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/chassis/chassis_windows.go // Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package chassis

import (
	"github.com/StackExchange/wmi"

	"github.com/jaypipes/ghw/pkg/util"
)

const wqlChassis = "SELECT Caption, Description, Name, Manufacturer, Model, SerialNumber, Tag, TypeDescriptions, Version FROM CIM_Chassis"

type win32Chassis struct {
	Caption          *string
	Description      *string
	Name             *string
	Manufacturer     *string
	Model            *string
	SerialNumber     *string
	Tag              *string
	TypeDescriptions []string
	Version          *string
}

func (i *Info) load() error {
	// Getting data from WMI
	var win32ChassisDescriptions []win32Chassis
	if err := wmi.Query(wqlChassis, &win32ChassisDescriptions); err != nil {
		return err
	}
	if len(win32ChassisDescriptions) > 0 {
		i.AssetTag = *win32ChassisDescriptions[0].Tag
		i.SerialNumber = *win32ChassisDescriptions[0].SerialNumber
		i.Type = util.UNKNOWN // TODO:
		i.TypeDescription = *win32ChassisDescriptions[0].Model
		i.Vendor = *win32ChassisDescriptions[0].Manufacturer
		i.Version = *win32ChassisDescriptions[0].Version
	}
	return nil
}
   070701000007DC000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/context    070701000007DD000081A4000000000000000000000001645E367C000013B6000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/context/context.go //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package context

import (
	"fmt"

	"github.com/jaypipes/ghw/pkg/option"
	"github.com/jaypipes/ghw/pkg/snapshot"
)

// Context contains the merged set of configuration switches that act as an
// execution context when calling internal discovery methods
type Context struct {
	Chroot               string
	EnableTools          bool
	SnapshotPath         string
	SnapshotRoot         string
	SnapshotExclusive    bool
	PathOverrides        option.PathOverrides
	snapshotUnpackedPath string
	alert                option.Alerter
	err                  error
}

// WithContext returns an option.Option that contains a pre-existing Context
// struct. This is useful for some internal code that sets up snapshots.
func WithContext(ctx *Context) *option.Option {
	return &option.Option{
		Context: ctx,
	}
}

// Exists returns true if the supplied (merged) Option already contains
// a context.
//
// TODO(jaypipes): We can get rid of this when we combine the option and
// context packages, which will make it easier to detect the presence of a
// pre-setup Context.
func Exists(opt *option.Option) bool {
	return opt != nil && opt.Context != nil
}

// New returns a Context struct pointer that has had various options set on it
func New(opts ...*option.Option) *Context {
	merged := option.Merge(opts...)
	var ctx *Context
	if merged.Context != nil {
		var castOK bool
		ctx, castOK = merged.Context.(*Context)
		if !castOK {
			panic("passed in a non-Context for the WithContext() function!")
		}
		return ctx
	}
	ctx = &Context{
		alert:  option.EnvOrDefaultAlerter(),
		Chroot: *merged.Chroot,
	}

	if merged.Snapshot != nil {
		ctx.SnapshotPath = merged.Snapshot.Path
		// root is optional, so a extra check is warranted
		if merged.Snapshot.Root != nil {
			ctx.SnapshotRoot = *merged.Snapshot.Root
		}
		ctx.SnapshotExclusive = merged.Snapshot.Exclusive
	}

	if merged.Alerter != nil {
		ctx.alert = merged.Alerter
	}

	if merged.EnableTools != nil {
		ctx.EnableTools = *merged.EnableTools
	}

	if merged.PathOverrides != nil {
		ctx.PathOverrides = merged.PathOverrides
	}

	// New is not allowed to return error - it would break the established API.
	// so the only way out is to actually do the checks here and record the error,
	// and return it later, at the earliest possible occasion, in Setup()
	if ctx.SnapshotPath != "" && ctx.Chroot != option.DefaultChroot {
		// The env/client code supplied a value, but we are will overwrite it when unpacking shapshots!
		ctx.err = fmt.Errorf("Conflicting options: chroot %q and snapshot path %q", ctx.Chroot, ctx.SnapshotPath)
	}
	return ctx
}

// FromEnv returns a Context that has been populated from the environs or
// default options values
func FromEnv() *Context {
	chrootVal := option.EnvOrDefaultChroot()
	enableTools := option.EnvOrDefaultTools()
	snapPathVal := option.EnvOrDefaultSnapshotPath()
	snapRootVal := option.EnvOrDefaultSnapshotRoot()
	snapExclusiveVal := option.EnvOrDefaultSnapshotExclusive()
	return &Context{
		Chroot:            chrootVal,
		EnableTools:       enableTools,
		SnapshotPath:      snapPathVal,
		SnapshotRoot:      snapRootVal,
		SnapshotExclusive: snapExclusiveVal,
	}
}

// Do wraps a Setup/Teardown pair around the given function
func (ctx *Context) Do(fn func() error) error {
	err := ctx.Setup()
	if err != nil {
		return err
	}
	defer func() {
		err := ctx.Teardown()
		if err != nil {
			ctx.Warn("teardown error: %v", err)
		}
	}()
	return fn()
}

// Setup prepares the extra optional data a Context may use.
// `Context`s are ready to use once returned by `New`. Optional features,
// like snapshot unpacking, may require extra steps. Run `Setup` to perform them.
// You should call `Setup` just once. It is safe to call `Setup` if you don't make
// use of optional extra features - `Setup` will do nothing.
func (ctx *Context) Setup() error {
	if ctx.err != nil {
		return ctx.err
	}
	if ctx.SnapshotPath == "" {
		// nothing to do!
		return nil
	}

	var err error
	root := ctx.SnapshotRoot
	if root == "" {
		root, err = snapshot.Unpack(ctx.SnapshotPath)
		if err == nil {
			ctx.snapshotUnpackedPath = root
		}
	} else {
		var flags uint
		if ctx.SnapshotExclusive {
			flags |= snapshot.OwnTargetDirectory
		}
		_, err = snapshot.UnpackInto(ctx.SnapshotPath, root, flags)
	}
	if err != nil {
		return err
	}

	ctx.Chroot = root
	return nil
}

// Teardown releases any resource acquired by Setup.
// You should always call `Teardown` if you called `Setup` to free any resources
// acquired by `Setup`. Check `Do` for more automated management.
func (ctx *Context) Teardown() error {
	if ctx.snapshotUnpackedPath == "" {
		// if the client code provided the unpack directory,
		// then it is also in charge of the cleanup.
		return nil
	}
	return snapshot.Cleanup(ctx.snapshotUnpackedPath)
}

func (ctx *Context) Warn(msg string, args ...interface{}) {
	ctx.alert.Printf("WARNING: "+msg, args...)
}
  070701000007DE000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/cpu    070701000007DF000081A4000000000000000000000001645E367C00001391000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/cpu/cpu.go //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package cpu

import (
	"fmt"

	"github.com/jaypipes/ghw/pkg/context"
	"github.com/jaypipes/ghw/pkg/marshal"
	"github.com/jaypipes/ghw/pkg/option"
)

// ProcessorCore describes a physical host processor core. A processor core is
// a separate processing unit within some types of central processing units
// (CPU).
type ProcessorCore struct {
	// ID is the `uint32` identifier that the host gave this core. Note that
	// this does *not* necessarily equate to a zero-based index of the core
	// within a physical package. For example, the core IDs for an Intel Core
	// i7 are 0, 1, 2, 8, 9, and 10
	ID int `json:"id"`
	// Index is the zero-based index of the core on the physical processor
	// package
	Index int `json:"index"`
	// NumThreads is the number of hardware threads associated with the core
	NumThreads uint32 `json:"total_threads"`
	// LogicalProcessors is a slice of ints representing the logical processor
	// IDs assigned to any processing unit for the core
	LogicalProcessors []int `json:"logical_processors"`
}

// String returns a short string indicating important information about the
// processor core
func (c *ProcessorCore) String() string {
	return fmt.Sprintf(
		"processor core #%d (%d threads), logical processors %v",
		c.Index,
		c.NumThreads,
		c.LogicalProcessors,
	)
}

// Processor describes a physical host central processing unit (CPU).
type Processor struct {
	// ID is the physical processor `uint32` ID according to the system
	ID int `json:"id"`
	// NumCores is the number of physical cores in the processor package
	NumCores uint32 `json:"total_cores"`
	// NumThreads is the number of hardware threads in the processor package
	NumThreads uint32 `json:"total_threads"`
	// Vendor is a string containing the vendor name
	Vendor string `json:"vendor"`
	// Model` is a string containing the vendor's model name
	Model string `json:"model"`
	// Capabilities is a slice of strings indicating the features the processor
	// has enabled
	Capabilities []string `json:"capabilities"`
	// Cores is a slice of ProcessorCore` struct pointers that are packed onto
	// this physical processor
	Cores []*ProcessorCore `json:"cores"`
}

// HasCapability returns true if the Processor has the supplied cpuid
// capability, false otherwise. Example of cpuid capabilities would be 'vmx' or
// 'sse4_2'. To see a list of potential cpuid capabilitiies, see the section on
// CPUID feature bits in the following article:
//
// https://en.wikipedia.org/wiki/CPUID
func (p *Processor) HasCapability(find string) bool {
	for _, c := range p.Capabilities {
		if c == find {
			return true
		}
	}
	return false
}

// String returns a short string describing the Processor
func (p *Processor) String() string {
	ncs := "cores"
	if p.NumCores == 1 {
		ncs = "core"
	}
	nts := "threads"
	if p.NumThreads == 1 {
		nts = "thread"
	}
	return fmt.Sprintf(
		"physical package #%d (%d %s, %d hardware %s)",
		p.ID,
		p.NumCores,
		ncs,
		p.NumThreads,
		nts,
	)
}

// Info describes all central processing unit (CPU) functionality on a host.
// Returned by the `ghw.CPU()` function.
type Info struct {
	ctx *context.Context
	// TotalCores is the total number of physical cores the host system
	// contains
	TotalCores uint32 `json:"total_cores"`
	// TotalThreads is the total number of hardware threads the host system
	// contains
	TotalThreads uint32 `json:"total_threads"`
	// Processors is a slice of Processor struct pointers, one for each
	// physical processor package contained in the host
	Processors []*Processor `json:"processors"`
}

// New returns a pointer to an Info struct that contains information about the
// CPUs on the host system
func New(opts ...*option.Option) (*Info, error) {
	ctx := context.New(opts...)
	info := &Info{ctx: ctx}
	if err := ctx.Do(info.load); err != nil {
		return nil, err
	}
	return info, nil
}

// String returns a short string indicating a summary of CPU information
func (i *Info) String() string {
	nps := "packages"
	if len(i.Processors) == 1 {
		nps = "package"
	}
	ncs := "cores"
	if i.TotalCores == 1 {
		ncs = "core"
	}
	nts := "threads"
	if i.TotalThreads == 1 {
		nts = "thread"
	}
	return fmt.Sprintf(
		"cpu (%d physical %s, %d %s, %d hardware %s)",
		len(i.Processors),
		nps,
		i.TotalCores,
		ncs,
		i.TotalThreads,
		nts,
	)
}

// simple private struct used to encapsulate cpu information in a top-level
// "cpu" YAML/JSON map/object key
type cpuPrinter struct {
	Info *Info `json:"cpu"`
}

// YAMLString returns a string with the cpu information formatted as YAML
// under a top-level "cpu:" key
func (i *Info) YAMLString() string {
	return marshal.SafeYAML(i.ctx, cpuPrinter{i})
}

// JSONString returns a string with the cpu information formatted as JSON
// under a top-level "cpu:" key
func (i *Info) JSONString(indent bool) string {
	return marshal.SafeJSON(i.ctx, cpuPrinter{i}, indent)
}
   070701000007E0000081A4000000000000000000000001645E367C000015B4000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/cpu/cpu_linux.go   // Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package cpu

import (
	"bufio"
	"fmt"
	"io/ioutil"
	"os"
	"path/filepath"
	"strconv"
	"strings"

	"github.com/jaypipes/ghw/pkg/context"
	"github.com/jaypipes/ghw/pkg/linuxpath"
	"github.com/jaypipes/ghw/pkg/util"
)

func (i *Info) load() error {
	i.Processors = processorsGet(i.ctx)
	var totCores uint32
	var totThreads uint32
	for _, p := range i.Processors {
		totCores += p.NumCores
		totThreads += p.NumThreads
	}
	i.TotalCores = totCores
	i.TotalThreads = totThreads
	return nil
}

func processorsGet(ctx *context.Context) []*Processor {
	procs := make([]*Processor, 0)
	paths := linuxpath.New(ctx)

	r, err := os.Open(paths.ProcCpuinfo)
	if err != nil {
		return nil
	}
	defer util.SafeClose(r)

	// An array of maps of attributes describing the logical processor
	procAttrs := make([]map[string]string, 0)
	curProcAttrs := make(map[string]string)

	scanner := bufio.NewScanner(r)
	for scanner.Scan() {
		line := strings.TrimSpace(scanner.Text())
		if line == "" {
			// Output of /proc/cpuinfo has a blank newline to separate logical
			// processors, so here we collect up all the attributes we've
			// collected for this logical processor block
			procAttrs = append(procAttrs, curProcAttrs)
			// Reset the current set of processor attributes...
			curProcAttrs = make(map[string]string)
			continue
		}
		parts := strings.Split(line, ":")
		key := strings.TrimSpace(parts[0])
		value := strings.TrimSpace(parts[1])
		curProcAttrs[key] = value
	}

	// Build a set of physical processor IDs which represent the physical
	// package of the CPU
	setPhysicalIDs := make(map[int]bool)
	for _, attrs := range procAttrs {
		pid, err := strconv.Atoi(attrs["physical id"])
		if err != nil {
			continue
		}
		setPhysicalIDs[pid] = true
	}

	for pid := range setPhysicalIDs {
		p := &Processor{
			ID: pid,
		}
		// The indexes into the array of attribute maps for each logical
		// processor within the physical processor
		lps := make([]int, 0)
		for x := range procAttrs {
			lppid, err := strconv.Atoi(procAttrs[x]["physical id"])
			if err != nil {
				continue
			}
			if pid == lppid {
				lps = append(lps, x)
			}
		}
		first := procAttrs[lps[0]]
		p.Model = first["model name"]
		p.Vendor = first["vendor_id"]
		numCores, err := strconv.Atoi(first["cpu cores"])
		if err != nil {
			continue
		}
		p.NumCores = uint32(numCores)
		numThreads, err := strconv.Atoi(first["siblings"])
		if err != nil {
			continue
		}
		p.NumThreads = uint32(numThreads)

		// The flags field is a space-separated list of CPU capabilities
		p.Capabilities = strings.Split(first["flags"], " ")

		cores := make([]*ProcessorCore, 0)
		for _, lpidx := range lps {
			lpid, err := strconv.Atoi(procAttrs[lpidx]["processor"])
			if err != nil {
				continue
			}
			coreID, err := strconv.Atoi(procAttrs[lpidx]["core id"])
			if err != nil {
				continue
			}
			var core *ProcessorCore
			for _, c := range cores {
				if c.ID == coreID {
					c.LogicalProcessors = append(
						c.LogicalProcessors,
						lpid,
					)
					c.NumThreads = uint32(len(c.LogicalProcessors))
					core = c
				}
			}
			if core == nil {
				coreLps := make([]int, 1)
				coreLps[0] = lpid
				core = &ProcessorCore{
					ID:                coreID,
					Index:             len(cores),
					NumThreads:        1,
					LogicalProcessors: coreLps,
				}
				cores = append(cores, core)
			}
		}
		p.Cores = cores
		procs = append(procs, p)
	}
	return procs
}

func CoresForNode(ctx *context.Context, nodeID int) ([]*ProcessorCore, error) {
	// The /sys/devices/system/node/nodeX directory contains a subdirectory
	// called 'cpuX' for each logical processor assigned to the node. Each of
	// those subdirectories contains a topology subdirectory which has a
	// core_id file that indicates the 0-based identifier of the physical core
	// the logical processor (hardware thread) is on.
	paths := linuxpath.New(ctx)
	path := filepath.Join(
		paths.SysDevicesSystemNode,
		fmt.Sprintf("node%d", nodeID),
	)
	cores := make([]*ProcessorCore, 0)

	findCoreByID := func(coreID int) *ProcessorCore {
		for _, c := range cores {
			if c.ID == coreID {
				return c
			}
		}

		c := &ProcessorCore{
			ID:                coreID,
			Index:             len(cores),
			LogicalProcessors: make([]int, 0),
		}
		cores = append(cores, c)
		return c
	}

	files, err := ioutil.ReadDir(path)
	if err != nil {
		return nil, err
	}
	for _, file := range files {
		filename := file.Name()
		if !strings.HasPrefix(filename, "cpu") {
			continue
		}
		if filename == "cpumap" || filename == "cpulist" {
			// There are two files in the node directory that start with 'cpu'
			// but are not subdirectories ('cpulist' and 'cpumap'). Ignore
			// these files.
			continue
		}
		// Grab the logical processor ID by cutting the integer from the
		// /sys/devices/system/node/nodeX/cpuX filename
		cpuPath := filepath.Join(path, filename)
		procID, err := strconv.Atoi(filename[3:])
		if err != nil {
			_, _ = fmt.Fprintf(
				os.Stderr,
				"failed to determine procID from %s. Expected integer after 3rd char.",
				filename,
			)
			continue
		}
		coreIDPath := filepath.Join(cpuPath, "topology", "core_id")
		coreID := util.SafeIntFromFile(ctx, coreIDPath)
		core := findCoreByID(coreID)
		core.LogicalProcessors = append(
			core.LogicalProcessors,
			procID,
		)
	}

	for _, c := range cores {
		c.NumThreads = uint32(len(c.LogicalProcessors))
	}

	return cores, nil
}
070701000007E1000081A4000000000000000000000001645E367C0000016F000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/cpu/cpu_stub.go    //go:build !linux && !windows
// +build !linux,!windows

// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package cpu

import (
	"runtime"

	"github.com/pkg/errors"
)

func (i *Info) load() error {
	return errors.New("cpu.Info.load not implemented on " + runtime.GOOS)
}
 070701000007E2000081A4000000000000000000000001645E367C000005A7000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/cpu/cpu_windows.go //go:build !linux
// +build !linux

// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package cpu

import (
	"github.com/StackExchange/wmi"
)

const wmqlProcessor = "SELECT Manufacturer, Name, NumberOfLogicalProcessors, NumberOfCores FROM Win32_Processor"

type win32Processor struct {
	Manufacturer              *string
	Name                      *string
	NumberOfLogicalProcessors uint32
	NumberOfCores             uint32
}

func (i *Info) load() error {
	// Getting info from WMI
	var win32descriptions []win32Processor
	if err := wmi.Query(wmqlProcessor, &win32descriptions); err != nil {
		return err
	}
	// Converting into standard structures
	i.Processors = processorsGet(win32descriptions)
	var totCores uint32
	var totThreads uint32
	for _, p := range i.Processors {
		totCores += p.NumCores
		totThreads += p.NumThreads
	}
	i.TotalCores = totCores
	i.TotalThreads = totThreads
	return nil
}

func processorsGet(win32descriptions []win32Processor) []*Processor {
	var procs []*Processor
	// Converting into standard structures
	for index, description := range win32descriptions {
		p := &Processor{
			ID:         index,
			Model:      *description.Name,
			Vendor:     *description.Manufacturer,
			NumCores:   description.NumberOfCores,
			NumThreads: description.NumberOfLogicalProcessors,
		}
		procs = append(procs, p)
	}
	return procs
}
 070701000007E3000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/gpu    070701000007E4000081A4000000000000000000000001645E367C000009B3000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/gpu/gpu.go //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package gpu

import (
	"fmt"

	"github.com/jaypipes/ghw/pkg/context"
	"github.com/jaypipes/ghw/pkg/marshal"
	"github.com/jaypipes/ghw/pkg/option"
	"github.com/jaypipes/ghw/pkg/pci"
	"github.com/jaypipes/ghw/pkg/topology"
)

type GraphicsCard struct {
	// the PCI address where the graphics card can be found
	Address string `json:"address"`
	// The "index" of the card on the bus (generally not useful information,
	// but might as well include it)
	Index int `json:"index"`
	// pointer to a PCIDevice struct that describes the vendor and product
	// model, etc
	// TODO(jaypipes): Rename this field to PCI, instead of DeviceInfo
	DeviceInfo *pci.Device `json:"pci"`
	// Topology node that the graphics card is affined to. Will be nil if the
	// architecture is not NUMA.
	Node *topology.Node `json:"node,omitempty"`
}

func (card *GraphicsCard) String() string {
	deviceStr := card.Address
	if card.DeviceInfo != nil {
		deviceStr = card.DeviceInfo.String()
	}
	nodeStr := ""
	if card.Node != nil {
		nodeStr = fmt.Sprintf(" [affined to NUMA node %d]", card.Node.ID)
	}
	return fmt.Sprintf(
		"card #%d %s@%s",
		card.Index,
		nodeStr,
		deviceStr,
	)
}

type Info struct {
	ctx           *context.Context
	GraphicsCards []*GraphicsCard `json:"cards"`
}

// New returns a pointer to an Info struct that contains information about the
// graphics cards on the host system
func New(opts ...*option.Option) (*Info, error) {
	ctx := context.New(opts...)
	info := &Info{ctx: ctx}
	if err := ctx.Do(info.load); err != nil {
		return nil, err
	}
	return info, nil
}

func (i *Info) String() string {
	numCardsStr := "cards"
	if len(i.GraphicsCards) == 1 {
		numCardsStr = "card"
	}
	return fmt.Sprintf(
		"gpu (%d graphics %s)",
		len(i.GraphicsCards),
		numCardsStr,
	)
}

// simple private struct used to encapsulate gpu information in a top-level
// "gpu" YAML/JSON map/object key
type gpuPrinter struct {
	Info *Info `json:"gpu"`
}

// YAMLString returns a string with the gpu information formatted as YAML
// under a top-level "gpu:" key
func (i *Info) YAMLString() string {
	return marshal.SafeYAML(i.ctx, gpuPrinter{i})
}

// JSONString returns a string with the gpu information formatted as JSON
// under a top-level "gpu:" key
func (i *Info) JSONString(indent bool) string {
	return marshal.SafeJSON(i.ctx, gpuPrinter{i}, indent)
}
 070701000007E5000081A4000000000000000000000001645E367C0000135C000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/gpu/gpu_linux.go   // Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package gpu

import (
	"io/ioutil"
	"os"
	"path/filepath"
	"strconv"
	"strings"

	"github.com/jaypipes/ghw/pkg/context"
	"github.com/jaypipes/ghw/pkg/linuxpath"
	"github.com/jaypipes/ghw/pkg/pci"
	"github.com/jaypipes/ghw/pkg/topology"
	"github.com/jaypipes/ghw/pkg/util"
)

const (
	_WARN_NO_SYS_CLASS_DRM = `
/sys/class/drm does not exist on this system (likely the host system is a
virtual machine or container with no graphics). Therefore,
GPUInfo.GraphicsCards will be an empty array.
`
)

func (i *Info) load() error {
	// In Linux, each graphics card is listed under the /sys/class/drm
	// directory as a symbolic link named "cardN", where N is a zero-based
	// index of the card in the system. "DRM" stands for Direct Rendering
	// Manager and is the Linux subsystem that is responsible for graphics I/O
	//
	// Each card may have multiple symbolic
	// links in this directory representing the interfaces from the graphics
	// card over a particular wire protocol (HDMI, DisplayPort, etc). These
	// symbolic links are named cardN-<INTERFACE_TYPE>-<DISPLAY_ID>. For
	// instance, on one of my local workstations with an NVIDIA GTX 1050ti
	// graphics card with one HDMI, one DisplayPort, and one DVI interface to
	// the card, I see the following in /sys/class/drm:
	//
	// $ ll /sys/class/drm/
	// total 0
	// drwxr-xr-x  2 root root    0 Jul 16 11:50 ./
	// drwxr-xr-x 75 root root    0 Jul 16 11:50 ../
	// lrwxrwxrwx  1 root root    0 Jul 16 11:50 card0 -> ../../devices/pci0000:00/0000:00:03.0/0000:03:00.0/drm/card0/
	// lrwxrwxrwx  1 root root    0 Jul 16 11:50 card0-DP-1 -> ../../devices/pci0000:00/0000:00:03.0/0000:03:00.0/drm/card0/card0-DP-1/
	// lrwxrwxrwx  1 root root    0 Jul 16 11:50 card0-DVI-D-1 -> ../../devices/pci0000:00/0000:00:03.0/0000:03:00.0/drm/card0/card0-DVI-D-1/
	// lrwxrwxrwx  1 root root    0 Jul 16 11:50 card0-HDMI-A-1 -> ../../devices/pci0000:00/0000:00:03.0/0000:03:00.0/drm/card0/card0-HDMI-A-1/
	//
	// In this routine, we are only interested in the first link (card0), which
	// we follow to gather information about the actual device from the PCI
	// subsystem (we query the modalias file of the PCI device's sysfs
	// directory using the `ghw.PCIInfo.GetDevice()` function.
	paths := linuxpath.New(i.ctx)
	links, err := ioutil.ReadDir(paths.SysClassDRM)
	if err != nil {
		i.ctx.Warn(_WARN_NO_SYS_CLASS_DRM)
		return nil
	}
	cards := make([]*GraphicsCard, 0)
	for _, link := range links {
		lname := link.Name()
		if !strings.HasPrefix(lname, "card") {
			continue
		}
		if strings.ContainsRune(lname, '-') {
			continue
		}
		// Grab the card's zero-based integer index
		lnameBytes := []byte(lname)
		cardIdx, err := strconv.Atoi(string(lnameBytes[4:]))
		if err != nil {
			cardIdx = -1
		}

		// Calculate the card's PCI address by looking at the symbolic link's
		// target
		lpath := filepath.Join(paths.SysClassDRM, lname)
		dest, err := os.Readlink(lpath)
		if err != nil {
			continue
		}
		pathParts := strings.Split(dest, "/")
		numParts := len(pathParts)
		pciAddress := pathParts[numParts-3]
		card := &GraphicsCard{
			Address: pciAddress,
			Index:   cardIdx,
		}
		cards = append(cards, card)
	}
	gpuFillNUMANodes(i.ctx, cards)
	gpuFillPCIDevice(i.ctx, cards)
	i.GraphicsCards = cards
	return nil
}

// Loops through each GraphicsCard struct and attempts to fill the DeviceInfo
// attribute with PCI device information
func gpuFillPCIDevice(ctx *context.Context, cards []*GraphicsCard) {
	pci, err := pci.New(context.WithContext(ctx))
	if err != nil {
		return
	}
	for _, card := range cards {
		if card.DeviceInfo == nil {
			card.DeviceInfo = pci.GetDevice(card.Address)
		}
	}
}

// Loops through each GraphicsCard struct and find which NUMA node the card is
// affined to, setting the GraphicsCard.Node field accordingly. If the host
// system is not a NUMA system, the Node field will be set to nil.
func gpuFillNUMANodes(ctx *context.Context, cards []*GraphicsCard) {
	paths := linuxpath.New(ctx)
	topo, err := topology.New(context.WithContext(ctx))
	if err != nil {
		// Problem getting topology information so just set the graphics card's
		// node to nil
		for _, card := range cards {
			if topo.Architecture != topology.ARCHITECTURE_NUMA {
				card.Node = nil
			}
		}
		return
	}
	for _, card := range cards {
		// Each graphics card on a NUMA system will have a pseudo-file
		// called /sys/class/drm/card$CARD_INDEX/device/numa_node which
		// contains the NUMA node that the card is affined to
		cardIndexStr := strconv.Itoa(card.Index)
		fpath := filepath.Join(
			paths.SysClassDRM,
			"card"+cardIndexStr,
			"device",
			"numa_node",
		)
		nodeIdx := util.SafeIntFromFile(ctx, fpath)
		if nodeIdx == -1 {
			continue
		}
		for _, node := range topo.Nodes {
			if nodeIdx == int(node.ID) {
				card.Node = node
			}
		}
	}
}
070701000007E6000081A4000000000000000000000001645E367C0000016D000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/gpu/gpu_stub.go    //go:build !linux && !windows
// +build !linux,!windows

// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package gpu

import (
	"runtime"

	"github.com/pkg/errors"
)

func (i *Info) load() error {
	return errors.New("gpuFillInfo not implemented on " + runtime.GOOS)
}
   070701000007E7000081A4000000000000000000000001645E367C00001056000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/gpu/gpu_windows.go // Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package gpu

import (
	"strings"

	"github.com/StackExchange/wmi"
	"github.com/jaypipes/pcidb"

	"github.com/jaypipes/ghw/pkg/pci"
	"github.com/jaypipes/ghw/pkg/util"
)

const wqlVideoController = "SELECT Caption, CreationClassName, Description, DeviceID, Name, PNPDeviceID, SystemCreationClassName, SystemName, VideoArchitecture, VideoMemoryType, VideoModeDescription, VideoProcessor FROM Win32_VideoController"

type win32VideoController struct {
	Caption                 string
	CreationClassName       string
	Description             string
	DeviceID                string
	Name                    string
	PNPDeviceID             string
	SystemCreationClassName string
	SystemName              string
	VideoArchitecture       uint16
	VideoMemoryType         uint16
	VideoModeDescription    string
	VideoProcessor          string
}

const wqlPnPEntity = "SELECT Caption, CreationClassName, Description, DeviceID, Manufacturer, Name, PNPClass, PNPDeviceID FROM Win32_PnPEntity"

type win32PnPEntity struct {
	Caption           string
	CreationClassName string
	Description       string
	DeviceID          string
	Manufacturer      string
	Name              string
	PNPClass          string
	PNPDeviceID       string
}

func (i *Info) load() error {
	// Getting data from WMI
	var win32VideoControllerDescriptions []win32VideoController
	if err := wmi.Query(wqlVideoController, &win32VideoControllerDescriptions); err != nil {
		return err
	}

	// Building dynamic WHERE clause with addresses to create a single query collecting all desired data
	queryAddresses := []string{}
	for _, description := range win32VideoControllerDescriptions {
		var queryAddres = strings.Replace(description.PNPDeviceID, "\\", `\\`, -1)
		queryAddresses = append(queryAddresses, "PNPDeviceID='"+queryAddres+"'")
	}
	whereClause := strings.Join(queryAddresses[:], " OR ")

	// Getting data from WMI
	var win32PnPDescriptions []win32PnPEntity
	var wqlPnPDevice = wqlPnPEntity + " WHERE " + whereClause
	if err := wmi.Query(wqlPnPDevice, &win32PnPDescriptions); err != nil {
		return err
	}

	// Converting into standard structures
	cards := make([]*GraphicsCard, 0)
	for _, description := range win32VideoControllerDescriptions {
		card := &GraphicsCard{
			Address:    description.DeviceID, // https://stackoverflow.com/questions/32073667/how-do-i-discover-the-pcie-bus-topology-and-slot-numbers-on-the-board
			Index:      0,
			DeviceInfo: GetDevice(description.PNPDeviceID, win32PnPDescriptions),
		}
		cards = append(cards, card)
	}
	i.GraphicsCards = cards
	return nil
}

func GetDevice(id string, entities []win32PnPEntity) *pci.Device {
	// Backslashing PnP address ID as requested by JSON and VMI query: https://docs.microsoft.com/en-us/windows/win32/wmisdk/where-clause
	var queryAddress = strings.Replace(id, "\\", `\\`, -1)
	// Preparing default structure
	var device = &pci.Device{
		Address: queryAddress,
		Vendor: &pcidb.Vendor{
			ID:       util.UNKNOWN,
			Name:     util.UNKNOWN,
			Products: []*pcidb.Product{},
		},
		Subsystem: &pcidb.Product{
			ID:         util.UNKNOWN,
			Name:       util.UNKNOWN,
			Subsystems: []*pcidb.Product{},
		},
		Product: &pcidb.Product{
			ID:         util.UNKNOWN,
			Name:       util.UNKNOWN,
			Subsystems: []*pcidb.Product{},
		},
		Class: &pcidb.Class{
			ID:         util.UNKNOWN,
			Name:       util.UNKNOWN,
			Subclasses: []*pcidb.Subclass{},
		},
		Subclass: &pcidb.Subclass{
			ID:                    util.UNKNOWN,
			Name:                  util.UNKNOWN,
			ProgrammingInterfaces: []*pcidb.ProgrammingInterface{},
		},
		ProgrammingInterface: &pcidb.ProgrammingInterface{
			ID:   util.UNKNOWN,
			Name: util.UNKNOWN,
		},
	}
	// If an entity is found we get its data inside the standard structure
	for _, description := range entities {
		if id == description.PNPDeviceID {
			device.Vendor.ID = description.Manufacturer
			device.Vendor.Name = description.Manufacturer
			device.Product.ID = description.Name
			device.Product.Name = description.Description
			break
		}
	}
	return device
}
  070701000007E8000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/linuxdmi   070701000007E9000081A4000000000000000000000001645E367C0000027E000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/linuxdmi/dmi_linux.go  // Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package linuxdmi

import (
	"io/ioutil"
	"path/filepath"
	"strings"

	"github.com/jaypipes/ghw/pkg/context"
	"github.com/jaypipes/ghw/pkg/linuxpath"
	"github.com/jaypipes/ghw/pkg/util"
)

func Item(ctx *context.Context, value string) string {
	paths := linuxpath.New(ctx)
	path := filepath.Join(paths.SysClassDMI, "id", value)

	b, err := ioutil.ReadFile(path)
	if err != nil {
		ctx.Warn("Unable to read %s: %s\n", value, err)
		return util.UNKNOWN
	}

	return strings.TrimSpace(string(b))
}
  070701000007EA000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/linuxpath  070701000007EB000081A4000000000000000000000001645E367C00000D51000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/linuxpath/path_linux.go    // Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package linuxpath

import (
	"fmt"
	"path/filepath"

	"github.com/jaypipes/ghw/pkg/context"
)

// PathRoots holds the roots of all the filesystem subtrees
// ghw wants to access.
type PathRoots struct {
	Etc  string
	Proc string
	Run  string
	Sys  string
	Var  string
}

// DefaultPathRoots return the canonical default value for PathRoots
func DefaultPathRoots() PathRoots {
	return PathRoots{
		Etc:  "/etc",
		Proc: "/proc",
		Run:  "/run",
		Sys:  "/sys",
		Var:  "/var",
	}
}

// PathRootsFromContext initialize PathRoots from the given Context,
// allowing overrides of the canonical default paths.
func PathRootsFromContext(ctx *context.Context) PathRoots {
	roots := DefaultPathRoots()
	if pathEtc, ok := ctx.PathOverrides["/etc"]; ok {
		roots.Etc = pathEtc
	}
	if pathProc, ok := ctx.PathOverrides["/proc"]; ok {
		roots.Proc = pathProc
	}
	if pathRun, ok := ctx.PathOverrides["/run"]; ok {
		roots.Run = pathRun
	}
	if pathSys, ok := ctx.PathOverrides["/sys"]; ok {
		roots.Sys = pathSys
	}
	if pathVar, ok := ctx.PathOverrides["/var"]; ok {
		roots.Var = pathVar
	}
	return roots
}

type Paths struct {
	VarLog                 string
	ProcMeminfo            string
	ProcCpuinfo            string
	ProcMounts             string
	SysKernelMMHugepages   string
	SysBlock               string
	SysDevicesSystemNode   string
	SysDevicesSystemMemory string
	SysBusPciDevices       string
	SysClassDRM            string
	SysClassDMI            string
	SysClassNet            string
	RunUdevData            string
}

// New returns a new Paths struct containing filepath fields relative to the
// supplied Context
func New(ctx *context.Context) *Paths {
	roots := PathRootsFromContext(ctx)
	return &Paths{
		VarLog:                 filepath.Join(ctx.Chroot, roots.Var, "log"),
		ProcMeminfo:            filepath.Join(ctx.Chroot, roots.Proc, "meminfo"),
		ProcCpuinfo:            filepath.Join(ctx.Chroot, roots.Proc, "cpuinfo"),
		ProcMounts:             filepath.Join(ctx.Chroot, roots.Proc, "self", "mounts"),
		SysKernelMMHugepages:   filepath.Join(ctx.Chroot, roots.Sys, "kernel", "mm", "hugepages"),
		SysBlock:               filepath.Join(ctx.Chroot, roots.Sys, "block"),
		SysDevicesSystemNode:   filepath.Join(ctx.Chroot, roots.Sys, "devices", "system", "node"),
		SysDevicesSystemMemory: filepath.Join(ctx.Chroot, roots.Sys, "devices", "system", "memory"),
		SysBusPciDevices:       filepath.Join(ctx.Chroot, roots.Sys, "bus", "pci", "devices"),
		SysClassDRM:            filepath.Join(ctx.Chroot, roots.Sys, "class", "drm"),
		SysClassDMI:            filepath.Join(ctx.Chroot, roots.Sys, "class", "dmi"),
		SysClassNet:            filepath.Join(ctx.Chroot, roots.Sys, "class", "net"),
		RunUdevData:            filepath.Join(ctx.Chroot, roots.Run, "udev", "data"),
	}
}

func (p *Paths) NodeCPU(nodeID int, lpID int) string {
	return filepath.Join(
		p.SysDevicesSystemNode,
		fmt.Sprintf("node%d", nodeID),
		fmt.Sprintf("cpu%d", lpID),
	)
}

func (p *Paths) NodeCPUCache(nodeID int, lpID int) string {
	return filepath.Join(
		p.NodeCPU(nodeID, lpID),
		"cache",
	)
}

func (p *Paths) NodeCPUCacheIndex(nodeID int, lpID int, cacheIndex int) string {
	return filepath.Join(
		p.NodeCPUCache(nodeID, lpID),
		fmt.Sprintf("index%d", cacheIndex),
	)
}
   070701000007EC000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/marshal    070701000007ED000081A4000000000000000000000001645E367C0000045A000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/marshal/marshal.go //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package marshal

import (
	"encoding/json"

	"github.com/ghodss/yaml"
	"github.com/jaypipes/ghw/pkg/context"
)

// safeYAML returns a string after marshalling the supplied parameter into YAML
func SafeYAML(ctx *context.Context, p interface{}) string {
	b, err := json.Marshal(p)
	if err != nil {
		ctx.Warn("error marshalling JSON: %s", err)
		return ""
	}
	yb, err := yaml.JSONToYAML(b)
	if err != nil {
		ctx.Warn("error converting JSON to YAML: %s", err)
		return ""
	}
	return string(yb)
}

// safeJSON returns a string after marshalling the supplied parameter into
// JSON. Accepts an optional argument to trigger pretty/indented formatting of
// the JSON string
func SafeJSON(ctx *context.Context, p interface{}, indent bool) string {
	var b []byte
	var err error
	if !indent {
		b, err = json.Marshal(p)
	} else {
		b, err = json.MarshalIndent(&p, "", "  ")
	}
	if err != nil {
		ctx.Warn("error marshalling JSON: %s", err)
		return ""
	}
	return string(b)
}
  070701000007EE000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/memory 070701000007EF000081A4000000000000000000000001645E367C00000963000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/memory/memory.go   //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package memory

import (
	"fmt"
	"math"

	"github.com/jaypipes/ghw/pkg/context"
	"github.com/jaypipes/ghw/pkg/marshal"
	"github.com/jaypipes/ghw/pkg/option"
	"github.com/jaypipes/ghw/pkg/unitutil"
	"github.com/jaypipes/ghw/pkg/util"
)

type Module struct {
	Label        string `json:"label"`
	Location     string `json:"location"`
	SerialNumber string `json:"serial_number"`
	SizeBytes    int64  `json:"size_bytes"`
	Vendor       string `json:"vendor"`
}

type Area struct {
	TotalPhysicalBytes int64 `json:"total_physical_bytes"`
	TotalUsableBytes   int64 `json:"total_usable_bytes"`
	// An array of sizes, in bytes, of memory pages supported in this area
	SupportedPageSizes []uint64  `json:"supported_page_sizes"`
	Modules            []*Module `json:"modules"`
}

func (a *Area) String() string {
	tpbs := util.UNKNOWN
	if a.TotalPhysicalBytes > 0 {
		tpb := a.TotalPhysicalBytes
		unit, unitStr := unitutil.AmountString(tpb)
		tpb = int64(math.Ceil(float64(a.TotalPhysicalBytes) / float64(unit)))
		tpbs = fmt.Sprintf("%d%s", tpb, unitStr)
	}
	tubs := util.UNKNOWN
	if a.TotalUsableBytes > 0 {
		tub := a.TotalUsableBytes
		unit, unitStr := unitutil.AmountString(tub)
		tub = int64(math.Ceil(float64(a.TotalUsableBytes) / float64(unit)))
		tubs = fmt.Sprintf("%d%s", tub, unitStr)
	}
	return fmt.Sprintf("memory (%s physical, %s usable)", tpbs, tubs)
}

type Info struct {
	ctx *context.Context
	Area
}

func New(opts ...*option.Option) (*Info, error) {
	ctx := context.New(opts...)
	info := &Info{ctx: ctx}
	if err := ctx.Do(info.load); err != nil {
		return nil, err
	}
	return info, nil
}

func (i *Info) String() string {
	return i.Area.String()
}

// simple private struct used to encapsulate memory information in a top-level
// "memory" YAML/JSON map/object key
type memoryPrinter struct {
	Info *Info `json:"memory"`
}

// YAMLString returns a string with the memory information formatted as YAML
// under a top-level "memory:" key
func (i *Info) YAMLString() string {
	return marshal.SafeYAML(i.ctx, memoryPrinter{i})
}

// JSONString returns a string with the memory information formatted as JSON
// under a top-level "memory:" key
func (i *Info) JSONString(indent bool) string {
	return marshal.SafeJSON(i.ctx, memoryPrinter{i}, indent)
}
 070701000007F0000081A4000000000000000000000001645E367C00000DA4000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/memory/memory_cache.go //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package memory

import (
	"encoding/json"
	"fmt"
	"strconv"
	"strings"

	"github.com/jaypipes/ghw/pkg/unitutil"
)

type CacheType int

const (
	CACHE_TYPE_UNIFIED CacheType = iota
	CACHE_TYPE_INSTRUCTION
	CACHE_TYPE_DATA
)

var (
	memoryCacheTypeString = map[CacheType]string{
		CACHE_TYPE_UNIFIED:     "Unified",
		CACHE_TYPE_INSTRUCTION: "Instruction",
		CACHE_TYPE_DATA:        "Data",
	}

	// NOTE(fromani): the keys are all lowercase and do not match
	// the keys in the opposite table `memoryCacheTypeString`.
	// This is done because of the choice we made in
	// CacheType:MarshalJSON.
	// We use this table only in UnmarshalJSON, so it should be OK.
	stringMemoryCacheType = map[string]CacheType{
		"unified":     CACHE_TYPE_UNIFIED,
		"instruction": CACHE_TYPE_INSTRUCTION,
		"data":        CACHE_TYPE_DATA,
	}
)

func (a CacheType) String() string {
	return memoryCacheTypeString[a]
}

// NOTE(jaypipes): since serialized output is as "official" as we're going to
// get, let's lowercase the string output when serializing, in order to
// "normalize" the expected serialized output
func (a CacheType) MarshalJSON() ([]byte, error) {
	return []byte(strconv.Quote(strings.ToLower(a.String()))), nil
}

func (a *CacheType) UnmarshalJSON(b []byte) error {
	var s string
	if err := json.Unmarshal(b, &s); err != nil {
		return err
	}
	key := strings.ToLower(s)
	val, ok := stringMemoryCacheType[key]
	if !ok {
		return fmt.Errorf("unknown memory cache type: %q", key)
	}
	*a = val
	return nil
}

type SortByCacheLevelTypeFirstProcessor []*Cache

func (a SortByCacheLevelTypeFirstProcessor) Len() int      { return len(a) }
func (a SortByCacheLevelTypeFirstProcessor) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a SortByCacheLevelTypeFirstProcessor) Less(i, j int) bool {
	if a[i].Level < a[j].Level {
		return true
	} else if a[i].Level == a[j].Level {
		if a[i].Type < a[j].Type {
			return true
		} else if a[i].Type == a[j].Type {
			// NOTE(jaypipes): len(LogicalProcessors) is always >0 and is always
			// sorted lowest LP ID to highest LP ID
			return a[i].LogicalProcessors[0] < a[j].LogicalProcessors[0]
		}
	}
	return false
}

type SortByLogicalProcessorId []uint32

func (a SortByLogicalProcessorId) Len() int           { return len(a) }
func (a SortByLogicalProcessorId) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
func (a SortByLogicalProcessorId) Less(i, j int) bool { return a[i] < a[j] }

type Cache struct {
	Level     uint8     `json:"level"`
	Type      CacheType `json:"type"`
	SizeBytes uint64    `json:"size_bytes"`
	// The set of logical processors (hardware threads) that have access to the
	// cache
	LogicalProcessors []uint32 `json:"logical_processors"`
}

func (c *Cache) String() string {
	sizeKb := c.SizeBytes / uint64(unitutil.KB)
	typeStr := ""
	if c.Type == CACHE_TYPE_INSTRUCTION {
		typeStr = "i"
	} else if c.Type == CACHE_TYPE_DATA {
		typeStr = "d"
	}
	cacheIDStr := fmt.Sprintf("L%d%s", c.Level, typeStr)
	processorMapStr := ""
	if c.LogicalProcessors != nil {
		lpStrings := make([]string, len(c.LogicalProcessors))
		for x, lpid := range c.LogicalProcessors {
			lpStrings[x] = strconv.Itoa(int(lpid))
		}
		processorMapStr = " shared with logical processors: " + strings.Join(lpStrings, ",")
	}
	return fmt.Sprintf(
		"%s cache (%d KB)%s",
		cacheIDStr,
		sizeKb,
		processorMapStr,
	)
}
070701000007F1000081A4000000000000000000000001645E367C000016EE000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/memory/memory_cache_linux.go   // Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package memory

import (
	"errors"
	"fmt"
	"io/ioutil"
	"os"
	"path/filepath"
	"sort"
	"strconv"
	"strings"

	"github.com/jaypipes/ghw/pkg/context"
	"github.com/jaypipes/ghw/pkg/linuxpath"
	"github.com/jaypipes/ghw/pkg/unitutil"
)

func CachesForNode(ctx *context.Context, nodeID int) ([]*Cache, error) {
	// The /sys/devices/node/nodeX directory contains a subdirectory called
	// 'cpuX' for each logical processor assigned to the node. Each of those
	// subdirectories containers a 'cache' subdirectory which contains a number
	// of subdirectories beginning with 'index' and ending in the cache's
	// internal 0-based identifier. Those subdirectories contain a number of
	// files, including 'shared_cpu_list', 'size', and 'type' which we use to
	// determine cache characteristics.
	paths := linuxpath.New(ctx)
	path := filepath.Join(
		paths.SysDevicesSystemNode,
		fmt.Sprintf("node%d", nodeID),
	)
	caches := make(map[string]*Cache)

	files, err := ioutil.ReadDir(path)
	if err != nil {
		return nil, err
	}
	for _, file := range files {
		filename := file.Name()
		if !strings.HasPrefix(filename, "cpu") {
			continue
		}
		if filename == "cpumap" || filename == "cpulist" {
			// There are two files in the node directory that start with 'cpu'
			// but are not subdirectories ('cpulist' and 'cpumap'). Ignore
			// these files.
			continue
		}
		// Grab the logical processor ID by cutting the integer from the
		// /sys/devices/system/node/nodeX/cpuX filename
		cpuPath := filepath.Join(path, filename)
		lpID, _ := strconv.Atoi(filename[3:])

		// Inspect the caches for each logical processor. There will be a
		// /sys/devices/system/node/nodeX/cpuX/cache directory containing a
		// number of directories beginning with the prefix "index" followed by
		// a number. The number indicates the level of the cache, which
		// indicates the "distance" from the processor. Each of these
		// directories contains information about the size of that level of
		// cache and the processors mapped to it.
		cachePath := filepath.Join(cpuPath, "cache")
		if _, err = os.Stat(cachePath); errors.Is(err, os.ErrNotExist) {
			continue
		}
		cacheDirFiles, err := ioutil.ReadDir(cachePath)
		if err != nil {
			return nil, err
		}
		for _, cacheDirFile := range cacheDirFiles {
			cacheDirFileName := cacheDirFile.Name()
			if !strings.HasPrefix(cacheDirFileName, "index") {
				continue
			}
			cacheIndex, _ := strconv.Atoi(cacheDirFileName[5:])

			// The cache information is repeated for each node, so here, we
			// just ensure that we only have a one Cache object for each
			// unique combination of level, type and processor map
			level := memoryCacheLevel(ctx, paths, nodeID, lpID, cacheIndex)
			cacheType := memoryCacheType(ctx, paths, nodeID, lpID, cacheIndex)
			sharedCpuMap := memoryCacheSharedCPUMap(ctx, paths, nodeID, lpID, cacheIndex)
			cacheKey := fmt.Sprintf("%d-%d-%s", level, cacheType, sharedCpuMap)

			cache, exists := caches[cacheKey]
			if !exists {
				size := memoryCacheSize(ctx, paths, nodeID, lpID, level)
				cache = &Cache{
					Level:             uint8(level),
					Type:              cacheType,
					SizeBytes:         uint64(size) * uint64(unitutil.KB),
					LogicalProcessors: make([]uint32, 0),
				}
				caches[cacheKey] = cache
			}
			cache.LogicalProcessors = append(
				cache.LogicalProcessors,
				uint32(lpID),
			)
		}
	}

	cacheVals := make([]*Cache, len(caches))
	x := 0
	for _, c := range caches {
		// ensure the cache's processor set is sorted by logical process ID
		sort.Sort(SortByLogicalProcessorId(c.LogicalProcessors))
		cacheVals[x] = c
		x++
	}

	return cacheVals, nil
}

func memoryCacheLevel(ctx *context.Context, paths *linuxpath.Paths, nodeID int, lpID int, cacheIndex int) int {
	levelPath := filepath.Join(
		paths.NodeCPUCacheIndex(nodeID, lpID, cacheIndex),
		"level",
	)
	levelContents, err := ioutil.ReadFile(levelPath)
	if err != nil {
		ctx.Warn("%s", err)
		return -1
	}
	// levelContents is now a []byte with the last byte being a newline
	// character. Trim that off and convert the contents to an integer.
	level, err := strconv.Atoi(string(levelContents[:len(levelContents)-1]))
	if err != nil {
		ctx.Warn("Unable to parse int from %s", levelContents)
		return -1
	}
	return level
}

func memoryCacheSize(ctx *context.Context, paths *linuxpath.Paths, nodeID int, lpID int, cacheIndex int) int {
	sizePath := filepath.Join(
		paths.NodeCPUCacheIndex(nodeID, lpID, cacheIndex),
		"size",
	)
	sizeContents, err := ioutil.ReadFile(sizePath)
	if err != nil {
		ctx.Warn("%s", err)
		return -1
	}
	// size comes as XK\n, so we trim off the K and the newline.
	size, err := strconv.Atoi(string(sizeContents[:len(sizeContents)-2]))
	if err != nil {
		ctx.Warn("Unable to parse int from %s", sizeContents)
		return -1
	}
	return size
}

func memoryCacheType(ctx *context.Context, paths *linuxpath.Paths, nodeID int, lpID int, cacheIndex int) CacheType {
	typePath := filepath.Join(
		paths.NodeCPUCacheIndex(nodeID, lpID, cacheIndex),
		"type",
	)
	cacheTypeContents, err := ioutil.ReadFile(typePath)
	if err != nil {
		ctx.Warn("%s", err)
		return CACHE_TYPE_UNIFIED
	}
	switch string(cacheTypeContents[:len(cacheTypeContents)-1]) {
	case "Data":
		return CACHE_TYPE_DATA
	case "Instruction":
		return CACHE_TYPE_INSTRUCTION
	default:
		return CACHE_TYPE_UNIFIED
	}
}

func memoryCacheSharedCPUMap(ctx *context.Context, paths *linuxpath.Paths, nodeID int, lpID int, cacheIndex int) string {
	scpuPath := filepath.Join(
		paths.NodeCPUCacheIndex(nodeID, lpID, cacheIndex),
		"shared_cpu_map",
	)
	sharedCpuMap, err := ioutil.ReadFile(scpuPath)
	if err != nil {
		ctx.Warn("%s", err)
		return ""
	}
	return string(sharedCpuMap[:len(sharedCpuMap)-1])
}
  070701000007F2000081A4000000000000000000000001645E367C00001FED000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/memory/memory_linux.go // Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package memory

import (
	"bufio"
	"compress/gzip"
	"fmt"
	"io"
	"io/ioutil"
	"os"
	"path/filepath"
	"regexp"
	"strconv"
	"strings"

	"github.com/jaypipes/ghw/pkg/context"
	"github.com/jaypipes/ghw/pkg/linuxpath"
	"github.com/jaypipes/ghw/pkg/unitutil"
	"github.com/jaypipes/ghw/pkg/util"
)

const (
	_WARN_CANNOT_DETERMINE_PHYSICAL_MEMORY = `
Could not determine total physical bytes of memory. This may
be due to the host being a virtual machine or container with no
/var/log/syslog file or /sys/devices/system/memory directory, or
the current user may not have necessary privileges to read the syslog.
We are falling back to setting the total physical amount of memory to
the total usable amount of memory
`
)

var (
	// System log lines will look similar to the following:
	// ... kernel: [0.000000] Memory: 24633272K/25155024K ...
	_REGEX_SYSLOG_MEMLINE = regexp.MustCompile(`Memory:\s+\d+K\/(\d+)K`)
)

func (i *Info) load() error {
	paths := linuxpath.New(i.ctx)
	tub := memTotalUsableBytes(paths)
	if tub < 1 {
		return fmt.Errorf("Could not determine total usable bytes of memory")
	}
	i.TotalUsableBytes = tub
	tpb := memTotalPhysicalBytes(paths)
	i.TotalPhysicalBytes = tpb
	if tpb < 1 {
		i.ctx.Warn(_WARN_CANNOT_DETERMINE_PHYSICAL_MEMORY)
		i.TotalPhysicalBytes = tub
	}
	i.SupportedPageSizes, _ = memorySupportedPageSizes(paths.SysKernelMMHugepages)
	return nil
}

func AreaForNode(ctx *context.Context, nodeID int) (*Area, error) {
	paths := linuxpath.New(ctx)
	path := filepath.Join(
		paths.SysDevicesSystemNode,
		fmt.Sprintf("node%d", nodeID),
	)

	blockSizeBytes, err := memoryBlockSizeBytes(paths.SysDevicesSystemMemory)
	if err != nil {
		return nil, err
	}

	totPhys, err := memoryTotalPhysicalBytesFromPath(path, blockSizeBytes)
	if err != nil {
		return nil, err
	}

	totUsable, err := memoryTotalUsableBytesFromPath(filepath.Join(path, "meminfo"))
	if err != nil {
		return nil, err
	}

	supportedHP, err := memorySupportedPageSizes(filepath.Join(path, "hugepages"))
	if err != nil {
		return nil, err
	}

	return &Area{
		TotalPhysicalBytes: totPhys,
		TotalUsableBytes:   totUsable,
		SupportedPageSizes: supportedHP,
	}, nil
}

func memoryBlockSizeBytes(dir string) (uint64, error) {
	// get the memory block size in byte in hexadecimal notation
	blockSize := filepath.Join(dir, "block_size_bytes")

	d, err := ioutil.ReadFile(blockSize)
	if err != nil {
		return 0, err
	}
	return strconv.ParseUint(strings.TrimSpace(string(d)), 16, 64)
}

func memTotalPhysicalBytes(paths *linuxpath.Paths) (total int64) {
	defer func() {
		// fallback to the syslog file approach in case of error
		if total < 0 {
			total = memTotalPhysicalBytesFromSyslog(paths)
		}
	}()

	// detect physical memory from /sys/devices/system/memory
	dir := paths.SysDevicesSystemMemory
	blockSizeBytes, err := memoryBlockSizeBytes(dir)
	if err != nil {
		total = -1
		return total
	}

	total, err = memoryTotalPhysicalBytesFromPath(dir, blockSizeBytes)
	if err != nil {
		total = -1
	}
	return total
}

func memoryTotalPhysicalBytesFromPath(dir string, blockSizeBytes uint64) (int64, error) {
	// iterate over memory's block /sys/.../memory*,
	// if the memory block state is 'online' we increment the total
	// with the memory block size to determine the amount of physical
	// memory available on this system.
	// This works for both system-wide:
	// /sys/devices/system/memory/memory*
	// and for per-numa-node report:
	// /sys/devices/system/node/node*/memory*

	sysMemory, err := filepath.Glob(filepath.Join(dir, "memory*"))
	if err != nil {
		return -1, err
	} else if sysMemory == nil {
		return -1, fmt.Errorf("cannot find memory entries in %q", dir)
	}

	var total int64
	for _, path := range sysMemory {
		s, err := ioutil.ReadFile(filepath.Join(path, "state"))
		if err != nil {
			return -1, err
		}
		if strings.TrimSpace(string(s)) != "online" {
			continue
		}
		total += int64(blockSizeBytes)
	}
	return total, nil
}

func memTotalPhysicalBytesFromSyslog(paths *linuxpath.Paths) int64 {
	// In Linux, the total physical memory can be determined by looking at the
	// output of dmidecode, however dmidecode requires root privileges to run,
	// so instead we examine the system logs for startup information containing
	// total physical memory and cache the results of this.
	findPhysicalKb := func(line string) int64 {
		matches := _REGEX_SYSLOG_MEMLINE.FindStringSubmatch(line)
		if len(matches) == 2 {
			i, err := strconv.Atoi(matches[1])
			if err != nil {
				return -1
			}
			return int64(i * 1024)
		}
		return -1
	}

	// /var/log will contain a file called syslog and 0 or more files called
	// syslog.$NUMBER or syslog.$NUMBER.gz containing system log records. We
	// search each, stopping when we match a system log record line that
	// contains physical memory information.
	logDir := paths.VarLog
	logFiles, err := ioutil.ReadDir(logDir)
	if err != nil {
		return -1
	}
	for _, file := range logFiles {
		if strings.HasPrefix(file.Name(), "syslog") {
			fullPath := filepath.Join(logDir, file.Name())
			unzip := strings.HasSuffix(file.Name(), ".gz")
			var r io.ReadCloser
			r, err = os.Open(fullPath)
			if err != nil {
				return -1
			}
			defer util.SafeClose(r)
			if unzip {
				r, err = gzip.NewReader(r)
				if err != nil {
					return -1
				}
			}

			scanner := bufio.NewScanner(r)
			for scanner.Scan() {
				line := scanner.Text()
				size := findPhysicalKb(line)
				if size > 0 {
					return size
				}
			}
		}
	}
	return -1
}

func memTotalUsableBytes(paths *linuxpath.Paths) int64 {
	amount, err := memoryTotalUsableBytesFromPath(paths.ProcMeminfo)
	if err != nil {
		return -1
	}
	return amount
}

func memoryTotalUsableBytesFromPath(meminfoPath string) (int64, error) {
	// In Linux, /proc/meminfo or its close relative
	// /sys/devices/system/node/node*/meminfo
	// contains a set of memory-related amounts, with
	// lines looking like the following:
	//
	// $ cat /proc/meminfo
	// MemTotal:       24677596 kB
	// MemFree:        21244356 kB
	// MemAvailable:   22085432 kB
	// ...
	// HugePages_Total:       0
	// HugePages_Free:        0
	// HugePages_Rsvd:        0
	// HugePages_Surp:        0
	// ...
	//
	// It's worth noting that /proc/meminfo returns exact information, not
	// "theoretical" information. For instance, on the above system, I have
	// 24GB of RAM but MemTotal is indicating only around 23GB. This is because
	// MemTotal contains the exact amount of *usable* memory after accounting
	// for the kernel's resident memory size and a few reserved bits.
	// Please note GHW cares about the subset of lines shared between system-wide
	// and per-NUMA-node meminfos. For more information, see:
	//
	//  https://www.kernel.org/doc/Documentation/filesystems/proc.txt
	r, err := os.Open(meminfoPath)
	if err != nil {
		return -1, err
	}
	defer util.SafeClose(r)

	scanner := bufio.NewScanner(r)
	for scanner.Scan() {
		line := scanner.Text()
		parts := strings.Split(line, ":")
		key := parts[0]
		if !strings.Contains(key, "MemTotal") {
			continue
		}
		rawValue := parts[1]
		inKb := strings.HasSuffix(rawValue, "kB")
		value, err := strconv.Atoi(strings.TrimSpace(strings.TrimSuffix(rawValue, "kB")))
		if err != nil {
			return -1, err
		}
		if inKb {
			value = value * int(unitutil.KB)
		}
		return int64(value), nil
	}
	return -1, fmt.Errorf("failed to find MemTotal entry in path %q", meminfoPath)
}

func memorySupportedPageSizes(hpDir string) ([]uint64, error) {
	// In Linux, /sys/kernel/mm/hugepages contains a directory per page size
	// supported by the kernel. The directory name corresponds to the pattern
	// 'hugepages-{pagesize}kb'
	out := make([]uint64, 0)

	files, err := ioutil.ReadDir(hpDir)
	if err != nil {
		return out, err
	}
	for _, file := range files {
		parts := strings.Split(file.Name(), "-")
		sizeStr := parts[1]
		// Cut off the 'kb'
		sizeStr = sizeStr[0 : len(sizeStr)-2]
		size, err := strconv.Atoi(sizeStr)
		if err != nil {
			return out, err
		}
		out = append(out, uint64(size*int(unitutil.KB)))
	}
	return out, nil
}
   070701000007F3000081A4000000000000000000000001645E367C00000172000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/memory/memory_stub.go  //go:build !linux && !windows
// +build !linux,!windows

// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package memory

import (
	"runtime"

	"github.com/pkg/errors"
)

func (i *Info) load() error {
	return errors.New("mem.Info.load not implemented on " + runtime.GOOS)
}
  070701000007F4000081A4000000000000000000000001645E367C000008B8000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/memory/memory_windows.go   //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package memory

import (
	"github.com/StackExchange/wmi"

	"github.com/jaypipes/ghw/pkg/unitutil"
)

const wqlOperatingSystem = "SELECT TotalVisibleMemorySize FROM Win32_OperatingSystem"

type win32OperatingSystem struct {
	TotalVisibleMemorySize *uint64
}

const wqlPhysicalMemory = "SELECT BankLabel, Capacity, DataWidth, Description, DeviceLocator, Manufacturer, Model, Name, PartNumber, PositionInRow, SerialNumber, Speed, Tag, TotalWidth FROM Win32_PhysicalMemory"

type win32PhysicalMemory struct {
	BankLabel     *string
	Capacity      *uint64
	DataWidth     *uint16
	Description   *string
	DeviceLocator *string
	Manufacturer  *string
	Model         *string
	Name          *string
	PartNumber    *string
	PositionInRow *uint32
	SerialNumber  *string
	Speed         *uint32
	Tag           *string
	TotalWidth    *uint16
}

func (i *Info) load() error {
	// Getting info from WMI
	var win32OSDescriptions []win32OperatingSystem
	if err := wmi.Query(wqlOperatingSystem, &win32OSDescriptions); err != nil {
		return err
	}
	var win32MemDescriptions []win32PhysicalMemory
	if err := wmi.Query(wqlPhysicalMemory, &win32MemDescriptions); err != nil {
		return err
	}
	// We calculate total physical memory size by summing the DIMM sizes
	var totalPhysicalBytes uint64
	i.Modules = make([]*Module, 0, len(win32MemDescriptions))
	for _, description := range win32MemDescriptions {
		totalPhysicalBytes += *description.Capacity
		i.Modules = append(i.Modules, &Module{
			Label:        *description.BankLabel,
			Location:     *description.DeviceLocator,
			SerialNumber: *description.SerialNumber,
			SizeBytes:    int64(*description.Capacity),
			Vendor:       *description.Manufacturer,
		})
	}
	var totalUsableBytes uint64
	for _, description := range win32OSDescriptions {
		// TotalVisibleMemorySize is the amount of memory available for us by
		// the operating system **in Kilobytes**
		totalUsableBytes += *description.TotalVisibleMemorySize * uint64(unitutil.KB)
	}
	i.TotalUsableBytes = int64(totalUsableBytes)
	i.TotalPhysicalBytes = int64(totalPhysicalBytes)
	return nil
}
070701000007F5000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/net    070701000007F6000081A4000000000000000000000001645E367C000007E3000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/net/net.go //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package net

import (
	"fmt"

	"github.com/jaypipes/ghw/pkg/context"
	"github.com/jaypipes/ghw/pkg/marshal"
	"github.com/jaypipes/ghw/pkg/option"
)

type NICCapability struct {
	Name      string `json:"name"`
	IsEnabled bool   `json:"is_enabled"`
	CanEnable bool   `json:"can_enable"`
}

type NIC struct {
	Name         string           `json:"name"`
	MacAddress   string           `json:"mac_address"`
	IsVirtual    bool             `json:"is_virtual"`
	Capabilities []*NICCapability `json:"capabilities"`
	PCIAddress   *string          `json:"pci_address,omitempty"`
	// TODO(fromani): add other hw addresses (USB) when we support them
}

func (n *NIC) String() string {
	isVirtualStr := ""
	if n.IsVirtual {
		isVirtualStr = " (virtual)"
	}
	return fmt.Sprintf(
		"%s%s",
		n.Name,
		isVirtualStr,
	)
}

type Info struct {
	ctx  *context.Context
	NICs []*NIC `json:"nics"`
}

// New returns a pointer to an Info struct that contains information about the
// network interface controllers (NICs) on the host system
func New(opts ...*option.Option) (*Info, error) {
	ctx := context.New(opts...)
	info := &Info{ctx: ctx}
	if err := ctx.Do(info.load); err != nil {
		return nil, err
	}
	return info, nil
}

func (i *Info) String() string {
	return fmt.Sprintf(
		"net (%d NICs)",
		len(i.NICs),
	)
}

// simple private struct used to encapsulate net information in a
// top-level "net" YAML/JSON map/object key
type netPrinter struct {
	Info *Info `json:"network"`
}

// YAMLString returns a string with the net information formatted as YAML
// under a top-level "net:" key
func (i *Info) YAMLString() string {
	return marshal.SafeYAML(i.ctx, netPrinter{i})
}

// JSONString returns a string with the net information formatted as JSON
// under a top-level "net:" key
func (i *Info) JSONString(indent bool) string {
	return marshal.SafeJSON(i.ctx, netPrinter{i}, indent)
}
 070701000007F7000081A4000000000000000000000001645E367C000018A1000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/net/net_linux.go   // Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package net

import (
	"bufio"
	"bytes"
	"fmt"
	"io/ioutil"
	"os"
	"os/exec"
	"path/filepath"
	"strings"

	"github.com/jaypipes/ghw/pkg/context"
	"github.com/jaypipes/ghw/pkg/linuxpath"
)

const (
	_WARN_ETHTOOL_NOT_INSTALLED = `ethtool not installed. Cannot grab NIC capabilities`
)

func (i *Info) load() error {
	i.NICs = nics(i.ctx)
	return nil
}

func nics(ctx *context.Context) []*NIC {
	nics := make([]*NIC, 0)

	paths := linuxpath.New(ctx)
	files, err := ioutil.ReadDir(paths.SysClassNet)
	if err != nil {
		return nics
	}

	etAvailable := ctx.EnableTools
	if etAvailable {
		if etInstalled := ethtoolInstalled(); !etInstalled {
			ctx.Warn(_WARN_ETHTOOL_NOT_INSTALLED)
			etAvailable = false
		}
	}

	for _, file := range files {
		filename := file.Name()
		// Ignore loopback...
		if filename == "lo" {
			continue
		}

		netPath := filepath.Join(paths.SysClassNet, filename)
		dest, _ := os.Readlink(netPath)
		isVirtual := false
		if strings.Contains(dest, "devices/virtual/net") {
			isVirtual = true
		}

		nic := &NIC{
			Name:      filename,
			IsVirtual: isVirtual,
		}

		mac := netDeviceMacAddress(paths, filename)
		nic.MacAddress = mac
		if etAvailable {
			nic.Capabilities = netDeviceCapabilities(ctx, filename)
		} else {
			nic.Capabilities = []*NICCapability{}
		}

		nic.PCIAddress = netDevicePCIAddress(paths.SysClassNet, filename)

		nics = append(nics, nic)
	}
	return nics
}

func netDeviceMacAddress(paths *linuxpath.Paths, dev string) string {
	// Instead of use udevadm, we can get the device's MAC address by examing
	// the /sys/class/net/$DEVICE/address file in sysfs. However, for devices
	// that have addr_assign_type != 0, return None since the MAC address is
	// random.
	aatPath := filepath.Join(paths.SysClassNet, dev, "addr_assign_type")
	contents, err := ioutil.ReadFile(aatPath)
	if err != nil {
		return ""
	}
	if strings.TrimSpace(string(contents)) != "0" {
		return ""
	}
	addrPath := filepath.Join(paths.SysClassNet, dev, "address")
	contents, err = ioutil.ReadFile(addrPath)
	if err != nil {
		return ""
	}
	return strings.TrimSpace(string(contents))
}

func ethtoolInstalled() bool {
	_, err := exec.LookPath("ethtool")
	return err == nil
}

func netDeviceCapabilities(ctx *context.Context, dev string) []*NICCapability {
	caps := make([]*NICCapability, 0)
	path, _ := exec.LookPath("ethtool")
	cmd := exec.Command(path, "-k", dev)
	var out bytes.Buffer
	cmd.Stdout = &out
	err := cmd.Run()
	if err != nil {
		msg := fmt.Sprintf("could not grab NIC capabilities for %s: %s", dev, err)
		ctx.Warn(msg)
		return caps
	}

	// The out variable will now contain something that looks like the
	// following.
	//
	// Features for enp58s0f1:
	// rx-checksumming: on
	// tx-checksumming: off
	//     tx-checksum-ipv4: off
	//     tx-checksum-ip-generic: off [fixed]
	//     tx-checksum-ipv6: off
	//     tx-checksum-fcoe-crc: off [fixed]
	//     tx-checksum-sctp: off [fixed]
	// scatter-gather: off
	//     tx-scatter-gather: off
	//     tx-scatter-gather-fraglist: off [fixed]
	// tcp-segmentation-offload: off
	//     tx-tcp-segmentation: off
	//     tx-tcp-ecn-segmentation: off [fixed]
	//     tx-tcp-mangleid-segmentation: off
	//     tx-tcp6-segmentation: off
	// < snipped >
	scanner := bufio.NewScanner(&out)
	// Skip the first line...
	scanner.Scan()
	for scanner.Scan() {
		line := strings.TrimPrefix(scanner.Text(), "\t")
		caps = append(caps, netParseEthtoolFeature(line))
	}
	return caps
}

// netParseEthtoolFeature parses a line from the ethtool -k output and returns
// a NICCapability.
//
// The supplied line will look like the following:
//
// tx-checksum-ip-generic: off [fixed]
//
// [fixed] indicates that the feature may not be turned on/off. Note: it makes
// no difference whether a privileged user runs `ethtool -k` when determining
// whether [fixed] appears for a feature.
func netParseEthtoolFeature(line string) *NICCapability {
	parts := strings.Fields(line)
	cap := strings.TrimSuffix(parts[0], ":")
	enabled := parts[1] == "on"
	fixed := len(parts) == 3 && parts[2] == "[fixed]"
	return &NICCapability{
		Name:      cap,
		IsEnabled: enabled,
		CanEnable: !fixed,
	}
}

func netDevicePCIAddress(netDevDir, netDevName string) *string {
	// what we do here is not that hard in the end: we need to navigate the sysfs
	// up to the directory belonging to the device backing the network interface.
	// we can make few relatively safe assumptions, but the safest way is follow
	// the right links. And so we go.
	// First of all, knowing the network device name we need to resolve the backing
	// device path to its full sysfs path.
	// say we start with netDevDir="/sys/class/net" and netDevName="enp0s31f6"
	netPath := filepath.Join(netDevDir, netDevName)
	dest, err := os.Readlink(netPath)
	if err != nil {
		// bail out with empty value
		return nil
	}
	// now we have something like dest="../../devices/pci0000:00/0000:00:1f.6/net/enp0s31f6"
	// remember the path is relative to netDevDir="/sys/class/net"

	netDev := filepath.Clean(filepath.Join(netDevDir, dest))
	// so we clean "/sys/class/net/../../devices/pci0000:00/0000:00:1f.6/net/enp0s31f6"
	// leading to "/sys/devices/pci0000:00/0000:00:1f.6/net/enp0s31f6"
	// still not there. We need to access the data of the pci device. So we jump into the path
	// linked to the "device" pseudofile
	dest, err = os.Readlink(filepath.Join(netDev, "device"))
	if err != nil {
		// bail out with empty value
		return nil
	}
	// we expect something like="../../../0000:00:1f.6"

	devPath := filepath.Clean(filepath.Join(netDev, dest))
	// so we clean "/sys/devices/pci0000:00/0000:00:1f.6/net/enp0s31f6/../../../0000:00:1f.6"
	// leading to "/sys/devices/pci0000:00/0000:00:1f.6/"
	// finally here!

	// to which bus is this device connected to?
	dest, err = os.Readlink(filepath.Join(devPath, "subsystem"))
	if err != nil {
		// bail out with empty value
		return nil
	}
	// ok, this is hacky, but since we need the last *two* path components and we know we
	// are running on linux...
	if !strings.HasSuffix(dest, "/bus/pci") {
		// unsupported and unexpected bus!
		return nil
	}

	pciAddr := filepath.Base(devPath)
	return &pciAddr
}
   070701000007F8000081A4000000000000000000000001645E367C0000016D000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/net/net_stub.go    //go:build !linux && !windows
// +build !linux,!windows

// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package net

import (
	"runtime"

	"github.com/pkg/errors"
)

func (i *Info) load() error {
	return errors.New("netFillInfo not implemented on " + runtime.GOOS)
}
   070701000007F9000081A4000000000000000000000001645E367C00000744000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/net/net_windows.go // Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package net

import (
	"strings"

	"github.com/StackExchange/wmi"
)

const wqlNetworkAdapter = "SELECT Description, DeviceID, Index, InterfaceIndex, MACAddress, Manufacturer, Name, NetConnectionID, ProductName, ServiceName, PhysicalAdapter FROM Win32_NetworkAdapter"

type win32NetworkAdapter struct {
	Description     *string
	DeviceID        *string
	Index           *uint32
	InterfaceIndex  *uint32
	MACAddress      *string
	Manufacturer    *string
	Name            *string
	NetConnectionID *string
	ProductName     *string
	ServiceName     *string
	PhysicalAdapter *bool
}

func (i *Info) load() error {
	// Getting info from WMI
	var win32NetDescriptions []win32NetworkAdapter
	if err := wmi.Query(wqlNetworkAdapter, &win32NetDescriptions); err != nil {
		return err
	}

	i.NICs = nics(win32NetDescriptions)
	return nil
}

func nics(win32NetDescriptions []win32NetworkAdapter) []*NIC {
	// Converting into standard structures
	nics := make([]*NIC, 0)
	for _, nicDescription := range win32NetDescriptions {
		nic := &NIC{
			Name:         netDeviceName(nicDescription),
			MacAddress:   *nicDescription.MACAddress,
			IsVirtual:    netIsVirtual(nicDescription),
			Capabilities: []*NICCapability{},
		}
		// Appenging NIC to NICs
		nics = append(nics, nic)
	}

	return nics
}

func netDeviceName(description win32NetworkAdapter) string {
	var name string
	if strings.TrimSpace(*description.NetConnectionID) != "" {
		name = *description.NetConnectionID + " - " + *description.Description
	} else {
		name = *description.Description
	}
	return name
}

func netIsVirtual(description win32NetworkAdapter) bool {
	if description.PhysicalAdapter == nil {
		return false
	}

	return !(*description.PhysicalAdapter)
}
070701000007FA000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/option 070701000007FB000081A4000000000000000000000001645E367C00002183000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/option/option.go   //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package option

import (
	"io"
	"io/ioutil"
	"log"
	"os"
)

const (
	DefaultChroot = "/"
)

const (
	envKeyChroot            = "GHW_CHROOT"
	envKeyDisableWarnings   = "GHW_DISABLE_WARNINGS"
	envKeyDisableTools      = "GHW_DISABLE_TOOLS"
	envKeySnapshotPath      = "GHW_SNAPSHOT_PATH"
	envKeySnapshotRoot      = "GHW_SNAPSHOT_ROOT"
	envKeySnapshotExclusive = "GHW_SNAPSHOT_EXCLUSIVE"
	envKeySnapshotPreserve  = "GHW_SNAPSHOT_PRESERVE"
)

// Alerter emits warnings about undesirable but recoverable errors.
// We use a subset of a logger interface only to emit warnings, and
// `Warninger` sounded ugly.
type Alerter interface {
	Printf(format string, v ...interface{})
}

var (
	NullAlerter = log.New(ioutil.Discard, "", 0)
)

// EnvOrDefaultAlerter returns the default instance ghw will use to emit
// its warnings. ghw will emit warnings to stderr by default unless the
// environs variable GHW_DISABLE_WARNINGS is specified; in the latter case
// all warning will be suppressed.
func EnvOrDefaultAlerter() Alerter {
	var dest io.Writer
	if _, exists := os.LookupEnv(envKeyDisableWarnings); exists {
		dest = ioutil.Discard
	} else {
		// default
		dest = os.Stderr
	}
	return log.New(dest, "", 0)
}

// EnvOrDefaultChroot returns the value of the GHW_CHROOT environs variable or
// the default value of "/" if not set
func EnvOrDefaultChroot() string {
	// Grab options from the environs by default
	if val, exists := os.LookupEnv(envKeyChroot); exists {
		return val
	}
	return DefaultChroot
}

// EnvOrDefaultSnapshotPath returns the value of the GHW_SNAPSHOT_PATH environs variable
// or the default value of "" (disable snapshot consumption) if not set
func EnvOrDefaultSnapshotPath() string {
	if val, exists := os.LookupEnv(envKeySnapshotPath); exists {
		return val
	}
	return "" // default is no snapshot
}

// EnvOrDefaultSnapshotRoot returns the value of the the GHW_SNAPSHOT_ROOT environs variable
// or the default value of "" (self-manage the snapshot unpack directory, if relevant) if not set
func EnvOrDefaultSnapshotRoot() string {
	if val, exists := os.LookupEnv(envKeySnapshotRoot); exists {
		return val
	}
	return "" // default is to self-manage the snapshot directory
}

// EnvOrDefaultSnapshotExclusive returns the value of the GHW_SNAPSHOT_EXCLUSIVE environs variable
// or the default value of false if not set
func EnvOrDefaultSnapshotExclusive() bool {
	if _, exists := os.LookupEnv(envKeySnapshotExclusive); exists {
		return true
	}
	return false
}

// EnvOrDefaultSnapshotPreserve returns the value of the GHW_SNAPSHOT_PRESERVE environs variable
// or the default value of false if not set
func EnvOrDefaultSnapshotPreserve() bool {
	if _, exists := os.LookupEnv(envKeySnapshotPreserve); exists {
		return true
	}
	return false
}

// EnvOrDefaultTools return true if ghw should use external tools to augment the data collected
// from sysfs. Most users want to do this most of time, so this is enabled by default.
// Users consuming snapshots may want to opt out, thus they can set the GHW_DISABLE_TOOLS
// environs variable to any value to make ghw skip calling external tools even if they are available.
func EnvOrDefaultTools() bool {
	if _, exists := os.LookupEnv(envKeyDisableTools); exists {
		return false
	}
	return true
}

// Option is used to represent optionally-configured settings. Each field is a
// pointer to some concrete value so that we can tell when something has been
// set or left unset.
type Option struct {
	// To facilitate querying of sysfs filesystems that are bind-mounted to a
	// non-default root mountpoint, we allow users to set the GHW_CHROOT environ
	// variable to an alternate mountpoint. For instance, assume that the user of
	// ghw is a Golang binary being executed from an application container that has
	// certain host filesystems bind-mounted into the container at /host. The user
	// would ensure the GHW_CHROOT environ variable is set to "/host" and ghw will
	// build its paths from that location instead of /
	Chroot *string

	// Snapshot contains options for handling ghw snapshots
	Snapshot *SnapshotOptions

	// Alerter contains the target for ghw warnings
	Alerter Alerter

	// EnableTools optionally request ghw to not call any external program to learn
	// about the hardware. The default is to use such tools if available.
	EnableTools *bool

	// PathOverrides optionally allows to override the default paths ghw uses internally
	// to learn about the system resources.
	PathOverrides PathOverrides

	// Context may contain a pointer to a `Context` struct that is constructed
	// during a call to the `context.WithContext` function. Only used internally.
	// This is an interface to get around recursive package import issues.
	Context interface{}
}

// SnapshotOptions contains options for handling of ghw snapshots
type SnapshotOptions struct {
	// Path allows users to specify a snapshot (captured using ghw-snapshot) to be
	// automatically consumed. Users need to supply the path of the snapshot, and
	// ghw will take care of unpacking it on a temporary directory.
	// Set the environment variable "GHW_SNAPSHOT_PRESERVE" to make ghw skip the cleanup
	// stage and keep the unpacked snapshot in the temporary directory.
	Path string
	// Root is the directory on which the snapshot must be unpacked. This allows
	// the users to manage their snapshot directory instead of ghw doing that on
	// their behalf. Relevant only if SnapshotPath is given.
	Root *string
	// Exclusive tells ghw if the given directory should be considered of exclusive
	// usage of ghw or not If the user provides a Root. If the flag is set, ghw will
	// unpack the snapshot in the given SnapshotRoot iff the directory is empty; otherwise
	// any existing content will be left untouched and the unpack stage will exit silently.
	// As additional side effect, give both this option and SnapshotRoot to make each
	// context try to unpack the snapshot only once.
	Exclusive bool
}

// WithChroot allows to override the root directory ghw uses.
func WithChroot(dir string) *Option {
	return &Option{Chroot: &dir}
}

// WithSnapshot sets snapshot-processing options for a ghw run
func WithSnapshot(opts SnapshotOptions) *Option {
	return &Option{
		Snapshot: &opts,
	}
}

// WithAlerter sets alerting options for ghw
func WithAlerter(alerter Alerter) *Option {
	return &Option{
		Alerter: alerter,
	}
}

// WithNullAlerter sets No-op alerting options for ghw
func WithNullAlerter() *Option {
	return &Option{
		Alerter: NullAlerter,
	}
}

// WithDisableTools sets enables or prohibts ghw to call external tools to discover hardware capabilities.
func WithDisableTools() *Option {
	false_ := false
	return &Option{EnableTools: &false_}
}

// PathOverrides is a map, keyed by the string name of a mount path, of override paths
type PathOverrides map[string]string

// WithPathOverrides supplies path-specific overrides for the context
func WithPathOverrides(overrides PathOverrides) *Option {
	return &Option{
		PathOverrides: overrides,
	}
}

// There is intentionally no Option related to GHW_SNAPSHOT_PRESERVE because we see that as
// a debug/troubleshoot aid more something users wants to do regularly.
// Hence we allow that only via the environment variable for the time being.

// Merge accepts one or more Options and merges them together, returning the
// merged Option
func Merge(opts ...*Option) *Option {
	merged := &Option{}
	for _, opt := range opts {
		if opt.Chroot != nil {
			merged.Chroot = opt.Chroot
		}
		if opt.Snapshot != nil {
			merged.Snapshot = opt.Snapshot
		}
		if opt.Alerter != nil {
			merged.Alerter = opt.Alerter
		}
		if opt.EnableTools != nil {
			merged.EnableTools = opt.EnableTools
		}
		// intentionally only programmatically
		if opt.PathOverrides != nil {
			merged.PathOverrides = opt.PathOverrides
		}
		if opt.Context != nil {
			merged.Context = opt.Context
		}
	}
	// Set the default value if missing from mergeOpts
	if merged.Chroot == nil {
		chroot := EnvOrDefaultChroot()
		merged.Chroot = &chroot
	}
	if merged.Alerter == nil {
		merged.Alerter = EnvOrDefaultAlerter()
	}
	if merged.Snapshot == nil {
		snapRoot := EnvOrDefaultSnapshotRoot()
		merged.Snapshot = &SnapshotOptions{
			Path:      EnvOrDefaultSnapshotPath(),
			Root:      &snapRoot,
			Exclusive: EnvOrDefaultSnapshotExclusive(),
		}
	}
	if merged.EnableTools == nil {
		enabled := EnvOrDefaultTools()
		merged.EnableTools = &enabled
	}
	return merged
}
 070701000007FC000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/pci    070701000007FD000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/pci/address    070701000007FE000081A4000000000000000000000001645E367C00000535000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/pci/address/address.go //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package address

import (
	"regexp"
	"strings"
)

var (
	regexAddress *regexp.Regexp = regexp.MustCompile(
		`^(([0-9a-f]{0,4}):)?([0-9a-f]{2}):([0-9a-f]{2})\.([0-9a-f]{1})$`,
	)
)

// Address contains the components of a PCI Address
type Address struct {
	Domain   string
	Bus      string
	Device   string
	Function string
}

// String() returns the canonical [D]BDF representation of this Address
func (addr *Address) String() string {
	return addr.Domain + ":" + addr.Bus + ":" + addr.Device + "." + addr.Function
}

// FromString returns an Address struct from an ddress string in either
// $BUS:$DEVICE.$FUNCTION (BDF) format or it can be a full PCI address that
// includes the 4-digit $DOMAIN information as well:
// $DOMAIN:$BUS:$DEVICE.$FUNCTION.
//
// Returns "" if the address string wasn't a valid PCI address.
func FromString(address string) *Address {
	addrLowered := strings.ToLower(address)
	matches := regexAddress.FindStringSubmatch(addrLowered)
	if len(matches) == 6 {
		dom := "0000"
		if matches[1] != "" {
			dom = matches[2]
		}
		return &Address{
			Domain:   dom,
			Bus:      matches[3],
			Device:   matches[4],
			Function: matches[5],
		}
	}
	return nil
}
   070701000007FF000081A4000000000000000000000001645E367C000016BC000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/pci/pci.go //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package pci

import (
	"encoding/json"
	"fmt"

	"github.com/jaypipes/pcidb"

	"github.com/jaypipes/ghw/pkg/context"
	"github.com/jaypipes/ghw/pkg/marshal"
	"github.com/jaypipes/ghw/pkg/option"
	pciaddr "github.com/jaypipes/ghw/pkg/pci/address"
	"github.com/jaypipes/ghw/pkg/topology"
	"github.com/jaypipes/ghw/pkg/util"
)

// backward compatibility, to be removed in 1.0.0
type Address pciaddr.Address

// backward compatibility, to be removed in 1.0.0
var AddressFromString = pciaddr.FromString

type Device struct {
	// The PCI address of the device
	Address   string         `json:"address"`
	Vendor    *pcidb.Vendor  `json:"vendor"`
	Product   *pcidb.Product `json:"product"`
	Revision  string         `json:"revision"`
	Subsystem *pcidb.Product `json:"subsystem"`
	// optional subvendor/sub-device information
	Class *pcidb.Class `json:"class"`
	// optional sub-class for the device
	Subclass *pcidb.Subclass `json:"subclass"`
	// optional programming interface
	ProgrammingInterface *pcidb.ProgrammingInterface `json:"programming_interface"`
	// Topology node that the PCI device is affined to. Will be nil if the
	// architecture is not NUMA.
	Node   *topology.Node `json:"node,omitempty"`
	Driver string         `json:"driver"`
}

type devIdent struct {
	ID   string `json:"id"`
	Name string `json:"name"`
}

type devMarshallable struct {
	Driver    string   `json:"driver"`
	Address   string   `json:"address"`
	Vendor    devIdent `json:"vendor"`
	Product   devIdent `json:"product"`
	Revision  string   `json:"revision"`
	Subsystem devIdent `json:"subsystem"`
	Class     devIdent `json:"class"`
	Subclass  devIdent `json:"subclass"`
	Interface devIdent `json:"programming_interface"`
}

// NOTE(jaypipes) Device has a custom JSON marshaller because we don't want
// to serialize the entire PCIDB information for the Vendor (which includes all
// of the vendor's products, etc). Instead, we simply serialize the ID and
// human-readable name of the vendor, product, class, etc.
func (d *Device) MarshalJSON() ([]byte, error) {
	dm := devMarshallable{
		Driver:  d.Driver,
		Address: d.Address,
		Vendor: devIdent{
			ID:   d.Vendor.ID,
			Name: d.Vendor.Name,
		},
		Product: devIdent{
			ID:   d.Product.ID,
			Name: d.Product.Name,
		},
		Revision: d.Revision,
		Subsystem: devIdent{
			ID:   d.Subsystem.ID,
			Name: d.Subsystem.Name,
		},
		Class: devIdent{
			ID:   d.Class.ID,
			Name: d.Class.Name,
		},
		Subclass: devIdent{
			ID:   d.Subclass.ID,
			Name: d.Subclass.Name,
		},
		Interface: devIdent{
			ID:   d.ProgrammingInterface.ID,
			Name: d.ProgrammingInterface.Name,
		},
	}
	return json.Marshal(dm)
}

func (d *Device) String() string {
	vendorName := util.UNKNOWN
	if d.Vendor != nil {
		vendorName = d.Vendor.Name
	}
	productName := util.UNKNOWN
	if d.Product != nil {
		productName = d.Product.Name
	}
	className := util.UNKNOWN
	if d.Class != nil {
		className = d.Class.Name
	}
	return fmt.Sprintf(
		"%s -> driver: '%s' class: '%s' vendor: '%s' product: '%s'",
		d.Address,
		d.Driver,
		className,
		vendorName,
		productName,
	)
}

type Info struct {
	arch topology.Architecture
	ctx  *context.Context
	// All PCI devices on the host system
	Devices []*Device
	// hash of class ID -> class information
	// DEPRECATED. Will be removed in v1.0. Please use
	// github.com/jaypipes/pcidb to explore PCIDB information
	Classes map[string]*pcidb.Class `json:"-"`
	// hash of vendor ID -> vendor information
	// DEPRECATED. Will be removed in v1.0. Please use
	// github.com/jaypipes/pcidb to explore PCIDB information
	Vendors map[string]*pcidb.Vendor `json:"-"`
	// hash of vendor ID + product/device ID -> product information
	// DEPRECATED. Will be removed in v1.0. Please use
	// github.com/jaypipes/pcidb to explore PCIDB information
	Products map[string]*pcidb.Product `json:"-"`
}

func (i *Info) String() string {
	return fmt.Sprintf("PCI (%d devices)", len(i.Devices))
}

// New returns a pointer to an Info struct that contains information about the
// PCI devices on the host system
func New(opts ...*option.Option) (*Info, error) {
	merged := option.Merge(opts...)
	ctx := context.New(merged)
	// by default we don't report NUMA information;
	// we will only if are sure we are running on NUMA architecture
	info := &Info{
		arch: topology.ARCHITECTURE_SMP,
		ctx:  ctx,
	}

	// we do this trick because we need to make sure ctx.Setup() gets
	// a chance to run before any subordinate package is created reusing
	// our context.
	loadDetectingTopology := func() error {
		topo, err := topology.New(context.WithContext(ctx))
		if err == nil {
			info.arch = topo.Architecture
		} else {
			ctx.Warn("error detecting system topology: %v", err)
		}
		return info.load()
	}

	var err error
	if context.Exists(merged) {
		err = loadDetectingTopology()
	} else {
		err = ctx.Do(loadDetectingTopology)
	}
	if err != nil {
		return nil, err
	}
	return info, nil
}

// lookupDevice gets a device from cached data
func (info *Info) lookupDevice(address string) *Device {
	for _, dev := range info.Devices {
		if dev.Address == address {
			return dev
		}
	}
	return nil
}

// simple private struct used to encapsulate PCI information in a top-level
// "pci" YAML/JSON map/object key
type pciPrinter struct {
	Info *Info `json:"pci"`
}

// YAMLString returns a string with the PCI information formatted as YAML
// under a top-level "pci:" key
func (i *Info) YAMLString() string {
	return marshal.SafeYAML(i.ctx, pciPrinter{i})
}

// JSONString returns a string with the PCI information formatted as JSON
// under a top-level "pci:" key
func (i *Info) JSONString(indent bool) string {
	return marshal.SafeJSON(i.ctx, pciPrinter{i}, indent)
}
07070100000800000081A4000000000000000000000001645E367C00002DD4000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/pci/pci_linux.go   // Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package pci

import (
	"io/ioutil"
	"os"
	"path/filepath"
	"strings"

	"github.com/jaypipes/pcidb"

	"github.com/jaypipes/ghw/pkg/context"
	"github.com/jaypipes/ghw/pkg/linuxpath"
	"github.com/jaypipes/ghw/pkg/option"
	pciaddr "github.com/jaypipes/ghw/pkg/pci/address"
	"github.com/jaypipes/ghw/pkg/topology"
	"github.com/jaypipes/ghw/pkg/util"
)

const (
	// found running `wc` against real linux systems
	modAliasExpectedLength = 54
)

func (i *Info) load() error {
	// when consuming snapshots - most notably, but not only, in tests,
	// the context pkg forces the chroot value to the unpacked snapshot root.
	// This is intentional, intentionally transparent and ghw is prepared to handle this case.
	// However, `pcidb` is not. It doesn't know about ghw snaphots, nor it should.
	// so we need to complicate things a bit. If the user explicitely supplied
	// a chroot option, then we should honor it all across the stack, and passing down
	// the chroot to pcidb is the right thing to do. If, however, the chroot was
	// implcitely set by snapshot support, then this must be consumed by ghw only.
	// In this case we should NOT pass it down to pcidb.
	chroot := i.ctx.Chroot
	if i.ctx.SnapshotPath != "" {
		chroot = option.DefaultChroot
	}
	db, err := pcidb.New(pcidb.WithChroot(chroot))
	if err != nil {
		return err
	}
	i.Classes = db.Classes
	i.Vendors = db.Vendors
	i.Products = db.Products
	i.Devices = i.ListDevices()
	return nil
}

func getDeviceModaliasPath(ctx *context.Context, pciAddr *pciaddr.Address) string {
	paths := linuxpath.New(ctx)
	return filepath.Join(
		paths.SysBusPciDevices,
		pciAddr.String(),
		"modalias",
	)
}

func getDeviceRevision(ctx *context.Context, pciAddr *pciaddr.Address) string {
	paths := linuxpath.New(ctx)
	revisionPath := filepath.Join(
		paths.SysBusPciDevices,
		pciAddr.String(),
		"revision",
	)

	if _, err := os.Stat(revisionPath); err != nil {
		return ""
	}
	revision, err := ioutil.ReadFile(revisionPath)
	if err != nil {
		return ""
	}
	return strings.TrimSpace(string(revision))
}

func getDeviceNUMANode(ctx *context.Context, pciAddr *pciaddr.Address) *topology.Node {
	paths := linuxpath.New(ctx)
	numaNodePath := filepath.Join(paths.SysBusPciDevices, pciAddr.String(), "numa_node")

	if _, err := os.Stat(numaNodePath); err != nil {
		return nil
	}

	nodeIdx := util.SafeIntFromFile(ctx, numaNodePath)
	if nodeIdx == -1 {
		return nil
	}

	return &topology.Node{
		ID: nodeIdx,
	}
}

func getDeviceDriver(ctx *context.Context, pciAddr *pciaddr.Address) string {
	paths := linuxpath.New(ctx)
	driverPath := filepath.Join(paths.SysBusPciDevices, pciAddr.String(), "driver")

	if _, err := os.Stat(driverPath); err != nil {
		return ""
	}

	dest, err := os.Readlink(driverPath)
	if err != nil {
		return ""
	}
	return filepath.Base(dest)
}

type deviceModaliasInfo struct {
	vendorID     string
	productID    string
	subproductID string
	subvendorID  string
	classID      string
	subclassID   string
	progIfaceID  string
}

func parseModaliasFile(fp string) *deviceModaliasInfo {
	if _, err := os.Stat(fp); err != nil {
		return nil
	}
	data, err := ioutil.ReadFile(fp)
	if err != nil {
		return nil
	}

	return parseModaliasData(string(data))
}

func parseModaliasData(data string) *deviceModaliasInfo {
	// extra sanity check to avoid segfaults. We actually expect
	// the data to be exactly long `modAliasExpectedlength`, but
	// we will happily ignore any extra data we don't know how to
	// handle.
	if len(data) < modAliasExpectedLength {
		return nil
	}
	// The modalias file is an encoded file that looks like this:
	//
	// $ cat /sys/devices/pci0000\:00/0000\:00\:03.0/0000\:03\:00.0/modalias
	// pci:v000010DEd00001C82sv00001043sd00008613bc03sc00i00
	//
	// It is interpreted like so:
	//
	// pci: -- ignore
	// v000010DE -- PCI vendor ID
	// d00001C82 -- PCI device ID (the product/model ID)
	// sv00001043 -- PCI subsystem vendor ID
	// sd00008613 -- PCI subsystem device ID (subdevice product/model ID)
	// bc03 -- PCI base class
	// sc00 -- PCI subclass
	// i00 -- programming interface
	vendorID := strings.ToLower(data[9:13])
	productID := strings.ToLower(data[18:22])
	subvendorID := strings.ToLower(data[28:32])
	subproductID := strings.ToLower(data[38:42])
	classID := data[44:46]
	subclassID := data[48:50]
	progIfaceID := data[51:53]
	return &deviceModaliasInfo{
		vendorID:     vendorID,
		productID:    productID,
		subproductID: subproductID,
		subvendorID:  subvendorID,
		classID:      classID,
		subclassID:   subclassID,
		progIfaceID:  progIfaceID,
	}
}

// Returns a pointer to a pcidb.Vendor struct matching the supplied vendor
// ID string. If no such vendor ID string could be found, returns the
// pcidb.Vendor struct populated with "unknown" vendor Name attribute and
// empty Products attribute.
func findPCIVendor(info *Info, vendorID string) *pcidb.Vendor {
	vendor := info.Vendors[vendorID]
	if vendor == nil {
		return &pcidb.Vendor{
			ID:       vendorID,
			Name:     util.UNKNOWN,
			Products: []*pcidb.Product{},
		}
	}
	return vendor
}

// Returns a pointer to a pcidb.Product struct matching the supplied vendor
// and product ID strings. If no such product could be found, returns the
// pcidb.Product struct populated with "unknown" product Name attribute and
// empty Subsystems attribute.
func findPCIProduct(
	info *Info,
	vendorID string,
	productID string,
) *pcidb.Product {
	product := info.Products[vendorID+productID]
	if product == nil {
		return &pcidb.Product{
			ID:         productID,
			Name:       util.UNKNOWN,
			Subsystems: []*pcidb.Product{},
		}
	}
	return product
}

// Returns a pointer to a pcidb.Product struct matching the supplied vendor,
// product, subvendor and subproduct ID strings. If no such product could be
// found, returns the pcidb.Product struct populated with "unknown" product
// Name attribute and empty Subsystems attribute.
func findPCISubsystem(
	info *Info,
	vendorID string,
	productID string,
	subvendorID string,
	subproductID string,
) *pcidb.Product {
	product := info.Products[vendorID+productID]
	subvendor := info.Vendors[subvendorID]
	if subvendor != nil && product != nil {
		for _, p := range product.Subsystems {
			if p.ID == subproductID {
				return p
			}
		}
	}
	return &pcidb.Product{
		VendorID: subvendorID,
		ID:       subproductID,
		Name:     util.UNKNOWN,
	}
}

// Returns a pointer to a pcidb.Class struct matching the supplied class ID
// string. If no such class ID string could be found, returns the
// pcidb.Class struct populated with "unknown" class Name attribute and
// empty Subclasses attribute.
func findPCIClass(info *Info, classID string) *pcidb.Class {
	class := info.Classes[classID]
	if class == nil {
		return &pcidb.Class{
			ID:         classID,
			Name:       util.UNKNOWN,
			Subclasses: []*pcidb.Subclass{},
		}
	}
	return class
}

// Returns a pointer to a pcidb.Subclass struct matching the supplied class
// and subclass ID strings.  If no such subclass could be found, returns the
// pcidb.Subclass struct populated with "unknown" subclass Name attribute
// and empty ProgrammingInterfaces attribute.
func findPCISubclass(
	info *Info,
	classID string,
	subclassID string,
) *pcidb.Subclass {
	class := info.Classes[classID]
	if class != nil {
		for _, sc := range class.Subclasses {
			if sc.ID == subclassID {
				return sc
			}
		}
	}
	return &pcidb.Subclass{
		ID:                    subclassID,
		Name:                  util.UNKNOWN,
		ProgrammingInterfaces: []*pcidb.ProgrammingInterface{},
	}
}

// Returns a pointer to a pcidb.ProgrammingInterface struct matching the
// supplied class, subclass and programming interface ID strings.  If no such
// programming interface could be found, returns the
// pcidb.ProgrammingInterface struct populated with "unknown" Name attribute
func findPCIProgrammingInterface(
	info *Info,
	classID string,
	subclassID string,
	progIfaceID string,
) *pcidb.ProgrammingInterface {
	subclass := findPCISubclass(info, classID, subclassID)
	for _, pi := range subclass.ProgrammingInterfaces {
		if pi.ID == progIfaceID {
			return pi
		}
	}
	return &pcidb.ProgrammingInterface{
		ID:   progIfaceID,
		Name: util.UNKNOWN,
	}
}

// GetDevice returns a pointer to a Device struct that describes the PCI
// device at the requested address. If no such device could be found, returns nil.
func (info *Info) GetDevice(address string) *Device {
	// check cached data first
	if dev := info.lookupDevice(address); dev != nil {
		return dev
	}

	pciAddr := pciaddr.FromString(address)
	if pciAddr == nil {
		info.ctx.Warn("error parsing the pci address %q", address)
		return nil
	}

	// no cached data, let's get the information from system.
	fp := getDeviceModaliasPath(info.ctx, pciAddr)
	if fp == "" {
		info.ctx.Warn("error finding modalias info for device %q", address)
		return nil
	}

	modaliasInfo := parseModaliasFile(fp)
	if modaliasInfo == nil {
		info.ctx.Warn("error parsing modalias info for device %q", address)
		return nil
	}

	device := info.getDeviceFromModaliasInfo(address, modaliasInfo)
	device.Revision = getDeviceRevision(info.ctx, pciAddr)
	if info.arch == topology.ARCHITECTURE_NUMA {
		device.Node = getDeviceNUMANode(info.ctx, pciAddr)
	}
	device.Driver = getDeviceDriver(info.ctx, pciAddr)
	return device
}

// ParseDevice returns a pointer to a Device given its describing data.
// The PCI device obtained this way may not exist in the system;
// use GetDevice to get a *Device which is found in the system
func (info *Info) ParseDevice(address, modalias string) *Device {
	modaliasInfo := parseModaliasData(modalias)
	if modaliasInfo == nil {
		return nil
	}
	return info.getDeviceFromModaliasInfo(address, modaliasInfo)
}

func (info *Info) getDeviceFromModaliasInfo(address string, modaliasInfo *deviceModaliasInfo) *Device {
	vendor := findPCIVendor(info, modaliasInfo.vendorID)
	product := findPCIProduct(
		info,
		modaliasInfo.vendorID,
		modaliasInfo.productID,
	)
	subsystem := findPCISubsystem(
		info,
		modaliasInfo.vendorID,
		modaliasInfo.productID,
		modaliasInfo.subvendorID,
		modaliasInfo.subproductID,
	)
	class := findPCIClass(info, modaliasInfo.classID)
	subclass := findPCISubclass(
		info,
		modaliasInfo.classID,
		modaliasInfo.subclassID,
	)
	progIface := findPCIProgrammingInterface(
		info,
		modaliasInfo.classID,
		modaliasInfo.subclassID,
		modaliasInfo.progIfaceID,
	)

	return &Device{
		Address:              address,
		Vendor:               vendor,
		Subsystem:            subsystem,
		Product:              product,
		Class:                class,
		Subclass:             subclass,
		ProgrammingInterface: progIface,
	}
}

// ListDevices returns a list of pointers to Device structs present on the
// host system
// DEPRECATED. Will be removed in v1.0. Please use
// github.com/jaypipes/pcidb to explore PCIDB information
func (info *Info) ListDevices() []*Device {
	paths := linuxpath.New(info.ctx)
	devs := make([]*Device, 0)
	// We scan the /sys/bus/pci/devices directory which contains a collection
	// of symlinks. The names of the symlinks are all the known PCI addresses
	// for the host. For each address, we grab a *Device matching the
	// address and append to the returned array.
	links, err := ioutil.ReadDir(paths.SysBusPciDevices)
	if err != nil {
		info.ctx.Warn("failed to read /sys/bus/pci/devices")
		return nil
	}
	var dev *Device
	for _, link := range links {
		addr := link.Name()
		dev = info.GetDevice(addr)
		if dev == nil {
			info.ctx.Warn("failed to get device information for PCI address %s", addr)
		} else {
			devs = append(devs, dev)
		}
	}
	return devs
}
07070100000801000081A4000000000000000000000001645E367C000002D0000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/pci/pci_stub.go    //go:build !linux
// +build !linux

// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package pci

import (
	"runtime"

	"github.com/pkg/errors"
)

func (i *Info) load() error {
	return errors.New("pciFillInfo not implemented on " + runtime.GOOS)
}

// GetDevice returns a pointer to a Device struct that describes the PCI
// device at the requested address. If no such device could be found, returns
// nil
func (info *Info) GetDevice(address string) *Device {
	return nil
}

// ListDevices returns a list of pointers to Device structs present on the
// host system
func (info *Info) ListDevices() []*Device {
	return nil
}
07070100000802000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/product    07070100000803000081A4000000000000000000000001645E367C00000917000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/product/product.go //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package product

import (
	"github.com/jaypipes/ghw/pkg/context"
	"github.com/jaypipes/ghw/pkg/marshal"
	"github.com/jaypipes/ghw/pkg/option"
	"github.com/jaypipes/ghw/pkg/util"
)

// Info defines product information
type Info struct {
	ctx          *context.Context
	Family       string `json:"family"`
	Name         string `json:"name"`
	Vendor       string `json:"vendor"`
	SerialNumber string `json:"serial_number"`
	UUID         string `json:"uuid"`
	SKU          string `json:"sku"`
	Version      string `json:"version"`
}

func (i *Info) String() string {
	familyStr := ""
	if i.Family != "" {
		familyStr = " family=" + i.Family
	}
	nameStr := ""
	if i.Name != "" {
		nameStr = " name=" + i.Name
	}
	vendorStr := ""
	if i.Vendor != "" {
		vendorStr = " vendor=" + i.Vendor
	}
	serialStr := ""
	if i.SerialNumber != "" && i.SerialNumber != util.UNKNOWN {
		serialStr = " serial=" + i.SerialNumber
	}
	uuidStr := ""
	if i.UUID != "" && i.UUID != util.UNKNOWN {
		uuidStr = " uuid=" + i.UUID
	}
	skuStr := ""
	if i.SKU != "" {
		skuStr = " sku=" + i.SKU
	}
	versionStr := ""
	if i.Version != "" {
		versionStr = " version=" + i.Version
	}

	return "product" + util.ConcatStrings(
		familyStr,
		nameStr,
		vendorStr,
		serialStr,
		uuidStr,
		skuStr,
		versionStr,
	)
}

// New returns a pointer to a Info struct containing information
// about the host's product
func New(opts ...*option.Option) (*Info, error) {
	ctx := context.New(opts...)
	info := &Info{ctx: ctx}
	if err := ctx.Do(info.load); err != nil {
		return nil, err
	}
	return info, nil
}

// simple private struct used to encapsulate product information in a top-level
// "product" YAML/JSON map/object key
type productPrinter struct {
	Info *Info `json:"product"`
}

// YAMLString returns a string with the product information formatted as YAML
// under a top-level "dmi:" key
func (info *Info) YAMLString() string {
	return marshal.SafeYAML(info.ctx, productPrinter{info})
}

// JSONString returns a string with the product information formatted as JSON
// under a top-level "product:" key
func (info *Info) JSONString(indent bool) string {
	return marshal.SafeJSON(info.ctx, productPrinter{info}, indent)
}
 07070100000804000081A4000000000000000000000001645E367C0000025F000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/product/product_linux.go   // Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package product

import (
	"github.com/jaypipes/ghw/pkg/linuxdmi"
)

func (i *Info) load() error {

	i.Family = linuxdmi.Item(i.ctx, "product_family")
	i.Name = linuxdmi.Item(i.ctx, "product_name")
	i.Vendor = linuxdmi.Item(i.ctx, "sys_vendor")
	i.SerialNumber = linuxdmi.Item(i.ctx, "product_serial")
	i.UUID = linuxdmi.Item(i.ctx, "product_uuid")
	i.SKU = linuxdmi.Item(i.ctx, "product_sku")
	i.Version = linuxdmi.Item(i.ctx, "product_version")

	return nil
}
 07070100000805000081A4000000000000000000000001645E367C00000175000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/product/product_stub.go    //go:build !linux && !windows
// +build !linux,!windows

// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package product

import (
	"runtime"

	"github.com/pkg/errors"
)

func (i *Info) load() error {
	return errors.New("productFillInfo not implemented on " + runtime.GOOS)
}
   07070100000806000081A4000000000000000000000001645E367C000004E9000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/product/product_windows.go // Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package product

import (
	"github.com/StackExchange/wmi"

	"github.com/jaypipes/ghw/pkg/util"
)

const wqlProduct = "SELECT Caption, Description, IdentifyingNumber, Name, SKUNumber, Vendor, Version, UUID FROM Win32_ComputerSystemProduct"

type win32Product struct {
	Caption           *string
	Description       *string
	IdentifyingNumber *string
	Name              *string
	SKUNumber         *string
	Vendor            *string
	Version           *string
	UUID              *string
}

func (i *Info) load() error {
	// Getting data from WMI
	var win32ProductDescriptions []win32Product
	// Assuming the first product is the host...
	if err := wmi.Query(wqlProduct, &win32ProductDescriptions); err != nil {
		return err
	}
	if len(win32ProductDescriptions) > 0 {
		i.Family = util.UNKNOWN
		i.Name = *win32ProductDescriptions[0].Name
		i.Vendor = *win32ProductDescriptions[0].Vendor
		i.SerialNumber = *win32ProductDescriptions[0].IdentifyingNumber
		i.UUID = *win32ProductDescriptions[0].UUID
		i.SKU = *win32ProductDescriptions[0].SKUNumber
		i.Version = *win32ProductDescriptions[0].Version
	}

	return nil
}
   07070100000807000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/snapshot   07070100000808000081A4000000000000000000000001645E367C000019F0000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/snapshot/clonetree.go  //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package snapshot

import (
	"errors"
	"io/ioutil"
	"os"
	"path/filepath"
	"strings"
)

// Attempting to tar up pseudofiles like /proc/cpuinfo is an exercise in
// futility. Notably, the pseudofiles, when read by syscalls, do not return the
// number of bytes read. This causes the tar writer to write zero-length files.
//
// Instead, it is necessary to build a directory structure in a tmpdir and
// create actual files with copies of the pseudofile contents

// CloneTreeInto copies all the pseudofiles that ghw will consume into the root
// `scratchDir`, preserving the hieratchy.
func CloneTreeInto(scratchDir string) error {
	err := setupScratchDir(scratchDir)
	if err != nil {
		return err
	}
	fileSpecs := ExpectedCloneContent()
	return CopyFilesInto(fileSpecs, scratchDir, nil)
}

// ExpectedCloneContent return a slice of glob patterns which represent the pseudofiles
// ghw cares about.
// The intended usage of this function is to validate a clone tree, checking that the
// content matches the expectations.
// Beware: the content is host-specific, because the content pertaining some subsystems,
// most notably PCI, is host-specific and unpredictable.
func ExpectedCloneContent() []string {
	fileSpecs := ExpectedCloneStaticContent()
	fileSpecs = append(fileSpecs, ExpectedCloneNetContent()...)
	fileSpecs = append(fileSpecs, ExpectedClonePCIContent()...)
	fileSpecs = append(fileSpecs, ExpectedCloneGPUContent()...)
	return fileSpecs
}

// ValidateClonedTree checks the content of a cloned tree, whose root is `clonedDir`,
// against a slice of glob specs which must be included in the cloned tree.
// Is not wrong, and this functions doesn't enforce this, that the cloned tree includes
// more files than the necessary; ghw will just ignore the files it doesn't care about.
// Returns a slice of glob patters expected (given) but not found in the cloned tree,
// and the error during the validation (if any).
func ValidateClonedTree(fileSpecs []string, clonedDir string) ([]string, error) {
	missing := []string{}
	for _, fileSpec := range fileSpecs {
		matches, err := filepath.Glob(filepath.Join(clonedDir, fileSpec))
		if err != nil {
			return missing, err
		}
		if len(matches) == 0 {
			missing = append(missing, fileSpec)
		}
	}
	return missing, nil
}

// CopyFileOptions allows to finetune the behaviour of the CopyFilesInto function
type CopyFileOptions struct {
	// IsSymlinkFn allows to control the behaviour when handling a symlink.
	// If this hook returns true, the source file is treated as symlink: the cloned
	// tree will thus contain a symlink, with its path adjusted to match the relative
	// path inside the cloned tree. If return false, the symlink will be deferred.
	// The easiest use case of this hook is if you want to avoid symlinks in your cloned
	// tree (having duplicated content). In this case you can just add a function
	// which always return false.
	IsSymlinkFn func(path string, info os.FileInfo) bool
	// ShouldCreateDirFn allows to control if empty directories listed as clone
	// content should be created or not. When creating snapshots, empty directories
	// are most often useless (but also harmless). Because of this, directories are only
	// created as side effect of copying the files which are inside, and thus directories
	// are never empty. The only notable exception are device driver on linux: in this
	// case, for a number of technical/historical reasons, we care about the directory
	// name, but not about the files which are inside.
	// Hence, this is the only case on which ghw clones empty directories.
	ShouldCreateDirFn func(path string, info os.FileInfo) bool
}

// CopyFilesInto copies all the given glob files specs in the given `destDir` directory,
// preserving the directory structure. This means you can provide a deeply nested filespec
// like
// - /some/deeply/nested/file*
// and you DO NOT need to build the tree incrementally like
// - /some/
// - /some/deeply/
// ...
// all glob patterns supported in `filepath.Glob` are supported.
func CopyFilesInto(fileSpecs []string, destDir string, opts *CopyFileOptions) error {
	if opts == nil {
		opts = &CopyFileOptions{
			IsSymlinkFn:       isSymlink,
			ShouldCreateDirFn: isDriversDir,
		}
	}
	for _, fileSpec := range fileSpecs {
		trace("copying spec: %q\n", fileSpec)
		matches, err := filepath.Glob(fileSpec)
		if err != nil {
			return err
		}
		if err := copyFileTreeInto(matches, destDir, opts); err != nil {
			return err
		}
	}
	return nil
}

func copyFileTreeInto(paths []string, destDir string, opts *CopyFileOptions) error {
	for _, path := range paths {
		trace("  copying path: %q\n", path)
		baseDir := filepath.Dir(path)
		if err := os.MkdirAll(filepath.Join(destDir, baseDir), os.ModePerm); err != nil {
			return err
		}

		fi, err := os.Lstat(path)
		if err != nil {
			return err
		}
		// directories must be listed explicitly and created separately.
		// In the future we may want to expose this decision as hook point in
		// CopyFileOptions, when clear use cases emerge.
		destPath := filepath.Join(destDir, path)
		if fi.IsDir() {
			if opts.ShouldCreateDirFn(path, fi) {
				if err := os.MkdirAll(destPath, os.ModePerm); err != nil {
					return err
				}
			} else {
				trace("expanded glob path %q is a directory - skipped\n", path)
			}
			continue
		}
		if opts.IsSymlinkFn(path, fi) {
			trace("    copying link: %q -> %q\n", path, destPath)
			if err := copyLink(path, destPath); err != nil {
				return err
			}
		} else {
			trace("    copying file: %q -> %q\n", path, destPath)
			if err := copyPseudoFile(path, destPath); err != nil && !errors.Is(err, os.ErrPermission) {
				return err
			}
		}
	}
	return nil
}

func isSymlink(path string, fi os.FileInfo) bool {
	return fi.Mode()&os.ModeSymlink != 0
}

func isDriversDir(path string, fi os.FileInfo) bool {
	return strings.Contains(path, "drivers")
}

func copyLink(path, targetPath string) error {
	target, err := os.Readlink(path)
	if err != nil {
		return err
	}
	trace("      symlink %q -> %q\n", target, targetPath)
	if err := os.Symlink(target, targetPath); err != nil {
		if errors.Is(err, os.ErrExist) {
			return nil
		}
		return err
	}

	return nil
}

func copyPseudoFile(path, targetPath string) error {
	buf, err := ioutil.ReadFile(path)
	if err != nil {
		return err
	}
	trace("creating %s\n", targetPath)
	f, err := os.Create(targetPath)
	if err != nil {
		return err
	}
	if _, err = f.Write(buf); err != nil {
		return err
	}
	f.Close()
	return nil
}
07070100000809000081A4000000000000000000000001645E367C00001A05000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/snapshot/clonetree_block_linux.go  //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package snapshot

import (
	"errors"
	"io/ioutil"
	"os"
	"path/filepath"
	"strings"
)

func createBlockDevices(buildDir string) error {
	// Grab all the block device pseudo-directories from /sys/block symlinks
	// (excluding loopback devices) and inject them into our build filesystem
	// with all but the circular symlink'd subsystem directories
	devLinks, err := ioutil.ReadDir("/sys/block")
	if err != nil {
		return err
	}
	for _, devLink := range devLinks {
		dname := devLink.Name()
		if strings.HasPrefix(dname, "loop") {
			continue
		}
		devPath := filepath.Join("/sys/block", dname)
		trace("processing block device %q\n", devPath)

		// from the sysfs layout, we know this is always a symlink
		linkContentPath, err := os.Readlink(devPath)
		if err != nil {
			return err
		}
		trace("link target for block device %q is %q\n", devPath, linkContentPath)

		// Create a symlink in our build filesystem that is a directory
		// pointing to the actual device bus path where the block device's
		// information directory resides
		linkPath := filepath.Join(buildDir, "sys/block", dname)
		linkTargetPath := filepath.Join(
			buildDir,
			"sys/block",
			strings.TrimPrefix(linkContentPath, string(os.PathSeparator)),
		)
		trace("creating device directory %s\n", linkTargetPath)
		if err = os.MkdirAll(linkTargetPath, os.ModePerm); err != nil {
			return err
		}

		trace("linking device directory %s to %s\n", linkPath, linkContentPath)
		// Make sure the link target is a relative path!
		// if we use absolute path, the link target will be an absolute path starting
		// with buildDir, hence the snapshot will contain broken link.
		// Otherwise, the unpack directory will never have the same prefix of buildDir!
		if err = os.Symlink(linkContentPath, linkPath); err != nil {
			return err
		}
		// Now read the source block device directory and populate the
		// newly-created target link in the build directory with the
		// appropriate block device pseudofiles
		srcDeviceDir := filepath.Join(
			"/sys/block",
			strings.TrimPrefix(linkContentPath, string(os.PathSeparator)),
		)
		trace("creating device directory %q from %q\n", linkTargetPath, srcDeviceDir)
		if err = createBlockDeviceDir(linkTargetPath, srcDeviceDir); err != nil {
			return err
		}
	}
	return nil
}

func createBlockDeviceDir(buildDeviceDir string, srcDeviceDir string) error {
	// Populate the supplied directory (in our build filesystem) with all the
	// appropriate information pseudofile contents for the block device.
	devName := filepath.Base(srcDeviceDir)
	devFiles, err := ioutil.ReadDir(srcDeviceDir)
	if err != nil {
		return err
	}
	for _, f := range devFiles {
		fname := f.Name()
		fp := filepath.Join(srcDeviceDir, fname)
		fi, err := os.Lstat(fp)
		if err != nil {
			return err
		}
		if fi.Mode()&os.ModeSymlink != 0 {
			// Ignore any symlinks in the deviceDir since they simply point to
			// either self-referential links or information we aren't
			// interested in like "subsystem"
			continue
		} else if fi.IsDir() {
			if strings.HasPrefix(fname, devName) {
				// We're interested in are the directories that begin with the
				// block device name. These are directories with information
				// about the partitions on the device
				buildPartitionDir := filepath.Join(
					buildDeviceDir, fname,
				)
				srcPartitionDir := filepath.Join(
					srcDeviceDir, fname,
				)
				trace("creating partition directory %s\n", buildPartitionDir)
				err = os.MkdirAll(buildPartitionDir, os.ModePerm)
				if err != nil {
					return err
				}
				err = createPartitionDir(buildPartitionDir, srcPartitionDir)
				if err != nil {
					return err
				}
			}
		} else if fi.Mode().IsRegular() {
			// Regular files in the block device directory are both regular and
			// pseudofiles containing information such as the size (in sectors)
			// and whether the device is read-only
			buf, err := ioutil.ReadFile(fp)
			if err != nil {
				if errors.Is(err, os.ErrPermission) {
					// example: /sys/devices/virtual/block/zram0/compact is 0400
					trace("permission denied reading %q - skipped\n", fp)
					continue
				}
				return err
			}
			targetPath := filepath.Join(buildDeviceDir, fname)
			trace("creating %s\n", targetPath)
			f, err := os.Create(targetPath)
			if err != nil {
				return err
			}
			if _, err = f.Write(buf); err != nil {
				return err
			}
			f.Close()
		}
	}
	// There is a special file $DEVICE_DIR/queue/rotational that, for some hard
	// drives, contains a 1 or 0 indicating whether the device is a spinning
	// disk or not
	srcQueueDir := filepath.Join(
		srcDeviceDir,
		"queue",
	)
	buildQueueDir := filepath.Join(
		buildDeviceDir,
		"queue",
	)
	err = os.MkdirAll(buildQueueDir, os.ModePerm)
	if err != nil {
		return err
	}
	fp := filepath.Join(srcQueueDir, "rotational")
	buf, err := ioutil.ReadFile(fp)
	if err != nil {
		return err
	}
	targetPath := filepath.Join(buildQueueDir, "rotational")
	trace("creating %s\n", targetPath)
	f, err := os.Create(targetPath)
	if err != nil {
		return err
	}
	if _, err = f.Write(buf); err != nil {
		return err
	}
	f.Close()

	return nil
}

func createPartitionDir(buildPartitionDir string, srcPartitionDir string) error {
	// Populate the supplied directory (in our build filesystem) with all the
	// appropriate information pseudofile contents for the partition.
	partFiles, err := ioutil.ReadDir(srcPartitionDir)
	if err != nil {
		return err
	}
	for _, f := range partFiles {
		fname := f.Name()
		fp := filepath.Join(srcPartitionDir, fname)
		fi, err := os.Lstat(fp)
		if err != nil {
			return err
		}
		if fi.Mode()&os.ModeSymlink != 0 {
			// Ignore any symlinks in the partition directory since they simply
			// point to information we aren't interested in like "subsystem"
			continue
		} else if fi.IsDir() {
			// The subdirectories in the partition directory are not
			// interesting for us. They have information about power events and
			// traces
			continue
		} else if fi.Mode().IsRegular() {
			// Regular files in the block device directory are both regular and
			// pseudofiles containing information such as the size (in sectors)
			// and whether the device is read-only
			buf, err := ioutil.ReadFile(fp)
			if err != nil {
				return err
			}
			targetPath := filepath.Join(buildPartitionDir, fname)
			trace("creating %s\n", targetPath)
			f, err := os.Create(targetPath)
			if err != nil {
				return err
			}
			if _, err = f.Write(buf); err != nil {
				return err
			}
			f.Close()
		}
	}
	return nil
}
   0707010000080A000081A4000000000000000000000001645E367C0000033F000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/snapshot/clonetree_gpu_linux.go    //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package snapshot

import (
	"strings"
)

// ExpectedCloneGPUContent returns a slice of strings pertaining to the GPU devices ghw
// cares about. We cannot use a static list because we want to grab only the first cardX data
// (see comment in pkg/gpu/gpu_linux.go)
// Additionally, we want to make sure to clone the backing device data.
func ExpectedCloneGPUContent() []string {
	cardEntries := []string{
		"device",
	}

	filterName := func(cardName string) bool {
		if !strings.HasPrefix(cardName, "card") {
			return false
		}
		if strings.ContainsRune(cardName, '-') {
			return false
		}
		return true
	}

	return cloneContentByClass("drm", cardEntries, filterName, filterNone)
}
 0707010000080B000081A4000000000000000000000001645E367C00000D52000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/snapshot/clonetree_linux.go    //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package snapshot

import (
	"io/ioutil"
	"os"
	"path/filepath"
)

func setupScratchDir(scratchDir string) error {
	var createPaths = []string{
		"sys/block",
	}

	for _, path := range createPaths {
		if err := os.MkdirAll(filepath.Join(scratchDir, path), os.ModePerm); err != nil {
			return err
		}
	}

	return createBlockDevices(scratchDir)
}

// ExpectedCloneStaticContent return a slice of glob patterns which represent the pseudofiles
// ghw cares about, and which are independent from host specific topology or configuration,
// thus are safely represented by a static slice - e.g. they don't need to be discovered at runtime.
func ExpectedCloneStaticContent() []string {
	return []string{
		"/proc/cpuinfo",
		"/proc/meminfo",
		"/proc/self/mounts",
		"/sys/devices/system/cpu/cpu*/cache/index*/*",
		"/sys/devices/system/cpu/cpu*/topology/*",
		"/sys/devices/system/memory/block_size_bytes",
		"/sys/devices/system/memory/memory*/online",
		"/sys/devices/system/memory/memory*/state",
		"/sys/devices/system/node/has_*",
		"/sys/devices/system/node/online",
		"/sys/devices/system/node/possible",
		"/sys/devices/system/node/node*/cpu*",
		"/sys/devices/system/node/node*/distance",
		"/sys/devices/system/node/node*/meminfo",
		"/sys/devices/system/node/node*/memory*",
		"/sys/devices/system/node/node*/hugepages/hugepages-*/*",
	}
}

type filterFunc func(string) bool

// cloneContentByClass copies all the content related to a given device class
// (devClass), possibly filtering out devices whose name does NOT pass a
// filter (filterName). Each entry in `/sys/class/$CLASS` is actually a
// symbolic link. We can filter out entries depending on the link target.
// Each filter is a simple function which takes the entry name or the link
// target and must return true if the entry should be collected, false
// otherwise. Last, explicitly collect a list of attributes for each entry,
// given as list of glob patterns as `subEntries`.
// Return the final list of glob patterns to be collected.
func cloneContentByClass(devClass string, subEntries []string, filterName filterFunc, filterLink filterFunc) []string {
	var fileSpecs []string

	// warning: don't use the context package here, this means not even the linuxpath package.
	// TODO(fromani) remove the path duplication
	sysClass := filepath.Join("sys", "class", devClass)
	entries, err := ioutil.ReadDir(sysClass)
	if err != nil {
		// we should not import context, hence we can't Warn()
		return fileSpecs
	}
	for _, entry := range entries {
		devName := entry.Name()

		if !filterName(devName) {
			continue
		}

		devPath := filepath.Join(sysClass, devName)
		dest, err := os.Readlink(devPath)
		if err != nil {
			continue
		}

		if !filterLink(dest) {
			continue
		}

		// so, first copy the symlink itself
		fileSpecs = append(fileSpecs, devPath)
		// now we have to clone the content of the actual entry
		// related (and found into a subdir of) the backing hardware
		// device
		devData := filepath.Clean(filepath.Join(sysClass, dest))
		for _, subEntry := range subEntries {
			fileSpecs = append(fileSpecs, filepath.Join(devData, subEntry))
		}
	}

	return fileSpecs
}

// filterNone allows all content, filtering out none of it
func filterNone(_ string) bool {
	return true
}
  0707010000080C000081A4000000000000000000000001645E367C00000387000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/snapshot/clonetree_net_linux.go    //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package snapshot

import (
	"strings"
)

// ExpectedCloneNetContent returns a slice of strings pertaning to the network interfaces ghw
// cares about. We cannot use a static list because we want to filter away the virtual devices,
// which  ghw doesn't concern itself about. So we need to do some runtime discovery.
// Additionally, we want to make sure to clone the backing device data.
func ExpectedCloneNetContent() []string {
	ifaceEntries := []string{
		"addr_assign_type",
		// intentionally avoid to clone "address" to avoid to leak any host-idenfifiable data.
	}

	filterLink := func(linkDest string) bool {
		return !strings.Contains(linkDest, "devices/virtual/net")
	}

	return cloneContentByClass("net", ifaceEntries, filterNone, filterLink)
}
 0707010000080D000081A4000000000000000000000001645E367C000012ED000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/snapshot/clonetree_pci_linux.go    //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package snapshot

import (
	"fmt"
	"io/ioutil"
	"os"
	"path/filepath"

	pciaddr "github.com/jaypipes/ghw/pkg/pci/address"
)

const (
	// root directory: entry point to start scanning the PCI forest
	// warning: don't use the context package here, this means not even the linuxpath package.
	// TODO(fromani) remove the path duplication
	sysBusPCIDir = "/sys/bus/pci/devices"
)

// ExpectedClonePCIContent return a slice of glob patterns which represent the pseudofiles
// ghw cares about, pertaining to PCI devices only.
// Beware: the content is host-specific, because the PCI topology is host-dependent and unpredictable.
func ExpectedClonePCIContent() []string {
	fileSpecs := []string{
		"/sys/bus/pci/drivers/*",
	}
	pciRoots := []string{
		sysBusPCIDir,
	}
	for {
		if len(pciRoots) == 0 {
			break
		}
		pciRoot := pciRoots[0]
		pciRoots = pciRoots[1:]
		specs, roots := scanPCIDeviceRoot(pciRoot)
		pciRoots = append(pciRoots, roots...)
		fileSpecs = append(fileSpecs, specs...)
	}
	return fileSpecs
}

// scanPCIDeviceRoot reports a slice of glob patterns which represent the pseudofiles
// ghw cares about pertaining to all the PCI devices connected to the bus connected from the
// given root; usually (but not always) a CPU packages has 1+ PCI(e) roots, forming the first
// level; more PCI bridges are (usually) attached to this level, creating deep nested trees.
// hence we need to scan all possible roots, to make sure not to miss important devices.
//
// note about notifying errors. This function and its helper functions do use trace() everywhere
// to report recoverable errors, even though it would have been appropriate to use Warn().
// This is unfortunate, and again a byproduct of the fact we cannot use context.Context to avoid
// circular dependencies.
// TODO(fromani): switch to Warn() as soon as we figure out how to break this circular dep.
func scanPCIDeviceRoot(root string) (fileSpecs []string, pciRoots []string) {
	trace("scanning PCI device root %q\n", root)

	perDevEntries := []string{
		"class",
		"device",
		"driver",
		"irq",
		"local_cpulist",
		"modalias",
		"numa_node",
		"revision",
		"vendor",
	}
	entries, err := ioutil.ReadDir(root)
	if err != nil {
		return []string{}, []string{}
	}
	for _, entry := range entries {
		entryName := entry.Name()
		if addr := pciaddr.FromString(entryName); addr == nil {
			// doesn't look like a entry we care about
			// This is by far and large the most likely path
			// hence we should NOT trace/warn here.
			continue
		}

		entryPath := filepath.Join(root, entryName)
		pciEntry, err := findPCIEntryFromPath(root, entryName)
		if err != nil {
			trace("error scanning %q: %v", entryName, err)
			continue
		}

		trace("PCI entry is %q\n", pciEntry)
		fileSpecs = append(fileSpecs, entryPath)
		for _, perNetEntry := range perDevEntries {
			fileSpecs = append(fileSpecs, filepath.Join(pciEntry, perNetEntry))
		}

		if isPCIBridge(entryPath) {
			trace("adding new PCI root %q\n", entryName)
			pciRoots = append(pciRoots, pciEntry)
		}
	}
	return fileSpecs, pciRoots
}

func findPCIEntryFromPath(root, entryName string) (string, error) {
	entryPath := filepath.Join(root, entryName)
	fi, err := os.Lstat(entryPath)
	if err != nil {
		return "", fmt.Errorf("stat(%s) failed: %v\n", entryPath, err)
	}
	if fi.Mode()&os.ModeSymlink == 0 {
		// regular file, nothing to resolve
		return entryPath, nil
	}
	// resolve symlink
	target, err := os.Readlink(entryPath)
	trace("entry %q is symlink resolved to %q\n", entryPath, target)
	if err != nil {
		return "", fmt.Errorf("readlink(%s) failed: %v - skipped\n", entryPath, err)
	}
	return filepath.Clean(filepath.Join(root, target)), nil
}

func isPCIBridge(entryPath string) bool {
	subNodes, err := ioutil.ReadDir(entryPath)
	if err != nil {
		// this is so unlikely we don't even return error. But we trace just in case.
		trace("error scanning device entry path %q: %v", entryPath, err)
		return false
	}
	for _, subNode := range subNodes {
		if !subNode.IsDir() {
			continue
		}
		if addr := pciaddr.FromString(subNode.Name()); addr != nil {
			// we got an entry in the directory pertaining to this device
			// which is a directory itself and it is named like a PCI address.
			// Hence we infer the device we are considering is a PCI bridge of sorts.
			// This is is indeed a bit brutal, but the only possible alternative
			// (besides blindly copying everything in /sys/bus/pci/devices) is
			// to detect the type of the device and pick only the bridges.
			// This approach duplicates the logic within the `pci` subkpg
			// - or forces us into awkward dep cycles, and has poorer forward
			// compatibility.
			return true
		}
	}
	return false
}
   0707010000080E000081A4000000000000000000000001645E367C0000020B000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/snapshot/clonetree_stub.go //go:build !linux
// +build !linux

//
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package snapshot

func setupScratchDir(scratchDir string) error {
	return nil
}

func ExpectedCloneStaticContent() []string {
	return []string{}
}

func ExpectedCloneGPUContent() []string {
	return []string{}
}

func ExpectedCloneNetContent() []string {
	return []string{}
}

func ExpectedClonePCIContent() []string {
	return []string{}
}
 0707010000080F000081A4000000000000000000000001645E367C000009E8000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/snapshot/pack.go   //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package snapshot

import (
	"archive/tar"
	"compress/gzip"
	"errors"
	"fmt"
	"io"
	"os"
	"path/filepath"
	"strings"
)

// PackFrom creates the snapshot named `snapshotName` from the
// directory tree whose root is `sourceRoot`.
func PackFrom(snapshotName, sourceRoot string) error {
	f, err := OpenDestination(snapshotName)
	if err != nil {
		return err
	}
	defer f.Close()

	return PackWithWriter(f, sourceRoot)
}

// OpenDestination opens the `snapshotName` file for writing, bailing out
// if the file seems to exist and have existing content already.
// This is done to avoid accidental overwrites.
func OpenDestination(snapshotName string) (*os.File, error) {
	var f *os.File
	var err error

	if _, err = os.Stat(snapshotName); errors.Is(err, os.ErrNotExist) {
		if f, err = os.Create(snapshotName); err != nil {
			return nil, err
		}
	} else if err != nil {
		return nil, err
	} else {
		f, err := os.OpenFile(snapshotName, os.O_WRONLY, 0600)
		if err != nil {
			return nil, err
		}
		fs, err := f.Stat()
		if err != nil {
			return nil, err
		}
		if fs.Size() > 0 {
			return nil, fmt.Errorf("File %s already exists and is of size >0", snapshotName)
		}
	}
	return f, nil
}

// PakcWithWriter creates a snapshot sending all the binary data to the
// given `fw` writer. The snapshot is made from the directory tree whose
// root is `sourceRoot`.
func PackWithWriter(fw io.Writer, sourceRoot string) error {
	gzw := gzip.NewWriter(fw)
	defer gzw.Close()

	tw := tar.NewWriter(gzw)
	defer tw.Close()

	return createSnapshot(tw, sourceRoot)
}

func createSnapshot(tw *tar.Writer, buildDir string) error {
	return filepath.Walk(buildDir, func(path string, fi os.FileInfo, _ error) error {
		if path == buildDir {
			return nil
		}
		var link string
		var err error

		if fi.Mode()&os.ModeSymlink != 0 {
			trace("processing symlink %s\n", path)
			link, err = os.Readlink(path)
			if err != nil {
				return err
			}
		}

		hdr, err := tar.FileInfoHeader(fi, link)
		if err != nil {
			return err
		}
		hdr.Name = strings.TrimPrefix(strings.TrimPrefix(path, buildDir), string(os.PathSeparator))

		if err = tw.WriteHeader(hdr); err != nil {
			return err
		}

		switch hdr.Typeflag {
		case tar.TypeReg, tar.TypeRegA:
			f, err := os.Open(path)
			if err != nil {
				return err
			}
			if _, err = io.Copy(tw, f); err != nil {
				return err
			}
			f.Close()
		}
		return nil
	})
}
07070100000810000081A4000000000000000000000001645E367C000001E5000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/snapshot/testdata.tar.gz         n0*H&,|d?:"h*Y='ԿqB}eZ#Vjɴ"1F5[#o"R4!ʫ*N_δ݆Tz?c\sA"o7tjox8ˢ0:oRboƘׁK?,E~D0?ʩD<e>[}^m10FqRMaKyBO_.>,	ٱ{?r9?s!K+o1nJ.+-qĭEj:pipĽsc>] !8mU;"wvcS ??t#	 ?!	q                  _|{$ P     07070100000811000081A4000000000000000000000001645E367C0000016A000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/snapshot/trace.go  //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package snapshot

var trace func(msg string, args ...interface{})

func init() {
	trace = func(msg string, args ...interface{}) {}
}

func SetTraceFunction(fn func(msg string, args ...interface{})) {
	trace = fn
}
  07070100000812000081A4000000000000000000000001645E367C00000AD4000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/snapshot/unpack.go //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package snapshot

import (
	"archive/tar"
	"compress/gzip"
	"io"
	"io/ioutil"
	"os"
	"path/filepath"

	"github.com/jaypipes/ghw/pkg/option"
)

const (
	TargetRoot = "ghw-snapshot-*"
)

const (
	// If set, `ghw` will not unpack the snapshot in the user-supplied directory
	// unless the aforementioned directory is empty.
	OwnTargetDirectory = 1 << iota
)

// Clanup removes the unpacket snapshot from the target root.
// Please not that the environs variable `GHW_SNAPSHOT_PRESERVE`, if set,
// will make this function silently skip.
func Cleanup(targetRoot string) error {
	if option.EnvOrDefaultSnapshotPreserve() {
		return nil
	}
	return os.RemoveAll(targetRoot)
}

// Unpack expands the given snapshot in a temporary directory managed by `ghw`. Returns the path of that directory.
func Unpack(snapshotName string) (string, error) {
	targetRoot, err := ioutil.TempDir("", TargetRoot)
	if err != nil {
		return "", err
	}
	_, err = UnpackInto(snapshotName, targetRoot, 0)
	return targetRoot, err
}

// UnpackInto expands the given snapshot in a client-supplied directory.
// Returns true if the snapshot was actually unpacked, false otherwise
func UnpackInto(snapshotName, targetRoot string, flags uint) (bool, error) {
	if (flags&OwnTargetDirectory) == OwnTargetDirectory && !isEmptyDir(targetRoot) {
		return false, nil
	}
	snap, err := os.Open(snapshotName)
	if err != nil {
		return false, err
	}
	defer snap.Close()
	return true, Untar(targetRoot, snap)
}

// Untar extracts data from the given reader (providing data in tar.gz format) and unpacks it in the given directory.
func Untar(root string, r io.Reader) error {
	var err error
	gzr, err := gzip.NewReader(r)
	if err != nil {
		return err
	}
	defer gzr.Close()

	tr := tar.NewReader(gzr)
	for {
		header, err := tr.Next()
		if err == io.EOF {
			// we are done
			return nil
		}

		if err != nil {
			// bail out
			return err
		}

		if header == nil {
			// TODO: how come?
			continue
		}

		target := filepath.Join(root, header.Name)
		mode := os.FileMode(header.Mode)

		switch header.Typeflag {
		case tar.TypeDir:
			err = os.MkdirAll(target, mode)
			if err != nil {
				return err
			}

		case tar.TypeReg:
			dst, err := os.OpenFile(target, os.O_CREATE|os.O_RDWR, mode)
			if err != nil {
				return err
			}

			_, err = io.Copy(dst, tr)
			if err != nil {
				return err
			}

			dst.Close()

		case tar.TypeSymlink:
			err = os.Symlink(header.Linkname, target)
			if err != nil {
				return err
			}
		}
	}
}

func isEmptyDir(name string) bool {
	entries, err := ioutil.ReadDir(name)
	if err != nil {
		return false
	}
	return len(entries) == 0
}
07070100000813000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/topology   07070100000814000081A4000000000000000000000001645E367C000010E0000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/topology/topology.go   //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package topology

import (
	"encoding/json"
	"fmt"
	"sort"
	"strconv"
	"strings"

	"github.com/jaypipes/ghw/pkg/context"
	"github.com/jaypipes/ghw/pkg/cpu"
	"github.com/jaypipes/ghw/pkg/marshal"
	"github.com/jaypipes/ghw/pkg/memory"
	"github.com/jaypipes/ghw/pkg/option"
)

// Architecture describes the overall hardware architecture. It can be either
// Symmetric Multi-Processor (SMP) or Non-Uniform Memory Access (NUMA)
type Architecture int

const (
	// SMP is a Symmetric Multi-Processor system
	ARCHITECTURE_SMP Architecture = iota
	// NUMA is a Non-Uniform Memory Access system
	ARCHITECTURE_NUMA
)

var (
	architectureString = map[Architecture]string{
		ARCHITECTURE_SMP:  "SMP",
		ARCHITECTURE_NUMA: "NUMA",
	}

	// NOTE(fromani): the keys are all lowercase and do not match
	// the keys in the opposite table `architectureString`.
	// This is done because of the choice we made in
	// Architecture:MarshalJSON.
	// We use this table only in UnmarshalJSON, so it should be OK.
	stringArchitecture = map[string]Architecture{
		"smp":  ARCHITECTURE_SMP,
		"numa": ARCHITECTURE_NUMA,
	}
)

func (a Architecture) String() string {
	return architectureString[a]
}

// NOTE(jaypipes): since serialized output is as "official" as we're going to
// get, let's lowercase the string output when serializing, in order to
// "normalize" the expected serialized output
func (a Architecture) MarshalJSON() ([]byte, error) {
	return []byte(strconv.Quote(strings.ToLower(a.String()))), nil
}

func (a *Architecture) UnmarshalJSON(b []byte) error {
	var s string
	if err := json.Unmarshal(b, &s); err != nil {
		return err
	}
	key := strings.ToLower(s)
	val, ok := stringArchitecture[key]
	if !ok {
		return fmt.Errorf("unknown architecture: %q", key)
	}
	*a = val
	return nil
}

// Node is an abstract construct representing a collection of processors and
// various levels of memory cache that those processors share.  In a NUMA
// architecture, there are multiple NUMA nodes, abstracted here as multiple
// Node structs. In an SMP architecture, a single Node will be available in the
// Info struct and this single struct can be used to describe the levels of
// memory caching available to the single physical processor package's physical
// processor cores
type Node struct {
	ID        int                  `json:"id"`
	Cores     []*cpu.ProcessorCore `json:"cores"`
	Caches    []*memory.Cache      `json:"caches"`
	Distances []int                `json:"distances"`
	Memory    *memory.Area         `json:"memory"`
}

func (n *Node) String() string {
	return fmt.Sprintf(
		"node #%d (%d cores)",
		n.ID,
		len(n.Cores),
	)
}

// Info describes the system topology for the host hardware
type Info struct {
	ctx          *context.Context
	Architecture Architecture `json:"architecture"`
	Nodes        []*Node      `json:"nodes"`
}

// New returns a pointer to an Info struct that contains information about the
// NUMA topology on the host system
func New(opts ...*option.Option) (*Info, error) {
	merged := option.Merge(opts...)
	ctx := context.New(merged)
	info := &Info{ctx: ctx}
	var err error
	if context.Exists(merged) {
		err = info.load()
	} else {
		err = ctx.Do(info.load)
	}
	if err != nil {
		return nil, err
	}
	for _, node := range info.Nodes {
		sort.Sort(memory.SortByCacheLevelTypeFirstProcessor(node.Caches))
	}
	return info, nil
}

func (i *Info) String() string {
	archStr := "SMP"
	if i.Architecture == ARCHITECTURE_NUMA {
		archStr = "NUMA"
	}
	res := fmt.Sprintf(
		"topology %s (%d nodes)",
		archStr,
		len(i.Nodes),
	)
	return res
}

// simple private struct used to encapsulate topology information in a
// top-level "topology" YAML/JSON map/object key
type topologyPrinter struct {
	Info *Info `json:"topology"`
}

// YAMLString returns a string with the topology information formatted as YAML
// under a top-level "topology:" key
func (i *Info) YAMLString() string {
	return marshal.SafeYAML(i.ctx, topologyPrinter{i})
}

// JSONString returns a string with the topology information formatted as JSON
// under a top-level "topology:" key
func (i *Info) JSONString(indent bool) string {
	return marshal.SafeJSON(i.ctx, topologyPrinter{i}, indent)
}
07070100000815000081A4000000000000000000000001645E367C00000982000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/topology/topology_linux.go // Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package topology

import (
	"fmt"
	"io/ioutil"
	"path/filepath"
	"strconv"
	"strings"

	"github.com/jaypipes/ghw/pkg/context"
	"github.com/jaypipes/ghw/pkg/cpu"
	"github.com/jaypipes/ghw/pkg/linuxpath"
	"github.com/jaypipes/ghw/pkg/memory"
)

func (i *Info) load() error {
	i.Nodes = topologyNodes(i.ctx)
	if len(i.Nodes) == 1 {
		i.Architecture = ARCHITECTURE_SMP
	} else {
		i.Architecture = ARCHITECTURE_NUMA
	}
	return nil
}

func topologyNodes(ctx *context.Context) []*Node {
	paths := linuxpath.New(ctx)
	nodes := make([]*Node, 0)

	files, err := ioutil.ReadDir(paths.SysDevicesSystemNode)
	if err != nil {
		ctx.Warn("failed to determine nodes: %s\n", err)
		return nodes
	}
	for _, file := range files {
		filename := file.Name()
		if !strings.HasPrefix(filename, "node") {
			continue
		}
		node := &Node{}
		nodeID, err := strconv.Atoi(filename[4:])
		if err != nil {
			ctx.Warn("failed to determine node ID: %s\n", err)
			return nodes
		}
		node.ID = nodeID
		cores, err := cpu.CoresForNode(ctx, nodeID)
		if err != nil {
			ctx.Warn("failed to determine cores for node: %s\n", err)
			return nodes
		}
		node.Cores = cores
		caches, err := memory.CachesForNode(ctx, nodeID)
		if err != nil {
			ctx.Warn("failed to determine caches for node: %s\n", err)
			return nodes
		}
		node.Caches = caches

		distances, err := distancesForNode(ctx, nodeID)
		if err != nil {
			ctx.Warn("failed to determine node distances for node: %s\n", err)
			return nodes
		}
		node.Distances = distances

		area, err := memory.AreaForNode(ctx, nodeID)
		if err != nil {
			ctx.Warn("failed to determine memory area for node: %s\n", err)
			return nodes
		}
		node.Memory = area

		nodes = append(nodes, node)
	}
	return nodes
}

func distancesForNode(ctx *context.Context, nodeID int) ([]int, error) {
	paths := linuxpath.New(ctx)
	path := filepath.Join(
		paths.SysDevicesSystemNode,
		fmt.Sprintf("node%d", nodeID),
		"distance",
	)

	data, err := ioutil.ReadFile(path)
	if err != nil {
		return nil, err
	}

	items := strings.Fields(strings.TrimSpace(string(data)))
	dists := make([]int, len(items)) // TODO: can a NUMA cell be offlined?
	for idx, item := range items {
		dist, err := strconv.Atoi(item)
		if err != nil {
			return dists, err
		}
		dists[idx] = dist
	}
	return dists, nil
}
  07070100000816000081A4000000000000000000000001645E367C00000177000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/topology/topology_stub.go  //go:build !linux && !windows
// +build !linux,!windows

// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package topology

import (
	"runtime"

	"github.com/pkg/errors"
)

func (i *Info) load() error {
	return errors.New("topologyFillInfo not implemented on " + runtime.GOOS)
}
 07070100000817000081A4000000000000000000000001645E367C00001329000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/topology/topology_windows.go   // Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package topology

import (
	"encoding/binary"
	"fmt"
	"syscall"
	"unsafe"
)

const (
	rcFailure                                = 0
	sizeofLogicalProcessorInfo               = 32
	errInsufficientBuffer      syscall.Errno = 122

	relationProcessorCore    = 0
	relationNUMANode         = 1
	relationCache            = 2
	relationProcessorPackage = 3
	relationGroup            = 4
)

func (i *Info) load() error {
	nodes, err := topologyNodes()
	if err != nil {
		return err
	}
	i.Nodes = nodes
	if len(nodes) == 1 {
		i.Architecture = ARCHITECTURE_SMP
	} else {
		i.Architecture = ARCHITECTURE_NUMA
	}
	return nil
}

func topologyNodes() ([]*Node, error) {
	nodes := make([]*Node, 0)
	lpis, err := getWin32LogicalProcessorInfos()
	if err != nil {
		return nil, err
	}
	for _, lpi := range lpis {
		switch lpi.relationship {
		case relationNUMANode:
			nodes = append(nodes, &Node{
				ID: lpi.numaNodeID(),
			})
		case relationProcessorCore:
			// TODO(jaypipes): associated LP to processor core
		case relationProcessorPackage:
			// ignore
		case relationCache:
			// TODO(jaypipes) handle cache layers
		default:
			return nil, fmt.Errorf("Unknown LOGICAL_PROCESSOR_RELATIONSHIP value: %d", lpi.relationship)

		}
	}
	return nodes, nil
}

// This is the CACHE_DESCRIPTOR struct in the Win32 API
type cacheDescriptor struct {
	level         uint8
	associativity uint8
	lineSize      uint16
	size          uint32
	cacheType     uint32
}

// This is the SYSTEM_LOGICAL_PROCESSOR_INFORMATION struct in the Win32 API
type logicalProcessorInfo struct {
	processorMask uint64
	relationship  uint64
	// The following dummyunion member is a representation of this part of
	// the SYSTEM_LOGICAL_PROCESSOR_INFORMATION struct:
	//
	//  union {
	//    struct {
	//      BYTE Flags;
	//    } ProcessorCore;
	//    struct {
	//      DWORD NodeNumber;
	//    } NumaNode;
	//    CACHE_DESCRIPTOR Cache;
	//    ULONGLONG        Reserved[2];
	//  } DUMMYUNIONNAME;
	dummyunion [16]byte
}

// numaNodeID returns the NUMA node's identifier from the logical processor
// information struct by grabbing the integer representation of the struct's
// NumaNode unioned data element
func (lpi *logicalProcessorInfo) numaNodeID() int {
	if lpi.relationship != relationNUMANode {
		return -1
	}
	return int(binary.LittleEndian.Uint16(lpi.dummyunion[0:]))
}

// ref: https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getlogicalprocessorinformation
func getWin32LogicalProcessorInfos() (
	[]*logicalProcessorInfo,
	error,
) {
	lpis := make([]*logicalProcessorInfo, 0)
	win32api := syscall.NewLazyDLL("kernel32.dll")
	glpi := win32api.NewProc("GetLogicalProcessorInformation")

	// The way the GetLogicalProcessorInformation (GLPI) Win32 API call
	// works is wonky, but consistent with the Win32 API calling structure.
	// Basically, you need to first call the GLPI API with a NUL pointerr
	// and a pointer to an integer. That first call to the API should
	// return ERROR_INSUFFICIENT_BUFFER, which is the indication that the
	// supplied buffer pointer is NUL and needs to have memory allocated to
	// it of an amount equal to the value of the integer pointer argument.
	// Once the buffer is allocated this amount of space, the GLPI API call
	// is again called. This time, the return value should be 0 and the
	// buffer will have been set to an array of
	// SYSTEM_LOGICAL_PROCESSOR_INFORMATION structs.
	toAllocate := uint32(0)
	// first, figure out how much we need
	rc, _, win32err := glpi.Call(uintptr(0), uintptr(unsafe.Pointer(&toAllocate)))
	if rc == rcFailure {
		if win32err != errInsufficientBuffer {
			return nil, fmt.Errorf("GetLogicalProcessorInformation Win32 API initial call failed to return ERROR_INSUFFICIENT_BUFFER")
		}
	} else {
		// This shouldn't happen because buffer hasn't yet been allocated...
		return nil, fmt.Errorf("GetLogicalProcessorInformation Win32 API initial call returned success instead of failure with ERROR_INSUFFICIENT_BUFFER")
	}

	// OK, now we actually allocate a raw buffer to fill with some number
	// of SYSTEM_LOGICAL_PROCESSOR_INFORMATION structs
	b := make([]byte, toAllocate)
	rc, _, win32err = glpi.Call(uintptr(unsafe.Pointer(&b[0])), uintptr(unsafe.Pointer(&toAllocate)))
	if rc == rcFailure {
		return nil, fmt.Errorf("GetLogicalProcessorInformation Win32 API call failed to set supplied buffer. Win32 system error: %s", win32err)
	}

	for x := uint32(0); x < toAllocate; x += sizeofLogicalProcessorInfo {
		lpiraw := b[x : x+sizeofLogicalProcessorInfo]
		lpi := &logicalProcessorInfo{
			processorMask: binary.LittleEndian.Uint64(lpiraw[0:]),
			relationship:  binary.LittleEndian.Uint64(lpiraw[8:]),
		}
		copy(lpi.dummyunion[0:16], lpiraw[16:32])
		lpis = append(lpis, lpi)
	}
	return lpis, nil
}
   07070100000818000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/unitutil   07070100000819000081A4000000000000000000000001645E367C00000307000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/unitutil/unit.go   //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package unitutil

var (
	KB int64 = 1024
	MB       = KB * 1024
	GB       = MB * 1024
	TB       = GB * 1024
	PB       = TB * 1024
	EB       = PB * 1024
)

// AmountString returns a string representation of the amount with an amount
// suffix corresponding to the nearest kibibit.
//
// For example, AmountString(1022) == "1022). AmountString(1024) == "1KB", etc
func AmountString(size int64) (int64, string) {
	switch {
	case size < MB:
		return KB, "KB"
	case size < GB:
		return MB, "MB"
	case size < TB:
		return GB, "GB"
	case size < PB:
		return TB, "TB"
	case size < EB:
		return PB, "PB"
	default:
		return EB, "EB"
	}
}
 0707010000081A000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/util   0707010000081B000081A4000000000000000000000001645E367C00000539000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/jaypipes/ghw/pkg/util/util.go   //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package util

import (
	"fmt"
	"io/ioutil"
	"os"
	"strconv"
	"strings"

	"github.com/jaypipes/ghw/pkg/context"
)

const (
	UNKNOWN = "unknown"
)

type closer interface {
	Close() error
}

func SafeClose(c closer) {
	err := c.Close()
	if err != nil {
		_, _ = fmt.Fprintf(os.Stderr, "failed to close: %s", err)
	}
}

// Reads a supplied filepath and converts the contents to an integer. Returns
// -1 if there were file permissions or existence errors or if the contents
// could not be successfully converted to an integer. In any error, a warning
// message is printed to STDERR and -1 is returned.
func SafeIntFromFile(ctx *context.Context, path string) int {
	msg := "failed to read int from file: %s\n"
	buf, err := ioutil.ReadFile(path)
	if err != nil {
		ctx.Warn(msg, err)
		return -1
	}
	contents := strings.TrimSpace(string(buf))
	res, err := strconv.Atoi(contents)
	if err != nil {
		ctx.Warn(msg, err)
		return -1
	}
	return res
}

// ConcatStrings concatenate strings in a larger one. This function
// addresses a very specific ghw use case. For a more general approach,
// just use strings.Join()
func ConcatStrings(items ...string) string {
	return strings.Join(items, "")
}
   0707010000081C000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/github.com/jaypipes/pcidb  0707010000081D000081A4000000000000000000000001645E367C00000014000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/jaypipes/pcidb/.gitignore   vendor/
coverage*.*
0707010000081E000081A4000000000000000000000001645E367C0000279F000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/pcidb/COPYING  
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

 0707010000081F000081A4000000000000000000000001645E367C00002C5D000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/pcidb/LICENSE                                   Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
   07070100000820000081A4000000000000000000000001645E367C0000036F000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/pcidb/Makefile VENDOR := vendor
PKGS := $(shell go list ./... | grep -v /$(VENDOR)/)
SRC = $(shell find . -type f -name '*.go' -not -path "*/$(VENDOR)/*")
BIN_DIR := $(GOPATH)/bin
GOMETALINTER := $(BIN_DIR)/gometalinter

.PHONY: test
test: vet
	go test $(PKGS)

$(GOMETALINTER):
	go get -u github.com/alecthomas/gometalinter
	$(GOMETALINTER) --install &> /dev/null

.PHONY: lint
lint: $(GOMETALINTER)
	$(GOMETALINTER) ./... --vendor

.PHONY: fmt
fmt:
	@gofmt -s -l -w $(SRC)

.PHONY: fmtcheck
fmtcheck:
	@bash -c "diff -u <(echo -n) <(gofmt -d $(SRC))"

.PHONY: vet
vet:
	go vet $(PKGS)

.PHONY: cover
cover:
	$(shell [ -e coverage.out ] && rm coverage.out)
	@echo "mode: count" > coverage-all.out
	@$(foreach pkg,$(PKGS),\
		go test -coverprofile=coverage.out -covermode=count $(pkg);\
		tail -n +2 coverage.out >> coverage-all.out;)
	go tool cover -html=coverage-all.out -o=coverage-all.html
 07070100000821000081A4000000000000000000000001645E367C0000372F000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/pcidb/README.md    # `pcidb` - the Golang PCI DB library

[![Build Status](https://github.com/jaypipes/pcidb/actions/workflows/go.yml/badge.svg?branch=main)](https://github.com/jaypipes/pcidb/actions)
[![Go Report Card](https://goreportcard.com/badge/github.com/jaypipes/pcidb)](https://goreportcard.com/report/github.com/jaypipes/pcidb)
[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](CODE_OF_CONDUCT.md)

`pcidb` is a small Golang library for programmatic querying of PCI vendor,
product and class information.

We currently test `pcidb` on Linux, Windows and MacOSX.

## Usage

`pcidb` contains a PCI database inspection and querying facility that allows
developers to query for information about hardware device classes, vendor and
product information.

The `pcidb.New()` function returns a `pcidb.PCIDB` struct or an error if the
PCI database could not be loaded.

> `pcidb`'s default behaviour is to first search for pci-ids DB files on the
> local host system in well-known filesystem paths. If `pcidb` cannot find a
> pci-ids DB file on the local host system, you can configure `pcidb` to fetch
> a current pci-ids DB file from the network. You can enable this
> network-fetching behaviour with the `pcidb.WithEnableNetworkFetch()` function
> or set the `PCIDB_ENABLE_NETWORK_FETCH` to a non-0 value.

The `pcidb.PCIDB` struct contains a number of fields that may be queried for
PCI information:

* `pcidb.PCIDB.Classes` is a map, keyed by the PCI class ID (a hex-encoded
  string) of pointers to `pcidb.Class` structs, one for each class of PCI
  device known to `pcidb`
* `pcidb.PCIDB.Vendors` is a map, keyed by the PCI vendor ID (a hex-encoded
  string) of pointers to `pcidb.Vendor` structs, one for each PCI vendor
  known to `pcidb`
* `pcidb.PCIDB.Products` is a map, keyed by the PCI product ID* (a hex-encoded
  string) of pointers to `pcidb.Product` structs, one for each PCI product
  known to `pcidb`

**NOTE**: PCI products are often referred to by their "device ID". We use
the term "product ID" in `pcidb` because it more accurately reflects what the
identifier is for: a specific product line produced by the vendor.

### Overriding the root mountpoint `pcidb` uses

The default root mountpoint that `pcidb` uses when looking for information
about the host system is `/`. So, for example, when looking up known PCI IDS DB
files on Linux, `pcidb` will attempt to discover a pciids DB file at
`/usr/share/misc/pci.ids`. If you are calling `pcidb` from a system that has an
alternate root mountpoint, you can either set the `PCIDB_CHROOT` environment
variable to that alternate path, or call the `pcidb.New()` function with the
`pcidb.WithChroot()` modifier.

For example, if you are executing from within an application container that has
bind-mounted the root host filesystem to the mount point `/host`, you would set
`PCIDB_CHROOT` to `/host` so that pcidb can find files like
`/usr/share/misc/pci.ids` at `/host/usr/share/misc/pci.ids`.

Alternately, you can use the `pcidb.WithChroot()` function like so:

```go
pci := pcidb.New(pcidb.WithChroot("/host"))
```

### PCI device classes

Let's take a look at the PCI device class information and how to query the PCI
database for class, subclass, and programming interface information.

Each `pcidb.Class` struct contains the following fields:

* `pcidb.Class.ID` is the hex-encoded string identifier for the device
  class
* `pcidb.Class.Name` is the common name/description of the class
* `pcidb.Class.Subclasses` is an array of pointers to
  `pcidb.Subclass` structs, one for each subclass in the device class

Each `pcidb.Subclass` struct contains the following fields:

* `pcidb.Subclass.ID` is the hex-encoded string identifier for the device
  subclass
* `pcidb.Subclass.Name` is the common name/description of the subclass
* `pcidb.Subclass.ProgrammingInterfaces` is an array of pointers to
  `pcidb.ProgrammingInterface` structs, one for each programming interface
   for the device subclass

Each `pcidb.ProgrammingInterface` struct contains the following fields:

* `pcidb.ProgrammingInterface.ID` is the hex-encoded string identifier for
  the programming interface
* `pcidb.ProgrammingInterface.Name` is the common name/description for the
  programming interface

```go
package main

import (
    "fmt"

    "github.com/jaypipes/pcidb"
)

func main() {
    pci, err := pcidb.New()
    if err != nil {
        fmt.Printf("Error getting PCI info: %v", err)
    }

    for _, devClass := range pci.Classes {
        fmt.Printf(" Device class: %v ('%v')\n", devClass.Name, devClass.ID)
        for _, devSubclass := range devClass.Subclasses {
            fmt.Printf("    Device subclass: %v ('%v')\n", devSubclass.Name, devSubclass.ID)
            for _, progIface := range devSubclass.ProgrammingInterfaces {
                fmt.Printf("        Programming interface: %v ('%v')\n", progIface.Name, progIface.ID)
            }
        }
    }
}
```

Example output from my personal workstation, snipped for brevity:

```
...
 Device class: Serial bus controller ('0c')
    Device subclass: FireWire (IEEE 1394) ('00')
        Programming interface: Generic ('00')
        Programming interface: OHCI ('10')
    Device subclass: ACCESS Bus ('01')
    Device subclass: SSA ('02')
    Device subclass: USB controller ('03')
        Programming interface: UHCI ('00')
        Programming interface: OHCI ('10')
        Programming interface: EHCI ('20')
        Programming interface: XHCI ('30')
        Programming interface: Unspecified ('80')
        Programming interface: USB Device ('fe')
    Device subclass: Fibre Channel ('04')
    Device subclass: SMBus ('05')
    Device subclass: InfiniBand ('06')
    Device subclass: IPMI SMIC interface ('07')
    Device subclass: SERCOS interface ('08')
    Device subclass: CANBUS ('09')
...
```

### PCI vendors and products

Let's take a look at the PCI vendor information and how to query the PCI
database for vendor information and the products a vendor supplies.

Each `pcidb.Vendor` struct contains the following fields:

* `pcidb.Vendor.ID` is the hex-encoded string identifier for the vendor
* `pcidb.Vendor.Name` is the common name/description of the vendor
* `pcidb.Vendor.Products` is an array of pointers to `pcidb.Product`
  structs, one for each product supplied by the vendor

Each `pcidb.Product` struct contains the following fields:

* `pcidb.Product.VendorID` is the hex-encoded string identifier for the
  product's vendor
* `pcidb.Product.ID` is the hex-encoded string identifier for the product
* `pcidb.Product.Name` is the common name/description of the subclass
* `pcidb.Product.Subsystems` is an array of pointers to
  `pcidb.Product` structs, one for each "subsystem" (sometimes called
  "sub-device" in PCI literature) for the product

**NOTE**: A subsystem product may have a different vendor than its "parent" PCI
product. This is sometimes referred to as the "sub-vendor".

Here's some example code that demonstrates listing the PCI vendors with the
most known products:

```go
package main

import (
    "fmt"
    "sort"

    "github.com/jaypipes/pcidb"
)

type ByCountProducts []*pcidb.Vendor

func (v ByCountProducts) Len() int {
    return len(v)
}

func (v ByCountProducts) Swap(i, j int) {
    v[i], v[j] = v[j], v[i]
}

func (v ByCountProducts) Less(i, j int) bool {
    return len(v[i].Products) > len(v[j].Products)
}

func main() {
    pci, err := pcidb.New()
    if err != nil {
        fmt.Printf("Error getting PCI info: %v", err)
    }

    vendors := make([]*pcidb.Vendor, len(pci.Vendors))
    x := 0
    for _, vendor := range pci.Vendors {
        vendors[x] = vendor
        x++
    }

    sort.Sort(ByCountProducts(vendors))

    fmt.Println("Top 5 vendors by product")
    fmt.Println("====================================================")
    for _, vendor := range vendors[0:5] {
        fmt.Printf("%v ('%v') has %d products\n", vendor.Name, vendor.ID, len(vendor.Products))
    }
}
```

which yields (on my local workstation as of July 7th, 2018):

```
Top 5 vendors by product
====================================================
Intel Corporation ('8086') has 3389 products
NVIDIA Corporation ('10de') has 1358 products
Advanced Micro Devices, Inc. [AMD/ATI] ('1002') has 886 products
National Instruments ('1093') has 601 products
Chelsio Communications Inc ('1425') has 525 products
```

The following is an example of querying the PCI product and subsystem
information to find the products which have the most number of subsystems that
have a different vendor than the top-level product. In other words, the two
products which have been re-sold or re-manufactured with the most number of
different companies.

```go
package main

import (
    "fmt"
    "sort"

    "github.com/jaypipes/pcidb"
)

type ByCountSeparateSubvendors []*pcidb.Product

func (v ByCountSeparateSubvendors) Len() int {
    return len(v)
}

func (v ByCountSeparateSubvendors) Swap(i, j int) {
    v[i], v[j] = v[j], v[i]
}

func (v ByCountSeparateSubvendors) Less(i, j int) bool {
    iVendor := v[i].VendorID
    iSetSubvendors := make(map[string]bool, 0)
    iNumDiffSubvendors := 0
    jVendor := v[j].VendorID
    jSetSubvendors := make(map[string]bool, 0)
    jNumDiffSubvendors := 0

    for _, sub := range v[i].Subsystems {
        if sub.VendorID != iVendor {
            iSetSubvendors[sub.VendorID] = true
        }
    }
    iNumDiffSubvendors = len(iSetSubvendors)

    for _, sub := range v[j].Subsystems {
        if sub.VendorID != jVendor {
            jSetSubvendors[sub.VendorID] = true
        }
    }
    jNumDiffSubvendors = len(jSetSubvendors)

    return iNumDiffSubvendors > jNumDiffSubvendors
}

func main() {
    pci, err := pcidb.New()
    if err != nil {
        fmt.Printf("Error getting PCI info: %v", err)
    }

    products := make([]*pcidb.Product, len(pci.Products))
    x := 0
    for _, product := range pci.Products {
        products[x] = product
        x++
    }

    sort.Sort(ByCountSeparateSubvendors(products))

    fmt.Println("Top 2 products by # different subvendors")
    fmt.Println("====================================================")
    for _, product := range products[0:2] {
        vendorID := product.VendorID
        vendor := pci.Vendors[vendorID]
        setSubvendors := make(map[string]bool, 0)

        for _, sub := range product.Subsystems {
            if sub.VendorID != vendorID {
                setSubvendors[sub.VendorID] = true
            }
        }
        fmt.Printf("%v ('%v') from %v\n", product.Name, product.ID, vendor.Name)
        fmt.Printf(" -> %d subsystems under the following different vendors:\n", len(setSubvendors))
        for subvendorID, _ := range setSubvendors {
            subvendor, exists := pci.Vendors[subvendorID]
            subvendorName := "Unknown subvendor"
            if exists {
                subvendorName = subvendor.Name
            }
            fmt.Printf("      - %v ('%v')\n", subvendorName, subvendorID)
        }
    }
}
```

which yields (on my local workstation as of July 7th, 2018):

```
Top 2 products by # different subvendors
====================================================
RTL-8100/8101L/8139 PCI Fast Ethernet Adapter ('8139') from Realtek Semiconductor Co., Ltd.
 -> 34 subsystems under the following different vendors:
      - OVISLINK Corp. ('149c')
      - EPoX Computer Co., Ltd. ('1695')
      - Red Hat, Inc ('1af4')
      - Mitac ('1071')
      - Netgear ('1385')
      - Micro-Star International Co., Ltd. [MSI] ('1462')
      - Hangzhou Silan Microelectronics Co., Ltd. ('1904')
      - Compex ('11f6')
      - Edimax Computer Co. ('1432')
      - KYE Systems Corporation ('1489')
      - ZyXEL Communications Corporation ('187e')
      - Acer Incorporated [ALI] ('1025')
      - Matsushita Electric Industrial Co., Ltd. ('10f7')
      - Ruby Tech Corp. ('146c')
      - Belkin ('1799')
      - Allied Telesis ('1259')
      - Unex Technology Corp. ('1429')
      - CIS Technology Inc ('1436')
      - D-Link System Inc ('1186')
      - Ambicom Inc ('1395')
      - AOPEN Inc. ('a0a0')
      - TTTech Computertechnik AG (Wrong ID) ('0357')
      - Gigabyte Technology Co., Ltd ('1458')
      - Packard Bell B.V. ('1631')
      - Billionton Systems Inc ('14cb')
      - Kingston Technologies ('2646')
      - Accton Technology Corporation ('1113')
      - Samsung Electronics Co Ltd ('144d')
      - Biostar Microtech Int'l Corp ('1565')
      - U.S. Robotics ('16ec')
      - KTI ('8e2e')
      - Hewlett-Packard Company ('103c')
      - ASUSTeK Computer Inc. ('1043')
      - Surecom Technology ('10bd')
Bt878 Video Capture ('036e') from Brooktree Corporation
 -> 30 subsystems under the following different vendors:
      - iTuner ('aa00')
      - Nebula Electronics Ltd. ('0071')
      - DViCO Corporation ('18ac')
      - iTuner ('aa05')
      - iTuner ('aa0d')
      - LeadTek Research Inc. ('107d')
      - Avermedia Technologies Inc ('1461')
      - Chaintech Computer Co. Ltd ('270f')
      - iTuner ('aa07')
      - iTuner ('aa0a')
      - Microtune, Inc. ('1851')
      - iTuner ('aa01')
      - iTuner ('aa04')
      - iTuner ('aa06')
      - iTuner ('aa0f')
      - iTuner ('aa02')
      - iTuner ('aa0b')
      - Pinnacle Systems, Inc. (Wrong ID) ('bd11')
      - Rockwell International ('127a')
      - Askey Computer Corp. ('144f')
      - Twinhan Technology Co. Ltd ('1822')
      - Anritsu Corp. ('1852')
      - iTuner ('aa08')
      - Hauppauge computer works Inc. ('0070')
      - Pinnacle Systems Inc. ('11bd')
      - Conexant Systems, Inc. ('14f1')
      - iTuner ('aa09')
      - iTuner ('aa03')
      - iTuner ('aa0c')
      - iTuner ('aa0e')
```

## Developers

Contributions to `pcidb` are welcomed! Fork the repo on GitHub and submit a pull
request with your proposed changes. Or, feel free to log an issue for a feature
request or bug report.

### Running tests

You can run unit tests easily using the `make test` command, like so:


```
[jaypipes@uberbox pcidb]$ make test
go test github.com/jaypipes/pcidb
ok      github.com/jaypipes/pcidb    0.045s
```
 07070100000822000081A4000000000000000000000001645E367C0000089C000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/jaypipes/pcidb/context.go   package pcidb

import (
	"fmt"
	"os"
	"path/filepath"
	"runtime"

	homedir "github.com/mitchellh/go-homedir"
)

// Concrete merged set of configuration switches that get passed to pcidb
// internal functions
type context struct {
	chroot             string
	cacheOnly          bool
	cachePath          string
	path               string
	enableNetworkFetch bool
	searchPaths        []string
}

func contextFromOptions(merged *WithOption) *context {
	ctx := &context{
		chroot:             *merged.Chroot,
		cacheOnly:          *merged.CacheOnly,
		cachePath:          getCachePath(),
		enableNetworkFetch: *merged.EnableNetworkFetch,
		path:               *merged.Path,
		searchPaths:        make([]string, 0),
	}
	ctx.setSearchPaths()
	return ctx
}

func getCachePath() string {
	hdir, err := homedir.Dir()
	if err != nil {
		fmt.Fprintf(os.Stderr, "Failed getting homedir.Dir(): %v", err)
		return ""
	}
	fp, err := homedir.Expand(filepath.Join(hdir, ".cache", "pci.ids"))
	if err != nil {
		fmt.Fprintf(os.Stderr, "Failed expanding local cache path: %v", err)
		return ""
	}
	return fp
}

// Depending on the operating system, sets the context's searchPaths to a set
// of local filepaths to search for a pci.ids database file
func (ctx *context) setSearchPaths() {
	// Look in direct path first, if set
	if ctx.path != "" {
		ctx.searchPaths = append(ctx.searchPaths, ctx.path)
		return
	}
	// A set of filepaths we will first try to search for the pci-ids DB file
	// on the local machine. If we fail to find one, we'll try pulling the
	// latest pci-ids file from the network
	ctx.searchPaths = append(ctx.searchPaths, ctx.cachePath)
	if ctx.cacheOnly {
		return
	}

	rootPath := ctx.chroot

	if runtime.GOOS != "windows" {
		ctx.searchPaths = append(
			ctx.searchPaths,
			filepath.Join(rootPath, "usr", "share", "hwdata", "pci.ids"),
		)
		ctx.searchPaths = append(
			ctx.searchPaths,
			filepath.Join(rootPath, "usr", "share", "misc", "pci.ids"),
		)
		ctx.searchPaths = append(
			ctx.searchPaths,
			filepath.Join(rootPath, "usr", "share", "hwdata", "pci.ids.gz"),
		)
		ctx.searchPaths = append(
			ctx.searchPaths,
			filepath.Join(rootPath, "usr", "share", "misc", "pci.ids.gz"),
		)
	}
}
07070100000823000081A4000000000000000000000001645E367C000008E8000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/jaypipes/pcidb/discover.go  //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package pcidb

import (
	"bufio"
	"compress/gzip"
	"io"
	"net/http"
	"os"
	"path/filepath"
	"strings"
)

const (
	PCIIDS_URI = "https://pci-ids.ucw.cz/v2.2/pci.ids.gz"
	USER_AGENT = "golang-jaypipes-pcidb"
)

func (db *PCIDB) load(ctx *context) error {
	var foundPath string
	for _, fp := range ctx.searchPaths {
		if _, err := os.Stat(fp); err == nil {
			foundPath = fp
			break
		}
	}
	if foundPath == "" {
		if !ctx.enableNetworkFetch {
			return ERR_NO_DB
		}
		// OK, so we didn't find any host-local copy of the pci-ids DB file. Let's
		// try fetching it from the network and storing it
		if err := cacheDBFile(ctx.cachePath); err != nil {
			return err
		}
		foundPath = ctx.cachePath
	}
	f, err := os.Open(foundPath)
	if err != nil {
		return err
	}
	defer f.Close()

	var scanner *bufio.Scanner
	if strings.HasSuffix(foundPath, ".gz") {
		var zipReader *gzip.Reader
		if zipReader, err = gzip.NewReader(f); err != nil {
			return err
		}
		defer zipReader.Close()
		scanner = bufio.NewScanner(zipReader)
	} else {
		scanner = bufio.NewScanner(f)
	}

	return parseDBFile(db, scanner)
}

func ensureDir(fp string) error {
	fpDir := filepath.Dir(fp)
	if _, err := os.Stat(fpDir); os.IsNotExist(err) {
		err = os.MkdirAll(fpDir, os.ModePerm)
		if err != nil {
			return err
		}
	}
	return nil
}

// Pulls down the latest copy of the pci-ids file from the network and stores
// it in the local host filesystem
func cacheDBFile(cacheFilePath string) error {
	ensureDir(cacheFilePath)

	client := new(http.Client)
	request, err := http.NewRequest("GET", PCIIDS_URI, nil)
	if err != nil {
		return err
	}
	request.Header.Set("User-Agent", USER_AGENT)
	response, err := client.Do(request)
	if err != nil {
		return err
	}
	defer response.Body.Close()
	f, err := os.Create(cacheFilePath)
	if err != nil {
		return err
	}
	defer func() {
		if err != nil {
			os.Remove(cacheFilePath)
		}
	}()
	defer f.Close()
	// write the gunzipped contents to our local cache file
	zr, err := gzip.NewReader(response.Body)
	if err != nil {
		return err
	}
	defer zr.Close()
	if _, err = io.Copy(f, zr); err != nil {
		return err
	}
	return err
}
07070100000824000081A4000000000000000000000001645E367C000015B5000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/pcidb/main.go  //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package pcidb

import (
	"fmt"
	"os"
	"strconv"
)

var (
	ERR_NO_DB = fmt.Errorf("No pci-ids DB files found (and network fetch disabled)")
	trueVar   = true
)

// ProgrammingInterface is the PCI programming interface for a class of PCI
// devices
type ProgrammingInterface struct {
	// hex-encoded PCI_ID of the programming interface
	ID string `json:"id"`
	// common string name for the programming interface
	Name string `json:"name"`
}

// Subclass is a subdivision of a PCI class
type Subclass struct {
	// hex-encoded PCI_ID for the device subclass
	ID string `json:"id"`
	// common string name for the subclass
	Name string `json:"name"`
	// any programming interfaces this subclass might have
	ProgrammingInterfaces []*ProgrammingInterface `json:"programming_interfaces"`
}

// Class is the PCI class
type Class struct {
	// hex-encoded PCI_ID for the device class
	ID string `json:"id"`
	// common string name for the class
	Name string `json:"name"`
	// any subclasses belonging to this class
	Subclasses []*Subclass `json:"subclasses"`
}

// Product provides information about a PCI device model
// NOTE(jaypipes): In the hardware world, the PCI "device_id" is the identifier
// for the product/model
type Product struct {
	// vendor ID for the product
	VendorID string `json:"vendor_id"`
	// hex-encoded PCI_ID for the product/model
	ID string `json:"id"`
	// common string name of the vendor
	Name string `json:"name"`
	// "subdevices" or "subsystems" for the product
	Subsystems []*Product `json:"subsystems"`
}

// Vendor provides information about a device vendor
type Vendor struct {
	// hex-encoded PCI_ID for the vendor
	ID string `json:"id"`
	// common string name of the vendor
	Name string `json:"name"`
	// all top-level devices for the vendor
	Products []*Product `json:"products"`
}

type PCIDB struct {
	// hash of class ID -> class information
	Classes map[string]*Class `json:"classes"`
	// hash of vendor ID -> vendor information
	Vendors map[string]*Vendor `json:"vendors"`
	// hash of vendor ID + product/device ID -> product information
	Products map[string]*Product `json:"products"`
}

// WithOption is used to represent optionally-configured settings
type WithOption struct {
	// Chroot is the directory that pcidb uses when attempting to discover
	// pciids DB files
	Chroot *string
	// CacheOnly is mostly just useful for testing. It essentially disables
	// looking for any non ~/.cache/pci.ids filepaths (which is useful when we
	// want to test the fetch-from-network code paths
	CacheOnly *bool
	// Enables fetching a pci-ids from a known location on the network if no
	// local pci-ids DB files can be found.
	EnableNetworkFetch *bool
	// Path points to the absolute path of a pci.ids file in a non-standard
	// location.
	Path *string
}

func WithChroot(dir string) *WithOption {
	return &WithOption{Chroot: &dir}
}

func WithCacheOnly() *WithOption {
	return &WithOption{CacheOnly: &trueVar}
}

func WithDirectPath(path string) *WithOption {
	return &WithOption{Path: &path}
}

func WithEnableNetworkFetch() *WithOption {
	return &WithOption{EnableNetworkFetch: &trueVar}
}

func mergeOptions(opts ...*WithOption) *WithOption {
	// Grab options from the environs by default
	defaultChroot := "/"
	if val, exists := os.LookupEnv("PCIDB_CHROOT"); exists {
		defaultChroot = val
	}
	path := ""
	if val, exists := os.LookupEnv("PCIDB_PATH"); exists {
		path = val
	}
	defaultCacheOnly := false
	if val, exists := os.LookupEnv("PCIDB_CACHE_ONLY"); exists {
		if parsed, err := strconv.ParseBool(val); err != nil {
			fmt.Fprintf(
				os.Stderr,
				"Failed parsing a bool from PCIDB_CACHE_ONLY "+
					"environ value of %s",
				val,
			)
		} else if parsed {
			defaultCacheOnly = parsed
		}
	}
	defaultEnableNetworkFetch := false
	if val, exists := os.LookupEnv("PCIDB_ENABLE_NETWORK_FETCH"); exists {
		if parsed, err := strconv.ParseBool(val); err != nil {
			fmt.Fprintf(
				os.Stderr,
				"Failed parsing a bool from PCIDB_ENABLE_NETWORK_FETCH "+
					"environ value of %s",
				val,
			)
		} else if parsed {
			defaultEnableNetworkFetch = parsed
		}
	}

	merged := &WithOption{}
	for _, opt := range opts {
		if opt.Chroot != nil {
			merged.Chroot = opt.Chroot
		}
		if opt.CacheOnly != nil {
			merged.CacheOnly = opt.CacheOnly
		}
		if opt.EnableNetworkFetch != nil {
			merged.EnableNetworkFetch = opt.EnableNetworkFetch
		}
		if opt.Path != nil {
			merged.Path = opt.Path
		}
	}
	// Set the default value if missing from merged
	if merged.Chroot == nil {
		merged.Chroot = &defaultChroot
	}
	if merged.CacheOnly == nil {
		merged.CacheOnly = &defaultCacheOnly
	}
	if merged.EnableNetworkFetch == nil {
		merged.EnableNetworkFetch = &defaultEnableNetworkFetch
	}
	if merged.Path == nil {
		merged.Path = &path
	}
	return merged
}

// New returns a pointer to a PCIDB struct which contains information you can
// use to query PCI vendor, product and class information. It accepts zero or
// more pointers to WithOption structs. If you want to modify the behaviour of
// pcidb, use one of the option modifiers when calling New. For example, to
// change the root directory that pcidb uses when discovering pciids DB files,
// call New(WithChroot("/my/root/override"))
func New(opts ...*WithOption) (*PCIDB, error) {
	ctx := contextFromOptions(mergeOptions(opts...))
	db := &PCIDB{}
	if err := db.load(ctx); err != nil {
		return nil, err
	}
	return db, nil
}
   07070100000825000081A4000000000000000000000001645E367C00001329000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/jaypipes/pcidb/parse.go //
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//

package pcidb

import (
	"bufio"
	"strings"
)

func parseDBFile(db *PCIDB, scanner *bufio.Scanner) error {
	inClassBlock := false
	db.Classes = make(map[string]*Class, 20)
	db.Vendors = make(map[string]*Vendor, 200)
	db.Products = make(map[string]*Product, 1000)
	subclasses := make([]*Subclass, 0)
	progIfaces := make([]*ProgrammingInterface, 0)
	var curClass *Class
	var curSubclass *Subclass
	var curProgIface *ProgrammingInterface
	vendorProducts := make([]*Product, 0)
	var curVendor *Vendor
	var curProduct *Product
	var curSubsystem *Product
	productSubsystems := make([]*Product, 0)
	for scanner.Scan() {
		line := scanner.Text()
		// skip comments and blank lines
		if line == "" || strings.HasPrefix(line, "#") {
			continue
		}
		lineBytes := []rune(line)

		// Lines starting with an uppercase "C" indicate a PCI top-level class
		// dbrmation block. These lines look like this:
		//
		// C 02  Network controller
		if lineBytes[0] == 'C' {
			if curClass != nil {
				// finalize existing class because we found a new class block
				curClass.Subclasses = subclasses
				subclasses = make([]*Subclass, 0)
			}
			inClassBlock = true
			classID := string(lineBytes[2:4])
			className := string(lineBytes[6:])
			curClass = &Class{
				ID:         classID,
				Name:       className,
				Subclasses: subclasses,
			}
			db.Classes[curClass.ID] = curClass
			continue
		}

		// Lines not beginning with an uppercase "C" or a TAB character
		// indicate a top-level vendor dbrmation block. These lines look like
		// this:
		//
		// 0a89  BREA Technologies Inc
		if lineBytes[0] != '\t' {
			if curVendor != nil {
				// finalize existing vendor because we found a new vendor block
				curVendor.Products = vendorProducts
				vendorProducts = make([]*Product, 0)
			}
			inClassBlock = false
			vendorID := string(lineBytes[0:4])
			vendorName := string(lineBytes[6:])
			curVendor = &Vendor{
				ID:       vendorID,
				Name:     vendorName,
				Products: vendorProducts,
			}
			db.Vendors[curVendor.ID] = curVendor
			continue
		}

		// Lines beginning with only a single TAB character are *either* a
		// subclass OR are a device dbrmation block. If we're in a class
		// block (i.e. the last parsed block header was for a PCI class), then
		// we parse a subclass block. Otherwise, we parse a device dbrmation
		// block.
		//
		// A subclass dbrmation block looks like this:
		//
		// \t00  Non-VGA unclassified device
		//
		// A device dbrmation block looks like this:
		//
		// \t0002  PCI to MCA Bridge
		if len(lineBytes) > 1 && lineBytes[1] != '\t' {
			if inClassBlock {
				if curSubclass != nil {
					// finalize existing subclass because we found a new subclass block
					curSubclass.ProgrammingInterfaces = progIfaces
					progIfaces = make([]*ProgrammingInterface, 0)
				}
				subclassID := string(lineBytes[1:3])
				subclassName := string(lineBytes[5:])
				curSubclass = &Subclass{
					ID:                    subclassID,
					Name:                  subclassName,
					ProgrammingInterfaces: progIfaces,
				}
				subclasses = append(subclasses, curSubclass)
			} else {
				if curProduct != nil {
					// finalize existing product because we found a new product block
					curProduct.Subsystems = productSubsystems
					productSubsystems = make([]*Product, 0)
				}
				productID := string(lineBytes[1:5])
				productName := string(lineBytes[7:])
				productKey := curVendor.ID + productID
				curProduct = &Product{
					VendorID: curVendor.ID,
					ID:       productID,
					Name:     productName,
				}
				vendorProducts = append(vendorProducts, curProduct)
				db.Products[productKey] = curProduct
			}
		} else {
			// Lines beginning with two TAB characters are *either* a subsystem
			// (subdevice) OR are a programming interface for a PCI device
			// subclass. If we're in a class block (i.e. the last parsed block
			// header was for a PCI class), then we parse a programming
			// interface block, otherwise we parse a subsystem block.
			//
			// A programming interface block looks like this:
			//
			// \t\t00  UHCI
			//
			// A subsystem block looks like this:
			//
			// \t\t0e11 4091  Smart Array 6i
			if inClassBlock {
				progIfaceID := string(lineBytes[2:4])
				progIfaceName := string(lineBytes[6:])
				curProgIface = &ProgrammingInterface{
					ID:   progIfaceID,
					Name: progIfaceName,
				}
				progIfaces = append(progIfaces, curProgIface)
			} else {
				vendorID := string(lineBytes[2:6])
				subsystemID := string(lineBytes[7:11])
				subsystemName := string(lineBytes[13:])
				curSubsystem = &Product{
					VendorID: vendorID,
					ID:       subsystemID,
					Name:     subsystemName,
				}
				productSubsystems = append(productSubsystems, curSubsystem)
			}
		}
	}
	return nil
}
   07070100000826000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/vendor/github.com/jbenet  07070100000827000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/jbenet/go-context   07070100000828000081A4000000000000000000000001645E367C0000043B000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/jbenet/go-context/LICENSE   The MIT License (MIT)

Copyright (c) 2014 Juan Batiz-Benet

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
 07070100000829000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/jbenet/go-context/io    0707010000082A000081A4000000000000000000000001645E367C00000C76000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/jbenet/go-context/io/ctxio.go   // Package ctxio provides io.Reader and io.Writer wrappers that
// respect context.Contexts. Use these at the interface between
// your context code and your io.
//
// WARNING: read the code. see how writes and reads will continue
// until you cancel the io. Maybe this package should provide
// versions of io.ReadCloser and io.WriteCloser that automatically
// call .Close when the context expires. But for now -- since in my
// use cases I have long-lived connections with ephemeral io wrappers
// -- this has yet to be a need.
package ctxio

import (
	"io"

	context "golang.org/x/net/context"
)

type ioret struct {
	n   int
	err error
}

type Writer interface {
	io.Writer
}

type ctxWriter struct {
	w   io.Writer
	ctx context.Context
}

// NewWriter wraps a writer to make it respect given Context.
// If there is a blocking write, the returned Writer will return
// whenever the context is cancelled (the return values are n=0
// and err=ctx.Err().)
//
// Note well: this wrapper DOES NOT ACTUALLY cancel the underlying
// write-- there is no way to do that with the standard go io
// interface. So the read and write _will_ happen or hang. So, use
// this sparingly, make sure to cancel the read or write as necesary
// (e.g. closing a connection whose context is up, etc.)
//
// Furthermore, in order to protect your memory from being read
// _after_ you've cancelled the context, this io.Writer will
// first make a **copy** of the buffer.
func NewWriter(ctx context.Context, w io.Writer) *ctxWriter {
	if ctx == nil {
		ctx = context.Background()
	}
	return &ctxWriter{ctx: ctx, w: w}
}

func (w *ctxWriter) Write(buf []byte) (int, error) {
	buf2 := make([]byte, len(buf))
	copy(buf2, buf)

	c := make(chan ioret, 1)

	go func() {
		n, err := w.w.Write(buf2)
		c <- ioret{n, err}
		close(c)
	}()

	select {
	case r := <-c:
		return r.n, r.err
	case <-w.ctx.Done():
		return 0, w.ctx.Err()
	}
}

type Reader interface {
	io.Reader
}

type ctxReader struct {
	r   io.Reader
	ctx context.Context
}

// NewReader wraps a reader to make it respect given Context.
// If there is a blocking read, the returned Reader will return
// whenever the context is cancelled (the return values are n=0
// and err=ctx.Err().)
//
// Note well: this wrapper DOES NOT ACTUALLY cancel the underlying
// write-- there is no way to do that with the standard go io
// interface. So the read and write _will_ happen or hang. So, use
// this sparingly, make sure to cancel the read or write as necesary
// (e.g. closing a connection whose context is up, etc.)
//
// Furthermore, in order to protect your memory from being read
// _before_ you've cancelled the context, this io.Reader will
// allocate a buffer of the same size, and **copy** into the client's
// if the read succeeds in time.
func NewReader(ctx context.Context, r io.Reader) *ctxReader {
	return &ctxReader{ctx: ctx, r: r}
}

func (r *ctxReader) Read(buf []byte) (int, error) {
	buf2 := make([]byte, len(buf))

	c := make(chan ioret, 1)

	go func() {
		n, err := r.r.Read(buf2)
		c <- ioret{n, err}
		close(c)
	}()

	select {
	case ret := <-c:
		copy(buf, buf2)
		return ret.n, ret.err
	case <-r.ctx.Done():
		return 0, r.ctx.Err()
	}
}
  0707010000082B000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002B00000000elemental-cli-0.3.1/vendor/github.com/joho    0707010000082C000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/github.com/joho/godotenv   0707010000082D000081A4000000000000000000000001645E367C0000000A000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/joho/godotenv/.gitignore    .DS_Store
  0707010000082E000081A4000000000000000000000001645E367C0000042D000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/joho/godotenv/LICENCE   Copyright (c) 2013 John Barton

MIT License

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

   0707010000082F000081A4000000000000000000000001645E367C000017EE000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/joho/godotenv/README.md # GoDotEnv ![CI](https://github.com/joho/godotenv/workflows/CI/badge.svg) [![Go Report Card](https://goreportcard.com/badge/github.com/joho/godotenv)](https://goreportcard.com/report/github.com/joho/godotenv)

A Go (golang) port of the Ruby [dotenv](https://github.com/bkeepers/dotenv) project (which loads env vars from a .env file).

From the original Library:

> Storing configuration in the environment is one of the tenets of a twelve-factor app. Anything that is likely to change between deployment environments–such as resource handles for databases or credentials for external services–should be extracted from the code into environment variables.
>
> But it is not always practical to set environment variables on development machines or continuous integration servers where multiple projects are run. Dotenv load variables from a .env file into ENV when the environment is bootstrapped.

It can be used as a library (for loading in env for your own daemons etc.) or as a bin command.

There is test coverage and CI for both linuxish and Windows environments, but I make no guarantees about the bin version working on Windows.

## Installation

As a library

```shell
go get github.com/joho/godotenv
```

or if you want to use it as a bin command

go >= 1.17
```shell
go install github.com/joho/godotenv/cmd/godotenv@latest
```

go < 1.17
```shell
go get github.com/joho/godotenv/cmd/godotenv
```

## Usage

Add your application configuration to your `.env` file in the root of your project:

```shell
S3_BUCKET=YOURS3BUCKET
SECRET_KEY=YOURSECRETKEYGOESHERE
```

Then in your Go app you can do something like

```go
package main

import (
    "log"
    "os"

    "github.com/joho/godotenv"
)

func main() {
  err := godotenv.Load()
  if err != nil {
    log.Fatal("Error loading .env file")
  }

  s3Bucket := os.Getenv("S3_BUCKET")
  secretKey := os.Getenv("SECRET_KEY")

  // now do something with s3 or whatever
}
```

If you're even lazier than that, you can just take advantage of the autoload package which will read in `.env` on import

```go
import _ "github.com/joho/godotenv/autoload"
```

While `.env` in the project root is the default, you don't have to be constrained, both examples below are 100% legit

```go
godotenv.Load("somerandomfile")
godotenv.Load("filenumberone.env", "filenumbertwo.env")
```

If you want to be really fancy with your env file you can do comments and exports (below is a valid env file)

```shell
# I am a comment and that is OK
SOME_VAR=someval
FOO=BAR # comments at line end are OK too
export BAR=BAZ
```

Or finally you can do YAML(ish) style

```yaml
FOO: bar
BAR: baz
```

as a final aside, if you don't want godotenv munging your env you can just get a map back instead

```go
var myEnv map[string]string
myEnv, err := godotenv.Read()

s3Bucket := myEnv["S3_BUCKET"]
```

... or from an `io.Reader` instead of a local file

```go
reader := getRemoteFile()
myEnv, err := godotenv.Parse(reader)
```

... or from a `string` if you so desire

```go
content := getRemoteFileContent()
myEnv, err := godotenv.Unmarshal(content)
```

### Precedence & Conventions

Existing envs take precedence of envs that are loaded later.

The [convention](https://github.com/bkeepers/dotenv#what-other-env-files-can-i-use)
for managing multiple environments (i.e. development, test, production)
is to create an env named `{YOURAPP}_ENV` and load envs in this order:

```go
env := os.Getenv("FOO_ENV")
if "" == env {
  env = "development"
}

godotenv.Load(".env." + env + ".local")
if "test" != env {
  godotenv.Load(".env.local")
}
godotenv.Load(".env." + env)
godotenv.Load() // The Original .env
```

If you need to, you can also use `godotenv.Overload()` to defy this convention
and overwrite existing envs instead of only supplanting them. Use with caution.

### Command Mode

Assuming you've installed the command as above and you've got `$GOPATH/bin` in your `$PATH`

```
godotenv -f /some/path/to/.env some_command with some args
```

If you don't specify `-f` it will fall back on the default of loading `.env` in `PWD`

By default, it won't override existing environment variables; you can do that with the `-o` flag.

### Writing Env Files

Godotenv can also write a map representing the environment to a correctly-formatted and escaped file

```go
env, err := godotenv.Unmarshal("KEY=value")
err := godotenv.Write(env, "./.env")
```

... or to a string

```go
env, err := godotenv.Unmarshal("KEY=value")
content, err := godotenv.Marshal(env)
```

## Contributing

Contributions are welcome, but with some caveats.

This library has been declared feature complete (see [#182](https://github.com/joho/godotenv/issues/182) for background) and will not be accepting issues or pull requests adding new functionality or breaking the library API.

Contributions would be gladly accepted that:

* bring this library's parsing into closer compatibility with the mainline dotenv implementations, in particular [Ruby's dotenv](https://github.com/bkeepers/dotenv) and [Node.js' dotenv](https://github.com/motdotla/dotenv)
* keep the library up to date with the go ecosystem (ie CI bumps, documentation changes, changes in the core libraries)
* bug fixes for use cases that pertain to the library's purpose of easing development of codebases deployed into twelve factor environments

*code changes without tests and references to peer dotenv implementations will not be accepted*

1. Fork it
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Added some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create new Pull Request

## Releases

Releases should follow [Semver](http://semver.org/) though the first couple of releases are `v1` and `v1.1`.

Use [annotated tags for all releases](https://github.com/joho/godotenv/issues/30). Example `git tag -a v1.2.1`

## Who?

The original library [dotenv](https://github.com/bkeepers/dotenv) was written by [Brandon Keepers](http://opensoul.org/), and this port was done by [John Barton](https://johnbarton.co/) based off the tests/fixtures in the original library.
  07070100000830000081A4000000000000000000000001645E367C00001784000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/joho/godotenv/godotenv.go   // Package godotenv is a go port of the ruby dotenv library (https://github.com/bkeepers/dotenv)
//
// Examples/readme can be found on the GitHub page at https://github.com/joho/godotenv
//
// The TL;DR is that you make a .env file that looks something like
//
//	SOME_ENV_VAR=somevalue
//
// and then in your go code you can call
//
//	godotenv.Load()
//
// and all the env vars declared in .env will be available through os.Getenv("SOME_ENV_VAR")
package godotenv

import (
	"bytes"
	"fmt"
	"io"
	"os"
	"os/exec"
	"sort"
	"strconv"
	"strings"
)

const doubleQuoteSpecialChars = "\\\n\r\"!$`"

// Parse reads an env file from io.Reader, returning a map of keys and values.
func Parse(r io.Reader) (map[string]string, error) {
	var buf bytes.Buffer
	_, err := io.Copy(&buf, r)
	if err != nil {
		return nil, err
	}

	return UnmarshalBytes(buf.Bytes())
}

// Load will read your env file(s) and load them into ENV for this process.
//
// Call this function as close as possible to the start of your program (ideally in main).
//
// If you call Load without any args it will default to loading .env in the current path.
//
// You can otherwise tell it which files to load (there can be more than one) like:
//
//	godotenv.Load("fileone", "filetwo")
//
// It's important to note that it WILL NOT OVERRIDE an env variable that already exists - consider the .env file to set dev vars or sensible defaults.
func Load(filenames ...string) (err error) {
	filenames = filenamesOrDefault(filenames)

	for _, filename := range filenames {
		err = loadFile(filename, false)
		if err != nil {
			return // return early on a spazout
		}
	}
	return
}

// Overload will read your env file(s) and load them into ENV for this process.
//
// Call this function as close as possible to the start of your program (ideally in main).
//
// If you call Overload without any args it will default to loading .env in the current path.
//
// You can otherwise tell it which files to load (there can be more than one) like:
//
//	godotenv.Overload("fileone", "filetwo")
//
// It's important to note this WILL OVERRIDE an env variable that already exists - consider the .env file to forcefully set all vars.
func Overload(filenames ...string) (err error) {
	filenames = filenamesOrDefault(filenames)

	for _, filename := range filenames {
		err = loadFile(filename, true)
		if err != nil {
			return // return early on a spazout
		}
	}
	return
}

// Read all env (with same file loading semantics as Load) but return values as
// a map rather than automatically writing values into env
func Read(filenames ...string) (envMap map[string]string, err error) {
	filenames = filenamesOrDefault(filenames)
	envMap = make(map[string]string)

	for _, filename := range filenames {
		individualEnvMap, individualErr := readFile(filename)

		if individualErr != nil {
			err = individualErr
			return // return early on a spazout
		}

		for key, value := range individualEnvMap {
			envMap[key] = value
		}
	}

	return
}

// Unmarshal reads an env file from a string, returning a map of keys and values.
func Unmarshal(str string) (envMap map[string]string, err error) {
	return UnmarshalBytes([]byte(str))
}

// UnmarshalBytes parses env file from byte slice of chars, returning a map of keys and values.
func UnmarshalBytes(src []byte) (map[string]string, error) {
	out := make(map[string]string)
	err := parseBytes(src, out)

	return out, err
}

// Exec loads env vars from the specified filenames (empty map falls back to default)
// then executes the cmd specified.
//
// Simply hooks up os.Stdin/err/out to the command and calls Run().
//
// If you want more fine grained control over your command it's recommended
// that you use `Load()`, `Overload()` or `Read()` and the `os/exec` package yourself.
func Exec(filenames []string, cmd string, cmdArgs []string, overload bool) error {
	op := Load
	if overload {
		op = Overload
	}
	if err := op(filenames...); err != nil {
		return err
	}

	command := exec.Command(cmd, cmdArgs...)
	command.Stdin = os.Stdin
	command.Stdout = os.Stdout
	command.Stderr = os.Stderr
	return command.Run()
}

// Write serializes the given environment and writes it to a file.
func Write(envMap map[string]string, filename string) error {
	content, err := Marshal(envMap)
	if err != nil {
		return err
	}
	file, err := os.Create(filename)
	if err != nil {
		return err
	}
	defer file.Close()
	_, err = file.WriteString(content + "\n")
	if err != nil {
		return err
	}
	return file.Sync()
}

// Marshal outputs the given environment as a dotenv-formatted environment file.
// Each line is in the format: KEY="VALUE" where VALUE is backslash-escaped.
func Marshal(envMap map[string]string) (string, error) {
	lines := make([]string, 0, len(envMap))
	for k, v := range envMap {
		if d, err := strconv.Atoi(v); err == nil {
			lines = append(lines, fmt.Sprintf(`%s=%d`, k, d))
		} else {
			lines = append(lines, fmt.Sprintf(`%s="%s"`, k, doubleQuoteEscape(v)))
		}
	}
	sort.Strings(lines)
	return strings.Join(lines, "\n"), nil
}

func filenamesOrDefault(filenames []string) []string {
	if len(filenames) == 0 {
		return []string{".env"}
	}
	return filenames
}

func loadFile(filename string, overload bool) error {
	envMap, err := readFile(filename)
	if err != nil {
		return err
	}

	currentEnv := map[string]bool{}
	rawEnv := os.Environ()
	for _, rawEnvLine := range rawEnv {
		key := strings.Split(rawEnvLine, "=")[0]
		currentEnv[key] = true
	}

	for key, value := range envMap {
		if !currentEnv[key] || overload {
			_ = os.Setenv(key, value)
		}
	}

	return nil
}

func readFile(filename string) (envMap map[string]string, err error) {
	file, err := os.Open(filename)
	if err != nil {
		return
	}
	defer file.Close()

	return Parse(file)
}

func doubleQuoteEscape(line string) string {
	for _, c := range doubleQuoteSpecialChars {
		toReplace := "\\" + string(c)
		if c == '\n' {
			toReplace = `\n`
		}
		if c == '\r' {
			toReplace = `\r`
		}
		line = strings.Replace(line, string(c), toReplace, -1)
	}
	return line
}
07070100000831000081A4000000000000000000000001645E367C000017FE000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/joho/godotenv/parser.go package godotenv

import (
	"bytes"
	"errors"
	"fmt"
	"regexp"
	"strings"
	"unicode"
)

const (
	charComment       = '#'
	prefixSingleQuote = '\''
	prefixDoubleQuote = '"'

	exportPrefix = "export"
)

func parseBytes(src []byte, out map[string]string) error {
	src = bytes.Replace(src, []byte("\r\n"), []byte("\n"), -1)
	cutset := src
	for {
		cutset = getStatementStart(cutset)
		if cutset == nil {
			// reached end of file
			break
		}

		key, left, err := locateKeyName(cutset)
		if err != nil {
			return err
		}

		value, left, err := extractVarValue(left, out)
		if err != nil {
			return err
		}

		out[key] = value
		cutset = left
	}

	return nil
}

// getStatementPosition returns position of statement begin.
//
// It skips any comment line or non-whitespace character.
func getStatementStart(src []byte) []byte {
	pos := indexOfNonSpaceChar(src)
	if pos == -1 {
		return nil
	}

	src = src[pos:]
	if src[0] != charComment {
		return src
	}

	// skip comment section
	pos = bytes.IndexFunc(src, isCharFunc('\n'))
	if pos == -1 {
		return nil
	}

	return getStatementStart(src[pos:])
}

// locateKeyName locates and parses key name and returns rest of slice
func locateKeyName(src []byte) (key string, cutset []byte, err error) {
	// trim "export" and space at beginning
	src = bytes.TrimLeftFunc(src, isSpace)
	if bytes.HasPrefix(src, []byte(exportPrefix)) {
		trimmed := bytes.TrimPrefix(src, []byte(exportPrefix))
		if bytes.IndexFunc(trimmed, isSpace) == 0 {
			src = bytes.TrimLeftFunc(trimmed, isSpace)
		}
	}

	// locate key name end and validate it in single loop
	offset := 0
loop:
	for i, char := range src {
		rchar := rune(char)
		if isSpace(rchar) {
			continue
		}

		switch char {
		case '=', ':':
			// library also supports yaml-style value declaration
			key = string(src[0:i])
			offset = i + 1
			break loop
		case '_':
		default:
			// variable name should match [A-Za-z0-9_.]
			if unicode.IsLetter(rchar) || unicode.IsNumber(rchar) || rchar == '.' {
				continue
			}

			return "", nil, fmt.Errorf(
				`unexpected character %q in variable name near %q`,
				string(char), string(src))
		}
	}

	if len(src) == 0 {
		return "", nil, errors.New("zero length string")
	}

	// trim whitespace
	key = strings.TrimRightFunc(key, unicode.IsSpace)
	cutset = bytes.TrimLeftFunc(src[offset:], isSpace)
	return key, cutset, nil
}

// extractVarValue extracts variable value and returns rest of slice
func extractVarValue(src []byte, vars map[string]string) (value string, rest []byte, err error) {
	quote, hasPrefix := hasQuotePrefix(src)
	if !hasPrefix {
		// unquoted value - read until end of line
		endOfLine := bytes.IndexFunc(src, isLineEnd)

		// Hit EOF without a trailing newline
		if endOfLine == -1 {
			endOfLine = len(src)

			if endOfLine == 0 {
				return "", nil, nil
			}
		}

		// Convert line to rune away to do accurate countback of runes
		line := []rune(string(src[0:endOfLine]))

		// Assume end of line is end of var
		endOfVar := len(line)
		if endOfVar == 0 {
			return "", src[endOfLine:], nil
		}

		// Work backwards to check if the line ends in whitespace then
		// a comment (ie asdasd # some comment)
		for i := endOfVar - 1; i >= 0; i-- {
			if line[i] == charComment && i > 0 {
				if isSpace(line[i-1]) {
					endOfVar = i
					break
				}
			}
		}

		trimmed := strings.TrimFunc(string(line[0:endOfVar]), isSpace)

		return expandVariables(trimmed, vars), src[endOfLine:], nil
	}

	// lookup quoted string terminator
	for i := 1; i < len(src); i++ {
		if char := src[i]; char != quote {
			continue
		}

		// skip escaped quote symbol (\" or \', depends on quote)
		if prevChar := src[i-1]; prevChar == '\\' {
			continue
		}

		// trim quotes
		trimFunc := isCharFunc(rune(quote))
		value = string(bytes.TrimLeftFunc(bytes.TrimRightFunc(src[0:i], trimFunc), trimFunc))
		if quote == prefixDoubleQuote {
			// unescape newlines for double quote (this is compat feature)
			// and expand environment variables
			value = expandVariables(expandEscapes(value), vars)
		}

		return value, src[i+1:], nil
	}

	// return formatted error if quoted string is not terminated
	valEndIndex := bytes.IndexFunc(src, isCharFunc('\n'))
	if valEndIndex == -1 {
		valEndIndex = len(src)
	}

	return "", nil, fmt.Errorf("unterminated quoted value %s", src[:valEndIndex])
}

func expandEscapes(str string) string {
	out := escapeRegex.ReplaceAllStringFunc(str, func(match string) string {
		c := strings.TrimPrefix(match, `\`)
		switch c {
		case "n":
			return "\n"
		case "r":
			return "\r"
		default:
			return match
		}
	})
	return unescapeCharsRegex.ReplaceAllString(out, "$1")
}

func indexOfNonSpaceChar(src []byte) int {
	return bytes.IndexFunc(src, func(r rune) bool {
		return !unicode.IsSpace(r)
	})
}

// hasQuotePrefix reports whether charset starts with single or double quote and returns quote character
func hasQuotePrefix(src []byte) (prefix byte, isQuored bool) {
	if len(src) == 0 {
		return 0, false
	}

	switch prefix := src[0]; prefix {
	case prefixDoubleQuote, prefixSingleQuote:
		return prefix, true
	default:
		return 0, false
	}
}

func isCharFunc(char rune) func(rune) bool {
	return func(v rune) bool {
		return v == char
	}
}

// isSpace reports whether the rune is a space character but not line break character
//
// this differs from unicode.IsSpace, which also applies line break as space
func isSpace(r rune) bool {
	switch r {
	case '\t', '\v', '\f', '\r', ' ', 0x85, 0xA0:
		return true
	}
	return false
}

func isLineEnd(r rune) bool {
	if r == '\n' || r == '\r' {
		return true
	}
	return false
}

var (
	escapeRegex        = regexp.MustCompile(`\\.`)
	expandVarRegex     = regexp.MustCompile(`(\\)?(\$)(\()?\{?([A-Z0-9_]+)?\}?`)
	unescapeCharsRegex = regexp.MustCompile(`\\([^$])`)
)

func expandVariables(v string, m map[string]string) string {
	return expandVarRegex.ReplaceAllStringFunc(v, func(s string) string {
		submatch := expandVarRegex.FindStringSubmatch(s)

		if submatch == nil {
			return s
		}
		if submatch[1] == "\\" || submatch[2] == "(" {
			return submatch[0][1:]
		} else if submatch[4] != "" {
			return m[submatch[4]]
		}
		return s
	})
}
  07070100000832000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/vendor/github.com/kendru  07070100000833000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/github.com/kendru/darwin   07070100000834000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/github.com/kendru/darwin/go    07070100000835000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/kendru/darwin/go/depgraph   07070100000836000081A4000000000000000000000001645E367C00001711000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/kendru/darwin/go/depgraph/depgraph.go   package depgraph

import (
	"errors"
)

// A node in this graph is just a string, so a nodeset is a map whose
// keys are the nodes that are present.
type nodeset map[string]struct{}

// depmap tracks the nodes that have some dependency relationship to
// some other node, represented by the key of the map.
type depmap map[string]nodeset

type Graph struct {
	nodes nodeset

	// Maintain dependency relationships in both directions. These
	// data structures are the edges of the graph.

	// `dependencies` tracks child -> parents.
	dependencies depmap
	// `dependents` tracks parent -> children.
	dependents depmap
	// Keep track of the nodes of the graph themselves.
}

func New() *Graph {
	return &Graph{
		dependencies: make(depmap),
		dependents:   make(depmap),
		nodes:        make(nodeset),
	}
}

func (g *Graph) DependOn(child, parent string) error {
	if child == parent {
		return errors.New("self-referential dependencies not allowed")
	}

	if g.DependsOn(parent, child) {
		return errors.New("circular dependencies not allowed")
	}

	// Add nodes.
	g.nodes[parent] = struct{}{}
	g.nodes[child] = struct{}{}

	// Add edges.
	addNodeToNodeset(g.dependents, parent, child)
	addNodeToNodeset(g.dependencies, child, parent)

	return nil
}

func (g *Graph) DependsOn(child, parent string) bool {
	deps := g.Dependencies(child)
	_, ok := deps[parent]
	return ok
}

func (g *Graph) HasDependent(parent, child string) bool {
	deps := g.Dependents(parent)
	_, ok := deps[child]
	return ok
}

func (g *Graph) Leaves() []string {
	leaves := make([]string, 0)

	for node := range g.nodes {
		if _, ok := g.dependencies[node]; !ok {
			leaves = append(leaves, node)
		}
	}

	return leaves
}

// TopoSortedLayers returns a slice of all of the graph nodes in topological sort order. That is,
// if `B` depends on `A`, then `A` is guaranteed to come before `B` in the sorted output.
// The graph is guaranteed to be cycle-free because cycles are detected while building the
// graph. Additionally, the output is grouped into "layers", which are guaranteed to not have
// any dependencies within each layer. This is useful, e.g. when building an execution plan for
// some DAG, in which case each element within each layer could be executed in parallel. If you
// do not need this layered property, use `Graph.TopoSorted()`, which flattens all elements.
func (g *Graph) TopoSortedLayers() [][]string {
	layers := [][]string{}

	// Copy the graph
	shrinkingGraph := g.clone()
	for {
		leaves := shrinkingGraph.Leaves()
		if len(leaves) == 0 {
			break
		}

		layers = append(layers, leaves)
		for _, leafNode := range leaves {
			shrinkingGraph.remove(leafNode)
		}
	}

	return layers
}

func removeFromDepmap(dm depmap, key, node string) {
	nodes := dm[key]
	if len(nodes) == 1 {
		// The only element in the nodeset must be `node`, so we
		// can delete the entry entirely.
		delete(dm, key)
	} else {
		// Otherwise, remove the single node from the nodeset.
		delete(nodes, node)
	}
}

func (g *Graph) remove(node string) {
	// Remove edges from things that depend on `node`.
	for dependent := range g.dependents[node] {
		removeFromDepmap(g.dependencies, dependent, node)
	}
	delete(g.dependents, node)

	// Remove all edges from node to the things it depends on.
	for dependency := range g.dependencies[node] {
		removeFromDepmap(g.dependents, dependency, node)
	}
	delete(g.dependencies, node)

	// Finally, remove the node itself.
	delete(g.nodes, node)
}

// TopoSorted returns all the nodes in the graph is topological sort order.
// See also `Graph.TopoSortedLayers()`.
func (g *Graph) TopoSorted() []string {
	nodeCount := 0
	layers := g.TopoSortedLayers()
	for _, layer := range layers {
		nodeCount += len(layer)
	}

	allNodes := make([]string, 0, nodeCount)
	for _, layer := range layers {
		for _, node := range layer {
			allNodes = append(allNodes, node)
		}
	}

	return allNodes
}

func (g *Graph) Dependencies(child string) nodeset {
	return g.buildTransitive(child, g.immediateDependencies)
}

func (g *Graph) immediateDependencies(node string) nodeset {
	return g.dependencies[node]
}

func (g *Graph) Dependents(parent string) nodeset {
	return g.buildTransitive(parent, g.immediateDependents)
}

func (g *Graph) immediateDependents(node string) nodeset {
	return g.dependents[node]
}

func (g *Graph) clone() *Graph {
	return &Graph{
		dependencies: copyDepmap(g.dependencies),
		dependents:   copyDepmap(g.dependents),
		nodes:        copyNodeset(g.nodes),
	}
}

// buildTransitive starts at `root` and continues calling `nextFn` to keep discovering more nodes until
// the graph cannot produce any more. It returns the set of all discovered nodes.
func (g *Graph) buildTransitive(root string, nextFn func(string) nodeset) nodeset {
	if _, ok := g.nodes[root]; !ok {
		return nil
	}

	out := make(nodeset)
	searchNext := []string{root}
	for len(searchNext) > 0 {
		// List of new nodes from this layer of the dependency graph. This is
		// assigned to `searchNext` at the end of the outer "discovery" loop.
		discovered := []string{}
		for _, node := range searchNext {
			// For each node to discover, find the next nodes.
			for nextNode := range nextFn(node) {
				// If we have not seen the node before, add it to the output as well
				// as the list of nodes to traverse in the next iteration.
				if _, ok := out[nextNode]; !ok {
					out[nextNode] = struct{}{}
					discovered = append(discovered, nextNode)
				}
			}
		}
		searchNext = discovered
	}

	return out
}

func copyNodeset(s nodeset) nodeset {
	out := make(nodeset, len(s))
	for k, v := range s {
		out[k] = v
	}
	return out
}

func copyDepmap(m depmap) depmap {
	out := make(depmap, len(m))
	for k, v := range m {
		out[k] = copyNodeset(v)
	}
	return out
}

func addNodeToNodeset(dm depmap, key, node string) {
	nodes, ok := dm[key]
	if !ok {
		nodes = make(nodeset)
		dm[key] = nodes
	}
	nodes[node] = struct{}{}
}
   07070100000837000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003100000000elemental-cli-0.3.1/vendor/github.com/kevinburke  07070100000838000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/kevinburke/ssh_config   07070100000839000081A4000000000000000000000001645E367C0000001C000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/kevinburke/ssh_config/.gitattributes    testdata/dos-lines eol=crlf
0707010000083A000081A4000000000000000000000001645E367C00000000000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/kevinburke/ssh_config/.gitignore    0707010000083B000081A4000000000000000000000001645E367C0000003C000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/kevinburke/ssh_config/.mailmap  Kevin Burke <kevin@burke.dev> Kevin Burke <kev@inburke.com>
0707010000083C000081A4000000000000000000000001645E367C00000167000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/kevinburke/ssh_config/AUTHORS.txt   Carlos A Becker <caarlos0@gmail.com>
Dustin Spicuzza <dustin@virtualroadside.com>
Eugene Terentev <eugene@terentev.net>
Kevin Burke <kevin@burke.dev>
Mark Nevill <nev@improbable.io>
Scott Lessans <slessans@gmail.com>
Sergey Lukjanov <me@slukjanov.name>
Wayne Ashley Berry <wayneashleyberry@gmail.com>
santosh653 <70637961+santosh653@users.noreply.github.com>
 0707010000083D000081A4000000000000000000000001645E367C00000237000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/kevinburke/ssh_config/CHANGELOG.md  # Changes

## Version 1.2

Previously, if a Host declaration or a value had trailing whitespace, that
whitespace would have been included as part of the value. This led to unexpected
consequences. For example:

```
Host example       # A comment
    HostName example.com      # Another comment
```

Prior to version 1.2, the value for Host would have been "example " and the
value for HostName would have been "example.com      ". Both of these are
unintuitive.

Instead, we strip the trailing whitespace in the configuration, which leads to
more intuitive behavior.
 0707010000083E000081A4000000000000000000000001645E367C000008FD000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/kevinburke/ssh_config/LICENSE   Copyright (c) 2017 Kevin Burke.

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

===================

The lexer and parser borrow heavily from github.com/pelletier/go-toml. The
license for that project is copied below.

The MIT License (MIT)

Copyright (c) 2013 - 2017 Thomas Pelletier, Eric Anderton

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
   0707010000083F000081A4000000000000000000000001645E367C000002C1000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/kevinburke/ssh_config/Makefile  BUMP_VERSION := $(GOPATH)/bin/bump_version
STATICCHECK := $(GOPATH)/bin/staticcheck
WRITE_MAILMAP := $(GOPATH)/bin/write_mailmap

$(STATICCHECK):
	go get honnef.co/go/tools/cmd/staticcheck

lint: $(STATICCHECK)
	go vet ./...
	$(STATICCHECK)

test: lint
	@# the timeout helps guard against infinite recursion
	go test -timeout=250ms ./...

race-test: lint
	go test -timeout=500ms -race ./...

$(BUMP_VERSION):
	go get -u github.com/kevinburke/bump_version

$(WRITE_MAILMAP):
	go get -u github.com/kevinburke/write_mailmap

release: test | $(BUMP_VERSION)
	$(BUMP_VERSION) --tag-prefix=v minor config.go

force: ;

AUTHORS.txt: force | $(WRITE_MAILMAP)
	$(WRITE_MAILMAP) > AUTHORS.txt

authors: AUTHORS.txt
   07070100000840000081A4000000000000000000000001645E367C00000B84000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/kevinburke/ssh_config/README.md # ssh_config

This is a Go parser for `ssh_config` files. Importantly, this parser attempts
to preserve comments in a given file, so you can manipulate a `ssh_config` file
from a program, if your heart desires.

It's designed to be used with the excellent
[x/crypto/ssh](https://golang.org/x/crypto/ssh) package, which handles SSH
negotiation but isn't very easy to configure.

The `ssh_config` `Get()` and `GetStrict()` functions will attempt to read values
from `$HOME/.ssh/config` and fall back to `/etc/ssh/ssh_config`. The first
argument is the host name to match on, and the second argument is the key you
want to retrieve.

```go
port := ssh_config.Get("myhost", "Port")
```

Certain directives can occur multiple times for a host (such as `IdentityFile`),
so you should use the `GetAll` or `GetAllStrict` directive to retrieve those
instead.

```go
files := ssh_config.GetAll("myhost", "IdentityFile")
```

You can also load a config file and read values from it.

```go
var config = `
Host *.test
  Compression yes
`

cfg, err := ssh_config.Decode(strings.NewReader(config))
fmt.Println(cfg.Get("example.test", "Port"))
```

Some SSH arguments have default values - for example, the default value for
`KeyboardAuthentication` is `"yes"`. If you call Get(), and no value for the
given Host/keyword pair exists in the config, we'll return a default for the
keyword if one exists.

### Manipulating SSH config files

Here's how you can manipulate an SSH config file, and then write it back to
disk.

```go
f, _ := os.Open(filepath.Join(os.Getenv("HOME"), ".ssh", "config"))
cfg, _ := ssh_config.Decode(f)
for _, host := range cfg.Hosts {
    fmt.Println("patterns:", host.Patterns)
    for _, node := range host.Nodes {
        // Manipulate the nodes as you see fit, or use a type switch to
        // distinguish between Empty, KV, and Include nodes.
        fmt.Println(node.String())
    }
}

// Print the config to stdout:
fmt.Println(cfg.String())
```

## Spec compliance

Wherever possible we try to implement the specification as documented in
the `ssh_config` manpage. Unimplemented features should be present in the
[issues][issues] list.

Notably, the `Match` directive is currently unsupported.

[issues]: https://github.com/kevinburke/ssh_config/issues

## Errata

This is the second [comment-preserving configuration parser][blog] I've written, after
[an /etc/hosts parser][hostsfile]. Eventually, I will write one for every Linux
file format.

[blog]: https://kev.inburke.com/kevin/more-comment-preserving-configuration-parsers/
[hostsfile]: https://github.com/kevinburke/hostsfile

## Donating

I don't get paid to maintain this project. Donations free up time to make
improvements to the library, and respond to bug reports. You can send donations
via Paypal's "Send Money" feature to kev@inburke.com. Donations are not tax
deductible in the USA.

You can also reach out about a consulting engagement: https://burke.services
07070100000841000081A4000000000000000000000001645E367C00005806000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/kevinburke/ssh_config/config.go // Package ssh_config provides tools for manipulating SSH config files.
//
// Importantly, this parser attempts to preserve comments in a given file, so
// you can manipulate a `ssh_config` file from a program, if your heart desires.
//
// The Get() and GetStrict() functions will attempt to read values from
// $HOME/.ssh/config, falling back to /etc/ssh/ssh_config. The first argument is
// the host name to match on ("example.com"), and the second argument is the key
// you want to retrieve ("Port"). The keywords are case insensitive.
//
// 		port := ssh_config.Get("myhost", "Port")
//
// You can also manipulate an SSH config file and then print it or write it back
// to disk.
//
//	f, _ := os.Open(filepath.Join(os.Getenv("HOME"), ".ssh", "config"))
//	cfg, _ := ssh_config.Decode(f)
//	for _, host := range cfg.Hosts {
//		fmt.Println("patterns:", host.Patterns)
//		for _, node := range host.Nodes {
//			fmt.Println(node.String())
//		}
//	}
//
//	// Write the cfg back to disk:
//	fmt.Println(cfg.String())
//
// BUG: the Match directive is currently unsupported; parsing a config with
// a Match directive will trigger an error.
package ssh_config

import (
	"bytes"
	"errors"
	"fmt"
	"io"
	"os"
	osuser "os/user"
	"path/filepath"
	"regexp"
	"runtime"
	"strings"
	"sync"
)

const version = "1.2"

var _ = version

type configFinder func() string

// UserSettings checks ~/.ssh and /etc/ssh for configuration files. The config
// files are parsed and cached the first time Get() or GetStrict() is called.
type UserSettings struct {
	IgnoreErrors       bool
	systemConfig       *Config
	systemConfigFinder configFinder
	userConfig         *Config
	userConfigFinder   configFinder
	loadConfigs        sync.Once
	onceErr            error
}

func homedir() string {
	user, err := osuser.Current()
	if err == nil {
		return user.HomeDir
	} else {
		return os.Getenv("HOME")
	}
}

func userConfigFinder() string {
	return filepath.Join(homedir(), ".ssh", "config")
}

// DefaultUserSettings is the default UserSettings and is used by Get and
// GetStrict. It checks both $HOME/.ssh/config and /etc/ssh/ssh_config for keys,
// and it will return parse errors (if any) instead of swallowing them.
var DefaultUserSettings = &UserSettings{
	IgnoreErrors:       false,
	systemConfigFinder: systemConfigFinder,
	userConfigFinder:   userConfigFinder,
}

func systemConfigFinder() string {
	return filepath.Join("/", "etc", "ssh", "ssh_config")
}

func findVal(c *Config, alias, key string) (string, error) {
	if c == nil {
		return "", nil
	}
	val, err := c.Get(alias, key)
	if err != nil || val == "" {
		return "", err
	}
	if err := validate(key, val); err != nil {
		return "", err
	}
	return val, nil
}

func findAll(c *Config, alias, key string) ([]string, error) {
	if c == nil {
		return nil, nil
	}
	return c.GetAll(alias, key)
}

// Get finds the first value for key within a declaration that matches the
// alias. Get returns the empty string if no value was found, or if IgnoreErrors
// is false and we could not parse the configuration file. Use GetStrict to
// disambiguate the latter cases.
//
// The match for key is case insensitive.
//
// Get is a wrapper around DefaultUserSettings.Get.
func Get(alias, key string) string {
	return DefaultUserSettings.Get(alias, key)
}

// GetAll retrieves zero or more directives for key for the given alias. GetAll
// returns nil if no value was found, or if IgnoreErrors is false and we could
// not parse the configuration file. Use GetAllStrict to disambiguate the
// latter cases.
//
// In most cases you want to use Get or GetStrict, which returns a single value.
// However, a subset of ssh configuration values (IdentityFile, for example)
// allow you to specify multiple directives.
//
// The match for key is case insensitive.
//
// GetAll is a wrapper around DefaultUserSettings.GetAll.
func GetAll(alias, key string) []string {
	return DefaultUserSettings.GetAll(alias, key)
}

// GetStrict finds the first value for key within a declaration that matches the
// alias. If key has a default value and no matching configuration is found, the
// default will be returned. For more information on default values and the way
// patterns are matched, see the manpage for ssh_config.
//
// The returned error will be non-nil if and only if a user's configuration file
// or the system configuration file could not be parsed, and u.IgnoreErrors is
// false.
//
// GetStrict is a wrapper around DefaultUserSettings.GetStrict.
func GetStrict(alias, key string) (string, error) {
	return DefaultUserSettings.GetStrict(alias, key)
}

// GetAllStrict retrieves zero or more directives for key for the given alias.
//
// In most cases you want to use Get or GetStrict, which returns a single value.
// However, a subset of ssh configuration values (IdentityFile, for example)
// allow you to specify multiple directives.
//
// The returned error will be non-nil if and only if a user's configuration file
// or the system configuration file could not be parsed, and u.IgnoreErrors is
// false.
//
// GetAllStrict is a wrapper around DefaultUserSettings.GetAllStrict.
func GetAllStrict(alias, key string) ([]string, error) {
	return DefaultUserSettings.GetAllStrict(alias, key)
}

// Get finds the first value for key within a declaration that matches the
// alias. Get returns the empty string if no value was found, or if IgnoreErrors
// is false and we could not parse the configuration file. Use GetStrict to
// disambiguate the latter cases.
//
// The match for key is case insensitive.
func (u *UserSettings) Get(alias, key string) string {
	val, err := u.GetStrict(alias, key)
	if err != nil {
		return ""
	}
	return val
}

// GetAll retrieves zero or more directives for key for the given alias. GetAll
// returns nil if no value was found, or if IgnoreErrors is false and we could
// not parse the configuration file. Use GetStrict to disambiguate the latter
// cases.
//
// The match for key is case insensitive.
func (u *UserSettings) GetAll(alias, key string) []string {
	val, _ := u.GetAllStrict(alias, key)
	return val
}

// GetStrict finds the first value for key within a declaration that matches the
// alias. If key has a default value and no matching configuration is found, the
// default will be returned. For more information on default values and the way
// patterns are matched, see the manpage for ssh_config.
//
// error will be non-nil if and only if a user's configuration file or the
// system configuration file could not be parsed, and u.IgnoreErrors is false.
func (u *UserSettings) GetStrict(alias, key string) (string, error) {
	u.doLoadConfigs()
	//lint:ignore S1002 I prefer it this way
	if u.onceErr != nil && u.IgnoreErrors == false {
		return "", u.onceErr
	}
	val, err := findVal(u.userConfig, alias, key)
	if err != nil || val != "" {
		return val, err
	}
	val2, err2 := findVal(u.systemConfig, alias, key)
	if err2 != nil || val2 != "" {
		return val2, err2
	}
	return Default(key), nil
}

// GetAllStrict retrieves zero or more directives for key for the given alias.
// If key has a default value and no matching configuration is found, the
// default will be returned. For more information on default values and the way
// patterns are matched, see the manpage for ssh_config.
//
// The returned error will be non-nil if and only if a user's configuration file
// or the system configuration file could not be parsed, and u.IgnoreErrors is
// false.
func (u *UserSettings) GetAllStrict(alias, key string) ([]string, error) {
	u.doLoadConfigs()
	//lint:ignore S1002 I prefer it this way
	if u.onceErr != nil && u.IgnoreErrors == false {
		return nil, u.onceErr
	}
	val, err := findAll(u.userConfig, alias, key)
	if err != nil || val != nil {
		return val, err
	}
	val2, err2 := findAll(u.systemConfig, alias, key)
	if err2 != nil || val2 != nil {
		return val2, err2
	}
	// TODO: IdentityFile has multiple default values that we should return.
	if def := Default(key); def != "" {
		return []string{def}, nil
	}
	return []string{}, nil
}

func (u *UserSettings) doLoadConfigs() {
	u.loadConfigs.Do(func() {
		// can't parse user file, that's ok.
		var filename string
		if u.userConfigFinder == nil {
			filename = userConfigFinder()
		} else {
			filename = u.userConfigFinder()
		}
		var err error
		u.userConfig, err = parseFile(filename)
		//lint:ignore S1002 I prefer it this way
		if err != nil && os.IsNotExist(err) == false {
			u.onceErr = err
			return
		}
		if u.systemConfigFinder == nil {
			filename = systemConfigFinder()
		} else {
			filename = u.systemConfigFinder()
		}
		u.systemConfig, err = parseFile(filename)
		//lint:ignore S1002 I prefer it this way
		if err != nil && os.IsNotExist(err) == false {
			u.onceErr = err
			return
		}
	})
}

func parseFile(filename string) (*Config, error) {
	return parseWithDepth(filename, 0)
}

func parseWithDepth(filename string, depth uint8) (*Config, error) {
	b, err := os.ReadFile(filename)
	if err != nil {
		return nil, err
	}
	return decodeBytes(b, isSystem(filename), depth)
}

func isSystem(filename string) bool {
	// TODO: not sure this is the best way to detect a system repo
	return strings.HasPrefix(filepath.Clean(filename), "/etc/ssh")
}

// Decode reads r into a Config, or returns an error if r could not be parsed as
// an SSH config file.
func Decode(r io.Reader) (*Config, error) {
	b, err := io.ReadAll(r)
	if err != nil {
		return nil, err
	}
	return decodeBytes(b, false, 0)
}

// DecodeBytes reads b into a Config, or returns an error if r could not be
// parsed as an SSH config file.
func DecodeBytes(b []byte) (*Config, error) {
	return decodeBytes(b, false, 0)
}

func decodeBytes(b []byte, system bool, depth uint8) (c *Config, err error) {
	defer func() {
		if r := recover(); r != nil {
			if _, ok := r.(runtime.Error); ok {
				panic(r)
			}
			if e, ok := r.(error); ok && e == ErrDepthExceeded {
				err = e
				return
			}
			err = errors.New(r.(string))
		}
	}()

	c = parseSSH(lexSSH(b), system, depth)
	return c, err
}

// Config represents an SSH config file.
type Config struct {
	// A list of hosts to match against. The file begins with an implicit
	// "Host *" declaration matching all hosts.
	Hosts    []*Host
	depth    uint8
	position Position
}

// Get finds the first value in the configuration that matches the alias and
// contains key. Get returns the empty string if no value was found, or if the
// Config contains an invalid conditional Include value.
//
// The match for key is case insensitive.
func (c *Config) Get(alias, key string) (string, error) {
	lowerKey := strings.ToLower(key)
	for _, host := range c.Hosts {
		if !host.Matches(alias) {
			continue
		}
		for _, node := range host.Nodes {
			switch t := node.(type) {
			case *Empty:
				continue
			case *KV:
				// "keys are case insensitive" per the spec
				lkey := strings.ToLower(t.Key)
				if lkey == "match" {
					panic("can't handle Match directives")
				}
				if lkey == lowerKey {
					return t.Value, nil
				}
			case *Include:
				val := t.Get(alias, key)
				if val != "" {
					return val, nil
				}
			default:
				return "", fmt.Errorf("unknown Node type %v", t)
			}
		}
	}
	return "", nil
}

// GetAll returns all values in the configuration that match the alias and
// contains key, or nil if none are present.
func (c *Config) GetAll(alias, key string) ([]string, error) {
	lowerKey := strings.ToLower(key)
	all := []string(nil)
	for _, host := range c.Hosts {
		if !host.Matches(alias) {
			continue
		}
		for _, node := range host.Nodes {
			switch t := node.(type) {
			case *Empty:
				continue
			case *KV:
				// "keys are case insensitive" per the spec
				lkey := strings.ToLower(t.Key)
				if lkey == "match" {
					panic("can't handle Match directives")
				}
				if lkey == lowerKey {
					all = append(all, t.Value)
				}
			case *Include:
				val, _ := t.GetAll(alias, key)
				if len(val) > 0 {
					all = append(all, val...)
				}
			default:
				return nil, fmt.Errorf("unknown Node type %v", t)
			}
		}
	}

	return all, nil
}

// String returns a string representation of the Config file.
func (c Config) String() string {
	return marshal(c).String()
}

func (c Config) MarshalText() ([]byte, error) {
	return marshal(c).Bytes(), nil
}

func marshal(c Config) *bytes.Buffer {
	var buf bytes.Buffer
	for i := range c.Hosts {
		buf.WriteString(c.Hosts[i].String())
	}
	return &buf
}

// Pattern is a pattern in a Host declaration. Patterns are read-only values;
// create a new one with NewPattern().
type Pattern struct {
	str   string // Its appearance in the file, not the value that gets compiled.
	regex *regexp.Regexp
	not   bool // True if this is a negated match
}

// String prints the string representation of the pattern.
func (p Pattern) String() string {
	return p.str
}

// Copied from regexp.go with * and ? removed.
var specialBytes = []byte(`\.+()|[]{}^$`)

func special(b byte) bool {
	return bytes.IndexByte(specialBytes, b) >= 0
}

// NewPattern creates a new Pattern for matching hosts. NewPattern("*") creates
// a Pattern that matches all hosts.
//
// From the manpage, a pattern consists of zero or more non-whitespace
// characters, `*' (a wildcard that matches zero or more characters), or `?' (a
// wildcard that matches exactly one character). For example, to specify a set
// of declarations for any host in the ".co.uk" set of domains, the following
// pattern could be used:
//
//	Host *.co.uk
//
// The following pattern would match any host in the 192.168.0.[0-9] network range:
//
//	Host 192.168.0.?
func NewPattern(s string) (*Pattern, error) {
	if s == "" {
		return nil, errors.New("ssh_config: empty pattern")
	}
	negated := false
	if s[0] == '!' {
		negated = true
		s = s[1:]
	}
	var buf bytes.Buffer
	buf.WriteByte('^')
	for i := 0; i < len(s); i++ {
		// A byte loop is correct because all metacharacters are ASCII.
		switch b := s[i]; b {
		case '*':
			buf.WriteString(".*")
		case '?':
			buf.WriteString(".?")
		default:
			// borrowing from QuoteMeta here.
			if special(b) {
				buf.WriteByte('\\')
			}
			buf.WriteByte(b)
		}
	}
	buf.WriteByte('$')
	r, err := regexp.Compile(buf.String())
	if err != nil {
		return nil, err
	}
	return &Pattern{str: s, regex: r, not: negated}, nil
}

// Host describes a Host directive and the keywords that follow it.
type Host struct {
	// A list of host patterns that should match this host.
	Patterns []*Pattern
	// A Node is either a key/value pair or a comment line.
	Nodes []Node
	// EOLComment is the comment (if any) terminating the Host line.
	EOLComment string
	// Whitespace if any between the Host declaration and a trailing comment.
	spaceBeforeComment string

	hasEquals    bool
	leadingSpace int // TODO: handle spaces vs tabs here.
	// The file starts with an implicit "Host *" declaration.
	implicit bool
}

// Matches returns true if the Host matches for the given alias. For
// a description of the rules that provide a match, see the manpage for
// ssh_config.
func (h *Host) Matches(alias string) bool {
	found := false
	for i := range h.Patterns {
		if h.Patterns[i].regex.MatchString(alias) {
			if h.Patterns[i].not {
				// Negated match. "A pattern entry may be negated by prefixing
				// it with an exclamation mark (`!'). If a negated entry is
				// matched, then the Host entry is ignored, regardless of
				// whether any other patterns on the line match. Negated matches
				// are therefore useful to provide exceptions for wildcard
				// matches."
				return false
			}
			found = true
		}
	}
	return found
}

// String prints h as it would appear in a config file. Minor tweaks may be
// present in the whitespace in the printed file.
func (h *Host) String() string {
	var buf strings.Builder
	//lint:ignore S1002 I prefer to write it this way
	if h.implicit == false {
		buf.WriteString(strings.Repeat(" ", int(h.leadingSpace)))
		buf.WriteString("Host")
		if h.hasEquals {
			buf.WriteString(" = ")
		} else {
			buf.WriteString(" ")
		}
		for i, pat := range h.Patterns {
			buf.WriteString(pat.String())
			if i < len(h.Patterns)-1 {
				buf.WriteString(" ")
			}
		}
		buf.WriteString(h.spaceBeforeComment)
		if h.EOLComment != "" {
			buf.WriteByte('#')
			buf.WriteString(h.EOLComment)
		}
		buf.WriteByte('\n')
	}
	for i := range h.Nodes {
		buf.WriteString(h.Nodes[i].String())
		buf.WriteByte('\n')
	}
	return buf.String()
}

// Node represents a line in a Config.
type Node interface {
	Pos() Position
	String() string
}

// KV is a line in the config file that contains a key, a value, and possibly
// a comment.
type KV struct {
	Key   string
	Value string
	// Whitespace after the value but before any comment
	spaceAfterValue string
	Comment         string
	hasEquals       bool
	leadingSpace    int // Space before the key. TODO handle spaces vs tabs.
	position        Position
}

// Pos returns k's Position.
func (k *KV) Pos() Position {
	return k.position
}

// String prints k as it was parsed in the config file.
func (k *KV) String() string {
	if k == nil {
		return ""
	}
	equals := " "
	if k.hasEquals {
		equals = " = "
	}
	line := strings.Repeat(" ", int(k.leadingSpace)) + k.Key + equals + k.Value + k.spaceAfterValue
	if k.Comment != "" {
		line += "#" + k.Comment
	}
	return line
}

// Empty is a line in the config file that contains only whitespace or comments.
type Empty struct {
	Comment      string
	leadingSpace int // TODO handle spaces vs tabs.
	position     Position
}

// Pos returns e's Position.
func (e *Empty) Pos() Position {
	return e.position
}

// String prints e as it was parsed in the config file.
func (e *Empty) String() string {
	if e == nil {
		return ""
	}
	if e.Comment == "" {
		return ""
	}
	return fmt.Sprintf("%s#%s", strings.Repeat(" ", int(e.leadingSpace)), e.Comment)
}

// Include holds the result of an Include directive, including the config files
// that have been parsed as part of that directive. At most 5 levels of Include
// statements will be parsed.
type Include struct {
	// Comment is the contents of any comment at the end of the Include
	// statement.
	Comment string
	// an include directive can include several different files, and wildcards
	directives []string

	mu sync.Mutex
	// 1:1 mapping between matches and keys in files array; matches preserves
	// ordering
	matches []string
	// actual filenames are listed here
	files        map[string]*Config
	leadingSpace int
	position     Position
	depth        uint8
	hasEquals    bool
}

const maxRecurseDepth = 5

// ErrDepthExceeded is returned if too many Include directives are parsed.
// Usually this indicates a recursive loop (an Include directive pointing to the
// file it contains).
var ErrDepthExceeded = errors.New("ssh_config: max recurse depth exceeded")

func removeDups(arr []string) []string {
	// Use map to record duplicates as we find them.
	encountered := make(map[string]bool, len(arr))
	result := make([]string, 0)

	for v := range arr {
		//lint:ignore S1002 I prefer it this way
		if encountered[arr[v]] == false {
			encountered[arr[v]] = true
			result = append(result, arr[v])
		}
	}
	return result
}

// NewInclude creates a new Include with a list of file globs to include.
// Configuration files are parsed greedily (e.g. as soon as this function runs).
// Any error encountered while parsing nested configuration files will be
// returned.
func NewInclude(directives []string, hasEquals bool, pos Position, comment string, system bool, depth uint8) (*Include, error) {
	if depth > maxRecurseDepth {
		return nil, ErrDepthExceeded
	}
	inc := &Include{
		Comment:      comment,
		directives:   directives,
		files:        make(map[string]*Config),
		position:     pos,
		leadingSpace: pos.Col - 1,
		depth:        depth,
		hasEquals:    hasEquals,
	}
	// no need for inc.mu.Lock() since nothing else can access this inc
	matches := make([]string, 0)
	for i := range directives {
		var path string
		if filepath.IsAbs(directives[i]) {
			path = directives[i]
		} else if system {
			path = filepath.Join("/etc/ssh", directives[i])
		} else {
			path = filepath.Join(homedir(), ".ssh", directives[i])
		}
		theseMatches, err := filepath.Glob(path)
		if err != nil {
			return nil, err
		}
		matches = append(matches, theseMatches...)
	}
	matches = removeDups(matches)
	inc.matches = matches
	for i := range matches {
		config, err := parseWithDepth(matches[i], depth)
		if err != nil {
			return nil, err
		}
		inc.files[matches[i]] = config
	}
	return inc, nil
}

// Pos returns the position of the Include directive in the larger file.
func (i *Include) Pos() Position {
	return i.position
}

// Get finds the first value in the Include statement matching the alias and the
// given key.
func (inc *Include) Get(alias, key string) string {
	inc.mu.Lock()
	defer inc.mu.Unlock()
	// TODO: we search files in any order which is not correct
	for i := range inc.matches {
		cfg := inc.files[inc.matches[i]]
		if cfg == nil {
			panic("nil cfg")
		}
		val, err := cfg.Get(alias, key)
		if err == nil && val != "" {
			return val
		}
	}
	return ""
}

// GetAll finds all values in the Include statement matching the alias and the
// given key.
func (inc *Include) GetAll(alias, key string) ([]string, error) {
	inc.mu.Lock()
	defer inc.mu.Unlock()
	var vals []string

	// TODO: we search files in any order which is not correct
	for i := range inc.matches {
		cfg := inc.files[inc.matches[i]]
		if cfg == nil {
			panic("nil cfg")
		}
		val, err := cfg.GetAll(alias, key)
		if err == nil && len(val) != 0 {
			// In theory if SupportsMultiple was false for this key we could
			// stop looking here. But the caller has asked us to find all
			// instances of the keyword (and could use Get() if they wanted) so
			// let's keep looking.
			vals = append(vals, val...)
		}
	}
	return vals, nil
}

// String prints out a string representation of this Include directive. Note
// included Config files are not printed as part of this representation.
func (inc *Include) String() string {
	equals := " "
	if inc.hasEquals {
		equals = " = "
	}
	line := fmt.Sprintf("%sInclude%s%s", strings.Repeat(" ", int(inc.leadingSpace)), equals, strings.Join(inc.directives, " "))
	if inc.Comment != "" {
		line += " #" + inc.Comment
	}
	return line
}

var matchAll *Pattern

func init() {
	var err error
	matchAll, err = NewPattern("*")
	if err != nil {
		panic(err)
	}
}

func newConfig() *Config {
	return &Config{
		Hosts: []*Host{
			&Host{
				implicit: true,
				Patterns: []*Pattern{matchAll},
				Nodes:    make([]Node, 0),
			},
		},
		depth: 0,
	}
}
  07070100000842000081A4000000000000000000000001645E367C00000FEA000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/kevinburke/ssh_config/lexer.go  package ssh_config

import (
	"bytes"
)

// Define state functions
type sshLexStateFn func() sshLexStateFn

type sshLexer struct {
	inputIdx int
	input    []rune // Textual source

	buffer        []rune // Runes composing the current token
	tokens        chan token
	line          int
	col           int
	endbufferLine int
	endbufferCol  int
}

func (s *sshLexer) lexComment(previousState sshLexStateFn) sshLexStateFn {
	return func() sshLexStateFn {
		growingString := ""
		for next := s.peek(); next != '\n' && next != eof; next = s.peek() {
			if next == '\r' && s.follow("\r\n") {
				break
			}
			growingString += string(next)
			s.next()
		}
		s.emitWithValue(tokenComment, growingString)
		s.skip()
		return previousState
	}
}

// lex the space after an equals sign in a function
func (s *sshLexer) lexRspace() sshLexStateFn {
	for {
		next := s.peek()
		if !isSpace(next) {
			break
		}
		s.skip()
	}
	return s.lexRvalue
}

func (s *sshLexer) lexEquals() sshLexStateFn {
	for {
		next := s.peek()
		if next == '=' {
			s.emit(tokenEquals)
			s.skip()
			return s.lexRspace
		}
		// TODO error handling here; newline eof etc.
		if !isSpace(next) {
			break
		}
		s.skip()
	}
	return s.lexRvalue
}

func (s *sshLexer) lexKey() sshLexStateFn {
	growingString := ""

	for r := s.peek(); isKeyChar(r); r = s.peek() {
		// simplified a lot here
		if isSpace(r) || r == '=' {
			s.emitWithValue(tokenKey, growingString)
			s.skip()
			return s.lexEquals
		}
		growingString += string(r)
		s.next()
	}
	s.emitWithValue(tokenKey, growingString)
	return s.lexEquals
}

func (s *sshLexer) lexRvalue() sshLexStateFn {
	growingString := ""
	for {
		next := s.peek()
		switch next {
		case '\r':
			if s.follow("\r\n") {
				s.emitWithValue(tokenString, growingString)
				s.skip()
				return s.lexVoid
			}
		case '\n':
			s.emitWithValue(tokenString, growingString)
			s.skip()
			return s.lexVoid
		case '#':
			s.emitWithValue(tokenString, growingString)
			s.skip()
			return s.lexComment(s.lexVoid)
		case eof:
			s.next()
		}
		if next == eof {
			break
		}
		growingString += string(next)
		s.next()
	}
	s.emit(tokenEOF)
	return nil
}

func (s *sshLexer) read() rune {
	r := s.peek()
	if r == '\n' {
		s.endbufferLine++
		s.endbufferCol = 1
	} else {
		s.endbufferCol++
	}
	s.inputIdx++
	return r
}

func (s *sshLexer) next() rune {
	r := s.read()

	if r != eof {
		s.buffer = append(s.buffer, r)
	}
	return r
}

func (s *sshLexer) lexVoid() sshLexStateFn {
	for {
		next := s.peek()
		switch next {
		case '#':
			s.skip()
			return s.lexComment(s.lexVoid)
		case '\r':
			fallthrough
		case '\n':
			s.emit(tokenEmptyLine)
			s.skip()
			continue
		}

		if isSpace(next) {
			s.skip()
		}

		if isKeyStartChar(next) {
			return s.lexKey
		}

		// removed IsKeyStartChar and lexKey. probably will need to readd

		if next == eof {
			s.next()
			break
		}
	}

	s.emit(tokenEOF)
	return nil
}

func (s *sshLexer) ignore() {
	s.buffer = make([]rune, 0)
	s.line = s.endbufferLine
	s.col = s.endbufferCol
}

func (s *sshLexer) skip() {
	s.next()
	s.ignore()
}

func (s *sshLexer) emit(t tokenType) {
	s.emitWithValue(t, string(s.buffer))
}

func (s *sshLexer) emitWithValue(t tokenType, value string) {
	tok := token{
		Position: Position{s.line, s.col},
		typ:      t,
		val:      value,
	}
	s.tokens <- tok
	s.ignore()
}

func (s *sshLexer) peek() rune {
	if s.inputIdx >= len(s.input) {
		return eof
	}

	r := s.input[s.inputIdx]
	return r
}

func (s *sshLexer) follow(next string) bool {
	inputIdx := s.inputIdx
	for _, expectedRune := range next {
		if inputIdx >= len(s.input) {
			return false
		}
		r := s.input[inputIdx]
		inputIdx++
		if expectedRune != r {
			return false
		}
	}
	return true
}

func (s *sshLexer) run() {
	for state := s.lexVoid; state != nil; {
		state = state()
	}
	close(s.tokens)
}

func lexSSH(input []byte) chan token {
	runes := bytes.Runes(input)
	l := &sshLexer{
		input:         runes,
		tokens:        make(chan token),
		line:          1,
		col:           1,
		endbufferLine: 1,
		endbufferCol:  1,
	}
	go l.run()
	return l.tokens
}
  07070100000843000081A4000000000000000000000001645E367C000012CF000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/kevinburke/ssh_config/parser.go package ssh_config

import (
	"fmt"
	"strings"
	"unicode"
)

type sshParser struct {
	flow          chan token
	config        *Config
	tokensBuffer  []token
	currentTable  []string
	seenTableKeys []string
	// /etc/ssh parser or local parser - used to find the default for relative
	// filepaths in the Include directive
	system bool
	depth  uint8
}

type sshParserStateFn func() sshParserStateFn

// Formats and panics an error message based on a token
func (p *sshParser) raiseErrorf(tok *token, msg string, args ...interface{}) {
	// TODO this format is ugly
	panic(tok.Position.String() + ": " + fmt.Sprintf(msg, args...))
}

func (p *sshParser) raiseError(tok *token, err error) {
	if err == ErrDepthExceeded {
		panic(err)
	}
	// TODO this format is ugly
	panic(tok.Position.String() + ": " + err.Error())
}

func (p *sshParser) run() {
	for state := p.parseStart; state != nil; {
		state = state()
	}
}

func (p *sshParser) peek() *token {
	if len(p.tokensBuffer) != 0 {
		return &(p.tokensBuffer[0])
	}

	tok, ok := <-p.flow
	if !ok {
		return nil
	}
	p.tokensBuffer = append(p.tokensBuffer, tok)
	return &tok
}

func (p *sshParser) getToken() *token {
	if len(p.tokensBuffer) != 0 {
		tok := p.tokensBuffer[0]
		p.tokensBuffer = p.tokensBuffer[1:]
		return &tok
	}
	tok, ok := <-p.flow
	if !ok {
		return nil
	}
	return &tok
}

func (p *sshParser) parseStart() sshParserStateFn {
	tok := p.peek()

	// end of stream, parsing is finished
	if tok == nil {
		return nil
	}

	switch tok.typ {
	case tokenComment, tokenEmptyLine:
		return p.parseComment
	case tokenKey:
		return p.parseKV
	case tokenEOF:
		return nil
	default:
		p.raiseErrorf(tok, fmt.Sprintf("unexpected token %q\n", tok))
	}
	return nil
}

func (p *sshParser) parseKV() sshParserStateFn {
	key := p.getToken()
	hasEquals := false
	val := p.getToken()
	if val.typ == tokenEquals {
		hasEquals = true
		val = p.getToken()
	}
	comment := ""
	tok := p.peek()
	if tok == nil {
		tok = &token{typ: tokenEOF}
	}
	if tok.typ == tokenComment && tok.Position.Line == val.Position.Line {
		tok = p.getToken()
		comment = tok.val
	}
	if strings.ToLower(key.val) == "match" {
		// https://github.com/kevinburke/ssh_config/issues/6
		p.raiseErrorf(val, "ssh_config: Match directive parsing is unsupported")
		return nil
	}
	if strings.ToLower(key.val) == "host" {
		strPatterns := strings.Split(val.val, " ")
		patterns := make([]*Pattern, 0)
		for i := range strPatterns {
			if strPatterns[i] == "" {
				continue
			}
			pat, err := NewPattern(strPatterns[i])
			if err != nil {
				p.raiseErrorf(val, "Invalid host pattern: %v", err)
				return nil
			}
			patterns = append(patterns, pat)
		}
		// val.val at this point could be e.g. "example.com       "
		hostval := strings.TrimRightFunc(val.val, unicode.IsSpace)
		spaceBeforeComment := val.val[len(hostval):]
		val.val = hostval
		p.config.Hosts = append(p.config.Hosts, &Host{
			Patterns:           patterns,
			Nodes:              make([]Node, 0),
			EOLComment:         comment,
			spaceBeforeComment: spaceBeforeComment,
			hasEquals:          hasEquals,
		})
		return p.parseStart
	}
	lastHost := p.config.Hosts[len(p.config.Hosts)-1]
	if strings.ToLower(key.val) == "include" {
		inc, err := NewInclude(strings.Split(val.val, " "), hasEquals, key.Position, comment, p.system, p.depth+1)
		if err == ErrDepthExceeded {
			p.raiseError(val, err)
			return nil
		}
		if err != nil {
			p.raiseErrorf(val, "Error parsing Include directive: %v", err)
			return nil
		}
		lastHost.Nodes = append(lastHost.Nodes, inc)
		return p.parseStart
	}
	shortval := strings.TrimRightFunc(val.val, unicode.IsSpace)
	spaceAfterValue := val.val[len(shortval):]
	kv := &KV{
		Key:             key.val,
		Value:           shortval,
		spaceAfterValue: spaceAfterValue,
		Comment:         comment,
		hasEquals:       hasEquals,
		leadingSpace:    key.Position.Col - 1,
		position:        key.Position,
	}
	lastHost.Nodes = append(lastHost.Nodes, kv)
	return p.parseStart
}

func (p *sshParser) parseComment() sshParserStateFn {
	comment := p.getToken()
	lastHost := p.config.Hosts[len(p.config.Hosts)-1]
	lastHost.Nodes = append(lastHost.Nodes, &Empty{
		Comment: comment.val,
		// account for the "#" as well
		leadingSpace: comment.Position.Col - 2,
		position:     comment.Position,
	})
	return p.parseStart
}

func parseSSH(flow chan token, system bool, depth uint8) *Config {
	// Ensure we consume tokens to completion even if parser exits early
	defer func() {
		for range flow {
		}
	}()

	result := newConfig()
	result.position = Position{1, 1}
	parser := &sshParser{
		flow:          flow,
		config:        result,
		tokensBuffer:  make([]token, 0),
		currentTable:  make([]string, 0),
		seenTableKeys: make([]string, 0),
		system:        system,
		depth:         depth,
	}
	parser.run()
	return result
}
 07070100000844000081A4000000000000000000000001645E367C000002C7000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/kevinburke/ssh_config/position.go   package ssh_config

import "fmt"

// Position of a document element within a SSH document.
//
// Line and Col are both 1-indexed positions for the element's line number and
// column number, respectively.  Values of zero or less will cause Invalid(),
// to return true.
type Position struct {
	Line int // line within the document
	Col  int // column within the line
}

// String representation of the position.
// Displays 1-indexed line and column numbers.
func (p Position) String() string {
	return fmt.Sprintf("(%d, %d)", p.Line, p.Col)
}

// Invalid returns whether or not the position is valid (i.e. with negative or
// null values)
func (p Position) Invalid() bool {
	return p.Line <= 0 || p.Col <= 0
}
 07070100000845000081A4000000000000000000000001645E367C0000034F000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/kevinburke/ssh_config/token.go  package ssh_config

import "fmt"

type token struct {
	Position
	typ tokenType
	val string
}

func (t token) String() string {
	switch t.typ {
	case tokenEOF:
		return "EOF"
	}
	return fmt.Sprintf("%q", t.val)
}

type tokenType int

const (
	eof = -(iota + 1)
)

const (
	tokenError tokenType = iota
	tokenEOF
	tokenEmptyLine
	tokenComment
	tokenKey
	tokenEquals
	tokenString
)

func isSpace(r rune) bool {
	return r == ' ' || r == '\t'
}

func isKeyStartChar(r rune) bool {
	return !(isSpace(r) || r == '\r' || r == '\n' || r == eof)
}

// I'm not sure that this is correct
func isKeyChar(r rune) bool {
	// Keys start with the first character that isn't whitespace or [ and end
	// with the last non-whitespace character before the equals sign. Keys
	// cannot contain a # character."
	return !(r == '\r' || r == '\n' || r == eof || r == '=')
}
 07070100000846000081A4000000000000000000000001645E367C00002313000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/kevinburke/ssh_config/validators.go package ssh_config

import (
	"fmt"
	"strconv"
	"strings"
)

// Default returns the default value for the given keyword, for example "22" if
// the keyword is "Port". Default returns the empty string if the keyword has no
// default, or if the keyword is unknown. Keyword matching is case-insensitive.
//
// Default values are provided by OpenSSH_7.4p1 on a Mac.
func Default(keyword string) string {
	return defaults[strings.ToLower(keyword)]
}

// Arguments where the value must be "yes" or "no" and *only* yes or no.
var yesnos = map[string]bool{
	strings.ToLower("BatchMode"):                        true,
	strings.ToLower("CanonicalizeFallbackLocal"):        true,
	strings.ToLower("ChallengeResponseAuthentication"):  true,
	strings.ToLower("CheckHostIP"):                      true,
	strings.ToLower("ClearAllForwardings"):              true,
	strings.ToLower("Compression"):                      true,
	strings.ToLower("EnableSSHKeysign"):                 true,
	strings.ToLower("ExitOnForwardFailure"):             true,
	strings.ToLower("ForwardAgent"):                     true,
	strings.ToLower("ForwardX11"):                       true,
	strings.ToLower("ForwardX11Trusted"):                true,
	strings.ToLower("GatewayPorts"):                     true,
	strings.ToLower("GSSAPIAuthentication"):             true,
	strings.ToLower("GSSAPIDelegateCredentials"):        true,
	strings.ToLower("HostbasedAuthentication"):          true,
	strings.ToLower("IdentitiesOnly"):                   true,
	strings.ToLower("KbdInteractiveAuthentication"):     true,
	strings.ToLower("NoHostAuthenticationForLocalhost"): true,
	strings.ToLower("PasswordAuthentication"):           true,
	strings.ToLower("PermitLocalCommand"):               true,
	strings.ToLower("PubkeyAuthentication"):             true,
	strings.ToLower("RhostsRSAAuthentication"):          true,
	strings.ToLower("RSAAuthentication"):                true,
	strings.ToLower("StreamLocalBindUnlink"):            true,
	strings.ToLower("TCPKeepAlive"):                     true,
	strings.ToLower("UseKeychain"):                      true,
	strings.ToLower("UsePrivilegedPort"):                true,
	strings.ToLower("VisualHostKey"):                    true,
}

var uints = map[string]bool{
	strings.ToLower("CanonicalizeMaxDots"):     true,
	strings.ToLower("CompressionLevel"):        true, // 1 to 9
	strings.ToLower("ConnectionAttempts"):      true,
	strings.ToLower("ConnectTimeout"):          true,
	strings.ToLower("NumberOfPasswordPrompts"): true,
	strings.ToLower("Port"):                    true,
	strings.ToLower("ServerAliveCountMax"):     true,
	strings.ToLower("ServerAliveInterval"):     true,
}

func mustBeYesOrNo(lkey string) bool {
	return yesnos[lkey]
}

func mustBeUint(lkey string) bool {
	return uints[lkey]
}

func validate(key, val string) error {
	lkey := strings.ToLower(key)
	if mustBeYesOrNo(lkey) && (val != "yes" && val != "no") {
		return fmt.Errorf("ssh_config: value for key %q must be 'yes' or 'no', got %q", key, val)
	}
	if mustBeUint(lkey) {
		_, err := strconv.ParseUint(val, 10, 64)
		if err != nil {
			return fmt.Errorf("ssh_config: %v", err)
		}
	}
	return nil
}

var defaults = map[string]string{
	strings.ToLower("AddKeysToAgent"):                  "no",
	strings.ToLower("AddressFamily"):                   "any",
	strings.ToLower("BatchMode"):                       "no",
	strings.ToLower("CanonicalizeFallbackLocal"):       "yes",
	strings.ToLower("CanonicalizeHostname"):            "no",
	strings.ToLower("CanonicalizeMaxDots"):             "1",
	strings.ToLower("ChallengeResponseAuthentication"): "yes",
	strings.ToLower("CheckHostIP"):                     "yes",
	// TODO is this still the correct cipher
	strings.ToLower("Cipher"):                    "3des",
	strings.ToLower("Ciphers"):                   "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc",
	strings.ToLower("ClearAllForwardings"):       "no",
	strings.ToLower("Compression"):               "no",
	strings.ToLower("CompressionLevel"):          "6",
	strings.ToLower("ConnectionAttempts"):        "1",
	strings.ToLower("ControlMaster"):             "no",
	strings.ToLower("EnableSSHKeysign"):          "no",
	strings.ToLower("EscapeChar"):                "~",
	strings.ToLower("ExitOnForwardFailure"):      "no",
	strings.ToLower("FingerprintHash"):           "sha256",
	strings.ToLower("ForwardAgent"):              "no",
	strings.ToLower("ForwardX11"):                "no",
	strings.ToLower("ForwardX11Timeout"):         "20m",
	strings.ToLower("ForwardX11Trusted"):         "no",
	strings.ToLower("GatewayPorts"):              "no",
	strings.ToLower("GlobalKnownHostsFile"):      "/etc/ssh/ssh_known_hosts /etc/ssh/ssh_known_hosts2",
	strings.ToLower("GSSAPIAuthentication"):      "no",
	strings.ToLower("GSSAPIDelegateCredentials"): "no",
	strings.ToLower("HashKnownHosts"):            "no",
	strings.ToLower("HostbasedAuthentication"):   "no",

	strings.ToLower("HostbasedKeyTypes"): "ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519,ssh-rsa",
	strings.ToLower("HostKeyAlgorithms"): "ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519,ssh-rsa",
	// HostName has a dynamic default (the value passed at the command line).

	strings.ToLower("IdentitiesOnly"): "no",
	strings.ToLower("IdentityFile"):   "~/.ssh/identity",

	// IPQoS has a dynamic default based on interactive or non-interactive
	// sessions.

	strings.ToLower("KbdInteractiveAuthentication"): "yes",

	strings.ToLower("KexAlgorithms"): "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1",
	strings.ToLower("LogLevel"):      "INFO",
	strings.ToLower("MACs"):          "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1",

	strings.ToLower("NoHostAuthenticationForLocalhost"): "no",
	strings.ToLower("NumberOfPasswordPrompts"):          "3",
	strings.ToLower("PasswordAuthentication"):           "yes",
	strings.ToLower("PermitLocalCommand"):               "no",
	strings.ToLower("Port"):                             "22",

	strings.ToLower("PreferredAuthentications"): "gssapi-with-mic,hostbased,publickey,keyboard-interactive,password",
	strings.ToLower("Protocol"):                 "2",
	strings.ToLower("ProxyUseFdpass"):           "no",
	strings.ToLower("PubkeyAcceptedKeyTypes"):   "ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519,ssh-rsa",
	strings.ToLower("PubkeyAuthentication"):     "yes",
	strings.ToLower("RekeyLimit"):               "default none",
	strings.ToLower("RhostsRSAAuthentication"):  "no",
	strings.ToLower("RSAAuthentication"):        "yes",

	strings.ToLower("ServerAliveCountMax"):   "3",
	strings.ToLower("ServerAliveInterval"):   "0",
	strings.ToLower("StreamLocalBindMask"):   "0177",
	strings.ToLower("StreamLocalBindUnlink"): "no",
	strings.ToLower("StrictHostKeyChecking"): "ask",
	strings.ToLower("TCPKeepAlive"):          "yes",
	strings.ToLower("Tunnel"):                "no",
	strings.ToLower("TunnelDevice"):          "any:any",
	strings.ToLower("UpdateHostKeys"):        "no",
	strings.ToLower("UseKeychain"):           "no",
	strings.ToLower("UsePrivilegedPort"):     "no",

	strings.ToLower("UserKnownHostsFile"): "~/.ssh/known_hosts ~/.ssh/known_hosts2",
	strings.ToLower("VerifyHostKeyDNS"):   "no",
	strings.ToLower("VisualHostKey"):      "no",
	strings.ToLower("XAuthLocation"):      "/usr/X11R6/bin/xauth",
}

// these identities are used for SSH protocol 2
var defaultProtocol2Identities = []string{
	"~/.ssh/id_dsa",
	"~/.ssh/id_ecdsa",
	"~/.ssh/id_ed25519",
	"~/.ssh/id_rsa",
}

// these directives support multiple items that can be collected
// across multiple files
var pluralDirectives = map[string]bool{
	"CertificateFile": true,
	"IdentityFile":    true,
	"DynamicForward":  true,
	"RemoteForward":   true,
	"SendEnv":         true,
	"SetEnv":          true,
}

// SupportsMultiple reports whether a directive can be specified multiple times.
func SupportsMultiple(key string) bool {
	return pluralDirectives[strings.ToLower(key)]
}
 07070100000847000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003000000000elemental-cli-0.3.1/vendor/github.com/klauspost   07070100000848000041ED000000000000000000000006645E367C00000000000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress  07070100000849000081A4000000000000000000000001645E367C0000001A000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/.gitattributes   * -text
*.bin -text -diff
  0707010000084A000081A4000000000000000000000001645E367C00000168000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/.gitignore   # Compiled Object files, Static and Dynamic libs (Shared Objects)
*.o
*.a
*.so

# Folders
_obj
_test

# Architecture specific extensions/prefixes
*.[568vq]
[568vq].out

*.cgo1.go
*.cgo2.c
_cgo_defun.c
_cgo_gotypes.go
_cgo_export.*

_testmain.go

*.exe
*.test
*.prof
/s2/cmd/_s2sx/sfx-exe

# Linux perf files
perf.data
perf.data.old

# gdb history
.gdb_history
0707010000084B000081A4000000000000000000000001645E367C00000991000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/.goreleaser.yml  # This is an example goreleaser.yaml file with some sane defaults.
# Make sure to check the documentation at http://goreleaser.com
before:
  hooks:
    - ./gen.sh
    - go install mvdan.cc/garble@v0.9.3

builds:
  -
    id: "s2c"
    binary: s2c
    main: ./s2/cmd/s2c/main.go
    flags:
      - -trimpath
    env:
      - CGO_ENABLED=0
    goos:
      - aix
      - linux
      - freebsd
      - netbsd
      - windows
      - darwin
    goarch:
      - 386
      - amd64
      - arm
      - arm64
      - ppc64
      - ppc64le
      - mips64
      - mips64le
    goarm:
      - 7
    gobinary: garble
  -
    id: "s2d"
    binary: s2d
    main: ./s2/cmd/s2d/main.go
    flags:
      - -trimpath
    env:
      - CGO_ENABLED=0
    goos:
      - aix
      - linux
      - freebsd
      - netbsd
      - windows
      - darwin
    goarch:
      - 386
      - amd64
      - arm
      - arm64
      - ppc64
      - ppc64le
      - mips64
      - mips64le
    goarm:
      - 7
    gobinary: garble
  -
    id: "s2sx"
    binary: s2sx
    main: ./s2/cmd/_s2sx/main.go
    flags:
      - -modfile=s2sx.mod
      - -trimpath
    env:
      - CGO_ENABLED=0
    goos:
      - aix
      - linux
      - freebsd
      - netbsd
      - windows
      - darwin
    goarch:
      - 386
      - amd64
      - arm
      - arm64
      - ppc64
      - ppc64le
      - mips64
      - mips64le
    goarm:
      - 7
    gobinary: garble

archives:
  -
    id: s2-binaries
    name_template: "s2-{{ .Os }}_{{ .Arch }}_{{ .Version }}"
    replacements:
      aix: AIX
      darwin: OSX
      linux: Linux
      windows: Windows
      386: i386
      amd64: x86_64
      freebsd: FreeBSD
      netbsd: NetBSD
    format_overrides:
      - goos: windows
        format: zip
    files:
      - unpack/*
      - s2/LICENSE
      - s2/README.md
checksum:
  name_template: 'checksums.txt'
snapshot:
  name_template: "{{ .Tag }}-next"
changelog:
  sort: asc
  filters:
    exclude:
    - '^doc:'
    - '^docs:'
    - '^test:'
    - '^tests:'
    - '^Update\sREADME.md'

nfpms:
  -
    file_name_template: "s2_package_{{ .Version }}_{{ .Os }}_{{ .Arch }}"
    vendor: Klaus Post
    homepage: https://github.com/klauspost/compress
    maintainer: Klaus Post <klauspost@gmail.com>
    description: S2 Compression Tool
    license: BSD 3-Clause
    formats:
      - deb
      - rpm
    replacements:
      darwin: Darwin
      linux: Linux
      freebsd: FreeBSD
      amd64: x86_64
   0707010000084C000081A4000000000000000000000001645E367C0000415D000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/LICENSE  Copyright (c) 2012 The Go Authors. All rights reserved.
Copyright (c) 2019 Klaus Post. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

------------------

Files: gzhttp/*

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright 2016-2017 The New York Times Company

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

------------------

Files: s2/cmd/internal/readahead/*

The MIT License (MIT)

Copyright (c) 2015 Klaus Post

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

---------------------
Files: snappy/*
Files: internal/snapref/*

Copyright (c) 2011 The Snappy-Go Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

-----------------

Files: s2/cmd/internal/filepathx/*

Copyright 2016 The filepathx Authors

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   0707010000084D000081A4000000000000000000000001645E367C0000CA02000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/README.md    # compress

This package provides various compression algorithms.

* [zstandard](https://github.com/klauspost/compress/tree/master/zstd#zstd) compression and decompression in pure Go.
* [S2](https://github.com/klauspost/compress/tree/master/s2#s2-compression) is a high performance replacement for Snappy.
* Optimized [deflate](https://godoc.org/github.com/klauspost/compress/flate) packages which can be used as a dropin replacement for [gzip](https://godoc.org/github.com/klauspost/compress/gzip), [zip](https://godoc.org/github.com/klauspost/compress/zip) and [zlib](https://godoc.org/github.com/klauspost/compress/zlib).
* [snappy](https://github.com/klauspost/compress/tree/master/snappy) is a drop-in replacement for `github.com/golang/snappy` offering better compression and concurrent streams.
* [huff0](https://github.com/klauspost/compress/tree/master/huff0) and [FSE](https://github.com/klauspost/compress/tree/master/fse) implementations for raw entropy encoding.
* [gzhttp](https://github.com/klauspost/compress/tree/master/gzhttp) Provides client and server wrappers for handling gzipped requests efficiently.
* [pgzip](https://github.com/klauspost/pgzip) is a separate package that provides a very fast parallel gzip implementation.

[![Go Reference](https://pkg.go.dev/badge/klauspost/compress.svg)](https://pkg.go.dev/github.com/klauspost/compress?tab=subdirectories)
[![Go](https://github.com/klauspost/compress/actions/workflows/go.yml/badge.svg)](https://github.com/klauspost/compress/actions/workflows/go.yml)
[![Sourcegraph Badge](https://sourcegraph.com/github.com/klauspost/compress/-/badge.svg)](https://sourcegraph.com/github.com/klauspost/compress?badge)

# changelog

* Apr 5, 2023 - [v1.16.4](https://github.com/klauspost/compress/releases/tag/v1.16.4)
	* zstd: Improve zstd best efficiency by @greatroar and @klauspost in https://github.com/klauspost/compress/pull/784
	* zstd: Respect WithAllLitEntropyCompression https://github.com/klauspost/compress/pull/792
	* zstd: Fix amd64 not always detecting corrupt data https://github.com/klauspost/compress/pull/785
	* zstd: Various minor improvements by @greatroar in https://github.com/klauspost/compress/pull/788 https://github.com/klauspost/compress/pull/794 https://github.com/klauspost/compress/pull/795
	* s2: Fix huge block overflow https://github.com/klauspost/compress/pull/779
	* s2: Allow CustomEncoder fallback https://github.com/klauspost/compress/pull/780
	* gzhttp: Suppport ResponseWriter Unwrap() in gzhttp handler by @jgimenez in https://github.com/klauspost/compress/pull/799

* Mar 13, 2023 - [v1.16.1](https://github.com/klauspost/compress/releases/tag/v1.16.1)
	* zstd: Speed up + improve best encoder by @greatroar in https://github.com/klauspost/compress/pull/776
	* gzhttp: Add optional [BREACH mitigation](https://github.com/klauspost/compress/tree/master/gzhttp#breach-mitigation). https://github.com/klauspost/compress/pull/762 https://github.com/klauspost/compress/pull/768 https://github.com/klauspost/compress/pull/769 https://github.com/klauspost/compress/pull/770 https://github.com/klauspost/compress/pull/767
	* s2: Add Intel LZ4s converter https://github.com/klauspost/compress/pull/766
	* zstd: Minor bug fixes https://github.com/klauspost/compress/pull/771 https://github.com/klauspost/compress/pull/772 https://github.com/klauspost/compress/pull/773
	* huff0: Speed up compress1xDo by @greatroar in https://github.com/klauspost/compress/pull/774

* Feb 26, 2023 - [v1.16.0](https://github.com/klauspost/compress/releases/tag/v1.16.0)
	* s2: Add [Dictionary](https://github.com/klauspost/compress/tree/master/s2#dictionaries) support.  https://github.com/klauspost/compress/pull/685
	* s2: Add Compression Size Estimate.  https://github.com/klauspost/compress/pull/752
	* s2: Add support for custom stream encoder. https://github.com/klauspost/compress/pull/755
	* s2: Add LZ4 block converter. https://github.com/klauspost/compress/pull/748
	* s2: Support io.ReaderAt in ReadSeeker. https://github.com/klauspost/compress/pull/747
	* s2c/s2sx: Use concurrent decoding. https://github.com/klauspost/compress/pull/746

* Jan 21st, 2023 (v1.15.15)
	* deflate: Improve level 7-9 by @klauspost in https://github.com/klauspost/compress/pull/739
	* zstd: Add delta encoding support by @greatroar in https://github.com/klauspost/compress/pull/728
	* zstd: Various speed improvements by @greatroar https://github.com/klauspost/compress/pull/741 https://github.com/klauspost/compress/pull/734 https://github.com/klauspost/compress/pull/736 https://github.com/klauspost/compress/pull/744 https://github.com/klauspost/compress/pull/743 https://github.com/klauspost/compress/pull/745
	* gzhttp: Add SuffixETag() and DropETag() options to prevent ETag collisions on compressed responses by @willbicks in https://github.com/klauspost/compress/pull/740

* Jan 3rd, 2023 (v1.15.14)

	* flate: Improve speed in big stateless blocks https://github.com/klauspost/compress/pull/718
	* zstd: Minor speed tweaks by @greatroar in https://github.com/klauspost/compress/pull/716 https://github.com/klauspost/compress/pull/720
	* export NoGzipResponseWriter for custom ResponseWriter wrappers by @harshavardhana in https://github.com/klauspost/compress/pull/722
	* s2: Add example for indexing and existing stream https://github.com/klauspost/compress/pull/723

* Dec 11, 2022 (v1.15.13)
	* zstd: Add [MaxEncodedSize](https://pkg.go.dev/github.com/klauspost/compress@v1.15.13/zstd#Encoder.MaxEncodedSize) to encoder  https://github.com/klauspost/compress/pull/691
	* zstd: Various tweaks and improvements https://github.com/klauspost/compress/pull/693 https://github.com/klauspost/compress/pull/695 https://github.com/klauspost/compress/pull/696 https://github.com/klauspost/compress/pull/701 https://github.com/klauspost/compress/pull/702 https://github.com/klauspost/compress/pull/703 https://github.com/klauspost/compress/pull/704 https://github.com/klauspost/compress/pull/705 https://github.com/klauspost/compress/pull/706 https://github.com/klauspost/compress/pull/707 https://github.com/klauspost/compress/pull/708

* Oct 26, 2022 (v1.15.12)

	* zstd: Tweak decoder allocs. https://github.com/klauspost/compress/pull/680
	* gzhttp: Always delete `HeaderNoCompression` https://github.com/klauspost/compress/pull/683

* Sept 26, 2022 (v1.15.11)

	* flate: Improve level 1-3 compression  https://github.com/klauspost/compress/pull/678
	* zstd: Improve "best" compression by @nightwolfz in https://github.com/klauspost/compress/pull/677
	* zstd: Fix+reduce decompression allocations https://github.com/klauspost/compress/pull/668
	* zstd: Fix non-effective noescape tag https://github.com/klauspost/compress/pull/667

* Sept 16, 2022 (v1.15.10)

	* zstd: Add [WithDecodeAllCapLimit](https://pkg.go.dev/github.com/klauspost/compress@v1.15.10/zstd#WithDecodeAllCapLimit) https://github.com/klauspost/compress/pull/649
	* Add Go 1.19 - deprecate Go 1.16  https://github.com/klauspost/compress/pull/651
	* flate: Improve level 5+6 compression https://github.com/klauspost/compress/pull/656
	* zstd: Improve "better" compresssion  https://github.com/klauspost/compress/pull/657
	* s2: Improve "best" compression https://github.com/klauspost/compress/pull/658
	* s2: Improve "better" compression. https://github.com/klauspost/compress/pull/635
	* s2: Slightly faster non-assembly decompression https://github.com/klauspost/compress/pull/646
	* Use arrays for constant size copies https://github.com/klauspost/compress/pull/659

* July 21, 2022 (v1.15.9)

	* zstd: Fix decoder crash on amd64 (no BMI) on invalid input https://github.com/klauspost/compress/pull/645
	* zstd: Disable decoder extended memory copies (amd64) due to possible crashes https://github.com/klauspost/compress/pull/644
	* zstd: Allow single segments up to "max decoded size" by @klauspost in https://github.com/klauspost/compress/pull/643

* July 13, 2022 (v1.15.8)

	* gzip: fix stack exhaustion bug in Reader.Read https://github.com/klauspost/compress/pull/641
	* s2: Add Index header trim/restore https://github.com/klauspost/compress/pull/638
	* zstd: Optimize seqdeq amd64 asm by @greatroar in https://github.com/klauspost/compress/pull/636
	* zstd: Improve decoder memcopy https://github.com/klauspost/compress/pull/637
	* huff0: Pass a single bitReader pointer to asm by @greatroar in https://github.com/klauspost/compress/pull/634
	* zstd: Branchless getBits for amd64 w/o BMI2 by @greatroar in https://github.com/klauspost/compress/pull/640
	* gzhttp: Remove header before writing https://github.com/klauspost/compress/pull/639

* June 29, 2022 (v1.15.7)

	* s2: Fix absolute forward seeks  https://github.com/klauspost/compress/pull/633
	* zip: Merge upstream  https://github.com/klauspost/compress/pull/631
	* zip: Re-add zip64 fix https://github.com/klauspost/compress/pull/624
	* zstd: translate fseDecoder.buildDtable into asm by @WojciechMula in https://github.com/klauspost/compress/pull/598
	* flate: Faster histograms  https://github.com/klauspost/compress/pull/620
	* deflate: Use compound hcode  https://github.com/klauspost/compress/pull/622

* June 3, 2022 (v1.15.6)
	* s2: Improve coding for long, close matches https://github.com/klauspost/compress/pull/613
	* s2c: Add Snappy/S2 stream recompression https://github.com/klauspost/compress/pull/611
	* zstd: Always use configured block size https://github.com/klauspost/compress/pull/605
	* zstd: Fix incorrect hash table placement for dict encoding in default https://github.com/klauspost/compress/pull/606
	* zstd: Apply default config to ZipDecompressor without options https://github.com/klauspost/compress/pull/608
	* gzhttp: Exclude more common archive formats https://github.com/klauspost/compress/pull/612
	* s2: Add ReaderIgnoreCRC https://github.com/klauspost/compress/pull/609
	* s2: Remove sanity load on index creation https://github.com/klauspost/compress/pull/607
	* snappy: Use dedicated function for scoring https://github.com/klauspost/compress/pull/614
	* s2c+s2d: Use official snappy framed extension https://github.com/klauspost/compress/pull/610

* May 25, 2022 (v1.15.5)
	* s2: Add concurrent stream decompression https://github.com/klauspost/compress/pull/602
	* s2: Fix final emit oob read crash on amd64 https://github.com/klauspost/compress/pull/601
	* huff0: asm implementation of Decompress1X by @WojciechMula https://github.com/klauspost/compress/pull/596
	* zstd: Use 1 less goroutine for stream decoding https://github.com/klauspost/compress/pull/588
	* zstd: Copy literal in 16 byte blocks when possible https://github.com/klauspost/compress/pull/592
	* zstd: Speed up when WithDecoderLowmem(false) https://github.com/klauspost/compress/pull/599
	* zstd: faster next state update in BMI2 version of decode by @WojciechMula in https://github.com/klauspost/compress/pull/593
	* huff0: Do not check max size when reading table. https://github.com/klauspost/compress/pull/586
	* flate: Inplace hashing for level 7-9 by @klauspost in https://github.com/klauspost/compress/pull/590


* May 11, 2022 (v1.15.4)
	* huff0: decompress directly into output by @WojciechMula in [#577](https://github.com/klauspost/compress/pull/577)
	* inflate: Keep dict on stack [#581](https://github.com/klauspost/compress/pull/581)
	* zstd: Faster decoding memcopy in asm [#583](https://github.com/klauspost/compress/pull/583)
	* zstd: Fix ignored crc [#580](https://github.com/klauspost/compress/pull/580)

* May 5, 2022 (v1.15.3)
	* zstd: Allow to ignore checksum checking by @WojciechMula [#572](https://github.com/klauspost/compress/pull/572)
	* s2: Fix incorrect seek for io.SeekEnd in [#575](https://github.com/klauspost/compress/pull/575)

* Apr 26, 2022 (v1.15.2)
	* zstd: Add x86-64 assembly for decompression on streams and blocks. Contributed by [@WojciechMula](https://github.com/WojciechMula). Typically 2x faster.  [#528](https://github.com/klauspost/compress/pull/528) [#531](https://github.com/klauspost/compress/pull/531) [#545](https://github.com/klauspost/compress/pull/545) [#537](https://github.com/klauspost/compress/pull/537)
	* zstd: Add options to ZipDecompressor and fixes [#539](https://github.com/klauspost/compress/pull/539)
	* s2: Use sorted search for index [#555](https://github.com/klauspost/compress/pull/555)
	* Minimum version is Go 1.16, added CI test on 1.18.

* Mar 11, 2022 (v1.15.1)
	* huff0: Add x86 assembly of Decode4X by @WojciechMula in [#512](https://github.com/klauspost/compress/pull/512)
	* zstd: Reuse zip decoders in [#514](https://github.com/klauspost/compress/pull/514)
	* zstd: Detect extra block data and report as corrupted in [#520](https://github.com/klauspost/compress/pull/520)
	* zstd: Handle zero sized frame content size stricter in [#521](https://github.com/klauspost/compress/pull/521)
	* zstd: Add stricter block size checks in [#523](https://github.com/klauspost/compress/pull/523)

* Mar 3, 2022 (v1.15.0)
	* zstd: Refactor decoder by @klauspost in [#498](https://github.com/klauspost/compress/pull/498)
	* zstd: Add stream encoding without goroutines by @klauspost in [#505](https://github.com/klauspost/compress/pull/505)
	* huff0: Prevent single blocks exceeding 16 bits by @klauspost in[#507](https://github.com/klauspost/compress/pull/507)
	* flate: Inline literal emission by @klauspost in [#509](https://github.com/klauspost/compress/pull/509)
	* gzhttp: Add zstd to transport by @klauspost in [#400](https://github.com/klauspost/compress/pull/400)
	* gzhttp: Make content-type optional by @klauspost in [#510](https://github.com/klauspost/compress/pull/510)

Both compression and decompression now supports "synchronous" stream operations. This means that whenever "concurrency" is set to 1, they will operate without spawning goroutines.

Stream decompression is now faster on asynchronous, since the goroutine allocation much more effectively splits the workload. On typical streams this will typically use 2 cores fully for decompression. When a stream has finished decoding no goroutines will be left over, so decoders can now safely be pooled and still be garbage collected.

While the release has been extensively tested, it is recommended to testing when upgrading.

<details>
	<summary>See changes to v1.14.x</summary>
	
* Feb 22, 2022 (v1.14.4)
	* flate: Fix rare huffman only (-2) corruption. [#503](https://github.com/klauspost/compress/pull/503)
	* zip: Update deprecated CreateHeaderRaw to correctly call CreateRaw by @saracen in [#502](https://github.com/klauspost/compress/pull/502)
	* zip: don't read data descriptor early by @saracen in [#501](https://github.com/klauspost/compress/pull/501)  #501
	* huff0: Use static decompression buffer up to 30% faster by @klauspost in [#499](https://github.com/klauspost/compress/pull/499) [#500](https://github.com/klauspost/compress/pull/500)

* Feb 17, 2022 (v1.14.3)
	* flate: Improve fastest levels compression speed ~10% more throughput. [#482](https://github.com/klauspost/compress/pull/482) [#489](https://github.com/klauspost/compress/pull/489) [#490](https://github.com/klauspost/compress/pull/490) [#491](https://github.com/klauspost/compress/pull/491) [#494](https://github.com/klauspost/compress/pull/494)  [#478](https://github.com/klauspost/compress/pull/478)
	* flate: Faster decompression speed, ~5-10%. [#483](https://github.com/klauspost/compress/pull/483)
	* s2: Faster compression with Go v1.18 and amd64 microarch level 3+. [#484](https://github.com/klauspost/compress/pull/484) [#486](https://github.com/klauspost/compress/pull/486)

* Jan 25, 2022 (v1.14.2)
	* zstd: improve header decoder by @dsnet  [#476](https://github.com/klauspost/compress/pull/476)
	* zstd: Add bigger default blocks  [#469](https://github.com/klauspost/compress/pull/469)
	* zstd: Remove unused decompression buffer [#470](https://github.com/klauspost/compress/pull/470)
	* zstd: Fix logically dead code by @ningmingxiao [#472](https://github.com/klauspost/compress/pull/472)
	* flate: Improve level 7-9 [#471](https://github.com/klauspost/compress/pull/471) [#473](https://github.com/klauspost/compress/pull/473)
	* zstd: Add noasm tag for xxhash [#475](https://github.com/klauspost/compress/pull/475)

* Jan 11, 2022 (v1.14.1)
	* s2: Add stream index in [#462](https://github.com/klauspost/compress/pull/462)
	* flate: Speed and efficiency improvements in [#439](https://github.com/klauspost/compress/pull/439) [#461](https://github.com/klauspost/compress/pull/461) [#455](https://github.com/klauspost/compress/pull/455) [#452](https://github.com/klauspost/compress/pull/452) [#458](https://github.com/klauspost/compress/pull/458)
	* zstd: Performance improvement in [#420]( https://github.com/klauspost/compress/pull/420) [#456](https://github.com/klauspost/compress/pull/456) [#437](https://github.com/klauspost/compress/pull/437) [#467](https://github.com/klauspost/compress/pull/467) [#468](https://github.com/klauspost/compress/pull/468)
	* zstd: add arm64 xxhash assembly in [#464](https://github.com/klauspost/compress/pull/464)
	* Add garbled for binaries for s2 in [#445](https://github.com/klauspost/compress/pull/445)
</details>

<details>
	<summary>See changes to v1.13.x</summary>
	
* Aug 30, 2021 (v1.13.5)
	* gz/zlib/flate: Alias stdlib errors [#425](https://github.com/klauspost/compress/pull/425)
	* s2: Add block support to commandline tools [#413](https://github.com/klauspost/compress/pull/413)
	* zstd: pooledZipWriter should return Writers to the same pool [#426](https://github.com/klauspost/compress/pull/426)
	* Removed golang/snappy as external dependency for tests [#421](https://github.com/klauspost/compress/pull/421)

* Aug 12, 2021 (v1.13.4)
	* Add [snappy replacement package](https://github.com/klauspost/compress/tree/master/snappy).
	* zstd: Fix incorrect encoding in "best" mode [#415](https://github.com/klauspost/compress/pull/415)

* Aug 3, 2021 (v1.13.3) 
	* zstd: Improve Best compression [#404](https://github.com/klauspost/compress/pull/404)
	* zstd: Fix WriteTo error forwarding [#411](https://github.com/klauspost/compress/pull/411)
	* gzhttp: Return http.HandlerFunc instead of http.Handler. Unlikely breaking change. [#406](https://github.com/klauspost/compress/pull/406)
	* s2sx: Fix max size error [#399](https://github.com/klauspost/compress/pull/399)
	* zstd: Add optional stream content size on reset [#401](https://github.com/klauspost/compress/pull/401)
	* zstd: use SpeedBestCompression for level >= 10 [#410](https://github.com/klauspost/compress/pull/410)

* Jun 14, 2021 (v1.13.1)
	* s2: Add full Snappy output support  [#396](https://github.com/klauspost/compress/pull/396)
	* zstd: Add configurable [Decoder window](https://pkg.go.dev/github.com/klauspost/compress/zstd#WithDecoderMaxWindow) size [#394](https://github.com/klauspost/compress/pull/394)
	* gzhttp: Add header to skip compression  [#389](https://github.com/klauspost/compress/pull/389)
	* s2: Improve speed with bigger output margin  [#395](https://github.com/klauspost/compress/pull/395)

* Jun 3, 2021 (v1.13.0)
	* Added [gzhttp](https://github.com/klauspost/compress/tree/master/gzhttp#gzip-handler) which allows wrapping HTTP servers and clients with GZIP compressors.
	* zstd: Detect short invalid signatures [#382](https://github.com/klauspost/compress/pull/382)
	* zstd: Spawn decoder goroutine only if needed. [#380](https://github.com/klauspost/compress/pull/380)
</details>


<details>
	<summary>See changes to v1.12.x</summary>
	
* May 25, 2021 (v1.12.3)
	* deflate: Better/faster Huffman encoding [#374](https://github.com/klauspost/compress/pull/374)
	* deflate: Allocate less for history. [#375](https://github.com/klauspost/compress/pull/375)
	* zstd: Forward read errors [#373](https://github.com/klauspost/compress/pull/373) 

* Apr 27, 2021 (v1.12.2)
	* zstd: Improve better/best compression [#360](https://github.com/klauspost/compress/pull/360) [#364](https://github.com/klauspost/compress/pull/364) [#365](https://github.com/klauspost/compress/pull/365)
	* zstd: Add helpers to compress/decompress zstd inside zip files [#363](https://github.com/klauspost/compress/pull/363)
	* deflate: Improve level 5+6 compression [#367](https://github.com/klauspost/compress/pull/367)
	* s2: Improve better/best compression [#358](https://github.com/klauspost/compress/pull/358) [#359](https://github.com/klauspost/compress/pull/358)
	* s2: Load after checking src limit on amd64. [#362](https://github.com/klauspost/compress/pull/362)
	* s2sx: Limit max executable size [#368](https://github.com/klauspost/compress/pull/368) 

* Apr 14, 2021 (v1.12.1)
	* snappy package removed. Upstream added as dependency.
	* s2: Better compression in "best" mode [#353](https://github.com/klauspost/compress/pull/353)
	* s2sx: Add stdin input and detect pre-compressed from signature [#352](https://github.com/klauspost/compress/pull/352)
	* s2c/s2d: Add http as possible input [#348](https://github.com/klauspost/compress/pull/348)
	* s2c/s2d/s2sx: Always truncate when writing files [#352](https://github.com/klauspost/compress/pull/352)
	* zstd: Reduce memory usage further when using [WithLowerEncoderMem](https://pkg.go.dev/github.com/klauspost/compress/zstd#WithLowerEncoderMem) [#346](https://github.com/klauspost/compress/pull/346)
	* s2: Fix potential problem with amd64 assembly and profilers [#349](https://github.com/klauspost/compress/pull/349)
</details>

<details>
	<summary>See changes to v1.11.x</summary>
	
* Mar 26, 2021 (v1.11.13)
	* zstd: Big speedup on small dictionary encodes [#344](https://github.com/klauspost/compress/pull/344) [#345](https://github.com/klauspost/compress/pull/345)
	* zstd: Add [WithLowerEncoderMem](https://pkg.go.dev/github.com/klauspost/compress/zstd#WithLowerEncoderMem) encoder option [#336](https://github.com/klauspost/compress/pull/336)
	* deflate: Improve entropy compression [#338](https://github.com/klauspost/compress/pull/338)
	* s2: Clean up and minor performance improvement in best [#341](https://github.com/klauspost/compress/pull/341)

* Mar 5, 2021 (v1.11.12)
	* s2: Add `s2sx` binary that creates [self extracting archives](https://github.com/klauspost/compress/tree/master/s2#s2sx-self-extracting-archives).
	* s2: Speed up decompression on non-assembly platforms [#328](https://github.com/klauspost/compress/pull/328)

* Mar 1, 2021 (v1.11.9)
	* s2: Add ARM64 decompression assembly. Around 2x output speed. [#324](https://github.com/klauspost/compress/pull/324)
	* s2: Improve "better" speed and efficiency. [#325](https://github.com/klauspost/compress/pull/325)
	* s2: Fix binaries.

* Feb 25, 2021 (v1.11.8)
	* s2: Fixed occational out-of-bounds write on amd64. Upgrade recommended.
	* s2: Add AMD64 assembly for better mode. 25-50% faster. [#315](https://github.com/klauspost/compress/pull/315)
	* s2: Less upfront decoder allocation. [#322](https://github.com/klauspost/compress/pull/322)
	* zstd: Faster "compression" of incompressible data. [#314](https://github.com/klauspost/compress/pull/314)
	* zip: Fix zip64 headers. [#313](https://github.com/klauspost/compress/pull/313)
  
* Jan 14, 2021 (v1.11.7)
	* Use Bytes() interface to get bytes across packages. [#309](https://github.com/klauspost/compress/pull/309)
	* s2: Add 'best' compression option.  [#310](https://github.com/klauspost/compress/pull/310)
	* s2: Add ReaderMaxBlockSize, changes `s2.NewReader` signature to include varargs. [#311](https://github.com/klauspost/compress/pull/311)
	* s2: Fix crash on small better buffers. [#308](https://github.com/klauspost/compress/pull/308)
	* s2: Clean up decoder. [#312](https://github.com/klauspost/compress/pull/312)

* Jan 7, 2021 (v1.11.6)
	* zstd: Make decoder allocations smaller [#306](https://github.com/klauspost/compress/pull/306)
	* zstd: Free Decoder resources when Reset is called with a nil io.Reader  [#305](https://github.com/klauspost/compress/pull/305)

* Dec 20, 2020 (v1.11.4)
	* zstd: Add Best compression mode [#304](https://github.com/klauspost/compress/pull/304)
	* Add header decoder [#299](https://github.com/klauspost/compress/pull/299)
	* s2: Add uncompressed stream option [#297](https://github.com/klauspost/compress/pull/297)
	* Simplify/speed up small blocks with known max size. [#300](https://github.com/klauspost/compress/pull/300)
	* zstd: Always reset literal dict encoder [#303](https://github.com/klauspost/compress/pull/303)

* Nov 15, 2020 (v1.11.3)
	* inflate: 10-15% faster decompression  [#293](https://github.com/klauspost/compress/pull/293)
	* zstd: Tweak DecodeAll default allocation [#295](https://github.com/klauspost/compress/pull/295)

* Oct 11, 2020 (v1.11.2)
	* s2: Fix out of bounds read in "better" block compression [#291](https://github.com/klauspost/compress/pull/291)

* Oct 1, 2020 (v1.11.1)
	* zstd: Set allLitEntropy true in default configuration [#286](https://github.com/klauspost/compress/pull/286)

* Sept 8, 2020 (v1.11.0)
	* zstd: Add experimental compression [dictionaries](https://github.com/klauspost/compress/tree/master/zstd#dictionaries) [#281](https://github.com/klauspost/compress/pull/281)
	* zstd: Fix mixed Write and ReadFrom calls [#282](https://github.com/klauspost/compress/pull/282)
	* inflate/gz: Limit variable shifts, ~5% faster decompression [#274](https://github.com/klauspost/compress/pull/274)
</details>

<details>
	<summary>See changes to v1.10.x</summary>
 
* July 8, 2020 (v1.10.11) 
	* zstd: Fix extra block when compressing with ReadFrom. [#278](https://github.com/klauspost/compress/pull/278)
	* huff0: Also populate compression table when reading decoding table. [#275](https://github.com/klauspost/compress/pull/275)
	
* June 23, 2020 (v1.10.10) 
	* zstd: Skip entropy compression in fastest mode when no matches. [#270](https://github.com/klauspost/compress/pull/270)
	
* June 16, 2020 (v1.10.9): 
	* zstd: API change for specifying dictionaries. See [#268](https://github.com/klauspost/compress/pull/268)
	* zip: update CreateHeaderRaw to handle zip64 fields. [#266](https://github.com/klauspost/compress/pull/266)
	* Fuzzit tests removed. The service has been purchased and is no longer available.
	
* June 5, 2020 (v1.10.8): 
	* 1.15x faster zstd block decompression. [#265](https://github.com/klauspost/compress/pull/265)
	
* June 1, 2020 (v1.10.7): 
	* Added zstd decompression [dictionary support](https://github.com/klauspost/compress/tree/master/zstd#dictionaries)
	* Increase zstd decompression speed up to 1.19x.  [#259](https://github.com/klauspost/compress/pull/259)
	* Remove internal reset call in zstd compression and reduce allocations. [#263](https://github.com/klauspost/compress/pull/263)
	
* May 21, 2020: (v1.10.6) 
	* zstd: Reduce allocations while decoding. [#258](https://github.com/klauspost/compress/pull/258), [#252](https://github.com/klauspost/compress/pull/252)
	* zstd: Stricter decompression checks.
	
* April 12, 2020: (v1.10.5)
	* s2-commands: Flush output when receiving SIGINT. [#239](https://github.com/klauspost/compress/pull/239)
	
* Apr 8, 2020: (v1.10.4) 
	* zstd: Minor/special case optimizations. [#251](https://github.com/klauspost/compress/pull/251),  [#250](https://github.com/klauspost/compress/pull/250),  [#249](https://github.com/klauspost/compress/pull/249),  [#247](https://github.com/klauspost/compress/pull/247)
* Mar 11, 2020: (v1.10.3) 
	* s2: Use S2 encoder in pure Go mode for Snappy output as well. [#245](https://github.com/klauspost/compress/pull/245)
	* s2: Fix pure Go block encoder. [#244](https://github.com/klauspost/compress/pull/244)
	* zstd: Added "better compression" mode. [#240](https://github.com/klauspost/compress/pull/240)
	* zstd: Improve speed of fastest compression mode by 5-10% [#241](https://github.com/klauspost/compress/pull/241)
	* zstd: Skip creating encoders when not needed. [#238](https://github.com/klauspost/compress/pull/238)
	
* Feb 27, 2020: (v1.10.2) 
	* Close to 50% speedup in inflate (gzip/zip decompression). [#236](https://github.com/klauspost/compress/pull/236) [#234](https://github.com/klauspost/compress/pull/234) [#232](https://github.com/klauspost/compress/pull/232)
	* Reduce deflate level 1-6 memory usage up to 59%. [#227](https://github.com/klauspost/compress/pull/227)
	
* Feb 18, 2020: (v1.10.1)
	* Fix zstd crash when resetting multiple times without sending data. [#226](https://github.com/klauspost/compress/pull/226)
	* deflate: Fix dictionary use on level 1-6. [#224](https://github.com/klauspost/compress/pull/224)
	* Remove deflate writer reference when closing. [#224](https://github.com/klauspost/compress/pull/224)
	
* Feb 4, 2020: (v1.10.0) 
	* Add optional dictionary to [stateless deflate](https://pkg.go.dev/github.com/klauspost/compress/flate?tab=doc#StatelessDeflate). Breaking change, send `nil` for previous behaviour. [#216](https://github.com/klauspost/compress/pull/216)
	* Fix buffer overflow on repeated small block deflate.  [#218](https://github.com/klauspost/compress/pull/218)
	* Allow copying content from an existing ZIP file without decompressing+compressing. [#214](https://github.com/klauspost/compress/pull/214)
	* Added [S2](https://github.com/klauspost/compress/tree/master/s2#s2-compression) AMD64 assembler and various optimizations. Stream speed >10GB/s.  [#186](https://github.com/klauspost/compress/pull/186)

</details>

<details>
	<summary>See changes prior to v1.10.0</summary>

* Jan 20,2020 (v1.9.8) Optimize gzip/deflate with better size estimates and faster table generation. [#207](https://github.com/klauspost/compress/pull/207) by [luyu6056](https://github.com/luyu6056),  [#206](https://github.com/klauspost/compress/pull/206).
* Jan 11, 2020: S2 Encode/Decode will use provided buffer if capacity is big enough. [#204](https://github.com/klauspost/compress/pull/204) 
* Jan 5, 2020: (v1.9.7) Fix another zstd regression in v1.9.5 - v1.9.6 removed.
* Jan 4, 2020: (v1.9.6) Regression in v1.9.5 fixed causing corrupt zstd encodes in rare cases.
* Jan 4, 2020: Faster IO in [s2c + s2d commandline tools](https://github.com/klauspost/compress/tree/master/s2#commandline-tools) compression/decompression. [#192](https://github.com/klauspost/compress/pull/192)
* Dec 29, 2019: Removed v1.9.5 since fuzz tests showed a compatibility problem with the reference zstandard decoder.
* Dec 29, 2019: (v1.9.5) zstd: 10-20% faster block compression. [#199](https://github.com/klauspost/compress/pull/199)
* Dec 29, 2019: [zip](https://godoc.org/github.com/klauspost/compress/zip) package updated with latest Go features
* Dec 29, 2019: zstd: Single segment flag condintions tweaked. [#197](https://github.com/klauspost/compress/pull/197)
* Dec 18, 2019: s2: Faster compression when ReadFrom is used. [#198](https://github.com/klauspost/compress/pull/198)
* Dec 10, 2019: s2: Fix repeat length output when just above at 16MB limit.
* Dec 10, 2019: zstd: Add function to get decoder as io.ReadCloser. [#191](https://github.com/klauspost/compress/pull/191)
* Dec 3, 2019: (v1.9.4) S2: limit max repeat length. [#188](https://github.com/klauspost/compress/pull/188)
* Dec 3, 2019: Add [WithNoEntropyCompression](https://godoc.org/github.com/klauspost/compress/zstd#WithNoEntropyCompression) to zstd [#187](https://github.com/klauspost/compress/pull/187)
* Dec 3, 2019: Reduce memory use for tests. Check for leaked goroutines.
* Nov 28, 2019 (v1.9.3) Less allocations in stateless deflate.
* Nov 28, 2019: 5-20% Faster huff0 decode. Impacts zstd as well. [#184](https://github.com/klauspost/compress/pull/184)
* Nov 12, 2019 (v1.9.2) Added [Stateless Compression](#stateless-compression) for gzip/deflate.
* Nov 12, 2019: Fixed zstd decompression of large single blocks. [#180](https://github.com/klauspost/compress/pull/180)
* Nov 11, 2019: Set default  [s2c](https://github.com/klauspost/compress/tree/master/s2#commandline-tools) block size to 4MB.
* Nov 11, 2019: Reduce inflate memory use by 1KB.
* Nov 10, 2019: Less allocations in deflate bit writer.
* Nov 10, 2019: Fix inconsistent error returned by zstd decoder.
* Oct 28, 2019 (v1.9.1) ztsd: Fix crash when compressing blocks. [#174](https://github.com/klauspost/compress/pull/174)
* Oct 24, 2019 (v1.9.0) zstd: Fix rare data corruption [#173](https://github.com/klauspost/compress/pull/173)
* Oct 24, 2019 zstd: Fix huff0 out of buffer write [#171](https://github.com/klauspost/compress/pull/171) and always return errors [#172](https://github.com/klauspost/compress/pull/172) 
* Oct 10, 2019: Big deflate rewrite, 30-40% faster with better compression [#105](https://github.com/klauspost/compress/pull/105)

</details>

<details>
	<summary>See changes prior to v1.9.0</summary>

* Oct 10, 2019: (v1.8.6) zstd: Allow partial reads to get flushed data. [#169](https://github.com/klauspost/compress/pull/169)
* Oct 3, 2019: Fix inconsistent results on broken zstd streams.
* Sep 25, 2019: Added `-rm` (remove source files) and `-q` (no output except errors) to `s2c` and `s2d` [commands](https://github.com/klauspost/compress/tree/master/s2#commandline-tools)
* Sep 16, 2019: (v1.8.4) Add `s2c` and `s2d` [commandline tools](https://github.com/klauspost/compress/tree/master/s2#commandline-tools).
* Sep 10, 2019: (v1.8.3) Fix s2 decoder [Skip](https://godoc.org/github.com/klauspost/compress/s2#Reader.Skip).
* Sep 7, 2019: zstd: Added [WithWindowSize](https://godoc.org/github.com/klauspost/compress/zstd#WithWindowSize), contributed by [ianwilkes](https://github.com/ianwilkes).
* Sep 5, 2019: (v1.8.2) Add [WithZeroFrames](https://godoc.org/github.com/klauspost/compress/zstd#WithZeroFrames) which adds full zero payload block encoding option.
* Sep 5, 2019: Lazy initialization of zstandard predefined en/decoder tables.
* Aug 26, 2019: (v1.8.1) S2: 1-2% compression increase in "better" compression mode.
* Aug 26, 2019: zstd: Check maximum size of Huffman 1X compressed literals while decoding.
* Aug 24, 2019: (v1.8.0) Added [S2 compression](https://github.com/klauspost/compress/tree/master/s2#s2-compression), a high performance replacement for Snappy. 
* Aug 21, 2019: (v1.7.6) Fixed minor issues found by fuzzer. One could lead to zstd not decompressing.
* Aug 18, 2019: Add [fuzzit](https://fuzzit.dev/) continuous fuzzing.
* Aug 14, 2019: zstd: Skip incompressible data 2x faster.  [#147](https://github.com/klauspost/compress/pull/147)
* Aug 4, 2019 (v1.7.5): Better literal compression. [#146](https://github.com/klauspost/compress/pull/146)
* Aug 4, 2019: Faster zstd compression. [#143](https://github.com/klauspost/compress/pull/143) [#144](https://github.com/klauspost/compress/pull/144)
* Aug 4, 2019: Faster zstd decompression. [#145](https://github.com/klauspost/compress/pull/145) [#143](https://github.com/klauspost/compress/pull/143) [#142](https://github.com/klauspost/compress/pull/142)
* July 15, 2019 (v1.7.4): Fix double EOF block in rare cases on zstd encoder.
* July 15, 2019 (v1.7.3): Minor speedup/compression increase in default zstd encoder.
* July 14, 2019: zstd decoder: Fix decompression error on multiple uses with mixed content.
* July 7, 2019 (v1.7.2): Snappy update, zstd decoder potential race fix.
* June 17, 2019: zstd decompression bugfix.
* June 17, 2019: fix 32 bit builds.
* June 17, 2019: Easier use in modules (less dependencies).
* June 9, 2019: New stronger "default" [zstd](https://github.com/klauspost/compress/tree/master/zstd#zstd) compression mode. Matches zstd default compression ratio.
* June 5, 2019: 20-40% throughput in [zstandard](https://github.com/klauspost/compress/tree/master/zstd#zstd) compression and better compression.
* June 5, 2019: deflate/gzip compression: Reduce memory usage of lower compression levels.
* June 2, 2019: Added [zstandard](https://github.com/klauspost/compress/tree/master/zstd#zstd) compression!
* May 25, 2019: deflate/gzip: 10% faster bit writer, mostly visible in lower levels.
* Apr 22, 2019: [zstd](https://github.com/klauspost/compress/tree/master/zstd#zstd) decompression added.
* Aug 1, 2018: Added [huff0 README](https://github.com/klauspost/compress/tree/master/huff0#huff0-entropy-compression).
* Jul 8, 2018: Added [Performance Update 2018](#performance-update-2018) below.
* Jun 23, 2018: Merged [Go 1.11 inflate optimizations](https://go-review.googlesource.com/c/go/+/102235). Go 1.9 is now required. Backwards compatible version tagged with [v1.3.0](https://github.com/klauspost/compress/releases/tag/v1.3.0).
* Apr 2, 2018: Added [huff0](https://godoc.org/github.com/klauspost/compress/huff0) en/decoder. Experimental for now, API may change.
* Mar 4, 2018: Added [FSE Entropy](https://godoc.org/github.com/klauspost/compress/fse) en/decoder. Experimental for now, API may change.
* Nov 3, 2017: Add compression [Estimate](https://godoc.org/github.com/klauspost/compress#Estimate) function.
* May 28, 2017: Reduce allocations when resetting decoder.
* Apr 02, 2017: Change back to official crc32, since changes were merged in Go 1.7.
* Jan 14, 2017: Reduce stack pressure due to array copies. See [Issue #18625](https://github.com/golang/go/issues/18625).
* Oct 25, 2016: Level 2-4 have been rewritten and now offers significantly better performance than before.
* Oct 20, 2016: Port zlib changes from Go 1.7 to fix zlib writer issue. Please update.
* Oct 16, 2016: Go 1.7 changes merged. Apples to apples this package is a few percent faster, but has a significantly better balance between speed and compression per level. 
* Mar 24, 2016: Always attempt Huffman encoding on level 4-7. This improves base 64 encoded data compression.
* Mar 24, 2016: Small speedup for level 1-3.
* Feb 19, 2016: Faster bit writer, level -2 is 15% faster, level 1 is 4% faster.
* Feb 19, 2016: Handle small payloads faster in level 1-3.
* Feb 19, 2016: Added faster level 2 + 3 compression modes.
* Feb 19, 2016: [Rebalanced compression levels](https://blog.klauspost.com/rebalancing-deflate-compression-levels/), so there is a more even progresssion in terms of compression. New default level is 5.
* Feb 14, 2016: Snappy: Merge upstream changes. 
* Feb 14, 2016: Snappy: Fix aggressive skipping.
* Feb 14, 2016: Snappy: Update benchmark.
* Feb 13, 2016: Deflate: Fixed assembler problem that could lead to sub-optimal compression.
* Feb 12, 2016: Snappy: Added AMD64 SSE 4.2 optimizations to matching, which makes easy to compress material run faster. Typical speedup is around 25%.
* Feb 9, 2016: Added Snappy package fork. This version is 5-7% faster, much more on hard to compress content.
* Jan 30, 2016: Optimize level 1 to 3 by not considering static dictionary or storing uncompressed. ~4-5% speedup.
* Jan 16, 2016: Optimization on deflate level 1,2,3 compression.
* Jan 8 2016: Merge [CL 18317](https://go-review.googlesource.com/#/c/18317): fix reading, writing of zip64 archives.
* Dec 8 2015: Make level 1 and -2 deterministic even if write size differs.
* Dec 8 2015: Split encoding functions, so hashing and matching can potentially be inlined. 1-3% faster on AMD64. 5% faster on other platforms.
* Dec 8 2015: Fixed rare [one byte out-of bounds read](https://github.com/klauspost/compress/issues/20). Please update!
* Nov 23 2015: Optimization on token writer. ~2-4% faster. Contributed by [@dsnet](https://github.com/dsnet).
* Nov 20 2015: Small optimization to bit writer on 64 bit systems.
* Nov 17 2015: Fixed out-of-bound errors if the underlying Writer returned an error. See [#15](https://github.com/klauspost/compress/issues/15).
* Nov 12 2015: Added [io.WriterTo](https://golang.org/pkg/io/#WriterTo) support to gzip/inflate.
* Nov 11 2015: Merged [CL 16669](https://go-review.googlesource.com/#/c/16669/4): archive/zip: enable overriding (de)compressors per file
* Oct 15 2015: Added skipping on uncompressible data. Random data speed up >5x.

</details>

# deflate usage

The packages are drop-in replacements for standard libraries. Simply replace the import path to use them:

| old import         | new import                              | Documentation
|--------------------|-----------------------------------------|--------------------|
| `compress/gzip`    | `github.com/klauspost/compress/gzip`    | [gzip](https://pkg.go.dev/github.com/klauspost/compress/gzip?tab=doc)
| `compress/zlib`    | `github.com/klauspost/compress/zlib`    | [zlib](https://pkg.go.dev/github.com/klauspost/compress/zlib?tab=doc)
| `archive/zip`      | `github.com/klauspost/compress/zip`     | [zip](https://pkg.go.dev/github.com/klauspost/compress/zip?tab=doc)
| `compress/flate`   | `github.com/klauspost/compress/flate`   | [flate](https://pkg.go.dev/github.com/klauspost/compress/flate?tab=doc)

* Optimized [deflate](https://godoc.org/github.com/klauspost/compress/flate) packages which can be used as a dropin replacement for [gzip](https://godoc.org/github.com/klauspost/compress/gzip), [zip](https://godoc.org/github.com/klauspost/compress/zip) and [zlib](https://godoc.org/github.com/klauspost/compress/zlib).

You may also be interested in [pgzip](https://github.com/klauspost/pgzip), which is a drop in replacement for gzip, which support multithreaded compression on big files and the optimized [crc32](https://github.com/klauspost/crc32) package used by these packages.

The packages contains the same as the standard library, so you can use the godoc for that: [gzip](http://golang.org/pkg/compress/gzip/), [zip](http://golang.org/pkg/archive/zip/),  [zlib](http://golang.org/pkg/compress/zlib/), [flate](http://golang.org/pkg/compress/flate/).

Currently there is only minor speedup on decompression (mostly CRC32 calculation).

Memory usage is typically 1MB for a Writer. stdlib is in the same range. 
If you expect to have a lot of concurrently allocated Writers consider using 
the stateless compress described below.

For compression performance, see: [this spreadsheet](https://docs.google.com/spreadsheets/d/1nuNE2nPfuINCZJRMt6wFWhKpToF95I47XjSsc-1rbPQ/edit?usp=sharing).

# Stateless compression

This package offers stateless compression as a special option for gzip/deflate. 
It will do compression but without maintaining any state between Write calls.

This means there will be no memory kept between Write calls, but compression and speed will be suboptimal.

This is only relevant in cases where you expect to run many thousands of compressors concurrently, 
but with very little activity. This is *not* intended for regular web servers serving individual requests.  

Because of this, the size of actual Write calls will affect output size.

In gzip, specify level `-3` / `gzip.StatelessCompression` to enable.

For direct deflate use, NewStatelessWriter and StatelessDeflate are available. See [documentation](https://godoc.org/github.com/klauspost/compress/flate#NewStatelessWriter)

A `bufio.Writer` can of course be used to control write sizes. For example, to use a 4KB buffer:

```
	// replace 'ioutil.Discard' with your output.
	gzw, err := gzip.NewWriterLevel(ioutil.Discard, gzip.StatelessCompression)
	if err != nil {
		return err
	}
	defer gzw.Close()

	w := bufio.NewWriterSize(gzw, 4096)
	defer w.Flush()
	
	// Write to 'w' 
```

This will only use up to 4KB in memory when the writer is idle. 

Compression is almost always worse than the fastest compression level 
and each write will allocate (a little) memory. 

# Performance Update 2018

It has been a while since we have been looking at the speed of this package compared to the standard library, so I thought I would re-do my tests and give some overall recommendations based on the current state. All benchmarks have been performed with Go 1.10 on my Desktop Intel(R) Core(TM) i7-2600 CPU @3.40GHz. Since I last ran the tests, I have gotten more RAM, which means tests with big files are no longer limited by my SSD.

The raw results are in my [updated spreadsheet](https://docs.google.com/spreadsheets/d/1nuNE2nPfuINCZJRMt6wFWhKpToF95I47XjSsc-1rbPQ/edit?usp=sharing). Due to cgo changes and upstream updates i could not get the cgo version of gzip to compile. Instead I included the [zstd](https://github.com/datadog/zstd) cgo implementation. If I get cgo gzip to work again, I might replace the results in the sheet.

The columns to take note of are: *MB/s* - the throughput. *Reduction* - the data size reduction in percent of the original. *Rel Speed* relative speed compared to the standard library at the same level. *Smaller* - how many percent smaller is the compressed output compared to stdlib. Negative means the output was bigger. *Loss* means the loss (or gain) in compression as a percentage difference of the input.

The `gzstd` (standard library gzip) and `gzkp` (this package gzip) only uses one CPU core. [`pgzip`](https://github.com/klauspost/pgzip), [`bgzf`](https://github.com/biogo/hts/tree/master/bgzf) uses all 4 cores. [`zstd`](https://github.com/DataDog/zstd) uses one core, and is a beast (but not Go, yet).


## Overall differences.

There appears to be a roughly 5-10% speed advantage over the standard library when comparing at similar compression levels.

The biggest difference you will see is the result of [re-balancing](https://blog.klauspost.com/rebalancing-deflate-compression-levels/) the compression levels. I wanted by library to give a smoother transition between the compression levels than the standard library.

This package attempts to provide a more smooth transition, where "1" is taking a lot of shortcuts, "5" is the reasonable trade-off and "9" is the "give me the best compression", and the values in between gives something reasonable in between. The standard library has big differences in levels 1-4, but levels 5-9 having no significant gains - often spending a lot more time than can be justified by the achieved compression.

There are links to all the test data in the [spreadsheet](https://docs.google.com/spreadsheets/d/1nuNE2nPfuINCZJRMt6wFWhKpToF95I47XjSsc-1rbPQ/edit?usp=sharing) in the top left field on each tab.

## Web Content

This test set aims to emulate typical use in a web server. The test-set is 4GB data in 53k files, and is a mixture of (mostly) HTML, JS, CSS.

Since level 1 and 9 are close to being the same code, they are quite close. But looking at the levels in-between the differences are quite big.

Looking at level 6, this package is 88% faster, but will output about 6% more data. For a web server, this means you can serve 88% more data, but have to pay for 6% more bandwidth. You can draw your own conclusions on what would be the most expensive for your case.

## Object files

This test is for typical data files stored on a server. In this case it is a collection of Go precompiled objects. They are very compressible.

The picture is similar to the web content, but with small differences since this is very compressible. Levels 2-3 offer good speed, but is sacrificing quite a bit of compression. 

The standard library seems suboptimal on level 3 and 4 - offering both worse compression and speed than level 6 & 7 of this package respectively.

## Highly Compressible File

This is a JSON file with very high redundancy. The reduction starts at 95% on level 1, so in real life terms we are dealing with something like a highly redundant stream of data, etc.

It is definitely visible that we are dealing with specialized content here, so the results are very scattered. This package does not do very well at levels 1-4, but picks up significantly at level 5 and levels 7 and 8 offering great speed for the achieved compression.

So if you know you content is extremely compressible you might want to go slightly higher than the defaults. The standard library has a huge gap between levels 3 and 4 in terms of speed (2.75x slowdown), so it offers little "middle ground".

## Medium-High Compressible

This is a pretty common test corpus: [enwik9](http://mattmahoney.net/dc/textdata.html). It contains the first 10^9 bytes of the English Wikipedia dump on Mar. 3, 2006. This is a very good test of typical text based compression and more data heavy streams.

We see a similar picture here as in "Web Content". On equal levels some compression is sacrificed for more speed. Level 5 seems to be the best trade-off between speed and size, beating stdlib level 3 in both.

## Medium Compressible

I will combine two test sets, one [10GB file set](http://mattmahoney.net/dc/10gb.html) and a VM disk image (~8GB). Both contain different data types and represent a typical backup scenario.

The most notable thing is how quickly the standard library drops to very low compression speeds around level 5-6 without any big gains in compression. Since this type of data is fairly common, this does not seem like good behavior.


## Un-compressible Content

This is mainly a test of how good the algorithms are at detecting un-compressible input. The standard library only offers this feature with very conservative settings at level 1. Obviously there is no reason for the algorithms to try to compress input that cannot be compressed.  The only downside is that it might skip some compressible data on false detections.


## Huffman only compression

This compression library adds a special compression level, named `HuffmanOnly`, which allows near linear time compression. This is done by completely disabling matching of previous data, and only reduce the number of bits to represent each character. 

This means that often used characters, like 'e' and ' ' (space) in text use the fewest bits to represent, and rare characters like '¤' takes more bits to represent. For more information see [wikipedia](https://en.wikipedia.org/wiki/Huffman_coding) or this nice [video](https://youtu.be/ZdooBTdW5bM).

Since this type of compression has much less variance, the compression speed is mostly unaffected by the input data, and is usually more than *180MB/s* for a single core.

The downside is that the compression ratio is usually considerably worse than even the fastest conventional compression. The compression ratio can never be better than 8:1 (12.5%). 

The linear time compression can be used as a "better than nothing" mode, where you cannot risk the encoder to slow down on some content. For comparison, the size of the "Twain" text is *233460 bytes* (+29% vs. level 1) and encode speed is 144MB/s (4.5x level 1). So in this case you trade a 30% size increase for a 4 times speedup.

For more information see my blog post on [Fast Linear Time Compression](http://blog.klauspost.com/constant-time-gzipzip-compression/).

This is implemented on Go 1.7 as "Huffman Only" mode, though not exposed for gzip.

# Other packages

Here are other packages of good quality and pure Go (no cgo wrappers or autoconverted code):

* [github.com/pierrec/lz4](https://github.com/pierrec/lz4) - strong multithreaded LZ4 compression.
* [github.com/cosnicolaou/pbzip2](https://github.com/cosnicolaou/pbzip2) - multithreaded bzip2 decompression.
* [github.com/dsnet/compress](https://github.com/dsnet/compress) - brotli decompression, bzip2 writer.
* [github.com/ronanh/intcomp](https://github.com/ronanh/intcomp) - Integer compression.
* [github.com/spenczar/fpc](https://github.com/spenczar/fpc) - Float compression.

# license

This code is licensed under the same conditions as the original Go code. See LICENSE file.
  0707010000084E000081A4000000000000000000000001645E367C0000074B000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/compressible.go  package compress

import "math"

// Estimate returns a normalized compressibility estimate of block b.
// Values close to zero are likely uncompressible.
// Values above 0.1 are likely to be compressible.
// Values above 0.5 are very compressible.
// Very small lengths will return 0.
func Estimate(b []byte) float64 {
	if len(b) < 16 {
		return 0
	}

	// Correctly predicted order 1
	hits := 0
	lastMatch := false
	var o1 [256]byte
	var hist [256]int
	c1 := byte(0)
	for _, c := range b {
		if c == o1[c1] {
			// We only count a hit if there was two correct predictions in a row.
			if lastMatch {
				hits++
			}
			lastMatch = true
		} else {
			lastMatch = false
		}
		o1[c1] = c
		c1 = c
		hist[c]++
	}

	// Use x^0.6 to give better spread
	prediction := math.Pow(float64(hits)/float64(len(b)), 0.6)

	// Calculate histogram distribution
	variance := float64(0)
	avg := float64(len(b)) / 256

	for _, v := range hist {
		Δ := float64(v) - avg
		variance += Δ * Δ
	}

	stddev := math.Sqrt(float64(variance)) / float64(len(b))
	exp := math.Sqrt(1 / float64(len(b)))

	// Subtract expected stddev
	stddev -= exp
	if stddev < 0 {
		stddev = 0
	}
	stddev *= 1 + exp

	// Use x^0.4 to give better spread
	entropy := math.Pow(stddev, 0.4)

	// 50/50 weight between prediction and histogram distribution
	return math.Pow((prediction+entropy)/2, 0.9)
}

// ShannonEntropyBits returns the number of bits minimum required to represent
// an entropy encoding of the input bytes.
// https://en.wiktionary.org/wiki/Shannon_entropy
func ShannonEntropyBits(b []byte) int {
	if len(b) == 0 {
		return 0
	}
	var hist [256]int
	for _, c := range b {
		hist[c]++
	}
	shannon := float64(0)
	invTotal := 1.0 / float64(len(b))
	for _, v := range hist[:] {
		if v > 0 {
			n := float64(v)
			shannon += math.Ceil(-math.Log2(n*invTotal) * n)
		}
	}
	return int(math.Ceil(shannon))
}
 0707010000084F000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/fse  07070100000850000081A4000000000000000000000001645E367C00001202000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/fse/README.md    # Finite State Entropy

This package provides Finite State Entropy encoding and decoding.
            
Finite State Entropy (also referenced as [tANS](https://en.wikipedia.org/wiki/Asymmetric_numeral_systems#tANS)) 
encoding provides a fast near-optimal symbol encoding/decoding
for byte blocks as implemented in [zstandard](https://github.com/facebook/zstd).

This can be used for compressing input with a lot of similar input values to the smallest number of bytes.
This does not perform any multi-byte [dictionary coding](https://en.wikipedia.org/wiki/Dictionary_coder) as LZ coders,
but it can be used as a secondary step to compressors (like Snappy) that does not do entropy encoding. 

* [Godoc documentation](https://godoc.org/github.com/klauspost/compress/fse)

## News

 * Feb 2018: First implementation released. Consider this beta software for now.

# Usage

This package provides a low level interface that allows to compress single independent blocks. 

Each block is separate, and there is no built in integrity checks. 
This means that the caller should keep track of block sizes and also do checksums if needed.  

Compressing a block is done via the [`Compress`](https://godoc.org/github.com/klauspost/compress/fse#Compress) function.
You must provide input and will receive the output and maybe an error.

These error values can be returned:

| Error               | Description                                                                 |
|---------------------|-----------------------------------------------------------------------------|
| `<nil>`             | Everything ok, output is returned                                           |
| `ErrIncompressible` | Returned when input is judged to be too hard to compress                    |
| `ErrUseRLE`         | Returned from the compressor when the input is a single byte value repeated |
| `(error)`           | An internal error occurred.                                                 |

As can be seen above there are errors that will be returned even under normal operation so it is important to handle these.

To reduce allocations you can provide a [`Scratch`](https://godoc.org/github.com/klauspost/compress/fse#Scratch) object 
that can be re-used for successive calls. Both compression and decompression accepts a `Scratch` object, and the same 
object can be used for both.   

Be aware, that when re-using a `Scratch` object that the *output* buffer is also re-used, so if you are still using this
you must set the `Out` field in the scratch to nil. The same buffer is used for compression and decompression output.

Decompressing is done by calling the [`Decompress`](https://godoc.org/github.com/klauspost/compress/fse#Decompress) function.
You must provide the output from the compression stage, at exactly the size you got back. If you receive an error back
your input was likely corrupted. 

It is important to note that a successful decoding does *not* mean your output matches your original input. 
There are no integrity checks, so relying on errors from the decompressor does not assure your data is valid.

For more detailed usage, see examples in the [godoc documentation](https://godoc.org/github.com/klauspost/compress/fse#pkg-examples).

# Performance

A lot of factors are affecting speed. Block sizes and compressibility of the material are primary factors.  
All compression functions are currently only running on the calling goroutine so only one core will be used per block.  

The compressor is significantly faster if symbols are kept as small as possible. The highest byte value of the input
is used to reduce some of the processing, so if all your input is above byte value 64 for instance, it may be 
beneficial to transpose all your input values down by 64.   

With moderate block sizes around 64k speed are typically 200MB/s per core for compression and 
around 300MB/s decompression speed. 

The same hardware typically does Huffman (deflate) encoding at 125MB/s and decompression at 100MB/s. 

# Plans

At one point, more internals will be exposed to facilitate more "expert" usage of the components. 

A streaming interface is also likely to be implemented. Likely compatible with [FSE stream format](https://github.com/Cyan4973/FiniteStateEntropy/blob/dev/programs/fileio.c#L261).  

# Contributing

Contributions are always welcome. Be aware that adding public functions will require good justification and breaking 
changes will likely not be accepted. If in doubt open an issue before writing the PR.    07070100000851000081A4000000000000000000000001645E367C00000BD0000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/fse/bitreader.go // Copyright 2018 Klaus Post. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Based on work Copyright (c) 2013, Yann Collet, released under BSD License.

package fse

import (
	"encoding/binary"
	"errors"
	"io"
)

// bitReader reads a bitstream in reverse.
// The last set bit indicates the start of the stream and is used
// for aligning the input.
type bitReader struct {
	in       []byte
	off      uint // next byte to read is at in[off - 1]
	value    uint64
	bitsRead uint8
}

// init initializes and resets the bit reader.
func (b *bitReader) init(in []byte) error {
	if len(in) < 1 {
		return errors.New("corrupt stream: too short")
	}
	b.in = in
	b.off = uint(len(in))
	// The highest bit of the last byte indicates where to start
	v := in[len(in)-1]
	if v == 0 {
		return errors.New("corrupt stream, did not find end of stream")
	}
	b.bitsRead = 64
	b.value = 0
	if len(in) >= 8 {
		b.fillFastStart()
	} else {
		b.fill()
		b.fill()
	}
	b.bitsRead += 8 - uint8(highBits(uint32(v)))
	return nil
}

// getBits will return n bits. n can be 0.
func (b *bitReader) getBits(n uint8) uint16 {
	if n == 0 || b.bitsRead >= 64 {
		return 0
	}
	return b.getBitsFast(n)
}

// getBitsFast requires that at least one bit is requested every time.
// There are no checks if the buffer is filled.
func (b *bitReader) getBitsFast(n uint8) uint16 {
	const regMask = 64 - 1
	v := uint16((b.value << (b.bitsRead & regMask)) >> ((regMask + 1 - n) & regMask))
	b.bitsRead += n
	return v
}

// fillFast() will make sure at least 32 bits are available.
// There must be at least 4 bytes available.
func (b *bitReader) fillFast() {
	if b.bitsRead < 32 {
		return
	}
	// 2 bounds checks.
	v := b.in[b.off-4:]
	v = v[:4]
	low := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24)
	b.value = (b.value << 32) | uint64(low)
	b.bitsRead -= 32
	b.off -= 4
}

// fill() will make sure at least 32 bits are available.
func (b *bitReader) fill() {
	if b.bitsRead < 32 {
		return
	}
	if b.off > 4 {
		v := b.in[b.off-4:]
		v = v[:4]
		low := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24)
		b.value = (b.value << 32) | uint64(low)
		b.bitsRead -= 32
		b.off -= 4
		return
	}
	for b.off > 0 {
		b.value = (b.value << 8) | uint64(b.in[b.off-1])
		b.bitsRead -= 8
		b.off--
	}
}

// fillFastStart() assumes the bitreader is empty and there is at least 8 bytes to read.
func (b *bitReader) fillFastStart() {
	// Do single re-slice to avoid bounds checks.
	b.value = binary.LittleEndian.Uint64(b.in[b.off-8:])
	b.bitsRead = 0
	b.off -= 8
}

// finished returns true if all bits have been read from the bit stream.
func (b *bitReader) finished() bool {
	return b.bitsRead >= 64 && b.off == 0
}

// close the bitstream and returns an error if out-of-buffer reads occurred.
func (b *bitReader) close() error {
	// Release reference.
	b.in = nil
	if b.bitsRead > 64 {
		return io.ErrUnexpectedEOF
	}
	return nil
}
07070100000852000081A4000000000000000000000001645E367C00001111000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/fse/bitwriter.go // Copyright 2018 Klaus Post. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Based on work Copyright (c) 2013, Yann Collet, released under BSD License.

package fse

import "fmt"

// bitWriter will write bits.
// First bit will be LSB of the first byte of output.
type bitWriter struct {
	bitContainer uint64
	nBits        uint8
	out          []byte
}

// bitMask16 is bitmasks. Has extra to avoid bounds check.
var bitMask16 = [32]uint16{
	0, 1, 3, 7, 0xF, 0x1F,
	0x3F, 0x7F, 0xFF, 0x1FF, 0x3FF, 0x7FF,
	0xFFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF, 0xFFFF,
	0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
	0xFFFF, 0xFFFF} /* up to 16 bits */

// addBits16NC will add up to 16 bits.
// It will not check if there is space for them,
// so the caller must ensure that it has flushed recently.
func (b *bitWriter) addBits16NC(value uint16, bits uint8) {
	b.bitContainer |= uint64(value&bitMask16[bits&31]) << (b.nBits & 63)
	b.nBits += bits
}

// addBits16Clean will add up to 16 bits. value may not contain more set bits than indicated.
// It will not check if there is space for them, so the caller must ensure that it has flushed recently.
func (b *bitWriter) addBits16Clean(value uint16, bits uint8) {
	b.bitContainer |= uint64(value) << (b.nBits & 63)
	b.nBits += bits
}

// addBits16ZeroNC will add up to 16 bits.
// It will not check if there is space for them,
// so the caller must ensure that it has flushed recently.
// This is fastest if bits can be zero.
func (b *bitWriter) addBits16ZeroNC(value uint16, bits uint8) {
	if bits == 0 {
		return
	}
	value <<= (16 - bits) & 15
	value >>= (16 - bits) & 15
	b.bitContainer |= uint64(value) << (b.nBits & 63)
	b.nBits += bits
}

// flush will flush all pending full bytes.
// There will be at least 56 bits available for writing when this has been called.
// Using flush32 is faster, but leaves less space for writing.
func (b *bitWriter) flush() {
	v := b.nBits >> 3
	switch v {
	case 0:
	case 1:
		b.out = append(b.out,
			byte(b.bitContainer),
		)
	case 2:
		b.out = append(b.out,
			byte(b.bitContainer),
			byte(b.bitContainer>>8),
		)
	case 3:
		b.out = append(b.out,
			byte(b.bitContainer),
			byte(b.bitContainer>>8),
			byte(b.bitContainer>>16),
		)
	case 4:
		b.out = append(b.out,
			byte(b.bitContainer),
			byte(b.bitContainer>>8),
			byte(b.bitContainer>>16),
			byte(b.bitContainer>>24),
		)
	case 5:
		b.out = append(b.out,
			byte(b.bitContainer),
			byte(b.bitContainer>>8),
			byte(b.bitContainer>>16),
			byte(b.bitContainer>>24),
			byte(b.bitContainer>>32),
		)
	case 6:
		b.out = append(b.out,
			byte(b.bitContainer),
			byte(b.bitContainer>>8),
			byte(b.bitContainer>>16),
			byte(b.bitContainer>>24),
			byte(b.bitContainer>>32),
			byte(b.bitContainer>>40),
		)
	case 7:
		b.out = append(b.out,
			byte(b.bitContainer),
			byte(b.bitContainer>>8),
			byte(b.bitContainer>>16),
			byte(b.bitContainer>>24),
			byte(b.bitContainer>>32),
			byte(b.bitContainer>>40),
			byte(b.bitContainer>>48),
		)
	case 8:
		b.out = append(b.out,
			byte(b.bitContainer),
			byte(b.bitContainer>>8),
			byte(b.bitContainer>>16),
			byte(b.bitContainer>>24),
			byte(b.bitContainer>>32),
			byte(b.bitContainer>>40),
			byte(b.bitContainer>>48),
			byte(b.bitContainer>>56),
		)
	default:
		panic(fmt.Errorf("bits (%d) > 64", b.nBits))
	}
	b.bitContainer >>= v << 3
	b.nBits &= 7
}

// flush32 will flush out, so there are at least 32 bits available for writing.
func (b *bitWriter) flush32() {
	if b.nBits < 32 {
		return
	}
	b.out = append(b.out,
		byte(b.bitContainer),
		byte(b.bitContainer>>8),
		byte(b.bitContainer>>16),
		byte(b.bitContainer>>24))
	b.nBits -= 32
	b.bitContainer >>= 32
}

// flushAlign will flush remaining full bytes and align to next byte boundary.
func (b *bitWriter) flushAlign() {
	nbBytes := (b.nBits + 7) >> 3
	for i := uint8(0); i < nbBytes; i++ {
		b.out = append(b.out, byte(b.bitContainer>>(i*8)))
	}
	b.nBits = 0
	b.bitContainer = 0
}

// close will write the alignment bit and write the final byte(s)
// to the output.
func (b *bitWriter) close() error {
	// End mark
	b.addBits16Clean(1, 1)
	// flush until next byte.
	b.flushAlign()
	return nil
}

// reset and continue writing by appending to out.
func (b *bitWriter) reset(out []byte) {
	b.bitContainer = 0
	b.nBits = 0
	b.out = out
}
   07070100000853000081A4000000000000000000000001645E367C0000049E000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/fse/bytereader.go    // Copyright 2018 Klaus Post. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Based on work Copyright (c) 2013, Yann Collet, released under BSD License.

package fse

// byteReader provides a byte reader that reads
// little endian values from a byte stream.
// The input stream is manually advanced.
// The reader performs no bounds checks.
type byteReader struct {
	b   []byte
	off int
}

// init will initialize the reader and set the input.
func (b *byteReader) init(in []byte) {
	b.b = in
	b.off = 0
}

// advance the stream b n bytes.
func (b *byteReader) advance(n uint) {
	b.off += int(n)
}

// Uint32 returns a little endian uint32 starting at current offset.
func (b byteReader) Uint32() uint32 {
	b2 := b.b[b.off:]
	b2 = b2[:4]
	v3 := uint32(b2[3])
	v2 := uint32(b2[2])
	v1 := uint32(b2[1])
	v0 := uint32(b2[0])
	return v0 | (v1 << 8) | (v2 << 16) | (v3 << 24)
}

// unread returns the unread portion of the input.
func (b byteReader) unread() []byte {
	return b.b[b.off:]
}

// remain will return the number of bytes remaining.
func (b byteReader) remain() int {
	return len(b.b) - b.off
}
  07070100000854000081A4000000000000000000000001645E367C00004400000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/fse/compress.go  // Copyright 2018 Klaus Post. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Based on work Copyright (c) 2013, Yann Collet, released under BSD License.

package fse

import (
	"errors"
	"fmt"
)

// Compress the input bytes. Input must be < 2GB.
// Provide a Scratch buffer to avoid memory allocations.
// Note that the output is also kept in the scratch buffer.
// If input is too hard to compress, ErrIncompressible is returned.
// If input is a single byte value repeated ErrUseRLE is returned.
func Compress(in []byte, s *Scratch) ([]byte, error) {
	if len(in) <= 1 {
		return nil, ErrIncompressible
	}
	if len(in) > (2<<30)-1 {
		return nil, errors.New("input too big, must be < 2GB")
	}
	s, err := s.prepare(in)
	if err != nil {
		return nil, err
	}

	// Create histogram, if none was provided.
	maxCount := s.maxCount
	if maxCount == 0 {
		maxCount = s.countSimple(in)
	}
	// Reset for next run.
	s.clearCount = true
	s.maxCount = 0
	if maxCount == len(in) {
		// One symbol, use RLE
		return nil, ErrUseRLE
	}
	if maxCount == 1 || maxCount < (len(in)>>7) {
		// Each symbol present maximum once or too well distributed.
		return nil, ErrIncompressible
	}
	s.optimalTableLog()
	err = s.normalizeCount()
	if err != nil {
		return nil, err
	}
	err = s.writeCount()
	if err != nil {
		return nil, err
	}

	if false {
		err = s.validateNorm()
		if err != nil {
			return nil, err
		}
	}

	err = s.buildCTable()
	if err != nil {
		return nil, err
	}
	err = s.compress(in)
	if err != nil {
		return nil, err
	}
	s.Out = s.bw.out
	// Check if we compressed.
	if len(s.Out) >= len(in) {
		return nil, ErrIncompressible
	}
	return s.Out, nil
}

// cState contains the compression state of a stream.
type cState struct {
	bw         *bitWriter
	stateTable []uint16
	state      uint16
}

// init will initialize the compression state to the first symbol of the stream.
func (c *cState) init(bw *bitWriter, ct *cTable, tableLog uint8, first symbolTransform) {
	c.bw = bw
	c.stateTable = ct.stateTable

	nbBitsOut := (first.deltaNbBits + (1 << 15)) >> 16
	im := int32((nbBitsOut << 16) - first.deltaNbBits)
	lu := (im >> nbBitsOut) + first.deltaFindState
	c.state = c.stateTable[lu]
}

// encode the output symbol provided and write it to the bitstream.
func (c *cState) encode(symbolTT symbolTransform) {
	nbBitsOut := (uint32(c.state) + symbolTT.deltaNbBits) >> 16
	dstState := int32(c.state>>(nbBitsOut&15)) + symbolTT.deltaFindState
	c.bw.addBits16NC(c.state, uint8(nbBitsOut))
	c.state = c.stateTable[dstState]
}

// encode the output symbol provided and write it to the bitstream.
func (c *cState) encodeZero(symbolTT symbolTransform) {
	nbBitsOut := (uint32(c.state) + symbolTT.deltaNbBits) >> 16
	dstState := int32(c.state>>(nbBitsOut&15)) + symbolTT.deltaFindState
	c.bw.addBits16ZeroNC(c.state, uint8(nbBitsOut))
	c.state = c.stateTable[dstState]
}

// flush will write the tablelog to the output and flush the remaining full bytes.
func (c *cState) flush(tableLog uint8) {
	c.bw.flush32()
	c.bw.addBits16NC(c.state, tableLog)
	c.bw.flush()
}

// compress is the main compression loop that will encode the input from the last byte to the first.
func (s *Scratch) compress(src []byte) error {
	if len(src) <= 2 {
		return errors.New("compress: src too small")
	}
	tt := s.ct.symbolTT[:256]
	s.bw.reset(s.Out)

	// Our two states each encodes every second byte.
	// Last byte encoded (first byte decoded) will always be encoded by c1.
	var c1, c2 cState

	// Encode so remaining size is divisible by 4.
	ip := len(src)
	if ip&1 == 1 {
		c1.init(&s.bw, &s.ct, s.actualTableLog, tt[src[ip-1]])
		c2.init(&s.bw, &s.ct, s.actualTableLog, tt[src[ip-2]])
		c1.encodeZero(tt[src[ip-3]])
		ip -= 3
	} else {
		c2.init(&s.bw, &s.ct, s.actualTableLog, tt[src[ip-1]])
		c1.init(&s.bw, &s.ct, s.actualTableLog, tt[src[ip-2]])
		ip -= 2
	}
	if ip&2 != 0 {
		c2.encodeZero(tt[src[ip-1]])
		c1.encodeZero(tt[src[ip-2]])
		ip -= 2
	}
	src = src[:ip]

	// Main compression loop.
	switch {
	case !s.zeroBits && s.actualTableLog <= 8:
		// We can encode 4 symbols without requiring a flush.
		// We do not need to check if any output is 0 bits.
		for ; len(src) >= 4; src = src[:len(src)-4] {
			s.bw.flush32()
			v3, v2, v1, v0 := src[len(src)-4], src[len(src)-3], src[len(src)-2], src[len(src)-1]
			c2.encode(tt[v0])
			c1.encode(tt[v1])
			c2.encode(tt[v2])
			c1.encode(tt[v3])
		}
	case !s.zeroBits:
		// We do not need to check if any output is 0 bits.
		for ; len(src) >= 4; src = src[:len(src)-4] {
			s.bw.flush32()
			v3, v2, v1, v0 := src[len(src)-4], src[len(src)-3], src[len(src)-2], src[len(src)-1]
			c2.encode(tt[v0])
			c1.encode(tt[v1])
			s.bw.flush32()
			c2.encode(tt[v2])
			c1.encode(tt[v3])
		}
	case s.actualTableLog <= 8:
		// We can encode 4 symbols without requiring a flush
		for ; len(src) >= 4; src = src[:len(src)-4] {
			s.bw.flush32()
			v3, v2, v1, v0 := src[len(src)-4], src[len(src)-3], src[len(src)-2], src[len(src)-1]
			c2.encodeZero(tt[v0])
			c1.encodeZero(tt[v1])
			c2.encodeZero(tt[v2])
			c1.encodeZero(tt[v3])
		}
	default:
		for ; len(src) >= 4; src = src[:len(src)-4] {
			s.bw.flush32()
			v3, v2, v1, v0 := src[len(src)-4], src[len(src)-3], src[len(src)-2], src[len(src)-1]
			c2.encodeZero(tt[v0])
			c1.encodeZero(tt[v1])
			s.bw.flush32()
			c2.encodeZero(tt[v2])
			c1.encodeZero(tt[v3])
		}
	}

	// Flush final state.
	// Used to initialize state when decoding.
	c2.flush(s.actualTableLog)
	c1.flush(s.actualTableLog)

	return s.bw.close()
}

// writeCount will write the normalized histogram count to header.
// This is read back by readNCount.
func (s *Scratch) writeCount() error {
	var (
		tableLog  = s.actualTableLog
		tableSize = 1 << tableLog
		previous0 bool
		charnum   uint16

		maxHeaderSize = ((int(s.symbolLen) * int(tableLog)) >> 3) + 3

		// Write Table Size
		bitStream = uint32(tableLog - minTablelog)
		bitCount  = uint(4)
		remaining = int16(tableSize + 1) /* +1 for extra accuracy */
		threshold = int16(tableSize)
		nbBits    = uint(tableLog + 1)
	)
	if cap(s.Out) < maxHeaderSize {
		s.Out = make([]byte, 0, s.br.remain()+maxHeaderSize)
	}
	outP := uint(0)
	out := s.Out[:maxHeaderSize]

	// stops at 1
	for remaining > 1 {
		if previous0 {
			start := charnum
			for s.norm[charnum] == 0 {
				charnum++
			}
			for charnum >= start+24 {
				start += 24
				bitStream += uint32(0xFFFF) << bitCount
				out[outP] = byte(bitStream)
				out[outP+1] = byte(bitStream >> 8)
				outP += 2
				bitStream >>= 16
			}
			for charnum >= start+3 {
				start += 3
				bitStream += 3 << bitCount
				bitCount += 2
			}
			bitStream += uint32(charnum-start) << bitCount
			bitCount += 2
			if bitCount > 16 {
				out[outP] = byte(bitStream)
				out[outP+1] = byte(bitStream >> 8)
				outP += 2
				bitStream >>= 16
				bitCount -= 16
			}
		}

		count := s.norm[charnum]
		charnum++
		max := (2*threshold - 1) - remaining
		if count < 0 {
			remaining += count
		} else {
			remaining -= count
		}
		count++ // +1 for extra accuracy
		if count >= threshold {
			count += max // [0..max[ [max..threshold[ (...) [threshold+max 2*threshold[
		}
		bitStream += uint32(count) << bitCount
		bitCount += nbBits
		if count < max {
			bitCount--
		}

		previous0 = count == 1
		if remaining < 1 {
			return errors.New("internal error: remaining<1")
		}
		for remaining < threshold {
			nbBits--
			threshold >>= 1
		}

		if bitCount > 16 {
			out[outP] = byte(bitStream)
			out[outP+1] = byte(bitStream >> 8)
			outP += 2
			bitStream >>= 16
			bitCount -= 16
		}
	}

	out[outP] = byte(bitStream)
	out[outP+1] = byte(bitStream >> 8)
	outP += (bitCount + 7) / 8

	if charnum > s.symbolLen {
		return errors.New("internal error: charnum > s.symbolLen")
	}
	s.Out = out[:outP]
	return nil
}

// symbolTransform contains the state transform for a symbol.
type symbolTransform struct {
	deltaFindState int32
	deltaNbBits    uint32
}

// String prints values as a human readable string.
func (s symbolTransform) String() string {
	return fmt.Sprintf("dnbits: %08x, fs:%d", s.deltaNbBits, s.deltaFindState)
}

// cTable contains tables used for compression.
type cTable struct {
	tableSymbol []byte
	stateTable  []uint16
	symbolTT    []symbolTransform
}

// allocCtable will allocate tables needed for compression.
// If existing tables a re big enough, they are simply re-used.
func (s *Scratch) allocCtable() {
	tableSize := 1 << s.actualTableLog
	// get tableSymbol that is big enough.
	if cap(s.ct.tableSymbol) < tableSize {
		s.ct.tableSymbol = make([]byte, tableSize)
	}
	s.ct.tableSymbol = s.ct.tableSymbol[:tableSize]

	ctSize := tableSize
	if cap(s.ct.stateTable) < ctSize {
		s.ct.stateTable = make([]uint16, ctSize)
	}
	s.ct.stateTable = s.ct.stateTable[:ctSize]

	if cap(s.ct.symbolTT) < 256 {
		s.ct.symbolTT = make([]symbolTransform, 256)
	}
	s.ct.symbolTT = s.ct.symbolTT[:256]
}

// buildCTable will populate the compression table so it is ready to be used.
func (s *Scratch) buildCTable() error {
	tableSize := uint32(1 << s.actualTableLog)
	highThreshold := tableSize - 1
	var cumul [maxSymbolValue + 2]int16

	s.allocCtable()
	tableSymbol := s.ct.tableSymbol[:tableSize]
	// symbol start positions
	{
		cumul[0] = 0
		for ui, v := range s.norm[:s.symbolLen-1] {
			u := byte(ui) // one less than reference
			if v == -1 {
				// Low proba symbol
				cumul[u+1] = cumul[u] + 1
				tableSymbol[highThreshold] = u
				highThreshold--
			} else {
				cumul[u+1] = cumul[u] + v
			}
		}
		// Encode last symbol separately to avoid overflowing u
		u := int(s.symbolLen - 1)
		v := s.norm[s.symbolLen-1]
		if v == -1 {
			// Low proba symbol
			cumul[u+1] = cumul[u] + 1
			tableSymbol[highThreshold] = byte(u)
			highThreshold--
		} else {
			cumul[u+1] = cumul[u] + v
		}
		if uint32(cumul[s.symbolLen]) != tableSize {
			return fmt.Errorf("internal error: expected cumul[s.symbolLen] (%d) == tableSize (%d)", cumul[s.symbolLen], tableSize)
		}
		cumul[s.symbolLen] = int16(tableSize) + 1
	}
	// Spread symbols
	s.zeroBits = false
	{
		step := tableStep(tableSize)
		tableMask := tableSize - 1
		var position uint32
		// if any symbol > largeLimit, we may have 0 bits output.
		largeLimit := int16(1 << (s.actualTableLog - 1))
		for ui, v := range s.norm[:s.symbolLen] {
			symbol := byte(ui)
			if v > largeLimit {
				s.zeroBits = true
			}
			for nbOccurrences := int16(0); nbOccurrences < v; nbOccurrences++ {
				tableSymbol[position] = symbol
				position = (position + step) & tableMask
				for position > highThreshold {
					position = (position + step) & tableMask
				} /* Low proba area */
			}
		}

		// Check if we have gone through all positions
		if position != 0 {
			return errors.New("position!=0")
		}
	}

	// Build table
	table := s.ct.stateTable
	{
		tsi := int(tableSize)
		for u, v := range tableSymbol {
			// TableU16 : sorted by symbol order; gives next state value
			table[cumul[v]] = uint16(tsi + u)
			cumul[v]++
		}
	}

	// Build Symbol Transformation Table
	{
		total := int16(0)
		symbolTT := s.ct.symbolTT[:s.symbolLen]
		tableLog := s.actualTableLog
		tl := (uint32(tableLog) << 16) - (1 << tableLog)
		for i, v := range s.norm[:s.symbolLen] {
			switch v {
			case 0:
			case -1, 1:
				symbolTT[i].deltaNbBits = tl
				symbolTT[i].deltaFindState = int32(total - 1)
				total++
			default:
				maxBitsOut := uint32(tableLog) - highBits(uint32(v-1))
				minStatePlus := uint32(v) << maxBitsOut
				symbolTT[i].deltaNbBits = (maxBitsOut << 16) - minStatePlus
				symbolTT[i].deltaFindState = int32(total - v)
				total += v
			}
		}
		if total != int16(tableSize) {
			return fmt.Errorf("total mismatch %d (got) != %d (want)", total, tableSize)
		}
	}
	return nil
}

// countSimple will create a simple histogram in s.count.
// Returns the biggest count.
// Does not update s.clearCount.
func (s *Scratch) countSimple(in []byte) (max int) {
	for _, v := range in {
		s.count[v]++
	}
	m, symlen := uint32(0), s.symbolLen
	for i, v := range s.count[:] {
		if v == 0 {
			continue
		}
		if v > m {
			m = v
		}
		symlen = uint16(i) + 1
	}
	s.symbolLen = symlen
	return int(m)
}

// minTableLog provides the minimum logSize to safely represent a distribution.
func (s *Scratch) minTableLog() uint8 {
	minBitsSrc := highBits(uint32(s.br.remain()-1)) + 1
	minBitsSymbols := highBits(uint32(s.symbolLen-1)) + 2
	if minBitsSrc < minBitsSymbols {
		return uint8(minBitsSrc)
	}
	return uint8(minBitsSymbols)
}

// optimalTableLog calculates and sets the optimal tableLog in s.actualTableLog
func (s *Scratch) optimalTableLog() {
	tableLog := s.TableLog
	minBits := s.minTableLog()
	maxBitsSrc := uint8(highBits(uint32(s.br.remain()-1))) - 2
	if maxBitsSrc < tableLog {
		// Accuracy can be reduced
		tableLog = maxBitsSrc
	}
	if minBits > tableLog {
		tableLog = minBits
	}
	// Need a minimum to safely represent all symbol values
	if tableLog < minTablelog {
		tableLog = minTablelog
	}
	if tableLog > maxTableLog {
		tableLog = maxTableLog
	}
	s.actualTableLog = tableLog
}

var rtbTable = [...]uint32{0, 473195, 504333, 520860, 550000, 700000, 750000, 830000}

// normalizeCount will normalize the count of the symbols so
// the total is equal to the table size.
func (s *Scratch) normalizeCount() error {
	var (
		tableLog          = s.actualTableLog
		scale             = 62 - uint64(tableLog)
		step              = (1 << 62) / uint64(s.br.remain())
		vStep             = uint64(1) << (scale - 20)
		stillToDistribute = int16(1 << tableLog)
		largest           int
		largestP          int16
		lowThreshold      = (uint32)(s.br.remain() >> tableLog)
	)

	for i, cnt := range s.count[:s.symbolLen] {
		// already handled
		// if (count[s] == s.length) return 0;   /* rle special case */

		if cnt == 0 {
			s.norm[i] = 0
			continue
		}
		if cnt <= lowThreshold {
			s.norm[i] = -1
			stillToDistribute--
		} else {
			proba := (int16)((uint64(cnt) * step) >> scale)
			if proba < 8 {
				restToBeat := vStep * uint64(rtbTable[proba])
				v := uint64(cnt)*step - (uint64(proba) << scale)
				if v > restToBeat {
					proba++
				}
			}
			if proba > largestP {
				largestP = proba
				largest = i
			}
			s.norm[i] = proba
			stillToDistribute -= proba
		}
	}

	if -stillToDistribute >= (s.norm[largest] >> 1) {
		// corner case, need another normalization method
		return s.normalizeCount2()
	}
	s.norm[largest] += stillToDistribute
	return nil
}

// Secondary normalization method.
// To be used when primary method fails.
func (s *Scratch) normalizeCount2() error {
	const notYetAssigned = -2
	var (
		distributed  uint32
		total        = uint32(s.br.remain())
		tableLog     = s.actualTableLog
		lowThreshold = total >> tableLog
		lowOne       = (total * 3) >> (tableLog + 1)
	)
	for i, cnt := range s.count[:s.symbolLen] {
		if cnt == 0 {
			s.norm[i] = 0
			continue
		}
		if cnt <= lowThreshold {
			s.norm[i] = -1
			distributed++
			total -= cnt
			continue
		}
		if cnt <= lowOne {
			s.norm[i] = 1
			distributed++
			total -= cnt
			continue
		}
		s.norm[i] = notYetAssigned
	}
	toDistribute := (1 << tableLog) - distributed

	if (total / toDistribute) > lowOne {
		// risk of rounding to zero
		lowOne = (total * 3) / (toDistribute * 2)
		for i, cnt := range s.count[:s.symbolLen] {
			if (s.norm[i] == notYetAssigned) && (cnt <= lowOne) {
				s.norm[i] = 1
				distributed++
				total -= cnt
				continue
			}
		}
		toDistribute = (1 << tableLog) - distributed
	}
	if distributed == uint32(s.symbolLen)+1 {
		// all values are pretty poor;
		//   probably incompressible data (should have already been detected);
		//   find max, then give all remaining points to max
		var maxV int
		var maxC uint32
		for i, cnt := range s.count[:s.symbolLen] {
			if cnt > maxC {
				maxV = i
				maxC = cnt
			}
		}
		s.norm[maxV] += int16(toDistribute)
		return nil
	}

	if total == 0 {
		// all of the symbols were low enough for the lowOne or lowThreshold
		for i := uint32(0); toDistribute > 0; i = (i + 1) % (uint32(s.symbolLen)) {
			if s.norm[i] > 0 {
				toDistribute--
				s.norm[i]++
			}
		}
		return nil
	}

	var (
		vStepLog = 62 - uint64(tableLog)
		mid      = uint64((1 << (vStepLog - 1)) - 1)
		rStep    = (((1 << vStepLog) * uint64(toDistribute)) + mid) / uint64(total) // scale on remaining
		tmpTotal = mid
	)
	for i, cnt := range s.count[:s.symbolLen] {
		if s.norm[i] == notYetAssigned {
			var (
				end    = tmpTotal + uint64(cnt)*rStep
				sStart = uint32(tmpTotal >> vStepLog)
				sEnd   = uint32(end >> vStepLog)
				weight = sEnd - sStart
			)
			if weight < 1 {
				return errors.New("weight < 1")
			}
			s.norm[i] = int16(weight)
			tmpTotal = end
		}
	}
	return nil
}

// validateNorm validates the normalized histogram table.
func (s *Scratch) validateNorm() (err error) {
	var total int
	for _, v := range s.norm[:s.symbolLen] {
		if v >= 0 {
			total += int(v)
		} else {
			total -= int(v)
		}
	}
	defer func() {
		if err == nil {
			return
		}
		fmt.Printf("selected TableLog: %d, Symbol length: %d\n", s.actualTableLog, s.symbolLen)
		for i, v := range s.norm[:s.symbolLen] {
			fmt.Printf("%3d: %5d -> %4d \n", i, s.count[i], v)
		}
	}()
	if total != (1 << s.actualTableLog) {
		return fmt.Errorf("warning: Total == %d != %d", total, 1<<s.actualTableLog)
	}
	for i, v := range s.count[s.symbolLen:] {
		if v != 0 {
			return fmt.Errorf("warning: Found symbol out of range, %d after cut", i)
		}
	}
	return nil
}
07070100000855000081A4000000000000000000000001645E367C000024C3000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/fse/decompress.go    package fse

import (
	"errors"
	"fmt"
)

const (
	tablelogAbsoluteMax = 15
)

// Decompress a block of data.
// You can provide a scratch buffer to avoid allocations.
// If nil is provided a temporary one will be allocated.
// It is possible, but by no way guaranteed that corrupt data will
// return an error.
// It is up to the caller to verify integrity of the returned data.
// Use a predefined Scrach to set maximum acceptable output size.
func Decompress(b []byte, s *Scratch) ([]byte, error) {
	s, err := s.prepare(b)
	if err != nil {
		return nil, err
	}
	s.Out = s.Out[:0]
	err = s.readNCount()
	if err != nil {
		return nil, err
	}
	err = s.buildDtable()
	if err != nil {
		return nil, err
	}
	err = s.decompress()
	if err != nil {
		return nil, err
	}

	return s.Out, nil
}

// readNCount will read the symbol distribution so decoding tables can be constructed.
func (s *Scratch) readNCount() error {
	var (
		charnum   uint16
		previous0 bool
		b         = &s.br
	)
	iend := b.remain()
	if iend < 4 {
		return errors.New("input too small")
	}
	bitStream := b.Uint32()
	nbBits := uint((bitStream & 0xF) + minTablelog) // extract tableLog
	if nbBits > tablelogAbsoluteMax {
		return errors.New("tableLog too large")
	}
	bitStream >>= 4
	bitCount := uint(4)

	s.actualTableLog = uint8(nbBits)
	remaining := int32((1 << nbBits) + 1)
	threshold := int32(1 << nbBits)
	gotTotal := int32(0)
	nbBits++

	for remaining > 1 {
		if previous0 {
			n0 := charnum
			for (bitStream & 0xFFFF) == 0xFFFF {
				n0 += 24
				if b.off < iend-5 {
					b.advance(2)
					bitStream = b.Uint32() >> bitCount
				} else {
					bitStream >>= 16
					bitCount += 16
				}
			}
			for (bitStream & 3) == 3 {
				n0 += 3
				bitStream >>= 2
				bitCount += 2
			}
			n0 += uint16(bitStream & 3)
			bitCount += 2
			if n0 > maxSymbolValue {
				return errors.New("maxSymbolValue too small")
			}
			for charnum < n0 {
				s.norm[charnum&0xff] = 0
				charnum++
			}

			if b.off <= iend-7 || b.off+int(bitCount>>3) <= iend-4 {
				b.advance(bitCount >> 3)
				bitCount &= 7
				bitStream = b.Uint32() >> bitCount
			} else {
				bitStream >>= 2
			}
		}

		max := (2*(threshold) - 1) - (remaining)
		var count int32

		if (int32(bitStream) & (threshold - 1)) < max {
			count = int32(bitStream) & (threshold - 1)
			bitCount += nbBits - 1
		} else {
			count = int32(bitStream) & (2*threshold - 1)
			if count >= threshold {
				count -= max
			}
			bitCount += nbBits
		}

		count-- // extra accuracy
		if count < 0 {
			// -1 means +1
			remaining += count
			gotTotal -= count
		} else {
			remaining -= count
			gotTotal += count
		}
		s.norm[charnum&0xff] = int16(count)
		charnum++
		previous0 = count == 0
		for remaining < threshold {
			nbBits--
			threshold >>= 1
		}
		if b.off <= iend-7 || b.off+int(bitCount>>3) <= iend-4 {
			b.advance(bitCount >> 3)
			bitCount &= 7
		} else {
			bitCount -= (uint)(8 * (len(b.b) - 4 - b.off))
			b.off = len(b.b) - 4
		}
		bitStream = b.Uint32() >> (bitCount & 31)
	}
	s.symbolLen = charnum

	if s.symbolLen <= 1 {
		return fmt.Errorf("symbolLen (%d) too small", s.symbolLen)
	}
	if s.symbolLen > maxSymbolValue+1 {
		return fmt.Errorf("symbolLen (%d) too big", s.symbolLen)
	}
	if remaining != 1 {
		return fmt.Errorf("corruption detected (remaining %d != 1)", remaining)
	}
	if bitCount > 32 {
		return fmt.Errorf("corruption detected (bitCount %d > 32)", bitCount)
	}
	if gotTotal != 1<<s.actualTableLog {
		return fmt.Errorf("corruption detected (total %d != %d)", gotTotal, 1<<s.actualTableLog)
	}
	b.advance((bitCount + 7) >> 3)
	return nil
}

// decSymbol contains information about a state entry,
// Including the state offset base, the output symbol and
// the number of bits to read for the low part of the destination state.
type decSymbol struct {
	newState uint16
	symbol   uint8
	nbBits   uint8
}

// allocDtable will allocate decoding tables if they are not big enough.
func (s *Scratch) allocDtable() {
	tableSize := 1 << s.actualTableLog
	if cap(s.decTable) < tableSize {
		s.decTable = make([]decSymbol, tableSize)
	}
	s.decTable = s.decTable[:tableSize]

	if cap(s.ct.tableSymbol) < 256 {
		s.ct.tableSymbol = make([]byte, 256)
	}
	s.ct.tableSymbol = s.ct.tableSymbol[:256]

	if cap(s.ct.stateTable) < 256 {
		s.ct.stateTable = make([]uint16, 256)
	}
	s.ct.stateTable = s.ct.stateTable[:256]
}

// buildDtable will build the decoding table.
func (s *Scratch) buildDtable() error {
	tableSize := uint32(1 << s.actualTableLog)
	highThreshold := tableSize - 1
	s.allocDtable()
	symbolNext := s.ct.stateTable[:256]

	// Init, lay down lowprob symbols
	s.zeroBits = false
	{
		largeLimit := int16(1 << (s.actualTableLog - 1))
		for i, v := range s.norm[:s.symbolLen] {
			if v == -1 {
				s.decTable[highThreshold].symbol = uint8(i)
				highThreshold--
				symbolNext[i] = 1
			} else {
				if v >= largeLimit {
					s.zeroBits = true
				}
				symbolNext[i] = uint16(v)
			}
		}
	}
	// Spread symbols
	{
		tableMask := tableSize - 1
		step := tableStep(tableSize)
		position := uint32(0)
		for ss, v := range s.norm[:s.symbolLen] {
			for i := 0; i < int(v); i++ {
				s.decTable[position].symbol = uint8(ss)
				position = (position + step) & tableMask
				for position > highThreshold {
					// lowprob area
					position = (position + step) & tableMask
				}
			}
		}
		if position != 0 {
			// position must reach all cells once, otherwise normalizedCounter is incorrect
			return errors.New("corrupted input (position != 0)")
		}
	}

	// Build Decoding table
	{
		tableSize := uint16(1 << s.actualTableLog)
		for u, v := range s.decTable {
			symbol := v.symbol
			nextState := symbolNext[symbol]
			symbolNext[symbol] = nextState + 1
			nBits := s.actualTableLog - byte(highBits(uint32(nextState)))
			s.decTable[u].nbBits = nBits
			newState := (nextState << nBits) - tableSize
			if newState >= tableSize {
				return fmt.Errorf("newState (%d) outside table size (%d)", newState, tableSize)
			}
			if newState == uint16(u) && nBits == 0 {
				// Seems weird that this is possible with nbits > 0.
				return fmt.Errorf("newState (%d) == oldState (%d) and no bits", newState, u)
			}
			s.decTable[u].newState = newState
		}
	}
	return nil
}

// decompress will decompress the bitstream.
// If the buffer is over-read an error is returned.
func (s *Scratch) decompress() error {
	br := &s.bits
	if err := br.init(s.br.unread()); err != nil {
		return err
	}

	var s1, s2 decoder
	// Initialize and decode first state and symbol.
	s1.init(br, s.decTable, s.actualTableLog)
	s2.init(br, s.decTable, s.actualTableLog)

	// Use temp table to avoid bound checks/append penalty.
	var tmp = s.ct.tableSymbol[:256]
	var off uint8

	// Main part
	if !s.zeroBits {
		for br.off >= 8 {
			br.fillFast()
			tmp[off+0] = s1.nextFast()
			tmp[off+1] = s2.nextFast()
			br.fillFast()
			tmp[off+2] = s1.nextFast()
			tmp[off+3] = s2.nextFast()
			off += 4
			// When off is 0, we have overflowed and should write.
			if off == 0 {
				s.Out = append(s.Out, tmp...)
				if len(s.Out) >= s.DecompressLimit {
					return fmt.Errorf("output size (%d) > DecompressLimit (%d)", len(s.Out), s.DecompressLimit)
				}
			}
		}
	} else {
		for br.off >= 8 {
			br.fillFast()
			tmp[off+0] = s1.next()
			tmp[off+1] = s2.next()
			br.fillFast()
			tmp[off+2] = s1.next()
			tmp[off+3] = s2.next()
			off += 4
			if off == 0 {
				s.Out = append(s.Out, tmp...)
				// When off is 0, we have overflowed and should write.
				if len(s.Out) >= s.DecompressLimit {
					return fmt.Errorf("output size (%d) > DecompressLimit (%d)", len(s.Out), s.DecompressLimit)
				}
			}
		}
	}
	s.Out = append(s.Out, tmp[:off]...)

	// Final bits, a bit more expensive check
	for {
		if s1.finished() {
			s.Out = append(s.Out, s1.final(), s2.final())
			break
		}
		br.fill()
		s.Out = append(s.Out, s1.next())
		if s2.finished() {
			s.Out = append(s.Out, s2.final(), s1.final())
			break
		}
		s.Out = append(s.Out, s2.next())
		if len(s.Out) >= s.DecompressLimit {
			return fmt.Errorf("output size (%d) > DecompressLimit (%d)", len(s.Out), s.DecompressLimit)
		}
	}
	return br.close()
}

// decoder keeps track of the current state and updates it from the bitstream.
type decoder struct {
	state uint16
	br    *bitReader
	dt    []decSymbol
}

// init will initialize the decoder and read the first state from the stream.
func (d *decoder) init(in *bitReader, dt []decSymbol, tableLog uint8) {
	d.dt = dt
	d.br = in
	d.state = in.getBits(tableLog)
}

// next returns the next symbol and sets the next state.
// At least tablelog bits must be available in the bit reader.
func (d *decoder) next() uint8 {
	n := &d.dt[d.state]
	lowBits := d.br.getBits(n.nbBits)
	d.state = n.newState + lowBits
	return n.symbol
}

// finished returns true if all bits have been read from the bitstream
// and the next state would require reading bits from the input.
func (d *decoder) finished() bool {
	return d.br.finished() && d.dt[d.state].nbBits > 0
}

// final returns the current state symbol without decoding the next.
func (d *decoder) final() uint8 {
	return d.dt[d.state].symbol
}

// nextFast returns the next symbol and sets the next state.
// This can only be used if no symbols are 0 bits.
// At least tablelog bits must be available in the bit reader.
func (d *decoder) nextFast() uint8 {
	n := d.dt[d.state]
	lowBits := d.br.getBitsFast(n.nbBits)
	d.state = n.newState + lowBits
	return n.symbol
}
 07070100000856000081A4000000000000000000000001645E367C00001268000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/fse/fse.go   // Copyright 2018 Klaus Post. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Based on work Copyright (c) 2013, Yann Collet, released under BSD License.

// Package fse provides Finite State Entropy encoding and decoding.
//
// Finite State Entropy encoding provides a fast near-optimal symbol encoding/decoding
// for byte blocks as implemented in zstd.
//
// See https://github.com/klauspost/compress/tree/master/fse for more information.
package fse

import (
	"errors"
	"fmt"
	"math/bits"
)

const (
	/*!MEMORY_USAGE :
	 *  Memory usage formula : N->2^N Bytes (examples : 10 -> 1KB; 12 -> 4KB ; 16 -> 64KB; 20 -> 1MB; etc.)
	 *  Increasing memory usage improves compression ratio
	 *  Reduced memory usage can improve speed, due to cache effect
	 *  Recommended max value is 14, for 16KB, which nicely fits into Intel x86 L1 cache */
	maxMemoryUsage     = 14
	defaultMemoryUsage = 13

	maxTableLog     = maxMemoryUsage - 2
	maxTablesize    = 1 << maxTableLog
	defaultTablelog = defaultMemoryUsage - 2
	minTablelog     = 5
	maxSymbolValue  = 255
)

var (
	// ErrIncompressible is returned when input is judged to be too hard to compress.
	ErrIncompressible = errors.New("input is not compressible")

	// ErrUseRLE is returned from the compressor when the input is a single byte value repeated.
	ErrUseRLE = errors.New("input is single value repeated")
)

// Scratch provides temporary storage for compression and decompression.
type Scratch struct {
	// Private
	count    [maxSymbolValue + 1]uint32
	norm     [maxSymbolValue + 1]int16
	br       byteReader
	bits     bitReader
	bw       bitWriter
	ct       cTable      // Compression tables.
	decTable []decSymbol // Decompression table.
	maxCount int         // count of the most probable symbol

	// Per block parameters.
	// These can be used to override compression parameters of the block.
	// Do not touch, unless you know what you are doing.

	// Out is output buffer.
	// If the scratch is re-used before the caller is done processing the output,
	// set this field to nil.
	// Otherwise the output buffer will be re-used for next Compression/Decompression step
	// and allocation will be avoided.
	Out []byte

	// DecompressLimit limits the maximum decoded size acceptable.
	// If > 0 decompression will stop when approximately this many bytes
	// has been decoded.
	// If 0, maximum size will be 2GB.
	DecompressLimit int

	symbolLen      uint16 // Length of active part of the symbol table.
	actualTableLog uint8  // Selected tablelog.
	zeroBits       bool   // no bits has prob > 50%.
	clearCount     bool   // clear count

	// MaxSymbolValue will override the maximum symbol value of the next block.
	MaxSymbolValue uint8

	// TableLog will attempt to override the tablelog for the next block.
	TableLog uint8
}

// Histogram allows to populate the histogram and skip that step in the compression,
// It otherwise allows to inspect the histogram when compression is done.
// To indicate that you have populated the histogram call HistogramFinished
// with the value of the highest populated symbol, as well as the number of entries
// in the most populated entry. These are accepted at face value.
// The returned slice will always be length 256.
func (s *Scratch) Histogram() []uint32 {
	return s.count[:]
}

// HistogramFinished can be called to indicate that the histogram has been populated.
// maxSymbol is the index of the highest set symbol of the next data segment.
// maxCount is the number of entries in the most populated entry.
// These are accepted at face value.
func (s *Scratch) HistogramFinished(maxSymbol uint8, maxCount int) {
	s.maxCount = maxCount
	s.symbolLen = uint16(maxSymbol) + 1
	s.clearCount = maxCount != 0
}

// prepare will prepare and allocate scratch tables used for both compression and decompression.
func (s *Scratch) prepare(in []byte) (*Scratch, error) {
	if s == nil {
		s = &Scratch{}
	}
	if s.MaxSymbolValue == 0 {
		s.MaxSymbolValue = 255
	}
	if s.TableLog == 0 {
		s.TableLog = defaultTablelog
	}
	if s.TableLog > maxTableLog {
		return nil, fmt.Errorf("tableLog (%d) > maxTableLog (%d)", s.TableLog, maxTableLog)
	}
	if cap(s.Out) == 0 {
		s.Out = make([]byte, 0, len(in))
	}
	if s.clearCount && s.maxCount == 0 {
		for i := range s.count {
			s.count[i] = 0
		}
		s.clearCount = false
	}
	s.br.init(in)
	if s.DecompressLimit == 0 {
		// Max size 2GB.
		s.DecompressLimit = (2 << 30) - 1
	}

	return s, nil
}

// tableStep returns the next table index.
func tableStep(tableSize uint32) uint32 {
	return (tableSize >> 1) + (tableSize >> 3) + 3
}

func highBits(val uint32) (n uint32) {
	return uint32(bits.Len32(val) - 1)
}
07070100000857000081A4000000000000000000000001645E367C00000034000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/gen.sh   #!/bin/sh

cd s2/cmd/_s2sx/ || exit 1
go generate .
07070100000858000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/huff0    07070100000859000081A4000000000000000000000001645E367C00000010000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/huff0/.gitignore /huff0-fuzz.zip
0707010000085A000081A4000000000000000000000001645E367C00001575000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/huff0/README.md  # Huff0 entropy compression

This package provides Huff0 encoding and decoding as used in zstd.
            
[Huff0](https://github.com/Cyan4973/FiniteStateEntropy#new-generation-entropy-coders), 
a Huffman codec designed for modern CPU, featuring OoO (Out of Order) operations on multiple ALU 
(Arithmetic Logic Unit), achieving extremely fast compression and decompression speeds.

This can be used for compressing input with a lot of similar input values to the smallest number of bytes.
This does not perform any multi-byte [dictionary coding](https://en.wikipedia.org/wiki/Dictionary_coder) as LZ coders,
but it can be used as a secondary step to compressors (like Snappy) that does not do entropy encoding. 

* [Godoc documentation](https://godoc.org/github.com/klauspost/compress/huff0)

## News

This is used as part of the [zstandard](https://github.com/klauspost/compress/tree/master/zstd#zstd) compression and decompression package.

This ensures that most functionality is well tested.

# Usage

This package provides a low level interface that allows to compress single independent blocks. 

Each block is separate, and there is no built in integrity checks. 
This means that the caller should keep track of block sizes and also do checksums if needed.  

Compressing a block is done via the [`Compress1X`](https://godoc.org/github.com/klauspost/compress/huff0#Compress1X) and 
[`Compress4X`](https://godoc.org/github.com/klauspost/compress/huff0#Compress4X) functions.
You must provide input and will receive the output and maybe an error.

These error values can be returned:

| Error               | Description                                                                 |
|---------------------|-----------------------------------------------------------------------------|
| `<nil>`             | Everything ok, output is returned                                           |
| `ErrIncompressible` | Returned when input is judged to be too hard to compress                    |
| `ErrUseRLE`         | Returned from the compressor when the input is a single byte value repeated |
| `ErrTooBig`         | Returned if the input block exceeds the maximum allowed size (128 Kib)      |
| `(error)`           | An internal error occurred.                                                 |


As can be seen above some of there are errors that will be returned even under normal operation so it is important to handle these.

To reduce allocations you can provide a [`Scratch`](https://godoc.org/github.com/klauspost/compress/huff0#Scratch) object 
that can be re-used for successive calls. Both compression and decompression accepts a `Scratch` object, and the same 
object can be used for both.   

Be aware, that when re-using a `Scratch` object that the *output* buffer is also re-used, so if you are still using this
you must set the `Out` field in the scratch to nil. The same buffer is used for compression and decompression output.

The `Scratch` object will retain state that allows to re-use previous tables for encoding and decoding.  

## Tables and re-use

Huff0 allows for reusing tables from the previous block to save space if that is expected to give better/faster results. 

The Scratch object allows you to set a [`ReusePolicy`](https://godoc.org/github.com/klauspost/compress/huff0#ReusePolicy) 
that controls this behaviour. See the documentation for details. This can be altered between each block.

Do however note that this information is *not* stored in the output block and it is up to the users of the package to
record whether [`ReadTable`](https://godoc.org/github.com/klauspost/compress/huff0#ReadTable) should be called,
based on the boolean reported back from the CompressXX call. 

If you want to store the table separate from the data, you can access them as `OutData` and `OutTable` on the 
[`Scratch`](https://godoc.org/github.com/klauspost/compress/huff0#Scratch) object.

## Decompressing

The first part of decoding is to initialize the decoding table through [`ReadTable`](https://godoc.org/github.com/klauspost/compress/huff0#ReadTable).
This will initialize the decoding tables. 
You can supply the complete block to `ReadTable` and it will return the data part of the block 
which can be given to the decompressor. 

Decompressing is done by calling the [`Decompress1X`](https://godoc.org/github.com/klauspost/compress/huff0#Scratch.Decompress1X) 
or [`Decompress4X`](https://godoc.org/github.com/klauspost/compress/huff0#Scratch.Decompress4X) function.

For concurrently decompressing content with a fixed table a stateless [`Decoder`](https://godoc.org/github.com/klauspost/compress/huff0#Decoder) can be requested which will remain correct as long as the scratch is unchanged. The capacity of the provided slice indicates the expected output size.

You must provide the output from the compression stage, at exactly the size you got back. If you receive an error back
your input was likely corrupted. 

It is important to note that a successful decoding does *not* mean your output matches your original input. 
There are no integrity checks, so relying on errors from the decompressor does not assure your data is valid.

# Contributing

Contributions are always welcome. Be aware that adding public functions will require good justification and breaking 
changes will likely not be accepted. If in doubt open an issue before writing the PR.
   0707010000085B000081A4000000000000000000000001645E367C00001694000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/huff0/bitreader.go   // Copyright 2018 Klaus Post. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Based on work Copyright (c) 2013, Yann Collet, released under BSD License.

package huff0

import (
	"encoding/binary"
	"errors"
	"fmt"
	"io"
)

// bitReader reads a bitstream in reverse.
// The last set bit indicates the start of the stream and is used
// for aligning the input.
type bitReaderBytes struct {
	in       []byte
	off      uint // next byte to read is at in[off - 1]
	value    uint64
	bitsRead uint8
}

// init initializes and resets the bit reader.
func (b *bitReaderBytes) init(in []byte) error {
	if len(in) < 1 {
		return errors.New("corrupt stream: too short")
	}
	b.in = in
	b.off = uint(len(in))
	// The highest bit of the last byte indicates where to start
	v := in[len(in)-1]
	if v == 0 {
		return errors.New("corrupt stream, did not find end of stream")
	}
	b.bitsRead = 64
	b.value = 0
	if len(in) >= 8 {
		b.fillFastStart()
	} else {
		b.fill()
		b.fill()
	}
	b.advance(8 - uint8(highBit32(uint32(v))))
	return nil
}

// peekBitsFast requires that at least one bit is requested every time.
// There are no checks if the buffer is filled.
func (b *bitReaderBytes) peekByteFast() uint8 {
	got := uint8(b.value >> 56)
	return got
}

func (b *bitReaderBytes) advance(n uint8) {
	b.bitsRead += n
	b.value <<= n & 63
}

// fillFast() will make sure at least 32 bits are available.
// There must be at least 4 bytes available.
func (b *bitReaderBytes) fillFast() {
	if b.bitsRead < 32 {
		return
	}

	// 2 bounds checks.
	v := b.in[b.off-4 : b.off]
	low := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24)
	b.value |= uint64(low) << (b.bitsRead - 32)
	b.bitsRead -= 32
	b.off -= 4
}

// fillFastStart() assumes the bitReaderBytes is empty and there is at least 8 bytes to read.
func (b *bitReaderBytes) fillFastStart() {
	// Do single re-slice to avoid bounds checks.
	b.value = binary.LittleEndian.Uint64(b.in[b.off-8:])
	b.bitsRead = 0
	b.off -= 8
}

// fill() will make sure at least 32 bits are available.
func (b *bitReaderBytes) fill() {
	if b.bitsRead < 32 {
		return
	}
	if b.off > 4 {
		v := b.in[b.off-4 : b.off]
		low := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24)
		b.value |= uint64(low) << (b.bitsRead - 32)
		b.bitsRead -= 32
		b.off -= 4
		return
	}
	for b.off > 0 {
		b.value |= uint64(b.in[b.off-1]) << (b.bitsRead - 8)
		b.bitsRead -= 8
		b.off--
	}
}

// finished returns true if all bits have been read from the bit stream.
func (b *bitReaderBytes) finished() bool {
	return b.off == 0 && b.bitsRead >= 64
}

func (b *bitReaderBytes) remaining() uint {
	return b.off*8 + uint(64-b.bitsRead)
}

// close the bitstream and returns an error if out-of-buffer reads occurred.
func (b *bitReaderBytes) close() error {
	// Release reference.
	b.in = nil
	if b.remaining() > 0 {
		return fmt.Errorf("corrupt input: %d bits remain on stream", b.remaining())
	}
	if b.bitsRead > 64 {
		return io.ErrUnexpectedEOF
	}
	return nil
}

// bitReaderShifted reads a bitstream in reverse.
// The last set bit indicates the start of the stream and is used
// for aligning the input.
type bitReaderShifted struct {
	in       []byte
	off      uint // next byte to read is at in[off - 1]
	value    uint64
	bitsRead uint8
}

// init initializes and resets the bit reader.
func (b *bitReaderShifted) init(in []byte) error {
	if len(in) < 1 {
		return errors.New("corrupt stream: too short")
	}
	b.in = in
	b.off = uint(len(in))
	// The highest bit of the last byte indicates where to start
	v := in[len(in)-1]
	if v == 0 {
		return errors.New("corrupt stream, did not find end of stream")
	}
	b.bitsRead = 64
	b.value = 0
	if len(in) >= 8 {
		b.fillFastStart()
	} else {
		b.fill()
		b.fill()
	}
	b.advance(8 - uint8(highBit32(uint32(v))))
	return nil
}

// peekBitsFast requires that at least one bit is requested every time.
// There are no checks if the buffer is filled.
func (b *bitReaderShifted) peekBitsFast(n uint8) uint16 {
	return uint16(b.value >> ((64 - n) & 63))
}

func (b *bitReaderShifted) advance(n uint8) {
	b.bitsRead += n
	b.value <<= n & 63
}

// fillFast() will make sure at least 32 bits are available.
// There must be at least 4 bytes available.
func (b *bitReaderShifted) fillFast() {
	if b.bitsRead < 32 {
		return
	}

	// 2 bounds checks.
	v := b.in[b.off-4 : b.off]
	low := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24)
	b.value |= uint64(low) << ((b.bitsRead - 32) & 63)
	b.bitsRead -= 32
	b.off -= 4
}

// fillFastStart() assumes the bitReaderShifted is empty and there is at least 8 bytes to read.
func (b *bitReaderShifted) fillFastStart() {
	// Do single re-slice to avoid bounds checks.
	b.value = binary.LittleEndian.Uint64(b.in[b.off-8:])
	b.bitsRead = 0
	b.off -= 8
}

// fill() will make sure at least 32 bits are available.
func (b *bitReaderShifted) fill() {
	if b.bitsRead < 32 {
		return
	}
	if b.off > 4 {
		v := b.in[b.off-4 : b.off]
		low := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24)
		b.value |= uint64(low) << ((b.bitsRead - 32) & 63)
		b.bitsRead -= 32
		b.off -= 4
		return
	}
	for b.off > 0 {
		b.value |= uint64(b.in[b.off-1]) << ((b.bitsRead - 8) & 63)
		b.bitsRead -= 8
		b.off--
	}
}

func (b *bitReaderShifted) remaining() uint {
	return b.off*8 + uint(64-b.bitsRead)
}

// close the bitstream and returns an error if out-of-buffer reads occurred.
func (b *bitReaderShifted) close() error {
	// Release reference.
	b.in = nil
	if b.remaining() > 0 {
		return fmt.Errorf("corrupt input: %d bits remain on stream", b.remaining())
	}
	if b.bitsRead > 64 {
		return io.ErrUnexpectedEOF
	}
	return nil
}
0707010000085C000081A4000000000000000000000001645E367C00000D36000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/huff0/bitwriter.go   // Copyright 2018 Klaus Post. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Based on work Copyright (c) 2013, Yann Collet, released under BSD License.

package huff0

// bitWriter will write bits.
// First bit will be LSB of the first byte of output.
type bitWriter struct {
	bitContainer uint64
	nBits        uint8
	out          []byte
}

// bitMask16 is bitmasks. Has extra to avoid bounds check.
var bitMask16 = [32]uint16{
	0, 1, 3, 7, 0xF, 0x1F,
	0x3F, 0x7F, 0xFF, 0x1FF, 0x3FF, 0x7FF,
	0xFFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF, 0xFFFF,
	0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
	0xFFFF, 0xFFFF} /* up to 16 bits */

// addBits16Clean will add up to 16 bits. value may not contain more set bits than indicated.
// It will not check if there is space for them, so the caller must ensure that it has flushed recently.
func (b *bitWriter) addBits16Clean(value uint16, bits uint8) {
	b.bitContainer |= uint64(value) << (b.nBits & 63)
	b.nBits += bits
}

// encSymbol will add up to 16 bits. value may not contain more set bits than indicated.
// It will not check if there is space for them, so the caller must ensure that it has flushed recently.
func (b *bitWriter) encSymbol(ct cTable, symbol byte) {
	enc := ct[symbol]
	b.bitContainer |= uint64(enc.val) << (b.nBits & 63)
	if false {
		if enc.nBits == 0 {
			panic("nbits 0")
		}
	}
	b.nBits += enc.nBits
}

// encTwoSymbols will add up to 32 bits. value may not contain more set bits than indicated.
// It will not check if there is space for them, so the caller must ensure that it has flushed recently.
func (b *bitWriter) encTwoSymbols(ct cTable, av, bv byte) {
	encA := ct[av]
	encB := ct[bv]
	sh := b.nBits & 63
	combined := uint64(encA.val) | (uint64(encB.val) << (encA.nBits & 63))
	b.bitContainer |= combined << sh
	if false {
		if encA.nBits == 0 {
			panic("nbitsA 0")
		}
		if encB.nBits == 0 {
			panic("nbitsB 0")
		}
	}
	b.nBits += encA.nBits + encB.nBits
}

// encFourSymbols adds up to 32 bits from four symbols.
// It will not check if there is space for them,
// so the caller must ensure that b has been flushed recently.
func (b *bitWriter) encFourSymbols(encA, encB, encC, encD cTableEntry) {
	bitsA := encA.nBits
	bitsB := bitsA + encB.nBits
	bitsC := bitsB + encC.nBits
	bitsD := bitsC + encD.nBits
	combined := uint64(encA.val) |
		(uint64(encB.val) << (bitsA & 63)) |
		(uint64(encC.val) << (bitsB & 63)) |
		(uint64(encD.val) << (bitsC & 63))
	b.bitContainer |= combined << (b.nBits & 63)
	b.nBits += bitsD
}

// flush32 will flush out, so there are at least 32 bits available for writing.
func (b *bitWriter) flush32() {
	if b.nBits < 32 {
		return
	}
	b.out = append(b.out,
		byte(b.bitContainer),
		byte(b.bitContainer>>8),
		byte(b.bitContainer>>16),
		byte(b.bitContainer>>24))
	b.nBits -= 32
	b.bitContainer >>= 32
}

// flushAlign will flush remaining full bytes and align to next byte boundary.
func (b *bitWriter) flushAlign() {
	nbBytes := (b.nBits + 7) >> 3
	for i := uint8(0); i < nbBytes; i++ {
		b.out = append(b.out, byte(b.bitContainer>>(i*8)))
	}
	b.nBits = 0
	b.bitContainer = 0
}

// close will write the alignment bit and write the final byte(s)
// to the output.
func (b *bitWriter) close() error {
	// End mark
	b.addBits16Clean(1, 1)
	// flush until next byte.
	b.flushAlign()
	return nil
}
  0707010000085D000081A4000000000000000000000001645E367C000004D3000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/huff0/bytereader.go  // Copyright 2018 Klaus Post. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Based on work Copyright (c) 2013, Yann Collet, released under BSD License.

package huff0

// byteReader provides a byte reader that reads
// little endian values from a byte stream.
// The input stream is manually advanced.
// The reader performs no bounds checks.
type byteReader struct {
	b   []byte
	off int
}

// init will initialize the reader and set the input.
func (b *byteReader) init(in []byte) {
	b.b = in
	b.off = 0
}

// Int32 returns a little endian int32 starting at current offset.
func (b byteReader) Int32() int32 {
	v3 := int32(b.b[b.off+3])
	v2 := int32(b.b[b.off+2])
	v1 := int32(b.b[b.off+1])
	v0 := int32(b.b[b.off])
	return (v3 << 24) | (v2 << 16) | (v1 << 8) | v0
}

// Uint32 returns a little endian uint32 starting at current offset.
func (b byteReader) Uint32() uint32 {
	v3 := uint32(b.b[b.off+3])
	v2 := uint32(b.b[b.off+2])
	v1 := uint32(b.b[b.off+1])
	v0 := uint32(b.b[b.off])
	return (v3 << 24) | (v2 << 16) | (v1 << 8) | v0
}

// remain will return the number of bytes remaining.
func (b byteReader) remain() int {
	return len(b.b) - b.off
}
 0707010000085E000081A4000000000000000000000001645E367C0000494E000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/huff0/compress.go    package huff0

import (
	"fmt"
	"math"
	"runtime"
	"sync"
)

// Compress1X will compress the input.
// The output can be decoded using Decompress1X.
// Supply a Scratch object. The scratch object contains state about re-use,
// So when sharing across independent encodes, be sure to set the re-use policy.
func Compress1X(in []byte, s *Scratch) (out []byte, reUsed bool, err error) {
	s, err = s.prepare(in)
	if err != nil {
		return nil, false, err
	}
	return compress(in, s, s.compress1X)
}

// Compress4X will compress the input. The input is split into 4 independent blocks
// and compressed similar to Compress1X.
// The output can be decoded using Decompress4X.
// Supply a Scratch object. The scratch object contains state about re-use,
// So when sharing across independent encodes, be sure to set the re-use policy.
func Compress4X(in []byte, s *Scratch) (out []byte, reUsed bool, err error) {
	s, err = s.prepare(in)
	if err != nil {
		return nil, false, err
	}
	if false {
		// TODO: compress4Xp only slightly faster.
		const parallelThreshold = 8 << 10
		if len(in) < parallelThreshold || runtime.GOMAXPROCS(0) == 1 {
			return compress(in, s, s.compress4X)
		}
		return compress(in, s, s.compress4Xp)
	}
	return compress(in, s, s.compress4X)
}

func compress(in []byte, s *Scratch, compressor func(src []byte) ([]byte, error)) (out []byte, reUsed bool, err error) {
	// Nuke previous table if we cannot reuse anyway.
	if s.Reuse == ReusePolicyNone {
		s.prevTable = s.prevTable[:0]
	}

	// Create histogram, if none was provided.
	maxCount := s.maxCount
	var canReuse = false
	if maxCount == 0 {
		maxCount, canReuse = s.countSimple(in)
	} else {
		canReuse = s.canUseTable(s.prevTable)
	}

	// We want the output size to be less than this:
	wantSize := len(in)
	if s.WantLogLess > 0 {
		wantSize -= wantSize >> s.WantLogLess
	}

	// Reset for next run.
	s.clearCount = true
	s.maxCount = 0
	if maxCount >= len(in) {
		if maxCount > len(in) {
			return nil, false, fmt.Errorf("maxCount (%d) > length (%d)", maxCount, len(in))
		}
		if len(in) == 1 {
			return nil, false, ErrIncompressible
		}
		// One symbol, use RLE
		return nil, false, ErrUseRLE
	}
	if maxCount == 1 || maxCount < (len(in)>>7) {
		// Each symbol present maximum once or too well distributed.
		return nil, false, ErrIncompressible
	}
	if s.Reuse == ReusePolicyMust && !canReuse {
		// We must reuse, but we can't.
		return nil, false, ErrIncompressible
	}
	if (s.Reuse == ReusePolicyPrefer || s.Reuse == ReusePolicyMust) && canReuse {
		keepTable := s.cTable
		keepTL := s.actualTableLog
		s.cTable = s.prevTable
		s.actualTableLog = s.prevTableLog
		s.Out, err = compressor(in)
		s.cTable = keepTable
		s.actualTableLog = keepTL
		if err == nil && len(s.Out) < wantSize {
			s.OutData = s.Out
			return s.Out, true, nil
		}
		if s.Reuse == ReusePolicyMust {
			return nil, false, ErrIncompressible
		}
		// Do not attempt to re-use later.
		s.prevTable = s.prevTable[:0]
	}

	// Calculate new table.
	err = s.buildCTable()
	if err != nil {
		return nil, false, err
	}

	if false && !s.canUseTable(s.cTable) {
		panic("invalid table generated")
	}

	if s.Reuse == ReusePolicyAllow && canReuse {
		hSize := len(s.Out)
		oldSize := s.prevTable.estimateSize(s.count[:s.symbolLen])
		newSize := s.cTable.estimateSize(s.count[:s.symbolLen])
		if oldSize <= hSize+newSize || hSize+12 >= wantSize {
			// Retain cTable even if we re-use.
			keepTable := s.cTable
			keepTL := s.actualTableLog

			s.cTable = s.prevTable
			s.actualTableLog = s.prevTableLog
			s.Out, err = compressor(in)

			// Restore ctable.
			s.cTable = keepTable
			s.actualTableLog = keepTL
			if err != nil {
				return nil, false, err
			}
			if len(s.Out) >= wantSize {
				return nil, false, ErrIncompressible
			}
			s.OutData = s.Out
			return s.Out, true, nil
		}
	}

	// Use new table
	err = s.cTable.write(s)
	if err != nil {
		s.OutTable = nil
		return nil, false, err
	}
	s.OutTable = s.Out

	// Compress using new table
	s.Out, err = compressor(in)
	if err != nil {
		s.OutTable = nil
		return nil, false, err
	}
	if len(s.Out) >= wantSize {
		s.OutTable = nil
		return nil, false, ErrIncompressible
	}
	// Move current table into previous.
	s.prevTable, s.prevTableLog, s.cTable = s.cTable, s.actualTableLog, s.prevTable[:0]
	s.OutData = s.Out[len(s.OutTable):]
	return s.Out, false, nil
}

// EstimateSizes will estimate the data sizes
func EstimateSizes(in []byte, s *Scratch) (tableSz, dataSz, reuseSz int, err error) {
	s, err = s.prepare(in)
	if err != nil {
		return 0, 0, 0, err
	}

	// Create histogram, if none was provided.
	tableSz, dataSz, reuseSz = -1, -1, -1
	maxCount := s.maxCount
	var canReuse = false
	if maxCount == 0 {
		maxCount, canReuse = s.countSimple(in)
	} else {
		canReuse = s.canUseTable(s.prevTable)
	}

	// We want the output size to be less than this:
	wantSize := len(in)
	if s.WantLogLess > 0 {
		wantSize -= wantSize >> s.WantLogLess
	}

	// Reset for next run.
	s.clearCount = true
	s.maxCount = 0
	if maxCount >= len(in) {
		if maxCount > len(in) {
			return 0, 0, 0, fmt.Errorf("maxCount (%d) > length (%d)", maxCount, len(in))
		}
		if len(in) == 1 {
			return 0, 0, 0, ErrIncompressible
		}
		// One symbol, use RLE
		return 0, 0, 0, ErrUseRLE
	}
	if maxCount == 1 || maxCount < (len(in)>>7) {
		// Each symbol present maximum once or too well distributed.
		return 0, 0, 0, ErrIncompressible
	}

	// Calculate new table.
	err = s.buildCTable()
	if err != nil {
		return 0, 0, 0, err
	}

	if false && !s.canUseTable(s.cTable) {
		panic("invalid table generated")
	}

	tableSz, err = s.cTable.estTableSize(s)
	if err != nil {
		return 0, 0, 0, err
	}
	if canReuse {
		reuseSz = s.prevTable.estimateSize(s.count[:s.symbolLen])
	}
	dataSz = s.cTable.estimateSize(s.count[:s.symbolLen])

	// Restore
	return tableSz, dataSz, reuseSz, nil
}

func (s *Scratch) compress1X(src []byte) ([]byte, error) {
	return s.compress1xDo(s.Out, src)
}

func (s *Scratch) compress1xDo(dst, src []byte) ([]byte, error) {
	var bw = bitWriter{out: dst}

	// N is length divisible by 4.
	n := len(src)
	n -= n & 3
	cTable := s.cTable[:256]

	// Encode last bytes.
	for i := len(src) & 3; i > 0; i-- {
		bw.encSymbol(cTable, src[n+i-1])
	}
	n -= 4
	if s.actualTableLog <= 8 {
		for ; n >= 0; n -= 4 {
			tmp := src[n : n+4]
			// tmp should be len 4
			bw.flush32()
			bw.encFourSymbols(cTable[tmp[3]], cTable[tmp[2]], cTable[tmp[1]], cTable[tmp[0]])
		}
	} else {
		for ; n >= 0; n -= 4 {
			tmp := src[n : n+4]
			// tmp should be len 4
			bw.flush32()
			bw.encTwoSymbols(cTable, tmp[3], tmp[2])
			bw.flush32()
			bw.encTwoSymbols(cTable, tmp[1], tmp[0])
		}
	}
	err := bw.close()
	return bw.out, err
}

var sixZeros [6]byte

func (s *Scratch) compress4X(src []byte) ([]byte, error) {
	if len(src) < 12 {
		return nil, ErrIncompressible
	}
	segmentSize := (len(src) + 3) / 4

	// Add placeholder for output length
	offsetIdx := len(s.Out)
	s.Out = append(s.Out, sixZeros[:]...)

	for i := 0; i < 4; i++ {
		toDo := src
		if len(toDo) > segmentSize {
			toDo = toDo[:segmentSize]
		}
		src = src[len(toDo):]

		var err error
		idx := len(s.Out)
		s.Out, err = s.compress1xDo(s.Out, toDo)
		if err != nil {
			return nil, err
		}
		if len(s.Out)-idx > math.MaxUint16 {
			// We cannot store the size in the jump table
			return nil, ErrIncompressible
		}
		// Write compressed length as little endian before block.
		if i < 3 {
			// Last length is not written.
			length := len(s.Out) - idx
			s.Out[i*2+offsetIdx] = byte(length)
			s.Out[i*2+offsetIdx+1] = byte(length >> 8)
		}
	}

	return s.Out, nil
}

// compress4Xp will compress 4 streams using separate goroutines.
func (s *Scratch) compress4Xp(src []byte) ([]byte, error) {
	if len(src) < 12 {
		return nil, ErrIncompressible
	}
	// Add placeholder for output length
	s.Out = s.Out[:6]

	segmentSize := (len(src) + 3) / 4
	var wg sync.WaitGroup
	var errs [4]error
	wg.Add(4)
	for i := 0; i < 4; i++ {
		toDo := src
		if len(toDo) > segmentSize {
			toDo = toDo[:segmentSize]
		}
		src = src[len(toDo):]

		// Separate goroutine for each block.
		go func(i int) {
			s.tmpOut[i], errs[i] = s.compress1xDo(s.tmpOut[i][:0], toDo)
			wg.Done()
		}(i)
	}
	wg.Wait()
	for i := 0; i < 4; i++ {
		if errs[i] != nil {
			return nil, errs[i]
		}
		o := s.tmpOut[i]
		if len(o) > math.MaxUint16 {
			// We cannot store the size in the jump table
			return nil, ErrIncompressible
		}
		// Write compressed length as little endian before block.
		if i < 3 {
			// Last length is not written.
			s.Out[i*2] = byte(len(o))
			s.Out[i*2+1] = byte(len(o) >> 8)
		}

		// Write output.
		s.Out = append(s.Out, o...)
	}
	return s.Out, nil
}

// countSimple will create a simple histogram in s.count.
// Returns the biggest count.
// Does not update s.clearCount.
func (s *Scratch) countSimple(in []byte) (max int, reuse bool) {
	reuse = true
	for _, v := range in {
		s.count[v]++
	}
	m := uint32(0)
	if len(s.prevTable) > 0 {
		for i, v := range s.count[:] {
			if v == 0 {
				continue
			}
			if v > m {
				m = v
			}
			s.symbolLen = uint16(i) + 1
			if i >= len(s.prevTable) {
				reuse = false
			} else if s.prevTable[i].nBits == 0 {
				reuse = false
			}
		}
		return int(m), reuse
	}
	for i, v := range s.count[:] {
		if v == 0 {
			continue
		}
		if v > m {
			m = v
		}
		s.symbolLen = uint16(i) + 1
	}
	return int(m), false
}

func (s *Scratch) canUseTable(c cTable) bool {
	if len(c) < int(s.symbolLen) {
		return false
	}
	for i, v := range s.count[:s.symbolLen] {
		if v != 0 && c[i].nBits == 0 {
			return false
		}
	}
	return true
}

//lint:ignore U1000 used for debugging
func (s *Scratch) validateTable(c cTable) bool {
	if len(c) < int(s.symbolLen) {
		return false
	}
	for i, v := range s.count[:s.symbolLen] {
		if v != 0 {
			if c[i].nBits == 0 {
				return false
			}
			if c[i].nBits > s.actualTableLog {
				return false
			}
		}
	}
	return true
}

// minTableLog provides the minimum logSize to safely represent a distribution.
func (s *Scratch) minTableLog() uint8 {
	minBitsSrc := highBit32(uint32(s.br.remain())) + 1
	minBitsSymbols := highBit32(uint32(s.symbolLen-1)) + 2
	if minBitsSrc < minBitsSymbols {
		return uint8(minBitsSrc)
	}
	return uint8(minBitsSymbols)
}

// optimalTableLog calculates and sets the optimal tableLog in s.actualTableLog
func (s *Scratch) optimalTableLog() {
	tableLog := s.TableLog
	minBits := s.minTableLog()
	maxBitsSrc := uint8(highBit32(uint32(s.br.remain()-1))) - 1
	if maxBitsSrc < tableLog {
		// Accuracy can be reduced
		tableLog = maxBitsSrc
	}
	if minBits > tableLog {
		tableLog = minBits
	}
	// Need a minimum to safely represent all symbol values
	if tableLog < minTablelog {
		tableLog = minTablelog
	}
	if tableLog > tableLogMax {
		tableLog = tableLogMax
	}
	s.actualTableLog = tableLog
}

type cTableEntry struct {
	val   uint16
	nBits uint8
	// We have 8 bits extra
}

const huffNodesMask = huffNodesLen - 1

func (s *Scratch) buildCTable() error {
	s.optimalTableLog()
	s.huffSort()
	if cap(s.cTable) < maxSymbolValue+1 {
		s.cTable = make([]cTableEntry, s.symbolLen, maxSymbolValue+1)
	} else {
		s.cTable = s.cTable[:s.symbolLen]
		for i := range s.cTable {
			s.cTable[i] = cTableEntry{}
		}
	}

	var startNode = int16(s.symbolLen)
	nonNullRank := s.symbolLen - 1

	nodeNb := startNode
	huffNode := s.nodes[1 : huffNodesLen+1]

	// This overlays the slice above, but allows "-1" index lookups.
	// Different from reference implementation.
	huffNode0 := s.nodes[0 : huffNodesLen+1]

	for huffNode[nonNullRank].count() == 0 {
		nonNullRank--
	}

	lowS := int16(nonNullRank)
	nodeRoot := nodeNb + lowS - 1
	lowN := nodeNb
	huffNode[nodeNb].setCount(huffNode[lowS].count() + huffNode[lowS-1].count())
	huffNode[lowS].setParent(nodeNb)
	huffNode[lowS-1].setParent(nodeNb)
	nodeNb++
	lowS -= 2
	for n := nodeNb; n <= nodeRoot; n++ {
		huffNode[n].setCount(1 << 30)
	}
	// fake entry, strong barrier
	huffNode0[0].setCount(1 << 31)

	// create parents
	for nodeNb <= nodeRoot {
		var n1, n2 int16
		if huffNode0[lowS+1].count() < huffNode0[lowN+1].count() {
			n1 = lowS
			lowS--
		} else {
			n1 = lowN
			lowN++
		}
		if huffNode0[lowS+1].count() < huffNode0[lowN+1].count() {
			n2 = lowS
			lowS--
		} else {
			n2 = lowN
			lowN++
		}

		huffNode[nodeNb].setCount(huffNode0[n1+1].count() + huffNode0[n2+1].count())
		huffNode0[n1+1].setParent(nodeNb)
		huffNode0[n2+1].setParent(nodeNb)
		nodeNb++
	}

	// distribute weights (unlimited tree height)
	huffNode[nodeRoot].setNbBits(0)
	for n := nodeRoot - 1; n >= startNode; n-- {
		huffNode[n].setNbBits(huffNode[huffNode[n].parent()].nbBits() + 1)
	}
	for n := uint16(0); n <= nonNullRank; n++ {
		huffNode[n].setNbBits(huffNode[huffNode[n].parent()].nbBits() + 1)
	}
	s.actualTableLog = s.setMaxHeight(int(nonNullRank))
	maxNbBits := s.actualTableLog

	// fill result into tree (val, nbBits)
	if maxNbBits > tableLogMax {
		return fmt.Errorf("internal error: maxNbBits (%d) > tableLogMax (%d)", maxNbBits, tableLogMax)
	}
	var nbPerRank [tableLogMax + 1]uint16
	var valPerRank [16]uint16
	for _, v := range huffNode[:nonNullRank+1] {
		nbPerRank[v.nbBits()]++
	}
	// determine stating value per rank
	{
		min := uint16(0)
		for n := maxNbBits; n > 0; n-- {
			// get starting value within each rank
			valPerRank[n] = min
			min += nbPerRank[n]
			min >>= 1
		}
	}

	// push nbBits per symbol, symbol order
	for _, v := range huffNode[:nonNullRank+1] {
		s.cTable[v.symbol()].nBits = v.nbBits()
	}

	// assign value within rank, symbol order
	t := s.cTable[:s.symbolLen]
	for n, val := range t {
		nbits := val.nBits & 15
		v := valPerRank[nbits]
		t[n].val = v
		valPerRank[nbits] = v + 1
	}

	return nil
}

// huffSort will sort symbols, decreasing order.
func (s *Scratch) huffSort() {
	type rankPos struct {
		base    uint32
		current uint32
	}

	// Clear nodes
	nodes := s.nodes[:huffNodesLen+1]
	s.nodes = nodes
	nodes = nodes[1 : huffNodesLen+1]

	// Sort into buckets based on length of symbol count.
	var rank [32]rankPos
	for _, v := range s.count[:s.symbolLen] {
		r := highBit32(v+1) & 31
		rank[r].base++
	}
	// maxBitLength is log2(BlockSizeMax) + 1
	const maxBitLength = 18 + 1
	for n := maxBitLength; n > 0; n-- {
		rank[n-1].base += rank[n].base
	}
	for n := range rank[:maxBitLength] {
		rank[n].current = rank[n].base
	}
	for n, c := range s.count[:s.symbolLen] {
		r := (highBit32(c+1) + 1) & 31
		pos := rank[r].current
		rank[r].current++
		prev := nodes[(pos-1)&huffNodesMask]
		for pos > rank[r].base && c > prev.count() {
			nodes[pos&huffNodesMask] = prev
			pos--
			prev = nodes[(pos-1)&huffNodesMask]
		}
		nodes[pos&huffNodesMask] = makeNodeElt(c, byte(n))
	}
}

func (s *Scratch) setMaxHeight(lastNonNull int) uint8 {
	maxNbBits := s.actualTableLog
	huffNode := s.nodes[1 : huffNodesLen+1]
	//huffNode = huffNode[: huffNodesLen]

	largestBits := huffNode[lastNonNull].nbBits()

	// early exit : no elt > maxNbBits
	if largestBits <= maxNbBits {
		return largestBits
	}
	totalCost := int(0)
	baseCost := int(1) << (largestBits - maxNbBits)
	n := uint32(lastNonNull)

	for huffNode[n].nbBits() > maxNbBits {
		totalCost += baseCost - (1 << (largestBits - huffNode[n].nbBits()))
		huffNode[n].setNbBits(maxNbBits)
		n--
	}
	// n stops at huffNode[n].nbBits <= maxNbBits

	for huffNode[n].nbBits() == maxNbBits {
		n--
	}
	// n end at index of smallest symbol using < maxNbBits

	// renorm totalCost
	totalCost >>= largestBits - maxNbBits /* note : totalCost is necessarily a multiple of baseCost */

	// repay normalized cost
	{
		const noSymbol = 0xF0F0F0F0
		var rankLast [tableLogMax + 2]uint32

		for i := range rankLast[:] {
			rankLast[i] = noSymbol
		}

		// Get pos of last (smallest) symbol per rank
		{
			currentNbBits := maxNbBits
			for pos := int(n); pos >= 0; pos-- {
				if huffNode[pos].nbBits() >= currentNbBits {
					continue
				}
				currentNbBits = huffNode[pos].nbBits() // < maxNbBits
				rankLast[maxNbBits-currentNbBits] = uint32(pos)
			}
		}

		for totalCost > 0 {
			nBitsToDecrease := uint8(highBit32(uint32(totalCost))) + 1

			for ; nBitsToDecrease > 1; nBitsToDecrease-- {
				highPos := rankLast[nBitsToDecrease]
				lowPos := rankLast[nBitsToDecrease-1]
				if highPos == noSymbol {
					continue
				}
				if lowPos == noSymbol {
					break
				}
				highTotal := huffNode[highPos].count()
				lowTotal := 2 * huffNode[lowPos].count()
				if highTotal <= lowTotal {
					break
				}
			}
			// only triggered when no more rank 1 symbol left => find closest one (note : there is necessarily at least one !)
			// HUF_MAX_TABLELOG test just to please gcc 5+; but it should not be necessary
			// FIXME: try to remove
			for (nBitsToDecrease <= tableLogMax) && (rankLast[nBitsToDecrease] == noSymbol) {
				nBitsToDecrease++
			}
			totalCost -= 1 << (nBitsToDecrease - 1)
			if rankLast[nBitsToDecrease-1] == noSymbol {
				// this rank is no longer empty
				rankLast[nBitsToDecrease-1] = rankLast[nBitsToDecrease]
			}
			huffNode[rankLast[nBitsToDecrease]].setNbBits(1 +
				huffNode[rankLast[nBitsToDecrease]].nbBits())
			if rankLast[nBitsToDecrease] == 0 {
				/* special case, reached largest symbol */
				rankLast[nBitsToDecrease] = noSymbol
			} else {
				rankLast[nBitsToDecrease]--
				if huffNode[rankLast[nBitsToDecrease]].nbBits() != maxNbBits-nBitsToDecrease {
					rankLast[nBitsToDecrease] = noSymbol /* this rank is now empty */
				}
			}
		}

		for totalCost < 0 { /* Sometimes, cost correction overshoot */
			if rankLast[1] == noSymbol { /* special case : no rank 1 symbol (using maxNbBits-1); let's create one from largest rank 0 (using maxNbBits) */
				for huffNode[n].nbBits() == maxNbBits {
					n--
				}
				huffNode[n+1].setNbBits(huffNode[n+1].nbBits() - 1)
				rankLast[1] = n + 1
				totalCost++
				continue
			}
			huffNode[rankLast[1]+1].setNbBits(huffNode[rankLast[1]+1].nbBits() - 1)
			rankLast[1]++
			totalCost++
		}
	}
	return maxNbBits
}

// A nodeElt is the fields
//
//	count  uint32
//	parent uint16
//	symbol byte
//	nbBits uint8
//
// in some order, all squashed into an integer so that the compiler
// always loads and stores entire nodeElts instead of separate fields.
type nodeElt uint64

func makeNodeElt(count uint32, symbol byte) nodeElt {
	return nodeElt(count) | nodeElt(symbol)<<48
}

func (e *nodeElt) count() uint32  { return uint32(*e) }
func (e *nodeElt) parent() uint16 { return uint16(*e >> 32) }
func (e *nodeElt) symbol() byte   { return byte(*e >> 48) }
func (e *nodeElt) nbBits() uint8  { return uint8(*e >> 56) }

func (e *nodeElt) setCount(c uint32) { *e = (*e)&0xffffffff00000000 | nodeElt(c) }
func (e *nodeElt) setParent(p int16) { *e = (*e)&0xffff0000ffffffff | nodeElt(uint16(p))<<32 }
func (e *nodeElt) setNbBits(n uint8) { *e = (*e)&0x00ffffffffffffff | nodeElt(n)<<56 }
  0707010000085F000081A4000000000000000000000001645E367C000073E4000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/huff0/decompress.go  package huff0

import (
	"errors"
	"fmt"
	"io"
	"sync"

	"github.com/klauspost/compress/fse"
)

type dTable struct {
	single []dEntrySingle
}

// single-symbols decoding
type dEntrySingle struct {
	entry uint16
}

// Uses special code for all tables that are < 8 bits.
const use8BitTables = true

// ReadTable will read a table from the input.
// The size of the input may be larger than the table definition.
// Any content remaining after the table definition will be returned.
// If no Scratch is provided a new one is allocated.
// The returned Scratch can be used for encoding or decoding input using this table.
func ReadTable(in []byte, s *Scratch) (s2 *Scratch, remain []byte, err error) {
	s, err = s.prepare(nil)
	if err != nil {
		return s, nil, err
	}
	if len(in) <= 1 {
		return s, nil, errors.New("input too small for table")
	}
	iSize := in[0]
	in = in[1:]
	if iSize >= 128 {
		// Uncompressed
		oSize := iSize - 127
		iSize = (oSize + 1) / 2
		if int(iSize) > len(in) {
			return s, nil, errors.New("input too small for table")
		}
		for n := uint8(0); n < oSize; n += 2 {
			v := in[n/2]
			s.huffWeight[n] = v >> 4
			s.huffWeight[n+1] = v & 15
		}
		s.symbolLen = uint16(oSize)
		in = in[iSize:]
	} else {
		if len(in) < int(iSize) {
			return s, nil, fmt.Errorf("input too small for table, want %d bytes, have %d", iSize, len(in))
		}
		// FSE compressed weights
		s.fse.DecompressLimit = 255
		hw := s.huffWeight[:]
		s.fse.Out = hw
		b, err := fse.Decompress(in[:iSize], s.fse)
		s.fse.Out = nil
		if err != nil {
			return s, nil, fmt.Errorf("fse decompress returned: %w", err)
		}
		if len(b) > 255 {
			return s, nil, errors.New("corrupt input: output table too large")
		}
		s.symbolLen = uint16(len(b))
		in = in[iSize:]
	}

	// collect weight stats
	var rankStats [16]uint32
	weightTotal := uint32(0)
	for _, v := range s.huffWeight[:s.symbolLen] {
		if v > tableLogMax {
			return s, nil, errors.New("corrupt input: weight too large")
		}
		v2 := v & 15
		rankStats[v2]++
		// (1 << (v2-1)) is slower since the compiler cannot prove that v2 isn't 0.
		weightTotal += (1 << v2) >> 1
	}
	if weightTotal == 0 {
		return s, nil, errors.New("corrupt input: weights zero")
	}

	// get last non-null symbol weight (implied, total must be 2^n)
	{
		tableLog := highBit32(weightTotal) + 1
		if tableLog > tableLogMax {
			return s, nil, errors.New("corrupt input: tableLog too big")
		}
		s.actualTableLog = uint8(tableLog)
		// determine last weight
		{
			total := uint32(1) << tableLog
			rest := total - weightTotal
			verif := uint32(1) << highBit32(rest)
			lastWeight := highBit32(rest) + 1
			if verif != rest {
				// last value must be a clean power of 2
				return s, nil, errors.New("corrupt input: last value not power of two")
			}
			s.huffWeight[s.symbolLen] = uint8(lastWeight)
			s.symbolLen++
			rankStats[lastWeight]++
		}
	}

	if (rankStats[1] < 2) || (rankStats[1]&1 != 0) {
		// by construction : at least 2 elts of rank 1, must be even
		return s, nil, errors.New("corrupt input: min elt size, even check failed ")
	}

	// TODO: Choose between single/double symbol decoding

	// Calculate starting value for each rank
	{
		var nextRankStart uint32
		for n := uint8(1); n < s.actualTableLog+1; n++ {
			current := nextRankStart
			nextRankStart += rankStats[n] << (n - 1)
			rankStats[n] = current
		}
	}

	// fill DTable (always full size)
	tSize := 1 << tableLogMax
	if len(s.dt.single) != tSize {
		s.dt.single = make([]dEntrySingle, tSize)
	}
	cTable := s.prevTable
	if cap(cTable) < maxSymbolValue+1 {
		cTable = make([]cTableEntry, 0, maxSymbolValue+1)
	}
	cTable = cTable[:maxSymbolValue+1]
	s.prevTable = cTable[:s.symbolLen]
	s.prevTableLog = s.actualTableLog

	for n, w := range s.huffWeight[:s.symbolLen] {
		if w == 0 {
			cTable[n] = cTableEntry{
				val:   0,
				nBits: 0,
			}
			continue
		}
		length := (uint32(1) << w) >> 1
		d := dEntrySingle{
			entry: uint16(s.actualTableLog+1-w) | (uint16(n) << 8),
		}

		rank := &rankStats[w]
		cTable[n] = cTableEntry{
			val:   uint16(*rank >> (w - 1)),
			nBits: uint8(d.entry),
		}

		single := s.dt.single[*rank : *rank+length]
		for i := range single {
			single[i] = d
		}
		*rank += length
	}

	return s, in, nil
}

// Decompress1X will decompress a 1X encoded stream.
// The length of the supplied input must match the end of a block exactly.
// Before this is called, the table must be initialized with ReadTable unless
// the encoder re-used the table.
// deprecated: Use the stateless Decoder() to get a concurrent version.
func (s *Scratch) Decompress1X(in []byte) (out []byte, err error) {
	if cap(s.Out) < s.MaxDecodedSize {
		s.Out = make([]byte, s.MaxDecodedSize)
	}
	s.Out = s.Out[:0:s.MaxDecodedSize]
	s.Out, err = s.Decoder().Decompress1X(s.Out, in)
	return s.Out, err
}

// Decompress4X will decompress a 4X encoded stream.
// Before this is called, the table must be initialized with ReadTable unless
// the encoder re-used the table.
// The length of the supplied input must match the end of a block exactly.
// The destination size of the uncompressed data must be known and provided.
// deprecated: Use the stateless Decoder() to get a concurrent version.
func (s *Scratch) Decompress4X(in []byte, dstSize int) (out []byte, err error) {
	if dstSize > s.MaxDecodedSize {
		return nil, ErrMaxDecodedSizeExceeded
	}
	if cap(s.Out) < dstSize {
		s.Out = make([]byte, s.MaxDecodedSize)
	}
	s.Out = s.Out[:0:dstSize]
	s.Out, err = s.Decoder().Decompress4X(s.Out, in)
	return s.Out, err
}

// Decoder will return a stateless decoder that can be used by multiple
// decompressors concurrently.
// Before this is called, the table must be initialized with ReadTable.
// The Decoder is still linked to the scratch buffer so that cannot be reused.
// However, it is safe to discard the scratch.
func (s *Scratch) Decoder() *Decoder {
	return &Decoder{
		dt:             s.dt,
		actualTableLog: s.actualTableLog,
		bufs:           &s.decPool,
	}
}

// Decoder provides stateless decoding.
type Decoder struct {
	dt             dTable
	actualTableLog uint8
	bufs           *sync.Pool
}

func (d *Decoder) buffer() *[4][256]byte {
	buf, ok := d.bufs.Get().(*[4][256]byte)
	if ok {
		return buf
	}
	return &[4][256]byte{}
}

// decompress1X8Bit will decompress a 1X encoded stream with tablelog <= 8.
// The cap of the output buffer will be the maximum decompressed size.
// The length of the supplied input must match the end of a block exactly.
func (d *Decoder) decompress1X8Bit(dst, src []byte) ([]byte, error) {
	if d.actualTableLog == 8 {
		return d.decompress1X8BitExactly(dst, src)
	}
	var br bitReaderBytes
	err := br.init(src)
	if err != nil {
		return dst, err
	}
	maxDecodedSize := cap(dst)
	dst = dst[:0]

	// Avoid bounds check by always having full sized table.
	dt := d.dt.single[:256]

	// Use temp table to avoid bound checks/append penalty.
	bufs := d.buffer()
	buf := &bufs[0]
	var off uint8

	switch d.actualTableLog {
	case 8:
		const shift = 8 - 8
		for br.off >= 4 {
			br.fillFast()
			v := dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+0] = uint8(v.entry >> 8)

			v = dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+1] = uint8(v.entry >> 8)

			v = dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+2] = uint8(v.entry >> 8)

			v = dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+3] = uint8(v.entry >> 8)

			off += 4
			if off == 0 {
				if len(dst)+256 > maxDecodedSize {
					br.close()
					d.bufs.Put(bufs)
					return nil, ErrMaxDecodedSizeExceeded
				}
				dst = append(dst, buf[:]...)
			}
		}
	case 7:
		const shift = 8 - 7
		for br.off >= 4 {
			br.fillFast()
			v := dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+0] = uint8(v.entry >> 8)

			v = dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+1] = uint8(v.entry >> 8)

			v = dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+2] = uint8(v.entry >> 8)

			v = dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+3] = uint8(v.entry >> 8)

			off += 4
			if off == 0 {
				if len(dst)+256 > maxDecodedSize {
					br.close()
					d.bufs.Put(bufs)
					return nil, ErrMaxDecodedSizeExceeded
				}
				dst = append(dst, buf[:]...)
			}
		}
	case 6:
		const shift = 8 - 6
		for br.off >= 4 {
			br.fillFast()
			v := dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+0] = uint8(v.entry >> 8)

			v = dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+1] = uint8(v.entry >> 8)

			v = dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+2] = uint8(v.entry >> 8)

			v = dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+3] = uint8(v.entry >> 8)

			off += 4
			if off == 0 {
				if len(dst)+256 > maxDecodedSize {
					d.bufs.Put(bufs)
					br.close()
					return nil, ErrMaxDecodedSizeExceeded
				}
				dst = append(dst, buf[:]...)
			}
		}
	case 5:
		const shift = 8 - 5
		for br.off >= 4 {
			br.fillFast()
			v := dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+0] = uint8(v.entry >> 8)

			v = dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+1] = uint8(v.entry >> 8)

			v = dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+2] = uint8(v.entry >> 8)

			v = dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+3] = uint8(v.entry >> 8)

			off += 4
			if off == 0 {
				if len(dst)+256 > maxDecodedSize {
					d.bufs.Put(bufs)
					br.close()
					return nil, ErrMaxDecodedSizeExceeded
				}
				dst = append(dst, buf[:]...)
			}
		}
	case 4:
		const shift = 8 - 4
		for br.off >= 4 {
			br.fillFast()
			v := dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+0] = uint8(v.entry >> 8)

			v = dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+1] = uint8(v.entry >> 8)

			v = dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+2] = uint8(v.entry >> 8)

			v = dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+3] = uint8(v.entry >> 8)

			off += 4
			if off == 0 {
				if len(dst)+256 > maxDecodedSize {
					d.bufs.Put(bufs)
					br.close()
					return nil, ErrMaxDecodedSizeExceeded
				}
				dst = append(dst, buf[:]...)
			}
		}
	case 3:
		const shift = 8 - 3
		for br.off >= 4 {
			br.fillFast()
			v := dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+0] = uint8(v.entry >> 8)

			v = dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+1] = uint8(v.entry >> 8)

			v = dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+2] = uint8(v.entry >> 8)

			v = dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+3] = uint8(v.entry >> 8)

			off += 4
			if off == 0 {
				if len(dst)+256 > maxDecodedSize {
					d.bufs.Put(bufs)
					br.close()
					return nil, ErrMaxDecodedSizeExceeded
				}
				dst = append(dst, buf[:]...)
			}
		}
	case 2:
		const shift = 8 - 2
		for br.off >= 4 {
			br.fillFast()
			v := dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+0] = uint8(v.entry >> 8)

			v = dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+1] = uint8(v.entry >> 8)

			v = dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+2] = uint8(v.entry >> 8)

			v = dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+3] = uint8(v.entry >> 8)

			off += 4
			if off == 0 {
				if len(dst)+256 > maxDecodedSize {
					d.bufs.Put(bufs)
					br.close()
					return nil, ErrMaxDecodedSizeExceeded
				}
				dst = append(dst, buf[:]...)
			}
		}
	case 1:
		const shift = 8 - 1
		for br.off >= 4 {
			br.fillFast()
			v := dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+0] = uint8(v.entry >> 8)

			v = dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+1] = uint8(v.entry >> 8)

			v = dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+2] = uint8(v.entry >> 8)

			v = dt[uint8(br.value>>(56+shift))]
			br.advance(uint8(v.entry))
			buf[off+3] = uint8(v.entry >> 8)

			off += 4
			if off == 0 {
				if len(dst)+256 > maxDecodedSize {
					d.bufs.Put(bufs)
					br.close()
					return nil, ErrMaxDecodedSizeExceeded
				}
				dst = append(dst, buf[:]...)
			}
		}
	default:
		d.bufs.Put(bufs)
		return nil, fmt.Errorf("invalid tablelog: %d", d.actualTableLog)
	}

	if len(dst)+int(off) > maxDecodedSize {
		d.bufs.Put(bufs)
		br.close()
		return nil, ErrMaxDecodedSizeExceeded
	}
	dst = append(dst, buf[:off]...)

	// br < 4, so uint8 is fine
	bitsLeft := int8(uint8(br.off)*8 + (64 - br.bitsRead))
	shift := (8 - d.actualTableLog) & 7

	for bitsLeft > 0 {
		if br.bitsRead >= 64-8 {
			for br.off > 0 {
				br.value |= uint64(br.in[br.off-1]) << (br.bitsRead - 8)
				br.bitsRead -= 8
				br.off--
			}
		}
		if len(dst) >= maxDecodedSize {
			br.close()
			d.bufs.Put(bufs)
			return nil, ErrMaxDecodedSizeExceeded
		}
		v := dt[br.peekByteFast()>>shift]
		nBits := uint8(v.entry)
		br.advance(nBits)
		bitsLeft -= int8(nBits)
		dst = append(dst, uint8(v.entry>>8))
	}
	d.bufs.Put(bufs)
	return dst, br.close()
}

// decompress1X8Bit will decompress a 1X encoded stream with tablelog <= 8.
// The cap of the output buffer will be the maximum decompressed size.
// The length of the supplied input must match the end of a block exactly.
func (d *Decoder) decompress1X8BitExactly(dst, src []byte) ([]byte, error) {
	var br bitReaderBytes
	err := br.init(src)
	if err != nil {
		return dst, err
	}
	maxDecodedSize := cap(dst)
	dst = dst[:0]

	// Avoid bounds check by always having full sized table.
	dt := d.dt.single[:256]

	// Use temp table to avoid bound checks/append penalty.
	bufs := d.buffer()
	buf := &bufs[0]
	var off uint8

	const shift = 56

	//fmt.Printf("mask: %b, tl:%d\n", mask, d.actualTableLog)
	for br.off >= 4 {
		br.fillFast()
		v := dt[uint8(br.value>>shift)]
		br.advance(uint8(v.entry))
		buf[off+0] = uint8(v.entry >> 8)

		v = dt[uint8(br.value>>shift)]
		br.advance(uint8(v.entry))
		buf[off+1] = uint8(v.entry >> 8)

		v = dt[uint8(br.value>>shift)]
		br.advance(uint8(v.entry))
		buf[off+2] = uint8(v.entry >> 8)

		v = dt[uint8(br.value>>shift)]
		br.advance(uint8(v.entry))
		buf[off+3] = uint8(v.entry >> 8)

		off += 4
		if off == 0 {
			if len(dst)+256 > maxDecodedSize {
				d.bufs.Put(bufs)
				br.close()
				return nil, ErrMaxDecodedSizeExceeded
			}
			dst = append(dst, buf[:]...)
		}
	}

	if len(dst)+int(off) > maxDecodedSize {
		d.bufs.Put(bufs)
		br.close()
		return nil, ErrMaxDecodedSizeExceeded
	}
	dst = append(dst, buf[:off]...)

	// br < 4, so uint8 is fine
	bitsLeft := int8(uint8(br.off)*8 + (64 - br.bitsRead))
	for bitsLeft > 0 {
		if br.bitsRead >= 64-8 {
			for br.off > 0 {
				br.value |= uint64(br.in[br.off-1]) << (br.bitsRead - 8)
				br.bitsRead -= 8
				br.off--
			}
		}
		if len(dst) >= maxDecodedSize {
			d.bufs.Put(bufs)
			br.close()
			return nil, ErrMaxDecodedSizeExceeded
		}
		v := dt[br.peekByteFast()]
		nBits := uint8(v.entry)
		br.advance(nBits)
		bitsLeft -= int8(nBits)
		dst = append(dst, uint8(v.entry>>8))
	}
	d.bufs.Put(bufs)
	return dst, br.close()
}

// Decompress4X will decompress a 4X encoded stream.
// The length of the supplied input must match the end of a block exactly.
// The *capacity* of the dst slice must match the destination size of
// the uncompressed data exactly.
func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) {
	if d.actualTableLog == 8 {
		return d.decompress4X8bitExactly(dst, src)
	}

	var br [4]bitReaderBytes
	start := 6
	for i := 0; i < 3; i++ {
		length := int(src[i*2]) | (int(src[i*2+1]) << 8)
		if start+length >= len(src) {
			return nil, errors.New("truncated input (or invalid offset)")
		}
		err := br[i].init(src[start : start+length])
		if err != nil {
			return nil, err
		}
		start += length
	}
	err := br[3].init(src[start:])
	if err != nil {
		return nil, err
	}

	// destination, offset to match first output
	dstSize := cap(dst)
	dst = dst[:dstSize]
	out := dst
	dstEvery := (dstSize + 3) / 4

	shift := (56 + (8 - d.actualTableLog)) & 63

	const tlSize = 1 << 8
	single := d.dt.single[:tlSize]

	// Use temp table to avoid bound checks/append penalty.
	buf := d.buffer()
	var off uint8
	var decoded int

	// Decode 4 values from each decoder/loop.
	const bufoff = 256
	for {
		if br[0].off < 4 || br[1].off < 4 || br[2].off < 4 || br[3].off < 4 {
			break
		}

		{
			// Interleave 2 decodes.
			const stream = 0
			const stream2 = 1
			br1 := &br[stream]
			br2 := &br[stream2]
			br1.fillFast()
			br2.fillFast()

			v := single[uint8(br1.value>>shift)].entry
			v2 := single[uint8(br2.value>>shift)].entry
			br1.bitsRead += uint8(v)
			br1.value <<= v & 63
			br2.bitsRead += uint8(v2)
			br2.value <<= v2 & 63
			buf[stream][off] = uint8(v >> 8)
			buf[stream2][off] = uint8(v2 >> 8)

			v = single[uint8(br1.value>>shift)].entry
			v2 = single[uint8(br2.value>>shift)].entry
			br1.bitsRead += uint8(v)
			br1.value <<= v & 63
			br2.bitsRead += uint8(v2)
			br2.value <<= v2 & 63
			buf[stream][off+1] = uint8(v >> 8)
			buf[stream2][off+1] = uint8(v2 >> 8)

			v = single[uint8(br1.value>>shift)].entry
			v2 = single[uint8(br2.value>>shift)].entry
			br1.bitsRead += uint8(v)
			br1.value <<= v & 63
			br2.bitsRead += uint8(v2)
			br2.value <<= v2 & 63
			buf[stream][off+2] = uint8(v >> 8)
			buf[stream2][off+2] = uint8(v2 >> 8)

			v = single[uint8(br1.value>>shift)].entry
			v2 = single[uint8(br2.value>>shift)].entry
			br1.bitsRead += uint8(v)
			br1.value <<= v & 63
			br2.bitsRead += uint8(v2)
			br2.value <<= v2 & 63
			buf[stream][off+3] = uint8(v >> 8)
			buf[stream2][off+3] = uint8(v2 >> 8)
		}

		{
			const stream = 2
			const stream2 = 3
			br1 := &br[stream]
			br2 := &br[stream2]
			br1.fillFast()
			br2.fillFast()

			v := single[uint8(br1.value>>shift)].entry
			v2 := single[uint8(br2.value>>shift)].entry
			br1.bitsRead += uint8(v)
			br1.value <<= v & 63
			br2.bitsRead += uint8(v2)
			br2.value <<= v2 & 63
			buf[stream][off] = uint8(v >> 8)
			buf[stream2][off] = uint8(v2 >> 8)

			v = single[uint8(br1.value>>shift)].entry
			v2 = single[uint8(br2.value>>shift)].entry
			br1.bitsRead += uint8(v)
			br1.value <<= v & 63
			br2.bitsRead += uint8(v2)
			br2.value <<= v2 & 63
			buf[stream][off+1] = uint8(v >> 8)
			buf[stream2][off+1] = uint8(v2 >> 8)

			v = single[uint8(br1.value>>shift)].entry
			v2 = single[uint8(br2.value>>shift)].entry
			br1.bitsRead += uint8(v)
			br1.value <<= v & 63
			br2.bitsRead += uint8(v2)
			br2.value <<= v2 & 63
			buf[stream][off+2] = uint8(v >> 8)
			buf[stream2][off+2] = uint8(v2 >> 8)

			v = single[uint8(br1.value>>shift)].entry
			v2 = single[uint8(br2.value>>shift)].entry
			br1.bitsRead += uint8(v)
			br1.value <<= v & 63
			br2.bitsRead += uint8(v2)
			br2.value <<= v2 & 63
			buf[stream][off+3] = uint8(v >> 8)
			buf[stream2][off+3] = uint8(v2 >> 8)
		}

		off += 4

		if off == 0 {
			if bufoff > dstEvery {
				d.bufs.Put(buf)
				return nil, errors.New("corruption detected: stream overrun 1")
			}
			// There must at least be 3 buffers left.
			if len(out)-bufoff < dstEvery*3 {
				d.bufs.Put(buf)
				return nil, errors.New("corruption detected: stream overrun 2")
			}
			//copy(out, buf[0][:])
			//copy(out[dstEvery:], buf[1][:])
			//copy(out[dstEvery*2:], buf[2][:])
			*(*[bufoff]byte)(out) = buf[0]
			*(*[bufoff]byte)(out[dstEvery:]) = buf[1]
			*(*[bufoff]byte)(out[dstEvery*2:]) = buf[2]
			*(*[bufoff]byte)(out[dstEvery*3:]) = buf[3]
			out = out[bufoff:]
			decoded += bufoff * 4
		}
	}
	if off > 0 {
		ioff := int(off)
		if len(out) < dstEvery*3+ioff {
			d.bufs.Put(buf)
			return nil, errors.New("corruption detected: stream overrun 3")
		}
		copy(out, buf[0][:off])
		copy(out[dstEvery:], buf[1][:off])
		copy(out[dstEvery*2:], buf[2][:off])
		copy(out[dstEvery*3:], buf[3][:off])
		decoded += int(off) * 4
		out = out[off:]
	}

	// Decode remaining.
	// Decode remaining.
	remainBytes := dstEvery - (decoded / 4)
	for i := range br {
		offset := dstEvery * i
		endsAt := offset + remainBytes
		if endsAt > len(out) {
			endsAt = len(out)
		}
		br := &br[i]
		bitsLeft := br.remaining()
		for bitsLeft > 0 {
			if br.finished() {
				d.bufs.Put(buf)
				return nil, io.ErrUnexpectedEOF
			}
			if br.bitsRead >= 56 {
				if br.off >= 4 {
					v := br.in[br.off-4:]
					v = v[:4]
					low := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24)
					br.value |= uint64(low) << (br.bitsRead - 32)
					br.bitsRead -= 32
					br.off -= 4
				} else {
					for br.off > 0 {
						br.value |= uint64(br.in[br.off-1]) << (br.bitsRead - 8)
						br.bitsRead -= 8
						br.off--
					}
				}
			}
			// end inline...
			if offset >= endsAt {
				d.bufs.Put(buf)
				return nil, errors.New("corruption detected: stream overrun 4")
			}

			// Read value and increment offset.
			v := single[uint8(br.value>>shift)].entry
			nBits := uint8(v)
			br.advance(nBits)
			bitsLeft -= uint(nBits)
			out[offset] = uint8(v >> 8)
			offset++
		}
		if offset != endsAt {
			d.bufs.Put(buf)
			return nil, fmt.Errorf("corruption detected: short output block %d, end %d != %d", i, offset, endsAt)
		}
		decoded += offset - dstEvery*i
		err = br.close()
		if err != nil {
			d.bufs.Put(buf)
			return nil, err
		}
	}
	d.bufs.Put(buf)
	if dstSize != decoded {
		return nil, errors.New("corruption detected: short output block")
	}
	return dst, nil
}

// Decompress4X will decompress a 4X encoded stream.
// The length of the supplied input must match the end of a block exactly.
// The *capacity* of the dst slice must match the destination size of
// the uncompressed data exactly.
func (d *Decoder) decompress4X8bitExactly(dst, src []byte) ([]byte, error) {
	var br [4]bitReaderBytes
	start := 6
	for i := 0; i < 3; i++ {
		length := int(src[i*2]) | (int(src[i*2+1]) << 8)
		if start+length >= len(src) {
			return nil, errors.New("truncated input (or invalid offset)")
		}
		err := br[i].init(src[start : start+length])
		if err != nil {
			return nil, err
		}
		start += length
	}
	err := br[3].init(src[start:])
	if err != nil {
		return nil, err
	}

	// destination, offset to match first output
	dstSize := cap(dst)
	dst = dst[:dstSize]
	out := dst
	dstEvery := (dstSize + 3) / 4

	const shift = 56
	const tlSize = 1 << 8
	single := d.dt.single[:tlSize]

	// Use temp table to avoid bound checks/append penalty.
	buf := d.buffer()
	var off uint8
	var decoded int

	// Decode 4 values from each decoder/loop.
	const bufoff = 256
	for {
		if br[0].off < 4 || br[1].off < 4 || br[2].off < 4 || br[3].off < 4 {
			break
		}

		{
			// Interleave 2 decodes.
			const stream = 0
			const stream2 = 1
			br1 := &br[stream]
			br2 := &br[stream2]
			br1.fillFast()
			br2.fillFast()

			v := single[uint8(br1.value>>shift)].entry
			v2 := single[uint8(br2.value>>shift)].entry
			br1.bitsRead += uint8(v)
			br1.value <<= v & 63
			br2.bitsRead += uint8(v2)
			br2.value <<= v2 & 63
			buf[stream][off] = uint8(v >> 8)
			buf[stream2][off] = uint8(v2 >> 8)

			v = single[uint8(br1.value>>shift)].entry
			v2 = single[uint8(br2.value>>shift)].entry
			br1.bitsRead += uint8(v)
			br1.value <<= v & 63
			br2.bitsRead += uint8(v2)
			br2.value <<= v2 & 63
			buf[stream][off+1] = uint8(v >> 8)
			buf[stream2][off+1] = uint8(v2 >> 8)

			v = single[uint8(br1.value>>shift)].entry
			v2 = single[uint8(br2.value>>shift)].entry
			br1.bitsRead += uint8(v)
			br1.value <<= v & 63
			br2.bitsRead += uint8(v2)
			br2.value <<= v2 & 63
			buf[stream][off+2] = uint8(v >> 8)
			buf[stream2][off+2] = uint8(v2 >> 8)

			v = single[uint8(br1.value>>shift)].entry
			v2 = single[uint8(br2.value>>shift)].entry
			br1.bitsRead += uint8(v)
			br1.value <<= v & 63
			br2.bitsRead += uint8(v2)
			br2.value <<= v2 & 63
			buf[stream][off+3] = uint8(v >> 8)
			buf[stream2][off+3] = uint8(v2 >> 8)
		}

		{
			const stream = 2
			const stream2 = 3
			br1 := &br[stream]
			br2 := &br[stream2]
			br1.fillFast()
			br2.fillFast()

			v := single[uint8(br1.value>>shift)].entry
			v2 := single[uint8(br2.value>>shift)].entry
			br1.bitsRead += uint8(v)
			br1.value <<= v & 63
			br2.bitsRead += uint8(v2)
			br2.value <<= v2 & 63
			buf[stream][off] = uint8(v >> 8)
			buf[stream2][off] = uint8(v2 >> 8)

			v = single[uint8(br1.value>>shift)].entry
			v2 = single[uint8(br2.value>>shift)].entry
			br1.bitsRead += uint8(v)
			br1.value <<= v & 63
			br2.bitsRead += uint8(v2)
			br2.value <<= v2 & 63
			buf[stream][off+1] = uint8(v >> 8)
			buf[stream2][off+1] = uint8(v2 >> 8)

			v = single[uint8(br1.value>>shift)].entry
			v2 = single[uint8(br2.value>>shift)].entry
			br1.bitsRead += uint8(v)
			br1.value <<= v & 63
			br2.bitsRead += uint8(v2)
			br2.value <<= v2 & 63
			buf[stream][off+2] = uint8(v >> 8)
			buf[stream2][off+2] = uint8(v2 >> 8)

			v = single[uint8(br1.value>>shift)].entry
			v2 = single[uint8(br2.value>>shift)].entry
			br1.bitsRead += uint8(v)
			br1.value <<= v & 63
			br2.bitsRead += uint8(v2)
			br2.value <<= v2 & 63
			buf[stream][off+3] = uint8(v >> 8)
			buf[stream2][off+3] = uint8(v2 >> 8)
		}

		off += 4

		if off == 0 {
			if bufoff > dstEvery {
				d.bufs.Put(buf)
				return nil, errors.New("corruption detected: stream overrun 1")
			}
			// There must at least be 3 buffers left.
			if len(out)-bufoff < dstEvery*3 {
				d.bufs.Put(buf)
				return nil, errors.New("corruption detected: stream overrun 2")
			}

			//copy(out, buf[0][:])
			//copy(out[dstEvery:], buf[1][:])
			//copy(out[dstEvery*2:], buf[2][:])
			// copy(out[dstEvery*3:], buf[3][:])
			*(*[bufoff]byte)(out) = buf[0]
			*(*[bufoff]byte)(out[dstEvery:]) = buf[1]
			*(*[bufoff]byte)(out[dstEvery*2:]) = buf[2]
			*(*[bufoff]byte)(out[dstEvery*3:]) = buf[3]
			out = out[bufoff:]
			decoded += bufoff * 4
		}
	}
	if off > 0 {
		ioff := int(off)
		if len(out) < dstEvery*3+ioff {
			return nil, errors.New("corruption detected: stream overrun 3")
		}
		copy(out, buf[0][:off])
		copy(out[dstEvery:], buf[1][:off])
		copy(out[dstEvery*2:], buf[2][:off])
		copy(out[dstEvery*3:], buf[3][:off])
		decoded += int(off) * 4
		out = out[off:]
	}

	// Decode remaining.
	remainBytes := dstEvery - (decoded / 4)
	for i := range br {
		offset := dstEvery * i
		endsAt := offset + remainBytes
		if endsAt > len(out) {
			endsAt = len(out)
		}
		br := &br[i]
		bitsLeft := br.remaining()
		for bitsLeft > 0 {
			if br.finished() {
				d.bufs.Put(buf)
				return nil, io.ErrUnexpectedEOF
			}
			if br.bitsRead >= 56 {
				if br.off >= 4 {
					v := br.in[br.off-4:]
					v = v[:4]
					low := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24)
					br.value |= uint64(low) << (br.bitsRead - 32)
					br.bitsRead -= 32
					br.off -= 4
				} else {
					for br.off > 0 {
						br.value |= uint64(br.in[br.off-1]) << (br.bitsRead - 8)
						br.bitsRead -= 8
						br.off--
					}
				}
			}
			// end inline...
			if offset >= endsAt {
				d.bufs.Put(buf)
				return nil, errors.New("corruption detected: stream overrun 4")
			}

			// Read value and increment offset.
			v := single[br.peekByteFast()].entry
			nBits := uint8(v)
			br.advance(nBits)
			bitsLeft -= uint(nBits)
			out[offset] = uint8(v >> 8)
			offset++
		}
		if offset != endsAt {
			d.bufs.Put(buf)
			return nil, fmt.Errorf("corruption detected: short output block %d, end %d != %d", i, offset, endsAt)
		}

		decoded += offset - dstEvery*i
		err = br.close()
		if err != nil {
			d.bufs.Put(buf)
			return nil, err
		}
	}
	d.bufs.Put(buf)
	if dstSize != decoded {
		return nil, errors.New("corruption detected: short output block")
	}
	return dst, nil
}

// matches will compare a decoding table to a coding table.
// Errors are written to the writer.
// Nothing will be written if table is ok.
func (s *Scratch) matches(ct cTable, w io.Writer) {
	if s == nil || len(s.dt.single) == 0 {
		return
	}
	dt := s.dt.single[:1<<s.actualTableLog]
	tablelog := s.actualTableLog
	ok := 0
	broken := 0
	for sym, enc := range ct {
		errs := 0
		broken++
		if enc.nBits == 0 {
			for _, dec := range dt {
				if uint8(dec.entry>>8) == byte(sym) {
					fmt.Fprintf(w, "symbol %x has decoder, but no encoder\n", sym)
					errs++
					break
				}
			}
			if errs == 0 {
				broken--
			}
			continue
		}
		// Unused bits in input
		ub := tablelog - enc.nBits
		top := enc.val << ub
		// decoder looks at top bits.
		dec := dt[top]
		if uint8(dec.entry) != enc.nBits {
			fmt.Fprintf(w, "symbol 0x%x bit size mismatch (enc: %d, dec:%d).\n", sym, enc.nBits, uint8(dec.entry))
			errs++
		}
		if uint8(dec.entry>>8) != uint8(sym) {
			fmt.Fprintf(w, "symbol 0x%x decoder output mismatch (enc: %d, dec:%d).\n", sym, sym, uint8(dec.entry>>8))
			errs++
		}
		if errs > 0 {
			fmt.Fprintf(w, "%d errros in base, stopping\n", errs)
			continue
		}
		// Ensure that all combinations are covered.
		for i := uint16(0); i < (1 << ub); i++ {
			vval := top | i
			dec := dt[vval]
			if uint8(dec.entry) != enc.nBits {
				fmt.Fprintf(w, "symbol 0x%x bit size mismatch (enc: %d, dec:%d).\n", vval, enc.nBits, uint8(dec.entry))
				errs++
			}
			if uint8(dec.entry>>8) != uint8(sym) {
				fmt.Fprintf(w, "symbol 0x%x decoder output mismatch (enc: %d, dec:%d).\n", vval, sym, uint8(dec.entry>>8))
				errs++
			}
			if errs > 20 {
				fmt.Fprintf(w, "%d errros, stopping\n", errs)
				break
			}
		}
		if errs == 0 {
			ok++
			broken--
		}
	}
	if broken > 0 {
		fmt.Fprintf(w, "%d broken, %d ok\n", broken, ok)
	}
}
07070100000860000081A4000000000000000000000001645E367C000016A8000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/huff0/decompress_amd64.go    //go:build amd64 && !appengine && !noasm && gc
// +build amd64,!appengine,!noasm,gc

// This file contains the specialisation of Decoder.Decompress4X
// and Decoder.Decompress1X that use an asm implementation of thir main loops.
package huff0

import (
	"errors"
	"fmt"

	"github.com/klauspost/compress/internal/cpuinfo"
)

// decompress4x_main_loop_x86 is an x86 assembler implementation
// of Decompress4X when tablelog > 8.
//
//go:noescape
func decompress4x_main_loop_amd64(ctx *decompress4xContext)

// decompress4x_8b_loop_x86 is an x86 assembler implementation
// of Decompress4X when tablelog <= 8 which decodes 4 entries
// per loop.
//
//go:noescape
func decompress4x_8b_main_loop_amd64(ctx *decompress4xContext)

// fallback8BitSize is the size where using Go version is faster.
const fallback8BitSize = 800

type decompress4xContext struct {
	pbr      *[4]bitReaderShifted
	peekBits uint8
	out      *byte
	dstEvery int
	tbl      *dEntrySingle
	decoded  int
	limit    *byte
}

// Decompress4X will decompress a 4X encoded stream.
// The length of the supplied input must match the end of a block exactly.
// The *capacity* of the dst slice must match the destination size of
// the uncompressed data exactly.
func (d *Decoder) Decompress4X(dst, src []byte) ([]byte, error) {
	if len(d.dt.single) == 0 {
		return nil, errors.New("no table loaded")
	}
	if len(src) < 6+(4*1) {
		return nil, errors.New("input too small")
	}

	use8BitTables := d.actualTableLog <= 8
	if cap(dst) < fallback8BitSize && use8BitTables {
		return d.decompress4X8bit(dst, src)
	}

	var br [4]bitReaderShifted
	// Decode "jump table"
	start := 6
	for i := 0; i < 3; i++ {
		length := int(src[i*2]) | (int(src[i*2+1]) << 8)
		if start+length >= len(src) {
			return nil, errors.New("truncated input (or invalid offset)")
		}
		err := br[i].init(src[start : start+length])
		if err != nil {
			return nil, err
		}
		start += length
	}
	err := br[3].init(src[start:])
	if err != nil {
		return nil, err
	}

	// destination, offset to match first output
	dstSize := cap(dst)
	dst = dst[:dstSize]
	out := dst
	dstEvery := (dstSize + 3) / 4

	const tlSize = 1 << tableLogMax
	const tlMask = tlSize - 1
	single := d.dt.single[:tlSize]

	var decoded int

	if len(out) > 4*4 && !(br[0].off < 4 || br[1].off < 4 || br[2].off < 4 || br[3].off < 4) {
		ctx := decompress4xContext{
			pbr:      &br,
			peekBits: uint8((64 - d.actualTableLog) & 63), // see: bitReaderShifted.peekBitsFast()
			out:      &out[0],
			dstEvery: dstEvery,
			tbl:      &single[0],
			limit:    &out[dstEvery-4], // Always stop decoding when first buffer gets here to avoid writing OOB on last.
		}
		if use8BitTables {
			decompress4x_8b_main_loop_amd64(&ctx)
		} else {
			decompress4x_main_loop_amd64(&ctx)
		}

		decoded = ctx.decoded
		out = out[decoded/4:]
	}

	// Decode remaining.
	remainBytes := dstEvery - (decoded / 4)
	for i := range br {
		offset := dstEvery * i
		endsAt := offset + remainBytes
		if endsAt > len(out) {
			endsAt = len(out)
		}
		br := &br[i]
		bitsLeft := br.remaining()
		for bitsLeft > 0 {
			br.fill()
			if offset >= endsAt {
				return nil, errors.New("corruption detected: stream overrun 4")
			}

			// Read value and increment offset.
			val := br.peekBitsFast(d.actualTableLog)
			v := single[val&tlMask].entry
			nBits := uint8(v)
			br.advance(nBits)
			bitsLeft -= uint(nBits)
			out[offset] = uint8(v >> 8)
			offset++
		}
		if offset != endsAt {
			return nil, fmt.Errorf("corruption detected: short output block %d, end %d != %d", i, offset, endsAt)
		}
		decoded += offset - dstEvery*i
		err = br.close()
		if err != nil {
			return nil, err
		}
	}
	if dstSize != decoded {
		return nil, errors.New("corruption detected: short output block")
	}
	return dst, nil
}

// decompress4x_main_loop_x86 is an x86 assembler implementation
// of Decompress1X when tablelog > 8.
//
//go:noescape
func decompress1x_main_loop_amd64(ctx *decompress1xContext)

// decompress4x_main_loop_x86 is an x86 with BMI2 assembler implementation
// of Decompress1X when tablelog > 8.
//
//go:noescape
func decompress1x_main_loop_bmi2(ctx *decompress1xContext)

type decompress1xContext struct {
	pbr      *bitReaderShifted
	peekBits uint8
	out      *byte
	outCap   int
	tbl      *dEntrySingle
	decoded  int
}

// Error reported by asm implementations
const error_max_decoded_size_exeeded = -1

// Decompress1X will decompress a 1X encoded stream.
// The cap of the output buffer will be the maximum decompressed size.
// The length of the supplied input must match the end of a block exactly.
func (d *Decoder) Decompress1X(dst, src []byte) ([]byte, error) {
	if len(d.dt.single) == 0 {
		return nil, errors.New("no table loaded")
	}
	var br bitReaderShifted
	err := br.init(src)
	if err != nil {
		return dst, err
	}
	maxDecodedSize := cap(dst)
	dst = dst[:maxDecodedSize]

	const tlSize = 1 << tableLogMax
	const tlMask = tlSize - 1

	if maxDecodedSize >= 4 {
		ctx := decompress1xContext{
			pbr:      &br,
			out:      &dst[0],
			outCap:   maxDecodedSize,
			peekBits: uint8((64 - d.actualTableLog) & 63), // see: bitReaderShifted.peekBitsFast()
			tbl:      &d.dt.single[0],
		}

		if cpuinfo.HasBMI2() {
			decompress1x_main_loop_bmi2(&ctx)
		} else {
			decompress1x_main_loop_amd64(&ctx)
		}
		if ctx.decoded == error_max_decoded_size_exeeded {
			return nil, ErrMaxDecodedSizeExceeded
		}

		dst = dst[:ctx.decoded]
	}

	// br < 8, so uint8 is fine
	bitsLeft := uint8(br.off)*8 + 64 - br.bitsRead
	for bitsLeft > 0 {
		br.fill()
		if len(dst) >= maxDecodedSize {
			br.close()
			return nil, ErrMaxDecodedSizeExceeded
		}
		v := d.dt.single[br.peekBitsFast(d.actualTableLog)&tlMask]
		nBits := uint8(v.entry)
		br.advance(nBits)
		bitsLeft -= nBits
		dst = append(dst, uint8(v.entry>>8))
	}
	return dst, br.close()
}
07070100000861000081A4000000000000000000000001645E367C00003BE2000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/huff0/decompress_amd64.s // Code generated by command: go run gen.go -out ../decompress_amd64.s -pkg=huff0. DO NOT EDIT.

//go:build amd64 && !appengine && !noasm && gc

// func decompress4x_main_loop_amd64(ctx *decompress4xContext)
TEXT ·decompress4x_main_loop_amd64(SB), $0-8
	// Preload values
	MOVQ    ctx+0(FP), AX
	MOVBQZX 8(AX), DI
	MOVQ    16(AX), BX
	MOVQ    48(AX), SI
	MOVQ    24(AX), R8
	MOVQ    32(AX), R9
	MOVQ    (AX), R10

	// Main loop
main_loop:
	XORL  DX, DX
	CMPQ  BX, SI
	SETGE DL

	// br0.fillFast32()
	MOVQ    32(R10), R11
	MOVBQZX 40(R10), R12
	CMPQ    R12, $0x20
	JBE     skip_fill0
	MOVQ    24(R10), AX
	SUBQ    $0x20, R12
	SUBQ    $0x04, AX
	MOVQ    (R10), R13

	// b.value |= uint64(low) << (b.bitsRead & 63)
	MOVL (AX)(R13*1), R13
	MOVQ R12, CX
	SHLQ CL, R13
	MOVQ AX, 24(R10)
	ORQ  R13, R11

	// exhausted += (br0.off < 4)
	CMPQ AX, $0x04
	ADCB $+0, DL

skip_fill0:
	// val0 := br0.peekTopBits(peekBits)
	MOVQ R11, R13
	MOVQ DI, CX
	SHRQ CL, R13

	// v0 := table[val0&mask]
	MOVW (R9)(R13*2), CX

	// br0.advance(uint8(v0.entry)
	MOVB CH, AL
	SHLQ CL, R11
	ADDB CL, R12

	// val1 := br0.peekTopBits(peekBits)
	MOVQ DI, CX
	MOVQ R11, R13
	SHRQ CL, R13

	// v1 := table[val1&mask]
	MOVW (R9)(R13*2), CX

	// br0.advance(uint8(v1.entry))
	MOVB CH, AH
	SHLQ CL, R11
	ADDB CL, R12

	// these two writes get coalesced
	// out[id * dstEvery + 0] = uint8(v0.entry >> 8)
	// out[id * dstEvery + 1] = uint8(v1.entry >> 8)
	MOVW AX, (BX)

	// update the bitreader structure
	MOVQ R11, 32(R10)
	MOVB R12, 40(R10)

	// br1.fillFast32()
	MOVQ    80(R10), R11
	MOVBQZX 88(R10), R12
	CMPQ    R12, $0x20
	JBE     skip_fill1
	MOVQ    72(R10), AX
	SUBQ    $0x20, R12
	SUBQ    $0x04, AX
	MOVQ    48(R10), R13

	// b.value |= uint64(low) << (b.bitsRead & 63)
	MOVL (AX)(R13*1), R13
	MOVQ R12, CX
	SHLQ CL, R13
	MOVQ AX, 72(R10)
	ORQ  R13, R11

	// exhausted += (br1.off < 4)
	CMPQ AX, $0x04
	ADCB $+0, DL

skip_fill1:
	// val0 := br1.peekTopBits(peekBits)
	MOVQ R11, R13
	MOVQ DI, CX
	SHRQ CL, R13

	// v0 := table[val0&mask]
	MOVW (R9)(R13*2), CX

	// br1.advance(uint8(v0.entry)
	MOVB CH, AL
	SHLQ CL, R11
	ADDB CL, R12

	// val1 := br1.peekTopBits(peekBits)
	MOVQ DI, CX
	MOVQ R11, R13
	SHRQ CL, R13

	// v1 := table[val1&mask]
	MOVW (R9)(R13*2), CX

	// br1.advance(uint8(v1.entry))
	MOVB CH, AH
	SHLQ CL, R11
	ADDB CL, R12

	// these two writes get coalesced
	// out[id * dstEvery + 0] = uint8(v0.entry >> 8)
	// out[id * dstEvery + 1] = uint8(v1.entry >> 8)
	MOVW AX, (BX)(R8*1)

	// update the bitreader structure
	MOVQ R11, 80(R10)
	MOVB R12, 88(R10)

	// br2.fillFast32()
	MOVQ    128(R10), R11
	MOVBQZX 136(R10), R12
	CMPQ    R12, $0x20
	JBE     skip_fill2
	MOVQ    120(R10), AX
	SUBQ    $0x20, R12
	SUBQ    $0x04, AX
	MOVQ    96(R10), R13

	// b.value |= uint64(low) << (b.bitsRead & 63)
	MOVL (AX)(R13*1), R13
	MOVQ R12, CX
	SHLQ CL, R13
	MOVQ AX, 120(R10)
	ORQ  R13, R11

	// exhausted += (br2.off < 4)
	CMPQ AX, $0x04
	ADCB $+0, DL

skip_fill2:
	// val0 := br2.peekTopBits(peekBits)
	MOVQ R11, R13
	MOVQ DI, CX
	SHRQ CL, R13

	// v0 := table[val0&mask]
	MOVW (R9)(R13*2), CX

	// br2.advance(uint8(v0.entry)
	MOVB CH, AL
	SHLQ CL, R11
	ADDB CL, R12

	// val1 := br2.peekTopBits(peekBits)
	MOVQ DI, CX
	MOVQ R11, R13
	SHRQ CL, R13

	// v1 := table[val1&mask]
	MOVW (R9)(R13*2), CX

	// br2.advance(uint8(v1.entry))
	MOVB CH, AH
	SHLQ CL, R11
	ADDB CL, R12

	// these two writes get coalesced
	// out[id * dstEvery + 0] = uint8(v0.entry >> 8)
	// out[id * dstEvery + 1] = uint8(v1.entry >> 8)
	MOVW AX, (BX)(R8*2)

	// update the bitreader structure
	MOVQ R11, 128(R10)
	MOVB R12, 136(R10)

	// br3.fillFast32()
	MOVQ    176(R10), R11
	MOVBQZX 184(R10), R12
	CMPQ    R12, $0x20
	JBE     skip_fill3
	MOVQ    168(R10), AX
	SUBQ    $0x20, R12
	SUBQ    $0x04, AX
	MOVQ    144(R10), R13

	// b.value |= uint64(low) << (b.bitsRead & 63)
	MOVL (AX)(R13*1), R13
	MOVQ R12, CX
	SHLQ CL, R13
	MOVQ AX, 168(R10)
	ORQ  R13, R11

	// exhausted += (br3.off < 4)
	CMPQ AX, $0x04
	ADCB $+0, DL

skip_fill3:
	// val0 := br3.peekTopBits(peekBits)
	MOVQ R11, R13
	MOVQ DI, CX
	SHRQ CL, R13

	// v0 := table[val0&mask]
	MOVW (R9)(R13*2), CX

	// br3.advance(uint8(v0.entry)
	MOVB CH, AL
	SHLQ CL, R11
	ADDB CL, R12

	// val1 := br3.peekTopBits(peekBits)
	MOVQ DI, CX
	MOVQ R11, R13
	SHRQ CL, R13

	// v1 := table[val1&mask]
	MOVW (R9)(R13*2), CX

	// br3.advance(uint8(v1.entry))
	MOVB CH, AH
	SHLQ CL, R11
	ADDB CL, R12

	// these two writes get coalesced
	// out[id * dstEvery + 0] = uint8(v0.entry >> 8)
	// out[id * dstEvery + 1] = uint8(v1.entry >> 8)
	LEAQ (R8)(R8*2), CX
	MOVW AX, (BX)(CX*1)

	// update the bitreader structure
	MOVQ  R11, 176(R10)
	MOVB  R12, 184(R10)
	ADDQ  $0x02, BX
	TESTB DL, DL
	JZ    main_loop
	MOVQ  ctx+0(FP), AX
	SUBQ  16(AX), BX
	SHLQ  $0x02, BX
	MOVQ  BX, 40(AX)
	RET

// func decompress4x_8b_main_loop_amd64(ctx *decompress4xContext)
TEXT ·decompress4x_8b_main_loop_amd64(SB), $0-8
	// Preload values
	MOVQ    ctx+0(FP), CX
	MOVBQZX 8(CX), DI
	MOVQ    16(CX), BX
	MOVQ    48(CX), SI
	MOVQ    24(CX), R8
	MOVQ    32(CX), R9
	MOVQ    (CX), R10

	// Main loop
main_loop:
	XORL  DX, DX
	CMPQ  BX, SI
	SETGE DL

	// br0.fillFast32()
	MOVQ    32(R10), R11
	MOVBQZX 40(R10), R12
	CMPQ    R12, $0x20
	JBE     skip_fill0
	MOVQ    24(R10), R13
	SUBQ    $0x20, R12
	SUBQ    $0x04, R13
	MOVQ    (R10), R14

	// b.value |= uint64(low) << (b.bitsRead & 63)
	MOVL (R13)(R14*1), R14
	MOVQ R12, CX
	SHLQ CL, R14
	MOVQ R13, 24(R10)
	ORQ  R14, R11

	// exhausted += (br0.off < 4)
	CMPQ R13, $0x04
	ADCB $+0, DL

skip_fill0:
	// val0 := br0.peekTopBits(peekBits)
	MOVQ R11, R13
	MOVQ DI, CX
	SHRQ CL, R13

	// v0 := table[val0&mask]
	MOVW (R9)(R13*2), CX

	// br0.advance(uint8(v0.entry)
	MOVB CH, AL
	SHLQ CL, R11
	ADDB CL, R12

	// val1 := br0.peekTopBits(peekBits)
	MOVQ R11, R13
	MOVQ DI, CX
	SHRQ CL, R13

	// v1 := table[val0&mask]
	MOVW (R9)(R13*2), CX

	// br0.advance(uint8(v1.entry)
	MOVB   CH, AH
	SHLQ   CL, R11
	ADDB   CL, R12
	BSWAPL AX

	// val2 := br0.peekTopBits(peekBits)
	MOVQ R11, R13
	MOVQ DI, CX
	SHRQ CL, R13

	// v2 := table[val0&mask]
	MOVW (R9)(R13*2), CX

	// br0.advance(uint8(v2.entry)
	MOVB CH, AH
	SHLQ CL, R11
	ADDB CL, R12

	// val3 := br0.peekTopBits(peekBits)
	MOVQ R11, R13
	MOVQ DI, CX
	SHRQ CL, R13

	// v3 := table[val0&mask]
	MOVW (R9)(R13*2), CX

	// br0.advance(uint8(v3.entry)
	MOVB   CH, AL
	SHLQ   CL, R11
	ADDB   CL, R12
	BSWAPL AX

	// these four writes get coalesced
	// out[id * dstEvery + 0] = uint8(v0.entry >> 8)
	// out[id * dstEvery + 1] = uint8(v1.entry >> 8)
	// out[id * dstEvery + 3] = uint8(v2.entry >> 8)
	// out[id * dstEvery + 4] = uint8(v3.entry >> 8)
	MOVL AX, (BX)

	// update the bitreader structure
	MOVQ R11, 32(R10)
	MOVB R12, 40(R10)

	// br1.fillFast32()
	MOVQ    80(R10), R11
	MOVBQZX 88(R10), R12
	CMPQ    R12, $0x20
	JBE     skip_fill1
	MOVQ    72(R10), R13
	SUBQ    $0x20, R12
	SUBQ    $0x04, R13
	MOVQ    48(R10), R14

	// b.value |= uint64(low) << (b.bitsRead & 63)
	MOVL (R13)(R14*1), R14
	MOVQ R12, CX
	SHLQ CL, R14
	MOVQ R13, 72(R10)
	ORQ  R14, R11

	// exhausted += (br1.off < 4)
	CMPQ R13, $0x04
	ADCB $+0, DL

skip_fill1:
	// val0 := br1.peekTopBits(peekBits)
	MOVQ R11, R13
	MOVQ DI, CX
	SHRQ CL, R13

	// v0 := table[val0&mask]
	MOVW (R9)(R13*2), CX

	// br1.advance(uint8(v0.entry)
	MOVB CH, AL
	SHLQ CL, R11
	ADDB CL, R12

	// val1 := br1.peekTopBits(peekBits)
	MOVQ R11, R13
	MOVQ DI, CX
	SHRQ CL, R13

	// v1 := table[val0&mask]
	MOVW (R9)(R13*2), CX

	// br1.advance(uint8(v1.entry)
	MOVB   CH, AH
	SHLQ   CL, R11
	ADDB   CL, R12
	BSWAPL AX

	// val2 := br1.peekTopBits(peekBits)
	MOVQ R11, R13
	MOVQ DI, CX
	SHRQ CL, R13

	// v2 := table[val0&mask]
	MOVW (R9)(R13*2), CX

	// br1.advance(uint8(v2.entry)
	MOVB CH, AH
	SHLQ CL, R11
	ADDB CL, R12

	// val3 := br1.peekTopBits(peekBits)
	MOVQ R11, R13
	MOVQ DI, CX
	SHRQ CL, R13

	// v3 := table[val0&mask]
	MOVW (R9)(R13*2), CX

	// br1.advance(uint8(v3.entry)
	MOVB   CH, AL
	SHLQ   CL, R11
	ADDB   CL, R12
	BSWAPL AX

	// these four writes get coalesced
	// out[id * dstEvery + 0] = uint8(v0.entry >> 8)
	// out[id * dstEvery + 1] = uint8(v1.entry >> 8)
	// out[id * dstEvery + 3] = uint8(v2.entry >> 8)
	// out[id * dstEvery + 4] = uint8(v3.entry >> 8)
	MOVL AX, (BX)(R8*1)

	// update the bitreader structure
	MOVQ R11, 80(R10)
	MOVB R12, 88(R10)

	// br2.fillFast32()
	MOVQ    128(R10), R11
	MOVBQZX 136(R10), R12
	CMPQ    R12, $0x20
	JBE     skip_fill2
	MOVQ    120(R10), R13
	SUBQ    $0x20, R12
	SUBQ    $0x04, R13
	MOVQ    96(R10), R14

	// b.value |= uint64(low) << (b.bitsRead & 63)
	MOVL (R13)(R14*1), R14
	MOVQ R12, CX
	SHLQ CL, R14
	MOVQ R13, 120(R10)
	ORQ  R14, R11

	// exhausted += (br2.off < 4)
	CMPQ R13, $0x04
	ADCB $+0, DL

skip_fill2:
	// val0 := br2.peekTopBits(peekBits)
	MOVQ R11, R13
	MOVQ DI, CX
	SHRQ CL, R13

	// v0 := table[val0&mask]
	MOVW (R9)(R13*2), CX

	// br2.advance(uint8(v0.entry)
	MOVB CH, AL
	SHLQ CL, R11
	ADDB CL, R12

	// val1 := br2.peekTopBits(peekBits)
	MOVQ R11, R13
	MOVQ DI, CX
	SHRQ CL, R13

	// v1 := table[val0&mask]
	MOVW (R9)(R13*2), CX

	// br2.advance(uint8(v1.entry)
	MOVB   CH, AH
	SHLQ   CL, R11
	ADDB   CL, R12
	BSWAPL AX

	// val2 := br2.peekTopBits(peekBits)
	MOVQ R11, R13
	MOVQ DI, CX
	SHRQ CL, R13

	// v2 := table[val0&mask]
	MOVW (R9)(R13*2), CX

	// br2.advance(uint8(v2.entry)
	MOVB CH, AH
	SHLQ CL, R11
	ADDB CL, R12

	// val3 := br2.peekTopBits(peekBits)
	MOVQ R11, R13
	MOVQ DI, CX
	SHRQ CL, R13

	// v3 := table[val0&mask]
	MOVW (R9)(R13*2), CX

	// br2.advance(uint8(v3.entry)
	MOVB   CH, AL
	SHLQ   CL, R11
	ADDB   CL, R12
	BSWAPL AX

	// these four writes get coalesced
	// out[id * dstEvery + 0] = uint8(v0.entry >> 8)
	// out[id * dstEvery + 1] = uint8(v1.entry >> 8)
	// out[id * dstEvery + 3] = uint8(v2.entry >> 8)
	// out[id * dstEvery + 4] = uint8(v3.entry >> 8)
	MOVL AX, (BX)(R8*2)

	// update the bitreader structure
	MOVQ R11, 128(R10)
	MOVB R12, 136(R10)

	// br3.fillFast32()
	MOVQ    176(R10), R11
	MOVBQZX 184(R10), R12
	CMPQ    R12, $0x20
	JBE     skip_fill3
	MOVQ    168(R10), R13
	SUBQ    $0x20, R12
	SUBQ    $0x04, R13
	MOVQ    144(R10), R14

	// b.value |= uint64(low) << (b.bitsRead & 63)
	MOVL (R13)(R14*1), R14
	MOVQ R12, CX
	SHLQ CL, R14
	MOVQ R13, 168(R10)
	ORQ  R14, R11

	// exhausted += (br3.off < 4)
	CMPQ R13, $0x04
	ADCB $+0, DL

skip_fill3:
	// val0 := br3.peekTopBits(peekBits)
	MOVQ R11, R13
	MOVQ DI, CX
	SHRQ CL, R13

	// v0 := table[val0&mask]
	MOVW (R9)(R13*2), CX

	// br3.advance(uint8(v0.entry)
	MOVB CH, AL
	SHLQ CL, R11
	ADDB CL, R12

	// val1 := br3.peekTopBits(peekBits)
	MOVQ R11, R13
	MOVQ DI, CX
	SHRQ CL, R13

	// v1 := table[val0&mask]
	MOVW (R9)(R13*2), CX

	// br3.advance(uint8(v1.entry)
	MOVB   CH, AH
	SHLQ   CL, R11
	ADDB   CL, R12
	BSWAPL AX

	// val2 := br3.peekTopBits(peekBits)
	MOVQ R11, R13
	MOVQ DI, CX
	SHRQ CL, R13

	// v2 := table[val0&mask]
	MOVW (R9)(R13*2), CX

	// br3.advance(uint8(v2.entry)
	MOVB CH, AH
	SHLQ CL, R11
	ADDB CL, R12

	// val3 := br3.peekTopBits(peekBits)
	MOVQ R11, R13
	MOVQ DI, CX
	SHRQ CL, R13

	// v3 := table[val0&mask]
	MOVW (R9)(R13*2), CX

	// br3.advance(uint8(v3.entry)
	MOVB   CH, AL
	SHLQ   CL, R11
	ADDB   CL, R12
	BSWAPL AX

	// these four writes get coalesced
	// out[id * dstEvery + 0] = uint8(v0.entry >> 8)
	// out[id * dstEvery + 1] = uint8(v1.entry >> 8)
	// out[id * dstEvery + 3] = uint8(v2.entry >> 8)
	// out[id * dstEvery + 4] = uint8(v3.entry >> 8)
	LEAQ (R8)(R8*2), CX
	MOVL AX, (BX)(CX*1)

	// update the bitreader structure
	MOVQ  R11, 176(R10)
	MOVB  R12, 184(R10)
	ADDQ  $0x04, BX
	TESTB DL, DL
	JZ    main_loop
	MOVQ  ctx+0(FP), AX
	SUBQ  16(AX), BX
	SHLQ  $0x02, BX
	MOVQ  BX, 40(AX)
	RET

// func decompress1x_main_loop_amd64(ctx *decompress1xContext)
TEXT ·decompress1x_main_loop_amd64(SB), $0-8
	MOVQ    ctx+0(FP), CX
	MOVQ    16(CX), DX
	MOVQ    24(CX), BX
	CMPQ    BX, $0x04
	JB      error_max_decoded_size_exceeded
	LEAQ    (DX)(BX*1), BX
	MOVQ    (CX), SI
	MOVQ    (SI), R8
	MOVQ    24(SI), R9
	MOVQ    32(SI), R10
	MOVBQZX 40(SI), R11
	MOVQ    32(CX), SI
	MOVBQZX 8(CX), DI
	JMP     loop_condition

main_loop:
	// Check if we have room for 4 bytes in the output buffer
	LEAQ 4(DX), CX
	CMPQ CX, BX
	JGE  error_max_decoded_size_exceeded

	// Decode 4 values
	CMPQ R11, $0x20
	JL   bitReader_fillFast_1_end
	SUBQ $0x20, R11
	SUBQ $0x04, R9
	MOVL (R8)(R9*1), R12
	MOVQ R11, CX
	SHLQ CL, R12
	ORQ  R12, R10

bitReader_fillFast_1_end:
	MOVQ    DI, CX
	MOVQ    R10, R12
	SHRQ    CL, R12
	MOVW    (SI)(R12*2), CX
	MOVB    CH, AL
	MOVBQZX CL, CX
	ADDQ    CX, R11
	SHLQ    CL, R10
	MOVQ    DI, CX
	MOVQ    R10, R12
	SHRQ    CL, R12
	MOVW    (SI)(R12*2), CX
	MOVB    CH, AH
	MOVBQZX CL, CX
	ADDQ    CX, R11
	SHLQ    CL, R10
	BSWAPL  AX
	CMPQ    R11, $0x20
	JL      bitReader_fillFast_2_end
	SUBQ    $0x20, R11
	SUBQ    $0x04, R9
	MOVL    (R8)(R9*1), R12
	MOVQ    R11, CX
	SHLQ    CL, R12
	ORQ     R12, R10

bitReader_fillFast_2_end:
	MOVQ    DI, CX
	MOVQ    R10, R12
	SHRQ    CL, R12
	MOVW    (SI)(R12*2), CX
	MOVB    CH, AH
	MOVBQZX CL, CX
	ADDQ    CX, R11
	SHLQ    CL, R10
	MOVQ    DI, CX
	MOVQ    R10, R12
	SHRQ    CL, R12
	MOVW    (SI)(R12*2), CX
	MOVB    CH, AL
	MOVBQZX CL, CX
	ADDQ    CX, R11
	SHLQ    CL, R10
	BSWAPL  AX

	// Store the decoded values
	MOVL AX, (DX)
	ADDQ $0x04, DX

loop_condition:
	CMPQ R9, $0x08
	JGE  main_loop

	// Update ctx structure
	MOVQ ctx+0(FP), AX
	SUBQ 16(AX), DX
	MOVQ DX, 40(AX)
	MOVQ (AX), AX
	MOVQ R9, 24(AX)
	MOVQ R10, 32(AX)
	MOVB R11, 40(AX)
	RET

	// Report error
error_max_decoded_size_exceeded:
	MOVQ ctx+0(FP), AX
	MOVQ $-1, CX
	MOVQ CX, 40(AX)
	RET

// func decompress1x_main_loop_bmi2(ctx *decompress1xContext)
// Requires: BMI2
TEXT ·decompress1x_main_loop_bmi2(SB), $0-8
	MOVQ    ctx+0(FP), CX
	MOVQ    16(CX), DX
	MOVQ    24(CX), BX
	CMPQ    BX, $0x04
	JB      error_max_decoded_size_exceeded
	LEAQ    (DX)(BX*1), BX
	MOVQ    (CX), SI
	MOVQ    (SI), R8
	MOVQ    24(SI), R9
	MOVQ    32(SI), R10
	MOVBQZX 40(SI), R11
	MOVQ    32(CX), SI
	MOVBQZX 8(CX), DI
	JMP     loop_condition

main_loop:
	// Check if we have room for 4 bytes in the output buffer
	LEAQ 4(DX), CX
	CMPQ CX, BX
	JGE  error_max_decoded_size_exceeded

	// Decode 4 values
	CMPQ  R11, $0x20
	JL    bitReader_fillFast_1_end
	SUBQ  $0x20, R11
	SUBQ  $0x04, R9
	MOVL  (R8)(R9*1), CX
	SHLXQ R11, CX, CX
	ORQ   CX, R10

bitReader_fillFast_1_end:
	SHRXQ   DI, R10, CX
	MOVW    (SI)(CX*2), CX
	MOVB    CH, AL
	MOVBQZX CL, CX
	ADDQ    CX, R11
	SHLXQ   CX, R10, R10
	SHRXQ   DI, R10, CX
	MOVW    (SI)(CX*2), CX
	MOVB    CH, AH
	MOVBQZX CL, CX
	ADDQ    CX, R11
	SHLXQ   CX, R10, R10
	BSWAPL  AX
	CMPQ    R11, $0x20
	JL      bitReader_fillFast_2_end
	SUBQ    $0x20, R11
	SUBQ    $0x04, R9
	MOVL    (R8)(R9*1), CX
	SHLXQ   R11, CX, CX
	ORQ     CX, R10

bitReader_fillFast_2_end:
	SHRXQ   DI, R10, CX
	MOVW    (SI)(CX*2), CX
	MOVB    CH, AH
	MOVBQZX CL, CX
	ADDQ    CX, R11
	SHLXQ   CX, R10, R10
	SHRXQ   DI, R10, CX
	MOVW    (SI)(CX*2), CX
	MOVB    CH, AL
	MOVBQZX CL, CX
	ADDQ    CX, R11
	SHLXQ   CX, R10, R10
	BSWAPL  AX

	// Store the decoded values
	MOVL AX, (DX)
	ADDQ $0x04, DX

loop_condition:
	CMPQ R9, $0x08
	JGE  main_loop

	// Update ctx structure
	MOVQ ctx+0(FP), AX
	SUBQ 16(AX), DX
	MOVQ DX, 40(AX)
	MOVQ (AX), AX
	MOVQ R9, 24(AX)
	MOVQ R10, 32(AX)
	MOVB R11, 40(AX)
	RET

	// Report error
error_max_decoded_size_exceeded:
	MOVQ ctx+0(FP), AX
	MOVQ $-1, CX
	MOVQ CX, 40(AX)
	RET
  07070100000862000081A4000000000000000000000001645E367C00001E29000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/huff0/decompress_generic.go  //go:build !amd64 || appengine || !gc || noasm
// +build !amd64 appengine !gc noasm

// This file contains a generic implementation of Decoder.Decompress4X.
package huff0

import (
	"errors"
	"fmt"
)

// Decompress4X will decompress a 4X encoded stream.
// The length of the supplied input must match the end of a block exactly.
// The *capacity* of the dst slice must match the destination size of
// the uncompressed data exactly.
func (d *Decoder) Decompress4X(dst, src []byte) ([]byte, error) {
	if len(d.dt.single) == 0 {
		return nil, errors.New("no table loaded")
	}
	if len(src) < 6+(4*1) {
		return nil, errors.New("input too small")
	}
	if use8BitTables && d.actualTableLog <= 8 {
		return d.decompress4X8bit(dst, src)
	}

	var br [4]bitReaderShifted
	// Decode "jump table"
	start := 6
	for i := 0; i < 3; i++ {
		length := int(src[i*2]) | (int(src[i*2+1]) << 8)
		if start+length >= len(src) {
			return nil, errors.New("truncated input (or invalid offset)")
		}
		err := br[i].init(src[start : start+length])
		if err != nil {
			return nil, err
		}
		start += length
	}
	err := br[3].init(src[start:])
	if err != nil {
		return nil, err
	}

	// destination, offset to match first output
	dstSize := cap(dst)
	dst = dst[:dstSize]
	out := dst
	dstEvery := (dstSize + 3) / 4

	const tlSize = 1 << tableLogMax
	const tlMask = tlSize - 1
	single := d.dt.single[:tlSize]

	// Use temp table to avoid bound checks/append penalty.
	buf := d.buffer()
	var off uint8
	var decoded int

	// Decode 2 values from each decoder/loop.
	const bufoff = 256
	for {
		if br[0].off < 4 || br[1].off < 4 || br[2].off < 4 || br[3].off < 4 {
			break
		}

		{
			const stream = 0
			const stream2 = 1
			br[stream].fillFast()
			br[stream2].fillFast()

			val := br[stream].peekBitsFast(d.actualTableLog)
			val2 := br[stream2].peekBitsFast(d.actualTableLog)
			v := single[val&tlMask]
			v2 := single[val2&tlMask]
			br[stream].advance(uint8(v.entry))
			br[stream2].advance(uint8(v2.entry))
			buf[stream][off] = uint8(v.entry >> 8)
			buf[stream2][off] = uint8(v2.entry >> 8)

			val = br[stream].peekBitsFast(d.actualTableLog)
			val2 = br[stream2].peekBitsFast(d.actualTableLog)
			v = single[val&tlMask]
			v2 = single[val2&tlMask]
			br[stream].advance(uint8(v.entry))
			br[stream2].advance(uint8(v2.entry))
			buf[stream][off+1] = uint8(v.entry >> 8)
			buf[stream2][off+1] = uint8(v2.entry >> 8)
		}

		{
			const stream = 2
			const stream2 = 3
			br[stream].fillFast()
			br[stream2].fillFast()

			val := br[stream].peekBitsFast(d.actualTableLog)
			val2 := br[stream2].peekBitsFast(d.actualTableLog)
			v := single[val&tlMask]
			v2 := single[val2&tlMask]
			br[stream].advance(uint8(v.entry))
			br[stream2].advance(uint8(v2.entry))
			buf[stream][off] = uint8(v.entry >> 8)
			buf[stream2][off] = uint8(v2.entry >> 8)

			val = br[stream].peekBitsFast(d.actualTableLog)
			val2 = br[stream2].peekBitsFast(d.actualTableLog)
			v = single[val&tlMask]
			v2 = single[val2&tlMask]
			br[stream].advance(uint8(v.entry))
			br[stream2].advance(uint8(v2.entry))
			buf[stream][off+1] = uint8(v.entry >> 8)
			buf[stream2][off+1] = uint8(v2.entry >> 8)
		}

		off += 2

		if off == 0 {
			if bufoff > dstEvery {
				d.bufs.Put(buf)
				return nil, errors.New("corruption detected: stream overrun 1")
			}
			// There must at least be 3 buffers left.
			if len(out)-bufoff < dstEvery*3 {
				d.bufs.Put(buf)
				return nil, errors.New("corruption detected: stream overrun 2")
			}
			//copy(out, buf[0][:])
			//copy(out[dstEvery:], buf[1][:])
			//copy(out[dstEvery*2:], buf[2][:])
			//copy(out[dstEvery*3:], buf[3][:])
			*(*[bufoff]byte)(out) = buf[0]
			*(*[bufoff]byte)(out[dstEvery:]) = buf[1]
			*(*[bufoff]byte)(out[dstEvery*2:]) = buf[2]
			*(*[bufoff]byte)(out[dstEvery*3:]) = buf[3]
			out = out[bufoff:]
			decoded += bufoff * 4
		}
	}
	if off > 0 {
		ioff := int(off)
		if len(out) < dstEvery*3+ioff {
			d.bufs.Put(buf)
			return nil, errors.New("corruption detected: stream overrun 3")
		}
		copy(out, buf[0][:off])
		copy(out[dstEvery:], buf[1][:off])
		copy(out[dstEvery*2:], buf[2][:off])
		copy(out[dstEvery*3:], buf[3][:off])
		decoded += int(off) * 4
		out = out[off:]
	}

	// Decode remaining.
	remainBytes := dstEvery - (decoded / 4)
	for i := range br {
		offset := dstEvery * i
		endsAt := offset + remainBytes
		if endsAt > len(out) {
			endsAt = len(out)
		}
		br := &br[i]
		bitsLeft := br.remaining()
		for bitsLeft > 0 {
			br.fill()
			if offset >= endsAt {
				d.bufs.Put(buf)
				return nil, errors.New("corruption detected: stream overrun 4")
			}

			// Read value and increment offset.
			val := br.peekBitsFast(d.actualTableLog)
			v := single[val&tlMask].entry
			nBits := uint8(v)
			br.advance(nBits)
			bitsLeft -= uint(nBits)
			out[offset] = uint8(v >> 8)
			offset++
		}
		if offset != endsAt {
			d.bufs.Put(buf)
			return nil, fmt.Errorf("corruption detected: short output block %d, end %d != %d", i, offset, endsAt)
		}
		decoded += offset - dstEvery*i
		err = br.close()
		if err != nil {
			return nil, err
		}
	}
	d.bufs.Put(buf)
	if dstSize != decoded {
		return nil, errors.New("corruption detected: short output block")
	}
	return dst, nil
}

// Decompress1X will decompress a 1X encoded stream.
// The cap of the output buffer will be the maximum decompressed size.
// The length of the supplied input must match the end of a block exactly.
func (d *Decoder) Decompress1X(dst, src []byte) ([]byte, error) {
	if len(d.dt.single) == 0 {
		return nil, errors.New("no table loaded")
	}
	if use8BitTables && d.actualTableLog <= 8 {
		return d.decompress1X8Bit(dst, src)
	}
	var br bitReaderShifted
	err := br.init(src)
	if err != nil {
		return dst, err
	}
	maxDecodedSize := cap(dst)
	dst = dst[:0]

	// Avoid bounds check by always having full sized table.
	const tlSize = 1 << tableLogMax
	const tlMask = tlSize - 1
	dt := d.dt.single[:tlSize]

	// Use temp table to avoid bound checks/append penalty.
	bufs := d.buffer()
	buf := &bufs[0]
	var off uint8

	for br.off >= 8 {
		br.fillFast()
		v := dt[br.peekBitsFast(d.actualTableLog)&tlMask]
		br.advance(uint8(v.entry))
		buf[off+0] = uint8(v.entry >> 8)

		v = dt[br.peekBitsFast(d.actualTableLog)&tlMask]
		br.advance(uint8(v.entry))
		buf[off+1] = uint8(v.entry >> 8)

		// Refill
		br.fillFast()

		v = dt[br.peekBitsFast(d.actualTableLog)&tlMask]
		br.advance(uint8(v.entry))
		buf[off+2] = uint8(v.entry >> 8)

		v = dt[br.peekBitsFast(d.actualTableLog)&tlMask]
		br.advance(uint8(v.entry))
		buf[off+3] = uint8(v.entry >> 8)

		off += 4
		if off == 0 {
			if len(dst)+256 > maxDecodedSize {
				br.close()
				d.bufs.Put(bufs)
				return nil, ErrMaxDecodedSizeExceeded
			}
			dst = append(dst, buf[:]...)
		}
	}

	if len(dst)+int(off) > maxDecodedSize {
		d.bufs.Put(bufs)
		br.close()
		return nil, ErrMaxDecodedSizeExceeded
	}
	dst = append(dst, buf[:off]...)

	// br < 8, so uint8 is fine
	bitsLeft := uint8(br.off)*8 + 64 - br.bitsRead
	for bitsLeft > 0 {
		br.fill()
		if false && br.bitsRead >= 32 {
			if br.off >= 4 {
				v := br.in[br.off-4:]
				v = v[:4]
				low := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24)
				br.value = (br.value << 32) | uint64(low)
				br.bitsRead -= 32
				br.off -= 4
			} else {
				for br.off > 0 {
					br.value = (br.value << 8) | uint64(br.in[br.off-1])
					br.bitsRead -= 8
					br.off--
				}
			}
		}
		if len(dst) >= maxDecodedSize {
			d.bufs.Put(bufs)
			br.close()
			return nil, ErrMaxDecodedSizeExceeded
		}
		v := d.dt.single[br.peekBitsFast(d.actualTableLog)&tlMask]
		nBits := uint8(v.entry)
		br.advance(nBits)
		bitsLeft -= nBits
		dst = append(dst, uint8(v.entry>>8))
	}
	d.bufs.Put(bufs)
	return dst, br.close()
}
   07070100000863000081A4000000000000000000000001645E367C000023C3000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/huff0/huff0.go   // Package huff0 provides fast huffman encoding as used in zstd.
//
// See README.md at https://github.com/klauspost/compress/tree/master/huff0 for details.
package huff0

import (
	"errors"
	"fmt"
	"math"
	"math/bits"
	"sync"

	"github.com/klauspost/compress/fse"
)

const (
	maxSymbolValue = 255

	// zstandard limits tablelog to 11, see:
	// https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#huffman-tree-description
	tableLogMax     = 11
	tableLogDefault = 11
	minTablelog     = 5
	huffNodesLen    = 512

	// BlockSizeMax is maximum input size for a single block uncompressed.
	BlockSizeMax = 1<<18 - 1
)

var (
	// ErrIncompressible is returned when input is judged to be too hard to compress.
	ErrIncompressible = errors.New("input is not compressible")

	// ErrUseRLE is returned from the compressor when the input is a single byte value repeated.
	ErrUseRLE = errors.New("input is single value repeated")

	// ErrTooBig is return if input is too large for a single block.
	ErrTooBig = errors.New("input too big")

	// ErrMaxDecodedSizeExceeded is return if input is too large for a single block.
	ErrMaxDecodedSizeExceeded = errors.New("maximum output size exceeded")
)

type ReusePolicy uint8

const (
	// ReusePolicyAllow will allow reuse if it produces smaller output.
	ReusePolicyAllow ReusePolicy = iota

	// ReusePolicyPrefer will re-use aggressively if possible.
	// This will not check if a new table will produce smaller output,
	// except if the current table is impossible to use or
	// compressed output is bigger than input.
	ReusePolicyPrefer

	// ReusePolicyNone will disable re-use of tables.
	// This is slightly faster than ReusePolicyAllow but may produce larger output.
	ReusePolicyNone

	// ReusePolicyMust must allow reuse and produce smaller output.
	ReusePolicyMust
)

type Scratch struct {
	count [maxSymbolValue + 1]uint32

	// Per block parameters.
	// These can be used to override compression parameters of the block.
	// Do not touch, unless you know what you are doing.

	// Out is output buffer.
	// If the scratch is re-used before the caller is done processing the output,
	// set this field to nil.
	// Otherwise the output buffer will be re-used for next Compression/Decompression step
	// and allocation will be avoided.
	Out []byte

	// OutTable will contain the table data only, if a new table has been generated.
	// Slice of the returned data.
	OutTable []byte

	// OutData will contain the compressed data.
	// Slice of the returned data.
	OutData []byte

	// MaxDecodedSize will set the maximum allowed output size.
	// This value will automatically be set to BlockSizeMax if not set.
	// Decoders will return ErrMaxDecodedSizeExceeded is this limit is exceeded.
	MaxDecodedSize int

	br byteReader

	// MaxSymbolValue will override the maximum symbol value of the next block.
	MaxSymbolValue uint8

	// TableLog will attempt to override the tablelog for the next block.
	// Must be <= 11 and >= 5.
	TableLog uint8

	// Reuse will specify the reuse policy
	Reuse ReusePolicy

	// WantLogLess allows to specify a log 2 reduction that should at least be achieved,
	// otherwise the block will be returned as incompressible.
	// The reduction should then at least be (input size >> WantLogLess)
	// If WantLogLess == 0 any improvement will do.
	WantLogLess uint8

	symbolLen      uint16 // Length of active part of the symbol table.
	maxCount       int    // count of the most probable symbol
	clearCount     bool   // clear count
	actualTableLog uint8  // Selected tablelog.
	prevTableLog   uint8  // Tablelog for previous table
	prevTable      cTable // Table used for previous compression.
	cTable         cTable // compression table
	dt             dTable // decompression table
	nodes          []nodeElt
	tmpOut         [4][]byte
	fse            *fse.Scratch
	decPool        sync.Pool // *[4][256]byte buffers.
	huffWeight     [maxSymbolValue + 1]byte
}

// TransferCTable will transfer the previously used compression table.
func (s *Scratch) TransferCTable(src *Scratch) {
	if cap(s.prevTable) < len(src.prevTable) {
		s.prevTable = make(cTable, 0, maxSymbolValue+1)
	}
	s.prevTable = s.prevTable[:len(src.prevTable)]
	copy(s.prevTable, src.prevTable)
	s.prevTableLog = src.prevTableLog
}

func (s *Scratch) prepare(in []byte) (*Scratch, error) {
	if len(in) > BlockSizeMax {
		return nil, ErrTooBig
	}
	if s == nil {
		s = &Scratch{}
	}
	if s.MaxSymbolValue == 0 {
		s.MaxSymbolValue = maxSymbolValue
	}
	if s.TableLog == 0 {
		s.TableLog = tableLogDefault
	}
	if s.TableLog > tableLogMax || s.TableLog < minTablelog {
		return nil, fmt.Errorf(" invalid tableLog %d (%d -> %d)", s.TableLog, minTablelog, tableLogMax)
	}
	if s.MaxDecodedSize <= 0 || s.MaxDecodedSize > BlockSizeMax {
		s.MaxDecodedSize = BlockSizeMax
	}
	if s.clearCount && s.maxCount == 0 {
		for i := range s.count {
			s.count[i] = 0
		}
		s.clearCount = false
	}
	if cap(s.Out) == 0 {
		s.Out = make([]byte, 0, len(in))
	}
	s.Out = s.Out[:0]

	s.OutTable = nil
	s.OutData = nil
	if cap(s.nodes) < huffNodesLen+1 {
		s.nodes = make([]nodeElt, 0, huffNodesLen+1)
	}
	s.nodes = s.nodes[:0]
	if s.fse == nil {
		s.fse = &fse.Scratch{}
	}
	s.br.init(in)

	return s, nil
}

type cTable []cTableEntry

func (c cTable) write(s *Scratch) error {
	var (
		// precomputed conversion table
		bitsToWeight [tableLogMax + 1]byte
		huffLog      = s.actualTableLog
		// last weight is not saved.
		maxSymbolValue = uint8(s.symbolLen - 1)
		huffWeight     = s.huffWeight[:256]
	)
	const (
		maxFSETableLog = 6
	)
	// convert to weight
	bitsToWeight[0] = 0
	for n := uint8(1); n < huffLog+1; n++ {
		bitsToWeight[n] = huffLog + 1 - n
	}

	// Acquire histogram for FSE.
	hist := s.fse.Histogram()
	hist = hist[:256]
	for i := range hist[:16] {
		hist[i] = 0
	}
	for n := uint8(0); n < maxSymbolValue; n++ {
		v := bitsToWeight[c[n].nBits] & 15
		huffWeight[n] = v
		hist[v]++
	}

	// FSE compress if feasible.
	if maxSymbolValue >= 2 {
		huffMaxCnt := uint32(0)
		huffMax := uint8(0)
		for i, v := range hist[:16] {
			if v == 0 {
				continue
			}
			huffMax = byte(i)
			if v > huffMaxCnt {
				huffMaxCnt = v
			}
		}
		s.fse.HistogramFinished(huffMax, int(huffMaxCnt))
		s.fse.TableLog = maxFSETableLog
		b, err := fse.Compress(huffWeight[:maxSymbolValue], s.fse)
		if err == nil && len(b) < int(s.symbolLen>>1) {
			s.Out = append(s.Out, uint8(len(b)))
			s.Out = append(s.Out, b...)
			return nil
		}
		// Unable to compress (RLE/uncompressible)
	}
	// write raw values as 4-bits (max : 15)
	if maxSymbolValue > (256 - 128) {
		// should not happen : likely means source cannot be compressed
		return ErrIncompressible
	}
	op := s.Out
	// special case, pack weights 4 bits/weight.
	op = append(op, 128|(maxSymbolValue-1))
	// be sure it doesn't cause msan issue in final combination
	huffWeight[maxSymbolValue] = 0
	for n := uint16(0); n < uint16(maxSymbolValue); n += 2 {
		op = append(op, (huffWeight[n]<<4)|huffWeight[n+1])
	}
	s.Out = op
	return nil
}

func (c cTable) estTableSize(s *Scratch) (sz int, err error) {
	var (
		// precomputed conversion table
		bitsToWeight [tableLogMax + 1]byte
		huffLog      = s.actualTableLog
		// last weight is not saved.
		maxSymbolValue = uint8(s.symbolLen - 1)
		huffWeight     = s.huffWeight[:256]
	)
	const (
		maxFSETableLog = 6
	)
	// convert to weight
	bitsToWeight[0] = 0
	for n := uint8(1); n < huffLog+1; n++ {
		bitsToWeight[n] = huffLog + 1 - n
	}

	// Acquire histogram for FSE.
	hist := s.fse.Histogram()
	hist = hist[:256]
	for i := range hist[:16] {
		hist[i] = 0
	}
	for n := uint8(0); n < maxSymbolValue; n++ {
		v := bitsToWeight[c[n].nBits] & 15
		huffWeight[n] = v
		hist[v]++
	}

	// FSE compress if feasible.
	if maxSymbolValue >= 2 {
		huffMaxCnt := uint32(0)
		huffMax := uint8(0)
		for i, v := range hist[:16] {
			if v == 0 {
				continue
			}
			huffMax = byte(i)
			if v > huffMaxCnt {
				huffMaxCnt = v
			}
		}
		s.fse.HistogramFinished(huffMax, int(huffMaxCnt))
		s.fse.TableLog = maxFSETableLog
		b, err := fse.Compress(huffWeight[:maxSymbolValue], s.fse)
		if err == nil && len(b) < int(s.symbolLen>>1) {
			sz += 1 + len(b)
			return sz, nil
		}
		// Unable to compress (RLE/uncompressible)
	}
	// write raw values as 4-bits (max : 15)
	if maxSymbolValue > (256 - 128) {
		// should not happen : likely means source cannot be compressed
		return 0, ErrIncompressible
	}
	// special case, pack weights 4 bits/weight.
	sz += 1 + int(maxSymbolValue/2)
	return sz, nil
}

// estimateSize returns the estimated size in bytes of the input represented in the
// histogram supplied.
func (c cTable) estimateSize(hist []uint32) int {
	nbBits := uint32(7)
	for i, v := range c[:len(hist)] {
		nbBits += uint32(v.nBits) * hist[i]
	}
	return int(nbBits >> 3)
}

// minSize returns the minimum possible size considering the shannon limit.
func (s *Scratch) minSize(total int) int {
	nbBits := float64(7)
	fTotal := float64(total)
	for _, v := range s.count[:s.symbolLen] {
		n := float64(v)
		if n > 0 {
			nbBits += math.Log2(fTotal/n) * n
		}
	}
	return int(nbBits) >> 3
}

func highBit32(val uint32) (n uint32) {
	return uint32(bits.Len32(val) - 1)
}
 07070100000864000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/internal 07070100000865000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/internal/cpuinfo 07070100000866000081A4000000000000000000000001645E367C00000334000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo.go  // Package cpuinfo gives runtime info about the current CPU.
//
// This is a very limited module meant for use internally
// in this project. For more versatile solution check
// https://github.com/klauspost/cpuid.
package cpuinfo

// HasBMI1 checks whether an x86 CPU supports the BMI1 extension.
func HasBMI1() bool {
	return hasBMI1
}

// HasBMI2 checks whether an x86 CPU supports the BMI2 extension.
func HasBMI2() bool {
	return hasBMI2
}

// DisableBMI2 will disable BMI2, for testing purposes.
// Call returned function to restore previous state.
func DisableBMI2() func() {
	old := hasBMI2
	hasBMI2 = false
	return func() {
		hasBMI2 = old
	}
}

// HasBMI checks whether an x86 CPU supports both BMI1 and BMI2 extensions.
func HasBMI() bool {
	return HasBMI1() && HasBMI2()
}

var hasBMI1 bool
var hasBMI2 bool
07070100000867000081A4000000000000000000000001645E367C000000D1000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo_amd64.go    //go:build amd64 && !appengine && !noasm && gc
// +build amd64,!appengine,!noasm,gc

package cpuinfo

// go:noescape
func x86extensions() (bmi1, bmi2 bool)

func init() {
	hasBMI1, hasBMI2 = x86extensions()
}
   07070100000868000081A4000000000000000000000001645E367C00000232000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo_amd64.s // +build !appengine
// +build gc
// +build !noasm

#include "textflag.h"
#include "funcdata.h"
#include "go_asm.h"

TEXT ·x86extensions(SB), NOSPLIT, $0
	// 1. determine max EAX value
	XORQ AX, AX
	CPUID

	CMPQ AX, $7
	JB   unsupported

	// 2. EAX = 7, ECX = 0 --- see Table 3-8 "Information Returned by CPUID Instruction"
	MOVQ $7, AX
	MOVQ $0, CX
	CPUID

	BTQ   $3, BX // bit 3 = BMI1
	SETCS AL

	BTQ   $8, BX // bit 8 = BMI2
	SETCS AH

	MOVB AL, bmi1+0(FP)
	MOVB AH, bmi2+1(FP)
	RET

unsupported:
	XORQ AX, AX
	MOVB AL, bmi1+0(FP)
	MOVB AL, bmi2+1(FP)
	RET
  07070100000869000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/internal/snapref 0707010000086A000081A4000000000000000000000001645E367C000005CE000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/internal/snapref/LICENSE Copyright (c) 2011 The Snappy-Go Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  0707010000086B000081A4000000000000000000000001645E367C00001920000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/internal/snapref/decode.go   // Copyright 2011 The Snappy-Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package snapref

import (
	"encoding/binary"
	"errors"
	"io"
)

var (
	// ErrCorrupt reports that the input is invalid.
	ErrCorrupt = errors.New("snappy: corrupt input")
	// ErrTooLarge reports that the uncompressed length is too large.
	ErrTooLarge = errors.New("snappy: decoded block is too large")
	// ErrUnsupported reports that the input isn't supported.
	ErrUnsupported = errors.New("snappy: unsupported input")

	errUnsupportedLiteralLength = errors.New("snappy: unsupported literal length")
)

// DecodedLen returns the length of the decoded block.
func DecodedLen(src []byte) (int, error) {
	v, _, err := decodedLen(src)
	return v, err
}

// decodedLen returns the length of the decoded block and the number of bytes
// that the length header occupied.
func decodedLen(src []byte) (blockLen, headerLen int, err error) {
	v, n := binary.Uvarint(src)
	if n <= 0 || v > 0xffffffff {
		return 0, 0, ErrCorrupt
	}

	const wordSize = 32 << (^uint(0) >> 32 & 1)
	if wordSize == 32 && v > 0x7fffffff {
		return 0, 0, ErrTooLarge
	}
	return int(v), n, nil
}

const (
	decodeErrCodeCorrupt                  = 1
	decodeErrCodeUnsupportedLiteralLength = 2
)

// Decode returns the decoded form of src. The returned slice may be a sub-
// slice of dst if dst was large enough to hold the entire decoded block.
// Otherwise, a newly allocated slice will be returned.
//
// The dst and src must not overlap. It is valid to pass a nil dst.
//
// Decode handles the Snappy block format, not the Snappy stream format.
func Decode(dst, src []byte) ([]byte, error) {
	dLen, s, err := decodedLen(src)
	if err != nil {
		return nil, err
	}
	if dLen <= len(dst) {
		dst = dst[:dLen]
	} else {
		dst = make([]byte, dLen)
	}
	switch decode(dst, src[s:]) {
	case 0:
		return dst, nil
	case decodeErrCodeUnsupportedLiteralLength:
		return nil, errUnsupportedLiteralLength
	}
	return nil, ErrCorrupt
}

// NewReader returns a new Reader that decompresses from r, using the framing
// format described at
// https://github.com/google/snappy/blob/master/framing_format.txt
func NewReader(r io.Reader) *Reader {
	return &Reader{
		r:       r,
		decoded: make([]byte, maxBlockSize),
		buf:     make([]byte, maxEncodedLenOfMaxBlockSize+checksumSize),
	}
}

// Reader is an io.Reader that can read Snappy-compressed bytes.
//
// Reader handles the Snappy stream format, not the Snappy block format.
type Reader struct {
	r       io.Reader
	err     error
	decoded []byte
	buf     []byte
	// decoded[i:j] contains decoded bytes that have not yet been passed on.
	i, j       int
	readHeader bool
}

// Reset discards any buffered data, resets all state, and switches the Snappy
// reader to read from r. This permits reusing a Reader rather than allocating
// a new one.
func (r *Reader) Reset(reader io.Reader) {
	r.r = reader
	r.err = nil
	r.i = 0
	r.j = 0
	r.readHeader = false
}

func (r *Reader) readFull(p []byte, allowEOF bool) (ok bool) {
	if _, r.err = io.ReadFull(r.r, p); r.err != nil {
		if r.err == io.ErrUnexpectedEOF || (r.err == io.EOF && !allowEOF) {
			r.err = ErrCorrupt
		}
		return false
	}
	return true
}

func (r *Reader) fill() error {
	for r.i >= r.j {
		if !r.readFull(r.buf[:4], true) {
			return r.err
		}
		chunkType := r.buf[0]
		if !r.readHeader {
			if chunkType != chunkTypeStreamIdentifier {
				r.err = ErrCorrupt
				return r.err
			}
			r.readHeader = true
		}
		chunkLen := int(r.buf[1]) | int(r.buf[2])<<8 | int(r.buf[3])<<16
		if chunkLen > len(r.buf) {
			r.err = ErrUnsupported
			return r.err
		}

		// The chunk types are specified at
		// https://github.com/google/snappy/blob/master/framing_format.txt
		switch chunkType {
		case chunkTypeCompressedData:
			// Section 4.2. Compressed data (chunk type 0x00).
			if chunkLen < checksumSize {
				r.err = ErrCorrupt
				return r.err
			}
			buf := r.buf[:chunkLen]
			if !r.readFull(buf, false) {
				return r.err
			}
			checksum := uint32(buf[0]) | uint32(buf[1])<<8 | uint32(buf[2])<<16 | uint32(buf[3])<<24
			buf = buf[checksumSize:]

			n, err := DecodedLen(buf)
			if err != nil {
				r.err = err
				return r.err
			}
			if n > len(r.decoded) {
				r.err = ErrCorrupt
				return r.err
			}
			if _, err := Decode(r.decoded, buf); err != nil {
				r.err = err
				return r.err
			}
			if crc(r.decoded[:n]) != checksum {
				r.err = ErrCorrupt
				return r.err
			}
			r.i, r.j = 0, n
			continue

		case chunkTypeUncompressedData:
			// Section 4.3. Uncompressed data (chunk type 0x01).
			if chunkLen < checksumSize {
				r.err = ErrCorrupt
				return r.err
			}
			buf := r.buf[:checksumSize]
			if !r.readFull(buf, false) {
				return r.err
			}
			checksum := uint32(buf[0]) | uint32(buf[1])<<8 | uint32(buf[2])<<16 | uint32(buf[3])<<24
			// Read directly into r.decoded instead of via r.buf.
			n := chunkLen - checksumSize
			if n > len(r.decoded) {
				r.err = ErrCorrupt
				return r.err
			}
			if !r.readFull(r.decoded[:n], false) {
				return r.err
			}
			if crc(r.decoded[:n]) != checksum {
				r.err = ErrCorrupt
				return r.err
			}
			r.i, r.j = 0, n
			continue

		case chunkTypeStreamIdentifier:
			// Section 4.1. Stream identifier (chunk type 0xff).
			if chunkLen != len(magicBody) {
				r.err = ErrCorrupt
				return r.err
			}
			if !r.readFull(r.buf[:len(magicBody)], false) {
				return r.err
			}
			for i := 0; i < len(magicBody); i++ {
				if r.buf[i] != magicBody[i] {
					r.err = ErrCorrupt
					return r.err
				}
			}
			continue
		}

		if chunkType <= 0x7f {
			// Section 4.5. Reserved unskippable chunks (chunk types 0x02-0x7f).
			r.err = ErrUnsupported
			return r.err
		}
		// Section 4.4 Padding (chunk type 0xfe).
		// Section 4.6. Reserved skippable chunks (chunk types 0x80-0xfd).
		if !r.readFull(r.buf[:chunkLen], false) {
			return r.err
		}
	}

	return nil
}

// Read satisfies the io.Reader interface.
func (r *Reader) Read(p []byte) (int, error) {
	if r.err != nil {
		return 0, r.err
	}

	if err := r.fill(); err != nil {
		return 0, err
	}

	n := copy(p, r.decoded[r.i:r.j])
	r.i += n
	return n, nil
}

// ReadByte satisfies the io.ByteReader interface.
func (r *Reader) ReadByte() (byte, error) {
	if r.err != nil {
		return 0, r.err
	}

	if err := r.fill(); err != nil {
		return 0, err
	}

	c := r.decoded[r.i]
	r.i++
	return c, nil
}
0707010000086C000081A4000000000000000000000001645E367C00000D63000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/internal/snapref/decode_other.go // Copyright 2016 The Snappy-Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package snapref

// decode writes the decoding of src to dst. It assumes that the varint-encoded
// length of the decompressed bytes has already been read, and that len(dst)
// equals that length.
//
// It returns 0 on success or a decodeErrCodeXxx error code on failure.
func decode(dst, src []byte) int {
	var d, s, offset, length int
	for s < len(src) {
		switch src[s] & 0x03 {
		case tagLiteral:
			x := uint32(src[s] >> 2)
			switch {
			case x < 60:
				s++
			case x == 60:
				s += 2
				if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.
					return decodeErrCodeCorrupt
				}
				x = uint32(src[s-1])
			case x == 61:
				s += 3
				if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.
					return decodeErrCodeCorrupt
				}
				x = uint32(src[s-2]) | uint32(src[s-1])<<8
			case x == 62:
				s += 4
				if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.
					return decodeErrCodeCorrupt
				}
				x = uint32(src[s-3]) | uint32(src[s-2])<<8 | uint32(src[s-1])<<16
			case x == 63:
				s += 5
				if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.
					return decodeErrCodeCorrupt
				}
				x = uint32(src[s-4]) | uint32(src[s-3])<<8 | uint32(src[s-2])<<16 | uint32(src[s-1])<<24
			}
			length = int(x) + 1
			if length <= 0 {
				return decodeErrCodeUnsupportedLiteralLength
			}
			if length > len(dst)-d || length > len(src)-s {
				return decodeErrCodeCorrupt
			}
			copy(dst[d:], src[s:s+length])
			d += length
			s += length
			continue

		case tagCopy1:
			s += 2
			if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.
				return decodeErrCodeCorrupt
			}
			length = 4 + int(src[s-2])>>2&0x7
			offset = int(uint32(src[s-2])&0xe0<<3 | uint32(src[s-1]))

		case tagCopy2:
			s += 3
			if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.
				return decodeErrCodeCorrupt
			}
			length = 1 + int(src[s-3])>>2
			offset = int(uint32(src[s-2]) | uint32(src[s-1])<<8)

		case tagCopy4:
			s += 5
			if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.
				return decodeErrCodeCorrupt
			}
			length = 1 + int(src[s-5])>>2
			offset = int(uint32(src[s-4]) | uint32(src[s-3])<<8 | uint32(src[s-2])<<16 | uint32(src[s-1])<<24)
		}

		if offset <= 0 || d < offset || length > len(dst)-d {
			return decodeErrCodeCorrupt
		}
		// Copy from an earlier sub-slice of dst to a later sub-slice.
		// If no overlap, use the built-in copy:
		if offset >= length {
			copy(dst[d:d+length], dst[d-offset:])
			d += length
			continue
		}

		// Unlike the built-in copy function, this byte-by-byte copy always runs
		// forwards, even if the slices overlap. Conceptually, this is:
		//
		// d += forwardCopy(dst[d:d+length], dst[d-offset:])
		//
		// We align the slices into a and b and show the compiler they are the same size.
		// This allows the loop to run without bounds checks.
		a := dst[d : d+length]
		b := dst[d-offset:]
		b = b[:len(a)]
		for i := range a {
			a[i] = b[i]
		}
		d += length
	}
	if d != len(dst) {
		return decodeErrCodeCorrupt
	}
	return 0
}
 0707010000086D000081A4000000000000000000000001645E367C00002459000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/internal/snapref/encode.go   // Copyright 2011 The Snappy-Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package snapref

import (
	"encoding/binary"
	"errors"
	"io"
)

// Encode returns the encoded form of src. The returned slice may be a sub-
// slice of dst if dst was large enough to hold the entire encoded block.
// Otherwise, a newly allocated slice will be returned.
//
// The dst and src must not overlap. It is valid to pass a nil dst.
//
// Encode handles the Snappy block format, not the Snappy stream format.
func Encode(dst, src []byte) []byte {
	if n := MaxEncodedLen(len(src)); n < 0 {
		panic(ErrTooLarge)
	} else if len(dst) < n {
		dst = make([]byte, n)
	}

	// The block starts with the varint-encoded length of the decompressed bytes.
	d := binary.PutUvarint(dst, uint64(len(src)))

	for len(src) > 0 {
		p := src
		src = nil
		if len(p) > maxBlockSize {
			p, src = p[:maxBlockSize], p[maxBlockSize:]
		}
		if len(p) < minNonLiteralBlockSize {
			d += emitLiteral(dst[d:], p)
		} else {
			d += encodeBlock(dst[d:], p)
		}
	}
	return dst[:d]
}

// inputMargin is the minimum number of extra input bytes to keep, inside
// encodeBlock's inner loop. On some architectures, this margin lets us
// implement a fast path for emitLiteral, where the copy of short (<= 16 byte)
// literals can be implemented as a single load to and store from a 16-byte
// register. That literal's actual length can be as short as 1 byte, so this
// can copy up to 15 bytes too much, but that's OK as subsequent iterations of
// the encoding loop will fix up the copy overrun, and this inputMargin ensures
// that we don't overrun the dst and src buffers.
const inputMargin = 16 - 1

// minNonLiteralBlockSize is the minimum size of the input to encodeBlock that
// could be encoded with a copy tag. This is the minimum with respect to the
// algorithm used by encodeBlock, not a minimum enforced by the file format.
//
// The encoded output must start with at least a 1 byte literal, as there are
// no previous bytes to copy. A minimal (1 byte) copy after that, generated
// from an emitCopy call in encodeBlock's main loop, would require at least
// another inputMargin bytes, for the reason above: we want any emitLiteral
// calls inside encodeBlock's main loop to use the fast path if possible, which
// requires being able to overrun by inputMargin bytes. Thus,
// minNonLiteralBlockSize equals 1 + 1 + inputMargin.
//
// The C++ code doesn't use this exact threshold, but it could, as discussed at
// https://groups.google.com/d/topic/snappy-compression/oGbhsdIJSJ8/discussion
// The difference between Go (2+inputMargin) and C++ (inputMargin) is purely an
// optimization. It should not affect the encoded form. This is tested by
// TestSameEncodingAsCppShortCopies.
const minNonLiteralBlockSize = 1 + 1 + inputMargin

// MaxEncodedLen returns the maximum length of a snappy block, given its
// uncompressed length.
//
// It will return a negative value if srcLen is too large to encode.
func MaxEncodedLen(srcLen int) int {
	n := uint64(srcLen)
	if n > 0xffffffff {
		return -1
	}
	// Compressed data can be defined as:
	//    compressed := item* literal*
	//    item       := literal* copy
	//
	// The trailing literal sequence has a space blowup of at most 62/60
	// since a literal of length 60 needs one tag byte + one extra byte
	// for length information.
	//
	// Item blowup is trickier to measure. Suppose the "copy" op copies
	// 4 bytes of data. Because of a special check in the encoding code,
	// we produce a 4-byte copy only if the offset is < 65536. Therefore
	// the copy op takes 3 bytes to encode, and this type of item leads
	// to at most the 62/60 blowup for representing literals.
	//
	// Suppose the "copy" op copies 5 bytes of data. If the offset is big
	// enough, it will take 5 bytes to encode the copy op. Therefore the
	// worst case here is a one-byte literal followed by a five-byte copy.
	// That is, 6 bytes of input turn into 7 bytes of "compressed" data.
	//
	// This last factor dominates the blowup, so the final estimate is:
	n = 32 + n + n/6
	if n > 0xffffffff {
		return -1
	}
	return int(n)
}

var errClosed = errors.New("snappy: Writer is closed")

// NewWriter returns a new Writer that compresses to w.
//
// The Writer returned does not buffer writes. There is no need to Flush or
// Close such a Writer.
//
// Deprecated: the Writer returned is not suitable for many small writes, only
// for few large writes. Use NewBufferedWriter instead, which is efficient
// regardless of the frequency and shape of the writes, and remember to Close
// that Writer when done.
func NewWriter(w io.Writer) *Writer {
	return &Writer{
		w:    w,
		obuf: make([]byte, obufLen),
	}
}

// NewBufferedWriter returns a new Writer that compresses to w, using the
// framing format described at
// https://github.com/google/snappy/blob/master/framing_format.txt
//
// The Writer returned buffers writes. Users must call Close to guarantee all
// data has been forwarded to the underlying io.Writer. They may also call
// Flush zero or more times before calling Close.
func NewBufferedWriter(w io.Writer) *Writer {
	return &Writer{
		w:    w,
		ibuf: make([]byte, 0, maxBlockSize),
		obuf: make([]byte, obufLen),
	}
}

// Writer is an io.Writer that can write Snappy-compressed bytes.
//
// Writer handles the Snappy stream format, not the Snappy block format.
type Writer struct {
	w   io.Writer
	err error

	// ibuf is a buffer for the incoming (uncompressed) bytes.
	//
	// Its use is optional. For backwards compatibility, Writers created by the
	// NewWriter function have ibuf == nil, do not buffer incoming bytes, and
	// therefore do not need to be Flush'ed or Close'd.
	ibuf []byte

	// obuf is a buffer for the outgoing (compressed) bytes.
	obuf []byte

	// wroteStreamHeader is whether we have written the stream header.
	wroteStreamHeader bool
}

// Reset discards the writer's state and switches the Snappy writer to write to
// w. This permits reusing a Writer rather than allocating a new one.
func (w *Writer) Reset(writer io.Writer) {
	w.w = writer
	w.err = nil
	if w.ibuf != nil {
		w.ibuf = w.ibuf[:0]
	}
	w.wroteStreamHeader = false
}

// Write satisfies the io.Writer interface.
func (w *Writer) Write(p []byte) (nRet int, errRet error) {
	if w.ibuf == nil {
		// Do not buffer incoming bytes. This does not perform or compress well
		// if the caller of Writer.Write writes many small slices. This
		// behavior is therefore deprecated, but still supported for backwards
		// compatibility with code that doesn't explicitly Flush or Close.
		return w.write(p)
	}

	// The remainder of this method is based on bufio.Writer.Write from the
	// standard library.

	for len(p) > (cap(w.ibuf)-len(w.ibuf)) && w.err == nil {
		var n int
		if len(w.ibuf) == 0 {
			// Large write, empty buffer.
			// Write directly from p to avoid copy.
			n, _ = w.write(p)
		} else {
			n = copy(w.ibuf[len(w.ibuf):cap(w.ibuf)], p)
			w.ibuf = w.ibuf[:len(w.ibuf)+n]
			w.Flush()
		}
		nRet += n
		p = p[n:]
	}
	if w.err != nil {
		return nRet, w.err
	}
	n := copy(w.ibuf[len(w.ibuf):cap(w.ibuf)], p)
	w.ibuf = w.ibuf[:len(w.ibuf)+n]
	nRet += n
	return nRet, nil
}

func (w *Writer) write(p []byte) (nRet int, errRet error) {
	if w.err != nil {
		return 0, w.err
	}
	for len(p) > 0 {
		obufStart := len(magicChunk)
		if !w.wroteStreamHeader {
			w.wroteStreamHeader = true
			copy(w.obuf, magicChunk)
			obufStart = 0
		}

		var uncompressed []byte
		if len(p) > maxBlockSize {
			uncompressed, p = p[:maxBlockSize], p[maxBlockSize:]
		} else {
			uncompressed, p = p, nil
		}
		checksum := crc(uncompressed)

		// Compress the buffer, discarding the result if the improvement
		// isn't at least 12.5%.
		compressed := Encode(w.obuf[obufHeaderLen:], uncompressed)
		chunkType := uint8(chunkTypeCompressedData)
		chunkLen := 4 + len(compressed)
		obufEnd := obufHeaderLen + len(compressed)
		if len(compressed) >= len(uncompressed)-len(uncompressed)/8 {
			chunkType = chunkTypeUncompressedData
			chunkLen = 4 + len(uncompressed)
			obufEnd = obufHeaderLen
		}

		// Fill in the per-chunk header that comes before the body.
		w.obuf[len(magicChunk)+0] = chunkType
		w.obuf[len(magicChunk)+1] = uint8(chunkLen >> 0)
		w.obuf[len(magicChunk)+2] = uint8(chunkLen >> 8)
		w.obuf[len(magicChunk)+3] = uint8(chunkLen >> 16)
		w.obuf[len(magicChunk)+4] = uint8(checksum >> 0)
		w.obuf[len(magicChunk)+5] = uint8(checksum >> 8)
		w.obuf[len(magicChunk)+6] = uint8(checksum >> 16)
		w.obuf[len(magicChunk)+7] = uint8(checksum >> 24)

		if _, err := w.w.Write(w.obuf[obufStart:obufEnd]); err != nil {
			w.err = err
			return nRet, err
		}
		if chunkType == chunkTypeUncompressedData {
			if _, err := w.w.Write(uncompressed); err != nil {
				w.err = err
				return nRet, err
			}
		}
		nRet += len(uncompressed)
	}
	return nRet, nil
}

// Flush flushes the Writer to its underlying io.Writer.
func (w *Writer) Flush() error {
	if w.err != nil {
		return w.err
	}
	if len(w.ibuf) == 0 {
		return nil
	}
	w.write(w.ibuf)
	w.ibuf = w.ibuf[:0]
	return w.err
}

// Close calls Flush and then closes the Writer.
func (w *Writer) Close() error {
	w.Flush()
	ret := w.err
	if w.err == nil {
		w.err = errClosed
	}
	return ret
}
   0707010000086E000081A4000000000000000000000001645E367C000021D0000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/internal/snapref/encode_other.go // Copyright 2016 The Snappy-Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package snapref

func load32(b []byte, i int) uint32 {
	b = b[i : i+4 : len(b)] // Help the compiler eliminate bounds checks on the next line.
	return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
}

func load64(b []byte, i int) uint64 {
	b = b[i : i+8 : len(b)] // Help the compiler eliminate bounds checks on the next line.
	return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 |
		uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
}

// emitLiteral writes a literal chunk and returns the number of bytes written.
//
// It assumes that:
//
//	dst is long enough to hold the encoded bytes
//	1 <= len(lit) && len(lit) <= 65536
func emitLiteral(dst, lit []byte) int {
	i, n := 0, uint(len(lit)-1)
	switch {
	case n < 60:
		dst[0] = uint8(n)<<2 | tagLiteral
		i = 1
	case n < 1<<8:
		dst[0] = 60<<2 | tagLiteral
		dst[1] = uint8(n)
		i = 2
	default:
		dst[0] = 61<<2 | tagLiteral
		dst[1] = uint8(n)
		dst[2] = uint8(n >> 8)
		i = 3
	}
	return i + copy(dst[i:], lit)
}

// emitCopy writes a copy chunk and returns the number of bytes written.
//
// It assumes that:
//
//	dst is long enough to hold the encoded bytes
//	1 <= offset && offset <= 65535
//	4 <= length && length <= 65535
func emitCopy(dst []byte, offset, length int) int {
	i := 0
	// The maximum length for a single tagCopy1 or tagCopy2 op is 64 bytes. The
	// threshold for this loop is a little higher (at 68 = 64 + 4), and the
	// length emitted down below is is a little lower (at 60 = 64 - 4), because
	// it's shorter to encode a length 67 copy as a length 60 tagCopy2 followed
	// by a length 7 tagCopy1 (which encodes as 3+2 bytes) than to encode it as
	// a length 64 tagCopy2 followed by a length 3 tagCopy2 (which encodes as
	// 3+3 bytes). The magic 4 in the 64±4 is because the minimum length for a
	// tagCopy1 op is 4 bytes, which is why a length 3 copy has to be an
	// encodes-as-3-bytes tagCopy2 instead of an encodes-as-2-bytes tagCopy1.
	for length >= 68 {
		// Emit a length 64 copy, encoded as 3 bytes.
		dst[i+0] = 63<<2 | tagCopy2
		dst[i+1] = uint8(offset)
		dst[i+2] = uint8(offset >> 8)
		i += 3
		length -= 64
	}
	if length > 64 {
		// Emit a length 60 copy, encoded as 3 bytes.
		dst[i+0] = 59<<2 | tagCopy2
		dst[i+1] = uint8(offset)
		dst[i+2] = uint8(offset >> 8)
		i += 3
		length -= 60
	}
	if length >= 12 || offset >= 2048 {
		// Emit the remaining copy, encoded as 3 bytes.
		dst[i+0] = uint8(length-1)<<2 | tagCopy2
		dst[i+1] = uint8(offset)
		dst[i+2] = uint8(offset >> 8)
		return i + 3
	}
	// Emit the remaining copy, encoded as 2 bytes.
	dst[i+0] = uint8(offset>>8)<<5 | uint8(length-4)<<2 | tagCopy1
	dst[i+1] = uint8(offset)
	return i + 2
}

// extendMatch returns the largest k such that k <= len(src) and that
// src[i:i+k-j] and src[j:k] have the same contents.
//
// It assumes that:
//
//	0 <= i && i < j && j <= len(src)
func extendMatch(src []byte, i, j int) int {
	for ; j < len(src) && src[i] == src[j]; i, j = i+1, j+1 {
	}
	return j
}

func hash(u, shift uint32) uint32 {
	return (u * 0x1e35a7bd) >> shift
}

// EncodeBlockInto exposes encodeBlock but checks dst size.
func EncodeBlockInto(dst, src []byte) (d int) {
	if MaxEncodedLen(len(src)) > len(dst) {
		return 0
	}

	// encodeBlock breaks on too big blocks, so split.
	for len(src) > 0 {
		p := src
		src = nil
		if len(p) > maxBlockSize {
			p, src = p[:maxBlockSize], p[maxBlockSize:]
		}
		if len(p) < minNonLiteralBlockSize {
			d += emitLiteral(dst[d:], p)
		} else {
			d += encodeBlock(dst[d:], p)
		}
	}
	return d
}

// encodeBlock encodes a non-empty src to a guaranteed-large-enough dst. It
// assumes that the varint-encoded length of the decompressed bytes has already
// been written.
//
// It also assumes that:
//
//	len(dst) >= MaxEncodedLen(len(src)) &&
//	minNonLiteralBlockSize <= len(src) && len(src) <= maxBlockSize
func encodeBlock(dst, src []byte) (d int) {
	// Initialize the hash table. Its size ranges from 1<<8 to 1<<14 inclusive.
	// The table element type is uint16, as s < sLimit and sLimit < len(src)
	// and len(src) <= maxBlockSize and maxBlockSize == 65536.
	const (
		maxTableSize = 1 << 14
		// tableMask is redundant, but helps the compiler eliminate bounds
		// checks.
		tableMask = maxTableSize - 1
	)
	shift := uint32(32 - 8)
	for tableSize := 1 << 8; tableSize < maxTableSize && tableSize < len(src); tableSize *= 2 {
		shift--
	}
	// In Go, all array elements are zero-initialized, so there is no advantage
	// to a smaller tableSize per se. However, it matches the C++ algorithm,
	// and in the asm versions of this code, we can get away with zeroing only
	// the first tableSize elements.
	var table [maxTableSize]uint16

	// sLimit is when to stop looking for offset/length copies. The inputMargin
	// lets us use a fast path for emitLiteral in the main loop, while we are
	// looking for copies.
	sLimit := len(src) - inputMargin

	// nextEmit is where in src the next emitLiteral should start from.
	nextEmit := 0

	// The encoded form must start with a literal, as there are no previous
	// bytes to copy, so we start looking for hash matches at s == 1.
	s := 1
	nextHash := hash(load32(src, s), shift)

	for {
		// Copied from the C++ snappy implementation:
		//
		// Heuristic match skipping: If 32 bytes are scanned with no matches
		// found, start looking only at every other byte. If 32 more bytes are
		// scanned (or skipped), look at every third byte, etc.. When a match
		// is found, immediately go back to looking at every byte. This is a
		// small loss (~5% performance, ~0.1% density) for compressible data
		// due to more bookkeeping, but for non-compressible data (such as
		// JPEG) it's a huge win since the compressor quickly "realizes" the
		// data is incompressible and doesn't bother looking for matches
		// everywhere.
		//
		// The "skip" variable keeps track of how many bytes there are since
		// the last match; dividing it by 32 (ie. right-shifting by five) gives
		// the number of bytes to move ahead for each iteration.
		skip := 32

		nextS := s
		candidate := 0
		for {
			s = nextS
			bytesBetweenHashLookups := skip >> 5
			nextS = s + bytesBetweenHashLookups
			skip += bytesBetweenHashLookups
			if nextS > sLimit {
				goto emitRemainder
			}
			candidate = int(table[nextHash&tableMask])
			table[nextHash&tableMask] = uint16(s)
			nextHash = hash(load32(src, nextS), shift)
			if load32(src, s) == load32(src, candidate) {
				break
			}
		}

		// A 4-byte match has been found. We'll later see if more than 4 bytes
		// match. But, prior to the match, src[nextEmit:s] are unmatched. Emit
		// them as literal bytes.
		d += emitLiteral(dst[d:], src[nextEmit:s])

		// Call emitCopy, and then see if another emitCopy could be our next
		// move. Repeat until we find no match for the input immediately after
		// what was consumed by the last emitCopy call.
		//
		// If we exit this loop normally then we need to call emitLiteral next,
		// though we don't yet know how big the literal will be. We handle that
		// by proceeding to the next iteration of the main loop. We also can
		// exit this loop via goto if we get close to exhausting the input.
		for {
			// Invariant: we have a 4-byte match at s, and no need to emit any
			// literal bytes prior to s.
			base := s

			// Extend the 4-byte match as long as possible.
			//
			// This is an inlined version of:
			//	s = extendMatch(src, candidate+4, s+4)
			s += 4
			for i := candidate + 4; s < len(src) && src[i] == src[s]; i, s = i+1, s+1 {
			}

			d += emitCopy(dst[d:], base-candidate, s-base)
			nextEmit = s
			if s >= sLimit {
				goto emitRemainder
			}

			// We could immediately start working at s now, but to improve
			// compression we first update the hash table at s-1 and at s. If
			// another emitCopy is not our next move, also calculate nextHash
			// at s+1. At least on GOARCH=amd64, these three hash calculations
			// are faster as one load64 call (with some shifts) instead of
			// three load32 calls.
			x := load64(src, s-1)
			prevHash := hash(uint32(x>>0), shift)
			table[prevHash&tableMask] = uint16(s - 1)
			currHash := hash(uint32(x>>8), shift)
			candidate = int(table[currHash&tableMask])
			table[currHash&tableMask] = uint16(s)
			if uint32(x>>8) != load32(src, candidate) {
				nextHash = hash(uint32(x>>16), shift)
				s++
				break
			}
		}
	}

emitRemainder:
	if nextEmit < len(src) {
		d += emitLiteral(dst[d:], src[nextEmit:])
	}
	return d
}
0707010000086F000081A4000000000000000000000001645E367C00000F4F000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/internal/snapref/snappy.go   // Copyright 2011 The Snappy-Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package snapref implements the Snappy compression format. It aims for very
// high speeds and reasonable compression.
//
// There are actually two Snappy formats: block and stream. They are related,
// but different: trying to decompress block-compressed data as a Snappy stream
// will fail, and vice versa. The block format is the Decode and Encode
// functions and the stream format is the Reader and Writer types.
//
// The block format, the more common case, is used when the complete size (the
// number of bytes) of the original data is known upfront, at the time
// compression starts. The stream format, also known as the framing format, is
// for when that isn't always true.
//
// The canonical, C++ implementation is at https://github.com/google/snappy and
// it only implements the block format.
package snapref

import (
	"hash/crc32"
)

/*
Each encoded block begins with the varint-encoded length of the decoded data,
followed by a sequence of chunks. Chunks begin and end on byte boundaries. The
first byte of each chunk is broken into its 2 least and 6 most significant bits
called l and m: l ranges in [0, 4) and m ranges in [0, 64). l is the chunk tag.
Zero means a literal tag. All other values mean a copy tag.

For literal tags:
  - If m < 60, the next 1 + m bytes are literal bytes.
  - Otherwise, let n be the little-endian unsigned integer denoted by the next
    m - 59 bytes. The next 1 + n bytes after that are literal bytes.

For copy tags, length bytes are copied from offset bytes ago, in the style of
Lempel-Ziv compression algorithms. In particular:
  - For l == 1, the offset ranges in [0, 1<<11) and the length in [4, 12).
    The length is 4 + the low 3 bits of m. The high 3 bits of m form bits 8-10
    of the offset. The next byte is bits 0-7 of the offset.
  - For l == 2, the offset ranges in [0, 1<<16) and the length in [1, 65).
    The length is 1 + m. The offset is the little-endian unsigned integer
    denoted by the next 2 bytes.
  - For l == 3, this tag is a legacy format that is no longer issued by most
    encoders. Nonetheless, the offset ranges in [0, 1<<32) and the length in
    [1, 65). The length is 1 + m. The offset is the little-endian unsigned
    integer denoted by the next 4 bytes.
*/
const (
	tagLiteral = 0x00
	tagCopy1   = 0x01
	tagCopy2   = 0x02
	tagCopy4   = 0x03
)

const (
	checksumSize    = 4
	chunkHeaderSize = 4
	magicChunk      = "\xff\x06\x00\x00" + magicBody
	magicBody       = "sNaPpY"

	// maxBlockSize is the maximum size of the input to encodeBlock. It is not
	// part of the wire format per se, but some parts of the encoder assume
	// that an offset fits into a uint16.
	//
	// Also, for the framing format (Writer type instead of Encode function),
	// https://github.com/google/snappy/blob/master/framing_format.txt says
	// that "the uncompressed data in a chunk must be no longer than 65536
	// bytes".
	maxBlockSize = 65536

	// maxEncodedLenOfMaxBlockSize equals MaxEncodedLen(maxBlockSize), but is
	// hard coded to be a const instead of a variable, so that obufLen can also
	// be a const. Their equivalence is confirmed by
	// TestMaxEncodedLenOfMaxBlockSize.
	maxEncodedLenOfMaxBlockSize = 76490

	obufHeaderLen = len(magicChunk) + checksumSize + chunkHeaderSize
	obufLen       = obufHeaderLen + maxEncodedLenOfMaxBlockSize
)

const (
	chunkTypeCompressedData   = 0x00
	chunkTypeUncompressedData = 0x01
	chunkTypePadding          = 0xfe
	chunkTypeStreamIdentifier = 0xff
)

var crcTable = crc32.MakeTable(crc32.Castagnoli)

// crc implements the checksum specified in section 3 of
// https://github.com/google/snappy/blob/master/framing_format.txt
func crc(b []byte) uint32 {
	c := crc32.Update(0, crcTable, b)
	return uint32(c>>15|c<<17) + 0xa282ead8
}
 07070100000870000081A4000000000000000000000001645E367C0000002F000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/s2sx.mod module github.com/klauspost/compress

go 1.16

 07070100000871000081A4000000000000000000000001645E367C00000000000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/s2sx.sum 07070100000872000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd 07070100000873000081A4000000000000000000000001645E367C0000536A000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/README.md   # zstd 

[Zstandard](https://facebook.github.io/zstd/) is a real-time compression algorithm, providing high compression ratios. 
It offers a very wide range of compression / speed trade-off, while being backed by a very fast decoder.
A high performance compression algorithm is implemented. For now focused on speed. 

This package provides [compression](#Compressor) to and [decompression](#Decompressor) of Zstandard content. 

This package is pure Go and without use of "unsafe". 

The `zstd` package is provided as open source software using a Go standard license.

Currently the package is heavily optimized for 64 bit processors and will be significantly slower on 32 bit processors.

For seekable zstd streams, see [this excellent package](https://github.com/SaveTheRbtz/zstd-seekable-format-go).

## Installation

Install using `go get -u github.com/klauspost/compress`. The package is located in `github.com/klauspost/compress/zstd`.

[![Go Reference](https://pkg.go.dev/badge/github.com/klauspost/compress/zstd.svg)](https://pkg.go.dev/github.com/klauspost/compress/zstd)

## Compressor

### Status: 

STABLE - there may always be subtle bugs, a wide variety of content has been tested and the library is actively 
used by several projects. This library is being [fuzz-tested](https://github.com/klauspost/compress-fuzz) for all updates.

There may still be specific combinations of data types/size/settings that could lead to edge cases, 
so as always, testing is recommended.  

For now, a high speed (fastest) and medium-fast (default) compressor has been implemented. 

* The "Fastest" compression ratio is roughly equivalent to zstd level 1. 
* The "Default" compression ratio is roughly equivalent to zstd level 3 (default).
* The "Better" compression ratio is roughly equivalent to zstd level 7.
* The "Best" compression ratio is roughly equivalent to zstd level 11.

In terms of speed, it is typically 2x as fast as the stdlib deflate/gzip in its fastest mode. 
The compression ratio compared to stdlib is around level 3, but usually 3x as fast.

 
### Usage

An Encoder can be used for either compressing a stream via the
`io.WriteCloser` interface supported by the Encoder or as multiple independent
tasks via the `EncodeAll` function.
Smaller encodes are encouraged to use the EncodeAll function.
Use `NewWriter` to create a new instance that can be used for both.

To create a writer with default options, do like this:

```Go
// Compress input to output.
func Compress(in io.Reader, out io.Writer) error {
    enc, err := zstd.NewWriter(out)
    if err != nil {
        return err
    }
    _, err = io.Copy(enc, in)
    if err != nil {
        enc.Close()
        return err
    }
    return enc.Close()
}
```

Now you can encode by writing data to `enc`. The output will be finished writing when `Close()` is called.
Even if your encode fails, you should still call `Close()` to release any resources that may be held up.  

The above is fine for big encodes. However, whenever possible try to *reuse* the writer.

To reuse the encoder, you can use the `Reset(io.Writer)` function to change to another output. 
This will allow the encoder to reuse all resources and avoid wasteful allocations. 

Currently stream encoding has 'light' concurrency, meaning up to 2 goroutines can be working on part 
of a stream. This is independent of the `WithEncoderConcurrency(n)`, but that is likely to change 
in the future. So if you want to limit concurrency for future updates, specify the concurrency
you would like.

If you would like stream encoding to be done without spawning async goroutines, use `WithEncoderConcurrency(1)`
which will compress input as each block is completed, blocking on writes until each has completed.

You can specify your desired compression level using `WithEncoderLevel()` option. Currently only pre-defined 
compression settings can be specified.

#### Future Compatibility Guarantees

This will be an evolving project. When using this package it is important to note that both the compression efficiency and speed may change.

The goal will be to keep the default efficiency at the default zstd (level 3). 
However the encoding should never be assumed to remain the same, 
and you should not use hashes of compressed output for similarity checks.

The Encoder can be assumed to produce the same output from the exact same code version.
However, the may be modes in the future that break this, 
although they will not be enabled without an explicit option.   

This encoder is not designed to (and will probably never) output the exact same bitstream as the reference encoder.

Also note, that the cgo decompressor currently does not [report all errors on invalid input](https://github.com/DataDog/zstd/issues/59),
[omits error checks](https://github.com/DataDog/zstd/issues/61), [ignores checksums](https://github.com/DataDog/zstd/issues/43) 
and seems to ignore concatenated streams, even though [it is part of the spec](https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#frames).

#### Blocks

For compressing small blocks, the returned encoder has a function called `EncodeAll(src, dst []byte) []byte`.

`EncodeAll` will encode all input in src and append it to dst.
This function can be called concurrently. 
Each call will only run on a same goroutine as the caller.

Encoded blocks can be concatenated and the result will be the combined input stream.
Data compressed with EncodeAll can be decoded with the Decoder, using either a stream or `DecodeAll`.

Especially when encoding blocks you should take special care to reuse the encoder. 
This will effectively make it run without allocations after a warmup period. 
To make it run completely without allocations, supply a destination buffer with space for all content.   

```Go
import "github.com/klauspost/compress/zstd"

// Create a writer that caches compressors.
// For this operation type we supply a nil Reader.
var encoder, _ = zstd.NewWriter(nil)

// Compress a buffer. 
// If you have a destination buffer, the allocation in the call can also be eliminated.
func Compress(src []byte) []byte {
    return encoder.EncodeAll(src, make([]byte, 0, len(src)))
} 
```

You can control the maximum number of concurrent encodes using the `WithEncoderConcurrency(n)` 
option when creating the writer.

Using the Encoder for both a stream and individual blocks concurrently is safe. 

### Performance

I have collected some speed examples to compare speed and compression against other compressors.

* `file` is the input file.
* `out` is the compressor used. `zskp` is this package. `zstd` is the Datadog cgo library. `gzstd/gzkp` is gzip standard and this library.
* `level` is the compression level used. For `zskp` level 1 is "fastest", level 2 is "default"; 3 is "better", 4 is "best".
* `insize`/`outsize` is the input/output size.
* `millis` is the number of milliseconds used for compression.
* `mb/s` is megabytes (2^20 bytes) per second.

```
Silesia Corpus:
http://sun.aei.polsl.pl/~sdeor/corpus/silesia.zip

This package:
file    out     level   insize      outsize     millis  mb/s
silesia.tar zskp    1   211947520   73821326    634     318.47
silesia.tar zskp    2   211947520   67655404    1508    133.96
silesia.tar zskp    3   211947520   64746933    3000    67.37
silesia.tar zskp    4   211947520   60073508    16926   11.94

cgo zstd:
silesia.tar zstd    1   211947520   73605392    543     371.56
silesia.tar zstd    3   211947520   66793289    864     233.68
silesia.tar zstd    6   211947520   62916450    1913    105.66
silesia.tar zstd    9   211947520   60212393    5063    39.92

gzip, stdlib/this package:
silesia.tar gzstd   1   211947520   80007735    1498    134.87
silesia.tar gzkp    1   211947520   80088272    1009    200.31

GOB stream of binary data. Highly compressible.
https://files.klauspost.com/compress/gob-stream.7z

file        out     level   insize  outsize     millis  mb/s
gob-stream  zskp    1   1911399616  233948096   3230    564.34
gob-stream  zskp    2   1911399616  203997694   4997    364.73
gob-stream  zskp    3   1911399616  173526523   13435   135.68
gob-stream  zskp    4   1911399616  162195235   47559   38.33

gob-stream  zstd    1   1911399616  249810424   2637    691.26
gob-stream  zstd    3   1911399616  208192146   3490    522.31
gob-stream  zstd    6   1911399616  193632038   6687    272.56
gob-stream  zstd    9   1911399616  177620386   16175   112.70

gob-stream  gzstd   1   1911399616  357382013   9046    201.49
gob-stream  gzkp    1   1911399616  359136669   4885    373.08

The test data for the Large Text Compression Benchmark is the first
10^9 bytes of the English Wikipedia dump on Mar. 3, 2006.
http://mattmahoney.net/dc/textdata.html

file    out level   insize      outsize     millis  mb/s
enwik9  zskp    1   1000000000  343833605   3687    258.64
enwik9  zskp    2   1000000000  317001237   7672    124.29
enwik9  zskp    3   1000000000  291915823   15923   59.89
enwik9  zskp    4   1000000000  261710291   77697   12.27

enwik9  zstd    1   1000000000  358072021   3110    306.65
enwik9  zstd    3   1000000000  313734672   4784    199.35
enwik9  zstd    6   1000000000  295138875   10290   92.68
enwik9  zstd    9   1000000000  278348700   28549   33.40

enwik9  gzstd   1   1000000000  382578136   8608    110.78
enwik9  gzkp    1   1000000000  382781160   5628    169.45

Highly compressible JSON file.
https://files.klauspost.com/compress/github-june-2days-2019.json.zst

file                        out level   insize      outsize     millis  mb/s
github-june-2days-2019.json zskp    1   6273951764  697439532   9789    611.17
github-june-2days-2019.json zskp    2   6273951764  610876538   18553   322.49
github-june-2days-2019.json zskp    3   6273951764  517662858   44186   135.41
github-june-2days-2019.json zskp    4   6273951764  464617114   165373  36.18

github-june-2days-2019.json zstd    1   6273951764  766284037   8450    708.00
github-june-2days-2019.json zstd    3   6273951764  661889476   10927   547.57
github-june-2days-2019.json zstd    6   6273951764  642756859   22996   260.18
github-june-2days-2019.json zstd    9   6273951764  601974523   52413   114.16

github-june-2days-2019.json gzstd   1   6273951764  1164397768  26793   223.32
github-june-2days-2019.json gzkp    1   6273951764  1120631856  17693   338.16

VM Image, Linux mint with a few installed applications:
https://files.klauspost.com/compress/rawstudio-mint14.7z

file                    out level   insize      outsize     millis  mb/s
rawstudio-mint14.tar    zskp    1   8558382592  3718400221  18206   448.29
rawstudio-mint14.tar    zskp    2   8558382592  3326118337  37074   220.15
rawstudio-mint14.tar    zskp    3   8558382592  3163842361  87306   93.49
rawstudio-mint14.tar    zskp    4   8558382592  2970480650  783862  10.41

rawstudio-mint14.tar    zstd    1   8558382592  3609250104  17136   476.27
rawstudio-mint14.tar    zstd    3   8558382592  3341679997  29262   278.92
rawstudio-mint14.tar    zstd    6   8558382592  3235846406  77904   104.77
rawstudio-mint14.tar    zstd    9   8558382592  3160778861  140946  57.91

rawstudio-mint14.tar    gzstd   1   8558382592  3926234992  51345   158.96
rawstudio-mint14.tar    gzkp    1   8558382592  3960117298  36722   222.26

CSV data:
https://files.klauspost.com/compress/nyc-taxi-data-10M.csv.zst

file                    out level   insize      outsize     millis  mb/s
nyc-taxi-data-10M.csv   zskp    1   3325605752  641319332   9462    335.17
nyc-taxi-data-10M.csv   zskp    2   3325605752  588976126   17570   180.50
nyc-taxi-data-10M.csv   zskp    3   3325605752  529329260   32432   97.79
nyc-taxi-data-10M.csv   zskp    4   3325605752  474949772   138025  22.98

nyc-taxi-data-10M.csv   zstd    1   3325605752  687399637   8233    385.18
nyc-taxi-data-10M.csv   zstd    3   3325605752  598514411   10065   315.07
nyc-taxi-data-10M.csv   zstd    6   3325605752  570522953   20038   158.27
nyc-taxi-data-10M.csv   zstd    9   3325605752  517554797   64565   49.12

nyc-taxi-data-10M.csv   gzstd   1   3325605752  928654908   21270   149.11
nyc-taxi-data-10M.csv   gzkp    1   3325605752  922273214   13929   227.68
```

## Decompressor

Staus: STABLE - there may still be subtle bugs, but a wide variety of content has been tested.

This library is being continuously [fuzz-tested](https://github.com/klauspost/compress-fuzz),
kindly supplied by [fuzzit.dev](https://fuzzit.dev/). 
The main purpose of the fuzz testing is to ensure that it is not possible to crash the decoder, 
or run it past its limits with ANY input provided.  
 
### Usage

The package has been designed for two main usages, big streams of data and smaller in-memory buffers. 
There are two main usages of the package for these. Both of them are accessed by creating a `Decoder`.

For streaming use a simple setup could look like this:

```Go
import "github.com/klauspost/compress/zstd"

func Decompress(in io.Reader, out io.Writer) error {
    d, err := zstd.NewReader(in)
    if err != nil {
        return err
    }
    defer d.Close()
    
    // Copy content...
    _, err = io.Copy(out, d)
    return err
}
```

It is important to use the "Close" function when you no longer need the Reader to stop running goroutines, 
when running with default settings.
Goroutines will exit once an error has been returned, including `io.EOF` at the end of a stream.

Streams are decoded concurrently in 4 asynchronous stages to give the best possible throughput.
However, if you prefer synchronous decompression, use `WithDecoderConcurrency(1)` which will decompress data 
as it is being requested only.

For decoding buffers, it could look something like this:

```Go
import "github.com/klauspost/compress/zstd"

// Create a reader that caches decompressors.
// For this operation type we supply a nil Reader.
var decoder, _ = zstd.NewReader(nil, WithDecoderConcurrency(0))

// Decompress a buffer. We don't supply a destination buffer,
// so it will be allocated by the decoder.
func Decompress(src []byte) ([]byte, error) {
    return decoder.DecodeAll(src, nil)
} 
```

Both of these cases should provide the functionality needed. 
The decoder can be used for *concurrent* decompression of multiple buffers.
By default 4 decompressors will be created. 

It will only allow a certain number of concurrent operations to run. 
To tweak that yourself use the `WithDecoderConcurrency(n)` option when creating the decoder.
It is possible to use `WithDecoderConcurrency(0)` to create GOMAXPROCS decoders.

### Dictionaries

Data compressed with [dictionaries](https://github.com/facebook/zstd#the-case-for-small-data-compression) can be decompressed.

Dictionaries are added individually to Decoders.
Dictionaries are generated by the `zstd --train` command and contains an initial state for the decoder.
To add a dictionary use the `WithDecoderDicts(dicts ...[]byte)` option with the dictionary data.
Several dictionaries can be added at once.

The dictionary will be used automatically for the data that specifies them.
A re-used Decoder will still contain the dictionaries registered.

When registering multiple dictionaries with the same ID, the last one will be used.

It is possible to use dictionaries when compressing data.

To enable a dictionary use `WithEncoderDict(dict []byte)`. Here only one dictionary will be used 
and it will likely be used even if it doesn't improve compression. 

The used dictionary must be used to decompress the content.

For any real gains, the dictionary should be built with similar data. 
If an unsuitable dictionary is used the output may be slightly larger than using no dictionary.
Use the [zstd commandline tool](https://github.com/facebook/zstd/releases) to build a dictionary from sample data.
For information see [zstd dictionary information](https://github.com/facebook/zstd#the-case-for-small-data-compression). 

For now there is a fixed startup performance penalty for compressing content with dictionaries. 
This will likely be improved over time. Just be aware to test performance when implementing.  

### Allocation-less operation

The decoder has been designed to operate without allocations after a warmup. 

This means that you should *store* the decoder for best performance. 
To re-use a stream decoder, use the `Reset(r io.Reader) error` to switch to another stream.
A decoder can safely be re-used even if the previous stream failed.

To release the resources, you must call the `Close()` function on a decoder.
After this it can *no longer be reused*, but all running goroutines will be stopped.
So you *must* use this if you will no longer need the Reader.

For decompressing smaller buffers a single decoder can be used.
When decoding buffers, you can supply a destination slice with length 0 and your expected capacity.
In this case no unneeded allocations should be made. 

### Concurrency

The buffer decoder does everything on the same goroutine and does nothing concurrently.
It can however decode several buffers concurrently. Use `WithDecoderConcurrency(n)` to limit that.

The stream decoder will create goroutines that:

1) Reads input and splits the input into blocks.
2) Decompression of literals.
3) Decompression of sequences.
4) Reconstruction of output stream.

So effectively this also means the decoder will "read ahead" and prepare data to always be available for output.

The concurrency level will, for streams, determine how many blocks ahead the compression will start.

Since "blocks" are quite dependent on the output of the previous block stream decoding will only have limited concurrency.

In practice this means that concurrency is often limited to utilizing about 3 cores effectively.
  
### Benchmarks

The first two are streaming decodes and the last are smaller inputs. 

Running on AMD Ryzen 9 3950X 16-Core Processor. AMD64 assembly used.

```
BenchmarkDecoderSilesia-32    	                   5	 206878840 ns/op	1024.50 MB/s	   49808 B/op	      43 allocs/op
BenchmarkDecoderEnwik9-32                          1	1271809000 ns/op	 786.28 MB/s	   72048 B/op	      52 allocs/op

Concurrent blocks, performance:

BenchmarkDecoder_DecodeAllParallel/kppkn.gtb.zst-32         	   67356	     17857 ns/op	10321.96 MB/s	        22.48 pct	     102 B/op	       0 allocs/op
BenchmarkDecoder_DecodeAllParallel/geo.protodata.zst-32     	  266656	      4421 ns/op	26823.21 MB/s	        11.89 pct	      19 B/op	       0 allocs/op
BenchmarkDecoder_DecodeAllParallel/plrabn12.txt.zst-32      	   20992	     56842 ns/op	8477.17 MB/s	        39.90 pct	     754 B/op	       0 allocs/op
BenchmarkDecoder_DecodeAllParallel/lcet10.txt.zst-32        	   27456	     43932 ns/op	9714.01 MB/s	        33.27 pct	     524 B/op	       0 allocs/op
BenchmarkDecoder_DecodeAllParallel/asyoulik.txt.zst-32      	   78432	     15047 ns/op	8319.15 MB/s	        40.34 pct	      66 B/op	       0 allocs/op
BenchmarkDecoder_DecodeAllParallel/alice29.txt.zst-32       	   65800	     18436 ns/op	8249.63 MB/s	        37.75 pct	      88 B/op	       0 allocs/op
BenchmarkDecoder_DecodeAllParallel/html_x_4.zst-32          	  102993	     11523 ns/op	35546.09 MB/s	         3.637 pct	     143 B/op	       0 allocs/op
BenchmarkDecoder_DecodeAllParallel/paper-100k.pdf.zst-32    	 1000000	      1070 ns/op	95720.98 MB/s	        80.53 pct	       3 B/op	       0 allocs/op
BenchmarkDecoder_DecodeAllParallel/fireworks.jpeg.zst-32    	  749802	      1752 ns/op	70272.35 MB/s	       100.0 pct	       5 B/op	       0 allocs/op
BenchmarkDecoder_DecodeAllParallel/urls.10K.zst-32          	   22640	     52934 ns/op	13263.37 MB/s	        26.25 pct	    1014 B/op	       0 allocs/op
BenchmarkDecoder_DecodeAllParallel/html.zst-32              	  226412	      5232 ns/op	19572.27 MB/s	        14.49 pct	      20 B/op	       0 allocs/op
BenchmarkDecoder_DecodeAllParallel/comp-data.bin.zst-32     	  923041	      1276 ns/op	3194.71 MB/s	        31.26 pct	       0 B/op	       0 allocs/op
```

This reflects the performance around May 2022, but this may be out of date.

## Zstd inside ZIP files

It is possible to use zstandard to compress individual files inside zip archives.
While this isn't widely supported it can be useful for internal files.

To support the compression and decompression of these files you must register a compressor and decompressor.

It is highly recommended registering the (de)compressors on individual zip Reader/Writer and NOT
use the global registration functions. The main reason for this is that 2 registrations from 
different packages will result in a panic.

It is a good idea to only have a single compressor and decompressor, since they can be used for multiple zip
files concurrently, and using a single instance will allow reusing some resources.

See [this example](https://pkg.go.dev/github.com/klauspost/compress/zstd#example-ZipCompressor) for 
how to compress and decompress files inside zip archives.

# Contributions

Contributions are always welcome. 
For new features/fixes, remember to add tests and for performance enhancements include benchmarks.

For general feedback and experience reports, feel free to open an issue or write me on [Twitter](https://twitter.com/sh0dan).

This package includes the excellent [`github.com/cespare/xxhash`](https://github.com/cespare/xxhash) package Copyright (c) 2016 Caleb Spare.
  07070100000874000081A4000000000000000000000001645E367C00000DA3000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/bitreader.go    // Copyright 2019+ Klaus Post. All rights reserved.
// License information can be found in the LICENSE file.
// Based on work by Yann Collet, released under BSD License.

package zstd

import (
	"encoding/binary"
	"errors"
	"fmt"
	"io"
	"math/bits"
)

// bitReader reads a bitstream in reverse.
// The last set bit indicates the start of the stream and is used
// for aligning the input.
type bitReader struct {
	in       []byte
	off      uint   // next byte to read is at in[off - 1]
	value    uint64 // Maybe use [16]byte, but shifting is awkward.
	bitsRead uint8
}

// init initializes and resets the bit reader.
func (b *bitReader) init(in []byte) error {
	if len(in) < 1 {
		return errors.New("corrupt stream: too short")
	}
	b.in = in
	b.off = uint(len(in))
	// The highest bit of the last byte indicates where to start
	v := in[len(in)-1]
	if v == 0 {
		return errors.New("corrupt stream, did not find end of stream")
	}
	b.bitsRead = 64
	b.value = 0
	if len(in) >= 8 {
		b.fillFastStart()
	} else {
		b.fill()
		b.fill()
	}
	b.bitsRead += 8 - uint8(highBits(uint32(v)))
	return nil
}

// getBits will return n bits. n can be 0.
func (b *bitReader) getBits(n uint8) int {
	if n == 0 /*|| b.bitsRead >= 64 */ {
		return 0
	}
	return int(b.get32BitsFast(n))
}

// get32BitsFast requires that at least one bit is requested every time.
// There are no checks if the buffer is filled.
func (b *bitReader) get32BitsFast(n uint8) uint32 {
	const regMask = 64 - 1
	v := uint32((b.value << (b.bitsRead & regMask)) >> ((regMask + 1 - n) & regMask))
	b.bitsRead += n
	return v
}

// fillFast() will make sure at least 32 bits are available.
// There must be at least 4 bytes available.
func (b *bitReader) fillFast() {
	if b.bitsRead < 32 {
		return
	}
	// 2 bounds checks.
	v := b.in[b.off-4:]
	v = v[:4]
	low := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24)
	b.value = (b.value << 32) | uint64(low)
	b.bitsRead -= 32
	b.off -= 4
}

// fillFastStart() assumes the bitreader is empty and there is at least 8 bytes to read.
func (b *bitReader) fillFastStart() {
	// Do single re-slice to avoid bounds checks.
	b.value = binary.LittleEndian.Uint64(b.in[b.off-8:])
	b.bitsRead = 0
	b.off -= 8
}

// fill() will make sure at least 32 bits are available.
func (b *bitReader) fill() {
	if b.bitsRead < 32 {
		return
	}
	if b.off >= 4 {
		v := b.in[b.off-4:]
		v = v[:4]
		low := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24)
		b.value = (b.value << 32) | uint64(low)
		b.bitsRead -= 32
		b.off -= 4
		return
	}
	for b.off > 0 {
		b.value = (b.value << 8) | uint64(b.in[b.off-1])
		b.bitsRead -= 8
		b.off--
	}
}

// finished returns true if all bits have been read from the bit stream.
func (b *bitReader) finished() bool {
	return b.off == 0 && b.bitsRead >= 64
}

// overread returns true if more bits have been requested than is on the stream.
func (b *bitReader) overread() bool {
	return b.bitsRead > 64
}

// remain returns the number of bits remaining.
func (b *bitReader) remain() uint {
	return b.off*8 + 64 - uint(b.bitsRead)
}

// close the bitstream and returns an error if out-of-buffer reads occurred.
func (b *bitReader) close() error {
	// Release reference.
	b.in = nil
	if !b.finished() {
		return fmt.Errorf("%d extra bits on block, should be 0", b.remain())
	}
	if b.bitsRead > 64 {
		return io.ErrUnexpectedEOF
	}
	return nil
}

func highBits(val uint32) (n uint32) {
	return uint32(bits.Len32(val) - 1)
}
 07070100000875000081A4000000000000000000000001645E367C00000D8F000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/bitwriter.go    // Copyright 2018 Klaus Post. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Based on work Copyright (c) 2013, Yann Collet, released under BSD License.

package zstd

// bitWriter will write bits.
// First bit will be LSB of the first byte of output.
type bitWriter struct {
	bitContainer uint64
	nBits        uint8
	out          []byte
}

// bitMask16 is bitmasks. Has extra to avoid bounds check.
var bitMask16 = [32]uint16{
	0, 1, 3, 7, 0xF, 0x1F,
	0x3F, 0x7F, 0xFF, 0x1FF, 0x3FF, 0x7FF,
	0xFFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF, 0xFFFF,
	0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
	0xFFFF, 0xFFFF} /* up to 16 bits */

var bitMask32 = [32]uint32{
	0, 1, 3, 7, 0xF, 0x1F, 0x3F, 0x7F, 0xFF,
	0x1FF, 0x3FF, 0x7FF, 0xFFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF,
	0x1ffff, 0x3ffff, 0x7FFFF, 0xfFFFF, 0x1fFFFF, 0x3fFFFF, 0x7fFFFF, 0xffFFFF,
	0x1ffFFFF, 0x3ffFFFF, 0x7ffFFFF, 0xfffFFFF, 0x1fffFFFF, 0x3fffFFFF, 0x7fffFFFF,
} // up to 32 bits

// addBits16NC will add up to 16 bits.
// It will not check if there is space for them,
// so the caller must ensure that it has flushed recently.
func (b *bitWriter) addBits16NC(value uint16, bits uint8) {
	b.bitContainer |= uint64(value&bitMask16[bits&31]) << (b.nBits & 63)
	b.nBits += bits
}

// addBits32NC will add up to 31 bits.
// It will not check if there is space for them,
// so the caller must ensure that it has flushed recently.
func (b *bitWriter) addBits32NC(value uint32, bits uint8) {
	b.bitContainer |= uint64(value&bitMask32[bits&31]) << (b.nBits & 63)
	b.nBits += bits
}

// addBits64NC will add up to 64 bits.
// There must be space for 32 bits.
func (b *bitWriter) addBits64NC(value uint64, bits uint8) {
	if bits <= 31 {
		b.addBits32Clean(uint32(value), bits)
		return
	}
	b.addBits32Clean(uint32(value), 32)
	b.flush32()
	b.addBits32Clean(uint32(value>>32), bits-32)
}

// addBits32Clean will add up to 32 bits.
// It will not check if there is space for them.
// The input must not contain more bits than specified.
func (b *bitWriter) addBits32Clean(value uint32, bits uint8) {
	b.bitContainer |= uint64(value) << (b.nBits & 63)
	b.nBits += bits
}

// addBits16Clean will add up to 16 bits. value may not contain more set bits than indicated.
// It will not check if there is space for them, so the caller must ensure that it has flushed recently.
func (b *bitWriter) addBits16Clean(value uint16, bits uint8) {
	b.bitContainer |= uint64(value) << (b.nBits & 63)
	b.nBits += bits
}

// flush32 will flush out, so there are at least 32 bits available for writing.
func (b *bitWriter) flush32() {
	if b.nBits < 32 {
		return
	}
	b.out = append(b.out,
		byte(b.bitContainer),
		byte(b.bitContainer>>8),
		byte(b.bitContainer>>16),
		byte(b.bitContainer>>24))
	b.nBits -= 32
	b.bitContainer >>= 32
}

// flushAlign will flush remaining full bytes and align to next byte boundary.
func (b *bitWriter) flushAlign() {
	nbBytes := (b.nBits + 7) >> 3
	for i := uint8(0); i < nbBytes; i++ {
		b.out = append(b.out, byte(b.bitContainer>>(i*8)))
	}
	b.nBits = 0
	b.bitContainer = 0
}

// close will write the alignment bit and write the final byte(s)
// to the output.
func (b *bitWriter) close() error {
	// End mark
	b.addBits16Clean(1, 1)
	// flush until next byte.
	b.flushAlign()
	return nil
}

// reset and continue writing by appending to out.
func (b *bitWriter) reset(out []byte) {
	b.bitContainer = 0
	b.nBits = 0
	b.out = out
}
 07070100000876000081A4000000000000000000000001645E367C00004C5F000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/blockdec.go // Copyright 2019+ Klaus Post. All rights reserved.
// License information can be found in the LICENSE file.
// Based on work by Yann Collet, released under BSD License.

package zstd

import (
	"bytes"
	"encoding/binary"
	"errors"
	"fmt"
	"hash/crc32"
	"io"
	"os"
	"path/filepath"
	"sync"

	"github.com/klauspost/compress/huff0"
	"github.com/klauspost/compress/zstd/internal/xxhash"
)

type blockType uint8

//go:generate stringer -type=blockType,literalsBlockType,seqCompMode,tableIndex

const (
	blockTypeRaw blockType = iota
	blockTypeRLE
	blockTypeCompressed
	blockTypeReserved
)

type literalsBlockType uint8

const (
	literalsBlockRaw literalsBlockType = iota
	literalsBlockRLE
	literalsBlockCompressed
	literalsBlockTreeless
)

const (
	// maxCompressedBlockSize is the biggest allowed compressed block size (128KB)
	maxCompressedBlockSize = 128 << 10

	compressedBlockOverAlloc    = 16
	maxCompressedBlockSizeAlloc = 128<<10 + compressedBlockOverAlloc

	// Maximum possible block size (all Raw+Uncompressed).
	maxBlockSize = (1 << 21) - 1

	maxMatchLen  = 131074
	maxSequences = 0x7f00 + 0xffff

	// We support slightly less than the reference decoder to be able to
	// use ints on 32 bit archs.
	maxOffsetBits = 30
)

var (
	huffDecoderPool = sync.Pool{New: func() interface{} {
		return &huff0.Scratch{}
	}}

	fseDecoderPool = sync.Pool{New: func() interface{} {
		return &fseDecoder{}
	}}
)

type blockDec struct {
	// Raw source data of the block.
	data        []byte
	dataStorage []byte

	// Destination of the decoded data.
	dst []byte

	// Buffer for literals data.
	literalBuf []byte

	// Window size of the block.
	WindowSize uint64

	err error

	// Check against this crc, if hasCRC is true.
	checkCRC uint32
	hasCRC   bool

	// Frame to use for singlethreaded decoding.
	// Should not be used by the decoder itself since parent may be another frame.
	localFrame *frameDec

	sequence []seqVals

	async struct {
		newHist  *history
		literals []byte
		seqData  []byte
		seqSize  int // Size of uncompressed sequences
		fcs      uint64
	}

	// Block is RLE, this is the size.
	RLESize uint32

	Type blockType

	// Is this the last block of a frame?
	Last bool

	// Use less memory
	lowMem bool
}

func (b *blockDec) String() string {
	if b == nil {
		return "<nil>"
	}
	return fmt.Sprintf("Steam Size: %d, Type: %v, Last: %t, Window: %d", len(b.data), b.Type, b.Last, b.WindowSize)
}

func newBlockDec(lowMem bool) *blockDec {
	b := blockDec{
		lowMem: lowMem,
	}
	return &b
}

// reset will reset the block.
// Input must be a start of a block and will be at the end of the block when returned.
func (b *blockDec) reset(br byteBuffer, windowSize uint64) error {
	b.WindowSize = windowSize
	tmp, err := br.readSmall(3)
	if err != nil {
		println("Reading block header:", err)
		return err
	}
	bh := uint32(tmp[0]) | (uint32(tmp[1]) << 8) | (uint32(tmp[2]) << 16)
	b.Last = bh&1 != 0
	b.Type = blockType((bh >> 1) & 3)
	// find size.
	cSize := int(bh >> 3)
	maxSize := maxCompressedBlockSizeAlloc
	switch b.Type {
	case blockTypeReserved:
		return ErrReservedBlockType
	case blockTypeRLE:
		if cSize > maxCompressedBlockSize || cSize > int(b.WindowSize) {
			if debugDecoder {
				printf("rle block too big: csize:%d block: %+v\n", uint64(cSize), b)
			}
			return ErrWindowSizeExceeded
		}
		b.RLESize = uint32(cSize)
		if b.lowMem {
			maxSize = cSize
		}
		cSize = 1
	case blockTypeCompressed:
		if debugDecoder {
			println("Data size on stream:", cSize)
		}
		b.RLESize = 0
		maxSize = maxCompressedBlockSizeAlloc
		if windowSize < maxCompressedBlockSize && b.lowMem {
			maxSize = int(windowSize) + compressedBlockOverAlloc
		}
		if cSize > maxCompressedBlockSize || uint64(cSize) > b.WindowSize {
			if debugDecoder {
				printf("compressed block too big: csize:%d block: %+v\n", uint64(cSize), b)
			}
			return ErrCompressedSizeTooBig
		}
		// Empty compressed blocks must at least be 2 bytes
		// for Literals_Block_Type and one for Sequences_Section_Header.
		if cSize < 2 {
			return ErrBlockTooSmall
		}
	case blockTypeRaw:
		if cSize > maxCompressedBlockSize || cSize > int(b.WindowSize) {
			if debugDecoder {
				printf("rle block too big: csize:%d block: %+v\n", uint64(cSize), b)
			}
			return ErrWindowSizeExceeded
		}

		b.RLESize = 0
		// We do not need a destination for raw blocks.
		maxSize = -1
	default:
		panic("Invalid block type")
	}

	// Read block data.
	if _, ok := br.(*byteBuf); !ok && cap(b.dataStorage) < cSize {
		// byteBuf doesn't need a destination buffer.
		if b.lowMem || cSize > maxCompressedBlockSize {
			b.dataStorage = make([]byte, 0, cSize+compressedBlockOverAlloc)
		} else {
			b.dataStorage = make([]byte, 0, maxCompressedBlockSizeAlloc)
		}
	}
	b.data, err = br.readBig(cSize, b.dataStorage)
	if err != nil {
		if debugDecoder {
			println("Reading block:", err, "(", cSize, ")", len(b.data))
			printf("%T", br)
		}
		return err
	}
	if cap(b.dst) <= maxSize {
		b.dst = make([]byte, 0, maxSize+1)
	}
	return nil
}

// sendEOF will make the decoder send EOF on this frame.
func (b *blockDec) sendErr(err error) {
	b.Last = true
	b.Type = blockTypeReserved
	b.err = err
}

// Close will release resources.
// Closed blockDec cannot be reset.
func (b *blockDec) Close() {
}

// decodeBuf
func (b *blockDec) decodeBuf(hist *history) error {
	switch b.Type {
	case blockTypeRLE:
		if cap(b.dst) < int(b.RLESize) {
			if b.lowMem {
				b.dst = make([]byte, b.RLESize)
			} else {
				b.dst = make([]byte, maxCompressedBlockSize)
			}
		}
		b.dst = b.dst[:b.RLESize]
		v := b.data[0]
		for i := range b.dst {
			b.dst[i] = v
		}
		hist.appendKeep(b.dst)
		return nil
	case blockTypeRaw:
		hist.appendKeep(b.data)
		return nil
	case blockTypeCompressed:
		saved := b.dst
		// Append directly to history
		if hist.ignoreBuffer == 0 {
			b.dst = hist.b
			hist.b = nil
		} else {
			b.dst = b.dst[:0]
		}
		err := b.decodeCompressed(hist)
		if debugDecoder {
			println("Decompressed to total", len(b.dst), "bytes, hash:", xxhash.Sum64(b.dst), "error:", err)
		}
		if hist.ignoreBuffer == 0 {
			hist.b = b.dst
			b.dst = saved
		} else {
			hist.appendKeep(b.dst)
		}
		return err
	case blockTypeReserved:
		// Used for returning errors.
		return b.err
	default:
		panic("Invalid block type")
	}
}

func (b *blockDec) decodeLiterals(in []byte, hist *history) (remain []byte, err error) {
	// There must be at least one byte for Literals_Block_Type and one for Sequences_Section_Header
	if len(in) < 2 {
		return in, ErrBlockTooSmall
	}

	litType := literalsBlockType(in[0] & 3)
	var litRegenSize int
	var litCompSize int
	sizeFormat := (in[0] >> 2) & 3
	var fourStreams bool
	var literals []byte
	switch litType {
	case literalsBlockRaw, literalsBlockRLE:
		switch sizeFormat {
		case 0, 2:
			// Regenerated_Size uses 5 bits (0-31). Literals_Section_Header uses 1 byte.
			litRegenSize = int(in[0] >> 3)
			in = in[1:]
		case 1:
			// Regenerated_Size uses 12 bits (0-4095). Literals_Section_Header uses 2 bytes.
			litRegenSize = int(in[0]>>4) + (int(in[1]) << 4)
			in = in[2:]
		case 3:
			//  Regenerated_Size uses 20 bits (0-1048575). Literals_Section_Header uses 3 bytes.
			if len(in) < 3 {
				println("too small: litType:", litType, " sizeFormat", sizeFormat, len(in))
				return in, ErrBlockTooSmall
			}
			litRegenSize = int(in[0]>>4) + (int(in[1]) << 4) + (int(in[2]) << 12)
			in = in[3:]
		}
	case literalsBlockCompressed, literalsBlockTreeless:
		switch sizeFormat {
		case 0, 1:
			// Both Regenerated_Size and Compressed_Size use 10 bits (0-1023).
			if len(in) < 3 {
				println("too small: litType:", litType, " sizeFormat", sizeFormat, len(in))
				return in, ErrBlockTooSmall
			}
			n := uint64(in[0]>>4) + (uint64(in[1]) << 4) + (uint64(in[2]) << 12)
			litRegenSize = int(n & 1023)
			litCompSize = int(n >> 10)
			fourStreams = sizeFormat == 1
			in = in[3:]
		case 2:
			fourStreams = true
			if len(in) < 4 {
				println("too small: litType:", litType, " sizeFormat", sizeFormat, len(in))
				return in, ErrBlockTooSmall
			}
			n := uint64(in[0]>>4) + (uint64(in[1]) << 4) + (uint64(in[2]) << 12) + (uint64(in[3]) << 20)
			litRegenSize = int(n & 16383)
			litCompSize = int(n >> 14)
			in = in[4:]
		case 3:
			fourStreams = true
			if len(in) < 5 {
				println("too small: litType:", litType, " sizeFormat", sizeFormat, len(in))
				return in, ErrBlockTooSmall
			}
			n := uint64(in[0]>>4) + (uint64(in[1]) << 4) + (uint64(in[2]) << 12) + (uint64(in[3]) << 20) + (uint64(in[4]) << 28)
			litRegenSize = int(n & 262143)
			litCompSize = int(n >> 18)
			in = in[5:]
		}
	}
	if debugDecoder {
		println("literals type:", litType, "litRegenSize:", litRegenSize, "litCompSize:", litCompSize, "sizeFormat:", sizeFormat, "4X:", fourStreams)
	}
	if litRegenSize > int(b.WindowSize) || litRegenSize > maxCompressedBlockSize {
		return in, ErrWindowSizeExceeded
	}

	switch litType {
	case literalsBlockRaw:
		if len(in) < litRegenSize {
			println("too small: litType:", litType, " sizeFormat", sizeFormat, "remain:", len(in), "want:", litRegenSize)
			return in, ErrBlockTooSmall
		}
		literals = in[:litRegenSize]
		in = in[litRegenSize:]
		//printf("Found %d uncompressed literals\n", litRegenSize)
	case literalsBlockRLE:
		if len(in) < 1 {
			println("too small: litType:", litType, " sizeFormat", sizeFormat, "remain:", len(in), "want:", 1)
			return in, ErrBlockTooSmall
		}
		if cap(b.literalBuf) < litRegenSize {
			if b.lowMem {
				b.literalBuf = make([]byte, litRegenSize, litRegenSize+compressedBlockOverAlloc)
			} else {
				b.literalBuf = make([]byte, litRegenSize, maxCompressedBlockSize+compressedBlockOverAlloc)
			}
		}
		literals = b.literalBuf[:litRegenSize]
		v := in[0]
		for i := range literals {
			literals[i] = v
		}
		in = in[1:]
		if debugDecoder {
			printf("Found %d RLE compressed literals\n", litRegenSize)
		}
	case literalsBlockTreeless:
		if len(in) < litCompSize {
			println("too small: litType:", litType, " sizeFormat", sizeFormat, "remain:", len(in), "want:", litCompSize)
			return in, ErrBlockTooSmall
		}
		// Store compressed literals, so we defer decoding until we get history.
		literals = in[:litCompSize]
		in = in[litCompSize:]
		if debugDecoder {
			printf("Found %d compressed literals\n", litCompSize)
		}
		huff := hist.huffTree
		if huff == nil {
			return in, errors.New("literal block was treeless, but no history was defined")
		}
		// Ensure we have space to store it.
		if cap(b.literalBuf) < litRegenSize {
			if b.lowMem {
				b.literalBuf = make([]byte, 0, litRegenSize+compressedBlockOverAlloc)
			} else {
				b.literalBuf = make([]byte, 0, maxCompressedBlockSize+compressedBlockOverAlloc)
			}
		}
		var err error
		// Use our out buffer.
		huff.MaxDecodedSize = litRegenSize
		if fourStreams {
			literals, err = huff.Decoder().Decompress4X(b.literalBuf[:0:litRegenSize], literals)
		} else {
			literals, err = huff.Decoder().Decompress1X(b.literalBuf[:0:litRegenSize], literals)
		}
		// Make sure we don't leak our literals buffer
		if err != nil {
			println("decompressing literals:", err)
			return in, err
		}
		if len(literals) != litRegenSize {
			return in, fmt.Errorf("literal output size mismatch want %d, got %d", litRegenSize, len(literals))
		}

	case literalsBlockCompressed:
		if len(in) < litCompSize {
			println("too small: litType:", litType, " sizeFormat", sizeFormat, "remain:", len(in), "want:", litCompSize)
			return in, ErrBlockTooSmall
		}
		literals = in[:litCompSize]
		in = in[litCompSize:]
		// Ensure we have space to store it.
		if cap(b.literalBuf) < litRegenSize {
			if b.lowMem {
				b.literalBuf = make([]byte, 0, litRegenSize+compressedBlockOverAlloc)
			} else {
				b.literalBuf = make([]byte, 0, maxCompressedBlockSize+compressedBlockOverAlloc)
			}
		}
		huff := hist.huffTree
		if huff == nil || (hist.dict != nil && huff == hist.dict.litEnc) {
			huff = huffDecoderPool.Get().(*huff0.Scratch)
			if huff == nil {
				huff = &huff0.Scratch{}
			}
		}
		var err error
		if debugDecoder {
			println("huff table input:", len(literals), "CRC:", crc32.ChecksumIEEE(literals))
		}
		huff, literals, err = huff0.ReadTable(literals, huff)
		if err != nil {
			println("reading huffman table:", err)
			return in, err
		}
		hist.huffTree = huff
		huff.MaxDecodedSize = litRegenSize
		// Use our out buffer.
		if fourStreams {
			literals, err = huff.Decoder().Decompress4X(b.literalBuf[:0:litRegenSize], literals)
		} else {
			literals, err = huff.Decoder().Decompress1X(b.literalBuf[:0:litRegenSize], literals)
		}
		if err != nil {
			println("decoding compressed literals:", err)
			return in, err
		}
		// Make sure we don't leak our literals buffer
		if len(literals) != litRegenSize {
			return in, fmt.Errorf("literal output size mismatch want %d, got %d", litRegenSize, len(literals))
		}
		// Re-cap to get extra size.
		literals = b.literalBuf[:len(literals)]
		if debugDecoder {
			printf("Decompressed %d literals into %d bytes\n", litCompSize, litRegenSize)
		}
	}
	hist.decoders.literals = literals
	return in, nil
}

// decodeCompressed will start decompressing a block.
func (b *blockDec) decodeCompressed(hist *history) error {
	in := b.data
	in, err := b.decodeLiterals(in, hist)
	if err != nil {
		return err
	}
	err = b.prepareSequences(in, hist)
	if err != nil {
		return err
	}
	if hist.decoders.nSeqs == 0 {
		b.dst = append(b.dst, hist.decoders.literals...)
		return nil
	}
	before := len(hist.decoders.out)
	err = hist.decoders.decodeSync(hist.b[hist.ignoreBuffer:])
	if err != nil {
		return err
	}
	if hist.decoders.maxSyncLen > 0 {
		hist.decoders.maxSyncLen += uint64(before)
		hist.decoders.maxSyncLen -= uint64(len(hist.decoders.out))
	}
	b.dst = hist.decoders.out
	hist.recentOffsets = hist.decoders.prevOffset
	return nil
}

func (b *blockDec) prepareSequences(in []byte, hist *history) (err error) {
	if debugDecoder {
		printf("prepareSequences: %d byte(s) input\n", len(in))
	}
	// Decode Sequences
	// https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#sequences-section
	if len(in) < 1 {
		return ErrBlockTooSmall
	}
	var nSeqs int
	seqHeader := in[0]
	switch {
	case seqHeader < 128:
		nSeqs = int(seqHeader)
		in = in[1:]
	case seqHeader < 255:
		if len(in) < 2 {
			return ErrBlockTooSmall
		}
		nSeqs = int(seqHeader-128)<<8 | int(in[1])
		in = in[2:]
	case seqHeader == 255:
		if len(in) < 3 {
			return ErrBlockTooSmall
		}
		nSeqs = 0x7f00 + int(in[1]) + (int(in[2]) << 8)
		in = in[3:]
	}
	if nSeqs == 0 && len(in) != 0 {
		// When no sequences, there should not be any more data...
		if debugDecoder {
			printf("prepareSequences: 0 sequences, but %d byte(s) left on stream\n", len(in))
		}
		return ErrUnexpectedBlockSize
	}

	var seqs = &hist.decoders
	seqs.nSeqs = nSeqs
	if nSeqs > 0 {
		if len(in) < 1 {
			return ErrBlockTooSmall
		}
		br := byteReader{b: in, off: 0}
		compMode := br.Uint8()
		br.advance(1)
		if debugDecoder {
			printf("Compression modes: 0b%b", compMode)
		}
		for i := uint(0); i < 3; i++ {
			mode := seqCompMode((compMode >> (6 - i*2)) & 3)
			if debugDecoder {
				println("Table", tableIndex(i), "is", mode)
			}
			var seq *sequenceDec
			switch tableIndex(i) {
			case tableLiteralLengths:
				seq = &seqs.litLengths
			case tableOffsets:
				seq = &seqs.offsets
			case tableMatchLengths:
				seq = &seqs.matchLengths
			default:
				panic("unknown table")
			}
			switch mode {
			case compModePredefined:
				if seq.fse != nil && !seq.fse.preDefined {
					fseDecoderPool.Put(seq.fse)
				}
				seq.fse = &fsePredef[i]
			case compModeRLE:
				if br.remain() < 1 {
					return ErrBlockTooSmall
				}
				v := br.Uint8()
				br.advance(1)
				if seq.fse == nil || seq.fse.preDefined {
					seq.fse = fseDecoderPool.Get().(*fseDecoder)
				}
				symb, err := decSymbolValue(v, symbolTableX[i])
				if err != nil {
					printf("RLE Transform table (%v) error: %v", tableIndex(i), err)
					return err
				}
				seq.fse.setRLE(symb)
				if debugDecoder {
					printf("RLE set to %+v, code: %v", symb, v)
				}
			case compModeFSE:
				println("Reading table for", tableIndex(i))
				if seq.fse == nil || seq.fse.preDefined {
					seq.fse = fseDecoderPool.Get().(*fseDecoder)
				}
				err := seq.fse.readNCount(&br, uint16(maxTableSymbol[i]))
				if err != nil {
					println("Read table error:", err)
					return err
				}
				err = seq.fse.transform(symbolTableX[i])
				if err != nil {
					println("Transform table error:", err)
					return err
				}
				if debugDecoder {
					println("Read table ok", "symbolLen:", seq.fse.symbolLen)
				}
			case compModeRepeat:
				seq.repeat = true
			}
			if br.overread() {
				return io.ErrUnexpectedEOF
			}
		}
		in = br.unread()
	}
	if debugDecoder {
		println("Literals:", len(seqs.literals), "hash:", xxhash.Sum64(seqs.literals), "and", seqs.nSeqs, "sequences.")
	}

	if nSeqs == 0 {
		if len(b.sequence) > 0 {
			b.sequence = b.sequence[:0]
		}
		return nil
	}
	br := seqs.br
	if br == nil {
		br = &bitReader{}
	}
	if err := br.init(in); err != nil {
		return err
	}

	if err := seqs.initialize(br, hist, b.dst); err != nil {
		println("initializing sequences:", err)
		return err
	}
	// Extract blocks...
	if false && hist.dict == nil {
		fatalErr := func(err error) {
			if err != nil {
				panic(err)
			}
		}
		fn := fmt.Sprintf("n-%d-lits-%d-prev-%d-%d-%d-win-%d.blk", hist.decoders.nSeqs, len(hist.decoders.literals), hist.recentOffsets[0], hist.recentOffsets[1], hist.recentOffsets[2], hist.windowSize)
		var buf bytes.Buffer
		fatalErr(binary.Write(&buf, binary.LittleEndian, hist.decoders.litLengths.fse))
		fatalErr(binary.Write(&buf, binary.LittleEndian, hist.decoders.matchLengths.fse))
		fatalErr(binary.Write(&buf, binary.LittleEndian, hist.decoders.offsets.fse))
		buf.Write(in)
		os.WriteFile(filepath.Join("testdata", "seqs", fn), buf.Bytes(), os.ModePerm)
	}

	return nil
}

func (b *blockDec) decodeSequences(hist *history) error {
	if cap(b.sequence) < hist.decoders.nSeqs {
		if b.lowMem {
			b.sequence = make([]seqVals, 0, hist.decoders.nSeqs)
		} else {
			b.sequence = make([]seqVals, 0, 0x7F00+0xffff)
		}
	}
	b.sequence = b.sequence[:hist.decoders.nSeqs]
	if hist.decoders.nSeqs == 0 {
		hist.decoders.seqSize = len(hist.decoders.literals)
		return nil
	}
	hist.decoders.windowSize = hist.windowSize
	hist.decoders.prevOffset = hist.recentOffsets

	err := hist.decoders.decode(b.sequence)
	hist.recentOffsets = hist.decoders.prevOffset
	return err
}

func (b *blockDec) executeSequences(hist *history) error {
	hbytes := hist.b
	if len(hbytes) > hist.windowSize {
		hbytes = hbytes[len(hbytes)-hist.windowSize:]
		// We do not need history anymore.
		if hist.dict != nil {
			hist.dict.content = nil
		}
	}
	hist.decoders.windowSize = hist.windowSize
	hist.decoders.out = b.dst[:0]
	err := hist.decoders.execute(b.sequence, hbytes)
	if err != nil {
		return err
	}
	return b.updateHistory(hist)
}

func (b *blockDec) updateHistory(hist *history) error {
	if len(b.data) > maxCompressedBlockSize {
		return fmt.Errorf("compressed block size too large (%d)", len(b.data))
	}
	// Set output and release references.
	b.dst = hist.decoders.out
	hist.recentOffsets = hist.decoders.prevOffset

	if b.Last {
		// if last block we don't care about history.
		println("Last block, no history returned")
		hist.b = hist.b[:0]
		return nil
	} else {
		hist.append(b.dst)
		if debugDecoder {
			println("Finished block with ", len(b.sequence), "sequences. Added", len(b.dst), "to history, now length", len(hist.b))
		}
	}
	hist.decoders.out, hist.decoders.literals = nil, nil

	return nil
}
 07070100000877000081A4000000000000000000000001645E367C00005AE6000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/blockenc.go // Copyright 2019+ Klaus Post. All rights reserved.
// License information can be found in the LICENSE file.
// Based on work by Yann Collet, released under BSD License.

package zstd

import (
	"errors"
	"fmt"
	"math"
	"math/bits"

	"github.com/klauspost/compress/huff0"
)

type blockEnc struct {
	size       int
	literals   []byte
	sequences  []seq
	coders     seqCoders
	litEnc     *huff0.Scratch
	dictLitEnc *huff0.Scratch
	wr         bitWriter

	extraLits         int
	output            []byte
	recentOffsets     [3]uint32
	prevRecentOffsets [3]uint32

	last   bool
	lowMem bool
}

// init should be used once the block has been created.
// If called more than once, the effect is the same as calling reset.
func (b *blockEnc) init() {
	if b.lowMem {
		// 1K literals
		if cap(b.literals) < 1<<10 {
			b.literals = make([]byte, 0, 1<<10)
		}
		const defSeqs = 20
		if cap(b.sequences) < defSeqs {
			b.sequences = make([]seq, 0, defSeqs)
		}
		// 1K
		if cap(b.output) < 1<<10 {
			b.output = make([]byte, 0, 1<<10)
		}
	} else {
		if cap(b.literals) < maxCompressedBlockSize {
			b.literals = make([]byte, 0, maxCompressedBlockSize)
		}
		const defSeqs = 2000
		if cap(b.sequences) < defSeqs {
			b.sequences = make([]seq, 0, defSeqs)
		}
		if cap(b.output) < maxCompressedBlockSize {
			b.output = make([]byte, 0, maxCompressedBlockSize)
		}
	}

	if b.coders.mlEnc == nil {
		b.coders.mlEnc = &fseEncoder{}
		b.coders.mlPrev = &fseEncoder{}
		b.coders.ofEnc = &fseEncoder{}
		b.coders.ofPrev = &fseEncoder{}
		b.coders.llEnc = &fseEncoder{}
		b.coders.llPrev = &fseEncoder{}
	}
	b.litEnc = &huff0.Scratch{WantLogLess: 4}
	b.reset(nil)
}

// initNewEncode can be used to reset offsets and encoders to the initial state.
func (b *blockEnc) initNewEncode() {
	b.recentOffsets = [3]uint32{1, 4, 8}
	b.litEnc.Reuse = huff0.ReusePolicyNone
	b.coders.setPrev(nil, nil, nil)
}

// reset will reset the block for a new encode, but in the same stream,
// meaning that state will be carried over, but the block content is reset.
// If a previous block is provided, the recent offsets are carried over.
func (b *blockEnc) reset(prev *blockEnc) {
	b.extraLits = 0
	b.literals = b.literals[:0]
	b.size = 0
	b.sequences = b.sequences[:0]
	b.output = b.output[:0]
	b.last = false
	if prev != nil {
		b.recentOffsets = prev.prevRecentOffsets
	}
	b.dictLitEnc = nil
}

// reset will reset the block for a new encode, but in the same stream,
// meaning that state will be carried over, but the block content is reset.
// If a previous block is provided, the recent offsets are carried over.
func (b *blockEnc) swapEncoders(prev *blockEnc) {
	b.coders.swap(&prev.coders)
	b.litEnc, prev.litEnc = prev.litEnc, b.litEnc
}

// blockHeader contains the information for a block header.
type blockHeader uint32

// setLast sets the 'last' indicator on a block.
func (h *blockHeader) setLast(b bool) {
	if b {
		*h = *h | 1
	} else {
		const mask = (1 << 24) - 2
		*h = *h & mask
	}
}

// setSize will store the compressed size of a block.
func (h *blockHeader) setSize(v uint32) {
	const mask = 7
	*h = (*h)&mask | blockHeader(v<<3)
}

// setType sets the block type.
func (h *blockHeader) setType(t blockType) {
	const mask = 1 | (((1 << 24) - 1) ^ 7)
	*h = (*h & mask) | blockHeader(t<<1)
}

// appendTo will append the block header to a slice.
func (h blockHeader) appendTo(b []byte) []byte {
	return append(b, uint8(h), uint8(h>>8), uint8(h>>16))
}

// String returns a string representation of the block.
func (h blockHeader) String() string {
	return fmt.Sprintf("Type: %d, Size: %d, Last:%t", (h>>1)&3, h>>3, h&1 == 1)
}

// literalsHeader contains literals header information.
type literalsHeader uint64

// setType can be used to set the type of literal block.
func (h *literalsHeader) setType(t literalsBlockType) {
	const mask = math.MaxUint64 - 3
	*h = (*h & mask) | literalsHeader(t)
}

// setSize can be used to set a single size, for uncompressed and RLE content.
func (h *literalsHeader) setSize(regenLen int) {
	inBits := bits.Len32(uint32(regenLen))
	// Only retain 2 bits
	const mask = 3
	lh := uint64(*h & mask)
	switch {
	case inBits < 5:
		lh |= (uint64(regenLen) << 3) | (1 << 60)
		if debugEncoder {
			got := int(lh>>3) & 0xff
			if got != regenLen {
				panic(fmt.Sprint("litRegenSize = ", regenLen, "(want) != ", got, "(got)"))
			}
		}
	case inBits < 12:
		lh |= (1 << 2) | (uint64(regenLen) << 4) | (2 << 60)
	case inBits < 20:
		lh |= (3 << 2) | (uint64(regenLen) << 4) | (3 << 60)
	default:
		panic(fmt.Errorf("internal error: block too big (%d)", regenLen))
	}
	*h = literalsHeader(lh)
}

// setSizes will set the size of a compressed literals section and the input length.
func (h *literalsHeader) setSizes(compLen, inLen int, single bool) {
	compBits, inBits := bits.Len32(uint32(compLen)), bits.Len32(uint32(inLen))
	// Only retain 2 bits
	const mask = 3
	lh := uint64(*h & mask)
	switch {
	case compBits <= 10 && inBits <= 10:
		if !single {
			lh |= 1 << 2
		}
		lh |= (uint64(inLen) << 4) | (uint64(compLen) << (10 + 4)) | (3 << 60)
		if debugEncoder {
			const mmask = (1 << 24) - 1
			n := (lh >> 4) & mmask
			if int(n&1023) != inLen {
				panic(fmt.Sprint("regensize:", int(n&1023), "!=", inLen, inBits))
			}
			if int(n>>10) != compLen {
				panic(fmt.Sprint("compsize:", int(n>>10), "!=", compLen, compBits))
			}
		}
	case compBits <= 14 && inBits <= 14:
		lh |= (2 << 2) | (uint64(inLen) << 4) | (uint64(compLen) << (14 + 4)) | (4 << 60)
		if single {
			panic("single stream used with more than 10 bits length.")
		}
	case compBits <= 18 && inBits <= 18:
		lh |= (3 << 2) | (uint64(inLen) << 4) | (uint64(compLen) << (18 + 4)) | (5 << 60)
		if single {
			panic("single stream used with more than 10 bits length.")
		}
	default:
		panic("internal error: block too big")
	}
	*h = literalsHeader(lh)
}

// appendTo will append the literals header to a byte slice.
func (h literalsHeader) appendTo(b []byte) []byte {
	size := uint8(h >> 60)
	switch size {
	case 1:
		b = append(b, uint8(h))
	case 2:
		b = append(b, uint8(h), uint8(h>>8))
	case 3:
		b = append(b, uint8(h), uint8(h>>8), uint8(h>>16))
	case 4:
		b = append(b, uint8(h), uint8(h>>8), uint8(h>>16), uint8(h>>24))
	case 5:
		b = append(b, uint8(h), uint8(h>>8), uint8(h>>16), uint8(h>>24), uint8(h>>32))
	default:
		panic(fmt.Errorf("internal error: literalsHeader has invalid size (%d)", size))
	}
	return b
}

// size returns the output size with currently set values.
func (h literalsHeader) size() int {
	return int(h >> 60)
}

func (h literalsHeader) String() string {
	return fmt.Sprintf("Type: %d, SizeFormat: %d, Size: 0x%d, Bytes:%d", literalsBlockType(h&3), (h>>2)&3, h&((1<<60)-1)>>4, h>>60)
}

// pushOffsets will push the recent offsets to the backup store.
func (b *blockEnc) pushOffsets() {
	b.prevRecentOffsets = b.recentOffsets
}

// pushOffsets will push the recent offsets to the backup store.
func (b *blockEnc) popOffsets() {
	b.recentOffsets = b.prevRecentOffsets
}

// matchOffset will adjust recent offsets and return the adjusted one,
// if it matches a previous offset.
func (b *blockEnc) matchOffset(offset, lits uint32) uint32 {
	// Check if offset is one of the recent offsets.
	// Adjusts the output offset accordingly.
	// Gives a tiny bit of compression, typically around 1%.
	if true {
		if lits > 0 {
			switch offset {
			case b.recentOffsets[0]:
				offset = 1
			case b.recentOffsets[1]:
				b.recentOffsets[1] = b.recentOffsets[0]
				b.recentOffsets[0] = offset
				offset = 2
			case b.recentOffsets[2]:
				b.recentOffsets[2] = b.recentOffsets[1]
				b.recentOffsets[1] = b.recentOffsets[0]
				b.recentOffsets[0] = offset
				offset = 3
			default:
				b.recentOffsets[2] = b.recentOffsets[1]
				b.recentOffsets[1] = b.recentOffsets[0]
				b.recentOffsets[0] = offset
				offset += 3
			}
		} else {
			switch offset {
			case b.recentOffsets[1]:
				b.recentOffsets[1] = b.recentOffsets[0]
				b.recentOffsets[0] = offset
				offset = 1
			case b.recentOffsets[2]:
				b.recentOffsets[2] = b.recentOffsets[1]
				b.recentOffsets[1] = b.recentOffsets[0]
				b.recentOffsets[0] = offset
				offset = 2
			case b.recentOffsets[0] - 1:
				b.recentOffsets[2] = b.recentOffsets[1]
				b.recentOffsets[1] = b.recentOffsets[0]
				b.recentOffsets[0] = offset
				offset = 3
			default:
				b.recentOffsets[2] = b.recentOffsets[1]
				b.recentOffsets[1] = b.recentOffsets[0]
				b.recentOffsets[0] = offset
				offset += 3
			}
		}
	} else {
		offset += 3
	}
	return offset
}

// encodeRaw can be used to set the output to a raw representation of supplied bytes.
func (b *blockEnc) encodeRaw(a []byte) {
	var bh blockHeader
	bh.setLast(b.last)
	bh.setSize(uint32(len(a)))
	bh.setType(blockTypeRaw)
	b.output = bh.appendTo(b.output[:0])
	b.output = append(b.output, a...)
	if debugEncoder {
		println("Adding RAW block, length", len(a), "last:", b.last)
	}
}

// encodeRaw can be used to set the output to a raw representation of supplied bytes.
func (b *blockEnc) encodeRawTo(dst, src []byte) []byte {
	var bh blockHeader
	bh.setLast(b.last)
	bh.setSize(uint32(len(src)))
	bh.setType(blockTypeRaw)
	dst = bh.appendTo(dst)
	dst = append(dst, src...)
	if debugEncoder {
		println("Adding RAW block, length", len(src), "last:", b.last)
	}
	return dst
}

// encodeLits can be used if the block is only litLen.
func (b *blockEnc) encodeLits(lits []byte, raw bool) error {
	var bh blockHeader
	bh.setLast(b.last)
	bh.setSize(uint32(len(lits)))

	// Don't compress extremely small blocks
	if len(lits) < 8 || (len(lits) < 32 && b.dictLitEnc == nil) || raw {
		if debugEncoder {
			println("Adding RAW block, length", len(lits), "last:", b.last)
		}
		bh.setType(blockTypeRaw)
		b.output = bh.appendTo(b.output)
		b.output = append(b.output, lits...)
		return nil
	}

	var (
		out            []byte
		reUsed, single bool
		err            error
	)
	if b.dictLitEnc != nil {
		b.litEnc.TransferCTable(b.dictLitEnc)
		b.litEnc.Reuse = huff0.ReusePolicyAllow
		b.dictLitEnc = nil
	}
	if len(lits) >= 1024 {
		// Use 4 Streams.
		out, reUsed, err = huff0.Compress4X(lits, b.litEnc)
	} else if len(lits) > 32 {
		// Use 1 stream
		single = true
		out, reUsed, err = huff0.Compress1X(lits, b.litEnc)
	} else {
		err = huff0.ErrIncompressible
	}

	switch err {
	case huff0.ErrIncompressible:
		if debugEncoder {
			println("Adding RAW block, length", len(lits), "last:", b.last)
		}
		bh.setType(blockTypeRaw)
		b.output = bh.appendTo(b.output)
		b.output = append(b.output, lits...)
		return nil
	case huff0.ErrUseRLE:
		if debugEncoder {
			println("Adding RLE block, length", len(lits))
		}
		bh.setType(blockTypeRLE)
		b.output = bh.appendTo(b.output)
		b.output = append(b.output, lits[0])
		return nil
	case nil:
	default:
		return err
	}
	// Compressed...
	// Now, allow reuse
	b.litEnc.Reuse = huff0.ReusePolicyAllow
	bh.setType(blockTypeCompressed)
	var lh literalsHeader
	if reUsed {
		if debugEncoder {
			println("Reused tree, compressed to", len(out))
		}
		lh.setType(literalsBlockTreeless)
	} else {
		if debugEncoder {
			println("New tree, compressed to", len(out), "tree size:", len(b.litEnc.OutTable))
		}
		lh.setType(literalsBlockCompressed)
	}
	// Set sizes
	lh.setSizes(len(out), len(lits), single)
	bh.setSize(uint32(len(out) + lh.size() + 1))

	// Write block headers.
	b.output = bh.appendTo(b.output)
	b.output = lh.appendTo(b.output)
	// Add compressed data.
	b.output = append(b.output, out...)
	// No sequences.
	b.output = append(b.output, 0)
	return nil
}

// fuzzFseEncoder can be used to fuzz the FSE encoder.
func fuzzFseEncoder(data []byte) int {
	if len(data) > maxSequences || len(data) < 2 {
		return 0
	}
	enc := fseEncoder{}
	hist := enc.Histogram()
	maxSym := uint8(0)
	for i, v := range data {
		v = v & 63
		data[i] = v
		hist[v]++
		if v > maxSym {
			maxSym = v
		}
	}
	if maxSym == 0 {
		// All 0
		return 0
	}
	maxCount := func(a []uint32) int {
		var max uint32
		for _, v := range a {
			if v > max {
				max = v
			}
		}
		return int(max)
	}
	cnt := maxCount(hist[:maxSym])
	if cnt == len(data) {
		// RLE
		return 0
	}
	enc.HistogramFinished(maxSym, cnt)
	err := enc.normalizeCount(len(data))
	if err != nil {
		return 0
	}
	_, err = enc.writeCount(nil)
	if err != nil {
		panic(err)
	}
	return 1
}

// encode will encode the block and append the output in b.output.
// Previous offset codes must be pushed if more blocks are expected.
func (b *blockEnc) encode(org []byte, raw, rawAllLits bool) error {
	if len(b.sequences) == 0 {
		return b.encodeLits(b.literals, rawAllLits)
	}
	// We want some difference to at least account for the headers.
	saved := b.size - len(b.literals) - (b.size >> 6)
	if saved < 16 {
		if org == nil {
			return errIncompressible
		}
		b.popOffsets()
		return b.encodeLits(org, rawAllLits)
	}

	var bh blockHeader
	var lh literalsHeader
	bh.setLast(b.last)
	bh.setType(blockTypeCompressed)
	// Store offset of the block header. Needed when we know the size.
	bhOffset := len(b.output)
	b.output = bh.appendTo(b.output)

	var (
		out            []byte
		reUsed, single bool
		err            error
	)
	if b.dictLitEnc != nil {
		b.litEnc.TransferCTable(b.dictLitEnc)
		b.litEnc.Reuse = huff0.ReusePolicyAllow
		b.dictLitEnc = nil
	}
	if len(b.literals) >= 1024 && !raw {
		// Use 4 Streams.
		out, reUsed, err = huff0.Compress4X(b.literals, b.litEnc)
	} else if len(b.literals) > 32 && !raw {
		// Use 1 stream
		single = true
		out, reUsed, err = huff0.Compress1X(b.literals, b.litEnc)
	} else {
		err = huff0.ErrIncompressible
	}

	switch err {
	case huff0.ErrIncompressible:
		lh.setType(literalsBlockRaw)
		lh.setSize(len(b.literals))
		b.output = lh.appendTo(b.output)
		b.output = append(b.output, b.literals...)
		if debugEncoder {
			println("Adding literals RAW, length", len(b.literals))
		}
	case huff0.ErrUseRLE:
		lh.setType(literalsBlockRLE)
		lh.setSize(len(b.literals))
		b.output = lh.appendTo(b.output)
		b.output = append(b.output, b.literals[0])
		if debugEncoder {
			println("Adding literals RLE")
		}
	case nil:
		// Compressed litLen...
		if reUsed {
			if debugEncoder {
				println("reused tree")
			}
			lh.setType(literalsBlockTreeless)
		} else {
			if debugEncoder {
				println("new tree, size:", len(b.litEnc.OutTable))
			}
			lh.setType(literalsBlockCompressed)
			if debugEncoder {
				_, _, err := huff0.ReadTable(out, nil)
				if err != nil {
					panic(err)
				}
			}
		}
		lh.setSizes(len(out), len(b.literals), single)
		if debugEncoder {
			printf("Compressed %d literals to %d bytes", len(b.literals), len(out))
			println("Adding literal header:", lh)
		}
		b.output = lh.appendTo(b.output)
		b.output = append(b.output, out...)
		b.litEnc.Reuse = huff0.ReusePolicyAllow
		if debugEncoder {
			println("Adding literals compressed")
		}
	default:
		if debugEncoder {
			println("Adding literals ERROR:", err)
		}
		return err
	}
	// Sequence compression

	// Write the number of sequences
	switch {
	case len(b.sequences) < 128:
		b.output = append(b.output, uint8(len(b.sequences)))
	case len(b.sequences) < 0x7f00: // TODO: this could be wrong
		n := len(b.sequences)
		b.output = append(b.output, 128+uint8(n>>8), uint8(n))
	default:
		n := len(b.sequences) - 0x7f00
		b.output = append(b.output, 255, uint8(n), uint8(n>>8))
	}
	if debugEncoder {
		println("Encoding", len(b.sequences), "sequences")
	}
	b.genCodes()
	llEnc := b.coders.llEnc
	ofEnc := b.coders.ofEnc
	mlEnc := b.coders.mlEnc
	err = llEnc.normalizeCount(len(b.sequences))
	if err != nil {
		return err
	}
	err = ofEnc.normalizeCount(len(b.sequences))
	if err != nil {
		return err
	}
	err = mlEnc.normalizeCount(len(b.sequences))
	if err != nil {
		return err
	}

	// Choose the best compression mode for each type.
	// Will evaluate the new vs predefined and previous.
	chooseComp := func(cur, prev, preDef *fseEncoder) (*fseEncoder, seqCompMode) {
		// See if predefined/previous is better
		hist := cur.count[:cur.symbolLen]
		nSize := cur.approxSize(hist) + cur.maxHeaderSize()
		predefSize := preDef.approxSize(hist)
		prevSize := prev.approxSize(hist)

		// Add a small penalty for new encoders.
		// Don't bother with extremely small (<2 byte gains).
		nSize = nSize + (nSize+2*8*16)>>4
		switch {
		case predefSize <= prevSize && predefSize <= nSize || forcePreDef:
			if debugEncoder {
				println("Using predefined", predefSize>>3, "<=", nSize>>3)
			}
			return preDef, compModePredefined
		case prevSize <= nSize:
			if debugEncoder {
				println("Using previous", prevSize>>3, "<=", nSize>>3)
			}
			return prev, compModeRepeat
		default:
			if debugEncoder {
				println("Using new, predef", predefSize>>3, ". previous:", prevSize>>3, ">", nSize>>3, "header max:", cur.maxHeaderSize()>>3, "bytes")
				println("tl:", cur.actualTableLog, "symbolLen:", cur.symbolLen, "norm:", cur.norm[:cur.symbolLen], "hist", cur.count[:cur.symbolLen])
			}
			return cur, compModeFSE
		}
	}

	// Write compression mode
	var mode uint8
	if llEnc.useRLE {
		mode |= uint8(compModeRLE) << 6
		llEnc.setRLE(b.sequences[0].llCode)
		if debugEncoder {
			println("llEnc.useRLE")
		}
	} else {
		var m seqCompMode
		llEnc, m = chooseComp(llEnc, b.coders.llPrev, &fsePredefEnc[tableLiteralLengths])
		mode |= uint8(m) << 6
	}
	if ofEnc.useRLE {
		mode |= uint8(compModeRLE) << 4
		ofEnc.setRLE(b.sequences[0].ofCode)
		if debugEncoder {
			println("ofEnc.useRLE")
		}
	} else {
		var m seqCompMode
		ofEnc, m = chooseComp(ofEnc, b.coders.ofPrev, &fsePredefEnc[tableOffsets])
		mode |= uint8(m) << 4
	}

	if mlEnc.useRLE {
		mode |= uint8(compModeRLE) << 2
		mlEnc.setRLE(b.sequences[0].mlCode)
		if debugEncoder {
			println("mlEnc.useRLE, code: ", b.sequences[0].mlCode, "value", b.sequences[0].matchLen)
		}
	} else {
		var m seqCompMode
		mlEnc, m = chooseComp(mlEnc, b.coders.mlPrev, &fsePredefEnc[tableMatchLengths])
		mode |= uint8(m) << 2
	}
	b.output = append(b.output, mode)
	if debugEncoder {
		printf("Compression modes: 0b%b", mode)
	}
	b.output, err = llEnc.writeCount(b.output)
	if err != nil {
		return err
	}
	start := len(b.output)
	b.output, err = ofEnc.writeCount(b.output)
	if err != nil {
		return err
	}
	if false {
		println("block:", b.output[start:], "tablelog", ofEnc.actualTableLog, "maxcount:", ofEnc.maxCount)
		fmt.Printf("selected TableLog: %d, Symbol length: %d\n", ofEnc.actualTableLog, ofEnc.symbolLen)
		for i, v := range ofEnc.norm[:ofEnc.symbolLen] {
			fmt.Printf("%3d: %5d -> %4d \n", i, ofEnc.count[i], v)
		}
	}
	b.output, err = mlEnc.writeCount(b.output)
	if err != nil {
		return err
	}

	// Maybe in block?
	wr := &b.wr
	wr.reset(b.output)

	var ll, of, ml cState

	// Current sequence
	seq := len(b.sequences) - 1
	s := b.sequences[seq]
	llEnc.setBits(llBitsTable[:])
	mlEnc.setBits(mlBitsTable[:])
	ofEnc.setBits(nil)

	llTT, ofTT, mlTT := llEnc.ct.symbolTT[:256], ofEnc.ct.symbolTT[:256], mlEnc.ct.symbolTT[:256]

	// We have 3 bounds checks here (and in the loop).
	// Since we are iterating backwards it is kinda hard to avoid.
	llB, ofB, mlB := llTT[s.llCode], ofTT[s.ofCode], mlTT[s.mlCode]
	ll.init(wr, &llEnc.ct, llB)
	of.init(wr, &ofEnc.ct, ofB)
	wr.flush32()
	ml.init(wr, &mlEnc.ct, mlB)

	// Each of these lookups also generates a bounds check.
	wr.addBits32NC(s.litLen, llB.outBits)
	wr.addBits32NC(s.matchLen, mlB.outBits)
	wr.flush32()
	wr.addBits32NC(s.offset, ofB.outBits)
	if debugSequences {
		println("Encoded seq", seq, s, "codes:", s.llCode, s.mlCode, s.ofCode, "states:", ll.state, ml.state, of.state, "bits:", llB, mlB, ofB)
	}
	seq--
	// Store sequences in reverse...
	for seq >= 0 {
		s = b.sequences[seq]

		ofB := ofTT[s.ofCode]
		wr.flush32() // tablelog max is below 8 for each, so it will fill max 24 bits.
		//of.encode(ofB)
		nbBitsOut := (uint32(of.state) + ofB.deltaNbBits) >> 16
		dstState := int32(of.state>>(nbBitsOut&15)) + int32(ofB.deltaFindState)
		wr.addBits16NC(of.state, uint8(nbBitsOut))
		of.state = of.stateTable[dstState]

		// Accumulate extra bits.
		outBits := ofB.outBits & 31
		extraBits := uint64(s.offset & bitMask32[outBits])
		extraBitsN := outBits

		mlB := mlTT[s.mlCode]
		//ml.encode(mlB)
		nbBitsOut = (uint32(ml.state) + mlB.deltaNbBits) >> 16
		dstState = int32(ml.state>>(nbBitsOut&15)) + int32(mlB.deltaFindState)
		wr.addBits16NC(ml.state, uint8(nbBitsOut))
		ml.state = ml.stateTable[dstState]

		outBits = mlB.outBits & 31
		extraBits = extraBits<<outBits | uint64(s.matchLen&bitMask32[outBits])
		extraBitsN += outBits

		llB := llTT[s.llCode]
		//ll.encode(llB)
		nbBitsOut = (uint32(ll.state) + llB.deltaNbBits) >> 16
		dstState = int32(ll.state>>(nbBitsOut&15)) + int32(llB.deltaFindState)
		wr.addBits16NC(ll.state, uint8(nbBitsOut))
		ll.state = ll.stateTable[dstState]

		outBits = llB.outBits & 31
		extraBits = extraBits<<outBits | uint64(s.litLen&bitMask32[outBits])
		extraBitsN += outBits

		wr.flush32()
		wr.addBits64NC(extraBits, extraBitsN)

		if debugSequences {
			println("Encoded seq", seq, s)
		}

		seq--
	}
	ml.flush(mlEnc.actualTableLog)
	of.flush(ofEnc.actualTableLog)
	ll.flush(llEnc.actualTableLog)
	err = wr.close()
	if err != nil {
		return err
	}
	b.output = wr.out

	// Maybe even add a bigger margin.
	if len(b.output)-3-bhOffset >= b.size {
		// Discard and encode as raw block.
		b.output = b.encodeRawTo(b.output[:bhOffset], org)
		b.popOffsets()
		b.litEnc.Reuse = huff0.ReusePolicyNone
		return nil
	}

	// Size is output minus block header.
	bh.setSize(uint32(len(b.output)-bhOffset) - 3)
	if debugEncoder {
		println("Rewriting block header", bh)
	}
	_ = bh.appendTo(b.output[bhOffset:bhOffset])
	b.coders.setPrev(llEnc, mlEnc, ofEnc)
	return nil
}

var errIncompressible = errors.New("incompressible")

func (b *blockEnc) genCodes() {
	if len(b.sequences) == 0 {
		// nothing to do
		return
	}
	if len(b.sequences) > math.MaxUint16 {
		panic("can only encode up to 64K sequences")
	}
	// No bounds checks after here:
	llH := b.coders.llEnc.Histogram()
	ofH := b.coders.ofEnc.Histogram()
	mlH := b.coders.mlEnc.Histogram()
	for i := range llH {
		llH[i] = 0
	}
	for i := range ofH {
		ofH[i] = 0
	}
	for i := range mlH {
		mlH[i] = 0
	}

	var llMax, ofMax, mlMax uint8
	for i := range b.sequences {
		seq := &b.sequences[i]
		v := llCode(seq.litLen)
		seq.llCode = v
		llH[v]++
		if v > llMax {
			llMax = v
		}

		v = ofCode(seq.offset)
		seq.ofCode = v
		ofH[v]++
		if v > ofMax {
			ofMax = v
		}

		v = mlCode(seq.matchLen)
		seq.mlCode = v
		mlH[v]++
		if v > mlMax {
			mlMax = v
			if debugAsserts && mlMax > maxMatchLengthSymbol {
				panic(fmt.Errorf("mlMax > maxMatchLengthSymbol (%d), matchlen: %d", mlMax, seq.matchLen))
			}
		}
	}
	maxCount := func(a []uint32) int {
		var max uint32
		for _, v := range a {
			if v > max {
				max = v
			}
		}
		return int(max)
	}
	if debugAsserts && mlMax > maxMatchLengthSymbol {
		panic(fmt.Errorf("mlMax > maxMatchLengthSymbol (%d)", mlMax))
	}
	if debugAsserts && ofMax > maxOffsetBits {
		panic(fmt.Errorf("ofMax > maxOffsetBits (%d)", ofMax))
	}
	if debugAsserts && llMax > maxLiteralLengthSymbol {
		panic(fmt.Errorf("llMax > maxLiteralLengthSymbol (%d)", llMax))
	}

	b.coders.mlEnc.HistogramFinished(mlMax, maxCount(mlH[:mlMax+1]))
	b.coders.ofEnc.HistogramFinished(ofMax, maxCount(ofH[:ofMax+1]))
	b.coders.llEnc.HistogramFinished(llMax, maxCount(llH[:llMax+1]))
}
  07070100000878000081A4000000000000000000000001645E367C00000AEC000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/blocktype_string.go // Code generated by "stringer -type=blockType,literalsBlockType,seqCompMode,tableIndex"; DO NOT EDIT.

package zstd

import "strconv"

func _() {
	// An "invalid array index" compiler error signifies that the constant values have changed.
	// Re-run the stringer command to generate them again.
	var x [1]struct{}
	_ = x[blockTypeRaw-0]
	_ = x[blockTypeRLE-1]
	_ = x[blockTypeCompressed-2]
	_ = x[blockTypeReserved-3]
}

const _blockType_name = "blockTypeRawblockTypeRLEblockTypeCompressedblockTypeReserved"

var _blockType_index = [...]uint8{0, 12, 24, 43, 60}

func (i blockType) String() string {
	if i >= blockType(len(_blockType_index)-1) {
		return "blockType(" + strconv.FormatInt(int64(i), 10) + ")"
	}
	return _blockType_name[_blockType_index[i]:_blockType_index[i+1]]
}
func _() {
	// An "invalid array index" compiler error signifies that the constant values have changed.
	// Re-run the stringer command to generate them again.
	var x [1]struct{}
	_ = x[literalsBlockRaw-0]
	_ = x[literalsBlockRLE-1]
	_ = x[literalsBlockCompressed-2]
	_ = x[literalsBlockTreeless-3]
}

const _literalsBlockType_name = "literalsBlockRawliteralsBlockRLEliteralsBlockCompressedliteralsBlockTreeless"

var _literalsBlockType_index = [...]uint8{0, 16, 32, 55, 76}

func (i literalsBlockType) String() string {
	if i >= literalsBlockType(len(_literalsBlockType_index)-1) {
		return "literalsBlockType(" + strconv.FormatInt(int64(i), 10) + ")"
	}
	return _literalsBlockType_name[_literalsBlockType_index[i]:_literalsBlockType_index[i+1]]
}
func _() {
	// An "invalid array index" compiler error signifies that the constant values have changed.
	// Re-run the stringer command to generate them again.
	var x [1]struct{}
	_ = x[compModePredefined-0]
	_ = x[compModeRLE-1]
	_ = x[compModeFSE-2]
	_ = x[compModeRepeat-3]
}

const _seqCompMode_name = "compModePredefinedcompModeRLEcompModeFSEcompModeRepeat"

var _seqCompMode_index = [...]uint8{0, 18, 29, 40, 54}

func (i seqCompMode) String() string {
	if i >= seqCompMode(len(_seqCompMode_index)-1) {
		return "seqCompMode(" + strconv.FormatInt(int64(i), 10) + ")"
	}
	return _seqCompMode_name[_seqCompMode_index[i]:_seqCompMode_index[i+1]]
}
func _() {
	// An "invalid array index" compiler error signifies that the constant values have changed.
	// Re-run the stringer command to generate them again.
	var x [1]struct{}
	_ = x[tableLiteralLengths-0]
	_ = x[tableOffsets-1]
	_ = x[tableMatchLengths-2]
}

const _tableIndex_name = "tableLiteralLengthstableOffsetstableMatchLengths"

var _tableIndex_index = [...]uint8{0, 19, 31, 48}

func (i tableIndex) String() string {
	if i >= tableIndex(len(_tableIndex_index)-1) {
		return "tableIndex(" + strconv.FormatInt(int64(i), 10) + ")"
	}
	return _tableIndex_name[_tableIndex_index[i]:_tableIndex_index[i+1]]
}
07070100000879000081A4000000000000000000000001645E367C000009F2000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/bytebuf.go  // Copyright 2019+ Klaus Post. All rights reserved.
// License information can be found in the LICENSE file.
// Based on work by Yann Collet, released under BSD License.

package zstd

import (
	"fmt"
	"io"
)

type byteBuffer interface {
	// Read up to 8 bytes.
	// Returns io.ErrUnexpectedEOF if this cannot be satisfied.
	readSmall(n int) ([]byte, error)

	// Read >8 bytes.
	// MAY use the destination slice.
	readBig(n int, dst []byte) ([]byte, error)

	// Read a single byte.
	readByte() (byte, error)

	// Skip n bytes.
	skipN(n int64) error
}

// in-memory buffer
type byteBuf []byte

func (b *byteBuf) readSmall(n int) ([]byte, error) {
	if debugAsserts && n > 8 {
		panic(fmt.Errorf("small read > 8 (%d). use readBig", n))
	}
	bb := *b
	if len(bb) < n {
		return nil, io.ErrUnexpectedEOF
	}
	r := bb[:n]
	*b = bb[n:]
	return r, nil
}

func (b *byteBuf) readBig(n int, dst []byte) ([]byte, error) {
	bb := *b
	if len(bb) < n {
		return nil, io.ErrUnexpectedEOF
	}
	r := bb[:n]
	*b = bb[n:]
	return r, nil
}

func (b *byteBuf) readByte() (byte, error) {
	bb := *b
	if len(bb) < 1 {
		return 0, io.ErrUnexpectedEOF
	}
	r := bb[0]
	*b = bb[1:]
	return r, nil
}

func (b *byteBuf) skipN(n int64) error {
	bb := *b
	if n < 0 {
		return fmt.Errorf("negative skip (%d) requested", n)
	}
	if int64(len(bb)) < n {
		return io.ErrUnexpectedEOF
	}
	*b = bb[n:]
	return nil
}

// wrapper around a reader.
type readerWrapper struct {
	r   io.Reader
	tmp [8]byte
}

func (r *readerWrapper) readSmall(n int) ([]byte, error) {
	if debugAsserts && n > 8 {
		panic(fmt.Errorf("small read > 8 (%d). use readBig", n))
	}
	n2, err := io.ReadFull(r.r, r.tmp[:n])
	// We only really care about the actual bytes read.
	if err != nil {
		if err == io.EOF {
			return nil, io.ErrUnexpectedEOF
		}
		if debugDecoder {
			println("readSmall: got", n2, "want", n, "err", err)
		}
		return nil, err
	}
	return r.tmp[:n], nil
}

func (r *readerWrapper) readBig(n int, dst []byte) ([]byte, error) {
	if cap(dst) < n {
		dst = make([]byte, n)
	}
	n2, err := io.ReadFull(r.r, dst[:n])
	if err == io.EOF && n > 0 {
		err = io.ErrUnexpectedEOF
	}
	return dst[:n2], err
}

func (r *readerWrapper) readByte() (byte, error) {
	n2, err := io.ReadFull(r.r, r.tmp[:1])
	if err != nil {
		if err == io.EOF {
			err = io.ErrUnexpectedEOF
		}
		return 0, err
	}
	if n2 != 1 {
		return 0, io.ErrUnexpectedEOF
	}
	return r.tmp[0], nil
}

func (r *readerWrapper) skipN(n int64) error {
	n2, err := io.CopyN(io.Discard, r.r, n)
	if n2 != n {
		err = io.ErrUnexpectedEOF
	}
	return err
}
  0707010000087A000081A4000000000000000000000001645E367C000007BC000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/bytereader.go   // Copyright 2019+ Klaus Post. All rights reserved.
// License information can be found in the LICENSE file.
// Based on work by Yann Collet, released under BSD License.

package zstd

// byteReader provides a byte reader that reads
// little endian values from a byte stream.
// The input stream is manually advanced.
// The reader performs no bounds checks.
type byteReader struct {
	b   []byte
	off int
}

// advance the stream b n bytes.
func (b *byteReader) advance(n uint) {
	b.off += int(n)
}

// overread returns whether we have advanced too far.
func (b *byteReader) overread() bool {
	return b.off > len(b.b)
}

// Int32 returns a little endian int32 starting at current offset.
func (b byteReader) Int32() int32 {
	b2 := b.b[b.off:]
	b2 = b2[:4]
	v3 := int32(b2[3])
	v2 := int32(b2[2])
	v1 := int32(b2[1])
	v0 := int32(b2[0])
	return v0 | (v1 << 8) | (v2 << 16) | (v3 << 24)
}

// Uint8 returns the next byte
func (b *byteReader) Uint8() uint8 {
	v := b.b[b.off]
	return v
}

// Uint32 returns a little endian uint32 starting at current offset.
func (b byteReader) Uint32() uint32 {
	if r := b.remain(); r < 4 {
		// Very rare
		v := uint32(0)
		for i := 1; i <= r; i++ {
			v = (v << 8) | uint32(b.b[len(b.b)-i])
		}
		return v
	}
	b2 := b.b[b.off:]
	b2 = b2[:4]
	v3 := uint32(b2[3])
	v2 := uint32(b2[2])
	v1 := uint32(b2[1])
	v0 := uint32(b2[0])
	return v0 | (v1 << 8) | (v2 << 16) | (v3 << 24)
}

// Uint32NC returns a little endian uint32 starting at current offset.
// The caller must be sure if there are at least 4 bytes left.
func (b byteReader) Uint32NC() uint32 {
	b2 := b.b[b.off:]
	b2 = b2[:4]
	v3 := uint32(b2[3])
	v2 := uint32(b2[2])
	v1 := uint32(b2[1])
	v0 := uint32(b2[0])
	return v0 | (v1 << 8) | (v2 << 16) | (v3 << 24)
}

// unread returns the unread portion of the input.
func (b byteReader) unread() []byte {
	return b.b[b.off:]
}

// remain will return the number of bytes remaining.
func (b byteReader) remain() int {
	return len(b.b) - b.off
}
0707010000087B000081A4000000000000000000000001645E367C000019DF000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/decodeheader.go // Copyright 2020+ Klaus Post. All rights reserved.
// License information can be found in the LICENSE file.

package zstd

import (
	"encoding/binary"
	"errors"
	"io"
)

// HeaderMaxSize is the maximum size of a Frame and Block Header.
// If less is sent to Header.Decode it *may* still contain enough information.
const HeaderMaxSize = 14 + 3

// Header contains information about the first frame and block within that.
type Header struct {
	// SingleSegment specifies whether the data is to be decompressed into a
	// single contiguous memory segment.
	// It implies that WindowSize is invalid and that FrameContentSize is valid.
	SingleSegment bool

	// WindowSize is the window of data to keep while decoding.
	// Will only be set if SingleSegment is false.
	WindowSize uint64

	// Dictionary ID.
	// If 0, no dictionary.
	DictionaryID uint32

	// HasFCS specifies whether FrameContentSize has a valid value.
	HasFCS bool

	// FrameContentSize is the expected uncompressed size of the entire frame.
	FrameContentSize uint64

	// Skippable will be true if the frame is meant to be skipped.
	// This implies that FirstBlock.OK is false.
	Skippable bool

	// SkippableID is the user-specific ID for the skippable frame.
	// Valid values are between 0 to 15, inclusive.
	SkippableID int

	// SkippableSize is the length of the user data to skip following
	// the header.
	SkippableSize uint32

	// HeaderSize is the raw size of the frame header.
	//
	// For normal frames, it includes the size of the magic number and
	// the size of the header (per section 3.1.1.1).
	// It does not include the size for any data blocks (section 3.1.1.2) nor
	// the size for the trailing content checksum.
	//
	// For skippable frames, this counts the size of the magic number
	// along with the size of the size field of the payload.
	// It does not include the size of the skippable payload itself.
	// The total frame size is the HeaderSize plus the SkippableSize.
	HeaderSize int

	// First block information.
	FirstBlock struct {
		// OK will be set if first block could be decoded.
		OK bool

		// Is this the last block of a frame?
		Last bool

		// Is the data compressed?
		// If true CompressedSize will be populated.
		// Unfortunately DecompressedSize cannot be determined
		// without decoding the blocks.
		Compressed bool

		// DecompressedSize is the expected decompressed size of the block.
		// Will be 0 if it cannot be determined.
		DecompressedSize int

		// CompressedSize of the data in the block.
		// Does not include the block header.
		// Will be equal to DecompressedSize if not Compressed.
		CompressedSize int
	}

	// If set there is a checksum present for the block content.
	// The checksum field at the end is always 4 bytes long.
	HasCheckSum bool
}

// Decode the header from the beginning of the stream.
// This will decode the frame header and the first block header if enough bytes are provided.
// It is recommended to provide at least HeaderMaxSize bytes.
// If the frame header cannot be read an error will be returned.
// If there isn't enough input, io.ErrUnexpectedEOF is returned.
// The FirstBlock.OK will indicate if enough information was available to decode the first block header.
func (h *Header) Decode(in []byte) error {
	*h = Header{}
	if len(in) < 4 {
		return io.ErrUnexpectedEOF
	}
	h.HeaderSize += 4
	b, in := in[:4], in[4:]
	if string(b) != frameMagic {
		if string(b[1:4]) != skippableFrameMagic || b[0]&0xf0 != 0x50 {
			return ErrMagicMismatch
		}
		if len(in) < 4 {
			return io.ErrUnexpectedEOF
		}
		h.HeaderSize += 4
		h.Skippable = true
		h.SkippableID = int(b[0] & 0xf)
		h.SkippableSize = binary.LittleEndian.Uint32(in)
		return nil
	}

	// Read Window_Descriptor
	// https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#window_descriptor
	if len(in) < 1 {
		return io.ErrUnexpectedEOF
	}
	fhd, in := in[0], in[1:]
	h.HeaderSize++
	h.SingleSegment = fhd&(1<<5) != 0
	h.HasCheckSum = fhd&(1<<2) != 0
	if fhd&(1<<3) != 0 {
		return errors.New("reserved bit set on frame header")
	}

	if !h.SingleSegment {
		if len(in) < 1 {
			return io.ErrUnexpectedEOF
		}
		var wd byte
		wd, in = in[0], in[1:]
		h.HeaderSize++
		windowLog := 10 + (wd >> 3)
		windowBase := uint64(1) << windowLog
		windowAdd := (windowBase / 8) * uint64(wd&0x7)
		h.WindowSize = windowBase + windowAdd
	}

	// Read Dictionary_ID
	// https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#dictionary_id
	if size := fhd & 3; size != 0 {
		if size == 3 {
			size = 4
		}
		if len(in) < int(size) {
			return io.ErrUnexpectedEOF
		}
		b, in = in[:size], in[size:]
		h.HeaderSize += int(size)
		switch len(b) {
		case 1:
			h.DictionaryID = uint32(b[0])
		case 2:
			h.DictionaryID = uint32(b[0]) | (uint32(b[1]) << 8)
		case 4:
			h.DictionaryID = uint32(b[0]) | (uint32(b[1]) << 8) | (uint32(b[2]) << 16) | (uint32(b[3]) << 24)
		}
	}

	// Read Frame_Content_Size
	// https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#frame_content_size
	var fcsSize int
	v := fhd >> 6
	switch v {
	case 0:
		if h.SingleSegment {
			fcsSize = 1
		}
	default:
		fcsSize = 1 << v
	}

	if fcsSize > 0 {
		h.HasFCS = true
		if len(in) < fcsSize {
			return io.ErrUnexpectedEOF
		}
		b, in = in[:fcsSize], in[fcsSize:]
		h.HeaderSize += int(fcsSize)
		switch len(b) {
		case 1:
			h.FrameContentSize = uint64(b[0])
		case 2:
			// When FCS_Field_Size is 2, the offset of 256 is added.
			h.FrameContentSize = uint64(b[0]) | (uint64(b[1]) << 8) + 256
		case 4:
			h.FrameContentSize = uint64(b[0]) | (uint64(b[1]) << 8) | (uint64(b[2]) << 16) | (uint64(b[3]) << 24)
		case 8:
			d1 := uint32(b[0]) | (uint32(b[1]) << 8) | (uint32(b[2]) << 16) | (uint32(b[3]) << 24)
			d2 := uint32(b[4]) | (uint32(b[5]) << 8) | (uint32(b[6]) << 16) | (uint32(b[7]) << 24)
			h.FrameContentSize = uint64(d1) | (uint64(d2) << 32)
		}
	}

	// Frame Header done, we will not fail from now on.
	if len(in) < 3 {
		return nil
	}
	tmp := in[:3]
	bh := uint32(tmp[0]) | (uint32(tmp[1]) << 8) | (uint32(tmp[2]) << 16)
	h.FirstBlock.Last = bh&1 != 0
	blockType := blockType((bh >> 1) & 3)
	// find size.
	cSize := int(bh >> 3)
	switch blockType {
	case blockTypeReserved:
		return nil
	case blockTypeRLE:
		h.FirstBlock.Compressed = true
		h.FirstBlock.DecompressedSize = cSize
		h.FirstBlock.CompressedSize = 1
	case blockTypeCompressed:
		h.FirstBlock.Compressed = true
		h.FirstBlock.CompressedSize = cSize
	case blockTypeRaw:
		h.FirstBlock.DecompressedSize = cSize
		h.FirstBlock.CompressedSize = cSize
	default:
		panic("Invalid block type")
	}

	h.FirstBlock.OK = true
	return nil
}
 0707010000087C000081A4000000000000000000000001645E367C00005BA7000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/decoder.go  // Copyright 2019+ Klaus Post. All rights reserved.
// License information can be found in the LICENSE file.
// Based on work by Yann Collet, released under BSD License.

package zstd

import (
	"context"
	"encoding/binary"
	"io"
	"sync"

	"github.com/klauspost/compress/zstd/internal/xxhash"
)

// Decoder provides decoding of zstandard streams.
// The decoder has been designed to operate without allocations after a warmup.
// This means that you should store the decoder for best performance.
// To re-use a stream decoder, use the Reset(r io.Reader) error to switch to another stream.
// A decoder can safely be re-used even if the previous stream failed.
// To release the resources, you must call the Close() function on a decoder.
type Decoder struct {
	o decoderOptions

	// Unreferenced decoders, ready for use.
	decoders chan *blockDec

	// Current read position used for Reader functionality.
	current decoderState

	// sync stream decoding
	syncStream struct {
		decodedFrame uint64
		br           readerWrapper
		enabled      bool
		inFrame      bool
		dstBuf       []byte
	}

	frame *frameDec

	// Custom dictionaries.
	dicts map[uint32]*dict

	// streamWg is the waitgroup for all streams
	streamWg sync.WaitGroup
}

// decoderState is used for maintaining state when the decoder
// is used for streaming.
type decoderState struct {
	// current block being written to stream.
	decodeOutput

	// output in order to be written to stream.
	output chan decodeOutput

	// cancel remaining output.
	cancel context.CancelFunc

	// crc of current frame
	crc *xxhash.Digest

	flushed bool
}

var (
	// Check the interfaces we want to support.
	_ = io.WriterTo(&Decoder{})
	_ = io.Reader(&Decoder{})
)

// NewReader creates a new decoder.
// A nil Reader can be provided in which case Reset can be used to start a decode.
//
// A Decoder can be used in two modes:
//
// 1) As a stream, or
// 2) For stateless decoding using DecodeAll.
//
// Only a single stream can be decoded concurrently, but the same decoder
// can run multiple concurrent stateless decodes. It is even possible to
// use stateless decodes while a stream is being decoded.
//
// The Reset function can be used to initiate a new stream, which is will considerably
// reduce the allocations normally caused by NewReader.
func NewReader(r io.Reader, opts ...DOption) (*Decoder, error) {
	initPredefined()
	var d Decoder
	d.o.setDefault()
	for _, o := range opts {
		err := o(&d.o)
		if err != nil {
			return nil, err
		}
	}
	d.current.crc = xxhash.New()
	d.current.flushed = true

	if r == nil {
		d.current.err = ErrDecoderNilInput
	}

	// Transfer option dicts.
	d.dicts = make(map[uint32]*dict, len(d.o.dicts))
	for _, dc := range d.o.dicts {
		d.dicts[dc.id] = dc
	}
	d.o.dicts = nil

	// Create decoders
	d.decoders = make(chan *blockDec, d.o.concurrent)
	for i := 0; i < d.o.concurrent; i++ {
		dec := newBlockDec(d.o.lowMem)
		dec.localFrame = newFrameDec(d.o)
		d.decoders <- dec
	}

	if r == nil {
		return &d, nil
	}
	return &d, d.Reset(r)
}

// Read bytes from the decompressed stream into p.
// Returns the number of bytes written and any error that occurred.
// When the stream is done, io.EOF will be returned.
func (d *Decoder) Read(p []byte) (int, error) {
	var n int
	for {
		if len(d.current.b) > 0 {
			filled := copy(p, d.current.b)
			p = p[filled:]
			d.current.b = d.current.b[filled:]
			n += filled
		}
		if len(p) == 0 {
			break
		}
		if len(d.current.b) == 0 {
			// We have an error and no more data
			if d.current.err != nil {
				break
			}
			if !d.nextBlock(n == 0) {
				return n, d.current.err
			}
		}
	}
	if len(d.current.b) > 0 {
		if debugDecoder {
			println("returning", n, "still bytes left:", len(d.current.b))
		}
		// Only return error at end of block
		return n, nil
	}
	if d.current.err != nil {
		d.drainOutput()
	}
	if debugDecoder {
		println("returning", n, d.current.err, len(d.decoders))
	}
	return n, d.current.err
}

// Reset will reset the decoder the supplied stream after the current has finished processing.
// Note that this functionality cannot be used after Close has been called.
// Reset can be called with a nil reader to release references to the previous reader.
// After being called with a nil reader, no other operations than Reset or DecodeAll or Close
// should be used.
func (d *Decoder) Reset(r io.Reader) error {
	if d.current.err == ErrDecoderClosed {
		return d.current.err
	}

	d.drainOutput()

	d.syncStream.br.r = nil
	if r == nil {
		d.current.err = ErrDecoderNilInput
		if len(d.current.b) > 0 {
			d.current.b = d.current.b[:0]
		}
		d.current.flushed = true
		return nil
	}

	// If bytes buffer and < 5MB, do sync decoding anyway.
	if bb, ok := r.(byter); ok && bb.Len() < d.o.decodeBufsBelow && !d.o.limitToCap {
		bb2 := bb
		if debugDecoder {
			println("*bytes.Buffer detected, doing sync decode, len:", bb.Len())
		}
		b := bb2.Bytes()
		var dst []byte
		if cap(d.syncStream.dstBuf) > 0 {
			dst = d.syncStream.dstBuf[:0]
		}

		dst, err := d.DecodeAll(b, dst)
		if err == nil {
			err = io.EOF
		}
		// Save output buffer
		d.syncStream.dstBuf = dst
		d.current.b = dst
		d.current.err = err
		d.current.flushed = true
		if debugDecoder {
			println("sync decode to", len(dst), "bytes, err:", err)
		}
		return nil
	}
	// Remove current block.
	d.stashDecoder()
	d.current.decodeOutput = decodeOutput{}
	d.current.err = nil
	d.current.flushed = false
	d.current.d = nil
	d.syncStream.dstBuf = nil

	// Ensure no-one else is still running...
	d.streamWg.Wait()
	if d.frame == nil {
		d.frame = newFrameDec(d.o)
	}

	if d.o.concurrent == 1 {
		return d.startSyncDecoder(r)
	}

	d.current.output = make(chan decodeOutput, d.o.concurrent)
	ctx, cancel := context.WithCancel(context.Background())
	d.current.cancel = cancel
	d.streamWg.Add(1)
	go d.startStreamDecoder(ctx, r, d.current.output)

	return nil
}

// drainOutput will drain the output until errEndOfStream is sent.
func (d *Decoder) drainOutput() {
	if d.current.cancel != nil {
		if debugDecoder {
			println("cancelling current")
		}
		d.current.cancel()
		d.current.cancel = nil
	}
	if d.current.d != nil {
		if debugDecoder {
			printf("re-adding current decoder %p, decoders: %d", d.current.d, len(d.decoders))
		}
		d.decoders <- d.current.d
		d.current.d = nil
		d.current.b = nil
	}
	if d.current.output == nil || d.current.flushed {
		println("current already flushed")
		return
	}
	for v := range d.current.output {
		if v.d != nil {
			if debugDecoder {
				printf("re-adding decoder %p", v.d)
			}
			d.decoders <- v.d
		}
	}
	d.current.output = nil
	d.current.flushed = true
}

// WriteTo writes data to w until there's no more data to write or when an error occurs.
// The return value n is the number of bytes written.
// Any error encountered during the write is also returned.
func (d *Decoder) WriteTo(w io.Writer) (int64, error) {
	var n int64
	for {
		if len(d.current.b) > 0 {
			n2, err2 := w.Write(d.current.b)
			n += int64(n2)
			if err2 != nil && (d.current.err == nil || d.current.err == io.EOF) {
				d.current.err = err2
			} else if n2 != len(d.current.b) {
				d.current.err = io.ErrShortWrite
			}
		}
		if d.current.err != nil {
			break
		}
		d.nextBlock(true)
	}
	err := d.current.err
	if err != nil {
		d.drainOutput()
	}
	if err == io.EOF {
		err = nil
	}
	return n, err
}

// DecodeAll allows stateless decoding of a blob of bytes.
// Output will be appended to dst, so if the destination size is known
// you can pre-allocate the destination slice to avoid allocations.
// DecodeAll can be used concurrently.
// The Decoder concurrency limits will be respected.
func (d *Decoder) DecodeAll(input, dst []byte) ([]byte, error) {
	if d.decoders == nil {
		return dst, ErrDecoderClosed
	}

	// Grab a block decoder and frame decoder.
	block := <-d.decoders
	frame := block.localFrame
	initialSize := len(dst)
	defer func() {
		if debugDecoder {
			printf("re-adding decoder: %p", block)
		}
		frame.rawInput = nil
		frame.bBuf = nil
		if frame.history.decoders.br != nil {
			frame.history.decoders.br.in = nil
		}
		d.decoders <- block
	}()
	frame.bBuf = input

	for {
		frame.history.reset()
		err := frame.reset(&frame.bBuf)
		if err != nil {
			if err == io.EOF {
				if debugDecoder {
					println("frame reset return EOF")
				}
				return dst, nil
			}
			return dst, err
		}
		if err = d.setDict(frame); err != nil {
			return nil, err
		}
		if frame.WindowSize > d.o.maxWindowSize {
			if debugDecoder {
				println("window size exceeded:", frame.WindowSize, ">", d.o.maxWindowSize)
			}
			return dst, ErrWindowSizeExceeded
		}
		if frame.FrameContentSize != fcsUnknown {
			if frame.FrameContentSize > d.o.maxDecodedSize-uint64(len(dst)-initialSize) {
				if debugDecoder {
					println("decoder size exceeded; fcs:", frame.FrameContentSize, "> mcs:", d.o.maxDecodedSize-uint64(len(dst)-initialSize), "len:", len(dst))
				}
				return dst, ErrDecoderSizeExceeded
			}
			if d.o.limitToCap && frame.FrameContentSize > uint64(cap(dst)-len(dst)) {
				if debugDecoder {
					println("decoder size exceeded; fcs:", frame.FrameContentSize, "> (cap-len)", cap(dst)-len(dst))
				}
				return dst, ErrDecoderSizeExceeded
			}
			if cap(dst)-len(dst) < int(frame.FrameContentSize) {
				dst2 := make([]byte, len(dst), len(dst)+int(frame.FrameContentSize)+compressedBlockOverAlloc)
				copy(dst2, dst)
				dst = dst2
			}
		}

		if cap(dst) == 0 && !d.o.limitToCap {
			// Allocate len(input) * 2 by default if nothing is provided
			// and we didn't get frame content size.
			size := len(input) * 2
			// Cap to 1 MB.
			if size > 1<<20 {
				size = 1 << 20
			}
			if uint64(size) > d.o.maxDecodedSize {
				size = int(d.o.maxDecodedSize)
			}
			dst = make([]byte, 0, size)
		}

		dst, err = frame.runDecoder(dst, block)
		if err != nil {
			return dst, err
		}
		if uint64(len(dst)-initialSize) > d.o.maxDecodedSize {
			return dst, ErrDecoderSizeExceeded
		}
		if len(frame.bBuf) == 0 {
			if debugDecoder {
				println("frame dbuf empty")
			}
			break
		}
	}
	return dst, nil
}

// nextBlock returns the next block.
// If an error occurs d.err will be set.
// Optionally the function can block for new output.
// If non-blocking mode is used the returned boolean will be false
// if no data was available without blocking.
func (d *Decoder) nextBlock(blocking bool) (ok bool) {
	if d.current.err != nil {
		// Keep error state.
		return false
	}
	d.current.b = d.current.b[:0]

	// SYNC:
	if d.syncStream.enabled {
		if !blocking {
			return false
		}
		ok = d.nextBlockSync()
		if !ok {
			d.stashDecoder()
		}
		return ok
	}

	//ASYNC:
	d.stashDecoder()
	if blocking {
		d.current.decodeOutput, ok = <-d.current.output
	} else {
		select {
		case d.current.decodeOutput, ok = <-d.current.output:
		default:
			return false
		}
	}
	if !ok {
		// This should not happen, so signal error state...
		d.current.err = io.ErrUnexpectedEOF
		return false
	}
	next := d.current.decodeOutput
	if next.d != nil && next.d.async.newHist != nil {
		d.current.crc.Reset()
	}
	if debugDecoder {
		var tmp [4]byte
		binary.LittleEndian.PutUint32(tmp[:], uint32(xxhash.Sum64(next.b)))
		println("got", len(d.current.b), "bytes, error:", d.current.err, "data crc:", tmp)
	}

	if d.o.ignoreChecksum {
		return true
	}

	if len(next.b) > 0 {
		d.current.crc.Write(next.b)
	}
	if next.err == nil && next.d != nil && next.d.hasCRC {
		got := uint32(d.current.crc.Sum64())
		if got != next.d.checkCRC {
			if debugDecoder {
				printf("CRC Check Failed: %08x (got) != %08x (on stream)\n", got, next.d.checkCRC)
			}
			d.current.err = ErrCRCMismatch
		} else {
			if debugDecoder {
				printf("CRC ok %08x\n", got)
			}
		}
	}

	return true
}

func (d *Decoder) nextBlockSync() (ok bool) {
	if d.current.d == nil {
		d.current.d = <-d.decoders
	}
	for len(d.current.b) == 0 {
		if !d.syncStream.inFrame {
			d.frame.history.reset()
			d.current.err = d.frame.reset(&d.syncStream.br)
			if d.current.err == nil {
				d.current.err = d.setDict(d.frame)
			}
			if d.current.err != nil {
				return false
			}
			if d.frame.WindowSize > d.o.maxDecodedSize || d.frame.WindowSize > d.o.maxWindowSize {
				d.current.err = ErrDecoderSizeExceeded
				return false
			}

			d.syncStream.decodedFrame = 0
			d.syncStream.inFrame = true
		}
		d.current.err = d.frame.next(d.current.d)
		if d.current.err != nil {
			return false
		}
		d.frame.history.ensureBlock()
		if debugDecoder {
			println("History trimmed:", len(d.frame.history.b), "decoded already:", d.syncStream.decodedFrame)
		}
		histBefore := len(d.frame.history.b)
		d.current.err = d.current.d.decodeBuf(&d.frame.history)

		if d.current.err != nil {
			println("error after:", d.current.err)
			return false
		}
		d.current.b = d.frame.history.b[histBefore:]
		if debugDecoder {
			println("history after:", len(d.frame.history.b))
		}

		// Check frame size (before CRC)
		d.syncStream.decodedFrame += uint64(len(d.current.b))
		if d.syncStream.decodedFrame > d.frame.FrameContentSize {
			if debugDecoder {
				printf("DecodedFrame (%d) > FrameContentSize (%d)\n", d.syncStream.decodedFrame, d.frame.FrameContentSize)
			}
			d.current.err = ErrFrameSizeExceeded
			return false
		}

		// Check FCS
		if d.current.d.Last && d.frame.FrameContentSize != fcsUnknown && d.syncStream.decodedFrame != d.frame.FrameContentSize {
			if debugDecoder {
				printf("DecodedFrame (%d) != FrameContentSize (%d)\n", d.syncStream.decodedFrame, d.frame.FrameContentSize)
			}
			d.current.err = ErrFrameSizeMismatch
			return false
		}

		// Update/Check CRC
		if d.frame.HasCheckSum {
			if !d.o.ignoreChecksum {
				d.frame.crc.Write(d.current.b)
			}
			if d.current.d.Last {
				if !d.o.ignoreChecksum {
					d.current.err = d.frame.checkCRC()
				} else {
					d.current.err = d.frame.consumeCRC()
				}
				if d.current.err != nil {
					println("CRC error:", d.current.err)
					return false
				}
			}
		}
		d.syncStream.inFrame = !d.current.d.Last
	}
	return true
}

func (d *Decoder) stashDecoder() {
	if d.current.d != nil {
		if debugDecoder {
			printf("re-adding current decoder %p", d.current.d)
		}
		d.decoders <- d.current.d
		d.current.d = nil
	}
}

// Close will release all resources.
// It is NOT possible to reuse the decoder after this.
func (d *Decoder) Close() {
	if d.current.err == ErrDecoderClosed {
		return
	}
	d.drainOutput()
	if d.current.cancel != nil {
		d.current.cancel()
		d.streamWg.Wait()
		d.current.cancel = nil
	}
	if d.decoders != nil {
		close(d.decoders)
		for dec := range d.decoders {
			dec.Close()
		}
		d.decoders = nil
	}
	if d.current.d != nil {
		d.current.d.Close()
		d.current.d = nil
	}
	d.current.err = ErrDecoderClosed
}

// IOReadCloser returns the decoder as an io.ReadCloser for convenience.
// Any changes to the decoder will be reflected, so the returned ReadCloser
// can be reused along with the decoder.
// io.WriterTo is also supported by the returned ReadCloser.
func (d *Decoder) IOReadCloser() io.ReadCloser {
	return closeWrapper{d: d}
}

// closeWrapper wraps a function call as a closer.
type closeWrapper struct {
	d *Decoder
}

// WriteTo forwards WriteTo calls to the decoder.
func (c closeWrapper) WriteTo(w io.Writer) (n int64, err error) {
	return c.d.WriteTo(w)
}

// Read forwards read calls to the decoder.
func (c closeWrapper) Read(p []byte) (n int, err error) {
	return c.d.Read(p)
}

// Close closes the decoder.
func (c closeWrapper) Close() error {
	c.d.Close()
	return nil
}

type decodeOutput struct {
	d   *blockDec
	b   []byte
	err error
}

func (d *Decoder) startSyncDecoder(r io.Reader) error {
	d.frame.history.reset()
	d.syncStream.br = readerWrapper{r: r}
	d.syncStream.inFrame = false
	d.syncStream.enabled = true
	d.syncStream.decodedFrame = 0
	return nil
}

// Create Decoder:
// ASYNC:
// Spawn 3 go routines.
// 0: Read frames and decode block literals.
// 1: Decode sequences.
// 2: Execute sequences, send to output.
func (d *Decoder) startStreamDecoder(ctx context.Context, r io.Reader, output chan decodeOutput) {
	defer d.streamWg.Done()
	br := readerWrapper{r: r}

	var seqDecode = make(chan *blockDec, d.o.concurrent)
	var seqExecute = make(chan *blockDec, d.o.concurrent)

	// Async 1: Decode sequences...
	go func() {
		var hist history
		var hasErr bool

		for block := range seqDecode {
			if hasErr {
				if block != nil {
					seqExecute <- block
				}
				continue
			}
			if block.async.newHist != nil {
				if debugDecoder {
					println("Async 1: new history, recent:", block.async.newHist.recentOffsets)
				}
				hist.reset()
				hist.decoders = block.async.newHist.decoders
				hist.recentOffsets = block.async.newHist.recentOffsets
				hist.windowSize = block.async.newHist.windowSize
				if block.async.newHist.dict != nil {
					hist.setDict(block.async.newHist.dict)
				}
			}
			if block.err != nil || block.Type != blockTypeCompressed {
				hasErr = block.err != nil
				seqExecute <- block
				continue
			}

			hist.decoders.literals = block.async.literals
			block.err = block.prepareSequences(block.async.seqData, &hist)
			if debugDecoder && block.err != nil {
				println("prepareSequences returned:", block.err)
			}
			hasErr = block.err != nil
			if block.err == nil {
				block.err = block.decodeSequences(&hist)
				if debugDecoder && block.err != nil {
					println("decodeSequences returned:", block.err)
				}
				hasErr = block.err != nil
				//				block.async.sequence = hist.decoders.seq[:hist.decoders.nSeqs]
				block.async.seqSize = hist.decoders.seqSize
			}
			seqExecute <- block
		}
		close(seqExecute)
		hist.reset()
	}()

	var wg sync.WaitGroup
	wg.Add(1)

	// Async 3: Execute sequences...
	frameHistCache := d.frame.history.b
	go func() {
		var hist history
		var decodedFrame uint64
		var fcs uint64
		var hasErr bool
		for block := range seqExecute {
			out := decodeOutput{err: block.err, d: block}
			if block.err != nil || hasErr {
				hasErr = true
				output <- out
				continue
			}
			if block.async.newHist != nil {
				if debugDecoder {
					println("Async 2: new history")
				}
				hist.reset()
				hist.windowSize = block.async.newHist.windowSize
				hist.allocFrameBuffer = block.async.newHist.allocFrameBuffer
				if block.async.newHist.dict != nil {
					hist.setDict(block.async.newHist.dict)
				}

				if cap(hist.b) < hist.allocFrameBuffer {
					if cap(frameHistCache) >= hist.allocFrameBuffer {
						hist.b = frameHistCache
					} else {
						hist.b = make([]byte, 0, hist.allocFrameBuffer)
						println("Alloc history sized", hist.allocFrameBuffer)
					}
				}
				hist.b = hist.b[:0]
				fcs = block.async.fcs
				decodedFrame = 0
			}
			do := decodeOutput{err: block.err, d: block}
			switch block.Type {
			case blockTypeRLE:
				if debugDecoder {
					println("add rle block length:", block.RLESize)
				}

				if cap(block.dst) < int(block.RLESize) {
					if block.lowMem {
						block.dst = make([]byte, block.RLESize)
					} else {
						block.dst = make([]byte, maxCompressedBlockSize)
					}
				}
				block.dst = block.dst[:block.RLESize]
				v := block.data[0]
				for i := range block.dst {
					block.dst[i] = v
				}
				hist.append(block.dst)
				do.b = block.dst
			case blockTypeRaw:
				if debugDecoder {
					println("add raw block length:", len(block.data))
				}
				hist.append(block.data)
				do.b = block.data
			case blockTypeCompressed:
				if debugDecoder {
					println("execute with history length:", len(hist.b), "window:", hist.windowSize)
				}
				hist.decoders.seqSize = block.async.seqSize
				hist.decoders.literals = block.async.literals
				do.err = block.executeSequences(&hist)
				hasErr = do.err != nil
				if debugDecoder && hasErr {
					println("executeSequences returned:", do.err)
				}
				do.b = block.dst
			}
			if !hasErr {
				decodedFrame += uint64(len(do.b))
				if decodedFrame > fcs {
					println("fcs exceeded", block.Last, fcs, decodedFrame)
					do.err = ErrFrameSizeExceeded
					hasErr = true
				} else if block.Last && fcs != fcsUnknown && decodedFrame != fcs {
					do.err = ErrFrameSizeMismatch
					hasErr = true
				} else {
					if debugDecoder {
						println("fcs ok", block.Last, fcs, decodedFrame)
					}
				}
			}
			output <- do
		}
		close(output)
		frameHistCache = hist.b
		wg.Done()
		if debugDecoder {
			println("decoder goroutines finished")
		}
		hist.reset()
	}()

	var hist history
decodeStream:
	for {
		var hasErr bool
		hist.reset()
		decodeBlock := func(block *blockDec) {
			if hasErr {
				if block != nil {
					seqDecode <- block
				}
				return
			}
			if block.err != nil || block.Type != blockTypeCompressed {
				hasErr = block.err != nil
				seqDecode <- block
				return
			}

			remain, err := block.decodeLiterals(block.data, &hist)
			block.err = err
			hasErr = block.err != nil
			if err == nil {
				block.async.literals = hist.decoders.literals
				block.async.seqData = remain
			} else if debugDecoder {
				println("decodeLiterals error:", err)
			}
			seqDecode <- block
		}
		frame := d.frame
		if debugDecoder {
			println("New frame...")
		}
		var historySent bool
		frame.history.reset()
		err := frame.reset(&br)
		if debugDecoder && err != nil {
			println("Frame decoder returned", err)
		}
		if err == nil {
			err = d.setDict(frame)
		}
		if err == nil && d.frame.WindowSize > d.o.maxWindowSize {
			if debugDecoder {
				println("decoder size exceeded, fws:", d.frame.WindowSize, "> mws:", d.o.maxWindowSize)
			}

			err = ErrDecoderSizeExceeded
		}
		if err != nil {
			select {
			case <-ctx.Done():
			case dec := <-d.decoders:
				dec.sendErr(err)
				decodeBlock(dec)
			}
			break decodeStream
		}

		// Go through all blocks of the frame.
		for {
			var dec *blockDec
			select {
			case <-ctx.Done():
				break decodeStream
			case dec = <-d.decoders:
				// Once we have a decoder, we MUST return it.
			}
			err := frame.next(dec)
			if !historySent {
				h := frame.history
				if debugDecoder {
					println("Alloc History:", h.allocFrameBuffer)
				}
				hist.reset()
				if h.dict != nil {
					hist.setDict(h.dict)
				}
				dec.async.newHist = &h
				dec.async.fcs = frame.FrameContentSize
				historySent = true
			} else {
				dec.async.newHist = nil
			}
			if debugDecoder && err != nil {
				println("next block returned error:", err)
			}
			dec.err = err
			dec.hasCRC = false
			if dec.Last && frame.HasCheckSum && err == nil {
				crc, err := frame.rawInput.readSmall(4)
				if len(crc) < 4 {
					if err == nil {
						err = io.ErrUnexpectedEOF

					}
					println("CRC missing?", err)
					dec.err = err
				} else {
					dec.checkCRC = binary.LittleEndian.Uint32(crc)
					dec.hasCRC = true
					if debugDecoder {
						printf("found crc to check: %08x\n", dec.checkCRC)
					}
				}
			}
			err = dec.err
			last := dec.Last
			decodeBlock(dec)
			if err != nil {
				break decodeStream
			}
			if last {
				break
			}
		}
	}
	close(seqDecode)
	wg.Wait()
	hist.reset()
	d.frame.history.b = frameHistCache
}

func (d *Decoder) setDict(frame *frameDec) (err error) {
	dict, ok := d.dicts[frame.DictionaryID]
	if ok {
		if debugDecoder {
			println("setting dict", frame.DictionaryID)
		}
		frame.history.setDict(dict)
	} else if frame.DictionaryID != 0 {
		// A zero or missing dictionary id is ambiguous:
		// either dictionary zero, or no dictionary. In particular,
		// zstd --patch-from uses this id for the source file,
		// so only return an error if the dictionary id is not zero.
		err = ErrUnknownDictionary
	}
	return err
}
 0707010000087D000081A4000000000000000000000001645E367C000014CD000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/decoder_options.go  // Copyright 2019+ Klaus Post. All rights reserved.
// License information can be found in the LICENSE file.
// Based on work by Yann Collet, released under BSD License.

package zstd

import (
	"errors"
	"fmt"
	"math/bits"
	"runtime"
)

// DOption is an option for creating a decoder.
type DOption func(*decoderOptions) error

// options retains accumulated state of multiple options.
type decoderOptions struct {
	lowMem          bool
	concurrent      int
	maxDecodedSize  uint64
	maxWindowSize   uint64
	dicts           []*dict
	ignoreChecksum  bool
	limitToCap      bool
	decodeBufsBelow int
}

func (o *decoderOptions) setDefault() {
	*o = decoderOptions{
		// use less ram: true for now, but may change.
		lowMem:          true,
		concurrent:      runtime.GOMAXPROCS(0),
		maxWindowSize:   MaxWindowSize,
		decodeBufsBelow: 128 << 10,
	}
	if o.concurrent > 4 {
		o.concurrent = 4
	}
	o.maxDecodedSize = 64 << 30
}

// WithDecoderLowmem will set whether to use a lower amount of memory,
// but possibly have to allocate more while running.
func WithDecoderLowmem(b bool) DOption {
	return func(o *decoderOptions) error { o.lowMem = b; return nil }
}

// WithDecoderConcurrency sets the number of created decoders.
// When decoding block with DecodeAll, this will limit the number
// of possible concurrently running decodes.
// When decoding streams, this will limit the number of
// inflight blocks.
// When decoding streams and setting maximum to 1,
// no async decoding will be done.
// When a value of 0 is provided GOMAXPROCS will be used.
// By default this will be set to 4 or GOMAXPROCS, whatever is lower.
func WithDecoderConcurrency(n int) DOption {
	return func(o *decoderOptions) error {
		if n < 0 {
			return errors.New("concurrency must be at least 1")
		}
		if n == 0 {
			o.concurrent = runtime.GOMAXPROCS(0)
		} else {
			o.concurrent = n
		}
		return nil
	}
}

// WithDecoderMaxMemory allows to set a maximum decoded size for in-memory
// non-streaming operations or maximum window size for streaming operations.
// This can be used to control memory usage of potentially hostile content.
// Maximum is 1 << 63 bytes. Default is 64GiB.
func WithDecoderMaxMemory(n uint64) DOption {
	return func(o *decoderOptions) error {
		if n == 0 {
			return errors.New("WithDecoderMaxMemory must be at least 1")
		}
		if n > 1<<63 {
			return errors.New("WithDecoderMaxmemory must be less than 1 << 63")
		}
		o.maxDecodedSize = n
		return nil
	}
}

// WithDecoderDicts allows to register one or more dictionaries for the decoder.
//
// Each slice in dict must be in the [dictionary format] produced by
// "zstd --train" from the Zstandard reference implementation.
//
// If several dictionaries with the same ID are provided, the last one will be used.
//
// [dictionary format]: https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#dictionary-format
func WithDecoderDicts(dicts ...[]byte) DOption {
	return func(o *decoderOptions) error {
		for _, b := range dicts {
			d, err := loadDict(b)
			if err != nil {
				return err
			}
			o.dicts = append(o.dicts, d)
		}
		return nil
	}
}

// WithEncoderDictRaw registers a dictionary that may be used by the decoder.
// The slice content can be arbitrary data.
func WithDecoderDictRaw(id uint32, content []byte) DOption {
	return func(o *decoderOptions) error {
		if bits.UintSize > 32 && uint(len(content)) > dictMaxLength {
			return fmt.Errorf("dictionary of size %d > 2GiB too large", len(content))
		}
		o.dicts = append(o.dicts, &dict{id: id, content: content, offsets: [3]int{1, 4, 8}})
		return nil
	}
}

// WithDecoderMaxWindow allows to set a maximum window size for decodes.
// This allows rejecting packets that will cause big memory usage.
// The Decoder will likely allocate more memory based on the WithDecoderLowmem setting.
// If WithDecoderMaxMemory is set to a lower value, that will be used.
// Default is 512MB, Maximum is ~3.75 TB as per zstandard spec.
func WithDecoderMaxWindow(size uint64) DOption {
	return func(o *decoderOptions) error {
		if size < MinWindowSize {
			return errors.New("WithMaxWindowSize must be at least 1KB, 1024 bytes")
		}
		if size > (1<<41)+7*(1<<38) {
			return errors.New("WithMaxWindowSize must be less than (1<<41) + 7*(1<<38) ~ 3.75TB")
		}
		o.maxWindowSize = size
		return nil
	}
}

// WithDecodeAllCapLimit will limit DecodeAll to decoding cap(dst)-len(dst) bytes,
// or any size set in WithDecoderMaxMemory.
// This can be used to limit decoding to a specific maximum output size.
// Disabled by default.
func WithDecodeAllCapLimit(b bool) DOption {
	return func(o *decoderOptions) error {
		o.limitToCap = b
		return nil
	}
}

// WithDecodeBuffersBelow will fully decode readers that have a
// `Bytes() []byte` and `Len() int` interface similar to bytes.Buffer.
// This typically uses less allocations but will have the full decompressed object in memory.
// Note that DecodeAllCapLimit will disable this, as well as giving a size of 0 or less.
// Default is 128KiB.
func WithDecodeBuffersBelow(size int) DOption {
	return func(o *decoderOptions) error {
		o.decodeBufsBelow = size
		return nil
	}
}

// IgnoreChecksum allows to forcibly ignore checksum checking.
func IgnoreChecksum(b bool) DOption {
	return func(o *decoderOptions) error {
		o.ignoreChecksum = b
		return nil
	}
}
   0707010000087E000081A4000000000000000000000001645E367C00000E56000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/dict.go package zstd

import (
	"encoding/binary"
	"errors"
	"fmt"
	"io"

	"github.com/klauspost/compress/huff0"
)

type dict struct {
	id uint32

	litEnc              *huff0.Scratch
	llDec, ofDec, mlDec sequenceDec
	//llEnc, ofEnc, mlEnc []*fseEncoder
	offsets [3]int
	content []byte
}

const dictMagic = "\x37\xa4\x30\xec"

// Maximum dictionary size for the reference implementation (1.5.3) is 2 GiB.
const dictMaxLength = 1 << 31

// ID returns the dictionary id or 0 if d is nil.
func (d *dict) ID() uint32 {
	if d == nil {
		return 0
	}
	return d.id
}

// ContentSize returns the dictionary content size or 0 if d is nil.
func (d *dict) ContentSize() int {
	if d == nil {
		return 0
	}
	return len(d.content)
}

// Content returns the dictionary content.
func (d *dict) Content() []byte {
	if d == nil {
		return nil
	}
	return d.content
}

// Offsets returns the initial offsets.
func (d *dict) Offsets() [3]int {
	if d == nil {
		return [3]int{}
	}
	return d.offsets
}

// LitEncoder returns the literal encoder.
func (d *dict) LitEncoder() *huff0.Scratch {
	if d == nil {
		return nil
	}
	return d.litEnc
}

// Load a dictionary as described in
// https://github.com/facebook/zstd/blob/master/doc/zstd_compression_format.md#dictionary-format
func loadDict(b []byte) (*dict, error) {
	// Check static field size.
	if len(b) <= 8+(3*4) {
		return nil, io.ErrUnexpectedEOF
	}
	d := dict{
		llDec: sequenceDec{fse: &fseDecoder{}},
		ofDec: sequenceDec{fse: &fseDecoder{}},
		mlDec: sequenceDec{fse: &fseDecoder{}},
	}
	if string(b[:4]) != dictMagic {
		return nil, ErrMagicMismatch
	}
	d.id = binary.LittleEndian.Uint32(b[4:8])
	if d.id == 0 {
		return nil, errors.New("dictionaries cannot have ID 0")
	}

	// Read literal table
	var err error
	d.litEnc, b, err = huff0.ReadTable(b[8:], nil)
	if err != nil {
		return nil, fmt.Errorf("loading literal table: %w", err)
	}
	d.litEnc.Reuse = huff0.ReusePolicyMust

	br := byteReader{
		b:   b,
		off: 0,
	}
	readDec := func(i tableIndex, dec *fseDecoder) error {
		if err := dec.readNCount(&br, uint16(maxTableSymbol[i])); err != nil {
			return err
		}
		if br.overread() {
			return io.ErrUnexpectedEOF
		}
		err = dec.transform(symbolTableX[i])
		if err != nil {
			println("Transform table error:", err)
			return err
		}
		if debugDecoder || debugEncoder {
			println("Read table ok", "symbolLen:", dec.symbolLen)
		}
		// Set decoders as predefined so they aren't reused.
		dec.preDefined = true
		return nil
	}

	if err := readDec(tableOffsets, d.ofDec.fse); err != nil {
		return nil, err
	}
	if err := readDec(tableMatchLengths, d.mlDec.fse); err != nil {
		return nil, err
	}
	if err := readDec(tableLiteralLengths, d.llDec.fse); err != nil {
		return nil, err
	}
	if br.remain() < 12 {
		return nil, io.ErrUnexpectedEOF
	}

	d.offsets[0] = int(br.Uint32())
	br.advance(4)
	d.offsets[1] = int(br.Uint32())
	br.advance(4)
	d.offsets[2] = int(br.Uint32())
	br.advance(4)
	if d.offsets[0] <= 0 || d.offsets[1] <= 0 || d.offsets[2] <= 0 {
		return nil, errors.New("invalid offset in dictionary")
	}
	d.content = make([]byte, br.remain())
	copy(d.content, br.unread())
	if d.offsets[0] > len(d.content) || d.offsets[1] > len(d.content) || d.offsets[2] > len(d.content) {
		return nil, fmt.Errorf("initial offset bigger than dictionary content size %d, offsets: %v", len(d.content), d.offsets)
	}

	return &d, nil
}

// InspectDictionary loads a zstd dictionary and provides functions to inspect the content.
func InspectDictionary(b []byte) (interface {
	ID() uint32
	ContentSize() int
	Content() []byte
	Offsets() [3]int
	LitEncoder() *huff0.Scratch
}, error) {
	initPredefined()
	d, err := loadDict(b)
	return d, err
}
  0707010000087F000081A4000000000000000000000001645E367C0000104C000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/enc_base.go package zstd

import (
	"fmt"
	"math/bits"

	"github.com/klauspost/compress/zstd/internal/xxhash"
)

const (
	dictShardBits = 6
)

type fastBase struct {
	// cur is the offset at the start of hist
	cur int32
	// maximum offset. Should be at least 2x block size.
	maxMatchOff int32
	bufferReset int32
	hist        []byte
	crc         *xxhash.Digest
	tmp         [8]byte
	blk         *blockEnc
	lastDictID  uint32
	lowMem      bool
}

// CRC returns the underlying CRC writer.
func (e *fastBase) CRC() *xxhash.Digest {
	return e.crc
}

// AppendCRC will append the CRC to the destination slice and return it.
func (e *fastBase) AppendCRC(dst []byte) []byte {
	crc := e.crc.Sum(e.tmp[:0])
	dst = append(dst, crc[7], crc[6], crc[5], crc[4])
	return dst
}

// WindowSize returns the window size of the encoder,
// or a window size small enough to contain the input size, if > 0.
func (e *fastBase) WindowSize(size int64) int32 {
	if size > 0 && size < int64(e.maxMatchOff) {
		b := int32(1) << uint(bits.Len(uint(size)))
		// Keep minimum window.
		if b < 1024 {
			b = 1024
		}
		return b
	}
	return e.maxMatchOff
}

// Block returns the current block.
func (e *fastBase) Block() *blockEnc {
	return e.blk
}

func (e *fastBase) addBlock(src []byte) int32 {
	if debugAsserts && e.cur > e.bufferReset {
		panic(fmt.Sprintf("ecur (%d) > buffer reset (%d)", e.cur, e.bufferReset))
	}
	// check if we have space already
	if len(e.hist)+len(src) > cap(e.hist) {
		if cap(e.hist) == 0 {
			e.ensureHist(len(src))
		} else {
			if cap(e.hist) < int(e.maxMatchOff+maxCompressedBlockSize) {
				panic(fmt.Errorf("unexpected buffer cap %d, want at least %d with window %d", cap(e.hist), e.maxMatchOff+maxCompressedBlockSize, e.maxMatchOff))
			}
			// Move down
			offset := int32(len(e.hist)) - e.maxMatchOff
			copy(e.hist[0:e.maxMatchOff], e.hist[offset:])
			e.cur += offset
			e.hist = e.hist[:e.maxMatchOff]
		}
	}
	s := int32(len(e.hist))
	e.hist = append(e.hist, src...)
	return s
}

// ensureHist will ensure that history can keep at least this many bytes.
func (e *fastBase) ensureHist(n int) {
	if cap(e.hist) >= n {
		return
	}
	l := e.maxMatchOff
	if (e.lowMem && e.maxMatchOff > maxCompressedBlockSize) || e.maxMatchOff <= maxCompressedBlockSize {
		l += maxCompressedBlockSize
	} else {
		l += e.maxMatchOff
	}
	// Make it at least 1MB.
	if l < 1<<20 && !e.lowMem {
		l = 1 << 20
	}
	// Make it at least the requested size.
	if l < int32(n) {
		l = int32(n)
	}
	e.hist = make([]byte, 0, l)
}

// useBlock will replace the block with the provided one,
// but transfer recent offsets from the previous.
func (e *fastBase) UseBlock(enc *blockEnc) {
	enc.reset(e.blk)
	e.blk = enc
}

func (e *fastBase) matchlen(s, t int32, src []byte) int32 {
	if debugAsserts {
		if s < 0 {
			err := fmt.Sprintf("s (%d) < 0", s)
			panic(err)
		}
		if t < 0 {
			err := fmt.Sprintf("s (%d) < 0", s)
			panic(err)
		}
		if s-t > e.maxMatchOff {
			err := fmt.Sprintf("s (%d) - t (%d) > maxMatchOff (%d)", s, t, e.maxMatchOff)
			panic(err)
		}
		if len(src)-int(s) > maxCompressedBlockSize {
			panic(fmt.Sprintf("len(src)-s (%d) > maxCompressedBlockSize (%d)", len(src)-int(s), maxCompressedBlockSize))
		}
	}
	return int32(matchLen(src[s:], src[t:]))
}

// Reset the encoding table.
func (e *fastBase) resetBase(d *dict, singleBlock bool) {
	if e.blk == nil {
		e.blk = &blockEnc{lowMem: e.lowMem}
		e.blk.init()
	} else {
		e.blk.reset(nil)
	}
	e.blk.initNewEncode()
	if e.crc == nil {
		e.crc = xxhash.New()
	} else {
		e.crc.Reset()
	}
	if d != nil {
		low := e.lowMem
		if singleBlock {
			e.lowMem = true
		}
		e.ensureHist(d.ContentSize() + maxCompressedBlockSize)
		e.lowMem = low
	}

	// We offset current position so everything will be out of reach.
	// If above reset line, history will be purged.
	if e.cur < e.bufferReset {
		e.cur += e.maxMatchOff + int32(len(e.hist))
	}
	e.hist = e.hist[:0]
	if d != nil {
		// Set offsets (currently not used)
		for i, off := range d.offsets {
			e.blk.recentOffsets[i] = uint32(off)
			e.blk.prevRecentOffsets[i] = e.blk.recentOffsets[i]
		}
		// Transfer litenc.
		e.blk.dictLitEnc = d.litEnc
		e.hist = append(e.hist, d.content...)
	}
}
07070100000880000081A4000000000000000000000001645E367C00003D37000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/enc_best.go // Copyright 2019+ Klaus Post. All rights reserved.
// License information can be found in the LICENSE file.
// Based on work by Yann Collet, released under BSD License.

package zstd

import (
	"bytes"
	"fmt"

	"github.com/klauspost/compress"
)

const (
	bestLongTableBits = 22                     // Bits used in the long match table
	bestLongTableSize = 1 << bestLongTableBits // Size of the table
	bestLongLen       = 8                      // Bytes used for table hash

	// Note: Increasing the short table bits or making the hash shorter
	// can actually lead to compression degradation since it will 'steal' more from the
	// long match table and match offsets are quite big.
	// This greatly depends on the type of input.
	bestShortTableBits = 18                      // Bits used in the short match table
	bestShortTableSize = 1 << bestShortTableBits // Size of the table
	bestShortLen       = 4                       // Bytes used for table hash

)

type match struct {
	offset int32
	s      int32
	length int32
	rep    int32
	est    int32
}

const highScore = maxMatchLen * 8

// estBits will estimate output bits from predefined tables.
func (m *match) estBits(bitsPerByte int32) {
	mlc := mlCode(uint32(m.length - zstdMinMatch))
	var ofc uint8
	if m.rep < 0 {
		ofc = ofCode(uint32(m.s-m.offset) + 3)
	} else {
		ofc = ofCode(uint32(m.rep))
	}
	// Cost, excluding
	ofTT, mlTT := fsePredefEnc[tableOffsets].ct.symbolTT[ofc], fsePredefEnc[tableMatchLengths].ct.symbolTT[mlc]

	// Add cost of match encoding...
	m.est = int32(ofTT.outBits + mlTT.outBits)
	m.est += int32(ofTT.deltaNbBits>>16 + mlTT.deltaNbBits>>16)
	// Subtract savings compared to literal encoding...
	m.est -= (m.length * bitsPerByte) >> 10
	if m.est > 0 {
		// Unlikely gain..
		m.length = 0
		m.est = highScore
	}
}

// bestFastEncoder uses 2 tables, one for short matches (5 bytes) and one for long matches.
// The long match table contains the previous entry with the same hash,
// effectively making it a "chain" of length 2.
// When we find a long match we choose between the two values and select the longest.
// When we find a short match, after checking the long, we check if we can find a long at n+1
// and that it is longer (lazy matching).
type bestFastEncoder struct {
	fastBase
	table         [bestShortTableSize]prevEntry
	longTable     [bestLongTableSize]prevEntry
	dictTable     []prevEntry
	dictLongTable []prevEntry
}

// Encode improves compression...
func (e *bestFastEncoder) Encode(blk *blockEnc, src []byte) {
	const (
		// Input margin is the number of bytes we read (8)
		// and the maximum we will read ahead (2)
		inputMargin            = 8 + 4
		minNonLiteralBlockSize = 16
	)

	// Protect against e.cur wraparound.
	for e.cur >= e.bufferReset-int32(len(e.hist)) {
		if len(e.hist) == 0 {
			e.table = [bestShortTableSize]prevEntry{}
			e.longTable = [bestLongTableSize]prevEntry{}
			e.cur = e.maxMatchOff
			break
		}
		// Shift down everything in the table that isn't already too far away.
		minOff := e.cur + int32(len(e.hist)) - e.maxMatchOff
		for i := range e.table[:] {
			v := e.table[i].offset
			v2 := e.table[i].prev
			if v < minOff {
				v = 0
				v2 = 0
			} else {
				v = v - e.cur + e.maxMatchOff
				if v2 < minOff {
					v2 = 0
				} else {
					v2 = v2 - e.cur + e.maxMatchOff
				}
			}
			e.table[i] = prevEntry{
				offset: v,
				prev:   v2,
			}
		}
		for i := range e.longTable[:] {
			v := e.longTable[i].offset
			v2 := e.longTable[i].prev
			if v < minOff {
				v = 0
				v2 = 0
			} else {
				v = v - e.cur + e.maxMatchOff
				if v2 < minOff {
					v2 = 0
				} else {
					v2 = v2 - e.cur + e.maxMatchOff
				}
			}
			e.longTable[i] = prevEntry{
				offset: v,
				prev:   v2,
			}
		}
		e.cur = e.maxMatchOff
		break
	}

	s := e.addBlock(src)
	blk.size = len(src)
	if len(src) < minNonLiteralBlockSize {
		blk.extraLits = len(src)
		blk.literals = blk.literals[:len(src)]
		copy(blk.literals, src)
		return
	}

	// Use this to estimate literal cost.
	// Scaled by 10 bits.
	bitsPerByte := int32((compress.ShannonEntropyBits(src) * 1024) / len(src))
	// Huffman can never go < 1 bit/byte
	if bitsPerByte < 1024 {
		bitsPerByte = 1024
	}

	// Override src
	src = e.hist
	sLimit := int32(len(src)) - inputMargin
	const kSearchStrength = 10

	// nextEmit is where in src the next emitLiteral should start from.
	nextEmit := s

	// Relative offsets
	offset1 := int32(blk.recentOffsets[0])
	offset2 := int32(blk.recentOffsets[1])
	offset3 := int32(blk.recentOffsets[2])

	addLiterals := func(s *seq, until int32) {
		if until == nextEmit {
			return
		}
		blk.literals = append(blk.literals, src[nextEmit:until]...)
		s.litLen = uint32(until - nextEmit)
	}

	if debugEncoder {
		println("recent offsets:", blk.recentOffsets)
	}

encodeLoop:
	for {
		// We allow the encoder to optionally turn off repeat offsets across blocks
		canRepeat := len(blk.sequences) > 2

		if debugAsserts && canRepeat && offset1 == 0 {
			panic("offset0 was 0")
		}

		const goodEnough = 250

		cv := load6432(src, s)

		nextHashL := hashLen(cv, bestLongTableBits, bestLongLen)
		nextHashS := hashLen(cv, bestShortTableBits, bestShortLen)
		candidateL := e.longTable[nextHashL]
		candidateS := e.table[nextHashS]

		// Set m to a match at offset if it looks like that will improve compression.
		improve := func(m *match, offset int32, s int32, first uint32, rep int32) {
			if s-offset >= e.maxMatchOff || load3232(src, offset) != first {
				return
			}
			if debugAsserts {
				if offset <= 0 {
					panic(offset)
				}
				if !bytes.Equal(src[s:s+4], src[offset:offset+4]) {
					panic(fmt.Sprintf("first match mismatch: %v != %v, first: %08x", src[s:s+4], src[offset:offset+4], first))
				}
			}
			// Try to quick reject if we already have a long match.
			if m.length > 16 {
				left := len(src) - int(m.s+m.length)
				// If we are too close to the end, keep as is.
				if left <= 0 {
					return
				}
				checkLen := m.length - (s - m.s) - 8
				if left > 2 && checkLen > 4 {
					// Check 4 bytes, 4 bytes from the end of the current match.
					a := load3232(src, offset+checkLen)
					b := load3232(src, s+checkLen)
					if a != b {
						return
					}
				}
			}
			l := 4 + e.matchlen(s+4, offset+4, src)
			if rep < 0 {
				// Extend candidate match backwards as far as possible.
				tMin := s - e.maxMatchOff
				if tMin < 0 {
					tMin = 0
				}
				for offset > tMin && s > nextEmit && src[offset-1] == src[s-1] && l < maxMatchLength {
					s--
					offset--
					l++
				}
			}

			cand := match{offset: offset, s: s, length: l, rep: rep}
			cand.estBits(bitsPerByte)
			if m.est >= highScore || cand.est-m.est+(cand.s-m.s)*bitsPerByte>>10 < 0 {
				*m = cand
			}
		}

		best := match{s: s, est: highScore}
		improve(&best, candidateL.offset-e.cur, s, uint32(cv), -1)
		improve(&best, candidateL.prev-e.cur, s, uint32(cv), -1)
		improve(&best, candidateS.offset-e.cur, s, uint32(cv), -1)
		improve(&best, candidateS.prev-e.cur, s, uint32(cv), -1)

		if canRepeat && best.length < goodEnough {
			if s == nextEmit {
				// Check repeats straight after a match.
				improve(&best, s-offset2, s, uint32(cv), 1|4)
				improve(&best, s-offset3, s, uint32(cv), 2|4)
				if offset1 > 1 {
					improve(&best, s-(offset1-1), s, uint32(cv), 3|4)
				}
			}

			// If either no match or a non-repeat match, check at + 1
			if best.rep <= 0 {
				cv32 := uint32(cv >> 8)
				spp := s + 1
				improve(&best, spp-offset1, spp, cv32, 1)
				improve(&best, spp-offset2, spp, cv32, 2)
				improve(&best, spp-offset3, spp, cv32, 3)
				if best.rep < 0 {
					cv32 = uint32(cv >> 24)
					spp += 2
					improve(&best, spp-offset1, spp, cv32, 1)
					improve(&best, spp-offset2, spp, cv32, 2)
					improve(&best, spp-offset3, spp, cv32, 3)
				}
			}
		}
		// Load next and check...
		e.longTable[nextHashL] = prevEntry{offset: s + e.cur, prev: candidateL.offset}
		e.table[nextHashS] = prevEntry{offset: s + e.cur, prev: candidateS.offset}

		// Look far ahead, unless we have a really long match already...
		if best.length < goodEnough {
			// No match found, move forward on input, no need to check forward...
			if best.length < 4 {
				s += 1 + (s-nextEmit)>>(kSearchStrength-1)
				if s >= sLimit {
					break encodeLoop
				}
				continue
			}

			candidateS = e.table[hashLen(cv>>8, bestShortTableBits, bestShortLen)]
			cv = load6432(src, s+1)
			cv2 := load6432(src, s+2)
			candidateL = e.longTable[hashLen(cv, bestLongTableBits, bestLongLen)]
			candidateL2 := e.longTable[hashLen(cv2, bestLongTableBits, bestLongLen)]

			// Short at s+1
			improve(&best, candidateS.offset-e.cur, s+1, uint32(cv), -1)
			// Long at s+1, s+2
			improve(&best, candidateL.offset-e.cur, s+1, uint32(cv), -1)
			improve(&best, candidateL.prev-e.cur, s+1, uint32(cv), -1)
			improve(&best, candidateL2.offset-e.cur, s+2, uint32(cv2), -1)
			improve(&best, candidateL2.prev-e.cur, s+2, uint32(cv2), -1)
			if false {
				// Short at s+3.
				// Too often worse...
				improve(&best, e.table[hashLen(cv2>>8, bestShortTableBits, bestShortLen)].offset-e.cur, s+3, uint32(cv2>>8), -1)
			}

			// Start check at a fixed offset to allow for a few mismatches.
			// For this compression level 2 yields the best results.
			// We cannot do this if we have already indexed this position.
			const skipBeginning = 2
			if best.s > s-skipBeginning {
				// See if we can find a better match by checking where the current best ends.
				// Use that offset to see if we can find a better full match.
				if sAt := best.s + best.length; sAt < sLimit {
					nextHashL := hashLen(load6432(src, sAt), bestLongTableBits, bestLongLen)
					candidateEnd := e.longTable[nextHashL]

					if off := candidateEnd.offset - e.cur - best.length + skipBeginning; off >= 0 {
						improve(&best, off, best.s+skipBeginning, load3232(src, best.s+skipBeginning), -1)
						if off := candidateEnd.prev - e.cur - best.length + skipBeginning; off >= 0 {
							improve(&best, off, best.s+skipBeginning, load3232(src, best.s+skipBeginning), -1)
						}
					}
				}
			}
		}

		if debugAsserts {
			if !bytes.Equal(src[best.s:best.s+best.length], src[best.offset:best.offset+best.length]) {
				panic(fmt.Sprintf("match mismatch: %v != %v", src[best.s:best.s+best.length], src[best.offset:best.offset+best.length]))
			}
		}

		// We have a match, we can store the forward value
		if best.rep > 0 {
			var seq seq
			seq.matchLen = uint32(best.length - zstdMinMatch)
			if debugAsserts && s <= nextEmit {
				panic("s <= nextEmit")
			}
			addLiterals(&seq, best.s)

			// Repeat. If bit 4 is set, this is a non-lit repeat.
			seq.offset = uint32(best.rep & 3)
			if debugSequences {
				println("repeat sequence", seq, "next s:", s)
			}
			blk.sequences = append(blk.sequences, seq)

			// Index old s + 1 -> s - 1
			index0 := s + 1
			s = best.s + best.length

			nextEmit = s
			if s >= sLimit {
				if debugEncoder {
					println("repeat ended", s, best.length)
				}
				break encodeLoop
			}
			// Index skipped...
			off := index0 + e.cur
			for index0 < s {
				cv0 := load6432(src, index0)
				h0 := hashLen(cv0, bestLongTableBits, bestLongLen)
				h1 := hashLen(cv0, bestShortTableBits, bestShortLen)
				e.longTable[h0] = prevEntry{offset: off, prev: e.longTable[h0].offset}
				e.table[h1] = prevEntry{offset: off, prev: e.table[h1].offset}
				off++
				index0++
			}
			switch best.rep {
			case 2, 4 | 1:
				offset1, offset2 = offset2, offset1
			case 3, 4 | 2:
				offset1, offset2, offset3 = offset3, offset1, offset2
			case 4 | 3:
				offset1, offset2, offset3 = offset1-1, offset1, offset2
			}
			continue
		}

		// A 4-byte match has been found. Update recent offsets.
		// We'll later see if more than 4 bytes.
		index0 := s + 1
		s = best.s
		t := best.offset
		offset1, offset2, offset3 = s-t, offset1, offset2

		if debugAsserts && s <= t {
			panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
		}

		if debugAsserts && int(offset1) > len(src) {
			panic("invalid offset")
		}

		// Write our sequence
		var seq seq
		l := best.length
		seq.litLen = uint32(s - nextEmit)
		seq.matchLen = uint32(l - zstdMinMatch)
		if seq.litLen > 0 {
			blk.literals = append(blk.literals, src[nextEmit:s]...)
		}
		seq.offset = uint32(s-t) + 3
		s += l
		if debugSequences {
			println("sequence", seq, "next s:", s)
		}
		blk.sequences = append(blk.sequences, seq)
		nextEmit = s
		if s >= sLimit {
			break encodeLoop
		}

		// Index old s + 1 -> s - 1
		for index0 < s {
			cv0 := load6432(src, index0)
			h0 := hashLen(cv0, bestLongTableBits, bestLongLen)
			h1 := hashLen(cv0, bestShortTableBits, bestShortLen)
			off := index0 + e.cur
			e.longTable[h0] = prevEntry{offset: off, prev: e.longTable[h0].offset}
			e.table[h1] = prevEntry{offset: off, prev: e.table[h1].offset}
			index0++
		}
	}

	if int(nextEmit) < len(src) {
		blk.literals = append(blk.literals, src[nextEmit:]...)
		blk.extraLits = len(src) - int(nextEmit)
	}
	blk.recentOffsets[0] = uint32(offset1)
	blk.recentOffsets[1] = uint32(offset2)
	blk.recentOffsets[2] = uint32(offset3)
	if debugEncoder {
		println("returning, recent offsets:", blk.recentOffsets, "extra literals:", blk.extraLits)
	}
}

// EncodeNoHist will encode a block with no history and no following blocks.
// Most notable difference is that src will not be copied for history and
// we do not need to check for max match length.
func (e *bestFastEncoder) EncodeNoHist(blk *blockEnc, src []byte) {
	e.ensureHist(len(src))
	e.Encode(blk, src)
}

// Reset will reset and set a dictionary if not nil
func (e *bestFastEncoder) Reset(d *dict, singleBlock bool) {
	e.resetBase(d, singleBlock)
	if d == nil {
		return
	}
	// Init or copy dict table
	if len(e.dictTable) != len(e.table) || d.id != e.lastDictID {
		if len(e.dictTable) != len(e.table) {
			e.dictTable = make([]prevEntry, len(e.table))
		}
		end := int32(len(d.content)) - 8 + e.maxMatchOff
		for i := e.maxMatchOff; i < end; i += 4 {
			const hashLog = bestShortTableBits

			cv := load6432(d.content, i-e.maxMatchOff)
			nextHash := hashLen(cv, hashLog, bestShortLen)      // 0 -> 4
			nextHash1 := hashLen(cv>>8, hashLog, bestShortLen)  // 1 -> 5
			nextHash2 := hashLen(cv>>16, hashLog, bestShortLen) // 2 -> 6
			nextHash3 := hashLen(cv>>24, hashLog, bestShortLen) // 3 -> 7
			e.dictTable[nextHash] = prevEntry{
				prev:   e.dictTable[nextHash].offset,
				offset: i,
			}
			e.dictTable[nextHash1] = prevEntry{
				prev:   e.dictTable[nextHash1].offset,
				offset: i + 1,
			}
			e.dictTable[nextHash2] = prevEntry{
				prev:   e.dictTable[nextHash2].offset,
				offset: i + 2,
			}
			e.dictTable[nextHash3] = prevEntry{
				prev:   e.dictTable[nextHash3].offset,
				offset: i + 3,
			}
		}
		e.lastDictID = d.id
	}

	// Init or copy dict table
	if len(e.dictLongTable) != len(e.longTable) || d.id != e.lastDictID {
		if len(e.dictLongTable) != len(e.longTable) {
			e.dictLongTable = make([]prevEntry, len(e.longTable))
		}
		if len(d.content) >= 8 {
			cv := load6432(d.content, 0)
			h := hashLen(cv, bestLongTableBits, bestLongLen)
			e.dictLongTable[h] = prevEntry{
				offset: e.maxMatchOff,
				prev:   e.dictLongTable[h].offset,
			}

			end := int32(len(d.content)) - 8 + e.maxMatchOff
			off := 8 // First to read
			for i := e.maxMatchOff + 1; i < end; i++ {
				cv = cv>>8 | (uint64(d.content[off]) << 56)
				h := hashLen(cv, bestLongTableBits, bestLongLen)
				e.dictLongTable[h] = prevEntry{
					offset: i,
					prev:   e.dictLongTable[h].offset,
				}
				off++
			}
		}
		e.lastDictID = d.id
	}
	// Reset table to initial state
	copy(e.longTable[:], e.dictLongTable)

	e.cur = e.maxMatchOff
	// Reset table to initial state
	copy(e.table[:], e.dictTable)
}
 07070100000881000081A4000000000000000000000001645E367C0000884C000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/enc_better.go   // Copyright 2019+ Klaus Post. All rights reserved.
// License information can be found in the LICENSE file.
// Based on work by Yann Collet, released under BSD License.

package zstd

import "fmt"

const (
	betterLongTableBits = 19                       // Bits used in the long match table
	betterLongTableSize = 1 << betterLongTableBits // Size of the table
	betterLongLen       = 8                        // Bytes used for table hash

	// Note: Increasing the short table bits or making the hash shorter
	// can actually lead to compression degradation since it will 'steal' more from the
	// long match table and match offsets are quite big.
	// This greatly depends on the type of input.
	betterShortTableBits = 13                        // Bits used in the short match table
	betterShortTableSize = 1 << betterShortTableBits // Size of the table
	betterShortLen       = 5                         // Bytes used for table hash

	betterLongTableShardCnt  = 1 << (betterLongTableBits - dictShardBits)    // Number of shards in the table
	betterLongTableShardSize = betterLongTableSize / betterLongTableShardCnt // Size of an individual shard

	betterShortTableShardCnt  = 1 << (betterShortTableBits - dictShardBits)     // Number of shards in the table
	betterShortTableShardSize = betterShortTableSize / betterShortTableShardCnt // Size of an individual shard
)

type prevEntry struct {
	offset int32
	prev   int32
}

// betterFastEncoder uses 2 tables, one for short matches (5 bytes) and one for long matches.
// The long match table contains the previous entry with the same hash,
// effectively making it a "chain" of length 2.
// When we find a long match we choose between the two values and select the longest.
// When we find a short match, after checking the long, we check if we can find a long at n+1
// and that it is longer (lazy matching).
type betterFastEncoder struct {
	fastBase
	table     [betterShortTableSize]tableEntry
	longTable [betterLongTableSize]prevEntry
}

type betterFastEncoderDict struct {
	betterFastEncoder
	dictTable            []tableEntry
	dictLongTable        []prevEntry
	shortTableShardDirty [betterShortTableShardCnt]bool
	longTableShardDirty  [betterLongTableShardCnt]bool
	allDirty             bool
}

// Encode improves compression...
func (e *betterFastEncoder) Encode(blk *blockEnc, src []byte) {
	const (
		// Input margin is the number of bytes we read (8)
		// and the maximum we will read ahead (2)
		inputMargin            = 8 + 2
		minNonLiteralBlockSize = 16
	)

	// Protect against e.cur wraparound.
	for e.cur >= e.bufferReset-int32(len(e.hist)) {
		if len(e.hist) == 0 {
			e.table = [betterShortTableSize]tableEntry{}
			e.longTable = [betterLongTableSize]prevEntry{}
			e.cur = e.maxMatchOff
			break
		}
		// Shift down everything in the table that isn't already too far away.
		minOff := e.cur + int32(len(e.hist)) - e.maxMatchOff
		for i := range e.table[:] {
			v := e.table[i].offset
			if v < minOff {
				v = 0
			} else {
				v = v - e.cur + e.maxMatchOff
			}
			e.table[i].offset = v
		}
		for i := range e.longTable[:] {
			v := e.longTable[i].offset
			v2 := e.longTable[i].prev
			if v < minOff {
				v = 0
				v2 = 0
			} else {
				v = v - e.cur + e.maxMatchOff
				if v2 < minOff {
					v2 = 0
				} else {
					v2 = v2 - e.cur + e.maxMatchOff
				}
			}
			e.longTable[i] = prevEntry{
				offset: v,
				prev:   v2,
			}
		}
		e.cur = e.maxMatchOff
		break
	}

	s := e.addBlock(src)
	blk.size = len(src)
	if len(src) < minNonLiteralBlockSize {
		blk.extraLits = len(src)
		blk.literals = blk.literals[:len(src)]
		copy(blk.literals, src)
		return
	}

	// Override src
	src = e.hist
	sLimit := int32(len(src)) - inputMargin
	// stepSize is the number of bytes to skip on every main loop iteration.
	// It should be >= 1.
	const stepSize = 1

	const kSearchStrength = 9

	// nextEmit is where in src the next emitLiteral should start from.
	nextEmit := s
	cv := load6432(src, s)

	// Relative offsets
	offset1 := int32(blk.recentOffsets[0])
	offset2 := int32(blk.recentOffsets[1])

	addLiterals := func(s *seq, until int32) {
		if until == nextEmit {
			return
		}
		blk.literals = append(blk.literals, src[nextEmit:until]...)
		s.litLen = uint32(until - nextEmit)
	}
	if debugEncoder {
		println("recent offsets:", blk.recentOffsets)
	}

encodeLoop:
	for {
		var t int32
		// We allow the encoder to optionally turn off repeat offsets across blocks
		canRepeat := len(blk.sequences) > 2
		var matched int32

		for {
			if debugAsserts && canRepeat && offset1 == 0 {
				panic("offset0 was 0")
			}

			nextHashL := hashLen(cv, betterLongTableBits, betterLongLen)
			nextHashS := hashLen(cv, betterShortTableBits, betterShortLen)
			candidateL := e.longTable[nextHashL]
			candidateS := e.table[nextHashS]

			const repOff = 1
			repIndex := s - offset1 + repOff
			off := s + e.cur
			e.longTable[nextHashL] = prevEntry{offset: off, prev: candidateL.offset}
			e.table[nextHashS] = tableEntry{offset: off, val: uint32(cv)}

			if canRepeat {
				if repIndex >= 0 && load3232(src, repIndex) == uint32(cv>>(repOff*8)) {
					// Consider history as well.
					var seq seq
					lenght := 4 + e.matchlen(s+4+repOff, repIndex+4, src)

					seq.matchLen = uint32(lenght - zstdMinMatch)

					// We might be able to match backwards.
					// Extend as long as we can.
					start := s + repOff
					// We end the search early, so we don't risk 0 literals
					// and have to do special offset treatment.
					startLimit := nextEmit + 1

					tMin := s - e.maxMatchOff
					if tMin < 0 {
						tMin = 0
					}
					for repIndex > tMin && start > startLimit && src[repIndex-1] == src[start-1] && seq.matchLen < maxMatchLength-zstdMinMatch-1 {
						repIndex--
						start--
						seq.matchLen++
					}
					addLiterals(&seq, start)

					// rep 0
					seq.offset = 1
					if debugSequences {
						println("repeat sequence", seq, "next s:", s)
					}
					blk.sequences = append(blk.sequences, seq)

					// Index match start+1 (long) -> s - 1
					index0 := s + repOff
					s += lenght + repOff

					nextEmit = s
					if s >= sLimit {
						if debugEncoder {
							println("repeat ended", s, lenght)

						}
						break encodeLoop
					}
					// Index skipped...
					for index0 < s-1 {
						cv0 := load6432(src, index0)
						cv1 := cv0 >> 8
						h0 := hashLen(cv0, betterLongTableBits, betterLongLen)
						off := index0 + e.cur
						e.longTable[h0] = prevEntry{offset: off, prev: e.longTable[h0].offset}
						e.table[hashLen(cv1, betterShortTableBits, betterShortLen)] = tableEntry{offset: off + 1, val: uint32(cv1)}
						index0 += 2
					}
					cv = load6432(src, s)
					continue
				}
				const repOff2 = 1

				// We deviate from the reference encoder and also check offset 2.
				// Still slower and not much better, so disabled.
				// repIndex = s - offset2 + repOff2
				if false && repIndex >= 0 && load6432(src, repIndex) == load6432(src, s+repOff) {
					// Consider history as well.
					var seq seq
					lenght := 8 + e.matchlen(s+8+repOff2, repIndex+8, src)

					seq.matchLen = uint32(lenght - zstdMinMatch)

					// We might be able to match backwards.
					// Extend as long as we can.
					start := s + repOff2
					// We end the search early, so we don't risk 0 literals
					// and have to do special offset treatment.
					startLimit := nextEmit + 1

					tMin := s - e.maxMatchOff
					if tMin < 0 {
						tMin = 0
					}
					for repIndex > tMin && start > startLimit && src[repIndex-1] == src[start-1] && seq.matchLen < maxMatchLength-zstdMinMatch-1 {
						repIndex--
						start--
						seq.matchLen++
					}
					addLiterals(&seq, start)

					// rep 2
					seq.offset = 2
					if debugSequences {
						println("repeat sequence 2", seq, "next s:", s)
					}
					blk.sequences = append(blk.sequences, seq)

					index0 := s + repOff2
					s += lenght + repOff2
					nextEmit = s
					if s >= sLimit {
						if debugEncoder {
							println("repeat ended", s, lenght)

						}
						break encodeLoop
					}

					// Index skipped...
					for index0 < s-1 {
						cv0 := load6432(src, index0)
						cv1 := cv0 >> 8
						h0 := hashLen(cv0, betterLongTableBits, betterLongLen)
						off := index0 + e.cur
						e.longTable[h0] = prevEntry{offset: off, prev: e.longTable[h0].offset}
						e.table[hashLen(cv1, betterShortTableBits, betterShortLen)] = tableEntry{offset: off + 1, val: uint32(cv1)}
						index0 += 2
					}
					cv = load6432(src, s)
					// Swap offsets
					offset1, offset2 = offset2, offset1
					continue
				}
			}
			// Find the offsets of our two matches.
			coffsetL := candidateL.offset - e.cur
			coffsetLP := candidateL.prev - e.cur

			// Check if we have a long match.
			if s-coffsetL < e.maxMatchOff && cv == load6432(src, coffsetL) {
				// Found a long match, at least 8 bytes.
				matched = e.matchlen(s+8, coffsetL+8, src) + 8
				t = coffsetL
				if debugAsserts && s <= t {
					panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
				}
				if debugAsserts && s-t > e.maxMatchOff {
					panic("s - t >e.maxMatchOff")
				}
				if debugMatches {
					println("long match")
				}

				if s-coffsetLP < e.maxMatchOff && cv == load6432(src, coffsetLP) {
					// Found a long match, at least 8 bytes.
					prevMatch := e.matchlen(s+8, coffsetLP+8, src) + 8
					if prevMatch > matched {
						matched = prevMatch
						t = coffsetLP
					}
					if debugAsserts && s <= t {
						panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
					}
					if debugAsserts && s-t > e.maxMatchOff {
						panic("s - t >e.maxMatchOff")
					}
					if debugMatches {
						println("long match")
					}
				}
				break
			}

			// Check if we have a long match on prev.
			if s-coffsetLP < e.maxMatchOff && cv == load6432(src, coffsetLP) {
				// Found a long match, at least 8 bytes.
				matched = e.matchlen(s+8, coffsetLP+8, src) + 8
				t = coffsetLP
				if debugAsserts && s <= t {
					panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
				}
				if debugAsserts && s-t > e.maxMatchOff {
					panic("s - t >e.maxMatchOff")
				}
				if debugMatches {
					println("long match")
				}
				break
			}

			coffsetS := candidateS.offset - e.cur

			// Check if we have a short match.
			if s-coffsetS < e.maxMatchOff && uint32(cv) == candidateS.val {
				// found a regular match
				matched = e.matchlen(s+4, coffsetS+4, src) + 4

				// See if we can find a long match at s+1
				const checkAt = 1
				cv := load6432(src, s+checkAt)
				nextHashL = hashLen(cv, betterLongTableBits, betterLongLen)
				candidateL = e.longTable[nextHashL]
				coffsetL = candidateL.offset - e.cur

				// We can store it, since we have at least a 4 byte match.
				e.longTable[nextHashL] = prevEntry{offset: s + checkAt + e.cur, prev: candidateL.offset}
				if s-coffsetL < e.maxMatchOff && cv == load6432(src, coffsetL) {
					// Found a long match, at least 8 bytes.
					matchedNext := e.matchlen(s+8+checkAt, coffsetL+8, src) + 8
					if matchedNext > matched {
						t = coffsetL
						s += checkAt
						matched = matchedNext
						if debugMatches {
							println("long match (after short)")
						}
						break
					}
				}

				// Check prev long...
				coffsetL = candidateL.prev - e.cur
				if s-coffsetL < e.maxMatchOff && cv == load6432(src, coffsetL) {
					// Found a long match, at least 8 bytes.
					matchedNext := e.matchlen(s+8+checkAt, coffsetL+8, src) + 8
					if matchedNext > matched {
						t = coffsetL
						s += checkAt
						matched = matchedNext
						if debugMatches {
							println("prev long match (after short)")
						}
						break
					}
				}
				t = coffsetS
				if debugAsserts && s <= t {
					panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
				}
				if debugAsserts && s-t > e.maxMatchOff {
					panic("s - t >e.maxMatchOff")
				}
				if debugAsserts && t < 0 {
					panic("t<0")
				}
				if debugMatches {
					println("short match")
				}
				break
			}

			// No match found, move forward in input.
			s += stepSize + ((s - nextEmit) >> (kSearchStrength - 1))
			if s >= sLimit {
				break encodeLoop
			}
			cv = load6432(src, s)
		}

		// Try to find a better match by searching for a long match at the end of the current best match
		if s+matched < sLimit {
			// Allow some bytes at the beginning to mismatch.
			// Sweet spot is around 3 bytes, but depends on input.
			// The skipped bytes are tested in Extend backwards,
			// and still picked up as part of the match if they do.
			const skipBeginning = 3

			nextHashL := hashLen(load6432(src, s+matched), betterLongTableBits, betterLongLen)
			s2 := s + skipBeginning
			cv := load3232(src, s2)
			candidateL := e.longTable[nextHashL]
			coffsetL := candidateL.offset - e.cur - matched + skipBeginning
			if coffsetL >= 0 && coffsetL < s2 && s2-coffsetL < e.maxMatchOff && cv == load3232(src, coffsetL) {
				// Found a long match, at least 4 bytes.
				matchedNext := e.matchlen(s2+4, coffsetL+4, src) + 4
				if matchedNext > matched {
					t = coffsetL
					s = s2
					matched = matchedNext
					if debugMatches {
						println("long match at end-of-match")
					}
				}
			}

			// Check prev long...
			if true {
				coffsetL = candidateL.prev - e.cur - matched + skipBeginning
				if coffsetL >= 0 && coffsetL < s2 && s2-coffsetL < e.maxMatchOff && cv == load3232(src, coffsetL) {
					// Found a long match, at least 4 bytes.
					matchedNext := e.matchlen(s2+4, coffsetL+4, src) + 4
					if matchedNext > matched {
						t = coffsetL
						s = s2
						matched = matchedNext
						if debugMatches {
							println("prev long match at end-of-match")
						}
					}
				}
			}
		}
		// A match has been found. Update recent offsets.
		offset2 = offset1
		offset1 = s - t

		if debugAsserts && s <= t {
			panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
		}

		if debugAsserts && canRepeat && int(offset1) > len(src) {
			panic("invalid offset")
		}

		// Extend the n-byte match as long as possible.
		l := matched

		// Extend backwards
		tMin := s - e.maxMatchOff
		if tMin < 0 {
			tMin = 0
		}
		for t > tMin && s > nextEmit && src[t-1] == src[s-1] && l < maxMatchLength {
			s--
			t--
			l++
		}

		// Write our sequence
		var seq seq
		seq.litLen = uint32(s - nextEmit)
		seq.matchLen = uint32(l - zstdMinMatch)
		if seq.litLen > 0 {
			blk.literals = append(blk.literals, src[nextEmit:s]...)
		}
		seq.offset = uint32(s-t) + 3
		s += l
		if debugSequences {
			println("sequence", seq, "next s:", s)
		}
		blk.sequences = append(blk.sequences, seq)
		nextEmit = s
		if s >= sLimit {
			break encodeLoop
		}

		// Index match start+1 (long) -> s - 1
		index0 := s - l + 1
		for index0 < s-1 {
			cv0 := load6432(src, index0)
			cv1 := cv0 >> 8
			h0 := hashLen(cv0, betterLongTableBits, betterLongLen)
			off := index0 + e.cur
			e.longTable[h0] = prevEntry{offset: off, prev: e.longTable[h0].offset}
			e.table[hashLen(cv1, betterShortTableBits, betterShortLen)] = tableEntry{offset: off + 1, val: uint32(cv1)}
			index0 += 2
		}

		cv = load6432(src, s)
		if !canRepeat {
			continue
		}

		// Check offset 2
		for {
			o2 := s - offset2
			if load3232(src, o2) != uint32(cv) {
				// Do regular search
				break
			}

			// Store this, since we have it.
			nextHashL := hashLen(cv, betterLongTableBits, betterLongLen)
			nextHashS := hashLen(cv, betterShortTableBits, betterShortLen)

			// We have at least 4 byte match.
			// No need to check backwards. We come straight from a match
			l := 4 + e.matchlen(s+4, o2+4, src)

			e.longTable[nextHashL] = prevEntry{offset: s + e.cur, prev: e.longTable[nextHashL].offset}
			e.table[nextHashS] = tableEntry{offset: s + e.cur, val: uint32(cv)}
			seq.matchLen = uint32(l) - zstdMinMatch
			seq.litLen = 0

			// Since litlen is always 0, this is offset 1.
			seq.offset = 1
			s += l
			nextEmit = s
			if debugSequences {
				println("sequence", seq, "next s:", s)
			}
			blk.sequences = append(blk.sequences, seq)

			// Swap offset 1 and 2.
			offset1, offset2 = offset2, offset1
			if s >= sLimit {
				// Finished
				break encodeLoop
			}
			cv = load6432(src, s)
		}
	}

	if int(nextEmit) < len(src) {
		blk.literals = append(blk.literals, src[nextEmit:]...)
		blk.extraLits = len(src) - int(nextEmit)
	}
	blk.recentOffsets[0] = uint32(offset1)
	blk.recentOffsets[1] = uint32(offset2)
	if debugEncoder {
		println("returning, recent offsets:", blk.recentOffsets, "extra literals:", blk.extraLits)
	}
}

// EncodeNoHist will encode a block with no history and no following blocks.
// Most notable difference is that src will not be copied for history and
// we do not need to check for max match length.
func (e *betterFastEncoder) EncodeNoHist(blk *blockEnc, src []byte) {
	e.ensureHist(len(src))
	e.Encode(blk, src)
}

// Encode improves compression...
func (e *betterFastEncoderDict) Encode(blk *blockEnc, src []byte) {
	const (
		// Input margin is the number of bytes we read (8)
		// and the maximum we will read ahead (2)
		inputMargin            = 8 + 2
		minNonLiteralBlockSize = 16
	)

	// Protect against e.cur wraparound.
	for e.cur >= e.bufferReset-int32(len(e.hist)) {
		if len(e.hist) == 0 {
			for i := range e.table[:] {
				e.table[i] = tableEntry{}
			}
			for i := range e.longTable[:] {
				e.longTable[i] = prevEntry{}
			}
			e.cur = e.maxMatchOff
			e.allDirty = true
			break
		}
		// Shift down everything in the table that isn't already too far away.
		minOff := e.cur + int32(len(e.hist)) - e.maxMatchOff
		for i := range e.table[:] {
			v := e.table[i].offset
			if v < minOff {
				v = 0
			} else {
				v = v - e.cur + e.maxMatchOff
			}
			e.table[i].offset = v
		}
		for i := range e.longTable[:] {
			v := e.longTable[i].offset
			v2 := e.longTable[i].prev
			if v < minOff {
				v = 0
				v2 = 0
			} else {
				v = v - e.cur + e.maxMatchOff
				if v2 < minOff {
					v2 = 0
				} else {
					v2 = v2 - e.cur + e.maxMatchOff
				}
			}
			e.longTable[i] = prevEntry{
				offset: v,
				prev:   v2,
			}
		}
		e.allDirty = true
		e.cur = e.maxMatchOff
		break
	}

	s := e.addBlock(src)
	blk.size = len(src)
	if len(src) < minNonLiteralBlockSize {
		blk.extraLits = len(src)
		blk.literals = blk.literals[:len(src)]
		copy(blk.literals, src)
		return
	}

	// Override src
	src = e.hist
	sLimit := int32(len(src)) - inputMargin
	// stepSize is the number of bytes to skip on every main loop iteration.
	// It should be >= 1.
	const stepSize = 1

	const kSearchStrength = 9

	// nextEmit is where in src the next emitLiteral should start from.
	nextEmit := s
	cv := load6432(src, s)

	// Relative offsets
	offset1 := int32(blk.recentOffsets[0])
	offset2 := int32(blk.recentOffsets[1])

	addLiterals := func(s *seq, until int32) {
		if until == nextEmit {
			return
		}
		blk.literals = append(blk.literals, src[nextEmit:until]...)
		s.litLen = uint32(until - nextEmit)
	}
	if debugEncoder {
		println("recent offsets:", blk.recentOffsets)
	}

encodeLoop:
	for {
		var t int32
		// We allow the encoder to optionally turn off repeat offsets across blocks
		canRepeat := len(blk.sequences) > 2
		var matched int32

		for {
			if debugAsserts && canRepeat && offset1 == 0 {
				panic("offset0 was 0")
			}

			nextHashL := hashLen(cv, betterLongTableBits, betterLongLen)
			nextHashS := hashLen(cv, betterShortTableBits, betterShortLen)
			candidateL := e.longTable[nextHashL]
			candidateS := e.table[nextHashS]

			const repOff = 1
			repIndex := s - offset1 + repOff
			off := s + e.cur
			e.longTable[nextHashL] = prevEntry{offset: off, prev: candidateL.offset}
			e.markLongShardDirty(nextHashL)
			e.table[nextHashS] = tableEntry{offset: off, val: uint32(cv)}
			e.markShortShardDirty(nextHashS)

			if canRepeat {
				if repIndex >= 0 && load3232(src, repIndex) == uint32(cv>>(repOff*8)) {
					// Consider history as well.
					var seq seq
					lenght := 4 + e.matchlen(s+4+repOff, repIndex+4, src)

					seq.matchLen = uint32(lenght - zstdMinMatch)

					// We might be able to match backwards.
					// Extend as long as we can.
					start := s + repOff
					// We end the search early, so we don't risk 0 literals
					// and have to do special offset treatment.
					startLimit := nextEmit + 1

					tMin := s - e.maxMatchOff
					if tMin < 0 {
						tMin = 0
					}
					for repIndex > tMin && start > startLimit && src[repIndex-1] == src[start-1] && seq.matchLen < maxMatchLength-zstdMinMatch-1 {
						repIndex--
						start--
						seq.matchLen++
					}
					addLiterals(&seq, start)

					// rep 0
					seq.offset = 1
					if debugSequences {
						println("repeat sequence", seq, "next s:", s)
					}
					blk.sequences = append(blk.sequences, seq)

					// Index match start+1 (long) -> s - 1
					index0 := s + repOff
					s += lenght + repOff

					nextEmit = s
					if s >= sLimit {
						if debugEncoder {
							println("repeat ended", s, lenght)

						}
						break encodeLoop
					}
					// Index skipped...
					for index0 < s-1 {
						cv0 := load6432(src, index0)
						cv1 := cv0 >> 8
						h0 := hashLen(cv0, betterLongTableBits, betterLongLen)
						off := index0 + e.cur
						e.longTable[h0] = prevEntry{offset: off, prev: e.longTable[h0].offset}
						e.markLongShardDirty(h0)
						h1 := hashLen(cv1, betterShortTableBits, betterShortLen)
						e.table[h1] = tableEntry{offset: off + 1, val: uint32(cv1)}
						e.markShortShardDirty(h1)
						index0 += 2
					}
					cv = load6432(src, s)
					continue
				}
				const repOff2 = 1

				// We deviate from the reference encoder and also check offset 2.
				// Still slower and not much better, so disabled.
				// repIndex = s - offset2 + repOff2
				if false && repIndex >= 0 && load6432(src, repIndex) == load6432(src, s+repOff) {
					// Consider history as well.
					var seq seq
					lenght := 8 + e.matchlen(s+8+repOff2, repIndex+8, src)

					seq.matchLen = uint32(lenght - zstdMinMatch)

					// We might be able to match backwards.
					// Extend as long as we can.
					start := s + repOff2
					// We end the search early, so we don't risk 0 literals
					// and have to do special offset treatment.
					startLimit := nextEmit + 1

					tMin := s - e.maxMatchOff
					if tMin < 0 {
						tMin = 0
					}
					for repIndex > tMin && start > startLimit && src[repIndex-1] == src[start-1] && seq.matchLen < maxMatchLength-zstdMinMatch-1 {
						repIndex--
						start--
						seq.matchLen++
					}
					addLiterals(&seq, start)

					// rep 2
					seq.offset = 2
					if debugSequences {
						println("repeat sequence 2", seq, "next s:", s)
					}
					blk.sequences = append(blk.sequences, seq)

					index0 := s + repOff2
					s += lenght + repOff2
					nextEmit = s
					if s >= sLimit {
						if debugEncoder {
							println("repeat ended", s, lenght)

						}
						break encodeLoop
					}

					// Index skipped...
					for index0 < s-1 {
						cv0 := load6432(src, index0)
						cv1 := cv0 >> 8
						h0 := hashLen(cv0, betterLongTableBits, betterLongLen)
						off := index0 + e.cur
						e.longTable[h0] = prevEntry{offset: off, prev: e.longTable[h0].offset}
						e.markLongShardDirty(h0)
						h1 := hashLen(cv1, betterShortTableBits, betterShortLen)
						e.table[h1] = tableEntry{offset: off + 1, val: uint32(cv1)}
						e.markShortShardDirty(h1)
						index0 += 2
					}
					cv = load6432(src, s)
					// Swap offsets
					offset1, offset2 = offset2, offset1
					continue
				}
			}
			// Find the offsets of our two matches.
			coffsetL := candidateL.offset - e.cur
			coffsetLP := candidateL.prev - e.cur

			// Check if we have a long match.
			if s-coffsetL < e.maxMatchOff && cv == load6432(src, coffsetL) {
				// Found a long match, at least 8 bytes.
				matched = e.matchlen(s+8, coffsetL+8, src) + 8
				t = coffsetL
				if debugAsserts && s <= t {
					panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
				}
				if debugAsserts && s-t > e.maxMatchOff {
					panic("s - t >e.maxMatchOff")
				}
				if debugMatches {
					println("long match")
				}

				if s-coffsetLP < e.maxMatchOff && cv == load6432(src, coffsetLP) {
					// Found a long match, at least 8 bytes.
					prevMatch := e.matchlen(s+8, coffsetLP+8, src) + 8
					if prevMatch > matched {
						matched = prevMatch
						t = coffsetLP
					}
					if debugAsserts && s <= t {
						panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
					}
					if debugAsserts && s-t > e.maxMatchOff {
						panic("s - t >e.maxMatchOff")
					}
					if debugMatches {
						println("long match")
					}
				}
				break
			}

			// Check if we have a long match on prev.
			if s-coffsetLP < e.maxMatchOff && cv == load6432(src, coffsetLP) {
				// Found a long match, at least 8 bytes.
				matched = e.matchlen(s+8, coffsetLP+8, src) + 8
				t = coffsetLP
				if debugAsserts && s <= t {
					panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
				}
				if debugAsserts && s-t > e.maxMatchOff {
					panic("s - t >e.maxMatchOff")
				}
				if debugMatches {
					println("long match")
				}
				break
			}

			coffsetS := candidateS.offset - e.cur

			// Check if we have a short match.
			if s-coffsetS < e.maxMatchOff && uint32(cv) == candidateS.val {
				// found a regular match
				matched = e.matchlen(s+4, coffsetS+4, src) + 4

				// See if we can find a long match at s+1
				const checkAt = 1
				cv := load6432(src, s+checkAt)
				nextHashL = hashLen(cv, betterLongTableBits, betterLongLen)
				candidateL = e.longTable[nextHashL]
				coffsetL = candidateL.offset - e.cur

				// We can store it, since we have at least a 4 byte match.
				e.longTable[nextHashL] = prevEntry{offset: s + checkAt + e.cur, prev: candidateL.offset}
				e.markLongShardDirty(nextHashL)
				if s-coffsetL < e.maxMatchOff && cv == load6432(src, coffsetL) {
					// Found a long match, at least 8 bytes.
					matchedNext := e.matchlen(s+8+checkAt, coffsetL+8, src) + 8
					if matchedNext > matched {
						t = coffsetL
						s += checkAt
						matched = matchedNext
						if debugMatches {
							println("long match (after short)")
						}
						break
					}
				}

				// Check prev long...
				coffsetL = candidateL.prev - e.cur
				if s-coffsetL < e.maxMatchOff && cv == load6432(src, coffsetL) {
					// Found a long match, at least 8 bytes.
					matchedNext := e.matchlen(s+8+checkAt, coffsetL+8, src) + 8
					if matchedNext > matched {
						t = coffsetL
						s += checkAt
						matched = matchedNext
						if debugMatches {
							println("prev long match (after short)")
						}
						break
					}
				}
				t = coffsetS
				if debugAsserts && s <= t {
					panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
				}
				if debugAsserts && s-t > e.maxMatchOff {
					panic("s - t >e.maxMatchOff")
				}
				if debugAsserts && t < 0 {
					panic("t<0")
				}
				if debugMatches {
					println("short match")
				}
				break
			}

			// No match found, move forward in input.
			s += stepSize + ((s - nextEmit) >> (kSearchStrength - 1))
			if s >= sLimit {
				break encodeLoop
			}
			cv = load6432(src, s)
		}
		// Try to find a better match by searching for a long match at the end of the current best match
		if s+matched < sLimit {
			nextHashL := hashLen(load6432(src, s+matched), betterLongTableBits, betterLongLen)
			cv := load3232(src, s)
			candidateL := e.longTable[nextHashL]
			coffsetL := candidateL.offset - e.cur - matched
			if coffsetL >= 0 && coffsetL < s && s-coffsetL < e.maxMatchOff && cv == load3232(src, coffsetL) {
				// Found a long match, at least 4 bytes.
				matchedNext := e.matchlen(s+4, coffsetL+4, src) + 4
				if matchedNext > matched {
					t = coffsetL
					matched = matchedNext
					if debugMatches {
						println("long match at end-of-match")
					}
				}
			}

			// Check prev long...
			if true {
				coffsetL = candidateL.prev - e.cur - matched
				if coffsetL >= 0 && coffsetL < s && s-coffsetL < e.maxMatchOff && cv == load3232(src, coffsetL) {
					// Found a long match, at least 4 bytes.
					matchedNext := e.matchlen(s+4, coffsetL+4, src) + 4
					if matchedNext > matched {
						t = coffsetL
						matched = matchedNext
						if debugMatches {
							println("prev long match at end-of-match")
						}
					}
				}
			}
		}
		// A match has been found. Update recent offsets.
		offset2 = offset1
		offset1 = s - t

		if debugAsserts && s <= t {
			panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
		}

		if debugAsserts && canRepeat && int(offset1) > len(src) {
			panic("invalid offset")
		}

		// Extend the n-byte match as long as possible.
		l := matched

		// Extend backwards
		tMin := s - e.maxMatchOff
		if tMin < 0 {
			tMin = 0
		}
		for t > tMin && s > nextEmit && src[t-1] == src[s-1] && l < maxMatchLength {
			s--
			t--
			l++
		}

		// Write our sequence
		var seq seq
		seq.litLen = uint32(s - nextEmit)
		seq.matchLen = uint32(l - zstdMinMatch)
		if seq.litLen > 0 {
			blk.literals = append(blk.literals, src[nextEmit:s]...)
		}
		seq.offset = uint32(s-t) + 3
		s += l
		if debugSequences {
			println("sequence", seq, "next s:", s)
		}
		blk.sequences = append(blk.sequences, seq)
		nextEmit = s
		if s >= sLimit {
			break encodeLoop
		}

		// Index match start+1 (long) -> s - 1
		index0 := s - l + 1
		for index0 < s-1 {
			cv0 := load6432(src, index0)
			cv1 := cv0 >> 8
			h0 := hashLen(cv0, betterLongTableBits, betterLongLen)
			off := index0 + e.cur
			e.longTable[h0] = prevEntry{offset: off, prev: e.longTable[h0].offset}
			e.markLongShardDirty(h0)
			h1 := hashLen(cv1, betterShortTableBits, betterShortLen)
			e.table[h1] = tableEntry{offset: off + 1, val: uint32(cv1)}
			e.markShortShardDirty(h1)
			index0 += 2
		}

		cv = load6432(src, s)
		if !canRepeat {
			continue
		}

		// Check offset 2
		for {
			o2 := s - offset2
			if load3232(src, o2) != uint32(cv) {
				// Do regular search
				break
			}

			// Store this, since we have it.
			nextHashL := hashLen(cv, betterLongTableBits, betterLongLen)
			nextHashS := hashLen(cv, betterShortTableBits, betterShortLen)

			// We have at least 4 byte match.
			// No need to check backwards. We come straight from a match
			l := 4 + e.matchlen(s+4, o2+4, src)

			e.longTable[nextHashL] = prevEntry{offset: s + e.cur, prev: e.longTable[nextHashL].offset}
			e.markLongShardDirty(nextHashL)
			e.table[nextHashS] = tableEntry{offset: s + e.cur, val: uint32(cv)}
			e.markShortShardDirty(nextHashS)
			seq.matchLen = uint32(l) - zstdMinMatch
			seq.litLen = 0

			// Since litlen is always 0, this is offset 1.
			seq.offset = 1
			s += l
			nextEmit = s
			if debugSequences {
				println("sequence", seq, "next s:", s)
			}
			blk.sequences = append(blk.sequences, seq)

			// Swap offset 1 and 2.
			offset1, offset2 = offset2, offset1
			if s >= sLimit {
				// Finished
				break encodeLoop
			}
			cv = load6432(src, s)
		}
	}

	if int(nextEmit) < len(src) {
		blk.literals = append(blk.literals, src[nextEmit:]...)
		blk.extraLits = len(src) - int(nextEmit)
	}
	blk.recentOffsets[0] = uint32(offset1)
	blk.recentOffsets[1] = uint32(offset2)
	if debugEncoder {
		println("returning, recent offsets:", blk.recentOffsets, "extra literals:", blk.extraLits)
	}
}

// ResetDict will reset and set a dictionary if not nil
func (e *betterFastEncoder) Reset(d *dict, singleBlock bool) {
	e.resetBase(d, singleBlock)
	if d != nil {
		panic("betterFastEncoder: Reset with dict")
	}
}

// ResetDict will reset and set a dictionary if not nil
func (e *betterFastEncoderDict) Reset(d *dict, singleBlock bool) {
	e.resetBase(d, singleBlock)
	if d == nil {
		return
	}
	// Init or copy dict table
	if len(e.dictTable) != len(e.table) || d.id != e.lastDictID {
		if len(e.dictTable) != len(e.table) {
			e.dictTable = make([]tableEntry, len(e.table))
		}
		end := int32(len(d.content)) - 8 + e.maxMatchOff
		for i := e.maxMatchOff; i < end; i += 4 {
			const hashLog = betterShortTableBits

			cv := load6432(d.content, i-e.maxMatchOff)
			nextHash := hashLen(cv, hashLog, betterShortLen)      // 0 -> 4
			nextHash1 := hashLen(cv>>8, hashLog, betterShortLen)  // 1 -> 5
			nextHash2 := hashLen(cv>>16, hashLog, betterShortLen) // 2 -> 6
			nextHash3 := hashLen(cv>>24, hashLog, betterShortLen) // 3 -> 7
			e.dictTable[nextHash] = tableEntry{
				val:    uint32(cv),
				offset: i,
			}
			e.dictTable[nextHash1] = tableEntry{
				val:    uint32(cv >> 8),
				offset: i + 1,
			}
			e.dictTable[nextHash2] = tableEntry{
				val:    uint32(cv >> 16),
				offset: i + 2,
			}
			e.dictTable[nextHash3] = tableEntry{
				val:    uint32(cv >> 24),
				offset: i + 3,
			}
		}
		e.lastDictID = d.id
		e.allDirty = true
	}

	// Init or copy dict table
	if len(e.dictLongTable) != len(e.longTable) || d.id != e.lastDictID {
		if len(e.dictLongTable) != len(e.longTable) {
			e.dictLongTable = make([]prevEntry, len(e.longTable))
		}
		if len(d.content) >= 8 {
			cv := load6432(d.content, 0)
			h := hashLen(cv, betterLongTableBits, betterLongLen)
			e.dictLongTable[h] = prevEntry{
				offset: e.maxMatchOff,
				prev:   e.dictLongTable[h].offset,
			}

			end := int32(len(d.content)) - 8 + e.maxMatchOff
			off := 8 // First to read
			for i := e.maxMatchOff + 1; i < end; i++ {
				cv = cv>>8 | (uint64(d.content[off]) << 56)
				h := hashLen(cv, betterLongTableBits, betterLongLen)
				e.dictLongTable[h] = prevEntry{
					offset: i,
					prev:   e.dictLongTable[h].offset,
				}
				off++
			}
		}
		e.lastDictID = d.id
		e.allDirty = true
	}

	// Reset table to initial state
	{
		dirtyShardCnt := 0
		if !e.allDirty {
			for i := range e.shortTableShardDirty {
				if e.shortTableShardDirty[i] {
					dirtyShardCnt++
				}
			}
		}
		const shardCnt = betterShortTableShardCnt
		const shardSize = betterShortTableShardSize
		if e.allDirty || dirtyShardCnt > shardCnt*4/6 {
			copy(e.table[:], e.dictTable)
			for i := range e.shortTableShardDirty {
				e.shortTableShardDirty[i] = false
			}
		} else {
			for i := range e.shortTableShardDirty {
				if !e.shortTableShardDirty[i] {
					continue
				}

				copy(e.table[i*shardSize:(i+1)*shardSize], e.dictTable[i*shardSize:(i+1)*shardSize])
				e.shortTableShardDirty[i] = false
			}
		}
	}
	{
		dirtyShardCnt := 0
		if !e.allDirty {
			for i := range e.shortTableShardDirty {
				if e.shortTableShardDirty[i] {
					dirtyShardCnt++
				}
			}
		}
		const shardCnt = betterLongTableShardCnt
		const shardSize = betterLongTableShardSize
		if e.allDirty || dirtyShardCnt > shardCnt*4/6 {
			copy(e.longTable[:], e.dictLongTable)
			for i := range e.longTableShardDirty {
				e.longTableShardDirty[i] = false
			}
		} else {
			for i := range e.longTableShardDirty {
				if !e.longTableShardDirty[i] {
					continue
				}

				copy(e.longTable[i*shardSize:(i+1)*shardSize], e.dictLongTable[i*shardSize:(i+1)*shardSize])
				e.longTableShardDirty[i] = false
			}
		}
	}
	e.cur = e.maxMatchOff
	e.allDirty = false
}

func (e *betterFastEncoderDict) markLongShardDirty(entryNum uint32) {
	e.longTableShardDirty[entryNum/betterLongTableShardSize] = true
}

func (e *betterFastEncoderDict) markShortShardDirty(entryNum uint32) {
	e.shortTableShardDirty[entryNum/betterShortTableShardSize] = true
}
07070100000882000081A4000000000000000000000001645E367C00007837000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/enc_dfast.go    // Copyright 2019+ Klaus Post. All rights reserved.
// License information can be found in the LICENSE file.
// Based on work by Yann Collet, released under BSD License.

package zstd

import "fmt"

const (
	dFastLongTableBits = 17                      // Bits used in the long match table
	dFastLongTableSize = 1 << dFastLongTableBits // Size of the table
	dFastLongTableMask = dFastLongTableSize - 1  // Mask for table indices. Redundant, but can eliminate bounds checks.
	dFastLongLen       = 8                       // Bytes used for table hash

	dLongTableShardCnt  = 1 << (dFastLongTableBits - dictShardBits) // Number of shards in the table
	dLongTableShardSize = dFastLongTableSize / tableShardCnt        // Size of an individual shard

	dFastShortTableBits = tableBits                // Bits used in the short match table
	dFastShortTableSize = 1 << dFastShortTableBits // Size of the table
	dFastShortTableMask = dFastShortTableSize - 1  // Mask for table indices. Redundant, but can eliminate bounds checks.
	dFastShortLen       = 5                        // Bytes used for table hash

)

type doubleFastEncoder struct {
	fastEncoder
	longTable [dFastLongTableSize]tableEntry
}

type doubleFastEncoderDict struct {
	fastEncoderDict
	longTable           [dFastLongTableSize]tableEntry
	dictLongTable       []tableEntry
	longTableShardDirty [dLongTableShardCnt]bool
}

// Encode mimmics functionality in zstd_dfast.c
func (e *doubleFastEncoder) Encode(blk *blockEnc, src []byte) {
	const (
		// Input margin is the number of bytes we read (8)
		// and the maximum we will read ahead (2)
		inputMargin            = 8 + 2
		minNonLiteralBlockSize = 16
	)

	// Protect against e.cur wraparound.
	for e.cur >= e.bufferReset-int32(len(e.hist)) {
		if len(e.hist) == 0 {
			e.table = [dFastShortTableSize]tableEntry{}
			e.longTable = [dFastLongTableSize]tableEntry{}
			e.cur = e.maxMatchOff
			break
		}
		// Shift down everything in the table that isn't already too far away.
		minOff := e.cur + int32(len(e.hist)) - e.maxMatchOff
		for i := range e.table[:] {
			v := e.table[i].offset
			if v < minOff {
				v = 0
			} else {
				v = v - e.cur + e.maxMatchOff
			}
			e.table[i].offset = v
		}
		for i := range e.longTable[:] {
			v := e.longTable[i].offset
			if v < minOff {
				v = 0
			} else {
				v = v - e.cur + e.maxMatchOff
			}
			e.longTable[i].offset = v
		}
		e.cur = e.maxMatchOff
		break
	}

	s := e.addBlock(src)
	blk.size = len(src)
	if len(src) < minNonLiteralBlockSize {
		blk.extraLits = len(src)
		blk.literals = blk.literals[:len(src)]
		copy(blk.literals, src)
		return
	}

	// Override src
	src = e.hist
	sLimit := int32(len(src)) - inputMargin
	// stepSize is the number of bytes to skip on every main loop iteration.
	// It should be >= 1.
	const stepSize = 1

	const kSearchStrength = 8

	// nextEmit is where in src the next emitLiteral should start from.
	nextEmit := s
	cv := load6432(src, s)

	// Relative offsets
	offset1 := int32(blk.recentOffsets[0])
	offset2 := int32(blk.recentOffsets[1])

	addLiterals := func(s *seq, until int32) {
		if until == nextEmit {
			return
		}
		blk.literals = append(blk.literals, src[nextEmit:until]...)
		s.litLen = uint32(until - nextEmit)
	}
	if debugEncoder {
		println("recent offsets:", blk.recentOffsets)
	}

encodeLoop:
	for {
		var t int32
		// We allow the encoder to optionally turn off repeat offsets across blocks
		canRepeat := len(blk.sequences) > 2

		for {
			if debugAsserts && canRepeat && offset1 == 0 {
				panic("offset0 was 0")
			}

			nextHashL := hashLen(cv, dFastLongTableBits, dFastLongLen)
			nextHashS := hashLen(cv, dFastShortTableBits, dFastShortLen)
			candidateL := e.longTable[nextHashL]
			candidateS := e.table[nextHashS]

			const repOff = 1
			repIndex := s - offset1 + repOff
			entry := tableEntry{offset: s + e.cur, val: uint32(cv)}
			e.longTable[nextHashL] = entry
			e.table[nextHashS] = entry

			if canRepeat {
				if repIndex >= 0 && load3232(src, repIndex) == uint32(cv>>(repOff*8)) {
					// Consider history as well.
					var seq seq
					lenght := 4 + e.matchlen(s+4+repOff, repIndex+4, src)

					seq.matchLen = uint32(lenght - zstdMinMatch)

					// We might be able to match backwards.
					// Extend as long as we can.
					start := s + repOff
					// We end the search early, so we don't risk 0 literals
					// and have to do special offset treatment.
					startLimit := nextEmit + 1

					tMin := s - e.maxMatchOff
					if tMin < 0 {
						tMin = 0
					}
					for repIndex > tMin && start > startLimit && src[repIndex-1] == src[start-1] && seq.matchLen < maxMatchLength-zstdMinMatch-1 {
						repIndex--
						start--
						seq.matchLen++
					}
					addLiterals(&seq, start)

					// rep 0
					seq.offset = 1
					if debugSequences {
						println("repeat sequence", seq, "next s:", s)
					}
					blk.sequences = append(blk.sequences, seq)
					s += lenght + repOff
					nextEmit = s
					if s >= sLimit {
						if debugEncoder {
							println("repeat ended", s, lenght)

						}
						break encodeLoop
					}
					cv = load6432(src, s)
					continue
				}
			}
			// Find the offsets of our two matches.
			coffsetL := s - (candidateL.offset - e.cur)
			coffsetS := s - (candidateS.offset - e.cur)

			// Check if we have a long match.
			if coffsetL < e.maxMatchOff && uint32(cv) == candidateL.val {
				// Found a long match, likely at least 8 bytes.
				// Reference encoder checks all 8 bytes, we only check 4,
				// but the likelihood of both the first 4 bytes and the hash matching should be enough.
				t = candidateL.offset - e.cur
				if debugAsserts && s <= t {
					panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
				}
				if debugAsserts && s-t > e.maxMatchOff {
					panic("s - t >e.maxMatchOff")
				}
				if debugMatches {
					println("long match")
				}
				break
			}

			// Check if we have a short match.
			if coffsetS < e.maxMatchOff && uint32(cv) == candidateS.val {
				// found a regular match
				// See if we can find a long match at s+1
				const checkAt = 1
				cv := load6432(src, s+checkAt)
				nextHashL = hashLen(cv, dFastLongTableBits, dFastLongLen)
				candidateL = e.longTable[nextHashL]
				coffsetL = s - (candidateL.offset - e.cur) + checkAt

				// We can store it, since we have at least a 4 byte match.
				e.longTable[nextHashL] = tableEntry{offset: s + checkAt + e.cur, val: uint32(cv)}
				if coffsetL < e.maxMatchOff && uint32(cv) == candidateL.val {
					// Found a long match, likely at least 8 bytes.
					// Reference encoder checks all 8 bytes, we only check 4,
					// but the likelihood of both the first 4 bytes and the hash matching should be enough.
					t = candidateL.offset - e.cur
					s += checkAt
					if debugMatches {
						println("long match (after short)")
					}
					break
				}

				t = candidateS.offset - e.cur
				if debugAsserts && s <= t {
					panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
				}
				if debugAsserts && s-t > e.maxMatchOff {
					panic("s - t >e.maxMatchOff")
				}
				if debugAsserts && t < 0 {
					panic("t<0")
				}
				if debugMatches {
					println("short match")
				}
				break
			}

			// No match found, move forward in input.
			s += stepSize + ((s - nextEmit) >> (kSearchStrength - 1))
			if s >= sLimit {
				break encodeLoop
			}
			cv = load6432(src, s)
		}

		// A 4-byte match has been found. Update recent offsets.
		// We'll later see if more than 4 bytes.
		offset2 = offset1
		offset1 = s - t

		if debugAsserts && s <= t {
			panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
		}

		if debugAsserts && canRepeat && int(offset1) > len(src) {
			panic("invalid offset")
		}

		// Extend the 4-byte match as long as possible.
		l := e.matchlen(s+4, t+4, src) + 4

		// Extend backwards
		tMin := s - e.maxMatchOff
		if tMin < 0 {
			tMin = 0
		}
		for t > tMin && s > nextEmit && src[t-1] == src[s-1] && l < maxMatchLength {
			s--
			t--
			l++
		}

		// Write our sequence
		var seq seq
		seq.litLen = uint32(s - nextEmit)
		seq.matchLen = uint32(l - zstdMinMatch)
		if seq.litLen > 0 {
			blk.literals = append(blk.literals, src[nextEmit:s]...)
		}
		seq.offset = uint32(s-t) + 3
		s += l
		if debugSequences {
			println("sequence", seq, "next s:", s)
		}
		blk.sequences = append(blk.sequences, seq)
		nextEmit = s
		if s >= sLimit {
			break encodeLoop
		}

		// Index match start+1 (long) and start+2 (short)
		index0 := s - l + 1
		// Index match end-2 (long) and end-1 (short)
		index1 := s - 2

		cv0 := load6432(src, index0)
		cv1 := load6432(src, index1)
		te0 := tableEntry{offset: index0 + e.cur, val: uint32(cv0)}
		te1 := tableEntry{offset: index1 + e.cur, val: uint32(cv1)}
		e.longTable[hashLen(cv0, dFastLongTableBits, dFastLongLen)] = te0
		e.longTable[hashLen(cv1, dFastLongTableBits, dFastLongLen)] = te1
		cv0 >>= 8
		cv1 >>= 8
		te0.offset++
		te1.offset++
		te0.val = uint32(cv0)
		te1.val = uint32(cv1)
		e.table[hashLen(cv0, dFastShortTableBits, dFastShortLen)] = te0
		e.table[hashLen(cv1, dFastShortTableBits, dFastShortLen)] = te1

		cv = load6432(src, s)

		if !canRepeat {
			continue
		}

		// Check offset 2
		for {
			o2 := s - offset2
			if load3232(src, o2) != uint32(cv) {
				// Do regular search
				break
			}

			// Store this, since we have it.
			nextHashS := hashLen(cv, dFastShortTableBits, dFastShortLen)
			nextHashL := hashLen(cv, dFastLongTableBits, dFastLongLen)

			// We have at least 4 byte match.
			// No need to check backwards. We come straight from a match
			l := 4 + e.matchlen(s+4, o2+4, src)

			entry := tableEntry{offset: s + e.cur, val: uint32(cv)}
			e.longTable[nextHashL] = entry
			e.table[nextHashS] = entry
			seq.matchLen = uint32(l) - zstdMinMatch
			seq.litLen = 0

			// Since litlen is always 0, this is offset 1.
			seq.offset = 1
			s += l
			nextEmit = s
			if debugSequences {
				println("sequence", seq, "next s:", s)
			}
			blk.sequences = append(blk.sequences, seq)

			// Swap offset 1 and 2.
			offset1, offset2 = offset2, offset1
			if s >= sLimit {
				// Finished
				break encodeLoop
			}
			cv = load6432(src, s)
		}
	}

	if int(nextEmit) < len(src) {
		blk.literals = append(blk.literals, src[nextEmit:]...)
		blk.extraLits = len(src) - int(nextEmit)
	}
	blk.recentOffsets[0] = uint32(offset1)
	blk.recentOffsets[1] = uint32(offset2)
	if debugEncoder {
		println("returning, recent offsets:", blk.recentOffsets, "extra literals:", blk.extraLits)
	}
}

// EncodeNoHist will encode a block with no history and no following blocks.
// Most notable difference is that src will not be copied for history and
// we do not need to check for max match length.
func (e *doubleFastEncoder) EncodeNoHist(blk *blockEnc, src []byte) {
	const (
		// Input margin is the number of bytes we read (8)
		// and the maximum we will read ahead (2)
		inputMargin            = 8 + 2
		minNonLiteralBlockSize = 16
	)

	// Protect against e.cur wraparound.
	if e.cur >= e.bufferReset {
		for i := range e.table[:] {
			e.table[i] = tableEntry{}
		}
		for i := range e.longTable[:] {
			e.longTable[i] = tableEntry{}
		}
		e.cur = e.maxMatchOff
	}

	s := int32(0)
	blk.size = len(src)
	if len(src) < minNonLiteralBlockSize {
		blk.extraLits = len(src)
		blk.literals = blk.literals[:len(src)]
		copy(blk.literals, src)
		return
	}

	// Override src
	sLimit := int32(len(src)) - inputMargin
	// stepSize is the number of bytes to skip on every main loop iteration.
	// It should be >= 1.
	const stepSize = 1

	const kSearchStrength = 8

	// nextEmit is where in src the next emitLiteral should start from.
	nextEmit := s
	cv := load6432(src, s)

	// Relative offsets
	offset1 := int32(blk.recentOffsets[0])
	offset2 := int32(blk.recentOffsets[1])

	addLiterals := func(s *seq, until int32) {
		if until == nextEmit {
			return
		}
		blk.literals = append(blk.literals, src[nextEmit:until]...)
		s.litLen = uint32(until - nextEmit)
	}
	if debugEncoder {
		println("recent offsets:", blk.recentOffsets)
	}

encodeLoop:
	for {
		var t int32
		for {

			nextHashL := hashLen(cv, dFastLongTableBits, dFastLongLen)
			nextHashS := hashLen(cv, dFastShortTableBits, dFastShortLen)
			candidateL := e.longTable[nextHashL]
			candidateS := e.table[nextHashS]

			const repOff = 1
			repIndex := s - offset1 + repOff
			entry := tableEntry{offset: s + e.cur, val: uint32(cv)}
			e.longTable[nextHashL] = entry
			e.table[nextHashS] = entry

			if len(blk.sequences) > 2 {
				if load3232(src, repIndex) == uint32(cv>>(repOff*8)) {
					// Consider history as well.
					var seq seq
					//length := 4 + e.matchlen(s+4+repOff, repIndex+4, src)
					length := 4 + int32(matchLen(src[s+4+repOff:], src[repIndex+4:]))

					seq.matchLen = uint32(length - zstdMinMatch)

					// We might be able to match backwards.
					// Extend as long as we can.
					start := s + repOff
					// We end the search early, so we don't risk 0 literals
					// and have to do special offset treatment.
					startLimit := nextEmit + 1

					tMin := s - e.maxMatchOff
					if tMin < 0 {
						tMin = 0
					}
					for repIndex > tMin && start > startLimit && src[repIndex-1] == src[start-1] {
						repIndex--
						start--
						seq.matchLen++
					}
					addLiterals(&seq, start)

					// rep 0
					seq.offset = 1
					if debugSequences {
						println("repeat sequence", seq, "next s:", s)
					}
					blk.sequences = append(blk.sequences, seq)
					s += length + repOff
					nextEmit = s
					if s >= sLimit {
						if debugEncoder {
							println("repeat ended", s, length)

						}
						break encodeLoop
					}
					cv = load6432(src, s)
					continue
				}
			}
			// Find the offsets of our two matches.
			coffsetL := s - (candidateL.offset - e.cur)
			coffsetS := s - (candidateS.offset - e.cur)

			// Check if we have a long match.
			if coffsetL < e.maxMatchOff && uint32(cv) == candidateL.val {
				// Found a long match, likely at least 8 bytes.
				// Reference encoder checks all 8 bytes, we only check 4,
				// but the likelihood of both the first 4 bytes and the hash matching should be enough.
				t = candidateL.offset - e.cur
				if debugAsserts && s <= t {
					panic(fmt.Sprintf("s (%d) <= t (%d). cur: %d", s, t, e.cur))
				}
				if debugAsserts && s-t > e.maxMatchOff {
					panic("s - t >e.maxMatchOff")
				}
				if debugMatches {
					println("long match")
				}
				break
			}

			// Check if we have a short match.
			if coffsetS < e.maxMatchOff && uint32(cv) == candidateS.val {
				// found a regular match
				// See if we can find a long match at s+1
				const checkAt = 1
				cv := load6432(src, s+checkAt)
				nextHashL = hashLen(cv, dFastLongTableBits, dFastLongLen)
				candidateL = e.longTable[nextHashL]
				coffsetL = s - (candidateL.offset - e.cur) + checkAt

				// We can store it, since we have at least a 4 byte match.
				e.longTable[nextHashL] = tableEntry{offset: s + checkAt + e.cur, val: uint32(cv)}
				if coffsetL < e.maxMatchOff && uint32(cv) == candidateL.val {
					// Found a long match, likely at least 8 bytes.
					// Reference encoder checks all 8 bytes, we only check 4,
					// but the likelihood of both the first 4 bytes and the hash matching should be enough.
					t = candidateL.offset - e.cur
					s += checkAt
					if debugMatches {
						println("long match (after short)")
					}
					break
				}

				t = candidateS.offset - e.cur
				if debugAsserts && s <= t {
					panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
				}
				if debugAsserts && s-t > e.maxMatchOff {
					panic("s - t >e.maxMatchOff")
				}
				if debugAsserts && t < 0 {
					panic("t<0")
				}
				if debugMatches {
					println("short match")
				}
				break
			}

			// No match found, move forward in input.
			s += stepSize + ((s - nextEmit) >> (kSearchStrength - 1))
			if s >= sLimit {
				break encodeLoop
			}
			cv = load6432(src, s)
		}

		// A 4-byte match has been found. Update recent offsets.
		// We'll later see if more than 4 bytes.
		offset2 = offset1
		offset1 = s - t

		if debugAsserts && s <= t {
			panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
		}

		// Extend the 4-byte match as long as possible.
		//l := e.matchlen(s+4, t+4, src) + 4
		l := int32(matchLen(src[s+4:], src[t+4:])) + 4

		// Extend backwards
		tMin := s - e.maxMatchOff
		if tMin < 0 {
			tMin = 0
		}
		for t > tMin && s > nextEmit && src[t-1] == src[s-1] {
			s--
			t--
			l++
		}

		// Write our sequence
		var seq seq
		seq.litLen = uint32(s - nextEmit)
		seq.matchLen = uint32(l - zstdMinMatch)
		if seq.litLen > 0 {
			blk.literals = append(blk.literals, src[nextEmit:s]...)
		}
		seq.offset = uint32(s-t) + 3
		s += l
		if debugSequences {
			println("sequence", seq, "next s:", s)
		}
		blk.sequences = append(blk.sequences, seq)
		nextEmit = s
		if s >= sLimit {
			break encodeLoop
		}

		// Index match start+1 (long) and start+2 (short)
		index0 := s - l + 1
		// Index match end-2 (long) and end-1 (short)
		index1 := s - 2

		cv0 := load6432(src, index0)
		cv1 := load6432(src, index1)
		te0 := tableEntry{offset: index0 + e.cur, val: uint32(cv0)}
		te1 := tableEntry{offset: index1 + e.cur, val: uint32(cv1)}
		e.longTable[hashLen(cv0, dFastLongTableBits, dFastLongLen)] = te0
		e.longTable[hashLen(cv1, dFastLongTableBits, dFastLongLen)] = te1
		cv0 >>= 8
		cv1 >>= 8
		te0.offset++
		te1.offset++
		te0.val = uint32(cv0)
		te1.val = uint32(cv1)
		e.table[hashLen(cv0, dFastShortTableBits, dFastShortLen)] = te0
		e.table[hashLen(cv1, dFastShortTableBits, dFastShortLen)] = te1

		cv = load6432(src, s)

		if len(blk.sequences) <= 2 {
			continue
		}

		// Check offset 2
		for {
			o2 := s - offset2
			if load3232(src, o2) != uint32(cv) {
				// Do regular search
				break
			}

			// Store this, since we have it.
			nextHashS := hashLen(cv1>>8, dFastShortTableBits, dFastShortLen)
			nextHashL := hashLen(cv, dFastLongTableBits, dFastLongLen)

			// We have at least 4 byte match.
			// No need to check backwards. We come straight from a match
			//l := 4 + e.matchlen(s+4, o2+4, src)
			l := 4 + int32(matchLen(src[s+4:], src[o2+4:]))

			entry := tableEntry{offset: s + e.cur, val: uint32(cv)}
			e.longTable[nextHashL] = entry
			e.table[nextHashS] = entry
			seq.matchLen = uint32(l) - zstdMinMatch
			seq.litLen = 0

			// Since litlen is always 0, this is offset 1.
			seq.offset = 1
			s += l
			nextEmit = s
			if debugSequences {
				println("sequence", seq, "next s:", s)
			}
			blk.sequences = append(blk.sequences, seq)

			// Swap offset 1 and 2.
			offset1, offset2 = offset2, offset1
			if s >= sLimit {
				// Finished
				break encodeLoop
			}
			cv = load6432(src, s)
		}
	}

	if int(nextEmit) < len(src) {
		blk.literals = append(blk.literals, src[nextEmit:]...)
		blk.extraLits = len(src) - int(nextEmit)
	}
	if debugEncoder {
		println("returning, recent offsets:", blk.recentOffsets, "extra literals:", blk.extraLits)
	}

	// We do not store history, so we must offset e.cur to avoid false matches for next user.
	if e.cur < e.bufferReset {
		e.cur += int32(len(src))
	}
}

// Encode will encode the content, with a dictionary if initialized for it.
func (e *doubleFastEncoderDict) Encode(blk *blockEnc, src []byte) {
	const (
		// Input margin is the number of bytes we read (8)
		// and the maximum we will read ahead (2)
		inputMargin            = 8 + 2
		minNonLiteralBlockSize = 16
	)

	// Protect against e.cur wraparound.
	for e.cur >= e.bufferReset-int32(len(e.hist)) {
		if len(e.hist) == 0 {
			for i := range e.table[:] {
				e.table[i] = tableEntry{}
			}
			for i := range e.longTable[:] {
				e.longTable[i] = tableEntry{}
			}
			e.markAllShardsDirty()
			e.cur = e.maxMatchOff
			break
		}
		// Shift down everything in the table that isn't already too far away.
		minOff := e.cur + int32(len(e.hist)) - e.maxMatchOff
		for i := range e.table[:] {
			v := e.table[i].offset
			if v < minOff {
				v = 0
			} else {
				v = v - e.cur + e.maxMatchOff
			}
			e.table[i].offset = v
		}
		for i := range e.longTable[:] {
			v := e.longTable[i].offset
			if v < minOff {
				v = 0
			} else {
				v = v - e.cur + e.maxMatchOff
			}
			e.longTable[i].offset = v
		}
		e.markAllShardsDirty()
		e.cur = e.maxMatchOff
		break
	}

	s := e.addBlock(src)
	blk.size = len(src)
	if len(src) < minNonLiteralBlockSize {
		blk.extraLits = len(src)
		blk.literals = blk.literals[:len(src)]
		copy(blk.literals, src)
		return
	}

	// Override src
	src = e.hist
	sLimit := int32(len(src)) - inputMargin
	// stepSize is the number of bytes to skip on every main loop iteration.
	// It should be >= 1.
	const stepSize = 1

	const kSearchStrength = 8

	// nextEmit is where in src the next emitLiteral should start from.
	nextEmit := s
	cv := load6432(src, s)

	// Relative offsets
	offset1 := int32(blk.recentOffsets[0])
	offset2 := int32(blk.recentOffsets[1])

	addLiterals := func(s *seq, until int32) {
		if until == nextEmit {
			return
		}
		blk.literals = append(blk.literals, src[nextEmit:until]...)
		s.litLen = uint32(until - nextEmit)
	}
	if debugEncoder {
		println("recent offsets:", blk.recentOffsets)
	}

encodeLoop:
	for {
		var t int32
		// We allow the encoder to optionally turn off repeat offsets across blocks
		canRepeat := len(blk.sequences) > 2

		for {
			if debugAsserts && canRepeat && offset1 == 0 {
				panic("offset0 was 0")
			}

			nextHashL := hashLen(cv, dFastLongTableBits, dFastLongLen)
			nextHashS := hashLen(cv, dFastShortTableBits, dFastShortLen)
			candidateL := e.longTable[nextHashL]
			candidateS := e.table[nextHashS]

			const repOff = 1
			repIndex := s - offset1 + repOff
			entry := tableEntry{offset: s + e.cur, val: uint32(cv)}
			e.longTable[nextHashL] = entry
			e.markLongShardDirty(nextHashL)
			e.table[nextHashS] = entry
			e.markShardDirty(nextHashS)

			if canRepeat {
				if repIndex >= 0 && load3232(src, repIndex) == uint32(cv>>(repOff*8)) {
					// Consider history as well.
					var seq seq
					lenght := 4 + e.matchlen(s+4+repOff, repIndex+4, src)

					seq.matchLen = uint32(lenght - zstdMinMatch)

					// We might be able to match backwards.
					// Extend as long as we can.
					start := s + repOff
					// We end the search early, so we don't risk 0 literals
					// and have to do special offset treatment.
					startLimit := nextEmit + 1

					tMin := s - e.maxMatchOff
					if tMin < 0 {
						tMin = 0
					}
					for repIndex > tMin && start > startLimit && src[repIndex-1] == src[start-1] && seq.matchLen < maxMatchLength-zstdMinMatch-1 {
						repIndex--
						start--
						seq.matchLen++
					}
					addLiterals(&seq, start)

					// rep 0
					seq.offset = 1
					if debugSequences {
						println("repeat sequence", seq, "next s:", s)
					}
					blk.sequences = append(blk.sequences, seq)
					s += lenght + repOff
					nextEmit = s
					if s >= sLimit {
						if debugEncoder {
							println("repeat ended", s, lenght)

						}
						break encodeLoop
					}
					cv = load6432(src, s)
					continue
				}
			}
			// Find the offsets of our two matches.
			coffsetL := s - (candidateL.offset - e.cur)
			coffsetS := s - (candidateS.offset - e.cur)

			// Check if we have a long match.
			if coffsetL < e.maxMatchOff && uint32(cv) == candidateL.val {
				// Found a long match, likely at least 8 bytes.
				// Reference encoder checks all 8 bytes, we only check 4,
				// but the likelihood of both the first 4 bytes and the hash matching should be enough.
				t = candidateL.offset - e.cur
				if debugAsserts && s <= t {
					panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
				}
				if debugAsserts && s-t > e.maxMatchOff {
					panic("s - t >e.maxMatchOff")
				}
				if debugMatches {
					println("long match")
				}
				break
			}

			// Check if we have a short match.
			if coffsetS < e.maxMatchOff && uint32(cv) == candidateS.val {
				// found a regular match
				// See if we can find a long match at s+1
				const checkAt = 1
				cv := load6432(src, s+checkAt)
				nextHashL = hashLen(cv, dFastLongTableBits, dFastLongLen)
				candidateL = e.longTable[nextHashL]
				coffsetL = s - (candidateL.offset - e.cur) + checkAt

				// We can store it, since we have at least a 4 byte match.
				e.longTable[nextHashL] = tableEntry{offset: s + checkAt + e.cur, val: uint32(cv)}
				e.markLongShardDirty(nextHashL)
				if coffsetL < e.maxMatchOff && uint32(cv) == candidateL.val {
					// Found a long match, likely at least 8 bytes.
					// Reference encoder checks all 8 bytes, we only check 4,
					// but the likelihood of both the first 4 bytes and the hash matching should be enough.
					t = candidateL.offset - e.cur
					s += checkAt
					if debugMatches {
						println("long match (after short)")
					}
					break
				}

				t = candidateS.offset - e.cur
				if debugAsserts && s <= t {
					panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
				}
				if debugAsserts && s-t > e.maxMatchOff {
					panic("s - t >e.maxMatchOff")
				}
				if debugAsserts && t < 0 {
					panic("t<0")
				}
				if debugMatches {
					println("short match")
				}
				break
			}

			// No match found, move forward in input.
			s += stepSize + ((s - nextEmit) >> (kSearchStrength - 1))
			if s >= sLimit {
				break encodeLoop
			}
			cv = load6432(src, s)
		}

		// A 4-byte match has been found. Update recent offsets.
		// We'll later see if more than 4 bytes.
		offset2 = offset1
		offset1 = s - t

		if debugAsserts && s <= t {
			panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
		}

		if debugAsserts && canRepeat && int(offset1) > len(src) {
			panic("invalid offset")
		}

		// Extend the 4-byte match as long as possible.
		l := e.matchlen(s+4, t+4, src) + 4

		// Extend backwards
		tMin := s - e.maxMatchOff
		if tMin < 0 {
			tMin = 0
		}
		for t > tMin && s > nextEmit && src[t-1] == src[s-1] && l < maxMatchLength {
			s--
			t--
			l++
		}

		// Write our sequence
		var seq seq
		seq.litLen = uint32(s - nextEmit)
		seq.matchLen = uint32(l - zstdMinMatch)
		if seq.litLen > 0 {
			blk.literals = append(blk.literals, src[nextEmit:s]...)
		}
		seq.offset = uint32(s-t) + 3
		s += l
		if debugSequences {
			println("sequence", seq, "next s:", s)
		}
		blk.sequences = append(blk.sequences, seq)
		nextEmit = s
		if s >= sLimit {
			break encodeLoop
		}

		// Index match start+1 (long) and start+2 (short)
		index0 := s - l + 1
		// Index match end-2 (long) and end-1 (short)
		index1 := s - 2

		cv0 := load6432(src, index0)
		cv1 := load6432(src, index1)
		te0 := tableEntry{offset: index0 + e.cur, val: uint32(cv0)}
		te1 := tableEntry{offset: index1 + e.cur, val: uint32(cv1)}
		longHash1 := hashLen(cv0, dFastLongTableBits, dFastLongLen)
		longHash2 := hashLen(cv1, dFastLongTableBits, dFastLongLen)
		e.longTable[longHash1] = te0
		e.longTable[longHash2] = te1
		e.markLongShardDirty(longHash1)
		e.markLongShardDirty(longHash2)
		cv0 >>= 8
		cv1 >>= 8
		te0.offset++
		te1.offset++
		te0.val = uint32(cv0)
		te1.val = uint32(cv1)
		hashVal1 := hashLen(cv0, dFastShortTableBits, dFastShortLen)
		hashVal2 := hashLen(cv1, dFastShortTableBits, dFastShortLen)
		e.table[hashVal1] = te0
		e.markShardDirty(hashVal1)
		e.table[hashVal2] = te1
		e.markShardDirty(hashVal2)

		cv = load6432(src, s)

		if !canRepeat {
			continue
		}

		// Check offset 2
		for {
			o2 := s - offset2
			if load3232(src, o2) != uint32(cv) {
				// Do regular search
				break
			}

			// Store this, since we have it.
			nextHashL := hashLen(cv, dFastLongTableBits, dFastLongLen)
			nextHashS := hashLen(cv, dFastShortTableBits, dFastShortLen)

			// We have at least 4 byte match.
			// No need to check backwards. We come straight from a match
			l := 4 + e.matchlen(s+4, o2+4, src)

			entry := tableEntry{offset: s + e.cur, val: uint32(cv)}
			e.longTable[nextHashL] = entry
			e.markLongShardDirty(nextHashL)
			e.table[nextHashS] = entry
			e.markShardDirty(nextHashS)
			seq.matchLen = uint32(l) - zstdMinMatch
			seq.litLen = 0

			// Since litlen is always 0, this is offset 1.
			seq.offset = 1
			s += l
			nextEmit = s
			if debugSequences {
				println("sequence", seq, "next s:", s)
			}
			blk.sequences = append(blk.sequences, seq)

			// Swap offset 1 and 2.
			offset1, offset2 = offset2, offset1
			if s >= sLimit {
				// Finished
				break encodeLoop
			}
			cv = load6432(src, s)
		}
	}

	if int(nextEmit) < len(src) {
		blk.literals = append(blk.literals, src[nextEmit:]...)
		blk.extraLits = len(src) - int(nextEmit)
	}
	blk.recentOffsets[0] = uint32(offset1)
	blk.recentOffsets[1] = uint32(offset2)
	if debugEncoder {
		println("returning, recent offsets:", blk.recentOffsets, "extra literals:", blk.extraLits)
	}
	// If we encoded more than 64K mark all dirty.
	if len(src) > 64<<10 {
		e.markAllShardsDirty()
	}
}

// ResetDict will reset and set a dictionary if not nil
func (e *doubleFastEncoder) Reset(d *dict, singleBlock bool) {
	e.fastEncoder.Reset(d, singleBlock)
	if d != nil {
		panic("doubleFastEncoder: Reset with dict not supported")
	}
}

// ResetDict will reset and set a dictionary if not nil
func (e *doubleFastEncoderDict) Reset(d *dict, singleBlock bool) {
	allDirty := e.allDirty
	e.fastEncoderDict.Reset(d, singleBlock)
	if d == nil {
		return
	}

	// Init or copy dict table
	if len(e.dictLongTable) != len(e.longTable) || d.id != e.lastDictID {
		if len(e.dictLongTable) != len(e.longTable) {
			e.dictLongTable = make([]tableEntry, len(e.longTable))
		}
		if len(d.content) >= 8 {
			cv := load6432(d.content, 0)
			e.dictLongTable[hashLen(cv, dFastLongTableBits, dFastLongLen)] = tableEntry{
				val:    uint32(cv),
				offset: e.maxMatchOff,
			}
			end := int32(len(d.content)) - 8 + e.maxMatchOff
			for i := e.maxMatchOff + 1; i < end; i++ {
				cv = cv>>8 | (uint64(d.content[i-e.maxMatchOff+7]) << 56)
				e.dictLongTable[hashLen(cv, dFastLongTableBits, dFastLongLen)] = tableEntry{
					val:    uint32(cv),
					offset: i,
				}
			}
		}
		e.lastDictID = d.id
		e.allDirty = true
	}
	// Reset table to initial state
	e.cur = e.maxMatchOff

	dirtyShardCnt := 0
	if !allDirty {
		for i := range e.longTableShardDirty {
			if e.longTableShardDirty[i] {
				dirtyShardCnt++
			}
		}
	}

	if allDirty || dirtyShardCnt > dLongTableShardCnt/2 {
		//copy(e.longTable[:], e.dictLongTable)
		e.longTable = *(*[dFastLongTableSize]tableEntry)(e.dictLongTable)
		for i := range e.longTableShardDirty {
			e.longTableShardDirty[i] = false
		}
		return
	}
	for i := range e.longTableShardDirty {
		if !e.longTableShardDirty[i] {
			continue
		}

		// copy(e.longTable[i*dLongTableShardSize:(i+1)*dLongTableShardSize], e.dictLongTable[i*dLongTableShardSize:(i+1)*dLongTableShardSize])
		*(*[dLongTableShardSize]tableEntry)(e.longTable[i*dLongTableShardSize:]) = *(*[dLongTableShardSize]tableEntry)(e.dictLongTable[i*dLongTableShardSize:])

		e.longTableShardDirty[i] = false
	}
}

func (e *doubleFastEncoderDict) markLongShardDirty(entryNum uint32) {
	e.longTableShardDirty[entryNum/dLongTableShardSize] = true
}
 07070100000883000081A4000000000000000000000001645E367C00005B8A000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/enc_fast.go // Copyright 2019+ Klaus Post. All rights reserved.
// License information can be found in the LICENSE file.
// Based on work by Yann Collet, released under BSD License.

package zstd

import (
	"fmt"
)

const (
	tableBits        = 15                               // Bits used in the table
	tableSize        = 1 << tableBits                   // Size of the table
	tableShardCnt    = 1 << (tableBits - dictShardBits) // Number of shards in the table
	tableShardSize   = tableSize / tableShardCnt        // Size of an individual shard
	tableFastHashLen = 6
	tableMask        = tableSize - 1 // Mask for table indices. Redundant, but can eliminate bounds checks.
	maxMatchLength   = 131074
)

type tableEntry struct {
	val    uint32
	offset int32
}

type fastEncoder struct {
	fastBase
	table [tableSize]tableEntry
}

type fastEncoderDict struct {
	fastEncoder
	dictTable       []tableEntry
	tableShardDirty [tableShardCnt]bool
	allDirty        bool
}

// Encode mimmics functionality in zstd_fast.c
func (e *fastEncoder) Encode(blk *blockEnc, src []byte) {
	const (
		inputMargin            = 8
		minNonLiteralBlockSize = 1 + 1 + inputMargin
	)

	// Protect against e.cur wraparound.
	for e.cur >= e.bufferReset-int32(len(e.hist)) {
		if len(e.hist) == 0 {
			for i := range e.table[:] {
				e.table[i] = tableEntry{}
			}
			e.cur = e.maxMatchOff
			break
		}
		// Shift down everything in the table that isn't already too far away.
		minOff := e.cur + int32(len(e.hist)) - e.maxMatchOff
		for i := range e.table[:] {
			v := e.table[i].offset
			if v < minOff {
				v = 0
			} else {
				v = v - e.cur + e.maxMatchOff
			}
			e.table[i].offset = v
		}
		e.cur = e.maxMatchOff
		break
	}

	s := e.addBlock(src)
	blk.size = len(src)
	if len(src) < minNonLiteralBlockSize {
		blk.extraLits = len(src)
		blk.literals = blk.literals[:len(src)]
		copy(blk.literals, src)
		return
	}

	// Override src
	src = e.hist
	sLimit := int32(len(src)) - inputMargin
	// stepSize is the number of bytes to skip on every main loop iteration.
	// It should be >= 2.
	const stepSize = 2

	// TEMPLATE
	const hashLog = tableBits
	// seems global, but would be nice to tweak.
	const kSearchStrength = 6

	// nextEmit is where in src the next emitLiteral should start from.
	nextEmit := s
	cv := load6432(src, s)

	// Relative offsets
	offset1 := int32(blk.recentOffsets[0])
	offset2 := int32(blk.recentOffsets[1])

	addLiterals := func(s *seq, until int32) {
		if until == nextEmit {
			return
		}
		blk.literals = append(blk.literals, src[nextEmit:until]...)
		s.litLen = uint32(until - nextEmit)
	}
	if debugEncoder {
		println("recent offsets:", blk.recentOffsets)
	}

encodeLoop:
	for {
		// t will contain the match offset when we find one.
		// When existing the search loop, we have already checked 4 bytes.
		var t int32

		// We will not use repeat offsets across blocks.
		// By not using them for the first 3 matches
		canRepeat := len(blk.sequences) > 2

		for {
			if debugAsserts && canRepeat && offset1 == 0 {
				panic("offset0 was 0")
			}

			nextHash := hashLen(cv, hashLog, tableFastHashLen)
			nextHash2 := hashLen(cv>>8, hashLog, tableFastHashLen)
			candidate := e.table[nextHash]
			candidate2 := e.table[nextHash2]
			repIndex := s - offset1 + 2

			e.table[nextHash] = tableEntry{offset: s + e.cur, val: uint32(cv)}
			e.table[nextHash2] = tableEntry{offset: s + e.cur + 1, val: uint32(cv >> 8)}

			if canRepeat && repIndex >= 0 && load3232(src, repIndex) == uint32(cv>>16) {
				// Consider history as well.
				var seq seq
				var length int32
				length = 4 + e.matchlen(s+6, repIndex+4, src)
				seq.matchLen = uint32(length - zstdMinMatch)

				// We might be able to match backwards.
				// Extend as long as we can.
				start := s + 2
				// We end the search early, so we don't risk 0 literals
				// and have to do special offset treatment.
				startLimit := nextEmit + 1

				sMin := s - e.maxMatchOff
				if sMin < 0 {
					sMin = 0
				}
				for repIndex > sMin && start > startLimit && src[repIndex-1] == src[start-1] && seq.matchLen < maxMatchLength-zstdMinMatch {
					repIndex--
					start--
					seq.matchLen++
				}
				addLiterals(&seq, start)

				// rep 0
				seq.offset = 1
				if debugSequences {
					println("repeat sequence", seq, "next s:", s)
				}
				blk.sequences = append(blk.sequences, seq)
				s += length + 2
				nextEmit = s
				if s >= sLimit {
					if debugEncoder {
						println("repeat ended", s, length)

					}
					break encodeLoop
				}
				cv = load6432(src, s)
				continue
			}
			coffset0 := s - (candidate.offset - e.cur)
			coffset1 := s - (candidate2.offset - e.cur) + 1
			if coffset0 < e.maxMatchOff && uint32(cv) == candidate.val {
				// found a regular match
				t = candidate.offset - e.cur
				if debugAsserts && s <= t {
					panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
				}
				if debugAsserts && s-t > e.maxMatchOff {
					panic("s - t >e.maxMatchOff")
				}
				break
			}

			if coffset1 < e.maxMatchOff && uint32(cv>>8) == candidate2.val {
				// found a regular match
				t = candidate2.offset - e.cur
				s++
				if debugAsserts && s <= t {
					panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
				}
				if debugAsserts && s-t > e.maxMatchOff {
					panic("s - t >e.maxMatchOff")
				}
				if debugAsserts && t < 0 {
					panic("t<0")
				}
				break
			}
			s += stepSize + ((s - nextEmit) >> (kSearchStrength - 1))
			if s >= sLimit {
				break encodeLoop
			}
			cv = load6432(src, s)
		}
		// A 4-byte match has been found. We'll later see if more than 4 bytes.
		offset2 = offset1
		offset1 = s - t

		if debugAsserts && s <= t {
			panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
		}

		if debugAsserts && canRepeat && int(offset1) > len(src) {
			panic("invalid offset")
		}

		// Extend the 4-byte match as long as possible.
		l := e.matchlen(s+4, t+4, src) + 4

		// Extend backwards
		tMin := s - e.maxMatchOff
		if tMin < 0 {
			tMin = 0
		}
		for t > tMin && s > nextEmit && src[t-1] == src[s-1] && l < maxMatchLength {
			s--
			t--
			l++
		}

		// Write our sequence.
		var seq seq
		seq.litLen = uint32(s - nextEmit)
		seq.matchLen = uint32(l - zstdMinMatch)
		if seq.litLen > 0 {
			blk.literals = append(blk.literals, src[nextEmit:s]...)
		}
		// Don't use repeat offsets
		seq.offset = uint32(s-t) + 3
		s += l
		if debugSequences {
			println("sequence", seq, "next s:", s)
		}
		blk.sequences = append(blk.sequences, seq)
		nextEmit = s
		if s >= sLimit {
			break encodeLoop
		}
		cv = load6432(src, s)

		// Check offset 2
		if o2 := s - offset2; canRepeat && load3232(src, o2) == uint32(cv) {
			// We have at least 4 byte match.
			// No need to check backwards. We come straight from a match
			l := 4 + e.matchlen(s+4, o2+4, src)

			// Store this, since we have it.
			nextHash := hashLen(cv, hashLog, tableFastHashLen)
			e.table[nextHash] = tableEntry{offset: s + e.cur, val: uint32(cv)}
			seq.matchLen = uint32(l) - zstdMinMatch
			seq.litLen = 0
			// Since litlen is always 0, this is offset 1.
			seq.offset = 1
			s += l
			nextEmit = s
			if debugSequences {
				println("sequence", seq, "next s:", s)
			}
			blk.sequences = append(blk.sequences, seq)

			// Swap offset 1 and 2.
			offset1, offset2 = offset2, offset1
			if s >= sLimit {
				break encodeLoop
			}
			// Prepare next loop.
			cv = load6432(src, s)
		}
	}

	if int(nextEmit) < len(src) {
		blk.literals = append(blk.literals, src[nextEmit:]...)
		blk.extraLits = len(src) - int(nextEmit)
	}
	blk.recentOffsets[0] = uint32(offset1)
	blk.recentOffsets[1] = uint32(offset2)
	if debugEncoder {
		println("returning, recent offsets:", blk.recentOffsets, "extra literals:", blk.extraLits)
	}
}

// EncodeNoHist will encode a block with no history and no following blocks.
// Most notable difference is that src will not be copied for history and
// we do not need to check for max match length.
func (e *fastEncoder) EncodeNoHist(blk *blockEnc, src []byte) {
	const (
		inputMargin            = 8
		minNonLiteralBlockSize = 1 + 1 + inputMargin
	)
	if debugEncoder {
		if len(src) > maxCompressedBlockSize {
			panic("src too big")
		}
	}

	// Protect against e.cur wraparound.
	if e.cur >= e.bufferReset {
		for i := range e.table[:] {
			e.table[i] = tableEntry{}
		}
		e.cur = e.maxMatchOff
	}

	s := int32(0)
	blk.size = len(src)
	if len(src) < minNonLiteralBlockSize {
		blk.extraLits = len(src)
		blk.literals = blk.literals[:len(src)]
		copy(blk.literals, src)
		return
	}

	sLimit := int32(len(src)) - inputMargin
	// stepSize is the number of bytes to skip on every main loop iteration.
	// It should be >= 2.
	const stepSize = 2

	// TEMPLATE
	const hashLog = tableBits
	// seems global, but would be nice to tweak.
	const kSearchStrength = 6

	// nextEmit is where in src the next emitLiteral should start from.
	nextEmit := s
	cv := load6432(src, s)

	// Relative offsets
	offset1 := int32(blk.recentOffsets[0])
	offset2 := int32(blk.recentOffsets[1])

	addLiterals := func(s *seq, until int32) {
		if until == nextEmit {
			return
		}
		blk.literals = append(blk.literals, src[nextEmit:until]...)
		s.litLen = uint32(until - nextEmit)
	}
	if debugEncoder {
		println("recent offsets:", blk.recentOffsets)
	}

encodeLoop:
	for {
		// t will contain the match offset when we find one.
		// When existing the search loop, we have already checked 4 bytes.
		var t int32

		// We will not use repeat offsets across blocks.
		// By not using them for the first 3 matches

		for {
			nextHash := hashLen(cv, hashLog, tableFastHashLen)
			nextHash2 := hashLen(cv>>8, hashLog, tableFastHashLen)
			candidate := e.table[nextHash]
			candidate2 := e.table[nextHash2]
			repIndex := s - offset1 + 2

			e.table[nextHash] = tableEntry{offset: s + e.cur, val: uint32(cv)}
			e.table[nextHash2] = tableEntry{offset: s + e.cur + 1, val: uint32(cv >> 8)}

			if len(blk.sequences) > 2 && load3232(src, repIndex) == uint32(cv>>16) {
				// Consider history as well.
				var seq seq
				length := 4 + e.matchlen(s+6, repIndex+4, src)

				seq.matchLen = uint32(length - zstdMinMatch)

				// We might be able to match backwards.
				// Extend as long as we can.
				start := s + 2
				// We end the search early, so we don't risk 0 literals
				// and have to do special offset treatment.
				startLimit := nextEmit + 1

				sMin := s - e.maxMatchOff
				if sMin < 0 {
					sMin = 0
				}
				for repIndex > sMin && start > startLimit && src[repIndex-1] == src[start-1] {
					repIndex--
					start--
					seq.matchLen++
				}
				addLiterals(&seq, start)

				// rep 0
				seq.offset = 1
				if debugSequences {
					println("repeat sequence", seq, "next s:", s)
				}
				blk.sequences = append(blk.sequences, seq)
				s += length + 2
				nextEmit = s
				if s >= sLimit {
					if debugEncoder {
						println("repeat ended", s, length)

					}
					break encodeLoop
				}
				cv = load6432(src, s)
				continue
			}
			coffset0 := s - (candidate.offset - e.cur)
			coffset1 := s - (candidate2.offset - e.cur) + 1
			if coffset0 < e.maxMatchOff && uint32(cv) == candidate.val {
				// found a regular match
				t = candidate.offset - e.cur
				if debugAsserts && s <= t {
					panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
				}
				if debugAsserts && s-t > e.maxMatchOff {
					panic("s - t >e.maxMatchOff")
				}
				if debugAsserts && t < 0 {
					panic(fmt.Sprintf("t (%d) < 0, candidate.offset: %d, e.cur: %d, coffset0: %d, e.maxMatchOff: %d", t, candidate.offset, e.cur, coffset0, e.maxMatchOff))
				}
				break
			}

			if coffset1 < e.maxMatchOff && uint32(cv>>8) == candidate2.val {
				// found a regular match
				t = candidate2.offset - e.cur
				s++
				if debugAsserts && s <= t {
					panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
				}
				if debugAsserts && s-t > e.maxMatchOff {
					panic("s - t >e.maxMatchOff")
				}
				if debugAsserts && t < 0 {
					panic("t<0")
				}
				break
			}
			s += stepSize + ((s - nextEmit) >> (kSearchStrength - 1))
			if s >= sLimit {
				break encodeLoop
			}
			cv = load6432(src, s)
		}
		// A 4-byte match has been found. We'll later see if more than 4 bytes.
		offset2 = offset1
		offset1 = s - t

		if debugAsserts && s <= t {
			panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
		}

		if debugAsserts && t < 0 {
			panic(fmt.Sprintf("t (%d) < 0 ", t))
		}
		// Extend the 4-byte match as long as possible.
		l := e.matchlen(s+4, t+4, src) + 4

		// Extend backwards
		tMin := s - e.maxMatchOff
		if tMin < 0 {
			tMin = 0
		}
		for t > tMin && s > nextEmit && src[t-1] == src[s-1] {
			s--
			t--
			l++
		}

		// Write our sequence.
		var seq seq
		seq.litLen = uint32(s - nextEmit)
		seq.matchLen = uint32(l - zstdMinMatch)
		if seq.litLen > 0 {
			blk.literals = append(blk.literals, src[nextEmit:s]...)
		}
		// Don't use repeat offsets
		seq.offset = uint32(s-t) + 3
		s += l
		if debugSequences {
			println("sequence", seq, "next s:", s)
		}
		blk.sequences = append(blk.sequences, seq)
		nextEmit = s
		if s >= sLimit {
			break encodeLoop
		}
		cv = load6432(src, s)

		// Check offset 2
		if o2 := s - offset2; len(blk.sequences) > 2 && load3232(src, o2) == uint32(cv) {
			// We have at least 4 byte match.
			// No need to check backwards. We come straight from a match
			l := 4 + e.matchlen(s+4, o2+4, src)

			// Store this, since we have it.
			nextHash := hashLen(cv, hashLog, tableFastHashLen)
			e.table[nextHash] = tableEntry{offset: s + e.cur, val: uint32(cv)}
			seq.matchLen = uint32(l) - zstdMinMatch
			seq.litLen = 0
			// Since litlen is always 0, this is offset 1.
			seq.offset = 1
			s += l
			nextEmit = s
			if debugSequences {
				println("sequence", seq, "next s:", s)
			}
			blk.sequences = append(blk.sequences, seq)

			// Swap offset 1 and 2.
			offset1, offset2 = offset2, offset1
			if s >= sLimit {
				break encodeLoop
			}
			// Prepare next loop.
			cv = load6432(src, s)
		}
	}

	if int(nextEmit) < len(src) {
		blk.literals = append(blk.literals, src[nextEmit:]...)
		blk.extraLits = len(src) - int(nextEmit)
	}
	if debugEncoder {
		println("returning, recent offsets:", blk.recentOffsets, "extra literals:", blk.extraLits)
	}
	// We do not store history, so we must offset e.cur to avoid false matches for next user.
	if e.cur < e.bufferReset {
		e.cur += int32(len(src))
	}
}

// Encode will encode the content, with a dictionary if initialized for it.
func (e *fastEncoderDict) Encode(blk *blockEnc, src []byte) {
	const (
		inputMargin            = 8
		minNonLiteralBlockSize = 1 + 1 + inputMargin
	)
	if e.allDirty || len(src) > 32<<10 {
		e.fastEncoder.Encode(blk, src)
		e.allDirty = true
		return
	}
	// Protect against e.cur wraparound.
	for e.cur >= e.bufferReset-int32(len(e.hist)) {
		if len(e.hist) == 0 {
			e.table = [tableSize]tableEntry{}
			e.cur = e.maxMatchOff
			break
		}
		// Shift down everything in the table that isn't already too far away.
		minOff := e.cur + int32(len(e.hist)) - e.maxMatchOff
		for i := range e.table[:] {
			v := e.table[i].offset
			if v < minOff {
				v = 0
			} else {
				v = v - e.cur + e.maxMatchOff
			}
			e.table[i].offset = v
		}
		e.cur = e.maxMatchOff
		break
	}

	s := e.addBlock(src)
	blk.size = len(src)
	if len(src) < minNonLiteralBlockSize {
		blk.extraLits = len(src)
		blk.literals = blk.literals[:len(src)]
		copy(blk.literals, src)
		return
	}

	// Override src
	src = e.hist
	sLimit := int32(len(src)) - inputMargin
	// stepSize is the number of bytes to skip on every main loop iteration.
	// It should be >= 2.
	const stepSize = 2

	// TEMPLATE
	const hashLog = tableBits
	// seems global, but would be nice to tweak.
	const kSearchStrength = 7

	// nextEmit is where in src the next emitLiteral should start from.
	nextEmit := s
	cv := load6432(src, s)

	// Relative offsets
	offset1 := int32(blk.recentOffsets[0])
	offset2 := int32(blk.recentOffsets[1])

	addLiterals := func(s *seq, until int32) {
		if until == nextEmit {
			return
		}
		blk.literals = append(blk.literals, src[nextEmit:until]...)
		s.litLen = uint32(until - nextEmit)
	}
	if debugEncoder {
		println("recent offsets:", blk.recentOffsets)
	}

encodeLoop:
	for {
		// t will contain the match offset when we find one.
		// When existing the search loop, we have already checked 4 bytes.
		var t int32

		// We will not use repeat offsets across blocks.
		// By not using them for the first 3 matches
		canRepeat := len(blk.sequences) > 2

		for {
			if debugAsserts && canRepeat && offset1 == 0 {
				panic("offset0 was 0")
			}

			nextHash := hashLen(cv, hashLog, tableFastHashLen)
			nextHash2 := hashLen(cv>>8, hashLog, tableFastHashLen)
			candidate := e.table[nextHash]
			candidate2 := e.table[nextHash2]
			repIndex := s - offset1 + 2

			e.table[nextHash] = tableEntry{offset: s + e.cur, val: uint32(cv)}
			e.markShardDirty(nextHash)
			e.table[nextHash2] = tableEntry{offset: s + e.cur + 1, val: uint32(cv >> 8)}
			e.markShardDirty(nextHash2)

			if canRepeat && repIndex >= 0 && load3232(src, repIndex) == uint32(cv>>16) {
				// Consider history as well.
				var seq seq
				var length int32
				length = 4 + e.matchlen(s+6, repIndex+4, src)

				seq.matchLen = uint32(length - zstdMinMatch)

				// We might be able to match backwards.
				// Extend as long as we can.
				start := s + 2
				// We end the search early, so we don't risk 0 literals
				// and have to do special offset treatment.
				startLimit := nextEmit + 1

				sMin := s - e.maxMatchOff
				if sMin < 0 {
					sMin = 0
				}
				for repIndex > sMin && start > startLimit && src[repIndex-1] == src[start-1] && seq.matchLen < maxMatchLength-zstdMinMatch {
					repIndex--
					start--
					seq.matchLen++
				}
				addLiterals(&seq, start)

				// rep 0
				seq.offset = 1
				if debugSequences {
					println("repeat sequence", seq, "next s:", s)
				}
				blk.sequences = append(blk.sequences, seq)
				s += length + 2
				nextEmit = s
				if s >= sLimit {
					if debugEncoder {
						println("repeat ended", s, length)

					}
					break encodeLoop
				}
				cv = load6432(src, s)
				continue
			}
			coffset0 := s - (candidate.offset - e.cur)
			coffset1 := s - (candidate2.offset - e.cur) + 1
			if coffset0 < e.maxMatchOff && uint32(cv) == candidate.val {
				// found a regular match
				t = candidate.offset - e.cur
				if debugAsserts && s <= t {
					panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
				}
				if debugAsserts && s-t > e.maxMatchOff {
					panic("s - t >e.maxMatchOff")
				}
				break
			}

			if coffset1 < e.maxMatchOff && uint32(cv>>8) == candidate2.val {
				// found a regular match
				t = candidate2.offset - e.cur
				s++
				if debugAsserts && s <= t {
					panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
				}
				if debugAsserts && s-t > e.maxMatchOff {
					panic("s - t >e.maxMatchOff")
				}
				if debugAsserts && t < 0 {
					panic("t<0")
				}
				break
			}
			s += stepSize + ((s - nextEmit) >> (kSearchStrength - 1))
			if s >= sLimit {
				break encodeLoop
			}
			cv = load6432(src, s)
		}
		// A 4-byte match has been found. We'll later see if more than 4 bytes.
		offset2 = offset1
		offset1 = s - t

		if debugAsserts && s <= t {
			panic(fmt.Sprintf("s (%d) <= t (%d)", s, t))
		}

		if debugAsserts && canRepeat && int(offset1) > len(src) {
			panic("invalid offset")
		}

		// Extend the 4-byte match as long as possible.
		l := e.matchlen(s+4, t+4, src) + 4

		// Extend backwards
		tMin := s - e.maxMatchOff
		if tMin < 0 {
			tMin = 0
		}
		for t > tMin && s > nextEmit && src[t-1] == src[s-1] && l < maxMatchLength {
			s--
			t--
			l++
		}

		// Write our sequence.
		var seq seq
		seq.litLen = uint32(s - nextEmit)
		seq.matchLen = uint32(l - zstdMinMatch)
		if seq.litLen > 0 {
			blk.literals = append(blk.literals, src[nextEmit:s]...)
		}
		// Don't use repeat offsets
		seq.offset = uint32(s-t) + 3
		s += l
		if debugSequences {
			println("sequence", seq, "next s:", s)
		}
		blk.sequences = append(blk.sequences, seq)
		nextEmit = s
		if s >= sLimit {
			break encodeLoop
		}
		cv = load6432(src, s)

		// Check offset 2
		if o2 := s - offset2; canRepeat && load3232(src, o2) == uint32(cv) {
			// We have at least 4 byte match.
			// No need to check backwards. We come straight from a match
			l := 4 + e.matchlen(s+4, o2+4, src)

			// Store this, since we have it.
			nextHash := hashLen(cv, hashLog, tableFastHashLen)
			e.table[nextHash] = tableEntry{offset: s + e.cur, val: uint32(cv)}
			e.markShardDirty(nextHash)
			seq.matchLen = uint32(l) - zstdMinMatch
			seq.litLen = 0
			// Since litlen is always 0, this is offset 1.
			seq.offset = 1
			s += l
			nextEmit = s
			if debugSequences {
				println("sequence", seq, "next s:", s)
			}
			blk.sequences = append(blk.sequences, seq)

			// Swap offset 1 and 2.
			offset1, offset2 = offset2, offset1
			if s >= sLimit {
				break encodeLoop
			}
			// Prepare next loop.
			cv = load6432(src, s)
		}
	}

	if int(nextEmit) < len(src) {
		blk.literals = append(blk.literals, src[nextEmit:]...)
		blk.extraLits = len(src) - int(nextEmit)
	}
	blk.recentOffsets[0] = uint32(offset1)
	blk.recentOffsets[1] = uint32(offset2)
	if debugEncoder {
		println("returning, recent offsets:", blk.recentOffsets, "extra literals:", blk.extraLits)
	}
}

// ResetDict will reset and set a dictionary if not nil
func (e *fastEncoder) Reset(d *dict, singleBlock bool) {
	e.resetBase(d, singleBlock)
	if d != nil {
		panic("fastEncoder: Reset with dict")
	}
}

// ResetDict will reset and set a dictionary if not nil
func (e *fastEncoderDict) Reset(d *dict, singleBlock bool) {
	e.resetBase(d, singleBlock)
	if d == nil {
		return
	}

	// Init or copy dict table
	if len(e.dictTable) != len(e.table) || d.id != e.lastDictID {
		if len(e.dictTable) != len(e.table) {
			e.dictTable = make([]tableEntry, len(e.table))
		}
		if true {
			end := e.maxMatchOff + int32(len(d.content)) - 8
			for i := e.maxMatchOff; i < end; i += 3 {
				const hashLog = tableBits

				cv := load6432(d.content, i-e.maxMatchOff)
				nextHash := hashLen(cv, hashLog, tableFastHashLen)      // 0 -> 5
				nextHash1 := hashLen(cv>>8, hashLog, tableFastHashLen)  // 1 -> 6
				nextHash2 := hashLen(cv>>16, hashLog, tableFastHashLen) // 2 -> 7
				e.dictTable[nextHash] = tableEntry{
					val:    uint32(cv),
					offset: i,
				}
				e.dictTable[nextHash1] = tableEntry{
					val:    uint32(cv >> 8),
					offset: i + 1,
				}
				e.dictTable[nextHash2] = tableEntry{
					val:    uint32(cv >> 16),
					offset: i + 2,
				}
			}
		}
		e.lastDictID = d.id
		e.allDirty = true
	}

	e.cur = e.maxMatchOff
	dirtyShardCnt := 0
	if !e.allDirty {
		for i := range e.tableShardDirty {
			if e.tableShardDirty[i] {
				dirtyShardCnt++
			}
		}
	}

	const shardCnt = tableShardCnt
	const shardSize = tableShardSize
	if e.allDirty || dirtyShardCnt > shardCnt*4/6 {
		//copy(e.table[:], e.dictTable)
		e.table = *(*[tableSize]tableEntry)(e.dictTable)
		for i := range e.tableShardDirty {
			e.tableShardDirty[i] = false
		}
		e.allDirty = false
		return
	}
	for i := range e.tableShardDirty {
		if !e.tableShardDirty[i] {
			continue
		}

		//copy(e.table[i*shardSize:(i+1)*shardSize], e.dictTable[i*shardSize:(i+1)*shardSize])
		*(*[shardSize]tableEntry)(e.table[i*shardSize:]) = *(*[shardSize]tableEntry)(e.dictTable[i*shardSize:])
		e.tableShardDirty[i] = false
	}
	e.allDirty = false
}

func (e *fastEncoderDict) markAllShardsDirty() {
	e.allDirty = true
}

func (e *fastEncoderDict) markShardDirty(entryNum uint32) {
	e.tableShardDirty[entryNum/tableShardSize] = true
}
  07070100000884000081A4000000000000000000000001645E367C00003A5E000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/encoder.go  // Copyright 2019+ Klaus Post. All rights reserved.
// License information can be found in the LICENSE file.
// Based on work by Yann Collet, released under BSD License.

package zstd

import (
	"crypto/rand"
	"fmt"
	"io"
	"math"
	rdebug "runtime/debug"
	"sync"

	"github.com/klauspost/compress/zstd/internal/xxhash"
)

// Encoder provides encoding to Zstandard.
// An Encoder can be used for either compressing a stream via the
// io.WriteCloser interface supported by the Encoder or as multiple independent
// tasks via the EncodeAll function.
// Smaller encodes are encouraged to use the EncodeAll function.
// Use NewWriter to create a new instance.
type Encoder struct {
	o        encoderOptions
	encoders chan encoder
	state    encoderState
	init     sync.Once
}

type encoder interface {
	Encode(blk *blockEnc, src []byte)
	EncodeNoHist(blk *blockEnc, src []byte)
	Block() *blockEnc
	CRC() *xxhash.Digest
	AppendCRC([]byte) []byte
	WindowSize(size int64) int32
	UseBlock(*blockEnc)
	Reset(d *dict, singleBlock bool)
}

type encoderState struct {
	w                io.Writer
	filling          []byte
	current          []byte
	previous         []byte
	encoder          encoder
	writing          *blockEnc
	err              error
	writeErr         error
	nWritten         int64
	nInput           int64
	frameContentSize int64
	headerWritten    bool
	eofWritten       bool
	fullFrameWritten bool

	// This waitgroup indicates an encode is running.
	wg sync.WaitGroup
	// This waitgroup indicates we have a block encoding/writing.
	wWg sync.WaitGroup
}

// NewWriter will create a new Zstandard encoder.
// If the encoder will be used for encoding blocks a nil writer can be used.
func NewWriter(w io.Writer, opts ...EOption) (*Encoder, error) {
	initPredefined()
	var e Encoder
	e.o.setDefault()
	for _, o := range opts {
		err := o(&e.o)
		if err != nil {
			return nil, err
		}
	}
	if w != nil {
		e.Reset(w)
	}
	return &e, nil
}

func (e *Encoder) initialize() {
	if e.o.concurrent == 0 {
		e.o.setDefault()
	}
	e.encoders = make(chan encoder, e.o.concurrent)
	for i := 0; i < e.o.concurrent; i++ {
		enc := e.o.encoder()
		e.encoders <- enc
	}
}

// Reset will re-initialize the writer and new writes will encode to the supplied writer
// as a new, independent stream.
func (e *Encoder) Reset(w io.Writer) {
	s := &e.state
	s.wg.Wait()
	s.wWg.Wait()
	if cap(s.filling) == 0 {
		s.filling = make([]byte, 0, e.o.blockSize)
	}
	if e.o.concurrent > 1 {
		if cap(s.current) == 0 {
			s.current = make([]byte, 0, e.o.blockSize)
		}
		if cap(s.previous) == 0 {
			s.previous = make([]byte, 0, e.o.blockSize)
		}
		s.current = s.current[:0]
		s.previous = s.previous[:0]
		if s.writing == nil {
			s.writing = &blockEnc{lowMem: e.o.lowMem}
			s.writing.init()
		}
		s.writing.initNewEncode()
	}
	if s.encoder == nil {
		s.encoder = e.o.encoder()
	}
	s.filling = s.filling[:0]
	s.encoder.Reset(e.o.dict, false)
	s.headerWritten = false
	s.eofWritten = false
	s.fullFrameWritten = false
	s.w = w
	s.err = nil
	s.nWritten = 0
	s.nInput = 0
	s.writeErr = nil
	s.frameContentSize = 0
}

// ResetContentSize will reset and set a content size for the next stream.
// If the bytes written does not match the size given an error will be returned
// when calling Close().
// This is removed when Reset is called.
// Sizes <= 0 results in no content size set.
func (e *Encoder) ResetContentSize(w io.Writer, size int64) {
	e.Reset(w)
	if size >= 0 {
		e.state.frameContentSize = size
	}
}

// Write data to the encoder.
// Input data will be buffered and as the buffer fills up
// content will be compressed and written to the output.
// When done writing, use Close to flush the remaining output
// and write CRC if requested.
func (e *Encoder) Write(p []byte) (n int, err error) {
	s := &e.state
	for len(p) > 0 {
		if len(p)+len(s.filling) < e.o.blockSize {
			if e.o.crc {
				_, _ = s.encoder.CRC().Write(p)
			}
			s.filling = append(s.filling, p...)
			return n + len(p), nil
		}
		add := p
		if len(p)+len(s.filling) > e.o.blockSize {
			add = add[:e.o.blockSize-len(s.filling)]
		}
		if e.o.crc {
			_, _ = s.encoder.CRC().Write(add)
		}
		s.filling = append(s.filling, add...)
		p = p[len(add):]
		n += len(add)
		if len(s.filling) < e.o.blockSize {
			return n, nil
		}
		err := e.nextBlock(false)
		if err != nil {
			return n, err
		}
		if debugAsserts && len(s.filling) > 0 {
			panic(len(s.filling))
		}
	}
	return n, nil
}

// nextBlock will synchronize and start compressing input in e.state.filling.
// If an error has occurred during encoding it will be returned.
func (e *Encoder) nextBlock(final bool) error {
	s := &e.state
	// Wait for current block.
	s.wg.Wait()
	if s.err != nil {
		return s.err
	}
	if len(s.filling) > e.o.blockSize {
		return fmt.Errorf("block > maxStoreBlockSize")
	}
	if !s.headerWritten {
		// If we have a single block encode, do a sync compression.
		if final && len(s.filling) == 0 && !e.o.fullZero {
			s.headerWritten = true
			s.fullFrameWritten = true
			s.eofWritten = true
			return nil
		}
		if final && len(s.filling) > 0 {
			s.current = e.EncodeAll(s.filling, s.current[:0])
			var n2 int
			n2, s.err = s.w.Write(s.current)
			if s.err != nil {
				return s.err
			}
			s.nWritten += int64(n2)
			s.nInput += int64(len(s.filling))
			s.current = s.current[:0]
			s.filling = s.filling[:0]
			s.headerWritten = true
			s.fullFrameWritten = true
			s.eofWritten = true
			return nil
		}

		var tmp [maxHeaderSize]byte
		fh := frameHeader{
			ContentSize:   uint64(s.frameContentSize),
			WindowSize:    uint32(s.encoder.WindowSize(s.frameContentSize)),
			SingleSegment: false,
			Checksum:      e.o.crc,
			DictID:        e.o.dict.ID(),
		}

		dst, err := fh.appendTo(tmp[:0])
		if err != nil {
			return err
		}
		s.headerWritten = true
		s.wWg.Wait()
		var n2 int
		n2, s.err = s.w.Write(dst)
		if s.err != nil {
			return s.err
		}
		s.nWritten += int64(n2)
	}
	if s.eofWritten {
		// Ensure we only write it once.
		final = false
	}

	if len(s.filling) == 0 {
		// Final block, but no data.
		if final {
			enc := s.encoder
			blk := enc.Block()
			blk.reset(nil)
			blk.last = true
			blk.encodeRaw(nil)
			s.wWg.Wait()
			_, s.err = s.w.Write(blk.output)
			s.nWritten += int64(len(blk.output))
			s.eofWritten = true
		}
		return s.err
	}

	// SYNC:
	if e.o.concurrent == 1 {
		src := s.filling
		s.nInput += int64(len(s.filling))
		if debugEncoder {
			println("Adding sync block,", len(src), "bytes, final:", final)
		}
		enc := s.encoder
		blk := enc.Block()
		blk.reset(nil)
		enc.Encode(blk, src)
		blk.last = final
		if final {
			s.eofWritten = true
		}

		s.err = blk.encode(src, e.o.noEntropy, !e.o.allLitEntropy)
		if s.err != nil {
			return s.err
		}
		_, s.err = s.w.Write(blk.output)
		s.nWritten += int64(len(blk.output))
		s.filling = s.filling[:0]
		return s.err
	}

	// Move blocks forward.
	s.filling, s.current, s.previous = s.previous[:0], s.filling, s.current
	s.nInput += int64(len(s.current))
	s.wg.Add(1)
	go func(src []byte) {
		if debugEncoder {
			println("Adding block,", len(src), "bytes, final:", final)
		}
		defer func() {
			if r := recover(); r != nil {
				s.err = fmt.Errorf("panic while encoding: %v", r)
				rdebug.PrintStack()
			}
			s.wg.Done()
		}()
		enc := s.encoder
		blk := enc.Block()
		enc.Encode(blk, src)
		blk.last = final
		if final {
			s.eofWritten = true
		}
		// Wait for pending writes.
		s.wWg.Wait()
		if s.writeErr != nil {
			s.err = s.writeErr
			return
		}
		// Transfer encoders from previous write block.
		blk.swapEncoders(s.writing)
		// Transfer recent offsets to next.
		enc.UseBlock(s.writing)
		s.writing = blk
		s.wWg.Add(1)
		go func() {
			defer func() {
				if r := recover(); r != nil {
					s.writeErr = fmt.Errorf("panic while encoding/writing: %v", r)
					rdebug.PrintStack()
				}
				s.wWg.Done()
			}()
			s.writeErr = blk.encode(src, e.o.noEntropy, !e.o.allLitEntropy)
			if s.writeErr != nil {
				return
			}
			_, s.writeErr = s.w.Write(blk.output)
			s.nWritten += int64(len(blk.output))
		}()
	}(s.current)
	return nil
}

// ReadFrom reads data from r until EOF or error.
// The return value n is the number of bytes read.
// Any error except io.EOF encountered during the read is also returned.
//
// The Copy function uses ReaderFrom if available.
func (e *Encoder) ReadFrom(r io.Reader) (n int64, err error) {
	if debugEncoder {
		println("Using ReadFrom")
	}

	// Flush any current writes.
	if len(e.state.filling) > 0 {
		if err := e.nextBlock(false); err != nil {
			return 0, err
		}
	}
	e.state.filling = e.state.filling[:e.o.blockSize]
	src := e.state.filling
	for {
		n2, err := r.Read(src)
		if e.o.crc {
			_, _ = e.state.encoder.CRC().Write(src[:n2])
		}
		// src is now the unfilled part...
		src = src[n2:]
		n += int64(n2)
		switch err {
		case io.EOF:
			e.state.filling = e.state.filling[:len(e.state.filling)-len(src)]
			if debugEncoder {
				println("ReadFrom: got EOF final block:", len(e.state.filling))
			}
			return n, nil
		case nil:
		default:
			if debugEncoder {
				println("ReadFrom: got error:", err)
			}
			e.state.err = err
			return n, err
		}
		if len(src) > 0 {
			if debugEncoder {
				println("ReadFrom: got space left in source:", len(src))
			}
			continue
		}
		err = e.nextBlock(false)
		if err != nil {
			return n, err
		}
		e.state.filling = e.state.filling[:e.o.blockSize]
		src = e.state.filling
	}
}

// Flush will send the currently written data to output
// and block until everything has been written.
// This should only be used on rare occasions where pushing the currently queued data is critical.
func (e *Encoder) Flush() error {
	s := &e.state
	if len(s.filling) > 0 {
		err := e.nextBlock(false)
		if err != nil {
			return err
		}
	}
	s.wg.Wait()
	s.wWg.Wait()
	if s.err != nil {
		return s.err
	}
	return s.writeErr
}

// Close will flush the final output and close the stream.
// The function will block until everything has been written.
// The Encoder can still be re-used after calling this.
func (e *Encoder) Close() error {
	s := &e.state
	if s.encoder == nil {
		return nil
	}
	err := e.nextBlock(true)
	if err != nil {
		return err
	}
	if s.frameContentSize > 0 {
		if s.nInput != s.frameContentSize {
			return fmt.Errorf("frame content size %d given, but %d bytes was written", s.frameContentSize, s.nInput)
		}
	}
	if e.state.fullFrameWritten {
		return s.err
	}
	s.wg.Wait()
	s.wWg.Wait()

	if s.err != nil {
		return s.err
	}
	if s.writeErr != nil {
		return s.writeErr
	}

	// Write CRC
	if e.o.crc && s.err == nil {
		// heap alloc.
		var tmp [4]byte
		_, s.err = s.w.Write(s.encoder.AppendCRC(tmp[:0]))
		s.nWritten += 4
	}

	// Add padding with content from crypto/rand.Reader
	if s.err == nil && e.o.pad > 0 {
		add := calcSkippableFrame(s.nWritten, int64(e.o.pad))
		frame, err := skippableFrame(s.filling[:0], add, rand.Reader)
		if err != nil {
			return err
		}
		_, s.err = s.w.Write(frame)
	}
	return s.err
}

// EncodeAll will encode all input in src and append it to dst.
// This function can be called concurrently, but each call will only run on a single goroutine.
// If empty input is given, nothing is returned, unless WithZeroFrames is specified.
// Encoded blocks can be concatenated and the result will be the combined input stream.
// Data compressed with EncodeAll can be decoded with the Decoder,
// using either a stream or DecodeAll.
func (e *Encoder) EncodeAll(src, dst []byte) []byte {
	if len(src) == 0 {
		if e.o.fullZero {
			// Add frame header.
			fh := frameHeader{
				ContentSize:   0,
				WindowSize:    MinWindowSize,
				SingleSegment: true,
				// Adding a checksum would be a waste of space.
				Checksum: false,
				DictID:   0,
			}
			dst, _ = fh.appendTo(dst)

			// Write raw block as last one only.
			var blk blockHeader
			blk.setSize(0)
			blk.setType(blockTypeRaw)
			blk.setLast(true)
			dst = blk.appendTo(dst)
		}
		return dst
	}
	e.init.Do(e.initialize)
	enc := <-e.encoders
	defer func() {
		// Release encoder reference to last block.
		// If a non-single block is needed the encoder will reset again.
		e.encoders <- enc
	}()
	// Use single segments when above minimum window and below window size.
	single := len(src) <= e.o.windowSize && len(src) > MinWindowSize
	if e.o.single != nil {
		single = *e.o.single
	}
	fh := frameHeader{
		ContentSize:   uint64(len(src)),
		WindowSize:    uint32(enc.WindowSize(int64(len(src)))),
		SingleSegment: single,
		Checksum:      e.o.crc,
		DictID:        e.o.dict.ID(),
	}

	// If less than 1MB, allocate a buffer up front.
	if len(dst) == 0 && cap(dst) == 0 && len(src) < 1<<20 && !e.o.lowMem {
		dst = make([]byte, 0, len(src))
	}
	dst, err := fh.appendTo(dst)
	if err != nil {
		panic(err)
	}

	// If we can do everything in one block, prefer that.
	if len(src) <= e.o.blockSize {
		enc.Reset(e.o.dict, true)
		// Slightly faster with no history and everything in one block.
		if e.o.crc {
			_, _ = enc.CRC().Write(src)
		}
		blk := enc.Block()
		blk.last = true
		if e.o.dict == nil {
			enc.EncodeNoHist(blk, src)
		} else {
			enc.Encode(blk, src)
		}

		// If we got the exact same number of literals as input,
		// assume the literals cannot be compressed.
		oldout := blk.output
		// Output directly to dst
		blk.output = dst

		err := blk.encode(src, e.o.noEntropy, !e.o.allLitEntropy)
		if err != nil {
			panic(err)
		}
		dst = blk.output
		blk.output = oldout
	} else {
		enc.Reset(e.o.dict, false)
		blk := enc.Block()
		for len(src) > 0 {
			todo := src
			if len(todo) > e.o.blockSize {
				todo = todo[:e.o.blockSize]
			}
			src = src[len(todo):]
			if e.o.crc {
				_, _ = enc.CRC().Write(todo)
			}
			blk.pushOffsets()
			enc.Encode(blk, todo)
			if len(src) == 0 {
				blk.last = true
			}
			err := blk.encode(todo, e.o.noEntropy, !e.o.allLitEntropy)
			if err != nil {
				panic(err)
			}
			dst = append(dst, blk.output...)
			blk.reset(nil)
		}
	}
	if e.o.crc {
		dst = enc.AppendCRC(dst)
	}
	// Add padding with content from crypto/rand.Reader
	if e.o.pad > 0 {
		add := calcSkippableFrame(int64(len(dst)), int64(e.o.pad))
		dst, err = skippableFrame(dst, add, rand.Reader)
		if err != nil {
			panic(err)
		}
	}
	return dst
}

// MaxEncodedSize returns the expected maximum
// size of an encoded block or stream.
func (e *Encoder) MaxEncodedSize(size int) int {
	frameHeader := 4 + 2 // magic + frame header & window descriptor
	if e.o.dict != nil {
		frameHeader += 4
	}
	// Frame content size:
	if size < 256 {
		frameHeader++
	} else if size < 65536+256 {
		frameHeader += 2
	} else if size < math.MaxInt32 {
		frameHeader += 4
	} else {
		frameHeader += 8
	}
	// Final crc
	if e.o.crc {
		frameHeader += 4
	}

	// Max overhead is 3 bytes/block.
	// There cannot be 0 blocks.
	blocks := (size + e.o.blockSize) / e.o.blockSize

	// Combine, add padding.
	maxSz := frameHeader + 3*blocks + size
	if e.o.pad > 1 {
		maxSz += calcSkippableFrame(int64(maxSz), int64(e.o.pad))
	}
	return maxSz
}
  07070100000885000081A4000000000000000000000001645E367C00002CE6000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/encoder_options.go  package zstd

import (
	"errors"
	"fmt"
	"math"
	"math/bits"
	"runtime"
	"strings"
)

// EOption is an option for creating a encoder.
type EOption func(*encoderOptions) error

// options retains accumulated state of multiple options.
type encoderOptions struct {
	concurrent      int
	level           EncoderLevel
	single          *bool
	pad             int
	blockSize       int
	windowSize      int
	crc             bool
	fullZero        bool
	noEntropy       bool
	allLitEntropy   bool
	customWindow    bool
	customALEntropy bool
	customBlockSize bool
	lowMem          bool
	dict            *dict
}

func (o *encoderOptions) setDefault() {
	*o = encoderOptions{
		concurrent:    runtime.GOMAXPROCS(0),
		crc:           true,
		single:        nil,
		blockSize:     maxCompressedBlockSize,
		windowSize:    8 << 20,
		level:         SpeedDefault,
		allLitEntropy: false,
		lowMem:        false,
	}
}

// encoder returns an encoder with the selected options.
func (o encoderOptions) encoder() encoder {
	switch o.level {
	case SpeedFastest:
		if o.dict != nil {
			return &fastEncoderDict{fastEncoder: fastEncoder{fastBase: fastBase{maxMatchOff: int32(o.windowSize), bufferReset: math.MaxInt32 - int32(o.windowSize*2), lowMem: o.lowMem}}}
		}
		return &fastEncoder{fastBase: fastBase{maxMatchOff: int32(o.windowSize), bufferReset: math.MaxInt32 - int32(o.windowSize*2), lowMem: o.lowMem}}

	case SpeedDefault:
		if o.dict != nil {
			return &doubleFastEncoderDict{fastEncoderDict: fastEncoderDict{fastEncoder: fastEncoder{fastBase: fastBase{maxMatchOff: int32(o.windowSize), bufferReset: math.MaxInt32 - int32(o.windowSize*2), lowMem: o.lowMem}}}}
		}
		return &doubleFastEncoder{fastEncoder: fastEncoder{fastBase: fastBase{maxMatchOff: int32(o.windowSize), bufferReset: math.MaxInt32 - int32(o.windowSize*2), lowMem: o.lowMem}}}
	case SpeedBetterCompression:
		if o.dict != nil {
			return &betterFastEncoderDict{betterFastEncoder: betterFastEncoder{fastBase: fastBase{maxMatchOff: int32(o.windowSize), bufferReset: math.MaxInt32 - int32(o.windowSize*2), lowMem: o.lowMem}}}
		}
		return &betterFastEncoder{fastBase: fastBase{maxMatchOff: int32(o.windowSize), bufferReset: math.MaxInt32 - int32(o.windowSize*2), lowMem: o.lowMem}}
	case SpeedBestCompression:
		return &bestFastEncoder{fastBase: fastBase{maxMatchOff: int32(o.windowSize), bufferReset: math.MaxInt32 - int32(o.windowSize*2), lowMem: o.lowMem}}
	}
	panic("unknown compression level")
}

// WithEncoderCRC will add CRC value to output.
// Output will be 4 bytes larger.
func WithEncoderCRC(b bool) EOption {
	return func(o *encoderOptions) error { o.crc = b; return nil }
}

// WithEncoderConcurrency will set the concurrency,
// meaning the maximum number of encoders to run concurrently.
// The value supplied must be at least 1.
// For streams, setting a value of 1 will disable async compression.
// By default this will be set to GOMAXPROCS.
func WithEncoderConcurrency(n int) EOption {
	return func(o *encoderOptions) error {
		if n <= 0 {
			return fmt.Errorf("concurrency must be at least 1")
		}
		o.concurrent = n
		return nil
	}
}

// WithWindowSize will set the maximum allowed back-reference distance.
// The value must be a power of two between MinWindowSize and MaxWindowSize.
// A larger value will enable better compression but allocate more memory and,
// for above-default values, take considerably longer.
// The default value is determined by the compression level.
func WithWindowSize(n int) EOption {
	return func(o *encoderOptions) error {
		switch {
		case n < MinWindowSize:
			return fmt.Errorf("window size must be at least %d", MinWindowSize)
		case n > MaxWindowSize:
			return fmt.Errorf("window size must be at most %d", MaxWindowSize)
		case (n & (n - 1)) != 0:
			return errors.New("window size must be a power of 2")
		}

		o.windowSize = n
		o.customWindow = true
		if o.blockSize > o.windowSize {
			o.blockSize = o.windowSize
			o.customBlockSize = true
		}
		return nil
	}
}

// WithEncoderPadding will add padding to all output so the size will be a multiple of n.
// This can be used to obfuscate the exact output size or make blocks of a certain size.
// The contents will be a skippable frame, so it will be invisible by the decoder.
// n must be > 0 and <= 1GB, 1<<30 bytes.
// The padded area will be filled with data from crypto/rand.Reader.
// If `EncodeAll` is used with data already in the destination, the total size will be multiple of this.
func WithEncoderPadding(n int) EOption {
	return func(o *encoderOptions) error {
		if n <= 0 {
			return fmt.Errorf("padding must be at least 1")
		}
		// No need to waste our time.
		if n == 1 {
			o.pad = 0
		}
		if n > 1<<30 {
			return fmt.Errorf("padding must less than 1GB (1<<30 bytes) ")
		}
		o.pad = n
		return nil
	}
}

// EncoderLevel predefines encoder compression levels.
// Only use the constants made available, since the actual mapping
// of these values are very likely to change and your compression could change
// unpredictably when upgrading the library.
type EncoderLevel int

const (
	speedNotSet EncoderLevel = iota

	// SpeedFastest will choose the fastest reasonable compression.
	// This is roughly equivalent to the fastest Zstandard mode.
	SpeedFastest

	// SpeedDefault is the default "pretty fast" compression option.
	// This is roughly equivalent to the default Zstandard mode (level 3).
	SpeedDefault

	// SpeedBetterCompression will yield better compression than the default.
	// Currently it is about zstd level 7-8 with ~ 2x-3x the default CPU usage.
	// By using this, notice that CPU usage may go up in the future.
	SpeedBetterCompression

	// SpeedBestCompression will choose the best available compression option.
	// This will offer the best compression no matter the CPU cost.
	SpeedBestCompression

	// speedLast should be kept as the last actual compression option.
	// The is not for external usage, but is used to keep track of the valid options.
	speedLast
)

// EncoderLevelFromString will convert a string representation of an encoding level back
// to a compression level. The compare is not case sensitive.
// If the string wasn't recognized, (false, SpeedDefault) will be returned.
func EncoderLevelFromString(s string) (bool, EncoderLevel) {
	for l := speedNotSet + 1; l < speedLast; l++ {
		if strings.EqualFold(s, l.String()) {
			return true, l
		}
	}
	return false, SpeedDefault
}

// EncoderLevelFromZstd will return an encoder level that closest matches the compression
// ratio of a specific zstd compression level.
// Many input values will provide the same compression level.
func EncoderLevelFromZstd(level int) EncoderLevel {
	switch {
	case level < 3:
		return SpeedFastest
	case level >= 3 && level < 6:
		return SpeedDefault
	case level >= 6 && level < 10:
		return SpeedBetterCompression
	default:
		return SpeedBestCompression
	}
}

// String provides a string representation of the compression level.
func (e EncoderLevel) String() string {
	switch e {
	case SpeedFastest:
		return "fastest"
	case SpeedDefault:
		return "default"
	case SpeedBetterCompression:
		return "better"
	case SpeedBestCompression:
		return "best"
	default:
		return "invalid"
	}
}

// WithEncoderLevel specifies a predefined compression level.
func WithEncoderLevel(l EncoderLevel) EOption {
	return func(o *encoderOptions) error {
		switch {
		case l <= speedNotSet || l >= speedLast:
			return fmt.Errorf("unknown encoder level")
		}
		o.level = l
		if !o.customWindow {
			switch o.level {
			case SpeedFastest:
				o.windowSize = 4 << 20
				if !o.customBlockSize {
					o.blockSize = 1 << 16
				}
			case SpeedDefault:
				o.windowSize = 8 << 20
			case SpeedBetterCompression:
				o.windowSize = 16 << 20
			case SpeedBestCompression:
				o.windowSize = 32 << 20
			}
		}
		if !o.customALEntropy {
			o.allLitEntropy = l > SpeedDefault
		}

		return nil
	}
}

// WithZeroFrames will encode 0 length input as full frames.
// This can be needed for compatibility with zstandard usage,
// but is not needed for this package.
func WithZeroFrames(b bool) EOption {
	return func(o *encoderOptions) error {
		o.fullZero = b
		return nil
	}
}

// WithAllLitEntropyCompression will apply entropy compression if no matches are found.
// Disabling this will skip incompressible data faster, but in cases with no matches but
// skewed character distribution compression is lost.
// Default value depends on the compression level selected.
func WithAllLitEntropyCompression(b bool) EOption {
	return func(o *encoderOptions) error {
		o.customALEntropy = true
		o.allLitEntropy = b
		return nil
	}
}

// WithNoEntropyCompression will always skip entropy compression of literals.
// This can be useful if content has matches, but unlikely to benefit from entropy
// compression. Usually the slight speed improvement is not worth enabling this.
func WithNoEntropyCompression(b bool) EOption {
	return func(o *encoderOptions) error {
		o.noEntropy = b
		return nil
	}
}

// WithSingleSegment will set the "single segment" flag when EncodeAll is used.
// If this flag is set, data must be regenerated within a single continuous memory segment.
// In this case, Window_Descriptor byte is skipped, but Frame_Content_Size is necessarily present.
// As a consequence, the decoder must allocate a memory segment of size equal or larger than size of your content.
// In order to preserve the decoder from unreasonable memory requirements,
// a decoder is allowed to reject a compressed frame which requests a memory size beyond decoder's authorized range.
// For broader compatibility, decoders are recommended to support memory sizes of at least 8 MB.
// This is only a recommendation, each decoder is free to support higher or lower limits, depending on local limitations.
// If this is not specified, block encodes will automatically choose this based on the input size and the window size.
// This setting has no effect on streamed encodes.
func WithSingleSegment(b bool) EOption {
	return func(o *encoderOptions) error {
		o.single = &b
		return nil
	}
}

// WithLowerEncoderMem will trade in some memory cases trade less memory usage for
// slower encoding speed.
// This will not change the window size which is the primary function for reducing
// memory usage. See WithWindowSize.
func WithLowerEncoderMem(b bool) EOption {
	return func(o *encoderOptions) error {
		o.lowMem = b
		return nil
	}
}

// WithEncoderDict allows to register a dictionary that will be used for the encode.
//
// The slice dict must be in the [dictionary format] produced by
// "zstd --train" from the Zstandard reference implementation.
//
// The encoder *may* choose to use no dictionary instead for certain payloads.
//
// [dictionary format]: https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#dictionary-format
func WithEncoderDict(dict []byte) EOption {
	return func(o *encoderOptions) error {
		d, err := loadDict(dict)
		if err != nil {
			return err
		}
		o.dict = d
		return nil
	}
}

// WithEncoderDictRaw registers a dictionary that may be used by the encoder.
//
// The slice content may contain arbitrary data. It will be used as an initial
// history.
func WithEncoderDictRaw(id uint32, content []byte) EOption {
	return func(o *encoderOptions) error {
		if bits.UintSize > 32 && uint(len(content)) > dictMaxLength {
			return fmt.Errorf("dictionary of size %d > 2GiB too large", len(content))
		}
		o.dict = &dict{id: id, content: content, offsets: [3]int{1, 4, 8}}
		return nil
	}
}
  07070100000886000081A4000000000000000000000001645E367C00002918000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/framedec.go // Copyright 2019+ Klaus Post. All rights reserved.
// License information can be found in the LICENSE file.
// Based on work by Yann Collet, released under BSD License.

package zstd

import (
	"encoding/binary"
	"encoding/hex"
	"errors"
	"io"

	"github.com/klauspost/compress/zstd/internal/xxhash"
)

type frameDec struct {
	o   decoderOptions
	crc *xxhash.Digest

	WindowSize uint64

	// Frame history passed between blocks
	history history

	rawInput byteBuffer

	// Byte buffer that can be reused for small input blocks.
	bBuf byteBuf

	FrameContentSize uint64

	DictionaryID  uint32
	HasCheckSum   bool
	SingleSegment bool
}

const (
	// MinWindowSize is the minimum Window Size, which is 1 KB.
	MinWindowSize = 1 << 10

	// MaxWindowSize is the maximum encoder window size
	// and the default decoder maximum window size.
	MaxWindowSize = 1 << 29
)

const (
	frameMagic          = "\x28\xb5\x2f\xfd"
	skippableFrameMagic = "\x2a\x4d\x18"
)

func newFrameDec(o decoderOptions) *frameDec {
	if o.maxWindowSize > o.maxDecodedSize {
		o.maxWindowSize = o.maxDecodedSize
	}
	d := frameDec{
		o: o,
	}
	return &d
}

// reset will read the frame header and prepare for block decoding.
// If nothing can be read from the input, io.EOF will be returned.
// Any other error indicated that the stream contained data, but
// there was a problem.
func (d *frameDec) reset(br byteBuffer) error {
	d.HasCheckSum = false
	d.WindowSize = 0
	var signature [4]byte
	for {
		var err error
		// Check if we can read more...
		b, err := br.readSmall(1)
		switch err {
		case io.EOF, io.ErrUnexpectedEOF:
			return io.EOF
		default:
			return err
		case nil:
			signature[0] = b[0]
		}
		// Read the rest, don't allow io.ErrUnexpectedEOF
		b, err = br.readSmall(3)
		switch err {
		case io.EOF:
			return io.EOF
		default:
			return err
		case nil:
			copy(signature[1:], b)
		}

		if string(signature[1:4]) != skippableFrameMagic || signature[0]&0xf0 != 0x50 {
			if debugDecoder {
				println("Not skippable", hex.EncodeToString(signature[:]), hex.EncodeToString([]byte(skippableFrameMagic)))
			}
			// Break if not skippable frame.
			break
		}
		// Read size to skip
		b, err = br.readSmall(4)
		if err != nil {
			if debugDecoder {
				println("Reading Frame Size", err)
			}
			return err
		}
		n := uint32(b[0]) | (uint32(b[1]) << 8) | (uint32(b[2]) << 16) | (uint32(b[3]) << 24)
		println("Skipping frame with", n, "bytes.")
		err = br.skipN(int64(n))
		if err != nil {
			if debugDecoder {
				println("Reading discarded frame", err)
			}
			return err
		}
	}
	if string(signature[:]) != frameMagic {
		if debugDecoder {
			println("Got magic numbers: ", signature, "want:", []byte(frameMagic))
		}
		return ErrMagicMismatch
	}

	// Read Frame_Header_Descriptor
	fhd, err := br.readByte()
	if err != nil {
		if debugDecoder {
			println("Reading Frame_Header_Descriptor", err)
		}
		return err
	}
	d.SingleSegment = fhd&(1<<5) != 0

	if fhd&(1<<3) != 0 {
		return errors.New("reserved bit set on frame header")
	}

	// Read Window_Descriptor
	// https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#window_descriptor
	d.WindowSize = 0
	if !d.SingleSegment {
		wd, err := br.readByte()
		if err != nil {
			if debugDecoder {
				println("Reading Window_Descriptor", err)
			}
			return err
		}
		printf("raw: %x, mantissa: %d, exponent: %d\n", wd, wd&7, wd>>3)
		windowLog := 10 + (wd >> 3)
		windowBase := uint64(1) << windowLog
		windowAdd := (windowBase / 8) * uint64(wd&0x7)
		d.WindowSize = windowBase + windowAdd
	}

	// Read Dictionary_ID
	// https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#dictionary_id
	d.DictionaryID = 0
	if size := fhd & 3; size != 0 {
		if size == 3 {
			size = 4
		}

		b, err := br.readSmall(int(size))
		if err != nil {
			println("Reading Dictionary_ID", err)
			return err
		}
		var id uint32
		switch len(b) {
		case 1:
			id = uint32(b[0])
		case 2:
			id = uint32(b[0]) | (uint32(b[1]) << 8)
		case 4:
			id = uint32(b[0]) | (uint32(b[1]) << 8) | (uint32(b[2]) << 16) | (uint32(b[3]) << 24)
		}
		if debugDecoder {
			println("Dict size", size, "ID:", id)
		}
		d.DictionaryID = id
	}

	// Read Frame_Content_Size
	// https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#frame_content_size
	var fcsSize int
	v := fhd >> 6
	switch v {
	case 0:
		if d.SingleSegment {
			fcsSize = 1
		}
	default:
		fcsSize = 1 << v
	}
	d.FrameContentSize = fcsUnknown
	if fcsSize > 0 {
		b, err := br.readSmall(fcsSize)
		if err != nil {
			println("Reading Frame content", err)
			return err
		}
		switch len(b) {
		case 1:
			d.FrameContentSize = uint64(b[0])
		case 2:
			// When FCS_Field_Size is 2, the offset of 256 is added.
			d.FrameContentSize = uint64(b[0]) | (uint64(b[1]) << 8) + 256
		case 4:
			d.FrameContentSize = uint64(b[0]) | (uint64(b[1]) << 8) | (uint64(b[2]) << 16) | (uint64(b[3]) << 24)
		case 8:
			d1 := uint32(b[0]) | (uint32(b[1]) << 8) | (uint32(b[2]) << 16) | (uint32(b[3]) << 24)
			d2 := uint32(b[4]) | (uint32(b[5]) << 8) | (uint32(b[6]) << 16) | (uint32(b[7]) << 24)
			d.FrameContentSize = uint64(d1) | (uint64(d2) << 32)
		}
		if debugDecoder {
			println("Read FCS:", d.FrameContentSize)
		}
	}

	// Move this to shared.
	d.HasCheckSum = fhd&(1<<2) != 0
	if d.HasCheckSum {
		if d.crc == nil {
			d.crc = xxhash.New()
		}
		d.crc.Reset()
	}

	if d.WindowSize > d.o.maxWindowSize {
		if debugDecoder {
			printf("window size %d > max %d\n", d.WindowSize, d.o.maxWindowSize)
		}
		return ErrWindowSizeExceeded
	}

	if d.WindowSize == 0 && d.SingleSegment {
		// We may not need window in this case.
		d.WindowSize = d.FrameContentSize
		if d.WindowSize < MinWindowSize {
			d.WindowSize = MinWindowSize
		}
		if d.WindowSize > d.o.maxDecodedSize {
			if debugDecoder {
				printf("window size %d > max %d\n", d.WindowSize, d.o.maxWindowSize)
			}
			return ErrDecoderSizeExceeded
		}
	}

	// The minimum Window_Size is 1 KB.
	if d.WindowSize < MinWindowSize {
		if debugDecoder {
			println("got window size: ", d.WindowSize)
		}
		return ErrWindowSizeTooSmall
	}
	d.history.windowSize = int(d.WindowSize)
	if !d.o.lowMem || d.history.windowSize < maxBlockSize {
		// Alloc 2x window size if not low-mem, or window size below 2MB.
		d.history.allocFrameBuffer = d.history.windowSize * 2
	} else {
		if d.o.lowMem {
			// Alloc with 1MB extra.
			d.history.allocFrameBuffer = d.history.windowSize + maxBlockSize/2
		} else {
			// Alloc with 2MB extra.
			d.history.allocFrameBuffer = d.history.windowSize + maxBlockSize
		}
	}

	if debugDecoder {
		println("Frame: Dict:", d.DictionaryID, "FrameContentSize:", d.FrameContentSize, "singleseg:", d.SingleSegment, "window:", d.WindowSize, "crc:", d.HasCheckSum)
	}

	// history contains input - maybe we do something
	d.rawInput = br
	return nil
}

// next will start decoding the next block from stream.
func (d *frameDec) next(block *blockDec) error {
	if debugDecoder {
		println("decoding new block")
	}
	err := block.reset(d.rawInput, d.WindowSize)
	if err != nil {
		println("block error:", err)
		// Signal the frame decoder we have a problem.
		block.sendErr(err)
		return err
	}
	return nil
}

// checkCRC will check the checksum, assuming the frame has one.
// Will return ErrCRCMismatch if crc check failed, otherwise nil.
func (d *frameDec) checkCRC() error {
	// We can overwrite upper tmp now
	buf, err := d.rawInput.readSmall(4)
	if err != nil {
		println("CRC missing?", err)
		return err
	}

	want := binary.LittleEndian.Uint32(buf[:4])
	got := uint32(d.crc.Sum64())

	if got != want {
		if debugDecoder {
			printf("CRC check failed: got %08x, want %08x\n", got, want)
		}
		return ErrCRCMismatch
	}
	if debugDecoder {
		printf("CRC ok %08x\n", got)
	}
	return nil
}

// consumeCRC skips over the checksum, assuming the frame has one.
func (d *frameDec) consumeCRC() error {
	_, err := d.rawInput.readSmall(4)
	if err != nil {
		println("CRC missing?", err)
	}
	return err
}

// runDecoder will run the decoder for the remainder of the frame.
func (d *frameDec) runDecoder(dst []byte, dec *blockDec) ([]byte, error) {
	saved := d.history.b

	// We use the history for output to avoid copying it.
	d.history.b = dst
	d.history.ignoreBuffer = len(dst)
	// Store input length, so we only check new data.
	crcStart := len(dst)
	d.history.decoders.maxSyncLen = 0
	if d.o.limitToCap {
		d.history.decoders.maxSyncLen = uint64(cap(dst) - len(dst))
	}
	if d.FrameContentSize != fcsUnknown {
		if !d.o.limitToCap || d.FrameContentSize+uint64(len(dst)) < d.history.decoders.maxSyncLen {
			d.history.decoders.maxSyncLen = d.FrameContentSize + uint64(len(dst))
		}
		if d.history.decoders.maxSyncLen > d.o.maxDecodedSize {
			if debugDecoder {
				println("maxSyncLen:", d.history.decoders.maxSyncLen, "> maxDecodedSize:", d.o.maxDecodedSize)
			}
			return dst, ErrDecoderSizeExceeded
		}
		if debugDecoder {
			println("maxSyncLen:", d.history.decoders.maxSyncLen)
		}
		if !d.o.limitToCap && uint64(cap(dst)) < d.history.decoders.maxSyncLen {
			// Alloc for output
			dst2 := make([]byte, len(dst), d.history.decoders.maxSyncLen+compressedBlockOverAlloc)
			copy(dst2, dst)
			dst = dst2
		}
	}
	var err error
	for {
		err = dec.reset(d.rawInput, d.WindowSize)
		if err != nil {
			break
		}
		if debugDecoder {
			println("next block:", dec)
		}
		err = dec.decodeBuf(&d.history)
		if err != nil {
			break
		}
		if uint64(len(d.history.b)-crcStart) > d.o.maxDecodedSize {
			println("runDecoder: maxDecodedSize exceeded", uint64(len(d.history.b)-crcStart), ">", d.o.maxDecodedSize)
			err = ErrDecoderSizeExceeded
			break
		}
		if d.o.limitToCap && len(d.history.b) > cap(dst) {
			println("runDecoder: cap exceeded", uint64(len(d.history.b)), ">", cap(dst))
			err = ErrDecoderSizeExceeded
			break
		}
		if uint64(len(d.history.b)-crcStart) > d.FrameContentSize {
			println("runDecoder: FrameContentSize exceeded", uint64(len(d.history.b)-crcStart), ">", d.FrameContentSize)
			err = ErrFrameSizeExceeded
			break
		}
		if dec.Last {
			break
		}
		if debugDecoder {
			println("runDecoder: FrameContentSize", uint64(len(d.history.b)-crcStart), "<=", d.FrameContentSize)
		}
	}
	dst = d.history.b
	if err == nil {
		if d.FrameContentSize != fcsUnknown && uint64(len(d.history.b)-crcStart) != d.FrameContentSize {
			err = ErrFrameSizeMismatch
		} else if d.HasCheckSum {
			if d.o.ignoreChecksum {
				err = d.consumeCRC()
			} else {
				d.crc.Write(dst[crcStart:])
				err = d.checkCRC()
			}
		}
	}
	d.history.b = saved
	return dst, err
}
07070100000887000081A4000000000000000000000001645E367C00000D54000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/frameenc.go // Copyright 2019+ Klaus Post. All rights reserved.
// License information can be found in the LICENSE file.
// Based on work by Yann Collet, released under BSD License.

package zstd

import (
	"encoding/binary"
	"fmt"
	"io"
	"math"
	"math/bits"
)

type frameHeader struct {
	ContentSize   uint64
	WindowSize    uint32
	SingleSegment bool
	Checksum      bool
	DictID        uint32
}

const maxHeaderSize = 14

func (f frameHeader) appendTo(dst []byte) ([]byte, error) {
	dst = append(dst, frameMagic...)
	var fhd uint8
	if f.Checksum {
		fhd |= 1 << 2
	}
	if f.SingleSegment {
		fhd |= 1 << 5
	}

	var dictIDContent []byte
	if f.DictID > 0 {
		var tmp [4]byte
		if f.DictID < 256 {
			fhd |= 1
			tmp[0] = uint8(f.DictID)
			dictIDContent = tmp[:1]
		} else if f.DictID < 1<<16 {
			fhd |= 2
			binary.LittleEndian.PutUint16(tmp[:2], uint16(f.DictID))
			dictIDContent = tmp[:2]
		} else {
			fhd |= 3
			binary.LittleEndian.PutUint32(tmp[:4], f.DictID)
			dictIDContent = tmp[:4]
		}
	}
	var fcs uint8
	if f.ContentSize >= 256 {
		fcs++
	}
	if f.ContentSize >= 65536+256 {
		fcs++
	}
	if f.ContentSize >= 0xffffffff {
		fcs++
	}

	fhd |= fcs << 6

	dst = append(dst, fhd)
	if !f.SingleSegment {
		const winLogMin = 10
		windowLog := (bits.Len32(f.WindowSize-1) - winLogMin) << 3
		dst = append(dst, uint8(windowLog))
	}
	if f.DictID > 0 {
		dst = append(dst, dictIDContent...)
	}
	switch fcs {
	case 0:
		if f.SingleSegment {
			dst = append(dst, uint8(f.ContentSize))
		}
		// Unless SingleSegment is set, framessizes < 256 are nto stored.
	case 1:
		f.ContentSize -= 256
		dst = append(dst, uint8(f.ContentSize), uint8(f.ContentSize>>8))
	case 2:
		dst = append(dst, uint8(f.ContentSize), uint8(f.ContentSize>>8), uint8(f.ContentSize>>16), uint8(f.ContentSize>>24))
	case 3:
		dst = append(dst, uint8(f.ContentSize), uint8(f.ContentSize>>8), uint8(f.ContentSize>>16), uint8(f.ContentSize>>24),
			uint8(f.ContentSize>>32), uint8(f.ContentSize>>40), uint8(f.ContentSize>>48), uint8(f.ContentSize>>56))
	default:
		panic("invalid fcs")
	}
	return dst, nil
}

const skippableFrameHeader = 4 + 4

// calcSkippableFrame will return a total size to be added for written
// to be divisible by multiple.
// The value will always be > skippableFrameHeader.
// The function will panic if written < 0 or wantMultiple <= 0.
func calcSkippableFrame(written, wantMultiple int64) int {
	if wantMultiple <= 0 {
		panic("wantMultiple <= 0")
	}
	if written < 0 {
		panic("written < 0")
	}
	leftOver := written % wantMultiple
	if leftOver == 0 {
		return 0
	}
	toAdd := wantMultiple - leftOver
	for toAdd < skippableFrameHeader {
		toAdd += wantMultiple
	}
	return int(toAdd)
}

// skippableFrame will add a skippable frame with a total size of bytes.
// total should be >= skippableFrameHeader and < math.MaxUint32.
func skippableFrame(dst []byte, total int, r io.Reader) ([]byte, error) {
	if total == 0 {
		return dst, nil
	}
	if total < skippableFrameHeader {
		return dst, fmt.Errorf("requested skippable frame (%d) < 8", total)
	}
	if int64(total) > math.MaxUint32 {
		return dst, fmt.Errorf("requested skippable frame (%d) > max uint32", total)
	}
	dst = append(dst, 0x50, 0x2a, 0x4d, 0x18)
	f := uint32(total - skippableFrameHeader)
	dst = append(dst, uint8(f), uint8(f>>8), uint8(f>>16), uint8(f>>24))
	start := len(dst)
	dst = append(dst, make([]byte, f)...)
	_, err := io.ReadFull(r, dst[start:])
	return dst, err
}
07070100000888000081A4000000000000000000000001645E367C000021DC000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/fse_decoder.go  // Copyright 2019+ Klaus Post. All rights reserved.
// License information can be found in the LICENSE file.
// Based on work by Yann Collet, released under BSD License.

package zstd

import (
	"encoding/binary"
	"errors"
	"fmt"
	"io"
)

const (
	tablelogAbsoluteMax = 9
)

const (
	/*!MEMORY_USAGE :
	 *  Memory usage formula : N->2^N Bytes (examples : 10 -> 1KB; 12 -> 4KB ; 16 -> 64KB; 20 -> 1MB; etc.)
	 *  Increasing memory usage improves compression ratio
	 *  Reduced memory usage can improve speed, due to cache effect
	 *  Recommended max value is 14, for 16KB, which nicely fits into Intel x86 L1 cache */
	maxMemoryUsage = tablelogAbsoluteMax + 2

	maxTableLog    = maxMemoryUsage - 2
	maxTablesize   = 1 << maxTableLog
	maxTableMask   = (1 << maxTableLog) - 1
	minTablelog    = 5
	maxSymbolValue = 255
)

// fseDecoder provides temporary storage for compression and decompression.
type fseDecoder struct {
	dt             [maxTablesize]decSymbol // Decompression table.
	symbolLen      uint16                  // Length of active part of the symbol table.
	actualTableLog uint8                   // Selected tablelog.
	maxBits        uint8                   // Maximum number of additional bits

	// used for table creation to avoid allocations.
	stateTable [256]uint16
	norm       [maxSymbolValue + 1]int16
	preDefined bool
}

// tableStep returns the next table index.
func tableStep(tableSize uint32) uint32 {
	return (tableSize >> 1) + (tableSize >> 3) + 3
}

// readNCount will read the symbol distribution so decoding tables can be constructed.
func (s *fseDecoder) readNCount(b *byteReader, maxSymbol uint16) error {
	var (
		charnum   uint16
		previous0 bool
	)
	if b.remain() < 4 {
		return errors.New("input too small")
	}
	bitStream := b.Uint32NC()
	nbBits := uint((bitStream & 0xF) + minTablelog) // extract tableLog
	if nbBits > tablelogAbsoluteMax {
		println("Invalid tablelog:", nbBits)
		return errors.New("tableLog too large")
	}
	bitStream >>= 4
	bitCount := uint(4)

	s.actualTableLog = uint8(nbBits)
	remaining := int32((1 << nbBits) + 1)
	threshold := int32(1 << nbBits)
	gotTotal := int32(0)
	nbBits++

	for remaining > 1 && charnum <= maxSymbol {
		if previous0 {
			//println("prev0")
			n0 := charnum
			for (bitStream & 0xFFFF) == 0xFFFF {
				//println("24 x 0")
				n0 += 24
				if r := b.remain(); r > 5 {
					b.advance(2)
					// The check above should make sure we can read 32 bits
					bitStream = b.Uint32NC() >> bitCount
				} else {
					// end of bit stream
					bitStream >>= 16
					bitCount += 16
				}
			}
			//printf("bitstream: %d, 0b%b", bitStream&3, bitStream)
			for (bitStream & 3) == 3 {
				n0 += 3
				bitStream >>= 2
				bitCount += 2
			}
			n0 += uint16(bitStream & 3)
			bitCount += 2

			if n0 > maxSymbolValue {
				return errors.New("maxSymbolValue too small")
			}
			//println("inserting ", n0-charnum, "zeroes from idx", charnum, "ending before", n0)
			for charnum < n0 {
				s.norm[uint8(charnum)] = 0
				charnum++
			}

			if r := b.remain(); r >= 7 || r-int(bitCount>>3) >= 4 {
				b.advance(bitCount >> 3)
				bitCount &= 7
				// The check above should make sure we can read 32 bits
				bitStream = b.Uint32NC() >> bitCount
			} else {
				bitStream >>= 2
			}
		}

		max := (2*threshold - 1) - remaining
		var count int32

		if int32(bitStream)&(threshold-1) < max {
			count = int32(bitStream) & (threshold - 1)
			if debugAsserts && nbBits < 1 {
				panic("nbBits underflow")
			}
			bitCount += nbBits - 1
		} else {
			count = int32(bitStream) & (2*threshold - 1)
			if count >= threshold {
				count -= max
			}
			bitCount += nbBits
		}

		// extra accuracy
		count--
		if count < 0 {
			// -1 means +1
			remaining += count
			gotTotal -= count
		} else {
			remaining -= count
			gotTotal += count
		}
		s.norm[charnum&0xff] = int16(count)
		charnum++
		previous0 = count == 0
		for remaining < threshold {
			nbBits--
			threshold >>= 1
		}

		if r := b.remain(); r >= 7 || r-int(bitCount>>3) >= 4 {
			b.advance(bitCount >> 3)
			bitCount &= 7
			// The check above should make sure we can read 32 bits
			bitStream = b.Uint32NC() >> (bitCount & 31)
		} else {
			bitCount -= (uint)(8 * (len(b.b) - 4 - b.off))
			b.off = len(b.b) - 4
			bitStream = b.Uint32() >> (bitCount & 31)
		}
	}
	s.symbolLen = charnum
	if s.symbolLen <= 1 {
		return fmt.Errorf("symbolLen (%d) too small", s.symbolLen)
	}
	if s.symbolLen > maxSymbolValue+1 {
		return fmt.Errorf("symbolLen (%d) too big", s.symbolLen)
	}
	if remaining != 1 {
		return fmt.Errorf("corruption detected (remaining %d != 1)", remaining)
	}
	if bitCount > 32 {
		return fmt.Errorf("corruption detected (bitCount %d > 32)", bitCount)
	}
	if gotTotal != 1<<s.actualTableLog {
		return fmt.Errorf("corruption detected (total %d != %d)", gotTotal, 1<<s.actualTableLog)
	}
	b.advance((bitCount + 7) >> 3)
	return s.buildDtable()
}

func (s *fseDecoder) mustReadFrom(r io.Reader) {
	fatalErr := func(err error) {
		if err != nil {
			panic(err)
		}
	}
	// 	dt             [maxTablesize]decSymbol // Decompression table.
	//	symbolLen      uint16                  // Length of active part of the symbol table.
	//	actualTableLog uint8                   // Selected tablelog.
	//	maxBits        uint8                   // Maximum number of additional bits
	//	// used for table creation to avoid allocations.
	//	stateTable [256]uint16
	//	norm       [maxSymbolValue + 1]int16
	//	preDefined bool
	fatalErr(binary.Read(r, binary.LittleEndian, &s.dt))
	fatalErr(binary.Read(r, binary.LittleEndian, &s.symbolLen))
	fatalErr(binary.Read(r, binary.LittleEndian, &s.actualTableLog))
	fatalErr(binary.Read(r, binary.LittleEndian, &s.maxBits))
	fatalErr(binary.Read(r, binary.LittleEndian, &s.stateTable))
	fatalErr(binary.Read(r, binary.LittleEndian, &s.norm))
	fatalErr(binary.Read(r, binary.LittleEndian, &s.preDefined))
}

// decSymbol contains information about a state entry,
// Including the state offset base, the output symbol and
// the number of bits to read for the low part of the destination state.
// Using a composite uint64 is faster than a struct with separate members.
type decSymbol uint64

func newDecSymbol(nbits, addBits uint8, newState uint16, baseline uint32) decSymbol {
	return decSymbol(nbits) | (decSymbol(addBits) << 8) | (decSymbol(newState) << 16) | (decSymbol(baseline) << 32)
}

func (d decSymbol) nbBits() uint8 {
	return uint8(d)
}

func (d decSymbol) addBits() uint8 {
	return uint8(d >> 8)
}

func (d decSymbol) newState() uint16 {
	return uint16(d >> 16)
}

func (d decSymbol) baselineInt() int {
	return int(d >> 32)
}

func (d *decSymbol) setNBits(nBits uint8) {
	const mask = 0xffffffffffffff00
	*d = (*d & mask) | decSymbol(nBits)
}

func (d *decSymbol) setAddBits(addBits uint8) {
	const mask = 0xffffffffffff00ff
	*d = (*d & mask) | (decSymbol(addBits) << 8)
}

func (d *decSymbol) setNewState(state uint16) {
	const mask = 0xffffffff0000ffff
	*d = (*d & mask) | decSymbol(state)<<16
}

func (d *decSymbol) setExt(addBits uint8, baseline uint32) {
	const mask = 0xffff00ff
	*d = (*d & mask) | (decSymbol(addBits) << 8) | (decSymbol(baseline) << 32)
}

// decSymbolValue returns the transformed decSymbol for the given symbol.
func decSymbolValue(symb uint8, t []baseOffset) (decSymbol, error) {
	if int(symb) >= len(t) {
		return 0, fmt.Errorf("rle symbol %d >= max %d", symb, len(t))
	}
	lu := t[symb]
	return newDecSymbol(0, lu.addBits, 0, lu.baseLine), nil
}

// setRLE will set the decoder til RLE mode.
func (s *fseDecoder) setRLE(symbol decSymbol) {
	s.actualTableLog = 0
	s.maxBits = symbol.addBits()
	s.dt[0] = symbol
}

// transform will transform the decoder table into a table usable for
// decoding without having to apply the transformation while decoding.
// The state will contain the base value and the number of bits to read.
func (s *fseDecoder) transform(t []baseOffset) error {
	tableSize := uint16(1 << s.actualTableLog)
	s.maxBits = 0
	for i, v := range s.dt[:tableSize] {
		add := v.addBits()
		if int(add) >= len(t) {
			return fmt.Errorf("invalid decoding table entry %d, symbol %d >= max (%d)", i, v.addBits(), len(t))
		}
		lu := t[add]
		if lu.addBits > s.maxBits {
			s.maxBits = lu.addBits
		}
		v.setExt(lu.addBits, lu.baseLine)
		s.dt[i] = v
	}
	return nil
}

type fseState struct {
	dt    []decSymbol
	state decSymbol
}

// Initialize and decodeAsync first state and symbol.
func (s *fseState) init(br *bitReader, tableLog uint8, dt []decSymbol) {
	s.dt = dt
	br.fill()
	s.state = dt[br.getBits(tableLog)]
}

// final returns the current state symbol without decoding the next.
func (s decSymbol) final() (int, uint8) {
	return s.baselineInt(), s.addBits()
}
07070100000889000081A4000000000000000000000001645E367C00000695000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/fse_decoder_amd64.go    //go:build amd64 && !appengine && !noasm && gc
// +build amd64,!appengine,!noasm,gc

package zstd

import (
	"fmt"
)

type buildDtableAsmContext struct {
	// inputs
	stateTable *uint16
	norm       *int16
	dt         *uint64

	// outputs --- set by the procedure in the case of error;
	// for interpretation please see the error handling part below
	errParam1 uint64
	errParam2 uint64
}

// buildDtable_asm is an x86 assembly implementation of fseDecoder.buildDtable.
// Function returns non-zero exit code on error.
//
//go:noescape
func buildDtable_asm(s *fseDecoder, ctx *buildDtableAsmContext) int

// please keep in sync with _generate/gen_fse.go
const (
	errorCorruptedNormalizedCounter = 1
	errorNewStateTooBig             = 2
	errorNewStateNoBits             = 3
)

// buildDtable will build the decoding table.
func (s *fseDecoder) buildDtable() error {
	ctx := buildDtableAsmContext{
		stateTable: &s.stateTable[0],
		norm:       &s.norm[0],
		dt:         (*uint64)(&s.dt[0]),
	}
	code := buildDtable_asm(s, &ctx)

	if code != 0 {
		switch code {
		case errorCorruptedNormalizedCounter:
			position := ctx.errParam1
			return fmt.Errorf("corrupted input (position=%d, expected 0)", position)

		case errorNewStateTooBig:
			newState := decSymbol(ctx.errParam1)
			size := ctx.errParam2
			return fmt.Errorf("newState (%d) outside table size (%d)", newState, size)

		case errorNewStateNoBits:
			newState := decSymbol(ctx.errParam1)
			oldState := decSymbol(ctx.errParam2)
			return fmt.Errorf("newState (%d) == oldState (%d) and no bits", newState, oldState)

		default:
			return fmt.Errorf("buildDtable_asm returned unhandled nonzero code = %d", code)
		}
	}
	return nil
}
   0707010000088A000081A4000000000000000000000001645E367C00000920000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/fse_decoder_amd64.s // Code generated by command: go run gen_fse.go -out ../fse_decoder_amd64.s -pkg=zstd. DO NOT EDIT.

//go:build !appengine && !noasm && gc && !noasm

// func buildDtable_asm(s *fseDecoder, ctx *buildDtableAsmContext) int
TEXT ·buildDtable_asm(SB), $0-24
	MOVQ ctx+8(FP), CX
	MOVQ s+0(FP), DI

	// Load values
	MOVBQZX 4098(DI), DX
	XORQ    AX, AX
	BTSQ    DX, AX
	MOVQ    (CX), BX
	MOVQ    16(CX), SI
	LEAQ    -1(AX), R8
	MOVQ    8(CX), CX
	MOVWQZX 4096(DI), DI

	// End load values
	// Init, lay down lowprob symbols
	XORQ R9, R9
	JMP  init_main_loop_condition

init_main_loop:
	MOVWQSX (CX)(R9*2), R10
	CMPW    R10, $-1
	JNE     do_not_update_high_threshold
	MOVB    R9, 1(SI)(R8*8)
	DECQ    R8
	MOVQ    $0x0000000000000001, R10

do_not_update_high_threshold:
	MOVW R10, (BX)(R9*2)
	INCQ R9

init_main_loop_condition:
	CMPQ R9, DI
	JL   init_main_loop

	// Spread symbols
	// Calculate table step
	MOVQ AX, R9
	SHRQ $0x01, R9
	MOVQ AX, R10
	SHRQ $0x03, R10
	LEAQ 3(R9)(R10*1), R9

	// Fill add bits values
	LEAQ -1(AX), R10
	XORQ R11, R11
	XORQ R12, R12
	JMP  spread_main_loop_condition

spread_main_loop:
	XORQ    R13, R13
	MOVWQSX (CX)(R12*2), R14
	JMP     spread_inner_loop_condition

spread_inner_loop:
	MOVB R12, 1(SI)(R11*8)

adjust_position:
	ADDQ R9, R11
	ANDQ R10, R11
	CMPQ R11, R8
	JG   adjust_position
	INCQ R13

spread_inner_loop_condition:
	CMPQ R13, R14
	JL   spread_inner_loop
	INCQ R12

spread_main_loop_condition:
	CMPQ  R12, DI
	JL    spread_main_loop
	TESTQ R11, R11
	JZ    spread_check_ok
	MOVQ  ctx+8(FP), AX
	MOVQ  R11, 24(AX)
	MOVQ  $+1, ret+16(FP)
	RET

spread_check_ok:
	// Build Decoding table
	XORQ DI, DI

build_table_main_table:
	MOVBQZX 1(SI)(DI*8), CX
	MOVWQZX (BX)(CX*2), R8
	LEAQ    1(R8), R9
	MOVW    R9, (BX)(CX*2)
	MOVQ    R8, R9
	BSRQ    R9, R9
	MOVQ    DX, CX
	SUBQ    R9, CX
	SHLQ    CL, R8
	SUBQ    AX, R8
	MOVB    CL, (SI)(DI*8)
	MOVW    R8, 2(SI)(DI*8)
	CMPQ    R8, AX
	JLE     build_table_check1_ok
	MOVQ    ctx+8(FP), CX
	MOVQ    R8, 24(CX)
	MOVQ    AX, 32(CX)
	MOVQ    $+2, ret+16(FP)
	RET

build_table_check1_ok:
	TESTB CL, CL
	JNZ   build_table_check2_ok
	CMPW  R8, DI
	JNE   build_table_check2_ok
	MOVQ  ctx+8(FP), AX
	MOVQ  R8, 24(AX)
	MOVQ  DI, 32(AX)
	MOVQ  $+3, ret+16(FP)
	RET

build_table_check2_ok:
	INCQ DI
	CMPQ DI, AX
	JL   build_table_main_table
	MOVQ $+0, ret+16(FP)
	RET
0707010000088B000081A4000000000000000000000001645E367C00000740000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/fse_decoder_generic.go  //go:build !amd64 || appengine || !gc || noasm
// +build !amd64 appengine !gc noasm

package zstd

import (
	"errors"
	"fmt"
)

// buildDtable will build the decoding table.
func (s *fseDecoder) buildDtable() error {
	tableSize := uint32(1 << s.actualTableLog)
	highThreshold := tableSize - 1
	symbolNext := s.stateTable[:256]

	// Init, lay down lowprob symbols
	{
		for i, v := range s.norm[:s.symbolLen] {
			if v == -1 {
				s.dt[highThreshold].setAddBits(uint8(i))
				highThreshold--
				symbolNext[i] = 1
			} else {
				symbolNext[i] = uint16(v)
			}
		}
	}

	// Spread symbols
	{
		tableMask := tableSize - 1
		step := tableStep(tableSize)
		position := uint32(0)
		for ss, v := range s.norm[:s.symbolLen] {
			for i := 0; i < int(v); i++ {
				s.dt[position].setAddBits(uint8(ss))
				position = (position + step) & tableMask
				for position > highThreshold {
					// lowprob area
					position = (position + step) & tableMask
				}
			}
		}
		if position != 0 {
			// position must reach all cells once, otherwise normalizedCounter is incorrect
			return errors.New("corrupted input (position != 0)")
		}
	}

	// Build Decoding table
	{
		tableSize := uint16(1 << s.actualTableLog)
		for u, v := range s.dt[:tableSize] {
			symbol := v.addBits()
			nextState := symbolNext[symbol]
			symbolNext[symbol] = nextState + 1
			nBits := s.actualTableLog - byte(highBits(uint32(nextState)))
			s.dt[u&maxTableMask].setNBits(nBits)
			newState := (nextState << nBits) - tableSize
			if newState > tableSize {
				return fmt.Errorf("newState (%d) outside table size (%d)", newState, tableSize)
			}
			if newState == uint16(u) && nBits == 0 {
				// Seems weird that this is possible with nbits > 0.
				return fmt.Errorf("newState (%d) == oldState (%d) and no bits", newState, u)
			}
			s.dt[u&maxTableMask].setNewState(newState)
		}
	}
	return nil
}
0707010000088C000081A4000000000000000000000001645E367C0000495B000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/fse_encoder.go  // Copyright 2019+ Klaus Post. All rights reserved.
// License information can be found in the LICENSE file.
// Based on work by Yann Collet, released under BSD License.

package zstd

import (
	"errors"
	"fmt"
	"math"
)

const (
	// For encoding we only support up to
	maxEncTableLog    = 8
	maxEncTablesize   = 1 << maxTableLog
	maxEncTableMask   = (1 << maxTableLog) - 1
	minEncTablelog    = 5
	maxEncSymbolValue = maxMatchLengthSymbol
)

// Scratch provides temporary storage for compression and decompression.
type fseEncoder struct {
	symbolLen      uint16 // Length of active part of the symbol table.
	actualTableLog uint8  // Selected tablelog.
	ct             cTable // Compression tables.
	maxCount       int    // count of the most probable symbol
	zeroBits       bool   // no bits has prob > 50%.
	clearCount     bool   // clear count
	useRLE         bool   // This encoder is for RLE
	preDefined     bool   // This encoder is predefined.
	reUsed         bool   // Set to know when the encoder has been reused.
	rleVal         uint8  // RLE Symbol
	maxBits        uint8  // Maximum output bits after transform.

	// TODO: Technically zstd should be fine with 64 bytes.
	count [256]uint32
	norm  [256]int16
}

// cTable contains tables used for compression.
type cTable struct {
	tableSymbol []byte
	stateTable  []uint16
	symbolTT    []symbolTransform
}

// symbolTransform contains the state transform for a symbol.
type symbolTransform struct {
	deltaNbBits    uint32
	deltaFindState int16
	outBits        uint8
}

// String prints values as a human readable string.
func (s symbolTransform) String() string {
	return fmt.Sprintf("{deltabits: %08x, findstate:%d outbits:%d}", s.deltaNbBits, s.deltaFindState, s.outBits)
}

// Histogram allows to populate the histogram and skip that step in the compression,
// It otherwise allows to inspect the histogram when compression is done.
// To indicate that you have populated the histogram call HistogramFinished
// with the value of the highest populated symbol, as well as the number of entries
// in the most populated entry. These are accepted at face value.
func (s *fseEncoder) Histogram() *[256]uint32 {
	return &s.count
}

// HistogramFinished can be called to indicate that the histogram has been populated.
// maxSymbol is the index of the highest set symbol of the next data segment.
// maxCount is the number of entries in the most populated entry.
// These are accepted at face value.
func (s *fseEncoder) HistogramFinished(maxSymbol uint8, maxCount int) {
	s.maxCount = maxCount
	s.symbolLen = uint16(maxSymbol) + 1
	s.clearCount = maxCount != 0
}

// allocCtable will allocate tables needed for compression.
// If existing tables a re big enough, they are simply re-used.
func (s *fseEncoder) allocCtable() {
	tableSize := 1 << s.actualTableLog
	// get tableSymbol that is big enough.
	if cap(s.ct.tableSymbol) < tableSize {
		s.ct.tableSymbol = make([]byte, tableSize)
	}
	s.ct.tableSymbol = s.ct.tableSymbol[:tableSize]

	ctSize := tableSize
	if cap(s.ct.stateTable) < ctSize {
		s.ct.stateTable = make([]uint16, ctSize)
	}
	s.ct.stateTable = s.ct.stateTable[:ctSize]

	if cap(s.ct.symbolTT) < 256 {
		s.ct.symbolTT = make([]symbolTransform, 256)
	}
	s.ct.symbolTT = s.ct.symbolTT[:256]
}

// buildCTable will populate the compression table so it is ready to be used.
func (s *fseEncoder) buildCTable() error {
	tableSize := uint32(1 << s.actualTableLog)
	highThreshold := tableSize - 1
	var cumul [256]int16

	s.allocCtable()
	tableSymbol := s.ct.tableSymbol[:tableSize]
	// symbol start positions
	{
		cumul[0] = 0
		for ui, v := range s.norm[:s.symbolLen-1] {
			u := byte(ui) // one less than reference
			if v == -1 {
				// Low proba symbol
				cumul[u+1] = cumul[u] + 1
				tableSymbol[highThreshold] = u
				highThreshold--
			} else {
				cumul[u+1] = cumul[u] + v
			}
		}
		// Encode last symbol separately to avoid overflowing u
		u := int(s.symbolLen - 1)
		v := s.norm[s.symbolLen-1]
		if v == -1 {
			// Low proba symbol
			cumul[u+1] = cumul[u] + 1
			tableSymbol[highThreshold] = byte(u)
			highThreshold--
		} else {
			cumul[u+1] = cumul[u] + v
		}
		if uint32(cumul[s.symbolLen]) != tableSize {
			return fmt.Errorf("internal error: expected cumul[s.symbolLen] (%d) == tableSize (%d)", cumul[s.symbolLen], tableSize)
		}
		cumul[s.symbolLen] = int16(tableSize) + 1
	}
	// Spread symbols
	s.zeroBits = false
	{
		step := tableStep(tableSize)
		tableMask := tableSize - 1
		var position uint32
		// if any symbol > largeLimit, we may have 0 bits output.
		largeLimit := int16(1 << (s.actualTableLog - 1))
		for ui, v := range s.norm[:s.symbolLen] {
			symbol := byte(ui)
			if v > largeLimit {
				s.zeroBits = true
			}
			for nbOccurrences := int16(0); nbOccurrences < v; nbOccurrences++ {
				tableSymbol[position] = symbol
				position = (position + step) & tableMask
				for position > highThreshold {
					position = (position + step) & tableMask
				} /* Low proba area */
			}
		}

		// Check if we have gone through all positions
		if position != 0 {
			return errors.New("position!=0")
		}
	}

	// Build table
	table := s.ct.stateTable
	{
		tsi := int(tableSize)
		for u, v := range tableSymbol {
			// TableU16 : sorted by symbol order; gives next state value
			table[cumul[v]] = uint16(tsi + u)
			cumul[v]++
		}
	}

	// Build Symbol Transformation Table
	{
		total := int16(0)
		symbolTT := s.ct.symbolTT[:s.symbolLen]
		tableLog := s.actualTableLog
		tl := (uint32(tableLog) << 16) - (1 << tableLog)
		for i, v := range s.norm[:s.symbolLen] {
			switch v {
			case 0:
			case -1, 1:
				symbolTT[i].deltaNbBits = tl
				symbolTT[i].deltaFindState = total - 1
				total++
			default:
				maxBitsOut := uint32(tableLog) - highBit(uint32(v-1))
				minStatePlus := uint32(v) << maxBitsOut
				symbolTT[i].deltaNbBits = (maxBitsOut << 16) - minStatePlus
				symbolTT[i].deltaFindState = total - v
				total += v
			}
		}
		if total != int16(tableSize) {
			return fmt.Errorf("total mismatch %d (got) != %d (want)", total, tableSize)
		}
	}
	return nil
}

var rtbTable = [...]uint32{0, 473195, 504333, 520860, 550000, 700000, 750000, 830000}

func (s *fseEncoder) setRLE(val byte) {
	s.allocCtable()
	s.actualTableLog = 0
	s.ct.stateTable = s.ct.stateTable[:1]
	s.ct.symbolTT[val] = symbolTransform{
		deltaFindState: 0,
		deltaNbBits:    0,
	}
	if debugEncoder {
		println("setRLE: val", val, "symbolTT", s.ct.symbolTT[val])
	}
	s.rleVal = val
	s.useRLE = true
}

// setBits will set output bits for the transform.
// if nil is provided, the number of bits is equal to the index.
func (s *fseEncoder) setBits(transform []byte) {
	if s.reUsed || s.preDefined {
		return
	}
	if s.useRLE {
		if transform == nil {
			s.ct.symbolTT[s.rleVal].outBits = s.rleVal
			s.maxBits = s.rleVal
			return
		}
		s.maxBits = transform[s.rleVal]
		s.ct.symbolTT[s.rleVal].outBits = s.maxBits
		return
	}
	if transform == nil {
		for i := range s.ct.symbolTT[:s.symbolLen] {
			s.ct.symbolTT[i].outBits = uint8(i)
		}
		s.maxBits = uint8(s.symbolLen - 1)
		return
	}
	s.maxBits = 0
	for i, v := range transform[:s.symbolLen] {
		s.ct.symbolTT[i].outBits = v
		if v > s.maxBits {
			// We could assume bits always going up, but we play safe.
			s.maxBits = v
		}
	}
}

// normalizeCount will normalize the count of the symbols so
// the total is equal to the table size.
// If successful, compression tables will also be made ready.
func (s *fseEncoder) normalizeCount(length int) error {
	if s.reUsed {
		return nil
	}
	s.optimalTableLog(length)
	var (
		tableLog          = s.actualTableLog
		scale             = 62 - uint64(tableLog)
		step              = (1 << 62) / uint64(length)
		vStep             = uint64(1) << (scale - 20)
		stillToDistribute = int16(1 << tableLog)
		largest           int
		largestP          int16
		lowThreshold      = (uint32)(length >> tableLog)
	)
	if s.maxCount == length {
		s.useRLE = true
		return nil
	}
	s.useRLE = false
	for i, cnt := range s.count[:s.symbolLen] {
		// already handled
		// if (count[s] == s.length) return 0;   /* rle special case */

		if cnt == 0 {
			s.norm[i] = 0
			continue
		}
		if cnt <= lowThreshold {
			s.norm[i] = -1
			stillToDistribute--
		} else {
			proba := (int16)((uint64(cnt) * step) >> scale)
			if proba < 8 {
				restToBeat := vStep * uint64(rtbTable[proba])
				v := uint64(cnt)*step - (uint64(proba) << scale)
				if v > restToBeat {
					proba++
				}
			}
			if proba > largestP {
				largestP = proba
				largest = i
			}
			s.norm[i] = proba
			stillToDistribute -= proba
		}
	}

	if -stillToDistribute >= (s.norm[largest] >> 1) {
		// corner case, need another normalization method
		err := s.normalizeCount2(length)
		if err != nil {
			return err
		}
		if debugAsserts {
			err = s.validateNorm()
			if err != nil {
				return err
			}
		}
		return s.buildCTable()
	}
	s.norm[largest] += stillToDistribute
	if debugAsserts {
		err := s.validateNorm()
		if err != nil {
			return err
		}
	}
	return s.buildCTable()
}

// Secondary normalization method.
// To be used when primary method fails.
func (s *fseEncoder) normalizeCount2(length int) error {
	const notYetAssigned = -2
	var (
		distributed  uint32
		total        = uint32(length)
		tableLog     = s.actualTableLog
		lowThreshold = total >> tableLog
		lowOne       = (total * 3) >> (tableLog + 1)
	)
	for i, cnt := range s.count[:s.symbolLen] {
		if cnt == 0 {
			s.norm[i] = 0
			continue
		}
		if cnt <= lowThreshold {
			s.norm[i] = -1
			distributed++
			total -= cnt
			continue
		}
		if cnt <= lowOne {
			s.norm[i] = 1
			distributed++
			total -= cnt
			continue
		}
		s.norm[i] = notYetAssigned
	}
	toDistribute := (1 << tableLog) - distributed

	if (total / toDistribute) > lowOne {
		// risk of rounding to zero
		lowOne = (total * 3) / (toDistribute * 2)
		for i, cnt := range s.count[:s.symbolLen] {
			if (s.norm[i] == notYetAssigned) && (cnt <= lowOne) {
				s.norm[i] = 1
				distributed++
				total -= cnt
				continue
			}
		}
		toDistribute = (1 << tableLog) - distributed
	}
	if distributed == uint32(s.symbolLen)+1 {
		// all values are pretty poor;
		//   probably incompressible data (should have already been detected);
		//   find max, then give all remaining points to max
		var maxV int
		var maxC uint32
		for i, cnt := range s.count[:s.symbolLen] {
			if cnt > maxC {
				maxV = i
				maxC = cnt
			}
		}
		s.norm[maxV] += int16(toDistribute)
		return nil
	}

	if total == 0 {
		// all of the symbols were low enough for the lowOne or lowThreshold
		for i := uint32(0); toDistribute > 0; i = (i + 1) % (uint32(s.symbolLen)) {
			if s.norm[i] > 0 {
				toDistribute--
				s.norm[i]++
			}
		}
		return nil
	}

	var (
		vStepLog = 62 - uint64(tableLog)
		mid      = uint64((1 << (vStepLog - 1)) - 1)
		rStep    = (((1 << vStepLog) * uint64(toDistribute)) + mid) / uint64(total) // scale on remaining
		tmpTotal = mid
	)
	for i, cnt := range s.count[:s.symbolLen] {
		if s.norm[i] == notYetAssigned {
			var (
				end    = tmpTotal + uint64(cnt)*rStep
				sStart = uint32(tmpTotal >> vStepLog)
				sEnd   = uint32(end >> vStepLog)
				weight = sEnd - sStart
			)
			if weight < 1 {
				return errors.New("weight < 1")
			}
			s.norm[i] = int16(weight)
			tmpTotal = end
		}
	}
	return nil
}

// optimalTableLog calculates and sets the optimal tableLog in s.actualTableLog
func (s *fseEncoder) optimalTableLog(length int) {
	tableLog := uint8(maxEncTableLog)
	minBitsSrc := highBit(uint32(length)) + 1
	minBitsSymbols := highBit(uint32(s.symbolLen-1)) + 2
	minBits := uint8(minBitsSymbols)
	if minBitsSrc < minBitsSymbols {
		minBits = uint8(minBitsSrc)
	}

	maxBitsSrc := uint8(highBit(uint32(length-1))) - 2
	if maxBitsSrc < tableLog {
		// Accuracy can be reduced
		tableLog = maxBitsSrc
	}
	if minBits > tableLog {
		tableLog = minBits
	}
	// Need a minimum to safely represent all symbol values
	if tableLog < minEncTablelog {
		tableLog = minEncTablelog
	}
	if tableLog > maxEncTableLog {
		tableLog = maxEncTableLog
	}
	s.actualTableLog = tableLog
}

// validateNorm validates the normalized histogram table.
func (s *fseEncoder) validateNorm() (err error) {
	var total int
	for _, v := range s.norm[:s.symbolLen] {
		if v >= 0 {
			total += int(v)
		} else {
			total -= int(v)
		}
	}
	defer func() {
		if err == nil {
			return
		}
		fmt.Printf("selected TableLog: %d, Symbol length: %d\n", s.actualTableLog, s.symbolLen)
		for i, v := range s.norm[:s.symbolLen] {
			fmt.Printf("%3d: %5d -> %4d \n", i, s.count[i], v)
		}
	}()
	if total != (1 << s.actualTableLog) {
		return fmt.Errorf("warning: Total == %d != %d", total, 1<<s.actualTableLog)
	}
	for i, v := range s.count[s.symbolLen:] {
		if v != 0 {
			return fmt.Errorf("warning: Found symbol out of range, %d after cut", i)
		}
	}
	return nil
}

// writeCount will write the normalized histogram count to header.
// This is read back by readNCount.
func (s *fseEncoder) writeCount(out []byte) ([]byte, error) {
	if s.useRLE {
		return append(out, s.rleVal), nil
	}
	if s.preDefined || s.reUsed {
		// Never write predefined.
		return out, nil
	}

	var (
		tableLog  = s.actualTableLog
		tableSize = 1 << tableLog
		previous0 bool
		charnum   uint16

		// maximum header size plus 2 extra bytes for final output if bitCount == 0.
		maxHeaderSize = ((int(s.symbolLen) * int(tableLog)) >> 3) + 3 + 2

		// Write Table Size
		bitStream = uint32(tableLog - minEncTablelog)
		bitCount  = uint(4)
		remaining = int16(tableSize + 1) /* +1 for extra accuracy */
		threshold = int16(tableSize)
		nbBits    = uint(tableLog + 1)
		outP      = len(out)
	)
	if cap(out) < outP+maxHeaderSize {
		out = append(out, make([]byte, maxHeaderSize*3)...)
		out = out[:len(out)-maxHeaderSize*3]
	}
	out = out[:outP+maxHeaderSize]

	// stops at 1
	for remaining > 1 {
		if previous0 {
			start := charnum
			for s.norm[charnum] == 0 {
				charnum++
			}
			for charnum >= start+24 {
				start += 24
				bitStream += uint32(0xFFFF) << bitCount
				out[outP] = byte(bitStream)
				out[outP+1] = byte(bitStream >> 8)
				outP += 2
				bitStream >>= 16
			}
			for charnum >= start+3 {
				start += 3
				bitStream += 3 << bitCount
				bitCount += 2
			}
			bitStream += uint32(charnum-start) << bitCount
			bitCount += 2
			if bitCount > 16 {
				out[outP] = byte(bitStream)
				out[outP+1] = byte(bitStream >> 8)
				outP += 2
				bitStream >>= 16
				bitCount -= 16
			}
		}

		count := s.norm[charnum]
		charnum++
		max := (2*threshold - 1) - remaining
		if count < 0 {
			remaining += count
		} else {
			remaining -= count
		}
		count++ // +1 for extra accuracy
		if count >= threshold {
			count += max // [0..max[ [max..threshold[ (...) [threshold+max 2*threshold[
		}
		bitStream += uint32(count) << bitCount
		bitCount += nbBits
		if count < max {
			bitCount--
		}

		previous0 = count == 1
		if remaining < 1 {
			return nil, errors.New("internal error: remaining < 1")
		}
		for remaining < threshold {
			nbBits--
			threshold >>= 1
		}

		if bitCount > 16 {
			out[outP] = byte(bitStream)
			out[outP+1] = byte(bitStream >> 8)
			outP += 2
			bitStream >>= 16
			bitCount -= 16
		}
	}

	if outP+2 > len(out) {
		return nil, fmt.Errorf("internal error: %d > %d, maxheader: %d, sl: %d, tl: %d, normcount: %v", outP+2, len(out), maxHeaderSize, s.symbolLen, int(tableLog), s.norm[:s.symbolLen])
	}
	out[outP] = byte(bitStream)
	out[outP+1] = byte(bitStream >> 8)
	outP += int((bitCount + 7) / 8)

	if charnum > s.symbolLen {
		return nil, errors.New("internal error: charnum > s.symbolLen")
	}
	return out[:outP], nil
}

// Approximate symbol cost, as fractional value, using fixed-point format (accuracyLog fractional bits)
// note 1 : assume symbolValue is valid (<= maxSymbolValue)
// note 2 : if freq[symbolValue]==0, @return a fake cost of tableLog+1 bits *
func (s *fseEncoder) bitCost(symbolValue uint8, accuracyLog uint32) uint32 {
	minNbBits := s.ct.symbolTT[symbolValue].deltaNbBits >> 16
	threshold := (minNbBits + 1) << 16
	if debugAsserts {
		if !(s.actualTableLog < 16) {
			panic("!s.actualTableLog < 16")
		}
		// ensure enough room for renormalization double shift
		if !(uint8(accuracyLog) < 31-s.actualTableLog) {
			panic("!uint8(accuracyLog) < 31-s.actualTableLog")
		}
	}
	tableSize := uint32(1) << s.actualTableLog
	deltaFromThreshold := threshold - (s.ct.symbolTT[symbolValue].deltaNbBits + tableSize)
	// linear interpolation (very approximate)
	normalizedDeltaFromThreshold := (deltaFromThreshold << accuracyLog) >> s.actualTableLog
	bitMultiplier := uint32(1) << accuracyLog
	if debugAsserts {
		if s.ct.symbolTT[symbolValue].deltaNbBits+tableSize > threshold {
			panic("s.ct.symbolTT[symbolValue].deltaNbBits+tableSize > threshold")
		}
		if normalizedDeltaFromThreshold > bitMultiplier {
			panic("normalizedDeltaFromThreshold > bitMultiplier")
		}
	}
	return (minNbBits+1)*bitMultiplier - normalizedDeltaFromThreshold
}

// Returns the cost in bits of encoding the distribution in count using ctable.
// Histogram should only be up to the last non-zero symbol.
// Returns an -1 if ctable cannot represent all the symbols in count.
func (s *fseEncoder) approxSize(hist []uint32) uint32 {
	if int(s.symbolLen) < len(hist) {
		// More symbols than we have.
		return math.MaxUint32
	}
	if s.useRLE {
		// We will never reuse RLE encoders.
		return math.MaxUint32
	}
	const kAccuracyLog = 8
	badCost := (uint32(s.actualTableLog) + 1) << kAccuracyLog
	var cost uint32
	for i, v := range hist {
		if v == 0 {
			continue
		}
		if s.norm[i] == 0 {
			return math.MaxUint32
		}
		bitCost := s.bitCost(uint8(i), kAccuracyLog)
		if bitCost > badCost {
			return math.MaxUint32
		}
		cost += v * bitCost
	}
	return cost >> kAccuracyLog
}

// maxHeaderSize returns the maximum header size in bits.
// This is not exact size, but we want a penalty for new tables anyway.
func (s *fseEncoder) maxHeaderSize() uint32 {
	if s.preDefined {
		return 0
	}
	if s.useRLE {
		return 8
	}
	return (((uint32(s.symbolLen) * uint32(s.actualTableLog)) >> 3) + 3) * 8
}

// cState contains the compression state of a stream.
type cState struct {
	bw         *bitWriter
	stateTable []uint16
	state      uint16
}

// init will initialize the compression state to the first symbol of the stream.
func (c *cState) init(bw *bitWriter, ct *cTable, first symbolTransform) {
	c.bw = bw
	c.stateTable = ct.stateTable
	if len(c.stateTable) == 1 {
		// RLE
		c.stateTable[0] = uint16(0)
		c.state = 0
		return
	}
	nbBitsOut := (first.deltaNbBits + (1 << 15)) >> 16
	im := int32((nbBitsOut << 16) - first.deltaNbBits)
	lu := (im >> nbBitsOut) + int32(first.deltaFindState)
	c.state = c.stateTable[lu]
}

// flush will write the tablelog to the output and flush the remaining full bytes.
func (c *cState) flush(tableLog uint8) {
	c.bw.flush32()
	c.bw.addBits16NC(c.state, tableLog)
}
 0707010000088D000081A4000000000000000000000001645E367C0000148E000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/fse_predefined.go   // Copyright 2019+ Klaus Post. All rights reserved.
// License information can be found in the LICENSE file.
// Based on work by Yann Collet, released under BSD License.

package zstd

import (
	"fmt"
	"math"
	"sync"
)

var (
	// fsePredef are the predefined fse tables as defined here:
	// https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#default-distributions
	// These values are already transformed.
	fsePredef [3]fseDecoder

	// fsePredefEnc are the predefined encoder based on fse tables as defined here:
	// https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#default-distributions
	// These values are already transformed.
	fsePredefEnc [3]fseEncoder

	// symbolTableX contain the transformations needed for each type as defined in
	// https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#the-codes-for-literals-lengths-match-lengths-and-offsets
	symbolTableX [3][]baseOffset

	// maxTableSymbol is the biggest supported symbol for each table type
	// https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#the-codes-for-literals-lengths-match-lengths-and-offsets
	maxTableSymbol = [3]uint8{tableLiteralLengths: maxLiteralLengthSymbol, tableOffsets: maxOffsetLengthSymbol, tableMatchLengths: maxMatchLengthSymbol}

	// bitTables is the bits table for each table.
	bitTables = [3][]byte{tableLiteralLengths: llBitsTable[:], tableOffsets: nil, tableMatchLengths: mlBitsTable[:]}
)

type tableIndex uint8

const (
	// indexes for fsePredef and symbolTableX
	tableLiteralLengths tableIndex = 0
	tableOffsets        tableIndex = 1
	tableMatchLengths   tableIndex = 2

	maxLiteralLengthSymbol = 35
	maxOffsetLengthSymbol  = 30
	maxMatchLengthSymbol   = 52
)

// baseOffset is used for calculating transformations.
type baseOffset struct {
	baseLine uint32
	addBits  uint8
}

// fillBase will precalculate base offsets with the given bit distributions.
func fillBase(dst []baseOffset, base uint32, bits ...uint8) {
	if len(bits) != len(dst) {
		panic(fmt.Sprintf("len(dst) (%d) != len(bits) (%d)", len(dst), len(bits)))
	}
	for i, bit := range bits {
		if base > math.MaxInt32 {
			panic("invalid decoding table, base overflows int32")
		}

		dst[i] = baseOffset{
			baseLine: base,
			addBits:  bit,
		}
		base += 1 << bit
	}
}

var predef sync.Once

func initPredefined() {
	predef.Do(func() {
		// Literals length codes
		tmp := make([]baseOffset, 36)
		for i := range tmp[:16] {
			tmp[i] = baseOffset{
				baseLine: uint32(i),
				addBits:  0,
			}
		}
		fillBase(tmp[16:], 16, 1, 1, 1, 1, 2, 2, 3, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)
		symbolTableX[tableLiteralLengths] = tmp

		// Match length codes
		tmp = make([]baseOffset, 53)
		for i := range tmp[:32] {
			tmp[i] = baseOffset{
				// The transformation adds the 3 length.
				baseLine: uint32(i) + 3,
				addBits:  0,
			}
		}
		fillBase(tmp[32:], 35, 1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)
		symbolTableX[tableMatchLengths] = tmp

		// Offset codes
		tmp = make([]baseOffset, maxOffsetBits+1)
		tmp[1] = baseOffset{
			baseLine: 1,
			addBits:  1,
		}
		fillBase(tmp[2:], 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30)
		symbolTableX[tableOffsets] = tmp

		// Fill predefined tables and transform them.
		// https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#default-distributions
		for i := range fsePredef[:] {
			f := &fsePredef[i]
			switch tableIndex(i) {
			case tableLiteralLengths:
				// https://github.com/facebook/zstd/blob/ededcfca57366461021c922720878c81a5854a0a/lib/decompress/zstd_decompress_block.c#L243
				f.actualTableLog = 6
				copy(f.norm[:], []int16{4, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1,
					2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 1, 1, 1, 1, 1,
					-1, -1, -1, -1})
				f.symbolLen = 36
			case tableOffsets:
				// https://github.com/facebook/zstd/blob/ededcfca57366461021c922720878c81a5854a0a/lib/decompress/zstd_decompress_block.c#L281
				f.actualTableLog = 5
				copy(f.norm[:], []int16{
					1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
					1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1})
				f.symbolLen = 29
			case tableMatchLengths:
				//https://github.com/facebook/zstd/blob/ededcfca57366461021c922720878c81a5854a0a/lib/decompress/zstd_decompress_block.c#L304
				f.actualTableLog = 6
				copy(f.norm[:], []int16{
					1, 4, 3, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
					1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
					1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1,
					-1, -1, -1, -1, -1})
				f.symbolLen = 53
			}
			if err := f.buildDtable(); err != nil {
				panic(fmt.Errorf("building table %v: %v", tableIndex(i), err))
			}
			if err := f.transform(symbolTableX[i]); err != nil {
				panic(fmt.Errorf("building table %v: %v", tableIndex(i), err))
			}
			f.preDefined = true

			// Create encoder as well
			enc := &fsePredefEnc[i]
			copy(enc.norm[:], f.norm[:])
			enc.symbolLen = f.symbolLen
			enc.actualTableLog = f.actualTableLog
			if err := enc.buildCTable(); err != nil {
				panic(fmt.Errorf("building encoding table %v: %v", tableIndex(i), err))
			}
			enc.setBits(bitTables[i])
			enc.preDefined = true
		}
	})
}
  0707010000088E000081A4000000000000000000000001645E367C00000453000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/hash.go // Copyright 2019+ Klaus Post. All rights reserved.
// License information can be found in the LICENSE file.
// Based on work by Yann Collet, released under BSD License.

package zstd

const (
	prime3bytes = 506832829
	prime4bytes = 2654435761
	prime5bytes = 889523592379
	prime6bytes = 227718039650203
	prime7bytes = 58295818150454627
	prime8bytes = 0xcf1bbcdcb7a56463
)

// hashLen returns a hash of the lowest mls bytes of with length output bits.
// mls must be >=3 and <=8. Any other value will return hash for 4 bytes.
// length should always be < 32.
// Preferably length and mls should be a constant for inlining.
func hashLen(u uint64, length, mls uint8) uint32 {
	switch mls {
	case 3:
		return (uint32(u<<8) * prime3bytes) >> (32 - length)
	case 5:
		return uint32(((u << (64 - 40)) * prime5bytes) >> (64 - length))
	case 6:
		return uint32(((u << (64 - 48)) * prime6bytes) >> (64 - length))
	case 7:
		return uint32(((u << (64 - 56)) * prime7bytes) >> (64 - length))
	case 8:
		return uint32((u * prime8bytes) >> (64 - length))
	default:
		return (uint32(u) * prime4bytes) >> (32 - length)
	}
}
 0707010000088F000081A4000000000000000000000001645E367C00000B7E000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/history.go  // Copyright 2019+ Klaus Post. All rights reserved.
// License information can be found in the LICENSE file.
// Based on work by Yann Collet, released under BSD License.

package zstd

import (
	"github.com/klauspost/compress/huff0"
)

// history contains the information transferred between blocks.
type history struct {
	// Literal decompression
	huffTree *huff0.Scratch

	// Sequence decompression
	decoders      sequenceDecs
	recentOffsets [3]int

	// History buffer...
	b []byte

	// ignoreBuffer is meant to ignore a number of bytes
	// when checking for matches in history
	ignoreBuffer int

	windowSize       int
	allocFrameBuffer int // needed?
	error            bool
	dict             *dict
}

// reset will reset the history to initial state of a frame.
// The history must already have been initialized to the desired size.
func (h *history) reset() {
	h.b = h.b[:0]
	h.ignoreBuffer = 0
	h.error = false
	h.recentOffsets = [3]int{1, 4, 8}
	h.decoders.freeDecoders()
	h.decoders = sequenceDecs{br: h.decoders.br}
	h.freeHuffDecoder()
	h.huffTree = nil
	h.dict = nil
	//printf("history created: %+v (l: %d, c: %d)", *h, len(h.b), cap(h.b))
}

func (h *history) freeHuffDecoder() {
	if h.huffTree != nil {
		if h.dict == nil || h.dict.litEnc != h.huffTree {
			huffDecoderPool.Put(h.huffTree)
			h.huffTree = nil
		}
	}
}

func (h *history) setDict(dict *dict) {
	if dict == nil {
		return
	}
	h.dict = dict
	h.decoders.litLengths = dict.llDec
	h.decoders.offsets = dict.ofDec
	h.decoders.matchLengths = dict.mlDec
	h.decoders.dict = dict.content
	h.recentOffsets = dict.offsets
	h.huffTree = dict.litEnc
}

// append bytes to history.
// This function will make sure there is space for it,
// if the buffer has been allocated with enough extra space.
func (h *history) append(b []byte) {
	if len(b) >= h.windowSize {
		// Discard all history by simply overwriting
		h.b = h.b[:h.windowSize]
		copy(h.b, b[len(b)-h.windowSize:])
		return
	}

	// If there is space, append it.
	if len(b) < cap(h.b)-len(h.b) {
		h.b = append(h.b, b...)
		return
	}

	// Move data down so we only have window size left.
	// We know we have less than window size in b at this point.
	discard := len(b) + len(h.b) - h.windowSize
	copy(h.b, h.b[discard:])
	h.b = h.b[:h.windowSize]
	copy(h.b[h.windowSize-len(b):], b)
}

// ensureBlock will ensure there is space for at least one block...
func (h *history) ensureBlock() {
	if cap(h.b) < h.allocFrameBuffer {
		h.b = make([]byte, 0, h.allocFrameBuffer)
		return
	}

	avail := cap(h.b) - len(h.b)
	if avail >= h.windowSize || avail > maxCompressedBlockSize {
		return
	}
	// Move data down so we only have window size left.
	// We know we have less than window size in b at this point.
	discard := len(h.b) - h.windowSize
	copy(h.b, h.b[discard:])
	h.b = h.b[:h.windowSize]
}

// append bytes to history without ever discarding anything.
func (h *history) appendKeep(b []byte) {
	h.b = append(h.b, b...)
}
  07070100000890000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/internal    07070100000891000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/internal/xxhash 07070100000892000081A4000000000000000000000001645E367C0000042C000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/internal/xxhash/LICENSE.txt Copyright (c) 2016 Caleb Spare

MIT License

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
07070100000893000081A4000000000000000000000001645E367C0000089E000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/internal/xxhash/README.md   # xxhash

VENDORED: Go to [github.com/cespare/xxhash](https://github.com/cespare/xxhash) for original package.

xxhash is a Go implementation of the 64-bit [xxHash] algorithm, XXH64. This is a
high-quality hashing algorithm that is much faster than anything in the Go
standard library.

This package provides a straightforward API:

```
func Sum64(b []byte) uint64
func Sum64String(s string) uint64
type Digest struct{ ... }
    func New() *Digest
```

The `Digest` type implements hash.Hash64. Its key methods are:

```
func (*Digest) Write([]byte) (int, error)
func (*Digest) WriteString(string) (int, error)
func (*Digest) Sum64() uint64
```

The package is written with optimized pure Go and also contains even faster
assembly implementations for amd64 and arm64. If desired, the `purego` build tag
opts into using the Go code even on those architectures.

[xxHash]: http://cyan4973.github.io/xxHash/

## Compatibility

This package is in a module and the latest code is in version 2 of the module.
You need a version of Go with at least "minimal module compatibility" to use
github.com/cespare/xxhash/v2:

* 1.9.7+ for Go 1.9
* 1.10.3+ for Go 1.10
* Go 1.11 or later

I recommend using the latest release of Go.

## Benchmarks

Here are some quick benchmarks comparing the pure-Go and assembly
implementations of Sum64.

| input size | purego    | asm       |
| ---------- | --------- | --------- |
| 4 B        |  1.3 GB/s |  1.2 GB/s |
| 16 B       |  2.9 GB/s |  3.5 GB/s |
| 100 B      |  6.9 GB/s |  8.1 GB/s |
| 4 KB       | 11.7 GB/s | 16.7 GB/s |
| 10 MB      | 12.0 GB/s | 17.3 GB/s |

These numbers were generated on Ubuntu 20.04 with an Intel Xeon Platinum 8252C
CPU using the following commands under Go 1.19.2:

```
benchstat <(go test -tags purego -benchtime 500ms -count 15 -bench 'Sum64$')
benchstat <(go test -benchtime 500ms -count 15 -bench 'Sum64$')
```

## Projects using this package

- [InfluxDB](https://github.com/influxdata/influxdb)
- [Prometheus](https://github.com/prometheus/prometheus)
- [VictoriaMetrics](https://github.com/VictoriaMetrics/VictoriaMetrics)
- [FreeCache](https://github.com/coocood/freecache)
- [FastCache](https://github.com/VictoriaMetrics/fastcache)
  07070100000894000081A4000000000000000000000001645E367C0000147C000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash.go   // Package xxhash implements the 64-bit variant of xxHash (XXH64) as described
// at http://cyan4973.github.io/xxHash/.
// THIS IS VENDORED: Go to github.com/cespare/xxhash for original package.

package xxhash

import (
	"encoding/binary"
	"errors"
	"math/bits"
)

const (
	prime1 uint64 = 11400714785074694791
	prime2 uint64 = 14029467366897019727
	prime3 uint64 = 1609587929392839161
	prime4 uint64 = 9650029242287828579
	prime5 uint64 = 2870177450012600261
)

// Store the primes in an array as well.
//
// The consts are used when possible in Go code to avoid MOVs but we need a
// contiguous array of the assembly code.
var primes = [...]uint64{prime1, prime2, prime3, prime4, prime5}

// Digest implements hash.Hash64.
type Digest struct {
	v1    uint64
	v2    uint64
	v3    uint64
	v4    uint64
	total uint64
	mem   [32]byte
	n     int // how much of mem is used
}

// New creates a new Digest that computes the 64-bit xxHash algorithm.
func New() *Digest {
	var d Digest
	d.Reset()
	return &d
}

// Reset clears the Digest's state so that it can be reused.
func (d *Digest) Reset() {
	d.v1 = primes[0] + prime2
	d.v2 = prime2
	d.v3 = 0
	d.v4 = -primes[0]
	d.total = 0
	d.n = 0
}

// Size always returns 8 bytes.
func (d *Digest) Size() int { return 8 }

// BlockSize always returns 32 bytes.
func (d *Digest) BlockSize() int { return 32 }

// Write adds more data to d. It always returns len(b), nil.
func (d *Digest) Write(b []byte) (n int, err error) {
	n = len(b)
	d.total += uint64(n)

	memleft := d.mem[d.n&(len(d.mem)-1):]

	if d.n+n < 32 {
		// This new data doesn't even fill the current block.
		copy(memleft, b)
		d.n += n
		return
	}

	if d.n > 0 {
		// Finish off the partial block.
		c := copy(memleft, b)
		d.v1 = round(d.v1, u64(d.mem[0:8]))
		d.v2 = round(d.v2, u64(d.mem[8:16]))
		d.v3 = round(d.v3, u64(d.mem[16:24]))
		d.v4 = round(d.v4, u64(d.mem[24:32]))
		b = b[c:]
		d.n = 0
	}

	if len(b) >= 32 {
		// One or more full blocks left.
		nw := writeBlocks(d, b)
		b = b[nw:]
	}

	// Store any remaining partial block.
	copy(d.mem[:], b)
	d.n = len(b)

	return
}

// Sum appends the current hash to b and returns the resulting slice.
func (d *Digest) Sum(b []byte) []byte {
	s := d.Sum64()
	return append(
		b,
		byte(s>>56),
		byte(s>>48),
		byte(s>>40),
		byte(s>>32),
		byte(s>>24),
		byte(s>>16),
		byte(s>>8),
		byte(s),
	)
}

// Sum64 returns the current hash.
func (d *Digest) Sum64() uint64 {
	var h uint64

	if d.total >= 32 {
		v1, v2, v3, v4 := d.v1, d.v2, d.v3, d.v4
		h = rol1(v1) + rol7(v2) + rol12(v3) + rol18(v4)
		h = mergeRound(h, v1)
		h = mergeRound(h, v2)
		h = mergeRound(h, v3)
		h = mergeRound(h, v4)
	} else {
		h = d.v3 + prime5
	}

	h += d.total

	b := d.mem[:d.n&(len(d.mem)-1)]
	for ; len(b) >= 8; b = b[8:] {
		k1 := round(0, u64(b[:8]))
		h ^= k1
		h = rol27(h)*prime1 + prime4
	}
	if len(b) >= 4 {
		h ^= uint64(u32(b[:4])) * prime1
		h = rol23(h)*prime2 + prime3
		b = b[4:]
	}
	for ; len(b) > 0; b = b[1:] {
		h ^= uint64(b[0]) * prime5
		h = rol11(h) * prime1
	}

	h ^= h >> 33
	h *= prime2
	h ^= h >> 29
	h *= prime3
	h ^= h >> 32

	return h
}

const (
	magic         = "xxh\x06"
	marshaledSize = len(magic) + 8*5 + 32
)

// MarshalBinary implements the encoding.BinaryMarshaler interface.
func (d *Digest) MarshalBinary() ([]byte, error) {
	b := make([]byte, 0, marshaledSize)
	b = append(b, magic...)
	b = appendUint64(b, d.v1)
	b = appendUint64(b, d.v2)
	b = appendUint64(b, d.v3)
	b = appendUint64(b, d.v4)
	b = appendUint64(b, d.total)
	b = append(b, d.mem[:d.n]...)
	b = b[:len(b)+len(d.mem)-d.n]
	return b, nil
}

// UnmarshalBinary implements the encoding.BinaryUnmarshaler interface.
func (d *Digest) UnmarshalBinary(b []byte) error {
	if len(b) < len(magic) || string(b[:len(magic)]) != magic {
		return errors.New("xxhash: invalid hash state identifier")
	}
	if len(b) != marshaledSize {
		return errors.New("xxhash: invalid hash state size")
	}
	b = b[len(magic):]
	b, d.v1 = consumeUint64(b)
	b, d.v2 = consumeUint64(b)
	b, d.v3 = consumeUint64(b)
	b, d.v4 = consumeUint64(b)
	b, d.total = consumeUint64(b)
	copy(d.mem[:], b)
	d.n = int(d.total % uint64(len(d.mem)))
	return nil
}

func appendUint64(b []byte, x uint64) []byte {
	var a [8]byte
	binary.LittleEndian.PutUint64(a[:], x)
	return append(b, a[:]...)
}

func consumeUint64(b []byte) ([]byte, uint64) {
	x := u64(b)
	return b[8:], x
}

func u64(b []byte) uint64 { return binary.LittleEndian.Uint64(b) }
func u32(b []byte) uint32 { return binary.LittleEndian.Uint32(b) }

func round(acc, input uint64) uint64 {
	acc += input * prime2
	acc = rol31(acc)
	acc *= prime1
	return acc
}

func mergeRound(acc, val uint64) uint64 {
	val = round(0, val)
	acc ^= val
	acc = acc*prime1 + prime4
	return acc
}

func rol1(x uint64) uint64  { return bits.RotateLeft64(x, 1) }
func rol7(x uint64) uint64  { return bits.RotateLeft64(x, 7) }
func rol11(x uint64) uint64 { return bits.RotateLeft64(x, 11) }
func rol12(x uint64) uint64 { return bits.RotateLeft64(x, 12) }
func rol18(x uint64) uint64 { return bits.RotateLeft64(x, 18) }
func rol23(x uint64) uint64 { return bits.RotateLeft64(x, 23) }
func rol27(x uint64) uint64 { return bits.RotateLeft64(x, 27) }
func rol31(x uint64) uint64 { return bits.RotateLeft64(x, 31) }
07070100000895000081A4000000000000000000000001645E367C00000DF9000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_amd64.s  //go:build !appengine && gc && !purego && !noasm
// +build !appengine
// +build gc
// +build !purego
// +build !noasm

#include "textflag.h"

// Registers:
#define h      AX
#define d      AX
#define p      SI // pointer to advance through b
#define n      DX
#define end    BX // loop end
#define v1     R8
#define v2     R9
#define v3     R10
#define v4     R11
#define x      R12
#define prime1 R13
#define prime2 R14
#define prime4 DI

#define round(acc, x) \
	IMULQ prime2, x   \
	ADDQ  x, acc      \
	ROLQ  $31, acc    \
	IMULQ prime1, acc

// round0 performs the operation x = round(0, x).
#define round0(x) \
	IMULQ prime2, x \
	ROLQ  $31, x    \
	IMULQ prime1, x

// mergeRound applies a merge round on the two registers acc and x.
// It assumes that prime1, prime2, and prime4 have been loaded.
#define mergeRound(acc, x) \
	round0(x)         \
	XORQ  x, acc      \
	IMULQ prime1, acc \
	ADDQ  prime4, acc

// blockLoop processes as many 32-byte blocks as possible,
// updating v1, v2, v3, and v4. It assumes that there is at least one block
// to process.
#define blockLoop() \
loop:  \
	MOVQ +0(p), x  \
	round(v1, x)   \
	MOVQ +8(p), x  \
	round(v2, x)   \
	MOVQ +16(p), x \
	round(v3, x)   \
	MOVQ +24(p), x \
	round(v4, x)   \
	ADDQ $32, p    \
	CMPQ p, end    \
	JLE  loop

// func Sum64(b []byte) uint64
TEXT ·Sum64(SB), NOSPLIT|NOFRAME, $0-32
	// Load fixed primes.
	MOVQ ·primes+0(SB), prime1
	MOVQ ·primes+8(SB), prime2
	MOVQ ·primes+24(SB), prime4

	// Load slice.
	MOVQ b_base+0(FP), p
	MOVQ b_len+8(FP), n
	LEAQ (p)(n*1), end

	// The first loop limit will be len(b)-32.
	SUBQ $32, end

	// Check whether we have at least one block.
	CMPQ n, $32
	JLT  noBlocks

	// Set up initial state (v1, v2, v3, v4).
	MOVQ prime1, v1
	ADDQ prime2, v1
	MOVQ prime2, v2
	XORQ v3, v3
	XORQ v4, v4
	SUBQ prime1, v4

	blockLoop()

	MOVQ v1, h
	ROLQ $1, h
	MOVQ v2, x
	ROLQ $7, x
	ADDQ x, h
	MOVQ v3, x
	ROLQ $12, x
	ADDQ x, h
	MOVQ v4, x
	ROLQ $18, x
	ADDQ x, h

	mergeRound(h, v1)
	mergeRound(h, v2)
	mergeRound(h, v3)
	mergeRound(h, v4)

	JMP afterBlocks

noBlocks:
	MOVQ ·primes+32(SB), h

afterBlocks:
	ADDQ n, h

	ADDQ $24, end
	CMPQ p, end
	JG   try4

loop8:
	MOVQ  (p), x
	ADDQ  $8, p
	round0(x)
	XORQ  x, h
	ROLQ  $27, h
	IMULQ prime1, h
	ADDQ  prime4, h

	CMPQ p, end
	JLE  loop8

try4:
	ADDQ $4, end
	CMPQ p, end
	JG   try1

	MOVL  (p), x
	ADDQ  $4, p
	IMULQ prime1, x
	XORQ  x, h

	ROLQ  $23, h
	IMULQ prime2, h
	ADDQ  ·primes+16(SB), h

try1:
	ADDQ $4, end
	CMPQ p, end
	JGE  finalize

loop1:
	MOVBQZX (p), x
	ADDQ    $1, p
	IMULQ   ·primes+32(SB), x
	XORQ    x, h
	ROLQ    $11, h
	IMULQ   prime1, h

	CMPQ p, end
	JL   loop1

finalize:
	MOVQ  h, x
	SHRQ  $33, x
	XORQ  x, h
	IMULQ prime2, h
	MOVQ  h, x
	SHRQ  $29, x
	XORQ  x, h
	IMULQ ·primes+16(SB), h
	MOVQ  h, x
	SHRQ  $32, x
	XORQ  x, h

	MOVQ h, ret+24(FP)
	RET

// func writeBlocks(d *Digest, b []byte) int
TEXT ·writeBlocks(SB), NOSPLIT|NOFRAME, $0-40
	// Load fixed primes needed for round.
	MOVQ ·primes+0(SB), prime1
	MOVQ ·primes+8(SB), prime2

	// Load slice.
	MOVQ b_base+8(FP), p
	MOVQ b_len+16(FP), n
	LEAQ (p)(n*1), end
	SUBQ $32, end

	// Load vN from d.
	MOVQ s+0(FP), d
	MOVQ 0(d), v1
	MOVQ 8(d), v2
	MOVQ 16(d), v3
	MOVQ 24(d), v4

	// We don't need to check the loop condition here; this function is
	// always called with at least one block of data to process.
	blockLoop()

	// Copy vN back to d.
	MOVQ v1, 0(d)
	MOVQ v2, 8(d)
	MOVQ v3, 16(d)
	MOVQ v4, 24(d)

	// The number of bytes written is p minus the old base pointer.
	SUBQ b_base+8(FP), p
	MOVQ p, ret+32(FP)

	RET
   07070100000896000081A4000000000000000000000001645E367C00000D33000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_arm64.s  //go:build !appengine && gc && !purego && !noasm
// +build !appengine
// +build gc
// +build !purego
// +build !noasm

#include "textflag.h"

// Registers:
#define digest	R1
#define h	R2 // return value
#define p	R3 // input pointer
#define n	R4 // input length
#define nblocks	R5 // n / 32
#define prime1	R7
#define prime2	R8
#define prime3	R9
#define prime4	R10
#define prime5	R11
#define v1	R12
#define v2	R13
#define v3	R14
#define v4	R15
#define x1	R20
#define x2	R21
#define x3	R22
#define x4	R23

#define round(acc, x) \
	MADD prime2, acc, x, acc \
	ROR  $64-31, acc         \
	MUL  prime1, acc

// round0 performs the operation x = round(0, x).
#define round0(x) \
	MUL prime2, x \
	ROR $64-31, x \
	MUL prime1, x

#define mergeRound(acc, x) \
	round0(x)                     \
	EOR  x, acc                   \
	MADD acc, prime4, prime1, acc

// blockLoop processes as many 32-byte blocks as possible,
// updating v1, v2, v3, and v4. It assumes that n >= 32.
#define blockLoop() \
	LSR     $5, n, nblocks  \
	PCALIGN $16             \
	loop:                   \
	LDP.P   16(p), (x1, x2) \
	LDP.P   16(p), (x3, x4) \
	round(v1, x1)           \
	round(v2, x2)           \
	round(v3, x3)           \
	round(v4, x4)           \
	SUB     $1, nblocks     \
	CBNZ    nblocks, loop

// func Sum64(b []byte) uint64
TEXT ·Sum64(SB), NOSPLIT|NOFRAME, $0-32
	LDP b_base+0(FP), (p, n)

	LDP  ·primes+0(SB), (prime1, prime2)
	LDP  ·primes+16(SB), (prime3, prime4)
	MOVD ·primes+32(SB), prime5

	CMP  $32, n
	CSEL LT, prime5, ZR, h // if n < 32 { h = prime5 } else { h = 0 }
	BLT  afterLoop

	ADD  prime1, prime2, v1
	MOVD prime2, v2
	MOVD $0, v3
	NEG  prime1, v4

	blockLoop()

	ROR $64-1, v1, x1
	ROR $64-7, v2, x2
	ADD x1, x2
	ROR $64-12, v3, x3
	ROR $64-18, v4, x4
	ADD x3, x4
	ADD x2, x4, h

	mergeRound(h, v1)
	mergeRound(h, v2)
	mergeRound(h, v3)
	mergeRound(h, v4)

afterLoop:
	ADD n, h

	TBZ   $4, n, try8
	LDP.P 16(p), (x1, x2)

	round0(x1)

	// NOTE: here and below, sequencing the EOR after the ROR (using a
	// rotated register) is worth a small but measurable speedup for small
	// inputs.
	ROR  $64-27, h
	EOR  x1 @> 64-27, h, h
	MADD h, prime4, prime1, h

	round0(x2)
	ROR  $64-27, h
	EOR  x2 @> 64-27, h, h
	MADD h, prime4, prime1, h

try8:
	TBZ    $3, n, try4
	MOVD.P 8(p), x1

	round0(x1)
	ROR  $64-27, h
	EOR  x1 @> 64-27, h, h
	MADD h, prime4, prime1, h

try4:
	TBZ     $2, n, try2
	MOVWU.P 4(p), x2

	MUL  prime1, x2
	ROR  $64-23, h
	EOR  x2 @> 64-23, h, h
	MADD h, prime3, prime2, h

try2:
	TBZ     $1, n, try1
	MOVHU.P 2(p), x3
	AND     $255, x3, x1
	LSR     $8, x3, x2

	MUL prime5, x1
	ROR $64-11, h
	EOR x1 @> 64-11, h, h
	MUL prime1, h

	MUL prime5, x2
	ROR $64-11, h
	EOR x2 @> 64-11, h, h
	MUL prime1, h

try1:
	TBZ   $0, n, finalize
	MOVBU (p), x4

	MUL prime5, x4
	ROR $64-11, h
	EOR x4 @> 64-11, h, h
	MUL prime1, h

finalize:
	EOR h >> 33, h
	MUL prime2, h
	EOR h >> 29, h
	MUL prime3, h
	EOR h >> 32, h

	MOVD h, ret+24(FP)
	RET

// func writeBlocks(d *Digest, b []byte) int
TEXT ·writeBlocks(SB), NOSPLIT|NOFRAME, $0-40
	LDP ·primes+0(SB), (prime1, prime2)

	// Load state. Assume v[1-4] are stored contiguously.
	MOVD d+0(FP), digest
	LDP  0(digest), (v1, v2)
	LDP  16(digest), (v3, v4)

	LDP b_base+8(FP), (p, n)

	blockLoop()

	// Store updated state.
	STP (v1, v2), 0(digest)
	STP (v3, v4), 16(digest)

	BIC  $31, n
	MOVD n, ret+32(FP)
	RET
 07070100000897000081A4000000000000000000000001645E367C00000148000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_asm.go   //go:build (amd64 || arm64) && !appengine && gc && !purego && !noasm
// +build amd64 arm64
// +build !appengine
// +build gc
// +build !purego
// +build !noasm

package xxhash

// Sum64 computes the 64-bit xxHash digest of b.
//
//go:noescape
func Sum64(b []byte) uint64

//go:noescape
func writeBlocks(s *Digest, b []byte) int
07070100000898000081A4000000000000000000000001645E367C00000651000000000000000000000000000000000000005E00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_other.go //go:build (!amd64 && !arm64) || appengine || !gc || purego || noasm
// +build !amd64,!arm64 appengine !gc purego noasm

package xxhash

// Sum64 computes the 64-bit xxHash digest of b.
func Sum64(b []byte) uint64 {
	// A simpler version would be
	//   d := New()
	//   d.Write(b)
	//   return d.Sum64()
	// but this is faster, particularly for small inputs.

	n := len(b)
	var h uint64

	if n >= 32 {
		v1 := primes[0] + prime2
		v2 := prime2
		v3 := uint64(0)
		v4 := -primes[0]
		for len(b) >= 32 {
			v1 = round(v1, u64(b[0:8:len(b)]))
			v2 = round(v2, u64(b[8:16:len(b)]))
			v3 = round(v3, u64(b[16:24:len(b)]))
			v4 = round(v4, u64(b[24:32:len(b)]))
			b = b[32:len(b):len(b)]
		}
		h = rol1(v1) + rol7(v2) + rol12(v3) + rol18(v4)
		h = mergeRound(h, v1)
		h = mergeRound(h, v2)
		h = mergeRound(h, v3)
		h = mergeRound(h, v4)
	} else {
		h = prime5
	}

	h += uint64(n)

	for ; len(b) >= 8; b = b[8:] {
		k1 := round(0, u64(b[:8]))
		h ^= k1
		h = rol27(h)*prime1 + prime4
	}
	if len(b) >= 4 {
		h ^= uint64(u32(b[:4])) * prime1
		h = rol23(h)*prime2 + prime3
		b = b[4:]
	}
	for ; len(b) > 0; b = b[1:] {
		h ^= uint64(b[0]) * prime5
		h = rol11(h) * prime1
	}

	h ^= h >> 33
	h *= prime2
	h ^= h >> 29
	h *= prime3
	h ^= h >> 32

	return h
}

func writeBlocks(d *Digest, b []byte) int {
	v1, v2, v3, v4 := d.v1, d.v2, d.v3, d.v4
	n := len(b)
	for len(b) >= 32 {
		v1 = round(v1, u64(b[0:8:len(b)]))
		v2 = round(v2, u64(b[8:16:len(b)]))
		v3 = round(v3, u64(b[16:24:len(b)]))
		v4 = round(v4, u64(b[24:32:len(b)]))
		b = b[32:len(b):len(b)]
	}
	d.v1, d.v2, d.v3, d.v4 = v1, v2, v3, v4
	return n - len(b)
}
   07070100000899000081A4000000000000000000000001645E367C00000123000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_safe.go  package xxhash

// Sum64String computes the 64-bit xxHash digest of s.
func Sum64String(s string) uint64 {
	return Sum64([]byte(s))
}

// WriteString adds more data to d. It always returns len(s), nil.
func (d *Digest) WriteString(s string) (n int, err error) {
	return d.Write([]byte(s))
}
 0707010000089A000081A4000000000000000000000001645E367C00003521000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/seqdec.go   // Copyright 2019+ Klaus Post. All rights reserved.
// License information can be found in the LICENSE file.
// Based on work by Yann Collet, released under BSD License.

package zstd

import (
	"errors"
	"fmt"
	"io"
)

type seq struct {
	litLen   uint32
	matchLen uint32
	offset   uint32

	// Codes are stored here for the encoder
	// so they only have to be looked up once.
	llCode, mlCode, ofCode uint8
}

type seqVals struct {
	ll, ml, mo int
}

func (s seq) String() string {
	if s.offset <= 3 {
		if s.offset == 0 {
			return fmt.Sprint("litLen:", s.litLen, ", matchLen:", s.matchLen+zstdMinMatch, ", offset: INVALID (0)")
		}
		return fmt.Sprint("litLen:", s.litLen, ", matchLen:", s.matchLen+zstdMinMatch, ", offset:", s.offset, " (repeat)")
	}
	return fmt.Sprint("litLen:", s.litLen, ", matchLen:", s.matchLen+zstdMinMatch, ", offset:", s.offset-3, " (new)")
}

type seqCompMode uint8

const (
	compModePredefined seqCompMode = iota
	compModeRLE
	compModeFSE
	compModeRepeat
)

type sequenceDec struct {
	// decoder keeps track of the current state and updates it from the bitstream.
	fse    *fseDecoder
	state  fseState
	repeat bool
}

// init the state of the decoder with input from stream.
func (s *sequenceDec) init(br *bitReader) error {
	if s.fse == nil {
		return errors.New("sequence decoder not defined")
	}
	s.state.init(br, s.fse.actualTableLog, s.fse.dt[:1<<s.fse.actualTableLog])
	return nil
}

// sequenceDecs contains all 3 sequence decoders and their state.
type sequenceDecs struct {
	litLengths   sequenceDec
	offsets      sequenceDec
	matchLengths sequenceDec
	prevOffset   [3]int
	dict         []byte
	literals     []byte
	out          []byte
	nSeqs        int
	br           *bitReader
	seqSize      int
	windowSize   int
	maxBits      uint8
	maxSyncLen   uint64
}

// initialize all 3 decoders from the stream input.
func (s *sequenceDecs) initialize(br *bitReader, hist *history, out []byte) error {
	if err := s.litLengths.init(br); err != nil {
		return errors.New("litLengths:" + err.Error())
	}
	if err := s.offsets.init(br); err != nil {
		return errors.New("offsets:" + err.Error())
	}
	if err := s.matchLengths.init(br); err != nil {
		return errors.New("matchLengths:" + err.Error())
	}
	s.br = br
	s.prevOffset = hist.recentOffsets
	s.maxBits = s.litLengths.fse.maxBits + s.offsets.fse.maxBits + s.matchLengths.fse.maxBits
	s.windowSize = hist.windowSize
	s.out = out
	s.dict = nil
	if hist.dict != nil {
		s.dict = hist.dict.content
	}
	return nil
}

func (s *sequenceDecs) freeDecoders() {
	if f := s.litLengths.fse; f != nil && !f.preDefined {
		fseDecoderPool.Put(f)
		s.litLengths.fse = nil
	}
	if f := s.offsets.fse; f != nil && !f.preDefined {
		fseDecoderPool.Put(f)
		s.offsets.fse = nil
	}
	if f := s.matchLengths.fse; f != nil && !f.preDefined {
		fseDecoderPool.Put(f)
		s.matchLengths.fse = nil
	}
}

// execute will execute the decoded sequence with the provided history.
// The sequence must be evaluated before being sent.
func (s *sequenceDecs) execute(seqs []seqVals, hist []byte) error {
	if len(s.dict) == 0 {
		return s.executeSimple(seqs, hist)
	}

	// Ensure we have enough output size...
	if len(s.out)+s.seqSize > cap(s.out) {
		addBytes := s.seqSize + len(s.out)
		s.out = append(s.out, make([]byte, addBytes)...)
		s.out = s.out[:len(s.out)-addBytes]
	}

	if debugDecoder {
		printf("Execute %d seqs with hist %d, dict %d, literals: %d into %d bytes\n", len(seqs), len(hist), len(s.dict), len(s.literals), s.seqSize)
	}

	var t = len(s.out)
	out := s.out[:t+s.seqSize]

	for _, seq := range seqs {
		// Add literals
		copy(out[t:], s.literals[:seq.ll])
		t += seq.ll
		s.literals = s.literals[seq.ll:]

		// Copy from dictionary...
		if seq.mo > t+len(hist) || seq.mo > s.windowSize {
			if len(s.dict) == 0 {
				return fmt.Errorf("match offset (%d) bigger than current history (%d)", seq.mo, t+len(hist))
			}

			// we may be in dictionary.
			dictO := len(s.dict) - (seq.mo - (t + len(hist)))
			if dictO < 0 || dictO >= len(s.dict) {
				return fmt.Errorf("match offset (%d) bigger than current history+dict (%d)", seq.mo, t+len(hist)+len(s.dict))
			}
			end := dictO + seq.ml
			if end > len(s.dict) {
				n := len(s.dict) - dictO
				copy(out[t:], s.dict[dictO:])
				t += n
				seq.ml -= n
			} else {
				copy(out[t:], s.dict[dictO:end])
				t += end - dictO
				continue
			}
		}

		// Copy from history.
		if v := seq.mo - t; v > 0 {
			// v is the start position in history from end.
			start := len(hist) - v
			if seq.ml > v {
				// Some goes into current block.
				// Copy remainder of history
				copy(out[t:], hist[start:])
				t += v
				seq.ml -= v
			} else {
				copy(out[t:], hist[start:start+seq.ml])
				t += seq.ml
				continue
			}
		}
		// We must be in current buffer now
		if seq.ml > 0 {
			start := t - seq.mo
			if seq.ml <= t-start {
				// No overlap
				copy(out[t:], out[start:start+seq.ml])
				t += seq.ml
				continue
			} else {
				// Overlapping copy
				// Extend destination slice and copy one byte at the time.
				src := out[start : start+seq.ml]
				dst := out[t:]
				dst = dst[:len(src)]
				t += len(src)
				// Destination is the space we just added.
				for i := range src {
					dst[i] = src[i]
				}
			}
		}
	}

	// Add final literals
	copy(out[t:], s.literals)
	if debugDecoder {
		t += len(s.literals)
		if t != len(out) {
			panic(fmt.Errorf("length mismatch, want %d, got %d, ss: %d", len(out), t, s.seqSize))
		}
	}
	s.out = out

	return nil
}

// decode sequences from the stream with the provided history.
func (s *sequenceDecs) decodeSync(hist []byte) error {
	supported, err := s.decodeSyncSimple(hist)
	if supported {
		return err
	}

	br := s.br
	seqs := s.nSeqs
	startSize := len(s.out)
	// Grab full sizes tables, to avoid bounds checks.
	llTable, mlTable, ofTable := s.litLengths.fse.dt[:maxTablesize], s.matchLengths.fse.dt[:maxTablesize], s.offsets.fse.dt[:maxTablesize]
	llState, mlState, ofState := s.litLengths.state.state, s.matchLengths.state.state, s.offsets.state.state
	out := s.out
	maxBlockSize := maxCompressedBlockSize
	if s.windowSize < maxBlockSize {
		maxBlockSize = s.windowSize
	}

	if debugDecoder {
		println("decodeSync: decoding", seqs, "sequences", br.remain(), "bits remain on stream")
	}
	for i := seqs - 1; i >= 0; i-- {
		if br.overread() {
			printf("reading sequence %d, exceeded available data. Overread by %d\n", seqs-i, -br.remain())
			return io.ErrUnexpectedEOF
		}
		var ll, mo, ml int
		if br.off > 4+((maxOffsetBits+16+16)>>3) {
			// inlined function:
			// ll, mo, ml = s.nextFast(br, llState, mlState, ofState)

			// Final will not read from stream.
			var llB, mlB, moB uint8
			ll, llB = llState.final()
			ml, mlB = mlState.final()
			mo, moB = ofState.final()

			// extra bits are stored in reverse order.
			br.fillFast()
			mo += br.getBits(moB)
			if s.maxBits > 32 {
				br.fillFast()
			}
			ml += br.getBits(mlB)
			ll += br.getBits(llB)

			if moB > 1 {
				s.prevOffset[2] = s.prevOffset[1]
				s.prevOffset[1] = s.prevOffset[0]
				s.prevOffset[0] = mo
			} else {
				// mo = s.adjustOffset(mo, ll, moB)
				// Inlined for rather big speedup
				if ll == 0 {
					// There is an exception though, when current sequence's literals_length = 0.
					// In this case, repeated offsets are shifted by one, so an offset_value of 1 means Repeated_Offset2,
					// an offset_value of 2 means Repeated_Offset3, and an offset_value of 3 means Repeated_Offset1 - 1_byte.
					mo++
				}

				if mo == 0 {
					mo = s.prevOffset[0]
				} else {
					var temp int
					if mo == 3 {
						temp = s.prevOffset[0] - 1
					} else {
						temp = s.prevOffset[mo]
					}

					if temp == 0 {
						// 0 is not valid; input is corrupted; force offset to 1
						println("WARNING: temp was 0")
						temp = 1
					}

					if mo != 1 {
						s.prevOffset[2] = s.prevOffset[1]
					}
					s.prevOffset[1] = s.prevOffset[0]
					s.prevOffset[0] = temp
					mo = temp
				}
			}
			br.fillFast()
		} else {
			ll, mo, ml = s.next(br, llState, mlState, ofState)
			br.fill()
		}

		if debugSequences {
			println("Seq", seqs-i-1, "Litlen:", ll, "mo:", mo, "(abs) ml:", ml)
		}

		if ll > len(s.literals) {
			return fmt.Errorf("unexpected literal count, want %d bytes, but only %d is available", ll, len(s.literals))
		}
		size := ll + ml + len(out)
		if size-startSize > maxBlockSize {
			return fmt.Errorf("output bigger than max block size (%d)", maxBlockSize)
		}
		if size > cap(out) {
			// Not enough size, which can happen under high volume block streaming conditions
			// but could be if destination slice is too small for sync operations.
			// over-allocating here can create a large amount of GC pressure so we try to keep
			// it as contained as possible
			used := len(out) - startSize
			addBytes := 256 + ll + ml + used>>2
			// Clamp to max block size.
			if used+addBytes > maxBlockSize {
				addBytes = maxBlockSize - used
			}
			out = append(out, make([]byte, addBytes)...)
			out = out[:len(out)-addBytes]
		}
		if ml > maxMatchLen {
			return fmt.Errorf("match len (%d) bigger than max allowed length", ml)
		}

		// Add literals
		out = append(out, s.literals[:ll]...)
		s.literals = s.literals[ll:]

		if mo == 0 && ml > 0 {
			return fmt.Errorf("zero matchoff and matchlen (%d) > 0", ml)
		}

		if mo > len(out)+len(hist) || mo > s.windowSize {
			if len(s.dict) == 0 {
				return fmt.Errorf("match offset (%d) bigger than current history (%d)", mo, len(out)+len(hist)-startSize)
			}

			// we may be in dictionary.
			dictO := len(s.dict) - (mo - (len(out) + len(hist)))
			if dictO < 0 || dictO >= len(s.dict) {
				return fmt.Errorf("match offset (%d) bigger than current history (%d)", mo, len(out)+len(hist)-startSize)
			}
			end := dictO + ml
			if end > len(s.dict) {
				out = append(out, s.dict[dictO:]...)
				ml -= len(s.dict) - dictO
			} else {
				out = append(out, s.dict[dictO:end]...)
				mo = 0
				ml = 0
			}
		}

		// Copy from history.
		// TODO: Blocks without history could be made to ignore this completely.
		if v := mo - len(out); v > 0 {
			// v is the start position in history from end.
			start := len(hist) - v
			if ml > v {
				// Some goes into current block.
				// Copy remainder of history
				out = append(out, hist[start:]...)
				ml -= v
			} else {
				out = append(out, hist[start:start+ml]...)
				ml = 0
			}
		}
		// We must be in current buffer now
		if ml > 0 {
			start := len(out) - mo
			if ml <= len(out)-start {
				// No overlap
				out = append(out, out[start:start+ml]...)
			} else {
				// Overlapping copy
				// Extend destination slice and copy one byte at the time.
				out = out[:len(out)+ml]
				src := out[start : start+ml]
				// Destination is the space we just added.
				dst := out[len(out)-ml:]
				dst = dst[:len(src)]
				for i := range src {
					dst[i] = src[i]
				}
			}
		}
		if i == 0 {
			// This is the last sequence, so we shouldn't update state.
			break
		}

		// Manually inlined, ~ 5-20% faster
		// Update all 3 states at once. Approx 20% faster.
		nBits := llState.nbBits() + mlState.nbBits() + ofState.nbBits()
		if nBits == 0 {
			llState = llTable[llState.newState()&maxTableMask]
			mlState = mlTable[mlState.newState()&maxTableMask]
			ofState = ofTable[ofState.newState()&maxTableMask]
		} else {
			bits := br.get32BitsFast(nBits)

			lowBits := uint16(bits >> ((ofState.nbBits() + mlState.nbBits()) & 31))
			llState = llTable[(llState.newState()+lowBits)&maxTableMask]

			lowBits = uint16(bits >> (ofState.nbBits() & 31))
			lowBits &= bitMask[mlState.nbBits()&15]
			mlState = mlTable[(mlState.newState()+lowBits)&maxTableMask]

			lowBits = uint16(bits) & bitMask[ofState.nbBits()&15]
			ofState = ofTable[(ofState.newState()+lowBits)&maxTableMask]
		}
	}

	if size := len(s.literals) + len(out) - startSize; size > maxBlockSize {
		return fmt.Errorf("output bigger than max block size (%d)", maxBlockSize)
	}

	// Add final literals
	s.out = append(out, s.literals...)
	return br.close()
}

var bitMask [16]uint16

func init() {
	for i := range bitMask[:] {
		bitMask[i] = uint16((1 << uint(i)) - 1)
	}
}

func (s *sequenceDecs) next(br *bitReader, llState, mlState, ofState decSymbol) (ll, mo, ml int) {
	// Final will not read from stream.
	ll, llB := llState.final()
	ml, mlB := mlState.final()
	mo, moB := ofState.final()

	// extra bits are stored in reverse order.
	br.fill()
	if s.maxBits <= 32 {
		mo += br.getBits(moB)
		ml += br.getBits(mlB)
		ll += br.getBits(llB)
	} else {
		mo += br.getBits(moB)
		br.fill()
		// matchlength+literal length, max 32 bits
		ml += br.getBits(mlB)
		ll += br.getBits(llB)

	}
	mo = s.adjustOffset(mo, ll, moB)
	return
}

func (s *sequenceDecs) adjustOffset(offset, litLen int, offsetB uint8) int {
	if offsetB > 1 {
		s.prevOffset[2] = s.prevOffset[1]
		s.prevOffset[1] = s.prevOffset[0]
		s.prevOffset[0] = offset
		return offset
	}

	if litLen == 0 {
		// There is an exception though, when current sequence's literals_length = 0.
		// In this case, repeated offsets are shifted by one, so an offset_value of 1 means Repeated_Offset2,
		// an offset_value of 2 means Repeated_Offset3, and an offset_value of 3 means Repeated_Offset1 - 1_byte.
		offset++
	}

	if offset == 0 {
		return s.prevOffset[0]
	}
	var temp int
	if offset == 3 {
		temp = s.prevOffset[0] - 1
	} else {
		temp = s.prevOffset[offset]
	}

	if temp == 0 {
		// 0 is not valid; input is corrupted; force offset to 1
		println("temp was 0")
		temp = 1
	}

	if offset != 1 {
		s.prevOffset[2] = s.prevOffset[1]
	}
	s.prevOffset[1] = s.prevOffset[0]
	s.prevOffset[0] = temp
	return temp
}
   0707010000089B000081A4000000000000000000000001645E367C00002C81000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.go //go:build amd64 && !appengine && !noasm && gc
// +build amd64,!appengine,!noasm,gc

package zstd

import (
	"fmt"
	"io"

	"github.com/klauspost/compress/internal/cpuinfo"
)

type decodeSyncAsmContext struct {
	llTable     []decSymbol
	mlTable     []decSymbol
	ofTable     []decSymbol
	llState     uint64
	mlState     uint64
	ofState     uint64
	iteration   int
	litRemain   int
	out         []byte
	outPosition int
	literals    []byte
	litPosition int
	history     []byte
	windowSize  int
	ll          int // set on error (not for all errors, please refer to _generate/gen.go)
	ml          int // set on error (not for all errors, please refer to _generate/gen.go)
	mo          int // set on error (not for all errors, please refer to _generate/gen.go)
}

// sequenceDecs_decodeSync_amd64 implements the main loop of sequenceDecs.decodeSync in x86 asm.
//
// Please refer to seqdec_generic.go for the reference implementation.
//
//go:noescape
func sequenceDecs_decodeSync_amd64(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int

// sequenceDecs_decodeSync_bmi2 implements the main loop of sequenceDecs.decodeSync in x86 asm with BMI2 extensions.
//
//go:noescape
func sequenceDecs_decodeSync_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int

// sequenceDecs_decodeSync_safe_amd64 does the same as above, but does not write more than output buffer.
//
//go:noescape
func sequenceDecs_decodeSync_safe_amd64(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int

// sequenceDecs_decodeSync_safe_bmi2 does the same as above, but does not write more than output buffer.
//
//go:noescape
func sequenceDecs_decodeSync_safe_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int

// decode sequences from the stream with the provided history but without a dictionary.
func (s *sequenceDecs) decodeSyncSimple(hist []byte) (bool, error) {
	if len(s.dict) > 0 {
		return false, nil
	}
	if s.maxSyncLen == 0 && cap(s.out)-len(s.out) < maxCompressedBlockSize {
		return false, nil
	}

	// FIXME: Using unsafe memory copies leads to rare, random crashes
	// with fuzz testing. It is therefore disabled for now.
	const useSafe = true
	/*
		useSafe := false
		if s.maxSyncLen == 0 && cap(s.out)-len(s.out) < maxCompressedBlockSizeAlloc {
			useSafe = true
		}
		if s.maxSyncLen > 0 && cap(s.out)-len(s.out)-compressedBlockOverAlloc < int(s.maxSyncLen) {
			useSafe = true
		}
		if cap(s.literals) < len(s.literals)+compressedBlockOverAlloc {
			useSafe = true
		}
	*/

	br := s.br

	maxBlockSize := maxCompressedBlockSize
	if s.windowSize < maxBlockSize {
		maxBlockSize = s.windowSize
	}

	ctx := decodeSyncAsmContext{
		llTable:     s.litLengths.fse.dt[:maxTablesize],
		mlTable:     s.matchLengths.fse.dt[:maxTablesize],
		ofTable:     s.offsets.fse.dt[:maxTablesize],
		llState:     uint64(s.litLengths.state.state),
		mlState:     uint64(s.matchLengths.state.state),
		ofState:     uint64(s.offsets.state.state),
		iteration:   s.nSeqs - 1,
		litRemain:   len(s.literals),
		out:         s.out,
		outPosition: len(s.out),
		literals:    s.literals,
		windowSize:  s.windowSize,
		history:     hist,
	}

	s.seqSize = 0
	startSize := len(s.out)

	var errCode int
	if cpuinfo.HasBMI2() {
		if useSafe {
			errCode = sequenceDecs_decodeSync_safe_bmi2(s, br, &ctx)
		} else {
			errCode = sequenceDecs_decodeSync_bmi2(s, br, &ctx)
		}
	} else {
		if useSafe {
			errCode = sequenceDecs_decodeSync_safe_amd64(s, br, &ctx)
		} else {
			errCode = sequenceDecs_decodeSync_amd64(s, br, &ctx)
		}
	}
	switch errCode {
	case noError:
		break

	case errorMatchLenOfsMismatch:
		return true, fmt.Errorf("zero matchoff and matchlen (%d) > 0", ctx.ml)

	case errorMatchLenTooBig:
		return true, fmt.Errorf("match len (%d) bigger than max allowed length", ctx.ml)

	case errorMatchOffTooBig:
		return true, fmt.Errorf("match offset (%d) bigger than current history (%d)",
			ctx.mo, ctx.outPosition+len(hist)-startSize)

	case errorNotEnoughLiterals:
		return true, fmt.Errorf("unexpected literal count, want %d bytes, but only %d is available",
			ctx.ll, ctx.litRemain+ctx.ll)

	case errorOverread:
		return true, io.ErrUnexpectedEOF

	case errorNotEnoughSpace:
		size := ctx.outPosition + ctx.ll + ctx.ml
		if debugDecoder {
			println("msl:", s.maxSyncLen, "cap", cap(s.out), "bef:", startSize, "sz:", size-startSize, "mbs:", maxBlockSize, "outsz:", cap(s.out)-startSize)
		}
		return true, fmt.Errorf("output bigger than max block size (%d)", maxBlockSize)

	default:
		return true, fmt.Errorf("sequenceDecs_decode returned erronous code %d", errCode)
	}

	s.seqSize += ctx.litRemain
	if s.seqSize > maxBlockSize {
		return true, fmt.Errorf("output bigger than max block size (%d)", maxBlockSize)
	}
	err := br.close()
	if err != nil {
		printf("Closing sequences: %v, %+v\n", err, *br)
		return true, err
	}

	s.literals = s.literals[ctx.litPosition:]
	t := ctx.outPosition
	s.out = s.out[:t]

	// Add final literals
	s.out = append(s.out, s.literals...)
	if debugDecoder {
		t += len(s.literals)
		if t != len(s.out) {
			panic(fmt.Errorf("length mismatch, want %d, got %d", len(s.out), t))
		}
	}

	return true, nil
}

// --------------------------------------------------------------------------------

type decodeAsmContext struct {
	llTable   []decSymbol
	mlTable   []decSymbol
	ofTable   []decSymbol
	llState   uint64
	mlState   uint64
	ofState   uint64
	iteration int
	seqs      []seqVals
	litRemain int
}

const noError = 0

// error reported when mo == 0 && ml > 0
const errorMatchLenOfsMismatch = 1

// error reported when ml > maxMatchLen
const errorMatchLenTooBig = 2

// error reported when mo > available history or mo > s.windowSize
const errorMatchOffTooBig = 3

// error reported when the sum of literal lengths exeeceds the literal buffer size
const errorNotEnoughLiterals = 4

// error reported when capacity of `out` is too small
const errorNotEnoughSpace = 5

// error reported when bits are overread.
const errorOverread = 6

// sequenceDecs_decode implements the main loop of sequenceDecs in x86 asm.
//
// Please refer to seqdec_generic.go for the reference implementation.
//
//go:noescape
func sequenceDecs_decode_amd64(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int

// sequenceDecs_decode implements the main loop of sequenceDecs in x86 asm.
//
// Please refer to seqdec_generic.go for the reference implementation.
//
//go:noescape
func sequenceDecs_decode_56_amd64(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int

// sequenceDecs_decode implements the main loop of sequenceDecs in x86 asm with BMI2 extensions.
//
//go:noescape
func sequenceDecs_decode_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int

// sequenceDecs_decode implements the main loop of sequenceDecs in x86 asm with BMI2 extensions.
//
//go:noescape
func sequenceDecs_decode_56_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int

// decode sequences from the stream without the provided history.
func (s *sequenceDecs) decode(seqs []seqVals) error {
	br := s.br

	maxBlockSize := maxCompressedBlockSize
	if s.windowSize < maxBlockSize {
		maxBlockSize = s.windowSize
	}

	ctx := decodeAsmContext{
		llTable:   s.litLengths.fse.dt[:maxTablesize],
		mlTable:   s.matchLengths.fse.dt[:maxTablesize],
		ofTable:   s.offsets.fse.dt[:maxTablesize],
		llState:   uint64(s.litLengths.state.state),
		mlState:   uint64(s.matchLengths.state.state),
		ofState:   uint64(s.offsets.state.state),
		seqs:      seqs,
		iteration: len(seqs) - 1,
		litRemain: len(s.literals),
	}

	if debugDecoder {
		println("decode: decoding", len(seqs), "sequences", br.remain(), "bits remain on stream")
	}

	s.seqSize = 0
	lte56bits := s.maxBits+s.offsets.fse.actualTableLog+s.matchLengths.fse.actualTableLog+s.litLengths.fse.actualTableLog <= 56
	var errCode int
	if cpuinfo.HasBMI2() {
		if lte56bits {
			errCode = sequenceDecs_decode_56_bmi2(s, br, &ctx)
		} else {
			errCode = sequenceDecs_decode_bmi2(s, br, &ctx)
		}
	} else {
		if lte56bits {
			errCode = sequenceDecs_decode_56_amd64(s, br, &ctx)
		} else {
			errCode = sequenceDecs_decode_amd64(s, br, &ctx)
		}
	}
	if errCode != 0 {
		i := len(seqs) - ctx.iteration - 1
		switch errCode {
		case errorMatchLenOfsMismatch:
			ml := ctx.seqs[i].ml
			return fmt.Errorf("zero matchoff and matchlen (%d) > 0", ml)

		case errorMatchLenTooBig:
			ml := ctx.seqs[i].ml
			return fmt.Errorf("match len (%d) bigger than max allowed length", ml)

		case errorNotEnoughLiterals:
			ll := ctx.seqs[i].ll
			return fmt.Errorf("unexpected literal count, want %d bytes, but only %d is available", ll, ctx.litRemain+ll)
		case errorOverread:
			return io.ErrUnexpectedEOF
		}

		return fmt.Errorf("sequenceDecs_decode_amd64 returned erronous code %d", errCode)
	}

	if ctx.litRemain < 0 {
		return fmt.Errorf("literal count is too big: total available %d, total requested %d",
			len(s.literals), len(s.literals)-ctx.litRemain)
	}

	s.seqSize += ctx.litRemain
	if s.seqSize > maxBlockSize {
		return fmt.Errorf("output bigger than max block size (%d)", maxBlockSize)
	}
	if debugDecoder {
		println("decode: ", br.remain(), "bits remain on stream. code:", errCode)
	}
	err := br.close()
	if err != nil {
		printf("Closing sequences: %v, %+v\n", err, *br)
	}
	return err
}

// --------------------------------------------------------------------------------

type executeAsmContext struct {
	seqs        []seqVals
	seqIndex    int
	out         []byte
	history     []byte
	literals    []byte
	outPosition int
	litPosition int
	windowSize  int
}

// sequenceDecs_executeSimple_amd64 implements the main loop of sequenceDecs.executeSimple in x86 asm.
//
// Returns false if a match offset is too big.
//
// Please refer to seqdec_generic.go for the reference implementation.
//
//go:noescape
func sequenceDecs_executeSimple_amd64(ctx *executeAsmContext) bool

// Same as above, but with safe memcopies
//
//go:noescape
func sequenceDecs_executeSimple_safe_amd64(ctx *executeAsmContext) bool

// executeSimple handles cases when dictionary is not used.
func (s *sequenceDecs) executeSimple(seqs []seqVals, hist []byte) error {
	// Ensure we have enough output size...
	if len(s.out)+s.seqSize+compressedBlockOverAlloc > cap(s.out) {
		addBytes := s.seqSize + len(s.out) + compressedBlockOverAlloc
		s.out = append(s.out, make([]byte, addBytes)...)
		s.out = s.out[:len(s.out)-addBytes]
	}

	if debugDecoder {
		printf("Execute %d seqs with literals: %d into %d bytes\n", len(seqs), len(s.literals), s.seqSize)
	}

	var t = len(s.out)
	out := s.out[:t+s.seqSize]

	ctx := executeAsmContext{
		seqs:        seqs,
		seqIndex:    0,
		out:         out,
		history:     hist,
		outPosition: t,
		litPosition: 0,
		literals:    s.literals,
		windowSize:  s.windowSize,
	}
	var ok bool
	if cap(s.literals) < len(s.literals)+compressedBlockOverAlloc {
		ok = sequenceDecs_executeSimple_safe_amd64(&ctx)
	} else {
		ok = sequenceDecs_executeSimple_amd64(&ctx)
	}
	if !ok {
		return fmt.Errorf("match offset (%d) bigger than current history (%d)",
			seqs[ctx.seqIndex].mo, ctx.outPosition+len(hist))
	}
	s.literals = s.literals[ctx.litPosition:]
	t = ctx.outPosition

	// Add final literals
	copy(out[t:], s.literals)
	if debugDecoder {
		t += len(s.literals)
		if t != len(out) {
			panic(fmt.Errorf("length mismatch, want %d, got %d, ss: %d", len(out), t, s.seqSize))
		}
	}
	s.out = out

	return nil
}
   0707010000089C000081A4000000000000000000000001645E367C000148A4000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s  // Code generated by command: go run gen.go -out ../seqdec_amd64.s -pkg=zstd. DO NOT EDIT.

//go:build !appengine && !noasm && gc && !noasm

// func sequenceDecs_decode_amd64(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int
// Requires: CMOV
TEXT ·sequenceDecs_decode_amd64(SB), $8-32
	MOVQ    br+8(FP), AX
	MOVQ    32(AX), DX
	MOVBQZX 40(AX), BX
	MOVQ    24(AX), SI
	MOVQ    (AX), AX
	ADDQ    SI, AX
	MOVQ    AX, (SP)
	MOVQ    ctx+16(FP), AX
	MOVQ    72(AX), DI
	MOVQ    80(AX), R8
	MOVQ    88(AX), R9
	MOVQ    104(AX), R10
	MOVQ    s+0(FP), AX
	MOVQ    144(AX), R11
	MOVQ    152(AX), R12
	MOVQ    160(AX), R13

sequenceDecs_decode_amd64_main_loop:
	MOVQ (SP), R14

	// Fill bitreader to have enough for the offset and match length.
	CMPQ SI, $0x08
	JL   sequenceDecs_decode_amd64_fill_byte_by_byte
	MOVQ BX, AX
	SHRQ $0x03, AX
	SUBQ AX, R14
	MOVQ (R14), DX
	SUBQ AX, SI
	ANDQ $0x07, BX
	JMP  sequenceDecs_decode_amd64_fill_end

sequenceDecs_decode_amd64_fill_byte_by_byte:
	CMPQ    SI, $0x00
	JLE     sequenceDecs_decode_amd64_fill_check_overread
	CMPQ    BX, $0x07
	JLE     sequenceDecs_decode_amd64_fill_end
	SHLQ    $0x08, DX
	SUBQ    $0x01, R14
	SUBQ    $0x01, SI
	SUBQ    $0x08, BX
	MOVBQZX (R14), AX
	ORQ     AX, DX
	JMP     sequenceDecs_decode_amd64_fill_byte_by_byte

sequenceDecs_decode_amd64_fill_check_overread:
	CMPQ BX, $0x40
	JA   error_overread

sequenceDecs_decode_amd64_fill_end:
	// Update offset
	MOVQ  R9, AX
	MOVQ  BX, CX
	MOVQ  DX, R15
	SHLQ  CL, R15
	MOVB  AH, CL
	SHRQ  $0x20, AX
	TESTQ CX, CX
	JZ    sequenceDecs_decode_amd64_of_update_zero
	ADDQ  CX, BX
	CMPQ  BX, $0x40
	JA    sequenceDecs_decode_amd64_of_update_zero
	CMPQ  CX, $0x40
	JAE   sequenceDecs_decode_amd64_of_update_zero
	NEGQ  CX
	SHRQ  CL, R15
	ADDQ  R15, AX

sequenceDecs_decode_amd64_of_update_zero:
	MOVQ AX, 16(R10)

	// Update match length
	MOVQ  R8, AX
	MOVQ  BX, CX
	MOVQ  DX, R15
	SHLQ  CL, R15
	MOVB  AH, CL
	SHRQ  $0x20, AX
	TESTQ CX, CX
	JZ    sequenceDecs_decode_amd64_ml_update_zero
	ADDQ  CX, BX
	CMPQ  BX, $0x40
	JA    sequenceDecs_decode_amd64_ml_update_zero
	CMPQ  CX, $0x40
	JAE   sequenceDecs_decode_amd64_ml_update_zero
	NEGQ  CX
	SHRQ  CL, R15
	ADDQ  R15, AX

sequenceDecs_decode_amd64_ml_update_zero:
	MOVQ AX, 8(R10)

	// Fill bitreader to have enough for the remaining
	CMPQ SI, $0x08
	JL   sequenceDecs_decode_amd64_fill_2_byte_by_byte
	MOVQ BX, AX
	SHRQ $0x03, AX
	SUBQ AX, R14
	MOVQ (R14), DX
	SUBQ AX, SI
	ANDQ $0x07, BX
	JMP  sequenceDecs_decode_amd64_fill_2_end

sequenceDecs_decode_amd64_fill_2_byte_by_byte:
	CMPQ    SI, $0x00
	JLE     sequenceDecs_decode_amd64_fill_2_check_overread
	CMPQ    BX, $0x07
	JLE     sequenceDecs_decode_amd64_fill_2_end
	SHLQ    $0x08, DX
	SUBQ    $0x01, R14
	SUBQ    $0x01, SI
	SUBQ    $0x08, BX
	MOVBQZX (R14), AX
	ORQ     AX, DX
	JMP     sequenceDecs_decode_amd64_fill_2_byte_by_byte

sequenceDecs_decode_amd64_fill_2_check_overread:
	CMPQ BX, $0x40
	JA   error_overread

sequenceDecs_decode_amd64_fill_2_end:
	// Update literal length
	MOVQ  DI, AX
	MOVQ  BX, CX
	MOVQ  DX, R15
	SHLQ  CL, R15
	MOVB  AH, CL
	SHRQ  $0x20, AX
	TESTQ CX, CX
	JZ    sequenceDecs_decode_amd64_ll_update_zero
	ADDQ  CX, BX
	CMPQ  BX, $0x40
	JA    sequenceDecs_decode_amd64_ll_update_zero
	CMPQ  CX, $0x40
	JAE   sequenceDecs_decode_amd64_ll_update_zero
	NEGQ  CX
	SHRQ  CL, R15
	ADDQ  R15, AX

sequenceDecs_decode_amd64_ll_update_zero:
	MOVQ AX, (R10)

	// Fill bitreader for state updates
	MOVQ    R14, (SP)
	MOVQ    R9, AX
	SHRQ    $0x08, AX
	MOVBQZX AL, AX
	MOVQ    ctx+16(FP), CX
	CMPQ    96(CX), $0x00
	JZ      sequenceDecs_decode_amd64_skip_update

	// Update Literal Length State
	MOVBQZX DI, R14
	SHRQ    $0x10, DI
	MOVWQZX DI, DI
	LEAQ    (BX)(R14*1), CX
	MOVQ    DX, R15
	MOVQ    CX, BX
	ROLQ    CL, R15
	MOVL    $0x00000001, BP
	MOVB    R14, CL
	SHLL    CL, BP
	DECL    BP
	ANDQ    BP, R15
	ADDQ    R15, DI

	// Load ctx.llTable
	MOVQ ctx+16(FP), CX
	MOVQ (CX), CX
	MOVQ (CX)(DI*8), DI

	// Update Match Length State
	MOVBQZX R8, R14
	SHRQ    $0x10, R8
	MOVWQZX R8, R8
	LEAQ    (BX)(R14*1), CX
	MOVQ    DX, R15
	MOVQ    CX, BX
	ROLQ    CL, R15
	MOVL    $0x00000001, BP
	MOVB    R14, CL
	SHLL    CL, BP
	DECL    BP
	ANDQ    BP, R15
	ADDQ    R15, R8

	// Load ctx.mlTable
	MOVQ ctx+16(FP), CX
	MOVQ 24(CX), CX
	MOVQ (CX)(R8*8), R8

	// Update Offset State
	MOVBQZX R9, R14
	SHRQ    $0x10, R9
	MOVWQZX R9, R9
	LEAQ    (BX)(R14*1), CX
	MOVQ    DX, R15
	MOVQ    CX, BX
	ROLQ    CL, R15
	MOVL    $0x00000001, BP
	MOVB    R14, CL
	SHLL    CL, BP
	DECL    BP
	ANDQ    BP, R15
	ADDQ    R15, R9

	// Load ctx.ofTable
	MOVQ ctx+16(FP), CX
	MOVQ 48(CX), CX
	MOVQ (CX)(R9*8), R9

sequenceDecs_decode_amd64_skip_update:
	// Adjust offset
	MOVQ 16(R10), CX
	CMPQ AX, $0x01
	JBE  sequenceDecs_decode_amd64_adjust_offsetB_1_or_0
	MOVQ R12, R13
	MOVQ R11, R12
	MOVQ CX, R11
	JMP  sequenceDecs_decode_amd64_after_adjust

sequenceDecs_decode_amd64_adjust_offsetB_1_or_0:
	CMPQ (R10), $0x00000000
	JNE  sequenceDecs_decode_amd64_adjust_offset_maybezero
	INCQ CX
	JMP  sequenceDecs_decode_amd64_adjust_offset_nonzero

sequenceDecs_decode_amd64_adjust_offset_maybezero:
	TESTQ CX, CX
	JNZ   sequenceDecs_decode_amd64_adjust_offset_nonzero
	MOVQ  R11, CX
	JMP   sequenceDecs_decode_amd64_after_adjust

sequenceDecs_decode_amd64_adjust_offset_nonzero:
	CMPQ CX, $0x01
	JB   sequenceDecs_decode_amd64_adjust_zero
	JEQ  sequenceDecs_decode_amd64_adjust_one
	CMPQ CX, $0x02
	JA   sequenceDecs_decode_amd64_adjust_three
	JMP  sequenceDecs_decode_amd64_adjust_two

sequenceDecs_decode_amd64_adjust_zero:
	MOVQ R11, AX
	JMP  sequenceDecs_decode_amd64_adjust_test_temp_valid

sequenceDecs_decode_amd64_adjust_one:
	MOVQ R12, AX
	JMP  sequenceDecs_decode_amd64_adjust_test_temp_valid

sequenceDecs_decode_amd64_adjust_two:
	MOVQ R13, AX
	JMP  sequenceDecs_decode_amd64_adjust_test_temp_valid

sequenceDecs_decode_amd64_adjust_three:
	LEAQ -1(R11), AX

sequenceDecs_decode_amd64_adjust_test_temp_valid:
	TESTQ AX, AX
	JNZ   sequenceDecs_decode_amd64_adjust_temp_valid
	MOVQ  $0x00000001, AX

sequenceDecs_decode_amd64_adjust_temp_valid:
	CMPQ    CX, $0x01
	CMOVQNE R12, R13
	MOVQ    R11, R12
	MOVQ    AX, R11
	MOVQ    AX, CX

sequenceDecs_decode_amd64_after_adjust:
	MOVQ CX, 16(R10)

	// Check values
	MOVQ  8(R10), AX
	MOVQ  (R10), R14
	LEAQ  (AX)(R14*1), R15
	MOVQ  s+0(FP), BP
	ADDQ  R15, 256(BP)
	MOVQ  ctx+16(FP), R15
	SUBQ  R14, 128(R15)
	JS    error_not_enough_literals
	CMPQ  AX, $0x00020002
	JA    sequenceDecs_decode_amd64_error_match_len_too_big
	TESTQ CX, CX
	JNZ   sequenceDecs_decode_amd64_match_len_ofs_ok
	TESTQ AX, AX
	JNZ   sequenceDecs_decode_amd64_error_match_len_ofs_mismatch

sequenceDecs_decode_amd64_match_len_ofs_ok:
	ADDQ $0x18, R10
	MOVQ ctx+16(FP), AX
	DECQ 96(AX)
	JNS  sequenceDecs_decode_amd64_main_loop
	MOVQ s+0(FP), AX
	MOVQ R11, 144(AX)
	MOVQ R12, 152(AX)
	MOVQ R13, 160(AX)
	MOVQ br+8(FP), AX
	MOVQ DX, 32(AX)
	MOVB BL, 40(AX)
	MOVQ SI, 24(AX)

	// Return success
	MOVQ $0x00000000, ret+24(FP)
	RET

	// Return with match length error
sequenceDecs_decode_amd64_error_match_len_ofs_mismatch:
	MOVQ $0x00000001, ret+24(FP)
	RET

	// Return with match too long error
sequenceDecs_decode_amd64_error_match_len_too_big:
	MOVQ $0x00000002, ret+24(FP)
	RET

	// Return with match offset too long error
	MOVQ $0x00000003, ret+24(FP)
	RET

	// Return with not enough literals error
error_not_enough_literals:
	MOVQ $0x00000004, ret+24(FP)
	RET

	// Return with overread error
error_overread:
	MOVQ $0x00000006, ret+24(FP)
	RET

// func sequenceDecs_decode_56_amd64(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int
// Requires: CMOV
TEXT ·sequenceDecs_decode_56_amd64(SB), $8-32
	MOVQ    br+8(FP), AX
	MOVQ    32(AX), DX
	MOVBQZX 40(AX), BX
	MOVQ    24(AX), SI
	MOVQ    (AX), AX
	ADDQ    SI, AX
	MOVQ    AX, (SP)
	MOVQ    ctx+16(FP), AX
	MOVQ    72(AX), DI
	MOVQ    80(AX), R8
	MOVQ    88(AX), R9
	MOVQ    104(AX), R10
	MOVQ    s+0(FP), AX
	MOVQ    144(AX), R11
	MOVQ    152(AX), R12
	MOVQ    160(AX), R13

sequenceDecs_decode_56_amd64_main_loop:
	MOVQ (SP), R14

	// Fill bitreader to have enough for the offset and match length.
	CMPQ SI, $0x08
	JL   sequenceDecs_decode_56_amd64_fill_byte_by_byte
	MOVQ BX, AX
	SHRQ $0x03, AX
	SUBQ AX, R14
	MOVQ (R14), DX
	SUBQ AX, SI
	ANDQ $0x07, BX
	JMP  sequenceDecs_decode_56_amd64_fill_end

sequenceDecs_decode_56_amd64_fill_byte_by_byte:
	CMPQ    SI, $0x00
	JLE     sequenceDecs_decode_56_amd64_fill_check_overread
	CMPQ    BX, $0x07
	JLE     sequenceDecs_decode_56_amd64_fill_end
	SHLQ    $0x08, DX
	SUBQ    $0x01, R14
	SUBQ    $0x01, SI
	SUBQ    $0x08, BX
	MOVBQZX (R14), AX
	ORQ     AX, DX
	JMP     sequenceDecs_decode_56_amd64_fill_byte_by_byte

sequenceDecs_decode_56_amd64_fill_check_overread:
	CMPQ BX, $0x40
	JA   error_overread

sequenceDecs_decode_56_amd64_fill_end:
	// Update offset
	MOVQ  R9, AX
	MOVQ  BX, CX
	MOVQ  DX, R15
	SHLQ  CL, R15
	MOVB  AH, CL
	SHRQ  $0x20, AX
	TESTQ CX, CX
	JZ    sequenceDecs_decode_56_amd64_of_update_zero
	ADDQ  CX, BX
	CMPQ  BX, $0x40
	JA    sequenceDecs_decode_56_amd64_of_update_zero
	CMPQ  CX, $0x40
	JAE   sequenceDecs_decode_56_amd64_of_update_zero
	NEGQ  CX
	SHRQ  CL, R15
	ADDQ  R15, AX

sequenceDecs_decode_56_amd64_of_update_zero:
	MOVQ AX, 16(R10)

	// Update match length
	MOVQ  R8, AX
	MOVQ  BX, CX
	MOVQ  DX, R15
	SHLQ  CL, R15
	MOVB  AH, CL
	SHRQ  $0x20, AX
	TESTQ CX, CX
	JZ    sequenceDecs_decode_56_amd64_ml_update_zero
	ADDQ  CX, BX
	CMPQ  BX, $0x40
	JA    sequenceDecs_decode_56_amd64_ml_update_zero
	CMPQ  CX, $0x40
	JAE   sequenceDecs_decode_56_amd64_ml_update_zero
	NEGQ  CX
	SHRQ  CL, R15
	ADDQ  R15, AX

sequenceDecs_decode_56_amd64_ml_update_zero:
	MOVQ AX, 8(R10)

	// Update literal length
	MOVQ  DI, AX
	MOVQ  BX, CX
	MOVQ  DX, R15
	SHLQ  CL, R15
	MOVB  AH, CL
	SHRQ  $0x20, AX
	TESTQ CX, CX
	JZ    sequenceDecs_decode_56_amd64_ll_update_zero
	ADDQ  CX, BX
	CMPQ  BX, $0x40
	JA    sequenceDecs_decode_56_amd64_ll_update_zero
	CMPQ  CX, $0x40
	JAE   sequenceDecs_decode_56_amd64_ll_update_zero
	NEGQ  CX
	SHRQ  CL, R15
	ADDQ  R15, AX

sequenceDecs_decode_56_amd64_ll_update_zero:
	MOVQ AX, (R10)

	// Fill bitreader for state updates
	MOVQ    R14, (SP)
	MOVQ    R9, AX
	SHRQ    $0x08, AX
	MOVBQZX AL, AX
	MOVQ    ctx+16(FP), CX
	CMPQ    96(CX), $0x00
	JZ      sequenceDecs_decode_56_amd64_skip_update

	// Update Literal Length State
	MOVBQZX DI, R14
	SHRQ    $0x10, DI
	MOVWQZX DI, DI
	LEAQ    (BX)(R14*1), CX
	MOVQ    DX, R15
	MOVQ    CX, BX
	ROLQ    CL, R15
	MOVL    $0x00000001, BP
	MOVB    R14, CL
	SHLL    CL, BP
	DECL    BP
	ANDQ    BP, R15
	ADDQ    R15, DI

	// Load ctx.llTable
	MOVQ ctx+16(FP), CX
	MOVQ (CX), CX
	MOVQ (CX)(DI*8), DI

	// Update Match Length State
	MOVBQZX R8, R14
	SHRQ    $0x10, R8
	MOVWQZX R8, R8
	LEAQ    (BX)(R14*1), CX
	MOVQ    DX, R15
	MOVQ    CX, BX
	ROLQ    CL, R15
	MOVL    $0x00000001, BP
	MOVB    R14, CL
	SHLL    CL, BP
	DECL    BP
	ANDQ    BP, R15
	ADDQ    R15, R8

	// Load ctx.mlTable
	MOVQ ctx+16(FP), CX
	MOVQ 24(CX), CX
	MOVQ (CX)(R8*8), R8

	// Update Offset State
	MOVBQZX R9, R14
	SHRQ    $0x10, R9
	MOVWQZX R9, R9
	LEAQ    (BX)(R14*1), CX
	MOVQ    DX, R15
	MOVQ    CX, BX
	ROLQ    CL, R15
	MOVL    $0x00000001, BP
	MOVB    R14, CL
	SHLL    CL, BP
	DECL    BP
	ANDQ    BP, R15
	ADDQ    R15, R9

	// Load ctx.ofTable
	MOVQ ctx+16(FP), CX
	MOVQ 48(CX), CX
	MOVQ (CX)(R9*8), R9

sequenceDecs_decode_56_amd64_skip_update:
	// Adjust offset
	MOVQ 16(R10), CX
	CMPQ AX, $0x01
	JBE  sequenceDecs_decode_56_amd64_adjust_offsetB_1_or_0
	MOVQ R12, R13
	MOVQ R11, R12
	MOVQ CX, R11
	JMP  sequenceDecs_decode_56_amd64_after_adjust

sequenceDecs_decode_56_amd64_adjust_offsetB_1_or_0:
	CMPQ (R10), $0x00000000
	JNE  sequenceDecs_decode_56_amd64_adjust_offset_maybezero
	INCQ CX
	JMP  sequenceDecs_decode_56_amd64_adjust_offset_nonzero

sequenceDecs_decode_56_amd64_adjust_offset_maybezero:
	TESTQ CX, CX
	JNZ   sequenceDecs_decode_56_amd64_adjust_offset_nonzero
	MOVQ  R11, CX
	JMP   sequenceDecs_decode_56_amd64_after_adjust

sequenceDecs_decode_56_amd64_adjust_offset_nonzero:
	CMPQ CX, $0x01
	JB   sequenceDecs_decode_56_amd64_adjust_zero
	JEQ  sequenceDecs_decode_56_amd64_adjust_one
	CMPQ CX, $0x02
	JA   sequenceDecs_decode_56_amd64_adjust_three
	JMP  sequenceDecs_decode_56_amd64_adjust_two

sequenceDecs_decode_56_amd64_adjust_zero:
	MOVQ R11, AX
	JMP  sequenceDecs_decode_56_amd64_adjust_test_temp_valid

sequenceDecs_decode_56_amd64_adjust_one:
	MOVQ R12, AX
	JMP  sequenceDecs_decode_56_amd64_adjust_test_temp_valid

sequenceDecs_decode_56_amd64_adjust_two:
	MOVQ R13, AX
	JMP  sequenceDecs_decode_56_amd64_adjust_test_temp_valid

sequenceDecs_decode_56_amd64_adjust_three:
	LEAQ -1(R11), AX

sequenceDecs_decode_56_amd64_adjust_test_temp_valid:
	TESTQ AX, AX
	JNZ   sequenceDecs_decode_56_amd64_adjust_temp_valid
	MOVQ  $0x00000001, AX

sequenceDecs_decode_56_amd64_adjust_temp_valid:
	CMPQ    CX, $0x01
	CMOVQNE R12, R13
	MOVQ    R11, R12
	MOVQ    AX, R11
	MOVQ    AX, CX

sequenceDecs_decode_56_amd64_after_adjust:
	MOVQ CX, 16(R10)

	// Check values
	MOVQ  8(R10), AX
	MOVQ  (R10), R14
	LEAQ  (AX)(R14*1), R15
	MOVQ  s+0(FP), BP
	ADDQ  R15, 256(BP)
	MOVQ  ctx+16(FP), R15
	SUBQ  R14, 128(R15)
	JS    error_not_enough_literals
	CMPQ  AX, $0x00020002
	JA    sequenceDecs_decode_56_amd64_error_match_len_too_big
	TESTQ CX, CX
	JNZ   sequenceDecs_decode_56_amd64_match_len_ofs_ok
	TESTQ AX, AX
	JNZ   sequenceDecs_decode_56_amd64_error_match_len_ofs_mismatch

sequenceDecs_decode_56_amd64_match_len_ofs_ok:
	ADDQ $0x18, R10
	MOVQ ctx+16(FP), AX
	DECQ 96(AX)
	JNS  sequenceDecs_decode_56_amd64_main_loop
	MOVQ s+0(FP), AX
	MOVQ R11, 144(AX)
	MOVQ R12, 152(AX)
	MOVQ R13, 160(AX)
	MOVQ br+8(FP), AX
	MOVQ DX, 32(AX)
	MOVB BL, 40(AX)
	MOVQ SI, 24(AX)

	// Return success
	MOVQ $0x00000000, ret+24(FP)
	RET

	// Return with match length error
sequenceDecs_decode_56_amd64_error_match_len_ofs_mismatch:
	MOVQ $0x00000001, ret+24(FP)
	RET

	// Return with match too long error
sequenceDecs_decode_56_amd64_error_match_len_too_big:
	MOVQ $0x00000002, ret+24(FP)
	RET

	// Return with match offset too long error
	MOVQ $0x00000003, ret+24(FP)
	RET

	// Return with not enough literals error
error_not_enough_literals:
	MOVQ $0x00000004, ret+24(FP)
	RET

	// Return with overread error
error_overread:
	MOVQ $0x00000006, ret+24(FP)
	RET

// func sequenceDecs_decode_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int
// Requires: BMI, BMI2, CMOV
TEXT ·sequenceDecs_decode_bmi2(SB), $8-32
	MOVQ    br+8(FP), CX
	MOVQ    32(CX), AX
	MOVBQZX 40(CX), DX
	MOVQ    24(CX), BX
	MOVQ    (CX), CX
	ADDQ    BX, CX
	MOVQ    CX, (SP)
	MOVQ    ctx+16(FP), CX
	MOVQ    72(CX), SI
	MOVQ    80(CX), DI
	MOVQ    88(CX), R8
	MOVQ    104(CX), R9
	MOVQ    s+0(FP), CX
	MOVQ    144(CX), R10
	MOVQ    152(CX), R11
	MOVQ    160(CX), R12

sequenceDecs_decode_bmi2_main_loop:
	MOVQ (SP), R13

	// Fill bitreader to have enough for the offset and match length.
	CMPQ BX, $0x08
	JL   sequenceDecs_decode_bmi2_fill_byte_by_byte
	MOVQ DX, CX
	SHRQ $0x03, CX
	SUBQ CX, R13
	MOVQ (R13), AX
	SUBQ CX, BX
	ANDQ $0x07, DX
	JMP  sequenceDecs_decode_bmi2_fill_end

sequenceDecs_decode_bmi2_fill_byte_by_byte:
	CMPQ    BX, $0x00
	JLE     sequenceDecs_decode_bmi2_fill_check_overread
	CMPQ    DX, $0x07
	JLE     sequenceDecs_decode_bmi2_fill_end
	SHLQ    $0x08, AX
	SUBQ    $0x01, R13
	SUBQ    $0x01, BX
	SUBQ    $0x08, DX
	MOVBQZX (R13), CX
	ORQ     CX, AX
	JMP     sequenceDecs_decode_bmi2_fill_byte_by_byte

sequenceDecs_decode_bmi2_fill_check_overread:
	CMPQ DX, $0x40
	JA   error_overread

sequenceDecs_decode_bmi2_fill_end:
	// Update offset
	MOVQ   $0x00000808, CX
	BEXTRQ CX, R8, R14
	MOVQ   AX, R15
	LEAQ   (DX)(R14*1), CX
	ROLQ   CL, R15
	BZHIQ  R14, R15, R15
	MOVQ   CX, DX
	MOVQ   R8, CX
	SHRQ   $0x20, CX
	ADDQ   R15, CX
	MOVQ   CX, 16(R9)

	// Update match length
	MOVQ   $0x00000808, CX
	BEXTRQ CX, DI, R14
	MOVQ   AX, R15
	LEAQ   (DX)(R14*1), CX
	ROLQ   CL, R15
	BZHIQ  R14, R15, R15
	MOVQ   CX, DX
	MOVQ   DI, CX
	SHRQ   $0x20, CX
	ADDQ   R15, CX
	MOVQ   CX, 8(R9)

	// Fill bitreader to have enough for the remaining
	CMPQ BX, $0x08
	JL   sequenceDecs_decode_bmi2_fill_2_byte_by_byte
	MOVQ DX, CX
	SHRQ $0x03, CX
	SUBQ CX, R13
	MOVQ (R13), AX
	SUBQ CX, BX
	ANDQ $0x07, DX
	JMP  sequenceDecs_decode_bmi2_fill_2_end

sequenceDecs_decode_bmi2_fill_2_byte_by_byte:
	CMPQ    BX, $0x00
	JLE     sequenceDecs_decode_bmi2_fill_2_check_overread
	CMPQ    DX, $0x07
	JLE     sequenceDecs_decode_bmi2_fill_2_end
	SHLQ    $0x08, AX
	SUBQ    $0x01, R13
	SUBQ    $0x01, BX
	SUBQ    $0x08, DX
	MOVBQZX (R13), CX
	ORQ     CX, AX
	JMP     sequenceDecs_decode_bmi2_fill_2_byte_by_byte

sequenceDecs_decode_bmi2_fill_2_check_overread:
	CMPQ DX, $0x40
	JA   error_overread

sequenceDecs_decode_bmi2_fill_2_end:
	// Update literal length
	MOVQ   $0x00000808, CX
	BEXTRQ CX, SI, R14
	MOVQ   AX, R15
	LEAQ   (DX)(R14*1), CX
	ROLQ   CL, R15
	BZHIQ  R14, R15, R15
	MOVQ   CX, DX
	MOVQ   SI, CX
	SHRQ   $0x20, CX
	ADDQ   R15, CX
	MOVQ   CX, (R9)

	// Fill bitreader for state updates
	MOVQ    R13, (SP)
	MOVQ    $0x00000808, CX
	BEXTRQ  CX, R8, R13
	MOVQ    ctx+16(FP), CX
	CMPQ    96(CX), $0x00
	JZ      sequenceDecs_decode_bmi2_skip_update
	LEAQ    (SI)(DI*1), R14
	ADDQ    R8, R14
	MOVBQZX R14, R14
	LEAQ    (DX)(R14*1), CX
	MOVQ    AX, R15
	MOVQ    CX, DX
	ROLQ    CL, R15
	BZHIQ   R14, R15, R15

	// Update Offset State
	BZHIQ  R8, R15, CX
	SHRXQ  R8, R15, R15
	MOVQ   $0x00001010, R14
	BEXTRQ R14, R8, R8
	ADDQ   CX, R8

	// Load ctx.ofTable
	MOVQ ctx+16(FP), CX
	MOVQ 48(CX), CX
	MOVQ (CX)(R8*8), R8

	// Update Match Length State
	BZHIQ  DI, R15, CX
	SHRXQ  DI, R15, R15
	MOVQ   $0x00001010, R14
	BEXTRQ R14, DI, DI
	ADDQ   CX, DI

	// Load ctx.mlTable
	MOVQ ctx+16(FP), CX
	MOVQ 24(CX), CX
	MOVQ (CX)(DI*8), DI

	// Update Literal Length State
	BZHIQ  SI, R15, CX
	MOVQ   $0x00001010, R14
	BEXTRQ R14, SI, SI
	ADDQ   CX, SI

	// Load ctx.llTable
	MOVQ ctx+16(FP), CX
	MOVQ (CX), CX
	MOVQ (CX)(SI*8), SI

sequenceDecs_decode_bmi2_skip_update:
	// Adjust offset
	MOVQ 16(R9), CX
	CMPQ R13, $0x01
	JBE  sequenceDecs_decode_bmi2_adjust_offsetB_1_or_0
	MOVQ R11, R12
	MOVQ R10, R11
	MOVQ CX, R10
	JMP  sequenceDecs_decode_bmi2_after_adjust

sequenceDecs_decode_bmi2_adjust_offsetB_1_or_0:
	CMPQ (R9), $0x00000000
	JNE  sequenceDecs_decode_bmi2_adjust_offset_maybezero
	INCQ CX
	JMP  sequenceDecs_decode_bmi2_adjust_offset_nonzero

sequenceDecs_decode_bmi2_adjust_offset_maybezero:
	TESTQ CX, CX
	JNZ   sequenceDecs_decode_bmi2_adjust_offset_nonzero
	MOVQ  R10, CX
	JMP   sequenceDecs_decode_bmi2_after_adjust

sequenceDecs_decode_bmi2_adjust_offset_nonzero:
	CMPQ CX, $0x01
	JB   sequenceDecs_decode_bmi2_adjust_zero
	JEQ  sequenceDecs_decode_bmi2_adjust_one
	CMPQ CX, $0x02
	JA   sequenceDecs_decode_bmi2_adjust_three
	JMP  sequenceDecs_decode_bmi2_adjust_two

sequenceDecs_decode_bmi2_adjust_zero:
	MOVQ R10, R13
	JMP  sequenceDecs_decode_bmi2_adjust_test_temp_valid

sequenceDecs_decode_bmi2_adjust_one:
	MOVQ R11, R13
	JMP  sequenceDecs_decode_bmi2_adjust_test_temp_valid

sequenceDecs_decode_bmi2_adjust_two:
	MOVQ R12, R13
	JMP  sequenceDecs_decode_bmi2_adjust_test_temp_valid

sequenceDecs_decode_bmi2_adjust_three:
	LEAQ -1(R10), R13

sequenceDecs_decode_bmi2_adjust_test_temp_valid:
	TESTQ R13, R13
	JNZ   sequenceDecs_decode_bmi2_adjust_temp_valid
	MOVQ  $0x00000001, R13

sequenceDecs_decode_bmi2_adjust_temp_valid:
	CMPQ    CX, $0x01
	CMOVQNE R11, R12
	MOVQ    R10, R11
	MOVQ    R13, R10
	MOVQ    R13, CX

sequenceDecs_decode_bmi2_after_adjust:
	MOVQ CX, 16(R9)

	// Check values
	MOVQ  8(R9), R13
	MOVQ  (R9), R14
	LEAQ  (R13)(R14*1), R15
	MOVQ  s+0(FP), BP
	ADDQ  R15, 256(BP)
	MOVQ  ctx+16(FP), R15
	SUBQ  R14, 128(R15)
	JS    error_not_enough_literals
	CMPQ  R13, $0x00020002
	JA    sequenceDecs_decode_bmi2_error_match_len_too_big
	TESTQ CX, CX
	JNZ   sequenceDecs_decode_bmi2_match_len_ofs_ok
	TESTQ R13, R13
	JNZ   sequenceDecs_decode_bmi2_error_match_len_ofs_mismatch

sequenceDecs_decode_bmi2_match_len_ofs_ok:
	ADDQ $0x18, R9
	MOVQ ctx+16(FP), CX
	DECQ 96(CX)
	JNS  sequenceDecs_decode_bmi2_main_loop
	MOVQ s+0(FP), CX
	MOVQ R10, 144(CX)
	MOVQ R11, 152(CX)
	MOVQ R12, 160(CX)
	MOVQ br+8(FP), CX
	MOVQ AX, 32(CX)
	MOVB DL, 40(CX)
	MOVQ BX, 24(CX)

	// Return success
	MOVQ $0x00000000, ret+24(FP)
	RET

	// Return with match length error
sequenceDecs_decode_bmi2_error_match_len_ofs_mismatch:
	MOVQ $0x00000001, ret+24(FP)
	RET

	// Return with match too long error
sequenceDecs_decode_bmi2_error_match_len_too_big:
	MOVQ $0x00000002, ret+24(FP)
	RET

	// Return with match offset too long error
	MOVQ $0x00000003, ret+24(FP)
	RET

	// Return with not enough literals error
error_not_enough_literals:
	MOVQ $0x00000004, ret+24(FP)
	RET

	// Return with overread error
error_overread:
	MOVQ $0x00000006, ret+24(FP)
	RET

// func sequenceDecs_decode_56_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int
// Requires: BMI, BMI2, CMOV
TEXT ·sequenceDecs_decode_56_bmi2(SB), $8-32
	MOVQ    br+8(FP), CX
	MOVQ    32(CX), AX
	MOVBQZX 40(CX), DX
	MOVQ    24(CX), BX
	MOVQ    (CX), CX
	ADDQ    BX, CX
	MOVQ    CX, (SP)
	MOVQ    ctx+16(FP), CX
	MOVQ    72(CX), SI
	MOVQ    80(CX), DI
	MOVQ    88(CX), R8
	MOVQ    104(CX), R9
	MOVQ    s+0(FP), CX
	MOVQ    144(CX), R10
	MOVQ    152(CX), R11
	MOVQ    160(CX), R12

sequenceDecs_decode_56_bmi2_main_loop:
	MOVQ (SP), R13

	// Fill bitreader to have enough for the offset and match length.
	CMPQ BX, $0x08
	JL   sequenceDecs_decode_56_bmi2_fill_byte_by_byte
	MOVQ DX, CX
	SHRQ $0x03, CX
	SUBQ CX, R13
	MOVQ (R13), AX
	SUBQ CX, BX
	ANDQ $0x07, DX
	JMP  sequenceDecs_decode_56_bmi2_fill_end

sequenceDecs_decode_56_bmi2_fill_byte_by_byte:
	CMPQ    BX, $0x00
	JLE     sequenceDecs_decode_56_bmi2_fill_check_overread
	CMPQ    DX, $0x07
	JLE     sequenceDecs_decode_56_bmi2_fill_end
	SHLQ    $0x08, AX
	SUBQ    $0x01, R13
	SUBQ    $0x01, BX
	SUBQ    $0x08, DX
	MOVBQZX (R13), CX
	ORQ     CX, AX
	JMP     sequenceDecs_decode_56_bmi2_fill_byte_by_byte

sequenceDecs_decode_56_bmi2_fill_check_overread:
	CMPQ DX, $0x40
	JA   error_overread

sequenceDecs_decode_56_bmi2_fill_end:
	// Update offset
	MOVQ   $0x00000808, CX
	BEXTRQ CX, R8, R14
	MOVQ   AX, R15
	LEAQ   (DX)(R14*1), CX
	ROLQ   CL, R15
	BZHIQ  R14, R15, R15
	MOVQ   CX, DX
	MOVQ   R8, CX
	SHRQ   $0x20, CX
	ADDQ   R15, CX
	MOVQ   CX, 16(R9)

	// Update match length
	MOVQ   $0x00000808, CX
	BEXTRQ CX, DI, R14
	MOVQ   AX, R15
	LEAQ   (DX)(R14*1), CX
	ROLQ   CL, R15
	BZHIQ  R14, R15, R15
	MOVQ   CX, DX
	MOVQ   DI, CX
	SHRQ   $0x20, CX
	ADDQ   R15, CX
	MOVQ   CX, 8(R9)

	// Update literal length
	MOVQ   $0x00000808, CX
	BEXTRQ CX, SI, R14
	MOVQ   AX, R15
	LEAQ   (DX)(R14*1), CX
	ROLQ   CL, R15
	BZHIQ  R14, R15, R15
	MOVQ   CX, DX
	MOVQ   SI, CX
	SHRQ   $0x20, CX
	ADDQ   R15, CX
	MOVQ   CX, (R9)

	// Fill bitreader for state updates
	MOVQ    R13, (SP)
	MOVQ    $0x00000808, CX
	BEXTRQ  CX, R8, R13
	MOVQ    ctx+16(FP), CX
	CMPQ    96(CX), $0x00
	JZ      sequenceDecs_decode_56_bmi2_skip_update
	LEAQ    (SI)(DI*1), R14
	ADDQ    R8, R14
	MOVBQZX R14, R14
	LEAQ    (DX)(R14*1), CX
	MOVQ    AX, R15
	MOVQ    CX, DX
	ROLQ    CL, R15
	BZHIQ   R14, R15, R15

	// Update Offset State
	BZHIQ  R8, R15, CX
	SHRXQ  R8, R15, R15
	MOVQ   $0x00001010, R14
	BEXTRQ R14, R8, R8
	ADDQ   CX, R8

	// Load ctx.ofTable
	MOVQ ctx+16(FP), CX
	MOVQ 48(CX), CX
	MOVQ (CX)(R8*8), R8

	// Update Match Length State
	BZHIQ  DI, R15, CX
	SHRXQ  DI, R15, R15
	MOVQ   $0x00001010, R14
	BEXTRQ R14, DI, DI
	ADDQ   CX, DI

	// Load ctx.mlTable
	MOVQ ctx+16(FP), CX
	MOVQ 24(CX), CX
	MOVQ (CX)(DI*8), DI

	// Update Literal Length State
	BZHIQ  SI, R15, CX
	MOVQ   $0x00001010, R14
	BEXTRQ R14, SI, SI
	ADDQ   CX, SI

	// Load ctx.llTable
	MOVQ ctx+16(FP), CX
	MOVQ (CX), CX
	MOVQ (CX)(SI*8), SI

sequenceDecs_decode_56_bmi2_skip_update:
	// Adjust offset
	MOVQ 16(R9), CX
	CMPQ R13, $0x01
	JBE  sequenceDecs_decode_56_bmi2_adjust_offsetB_1_or_0
	MOVQ R11, R12
	MOVQ R10, R11
	MOVQ CX, R10
	JMP  sequenceDecs_decode_56_bmi2_after_adjust

sequenceDecs_decode_56_bmi2_adjust_offsetB_1_or_0:
	CMPQ (R9), $0x00000000
	JNE  sequenceDecs_decode_56_bmi2_adjust_offset_maybezero
	INCQ CX
	JMP  sequenceDecs_decode_56_bmi2_adjust_offset_nonzero

sequenceDecs_decode_56_bmi2_adjust_offset_maybezero:
	TESTQ CX, CX
	JNZ   sequenceDecs_decode_56_bmi2_adjust_offset_nonzero
	MOVQ  R10, CX
	JMP   sequenceDecs_decode_56_bmi2_after_adjust

sequenceDecs_decode_56_bmi2_adjust_offset_nonzero:
	CMPQ CX, $0x01
	JB   sequenceDecs_decode_56_bmi2_adjust_zero
	JEQ  sequenceDecs_decode_56_bmi2_adjust_one
	CMPQ CX, $0x02
	JA   sequenceDecs_decode_56_bmi2_adjust_three
	JMP  sequenceDecs_decode_56_bmi2_adjust_two

sequenceDecs_decode_56_bmi2_adjust_zero:
	MOVQ R10, R13
	JMP  sequenceDecs_decode_56_bmi2_adjust_test_temp_valid

sequenceDecs_decode_56_bmi2_adjust_one:
	MOVQ R11, R13
	JMP  sequenceDecs_decode_56_bmi2_adjust_test_temp_valid

sequenceDecs_decode_56_bmi2_adjust_two:
	MOVQ R12, R13
	JMP  sequenceDecs_decode_56_bmi2_adjust_test_temp_valid

sequenceDecs_decode_56_bmi2_adjust_three:
	LEAQ -1(R10), R13

sequenceDecs_decode_56_bmi2_adjust_test_temp_valid:
	TESTQ R13, R13
	JNZ   sequenceDecs_decode_56_bmi2_adjust_temp_valid
	MOVQ  $0x00000001, R13

sequenceDecs_decode_56_bmi2_adjust_temp_valid:
	CMPQ    CX, $0x01
	CMOVQNE R11, R12
	MOVQ    R10, R11
	MOVQ    R13, R10
	MOVQ    R13, CX

sequenceDecs_decode_56_bmi2_after_adjust:
	MOVQ CX, 16(R9)

	// Check values
	MOVQ  8(R9), R13
	MOVQ  (R9), R14
	LEAQ  (R13)(R14*1), R15
	MOVQ  s+0(FP), BP
	ADDQ  R15, 256(BP)
	MOVQ  ctx+16(FP), R15
	SUBQ  R14, 128(R15)
	JS    error_not_enough_literals
	CMPQ  R13, $0x00020002
	JA    sequenceDecs_decode_56_bmi2_error_match_len_too_big
	TESTQ CX, CX
	JNZ   sequenceDecs_decode_56_bmi2_match_len_ofs_ok
	TESTQ R13, R13
	JNZ   sequenceDecs_decode_56_bmi2_error_match_len_ofs_mismatch

sequenceDecs_decode_56_bmi2_match_len_ofs_ok:
	ADDQ $0x18, R9
	MOVQ ctx+16(FP), CX
	DECQ 96(CX)
	JNS  sequenceDecs_decode_56_bmi2_main_loop
	MOVQ s+0(FP), CX
	MOVQ R10, 144(CX)
	MOVQ R11, 152(CX)
	MOVQ R12, 160(CX)
	MOVQ br+8(FP), CX
	MOVQ AX, 32(CX)
	MOVB DL, 40(CX)
	MOVQ BX, 24(CX)

	// Return success
	MOVQ $0x00000000, ret+24(FP)
	RET

	// Return with match length error
sequenceDecs_decode_56_bmi2_error_match_len_ofs_mismatch:
	MOVQ $0x00000001, ret+24(FP)
	RET

	// Return with match too long error
sequenceDecs_decode_56_bmi2_error_match_len_too_big:
	MOVQ $0x00000002, ret+24(FP)
	RET

	// Return with match offset too long error
	MOVQ $0x00000003, ret+24(FP)
	RET

	// Return with not enough literals error
error_not_enough_literals:
	MOVQ $0x00000004, ret+24(FP)
	RET

	// Return with overread error
error_overread:
	MOVQ $0x00000006, ret+24(FP)
	RET

// func sequenceDecs_executeSimple_amd64(ctx *executeAsmContext) bool
// Requires: SSE
TEXT ·sequenceDecs_executeSimple_amd64(SB), $8-9
	MOVQ  ctx+0(FP), R10
	MOVQ  8(R10), CX
	TESTQ CX, CX
	JZ    empty_seqs
	MOVQ  (R10), AX
	MOVQ  24(R10), DX
	MOVQ  32(R10), BX
	MOVQ  80(R10), SI
	MOVQ  104(R10), DI
	MOVQ  120(R10), R8
	MOVQ  56(R10), R9
	MOVQ  64(R10), R10
	ADDQ  R10, R9

	// seqsBase += 24 * seqIndex
	LEAQ (DX)(DX*2), R11
	SHLQ $0x03, R11
	ADDQ R11, AX

	// outBase += outPosition
	ADDQ DI, BX

main_loop:
	MOVQ (AX), R11
	MOVQ 16(AX), R12
	MOVQ 8(AX), R13

	// Copy literals
	TESTQ R11, R11
	JZ    check_offset
	XORQ  R14, R14

copy_1:
	MOVUPS (SI)(R14*1), X0
	MOVUPS X0, (BX)(R14*1)
	ADDQ   $0x10, R14
	CMPQ   R14, R11
	JB     copy_1
	ADDQ   R11, SI
	ADDQ   R11, BX
	ADDQ   R11, DI

	// Malformed input if seq.mo > t+len(hist) || seq.mo > s.windowSize)
check_offset:
	LEAQ (DI)(R10*1), R11
	CMPQ R12, R11
	JG   error_match_off_too_big
	CMPQ R12, R8
	JG   error_match_off_too_big

	// Copy match from history
	MOVQ R12, R11
	SUBQ DI, R11
	JLS  copy_match
	MOVQ R9, R14
	SUBQ R11, R14
	CMPQ R13, R11
	JG   copy_all_from_history
	MOVQ R13, R11
	SUBQ $0x10, R11
	JB   copy_4_small

copy_4_loop:
	MOVUPS (R14), X0
	MOVUPS X0, (BX)
	ADDQ   $0x10, R14
	ADDQ   $0x10, BX
	SUBQ   $0x10, R11
	JAE    copy_4_loop
	LEAQ   16(R14)(R11*1), R14
	LEAQ   16(BX)(R11*1), BX
	MOVUPS -16(R14), X0
	MOVUPS X0, -16(BX)
	JMP    copy_4_end

copy_4_small:
	CMPQ R13, $0x03
	JE   copy_4_move_3
	CMPQ R13, $0x08
	JB   copy_4_move_4through7
	JMP  copy_4_move_8through16

copy_4_move_3:
	MOVW (R14), R11
	MOVB 2(R14), R12
	MOVW R11, (BX)
	MOVB R12, 2(BX)
	ADDQ R13, R14
	ADDQ R13, BX
	JMP  copy_4_end

copy_4_move_4through7:
	MOVL (R14), R11
	MOVL -4(R14)(R13*1), R12
	MOVL R11, (BX)
	MOVL R12, -4(BX)(R13*1)
	ADDQ R13, R14
	ADDQ R13, BX
	JMP  copy_4_end

copy_4_move_8through16:
	MOVQ (R14), R11
	MOVQ -8(R14)(R13*1), R12
	MOVQ R11, (BX)
	MOVQ R12, -8(BX)(R13*1)
	ADDQ R13, R14
	ADDQ R13, BX

copy_4_end:
	ADDQ R13, DI
	ADDQ $0x18, AX
	INCQ DX
	CMPQ DX, CX
	JB   main_loop
	JMP  loop_finished

copy_all_from_history:
	MOVQ R11, R15
	SUBQ $0x10, R15
	JB   copy_5_small

copy_5_loop:
	MOVUPS (R14), X0
	MOVUPS X0, (BX)
	ADDQ   $0x10, R14
	ADDQ   $0x10, BX
	SUBQ   $0x10, R15
	JAE    copy_5_loop
	LEAQ   16(R14)(R15*1), R14
	LEAQ   16(BX)(R15*1), BX
	MOVUPS -16(R14), X0
	MOVUPS X0, -16(BX)
	JMP    copy_5_end

copy_5_small:
	CMPQ R11, $0x03
	JE   copy_5_move_3
	JB   copy_5_move_1or2
	CMPQ R11, $0x08
	JB   copy_5_move_4through7
	JMP  copy_5_move_8through16

copy_5_move_1or2:
	MOVB (R14), R15
	MOVB -1(R14)(R11*1), BP
	MOVB R15, (BX)
	MOVB BP, -1(BX)(R11*1)
	ADDQ R11, R14
	ADDQ R11, BX
	JMP  copy_5_end

copy_5_move_3:
	MOVW (R14), R15
	MOVB 2(R14), BP
	MOVW R15, (BX)
	MOVB BP, 2(BX)
	ADDQ R11, R14
	ADDQ R11, BX
	JMP  copy_5_end

copy_5_move_4through7:
	MOVL (R14), R15
	MOVL -4(R14)(R11*1), BP
	MOVL R15, (BX)
	MOVL BP, -4(BX)(R11*1)
	ADDQ R11, R14
	ADDQ R11, BX
	JMP  copy_5_end

copy_5_move_8through16:
	MOVQ (R14), R15
	MOVQ -8(R14)(R11*1), BP
	MOVQ R15, (BX)
	MOVQ BP, -8(BX)(R11*1)
	ADDQ R11, R14
	ADDQ R11, BX

copy_5_end:
	ADDQ R11, DI
	SUBQ R11, R13

	// Copy match from the current buffer
copy_match:
	MOVQ BX, R11
	SUBQ R12, R11

	// ml <= mo
	CMPQ R13, R12
	JA   copy_overlapping_match

	// Copy non-overlapping match
	ADDQ R13, DI
	MOVQ BX, R12
	ADDQ R13, BX

copy_2:
	MOVUPS (R11), X0
	MOVUPS X0, (R12)
	ADDQ   $0x10, R11
	ADDQ   $0x10, R12
	SUBQ   $0x10, R13
	JHI    copy_2
	JMP    handle_loop

	// Copy overlapping match
copy_overlapping_match:
	ADDQ R13, DI

copy_slow_3:
	MOVB (R11), R12
	MOVB R12, (BX)
	INCQ R11
	INCQ BX
	DECQ R13
	JNZ  copy_slow_3

handle_loop:
	ADDQ $0x18, AX
	INCQ DX
	CMPQ DX, CX
	JB   main_loop

loop_finished:
	// Return value
	MOVB $0x01, ret+8(FP)

	// Update the context
	MOVQ ctx+0(FP), AX
	MOVQ DX, 24(AX)
	MOVQ DI, 104(AX)
	SUBQ 80(AX), SI
	MOVQ SI, 112(AX)
	RET

error_match_off_too_big:
	// Return value
	MOVB $0x00, ret+8(FP)

	// Update the context
	MOVQ ctx+0(FP), AX
	MOVQ DX, 24(AX)
	MOVQ DI, 104(AX)
	SUBQ 80(AX), SI
	MOVQ SI, 112(AX)
	RET

empty_seqs:
	// Return value
	MOVB $0x01, ret+8(FP)
	RET

// func sequenceDecs_executeSimple_safe_amd64(ctx *executeAsmContext) bool
// Requires: SSE
TEXT ·sequenceDecs_executeSimple_safe_amd64(SB), $8-9
	MOVQ  ctx+0(FP), R10
	MOVQ  8(R10), CX
	TESTQ CX, CX
	JZ    empty_seqs
	MOVQ  (R10), AX
	MOVQ  24(R10), DX
	MOVQ  32(R10), BX
	MOVQ  80(R10), SI
	MOVQ  104(R10), DI
	MOVQ  120(R10), R8
	MOVQ  56(R10), R9
	MOVQ  64(R10), R10
	ADDQ  R10, R9

	// seqsBase += 24 * seqIndex
	LEAQ (DX)(DX*2), R11
	SHLQ $0x03, R11
	ADDQ R11, AX

	// outBase += outPosition
	ADDQ DI, BX

main_loop:
	MOVQ (AX), R11
	MOVQ 16(AX), R12
	MOVQ 8(AX), R13

	// Copy literals
	TESTQ R11, R11
	JZ    check_offset
	MOVQ  R11, R14
	SUBQ  $0x10, R14
	JB    copy_1_small

copy_1_loop:
	MOVUPS (SI), X0
	MOVUPS X0, (BX)
	ADDQ   $0x10, SI
	ADDQ   $0x10, BX
	SUBQ   $0x10, R14
	JAE    copy_1_loop
	LEAQ   16(SI)(R14*1), SI
	LEAQ   16(BX)(R14*1), BX
	MOVUPS -16(SI), X0
	MOVUPS X0, -16(BX)
	JMP    copy_1_end

copy_1_small:
	CMPQ R11, $0x03
	JE   copy_1_move_3
	JB   copy_1_move_1or2
	CMPQ R11, $0x08
	JB   copy_1_move_4through7
	JMP  copy_1_move_8through16

copy_1_move_1or2:
	MOVB (SI), R14
	MOVB -1(SI)(R11*1), R15
	MOVB R14, (BX)
	MOVB R15, -1(BX)(R11*1)
	ADDQ R11, SI
	ADDQ R11, BX
	JMP  copy_1_end

copy_1_move_3:
	MOVW (SI), R14
	MOVB 2(SI), R15
	MOVW R14, (BX)
	MOVB R15, 2(BX)
	ADDQ R11, SI
	ADDQ R11, BX
	JMP  copy_1_end

copy_1_move_4through7:
	MOVL (SI), R14
	MOVL -4(SI)(R11*1), R15
	MOVL R14, (BX)
	MOVL R15, -4(BX)(R11*1)
	ADDQ R11, SI
	ADDQ R11, BX
	JMP  copy_1_end

copy_1_move_8through16:
	MOVQ (SI), R14
	MOVQ -8(SI)(R11*1), R15
	MOVQ R14, (BX)
	MOVQ R15, -8(BX)(R11*1)
	ADDQ R11, SI
	ADDQ R11, BX

copy_1_end:
	ADDQ R11, DI

	// Malformed input if seq.mo > t+len(hist) || seq.mo > s.windowSize)
check_offset:
	LEAQ (DI)(R10*1), R11
	CMPQ R12, R11
	JG   error_match_off_too_big
	CMPQ R12, R8
	JG   error_match_off_too_big

	// Copy match from history
	MOVQ R12, R11
	SUBQ DI, R11
	JLS  copy_match
	MOVQ R9, R14
	SUBQ R11, R14
	CMPQ R13, R11
	JG   copy_all_from_history
	MOVQ R13, R11
	SUBQ $0x10, R11
	JB   copy_4_small

copy_4_loop:
	MOVUPS (R14), X0
	MOVUPS X0, (BX)
	ADDQ   $0x10, R14
	ADDQ   $0x10, BX
	SUBQ   $0x10, R11
	JAE    copy_4_loop
	LEAQ   16(R14)(R11*1), R14
	LEAQ   16(BX)(R11*1), BX
	MOVUPS -16(R14), X0
	MOVUPS X0, -16(BX)
	JMP    copy_4_end

copy_4_small:
	CMPQ R13, $0x03
	JE   copy_4_move_3
	CMPQ R13, $0x08
	JB   copy_4_move_4through7
	JMP  copy_4_move_8through16

copy_4_move_3:
	MOVW (R14), R11
	MOVB 2(R14), R12
	MOVW R11, (BX)
	MOVB R12, 2(BX)
	ADDQ R13, R14
	ADDQ R13, BX
	JMP  copy_4_end

copy_4_move_4through7:
	MOVL (R14), R11
	MOVL -4(R14)(R13*1), R12
	MOVL R11, (BX)
	MOVL R12, -4(BX)(R13*1)
	ADDQ R13, R14
	ADDQ R13, BX
	JMP  copy_4_end

copy_4_move_8through16:
	MOVQ (R14), R11
	MOVQ -8(R14)(R13*1), R12
	MOVQ R11, (BX)
	MOVQ R12, -8(BX)(R13*1)
	ADDQ R13, R14
	ADDQ R13, BX

copy_4_end:
	ADDQ R13, DI
	ADDQ $0x18, AX
	INCQ DX
	CMPQ DX, CX
	JB   main_loop
	JMP  loop_finished

copy_all_from_history:
	MOVQ R11, R15
	SUBQ $0x10, R15
	JB   copy_5_small

copy_5_loop:
	MOVUPS (R14), X0
	MOVUPS X0, (BX)
	ADDQ   $0x10, R14
	ADDQ   $0x10, BX
	SUBQ   $0x10, R15
	JAE    copy_5_loop
	LEAQ   16(R14)(R15*1), R14
	LEAQ   16(BX)(R15*1), BX
	MOVUPS -16(R14), X0
	MOVUPS X0, -16(BX)
	JMP    copy_5_end

copy_5_small:
	CMPQ R11, $0x03
	JE   copy_5_move_3
	JB   copy_5_move_1or2
	CMPQ R11, $0x08
	JB   copy_5_move_4through7
	JMP  copy_5_move_8through16

copy_5_move_1or2:
	MOVB (R14), R15
	MOVB -1(R14)(R11*1), BP
	MOVB R15, (BX)
	MOVB BP, -1(BX)(R11*1)
	ADDQ R11, R14
	ADDQ R11, BX
	JMP  copy_5_end

copy_5_move_3:
	MOVW (R14), R15
	MOVB 2(R14), BP
	MOVW R15, (BX)
	MOVB BP, 2(BX)
	ADDQ R11, R14
	ADDQ R11, BX
	JMP  copy_5_end

copy_5_move_4through7:
	MOVL (R14), R15
	MOVL -4(R14)(R11*1), BP
	MOVL R15, (BX)
	MOVL BP, -4(BX)(R11*1)
	ADDQ R11, R14
	ADDQ R11, BX
	JMP  copy_5_end

copy_5_move_8through16:
	MOVQ (R14), R15
	MOVQ -8(R14)(R11*1), BP
	MOVQ R15, (BX)
	MOVQ BP, -8(BX)(R11*1)
	ADDQ R11, R14
	ADDQ R11, BX

copy_5_end:
	ADDQ R11, DI
	SUBQ R11, R13

	// Copy match from the current buffer
copy_match:
	MOVQ BX, R11
	SUBQ R12, R11

	// ml <= mo
	CMPQ R13, R12
	JA   copy_overlapping_match

	// Copy non-overlapping match
	ADDQ R13, DI
	MOVQ R13, R12
	SUBQ $0x10, R12
	JB   copy_2_small

copy_2_loop:
	MOVUPS (R11), X0
	MOVUPS X0, (BX)
	ADDQ   $0x10, R11
	ADDQ   $0x10, BX
	SUBQ   $0x10, R12
	JAE    copy_2_loop
	LEAQ   16(R11)(R12*1), R11
	LEAQ   16(BX)(R12*1), BX
	MOVUPS -16(R11), X0
	MOVUPS X0, -16(BX)
	JMP    copy_2_end

copy_2_small:
	CMPQ R13, $0x03
	JE   copy_2_move_3
	JB   copy_2_move_1or2
	CMPQ R13, $0x08
	JB   copy_2_move_4through7
	JMP  copy_2_move_8through16

copy_2_move_1or2:
	MOVB (R11), R12
	MOVB -1(R11)(R13*1), R14
	MOVB R12, (BX)
	MOVB R14, -1(BX)(R13*1)
	ADDQ R13, R11
	ADDQ R13, BX
	JMP  copy_2_end

copy_2_move_3:
	MOVW (R11), R12
	MOVB 2(R11), R14
	MOVW R12, (BX)
	MOVB R14, 2(BX)
	ADDQ R13, R11
	ADDQ R13, BX
	JMP  copy_2_end

copy_2_move_4through7:
	MOVL (R11), R12
	MOVL -4(R11)(R13*1), R14
	MOVL R12, (BX)
	MOVL R14, -4(BX)(R13*1)
	ADDQ R13, R11
	ADDQ R13, BX
	JMP  copy_2_end

copy_2_move_8through16:
	MOVQ (R11), R12
	MOVQ -8(R11)(R13*1), R14
	MOVQ R12, (BX)
	MOVQ R14, -8(BX)(R13*1)
	ADDQ R13, R11
	ADDQ R13, BX

copy_2_end:
	JMP handle_loop

	// Copy overlapping match
copy_overlapping_match:
	ADDQ R13, DI

copy_slow_3:
	MOVB (R11), R12
	MOVB R12, (BX)
	INCQ R11
	INCQ BX
	DECQ R13
	JNZ  copy_slow_3

handle_loop:
	ADDQ $0x18, AX
	INCQ DX
	CMPQ DX, CX
	JB   main_loop

loop_finished:
	// Return value
	MOVB $0x01, ret+8(FP)

	// Update the context
	MOVQ ctx+0(FP), AX
	MOVQ DX, 24(AX)
	MOVQ DI, 104(AX)
	SUBQ 80(AX), SI
	MOVQ SI, 112(AX)
	RET

error_match_off_too_big:
	// Return value
	MOVB $0x00, ret+8(FP)

	// Update the context
	MOVQ ctx+0(FP), AX
	MOVQ DX, 24(AX)
	MOVQ DI, 104(AX)
	SUBQ 80(AX), SI
	MOVQ SI, 112(AX)
	RET

empty_seqs:
	// Return value
	MOVB $0x01, ret+8(FP)
	RET

// func sequenceDecs_decodeSync_amd64(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int
// Requires: CMOV, SSE
TEXT ·sequenceDecs_decodeSync_amd64(SB), $64-32
	MOVQ    br+8(FP), AX
	MOVQ    32(AX), DX
	MOVBQZX 40(AX), BX
	MOVQ    24(AX), SI
	MOVQ    (AX), AX
	ADDQ    SI, AX
	MOVQ    AX, (SP)
	MOVQ    ctx+16(FP), AX
	MOVQ    72(AX), DI
	MOVQ    80(AX), R8
	MOVQ    88(AX), R9
	XORQ    CX, CX
	MOVQ    CX, 8(SP)
	MOVQ    CX, 16(SP)
	MOVQ    CX, 24(SP)
	MOVQ    112(AX), R10
	MOVQ    128(AX), CX
	MOVQ    CX, 32(SP)
	MOVQ    144(AX), R11
	MOVQ    136(AX), R12
	MOVQ    200(AX), CX
	MOVQ    CX, 56(SP)
	MOVQ    176(AX), CX
	MOVQ    CX, 48(SP)
	MOVQ    184(AX), AX
	MOVQ    AX, 40(SP)
	MOVQ    40(SP), AX
	ADDQ    AX, 48(SP)

	// Calculate poiter to s.out[cap(s.out)] (a past-end pointer)
	ADDQ R10, 32(SP)

	// outBase += outPosition
	ADDQ R12, R10

sequenceDecs_decodeSync_amd64_main_loop:
	MOVQ (SP), R13

	// Fill bitreader to have enough for the offset and match length.
	CMPQ SI, $0x08
	JL   sequenceDecs_decodeSync_amd64_fill_byte_by_byte
	MOVQ BX, AX
	SHRQ $0x03, AX
	SUBQ AX, R13
	MOVQ (R13), DX
	SUBQ AX, SI
	ANDQ $0x07, BX
	JMP  sequenceDecs_decodeSync_amd64_fill_end

sequenceDecs_decodeSync_amd64_fill_byte_by_byte:
	CMPQ    SI, $0x00
	JLE     sequenceDecs_decodeSync_amd64_fill_check_overread
	CMPQ    BX, $0x07
	JLE     sequenceDecs_decodeSync_amd64_fill_end
	SHLQ    $0x08, DX
	SUBQ    $0x01, R13
	SUBQ    $0x01, SI
	SUBQ    $0x08, BX
	MOVBQZX (R13), AX
	ORQ     AX, DX
	JMP     sequenceDecs_decodeSync_amd64_fill_byte_by_byte

sequenceDecs_decodeSync_amd64_fill_check_overread:
	CMPQ BX, $0x40
	JA   error_overread

sequenceDecs_decodeSync_amd64_fill_end:
	// Update offset
	MOVQ  R9, AX
	MOVQ  BX, CX
	MOVQ  DX, R14
	SHLQ  CL, R14
	MOVB  AH, CL
	SHRQ  $0x20, AX
	TESTQ CX, CX
	JZ    sequenceDecs_decodeSync_amd64_of_update_zero
	ADDQ  CX, BX
	CMPQ  BX, $0x40
	JA    sequenceDecs_decodeSync_amd64_of_update_zero
	CMPQ  CX, $0x40
	JAE   sequenceDecs_decodeSync_amd64_of_update_zero
	NEGQ  CX
	SHRQ  CL, R14
	ADDQ  R14, AX

sequenceDecs_decodeSync_amd64_of_update_zero:
	MOVQ AX, 8(SP)

	// Update match length
	MOVQ  R8, AX
	MOVQ  BX, CX
	MOVQ  DX, R14
	SHLQ  CL, R14
	MOVB  AH, CL
	SHRQ  $0x20, AX
	TESTQ CX, CX
	JZ    sequenceDecs_decodeSync_amd64_ml_update_zero
	ADDQ  CX, BX
	CMPQ  BX, $0x40
	JA    sequenceDecs_decodeSync_amd64_ml_update_zero
	CMPQ  CX, $0x40
	JAE   sequenceDecs_decodeSync_amd64_ml_update_zero
	NEGQ  CX
	SHRQ  CL, R14
	ADDQ  R14, AX

sequenceDecs_decodeSync_amd64_ml_update_zero:
	MOVQ AX, 16(SP)

	// Fill bitreader to have enough for the remaining
	CMPQ SI, $0x08
	JL   sequenceDecs_decodeSync_amd64_fill_2_byte_by_byte
	MOVQ BX, AX
	SHRQ $0x03, AX
	SUBQ AX, R13
	MOVQ (R13), DX
	SUBQ AX, SI
	ANDQ $0x07, BX
	JMP  sequenceDecs_decodeSync_amd64_fill_2_end

sequenceDecs_decodeSync_amd64_fill_2_byte_by_byte:
	CMPQ    SI, $0x00
	JLE     sequenceDecs_decodeSync_amd64_fill_2_check_overread
	CMPQ    BX, $0x07
	JLE     sequenceDecs_decodeSync_amd64_fill_2_end
	SHLQ    $0x08, DX
	SUBQ    $0x01, R13
	SUBQ    $0x01, SI
	SUBQ    $0x08, BX
	MOVBQZX (R13), AX
	ORQ     AX, DX
	JMP     sequenceDecs_decodeSync_amd64_fill_2_byte_by_byte

sequenceDecs_decodeSync_amd64_fill_2_check_overread:
	CMPQ BX, $0x40
	JA   error_overread

sequenceDecs_decodeSync_amd64_fill_2_end:
	// Update literal length
	MOVQ  DI, AX
	MOVQ  BX, CX
	MOVQ  DX, R14
	SHLQ  CL, R14
	MOVB  AH, CL
	SHRQ  $0x20, AX
	TESTQ CX, CX
	JZ    sequenceDecs_decodeSync_amd64_ll_update_zero
	ADDQ  CX, BX
	CMPQ  BX, $0x40
	JA    sequenceDecs_decodeSync_amd64_ll_update_zero
	CMPQ  CX, $0x40
	JAE   sequenceDecs_decodeSync_amd64_ll_update_zero
	NEGQ  CX
	SHRQ  CL, R14
	ADDQ  R14, AX

sequenceDecs_decodeSync_amd64_ll_update_zero:
	MOVQ AX, 24(SP)

	// Fill bitreader for state updates
	MOVQ    R13, (SP)
	MOVQ    R9, AX
	SHRQ    $0x08, AX
	MOVBQZX AL, AX
	MOVQ    ctx+16(FP), CX
	CMPQ    96(CX), $0x00
	JZ      sequenceDecs_decodeSync_amd64_skip_update

	// Update Literal Length State
	MOVBQZX DI, R13
	SHRQ    $0x10, DI
	MOVWQZX DI, DI
	LEAQ    (BX)(R13*1), CX
	MOVQ    DX, R14
	MOVQ    CX, BX
	ROLQ    CL, R14
	MOVL    $0x00000001, R15
	MOVB    R13, CL
	SHLL    CL, R15
	DECL    R15
	ANDQ    R15, R14
	ADDQ    R14, DI

	// Load ctx.llTable
	MOVQ ctx+16(FP), CX
	MOVQ (CX), CX
	MOVQ (CX)(DI*8), DI

	// Update Match Length State
	MOVBQZX R8, R13
	SHRQ    $0x10, R8
	MOVWQZX R8, R8
	LEAQ    (BX)(R13*1), CX
	MOVQ    DX, R14
	MOVQ    CX, BX
	ROLQ    CL, R14
	MOVL    $0x00000001, R15
	MOVB    R13, CL
	SHLL    CL, R15
	DECL    R15
	ANDQ    R15, R14
	ADDQ    R14, R8

	// Load ctx.mlTable
	MOVQ ctx+16(FP), CX
	MOVQ 24(CX), CX
	MOVQ (CX)(R8*8), R8

	// Update Offset State
	MOVBQZX R9, R13
	SHRQ    $0x10, R9
	MOVWQZX R9, R9
	LEAQ    (BX)(R13*1), CX
	MOVQ    DX, R14
	MOVQ    CX, BX
	ROLQ    CL, R14
	MOVL    $0x00000001, R15
	MOVB    R13, CL
	SHLL    CL, R15
	DECL    R15
	ANDQ    R15, R14
	ADDQ    R14, R9

	// Load ctx.ofTable
	MOVQ ctx+16(FP), CX
	MOVQ 48(CX), CX
	MOVQ (CX)(R9*8), R9

sequenceDecs_decodeSync_amd64_skip_update:
	// Adjust offset
	MOVQ   s+0(FP), CX
	MOVQ   8(SP), R13
	CMPQ   AX, $0x01
	JBE    sequenceDecs_decodeSync_amd64_adjust_offsetB_1_or_0
	MOVUPS 144(CX), X0
	MOVQ   R13, 144(CX)
	MOVUPS X0, 152(CX)
	JMP    sequenceDecs_decodeSync_amd64_after_adjust

sequenceDecs_decodeSync_amd64_adjust_offsetB_1_or_0:
	CMPQ 24(SP), $0x00000000
	JNE  sequenceDecs_decodeSync_amd64_adjust_offset_maybezero
	INCQ R13
	JMP  sequenceDecs_decodeSync_amd64_adjust_offset_nonzero

sequenceDecs_decodeSync_amd64_adjust_offset_maybezero:
	TESTQ R13, R13
	JNZ   sequenceDecs_decodeSync_amd64_adjust_offset_nonzero
	MOVQ  144(CX), R13
	JMP   sequenceDecs_decodeSync_amd64_after_adjust

sequenceDecs_decodeSync_amd64_adjust_offset_nonzero:
	MOVQ    R13, AX
	XORQ    R14, R14
	MOVQ    $-1, R15
	CMPQ    R13, $0x03
	CMOVQEQ R14, AX
	CMOVQEQ R15, R14
	ADDQ    144(CX)(AX*8), R14
	JNZ     sequenceDecs_decodeSync_amd64_adjust_temp_valid
	MOVQ    $0x00000001, R14

sequenceDecs_decodeSync_amd64_adjust_temp_valid:
	CMPQ R13, $0x01
	JZ   sequenceDecs_decodeSync_amd64_adjust_skip
	MOVQ 152(CX), AX
	MOVQ AX, 160(CX)

sequenceDecs_decodeSync_amd64_adjust_skip:
	MOVQ 144(CX), AX
	MOVQ AX, 152(CX)
	MOVQ R14, 144(CX)
	MOVQ R14, R13

sequenceDecs_decodeSync_amd64_after_adjust:
	MOVQ R13, 8(SP)

	// Check values
	MOVQ  16(SP), AX
	MOVQ  24(SP), CX
	LEAQ  (AX)(CX*1), R14
	MOVQ  s+0(FP), R15
	ADDQ  R14, 256(R15)
	MOVQ  ctx+16(FP), R14
	SUBQ  CX, 104(R14)
	JS    error_not_enough_literals
	CMPQ  AX, $0x00020002
	JA    sequenceDecs_decodeSync_amd64_error_match_len_too_big
	TESTQ R13, R13
	JNZ   sequenceDecs_decodeSync_amd64_match_len_ofs_ok
	TESTQ AX, AX
	JNZ   sequenceDecs_decodeSync_amd64_error_match_len_ofs_mismatch

sequenceDecs_decodeSync_amd64_match_len_ofs_ok:
	MOVQ 24(SP), AX
	MOVQ 8(SP), CX
	MOVQ 16(SP), R13

	// Check if we have enough space in s.out
	LEAQ (AX)(R13*1), R14
	ADDQ R10, R14
	CMPQ R14, 32(SP)
	JA   error_not_enough_space

	// Copy literals
	TESTQ AX, AX
	JZ    check_offset
	XORQ  R14, R14

copy_1:
	MOVUPS (R11)(R14*1), X0
	MOVUPS X0, (R10)(R14*1)
	ADDQ   $0x10, R14
	CMPQ   R14, AX
	JB     copy_1
	ADDQ   AX, R11
	ADDQ   AX, R10
	ADDQ   AX, R12

	// Malformed input if seq.mo > t+len(hist) || seq.mo > s.windowSize)
check_offset:
	MOVQ R12, AX
	ADDQ 40(SP), AX
	CMPQ CX, AX
	JG   error_match_off_too_big
	CMPQ CX, 56(SP)
	JG   error_match_off_too_big

	// Copy match from history
	MOVQ CX, AX
	SUBQ R12, AX
	JLS  copy_match
	MOVQ 48(SP), R14
	SUBQ AX, R14
	CMPQ R13, AX
	JG   copy_all_from_history
	MOVQ R13, AX
	SUBQ $0x10, AX
	JB   copy_4_small

copy_4_loop:
	MOVUPS (R14), X0
	MOVUPS X0, (R10)
	ADDQ   $0x10, R14
	ADDQ   $0x10, R10
	SUBQ   $0x10, AX
	JAE    copy_4_loop
	LEAQ   16(R14)(AX*1), R14
	LEAQ   16(R10)(AX*1), R10
	MOVUPS -16(R14), X0
	MOVUPS X0, -16(R10)
	JMP    copy_4_end

copy_4_small:
	CMPQ R13, $0x03
	JE   copy_4_move_3
	CMPQ R13, $0x08
	JB   copy_4_move_4through7
	JMP  copy_4_move_8through16

copy_4_move_3:
	MOVW (R14), AX
	MOVB 2(R14), CL
	MOVW AX, (R10)
	MOVB CL, 2(R10)
	ADDQ R13, R14
	ADDQ R13, R10
	JMP  copy_4_end

copy_4_move_4through7:
	MOVL (R14), AX
	MOVL -4(R14)(R13*1), CX
	MOVL AX, (R10)
	MOVL CX, -4(R10)(R13*1)
	ADDQ R13, R14
	ADDQ R13, R10
	JMP  copy_4_end

copy_4_move_8through16:
	MOVQ (R14), AX
	MOVQ -8(R14)(R13*1), CX
	MOVQ AX, (R10)
	MOVQ CX, -8(R10)(R13*1)
	ADDQ R13, R14
	ADDQ R13, R10

copy_4_end:
	ADDQ R13, R12
	JMP  handle_loop
	JMP loop_finished

copy_all_from_history:
	MOVQ AX, R15
	SUBQ $0x10, R15
	JB   copy_5_small

copy_5_loop:
	MOVUPS (R14), X0
	MOVUPS X0, (R10)
	ADDQ   $0x10, R14
	ADDQ   $0x10, R10
	SUBQ   $0x10, R15
	JAE    copy_5_loop
	LEAQ   16(R14)(R15*1), R14
	LEAQ   16(R10)(R15*1), R10
	MOVUPS -16(R14), X0
	MOVUPS X0, -16(R10)
	JMP    copy_5_end

copy_5_small:
	CMPQ AX, $0x03
	JE   copy_5_move_3
	JB   copy_5_move_1or2
	CMPQ AX, $0x08
	JB   copy_5_move_4through7
	JMP  copy_5_move_8through16

copy_5_move_1or2:
	MOVB (R14), R15
	MOVB -1(R14)(AX*1), BP
	MOVB R15, (R10)
	MOVB BP, -1(R10)(AX*1)
	ADDQ AX, R14
	ADDQ AX, R10
	JMP  copy_5_end

copy_5_move_3:
	MOVW (R14), R15
	MOVB 2(R14), BP
	MOVW R15, (R10)
	MOVB BP, 2(R10)
	ADDQ AX, R14
	ADDQ AX, R10
	JMP  copy_5_end

copy_5_move_4through7:
	MOVL (R14), R15
	MOVL -4(R14)(AX*1), BP
	MOVL R15, (R10)
	MOVL BP, -4(R10)(AX*1)
	ADDQ AX, R14
	ADDQ AX, R10
	JMP  copy_5_end

copy_5_move_8through16:
	MOVQ (R14), R15
	MOVQ -8(R14)(AX*1), BP
	MOVQ R15, (R10)
	MOVQ BP, -8(R10)(AX*1)
	ADDQ AX, R14
	ADDQ AX, R10

copy_5_end:
	ADDQ AX, R12
	SUBQ AX, R13

	// Copy match from the current buffer
copy_match:
	MOVQ R10, AX
	SUBQ CX, AX

	// ml <= mo
	CMPQ R13, CX
	JA   copy_overlapping_match

	// Copy non-overlapping match
	ADDQ R13, R12
	MOVQ R10, CX
	ADDQ R13, R10

copy_2:
	MOVUPS (AX), X0
	MOVUPS X0, (CX)
	ADDQ   $0x10, AX
	ADDQ   $0x10, CX
	SUBQ   $0x10, R13
	JHI    copy_2
	JMP    handle_loop

	// Copy overlapping match
copy_overlapping_match:
	ADDQ R13, R12

copy_slow_3:
	MOVB (AX), CL
	MOVB CL, (R10)
	INCQ AX
	INCQ R10
	DECQ R13
	JNZ  copy_slow_3

handle_loop:
	MOVQ ctx+16(FP), AX
	DECQ 96(AX)
	JNS  sequenceDecs_decodeSync_amd64_main_loop

loop_finished:
	MOVQ br+8(FP), AX
	MOVQ DX, 32(AX)
	MOVB BL, 40(AX)
	MOVQ SI, 24(AX)

	// Update the context
	MOVQ ctx+16(FP), AX
	MOVQ R12, 136(AX)
	MOVQ 144(AX), CX
	SUBQ CX, R11
	MOVQ R11, 168(AX)

	// Return success
	MOVQ $0x00000000, ret+24(FP)
	RET

	// Return with match length error
sequenceDecs_decodeSync_amd64_error_match_len_ofs_mismatch:
	MOVQ 16(SP), AX
	MOVQ ctx+16(FP), CX
	MOVQ AX, 216(CX)
	MOVQ $0x00000001, ret+24(FP)
	RET

	// Return with match too long error
sequenceDecs_decodeSync_amd64_error_match_len_too_big:
	MOVQ ctx+16(FP), AX
	MOVQ 16(SP), CX
	MOVQ CX, 216(AX)
	MOVQ $0x00000002, ret+24(FP)
	RET

	// Return with match offset too long error
error_match_off_too_big:
	MOVQ ctx+16(FP), AX
	MOVQ 8(SP), CX
	MOVQ CX, 224(AX)
	MOVQ R12, 136(AX)
	MOVQ $0x00000003, ret+24(FP)
	RET

	// Return with not enough literals error
error_not_enough_literals:
	MOVQ ctx+16(FP), AX
	MOVQ 24(SP), CX
	MOVQ CX, 208(AX)
	MOVQ $0x00000004, ret+24(FP)
	RET

	// Return with overread error
error_overread:
	MOVQ $0x00000006, ret+24(FP)
	RET

	// Return with not enough output space error
error_not_enough_space:
	MOVQ ctx+16(FP), AX
	MOVQ 24(SP), CX
	MOVQ CX, 208(AX)
	MOVQ 16(SP), CX
	MOVQ CX, 216(AX)
	MOVQ R12, 136(AX)
	MOVQ $0x00000005, ret+24(FP)
	RET

// func sequenceDecs_decodeSync_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int
// Requires: BMI, BMI2, CMOV, SSE
TEXT ·sequenceDecs_decodeSync_bmi2(SB), $64-32
	MOVQ    br+8(FP), CX
	MOVQ    32(CX), AX
	MOVBQZX 40(CX), DX
	MOVQ    24(CX), BX
	MOVQ    (CX), CX
	ADDQ    BX, CX
	MOVQ    CX, (SP)
	MOVQ    ctx+16(FP), CX
	MOVQ    72(CX), SI
	MOVQ    80(CX), DI
	MOVQ    88(CX), R8
	XORQ    R9, R9
	MOVQ    R9, 8(SP)
	MOVQ    R9, 16(SP)
	MOVQ    R9, 24(SP)
	MOVQ    112(CX), R9
	MOVQ    128(CX), R10
	MOVQ    R10, 32(SP)
	MOVQ    144(CX), R10
	MOVQ    136(CX), R11
	MOVQ    200(CX), R12
	MOVQ    R12, 56(SP)
	MOVQ    176(CX), R12
	MOVQ    R12, 48(SP)
	MOVQ    184(CX), CX
	MOVQ    CX, 40(SP)
	MOVQ    40(SP), CX
	ADDQ    CX, 48(SP)

	// Calculate poiter to s.out[cap(s.out)] (a past-end pointer)
	ADDQ R9, 32(SP)

	// outBase += outPosition
	ADDQ R11, R9

sequenceDecs_decodeSync_bmi2_main_loop:
	MOVQ (SP), R12

	// Fill bitreader to have enough for the offset and match length.
	CMPQ BX, $0x08
	JL   sequenceDecs_decodeSync_bmi2_fill_byte_by_byte
	MOVQ DX, CX
	SHRQ $0x03, CX
	SUBQ CX, R12
	MOVQ (R12), AX
	SUBQ CX, BX
	ANDQ $0x07, DX
	JMP  sequenceDecs_decodeSync_bmi2_fill_end

sequenceDecs_decodeSync_bmi2_fill_byte_by_byte:
	CMPQ    BX, $0x00
	JLE     sequenceDecs_decodeSync_bmi2_fill_check_overread
	CMPQ    DX, $0x07
	JLE     sequenceDecs_decodeSync_bmi2_fill_end
	SHLQ    $0x08, AX
	SUBQ    $0x01, R12
	SUBQ    $0x01, BX
	SUBQ    $0x08, DX
	MOVBQZX (R12), CX
	ORQ     CX, AX
	JMP     sequenceDecs_decodeSync_bmi2_fill_byte_by_byte

sequenceDecs_decodeSync_bmi2_fill_check_overread:
	CMPQ DX, $0x40
	JA   error_overread

sequenceDecs_decodeSync_bmi2_fill_end:
	// Update offset
	MOVQ   $0x00000808, CX
	BEXTRQ CX, R8, R13
	MOVQ   AX, R14
	LEAQ   (DX)(R13*1), CX
	ROLQ   CL, R14
	BZHIQ  R13, R14, R14
	MOVQ   CX, DX
	MOVQ   R8, CX
	SHRQ   $0x20, CX
	ADDQ   R14, CX
	MOVQ   CX, 8(SP)

	// Update match length
	MOVQ   $0x00000808, CX
	BEXTRQ CX, DI, R13
	MOVQ   AX, R14
	LEAQ   (DX)(R13*1), CX
	ROLQ   CL, R14
	BZHIQ  R13, R14, R14
	MOVQ   CX, DX
	MOVQ   DI, CX
	SHRQ   $0x20, CX
	ADDQ   R14, CX
	MOVQ   CX, 16(SP)

	// Fill bitreader to have enough for the remaining
	CMPQ BX, $0x08
	JL   sequenceDecs_decodeSync_bmi2_fill_2_byte_by_byte
	MOVQ DX, CX
	SHRQ $0x03, CX
	SUBQ CX, R12
	MOVQ (R12), AX
	SUBQ CX, BX
	ANDQ $0x07, DX
	JMP  sequenceDecs_decodeSync_bmi2_fill_2_end

sequenceDecs_decodeSync_bmi2_fill_2_byte_by_byte:
	CMPQ    BX, $0x00
	JLE     sequenceDecs_decodeSync_bmi2_fill_2_check_overread
	CMPQ    DX, $0x07
	JLE     sequenceDecs_decodeSync_bmi2_fill_2_end
	SHLQ    $0x08, AX
	SUBQ    $0x01, R12
	SUBQ    $0x01, BX
	SUBQ    $0x08, DX
	MOVBQZX (R12), CX
	ORQ     CX, AX
	JMP     sequenceDecs_decodeSync_bmi2_fill_2_byte_by_byte

sequenceDecs_decodeSync_bmi2_fill_2_check_overread:
	CMPQ DX, $0x40
	JA   error_overread

sequenceDecs_decodeSync_bmi2_fill_2_end:
	// Update literal length
	MOVQ   $0x00000808, CX
	BEXTRQ CX, SI, R13
	MOVQ   AX, R14
	LEAQ   (DX)(R13*1), CX
	ROLQ   CL, R14
	BZHIQ  R13, R14, R14
	MOVQ   CX, DX
	MOVQ   SI, CX
	SHRQ   $0x20, CX
	ADDQ   R14, CX
	MOVQ   CX, 24(SP)

	// Fill bitreader for state updates
	MOVQ    R12, (SP)
	MOVQ    $0x00000808, CX
	BEXTRQ  CX, R8, R12
	MOVQ    ctx+16(FP), CX
	CMPQ    96(CX), $0x00
	JZ      sequenceDecs_decodeSync_bmi2_skip_update
	LEAQ    (SI)(DI*1), R13
	ADDQ    R8, R13
	MOVBQZX R13, R13
	LEAQ    (DX)(R13*1), CX
	MOVQ    AX, R14
	MOVQ    CX, DX
	ROLQ    CL, R14
	BZHIQ   R13, R14, R14

	// Update Offset State
	BZHIQ  R8, R14, CX
	SHRXQ  R8, R14, R14
	MOVQ   $0x00001010, R13
	BEXTRQ R13, R8, R8
	ADDQ   CX, R8

	// Load ctx.ofTable
	MOVQ ctx+16(FP), CX
	MOVQ 48(CX), CX
	MOVQ (CX)(R8*8), R8

	// Update Match Length State
	BZHIQ  DI, R14, CX
	SHRXQ  DI, R14, R14
	MOVQ   $0x00001010, R13
	BEXTRQ R13, DI, DI
	ADDQ   CX, DI

	// Load ctx.mlTable
	MOVQ ctx+16(FP), CX
	MOVQ 24(CX), CX
	MOVQ (CX)(DI*8), DI

	// Update Literal Length State
	BZHIQ  SI, R14, CX
	MOVQ   $0x00001010, R13
	BEXTRQ R13, SI, SI
	ADDQ   CX, SI

	// Load ctx.llTable
	MOVQ ctx+16(FP), CX
	MOVQ (CX), CX
	MOVQ (CX)(SI*8), SI

sequenceDecs_decodeSync_bmi2_skip_update:
	// Adjust offset
	MOVQ   s+0(FP), CX
	MOVQ   8(SP), R13
	CMPQ   R12, $0x01
	JBE    sequenceDecs_decodeSync_bmi2_adjust_offsetB_1_or_0
	MOVUPS 144(CX), X0
	MOVQ   R13, 144(CX)
	MOVUPS X0, 152(CX)
	JMP    sequenceDecs_decodeSync_bmi2_after_adjust

sequenceDecs_decodeSync_bmi2_adjust_offsetB_1_or_0:
	CMPQ 24(SP), $0x00000000
	JNE  sequenceDecs_decodeSync_bmi2_adjust_offset_maybezero
	INCQ R13
	JMP  sequenceDecs_decodeSync_bmi2_adjust_offset_nonzero

sequenceDecs_decodeSync_bmi2_adjust_offset_maybezero:
	TESTQ R13, R13
	JNZ   sequenceDecs_decodeSync_bmi2_adjust_offset_nonzero
	MOVQ  144(CX), R13
	JMP   sequenceDecs_decodeSync_bmi2_after_adjust

sequenceDecs_decodeSync_bmi2_adjust_offset_nonzero:
	MOVQ    R13, R12
	XORQ    R14, R14
	MOVQ    $-1, R15
	CMPQ    R13, $0x03
	CMOVQEQ R14, R12
	CMOVQEQ R15, R14
	ADDQ    144(CX)(R12*8), R14
	JNZ     sequenceDecs_decodeSync_bmi2_adjust_temp_valid
	MOVQ    $0x00000001, R14

sequenceDecs_decodeSync_bmi2_adjust_temp_valid:
	CMPQ R13, $0x01
	JZ   sequenceDecs_decodeSync_bmi2_adjust_skip
	MOVQ 152(CX), R12
	MOVQ R12, 160(CX)

sequenceDecs_decodeSync_bmi2_adjust_skip:
	MOVQ 144(CX), R12
	MOVQ R12, 152(CX)
	MOVQ R14, 144(CX)
	MOVQ R14, R13

sequenceDecs_decodeSync_bmi2_after_adjust:
	MOVQ R13, 8(SP)

	// Check values
	MOVQ  16(SP), CX
	MOVQ  24(SP), R12
	LEAQ  (CX)(R12*1), R14
	MOVQ  s+0(FP), R15
	ADDQ  R14, 256(R15)
	MOVQ  ctx+16(FP), R14
	SUBQ  R12, 104(R14)
	JS    error_not_enough_literals
	CMPQ  CX, $0x00020002
	JA    sequenceDecs_decodeSync_bmi2_error_match_len_too_big
	TESTQ R13, R13
	JNZ   sequenceDecs_decodeSync_bmi2_match_len_ofs_ok
	TESTQ CX, CX
	JNZ   sequenceDecs_decodeSync_bmi2_error_match_len_ofs_mismatch

sequenceDecs_decodeSync_bmi2_match_len_ofs_ok:
	MOVQ 24(SP), CX
	MOVQ 8(SP), R12
	MOVQ 16(SP), R13

	// Check if we have enough space in s.out
	LEAQ (CX)(R13*1), R14
	ADDQ R9, R14
	CMPQ R14, 32(SP)
	JA   error_not_enough_space

	// Copy literals
	TESTQ CX, CX
	JZ    check_offset
	XORQ  R14, R14

copy_1:
	MOVUPS (R10)(R14*1), X0
	MOVUPS X0, (R9)(R14*1)
	ADDQ   $0x10, R14
	CMPQ   R14, CX
	JB     copy_1
	ADDQ   CX, R10
	ADDQ   CX, R9
	ADDQ   CX, R11

	// Malformed input if seq.mo > t+len(hist) || seq.mo > s.windowSize)
check_offset:
	MOVQ R11, CX
	ADDQ 40(SP), CX
	CMPQ R12, CX
	JG   error_match_off_too_big
	CMPQ R12, 56(SP)
	JG   error_match_off_too_big

	// Copy match from history
	MOVQ R12, CX
	SUBQ R11, CX
	JLS  copy_match
	MOVQ 48(SP), R14
	SUBQ CX, R14
	CMPQ R13, CX
	JG   copy_all_from_history
	MOVQ R13, CX
	SUBQ $0x10, CX
	JB   copy_4_small

copy_4_loop:
	MOVUPS (R14), X0
	MOVUPS X0, (R9)
	ADDQ   $0x10, R14
	ADDQ   $0x10, R9
	SUBQ   $0x10, CX
	JAE    copy_4_loop
	LEAQ   16(R14)(CX*1), R14
	LEAQ   16(R9)(CX*1), R9
	MOVUPS -16(R14), X0
	MOVUPS X0, -16(R9)
	JMP    copy_4_end

copy_4_small:
	CMPQ R13, $0x03
	JE   copy_4_move_3
	CMPQ R13, $0x08
	JB   copy_4_move_4through7
	JMP  copy_4_move_8through16

copy_4_move_3:
	MOVW (R14), CX
	MOVB 2(R14), R12
	MOVW CX, (R9)
	MOVB R12, 2(R9)
	ADDQ R13, R14
	ADDQ R13, R9
	JMP  copy_4_end

copy_4_move_4through7:
	MOVL (R14), CX
	MOVL -4(R14)(R13*1), R12
	MOVL CX, (R9)
	MOVL R12, -4(R9)(R13*1)
	ADDQ R13, R14
	ADDQ R13, R9
	JMP  copy_4_end

copy_4_move_8through16:
	MOVQ (R14), CX
	MOVQ -8(R14)(R13*1), R12
	MOVQ CX, (R9)
	MOVQ R12, -8(R9)(R13*1)
	ADDQ R13, R14
	ADDQ R13, R9

copy_4_end:
	ADDQ R13, R11
	JMP  handle_loop
	JMP loop_finished

copy_all_from_history:
	MOVQ CX, R15
	SUBQ $0x10, R15
	JB   copy_5_small

copy_5_loop:
	MOVUPS (R14), X0
	MOVUPS X0, (R9)
	ADDQ   $0x10, R14
	ADDQ   $0x10, R9
	SUBQ   $0x10, R15
	JAE    copy_5_loop
	LEAQ   16(R14)(R15*1), R14
	LEAQ   16(R9)(R15*1), R9
	MOVUPS -16(R14), X0
	MOVUPS X0, -16(R9)
	JMP    copy_5_end

copy_5_small:
	CMPQ CX, $0x03
	JE   copy_5_move_3
	JB   copy_5_move_1or2
	CMPQ CX, $0x08
	JB   copy_5_move_4through7
	JMP  copy_5_move_8through16

copy_5_move_1or2:
	MOVB (R14), R15
	MOVB -1(R14)(CX*1), BP
	MOVB R15, (R9)
	MOVB BP, -1(R9)(CX*1)
	ADDQ CX, R14
	ADDQ CX, R9
	JMP  copy_5_end

copy_5_move_3:
	MOVW (R14), R15
	MOVB 2(R14), BP
	MOVW R15, (R9)
	MOVB BP, 2(R9)
	ADDQ CX, R14
	ADDQ CX, R9
	JMP  copy_5_end

copy_5_move_4through7:
	MOVL (R14), R15
	MOVL -4(R14)(CX*1), BP
	MOVL R15, (R9)
	MOVL BP, -4(R9)(CX*1)
	ADDQ CX, R14
	ADDQ CX, R9
	JMP  copy_5_end

copy_5_move_8through16:
	MOVQ (R14), R15
	MOVQ -8(R14)(CX*1), BP
	MOVQ R15, (R9)
	MOVQ BP, -8(R9)(CX*1)
	ADDQ CX, R14
	ADDQ CX, R9

copy_5_end:
	ADDQ CX, R11
	SUBQ CX, R13

	// Copy match from the current buffer
copy_match:
	MOVQ R9, CX
	SUBQ R12, CX

	// ml <= mo
	CMPQ R13, R12
	JA   copy_overlapping_match

	// Copy non-overlapping match
	ADDQ R13, R11
	MOVQ R9, R12
	ADDQ R13, R9

copy_2:
	MOVUPS (CX), X0
	MOVUPS X0, (R12)
	ADDQ   $0x10, CX
	ADDQ   $0x10, R12
	SUBQ   $0x10, R13
	JHI    copy_2
	JMP    handle_loop

	// Copy overlapping match
copy_overlapping_match:
	ADDQ R13, R11

copy_slow_3:
	MOVB (CX), R12
	MOVB R12, (R9)
	INCQ CX
	INCQ R9
	DECQ R13
	JNZ  copy_slow_3

handle_loop:
	MOVQ ctx+16(FP), CX
	DECQ 96(CX)
	JNS  sequenceDecs_decodeSync_bmi2_main_loop

loop_finished:
	MOVQ br+8(FP), CX
	MOVQ AX, 32(CX)
	MOVB DL, 40(CX)
	MOVQ BX, 24(CX)

	// Update the context
	MOVQ ctx+16(FP), AX
	MOVQ R11, 136(AX)
	MOVQ 144(AX), CX
	SUBQ CX, R10
	MOVQ R10, 168(AX)

	// Return success
	MOVQ $0x00000000, ret+24(FP)
	RET

	// Return with match length error
sequenceDecs_decodeSync_bmi2_error_match_len_ofs_mismatch:
	MOVQ 16(SP), AX
	MOVQ ctx+16(FP), CX
	MOVQ AX, 216(CX)
	MOVQ $0x00000001, ret+24(FP)
	RET

	// Return with match too long error
sequenceDecs_decodeSync_bmi2_error_match_len_too_big:
	MOVQ ctx+16(FP), AX
	MOVQ 16(SP), CX
	MOVQ CX, 216(AX)
	MOVQ $0x00000002, ret+24(FP)
	RET

	// Return with match offset too long error
error_match_off_too_big:
	MOVQ ctx+16(FP), AX
	MOVQ 8(SP), CX
	MOVQ CX, 224(AX)
	MOVQ R11, 136(AX)
	MOVQ $0x00000003, ret+24(FP)
	RET

	// Return with not enough literals error
error_not_enough_literals:
	MOVQ ctx+16(FP), AX
	MOVQ 24(SP), CX
	MOVQ CX, 208(AX)
	MOVQ $0x00000004, ret+24(FP)
	RET

	// Return with overread error
error_overread:
	MOVQ $0x00000006, ret+24(FP)
	RET

	// Return with not enough output space error
error_not_enough_space:
	MOVQ ctx+16(FP), AX
	MOVQ 24(SP), CX
	MOVQ CX, 208(AX)
	MOVQ 16(SP), CX
	MOVQ CX, 216(AX)
	MOVQ R11, 136(AX)
	MOVQ $0x00000005, ret+24(FP)
	RET

// func sequenceDecs_decodeSync_safe_amd64(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int
// Requires: CMOV, SSE
TEXT ·sequenceDecs_decodeSync_safe_amd64(SB), $64-32
	MOVQ    br+8(FP), AX
	MOVQ    32(AX), DX
	MOVBQZX 40(AX), BX
	MOVQ    24(AX), SI
	MOVQ    (AX), AX
	ADDQ    SI, AX
	MOVQ    AX, (SP)
	MOVQ    ctx+16(FP), AX
	MOVQ    72(AX), DI
	MOVQ    80(AX), R8
	MOVQ    88(AX), R9
	XORQ    CX, CX
	MOVQ    CX, 8(SP)
	MOVQ    CX, 16(SP)
	MOVQ    CX, 24(SP)
	MOVQ    112(AX), R10
	MOVQ    128(AX), CX
	MOVQ    CX, 32(SP)
	MOVQ    144(AX), R11
	MOVQ    136(AX), R12
	MOVQ    200(AX), CX
	MOVQ    CX, 56(SP)
	MOVQ    176(AX), CX
	MOVQ    CX, 48(SP)
	MOVQ    184(AX), AX
	MOVQ    AX, 40(SP)
	MOVQ    40(SP), AX
	ADDQ    AX, 48(SP)

	// Calculate poiter to s.out[cap(s.out)] (a past-end pointer)
	ADDQ R10, 32(SP)

	// outBase += outPosition
	ADDQ R12, R10

sequenceDecs_decodeSync_safe_amd64_main_loop:
	MOVQ (SP), R13

	// Fill bitreader to have enough for the offset and match length.
	CMPQ SI, $0x08
	JL   sequenceDecs_decodeSync_safe_amd64_fill_byte_by_byte
	MOVQ BX, AX
	SHRQ $0x03, AX
	SUBQ AX, R13
	MOVQ (R13), DX
	SUBQ AX, SI
	ANDQ $0x07, BX
	JMP  sequenceDecs_decodeSync_safe_amd64_fill_end

sequenceDecs_decodeSync_safe_amd64_fill_byte_by_byte:
	CMPQ    SI, $0x00
	JLE     sequenceDecs_decodeSync_safe_amd64_fill_check_overread
	CMPQ    BX, $0x07
	JLE     sequenceDecs_decodeSync_safe_amd64_fill_end
	SHLQ    $0x08, DX
	SUBQ    $0x01, R13
	SUBQ    $0x01, SI
	SUBQ    $0x08, BX
	MOVBQZX (R13), AX
	ORQ     AX, DX
	JMP     sequenceDecs_decodeSync_safe_amd64_fill_byte_by_byte

sequenceDecs_decodeSync_safe_amd64_fill_check_overread:
	CMPQ BX, $0x40
	JA   error_overread

sequenceDecs_decodeSync_safe_amd64_fill_end:
	// Update offset
	MOVQ  R9, AX
	MOVQ  BX, CX
	MOVQ  DX, R14
	SHLQ  CL, R14
	MOVB  AH, CL
	SHRQ  $0x20, AX
	TESTQ CX, CX
	JZ    sequenceDecs_decodeSync_safe_amd64_of_update_zero
	ADDQ  CX, BX
	CMPQ  BX, $0x40
	JA    sequenceDecs_decodeSync_safe_amd64_of_update_zero
	CMPQ  CX, $0x40
	JAE   sequenceDecs_decodeSync_safe_amd64_of_update_zero
	NEGQ  CX
	SHRQ  CL, R14
	ADDQ  R14, AX

sequenceDecs_decodeSync_safe_amd64_of_update_zero:
	MOVQ AX, 8(SP)

	// Update match length
	MOVQ  R8, AX
	MOVQ  BX, CX
	MOVQ  DX, R14
	SHLQ  CL, R14
	MOVB  AH, CL
	SHRQ  $0x20, AX
	TESTQ CX, CX
	JZ    sequenceDecs_decodeSync_safe_amd64_ml_update_zero
	ADDQ  CX, BX
	CMPQ  BX, $0x40
	JA    sequenceDecs_decodeSync_safe_amd64_ml_update_zero
	CMPQ  CX, $0x40
	JAE   sequenceDecs_decodeSync_safe_amd64_ml_update_zero
	NEGQ  CX
	SHRQ  CL, R14
	ADDQ  R14, AX

sequenceDecs_decodeSync_safe_amd64_ml_update_zero:
	MOVQ AX, 16(SP)

	// Fill bitreader to have enough for the remaining
	CMPQ SI, $0x08
	JL   sequenceDecs_decodeSync_safe_amd64_fill_2_byte_by_byte
	MOVQ BX, AX
	SHRQ $0x03, AX
	SUBQ AX, R13
	MOVQ (R13), DX
	SUBQ AX, SI
	ANDQ $0x07, BX
	JMP  sequenceDecs_decodeSync_safe_amd64_fill_2_end

sequenceDecs_decodeSync_safe_amd64_fill_2_byte_by_byte:
	CMPQ    SI, $0x00
	JLE     sequenceDecs_decodeSync_safe_amd64_fill_2_check_overread
	CMPQ    BX, $0x07
	JLE     sequenceDecs_decodeSync_safe_amd64_fill_2_end
	SHLQ    $0x08, DX
	SUBQ    $0x01, R13
	SUBQ    $0x01, SI
	SUBQ    $0x08, BX
	MOVBQZX (R13), AX
	ORQ     AX, DX
	JMP     sequenceDecs_decodeSync_safe_amd64_fill_2_byte_by_byte

sequenceDecs_decodeSync_safe_amd64_fill_2_check_overread:
	CMPQ BX, $0x40
	JA   error_overread

sequenceDecs_decodeSync_safe_amd64_fill_2_end:
	// Update literal length
	MOVQ  DI, AX
	MOVQ  BX, CX
	MOVQ  DX, R14
	SHLQ  CL, R14
	MOVB  AH, CL
	SHRQ  $0x20, AX
	TESTQ CX, CX
	JZ    sequenceDecs_decodeSync_safe_amd64_ll_update_zero
	ADDQ  CX, BX
	CMPQ  BX, $0x40
	JA    sequenceDecs_decodeSync_safe_amd64_ll_update_zero
	CMPQ  CX, $0x40
	JAE   sequenceDecs_decodeSync_safe_amd64_ll_update_zero
	NEGQ  CX
	SHRQ  CL, R14
	ADDQ  R14, AX

sequenceDecs_decodeSync_safe_amd64_ll_update_zero:
	MOVQ AX, 24(SP)

	// Fill bitreader for state updates
	MOVQ    R13, (SP)
	MOVQ    R9, AX
	SHRQ    $0x08, AX
	MOVBQZX AL, AX
	MOVQ    ctx+16(FP), CX
	CMPQ    96(CX), $0x00
	JZ      sequenceDecs_decodeSync_safe_amd64_skip_update

	// Update Literal Length State
	MOVBQZX DI, R13
	SHRQ    $0x10, DI
	MOVWQZX DI, DI
	LEAQ    (BX)(R13*1), CX
	MOVQ    DX, R14
	MOVQ    CX, BX
	ROLQ    CL, R14
	MOVL    $0x00000001, R15
	MOVB    R13, CL
	SHLL    CL, R15
	DECL    R15
	ANDQ    R15, R14
	ADDQ    R14, DI

	// Load ctx.llTable
	MOVQ ctx+16(FP), CX
	MOVQ (CX), CX
	MOVQ (CX)(DI*8), DI

	// Update Match Length State
	MOVBQZX R8, R13
	SHRQ    $0x10, R8
	MOVWQZX R8, R8
	LEAQ    (BX)(R13*1), CX
	MOVQ    DX, R14
	MOVQ    CX, BX
	ROLQ    CL, R14
	MOVL    $0x00000001, R15
	MOVB    R13, CL
	SHLL    CL, R15
	DECL    R15
	ANDQ    R15, R14
	ADDQ    R14, R8

	// Load ctx.mlTable
	MOVQ ctx+16(FP), CX
	MOVQ 24(CX), CX
	MOVQ (CX)(R8*8), R8

	// Update Offset State
	MOVBQZX R9, R13
	SHRQ    $0x10, R9
	MOVWQZX R9, R9
	LEAQ    (BX)(R13*1), CX
	MOVQ    DX, R14
	MOVQ    CX, BX
	ROLQ    CL, R14
	MOVL    $0x00000001, R15
	MOVB    R13, CL
	SHLL    CL, R15
	DECL    R15
	ANDQ    R15, R14
	ADDQ    R14, R9

	// Load ctx.ofTable
	MOVQ ctx+16(FP), CX
	MOVQ 48(CX), CX
	MOVQ (CX)(R9*8), R9

sequenceDecs_decodeSync_safe_amd64_skip_update:
	// Adjust offset
	MOVQ   s+0(FP), CX
	MOVQ   8(SP), R13
	CMPQ   AX, $0x01
	JBE    sequenceDecs_decodeSync_safe_amd64_adjust_offsetB_1_or_0
	MOVUPS 144(CX), X0
	MOVQ   R13, 144(CX)
	MOVUPS X0, 152(CX)
	JMP    sequenceDecs_decodeSync_safe_amd64_after_adjust

sequenceDecs_decodeSync_safe_amd64_adjust_offsetB_1_or_0:
	CMPQ 24(SP), $0x00000000
	JNE  sequenceDecs_decodeSync_safe_amd64_adjust_offset_maybezero
	INCQ R13
	JMP  sequenceDecs_decodeSync_safe_amd64_adjust_offset_nonzero

sequenceDecs_decodeSync_safe_amd64_adjust_offset_maybezero:
	TESTQ R13, R13
	JNZ   sequenceDecs_decodeSync_safe_amd64_adjust_offset_nonzero
	MOVQ  144(CX), R13
	JMP   sequenceDecs_decodeSync_safe_amd64_after_adjust

sequenceDecs_decodeSync_safe_amd64_adjust_offset_nonzero:
	MOVQ    R13, AX
	XORQ    R14, R14
	MOVQ    $-1, R15
	CMPQ    R13, $0x03
	CMOVQEQ R14, AX
	CMOVQEQ R15, R14
	ADDQ    144(CX)(AX*8), R14
	JNZ     sequenceDecs_decodeSync_safe_amd64_adjust_temp_valid
	MOVQ    $0x00000001, R14

sequenceDecs_decodeSync_safe_amd64_adjust_temp_valid:
	CMPQ R13, $0x01
	JZ   sequenceDecs_decodeSync_safe_amd64_adjust_skip
	MOVQ 152(CX), AX
	MOVQ AX, 160(CX)

sequenceDecs_decodeSync_safe_amd64_adjust_skip:
	MOVQ 144(CX), AX
	MOVQ AX, 152(CX)
	MOVQ R14, 144(CX)
	MOVQ R14, R13

sequenceDecs_decodeSync_safe_amd64_after_adjust:
	MOVQ R13, 8(SP)

	// Check values
	MOVQ  16(SP), AX
	MOVQ  24(SP), CX
	LEAQ  (AX)(CX*1), R14
	MOVQ  s+0(FP), R15
	ADDQ  R14, 256(R15)
	MOVQ  ctx+16(FP), R14
	SUBQ  CX, 104(R14)
	JS    error_not_enough_literals
	CMPQ  AX, $0x00020002
	JA    sequenceDecs_decodeSync_safe_amd64_error_match_len_too_big
	TESTQ R13, R13
	JNZ   sequenceDecs_decodeSync_safe_amd64_match_len_ofs_ok
	TESTQ AX, AX
	JNZ   sequenceDecs_decodeSync_safe_amd64_error_match_len_ofs_mismatch

sequenceDecs_decodeSync_safe_amd64_match_len_ofs_ok:
	MOVQ 24(SP), AX
	MOVQ 8(SP), CX
	MOVQ 16(SP), R13

	// Check if we have enough space in s.out
	LEAQ (AX)(R13*1), R14
	ADDQ R10, R14
	CMPQ R14, 32(SP)
	JA   error_not_enough_space

	// Copy literals
	TESTQ AX, AX
	JZ    check_offset
	MOVQ  AX, R14
	SUBQ  $0x10, R14
	JB    copy_1_small

copy_1_loop:
	MOVUPS (R11), X0
	MOVUPS X0, (R10)
	ADDQ   $0x10, R11
	ADDQ   $0x10, R10
	SUBQ   $0x10, R14
	JAE    copy_1_loop
	LEAQ   16(R11)(R14*1), R11
	LEAQ   16(R10)(R14*1), R10
	MOVUPS -16(R11), X0
	MOVUPS X0, -16(R10)
	JMP    copy_1_end

copy_1_small:
	CMPQ AX, $0x03
	JE   copy_1_move_3
	JB   copy_1_move_1or2
	CMPQ AX, $0x08
	JB   copy_1_move_4through7
	JMP  copy_1_move_8through16

copy_1_move_1or2:
	MOVB (R11), R14
	MOVB -1(R11)(AX*1), R15
	MOVB R14, (R10)
	MOVB R15, -1(R10)(AX*1)
	ADDQ AX, R11
	ADDQ AX, R10
	JMP  copy_1_end

copy_1_move_3:
	MOVW (R11), R14
	MOVB 2(R11), R15
	MOVW R14, (R10)
	MOVB R15, 2(R10)
	ADDQ AX, R11
	ADDQ AX, R10
	JMP  copy_1_end

copy_1_move_4through7:
	MOVL (R11), R14
	MOVL -4(R11)(AX*1), R15
	MOVL R14, (R10)
	MOVL R15, -4(R10)(AX*1)
	ADDQ AX, R11
	ADDQ AX, R10
	JMP  copy_1_end

copy_1_move_8through16:
	MOVQ (R11), R14
	MOVQ -8(R11)(AX*1), R15
	MOVQ R14, (R10)
	MOVQ R15, -8(R10)(AX*1)
	ADDQ AX, R11
	ADDQ AX, R10

copy_1_end:
	ADDQ AX, R12

	// Malformed input if seq.mo > t+len(hist) || seq.mo > s.windowSize)
check_offset:
	MOVQ R12, AX
	ADDQ 40(SP), AX
	CMPQ CX, AX
	JG   error_match_off_too_big
	CMPQ CX, 56(SP)
	JG   error_match_off_too_big

	// Copy match from history
	MOVQ CX, AX
	SUBQ R12, AX
	JLS  copy_match
	MOVQ 48(SP), R14
	SUBQ AX, R14
	CMPQ R13, AX
	JG   copy_all_from_history
	MOVQ R13, AX
	SUBQ $0x10, AX
	JB   copy_4_small

copy_4_loop:
	MOVUPS (R14), X0
	MOVUPS X0, (R10)
	ADDQ   $0x10, R14
	ADDQ   $0x10, R10
	SUBQ   $0x10, AX
	JAE    copy_4_loop
	LEAQ   16(R14)(AX*1), R14
	LEAQ   16(R10)(AX*1), R10
	MOVUPS -16(R14), X0
	MOVUPS X0, -16(R10)
	JMP    copy_4_end

copy_4_small:
	CMPQ R13, $0x03
	JE   copy_4_move_3
	CMPQ R13, $0x08
	JB   copy_4_move_4through7
	JMP  copy_4_move_8through16

copy_4_move_3:
	MOVW (R14), AX
	MOVB 2(R14), CL
	MOVW AX, (R10)
	MOVB CL, 2(R10)
	ADDQ R13, R14
	ADDQ R13, R10
	JMP  copy_4_end

copy_4_move_4through7:
	MOVL (R14), AX
	MOVL -4(R14)(R13*1), CX
	MOVL AX, (R10)
	MOVL CX, -4(R10)(R13*1)
	ADDQ R13, R14
	ADDQ R13, R10
	JMP  copy_4_end

copy_4_move_8through16:
	MOVQ (R14), AX
	MOVQ -8(R14)(R13*1), CX
	MOVQ AX, (R10)
	MOVQ CX, -8(R10)(R13*1)
	ADDQ R13, R14
	ADDQ R13, R10

copy_4_end:
	ADDQ R13, R12
	JMP  handle_loop
	JMP loop_finished

copy_all_from_history:
	MOVQ AX, R15
	SUBQ $0x10, R15
	JB   copy_5_small

copy_5_loop:
	MOVUPS (R14), X0
	MOVUPS X0, (R10)
	ADDQ   $0x10, R14
	ADDQ   $0x10, R10
	SUBQ   $0x10, R15
	JAE    copy_5_loop
	LEAQ   16(R14)(R15*1), R14
	LEAQ   16(R10)(R15*1), R10
	MOVUPS -16(R14), X0
	MOVUPS X0, -16(R10)
	JMP    copy_5_end

copy_5_small:
	CMPQ AX, $0x03
	JE   copy_5_move_3
	JB   copy_5_move_1or2
	CMPQ AX, $0x08
	JB   copy_5_move_4through7
	JMP  copy_5_move_8through16

copy_5_move_1or2:
	MOVB (R14), R15
	MOVB -1(R14)(AX*1), BP
	MOVB R15, (R10)
	MOVB BP, -1(R10)(AX*1)
	ADDQ AX, R14
	ADDQ AX, R10
	JMP  copy_5_end

copy_5_move_3:
	MOVW (R14), R15
	MOVB 2(R14), BP
	MOVW R15, (R10)
	MOVB BP, 2(R10)
	ADDQ AX, R14
	ADDQ AX, R10
	JMP  copy_5_end

copy_5_move_4through7:
	MOVL (R14), R15
	MOVL -4(R14)(AX*1), BP
	MOVL R15, (R10)
	MOVL BP, -4(R10)(AX*1)
	ADDQ AX, R14
	ADDQ AX, R10
	JMP  copy_5_end

copy_5_move_8through16:
	MOVQ (R14), R15
	MOVQ -8(R14)(AX*1), BP
	MOVQ R15, (R10)
	MOVQ BP, -8(R10)(AX*1)
	ADDQ AX, R14
	ADDQ AX, R10

copy_5_end:
	ADDQ AX, R12
	SUBQ AX, R13

	// Copy match from the current buffer
copy_match:
	MOVQ R10, AX
	SUBQ CX, AX

	// ml <= mo
	CMPQ R13, CX
	JA   copy_overlapping_match

	// Copy non-overlapping match
	ADDQ R13, R12
	MOVQ R13, CX
	SUBQ $0x10, CX
	JB   copy_2_small

copy_2_loop:
	MOVUPS (AX), X0
	MOVUPS X0, (R10)
	ADDQ   $0x10, AX
	ADDQ   $0x10, R10
	SUBQ   $0x10, CX
	JAE    copy_2_loop
	LEAQ   16(AX)(CX*1), AX
	LEAQ   16(R10)(CX*1), R10
	MOVUPS -16(AX), X0
	MOVUPS X0, -16(R10)
	JMP    copy_2_end

copy_2_small:
	CMPQ R13, $0x03
	JE   copy_2_move_3
	JB   copy_2_move_1or2
	CMPQ R13, $0x08
	JB   copy_2_move_4through7
	JMP  copy_2_move_8through16

copy_2_move_1or2:
	MOVB (AX), CL
	MOVB -1(AX)(R13*1), R14
	MOVB CL, (R10)
	MOVB R14, -1(R10)(R13*1)
	ADDQ R13, AX
	ADDQ R13, R10
	JMP  copy_2_end

copy_2_move_3:
	MOVW (AX), CX
	MOVB 2(AX), R14
	MOVW CX, (R10)
	MOVB R14, 2(R10)
	ADDQ R13, AX
	ADDQ R13, R10
	JMP  copy_2_end

copy_2_move_4through7:
	MOVL (AX), CX
	MOVL -4(AX)(R13*1), R14
	MOVL CX, (R10)
	MOVL R14, -4(R10)(R13*1)
	ADDQ R13, AX
	ADDQ R13, R10
	JMP  copy_2_end

copy_2_move_8through16:
	MOVQ (AX), CX
	MOVQ -8(AX)(R13*1), R14
	MOVQ CX, (R10)
	MOVQ R14, -8(R10)(R13*1)
	ADDQ R13, AX
	ADDQ R13, R10

copy_2_end:
	JMP handle_loop

	// Copy overlapping match
copy_overlapping_match:
	ADDQ R13, R12

copy_slow_3:
	MOVB (AX), CL
	MOVB CL, (R10)
	INCQ AX
	INCQ R10
	DECQ R13
	JNZ  copy_slow_3

handle_loop:
	MOVQ ctx+16(FP), AX
	DECQ 96(AX)
	JNS  sequenceDecs_decodeSync_safe_amd64_main_loop

loop_finished:
	MOVQ br+8(FP), AX
	MOVQ DX, 32(AX)
	MOVB BL, 40(AX)
	MOVQ SI, 24(AX)

	// Update the context
	MOVQ ctx+16(FP), AX
	MOVQ R12, 136(AX)
	MOVQ 144(AX), CX
	SUBQ CX, R11
	MOVQ R11, 168(AX)

	// Return success
	MOVQ $0x00000000, ret+24(FP)
	RET

	// Return with match length error
sequenceDecs_decodeSync_safe_amd64_error_match_len_ofs_mismatch:
	MOVQ 16(SP), AX
	MOVQ ctx+16(FP), CX
	MOVQ AX, 216(CX)
	MOVQ $0x00000001, ret+24(FP)
	RET

	// Return with match too long error
sequenceDecs_decodeSync_safe_amd64_error_match_len_too_big:
	MOVQ ctx+16(FP), AX
	MOVQ 16(SP), CX
	MOVQ CX, 216(AX)
	MOVQ $0x00000002, ret+24(FP)
	RET

	// Return with match offset too long error
error_match_off_too_big:
	MOVQ ctx+16(FP), AX
	MOVQ 8(SP), CX
	MOVQ CX, 224(AX)
	MOVQ R12, 136(AX)
	MOVQ $0x00000003, ret+24(FP)
	RET

	// Return with not enough literals error
error_not_enough_literals:
	MOVQ ctx+16(FP), AX
	MOVQ 24(SP), CX
	MOVQ CX, 208(AX)
	MOVQ $0x00000004, ret+24(FP)
	RET

	// Return with overread error
error_overread:
	MOVQ $0x00000006, ret+24(FP)
	RET

	// Return with not enough output space error
error_not_enough_space:
	MOVQ ctx+16(FP), AX
	MOVQ 24(SP), CX
	MOVQ CX, 208(AX)
	MOVQ 16(SP), CX
	MOVQ CX, 216(AX)
	MOVQ R12, 136(AX)
	MOVQ $0x00000005, ret+24(FP)
	RET

// func sequenceDecs_decodeSync_safe_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int
// Requires: BMI, BMI2, CMOV, SSE
TEXT ·sequenceDecs_decodeSync_safe_bmi2(SB), $64-32
	MOVQ    br+8(FP), CX
	MOVQ    32(CX), AX
	MOVBQZX 40(CX), DX
	MOVQ    24(CX), BX
	MOVQ    (CX), CX
	ADDQ    BX, CX
	MOVQ    CX, (SP)
	MOVQ    ctx+16(FP), CX
	MOVQ    72(CX), SI
	MOVQ    80(CX), DI
	MOVQ    88(CX), R8
	XORQ    R9, R9
	MOVQ    R9, 8(SP)
	MOVQ    R9, 16(SP)
	MOVQ    R9, 24(SP)
	MOVQ    112(CX), R9
	MOVQ    128(CX), R10
	MOVQ    R10, 32(SP)
	MOVQ    144(CX), R10
	MOVQ    136(CX), R11
	MOVQ    200(CX), R12
	MOVQ    R12, 56(SP)
	MOVQ    176(CX), R12
	MOVQ    R12, 48(SP)
	MOVQ    184(CX), CX
	MOVQ    CX, 40(SP)
	MOVQ    40(SP), CX
	ADDQ    CX, 48(SP)

	// Calculate poiter to s.out[cap(s.out)] (a past-end pointer)
	ADDQ R9, 32(SP)

	// outBase += outPosition
	ADDQ R11, R9

sequenceDecs_decodeSync_safe_bmi2_main_loop:
	MOVQ (SP), R12

	// Fill bitreader to have enough for the offset and match length.
	CMPQ BX, $0x08
	JL   sequenceDecs_decodeSync_safe_bmi2_fill_byte_by_byte
	MOVQ DX, CX
	SHRQ $0x03, CX
	SUBQ CX, R12
	MOVQ (R12), AX
	SUBQ CX, BX
	ANDQ $0x07, DX
	JMP  sequenceDecs_decodeSync_safe_bmi2_fill_end

sequenceDecs_decodeSync_safe_bmi2_fill_byte_by_byte:
	CMPQ    BX, $0x00
	JLE     sequenceDecs_decodeSync_safe_bmi2_fill_check_overread
	CMPQ    DX, $0x07
	JLE     sequenceDecs_decodeSync_safe_bmi2_fill_end
	SHLQ    $0x08, AX
	SUBQ    $0x01, R12
	SUBQ    $0x01, BX
	SUBQ    $0x08, DX
	MOVBQZX (R12), CX
	ORQ     CX, AX
	JMP     sequenceDecs_decodeSync_safe_bmi2_fill_byte_by_byte

sequenceDecs_decodeSync_safe_bmi2_fill_check_overread:
	CMPQ DX, $0x40
	JA   error_overread

sequenceDecs_decodeSync_safe_bmi2_fill_end:
	// Update offset
	MOVQ   $0x00000808, CX
	BEXTRQ CX, R8, R13
	MOVQ   AX, R14
	LEAQ   (DX)(R13*1), CX
	ROLQ   CL, R14
	BZHIQ  R13, R14, R14
	MOVQ   CX, DX
	MOVQ   R8, CX
	SHRQ   $0x20, CX
	ADDQ   R14, CX
	MOVQ   CX, 8(SP)

	// Update match length
	MOVQ   $0x00000808, CX
	BEXTRQ CX, DI, R13
	MOVQ   AX, R14
	LEAQ   (DX)(R13*1), CX
	ROLQ   CL, R14
	BZHIQ  R13, R14, R14
	MOVQ   CX, DX
	MOVQ   DI, CX
	SHRQ   $0x20, CX
	ADDQ   R14, CX
	MOVQ   CX, 16(SP)

	// Fill bitreader to have enough for the remaining
	CMPQ BX, $0x08
	JL   sequenceDecs_decodeSync_safe_bmi2_fill_2_byte_by_byte
	MOVQ DX, CX
	SHRQ $0x03, CX
	SUBQ CX, R12
	MOVQ (R12), AX
	SUBQ CX, BX
	ANDQ $0x07, DX
	JMP  sequenceDecs_decodeSync_safe_bmi2_fill_2_end

sequenceDecs_decodeSync_safe_bmi2_fill_2_byte_by_byte:
	CMPQ    BX, $0x00
	JLE     sequenceDecs_decodeSync_safe_bmi2_fill_2_check_overread
	CMPQ    DX, $0x07
	JLE     sequenceDecs_decodeSync_safe_bmi2_fill_2_end
	SHLQ    $0x08, AX
	SUBQ    $0x01, R12
	SUBQ    $0x01, BX
	SUBQ    $0x08, DX
	MOVBQZX (R12), CX
	ORQ     CX, AX
	JMP     sequenceDecs_decodeSync_safe_bmi2_fill_2_byte_by_byte

sequenceDecs_decodeSync_safe_bmi2_fill_2_check_overread:
	CMPQ DX, $0x40
	JA   error_overread

sequenceDecs_decodeSync_safe_bmi2_fill_2_end:
	// Update literal length
	MOVQ   $0x00000808, CX
	BEXTRQ CX, SI, R13
	MOVQ   AX, R14
	LEAQ   (DX)(R13*1), CX
	ROLQ   CL, R14
	BZHIQ  R13, R14, R14
	MOVQ   CX, DX
	MOVQ   SI, CX
	SHRQ   $0x20, CX
	ADDQ   R14, CX
	MOVQ   CX, 24(SP)

	// Fill bitreader for state updates
	MOVQ    R12, (SP)
	MOVQ    $0x00000808, CX
	BEXTRQ  CX, R8, R12
	MOVQ    ctx+16(FP), CX
	CMPQ    96(CX), $0x00
	JZ      sequenceDecs_decodeSync_safe_bmi2_skip_update
	LEAQ    (SI)(DI*1), R13
	ADDQ    R8, R13
	MOVBQZX R13, R13
	LEAQ    (DX)(R13*1), CX
	MOVQ    AX, R14
	MOVQ    CX, DX
	ROLQ    CL, R14
	BZHIQ   R13, R14, R14

	// Update Offset State
	BZHIQ  R8, R14, CX
	SHRXQ  R8, R14, R14
	MOVQ   $0x00001010, R13
	BEXTRQ R13, R8, R8
	ADDQ   CX, R8

	// Load ctx.ofTable
	MOVQ ctx+16(FP), CX
	MOVQ 48(CX), CX
	MOVQ (CX)(R8*8), R8

	// Update Match Length State
	BZHIQ  DI, R14, CX
	SHRXQ  DI, R14, R14
	MOVQ   $0x00001010, R13
	BEXTRQ R13, DI, DI
	ADDQ   CX, DI

	// Load ctx.mlTable
	MOVQ ctx+16(FP), CX
	MOVQ 24(CX), CX
	MOVQ (CX)(DI*8), DI

	// Update Literal Length State
	BZHIQ  SI, R14, CX
	MOVQ   $0x00001010, R13
	BEXTRQ R13, SI, SI
	ADDQ   CX, SI

	// Load ctx.llTable
	MOVQ ctx+16(FP), CX
	MOVQ (CX), CX
	MOVQ (CX)(SI*8), SI

sequenceDecs_decodeSync_safe_bmi2_skip_update:
	// Adjust offset
	MOVQ   s+0(FP), CX
	MOVQ   8(SP), R13
	CMPQ   R12, $0x01
	JBE    sequenceDecs_decodeSync_safe_bmi2_adjust_offsetB_1_or_0
	MOVUPS 144(CX), X0
	MOVQ   R13, 144(CX)
	MOVUPS X0, 152(CX)
	JMP    sequenceDecs_decodeSync_safe_bmi2_after_adjust

sequenceDecs_decodeSync_safe_bmi2_adjust_offsetB_1_or_0:
	CMPQ 24(SP), $0x00000000
	JNE  sequenceDecs_decodeSync_safe_bmi2_adjust_offset_maybezero
	INCQ R13
	JMP  sequenceDecs_decodeSync_safe_bmi2_adjust_offset_nonzero

sequenceDecs_decodeSync_safe_bmi2_adjust_offset_maybezero:
	TESTQ R13, R13
	JNZ   sequenceDecs_decodeSync_safe_bmi2_adjust_offset_nonzero
	MOVQ  144(CX), R13
	JMP   sequenceDecs_decodeSync_safe_bmi2_after_adjust

sequenceDecs_decodeSync_safe_bmi2_adjust_offset_nonzero:
	MOVQ    R13, R12
	XORQ    R14, R14
	MOVQ    $-1, R15
	CMPQ    R13, $0x03
	CMOVQEQ R14, R12
	CMOVQEQ R15, R14
	ADDQ    144(CX)(R12*8), R14
	JNZ     sequenceDecs_decodeSync_safe_bmi2_adjust_temp_valid
	MOVQ    $0x00000001, R14

sequenceDecs_decodeSync_safe_bmi2_adjust_temp_valid:
	CMPQ R13, $0x01
	JZ   sequenceDecs_decodeSync_safe_bmi2_adjust_skip
	MOVQ 152(CX), R12
	MOVQ R12, 160(CX)

sequenceDecs_decodeSync_safe_bmi2_adjust_skip:
	MOVQ 144(CX), R12
	MOVQ R12, 152(CX)
	MOVQ R14, 144(CX)
	MOVQ R14, R13

sequenceDecs_decodeSync_safe_bmi2_after_adjust:
	MOVQ R13, 8(SP)

	// Check values
	MOVQ  16(SP), CX
	MOVQ  24(SP), R12
	LEAQ  (CX)(R12*1), R14
	MOVQ  s+0(FP), R15
	ADDQ  R14, 256(R15)
	MOVQ  ctx+16(FP), R14
	SUBQ  R12, 104(R14)
	JS    error_not_enough_literals
	CMPQ  CX, $0x00020002
	JA    sequenceDecs_decodeSync_safe_bmi2_error_match_len_too_big
	TESTQ R13, R13
	JNZ   sequenceDecs_decodeSync_safe_bmi2_match_len_ofs_ok
	TESTQ CX, CX
	JNZ   sequenceDecs_decodeSync_safe_bmi2_error_match_len_ofs_mismatch

sequenceDecs_decodeSync_safe_bmi2_match_len_ofs_ok:
	MOVQ 24(SP), CX
	MOVQ 8(SP), R12
	MOVQ 16(SP), R13

	// Check if we have enough space in s.out
	LEAQ (CX)(R13*1), R14
	ADDQ R9, R14
	CMPQ R14, 32(SP)
	JA   error_not_enough_space

	// Copy literals
	TESTQ CX, CX
	JZ    check_offset
	MOVQ  CX, R14
	SUBQ  $0x10, R14
	JB    copy_1_small

copy_1_loop:
	MOVUPS (R10), X0
	MOVUPS X0, (R9)
	ADDQ   $0x10, R10
	ADDQ   $0x10, R9
	SUBQ   $0x10, R14
	JAE    copy_1_loop
	LEAQ   16(R10)(R14*1), R10
	LEAQ   16(R9)(R14*1), R9
	MOVUPS -16(R10), X0
	MOVUPS X0, -16(R9)
	JMP    copy_1_end

copy_1_small:
	CMPQ CX, $0x03
	JE   copy_1_move_3
	JB   copy_1_move_1or2
	CMPQ CX, $0x08
	JB   copy_1_move_4through7
	JMP  copy_1_move_8through16

copy_1_move_1or2:
	MOVB (R10), R14
	MOVB -1(R10)(CX*1), R15
	MOVB R14, (R9)
	MOVB R15, -1(R9)(CX*1)
	ADDQ CX, R10
	ADDQ CX, R9
	JMP  copy_1_end

copy_1_move_3:
	MOVW (R10), R14
	MOVB 2(R10), R15
	MOVW R14, (R9)
	MOVB R15, 2(R9)
	ADDQ CX, R10
	ADDQ CX, R9
	JMP  copy_1_end

copy_1_move_4through7:
	MOVL (R10), R14
	MOVL -4(R10)(CX*1), R15
	MOVL R14, (R9)
	MOVL R15, -4(R9)(CX*1)
	ADDQ CX, R10
	ADDQ CX, R9
	JMP  copy_1_end

copy_1_move_8through16:
	MOVQ (R10), R14
	MOVQ -8(R10)(CX*1), R15
	MOVQ R14, (R9)
	MOVQ R15, -8(R9)(CX*1)
	ADDQ CX, R10
	ADDQ CX, R9

copy_1_end:
	ADDQ CX, R11

	// Malformed input if seq.mo > t+len(hist) || seq.mo > s.windowSize)
check_offset:
	MOVQ R11, CX
	ADDQ 40(SP), CX
	CMPQ R12, CX
	JG   error_match_off_too_big
	CMPQ R12, 56(SP)
	JG   error_match_off_too_big

	// Copy match from history
	MOVQ R12, CX
	SUBQ R11, CX
	JLS  copy_match
	MOVQ 48(SP), R14
	SUBQ CX, R14
	CMPQ R13, CX
	JG   copy_all_from_history
	MOVQ R13, CX
	SUBQ $0x10, CX
	JB   copy_4_small

copy_4_loop:
	MOVUPS (R14), X0
	MOVUPS X0, (R9)
	ADDQ   $0x10, R14
	ADDQ   $0x10, R9
	SUBQ   $0x10, CX
	JAE    copy_4_loop
	LEAQ   16(R14)(CX*1), R14
	LEAQ   16(R9)(CX*1), R9
	MOVUPS -16(R14), X0
	MOVUPS X0, -16(R9)
	JMP    copy_4_end

copy_4_small:
	CMPQ R13, $0x03
	JE   copy_4_move_3
	CMPQ R13, $0x08
	JB   copy_4_move_4through7
	JMP  copy_4_move_8through16

copy_4_move_3:
	MOVW (R14), CX
	MOVB 2(R14), R12
	MOVW CX, (R9)
	MOVB R12, 2(R9)
	ADDQ R13, R14
	ADDQ R13, R9
	JMP  copy_4_end

copy_4_move_4through7:
	MOVL (R14), CX
	MOVL -4(R14)(R13*1), R12
	MOVL CX, (R9)
	MOVL R12, -4(R9)(R13*1)
	ADDQ R13, R14
	ADDQ R13, R9
	JMP  copy_4_end

copy_4_move_8through16:
	MOVQ (R14), CX
	MOVQ -8(R14)(R13*1), R12
	MOVQ CX, (R9)
	MOVQ R12, -8(R9)(R13*1)
	ADDQ R13, R14
	ADDQ R13, R9

copy_4_end:
	ADDQ R13, R11
	JMP  handle_loop
	JMP loop_finished

copy_all_from_history:
	MOVQ CX, R15
	SUBQ $0x10, R15
	JB   copy_5_small

copy_5_loop:
	MOVUPS (R14), X0
	MOVUPS X0, (R9)
	ADDQ   $0x10, R14
	ADDQ   $0x10, R9
	SUBQ   $0x10, R15
	JAE    copy_5_loop
	LEAQ   16(R14)(R15*1), R14
	LEAQ   16(R9)(R15*1), R9
	MOVUPS -16(R14), X0
	MOVUPS X0, -16(R9)
	JMP    copy_5_end

copy_5_small:
	CMPQ CX, $0x03
	JE   copy_5_move_3
	JB   copy_5_move_1or2
	CMPQ CX, $0x08
	JB   copy_5_move_4through7
	JMP  copy_5_move_8through16

copy_5_move_1or2:
	MOVB (R14), R15
	MOVB -1(R14)(CX*1), BP
	MOVB R15, (R9)
	MOVB BP, -1(R9)(CX*1)
	ADDQ CX, R14
	ADDQ CX, R9
	JMP  copy_5_end

copy_5_move_3:
	MOVW (R14), R15
	MOVB 2(R14), BP
	MOVW R15, (R9)
	MOVB BP, 2(R9)
	ADDQ CX, R14
	ADDQ CX, R9
	JMP  copy_5_end

copy_5_move_4through7:
	MOVL (R14), R15
	MOVL -4(R14)(CX*1), BP
	MOVL R15, (R9)
	MOVL BP, -4(R9)(CX*1)
	ADDQ CX, R14
	ADDQ CX, R9
	JMP  copy_5_end

copy_5_move_8through16:
	MOVQ (R14), R15
	MOVQ -8(R14)(CX*1), BP
	MOVQ R15, (R9)
	MOVQ BP, -8(R9)(CX*1)
	ADDQ CX, R14
	ADDQ CX, R9

copy_5_end:
	ADDQ CX, R11
	SUBQ CX, R13

	// Copy match from the current buffer
copy_match:
	MOVQ R9, CX
	SUBQ R12, CX

	// ml <= mo
	CMPQ R13, R12
	JA   copy_overlapping_match

	// Copy non-overlapping match
	ADDQ R13, R11
	MOVQ R13, R12
	SUBQ $0x10, R12
	JB   copy_2_small

copy_2_loop:
	MOVUPS (CX), X0
	MOVUPS X0, (R9)
	ADDQ   $0x10, CX
	ADDQ   $0x10, R9
	SUBQ   $0x10, R12
	JAE    copy_2_loop
	LEAQ   16(CX)(R12*1), CX
	LEAQ   16(R9)(R12*1), R9
	MOVUPS -16(CX), X0
	MOVUPS X0, -16(R9)
	JMP    copy_2_end

copy_2_small:
	CMPQ R13, $0x03
	JE   copy_2_move_3
	JB   copy_2_move_1or2
	CMPQ R13, $0x08
	JB   copy_2_move_4through7
	JMP  copy_2_move_8through16

copy_2_move_1or2:
	MOVB (CX), R12
	MOVB -1(CX)(R13*1), R14
	MOVB R12, (R9)
	MOVB R14, -1(R9)(R13*1)
	ADDQ R13, CX
	ADDQ R13, R9
	JMP  copy_2_end

copy_2_move_3:
	MOVW (CX), R12
	MOVB 2(CX), R14
	MOVW R12, (R9)
	MOVB R14, 2(R9)
	ADDQ R13, CX
	ADDQ R13, R9
	JMP  copy_2_end

copy_2_move_4through7:
	MOVL (CX), R12
	MOVL -4(CX)(R13*1), R14
	MOVL R12, (R9)
	MOVL R14, -4(R9)(R13*1)
	ADDQ R13, CX
	ADDQ R13, R9
	JMP  copy_2_end

copy_2_move_8through16:
	MOVQ (CX), R12
	MOVQ -8(CX)(R13*1), R14
	MOVQ R12, (R9)
	MOVQ R14, -8(R9)(R13*1)
	ADDQ R13, CX
	ADDQ R13, R9

copy_2_end:
	JMP handle_loop

	// Copy overlapping match
copy_overlapping_match:
	ADDQ R13, R11

copy_slow_3:
	MOVB (CX), R12
	MOVB R12, (R9)
	INCQ CX
	INCQ R9
	DECQ R13
	JNZ  copy_slow_3

handle_loop:
	MOVQ ctx+16(FP), CX
	DECQ 96(CX)
	JNS  sequenceDecs_decodeSync_safe_bmi2_main_loop

loop_finished:
	MOVQ br+8(FP), CX
	MOVQ AX, 32(CX)
	MOVB DL, 40(CX)
	MOVQ BX, 24(CX)

	// Update the context
	MOVQ ctx+16(FP), AX
	MOVQ R11, 136(AX)
	MOVQ 144(AX), CX
	SUBQ CX, R10
	MOVQ R10, 168(AX)

	// Return success
	MOVQ $0x00000000, ret+24(FP)
	RET

	// Return with match length error
sequenceDecs_decodeSync_safe_bmi2_error_match_len_ofs_mismatch:
	MOVQ 16(SP), AX
	MOVQ ctx+16(FP), CX
	MOVQ AX, 216(CX)
	MOVQ $0x00000001, ret+24(FP)
	RET

	// Return with match too long error
sequenceDecs_decodeSync_safe_bmi2_error_match_len_too_big:
	MOVQ ctx+16(FP), AX
	MOVQ 16(SP), CX
	MOVQ CX, 216(AX)
	MOVQ $0x00000002, ret+24(FP)
	RET

	// Return with match offset too long error
error_match_off_too_big:
	MOVQ ctx+16(FP), AX
	MOVQ 8(SP), CX
	MOVQ CX, 224(AX)
	MOVQ R11, 136(AX)
	MOVQ $0x00000003, ret+24(FP)
	RET

	// Return with not enough literals error
error_not_enough_literals:
	MOVQ ctx+16(FP), AX
	MOVQ 24(SP), CX
	MOVQ CX, 208(AX)
	MOVQ $0x00000004, ret+24(FP)
	RET

	// Return with overread error
error_overread:
	MOVQ $0x00000006, ret+24(FP)
	RET

	// Return with not enough output space error
error_not_enough_space:
	MOVQ ctx+16(FP), AX
	MOVQ 24(SP), CX
	MOVQ CX, 208(AX)
	MOVQ 16(SP), CX
	MOVQ CX, 216(AX)
	MOVQ R11, 136(AX)
	MOVQ $0x00000005, ret+24(FP)
	RET
0707010000089D000081A4000000000000000000000001645E367C00001934000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/seqdec_generic.go   //go:build !amd64 || appengine || !gc || noasm
// +build !amd64 appengine !gc noasm

package zstd

import (
	"fmt"
	"io"
)

// decode sequences from the stream with the provided history but without dictionary.
func (s *sequenceDecs) decodeSyncSimple(hist []byte) (bool, error) {
	return false, nil
}

// decode sequences from the stream without the provided history.
func (s *sequenceDecs) decode(seqs []seqVals) error {
	br := s.br

	// Grab full sizes tables, to avoid bounds checks.
	llTable, mlTable, ofTable := s.litLengths.fse.dt[:maxTablesize], s.matchLengths.fse.dt[:maxTablesize], s.offsets.fse.dt[:maxTablesize]
	llState, mlState, ofState := s.litLengths.state.state, s.matchLengths.state.state, s.offsets.state.state
	s.seqSize = 0
	litRemain := len(s.literals)

	maxBlockSize := maxCompressedBlockSize
	if s.windowSize < maxBlockSize {
		maxBlockSize = s.windowSize
	}
	for i := range seqs {
		var ll, mo, ml int
		if br.off > 4+((maxOffsetBits+16+16)>>3) {
			// inlined function:
			// ll, mo, ml = s.nextFast(br, llState, mlState, ofState)

			// Final will not read from stream.
			var llB, mlB, moB uint8
			ll, llB = llState.final()
			ml, mlB = mlState.final()
			mo, moB = ofState.final()

			// extra bits are stored in reverse order.
			br.fillFast()
			mo += br.getBits(moB)
			if s.maxBits > 32 {
				br.fillFast()
			}
			ml += br.getBits(mlB)
			ll += br.getBits(llB)

			if moB > 1 {
				s.prevOffset[2] = s.prevOffset[1]
				s.prevOffset[1] = s.prevOffset[0]
				s.prevOffset[0] = mo
			} else {
				// mo = s.adjustOffset(mo, ll, moB)
				// Inlined for rather big speedup
				if ll == 0 {
					// There is an exception though, when current sequence's literals_length = 0.
					// In this case, repeated offsets are shifted by one, so an offset_value of 1 means Repeated_Offset2,
					// an offset_value of 2 means Repeated_Offset3, and an offset_value of 3 means Repeated_Offset1 - 1_byte.
					mo++
				}

				if mo == 0 {
					mo = s.prevOffset[0]
				} else {
					var temp int
					if mo == 3 {
						temp = s.prevOffset[0] - 1
					} else {
						temp = s.prevOffset[mo]
					}

					if temp == 0 {
						// 0 is not valid; input is corrupted; force offset to 1
						println("WARNING: temp was 0")
						temp = 1
					}

					if mo != 1 {
						s.prevOffset[2] = s.prevOffset[1]
					}
					s.prevOffset[1] = s.prevOffset[0]
					s.prevOffset[0] = temp
					mo = temp
				}
			}
			br.fillFast()
		} else {
			if br.overread() {
				if debugDecoder {
					printf("reading sequence %d, exceeded available data\n", i)
				}
				return io.ErrUnexpectedEOF
			}
			ll, mo, ml = s.next(br, llState, mlState, ofState)
			br.fill()
		}

		if debugSequences {
			println("Seq", i, "Litlen:", ll, "mo:", mo, "(abs) ml:", ml)
		}
		// Evaluate.
		// We might be doing this async, so do it early.
		if mo == 0 && ml > 0 {
			return fmt.Errorf("zero matchoff and matchlen (%d) > 0", ml)
		}
		if ml > maxMatchLen {
			return fmt.Errorf("match len (%d) bigger than max allowed length", ml)
		}
		s.seqSize += ll + ml
		if s.seqSize > maxBlockSize {
			return fmt.Errorf("output bigger than max block size (%d)", maxBlockSize)
		}
		litRemain -= ll
		if litRemain < 0 {
			return fmt.Errorf("unexpected literal count, want %d bytes, but only %d is available", ll, litRemain+ll)
		}
		seqs[i] = seqVals{
			ll: ll,
			ml: ml,
			mo: mo,
		}
		if i == len(seqs)-1 {
			// This is the last sequence, so we shouldn't update state.
			break
		}

		// Manually inlined, ~ 5-20% faster
		// Update all 3 states at once. Approx 20% faster.
		nBits := llState.nbBits() + mlState.nbBits() + ofState.nbBits()
		if nBits == 0 {
			llState = llTable[llState.newState()&maxTableMask]
			mlState = mlTable[mlState.newState()&maxTableMask]
			ofState = ofTable[ofState.newState()&maxTableMask]
		} else {
			bits := br.get32BitsFast(nBits)
			lowBits := uint16(bits >> ((ofState.nbBits() + mlState.nbBits()) & 31))
			llState = llTable[(llState.newState()+lowBits)&maxTableMask]

			lowBits = uint16(bits >> (ofState.nbBits() & 31))
			lowBits &= bitMask[mlState.nbBits()&15]
			mlState = mlTable[(mlState.newState()+lowBits)&maxTableMask]

			lowBits = uint16(bits) & bitMask[ofState.nbBits()&15]
			ofState = ofTable[(ofState.newState()+lowBits)&maxTableMask]
		}
	}
	s.seqSize += litRemain
	if s.seqSize > maxBlockSize {
		return fmt.Errorf("output bigger than max block size (%d)", maxBlockSize)
	}
	err := br.close()
	if err != nil {
		printf("Closing sequences: %v, %+v\n", err, *br)
	}
	return err
}

// executeSimple handles cases when a dictionary is not used.
func (s *sequenceDecs) executeSimple(seqs []seqVals, hist []byte) error {
	// Ensure we have enough output size...
	if len(s.out)+s.seqSize > cap(s.out) {
		addBytes := s.seqSize + len(s.out)
		s.out = append(s.out, make([]byte, addBytes)...)
		s.out = s.out[:len(s.out)-addBytes]
	}

	if debugDecoder {
		printf("Execute %d seqs with literals: %d into %d bytes\n", len(seqs), len(s.literals), s.seqSize)
	}

	var t = len(s.out)
	out := s.out[:t+s.seqSize]

	for _, seq := range seqs {
		// Add literals
		copy(out[t:], s.literals[:seq.ll])
		t += seq.ll
		s.literals = s.literals[seq.ll:]

		// Malformed input
		if seq.mo > t+len(hist) || seq.mo > s.windowSize {
			return fmt.Errorf("match offset (%d) bigger than current history (%d)", seq.mo, t+len(hist))
		}

		// Copy from history.
		if v := seq.mo - t; v > 0 {
			// v is the start position in history from end.
			start := len(hist) - v
			if seq.ml > v {
				// Some goes into the current block.
				// Copy remainder of history
				copy(out[t:], hist[start:])
				t += v
				seq.ml -= v
			} else {
				copy(out[t:], hist[start:start+seq.ml])
				t += seq.ml
				continue
			}
		}

		// We must be in the current buffer now
		if seq.ml > 0 {
			start := t - seq.mo
			if seq.ml <= t-start {
				// No overlap
				copy(out[t:], out[start:start+seq.ml])
				t += seq.ml
			} else {
				// Overlapping copy
				// Extend destination slice and copy one byte at the time.
				src := out[start : start+seq.ml]
				dst := out[t:]
				dst = dst[:len(src)]
				t += len(src)
				// Destination is the space we just added.
				for i := range src {
					dst[i] = src[i]
				}
			}
		}
	}
	// Add final literals
	copy(out[t:], s.literals)
	if debugDecoder {
		t += len(s.literals)
		if t != len(out) {
			panic(fmt.Errorf("length mismatch, want %d, got %d, ss: %d", len(out), t, s.seqSize))
		}
	}
	s.out = out

	return nil
}
0707010000089E000081A4000000000000000000000001645E367C00000CEB000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/seqenc.go   // Copyright 2019+ Klaus Post. All rights reserved.
// License information can be found in the LICENSE file.
// Based on work by Yann Collet, released under BSD License.

package zstd

import "math/bits"

type seqCoders struct {
	llEnc, ofEnc, mlEnc    *fseEncoder
	llPrev, ofPrev, mlPrev *fseEncoder
}

// swap coders with another (block).
func (s *seqCoders) swap(other *seqCoders) {
	*s, *other = *other, *s
}

// setPrev will update the previous encoders to the actually used ones
// and make sure a fresh one is in the main slot.
func (s *seqCoders) setPrev(ll, ml, of *fseEncoder) {
	compareSwap := func(used *fseEncoder, current, prev **fseEncoder) {
		// We used the new one, more current to history and reuse the previous history
		if *current == used {
			*prev, *current = *current, *prev
			c := *current
			p := *prev
			c.reUsed = false
			p.reUsed = true
			return
		}
		if used == *prev {
			return
		}
		// Ensure we cannot reuse by accident
		prevEnc := *prev
		prevEnc.symbolLen = 0
	}
	compareSwap(ll, &s.llEnc, &s.llPrev)
	compareSwap(ml, &s.mlEnc, &s.mlPrev)
	compareSwap(of, &s.ofEnc, &s.ofPrev)
}

func highBit(val uint32) (n uint32) {
	return uint32(bits.Len32(val) - 1)
}

var llCodeTable = [64]byte{0, 1, 2, 3, 4, 5, 6, 7,
	8, 9, 10, 11, 12, 13, 14, 15,
	16, 16, 17, 17, 18, 18, 19, 19,
	20, 20, 20, 20, 21, 21, 21, 21,
	22, 22, 22, 22, 22, 22, 22, 22,
	23, 23, 23, 23, 23, 23, 23, 23,
	24, 24, 24, 24, 24, 24, 24, 24,
	24, 24, 24, 24, 24, 24, 24, 24}

// Up to 6 bits
const maxLLCode = 35

// llBitsTable translates from ll code to number of bits.
var llBitsTable = [maxLLCode + 1]byte{
	0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0,
	1, 1, 1, 1, 2, 2, 3, 3,
	4, 6, 7, 8, 9, 10, 11, 12,
	13, 14, 15, 16}

// llCode returns the code that represents the literal length requested.
func llCode(litLength uint32) uint8 {
	const llDeltaCode = 19
	if litLength <= 63 {
		// Compiler insists on bounds check (Go 1.12)
		return llCodeTable[litLength&63]
	}
	return uint8(highBit(litLength)) + llDeltaCode
}

var mlCodeTable = [128]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
	16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
	32, 32, 33, 33, 34, 34, 35, 35, 36, 36, 36, 36, 37, 37, 37, 37,
	38, 38, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39, 39,
	40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
	41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
	42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
	42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42}

// Up to 6 bits
const maxMLCode = 52

// mlBitsTable translates from ml code to number of bits.
var mlBitsTable = [maxMLCode + 1]byte{
	0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0,
	1, 1, 1, 1, 2, 2, 3, 3,
	4, 4, 5, 7, 8, 9, 10, 11,
	12, 13, 14, 15, 16}

// note : mlBase = matchLength - MINMATCH;
// because it's the format it's stored in seqStore->sequences
func mlCode(mlBase uint32) uint8 {
	const mlDeltaCode = 36
	if mlBase <= 127 {
		// Compiler insists on bounds check (Go 1.12)
		return mlCodeTable[mlBase&127]
	}
	return uint8(highBit(mlBase)) + mlDeltaCode
}

func ofCode(offset uint32) uint8 {
	// A valid offset will always be > 0.
	return uint8(bits.Len32(offset) - 1)
}
 0707010000089F000081A4000000000000000000000001645E367C00003316000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/snappy.go   // Copyright 2019+ Klaus Post. All rights reserved.
// License information can be found in the LICENSE file.
// Based on work by Yann Collet, released under BSD License.

package zstd

import (
	"encoding/binary"
	"errors"
	"hash/crc32"
	"io"

	"github.com/klauspost/compress/huff0"
	snappy "github.com/klauspost/compress/internal/snapref"
)

const (
	snappyTagLiteral = 0x00
	snappyTagCopy1   = 0x01
	snappyTagCopy2   = 0x02
	snappyTagCopy4   = 0x03
)

const (
	snappyChecksumSize = 4
	snappyMagicBody    = "sNaPpY"

	// snappyMaxBlockSize is the maximum size of the input to encodeBlock. It is not
	// part of the wire format per se, but some parts of the encoder assume
	// that an offset fits into a uint16.
	//
	// Also, for the framing format (Writer type instead of Encode function),
	// https://github.com/google/snappy/blob/master/framing_format.txt says
	// that "the uncompressed data in a chunk must be no longer than 65536
	// bytes".
	snappyMaxBlockSize = 65536

	// snappyMaxEncodedLenOfMaxBlockSize equals MaxEncodedLen(snappyMaxBlockSize), but is
	// hard coded to be a const instead of a variable, so that obufLen can also
	// be a const. Their equivalence is confirmed by
	// TestMaxEncodedLenOfMaxBlockSize.
	snappyMaxEncodedLenOfMaxBlockSize = 76490
)

const (
	chunkTypeCompressedData   = 0x00
	chunkTypeUncompressedData = 0x01
	chunkTypePadding          = 0xfe
	chunkTypeStreamIdentifier = 0xff
)

var (
	// ErrSnappyCorrupt reports that the input is invalid.
	ErrSnappyCorrupt = errors.New("snappy: corrupt input")
	// ErrSnappyTooLarge reports that the uncompressed length is too large.
	ErrSnappyTooLarge = errors.New("snappy: decoded block is too large")
	// ErrSnappyUnsupported reports that the input isn't supported.
	ErrSnappyUnsupported = errors.New("snappy: unsupported input")

	errUnsupportedLiteralLength = errors.New("snappy: unsupported literal length")
)

// SnappyConverter can read SnappyConverter-compressed streams and convert them to zstd.
// Conversion is done by converting the stream directly from Snappy without intermediate
// full decoding.
// Therefore the compression ratio is much less than what can be done by a full decompression
// and compression, and a faulty Snappy stream may lead to a faulty Zstandard stream without
// any errors being generated.
// No CRC value is being generated and not all CRC values of the Snappy stream are checked.
// However, it provides really fast recompression of Snappy streams.
// The converter can be reused to avoid allocations, even after errors.
type SnappyConverter struct {
	r     io.Reader
	err   error
	buf   []byte
	block *blockEnc
}

// Convert the Snappy stream supplied in 'in' and write the zStandard stream to 'w'.
// If any error is detected on the Snappy stream it is returned.
// The number of bytes written is returned.
func (r *SnappyConverter) Convert(in io.Reader, w io.Writer) (int64, error) {
	initPredefined()
	r.err = nil
	r.r = in
	if r.block == nil {
		r.block = &blockEnc{}
		r.block.init()
	}
	r.block.initNewEncode()
	if len(r.buf) != snappyMaxEncodedLenOfMaxBlockSize+snappyChecksumSize {
		r.buf = make([]byte, snappyMaxEncodedLenOfMaxBlockSize+snappyChecksumSize)
	}
	r.block.litEnc.Reuse = huff0.ReusePolicyNone
	var written int64
	var readHeader bool
	{
		var header []byte
		var n int
		header, r.err = frameHeader{WindowSize: snappyMaxBlockSize}.appendTo(r.buf[:0])

		n, r.err = w.Write(header)
		if r.err != nil {
			return written, r.err
		}
		written += int64(n)
	}

	for {
		if !r.readFull(r.buf[:4], true) {
			// Add empty last block
			r.block.reset(nil)
			r.block.last = true
			err := r.block.encodeLits(r.block.literals, false)
			if err != nil {
				return written, err
			}
			n, err := w.Write(r.block.output)
			if err != nil {
				return written, err
			}
			written += int64(n)

			return written, r.err
		}
		chunkType := r.buf[0]
		if !readHeader {
			if chunkType != chunkTypeStreamIdentifier {
				println("chunkType != chunkTypeStreamIdentifier", chunkType)
				r.err = ErrSnappyCorrupt
				return written, r.err
			}
			readHeader = true
		}
		chunkLen := int(r.buf[1]) | int(r.buf[2])<<8 | int(r.buf[3])<<16
		if chunkLen > len(r.buf) {
			println("chunkLen > len(r.buf)", chunkType)
			r.err = ErrSnappyUnsupported
			return written, r.err
		}

		// The chunk types are specified at
		// https://github.com/google/snappy/blob/master/framing_format.txt
		switch chunkType {
		case chunkTypeCompressedData:
			// Section 4.2. Compressed data (chunk type 0x00).
			if chunkLen < snappyChecksumSize {
				println("chunkLen < snappyChecksumSize", chunkLen, snappyChecksumSize)
				r.err = ErrSnappyCorrupt
				return written, r.err
			}
			buf := r.buf[:chunkLen]
			if !r.readFull(buf, false) {
				return written, r.err
			}
			//checksum := uint32(buf[0]) | uint32(buf[1])<<8 | uint32(buf[2])<<16 | uint32(buf[3])<<24
			buf = buf[snappyChecksumSize:]

			n, hdr, err := snappyDecodedLen(buf)
			if err != nil {
				r.err = err
				return written, r.err
			}
			buf = buf[hdr:]
			if n > snappyMaxBlockSize {
				println("n > snappyMaxBlockSize", n, snappyMaxBlockSize)
				r.err = ErrSnappyCorrupt
				return written, r.err
			}
			r.block.reset(nil)
			r.block.pushOffsets()
			if err := decodeSnappy(r.block, buf); err != nil {
				r.err = err
				return written, r.err
			}
			if r.block.size+r.block.extraLits != n {
				printf("invalid size, want %d, got %d\n", n, r.block.size+r.block.extraLits)
				r.err = ErrSnappyCorrupt
				return written, r.err
			}
			err = r.block.encode(nil, false, false)
			switch err {
			case errIncompressible:
				r.block.popOffsets()
				r.block.reset(nil)
				r.block.literals, err = snappy.Decode(r.block.literals[:n], r.buf[snappyChecksumSize:chunkLen])
				if err != nil {
					return written, err
				}
				err = r.block.encodeLits(r.block.literals, false)
				if err != nil {
					return written, err
				}
			case nil:
			default:
				return written, err
			}

			n, r.err = w.Write(r.block.output)
			if r.err != nil {
				return written, err
			}
			written += int64(n)
			continue
		case chunkTypeUncompressedData:
			if debugEncoder {
				println("Uncompressed, chunklen", chunkLen)
			}
			// Section 4.3. Uncompressed data (chunk type 0x01).
			if chunkLen < snappyChecksumSize {
				println("chunkLen < snappyChecksumSize", chunkLen, snappyChecksumSize)
				r.err = ErrSnappyCorrupt
				return written, r.err
			}
			r.block.reset(nil)
			buf := r.buf[:snappyChecksumSize]
			if !r.readFull(buf, false) {
				return written, r.err
			}
			checksum := uint32(buf[0]) | uint32(buf[1])<<8 | uint32(buf[2])<<16 | uint32(buf[3])<<24
			// Read directly into r.decoded instead of via r.buf.
			n := chunkLen - snappyChecksumSize
			if n > snappyMaxBlockSize {
				println("n > snappyMaxBlockSize", n, snappyMaxBlockSize)
				r.err = ErrSnappyCorrupt
				return written, r.err
			}
			r.block.literals = r.block.literals[:n]
			if !r.readFull(r.block.literals, false) {
				return written, r.err
			}
			if snappyCRC(r.block.literals) != checksum {
				println("literals crc mismatch")
				r.err = ErrSnappyCorrupt
				return written, r.err
			}
			err := r.block.encodeLits(r.block.literals, false)
			if err != nil {
				return written, err
			}
			n, r.err = w.Write(r.block.output)
			if r.err != nil {
				return written, err
			}
			written += int64(n)
			continue

		case chunkTypeStreamIdentifier:
			if debugEncoder {
				println("stream id", chunkLen, len(snappyMagicBody))
			}
			// Section 4.1. Stream identifier (chunk type 0xff).
			if chunkLen != len(snappyMagicBody) {
				println("chunkLen != len(snappyMagicBody)", chunkLen, len(snappyMagicBody))
				r.err = ErrSnappyCorrupt
				return written, r.err
			}
			if !r.readFull(r.buf[:len(snappyMagicBody)], false) {
				return written, r.err
			}
			for i := 0; i < len(snappyMagicBody); i++ {
				if r.buf[i] != snappyMagicBody[i] {
					println("r.buf[i] != snappyMagicBody[i]", r.buf[i], snappyMagicBody[i], i)
					r.err = ErrSnappyCorrupt
					return written, r.err
				}
			}
			continue
		}

		if chunkType <= 0x7f {
			// Section 4.5. Reserved unskippable chunks (chunk types 0x02-0x7f).
			println("chunkType <= 0x7f")
			r.err = ErrSnappyUnsupported
			return written, r.err
		}
		// Section 4.4 Padding (chunk type 0xfe).
		// Section 4.6. Reserved skippable chunks (chunk types 0x80-0xfd).
		if !r.readFull(r.buf[:chunkLen], false) {
			return written, r.err
		}
	}
}

// decodeSnappy writes the decoding of src to dst. It assumes that the varint-encoded
// length of the decompressed bytes has already been read.
func decodeSnappy(blk *blockEnc, src []byte) error {
	//decodeRef(make([]byte, snappyMaxBlockSize), src)
	var s, length int
	lits := blk.extraLits
	var offset uint32
	for s < len(src) {
		switch src[s] & 0x03 {
		case snappyTagLiteral:
			x := uint32(src[s] >> 2)
			switch {
			case x < 60:
				s++
			case x == 60:
				s += 2
				if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.
					println("uint(s) > uint(len(src)", s, src)
					return ErrSnappyCorrupt
				}
				x = uint32(src[s-1])
			case x == 61:
				s += 3
				if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.
					println("uint(s) > uint(len(src)", s, src)
					return ErrSnappyCorrupt
				}
				x = uint32(src[s-2]) | uint32(src[s-1])<<8
			case x == 62:
				s += 4
				if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.
					println("uint(s) > uint(len(src)", s, src)
					return ErrSnappyCorrupt
				}
				x = uint32(src[s-3]) | uint32(src[s-2])<<8 | uint32(src[s-1])<<16
			case x == 63:
				s += 5
				if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.
					println("uint(s) > uint(len(src)", s, src)
					return ErrSnappyCorrupt
				}
				x = uint32(src[s-4]) | uint32(src[s-3])<<8 | uint32(src[s-2])<<16 | uint32(src[s-1])<<24
			}
			if x > snappyMaxBlockSize {
				println("x > snappyMaxBlockSize", x, snappyMaxBlockSize)
				return ErrSnappyCorrupt
			}
			length = int(x) + 1
			if length <= 0 {
				println("length <= 0 ", length)

				return errUnsupportedLiteralLength
			}
			//if length > snappyMaxBlockSize-d || uint32(length) > len(src)-s {
			//	return ErrSnappyCorrupt
			//}

			blk.literals = append(blk.literals, src[s:s+length]...)
			//println(length, "litLen")
			lits += length
			s += length
			continue

		case snappyTagCopy1:
			s += 2
			if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.
				println("uint(s) > uint(len(src)", s, len(src))
				return ErrSnappyCorrupt
			}
			length = 4 + int(src[s-2])>>2&0x7
			offset = uint32(src[s-2])&0xe0<<3 | uint32(src[s-1])

		case snappyTagCopy2:
			s += 3
			if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.
				println("uint(s) > uint(len(src)", s, len(src))
				return ErrSnappyCorrupt
			}
			length = 1 + int(src[s-3])>>2
			offset = uint32(src[s-2]) | uint32(src[s-1])<<8

		case snappyTagCopy4:
			s += 5
			if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.
				println("uint(s) > uint(len(src)", s, len(src))
				return ErrSnappyCorrupt
			}
			length = 1 + int(src[s-5])>>2
			offset = uint32(src[s-4]) | uint32(src[s-3])<<8 | uint32(src[s-2])<<16 | uint32(src[s-1])<<24
		}

		if offset <= 0 || blk.size+lits < int(offset) /*|| length > len(blk)-d */ {
			println("offset <= 0 || blk.size+lits < int(offset)", offset, blk.size+lits, int(offset), blk.size, lits)

			return ErrSnappyCorrupt
		}

		// Check if offset is one of the recent offsets.
		// Adjusts the output offset accordingly.
		// Gives a tiny bit of compression, typically around 1%.
		if false {
			offset = blk.matchOffset(offset, uint32(lits))
		} else {
			offset += 3
		}

		blk.sequences = append(blk.sequences, seq{
			litLen:   uint32(lits),
			offset:   offset,
			matchLen: uint32(length) - zstdMinMatch,
		})
		blk.size += length + lits
		lits = 0
	}
	blk.extraLits = lits
	return nil
}

func (r *SnappyConverter) readFull(p []byte, allowEOF bool) (ok bool) {
	if _, r.err = io.ReadFull(r.r, p); r.err != nil {
		if r.err == io.ErrUnexpectedEOF || (r.err == io.EOF && !allowEOF) {
			r.err = ErrSnappyCorrupt
		}
		return false
	}
	return true
}

var crcTable = crc32.MakeTable(crc32.Castagnoli)

// crc implements the checksum specified in section 3 of
// https://github.com/google/snappy/blob/master/framing_format.txt
func snappyCRC(b []byte) uint32 {
	c := crc32.Update(0, crcTable, b)
	return c>>15 | c<<17 + 0xa282ead8
}

// snappyDecodedLen returns the length of the decoded block and the number of bytes
// that the length header occupied.
func snappyDecodedLen(src []byte) (blockLen, headerLen int, err error) {
	v, n := binary.Uvarint(src)
	if n <= 0 || v > 0xffffffff {
		return 0, 0, ErrSnappyCorrupt
	}

	const wordSize = 32 << (^uint(0) >> 32 & 1)
	if wordSize == 32 && v > 0x7fffffff {
		return 0, 0, ErrSnappyTooLarge
	}
	return int(v), n, nil
}
  070701000008A0000081A4000000000000000000000001645E367C00000DC0000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/zip.go  // Copyright 2019+ Klaus Post. All rights reserved.
// License information can be found in the LICENSE file.

package zstd

import (
	"errors"
	"io"
	"sync"
)

// ZipMethodWinZip is the method for Zstandard compressed data inside Zip files for WinZip.
// See https://www.winzip.com/win/en/comp_info.html
const ZipMethodWinZip = 93

// ZipMethodPKWare is the original method number used by PKWARE to indicate Zstandard compression.
// Deprecated: This has been deprecated by PKWARE, use ZipMethodWinZip instead for compression.
// See https://pkware.cachefly.net/webdocs/APPNOTE/APPNOTE-6.3.9.TXT
const ZipMethodPKWare = 20

// zipReaderPool is the default reader pool.
var zipReaderPool = sync.Pool{New: func() interface{} {
	z, err := NewReader(nil, WithDecoderLowmem(true), WithDecoderMaxWindow(128<<20), WithDecoderConcurrency(1))
	if err != nil {
		panic(err)
	}
	return z
}}

// newZipReader creates a pooled zip decompressor.
func newZipReader(opts ...DOption) func(r io.Reader) io.ReadCloser {
	pool := &zipReaderPool
	if len(opts) > 0 {
		opts = append([]DOption{WithDecoderLowmem(true), WithDecoderMaxWindow(128 << 20)}, opts...)
		// Force concurrency 1
		opts = append(opts, WithDecoderConcurrency(1))
		// Create our own pool
		pool = &sync.Pool{}
	}
	return func(r io.Reader) io.ReadCloser {
		dec, ok := pool.Get().(*Decoder)
		if ok {
			dec.Reset(r)
		} else {
			d, err := NewReader(r, opts...)
			if err != nil {
				panic(err)
			}
			dec = d
		}
		return &pooledZipReader{dec: dec, pool: pool}
	}
}

type pooledZipReader struct {
	mu   sync.Mutex // guards Close and Read
	pool *sync.Pool
	dec  *Decoder
}

func (r *pooledZipReader) Read(p []byte) (n int, err error) {
	r.mu.Lock()
	defer r.mu.Unlock()
	if r.dec == nil {
		return 0, errors.New("read after close or EOF")
	}
	dec, err := r.dec.Read(p)
	if err == io.EOF {
		r.dec.Reset(nil)
		r.pool.Put(r.dec)
		r.dec = nil
	}
	return dec, err
}

func (r *pooledZipReader) Close() error {
	r.mu.Lock()
	defer r.mu.Unlock()
	var err error
	if r.dec != nil {
		err = r.dec.Reset(nil)
		r.pool.Put(r.dec)
		r.dec = nil
	}
	return err
}

type pooledZipWriter struct {
	mu   sync.Mutex // guards Close and Read
	enc  *Encoder
	pool *sync.Pool
}

func (w *pooledZipWriter) Write(p []byte) (n int, err error) {
	w.mu.Lock()
	defer w.mu.Unlock()
	if w.enc == nil {
		return 0, errors.New("Write after Close")
	}
	return w.enc.Write(p)
}

func (w *pooledZipWriter) Close() error {
	w.mu.Lock()
	defer w.mu.Unlock()
	var err error
	if w.enc != nil {
		err = w.enc.Close()
		w.pool.Put(w.enc)
		w.enc = nil
	}
	return err
}

// ZipCompressor returns a compressor that can be registered with zip libraries.
// The provided encoder options will be used on all encodes.
func ZipCompressor(opts ...EOption) func(w io.Writer) (io.WriteCloser, error) {
	var pool sync.Pool
	return func(w io.Writer) (io.WriteCloser, error) {
		enc, ok := pool.Get().(*Encoder)
		if ok {
			enc.Reset(w)
		} else {
			var err error
			enc, err = NewWriter(w, opts...)
			if err != nil {
				return nil, err
			}
		}
		return &pooledZipWriter{enc: enc, pool: &pool}, nil
	}
}

// ZipDecompressor returns a decompressor that can be registered with zip libraries.
// See ZipCompressor for example.
// Options can be specified. WithDecoderConcurrency(1) is forced,
// and by default a 128MB maximum decompression window is specified.
// The window size can be overridden if required.
func ZipDecompressor(opts ...DOption) func(r io.Reader) io.ReadCloser {
	return newZipReader(opts...)
}
070701000008A1000081A4000000000000000000000001645E367C00001131000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/klauspost/compress/zstd/zstd.go // Package zstd provides decompression of zstandard files.
//
// For advanced usage and examples, go to the README: https://github.com/klauspost/compress/tree/master/zstd#zstd
package zstd

import (
	"bytes"
	"encoding/binary"
	"errors"
	"log"
	"math"
	"math/bits"
)

// enable debug printing
const debug = false

// enable encoding debug printing
const debugEncoder = debug

// enable decoding debug printing
const debugDecoder = debug

// Enable extra assertions.
const debugAsserts = debug || false

// print sequence details
const debugSequences = false

// print detailed matching information
const debugMatches = false

// force encoder to use predefined tables.
const forcePreDef = false

// zstdMinMatch is the minimum zstd match length.
const zstdMinMatch = 3

// fcsUnknown is used for unknown frame content size.
const fcsUnknown = math.MaxUint64

var (
	// ErrReservedBlockType is returned when a reserved block type is found.
	// Typically this indicates wrong or corrupted input.
	ErrReservedBlockType = errors.New("invalid input: reserved block type encountered")

	// ErrCompressedSizeTooBig is returned when a block is bigger than allowed.
	// Typically this indicates wrong or corrupted input.
	ErrCompressedSizeTooBig = errors.New("invalid input: compressed size too big")

	// ErrBlockTooSmall is returned when a block is too small to be decoded.
	// Typically returned on invalid input.
	ErrBlockTooSmall = errors.New("block too small")

	// ErrUnexpectedBlockSize is returned when a block has unexpected size.
	// Typically returned on invalid input.
	ErrUnexpectedBlockSize = errors.New("unexpected block size")

	// ErrMagicMismatch is returned when a "magic" number isn't what is expected.
	// Typically this indicates wrong or corrupted input.
	ErrMagicMismatch = errors.New("invalid input: magic number mismatch")

	// ErrWindowSizeExceeded is returned when a reference exceeds the valid window size.
	// Typically this indicates wrong or corrupted input.
	ErrWindowSizeExceeded = errors.New("window size exceeded")

	// ErrWindowSizeTooSmall is returned when no window size is specified.
	// Typically this indicates wrong or corrupted input.
	ErrWindowSizeTooSmall = errors.New("invalid input: window size was too small")

	// ErrDecoderSizeExceeded is returned if decompressed size exceeds the configured limit.
	ErrDecoderSizeExceeded = errors.New("decompressed size exceeds configured limit")

	// ErrUnknownDictionary is returned if the dictionary ID is unknown.
	ErrUnknownDictionary = errors.New("unknown dictionary")

	// ErrFrameSizeExceeded is returned if the stated frame size is exceeded.
	// This is only returned if SingleSegment is specified on the frame.
	ErrFrameSizeExceeded = errors.New("frame size exceeded")

	// ErrFrameSizeMismatch is returned if the stated frame size does not match the expected size.
	// This is only returned if SingleSegment is specified on the frame.
	ErrFrameSizeMismatch = errors.New("frame size does not match size on stream")

	// ErrCRCMismatch is returned if CRC mismatches.
	ErrCRCMismatch = errors.New("CRC check failed")

	// ErrDecoderClosed will be returned if the Decoder was used after
	// Close has been called.
	ErrDecoderClosed = errors.New("decoder used after Close")

	// ErrDecoderNilInput is returned when a nil Reader was provided
	// and an operation other than Reset/DecodeAll/Close was attempted.
	ErrDecoderNilInput = errors.New("nil input provided as reader")
)

func println(a ...interface{}) {
	if debug || debugDecoder || debugEncoder {
		log.Println(a...)
	}
}

func printf(format string, a ...interface{}) {
	if debug || debugDecoder || debugEncoder {
		log.Printf(format, a...)
	}
}

// matchLen returns the maximum common prefix length of a and b.
// a must be the shortest of the two.
func matchLen(a, b []byte) (n int) {
	for ; len(a) >= 8 && len(b) >= 8; a, b = a[8:], b[8:] {
		diff := binary.LittleEndian.Uint64(a) ^ binary.LittleEndian.Uint64(b)
		if diff != 0 {
			return n + bits.TrailingZeros64(diff)>>3
		}
		n += 8
	}

	for i := range a {
		if a[i] != b[i] {
			break
		}
		n++
	}
	return n

}

func load3232(b []byte, i int32) uint32 {
	return binary.LittleEndian.Uint32(b[:len(b):len(b)][i:])
}

func load6432(b []byte, i int32) uint64 {
	return binary.LittleEndian.Uint64(b[:len(b):len(b)][i:])
}

type byter interface {
	Bytes() []byte
	Len() int
}

var _ byter = &bytes.Buffer{}
   070701000008A2000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003100000000elemental-cli-0.3.1/vendor/github.com/magiconair  070701000008A3000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/magiconair/properties   070701000008A4000081A4000000000000000000000001645E367C0000003F000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/magiconair/properties/.gitignore    *.sublime-project
*.sublime-workspace
*.un~
*.swp
.idea/
*.iml
 070701000008A5000081A4000000000000000000000001645E367C00002BDA000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/magiconair/properties/CHANGELOG.md  ## Changelog

### [1.8.7](https://github.com/magiconair/properties/tree/v1.8.7) - 08 Dec 2022

 * [PR #65](https://github.com/magiconair/properties/pull/65): Speedup Merge

   Thanks to [@AdityaVallabh](https://github.com/AdityaVallabh) for the patch.

 * [PR #66](https://github.com/magiconair/properties/pull/66): use github actions

### [1.8.6](https://github.com/magiconair/properties/tree/v1.8.6) - 23 Feb 2022

 * [PR #57](https://github.com/magiconair/properties/pull/57):Fix "unreachable code" lint error

   Thanks to [@ellie](https://github.com/ellie) for the patch.

 * [PR #63](https://github.com/magiconair/properties/pull/63): Make TestMustGetParsedDuration backwards compatible

   This patch ensures that the `TestMustGetParsedDuration` still works with `go1.3` to make the
   author happy until it affects real users.

   Thanks to [@maage](https://github.com/maage) for the patch.

### [1.8.5](https://github.com/magiconair/properties/tree/v1.8.5) - 24 Mar 2021

 * [PR #55](https://github.com/magiconair/properties/pull/55): Fix: Encoding Bug in Comments

   When reading comments \ are loaded correctly, but when writing they are then
   replaced by \\. This leads to wrong comments when writing and reading multiple times.

   Thanks to [@doxsch](https://github.com/doxsch) for the patch.

### [1.8.4](https://github.com/magiconair/properties/tree/v1.8.4) - 23 Sep 2020

 * [PR #50](https://github.com/magiconair/properties/pull/50): enhance error message for circular references

   Thanks to [@sriv](https://github.com/sriv) for the patch.

### [1.8.3](https://github.com/magiconair/properties/tree/v1.8.3) - 14 Sep 2020

 * [PR #49](https://github.com/magiconair/properties/pull/49): Include the key in error message causing the circular reference

   The change is include the key in the error message which is causing the circular
   reference when parsing/loading the properties files.

   Thanks to [@haroon-sheikh](https://github.com/haroon-sheikh) for the patch.

### [1.8.2](https://github.com/magiconair/properties/tree/v1.8.2) - 25 Aug 2020

 * [PR #36](https://github.com/magiconair/properties/pull/36): Escape backslash on write

   This patch ensures that backslashes are escaped on write. Existing applications which
   rely on the old behavior may need to be updated.

   Thanks to [@apesternikov](https://github.com/apesternikov) for the patch.

 * [PR #42](https://github.com/magiconair/properties/pull/42): Made Content-Type check whitespace agnostic in LoadURL()

   Thanks to [@aliras1](https://github.com/aliras1) for the patch.

 * [PR #41](https://github.com/magiconair/properties/pull/41): Make key/value separator configurable on Write()

   Thanks to [@mkjor](https://github.com/mkjor) for the patch.

 * [PR #40](https://github.com/magiconair/properties/pull/40): Add method to return a sorted list of keys

   Thanks to [@mkjor](https://github.com/mkjor) for the patch.

### [1.8.1](https://github.com/magiconair/properties/tree/v1.8.1) - 10 May 2019

 * [PR #35](https://github.com/magiconair/properties/pull/35): Close body always after request

   This patch ensures that in `LoadURL` the response body is always closed.

   Thanks to [@liubog2008](https://github.com/liubog2008) for the patch.

### [1.8](https://github.com/magiconair/properties/tree/v1.8) - 15 May 2018

 * [PR #26](https://github.com/magiconair/properties/pull/26): Disable expansion during loading

   This adds the option to disable property expansion during loading.

   Thanks to [@kmala](https://github.com/kmala) for the patch.

### [1.7.6](https://github.com/magiconair/properties/tree/v1.7.6) - 14 Feb 2018

 * [PR #29](https://github.com/magiconair/properties/pull/29): Reworked expansion logic to handle more complex cases.

   See PR for an example.

   Thanks to [@yobert](https://github.com/yobert) for the fix.

### [1.7.5](https://github.com/magiconair/properties/tree/v1.7.5) - 13 Feb 2018

 * [PR #28](https://github.com/magiconair/properties/pull/28): Support duplicate expansions in the same value

   Values which expand the same key multiple times (e.g. `key=${a} ${a}`) will no longer fail
   with a `circular reference error`.

   Thanks to [@yobert](https://github.com/yobert) for the fix.

### [1.7.4](https://github.com/magiconair/properties/tree/v1.7.4) - 31 Oct 2017

 * [Issue #23](https://github.com/magiconair/properties/issues/23): Ignore blank lines with whitespaces

 * [PR #24](https://github.com/magiconair/properties/pull/24): Update keys when DisableExpansion is enabled

   Thanks to [@mgurov](https://github.com/mgurov) for the fix.

### [1.7.3](https://github.com/magiconair/properties/tree/v1.7.3) - 10 Jul 2017

 * [Issue #17](https://github.com/magiconair/properties/issues/17): Add [SetValue()](http://godoc.org/github.com/magiconair/properties#Properties.SetValue) method to set values generically
 * [Issue #22](https://github.com/magiconair/properties/issues/22): Add [LoadMap()](http://godoc.org/github.com/magiconair/properties#LoadMap) function to load properties from a string map

### [1.7.2](https://github.com/magiconair/properties/tree/v1.7.2) - 20 Mar 2017

 * [Issue #15](https://github.com/magiconair/properties/issues/15): Drop gocheck dependency
 * [PR #21](https://github.com/magiconair/properties/pull/21): Add [Map()](http://godoc.org/github.com/magiconair/properties#Properties.Map) and [FilterFunc()](http://godoc.org/github.com/magiconair/properties#Properties.FilterFunc)

### [1.7.1](https://github.com/magiconair/properties/tree/v1.7.1) - 13 Jan 2017

 * [Issue #14](https://github.com/magiconair/properties/issues/14): Decouple TestLoadExpandedFile from `$USER`
 * [PR #12](https://github.com/magiconair/properties/pull/12): Load from files and URLs
 * [PR #16](https://github.com/magiconair/properties/pull/16): Keep gofmt happy
 * [PR #18](https://github.com/magiconair/properties/pull/18): Fix Delete() function

### [1.7.0](https://github.com/magiconair/properties/tree/v1.7.0) - 20 Mar 2016

 * [Issue #10](https://github.com/magiconair/properties/issues/10): Add [LoadURL,LoadURLs,MustLoadURL,MustLoadURLs](http://godoc.org/github.com/magiconair/properties#LoadURL) method to load properties from a URL.
 * [Issue #11](https://github.com/magiconair/properties/issues/11): Add [LoadString,MustLoadString](http://godoc.org/github.com/magiconair/properties#LoadString) method to load properties from an UTF8 string.
 * [PR #8](https://github.com/magiconair/properties/pull/8): Add [MustFlag](http://godoc.org/github.com/magiconair/properties#Properties.MustFlag) method to provide overrides via command line flags. (@pascaldekloe)

### [1.6.0](https://github.com/magiconair/properties/tree/v1.6.0) - 11 Dec 2015

 * Add [Decode](http://godoc.org/github.com/magiconair/properties#Properties.Decode) method to populate struct from properties via tags.

### [1.5.6](https://github.com/magiconair/properties/tree/v1.5.6) - 18 Oct 2015

 * Vendored in gopkg.in/check.v1

### [1.5.5](https://github.com/magiconair/properties/tree/v1.5.5) - 31 Jul 2015

 * [PR #6](https://github.com/magiconair/properties/pull/6): Add [Delete](http://godoc.org/github.com/magiconair/properties#Properties.Delete) method to remove keys including comments. (@gerbenjacobs)

### [1.5.4](https://github.com/magiconair/properties/tree/v1.5.4) - 23 Jun 2015

 * [Issue #5](https://github.com/magiconair/properties/issues/5): Allow disabling of property expansion [DisableExpansion](http://godoc.org/github.com/magiconair/properties#Properties.DisableExpansion). When property expansion is disabled Properties become a simple key/value store and don't check for circular references.

### [1.5.3](https://github.com/magiconair/properties/tree/v1.5.3) - 02 Jun 2015

 * [Issue #4](https://github.com/magiconair/properties/issues/4): Maintain key order in [Filter()](http://godoc.org/github.com/magiconair/properties#Properties.Filter), [FilterPrefix()](http://godoc.org/github.com/magiconair/properties#Properties.FilterPrefix) and [FilterRegexp()](http://godoc.org/github.com/magiconair/properties#Properties.FilterRegexp)

### [1.5.2](https://github.com/magiconair/properties/tree/v1.5.2) - 10 Apr 2015

 * [Issue #3](https://github.com/magiconair/properties/issues/3): Don't print comments in [WriteComment()](http://godoc.org/github.com/magiconair/properties#Properties.WriteComment) if they are all empty
 * Add clickable links to README

### [1.5.1](https://github.com/magiconair/properties/tree/v1.5.1) - 08 Dec 2014

 * Added [GetParsedDuration()](http://godoc.org/github.com/magiconair/properties#Properties.GetParsedDuration) and [MustGetParsedDuration()](http://godoc.org/github.com/magiconair/properties#Properties.MustGetParsedDuration) for values specified compatible with
   [time.ParseDuration()](http://golang.org/pkg/time/#ParseDuration).

### [1.5.0](https://github.com/magiconair/properties/tree/v1.5.0) - 18 Nov 2014

 * Added support for single and multi-line comments (reading, writing and updating)
 * The order of keys is now preserved
 * Calling [Set()](http://godoc.org/github.com/magiconair/properties#Properties.Set) with an empty key now silently ignores the call and does not create a new entry
 * Added a [MustSet()](http://godoc.org/github.com/magiconair/properties#Properties.MustSet) method
 * Migrated test library from launchpad.net/gocheck to [gopkg.in/check.v1](http://gopkg.in/check.v1)

### [1.4.2](https://github.com/magiconair/properties/tree/v1.4.2) - 15 Nov 2014

 * [Issue #2](https://github.com/magiconair/properties/issues/2): Fixed goroutine leak in parser which created two lexers but cleaned up only one

### [1.4.1](https://github.com/magiconair/properties/tree/v1.4.1) - 13 Nov 2014

 * [Issue #1](https://github.com/magiconair/properties/issues/1): Fixed bug in Keys() method which returned an empty string

### [1.4.0](https://github.com/magiconair/properties/tree/v1.4.0) - 23 Sep 2014

 * Added [Keys()](http://godoc.org/github.com/magiconair/properties#Properties.Keys) to get the keys
 * Added [Filter()](http://godoc.org/github.com/magiconair/properties#Properties.Filter), [FilterRegexp()](http://godoc.org/github.com/magiconair/properties#Properties.FilterRegexp) and [FilterPrefix()](http://godoc.org/github.com/magiconair/properties#Properties.FilterPrefix) to get a subset of the properties

### [1.3.0](https://github.com/magiconair/properties/tree/v1.3.0) - 18 Mar 2014

* Added support for time.Duration
* Made MustXXX() failure beha[ior configurable (log.Fatal, panic](https://github.com/magiconair/properties/tree/vior configurable (log.Fatal, panic) - custom)
* Changed default of MustXXX() failure from panic to log.Fatal

### [1.2.0](https://github.com/magiconair/properties/tree/v1.2.0) - 05 Mar 2014

* Added MustGet... functions
* Added support for int and uint with range checks on 32 bit platforms

### [1.1.0](https://github.com/magiconair/properties/tree/v1.1.0) - 20 Jan 2014

* Renamed from goproperties to properties
* Added support for expansion of environment vars in
  filenames and value expressions
* Fixed bug where value expressions were not at the
  start of the string

### [1.0.0](https://github.com/magiconair/properties/tree/v1.0.0) - 7 Jan 2014

* Initial release
  070701000008A6000081A4000000000000000000000001645E367C0000051C000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/magiconair/properties/LICENSE.md    Copyright (c) 2013-2020, Frank Schroeder

All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

 * Redistributions of source code must retain the above copyright notice, this
   list of conditions and the following disclaimer.

 * Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
070701000008A7000081A4000000000000000000000001645E367C00001062000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/magiconair/properties/README.md [![](https://img.shields.io/github/tag/magiconair/properties.svg?style=flat-square&label=release)](https://github.com/magiconair/properties/releases)
[![Travis CI Status](https://img.shields.io/travis/magiconair/properties.svg?branch=master&style=flat-square&label=travis)](https://travis-ci.org/magiconair/properties)
[![License](https://img.shields.io/badge/License-BSD%202--Clause-orange.svg?style=flat-square)](https://raw.githubusercontent.com/magiconair/properties/master/LICENSE)
[![GoDoc](http://img.shields.io/badge/godoc-reference-5272B4.svg?style=flat-square)](http://godoc.org/github.com/magiconair/properties)

# Overview

#### Please run `git pull --tags` to update the tags. See [below](#updated-git-tags) why.

properties is a Go library for reading and writing properties files.

It supports reading from multiple files or URLs and Spring style recursive
property expansion of expressions like `${key}` to their corresponding value.
Value expressions can refer to other keys like in `${key}` or to environment
variables like in `${USER}`.  Filenames can also contain environment variables
like in `/home/${USER}/myapp.properties`.

Properties can be decoded into structs, maps, arrays and values through
struct tags.

Comments and the order of keys are preserved. Comments can be modified
and can be written to the output.

The properties library supports both ISO-8859-1 and UTF-8 encoded data.

Starting from version 1.3.0 the behavior of the MustXXX() functions is
configurable by providing a custom `ErrorHandler` function. The default has
changed from `panic` to `log.Fatal` but this is configurable and custom
error handling functions can be provided. See the package documentation for
details.

Read the full documentation on [![GoDoc](http://img.shields.io/badge/godoc-reference-5272B4.svg?style=flat-square)](http://godoc.org/github.com/magiconair/properties)

## Getting Started

```go
import (
	"flag"
	"github.com/magiconair/properties"
)

func main() {
	// init from a file
	p := properties.MustLoadFile("${HOME}/config.properties", properties.UTF8)

	// or multiple files
	p = properties.MustLoadFiles([]string{
			"${HOME}/config.properties",
			"${HOME}/config-${USER}.properties",
		}, properties.UTF8, true)

	// or from a map
	p = properties.LoadMap(map[string]string{"key": "value", "abc": "def"})

	// or from a string
	p = properties.MustLoadString("key=value\nabc=def")

	// or from a URL
	p = properties.MustLoadURL("http://host/path")

	// or from multiple URLs
	p = properties.MustLoadURL([]string{
			"http://host/config",
			"http://host/config-${USER}",
		}, true)

	// or from flags
	p.MustFlag(flag.CommandLine)

	// get values through getters
	host := p.MustGetString("host")
	port := p.GetInt("port", 8080)

	// or through Decode
	type Config struct {
		Host    string        `properties:"host"`
		Port    int           `properties:"port,default=9000"`
		Accept  []string      `properties:"accept,default=image/png;image;gif"`
		Timeout time.Duration `properties:"timeout,default=5s"`
	}
	var cfg Config
	if err := p.Decode(&cfg); err != nil {
		log.Fatal(err)
	}
}

```

## Installation and Upgrade

```
$ go get -u github.com/magiconair/properties
```

## License

2 clause BSD license. See [LICENSE](https://github.com/magiconair/properties/blob/master/LICENSE) file for details.

## ToDo

* Dump contents with passwords and secrets obscured

## Updated Git tags

#### 13 Feb 2018

I realized that all of the git tags I had pushed before v1.7.5 were lightweight tags
and I've only recently learned that this doesn't play well with `git describe` 😞

I have replaced all lightweight tags with signed tags using this script which should
retain the commit date, name and email address. Please run `git pull --tags` to update them.

Worst case you have to reclone the repo.

```shell
#!/bin/bash
tag=$1
echo "Updating $tag"
date=$(git show ${tag}^0 --format=%aD | head -1)
email=$(git show ${tag}^0 --format=%aE | head -1)
name=$(git show ${tag}^0 --format=%aN | head -1)
GIT_COMMITTER_DATE="$date" GIT_COMMITTER_NAME="$name" GIT_COMMITTER_EMAIL="$email" git tag -s -f ${tag} ${tag}^0 -m ${tag}
```

I apologize for the inconvenience.

Frank

  070701000008A8000081A4000000000000000000000001645E367C00002120000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/magiconair/properties/decode.go // Copyright 2013-2022 Frank Schroeder. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package properties

import (
	"fmt"
	"reflect"
	"strconv"
	"strings"
	"time"
)

// Decode assigns property values to exported fields of a struct.
//
// Decode traverses v recursively and returns an error if a value cannot be
// converted to the field type or a required value is missing for a field.
//
// The following type dependent decodings are used:
//
// String, boolean, numeric fields have the value of the property key assigned.
// The property key name is the name of the field. A different key and a default
// value can be set in the field's tag. Fields without default value are
// required. If the value cannot be converted to the field type an error is
// returned.
//
// time.Duration fields have the result of time.ParseDuration() assigned.
//
// time.Time fields have the vaule of time.Parse() assigned. The default layout
// is time.RFC3339 but can be set in the field's tag.
//
// Arrays and slices of string, boolean, numeric, time.Duration and time.Time
// fields have the value interpreted as a comma separated list of values. The
// individual values are trimmed of whitespace and empty values are ignored. A
// default value can be provided as a semicolon separated list in the field's
// tag.
//
// Struct fields are decoded recursively using the field name plus "." as
// prefix. The prefix (without dot) can be overridden in the field's tag.
// Default values are not supported in the field's tag. Specify them on the
// fields of the inner struct instead.
//
// Map fields must have a key of type string and are decoded recursively by
// using the field's name plus ".' as prefix and the next element of the key
// name as map key. The prefix (without dot) can be overridden in the field's
// tag. Default values are not supported.
//
// Examples:
//
//	// Field is ignored.
//	Field int `properties:"-"`
//
//	// Field is assigned value of 'Field'.
//	Field int
//
//	// Field is assigned value of 'myName'.
//	Field int `properties:"myName"`
//
//	// Field is assigned value of key 'myName' and has a default
//	// value 15 if the key does not exist.
//	Field int `properties:"myName,default=15"`
//
//	// Field is assigned value of key 'Field' and has a default
//	// value 15 if the key does not exist.
//	Field int `properties:",default=15"`
//
//	// Field is assigned value of key 'date' and the date
//	// is in format 2006-01-02
//	Field time.Time `properties:"date,layout=2006-01-02"`
//
//	// Field is assigned the non-empty and whitespace trimmed
//	// values of key 'Field' split by commas.
//	Field []string
//
//	// Field is assigned the non-empty and whitespace trimmed
//	// values of key 'Field' split by commas and has a default
//	// value ["a", "b", "c"] if the key does not exist.
//	Field []string `properties:",default=a;b;c"`
//
//	// Field is decoded recursively with "Field." as key prefix.
//	Field SomeStruct
//
//	// Field is decoded recursively with "myName." as key prefix.
//	Field SomeStruct `properties:"myName"`
//
//	// Field is decoded recursively with "Field." as key prefix
//	// and the next dotted element of the key as map key.
//	Field map[string]string
//
//	// Field is decoded recursively with "myName." as key prefix
//	// and the next dotted element of the key as map key.
//	Field map[string]string `properties:"myName"`
func (p *Properties) Decode(x interface{}) error {
	t, v := reflect.TypeOf(x), reflect.ValueOf(x)
	if t.Kind() != reflect.Ptr || v.Elem().Type().Kind() != reflect.Struct {
		return fmt.Errorf("not a pointer to struct: %s", t)
	}
	if err := dec(p, "", nil, nil, v); err != nil {
		return err
	}
	return nil
}

func dec(p *Properties, key string, def *string, opts map[string]string, v reflect.Value) error {
	t := v.Type()

	// value returns the property value for key or the default if provided.
	value := func() (string, error) {
		if val, ok := p.Get(key); ok {
			return val, nil
		}
		if def != nil {
			return *def, nil
		}
		return "", fmt.Errorf("missing required key %s", key)
	}

	// conv converts a string to a value of the given type.
	conv := func(s string, t reflect.Type) (val reflect.Value, err error) {
		var v interface{}

		switch {
		case isDuration(t):
			v, err = time.ParseDuration(s)

		case isTime(t):
			layout := opts["layout"]
			if layout == "" {
				layout = time.RFC3339
			}
			v, err = time.Parse(layout, s)

		case isBool(t):
			v, err = boolVal(s), nil

		case isString(t):
			v, err = s, nil

		case isFloat(t):
			v, err = strconv.ParseFloat(s, 64)

		case isInt(t):
			v, err = strconv.ParseInt(s, 10, 64)

		case isUint(t):
			v, err = strconv.ParseUint(s, 10, 64)

		default:
			return reflect.Zero(t), fmt.Errorf("unsupported type %s", t)
		}
		if err != nil {
			return reflect.Zero(t), err
		}
		return reflect.ValueOf(v).Convert(t), nil
	}

	// keydef returns the property key and the default value based on the
	// name of the struct field and the options in the tag.
	keydef := func(f reflect.StructField) (string, *string, map[string]string) {
		_key, _opts := parseTag(f.Tag.Get("properties"))

		var _def *string
		if d, ok := _opts["default"]; ok {
			_def = &d
		}
		if _key != "" {
			return _key, _def, _opts
		}
		return f.Name, _def, _opts
	}

	switch {
	case isDuration(t) || isTime(t) || isBool(t) || isString(t) || isFloat(t) || isInt(t) || isUint(t):
		s, err := value()
		if err != nil {
			return err
		}
		val, err := conv(s, t)
		if err != nil {
			return err
		}
		v.Set(val)

	case isPtr(t):
		return dec(p, key, def, opts, v.Elem())

	case isStruct(t):
		for i := 0; i < v.NumField(); i++ {
			fv := v.Field(i)
			fk, def, opts := keydef(t.Field(i))
			if !fv.CanSet() {
				return fmt.Errorf("cannot set %s", t.Field(i).Name)
			}
			if fk == "-" {
				continue
			}
			if key != "" {
				fk = key + "." + fk
			}
			if err := dec(p, fk, def, opts, fv); err != nil {
				return err
			}
		}
		return nil

	case isArray(t):
		val, err := value()
		if err != nil {
			return err
		}
		vals := split(val, ";")
		a := reflect.MakeSlice(t, 0, len(vals))
		for _, s := range vals {
			val, err := conv(s, t.Elem())
			if err != nil {
				return err
			}
			a = reflect.Append(a, val)
		}
		v.Set(a)

	case isMap(t):
		valT := t.Elem()
		m := reflect.MakeMap(t)
		for postfix := range p.FilterStripPrefix(key + ".").m {
			pp := strings.SplitN(postfix, ".", 2)
			mk, mv := pp[0], reflect.New(valT)
			if err := dec(p, key+"."+mk, nil, nil, mv); err != nil {
				return err
			}
			m.SetMapIndex(reflect.ValueOf(mk), mv.Elem())
		}
		v.Set(m)

	default:
		return fmt.Errorf("unsupported type %s", t)
	}
	return nil
}

// split splits a string on sep, trims whitespace of elements
// and omits empty elements
func split(s string, sep string) []string {
	var a []string
	for _, v := range strings.Split(s, sep) {
		if v = strings.TrimSpace(v); v != "" {
			a = append(a, v)
		}
	}
	return a
}

// parseTag parses a "key,k=v,k=v,..."
func parseTag(tag string) (key string, opts map[string]string) {
	opts = map[string]string{}
	for i, s := range strings.Split(tag, ",") {
		if i == 0 {
			key = s
			continue
		}

		pp := strings.SplitN(s, "=", 2)
		if len(pp) == 1 {
			opts[pp[0]] = ""
		} else {
			opts[pp[0]] = pp[1]
		}
	}
	return key, opts
}

func isArray(t reflect.Type) bool    { return t.Kind() == reflect.Array || t.Kind() == reflect.Slice }
func isBool(t reflect.Type) bool     { return t.Kind() == reflect.Bool }
func isDuration(t reflect.Type) bool { return t == reflect.TypeOf(time.Second) }
func isMap(t reflect.Type) bool      { return t.Kind() == reflect.Map }
func isPtr(t reflect.Type) bool      { return t.Kind() == reflect.Ptr }
func isString(t reflect.Type) bool   { return t.Kind() == reflect.String }
func isStruct(t reflect.Type) bool   { return t.Kind() == reflect.Struct }
func isTime(t reflect.Type) bool     { return t == reflect.TypeOf(time.Time{}) }
func isFloat(t reflect.Type) bool {
	return t.Kind() == reflect.Float32 || t.Kind() == reflect.Float64
}
func isInt(t reflect.Type) bool {
	return t.Kind() == reflect.Int || t.Kind() == reflect.Int8 || t.Kind() == reflect.Int16 || t.Kind() == reflect.Int32 || t.Kind() == reflect.Int64
}
func isUint(t reflect.Type) bool {
	return t.Kind() == reflect.Uint || t.Kind() == reflect.Uint8 || t.Kind() == reflect.Uint16 || t.Kind() == reflect.Uint32 || t.Kind() == reflect.Uint64
}
070701000008A9000081A4000000000000000000000001645E367C000013C3000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/magiconair/properties/doc.go    // Copyright 2013-2022 Frank Schroeder. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package properties provides functions for reading and writing
// ISO-8859-1 and UTF-8 encoded .properties files and has
// support for recursive property expansion.
//
// Java properties files are ISO-8859-1 encoded and use Unicode
// literals for characters outside the ISO character set. Unicode
// literals can be used in UTF-8 encoded properties files but
// aren't necessary.
//
// To load a single properties file use MustLoadFile():
//
//	p := properties.MustLoadFile(filename, properties.UTF8)
//
// To load multiple properties files use MustLoadFiles()
// which loads the files in the given order and merges the
// result. Missing properties files can be ignored if the
// 'ignoreMissing' flag is set to true.
//
// Filenames can contain environment variables which are expanded
// before loading.
//
//	f1 := "/etc/myapp/myapp.conf"
//	f2 := "/home/${USER}/myapp.conf"
//	p := MustLoadFiles([]string{f1, f2}, properties.UTF8, true)
//
// All of the different key/value delimiters ' ', ':' and '=' are
// supported as well as the comment characters '!' and '#' and
// multi-line values.
//
//	! this is a comment
//	# and so is this
//
//	# the following expressions are equal
//	key value
//	key=value
//	key:value
//	key = value
//	key : value
//	key = val\
//	      ue
//
// Properties stores all comments preceding a key and provides
// GetComments() and SetComments() methods to retrieve and
// update them. The convenience functions GetComment() and
// SetComment() allow access to the last comment. The
// WriteComment() method writes properties files including
// the comments and with the keys in the original order.
// This can be used for sanitizing properties files.
//
// Property expansion is recursive and circular references
// and malformed expressions are not allowed and cause an
// error. Expansion of environment variables is supported.
//
//	# standard property
//	key = value
//
//	# property expansion: key2 = value
//	key2 = ${key}
//
//	# recursive expansion: key3 = value
//	key3 = ${key2}
//
//	# circular reference (error)
//	key = ${key}
//
//	# malformed expression (error)
//	key = ${ke
//
//	# refers to the users' home dir
//	home = ${HOME}
//
//	# local key takes precedence over env var: u = foo
//	USER = foo
//	u = ${USER}
//
// The default property expansion format is ${key} but can be
// changed by setting different pre- and postfix values on the
// Properties object.
//
//	p := properties.NewProperties()
//	p.Prefix = "#["
//	p.Postfix = "]#"
//
// Properties provides convenience functions for getting typed
// values with default values if the key does not exist or the
// type conversion failed.
//
//	# Returns true if the value is either "1", "on", "yes" or "true"
//	# Returns false for every other value and the default value if
//	# the key does not exist.
//	v = p.GetBool("key", false)
//
//	# Returns the value if the key exists and the format conversion
//	# was successful. Otherwise, the default value is returned.
//	v = p.GetInt64("key", 999)
//	v = p.GetUint64("key", 999)
//	v = p.GetFloat64("key", 123.0)
//	v = p.GetString("key", "def")
//	v = p.GetDuration("key", 999)
//
// As an alternative properties may be applied with the standard
// library's flag implementation at any time.
//
//	# Standard configuration
//	v = flag.Int("key", 999, "help message")
//	flag.Parse()
//
//	# Merge p into the flag set
//	p.MustFlag(flag.CommandLine)
//
// Properties provides several MustXXX() convenience functions
// which will terminate the app if an error occurs. The behavior
// of the failure is configurable and the default is to call
// log.Fatal(err). To have the MustXXX() functions panic instead
// of logging the error set a different ErrorHandler before
// you use the Properties package.
//
//	properties.ErrorHandler = properties.PanicHandler
//
//	# Will panic instead of logging an error
//	p := properties.MustLoadFile("config.properties")
//
// You can also provide your own ErrorHandler function. The only requirement
// is that the error handler function must exit after handling the error.
//
//	  properties.ErrorHandler = func(err error) {
//		     fmt.Println(err)
//	      os.Exit(1)
//	  }
//
//	  # Will write to stdout and then exit
//	  p := properties.MustLoadFile("config.properties")
//
// Properties can also be loaded into a struct via the `Decode`
// method, e.g.
//
//	type S struct {
//	    A string        `properties:"a,default=foo"`
//	    D time.Duration `properties:"timeout,default=5s"`
//	    E time.Time     `properties:"expires,layout=2006-01-02,default=2015-01-01"`
//	}
//
// See `Decode()` method for the full documentation.
//
// The following documents provide a description of the properties
// file format.
//
// http://en.wikipedia.org/wiki/.properties
//
// http://docs.oracle.com/javase/7/docs/api/java/util/Properties.html#load%28java.io.Reader%29
package properties
 070701000008AA000081A4000000000000000000000001645E367C00000313000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/magiconair/properties/integrate.go  // Copyright 2013-2022 Frank Schroeder. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package properties

import "flag"

// MustFlag sets flags that are skipped by dst.Parse when p contains
// the respective key for flag.Flag.Name.
//
// It's use is recommended with command line arguments as in:
//
//	flag.Parse()
//	p.MustFlag(flag.CommandLine)
func (p *Properties) MustFlag(dst *flag.FlagSet) {
	m := make(map[string]*flag.Flag)
	dst.VisitAll(func(f *flag.Flag) {
		m[f.Name] = f
	})
	dst.Visit(func(f *flag.Flag) {
		delete(m, f.Name) // overridden
	})

	for name, f := range m {
		v, ok := p.Get(name)
		if !ok {
			continue
		}

		if err := f.Value.Set(v); err != nil {
			ErrorHandler(err)
		}
	}
}
 070701000008AB000081A4000000000000000000000001645E367C0000225F000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/magiconair/properties/lex.go    // Copyright 2013-2022 Frank Schroeder. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//
// Parts of the lexer are from the template/text/parser package
// For these parts the following applies:
//
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file of the go 1.2
// distribution.

package properties

import (
	"fmt"
	"strconv"
	"strings"
	"unicode/utf8"
)

// item represents a token or text string returned from the scanner.
type item struct {
	typ itemType // The type of this item.
	pos int      // The starting position, in bytes, of this item in the input string.
	val string   // The value of this item.
}

func (i item) String() string {
	switch {
	case i.typ == itemEOF:
		return "EOF"
	case i.typ == itemError:
		return i.val
	case len(i.val) > 10:
		return fmt.Sprintf("%.10q...", i.val)
	}
	return fmt.Sprintf("%q", i.val)
}

// itemType identifies the type of lex items.
type itemType int

const (
	itemError itemType = iota // error occurred; value is text of error
	itemEOF
	itemKey     // a key
	itemValue   // a value
	itemComment // a comment
)

// defines a constant for EOF
const eof = -1

// permitted whitespace characters space, FF and TAB
const whitespace = " \f\t"

// stateFn represents the state of the scanner as a function that returns the next state.
type stateFn func(*lexer) stateFn

// lexer holds the state of the scanner.
type lexer struct {
	input   string    // the string being scanned
	state   stateFn   // the next lexing function to enter
	pos     int       // current position in the input
	start   int       // start position of this item
	width   int       // width of last rune read from input
	lastPos int       // position of most recent item returned by nextItem
	runes   []rune    // scanned runes for this item
	items   chan item // channel of scanned items
}

// next returns the next rune in the input.
func (l *lexer) next() rune {
	if l.pos >= len(l.input) {
		l.width = 0
		return eof
	}
	r, w := utf8.DecodeRuneInString(l.input[l.pos:])
	l.width = w
	l.pos += l.width
	return r
}

// peek returns but does not consume the next rune in the input.
func (l *lexer) peek() rune {
	r := l.next()
	l.backup()
	return r
}

// backup steps back one rune. Can only be called once per call of next.
func (l *lexer) backup() {
	l.pos -= l.width
}

// emit passes an item back to the client.
func (l *lexer) emit(t itemType) {
	i := item{t, l.start, string(l.runes)}
	l.items <- i
	l.start = l.pos
	l.runes = l.runes[:0]
}

// ignore skips over the pending input before this point.
func (l *lexer) ignore() {
	l.start = l.pos
}

// appends the rune to the current value
func (l *lexer) appendRune(r rune) {
	l.runes = append(l.runes, r)
}

// accept consumes the next rune if it's from the valid set.
func (l *lexer) accept(valid string) bool {
	if strings.ContainsRune(valid, l.next()) {
		return true
	}
	l.backup()
	return false
}

// acceptRun consumes a run of runes from the valid set.
func (l *lexer) acceptRun(valid string) {
	for strings.ContainsRune(valid, l.next()) {
	}
	l.backup()
}

// lineNumber reports which line we're on, based on the position of
// the previous item returned by nextItem. Doing it this way
// means we don't have to worry about peek double counting.
func (l *lexer) lineNumber() int {
	return 1 + strings.Count(l.input[:l.lastPos], "\n")
}

// errorf returns an error token and terminates the scan by passing
// back a nil pointer that will be the next state, terminating l.nextItem.
func (l *lexer) errorf(format string, args ...interface{}) stateFn {
	l.items <- item{itemError, l.start, fmt.Sprintf(format, args...)}
	return nil
}

// nextItem returns the next item from the input.
func (l *lexer) nextItem() item {
	i := <-l.items
	l.lastPos = i.pos
	return i
}

// lex creates a new scanner for the input string.
func lex(input string) *lexer {
	l := &lexer{
		input: input,
		items: make(chan item),
		runes: make([]rune, 0, 32),
	}
	go l.run()
	return l
}

// run runs the state machine for the lexer.
func (l *lexer) run() {
	for l.state = lexBeforeKey(l); l.state != nil; {
		l.state = l.state(l)
	}
}

// state functions

// lexBeforeKey scans until a key begins.
func lexBeforeKey(l *lexer) stateFn {
	switch r := l.next(); {
	case isEOF(r):
		l.emit(itemEOF)
		return nil

	case isEOL(r):
		l.ignore()
		return lexBeforeKey

	case isComment(r):
		return lexComment

	case isWhitespace(r):
		l.ignore()
		return lexBeforeKey

	default:
		l.backup()
		return lexKey
	}
}

// lexComment scans a comment line. The comment character has already been scanned.
func lexComment(l *lexer) stateFn {
	l.acceptRun(whitespace)
	l.ignore()
	for {
		switch r := l.next(); {
		case isEOF(r):
			l.ignore()
			l.emit(itemEOF)
			return nil
		case isEOL(r):
			l.emit(itemComment)
			return lexBeforeKey
		default:
			l.appendRune(r)
		}
	}
}

// lexKey scans the key up to a delimiter
func lexKey(l *lexer) stateFn {
	var r rune

Loop:
	for {
		switch r = l.next(); {

		case isEscape(r):
			err := l.scanEscapeSequence()
			if err != nil {
				return l.errorf(err.Error())
			}

		case isEndOfKey(r):
			l.backup()
			break Loop

		case isEOF(r):
			break Loop

		default:
			l.appendRune(r)
		}
	}

	if len(l.runes) > 0 {
		l.emit(itemKey)
	}

	if isEOF(r) {
		l.emit(itemEOF)
		return nil
	}

	return lexBeforeValue
}

// lexBeforeValue scans the delimiter between key and value.
// Leading and trailing whitespace is ignored.
// We expect to be just after the key.
func lexBeforeValue(l *lexer) stateFn {
	l.acceptRun(whitespace)
	l.accept(":=")
	l.acceptRun(whitespace)
	l.ignore()
	return lexValue
}

// lexValue scans text until the end of the line. We expect to be just after the delimiter.
func lexValue(l *lexer) stateFn {
	for {
		switch r := l.next(); {
		case isEscape(r):
			if isEOL(l.peek()) {
				l.next()
				l.acceptRun(whitespace)
			} else {
				err := l.scanEscapeSequence()
				if err != nil {
					return l.errorf(err.Error())
				}
			}

		case isEOL(r):
			l.emit(itemValue)
			l.ignore()
			return lexBeforeKey

		case isEOF(r):
			l.emit(itemValue)
			l.emit(itemEOF)
			return nil

		default:
			l.appendRune(r)
		}
	}
}

// scanEscapeSequence scans either one of the escaped characters
// or a unicode literal. We expect to be after the escape character.
func (l *lexer) scanEscapeSequence() error {
	switch r := l.next(); {

	case isEscapedCharacter(r):
		l.appendRune(decodeEscapedCharacter(r))
		return nil

	case atUnicodeLiteral(r):
		return l.scanUnicodeLiteral()

	case isEOF(r):
		return fmt.Errorf("premature EOF")

	// silently drop the escape character and append the rune as is
	default:
		l.appendRune(r)
		return nil
	}
}

// scans a unicode literal in the form \uXXXX. We expect to be after the \u.
func (l *lexer) scanUnicodeLiteral() error {
	// scan the digits
	d := make([]rune, 4)
	for i := 0; i < 4; i++ {
		d[i] = l.next()
		if d[i] == eof || !strings.ContainsRune("0123456789abcdefABCDEF", d[i]) {
			return fmt.Errorf("invalid unicode literal")
		}
	}

	// decode the digits into a rune
	r, err := strconv.ParseInt(string(d), 16, 0)
	if err != nil {
		return err
	}

	l.appendRune(rune(r))
	return nil
}

// decodeEscapedCharacter returns the unescaped rune. We expect to be after the escape character.
func decodeEscapedCharacter(r rune) rune {
	switch r {
	case 'f':
		return '\f'
	case 'n':
		return '\n'
	case 'r':
		return '\r'
	case 't':
		return '\t'
	default:
		return r
	}
}

// atUnicodeLiteral reports whether we are at a unicode literal.
// The escape character has already been consumed.
func atUnicodeLiteral(r rune) bool {
	return r == 'u'
}

// isComment reports whether we are at the start of a comment.
func isComment(r rune) bool {
	return r == '#' || r == '!'
}

// isEndOfKey reports whether the rune terminates the current key.
func isEndOfKey(r rune) bool {
	return strings.ContainsRune(" \f\t\r\n:=", r)
}

// isEOF reports whether we are at EOF.
func isEOF(r rune) bool {
	return r == eof
}

// isEOL reports whether we are at a new line character.
func isEOL(r rune) bool {
	return r == '\n' || r == '\r'
}

// isEscape reports whether the rune is the escape character which
// prefixes unicode literals and other escaped characters.
func isEscape(r rune) bool {
	return r == '\\'
}

// isEscapedCharacter reports whether we are at one of the characters that need escaping.
// The escape character has already been consumed.
func isEscapedCharacter(r rune) bool {
	return strings.ContainsRune(" :=fnrt", r)
}

// isWhitespace reports whether the rune is a whitespace character.
func isWhitespace(r rune) bool {
	return strings.ContainsRune(whitespace, r)
}
 070701000008AC000081A4000000000000000000000001645E367C000024F9000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/magiconair/properties/load.go   // Copyright 2013-2022 Frank Schroeder. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package properties

import (
	"fmt"
	"io/ioutil"
	"net/http"
	"os"
	"strings"
)

// Encoding specifies encoding of the input data.
type Encoding uint

const (
	// utf8Default is a private placeholder for the zero value of Encoding to
	// ensure that it has the correct meaning. UTF8 is the default encoding but
	// was assigned a non-zero value which cannot be changed without breaking
	// existing code. Clients should continue to use the public constants.
	utf8Default Encoding = iota

	// UTF8 interprets the input data as UTF-8.
	UTF8

	// ISO_8859_1 interprets the input data as ISO-8859-1.
	ISO_8859_1
)

type Loader struct {
	// Encoding determines how the data from files and byte buffers
	// is interpreted. For URLs the Content-Type header is used
	// to determine the encoding of the data.
	Encoding Encoding

	// DisableExpansion configures the property expansion of the
	// returned property object. When set to true, the property values
	// will not be expanded and the Property object will not be checked
	// for invalid expansion expressions.
	DisableExpansion bool

	// IgnoreMissing configures whether missing files or URLs which return
	// 404 are reported as errors. When set to true, missing files and 404
	// status codes are not reported as errors.
	IgnoreMissing bool
}

// Load reads a buffer into a Properties struct.
func (l *Loader) LoadBytes(buf []byte) (*Properties, error) {
	return l.loadBytes(buf, l.Encoding)
}

// LoadAll reads the content of multiple URLs or files in the given order into
// a Properties struct. If IgnoreMissing is true then a 404 status code or
// missing file will not be reported as error. Encoding sets the encoding for
// files. For the URLs see LoadURL for the Content-Type header and the
// encoding.
func (l *Loader) LoadAll(names []string) (*Properties, error) {
	all := NewProperties()
	for _, name := range names {
		n, err := expandName(name)
		if err != nil {
			return nil, err
		}

		var p *Properties
		switch {
		case strings.HasPrefix(n, "http://"):
			p, err = l.LoadURL(n)
		case strings.HasPrefix(n, "https://"):
			p, err = l.LoadURL(n)
		default:
			p, err = l.LoadFile(n)
		}
		if err != nil {
			return nil, err
		}
		all.Merge(p)
	}

	all.DisableExpansion = l.DisableExpansion
	if all.DisableExpansion {
		return all, nil
	}
	return all, all.check()
}

// LoadFile reads a file into a Properties struct.
// If IgnoreMissing is true then a missing file will not be
// reported as error.
func (l *Loader) LoadFile(filename string) (*Properties, error) {
	data, err := ioutil.ReadFile(filename)
	if err != nil {
		if l.IgnoreMissing && os.IsNotExist(err) {
			LogPrintf("properties: %s not found. skipping", filename)
			return NewProperties(), nil
		}
		return nil, err
	}
	return l.loadBytes(data, l.Encoding)
}

// LoadURL reads the content of the URL into a Properties struct.
//
// The encoding is determined via the Content-Type header which
// should be set to 'text/plain'. If the 'charset' parameter is
// missing, 'iso-8859-1' or 'latin1' the encoding is set to
// ISO-8859-1. If the 'charset' parameter is set to 'utf-8' the
// encoding is set to UTF-8. A missing content type header is
// interpreted as 'text/plain; charset=utf-8'.
func (l *Loader) LoadURL(url string) (*Properties, error) {
	resp, err := http.Get(url)
	if err != nil {
		return nil, fmt.Errorf("properties: error fetching %q. %s", url, err)
	}
	defer resp.Body.Close()

	if resp.StatusCode == 404 && l.IgnoreMissing {
		LogPrintf("properties: %s returned %d. skipping", url, resp.StatusCode)
		return NewProperties(), nil
	}

	if resp.StatusCode != 200 {
		return nil, fmt.Errorf("properties: %s returned %d", url, resp.StatusCode)
	}

	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		return nil, fmt.Errorf("properties: %s error reading response. %s", url, err)
	}

	ct := resp.Header.Get("Content-Type")
	ct = strings.Join(strings.Fields(ct), "")
	var enc Encoding
	switch strings.ToLower(ct) {
	case "text/plain", "text/plain;charset=iso-8859-1", "text/plain;charset=latin1":
		enc = ISO_8859_1
	case "", "text/plain;charset=utf-8":
		enc = UTF8
	default:
		return nil, fmt.Errorf("properties: invalid content type %s", ct)
	}

	return l.loadBytes(body, enc)
}

func (l *Loader) loadBytes(buf []byte, enc Encoding) (*Properties, error) {
	p, err := parse(convert(buf, enc))
	if err != nil {
		return nil, err
	}
	p.DisableExpansion = l.DisableExpansion
	if p.DisableExpansion {
		return p, nil
	}
	return p, p.check()
}

// Load reads a buffer into a Properties struct.
func Load(buf []byte, enc Encoding) (*Properties, error) {
	l := &Loader{Encoding: enc}
	return l.LoadBytes(buf)
}

// LoadString reads an UTF8 string into a properties struct.
func LoadString(s string) (*Properties, error) {
	l := &Loader{Encoding: UTF8}
	return l.LoadBytes([]byte(s))
}

// LoadMap creates a new Properties struct from a string map.
func LoadMap(m map[string]string) *Properties {
	p := NewProperties()
	for k, v := range m {
		p.Set(k, v)
	}
	return p
}

// LoadFile reads a file into a Properties struct.
func LoadFile(filename string, enc Encoding) (*Properties, error) {
	l := &Loader{Encoding: enc}
	return l.LoadAll([]string{filename})
}

// LoadFiles reads multiple files in the given order into
// a Properties struct. If 'ignoreMissing' is true then
// non-existent files will not be reported as error.
func LoadFiles(filenames []string, enc Encoding, ignoreMissing bool) (*Properties, error) {
	l := &Loader{Encoding: enc, IgnoreMissing: ignoreMissing}
	return l.LoadAll(filenames)
}

// LoadURL reads the content of the URL into a Properties struct.
// See Loader#LoadURL for details.
func LoadURL(url string) (*Properties, error) {
	l := &Loader{Encoding: UTF8}
	return l.LoadAll([]string{url})
}

// LoadURLs reads the content of multiple URLs in the given order into a
// Properties struct. If IgnoreMissing is true then a 404 status code will
// not be reported as error. See Loader#LoadURL for the Content-Type header
// and the encoding.
func LoadURLs(urls []string, ignoreMissing bool) (*Properties, error) {
	l := &Loader{Encoding: UTF8, IgnoreMissing: ignoreMissing}
	return l.LoadAll(urls)
}

// LoadAll reads the content of multiple URLs or files in the given order into a
// Properties struct. If 'ignoreMissing' is true then a 404 status code or missing file will
// not be reported as error. Encoding sets the encoding for files. For the URLs please see
// LoadURL for the Content-Type header and the encoding.
func LoadAll(names []string, enc Encoding, ignoreMissing bool) (*Properties, error) {
	l := &Loader{Encoding: enc, IgnoreMissing: ignoreMissing}
	return l.LoadAll(names)
}

// MustLoadString reads an UTF8 string into a Properties struct and
// panics on error.
func MustLoadString(s string) *Properties {
	return must(LoadString(s))
}

// MustLoadFile reads a file into a Properties struct and
// panics on error.
func MustLoadFile(filename string, enc Encoding) *Properties {
	return must(LoadFile(filename, enc))
}

// MustLoadFiles reads multiple files in the given order into
// a Properties struct and panics on error. If 'ignoreMissing'
// is true then non-existent files will not be reported as error.
func MustLoadFiles(filenames []string, enc Encoding, ignoreMissing bool) *Properties {
	return must(LoadFiles(filenames, enc, ignoreMissing))
}

// MustLoadURL reads the content of a URL into a Properties struct and
// panics on error.
func MustLoadURL(url string) *Properties {
	return must(LoadURL(url))
}

// MustLoadURLs reads the content of multiple URLs in the given order into a
// Properties struct and panics on error. If 'ignoreMissing' is true then a 404
// status code will not be reported as error.
func MustLoadURLs(urls []string, ignoreMissing bool) *Properties {
	return must(LoadURLs(urls, ignoreMissing))
}

// MustLoadAll reads the content of multiple URLs or files in the given order into a
// Properties struct. If 'ignoreMissing' is true then a 404 status code or missing file will
// not be reported as error. Encoding sets the encoding for files. For the URLs please see
// LoadURL for the Content-Type header and the encoding. It panics on error.
func MustLoadAll(names []string, enc Encoding, ignoreMissing bool) *Properties {
	return must(LoadAll(names, enc, ignoreMissing))
}

func must(p *Properties, err error) *Properties {
	if err != nil {
		ErrorHandler(err)
	}
	return p
}

// expandName expands ${ENV_VAR} expressions in a name.
// If the environment variable does not exist then it will be replaced
// with an empty string. Malformed expressions like "${ENV_VAR" will
// be reported as error.
func expandName(name string) (string, error) {
	return expand(name, []string{}, "${", "}", make(map[string]string))
}

// Interprets a byte buffer either as an ISO-8859-1 or UTF-8 encoded string.
// For ISO-8859-1 we can convert each byte straight into a rune since the
// first 256 unicode code points cover ISO-8859-1.
func convert(buf []byte, enc Encoding) string {
	switch enc {
	case utf8Default, UTF8:
		return string(buf)
	case ISO_8859_1:
		runes := make([]rune, len(buf))
		for i, b := range buf {
			runes[i] = rune(b)
		}
		return string(runes)
	default:
		ErrorHandler(fmt.Errorf("unsupported encoding %v", enc))
	}
	panic("ErrorHandler should exit")
}
   070701000008AD000081A4000000000000000000000001645E367C000006DA000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/magiconair/properties/parser.go // Copyright 2013-2022 Frank Schroeder. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package properties

import (
	"fmt"
	"runtime"
)

type parser struct {
	lex *lexer
}

func parse(input string) (properties *Properties, err error) {
	p := &parser{lex: lex(input)}
	defer p.recover(&err)

	properties = NewProperties()
	key := ""
	comments := []string{}

	for {
		token := p.expectOneOf(itemComment, itemKey, itemEOF)
		switch token.typ {
		case itemEOF:
			goto done
		case itemComment:
			comments = append(comments, token.val)
			continue
		case itemKey:
			key = token.val
			if _, ok := properties.m[key]; !ok {
				properties.k = append(properties.k, key)
			}
		}

		token = p.expectOneOf(itemValue, itemEOF)
		if len(comments) > 0 {
			properties.c[key] = comments
			comments = []string{}
		}
		switch token.typ {
		case itemEOF:
			properties.m[key] = ""
			goto done
		case itemValue:
			properties.m[key] = token.val
		}
	}

done:
	return properties, nil
}

func (p *parser) errorf(format string, args ...interface{}) {
	format = fmt.Sprintf("properties: Line %d: %s", p.lex.lineNumber(), format)
	panic(fmt.Errorf(format, args...))
}

func (p *parser) expectOneOf(expected ...itemType) (token item) {
	token = p.lex.nextItem()
	for _, v := range expected {
		if token.typ == v {
			return token
		}
	}
	p.unexpected(token)
	panic("unexpected token")
}

func (p *parser) unexpected(token item) {
	p.errorf(token.String())
}

// recover is the handler that turns panics into returns from the top level of Parse.
func (p *parser) recover(errp *error) {
	e := recover()
	if e != nil {
		if _, ok := e.(runtime.Error); ok {
			panic(e)
		}
		*errp = e.(error)
	}
}
  070701000008AE000081A4000000000000000000000001645E367C00005ADE000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/magiconair/properties/properties.go // Copyright 2013-2022 Frank Schroeder. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package properties

// BUG(frank): Set() does not check for invalid unicode literals since this is currently handled by the lexer.
// BUG(frank): Write() does not allow to configure the newline character. Therefore, on Windows LF is used.

import (
	"bytes"
	"fmt"
	"io"
	"log"
	"os"
	"regexp"
	"sort"
	"strconv"
	"strings"
	"time"
	"unicode/utf8"
)

const maxExpansionDepth = 64

// ErrorHandlerFunc defines the type of function which handles failures
// of the MustXXX() functions. An error handler function must exit
// the application after handling the error.
type ErrorHandlerFunc func(error)

// ErrorHandler is the function which handles failures of the MustXXX()
// functions. The default is LogFatalHandler.
var ErrorHandler ErrorHandlerFunc = LogFatalHandler

// LogHandlerFunc defines the function prototype for logging errors.
type LogHandlerFunc func(fmt string, args ...interface{})

// LogPrintf defines a log handler which uses log.Printf.
var LogPrintf LogHandlerFunc = log.Printf

// LogFatalHandler handles the error by logging a fatal error and exiting.
func LogFatalHandler(err error) {
	log.Fatal(err)
}

// PanicHandler handles the error by panicking.
func PanicHandler(err error) {
	panic(err)
}

// -----------------------------------------------------------------------------

// A Properties contains the key/value pairs from the properties input.
// All values are stored in unexpanded form and are expanded at runtime
type Properties struct {
	// Pre-/Postfix for property expansion.
	Prefix  string
	Postfix string

	// DisableExpansion controls the expansion of properties on Get()
	// and the check for circular references on Set(). When set to
	// true Properties behaves like a simple key/value store and does
	// not check for circular references on Get() or on Set().
	DisableExpansion bool

	// Stores the key/value pairs
	m map[string]string

	// Stores the comments per key.
	c map[string][]string

	// Stores the keys in order of appearance.
	k []string

	// WriteSeparator specifies the separator of key and value while writing the properties.
	WriteSeparator string
}

// NewProperties creates a new Properties struct with the default
// configuration for "${key}" expressions.
func NewProperties() *Properties {
	return &Properties{
		Prefix:  "${",
		Postfix: "}",
		m:       map[string]string{},
		c:       map[string][]string{},
		k:       []string{},
	}
}

// Load reads a buffer into the given Properties struct.
func (p *Properties) Load(buf []byte, enc Encoding) error {
	l := &Loader{Encoding: enc, DisableExpansion: p.DisableExpansion}
	newProperties, err := l.LoadBytes(buf)
	if err != nil {
		return err
	}
	p.Merge(newProperties)
	return nil
}

// Get returns the expanded value for the given key if exists.
// Otherwise, ok is false.
func (p *Properties) Get(key string) (value string, ok bool) {
	v, ok := p.m[key]
	if p.DisableExpansion {
		return v, ok
	}
	if !ok {
		return "", false
	}

	expanded, err := p.expand(key, v)

	// we guarantee that the expanded value is free of
	// circular references and malformed expressions
	// so we panic if we still get an error here.
	if err != nil {
		ErrorHandler(err)
	}

	return expanded, true
}

// MustGet returns the expanded value for the given key if exists.
// Otherwise, it panics.
func (p *Properties) MustGet(key string) string {
	if v, ok := p.Get(key); ok {
		return v
	}
	ErrorHandler(invalidKeyError(key))
	panic("ErrorHandler should exit")
}

// ----------------------------------------------------------------------------

// ClearComments removes the comments for all keys.
func (p *Properties) ClearComments() {
	p.c = map[string][]string{}
}

// ----------------------------------------------------------------------------

// GetComment returns the last comment before the given key or an empty string.
func (p *Properties) GetComment(key string) string {
	comments, ok := p.c[key]
	if !ok || len(comments) == 0 {
		return ""
	}
	return comments[len(comments)-1]
}

// ----------------------------------------------------------------------------

// GetComments returns all comments that appeared before the given key or nil.
func (p *Properties) GetComments(key string) []string {
	if comments, ok := p.c[key]; ok {
		return comments
	}
	return nil
}

// ----------------------------------------------------------------------------

// SetComment sets the comment for the key.
func (p *Properties) SetComment(key, comment string) {
	p.c[key] = []string{comment}
}

// ----------------------------------------------------------------------------

// SetComments sets the comments for the key. If the comments are nil then
// all comments for this key are deleted.
func (p *Properties) SetComments(key string, comments []string) {
	if comments == nil {
		delete(p.c, key)
		return
	}
	p.c[key] = comments
}

// ----------------------------------------------------------------------------

// GetBool checks if the expanded value is one of '1', 'yes',
// 'true' or 'on' if the key exists. The comparison is case-insensitive.
// If the key does not exist the default value is returned.
func (p *Properties) GetBool(key string, def bool) bool {
	v, err := p.getBool(key)
	if err != nil {
		return def
	}
	return v
}

// MustGetBool checks if the expanded value is one of '1', 'yes',
// 'true' or 'on' if the key exists. The comparison is case-insensitive.
// If the key does not exist the function panics.
func (p *Properties) MustGetBool(key string) bool {
	v, err := p.getBool(key)
	if err != nil {
		ErrorHandler(err)
	}
	return v
}

func (p *Properties) getBool(key string) (value bool, err error) {
	if v, ok := p.Get(key); ok {
		return boolVal(v), nil
	}
	return false, invalidKeyError(key)
}

func boolVal(v string) bool {
	v = strings.ToLower(v)
	return v == "1" || v == "true" || v == "yes" || v == "on"
}

// ----------------------------------------------------------------------------

// GetDuration parses the expanded value as an time.Duration (in ns) if the
// key exists. If key does not exist or the value cannot be parsed the default
// value is returned. In almost all cases you want to use GetParsedDuration().
func (p *Properties) GetDuration(key string, def time.Duration) time.Duration {
	v, err := p.getInt64(key)
	if err != nil {
		return def
	}
	return time.Duration(v)
}

// MustGetDuration parses the expanded value as an time.Duration (in ns) if
// the key exists. If key does not exist or the value cannot be parsed the
// function panics. In almost all cases you want to use MustGetParsedDuration().
func (p *Properties) MustGetDuration(key string) time.Duration {
	v, err := p.getInt64(key)
	if err != nil {
		ErrorHandler(err)
	}
	return time.Duration(v)
}

// ----------------------------------------------------------------------------

// GetParsedDuration parses the expanded value with time.ParseDuration() if the key exists.
// If key does not exist or the value cannot be parsed the default
// value is returned.
func (p *Properties) GetParsedDuration(key string, def time.Duration) time.Duration {
	s, ok := p.Get(key)
	if !ok {
		return def
	}
	v, err := time.ParseDuration(s)
	if err != nil {
		return def
	}
	return v
}

// MustGetParsedDuration parses the expanded value with time.ParseDuration() if the key exists.
// If key does not exist or the value cannot be parsed the function panics.
func (p *Properties) MustGetParsedDuration(key string) time.Duration {
	s, ok := p.Get(key)
	if !ok {
		ErrorHandler(invalidKeyError(key))
	}
	v, err := time.ParseDuration(s)
	if err != nil {
		ErrorHandler(err)
	}
	return v
}

// ----------------------------------------------------------------------------

// GetFloat64 parses the expanded value as a float64 if the key exists.
// If key does not exist or the value cannot be parsed the default
// value is returned.
func (p *Properties) GetFloat64(key string, def float64) float64 {
	v, err := p.getFloat64(key)
	if err != nil {
		return def
	}
	return v
}

// MustGetFloat64 parses the expanded value as a float64 if the key exists.
// If key does not exist or the value cannot be parsed the function panics.
func (p *Properties) MustGetFloat64(key string) float64 {
	v, err := p.getFloat64(key)
	if err != nil {
		ErrorHandler(err)
	}
	return v
}

func (p *Properties) getFloat64(key string) (value float64, err error) {
	if v, ok := p.Get(key); ok {
		value, err = strconv.ParseFloat(v, 64)
		if err != nil {
			return 0, err
		}
		return value, nil
	}
	return 0, invalidKeyError(key)
}

// ----------------------------------------------------------------------------

// GetInt parses the expanded value as an int if the key exists.
// If key does not exist or the value cannot be parsed the default
// value is returned. If the value does not fit into an int the
// function panics with an out of range error.
func (p *Properties) GetInt(key string, def int) int {
	v, err := p.getInt64(key)
	if err != nil {
		return def
	}
	return intRangeCheck(key, v)
}

// MustGetInt parses the expanded value as an int if the key exists.
// If key does not exist or the value cannot be parsed the function panics.
// If the value does not fit into an int the function panics with
// an out of range error.
func (p *Properties) MustGetInt(key string) int {
	v, err := p.getInt64(key)
	if err != nil {
		ErrorHandler(err)
	}
	return intRangeCheck(key, v)
}

// ----------------------------------------------------------------------------

// GetInt64 parses the expanded value as an int64 if the key exists.
// If key does not exist or the value cannot be parsed the default
// value is returned.
func (p *Properties) GetInt64(key string, def int64) int64 {
	v, err := p.getInt64(key)
	if err != nil {
		return def
	}
	return v
}

// MustGetInt64 parses the expanded value as an int if the key exists.
// If key does not exist or the value cannot be parsed the function panics.
func (p *Properties) MustGetInt64(key string) int64 {
	v, err := p.getInt64(key)
	if err != nil {
		ErrorHandler(err)
	}
	return v
}

func (p *Properties) getInt64(key string) (value int64, err error) {
	if v, ok := p.Get(key); ok {
		value, err = strconv.ParseInt(v, 10, 64)
		if err != nil {
			return 0, err
		}
		return value, nil
	}
	return 0, invalidKeyError(key)
}

// ----------------------------------------------------------------------------

// GetUint parses the expanded value as an uint if the key exists.
// If key does not exist or the value cannot be parsed the default
// value is returned. If the value does not fit into an int the
// function panics with an out of range error.
func (p *Properties) GetUint(key string, def uint) uint {
	v, err := p.getUint64(key)
	if err != nil {
		return def
	}
	return uintRangeCheck(key, v)
}

// MustGetUint parses the expanded value as an int if the key exists.
// If key does not exist or the value cannot be parsed the function panics.
// If the value does not fit into an int the function panics with
// an out of range error.
func (p *Properties) MustGetUint(key string) uint {
	v, err := p.getUint64(key)
	if err != nil {
		ErrorHandler(err)
	}
	return uintRangeCheck(key, v)
}

// ----------------------------------------------------------------------------

// GetUint64 parses the expanded value as an uint64 if the key exists.
// If key does not exist or the value cannot be parsed the default
// value is returned.
func (p *Properties) GetUint64(key string, def uint64) uint64 {
	v, err := p.getUint64(key)
	if err != nil {
		return def
	}
	return v
}

// MustGetUint64 parses the expanded value as an int if the key exists.
// If key does not exist or the value cannot be parsed the function panics.
func (p *Properties) MustGetUint64(key string) uint64 {
	v, err := p.getUint64(key)
	if err != nil {
		ErrorHandler(err)
	}
	return v
}

func (p *Properties) getUint64(key string) (value uint64, err error) {
	if v, ok := p.Get(key); ok {
		value, err = strconv.ParseUint(v, 10, 64)
		if err != nil {
			return 0, err
		}
		return value, nil
	}
	return 0, invalidKeyError(key)
}

// ----------------------------------------------------------------------------

// GetString returns the expanded value for the given key if exists or
// the default value otherwise.
func (p *Properties) GetString(key, def string) string {
	if v, ok := p.Get(key); ok {
		return v
	}
	return def
}

// MustGetString returns the expanded value for the given key if exists or
// panics otherwise.
func (p *Properties) MustGetString(key string) string {
	if v, ok := p.Get(key); ok {
		return v
	}
	ErrorHandler(invalidKeyError(key))
	panic("ErrorHandler should exit")
}

// ----------------------------------------------------------------------------

// Filter returns a new properties object which contains all properties
// for which the key matches the pattern.
func (p *Properties) Filter(pattern string) (*Properties, error) {
	re, err := regexp.Compile(pattern)
	if err != nil {
		return nil, err
	}

	return p.FilterRegexp(re), nil
}

// FilterRegexp returns a new properties object which contains all properties
// for which the key matches the regular expression.
func (p *Properties) FilterRegexp(re *regexp.Regexp) *Properties {
	pp := NewProperties()
	for _, k := range p.k {
		if re.MatchString(k) {
			// TODO(fs): we are ignoring the error which flags a circular reference.
			// TODO(fs): since we are just copying a subset of keys this cannot happen (fingers crossed)
			pp.Set(k, p.m[k])
		}
	}
	return pp
}

// FilterPrefix returns a new properties object with a subset of all keys
// with the given prefix.
func (p *Properties) FilterPrefix(prefix string) *Properties {
	pp := NewProperties()
	for _, k := range p.k {
		if strings.HasPrefix(k, prefix) {
			// TODO(fs): we are ignoring the error which flags a circular reference.
			// TODO(fs): since we are just copying a subset of keys this cannot happen (fingers crossed)
			pp.Set(k, p.m[k])
		}
	}
	return pp
}

// FilterStripPrefix returns a new properties object with a subset of all keys
// with the given prefix and the prefix removed from the keys.
func (p *Properties) FilterStripPrefix(prefix string) *Properties {
	pp := NewProperties()
	n := len(prefix)
	for _, k := range p.k {
		if len(k) > len(prefix) && strings.HasPrefix(k, prefix) {
			// TODO(fs): we are ignoring the error which flags a circular reference.
			// TODO(fs): since we are modifying keys I am not entirely sure whether we can create a circular reference
			// TODO(fs): this function should probably return an error but the signature is fixed
			pp.Set(k[n:], p.m[k])
		}
	}
	return pp
}

// Len returns the number of keys.
func (p *Properties) Len() int {
	return len(p.m)
}

// Keys returns all keys in the same order as in the input.
func (p *Properties) Keys() []string {
	keys := make([]string, len(p.k))
	copy(keys, p.k)
	return keys
}

// Set sets the property key to the corresponding value.
// If a value for key existed before then ok is true and prev
// contains the previous value. If the value contains a
// circular reference or a malformed expression then
// an error is returned.
// An empty key is silently ignored.
func (p *Properties) Set(key, value string) (prev string, ok bool, err error) {
	if key == "" {
		return "", false, nil
	}

	// if expansion is disabled we allow circular references
	if p.DisableExpansion {
		prev, ok = p.Get(key)
		p.m[key] = value
		if !ok {
			p.k = append(p.k, key)
		}
		return prev, ok, nil
	}

	// to check for a circular reference we temporarily need
	// to set the new value. If there is an error then revert
	// to the previous state. Only if all tests are successful
	// then we add the key to the p.k list.
	prev, ok = p.Get(key)
	p.m[key] = value

	// now check for a circular reference
	_, err = p.expand(key, value)
	if err != nil {

		// revert to the previous state
		if ok {
			p.m[key] = prev
		} else {
			delete(p.m, key)
		}

		return "", false, err
	}

	if !ok {
		p.k = append(p.k, key)
	}

	return prev, ok, nil
}

// SetValue sets property key to the default string value
// as defined by fmt.Sprintf("%v").
func (p *Properties) SetValue(key string, value interface{}) error {
	_, _, err := p.Set(key, fmt.Sprintf("%v", value))
	return err
}

// MustSet sets the property key to the corresponding value.
// If a value for key existed before then ok is true and prev
// contains the previous value. An empty key is silently ignored.
func (p *Properties) MustSet(key, value string) (prev string, ok bool) {
	prev, ok, err := p.Set(key, value)
	if err != nil {
		ErrorHandler(err)
	}
	return prev, ok
}

// String returns a string of all expanded 'key = value' pairs.
func (p *Properties) String() string {
	var s string
	for _, key := range p.k {
		value, _ := p.Get(key)
		s = fmt.Sprintf("%s%s = %s\n", s, key, value)
	}
	return s
}

// Sort sorts the properties keys in alphabetical order.
// This is helpfully before writing the properties.
func (p *Properties) Sort() {
	sort.Strings(p.k)
}

// Write writes all unexpanded 'key = value' pairs to the given writer.
// Write returns the number of bytes written and any write error encountered.
func (p *Properties) Write(w io.Writer, enc Encoding) (n int, err error) {
	return p.WriteComment(w, "", enc)
}

// WriteComment writes all unexpanced 'key = value' pairs to the given writer.
// If prefix is not empty then comments are written with a blank line and the
// given prefix. The prefix should be either "# " or "! " to be compatible with
// the properties file format. Otherwise, the properties parser will not be
// able to read the file back in. It returns the number of bytes written and
// any write error encountered.
func (p *Properties) WriteComment(w io.Writer, prefix string, enc Encoding) (n int, err error) {
	var x int

	for _, key := range p.k {
		value := p.m[key]

		if prefix != "" {
			if comments, ok := p.c[key]; ok {
				// don't print comments if they are all empty
				allEmpty := true
				for _, c := range comments {
					if c != "" {
						allEmpty = false
						break
					}
				}

				if !allEmpty {
					// add a blank line between entries but not at the top
					if len(comments) > 0 && n > 0 {
						x, err = fmt.Fprintln(w)
						if err != nil {
							return
						}
						n += x
					}

					for _, c := range comments {
						x, err = fmt.Fprintf(w, "%s%s\n", prefix, c)
						if err != nil {
							return
						}
						n += x
					}
				}
			}
		}
		sep := " = "
		if p.WriteSeparator != "" {
			sep = p.WriteSeparator
		}
		x, err = fmt.Fprintf(w, "%s%s%s\n", encode(key, " :", enc), sep, encode(value, "", enc))
		if err != nil {
			return
		}
		n += x
	}
	return
}

// Map returns a copy of the properties as a map.
func (p *Properties) Map() map[string]string {
	m := make(map[string]string)
	for k, v := range p.m {
		m[k] = v
	}
	return m
}

// FilterFunc returns a copy of the properties which includes the values which passed all filters.
func (p *Properties) FilterFunc(filters ...func(k, v string) bool) *Properties {
	pp := NewProperties()
outer:
	for k, v := range p.m {
		for _, f := range filters {
			if !f(k, v) {
				continue outer
			}
			pp.Set(k, v)
		}
	}
	return pp
}

// ----------------------------------------------------------------------------

// Delete removes the key and its comments.
func (p *Properties) Delete(key string) {
	delete(p.m, key)
	delete(p.c, key)
	newKeys := []string{}
	for _, k := range p.k {
		if k != key {
			newKeys = append(newKeys, k)
		}
	}
	p.k = newKeys
}

// Merge merges properties, comments and keys from other *Properties into p
func (p *Properties) Merge(other *Properties) {
	for _, k := range other.k {
		if _, ok := p.m[k]; !ok {
			p.k = append(p.k, k)
		}
	}
	for k, v := range other.m {
		p.m[k] = v
	}
	for k, v := range other.c {
		p.c[k] = v
	}
}

// ----------------------------------------------------------------------------

// check expands all values and returns an error if a circular reference or
// a malformed expression was found.
func (p *Properties) check() error {
	for key, value := range p.m {
		if _, err := p.expand(key, value); err != nil {
			return err
		}
	}
	return nil
}

func (p *Properties) expand(key, input string) (string, error) {
	// no pre/postfix -> nothing to expand
	if p.Prefix == "" && p.Postfix == "" {
		return input, nil
	}

	return expand(input, []string{key}, p.Prefix, p.Postfix, p.m)
}

// expand recursively expands expressions of '(prefix)key(postfix)' to their corresponding values.
// The function keeps track of the keys that were already expanded and stops if it
// detects a circular reference or a malformed expression of the form '(prefix)key'.
func expand(s string, keys []string, prefix, postfix string, values map[string]string) (string, error) {
	if len(keys) > maxExpansionDepth {
		return "", fmt.Errorf("expansion too deep")
	}

	for {
		start := strings.Index(s, prefix)
		if start == -1 {
			return s, nil
		}

		keyStart := start + len(prefix)
		keyLen := strings.Index(s[keyStart:], postfix)
		if keyLen == -1 {
			return "", fmt.Errorf("malformed expression")
		}

		end := keyStart + keyLen + len(postfix) - 1
		key := s[keyStart : keyStart+keyLen]

		// fmt.Printf("s:%q pp:%q start:%d end:%d keyStart:%d keyLen:%d key:%q\n", s, prefix + "..." + postfix, start, end, keyStart, keyLen, key)

		for _, k := range keys {
			if key == k {
				var b bytes.Buffer
				b.WriteString("circular reference in:\n")
				for _, k1 := range keys {
					fmt.Fprintf(&b, "%s=%s\n", k1, values[k1])
				}
				return "", fmt.Errorf(b.String())
			}
		}

		val, ok := values[key]
		if !ok {
			val = os.Getenv(key)
		}
		new_val, err := expand(val, append(keys, key), prefix, postfix, values)
		if err != nil {
			return "", err
		}
		s = s[:start] + new_val + s[end+1:]
	}
}

// encode encodes a UTF-8 string to ISO-8859-1 and escapes some characters.
func encode(s string, special string, enc Encoding) string {
	switch enc {
	case UTF8:
		return encodeUtf8(s, special)
	case ISO_8859_1:
		return encodeIso(s, special)
	default:
		panic(fmt.Sprintf("unsupported encoding %v", enc))
	}
}

func encodeUtf8(s string, special string) string {
	v := ""
	for pos := 0; pos < len(s); {
		r, w := utf8.DecodeRuneInString(s[pos:])
		pos += w
		v += escape(r, special)
	}
	return v
}

func encodeIso(s string, special string) string {
	var r rune
	var w int
	var v string
	for pos := 0; pos < len(s); {
		switch r, w = utf8.DecodeRuneInString(s[pos:]); {
		case r < 1<<8: // single byte rune -> escape special chars only
			v += escape(r, special)
		case r < 1<<16: // two byte rune -> unicode literal
			v += fmt.Sprintf("\\u%04x", r)
		default: // more than two bytes per rune -> can't encode
			v += "?"
		}
		pos += w
	}
	return v
}

func escape(r rune, special string) string {
	switch r {
	case '\f':
		return "\\f"
	case '\n':
		return "\\n"
	case '\r':
		return "\\r"
	case '\t':
		return "\\t"
	case '\\':
		return "\\\\"
	default:
		if strings.ContainsRune(special, r) {
			return "\\" + string(r)
		}
		return string(r)
	}
}

func invalidKeyError(key string) error {
	return fmt.Errorf("unknown property: %s", key)
}
  070701000008AF000081A4000000000000000000000001645E367C0000034B000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/magiconair/properties/rangecheck.go // Copyright 2013-2022 Frank Schroeder. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package properties

import (
	"fmt"
	"math"
)

// make this a var to overwrite it in a test
var is32Bit = ^uint(0) == math.MaxUint32

// intRangeCheck checks if the value fits into the int type and
// panics if it does not.
func intRangeCheck(key string, v int64) int {
	if is32Bit && (v < math.MinInt32 || v > math.MaxInt32) {
		panic(fmt.Sprintf("Value %d for key %s out of range", v, key))
	}
	return int(v)
}

// uintRangeCheck checks if the value fits into the uint type and
// panics if it does not.
func uintRangeCheck(key string, v uint64) uint {
	if is32Bit && v > math.MaxUint32 {
		panic(fmt.Sprintf("Value %d for key %s out of range", v, key))
	}
	return uint(v)
}
 070701000008B0000041ED000000000000000000000006645E367C00000000000000000000000000000000000000000000003000000000elemental-cli-0.3.1/vendor/github.com/mitchellh   070701000008B1000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/mitchellh/copystructure 070701000008B2000081A4000000000000000000000001645E367C0000043D000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/mitchellh/copystructure/LICENSE The MIT License (MIT)

Copyright (c) 2014 Mitchell Hashimoto

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
   070701000008B3000081A4000000000000000000000001645E367C000001FC000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/mitchellh/copystructure/README.md   # copystructure

copystructure is a Go library for deep copying values in Go.

This allows you to copy Go values that may contain reference values
such as maps, slices, or pointers, and copy their data as well instead
of just their references.

## Installation

Standard `go get`:

```
$ go get github.com/mitchellh/copystructure
```

## Usage & Example

For usage and examples see the [Godoc](http://godoc.org/github.com/mitchellh/copystructure).

The `Copy` function has examples associated with it there.
070701000008B4000081A4000000000000000000000001645E367C000000E2000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/mitchellh/copystructure/copier_time.go  package copystructure

import (
	"reflect"
	"time"
)

func init() {
	Copiers[reflect.TypeOf(time.Time{})] = timeCopier
}

func timeCopier(v interface{}) (interface{}, error) {
	// Just... copy it.
	return v.(time.Time), nil
}
  070701000008B5000081A4000000000000000000000001645E367C00003C97000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/mitchellh/copystructure/copystructure.go    package copystructure

import (
	"errors"
	"reflect"
	"sync"

	"github.com/mitchellh/reflectwalk"
)

const tagKey = "copy"

// Copy returns a deep copy of v.
//
// Copy is unable to copy unexported fields in a struct (lowercase field names).
// Unexported fields can't be reflected by the Go runtime and therefore
// copystructure can't perform any data copies.
//
// For structs, copy behavior can be controlled with struct tags. For example:
//
//   struct {
//     Name string
//     Data *bytes.Buffer `copy:"shallow"`
//   }
//
// The available tag values are:
//
// * "ignore" - The field will be ignored, effectively resulting in it being
//   assigned the zero value in the copy.
//
// * "shallow" - The field will be be shallow copied. This means that references
//   values such as pointers, maps, slices, etc. will be directly assigned
//   versus deep copied.
//
func Copy(v interface{}) (interface{}, error) {
	return Config{}.Copy(v)
}

// CopierFunc is a function that knows how to deep copy a specific type.
// Register these globally with the Copiers variable.
type CopierFunc func(interface{}) (interface{}, error)

// Copiers is a map of types that behave specially when they are copied.
// If a type is found in this map while deep copying, this function
// will be called to copy it instead of attempting to copy all fields.
//
// The key should be the type, obtained using: reflect.TypeOf(value with type).
//
// It is unsafe to write to this map after Copies have started. If you
// are writing to this map while also copying, wrap all modifications to
// this map as well as to Copy in a mutex.
var Copiers map[reflect.Type]CopierFunc = make(map[reflect.Type]CopierFunc)

// ShallowCopiers is a map of pointer types that behave specially
// when they are copied.  If a type is found in this map while deep
// copying, the pointer value will be shallow copied and not walked
// into.
//
// The key should be the type, obtained using: reflect.TypeOf(value
// with type).
//
// It is unsafe to write to this map after Copies have started. If you
// are writing to this map while also copying, wrap all modifications to
// this map as well as to Copy in a mutex.
var ShallowCopiers map[reflect.Type]struct{} = make(map[reflect.Type]struct{})

// Must is a helper that wraps a call to a function returning
// (interface{}, error) and panics if the error is non-nil. It is intended
// for use in variable initializations and should only be used when a copy
// error should be a crashing case.
func Must(v interface{}, err error) interface{} {
	if err != nil {
		panic("copy error: " + err.Error())
	}

	return v
}

var errPointerRequired = errors.New("Copy argument must be a pointer when Lock is true")

type Config struct {
	// Lock any types that are a sync.Locker and are not a mutex while copying.
	// If there is an RLocker method, use that to get the sync.Locker.
	Lock bool

	// Copiers is a map of types associated with a CopierFunc. Use the global
	// Copiers map if this is nil.
	Copiers map[reflect.Type]CopierFunc

	// ShallowCopiers is a map of pointer types that when they are
	// shallow copied no matter where they are encountered. Use the
	// global ShallowCopiers if this is nil.
	ShallowCopiers map[reflect.Type]struct{}
}

func (c Config) Copy(v interface{}) (interface{}, error) {
	if c.Lock && reflect.ValueOf(v).Kind() != reflect.Ptr {
		return nil, errPointerRequired
	}

	w := new(walker)
	if c.Lock {
		w.useLocks = true
	}

	if c.Copiers == nil {
		c.Copiers = Copiers
	}
	w.copiers = c.Copiers

	if c.ShallowCopiers == nil {
		c.ShallowCopiers = ShallowCopiers
	}
	w.shallowCopiers = c.ShallowCopiers

	err := reflectwalk.Walk(v, w)
	if err != nil {
		return nil, err
	}

	// Get the result. If the result is nil, then we want to turn it
	// into a typed nil if we can.
	result := w.Result
	if result == nil {
		val := reflect.ValueOf(v)
		result = reflect.Indirect(reflect.New(val.Type())).Interface()
	}

	return result, nil
}

// Return the key used to index interfaces types we've seen. Store the number
// of pointers in the upper 32bits, and the depth in the lower 32bits. This is
// easy to calculate, easy to match a key with our current depth, and we don't
// need to deal with initializing and cleaning up nested maps or slices.
func ifaceKey(pointers, depth int) uint64 {
	return uint64(pointers)<<32 | uint64(depth)
}

type walker struct {
	Result interface{}

	copiers        map[reflect.Type]CopierFunc
	shallowCopiers map[reflect.Type]struct{}
	depth          int
	ignoreDepth    int
	vals           []reflect.Value
	cs             []reflect.Value

	// This stores the number of pointers we've walked over, indexed by depth.
	ps []int

	// If an interface is indirected by a pointer, we need to know the type of
	// interface to create when creating the new value.  Store the interface
	// types here, indexed by both the walk depth and the number of pointers
	// already seen at that depth. Use ifaceKey to calculate the proper uint64
	// value.
	ifaceTypes map[uint64]reflect.Type

	// any locks we've taken, indexed by depth
	locks []sync.Locker
	// take locks while walking the structure
	useLocks bool
}

func (w *walker) Enter(l reflectwalk.Location) error {
	w.depth++

	// ensure we have enough elements to index via w.depth
	for w.depth >= len(w.locks) {
		w.locks = append(w.locks, nil)
	}

	for len(w.ps) < w.depth+1 {
		w.ps = append(w.ps, 0)
	}

	return nil
}

func (w *walker) Exit(l reflectwalk.Location) error {
	locker := w.locks[w.depth]
	w.locks[w.depth] = nil
	if locker != nil {
		defer locker.Unlock()
	}

	// clear out pointers and interfaces as we exit the stack
	w.ps[w.depth] = 0

	for k := range w.ifaceTypes {
		mask := uint64(^uint32(0))
		if k&mask == uint64(w.depth) {
			delete(w.ifaceTypes, k)
		}
	}

	w.depth--
	if w.ignoreDepth > w.depth {
		w.ignoreDepth = 0
	}

	if w.ignoring() {
		return nil
	}

	switch l {
	case reflectwalk.Array:
		fallthrough
	case reflectwalk.Map:
		fallthrough
	case reflectwalk.Slice:
		w.replacePointerMaybe()

		// Pop map off our container
		w.cs = w.cs[:len(w.cs)-1]
	case reflectwalk.MapValue:
		// Pop off the key and value
		mv := w.valPop()
		mk := w.valPop()
		m := w.cs[len(w.cs)-1]

		// If mv is the zero value, SetMapIndex deletes the key form the map,
		// or in this case never adds it. We need to create a properly typed
		// zero value so that this key can be set.
		if !mv.IsValid() {
			mv = reflect.Zero(m.Elem().Type().Elem())
		}
		m.Elem().SetMapIndex(mk, mv)
	case reflectwalk.ArrayElem:
		// Pop off the value and the index and set it on the array
		v := w.valPop()
		i := w.valPop().Interface().(int)
		if v.IsValid() {
			a := w.cs[len(w.cs)-1]
			ae := a.Elem().Index(i) // storing array as pointer on stack - so need Elem() call
			if ae.CanSet() {
				ae.Set(v)
			}
		}
	case reflectwalk.SliceElem:
		// Pop off the value and the index and set it on the slice
		v := w.valPop()
		i := w.valPop().Interface().(int)
		if v.IsValid() {
			s := w.cs[len(w.cs)-1]
			se := s.Elem().Index(i)
			if se.CanSet() {
				se.Set(v)
			}
		}
	case reflectwalk.Struct:
		w.replacePointerMaybe()

		// Remove the struct from the container stack
		w.cs = w.cs[:len(w.cs)-1]
	case reflectwalk.StructField:
		// Pop off the value and the field
		v := w.valPop()
		f := w.valPop().Interface().(reflect.StructField)
		if v.IsValid() {
			s := w.cs[len(w.cs)-1]
			sf := reflect.Indirect(s).FieldByName(f.Name)

			if sf.CanSet() {
				sf.Set(v)
			}
		}
	case reflectwalk.WalkLoc:
		// Clear out the slices for GC
		w.cs = nil
		w.vals = nil
	}

	return nil
}

func (w *walker) Map(m reflect.Value) error {
	if w.ignoring() {
		return nil
	}
	w.lock(m)

	// Create the map. If the map itself is nil, then just make a nil map
	var newMap reflect.Value
	if m.IsNil() {
		newMap = reflect.New(m.Type())
	} else {
		newMap = wrapPtr(reflect.MakeMap(m.Type()))
	}

	w.cs = append(w.cs, newMap)
	w.valPush(newMap)
	return nil
}

func (w *walker) MapElem(m, k, v reflect.Value) error {
	return nil
}

func (w *walker) PointerEnter(v bool) error {
	if v {
		w.ps[w.depth]++
	}
	return nil
}

func (w *walker) PointerExit(v bool) error {
	if v {
		w.ps[w.depth]--
	}
	return nil
}

func (w *walker) Pointer(v reflect.Value) error {
	if _, ok := w.shallowCopiers[v.Type()]; ok {
		// Shallow copy this value. Use the same logic as primitive, then
		// return skip.
		if err := w.Primitive(v); err != nil {
			return err
		}

		return reflectwalk.SkipEntry
	}

	return nil
}

func (w *walker) Interface(v reflect.Value) error {
	if !v.IsValid() {
		return nil
	}
	if w.ifaceTypes == nil {
		w.ifaceTypes = make(map[uint64]reflect.Type)
	}

	w.ifaceTypes[ifaceKey(w.ps[w.depth], w.depth)] = v.Type()
	return nil
}

func (w *walker) Primitive(v reflect.Value) error {
	if w.ignoring() {
		return nil
	}
	w.lock(v)

	// IsValid verifies the v is non-zero and CanInterface verifies
	// that we're allowed to read this value (unexported fields).
	var newV reflect.Value
	if v.IsValid() && v.CanInterface() {
		newV = reflect.New(v.Type())
		newV.Elem().Set(v)
	}

	w.valPush(newV)
	w.replacePointerMaybe()
	return nil
}

func (w *walker) Slice(s reflect.Value) error {
	if w.ignoring() {
		return nil
	}
	w.lock(s)

	var newS reflect.Value
	if s.IsNil() {
		newS = reflect.New(s.Type())
	} else {
		newS = wrapPtr(reflect.MakeSlice(s.Type(), s.Len(), s.Cap()))
	}

	w.cs = append(w.cs, newS)
	w.valPush(newS)
	return nil
}

func (w *walker) SliceElem(i int, elem reflect.Value) error {
	if w.ignoring() {
		return nil
	}

	// We don't write the slice here because elem might still be
	// arbitrarily complex. Just record the index and continue on.
	w.valPush(reflect.ValueOf(i))

	return nil
}

func (w *walker) Array(a reflect.Value) error {
	if w.ignoring() {
		return nil
	}
	w.lock(a)

	newA := reflect.New(a.Type())

	w.cs = append(w.cs, newA)
	w.valPush(newA)
	return nil
}

func (w *walker) ArrayElem(i int, elem reflect.Value) error {
	if w.ignoring() {
		return nil
	}

	// We don't write the array here because elem might still be
	// arbitrarily complex. Just record the index and continue on.
	w.valPush(reflect.ValueOf(i))

	return nil
}

func (w *walker) Struct(s reflect.Value) error {
	if w.ignoring() {
		return nil
	}
	w.lock(s)

	var v reflect.Value
	if c, ok := w.copiers[s.Type()]; ok {
		// We have a Copier for this struct, so we use that copier to
		// get the copy, and we ignore anything deeper than this.
		w.ignoreDepth = w.depth

		dup, err := c(s.Interface())
		if err != nil {
			return err
		}

		// We need to put a pointer to the value on the value stack,
		// so allocate a new pointer and set it.
		v = reflect.New(s.Type())
		reflect.Indirect(v).Set(reflect.ValueOf(dup))
	} else {
		// No copier, we copy ourselves and allow reflectwalk to guide
		// us deeper into the structure for copying.
		v = reflect.New(s.Type())
	}

	// Push the value onto the value stack for setting the struct field,
	// and add the struct itself to the containers stack in case we walk
	// deeper so that its own fields can be modified.
	w.valPush(v)
	w.cs = append(w.cs, v)

	return nil
}

func (w *walker) StructField(f reflect.StructField, v reflect.Value) error {
	if w.ignoring() {
		return nil
	}

	// If PkgPath is non-empty, this is a private (unexported) field.
	// We do not set this unexported since the Go runtime doesn't allow us.
	if f.PkgPath != "" {
		return reflectwalk.SkipEntry
	}

	switch f.Tag.Get(tagKey) {
	case "shallow":
		// If we're shallow copying then assign the value directly to the
		// struct and skip the entry.
		if v.IsValid() {
			s := w.cs[len(w.cs)-1]
			sf := reflect.Indirect(s).FieldByName(f.Name)
			if sf.CanSet() {
				sf.Set(v)
			}
		}

		return reflectwalk.SkipEntry

	case "ignore":
		// Do nothing
		return reflectwalk.SkipEntry
	}

	// Push the field onto the stack, we'll handle it when we exit
	// the struct field in Exit...
	w.valPush(reflect.ValueOf(f))

	return nil
}

// ignore causes the walker to ignore any more values until we exit this on
func (w *walker) ignore() {
	w.ignoreDepth = w.depth
}

func (w *walker) ignoring() bool {
	return w.ignoreDepth > 0 && w.depth >= w.ignoreDepth
}

func (w *walker) pointerPeek() bool {
	return w.ps[w.depth] > 0
}

func (w *walker) valPop() reflect.Value {
	result := w.vals[len(w.vals)-1]
	w.vals = w.vals[:len(w.vals)-1]

	// If we're out of values, that means we popped everything off. In
	// this case, we reset the result so the next pushed value becomes
	// the result.
	if len(w.vals) == 0 {
		w.Result = nil
	}

	return result
}

func (w *walker) valPush(v reflect.Value) {
	w.vals = append(w.vals, v)

	// If we haven't set the result yet, then this is the result since
	// it is the first (outermost) value we're seeing.
	if w.Result == nil && v.IsValid() {
		w.Result = v.Interface()
	}
}

func (w *walker) replacePointerMaybe() {
	// Determine the last pointer value. If it is NOT a pointer, then
	// we need to push that onto the stack.
	if !w.pointerPeek() {
		w.valPush(reflect.Indirect(w.valPop()))
		return
	}

	v := w.valPop()

	// If the expected type is a pointer to an interface of any depth,
	// such as *interface{}, **interface{}, etc., then we need to convert
	// the value "v" from *CONCRETE to *interface{} so types match for
	// Set.
	//
	// Example if v is type *Foo where Foo is a struct, v would become
	// *interface{} instead. This only happens if we have an interface expectation
	// at this depth.
	//
	// For more info, see GH-16
	if iType, ok := w.ifaceTypes[ifaceKey(w.ps[w.depth], w.depth)]; ok && iType.Kind() == reflect.Interface {
		y := reflect.New(iType)           // Create *interface{}
		y.Elem().Set(reflect.Indirect(v)) // Assign "Foo" to interface{} (dereferenced)
		v = y                             // v is now typed *interface{} (where *v = Foo)
	}

	for i := 1; i < w.ps[w.depth]; i++ {
		if iType, ok := w.ifaceTypes[ifaceKey(w.ps[w.depth]-i, w.depth)]; ok {
			iface := reflect.New(iType).Elem()
			iface.Set(v)
			v = iface
		}

		p := reflect.New(v.Type())
		p.Elem().Set(v)
		v = p
	}

	w.valPush(v)
}

// if this value is a Locker, lock it and add it to the locks slice
func (w *walker) lock(v reflect.Value) {
	if !w.useLocks {
		return
	}

	if !v.IsValid() || !v.CanInterface() {
		return
	}

	type rlocker interface {
		RLocker() sync.Locker
	}

	var locker sync.Locker

	// We can't call Interface() on a value directly, since that requires
	// a copy. This is OK, since the pointer to a value which is a sync.Locker
	// is also a sync.Locker.
	if v.Kind() == reflect.Ptr {
		switch l := v.Interface().(type) {
		case rlocker:
			// don't lock a mutex directly
			if _, ok := l.(*sync.RWMutex); !ok {
				locker = l.RLocker()
			}
		case sync.Locker:
			locker = l
		}
	} else if v.CanAddr() {
		switch l := v.Addr().Interface().(type) {
		case rlocker:
			// don't lock a mutex directly
			if _, ok := l.(*sync.RWMutex); !ok {
				locker = l.RLocker()
			}
		case sync.Locker:
			locker = l
		}
	}

	// still no callable locker
	if locker == nil {
		return
	}

	// don't lock a mutex directly
	switch locker.(type) {
	case *sync.Mutex, *sync.RWMutex:
		return
	}

	locker.Lock()
	w.locks[w.depth] = locker
}

// wrapPtr is a helper that takes v and always make it *v. copystructure
// stores things internally as pointers until the last moment before unwrapping
func wrapPtr(v reflect.Value) reflect.Value {
	if !v.IsValid() {
		return v
	}
	vPtr := reflect.New(v.Type())
	vPtr.Elem().Set(v)
	return vPtr
}
 070701000008B6000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/mitchellh/go-homedir    070701000008B7000081A4000000000000000000000001645E367C0000043D000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/mitchellh/go-homedir/LICENSE    The MIT License (MIT)

Copyright (c) 2013 Mitchell Hashimoto

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
   070701000008B8000081A4000000000000000000000001645E367C000002A9000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/mitchellh/go-homedir/README.md  # go-homedir

This is a Go library for detecting the user's home directory without
the use of cgo, so the library can be used in cross-compilation environments.

Usage is incredibly simple, just call `homedir.Dir()` to get the home directory
for a user, and `homedir.Expand()` to expand the `~` in a path to the home
directory.

**Why not just use `os/user`?** The built-in `os/user` package requires
cgo on Darwin systems. This means that any Go code that uses that package
cannot cross compile. But 99% of the time the use for `os/user` is just to
retrieve the home directory, which we can do for the current user without
cgo. This library does that, enabling cross-compilation.
   070701000008B9000081A4000000000000000000000001645E367C00000EC4000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/mitchellh/go-homedir/homedir.go package homedir

import (
	"bytes"
	"errors"
	"os"
	"os/exec"
	"path/filepath"
	"runtime"
	"strconv"
	"strings"
	"sync"
)

// DisableCache will disable caching of the home directory. Caching is enabled
// by default.
var DisableCache bool

var homedirCache string
var cacheLock sync.RWMutex

// Dir returns the home directory for the executing user.
//
// This uses an OS-specific method for discovering the home directory.
// An error is returned if a home directory cannot be detected.
func Dir() (string, error) {
	if !DisableCache {
		cacheLock.RLock()
		cached := homedirCache
		cacheLock.RUnlock()
		if cached != "" {
			return cached, nil
		}
	}

	cacheLock.Lock()
	defer cacheLock.Unlock()

	var result string
	var err error
	if runtime.GOOS == "windows" {
		result, err = dirWindows()
	} else {
		// Unix-like system, so just assume Unix
		result, err = dirUnix()
	}

	if err != nil {
		return "", err
	}
	homedirCache = result
	return result, nil
}

// Expand expands the path to include the home directory if the path
// is prefixed with `~`. If it isn't prefixed with `~`, the path is
// returned as-is.
func Expand(path string) (string, error) {
	if len(path) == 0 {
		return path, nil
	}

	if path[0] != '~' {
		return path, nil
	}

	if len(path) > 1 && path[1] != '/' && path[1] != '\\' {
		return "", errors.New("cannot expand user-specific home dir")
	}

	dir, err := Dir()
	if err != nil {
		return "", err
	}

	return filepath.Join(dir, path[1:]), nil
}

// Reset clears the cache, forcing the next call to Dir to re-detect
// the home directory. This generally never has to be called, but can be
// useful in tests if you're modifying the home directory via the HOME
// env var or something.
func Reset() {
	cacheLock.Lock()
	defer cacheLock.Unlock()
	homedirCache = ""
}

func dirUnix() (string, error) {
	homeEnv := "HOME"
	if runtime.GOOS == "plan9" {
		// On plan9, env vars are lowercase.
		homeEnv = "home"
	}

	// First prefer the HOME environmental variable
	if home := os.Getenv(homeEnv); home != "" {
		return home, nil
	}

	var stdout bytes.Buffer

	// If that fails, try OS specific commands
	if runtime.GOOS == "darwin" {
		cmd := exec.Command("sh", "-c", `dscl -q . -read /Users/"$(whoami)" NFSHomeDirectory | sed 's/^[^ ]*: //'`)
		cmd.Stdout = &stdout
		if err := cmd.Run(); err == nil {
			result := strings.TrimSpace(stdout.String())
			if result != "" {
				return result, nil
			}
		}
	} else {
		cmd := exec.Command("getent", "passwd", strconv.Itoa(os.Getuid()))
		cmd.Stdout = &stdout
		if err := cmd.Run(); err != nil {
			// If the error is ErrNotFound, we ignore it. Otherwise, return it.
			if err != exec.ErrNotFound {
				return "", err
			}
		} else {
			if passwd := strings.TrimSpace(stdout.String()); passwd != "" {
				// username:password:uid:gid:gecos:home:shell
				passwdParts := strings.SplitN(passwd, ":", 7)
				if len(passwdParts) > 5 {
					return passwdParts[5], nil
				}
			}
		}
	}

	// If all else fails, try the shell
	stdout.Reset()
	cmd := exec.Command("sh", "-c", "cd && pwd")
	cmd.Stdout = &stdout
	if err := cmd.Run(); err != nil {
		return "", err
	}

	result := strings.TrimSpace(stdout.String())
	if result == "" {
		return "", errors.New("blank output when reading home directory")
	}

	return result, nil
}

func dirWindows() (string, error) {
	// First prefer the HOME environmental variable
	if home := os.Getenv("HOME"); home != "" {
		return home, nil
	}

	// Prefer standard environment variable USERPROFILE
	if home := os.Getenv("USERPROFILE"); home != "" {
		return home, nil
	}

	drive := os.Getenv("HOMEDRIVE")
	path := os.Getenv("HOMEPATH")
	home := drive + path
	if drive == "" || path == "" {
		return "", errors.New("HOMEDRIVE, HOMEPATH, or USERPROFILE are blank")
	}

	return home, nil
}
070701000008BA000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/mitchellh/mapstructure  070701000008BB000081A4000000000000000000000001645E367C00000BA1000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/mitchellh/mapstructure/CHANGELOG.md ## 1.5.0

* New option `IgnoreUntaggedFields` to ignore decoding to any fields
  without `mapstructure` (or the configured tag name) set [GH-277]
* New option `ErrorUnset` which makes it an error if any fields
  in a target struct are not set by the decoding process. [GH-225]
* New function `OrComposeDecodeHookFunc` to help compose decode hooks. [GH-240]
* Decoding to slice from array no longer crashes [GH-265]
* Decode nested struct pointers to map [GH-271]
* Fix issue where `,squash` was ignored if `Squash` option was set. [GH-280]
* Fix issue where fields with `,omitempty` would sometimes decode
  into a map with an empty string key [GH-281]

## 1.4.3

* Fix cases where `json.Number` didn't decode properly [GH-261]

## 1.4.2

* Custom name matchers to support any sort of casing, formatting, etc. for
  field names. [GH-250]
* Fix possible panic in ComposeDecodeHookFunc [GH-251]

## 1.4.1

* Fix regression where `*time.Time` value would be set to empty and not be sent
  to decode hooks properly [GH-232]

## 1.4.0

* A new decode hook type `DecodeHookFuncValue` has been added that has
  access to the full values. [GH-183]
* Squash is now supported with embedded fields that are struct pointers [GH-205]
* Empty strings will convert to 0 for all numeric types when weakly decoding [GH-206]

## 1.3.3

* Decoding maps from maps creates a settable value for decode hooks [GH-203]

## 1.3.2

* Decode into interface type with a struct value is supported [GH-187]

## 1.3.1

* Squash should only squash embedded structs. [GH-194]

## 1.3.0

* Added `",omitempty"` support. This will ignore zero values in the source
  structure when encoding. [GH-145]

## 1.2.3

* Fix duplicate entries in Keys list with pointer values. [GH-185]

## 1.2.2

* Do not add unsettable (unexported) values to the unused metadata key
  or "remain" value. [GH-150]

## 1.2.1

* Go modules checksum mismatch fix

## 1.2.0

* Added support to capture unused values in a field using the `",remain"` value
  in the mapstructure tag. There is an example to showcase usage.
* Added `DecoderConfig` option to always squash embedded structs
* `json.Number` can decode into `uint` types
* Empty slices are preserved and not replaced with nil slices
* Fix panic that can occur in when decoding a map into a nil slice of structs
* Improved package documentation for godoc

## 1.1.2

* Fix error when decode hook decodes interface implementation into interface
  type. [GH-140]

## 1.1.1

* Fix panic that can happen in `decodePtr`

## 1.1.0

* Added `StringToIPHookFunc` to convert `string` to `net.IP` and `net.IPNet` [GH-133]
* Support struct to struct decoding [GH-137]
* If source map value is nil, then destination map value is nil (instead of empty)
* If source slice value is nil, then destination slice value is nil (instead of empty)
* If source pointer is nil, then destination pointer is set to nil (instead of
  allocated zero value of type)

## 1.0.0

* Initial tagged stable release.
   070701000008BC000081A4000000000000000000000001645E367C0000043D000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/mitchellh/mapstructure/LICENSE  The MIT License (MIT)

Copyright (c) 2013 Mitchell Hashimoto

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
   070701000008BD000081A4000000000000000000000001645E367C0000068E000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/mitchellh/mapstructure/README.md    # mapstructure [![Godoc](https://godoc.org/github.com/mitchellh/mapstructure?status.svg)](https://godoc.org/github.com/mitchellh/mapstructure)

mapstructure is a Go library for decoding generic map values to structures
and vice versa, while providing helpful error handling.

This library is most useful when decoding values from some data stream (JSON,
Gob, etc.) where you don't _quite_ know the structure of the underlying data
until you read a part of it. You can therefore read a `map[string]interface{}`
and use this library to decode it into the proper underlying native Go
structure.

## Installation

Standard `go get`:

```
$ go get github.com/mitchellh/mapstructure
```

## Usage & Example

For usage and examples see the [Godoc](http://godoc.org/github.com/mitchellh/mapstructure).

The `Decode` function has examples associated with it there.

## But Why?!

Go offers fantastic standard libraries for decoding formats such as JSON.
The standard method is to have a struct pre-created, and populate that struct
from the bytes of the encoded format. This is great, but the problem is if
you have configuration or an encoding that changes slightly depending on
specific fields. For example, consider this JSON:

```json
{
  "type": "person",
  "name": "Mitchell"
}
```

Perhaps we can't populate a specific structure without first reading
the "type" field from the JSON. We could always do two passes over the
decoding of the JSON (reading the "type" first, and the rest later).
However, it is much simpler to just decode this into a `map[string]interface{}`
structure, read the "type" key, then use something like this library
to decode it into the proper structure.
  070701000008BE000081A4000000000000000000000001645E367C00001AFC000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/mitchellh/mapstructure/decode_hooks.go  package mapstructure

import (
	"encoding"
	"errors"
	"fmt"
	"net"
	"reflect"
	"strconv"
	"strings"
	"time"
)

// typedDecodeHook takes a raw DecodeHookFunc (an interface{}) and turns
// it into the proper DecodeHookFunc type, such as DecodeHookFuncType.
func typedDecodeHook(h DecodeHookFunc) DecodeHookFunc {
	// Create variables here so we can reference them with the reflect pkg
	var f1 DecodeHookFuncType
	var f2 DecodeHookFuncKind
	var f3 DecodeHookFuncValue

	// Fill in the variables into this interface and the rest is done
	// automatically using the reflect package.
	potential := []interface{}{f1, f2, f3}

	v := reflect.ValueOf(h)
	vt := v.Type()
	for _, raw := range potential {
		pt := reflect.ValueOf(raw).Type()
		if vt.ConvertibleTo(pt) {
			return v.Convert(pt).Interface()
		}
	}

	return nil
}

// DecodeHookExec executes the given decode hook. This should be used
// since it'll naturally degrade to the older backwards compatible DecodeHookFunc
// that took reflect.Kind instead of reflect.Type.
func DecodeHookExec(
	raw DecodeHookFunc,
	from reflect.Value, to reflect.Value) (interface{}, error) {

	switch f := typedDecodeHook(raw).(type) {
	case DecodeHookFuncType:
		return f(from.Type(), to.Type(), from.Interface())
	case DecodeHookFuncKind:
		return f(from.Kind(), to.Kind(), from.Interface())
	case DecodeHookFuncValue:
		return f(from, to)
	default:
		return nil, errors.New("invalid decode hook signature")
	}
}

// ComposeDecodeHookFunc creates a single DecodeHookFunc that
// automatically composes multiple DecodeHookFuncs.
//
// The composed funcs are called in order, with the result of the
// previous transformation.
func ComposeDecodeHookFunc(fs ...DecodeHookFunc) DecodeHookFunc {
	return func(f reflect.Value, t reflect.Value) (interface{}, error) {
		var err error
		data := f.Interface()

		newFrom := f
		for _, f1 := range fs {
			data, err = DecodeHookExec(f1, newFrom, t)
			if err != nil {
				return nil, err
			}
			newFrom = reflect.ValueOf(data)
		}

		return data, nil
	}
}

// OrComposeDecodeHookFunc executes all input hook functions until one of them returns no error. In that case its value is returned.
// If all hooks return an error, OrComposeDecodeHookFunc returns an error concatenating all error messages.
func OrComposeDecodeHookFunc(ff ...DecodeHookFunc) DecodeHookFunc {
	return func(a, b reflect.Value) (interface{}, error) {
		var allErrs string
		var out interface{}
		var err error

		for _, f := range ff {
			out, err = DecodeHookExec(f, a, b)
			if err != nil {
				allErrs += err.Error() + "\n"
				continue
			}

			return out, nil
		}

		return nil, errors.New(allErrs)
	}
}

// StringToSliceHookFunc returns a DecodeHookFunc that converts
// string to []string by splitting on the given sep.
func StringToSliceHookFunc(sep string) DecodeHookFunc {
	return func(
		f reflect.Kind,
		t reflect.Kind,
		data interface{}) (interface{}, error) {
		if f != reflect.String || t != reflect.Slice {
			return data, nil
		}

		raw := data.(string)
		if raw == "" {
			return []string{}, nil
		}

		return strings.Split(raw, sep), nil
	}
}

// StringToTimeDurationHookFunc returns a DecodeHookFunc that converts
// strings to time.Duration.
func StringToTimeDurationHookFunc() DecodeHookFunc {
	return func(
		f reflect.Type,
		t reflect.Type,
		data interface{}) (interface{}, error) {
		if f.Kind() != reflect.String {
			return data, nil
		}
		if t != reflect.TypeOf(time.Duration(5)) {
			return data, nil
		}

		// Convert it by parsing
		return time.ParseDuration(data.(string))
	}
}

// StringToIPHookFunc returns a DecodeHookFunc that converts
// strings to net.IP
func StringToIPHookFunc() DecodeHookFunc {
	return func(
		f reflect.Type,
		t reflect.Type,
		data interface{}) (interface{}, error) {
		if f.Kind() != reflect.String {
			return data, nil
		}
		if t != reflect.TypeOf(net.IP{}) {
			return data, nil
		}

		// Convert it by parsing
		ip := net.ParseIP(data.(string))
		if ip == nil {
			return net.IP{}, fmt.Errorf("failed parsing ip %v", data)
		}

		return ip, nil
	}
}

// StringToIPNetHookFunc returns a DecodeHookFunc that converts
// strings to net.IPNet
func StringToIPNetHookFunc() DecodeHookFunc {
	return func(
		f reflect.Type,
		t reflect.Type,
		data interface{}) (interface{}, error) {
		if f.Kind() != reflect.String {
			return data, nil
		}
		if t != reflect.TypeOf(net.IPNet{}) {
			return data, nil
		}

		// Convert it by parsing
		_, net, err := net.ParseCIDR(data.(string))
		return net, err
	}
}

// StringToTimeHookFunc returns a DecodeHookFunc that converts
// strings to time.Time.
func StringToTimeHookFunc(layout string) DecodeHookFunc {
	return func(
		f reflect.Type,
		t reflect.Type,
		data interface{}) (interface{}, error) {
		if f.Kind() != reflect.String {
			return data, nil
		}
		if t != reflect.TypeOf(time.Time{}) {
			return data, nil
		}

		// Convert it by parsing
		return time.Parse(layout, data.(string))
	}
}

// WeaklyTypedHook is a DecodeHookFunc which adds support for weak typing to
// the decoder.
//
// Note that this is significantly different from the WeaklyTypedInput option
// of the DecoderConfig.
func WeaklyTypedHook(
	f reflect.Kind,
	t reflect.Kind,
	data interface{}) (interface{}, error) {
	dataVal := reflect.ValueOf(data)
	switch t {
	case reflect.String:
		switch f {
		case reflect.Bool:
			if dataVal.Bool() {
				return "1", nil
			}
			return "0", nil
		case reflect.Float32:
			return strconv.FormatFloat(dataVal.Float(), 'f', -1, 64), nil
		case reflect.Int:
			return strconv.FormatInt(dataVal.Int(), 10), nil
		case reflect.Slice:
			dataType := dataVal.Type()
			elemKind := dataType.Elem().Kind()
			if elemKind == reflect.Uint8 {
				return string(dataVal.Interface().([]uint8)), nil
			}
		case reflect.Uint:
			return strconv.FormatUint(dataVal.Uint(), 10), nil
		}
	}

	return data, nil
}

func RecursiveStructToMapHookFunc() DecodeHookFunc {
	return func(f reflect.Value, t reflect.Value) (interface{}, error) {
		if f.Kind() != reflect.Struct {
			return f.Interface(), nil
		}

		var i interface{} = struct{}{}
		if t.Type() != reflect.TypeOf(&i).Elem() {
			return f.Interface(), nil
		}

		m := make(map[string]interface{})
		t.Set(reflect.ValueOf(m))

		return f.Interface(), nil
	}
}

// TextUnmarshallerHookFunc returns a DecodeHookFunc that applies
// strings to the UnmarshalText function, when the target type
// implements the encoding.TextUnmarshaler interface
func TextUnmarshallerHookFunc() DecodeHookFuncType {
	return func(
		f reflect.Type,
		t reflect.Type,
		data interface{}) (interface{}, error) {
		if f.Kind() != reflect.String {
			return data, nil
		}
		result := reflect.New(t).Interface()
		unmarshaller, ok := result.(encoding.TextUnmarshaler)
		if !ok {
			return data, nil
		}
		if err := unmarshaller.UnmarshalText([]byte(data.(string))); err != nil {
			return nil, err
		}
		return result, nil
	}
}
070701000008BF000081A4000000000000000000000001645E367C00000405000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/mitchellh/mapstructure/error.go package mapstructure

import (
	"errors"
	"fmt"
	"sort"
	"strings"
)

// Error implements the error interface and can represents multiple
// errors that occur in the course of a single decode.
type Error struct {
	Errors []string
}

func (e *Error) Error() string {
	points := make([]string, len(e.Errors))
	for i, err := range e.Errors {
		points[i] = fmt.Sprintf("* %s", err)
	}

	sort.Strings(points)
	return fmt.Sprintf(
		"%d error(s) decoding:\n\n%s",
		len(e.Errors), strings.Join(points, "\n"))
}

// WrappedErrors implements the errwrap.Wrapper interface to make this
// return value more useful with the errwrap and go-multierror libraries.
func (e *Error) WrappedErrors() []error {
	if e == nil {
		return nil
	}

	result := make([]error, len(e.Errors))
	for i, e := range e.Errors {
		result[i] = errors.New(e)
	}

	return result
}

func appendErrors(errors []string, err error) []string {
	switch e := err.(type) {
	case *Error:
		return append(errors, e.Errors...)
	default:
		return append(errors, e.Error())
	}
}
   070701000008C0000081A4000000000000000000000001645E367C0000B00B000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/mitchellh/mapstructure/mapstructure.go  // Package mapstructure exposes functionality to convert one arbitrary
// Go type into another, typically to convert a map[string]interface{}
// into a native Go structure.
//
// The Go structure can be arbitrarily complex, containing slices,
// other structs, etc. and the decoder will properly decode nested
// maps and so on into the proper structures in the native Go struct.
// See the examples to see what the decoder is capable of.
//
// The simplest function to start with is Decode.
//
// Field Tags
//
// When decoding to a struct, mapstructure will use the field name by
// default to perform the mapping. For example, if a struct has a field
// "Username" then mapstructure will look for a key in the source value
// of "username" (case insensitive).
//
//     type User struct {
//         Username string
//     }
//
// You can change the behavior of mapstructure by using struct tags.
// The default struct tag that mapstructure looks for is "mapstructure"
// but you can customize it using DecoderConfig.
//
// Renaming Fields
//
// To rename the key that mapstructure looks for, use the "mapstructure"
// tag and set a value directly. For example, to change the "username" example
// above to "user":
//
//     type User struct {
//         Username string `mapstructure:"user"`
//     }
//
// Embedded Structs and Squashing
//
// Embedded structs are treated as if they're another field with that name.
// By default, the two structs below are equivalent when decoding with
// mapstructure:
//
//     type Person struct {
//         Name string
//     }
//
//     type Friend struct {
//         Person
//     }
//
//     type Friend struct {
//         Person Person
//     }
//
// This would require an input that looks like below:
//
//     map[string]interface{}{
//         "person": map[string]interface{}{"name": "alice"},
//     }
//
// If your "person" value is NOT nested, then you can append ",squash" to
// your tag value and mapstructure will treat it as if the embedded struct
// were part of the struct directly. Example:
//
//     type Friend struct {
//         Person `mapstructure:",squash"`
//     }
//
// Now the following input would be accepted:
//
//     map[string]interface{}{
//         "name": "alice",
//     }
//
// When decoding from a struct to a map, the squash tag squashes the struct
// fields into a single map. Using the example structs from above:
//
//     Friend{Person: Person{Name: "alice"}}
//
// Will be decoded into a map:
//
//     map[string]interface{}{
//         "name": "alice",
//     }
//
// DecoderConfig has a field that changes the behavior of mapstructure
// to always squash embedded structs.
//
// Remainder Values
//
// If there are any unmapped keys in the source value, mapstructure by
// default will silently ignore them. You can error by setting ErrorUnused
// in DecoderConfig. If you're using Metadata you can also maintain a slice
// of the unused keys.
//
// You can also use the ",remain" suffix on your tag to collect all unused
// values in a map. The field with this tag MUST be a map type and should
// probably be a "map[string]interface{}" or "map[interface{}]interface{}".
// See example below:
//
//     type Friend struct {
//         Name  string
//         Other map[string]interface{} `mapstructure:",remain"`
//     }
//
// Given the input below, Other would be populated with the other
// values that weren't used (everything but "name"):
//
//     map[string]interface{}{
//         "name":    "bob",
//         "address": "123 Maple St.",
//     }
//
// Omit Empty Values
//
// When decoding from a struct to any other value, you may use the
// ",omitempty" suffix on your tag to omit that value if it equates to
// the zero value. The zero value of all types is specified in the Go
// specification.
//
// For example, the zero type of a numeric type is zero ("0"). If the struct
// field value is zero and a numeric type, the field is empty, and it won't
// be encoded into the destination type.
//
//     type Source struct {
//         Age int `mapstructure:",omitempty"`
//     }
//
// Unexported fields
//
// Since unexported (private) struct fields cannot be set outside the package
// where they are defined, the decoder will simply skip them.
//
// For this output type definition:
//
//     type Exported struct {
//         private string // this unexported field will be skipped
//         Public string
//     }
//
// Using this map as input:
//
//     map[string]interface{}{
//         "private": "I will be ignored",
//         "Public":  "I made it through!",
//     }
//
// The following struct will be decoded:
//
//     type Exported struct {
//         private: "" // field is left with an empty string (zero value)
//         Public: "I made it through!"
//     }
//
// Other Configuration
//
// mapstructure is highly configurable. See the DecoderConfig struct
// for other features and options that are supported.
package mapstructure

import (
	"encoding/json"
	"errors"
	"fmt"
	"reflect"
	"sort"
	"strconv"
	"strings"
)

// DecodeHookFunc is the callback function that can be used for
// data transformations. See "DecodeHook" in the DecoderConfig
// struct.
//
// The type must be one of DecodeHookFuncType, DecodeHookFuncKind, or
// DecodeHookFuncValue.
// Values are a superset of Types (Values can return types), and Types are a
// superset of Kinds (Types can return Kinds) and are generally a richer thing
// to use, but Kinds are simpler if you only need those.
//
// The reason DecodeHookFunc is multi-typed is for backwards compatibility:
// we started with Kinds and then realized Types were the better solution,
// but have a promise to not break backwards compat so we now support
// both.
type DecodeHookFunc interface{}

// DecodeHookFuncType is a DecodeHookFunc which has complete information about
// the source and target types.
type DecodeHookFuncType func(reflect.Type, reflect.Type, interface{}) (interface{}, error)

// DecodeHookFuncKind is a DecodeHookFunc which knows only the Kinds of the
// source and target types.
type DecodeHookFuncKind func(reflect.Kind, reflect.Kind, interface{}) (interface{}, error)

// DecodeHookFuncValue is a DecodeHookFunc which has complete access to both the source and target
// values.
type DecodeHookFuncValue func(from reflect.Value, to reflect.Value) (interface{}, error)

// DecoderConfig is the configuration that is used to create a new decoder
// and allows customization of various aspects of decoding.
type DecoderConfig struct {
	// DecodeHook, if set, will be called before any decoding and any
	// type conversion (if WeaklyTypedInput is on). This lets you modify
	// the values before they're set down onto the resulting struct. The
	// DecodeHook is called for every map and value in the input. This means
	// that if a struct has embedded fields with squash tags the decode hook
	// is called only once with all of the input data, not once for each
	// embedded struct.
	//
	// If an error is returned, the entire decode will fail with that error.
	DecodeHook DecodeHookFunc

	// If ErrorUnused is true, then it is an error for there to exist
	// keys in the original map that were unused in the decoding process
	// (extra keys).
	ErrorUnused bool

	// If ErrorUnset is true, then it is an error for there to exist
	// fields in the result that were not set in the decoding process
	// (extra fields). This only applies to decoding to a struct. This
	// will affect all nested structs as well.
	ErrorUnset bool

	// ZeroFields, if set to true, will zero fields before writing them.
	// For example, a map will be emptied before decoded values are put in
	// it. If this is false, a map will be merged.
	ZeroFields bool

	// If WeaklyTypedInput is true, the decoder will make the following
	// "weak" conversions:
	//
	//   - bools to string (true = "1", false = "0")
	//   - numbers to string (base 10)
	//   - bools to int/uint (true = 1, false = 0)
	//   - strings to int/uint (base implied by prefix)
	//   - int to bool (true if value != 0)
	//   - string to bool (accepts: 1, t, T, TRUE, true, True, 0, f, F,
	//     FALSE, false, False. Anything else is an error)
	//   - empty array = empty map and vice versa
	//   - negative numbers to overflowed uint values (base 10)
	//   - slice of maps to a merged map
	//   - single values are converted to slices if required. Each
	//     element is weakly decoded. For example: "4" can become []int{4}
	//     if the target type is an int slice.
	//
	WeaklyTypedInput bool

	// Squash will squash embedded structs.  A squash tag may also be
	// added to an individual struct field using a tag.  For example:
	//
	//  type Parent struct {
	//      Child `mapstructure:",squash"`
	//  }
	Squash bool

	// Metadata is the struct that will contain extra metadata about
	// the decoding. If this is nil, then no metadata will be tracked.
	Metadata *Metadata

	// Result is a pointer to the struct that will contain the decoded
	// value.
	Result interface{}

	// The tag name that mapstructure reads for field names. This
	// defaults to "mapstructure"
	TagName string

	// IgnoreUntaggedFields ignores all struct fields without explicit
	// TagName, comparable to `mapstructure:"-"` as default behaviour.
	IgnoreUntaggedFields bool

	// MatchName is the function used to match the map key to the struct
	// field name or tag. Defaults to `strings.EqualFold`. This can be used
	// to implement case-sensitive tag values, support snake casing, etc.
	MatchName func(mapKey, fieldName string) bool
}

// A Decoder takes a raw interface value and turns it into structured
// data, keeping track of rich error information along the way in case
// anything goes wrong. Unlike the basic top-level Decode method, you can
// more finely control how the Decoder behaves using the DecoderConfig
// structure. The top-level Decode method is just a convenience that sets
// up the most basic Decoder.
type Decoder struct {
	config *DecoderConfig
}

// Metadata contains information about decoding a structure that
// is tedious or difficult to get otherwise.
type Metadata struct {
	// Keys are the keys of the structure which were successfully decoded
	Keys []string

	// Unused is a slice of keys that were found in the raw value but
	// weren't decoded since there was no matching field in the result interface
	Unused []string

	// Unset is a slice of field names that were found in the result interface
	// but weren't set in the decoding process since there was no matching value
	// in the input
	Unset []string
}

// Decode takes an input structure and uses reflection to translate it to
// the output structure. output must be a pointer to a map or struct.
func Decode(input interface{}, output interface{}) error {
	config := &DecoderConfig{
		Metadata: nil,
		Result:   output,
	}

	decoder, err := NewDecoder(config)
	if err != nil {
		return err
	}

	return decoder.Decode(input)
}

// WeakDecode is the same as Decode but is shorthand to enable
// WeaklyTypedInput. See DecoderConfig for more info.
func WeakDecode(input, output interface{}) error {
	config := &DecoderConfig{
		Metadata:         nil,
		Result:           output,
		WeaklyTypedInput: true,
	}

	decoder, err := NewDecoder(config)
	if err != nil {
		return err
	}

	return decoder.Decode(input)
}

// DecodeMetadata is the same as Decode, but is shorthand to
// enable metadata collection. See DecoderConfig for more info.
func DecodeMetadata(input interface{}, output interface{}, metadata *Metadata) error {
	config := &DecoderConfig{
		Metadata: metadata,
		Result:   output,
	}

	decoder, err := NewDecoder(config)
	if err != nil {
		return err
	}

	return decoder.Decode(input)
}

// WeakDecodeMetadata is the same as Decode, but is shorthand to
// enable both WeaklyTypedInput and metadata collection. See
// DecoderConfig for more info.
func WeakDecodeMetadata(input interface{}, output interface{}, metadata *Metadata) error {
	config := &DecoderConfig{
		Metadata:         metadata,
		Result:           output,
		WeaklyTypedInput: true,
	}

	decoder, err := NewDecoder(config)
	if err != nil {
		return err
	}

	return decoder.Decode(input)
}

// NewDecoder returns a new decoder for the given configuration. Once
// a decoder has been returned, the same configuration must not be used
// again.
func NewDecoder(config *DecoderConfig) (*Decoder, error) {
	val := reflect.ValueOf(config.Result)
	if val.Kind() != reflect.Ptr {
		return nil, errors.New("result must be a pointer")
	}

	val = val.Elem()
	if !val.CanAddr() {
		return nil, errors.New("result must be addressable (a pointer)")
	}

	if config.Metadata != nil {
		if config.Metadata.Keys == nil {
			config.Metadata.Keys = make([]string, 0)
		}

		if config.Metadata.Unused == nil {
			config.Metadata.Unused = make([]string, 0)
		}

		if config.Metadata.Unset == nil {
			config.Metadata.Unset = make([]string, 0)
		}
	}

	if config.TagName == "" {
		config.TagName = "mapstructure"
	}

	if config.MatchName == nil {
		config.MatchName = strings.EqualFold
	}

	result := &Decoder{
		config: config,
	}

	return result, nil
}

// Decode decodes the given raw interface to the target pointer specified
// by the configuration.
func (d *Decoder) Decode(input interface{}) error {
	return d.decode("", input, reflect.ValueOf(d.config.Result).Elem())
}

// Decodes an unknown data type into a specific reflection value.
func (d *Decoder) decode(name string, input interface{}, outVal reflect.Value) error {
	var inputVal reflect.Value
	if input != nil {
		inputVal = reflect.ValueOf(input)

		// We need to check here if input is a typed nil. Typed nils won't
		// match the "input == nil" below so we check that here.
		if inputVal.Kind() == reflect.Ptr && inputVal.IsNil() {
			input = nil
		}
	}

	if input == nil {
		// If the data is nil, then we don't set anything, unless ZeroFields is set
		// to true.
		if d.config.ZeroFields {
			outVal.Set(reflect.Zero(outVal.Type()))

			if d.config.Metadata != nil && name != "" {
				d.config.Metadata.Keys = append(d.config.Metadata.Keys, name)
			}
		}
		return nil
	}

	if !inputVal.IsValid() {
		// If the input value is invalid, then we just set the value
		// to be the zero value.
		outVal.Set(reflect.Zero(outVal.Type()))
		if d.config.Metadata != nil && name != "" {
			d.config.Metadata.Keys = append(d.config.Metadata.Keys, name)
		}
		return nil
	}

	if d.config.DecodeHook != nil {
		// We have a DecodeHook, so let's pre-process the input.
		var err error
		input, err = DecodeHookExec(d.config.DecodeHook, inputVal, outVal)
		if err != nil {
			return fmt.Errorf("error decoding '%s': %s", name, err)
		}
	}

	var err error
	outputKind := getKind(outVal)
	addMetaKey := true
	switch outputKind {
	case reflect.Bool:
		err = d.decodeBool(name, input, outVal)
	case reflect.Interface:
		err = d.decodeBasic(name, input, outVal)
	case reflect.String:
		err = d.decodeString(name, input, outVal)
	case reflect.Int:
		err = d.decodeInt(name, input, outVal)
	case reflect.Uint:
		err = d.decodeUint(name, input, outVal)
	case reflect.Float32:
		err = d.decodeFloat(name, input, outVal)
	case reflect.Struct:
		err = d.decodeStruct(name, input, outVal)
	case reflect.Map:
		err = d.decodeMap(name, input, outVal)
	case reflect.Ptr:
		addMetaKey, err = d.decodePtr(name, input, outVal)
	case reflect.Slice:
		err = d.decodeSlice(name, input, outVal)
	case reflect.Array:
		err = d.decodeArray(name, input, outVal)
	case reflect.Func:
		err = d.decodeFunc(name, input, outVal)
	default:
		// If we reached this point then we weren't able to decode it
		return fmt.Errorf("%s: unsupported type: %s", name, outputKind)
	}

	// If we reached here, then we successfully decoded SOMETHING, so
	// mark the key as used if we're tracking metainput.
	if addMetaKey && d.config.Metadata != nil && name != "" {
		d.config.Metadata.Keys = append(d.config.Metadata.Keys, name)
	}

	return err
}

// This decodes a basic type (bool, int, string, etc.) and sets the
// value to "data" of that type.
func (d *Decoder) decodeBasic(name string, data interface{}, val reflect.Value) error {
	if val.IsValid() && val.Elem().IsValid() {
		elem := val.Elem()

		// If we can't address this element, then its not writable. Instead,
		// we make a copy of the value (which is a pointer and therefore
		// writable), decode into that, and replace the whole value.
		copied := false
		if !elem.CanAddr() {
			copied = true

			// Make *T
			copy := reflect.New(elem.Type())

			// *T = elem
			copy.Elem().Set(elem)

			// Set elem so we decode into it
			elem = copy
		}

		// Decode. If we have an error then return. We also return right
		// away if we're not a copy because that means we decoded directly.
		if err := d.decode(name, data, elem); err != nil || !copied {
			return err
		}

		// If we're a copy, we need to set te final result
		val.Set(elem.Elem())
		return nil
	}

	dataVal := reflect.ValueOf(data)

	// If the input data is a pointer, and the assigned type is the dereference
	// of that exact pointer, then indirect it so that we can assign it.
	// Example: *string to string
	if dataVal.Kind() == reflect.Ptr && dataVal.Type().Elem() == val.Type() {
		dataVal = reflect.Indirect(dataVal)
	}

	if !dataVal.IsValid() {
		dataVal = reflect.Zero(val.Type())
	}

	dataValType := dataVal.Type()
	if !dataValType.AssignableTo(val.Type()) {
		return fmt.Errorf(
			"'%s' expected type '%s', got '%s'",
			name, val.Type(), dataValType)
	}

	val.Set(dataVal)
	return nil
}

func (d *Decoder) decodeString(name string, data interface{}, val reflect.Value) error {
	dataVal := reflect.Indirect(reflect.ValueOf(data))
	dataKind := getKind(dataVal)

	converted := true
	switch {
	case dataKind == reflect.String:
		val.SetString(dataVal.String())
	case dataKind == reflect.Bool && d.config.WeaklyTypedInput:
		if dataVal.Bool() {
			val.SetString("1")
		} else {
			val.SetString("0")
		}
	case dataKind == reflect.Int && d.config.WeaklyTypedInput:
		val.SetString(strconv.FormatInt(dataVal.Int(), 10))
	case dataKind == reflect.Uint && d.config.WeaklyTypedInput:
		val.SetString(strconv.FormatUint(dataVal.Uint(), 10))
	case dataKind == reflect.Float32 && d.config.WeaklyTypedInput:
		val.SetString(strconv.FormatFloat(dataVal.Float(), 'f', -1, 64))
	case dataKind == reflect.Slice && d.config.WeaklyTypedInput,
		dataKind == reflect.Array && d.config.WeaklyTypedInput:
		dataType := dataVal.Type()
		elemKind := dataType.Elem().Kind()
		switch elemKind {
		case reflect.Uint8:
			var uints []uint8
			if dataKind == reflect.Array {
				uints = make([]uint8, dataVal.Len(), dataVal.Len())
				for i := range uints {
					uints[i] = dataVal.Index(i).Interface().(uint8)
				}
			} else {
				uints = dataVal.Interface().([]uint8)
			}
			val.SetString(string(uints))
		default:
			converted = false
		}
	default:
		converted = false
	}

	if !converted {
		return fmt.Errorf(
			"'%s' expected type '%s', got unconvertible type '%s', value: '%v'",
			name, val.Type(), dataVal.Type(), data)
	}

	return nil
}

func (d *Decoder) decodeInt(name string, data interface{}, val reflect.Value) error {
	dataVal := reflect.Indirect(reflect.ValueOf(data))
	dataKind := getKind(dataVal)
	dataType := dataVal.Type()

	switch {
	case dataKind == reflect.Int:
		val.SetInt(dataVal.Int())
	case dataKind == reflect.Uint:
		val.SetInt(int64(dataVal.Uint()))
	case dataKind == reflect.Float32:
		val.SetInt(int64(dataVal.Float()))
	case dataKind == reflect.Bool && d.config.WeaklyTypedInput:
		if dataVal.Bool() {
			val.SetInt(1)
		} else {
			val.SetInt(0)
		}
	case dataKind == reflect.String && d.config.WeaklyTypedInput:
		str := dataVal.String()
		if str == "" {
			str = "0"
		}

		i, err := strconv.ParseInt(str, 0, val.Type().Bits())
		if err == nil {
			val.SetInt(i)
		} else {
			return fmt.Errorf("cannot parse '%s' as int: %s", name, err)
		}
	case dataType.PkgPath() == "encoding/json" && dataType.Name() == "Number":
		jn := data.(json.Number)
		i, err := jn.Int64()
		if err != nil {
			return fmt.Errorf(
				"error decoding json.Number into %s: %s", name, err)
		}
		val.SetInt(i)
	default:
		return fmt.Errorf(
			"'%s' expected type '%s', got unconvertible type '%s', value: '%v'",
			name, val.Type(), dataVal.Type(), data)
	}

	return nil
}

func (d *Decoder) decodeUint(name string, data interface{}, val reflect.Value) error {
	dataVal := reflect.Indirect(reflect.ValueOf(data))
	dataKind := getKind(dataVal)
	dataType := dataVal.Type()

	switch {
	case dataKind == reflect.Int:
		i := dataVal.Int()
		if i < 0 && !d.config.WeaklyTypedInput {
			return fmt.Errorf("cannot parse '%s', %d overflows uint",
				name, i)
		}
		val.SetUint(uint64(i))
	case dataKind == reflect.Uint:
		val.SetUint(dataVal.Uint())
	case dataKind == reflect.Float32:
		f := dataVal.Float()
		if f < 0 && !d.config.WeaklyTypedInput {
			return fmt.Errorf("cannot parse '%s', %f overflows uint",
				name, f)
		}
		val.SetUint(uint64(f))
	case dataKind == reflect.Bool && d.config.WeaklyTypedInput:
		if dataVal.Bool() {
			val.SetUint(1)
		} else {
			val.SetUint(0)
		}
	case dataKind == reflect.String && d.config.WeaklyTypedInput:
		str := dataVal.String()
		if str == "" {
			str = "0"
		}

		i, err := strconv.ParseUint(str, 0, val.Type().Bits())
		if err == nil {
			val.SetUint(i)
		} else {
			return fmt.Errorf("cannot parse '%s' as uint: %s", name, err)
		}
	case dataType.PkgPath() == "encoding/json" && dataType.Name() == "Number":
		jn := data.(json.Number)
		i, err := strconv.ParseUint(string(jn), 0, 64)
		if err != nil {
			return fmt.Errorf(
				"error decoding json.Number into %s: %s", name, err)
		}
		val.SetUint(i)
	default:
		return fmt.Errorf(
			"'%s' expected type '%s', got unconvertible type '%s', value: '%v'",
			name, val.Type(), dataVal.Type(), data)
	}

	return nil
}

func (d *Decoder) decodeBool(name string, data interface{}, val reflect.Value) error {
	dataVal := reflect.Indirect(reflect.ValueOf(data))
	dataKind := getKind(dataVal)

	switch {
	case dataKind == reflect.Bool:
		val.SetBool(dataVal.Bool())
	case dataKind == reflect.Int && d.config.WeaklyTypedInput:
		val.SetBool(dataVal.Int() != 0)
	case dataKind == reflect.Uint && d.config.WeaklyTypedInput:
		val.SetBool(dataVal.Uint() != 0)
	case dataKind == reflect.Float32 && d.config.WeaklyTypedInput:
		val.SetBool(dataVal.Float() != 0)
	case dataKind == reflect.String && d.config.WeaklyTypedInput:
		b, err := strconv.ParseBool(dataVal.String())
		if err == nil {
			val.SetBool(b)
		} else if dataVal.String() == "" {
			val.SetBool(false)
		} else {
			return fmt.Errorf("cannot parse '%s' as bool: %s", name, err)
		}
	default:
		return fmt.Errorf(
			"'%s' expected type '%s', got unconvertible type '%s', value: '%v'",
			name, val.Type(), dataVal.Type(), data)
	}

	return nil
}

func (d *Decoder) decodeFloat(name string, data interface{}, val reflect.Value) error {
	dataVal := reflect.Indirect(reflect.ValueOf(data))
	dataKind := getKind(dataVal)
	dataType := dataVal.Type()

	switch {
	case dataKind == reflect.Int:
		val.SetFloat(float64(dataVal.Int()))
	case dataKind == reflect.Uint:
		val.SetFloat(float64(dataVal.Uint()))
	case dataKind == reflect.Float32:
		val.SetFloat(dataVal.Float())
	case dataKind == reflect.Bool && d.config.WeaklyTypedInput:
		if dataVal.Bool() {
			val.SetFloat(1)
		} else {
			val.SetFloat(0)
		}
	case dataKind == reflect.String && d.config.WeaklyTypedInput:
		str := dataVal.String()
		if str == "" {
			str = "0"
		}

		f, err := strconv.ParseFloat(str, val.Type().Bits())
		if err == nil {
			val.SetFloat(f)
		} else {
			return fmt.Errorf("cannot parse '%s' as float: %s", name, err)
		}
	case dataType.PkgPath() == "encoding/json" && dataType.Name() == "Number":
		jn := data.(json.Number)
		i, err := jn.Float64()
		if err != nil {
			return fmt.Errorf(
				"error decoding json.Number into %s: %s", name, err)
		}
		val.SetFloat(i)
	default:
		return fmt.Errorf(
			"'%s' expected type '%s', got unconvertible type '%s', value: '%v'",
			name, val.Type(), dataVal.Type(), data)
	}

	return nil
}

func (d *Decoder) decodeMap(name string, data interface{}, val reflect.Value) error {
	valType := val.Type()
	valKeyType := valType.Key()
	valElemType := valType.Elem()

	// By default we overwrite keys in the current map
	valMap := val

	// If the map is nil or we're purposely zeroing fields, make a new map
	if valMap.IsNil() || d.config.ZeroFields {
		// Make a new map to hold our result
		mapType := reflect.MapOf(valKeyType, valElemType)
		valMap = reflect.MakeMap(mapType)
	}

	// Check input type and based on the input type jump to the proper func
	dataVal := reflect.Indirect(reflect.ValueOf(data))
	switch dataVal.Kind() {
	case reflect.Map:
		return d.decodeMapFromMap(name, dataVal, val, valMap)

	case reflect.Struct:
		return d.decodeMapFromStruct(name, dataVal, val, valMap)

	case reflect.Array, reflect.Slice:
		if d.config.WeaklyTypedInput {
			return d.decodeMapFromSlice(name, dataVal, val, valMap)
		}

		fallthrough

	default:
		return fmt.Errorf("'%s' expected a map, got '%s'", name, dataVal.Kind())
	}
}

func (d *Decoder) decodeMapFromSlice(name string, dataVal reflect.Value, val reflect.Value, valMap reflect.Value) error {
	// Special case for BC reasons (covered by tests)
	if dataVal.Len() == 0 {
		val.Set(valMap)
		return nil
	}

	for i := 0; i < dataVal.Len(); i++ {
		err := d.decode(
			name+"["+strconv.Itoa(i)+"]",
			dataVal.Index(i).Interface(), val)
		if err != nil {
			return err
		}
	}

	return nil
}

func (d *Decoder) decodeMapFromMap(name string, dataVal reflect.Value, val reflect.Value, valMap reflect.Value) error {
	valType := val.Type()
	valKeyType := valType.Key()
	valElemType := valType.Elem()

	// Accumulate errors
	errors := make([]string, 0)

	// If the input data is empty, then we just match what the input data is.
	if dataVal.Len() == 0 {
		if dataVal.IsNil() {
			if !val.IsNil() {
				val.Set(dataVal)
			}
		} else {
			// Set to empty allocated value
			val.Set(valMap)
		}

		return nil
	}

	for _, k := range dataVal.MapKeys() {
		fieldName := name + "[" + k.String() + "]"

		// First decode the key into the proper type
		currentKey := reflect.Indirect(reflect.New(valKeyType))
		if err := d.decode(fieldName, k.Interface(), currentKey); err != nil {
			errors = appendErrors(errors, err)
			continue
		}

		// Next decode the data into the proper type
		v := dataVal.MapIndex(k).Interface()
		currentVal := reflect.Indirect(reflect.New(valElemType))
		if err := d.decode(fieldName, v, currentVal); err != nil {
			errors = appendErrors(errors, err)
			continue
		}

		valMap.SetMapIndex(currentKey, currentVal)
	}

	// Set the built up map to the value
	val.Set(valMap)

	// If we had errors, return those
	if len(errors) > 0 {
		return &Error{errors}
	}

	return nil
}

func (d *Decoder) decodeMapFromStruct(name string, dataVal reflect.Value, val reflect.Value, valMap reflect.Value) error {
	typ := dataVal.Type()
	for i := 0; i < typ.NumField(); i++ {
		// Get the StructField first since this is a cheap operation. If the
		// field is unexported, then ignore it.
		f := typ.Field(i)
		if f.PkgPath != "" {
			continue
		}

		// Next get the actual value of this field and verify it is assignable
		// to the map value.
		v := dataVal.Field(i)
		if !v.Type().AssignableTo(valMap.Type().Elem()) {
			return fmt.Errorf("cannot assign type '%s' to map value field of type '%s'", v.Type(), valMap.Type().Elem())
		}

		tagValue := f.Tag.Get(d.config.TagName)
		keyName := f.Name

		if tagValue == "" && d.config.IgnoreUntaggedFields {
			continue
		}

		// If Squash is set in the config, we squash the field down.
		squash := d.config.Squash && v.Kind() == reflect.Struct && f.Anonymous

		v = dereferencePtrToStructIfNeeded(v, d.config.TagName)

		// Determine the name of the key in the map
		if index := strings.Index(tagValue, ","); index != -1 {
			if tagValue[:index] == "-" {
				continue
			}
			// If "omitempty" is specified in the tag, it ignores empty values.
			if strings.Index(tagValue[index+1:], "omitempty") != -1 && isEmptyValue(v) {
				continue
			}

			// If "squash" is specified in the tag, we squash the field down.
			squash = squash || strings.Index(tagValue[index+1:], "squash") != -1
			if squash {
				// When squashing, the embedded type can be a pointer to a struct.
				if v.Kind() == reflect.Ptr && v.Elem().Kind() == reflect.Struct {
					v = v.Elem()
				}

				// The final type must be a struct
				if v.Kind() != reflect.Struct {
					return fmt.Errorf("cannot squash non-struct type '%s'", v.Type())
				}
			}
			if keyNameTagValue := tagValue[:index]; keyNameTagValue != "" {
				keyName = keyNameTagValue
			}
		} else if len(tagValue) > 0 {
			if tagValue == "-" {
				continue
			}
			keyName = tagValue
		}

		switch v.Kind() {
		// this is an embedded struct, so handle it differently
		case reflect.Struct:
			x := reflect.New(v.Type())
			x.Elem().Set(v)

			vType := valMap.Type()
			vKeyType := vType.Key()
			vElemType := vType.Elem()
			mType := reflect.MapOf(vKeyType, vElemType)
			vMap := reflect.MakeMap(mType)

			// Creating a pointer to a map so that other methods can completely
			// overwrite the map if need be (looking at you decodeMapFromMap). The
			// indirection allows the underlying map to be settable (CanSet() == true)
			// where as reflect.MakeMap returns an unsettable map.
			addrVal := reflect.New(vMap.Type())
			reflect.Indirect(addrVal).Set(vMap)

			err := d.decode(keyName, x.Interface(), reflect.Indirect(addrVal))
			if err != nil {
				return err
			}

			// the underlying map may have been completely overwritten so pull
			// it indirectly out of the enclosing value.
			vMap = reflect.Indirect(addrVal)

			if squash {
				for _, k := range vMap.MapKeys() {
					valMap.SetMapIndex(k, vMap.MapIndex(k))
				}
			} else {
				valMap.SetMapIndex(reflect.ValueOf(keyName), vMap)
			}

		default:
			valMap.SetMapIndex(reflect.ValueOf(keyName), v)
		}
	}

	if val.CanAddr() {
		val.Set(valMap)
	}

	return nil
}

func (d *Decoder) decodePtr(name string, data interface{}, val reflect.Value) (bool, error) {
	// If the input data is nil, then we want to just set the output
	// pointer to be nil as well.
	isNil := data == nil
	if !isNil {
		switch v := reflect.Indirect(reflect.ValueOf(data)); v.Kind() {
		case reflect.Chan,
			reflect.Func,
			reflect.Interface,
			reflect.Map,
			reflect.Ptr,
			reflect.Slice:
			isNil = v.IsNil()
		}
	}
	if isNil {
		if !val.IsNil() && val.CanSet() {
			nilValue := reflect.New(val.Type()).Elem()
			val.Set(nilValue)
		}

		return true, nil
	}

	// Create an element of the concrete (non pointer) type and decode
	// into that. Then set the value of the pointer to this type.
	valType := val.Type()
	valElemType := valType.Elem()
	if val.CanSet() {
		realVal := val
		if realVal.IsNil() || d.config.ZeroFields {
			realVal = reflect.New(valElemType)
		}

		if err := d.decode(name, data, reflect.Indirect(realVal)); err != nil {
			return false, err
		}

		val.Set(realVal)
	} else {
		if err := d.decode(name, data, reflect.Indirect(val)); err != nil {
			return false, err
		}
	}
	return false, nil
}

func (d *Decoder) decodeFunc(name string, data interface{}, val reflect.Value) error {
	// Create an element of the concrete (non pointer) type and decode
	// into that. Then set the value of the pointer to this type.
	dataVal := reflect.Indirect(reflect.ValueOf(data))
	if val.Type() != dataVal.Type() {
		return fmt.Errorf(
			"'%s' expected type '%s', got unconvertible type '%s', value: '%v'",
			name, val.Type(), dataVal.Type(), data)
	}
	val.Set(dataVal)
	return nil
}

func (d *Decoder) decodeSlice(name string, data interface{}, val reflect.Value) error {
	dataVal := reflect.Indirect(reflect.ValueOf(data))
	dataValKind := dataVal.Kind()
	valType := val.Type()
	valElemType := valType.Elem()
	sliceType := reflect.SliceOf(valElemType)

	// If we have a non array/slice type then we first attempt to convert.
	if dataValKind != reflect.Array && dataValKind != reflect.Slice {
		if d.config.WeaklyTypedInput {
			switch {
			// Slice and array we use the normal logic
			case dataValKind == reflect.Slice, dataValKind == reflect.Array:
				break

			// Empty maps turn into empty slices
			case dataValKind == reflect.Map:
				if dataVal.Len() == 0 {
					val.Set(reflect.MakeSlice(sliceType, 0, 0))
					return nil
				}
				// Create slice of maps of other sizes
				return d.decodeSlice(name, []interface{}{data}, val)

			case dataValKind == reflect.String && valElemType.Kind() == reflect.Uint8:
				return d.decodeSlice(name, []byte(dataVal.String()), val)

			// All other types we try to convert to the slice type
			// and "lift" it into it. i.e. a string becomes a string slice.
			default:
				// Just re-try this function with data as a slice.
				return d.decodeSlice(name, []interface{}{data}, val)
			}
		}

		return fmt.Errorf(
			"'%s': source data must be an array or slice, got %s", name, dataValKind)
	}

	// If the input value is nil, then don't allocate since empty != nil
	if dataValKind != reflect.Array && dataVal.IsNil() {
		return nil
	}

	valSlice := val
	if valSlice.IsNil() || d.config.ZeroFields {
		// Make a new slice to hold our result, same size as the original data.
		valSlice = reflect.MakeSlice(sliceType, dataVal.Len(), dataVal.Len())
	}

	// Accumulate any errors
	errors := make([]string, 0)

	for i := 0; i < dataVal.Len(); i++ {
		currentData := dataVal.Index(i).Interface()
		for valSlice.Len() <= i {
			valSlice = reflect.Append(valSlice, reflect.Zero(valElemType))
		}
		currentField := valSlice.Index(i)

		fieldName := name + "[" + strconv.Itoa(i) + "]"
		if err := d.decode(fieldName, currentData, currentField); err != nil {
			errors = appendErrors(errors, err)
		}
	}

	// Finally, set the value to the slice we built up
	val.Set(valSlice)

	// If there were errors, we return those
	if len(errors) > 0 {
		return &Error{errors}
	}

	return nil
}

func (d *Decoder) decodeArray(name string, data interface{}, val reflect.Value) error {
	dataVal := reflect.Indirect(reflect.ValueOf(data))
	dataValKind := dataVal.Kind()
	valType := val.Type()
	valElemType := valType.Elem()
	arrayType := reflect.ArrayOf(valType.Len(), valElemType)

	valArray := val

	if valArray.Interface() == reflect.Zero(valArray.Type()).Interface() || d.config.ZeroFields {
		// Check input type
		if dataValKind != reflect.Array && dataValKind != reflect.Slice {
			if d.config.WeaklyTypedInput {
				switch {
				// Empty maps turn into empty arrays
				case dataValKind == reflect.Map:
					if dataVal.Len() == 0 {
						val.Set(reflect.Zero(arrayType))
						return nil
					}

				// All other types we try to convert to the array type
				// and "lift" it into it. i.e. a string becomes a string array.
				default:
					// Just re-try this function with data as a slice.
					return d.decodeArray(name, []interface{}{data}, val)
				}
			}

			return fmt.Errorf(
				"'%s': source data must be an array or slice, got %s", name, dataValKind)

		}
		if dataVal.Len() > arrayType.Len() {
			return fmt.Errorf(
				"'%s': expected source data to have length less or equal to %d, got %d", name, arrayType.Len(), dataVal.Len())

		}

		// Make a new array to hold our result, same size as the original data.
		valArray = reflect.New(arrayType).Elem()
	}

	// Accumulate any errors
	errors := make([]string, 0)

	for i := 0; i < dataVal.Len(); i++ {
		currentData := dataVal.Index(i).Interface()
		currentField := valArray.Index(i)

		fieldName := name + "[" + strconv.Itoa(i) + "]"
		if err := d.decode(fieldName, currentData, currentField); err != nil {
			errors = appendErrors(errors, err)
		}
	}

	// Finally, set the value to the array we built up
	val.Set(valArray)

	// If there were errors, we return those
	if len(errors) > 0 {
		return &Error{errors}
	}

	return nil
}

func (d *Decoder) decodeStruct(name string, data interface{}, val reflect.Value) error {
	dataVal := reflect.Indirect(reflect.ValueOf(data))

	// If the type of the value to write to and the data match directly,
	// then we just set it directly instead of recursing into the structure.
	if dataVal.Type() == val.Type() {
		val.Set(dataVal)
		return nil
	}

	dataValKind := dataVal.Kind()
	switch dataValKind {
	case reflect.Map:
		return d.decodeStructFromMap(name, dataVal, val)

	case reflect.Struct:
		// Not the most efficient way to do this but we can optimize later if
		// we want to. To convert from struct to struct we go to map first
		// as an intermediary.

		// Make a new map to hold our result
		mapType := reflect.TypeOf((map[string]interface{})(nil))
		mval := reflect.MakeMap(mapType)

		// Creating a pointer to a map so that other methods can completely
		// overwrite the map if need be (looking at you decodeMapFromMap). The
		// indirection allows the underlying map to be settable (CanSet() == true)
		// where as reflect.MakeMap returns an unsettable map.
		addrVal := reflect.New(mval.Type())

		reflect.Indirect(addrVal).Set(mval)
		if err := d.decodeMapFromStruct(name, dataVal, reflect.Indirect(addrVal), mval); err != nil {
			return err
		}

		result := d.decodeStructFromMap(name, reflect.Indirect(addrVal), val)
		return result

	default:
		return fmt.Errorf("'%s' expected a map, got '%s'", name, dataVal.Kind())
	}
}

func (d *Decoder) decodeStructFromMap(name string, dataVal, val reflect.Value) error {
	dataValType := dataVal.Type()
	if kind := dataValType.Key().Kind(); kind != reflect.String && kind != reflect.Interface {
		return fmt.Errorf(
			"'%s' needs a map with string keys, has '%s' keys",
			name, dataValType.Key().Kind())
	}

	dataValKeys := make(map[reflect.Value]struct{})
	dataValKeysUnused := make(map[interface{}]struct{})
	for _, dataValKey := range dataVal.MapKeys() {
		dataValKeys[dataValKey] = struct{}{}
		dataValKeysUnused[dataValKey.Interface()] = struct{}{}
	}

	targetValKeysUnused := make(map[interface{}]struct{})
	errors := make([]string, 0)

	// This slice will keep track of all the structs we'll be decoding.
	// There can be more than one struct if there are embedded structs
	// that are squashed.
	structs := make([]reflect.Value, 1, 5)
	structs[0] = val

	// Compile the list of all the fields that we're going to be decoding
	// from all the structs.
	type field struct {
		field reflect.StructField
		val   reflect.Value
	}

	// remainField is set to a valid field set with the "remain" tag if
	// we are keeping track of remaining values.
	var remainField *field

	fields := []field{}
	for len(structs) > 0 {
		structVal := structs[0]
		structs = structs[1:]

		structType := structVal.Type()

		for i := 0; i < structType.NumField(); i++ {
			fieldType := structType.Field(i)
			fieldVal := structVal.Field(i)
			if fieldVal.Kind() == reflect.Ptr && fieldVal.Elem().Kind() == reflect.Struct {
				// Handle embedded struct pointers as embedded structs.
				fieldVal = fieldVal.Elem()
			}

			// If "squash" is specified in the tag, we squash the field down.
			squash := d.config.Squash && fieldVal.Kind() == reflect.Struct && fieldType.Anonymous
			remain := false

			// We always parse the tags cause we're looking for other tags too
			tagParts := strings.Split(fieldType.Tag.Get(d.config.TagName), ",")
			for _, tag := range tagParts[1:] {
				if tag == "squash" {
					squash = true
					break
				}

				if tag == "remain" {
					remain = true
					break
				}
			}

			if squash {
				if fieldVal.Kind() != reflect.Struct {
					errors = appendErrors(errors,
						fmt.Errorf("%s: unsupported type for squash: %s", fieldType.Name, fieldVal.Kind()))
				} else {
					structs = append(structs, fieldVal)
				}
				continue
			}

			// Build our field
			if remain {
				remainField = &field{fieldType, fieldVal}
			} else {
				// Normal struct field, store it away
				fields = append(fields, field{fieldType, fieldVal})
			}
		}
	}

	// for fieldType, field := range fields {
	for _, f := range fields {
		field, fieldValue := f.field, f.val
		fieldName := field.Name

		tagValue := field.Tag.Get(d.config.TagName)
		tagValue = strings.SplitN(tagValue, ",", 2)[0]
		if tagValue != "" {
			fieldName = tagValue
		}

		rawMapKey := reflect.ValueOf(fieldName)
		rawMapVal := dataVal.MapIndex(rawMapKey)
		if !rawMapVal.IsValid() {
			// Do a slower search by iterating over each key and
			// doing case-insensitive search.
			for dataValKey := range dataValKeys {
				mK, ok := dataValKey.Interface().(string)
				if !ok {
					// Not a string key
					continue
				}

				if d.config.MatchName(mK, fieldName) {
					rawMapKey = dataValKey
					rawMapVal = dataVal.MapIndex(dataValKey)
					break
				}
			}

			if !rawMapVal.IsValid() {
				// There was no matching key in the map for the value in
				// the struct. Remember it for potential errors and metadata.
				targetValKeysUnused[fieldName] = struct{}{}
				continue
			}
		}

		if !fieldValue.IsValid() {
			// This should never happen
			panic("field is not valid")
		}

		// If we can't set the field, then it is unexported or something,
		// and we just continue onwards.
		if !fieldValue.CanSet() {
			continue
		}

		// Delete the key we're using from the unused map so we stop tracking
		delete(dataValKeysUnused, rawMapKey.Interface())

		// If the name is empty string, then we're at the root, and we
		// don't dot-join the fields.
		if name != "" {
			fieldName = name + "." + fieldName
		}

		if err := d.decode(fieldName, rawMapVal.Interface(), fieldValue); err != nil {
			errors = appendErrors(errors, err)
		}
	}

	// If we have a "remain"-tagged field and we have unused keys then
	// we put the unused keys directly into the remain field.
	if remainField != nil && len(dataValKeysUnused) > 0 {
		// Build a map of only the unused values
		remain := map[interface{}]interface{}{}
		for key := range dataValKeysUnused {
			remain[key] = dataVal.MapIndex(reflect.ValueOf(key)).Interface()
		}

		// Decode it as-if we were just decoding this map onto our map.
		if err := d.decodeMap(name, remain, remainField.val); err != nil {
			errors = appendErrors(errors, err)
		}

		// Set the map to nil so we have none so that the next check will
		// not error (ErrorUnused)
		dataValKeysUnused = nil
	}

	if d.config.ErrorUnused && len(dataValKeysUnused) > 0 {
		keys := make([]string, 0, len(dataValKeysUnused))
		for rawKey := range dataValKeysUnused {
			keys = append(keys, rawKey.(string))
		}
		sort.Strings(keys)

		err := fmt.Errorf("'%s' has invalid keys: %s", name, strings.Join(keys, ", "))
		errors = appendErrors(errors, err)
	}

	if d.config.ErrorUnset && len(targetValKeysUnused) > 0 {
		keys := make([]string, 0, len(targetValKeysUnused))
		for rawKey := range targetValKeysUnused {
			keys = append(keys, rawKey.(string))
		}
		sort.Strings(keys)

		err := fmt.Errorf("'%s' has unset fields: %s", name, strings.Join(keys, ", "))
		errors = appendErrors(errors, err)
	}

	if len(errors) > 0 {
		return &Error{errors}
	}

	// Add the unused keys to the list of unused keys if we're tracking metadata
	if d.config.Metadata != nil {
		for rawKey := range dataValKeysUnused {
			key := rawKey.(string)
			if name != "" {
				key = name + "." + key
			}

			d.config.Metadata.Unused = append(d.config.Metadata.Unused, key)
		}
		for rawKey := range targetValKeysUnused {
			key := rawKey.(string)
			if name != "" {
				key = name + "." + key
			}

			d.config.Metadata.Unset = append(d.config.Metadata.Unset, key)
		}
	}

	return nil
}

func isEmptyValue(v reflect.Value) bool {
	switch getKind(v) {
	case reflect.Array, reflect.Map, reflect.Slice, reflect.String:
		return v.Len() == 0
	case reflect.Bool:
		return !v.Bool()
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		return v.Int() == 0
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		return v.Uint() == 0
	case reflect.Float32, reflect.Float64:
		return v.Float() == 0
	case reflect.Interface, reflect.Ptr:
		return v.IsNil()
	}
	return false
}

func getKind(val reflect.Value) reflect.Kind {
	kind := val.Kind()

	switch {
	case kind >= reflect.Int && kind <= reflect.Int64:
		return reflect.Int
	case kind >= reflect.Uint && kind <= reflect.Uint64:
		return reflect.Uint
	case kind >= reflect.Float32 && kind <= reflect.Float64:
		return reflect.Float32
	default:
		return kind
	}
}

func isStructTypeConvertibleToMap(typ reflect.Type, checkMapstructureTags bool, tagName string) bool {
	for i := 0; i < typ.NumField(); i++ {
		f := typ.Field(i)
		if f.PkgPath == "" && !checkMapstructureTags { // check for unexported fields
			return true
		}
		if checkMapstructureTags && f.Tag.Get(tagName) != "" { // check for mapstructure tags inside
			return true
		}
	}
	return false
}

func dereferencePtrToStructIfNeeded(v reflect.Value, tagName string) reflect.Value {
	if v.Kind() != reflect.Ptr || v.Elem().Kind() != reflect.Struct {
		return v
	}
	deref := v.Elem()
	derefT := deref.Type()
	if isStructTypeConvertibleToMap(derefT, true, tagName) {
		return deref
	}
	return v
}
 070701000008C1000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/mitchellh/reflectwalk   070701000008C2000081A4000000000000000000000001645E367C0000000D000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/mitchellh/reflectwalk/.travis.yml   language: go
   070701000008C3000081A4000000000000000000000001645E367C0000043D000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/mitchellh/reflectwalk/LICENSE   The MIT License (MIT)

Copyright (c) 2013 Mitchell Hashimoto

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
   070701000008C4000081A4000000000000000000000001645E367C00000112000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/mitchellh/reflectwalk/README.md # reflectwalk

reflectwalk is a Go library for "walking" a value in Go using reflection,
in the same way a directory tree can be "walked" on the filesystem. Walking
a complex structure can allow you to do manipulations on unknown structures
such as those decoded from JSON.
  070701000008C5000081A4000000000000000000000001645E367C000000D5000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/mitchellh/reflectwalk/location.go   package reflectwalk

//go:generate stringer -type=Location location.go

type Location uint

const (
	None Location = iota
	Map
	MapKey
	MapValue
	Slice
	SliceElem
	Array
	ArrayElem
	Struct
	StructField
	WalkLoc
)
   070701000008C6000081A4000000000000000000000001645E367C000001DD000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/mitchellh/reflectwalk/location_string.go    // Code generated by "stringer -type=Location location.go"; DO NOT EDIT.

package reflectwalk

import "fmt"

const _Location_name = "NoneMapMapKeyMapValueSliceSliceElemArrayArrayElemStructStructFieldWalkLoc"

var _Location_index = [...]uint8{0, 4, 7, 13, 21, 26, 35, 40, 49, 55, 66, 73}

func (i Location) String() string {
	if i >= Location(len(_Location_index)-1) {
		return fmt.Sprintf("Location(%d)", i)
	}
	return _Location_name[_Location_index[i]:_Location_index[i+1]]
}
   070701000008C7000081A4000000000000000000000001645E367C00002267000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/mitchellh/reflectwalk/reflectwalk.go    // reflectwalk is a package that allows you to "walk" complex structures
// similar to how you may "walk" a filesystem: visiting every element one
// by one and calling callback functions allowing you to handle and manipulate
// those elements.
package reflectwalk

import (
	"errors"
	"reflect"
)

// PrimitiveWalker implementations are able to handle primitive values
// within complex structures. Primitive values are numbers, strings,
// booleans, funcs, chans.
//
// These primitive values are often members of more complex
// structures (slices, maps, etc.) that are walkable by other interfaces.
type PrimitiveWalker interface {
	Primitive(reflect.Value) error
}

// InterfaceWalker implementations are able to handle interface values as they
// are encountered during the walk.
type InterfaceWalker interface {
	Interface(reflect.Value) error
}

// MapWalker implementations are able to handle individual elements
// found within a map structure.
type MapWalker interface {
	Map(m reflect.Value) error
	MapElem(m, k, v reflect.Value) error
}

// SliceWalker implementations are able to handle slice elements found
// within complex structures.
type SliceWalker interface {
	Slice(reflect.Value) error
	SliceElem(int, reflect.Value) error
}

// ArrayWalker implementations are able to handle array elements found
// within complex structures.
type ArrayWalker interface {
	Array(reflect.Value) error
	ArrayElem(int, reflect.Value) error
}

// StructWalker is an interface that has methods that are called for
// structs when a Walk is done.
type StructWalker interface {
	Struct(reflect.Value) error
	StructField(reflect.StructField, reflect.Value) error
}

// EnterExitWalker implementations are notified before and after
// they walk deeper into complex structures (into struct fields,
// into slice elements, etc.)
type EnterExitWalker interface {
	Enter(Location) error
	Exit(Location) error
}

// PointerWalker implementations are notified when the value they're
// walking is a pointer or not. Pointer is called for _every_ value whether
// it is a pointer or not.
type PointerWalker interface {
	PointerEnter(bool) error
	PointerExit(bool) error
}

// PointerValueWalker implementations are notified with the value of
// a particular pointer when a pointer is walked. Pointer is called
// right before PointerEnter.
type PointerValueWalker interface {
	Pointer(reflect.Value) error
}

// SkipEntry can be returned from walk functions to skip walking
// the value of this field. This is only valid in the following functions:
//
//   - Struct: skips all fields from being walked
//   - StructField: skips walking the struct value
//
var SkipEntry = errors.New("skip this entry")

// Walk takes an arbitrary value and an interface and traverses the
// value, calling callbacks on the interface if they are supported.
// The interface should implement one or more of the walker interfaces
// in this package, such as PrimitiveWalker, StructWalker, etc.
func Walk(data, walker interface{}) (err error) {
	v := reflect.ValueOf(data)
	ew, ok := walker.(EnterExitWalker)
	if ok {
		err = ew.Enter(WalkLoc)
	}

	if err == nil {
		err = walk(v, walker)
	}

	if ok && err == nil {
		err = ew.Exit(WalkLoc)
	}

	return
}

func walk(v reflect.Value, w interface{}) (err error) {
	// Determine if we're receiving a pointer and if so notify the walker.
	// The logic here is convoluted but very important (tests will fail if
	// almost any part is changed). I will try to explain here.
	//
	// First, we check if the value is an interface, if so, we really need
	// to check the interface's VALUE to see whether it is a pointer.
	//
	// Check whether the value is then a pointer. If so, then set pointer
	// to true to notify the user.
	//
	// If we still have a pointer or an interface after the indirections, then
	// we unwrap another level
	//
	// At this time, we also set "v" to be the dereferenced value. This is
	// because once we've unwrapped the pointer we want to use that value.
	pointer := false
	pointerV := v

	for {
		if pointerV.Kind() == reflect.Interface {
			if iw, ok := w.(InterfaceWalker); ok {
				if err = iw.Interface(pointerV); err != nil {
					return
				}
			}

			pointerV = pointerV.Elem()
		}

		if pointerV.Kind() == reflect.Ptr {
			if pw, ok := w.(PointerValueWalker); ok {
				if err = pw.Pointer(pointerV); err != nil {
					if err == SkipEntry {
						// Skip the rest of this entry but clear the error
						return nil
					}

					return
				}
			}

			pointer = true
			v = reflect.Indirect(pointerV)
		}
		if pw, ok := w.(PointerWalker); ok {
			if err = pw.PointerEnter(pointer); err != nil {
				return
			}

			defer func(pointer bool) {
				if err != nil {
					return
				}

				err = pw.PointerExit(pointer)
			}(pointer)
		}

		if pointer {
			pointerV = v
		}
		pointer = false

		// If we still have a pointer or interface we have to indirect another level.
		switch pointerV.Kind() {
		case reflect.Ptr, reflect.Interface:
			continue
		}
		break
	}

	// We preserve the original value here because if it is an interface
	// type, we want to pass that directly into the walkPrimitive, so that
	// we can set it.
	originalV := v
	if v.Kind() == reflect.Interface {
		v = v.Elem()
	}

	k := v.Kind()
	if k >= reflect.Int && k <= reflect.Complex128 {
		k = reflect.Int
	}

	switch k {
	// Primitives
	case reflect.Bool, reflect.Chan, reflect.Func, reflect.Int, reflect.String, reflect.Invalid:
		err = walkPrimitive(originalV, w)
		return
	case reflect.Map:
		err = walkMap(v, w)
		return
	case reflect.Slice:
		err = walkSlice(v, w)
		return
	case reflect.Struct:
		err = walkStruct(v, w)
		return
	case reflect.Array:
		err = walkArray(v, w)
		return
	default:
		panic("unsupported type: " + k.String())
	}
}

func walkMap(v reflect.Value, w interface{}) error {
	ew, ewok := w.(EnterExitWalker)
	if ewok {
		ew.Enter(Map)
	}

	if mw, ok := w.(MapWalker); ok {
		if err := mw.Map(v); err != nil {
			return err
		}
	}

	for _, k := range v.MapKeys() {
		kv := v.MapIndex(k)

		if mw, ok := w.(MapWalker); ok {
			if err := mw.MapElem(v, k, kv); err != nil {
				return err
			}
		}

		ew, ok := w.(EnterExitWalker)
		if ok {
			ew.Enter(MapKey)
		}

		if err := walk(k, w); err != nil {
			return err
		}

		if ok {
			ew.Exit(MapKey)
			ew.Enter(MapValue)
		}

		// get the map value again as it may have changed in the MapElem call
		if err := walk(v.MapIndex(k), w); err != nil {
			return err
		}

		if ok {
			ew.Exit(MapValue)
		}
	}

	if ewok {
		ew.Exit(Map)
	}

	return nil
}

func walkPrimitive(v reflect.Value, w interface{}) error {
	if pw, ok := w.(PrimitiveWalker); ok {
		return pw.Primitive(v)
	}

	return nil
}

func walkSlice(v reflect.Value, w interface{}) (err error) {
	ew, ok := w.(EnterExitWalker)
	if ok {
		ew.Enter(Slice)
	}

	if sw, ok := w.(SliceWalker); ok {
		if err := sw.Slice(v); err != nil {
			return err
		}
	}

	for i := 0; i < v.Len(); i++ {
		elem := v.Index(i)

		if sw, ok := w.(SliceWalker); ok {
			if err := sw.SliceElem(i, elem); err != nil {
				return err
			}
		}

		ew, ok := w.(EnterExitWalker)
		if ok {
			ew.Enter(SliceElem)
		}

		if err := walk(elem, w); err != nil {
			return err
		}

		if ok {
			ew.Exit(SliceElem)
		}
	}

	ew, ok = w.(EnterExitWalker)
	if ok {
		ew.Exit(Slice)
	}

	return nil
}

func walkArray(v reflect.Value, w interface{}) (err error) {
	ew, ok := w.(EnterExitWalker)
	if ok {
		ew.Enter(Array)
	}

	if aw, ok := w.(ArrayWalker); ok {
		if err := aw.Array(v); err != nil {
			return err
		}
	}

	for i := 0; i < v.Len(); i++ {
		elem := v.Index(i)

		if aw, ok := w.(ArrayWalker); ok {
			if err := aw.ArrayElem(i, elem); err != nil {
				return err
			}
		}

		ew, ok := w.(EnterExitWalker)
		if ok {
			ew.Enter(ArrayElem)
		}

		if err := walk(elem, w); err != nil {
			return err
		}

		if ok {
			ew.Exit(ArrayElem)
		}
	}

	ew, ok = w.(EnterExitWalker)
	if ok {
		ew.Exit(Array)
	}

	return nil
}

func walkStruct(v reflect.Value, w interface{}) (err error) {
	ew, ewok := w.(EnterExitWalker)
	if ewok {
		ew.Enter(Struct)
	}

	skip := false
	if sw, ok := w.(StructWalker); ok {
		err = sw.Struct(v)
		if err == SkipEntry {
			skip = true
			err = nil
		}
		if err != nil {
			return
		}
	}

	if !skip {
		vt := v.Type()
		for i := 0; i < vt.NumField(); i++ {
			sf := vt.Field(i)
			f := v.FieldByIndex([]int{i})

			if sw, ok := w.(StructWalker); ok {
				err = sw.StructField(sf, f)

				// SkipEntry just pretends this field doesn't even exist
				if err == SkipEntry {
					continue
				}

				if err != nil {
					return
				}
			}

			ew, ok := w.(EnterExitWalker)
			if ok {
				ew.Enter(StructField)
			}

			err = walk(f, w)
			if err != nil {
				return
			}

			if ok {
				ew.Exit(StructField)
			}
		}
	}

	if ewok {
		ew.Exit(Struct)
	}

	return nil
}
 070701000008C8000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000002B00000000elemental-cli-0.3.1/vendor/github.com/moby    070701000008C9000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003000000000elemental-cli-0.3.1/vendor/github.com/moby/moby   070701000008CA000081A4000000000000000000000001645E367C00015BEF000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/moby/moby/AUTHORS   # File @generated by hack/generate-authors.sh. DO NOT EDIT.
# This file lists all contributors to the repository.
# See hack/generate-authors.sh to make modifications.

Aanand Prasad <aanand.prasad@gmail.com>
Aaron Davidson <aaron@databricks.com>
Aaron Feng <aaron.feng@gmail.com>
Aaron Hnatiw <aaron@griddio.com>
Aaron Huslage <huslage@gmail.com>
Aaron L. Xu <liker.xu@foxmail.com>
Aaron Lehmann <alehmann@netflix.com>
Aaron Welch <welch@packet.net>
Abel Muiño <amuino@gmail.com>
Abhijeet Kasurde <akasurde@redhat.com>
Abhinandan Prativadi <aprativadi@gmail.com>
Abhinav Ajgaonkar <abhinav316@gmail.com>
Abhishek Chanda <abhishek.becs@gmail.com>
Abhishek Sharma <abhishek@asharma.me>
Abin Shahab <ashahab@altiscale.com>
Abirdcfly <fp544037857@gmail.com>
Ada Mancini <ada@docker.com>
Adam Avilla <aavilla@yp.com>
Adam Dobrawy <naczelnik@jawnosc.tk>
Adam Eijdenberg <adam.eijdenberg@gmail.com>
Adam Kunk <adam.kunk@tiaa-cref.org>
Adam Miller <admiller@redhat.com>
Adam Mills <adam@armills.info>
Adam Pointer <adam.pointer@skybettingandgaming.com>
Adam Singer <financeCoding@gmail.com>
Adam Walz <adam@adamwalz.net>
Adam Williams <awilliams@mirantis.com>
Addam Hardy <addam.hardy@gmail.com>
Aditi Rajagopal <arajagopal@us.ibm.com>
Aditya <aditya@netroy.in>
Adnan Khan <adnkha@amazon.com>
Adolfo Ochagavía <aochagavia92@gmail.com>
Adria Casas <adriacasas88@gmail.com>
Adrian Moisey <adrian@changeover.za.net>
Adrian Mouat <adrian.mouat@gmail.com>
Adrian Oprea <adrian@codesi.nz>
Adrien Folie <folie.adrien@gmail.com>
Adrien Gallouët <adrien@gallouet.fr>
Ahmed Kamal <email.ahmedkamal@googlemail.com>
Ahmet Alp Balkan <ahmetb@microsoft.com>
Aidan Feldman <aidan.feldman@gmail.com>
Aidan Hobson Sayers <aidanhs@cantab.net>
AJ Bowen <aj@soulshake.net>
Ajey Charantimath <ajey.charantimath@gmail.com>
ajneu <ajneu@users.noreply.github.com>
Akash Gupta <akagup@microsoft.com>
Akhil Mohan <akhil.mohan@mayadata.io>
Akihiro Matsushima <amatsusbit@gmail.com>
Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
Akim Demaille <akim.demaille@docker.com>
Akira Koyasu <mail@akirakoyasu.net>
Akshay Karle <akshay.a.karle@gmail.com>
Akshay Moghe <akshay.moghe@gmail.com>
Al Tobey <al@ooyala.com>
alambike <alambike@gmail.com>
Alan Hoyle <alan@alanhoyle.com>
Alan Scherger <flyinprogrammer@gmail.com>
Alan Thompson <cloojure@gmail.com>
Albert Callarisa <shark234@gmail.com>
Albert Zhang <zhgwenming@gmail.com>
Albin Kerouanton <albinker@gmail.com>
Alec Benson <albenson@redhat.com>
Alejandro González Hevia <alejandrgh11@gmail.com>
Aleksa Sarai <asarai@suse.de>
Aleksandr Chebotov <v-aleche@microsoft.com>
Aleksandrs Fadins <aleks@s-ko.net>
Alena Prokharchyk <alena@rancher.com>
Alessandro Boch <aboch@tetrationanalytics.com>
Alessio Biancalana <dottorblaster@gmail.com>
Alex Chan <alex@alexwlchan.net>
Alex Chen <alexchenunix@gmail.com>
Alex Coventry <alx@empirical.com>
Alex Crawford <alex.crawford@coreos.com>
Alex Ellis <alexellis2@gmail.com>
Alex Gaynor <alex.gaynor@gmail.com>
Alex Goodman <wagoodman@gmail.com>
Alex Nordlund <alexander.nordlund@nasdaq.com>
Alex Olshansky <i@creagenics.com>
Alex Samorukov <samm@os2.kiev.ua>
Alex Warhawk <ax.warhawk@gmail.com>
Alexander Artemenko <svetlyak.40wt@gmail.com>
Alexander Boyd <alex@opengroove.org>
Alexander Larsson <alexl@redhat.com>
Alexander Midlash <amidlash@docker.com>
Alexander Morozov <lk4d4math@gmail.com>
Alexander Polakov <plhk@sdf.org>
Alexander Shopov <ash@kambanaria.org>
Alexandre Beslic <alexandre.beslic@gmail.com>
Alexandre Garnier <zigarn@gmail.com>
Alexandre González <agonzalezro@gmail.com>
Alexandre Jomin <alexandrejomin@gmail.com>
Alexandru Sfirlogea <alexandru.sfirlogea@gmail.com>
Alexei Margasov <alexei38@yandex.ru>
Alexey Guskov <lexag@mail.ru>
Alexey Kotlyarov <alexey@infoxchange.net.au>
Alexey Shamrin <shamrin@gmail.com>
Alexis Ries <ries.alexis@gmail.com>
Alexis Thomas <fr.alexisthomas@gmail.com>
Alfred Landrum <alfred.landrum@docker.com>
Ali Dehghani <ali.dehghani.g@gmail.com>
Alicia Lauerman <alicia@eta.im>
Alihan Demir <alihan_6153@hotmail.com>
Allen Madsen <blatyo@gmail.com>
Allen Sun <allensun.shl@alibaba-inc.com>
almoehi <almoehi@users.noreply.github.com>
Alvaro Saurin <alvaro.saurin@gmail.com>
Alvin Deng <alvin.q.deng@utexas.edu>
Alvin Richards <alvin.richards@docker.com>
amangoel <amangoel@gmail.com>
Amen Belayneh <amenbelayneh@gmail.com>
Ameya Gawde <agawde@mirantis.com>
Amir Goldstein <amir73il@aquasec.com>
Amit Bakshi <ambakshi@gmail.com>
Amit Krishnan <amit.krishnan@oracle.com>
Amit Shukla <amit.shukla@docker.com>
Amr Gawish <amr.gawish@gmail.com>
Amy Lindburg <amy.lindburg@docker.com>
Anand Patil <anand.prabhakar.patil@gmail.com>
AnandkumarPatel <anandkumarpatel@gmail.com>
Anatoly Borodin <anatoly.borodin@gmail.com>
Anca Iordache <anca.iordache@docker.com>
Anchal Agrawal <aagrawa4@illinois.edu>
Anda Xu <anda.xu@docker.com>
Anders Janmyr <anders@janmyr.com>
Andre Dublin <81dublin@gmail.com>
Andre Granovsky <robotciti@live.com>
Andrea Denisse Gómez <crypto.andrea@protonmail.ch>
Andrea Luzzardi <aluzzardi@gmail.com>
Andrea Turli <andrea.turli@gmail.com>
Andreas Elvers <andreas@work.de>
Andreas Köhler <andi5.py@gmx.net>
Andreas Savvides <andreas@editd.com>
Andreas Tiefenthaler <at@an-ti.eu>
Andrei Gherzan <andrei@resin.io>
Andrei Ushakov <aushakov@netflix.com>
Andrei Vagin <avagin@gmail.com>
Andrew C. Bodine <acbodine@us.ibm.com>
Andrew Clay Shafer <andrewcshafer@gmail.com>
Andrew Duckworth <grillopress@gmail.com>
Andrew France <andrew@avito.co.uk>
Andrew Gerrand <adg@golang.org>
Andrew Guenther <guenther.andrew.j@gmail.com>
Andrew He <he.andrew.mail@gmail.com>
Andrew Hsu <andrewhsu@docker.com>
Andrew Kim <taeyeonkim90@gmail.com>
Andrew Kuklewicz <kookster@gmail.com>
Andrew Macgregor <andrew.macgregor@agworld.com.au>
Andrew Macpherson <hopscotch23@gmail.com>
Andrew Martin <sublimino@gmail.com>
Andrew McDonnell <bugs@andrewmcdonnell.net>
Andrew Munsell <andrew@wizardapps.net>
Andrew Pennebaker <andrew.pennebaker@gmail.com>
Andrew Po <absourd.noise@gmail.com>
Andrew Weiss <andrew.weiss@docker.com>
Andrew Williams <williams.andrew@gmail.com>
Andrews Medina <andrewsmedina@gmail.com>
Andrey Kolomentsev <andrey.kolomentsev@docker.com>
Andrey Petrov <andrey.petrov@shazow.net>
Andrey Stolbovsky <andrey.stolbovsky@gmail.com>
André Martins <aanm90@gmail.com>
Andy Chambers <anchambers@paypal.com>
andy diller <dillera@gmail.com>
Andy Goldstein <agoldste@redhat.com>
Andy Kipp <andy@rstudio.com>
Andy Lindeman <alindeman@salesforce.com>
Andy Rothfusz <github@developersupport.net>
Andy Smith <github@anarkystic.com>
Andy Wilson <wilson.andrew.j+github@gmail.com>
Andy Zhang <andy.zhangtao@hotmail.com>
Anes Hasicic <anes.hasicic@gmail.com>
Angel Velazquez <angelcar@amazon.com>
Anil Belur <askb23@gmail.com>
Anil Madhavapeddy <anil@recoil.org>
Ankit Jain <ajatkj@yahoo.co.in>
Ankush Agarwal <ankushagarwal11@gmail.com>
Anonmily <michelle@michelleliu.io>
Anran Qiao <anran.qiao@daocloud.io>
Anshul Pundir <anshul.pundir@docker.com>
Anthon van der Neut <anthon@mnt.org>
Anthony Baire <Anthony.Baire@irisa.fr>
Anthony Bishopric <git@anthonybishopric.com>
Anthony Dahanne <anthony.dahanne@gmail.com>
Anthony Sottile <asottile@umich.edu>
Anton Löfgren <anton.lofgren@gmail.com>
Anton Nikitin <anton.k.nikitin@gmail.com>
Anton Polonskiy <anton.polonskiy@gmail.com>
Anton Tiurin <noxiouz@yandex.ru>
Antonio Murdaca <antonio.murdaca@gmail.com>
Antonis Kalipetis <akalipetis@gmail.com>
Antony Messerli <amesserl@rackspace.com>
Anuj Bahuguna <anujbahuguna.dev@gmail.com>
Anuj Varma <anujvarma@thumbtack.com>
Anusha Ragunathan <anusha.ragunathan@docker.com>
Anyu Wang <wanganyu@outlook.com>
apocas <petermdias@gmail.com>
Arash Deshmeh <adeshmeh@ca.ibm.com>
ArikaChen <eaglesora@gmail.com>
Arko Dasgupta <arko@tetrate.io>
Arnaud Lefebvre <a.lefebvre@outlook.fr>
Arnaud Porterie <icecrime@gmail.com>
Arnaud Rebillout <arnaud.rebillout@collabora.com>
Artem Khramov <akhramov@pm.me>
Arthur Barr <arthur.barr@uk.ibm.com>
Arthur Gautier <baloo@gandi.net>
Artur Meyster <arthurfbi@yahoo.com>
Arun Gupta <arun.gupta@gmail.com>
Asad Saeeduddin <masaeedu@gmail.com>
Asbjørn Enge <asbjorn@hanafjedle.net>
Austin Vazquez <macedonv@amazon.com>
averagehuman <averagehuman@users.noreply.github.com>
Avi Das <andas222@gmail.com>
Avi Kivity <avi@scylladb.com>
Avi Miller <avi.miller@oracle.com>
Avi Vaid <avaid1996@gmail.com>
ayoshitake <airandfingers@gmail.com>
Azat Khuyiyakhmetov <shadow_uz@mail.ru>
Bao Yonglei <baoyonglei@huawei.com>
Bardia Keyoumarsi <bkeyouma@ucsc.edu>
Barnaby Gray <barnaby@pickle.me.uk>
Barry Allard <barry.allard@gmail.com>
Bartłomiej Piotrowski <b@bpiotrowski.pl>
Bastiaan Bakker <bbakker@xebia.com>
Bastien Pascard <bpascard@hotmail.com>
bdevloed <boris.de.vloed@gmail.com>
Bearice Ren <bearice@gmail.com>
Ben Bonnefoy <frenchben@docker.com>
Ben Firshman <ben@firshman.co.uk>
Ben Golub <ben.golub@dotcloud.com>
Ben Gould <ben@bengould.co.uk>
Ben Hall <ben@benhall.me.uk>
Ben Langfeld <ben@langfeld.me>
Ben Sargent <ben@brokendigits.com>
Ben Severson <BenSeverson@users.noreply.github.com>
Ben Toews <mastahyeti@gmail.com>
Ben Wiklund <ben@daisyowl.com>
Benjamin Atkin <ben@benatkin.com>
Benjamin Baker <Benjamin.baker@utexas.edu>
Benjamin Boudreau <boudreau.benjamin@gmail.com>
Benjamin Böhmke <benjamin@boehmke.net>
Benjamin Yolken <yolken@stripe.com>
Benny Ng <benny.tpng@gmail.com>
Benoit Chesneau <bchesneau@gmail.com>
Bernerd Schaefer <bj.schaefer@gmail.com>
Bernhard M. Wiedemann <bwiedemann@suse.de>
Bert Goethals <bert@bertg.be>
Bertrand Roussel <broussel@sierrawireless.com>
Bevisy Zhang <binbin36520@gmail.com>
Bharath Thiruveedula <bharath_ves@hotmail.com>
Bhiraj Butala <abhiraj.butala@gmail.com>
Bhumika Bayani <bhumikabayani@gmail.com>
Bilal Amarni <bilal.amarni@gmail.com>
Bill Wang <ozbillwang@gmail.com>
Billy Ridgway <wrridgwa@us.ibm.com>
Bily Zhang <xcoder@tenxcloud.com>
Bin Liu <liubin0329@gmail.com>
Bingshen Wang <bingshen.wbs@alibaba-inc.com>
Bjorn Neergaard <bneergaard@mirantis.com>
Blake Geno <blakegeno@gmail.com>
Boaz Shuster <ripcurld.github@gmail.com>
bobby abbott <ttobbaybbob@gmail.com>
Bojun Zhu <bojun.zhu@foxmail.com>
Boqin Qin <bobbqqin@gmail.com>
Boris Pruessmann <boris@pruessmann.org>
Boshi Lian <farmer1992@gmail.com>
Bouke Haarsma <bouke@webatoom.nl>
Boyd Hemphill <boyd@feedmagnet.com>
boynux <boynux@gmail.com>
Bradley Cicenas <bradley.cicenas@gmail.com>
Bradley Wright <brad@intranation.com>
Brandon Liu <bdon@bdon.org>
Brandon Philips <brandon.philips@coreos.com>
Brandon Rhodes <brandon@rhodesmill.org>
Brendan Dixon <brendand@microsoft.com>
Brent Salisbury <brent.salisbury@docker.com>
Brett Higgins <brhiggins@arbor.net>
Brett Kochendorfer <brett.kochendorfer@gmail.com>
Brett Milford <brettmilford@gmail.com>
Brett Randall <javabrett@gmail.com>
Brian (bex) Exelbierd <bexelbie@redhat.com>
Brian Bland <brian.bland@docker.com>
Brian DeHamer <brian@dehamer.com>
Brian Dorsey <brian@dorseys.org>
Brian Flad <bflad417@gmail.com>
Brian Goff <cpuguy83@gmail.com>
Brian McCallister <brianm@skife.org>
Brian Olsen <brian@maven-group.org>
Brian Schwind <brianmschwind@gmail.com>
Brian Shumate <brian@couchbase.com>
Brian Torres-Gil <brian@dralth.com>
Brian Trump <btrump@yelp.com>
Brice Jaglin <bjaglin@teads.tv>
Briehan Lombaard <briehan.lombaard@gmail.com>
Brielle Broder <bbroder@google.com>
Bruno Bigras <bigras.bruno@gmail.com>
Bruno Binet <bruno.binet@gmail.com>
Bruno Gazzera <bgazzera@paginar.com>
Bruno Renié <brutasse@gmail.com>
Bruno Tavares <btavare@thoughtworks.com>
Bryan Bess <squarejaw@bsbess.com>
Bryan Boreham <bjboreham@gmail.com>
Bryan Matsuo <bryan.matsuo@gmail.com>
Bryan Murphy <bmurphy1976@gmail.com>
Burke Libbey <burke@libbey.me>
Byung Kang <byung.kang.ctr@amrdec.army.mil>
Caleb Spare <cespare@gmail.com>
Calen Pennington <cale@edx.org>
Cameron Boehmer <cameron.boehmer@gmail.com>
Cameron Sparr <gh@sparr.email>
Cameron Spear <cameronspear@gmail.com>
Campbell Allen <campbell.allen@gmail.com>
Candid Dauth <cdauth@cdauth.eu>
Cao Weiwei <cao.weiwei30@zte.com.cn>
Carl Henrik Lunde <chlunde@ping.uio.no>
Carl Loa Odin <carlodin@gmail.com>
Carl X. Su <bcbcarl@gmail.com>
Carlo Mion <mion00@gmail.com>
Carlos Alexandro Becker <caarlos0@gmail.com>
Carlos de Paula <me@carlosedp.com>
Carlos Sanchez <carlos@apache.org>
Carol Fager-Higgins <carol.fager-higgins@docker.com>
Cary <caryhartline@users.noreply.github.com>
Casey Bisson <casey.bisson@joyent.com>
Catalin Pirvu <pirvu.catalin94@gmail.com>
Ce Gao <ce.gao@outlook.com>
Cedric Davies <cedricda@microsoft.com>
Cezar Sa Espinola <cezarsa@gmail.com>
Chad Swenson <chadswen@gmail.com>
Chance Zibolski <chance.zibolski@gmail.com>
Chander Govindarajan <chandergovind@gmail.com>
Chanhun Jeong <keyolk@gmail.com>
Chao Wang <wangchao.fnst@cn.fujitsu.com>
Charles Chan <charleswhchan@users.noreply.github.com>
Charles Hooper <charles.hooper@dotcloud.com>
Charles Law <claw@conduce.com>
Charles Lindsay <chaz@chazomatic.us>
Charles Merriam <charles.merriam@gmail.com>
Charles Sarrazin <charles@sarraz.in>
Charles Smith <charles.smith@docker.com>
Charlie Drage <charlie@charliedrage.com>
Charlie Lewis <charliel@lab41.org>
Chase Bolt <chase.bolt@gmail.com>
ChaYoung You <yousbe@gmail.com>
Chee Hau Lim <ch33hau@gmail.com>
Chen Chao <cc272309126@gmail.com>
Chen Chuanliang <chen.chuanliang@zte.com.cn>
Chen Hanxiao <chenhanxiao@cn.fujitsu.com>
Chen Min <chenmin46@huawei.com>
Chen Mingjie <chenmingjie0828@163.com>
Chen Qiu <cheney-90@hotmail.com>
Cheng-mean Liu <soccerl@microsoft.com>
Chengfei Shang <cfshang@alauda.io>
Chengguang Xu <cgxu519@gmx.com>
Chenyang Yan <memory.yancy@gmail.com>
chenyuzhu <chenyuzhi@oschina.cn>
Chetan Birajdar <birajdar.chetan@gmail.com>
Chewey <prosto-chewey@users.noreply.github.com>
Chia-liang Kao <clkao@clkao.org>
chli <chli@freewheel.tv>
Cholerae Hu <choleraehyq@gmail.com>
Chris Alfonso <calfonso@redhat.com>
Chris Armstrong <chris@opdemand.com>
Chris Dias <cdias@microsoft.com>
Chris Dituri <csdituri@gmail.com>
Chris Fordham <chris@fordham-nagy.id.au>
Chris Gavin <chris@chrisgavin.me>
Chris Gibson <chris@chrisg.io>
Chris Khoo <chris.khoo@gmail.com>
Chris Kreussling (Flatbush Gardener) <xrisfg@gmail.com>
Chris McKinnel <chris.mckinnel@tangentlabs.co.uk>
Chris McKinnel <chrismckinnel@gmail.com>
Chris Price <cprice@mirantis.com>
Chris Seto <chriskseto@gmail.com>
Chris Snow <chsnow123@gmail.com>
Chris St. Pierre <chris.a.st.pierre@gmail.com>
Chris Stivers <chris@stivers.us>
Chris Swan <chris.swan@iee.org>
Chris Telfer <ctelfer@docker.com>
Chris Wahl <github@wahlnetwork.com>
Chris Weyl <cweyl@alumni.drew.edu>
Chris White <me@cwprogram.com>
Christian Becker <christian.becker@sixt.com>
Christian Berendt <berendt@b1-systems.de>
Christian Brauner <christian.brauner@ubuntu.com>
Christian Böhme <developement@boehme3d.de>
Christian Muehlhaeuser <muesli@gmail.com>
Christian Persson <saser@live.se>
Christian Rotzoll <ch.rotzoll@gmail.com>
Christian Simon <simon@swine.de>
Christian Stefanescu <st.chris@gmail.com>
Christoph Ziebuhr <chris@codefrickler.de>
Christophe Mehay <cmehay@online.net>
Christophe Troestler <christophe.Troestler@umons.ac.be>
Christophe Vidal <kriss@krizalys.com>
Christopher Biscardi <biscarch@sketcht.com>
Christopher Crone <christopher.crone@docker.com>
Christopher Currie <codemonkey+github@gmail.com>
Christopher Jones <tophj@linux.vnet.ibm.com>
Christopher Latham <sudosurootdev@gmail.com>
Christopher Rigor <crigor@gmail.com>
Christy Norman <christy@linux.vnet.ibm.com>
Chun Chen <ramichen@tencent.com>
Ciro S. Costa <ciro.costa@usp.br>
Clayton Coleman <ccoleman@redhat.com>
Clint Armstrong <clint@clintarmstrong.net>
Clinton Kitson <clintonskitson@gmail.com>
clubby789 <jamie@hill-daniel.co.uk>
Cody Roseborough <crrosebo@amazon.com>
Coenraad Loubser <coenraad@wish.org.za>
Colin Dunklau <colin.dunklau@gmail.com>
Colin Hebert <hebert.colin@gmail.com>
Colin Panisset <github@clabber.com>
Colin Rice <colin@daedrum.net>
Colin Walters <walters@verbum.org>
Collin Guarino <collin.guarino@gmail.com>
Colm Hally <colmhally@gmail.com>
companycy <companycy@gmail.com>
Conor Evans <coevans@tcd.ie>
Corbin Coleman <corbin.coleman@docker.com>
Corey Farrell <git@cfware.com>
Cory Forsyth <cory.forsyth@gmail.com>
Cory Snider <csnider@mirantis.com>
cressie176 <github@stephen-cresswell.net>
Cristian Ariza <dev@cristianrz.com>
Cristian Staretu <cristian.staretu@gmail.com>
cristiano balducci <cristiano.balducci@gmail.com>
Cristina Yenyxe Gonzalez Garcia <cristina.yenyxe@gmail.com>
Cruceru Calin-Cristian <crucerucalincristian@gmail.com>
CUI Wei <ghostplant@qq.com>
cuishuang <imcusg@gmail.com>
Cuong Manh Le <cuong.manhle.vn@gmail.com>
Cyprian Gracz <cyprian.gracz@micro-jumbo.eu>
Cyril F <cyrilf7x@gmail.com>
Da McGrady <dabkb@aol.com>
Daan van Berkel <daan.v.berkel.1980@gmail.com>
Daehyeok Mun <daehyeok@gmail.com>
Dafydd Crosby <dtcrsby@gmail.com>
dalanlan <dalanlan925@gmail.com>
Damian Smyth <damian@dsau.co>
Damien Nadé <github@livna.org>
Damien Nozay <damien.nozay@gmail.com>
Damjan Georgievski <gdamjan@gmail.com>
Dan Anolik <dan@anolik.net>
Dan Buch <d.buch@modcloth.com>
Dan Cotora <dan@bluevision.ro>
Dan Feldman <danf@jfrog.com>
Dan Griffin <dgriffin@peer1.com>
Dan Hirsch <thequux@upstandinghackers.com>
Dan Keder <dan.keder@gmail.com>
Dan Levy <dan@danlevy.net>
Dan McPherson <dmcphers@redhat.com>
Dan Plamadeala <cornul11@gmail.com>
Dan Stine <sw@stinemail.com>
Dan Williams <me@deedubs.com>
Dani Hodovic <dani.hodovic@gmail.com>
Dani Louca <dani.louca@docker.com>
Daniel Antlinger <d.antlinger@gmx.at>
Daniel Black <daniel@linux.ibm.com>
Daniel Dao <dqminh@cloudflare.com>
Daniel Exner <dex@dragonslave.de>
Daniel Farrell <dfarrell@redhat.com>
Daniel Garcia <daniel@danielgarcia.info>
Daniel Gasienica <daniel@gasienica.ch>
Daniel Grunwell <mwgrunny@gmail.com>
Daniel Helfand <helfand.4@gmail.com>
Daniel Hiltgen <daniel.hiltgen@docker.com>
Daniel J Walsh <dwalsh@redhat.com>
Daniel Menet <membership@sontags.ch>
Daniel Mizyrycki <daniel.mizyrycki@dotcloud.com>
Daniel Nephin <dnephin@docker.com>
Daniel Norberg <dano@spotify.com>
Daniel Nordberg <dnordberg@gmail.com>
Daniel P. Berrangé <berrange@redhat.com>
Daniel Robinson <gottagetmac@gmail.com>
Daniel S <dan.streby@gmail.com>
Daniel Sweet <danieljsweet@icloud.com>
Daniel Von Fange <daniel@leancoder.com>
Daniel Watkins <daniel@daniel-watkins.co.uk>
Daniel X Moore <yahivin@gmail.com>
Daniel YC Lin <dlin.tw@gmail.com>
Daniel Zhang <jmzwcn@gmail.com>
Daniele Rondina <geaaru@sabayonlinux.org>
Danny Berger <dpb587@gmail.com>
Danny Milosavljevic <dannym@scratchpost.org>
Danny Yates <danny@codeaholics.org>
Danyal Khaliq <danyal.khaliq@tenpearls.com>
Darren Coxall <darren@darrencoxall.com>
Darren Shepherd <darren.s.shepherd@gmail.com>
Darren Stahl <darst@microsoft.com>
Dattatraya Kumbhar <dattatraya.kumbhar@gslab.com>
Davanum Srinivas <davanum@gmail.com>
Dave Barboza <dbarboza@datto.com>
Dave Goodchild <buddhamagnet@gmail.com>
Dave Henderson <dhenderson@gmail.com>
Dave MacDonald <mindlapse@gmail.com>
Dave Tucker <dt@docker.com>
David Anderson <dave@natulte.net>
David Bellotti <dbellotti@pivotal.io>
David Calavera <david.calavera@gmail.com>
David Chung <david.chung@docker.com>
David Corking <dmc-source@dcorking.com>
David Cramer <davcrame@cisco.com>
David Currie <david_currie@uk.ibm.com>
David Davis <daviddavis@redhat.com>
David Dooling <dooling@gmail.com>
David Gageot <david@gageot.net>
David Gebler <davidgebler@gmail.com>
David Glasser <glasser@davidglasser.net>
David Lawrence <david.lawrence@docker.com>
David Lechner <david@lechnology.com>
David M. Karr <davidmichaelkarr@gmail.com>
David Mackey <tdmackey@booleanhaiku.com>
David Manouchehri <manouchehri@riseup.net>
David Mat <david@davidmat.com>
David Mcanulty <github@hellspark.com>
David McKay <david@rawkode.com>
David O'Rourke <david@scalefactory.com>
David P Hilton <david.hilton.p@gmail.com>
David Pelaez <pelaez89@gmail.com>
David R. Jenni <david.r.jenni@gmail.com>
David Röthlisberger <david@rothlis.net>
David Sheets <dsheets@docker.com>
David Sissitka <me@dsissitka.com>
David Trott <github@davidtrott.com>
David Wang <00107082@163.com>
David Williamson <david.williamson@docker.com>
David Xia <dxia@spotify.com>
David Young <yangboh@cn.ibm.com>
Davide Ceretti <davide.ceretti@hogarthww.com>
Dawn Chen <dawnchen@google.com>
dbdd <wangtong2712@gmail.com>
dcylabs <dcylabs@gmail.com>
Debayan De <debayande@users.noreply.github.com>
Deborah Gertrude Digges <deborah.gertrude.digges@gmail.com>
deed02392 <georgehafiz@gmail.com>
Deep Debroy <ddebroy@docker.com>
Deng Guangxing <dengguangxing@huawei.com>
Deni Bertovic <deni@kset.org>
Denis Defreyne <denis@soundcloud.com>
Denis Gladkikh <denis@gladkikh.email>
Denis Ollier <larchunix@users.noreply.github.com>
Dennis Chen <barracks510@gmail.com>
Dennis Chen <dennis.chen@arm.com>
Dennis Docter <dennis@d23.nl>
Derek <crq@kernel.org>
Derek <crquan@gmail.com>
Derek Ch <denc716@gmail.com>
Derek McGowan <derek@mcg.dev>
Deric Crago <deric.crago@gmail.com>
Deshi Xiao <dxiao@redhat.com>
Devon Estes <devon.estes@klarna.com>
Devvyn Murphy <devvyn@devvyn.com>
Dharmit Shah <shahdharmit@gmail.com>
Dhawal Yogesh Bhanushali <dbhanushali@vmware.com>
Dhilip Kumars <dhilip.kumar.s@huawei.com>
Diego Romero <idiegoromero@gmail.com>
Diego Siqueira <dieg0@live.com>
Dieter Reuter <dieter.reuter@me.com>
Dillon Dixon <dillondixon@gmail.com>
Dima Stopel <dima@twistlock.com>
Dimitri John Ledkov <dimitri.j.ledkov@intel.com>
Dimitris Mandalidis <dimitris.mandalidis@gmail.com>
Dimitris Rozakis <dimrozakis@gmail.com>
Dimitry Andric <d.andric@activevideo.com>
Dinesh Subhraveti <dineshs@altiscale.com>
Ding Fei <dingfei@stars.org.cn>
dingwei <dingwei@cmss.chinamobile.com>
Diogo Monica <diogo@docker.com>
DiuDiugirl <sophia.wang@pku.edu.cn>
Djibril Koné <kone.djibril@gmail.com>
Djordje Lukic <djordje.lukic@docker.com>
dkumor <daniel@dkumor.com>
Dmitri Logvinenko <dmitri.logvinenko@gmail.com>
Dmitri Shuralyov <shurcooL@gmail.com>
Dmitry Demeshchuk <demeshchuk@gmail.com>
Dmitry Gusev <dmitry.gusev@gmail.com>
Dmitry Kononenko <d@dm42.ru>
Dmitry Sharshakov <d3dx12.xx@gmail.com>
Dmitry Shyshkin <dmitry@shyshkin.org.ua>
Dmitry Smirnov <onlyjob@member.fsf.org>
Dmitry V. Krivenok <krivenok.dmitry@gmail.com>
Dmitry Vorobev <dimahabr@gmail.com>
Dmytro Iakovliev <dmytro.iakovliev@zodiacsystems.com>
docker-unir[bot] <docker-unir[bot]@users.noreply.github.com>
Dolph Mathews <dolph.mathews@gmail.com>
Dominic Tubach <dominic.tubach@to.com>
Dominic Yin <yindongchao@inspur.com>
Dominik Dingel <dingel@linux.vnet.ibm.com>
Dominik Finkbeiner <finkes93@gmail.com>
Dominik Honnef <dominik@honnef.co>
Don Kirkby <donkirkby@users.noreply.github.com>
Don Kjer <don.kjer@gmail.com>
Don Spaulding <donspauldingii@gmail.com>
Donald Huang <don.hcd@gmail.com>
Dong Chen <dongluo.chen@docker.com>
Donghwa Kim <shanytt@gmail.com>
Donovan Jones <git@gamma.net.nz>
Doron Podoleanu <doronp@il.ibm.com>
Doug Davis <dug@us.ibm.com>
Doug MacEachern <dougm@vmware.com>
Doug Tangren <d.tangren@gmail.com>
Douglas Curtis <dougcurtis1@gmail.com>
Dr Nic Williams <drnicwilliams@gmail.com>
dragon788 <dragon788@users.noreply.github.com>
Dražen Lučanin <kermit666@gmail.com>
Drew Erny <derny@mirantis.com>
Drew Hubl <drew.hubl@gmail.com>
Dustin Sallings <dustin@spy.net>
Ed Costello <epc@epcostello.com>
Edmund Wagner <edmund-wagner@web.de>
Eiichi Tsukata <devel@etsukata.com>
Eike Herzbach <eike@herzbach.net>
Eivin Giske Skaaren <eivinsn@axis.com>
Eivind Uggedal <eivind@uggedal.com>
Elan Ruusamäe <glen@pld-linux.org>
Elango Sivanandam <elango.siva@docker.com>
Elena Morozova <lelenanam@gmail.com>
Eli Uriegas <seemethere101@gmail.com>
Elias Faxö <elias.faxo@tre.se>
Elias Koromilas <elias.koromilas@gmail.com>
Elias Probst <mail@eliasprobst.eu>
Elijah Zupancic <elijah@zupancic.name>
eluck <mail@eluck.me>
Elvir Kuric <elvirkuric@gmail.com>
Emil Davtyan <emil2k@gmail.com>
Emil Hernvall <emil@quench.at>
Emily Maier <emily@emilymaier.net>
Emily Rose <emily@contactvibe.com>
Emir Ozer <emirozer@yandex.com>
Eng Zer Jun <engzerjun@gmail.com>
Enguerran <engcolson@gmail.com>
Eohyung Lee <liquidnuker@gmail.com>
epeterso <epeterson@breakpoint-labs.com>
Eric Barch <barch@tomesoftware.com>
Eric Curtin <ericcurtin17@gmail.com>
Eric G. Noriega <enoriega@vizuri.com>
Eric Hanchrow <ehanchrow@ine.com>
Eric Lee <thenorthsecedes@gmail.com>
Eric Mountain <eric.mountain@datadoghq.com>
Eric Myhre <hash@exultant.us>
Eric Paris <eparis@redhat.com>
Eric Rafaloff <erafaloff@gmail.com>
Eric Rosenberg <ehaydenr@gmail.com>
Eric Sage <eric.david.sage@gmail.com>
Eric Soderstrom <ericsoderstrom@gmail.com>
Eric Yang <windfarer@gmail.com>
Eric-Olivier Lamey <eo@lamey.me>
Erica Windisch <erica@windisch.us>
Erich Cordoba <erich.cm@yandex.com>
Erik Bray <erik.m.bray@gmail.com>
Erik Dubbelboer <erik@dubbelboer.com>
Erik Hollensbe <github@hollensbe.org>
Erik Inge Bolsø <knan@redpill-linpro.com>
Erik Kristensen <erik@erikkristensen.com>
Erik Sipsma <erik@sipsma.dev>
Erik St. Martin <alakriti@gmail.com>
Erik Weathers <erikdw@gmail.com>
Erno Hopearuoho <erno.hopearuoho@gmail.com>
Erwin van der Koogh <info@erronis.nl>
Espen Suenson <mail@espensuenson.dk>
Ethan Bell <ebgamer29@gmail.com>
Ethan Mosbaugh <ethan@replicated.com>
Euan Harris <euan.harris@docker.com>
Euan Kemp <euan.kemp@coreos.com>
Eugen Krizo <eugen.krizo@gmail.com>
Eugene Yakubovich <eugene.yakubovich@coreos.com>
Evan Allrich <evan@unguku.com>
Evan Carmi <carmi@users.noreply.github.com>
Evan Hazlett <ejhazlett@gmail.com>
Evan Krall <krall@yelp.com>
Evan Phoenix <evan@fallingsnow.net>
Evan Wies <evan@neomantra.net>
Evelyn Xu <evelynhsu21@gmail.com>
Everett Toews <everett.toews@rackspace.com>
Evgeniy Makhrov <e.makhrov@corp.badoo.com>
Evgeny Shmarnev <shmarnev@gmail.com>
Evgeny Vereshchagin <evvers@ya.ru>
Ewa Czechowska <ewa@ai-traders.com>
Eystein Måløy Stenberg <eystein.maloy.stenberg@cfengine.com>
ezbercih <cem.ezberci@gmail.com>
Ezra Silvera <ezra@il.ibm.com>
Fabian Kramm <kramm@covexo.com>
Fabian Lauer <kontakt@softwareschmiede-saar.de>
Fabian Raetz <fabian.raetz@gmail.com>
Fabiano Rosas <farosas@br.ibm.com>
Fabio Falci <fabiofalci@gmail.com>
Fabio Kung <fabio.kung@gmail.com>
Fabio Rapposelli <fabio@vmware.com>
Fabio Rehm <fgrehm@gmail.com>
Fabrizio Regini <freegenie@gmail.com>
Fabrizio Soppelsa <fsoppelsa@mirantis.com>
Faiz Khan <faizkhan00@gmail.com>
falmp <chico.lopes@gmail.com>
Fangming Fang <fangming.fang@arm.com>
Fangyuan Gao <21551127@zju.edu.cn>
fanjiyun <fan.jiyun@zte.com.cn>
Fareed Dudhia <fareeddudhia@googlemail.com>
Fathi Boudra <fathi.boudra@linaro.org>
Federico Gimenez <fgimenez@coit.es>
Felipe Oliveira <felipeweb.programador@gmail.com>
Felipe Ruhland <felipe.ruhland@gmail.com>
Felix Abecassis <fabecassis@nvidia.com>
Felix Geisendörfer <felix@debuggable.com>
Felix Hupfeld <felix@quobyte.com>
Felix Rabe <felix@rabe.io>
Felix Ruess <felix.ruess@gmail.com>
Felix Schindler <fschindler@weluse.de>
Feng Yan <fy2462@gmail.com>
Fengtu Wang <wangfengtu@huawei.com>
Ferenc Szabo <pragmaticfrank@gmail.com>
Fernando <fermayo@gmail.com>
Fero Volar <alian@alian.info>
Feroz Salam <feroz.salam@sourcegraph.com>
Ferran Rodenas <frodenas@gmail.com>
Filipe Brandenburger <filbranden@google.com>
Filipe Oliveira <contato@fmoliveira.com.br>
Flavio Castelli <fcastelli@suse.com>
Flavio Crisciani <flavio.crisciani@docker.com>
Florian <FWirtz@users.noreply.github.com>
Florian Klein <florian.klein@free.fr>
Florian Maier <marsmensch@users.noreply.github.com>
Florian Noeding <noeding@adobe.com>
Florian Schmaus <flo@geekplace.eu>
Florian Weingarten <flo@hackvalue.de>
Florin Asavoaie <florin.asavoaie@gmail.com>
Florin Patan <florinpatan@gmail.com>
fonglh <fonglh@gmail.com>
Foysal Iqbal <foysal.iqbal.fb@gmail.com>
Francesc Campoy <campoy@google.com>
Francesco Degrassi <francesco.degrassi@optionfactory.net>
Francesco Mari <mari.francesco@gmail.com>
Francis Chuang <francis.chuang@boostport.com>
Francisco Carriedo <fcarriedo@gmail.com>
Francisco Souza <f@souza.cc>
Frank Groeneveld <frank@ivaldi.nl>
Frank Herrmann <fgh@4gh.tv>
Frank Macreery <frank@macreery.com>
Frank Rosquin <frank.rosquin+github@gmail.com>
Frank Yang <yyb196@gmail.com>
Fred Lifton <fred.lifton@docker.com>
Frederick F. Kautz IV <fkautz@redhat.com>
Frederico F. de Oliveira <FreddieOliveira@users.noreply.github.com>
Frederik Loeffert <frederik@zitrusmedia.de>
Frederik Nordahl Jul Sabroe <frederikns@gmail.com>
Freek Kalter <freek@kalteronline.org>
Frieder Bluemle <frieder.bluemle@gmail.com>
frobnicaty <92033765+frobnicaty@users.noreply.github.com>
Frédéric Dalleau <frederic.dalleau@docker.com>
Fu JinLin <withlin@yeah.net>
Félix Baylac-Jacqué <baylac.felix@gmail.com>
Félix Cantournet <felix.cantournet@cloudwatt.com>
Gabe Rosenhouse <gabe@missionst.com>
Gabor Nagy <mail@aigeruth.hu>
Gabriel Goller <gabrielgoller123@gmail.com>
Gabriel L. Somlo <gsomlo@gmail.com>
Gabriel Linder <linder.gabriel@gmail.com>
Gabriel Monroy <gabriel@opdemand.com>
Gabriel Nicolas Avellaneda <avellaneda.gabriel@gmail.com>
Gaetan de Villele <gdevillele@gmail.com>
Galen Sampson <galen.sampson@gmail.com>
Gang Qiao <qiaohai8866@gmail.com>
Gareth Rushgrove <gareth@morethanseven.net>
Garrett Barboza <garrett@garrettbarboza.com>
Gary Schaetz <gary@schaetzkc.com>
Gaurav <gaurav.gosec@gmail.com>
Gaurav Singh <gaurav1086@gmail.com>
Gaël PORTAY <gael.portay@savoirfairelinux.com>
Genki Takiuchi <genki@s21g.com>
GennadySpb <lipenkov@gmail.com>
Geoff Levand <geoff@infradead.org>
Geoffrey Bachelet <grosfrais@gmail.com>
Geon Kim <geon0250@gmail.com>
George Kontridze <george@bugsnag.com>
George MacRorie <gmacr31@gmail.com>
George Xie <georgexsh@gmail.com>
Georgi Hristozov <georgi@forkbomb.nl>
Georgy Yakovlev <gyakovlev@gentoo.org>
Gereon Frey <gereon.frey@dynport.de>
German DZ <germ@ndz.com.ar>
Gert van Valkenhoef <g.h.m.van.valkenhoef@rug.nl>
Gerwim Feiken <g.feiken@tfe.nl>
Ghislain Bourgeois <ghislain.bourgeois@gmail.com>
Giampaolo Mancini <giampaolo@trampolineup.com>
Gianluca Borello <g.borello@gmail.com>
Gildas Cuisinier <gildas.cuisinier@gcuisinier.net>
Giovan Isa Musthofa <giovanism@outlook.co.id>
gissehel <public-devgit-dantus@gissehel.org>
Giuseppe Mazzotta <gdm85@users.noreply.github.com>
Giuseppe Scrivano <gscrivan@redhat.com>
Gleb Fotengauer-Malinovskiy <glebfm@altlinux.org>
Gleb M Borisov <borisov.gleb@gmail.com>
Glyn Normington <gnormington@gopivotal.com>
GoBella <caili_welcome@163.com>
Goffert van Gool <goffert@phusion.nl>
Goldwyn Rodrigues <rgoldwyn@suse.com>
Gopikannan Venugopalsamy <gopikannan.venugopalsamy@gmail.com>
Gosuke Miyashita <gosukenator@gmail.com>
Gou Rao <gou@portworx.com>
Govinda Fichtner <govinda.fichtner@googlemail.com>
Grant Millar <rid@cylo.io>
Grant Reaber <grant.reaber@gmail.com>
Graydon Hoare <graydon@pobox.com>
Greg Fausak <greg@tacodata.com>
Greg Pflaum <gpflaum@users.noreply.github.com>
Greg Stephens <greg@udon.org>
Greg Thornton <xdissent@me.com>
Grzegorz Jaśkiewicz <gj.jaskiewicz@gmail.com>
Guilhem Lettron <guilhem+github@lettron.fr>
Guilherme Salgado <gsalgado@gmail.com>
Guillaume Dufour <gdufour.prestataire@voyages-sncf.com>
Guillaume J. Charmes <guillaume.charmes@docker.com>
Gunadhya S. <6939749+gunadhya@users.noreply.github.com>
Guoqiang QI <guoqiang.qi1@gmail.com>
guoxiuyan <guoxiuyan@huawei.com>
Guri <odg0318@gmail.com>
Gurjeet Singh <gurjeet@singh.im>
Guruprasad <lgp171188@gmail.com>
Gustav Sinder <gustav.sinder@gmail.com>
gwx296173 <gaojing3@huawei.com>
Günter Zöchbauer <guenter@gzoechbauer.com>
Haichao Yang <yang.haichao@zte.com.cn>
haikuoliu <haikuo@amazon.com>
haining.cao <haining.cao@daocloud.io>
Hakan Özler <hakan.ozler@kodcu.com>
Hamish Hutchings <moredhel@aoeu.me>
Hannes Ljungberg <hannes@5monkeys.se>
Hans Kristian Flaatten <hans@starefossen.com>
Hans Rødtang <hansrodtang@gmail.com>
Hao Shu Wei <haoshuwei24@gmail.com>
Hao Zhang <21521210@zju.edu.cn>
Harald Albers <github@albersweb.de>
Harald Niesche <harald@niesche.de>
Harley Laue <losinggeneration@gmail.com>
Harold Cooper <hrldcpr@gmail.com>
Harrison Turton <harrisonturton@gmail.com>
Harry Zhang <harryz@hyper.sh>
Harshal Patil <harshal.patil@in.ibm.com>
Harshal Patil <harshalp@linux.vnet.ibm.com>
He Simei <hesimei@zju.edu.cn>
He Xiaoxi <tossmilestone@gmail.com>
He Xin <he_xinworld@126.com>
heartlock <21521209@zju.edu.cn>
Hector Castro <hectcastro@gmail.com>
Helen Xie <chenjg@harmonycloud.cn>
Henning Sprang <henning.sprang@gmail.com>
Hiroshi Hatake <hatake@clear-code.com>
Hiroyuki Sasagawa <hs19870702@gmail.com>
Hobofan <goisser94@gmail.com>
Hollie Teal <hollie@docker.com>
Hong Xu <hong@topbug.net>
Hongbin Lu <hongbin034@gmail.com>
Hongxu Jia <hongxu.jia@windriver.com>
Honza Pokorny <me@honza.ca>
Hsing-Hui Hsu <hsinghui@amazon.com>
hsinko <21551195@zju.edu.cn>
Hu Keping <hukeping@huawei.com>
Hu Tao <hutao@cn.fujitsu.com>
HuanHuan Ye <logindaveye@gmail.com>
Huanzhong Zhang <zhanghuanzhong90@gmail.com>
Huayi Zhang <irachex@gmail.com>
Hugo Barrera <hugo@barrera.io>
Hugo Duncan <hugo@hugoduncan.org>
Hugo Marisco <0x6875676f@gmail.com>
Hui Kang <hkang.sunysb@gmail.com>
Hunter Blanks <hunter@twilio.com>
huqun <huqun@zju.edu.cn>
Huu Nguyen <huu@prismskylabs.com>
Hyeongkyu Lee <hyeongkyu.lee@navercorp.com>
Hyzhou Zhy <hyzhou.zhy@alibaba-inc.com>
Iago López Galeiras <iago@kinvolk.io>
Ian Bishop <ianbishop@pace7.com>
Ian Bull <irbull@gmail.com>
Ian Calvert <ianjcalvert@gmail.com>
Ian Campbell <ian.campbell@docker.com>
Ian Chen <ianre657@gmail.com>
Ian Lee <IanLee1521@gmail.com>
Ian Main <imain@redhat.com>
Ian Philpot <ian.philpot@microsoft.com>
Ian Truslove <ian.truslove@gmail.com>
Iavael <iavaelooeyt@gmail.com>
Icaro Seara <icaro.seara@gmail.com>
Ignacio Capurro <icapurrofagian@gmail.com>
Igor Dolzhikov <bluesriverz@gmail.com>
Igor Karpovich <i.karpovich@currencysolutions.com>
Iliana Weller <iweller@amazon.com>
Ilkka Laukkanen <ilkka@ilkka.io>
Illo Abdulrahim <abdulrahim.illo@nokia.com>
Ilya Dmitrichenko <errordeveloper@gmail.com>
Ilya Gusev <mail@igusev.ru>
Ilya Khlopotov <ilya.khlopotov@gmail.com>
imre Fitos <imre.fitos+github@gmail.com>
inglesp <peter.inglesby@gmail.com>
Ingo Gottwald <in.gottwald@gmail.com>
Innovimax <innovimax@gmail.com>
Isaac Dupree <antispam@idupree.com>
Isabel Jimenez <contact.isabeljimenez@gmail.com>
Isaiah Grace <irgkenya4@gmail.com>
Isao Jonas <isao.jonas@gmail.com>
Iskander Sharipov <quasilyte@gmail.com>
Ivan Babrou <ibobrik@gmail.com>
Ivan Fraixedes <ifcdev@gmail.com>
Ivan Grcic <igrcic@gmail.com>
Ivan Markin <sw@nogoegst.net>
J Bruni <joaohbruni@yahoo.com.br>
J. Nunn <jbnunn@gmail.com>
Jack Danger Canty <jackdanger@squareup.com>
Jack Laxson <jackjrabbit@gmail.com>
Jacob Atzen <jacob@jacobatzen.dk>
Jacob Edelman <edelman.jd@gmail.com>
Jacob Tomlinson <jacob@tom.linson.uk>
Jacob Vallejo <jakeev@amazon.com>
Jacob Wen <jian.w.wen@oracle.com>
Jaime Cepeda <jcepedavillamayor@gmail.com>
Jaivish Kothari <janonymous.codevulture@gmail.com>
Jake Champlin <jake.champlin.27@gmail.com>
Jake Moshenko <jake@devtable.com>
Jake Sanders <jsand@google.com>
Jakub Drahos <jdrahos@pulsepoint.com>
Jakub Guzik <jakubmguzik@gmail.com>
James Allen <jamesallen0108@gmail.com>
James Carey <jecarey@us.ibm.com>
James Carr <james.r.carr@gmail.com>
James DeFelice <james.defelice@ishisystems.com>
James Harrison Fisher <jameshfisher@gmail.com>
James Kyburz <james.kyburz@gmail.com>
James Kyle <james@jameskyle.org>
James Lal <james@lightsofapollo.com>
James Mills <prologic@shortcircuit.net.au>
James Nesbitt <jnesbitt@mirantis.com>
James Nugent <james@jen20.com>
James Sanders <james3sanders@gmail.com>
James Turnbull <james@lovedthanlost.net>
James Watkins-Harvey <jwatkins@progi-media.com>
Jamie Hannaford <jamie@limetree.org>
Jamshid Afshar <jafshar@yahoo.com>
Jan Breig <git@pygos.space>
Jan Chren <dev.rindeal@gmail.com>
Jan Götte <jaseg@jaseg.net>
Jan Keromnes <janx@linux.com>
Jan Koprowski <jan.koprowski@gmail.com>
Jan Pazdziora <jpazdziora@redhat.com>
Jan Toebes <jan@toebes.info>
Jan-Gerd Tenberge <janten@gmail.com>
Jan-Jaap Driessen <janjaapdriessen@gmail.com>
Jana Radhakrishnan <mrjana@docker.com>
Jannick Fahlbusch <git@jf-projects.de>
Januar Wayong <januar@gmail.com>
Jared Biel <jared.biel@bolderthinking.com>
Jared Hocutt <jaredh@netapp.com>
Jaroslaw Zabiello <hipertracker@gmail.com>
Jasmine Hegman <jasmine@jhegman.com>
Jason A. Donenfeld <Jason@zx2c4.com>
Jason Divock <jdivock@gmail.com>
Jason Giedymin <jasong@apache.org>
Jason Green <Jason.Green@AverInformatics.Com>
Jason Hall <imjasonh@gmail.com>
Jason Heiss <jheiss@aput.net>
Jason Livesay <ithkuil@gmail.com>
Jason McVetta <jason.mcvetta@gmail.com>
Jason Plum <jplum@devonit.com>
Jason Shepherd <jason@jasonshepherd.net>
Jason Smith <jasonrichardsmith@gmail.com>
Jason Sommer <jsdirv@gmail.com>
Jason Stangroome <jason@codeassassin.com>
Javier Bassi <javierbassi@gmail.com>
jaxgeller <jacksongeller@gmail.com>
Jay <teguhwpurwanto@gmail.com>
Jay Kamat <github@jgkamat.33mail.com>
Jay Lim <jay@imjching.com>
Jean Rouge <rougej+github@gmail.com>
Jean-Baptiste Barth <jeanbaptiste.barth@gmail.com>
Jean-Baptiste Dalido <jeanbaptiste@appgratis.com>
Jean-Christophe Berthon <huygens@berthon.eu>
Jean-Paul Calderone <exarkun@twistedmatrix.com>
Jean-Pierre Huynh <jean-pierre.huynh@ounet.fr>
Jean-Tiare Le Bigot <jt@yadutaf.fr>
Jeeva S. Chelladhurai <sjeeva@gmail.com>
Jeff Anderson <jeff@docker.com>
Jeff Hajewski <jeff.hajewski@gmail.com>
Jeff Johnston <jeff.johnston.mn@gmail.com>
Jeff Lindsay <progrium@gmail.com>
Jeff Mickey <j@codemac.net>
Jeff Minard <jeff@creditkarma.com>
Jeff Nickoloff <jeff.nickoloff@gmail.com>
Jeff Silberman <jsilberm@gmail.com>
Jeff Welch <whatthejeff@gmail.com>
Jeff Zvier <zvier20@gmail.com>
Jeffrey Bolle <jeffreybolle@gmail.com>
Jeffrey Morgan <jmorganca@gmail.com>
Jeffrey van Gogh <jvg@google.com>
Jenny Gebske <jennifer@gebske.de>
Jeremy Chambers <jeremy@thehipbot.com>
Jeremy Grosser <jeremy@synack.me>
Jeremy Huntwork <jhuntwork@lightcubesolutions.com>
Jeremy Price <jprice.rhit@gmail.com>
Jeremy Qian <vanpire110@163.com>
Jeremy Unruh <jeremybunruh@gmail.com>
Jeremy Yallop <yallop@docker.com>
Jeroen Franse <jeroenfranse@gmail.com>
Jeroen Jacobs <github@jeroenj.be>
Jesse Dearing <jesse.dearing@gmail.com>
Jesse Dubay <jesse@thefortytwo.net>
Jessica Frazelle <jess@oxide.computer>
Jezeniel Zapanta <jpzapanta22@gmail.com>
Jhon Honce <jhonce@redhat.com>
Ji.Zhilong <zhilongji@gmail.com>
Jian Liao <jliao@alauda.io>
Jian Zhang <zhangjian.fnst@cn.fujitsu.com>
Jiang Jinyang <jjyruby@gmail.com>
Jianyong Wu <jianyong.wu@arm.com>
Jie Luo <luo612@zju.edu.cn>
Jie Ma <jienius@outlook.com>
Jihyun Hwang <jhhwang@telcoware.com>
Jilles Oldenbeuving <ojilles@gmail.com>
Jim Alateras <jima@comware.com.au>
Jim Carroll <jim.carroll@docker.com>
Jim Ehrismann <jim.ehrismann@docker.com>
Jim Galasyn <jim.galasyn@docker.com>
Jim Lin <b04705003@ntu.edu.tw>
Jim Minter <jminter@redhat.com>
Jim Perrin <jperrin@centos.org>
Jimmy Cuadra <jimmy@jimmycuadra.com>
Jimmy Puckett <jimmy.puckett@spinen.com>
Jimmy Song <rootsongjc@gmail.com>
Jinsoo Park <cellpjs@gmail.com>
Jintao Zhang <zhangjintao9020@gmail.com>
Jiri Appl <jiria@microsoft.com>
Jiri Popelka <jpopelka@redhat.com>
Jiuyue Ma <majiuyue@huawei.com>
Jiří Župka <jzupka@redhat.com>
Joakim Roubert <joakim.roubert@axis.com>
Joao Fernandes <joao.fernandes@docker.com>
Joao Trindade <trindade.joao@gmail.com>
Joe Beda <joe.github@bedafamily.com>
Joe Doliner <jdoliner@pachyderm.io>
Joe Ferguson <joe@infosiftr.com>
Joe Gordon <joe.gordon0@gmail.com>
Joe Shaw <joe@joeshaw.org>
Joe Van Dyk <joe@tanga.com>
Joel Friedly <joelfriedly@gmail.com>
Joel Handwell <joelhandwell@gmail.com>
Joel Hansson <joel.hansson@ecraft.com>
Joel Wurtz <jwurtz@jolicode.com>
Joey Geiger <jgeiger@gmail.com>
Joey Geiger <jgeiger@users.noreply.github.com>
Joey Gibson <joey@joeygibson.com>
Joffrey F <joffrey@docker.com>
Johan Euphrosine <proppy@google.com>
Johan Rydberg <johan.rydberg@gmail.com>
Johanan Lieberman <johanan.lieberman@gmail.com>
Johannes 'fish' Ziemke <github@freigeist.org>
John Costa <john.costa@gmail.com>
John Feminella <jxf@jxf.me>
John Gardiner Myers <jgmyers@proofpoint.com>
John Gossman <johngos@microsoft.com>
John Harris <john@johnharris.io>
John Howard <github@lowenna.com>
John Laswell <john.n.laswell@gmail.com>
John Maguire <jmaguire@duosecurity.com>
John Mulhausen <john@docker.com>
John OBrien III <jobrieniii@yahoo.com>
John Starks <jostarks@microsoft.com>
John Stephens <johnstep@docker.com>
John Tims <john.k.tims@gmail.com>
John V. Martinez <jvmatl@gmail.com>
John Warwick <jwarwick@gmail.com>
John Willis <john.willis@docker.com>
Jon Johnson <jonjohnson@google.com>
Jon Surrell <jon.surrell@gmail.com>
Jon Wedaman <jweede@gmail.com>
Jonas Dohse <jonas@dohse.ch>
Jonas Heinrich <Jonas@JonasHeinrich.com>
Jonas Pfenniger <jonas@pfenniger.name>
Jonathan A. Schweder <jonathanschweder@gmail.com>
Jonathan A. Sternberg <jonathansternberg@gmail.com>
Jonathan Boulle <jonathanboulle@gmail.com>
Jonathan Camp <jonathan@irondojo.com>
Jonathan Choy <jonathan.j.choy@gmail.com>
Jonathan Dowland <jon+github@alcopop.org>
Jonathan Lebon <jlebon@redhat.com>
Jonathan Lomas <jonathan@floatinglomas.ca>
Jonathan McCrohan <jmccrohan@gmail.com>
Jonathan Mueller <j.mueller@apoveda.ch>
Jonathan Pares <jonathanpa@users.noreply.github.com>
Jonathan Rudenberg <jonathan@titanous.com>
Jonathan Stoppani <jonathan.stoppani@divio.com>
Jonh Wendell <jonh.wendell@redhat.com>
Joni Sar <yoni@cocycles.com>
Joost Cassee <joost@cassee.net>
Jordan Arentsen <blissdev@gmail.com>
Jordan Jennings <jjn2009@gmail.com>
Jordan Sissel <jls@semicomplete.com>
Jordi Massaguer Pla <jmassaguerpla@suse.de>
Jorge Marin <chipironcin@users.noreply.github.com>
Jorit Kleine-Möllhoff <joppich@bricknet.de>
Jose Diaz-Gonzalez <email@josediazgonzalez.com>
Joseph Anthony Pasquale Holsten <joseph@josephholsten.com>
Joseph Hager <ajhager@gmail.com>
Joseph Kern <jkern@semafour.net>
Joseph Rothrock <rothrock@rothrock.org>
Josh <jokajak@gmail.com>
Josh Bodah <jb3689@yahoo.com>
Josh Bonczkowski <josh.bonczkowski@gmail.com>
Josh Chorlton <jchorlton@gmail.com>
Josh Eveleth <joshe@opendns.com>
Josh Hawn <josh.hawn@docker.com>
Josh Horwitz <horwitz@addthis.com>
Josh Poimboeuf <jpoimboe@redhat.com>
Josh Soref <jsoref@gmail.com>
Josh Wilson <josh.wilson@fivestars.com>
Josiah Kiehl <jkiehl@riotgames.com>
José Tomás Albornoz <jojo@eljojo.net>
Joyce Jang <mail@joycejang.com>
JP <jpellerin@leapfrogonline.com>
Julian Taylor <jtaylor.debian@googlemail.com>
Julien Barbier <write0@gmail.com>
Julien Bisconti <veggiemonk@users.noreply.github.com>
Julien Bordellier <julienbordellier@gmail.com>
Julien Dubois <julien.dubois@gmail.com>
Julien Kassar <github@kassisol.com>
Julien Maitrehenry <julien.maitrehenry@me.com>
Julien Pervillé <julien.perville@perfect-memory.com>
Julien Pivotto <roidelapluie@inuits.eu>
Julio Guerra <julio@sqreen.com>
Julio Montes <imc.coder@gmail.com>
Jun Du <dujun5@huawei.com>
Jun-Ru Chang <jrjang@gmail.com>
junxu <xujun@cmss.chinamobile.com>
Jussi Nummelin <jussi.nummelin@gmail.com>
Justas Brazauskas <brazauskasjustas@gmail.com>
Justen Martin <jmart@the-coder.com>
Justin Cormack <justin.cormack@docker.com>
Justin Force <justin.force@gmail.com>
Justin Keller <85903732+jk-vb@users.noreply.github.com>
Justin Menga <justin.menga@gmail.com>
Justin Plock <jplock@users.noreply.github.com>
Justin Simonelis <justin.p.simonelis@gmail.com>
Justin Terry <juterry@microsoft.com>
Justyn Temme <justyntemme@gmail.com>
Jyrki Puttonen <jyrkiput@gmail.com>
Jérémy Leherpeur <amenophis@leherpeur.net>
Jérôme Petazzoni <jerome.petazzoni@docker.com>
Jörg Thalheim <joerg@higgsboson.tk>
K. Heller <pestophagous@gmail.com>
Kai Blin <kai@samba.org>
Kai Qiang Wu (Kennan) <wkq5325@gmail.com>
Kaijie Chen <chen@kaijie.org>
Kamil Domański <kamil@domanski.co>
Kamjar Gerami <kami.gerami@gmail.com>
Kanstantsin Shautsou <kanstantsin.sha@gmail.com>
Kara Alexandra <kalexandra@us.ibm.com>
Karan Lyons <karan@karanlyons.com>
Kareem Khazem <karkhaz@karkhaz.com>
kargakis <kargakis@users.noreply.github.com>
Karl Grzeszczak <karlgrz@gmail.com>
Karol Duleba <mr.fuxi@gmail.com>
Karthik Karanth <karanth.karthik@gmail.com>
Karthik Nayak <karthik.188@gmail.com>
Kasper Fabæch Brandt <poizan@poizan.dk>
Kate Heddleston <kate.heddleston@gmail.com>
Katie McLaughlin <katie@glasnt.com>
Kato Kazuyoshi <kato.kazuyoshi@gmail.com>
Katrina Owen <katrina.owen@gmail.com>
Kawsar Saiyeed <kawsar.saiyeed@projiris.com>
Kay Yan <kay.yan@daocloud.io>
kayrus <kay.diam@gmail.com>
Kazuhiro Sera <seratch@gmail.com>
Kazuyoshi Kato <katokazu@amazon.com>
Ke Li <kel@splunk.com>
Ke Xu <leonhartx.k@gmail.com>
Kei Ohmura <ohmura.kei@gmail.com>
Keith Hudgins <greenman@greenman.org>
Keli Hu <dev@keli.hu>
Ken Cochrane <kencochrane@gmail.com>
Ken Herner <kherner@progress.com>
Ken ICHIKAWA <ichikawa.ken@jp.fujitsu.com>
Ken Reese <krrgithub@gmail.com>
Kenfe-Mickaël Laventure <mickael.laventure@gmail.com>
Kenjiro Nakayama <nakayamakenjiro@gmail.com>
Kent Johnson <kentoj@gmail.com>
Kenta Tada <Kenta.Tada@sony.com>
Kevin "qwazerty" Houdebert <kevin.houdebert@gmail.com>
Kevin Alvarez <crazy-max@users.noreply.github.com>
Kevin Burke <kev@inburke.com>
Kevin Clark <kevin.clark@gmail.com>
Kevin Feyrer <kevin.feyrer@btinternet.com>
Kevin J. Lynagh <kevin@keminglabs.com>
Kevin Jing Qiu <kevin@idempotent.ca>
Kevin Kern <kaiwentan@harmonycloud.cn>
Kevin Menard <kevin@nirvdrum.com>
Kevin Meredith <kevin.m.meredith@gmail.com>
Kevin P. Kucharczyk <kevinkucharczyk@gmail.com>
Kevin Parsons <kevpar@microsoft.com>
Kevin Richardson <kevin@kevinrichardson.co>
Kevin Shi <kshi@andrew.cmu.edu>
Kevin Wallace <kevin@pentabarf.net>
Kevin Yap <me@kevinyap.ca>
Keyvan Fatehi <keyvanfatehi@gmail.com>
kies <lleelm@gmail.com>
Kim BKC Carlbacker <kim.carlbacker@gmail.com>
Kim Eik <kim@heldig.org>
Kimbro Staken <kstaken@kstaken.com>
Kir Kolyshkin <kolyshkin@gmail.com>
Kiran Gangadharan <kiran.daredevil@gmail.com>
Kirill SIbirev <l0kix2@gmail.com>
knappe <tyler.knappe@gmail.com>
Kohei Tsuruta <coheyxyz@gmail.com>
Koichi Shiraishi <k@zchee.io>
Konrad Kleine <konrad.wilhelm.kleine@gmail.com>
Konrad Ponichtera <konpon96@gmail.com>
Konstantin Gribov <grossws@gmail.com>
Konstantin L <sw.double@gmail.com>
Konstantin Pelykh <kpelykh@zettaset.com>
Kostadin Plachkov <k.n.plachkov@gmail.com>
Krasi Georgiev <krasi@vip-consult.solutions>
Krasimir Georgiev <support@vip-consult.co.uk>
Kris-Mikael Krister <krismikael@protonmail.com>
Kristian Haugene <kristian.haugene@capgemini.com>
Kristina Zabunova <triara.xiii@gmail.com>
Krystian Wojcicki <kwojcicki@sympatico.ca>
Kunal Kushwaha <kushwaha_kunal_v7@lab.ntt.co.jp>
Kunal Tyagi <tyagi.kunal@live.com>
Kyle Conroy <kyle.j.conroy@gmail.com>
Kyle Linden <linden.kyle@gmail.com>
Kyle Squizzato <ksquizz@gmail.com>
Kyle Wuolle <kyle.wuolle@gmail.com>
kyu <leehk1227@gmail.com>
Lachlan Coote <lcoote@vmware.com>
Lai Jiangshan <jiangshanlai@gmail.com>
Lajos Papp <lajos.papp@sequenceiq.com>
Lakshan Perera <lakshan@laktek.com>
Lalatendu Mohanty <lmohanty@redhat.com>
Lance Chen <cyen0312@gmail.com>
Lance Kinley <lkinley@loyaltymethods.com>
Lars Butler <Lars.Butler@gmail.com>
Lars Kellogg-Stedman <lars@redhat.com>
Lars R. Damerow <lars@pixar.com>
Lars-Magnus Skog <ralphtheninja@riseup.net>
Laszlo Meszaros <lacienator@gmail.com>
Laura Frank <ljfrank@gmail.com>
Laurent Bernaille <laurent.bernaille@datadoghq.com>
Laurent Erignoux <lerignoux@gmail.com>
Laurie Voss <github@seldo.com>
Leandro Siqueira <leandro.siqueira@gmail.com>
Lee Calcote <leecalcote@gmail.com>
Lee Chao <932819864@qq.com>
Lee, Meng-Han <sunrisedm4@gmail.com>
Lei Gong <lgong@alauda.io>
Lei Jitang <leijitang@huawei.com>
Leiiwang <u2takey@gmail.com>
Len Weincier <len@cloudafrica.net>
Lennie <github@consolejunkie.net>
Leo Gallucci <elgalu3@gmail.com>
Leonardo Nodari <me@leonardonodari.it>
Leonardo Taccari <leot@NetBSD.org>
Leszek Kowalski <github@leszekkowalski.pl>
Levi Blackstone <levi.blackstone@rackspace.com>
Levi Gross <levi@levigross.com>
Levi Harrison <levisamuelharrison@gmail.com>
Lewis Daly <lewisdaly@me.com>
Lewis Marshall <lewis@lmars.net>
Lewis Peckover <lew+github@lew.io>
Li Yi <denverdino@gmail.com>
Liam Macgillavry <liam@kumina.nl>
Liana Lo <liana.lixia@gmail.com>
Liang Mingqiang <mqliang.zju@gmail.com>
Liang-Chi Hsieh <viirya@gmail.com>
liangwei <liangwei14@huawei.com>
Liao Qingwei <liaoqingwei@huawei.com>
Lifubang <lifubang@acmcoder.com>
Lihua Tang <lhtang@alauda.io>
Lily Guo <lily.guo@docker.com>
limeidan <limeidan@loongson.cn>
Lin Lu <doraalin@163.com>
LingFaKe <lingfake@huawei.com>
Linus Heckemann <lheckemann@twig-world.com>
Liran Tal <liran.tal@gmail.com>
Liron Levin <liron@twistlock.com>
Liu Bo <bo.li.liu@oracle.com>
Liu Hua <sdu.liu@huawei.com>
liwenqi <vikilwq@zju.edu.cn>
lixiaobing10051267 <li.xiaobing1@zte.com.cn>
Liz Zhang <lizzha@microsoft.com>
LIZAO LI <lzlarryli@gmail.com>
Lizzie Dixon <_@lizzie.io>
Lloyd Dewolf <foolswisdom@gmail.com>
Lokesh Mandvekar <lsm5@fedoraproject.org>
longliqiang88 <394564827@qq.com>
Lorenz Leutgeb <lorenz.leutgeb@gmail.com>
Lorenzo Fontana <fontanalorenz@gmail.com>
Lotus Fenn <fenn.lotus@gmail.com>
Louis Delossantos <ldelossa.ld@gmail.com>
Louis Opter <kalessin@kalessin.fr>
Luca Favatella <luca.favatella@erlang-solutions.com>
Luca Marturana <lucamarturana@gmail.com>
Luca Orlandi <luca.orlandi@gmail.com>
Luca-Bogdan Grigorescu <Luca-Bogdan Grigorescu>
Lucas Chan <lucas-github@lucaschan.com>
Lucas Chi <lucas@teacherspayteachers.com>
Lucas Molas <lmolas@fundacionsadosky.org.ar>
Lucas Silvestre <lukas.silvestre@gmail.com>
Luciano Mores <leslau@gmail.com>
Luis Henrique Mulinari <luis.mulinari@gmail.com>
Luis Martínez de Bartolomé Izquierdo <lmartinez@biicode.com>
Luiz Svoboda <luizek@gmail.com>
Lukas Heeren <lukas-heeren@hotmail.com>
Lukas Waslowski <cr7pt0gr4ph7@gmail.com>
lukaspustina <lukas.pustina@centerdevice.com>
Lukasz Zajaczkowski <Lukasz.Zajaczkowski@ts.fujitsu.com>
Luke Marsden <me@lukemarsden.net>
Lyn <energylyn@zju.edu.cn>
Lynda O'Leary <lyndaoleary29@gmail.com>
Lénaïc Huard <lhuard@amadeus.com>
Ma Müller <mueller-ma@users.noreply.github.com>
Ma Shimiao <mashimiao.fnst@cn.fujitsu.com>
Mabin <bin.ma@huawei.com>
Madhan Raj Mookkandy <MadhanRaj.Mookkandy@microsoft.com>
Madhav Puri <madhav.puri@gmail.com>
Madhu Venugopal <mavenugo@gmail.com>
Mageee <fangpuyi@foxmail.com>
Mahesh Tiyyagura <tmahesh@gmail.com>
malnick <malnick@gmail..com>
Malte Janduda <mail@janduda.net>
Manfred Touron <m@42.am>
Manfred Zabarauskas <manfredas@zabarauskas.com>
Manjunath A Kumatagi <mkumatag@in.ibm.com>
Mansi Nahar <mmn4185@rit.edu>
Manuel Meurer <manuel@krautcomputing.com>
Manuel Rüger <manuel@rueg.eu>
Manuel Woelker <github@manuel.woelker.org>
mapk0y <mapk0y@gmail.com>
Marc Abramowitz <marc@marc-abramowitz.com>
Marc Kuo <kuomarc2@gmail.com>
Marc Tamsky <mtamsky@gmail.com>
Marcel Edmund Franke <marcel.edmund.franke@gmail.com>
Marcelo Horacio Fortino <info@fortinux.com>
Marcelo Salazar <chelosalazar@gmail.com>
Marco Hennings <marco.hennings@freiheit.com>
Marcus Cobden <mcobden@cisco.com>
Marcus Farkas <toothlessgear@finitebox.com>
Marcus Linke <marcus.linke@gmx.de>
Marcus Martins <marcus@docker.com>
Marcus Ramberg <marcus@nordaaker.com>
Marek Goldmann <marek.goldmann@gmail.com>
Marian Marinov <mm@yuhu.biz>
Marianna Tessel <mtesselh@gmail.com>
Mario Loriedo <mario.loriedo@gmail.com>
Marius Gundersen <me@mariusgundersen.net>
Marius Sturm <marius@graylog.com>
Marius Voila <marius.voila@gmail.com>
Mark Allen <mrallen1@yahoo.com>
Mark Feit <mfeit@internet2.edu>
Mark Jeromin <mark.jeromin@sysfrog.net>
Mark McGranaghan <mmcgrana@gmail.com>
Mark McKinstry <mmckinst@umich.edu>
Mark Milstein <mark@epiloque.com>
Mark Oates <fl0yd@me.com>
Mark Parker <godefroi@users.noreply.github.com>
Mark Vainomaa <mikroskeem@mikroskeem.eu>
Mark West <markewest@gmail.com>
Markan Patel <mpatel678@gmail.com>
Marko Mikulicic <mmikulicic@gmail.com>
Marko Tibold <marko@tibold.nl>
Markus Fix <lispmeister@gmail.com>
Markus Kortlang <hyp3rdino@googlemail.com>
Martijn Dwars <ikben@martijndwars.nl>
Martijn van Oosterhout <kleptog@svana.org>
Martin Braun <braun@neuroforge.de>
Martin Dojcak <martin.dojcak@lablabs.io>
Martin Honermeyer <maze@strahlungsfrei.de>
Martin Kelly <martin@surround.io>
Martin Mosegaard Amdisen <martin.amdisen@praqma.com>
Martin Muzatko <martin@happy-css.com>
Martin Redmond <redmond.martin@gmail.com>
Maru Newby <mnewby@thesprawl.net>
Mary Anthony <mary.anthony@docker.com>
Masahito Zembutsu <zembutsu@users.noreply.github.com>
Masato Ohba <over.rye@gmail.com>
Masayuki Morita <minamijoyo@gmail.com>
Mason Malone <mason.malone@gmail.com>
Mateusz Sulima <sulima.mateusz@gmail.com>
Mathias Monnerville <mathias@monnerville.com>
Mathieu Champlon <mathieu.champlon@docker.com>
Mathieu Le Marec - Pasquet <kiorky@cryptelium.net>
Mathieu Parent <math.parent@gmail.com>
Mathieu Paturel <mathieu.paturel@gmail.com>
Matt Apperson <me@mattapperson.com>
Matt Bachmann <bachmann.matt@gmail.com>
Matt Bajor <matt@notevenremotelydorky.com>
Matt Bentley <matt.bentley@docker.com>
Matt Haggard <haggardii@gmail.com>
Matt Hoyle <matt@deployable.co>
Matt McCormick <matt.mccormick@kitware.com>
Matt Moore <mattmoor@google.com>
Matt Morrison <3maven@gmail.com>
Matt Richardson <matt@redgumtech.com.au>
Matt Rickard <mrick@google.com>
Matt Robenolt <matt@ydekproductions.com>
Matt Schurenko <matt.schurenko@gmail.com>
Matt Williams <mattyw@me.com>
Matthew Heon <mheon@redhat.com>
Matthew Lapworth <matthewl@bit-shift.net>
Matthew Mayer <matthewkmayer@gmail.com>
Matthew Mosesohn <raytrac3r@gmail.com>
Matthew Mueller <mattmuelle@gmail.com>
Matthew Riley <mattdr@google.com>
Matthias Klumpp <matthias@tenstral.net>
Matthias Kühnle <git.nivoc@neverbox.com>
Matthias Rampke <mr@soundcloud.com>
Matthieu Fronton <m@tthieu.fr>
Matthieu Hauglustaine <matt.hauglustaine@gmail.com>
Mattias Jernberg <nostrad@gmail.com>
Mauricio Garavaglia <mauricio@medallia.com>
mauriyouth <mauriyouth@gmail.com>
Max Harmathy <max.harmathy@web.de>
Max Shytikov <mshytikov@gmail.com>
Max Timchenko <maxvt@pagerduty.com>
Maxim Fedchyshyn <sevmax@gmail.com>
Maxim Ivanov <ivanov.maxim@gmail.com>
Maxim Kulkin <mkulkin@mirantis.com>
Maxim Treskin <zerthurd@gmail.com>
Maxime Petazzoni <max@signalfuse.com>
Maximiliano Maccanti <maccanti@amazon.com>
Maxwell <csuhp007@gmail.com>
Meaglith Ma <genedna@gmail.com>
meejah <meejah@meejah.ca>
Megan Kostick <mkostick@us.ibm.com>
Mehul Kar <mehul.kar@gmail.com>
Mei ChunTao <mei.chuntao@zte.com.cn>
Mengdi Gao <usrgdd@gmail.com>
Menghui Chen <menghui.chen@alibaba-inc.com>
Mert Yazıcıoğlu <merty@users.noreply.github.com>
mgniu <mgniu@dataman-inc.com>
Micah Zoltu <micah@newrelic.com>
Michael A. Smith <michael@smith-li.com>
Michael Beskin <mrbeskin@gmail.com>
Michael Bridgen <mikeb@squaremobius.net>
Michael Brown <michael@netdirect.ca>
Michael Chiang <mchiang@docker.com>
Michael Crosby <crosbymichael@gmail.com>
Michael Currie <mcurrie@bruceforceresearch.com>
Michael Friis <friism@gmail.com>
Michael Gorsuch <gorsuch@github.com>
Michael Grauer <michael.grauer@kitware.com>
Michael Holzheu <holzheu@linux.vnet.ibm.com>
Michael Hudson-Doyle <michael.hudson@canonical.com>
Michael Huettermann <michael@huettermann.net>
Michael Irwin <mikesir87@gmail.com>
Michael Kuehn <micha@kuehn.io>
Michael Käufl <docker@c.michael-kaeufl.de>
Michael Neale <michael.neale@gmail.com>
Michael Nussbaum <michael.nussbaum@getbraintree.com>
Michael Prokop <github@michael-prokop.at>
Michael Scharf <github@scharf.gr>
Michael Spetsiotis <michael_spets@hotmail.com>
Michael Stapelberg <michael+gh@stapelberg.de>
Michael Steinert <mike.steinert@gmail.com>
Michael Thies <michaelthies78@gmail.com>
Michael Weidmann <michaelweidmann@web.de>
Michael West <mwest@mdsol.com>
Michael Zhao <michael.zhao@arm.com>
Michal Fojtik <mfojtik@redhat.com>
Michal Gebauer <mishak@mishak.net>
Michal Jemala <michal.jemala@gmail.com>
Michal Kostrzewa <michal.kostrzewa@codilime.com>
Michal Minář <miminar@redhat.com>
Michal Rostecki <mrostecki@opensuse.org>
Michal Wieczorek <wieczorek-michal@wp.pl>
Michaël Pailloncy <mpapo.dev@gmail.com>
Michał Czeraszkiewicz <czerasz@gmail.com>
Michał Gryko <github@odkurzacz.org>
Michał Kosek <mihao@users.noreply.github.com>
Michiel de Jong <michiel@unhosted.org>
Mickaël Fortunato <morsi.morsicus@gmail.com>
Mickaël Remars <mickael@remars.com>
Miguel Angel Fernández <elmendalerenda@gmail.com>
Miguel Morales <mimoralea@gmail.com>
Miguel Perez <miguel@voyat.com>
Mihai Borobocea <MihaiBorob@gmail.com>
Mihuleacc Sergiu <mihuleac.sergiu@gmail.com>
Mikael Davranche <mikael.davranche@corp.ovh.com>
Mike Brown <brownwm@us.ibm.com>
Mike Bush <mpbush@gmail.com>
Mike Casas <mkcsas0@gmail.com>
Mike Chelen <michael.chelen@gmail.com>
Mike Danese <mikedanese@google.com>
Mike Dillon <mike@embody.org>
Mike Dougherty <mike.dougherty@docker.com>
Mike Estes <mike.estes@logos.com>
Mike Gaffney <mike@uberu.com>
Mike Goelzer <mike.goelzer@docker.com>
Mike Leone <mleone896@gmail.com>
Mike Lundy <mike@fluffypenguin.org>
Mike MacCana <mike.maccana@gmail.com>
Mike Naberezny <mike@naberezny.com>
Mike Snitzer <snitzer@redhat.com>
mikelinjie <294893458@qq.com>
Mikhail Sobolev <mss@mawhrin.net>
Miklos Szegedi <miklos.szegedi@cloudera.com>
Milas Bowman <milasb@gmail.com>
Milind Chawre <milindchawre@gmail.com>
Miloslav Trmač <mitr@redhat.com>
mingqing <limingqing@cyou-inc.com>
Mingzhen Feng <fmzhen@zju.edu.cn>
Misty Stanley-Jones <misty@docker.com>
Mitch Capper <mitch.capper@gmail.com>
Mizuki Urushida <z11111001011@gmail.com>
mlarcher <github@ringabell.org>
Mohammad Banikazemi <MBanikazemi@gmail.com>
Mohammad Nasirifar <farnasirim@gmail.com>
Mohammed Aaqib Ansari <maaquib@gmail.com>
Mohit Soni <mosoni@ebay.com>
Moorthy RS <rsmoorthy@gmail.com>
Morgan Bauer <mbauer@us.ibm.com>
Morgante Pell <morgante.pell@morgante.net>
Morgy93 <thomas@ulfertsprygoda.de>
Morten Siebuhr <sbhr@sbhr.dk>
Morton Fox <github@qslw.com>
Moysés Borges <moysesb@gmail.com>
mrfly <mr.wrfly@gmail.com>
Mrunal Patel <mrunalp@gmail.com>
Muayyad Alsadi <alsadi@gmail.com>
Muhammad Zohaib Aslam <zohaibse011@gmail.com>
Mustafa Akın <mustafa91@gmail.com>
Muthukumar R <muthur@gmail.com>
Máximo Cuadros <mcuadros@gmail.com>
Médi-Rémi Hashim <medimatrix@users.noreply.github.com>
Nace Oroz <orkica@gmail.com>
Nahum Shalman <nshalman@omniti.com>
Nakul Pathak <nakulpathak3@hotmail.com>
Nalin Dahyabhai <nalin@redhat.com>
Nan Monnand Deng <monnand@gmail.com>
Naoki Orii <norii@cs.cmu.edu>
Natalie Parker <nparker@omnifone.com>
Natanael Copa <natanael.copa@docker.com>
Natasha Jarus <linuxmercedes@gmail.com>
Nate Brennand <nate.brennand@clever.com>
Nate Eagleson <nate@nateeag.com>
Nate Jones <nate@endot.org>
Nathan Carlson <carl4403@umn.edu>
Nathan Herald <me@nathanherald.com>
Nathan Hsieh <hsieh.nathan@gmail.com>
Nathan Kleyn <nathan@nathankleyn.com>
Nathan LeClaire <nathan.leclaire@docker.com>
Nathan McCauley <nathan.mccauley@docker.com>
Nathan Williams <nathan@teamtreehouse.com>
Naveed Jamil <naveed.jamil@tenpearls.com>
Neal McBurnett <neal@mcburnett.org>
Neil Horman <nhorman@tuxdriver.com>
Neil Peterson <neilpeterson@outlook.com>
Nelson Chen <crazysim@gmail.com>
Neyazul Haque <nuhaque@gmail.com>
Nghia Tran <nghia@google.com>
Niall O'Higgins <niallo@unworkable.org>
Nicholas E. Rabenau <nerab@gmx.at>
Nick Adcock <nick.adcock@docker.com>
Nick DeCoursin <n.decoursin@foodpanda.com>
Nick Irvine <nfirvine@nfirvine.com>
Nick Neisen <nwneisen@gmail.com>
Nick Parker <nikaios@gmail.com>
Nick Payne <nick@kurai.co.uk>
Nick Russo <nicholasjamesrusso@gmail.com>
Nick Stenning <nick.stenning@digital.cabinet-office.gov.uk>
Nick Stinemates <nick@stinemates.org>
Nick Wood <nwood@microsoft.com>
NickrenREN <yuquan.ren@easystack.cn>
Nicola Kabar <nicolaka@gmail.com>
Nicolas Borboën <ponsfrilus@gmail.com>
Nicolas De Loof <nicolas.deloof@gmail.com>
Nicolas Dudebout <nicolas.dudebout@gatech.edu>
Nicolas Goy <kuon@goyman.com>
Nicolas Kaiser <nikai@nikai.net>
Nicolas Sterchele <sterchele.nicolas@gmail.com>
Nicolas V Castet <nvcastet@us.ibm.com>
Nicolás Hock Isaza <nhocki@gmail.com>
Niel Drummond <niel@drummond.lu>
Nigel Poulton <nigelpoulton@hotmail.com>
Nik Nyby <nikolas@gnu.org>
Nikhil Chawla <chawlanikhil24@gmail.com>
NikolaMandic <mn080202@gmail.com>
Nikolas Garofil <nikolas.garofil@uantwerpen.be>
Nikolay Edigaryev <edigaryev@gmail.com>
Nikolay Milovanov <nmil@itransformers.net>
Nirmal Mehta <nirmalkmehta@gmail.com>
Nishant Totla <nishanttotla@gmail.com>
NIWA Hideyuki <niwa.niwa@nifty.ne.jp>
Noah Meyerhans <nmeyerha@amazon.com>
Noah Treuhaft <noah.treuhaft@docker.com>
NobodyOnSE <ich@sektor.selfip.com>
noducks <onemannoducks@gmail.com>
Nolan Darilek <nolan@thewordnerd.info>
Noriki Nakamura <noriki.nakamura@miraclelinux.com>
nponeccop <andy.melnikov@gmail.com>
Nurahmadie <nurahmadie@gmail.com>
Nuutti Kotivuori <naked@iki.fi>
nzwsch <hi@nzwsch.com>
O.S. Tezer <ostezer@gmail.com>
objectified <objectified@gmail.com>
Odin Ugedal <odin@ugedal.com>
Oguz Bilgic <fisyonet@gmail.com>
Oh Jinkyun <tintypemolly@gmail.com>
Ohad Schneider <ohadschn@users.noreply.github.com>
ohmystack <jun.jiang02@ele.me>
Ole Reifschneider <mail@ole-reifschneider.de>
Oliver Neal <ItsVeryWindy@users.noreply.github.com>
Oliver Reason <oli@overrateddev.co>
Olivier Gambier <dmp42@users.noreply.github.com>
Olle Jonsson <olle.jonsson@gmail.com>
Olli Janatuinen <olli.janatuinen@gmail.com>
Olly Pomeroy <oppomeroy@gmail.com>
Omri Shiv <Omri.Shiv@teradata.com>
Onur Filiz <onur.filiz@microsoft.com>
Oriol Francès <oriolfa@gmail.com>
Oscar Bonilla <6f6231@gmail.com>
Oskar Niburski <oskarniburski@gmail.com>
Otto Kekäläinen <otto@seravo.fi>
Ouyang Liduo <oyld0210@163.com>
Ovidio Mallo <ovidio.mallo@gmail.com>
Panagiotis Moustafellos <pmoust@elastic.co>
Paolo G. Giarrusso <p.giarrusso@gmail.com>
Pascal <pascalgn@users.noreply.github.com>
Pascal Bach <pascal.bach@siemens.com>
Pascal Borreli <pascal@borreli.com>
Pascal Hartig <phartig@rdrei.net>
Patrick Böänziger <patrick.baenziger@bsi-software.com>
Patrick Devine <patrick.devine@docker.com>
Patrick Haas <patrickhaas@google.com>
Patrick Hemmer <patrick.hemmer@gmail.com>
Patrick Stapleton <github@gdi2290.com>
Patrik Cyvoct <patrik@ptrk.io>
pattichen <craftsbear@gmail.com>
Paul "TBBle" Hampson <Paul.Hampson@Pobox.com>
Paul <paul9869@gmail.com>
paul <paul@inkling.com>
Paul Annesley <paul@annesley.cc>
Paul Bellamy <paul.a.bellamy@gmail.com>
Paul Bowsher <pbowsher@globalpersonals.co.uk>
Paul Furtado <pfurtado@hubspot.com>
Paul Hammond <paul@paulhammond.org>
Paul Jimenez <pj@place.org>
Paul Kehrer <paul.l.kehrer@gmail.com>
Paul Lietar <paul@lietar.net>
Paul Liljenberg <liljenberg.paul@gmail.com>
Paul Morie <pmorie@gmail.com>
Paul Nasrat <pnasrat@gmail.com>
Paul Weaver <pauweave@cisco.com>
Paulo Gomes <pjbgf@linux.com>
Paulo Ribeiro <paigr.io@gmail.com>
Pavel Lobashov <ShockwaveNN@gmail.com>
Pavel Matěja <pavel@verotel.cz>
Pavel Pletenev <cpp.create@gmail.com>
Pavel Pospisil <pospispa@gmail.com>
Pavel Sutyrin <pavel.sutyrin@gmail.com>
Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
Pavlos Ratis <dastergon@gentoo.org>
Pavol Vargovcik <pallly.vargovcik@gmail.com>
Pawel Konczalski <mail@konczalski.de>
Paweł Gronowski <pawel.gronowski@docker.com>
Peeyush Gupta <gpeeyush@linux.vnet.ibm.com>
Peggy Li <peggyli.224@gmail.com>
Pei Su <sillyousu@gmail.com>
Peng Tao <bergwolf@gmail.com>
Penghan Wang <ph.wang@daocloud.io>
Per Weijnitz <per.weijnitz@gmail.com>
perhapszzy@sina.com <perhapszzy@sina.com>
Pete Woods <pete.woods@circleci.com>
Peter Bourgon <peter@bourgon.org>
Peter Braden <peterbraden@peterbraden.co.uk>
Peter Bücker <peter.buecker@pressrelations.de>
Peter Choi <phkchoi89@gmail.com>
Peter Dave Hello <hsu@peterdavehello.org>
Peter Edge <peter.edge@gmail.com>
Peter Ericson <pdericson@gmail.com>
Peter Esbensen <pkesbensen@gmail.com>
Peter Jaffe <pjaffe@nevo.com>
Peter Kang <peter@spell.run>
Peter Malmgren <ptmalmgren@gmail.com>
Peter Salvatore <peter@psftw.com>
Peter Volpe <petervo@redhat.com>
Peter Waller <p@pwaller.net>
Petr Švihlík <svihlik.petr@gmail.com>
Petros Angelatos <petrosagg@gmail.com>
Phil <underscorephil@gmail.com>
Phil Estes <estesp@gmail.com>
Phil Sphicas <phil.sphicas@att.com>
Phil Spitler <pspitler@gmail.com>
Philip Alexander Etling <paetling@gmail.com>
Philip Monroe <phil@philmonroe.com>
Philipp Gillé <philipp.gille@gmail.com>
Philipp Wahala <philipp.wahala@gmail.com>
Philipp Weissensteiner <mail@philippweissensteiner.com>
Phillip Alexander <git@phillipalexander.io>
phineas <phin@phineas.io>
pidster <pid@pidster.com>
Piergiuliano Bossi <pgbossi@gmail.com>
Pierre <py@poujade.org>
Pierre Carrier <pierre@meteor.com>
Pierre Dal-Pra <dalpra.pierre@gmail.com>
Pierre Wacrenier <pierre.wacrenier@gmail.com>
Pierre-Alain RIVIERE <pariviere@ippon.fr>
Piotr Bogdan <ppbogdan@gmail.com>
Piotr Karbowski <piotr.karbowski@protonmail.ch>
Porjo <porjo38@yahoo.com.au>
Poul Kjeldager Sørensen <pks@s-innovations.net>
Pradeep Chhetri <pradeep@indix.com>
Pradip Dhara <pradipd@microsoft.com>
Pradipta Kr. Banerjee <bpradip@in.ibm.com>
Prasanna Gautam <prasannagautam@gmail.com>
Pratik Karki <prertik@outlook.com>
Prayag Verma <prayag.verma@gmail.com>
Priya Wadhwa <priyawadhwa@google.com>
Projjol Banerji <probaner23@gmail.com>
Przemek Hejman <przemyslaw.hejman@gmail.com>
Puneet Pruthi <puneet.pruthi@oracle.com>
Pure White <daniel48@126.com>
pysqz <randomq@126.com>
Qiang Huang <h.huangqiang@huawei.com>
Qin TianHuan <tianhuan@bingotree.cn>
Qinglan Peng <qinglanpeng@zju.edu.cn>
Quan Tian <tianquan@cloudin.cn>
qudongfang <qudongfang@gmail.com>
Quentin Brossard <qbrossard@gmail.com>
Quentin Perez <qperez@ocs.online.net>
Quentin Tayssier <qtayssier@gmail.com>
r0n22 <cameron.regan@gmail.com>
Radostin Stoyanov <rstoyanov1@gmail.com>
Rafal Jeczalik <rjeczalik@gmail.com>
Rafe Colton <rafael.colton@gmail.com>
Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>
Raghuram Devarakonda <draghuram@gmail.com>
Raja Sami <raja.sami@tenpearls.com>
Rajat Pandit <rp@rajatpandit.com>
Rajdeep Dua <dua_rajdeep@yahoo.com>
Ralf Sippl <ralf.sippl@gmail.com>
Ralle <spam@rasmusa.net>
Ralph Bean <rbean@redhat.com>
Ramkumar Ramachandra <artagnon@gmail.com>
Ramon Brooker <rbrooker@aetherealmind.com>
Ramon van Alteren <ramon@vanalteren.nl>
RaviTeja Pothana <ravi-teja@live.com>
Ray Tsang <rayt@google.com>
ReadmeCritic <frankensteinbot@gmail.com>
realityone <realityone@me.com>
Recursive Madman <recursive.madman@gmx.de>
Reficul <xuzhenglun@gmail.com>
Regan McCooey <rmccooey27@aol.com>
Remi Rampin <remirampin@gmail.com>
Remy Suen <remy.suen@gmail.com>
Renato Riccieri Santos Zannon <renato.riccieri@gmail.com>
Renaud Gaubert <rgaubert@nvidia.com>
Rhys Hiltner <rhys@twitch.tv>
Ri Xu <xuri.me@gmail.com>
Ricardo N Feliciano <FelicianoTech@gmail.com>
Rich Horwood <rjhorwood@apple.com>
Rich Moyse <rich@moyse.us>
Rich Seymour <rseymour@gmail.com>
Richard Burnison <rburnison@ebay.com>
Richard Harvey <richard@squarecows.com>
Richard Mathie <richard.mathie@amey.co.uk>
Richard Metzler <richard@paadee.com>
Richard Scothern <richard.scothern@gmail.com>
Richo Healey <richo@psych0tik.net>
Rick Bradley <rick@users.noreply.github.com>
Rick van de Loo <rickvandeloo@gmail.com>
Rick Wieman <git@rickw.nl>
Rik Nijessen <rik@keefo.nl>
Riku Voipio <riku.voipio@linaro.org>
Riley Guerin <rileytg.dev@gmail.com>
Ritesh H Shukla <sritesh@vmware.com>
Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Rob Cowsill <42620235+rcowsill@users.noreply.github.com>
Rob Gulewich <rgulewich@netflix.com>
Rob Vesse <rvesse@dotnetrdf.org>
Robert Bachmann <rb@robertbachmann.at>
Robert Bittle <guywithnose@gmail.com>
Robert Obryk <robryk@gmail.com>
Robert Schneider <mail@shakeme.info>
Robert Shade <robert.shade@gmail.com>
Robert Stern <lexandro2000@gmail.com>
Robert Terhaar <rterhaar@atlanticdynamic.com>
Robert Wallis <smilingrob@gmail.com>
Robert Wang <robert@arctic.tw>
Roberto G. Hashioka <roberto.hashioka@docker.com>
Roberto Muñoz Fernández <robertomf@gmail.com>
Robin Naundorf <r.naundorf@fh-muenster.de>
Robin Schneider <ypid@riseup.net>
Robin Speekenbrink <robin@kingsquare.nl>
Robin Thoni <robin@rthoni.com>
robpc <rpcann@gmail.com>
Rodolfo Carvalho <rhcarvalho@gmail.com>
Rodrigo Campos <rodrigo@kinvolk.io>
Rodrigo Vaz <rodrigo.vaz@gmail.com>
Roel Van Nyen <roel.vannyen@gmail.com>
Roger Peppe <rogpeppe@gmail.com>
Rohit Jnagal <jnagal@google.com>
Rohit Kadam <rohit.d.kadam@gmail.com>
Rohit Kapur <rkapur@flatiron.com>
Rojin George <rojingeorge@huawei.com>
Roland Huß <roland@jolokia.org>
Roland Kammerer <roland.kammerer@linbit.com>
Roland Moriz <rmoriz@users.noreply.github.com>
Roma Sokolov <sokolov.r.v@gmail.com>
Roman Dudin <katrmr@gmail.com>
Roman Mazur <roman@balena.io>
Roman Strashkin <roman.strashkin@gmail.com>
Roman Volosatovs <roman.volosatovs@docker.com>
Roman Zabaluev <gpg@haarolean.dev>
Ron Smits <ron.smits@gmail.com>
Ron Williams <ron.a.williams@gmail.com>
Rong Gao <gaoronggood@163.com>
Rong Zhang <rongzhang@alauda.io>
Rongxiang Song <tinysong1226@gmail.com>
Rony Weng <ronyweng@synology.com>
root <docker-dummy@example.com>
root <root@lxdebmas.marist.edu>
root <root@ubuntu-14.04-amd64-vbox>
root <root@webm215.cluster016.ha.ovh.net>
Rory Hunter <roryhunter2@gmail.com>
Rory McCune <raesene@gmail.com>
Ross Boucher <rboucher@gmail.com>
Rovanion Luckey <rovanion.luckey@gmail.com>
Royce Remer <royceremer@gmail.com>
Rozhnov Alexandr <nox73@ya.ru>
Rudolph Gottesheim <r.gottesheim@loot.at>
Rui Cao <ruicao@alauda.io>
Rui Lopes <rgl@ruilopes.com>
Ruilin Li <liruilin4@huawei.com>
Runshen Zhu <runshen.zhu@gmail.com>
Russ Magee <rmagee@gmail.com>
Ryan Abrams <rdabrams@gmail.com>
Ryan Anderson <anderson.ryanc@gmail.com>
Ryan Aslett <github@mixologic.com>
Ryan Barry <rbarry@mirantis.com>
Ryan Belgrave <rmb1993@gmail.com>
Ryan Campbell <campbellr@gmail.com>
Ryan Detzel <ryan.detzel@gmail.com>
Ryan Fowler <rwfowler@gmail.com>
Ryan Liu <ryanlyy@me.com>
Ryan McLaughlin <rmclaughlin@insidesales.com>
Ryan O'Donnell <odonnellryanc@gmail.com>
Ryan Seto <ryanseto@yak.net>
Ryan Shea <sheabot03@gmail.com>
Ryan Simmen <ryan.simmen@gmail.com>
Ryan Stelly <ryan.stelly@live.com>
Ryan Thomas <rthomas@atlassian.com>
Ryan Trauntvein <rtrauntvein@novacoast.com>
Ryan Wallner <ryan.wallner@clusterhq.com>
Ryan Zhang <ryan.zhang@docker.com>
ryancooper7 <ryan.cooper7@gmail.com>
RyanDeng <sheldon.d1018@gmail.com>
Ryo Nakao <nakabonne@gmail.com>
Ryoga Saito <contact@proelbtn.com>
Rémy Greinhofer <remy.greinhofer@livelovely.com>
s. rannou <mxs@sbrk.org>
Sabin Basyal <sabin.basyal@gmail.com>
Sachin Joshi <sachin_jayant_joshi@hotmail.com>
Sagar Hani <sagarhani33@gmail.com>
Sainath Grandhi <sainath.grandhi@intel.com>
Sakeven Jiang <jc5930@sina.cn>
Salahuddin Khan <salah@docker.com>
Sally O'Malley <somalley@redhat.com>
Sam Abed <sam.abed@gmail.com>
Sam Alba <sam.alba@gmail.com>
Sam Bailey <cyprix@cyprix.com.au>
Sam J Sharpe <sam.sharpe@digital.cabinet-office.gov.uk>
Sam Neirinck <sam@samneirinck.com>
Sam Reis <sreis@atlassian.com>
Sam Rijs <srijs@airpost.net>
Sam Whited <sam@samwhited.com>
Sambuddha Basu <sambuddhabasu1@gmail.com>
Sami Wagiaalla <swagiaal@redhat.com>
Samuel Andaya <samuel@andaya.net>
Samuel Dion-Girardeau <samuel.diongirardeau@gmail.com>
Samuel Karp <me@samuelkarp.com>
Samuel PHAN <samuel-phan@users.noreply.github.com>
sanchayanghosh <sanchayanghosh@outlook.com>
Sandeep Bansal <sabansal@microsoft.com>
Sankar சங்கர் <sankar.curiosity@gmail.com>
Sanket Saurav <sanketsaurav@gmail.com>
Santhosh Manohar <santhosh@docker.com>
sapphiredev <se.imas.kr@gmail.com>
Sargun Dhillon <sargun@netflix.com>
Sascha Andres <sascha.andres@outlook.com>
Sascha Grunert <sgrunert@suse.com>
SataQiu <qiushida@beyondcent.com>
Satnam Singh <satnam@raintown.org>
Satoshi Amemiya <satoshi_amemiya@voyagegroup.com>
Satoshi Tagomori <tagomoris@gmail.com>
Scott Bessler <scottbessler@gmail.com>
Scott Collier <emailscottcollier@gmail.com>
Scott Johnston <scott@docker.com>
Scott Percival <scottp@lastyard.com>
Scott Stamp <scottstamp851@gmail.com>
Scott Walls <sawalls@umich.edu>
sdreyesg <sdreyesg@gmail.com>
Sean Christopherson <sean.j.christopherson@intel.com>
Sean Cronin <seancron@gmail.com>
Sean Lee <seanlee@tw.ibm.com>
Sean McIntyre <s.mcintyre@xverba.ca>
Sean OMeara <sean@chef.io>
Sean P. Kane <skane@newrelic.com>
Sean Rodman <srodman7689@gmail.com>
Sebastiaan van Steenis <mail@superseb.nl>
Sebastiaan van Stijn <github@gone.nl>
Sebastian Höffner <sebastian.hoeffner@mevis.fraunhofer.de>
Sebastian Radloff <sradloff23@gmail.com>
Sebastien Goasguen <runseb@gmail.com>
Senthil Kumar Selvaraj <senthil.thecoder@gmail.com>
Senthil Kumaran <senthil@uthcode.com>
SeongJae Park <sj38.park@gmail.com>
Seongyeol Lim <seongyeol37@gmail.com>
Serge Hallyn <serge.hallyn@ubuntu.com>
Sergey Alekseev <sergey.alekseev.minsk@gmail.com>
Sergey Evstifeev <sergey.evstifeev@gmail.com>
Sergii Kabashniuk <skabashnyuk@codenvy.com>
Sergio Lopez <slp@redhat.com>
Serhat Gülçiçek <serhat25@gmail.com>
SeungUkLee <lsy931106@gmail.com>
Sevki Hasirci <s@sevki.org>
Shane Canon <scanon@lbl.gov>
Shane da Silva <shane@dasilva.io>
Shaun Kaasten <shaunk@gmail.com>
shaunol <shaunol@gmail.com>
Shawn Landden <shawn@churchofgit.com>
Shawn Siefkas <shawn.siefkas@meredith.com>
shawnhe <shawnhe@shawnhedeMacBook-Pro.local>
Shayan Pooya <shayan@liveve.org>
Shayne Wang <shaynexwang@gmail.com>
Shekhar Gulati <shekhargulati84@gmail.com>
Sheng Yang <sheng@yasker.org>
Shengbo Song <thomassong@tencent.com>
Shengjing Zhu <zhsj@debian.org>
Shev Yan <yandong_8212@163.com>
Shih-Yuan Lee <fourdollars@gmail.com>
Shihao Xia <charlesxsh@hotmail.com>
Shijiang Wei <mountkin@gmail.com>
Shijun Qin <qinshijun16@mails.ucas.ac.cn>
Shishir Mahajan <shishir.mahajan@redhat.com>
Shoubhik Bose <sbose78@gmail.com>
Shourya Sarcar <shourya.sarcar@gmail.com>
Shu-Wai Chow <shu-wai.chow@seattlechildrens.org>
shuai-z <zs.broccoli@gmail.com>
Shukui Yang <yangshukui@huawei.com>
Sian Lerk Lau <kiawin@gmail.com>
Siarhei Rasiukevich <s_rasiukevich@wargaming.net>
Sidhartha Mani <sidharthamn@gmail.com>
sidharthamani <sid@rancher.com>
Silas Sewell <silas@sewell.org>
Silvan Jegen <s.jegen@gmail.com>
Simão Reis <smnrsti@gmail.com>
Simon Barendse <simon.barendse@gmail.com>
Simon Eskildsen <sirup@sirupsen.com>
Simon Ferquel <simon.ferquel@docker.com>
Simon Leinen <simon.leinen@gmail.com>
Simon Menke <simon.menke@gmail.com>
Simon Taranto <simon.taranto@gmail.com>
Simon Vikstrom <pullreq@devsn.se>
Sindhu S <sindhus@live.in>
Sjoerd Langkemper <sjoerd-github@linuxonly.nl>
skanehira <sho19921005@gmail.com>
Smark Meng <smark@freecoop.net>
Solganik Alexander <solganik@gmail.com>
Solomon Hykes <solomon@docker.com>
Song Gao <song@gao.io>
Soshi Katsuta <soshi.katsuta@gmail.com>
Sotiris Salloumis <sotiris.salloumis@gmail.com>
Soulou <leo@unbekandt.eu>
Spencer Brown <spencer@spencerbrown.org>
Spencer Smith <robertspencersmith@gmail.com>
Spike Curtis <spike.curtis@metaswitch.com>
Sridatta Thatipamala <sthatipamala@gmail.com>
Sridhar Ratnakumar <sridharr@activestate.com>
Srini Brahmaroutu <srbrahma@us.ibm.com>
Srinivasan Srivatsan <srinivasan.srivatsan@hpe.com>
Staf Wagemakers <staf@wagemakers.be>
Stanislav Bondarenko <stanislav.bondarenko@gmail.com>
Stanislav Levin <slev@altlinux.org>
Steeve Morin <steeve.morin@gmail.com>
Stefan Berger <stefanb@linux.vnet.ibm.com>
Stefan J. Wernli <swernli@microsoft.com>
Stefan Praszalowicz <stefan@greplin.com>
Stefan S. <tronicum@user.github.com>
Stefan Scherer <stefan.scherer@docker.com>
Stefan Staudenmeyer <doerte@instana.com>
Stefan Weil <sw@weilnetz.de>
Steffen Butzer <steffen.butzer@outlook.com>
Stephan Spindler <shutefan@gmail.com>
Stephen Benjamin <stephen@redhat.com>
Stephen Crosby <stevecrozz@gmail.com>
Stephen Day <stevvooe@gmail.com>
Stephen Drake <stephen@xenolith.net>
Stephen Rust <srust@blockbridge.com>
Steve Desmond <steve@vtsv.ca>
Steve Dougherty <steve@asksteved.com>
Steve Durrheimer <s.durrheimer@gmail.com>
Steve Francia <steve.francia@gmail.com>
Steve Koch <stevekochscience@gmail.com>
Steven Burgess <steven.a.burgess@hotmail.com>
Steven Erenst <stevenerenst@gmail.com>
Steven Hartland <steven.hartland@multiplay.co.uk>
Steven Iveson <sjiveson@outlook.com>
Steven Merrill <steven.merrill@gmail.com>
Steven Richards <steven@axiomzen.co>
Steven Taylor <steven.taylor@me.com>
Stéphane Este-Gracias <sestegra@gmail.com>
Stig Larsson <stig@larsson.dev>
Su Wang <su.wang@docker.com>
Subhajit Ghosh <isubuz.g@gmail.com>
Sujith Haridasan <sujith.h@gmail.com>
Sun Gengze <690388648@qq.com>
Sun Jianbo <wonderflow.sun@gmail.com>
Sune Keller <sune.keller@gmail.com>
Sunny Gogoi <indiasuny000@gmail.com>
Suryakumar Sudar <surya.trunks@gmail.com>
Sven Dowideit <SvenDowideit@home.org.au>
Swapnil Daingade <swapnil.daingade@gmail.com>
Sylvain Baubeau <lebauce@gmail.com>
Sylvain Bellemare <sylvain@ascribe.io>
Sébastien <sebastien@yoozio.com>
Sébastien HOUZÉ <cto@verylastroom.com>
Sébastien Luttringer <seblu@seblu.net>
Sébastien Stormacq <sebsto@users.noreply.github.com>
Sören Tempel <soeren+git@soeren-tempel.net>
Tabakhase <mail@tabakhase.com>
Tadej Janež <tadej.j@nez.si>
Takuto Sato <tockn.jp@gmail.com>
tang0th <tang0th@gmx.com>
Tangi Colin <tangicolin@gmail.com>
Tatsuki Sugiura <sugi@nemui.org>
Tatsushi Inagaki <e29253@jp.ibm.com>
Taylan Isikdemir <taylani@google.com>
Taylor Jones <monitorjbl@gmail.com>
Ted M. Young <tedyoung@gmail.com>
Tehmasp Chaudhri <tehmasp@gmail.com>
Tejaswini Duggaraju <naduggar@microsoft.com>
Tejesh Mehta <tejesh.mehta@gmail.com>
Terry Chu <zue.hterry@gmail.com>
terryding77 <550147740@qq.com>
Thatcher Peskens <thatcher@docker.com>
theadactyl <thea.lamkin@gmail.com>
Thell 'Bo' Fowler <thell@tbfowler.name>
Thermionix <bond711@gmail.com>
Thiago Alves Silva <thiago.alves@aurea.com>
Thijs Terlouw <thijsterlouw@gmail.com>
Thomas Bikeev <thomas.bikeev@mac.com>
Thomas Frössman <thomasf@jossystem.se>
Thomas Gazagnaire <thomas@gazagnaire.org>
Thomas Graf <tgraf@suug.ch>
Thomas Grainger <tagrain@gmail.com>
Thomas Hansen <thomas.hansen@gmail.com>
Thomas Ledos <thomas.ledos92@gmail.com>
Thomas Leonard <thomas.leonard@docker.com>
Thomas Léveil <thomasleveil@gmail.com>
Thomas Orozco <thomas@orozco.fr>
Thomas Riccardi <riccardi@systran.fr>
Thomas Schroeter <thomas@cliqz.com>
Thomas Sjögren <konstruktoid@users.noreply.github.com>
Thomas Swift <tgs242@gmail.com>
Thomas Tanaka <thomas.tanaka@oracle.com>
Thomas Texier <sharkone@en-mousse.org>
Ti Zhou <tizhou1986@gmail.com>
Tiago Seabra <tlgs@users.noreply.github.com>
Tianon Gravi <admwiggin@gmail.com>
Tianyi Wang <capkurmagati@gmail.com>
Tibor Vass <teabee89@gmail.com>
Tiffany Jernigan <tiffany.f.j@gmail.com>
Tiffany Low <tiffany@box.com>
Till Claassen <pixelistik@users.noreply.github.com>
Till Wegmüller <toasterson@gmail.com>
Tim <elatllat@gmail.com>
Tim Bart <tim@fewagainstmany.com>
Tim Bosse <taim@bosboot.org>
Tim Dettrick <t.dettrick@uq.edu.au>
Tim Düsterhus <tim@bastelstu.be>
Tim Hockin <thockin@google.com>
Tim Potter <tpot@hpe.com>
Tim Ruffles <oi@truffles.me.uk>
Tim Smith <timbot@google.com>
Tim Terhorst <mynamewastaken+git@gmail.com>
Tim Wagner <tim.wagner@freenet.ag>
Tim Wang <timwangdev@gmail.com>
Tim Waugh <twaugh@redhat.com>
Tim Wraight <tim.wraight@tangentlabs.co.uk>
Tim Zju <21651152@zju.edu.cn>
timchenxiaoyu <837829664@qq.com>
timfeirg <kkcocogogo@gmail.com>
Timo Rothenpieler <timo@rothenpieler.org>
Timothy Hobbs <timothyhobbs@seznam.cz>
tjwebb123 <tjwebb123@users.noreply.github.com>
tobe <tobegit3hub@gmail.com>
Tobias Bieniek <Tobias.Bieniek@gmx.de>
Tobias Bradtke <webwurst@gmail.com>
Tobias Gesellchen <tobias@gesellix.de>
Tobias Klauser <tklauser@distanz.ch>
Tobias Munk <schmunk@usrbin.de>
Tobias Pfandzelter <tobias@pfandzelter.com>
Tobias Schmidt <ts@soundcloud.com>
Tobias Schwab <tobias.schwab@dynport.de>
Todd Crane <todd@toddcrane.com>
Todd Lunter <tlunter@gmail.com>
Todd Whiteman <todd.whiteman@joyent.com>
Toli Kuznets <toli@docker.com>
Tom Barlow <tomwbarlow@gmail.com>
Tom Booth <tombooth@gmail.com>
Tom Denham <tom@tomdee.co.uk>
Tom Fotherby <tom+github@peopleperhour.com>
Tom Howe <tom.howe@enstratius.com>
Tom Hulihan <hulihan.tom159@gmail.com>
Tom Maaswinkel <tom.maaswinkel@12wiki.eu>
Tom Parker <palfrey@tevp.net>
Tom Sweeney <tsweeney@redhat.com>
Tom Wilkie <tom.wilkie@gmail.com>
Tom X. Tobin <tomxtobin@tomxtobin.com>
Tom Zhao <zlwangel@gmail.com>
Tomas Janousek <tomi@nomi.cz>
Tomas Kral <tomas.kral@gmail.com>
Tomas Tomecek <ttomecek@redhat.com>
Tomasz Kopczynski <tomek@kopczynski.net.pl>
Tomasz Lipinski <tlipinski@users.noreply.github.com>
Tomasz Nurkiewicz <nurkiewicz@gmail.com>
Tomek Mańko <tomek.manko@railgun-solutions.com>
Tommaso Visconti <tommaso.visconti@gmail.com>
Tomoya Tabuchi <t@tomoyat1.com>
Tomáš Hrčka <thrcka@redhat.com>
tonic <tonicbupt@gmail.com>
Tonny Xu <tonny.xu@gmail.com>
Tony Abboud <tdabboud@hotmail.com>
Tony Daws <tony@daws.ca>
Tony Miller <mcfiredrill@gmail.com>
toogley <toogley@mailbox.org>
Torstein Husebø <torstein@huseboe.net>
Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp>
Tõnis Tiigi <tonistiigi@gmail.com>
Trace Andreason <tandreason@gmail.com>
tracylihui <793912329@qq.com>
Trapier Marshall <tmarshall@mirantis.com>
Travis Cline <travis.cline@gmail.com>
Travis Thieman <travis.thieman@gmail.com>
Trent Ogren <tedwardo2@gmail.com>
Trevor <trevinwoodstock@gmail.com>
Trevor Pounds <trevor.pounds@gmail.com>
Trevor Sullivan <pcgeek86@gmail.com>
Trishna Guha <trishnaguha17@gmail.com>
Tristan Carel <tristan@cogniteev.com>
Troy Denton <trdenton@gmail.com>
Tudor Brindus <me@tbrindus.ca>
Ty Alexander <ty.alexander@sendgrid.com>
Tycho Andersen <tycho@docker.com>
Tyler Brock <tyler.brock@gmail.com>
Tyler Brown <tylers.pile@gmail.com>
Tzu-Jung Lee <roylee17@gmail.com>
uhayate <uhayate.gong@daocloud.io>
Ulysse Carion <ulyssecarion@gmail.com>
Umesh Yadav <umesh4257@gmail.com>
Utz Bacher <utz.bacher@de.ibm.com>
vagrant <vagrant@ubuntu-14.04-amd64-vbox>
Vaidas Jablonskis <jablonskis@gmail.com>
Valentin Kulesh <valentin.kulesh@virtuozzo.com>
vanderliang <lansheng@meili-inc.com>
Velko Ivanov <vivanov@deeperplane.com>
Veres Lajos <vlajos@gmail.com>
Victor Algaze <valgaze@gmail.com>
Victor Coisne <victor.coisne@dotcloud.com>
Victor Costan <costan@gmail.com>
Victor I. Wood <viw@t2am.com>
Victor Lyuboslavsky <victor@victoreda.com>
Victor Marmol <vmarmol@google.com>
Victor Palma <palma.victor@gmail.com>
Victor Vieux <victor.vieux@docker.com>
Victoria Bialas <victoria.bialas@docker.com>
Vijaya Kumar K <vijayak@caviumnetworks.com>
Vikas Choudhary <choudharyvikas16@gmail.com>
Vikram bir Singh <vsingh@mirantis.com>
Viktor Stanchev <me@viktorstanchev.com>
Viktor Vojnovski <viktor.vojnovski@amadeus.com>
VinayRaghavanKS <raghavan.vinay@gmail.com>
Vincent Batts <vbatts@redhat.com>
Vincent Bernat <vincent@bernat.ch>
Vincent Boulineau <vincent.boulineau@datadoghq.com>
Vincent Demeester <vincent.demeester@docker.com>
Vincent Giersch <vincent.giersch@ovh.net>
Vincent Mayers <vincent.mayers@inbloom.org>
Vincent Woo <me@vincentwoo.com>
Vinod Kulkarni <vinod.kulkarni@gmail.com>
Vishal Doshi <vishal.doshi@gmail.com>
Vishnu Kannan <vishnuk@google.com>
Vitaly Ostrosablin <vostrosablin@virtuozzo.com>
Vitor Monteiro <vmrmonteiro@gmail.com>
Vivek Agarwal <me@vivek.im>
Vivek Dasgupta <vdasgupt@redhat.com>
Vivek Goyal <vgoyal@redhat.com>
Vladimir Bulyga <xx@ccxx.cc>
Vladimir Kirillov <proger@wilab.org.ua>
Vladimir Pouzanov <farcaller@google.com>
Vladimir Rutsky <altsysrq@gmail.com>
Vladimir Varankin <nek.narqo+git@gmail.com>
VladimirAus <v_roudakov@yahoo.com>
Vladislav Kolesnikov <vkolesnikov@beget.ru>
Vlastimil Zeman <vlastimil.zeman@diffblue.com>
Vojtech Vitek (V-Teq) <vvitek@redhat.com>
Walter Leibbrandt <github@wrl.co.za>
Walter Stanish <walter@pratyeka.org>
Wang Chao <chao.wang@ucloud.cn>
Wang Guoliang <liangcszzu@163.com>
Wang Jie <wangjie5@chinaskycloud.com>
Wang Long <long.wanglong@huawei.com>
Wang Ping <present.wp@icloud.com>
Wang Xing <hzwangxing@corp.netease.com>
Wang Yuexiao <wang.yuexiao@zte.com.cn>
Wang Yumu <37442693@qq.com>
wanghuaiqing <wanghuaiqing@loongson.cn>
Ward Vandewege <ward@jhvc.com>
WarheadsSE <max@warheads.net>
Wassim Dhif <wassimdhif@gmail.com>
Wataru Ishida <ishida.wataru@lab.ntt.co.jp>
Wayne Chang <wayne@neverfear.org>
Wayne Song <wsong@docker.com>
Weerasak Chongnguluam <singpor@gmail.com>
Wei Fu <fuweid89@gmail.com>
Wei Wu <wuwei4455@gmail.com>
Wei-Ting Kuo <waitingkuo0527@gmail.com>
weipeng <weipeng@tuscloud.io>
weiyan <weiyan3@huawei.com>
Weiyang Zhu <cnresonant@gmail.com>
Wen Cheng Ma <wenchma@cn.ibm.com>
Wendel Fleming <wfleming@usc.edu>
Wenjun Tang <tangwj2@lenovo.com>
Wenkai Yin <yinw@vmware.com>
wenlxie <wenlxie@ebay.com>
Wenxuan Zhao <viz@linux.com>
Wenyu You <21551128@zju.edu.cn>
Wenzhi Liang <wenzhi.liang@gmail.com>
Wes Morgan <cap10morgan@gmail.com>
Wewang Xiaorenfine <wang.xiaoren@zte.com.cn>
Wiktor Kwapisiewicz <wiktor@metacode.biz>
Will Dietz <w@wdtz.org>
Will Rouesnel <w.rouesnel@gmail.com>
Will Weaver <monkey@buildingbananas.com>
willhf <willhf@gmail.com>
William Delanoue <william.delanoue@gmail.com>
William Henry <whenry@redhat.com>
William Hubbs <w.d.hubbs@gmail.com>
William Martin <wmartin@pivotal.io>
William Riancho <wr.wllm@gmail.com>
William Thurston <thurstw@amazon.com>
Wilson Júnior <wilsonpjunior@gmail.com>
Wing-Kam Wong <wingkwong.code@gmail.com>
WiseTrem <shepelyov.g@gmail.com>
Wolfgang Nagele <mail@wnagele.com>
Wolfgang Powisch <powo@powo.priv.at>
Wonjun Kim <wonjun.kim@navercorp.com>
WuLonghui <wlh6666@qq.com>
xamyzhao <x.amy.zhao@gmail.com>
Xia Wu <xwumzn@amazon.com>
Xian Chaobo <xianchaobo@huawei.com>
Xianglin Gao <xlgao@zju.edu.cn>
Xianjie <guxianjie@gmail.com>
Xianlu Bird <xianlubird@gmail.com>
Xiao YongBiao <xyb4638@gmail.com>
Xiao Zhang <xiaozhang0210@hotmail.com>
XiaoBing Jiang <s7v7nislands@gmail.com>
Xiaodong Liu <liuxiaodong@loongson.cn>
Xiaodong Zhang <a4012017@sina.com>
Xiaohua Ding <xiao_hua_ding@sina.cn>
Xiaoxi He <xxhe@alauda.io>
Xiaoxu Chen <chenxiaoxu14@otcaix.iscas.ac.cn>
Xiaoyu Zhang <zhang.xiaoyu33@zte.com.cn>
xichengliudui <1693291525@qq.com>
xiekeyang <xiekeyang@huawei.com>
Ximo Guanter Gonzálbez <joaquin.guantergonzalbez@telefonica.com>
Xinbo Weng <xihuanbo_0521@zju.edu.cn>
Xinfeng Liu <xinfeng.liu@gmail.com>
Xinzi Zhou <imdreamrunner@gmail.com>
Xiuming Chen <cc@cxm.cc>
Xuecong Liao <satorulogic@gmail.com>
xuzhaokui <cynicholas@gmail.com>
Yadnyawalkya Tale <ytale@redhat.com>
Yahya <ya7yaz@gmail.com>
yalpul <yalpul@gmail.com>
YAMADA Tsuyoshi <tyamada@minimum2scp.org>
Yamasaki Masahide <masahide.y@gmail.com>
Yan Feng <yanfeng2@huawei.com>
Yan Zhu <yanzhu@alauda.io>
Yang Bai <hamo.by@gmail.com>
Yang Li <idealhack@gmail.com>
Yang Pengfei <yangpengfei4@huawei.com>
yangchenliang <yangchenliang@huawei.com>
Yann Autissier <yann.autissier@gmail.com>
Yanqiang Miao <miao.yanqiang@zte.com.cn>
Yao Zaiyong <yaozaiyong@hotmail.com>
Yash Murty <yashmurty@gmail.com>
Yassine Tijani <yasstij11@gmail.com>
Yasunori Mahata <nori@mahata.net>
Yazhong Liu <yorkiefixer@gmail.com>
Yestin Sun <sunyi0804@gmail.com>
Yi EungJun <eungjun.yi@navercorp.com>
Yibai Zhang <xm1994@gmail.com>
Yihang Ho <hoyihang5@gmail.com>
Ying Li <ying.li@docker.com>
Yohei Ueda <yohei@jp.ibm.com>
Yong Tang <yong.tang.github@outlook.com>
Yongxin Li <yxli@alauda.io>
Yongzhi Pan <panyongzhi@gmail.com>
Yosef Fertel <yfertel@gmail.com>
You-Sheng Yang (楊有勝) <vicamo@gmail.com>
youcai <omegacoleman@gmail.com>
Youcef YEKHLEF <yyekhlef@gmail.com>
Youfu Zhang <zhangyoufu@gmail.com>
Yu Changchun <yuchangchun1@huawei.com>
Yu Chengxia <yuchengxia@huawei.com>
Yu Peng <yu.peng36@zte.com.cn>
Yu-Ju Hong <yjhong@google.com>
Yuan Sun <sunyuan3@huawei.com>
Yuanhong Peng <pengyuanhong@huawei.com>
Yue Zhang <zy675793960@yeah.net>
Yufei Xiong <yufei.xiong@qq.com>
Yuhao Fang <fangyuhao@gmail.com>
Yuichiro Kaneko <spiketeika@gmail.com>
YujiOshima <yuji.oshima0x3fd@gmail.com>
Yunxiang Huang <hyxqshk@vip.qq.com>
Yurii Rashkovskii <yrashk@gmail.com>
Yusuf Tarık Günaydın <yusuf_tarik@hotmail.com>
Yves Blusseau <90z7oey02@sneakemail.com>
Yves Junqueira <yves.junqueira@gmail.com>
Zac Dover <zdover@redhat.com>
Zach Borboa <zachborboa@gmail.com>
Zach Gershman <zachgersh@gmail.com>
Zachary Jaffee <zjaffee@us.ibm.com>
Zain Memon <zain@inzain.net>
Zaiste! <oh@zaiste.net>
Zane DeGraffenried <zane.deg@gmail.com>
Zefan Li <lizefan@huawei.com>
Zen Lin(Zhinan Lin) <linzhinan@huawei.com>
Zhang Kun <zkazure@gmail.com>
Zhang Wei <zhangwei555@huawei.com>
Zhang Wentao <zhangwentao234@huawei.com>
ZhangHang <stevezhang2014@gmail.com>
zhangxianwei <xianwei.zw@alibaba-inc.com>
Zhenan Ye <21551168@zju.edu.cn>
zhenghenghuo <zhenghenghuo@zju.edu.cn>
Zhenhai Gao <gaozh1988@live.com>
Zhenkun Bi <bi.zhenkun@zte.com.cn>
ZhiPeng Lu <lu.zhipeng@zte.com.cn>
zhipengzuo <zuozhipeng@baidu.com>
Zhou Hao <zhouhao@cn.fujitsu.com>
Zhoulin Xie <zhoulin.xie@daocloud.io>
Zhu Guihua <zhugh.fnst@cn.fujitsu.com>
Zhu Kunjia <zhu.kunjia@zte.com.cn>
Zhuoyun Wei <wzyboy@wzyboy.org>
Ziheng Liu <lzhfromustc@gmail.com>
Zilin Du <zilin.du@gmail.com>
zimbatm <zimbatm@zimbatm.com>
Ziming Dong <bnudzm@foxmail.com>
ZJUshuaizhou <21551191@zju.edu.cn>
zmarouf <zeid.marouf@gmail.com>
Zoltan Tombol <zoltan.tombol@gmail.com>
Zou Yu <zouyu7@huawei.com>
zqh <zqhxuyuan@gmail.com>
Zuhayr Elahi <zuhayr.elahi@docker.com>
Zunayed Ali <zunayed@gmail.com>
Álvaro Lázaro <alvaro.lazaro.g@gmail.com>
Átila Camurça Alves <camurca.home@gmail.com>
尹吉峰 <jifeng.yin@gmail.com>
屈骏 <qujun@tiduyun.com>
徐俊杰 <paco.xu@daocloud.io>
慕陶 <jihui.xjh@alibaba-inc.com>
搏通 <yufeng.pyf@alibaba-inc.com>
黄艳红00139573 <huang.yanhong@zte.com.cn>
정재영 <jjy600901@gmail.com>
 070701000008CB000081A4000000000000000000000001645E367C00002A0D000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/moby/moby/LICENSE   
                                 Apache License
                           Version 2.0, January 2004
                        https://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   Copyright 2013-2018 Docker, Inc.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       https://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
   070701000008CC000081A4000000000000000000000001645E367C00000282000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/github.com/moby/moby/NOTICE    Docker
Copyright 2012-2017 Docker, Inc.

This product includes software developed at Docker, Inc. (https://www.docker.com).

This product contains software (https://github.com/creack/pty) developed
by Keith Rarick, licensed under the MIT License.

The following is courtesy of our legal counsel:


Use and transfer of Docker may be subject to certain restrictions by the
United States and other governments.
It is your responsibility to ensure that your use and/or transfer does not
violate applicable laws.

For more information, please see https://www.bis.doc.gov

See also https://www.apache.org/dev/crypto.html and/or seek legal counsel.
  070701000008CD000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/moby/moby/libnetwork    070701000008CE000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/moby/moby/libnetwork/resolvconf 070701000008CF000081A4000000000000000000000001645E367C000023C5000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/moby/moby/libnetwork/resolvconf/resolvconf.go   // Package resolvconf provides utility code to query and update DNS configuration in /etc/resolv.conf
package resolvconf

import (
	"bytes"
	"os"
	"regexp"
	"strings"
	"sync"

	"github.com/sirupsen/logrus"
)

const (
	// defaultPath is the default path to the resolv.conf that contains information to resolve DNS. See Path().
	defaultPath = "/etc/resolv.conf"
	// alternatePath is a path different from defaultPath, that may be used to resolve DNS. See Path().
	alternatePath = "/run/systemd/resolve/resolv.conf"
)

// constants for the IP address type
const (
	IP = iota // IPv4 and IPv6
	IPv4
	IPv6
)

var (
	detectSystemdResolvConfOnce sync.Once
	pathAfterSystemdDetection   = defaultPath
)

// Path returns the path to the resolv.conf file that libnetwork should use.
//
// When /etc/resolv.conf contains 127.0.0.53 as the only nameserver, then
// it is assumed systemd-resolved manages DNS. Because inside the container 127.0.0.53
// is not a valid DNS server, Path() returns /run/systemd/resolve/resolv.conf
// which is the resolv.conf that systemd-resolved generates and manages.
// Otherwise Path() returns /etc/resolv.conf.
//
// Errors are silenced as they will inevitably resurface at future open/read calls.
//
// More information at https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html#/etc/resolv.conf
func Path() string {
	detectSystemdResolvConfOnce.Do(func() {
		candidateResolvConf, err := os.ReadFile(defaultPath)
		if err != nil {
			// silencing error as it will resurface at next calls trying to read defaultPath
			return
		}
		ns := GetNameservers(candidateResolvConf, IP)
		if len(ns) == 1 && ns[0] == "127.0.0.53" {
			pathAfterSystemdDetection = alternatePath
			logrus.Infof("detected 127.0.0.53 nameserver, assuming systemd-resolved, so using resolv.conf: %s", alternatePath)
		}
	})
	return pathAfterSystemdDetection
}

const (
	// ipLocalhost is a regex pattern for IPv4 or IPv6 loopback range.
	ipLocalhost  = `((127\.([0-9]{1,3}\.){2}[0-9]{1,3})|(::1)$)`
	ipv4NumBlock = `(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)`
	ipv4Address  = `(` + ipv4NumBlock + `\.){3}` + ipv4NumBlock

	// This is not an IPv6 address verifier as it will accept a super-set of IPv6, and also
	// will *not match* IPv4-Embedded IPv6 Addresses (RFC6052), but that and other variants
	// -- e.g. other link-local types -- either won't work in containers or are unnecessary.
	// For readability and sufficiency for Docker purposes this seemed more reasonable than a
	// 1000+ character regexp with exact and complete IPv6 validation
	ipv6Address = `([0-9A-Fa-f]{0,4}:){2,7}([0-9A-Fa-f]{0,4})(%\w+)?`
)

var (
	// Note: the default IPv4 & IPv6 resolvers are set to Google's Public DNS
	defaultIPv4Dns = []string{"nameserver 8.8.8.8", "nameserver 8.8.4.4"}
	defaultIPv6Dns = []string{"nameserver 2001:4860:4860::8888", "nameserver 2001:4860:4860::8844"}

	localhostNSRegexp = regexp.MustCompile(`(?m)^nameserver\s+` + ipLocalhost + `\s*\n*`)
	nsIPv6Regexp      = regexp.MustCompile(`(?m)^nameserver\s+` + ipv6Address + `\s*\n*`)
	nsRegexp          = regexp.MustCompile(`^\s*nameserver\s*((` + ipv4Address + `)|(` + ipv6Address + `))\s*$`)
	nsIPv6Regexpmatch = regexp.MustCompile(`^\s*nameserver\s*((` + ipv6Address + `))\s*$`)
	nsIPv4Regexpmatch = regexp.MustCompile(`^\s*nameserver\s*((` + ipv4Address + `))\s*$`)
	searchRegexp      = regexp.MustCompile(`^\s*search\s*(([^\s]+\s*)*)$`)
	optionsRegexp     = regexp.MustCompile(`^\s*options\s*(([^\s]+\s*)*)$`)
)

// File contains the resolv.conf content and its hash
type File struct {
	Content []byte
	Hash    string
}

// Get returns the contents of /etc/resolv.conf and its hash
func Get() (*File, error) {
	return GetSpecific(Path())
}

// GetSpecific returns the contents of the user specified resolv.conf file and its hash
func GetSpecific(path string) (*File, error) {
	resolv, err := os.ReadFile(path)
	if err != nil {
		return nil, err
	}
	hash, err := hashData(bytes.NewReader(resolv))
	if err != nil {
		return nil, err
	}
	return &File{Content: resolv, Hash: hash}, nil
}

// FilterResolvDNS cleans up the config in resolvConf.  It has two main jobs:
//  1. It looks for localhost (127.*|::1) entries in the provided
//     resolv.conf, removing local nameserver entries, and, if the resulting
//     cleaned config has no defined nameservers left, adds default DNS entries
//  2. Given the caller provides the enable/disable state of IPv6, the filter
//     code will remove all IPv6 nameservers if it is not enabled for containers
func FilterResolvDNS(resolvConf []byte, ipv6Enabled bool) (*File, error) {
	cleanedResolvConf := localhostNSRegexp.ReplaceAll(resolvConf, []byte{})
	// if IPv6 is not enabled, also clean out any IPv6 address nameserver
	if !ipv6Enabled {
		cleanedResolvConf = nsIPv6Regexp.ReplaceAll(cleanedResolvConf, []byte{})
	}
	// if the resulting resolvConf has no more nameservers defined, add appropriate
	// default DNS servers for IPv4 and (optionally) IPv6
	if len(GetNameservers(cleanedResolvConf, IP)) == 0 {
		logrus.Infof("No non-localhost DNS nameservers are left in resolv.conf. Using default external servers: %v", defaultIPv4Dns)
		dns := defaultIPv4Dns
		if ipv6Enabled {
			logrus.Infof("IPv6 enabled; Adding default IPv6 external servers: %v", defaultIPv6Dns)
			dns = append(dns, defaultIPv6Dns...)
		}
		cleanedResolvConf = append(cleanedResolvConf, []byte("\n"+strings.Join(dns, "\n"))...)
	}
	hash, err := hashData(bytes.NewReader(cleanedResolvConf))
	if err != nil {
		return nil, err
	}
	return &File{Content: cleanedResolvConf, Hash: hash}, nil
}

// getLines parses input into lines and strips away comments.
func getLines(input []byte, commentMarker []byte) [][]byte {
	lines := bytes.Split(input, []byte("\n"))
	var output [][]byte
	for _, currentLine := range lines {
		var commentIndex = bytes.Index(currentLine, commentMarker)
		if commentIndex == -1 {
			output = append(output, currentLine)
		} else {
			output = append(output, currentLine[:commentIndex])
		}
	}
	return output
}

// GetNameservers returns nameservers (if any) listed in /etc/resolv.conf
func GetNameservers(resolvConf []byte, kind int) []string {
	nameservers := []string{}
	for _, line := range getLines(resolvConf, []byte("#")) {
		var ns [][]byte
		if kind == IP {
			ns = nsRegexp.FindSubmatch(line)
		} else if kind == IPv4 {
			ns = nsIPv4Regexpmatch.FindSubmatch(line)
		} else if kind == IPv6 {
			ns = nsIPv6Regexpmatch.FindSubmatch(line)
		}
		if len(ns) > 0 {
			nameservers = append(nameservers, string(ns[1]))
		}
	}
	return nameservers
}

// GetNameserversAsCIDR returns nameservers (if any) listed in
// /etc/resolv.conf as CIDR blocks (e.g., "1.2.3.4/32")
// This function's output is intended for net.ParseCIDR
func GetNameserversAsCIDR(resolvConf []byte) []string {
	nameservers := []string{}
	for _, nameserver := range GetNameservers(resolvConf, IP) {
		var address string
		// If IPv6, strip zone if present
		if strings.Contains(nameserver, ":") {
			address = strings.Split(nameserver, "%")[0] + "/128"
		} else {
			address = nameserver + "/32"
		}
		nameservers = append(nameservers, address)
	}
	return nameservers
}

// GetSearchDomains returns search domains (if any) listed in /etc/resolv.conf
// If more than one search line is encountered, only the contents of the last
// one is returned.
func GetSearchDomains(resolvConf []byte) []string {
	domains := []string{}
	for _, line := range getLines(resolvConf, []byte("#")) {
		match := searchRegexp.FindSubmatch(line)
		if match == nil {
			continue
		}
		domains = strings.Fields(string(match[1]))
	}
	return domains
}

// GetOptions returns options (if any) listed in /etc/resolv.conf
// If more than one options line is encountered, only the contents of the last
// one is returned.
func GetOptions(resolvConf []byte) []string {
	options := []string{}
	for _, line := range getLines(resolvConf, []byte("#")) {
		match := optionsRegexp.FindSubmatch(line)
		if match == nil {
			continue
		}
		options = strings.Fields(string(match[1]))
	}
	return options
}

// Build writes a configuration file to path containing a "nameserver" entry
// for every element in dns, a "search" entry for every element in
// dnsSearch, and an "options" entry for every element in dnsOptions.
func Build(path string, dns, dnsSearch, dnsOptions []string) (*File, error) {
	content := bytes.NewBuffer(nil)
	if len(dnsSearch) > 0 {
		if searchString := strings.Join(dnsSearch, " "); strings.Trim(searchString, " ") != "." {
			if _, err := content.WriteString("search " + searchString + "\n"); err != nil {
				return nil, err
			}
		}
	}
	for _, dns := range dns {
		if _, err := content.WriteString("nameserver " + dns + "\n"); err != nil {
			return nil, err
		}
	}
	if len(dnsOptions) > 0 {
		if optsString := strings.Join(dnsOptions, " "); strings.Trim(optsString, " ") != "" {
			if _, err := content.WriteString("options " + optsString + "\n"); err != nil {
				return nil, err
			}
		}
	}

	hash, err := hashData(bytes.NewReader(content.Bytes()))
	if err != nil {
		return nil, err
	}

	return &File{Content: content.Bytes(), Hash: hash}, os.WriteFile(path, content.Bytes(), 0644)
}
   070701000008D0000081A4000000000000000000000001645E367C0000012E000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/moby/moby/libnetwork/resolvconf/utils.go    package resolvconf

import (
	"crypto/sha256"
	"encoding/hex"
	"io"
)

// hashData returns the sha256 sum of src.
func hashData(src io.Reader) (string, error) {
	h := sha256.New()
	if _, err := io.Copy(h, src); err != nil {
		return "", err
	}
	return "sha256:" + hex.EncodeToString(h.Sum(nil)), nil
}
  070701000008D1000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002F00000000elemental-cli-0.3.1/vendor/github.com/moby/sys    070701000008D2000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/moby/sys/sequential 070701000008D3000081A4000000000000000000000001645E367C00002C5E000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/moby/sys/sequential/LICENSE 
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
  070701000008D4000081A4000000000000000000000001645E367C000002B0000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/moby/sys/sequential/doc.go  // Package sequential provides a set of functions for managing sequential
// files on Windows.
//
// The origin of these functions are the golang OS and windows packages,
// slightly modified to only cope with files, not directories due to the
// specific use case.
//
// The alteration is to allow a file on Windows to be opened with
// FILE_FLAG_SEQUENTIAL_SCAN (particular for docker load), to avoid eating
// the standby list, particularly when accessing large files such as layer.tar.
//
// For non-Windows platforms, the package provides wrappers for the equivalents
// in the os packages. They are passthrough on Unix platforms, and only relevant
// on Windows.
package sequential
070701000008D5000081A4000000000000000000000001645E367C000006E2000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/moby/sys/sequential/sequential_unix.go  //go:build !windows
// +build !windows

package sequential

import "os"

// Create creates the named file with mode 0666 (before umask), truncating
// it if it already exists. If successful, methods on the returned
// File can be used for I/O; the associated file descriptor has mode
// O_RDWR.
// If there is an error, it will be of type *PathError.
func Create(name string) (*os.File, error) {
	return os.Create(name)
}

// Open opens the named file for reading. If successful, methods on
// the returned file can be used for reading; the associated file
// descriptor has mode O_RDONLY.
// If there is an error, it will be of type *PathError.
func Open(name string) (*os.File, error) {
	return os.Open(name)
}

// OpenFile is the generalized open call; most users will use Open
// or Create instead. It opens the named file with specified flag
// (O_RDONLY etc.) and perm, (0666 etc.) if applicable. If successful,
// methods on the returned File can be used for I/O.
// If there is an error, it will be of type *PathError.
func OpenFile(name string, flag int, perm os.FileMode) (*os.File, error) {
	return os.OpenFile(name, flag, perm)
}

// CreateTemp creates a new temporary file in the directory dir
// with a name beginning with prefix, opens the file for reading
// and writing, and returns the resulting *os.File.
// If dir is the empty string, TempFile uses the default directory
// for temporary files (see os.TempDir).
// Multiple programs calling TempFile simultaneously
// will not choose the same file. The caller can use f.Name()
// to find the pathname of the file. It is the caller's responsibility
// to remove the file when no longer needed.
func CreateTemp(dir, prefix string) (f *os.File, err error) {
	return os.CreateTemp(dir, prefix)
}
  070701000008D6000081A4000000000000000000000001645E367C00001308000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/moby/sys/sequential/sequential_windows.go   package sequential

import (
	"os"
	"path/filepath"
	"strconv"
	"sync"
	"syscall"
	"time"
	"unsafe"

	"golang.org/x/sys/windows"
)

// Create creates the named file with mode 0666 (before umask), truncating
// it if it already exists. If successful, methods on the returned
// File can be used for I/O; the associated file descriptor has mode
// O_RDWR.
// If there is an error, it will be of type *PathError.
func Create(name string) (*os.File, error) {
	return OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0)
}

// Open opens the named file for reading. If successful, methods on
// the returned file can be used for reading; the associated file
// descriptor has mode O_RDONLY.
// If there is an error, it will be of type *PathError.
func Open(name string) (*os.File, error) {
	return OpenFile(name, os.O_RDONLY, 0)
}

// OpenFile is the generalized open call; most users will use Open
// or Create instead.
// If there is an error, it will be of type *PathError.
func OpenFile(name string, flag int, _ os.FileMode) (*os.File, error) {
	if name == "" {
		return nil, &os.PathError{Op: "open", Path: name, Err: syscall.ENOENT}
	}
	r, err := openFileSequential(name, flag, 0)
	if err == nil {
		return r, nil
	}
	return nil, &os.PathError{Op: "open", Path: name, Err: err}
}

func openFileSequential(name string, flag int, _ os.FileMode) (file *os.File, err error) {
	r, e := openSequential(name, flag|windows.O_CLOEXEC, 0)
	if e != nil {
		return nil, e
	}
	return os.NewFile(uintptr(r), name), nil
}

func makeInheritSa() *windows.SecurityAttributes {
	var sa windows.SecurityAttributes
	sa.Length = uint32(unsafe.Sizeof(sa))
	sa.InheritHandle = 1
	return &sa
}

func openSequential(path string, mode int, _ uint32) (fd windows.Handle, err error) {
	if len(path) == 0 {
		return windows.InvalidHandle, windows.ERROR_FILE_NOT_FOUND
	}
	pathp, err := windows.UTF16PtrFromString(path)
	if err != nil {
		return windows.InvalidHandle, err
	}
	var access uint32
	switch mode & (windows.O_RDONLY | windows.O_WRONLY | windows.O_RDWR) {
	case windows.O_RDONLY:
		access = windows.GENERIC_READ
	case windows.O_WRONLY:
		access = windows.GENERIC_WRITE
	case windows.O_RDWR:
		access = windows.GENERIC_READ | windows.GENERIC_WRITE
	}
	if mode&windows.O_CREAT != 0 {
		access |= windows.GENERIC_WRITE
	}
	if mode&windows.O_APPEND != 0 {
		access &^= windows.GENERIC_WRITE
		access |= windows.FILE_APPEND_DATA
	}
	sharemode := uint32(windows.FILE_SHARE_READ | windows.FILE_SHARE_WRITE)
	var sa *windows.SecurityAttributes
	if mode&windows.O_CLOEXEC == 0 {
		sa = makeInheritSa()
	}
	var createmode uint32
	switch {
	case mode&(windows.O_CREAT|windows.O_EXCL) == (windows.O_CREAT | windows.O_EXCL):
		createmode = windows.CREATE_NEW
	case mode&(windows.O_CREAT|windows.O_TRUNC) == (windows.O_CREAT | windows.O_TRUNC):
		createmode = windows.CREATE_ALWAYS
	case mode&windows.O_CREAT == windows.O_CREAT:
		createmode = windows.OPEN_ALWAYS
	case mode&windows.O_TRUNC == windows.O_TRUNC:
		createmode = windows.TRUNCATE_EXISTING
	default:
		createmode = windows.OPEN_EXISTING
	}
	// Use FILE_FLAG_SEQUENTIAL_SCAN rather than FILE_ATTRIBUTE_NORMAL as implemented in golang.
	// https://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx
	const fileFlagSequentialScan = 0x08000000 // FILE_FLAG_SEQUENTIAL_SCAN
	h, e := windows.CreateFile(pathp, access, sharemode, sa, createmode, fileFlagSequentialScan, 0)
	return h, e
}

// Helpers for CreateTemp
var rand uint32
var randmu sync.Mutex

func reseed() uint32 {
	return uint32(time.Now().UnixNano() + int64(os.Getpid()))
}

func nextSuffix() string {
	randmu.Lock()
	r := rand
	if r == 0 {
		r = reseed()
	}
	r = r*1664525 + 1013904223 // constants from Numerical Recipes
	rand = r
	randmu.Unlock()
	return strconv.Itoa(int(1e9 + r%1e9))[1:]
}

// CreateTemp is a copy of os.CreateTemp, modified to use sequential
// file access. Below is the original comment from golang:
// TempFile creates a new temporary file in the directory dir
// with a name beginning with prefix, opens the file for reading
// and writing, and returns the resulting *os.File.
// If dir is the empty string, TempFile uses the default directory
// for temporary files (see os.TempDir).
// Multiple programs calling TempFile simultaneously
// will not choose the same file. The caller can use f.Name()
// to find the pathname of the file. It is the caller's responsibility
// to remove the file when no longer needed.
func CreateTemp(dir, prefix string) (f *os.File, err error) {
	if dir == "" {
		dir = os.TempDir()
	}

	nconflict := 0
	for i := 0; i < 10000; i++ {
		name := filepath.Join(dir, prefix+nextSuffix())
		f, err = OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0o600)
		if os.IsExist(err) {
			if nconflict++; nconflict > 10 {
				randmu.Lock()
				rand = reseed()
				randmu.Unlock()
			}
			continue
		}
		break
	}
	return
}
070701000008D7000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/vendor/github.com/mudler  070701000008D8000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/github.com/mudler/entities 070701000008D9000081A4000000000000000000000001645E367C00002C5E000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/mudler/entities/LICENSE 
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
  070701000008DA000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/mudler/entities/pkg 070701000008DB000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/mudler/entities/pkg/entities    070701000008DC000081A4000000000000000000000001645E367C00000792000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/mudler/entities/pkg/entities/entity.go  /*
Copyright © 2020 Ettore Di Giacinto <mudler@mocaccino.org>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
    http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/


package entities

import (
	"os"
	"strconv"
	"strings"
)

const (
	ENTITY_ENV_DEF_GROUPS        = "ENTITY_DEFAULT_GROUPS"
	ENTITY_ENV_DEF_PASSWD        = "ENTITY_DEFAULT_PASSWD"
	ENTITY_ENV_DEF_SHADOW        = "ENTITY_DEFAULT_SHADOW"
	ENTITY_ENV_DEF_GSHADOW       = "ENTITY_DEFAULT_GSHADOW"
	ENTITY_ENV_DEF_DYNAMIC_RANGE = "ENTITY_DYNAMIC_RANGE"
)

// Entity represent something that needs to be applied to a file

type Entity interface {
	GetKind() string
	String() string
	Delete(s string) error
	Create(s string) error
	Apply(s string, safe bool) error
}

func entityIdentifier(s string) string {
	fs := strings.Split(s, ":")
	if len(fs) == 0 {
		return ""
	}

	return fs[0]
}

func DynamicRange() (int, int) {
	// Follow Gentoo way
	uid_start := 999
	uid_end := 500

	// Environment variable must be in the format: <minUid> + '-' + <maxUid>
	env := os.Getenv(ENTITY_ENV_DEF_DYNAMIC_RANGE)
	if env != "" {
		ranges := strings.Split(env, "-")
		if len(ranges) == 2 {
			minUid, err := strconv.Atoi(ranges[0])
			if err != nil {
				// Ignore error
				goto end
			}
			maxUid, err := strconv.Atoi(ranges[1])
			if err != nil {
				// ignore error
				goto end
			}

			if minUid < maxUid && minUid >= 0 && minUid < 65534 && maxUid > 0 && maxUid < 65534 {
				uid_start = maxUid
				uid_end = minUid
			}
		}
	}
end:

	return uid_start, uid_end
}
  070701000008DD000081A4000000000000000000000001645E367C00001CCB000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/mudler/entities/pkg/entities/group.go   /*
Copyright © 2020 Ettore Di Giacinto <mudler@mocaccino.org>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
    http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/


package entities

import (
	"bufio"
	"fmt"
	"io"
	"io/ioutil"
	"os"
	"strconv"
	"strings"

	permbits "github.com/phayes/permbits"
	"github.com/pkg/errors"
)

func GroupsDefault(s string) string {
	if s == "" {
		s = os.Getenv(ENTITY_ENV_DEF_GROUPS)
		if s == "" {
			s = "/etc/group"
		}
	}
	return s
}

// ParseGroup opens the file and parses it into a map from usernames to Entries
func ParseGroup(path string) (map[string]Group, error) {
	file, err := os.Open(path)
	if err != nil {
		return nil, err
	}

	defer file.Close()

	return ParseGroupReader(file)
}

// ParseGroupReader consumes the contents of r and parses it into a map from
// usernames to Entries
func ParseGroupReader(r io.Reader) (map[string]Group, error) {
	lines := bufio.NewReader(r)
	entries := make(map[string]Group)
	for {
		line, _, err := lines.ReadLine()
		if err != nil {
			break
		}
		name, entry, err := parseGroupLine(string(copyBytes(line)))
		if err != nil {
			return nil, err
		}
		entries[name] = entry
	}
	return entries, nil
}

func parseGroupLine(line string) (string, Group, error) {
	fs := strings.Split(line, ":")
	if len(fs) != 4 {
		return "", Group{}, errors.New(
			"Unexpected number of fields in /etc/group: found " + strconv.Itoa(len(fs)) +
				" - " + line)
	}

	gid, err := strconv.Atoi(fs[2])
	if err != nil {
		return "", Group{}, errors.New("Expected int for gid")
	}
	return fs[0], Group{fs[0], fs[1], &gid, fs[3]}, nil
}

func groupGetFreeGid(path string) (int, error) {
	uidStart, uidEnd := DynamicRange()
	mGids := make(map[int]*Group)
	ans := -1

	current, err := ParseGroup(path)
	if err != nil {
		return ans, err
	}

	for _, e := range current {
		mGids[*e.Gid] = &e
	}

	for i := uidStart; i >= uidEnd; i-- {
		if _, ok := mGids[i]; !ok {
			ans = i
			break
		}
	}

	if ans < 0 {
		return ans, errors.New("No free GID found")
	}

	return ans, nil
}

type Group struct {
	Name     string `yaml:"group_name"`
	Password string `yaml:"password"`
	Gid      *int   `yaml:"gid"`
	Users    string `yaml:"users"`
}

func (u Group) GetKind() string { return GroupKind }

func (u Group) prepare(s string) (Group, error) {
	if u.Gid != nil && *u.Gid < 0 {
		// POST: dynamic group
		gid, err := groupGetFreeGid(s)
		if err != nil {
			return u, err
		}
		u.Gid = &gid
	}

	return u, nil
}

func (u Group) String() string {
	var gid string
	if u.Gid == nil {
		gid = ""
	} else {
		gid = strconv.Itoa(*u.Gid)
	}
	return strings.Join([]string{u.Name,
		u.Password,
		gid,
		u.Users,
	}, ":")
}

func (u Group) Delete(s string) error {
	s = GroupsDefault(s)
	input, err := ioutil.ReadFile(s)
	if err != nil {
		return errors.Wrap(err, "Could not read input file")
	}
	permissions, err := permbits.Stat(s)
	if err != nil {
		return errors.Wrap(err, "Failed getting permissions")
	}

	// Drop the line which match the identifier. Don't look at the content as in other cases
	lines := strings.Split(string(input), "\n")
	var toremove int
	for i, line := range lines {
		if entityIdentifier(line) == u.Name {
			toremove = i
		}
	}

	// Remove the element at index i from a.
	copy(lines[toremove:], lines[toremove+1:]) // Shift a[i+1:] left one index.
	lines[len(lines)-1] = ""                   // Erase last element (write zero value).
	lines = lines[:len(lines)-1]               // Truncate slice.

	output := strings.Join(lines, "\n")

	err = ioutil.WriteFile(s, []byte(output), os.FileMode(permissions))
	if err != nil {
		return errors.Wrap(err, "Could not write")
	}

	return nil
}

func (u Group) Create(s string) error {
	s = GroupsDefault(s)

	u, err := u.prepare(s)
	if err != nil {
		return errors.Wrap(err, "Failed entity preparation")
	}

	current, err := ParseGroup(s)
	if err != nil {
		return errors.Wrap(err, "Failed parsing passwd")
	}
	if _, ok := current[u.Name]; ok {
		return errors.New("Entity already present")
	}
	permissions, err := permbits.Stat(s)
	if err != nil {
		return errors.Wrap(err, "Failed getting permissions")
	}
	// Add it
	f, err := os.OpenFile(s, os.O_APPEND|os.O_WRONLY, os.FileMode(permissions))
	if err != nil {
		return errors.Wrap(err, "Could not read")
	}

	defer f.Close()

	if _, err = f.WriteString(u.String() + "\n"); err != nil {
		return errors.Wrap(err, "Could not write")
	}
	return nil
}

func Unique(strSlice []string) []string {
	keys := make(map[string]bool)
	list := []string{}
	for _, entry := range strSlice {
		// Ignore invalid string. Workaround to broken /etc/groups generated by
		// previous version of entities
		if entry == "" {
			continue
		}

		if _, value := keys[entry]; !value {
			keys[entry] = true
			list = append(list, entry)
		}
	}
	return list
}

func (u Group) Apply(s string, safe bool) error {
	if u.Name == "" {
		return errors.New("Empty group name")
	}

	s = GroupsDefault(s)

	u, err := u.prepare(s)
	if err != nil {
		return errors.Wrap(err, "Failed entity preparation")
	}

	current, err := ParseGroup(s)
	if err != nil {
		return errors.Wrap(err, "Failed parsing passwd")
	}
	permissions, err := permbits.Stat(s)
	if err != nil {
		return errors.Wrap(err, "Failed getting permissions")
	}

	if safe && u.Gid != nil {
		// Avoid this check if the gid is not
		// present. For example for the specs where
		// we add users to a group.

		mGids := make(map[int]*Group)

		// Create gids to check gid mismatch
		// Maybe could be done always.
		for _, e := range current {
			mGids[*e.Gid] = &e
		}

		if e, present := mGids[*u.Gid]; present {
			if e.Name != u.Name {
				return errors.Wrap(err,
					fmt.Sprintf("Gid %d is already used on group %s",
						*u.Gid, u.Name))
			}
		}
	}

	if _, ok := current[u.Name]; ok {
		input, err := ioutil.ReadFile(s)
		if err != nil {
			return errors.Wrap(err, "Could not read input file")
		}

		lines := strings.Split(string(input), "\n")

		for i, line := range lines {
			if entityIdentifier(line) == u.Name {
				// Merge the groups, don't override the whole user.
				_, g, err := parseGroupLine(lines[i])
				if err != nil {
					return errors.Wrap(err, "Failed parsing current group")
				}
				if len(g.Users) > 0 {
					currentUsers := strings.Split(g.Users, ",")
					if u.Users != "" {
						currentUsers = append(currentUsers, strings.Split(u.Users, ",")...)
					}
					u.Users = strings.Join(Unique(currentUsers), ",")
				}

				if !safe {
					if len(u.Password) == 0 {
						u.Password = g.Password
					}
					if u.Gid == nil {
						u.Gid = g.Gid
					}
				} else {
					// Maintain existing group id and password
					u.Gid = g.Gid
					u.Password = g.Password
				}

				lines[i] = u.String()
			}
		}
		output := strings.Join(lines, "\n")
		err = ioutil.WriteFile(s, []byte(output), os.FileMode(permissions))
		if err != nil {
			return errors.Wrap(err, "Could not write")
		}

	} else {
		return u.Create(s)
	}

	return nil
}
 070701000008DE000081A4000000000000000000000001645E367C000012B4000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/mudler/entities/pkg/entities/gshadow.go /*
Copyright © 2020 Ettore Di Giacinto <mudler@mocaccino.org>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
    http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/


package entities

import (
	"bufio"
	"bytes"
	"io"
	"io/ioutil"
	"os"
	"strconv"
	"strings"

	permbits "github.com/phayes/permbits"
	"github.com/pkg/errors"
)

func GShadowDefault(s string) string {
	if s == "" {
		s = os.Getenv(ENTITY_ENV_DEF_GSHADOW)
		if s == "" {
			s = "/etc/gshadow"
		}
	}
	return s
}

// ParseGShadow opens the file and parses it into a map from usernames to Entries
func ParseGShadow(path string) (map[string]GShadow, error) {
	file, err := os.Open(path)
	if err != nil {
		return nil, err
	}

	defer file.Close()

	return ParseGShadowReader(file)
}

// ParseGShadowReader consumes the contents of r and parses it into a map from
// usernames to Entries
func ParseGShadowReader(r io.Reader) (map[string]GShadow, error) {
	lines := bufio.NewReader(r)
	entries := make(map[string]GShadow)
	for {
		line, _, err := lines.ReadLine()
		if err != nil {
			break
		}
		name, entry, err := parseGShadowLine(string(copyBytes(line)))
		if err != nil {
			return nil, err
		}
		entries[name] = entry
	}
	return entries, nil
}

func parseGShadowLine(line string) (string, GShadow, error) {
	fs := strings.Split(line, ":")
	if len(fs) != 4 {
		return "", GShadow{}, errors.New("Unexpected number of fields in /etc/GShadow: found " + strconv.Itoa(len(fs)))
	}

	return fs[0], GShadow{fs[0], fs[1], fs[2], fs[3]}, nil
}

type GShadow struct {
	Name           string `yaml:"name"`
	Password       string `yaml:"password"`
	Administrators string `yaml:"administrators"`
	Members        string `yaml:"members"`
}

func (u GShadow) GetKind() string { return GShadowKind }

func (u GShadow) String() string {
	return strings.Join([]string{
		u.Name,
		u.Password,
		u.Administrators,
		u.Members,
	}, ":")
}

func (u GShadow) Delete(s string) error {
	s = GShadowDefault(s)
	input, err := ioutil.ReadFile(s)
	if err != nil {
		return errors.Wrap(err, "Could not read input file")
	}
	permissions, err := permbits.Stat(s)
	if err != nil {
		return errors.Wrap(err, "Failed getting permissions")
	}
	lines := bytes.Replace(input, []byte(u.String()+"\n"), []byte(""), 1)

	err = ioutil.WriteFile(s, []byte(lines), os.FileMode(permissions))
	if err != nil {
		return errors.Wrap(err, "Could not write")
	}

	return nil
}

func (u GShadow) Create(s string) error {
	var f *os.File

	s = GShadowDefault(s)

	_, err := os.Stat(s)
	if err == nil {
		current, err := ParseGShadow(s)
		if err != nil {
			return errors.Wrap(err, "Failed parsing passwd")
		}
		if _, ok := current[u.Name]; ok {
			return errors.New("Entity already present")
		}
		permissions, err := permbits.Stat(s)
		if err != nil {
			return errors.Wrap(err, "Failed getting permissions")
		}
		f, err = os.OpenFile(s, os.O_APPEND|os.O_WRONLY, os.FileMode(permissions))
		if err != nil {
			return errors.Wrap(err, "Could not read")
		}
	} else if os.IsNotExist(err) {
		f, err = os.OpenFile(s, os.O_RDWR|os.O_CREATE, 0400)
		if err != nil {
			return errors.Wrap(err, "Could not create the file")
		}
	} else {
		return errors.Wrap(err, "Error on stat file")
	}

	defer f.Close()

	if _, err = f.WriteString(u.String() + "\n"); err != nil {
		return errors.Wrap(err, "Could not write")
	}
	return nil
}

func (u GShadow) Apply(s string, safe bool) error {
	s = GShadowDefault(s)

	_, err := os.Stat(s)
	if err == nil {
		current, err := ParseGShadow(s)
		if err != nil {
			return errors.Wrap(err, "Failed parsing passwd")
		}
		permissions, err := permbits.Stat(s)
		if err != nil {
			return errors.Wrap(err, "Failed getting permissions")
		}

		if _, ok := current[u.Name]; ok {
			input, err := ioutil.ReadFile(s)
			if err != nil {
				return errors.Wrap(err, "Could not read input file")
			}

			lines := strings.Split(string(input), "\n")

			for i, line := range lines {
				if entityIdentifier(line) == u.Name && !safe {
					lines[i] = u.String()
				}
			}
			output := strings.Join(lines, "\n")
			err = ioutil.WriteFile(s, []byte(output), os.FileMode(permissions))
			if err != nil {
				return errors.Wrap(err, "Could not write")
			}

		} else {
			// Add it
			return u.Create(s)
		}
	} else if os.IsNotExist(err) {
		return u.Create(s)
	} else {
		return errors.Wrap(err, "Could not stat file")
	}

	return nil
}
070701000008DF000081A4000000000000000000000001645E367C000008B6000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/mudler/entities/pkg/entities/parser.go  /*
Copyright © 2020 Ettore Di Giacinto <mudler@mocaccino.org>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
    http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/


package entities

import (
	"io/ioutil"

	"github.com/pkg/errors"
	"gopkg.in/yaml.v2"
)

const (
	UserKind    = "user"
	ShadowKind  = "shadow"
	GroupKind   = "group"
	GShadowKind = "gshadow"
)

type EntitiesParser interface {
	ReadEntity(entity string) (Entity, error)
}

type Signature struct {
	Kind string `yaml:"kind"`
}

type Parser struct{}

func (p Parser) ReadEntityFromBytes(yamlFile []byte) (Entity, error) {

	var signature Signature
	err := yaml.Unmarshal(yamlFile, &signature)
	if err != nil {
		return nil, errors.Wrap(err, "Failed while parsing entity file")
	}

	switch signature.Kind {
	case UserKind:
		var user UserPasswd

		err = yaml.Unmarshal(yamlFile, &user)
		if err != nil {
			return nil, errors.Wrap(err, "Failed while parsing entity file")
		}
		return user, nil
	case ShadowKind:
		var shad Shadow

		err = yaml.Unmarshal(yamlFile, &shad)
		if err != nil {
			return nil, errors.Wrap(err, "Failed while parsing entity file")
		}
		return shad, nil
	case GroupKind:
		var group Group

		err = yaml.Unmarshal(yamlFile, &group)
		if err != nil {
			return nil, errors.Wrap(err, "Failed while parsing entity file")
		}
		return group, nil

	case GShadowKind:
		var group GShadow

		err = yaml.Unmarshal(yamlFile, &group)
		if err != nil {
			return nil, errors.Wrap(err, "Failed while parsing entity file")
		}
		return group, nil
	}

	return nil, errors.New("Unsupported format")
}
func (p Parser) ReadEntity(entity string) (Entity, error) {
	yamlFile, err := ioutil.ReadFile(entity)
	if err != nil {
		return nil, errors.Wrap(err, "Failed while reading entity file")
	}
	return p.ReadEntityFromBytes(yamlFile)

}
  070701000008E0000081A4000000000000000000000001645E367C000018EB000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/mudler/entities/pkg/entities/shadow.go  /*
Copyright © 2020 Ettore Di Giacinto <mudler@mocaccino.org>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
    http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/


package entities

import (
	"bufio"
	"bytes"
	"fmt"
	"io"
	"io/ioutil"
	"math/rand"
	"os"
	"strconv"
	"strings"
	"time"

	"github.com/tredoe/osutil/v2/userutil/crypt/sha512_crypt"

	permbits "github.com/phayes/permbits"
	"github.com/pkg/errors"
)

// ParseShadow opens the file and parses it into a map from usernames to Entries
func ParseShadow(path string) (map[string]Shadow, error) {
	file, err := os.Open(path)
	if err != nil {
		return nil, err
	}

	defer file.Close()

	return ParseReader(file)
}

// ParseReader consumes the contents of r and parses it into a map from
// usernames to Entries
func ParseReader(r io.Reader) (map[string]Shadow, error) {
	lines := bufio.NewReader(r)
	entries := make(map[string]Shadow)
	for {
		line, _, err := lines.ReadLine()
		if err != nil {
			break
		}
		name, entry, err := parseLine(string(copyBytes(line)))
		if err != nil {
			return nil, err
		}
		entries[name] = entry
	}
	return entries, nil
}

func parseLine(line string) (string, Shadow, error) {
	fs := strings.Split(line, ":")
	if len(fs) != 9 {
		return "", Shadow{}, errors.New("Unexpected number of fields in /etc/shadow: found " + strconv.Itoa(len(fs)))
	}

	return fs[0], Shadow{fs[0], fs[1], fs[2], fs[3], fs[4], fs[5], fs[6], fs[7], fs[8]}, nil
}

func copyBytes(x []byte) []byte {
	y := make([]byte, len(x))
	copy(y, x)
	return y
}

type Shadow struct {
	Username       string `yaml:"username"`
	Password       string `yaml:"password"`
	LastChanged    string `yaml:"last_changed"`
	MinimumChanged string `yaml:"minimum_changed"`
	MaximumChanged string `yaml:"maximum_changed"`
	Warn           string `yaml:"warn"`
	Inactive       string `yaml:"inactive"`
	Expire         string `yaml:"expire"`
	Reserved       string `yaml:"reserved"`
}

func (u Shadow) GetKind() string { return ShadowKind }

func (u Shadow) String() string {
	return strings.Join([]string{u.Username,
		u.Password,
		u.LastChanged,
		u.MinimumChanged,
		u.MaximumChanged,
		u.Warn,
		u.Inactive,
		u.Expire,
		u.Reserved,
	}, ":")
}

func ShadowDefault(s string) string {
	if s == "" {
		s = os.Getenv(ENTITY_ENV_DEF_SHADOW)
		if s == "" {
			s = "/etc/shadow"
		}
	}
	return s
}

const letterBytes = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

func randStringBytes(n int) string {
	b := make([]byte, n)
	for i := range b {
		b[i] = letterBytes[rand.Intn(len(letterBytes))]
	}
	return string(b)
}

func encryptPassword(userPassword string) (string, error) {
	salt := []byte(fmt.Sprintf("$6$%s", randStringBytes(8)))
	c := sha512_crypt.New()
	hash, err := c.Generate([]byte(userPassword), salt)
	if err != nil {
		return "", err
	}
	return string(hash), nil
}

func (u Shadow) prepare() Shadow {
	if u.LastChanged == "now" {
		// POST: Set in last_changed the current days from 1970
		now := time.Now()
		days := now.Unix() / 24 / 60 / 60
		u.LastChanged = fmt.Sprintf("%d", days)
	}
	/*
	 A password field which starts with an exclamation mark means
	 that the password is locked. The remaining characters on the
	 line represent the password field before the password was
	 locked.

	 Refer to crypt(3) for details on how this string is
	 interpreted.

	 If the password field contains some string that is not a
	 valid result of crypt(3), for instance ! or *, the user will
	 not be able to use a unix password to log in (but the user
	 may log in the system by other means).
	*/
	if !strings.HasPrefix(u.Password, "$") && u.Password != "" &&
		!strings.HasPrefix(u.Password, "!") && u.Password != "*" {
		if pwd, err := encryptPassword(u.Password); err == nil {
			u.Password = pwd
		}
	}
	return u
}

// FIXME: Delete can be shared across all of the supported Entities
func (u Shadow) Delete(s string) error {
	s = ShadowDefault(s)
	input, err := ioutil.ReadFile(s)
	if err != nil {
		return errors.Wrap(err, "Could not read input file")
	}
	permissions, err := permbits.Stat(s)
	if err != nil {
		return errors.Wrap(err, "Failed getting permissions")
	}
	lines := bytes.Replace(input, []byte(u.String()+"\n"), []byte(""), 1)

	err = ioutil.WriteFile(s, []byte(lines), os.FileMode(permissions))
	if err != nil {
		return errors.Wrap(err, "Could not write")
	}

	return nil
}

// FIXME: Create can be shared across all of the supported Entities
func (u Shadow) Create(s string) error {
	s = ShadowDefault(s)

	u = u.prepare()
	current, err := ParseShadow(s)
	if err != nil {
		return errors.Wrap(err, "Failed parsing passwd")
	}
	if _, ok := current[u.Username]; ok {
		return errors.New("Entity already present")
	}
	permissions, err := permbits.Stat(s)
	if err != nil {
		return errors.Wrap(err, "Failed getting permissions")
	}
	f, err := os.OpenFile(s, os.O_APPEND|os.O_WRONLY, os.FileMode(permissions))
	if err != nil {
		return errors.Wrap(err, "Could not read")
	}

	defer f.Close()

	if _, err = f.WriteString(u.String() + "\n"); err != nil {
		return errors.Wrap(err, "Could not write")
	}
	return nil
}

func (u Shadow) Apply(s string, safe bool) error {
	s = ShadowDefault(s)

	u = u.prepare()
	current, err := ParseShadow(s)
	if err != nil {
		return errors.Wrap(err, "Failed parsing passwd")
	}
	permissions, err := permbits.Stat(s)
	if err != nil {
		return errors.Wrap(err, "Failed getting permissions")
	}

	if _, ok := current[u.Username]; ok {
		input, err := ioutil.ReadFile(s)
		if err != nil {
			return errors.Wrap(err, "Could not read input file")
		}

		lines := strings.Split(string(input), "\n")

		for i, line := range lines {
			if entityIdentifier(line) == u.Username && !safe {
				lines[i] = u.String()
			}
		}
		output := strings.Join(lines, "\n")
		err = ioutil.WriteFile(s, []byte(output), os.FileMode(permissions))
		if err != nil {
			return errors.Wrap(err, "Could not write")
		}

	} else {
		// Add it
		return u.Create(s)
	}

	return nil
}
 070701000008E1000081A4000000000000000000000001645E367C00000C7B000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/mudler/entities/pkg/entities/store.go   /*
Copyright © 2021 Ettore Di Giacinto <mudler@mocaccino.org>
                 Daniele Rondina <geaaru@sabayon.org>

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
    http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/


package entities

import (
	"errors"
	"io/ioutil"
	"path/filepath"
	"regexp"
)

type EntitiesStore struct {
	Users    map[string]UserPasswd
	Groups   map[string]Group
	Shadows  map[string]Shadow
	GShadows map[string]GShadow
}

func NewEntitiesStore() *EntitiesStore {
	return &EntitiesStore{
		Users:    make(map[string]UserPasswd, 0),
		Groups:   make(map[string]Group, 0),
		Shadows:  make(map[string]Shadow, 0),
		GShadows: make(map[string]GShadow, 0),
	}
}

func (s *EntitiesStore) Load(dir string) error {
	var regexConfs = regexp.MustCompile(`.yml$|.yaml$`)

	files, err := ioutil.ReadDir(dir)
	if err != nil {
		return err
	}

	p := &Parser{}

	for _, file := range files {
		if file.IsDir() {
			continue
		}

		if !regexConfs.MatchString(file.Name()) {
			continue
		}

		entity, err := p.ReadEntity(filepath.Join(dir, file.Name()))
		if err == nil {
			s.AddEntity(entity)
		}

	}

	return nil
}

func (s *EntitiesStore) AddEntity(e Entity) error {
	var err error
	switch e.GetKind() {
	case UserKind:
		err = s.AddUser((e.(UserPasswd)))
	case GroupKind:
		err = s.AddGroup((e.(Group)))
	case ShadowKind:
		err = s.AddShadow((e.(Shadow)))
	case GShadowKind:
		err = s.AddGShadow((e.(GShadow)))
	default:
		err = errors.New("Invalid entity")
	}

	return err
}

func (s *EntitiesStore) AddUser(u UserPasswd) error {
	if u.Username == "" {
		return errors.New("Invalid username field")
	}
	s.Users[u.Username] = u
	return nil
}

func (s *EntitiesStore) AddGroup(g Group) error {
	if g.Name == "" {
		return errors.New("Invalid group name field")
	}

	s.Groups[g.Name] = g
	return nil
}

func (s *EntitiesStore) AddShadow(e Shadow) error {
	if e.Username == "" {
		return errors.New("Invalid username field")
	}

	s.Shadows[e.Username] = e
	return nil
}

func (s *EntitiesStore) AddGShadow(e GShadow) error {
	if e.Name == "" {
		return errors.New("Invalid name field")
	}

	s.GShadows[e.Name] = e
	return nil
}

func (s *EntitiesStore) GetShadow(name string) (Shadow, bool) {
	if e, ok := s.Shadows[name]; ok {
		return e, true
	} else {
		return Shadow{}, false
	}
}

func (s *EntitiesStore) GetGShadow(name string) (GShadow, bool) {
	if e, ok := s.GShadows[name]; ok {
		return e, true
	} else {
		return GShadow{}, false
	}
}

func (s *EntitiesStore) GetUser(name string) (UserPasswd, bool) {
	if e, ok := s.Users[name]; ok {
		return e, true
	} else {
		return UserPasswd{}, false
	}
}

func (s *EntitiesStore) GetGroup(name string) (Group, bool) {
	if e, ok := s.Groups[name]; ok {
		return e, true
	} else {
		return Group{}, false
	}
}
 070701000008E2000081A4000000000000000000000001645E367C00001884000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/mudler/entities/pkg/entities/user.go    /*
Copyright © 2020 Ettore Di Giacinto <mudler@mocaccino.org>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
    http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/


package entities

import (
	"bytes"
	"fmt"
	"io/ioutil"
	"os"
	"strconv"
	"strings"

	permbits "github.com/phayes/permbits"
	"github.com/pkg/errors"
	passwd "github.com/willdonnelly/passwd"
)

func UserDefault(s string) string {
	if s == "" {
		// Check environment override before to use default.
		s = os.Getenv(ENTITY_ENV_DEF_PASSWD)
		if s == "" {
			s = "/etc/passwd"
		}
	}
	return s
}

func userGetFreeUid(path string) (int, error) {
	uidStart, uidEnd := DynamicRange()
	mUids := make(map[int]*UserPasswd)
	ans := -1

	current, err := ParseUser(path)
	if err != nil {
		return ans, err
	}

	for _, e := range current {
		mUids[e.Uid] = &e
	}

	for i := uidStart; i >= uidEnd; i-- {
		if _, ok := mUids[i]; !ok {
			ans = i
			break
		}
	}

	if ans < 0 {
		return ans, errors.New("No free UID found")
	}

	return ans, nil
}

type UserPasswd struct {
	Username string `yaml:"username"`
	Password string `yaml:"password"`
	Uid      int    `yaml:"uid"`
	Gid      int    `yaml:"gid"`
	Group    string `yaml:"group"`
	Info     string `yaml:"info"`
	Homedir  string `yaml:"homedir"`
	Shell    string `yaml:"shell"`
}

func ParseUser(path string) (map[string]UserPasswd, error) {
	ans := make(map[string]UserPasswd, 0)

	current, err := passwd.ParseFile(path)
	if err != nil {
		return ans, errors.Wrap(err, "Failed parsing passwd")
	}
	_, err = permbits.Stat(path)
	if err != nil {
		return ans, errors.Wrap(err, "Failed getting permissions")
	}

	for k, v := range current {

		uid, err := strconv.Atoi(v.Uid)
		if err != nil {
			fmt.Println(fmt.Sprintf(
				"WARN: Found invalid uid for user %s: %s.\nSetting 0. Check the file soon.",
				k, err.Error(),
			))
			uid = 0
		}

		gid, err := strconv.Atoi(v.Gid)
		if err != nil {
			fmt.Println(fmt.Sprintf(
				"WARN: Found invalid gid for user %s and uid %d: %s",
				k, uid, err.Error(),
			))
			// Set gid with the same value of uid
			gid = uid
		}

		ans[k] = UserPasswd{
			Username: k,
			Password: v.Pass,
			Uid:      uid,
			Gid:      gid,
			Info:     v.Gecos,
			Homedir:  v.Home,
			Shell:    v.Shell,
		}
	}

	return ans, nil
}

func (u UserPasswd) GetKind() string { return UserKind }

func (u UserPasswd) prepare(s string) (UserPasswd, error) {

	if u.Uid < 0 {
		// POST: dynamic user

		uid, err := userGetFreeUid(s)
		if err != nil {
			return u, err
		}
		u.Uid = uid
	}

	if u.Group != "" {
		// POST: gid must be retrieved by existing file.
		mGroups, err := ParseGroup(GroupsDefault(""))
		if err != nil {
			return u, errors.Wrap(err, "Error on retrieve group information")
		}

		g, ok := mGroups[u.Group]
		if !ok {
			return u, errors.Wrap(err, fmt.Sprintf("The group %s is not present", u.Group))
		}

		u.Gid = *g.Gid
		// Avoid this operation if prepare is called multiple times.
		u.Group = ""
	}

	if u.Info == "" {
		u.Info = "Created by entities"
	}

	return u, nil
}

func (u UserPasswd) String() string {
	return strings.Join([]string{u.Username,
		u.Password,
		strconv.Itoa(u.Uid),
		strconv.Itoa(u.Gid),
		u.Info,
		u.Homedir,
		u.Shell,
	}, ":")
}

func (u UserPasswd) Delete(s string) error {
	s = UserDefault(s)
	input, err := ioutil.ReadFile(s)
	if err != nil {
		return errors.Wrap(err, "Could not read input file")
	}
	permissions, err := permbits.Stat(s)
	if err != nil {
		return errors.Wrap(err, "Failed getting permissions")
	}
	lines := bytes.Replace(input, []byte(u.String()+"\n"), []byte(""), 1)

	err = ioutil.WriteFile(s, []byte(lines), os.FileMode(permissions))
	if err != nil {
		return errors.Wrap(err, "Could not write")
	}

	return nil
}

func (u UserPasswd) Create(s string) error {
	s = UserDefault(s)

	u, err := u.prepare(s)
	if err != nil {
		return errors.Wrap(err, "Failed entity preparation")
	}

	current, err := passwd.ParseFile(s)
	if err != nil {
		return errors.Wrap(err, "Failed parsing passwd")
	}
	if _, ok := current[u.Username]; ok {
		return errors.New("Entity already present")
	}
	permissions, err := permbits.Stat(s)
	if err != nil {
		return errors.Wrap(err, "Failed getting permissions")
	}
	f, err := os.OpenFile(s, os.O_APPEND|os.O_WRONLY, os.FileMode(permissions))
	if err != nil {
		return errors.Wrap(err, "Could not read")
	}

	defer f.Close()

	if _, err = f.WriteString(u.String() + "\n"); err != nil {
		return errors.Wrap(err, "Could not write")
	}
	return nil
}

func (u UserPasswd) Apply(s string, safe bool) error {
	if u.Username == "" {
		return errors.New("Empty username field")
	}

	s = UserDefault(s)

	u, err := u.prepare(s)
	if err != nil {
		return errors.Wrap(err, "Failed entity preparation")
	}

	current, err := ParseUser(s)
	if err != nil {
		return err
	}

	permissions, err := permbits.Stat(s)
	if err != nil {
		return errors.Wrap(err, "Failed getting permissions")
	}

	if safe {
		mUids := make(map[int]*UserPasswd)

		// Create uids map to check uid mismatch
		// Maybe could be done always
		for _, e := range current {
			mUids[e.Uid] = &e
		}

		if e, present := mUids[u.Uid]; present {
			if e.Username != u.Username {
				return errors.Wrap(err,
					fmt.Sprintf("Uid %d is already used on user %s",
						u.Uid, e.Username))
			}
		}
	}

	if _, ok := current[u.Username]; ok {

		input, err := ioutil.ReadFile(s)
		if err != nil {
			return errors.Wrap(err, "Could not read input file")
		}

		lines := strings.Split(string(input), "\n")

		for i, line := range lines {
			if entityIdentifier(line) == u.Username {
				if !safe {
					lines[i] = u.String()
				}
			}
		}
		output := strings.Join(lines, "\n")
		err = ioutil.WriteFile(s, []byte(output), os.FileMode(permissions))
		if err != nil {
			return errors.Wrap(err, "Could not write")
		}

	} else {
		// Add it
		return u.Create(s)
	}

	return nil
}
070701000008E3000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003100000000elemental-cli-0.3.1/vendor/github.com/mudler/yip  070701000008E4000081A4000000000000000000000001645E367C00002C5E000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/LICENSE  
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
  070701000008E5000041ED000000000000000000000007645E367C00000000000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg  070701000008E6000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/executor 070701000008E7000081A4000000000000000000000001645E367C00002432000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/executor/default.go  //   Copyright 2020 Ettore Di Giacinto <mudler@mocaccino.org>
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.

package executor

import (
	"context"
	"encoding/json"
	"fmt"
	"os"
	"path/filepath"

	"github.com/hashicorp/go-multierror"
	"github.com/mudler/yip/pkg/logger"
	"github.com/mudler/yip/pkg/plugins"
	"github.com/mudler/yip/pkg/schema"
	"github.com/mudler/yip/pkg/utils"
	"github.com/spectrocloud-labs/herd"
	"github.com/twpayne/go-vfs"
)

// DefaultExecutor is the default yip Executor.
// It simply creates file and executes command for a linux executor
type DefaultExecutor struct {
	plugins      []Plugin
	conditionals []Plugin
	modifier     schema.Modifier
	logger       logger.Interface
}

func (e *DefaultExecutor) Plugins(p []Plugin) {
	e.plugins = p
}

func (e *DefaultExecutor) Conditionals(p []Plugin) {
	e.conditionals = p
}

func (e *DefaultExecutor) Modifier(m schema.Modifier) {
	e.modifier = m
}

type op struct {
	fn      func(context.Context) error
	deps    []string
	after   []string
	options []herd.OpOption
	name    string
}

type opList []*op

func (l opList) uniqueNames() {
	names := map[string]int{}

	for _, op := range l {
		if names[op.name] > 0 {
			op.name = fmt.Sprintf("%s.%d", op.name, names[op.name])
			names[op.name] = names[op.name] + 1
		} else {
			names[op.name] = 1
		}
	}
}

func (e *DefaultExecutor) applyStage(stage schema.Stage, fs vfs.FS, console plugins.Console) error {
	var errs error
	for _, p := range e.conditionals {
		if err := p(e.logger, stage, fs, console); err != nil {
			e.logger.Warnf("(conditional) Skip '%s' stage name: %s",
				err.Error(), stage.Name)
			return nil
		}
	}

	e.logger.Infof(
		"Processing stage step '%s'. ( commands: %d, files: %d, ... )",
		stage.Name,
		len(stage.Commands),
		len(stage.Files))

	b, _ := json.Marshal(stage)
	e.logger.Debugf("Stage: %s", string(b))

	for _, p := range e.plugins {
		if err := p(e.logger, stage, fs, console); err != nil {
			e.logger.Error(err.Error())
			errs = multierror.Append(errs, err)
		}
	}
	return errs
}

func (e *DefaultExecutor) genOpFromSchema(file, stage string, config schema.YipConfig, fs vfs.FS, console plugins.Console) []*op {
	results := []*op{}

	currentStages := config.Stages[stage]

	prev := ""
	for i, st := range currentStages {
		name := st.Name
		if name == "" {
			name = fmt.Sprint(i)
		}

		rootname := file
		if config.Name != "" {
			rootname = config.Name
		}

		// Copy here so it doesn't get overwritten and points to the same state
		stageLocal := st
		opName := fmt.Sprintf("%s.%s", rootname, name)

		e.logger.Debugf("Generating op for stage '%s'", opName)
		o := &op{
			fn: func(ctx context.Context) error {
				e.logger.Debugf("Reading '%s'", file)
				e.logger.Debugf("Executing stage '%s'", opName)
				return e.applyStage(stageLocal, fs, console)
			},
			name:    opName,
			options: []herd.OpOption{herd.WeakDeps},
		}

		for _, d := range st.After {
			o.after = append(o.after, d.Name)
		}

		if i != 0 && len(st.After) == 0 {
			o.deps = append(o.deps, prev)
		}

		results = append(results, o)

		prev = opName
	}

	return results
}

func (e *DefaultExecutor) dirOps(stage, dir string, fs vfs.FS, console plugins.Console) ([]*op, error) {
	results := []*op{}
	prev := []*op{}
	err := vfs.Walk(fs, dir,
		func(path string, info os.FileInfo, err error) error {
			if err != nil {
				return err
			}
			if path == dir {
				return nil
			}
			// Process only files
			if info.IsDir() {
				return nil
			}
			ext := filepath.Ext(path)
			if ext != ".yaml" && ext != ".yml" {
				return nil
			}

			config, err := schema.Load(path, fs, schema.FromFile, e.modifier)
			if err != nil {
				return err

			}
			ops := e.genOpFromSchema(path, stage, *config, fs, console)

			// mark lexicographic order dependency from previous blocks
			if len(prev) > 0 && len(ops) > 0 {
				for _, p := range prev {
					if len(p.after) == 0 {
						for _, o := range ops {
							o.deps = append(o.deps, p.name)
						}
					}
				}
			}
			prev = ops

			// append results
			results = append(results, ops...)
			return nil
		})
	return results, err
}

func writeDAG(dag [][]herd.GraphEntry) {
	for i, layer := range dag {
		fmt.Printf("%d.\n", (i + 1))
		for _, op := range layer {
			if op.Error != nil {
				fmt.Printf(" <%s> (error: %s) (background: %t) (weak: %t)\n", op.Name, op.Error.Error(), op.Background, op.WeakDeps)
			} else {
				fmt.Printf(" <%s> (background: %t) (weak: %t)\n", op.Name, op.Background, op.WeakDeps)
			}
		}
	}
	return
}

func (e *DefaultExecutor) Graph(stage string, fs vfs.FS, console plugins.Console, source string) ([][]herd.GraphEntry, error) {
	g, err := e.prepareDAG(stage, source, fs, console)
	if err != nil {
		return nil, err
	}
	return g.Analyze(), err
}

func (e *DefaultExecutor) Analyze(stage string, fs vfs.FS, console plugins.Console, args ...string) {
	var errs error
	for _, source := range args {
		g, err := e.prepareDAG(stage, source, fs, console)
		if err != nil {
			errs = multierror.Append(errs, err)
			continue
		}
		for i, layer := range g.Analyze() {
			e.logger.Infof("%d.", (i + 1))
			for _, op := range layer {
				if op.Error != nil {
					e.logger.Infof(" <%s> (error: %s) (background: %t) (weak: %t)", op.Name, op.Error.Error(), op.Background, op.WeakDeps)
				} else {
					e.logger.Infof(" <%s> (background: %t) (weak: %t)", op.Name, op.Background, op.WeakDeps)
				}
			}
		}
	}
}

func (e *DefaultExecutor) prepareDAG(stage, uri string, fs vfs.FS, console plugins.Console) (*herd.Graph, error) {
	f, err := fs.Stat(uri)

	g := herd.DAG(herd.EnableInit)
	var ops opList
	switch {
	case err == nil && f.IsDir():
		ops, err = e.dirOps(stage, uri, fs, console)
		if err != nil {
			return nil, err
		}
	case err == nil:
		config, err := schema.Load(uri, fs, schema.FromFile, e.modifier)
		if err != nil {
			return nil, err
		}

		ops = e.genOpFromSchema(uri, stage, *config, fs, console)
	case utils.IsUrl(uri):
		config, err := schema.Load(uri, fs, schema.FromUrl, e.modifier)
		if err != nil {
			return nil, err
		}

		ops = e.genOpFromSchema(uri, stage, *config, fs, console)
	default:
		config, err := schema.Load(uri, fs, nil, e.modifier)
		if err != nil {
			return nil, err
		}

		ops = e.genOpFromSchema("<STDIN>", stage, *config, fs, console)
	}

	// Ensure all names are unique
	ops.uniqueNames()
	for _, o := range ops {
		g.Add(o.name, append(o.options, herd.WithCallback(o.fn), herd.WithDeps(append(o.after, o.deps...)...))...)
	}

	return g, nil
}

func (e *DefaultExecutor) runStage(stage, uri string, fs vfs.FS, console plugins.Console) (err error) {
	g, err := e.prepareDAG(stage, uri, fs, console)
	if err != nil {
		return err
	}

	if g == nil {
		return fmt.Errorf("no dag could be created")
	}

	err = g.Run(context.Background())
	if err != nil {
		return err
	}

	for _, g := range g.Analyze() {
		for _, gg := range g {
			if gg.Error != nil {
				err = multierror.Append(err, gg.Error)
			}
		}
	}

	return err
}

// Run takes a list of URI to run yipfiles from. URI can be also a dir or a local path, as well as a remote
func (e *DefaultExecutor) Run(stage string, fs vfs.FS, console plugins.Console, args ...string) error {
	var errs error
	e.logger.Infof("Running stage: %s\n", stage)
	for _, source := range args {
		if err := e.runStage(stage, source, fs, console); err != nil {
			errs = multierror.Append(errs, err)
		}
	}
	e.logger.Infof("Done executing stage '%s'\n", stage)
	return errs
}

// Apply applies a yip Config file by creating files and running commands defined.
func (e *DefaultExecutor) Apply(stageName string, s schema.YipConfig, fs vfs.FS, console plugins.Console) error {
	currentStages := s.Stages[stageName]
	if len(currentStages) == 0 {
		e.logger.Debugf("No commands to run for %s %s\n", stageName, s.Name)
		return nil
	}

	e.logger.Infof("Applying '%s' for stage '%s'. Total stages: %d\n", s.Name, stageName, len(currentStages))

	var errs error
STAGES:
	for _, stage := range currentStages {
		for _, p := range e.conditionals {
			if err := p(e.logger, stage, fs, console); err != nil {
				e.logger.Warnf("Error '%s' in stage name: %s stage: %s\n",
					err.Error(), s.Name, stageName)
				continue STAGES
			}
		}

		e.logger.Infof(
			"Processing stage step '%s'. ( commands: %d, files: %d, ... )\n",
			stage.Name,
			len(stage.Commands),
			len(stage.Files))

		b, _ := json.Marshal(stage)
		e.logger.Debugf("Stage: %s", string(b))

		for _, p := range e.plugins {
			if err := p(e.logger, stage, fs, console); err != nil {
				e.logger.Error(err.Error())
				errs = multierror.Append(errs, err)
			}
		}
	}

	e.logger.Infof(
		"Stage '%s'. Defined stages: %d. Errors: %t\n",
		stageName,
		len(currentStages),
		errs != nil,
	)

	return errs
}
  070701000008E8000081A4000000000000000000000001645E367C00000A67000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/executor/executor.go //   Copyright 2020 Ettore Di Giacinto <mudler@mocaccino.org>
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.

package executor

import (
	"github.com/mudler/yip/pkg/logger"
	"github.com/mudler/yip/pkg/plugins"
	"github.com/sirupsen/logrus"
	"github.com/spectrocloud-labs/herd"
	"github.com/twpayne/go-vfs"

	"github.com/mudler/yip/pkg/schema"
)

// Executor an executor applies a yip config
type Executor interface {
	Apply(string, schema.YipConfig, vfs.FS, plugins.Console) error
	Run(string, vfs.FS, plugins.Console, ...string) error
	Plugins([]Plugin)
	Conditionals([]Plugin)
	Modifier(m schema.Modifier)
	Analyze(string, vfs.FS, plugins.Console, ...string)
	Graph(string, vfs.FS, plugins.Console, string) ([][]herd.GraphEntry, error)
}

type Plugin func(logger.Interface, schema.Stage, vfs.FS, plugins.Console) error

type Options func(d *DefaultExecutor) error

// WithLogger sets the logger for the cloudrunner
func WithLogger(i logger.Interface) Options {
	return func(d *DefaultExecutor) error {
		d.logger = i
		return nil
	}
}

// WithPlugins sets the plugins for the cloudrunner
func WithPlugins(p ...Plugin) Options {
	return func(d *DefaultExecutor) error {
		d.plugins = p
		return nil
	}
}

// WithConditionals sets the conditionals for the cloudrunner
func WithConditionals(p ...Plugin) Options {
	return func(d *DefaultExecutor) error {
		d.conditionals = p
		return nil
	}
}

// NewExecutor returns an executor from the stringified version of it.
func NewExecutor(opts ...Options) Executor {
	d := &DefaultExecutor{
		logger: logrus.New(),
		conditionals: []Plugin{
			plugins.NodeConditional,
			plugins.IfConditional,
		},
		plugins: []Plugin{
			plugins.DNS,
			plugins.Download,
			plugins.Git,
			plugins.Entities,
			plugins.EnsureDirectories,
			plugins.EnsureFiles,
			plugins.Commands,
			plugins.DeleteEntities,
			plugins.Hostname,
			plugins.Sysctl,
			plugins.User,
			plugins.SSH,
			plugins.LoadModules,
			plugins.Timesyncd,
			plugins.Systemctl,
			plugins.Environment,
			plugins.SystemdFirstboot,
			plugins.DataSources,
			plugins.Layout,
		},
	}

	for _, o := range opts {
		o(d)
	}
	return d
}
 070701000008E9000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/logger   070701000008EA000081A4000000000000000000000001645E367C00000429000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/logger/logger.go //   Copyright 2020 Ettore Di Giacinto <mudler@mocaccino.org>
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.

package logger

type Interface interface {
	Info(...interface{})
	Warn(...interface{})
	Debug(...interface{})
	Error(...interface{})
	Fatal(...interface{})
	Panic(...interface{})
	Trace(...interface{})
	Infof(string, ...interface{})
	Warnf(string, ...interface{})
	Debugf(string, ...interface{})
	Errorf(string, ...interface{})
	Fatalf(string, ...interface{})
	Panicf(string, ...interface{})
	Tracef(string, ...interface{})
}
   070701000008EB000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/plugins  070701000008EC000081A4000000000000000000000001645E367C00000222000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/plugins/commands.go  package plugins

import (
	"fmt"

	"github.com/hashicorp/go-multierror"
	"github.com/mudler/yip/pkg/logger"
	"github.com/mudler/yip/pkg/schema"
	"github.com/twpayne/go-vfs"
)

func Commands(l logger.Interface, s schema.Stage, fs vfs.FS, console Console) error {
	var errs error
	for _, cmd := range s.Commands {
		out, err := console.Run(templateSysData(l, cmd))
		if err != nil {
			l.Error(out, ": ", err.Error())
			errs = multierror.Append(errs, err)
			continue
		}
		l.Info(fmt.Sprintf("Command output: %s", string(out)))
	}
	return errs
}
  070701000008ED000081A4000000000000000000000001645E367C0000078B000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/plugins/common.go    package plugins

import (
	"crypto/tls"
	"encoding/json"
	"fmt"
	"io/ioutil"
	"net/http"
	"os/exec"
	"strings"
	"time"

	"github.com/mudler/yip/pkg/logger"
	"github.com/mudler/yip/pkg/utils"
	"github.com/pkg/errors"
	"github.com/zcalusic/sysinfo"
)

var system sysinfo.SysInfo

func init() {
	system.GetSysInfo()
}

type Console interface {
	Run(string, ...func(*exec.Cmd)) (string, error)
	Start(*exec.Cmd, ...func(*exec.Cmd)) error
	RunTemplate([]string, string) error
}

func templateSysData(l logger.Interface, s string) string {
	interpolateOpts := map[string]interface{}{}

	data, err := json.Marshal(&system)
	if err != nil {
		l.Warn(fmt.Sprintf("Failed marshalling '%s': %s", s, err.Error()))
		return s
	}
	l.Debug(string(data))

	err = json.Unmarshal(data, &interpolateOpts)
	if err != nil {
		l.Warn(fmt.Sprintf("Failed marshalling '%s': %s", s, err.Error()))
		return s
	}

	rendered, err := utils.TemplatedString(s, map[string]interface{}{"Values": interpolateOpts})
	if err != nil {
		l.Warn(fmt.Sprintf("Failed rendering '%s': %s", s, err.Error()))
		return s
	}
	return rendered
}

func download(url string) (string, error) {
	var resp *http.Response
	var err error
	client:= getHttpClient()
	for i := 0; i < 10; i++ {
		resp, err = client.Get(url)
		if err == nil || strings.Contains(err.Error(), "unsupported protocol scheme") {
			break
		}
		time.Sleep(time.Second)
	}
	if err != nil {
		return "", errors.Wrap(err, "failed while getting file")
	}
	if resp.Body != nil {
		defer resp.Body.Close()
	}
	if resp.StatusCode/100 > 2 {
		return "", fmt.Errorf("%s %s", resp.Proto, resp.Status)
	}
	bytes, err := ioutil.ReadAll(resp.Body)
	return string(bytes), err
}

func getHttpClient() *http.Client {
	return &http.Client{
		Transport: &http.Transport{
			Proxy: http.ProxyFromEnvironment,
			TLSClientConfig: &tls.Config{
				Certificates:       []tls.Certificate{},
				InsecureSkipVerify: true,
			},
		},
	}
} 070701000008EE000081A4000000000000000000000001645E367C000016E8000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/plugins/datasource.go    package plugins

import (
	"bufio"
	"fmt"
	"os"
	"os/user"
	"path"
	"strings"

	"github.com/pkg/errors"

	"github.com/mudler/yip/pkg/logger"
	"github.com/mudler/yip/pkg/schema"
	prv "github.com/rancher-sandbox/linuxkit/providers"
	"github.com/twpayne/go-vfs"
)

func DataSources(l logger.Interface, s schema.Stage, fs vfs.FS, console Console) error {
	var AvailableProviders = []prv.Provider{}

	if s.DataSources.Providers == nil || len(s.DataSources.Providers) == 0 {
		return nil
	}

	for _, dSProviders := range s.DataSources.Providers {
		switch {
		case dSProviders == "aws":
			AvailableProviders = append(AvailableProviders, prv.NewAWS())
		case dSProviders == "azure":
			AvailableProviders = append(AvailableProviders, prv.NewAzure())
		case dSProviders == "gcp":
			AvailableProviders = append(AvailableProviders, prv.NewGCP())
		case dSProviders == "hetzner":
			AvailableProviders = append(AvailableProviders, prv.NewHetzner())
		case dSProviders == "openstack":
			AvailableProviders = append(AvailableProviders, prv.NewOpenstack())
		case dSProviders == "packet":
			AvailableProviders = append(AvailableProviders, prv.NewPacket())
		case dSProviders == "scaleway":
			AvailableProviders = append(AvailableProviders, prv.NewScaleway())
		case dSProviders == "vultr":
			AvailableProviders = append(AvailableProviders, prv.NewVultr())
		case dSProviders == "digitalocean":
			AvailableProviders = append(AvailableProviders, prv.NewDigitalOcean())
		case dSProviders == "metaldata":
			AvailableProviders = append(AvailableProviders, prv.NewMetalData())
		case dSProviders == "vmware":
			AvailableProviders = append(AvailableProviders, prv.NewVMware())
		case dSProviders == "cdrom":
			AvailableProviders = append(AvailableProviders, prv.ListCDROMs()...)
		case dSProviders == "file" && s.DataSources.Path != "":
			AvailableProviders = append(AvailableProviders, prv.FileProvider(s.DataSources.Path))
		}
	}

	if err := EnsureDirectories(l, schema.Stage{
		Directories: []schema.Directory{
			{
				Path:        prv.ConfigPath,
				Permissions: 0755,
				Owner:       os.Getuid(),
				Group:       os.Getgid(),
			},
		},
	}, fs, console); err != nil {
		return err
	}

	var p prv.Provider
	var userdata []byte
	var err error
	found := false
	for _, p = range AvailableProviders {
		if p.Probe() {
			userdata, err = p.Extract()
			if err != nil {
				l.Warnf("Failed extracting data from %s provider: %s", p.String(), err.Error())
			}
			found = true
			break
		}
	}

	if !found {
		return fmt.Errorf("No metadata/userdata found. Bye")
	}

	err = writeToFile(l, path.Join(prv.ConfigPath, "provider"), p.String(), 0644, fs, console)
	if err != nil {
		return err
	}

	basePath := prv.ConfigPath
	if s.DataSources.Path != "" && s.DataSources.Path != p.String() {
		basePath = s.DataSources.Path
	}

	if userdata != nil {
		if err := processUserData(l, basePath, userdata, fs, console); err != nil {
			return err
		}
	}

	//Apply the hostname if the provider extracted a hostname file
	if _, err := fs.Stat(path.Join(prv.ConfigPath, prv.Hostname)); err == nil {
		if err := processHostnameFile(l, fs, console); err != nil {
			return err
		}
	}

	//Apply the authorized_keys if the provider extracted a ssh/authorized_keys file
	if _, err := fs.Stat(path.Join(prv.ConfigPath, prv.SSH, authorizedFile)); err == nil {
		if err := processSSHFile(l, fs, console); err != nil {
			return err
		}
	}
	return nil
}

func processHostnameFile(l logger.Interface, fs vfs.FS, console Console) error {
	hostname, err := fs.ReadFile(path.Join(prv.ConfigPath, prv.Hostname))
	if err != nil {
		return err
	}

	return Hostname(l, schema.Stage{Hostname: string(hostname)}, fs, console)
}

func processSSHFile(l logger.Interface, fs vfs.FS, console Console) error {
	auth_keys, err := fs.ReadFile(path.Join(prv.ConfigPath, prv.SSH, authorizedFile))
	if err != nil {
		return err
	}
	var keys []string
	var line string
	usr, err := user.Current()
	if err != nil {
		return errors.Wrap(err, "could not get current user info")
	}

	scanner := bufio.NewScanner(strings.NewReader(string(auth_keys)))
	for scanner.Scan() {
		line = strings.TrimSpace(scanner.Text())
		if line != "" && !strings.HasPrefix(line, "#") {
			keys = append(keys, line)
		}
	}
	return SSH(l, schema.Stage{SSHKeys: map[string][]string{usr.Username: keys}}, fs, console)
}

// If userdata can be parsed as a yipConfig file will create a <basePath>/userdata.yaml file
func processUserData(l logger.Interface, basePath string, data []byte, fs vfs.FS, console Console) error {
	dataS := string(data)

	// always save unprocessed data to "userdata"
	if err := writeToFile(l, path.Join(basePath, "userdata"), dataS, 0644, fs, console); err != nil {
		return err
	}

	if _, err := schema.Load(dataS, fs, nil, nil); err == nil {
		return writeToFile(l, path.Join(basePath, "userdata.yaml"), dataS, 0644, fs, console)
	}

	scanner := bufio.NewScanner(strings.NewReader(dataS))
	scanner.Scan()
	if strings.HasPrefix(scanner.Text(), "#!") {
		l.Infof("Found shebang '%s' excuting user-data as a script\n", scanner.Text())
		script := path.Join(basePath, "userdata")
		err := writeToFile(l, script, dataS, 0744, fs, console)
		if err != nil {
			return err
		}
		l.Infof("Running %s\n", script)
		out, err := console.Run(script)
		if err != nil {
			return err
		}
		l.Info(out)
		return nil
	}

	l.Info("Could not unmarshall userdata and no shebang detected")
	return nil
}

func writeToFile(l logger.Interface, filename string, content string, perm uint32, fs vfs.FS, console Console) error {
	err := EnsureFiles(l, schema.Stage{
		Files: []schema.File{
			{
				Path:        filename,
				Content:     content,
				Permissions: perm,
				Owner:       os.Getuid(),
				Group:       os.Getgid(),
			},
		},
	}, fs, console)
	if err != nil {
		return errors.Wrap(err, "could not write file")
	}
	return nil
}
070701000008EF000081A4000000000000000000000001645E367C000006EF000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/plugins/dir.go   package plugins

import (
	"fmt"
	"os"
	"path/filepath"

	"github.com/hashicorp/go-multierror"
	"github.com/mudler/yip/pkg/logger"
	"github.com/mudler/yip/pkg/schema"
	"github.com/twpayne/go-vfs"
)

func EnsureDirectories(l logger.Interface, s schema.Stage, fs vfs.FS, console Console) error {
	var errs error
	for _, dir := range s.Directories {
		if err := writePath(l, dir, fs, true); err != nil {
			l.Error(err.Error())
			errs = multierror.Append(errs, err)
			continue
		}
	}
	return errs
}

func writeDirectory(l logger.Interface, dir schema.Directory, fs vfs.FS) error {
	l.Debug("Creating directory ", dir.Path)
	err := fs.Mkdir(dir.Path, os.FileMode(dir.Permissions))
	if err != nil {
		return err
	}

	return fs.Chown(dir.Path, dir.Owner, dir.Group)
}

func writePath(l logger.Interface, dir schema.Directory, fs vfs.FS, topLevel bool) error {
	inf, err := fs.Stat(dir.Path)
	if err == nil && inf.IsDir() && topLevel {
		// The path already exists, apply permissions and ownership only
		err = fs.Chmod(dir.Path, os.FileMode(dir.Permissions))
		if err != nil {
			return err
		}
		return fs.Chown(dir.Path, dir.Owner, dir.Group)
	} else if err == nil && !inf.IsDir() {
		return fmt.Errorf("Error, '%s' already exists and it is not a directory", dir.Path)
	} else if err == nil {
		return nil
	} else {
		parentDir := filepath.Dir(dir.Path)
		_, err = fs.Stat(parentDir)
		if parentDir == "/" || parentDir == "." || err == nil {
			//There is no parent dir or it already exists
			return writeDirectory(l, dir, fs)
		} else {
			//Parent dir needs to be created
			pDir := schema.Directory{parentDir, dir.Permissions, dir.Owner, dir.Group}
			err = writePath(l, pDir, fs, false)
			if err != nil {
				return err
			}
			return writeDirectory(l, dir, fs)
		}
	}
}
 070701000008F0000081A4000000000000000000000001645E367C0000021B000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/plugins/dns.go   package plugins

import (
	"github.com/moby/moby/libnetwork/resolvconf"
	"github.com/twpayne/go-vfs"

	"github.com/mudler/yip/pkg/logger"
	"github.com/mudler/yip/pkg/schema"
)

func DNS(l logger.Interface, s schema.Stage, fs vfs.FS, console Console) error {
	if len(s.Dns.Nameservers) != 0 {
		return applyDNS(s)
	}
	return nil
}

func applyDNS(s schema.Stage) error {
	path := s.Dns.Path
	if path == "" {
		path = "/etc/resolv.conf"
	}
	_, err := resolvconf.Build(path, s.Dns.Nameservers, s.Dns.DnsSearch, s.Dns.DnsOptions)
	return err
}
 070701000008F1000081A4000000000000000000000001645E367C000007AB000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/plugins/download.go  package plugins

import (
	"net/http"
	"os"
	"time"

	"github.com/cavaliergopher/grab"
	"github.com/hashicorp/go-multierror"
	"github.com/mudler/yip/pkg/logger"
	"github.com/mudler/yip/pkg/schema"
	"github.com/mudler/yip/pkg/utils"
	"github.com/pkg/errors"
	log "github.com/sirupsen/logrus"
	"github.com/twpayne/go-vfs"
)

func grabClient(timeout int) *grab.Client {
	return &grab.Client{
		UserAgent: "grab",
		HTTPClient: &http.Client{
			Timeout: time.Duration(timeout) * time.Second,
			Transport: &http.Transport{
				Proxy: http.ProxyFromEnvironment,
			},
		},
	}
}

func Download(l logger.Interface, s schema.Stage, fs vfs.FS, console Console) error {
	var errs error
	for _, dl := range s.Downloads {
		d := &dl
		realPath, err := fs.RawPath(d.Path)
		if err == nil {
			d.Path = realPath
		}
		if err := downloadFile(l, *d); err != nil {
			log.Error(err.Error())
			errs = multierror.Append(errs, err)
			continue
		}
	}
	return errs
}

func downloadFile(l logger.Interface, dl schema.Download) error {
	l.Debug("Downloading file ", dl.Path, dl.URL)
	client := grabClient(dl.Timeout)

	req, err := grab.NewRequest(dl.Path, dl.URL)
	if err != nil {
		return err
	}
	resp := client.Do(req)

	t := time.NewTicker(500 * time.Millisecond)
	defer t.Stop()

Loop:
	for {
		select {
		case <-t.C:
			l.Debugf("  transferred %v / %v bytes (%.2f%%)\n",
				resp.BytesComplete(),
				resp.Size,
				100*resp.Progress())

		case <-resp.Done:
			// download is complete
			break Loop
		}
	}

	if err := resp.Err(); err != nil {
		return err
	}

	file := resp.Filename
	err = os.Chmod(file, os.FileMode(dl.Permissions))
	if err != nil {
		return err

	}

	if dl.OwnerString != "" {
		// FIXUP: Doesn't support fs. It reads real /etc/passwd files
		uid, gid, err := utils.GetUserDataFromString(dl.OwnerString)
		if err != nil {
			return errors.Wrap(err, "Failed getting gid")
		}
		return os.Chown(dl.Path, uid, gid)
	}

	return os.Chown(file, dl.Owner, dl.Group)
}
 070701000008F2000081A4000000000000000000000001645E367C00000655000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/plugins/entities.go  package plugins

import (
	"github.com/hashicorp/go-multierror"
	entities "github.com/mudler/entities/pkg/entities"
	"github.com/mudler/yip/pkg/logger"
	"github.com/mudler/yip/pkg/schema"
	"github.com/twpayne/go-vfs"
)

func Entities(l logger.Interface, s schema.Stage, fs vfs.FS, console Console) error {
	var errs error
	if len(s.EnsureEntities) > 0 {
		if err := ensureEntities(l, s); err != nil {
			l.Error(err.Error())
			errs = multierror.Append(errs, err)
		}
	}
	return errs
}

func DeleteEntities(l logger.Interface, s schema.Stage, fs vfs.FS, console Console) error {
	var errs error
	if len(s.DeleteEntities) > 0 {
		if err := deleteEntities(l, s); err != nil {
			errs = multierror.Append(errs, err)
		}
	}
	return errs
}

func deleteEntities(l logger.Interface, s schema.Stage) error {
	var errs error
	entityParser := entities.Parser{}
	for _, e := range s.DeleteEntities {
		decodedE, err := entityParser.ReadEntityFromBytes([]byte(templateSysData(l, e.Entity)))
		if err != nil {
			errs = multierror.Append(errs, err)
			continue
		}
		err = decodedE.Delete(e.Path)
		if err != nil {
			errs = multierror.Append(errs, err)
			continue
		}
	}
	return errs
}

func ensureEntities(l logger.Interface, s schema.Stage) error {
	var errs error
	entityParser := entities.Parser{}
	for _, e := range s.EnsureEntities {
		decodedE, err := entityParser.ReadEntityFromBytes([]byte(templateSysData(l, e.Entity)))
		if err != nil {
			errs = multierror.Append(errs, err)
			continue
		}
		err = decodedE.Apply(e.Path, false)
		if err != nil {
			errs = multierror.Append(errs, err)
			continue
		}
	}
	return errs
}
   070701000008F3000081A4000000000000000000000001645E367C000005D9000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/plugins/environment.go   package plugins

import (
	"os"
	"path/filepath"

	"github.com/joho/godotenv"
	"github.com/mudler/yip/pkg/logger"
	"github.com/mudler/yip/pkg/schema"
	"github.com/mudler/yip/pkg/utils"
	"github.com/pkg/errors"
	"github.com/twpayne/go-vfs"
)

const environmentFile = "/etc/environment"
const envFilePerm uint32 = 0644

func Environment(l logger.Interface, s schema.Stage, fs vfs.FS, console Console) error {
	if len(s.Environment) == 0 {
		return nil
	}
	environment := s.EnvironmentFile
	if environment == "" {
		environment = environmentFile
	}

	parentDir := filepath.Dir(environment)
	_, err := fs.Stat(parentDir)
	if err != nil {
		perm := envFilePerm
		if perm < 0700 {
			perm = perm + 0100
		}
		if err = EnsureDirectories(l, schema.Stage{
			Directories: []schema.Directory{
				{
					Path:        parentDir,
					Permissions: perm,
					Owner:       os.Getuid(),
					Group:       os.Getgid(),
				},
			},
		}, fs, console); err != nil {
			return err
		}
	}

	if err := utils.Touch(environment, os.ModePerm, fs); err != nil {
		return errors.Wrap(err, "failed touching environment file")
	}

	content, err := fs.ReadFile(environment)
	if err != nil {
		return err
	}

	env, _ := godotenv.Unmarshal(string(content))
	for key, val := range s.Environment {
		env[key] = templateSysData(l, val)
	}

	p, err := fs.RawPath(environment)
	if err != nil {
		return err
	}
	err = godotenv.Write(env, p)
	if err != nil {
		return err
	}

	return fs.Chmod(environment, os.FileMode(envFilePerm))
}
   070701000008F4000081A4000000000000000000000001645E367C000001CD000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/plugins/file_decoder.go  package plugins

type decoder interface {
	Decode(content string) ([]byte, error)
}

func newDecoder(s string) decoder {
	switch s {
	case "b64", "base64":
		return base64Decoder{}
	case "gz", "gzip":
		return gzipDecoder{}
	case "gz+base64", "gzip+base64", "gz+b64", "gzip+b64":
		return base64GZip{}
	default:
		return byteDecoder{}
	}
}

type byteDecoder struct {
}

func (byteDecoder) Decode(content string) ([]byte, error) {
	return []byte(content), nil
}
   070701000008F5000081A4000000000000000000000001645E367C00000258000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/plugins/file_gzip_decoder.go package plugins

import (
	"bytes"
	"compress/gzip"
	"fmt"

	"github.com/sirupsen/logrus"
)

type gzipDecoder struct{}

func (gzipDecoder) Decode(content string) ([]byte, error) {
	gzr, err := gzip.NewReader(bytes.NewReader([]byte(content)))
	if err != nil {
		return nil, fmt.Errorf("unable to decode gzip: %q", err)
	}
	defer func() {
		if err := gzr.Close(); err != nil {
			logrus.Errorf("unable to close gzip reader: %q", err)
		}
	}()
	buf := new(bytes.Buffer)
	if _, err := buf.ReadFrom(gzr); err != nil {
		return nil, fmt.Errorf("unable to read gzip: %q", err)
	}
	return buf.Bytes(), nil
}
070701000008F6000081A4000000000000000000000001645E367C000007E8000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/plugins/files.go package plugins

import (
	"os"
	"path/filepath"

	"github.com/hashicorp/go-multierror"
	"github.com/mudler/yip/pkg/logger"
	"github.com/mudler/yip/pkg/schema"
	"github.com/mudler/yip/pkg/utils"
	"github.com/pkg/errors"
	"github.com/twpayne/go-vfs"
)

func EnsureFiles(l logger.Interface, s schema.Stage, fs vfs.FS, console Console) error {
	var errs error
	for _, file := range s.Files {
		if err := writeFile(l, file, fs, console); err != nil {
			l.Error(err.Error())
			errs = multierror.Append(errs, err)
			continue
		}
	}
	return errs
}

func writeFile(l logger.Interface, file schema.File, fs vfs.FS, console Console) error {
	l.Debug("Creating file ", file.Path)
	parentDir := filepath.Dir(file.Path)
	_, err := fs.Stat(parentDir)
	if err != nil {
		l.Debug("Creating parent directories")
		perm := file.Permissions
		if perm < 0700 {
			l.Debug("Adding execution bit to parent directory")
			perm = perm + 0100
		}
		if err = EnsureDirectories(l, schema.Stage{
			Directories: []schema.Directory{
				{
					Path:        parentDir,
					Permissions: perm,
					Owner:       file.Owner,
					Group:       file.Group,
				},
			},
		}, fs, console); err != nil {
			l.Infof("Failed to write %s: %s", parentDir, err)
			return err
		}
	}
	fsfile, err := fs.Create(file.Path)
	if err != nil {
		return err
	}
	defer fsfile.Close()

	d := newDecoder(file.Encoding)
	c, err := d.Decode(file.Content)
	if err != nil {
		return errors.Wrapf(err, "failed decoding content with encoding %s", file.Encoding)
	}

	_, err = fsfile.WriteString(templateSysData(l, string(c)))
	if err != nil {
		return err

	}
	err = fs.Chmod(file.Path, os.FileMode(file.Permissions))
	if err != nil {
		return err

	}

	if file.OwnerString != "" {
		// FIXUP: Doesn't support fs. It reads real /etc/passwd files
		uid, gid, err := utils.GetUserDataFromString(file.OwnerString)
		if err != nil {
			return errors.Wrap(err, "Failed getting gid")
		}
		return fs.Chown(file.Path, uid, gid)
	}

	return fs.Chown(file.Path, file.Owner, file.Group)
}
070701000008F7000081A4000000000000000000000001645E367C0000025E000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/plugins/files_base64_decoder.go  package plugins

import (
	"encoding/base64"
	"fmt"

	"github.com/pkg/errors"
)

type base64Decoder struct{}

func (base64Decoder) Decode(content string) ([]byte, error) {
	output, err := base64.StdEncoding.DecodeString(content)
	if err != nil {
		return nil, fmt.Errorf("unable to decode base64: %q", err)
	}
	return output, nil
}

type base64GZip struct{}

func (base64GZip) Decode(content string) ([]byte, error) {
	b := base64Decoder{}
	c, err := b.Decode(content)
	if err != nil {
		return []byte{}, errors.Wrap(err, "while reading base64 data")
	}

	g := gzipDecoder{}

	return g.Decode(string(c))
}
  070701000008F8000081A4000000000000000000000001645E367C00000E21000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/plugins/git.go   //   Copyright 2021 Ettore Di Giacinto <mudler@mocaccino.org>
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.

package plugins

import (
	"path/filepath"

	git "github.com/go-git/go-git/v5"
	"github.com/go-git/go-git/v5/plumbing"
	"github.com/go-git/go-git/v5/plumbing/transport"
	gith "github.com/go-git/go-git/v5/plumbing/transport/http"
	ssh2 "github.com/go-git/go-git/v5/plumbing/transport/ssh"
	"github.com/mudler/yip/pkg/logger"
	"github.com/mudler/yip/pkg/schema"
	"github.com/mudler/yip/pkg/utils"
	"github.com/pkg/errors"
	"github.com/twpayne/go-vfs"
	"golang.org/x/crypto/ssh"
)

func Git(l logger.Interface, s schema.Stage, fs vfs.FS, console Console) error {
	if s.Git.URL == "" {
		return nil
	}

	branch := "master"
	if s.Git.Branch != "" {
		branch = s.Git.Branch
	}

	gitconfig := s.Git
	path, err := fs.RawPath(s.Git.Path)
	if err != nil {
		return err
	}
	l.Infof("Cloning git repository '%s'", s.Git.URL)

	if utils.Exists(filepath.Join(path, ".git")) {
		l.Info("Repository already exists, updating it")
		// is a git repo, update it
		// We instantiate a new repository targeting the given path (the .git folder)
		r, err := git.PlainOpen(path)
		if err != nil {
			return err
		}

		w, err := r.Worktree()
		if err != nil {
			return err
		}

		err = w.Pull(&git.PullOptions{
			Auth:            authMethod(s),
			SingleBranch:    s.Git.BranchOnly,
			Force:           true,
			InsecureSkipTLS: s.Git.Auth.Insecure,
		})
		if err != nil && err != git.NoErrAlreadyUpToDate {
			return err
		}

		err = w.Reset(&git.ResetOptions{
			Commit: plumbing.NewHash(branch),
			Mode:   git.HardReset,
		})

		if err != nil {
			return err
		}
		return nil

	}

	opts := &git.CloneOptions{
		URL:          gitconfig.URL,
		SingleBranch: s.Git.BranchOnly,
	}

	applyOptions(s, opts)

	_, err = git.PlainClone(path, false, opts)
	if err != nil {
		return errors.Wrap(err, "failed cloning repo")
	}
	return nil
}

func authMethod(s schema.Stage) transport.AuthMethod {
	var t transport.AuthMethod

	if s.Git.Auth.Username != "" {
		t = &gith.BasicAuth{Username: s.Git.Auth.Username, Password: s.Git.Auth.Password}
	}

	if s.Git.Auth.PrivateKey != "" {
		signer, err := ssh.ParsePrivateKey([]byte(s.Git.Auth.PrivateKey))
		if err != nil {
			return t
		}

		userName := "git"
		if s.Git.Auth.Username != "" {
			userName = s.Git.Auth.Username
		}
		sshAuth := &ssh2.PublicKeys{
			User:   userName,
			Signer: signer,
		}
		if s.Git.Auth.Insecure {
			sshAuth.HostKeyCallbackHelper = ssh2.HostKeyCallbackHelper{
				HostKeyCallback: ssh.InsecureIgnoreHostKey(),
			}
		}
		if s.Git.Auth.PublicKey != "" {
			key, err := ssh.ParsePublicKey([]byte(s.Git.Auth.PublicKey))
			if err != nil {
				return t
			}
			sshAuth.HostKeyCallbackHelper = ssh2.HostKeyCallbackHelper{
				HostKeyCallback: ssh.FixedHostKey(key),
			}
		}

		t = sshAuth
	}
	return t
}

func applyOptions(s schema.Stage, g *git.CloneOptions) {

	g.Auth = authMethod(s)

	if s.Git.Branch != "" {
		g.ReferenceName = plumbing.NewBranchReferenceName(s.Git.Branch)
	}
	if s.Git.BranchOnly {
		g.SingleBranch = true
	}
}
   070701000008F9000081A4000000000000000000000001645E367C000007D3000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/plugins/hostname.go  package plugins

import (
	"bufio"
	"fmt"
	"math/rand"
	"strings"
	"syscall"
	"time"

	"github.com/denisbrodbeck/machineid"
	"github.com/hashicorp/go-multierror"
	"github.com/mudler/yip/pkg/logger"
	"github.com/mudler/yip/pkg/schema"
	"github.com/mudler/yip/pkg/utils"
	uuid "github.com/satori/go.uuid"
	"github.com/twpayne/go-vfs"
)

const localHost = "127.0.0.1"

func Hostname(l logger.Interface, s schema.Stage, fs vfs.FS, console Console) error {
	var errs error
	hostname := s.Hostname
	if hostname == "" {
		return nil
	}

	// Template the input string with random generated strings and UUID.
	// Those can be used to e.g. generate random node names based on patterns "foo-{{.UUID}}"
	rand.Seed(time.Now().UnixNano())

	id, _ := machineid.ID()
	myuuid, err := uuid.NewV4()
	if err != nil {
		return err
	}
	tmpl, err := utils.TemplatedString(hostname,
		struct {
			UUID      string
			Random    string
			MachineID string
		}{
			UUID:      myuuid.String(),
			MachineID: id,
			Random:    utils.RandomString(32),
		},
	)
	if err != nil {
		return err
	}

	if err := syscall.Sethostname([]byte(tmpl)); err != nil {
		errs = multierror.Append(errs, err)
	}
	if err := SystemHostname(tmpl, fs); err != nil {
		errs = multierror.Append(errs, err)
	}
	if err := UpdateHostsFile(tmpl, fs); err != nil {
		errs = multierror.Append(errs, err)
	}
	return errs
}

func UpdateHostsFile(hostname string, fs vfs.FS) error {
	hosts, err := fs.Open("/etc/hosts")
	if err != nil {
		return err
	}
	defer hosts.Close()

	lines := bufio.NewScanner(hosts)
	content := ""
	for lines.Scan() {
		line := strings.TrimSpace(lines.Text())
		fields := strings.Fields(line)
		if len(fields) > 0 && fields[0] == localHost {
			content += fmt.Sprintf("%s localhost %s\n", localHost, hostname)
			continue
		}
		content += line + "\n"
	}
	return fs.WriteFile("/etc/hosts", []byte(content), 0600)
}

func SystemHostname(hostname string, fs vfs.FS) error {
	return fs.WriteFile("/etc/hostname", []byte(hostname+"\n"), 0644)
}
 070701000008FA000081A4000000000000000000000001645E367C000001C3000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/plugins/if.go    package plugins

import (
	"fmt"

	"github.com/mudler/yip/pkg/logger"
	"github.com/mudler/yip/pkg/schema"
	"github.com/twpayne/go-vfs"
)

func IfConditional(l logger.Interface, s schema.Stage, fs vfs.FS, console Console) error {
	if len(s.If) > 0 {
		out, err := console.Run(templateSysData(l, s.If))
		if err != nil {
			return fmt.Errorf("Skipping stage (if statement error: %w)", err)
		}
		l.Debugf("If statement result %s", out)
	}
	return nil
}
 070701000008FB000081A4000000000000000000000001645E367C00004DB3000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/plugins/layout.go    package plugins

import (
	"bufio"
	"errors"
	"fmt"
	"os"
	"regexp"
	"strconv"
	"strings"
	"time"

	"github.com/mudler/yip/pkg/logger"
	"github.com/mudler/yip/pkg/schema"
	"github.com/twpayne/go-vfs"
)

type Disk struct {
	Device  string
	SectorS uint
	LastS   uint
	Parts   []Partition
}

// We only manage sizes in sectors unit for the Partition struct and sgdisk wrapper
type Partition struct {
	Number     int
	StartS     uint
	SizeS      uint
	PLabel     string
	FileSystem string
	FSLabel    string
	Type       string
}

type GdiskCall struct {
	dev       string
	wipe      bool
	parts     []*Partition
	deletions []int
	expand    bool
	pretend   bool
}

type MkfsCall struct {
	part       Partition
	customOpts []string
	dev        string
}

const (
	partitionTries = 10
)

func Layout(l logger.Interface, s schema.Stage, fs vfs.FS, console Console) error {
	if s.Layout.Device == nil {
		return nil
	}

	var dev Disk
	var err error
	for _, l := range s.Layout.Parts {
		if l.FileSystem == "xfs" && len(l.FSLabel) > 12 {
			return errors.New(fmt.Sprintf("xfs filesystem %s cannot have a label longer than 12 chars", l.FSLabel))
		}
	}
	if len(strings.TrimSpace(s.Layout.Device.Label)) > 0 {
		dev, err = FindDiskFromPartitionLabel(l, s.Layout.Device.Label, console)
		if err != nil {
			l.Warnf("Exiting, disk not found:\n %s", err.Error())
			return nil
		}
	} else if len(strings.TrimSpace(s.Layout.Device.Path)) > 0 {
		dev, err = FindDiskFromPath(s.Layout.Device.Path, console)
		if err != nil {
			l.Warnf("Exiting, disk not found:\n %s", err.Error())
			return nil
		}
	} else {
		return nil
	}

	changed := false

	// Check there is a minimum of 32MiB of free space in disk
	if !dev.CheckDiskFreeSpaceMiB(l, 32, console) {
		l.Warnf("Not enough unpartitioned space in disk to operate")
		return nil
	}

	if s.Layout.Expand != nil {
		l.Infof("Extending last partition up to %d MiB", s.Layout.Expand.Size)
		out, err := dev.ExpandLastPartition(l, s.Layout.Expand.Size, console)
		if err != nil {
			l.Error(out)
			return err
		}
		changed = true
	}

	for _, part := range s.Layout.Parts {
		if match := MatchPartitionFSLabel(l, part.FSLabel, console); match != "" {
			l.Warnf("Partition with FSLabel: %s already exists, ignoring", part.FSLabel)
			continue
		} else if match := MatchPartitionPLabel(l, part.PLabel, console); match != "" {
			l.Warnf("Partition with PLabel: %s already exists, ignoring", part.PLabel)
			continue
		}
		// Set default filesystem
		if part.FileSystem == "" {
			part.FileSystem = "ext2"
		}

		l.Infof("Creating %s partition", part.FSLabel)
		out, err := dev.AddPartition(l, part.FSLabel, part.Size, part.FileSystem, part.PLabel, console)
		if err != nil {
			l.Error(out)
			return err
		}
		changed = true
	}

	if changed {
		dev.ReloadPartitionTable(l, console)
	}
	return nil
}

func MatchPartitionFSLabel(l logger.Interface, label string, console Console) string {
	if label != "" {
		out, _ := console.Run("udevadm settle")
		l.Debugf("Output of udevadm settle: %s", out)
		out, err := console.Run(fmt.Sprintf("blkid -l --match-token LABEL=%s -o device", label))
		if err == nil {
			return out
		}
	}
	return ""
}

func MatchPartitionPLabel(l logger.Interface, label string, console Console) string {
	if label != "" {
		out, _ := console.Run("udevadm settle")
		l.Debugf("Output of udevadm settle: %s", out)
		out, err := console.Run(fmt.Sprintf("blkid -l --match-token PARTLABEL=%s -o device", label))
		if err == nil {
			return out
		}
	}
	return ""
}

func FindDiskFromPath(path string, console Console) (Disk, error) {
	out, err := console.Run(fmt.Sprintf("lsblk -npo type %s", path))
	if err != nil {
		return Disk{}, errors.New(fmt.Sprintf("Error: %s", out))
	}
	if strings.HasPrefix(out, "disk") {
		return Disk{Device: path}, nil
	} else if strings.HasPrefix(out, "loop") {
		return Disk{Device: path}, nil
	} else if strings.HasPrefix(out, "part") {
		device, err := console.Run(fmt.Sprintf("lsblk -npo pkname %s", path))
		if err == nil {
			return Disk{Device: device}, nil
		}
	}

	return Disk{}, errors.New(fmt.Sprintf("Could not verify %s is a block device", path))
}

func FindDiskFromPartitionLabel(l logger.Interface, label string, console Console) (Disk, error) {
	if partnode := MatchPartitionFSLabel(l, label, console); partnode != "" {
		device, err := console.Run(fmt.Sprintf("lsblk -npo pkname %s", partnode))
		if err == nil {
			return Disk{Device: device}, nil
		}
	} else if partnode := MatchPartitionPLabel(l, label, console); partnode != "" {
		device, err := console.Run(fmt.Sprintf("lsblk -npo pkname %s", partnode))
		if err == nil {
			return Disk{Device: device}, nil
		}
	}
	return Disk{}, errors.New("Could not find device for the given label")
}

func (dev Disk) String() string {
	return dev.Device
}

func (dev *Disk) Reload(console Console) error {
	gd := NewGdiskCall(dev.String())
	prnt, err := gd.Print(console)
	if err != nil {
		return err
	}

	sectorS, err := gd.GetSectorSize(prnt)
	if err != nil {
		return err
	}
	lastS, err := gd.GetLastSector(prnt)
	if err != nil {
		return err
	}
	partitions := gd.GetPartitions(prnt)
	dev.SectorS = sectorS
	dev.LastS = lastS
	dev.Parts = partitions
	return nil
}

// Size is expressed in MiB here
func (dev *Disk) CheckDiskFreeSpaceMiB(l logger.Interface, minSpace uint, console Console) bool {
	freeS, err := dev.GetFreeSpace(l, console)
	if err != nil {
		l.Warnf("Could not calculate disk free space")
		return false
	}
	minSec := MiBToSectors(minSpace, dev.SectorS)
	if freeS < minSec {
		return false
	}
	return true
}

func (dev *Disk) GetFreeSpace(l logger.Interface, console Console) (uint, error) {
	gd := NewGdiskCall(dev.String())
	if gd.HasUnallocatedSpace(console) {
		gd.ExpandPTable()
		out, err := gd.WriteChanges(console)
		if err != nil {
			l.Errorf("Failed resizing the partition table: \n%s", out)
			return 0, err
		}
		err = dev.Reload(console)
		if err != nil {
			return 0, err
		}
	}

	//Check we have loaded partition table data
	if dev.SectorS == 0 {
		err := dev.Reload(console)
		if err != nil {
			l.Errorf("Failed analyzing disk: %v\n", err)
			return 0, err
		}
	}

	return dev.computeFreeSpace(), nil
}

func (dev Disk) computeFreeSpace() uint {
	if len(dev.Parts) > 0 {
		lastPart := dev.Parts[len(dev.Parts)-1]
		return dev.LastS - (lastPart.StartS + lastPart.SizeS - 1)
	} else {
		// Assume first partitions is alined to 1MiB
		return dev.LastS - (1024*1024/dev.SectorS - 1)
	}
}

func (dev Disk) computeFreeSpaceWithoutLast() uint {
	if len(dev.Parts) > 1 {
		part := dev.Parts[len(dev.Parts)-2]
		return dev.LastS - (part.StartS + part.SizeS - 1)
	} else {
		// Assume first partitions is alined to 1MiB
		return dev.LastS - (1024*1024/dev.SectorS - 1)
	}
}

//Size is expressed in MiB here
func (dev *Disk) AddPartition(l logger.Interface, label string, size uint, fileSystem string, pLabel string, console Console) (string, error) {
	gd := NewGdiskCall(dev.String())
	pType := "8300"
	if fatFS, _ := regexp.MatchString("fat|vfat", fileSystem); fatFS {
		// We are assuming Fat is only used for EFI partitions
		pType = "EF00"
	}

	//Check we have loaded partition table data
	if dev.SectorS == 0 {
		err := dev.Reload(console)
		if err != nil {
			l.Errorf("Failed analyzing disk: %v\n", err)
			return "", err
		}
	}

	var partNum int
	var startS uint
	if len(dev.Parts) > 0 {
		partNum = dev.Parts[len(dev.Parts)-1].Number
		startS = 0
	} else {
		//First partition is aligned at 1MiB
		startS = 1024 * 1024 / dev.SectorS
	}

	size = MiBToSectors(size, dev.SectorS)
	freeS := dev.computeFreeSpace()
	if size > freeS {
		return "", errors.New(fmt.Sprintf("Not enough free space in disk. Required: %d sectors; Available %d sectors", size, freeS))
	}

	partNum++
	var part = Partition{
		Number:     partNum,
		StartS:     startS,
		SizeS:      size,
		PLabel:     pLabel,
		FileSystem: fileSystem,
		FSLabel:    label,
		Type:       pType,
	}

	gd.CreatePartition(&part)

	out, err := gd.WriteChanges(console)
	if err != nil {
		return out, err
	}
	err = dev.Reload(console)
	if err != nil {
		l.Errorf("Failed analyzing disk: %v\n", err)
		return "", err
	}

	pDev, err := dev.FindPartitionDevice(l, part.Number, console)
	if err != nil {
		return "", err
	}

	if fileSystem != "-" {
		mkfs := MkfsCall{part: part, customOpts: []string{}, dev: pDev}
		return mkfs.Apply(console)
	}

	return out, nil
}

func (dev Disk) ReloadPartitionTable(l logger.Interface, console Console) error {
	for tries := 0; tries <= partitionTries; tries++ {
		l.Debugf("Trying to reread the partition table of %s (try number %d)", dev, tries+1)
		out, _ := console.Run("udevadm settle")
		l.Debugf("Output of udevadm settle: %s", out)

		out, err1 := console.Run(fmt.Sprintf("partprobe %s", dev))
		l.Debugf("output of partprobe: %s", out)
		if err1 != nil && tries == (partitionTries-1) {
			l.Debugf("Error of partprobe: %s", err1)
			return errors.New(fmt.Sprintf("Could not reload partition table: %s", out))
		}

		out, err2 := console.Run("sync")
		l.Debugf("Output of sync: %s", out)
		if err2 != nil && tries == (partitionTries-1) {
			l.Debugf("Error of sync: %s", err2)
			return errors.New(fmt.Sprintf("Could not sync: %s", out))
		}

		// If nothing failed exit
		if err1 == nil && err2 == nil {
			break
		}
		time.Sleep(1 * time.Second)
	}
	return nil
}

func (dev Disk) FindPartitionDevice(l logger.Interface, partNum int, console Console) (string, error) {
	var match string
	for tries := 0; tries <= partitionTries; tries++ {
		err := dev.ReloadPartitionTable(l, console)
		if err != nil {
			l.Errorf("Failed on reloading the partition table: %v\n", err)
			return "", err
		}
		l.Debugf("Trying to find the partition device %d of device %s (try number %d)", partNum, dev, tries+1)
		out, err := console.Run("udevadm settle")
		l.Debugf("Output of udevadm settle: %s", out)
		if err != nil && tries == (partitionTries-1) {
			l.Debugf("Error of udevadm settle: %s", err)
			return "", errors.New(fmt.Sprintf("Could not list settle: %s", out))
		}
		out, err = console.Run(fmt.Sprintf("lsblk -ltnpo name,type %s", dev))
		l.Debugf("Output of lsblk: %s", out)
		if err != nil && tries == (partitionTries-1) {
			l.Debugf("Error of lsblk: %s", err)
			return "", errors.New(fmt.Sprintf("Could not list device partition nodes: %s", out))
		}

		re, err := regexp.Compile(fmt.Sprintf("(?m)^(/.*%d) part$", partNum))
		if err != nil && tries == 4 {
			return "", errors.New("Failed compiling regexp")
		}
		matched := re.FindStringSubmatch(out)
		if matched == nil && tries == (partitionTries-1) {
			return "", errors.New(fmt.Sprintf("Could not find partition device path for partition %d", partNum))
		}
		if matched != nil {
			match = matched[1]
			break
		}
		time.Sleep(1 * time.Second)
	}
	return match, nil
}

//Size is expressed in MiB here
func (dev *Disk) ExpandLastPartition(l logger.Interface, size uint, console Console) (string, error) {
	if len(dev.Parts) == 0 {
		return "", errors.New("There is no partition to expand")
	}
	gd := NewGdiskCall(dev.String())

	//Check we have loaded partition table data
	if dev.SectorS == 0 {
		err := dev.Reload(console)
		if err != nil {
			l.Errorf("Failed analyzing disk: %v\n", err)
			return "", err
		}
	}

	part := dev.Parts[len(dev.Parts)-1]
	if size > 0 {
		size = MiBToSectors(size, dev.SectorS)
		part := dev.Parts[len(dev.Parts)-1]
		if size < part.SizeS {
			return "", errors.New("Layout plugin can only expand a partition, not shrink it")
		}
		freeS := dev.computeFreeSpaceWithoutLast()
		if size > freeS {
			return "", errors.New(fmt.Sprintf("Not enough free space for to expand last partition up to %d sectors", size))
		}
	}
	part.SizeS = size

	gd.DeletePartition(part.Number)
	gd.CreatePartition(&part)
	out, err := gd.WriteChanges(console)
	if err != nil {
		return "", err
	}

	fullDevice := fmt.Sprintf("%s%d", dev.Device, part.Number)
	out, err = dev.expandFilesystem(fullDevice, console)
	if err != nil {
		return out, err
	}

	err = dev.Reload(console)
	if err != nil {
		return "", err
	}
	return out, nil
}

func (dev Disk) expandFilesystem(device string, console Console) (string, error) {
	var out string
	var err error

	fs, _ := console.Run(fmt.Sprintf("blkid %s -s TYPE -o value", device))

	switch strings.TrimSpace(fs) {
	case "ext2", "ext3", "ext4":
		out, err = console.Run(fmt.Sprintf("e2fsck -fy %s", device))
		if err != nil {
			return out, err
		}
		out, err = console.Run(fmt.Sprintf("resize2fs %s", device))

		if err != nil {
			return out, err
		}
	case "xfs":
		// to grow an xfs fs it needs to be mounted :/
		tmpDir, err := os.MkdirTemp("", "yip")
		defer os.Remove(tmpDir)

		if err != nil {
			return out, err
		}
		out, err = console.Run(fmt.Sprintf("mount -t xfs %s %s", device, tmpDir))
		if err != nil {
			return out, err
		}
		out, err = console.Run(fmt.Sprintf("xfs_growfs %s", tmpDir))
		if err != nil {
			// If we error out, try to umount the dir to not leave it hanging
			out, err2 := console.Run(fmt.Sprintf("umount %s", tmpDir))
			if err2 != nil {
				return out, err2
			}
			return out, err
		}
		out, err = console.Run(fmt.Sprintf("umount %s", tmpDir))
		if err != nil {
			return out, err
		}
	default:
		return "", errors.New(fmt.Sprintf("Could not find filesystem for %s, not resizing the filesystem", device))
	}

	return "", nil
}

func NewGdiskCall(dev string) *GdiskCall {
	return &GdiskCall{dev: dev, wipe: false, parts: []*Partition{}, deletions: []int{}, expand: false, pretend: false}
}

func (gd GdiskCall) buildOptions() []string {
	opts := []string{}

	if gd.pretend {
		opts = append(opts, "-P")
	}

	if gd.wipe {
		opts = append(opts, "--zap-all")
	}

	if gd.expand {
		opts = append(opts, "-e")
	}

	for _, partnum := range gd.deletions {
		opts = append(opts, fmt.Sprintf("-d=%d", partnum))
	}

	for _, part := range gd.parts {
		opts = append(opts, fmt.Sprintf("-n=%d:%d:+%d", part.Number, part.StartS, part.SizeS))

		if part.PLabel != "" {
			opts = append(opts, fmt.Sprintf("-c=%d:%s", part.Number, part.PLabel))
		}

		if part.Type != "" {
			opts = append(opts, fmt.Sprintf("-t=%d:%s", part.Number, part.Type))
		}
	}

	if len(opts) == 0 {
		return nil
	}

	opts = append(opts, gd.dev)
	return opts
}

func (gd GdiskCall) Verify(console Console) (string, error) {
	return console.Run(fmt.Sprintf("sgdisk --verify %s", gd.dev))
}

func (gd GdiskCall) HasUnallocatedSpace(console Console) bool {
	out, _ := gd.Verify(console)
	if unallocated, _ := regexp.MatchString("the end of the disk", out); unallocated {
		return true
	}
	return false
}

func (gd GdiskCall) Print(console Console) (string, error) {
	return console.Run(fmt.Sprintf("sgdisk -p %s", gd.dev))
}

func (gd GdiskCall) Info(partNum int, console Console) (string, error) {
	return console.Run(fmt.Sprintf("sgdisk -i %d %s", partNum, gd.dev))
}

// Parses the output of a GdiskCall.Print call
func (gd GdiskCall) GetLastSector(printOut string) (uint, error) {
	re := regexp.MustCompile("last usable sector is (\\d+)")
	match := re.FindStringSubmatch(printOut)
	if match != nil {
		endS, err := strconv.ParseUint(match[1], 10, 0)
		return uint(endS), err
	}
	return 0, errors.New("Could not determine last usable sector")
}

// Parses the output of a GdiskCall.Print call
func (gd GdiskCall) GetSectorSize(printOut string) (uint, error) {
	re := regexp.MustCompile("sector size: (\\d+)")
	match := re.FindStringSubmatch(printOut)
	if match != nil {
		size, err := strconv.ParseUint(match[1], 10, 0)
		return uint(size), err
	}
	return 0, errors.New("Could not determine sector size")
}

// Parses the output of a GdiskCall.Print call
func (gd GdiskCall) GetPartitions(printOut string) []Partition {
	re := regexp.MustCompile("^(\\d+)\\s+(\\d+)\\s+(\\d+).*(EF02|EF00|8300)\\s*(.*)$")
	var pType string
	var start uint
	var end uint
	var size uint
	var pLabel string
	var partNum int
	var partitions []Partition

	scanner := bufio.NewScanner(strings.NewReader(strings.TrimSpace(printOut)))
	for scanner.Scan() {
		match := re.FindStringSubmatch(strings.TrimSpace(scanner.Text()))
		if match != nil {
			partNum, _ = strconv.Atoi(match[1])
			parsed, _ := strconv.ParseUint(match[2], 10, 0)
			start = uint(parsed)
			parsed, _ = strconv.ParseUint(match[3], 10, 0)
			end = uint(parsed)
			size = end - start + 1
			pType = match[4]
			pLabel = match[5]

			partitions = append(partitions, Partition{
				Number:     partNum,
				StartS:     start,
				SizeS:      size,
				PLabel:     pLabel,
				FileSystem: "",
				FSLabel:    "",
				Type:       pType,
			})
		}
	}
	return partitions
}

func (gd GdiskCall) GetPartitionData(partNum int, console Console) (*Partition, error) {
	out, err := gd.Info(partNum, console)
	if err != nil {
		return nil, err
	}

	var pType string
	var start uint
	var size uint
	var pLabel string
	if match, _ := regexp.MatchString("Linux filesystem", out); match {
		pType = "8300"
	} else if match, _ = regexp.MatchString("EFI System", out); match {
		pType = "EF00"
	}
	re := regexp.MustCompile("First sector: (\\d+)")
	match := re.FindStringSubmatch(out)
	if match == nil {
		return nil, errors.New("Could not determine start sector")
	}
	parsed, _ := strconv.ParseUint(match[1], 10, 0)
	start = uint(parsed)

	re = regexp.MustCompile("Partition size: (\\d+) sectors")
	match = re.FindStringSubmatch(out)
	if match == nil {
		return nil, errors.New("Could not determine partition size")
	}
	parsed, _ = strconv.ParseUint(match[1], 10, 0)
	size = uint(parsed)

	re = regexp.MustCompile("Partition name: '(.*)'")
	match = re.FindStringSubmatch(out)
	if match == nil {
		return nil, errors.New("Could not determine partition name")
	}
	pLabel = match[1]

	part := Partition{
		Number:     partNum,
		StartS:     start,
		SizeS:      size,
		PLabel:     pLabel,
		FileSystem: "",
		FSLabel:    "",
		Type:       pType,
	}

	return &part, nil
}

func (gd *GdiskCall) WriteChanges(console Console) (string, error) {
	gd.SetPretend(true)
	opts := gd.buildOptions()

	// Run sgdisk with --pretend flag first to as a sanity check
	// before any change to disk happens
	out, err := console.Run(fmt.Sprintf("sgdisk %s", strings.Join(opts[:], " ")))
	if err != nil {
		return out, err
	}

	gd.SetPretend(false)
	opts = gd.buildOptions()
	return console.Run(fmt.Sprintf("sgdisk %s", strings.Join(opts[:], " ")))
}

func (gd *GdiskCall) CreatePartition(p *Partition) {
	gd.parts = append(gd.parts, p)
}

func (gd *GdiskCall) SetPretend(pretend bool) {
	gd.pretend = pretend
}

func (gd *GdiskCall) DeletePartition(num int) {
	gd.deletions = append(gd.deletions, num)
}

func (gd *GdiskCall) WipeTable(wipe bool) {
	gd.wipe = wipe
}

func (gd *GdiskCall) ExpandPTable() {
	gd.expand = true
}

func (mkfs MkfsCall) buildOptions() ([]string, error) {
	opts := []string{}

	linuxFS, _ := regexp.MatchString("ext[2-4]|xfs", mkfs.part.FileSystem)
	fatFS, _ := regexp.MatchString("fat|vfat", mkfs.part.FileSystem)

	switch {
	case linuxFS:
		if mkfs.part.FSLabel != "" {
			opts = append(opts, "-L")
			opts = append(opts, mkfs.part.FSLabel)
		}
		if len(mkfs.customOpts) > 0 {
			opts = append(opts, mkfs.customOpts...)
		}
		opts = append(opts, mkfs.dev)
	case fatFS:
		if mkfs.part.FSLabel != "" {
			opts = append(opts, "-i")
			opts = append(opts, mkfs.part.FSLabel)
		}
		if len(mkfs.customOpts) > 0 {
			opts = append(opts, mkfs.customOpts...)
		}
		opts = append(opts, mkfs.dev)
	default:
		return []string{}, errors.New(fmt.Sprintf("Unsupported filesystem: %s", mkfs.part.FileSystem))
	}
	return opts, nil
}

func (mkfs MkfsCall) Apply(console Console) (string, error) {
	opts, err := mkfs.buildOptions()
	if err != nil {
		return "", err
	}
	tool := fmt.Sprintf("mkfs.%s", mkfs.part.FileSystem)
	command := fmt.Sprintf("%s %s", tool, strings.Join(opts[:], " "))
	return console.Run(command)
}

func MiBToSectors(size uint, sectorSize uint) uint {
	return size * 1048576 / sectorSize
}
 070701000008FC000081A4000000000000000000000001645E367C000004C0000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/plugins/modules.go   package plugins

import (
	"bufio"
	"strings"

	"github.com/hashicorp/go-multierror"
	"github.com/mudler/yip/pkg/logger"
	"github.com/mudler/yip/pkg/schema"
	"pault.ag/go/modprobe"
	"github.com/twpayne/go-vfs"
)

const (
	modules = "/proc/modules"
)

func loadedModules(l logger.Interface, fs vfs.FS) map[string]interface{} {
	loaded := map[string]interface{}{}
	f, err := fs.Open(modules)
	if err != nil {
		l.Warnf("Cannot open %s: %s", modules, err.Error())
		return loaded
	}
	defer f.Close()
	sc := bufio.NewScanner(f)
	for sc.Scan() {
		mod := strings.SplitN(sc.Text(), " ", 2)
		if len(mod) == 0 {
			continue
		}
		loaded[mod[0]] = nil
	}
	return loaded
}

func LoadModules(l logger.Interface, s schema.Stage, fs vfs.FS, console Console) error {
	var errs error

	if len(s.Modules) == 0 {
		return nil
	}

	loaded := loadedModules(l, fs)

	for _, m := range s.Modules {
		if _, ok := loaded[m]; ok {
			continue
		}
		params := strings.SplitN(m, " ", -1)
		l.Debugf("loading module %s with parameters [%s]", m, params)
		if err := modprobe.Load(params[0], strings.Join(params[1:], " ")); err != nil {
			errs = multierror.Append(errs, err)
			continue
		}
		l.Debugf("module %s loaded", m)
	}
	return errs
}
070701000008FD000081A4000000000000000000000001645E367C00000278000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/plugins/network.go   package plugins

import (
	"fmt"
	"regexp"

	"github.com/mudler/yip/pkg/logger"
	"github.com/mudler/yip/pkg/schema"
	"github.com/pkg/errors"
	"github.com/twpayne/go-vfs"
)

func NodeConditional(l logger.Interface, s schema.Stage, fs vfs.FS, console Console) error {
	if len(s.Node) > 0 {
		matched, err := regexp.MatchString(s.Node, system.Node.Hostname)
		if !matched {
			return fmt.Errorf("Skipping stage (node hostname '%s' doesn't match '%s')", system.Node.Hostname, s.Node)
		}
		if err != nil {
			return errors.Wrapf(err, "Skipping invalid regex for node hostname '%s', error: %s", s.Node, err.Error())
		}
	}
	return nil
}
070701000008FE000081A4000000000000000000000001645E367C00000D60000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/plugins/ssh.go   package plugins

import (
	"fmt"
	"net/url"
	"os"
	"path"
	"strconv"
	"strings"

	"github.com/hashicorp/go-multierror"
	"github.com/mudler/yip/pkg/logger"
	"github.com/mudler/yip/pkg/schema"
	"github.com/mudler/yip/pkg/utils"
	"github.com/pkg/errors"
	"github.com/twpayne/go-vfs"
	passwd "github.com/willdonnelly/passwd"
)

const (
	sshDir         = ".ssh"
	authorizedFile = "authorized_keys"
	passwdFile     = "/etc/passwd"
)

var keyProviders = map[string]string{
	"github": "https://github.com/%s.keys",
	"gitlab": "https://gitlab.com/%s.keys",
}

func SSH(l logger.Interface, s schema.Stage, fs vfs.FS, console Console) error {
	var errs error

	for u, keys := range s.SSHKeys {
		if err := ensureKeys(u, keys, fs); err != nil {
			errs = multierror.Append(errs, err)
		}
	}

	return errs
}

func getRemotePubKey(key string) (string, error) {
	url, err := url.Parse(key)
	if err != nil {
		return "", err
	}

	if providerURL, ok := keyProviders[url.Scheme]; ok {
		key = fmt.Sprintf(providerURL, url.Opaque)
	}

	out, err := download(key)
	if err != nil {
		return "", errors.Wrap(err, "failed while downloading key")
	}
	return out, err
}

func ensure(file string, fs vfs.FS) (os.FileInfo, error) {
	info, err := fs.Stat(file)
	if os.IsNotExist(err) {
		f, err := fs.Create(file)
		if err != nil {
			return info, err
		}
		if err = f.Chmod(0600); err != nil {
			return info, err
		}
		if err = f.Close(); err != nil {
			return info, err
		}
		info, err = fs.Stat(file)
		if err != nil {
			return info, errors.Wrapf(err, "cannot stat %s", file)
		}
	} else if err != nil {
		return info, err
	}

	return info, nil
}

func authorizeSSHKey(key, file string, uid, gid int, fs vfs.FS) error {
	var err error

	if utils.IsUrl(key) {
		key, err = getRemotePubKey(key)
		if err != nil {
			return errors.Wrap(err, "failed fetching ssh key")
		}
	}

	info, err := ensure(file, fs)
	if err != nil {
		return errors.Wrapf(err, "while ensuring %s exists", file)
	}

	bytes, err := fs.ReadFile(file)
	if err != nil {
		return err
	}

	// Don't do anything if key is already present
	if strings.Contains(string(bytes), key) {
		return nil
	}

	perm := info.Mode().Perm()

	bytes = append(bytes, []byte(key)...)
	bytes = append(bytes, '\n')

	if err = fs.WriteFile(file, bytes, perm); err != nil {
		return err
	}
	return fs.Chown(file, uid, gid)
}

func ensureKeys(user string, keys []string, fs vfs.FS) error {
	var errs error
	f, err := fs.RawPath(passwdFile)

	current, err := passwd.ParseFile(f)
	if err != nil {
		return errors.Wrap(err, "Failed parsing passwd")
	}

	data, ok := current[user]
	if !ok {
		return fmt.Errorf("user %s not found", user)
	}

	uid, err := strconv.Atoi(data.Uid)
	if err != nil {
		return errors.Wrap(err, "Failed getting uid")
	}

	gid, err := strconv.Atoi(data.Gid)
	if err != nil {
		return errors.Wrap(err, "Failed getting gid")
	}

	homeDir := data.Home

	userSSHDir := path.Join(homeDir, sshDir)
	if _, err := fs.Stat(userSSHDir); os.IsNotExist(err) {
		if err = fs.Mkdir(userSSHDir, 0700); err != nil {
			return err
		}
	} else if err != nil {
		return err
	}

	if err = fs.Chown(userSSHDir, uid, gid); err != nil {
		errs = multierror.Append(errs, err)
	}

	userAuthorizedFile := path.Join(userSSHDir, authorizedFile)
	for _, key := range keys {
		if err = authorizeSSHKey(key, userAuthorizedFile, uid, gid, fs); err != nil {
			errs = multierror.Append(errs, err)
		}
	}
	return errs
}
070701000008FF000081A4000000000000000000000001645E367C00000262000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/plugins/sysctl.go    package plugins

import (
	"path/filepath"
	"strings"

	"github.com/hashicorp/go-multierror"
	"github.com/mudler/yip/pkg/logger"
	"github.com/mudler/yip/pkg/schema"
	"github.com/twpayne/go-vfs"
)

var (
	procSys = []string{"/proc", "sys"}
)

func Sysctl(l logger.Interface, s schema.Stage, fs vfs.FS, console Console) error {
	var errs error
	for k, v := range s.Sysctl {
		elements := procSys
		elements = append(elements, strings.Split(k, ".")...)
		path := filepath.Join(elements...)
		if err := fs.WriteFile(path, []byte(v), 0644); err != nil {
			errs = multierror.Append(errs, err)
		}
	}
	return errs
}
  07070100000900000081A4000000000000000000000001645E367C0000031F000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/plugins/systemctl.go package plugins

import (
	"github.com/hashicorp/go-multierror"
	"github.com/mudler/yip/pkg/logger"
	"github.com/mudler/yip/pkg/schema"
	"github.com/twpayne/go-vfs"
)

func Systemctl(l logger.Interface, s schema.Stage, fs vfs.FS, console Console) error {
	var errs error

	if err := console.RunTemplate(s.Systemctl.Enable, "systemctl enable %s"); err != nil {
		errs = multierror.Append(errs, err)
	}
	if err := console.RunTemplate(s.Systemctl.Disable, "systemctl disable %s"); err != nil {
		errs = multierror.Append(errs, err)
	}
	if err := console.RunTemplate(s.Systemctl.Mask, "systemctl mask %s"); err != nil {
		errs = multierror.Append(errs, err)
	}
	if err := console.RunTemplate(s.Systemctl.Start, "systemctl start %s"); err != nil {
		errs = multierror.Append(errs, err)
	}
	return errs
}
 07070100000901000081A4000000000000000000000001645E367C00000234000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/plugins/systemd_firstboot.go package plugins

import (
	"fmt"
	"strings"

	"github.com/hashicorp/go-multierror"
	"github.com/mudler/yip/pkg/logger"
	"github.com/mudler/yip/pkg/schema"
	"github.com/twpayne/go-vfs"
)

func SystemdFirstboot(l logger.Interface, s schema.Stage, fs vfs.FS, console Console) error {
	var errs error

	args := []string{}

	for k, v := range s.SystemdFirstBoot {
		args = append(args, fmt.Sprintf("--%s=%s", strings.ToLower(k), v))
	}

	if err := console.RunTemplate(args, "systemd-firstboot %s"); err != nil {
		errs = multierror.Append(errs, err)
	}

	return errs
}
07070100000902000081A4000000000000000000000001645E367C000002BB000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/plugins/timesyncd.go package plugins

import (
	"os"

	"github.com/mudler/yip/pkg/logger"
	"github.com/mudler/yip/pkg/schema"
	"github.com/twpayne/go-vfs"
	"gopkg.in/ini.v1"
)

const timeSyncd = "/etc/systemd/timesyncd.conf"

func Timesyncd(l logger.Interface, s schema.Stage, fs vfs.FS, console Console) error {
	if len(s.TimeSyncd) == 0 {
		return nil
	}
	var errs error

	path, err := fs.RawPath(timeSyncd)
	if err != nil {
		return err
	}

	if _, err := fs.Stat(timeSyncd); os.IsNotExist(err) {
		f, _ := fs.Create(timeSyncd)
		f.Close()
	}

	cfg, err := ini.Load(path)
	if err != nil {
		return err
	}

	for k, v := range s.TimeSyncd {
		cfg.Section("Time").Key(k).SetValue(v)
	}

	cfg.SaveTo(path)

	return errs
}
 07070100000903000081A4000000000000000000000001645E367C00001253000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/plugins/user.go  package plugins

import (
	"fmt"
	"os"
	osuser "os/user"
	"sort"
	"strconv"

	"github.com/pkg/errors"

	"github.com/hashicorp/go-multierror"
	"github.com/joho/godotenv"
	entities "github.com/mudler/entities/pkg/entities"
	"github.com/mudler/yip/pkg/logger"
	"github.com/mudler/yip/pkg/schema"
	"github.com/twpayne/go-vfs"
	passwd "github.com/willdonnelly/passwd"
)

func createUser(fs vfs.FS, u schema.User, console Console) error {
	pass := u.PasswordHash
	if u.LockPasswd {
		pass = "!"
	}

	userShadow := &entities.Shadow{
		Username:    u.Name,
		Password:    pass,
		LastChanged: "now",
	}

	etcgroup, err := fs.RawPath("/etc/group")
	if err != nil {
		return errors.Wrap(err, "getting rawpath for /etc/group")
	}

	etcshadow, err := fs.RawPath("/etc/shadow")
	if err != nil {
		return errors.Wrap(err, "getting rawpath for /etc/shadow")
	}

	etcpasswd, err := fs.RawPath("/etc/passwd")
	if err != nil {
		return errors.Wrap(err, "getting rawpath for /etc/passwd")
	}

	useradd, err := fs.RawPath("/etc/default/useradd")
	if err != nil {
		return errors.Wrap(err, "getting rawpath for /etc/default/useradd")
	}

	// Set default home and shell
	usrDefaults := map[string]string{}
	usrDefaults["SHELL"] = "/bin/sh"
	usrDefaults["HOME"] = fmt.Sprintf("/home")

	// Load default home and shell from `/etc/default/useradd`
	if _, err = os.Stat(useradd); err == nil {
		usrDefaults, err = godotenv.Read(useradd)
		if err != nil {
			return errors.Wrapf(err, "could not parse '%s'", useradd)
		}
	}

	primaryGroup := u.Name
	gid := 1000

	if u.PrimaryGroup != "" {
		gr, err := osuser.LookupGroup(u.PrimaryGroup)
		if err != nil {
			return errors.Wrap(err, "could not resolve primary group of user")
		}
		gid, _ = strconv.Atoi(gr.Gid)
		primaryGroup = u.PrimaryGroup
	} else {
		// Create a new group after the user name
		all, _ := entities.ParseGroup(etcgroup)
		if len(all) != 0 {
			usedGids := []int{}
			for _, entry := range all {
				usedGids = append(usedGids, *entry.Gid)
			}
			sort.Ints(usedGids)
			if len(usedGids) == 0 {
				return errors.New("no new guid found")
			}
			gid = usedGids[len(usedGids)-1]
			gid++
		}

	}

	updateGroup := entities.Group{
		Name:     primaryGroup,
		Password: "x",
		Gid:      &gid,
		Users:    u.Name,
	}
	updateGroup.Apply(etcgroup, false)

	uid := 1000
	if u.UID != "" {
		// User defined-uid
		uid, err = strconv.Atoi(u.UID)
		if err != nil {
			return errors.Wrap(err, "invalid uid defined")
		}
	} else {
		// find an available uid if there are others already
		all, _ := passwd.ParseFile(etcpasswd)
		if len(all) != 0 {
			usedUids := []int{}
			for _, entry := range all {
				uid, _ := strconv.Atoi(entry.Uid)
				usedUids = append(usedUids, uid)
			}
			sort.Ints(usedUids)
			if len(usedUids) == 0 {
				return errors.New("no new UID found")
			}
			uid = usedUids[len(usedUids)-1]
			uid++
		}
	}

	if u.Homedir == "" {
		u.Homedir = fmt.Sprintf("%s/%s", usrDefaults["HOME"], u.Name)
	}

	if u.Shell == "" {
		u.Shell = usrDefaults["SHELL"]
	}

	userInfo := &entities.UserPasswd{
		Username: u.Name,
		Password: "x",
		Info:     u.GECOS,
		Homedir:  u.Homedir,
		Gid:      gid,
		Shell:    u.Shell,
		Uid:      uid,
	}

	if err := userInfo.Apply(etcpasswd, false); err != nil {
		return err
	}

	if err := userShadow.Apply(etcshadow, false); err != nil {
		return err
	}

	if !u.NoCreateHome {
		homedir, err := fs.RawPath(u.Homedir)
		if err != nil {
			return errors.Wrap(err, "getting rawpath for homedir")
		}
		os.MkdirAll(homedir, 0755)
		os.Chown(homedir, uid, gid)
	}

	groups, _ := entities.ParseGroup(etcgroup)
	for name, group := range groups {
		for _, w := range u.Groups {
			if w == name {
				group.Users = u.Name
				group.Apply(etcgroup, false)
			}
		}
	}

	return nil
}

func setUserPass(fs vfs.FS, username, password string) error {
	etcshadow, err := fs.RawPath("/etc/shadow")
	if err != nil {
		return errors.Wrap(err, "getting rawpath for /etc/shadow")
	}
	userShadow := &entities.Shadow{
		Username:    username,
		Password:    password,
		LastChanged: "now",
	}
	if err := userShadow.Apply(etcshadow, false); err != nil {
		return err
	}
	return nil
}

func User(l logger.Interface, s schema.Stage, fs vfs.FS, console Console) error {
	var errs error

	for u, p := range s.Users {
		r := &p
		r.Name = u
		if !p.Exists() {
			if err := createUser(fs, *r, console); err != nil {
				errs = multierror.Append(errs, err)
			}
		} else if p.PasswordHash != "" {
			if err := setUserPass(fs, r.Name, r.PasswordHash); err != nil {
				return err
			}
		}

		if len(p.SSHAuthorizedKeys) > 0 {
			SSH(l, schema.Stage{SSHKeys: map[string][]string{r.Name: r.SSHAuthorizedKeys}}, fs, console)
		}

	}
	return errs
}
 07070100000904000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/schema   07070100000905000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/schema/cloudinit 07070100000906000081A4000000000000000000000001645E367C00000D43000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/schema/cloudinit/config.go   // This is an adaptation of coreOS/cloudinit.
// https://github.com/coreos/coreos-cloudinit/blob/master/config/config.go

package config

import (
	"strings"
	"unicode"

	"gopkg.in/yaml.v1"
)

// NewCloudConfig instantiates a new CloudConfig from the given contents (a
// string of YAML), returning any error encountered. It will ignore unknown
// fields but log encountering them.
func NewCloudConfig(contents string) (*CloudConfig, error) {
	var cfg CloudConfig
	err := yaml.Unmarshal([]byte(contents), &cfg)
	return &cfg, err
}

func IsCloudConfig(userdata string) bool {
	header := strings.SplitN(userdata, "\n", 2)[0]

	// Trim trailing whitespaces
	header = strings.TrimRightFunc(header, unicode.IsSpace)

	return (header == "#cloud-config")
}

// CloudConfig encapsulates the entire cloud-config configuration file and maps
// directly to YAML. Fields that cannot be set in the cloud-config (fields
// used for internal use) have the YAML tag '-' so that they aren't marshalled.
type CloudConfig struct {
	SSHAuthorizedKeys []string `yaml:"ssh_authorized_keys,omitempty"`
	WriteFiles        []File   `yaml:"write_files,omitempty"`
	Hostname          string   `yaml:"hostname,omitempty"`
	Users             []User   `yaml:"users,omitempty"`
	RunCmd            []string `yaml:"runcmd,omitempty"`

	Partitioning GrowPart `yaml:"growpart"`
	// this one is legacy, can be removed when no more kip controllers use it
	MilpaFiles []File `yaml:"milpa_files,omitempty"`
	// Todo: add additional parameters supported by traditional cloud-init
}

type GrowPart struct {
	Mode    string   `yaml:"mode,omitempty"`
	Devices []string `yaml:"devices"`
}

type File struct {
	Encoding           string `yaml:"encoding,omitempty" valid:"^(base64|b64|gz|gzip|gz\\+base64|gzip\\+base64|gz\\+b64|gzip\\+b64)$"`
	Content            string `yaml:"content,omitempty"`
	Owner              string `yaml:"owner,omitempty"`
	Path               string `yaml:"path,omitempty"`
	RawFilePermissions string `yaml:"permissions,omitempty" valid:"^0?[0-7]{3,4}$"`
}

type User struct {
	Name                 string   `yaml:"name,omitempty"`
	PasswordHash         string   `yaml:"passwd,omitempty"`
	SSHAuthorizedKeys    []string `yaml:"ssh_authorized_keys,omitempty"`
	SSHImportGithubUser  string   `yaml:"coreos_ssh_import_github,omitempty"       deprecated:"trying to fetch from a remote endpoint introduces too many intermittent errors"`
	SSHImportGithubUsers []string `yaml:"coreos_ssh_import_github_users,omitempty" deprecated:"trying to fetch from a remote endpoint introduces too many intermittent errors"`
	SSHImportURL         string   `yaml:"coreos_ssh_import_url,omitempty"          deprecated:"trying to fetch from a remote endpoint introduces too many intermittent errors"`
	GECOS                string   `yaml:"gecos,omitempty"`
	Homedir              string   `yaml:"homedir,omitempty"`
	NoCreateHome         bool     `yaml:"no_create_home,omitempty"`
	PrimaryGroup         string   `yaml:"primary_group,omitempty"`
	Groups               []string `yaml:"groups,omitempty"`
	NoUserGroup          bool     `yaml:"no_user_group,omitempty"`
	System               bool     `yaml:"system,omitempty"`
	NoLogInit            bool     `yaml:"no_log_init,omitempty"`
	Shell                string   `yaml:"shell,omitempty"`
	LockPasswd           bool     `yaml:"lock_passwd"`
	UID                  string   `yaml:"uid"`
}
 07070100000907000081A4000000000000000000000001645E367C00000DDF000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/schema/loader_cloudinit.go   //   Copyright 2020 Ettore Di Giacinto <mudler@mocaccino.org>
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.

package schema

import (
	"fmt"
	"strconv"

	cloudconfig "github.com/mudler/yip/pkg/schema/cloudinit"
	"github.com/twpayne/go-vfs"
)

type cloudInit struct{}

// Load transpiles a cloud-init style
// file ( https://cloudinit.readthedocs.io/en/latest/topics/examples.html)
// to a yip schema.
// As Yip supports multi-stages, it is encoded in the supplied one.
// fs is used to parse the user data required from /etc/passwd.
func (cloudInit) Load(s []byte, fs vfs.FS) (*YipConfig, error) {
	cc, err := cloudconfig.NewCloudConfig(string(s))
	if err != nil {
		return nil, err
	}

	// Decode users and SSH Keys
	sshKeys := make(map[string][]string)
	users := make(map[string]User)
	userstoKey := []string{}

	for _, u := range cc.Users {
		userstoKey = append(userstoKey, u.Name)
		users[u.Name] = User{
			Name:         u.Name,
			PasswordHash: u.PasswordHash,
			GECOS:        u.GECOS,
			Homedir:      u.Homedir,
			NoCreateHome: u.NoCreateHome,
			PrimaryGroup: u.PrimaryGroup,
			Groups:       u.Groups,
			NoUserGroup:  u.NoUserGroup,
			System:       u.System,
			NoLogInit:    u.NoLogInit,
			Shell:        u.Shell,
			UID:          u.UID,
			LockPasswd:   u.LockPasswd,
		}
		sshKeys[u.Name] = u.SSHAuthorizedKeys
	}

	for _, uu := range userstoKey {
		_, exists := sshKeys[uu]
		if !exists {
			sshKeys[uu] = cc.SSHAuthorizedKeys
		} else {
			sshKeys[uu] = append(sshKeys[uu], cc.SSHAuthorizedKeys...)
		}
	}

	// If no users are defined, then assume global ssh_authorized_keys is assigned to root
	if len(userstoKey) == 0 && len(cc.SSHAuthorizedKeys) > 0 {
		sshKeys["root"] = cc.SSHAuthorizedKeys
	}

	// Decode writeFiles
	var f []File
	for _, ff := range append(cc.WriteFiles, cc.MilpaFiles...) {
		newFile := File{
			Path:        ff.Path,
			OwnerString: ff.Owner,
			Content:     ff.Content,
			Encoding:    ff.Encoding,
		}
		newFile.Permissions, err = parseOctal(ff.RawFilePermissions)
		if err != nil {
			return nil, fmt.Errorf("converting permission %s for %s: %w", ff.RawFilePermissions, ff.Path, err)
		}
		f = append(f, newFile)
	}

	stages := []Stage{{
		Commands: cc.RunCmd,
		Files:    f,
		Users:    users,
		SSHKeys:  sshKeys,
	}}

	for _, d := range cc.Partitioning.Devices {
		layout := &Layout{}
		layout.Expand = &Expand{Size: 0}
		layout.Device = &Device{Path: d}
		stages = append(stages, Stage{Layout: *layout})
	}

	result := &YipConfig{
		Name: "Cloud init",
		Stages: map[string][]Stage{
			"boot": stages,
			"initramfs": {{
				Hostname: cc.Hostname,
			}},
		},
	}

	// optimistically load data as yip yaml
	yipConfig, err := yipYAML{}.Load(s, fs)
	if err == nil {
		for k, v := range yipConfig.Stages {
			result.Stages[k] = append(result.Stages[k], v...)
		}
	}

	return result, nil
}

func parseOctal(srv string) (uint32, error) {
	if srv == "" {
		return 0, nil
	}
	i, err := strconv.ParseUint(srv, 8, 32)
	if err != nil {
		return 0, err
	}
	return uint32(i), nil
}
 07070100000908000081A4000000000000000000000001645E367C00000154000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/schema/loader_yip.go package schema

import (
	"github.com/twpayne/go-vfs"
	"gopkg.in/yaml.v2"
)

type yipYAML struct{}

// LoadFromYaml loads a yip config from bytes
func (yipYAML) Load(b []byte, fs vfs.FS) (*YipConfig, error) {
	var yamlConfig YipConfig
	err := yaml.Unmarshal(b, &yamlConfig)
	if err != nil {
		return nil, err
	}

	return &yamlConfig, nil
}
07070100000909000081A4000000000000000000000001645E367C0000212B000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/schema/schema.go //   Copyright 2019 Ettore Di Giacinto <mudler@mocaccino.org>
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.

package schema

import (
	"bytes"
	"fmt"
	"io"
	"net/http"
	"os/user"
	"strings"

	"github.com/google/shlex"

	config "github.com/mudler/yip/pkg/schema/cloudinit"
	"github.com/pkg/errors"

	"github.com/hashicorp/go-multierror"
	"github.com/itchyny/gojq"
	"github.com/twpayne/go-vfs"
	"gopkg.in/yaml.v2"
)

type YipEntity struct {
	Path   string `yaml:"path"`
	Entity string `yaml:"entity"`
}

type File struct {
	Path         string
	Permissions  uint32
	Owner, Group int
	Content      string
	Encoding     string
	OwnerString  string
}

type Download struct {
	Path         string
	URL          string
	Permissions  uint32
	Owner, Group int
	Timeout      int
	OwnerString  string
}

type Directory struct {
	Path         string
	Permissions  uint32
	Owner, Group int
}

type DataSource struct {
	Providers []string `yaml:"providers,omitempty"`
	Path      string   `yaml:"path,omitempty"`
}

type Git struct {
	Auth       Auth   `yaml:"auth,omitempty"`
	URL        string `yaml:"url,omitempty"`
	Path       string `yaml:"path,omitempty"`
	Branch     string `yaml:"branch,omitempty"`
	BranchOnly bool   `yaml:"branch_only,omitempty"`
}

type Auth struct {
	Username   string `yaml:"username,omitempty"`
	Password   string `yaml:"password,omitempty"`
	PrivateKey string `yaml:"private_key,omitempty"`

	Insecure  bool   `yaml:"insecure,omitempty"`
	PublicKey string `yaml:"public_key,omitempty"`
}

type User struct {
	Name              string   `yaml:"name,omitempty"`
	PasswordHash      string   `yaml:"passwd,omitempty"`
	SSHAuthorizedKeys []string `yaml:"ssh_authorized_keys,omitempty"`
	GECOS             string   `yaml:"gecos,omitempty"`
	Homedir           string   `yaml:"homedir,omitempty"`
	NoCreateHome      bool     `yaml:"no_create_home,omitempty"`
	PrimaryGroup      string   `yaml:"primary_group,omitempty"`
	Groups            []string `yaml:"groups,omitempty"`
	NoUserGroup       bool     `yaml:"no_user_group,omitempty"`
	System            bool     `yaml:"system,omitempty"`
	NoLogInit         bool     `yaml:"no_log_init,omitempty"`
	Shell             string   `yaml:"shell,omitempty"`
	LockPasswd        bool     `yaml:"lock_passwd,omitempty"`
	UID               string   `yaml:"uid,omitempty"`
}

func (u User) Exists() bool {
	_, err := user.Lookup(u.Name)
	return err == nil
}

type Layout struct {
	Device *Device     `yaml:"device,omitempty"`
	Expand *Expand     `yaml:"expand_partition,omitempty"`
	Parts  []Partition `yaml:"add_partitions,omitempty"`
}

type Device struct {
	Label string `yaml:"label,omitempty"`
	Path  string `yaml:"path,omitempty"`
}

type Expand struct {
	Size uint `yaml:"size,omitempty"`
}

type Partition struct {
	FSLabel    string `yaml:"fsLabel,omitempty"`
	Size       uint   `yaml:"size,omitempty"`
	PLabel     string `yaml:"pLabel,omitempty"`
	FileSystem string `yaml:"filesystem,omitempty"`
}

type Dependency struct {
	Name string `yaml:"name,omitempty"`
}

type Stage struct {
	Commands    []string    `yaml:"commands,omitempty"`
	Files       []File      `yaml:"files,omitempty"`
	Downloads   []Download  `yaml:"downloads,omitempty"`
	Directories []Directory `yaml:"directories,omitempty"`
	If          string      `yaml:"if,omitempty"`

	EnsureEntities  []YipEntity         `yaml:"ensure_entities,omitempty"`
	DeleteEntities  []YipEntity         `yaml:"delete_entities,omitempty"`
	Dns             DNS                 `yaml:"dns,omitempty"`
	Hostname        string              `yaml:"hostname,omitempty"`
	Name            string              `yaml:"name,omitempty"`
	Sysctl          map[string]string   `yaml:"sysctl,omitempty"`
	SSHKeys         map[string][]string `yaml:"authorized_keys,omitempty"`
	Node            string              `yaml:"node,omitempty"`
	Users           map[string]User     `yaml:"users,omitempty"`
	Modules         []string            `yaml:"modules,omitempty"`
	Systemctl       Systemctl           `yaml:"systemctl,omitempty"`
	Environment     map[string]string   `yaml:"environment,omitempty"`
	EnvironmentFile string              `yaml:"environment_file,omitempty"`

	After []Dependency `yaml:"after,omitempty"`

	DataSources DataSource `yaml:"datasource,omitempty"`
	Layout      Layout     `yaml:"layout,omitempty"`

	SystemdFirstBoot map[string]string `yaml:"systemd_firstboot,omitempty"`

	TimeSyncd map[string]string `yaml:"timesyncd,omitempty"`
	Git       Git               `yaml:"git,omitempty"`
}

type Systemctl struct {
	Enable  []string `yaml:"enable,omitempty"`
	Disable []string `yaml:"disable,omitempty"`
	Start   []string `yaml:"start,omitempty"`
	Mask    []string `yaml:"mask,omitempty"`
}

type DNS struct {
	Nameservers []string `yaml:"nameservers,omitempty"`
	DnsSearch   []string `yaml:"search,omitempty"`
	DnsOptions  []string `yaml:"options,omitempty"`
	Path        string   `yaml:"path,omitempty"`
}

type YipConfig struct {
	Name   string             `yaml:"name,omitempty"`
	Stages map[string][]Stage `yaml:"stages,omitempty"`
}

type Loader func(s string, fs vfs.FS, m Modifier) ([]byte, error)
type Modifier func(s []byte) ([]byte, error)

type yipLoader interface {
	Load([]byte, vfs.FS) (*YipConfig, error)
}

func Load(s string, fs vfs.FS, l Loader, m Modifier) (*YipConfig, error) {
	if m == nil {
		m = func(b []byte) ([]byte, error) { return b, nil }
	}
	if l == nil {
		l = func(c string, fs vfs.FS, m Modifier) ([]byte, error) { return m([]byte(c)) }
	}
	data, err := l(s, fs, m)
	if err != nil {
		return nil, errors.Wrap(err, "while loading yipconfig")
	}

	loader, err := detect(data)
	if err != nil {
		return nil, errors.Wrap(err, "invalid file type")
	}
	return loader.Load(data, fs)
}

func detect(b []byte) (yipLoader, error) {
	switch {
	case config.IsCloudConfig(string(b)):
		return cloudInit{}, nil

	default:
		return yipYAML{}, nil
	}
}

// FromFile loads a yip config from a YAML file
func FromFile(s string, fs vfs.FS, m Modifier) ([]byte, error) {
	yamlFile, err := fs.ReadFile(s)
	if err != nil {
		return nil, err
	}
	return m(yamlFile)
}

// FromUrl loads a yip config from a url
func FromUrl(s string, fs vfs.FS, m Modifier) ([]byte, error) {
	resp, err := http.Get(s)
	if err != nil {
		return nil, err
	}
	defer resp.Body.Close()

	buf := bytes.NewBuffer([]byte{})
	_, err = io.Copy(buf, resp.Body)
	if err != nil {
		return nil, err
	}
	return m(buf.Bytes())
}

// DotNotationModifier read a byte sequence in dot notation and returns a byte sequence in yaml
// e.g. foo.bar=boo
func DotNotationModifier(s []byte) ([]byte, error) {
	v := stringToMap(string(s))

	data, err := dotToYAML(v)
	if err != nil {
		return nil, err
	}
	return data, nil
}

func jq(command string, data map[string]interface{}) (map[string]interface{}, error) {
	query, err := gojq.Parse(command)
	if err != nil {
		return nil, err
	}
	code, err := gojq.Compile(query)
	if err != nil {
		return nil, err
	}
	iter := code.Run(data)

	v, ok := iter.Next()
	if !ok {
		return nil, errors.New("failed getting rsult from gojq")
	}
	if err, ok := v.(error); ok {
		return nil, err
	}
	if t, ok := v.(map[string]interface{}); ok {
		return t, nil
	}

	return make(map[string]interface{}), nil
}

func dotToYAML(v map[string]interface{}) ([]byte, error) {
	data := map[string]interface{}{}
	var errs error

	for k, value := range v {
		newData, err := jq(fmt.Sprintf(".%s=\"%s\"", k, value), data)
		if err != nil {
			errs = multierror.Append(errs, err)
			continue
		}
		data = newData
	}

	out, err := yaml.Marshal(&data)
	if err != nil {
		errs = multierror.Append(errs, err)
	}
	return out, err
}

func stringToMap(s string) map[string]interface{} {
	v := map[string]interface{}{}

	splitted, _ := shlex.Split(s)
	for _, item := range splitted {
		parts := strings.SplitN(item, "=", 2)
		value := "true"
		if len(parts) > 1 {
			value = strings.Trim(parts[1], `"`)
		}
		key := strings.Trim(parts[0], `"`)
		v[key] = value
	}

	return v
}
 0707010000090A000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/utils    0707010000090B000081A4000000000000000000000001645E367C00000266000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/utils/file.go    package utils

import (
	"errors"
	"os"

	"github.com/twpayne/go-vfs"
)

func Touch(s string, perms os.FileMode, fs vfs.FS) error {
	_, err := fs.Stat(s)

	switch {
	case os.IsNotExist(err):
		f, err := fs.Create(s)
		if err != nil {
			return err
		}
		if err = f.Chmod(perms); err != nil {
			return err
		}
		if err = f.Close(); err != nil {
			return err
		}
		_, err = fs.Stat(s)
		return err
	case err == nil:
		return nil
	default:
		return errors.New("could not create file")
	}

}

func Exists(s string) bool {
	if _, err := os.Stat(s); err != nil && os.IsNotExist(err) {
		return false
	}
	return true
}
  0707010000090C000081A4000000000000000000000001645E367C0000009D000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/utils/http.go    package utils

import "net/url"

func IsUrl(s string) bool {
	url, err := url.Parse(s)
	if err != nil || url.Scheme == "" {
		return false
	}
	return true
}
   0707010000090D000081A4000000000000000000000001645E367C000002AF000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/utils/text.go    package utils

import (
	"bytes"
	"math/rand"
	"text/template"

	"github.com/Masterminds/sprig/v3"
)

// UUIDTemplatedString accepts a template, and renders it with a
// UUID v4 generated string.
// E.g. input "foo-{{.}}"
func TemplatedString(t string, i interface{}) (string, error) {
	b := bytes.NewBuffer([]byte{})
	tmpl, err := template.New("template").Funcs(sprig.TxtFuncMap()).Parse(t)
	if err != nil {
		return "", err
	}

	err = tmpl.Execute(b, i)

	return b.String(), err
}

var letters = []rune("1234567890abcdefghijklmnopqrstuvwxyz")

func RandomString(n int) string {
	b := make([]rune, n)
	for i := range b {
		b[i] = letters[rand.Intn(len(letters))]
	}
	return string(b)
}
 0707010000090E000081A4000000000000000000000001645E367C00000433000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/mudler/yip/pkg/utils/user.go    package utils

import (
	osuser "os/user"
	"strconv"
	"strings"

	"github.com/pkg/errors"
)

// GetUserDataFromString retrieves uid and gid from a string. The string
// have to be in the "user:group" syntax, or just "user".
func GetUserDataFromString(s string) (int, int, error) {
	user := s
	var u, g string
	if strings.Contains(s, ":") {
		dat := strings.Split(user, ":")
		us, err := osuser.Lookup(dat[0])
		if err != nil {
			return 0, 0, errors.Wrapf(err, "while looking up user %s", dat[0])
		}
		u = us.Uid

		group, err := osuser.LookupGroup(dat[1])
		if err != nil {
			return 0, 0, errors.Wrapf(err, "while looking up group %s", dat[1])
		}
		g = group.Gid
	} else {
		us, err := osuser.Lookup(s)
		if err != nil {
			return 0, 0, errors.Wrapf(err, "while looking up user %s", s)
		}
		u = us.Uid
		g = us.Gid
	}

	uid, err := strconv.Atoi(u)
	if err != nil {
		return 0, 0, errors.Wrap(err, "failed converting uid to int")
	}

	gid, err := strconv.Atoi(g)
	if err != nil {
		return 0, 0, errors.Wrap(err, "failed converting gid to int")
	}
	return uid, gid, nil
}
 0707010000090F000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000002B00000000elemental-cli-0.3.1/vendor/github.com/onsi    07070100000910000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003200000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo 07070100000911000041ED000000000000000000000008645E367C00000000000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2  07070100000912000081A4000000000000000000000001645E367C0000003E000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/.gitignore   .DS_Store
TODO.md
tmp/**/*
*.coverprofile
.vscode
.idea/
*.log  07070100000913000081A4000000000000000000000001645E367C000086AA000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md ## 2.9.2

### Maintenance
- Bump github.com/go-task/slim-sprig (#1167) [3fcc5bf]
- Bump github.com/onsi/gomega from 1.27.3 to 1.27.4 (#1163) [6143ffe]

## 2.9.1

### Fixes
This release fixes a longstanding issue where `ginkgo -coverpkg=./...` would not work.  This is now resolved and fixes [#1161](https://github.com/onsi/ginkgo/issues/1161) and [#995](https://github.com/onsi/ginkgo/issues/995)
- Support -coverpkg=./... [26ca1b5]
- document coverpkg a bit more clearly [fc44c3b]

### Maintenance
- bump various dependencies
- Improve Documentation and fix typo (#1158) [93de676]

## 2.9.0

### Features
- AttachProgressReporter is an experimental feature that allows users to provide arbitrary information when a ProgressReport is requested [28801fe]

- GinkgoT() has been expanded to include several Ginkgo-specific methods [2bd5a3b]

  The intent is to enable the development of third-party libraries that integrate deeply with Ginkgo using `GinkgoT()` to access Ginkgo's functionality.

## 2.8.4

### Features
- Add OmitSuiteSetupNodes to JunitReportConfig (#1147) [979fbc2]
- Add a reference to ginkgolinter in docs.index.md (#1143) [8432589]

### Fixes
- rename tools hack to see if it fixes things for downstream users [a8bb39a]

### Maintenance
- Bump golang.org/x/text (#1144) [41b2a8a]
- Bump github.com/onsi/gomega from 1.27.0 to 1.27.1 (#1142) [7c4f583]

## 2.8.3

Released to fix security issue in golang.org/x/net dependency

### Maintenance

- Bump golang.org/x/net from 0.6.0 to 0.7.0 (#1141) [fc1a02e]
- remove tools.go hack from documentation [0718693]

## 2.8.2

Ginkgo now includes a `tools.go` file in the root directory of the `ginkgo` package.  This should allow modules that simply `go get github.com/onsi/ginkgo/v2` to also pull in the CLI dependencies.  This obviates the need for consumers of Ginkgo to have their own `tools.go` file and makes it simpler to ensure that the version of the `ginkgo` CLI being used matches the version of the library.  You can simply run `go run github.com/onsi/ginkgo/v2/ginkgo` to run the version of the cli associated with your package go.mod.

### Maintenance

- Bump github.com/onsi/gomega from 1.26.0 to 1.27.0 (#1139) [5767b0a]
- Fix minor typos (#1138) [e1e9723]
- Fix link in V2 Migration Guide (#1137) [a588f60]

## 2.8.1

### Fixes
- lock around default report output to avoid triggering the race detector when calling By from goroutines [2d5075a]
- don't run ReportEntries through sprintf [febbe38]

### Maintenance
- Bump golang.org/x/tools from 0.5.0 to 0.6.0 (#1135) [11a4860]
- test: update matrix for Go 1.20 (#1130) [4890a62]
- Bump golang.org/x/sys from 0.4.0 to 0.5.0 (#1133) [a774638]
- Bump github.com/onsi/gomega from 1.25.0 to 1.26.0 (#1120) [3f233bd]
- Bump github-pages from 227 to 228 in /docs (#1131) [f9b8649]
- Bump activesupport from 6.0.6 to 6.0.6.1 in /docs (#1127) [6f8c042]
- Update index.md with instructions on how to upgrade Ginkgo [833a75e]

## 2.8.0

### Features

- Introduce GinkgoHelper() to track and exclude helper functions from potential CodeLocations [e19f556]

Modeled after `testing.T.Helper()`.  Now, rather than write code like:

```go
func helper(model Model) {
    Expect(model).WithOffset(1).To(BeValid())
    Expect(model.SerialNumber).WithOffset(1).To(MatchRegexp(/[a-f0-9]*/))
}
```

you can stop tracking offsets (which makes nesting composing helpers nearly impossible) and simply write:

```go
func helper(model Model) {
    GinkgoHelper()
    Expect(model).To(BeValid())
    Expect(model.SerialNumber).To(MatchRegexp(/[a-f0-9]*/))
}
```

- Introduce GinkgoLabelFilter() and Label().MatchesLabelFilter() to make it possible to programmatically match filters (fixes #1119) [2f6597c]

You can now write code like this:

```go
BeforeSuite(func() {
	if Label("slow").MatchesLabelFilter(GinkgoLabelFilter()) {
		// do slow setup
	}

	if Label("fast").MatchesLabelFilter(GinkgoLabelFilter()) {
		// do fast setup
	}
})
```

to programmatically check whether a given set of labels will match the configured `--label-filter`.

### Maintenance

- Bump webrick from 1.7.0 to 1.8.1 in /docs (#1125) [ea4966e]
- cdeql: add ruby language (#1124) [9dd275b]
- dependabot: add bundler package-ecosystem for docs (#1123) [14e7bdd]

## 2.7.1

### Fixes
- Bring back SuiteConfig.EmitSpecProgress to avoid compilation issue for consumers that set it manually [d2a1cb0]

### Maintenance
- Bump github.com/onsi/gomega from 1.24.2 to 1.25.0 (#1118) [cafece6]
- Bump golang.org/x/tools from 0.4.0 to 0.5.0 (#1111) [eda66c2]
- Bump golang.org/x/sys from 0.3.0 to 0.4.0 (#1112) [ac5ccaa]
- Bump github.com/onsi/gomega from 1.24.1 to 1.24.2 (#1097) [eee6480]

## 2.7.0

### Features
- Introduce ContinueOnFailure for Ordered containers [e0123ca] - Ordered containers that are also decorated with ContinueOnFailure will not stop running specs after the first spec fails.
- Support for bootstrap commands to use custom data for templates (#1110) [7a2b242]
- Support for labels and pending decorator in ginkgo outline output (#1113) [e6e3b98]
- Color aliases for custom color support (#1101) [49fab7a]

### Fixes
- correctly ensure deterministic spec order, even if specs are generated by iterating over a map [89dda20]
- Fix a bug where timedout specs were not correctly treated as failures when determining whether or not to run AfterAlls in an Ordered container.
- Ensure go test coverprofile outputs to the expected location (#1105) [b0bd77b]

## 2.6.1

### Features
- Override formatter colors from envvars - this is a new feature but an alternative approach involving config files might be taken in the future (#1095) [60240d1]

### Fixes
- GinkgoRecover now supports ignoring panics that match a specific, hidden, interface [301f3e2]

### Maintenance
- Bump github.com/onsi/gomega from 1.24.0 to 1.24.1 (#1077) [3643823]
- Bump golang.org/x/tools from 0.2.0 to 0.4.0 (#1090) [f9f856e]
- Bump nokogiri from 1.13.9 to 1.13.10 in /docs (#1091) [0d7087e]

## 2.6.0

### Features
- `ReportBeforeSuite` provides access to the suite report before the suite begins.
- Add junit config option for omitting leafnodetype (#1088) [956e6d2]
- Add support to customize junit report config to omit spec labels (#1087) [de44005]

### Fixes
- Fix stack trace pruning so that it has a chance of working on windows [2165648]

## 2.5.1

### Fixes
- skipped tests only show as 'S' when running with -v [3ab38ae]
- Fix typo in docs/index.md (#1082) [55fc58d]
- Fix typo in docs/index.md (#1081) [8a14f1f]
- Fix link notation in docs/index.md (#1080) [2669612]
- Fix typo in `--progress` deprecation message (#1076) [b4b7edc]

### Maintenance
- chore: Included githubactions in the dependabot config (#976) [baea341]
- Bump golang.org/x/sys from 0.1.0 to 0.2.0 (#1075) [9646297]

## 2.5.0

### Ginkgo output now includes a timeline-view of the spec

This commit changes Ginkgo's default output.  Spec details are now
presented as a **timeline** that includes events that occur during the spec
lifecycle interleaved with any GinkgoWriter content.  This makes is much easier
to understand the flow of a spec and where a given failure occurs.

The --progress, --slow-spec-threshold, --always-emit-ginkgo-writer flags
and the SuppressProgressReporting decorator have all been deprecated.  Instead
the existing -v and -vv flags better capture the level of verbosity to display.  However,
a new --show-node-events flag is added to include node `> Enter` and `< Exit` events
in the spec timeline.

In addition, JUnit reports now include the timeline (rendered with -vv) and custom JUnit
reports can be configured and generated using
`GenerateJUnitReportWithConfig(report types.Report, dst string, config JunitReportConfig)`

Code should continue to work unchanged with this version of Ginkgo - however if you have tooling that
was relying on the specific output format of Ginkgo you _may_ run into issues.  Ginkgo's console output is not guaranteed to be stable for tooling and automation purposes.  You should, instead, use Ginkgo's JSON format
to build tooling on top of as it has stronger guarantees to be stable from version to version.

### Features
- Provide details about which timeout expired [0f2fa27]

### Fixes
- Add Support Policy to docs [c70867a]

### Maintenance
- Bump github.com/onsi/gomega from 1.22.1 to 1.23.0 (#1070) [bb3b4e2]

## 2.4.0

### Features

- DeferCleanup supports functions with multiple-return values [5e33c75]
- Add GinkgoLogr (#1067) [bf78c28]
- Introduction of 'MustPassRepeatedly' decorator (#1051) [047c02f]

### Fixes
- correcting some typos (#1064) [1403d3c]
- fix flaky internal_integration interrupt specs [2105ba3]
- Correct busted link in README [be6b5b9]

### Maintenance
- Bump actions/checkout from 2 to 3 (#1062) [8a2f483]
- Bump golang.org/x/tools from 0.1.12 to 0.2.0 (#1065) [529c4e8]
- Bump github/codeql-action from 1 to 2 (#1061) [da09146]
- Bump actions/setup-go from 2 to 3 (#1060) [918040d]
- Bump github.com/onsi/gomega from 1.22.0 to 1.22.1 (#1053) [2098e4d]
- Bump nokogiri from 1.13.8 to 1.13.9 in /docs (#1066) [1d74122]
- Add GHA to dependabot config [4442772]

## 2.3.1

## Fixes
Several users were invoking `ginkgo` by installing the latest version of the cli via `go install github.com/onsi/ginkgo/v2/ginkgo@latest`.  When 2.3.0 was released this resulted in an influx of issues as CI systems failed due to a change in the internal contract between the Ginkgo CLI and the Ginkgo library.  Ginkgo only supports running the same version of the library as the cli (which is why both are packaged in the same repository).

With this patch release, the ginkgo CLI can now identify a version mismatch and emit a helpful error message.

- Ginkgo cli can identify version mismatches and emit a helpful error message [bc4ae2f]
- further emphasize that a version match is required when running Ginkgo on CI and/or locally [2691dd8]

### Maintenance
- bump gomega to v1.22.0 [822a937]

## 2.3.0

### Interruptible Nodes and Timeouts

Ginkgo now supports per-node and per-spec timeouts on interruptible nodes.  Check out the [documentation for all the details](https://onsi.github.io/ginkgo/#spec-timeouts-and-interruptible-nodes) but the gist is you can now write specs like this:

```go
It("is interruptible", func(ctx SpecContext) { // or context.Context instead of SpecContext, both are valid.
    // do things until `ctx.Done()` is closed, for example:
    req, err := http.NewRequestWithContext(ctx, "POST", "/build-widgets", nil)
    Expect(err).NotTo(HaveOccured())
    _, err := http.DefaultClient.Do(req)
    Expect(err).NotTo(HaveOccured())

    Eventually(client.WidgetCount).WithContext(ctx).Should(Equal(17))
}, NodeTimeout(time.Second*20), GracePeriod(5*time.Second))
```

and have Ginkgo ensure that the node completes before the timeout elapses.  If it does elapse, or if an external interrupt is received (e.g. `^C`) then Ginkgo will cancel the context and wait for the Grace Period for the node to exit before proceeding with any cleanup nodes associated with the spec.  The `ctx` provided by Ginkgo can also be passed down to Gomega's `Eventually` to have all assertions within the node governed by a single deadline.

### Features

- Ginkgo now records any additional failures that occur during the cleanup of a failed spec.  In prior versions this information was quietly discarded, but the introduction of a more rigorous approach to timeouts and interruptions allows Ginkgo to better track subsequent failures.
- `SpecContext` also provides a mechanism for third-party libraries to provide additional information when a Progress Report is generated.  Gomega uses this to provide the current state of an `Eventually().WithContext()` assertion when a Progress Report is requested.
- DescribeTable now exits with an error if it is not passed any Entries [a4c9865]

## Fixes
- fixes crashes on newer Ruby 3 installations by upgrading github-pages gem dependency [92c88d5]
- Make the outline command able to use the DSL import [1be2427]

## Maintenance
- chore(docs): delete no meaning d [57c373c]
- chore(docs): Fix hyperlinks [30526d5]
- chore(docs): fix code blocks without language settings [cf611c4]
- fix intra-doc link [b541bcb]

## 2.2.0

### Generate real-time Progress Reports [f91377c]

Ginkgo can now generate Progress Reports to point users at the current running line of code (including a preview of the actual source code) and a best guess at the most relevant subroutines.

These Progress Reports allow users to debug stuck or slow tests without exiting the Ginkgo process.  A Progress Report can be generated at any time by sending Ginkgo a `SIGINFO` (`^T` on MacOS/BSD) or `SIGUSR1`.

In addition, the user can specify `--poll-progress-after` and `--poll-progress-interval` to have Ginkgo start periodically emitting progress reports if a given node takes too long.  These can be overriden/set on a per-node basis with the `PollProgressAfter` and `PollProgressInterval` decorators.

Progress Reports are emitted to stdout, and also stored in the machine-redable report formats that Ginkgo supports.

Ginkgo also uses this progress reporting infrastructure under the hood when handling timeouts and interrupts.  This yields much more focused, useful, and informative stack traces than previously.

### Features
- `BeforeSuite`, `AfterSuite`, `SynchronizedBeforeSuite`, `SynchronizedAfterSuite`, and `ReportAfterSuite` now support (the relevant subset of) decorators.  These can be passed in _after_ the callback functions that are usually passed into these nodes.

  As a result the **signature of these methods has changed** and now includes a trailing `args ...interface{}`.  For most users simply using the DSL, this change is transparent.  However if you were assigning one of these functions to a custom variable (or passing it around) then your code may need to change to reflect the new signature.

### Maintenance
- Modernize the invocation of Ginkgo in github actions [0ffde58]
- Update reocmmended CI settings in docs [896bbb9]
- Speed up unnecessarily slow integration test [6d3a90e]

## 2.1.6

### Fixes
- Add `SuppressProgressReporting` decorator to turn off --progress announcements for a given node [dfef62a]
- chore: remove duplicate word in comments [7373214]

## 2.1.5

### Fixes
- drop -mod=mod instructions; fixes #1026 [6ad7138]
- Ensure `CurrentSpecReport` and `AddReportEntry` are thread-safe [817c09b]
- remove stale importmap gcflags flag test [3cd8b93]
- Always emit spec summary [5cf23e2] - even when only one spec has failed
- Fix ReportAfterSuite usage in docs [b1864ad]
- fixed typo (#997) [219cc00]
- TrimRight is not designed to trim Suffix [71ebb74]
- refactor: replace strings.Replace with strings.ReplaceAll (#978) [143d208]
- fix syntax in examples (#975) [b69554f]

### Maintenance
- Bump github.com/onsi/gomega from 1.20.0 to 1.20.1 (#1027) [e5dfce4]
- Bump tzinfo from 1.2.9 to 1.2.10 in /docs (#1006) [7ae91c4]
- Bump github.com/onsi/gomega from 1.19.0 to 1.20.0 (#1005) [e87a85a]
- test: add new Go 1.19 to test matrix (#1014) [bbefe12]
- Bump golang.org/x/tools from 0.1.11 to 0.1.12 (#1012) [9327906]
- Bump golang.org/x/tools from 0.1.10 to 0.1.11 (#993) [f44af96]
- Bump nokogiri from 1.13.3 to 1.13.6 in /docs (#981) [ef336aa]

## 2.1.4

### Fixes
- Numerous documentation typos
- Prepend `when` when using `When` (this behavior was in 1.x but unintentionally lost during the 2.0 rewrite) [efce903]
- improve error message when a parallel process fails to report back [a7bd1fe]
- guard against concurrent map writes in DeprecationTracker [0976569]
- Invoke reporting nodes during dry-run (fixes #956 and #935) [aae4480]
- Fix ginkgo import circle [f779385]

## 2.1.3

See [https://onsi.github.io/ginkgo/MIGRATING_TO_V2](https://onsi.github.io/ginkgo/MIGRATING_TO_V2) for details on V2.

### Fixes
- Calling By in a container node now emits a useful error. [ff12cee]

## 2.1.2

### Fixes

- Track location of focused specs correctly in `ginkgo unfocus` [a612ff1]
- Profiling suites with focused specs no longer generates an erroneous failure message [8fbfa02]
- Several documentation typos fixed.  Big thanks to everyone who helped catch them and report/fix them!

## 2.1.1

See [https://onsi.github.io/ginkgo/MIGRATING_TO_V2](https://onsi.github.io/ginkgo/MIGRATING_TO_V2) for details on V2.

### Fixes
- Suites that only import the new dsl packages are now correctly identified as Ginkgo suites [ec17e17]

## 2.1.0

See [https://onsi.github.io/ginkgo/MIGRATING_TO_V2](https://onsi.github.io/ginkgo/MIGRATING_TO_V2) for details on V2.

2.1.0 is a minor release with a few tweaks:

- Introduce new DSL packages to enable users to pick-and-choose which portions of the DSL to dot-import. [90868e2]  More details [here](https://onsi.github.io/ginkgo/#alternatives-to-dot-importing-ginkgo).
- Add error check for invalid/nil parameters to DescribeTable [6f8577e]
- Myriad docs typos fixed (thanks everyone!) [718542a, ecb7098, 146654c, a8f9913, 6bdffde, 03dcd7e]

## 2.0.0

See [https://onsi.github.io/ginkgo/MIGRATING_TO_V2](https://onsi.github.io/ginkgo/MIGRATING_TO_V2)

## 1.16.5

Ginkgo 2.0 now has a Release Candidate.  1.16.5 advertises the existence of the RC.
1.16.5 deprecates GinkgoParallelNode in favor of GinkgoParallelProcess

You can silence the RC advertisement by setting an `ACK_GINKGO_RC=true` environment variable or creating a file in your home directory called `.ack-ginkgo-rc`

## 1.16.4

### Fixes
1.16.4 retracts 1.16.3.  There are no code changes.  The 1.16.3 tag was associated with the wrong commit and an attempt to change it after-the-fact has proven problematic.  1.16.4 retracts 1.16.3 in Ginkgo's go.mod and creates a new, correctly tagged, release.

## 1.16.3

### Features
- Measure is now deprecated and emits a deprecation warning.

## 1.16.2

### Fixes
- Deprecations can be suppressed by setting an `ACK_GINKGO_DEPRECATIONS=<semver>` environment variable.

## 1.16.1

### Fixes
- Suppress --stream deprecation warning on windows (#793)

## 1.16.0

### Features
- Advertise Ginkgo 2.0.  Introduce deprecations. [9ef1913]
    - Update README.md to advertise that Ginkgo 2.0 is coming.
    - Backport the 2.0 DeprecationTracker and start alerting users
    about upcoming deprecations.

- Add slim-sprig template functions to bootstrap/generate (#775) [9162b86]

- Fix accidental reference to 1488 (#784) [9fb7fe4]

## 1.15.2

### Fixes
- ignore blank `-focus` and `-skip` flags (#780) [e90a4a0]

## 1.15.1

### Fixes
- reporters/junit: Use `system-out` element instead of `passed` (#769) [9eda305]

## 1.15.0

### Features
- Adds 'outline' command to print the outline of specs/containers in a file (#754) [071c369] [6803cc3] [935b538] [06744e8] [0c40583]
- Add support for using template to generate tests (#752) [efb9e69]
- Add a Chinese Doc #755 (#756) [5207632]
- cli: allow multiple -focus and -skip flags (#736) [9a782fb]

### Fixes
- Add _internal to filename of tests created with internal flag (#751) [43c12da]

## 1.14.2

### Fixes
- correct handling windows backslash in import path (#721) [97f3d51]
- Add additional methods to GinkgoT() to improve compatibility with the testing.TB interface [b5fe44d]

## 1.14.1

### Fixes
- Discard exported method declaration when running ginkgo bootstrap (#558) [f4b0240]

## 1.14.0

### Features
- Defer running top-level container nodes until RunSpecs is called [d44dedf]
- [Document Ginkgo lifecycle](http://onsi.github.io/ginkgo/#understanding-ginkgos-lifecycle)
- Add `extensions/globals` package (#692) [3295c8f] - this can be helpful in contexts where you are test-driving your test-generation code (see [#692](https://github.com/onsi/ginkgo/pull/692))
- Print Skip reason in JUnit reporter if one was provided [820dfab]

## 1.13.0

### Features
- Add a version of table.Entry that allows dumping the entry parameters. (#689) [21eaef2]

### Fixes
- Ensure integration tests pass in an environment sans GOPATH [606fba2]
- Add books package (#568) [fc0e44e]
- doc(readme): installation via "tools package" (#677) [83bb20e]
- Solve the undefined: unix.Dup2 compile error on mips64le (#680) [0624f75]
- Import package without dot (#687) [6321024]
- Fix integration tests to stop require GOPATH (#686) [a912ec5]

## 1.12.3

### Fixes
- Print correct code location of failing table test (#666) [c6d7afb]

## 1.12.2

### Fixes
- Update dependencies [ea4a036]

## 1.12.1

### Fixes
- Make unfocus ("blur") much faster (#674) [8b18061]
- Fix typo (#673) [7fdcbe8]
- Test against 1.14 and remove 1.12 [d5c2ad6]
- Test if a coverprofile content is empty before checking its latest character (#670) [14d9fa2]
- replace tail package with maintained one. this fixes go get errors (#667) [4ba33d4]
- improve ginkgo performance - makes progress on #644 [a14f98e]
- fix convert integration tests [1f8ba69]
- fix typo successful -> successful (#663) [1ea49cf]
- Fix invalid link (#658) [b886136]
- convert utility : Include comments from source (#657) [1077c6d]
- Explain what BDD means [d79e7fb]
- skip race detector test on unsupported platform (#642) [f8ab89d]
- Use Dup2 from golang.org/x/sys/unix instead of syscallDup (#638) [5d53c55]
- Fix missing newline in combined coverage file (#641) [6a07ea2]
- check if a spec is run before returning SpecSummary (#645) [8850000]

## 1.12.0

### Features
- Add module definition (#630) [78916ab]

## 1.11.0

### Features
- Add syscall for riscv64 architecture [f66e896]
- teamcity reporter: output location of test failure as well as test definition (#626) [9869142]
- teamcity reporter: output newline after every service message (#625) [3cfa02d]
- Add support for go module when running `generate` command (#578) [9c89e3f]

## 1.10.3

### Fixes
- Set go_import_path in travis.yml to allow internal packages in forks (#607) [3b721db]
- Add integration test [d90e0dc]
- Fix coverage files combining [e5dde8c]
- A new CLI option: -ginkgo.reportFile <file path> (#601) [034fd25]

## 1.10.2

### Fixes
- speed up table entry generateIt() (#609) [5049dc5]
- Fix. Write errors to stderr instead of stdout (#610) [7bb3091]

## 1.10.1

### Fixes
- stack backtrace: fix skipping (#600) [2a4c0bd]

## 1.10.0

### Fixes
- stack backtrace: fix alignment and skipping [66915d6]
- fix typo in documentation [8f97b93]

## 1.9.0

### Features
- Option to print output into report, when tests have passed [0545415]

### Fixes
- Fixed typos in comments [0ecbc58]
- gofmt code [a7f8bfb]
- Simplify code [7454d00]
- Simplify concatenation, incrementation and function assignment [4825557]
- Avoid unnecessary conversions [9d9403c]
- JUnit: include more detailed information about panic [19cca4b]
- Print help to stdout when the user asks for help [4cb7441]


## 1.8.0

### New Features
- allow config of the vet flag for `go test` (#562) [3cd45fa]
- Support projects using go modules [d56ee76]

### Fixes and Minor Improvements
- chore(godoc): fixes typos in Measurement funcs [dbaca8e]
- Optimize focus to avoid allocations [f493786]
- Ensure generated test file names are underscored [505cc35]

## 1.7.0

### New Features
- Add JustAfterEach (#484) [0d4f080]

### Fixes
- Correctly round suite time in junit reporter [2445fc1]
- Avoid using -i argument to go test for Golang 1.10+ [46bbc26]

## 1.6.0

### New Features
- add --debug flag to emit node output to files (#499) [39febac]

### Fixes
- fix: for `go vet` to pass [69338ec]
- docs: fix for contributing instructions [7004cb1]
- consolidate and streamline contribution docs (#494) [d848015]
- Make generated Junit file compatible with "Maven Surefire" (#488) [e51bee6]
- all: gofmt [000d317]
- Increase eventually timeout to 30s [c73579c]
- Clarify asynchronous test behavior [294d8f4]
- Travis badge should only show master [26d2143]

## 1.5.0 5/10/2018

### New Features
- Supports go v1.10 (#443, #446, #451) [e873237, 468e89e, e37dbfe, a37f4c0, c0b857d, bca5260, 4177ca8]
- Add a When() synonym for Context() (#386) [747514b, 7484dad, 7354a07, dd826c8]
- Re-add noisySkippings flag [652e15c]
- Allow coverage to be displayed for focused specs (#367) [11459a8]
- Handle -outputdir flag (#364) [228e3a8]
- Handle -coverprofile flag (#355) [43392d5]

### Fixes
- When using custom reporters register the custom reporters *before* the default reporter.  This allows users to see the output of any print statements in their customer reporters. (#365) [8382b23]
- When running a test and calculating the coverage using the `-coverprofile` and `-outputdir` flags, Ginkgo fails with an error if the directory does not exist. This is due to an [issue in go 1.10](https://github.com/golang/go/issues/24588) (#446) [b36a6e0]
- `unfocus` command ignores vendor folder (#459) [e5e551c, c556e43, a3b6351, 9a820dd]
- Ignore packages whose tests are all ignored by go (#456) [7430ca7, 6d8be98]
- Increase the threshold when checking time measurements (#455) [2f714bf, 68f622c]
- Fix race condition in coverage tests (#423) [a5a8ff7, ab9c08b]
- Add an extra new line after reporting spec run completion for test2json [874520d]
- added name name field to junit reported testsuite [ae61c63]
- Do not set the run time of a spec when the dryRun flag is used (#438) [457e2d9, ba8e856]
- Process FWhen and FSpecify when unfocusing (#434) [9008c7b, ee65bd, df87dfe]
- Synchronies the access to the state of specs to avoid race conditions (#430) [7d481bc, ae6829d]
- Added Duration on GinkgoTestDescription (#383) [5f49dad, 528417e, 0747408, 329d7ed]
- Fix Ginkgo stack trace on failure for Specify (#415) [b977ede, 65ca40e, 6c46eb8]
- Update README with Go 1.6+, Golang -> Go (#409) [17f6b97, bc14b66, 20d1598]
- Use fmt.Errorf instead of errors.New(fmt.Sprintf (#401) [a299f56, 44e2eaa]
- Imports in generated code should follow conventions (#398) [0bec0b0, e8536d8]
- Prevent data race error when Recording a benchmark value from multiple go routines (#390) [c0c4881, 7a241e9]
- Replace GOPATH in Environment [4b883f0]


## 1.4.0 7/16/2017

- `ginkgo` now provides a hint if you accidentally forget to run `ginkgo bootstrap` to generate a `*_suite_test.go` file that actually invokes the Ginkgo test runner. [#345](https://github.com/onsi/ginkgo/pull/345)
- thanks to improvements in `go test -c` `ginkgo` no longer needs to fix Go's compilation output to ensure compilation errors are expressed relative to the CWD. [#357]
- `ginkgo watch -watchRegExp=...` allows you to specify a custom regular expression to watch.  Only files matching the regular expression are watched for changes (the default is `\.go$`) [#356]
- `ginkgo` now always emits compilation output.  Previously, only failed compilation output was printed out. [#277]
- `ginkgo -requireSuite` now fails the test run if there are `*_test.go` files but `go test` fails to detect any tests.  Typically this means you forgot to run `ginkgo bootstrap` to generate a suite file. [#344]
- `ginkgo -timeout=DURATION` allows you to adjust the timeout for the entire test suite (default is 24 hours) [#248]

## 1.3.0 3/28/2017

Improvements:

- Significantly improved parallel test distribution.  Now instead of pre-sharding test cases across workers (which can result in idle workers and poor test performance) Ginkgo uses a shared queue to keep all workers busy until all tests are complete.  This improves test-time performance and consistency.
- `Skip(message)` can be used to skip the current test.
- Added `extensions/table` - a Ginkgo DSL for [Table Driven Tests](http://onsi.github.io/ginkgo/#table-driven-tests)
- Add `GinkgoRandomSeed()` - shorthand for `config.GinkgoConfig.RandomSeed`
- Support for retrying flaky tests with `--flakeAttempts`
- `ginkgo ./...` now recurses as you'd expect
- Added `Specify` a synonym for `It`
- Support colorise on Windows
- Broader support for various go compilation flags in the `ginkgo` CLI

Bug Fixes:

- Ginkgo tests now fail when you `panic(nil)` (#167)

## 1.2.0 5/31/2015

Improvements

- `ginkgo -coverpkg` calls down to `go test -coverpkg` (#160)
- `ginkgo -afterSuiteHook COMMAND` invokes the passed-in `COMMAND` after a test suite completes (#152)
- Relaxed requirement for Go 1.4+.  `ginkgo` now works with Go v1.3+ (#166)

## 1.2.0-beta

Ginkgo now requires Go 1.4+

Improvements:

- Call reporters in reverse order when announcing spec completion -- allows custom reporters to emit output before the default reporter does.
- Improved focus behavior.  Now, this:

    ```golang
    FDescribe("Some describe", func() {
        It("A", func() {})

        FIt("B", func() {})
    })
    ```

  will run `B` but *not* `A`.  This tends to be a common usage pattern when in the thick of writing and debugging tests.
- When `SIGINT` is received, Ginkgo will emit the contents of the `GinkgoWriter` before running the `AfterSuite`.  Useful for debugging stuck tests.
- When `--progress` is set, Ginkgo will write test progress (in particular, Ginkgo will say when it is about to run a BeforeEach, AfterEach, It, etc...) to the `GinkgoWriter`.  This is useful for debugging stuck tests and tests that generate many logs.
- Improved output when an error occurs in a setup or teardown block.
- When `--dryRun` is set, Ginkgo will walk the spec tree and emit to its reporter *without* actually running anything.  Best paired with `-v` to understand which specs will run in which order.
- Add `By` to help document long `It`s.  `By` simply writes to the `GinkgoWriter`.
- Add support for precompiled tests:
    - `ginkgo build <path-to-package>` will now compile the package, producing a file named `package.test`
    - The compiled `package.test` file can be run directly.  This runs the tests in series.
    - To run precompiled tests in parallel, you can run: `ginkgo -p package.test`
- Support `bootstrap`ping and `generate`ing [Agouti](http://agouti.org) specs.
- `ginkgo generate` and `ginkgo bootstrap` now honor the package name already defined in a given directory
- The `ginkgo` CLI ignores `SIGQUIT`.  Prevents its stack dump from interlacing with the underlying test suite's stack dump.
- The `ginkgo` CLI now compiles tests into a temporary directory instead of the package directory.  This necessitates upgrading to Go v1.4+.
- `ginkgo -notify` now works on Linux

Bug Fixes:

- If --skipPackages is used and all packages are skipped, Ginkgo should exit 0.
- Fix tempfile leak when running in parallel
- Fix incorrect failure message when a panic occurs during a parallel test run
- Fixed an issue where a pending test within a focused context (or a focused test within a pending context) would skip all other tests.
- Be more consistent about handling SIGTERM as well as SIGINT
- When interrupted while concurrently compiling test suites in the background, Ginkgo now cleans up the compiled artifacts.
- Fixed a long standing bug where `ginkgo -p` would hang if a process spawned by one of the Ginkgo parallel nodes does not exit. (Hooray!)

## 1.1.0 (8/2/2014)

No changes, just dropping the beta.

## 1.1.0-beta (7/22/2014)
New Features:

- `ginkgo watch` now monitors packages *and their dependencies* for changes.  The depth of the dependency tree can be modified with the `-depth` flag.
- Test suites with a programmatic focus (`FIt`, `FDescribe`, etc...) exit with non-zero status code, even when they pass.  This allows CI systems to detect accidental commits of focused test suites.
- `ginkgo -p` runs the testsuite in parallel with an auto-detected number of nodes.
- `ginkgo -tags=TAG_LIST` passes a list of tags down to the `go build` command.
- `ginkgo --failFast` aborts the test suite after the first failure.
- `ginkgo generate file_1 file_2` can take multiple file arguments.
- Ginkgo now summarizes any spec failures that occurred at the end of the test run. 
- `ginkgo --randomizeSuites` will run tests *suites* in random order using the generated/passed-in seed.

Improvements:

- `ginkgo -skipPackage` now takes a comma-separated list of strings.  If the *relative path* to a package matches one of the entries in the comma-separated list, that package is skipped.
- `ginkgo --untilItFails` no longer recompiles between attempts.
- Ginkgo now panics when a runnable node (`It`, `BeforeEach`, `JustBeforeEach`, `AfterEach`, `Measure`) is nested within another runnable node.  This is always a mistake.  Any test suites that panic because of this change should be fixed.

Bug Fixes:

- `ginkgo boostrap` and `ginkgo generate` no longer fail when dealing with `hyphen-separated-packages`.
- parallel specs are now better distributed across nodes - fixed a crashing bug where (for example) distributing 11 tests across 7 nodes would panic

## 1.0.0 (5/24/2014)
New Features:

- Add `GinkgoParallelNode()` - shorthand for `config.GinkgoConfig.ParallelNode`

Improvements:

- When compilation fails, the compilation output is rewritten to present a correct *relative* path.  Allows ⌘-clicking in iTerm open the file in your text editor.
- `--untilItFails` and `ginkgo watch` now generate new random seeds between test runs, unless a particular random seed is specified.

Bug Fixes:

- `-cover` now generates a correctly combined coverprofile when running with in parallel with multiple `-node`s.
- Print out the contents of the `GinkgoWriter` when `BeforeSuite` or `AfterSuite` fail.
- Fix all remaining race conditions in Ginkgo's test suite.

## 1.0.0-beta (4/14/2014)
Breaking changes:

- `thirdparty/gomocktestreporter` is gone.  Use `GinkgoT()` instead
- Modified the Reporter interface 
- `watch` is now a subcommand, not a flag.

DSL changes:

- `BeforeSuite` and `AfterSuite` for setting up and tearing down test suites.
- `AfterSuite` is triggered on interrupt (`^C`) as well as exit.
- `SynchronizedBeforeSuite` and `SynchronizedAfterSuite` for setting up and tearing down singleton resources across parallel nodes.

CLI changes:

- `watch` is now a subcommand, not a flag
- `--nodot` flag can be passed to `ginkgo generate` and `ginkgo bootstrap` to avoid dot imports.  This explicitly imports all exported identifiers in Ginkgo and Gomega.  Refreshing this list can be done by running `ginkgo nodot`
- Additional arguments can be passed to specs.  Pass them after the `--` separator
- `--skipPackage` flag takes a regexp and ignores any packages with package names passing said regexp.
- `--trace` flag prints out full stack traces when errors occur, not just the line at which the error occurs.

Misc:

- Start using semantic versioning
- Start maintaining changelog

Major refactor:

- Pull out Ginkgo's internal to `internal`
- Rename `example` everywhere to `spec`
- Much more!
  07070100000914000081A4000000000000000000000001645E367C00000353000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/CONTRIBUTING.md  # Contributing to Ginkgo

Your contributions to Ginkgo are essential for its long-term maintenance and improvement.

- Please **open an issue first** - describe what problem you are trying to solve and give the community a forum for input and feedback ahead of investing time in writing code!
- Ensure adequate test coverage:
    - When adding to the Ginkgo library, add unit and/or integration tests (under the `integration` folder).
    - When adding to the Ginkgo CLI, note that there are very few unit tests.  Please add an integration test.
- Make sure all the tests succeed via `ginkgo -r -p`
- Vet your changes via `go vet ./...`
- Update the documentation. Ginkgo uses `godoc` comments and documentation in `docs/index.md`.  You can run `bundle exec jekyll serve` in the `docs` directory to preview your changes.

Thanks for supporting Ginkgo! 07070100000915000081A4000000000000000000000001645E367C00000426000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/LICENSE  Copyright (c) 2013-2014 Onsi Fakhouri

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  07070100000916000081A4000000000000000000000001645E367C00001D77000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/README.md    ![Ginkgo](https://onsi.github.io/ginkgo/images/ginkgo.png)

[![test](https://github.com/onsi/ginkgo/workflows/test/badge.svg?branch=master)](https://github.com/onsi/ginkgo/actions?query=workflow%3Atest+branch%3Amaster) | [Ginkgo Docs](https://onsi.github.io/ginkgo/)

---

# Ginkgo

Ginkgo is a mature testing framework for Go designed to help you write expressive specs.  Ginkgo builds on top of Go's `testing` foundation and is complemented by the [Gomega](https://github.com/onsi/gomega) matcher library.  Together, Ginkgo and Gomega let you express the intent behind your specs clearly:

```go
import (
    . "github.com/onsi/ginkgo/v2"
    . "github.com/onsi/gomega"
    ...
)

Describe("Checking books out of the library", Label("library"), func() {
    var library *libraries.Library
    var book *books.Book
    var valjean *users.User
    BeforeEach(func() {
        library = libraries.NewClient()
        book = &books.Book{
            Title: "Les Miserables",
            Author: "Victor Hugo",
        }
        valjean = users.NewUser("Jean Valjean")
    })

    When("the library has the book in question", func() {
        BeforeEach(func(ctx SpecContext) {
            Expect(library.Store(ctx, book)).To(Succeed())
        })

        Context("and the book is available", func() {
            It("lends it to the reader", func(ctx SpecContext) {
                Expect(valjean.Checkout(ctx, library, "Les Miserables")).To(Succeed())
                Expect(valjean.Books()).To(ContainElement(book))
                Expect(library.UserWithBook(ctx, book)).To(Equal(valjean))
            }, SpecTimeout(time.Second * 5))
        })

        Context("but the book has already been checked out", func() {
            var javert *users.User
            BeforeEach(func(ctx SpecContext) {
                javert = users.NewUser("Javert")
                Expect(javert.Checkout(ctx, library, "Les Miserables")).To(Succeed())
            })

            It("tells the user", func(ctx SpecContext) {
                err := valjean.Checkout(ctx, library, "Les Miserables")
                Expect(error).To(MatchError("Les Miserables is currently checked out"))
            }, SpecTimeout(time.Second * 5))

            It("lets the user place a hold and get notified later", func(ctx SpecContext) {
                Expect(valjean.Hold(ctx, library, "Les Miserables")).To(Succeed())
                Expect(valjean.Holds(ctx)).To(ContainElement(book))

                By("when Javert returns the book")
                Expect(javert.Return(ctx, library, book)).To(Succeed())

                By("it eventually informs Valjean")
                notification := "Les Miserables is ready for pick up"
                Eventually(ctx, valjean.Notifications).Should(ContainElement(notification))

                Expect(valjean.Checkout(ctx, library, "Les Miserables")).To(Succeed())
                Expect(valjean.Books(ctx)).To(ContainElement(book))
                Expect(valjean.Holds(ctx)).To(BeEmpty())
            }, SpecTimeout(time.Second * 10))
        })  
    })

    When("the library does not have the book in question", func() {
        It("tells the reader the book is unavailable", func(ctx SpecContext) {
            err := valjean.Checkout(ctx, library, "Les Miserables")
            Expect(error).To(MatchError("Les Miserables is not in the library catalog"))
        }, SpecTimeout(time.Second * 5))
    })
})
```

Jump to the [docs](https://onsi.github.io/ginkgo/) to learn more.  It's easy to [bootstrap](https://onsi.github.io/ginkgo/#bootstrapping-a-suite) and start writing your [first specs](https://onsi.github.io/ginkgo/#adding-specs-to-a-suite).

If you have a question, comment, bug report, feature request, etc. please open a [GitHub issue](https://github.com/onsi/ginkgo/issues/new), or visit the [Ginkgo Slack channel](https://app.slack.com/client/T029RQSE6/CQQ50BBNW).

## Capabilities

Whether writing basic unit specs, complex integration specs, or even performance specs - Ginkgo gives you an expressive Domain-Specific Language (DSL) that will be familiar to users coming from frameworks such as [Quick](https://github.com/Quick/Quick), [RSpec](https://rspec.info), [Jasmine](https://jasmine.github.io), and [Busted](https://lunarmodules.github.io/busted/).  This style of testing is sometimes referred to as "Behavior-Driven Development" (BDD) though Ginkgo's utility extends beyond acceptance-level testing.

With Ginkgo's DSL you can use nestable [`Describe`, `Context` and `When` container nodes](https://onsi.github.io/ginkgo/#organizing-specs-with-container-nodes) to help you organize your specs.  [`BeforeEach` and `AfterEach` setup nodes](https://onsi.github.io/ginkgo/#extracting-common-setup-beforeeach) for setup and cleanup.  [`It` and `Specify` subject nodes](https://onsi.github.io/ginkgo/#spec-subjects-it) that hold your assertions. [`BeforeSuite` and `AfterSuite` nodes](https://onsi.github.io/ginkgo/#suite-setup-and-cleanup-beforesuite-and-aftersuite) to prep for and cleanup after a suite... and [much more!](https://onsi.github.io/ginkgo/#writing-specs).

At runtime, Ginkgo can run your specs in reproducibly [random order](https://onsi.github.io/ginkgo/#spec-randomization) and has sophisticated support for [spec parallelization](https://onsi.github.io/ginkgo/#spec-parallelization).  In fact, running specs in parallel is as easy as

```bash
ginkgo -p
```

By following [established patterns for writing parallel specs](https://onsi.github.io/ginkgo/#patterns-for-parallel-integration-specs) you can build even large, complex integration suites that parallelize cleanly and run performantly.  And you don't have to worry about your spec suite hanging or leaving a mess behind - Ginkgo provides a per-node `context.Context` and the capability to interrupt the spec after a set period of time - and then clean up.

As your suites grow Ginkgo helps you keep your specs organized with [labels](https://onsi.github.io/ginkgo/#spec-labels) and lets you easily run [subsets of specs](https://onsi.github.io/ginkgo/#filtering-specs), either [programmatically](https://onsi.github.io/ginkgo/#focused-specs) or on the [command line](https://onsi.github.io/ginkgo/#combining-filters).  And Ginkgo's reporting infrastructure generates machine-readable output in a [variety of formats](https://onsi.github.io/ginkgo/#generating-machine-readable-reports) _and_ allows you to build your own [custom reporting infrastructure](https://onsi.github.io/ginkgo/#generating-reports-programmatically).

Ginkgo ships with `ginkgo`, a [command line tool](https://onsi.github.io/ginkgo/#ginkgo-cli-overview) with support for generating, running, filtering, and profiling Ginkgo suites.  You can even have Ginkgo automatically run your specs when it detects a change with `ginkgo watch`, enabling rapid feedback loops during test-driven development.

And that's just Ginkgo!  [Gomega](https://onsi.github.io/gomega/) brings a rich, mature, family of [assertions and matchers](https://onsi.github.io/gomega/#provided-matchers) to your suites.  With Gomega you can easily mix [synchronous and asynchronous assertions](https://onsi.github.io/ginkgo/#patterns-for-asynchronous-testing) in your specs.  You can even build your own set of expressive domain-specific matchers quickly and easily by composing Gomega's [existing building blocks](https://onsi.github.io/ginkgo/#building-custom-matchers).

Happy Testing!

## License

Ginkgo is MIT-Licensed

## Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md)
 07070100000917000081A4000000000000000000000001645E367C0000035A000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/RELEASING.md A Ginkgo release is a tagged git sha and a GitHub release.  To cut a release:

1. Ensure CHANGELOG.md is up to date.
  - Use 
    ```bash
    LAST_VERSION=$(git tag --sort=version:refname | tail -n1)
    CHANGES=$(git log --pretty=format:'- %s [%h]' HEAD...$LAST_VERSION)
    echo -e "## NEXT\n\n$CHANGES\n\n### Features\n\n### Fixes\n\n### Maintenance\n\n$(cat CHANGELOG.md)" > CHANGELOG.md
    ```
   to update the changelog
  - Categorize the changes into
    - Breaking Changes (requires a major version)
    - New Features (minor version)
    - Fixes (fix version)
    - Maintenance (which in general should not be mentioned in `CHANGELOG.md` as they have no user impact)
1. Update `VERSION` in `types/version.go`
1. Commit, push, and release:
  ```
  git commit -m "vM.m.p"
  git push
  gh release create "vM.m.p"
  git fetch --tags origin master
  ```  07070100000918000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/config   07070100000919000081A4000000000000000000000001645E367C00000D4F000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/config/deprecated.go package config

// GinkgoConfigType has been deprecated and its equivalent now lives in
// the types package.  You can no longer access Ginkgo configuration from the config
// package.  Instead use the DSL's GinkgoConfiguration() function to get copies of the
// current configuration
//
// GinkgoConfigType is still here so custom V1 reporters do not result in a compilation error
// It will be removed in a future minor release of Ginkgo
type GinkgoConfigType = DeprecatedGinkgoConfigType
type DeprecatedGinkgoConfigType struct {
	RandomSeed         int64
	RandomizeAllSpecs  bool
	RegexScansFilePath bool
	FocusStrings       []string
	SkipStrings        []string
	SkipMeasurements   bool
	FailOnPending      bool
	FailFast           bool
	FlakeAttempts      int
	EmitSpecProgress   bool
	DryRun             bool
	DebugParallel      bool

	ParallelNode  int
	ParallelTotal int
	SyncHost      string
	StreamHost    string
}

// DefaultReporterConfigType has been deprecated and its equivalent now lives in
// the types package.  You can no longer access Ginkgo configuration from the config
// package.  Instead use the DSL's GinkgoConfiguration() function to get copies of the
// current configuration
//
// DefaultReporterConfigType is still here so custom V1 reporters do not result in a compilation error
// It will be removed in a future minor release of Ginkgo
type DefaultReporterConfigType = DeprecatedDefaultReporterConfigType
type DeprecatedDefaultReporterConfigType struct {
	NoColor           bool
	SlowSpecThreshold float64
	NoisyPendings     bool
	NoisySkippings    bool
	Succinct          bool
	Verbose           bool
	FullTrace         bool
	ReportPassed      bool
	ReportFile        string
}

// Sadly there is no way to gracefully deprecate access to these global config variables.
// Users who need access to Ginkgo's configuration should use the DSL's GinkgoConfiguration() method
// These new unwieldy type names exist to give users a hint when they try to compile and the compilation fails
type GinkgoConfigIsNoLongerAccessibleFromTheConfigPackageUseTheDSLsGinkgoConfigurationFunctionInstead struct{}

// Sadly there is no way to gracefully deprecate access to these global config variables.
// Users who need access to Ginkgo's configuration should use the DSL's GinkgoConfiguration() method
// These new unwieldy type names exist to give users a hint when they try to compile and the compilation fails
var GinkgoConfig = GinkgoConfigIsNoLongerAccessibleFromTheConfigPackageUseTheDSLsGinkgoConfigurationFunctionInstead{}

// Sadly there is no way to gracefully deprecate access to these global config variables.
// Users who need access to Ginkgo's configuration should use the DSL's GinkgoConfiguration() method
// These new unwieldy type names exist to give users a hint when they try to compile and the compilation fails
type DefaultReporterConfigIsNoLongerAccessibleFromTheConfigPackageUseTheDSLsGinkgoConfigurationFunctionInstead struct{}

// Sadly there is no way to gracefully deprecate access to these global config variables.
// Users who need access to Ginkgo's configuration should use the DSL's GinkgoConfiguration() method
// These new unwieldy type names exist to give users a hint when they try to compile and the compilation fails
var DefaultReporterConfig = DefaultReporterConfigIsNoLongerAccessibleFromTheConfigPackageUseTheDSLsGinkgoConfigurationFunctionInstead{}
 0707010000091A000081A4000000000000000000000001645E367C00008A43000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/core_dsl.go  /*
Ginkgo is a testing framework for Go designed to help you write expressive tests.
https://github.com/onsi/ginkgo
MIT-Licensed

The godoc documentation outlines Ginkgo's API.  Since Ginkgo is a Domain-Specific Language it is important to
build a mental model for Ginkgo - the narrative documentation at https://onsi.github.io/ginkgo/ is designed to help you do that.
You should start there - even a brief skim will be helpful.  At minimum you should skim through the https://onsi.github.io/ginkgo/#getting-started chapter.

Ginkgo's is best paired with the Gomega matcher library: https://github.com/onsi/gomega

You can run Ginkgo specs with go test - however we recommend using the ginkgo cli.  It enables functionality
that go test does not (especially running suites in parallel).  You can learn more at https://onsi.github.io/ginkgo/#ginkgo-cli-overview
or by running 'ginkgo help'.
*/
package ginkgo

import (
	"fmt"
	"io"
	"os"
	"path/filepath"
	"strings"

	"github.com/go-logr/logr"
	"github.com/onsi/ginkgo/v2/formatter"
	"github.com/onsi/ginkgo/v2/internal"
	"github.com/onsi/ginkgo/v2/internal/global"
	"github.com/onsi/ginkgo/v2/internal/interrupt_handler"
	"github.com/onsi/ginkgo/v2/internal/parallel_support"
	"github.com/onsi/ginkgo/v2/reporters"
	"github.com/onsi/ginkgo/v2/types"
)

const GINKGO_VERSION = types.VERSION

var flagSet types.GinkgoFlagSet
var deprecationTracker = types.NewDeprecationTracker()
var suiteConfig = types.NewDefaultSuiteConfig()
var reporterConfig = types.NewDefaultReporterConfig()
var suiteDidRun = false
var outputInterceptor internal.OutputInterceptor
var client parallel_support.Client

func init() {
	var err error
	flagSet, err = types.BuildTestSuiteFlagSet(&suiteConfig, &reporterConfig)
	exitIfErr(err)
	writer := internal.NewWriter(os.Stdout)
	GinkgoWriter = writer
	GinkgoLogr = internal.GinkgoLogrFunc(writer)
}

func exitIfErr(err error) {
	if err != nil {
		if outputInterceptor != nil {
			outputInterceptor.Shutdown()
		}
		if client != nil {
			client.Close()
		}
		fmt.Fprintln(formatter.ColorableStdErr, err.Error())
		os.Exit(1)
	}
}

func exitIfErrors(errors []error) {
	if len(errors) > 0 {
		if outputInterceptor != nil {
			outputInterceptor.Shutdown()
		}
		if client != nil {
			client.Close()
		}
		for _, err := range errors {
			fmt.Fprintln(formatter.ColorableStdErr, err.Error())
		}
		os.Exit(1)
	}
}

// The interface implemented by GinkgoWriter
type GinkgoWriterInterface interface {
	io.Writer

	Print(a ...interface{})
	Printf(format string, a ...interface{})
	Println(a ...interface{})

	TeeTo(writer io.Writer)
	ClearTeeWriters()
}

/*
SpecContext is the context object passed into nodes that are subject to a timeout or need to be notified of an interrupt.  It implements the standard context.Context interface but also contains additional helpers to provide an extensibility point for Ginkgo.  (As an example, Gomega's Eventually can use the methods defined on SpecContext to provide deeper integration with Ginkgo).

You can do anything with SpecContext that you do with a typical context.Context including wrapping it with any of the context.With* methods.

Ginkgo will cancel the SpecContext when a node is interrupted (e.g. by the user sending an interrupt signal) or when a node has exceeded its allowed run-time.  Note, however, that even in cases where a node has a deadline, SpecContext will not return a deadline via .Deadline().  This is because Ginkgo does not use a WithDeadline() context to model node deadlines as Ginkgo needs control over the precise timing of the context cancellation to ensure it can provide an accurate progress report at the moment of cancellation.
*/
type SpecContext = internal.SpecContext

/*
GinkgoWriter implements a GinkgoWriterInterface and io.Writer

When running in verbose mode (ginkgo -v) any writes to GinkgoWriter will be immediately printed
to stdout.  Otherwise, GinkgoWriter will buffer any writes produced during the current test and flush them to screen
only if the current test fails.

GinkgoWriter also provides convenience Print, Printf and Println methods and allows you to tee to a custom writer via GinkgoWriter.TeeTo(writer).
Writes to GinkgoWriter are immediately sent to any registered TeeTo() writers.  You can unregister all TeeTo() Writers with GinkgoWriter.ClearTeeWriters()

You can learn more at https://onsi.github.io/ginkgo/#logging-output
*/
var GinkgoWriter GinkgoWriterInterface

/*
GinkgoLogr is a logr.Logger that writes to GinkgoWriter
*/
var GinkgoLogr logr.Logger

// The interface by which Ginkgo receives *testing.T
type GinkgoTestingT interface {
	Fail()
}

/*
GinkgoConfiguration returns the configuration of the current suite.

The first return value is the SuiteConfig which controls aspects of how the suite runs,
the second return value is the ReporterConfig which controls aspects of how Ginkgo's default
reporter emits output.

Mutating the returned configurations has no effect.  To reconfigure Ginkgo programmatically you need
to pass in your mutated copies into RunSpecs().

You can learn more at https://onsi.github.io/ginkgo/#overriding-ginkgos-command-line-configuration-in-the-suite
*/
func GinkgoConfiguration() (types.SuiteConfig, types.ReporterConfig) {
	return suiteConfig, reporterConfig
}

/*
GinkgoRandomSeed returns the seed used to randomize spec execution order.  It is
useful for seeding your own pseudorandom number generators to ensure
consistent executions from run to run, where your tests contain variability (for
example, when selecting random spec data).

You can learn more at https://onsi.github.io/ginkgo/#spec-randomization
*/
func GinkgoRandomSeed() int64 {
	return suiteConfig.RandomSeed
}

/*
GinkgoParallelProcess returns the parallel process number for the current ginkgo process
The process number is 1-indexed.  You can use GinkgoParallelProcess() to shard access to shared
resources across your suites.  You can learn more about patterns for sharding at https://onsi.github.io/ginkgo/#patterns-for-parallel-integration-specs

For more on how specs are parallelized in Ginkgo, see http://onsi.github.io/ginkgo/#spec-parallelization
*/
func GinkgoParallelProcess() int {
	return suiteConfig.ParallelProcess
}

/*
GinkgoHelper marks the function it's called in as a test helper.  When a failure occurs inside a helper function, Ginkgo will skip the helper when analyzing the stack trace to identify where the failure occurred.

This is an alternative, simpler, mechanism to passing in a skip offset when calling Fail or using Gomega.
*/
func GinkgoHelper() {
	types.MarkAsHelper(1)
}

/*
GinkgoLabelFilter() returns the label filter configured for this suite via `--label-filter`.

You can use this to manually check if a set of labels would satisfy the filter via:

	if (Label("cat", "dog").MatchesLabelFilter(GinkgoLabelFilter())) {
		//...
	}
*/
func GinkgoLabelFilter() string {
	suiteConfig, _ := GinkgoConfiguration()
	return suiteConfig.LabelFilter
}

/*
PauseOutputInterception() pauses Ginkgo's output interception.  This is only relevant
when running in parallel and output to stdout/stderr is being intercepted.  You generally
don't need to call this function - however there are cases when Ginkgo's output interception
mechanisms can interfere with external processes launched by the test process.

In particular, if an external process is launched that has cmd.Stdout/cmd.Stderr set to os.Stdout/os.Stderr
then Ginkgo's output interceptor will hang.  To circumvent this, set cmd.Stdout/cmd.Stderr to GinkgoWriter.
If, for some reason, you aren't able to do that, you can PauseOutputInterception() before starting the process
then ResumeOutputInterception() after starting it.

Note that PauseOutputInterception() does not cause stdout writes to print to the console -
this simply stops intercepting and storing stdout writes to an internal buffer.
*/
func PauseOutputInterception() {
	if outputInterceptor == nil {
		return
	}
	outputInterceptor.PauseIntercepting()
}

// ResumeOutputInterception() - see docs for PauseOutputInterception()
func ResumeOutputInterception() {
	if outputInterceptor == nil {
		return
	}
	outputInterceptor.ResumeIntercepting()
}

/*
RunSpecs is the entry point for the Ginkgo spec runner.

You must call this within a Golang testing TestX(t *testing.T) function.
If you bootstrapped your suite with "ginkgo bootstrap" this is already
done for you.

Ginkgo is typically configured via command-line flags.  This configuration
can be overridden, however, and passed into RunSpecs as optional arguments:

	func TestMySuite(t *testing.T)  {
		RegisterFailHandler(gomega.Fail)
		// fetch the current config
		suiteConfig, reporterConfig := GinkgoConfiguration()
		// adjust it
		suiteConfig.SkipStrings = []string{"NEVER-RUN"}
		reporterConfig.FullTrace = true
		// pass it in to RunSpecs
		RunSpecs(t, "My Suite", suiteConfig, reporterConfig)
	}

Note that some configuration changes can lead to undefined behavior.  For example,
you should not change ParallelProcess or ParallelTotal as the Ginkgo CLI is responsible
for setting these and orchestrating parallel specs across the parallel processes.  See http://onsi.github.io/ginkgo/#spec-parallelization
for more on how specs are parallelized in Ginkgo.

You can also pass suite-level Label() decorators to RunSpecs.  The passed-in labels will apply to all specs in the suite.
*/
func RunSpecs(t GinkgoTestingT, description string, args ...interface{}) bool {
	if suiteDidRun {
		exitIfErr(types.GinkgoErrors.RerunningSuite())
	}
	suiteDidRun = true

	suiteLabels := Labels{}
	configErrors := []error{}
	for _, arg := range args {
		switch arg := arg.(type) {
		case types.SuiteConfig:
			suiteConfig = arg
		case types.ReporterConfig:
			reporterConfig = arg
		case Labels:
			suiteLabels = append(suiteLabels, arg...)
		default:
			configErrors = append(configErrors, types.GinkgoErrors.UnknownTypePassedToRunSpecs(arg))
		}
	}
	exitIfErrors(configErrors)

	configErrors = types.VetConfig(flagSet, suiteConfig, reporterConfig)
	if len(configErrors) > 0 {
		fmt.Fprintf(formatter.ColorableStdErr, formatter.F("{{red}}Ginkgo detected configuration issues:{{/}}\n"))
		for _, err := range configErrors {
			fmt.Fprintf(formatter.ColorableStdErr, err.Error())
		}
		os.Exit(1)
	}

	var reporter reporters.Reporter
	if suiteConfig.ParallelTotal == 1 {
		reporter = reporters.NewDefaultReporter(reporterConfig, formatter.ColorableStdOut)
		outputInterceptor = internal.NoopOutputInterceptor{}
		client = nil
	} else {
		reporter = reporters.NoopReporter{}
		switch strings.ToLower(suiteConfig.OutputInterceptorMode) {
		case "swap":
			outputInterceptor = internal.NewOSGlobalReassigningOutputInterceptor()
		case "none":
			outputInterceptor = internal.NoopOutputInterceptor{}
		default:
			outputInterceptor = internal.NewOutputInterceptor()
		}
		client = parallel_support.NewClient(suiteConfig.ParallelHost)
		if !client.Connect() {
			client = nil
			exitIfErr(types.GinkgoErrors.UnreachableParallelHost(suiteConfig.ParallelHost))
		}
		defer client.Close()
	}

	writer := GinkgoWriter.(*internal.Writer)
	if reporterConfig.Verbosity().GTE(types.VerbosityLevelVerbose) && suiteConfig.ParallelTotal == 1 {
		writer.SetMode(internal.WriterModeStreamAndBuffer)
	} else {
		writer.SetMode(internal.WriterModeBufferOnly)
	}

	if reporterConfig.WillGenerateReport() {
		registerReportAfterSuiteNodeForAutogeneratedReports(reporterConfig)
	}

	err := global.Suite.BuildTree()
	exitIfErr(err)

	suitePath, err := os.Getwd()
	exitIfErr(err)
	suitePath, err = filepath.Abs(suitePath)
	exitIfErr(err)

	passed, hasFocusedTests := global.Suite.Run(description, suiteLabels, suitePath, global.Failer, reporter, writer, outputInterceptor, interrupt_handler.NewInterruptHandler(client), client, internal.RegisterForProgressSignal, suiteConfig)
	outputInterceptor.Shutdown()

	flagSet.ValidateDeprecations(deprecationTracker)
	if deprecationTracker.DidTrackDeprecations() {
		fmt.Fprintln(formatter.ColorableStdErr, deprecationTracker.DeprecationsReport())
	}

	if !passed {
		t.Fail()
	}

	if passed && hasFocusedTests && strings.TrimSpace(os.Getenv("GINKGO_EDITOR_INTEGRATION")) == "" {
		fmt.Println("PASS | FOCUSED")
		os.Exit(types.GINKGO_FOCUS_EXIT_CODE)
	}
	return passed
}

/*
Skip instructs Ginkgo to skip the current spec

You can call Skip in any Setup or Subject node closure.

For more on how to filter specs in Ginkgo see https://onsi.github.io/ginkgo/#filtering-specs
*/
func Skip(message string, callerSkip ...int) {
	skip := 0
	if len(callerSkip) > 0 {
		skip = callerSkip[0]
	}
	cl := types.NewCodeLocationWithStackTrace(skip + 1)
	global.Failer.Skip(message, cl)
	panic(types.GinkgoErrors.UncaughtGinkgoPanic(cl))
}

/*
Fail notifies Ginkgo that the current spec has failed. (Gomega will call Fail for you automatically when an assertion fails.)

Under the hood, Fail panics to end execution of the current spec.  Ginkgo will catch this panic and proceed with
the subsequent spec.  If you call Fail, or make an assertion, within a goroutine launched by your spec you must
add defer GinkgoRecover() to the goroutine to catch the panic emitted by Fail.

You can call Fail in any Setup or Subject node closure.

You can learn more about how Ginkgo manages failures here: https://onsi.github.io/ginkgo/#mental-model-how-ginkgo-handles-failure
*/
func Fail(message string, callerSkip ...int) {
	skip := 0
	if len(callerSkip) > 0 {
		skip = callerSkip[0]
	}

	cl := types.NewCodeLocationWithStackTrace(skip + 1)
	global.Failer.Fail(message, cl)
	panic(types.GinkgoErrors.UncaughtGinkgoPanic(cl))
}

/*
AbortSuite instructs Ginkgo to fail the current spec and skip all subsequent specs, thereby aborting the suite.

You can call AbortSuite in any Setup or Subject node closure.

You can learn more about how Ginkgo handles suite interruptions here: https://onsi.github.io/ginkgo/#interrupting-aborting-and-timing-out-suites
*/
func AbortSuite(message string, callerSkip ...int) {
	skip := 0
	if len(callerSkip) > 0 {
		skip = callerSkip[0]
	}

	cl := types.NewCodeLocationWithStackTrace(skip + 1)
	global.Failer.AbortSuite(message, cl)
	panic(types.GinkgoErrors.UncaughtGinkgoPanic(cl))
}

/*
ignorablePanic is used by Gomega to signal to GinkgoRecover that Goemga is handling
the error associated with this panic.  It i used when Eventually/Consistently are passed a func(g Gomega) and the resulting function launches a goroutines that makes a failed assertion.  That failed assertion is registered by Gomega and then panics.  Ordinarily the panic is captured by Gomega.  In the case of a goroutine Gomega can't capture the panic - so we piggy back on GinkgoRecover so users have a single defer GinkgoRecover() pattern to follow.  To do that we need to tell Ginkgo to ignore this panic and not register it as a panic on the global Failer.
*/
type ignorablePanic interface{ GinkgoRecoverShouldIgnoreThisPanic() }

/*
GinkgoRecover should be deferred at the top of any spawned goroutine that (may) call `Fail`
Since Gomega assertions call fail, you should throw a `defer GinkgoRecover()` at the top of any goroutine that
calls out to Gomega

Here's why: Ginkgo's `Fail` method records the failure and then panics to prevent
further assertions from running.  This panic must be recovered.  Normally, Ginkgo recovers the panic for you,
however if a panic originates on a goroutine *launched* from one of your specs there's no
way for Ginkgo to rescue the panic.  To do this, you must remember to `defer GinkgoRecover()` at the top of such a goroutine.

You can learn more about how Ginkgo manages failures here: https://onsi.github.io/ginkgo/#mental-model-how-ginkgo-handles-failure
*/
func GinkgoRecover() {
	e := recover()
	if e != nil {
		if _, ok := e.(ignorablePanic); ok {
			return
		}
		global.Failer.Panic(types.NewCodeLocationWithStackTrace(1), e)
	}
}

// pushNode is used by the various test construction DSL methods to push nodes onto the suite
// it handles returned errors, emits a detailed error message to help the user learn what they may have done wrong, then exits
func pushNode(node internal.Node, errors []error) bool {
	exitIfErrors(errors)
	exitIfErr(global.Suite.PushNode(node))
	return true
}

/*
Describe nodes are Container nodes that allow you to organize your specs.  A Describe node's closure can contain any number of
Setup nodes (e.g. BeforeEach, AfterEach, JustBeforeEach), and Subject nodes (i.e. It).

Context and When nodes are aliases for Describe - use whichever gives your suite a better narrative flow.  It is idomatic
to Describe the behavior of an object or function and, within that Describe, outline a number of Contexts and Whens.

You can learn more at https://onsi.github.io/ginkgo/#organizing-specs-with-container-nodes
In addition, container nodes can be decorated with a variety of decorators.  You can learn more here: https://onsi.github.io/ginkgo/#decorator-reference
*/
func Describe(text string, args ...interface{}) bool {
	return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeContainer, text, args...))
}

/*
FDescribe focuses specs within the Describe block.
*/
func FDescribe(text string, args ...interface{}) bool {
	args = append(args, internal.Focus)
	return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeContainer, text, args...))
}

/*
PDescribe marks specs within the Describe block as pending.
*/
func PDescribe(text string, args ...interface{}) bool {
	args = append(args, internal.Pending)
	return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeContainer, text, args...))
}

/*
XDescribe marks specs within the Describe block as pending.

XDescribe is an alias for PDescribe
*/
var XDescribe = PDescribe

/* Context is an alias for Describe - it generates the exact same kind of Container node */
var Context, FContext, PContext, XContext = Describe, FDescribe, PDescribe, XDescribe

/* When is an alias for Describe - it generates the exact same kind of Container node */
func When(text string, args ...interface{}) bool {
	return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeContainer, "when "+text, args...))
}

/* When is an alias for Describe - it generates the exact same kind of Container node */
func FWhen(text string, args ...interface{}) bool {
	args = append(args, internal.Focus)
	return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeContainer, "when "+text, args...))
}

/* When is an alias for Describe - it generates the exact same kind of Container node */
func PWhen(text string, args ...interface{}) bool {
	args = append(args, internal.Pending)
	return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeContainer, "when "+text, args...))
}

var XWhen = PWhen

/*
It nodes are Subject nodes that contain your spec code and assertions.

Each It node corresponds to an individual Ginkgo spec.  You cannot nest any other Ginkgo nodes within an It node's closure.

You can pass It nodes bare functions (func() {}) or functions that receive a SpecContext or context.Context: func(ctx SpecContext) {} and func (ctx context.Context) {}. If the function takes a context then the It is deemed interruptible and Ginkgo will cancel the context in the event of a timeout (configured via the SpecTimeout() or NodeTimeout() decorators) or of an interrupt signal.

You can learn more at https://onsi.github.io/ginkgo/#spec-subjects-it
In addition, subject nodes can be decorated with a variety of decorators.  You can learn more here: https://onsi.github.io/ginkgo/#decorator-reference
*/
func It(text string, args ...interface{}) bool {
	return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeIt, text, args...))
}

/*
FIt allows you to focus an individual It.
*/
func FIt(text string, args ...interface{}) bool {
	args = append(args, internal.Focus)
	return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeIt, text, args...))
}

/*
PIt allows you to mark an individual It as pending.
*/
func PIt(text string, args ...interface{}) bool {
	args = append(args, internal.Pending)
	return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeIt, text, args...))
}

/*
XIt allows you to mark an individual It as pending.

XIt is an alias for PIt
*/
var XIt = PIt

/*
Specify is an alias for It - it can allow for more natural wording in some context.
*/
var Specify, FSpecify, PSpecify, XSpecify = It, FIt, PIt, XIt

/*
By allows you to better document complex Specs.

Generally you should try to keep your Its short and to the point.  This is not always possible, however,
especially in the context of integration tests that capture complex or lengthy workflows.

By allows you to document such flows.  By may be called within a Setup or Subject node (It, BeforeEach, etc...)
and will simply log the passed in text to the GinkgoWriter.  If By is handed a function it will immediately run the function.

By will also generate and attach a ReportEntry to the spec.  This will ensure that By annotations appear in Ginkgo's machine-readable reports.

Note that By does not generate a new Ginkgo node - rather it is simply syntactic sugar around GinkgoWriter and AddReportEntry
You can learn more about By here: https://onsi.github.io/ginkgo/#documenting-complex-specs-by
*/
func By(text string, callback ...func()) {
	exitIfErr(global.Suite.By(text, callback...))
}

/*
BeforeSuite nodes are suite-level Setup nodes that run just once before any specs are run.
When running in parallel, each parallel process will call BeforeSuite.

You may only register *one* BeforeSuite handler per test suite.  You typically do so in your bootstrap file at the top level.

BeforeSuite can take a func() body, or an interruptible func(SpecContext)/func(context.Context) body.

You cannot nest any other Ginkgo nodes within a BeforeSuite node's closure.
You can learn more here: https://onsi.github.io/ginkgo/#suite-setup-and-cleanup-beforesuite-and-aftersuite
*/
func BeforeSuite(body interface{}, args ...interface{}) bool {
	combinedArgs := []interface{}{body}
	combinedArgs = append(combinedArgs, args...)
	return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeBeforeSuite, "", combinedArgs...))
}

/*
AfterSuite nodes are suite-level Setup nodes run after all specs have finished - regardless of whether specs have passed or failed.
AfterSuite node closures always run, even if Ginkgo receives an interrupt signal (^C), in order to ensure cleanup occurs.

When running in parallel, each parallel process will call AfterSuite.

You may only register *one* AfterSuite handler per test suite.  You typically do so in your bootstrap file at the top level.

AfterSuite can take a func() body, or an interruptible func(SpecContext)/func(context.Context) body.

You cannot nest any other Ginkgo nodes within an AfterSuite node's closure.
You can learn more here: https://onsi.github.io/ginkgo/#suite-setup-and-cleanup-beforesuite-and-aftersuite
*/
func AfterSuite(body interface{}, args ...interface{}) bool {
	combinedArgs := []interface{}{body}
	combinedArgs = append(combinedArgs, args...)
	return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeAfterSuite, "", combinedArgs...))
}

/*
SynchronizedBeforeSuite nodes allow you to perform some of the suite setup just once - on parallel process #1 - and then pass information
from that setup to the rest of the suite setup on all processes.  This is useful for performing expensive or singleton setup once, then passing
information from that setup to all parallel processes.

SynchronizedBeforeSuite accomplishes this by taking *two* function arguments and passing data between them.
The first function is only run on parallel process #1.  The second is run on all processes, but *only* after the first function completes successfully.  The functions have the following signatures:

The first function (which only runs on process #1) can have any of the following the signatures:

	func()
	func(ctx context.Context)
	func(ctx SpecContext)
	func() []byte
	func(ctx context.Context) []byte
	func(ctx SpecContext) []byte

The byte array returned by the first function (if present) is then passed to the second function, which can have any of the following signature:

	func()
	func(ctx context.Context)
	func(ctx SpecContext)
	func(data []byte)
	func(ctx context.Context, data []byte)
	func(ctx SpecContext, data []byte)

If either function receives a context.Context/SpecContext it is considered interruptible.

You cannot nest any other Ginkgo nodes within an SynchronizedBeforeSuite node's closure.
You can learn more, and see some examples, here: https://onsi.github.io/ginkgo/#parallel-suite-setup-and-cleanup-synchronizedbeforesuite-and-synchronizedaftersuite
*/
func SynchronizedBeforeSuite(process1Body interface{}, allProcessBody interface{}, args ...interface{}) bool {
	combinedArgs := []interface{}{process1Body, allProcessBody}
	combinedArgs = append(combinedArgs, args...)

	return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeSynchronizedBeforeSuite, "", combinedArgs...))
}

/*
SynchronizedAfterSuite nodes complement the SynchronizedBeforeSuite nodes in solving the problem of splitting clean up into a piece that runs on all processes
and a piece that must only run once - on process #1.

SynchronizedAfterSuite accomplishes this by taking *two* function arguments.  The first runs on all processes.  The second runs only on parallel process #1
and *only* after all other processes have finished and exited.  This ensures that process #1, and any resources it is managing, remain alive until
all other processes are finished.  These two functions can be bare functions (func()) or interruptible (func(context.Context)/func(SpecContext))

Note that you can also use DeferCleanup() in SynchronizedBeforeSuite to accomplish similar results.

You cannot nest any other Ginkgo nodes within an SynchronizedAfterSuite node's closure.
You can learn more, and see some examples, here: https://onsi.github.io/ginkgo/#parallel-suite-setup-and-cleanup-synchronizedbeforesuite-and-synchronizedaftersuite
*/
func SynchronizedAfterSuite(allProcessBody interface{}, process1Body interface{}, args ...interface{}) bool {
	combinedArgs := []interface{}{allProcessBody, process1Body}
	combinedArgs = append(combinedArgs, args...)

	return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeSynchronizedAfterSuite, "", combinedArgs...))
}

/*
BeforeEach nodes are Setup nodes whose closures run before It node closures.  When multiple BeforeEach nodes
are defined in nested Container nodes the outermost BeforeEach node closures are run first.

BeforeEach can take a func() body, or an interruptible func(SpecContext)/func(context.Context) body.

You cannot nest any other Ginkgo nodes within a BeforeEach node's closure.
You can learn more here: https://onsi.github.io/ginkgo/#extracting-common-setup-beforeeach
*/
func BeforeEach(args ...interface{}) bool {
	return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeBeforeEach, "", args...))
}

/*
JustBeforeEach nodes are similar to BeforeEach nodes, however they are guaranteed to run *after* all BeforeEach node closures - just before the It node closure.
This can allow you to separate configuration from creation of resources for a spec.

JustBeforeEach can take a func() body, or an interruptible func(SpecContext)/func(context.Context) body.

You cannot nest any other Ginkgo nodes within a JustBeforeEach node's closure.
You can learn more and see some examples here: https://onsi.github.io/ginkgo/#separating-creation-and-configuration-justbeforeeach
*/
func JustBeforeEach(args ...interface{}) bool {
	return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeJustBeforeEach, "", args...))
}

/*
AfterEach nodes are Setup nodes whose closures run after It node closures.  When multiple AfterEach nodes
are defined in nested Container nodes the innermost AfterEach node closures are run first.

Note that you can also use DeferCleanup() in other Setup or Subject nodes to accomplish similar results.

AfterEach can take a func() body, or an interruptible func(SpecContext)/func(context.Context) body.

You cannot nest any other Ginkgo nodes within an AfterEach node's closure.
You can learn more here: https://onsi.github.io/ginkgo/#spec-cleanup-aftereach-and-defercleanup
*/
func AfterEach(args ...interface{}) bool {
	return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeAfterEach, "", args...))
}

/*
JustAfterEach nodes are similar to AfterEach nodes, however they are guaranteed to run *before* all AfterEach node closures - just after the It node closure. This can allow you to separate diagnostics collection from teardown for a spec.

JustAfterEach can take a func() body, or an interruptible func(SpecContext)/func(context.Context) body.

You cannot nest any other Ginkgo nodes within a JustAfterEach node's closure.
You can learn more and see some examples here: https://onsi.github.io/ginkgo/#separating-diagnostics-collection-and-teardown-justaftereach
*/
func JustAfterEach(args ...interface{}) bool {
	return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeJustAfterEach, "", args...))
}

/*
BeforeAll nodes are Setup nodes that can occur inside Ordered containers.  They run just once before any specs in the Ordered container run.

Multiple BeforeAll nodes can be defined in a given Ordered container however they cannot be nested inside any other container.

BeforeAll can take a func() body, or an interruptible func(SpecContext)/func(context.Context) body.

You cannot nest any other Ginkgo nodes within a BeforeAll node's closure.
You can learn more about Ordered Containers at: https://onsi.github.io/ginkgo/#ordered-containers
And you can learn more about BeforeAll at: https://onsi.github.io/ginkgo/#setup-in-ordered-containers-beforeall-and-afterall
*/
func BeforeAll(args ...interface{}) bool {
	return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeBeforeAll, "", args...))
}

/*
AfterAll nodes are Setup nodes that can occur inside Ordered containers.  They run just once after all specs in the Ordered container have run.

Multiple AfterAll nodes can be defined in a given Ordered container however they cannot be nested inside any other container.

Note that you can also use DeferCleanup() in a BeforeAll node to accomplish similar behavior.

AfterAll can take a func() body, or an interruptible func(SpecContext)/func(context.Context) body.

You cannot nest any other Ginkgo nodes within an AfterAll node's closure.
You can learn more about Ordered Containers at: https://onsi.github.io/ginkgo/#ordered-containers
And you can learn more about AfterAll at: https://onsi.github.io/ginkgo/#setup-in-ordered-containers-beforeall-and-afterall
*/
func AfterAll(args ...interface{}) bool {
	return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeAfterAll, "", args...))
}

/*
DeferCleanup can be called within any Setup or Subject node to register a cleanup callback that Ginkgo will call at the appropriate time to cleanup after the spec.

DeferCleanup can be passed:
1. A function that takes no arguments and returns no values.
2. A function that returns multiple values.  `DeferCleanup` will ignore all these return values except for the last one.  If this last return value is a non-nil error `DeferCleanup` will fail the spec).
3. A function that takes a context.Context or SpecContext (and optionally returns multiple values).  The resulting cleanup node is deemed interruptible and the passed-in context will be cancelled in the event of a timeout or interrupt.
4. A function that takes arguments (and optionally returns multiple values) followed by a list of arguments to pass to the function.
5. A function that takes SpecContext and a list of arguments (and optionally returns multiple values) followed by a list of arguments to pass to the function.

For example:

	BeforeEach(func() {
	    DeferCleanup(os.SetEnv, "FOO", os.GetEnv("FOO"))
	    os.SetEnv("FOO", "BAR")
	})

will register a cleanup handler that will set the environment variable "FOO" to its current value (obtained by os.GetEnv("FOO")) after the spec runs and then sets the environment variable "FOO" to "BAR" for the current spec.

Similarly:

	BeforeEach(func() {
	    DeferCleanup(func(ctx SpecContext, path) {
	    	req, err := http.NewRequestWithContext(ctx, "POST", path, nil)
	    	Expect(err).NotTo(HaveOccured())
	    	_, err := http.DefaultClient.Do(req)
	    	Expect(err).NotTo(HaveOccured())
	    }, "example.com/cleanup", NodeTimeout(time.Second*3))
	})

will register a cleanup handler that will have three seconds to successfully complete a request to the specified path. Note that we do not specify a context in the list of arguments passed to DeferCleanup - only in the signature of the function we pass in.  Ginkgo will detect the requested context and supply a SpecContext when it invokes the cleanup node.  If you want to pass in your own context in addition to the Ginkgo-provided SpecContext you must specify the SpecContext as the first argument (e.g. func(ctx SpecContext, otherCtx context.Context)).

When DeferCleanup is called in BeforeEach, JustBeforeEach, It, AfterEach, or JustAfterEach the registered callback will be invoked when the spec completes (i.e. it will behave like an AfterEach node)
When DeferCleanup is called in BeforeAll or AfterAll the registered callback will be invoked when the ordered container completes (i.e. it will behave like an AfterAll node)
When DeferCleanup is called in BeforeSuite, SynchronizedBeforeSuite, AfterSuite, or SynchronizedAfterSuite the registered callback will be invoked when the suite completes (i.e. it will behave like an AfterSuite node)

Note that DeferCleanup does not represent a node but rather dynamically generates the appropriate type of cleanup node based on the context in which it is called.  As such you must call DeferCleanup within a Setup or Subject node, and not within a Container node.
You can learn more about DeferCleanup here: https://onsi.github.io/ginkgo/#cleaning-up-our-cleanup-code-defercleanup
*/
func DeferCleanup(args ...interface{}) {
	fail := func(message string, cl types.CodeLocation) {
		global.Failer.Fail(message, cl)
	}
	pushNode(internal.NewCleanupNode(deprecationTracker, fail, args...))
}

/*
AttachProgressReporter allows you to register a function that will be called whenever Ginkgo generates a Progress Report.  The contents returned by the function will be included in the report.

**This is an experimental feature and the public-facing interface may change in a future minor version of Ginkgo**

Progress Reports are generated:
- whenever the user explicitly requests one (via `SIGINFO` or `SIGUSR1`)
- on nodes decorated  with PollProgressAfter
- on suites run with --poll-progress-after
- whenever a test times out

Ginkgo uses Progress Reports to convey the current state of the test suite, including any running goroutines.  By attaching a progress reporter you are able to supplement these reports with additional information.

# AttachProgressReporter returns a function that can be called to detach the progress reporter

You can learn more about AttachProgressReporter here: https://onsi.github.io/ginkgo/#attaching-additional-information-to-progress-reports
*/
func AttachProgressReporter(reporter func() string) func() {
	return global.Suite.AttachProgressReporter(reporter)
}
 0707010000091B000081A4000000000000000000000001645E367C00001FB4000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/decorator_dsl.go package ginkgo

import (
	"github.com/onsi/ginkgo/v2/internal"
)

/*
Offset(uint) is a decorator that allows you to change the stack-frame offset used when computing the line number of the node in question.

You can learn more here: https://onsi.github.io/ginkgo/#the-offset-decorator
You can learn more about decorators here: https://onsi.github.io/ginkgo/#decorator-reference
*/
type Offset = internal.Offset

/*
FlakeAttempts(uint N) is a decorator that allows you to mark individual specs or spec containers as flaky. Ginkgo will run them up to `N` times until they pass.

You can learn more here: https://onsi.github.io/ginkgo/#the-flakeattempts-decorator
You can learn more about decorators here: https://onsi.github.io/ginkgo/#decorator-reference
*/
type FlakeAttempts = internal.FlakeAttempts

/*
MustPassRepeatedly(uint N) is a decorator that allows you to repeat the execution of individual specs or spec containers. Ginkgo will run them up to `N` times until they fail.

You can learn more here: https://onsi.github.io/ginkgo/#the-mustpassrepeatedly-decorator
You can learn more about decorators here: https://onsi.github.io/ginkgo/#decorator-reference
*/
type MustPassRepeatedly = internal.MustPassRepeatedly

/*
Focus is a decorator that allows you to mark a spec or container as focused.  Identical to FIt and FDescribe.

You can learn more here: https://onsi.github.io/ginkgo/#filtering-specs
You can learn more about decorators here: https://onsi.github.io/ginkgo/#decorator-reference
*/
const Focus = internal.Focus

/*
Pending is a decorator that allows you to mark a spec or container as pending.  Identical to PIt and PDescribe.

You can learn more here: https://onsi.github.io/ginkgo/#filtering-specs
You can learn more about decorators here: https://onsi.github.io/ginkgo/#decorator-reference
*/
const Pending = internal.Pending

/*
Serial is a decorator that allows you to mark a spec or container as serial.  These specs will never run in parallel with other specs.
Specs in ordered containers cannot be marked as serial - mark the ordered container instead.

You can learn more here: https://onsi.github.io/ginkgo/#serial-specs
You can learn more about decorators here: https://onsi.github.io/ginkgo/#decorator-reference
*/
const Serial = internal.Serial

/*
Ordered is a decorator that allows you to mark a container as ordered.  Specs in the container will always run in the order they appear.
They will never be randomized and they will never run in parallel with one another, though they may run in parallel with other specs.

You can learn more here: https://onsi.github.io/ginkgo/#ordered-containers
You can learn more about decorators here: https://onsi.github.io/ginkgo/#decorator-reference
*/
const Ordered = internal.Ordered

/*
ContinueOnFailure is a decorator that allows you to mark an Ordered container to continue running specs even if failures occur.  Ordinarily an ordered container will stop running specs after the first failure occurs.  Note that if a BeforeAll or a BeforeEach/JustBeforeEach annotated with OncePerOrdered fails then no specs will run as the precondition for the Ordered container will consider to be failed.

ContinueOnFailure only applies to the outermost Ordered container.  Attempting to place ContinueOnFailure in a nested container will result in an error.

You can learn more here: https://onsi.github.io/ginkgo/#ordered-containers
You can learn more about decorators here: https://onsi.github.io/ginkgo/#decorator-reference
*/
const ContinueOnFailure = internal.ContinueOnFailure

/*
OncePerOrdered is a decorator that allows you to mark outer BeforeEach, AfterEach, JustBeforeEach, and JustAfterEach setup nodes to run once
per ordered context.  Normally these setup nodes run around each individual spec, with OncePerOrdered they will run once around the set of specs in an ordered container.
The behavior for non-Ordered containers/specs is unchanged.

You can learn more here: https://onsi.github.io/ginkgo/#setup-around-ordered-containers-the-onceperordered-decorator
You can learn more about decorators here: https://onsi.github.io/ginkgo/#decorator-reference
*/
const OncePerOrdered = internal.OncePerOrdered

/*
Label decorates specs with Labels.  Multiple labels can be passed to Label and these can be arbitrary strings but must not include the following characters: "&|!,()/".
Labels can be applied to container and subject nodes, but not setup nodes.  You can provide multiple Labels to a given node and a spec's labels is the union of all labels in its node hierarchy.

You can learn more here: https://onsi.github.io/ginkgo/#spec-labels
You can learn more about decorators here: https://onsi.github.io/ginkgo/#decorator-reference
*/
func Label(labels ...string) Labels {
	return Labels(labels)
}

/*
Labels are the type for spec Label decorators.  Use Label(...) to construct Labels.
You can learn more here: https://onsi.github.io/ginkgo/#spec-labels
*/
type Labels = internal.Labels

/*
PollProgressAfter allows you to override the configured value for --poll-progress-after for a particular node.

Ginkgo will start emitting node progress if the node is still running after a duration of PollProgressAfter.  This allows you to get quicker feedback about the state of a long-running spec.
*/
type PollProgressAfter = internal.PollProgressAfter

/*
PollProgressInterval allows you to override the configured value for --poll-progress-interval for a particular node.

Once a node has been running for longer than PollProgressAfter Ginkgo will emit node progress periodically at an interval of PollProgresInterval.
*/
type PollProgressInterval = internal.PollProgressInterval

/*
NodeTimeout allows you to specify a timeout for an indivdiual node.  The node cannot be a container and must be interruptible (i.e. it must be passed a function that accepts a SpecContext or context.Context).

If the node does not exit within the specified NodeTimeout its context will be cancelled.  The node wil then have a period of time controlled by the GracePeriod decorator (or global --grace-period command-line argument) to exit.  If the node does not exit within GracePeriod Ginkgo will leak the node and proceed to any clean-up nodes associated with the current spec.
*/
type NodeTimeout = internal.NodeTimeout

/*
SpecTimeout allows you to specify a timeout for an indivdiual spec.  SpecTimeout can only decorate interruptible It nodes.

All nodes associated with the It node will need to complete before the SpecTimeout has elapsed.  Individual nodes (e.g. BeforeEach) may be decorated with different NodeTimeouts - but these can only serve to provide a more stringent deadline for the node in question; they cannot extend the deadline past the SpecTimeout.

If the spec does not complete within the specified SpecTimeout the currently running node will have its context cancelled.  The node wil then have a period of time controlled by that node's GracePeriod decorator (or global --grace-period command-line argument) to exit.  If the node does not exit within GracePeriod Ginkgo will leak the node and proceed to any clean-up nodes associated with the current spec.
*/
type SpecTimeout = internal.SpecTimeout

/*
GracePeriod denotes the period of time Ginkgo will wait for an interruptible node to exit once an interruption (whether due to a timeout or a user-invoked signal) has occurred.  If both the global --grace-period cli flag and a GracePeriod decorator are specified the value in the decorator will take precedence.

Nodes that do not finish within a GracePeriod will be leaked and Ginkgo will proceed to run subsequent nodes.  In the event of a timeout, such leaks will be reported to the user.
*/
type GracePeriod = internal.GracePeriod

/*
SuppressProgressReporting is a decorator that allows you to disable progress reporting of a particular node.  This is useful if `ginkgo -v -progress` is generating too much noise; particularly
if you have a `ReportAfterEach` node that is running for every skipped spec and is generating lots of progress reports.
*/
const SuppressProgressReporting = internal.SuppressProgressReporting
0707010000091C000081A4000000000000000000000001645E367C0000131D000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/deprecated_dsl.go    package ginkgo

import (
	"time"

	"github.com/onsi/ginkgo/v2/internal"
	"github.com/onsi/ginkgo/v2/internal/global"
	"github.com/onsi/ginkgo/v2/reporters"
	"github.com/onsi/ginkgo/v2/types"
)

/*
Deprecated: Done Channel for asynchronous testing

The Done channel pattern is no longer supported in Ginkgo 2.0.
See here for better patterns for asynchronous testing: https://onsi.github.io/ginkgo/#patterns-for-asynchronous-testing

For a migration guide see: https://onsi.github.io/ginkgo/MIGRATING_TO_V2#removed-async-testing
*/
type Done = internal.Done

/*
Deprecated: Custom Ginkgo test reporters are deprecated in Ginkgo 2.0.

Use Ginkgo's reporting nodes instead and 2.0 reporting infrastructure instead. You can learn more here: https://onsi.github.io/ginkgo/#reporting-infrastructure
For a migration guide see: https://onsi.github.io/ginkgo/MIGRATING_TO_V2#removed-custom-reporters
*/
type Reporter = reporters.DeprecatedReporter

/*
Deprecated: Custom Reporters have been removed in Ginkgo 2.0.  RunSpecsWithDefaultAndCustomReporters will simply call RunSpecs()

Use Ginkgo's reporting nodes instead and 2.0 reporting infrastructure instead. You can learn more here: https://onsi.github.io/ginkgo/#reporting-infrastructure
For a migration guide see: https://onsi.github.io/ginkgo/MIGRATING_TO_V2#removed-custom-reporters
*/
func RunSpecsWithDefaultAndCustomReporters(t GinkgoTestingT, description string, _ []Reporter) bool {
	deprecationTracker.TrackDeprecation(types.Deprecations.CustomReporter())
	return RunSpecs(t, description)
}

/*
Deprecated: Custom Reporters have been removed in Ginkgo 2.0.  RunSpecsWithCustomReporters will simply call RunSpecs()

Use Ginkgo's reporting nodes instead and 2.0 reporting infrastructure instead. You can learn more here: https://onsi.github.io/ginkgo/#reporting-infrastructure
For a migration guide see: https://onsi.github.io/ginkgo/MIGRATING_TO_V2#removed-custom-reporters
*/
func RunSpecsWithCustomReporters(t GinkgoTestingT, description string, _ []Reporter) bool {
	deprecationTracker.TrackDeprecation(types.Deprecations.CustomReporter())
	return RunSpecs(t, description)
}

/*
Deprecated: GinkgoTestDescription has been replaced with SpecReport.

Use CurrentSpecReport() instead.
You can learn more here: https://onsi.github.io/ginkgo/#getting-a-report-for-the-current-spec
The SpecReport type is documented here: https://pkg.go.dev/github.com/onsi/ginkgo/v2/types#SpecReport
*/
type DeprecatedGinkgoTestDescription struct {
	FullTestText   string
	ComponentTexts []string
	TestText       string

	FileName   string
	LineNumber int

	Failed   bool
	Duration time.Duration
}
type GinkgoTestDescription = DeprecatedGinkgoTestDescription

/*
Deprecated: CurrentGinkgoTestDescription has been replaced with CurrentSpecReport.

Use CurrentSpecReport() instead.
You can learn more here: https://onsi.github.io/ginkgo/#getting-a-report-for-the-current-spec
The SpecReport type is documented here: https://pkg.go.dev/github.com/onsi/ginkgo/v2/types#SpecReport
*/
func CurrentGinkgoTestDescription() DeprecatedGinkgoTestDescription {
	deprecationTracker.TrackDeprecation(
		types.Deprecations.CurrentGinkgoTestDescription(),
		types.NewCodeLocation(1),
	)
	report := global.Suite.CurrentSpecReport()
	if report.State == types.SpecStateInvalid {
		return GinkgoTestDescription{}
	}
	componentTexts := []string{}
	componentTexts = append(componentTexts, report.ContainerHierarchyTexts...)
	componentTexts = append(componentTexts, report.LeafNodeText)

	return DeprecatedGinkgoTestDescription{
		ComponentTexts: componentTexts,
		FullTestText:   report.FullText(),
		TestText:       report.LeafNodeText,
		FileName:       report.LeafNodeLocation.FileName,
		LineNumber:     report.LeafNodeLocation.LineNumber,
		Failed:         report.State.Is(types.SpecStateFailureStates),
		Duration:       report.RunTime,
	}
}

/*
Deprecated: GinkgoParallelNode() has been renamed to GinkgoParallelProcess()
*/
func GinkgoParallelNode() int {
	deprecationTracker.TrackDeprecation(
		types.Deprecations.ParallelNode(),
		types.NewCodeLocation(1),
	)
	return GinkgoParallelProcess()
}

/*
Deprecated: Benchmarker has been removed from Ginkgo 2.0

Use Gomega's gmeasure package instead.
You can learn more here: https://onsi.github.io/ginkgo/#benchmarking-code
*/
type Benchmarker interface {
	Time(name string, body func(), info ...interface{}) (elapsedTime time.Duration)
	RecordValue(name string, value float64, info ...interface{})
	RecordValueWithPrecision(name string, value float64, units string, precision int, info ...interface{})
}

/*
Deprecated: Measure() has been removed from Ginkgo 2.0

Use Gomega's gmeasure package instead.
You can learn more here: https://onsi.github.io/ginkgo/#benchmarking-code
*/
func Measure(_ ...interface{}) bool {
	deprecationTracker.TrackDeprecation(types.Deprecations.Measure(), types.NewCodeLocation(1))
	return true
}
   0707010000091D000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/formatter    0707010000091E000081A4000000000000000000000001645E367C00000585000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/formatter/colorable_others.go    // +build !windows

/*
These packages are used for colorize on Windows and contributed by mattn.jp@gmail.com

  * go-colorable: <https://github.com/mattn/go-colorable>
  * go-isatty: <https://github.com/mattn/go-isatty>

The MIT License (MIT)

Copyright (c) 2016 Yasuhiro Matsumoto

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

package formatter

import (
	"io"
	"os"
)

func newColorable(file *os.File) io.Writer {
	return file
}
   0707010000091F000081A4000000000000000000000001645E367C00004AAA000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/formatter/colorable_windows.go   /*
These packages are used for colorize on Windows and contributed by mattn.jp@gmail.com

  * go-colorable: <https://github.com/mattn/go-colorable>
  * go-isatty: <https://github.com/mattn/go-isatty>

The MIT License (MIT)

Copyright (c) 2016 Yasuhiro Matsumoto

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

package formatter

import (
	"bytes"
	"fmt"
	"io"
	"math"
	"os"
	"strconv"
	"strings"
	"syscall"
	"unsafe"
)

var (
	kernel32                       = syscall.NewLazyDLL("kernel32.dll")
	procGetConsoleScreenBufferInfo = kernel32.NewProc("GetConsoleScreenBufferInfo")
	procSetConsoleTextAttribute    = kernel32.NewProc("SetConsoleTextAttribute")
	procSetConsoleCursorPosition   = kernel32.NewProc("SetConsoleCursorPosition")
	procFillConsoleOutputCharacter = kernel32.NewProc("FillConsoleOutputCharacterW")
	procFillConsoleOutputAttribute = kernel32.NewProc("FillConsoleOutputAttribute")
	procGetConsoleMode             = kernel32.NewProc("GetConsoleMode")
)

func isTerminal(fd uintptr) bool {
	var st uint32
	r, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, fd, uintptr(unsafe.Pointer(&st)), 0)
	return r != 0 && e == 0
}

const (
	foregroundBlue      = 0x1
	foregroundGreen     = 0x2
	foregroundRed       = 0x4
	foregroundIntensity = 0x8
	foregroundMask      = (foregroundRed | foregroundBlue | foregroundGreen | foregroundIntensity)
	backgroundBlue      = 0x10
	backgroundGreen     = 0x20
	backgroundRed       = 0x40
	backgroundIntensity = 0x80
	backgroundMask      = (backgroundRed | backgroundBlue | backgroundGreen | backgroundIntensity)
)

type wchar uint16
type short int16
type dword uint32
type word uint16

type coord struct {
	x short
	y short
}

type smallRect struct {
	left   short
	top    short
	right  short
	bottom short
}

type consoleScreenBufferInfo struct {
	size              coord
	cursorPosition    coord
	attributes        word
	window            smallRect
	maximumWindowSize coord
}

type writer struct {
	out     io.Writer
	handle  syscall.Handle
	lastbuf bytes.Buffer
	oldattr word
}

func newColorable(file *os.File) io.Writer {
	if file == nil {
		panic("nil passed instead of *os.File to NewColorable()")
	}

	if isTerminal(file.Fd()) {
		var csbi consoleScreenBufferInfo
		handle := syscall.Handle(file.Fd())
		procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))
		return &writer{out: file, handle: handle, oldattr: csbi.attributes}
	} else {
		return file
	}
}

var color256 = map[int]int{
	0:   0x000000,
	1:   0x800000,
	2:   0x008000,
	3:   0x808000,
	4:   0x000080,
	5:   0x800080,
	6:   0x008080,
	7:   0xc0c0c0,
	8:   0x808080,
	9:   0xff0000,
	10:  0x00ff00,
	11:  0xffff00,
	12:  0x0000ff,
	13:  0xff00ff,
	14:  0x00ffff,
	15:  0xffffff,
	16:  0x000000,
	17:  0x00005f,
	18:  0x000087,
	19:  0x0000af,
	20:  0x0000d7,
	21:  0x0000ff,
	22:  0x005f00,
	23:  0x005f5f,
	24:  0x005f87,
	25:  0x005faf,
	26:  0x005fd7,
	27:  0x005fff,
	28:  0x008700,
	29:  0x00875f,
	30:  0x008787,
	31:  0x0087af,
	32:  0x0087d7,
	33:  0x0087ff,
	34:  0x00af00,
	35:  0x00af5f,
	36:  0x00af87,
	37:  0x00afaf,
	38:  0x00afd7,
	39:  0x00afff,
	40:  0x00d700,
	41:  0x00d75f,
	42:  0x00d787,
	43:  0x00d7af,
	44:  0x00d7d7,
	45:  0x00d7ff,
	46:  0x00ff00,
	47:  0x00ff5f,
	48:  0x00ff87,
	49:  0x00ffaf,
	50:  0x00ffd7,
	51:  0x00ffff,
	52:  0x5f0000,
	53:  0x5f005f,
	54:  0x5f0087,
	55:  0x5f00af,
	56:  0x5f00d7,
	57:  0x5f00ff,
	58:  0x5f5f00,
	59:  0x5f5f5f,
	60:  0x5f5f87,
	61:  0x5f5faf,
	62:  0x5f5fd7,
	63:  0x5f5fff,
	64:  0x5f8700,
	65:  0x5f875f,
	66:  0x5f8787,
	67:  0x5f87af,
	68:  0x5f87d7,
	69:  0x5f87ff,
	70:  0x5faf00,
	71:  0x5faf5f,
	72:  0x5faf87,
	73:  0x5fafaf,
	74:  0x5fafd7,
	75:  0x5fafff,
	76:  0x5fd700,
	77:  0x5fd75f,
	78:  0x5fd787,
	79:  0x5fd7af,
	80:  0x5fd7d7,
	81:  0x5fd7ff,
	82:  0x5fff00,
	83:  0x5fff5f,
	84:  0x5fff87,
	85:  0x5fffaf,
	86:  0x5fffd7,
	87:  0x5fffff,
	88:  0x870000,
	89:  0x87005f,
	90:  0x870087,
	91:  0x8700af,
	92:  0x8700d7,
	93:  0x8700ff,
	94:  0x875f00,
	95:  0x875f5f,
	96:  0x875f87,
	97:  0x875faf,
	98:  0x875fd7,
	99:  0x875fff,
	100: 0x878700,
	101: 0x87875f,
	102: 0x878787,
	103: 0x8787af,
	104: 0x8787d7,
	105: 0x8787ff,
	106: 0x87af00,
	107: 0x87af5f,
	108: 0x87af87,
	109: 0x87afaf,
	110: 0x87afd7,
	111: 0x87afff,
	112: 0x87d700,
	113: 0x87d75f,
	114: 0x87d787,
	115: 0x87d7af,
	116: 0x87d7d7,
	117: 0x87d7ff,
	118: 0x87ff00,
	119: 0x87ff5f,
	120: 0x87ff87,
	121: 0x87ffaf,
	122: 0x87ffd7,
	123: 0x87ffff,
	124: 0xaf0000,
	125: 0xaf005f,
	126: 0xaf0087,
	127: 0xaf00af,
	128: 0xaf00d7,
	129: 0xaf00ff,
	130: 0xaf5f00,
	131: 0xaf5f5f,
	132: 0xaf5f87,
	133: 0xaf5faf,
	134: 0xaf5fd7,
	135: 0xaf5fff,
	136: 0xaf8700,
	137: 0xaf875f,
	138: 0xaf8787,
	139: 0xaf87af,
	140: 0xaf87d7,
	141: 0xaf87ff,
	142: 0xafaf00,
	143: 0xafaf5f,
	144: 0xafaf87,
	145: 0xafafaf,
	146: 0xafafd7,
	147: 0xafafff,
	148: 0xafd700,
	149: 0xafd75f,
	150: 0xafd787,
	151: 0xafd7af,
	152: 0xafd7d7,
	153: 0xafd7ff,
	154: 0xafff00,
	155: 0xafff5f,
	156: 0xafff87,
	157: 0xafffaf,
	158: 0xafffd7,
	159: 0xafffff,
	160: 0xd70000,
	161: 0xd7005f,
	162: 0xd70087,
	163: 0xd700af,
	164: 0xd700d7,
	165: 0xd700ff,
	166: 0xd75f00,
	167: 0xd75f5f,
	168: 0xd75f87,
	169: 0xd75faf,
	170: 0xd75fd7,
	171: 0xd75fff,
	172: 0xd78700,
	173: 0xd7875f,
	174: 0xd78787,
	175: 0xd787af,
	176: 0xd787d7,
	177: 0xd787ff,
	178: 0xd7af00,
	179: 0xd7af5f,
	180: 0xd7af87,
	181: 0xd7afaf,
	182: 0xd7afd7,
	183: 0xd7afff,
	184: 0xd7d700,
	185: 0xd7d75f,
	186: 0xd7d787,
	187: 0xd7d7af,
	188: 0xd7d7d7,
	189: 0xd7d7ff,
	190: 0xd7ff00,
	191: 0xd7ff5f,
	192: 0xd7ff87,
	193: 0xd7ffaf,
	194: 0xd7ffd7,
	195: 0xd7ffff,
	196: 0xff0000,
	197: 0xff005f,
	198: 0xff0087,
	199: 0xff00af,
	200: 0xff00d7,
	201: 0xff00ff,
	202: 0xff5f00,
	203: 0xff5f5f,
	204: 0xff5f87,
	205: 0xff5faf,
	206: 0xff5fd7,
	207: 0xff5fff,
	208: 0xff8700,
	209: 0xff875f,
	210: 0xff8787,
	211: 0xff87af,
	212: 0xff87d7,
	213: 0xff87ff,
	214: 0xffaf00,
	215: 0xffaf5f,
	216: 0xffaf87,
	217: 0xffafaf,
	218: 0xffafd7,
	219: 0xffafff,
	220: 0xffd700,
	221: 0xffd75f,
	222: 0xffd787,
	223: 0xffd7af,
	224: 0xffd7d7,
	225: 0xffd7ff,
	226: 0xffff00,
	227: 0xffff5f,
	228: 0xffff87,
	229: 0xffffaf,
	230: 0xffffd7,
	231: 0xffffff,
	232: 0x080808,
	233: 0x121212,
	234: 0x1c1c1c,
	235: 0x262626,
	236: 0x303030,
	237: 0x3a3a3a,
	238: 0x444444,
	239: 0x4e4e4e,
	240: 0x585858,
	241: 0x626262,
	242: 0x6c6c6c,
	243: 0x767676,
	244: 0x808080,
	245: 0x8a8a8a,
	246: 0x949494,
	247: 0x9e9e9e,
	248: 0xa8a8a8,
	249: 0xb2b2b2,
	250: 0xbcbcbc,
	251: 0xc6c6c6,
	252: 0xd0d0d0,
	253: 0xdadada,
	254: 0xe4e4e4,
	255: 0xeeeeee,
}

func (w *writer) Write(data []byte) (n int, err error) {
	var csbi consoleScreenBufferInfo
	procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))

	er := bytes.NewBuffer(data)
loop:
	for {
		r1, _, err := procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
		if r1 == 0 {
			break loop
		}

		c1, _, err := er.ReadRune()
		if err != nil {
			break loop
		}
		if c1 != 0x1b {
			fmt.Fprint(w.out, string(c1))
			continue
		}
		c2, _, err := er.ReadRune()
		if err != nil {
			w.lastbuf.WriteRune(c1)
			break loop
		}
		if c2 != 0x5b {
			w.lastbuf.WriteRune(c1)
			w.lastbuf.WriteRune(c2)
			continue
		}

		var buf bytes.Buffer
		var m rune
		for {
			c, _, err := er.ReadRune()
			if err != nil {
				w.lastbuf.WriteRune(c1)
				w.lastbuf.WriteRune(c2)
				w.lastbuf.Write(buf.Bytes())
				break loop
			}
			if ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '@' {
				m = c
				break
			}
			buf.Write([]byte(string(c)))
		}

		var csbi consoleScreenBufferInfo
		switch m {
		case 'A':
			n, err = strconv.Atoi(buf.String())
			if err != nil {
				continue
			}
			procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
			csbi.cursorPosition.y -= short(n)
			procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
		case 'B':
			n, err = strconv.Atoi(buf.String())
			if err != nil {
				continue
			}
			procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
			csbi.cursorPosition.y += short(n)
			procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
		case 'C':
			n, err = strconv.Atoi(buf.String())
			if err != nil {
				continue
			}
			procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
			csbi.cursorPosition.x -= short(n)
			procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
		case 'D':
			n, err = strconv.Atoi(buf.String())
			if err != nil {
				continue
			}
			if n, err = strconv.Atoi(buf.String()); err == nil {
				var csbi consoleScreenBufferInfo
				procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
				csbi.cursorPosition.x += short(n)
				procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
			}
		case 'E':
			n, err = strconv.Atoi(buf.String())
			if err != nil {
				continue
			}
			procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
			csbi.cursorPosition.x = 0
			csbi.cursorPosition.y += short(n)
			procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
		case 'F':
			n, err = strconv.Atoi(buf.String())
			if err != nil {
				continue
			}
			procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
			csbi.cursorPosition.x = 0
			csbi.cursorPosition.y -= short(n)
			procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
		case 'G':
			n, err = strconv.Atoi(buf.String())
			if err != nil {
				continue
			}
			procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
			csbi.cursorPosition.x = short(n)
			procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
		case 'H':
			token := strings.Split(buf.String(), ";")
			if len(token) != 2 {
				continue
			}
			n1, err := strconv.Atoi(token[0])
			if err != nil {
				continue
			}
			n2, err := strconv.Atoi(token[1])
			if err != nil {
				continue
			}
			csbi.cursorPosition.x = short(n2)
			csbi.cursorPosition.x = short(n1)
			procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
		case 'J':
			n, err := strconv.Atoi(buf.String())
			if err != nil {
				continue
			}
			var cursor coord
			switch n {
			case 0:
				cursor = coord{x: csbi.cursorPosition.x, y: csbi.cursorPosition.y}
			case 1:
				cursor = coord{x: csbi.window.left, y: csbi.window.top}
			case 2:
				cursor = coord{x: csbi.window.left, y: csbi.window.top}
			}
			var count, written dword
			count = dword(csbi.size.x - csbi.cursorPosition.x + (csbi.size.y-csbi.cursorPosition.y)*csbi.size.x)
			procFillConsoleOutputCharacter.Call(uintptr(w.handle), uintptr(' '), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
			procFillConsoleOutputAttribute.Call(uintptr(w.handle), uintptr(csbi.attributes), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
		case 'K':
			n, err := strconv.Atoi(buf.String())
			if err != nil {
				continue
			}
			var cursor coord
			switch n {
			case 0:
				cursor = coord{x: csbi.cursorPosition.x, y: csbi.cursorPosition.y}
			case 1:
				cursor = coord{x: csbi.window.left, y: csbi.window.top + csbi.cursorPosition.y}
			case 2:
				cursor = coord{x: csbi.window.left, y: csbi.window.top + csbi.cursorPosition.y}
			}
			var count, written dword
			count = dword(csbi.size.x - csbi.cursorPosition.x)
			procFillConsoleOutputCharacter.Call(uintptr(w.handle), uintptr(' '), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
			procFillConsoleOutputAttribute.Call(uintptr(w.handle), uintptr(csbi.attributes), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
		case 'm':
			attr := csbi.attributes
			cs := buf.String()
			if cs == "" {
				procSetConsoleTextAttribute.Call(uintptr(w.handle), uintptr(w.oldattr))
				continue
			}
			token := strings.Split(cs, ";")
			for i := 0; i < len(token); i += 1 {
				ns := token[i]
				if n, err = strconv.Atoi(ns); err == nil {
					switch {
					case n == 0 || n == 100:
						attr = w.oldattr
					case 1 <= n && n <= 5:
						attr |= foregroundIntensity
					case n == 7:
						attr = ((attr & foregroundMask) << 4) | ((attr & backgroundMask) >> 4)
					case 22 == n || n == 25 || n == 25:
						attr |= foregroundIntensity
					case n == 27:
						attr = ((attr & foregroundMask) << 4) | ((attr & backgroundMask) >> 4)
					case 30 <= n && n <= 37:
						attr = (attr & backgroundMask)
						if (n-30)&1 != 0 {
							attr |= foregroundRed
						}
						if (n-30)&2 != 0 {
							attr |= foregroundGreen
						}
						if (n-30)&4 != 0 {
							attr |= foregroundBlue
						}
					case n == 38: // set foreground color.
						if i < len(token)-2 && (token[i+1] == "5" || token[i+1] == "05") {
							if n256, err := strconv.Atoi(token[i+2]); err == nil {
								if n256foreAttr == nil {
									n256setup()
								}
								attr &= backgroundMask
								attr |= n256foreAttr[n256]
								i += 2
							}
						} else {
							attr = attr & (w.oldattr & backgroundMask)
						}
					case n == 39: // reset foreground color.
						attr &= backgroundMask
						attr |= w.oldattr & foregroundMask
					case 40 <= n && n <= 47:
						attr = (attr & foregroundMask)
						if (n-40)&1 != 0 {
							attr |= backgroundRed
						}
						if (n-40)&2 != 0 {
							attr |= backgroundGreen
						}
						if (n-40)&4 != 0 {
							attr |= backgroundBlue
						}
					case n == 48: // set background color.
						if i < len(token)-2 && token[i+1] == "5" {
							if n256, err := strconv.Atoi(token[i+2]); err == nil {
								if n256backAttr == nil {
									n256setup()
								}
								attr &= foregroundMask
								attr |= n256backAttr[n256]
								i += 2
							}
						} else {
							attr = attr & (w.oldattr & foregroundMask)
						}
					case n == 49: // reset foreground color.
						attr &= foregroundMask
						attr |= w.oldattr & backgroundMask
					case 90 <= n && n <= 97:
						attr = (attr & backgroundMask)
						attr |= foregroundIntensity
						if (n-90)&1 != 0 {
							attr |= foregroundRed
						}
						if (n-90)&2 != 0 {
							attr |= foregroundGreen
						}
						if (n-90)&4 != 0 {
							attr |= foregroundBlue
						}
					case 100 <= n && n <= 107:
						attr = (attr & foregroundMask)
						attr |= backgroundIntensity
						if (n-100)&1 != 0 {
							attr |= backgroundRed
						}
						if (n-100)&2 != 0 {
							attr |= backgroundGreen
						}
						if (n-100)&4 != 0 {
							attr |= backgroundBlue
						}
					}
					procSetConsoleTextAttribute.Call(uintptr(w.handle), uintptr(attr))
				}
			}
		}
	}
	return len(data) - w.lastbuf.Len(), nil
}

type consoleColor struct {
	rgb       int
	red       bool
	green     bool
	blue      bool
	intensity bool
}

func (c consoleColor) foregroundAttr() (attr word) {
	if c.red {
		attr |= foregroundRed
	}
	if c.green {
		attr |= foregroundGreen
	}
	if c.blue {
		attr |= foregroundBlue
	}
	if c.intensity {
		attr |= foregroundIntensity
	}
	return
}

func (c consoleColor) backgroundAttr() (attr word) {
	if c.red {
		attr |= backgroundRed
	}
	if c.green {
		attr |= backgroundGreen
	}
	if c.blue {
		attr |= backgroundBlue
	}
	if c.intensity {
		attr |= backgroundIntensity
	}
	return
}

var color16 = []consoleColor{
	consoleColor{0x000000, false, false, false, false},
	consoleColor{0x000080, false, false, true, false},
	consoleColor{0x008000, false, true, false, false},
	consoleColor{0x008080, false, true, true, false},
	consoleColor{0x800000, true, false, false, false},
	consoleColor{0x800080, true, false, true, false},
	consoleColor{0x808000, true, true, false, false},
	consoleColor{0xc0c0c0, true, true, true, false},
	consoleColor{0x808080, false, false, false, true},
	consoleColor{0x0000ff, false, false, true, true},
	consoleColor{0x00ff00, false, true, false, true},
	consoleColor{0x00ffff, false, true, true, true},
	consoleColor{0xff0000, true, false, false, true},
	consoleColor{0xff00ff, true, false, true, true},
	consoleColor{0xffff00, true, true, false, true},
	consoleColor{0xffffff, true, true, true, true},
}

type hsv struct {
	h, s, v float32
}

func (a hsv) dist(b hsv) float32 {
	dh := a.h - b.h
	switch {
	case dh > 0.5:
		dh = 1 - dh
	case dh < -0.5:
		dh = -1 - dh
	}
	ds := a.s - b.s
	dv := a.v - b.v
	return float32(math.Sqrt(float64(dh*dh + ds*ds + dv*dv)))
}

func toHSV(rgb int) hsv {
	r, g, b := float32((rgb&0xFF0000)>>16)/256.0,
		float32((rgb&0x00FF00)>>8)/256.0,
		float32(rgb&0x0000FF)/256.0
	min, max := minmax3f(r, g, b)
	h := max - min
	if h > 0 {
		if max == r {
			h = (g - b) / h
			if h < 0 {
				h += 6
			}
		} else if max == g {
			h = 2 + (b-r)/h
		} else {
			h = 4 + (r-g)/h
		}
	}
	h /= 6.0
	s := max - min
	if max != 0 {
		s /= max
	}
	v := max
	return hsv{h: h, s: s, v: v}
}

type hsvTable []hsv

func toHSVTable(rgbTable []consoleColor) hsvTable {
	t := make(hsvTable, len(rgbTable))
	for i, c := range rgbTable {
		t[i] = toHSV(c.rgb)
	}
	return t
}

func (t hsvTable) find(rgb int) consoleColor {
	hsv := toHSV(rgb)
	n := 7
	l := float32(5.0)
	for i, p := range t {
		d := hsv.dist(p)
		if d < l {
			l, n = d, i
		}
	}
	return color16[n]
}

func minmax3f(a, b, c float32) (min, max float32) {
	if a < b {
		if b < c {
			return a, c
		} else if a < c {
			return a, b
		} else {
			return c, b
		}
	} else {
		if a < c {
			return b, c
		} else if b < c {
			return b, a
		} else {
			return c, a
		}
	}
}

var n256foreAttr []word
var n256backAttr []word

func n256setup() {
	n256foreAttr = make([]word, 256)
	n256backAttr = make([]word, 256)
	t := toHSVTable(color16)
	for i, rgb := range color256 {
		c := t.find(rgb)
		n256foreAttr[i] = c.foregroundAttr()
		n256backAttr[i] = c.backgroundAttr()
	}
}
  07070100000920000081A4000000000000000000000001645E367C0000155C000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/formatter/formatter.go   package formatter

import (
	"fmt"
	"os"
	"regexp"
	"strconv"
	"strings"
)

// ColorableStdOut and ColorableStdErr enable color output support on Windows
var ColorableStdOut = newColorable(os.Stdout)
var ColorableStdErr = newColorable(os.Stderr)

const COLS = 80

type ColorMode uint8

const (
	ColorModeNone ColorMode = iota
	ColorModeTerminal
	ColorModePassthrough
)

var SingletonFormatter = New(ColorModeTerminal)

func F(format string, args ...interface{}) string {
	return SingletonFormatter.F(format, args...)
}

func Fi(indentation uint, format string, args ...interface{}) string {
	return SingletonFormatter.Fi(indentation, format, args...)
}

func Fiw(indentation uint, maxWidth uint, format string, args ...interface{}) string {
	return SingletonFormatter.Fiw(indentation, maxWidth, format, args...)
}

type Formatter struct {
	ColorMode                ColorMode
	colors                   map[string]string
	styleRe                  *regexp.Regexp
	preserveColorStylingTags bool
}

func NewWithNoColorBool(noColor bool) Formatter {
	if noColor {
		return New(ColorModeNone)
	}
	return New(ColorModeTerminal)
}

func New(colorMode ColorMode) Formatter {
	colorAliases := map[string]int{
		"black":   0,
		"red":     1,
		"green":   2,
		"yellow":  3,
		"blue":    4,
		"magenta": 5,
		"cyan":    6,
		"white":   7,
	}
	for colorAlias, n := range colorAliases {
		colorAliases[fmt.Sprintf("bright-%s", colorAlias)] = n + 8
	}

	getColor := func(color, defaultEscapeCode string) string {
		color = strings.ToUpper(strings.ReplaceAll(color, "-", "_"))
		envVar := fmt.Sprintf("GINKGO_CLI_COLOR_%s", color)
		envVarColor := os.Getenv(envVar)
		if envVarColor == "" {
			return defaultEscapeCode
		}
		if colorCode, ok := colorAliases[envVarColor]; ok {
			return fmt.Sprintf("\x1b[38;5;%dm", colorCode)
		}
		colorCode, err := strconv.Atoi(envVarColor)
		if err != nil || colorCode < 0 || colorCode > 255 {
			return defaultEscapeCode
		}
		return fmt.Sprintf("\x1b[38;5;%dm", colorCode)
	}

	f := Formatter{
		ColorMode: colorMode,
		colors: map[string]string{
			"/":         "\x1b[0m",
			"bold":      "\x1b[1m",
			"underline": "\x1b[4m",

			"red":          getColor("red", "\x1b[38;5;9m"),
			"orange":       getColor("orange", "\x1b[38;5;214m"),
			"coral":        getColor("coral", "\x1b[38;5;204m"),
			"magenta":      getColor("magenta", "\x1b[38;5;13m"),
			"green":        getColor("green", "\x1b[38;5;10m"),
			"dark-green":   getColor("dark-green", "\x1b[38;5;28m"),
			"yellow":       getColor("yellow", "\x1b[38;5;11m"),
			"light-yellow": getColor("light-yellow", "\x1b[38;5;228m"),
			"cyan":         getColor("cyan", "\x1b[38;5;14m"),
			"gray":         getColor("gray", "\x1b[38;5;243m"),
			"light-gray":   getColor("light-gray", "\x1b[38;5;246m"),
			"blue":         getColor("blue", "\x1b[38;5;12m"),
		},
	}
	colors := []string{}
	for color := range f.colors {
		colors = append(colors, color)
	}
	f.styleRe = regexp.MustCompile("{{(" + strings.Join(colors, "|") + ")}}")
	return f
}

func (f Formatter) F(format string, args ...interface{}) string {
	return f.Fi(0, format, args...)
}

func (f Formatter) Fi(indentation uint, format string, args ...interface{}) string {
	return f.Fiw(indentation, 0, format, args...)
}

func (f Formatter) Fiw(indentation uint, maxWidth uint, format string, args ...interface{}) string {
	out := f.style(format)
	if len(args) > 0 {
		out = fmt.Sprintf(out, args...)
	}

	if indentation == 0 && maxWidth == 0 {
		return out
	}

	lines := strings.Split(out, "\n")

	if maxWidth != 0 {
		outLines := []string{}

		maxWidth = maxWidth - indentation*2
		for _, line := range lines {
			if f.length(line) <= maxWidth {
				outLines = append(outLines, line)
				continue
			}
			words := strings.Split(line, " ")
			outWords := []string{words[0]}
			length := uint(f.length(words[0]))
			for _, word := range words[1:] {
				wordLength := f.length(word)
				if length+wordLength+1 <= maxWidth {
					length += wordLength + 1
					outWords = append(outWords, word)
					continue
				}
				outLines = append(outLines, strings.Join(outWords, " "))
				outWords = []string{word}
				length = wordLength
			}
			if len(outWords) > 0 {
				outLines = append(outLines, strings.Join(outWords, " "))
			}
		}

		lines = outLines
	}

	if indentation == 0 {
		return strings.Join(lines, "\n")
	}

	padding := strings.Repeat("  ", int(indentation))
	for i := range lines {
		if lines[i] != "" {
			lines[i] = padding + lines[i]
		}
	}

	return strings.Join(lines, "\n")
}

func (f Formatter) length(styled string) uint {
	n := uint(0)
	inStyle := false
	for _, b := range styled {
		if inStyle {
			if b == 'm' {
				inStyle = false
			}
			continue
		}
		if b == '\x1b' {
			inStyle = true
			continue
		}
		n += 1
	}
	return n
}

func (f Formatter) CycleJoin(elements []string, joiner string, cycle []string) string {
	if len(elements) == 0 {
		return ""
	}
	n := len(cycle)
	out := ""
	for i, text := range elements {
		out += cycle[i%n] + text
		if i < len(elements)-1 {
			out += joiner
		}
	}
	out += "{{/}}"
	return f.style(out)
}

func (f Formatter) style(s string) string {
	switch f.ColorMode {
	case ColorModeNone:
		return f.styleRe.ReplaceAllString(s, "")
	case ColorModePassthrough:
		return s
	case ColorModeTerminal:
		return f.styleRe.ReplaceAllStringFunc(s, func(match string) string {
			if out, ok := f.colors[strings.Trim(match, "{}")]; ok {
				return out
			}
			return match
		})
	}

	return ""
}
07070100000921000041ED00000000000000000000000B645E367C00000000000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo   07070100000922000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/build 07070100000923000081A4000000000000000000000001645E367C00000720000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/build/build_command.go    package build

import (
	"fmt"

	"github.com/onsi/ginkgo/v2/ginkgo/command"
	"github.com/onsi/ginkgo/v2/ginkgo/internal"
	"github.com/onsi/ginkgo/v2/types"
)

func BuildBuildCommand() command.Command {
	var cliConfig = types.NewDefaultCLIConfig()
	var goFlagsConfig = types.NewDefaultGoFlagsConfig()

	flags, err := types.BuildBuildCommandFlagSet(&cliConfig, &goFlagsConfig)
	if err != nil {
		panic(err)
	}

	return command.Command{
		Name:     "build",
		Flags:    flags,
		Usage:    "ginkgo build <FLAGS> <PACKAGES>",
		ShortDoc: "Build the passed in <PACKAGES> (or the package in the current directory if left blank).",
		DocLink:  "precompiling-suites",
		Command: func(args []string, _ []string) {
			var errors []error
			cliConfig, goFlagsConfig, errors = types.VetAndInitializeCLIAndGoConfig(cliConfig, goFlagsConfig)
			command.AbortIfErrors("Ginkgo detected configuration issues:", errors)

			buildSpecs(args, cliConfig, goFlagsConfig)
		},
	}
}

func buildSpecs(args []string, cliConfig types.CLIConfig, goFlagsConfig types.GoFlagsConfig) {
	suites := internal.FindSuites(args, cliConfig, false).WithoutState(internal.TestSuiteStateSkippedByFilter)
	if len(suites) == 0 {
		command.AbortWith("Found no test suites")
	}

	internal.VerifyCLIAndFrameworkVersion(suites)

	opc := internal.NewOrderedParallelCompiler(cliConfig.ComputedNumCompilers())
	opc.StartCompiling(suites, goFlagsConfig)

	for {
		suiteIdx, suite := opc.Next()
		if suiteIdx >= len(suites) {
			break
		}
		suites[suiteIdx] = suite
		if suite.State.Is(internal.TestSuiteStateFailedToCompile) {
			fmt.Println(suite.CompilationError.Error())
		} else {
			fmt.Printf("Compiled %s.test\n", suite.PackageName)
		}
	}

	if suites.CountWithState(internal.TestSuiteStateFailedToCompile) > 0 {
		command.AbortWith("Failed to compile all tests")
	}
}
07070100000924000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/command   07070100000925000081A4000000000000000000000001645E367C0000045B000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/command/abort.go  package command

import "fmt"

type AbortDetails struct {
	ExitCode  int
	Error     error
	EmitUsage bool
}

func Abort(details AbortDetails) {
	panic(details)
}

func AbortGracefullyWith(format string, args ...interface{}) {
	Abort(AbortDetails{
		ExitCode:  0,
		Error:     fmt.Errorf(format, args...),
		EmitUsage: false,
	})
}

func AbortWith(format string, args ...interface{}) {
	Abort(AbortDetails{
		ExitCode:  1,
		Error:     fmt.Errorf(format, args...),
		EmitUsage: false,
	})
}

func AbortWithUsage(format string, args ...interface{}) {
	Abort(AbortDetails{
		ExitCode:  1,
		Error:     fmt.Errorf(format, args...),
		EmitUsage: true,
	})
}

func AbortIfError(preamble string, err error) {
	if err != nil {
		Abort(AbortDetails{
			ExitCode:  1,
			Error:     fmt.Errorf("%s\n%s", preamble, err.Error()),
			EmitUsage: false,
		})
	}
}

func AbortIfErrors(preamble string, errors []error) {
	if len(errors) > 0 {
		out := ""
		for _, err := range errors {
			out += err.Error()
		}
		Abort(AbortDetails{
			ExitCode:  1,
			Error:     fmt.Errorf("%s\n%s", preamble, out),
			EmitUsage: false,
		})
	}
}
 07070100000926000081A4000000000000000000000001645E367C0000050B000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/command/command.go    package command

import (
	"fmt"
	"io"
	"strings"

	"github.com/onsi/ginkgo/v2/formatter"
	"github.com/onsi/ginkgo/v2/types"
)

type Command struct {
	Name          string
	Flags         types.GinkgoFlagSet
	Usage         string
	ShortDoc      string
	Documentation string
	DocLink       string
	Command       func(args []string, additionalArgs []string)
}

func (c Command) Run(args []string, additionalArgs []string) {
	args, err := c.Flags.Parse(args)
	if err != nil {
		AbortWithUsage(err.Error())
	}

	c.Command(args, additionalArgs)
}

func (c Command) EmitUsage(writer io.Writer) {
	fmt.Fprintln(writer, formatter.F("{{bold}}"+c.Usage+"{{/}}"))
	fmt.Fprintln(writer, formatter.F("{{gray}}%s{{/}}", strings.Repeat("-", len(c.Usage))))
	if c.ShortDoc != "" {
		fmt.Fprintln(writer, formatter.Fiw(0, formatter.COLS, c.ShortDoc))
		fmt.Fprintln(writer, "")
	}
	if c.Documentation != "" {
		fmt.Fprintln(writer, formatter.Fiw(0, formatter.COLS, c.Documentation))
		fmt.Fprintln(writer, "")
	}
	if c.DocLink != "" {
		fmt.Fprintln(writer, formatter.Fi(0, "{{bold}}Learn more at:{{/}} {{cyan}}{{underline}}http://onsi.github.io/ginkgo/#%s{{/}}", c.DocLink))
		fmt.Fprintln(writer, "")
	}
	flagUsage := c.Flags.Usage()
	if flagUsage != "" {
		fmt.Fprintf(writer, formatter.F(flagUsage))
	}
}
 07070100000927000081A4000000000000000000000001645E367C000011E1000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/command/program.go    package command

import (
	"fmt"
	"io"
	"os"
	"strings"

	"github.com/onsi/ginkgo/v2/formatter"
	"github.com/onsi/ginkgo/v2/types"
)

type Program struct {
	Name               string
	Heading            string
	Commands           []Command
	DefaultCommand     Command
	DeprecatedCommands []DeprecatedCommand

	//For testing - leave as nil in production
	OutWriter io.Writer
	ErrWriter io.Writer
	Exiter    func(code int)
}

type DeprecatedCommand struct {
	Name        string
	Deprecation types.Deprecation
}

func (p Program) RunAndExit(osArgs []string) {
	var command Command
	deprecationTracker := types.NewDeprecationTracker()
	if p.Exiter == nil {
		p.Exiter = os.Exit
	}
	if p.OutWriter == nil {
		p.OutWriter = formatter.ColorableStdOut
	}
	if p.ErrWriter == nil {
		p.ErrWriter = formatter.ColorableStdErr
	}

	defer func() {
		exitCode := 0

		if r := recover(); r != nil {
			details, ok := r.(AbortDetails)
			if !ok {
				panic(r)
			}

			if details.Error != nil {
				fmt.Fprintln(p.ErrWriter, formatter.F("{{red}}{{bold}}%s %s{{/}} {{red}}failed{{/}}", p.Name, command.Name))
				fmt.Fprintln(p.ErrWriter, formatter.Fi(1, details.Error.Error()))
			}
			if details.EmitUsage {
				if details.Error != nil {
					fmt.Fprintln(p.ErrWriter, "")
				}
				command.EmitUsage(p.ErrWriter)
			}
			exitCode = details.ExitCode
		}

		command.Flags.ValidateDeprecations(deprecationTracker)
		if deprecationTracker.DidTrackDeprecations() {
			fmt.Fprintln(p.ErrWriter, deprecationTracker.DeprecationsReport())
		}
		p.Exiter(exitCode)
		return
	}()

	args, additionalArgs := []string{}, []string{}

	foundDelimiter := false
	for _, arg := range osArgs[1:] {
		if !foundDelimiter {
			if arg == "--" {
				foundDelimiter = true
				continue
			}
		}

		if foundDelimiter {
			additionalArgs = append(additionalArgs, arg)
		} else {
			args = append(args, arg)
		}
	}

	command = p.DefaultCommand
	if len(args) > 0 {
		p.handleHelpRequestsAndExit(p.OutWriter, args)
		if command.Name == args[0] {
			args = args[1:]
		} else {
			for _, deprecatedCommand := range p.DeprecatedCommands {
				if deprecatedCommand.Name == args[0] {
					deprecationTracker.TrackDeprecation(deprecatedCommand.Deprecation)
					return
				}
			}
			for _, tryCommand := range p.Commands {
				if tryCommand.Name == args[0] {
					command, args = tryCommand, args[1:]
					break
				}
			}
		}
	}

	command.Run(args, additionalArgs)
}

func (p Program) handleHelpRequestsAndExit(writer io.Writer, args []string) {
	if len(args) == 0 {
		return
	}

	matchesHelpFlag := func(args ...string) bool {
		for _, arg := range args {
			if arg == "--help" || arg == "-help" || arg == "-h" || arg == "--h" {
				return true
			}
		}
		return false
	}
	if len(args) == 1 {
		if args[0] == "help" || matchesHelpFlag(args[0]) {
			p.EmitUsage(writer)
			Abort(AbortDetails{})
		}
	} else {
		var name string
		if args[0] == "help" || matchesHelpFlag(args[0]) {
			name = args[1]
		} else if matchesHelpFlag(args[1:]...) {
			name = args[0]
		} else {
			return
		}

		if p.DefaultCommand.Name == name || p.Name == name {
			p.DefaultCommand.EmitUsage(writer)
			Abort(AbortDetails{})
		}
		for _, command := range p.Commands {
			if command.Name == name {
				command.EmitUsage(writer)
				Abort(AbortDetails{})
			}
		}

		fmt.Fprintln(writer, formatter.F("{{red}}Unknown Command: {{bold}}%s{{/}}", name))
		fmt.Fprintln(writer, "")
		p.EmitUsage(writer)
		Abort(AbortDetails{ExitCode: 1})
	}
	return
}

func (p Program) EmitUsage(writer io.Writer) {
	fmt.Fprintln(writer, formatter.F(p.Heading))
	fmt.Fprintln(writer, formatter.F("{{gray}}%s{{/}}", strings.Repeat("-", len(p.Heading))))
	fmt.Fprintln(writer, formatter.F("For usage information for a command, run {{bold}}%s help COMMAND{{/}}.", p.Name))
	fmt.Fprintln(writer, formatter.F("For usage information for the default command, run {{bold}}%s help %s{{/}} or {{bold}}%s help %s{{/}}.", p.Name, p.Name, p.Name, p.DefaultCommand.Name))
	fmt.Fprintln(writer, "")
	fmt.Fprintln(writer, formatter.F("The following commands are available:"))

	fmt.Fprintln(writer, formatter.Fi(1, "{{bold}}%s{{/}} or %s {{bold}}%s{{/}} - {{gray}}%s{{/}}", p.Name, p.Name, p.DefaultCommand.Name, p.DefaultCommand.Usage))
	if p.DefaultCommand.ShortDoc != "" {
		fmt.Fprintln(writer, formatter.Fi(2, p.DefaultCommand.ShortDoc))
	}

	for _, command := range p.Commands {
		fmt.Fprintln(writer, formatter.Fi(1, "{{bold}}%s{{/}} - {{gray}}%s{{/}}", command.Name, command.Usage))
		if command.ShortDoc != "" {
			fmt.Fprintln(writer, formatter.Fi(2, command.ShortDoc))
		}
	}
}
   07070100000928000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators    07070100000929000081A4000000000000000000000001645E367C00000412000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/boostrap_templates.go  package generators

var bootstrapText = `package {{.Package}}

import (
	"testing"

	{{.GinkgoImport}}
	{{.GomegaImport}}
)

func Test{{.FormattedName}}(t *testing.T) {
	{{.GomegaPackage}}RegisterFailHandler({{.GinkgoPackage}}Fail)
	{{.GinkgoPackage}}RunSpecs(t, "{{.FormattedName}} Suite")
}
`

var agoutiBootstrapText = `package {{.Package}}

import (
	"testing"

	{{.GinkgoImport}}
	{{.GomegaImport}}
	"github.com/sclevine/agouti"
)

func Test{{.FormattedName}}(t *testing.T) {
	{{.GomegaPackage}}RegisterFailHandler({{.GinkgoPackage}}Fail)
	{{.GinkgoPackage}}RunSpecs(t, "{{.FormattedName}} Suite")
}

var agoutiDriver *agouti.WebDriver

var _ = {{.GinkgoPackage}}BeforeSuite(func() {
	// Choose a WebDriver:

	agoutiDriver = agouti.PhantomJS()
	// agoutiDriver = agouti.Selenium()
	// agoutiDriver = agouti.ChromeDriver()

	{{.GomegaPackage}}Expect(agoutiDriver.Start()).To({{.GomegaPackage}}Succeed())
})

var _ = {{.GinkgoPackage}}AfterSuite(func() {
	{{.GomegaPackage}}Expect(agoutiDriver.Stop()).To({{.GomegaPackage}}Succeed())
})
`
  0707010000092A000081A4000000000000000000000001645E367C0000116C000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/bootstrap_command.go   package generators

import (
	"bytes"
	"encoding/json"
	"fmt"
	"os"
	"text/template"

	sprig "github.com/go-task/slim-sprig"
	"github.com/onsi/ginkgo/v2/ginkgo/command"
	"github.com/onsi/ginkgo/v2/ginkgo/internal"
	"github.com/onsi/ginkgo/v2/types"
)

func BuildBootstrapCommand() command.Command {
	conf := GeneratorsConfig{}
	flags, err := types.NewGinkgoFlagSet(
		types.GinkgoFlags{
			{Name: "agouti", KeyPath: "Agouti",
				Usage: "If set, bootstrap will generate a bootstrap file for writing Agouti tests"},
			{Name: "nodot", KeyPath: "NoDot",
				Usage: "If set, bootstrap will generate a bootstrap test file that does not dot-import ginkgo and gomega"},
			{Name: "internal", KeyPath: "Internal",
				Usage: "If set, bootstrap will generate a bootstrap test file that uses the regular package name (i.e. `package X`, not `package X_test`)"},
			{Name: "template", KeyPath: "CustomTemplate",
				UsageArgument: "template-file",
				Usage:         "If specified, generate will use the contents of the file passed as the bootstrap template"},
			{Name: "template-data", KeyPath: "CustomTemplateData",
				UsageArgument: "template-data-file",
				Usage:         "If specified, generate will use the contents of the file passed as data to be rendered in the bootstrap template"},
		},
		&conf,
		types.GinkgoFlagSections{},
	)

	if err != nil {
		panic(err)
	}

	return command.Command{
		Name:     "bootstrap",
		Usage:    "ginkgo bootstrap",
		ShortDoc: "Bootstrap a test suite for the current package",
		Documentation: `Tests written in Ginkgo and Gomega require a small amount of boilerplate to hook into Go's testing infrastructure.

{{bold}}ginkgo bootstrap{{/}} generates this boilerplate for you in a file named X_suite_test.go where X is the name of the package under test.`,
		DocLink: "generators",
		Flags:   flags,
		Command: func(_ []string, _ []string) {
			generateBootstrap(conf)
		},
	}
}

type bootstrapData struct {
	Package       string
	FormattedName string

	GinkgoImport  string
	GomegaImport  string
	GinkgoPackage string
	GomegaPackage string
	CustomData    map[string]any
}

func generateBootstrap(conf GeneratorsConfig) {
	packageName, bootstrapFilePrefix, formattedName := getPackageAndFormattedName()

	data := bootstrapData{
		Package:       determinePackageName(packageName, conf.Internal),
		FormattedName: formattedName,

		GinkgoImport:  `. "github.com/onsi/ginkgo/v2"`,
		GomegaImport:  `. "github.com/onsi/gomega"`,
		GinkgoPackage: "",
		GomegaPackage: "",
	}

	if conf.NoDot {
		data.GinkgoImport = `"github.com/onsi/ginkgo/v2"`
		data.GomegaImport = `"github.com/onsi/gomega"`
		data.GinkgoPackage = `ginkgo.`
		data.GomegaPackage = `gomega.`
	}

	targetFile := fmt.Sprintf("%s_suite_test.go", bootstrapFilePrefix)
	if internal.FileExists(targetFile) {
		command.AbortWith("{{bold}}%s{{/}} already exists", targetFile)
	} else {
		fmt.Printf("Generating ginkgo test suite bootstrap for %s in:\n\t%s\n", packageName, targetFile)
	}

	f, err := os.Create(targetFile)
	command.AbortIfError("Failed to create file:", err)
	defer f.Close()

	var templateText string
	if conf.CustomTemplate != "" {
		tpl, err := os.ReadFile(conf.CustomTemplate)
		command.AbortIfError("Failed to read custom bootstrap file:", err)
		templateText = string(tpl)
		if conf.CustomTemplateData != "" {
			var tplCustomDataMap map[string]any
			tplCustomData, err := os.ReadFile(conf.CustomTemplateData)
			command.AbortIfError("Failed to read custom boostrap data file:", err)
			if !json.Valid([]byte(tplCustomData)) {
				command.AbortWith("Invalid JSON object in custom data file.")
			}
			//create map from the custom template data
			json.Unmarshal(tplCustomData, &tplCustomDataMap)
			data.CustomData = tplCustomDataMap
		}
	} else if conf.Agouti {
		templateText = agoutiBootstrapText
	} else {
		templateText = bootstrapText
	}

	//Setting the option to explicitly fail if template is rendered trying to access missing key
	bootstrapTemplate, err := template.New("bootstrap").Funcs(sprig.TxtFuncMap()).Option("missingkey=error").Parse(templateText)
	command.AbortIfError("Failed to parse bootstrap template:", err)

	buf := &bytes.Buffer{}
	//Being explicit about failing sooner during template rendering
	//when accessing custom data rather than during the go fmt command
	err = bootstrapTemplate.Execute(buf, data)
	command.AbortIfError("Failed to render bootstrap template:", err)

	buf.WriteTo(f)

	internal.GoFmt(targetFile)
}
0707010000092B000081A4000000000000000000000001645E367C00001D01000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_command.go    package generators

import (
	"bytes"
	"encoding/json"
	"fmt"
	"os"
	"path/filepath"
	"strconv"
	"strings"
	"text/template"

	sprig "github.com/go-task/slim-sprig"
	"github.com/onsi/ginkgo/v2/ginkgo/command"
	"github.com/onsi/ginkgo/v2/ginkgo/internal"
	"github.com/onsi/ginkgo/v2/types"
)

func BuildGenerateCommand() command.Command {
	conf := GeneratorsConfig{}
	flags, err := types.NewGinkgoFlagSet(
		types.GinkgoFlags{
			{Name: "agouti", KeyPath: "Agouti",
				Usage: "If set, generate will create a test file for writing Agouti tests"},
			{Name: "nodot", KeyPath: "NoDot",
				Usage: "If set, generate will create a test file that does not dot-import ginkgo and gomega"},
			{Name: "internal", KeyPath: "Internal",
				Usage: "If set, generate will create a test file that uses the regular package name (i.e. `package X`, not `package X_test`)"},
			{Name: "template", KeyPath: "CustomTemplate",
				UsageArgument: "template-file",
				Usage:         "If specified, generate will use the contents of the file passed as the test file template"},
			{Name: "template-data", KeyPath: "CustomTemplateData",
				UsageArgument: "template-data-file",
				Usage:         "If specified, generate will use the contents of the file passed as data to be rendered in the test file template"},
		},
		&conf,
		types.GinkgoFlagSections{},
	)

	if err != nil {
		panic(err)
	}

	return command.Command{
		Name:     "generate",
		Usage:    "ginkgo generate <filename(s)>",
		ShortDoc: "Generate a test file named <filename>_test.go",
		Documentation: `If the optional <filename> argument is omitted, a file named after the package in the current directory will be created.

You can pass multiple <filename(s)> to generate multiple files simultaneously.  The resulting files are named <filename>_test.go.

You can also pass a <filename> of the form "file.go" and generate will emit "file_test.go".`,
		DocLink: "generators",
		Flags:   flags,
		Command: func(args []string, _ []string) {
			generateTestFiles(conf, args)
		},
	}
}

type specData struct {
	Package           string
	Subject           string
	PackageImportPath string
	ImportPackage     bool

	GinkgoImport  string
	GomegaImport  string
	GinkgoPackage string
	GomegaPackage string
	CustomData    map[string]any
}

func generateTestFiles(conf GeneratorsConfig, args []string) {
	subjects := args
	if len(subjects) == 0 {
		subjects = []string{""}
	}
	for _, subject := range subjects {
		generateTestFileForSubject(subject, conf)
	}
}

func generateTestFileForSubject(subject string, conf GeneratorsConfig) {
	packageName, specFilePrefix, formattedName := getPackageAndFormattedName()
	if subject != "" {
		specFilePrefix = formatSubject(subject)
		formattedName = prettifyName(specFilePrefix)
	}

	if conf.Internal {
		specFilePrefix = specFilePrefix + "_internal"
	}

	data := specData{
		Package:           determinePackageName(packageName, conf.Internal),
		Subject:           formattedName,
		PackageImportPath: getPackageImportPath(),
		ImportPackage:     !conf.Internal,

		GinkgoImport:  `. "github.com/onsi/ginkgo/v2"`,
		GomegaImport:  `. "github.com/onsi/gomega"`,
		GinkgoPackage: "",
		GomegaPackage: "",
	}

	if conf.NoDot {
		data.GinkgoImport = `"github.com/onsi/ginkgo/v2"`
		data.GomegaImport = `"github.com/onsi/gomega"`
		data.GinkgoPackage = `ginkgo.`
		data.GomegaPackage = `gomega.`
	}

	targetFile := fmt.Sprintf("%s_test.go", specFilePrefix)
	if internal.FileExists(targetFile) {
		command.AbortWith("{{bold}}%s{{/}} already exists", targetFile)
	} else {
		fmt.Printf("Generating ginkgo test for %s in:\n  %s\n", data.Subject, targetFile)
	}

	f, err := os.Create(targetFile)
	command.AbortIfError("Failed to create test file:", err)
	defer f.Close()

	var templateText string
	if conf.CustomTemplate != "" {
		tpl, err := os.ReadFile(conf.CustomTemplate)
		command.AbortIfError("Failed to read custom template file:", err)
		templateText = string(tpl)
		if conf.CustomTemplateData != "" {
			var tplCustomDataMap map[string]any
			tplCustomData, err := os.ReadFile(conf.CustomTemplateData)
			command.AbortIfError("Failed to read custom template data file:", err)
			if !json.Valid([]byte(tplCustomData)) {
				command.AbortWith("Invalid JSON object in custom data file.")
			}
			//create map from the custom template data
			json.Unmarshal(tplCustomData, &tplCustomDataMap)
			data.CustomData = tplCustomDataMap
		}
	} else if conf.Agouti {
		templateText = agoutiSpecText
	} else {
		templateText = specText
	}

	//Setting the option to explicitly fail if template is rendered trying to access missing key
	specTemplate, err := template.New("spec").Funcs(sprig.TxtFuncMap()).Option("missingkey=error").Parse(templateText)
	command.AbortIfError("Failed to read parse test template:", err)

	//Being explicit about failing sooner during template rendering
	//when accessing custom data rather than during the go fmt command
	err = specTemplate.Execute(f, data)
	command.AbortIfError("Failed to render bootstrap template:", err)
	internal.GoFmt(targetFile)
}

func formatSubject(name string) string {
	name = strings.ReplaceAll(name, "-", "_")
	name = strings.ReplaceAll(name, " ", "_")
	name = strings.Split(name, ".go")[0]
	name = strings.Split(name, "_test")[0]
	return name
}

// moduleName returns module name from go.mod from given module root directory
func moduleName(modRoot string) string {
	modFile, err := os.Open(filepath.Join(modRoot, "go.mod"))
	if err != nil {
		return ""
	}

	mod := make([]byte, 128)
	_, err = modFile.Read(mod)
	if err != nil {
		return ""
	}

	slashSlash := []byte("//")
	moduleStr := []byte("module")

	for len(mod) > 0 {
		line := mod
		mod = nil
		if i := bytes.IndexByte(line, '\n'); i >= 0 {
			line, mod = line[:i], line[i+1:]
		}
		if i := bytes.Index(line, slashSlash); i >= 0 {
			line = line[:i]
		}
		line = bytes.TrimSpace(line)
		if !bytes.HasPrefix(line, moduleStr) {
			continue
		}
		line = line[len(moduleStr):]
		n := len(line)
		line = bytes.TrimSpace(line)
		if len(line) == n || len(line) == 0 {
			continue
		}

		if line[0] == '"' || line[0] == '`' {
			p, err := strconv.Unquote(string(line))
			if err != nil {
				return "" // malformed quoted string or multiline module path
			}
			return p
		}

		return string(line)
	}

	return "" // missing module path
}

func findModuleRoot(dir string) (root string) {
	dir = filepath.Clean(dir)

	// Look for enclosing go.mod.
	for {
		if fi, err := os.Stat(filepath.Join(dir, "go.mod")); err == nil && !fi.IsDir() {
			return dir
		}
		d := filepath.Dir(dir)
		if d == dir {
			break
		}
		dir = d
	}
	return ""
}

func getPackageImportPath() string {
	workingDir, err := os.Getwd()
	if err != nil {
		panic(err.Error())
	}

	sep := string(filepath.Separator)

	// Try go.mod file first
	modRoot := findModuleRoot(workingDir)
	if modRoot != "" {
		modName := moduleName(modRoot)
		if modName != "" {
			cd := strings.ReplaceAll(workingDir, modRoot, "")
			cd = strings.ReplaceAll(cd, sep, "/")
			return modName + cd
		}
	}

	// Fallback to GOPATH structure
	paths := strings.Split(workingDir, sep+"src"+sep)
	if len(paths) == 1 {
		fmt.Printf("\nCouldn't identify package import path.\n\n\tginkgo generate\n\nMust be run within a package directory under $GOPATH/src/...\nYou're going to have to change UNKNOWN_PACKAGE_PATH in the generated file...\n\n")
		return "UNKNOWN_PACKAGE_PATH"
	}
	return filepath.ToSlash(paths[len(paths)-1])
}
   0707010000092C000081A4000000000000000000000001645E367C00000339000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_templates.go  package generators

var specText = `package {{.Package}}

import (
	{{.GinkgoImport}}
	{{.GomegaImport}}

	{{if .ImportPackage}}"{{.PackageImportPath}}"{{end}}
)

var _ = {{.GinkgoPackage}}Describe("{{.Subject}}", func() {

})
`

var agoutiSpecText = `package {{.Package}}

import (
	{{.GinkgoImport}}
	{{.GomegaImport}}
	"github.com/sclevine/agouti"
	. "github.com/sclevine/agouti/matchers"

	{{if .ImportPackage}}"{{.PackageImportPath}}"{{end}}
)

var _ = {{.GinkgoPackage}}Describe("{{.Subject}}", func() {
	var page *agouti.Page

	{{.GinkgoPackage}}BeforeEach(func() {
		var err error
		page, err = agoutiDriver.NewPage()
		{{.GomegaPackage}}Expect(err).NotTo({{.GomegaPackage}}HaveOccurred())
	})

	{{.GinkgoPackage}}AfterEach(func() {
		{{.GomegaPackage}}Expect(page.Destroy()).To({{.GomegaPackage}}Succeed())
	})
})
`
   0707010000092D000081A4000000000000000000000001645E367C00000599000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generators_common.go   package generators

import (
	"go/build"
	"os"
	"path/filepath"
	"strconv"
	"strings"

	"github.com/onsi/ginkgo/v2/ginkgo/command"
)

type GeneratorsConfig struct {
	Agouti, NoDot, Internal bool
	CustomTemplate          string
	CustomTemplateData      string
}

func getPackageAndFormattedName() (string, string, string) {
	path, err := os.Getwd()
	command.AbortIfError("Could not get current working directory:", err)

	dirName := strings.ReplaceAll(filepath.Base(path), "-", "_")
	dirName = strings.ReplaceAll(dirName, " ", "_")

	pkg, err := build.ImportDir(path, 0)
	packageName := pkg.Name
	if err != nil {
		packageName = ensureLegalPackageName(dirName)
	}

	formattedName := prettifyName(filepath.Base(path))
	return packageName, dirName, formattedName
}

func ensureLegalPackageName(name string) string {
	if name == "_" {
		return "underscore"
	}
	if len(name) == 0 {
		return "empty"
	}
	n, isDigitErr := strconv.Atoi(string(name[0]))
	if isDigitErr == nil {
		return []string{"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}[n] + name[1:]
	}
	return name
}

func prettifyName(name string) string {
	name = strings.ReplaceAll(name, "-", " ")
	name = strings.ReplaceAll(name, "_", " ")
	name = strings.Title(name)
	name = strings.ReplaceAll(name, " ", "")
	return name
}

func determinePackageName(name string, internal bool) string {
	if internal {
		return name
	}

	return name + "_test"
}
   0707010000092E000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal  0707010000092F000081A4000000000000000000000001645E367C0000105A000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/compile.go   package internal

import (
	"fmt"
	"os"
	"os/exec"
	"path/filepath"
	"strings"
	"sync"

	"github.com/onsi/ginkgo/v2/types"
)

func CompileSuite(suite TestSuite, goFlagsConfig types.GoFlagsConfig) TestSuite {
	if suite.PathToCompiledTest != "" {
		return suite
	}

	suite.CompilationError = nil

	path, err := filepath.Abs(filepath.Join(suite.Path, suite.PackageName+".test"))
	if err != nil {
		suite.State = TestSuiteStateFailedToCompile
		suite.CompilationError = fmt.Errorf("Failed to compute compilation target path:\n%s", err.Error())
		return suite
	}

	ginkgoInvocationPath, _ := os.Getwd()
	ginkgoInvocationPath, _ = filepath.Abs(ginkgoInvocationPath)
	packagePath := suite.AbsPath()
	pathToInvocationPath, err := filepath.Rel(packagePath, ginkgoInvocationPath)
	if err != nil {
		suite.State = TestSuiteStateFailedToCompile
		suite.CompilationError = fmt.Errorf("Failed to get relative path from package to the current working directory:\n%s", err.Error())
		return suite
	}
	args, err := types.GenerateGoTestCompileArgs(goFlagsConfig, path, "./", pathToInvocationPath)
	if err != nil {
		suite.State = TestSuiteStateFailedToCompile
		suite.CompilationError = fmt.Errorf("Failed to generate go test compile flags:\n%s", err.Error())
		return suite
	}

	cmd := exec.Command("go", args...)
	cmd.Dir = suite.Path
	output, err := cmd.CombinedOutput()
	if err != nil {
		if len(output) > 0 {
			suite.State = TestSuiteStateFailedToCompile
			suite.CompilationError = fmt.Errorf("Failed to compile %s:\n\n%s", suite.PackageName, output)
		} else {
			suite.State = TestSuiteStateFailedToCompile
			suite.CompilationError = fmt.Errorf("Failed to compile %s\n%s", suite.PackageName, err.Error())
		}
		return suite
	}

	if strings.Contains(string(output), "[no test files]") {
		suite.State = TestSuiteStateSkippedDueToEmptyCompilation
		return suite
	}

	if len(output) > 0 {
		fmt.Println(string(output))
	}

	if !FileExists(path) {
		suite.State = TestSuiteStateFailedToCompile
		suite.CompilationError = fmt.Errorf("Failed to compile %s:\nOutput file %s could not be found", suite.PackageName, path)
		return suite
	}

	suite.State = TestSuiteStateCompiled
	suite.PathToCompiledTest = path
	return suite
}

func Cleanup(goFlagsConfig types.GoFlagsConfig, suites ...TestSuite) {
	if goFlagsConfig.BinaryMustBePreserved() {
		return
	}
	for _, suite := range suites {
		if !suite.Precompiled {
			os.Remove(suite.PathToCompiledTest)
		}
	}
}

type parallelSuiteBundle struct {
	suite    TestSuite
	compiled chan TestSuite
}

type OrderedParallelCompiler struct {
	mutex        *sync.Mutex
	stopped      bool
	numCompilers int

	idx                int
	numSuites          int
	completionChannels []chan TestSuite
}

func NewOrderedParallelCompiler(numCompilers int) *OrderedParallelCompiler {
	return &OrderedParallelCompiler{
		mutex:        &sync.Mutex{},
		numCompilers: numCompilers,
	}
}

func (opc *OrderedParallelCompiler) StartCompiling(suites TestSuites, goFlagsConfig types.GoFlagsConfig) {
	opc.stopped = false
	opc.idx = 0
	opc.numSuites = len(suites)
	opc.completionChannels = make([]chan TestSuite, opc.numSuites)

	toCompile := make(chan parallelSuiteBundle, opc.numCompilers)
	for compiler := 0; compiler < opc.numCompilers; compiler++ {
		go func() {
			for bundle := range toCompile {
				c, suite := bundle.compiled, bundle.suite
				opc.mutex.Lock()
				stopped := opc.stopped
				opc.mutex.Unlock()
				if !stopped {
					suite = CompileSuite(suite, goFlagsConfig)
				}
				c <- suite
			}
		}()
	}

	for idx, suite := range suites {
		opc.completionChannels[idx] = make(chan TestSuite, 1)
		toCompile <- parallelSuiteBundle{suite, opc.completionChannels[idx]}
		if idx == 0 { //compile first suite serially
			suite = <-opc.completionChannels[0]
			opc.completionChannels[0] <- suite
		}
	}

	close(toCompile)
}

func (opc *OrderedParallelCompiler) Next() (int, TestSuite) {
	if opc.idx >= opc.numSuites {
		return opc.numSuites, TestSuite{}
	}

	idx := opc.idx
	suite := <-opc.completionChannels[idx]
	opc.idx = opc.idx + 1

	return idx, suite
}

func (opc *OrderedParallelCompiler) StopAndDrain() {
	opc.mutex.Lock()
	opc.stopped = true
	opc.mutex.Unlock()
}
  07070100000930000081A4000000000000000000000001645E367C00002111000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/profiles_and_reports.go  package internal

import (
	"bytes"
	"fmt"
	"os"
	"os/exec"
	"path/filepath"
	"regexp"
	"strconv"

	"github.com/google/pprof/profile"
	"github.com/onsi/ginkgo/v2/reporters"
	"github.com/onsi/ginkgo/v2/types"
)

func AbsPathForGeneratedAsset(assetName string, suite TestSuite, cliConfig types.CLIConfig, process int) string {
	suffix := ""
	if process != 0 {
		suffix = fmt.Sprintf(".%d", process)
	}
	if cliConfig.OutputDir == "" {
		return filepath.Join(suite.AbsPath(), assetName+suffix)
	}
	outputDir, _ := filepath.Abs(cliConfig.OutputDir)
	return filepath.Join(outputDir, suite.NamespacedName()+"_"+assetName+suffix)
}

func FinalizeProfilesAndReportsForSuites(suites TestSuites, cliConfig types.CLIConfig, suiteConfig types.SuiteConfig, reporterConfig types.ReporterConfig, goFlagsConfig types.GoFlagsConfig) ([]string, error) {
	messages := []string{}
	suitesWithProfiles := suites.WithState(TestSuiteStatePassed, TestSuiteStateFailed) //anything else won't have actually run and generated a profile

	// merge cover profiles if need be
	if goFlagsConfig.Cover && !cliConfig.KeepSeparateCoverprofiles {
		coverProfiles := []string{}
		for _, suite := range suitesWithProfiles {
			if !suite.HasProgrammaticFocus {
				coverProfiles = append(coverProfiles, AbsPathForGeneratedAsset(goFlagsConfig.CoverProfile, suite, cliConfig, 0))
			}
		}

		if len(coverProfiles) > 0 {
			dst := goFlagsConfig.CoverProfile
			if cliConfig.OutputDir != "" {
				dst = filepath.Join(cliConfig.OutputDir, goFlagsConfig.CoverProfile)
			}
			err := MergeAndCleanupCoverProfiles(coverProfiles, dst)
			if err != nil {
				return messages, err
			}
			coverage, err := GetCoverageFromCoverProfile(dst)
			if err != nil {
				return messages, err
			}
			if coverage == 0 {
				messages = append(messages, "composite coverage: [no statements]")
			} else if suitesWithProfiles.AnyHaveProgrammaticFocus() {
				messages = append(messages, fmt.Sprintf("composite coverage: %.1f%% of statements however some suites did not contribute because they included programatically focused specs", coverage))
			} else {
				messages = append(messages, fmt.Sprintf("composite coverage: %.1f%% of statements", coverage))
			}
		} else {
			messages = append(messages, "no composite coverage computed: all suites included programatically focused specs")
		}
	}

	// copy binaries if need be
	for _, suite := range suitesWithProfiles {
		if goFlagsConfig.BinaryMustBePreserved() && cliConfig.OutputDir != "" {
			src := suite.PathToCompiledTest
			dst := filepath.Join(cliConfig.OutputDir, suite.NamespacedName()+".test")
			if suite.Precompiled {
				if err := CopyFile(src, dst); err != nil {
					return messages, err
				}
			} else {
				if err := os.Rename(src, dst); err != nil {
					return messages, err
				}
			}
		}
	}

	type reportFormat struct {
		ReportName   string
		GenerateFunc func(types.Report, string) error
		MergeFunc    func([]string, string) ([]string, error)
	}
	reportFormats := []reportFormat{}
	if reporterConfig.JSONReport != "" {
		reportFormats = append(reportFormats, reportFormat{ReportName: reporterConfig.JSONReport, GenerateFunc: reporters.GenerateJSONReport, MergeFunc: reporters.MergeAndCleanupJSONReports})
	}
	if reporterConfig.JUnitReport != "" {
		reportFormats = append(reportFormats, reportFormat{ReportName: reporterConfig.JUnitReport, GenerateFunc: reporters.GenerateJUnitReport, MergeFunc: reporters.MergeAndCleanupJUnitReports})
	}
	if reporterConfig.TeamcityReport != "" {
		reportFormats = append(reportFormats, reportFormat{ReportName: reporterConfig.TeamcityReport, GenerateFunc: reporters.GenerateTeamcityReport, MergeFunc: reporters.MergeAndCleanupTeamcityReports})
	}

	// Generate reports for suites that failed to run
	reportableSuites := suites.ThatAreGinkgoSuites()
	for _, suite := range reportableSuites.WithState(TestSuiteStateFailedToCompile, TestSuiteStateFailedDueToTimeout, TestSuiteStateSkippedDueToPriorFailures, TestSuiteStateSkippedDueToEmptyCompilation) {
		report := types.Report{
			SuitePath:      suite.AbsPath(),
			SuiteConfig:    suiteConfig,
			SuiteSucceeded: false,
		}
		switch suite.State {
		case TestSuiteStateFailedToCompile:
			report.SpecialSuiteFailureReasons = append(report.SpecialSuiteFailureReasons, suite.CompilationError.Error())
		case TestSuiteStateFailedDueToTimeout:
			report.SpecialSuiteFailureReasons = append(report.SpecialSuiteFailureReasons, TIMEOUT_ELAPSED_FAILURE_REASON)
		case TestSuiteStateSkippedDueToPriorFailures:
			report.SpecialSuiteFailureReasons = append(report.SpecialSuiteFailureReasons, PRIOR_FAILURES_FAILURE_REASON)
		case TestSuiteStateSkippedDueToEmptyCompilation:
			report.SpecialSuiteFailureReasons = append(report.SpecialSuiteFailureReasons, EMPTY_SKIP_FAILURE_REASON)
			report.SuiteSucceeded = true
		}

		for _, format := range reportFormats {
			format.GenerateFunc(report, AbsPathForGeneratedAsset(format.ReportName, suite, cliConfig, 0))
		}
	}

	// Merge reports unless we've been asked to keep them separate
	if !cliConfig.KeepSeparateReports {
		for _, format := range reportFormats {
			reports := []string{}
			for _, suite := range reportableSuites {
				reports = append(reports, AbsPathForGeneratedAsset(format.ReportName, suite, cliConfig, 0))
			}
			dst := format.ReportName
			if cliConfig.OutputDir != "" {
				dst = filepath.Join(cliConfig.OutputDir, format.ReportName)
			}
			mergeMessages, err := format.MergeFunc(reports, dst)
			messages = append(messages, mergeMessages...)
			if err != nil {
				return messages, err
			}
		}
	}

	return messages, nil
}

//loads each profile, combines them, deletes them, stores them in destination
func MergeAndCleanupCoverProfiles(profiles []string, destination string) error {
	combined := &bytes.Buffer{}
	modeRegex := regexp.MustCompile(`^mode: .*\n`)
	for i, profile := range profiles {
		contents, err := os.ReadFile(profile)
		if err != nil {
			return fmt.Errorf("Unable to read coverage file %s:\n%s", profile, err.Error())
		}
		os.Remove(profile)

		// remove the cover mode line from every file
		// except the first one
		if i > 0 {
			contents = modeRegex.ReplaceAll(contents, []byte{})
		}

		_, err = combined.Write(contents)

		// Add a newline to the end of every file if missing.
		if err == nil && len(contents) > 0 && contents[len(contents)-1] != '\n' {
			_, err = combined.Write([]byte("\n"))
		}

		if err != nil {
			return fmt.Errorf("Unable to append to coverprofile:\n%s", err.Error())
		}
	}

	err := os.WriteFile(destination, combined.Bytes(), 0666)
	if err != nil {
		return fmt.Errorf("Unable to create combined cover profile:\n%s", err.Error())
	}
	return nil
}

func GetCoverageFromCoverProfile(profile string) (float64, error) {
	cmd := exec.Command("go", "tool", "cover", "-func", profile)
	output, err := cmd.CombinedOutput()
	if err != nil {
		return 0, fmt.Errorf("Could not process Coverprofile %s: %s", profile, err.Error())
	}
	re := regexp.MustCompile(`total:\s*\(statements\)\s*(\d*\.\d*)\%`)
	matches := re.FindStringSubmatch(string(output))
	if matches == nil {
		return 0, fmt.Errorf("Could not parse Coverprofile to compute coverage percentage")
	}
	coverageString := matches[1]
	coverage, err := strconv.ParseFloat(coverageString, 64)
	if err != nil {
		return 0, fmt.Errorf("Could not parse Coverprofile to compute coverage percentage: %s", err.Error())
	}

	return coverage, nil
}

func MergeProfiles(profilePaths []string, destination string) error {
	profiles := []*profile.Profile{}
	for _, profilePath := range profilePaths {
		proFile, err := os.Open(profilePath)
		if err != nil {
			return fmt.Errorf("Could not open profile: %s\n%s", profilePath, err.Error())
		}
		prof, err := profile.Parse(proFile)
		if err != nil {
			return fmt.Errorf("Could not parse profile: %s\n%s", profilePath, err.Error())
		}
		profiles = append(profiles, prof)
		os.Remove(profilePath)
	}

	mergedProfile, err := profile.Merge(profiles)
	if err != nil {
		return fmt.Errorf("Could not merge profiles:\n%s", err.Error())
	}

	outFile, err := os.Create(destination)
	if err != nil {
		return fmt.Errorf("Could not create merged profile %s:\n%s", destination, err.Error())
	}
	err = mergedProfile.Write(outFile)
	if err != nil {
		return fmt.Errorf("Could not write merged profile %s:\n%s", destination, err.Error())
	}
	err = outFile.Close()
	if err != nil {
		return fmt.Errorf("Could not close merged profile %s:\n%s", destination, err.Error())
	}

	return nil
}
   07070100000931000081A4000000000000000000000001645E367C00003837000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/run.go   package internal

import (
	"bytes"
	"fmt"
	"io"
	"os"
	"os/exec"
	"path/filepath"
	"regexp"
	"strings"
	"syscall"
	"time"

	"github.com/onsi/ginkgo/v2/formatter"
	"github.com/onsi/ginkgo/v2/ginkgo/command"
	"github.com/onsi/ginkgo/v2/internal/parallel_support"
	"github.com/onsi/ginkgo/v2/reporters"
	"github.com/onsi/ginkgo/v2/types"
)

func RunCompiledSuite(suite TestSuite, ginkgoConfig types.SuiteConfig, reporterConfig types.ReporterConfig, cliConfig types.CLIConfig, goFlagsConfig types.GoFlagsConfig, additionalArgs []string) TestSuite {
	suite.State = TestSuiteStateFailed
	suite.HasProgrammaticFocus = false

	if suite.PathToCompiledTest == "" {
		return suite
	}

	if suite.IsGinkgo && cliConfig.ComputedProcs() > 1 {
		suite = runParallel(suite, ginkgoConfig, reporterConfig, cliConfig, goFlagsConfig, additionalArgs)
	} else if suite.IsGinkgo {
		suite = runSerial(suite, ginkgoConfig, reporterConfig, cliConfig, goFlagsConfig, additionalArgs)
	} else {
		suite = runGoTest(suite, cliConfig, goFlagsConfig)
	}
	runAfterRunHook(cliConfig.AfterRunHook, reporterConfig.NoColor, suite)
	return suite
}

func buildAndStartCommand(suite TestSuite, args []string, pipeToStdout bool) (*exec.Cmd, *bytes.Buffer) {
	buf := &bytes.Buffer{}
	cmd := exec.Command(suite.PathToCompiledTest, args...)
	cmd.Dir = suite.Path
	if pipeToStdout {
		cmd.Stderr = io.MultiWriter(os.Stdout, buf)
		cmd.Stdout = os.Stdout
	} else {
		cmd.Stderr = buf
		cmd.Stdout = buf
	}
	err := cmd.Start()
	command.AbortIfError("Failed to start test suite", err)

	return cmd, buf
}

func checkForNoTestsWarning(buf *bytes.Buffer) bool {
	if strings.Contains(buf.String(), "warning: no tests to run") {
		fmt.Fprintf(os.Stderr, `Found no test suites, did you forget to run "ginkgo bootstrap"?`)
		return true
	}
	return false
}

func runGoTest(suite TestSuite, cliConfig types.CLIConfig, goFlagsConfig types.GoFlagsConfig) TestSuite {
	// As we run the go test from the suite directory, make sure the cover profile is absolute
	// and placed into the expected output directory when one is configured.
	if goFlagsConfig.Cover && !filepath.IsAbs(goFlagsConfig.CoverProfile) {
		goFlagsConfig.CoverProfile = AbsPathForGeneratedAsset(goFlagsConfig.CoverProfile, suite, cliConfig, 0)
	}

	args, err := types.GenerateGoTestRunArgs(goFlagsConfig)
	command.AbortIfError("Failed to generate test run arguments", err)
	cmd, buf := buildAndStartCommand(suite, args, true)

	cmd.Wait()

	exitStatus := cmd.ProcessState.Sys().(syscall.WaitStatus).ExitStatus()
	passed := (exitStatus == 0) || (exitStatus == types.GINKGO_FOCUS_EXIT_CODE)
	passed = !(checkForNoTestsWarning(buf) && cliConfig.RequireSuite) && passed
	if passed {
		suite.State = TestSuiteStatePassed
	} else {
		suite.State = TestSuiteStateFailed
	}

	return suite
}

func runSerial(suite TestSuite, ginkgoConfig types.SuiteConfig, reporterConfig types.ReporterConfig, cliConfig types.CLIConfig, goFlagsConfig types.GoFlagsConfig, additionalArgs []string) TestSuite {
	if goFlagsConfig.Cover {
		goFlagsConfig.CoverProfile = AbsPathForGeneratedAsset(goFlagsConfig.CoverProfile, suite, cliConfig, 0)
	}
	if goFlagsConfig.BlockProfile != "" {
		goFlagsConfig.BlockProfile = AbsPathForGeneratedAsset(goFlagsConfig.BlockProfile, suite, cliConfig, 0)
	}
	if goFlagsConfig.CPUProfile != "" {
		goFlagsConfig.CPUProfile = AbsPathForGeneratedAsset(goFlagsConfig.CPUProfile, suite, cliConfig, 0)
	}
	if goFlagsConfig.MemProfile != "" {
		goFlagsConfig.MemProfile = AbsPathForGeneratedAsset(goFlagsConfig.MemProfile, suite, cliConfig, 0)
	}
	if goFlagsConfig.MutexProfile != "" {
		goFlagsConfig.MutexProfile = AbsPathForGeneratedAsset(goFlagsConfig.MutexProfile, suite, cliConfig, 0)
	}
	if reporterConfig.JSONReport != "" {
		reporterConfig.JSONReport = AbsPathForGeneratedAsset(reporterConfig.JSONReport, suite, cliConfig, 0)
	}
	if reporterConfig.JUnitReport != "" {
		reporterConfig.JUnitReport = AbsPathForGeneratedAsset(reporterConfig.JUnitReport, suite, cliConfig, 0)
	}
	if reporterConfig.TeamcityReport != "" {
		reporterConfig.TeamcityReport = AbsPathForGeneratedAsset(reporterConfig.TeamcityReport, suite, cliConfig, 0)
	}

	args, err := types.GenerateGinkgoTestRunArgs(ginkgoConfig, reporterConfig, goFlagsConfig)
	command.AbortIfError("Failed to generate test run arguments", err)
	args = append([]string{"--test.timeout=0"}, args...)
	args = append(args, additionalArgs...)

	cmd, buf := buildAndStartCommand(suite, args, true)

	cmd.Wait()

	exitStatus := cmd.ProcessState.Sys().(syscall.WaitStatus).ExitStatus()
	suite.HasProgrammaticFocus = (exitStatus == types.GINKGO_FOCUS_EXIT_CODE)
	passed := (exitStatus == 0) || (exitStatus == types.GINKGO_FOCUS_EXIT_CODE)
	passed = !(checkForNoTestsWarning(buf) && cliConfig.RequireSuite) && passed
	if passed {
		suite.State = TestSuiteStatePassed
	} else {
		suite.State = TestSuiteStateFailed
	}

	if suite.HasProgrammaticFocus {
		if goFlagsConfig.Cover {
			fmt.Fprintln(os.Stdout, "coverage: no coverfile was generated because specs are programmatically focused")
		}
		if goFlagsConfig.BlockProfile != "" {
			fmt.Fprintln(os.Stdout, "no block profile was generated because specs are programmatically focused")
		}
		if goFlagsConfig.CPUProfile != "" {
			fmt.Fprintln(os.Stdout, "no cpu profile was generated because specs are programmatically focused")
		}
		if goFlagsConfig.MemProfile != "" {
			fmt.Fprintln(os.Stdout, "no mem profile was generated because specs are programmatically focused")
		}
		if goFlagsConfig.MutexProfile != "" {
			fmt.Fprintln(os.Stdout, "no mutex profile was generated because specs are programmatically focused")
		}
	}

	return suite
}

func runParallel(suite TestSuite, ginkgoConfig types.SuiteConfig, reporterConfig types.ReporterConfig, cliConfig types.CLIConfig, goFlagsConfig types.GoFlagsConfig, additionalArgs []string) TestSuite {
	type procResult struct {
		passed               bool
		hasProgrammaticFocus bool
	}

	numProcs := cliConfig.ComputedProcs()
	procOutput := make([]*bytes.Buffer, numProcs)
	coverProfiles := []string{}

	blockProfiles := []string{}
	cpuProfiles := []string{}
	memProfiles := []string{}
	mutexProfiles := []string{}

	procResults := make(chan procResult)

	server, err := parallel_support.NewServer(numProcs, reporters.NewDefaultReporter(reporterConfig, formatter.ColorableStdOut))
	command.AbortIfError("Failed to start parallel spec server", err)
	server.Start()
	defer server.Close()

	if reporterConfig.JSONReport != "" {
		reporterConfig.JSONReport = AbsPathForGeneratedAsset(reporterConfig.JSONReport, suite, cliConfig, 0)
	}
	if reporterConfig.JUnitReport != "" {
		reporterConfig.JUnitReport = AbsPathForGeneratedAsset(reporterConfig.JUnitReport, suite, cliConfig, 0)
	}
	if reporterConfig.TeamcityReport != "" {
		reporterConfig.TeamcityReport = AbsPathForGeneratedAsset(reporterConfig.TeamcityReport, suite, cliConfig, 0)
	}

	for proc := 1; proc <= numProcs; proc++ {
		procGinkgoConfig := ginkgoConfig
		procGinkgoConfig.ParallelProcess, procGinkgoConfig.ParallelTotal, procGinkgoConfig.ParallelHost = proc, numProcs, server.Address()

		procGoFlagsConfig := goFlagsConfig
		if goFlagsConfig.Cover {
			procGoFlagsConfig.CoverProfile = AbsPathForGeneratedAsset(goFlagsConfig.CoverProfile, suite, cliConfig, proc)
			coverProfiles = append(coverProfiles, procGoFlagsConfig.CoverProfile)
		}
		if goFlagsConfig.BlockProfile != "" {
			procGoFlagsConfig.BlockProfile = AbsPathForGeneratedAsset(goFlagsConfig.BlockProfile, suite, cliConfig, proc)
			blockProfiles = append(blockProfiles, procGoFlagsConfig.BlockProfile)
		}
		if goFlagsConfig.CPUProfile != "" {
			procGoFlagsConfig.CPUProfile = AbsPathForGeneratedAsset(goFlagsConfig.CPUProfile, suite, cliConfig, proc)
			cpuProfiles = append(cpuProfiles, procGoFlagsConfig.CPUProfile)
		}
		if goFlagsConfig.MemProfile != "" {
			procGoFlagsConfig.MemProfile = AbsPathForGeneratedAsset(goFlagsConfig.MemProfile, suite, cliConfig, proc)
			memProfiles = append(memProfiles, procGoFlagsConfig.MemProfile)
		}
		if goFlagsConfig.MutexProfile != "" {
			procGoFlagsConfig.MutexProfile = AbsPathForGeneratedAsset(goFlagsConfig.MutexProfile, suite, cliConfig, proc)
			mutexProfiles = append(mutexProfiles, procGoFlagsConfig.MutexProfile)
		}

		args, err := types.GenerateGinkgoTestRunArgs(procGinkgoConfig, reporterConfig, procGoFlagsConfig)
		command.AbortIfError("Failed to generate test run arguments", err)
		args = append([]string{"--test.timeout=0"}, args...)
		args = append(args, additionalArgs...)

		cmd, buf := buildAndStartCommand(suite, args, false)
		procOutput[proc-1] = buf
		server.RegisterAlive(proc, func() bool { return cmd.ProcessState == nil || !cmd.ProcessState.Exited() })

		go func() {
			cmd.Wait()
			exitStatus := cmd.ProcessState.Sys().(syscall.WaitStatus).ExitStatus()
			procResults <- procResult{
				passed:               (exitStatus == 0) || (exitStatus == types.GINKGO_FOCUS_EXIT_CODE),
				hasProgrammaticFocus: exitStatus == types.GINKGO_FOCUS_EXIT_CODE,
			}
		}()
	}

	passed := true
	for proc := 1; proc <= cliConfig.ComputedProcs(); proc++ {
		result := <-procResults
		passed = passed && result.passed
		suite.HasProgrammaticFocus = suite.HasProgrammaticFocus || result.hasProgrammaticFocus
	}
	if passed {
		suite.State = TestSuiteStatePassed
	} else {
		suite.State = TestSuiteStateFailed
	}

	select {
	case <-server.GetSuiteDone():
		fmt.Println("")
	case <-time.After(time.Second):
		//one of the nodes never finished reporting to the server.  Something must have gone wrong.
		fmt.Fprint(formatter.ColorableStdErr, formatter.F("\n{{bold}}{{red}}Ginkgo timed out waiting for all parallel procs to report back{{/}}\n"))
		fmt.Fprint(formatter.ColorableStdErr, formatter.F("{{gray}}Test suite:{{/}} %s (%s)\n\n", suite.PackageName, suite.Path))
		fmt.Fprint(formatter.ColorableStdErr, formatter.Fiw(0, formatter.COLS, "This occurs if a parallel process exits before it reports its results to the Ginkgo CLI.  The CLI will now print out all the stdout/stderr output it's collected from the running processes.  However you may not see anything useful in these logs because the individual test processes usually intercept output to stdout/stderr in order to capture it in the spec reports.\n\nYou may want to try rerunning your test suite with {{light-gray}}--output-interceptor-mode=none{{/}} to see additional output here and debug your suite.\n"))
		fmt.Fprintln(formatter.ColorableStdErr, "  ")
		for proc := 1; proc <= cliConfig.ComputedProcs(); proc++ {
			fmt.Fprintf(formatter.ColorableStdErr, formatter.F("{{bold}}Output from proc %d:{{/}}\n", proc))
			fmt.Fprintln(os.Stderr, formatter.Fi(1, "%s", procOutput[proc-1].String()))
		}
		fmt.Fprintf(os.Stderr, "** End **")
	}

	for proc := 1; proc <= cliConfig.ComputedProcs(); proc++ {
		output := procOutput[proc-1].String()
		if proc == 1 && checkForNoTestsWarning(procOutput[0]) && cliConfig.RequireSuite {
			suite.State = TestSuiteStateFailed
		}
		if strings.Contains(output, "deprecated Ginkgo functionality") {
			fmt.Fprintln(os.Stderr, output)
		}
	}

	if len(coverProfiles) > 0 {
		if suite.HasProgrammaticFocus {
			fmt.Fprintln(os.Stdout, "coverage: no coverfile was generated because specs are programmatically focused")
		} else {
			coverProfile := AbsPathForGeneratedAsset(goFlagsConfig.CoverProfile, suite, cliConfig, 0)
			err := MergeAndCleanupCoverProfiles(coverProfiles, coverProfile)
			command.AbortIfError("Failed to combine cover profiles", err)

			coverage, err := GetCoverageFromCoverProfile(coverProfile)
			command.AbortIfError("Failed to compute coverage", err)
			if coverage == 0 {
				fmt.Fprintln(os.Stdout, "coverage: [no statements]")
			} else {
				fmt.Fprintf(os.Stdout, "coverage: %.1f%% of statements\n", coverage)
			}
		}
	}
	if len(blockProfiles) > 0 {
		if suite.HasProgrammaticFocus {
			fmt.Fprintln(os.Stdout, "no block profile was generated because specs are programmatically focused")
		} else {
			blockProfile := AbsPathForGeneratedAsset(goFlagsConfig.BlockProfile, suite, cliConfig, 0)
			err := MergeProfiles(blockProfiles, blockProfile)
			command.AbortIfError("Failed to combine blockprofiles", err)
		}
	}
	if len(cpuProfiles) > 0 {
		if suite.HasProgrammaticFocus {
			fmt.Fprintln(os.Stdout, "no cpu profile was generated because specs are programmatically focused")
		} else {
			cpuProfile := AbsPathForGeneratedAsset(goFlagsConfig.CPUProfile, suite, cliConfig, 0)
			err := MergeProfiles(cpuProfiles, cpuProfile)
			command.AbortIfError("Failed to combine cpuprofiles", err)
		}
	}
	if len(memProfiles) > 0 {
		if suite.HasProgrammaticFocus {
			fmt.Fprintln(os.Stdout, "no mem profile was generated because specs are programmatically focused")
		} else {
			memProfile := AbsPathForGeneratedAsset(goFlagsConfig.MemProfile, suite, cliConfig, 0)
			err := MergeProfiles(memProfiles, memProfile)
			command.AbortIfError("Failed to combine memprofiles", err)
		}
	}
	if len(mutexProfiles) > 0 {
		if suite.HasProgrammaticFocus {
			fmt.Fprintln(os.Stdout, "no mutex profile was generated because specs are programmatically focused")
		} else {
			mutexProfile := AbsPathForGeneratedAsset(goFlagsConfig.MutexProfile, suite, cliConfig, 0)
			err := MergeProfiles(mutexProfiles, mutexProfile)
			command.AbortIfError("Failed to combine mutexprofiles", err)
		}
	}

	return suite
}

func runAfterRunHook(command string, noColor bool, suite TestSuite) {
	if command == "" {
		return
	}
	f := formatter.NewWithNoColorBool(noColor)

	// Allow for string replacement to pass input to the command
	passed := "[FAIL]"
	if suite.State.Is(TestSuiteStatePassed) {
		passed = "[PASS]"
	}
	command = strings.ReplaceAll(command, "(ginkgo-suite-passed)", passed)
	command = strings.ReplaceAll(command, "(ginkgo-suite-name)", suite.PackageName)

	// Must break command into parts
	splitArgs := regexp.MustCompile(`'.+'|".+"|\S+`)
	parts := splitArgs.FindAllString(command, -1)

	output, err := exec.Command(parts[0], parts[1:]...).CombinedOutput()
	if err != nil {
		fmt.Fprintln(formatter.ColorableStdOut, f.Fi(0, "{{red}}{{bold}}After-run-hook failed:{{/}}"))
		fmt.Fprintln(formatter.ColorableStdOut, f.Fi(1, "{{red}}%s{{/}}", output))
	} else {
		fmt.Fprintln(formatter.ColorableStdOut, f.Fi(0, "{{green}}{{bold}}After-run-hook succeeded:{{/}}"))
		fmt.Fprintln(formatter.ColorableStdOut, f.Fi(1, "{{green}}%s{{/}}", output))
	}
}
 07070100000932000081A4000000000000000000000001645E367C000018AC000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/test_suite.go    package internal

import (
	"errors"
	"math/rand"
	"os"
	"path"
	"path/filepath"
	"regexp"
	"strings"

	"github.com/onsi/ginkgo/v2/types"
)

const TIMEOUT_ELAPSED_FAILURE_REASON = "Suite did not run because the timeout elapsed"
const PRIOR_FAILURES_FAILURE_REASON = "Suite did not run because prior suites failed and --keep-going is not set"
const EMPTY_SKIP_FAILURE_REASON = "Suite did not run go test reported that no test files were found"

type TestSuiteState uint

const (
	TestSuiteStateInvalid TestSuiteState = iota

	TestSuiteStateUncompiled
	TestSuiteStateCompiled

	TestSuiteStatePassed

	TestSuiteStateSkippedDueToEmptyCompilation
	TestSuiteStateSkippedByFilter
	TestSuiteStateSkippedDueToPriorFailures

	TestSuiteStateFailed
	TestSuiteStateFailedDueToTimeout
	TestSuiteStateFailedToCompile
)

var TestSuiteStateFailureStates = []TestSuiteState{TestSuiteStateFailed, TestSuiteStateFailedDueToTimeout, TestSuiteStateFailedToCompile}

func (state TestSuiteState) Is(states ...TestSuiteState) bool {
	for _, suiteState := range states {
		if suiteState == state {
			return true
		}
	}

	return false
}

type TestSuite struct {
	Path        string
	PackageName string
	IsGinkgo    bool

	Precompiled        bool
	PathToCompiledTest string
	CompilationError   error

	HasProgrammaticFocus bool
	State                TestSuiteState
}

func (ts TestSuite) AbsPath() string {
	path, _ := filepath.Abs(ts.Path)
	return path
}

func (ts TestSuite) NamespacedName() string {
	name := relPath(ts.Path)
	name = strings.TrimLeft(name, "."+string(filepath.Separator))
	name = strings.ReplaceAll(name, string(filepath.Separator), "_")
	name = strings.ReplaceAll(name, " ", "_")
	if name == "" {
		return ts.PackageName
	}
	return name
}

type TestSuites []TestSuite

func (ts TestSuites) AnyHaveProgrammaticFocus() bool {
	for _, suite := range ts {
		if suite.HasProgrammaticFocus {
			return true
		}
	}

	return false
}

func (ts TestSuites) ThatAreGinkgoSuites() TestSuites {
	out := TestSuites{}
	for _, suite := range ts {
		if suite.IsGinkgo {
			out = append(out, suite)
		}
	}
	return out
}

func (ts TestSuites) CountWithState(states ...TestSuiteState) int {
	n := 0
	for _, suite := range ts {
		if suite.State.Is(states...) {
			n += 1
		}
	}

	return n
}

func (ts TestSuites) WithState(states ...TestSuiteState) TestSuites {
	out := TestSuites{}
	for _, suite := range ts {
		if suite.State.Is(states...) {
			out = append(out, suite)
		}
	}

	return out
}

func (ts TestSuites) WithoutState(states ...TestSuiteState) TestSuites {
	out := TestSuites{}
	for _, suite := range ts {
		if !suite.State.Is(states...) {
			out = append(out, suite)
		}
	}

	return out
}

func (ts TestSuites) ShuffledCopy(seed int64) TestSuites {
	out := make(TestSuites, len(ts))
	permutation := rand.New(rand.NewSource(seed)).Perm(len(ts))
	for i, j := range permutation {
		out[i] = ts[j]
	}
	return out
}

func FindSuites(args []string, cliConfig types.CLIConfig, allowPrecompiled bool) TestSuites {
	suites := TestSuites{}

	if len(args) > 0 {
		for _, arg := range args {
			if allowPrecompiled {
				suite, err := precompiledTestSuite(arg)
				if err == nil {
					suites = append(suites, suite)
					continue
				}
			}
			recurseForSuite := cliConfig.Recurse
			if strings.HasSuffix(arg, "/...") && arg != "/..." {
				arg = arg[:len(arg)-4]
				recurseForSuite = true
			}
			suites = append(suites, suitesInDir(arg, recurseForSuite)...)
		}
	} else {
		suites = suitesInDir(".", cliConfig.Recurse)
	}

	if cliConfig.SkipPackage != "" {
		skipFilters := strings.Split(cliConfig.SkipPackage, ",")
		for idx := range suites {
			for _, skipFilter := range skipFilters {
				if strings.Contains(suites[idx].Path, skipFilter) {
					suites[idx].State = TestSuiteStateSkippedByFilter
					break
				}
			}
		}
	}

	return suites
}

func precompiledTestSuite(path string) (TestSuite, error) {
	info, err := os.Stat(path)
	if err != nil {
		return TestSuite{}, err
	}

	if info.IsDir() {
		return TestSuite{}, errors.New("this is a directory, not a file")
	}

	if filepath.Ext(path) != ".test" && filepath.Ext(path) != ".exe" {
		return TestSuite{}, errors.New("this is not a .test binary")
	}

	if filepath.Ext(path) == ".test" && info.Mode()&0111 == 0 {
		return TestSuite{}, errors.New("this is not executable")
	}

	dir := relPath(filepath.Dir(path))
	packageName := strings.TrimSuffix(filepath.Base(path), ".exe")
	packageName = strings.TrimSuffix(packageName, ".test")

	path, err = filepath.Abs(path)
	if err != nil {
		return TestSuite{}, err
	}

	return TestSuite{
		Path:               dir,
		PackageName:        packageName,
		IsGinkgo:           true,
		Precompiled:        true,
		PathToCompiledTest: path,
		State:              TestSuiteStateCompiled,
	}, nil
}

func suitesInDir(dir string, recurse bool) TestSuites {
	suites := TestSuites{}

	if path.Base(dir) == "vendor" {
		return suites
	}

	files, _ := os.ReadDir(dir)
	re := regexp.MustCompile(`^[^._].*_test\.go$`)
	for _, file := range files {
		if !file.IsDir() && re.Match([]byte(file.Name())) {
			suite := TestSuite{
				Path:        relPath(dir),
				PackageName: packageNameForSuite(dir),
				IsGinkgo:    filesHaveGinkgoSuite(dir, files),
				State:       TestSuiteStateUncompiled,
			}
			suites = append(suites, suite)
			break
		}
	}

	if recurse {
		re = regexp.MustCompile(`^[._]`)
		for _, file := range files {
			if file.IsDir() && !re.Match([]byte(file.Name())) {
				suites = append(suites, suitesInDir(dir+"/"+file.Name(), recurse)...)
			}
		}
	}

	return suites
}

func relPath(dir string) string {
	dir, _ = filepath.Abs(dir)
	cwd, _ := os.Getwd()
	dir, _ = filepath.Rel(cwd, filepath.Clean(dir))

	if string(dir[0]) != "." {
		dir = "." + string(filepath.Separator) + dir
	}

	return dir
}

func packageNameForSuite(dir string) string {
	path, _ := filepath.Abs(dir)
	return filepath.Base(path)
}

func filesHaveGinkgoSuite(dir string, files []os.DirEntry) bool {
	reTestFile := regexp.MustCompile(`_test\.go$`)
	reGinkgo := regexp.MustCompile(`package ginkgo|\/ginkgo"|\/ginkgo\/v2"|\/ginkgo\/v2/dsl/`)

	for _, file := range files {
		if !file.IsDir() && reTestFile.Match([]byte(file.Name())) {
			contents, _ := os.ReadFile(dir + "/" + file.Name())
			if reGinkgo.Match(contents) {
				return true
			}
		}
	}

	return false
}
07070100000933000081A4000000000000000000000001645E367C000007FF000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/utils.go package internal

import (
	"fmt"
	"io"
	"os"
	"os/exec"

	"github.com/onsi/ginkgo/v2/formatter"
	"github.com/onsi/ginkgo/v2/ginkgo/command"
)

func FileExists(path string) bool {
	_, err := os.Stat(path)
	return err == nil
}

func CopyFile(src string, dest string) error {
	srcFile, err := os.Open(src)
	if err != nil {
		return err
	}

	srcStat, err := srcFile.Stat()
	if err != nil {
		return err
	}

	if _, err := os.Stat(dest); err == nil {
		os.Remove(dest)
	}

	destFile, err := os.OpenFile(dest, os.O_WRONLY|os.O_CREATE, srcStat.Mode())
	if err != nil {
		return err
	}

	_, err = io.Copy(destFile, srcFile)
	if err != nil {
		return err
	}

	if err := srcFile.Close(); err != nil {
		return err
	}
	return destFile.Close()
}

func GoFmt(path string) {
	out, err := exec.Command("go", "fmt", path).CombinedOutput()
	if err != nil {
		command.AbortIfError(fmt.Sprintf("Could not fmt:\n%s\n", string(out)), err)
	}
}

func PluralizedWord(singular, plural string, count int) string {
	if count == 1 {
		return singular
	}
	return plural
}

func FailedSuitesReport(suites TestSuites, f formatter.Formatter) string {
	out := ""
	out += "There were failures detected in the following suites:\n"

	maxPackageNameLength := 0
	for _, suite := range suites.WithState(TestSuiteStateFailureStates...) {
		if len(suite.PackageName) > maxPackageNameLength {
			maxPackageNameLength = len(suite.PackageName)
		}
	}

	packageNameFormatter := fmt.Sprintf("%%%ds", maxPackageNameLength)
	for _, suite := range suites {
		switch suite.State {
		case TestSuiteStateFailed:
			out += f.Fi(1, "{{red}}"+packageNameFormatter+" {{gray}}%s{{/}}\n", suite.PackageName, suite.Path)
		case TestSuiteStateFailedToCompile:
			out += f.Fi(1, "{{red}}"+packageNameFormatter+" {{gray}}%s {{magenta}}[Compilation failure]{{/}}\n", suite.PackageName, suite.Path)
		case TestSuiteStateFailedDueToTimeout:
			out += f.Fi(1, "{{red}}"+packageNameFormatter+" {{gray}}%s {{orange}}[%s]{{/}}\n", suite.PackageName, suite.Path, TIMEOUT_ELAPSED_FAILURE_REASON)
		}
	}
	return out
}
 07070100000934000081A4000000000000000000000001645E367C0000088C000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/verify_version.go    package internal

import (
	"fmt"
	"os/exec"
	"regexp"
	"strings"

	"github.com/onsi/ginkgo/v2/formatter"
	"github.com/onsi/ginkgo/v2/types"
)

var versiorRe = regexp.MustCompile(`v(\d+\.\d+\.\d+)`)

func VerifyCLIAndFrameworkVersion(suites TestSuites) {
	cliVersion := types.VERSION
	mismatches := map[string][]string{}

	for _, suite := range suites {
		cmd := exec.Command("go", "list", "-m", "github.com/onsi/ginkgo/v2")
		cmd.Dir = suite.Path
		output, err := cmd.CombinedOutput()
		if err != nil {
			continue
		}
		components := strings.Split(string(output), " ")
		if len(components) != 2 {
			continue
		}
		matches := versiorRe.FindStringSubmatch(components[1])
		if matches == nil || len(matches) != 2 {
			continue
		}
		libraryVersion := matches[1]
		if cliVersion != libraryVersion {
			mismatches[libraryVersion] = append(mismatches[libraryVersion], suite.PackageName)
		}
	}

	if len(mismatches) == 0 {
		return
	}

	fmt.Println(formatter.F("{{red}}{{bold}}Ginkgo detected a version mismatch between the Ginkgo CLI and the version of Ginkgo imported by your packages:{{/}}"))

	fmt.Println(formatter.Fi(1, "Ginkgo CLI Version:"))
	fmt.Println(formatter.Fi(2, "{{bold}}%s{{/}}", cliVersion))
	fmt.Println(formatter.Fi(1, "Mismatched package versions found:"))
	for version, packages := range mismatches {
		fmt.Println(formatter.Fi(2, "{{bold}}%s{{/}} used by %s", version, strings.Join(packages, ", ")))
	}
	fmt.Println("")
	fmt.Println(formatter.Fiw(1, formatter.COLS, "{{gray}}Ginkgo will continue to attempt to run but you may see errors (including flag parsing errors) and should either update your go.mod or your version of the Ginkgo CLI to match.\n\nTo install the matching version of the CLI run\n  {{bold}}go install github.com/onsi/ginkgo/v2/ginkgo{{/}}{{gray}}\nfrom a path that contains a go.mod file.  Alternatively you can use\n  {{bold}}go run github.com/onsi/ginkgo/v2/ginkgo{{/}}{{gray}}\nfrom a path that contains a go.mod file to invoke the matching version of the Ginkgo CLI.\n\nIf you are attempting to test multiple packages that each have a different version of the Ginkgo library with a single Ginkgo CLI that is currently unsupported.\n{{/}}"))
}
07070100000935000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/labels    07070100000936000081A4000000000000000000000001645E367C00000B76000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/labels/labels_command.go  package labels

import (
	"fmt"
	"go/ast"
	"go/parser"
	"go/token"
	"sort"
	"strconv"
	"strings"

	"github.com/onsi/ginkgo/v2/ginkgo/command"
	"github.com/onsi/ginkgo/v2/ginkgo/internal"
	"github.com/onsi/ginkgo/v2/types"
	"golang.org/x/tools/go/ast/inspector"
)

func BuildLabelsCommand() command.Command {
	var cliConfig = types.NewDefaultCLIConfig()

	flags, err := types.BuildLabelsCommandFlagSet(&cliConfig)
	if err != nil {
		panic(err)
	}

	return command.Command{
		Name:     "labels",
		Usage:    "ginkgo labels <FLAGS> <PACKAGES>",
		Flags:    flags,
		ShortDoc: "List labels detected in the passed-in packages (or the package in the current directory if left blank).",
		DocLink:  "spec-labels",
		Command: func(args []string, _ []string) {
			ListLabels(args, cliConfig)
		},
	}
}

func ListLabels(args []string, cliConfig types.CLIConfig) {
	suites := internal.FindSuites(args, cliConfig, false).WithoutState(internal.TestSuiteStateSkippedByFilter)
	if len(suites) == 0 {
		command.AbortWith("Found no test suites")
	}
	for _, suite := range suites {
		labels := fetchLabelsFromPackage(suite.Path)
		if len(labels) == 0 {
			fmt.Printf("%s: No labels found\n", suite.PackageName)
		} else {
			fmt.Printf("%s: [%s]\n", suite.PackageName, strings.Join(labels, ", "))
		}
	}
}

func fetchLabelsFromPackage(packagePath string) []string {
	fset := token.NewFileSet()
	parsedPackages, err := parser.ParseDir(fset, packagePath, nil, 0)
	command.AbortIfError("Failed to parse package source:", err)

	files := []*ast.File{}
	hasTestPackage := false
	for key, pkg := range parsedPackages {
		if strings.HasSuffix(key, "_test") {
			hasTestPackage = true
			for _, file := range pkg.Files {
				files = append(files, file)
			}
		}
	}
	if !hasTestPackage {
		for _, pkg := range parsedPackages {
			for _, file := range pkg.Files {
				files = append(files, file)
			}
		}
	}

	seen := map[string]bool{}
	labels := []string{}
	ispr := inspector.New(files)
	ispr.Preorder([]ast.Node{&ast.CallExpr{}}, func(n ast.Node) {
		potentialLabels := fetchLabels(n.(*ast.CallExpr))
		for _, label := range potentialLabels {
			if !seen[label] {
				seen[label] = true
				labels = append(labels, strconv.Quote(label))
			}
		}
	})

	sort.Strings(labels)
	return labels
}

func fetchLabels(callExpr *ast.CallExpr) []string {
	out := []string{}
	switch expr := callExpr.Fun.(type) {
	case *ast.Ident:
		if expr.Name != "Label" {
			return out
		}
	case *ast.SelectorExpr:
		if expr.Sel.Name != "Label" {
			return out
		}
	default:
		return out
	}
	for _, arg := range callExpr.Args {
		switch expr := arg.(type) {
		case *ast.BasicLit:
			if expr.Kind == token.STRING {
				unquoted, err := strconv.Unquote(expr.Value)
				if err != nil {
					unquoted = expr.Value
				}
				validated, err := types.ValidateAndCleanupLabel(unquoted, types.CodeLocation{})
				if err == nil {
					out = append(out, validated)
				}
			}
		}
	}
	return out
}
  07070100000937000081A4000000000000000000000001645E367C00000604000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/main.go   package main

import (
	"fmt"
	"os"

	"github.com/onsi/ginkgo/v2/ginkgo/build"
	"github.com/onsi/ginkgo/v2/ginkgo/command"
	"github.com/onsi/ginkgo/v2/ginkgo/generators"
	"github.com/onsi/ginkgo/v2/ginkgo/labels"
	"github.com/onsi/ginkgo/v2/ginkgo/outline"
	"github.com/onsi/ginkgo/v2/ginkgo/run"
	"github.com/onsi/ginkgo/v2/ginkgo/unfocus"
	"github.com/onsi/ginkgo/v2/ginkgo/watch"
	"github.com/onsi/ginkgo/v2/types"
)

var program command.Program

func GenerateCommands() []command.Command {
	return []command.Command{
		watch.BuildWatchCommand(),
		build.BuildBuildCommand(),
		generators.BuildBootstrapCommand(),
		generators.BuildGenerateCommand(),
		labels.BuildLabelsCommand(),
		outline.BuildOutlineCommand(),
		unfocus.BuildUnfocusCommand(),
		BuildVersionCommand(),
	}
}

func main() {
	program = command.Program{
		Name:           "ginkgo",
		Heading:        fmt.Sprintf("Ginkgo Version %s", types.VERSION),
		Commands:       GenerateCommands(),
		DefaultCommand: run.BuildRunCommand(),
		DeprecatedCommands: []command.DeprecatedCommand{
			{Name: "convert", Deprecation: types.Deprecations.Convert()},
			{Name: "blur", Deprecation: types.Deprecations.Blur()},
			{Name: "nodot", Deprecation: types.Deprecations.Nodot()},
		},
	}

	program.RunAndExit(os.Args)
}

func BuildVersionCommand() command.Command {
	return command.Command{
		Name:     "version",
		Usage:    "ginkgo version",
		ShortDoc: "Print Ginkgo's version",
		Command: func(_ []string, _ []string) {
			fmt.Printf("Ginkgo Version %s\n", types.VERSION)
		},
	}
}
07070100000938000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline   07070100000939000081A4000000000000000000000001645E367C000021AE000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/ginkgo.go package outline

import (
	"github.com/onsi/ginkgo/v2/types"
	"go/ast"
	"go/token"
	"strconv"
)

const (
	// undefinedTextAlt is used if the spec/container text cannot be derived
	undefinedTextAlt = "undefined"
)

// ginkgoMetadata holds useful bits of information for every entry in the outline
type ginkgoMetadata struct {
	// Name is the spec or container function name, e.g. `Describe` or `It`
	Name string `json:"name"`

	// Text is the `text` argument passed to specs, and some containers
	Text string `json:"text"`

	// Start is the position of first character of the spec or container block
	Start int `json:"start"`

	// End is the position of first character immediately after the spec or container block
	End int `json:"end"`

	Spec    bool     `json:"spec"`
	Focused bool     `json:"focused"`
	Pending bool     `json:"pending"`
	Labels  []string `json:"labels"`
}

// ginkgoNode is used to construct the outline as a tree
type ginkgoNode struct {
	ginkgoMetadata
	Nodes []*ginkgoNode `json:"nodes"`
}

type walkFunc func(n *ginkgoNode)

func (n *ginkgoNode) PreOrder(f walkFunc) {
	f(n)
	for _, m := range n.Nodes {
		m.PreOrder(f)
	}
}

func (n *ginkgoNode) PostOrder(f walkFunc) {
	for _, m := range n.Nodes {
		m.PostOrder(f)
	}
	f(n)
}

func (n *ginkgoNode) Walk(pre, post walkFunc) {
	pre(n)
	for _, m := range n.Nodes {
		m.Walk(pre, post)
	}
	post(n)
}

// PropagateInheritedProperties propagates the Pending and Focused properties
// through the subtree rooted at n.
func (n *ginkgoNode) PropagateInheritedProperties() {
	n.PreOrder(func(thisNode *ginkgoNode) {
		for _, descendantNode := range thisNode.Nodes {
			if thisNode.Pending {
				descendantNode.Pending = true
				descendantNode.Focused = false
			}
			if thisNode.Focused && !descendantNode.Pending {
				descendantNode.Focused = true
			}
		}
	})
}

// BackpropagateUnfocus propagates the Focused property through the subtree
// rooted at n. It applies the rule described in the Ginkgo docs:
// > Nested programmatically focused specs follow a simple rule: if a
// > leaf-node is marked focused, any of its ancestor nodes that are marked
// > focus will be unfocused.
func (n *ginkgoNode) BackpropagateUnfocus() {
	focusedSpecInSubtreeStack := []bool{}
	n.PostOrder(func(thisNode *ginkgoNode) {
		if thisNode.Spec {
			focusedSpecInSubtreeStack = append(focusedSpecInSubtreeStack, thisNode.Focused)
			return
		}
		focusedSpecInSubtree := false
		for range thisNode.Nodes {
			focusedSpecInSubtree = focusedSpecInSubtree || focusedSpecInSubtreeStack[len(focusedSpecInSubtreeStack)-1]
			focusedSpecInSubtreeStack = focusedSpecInSubtreeStack[0 : len(focusedSpecInSubtreeStack)-1]
		}
		focusedSpecInSubtreeStack = append(focusedSpecInSubtreeStack, focusedSpecInSubtree)
		if focusedSpecInSubtree {
			thisNode.Focused = false
		}
	})

}

func packageAndIdentNamesFromCallExpr(ce *ast.CallExpr) (string, string, bool) {
	switch ex := ce.Fun.(type) {
	case *ast.Ident:
		return "", ex.Name, true
	case *ast.SelectorExpr:
		pkgID, ok := ex.X.(*ast.Ident)
		if !ok {
			return "", "", false
		}
		// A package identifier is top-level, so Obj must be nil
		if pkgID.Obj != nil {
			return "", "", false
		}
		if ex.Sel == nil {
			return "", "", false
		}
		return pkgID.Name, ex.Sel.Name, true
	default:
		return "", "", false
	}
}

// absoluteOffsetsForNode derives the absolute character offsets of the node start and
// end positions.
func absoluteOffsetsForNode(fset *token.FileSet, n ast.Node) (start, end int) {
	return fset.PositionFor(n.Pos(), false).Offset, fset.PositionFor(n.End(), false).Offset
}

// ginkgoNodeFromCallExpr derives an outline entry from a go AST subtree
// corresponding to a Ginkgo container or spec.
func ginkgoNodeFromCallExpr(fset *token.FileSet, ce *ast.CallExpr, ginkgoPackageName *string) (*ginkgoNode, bool) {
	packageName, identName, ok := packageAndIdentNamesFromCallExpr(ce)
	if !ok {
		return nil, false
	}

	n := ginkgoNode{}
	n.Name = identName
	n.Start, n.End = absoluteOffsetsForNode(fset, ce)
	n.Nodes = make([]*ginkgoNode, 0)
	switch identName {
	case "It", "Specify", "Entry":
		n.Spec = true
		n.Text = textOrAltFromCallExpr(ce, undefinedTextAlt)
		n.Labels = labelFromCallExpr(ce)
		n.Pending = pendingFromCallExpr(ce)
		return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName
	case "FIt", "FSpecify", "FEntry":
		n.Spec = true
		n.Focused = true
		n.Text = textOrAltFromCallExpr(ce, undefinedTextAlt)
		n.Labels = labelFromCallExpr(ce)
		return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName
	case "PIt", "PSpecify", "XIt", "XSpecify", "PEntry", "XEntry":
		n.Spec = true
		n.Pending = true
		n.Text = textOrAltFromCallExpr(ce, undefinedTextAlt)
		n.Labels = labelFromCallExpr(ce)
		return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName
	case "Context", "Describe", "When", "DescribeTable":
		n.Text = textOrAltFromCallExpr(ce, undefinedTextAlt)
		n.Labels = labelFromCallExpr(ce)
		n.Pending = pendingFromCallExpr(ce)
		return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName
	case "FContext", "FDescribe", "FWhen", "FDescribeTable":
		n.Focused = true
		n.Text = textOrAltFromCallExpr(ce, undefinedTextAlt)
		n.Labels = labelFromCallExpr(ce)
		return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName
	case "PContext", "PDescribe", "PWhen", "XContext", "XDescribe", "XWhen", "PDescribeTable", "XDescribeTable":
		n.Pending = true
		n.Text = textOrAltFromCallExpr(ce, undefinedTextAlt)
		n.Labels = labelFromCallExpr(ce)
		return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName
	case "By":
		n.Text = textOrAltFromCallExpr(ce, undefinedTextAlt)
		return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName
	case "AfterEach", "BeforeEach":
		return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName
	case "JustAfterEach", "JustBeforeEach":
		return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName
	case "AfterSuite", "BeforeSuite":
		return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName
	case "SynchronizedAfterSuite", "SynchronizedBeforeSuite":
		return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName
	default:
		return nil, false
	}
}

// textOrAltFromCallExpr tries to derive the "text" of a Ginkgo spec or
// container. If it cannot derive it, it returns the alt text.
func textOrAltFromCallExpr(ce *ast.CallExpr, alt string) string {
	text, defined := textFromCallExpr(ce)
	if !defined {
		return alt
	}
	return text
}

// textFromCallExpr tries to derive the "text" of a Ginkgo spec or container. If
// it cannot derive it, it returns false.
func textFromCallExpr(ce *ast.CallExpr) (string, bool) {
	if len(ce.Args) < 1 {
		return "", false
	}
	text, ok := ce.Args[0].(*ast.BasicLit)
	if !ok {
		return "", false
	}
	switch text.Kind {
	case token.CHAR, token.STRING:
		// For token.CHAR and token.STRING, Value is quoted
		unquoted, err := strconv.Unquote(text.Value)
		if err != nil {
			// If unquoting fails, just use the raw Value
			return text.Value, true
		}
		return unquoted, true
	default:
		return text.Value, true
	}
}

func labelFromCallExpr(ce *ast.CallExpr) []string {

	labels := []string{}
	if len(ce.Args) < 2 {
		return labels
	}

	for _, arg := range ce.Args[1:] {
		switch expr := arg.(type) {
		case *ast.CallExpr:
			id, ok := expr.Fun.(*ast.Ident)
			if !ok {
				// to skip over cases where the expr.Fun. is actually *ast.SelectorExpr
				continue
			}
			if id.Name == "Label" {
				ls := extractLabels(expr)
				for _, label := range ls {
					labels = append(labels, label)
				}
			}
		}
	}
	return labels
}

func extractLabels(expr *ast.CallExpr) []string {
	out := []string{}
	for _, arg := range expr.Args {
		switch expr := arg.(type) {
		case *ast.BasicLit:
			if expr.Kind == token.STRING {
				unquoted, err := strconv.Unquote(expr.Value)
				if err != nil {
					unquoted = expr.Value
				}
				validated, err := types.ValidateAndCleanupLabel(unquoted, types.CodeLocation{})
				if err == nil {
					out = append(out, validated)
				}
			}
		}
	}

	return out
}

func pendingFromCallExpr(ce *ast.CallExpr) bool {

	pending := false
	if len(ce.Args) < 2 {
		return pending
	}

	for _, arg := range ce.Args[1:] {
		switch expr := arg.(type) {
		case *ast.CallExpr:
			id, ok := expr.Fun.(*ast.Ident)
			if !ok {
				// to skip over cases where the expr.Fun. is actually *ast.SelectorExpr
				continue
			}
			if id.Name == "Pending" {
				pending = true
			}
		case *ast.Ident:
			if expr.Name == "Pending" {
				pending = true
			}
		}
	}
	return pending
}
  0707010000093A000081A4000000000000000000000001645E367C00000714000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/import.go // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Most of the required functions were available in the
// "golang.org/x/tools/go/ast/astutil" package, but not exported.
// They were copied from https://github.com/golang/tools/blob/2b0845dc783e36ae26d683f4915a5840ef01ab0f/go/ast/astutil/imports.go

package outline

import (
	"go/ast"
	"strconv"
	"strings"
)

// packageNameForImport returns the package name for the package. If the package
// is not imported, it returns nil. "Package name" refers to `pkgname` in the
// call expression `pkgname.ExportedIdentifier`. Examples:
// (import path not found) -> nil
// "import example.com/pkg/foo" -> "foo"
// "import fooalias example.com/pkg/foo" -> "fooalias"
// "import . example.com/pkg/foo" -> ""
func packageNameForImport(f *ast.File, path string) *string {
	spec := importSpec(f, path)
	if spec == nil {
		return nil
	}
	name := spec.Name.String()
	if name == "<nil>" {
		// If the package name is not explicitly specified,
		// make an educated guess. This is not guaranteed to be correct.
		lastSlash := strings.LastIndex(path, "/")
		if lastSlash == -1 {
			name = path
		} else {
			name = path[lastSlash+1:]
		}
	}
	if name == "." {
		name = ""
	}
	return &name
}

// importSpec returns the import spec if f imports path,
// or nil otherwise.
func importSpec(f *ast.File, path string) *ast.ImportSpec {
	for _, s := range f.Imports {
		if strings.HasPrefix(importPath(s), path) {
			return s
		}
	}
	return nil
}

// importPath returns the unquoted import path of s,
// or "" if the path is not properly quoted.
func importPath(s *ast.ImportSpec) string {
	t, err := strconv.Unquote(s.Path.Value)
	if err != nil {
		return ""
	}
	return t
}
0707010000093B000081A4000000000000000000000001645E367C00000CEB000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/outline.go    package outline

import (
	"encoding/json"
	"fmt"
	"go/ast"
	"go/token"
	"strings"

	"golang.org/x/tools/go/ast/inspector"
)

const (
	// ginkgoImportPath is the well-known ginkgo import path
	ginkgoImportPath = "github.com/onsi/ginkgo/v2"
)

// FromASTFile returns an outline for a Ginkgo test source file
func FromASTFile(fset *token.FileSet, src *ast.File) (*outline, error) {
	ginkgoPackageName := packageNameForImport(src, ginkgoImportPath)
	if ginkgoPackageName == nil {
		return nil, fmt.Errorf("file does not import %q", ginkgoImportPath)
	}

	root := ginkgoNode{}
	stack := []*ginkgoNode{&root}
	ispr := inspector.New([]*ast.File{src})
	ispr.Nodes([]ast.Node{(*ast.CallExpr)(nil)}, func(node ast.Node, push bool) bool {
		if push {
			// Pre-order traversal
			ce, ok := node.(*ast.CallExpr)
			if !ok {
				// Because `Nodes` calls this function only when the node is an
				// ast.CallExpr, this should never happen
				panic(fmt.Errorf("node starting at %d, ending at %d is not an *ast.CallExpr", node.Pos(), node.End()))
			}
			gn, ok := ginkgoNodeFromCallExpr(fset, ce, ginkgoPackageName)
			if !ok {
				// Node is not a Ginkgo spec or container, continue
				return true
			}
			parent := stack[len(stack)-1]
			parent.Nodes = append(parent.Nodes, gn)
			stack = append(stack, gn)
			return true
		}
		// Post-order traversal
		start, end := absoluteOffsetsForNode(fset, node)
		lastVisitedGinkgoNode := stack[len(stack)-1]
		if start != lastVisitedGinkgoNode.Start || end != lastVisitedGinkgoNode.End {
			// Node is not a Ginkgo spec or container, so it was not pushed onto the stack, continue
			return true
		}
		stack = stack[0 : len(stack)-1]
		return true
	})
	if len(root.Nodes) == 0 {
		return &outline{[]*ginkgoNode{}}, nil
	}

	// Derive the final focused property for all nodes. This must be done
	// _before_ propagating the inherited focused property.
	root.BackpropagateUnfocus()
	// Now, propagate inherited properties, including focused and pending.
	root.PropagateInheritedProperties()

	return &outline{root.Nodes}, nil
}

type outline struct {
	Nodes []*ginkgoNode `json:"nodes"`
}

func (o *outline) MarshalJSON() ([]byte, error) {
	return json.Marshal(o.Nodes)
}

// String returns a CSV-formatted outline. Spec or container are output in
// depth-first order.
func (o *outline) String() string {
	return o.StringIndent(0)
}

// StringIndent returns a CSV-formated outline, but every line is indented by
// one 'width' of spaces for every level of nesting.
func (o *outline) StringIndent(width int) string {
	var b strings.Builder
	b.WriteString("Name,Text,Start,End,Spec,Focused,Pending,Labels\n")

	currentIndent := 0
	pre := func(n *ginkgoNode) {
		b.WriteString(fmt.Sprintf("%*s", currentIndent, ""))
		var labels string
		if len(n.Labels) == 1 {
			labels = n.Labels[0]
		} else {
			labels = strings.Join(n.Labels, ", ")
		}
		//enclosing labels in a double quoted comma separate listed so that when inmported into a CSV app the Labels column has comma separate strings
		b.WriteString(fmt.Sprintf("%s,%s,%d,%d,%t,%t,%t,\"%s\"\n", n.Name, n.Text, n.Start, n.End, n.Spec, n.Focused, n.Pending, labels))
		currentIndent += width
	}
	post := func(n *ginkgoNode) {
		currentIndent -= width
	}
	for _, n := range o.Nodes {
		n.Walk(pre, post)
	}
	return b.String()
}
 0707010000093C000081A4000000000000000000000001645E367C000008E1000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/outline_command.go    package outline

import (
	"encoding/json"
	"fmt"
	"go/parser"
	"go/token"
	"os"

	"github.com/onsi/ginkgo/v2/ginkgo/command"
	"github.com/onsi/ginkgo/v2/types"
)

const (
	// indentWidth is the width used by the 'indent' output
	indentWidth = 4
	// stdinAlias is a portable alias for stdin. This convention is used in
	// other CLIs, e.g., kubectl.
	stdinAlias   = "-"
	usageCommand = "ginkgo outline <filename>"
)

type outlineConfig struct {
	Format string
}

func BuildOutlineCommand() command.Command {
	conf := outlineConfig{
		Format: "csv",
	}
	flags, err := types.NewGinkgoFlagSet(
		types.GinkgoFlags{
			{Name: "format", KeyPath: "Format",
				Usage:             "Format of outline",
				UsageArgument:     "one of 'csv', 'indent', or 'json'",
				UsageDefaultValue: conf.Format,
			},
		},
		&conf,
		types.GinkgoFlagSections{},
	)
	if err != nil {
		panic(err)
	}

	return command.Command{
		Name:          "outline",
		Usage:         "ginkgo outline <filename>",
		ShortDoc:      "Create an outline of Ginkgo symbols for a file",
		Documentation: "To read from stdin, use: `ginkgo outline -`",
		DocLink:       "creating-an-outline-of-specs",
		Flags:         flags,
		Command: func(args []string, _ []string) {
			outlineFile(args, conf.Format)
		},
	}
}

func outlineFile(args []string, format string) {
	if len(args) != 1 {
		command.AbortWithUsage("outline expects exactly one argument")
	}

	filename := args[0]
	var src *os.File
	if filename == stdinAlias {
		src = os.Stdin
	} else {
		var err error
		src, err = os.Open(filename)
		command.AbortIfError("Failed to open file:", err)
	}

	fset := token.NewFileSet()

	parsedSrc, err := parser.ParseFile(fset, filename, src, 0)
	command.AbortIfError("Failed to parse source:", err)

	o, err := FromASTFile(fset, parsedSrc)
	command.AbortIfError("Failed to create outline:", err)

	var oerr error
	switch format {
	case "csv":
		_, oerr = fmt.Print(o)
	case "indent":
		_, oerr = fmt.Print(o.StringIndent(indentWidth))
	case "json":
		b, err := json.Marshal(o)
		if err != nil {
			println(fmt.Sprintf("error marshalling to json: %s", err))
		}
		_, oerr = fmt.Println(string(b))
	default:
		command.AbortWith("Format %s not accepted", format)
	}
	command.AbortIfError("Failed to write outline:", oerr)
}
   0707010000093D000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/run   0707010000093E000081A4000000000000000000000001645E367C00001CD3000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/run/run_command.go    package run

import (
	"fmt"
	"os"
	"strings"
	"time"

	"github.com/onsi/ginkgo/v2/formatter"
	"github.com/onsi/ginkgo/v2/ginkgo/command"
	"github.com/onsi/ginkgo/v2/ginkgo/internal"
	"github.com/onsi/ginkgo/v2/internal/interrupt_handler"
	"github.com/onsi/ginkgo/v2/types"
)

func BuildRunCommand() command.Command {
	var suiteConfig = types.NewDefaultSuiteConfig()
	var reporterConfig = types.NewDefaultReporterConfig()
	var cliConfig = types.NewDefaultCLIConfig()
	var goFlagsConfig = types.NewDefaultGoFlagsConfig()

	flags, err := types.BuildRunCommandFlagSet(&suiteConfig, &reporterConfig, &cliConfig, &goFlagsConfig)
	if err != nil {
		panic(err)
	}

	interruptHandler := interrupt_handler.NewInterruptHandler(nil)
	interrupt_handler.SwallowSigQuit()

	return command.Command{
		Name:          "run",
		Flags:         flags,
		Usage:         "ginkgo run <FLAGS> <PACKAGES> -- <PASS-THROUGHS>",
		ShortDoc:      "Run the tests in the passed in <PACKAGES> (or the package in the current directory if left blank)",
		Documentation: "Any arguments after -- will be passed to the test.",
		DocLink:       "running-tests",
		Command: func(args []string, additionalArgs []string) {
			var errors []error
			cliConfig, goFlagsConfig, errors = types.VetAndInitializeCLIAndGoConfig(cliConfig, goFlagsConfig)
			command.AbortIfErrors("Ginkgo detected configuration issues:", errors)

			runner := &SpecRunner{
				cliConfig:      cliConfig,
				goFlagsConfig:  goFlagsConfig,
				suiteConfig:    suiteConfig,
				reporterConfig: reporterConfig,
				flags:          flags,

				interruptHandler: interruptHandler,
			}

			runner.RunSpecs(args, additionalArgs)
		},
	}
}

type SpecRunner struct {
	suiteConfig    types.SuiteConfig
	reporterConfig types.ReporterConfig
	cliConfig      types.CLIConfig
	goFlagsConfig  types.GoFlagsConfig
	flags          types.GinkgoFlagSet

	interruptHandler *interrupt_handler.InterruptHandler
}

func (r *SpecRunner) RunSpecs(args []string, additionalArgs []string) {
	suites := internal.FindSuites(args, r.cliConfig, true)
	skippedSuites := suites.WithState(internal.TestSuiteStateSkippedByFilter)
	suites = suites.WithoutState(internal.TestSuiteStateSkippedByFilter)

	internal.VerifyCLIAndFrameworkVersion(suites)

	if len(skippedSuites) > 0 {
		fmt.Println("Will skip:")
		for _, skippedSuite := range skippedSuites {
			fmt.Println("  " + skippedSuite.Path)
		}
	}

	if len(skippedSuites) > 0 && len(suites) == 0 {
		command.AbortGracefullyWith("All tests skipped! Exiting...")
	}

	if len(suites) == 0 {
		command.AbortWith("Found no test suites")
	}

	if len(suites) > 1 && !r.flags.WasSet("succinct") && r.reporterConfig.Verbosity().LT(types.VerbosityLevelVerbose) {
		r.reporterConfig.Succinct = true
	}

	t := time.Now()
	var endTime time.Time
	if r.suiteConfig.Timeout > 0 {
		endTime = t.Add(r.suiteConfig.Timeout)
	}

	iteration := 0
OUTER_LOOP:
	for {
		if !r.flags.WasSet("seed") {
			r.suiteConfig.RandomSeed = time.Now().Unix()
		}
		if r.cliConfig.RandomizeSuites && len(suites) > 1 {
			suites = suites.ShuffledCopy(r.suiteConfig.RandomSeed)
		}

		opc := internal.NewOrderedParallelCompiler(r.cliConfig.ComputedNumCompilers())
		opc.StartCompiling(suites, r.goFlagsConfig)

	SUITE_LOOP:
		for {
			suiteIdx, suite := opc.Next()
			if suiteIdx >= len(suites) {
				break SUITE_LOOP
			}
			suites[suiteIdx] = suite

			if r.interruptHandler.Status().Interrupted() {
				opc.StopAndDrain()
				break OUTER_LOOP
			}

			if suites[suiteIdx].State.Is(internal.TestSuiteStateSkippedDueToEmptyCompilation) {
				fmt.Printf("Skipping %s (no test files)\n", suite.Path)
				continue SUITE_LOOP
			}

			if suites[suiteIdx].State.Is(internal.TestSuiteStateFailedToCompile) {
				fmt.Println(suites[suiteIdx].CompilationError.Error())
				if !r.cliConfig.KeepGoing {
					opc.StopAndDrain()
				}
				continue SUITE_LOOP
			}

			if suites.CountWithState(internal.TestSuiteStateFailureStates...) > 0 && !r.cliConfig.KeepGoing {
				suites[suiteIdx].State = internal.TestSuiteStateSkippedDueToPriorFailures
				opc.StopAndDrain()
				continue SUITE_LOOP
			}

			if !endTime.IsZero() {
				r.suiteConfig.Timeout = endTime.Sub(time.Now())
				if r.suiteConfig.Timeout <= 0 {
					suites[suiteIdx].State = internal.TestSuiteStateFailedDueToTimeout
					opc.StopAndDrain()
					continue SUITE_LOOP
				}
			}

			suites[suiteIdx] = internal.RunCompiledSuite(suites[suiteIdx], r.suiteConfig, r.reporterConfig, r.cliConfig, r.goFlagsConfig, additionalArgs)
		}

		if suites.CountWithState(internal.TestSuiteStateFailureStates...) > 0 {
			if iteration > 0 {
				fmt.Printf("\nTests failed on attempt #%d\n\n", iteration+1)
			}
			break OUTER_LOOP
		}

		if r.cliConfig.UntilItFails {
			fmt.Printf("\nAll tests passed...\nWill keep running them until they fail.\nThis was attempt #%d\n%s\n", iteration+1, orcMessage(iteration+1))
		} else if r.cliConfig.Repeat > 0 && iteration < r.cliConfig.Repeat {
			fmt.Printf("\nAll tests passed...\nThis was attempt %d of %d.\n", iteration+1, r.cliConfig.Repeat+1)
		} else {
			break OUTER_LOOP
		}
		iteration += 1
	}

	internal.Cleanup(r.goFlagsConfig, suites...)

	messages, err := internal.FinalizeProfilesAndReportsForSuites(suites, r.cliConfig, r.suiteConfig, r.reporterConfig, r.goFlagsConfig)
	command.AbortIfError("could not finalize profiles:", err)
	for _, message := range messages {
		fmt.Println(message)
	}

	fmt.Printf("\nGinkgo ran %d %s in %s\n", len(suites), internal.PluralizedWord("suite", "suites", len(suites)), time.Since(t))

	if suites.CountWithState(internal.TestSuiteStateFailureStates...) == 0 {
		if suites.AnyHaveProgrammaticFocus() && strings.TrimSpace(os.Getenv("GINKGO_EDITOR_INTEGRATION")) == "" {
			fmt.Printf("Test Suite Passed\n")
			fmt.Printf("Detected Programmatic Focus - setting exit status to %d\n", types.GINKGO_FOCUS_EXIT_CODE)
			command.Abort(command.AbortDetails{ExitCode: types.GINKGO_FOCUS_EXIT_CODE})
		} else {
			fmt.Printf("Test Suite Passed\n")
			command.Abort(command.AbortDetails{})
		}
	} else {
		fmt.Fprintln(formatter.ColorableStdOut, "")
		if len(suites) > 1 && suites.CountWithState(internal.TestSuiteStateFailureStates...) > 0 {
			fmt.Fprintln(formatter.ColorableStdOut,
				internal.FailedSuitesReport(suites, formatter.NewWithNoColorBool(r.reporterConfig.NoColor)))
		}
		fmt.Printf("Test Suite Failed\n")
		command.Abort(command.AbortDetails{ExitCode: 1})
	}
}

func orcMessage(iteration int) string {
	if iteration < 10 {
		return ""
	} else if iteration < 30 {
		return []string{
			"If at first you succeed...",
			"...try, try again.",
			"Looking good!",
			"Still good...",
			"I think your tests are fine....",
			"Yep, still passing",
			"Oh boy, here I go testin' again!",
			"Even the gophers are getting bored",
			"Did you try -race?",
			"Maybe you should stop now?",
			"I'm getting tired...",
			"What if I just made you a sandwich?",
			"Hit ^C, hit ^C, please hit ^C",
			"Make it stop. Please!",
			"Come on!  Enough is enough!",
			"Dave, this conversation can serve no purpose anymore. Goodbye.",
			"Just what do you think you're doing, Dave? ",
			"I, Sisyphus",
			"Insanity: doing the same thing over and over again and expecting different results. -Einstein",
			"I guess Einstein never tried to churn butter",
		}[iteration-10] + "\n"
	} else {
		return "No, seriously... you can probably stop now.\n"
	}
}
 0707010000093F000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/unfocus   07070100000940000081A4000000000000000000000001645E367C00000FFF000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/unfocus/unfocus_command.go    package unfocus

import (
	"bytes"
	"fmt"
	"go/ast"
	"go/parser"
	"go/token"
	"io"
	"os"
	"path/filepath"
	"strings"
	"sync"

	"github.com/onsi/ginkgo/v2/ginkgo/command"
)

func BuildUnfocusCommand() command.Command {
	return command.Command{
		Name:     "unfocus",
		Usage:    "ginkgo unfocus",
		ShortDoc: "Recursively unfocus any focused tests under the current directory",
		DocLink:  "filtering-specs",
		Command: func(_ []string, _ []string) {
			unfocusSpecs()
		},
	}
}

func unfocusSpecs() {
	fmt.Println("Scanning for focus...")

	goFiles := make(chan string)
	go func() {
		unfocusDir(goFiles, ".")
		close(goFiles)
	}()

	const workers = 10
	wg := sync.WaitGroup{}
	wg.Add(workers)

	for i := 0; i < workers; i++ {
		go func() {
			for path := range goFiles {
				unfocusFile(path)
			}
			wg.Done()
		}()
	}

	wg.Wait()
}

func unfocusDir(goFiles chan string, path string) {
	files, err := os.ReadDir(path)
	if err != nil {
		fmt.Println(err.Error())
		return
	}

	for _, f := range files {
		switch {
		case f.IsDir() && shouldProcessDir(f.Name()):
			unfocusDir(goFiles, filepath.Join(path, f.Name()))
		case !f.IsDir() && shouldProcessFile(f.Name()):
			goFiles <- filepath.Join(path, f.Name())
		}
	}
}

func shouldProcessDir(basename string) bool {
	return basename != "vendor" && !strings.HasPrefix(basename, ".")
}

func shouldProcessFile(basename string) bool {
	return strings.HasSuffix(basename, ".go")
}

func unfocusFile(path string) {
	data, err := os.ReadFile(path)
	if err != nil {
		fmt.Printf("error reading file '%s': %s\n", path, err.Error())
		return
	}

	ast, err := parser.ParseFile(token.NewFileSet(), path, bytes.NewReader(data), parser.ParseComments)
	if err != nil {
		fmt.Printf("error parsing file '%s': %s\n", path, err.Error())
		return
	}

	eliminations := scanForFocus(ast)
	if len(eliminations) == 0 {
		return
	}

	fmt.Printf("...updating %s\n", path)
	backup, err := writeBackup(path, data)
	if err != nil {
		fmt.Printf("error creating backup file: %s\n", err.Error())
		return
	}

	if err := updateFile(path, data, eliminations); err != nil {
		fmt.Printf("error writing file '%s': %s\n", path, err.Error())
		return
	}

	os.Remove(backup)
}

func writeBackup(path string, data []byte) (string, error) {
	t, err := os.CreateTemp(filepath.Dir(path), filepath.Base(path))

	if err != nil {
		return "", fmt.Errorf("error creating temporary file: %w", err)
	}
	defer t.Close()

	if _, err := io.Copy(t, bytes.NewReader(data)); err != nil {
		return "", fmt.Errorf("error writing to temporary file: %w", err)
	}

	return t.Name(), nil
}

func updateFile(path string, data []byte, eliminations [][]int64) error {
	to, err := os.Create(path)
	if err != nil {
		return fmt.Errorf("error opening file for writing '%s': %w\n", path, err)
	}
	defer to.Close()

	from := bytes.NewReader(data)
	var cursor int64
	for _, eliminationRange := range eliminations {
		positionToEliminate, lengthToEliminate := eliminationRange[0]-1, eliminationRange[1]
		if _, err := io.CopyN(to, from, positionToEliminate-cursor); err != nil {
			return fmt.Errorf("error copying data: %w", err)
		}

		cursor = positionToEliminate + lengthToEliminate

		if _, err := from.Seek(lengthToEliminate, io.SeekCurrent); err != nil {
			return fmt.Errorf("error seeking to position in buffer: %w", err)
		}
	}

	if _, err := io.Copy(to, from); err != nil {
		return fmt.Errorf("error copying end data: %w", err)
	}

	return nil
}

func scanForFocus(file *ast.File) (eliminations [][]int64) {
	ast.Inspect(file, func(n ast.Node) bool {
		if c, ok := n.(*ast.CallExpr); ok {
			if i, ok := c.Fun.(*ast.Ident); ok {
				if isFocus(i.Name) {
					eliminations = append(eliminations, []int64{int64(i.Pos()), 1})
				}
			}
		}

		if i, ok := n.(*ast.Ident); ok {
			if i.Name == "Focus" {
				eliminations = append(eliminations, []int64{int64(i.Pos()), 6})
			}
		}

		return true
	})

	return eliminations
}

func isFocus(name string) bool {
	switch name {
	case "FDescribe", "FContext", "FIt", "FDescribeTable", "FEntry", "FSpecify", "FWhen":
		return true
	default:
		return false
	}
}
 07070100000941000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch 07070100000942000081A4000000000000000000000001645E367C00000216000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/delta.go    package watch

import "sort"

type Delta struct {
	ModifiedPackages []string

	NewSuites      []*Suite
	RemovedSuites  []*Suite
	modifiedSuites []*Suite
}

type DescendingByDelta []*Suite

func (a DescendingByDelta) Len() int           { return len(a) }
func (a DescendingByDelta) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
func (a DescendingByDelta) Less(i, j int) bool { return a[i].Delta() > a[j].Delta() }

func (d Delta) ModifiedSuites() []*Suite {
	sort.Sort(DescendingByDelta(d.modifiedSuites))
	return d.modifiedSuites
}
  07070100000943000081A4000000000000000000000001645E367C00000696000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/delta_tracker.go    package watch

import (
	"fmt"

	"regexp"

	"github.com/onsi/ginkgo/v2/ginkgo/internal"
)

type SuiteErrors map[internal.TestSuite]error

type DeltaTracker struct {
	maxDepth      int
	watchRegExp   *regexp.Regexp
	suites        map[string]*Suite
	packageHashes *PackageHashes
}

func NewDeltaTracker(maxDepth int, watchRegExp *regexp.Regexp) *DeltaTracker {
	return &DeltaTracker{
		maxDepth:      maxDepth,
		watchRegExp:   watchRegExp,
		packageHashes: NewPackageHashes(watchRegExp),
		suites:        map[string]*Suite{},
	}
}

func (d *DeltaTracker) Delta(suites internal.TestSuites) (delta Delta, errors SuiteErrors) {
	errors = SuiteErrors{}
	delta.ModifiedPackages = d.packageHashes.CheckForChanges()

	providedSuitePaths := map[string]bool{}
	for _, suite := range suites {
		providedSuitePaths[suite.Path] = true
	}

	d.packageHashes.StartTrackingUsage()

	for _, suite := range d.suites {
		if providedSuitePaths[suite.Suite.Path] {
			if suite.Delta() > 0 {
				delta.modifiedSuites = append(delta.modifiedSuites, suite)
			}
		} else {
			delta.RemovedSuites = append(delta.RemovedSuites, suite)
		}
	}

	d.packageHashes.StopTrackingUsageAndPrune()

	for _, suite := range suites {
		_, ok := d.suites[suite.Path]
		if !ok {
			s, err := NewSuite(suite, d.maxDepth, d.packageHashes)
			if err != nil {
				errors[suite] = err
				continue
			}
			d.suites[suite.Path] = s
			delta.NewSuites = append(delta.NewSuites, s)
		}
	}

	return delta, errors
}

func (d *DeltaTracker) WillRun(suite internal.TestSuite) error {
	s, ok := d.suites[suite.Path]
	if !ok {
		return fmt.Errorf("unknown suite %s", suite.Path)
	}

	return s.MarkAsRunAndRecomputedDependencies(d.maxDepth)
}
  07070100000944000081A4000000000000000000000001645E367C0000076F000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/dependencies.go package watch

import (
	"go/build"
	"regexp"
)

var ginkgoAndGomegaFilter = regexp.MustCompile(`github\.com/onsi/ginkgo|github\.com/onsi/gomega`)
var ginkgoIntegrationTestFilter = regexp.MustCompile(`github\.com/onsi/ginkgo/integration`) //allow us to integration test this thing

type Dependencies struct {
	deps map[string]int
}

func NewDependencies(path string, maxDepth int) (Dependencies, error) {
	d := Dependencies{
		deps: map[string]int{},
	}

	if maxDepth == 0 {
		return d, nil
	}

	err := d.seedWithDepsForPackageAtPath(path)
	if err != nil {
		return d, err
	}

	for depth := 1; depth < maxDepth; depth++ {
		n := len(d.deps)
		d.addDepsForDepth(depth)
		if n == len(d.deps) {
			break
		}
	}

	return d, nil
}

func (d Dependencies) Dependencies() map[string]int {
	return d.deps
}

func (d Dependencies) seedWithDepsForPackageAtPath(path string) error {
	pkg, err := build.ImportDir(path, 0)
	if err != nil {
		return err
	}

	d.resolveAndAdd(pkg.Imports, 1)
	d.resolveAndAdd(pkg.TestImports, 1)
	d.resolveAndAdd(pkg.XTestImports, 1)

	delete(d.deps, pkg.Dir)
	return nil
}

func (d Dependencies) addDepsForDepth(depth int) {
	for dep, depDepth := range d.deps {
		if depDepth == depth {
			d.addDepsForDep(dep, depth+1)
		}
	}
}

func (d Dependencies) addDepsForDep(dep string, depth int) {
	pkg, err := build.ImportDir(dep, 0)
	if err != nil {
		println(err.Error())
		return
	}
	d.resolveAndAdd(pkg.Imports, depth)
}

func (d Dependencies) resolveAndAdd(deps []string, depth int) {
	for _, dep := range deps {
		pkg, err := build.Import(dep, ".", 0)
		if err != nil {
			continue
		}
		if !pkg.Goroot && (!ginkgoAndGomegaFilter.Match([]byte(pkg.Dir)) || ginkgoIntegrationTestFilter.Match([]byte(pkg.Dir))) {
			d.addDepIfNotPresent(pkg.Dir, depth)
		}
	}
}

func (d Dependencies) addDepIfNotPresent(dep string, depth int) {
	_, ok := d.deps[dep]
	if !ok {
		d.deps[dep] = depth
	}
}
 07070100000945000081A4000000000000000000000001645E367C0000083F000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/package_hash.go package watch

import (
	"fmt"
	"os"
	"regexp"
	"time"
)

var goTestRegExp = regexp.MustCompile(`_test\.go$`)

type PackageHash struct {
	CodeModifiedTime time.Time
	TestModifiedTime time.Time
	Deleted          bool

	path        string
	codeHash    string
	testHash    string
	watchRegExp *regexp.Regexp
}

func NewPackageHash(path string, watchRegExp *regexp.Regexp) *PackageHash {
	p := &PackageHash{
		path:        path,
		watchRegExp: watchRegExp,
	}

	p.codeHash, _, p.testHash, _, p.Deleted = p.computeHashes()

	return p
}

func (p *PackageHash) CheckForChanges() bool {
	codeHash, codeModifiedTime, testHash, testModifiedTime, deleted := p.computeHashes()

	if deleted {
		if !p.Deleted {
			t := time.Now()
			p.CodeModifiedTime = t
			p.TestModifiedTime = t
		}
		p.Deleted = true
		return true
	}

	modified := false
	p.Deleted = false

	if p.codeHash != codeHash {
		p.CodeModifiedTime = codeModifiedTime
		modified = true
	}
	if p.testHash != testHash {
		p.TestModifiedTime = testModifiedTime
		modified = true
	}

	p.codeHash = codeHash
	p.testHash = testHash
	return modified
}

func (p *PackageHash) computeHashes() (codeHash string, codeModifiedTime time.Time, testHash string, testModifiedTime time.Time, deleted bool) {
	entries, err := os.ReadDir(p.path)

	if err != nil {
		deleted = true
		return
	}

	for _, entry := range entries {
		if entry.IsDir() {
			continue
		}

		info, err := entry.Info()
		if err != nil {
			continue
		}

		if goTestRegExp.Match([]byte(info.Name())) {
			testHash += p.hashForFileInfo(info)
			if info.ModTime().After(testModifiedTime) {
				testModifiedTime = info.ModTime()
			}
			continue
		}

		if p.watchRegExp.Match([]byte(info.Name())) {
			codeHash += p.hashForFileInfo(info)
			if info.ModTime().After(codeModifiedTime) {
				codeModifiedTime = info.ModTime()
			}
		}
	}

	testHash += codeHash
	if codeModifiedTime.After(testModifiedTime) {
		testModifiedTime = codeModifiedTime
	}

	return
}

func (p *PackageHash) hashForFileInfo(info os.FileInfo) string {
	return fmt.Sprintf("%s_%d_%d", info.Name(), info.Size(), info.ModTime().UnixNano())
}
 07070100000946000081A4000000000000000000000001645E367C0000063D000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/package_hashes.go   package watch

import (
	"path/filepath"
	"regexp"
	"sync"
)

type PackageHashes struct {
	PackageHashes map[string]*PackageHash
	usedPaths     map[string]bool
	watchRegExp   *regexp.Regexp
	lock          *sync.Mutex
}

func NewPackageHashes(watchRegExp *regexp.Regexp) *PackageHashes {
	return &PackageHashes{
		PackageHashes: map[string]*PackageHash{},
		usedPaths:     nil,
		watchRegExp:   watchRegExp,
		lock:          &sync.Mutex{},
	}
}

func (p *PackageHashes) CheckForChanges() []string {
	p.lock.Lock()
	defer p.lock.Unlock()

	modified := []string{}

	for _, packageHash := range p.PackageHashes {
		if packageHash.CheckForChanges() {
			modified = append(modified, packageHash.path)
		}
	}

	return modified
}

func (p *PackageHashes) Add(path string) *PackageHash {
	p.lock.Lock()
	defer p.lock.Unlock()

	path, _ = filepath.Abs(path)
	_, ok := p.PackageHashes[path]
	if !ok {
		p.PackageHashes[path] = NewPackageHash(path, p.watchRegExp)
	}

	if p.usedPaths != nil {
		p.usedPaths[path] = true
	}
	return p.PackageHashes[path]
}

func (p *PackageHashes) Get(path string) *PackageHash {
	p.lock.Lock()
	defer p.lock.Unlock()

	path, _ = filepath.Abs(path)
	if p.usedPaths != nil {
		p.usedPaths[path] = true
	}
	return p.PackageHashes[path]
}

func (p *PackageHashes) StartTrackingUsage() {
	p.lock.Lock()
	defer p.lock.Unlock()

	p.usedPaths = map[string]bool{}
}

func (p *PackageHashes) StopTrackingUsageAndPrune() {
	p.lock.Lock()
	defer p.lock.Unlock()

	for path := range p.PackageHashes {
		if !p.usedPaths[path] {
			delete(p.PackageHashes, path)
		}
	}

	p.usedPaths = nil
}
   07070100000947000081A4000000000000000000000001645E367C00000783000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/suite.go    package watch

import (
	"fmt"
	"math"
	"time"

	"github.com/onsi/ginkgo/v2/ginkgo/internal"
)

type Suite struct {
	Suite        internal.TestSuite
	RunTime      time.Time
	Dependencies Dependencies

	sharedPackageHashes *PackageHashes
}

func NewSuite(suite internal.TestSuite, maxDepth int, sharedPackageHashes *PackageHashes) (*Suite, error) {
	deps, err := NewDependencies(suite.Path, maxDepth)
	if err != nil {
		return nil, err
	}

	sharedPackageHashes.Add(suite.Path)
	for dep := range deps.Dependencies() {
		sharedPackageHashes.Add(dep)
	}

	return &Suite{
		Suite:        suite,
		Dependencies: deps,

		sharedPackageHashes: sharedPackageHashes,
	}, nil
}

func (s *Suite) Delta() float64 {
	delta := s.delta(s.Suite.Path, true, 0) * 1000
	for dep, depth := range s.Dependencies.Dependencies() {
		delta += s.delta(dep, false, depth)
	}
	return delta
}

func (s *Suite) MarkAsRunAndRecomputedDependencies(maxDepth int) error {
	s.RunTime = time.Now()

	deps, err := NewDependencies(s.Suite.Path, maxDepth)
	if err != nil {
		return err
	}

	s.sharedPackageHashes.Add(s.Suite.Path)
	for dep := range deps.Dependencies() {
		s.sharedPackageHashes.Add(dep)
	}

	s.Dependencies = deps

	return nil
}

func (s *Suite) Description() string {
	numDeps := len(s.Dependencies.Dependencies())
	pluralizer := "ies"
	if numDeps == 1 {
		pluralizer = "y"
	}
	return fmt.Sprintf("%s [%d dependenc%s]", s.Suite.Path, numDeps, pluralizer)
}

func (s *Suite) delta(packagePath string, includeTests bool, depth int) float64 {
	return math.Max(float64(s.dt(packagePath, includeTests)), 0) / float64(depth+1)
}

func (s *Suite) dt(packagePath string, includeTests bool) time.Duration {
	packageHash := s.sharedPackageHashes.Get(packagePath)
	var modifiedTime time.Time
	if includeTests {
		modifiedTime = packageHash.TestModifiedTime
	} else {
		modifiedTime = packageHash.CodeModifiedTime
	}

	return modifiedTime.Sub(s.RunTime)
}
 07070100000948000081A4000000000000000000000001645E367C000017FF000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/watch_command.go    package watch

import (
	"fmt"
	"regexp"
	"time"

	"github.com/onsi/ginkgo/v2/formatter"
	"github.com/onsi/ginkgo/v2/ginkgo/command"
	"github.com/onsi/ginkgo/v2/ginkgo/internal"
	"github.com/onsi/ginkgo/v2/internal/interrupt_handler"
	"github.com/onsi/ginkgo/v2/types"
)

func BuildWatchCommand() command.Command {
	var suiteConfig = types.NewDefaultSuiteConfig()
	var reporterConfig = types.NewDefaultReporterConfig()
	var cliConfig = types.NewDefaultCLIConfig()
	var goFlagsConfig = types.NewDefaultGoFlagsConfig()

	flags, err := types.BuildWatchCommandFlagSet(&suiteConfig, &reporterConfig, &cliConfig, &goFlagsConfig)
	if err != nil {
		panic(err)
	}
	interruptHandler := interrupt_handler.NewInterruptHandler(nil)
	interrupt_handler.SwallowSigQuit()

	return command.Command{
		Name:          "watch",
		Flags:         flags,
		Usage:         "ginkgo watch <FLAGS> <PACKAGES> -- <PASS-THROUGHS>",
		ShortDoc:      "Watch the passed in <PACKAGES> and runs their tests whenever changes occur.",
		Documentation: "Any arguments after -- will be passed to the test.",
		DocLink:       "watching-for-changes",
		Command: func(args []string, additionalArgs []string) {
			var errors []error
			cliConfig, goFlagsConfig, errors = types.VetAndInitializeCLIAndGoConfig(cliConfig, goFlagsConfig)
			command.AbortIfErrors("Ginkgo detected configuration issues:", errors)

			watcher := &SpecWatcher{
				cliConfig:      cliConfig,
				goFlagsConfig:  goFlagsConfig,
				suiteConfig:    suiteConfig,
				reporterConfig: reporterConfig,
				flags:          flags,

				interruptHandler: interruptHandler,
			}

			watcher.WatchSpecs(args, additionalArgs)
		},
	}
}

type SpecWatcher struct {
	suiteConfig    types.SuiteConfig
	reporterConfig types.ReporterConfig
	cliConfig      types.CLIConfig
	goFlagsConfig  types.GoFlagsConfig
	flags          types.GinkgoFlagSet

	interruptHandler *interrupt_handler.InterruptHandler
}

func (w *SpecWatcher) WatchSpecs(args []string, additionalArgs []string) {
	suites := internal.FindSuites(args, w.cliConfig, false).WithoutState(internal.TestSuiteStateSkippedByFilter)

	internal.VerifyCLIAndFrameworkVersion(suites)

	if len(suites) == 0 {
		command.AbortWith("Found no test suites")
	}

	fmt.Printf("Identified %d test %s.  Locating dependencies to a depth of %d (this may take a while)...\n", len(suites), internal.PluralizedWord("suite", "suites", len(suites)), w.cliConfig.Depth)
	deltaTracker := NewDeltaTracker(w.cliConfig.Depth, regexp.MustCompile(w.cliConfig.WatchRegExp))
	delta, errors := deltaTracker.Delta(suites)

	fmt.Printf("Watching %d %s:\n", len(delta.NewSuites), internal.PluralizedWord("suite", "suites", len(delta.NewSuites)))
	for _, suite := range delta.NewSuites {
		fmt.Println("  " + suite.Description())
	}

	for suite, err := range errors {
		fmt.Printf("Failed to watch %s: %s\n", suite.PackageName, err)
	}

	if len(suites) == 1 {
		w.updateSeed()
		w.compileAndRun(suites[0], additionalArgs)
	}

	ticker := time.NewTicker(time.Second)

	for {
		select {
		case <-ticker.C:
			suites := internal.FindSuites(args, w.cliConfig, false).WithoutState(internal.TestSuiteStateSkippedByFilter)
			delta, _ := deltaTracker.Delta(suites)
			coloredStream := formatter.ColorableStdOut

			suites = internal.TestSuites{}

			if len(delta.NewSuites) > 0 {
				fmt.Fprintln(coloredStream, formatter.F("{{green}}Detected %d new %s:{{/}}", len(delta.NewSuites), internal.PluralizedWord("suite", "suites", len(delta.NewSuites))))
				for _, suite := range delta.NewSuites {
					suites = append(suites, suite.Suite)
					fmt.Fprintln(coloredStream, formatter.Fi(1, "%s", suite.Description()))
				}
			}

			modifiedSuites := delta.ModifiedSuites()
			if len(modifiedSuites) > 0 {
				fmt.Fprintln(coloredStream, formatter.F("{{green}}Detected changes in:{{/}}"))
				for _, pkg := range delta.ModifiedPackages {
					fmt.Fprintln(coloredStream, formatter.Fi(1, "%s", pkg))
				}
				fmt.Fprintln(coloredStream, formatter.F("{{green}}Will run %d %s:{{/}}", len(modifiedSuites), internal.PluralizedWord("suite", "suites", len(modifiedSuites))))
				for _, suite := range modifiedSuites {
					suites = append(suites, suite.Suite)
					fmt.Fprintln(coloredStream, formatter.Fi(1, "%s", suite.Description()))
				}
				fmt.Fprintln(coloredStream, "")
			}

			if len(suites) == 0 {
				break
			}

			w.updateSeed()
			w.computeSuccinctMode(len(suites))
			for idx := range suites {
				if w.interruptHandler.Status().Interrupted() {
					return
				}
				deltaTracker.WillRun(suites[idx])
				suites[idx] = w.compileAndRun(suites[idx], additionalArgs)
			}
			color := "{{green}}"
			if suites.CountWithState(internal.TestSuiteStateFailureStates...) > 0 {
				color = "{{red}}"
			}
			fmt.Fprintln(coloredStream, formatter.F(color+"\nDone.  Resuming watch...{{/}}"))

			messages, err := internal.FinalizeProfilesAndReportsForSuites(suites, w.cliConfig, w.suiteConfig, w.reporterConfig, w.goFlagsConfig)
			command.AbortIfError("could not finalize profiles:", err)
			for _, message := range messages {
				fmt.Println(message)
			}
		case <-w.interruptHandler.Status().Channel:
			return
		}
	}
}

func (w *SpecWatcher) compileAndRun(suite internal.TestSuite, additionalArgs []string) internal.TestSuite {
	suite = internal.CompileSuite(suite, w.goFlagsConfig)
	if suite.State.Is(internal.TestSuiteStateFailedToCompile) {
		fmt.Println(suite.CompilationError.Error())
		return suite
	}
	if w.interruptHandler.Status().Interrupted() {
		return suite
	}
	suite = internal.RunCompiledSuite(suite, w.suiteConfig, w.reporterConfig, w.cliConfig, w.goFlagsConfig, additionalArgs)
	internal.Cleanup(w.goFlagsConfig, suite)
	return suite
}

func (w *SpecWatcher) computeSuccinctMode(numSuites int) {
	if w.reporterConfig.Verbosity().GTE(types.VerbosityLevelVerbose) {
		w.reporterConfig.Succinct = false
		return
	}

	if w.flags.WasSet("succinct") {
		return
	}

	if numSuites == 1 {
		w.reporterConfig.Succinct = false
	}

	if numSuites > 1 {
		w.reporterConfig.Succinct = true
	}
}

func (w *SpecWatcher) updateSeed() {
	if !w.flags.WasSet("seed") {
		w.suiteConfig.RandomSeed = time.Now().Unix()
	}
}
 07070100000949000081A4000000000000000000000001645E367C00000083000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo_cli_dependencies.go   //go:build ginkgoclidependencies
// +build ginkgoclidependencies

package ginkgo

import (
	_ "github.com/onsi/ginkgo/v2/ginkgo"
)
 0707010000094A000081A4000000000000000000000001645E367C00000A5B000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/ginkgo_t_dsl.go  package ginkgo

import (
	"github.com/onsi/ginkgo/v2/internal/testingtproxy"
)

/*
GinkgoT() implements an interface that allows third party libraries to integrate with and build on top of Ginkgo.

GinkgoT() is analogous to *testing.T and implements the majority of *testing.T's methods.  It can be typically be used a a drop-in replacement with third-party libraries that accept *testing.T through an interface.

GinkgoT() takes an optional offset argument that can be used to get the
correct line number associated with the failure - though you do not need to use this if you call GinkgoHelper() or GinkgoT().Helper() appropriately

You can learn more here: https://onsi.github.io/ginkgo/#using-third-party-libraries
*/
func GinkgoT(optionalOffset ...int) FullGinkgoTInterface {
	offset := 3
	if len(optionalOffset) > 0 {
		offset = optionalOffset[0]
	}
	return testingtproxy.New(
		GinkgoWriter,
		Fail,
		Skip,
		DeferCleanup,
		CurrentSpecReport,
		AddReportEntry,
		GinkgoRecover,
		AttachProgressReporter,
		suiteConfig.RandomSeed,
		suiteConfig.ParallelProcess,
		suiteConfig.ParallelTotal,
		reporterConfig.NoColor,
		offset)
}

/*
The portion of the interface returned by GinkgoT() that maps onto methods in the testing package's T.
*/
type GinkgoTInterface interface {
	Cleanup(func())
	Setenv(kev, value string)
	Error(args ...interface{})
	Errorf(format string, args ...interface{})
	Fail()
	FailNow()
	Failed() bool
	Fatal(args ...interface{})
	Fatalf(format string, args ...interface{})
	Helper()
	Log(args ...interface{})
	Logf(format string, args ...interface{})
	Name() string
	Parallel()
	Skip(args ...interface{})
	SkipNow()
	Skipf(format string, args ...interface{})
	Skipped() bool
	TempDir() string
}

/*
Additional methods returned by GinkgoT() that provide deeper integration points into Ginkgo
*/
type FullGinkgoTInterface interface {
	GinkgoTInterface

	AddReportEntryVisibilityAlways(name string, args ...any)
	AddReportEntryVisibilityFailureOrVerbose(name string, args ...any)
	AddReportEntryVisibilityNever(name string, args ...any)

	//Prints to the GinkgoWriter
	Print(a ...interface{})
	Printf(format string, a ...interface{})
	Println(a ...interface{})

	//Provides access to Ginkgo's color formatting, correctly configured to match the color settings specified in the invocation of ginkgo
	F(format string, args ...any) string
	Fi(indentation uint, format string, args ...any) string
	Fiw(indentation uint, maxWidth uint, format string, args ...any) string

	GinkgoRecover()
	DeferCleanup(args ...any)

	RandomSeed() int64
	ParallelProcess() int
	ParallelTotal() int

	AttachProgressReporter(func() string) func()
}
 0707010000094B000041ED000000000000000000000006645E367C00000000000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal 0707010000094C000081A4000000000000000000000001645E367C00000097000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/counter.go  package internal

func MakeIncrementingIndexCounter() func() (int, error) {
	idx := -1
	return func() (int, error) {
		idx += 1
		return idx, nil
	}
}
 0707010000094D000081A4000000000000000000000001645E367C00000755000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/failer.go   package internal

import (
	"fmt"
	"sync"

	"github.com/onsi/ginkgo/v2/types"
)

type Failer struct {
	lock    *sync.Mutex
	failure types.Failure
	state   types.SpecState
}

func NewFailer() *Failer {
	return &Failer{
		lock:  &sync.Mutex{},
		state: types.SpecStatePassed,
	}
}

func (f *Failer) GetState() types.SpecState {
	f.lock.Lock()
	defer f.lock.Unlock()
	return f.state
}

func (f *Failer) GetFailure() types.Failure {
	f.lock.Lock()
	defer f.lock.Unlock()
	return f.failure
}

func (f *Failer) Panic(location types.CodeLocation, forwardedPanic interface{}) {
	f.lock.Lock()
	defer f.lock.Unlock()

	if f.state == types.SpecStatePassed {
		f.state = types.SpecStatePanicked
		f.failure = types.Failure{
			Message:        "Test Panicked",
			Location:       location,
			ForwardedPanic: fmt.Sprintf("%v", forwardedPanic),
		}
	}
}

func (f *Failer) Fail(message string, location types.CodeLocation) {
	f.lock.Lock()
	defer f.lock.Unlock()

	if f.state == types.SpecStatePassed {
		f.state = types.SpecStateFailed
		f.failure = types.Failure{
			Message:  message,
			Location: location,
		}
	}
}

func (f *Failer) Skip(message string, location types.CodeLocation) {
	f.lock.Lock()
	defer f.lock.Unlock()

	if f.state == types.SpecStatePassed {
		f.state = types.SpecStateSkipped
		f.failure = types.Failure{
			Message:  message,
			Location: location,
		}
	}
}

func (f *Failer) AbortSuite(message string, location types.CodeLocation) {
	f.lock.Lock()
	defer f.lock.Unlock()

	if f.state == types.SpecStatePassed {
		f.state = types.SpecStateAborted
		f.failure = types.Failure{
			Message:  message,
			Location: location,
		}
	}
}

func (f *Failer) Drain() (types.SpecState, types.Failure) {
	f.lock.Lock()
	defer f.lock.Unlock()

	failure := f.failure
	outcome := f.state

	f.state = types.SpecStatePassed
	f.failure = types.Failure{}

	return outcome, failure
}
   0707010000094E000081A4000000000000000000000001645E367C00001387000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/focus.go    package internal

import (
	"regexp"
	"strings"

	"github.com/onsi/ginkgo/v2/types"
)

/*
	If a container marked as focus has a descendant that is also marked as focus, Ginkgo's policy is to
	unmark the container's focus.  This gives developers a more intuitive experience when debugging specs.
	It is common to focus a container to just run a subset of specs, then identify the specific specs within the container to focus -
	this policy allows the developer to simply focus those specific specs and not need to go back and turn the focus off of the container:

	As a common example, consider:

		FDescribe("something to debug", function() {
			It("works", function() {...})
			It("works", function() {...})
			FIt("doesn't work", function() {...})
			It("works", function() {...})
		})

	here the developer's intent is to focus in on the `"doesn't work"` spec and not to run the adjacent specs in the focused `"something to debug"` container.
	The nested policy applied by this function enables this behavior.
*/
func ApplyNestedFocusPolicyToTree(tree *TreeNode) {
	var walkTree func(tree *TreeNode) bool
	walkTree = func(tree *TreeNode) bool {
		if tree.Node.MarkedPending {
			return false
		}
		hasFocusedDescendant := false
		for _, child := range tree.Children {
			childHasFocus := walkTree(child)
			hasFocusedDescendant = hasFocusedDescendant || childHasFocus
		}
		tree.Node.MarkedFocus = tree.Node.MarkedFocus && !hasFocusedDescendant
		return tree.Node.MarkedFocus || hasFocusedDescendant
	}

	walkTree(tree)
}

/*
	Ginkgo supports focussing specs using `FIt`, `FDescribe`, etc. - this is called "programmatic focus"
	It also supports focussing specs using regular expressions on the command line (`-focus=`, `-skip=`) that match against spec text
	and file filters (`-focus-files=`, `-skip-files=`) that match against code locations for nodes in specs.

	If any of the CLI flags are provided they take precedence.  The file filters run first followed by the regex filters.

	This function sets the `Skip` property on specs by applying Ginkgo's focus policy:
	- If there are no CLI arguments and no programmatic focus, do nothing.
	- If there are no CLI arguments but a spec somewhere has programmatic focus, skip any specs that have no programmatic focus.
	- If there are CLI arguments parse them and skip any specs that either don't match the focus filters or do match the skip filters.

	*Note:* specs with pending nodes are Skipped when created by NewSpec.
*/
func ApplyFocusToSpecs(specs Specs, description string, suiteLabels Labels, suiteConfig types.SuiteConfig) (Specs, bool) {
	focusString := strings.Join(suiteConfig.FocusStrings, "|")
	skipString := strings.Join(suiteConfig.SkipStrings, "|")

	hasFocusCLIFlags := focusString != "" || skipString != "" || len(suiteConfig.SkipFiles) > 0 || len(suiteConfig.FocusFiles) > 0 || suiteConfig.LabelFilter != ""

	type SkipCheck func(spec Spec) bool

	// by default, skip any specs marked pending
	skipChecks := []SkipCheck{func(spec Spec) bool { return spec.Nodes.HasNodeMarkedPending() }}
	hasProgrammaticFocus := false

	if !hasFocusCLIFlags {
		// check for programmatic focus
		for _, spec := range specs {
			if spec.Nodes.HasNodeMarkedFocus() && !spec.Nodes.HasNodeMarkedPending() {
				skipChecks = append(skipChecks, func(spec Spec) bool { return !spec.Nodes.HasNodeMarkedFocus() })
				hasProgrammaticFocus = true
				break
			}
		}
	}

	if suiteConfig.LabelFilter != "" {
		labelFilter, _ := types.ParseLabelFilter(suiteConfig.LabelFilter)
		skipChecks = append(skipChecks, func(spec Spec) bool { 
			return !labelFilter(UnionOfLabels(suiteLabels, spec.Nodes.UnionOfLabels())) 
		})
	}

	if len(suiteConfig.FocusFiles) > 0 {
		focusFilters, _ := types.ParseFileFilters(suiteConfig.FocusFiles)
		skipChecks = append(skipChecks, func(spec Spec) bool { return !focusFilters.Matches(spec.Nodes.CodeLocations()) })
	}

	if len(suiteConfig.SkipFiles) > 0 {
		skipFilters, _ := types.ParseFileFilters(suiteConfig.SkipFiles)
		skipChecks = append(skipChecks, func(spec Spec) bool { return skipFilters.Matches(spec.Nodes.CodeLocations()) })
	}

	if focusString != "" {
		// skip specs that don't match the focus string
		re := regexp.MustCompile(focusString)
		skipChecks = append(skipChecks, func(spec Spec) bool { return !re.MatchString(description + " " + spec.Text()) })
	}

	if skipString != "" {
		// skip specs that match the skip string
		re := regexp.MustCompile(skipString)
		skipChecks = append(skipChecks, func(spec Spec) bool { return re.MatchString(description + " " + spec.Text()) })
	}

	// skip specs if shouldSkip() is true.  note that we do nothing if shouldSkip() is false to avoid overwriting skip status established by the node's pending status
	processedSpecs := Specs{}
	for _, spec := range specs {
		for _, skipCheck := range skipChecks {
			if skipCheck(spec) {
				spec.Skip = true
				break
			}
		}
		processedSpecs = append(processedSpecs, spec)
	}

	return processedSpecs, hasProgrammaticFocus
}
 0707010000094F000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/global  07070100000950000081A4000000000000000000000001645E367C000000F8000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/global/init.go  package global

import (
	"github.com/onsi/ginkgo/v2/internal"
)

var Suite *internal.Suite
var Failer *internal.Failer

func init() {
	InitializeGlobals()
}

func InitializeGlobals() {
	Failer = internal.NewFailer()
	Suite = internal.NewSuite()
}
07070100000951000081A4000000000000000000000001645E367C00003A10000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/group.go    package internal

import (
	"fmt"
	"time"

	"github.com/onsi/ginkgo/v2/types"
)

type runOncePair struct {
	//nodeId should only run once...
	nodeID   uint
	nodeType types.NodeType
	//...for specs in a hierarchy that includes this context
	containerID uint
}

func (pair runOncePair) isZero() bool {
	return pair.nodeID == 0
}

func runOncePairForNode(node Node, containerID uint) runOncePair {
	return runOncePair{
		nodeID:      node.ID,
		nodeType:    node.NodeType,
		containerID: containerID,
	}
}

type runOncePairs []runOncePair

func runOncePairsForSpec(spec Spec) runOncePairs {
	pairs := runOncePairs{}

	containers := spec.Nodes.WithType(types.NodeTypeContainer)
	for _, node := range spec.Nodes {
		if node.NodeType.Is(types.NodeTypeBeforeAll | types.NodeTypeAfterAll) {
			pairs = append(pairs, runOncePairForNode(node, containers.FirstWithNestingLevel(node.NestingLevel-1).ID))
		} else if node.NodeType.Is(types.NodeTypeBeforeEach|types.NodeTypeJustBeforeEach|types.NodeTypeAfterEach|types.NodeTypeJustAfterEach) && node.MarkedOncePerOrdered {
			passedIntoAnOrderedContainer := false
			firstOrderedContainerDeeperThanNode := containers.FirstSatisfying(func(container Node) bool {
				passedIntoAnOrderedContainer = passedIntoAnOrderedContainer || container.MarkedOrdered
				return container.NestingLevel >= node.NestingLevel && passedIntoAnOrderedContainer
			})
			if firstOrderedContainerDeeperThanNode.IsZero() {
				continue
			}
			pairs = append(pairs, runOncePairForNode(node, firstOrderedContainerDeeperThanNode.ID))
		}
	}

	return pairs
}

func (pairs runOncePairs) runOncePairFor(nodeID uint) runOncePair {
	for i := range pairs {
		if pairs[i].nodeID == nodeID {
			return pairs[i]
		}
	}
	return runOncePair{}
}

func (pairs runOncePairs) hasRunOncePair(pair runOncePair) bool {
	for i := range pairs {
		if pairs[i] == pair {
			return true
		}
	}
	return false
}

func (pairs runOncePairs) withType(nodeTypes types.NodeType) runOncePairs {
	count := 0
	for i := range pairs {
		if pairs[i].nodeType.Is(nodeTypes) {
			count++
		}
	}

	out, j := make(runOncePairs, count), 0
	for i := range pairs {
		if pairs[i].nodeType.Is(nodeTypes) {
			out[j] = pairs[i]
			j++
		}
	}
	return out
}

type group struct {
	suite          *Suite
	specs          Specs
	runOncePairs   map[uint]runOncePairs
	runOnceTracker map[runOncePair]types.SpecState

	succeeded              bool
	failedInARunOnceBefore bool
	continueOnFailure      bool
}

func newGroup(suite *Suite) *group {
	return &group{
		suite:                  suite,
		runOncePairs:           map[uint]runOncePairs{},
		runOnceTracker:         map[runOncePair]types.SpecState{},
		succeeded:              true,
		failedInARunOnceBefore: false,
		continueOnFailure:      false,
	}
}

func (g *group) initialReportForSpec(spec Spec) types.SpecReport {
	return types.SpecReport{
		ContainerHierarchyTexts:     spec.Nodes.WithType(types.NodeTypeContainer).Texts(),
		ContainerHierarchyLocations: spec.Nodes.WithType(types.NodeTypeContainer).CodeLocations(),
		ContainerHierarchyLabels:    spec.Nodes.WithType(types.NodeTypeContainer).Labels(),
		LeafNodeLocation:            spec.FirstNodeWithType(types.NodeTypeIt).CodeLocation,
		LeafNodeType:                types.NodeTypeIt,
		LeafNodeText:                spec.FirstNodeWithType(types.NodeTypeIt).Text,
		LeafNodeLabels:              []string(spec.FirstNodeWithType(types.NodeTypeIt).Labels),
		ParallelProcess:             g.suite.config.ParallelProcess,
		RunningInParallel:           g.suite.isRunningInParallel(),
		IsSerial:                    spec.Nodes.HasNodeMarkedSerial(),
		IsInOrderedContainer:        !spec.Nodes.FirstNodeMarkedOrdered().IsZero(),
		MaxFlakeAttempts:            spec.Nodes.GetMaxFlakeAttempts(),
		MaxMustPassRepeatedly:       spec.Nodes.GetMaxMustPassRepeatedly(),
	}
}

func (g *group) evaluateSkipStatus(spec Spec) (types.SpecState, types.Failure) {
	if spec.Nodes.HasNodeMarkedPending() {
		return types.SpecStatePending, types.Failure{}
	}
	if spec.Skip {
		return types.SpecStateSkipped, types.Failure{}
	}
	if g.suite.interruptHandler.Status().Interrupted() || g.suite.skipAll {
		return types.SpecStateSkipped, types.Failure{}
	}
	if !g.suite.deadline.IsZero() && g.suite.deadline.Before(time.Now()) {
		return types.SpecStateSkipped, types.Failure{}
	}
	if !g.succeeded && !g.continueOnFailure {
		return types.SpecStateSkipped, g.suite.failureForLeafNodeWithMessage(spec.FirstNodeWithType(types.NodeTypeIt),
			"Spec skipped because an earlier spec in an ordered container failed")
	}
	if g.failedInARunOnceBefore && g.continueOnFailure {
		return types.SpecStateSkipped, g.suite.failureForLeafNodeWithMessage(spec.FirstNodeWithType(types.NodeTypeIt),
			"Spec skipped because a BeforeAll node failed")
	}
	beforeOncePairs := g.runOncePairs[spec.SubjectID()].withType(types.NodeTypeBeforeAll | types.NodeTypeBeforeEach | types.NodeTypeJustBeforeEach)
	for _, pair := range beforeOncePairs {
		if g.runOnceTracker[pair].Is(types.SpecStateSkipped) {
			return types.SpecStateSkipped, g.suite.failureForLeafNodeWithMessage(spec.FirstNodeWithType(types.NodeTypeIt),
				fmt.Sprintf("Spec skipped because Skip() was called in %s", pair.nodeType))
		}
	}
	if g.suite.config.DryRun {
		return types.SpecStatePassed, types.Failure{}
	}
	return g.suite.currentSpecReport.State, g.suite.currentSpecReport.Failure
}

func (g *group) isLastSpecWithPair(specID uint, pair runOncePair) bool {
	lastSpecID := uint(0)
	for idx := range g.specs {
		if g.specs[idx].Skip {
			continue
		}
		sID := g.specs[idx].SubjectID()
		if g.runOncePairs[sID].hasRunOncePair(pair) {
			lastSpecID = sID
		}
	}
	return lastSpecID == specID
}

func (g *group) attemptSpec(isFinalAttempt bool, spec Spec) bool {
	failedInARunOnceBefore := false
	pairs := g.runOncePairs[spec.SubjectID()]

	nodes := spec.Nodes.WithType(types.NodeTypeBeforeAll)
	nodes = append(nodes, spec.Nodes.WithType(types.NodeTypeBeforeEach)...).SortedByAscendingNestingLevel()
	nodes = append(nodes, spec.Nodes.WithType(types.NodeTypeJustBeforeEach).SortedByAscendingNestingLevel()...)
	nodes = append(nodes, spec.Nodes.FirstNodeWithType(types.NodeTypeIt))
	terminatingNode, terminatingPair := Node{}, runOncePair{}

	deadline := time.Time{}
	if spec.SpecTimeout() > 0 {
		deadline = time.Now().Add(spec.SpecTimeout())
	}

	for _, node := range nodes {
		oncePair := pairs.runOncePairFor(node.ID)
		if !oncePair.isZero() && g.runOnceTracker[oncePair].Is(types.SpecStatePassed) {
			continue
		}
		g.suite.currentSpecReport.State, g.suite.currentSpecReport.Failure = g.suite.runNode(node, deadline, spec.Nodes.BestTextFor(node))
		g.suite.currentSpecReport.RunTime = time.Since(g.suite.currentSpecReport.StartTime)
		if !oncePair.isZero() {
			g.runOnceTracker[oncePair] = g.suite.currentSpecReport.State
		}
		if g.suite.currentSpecReport.State != types.SpecStatePassed {
			terminatingNode, terminatingPair = node, oncePair
			failedInARunOnceBefore = !terminatingPair.isZero()
			break
		}
	}

	afterNodeWasRun := map[uint]bool{}
	includeDeferCleanups := false
	for {
		nodes := spec.Nodes.WithType(types.NodeTypeAfterEach)
		nodes = append(nodes, spec.Nodes.WithType(types.NodeTypeAfterAll)...).SortedByDescendingNestingLevel()
		nodes = append(spec.Nodes.WithType(types.NodeTypeJustAfterEach).SortedByDescendingNestingLevel(), nodes...)
		if !terminatingNode.IsZero() {
			nodes = nodes.WithinNestingLevel(terminatingNode.NestingLevel)
		}
		if includeDeferCleanups {
			nodes = append(nodes, g.suite.cleanupNodes.WithType(types.NodeTypeCleanupAfterEach).Reverse()...)
			nodes = append(nodes, g.suite.cleanupNodes.WithType(types.NodeTypeCleanupAfterAll).Reverse()...)
		}
		nodes = nodes.Filter(func(node Node) bool {
			if afterNodeWasRun[node.ID] {
				//this node has already been run on this attempt, don't rerun it
				return false
			}
			var pair runOncePair
			switch node.NodeType {
			case types.NodeTypeCleanupAfterEach, types.NodeTypeCleanupAfterAll:
				// check if we were generated in an AfterNode that has already run
				if afterNodeWasRun[node.NodeIDWhereCleanupWasGenerated] {
					return true // we were, so we should definitely run this cleanup now
				}
				// looks like this cleanup nodes was generated by a before node or it.
				// the run-once status of a cleanup node is governed by the run-once status of its generator
				pair = pairs.runOncePairFor(node.NodeIDWhereCleanupWasGenerated)
			default:
				pair = pairs.runOncePairFor(node.ID)
			}
			if pair.isZero() {
				// this node is not governed by any run-once policy, we should run it
				return true
			}
			// it's our last chance to run if we're the last spec for our oncePair
			isLastSpecWithPair := g.isLastSpecWithPair(spec.SubjectID(), pair)

			switch g.suite.currentSpecReport.State {
			case types.SpecStatePassed: //this attempt is passing...
				return isLastSpecWithPair //...we should run-once if we'this is our last chance
			case types.SpecStateSkipped: //the spec was skipped by the user...
				if isLastSpecWithPair {
					return true //...we're the last spec, so we should run the AfterNode
				}
				if !terminatingPair.isZero() && terminatingNode.NestingLevel == node.NestingLevel {
					return true //...or, a run-once node at our nesting level was skipped which means this is our last chance to run
				}
			case types.SpecStateFailed, types.SpecStatePanicked, types.SpecStateTimedout: // the spec has failed...
				if isFinalAttempt {
					if g.continueOnFailure {
						return isLastSpecWithPair || failedInARunOnceBefore //...we're configured to continue on failures - so we should only run if we're the last spec for this pair or if we failed in a runOnceBefore (which means we _are_ the last spec to run)
					} else {
						return true //...this was the last attempt and continueOnFailure is false therefore we are the last spec to run and so the AfterNode should run
					}
				}
				if !terminatingPair.isZero() { // ...and it failed in a run-once.  which will be running again
					if node.NodeType.Is(types.NodeTypeCleanupAfterEach | types.NodeTypeCleanupAfterAll) {
						return terminatingNode.ID == node.NodeIDWhereCleanupWasGenerated // we should run this node if we're a clean-up generated by it
					} else {
						return terminatingNode.NestingLevel == node.NestingLevel // ...or if we're at the same nesting level
					}
				}
			case types.SpecStateInterrupted, types.SpecStateAborted: // ...we've been interrupted and/or aborted
				return true //...that means the test run is over and we should clean up the stack.  Run the AfterNode
			}
			return false
		})

		if len(nodes) == 0 && includeDeferCleanups {
			break
		}

		for _, node := range nodes {
			afterNodeWasRun[node.ID] = true
			state, failure := g.suite.runNode(node, deadline, spec.Nodes.BestTextFor(node))
			g.suite.currentSpecReport.RunTime = time.Since(g.suite.currentSpecReport.StartTime)
			if g.suite.currentSpecReport.State == types.SpecStatePassed || state == types.SpecStateAborted {
				g.suite.currentSpecReport.State = state
				g.suite.currentSpecReport.Failure = failure
			} else if state.Is(types.SpecStateFailureStates) {
				g.suite.currentSpecReport.AdditionalFailures = append(g.suite.currentSpecReport.AdditionalFailures, types.AdditionalFailure{State: state, Failure: failure})
			}
		}
		includeDeferCleanups = true
	}

	return failedInARunOnceBefore
}

func (g *group) run(specs Specs) {
	g.specs = specs
	g.continueOnFailure = specs[0].Nodes.FirstNodeMarkedOrdered().MarkedContinueOnFailure
	for _, spec := range g.specs {
		g.runOncePairs[spec.SubjectID()] = runOncePairsForSpec(spec)
	}

	for _, spec := range g.specs {
		g.suite.selectiveLock.Lock()
		g.suite.currentSpecReport = g.initialReportForSpec(spec)
		g.suite.selectiveLock.Unlock()

		g.suite.currentSpecReport.State, g.suite.currentSpecReport.Failure = g.evaluateSkipStatus(spec)
		g.suite.reporter.WillRun(g.suite.currentSpecReport)
		g.suite.reportEach(spec, types.NodeTypeReportBeforeEach)

		skip := g.suite.config.DryRun || g.suite.currentSpecReport.State.Is(types.SpecStateFailureStates|types.SpecStateSkipped|types.SpecStatePending)

		g.suite.currentSpecReport.StartTime = time.Now()
		failedInARunOnceBefore := false
		if !skip {
			var maxAttempts = 1

			if g.suite.currentSpecReport.MaxMustPassRepeatedly > 0 {
				maxAttempts = max(1, spec.MustPassRepeatedly())
			} else if g.suite.config.FlakeAttempts > 0 {
				maxAttempts = g.suite.config.FlakeAttempts
				g.suite.currentSpecReport.MaxFlakeAttempts = maxAttempts
			} else if g.suite.currentSpecReport.MaxFlakeAttempts > 0 {
				maxAttempts = max(1, spec.FlakeAttempts())
			}

			for attempt := 0; attempt < maxAttempts; attempt++ {
				g.suite.currentSpecReport.NumAttempts = attempt + 1
				g.suite.writer.Truncate()
				g.suite.outputInterceptor.StartInterceptingOutput()
				if attempt > 0 {
					if g.suite.currentSpecReport.MaxMustPassRepeatedly > 0 {
						g.suite.handleSpecEvent(types.SpecEvent{SpecEventType: types.SpecEventSpecRepeat, Attempt: attempt})
					}
					if g.suite.currentSpecReport.MaxFlakeAttempts > 0 {
						g.suite.handleSpecEvent(types.SpecEvent{SpecEventType: types.SpecEventSpecRetry, Attempt: attempt})
					}
				}

				failedInARunOnceBefore = g.attemptSpec(attempt == maxAttempts-1, spec)

				g.suite.currentSpecReport.EndTime = time.Now()
				g.suite.currentSpecReport.RunTime = g.suite.currentSpecReport.EndTime.Sub(g.suite.currentSpecReport.StartTime)
				g.suite.currentSpecReport.CapturedGinkgoWriterOutput += string(g.suite.writer.Bytes())
				g.suite.currentSpecReport.CapturedStdOutErr += g.suite.outputInterceptor.StopInterceptingAndReturnOutput()

				if g.suite.currentSpecReport.MaxMustPassRepeatedly > 0 {
					if g.suite.currentSpecReport.State.Is(types.SpecStateFailureStates | types.SpecStateSkipped) {
						break
					}
				}
				if g.suite.currentSpecReport.MaxFlakeAttempts > 0 {
					if g.suite.currentSpecReport.State.Is(types.SpecStatePassed | types.SpecStateSkipped | types.SpecStateAborted | types.SpecStateInterrupted) {
						break
					} else if attempt < maxAttempts-1 {
						af := types.AdditionalFailure{State: g.suite.currentSpecReport.State, Failure: g.suite.currentSpecReport.Failure}
						af.Failure.Message = fmt.Sprintf("Failure recorded during attempt %d:\n%s", attempt+1, af.Failure.Message)
						g.suite.currentSpecReport.AdditionalFailures = append(g.suite.currentSpecReport.AdditionalFailures, af)
					}
				}
			}
		}

		g.suite.reportEach(spec, types.NodeTypeReportAfterEach)
		g.suite.processCurrentSpecReport()
		if g.suite.currentSpecReport.State.Is(types.SpecStateFailureStates) {
			g.succeeded = false
			g.failedInARunOnceBefore = g.failedInARunOnceBefore || failedInARunOnceBefore
		}
		g.suite.selectiveLock.Lock()
		g.suite.currentSpecReport = types.SpecReport{}
		g.suite.selectiveLock.Unlock()
	}
}
07070100000952000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/interrupt_handler   07070100000953000081A4000000000000000000000001645E367C00000E1A000000000000000000000000000000000000006500000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/interrupt_handler/interrupt_handler.go  package interrupt_handler

import (
	"os"
	"os/signal"
	"sync"
	"syscall"
	"time"

	"github.com/onsi/ginkgo/v2/internal/parallel_support"
)

const ABORT_POLLING_INTERVAL = 500 * time.Millisecond

type InterruptCause uint

const (
	InterruptCauseInvalid InterruptCause = iota
	InterruptCauseSignal
	InterruptCauseAbortByOtherProcess
)

type InterruptLevel uint

const (
	InterruptLevelUninterrupted InterruptLevel = iota
	InterruptLevelCleanupAndReport
	InterruptLevelReportOnly
	InterruptLevelBailOut
)

func (ic InterruptCause) String() string {
	switch ic {
	case InterruptCauseSignal:
		return "Interrupted by User"
	case InterruptCauseAbortByOtherProcess:
		return "Interrupted by Other Ginkgo Process"
	}
	return "INVALID_INTERRUPT_CAUSE"
}

type InterruptStatus struct {
	Channel chan interface{}
	Level   InterruptLevel
	Cause   InterruptCause
}

func (s InterruptStatus) Interrupted() bool {
	return s.Level != InterruptLevelUninterrupted
}

func (s InterruptStatus) Message() string {
	return s.Cause.String()
}

func (s InterruptStatus) ShouldIncludeProgressReport() bool {
	return s.Cause != InterruptCauseAbortByOtherProcess
}

type InterruptHandlerInterface interface {
	Status() InterruptStatus
}

type InterruptHandler struct {
	c       chan interface{}
	lock    *sync.Mutex
	level   InterruptLevel
	cause   InterruptCause
	client  parallel_support.Client
	stop    chan interface{}
	signals []os.Signal
}

func NewInterruptHandler(client parallel_support.Client, signals ...os.Signal) *InterruptHandler {
	if len(signals) == 0 {
		signals = []os.Signal{os.Interrupt, syscall.SIGTERM}
	}
	handler := &InterruptHandler{
		c:       make(chan interface{}),
		lock:    &sync.Mutex{},
		stop:    make(chan interface{}),
		client:  client,
		signals: signals,
	}
	handler.registerForInterrupts()
	return handler
}

func (handler *InterruptHandler) Stop() {
	close(handler.stop)
}

func (handler *InterruptHandler) registerForInterrupts() {
	// os signal handling
	signalChannel := make(chan os.Signal, 1)
	signal.Notify(signalChannel, handler.signals...)

	// cross-process abort handling
	var abortChannel chan interface{}
	if handler.client != nil {
		abortChannel = make(chan interface{})
		go func() {
			pollTicker := time.NewTicker(ABORT_POLLING_INTERVAL)
			for {
				select {
				case <-pollTicker.C:
					if handler.client.ShouldAbort() {
						close(abortChannel)
						pollTicker.Stop()
						return
					}
				case <-handler.stop:
					pollTicker.Stop()
					return
				}
			}
		}()
	}

	go func(abortChannel chan interface{}) {
		var interruptCause InterruptCause
		for {
			select {
			case <-signalChannel:
				interruptCause = InterruptCauseSignal
			case <-abortChannel:
				interruptCause = InterruptCauseAbortByOtherProcess
			case <-handler.stop:
				signal.Stop(signalChannel)
				return
			}
			abortChannel = nil

			handler.lock.Lock()
			oldLevel := handler.level
			handler.cause = interruptCause
			if handler.level == InterruptLevelUninterrupted {
				handler.level = InterruptLevelCleanupAndReport
			} else if handler.level == InterruptLevelCleanupAndReport {
				handler.level = InterruptLevelReportOnly
			} else if handler.level == InterruptLevelReportOnly {
				handler.level = InterruptLevelBailOut
			}
			if handler.level != oldLevel {
				close(handler.c)
				handler.c = make(chan interface{})
			}
			handler.lock.Unlock()
		}
	}(abortChannel)
}

func (handler *InterruptHandler) Status() InterruptStatus {
	handler.lock.Lock()
	defer handler.lock.Unlock()

	return InterruptStatus{
		Level:   handler.level,
		Channel: handler.c,
		Cause:   handler.cause,
	}
}
  07070100000954000081A4000000000000000000000001645E367C00000137000000000000000000000000000000000000006A00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/interrupt_handler/sigquit_swallower_unix.go //go:build freebsd || openbsd || netbsd || dragonfly || darwin || linux || solaris
// +build freebsd openbsd netbsd dragonfly darwin linux solaris

package interrupt_handler

import (
	"os"
	"os/signal"
	"syscall"
)

func SwallowSigQuit() {
	c := make(chan os.Signal, 1024)
	signal.Notify(c, syscall.SIGQUIT)
}
 07070100000955000081A4000000000000000000000001645E367C00000063000000000000000000000000000000000000006D00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/interrupt_handler/sigquit_swallower_windows.go  //go:build windows
// +build windows

package interrupt_handler

func SwallowSigQuit() {
	//noop
}
 07070100000956000081A4000000000000000000000001645E367C0000657E000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/node.go package internal

import (
	"context"
	"fmt"
	"reflect"
	"sort"
	"time"

	"sync"

	"github.com/onsi/ginkgo/v2/types"
)

var _global_node_id_counter = uint(0)
var _global_id_mutex = &sync.Mutex{}

func UniqueNodeID() uint {
	//There's a reace in the internal integration tests if we don't make
	//accessing _global_node_id_counter safe across goroutines.
	_global_id_mutex.Lock()
	defer _global_id_mutex.Unlock()
	_global_node_id_counter += 1
	return _global_node_id_counter
}

type Node struct {
	ID       uint
	NodeType types.NodeType

	Text         string
	Body         func(SpecContext)
	CodeLocation types.CodeLocation
	NestingLevel int
	HasContext   bool

	SynchronizedBeforeSuiteProc1Body              func(SpecContext) []byte
	SynchronizedBeforeSuiteProc1BodyHasContext    bool
	SynchronizedBeforeSuiteAllProcsBody           func(SpecContext, []byte)
	SynchronizedBeforeSuiteAllProcsBodyHasContext bool

	SynchronizedAfterSuiteAllProcsBody           func(SpecContext)
	SynchronizedAfterSuiteAllProcsBodyHasContext bool
	SynchronizedAfterSuiteProc1Body              func(SpecContext)
	SynchronizedAfterSuiteProc1BodyHasContext    bool

	ReportEachBody  func(types.SpecReport)
	ReportSuiteBody func(types.Report)

	MarkedFocus             bool
	MarkedPending           bool
	MarkedSerial            bool
	MarkedOrdered           bool
	MarkedContinueOnFailure bool
	MarkedOncePerOrdered    bool
	FlakeAttempts           int
	MustPassRepeatedly      int
	Labels                  Labels
	PollProgressAfter       time.Duration
	PollProgressInterval    time.Duration
	NodeTimeout             time.Duration
	SpecTimeout             time.Duration
	GracePeriod             time.Duration

	NodeIDWhereCleanupWasGenerated uint
}

// Decoration Types
type focusType bool
type pendingType bool
type serialType bool
type orderedType bool
type continueOnFailureType bool
type honorsOrderedType bool
type suppressProgressReporting bool

const Focus = focusType(true)
const Pending = pendingType(true)
const Serial = serialType(true)
const Ordered = orderedType(true)
const ContinueOnFailure = continueOnFailureType(true)
const OncePerOrdered = honorsOrderedType(true)
const SuppressProgressReporting = suppressProgressReporting(true)

type FlakeAttempts uint
type MustPassRepeatedly uint
type Offset uint
type Done chan<- interface{} // Deprecated Done Channel for asynchronous testing
type Labels []string
type PollProgressInterval time.Duration
type PollProgressAfter time.Duration
type NodeTimeout time.Duration
type SpecTimeout time.Duration
type GracePeriod time.Duration

func (l Labels) MatchesLabelFilter(query string) bool {
	return types.MustParseLabelFilter(query)(l)
}

func UnionOfLabels(labels ...Labels) Labels {
	out := Labels{}
	seen := map[string]bool{}
	for _, labelSet := range labels {
		for _, label := range labelSet {
			if !seen[label] {
				seen[label] = true
				out = append(out, label)
			}
		}
	}
	return out
}

func PartitionDecorations(args ...interface{}) ([]interface{}, []interface{}) {
	decorations := []interface{}{}
	remainingArgs := []interface{}{}
	for _, arg := range args {
		if isDecoration(arg) {
			decorations = append(decorations, arg)
		} else {
			remainingArgs = append(remainingArgs, arg)
		}
	}
	return decorations, remainingArgs
}

func isDecoration(arg interface{}) bool {
	switch t := reflect.TypeOf(arg); {
	case t == nil:
		return false
	case t == reflect.TypeOf(Offset(0)):
		return true
	case t == reflect.TypeOf(types.CodeLocation{}):
		return true
	case t == reflect.TypeOf(Focus):
		return true
	case t == reflect.TypeOf(Pending):
		return true
	case t == reflect.TypeOf(Serial):
		return true
	case t == reflect.TypeOf(Ordered):
		return true
	case t == reflect.TypeOf(ContinueOnFailure):
		return true
	case t == reflect.TypeOf(OncePerOrdered):
		return true
	case t == reflect.TypeOf(SuppressProgressReporting):
		return true
	case t == reflect.TypeOf(FlakeAttempts(0)):
		return true
	case t == reflect.TypeOf(MustPassRepeatedly(0)):
		return true
	case t == reflect.TypeOf(Labels{}):
		return true
	case t == reflect.TypeOf(PollProgressInterval(0)):
		return true
	case t == reflect.TypeOf(PollProgressAfter(0)):
		return true
	case t == reflect.TypeOf(NodeTimeout(0)):
		return true
	case t == reflect.TypeOf(SpecTimeout(0)):
		return true
	case t == reflect.TypeOf(GracePeriod(0)):
		return true
	case t.Kind() == reflect.Slice && isSliceOfDecorations(arg):
		return true
	default:
		return false
	}
}

func isSliceOfDecorations(slice interface{}) bool {
	vSlice := reflect.ValueOf(slice)
	if vSlice.Len() == 0 {
		return false
	}
	for i := 0; i < vSlice.Len(); i++ {
		if !isDecoration(vSlice.Index(i).Interface()) {
			return false
		}
	}
	return true
}

var contextType = reflect.TypeOf(new(context.Context)).Elem()
var specContextType = reflect.TypeOf(new(SpecContext)).Elem()

func NewNode(deprecationTracker *types.DeprecationTracker, nodeType types.NodeType, text string, args ...interface{}) (Node, []error) {
	baseOffset := 2
	node := Node{
		ID:                   UniqueNodeID(),
		NodeType:             nodeType,
		Text:                 text,
		Labels:               Labels{},
		CodeLocation:         types.NewCodeLocation(baseOffset),
		NestingLevel:         -1,
		PollProgressAfter:    -1,
		PollProgressInterval: -1,
		GracePeriod:          -1,
	}

	errors := []error{}
	appendError := func(err error) {
		if err != nil {
			errors = append(errors, err)
		}
	}

	args = unrollInterfaceSlice(args)

	remainingArgs := []interface{}{}
	//First get the CodeLocation up-to-date
	for _, arg := range args {
		switch v := arg.(type) {
		case Offset:
			node.CodeLocation = types.NewCodeLocation(baseOffset + int(v))
		case types.CodeLocation:
			node.CodeLocation = v
		default:
			remainingArgs = append(remainingArgs, arg)
		}
	}

	labelsSeen := map[string]bool{}
	trackedFunctionError := false
	args = remainingArgs
	remainingArgs = []interface{}{}
	//now process the rest of the args
	for _, arg := range args {
		switch t := reflect.TypeOf(arg); {
		case t == reflect.TypeOf(float64(0)):
			break //ignore deprecated timeouts
		case t == reflect.TypeOf(Focus):
			node.MarkedFocus = bool(arg.(focusType))
			if !nodeType.Is(types.NodeTypesForContainerAndIt) {
				appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "Focus"))
			}
		case t == reflect.TypeOf(Pending):
			node.MarkedPending = bool(arg.(pendingType))
			if !nodeType.Is(types.NodeTypesForContainerAndIt) {
				appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "Pending"))
			}
		case t == reflect.TypeOf(Serial):
			node.MarkedSerial = bool(arg.(serialType))
			if !nodeType.Is(types.NodeTypesForContainerAndIt) {
				appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "Serial"))
			}
		case t == reflect.TypeOf(Ordered):
			node.MarkedOrdered = bool(arg.(orderedType))
			if !nodeType.Is(types.NodeTypeContainer) {
				appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "Ordered"))
			}
		case t == reflect.TypeOf(ContinueOnFailure):
			node.MarkedContinueOnFailure = bool(arg.(continueOnFailureType))
			if !nodeType.Is(types.NodeTypeContainer) {
				appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "ContinueOnFailure"))
			}
		case t == reflect.TypeOf(OncePerOrdered):
			node.MarkedOncePerOrdered = bool(arg.(honorsOrderedType))
			if !nodeType.Is(types.NodeTypeBeforeEach | types.NodeTypeJustBeforeEach | types.NodeTypeAfterEach | types.NodeTypeJustAfterEach) {
				appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "OncePerOrdered"))
			}
		case t == reflect.TypeOf(SuppressProgressReporting):
			deprecationTracker.TrackDeprecation(types.Deprecations.SuppressProgressReporting())
		case t == reflect.TypeOf(FlakeAttempts(0)):
			node.FlakeAttempts = int(arg.(FlakeAttempts))
			if !nodeType.Is(types.NodeTypesForContainerAndIt) {
				appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "FlakeAttempts"))
			}
		case t == reflect.TypeOf(MustPassRepeatedly(0)):
			node.MustPassRepeatedly = int(arg.(MustPassRepeatedly))
			if !nodeType.Is(types.NodeTypesForContainerAndIt) {
				appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "MustPassRepeatedly"))
			}
		case t == reflect.TypeOf(PollProgressAfter(0)):
			node.PollProgressAfter = time.Duration(arg.(PollProgressAfter))
			if nodeType.Is(types.NodeTypeContainer) {
				appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "PollProgressAfter"))
			}
		case t == reflect.TypeOf(PollProgressInterval(0)):
			node.PollProgressInterval = time.Duration(arg.(PollProgressInterval))
			if nodeType.Is(types.NodeTypeContainer) {
				appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "PollProgressInterval"))
			}
		case t == reflect.TypeOf(NodeTimeout(0)):
			node.NodeTimeout = time.Duration(arg.(NodeTimeout))
			if nodeType.Is(types.NodeTypeContainer) {
				appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "NodeTimeout"))
			}
		case t == reflect.TypeOf(SpecTimeout(0)):
			node.SpecTimeout = time.Duration(arg.(SpecTimeout))
			if !nodeType.Is(types.NodeTypeIt) {
				appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "SpecTimeout"))
			}
		case t == reflect.TypeOf(GracePeriod(0)):
			node.GracePeriod = time.Duration(arg.(GracePeriod))
			if nodeType.Is(types.NodeTypeContainer) {
				appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "GracePeriod"))
			}
		case t == reflect.TypeOf(Labels{}):
			if !nodeType.Is(types.NodeTypesForContainerAndIt) {
				appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "Label"))
			}
			for _, label := range arg.(Labels) {
				if !labelsSeen[label] {
					labelsSeen[label] = true
					label, err := types.ValidateAndCleanupLabel(label, node.CodeLocation)
					node.Labels = append(node.Labels, label)
					appendError(err)
				}
			}
		case t.Kind() == reflect.Func:
			if nodeType.Is(types.NodeTypeContainer) {
				if node.Body != nil {
					appendError(types.GinkgoErrors.MultipleBodyFunctions(node.CodeLocation, nodeType))
					trackedFunctionError = true
					break
				}
				if t.NumOut() > 0 || t.NumIn() > 0 {
					appendError(types.GinkgoErrors.InvalidBodyTypeForContainer(t, node.CodeLocation, nodeType))
					trackedFunctionError = true
					break
				}
				body := arg.(func())
				node.Body = func(SpecContext) { body() }
			} else if nodeType.Is(types.NodeTypeReportBeforeEach | types.NodeTypeReportAfterEach) {
				if node.ReportEachBody == nil {
					node.ReportEachBody = arg.(func(types.SpecReport))
				} else {
					appendError(types.GinkgoErrors.MultipleBodyFunctions(node.CodeLocation, nodeType))
					trackedFunctionError = true
					break
				}
			} else if nodeType.Is(types.NodeTypeReportBeforeSuite | types.NodeTypeReportAfterSuite) {
				if node.ReportSuiteBody == nil {
					node.ReportSuiteBody = arg.(func(types.Report))
				} else {
					appendError(types.GinkgoErrors.MultipleBodyFunctions(node.CodeLocation, nodeType))
					trackedFunctionError = true
					break
				}
			} else if nodeType.Is(types.NodeTypeSynchronizedBeforeSuite) {
				if node.SynchronizedBeforeSuiteProc1Body != nil && node.SynchronizedBeforeSuiteAllProcsBody != nil {
					appendError(types.GinkgoErrors.MultipleBodyFunctions(node.CodeLocation, nodeType))
					trackedFunctionError = true
					break
				}
				if node.SynchronizedBeforeSuiteProc1Body == nil {
					body, hasContext := extractSynchronizedBeforeSuiteProc1Body(arg)
					if body == nil {
						appendError(types.GinkgoErrors.InvalidBodyTypeForSynchronizedBeforeSuiteProc1(t, node.CodeLocation))
						trackedFunctionError = true
					}
					node.SynchronizedBeforeSuiteProc1Body, node.SynchronizedBeforeSuiteProc1BodyHasContext = body, hasContext
				} else if node.SynchronizedBeforeSuiteAllProcsBody == nil {
					body, hasContext := extractSynchronizedBeforeSuiteAllProcsBody(arg)
					if body == nil {
						appendError(types.GinkgoErrors.InvalidBodyTypeForSynchronizedBeforeSuiteAllProcs(t, node.CodeLocation))
						trackedFunctionError = true
					}
					node.SynchronizedBeforeSuiteAllProcsBody, node.SynchronizedBeforeSuiteAllProcsBodyHasContext = body, hasContext
				}
			} else if nodeType.Is(types.NodeTypeSynchronizedAfterSuite) {
				if node.SynchronizedAfterSuiteAllProcsBody != nil && node.SynchronizedAfterSuiteProc1Body != nil {
					appendError(types.GinkgoErrors.MultipleBodyFunctions(node.CodeLocation, nodeType))
					trackedFunctionError = true
					break
				}
				body, hasContext := extractBodyFunction(deprecationTracker, node.CodeLocation, arg)
				if body == nil {
					appendError(types.GinkgoErrors.InvalidBodyType(t, node.CodeLocation, nodeType))
					trackedFunctionError = true
					break
				}
				if node.SynchronizedAfterSuiteAllProcsBody == nil {
					node.SynchronizedAfterSuiteAllProcsBody, node.SynchronizedAfterSuiteAllProcsBodyHasContext = body, hasContext
				} else if node.SynchronizedAfterSuiteProc1Body == nil {
					node.SynchronizedAfterSuiteProc1Body, node.SynchronizedAfterSuiteProc1BodyHasContext = body, hasContext
				}
			} else {
				if node.Body != nil {
					appendError(types.GinkgoErrors.MultipleBodyFunctions(node.CodeLocation, nodeType))
					trackedFunctionError = true
					break
				}
				node.Body, node.HasContext = extractBodyFunction(deprecationTracker, node.CodeLocation, arg)
				if node.Body == nil {
					appendError(types.GinkgoErrors.InvalidBodyType(t, node.CodeLocation, nodeType))
					trackedFunctionError = true
					break
				}
			}
		default:
			remainingArgs = append(remainingArgs, arg)
		}
	}

	//validations
	if node.MarkedPending && node.MarkedFocus {
		appendError(types.GinkgoErrors.InvalidDeclarationOfFocusedAndPending(node.CodeLocation, nodeType))
	}

	if node.MarkedContinueOnFailure && !node.MarkedOrdered {
		appendError(types.GinkgoErrors.InvalidContinueOnFailureDecoration(node.CodeLocation))
	}

	hasContext := node.HasContext || node.SynchronizedAfterSuiteProc1BodyHasContext || node.SynchronizedAfterSuiteAllProcsBodyHasContext || node.SynchronizedBeforeSuiteProc1BodyHasContext || node.SynchronizedBeforeSuiteAllProcsBodyHasContext

	if !hasContext && (node.NodeTimeout > 0 || node.SpecTimeout > 0 || node.GracePeriod > 0) && len(errors) == 0 {
		appendError(types.GinkgoErrors.InvalidTimeoutOrGracePeriodForNonContextNode(node.CodeLocation, nodeType))
	}

	if !node.NodeType.Is(types.NodeTypeReportBeforeEach|types.NodeTypeReportAfterEach|types.NodeTypeSynchronizedBeforeSuite|types.NodeTypeSynchronizedAfterSuite|types.NodeTypeReportBeforeSuite|types.NodeTypeReportAfterSuite) && node.Body == nil && !node.MarkedPending && !trackedFunctionError {
		appendError(types.GinkgoErrors.MissingBodyFunction(node.CodeLocation, nodeType))
	}

	if node.NodeType.Is(types.NodeTypeSynchronizedBeforeSuite) && !trackedFunctionError && (node.SynchronizedBeforeSuiteProc1Body == nil || node.SynchronizedBeforeSuiteAllProcsBody == nil) {
		appendError(types.GinkgoErrors.MissingBodyFunction(node.CodeLocation, nodeType))
	}

	if node.NodeType.Is(types.NodeTypeSynchronizedAfterSuite) && !trackedFunctionError && (node.SynchronizedAfterSuiteProc1Body == nil || node.SynchronizedAfterSuiteAllProcsBody == nil) {
		appendError(types.GinkgoErrors.MissingBodyFunction(node.CodeLocation, nodeType))
	}

	for _, arg := range remainingArgs {
		appendError(types.GinkgoErrors.UnknownDecorator(node.CodeLocation, nodeType, arg))
	}

	if node.FlakeAttempts > 0 && node.MustPassRepeatedly > 0 {
		appendError(types.GinkgoErrors.InvalidDeclarationOfFlakeAttemptsAndMustPassRepeatedly(node.CodeLocation, nodeType))
	}

	if len(errors) > 0 {
		return Node{}, errors
	}

	return node, errors
}

var doneType = reflect.TypeOf(make(Done))

func extractBodyFunction(deprecationTracker *types.DeprecationTracker, cl types.CodeLocation, arg interface{}) (func(SpecContext), bool) {
	t := reflect.TypeOf(arg)
	if t.NumOut() > 0 || t.NumIn() > 1 {
		return nil, false
	}
	if t.NumIn() == 1 {
		if t.In(0) == doneType {
			deprecationTracker.TrackDeprecation(types.Deprecations.Async(), cl)
			deprecatedAsyncBody := arg.(func(Done))
			return func(SpecContext) { deprecatedAsyncBody(make(Done)) }, false
		} else if t.In(0).Implements(specContextType) {
			return arg.(func(SpecContext)), true
		} else if t.In(0).Implements(contextType) {
			body := arg.(func(context.Context))
			return func(c SpecContext) { body(c) }, true
		}

		return nil, false
	}

	body := arg.(func())
	return func(SpecContext) { body() }, false
}

var byteType = reflect.TypeOf([]byte{})

func extractSynchronizedBeforeSuiteProc1Body(arg interface{}) (func(SpecContext) []byte, bool) {
	t := reflect.TypeOf(arg)
	v := reflect.ValueOf(arg)

	if t.NumOut() > 1 || t.NumIn() > 1 {
		return nil, false
	} else if t.NumOut() == 1 && t.Out(0) != byteType {
		return nil, false
	} else if t.NumIn() == 1 && !t.In(0).Implements(contextType) {
		return nil, false
	}
	hasContext := t.NumIn() == 1

	return func(c SpecContext) []byte {
		var out []reflect.Value
		if hasContext {
			out = v.Call([]reflect.Value{reflect.ValueOf(c)})
		} else {
			out = v.Call([]reflect.Value{})
		}
		if len(out) == 1 {
			return (out[0].Interface()).([]byte)
		} else {
			return []byte{}
		}
	}, hasContext
}

func extractSynchronizedBeforeSuiteAllProcsBody(arg interface{}) (func(SpecContext, []byte), bool) {
	t := reflect.TypeOf(arg)
	v := reflect.ValueOf(arg)
	hasContext, hasByte := false, false

	if t.NumOut() > 0 || t.NumIn() > 2 {
		return nil, false
	} else if t.NumIn() == 2 && t.In(0).Implements(contextType) && t.In(1) == byteType {
		hasContext, hasByte = true, true
	} else if t.NumIn() == 1 && t.In(0).Implements(contextType) {
		hasContext = true
	} else if t.NumIn() == 1 && t.In(0) == byteType {
		hasByte = true
	} else if t.NumIn() != 0 {
		return nil, false
	}

	return func(c SpecContext, b []byte) {
		in := []reflect.Value{}
		if hasContext {
			in = append(in, reflect.ValueOf(c))
		}
		if hasByte {
			in = append(in, reflect.ValueOf(b))
		}
		v.Call(in)
	}, hasContext
}

var errInterface = reflect.TypeOf((*error)(nil)).Elem()

func NewCleanupNode(deprecationTracker *types.DeprecationTracker, fail func(string, types.CodeLocation), args ...interface{}) (Node, []error) {
	decorations, remainingArgs := PartitionDecorations(args...)
	baseOffset := 2
	cl := types.NewCodeLocation(baseOffset)
	finalArgs := []interface{}{}
	for _, arg := range decorations {
		switch t := reflect.TypeOf(arg); {
		case t == reflect.TypeOf(Offset(0)):
			cl = types.NewCodeLocation(baseOffset + int(arg.(Offset)))
		case t == reflect.TypeOf(types.CodeLocation{}):
			cl = arg.(types.CodeLocation)
		default:
			finalArgs = append(finalArgs, arg)
		}
	}
	finalArgs = append(finalArgs, cl)

	if len(remainingArgs) == 0 {
		return Node{}, []error{types.GinkgoErrors.DeferCleanupInvalidFunction(cl)}
	}

	callback := reflect.ValueOf(remainingArgs[0])
	if !(callback.Kind() == reflect.Func) {
		return Node{}, []error{types.GinkgoErrors.DeferCleanupInvalidFunction(cl)}
	}

	callArgs := []reflect.Value{}
	for _, arg := range remainingArgs[1:] {
		callArgs = append(callArgs, reflect.ValueOf(arg))
	}

	hasContext := false
	t := callback.Type()
	if t.NumIn() > 0 {
		if t.In(0).Implements(specContextType) {
			hasContext = true
		} else if t.In(0).Implements(contextType) && (len(callArgs) == 0 || !callArgs[0].Type().Implements(contextType)) {
			hasContext = true
		}
	}

	handleFailure := func(out []reflect.Value) {
		if len(out) == 0 {
			return
		}
		last := out[len(out)-1]
		if last.Type().Implements(errInterface) && !last.IsNil() {
			fail(fmt.Sprintf("DeferCleanup callback returned error: %v", last), cl)
		}
	}

	if hasContext {
		finalArgs = append(finalArgs, func(c SpecContext) {
			out := callback.Call(append([]reflect.Value{reflect.ValueOf(c)}, callArgs...))
			handleFailure(out)
		})
	} else {
		finalArgs = append(finalArgs, func() {
			out := callback.Call(callArgs)
			handleFailure(out)
		})
	}

	return NewNode(deprecationTracker, types.NodeTypeCleanupInvalid, "", finalArgs...)
}

func (n Node) IsZero() bool {
	return n.ID == 0
}

/* Nodes */
type Nodes []Node

func (n Nodes) CopyAppend(nodes ...Node) Nodes {
	numN := len(n)
	out := make(Nodes, numN+len(nodes))
	for i, node := range n {
		out[i] = node
	}
	for j, node := range nodes {
		out[numN+j] = node
	}
	return out
}

func (n Nodes) SplitAround(pivot Node) (Nodes, Nodes) {
	pivotIdx := len(n)
	for i := range n {
		if n[i].ID == pivot.ID {
			pivotIdx = i
			break
		}
	}
	left := n[:pivotIdx]
	right := Nodes{}
	if pivotIdx+1 < len(n) {
		right = n[pivotIdx+1:]
	}

	return left, right
}

func (n Nodes) FirstNodeWithType(nodeTypes types.NodeType) Node {
	for i := range n {
		if n[i].NodeType.Is(nodeTypes) {
			return n[i]
		}
	}
	return Node{}
}

func (n Nodes) WithType(nodeTypes types.NodeType) Nodes {
	count := 0
	for i := range n {
		if n[i].NodeType.Is(nodeTypes) {
			count++
		}
	}

	out, j := make(Nodes, count), 0
	for i := range n {
		if n[i].NodeType.Is(nodeTypes) {
			out[j] = n[i]
			j++
		}
	}
	return out
}

func (n Nodes) WithoutType(nodeTypes types.NodeType) Nodes {
	count := 0
	for i := range n {
		if !n[i].NodeType.Is(nodeTypes) {
			count++
		}
	}

	out, j := make(Nodes, count), 0
	for i := range n {
		if !n[i].NodeType.Is(nodeTypes) {
			out[j] = n[i]
			j++
		}
	}
	return out
}

func (n Nodes) WithoutNode(nodeToExclude Node) Nodes {
	idxToExclude := len(n)
	for i := range n {
		if n[i].ID == nodeToExclude.ID {
			idxToExclude = i
			break
		}
	}
	if idxToExclude == len(n) {
		return n
	}
	out, j := make(Nodes, len(n)-1), 0
	for i := range n {
		if i == idxToExclude {
			continue
		}
		out[j] = n[i]
		j++
	}
	return out
}

func (n Nodes) Filter(filter func(Node) bool) Nodes {
	trufa, count := make([]bool, len(n)), 0
	for i := range n {
		if filter(n[i]) {
			trufa[i] = true
			count += 1
		}
	}
	out, j := make(Nodes, count), 0
	for i := range n {
		if trufa[i] {
			out[j] = n[i]
			j++
		}
	}
	return out
}

func (n Nodes) FirstSatisfying(filter func(Node) bool) Node {
	for i := range n {
		if filter(n[i]) {
			return n[i]
		}
	}
	return Node{}
}

func (n Nodes) WithinNestingLevel(deepestNestingLevel int) Nodes {
	count := 0
	for i := range n {
		if n[i].NestingLevel <= deepestNestingLevel {
			count++
		}
	}
	out, j := make(Nodes, count), 0
	for i := range n {
		if n[i].NestingLevel <= deepestNestingLevel {
			out[j] = n[i]
			j++
		}
	}
	return out
}

func (n Nodes) SortedByDescendingNestingLevel() Nodes {
	out := make(Nodes, len(n))
	copy(out, n)
	sort.SliceStable(out, func(i int, j int) bool {
		return out[i].NestingLevel > out[j].NestingLevel
	})

	return out
}

func (n Nodes) SortedByAscendingNestingLevel() Nodes {
	out := make(Nodes, len(n))
	copy(out, n)
	sort.SliceStable(out, func(i int, j int) bool {
		return out[i].NestingLevel < out[j].NestingLevel
	})

	return out
}

func (n Nodes) FirstWithNestingLevel(level int) Node {
	for i := range n {
		if n[i].NestingLevel == level {
			return n[i]
		}
	}
	return Node{}
}

func (n Nodes) Reverse() Nodes {
	out := make(Nodes, len(n))
	for i := range n {
		out[len(n)-1-i] = n[i]
	}
	return out
}

func (n Nodes) Texts() []string {
	out := make([]string, len(n))
	for i := range n {
		out[i] = n[i].Text
	}
	return out
}

func (n Nodes) Labels() [][]string {
	out := make([][]string, len(n))
	for i := range n {
		if n[i].Labels == nil {
			out[i] = []string{}
		} else {
			out[i] = []string(n[i].Labels)
		}
	}
	return out
}

func (n Nodes) UnionOfLabels() []string {
	out := []string{}
	seen := map[string]bool{}
	for i := range n {
		for _, label := range n[i].Labels {
			if !seen[label] {
				seen[label] = true
				out = append(out, label)
			}
		}
	}
	return out
}

func (n Nodes) CodeLocations() []types.CodeLocation {
	out := make([]types.CodeLocation, len(n))
	for i := range n {
		out[i] = n[i].CodeLocation
	}
	return out
}

func (n Nodes) BestTextFor(node Node) string {
	if node.Text != "" {
		return node.Text
	}
	parentNestingLevel := node.NestingLevel - 1
	for i := range n {
		if n[i].Text != "" && n[i].NestingLevel == parentNestingLevel {
			return n[i].Text
		}
	}

	return ""
}

func (n Nodes) ContainsNodeID(id uint) bool {
	for i := range n {
		if n[i].ID == id {
			return true
		}
	}
	return false
}

func (n Nodes) HasNodeMarkedPending() bool {
	for i := range n {
		if n[i].MarkedPending {
			return true
		}
	}
	return false
}

func (n Nodes) HasNodeMarkedFocus() bool {
	for i := range n {
		if n[i].MarkedFocus {
			return true
		}
	}
	return false
}

func (n Nodes) HasNodeMarkedSerial() bool {
	for i := range n {
		if n[i].MarkedSerial {
			return true
		}
	}
	return false
}

func (n Nodes) FirstNodeMarkedOrdered() Node {
	for i := range n {
		if n[i].MarkedOrdered {
			return n[i]
		}
	}
	return Node{}
}

func (n Nodes) GetMaxFlakeAttempts() int {
	maxFlakeAttempts := 0
	for i := range n {
		if n[i].FlakeAttempts > 0 {
			maxFlakeAttempts = n[i].FlakeAttempts
		}
	}
	return maxFlakeAttempts
}

func (n Nodes) GetMaxMustPassRepeatedly() int {
	maxMustPassRepeatedly := 0
	for i := range n {
		if n[i].MustPassRepeatedly > 0 {
			maxMustPassRepeatedly = n[i].MustPassRepeatedly
		}
	}
	return maxMustPassRepeatedly
}

func unrollInterfaceSlice(args interface{}) []interface{} {
	v := reflect.ValueOf(args)
	if v.Kind() != reflect.Slice {
		return []interface{}{args}
	}
	out := []interface{}{}
	for i := 0; i < v.Len(); i++ {
		el := reflect.ValueOf(v.Index(i).Interface())
		if el.Kind() == reflect.Slice && el.Type() != reflect.TypeOf(Labels{}) {
			out = append(out, unrollInterfaceSlice(el.Interface())...)
		} else {
			out = append(out, v.Index(i).Interface())
		}
	}
	return out
}
  07070100000957000081A4000000000000000000000001645E367C00001963000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/ordering.go package internal

import (
	"math/rand"
	"sort"

	"github.com/onsi/ginkgo/v2/types"
)

type SortableSpecs struct {
	Specs   Specs
	Indexes []int
}

func NewSortableSpecs(specs Specs) *SortableSpecs {
	indexes := make([]int, len(specs))
	for i := range specs {
		indexes[i] = i
	}
	return &SortableSpecs{
		Specs:   specs,
		Indexes: indexes,
	}
}
func (s *SortableSpecs) Len() int      { return len(s.Indexes) }
func (s *SortableSpecs) Swap(i, j int) { s.Indexes[i], s.Indexes[j] = s.Indexes[j], s.Indexes[i] }
func (s *SortableSpecs) Less(i, j int) bool {
	a, b := s.Specs[s.Indexes[i]], s.Specs[s.Indexes[j]]

	firstOrderedA := a.Nodes.FirstNodeMarkedOrdered()
	firstOrderedB := b.Nodes.FirstNodeMarkedOrdered()
	if firstOrderedA.ID == firstOrderedB.ID && !firstOrderedA.IsZero() {
		// strictly preserve order in ordered containers.  ID will track this as IDs are generated monotonically
		return a.FirstNodeWithType(types.NodeTypeIt).ID < b.FirstNodeWithType(types.NodeTypeIt).ID
	}

	aCLs := a.Nodes.WithType(types.NodeTypesForContainerAndIt).CodeLocations()
	bCLs := b.Nodes.WithType(types.NodeTypesForContainerAndIt).CodeLocations()
	for i := 0; i < len(aCLs) && i < len(bCLs); i++ {
		aCL, bCL := aCLs[i], bCLs[i]
		if aCL.FileName < bCL.FileName {
			return true
		} else if aCL.FileName > bCL.FileName {
			return false
		}
		if aCL.LineNumber < bCL.LineNumber {
			return true
		} else if aCL.LineNumber > bCL.LineNumber {
			return false
		}
	}
	// either everything is equal or we have different lengths of CLs
	if len(aCLs) < len(bCLs) {
		return true
	} else if len(aCLs) > len(bCLs) {
		return false
	}
	// ok, now we are sure everything was equal. so we use the spec text to break ties
	return a.Text() < b.Text()
}

type GroupedSpecIndices []SpecIndices
type SpecIndices []int

func OrderSpecs(specs Specs, suiteConfig types.SuiteConfig) (GroupedSpecIndices, GroupedSpecIndices) {
	/*
		Ginkgo has sophisticated support for randomizing specs.  Specs are guaranteed to have the same
		order for a given seed across test runs.

		By default only top-level containers and specs are shuffled - this makes for a more intuitive debugging
		experience - specs within a given container run in the order they appear in the file.

		Developers can set -randomizeAllSpecs to shuffle _all_ specs.

		In addition, spec containers can be marked as Ordered.  Specs within an Ordered container are never shuffled.

		Finally, specs and spec containers can be marked as Serial.  When running in parallel, serial specs run on Process #1 _after_ all other processes have finished.
	*/

	// Seed a new random source based on thee configured random seed.
	r := rand.New(rand.NewSource(suiteConfig.RandomSeed))

	// first, we sort the entire suite to ensure a deterministic order.  the sort is performed by filename, then line number, and then spec text.  this ensures every parallel process has the exact same spec order and is only necessary to cover the edge case where the user iterates over a map to generate specs.
	sortableSpecs := NewSortableSpecs(specs)
	sort.Sort(sortableSpecs)

	// then we break things into execution groups
	// a group represents a single unit of execution and is a collection of SpecIndices
	// usually a group is just a single spec, however ordered containers must be preserved as a single group
	executionGroupIDs := []uint{}
	executionGroups := map[uint]SpecIndices{}
	for _, idx := range sortableSpecs.Indexes {
		spec := specs[idx]
		groupNode := spec.Nodes.FirstNodeMarkedOrdered()
		if groupNode.IsZero() {
			groupNode = spec.Nodes.FirstNodeWithType(types.NodeTypeIt)
		}
		executionGroups[groupNode.ID] = append(executionGroups[groupNode.ID], idx)
		if len(executionGroups[groupNode.ID]) == 1 {
			executionGroupIDs = append(executionGroupIDs, groupNode.ID)
		}
	}

	// now, we only shuffle all the execution groups if we're randomizing all specs, otherwise
	// we shuffle outermost containers.  so we need to form shufflable groupings of GroupIDs
	shufflableGroupingIDs := []uint{}
	shufflableGroupingIDToGroupIDs := map[uint][]uint{}

	// for each execution group we're going to have to pick a node to represent how the
	// execution group is grouped for shuffling:
	nodeTypesToShuffle := types.NodeTypesForContainerAndIt
	if suiteConfig.RandomizeAllSpecs {
		nodeTypesToShuffle = types.NodeTypeIt
	}

	//so, for each execution group:
	for _, groupID := range executionGroupIDs {
		// pick out a representative spec
		representativeSpec := specs[executionGroups[groupID][0]]

		// and grab the node on the spec that will represent which shufflable group this execution group belongs tu
		shufflableGroupingNode := representativeSpec.Nodes.FirstNodeWithType(nodeTypesToShuffle)

		//add the execution group to its shufflable group
		shufflableGroupingIDToGroupIDs[shufflableGroupingNode.ID] = append(shufflableGroupingIDToGroupIDs[shufflableGroupingNode.ID], groupID)

		//and if it's the first one in
		if len(shufflableGroupingIDToGroupIDs[shufflableGroupingNode.ID]) == 1 {
			// record the shuffleable group ID
			shufflableGroupingIDs = append(shufflableGroupingIDs, shufflableGroupingNode.ID)
		}
	}

	// now we permute the sorted shufflable grouping IDs and build the ordered Groups
	orderedGroups := GroupedSpecIndices{}
	permutation := r.Perm(len(shufflableGroupingIDs))
	for _, j := range permutation {
		//let's get the execution group IDs for this shufflable group:
		executionGroupIDsForJ := shufflableGroupingIDToGroupIDs[shufflableGroupingIDs[j]]
		// and we'll add their associated specindices to the orderedGroups slice:
		for _, executionGroupID := range executionGroupIDsForJ {
			orderedGroups = append(orderedGroups, executionGroups[executionGroupID])
		}
	}

	// If we're running in series, we're done.
	if suiteConfig.ParallelTotal == 1 {
		return orderedGroups, GroupedSpecIndices{}
	}

	// We're running in parallel so we need to partition the ordered groups into a parallelizable set and a serialized set.
	// The parallelizable groups will run across all Ginkgo processes...
	// ...the serial groups will only run on Process #1 after all other processes have exited.
	parallelizableGroups, serialGroups := GroupedSpecIndices{}, GroupedSpecIndices{}
	for _, specIndices := range orderedGroups {
		if specs[specIndices[0]].Nodes.HasNodeMarkedSerial() {
			serialGroups = append(serialGroups, specIndices)
		} else {
			parallelizableGroups = append(parallelizableGroups, specIndices)
		}
	}

	return parallelizableGroups, serialGroups
}
 07070100000958000081A4000000000000000000000001645E367C000023C1000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/output_interceptor.go   package internal

import (
	"bytes"
	"io"
	"os"
	"time"
)

const BAILOUT_TIME = 1 * time.Second
const BAILOUT_MESSAGE = `Ginkgo detected an issue while intercepting output.

When running in parallel, Ginkgo captures stdout and stderr output
and attaches it to the running spec.  It looks like that process is getting
stuck for this suite.

This usually happens if you, or a library you are using, spin up an external
process and set cmd.Stdout = os.Stdout and/or cmd.Stderr = os.Stderr.  This
causes the external process to keep Ginkgo's output interceptor pipe open and
causes output interception to hang.

Ginkgo has detected this and shortcircuited the capture process.  The specs
will continue running after this message however output from the external
process that caused this issue will not be captured.

You have several options to fix this.  In preferred order they are:

1. Pass GinkgoWriter instead of os.Stdout or os.Stderr to your process.
2. Ensure your process exits before the current spec completes.  If your
process is long-lived and must cross spec boundaries, this option won't
work for you.
3. Pause Ginkgo's output interceptor before starting your process and then
resume it after.  Use PauseOutputInterception() and ResumeOutputInterception()
to do this.
4. Set --output-interceptor-mode=none when running your Ginkgo suite.  This will
turn off all output interception but allow specs to run in parallel without this
issue.  You may miss important output if you do this including output from Go's
race detector.

More details on issue #851 - https://github.com/onsi/ginkgo/issues/851
`

/*
The OutputInterceptor is used by to
intercept and capture all stdin and stderr output during a test run.
*/
type OutputInterceptor interface {
	StartInterceptingOutput()
	StartInterceptingOutputAndForwardTo(io.Writer)
	StopInterceptingAndReturnOutput() string

	PauseIntercepting()
	ResumeIntercepting()

	Shutdown()
}

type NoopOutputInterceptor struct{}

func (interceptor NoopOutputInterceptor) StartInterceptingOutput()                      {}
func (interceptor NoopOutputInterceptor) StartInterceptingOutputAndForwardTo(io.Writer) {}
func (interceptor NoopOutputInterceptor) StopInterceptingAndReturnOutput() string       { return "" }
func (interceptor NoopOutputInterceptor) PauseIntercepting()                            {}
func (interceptor NoopOutputInterceptor) ResumeIntercepting()                           {}
func (interceptor NoopOutputInterceptor) Shutdown()                                     {}

type pipePair struct {
	reader *os.File
	writer *os.File
}

func startPipeFactory(pipeChannel chan pipePair, shutdown chan interface{}) {
	for {
		//make the next pipe...
		pair := pipePair{}
		pair.reader, pair.writer, _ = os.Pipe()
		select {
		//...and provide it to the next consumer (they are responsible for closing the files)
		case pipeChannel <- pair:
			continue
		//...or close the files if we were told to shutdown
		case <-shutdown:
			pair.reader.Close()
			pair.writer.Close()
			return
		}
	}
}

type interceptorImplementation interface {
	CreateStdoutStderrClones() (*os.File, *os.File)
	ConnectPipeToStdoutStderr(*os.File)
	RestoreStdoutStderrFromClones(*os.File, *os.File)
	ShutdownClones(*os.File, *os.File)
}

type genericOutputInterceptor struct {
	intercepting bool

	stdoutClone *os.File
	stderrClone *os.File
	pipe        pipePair

	shutdown           chan interface{}
	emergencyBailout   chan interface{}
	pipeChannel        chan pipePair
	interceptedContent chan string

	forwardTo         io.Writer
	accumulatedOutput string

	implementation interceptorImplementation
}

func (interceptor *genericOutputInterceptor) StartInterceptingOutput() {
	interceptor.StartInterceptingOutputAndForwardTo(io.Discard)
}

func (interceptor *genericOutputInterceptor) StartInterceptingOutputAndForwardTo(w io.Writer) {
	if interceptor.intercepting {
		return
	}
	interceptor.accumulatedOutput = ""
	interceptor.forwardTo = w
	interceptor.ResumeIntercepting()
}

func (interceptor *genericOutputInterceptor) StopInterceptingAndReturnOutput() string {
	if interceptor.intercepting {
		interceptor.PauseIntercepting()
	}
	return interceptor.accumulatedOutput
}

func (interceptor *genericOutputInterceptor) ResumeIntercepting() {
	if interceptor.intercepting {
		return
	}
	interceptor.intercepting = true
	if interceptor.stdoutClone == nil {
		interceptor.stdoutClone, interceptor.stderrClone = interceptor.implementation.CreateStdoutStderrClones()
		interceptor.shutdown = make(chan interface{})
		go startPipeFactory(interceptor.pipeChannel, interceptor.shutdown)
	}

	// Now we make a pipe, we'll use this to redirect the input to the 1 and 2 file descriptors (this is how everything else in the world is string to log to stdout and stderr)
	// we get the pipe from our pipe factory.  it runs in the background so we can request the next pipe while the spec being intercepted is running
	interceptor.pipe = <-interceptor.pipeChannel

	interceptor.emergencyBailout = make(chan interface{})

	//Spin up a goroutine to copy data from the pipe into a buffer, this is how we capture any output the user is emitting
	go func() {
		buffer := &bytes.Buffer{}
		destination := io.MultiWriter(buffer, interceptor.forwardTo)
		copyFinished := make(chan interface{})
		reader := interceptor.pipe.reader
		go func() {
			io.Copy(destination, reader)
			reader.Close() // close the read end of the pipe so we don't leak a file descriptor
			close(copyFinished)
		}()
		select {
		case <-copyFinished:
			interceptor.interceptedContent <- buffer.String()
		case <-interceptor.emergencyBailout:
			interceptor.interceptedContent <- ""
		}
	}()

	interceptor.implementation.ConnectPipeToStdoutStderr(interceptor.pipe.writer)
}

func (interceptor *genericOutputInterceptor) PauseIntercepting() {
	if !interceptor.intercepting {
		return
	}
	// first we have to close the write end of the pipe.  To do this we have to close all file descriptors pointing
	// to the write end.  So that would be the pipewriter itself, and FD #1 and FD #2 if we've Dup2'd them
	interceptor.pipe.writer.Close() // the pipewriter itself

	// we also need to stop intercepting. we do that by reconnecting the stdout and stderr file descriptions back to their respective #1 and #2 file descriptors;
	// this also closes #1 and #2 before it points that their original stdout and stderr file descriptions
	interceptor.implementation.RestoreStdoutStderrFromClones(interceptor.stdoutClone, interceptor.stderrClone)

	var content string
	select {
	case content = <-interceptor.interceptedContent:
	case <-time.After(BAILOUT_TIME):
		/*
			By closing all the pipe writer's file descriptors associated with the pipe writer's file description the io.Copy reading from the reader
			should eventually receive an EOF and exit.

			**However**, if the user has spun up an external process and passed in os.Stdout/os.Stderr to cmd.Stdout/cmd.Stderr then the external process
			will have a file descriptor pointing to the pipe writer's file description and it will not close until the external process exits.

			That would leave us hanging here waiting for the io.Copy to close forever.  Instead we invoke this emergency escape valve.  This returns whatever
			content we've got but leaves the io.Copy running.  This ensures the external process can continue writing without hanging at the cost of leaking a goroutine
			and file descriptor (those these will be cleaned up when the process exits).

			We tack on a message to notify the user that they've hit this edgecase and encourage them to address it.
		*/
		close(interceptor.emergencyBailout)
		content = <-interceptor.interceptedContent + BAILOUT_MESSAGE
	}

	interceptor.accumulatedOutput += content
	interceptor.intercepting = false
}

func (interceptor *genericOutputInterceptor) Shutdown() {
	interceptor.PauseIntercepting()

	if interceptor.stdoutClone != nil {
		close(interceptor.shutdown)
		interceptor.implementation.ShutdownClones(interceptor.stdoutClone, interceptor.stderrClone)
		interceptor.stdoutClone = nil
		interceptor.stderrClone = nil
	}
}

/* This is used on windows builds but included here so it can be explicitly tested on unix systems too */
func NewOSGlobalReassigningOutputInterceptor() OutputInterceptor {
	return &genericOutputInterceptor{
		interceptedContent: make(chan string),
		pipeChannel:        make(chan pipePair),
		shutdown:           make(chan interface{}),
		implementation:     &osGlobalReassigningOutputInterceptorImpl{},
	}
}

type osGlobalReassigningOutputInterceptorImpl struct{}

func (impl *osGlobalReassigningOutputInterceptorImpl) CreateStdoutStderrClones() (*os.File, *os.File) {
	return os.Stdout, os.Stderr
}

func (impl *osGlobalReassigningOutputInterceptorImpl) ConnectPipeToStdoutStderr(pipeWriter *os.File) {
	os.Stdout = pipeWriter
	os.Stderr = pipeWriter
}

func (impl *osGlobalReassigningOutputInterceptorImpl) RestoreStdoutStderrFromClones(stdoutClone *os.File, stderrClone *os.File) {
	os.Stdout = stdoutClone
	os.Stderr = stderrClone
}

func (impl *osGlobalReassigningOutputInterceptorImpl) ShutdownClones(_ *os.File, _ *os.File) {
	//noop
}
   07070100000959000081A4000000000000000000000001645E367C00000A8D000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/output_interceptor_unix.go  //go:build freebsd || openbsd || netbsd || dragonfly || darwin || linux || solaris
// +build freebsd openbsd netbsd dragonfly darwin linux solaris

package internal

import (
	"os"

	"golang.org/x/sys/unix"
)

func NewOutputInterceptor() OutputInterceptor {
	return &genericOutputInterceptor{
		interceptedContent: make(chan string),
		pipeChannel:        make(chan pipePair),
		shutdown:           make(chan interface{}),
		implementation:     &dupSyscallOutputInterceptorImpl{},
	}
}

type dupSyscallOutputInterceptorImpl struct{}

func (impl *dupSyscallOutputInterceptorImpl) CreateStdoutStderrClones() (*os.File, *os.File) {
	// To clone stdout and stderr we:
	// First, create two clone file descriptors that point to the stdout and stderr file descriptions
	stdoutCloneFD, _ := unix.Dup(1)
	stderrCloneFD, _ := unix.Dup(2)

	// And then wrap the clone file descriptors in files.
	// One benefit of this (that we don't use yet) is that we can actually write
	// to these files to emit output to the console even though we're intercepting output
	stdoutClone := os.NewFile(uintptr(stdoutCloneFD), "stdout-clone")
	stderrClone := os.NewFile(uintptr(stderrCloneFD), "stderr-clone")

	//these clones remain alive throughout the lifecycle of the suite and don't need to be recreated
	//this speeds things up a bit, actually.
	return stdoutClone, stderrClone
}

func (impl *dupSyscallOutputInterceptorImpl) ConnectPipeToStdoutStderr(pipeWriter *os.File) {
	// To redirect output to our pipe we need to point the 1 and 2 file descriptors (which is how the world tries to log things)
	// to the write end of the pipe.
	// We do this with Dup2 (possibly Dup3 on some architectures) to have file descriptors 1 and 2 point to the same file description as the pipeWriter
	// This effectively shunts data written to stdout and stderr to the write end of our pipe
	unix.Dup2(int(pipeWriter.Fd()), 1)
	unix.Dup2(int(pipeWriter.Fd()), 2)
}

func (impl *dupSyscallOutputInterceptorImpl) RestoreStdoutStderrFromClones(stdoutClone *os.File, stderrClone *os.File) {
	// To restore stdour/stderr from the clones we have the 1 and 2 file descriptors
	// point to the original file descriptions that we saved off in the clones.
	// This has the added benefit of closing the connection between these descriptors and the write end of the pipe
	// which is important to cause the io.Copy on the pipe.Reader to end.
	unix.Dup2(int(stdoutClone.Fd()), 1)
	unix.Dup2(int(stderrClone.Fd()), 2)
}

func (impl *dupSyscallOutputInterceptorImpl) ShutdownClones(stdoutClone *os.File, stderrClone *os.File) {
	// We're done with the clones so we can close them to clean up after ourselves
	stdoutClone.Close()
	stderrClone.Close()
}
   0707010000095A000081A4000000000000000000000001645E367C00000089000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/output_interceptor_win.go   // +build windows

package internal

func NewOutputInterceptor() OutputInterceptor {
	return NewOSGlobalReassigningOutputInterceptor()
}
   0707010000095B000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support    0707010000095C000081A4000000000000000000000001645E367C00000708000000000000000000000000000000000000006000000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/client_server.go   package parallel_support

import (
	"fmt"
	"io"
	"os"
	"time"

	"github.com/onsi/ginkgo/v2/reporters"
	"github.com/onsi/ginkgo/v2/types"
)

type BeforeSuiteState struct {
	Data  []byte
	State types.SpecState
}

type ParallelIndexCounter struct {
	Index int
}

var ErrorGone = fmt.Errorf("gone")
var ErrorFailed = fmt.Errorf("failed")
var ErrorEarly = fmt.Errorf("early")

var POLLING_INTERVAL = 50 * time.Millisecond

type Server interface {
	Start()
	Close()
	Address() string
	RegisterAlive(node int, alive func() bool)
	GetSuiteDone() chan interface{}
	GetOutputDestination() io.Writer
	SetOutputDestination(io.Writer)
}

type Client interface {
	Connect() bool
	Close() error

	PostSuiteWillBegin(report types.Report) error
	PostDidRun(report types.SpecReport) error
	PostSuiteDidEnd(report types.Report) error
	PostReportBeforeSuiteCompleted(state types.SpecState) error
	BlockUntilReportBeforeSuiteCompleted() (types.SpecState, error)
	PostSynchronizedBeforeSuiteCompleted(state types.SpecState, data []byte) error
	BlockUntilSynchronizedBeforeSuiteData() (types.SpecState, []byte, error)
	BlockUntilNonprimaryProcsHaveFinished() error
	BlockUntilAggregatedNonprimaryProcsReport() (types.Report, error)
	FetchNextCounter() (int, error)
	PostAbort() error
	ShouldAbort() bool
	PostEmitProgressReport(report types.ProgressReport) error
	Write(p []byte) (int, error)
}

func NewServer(parallelTotal int, reporter reporters.Reporter) (Server, error) {
	if os.Getenv("GINKGO_PARALLEL_PROTOCOL") == "HTTP" {
		return newHttpServer(parallelTotal, reporter)
	} else {
		return newRPCServer(parallelTotal, reporter)
	}
}

func NewClient(serverHost string) Client {
	if os.Getenv("GINKGO_PARALLEL_PROTOCOL") == "HTTP" {
		return newHttpClient(serverHost)
	} else {
		return newRPCClient(serverHost)
	}
}
0707010000095D000081A4000000000000000000000001645E367C00001119000000000000000000000000000000000000005E00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/http_client.go package parallel_support

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	"net/http"
	"time"

	"github.com/onsi/ginkgo/v2/types"
)

type httpClient struct {
	serverHost string
}

func newHttpClient(serverHost string) *httpClient {
	return &httpClient{
		serverHost: serverHost,
	}
}

func (client *httpClient) Connect() bool {
	resp, err := http.Get(client.serverHost + "/up")
	if err != nil {
		return false
	}
	resp.Body.Close()
	return resp.StatusCode == http.StatusOK
}

func (client *httpClient) Close() error {
	return nil
}

func (client *httpClient) post(path string, data interface{}) error {
	var body io.Reader
	if data != nil {
		encoded, err := json.Marshal(data)
		if err != nil {
			return err
		}
		body = bytes.NewBuffer(encoded)
	}
	resp, err := http.Post(client.serverHost+path, "application/json", body)
	if err != nil {
		return err
	}
	defer resp.Body.Close()
	if resp.StatusCode != http.StatusOK {
		return fmt.Errorf("received unexpected status code %d", resp.StatusCode)
	}
	return nil
}

func (client *httpClient) poll(path string, data interface{}) error {
	for {
		resp, err := http.Get(client.serverHost + path)
		if err != nil {
			return err
		}
		if resp.StatusCode == http.StatusTooEarly {
			resp.Body.Close()
			time.Sleep(POLLING_INTERVAL)
			continue
		}
		defer resp.Body.Close()
		if resp.StatusCode == http.StatusGone {
			return ErrorGone
		}
		if resp.StatusCode == http.StatusFailedDependency {
			return ErrorFailed
		}
		if resp.StatusCode != http.StatusOK {
			return fmt.Errorf("received unexpected status code %d", resp.StatusCode)
		}
		if data != nil {
			return json.NewDecoder(resp.Body).Decode(data)
		}
		return nil
	}
}

func (client *httpClient) PostSuiteWillBegin(report types.Report) error {
	return client.post("/suite-will-begin", report)
}

func (client *httpClient) PostDidRun(report types.SpecReport) error {
	return client.post("/did-run", report)
}

func (client *httpClient) PostSuiteDidEnd(report types.Report) error {
	return client.post("/suite-did-end", report)
}

func (client *httpClient) PostEmitProgressReport(report types.ProgressReport) error {
	return client.post("/progress-report", report)
}

func (client *httpClient) PostReportBeforeSuiteCompleted(state types.SpecState) error {
	return client.post("/report-before-suite-completed", state)
}

func (client *httpClient) BlockUntilReportBeforeSuiteCompleted() (types.SpecState, error) {
	var state types.SpecState
	err := client.poll("/report-before-suite-state", &state)
	if err == ErrorGone {
		return types.SpecStateFailed, nil
	}
	return state, err
}

func (client *httpClient) PostSynchronizedBeforeSuiteCompleted(state types.SpecState, data []byte) error {
	beforeSuiteState := BeforeSuiteState{
		State: state,
		Data:  data,
	}
	return client.post("/before-suite-completed", beforeSuiteState)
}

func (client *httpClient) BlockUntilSynchronizedBeforeSuiteData() (types.SpecState, []byte, error) {
	var beforeSuiteState BeforeSuiteState
	err := client.poll("/before-suite-state", &beforeSuiteState)
	if err == ErrorGone {
		return types.SpecStateInvalid, nil, types.GinkgoErrors.SynchronizedBeforeSuiteDisappearedOnProc1()
	}
	return beforeSuiteState.State, beforeSuiteState.Data, err
}

func (client *httpClient) BlockUntilNonprimaryProcsHaveFinished() error {
	return client.poll("/have-nonprimary-procs-finished", nil)
}

func (client *httpClient) BlockUntilAggregatedNonprimaryProcsReport() (types.Report, error) {
	var report types.Report
	err := client.poll("/aggregated-nonprimary-procs-report", &report)
	if err == ErrorGone {
		return types.Report{}, types.GinkgoErrors.AggregatedReportUnavailableDueToNodeDisappearing()
	}
	return report, err
}

func (client *httpClient) FetchNextCounter() (int, error) {
	var counter ParallelIndexCounter
	err := client.poll("/counter", &counter)
	return counter.Index, err
}

func (client *httpClient) PostAbort() error {
	return client.post("/abort", nil)
}

func (client *httpClient) ShouldAbort() bool {
	err := client.poll("/abort", nil)
	if err == ErrorGone {
		return true
	}
	return false
}

func (client *httpClient) Write(p []byte) (int, error) {
	resp, err := http.Post(client.serverHost+"/emit-output", "text/plain;charset=UTF-8 ", bytes.NewReader(p))
	resp.Body.Close()
	if resp.StatusCode != http.StatusOK {
		return 0, fmt.Errorf("failed to emit output")
	}
	return len(p), err
}
   0707010000095E000081A4000000000000000000000001645E367C00001DCB000000000000000000000000000000000000005E00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/http_server.go /*

The remote package provides the pieces to allow Ginkgo test suites to report to remote listeners.
This is used, primarily, to enable streaming parallel test output but has, in principal, broader applications (e.g. streaming test output to a browser).

*/

package parallel_support

import (
	"encoding/json"
	"io"
	"net"
	"net/http"

	"github.com/onsi/ginkgo/v2/reporters"
	"github.com/onsi/ginkgo/v2/types"
)

/*
httpServer spins up on an automatically selected port and listens for communication from the forwarding reporter.
It then forwards that communication to attached reporters.
*/
type httpServer struct {
	listener net.Listener
	handler  *ServerHandler
}

// Create a new server, automatically selecting a port
func newHttpServer(parallelTotal int, reporter reporters.Reporter) (*httpServer, error) {
	listener, err := net.Listen("tcp", "127.0.0.1:0")
	if err != nil {
		return nil, err
	}
	return &httpServer{
		listener: listener,
		handler:  newServerHandler(parallelTotal, reporter),
	}, nil
}

// Start the server.  You don't need to `go s.Start()`, just `s.Start()`
func (server *httpServer) Start() {
	httpServer := &http.Server{}
	mux := http.NewServeMux()
	httpServer.Handler = mux

	//streaming endpoints
	mux.HandleFunc("/suite-will-begin", server.specSuiteWillBegin)
	mux.HandleFunc("/did-run", server.didRun)
	mux.HandleFunc("/suite-did-end", server.specSuiteDidEnd)
	mux.HandleFunc("/emit-output", server.emitOutput)
	mux.HandleFunc("/progress-report", server.emitProgressReport)

	//synchronization endpoints
	mux.HandleFunc("/report-before-suite-completed", server.handleReportBeforeSuiteCompleted)
	mux.HandleFunc("/report-before-suite-state", server.handleReportBeforeSuiteState)
	mux.HandleFunc("/before-suite-completed", server.handleBeforeSuiteCompleted)
	mux.HandleFunc("/before-suite-state", server.handleBeforeSuiteState)
	mux.HandleFunc("/have-nonprimary-procs-finished", server.handleHaveNonprimaryProcsFinished)
	mux.HandleFunc("/aggregated-nonprimary-procs-report", server.handleAggregatedNonprimaryProcsReport)
	mux.HandleFunc("/counter", server.handleCounter)
	mux.HandleFunc("/up", server.handleUp)
	mux.HandleFunc("/abort", server.handleAbort)

	go httpServer.Serve(server.listener)
}

// Stop the server
func (server *httpServer) Close() {
	server.listener.Close()
}

// The address the server can be reached it.  Pass this into the `ForwardingReporter`.
func (server *httpServer) Address() string {
	return "http://" + server.listener.Addr().String()
}

func (server *httpServer) GetSuiteDone() chan interface{} {
	return server.handler.done
}

func (server *httpServer) GetOutputDestination() io.Writer {
	return server.handler.outputDestination
}

func (server *httpServer) SetOutputDestination(w io.Writer) {
	server.handler.outputDestination = w
}

func (server *httpServer) RegisterAlive(node int, alive func() bool) {
	server.handler.registerAlive(node, alive)
}

//
// Streaming Endpoints
//

// The server will forward all received messages to Ginkgo reporters registered with `RegisterReporters`
func (server *httpServer) decode(writer http.ResponseWriter, request *http.Request, object interface{}) bool {
	defer request.Body.Close()
	if json.NewDecoder(request.Body).Decode(object) != nil {
		writer.WriteHeader(http.StatusBadRequest)
		return false
	}
	return true
}

func (server *httpServer) handleError(err error, writer http.ResponseWriter) bool {
	if err == nil {
		return false
	}
	switch err {
	case ErrorEarly:
		writer.WriteHeader(http.StatusTooEarly)
	case ErrorGone:
		writer.WriteHeader(http.StatusGone)
	case ErrorFailed:
		writer.WriteHeader(http.StatusFailedDependency)
	default:
		writer.WriteHeader(http.StatusInternalServerError)
	}
	return true
}

func (server *httpServer) specSuiteWillBegin(writer http.ResponseWriter, request *http.Request) {
	var report types.Report
	if !server.decode(writer, request, &report) {
		return
	}

	server.handleError(server.handler.SpecSuiteWillBegin(report, voidReceiver), writer)
}

func (server *httpServer) didRun(writer http.ResponseWriter, request *http.Request) {
	var report types.SpecReport
	if !server.decode(writer, request, &report) {
		return
	}

	server.handleError(server.handler.DidRun(report, voidReceiver), writer)
}

func (server *httpServer) specSuiteDidEnd(writer http.ResponseWriter, request *http.Request) {
	var report types.Report
	if !server.decode(writer, request, &report) {
		return
	}
	server.handleError(server.handler.SpecSuiteDidEnd(report, voidReceiver), writer)
}

func (server *httpServer) emitOutput(writer http.ResponseWriter, request *http.Request) {
	output, err := io.ReadAll(request.Body)
	if err != nil {
		writer.WriteHeader(http.StatusInternalServerError)
		return
	}
	var n int
	server.handleError(server.handler.EmitOutput(output, &n), writer)
}

func (server *httpServer) emitProgressReport(writer http.ResponseWriter, request *http.Request) {
	var report types.ProgressReport
	if !server.decode(writer, request, &report) {
		return
	}
	server.handleError(server.handler.EmitProgressReport(report, voidReceiver), writer)
}

func (server *httpServer) handleReportBeforeSuiteCompleted(writer http.ResponseWriter, request *http.Request) {
	var state types.SpecState
	if !server.decode(writer, request, &state) {
		return
	}

	server.handleError(server.handler.ReportBeforeSuiteCompleted(state, voidReceiver), writer)
}

func (server *httpServer) handleReportBeforeSuiteState(writer http.ResponseWriter, request *http.Request) {
	var state types.SpecState
	if server.handleError(server.handler.ReportBeforeSuiteState(voidSender, &state), writer) {
		return
	}
	json.NewEncoder(writer).Encode(state)
}

func (server *httpServer) handleBeforeSuiteCompleted(writer http.ResponseWriter, request *http.Request) {
	var beforeSuiteState BeforeSuiteState
	if !server.decode(writer, request, &beforeSuiteState) {
		return
	}

	server.handleError(server.handler.BeforeSuiteCompleted(beforeSuiteState, voidReceiver), writer)
}

func (server *httpServer) handleBeforeSuiteState(writer http.ResponseWriter, request *http.Request) {
	var beforeSuiteState BeforeSuiteState
	if server.handleError(server.handler.BeforeSuiteState(voidSender, &beforeSuiteState), writer) {
		return
	}
	json.NewEncoder(writer).Encode(beforeSuiteState)
}

func (server *httpServer) handleHaveNonprimaryProcsFinished(writer http.ResponseWriter, request *http.Request) {
	if server.handleError(server.handler.HaveNonprimaryProcsFinished(voidSender, voidReceiver), writer) {
		return
	}
	writer.WriteHeader(http.StatusOK)
}

func (server *httpServer) handleAggregatedNonprimaryProcsReport(writer http.ResponseWriter, request *http.Request) {
	var aggregatedReport types.Report
	if server.handleError(server.handler.AggregatedNonprimaryProcsReport(voidSender, &aggregatedReport), writer) {
		return
	}
	json.NewEncoder(writer).Encode(aggregatedReport)
}

func (server *httpServer) handleCounter(writer http.ResponseWriter, request *http.Request) {
	var n int
	if server.handleError(server.handler.Counter(voidSender, &n), writer) {
		return
	}
	json.NewEncoder(writer).Encode(ParallelIndexCounter{Index: n})
}

func (server *httpServer) handleUp(writer http.ResponseWriter, request *http.Request) {
	writer.WriteHeader(http.StatusOK)
}

func (server *httpServer) handleAbort(writer http.ResponseWriter, request *http.Request) {
	if request.Method == "GET" {
		var shouldAbort bool
		server.handler.ShouldAbort(voidSender, &shouldAbort)
		if shouldAbort {
			writer.WriteHeader(http.StatusGone)
		} else {
			writer.WriteHeader(http.StatusOK)
		}
	} else {
		server.handler.Abort(voidSender, voidReceiver)
	}
}
 0707010000095F000081A4000000000000000000000001645E367C00000E99000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/rpc_client.go  package parallel_support

import (
	"net/rpc"
	"time"

	"github.com/onsi/ginkgo/v2/types"
)

type rpcClient struct {
	serverHost string
	client     *rpc.Client
}

func newRPCClient(serverHost string) *rpcClient {
	return &rpcClient{
		serverHost: serverHost,
	}
}

func (client *rpcClient) Connect() bool {
	var err error
	if client.client != nil {
		return true
	}
	client.client, err = rpc.DialHTTPPath("tcp", client.serverHost, "/")
	if err != nil {
		client.client = nil
		return false
	}
	return true
}

func (client *rpcClient) Close() error {
	return client.client.Close()
}

func (client *rpcClient) poll(method string, data interface{}) error {
	for {
		err := client.client.Call(method, voidSender, data)
		if err == nil {
			return nil
		}
		switch err.Error() {
		case ErrorEarly.Error():
			time.Sleep(POLLING_INTERVAL)
		case ErrorGone.Error():
			return ErrorGone
		case ErrorFailed.Error():
			return ErrorFailed
		default:
			return err
		}
	}
}

func (client *rpcClient) PostSuiteWillBegin(report types.Report) error {
	return client.client.Call("Server.SpecSuiteWillBegin", report, voidReceiver)
}

func (client *rpcClient) PostDidRun(report types.SpecReport) error {
	return client.client.Call("Server.DidRun", report, voidReceiver)
}

func (client *rpcClient) PostSuiteDidEnd(report types.Report) error {
	return client.client.Call("Server.SpecSuiteDidEnd", report, voidReceiver)
}

func (client *rpcClient) Write(p []byte) (int, error) {
	var n int
	err := client.client.Call("Server.EmitOutput", p, &n)
	return n, err
}

func (client *rpcClient) PostEmitProgressReport(report types.ProgressReport) error {
	return client.client.Call("Server.EmitProgressReport", report, voidReceiver)
}

func (client *rpcClient) PostReportBeforeSuiteCompleted(state types.SpecState) error {
	return client.client.Call("Server.ReportBeforeSuiteCompleted", state, voidReceiver)
}

func (client *rpcClient) BlockUntilReportBeforeSuiteCompleted() (types.SpecState, error) {
	var state types.SpecState
	err := client.poll("Server.ReportBeforeSuiteState", &state)
	if err == ErrorGone {
		return types.SpecStateFailed, nil
	}
	return state, err
}

func (client *rpcClient) PostSynchronizedBeforeSuiteCompleted(state types.SpecState, data []byte) error {
	beforeSuiteState := BeforeSuiteState{
		State: state,
		Data:  data,
	}
	return client.client.Call("Server.BeforeSuiteCompleted", beforeSuiteState, voidReceiver)
}

func (client *rpcClient) BlockUntilSynchronizedBeforeSuiteData() (types.SpecState, []byte, error) {
	var beforeSuiteState BeforeSuiteState
	err := client.poll("Server.BeforeSuiteState", &beforeSuiteState)
	if err == ErrorGone {
		return types.SpecStateInvalid, nil, types.GinkgoErrors.SynchronizedBeforeSuiteDisappearedOnProc1()
	}
	return beforeSuiteState.State, beforeSuiteState.Data, err
}

func (client *rpcClient) BlockUntilNonprimaryProcsHaveFinished() error {
	return client.poll("Server.HaveNonprimaryProcsFinished", voidReceiver)
}

func (client *rpcClient) BlockUntilAggregatedNonprimaryProcsReport() (types.Report, error) {
	var report types.Report
	err := client.poll("Server.AggregatedNonprimaryProcsReport", &report)
	if err == ErrorGone {
		return types.Report{}, types.GinkgoErrors.AggregatedReportUnavailableDueToNodeDisappearing()
	}
	return report, err
}

func (client *rpcClient) FetchNextCounter() (int, error) {
	var counter int
	err := client.client.Call("Server.Counter", voidSender, &counter)
	return counter, err
}

func (client *rpcClient) PostAbort() error {
	return client.client.Call("Server.Abort", voidSender, voidReceiver)
}

func (client *rpcClient) ShouldAbort() bool {
	var shouldAbort bool
	client.client.Call("Server.ShouldAbort", voidSender, &shouldAbort)
	return shouldAbort
}
   07070100000960000081A4000000000000000000000001645E367C000007B2000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/rpc_server.go  /*

The remote package provides the pieces to allow Ginkgo test suites to report to remote listeners.
This is used, primarily, to enable streaming parallel test output but has, in principal, broader applications (e.g. streaming test output to a browser).

*/

package parallel_support

import (
	"io"
	"net"
	"net/http"
	"net/rpc"

	"github.com/onsi/ginkgo/v2/reporters"
)

/*
RPCServer spins up on an automatically selected port and listens for communication from the forwarding reporter.
It then forwards that communication to attached reporters.
*/
type RPCServer struct {
	listener net.Listener
	handler  *ServerHandler
}

//Create a new server, automatically selecting a port
func newRPCServer(parallelTotal int, reporter reporters.Reporter) (*RPCServer, error) {
	listener, err := net.Listen("tcp", "127.0.0.1:0")
	if err != nil {
		return nil, err
	}
	return &RPCServer{
		listener: listener,
		handler:  newServerHandler(parallelTotal, reporter),
	}, nil
}

//Start the server.  You don't need to `go s.Start()`, just `s.Start()`
func (server *RPCServer) Start() {
	rpcServer := rpc.NewServer()
	rpcServer.RegisterName("Server", server.handler) //register the handler's methods as the server

	httpServer := &http.Server{}
	httpServer.Handler = rpcServer

	go httpServer.Serve(server.listener)
}

//Stop the server
func (server *RPCServer) Close() {
	server.listener.Close()
}

//The address the server can be reached it.  Pass this into the `ForwardingReporter`.
func (server *RPCServer) Address() string {
	return server.listener.Addr().String()
}

func (server *RPCServer) GetSuiteDone() chan interface{} {
	return server.handler.done
}

func (server *RPCServer) GetOutputDestination() io.Writer {
	return server.handler.outputDestination
}

func (server *RPCServer) SetOutputDestination(w io.Writer) {
	server.handler.outputDestination = w
}

func (server *RPCServer) RegisterAlive(node int, alive func() bool) {
	server.handler.registerAlive(node, alive)
}
  07070100000961000081A4000000000000000000000001645E367C00001773000000000000000000000000000000000000006100000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/server_handler.go  package parallel_support

import (
	"io"
	"os"
	"sync"

	"github.com/onsi/ginkgo/v2/reporters"
	"github.com/onsi/ginkgo/v2/types"
)

type Void struct{}

var voidReceiver *Void = &Void{}
var voidSender Void

// ServerHandler is an RPC-compatible handler that is shared between the http server and the rpc server.
// It handles all the business logic to avoid duplication between the two servers

type ServerHandler struct {
	done                   chan interface{}
	outputDestination      io.Writer
	reporter               reporters.Reporter
	alives                 []func() bool
	lock                   *sync.Mutex
	beforeSuiteState       BeforeSuiteState
	reportBeforeSuiteState types.SpecState
	parallelTotal          int
	counter                int
	counterLock            *sync.Mutex
	shouldAbort            bool

	numSuiteDidBegins int
	numSuiteDidEnds   int
	aggregatedReport  types.Report
	reportHoldingArea []types.SpecReport
}

func newServerHandler(parallelTotal int, reporter reporters.Reporter) *ServerHandler {
	return &ServerHandler{
		reporter:         reporter,
		lock:             &sync.Mutex{},
		counterLock:      &sync.Mutex{},
		alives:           make([]func() bool, parallelTotal),
		beforeSuiteState: BeforeSuiteState{Data: nil, State: types.SpecStateInvalid},

		parallelTotal:     parallelTotal,
		outputDestination: os.Stdout,
		done:              make(chan interface{}),
	}
}

func (handler *ServerHandler) SpecSuiteWillBegin(report types.Report, _ *Void) error {
	handler.lock.Lock()
	defer handler.lock.Unlock()

	handler.numSuiteDidBegins += 1

	// all summaries are identical, so it's fine to simply emit the last one of these
	if handler.numSuiteDidBegins == handler.parallelTotal {
		handler.reporter.SuiteWillBegin(report)

		for _, summary := range handler.reportHoldingArea {
			handler.reporter.WillRun(summary)
			handler.reporter.DidRun(summary)
		}

		handler.reportHoldingArea = nil
	}

	return nil
}

func (handler *ServerHandler) DidRun(report types.SpecReport, _ *Void) error {
	handler.lock.Lock()
	defer handler.lock.Unlock()

	if handler.numSuiteDidBegins == handler.parallelTotal {
		handler.reporter.WillRun(report)
		handler.reporter.DidRun(report)
	} else {
		handler.reportHoldingArea = append(handler.reportHoldingArea, report)
	}

	return nil
}

func (handler *ServerHandler) SpecSuiteDidEnd(report types.Report, _ *Void) error {
	handler.lock.Lock()
	defer handler.lock.Unlock()

	handler.numSuiteDidEnds += 1
	if handler.numSuiteDidEnds == 1 {
		handler.aggregatedReport = report
	} else {
		handler.aggregatedReport = handler.aggregatedReport.Add(report)
	}

	if handler.numSuiteDidEnds == handler.parallelTotal {
		handler.reporter.SuiteDidEnd(handler.aggregatedReport)
		close(handler.done)
	}

	return nil
}

func (handler *ServerHandler) EmitOutput(output []byte, n *int) error {
	var err error
	*n, err = handler.outputDestination.Write(output)
	return err
}

func (handler *ServerHandler) EmitProgressReport(report types.ProgressReport, _ *Void) error {
	handler.lock.Lock()
	defer handler.lock.Unlock()
	handler.reporter.EmitProgressReport(report)
	return nil
}

func (handler *ServerHandler) registerAlive(proc int, alive func() bool) {
	handler.lock.Lock()
	defer handler.lock.Unlock()
	handler.alives[proc-1] = alive
}

func (handler *ServerHandler) procIsAlive(proc int) bool {
	handler.lock.Lock()
	defer handler.lock.Unlock()
	alive := handler.alives[proc-1]
	if alive == nil {
		return true
	}
	return alive()
}

func (handler *ServerHandler) haveNonprimaryProcsFinished() bool {
	for i := 2; i <= handler.parallelTotal; i++ {
		if handler.procIsAlive(i) {
			return false
		}
	}
	return true
}

func (handler *ServerHandler) ReportBeforeSuiteCompleted(reportBeforeSuiteState types.SpecState, _ *Void) error {
	handler.lock.Lock()
	defer handler.lock.Unlock()
	handler.reportBeforeSuiteState = reportBeforeSuiteState

	return nil
}

func (handler *ServerHandler) ReportBeforeSuiteState(_ Void, reportBeforeSuiteState *types.SpecState) error {
	proc1IsAlive := handler.procIsAlive(1)
	handler.lock.Lock()
	defer handler.lock.Unlock()
	if handler.reportBeforeSuiteState == types.SpecStateInvalid {
		if proc1IsAlive {
			return ErrorEarly
		} else {
			return ErrorGone
		}
	}
	*reportBeforeSuiteState = handler.reportBeforeSuiteState
	return nil
}

func (handler *ServerHandler) BeforeSuiteCompleted(beforeSuiteState BeforeSuiteState, _ *Void) error {
	handler.lock.Lock()
	defer handler.lock.Unlock()
	handler.beforeSuiteState = beforeSuiteState

	return nil
}

func (handler *ServerHandler) BeforeSuiteState(_ Void, beforeSuiteState *BeforeSuiteState) error {
	proc1IsAlive := handler.procIsAlive(1)
	handler.lock.Lock()
	defer handler.lock.Unlock()
	if handler.beforeSuiteState.State == types.SpecStateInvalid {
		if proc1IsAlive {
			return ErrorEarly
		} else {
			return ErrorGone
		}
	}
	*beforeSuiteState = handler.beforeSuiteState
	return nil
}

func (handler *ServerHandler) HaveNonprimaryProcsFinished(_ Void, _ *Void) error {
	if handler.haveNonprimaryProcsFinished() {
		return nil
	} else {
		return ErrorEarly
	}
}

func (handler *ServerHandler) AggregatedNonprimaryProcsReport(_ Void, report *types.Report) error {
	if handler.haveNonprimaryProcsFinished() {
		handler.lock.Lock()
		defer handler.lock.Unlock()
		if handler.numSuiteDidEnds == handler.parallelTotal-1 {
			*report = handler.aggregatedReport
			return nil
		} else {
			return ErrorGone
		}
	} else {
		return ErrorEarly
	}
}

func (handler *ServerHandler) Counter(_ Void, counter *int) error {
	handler.counterLock.Lock()
	defer handler.counterLock.Unlock()
	*counter = handler.counter
	handler.counter++
	return nil
}

func (handler *ServerHandler) Abort(_ Void, _ *Void) error {
	handler.lock.Lock()
	defer handler.lock.Unlock()
	handler.shouldAbort = true
	return nil
}

func (handler *ServerHandler) ShouldAbort(_ Void, shouldAbort *bool) error {
	handler.lock.Lock()
	defer handler.lock.Unlock()
	*shouldAbort = handler.shouldAbort
	return nil
}
 07070100000962000081A4000000000000000000000001645E367C00002249000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/progress_report.go  package internal

import (
	"bufio"
	"bytes"
	"context"
	"fmt"
	"io"
	"os"
	"os/signal"
	"path/filepath"
	"runtime"
	"strconv"
	"strings"
	"time"

	"github.com/onsi/ginkgo/v2/types"
)

var _SOURCE_CACHE = map[string][]string{}

type ProgressSignalRegistrar func(func()) context.CancelFunc

func RegisterForProgressSignal(handler func()) context.CancelFunc {
	signalChannel := make(chan os.Signal, 1)
	if len(PROGRESS_SIGNALS) > 0 {
		signal.Notify(signalChannel, PROGRESS_SIGNALS...)
	}
	ctx, cancel := context.WithCancel(context.Background())
	go func() {
		for {
			select {
			case <-signalChannel:
				handler()
			case <-ctx.Done():
				signal.Stop(signalChannel)
				return
			}
		}
	}()

	return cancel
}

type ProgressStepCursor struct {
	Text         string
	CodeLocation types.CodeLocation
	StartTime    time.Time
}

func NewProgressReport(isRunningInParallel bool, report types.SpecReport, currentNode Node, currentNodeStartTime time.Time, currentStep types.SpecEvent, gwOutput string, timelineLocation types.TimelineLocation, additionalReports []string, sourceRoots []string, includeAll bool) (types.ProgressReport, error) {
	pr := types.ProgressReport{
		ParallelProcess:         report.ParallelProcess,
		RunningInParallel:       isRunningInParallel,
		ContainerHierarchyTexts: report.ContainerHierarchyTexts,
		LeafNodeText:            report.LeafNodeText,
		LeafNodeLocation:        report.LeafNodeLocation,
		SpecStartTime:           report.StartTime,

		CurrentNodeType:      currentNode.NodeType,
		CurrentNodeText:      currentNode.Text,
		CurrentNodeLocation:  currentNode.CodeLocation,
		CurrentNodeStartTime: currentNodeStartTime,

		CurrentStepText:      currentStep.Message,
		CurrentStepLocation:  currentStep.CodeLocation,
		CurrentStepStartTime: currentStep.TimelineLocation.Time,

		AdditionalReports: additionalReports,

		CapturedGinkgoWriterOutput: gwOutput,
		TimelineLocation:           timelineLocation,
	}

	goroutines, err := extractRunningGoroutines()
	if err != nil {
		return pr, err
	}
	pr.Goroutines = goroutines

	// now we want to try to find goroutines of interest.  these will be goroutines that have any function calls with code in packagesOfInterest:
	packagesOfInterest := map[string]bool{}
	packageFromFilename := func(filename string) string {
		return filepath.Dir(filename)
	}
	addPackageFor := func(filename string) {
		if filename != "" {
			packagesOfInterest[packageFromFilename(filename)] = true
		}
	}
	isPackageOfInterest := func(filename string) bool {
		stackPackage := packageFromFilename(filename)
		for packageOfInterest := range packagesOfInterest {
			if strings.HasPrefix(stackPackage, packageOfInterest) {
				return true
			}
		}
		return false
	}
	for _, location := range report.ContainerHierarchyLocations {
		addPackageFor(location.FileName)
	}
	addPackageFor(report.LeafNodeLocation.FileName)
	addPackageFor(currentNode.CodeLocation.FileName)
	addPackageFor(currentStep.CodeLocation.FileName)

	//First, we find the SpecGoroutine - this will be the goroutine that includes `runNode`
	specGoRoutineIdx := -1
	runNodeFunctionCallIdx := -1
OUTER:
	for goroutineIdx, goroutine := range pr.Goroutines {
		for functionCallIdx, functionCall := range goroutine.Stack {
			if strings.Contains(functionCall.Function, "ginkgo/v2/internal.(*Suite).runNode.func") {
				specGoRoutineIdx = goroutineIdx
				runNodeFunctionCallIdx = functionCallIdx
				break OUTER
			}
		}
	}

	//Now, we find the first non-Ginkgo function call
	if specGoRoutineIdx > -1 {
		for runNodeFunctionCallIdx >= 0 {
			fn := goroutines[specGoRoutineIdx].Stack[runNodeFunctionCallIdx].Function
			file := goroutines[specGoRoutineIdx].Stack[runNodeFunctionCallIdx].Filename
			// these are all things that could potentially happen from within ginkgo
			if strings.Contains(fn, "ginkgo/v2/internal") || strings.Contains(fn, "reflect.Value") || strings.Contains(file, "ginkgo/table_dsl") || strings.Contains(file, "ginkgo/core_dsl") {
				runNodeFunctionCallIdx--
				continue
			}
			if strings.Contains(goroutines[specGoRoutineIdx].Stack[runNodeFunctionCallIdx].Function, "ginkgo/table_dsl") {

			}
			//found it!  lets add its package of interest
			addPackageFor(goroutines[specGoRoutineIdx].Stack[runNodeFunctionCallIdx].Filename)
			break
		}
	}

	ginkgoEntryPointIdx := -1
OUTER_GINKGO_ENTRY_POINT:
	for goroutineIdx, goroutine := range pr.Goroutines {
		for _, functionCall := range goroutine.Stack {
			if strings.Contains(functionCall.Function, "ginkgo/v2.RunSpecs") {
				ginkgoEntryPointIdx = goroutineIdx
				break OUTER_GINKGO_ENTRY_POINT
			}
		}
	}

	// Now we go through all goroutines and highlight any lines with packages in `packagesOfInterest`
	// Any goroutines with highlighted lines end up in the HighlightGoRoutines
	for goroutineIdx, goroutine := range pr.Goroutines {
		if goroutineIdx == ginkgoEntryPointIdx {
			continue
		}
		if goroutineIdx == specGoRoutineIdx {
			pr.Goroutines[goroutineIdx].IsSpecGoroutine = true
		}
		for functionCallIdx, functionCall := range goroutine.Stack {
			if isPackageOfInterest(functionCall.Filename) {
				goroutine.Stack[functionCallIdx].Highlight = true
				goroutine.Stack[functionCallIdx].Source, goroutine.Stack[functionCallIdx].SourceHighlight = fetchSource(functionCall.Filename, functionCall.Line, 2, sourceRoots)
			}
		}
	}

	if !includeAll {
		goroutines := []types.Goroutine{pr.SpecGoroutine()}
		goroutines = append(goroutines, pr.HighlightedGoroutines()...)
		pr.Goroutines = goroutines
	}

	return pr, nil
}

func extractRunningGoroutines() ([]types.Goroutine, error) {
	var stack []byte
	for size := 64 * 1024; ; size *= 2 {
		stack = make([]byte, size)
		if n := runtime.Stack(stack, true); n < size {
			stack = stack[:n]
			break
		}
	}
	r := bufio.NewReader(bytes.NewReader(stack))
	out := []types.Goroutine{}
	idx := -1
	for {
		line, err := r.ReadString('\n')
		if err == io.EOF {
			break
		}

		line = strings.TrimSuffix(line, "\n")

		//skip blank lines
		if line == "" {
			continue
		}

		//parse headers for new goroutine frames
		if strings.HasPrefix(line, "goroutine") {
			out = append(out, types.Goroutine{})
			idx = len(out) - 1

			line = strings.TrimPrefix(line, "goroutine ")
			line = strings.TrimSuffix(line, ":")
			fields := strings.SplitN(line, " ", 2)
			if len(fields) != 2 {
				return nil, types.GinkgoErrors.FailedToParseStackTrace(fmt.Sprintf("Invalid goroutine frame header: %s", line))
			}
			out[idx].ID, err = strconv.ParseUint(fields[0], 10, 64)
			if err != nil {
				return nil, types.GinkgoErrors.FailedToParseStackTrace(fmt.Sprintf("Invalid goroutine ID: %s", fields[1]))
			}

			out[idx].State = strings.TrimSuffix(strings.TrimPrefix(fields[1], "["), "]")
			continue
		}

		//if we are here we must be at a function call entry in the stack
		functionCall := types.FunctionCall{
			Function: strings.TrimPrefix(line, "created by "), // no need to track 'created by'
		}

		line, err = r.ReadString('\n')
		line = strings.TrimSuffix(line, "\n")
		if err == io.EOF {
			return nil, types.GinkgoErrors.FailedToParseStackTrace(fmt.Sprintf("Invalid function call: %s -- missing file name and line number", functionCall.Function))
		}
		line = strings.TrimLeft(line, " \t")
		delimiterIdx := strings.LastIndex(line, ":")
		if delimiterIdx == -1 {
			return nil, types.GinkgoErrors.FailedToParseStackTrace(fmt.Sprintf("Invalid filename and line number: %s", line))
		}
		functionCall.Filename = line[:delimiterIdx]
		line = strings.Split(line[delimiterIdx+1:], " ")[0]
		lineNumber, err := strconv.ParseInt(line, 10, 64)
		functionCall.Line = int(lineNumber)
		if err != nil {
			return nil, types.GinkgoErrors.FailedToParseStackTrace(fmt.Sprintf("Invalid function call line number: %s\n%s", line, err.Error()))
		}
		out[idx].Stack = append(out[idx].Stack, functionCall)
	}

	return out, nil
}

func fetchSource(filename string, lineNumber int, span int, configuredSourceRoots []string) ([]string, int) {
	if filename == "" {
		return []string{}, 0
	}

	var lines []string
	var ok bool
	if lines, ok = _SOURCE_CACHE[filename]; !ok {
		sourceRoots := []string{""}
		sourceRoots = append(sourceRoots, configuredSourceRoots...)
		var data []byte
		var err error
		var found bool
		for _, root := range sourceRoots {
			data, err = os.ReadFile(filepath.Join(root, filename))
			if err == nil {
				found = true
				break
			}
		}
		if !found {
			return []string{}, 0
		}
		lines = strings.Split(string(data), "\n")
		_SOURCE_CACHE[filename] = lines
	}

	startIndex := lineNumber - span - 1
	endIndex := startIndex + span + span + 1
	if startIndex < 0 {
		startIndex = 0
	}
	if endIndex > len(lines) {
		endIndex = len(lines)
	}
	highlightIndex := lineNumber - 1 - startIndex
	return lines[startIndex:endIndex], highlightIndex
}
   07070100000963000081A4000000000000000000000001645E367C000000E6000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/progress_report_bsd.go  //go:build freebsd || openbsd || netbsd || darwin || dragonfly
// +build freebsd openbsd netbsd darwin dragonfly

package internal

import (
	"os"
	"syscall"
)

var PROGRESS_SIGNALS = []os.Signal{syscall.SIGINFO, syscall.SIGUSR1}
  07070100000964000081A4000000000000000000000001645E367C00000098000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/progress_report_unix.go //go:build linux || solaris
// +build linux solaris

package internal

import (
	"os"
	"syscall"
)

var PROGRESS_SIGNALS = []os.Signal{syscall.SIGUSR1}
07070100000965000081A4000000000000000000000001645E367C0000006A000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/progress_report_win.go  //go:build windows
// +build windows

package internal

import "os"

var PROGRESS_SIGNALS = []os.Signal{}
  07070100000966000081A4000000000000000000000001645E367C00000698000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/progress_reporter_manager.go    package internal

import (
	"context"
	"sort"
	"strings"
	"sync"

	"github.com/onsi/ginkgo/v2/types"
)

type ProgressReporterManager struct {
	lock              *sync.Mutex
	progressReporters map[int]func() string
	prCounter         int
}

func NewProgressReporterManager() *ProgressReporterManager {
	return &ProgressReporterManager{
		progressReporters: map[int]func() string{},
		lock:              &sync.Mutex{},
	}
}

func (prm *ProgressReporterManager) AttachProgressReporter(reporter func() string) func() {
	prm.lock.Lock()
	defer prm.lock.Unlock()
	prm.prCounter += 1
	prCounter := prm.prCounter
	prm.progressReporters[prCounter] = reporter

	return func() {
		prm.lock.Lock()
		defer prm.lock.Unlock()
		delete(prm.progressReporters, prCounter)
	}
}

func (prm *ProgressReporterManager) QueryProgressReporters(ctx context.Context, failer *Failer) []string {
	prm.lock.Lock()
	keys := []int{}
	for key := range prm.progressReporters {
		keys = append(keys, key)
	}
	sort.Ints(keys)
	reporters := []func() string{}
	for _, key := range keys {
		reporters = append(reporters, prm.progressReporters[key])
	}
	prm.lock.Unlock()

	if len(reporters) == 0 {
		return nil
	}
	out := []string{}
	for _, reporter := range reporters {
		reportC := make(chan string, 1)
		go func() {
			defer func() {
				e := recover()
				if e != nil {
					failer.Panic(types.NewCodeLocationWithStackTrace(1), e)
					reportC <- "failed to query attached progress reporter"
				}
			}()
			reportC <- reporter()
		}()
		var report string
		select {
		case report = <-reportC:
		case <-ctx.Done():
			return out
		}
		if strings.TrimSpace(report) != "" {
			out = append(out, report)
		}
	}
	return out
}
07070100000967000081A4000000000000000000000001645E367C00000352000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/report_entry.go package internal

import (
	"time"

	"github.com/onsi/ginkgo/v2/types"
)

type ReportEntry = types.ReportEntry

func NewReportEntry(name string, cl types.CodeLocation, args ...interface{}) (ReportEntry, error) {
	out := ReportEntry{
		Visibility: types.ReportEntryVisibilityAlways,
		Name:       name,
		Location:   cl,
		Time:       time.Now(),
	}
	var didSetValue = false
	for _, arg := range args {
		switch x := arg.(type) {
		case types.ReportEntryVisibility:
			out.Visibility = x
		case types.CodeLocation:
			out.Location = x
		case Offset:
			out.Location = types.NewCodeLocation(2 + int(x))
		case time.Time:
			out.Time = x
		default:
			if didSetValue {
				return ReportEntry{}, types.GinkgoErrors.TooManyReportEntryValues(out.Location, arg)
			}
			out.Value = types.WrapEntryValue(arg)
			didSetValue = true
		}
	}

	return out, nil
}
  07070100000968000081A4000000000000000000000001645E367C000005D3000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/spec.go package internal

import (
	"strings"
	"time"

	"github.com/onsi/ginkgo/v2/types"
)

type Spec struct {
	Nodes Nodes
	Skip  bool
}

func (s Spec) SubjectID() uint {
	return s.Nodes.FirstNodeWithType(types.NodeTypeIt).ID
}

func (s Spec) Text() string {
	texts := []string{}
	for i := range s.Nodes {
		if s.Nodes[i].Text != "" {
			texts = append(texts, s.Nodes[i].Text)
		}
	}
	return strings.Join(texts, " ")
}

func (s Spec) FirstNodeWithType(nodeTypes types.NodeType) Node {
	return s.Nodes.FirstNodeWithType(nodeTypes)
}

func (s Spec) FlakeAttempts() int {
	flakeAttempts := 0
	for i := range s.Nodes {
		if s.Nodes[i].FlakeAttempts > 0 {
			flakeAttempts = s.Nodes[i].FlakeAttempts
		}
	}

	return flakeAttempts
}

func (s Spec) MustPassRepeatedly() int {
	mustPassRepeatedly := 0
	for i := range s.Nodes {
		if s.Nodes[i].MustPassRepeatedly > 0 {
			mustPassRepeatedly = s.Nodes[i].MustPassRepeatedly
		}
	}

	return mustPassRepeatedly
}

func (s Spec) SpecTimeout() time.Duration {
	return s.FirstNodeWithType(types.NodeTypeIt).SpecTimeout
}

type Specs []Spec

func (s Specs) HasAnySpecsMarkedPending() bool {
	for i := range s {
		if s[i].Nodes.HasNodeMarkedPending() {
			return true
		}
	}

	return false
}

func (s Specs) CountWithoutSkip() int {
	n := 0
	for i := range s {
		if !s[i].Skip {
			n += 1
		}
	}
	return n
}

func (s Specs) AtIndices(indices SpecIndices) Specs {
	out := make(Specs, len(indices))
	for i, idx := range indices {
		out[i] = s[idx]
	}
	return out
}
 07070100000969000081A4000000000000000000000001645E367C00000755000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/spec_context.go package internal

import (
	"context"

	"github.com/onsi/ginkgo/v2/types"
)

type SpecContext interface {
	context.Context

	SpecReport() types.SpecReport
	AttachProgressReporter(func() string) func()
}

type specContext struct {
	context.Context
	*ProgressReporterManager

	cancel context.CancelFunc

	suite *Suite
}

/*
SpecContext includes a reference to `suite` and embeds itself in itself as a "GINKGO_SPEC_CONTEXT" value.  This allows users to create child Contexts without having down-stream consumers (e.g. Gomega) lose access to the SpecContext and its methods.  This allows us to build extensions on top of Ginkgo that simply take an all-encompassing context.

Note that while SpecContext is used to enforce deadlines by Ginkgo it is not configured as a context.WithDeadline.  Instead, Ginkgo owns responsibility for cancelling the context when the deadline elapses.

This is because Ginkgo needs finer control over when the context is canceled.  Specifically, Ginkgo needs to generate a ProgressReport before it cancels the context to ensure progress is captured where the spec is currently running.  The only way to avoid a race here is to manually control the cancellation.
*/
func NewSpecContext(suite *Suite) *specContext {
	ctx, cancel := context.WithCancel(context.Background())
	sc := &specContext{
		cancel:                  cancel,
		suite:                   suite,
		ProgressReporterManager: NewProgressReporterManager(),
	}
	ctx = context.WithValue(ctx, "GINKGO_SPEC_CONTEXT", sc) //yes, yes, the go docs say don't use a string for a key... but we'd rather avoid a circular dependency between Gomega and Ginkgo
	sc.Context = ctx                                        //thank goodness for garbage collectors that can handle circular dependencies

	return sc
}

func (sc *specContext) SpecReport() types.SpecReport {
	return sc.suite.CurrentSpecReport()
}
   0707010000096A000081A4000000000000000000000001645E367C00009DD3000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/suite.go    package internal

import (
	"fmt"
	"sync"
	"time"

	"github.com/onsi/ginkgo/v2/internal/interrupt_handler"
	"github.com/onsi/ginkgo/v2/internal/parallel_support"
	"github.com/onsi/ginkgo/v2/reporters"
	"github.com/onsi/ginkgo/v2/types"
	"golang.org/x/net/context"
)

type Phase uint

const (
	PhaseBuildTopLevel Phase = iota
	PhaseBuildTree
	PhaseRun
)

var PROGRESS_REPORTER_DEADLING = 5 * time.Second

type Suite struct {
	tree               *TreeNode
	topLevelContainers Nodes

	*ProgressReporterManager

	phase Phase

	suiteNodes   Nodes
	cleanupNodes Nodes

	failer            *Failer
	reporter          reporters.Reporter
	writer            WriterInterface
	outputInterceptor OutputInterceptor
	interruptHandler  interrupt_handler.InterruptHandlerInterface
	config            types.SuiteConfig
	deadline          time.Time

	skipAll              bool
	report               types.Report
	currentSpecReport    types.SpecReport
	currentNode          Node
	currentNodeStartTime time.Time

	currentSpecContext *specContext

	currentByStep types.SpecEvent
	timelineOrder int

	/*
		We don't need to lock around all operations.  Just those that *could* happen concurrently.

		Suite, generally, only runs one node at a time - and so the possibiity for races is small.  In fact, the presence of a race usually indicates the user has launched a goroutine that has leaked past the node it was launched in.

		However, there are some operations that can happen concurrently:

		- AddReportEntry and CurrentSpecReport can be accessed at any point by the user - including in goroutines that outlive the node intentionally (see, e.g. #1020).  They both form a self-contained read-write pair and so a lock in them is sufficent.
		- generateProgressReport can be invoked at any point in time by an interrupt or a progres poll.  Moreover, it requires access to currentSpecReport, currentNode, currentNodeStartTime, and progressStepCursor.  To make it threadsafe we need to lock around generateProgressReport when we read those variables _and_ everywhere those variables are *written*.  In general we don't need to worry about all possible field writes to these variables as what `generateProgressReport` does with these variables is fairly selective (hence the name of the lock).  Specifically, we dont' need to lock around state and failure message changes on `currentSpecReport` - just the setting of the variable itself.
	*/
	selectiveLock *sync.Mutex

	client parallel_support.Client
}

func NewSuite() *Suite {
	return &Suite{
		tree:                    &TreeNode{},
		phase:                   PhaseBuildTopLevel,
		ProgressReporterManager: NewProgressReporterManager(),

		selectiveLock: &sync.Mutex{},
	}
}

func (suite *Suite) BuildTree() error {
	// During PhaseBuildTopLevel, the top level containers are stored in suite.topLevelCotainers and entered
	// We now enter PhaseBuildTree where these top level containers are entered and added to the spec tree
	suite.phase = PhaseBuildTree
	for _, topLevelContainer := range suite.topLevelContainers {
		err := suite.PushNode(topLevelContainer)
		if err != nil {
			return err
		}
	}
	return nil
}

func (suite *Suite) Run(description string, suiteLabels Labels, suitePath string, failer *Failer, reporter reporters.Reporter, writer WriterInterface, outputInterceptor OutputInterceptor, interruptHandler interrupt_handler.InterruptHandlerInterface, client parallel_support.Client, progressSignalRegistrar ProgressSignalRegistrar, suiteConfig types.SuiteConfig) (bool, bool) {
	if suite.phase != PhaseBuildTree {
		panic("cannot run before building the tree = call suite.BuildTree() first")
	}
	ApplyNestedFocusPolicyToTree(suite.tree)
	specs := GenerateSpecsFromTreeRoot(suite.tree)
	specs, hasProgrammaticFocus := ApplyFocusToSpecs(specs, description, suiteLabels, suiteConfig)

	suite.phase = PhaseRun
	suite.client = client
	suite.failer = failer
	suite.reporter = reporter
	suite.writer = writer
	suite.outputInterceptor = outputInterceptor
	suite.interruptHandler = interruptHandler
	suite.config = suiteConfig

	if suite.config.Timeout > 0 {
		suite.deadline = time.Now().Add(suite.config.Timeout)
	}

	cancelProgressHandler := progressSignalRegistrar(suite.handleProgressSignal)

	success := suite.runSpecs(description, suiteLabels, suitePath, hasProgrammaticFocus, specs)

	cancelProgressHandler()

	return success, hasProgrammaticFocus
}

func (suite *Suite) InRunPhase() bool {
	return suite.phase == PhaseRun
}

/*
  Tree Construction methods

  PushNode is used during PhaseBuildTopLevel and PhaseBuildTree
*/

func (suite *Suite) PushNode(node Node) error {
	if node.NodeType.Is(types.NodeTypeCleanupInvalid | types.NodeTypeCleanupAfterEach | types.NodeTypeCleanupAfterAll | types.NodeTypeCleanupAfterSuite) {
		return suite.pushCleanupNode(node)
	}

	if node.NodeType.Is(types.NodeTypeBeforeSuite | types.NodeTypeAfterSuite | types.NodeTypeSynchronizedBeforeSuite | types.NodeTypeSynchronizedAfterSuite | types.NodeTypeBeforeSuite | types.NodeTypeReportBeforeSuite | types.NodeTypeReportAfterSuite) {
		return suite.pushSuiteNode(node)
	}

	if suite.phase == PhaseRun {
		return types.GinkgoErrors.PushingNodeInRunPhase(node.NodeType, node.CodeLocation)
	}

	if node.MarkedSerial {
		firstOrderedNode := suite.tree.AncestorNodeChain().FirstNodeMarkedOrdered()
		if !firstOrderedNode.IsZero() && !firstOrderedNode.MarkedSerial {
			return types.GinkgoErrors.InvalidSerialNodeInNonSerialOrderedContainer(node.CodeLocation, node.NodeType)
		}
	}

	if node.NodeType.Is(types.NodeTypeBeforeAll | types.NodeTypeAfterAll) {
		firstOrderedNode := suite.tree.AncestorNodeChain().FirstNodeMarkedOrdered()
		if firstOrderedNode.IsZero() {
			return types.GinkgoErrors.SetupNodeNotInOrderedContainer(node.CodeLocation, node.NodeType)
		}
	}

	if node.MarkedContinueOnFailure {
		firstOrderedNode := suite.tree.AncestorNodeChain().FirstNodeMarkedOrdered()
		if !firstOrderedNode.IsZero() {
			return types.GinkgoErrors.InvalidContinueOnFailureDecoration(node.CodeLocation)
		}
	}

	if node.NodeType == types.NodeTypeContainer {
		// During PhaseBuildTopLevel we only track the top level containers without entering them
		// We only enter the top level container nodes during PhaseBuildTree
		//
		// This ensures the tree is only constructed after `go spec` has called `flag.Parse()` and gives
		// the user an opportunity to load suiteConfiguration information in the `TestX` go spec hook just before `RunSpecs`
		// is invoked.  This makes the lifecycle easier to reason about and solves issues like #693.
		if suite.phase == PhaseBuildTopLevel {
			suite.topLevelContainers = append(suite.topLevelContainers, node)
			return nil
		}
		if suite.phase == PhaseBuildTree {
			parentTree := suite.tree
			suite.tree = &TreeNode{Node: node}
			parentTree.AppendChild(suite.tree)
			err := func() (err error) {
				defer func() {
					if e := recover(); e != nil {
						err = types.GinkgoErrors.CaughtPanicDuringABuildPhase(e, node.CodeLocation)
					}
				}()
				node.Body(nil)
				return err
			}()
			suite.tree = parentTree
			return err
		}
	} else {
		suite.tree.AppendChild(&TreeNode{Node: node})
		return nil
	}

	return nil
}

func (suite *Suite) pushSuiteNode(node Node) error {
	if suite.phase == PhaseBuildTree {
		return types.GinkgoErrors.SuiteNodeInNestedContext(node.NodeType, node.CodeLocation)
	}

	if suite.phase == PhaseRun {
		return types.GinkgoErrors.SuiteNodeDuringRunPhase(node.NodeType, node.CodeLocation)
	}

	switch node.NodeType {
	case types.NodeTypeBeforeSuite, types.NodeTypeSynchronizedBeforeSuite:
		existingBefores := suite.suiteNodes.WithType(types.NodeTypeBeforeSuite | types.NodeTypeSynchronizedBeforeSuite)
		if len(existingBefores) > 0 {
			return types.GinkgoErrors.MultipleBeforeSuiteNodes(node.NodeType, node.CodeLocation, existingBefores[0].NodeType, existingBefores[0].CodeLocation)
		}
	case types.NodeTypeAfterSuite, types.NodeTypeSynchronizedAfterSuite:
		existingAfters := suite.suiteNodes.WithType(types.NodeTypeAfterSuite | types.NodeTypeSynchronizedAfterSuite)
		if len(existingAfters) > 0 {
			return types.GinkgoErrors.MultipleAfterSuiteNodes(node.NodeType, node.CodeLocation, existingAfters[0].NodeType, existingAfters[0].CodeLocation)
		}
	}

	suite.suiteNodes = append(suite.suiteNodes, node)
	return nil
}

func (suite *Suite) pushCleanupNode(node Node) error {
	if suite.phase != PhaseRun || suite.currentNode.IsZero() {
		return types.GinkgoErrors.PushingCleanupNodeDuringTreeConstruction(node.CodeLocation)
	}

	switch suite.currentNode.NodeType {
	case types.NodeTypeBeforeSuite, types.NodeTypeSynchronizedBeforeSuite, types.NodeTypeAfterSuite, types.NodeTypeSynchronizedAfterSuite:
		node.NodeType = types.NodeTypeCleanupAfterSuite
	case types.NodeTypeBeforeAll, types.NodeTypeAfterAll:
		node.NodeType = types.NodeTypeCleanupAfterAll
	case types.NodeTypeReportBeforeEach, types.NodeTypeReportAfterEach, types.NodeTypeReportBeforeSuite, types.NodeTypeReportAfterSuite:
		return types.GinkgoErrors.PushingCleanupInReportingNode(node.CodeLocation, suite.currentNode.NodeType)
	case types.NodeTypeCleanupInvalid, types.NodeTypeCleanupAfterEach, types.NodeTypeCleanupAfterAll, types.NodeTypeCleanupAfterSuite:
		return types.GinkgoErrors.PushingCleanupInCleanupNode(node.CodeLocation)
	default:
		node.NodeType = types.NodeTypeCleanupAfterEach
	}

	node.NodeIDWhereCleanupWasGenerated = suite.currentNode.ID
	node.NestingLevel = suite.currentNode.NestingLevel
	suite.cleanupNodes = append(suite.cleanupNodes, node)

	return nil
}

func (suite *Suite) generateTimelineLocation() types.TimelineLocation {
	suite.selectiveLock.Lock()
	defer suite.selectiveLock.Unlock()

	suite.timelineOrder += 1
	return types.TimelineLocation{
		Offset: len(suite.currentSpecReport.CapturedGinkgoWriterOutput) + suite.writer.Len(),
		Order:  suite.timelineOrder,
		Time:   time.Now(),
	}
}

func (suite *Suite) handleSpecEvent(event types.SpecEvent) types.SpecEvent {
	event.TimelineLocation = suite.generateTimelineLocation()
	suite.selectiveLock.Lock()
	suite.currentSpecReport.SpecEvents = append(suite.currentSpecReport.SpecEvents, event)
	suite.selectiveLock.Unlock()
	suite.reporter.EmitSpecEvent(event)
	return event
}

func (suite *Suite) handleSpecEventEnd(eventType types.SpecEventType, startEvent types.SpecEvent) {
	event := startEvent
	event.SpecEventType = eventType
	event.TimelineLocation = suite.generateTimelineLocation()
	event.Duration = event.TimelineLocation.Time.Sub(startEvent.TimelineLocation.Time)
	suite.selectiveLock.Lock()
	suite.currentSpecReport.SpecEvents = append(suite.currentSpecReport.SpecEvents, event)
	suite.selectiveLock.Unlock()
	suite.reporter.EmitSpecEvent(event)
}

func (suite *Suite) By(text string, callback ...func()) error {
	cl := types.NewCodeLocation(2)
	if suite.phase != PhaseRun {
		return types.GinkgoErrors.ByNotDuringRunPhase(cl)
	}

	event := suite.handleSpecEvent(types.SpecEvent{
		SpecEventType: types.SpecEventByStart,
		CodeLocation:  cl,
		Message:       text,
	})
	suite.selectiveLock.Lock()
	suite.currentByStep = event
	suite.selectiveLock.Unlock()

	if len(callback) == 1 {
		defer func() {
			suite.selectiveLock.Lock()
			suite.currentByStep = types.SpecEvent{}
			suite.selectiveLock.Unlock()
			suite.handleSpecEventEnd(types.SpecEventByEnd, event)
		}()
		callback[0]()
	} else if len(callback) > 1 {
		panic("just one callback per By, please")
	}
	return nil
}

/*
Spec Running methods - used during PhaseRun
*/
func (suite *Suite) CurrentSpecReport() types.SpecReport {
	suite.selectiveLock.Lock()
	defer suite.selectiveLock.Unlock()
	report := suite.currentSpecReport
	if suite.writer != nil {
		report.CapturedGinkgoWriterOutput = string(suite.writer.Bytes())
	}
	report.ReportEntries = make([]ReportEntry, len(report.ReportEntries))
	copy(report.ReportEntries, suite.currentSpecReport.ReportEntries)
	return report
}

func (suite *Suite) AddReportEntry(entry ReportEntry) error {
	if suite.phase != PhaseRun {
		return types.GinkgoErrors.AddReportEntryNotDuringRunPhase(entry.Location)
	}
	entry.TimelineLocation = suite.generateTimelineLocation()
	entry.Time = entry.TimelineLocation.Time
	suite.selectiveLock.Lock()
	suite.currentSpecReport.ReportEntries = append(suite.currentSpecReport.ReportEntries, entry)
	suite.selectiveLock.Unlock()
	suite.reporter.EmitReportEntry(entry)
	return nil
}

func (suite *Suite) generateProgressReport(fullReport bool) types.ProgressReport {
	timelineLocation := suite.generateTimelineLocation()
	suite.selectiveLock.Lock()
	defer suite.selectiveLock.Unlock()

	deadline, cancel := context.WithTimeout(context.Background(), PROGRESS_REPORTER_DEADLING)
	defer cancel()
	var additionalReports []string
	if suite.currentSpecContext != nil {
		additionalReports = append(additionalReports, suite.currentSpecContext.QueryProgressReporters(deadline, suite.failer)...)
	}
	additionalReports = append(additionalReports, suite.QueryProgressReporters(deadline, suite.failer)...)
	gwOutput := suite.currentSpecReport.CapturedGinkgoWriterOutput + string(suite.writer.Bytes())
	pr, err := NewProgressReport(suite.isRunningInParallel(), suite.currentSpecReport, suite.currentNode, suite.currentNodeStartTime, suite.currentByStep, gwOutput, timelineLocation, additionalReports, suite.config.SourceRoots, fullReport)

	if err != nil {
		fmt.Printf("{{red}}Failed to generate progress report:{{/}}\n%s\n", err.Error())
	}
	return pr
}

func (suite *Suite) handleProgressSignal() {
	report := suite.generateProgressReport(false)
	report.Message = "{{bold}}You've requested a progress report:{{/}}"
	suite.emitProgressReport(report)
}

func (suite *Suite) emitProgressReport(report types.ProgressReport) {
	suite.selectiveLock.Lock()
	suite.currentSpecReport.ProgressReports = append(suite.currentSpecReport.ProgressReports, report.WithoutCapturedGinkgoWriterOutput())
	suite.selectiveLock.Unlock()

	suite.reporter.EmitProgressReport(report)
	if suite.isRunningInParallel() {
		err := suite.client.PostEmitProgressReport(report)
		if err != nil {
			fmt.Println(err.Error())
		}
	}
}

func (suite *Suite) isRunningInParallel() bool {
	return suite.config.ParallelTotal > 1
}

func (suite *Suite) processCurrentSpecReport() {
	suite.reporter.DidRun(suite.currentSpecReport)
	if suite.isRunningInParallel() {
		suite.client.PostDidRun(suite.currentSpecReport)
	}
	suite.report.SpecReports = append(suite.report.SpecReports, suite.currentSpecReport)

	if suite.currentSpecReport.State.Is(types.SpecStateFailureStates) {
		suite.report.SuiteSucceeded = false
		if suite.config.FailFast || suite.currentSpecReport.State.Is(types.SpecStateAborted) {
			suite.skipAll = true
			if suite.isRunningInParallel() {
				suite.client.PostAbort()
			}
		}
	}
}

func (suite *Suite) runSpecs(description string, suiteLabels Labels, suitePath string, hasProgrammaticFocus bool, specs Specs) bool {
	numSpecsThatWillBeRun := specs.CountWithoutSkip()

	suite.report = types.Report{
		SuitePath:                 suitePath,
		SuiteDescription:          description,
		SuiteLabels:               suiteLabels,
		SuiteConfig:               suite.config,
		SuiteHasProgrammaticFocus: hasProgrammaticFocus,
		PreRunStats: types.PreRunStats{
			TotalSpecs:       len(specs),
			SpecsThatWillRun: numSpecsThatWillBeRun,
		},
		StartTime: time.Now(),
	}

	suite.reporter.SuiteWillBegin(suite.report)
	if suite.isRunningInParallel() {
		suite.client.PostSuiteWillBegin(suite.report)
	}

	suite.report.SuiteSucceeded = true

	suite.runReportSuiteNodesIfNeedBe(types.NodeTypeReportBeforeSuite)

	ranBeforeSuite := suite.report.SuiteSucceeded
	if suite.report.SuiteSucceeded {
		suite.runBeforeSuite(numSpecsThatWillBeRun)
	}

	if suite.report.SuiteSucceeded {
		groupedSpecIndices, serialGroupedSpecIndices := OrderSpecs(specs, suite.config)
		nextIndex := MakeIncrementingIndexCounter()
		if suite.isRunningInParallel() {
			nextIndex = suite.client.FetchNextCounter
		}

		for {
			groupedSpecIdx, err := nextIndex()
			if err != nil {
				suite.report.SpecialSuiteFailureReasons = append(suite.report.SpecialSuiteFailureReasons, fmt.Sprintf("Failed to iterate over specs:\n%s", err.Error()))
				suite.report.SuiteSucceeded = false
				break
			}

			if groupedSpecIdx >= len(groupedSpecIndices) {
				if suite.config.ParallelProcess == 1 && len(serialGroupedSpecIndices) > 0 {
					groupedSpecIndices, serialGroupedSpecIndices, nextIndex = serialGroupedSpecIndices, GroupedSpecIndices{}, MakeIncrementingIndexCounter()
					suite.client.BlockUntilNonprimaryProcsHaveFinished()
					continue
				}
				break
			}

			// the complexity for running groups of specs is very high because of Ordered containers and FlakeAttempts
			// we encapsulate that complexity in the notion of a Group that can run
			// Group is really just an extension of suite so it gets passed a suite and has access to all its internals
			// Note that group is stateful and intended for single use!
			newGroup(suite).run(specs.AtIndices(groupedSpecIndices[groupedSpecIdx]))
		}

		if specs.HasAnySpecsMarkedPending() && suite.config.FailOnPending {
			suite.report.SpecialSuiteFailureReasons = append(suite.report.SpecialSuiteFailureReasons, "Detected pending specs and --fail-on-pending is set")
			suite.report.SuiteSucceeded = false
		}
	}

	if ranBeforeSuite {
		suite.runAfterSuiteCleanup(numSpecsThatWillBeRun)
	}

	interruptStatus := suite.interruptHandler.Status()
	if interruptStatus.Interrupted() {
		suite.report.SpecialSuiteFailureReasons = append(suite.report.SpecialSuiteFailureReasons, interruptStatus.Cause.String())
		suite.report.SuiteSucceeded = false
	}
	suite.report.EndTime = time.Now()
	suite.report.RunTime = suite.report.EndTime.Sub(suite.report.StartTime)
	if !suite.deadline.IsZero() && suite.report.EndTime.After(suite.deadline) {
		suite.report.SpecialSuiteFailureReasons = append(suite.report.SpecialSuiteFailureReasons, "Suite Timeout Elapsed")
		suite.report.SuiteSucceeded = false
	}

	suite.runReportSuiteNodesIfNeedBe(types.NodeTypeReportAfterSuite)
	suite.reporter.SuiteDidEnd(suite.report)
	if suite.isRunningInParallel() {
		suite.client.PostSuiteDidEnd(suite.report)
	}

	return suite.report.SuiteSucceeded
}

func (suite *Suite) runBeforeSuite(numSpecsThatWillBeRun int) {
	beforeSuiteNode := suite.suiteNodes.FirstNodeWithType(types.NodeTypeBeforeSuite | types.NodeTypeSynchronizedBeforeSuite)
	if !beforeSuiteNode.IsZero() && numSpecsThatWillBeRun > 0 {
		suite.selectiveLock.Lock()
		suite.currentSpecReport = types.SpecReport{
			LeafNodeType:      beforeSuiteNode.NodeType,
			LeafNodeLocation:  beforeSuiteNode.CodeLocation,
			ParallelProcess:   suite.config.ParallelProcess,
			RunningInParallel: suite.isRunningInParallel(),
		}
		suite.selectiveLock.Unlock()

		suite.reporter.WillRun(suite.currentSpecReport)
		suite.runSuiteNode(beforeSuiteNode)
		if suite.currentSpecReport.State.Is(types.SpecStateSkipped) {
			suite.report.SpecialSuiteFailureReasons = append(suite.report.SpecialSuiteFailureReasons, "Suite skipped in BeforeSuite")
			suite.skipAll = true
		}
		suite.processCurrentSpecReport()
	}
}

func (suite *Suite) runAfterSuiteCleanup(numSpecsThatWillBeRun int) {
	afterSuiteNode := suite.suiteNodes.FirstNodeWithType(types.NodeTypeAfterSuite | types.NodeTypeSynchronizedAfterSuite)
	if !afterSuiteNode.IsZero() && numSpecsThatWillBeRun > 0 {
		suite.selectiveLock.Lock()
		suite.currentSpecReport = types.SpecReport{
			LeafNodeType:      afterSuiteNode.NodeType,
			LeafNodeLocation:  afterSuiteNode.CodeLocation,
			ParallelProcess:   suite.config.ParallelProcess,
			RunningInParallel: suite.isRunningInParallel(),
		}
		suite.selectiveLock.Unlock()

		suite.reporter.WillRun(suite.currentSpecReport)
		suite.runSuiteNode(afterSuiteNode)
		suite.processCurrentSpecReport()
	}

	afterSuiteCleanup := suite.cleanupNodes.WithType(types.NodeTypeCleanupAfterSuite).Reverse()
	if len(afterSuiteCleanup) > 0 {
		for _, cleanupNode := range afterSuiteCleanup {
			suite.selectiveLock.Lock()
			suite.currentSpecReport = types.SpecReport{
				LeafNodeType:      cleanupNode.NodeType,
				LeafNodeLocation:  cleanupNode.CodeLocation,
				ParallelProcess:   suite.config.ParallelProcess,
				RunningInParallel: suite.isRunningInParallel(),
			}
			suite.selectiveLock.Unlock()

			suite.reporter.WillRun(suite.currentSpecReport)
			suite.runSuiteNode(cleanupNode)
			suite.processCurrentSpecReport()
		}
	}
}

func (suite *Suite) reportEach(spec Spec, nodeType types.NodeType) {
	nodes := spec.Nodes.WithType(nodeType)
	if nodeType == types.NodeTypeReportAfterEach {
		nodes = nodes.SortedByDescendingNestingLevel()
	}
	if nodeType == types.NodeTypeReportBeforeEach {
		nodes = nodes.SortedByAscendingNestingLevel()
	}
	if len(nodes) == 0 {
		return
	}

	for i := range nodes {
		suite.writer.Truncate()
		suite.outputInterceptor.StartInterceptingOutput()
		report := suite.currentSpecReport
		nodes[i].Body = func(SpecContext) {
			nodes[i].ReportEachBody(report)
		}
		state, failure := suite.runNode(nodes[i], time.Time{}, spec.Nodes.BestTextFor(nodes[i]))

		// If the spec is not in a failure state (i.e. it's Passed/Skipped/Pending) and the reporter has failed, override the state.
		// Also, if the reporter is every aborted - always override the state to propagate the abort
		if (!suite.currentSpecReport.State.Is(types.SpecStateFailureStates) && state.Is(types.SpecStateFailureStates)) || state.Is(types.SpecStateAborted) {
			suite.currentSpecReport.State = state
			suite.currentSpecReport.Failure = failure
		}
		suite.currentSpecReport.CapturedGinkgoWriterOutput += string(suite.writer.Bytes())
		suite.currentSpecReport.CapturedStdOutErr += suite.outputInterceptor.StopInterceptingAndReturnOutput()
	}
}

func (suite *Suite) runSuiteNode(node Node) {
	if suite.config.DryRun {
		suite.currentSpecReport.State = types.SpecStatePassed
		return
	}

	suite.writer.Truncate()
	suite.outputInterceptor.StartInterceptingOutput()
	suite.currentSpecReport.StartTime = time.Now()

	var err error
	switch node.NodeType {
	case types.NodeTypeBeforeSuite, types.NodeTypeAfterSuite:
		suite.currentSpecReport.State, suite.currentSpecReport.Failure = suite.runNode(node, time.Time{}, "")
	case types.NodeTypeCleanupAfterSuite:
		if suite.config.ParallelTotal > 1 && suite.config.ParallelProcess == 1 {
			err = suite.client.BlockUntilNonprimaryProcsHaveFinished()
		}
		if err == nil {
			suite.currentSpecReport.State, suite.currentSpecReport.Failure = suite.runNode(node, time.Time{}, "")
		}
	case types.NodeTypeSynchronizedBeforeSuite:
		var data []byte
		var runAllProcs bool
		if suite.config.ParallelProcess == 1 {
			if suite.config.ParallelTotal > 1 {
				suite.outputInterceptor.StopInterceptingAndReturnOutput()
				suite.outputInterceptor.StartInterceptingOutputAndForwardTo(suite.client)
			}
			node.Body = func(c SpecContext) { data = node.SynchronizedBeforeSuiteProc1Body(c) }
			node.HasContext = node.SynchronizedBeforeSuiteProc1BodyHasContext
			suite.currentSpecReport.State, suite.currentSpecReport.Failure = suite.runNode(node, time.Time{}, "")
			if suite.config.ParallelTotal > 1 {
				suite.currentSpecReport.CapturedStdOutErr += suite.outputInterceptor.StopInterceptingAndReturnOutput()
				suite.outputInterceptor.StartInterceptingOutput()
				if suite.currentSpecReport.State.Is(types.SpecStatePassed) {
					err = suite.client.PostSynchronizedBeforeSuiteCompleted(types.SpecStatePassed, data)
				} else {
					err = suite.client.PostSynchronizedBeforeSuiteCompleted(suite.currentSpecReport.State, nil)
				}
			}
			runAllProcs = suite.currentSpecReport.State.Is(types.SpecStatePassed) && err == nil
		} else {
			var proc1State types.SpecState
			proc1State, data, err = suite.client.BlockUntilSynchronizedBeforeSuiteData()
			switch proc1State {
			case types.SpecStatePassed:
				runAllProcs = true
			case types.SpecStateFailed, types.SpecStatePanicked, types.SpecStateTimedout:
				err = types.GinkgoErrors.SynchronizedBeforeSuiteFailedOnProc1()
			case types.SpecStateInterrupted, types.SpecStateAborted, types.SpecStateSkipped:
				suite.currentSpecReport.State = proc1State
			}
		}
		if runAllProcs {
			node.Body = func(c SpecContext) { node.SynchronizedBeforeSuiteAllProcsBody(c, data) }
			node.HasContext = node.SynchronizedBeforeSuiteAllProcsBodyHasContext
			suite.currentSpecReport.State, suite.currentSpecReport.Failure = suite.runNode(node, time.Time{}, "")
		}
	case types.NodeTypeSynchronizedAfterSuite:
		node.Body = node.SynchronizedAfterSuiteAllProcsBody
		node.HasContext = node.SynchronizedAfterSuiteAllProcsBodyHasContext
		suite.currentSpecReport.State, suite.currentSpecReport.Failure = suite.runNode(node, time.Time{}, "")
		if suite.config.ParallelProcess == 1 {
			if suite.config.ParallelTotal > 1 {
				err = suite.client.BlockUntilNonprimaryProcsHaveFinished()
			}
			if err == nil {
				if suite.config.ParallelTotal > 1 {
					suite.currentSpecReport.CapturedStdOutErr += suite.outputInterceptor.StopInterceptingAndReturnOutput()
					suite.outputInterceptor.StartInterceptingOutputAndForwardTo(suite.client)
				}

				node.Body = node.SynchronizedAfterSuiteProc1Body
				node.HasContext = node.SynchronizedAfterSuiteProc1BodyHasContext
				state, failure := suite.runNode(node, time.Time{}, "")
				if suite.currentSpecReport.State.Is(types.SpecStatePassed) {
					suite.currentSpecReport.State, suite.currentSpecReport.Failure = state, failure
				}
			}
		}
	}

	if err != nil && !suite.currentSpecReport.State.Is(types.SpecStateFailureStates) {
		suite.currentSpecReport.State, suite.currentSpecReport.Failure = types.SpecStateFailed, suite.failureForLeafNodeWithMessage(node, err.Error())
		suite.reporter.EmitFailure(suite.currentSpecReport.State, suite.currentSpecReport.Failure)
	}

	suite.currentSpecReport.EndTime = time.Now()
	suite.currentSpecReport.RunTime = suite.currentSpecReport.EndTime.Sub(suite.currentSpecReport.StartTime)
	suite.currentSpecReport.CapturedGinkgoWriterOutput = string(suite.writer.Bytes())
	suite.currentSpecReport.CapturedStdOutErr += suite.outputInterceptor.StopInterceptingAndReturnOutput()
}

func (suite *Suite) runReportSuiteNodesIfNeedBe(nodeType types.NodeType) {
	nodes := suite.suiteNodes.WithType(nodeType)
	// only run ReportAfterSuite on proc 1
	if nodeType.Is(types.NodeTypeReportAfterSuite) && suite.config.ParallelProcess != 1 {
		return
	}
	// if we're running ReportBeforeSuite on proc > 1 - we should wait until proc 1 has completed
	if nodeType.Is(types.NodeTypeReportBeforeSuite) && suite.config.ParallelProcess != 1 && len(nodes) > 0 {
		state, err := suite.client.BlockUntilReportBeforeSuiteCompleted()
		if err != nil || state.Is(types.SpecStateFailed) {
			suite.report.SuiteSucceeded = false
		}
		return
	}

	for _, node := range nodes {
		suite.selectiveLock.Lock()
		suite.currentSpecReport = types.SpecReport{
			LeafNodeType:      node.NodeType,
			LeafNodeLocation:  node.CodeLocation,
			LeafNodeText:      node.Text,
			ParallelProcess:   suite.config.ParallelProcess,
			RunningInParallel: suite.isRunningInParallel(),
		}
		suite.selectiveLock.Unlock()

		suite.reporter.WillRun(suite.currentSpecReport)
		suite.runReportSuiteNode(node, suite.report)
		suite.processCurrentSpecReport()
	}

	// if we're running ReportBeforeSuite and we're running in parallel - we shuld tell the other procs that we're done
	if nodeType.Is(types.NodeTypeReportBeforeSuite) && suite.isRunningInParallel() && len(nodes) > 0 {
		if suite.report.SuiteSucceeded {
			suite.client.PostReportBeforeSuiteCompleted(types.SpecStatePassed)
		} else {
			suite.client.PostReportBeforeSuiteCompleted(types.SpecStateFailed)
		}
	}
}

func (suite *Suite) runReportSuiteNode(node Node, report types.Report) {
	suite.writer.Truncate()
	suite.outputInterceptor.StartInterceptingOutput()
	suite.currentSpecReport.StartTime = time.Now()

	// if we're running a ReportAfterSuite in parallel (on proc 1) we (a) wait until other procs have exited and
	// (b) always fetch the latest report as prior ReportAfterSuites will contribute to it
	if node.NodeType.Is(types.NodeTypeReportAfterSuite) && suite.isRunningInParallel() {
		aggregatedReport, err := suite.client.BlockUntilAggregatedNonprimaryProcsReport()
		if err != nil {
			suite.currentSpecReport.State, suite.currentSpecReport.Failure = types.SpecStateFailed, suite.failureForLeafNodeWithMessage(node, err.Error())
			suite.reporter.EmitFailure(suite.currentSpecReport.State, suite.currentSpecReport.Failure)
			return
		}
		report = report.Add(aggregatedReport)
	}

	node.Body = func(SpecContext) { node.ReportSuiteBody(report) }
	suite.currentSpecReport.State, suite.currentSpecReport.Failure = suite.runNode(node, time.Time{}, "")

	suite.currentSpecReport.EndTime = time.Now()
	suite.currentSpecReport.RunTime = suite.currentSpecReport.EndTime.Sub(suite.currentSpecReport.StartTime)
	suite.currentSpecReport.CapturedGinkgoWriterOutput = string(suite.writer.Bytes())
	suite.currentSpecReport.CapturedStdOutErr = suite.outputInterceptor.StopInterceptingAndReturnOutput()
}

func (suite *Suite) runNode(node Node, specDeadline time.Time, text string) (types.SpecState, types.Failure) {
	if node.NodeType.Is(types.NodeTypeCleanupAfterEach | types.NodeTypeCleanupAfterAll | types.NodeTypeCleanupAfterSuite) {
		suite.cleanupNodes = suite.cleanupNodes.WithoutNode(node)
	}

	interruptStatus := suite.interruptHandler.Status()
	if interruptStatus.Level == interrupt_handler.InterruptLevelBailOut {
		return types.SpecStateSkipped, types.Failure{}
	}
	if interruptStatus.Level == interrupt_handler.InterruptLevelReportOnly && !node.NodeType.Is(types.NodeTypesAllowedDuringReportInterrupt) {
		return types.SpecStateSkipped, types.Failure{}
	}
	if interruptStatus.Level == interrupt_handler.InterruptLevelCleanupAndReport && !node.NodeType.Is(types.NodeTypesAllowedDuringReportInterrupt|types.NodeTypesAllowedDuringCleanupInterrupt) {
		return types.SpecStateSkipped, types.Failure{}
	}

	suite.selectiveLock.Lock()
	suite.currentNode = node
	suite.currentNodeStartTime = time.Now()
	suite.currentByStep = types.SpecEvent{}
	suite.selectiveLock.Unlock()
	defer func() {
		suite.selectiveLock.Lock()
		suite.currentNode = Node{}
		suite.currentNodeStartTime = time.Time{}
		suite.selectiveLock.Unlock()
	}()

	if text == "" {
		text = "TOP-LEVEL"
	}
	event := suite.handleSpecEvent(types.SpecEvent{
		SpecEventType: types.SpecEventNodeStart,
		NodeType:      node.NodeType,
		Message:       text,
		CodeLocation:  node.CodeLocation,
	})
	defer func() {
		suite.handleSpecEventEnd(types.SpecEventNodeEnd, event)
	}()

	var failure types.Failure
	failure.FailureNodeType, failure.FailureNodeLocation = node.NodeType, node.CodeLocation
	if node.NodeType.Is(types.NodeTypeIt) || node.NodeType.Is(types.NodeTypesForSuiteLevelNodes) {
		failure.FailureNodeContext = types.FailureNodeIsLeafNode
	} else if node.NestingLevel <= 0 {
		failure.FailureNodeContext = types.FailureNodeAtTopLevel
	} else {
		failure.FailureNodeContext, failure.FailureNodeContainerIndex = types.FailureNodeInContainer, node.NestingLevel-1
	}
	var outcome types.SpecState

	gracePeriod := suite.config.GracePeriod
	if node.GracePeriod >= 0 {
		gracePeriod = node.GracePeriod
	}

	now := time.Now()
	deadline := suite.deadline
	timeoutInPlay := "suite"
	if deadline.IsZero() || (!specDeadline.IsZero() && specDeadline.Before(deadline)) {
		deadline = specDeadline
		timeoutInPlay = "spec"
	}
	if node.NodeTimeout > 0 && (deadline.IsZero() || deadline.Sub(now) > node.NodeTimeout) {
		deadline = now.Add(node.NodeTimeout)
		timeoutInPlay = "node"
	}
	if (!deadline.IsZero() && deadline.Before(now)) || interruptStatus.Interrupted() {
		//we're out of time already.  let's wait for a NodeTimeout if we have it, or GracePeriod if we don't
		if node.NodeTimeout > 0 {
			deadline = now.Add(node.NodeTimeout)
			timeoutInPlay = "node"
		} else {
			deadline = now.Add(gracePeriod)
			timeoutInPlay = "grace period"
		}
	}

	if !node.HasContext {
		// this maps onto the pre-context behavior:
		// - an interrupted node exits immediately.  with this, context-less nodes that are in a spec with a SpecTimeout and/or are interrupted by other means will simply exit immediately after the timeout/interrupt
		// - clean up nodes have up to GracePeriod (formerly hard-coded at 30s) to complete before they are interrupted
		gracePeriod = 0
	}

	sc := NewSpecContext(suite)
	defer sc.cancel()

	suite.selectiveLock.Lock()
	suite.currentSpecContext = sc
	suite.selectiveLock.Unlock()

	var deadlineChannel <-chan time.Time
	if !deadline.IsZero() {
		deadlineChannel = time.After(deadline.Sub(now))
	}
	var gracePeriodChannel <-chan time.Time

	outcomeC := make(chan types.SpecState)
	failureC := make(chan types.Failure)

	go func() {
		finished := false
		defer func() {
			if e := recover(); e != nil || !finished {
				suite.failer.Panic(types.NewCodeLocationWithStackTrace(2), e)
			}

			outcomeFromRun, failureFromRun := suite.failer.Drain()
			failureFromRun.TimelineLocation = suite.generateTimelineLocation()
			outcomeC <- outcomeFromRun
			failureC <- failureFromRun
		}()

		node.Body(sc)
		finished = true
	}()

	// progress polling timer and channel
	var emitProgressNow <-chan time.Time
	var progressPoller *time.Timer
	var pollProgressAfter, pollProgressInterval = suite.config.PollProgressAfter, suite.config.PollProgressInterval
	if node.PollProgressAfter >= 0 {
		pollProgressAfter = node.PollProgressAfter
	}
	if node.PollProgressInterval >= 0 {
		pollProgressInterval = node.PollProgressInterval
	}
	if pollProgressAfter > 0 {
		progressPoller = time.NewTimer(pollProgressAfter)
		emitProgressNow = progressPoller.C
		defer progressPoller.Stop()
	}

	// now we wait for an outcome, an interrupt, a timeout, or a progress poll
	for {
		select {
		case outcomeFromRun := <-outcomeC:
			failureFromRun := <-failureC
			if outcome.Is(types.SpecStateInterrupted | types.SpecStateTimedout) {
				// we've already been interrupted/timed out.  we just managed to actually exit
				// before the grace period elapsed
				// if we have a failure message we attach it as an additional failure
				if outcomeFromRun != types.SpecStatePassed {
					additionalFailure := types.AdditionalFailure{
						State:   outcomeFromRun,
						Failure: failure, //we make a copy - this will include all the configuration set up above...
					}
					//...and then we update the failure with the details from failureFromRun
					additionalFailure.Failure.Location, additionalFailure.Failure.ForwardedPanic, additionalFailure.Failure.TimelineLocation = failureFromRun.Location, failureFromRun.ForwardedPanic, failureFromRun.TimelineLocation
					additionalFailure.Failure.ProgressReport = types.ProgressReport{}
					if outcome == types.SpecStateTimedout {
						additionalFailure.Failure.Message = fmt.Sprintf("A %s timeout occurred and then the following failure was recorded in the timedout node before it exited:\n%s", timeoutInPlay, failureFromRun.Message)
					} else {
						additionalFailure.Failure.Message = fmt.Sprintf("An interrupt occurred and then the following failure was recorded in the interrupted node before it exited:\n%s", failureFromRun.Message)
					}
					suite.reporter.EmitFailure(additionalFailure.State, additionalFailure.Failure)
					failure.AdditionalFailure = &additionalFailure
				}
				return outcome, failure
			}
			if outcomeFromRun.Is(types.SpecStatePassed) {
				return outcomeFromRun, types.Failure{}
			} else {
				failure.Message, failure.Location, failure.ForwardedPanic, failure.TimelineLocation = failureFromRun.Message, failureFromRun.Location, failureFromRun.ForwardedPanic, failureFromRun.TimelineLocation
				suite.reporter.EmitFailure(outcomeFromRun, failure)
				return outcomeFromRun, failure
			}
		case <-gracePeriodChannel:
			if node.HasContext && outcome.Is(types.SpecStateTimedout) {
				report := suite.generateProgressReport(false)
				report.Message = "{{bold}}{{orange}}A running node failed to exit in time{{/}}\nGinkgo is moving on but a node has timed out and failed to exit before its grace period elapsed.  The node has now leaked and is running in the background.\nHere's a current progress report:"
				suite.emitProgressReport(report)
			}
			return outcome, failure
		case <-deadlineChannel:
			// we're out of time - the outcome is a timeout and we capture the failure and progress report
			outcome = types.SpecStateTimedout
			failure.Message, failure.Location, failure.TimelineLocation = fmt.Sprintf("A %s timeout occurred", timeoutInPlay), node.CodeLocation, suite.generateTimelineLocation()
			failure.ProgressReport = suite.generateProgressReport(false).WithoutCapturedGinkgoWriterOutput()
			failure.ProgressReport.Message = fmt.Sprintf("{{bold}}This is the Progress Report generated when the %s timeout occurred:{{/}}", timeoutInPlay)
			deadlineChannel = nil
			suite.reporter.EmitFailure(outcome, failure)

			// tell the spec to stop.  it's important we generate the progress report first to make sure we capture where
			// the spec is actually stuck
			sc.cancel()
			//and now we wait for the grace period
			gracePeriodChannel = time.After(gracePeriod)
		case <-interruptStatus.Channel:
			interruptStatus = suite.interruptHandler.Status()
			deadlineChannel = nil // don't worry about deadlines, time's up now

			failureTimelineLocation := suite.generateTimelineLocation()
			progressReport := suite.generateProgressReport(true)

			if outcome == types.SpecStateInvalid {
				outcome = types.SpecStateInterrupted
				failure.Message, failure.Location, failure.TimelineLocation = interruptStatus.Message(), node.CodeLocation, failureTimelineLocation
				if interruptStatus.ShouldIncludeProgressReport() {
					failure.ProgressReport = progressReport.WithoutCapturedGinkgoWriterOutput()
					failure.ProgressReport.Message = "{{bold}}This is the Progress Report generated when the interrupt was received:{{/}}"
				}
				suite.reporter.EmitFailure(outcome, failure)
			}

			progressReport = progressReport.WithoutOtherGoroutines()
			sc.cancel()

			if interruptStatus.Level == interrupt_handler.InterruptLevelBailOut {
				if interruptStatus.ShouldIncludeProgressReport() {
					progressReport.Message = fmt.Sprintf("{{bold}}{{orange}}%s{{/}}\n{{bold}}{{red}}Final interrupt received{{/}}; Ginkgo will not run any cleanup or reporting nodes and will terminate as soon as possible.\nHere's a current progress report:", interruptStatus.Message())
					suite.emitProgressReport(progressReport)
				}
				return outcome, failure
			}
			if interruptStatus.ShouldIncludeProgressReport() {
				if interruptStatus.Level == interrupt_handler.InterruptLevelCleanupAndReport {
					progressReport.Message = fmt.Sprintf("{{bold}}{{orange}}%s{{/}}\nFirst interrupt received; Ginkgo will run any cleanup and reporting nodes but will skip all remaining specs.  {{bold}}Interrupt again to skip cleanup{{/}}.\nHere's a current progress report:", interruptStatus.Message())
				} else if interruptStatus.Level == interrupt_handler.InterruptLevelReportOnly {
					progressReport.Message = fmt.Sprintf("{{bold}}{{orange}}%s{{/}}\nSecond interrupt received; Ginkgo will run any reporting nodes but will skip all remaining specs and cleanup nodes.  {{bold}}Interrupt again to bail immediately{{/}}.\nHere's a current progress report:", interruptStatus.Message())
				}
				suite.emitProgressReport(progressReport)
			}

			if gracePeriodChannel == nil {
				// we haven't given grace yet... so let's
				gracePeriodChannel = time.After(gracePeriod)
			} else {
				// we've already given grace.  time's up.  now.
				return outcome, failure
			}
		case <-emitProgressNow:
			report := suite.generateProgressReport(false)
			report.Message = "{{bold}}Automatically polling progress:{{/}}"
			suite.emitProgressReport(report)
			if pollProgressInterval > 0 {
				progressPoller.Reset(pollProgressInterval)
			}
		}
	}
}

// TODO: search for usages and consider if reporter.EmitFailure() is necessary
func (suite *Suite) failureForLeafNodeWithMessage(node Node, message string) types.Failure {
	return types.Failure{
		Message:             message,
		Location:            node.CodeLocation,
		TimelineLocation:    suite.generateTimelineLocation(),
		FailureNodeContext:  types.FailureNodeIsLeafNode,
		FailureNodeType:     node.NodeType,
		FailureNodeLocation: node.CodeLocation,
	}
}

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}
 0707010000096B000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/testingtproxy   0707010000096C000081A4000000000000000000000001645E367C00001821000000000000000000000000000000000000005F00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/testingtproxy/testing_t_proxy.go    package testingtproxy

import (
	"fmt"
	"io"
	"os"

	"github.com/onsi/ginkgo/v2/formatter"
	"github.com/onsi/ginkgo/v2/internal"
	"github.com/onsi/ginkgo/v2/types"
)

type failFunc func(message string, callerSkip ...int)
type skipFunc func(message string, callerSkip ...int)
type cleanupFunc func(args ...any)
type reportFunc func() types.SpecReport
type addReportEntryFunc func(names string, args ...any)
type ginkgoWriterInterface interface {
	io.Writer

	Print(a ...interface{})
	Printf(format string, a ...interface{})
	Println(a ...interface{})
}
type ginkgoRecoverFunc func()
type attachProgressReporterFunc func(func() string) func()

func New(writer ginkgoWriterInterface, fail failFunc, skip skipFunc, cleanup cleanupFunc, report reportFunc, addReportEntry addReportEntryFunc, ginkgoRecover ginkgoRecoverFunc, attachProgressReporter attachProgressReporterFunc, randomSeed int64, parallelProcess int, parallelTotal int, noColor bool, offset int) *ginkgoTestingTProxy {
	return &ginkgoTestingTProxy{
		fail:                   fail,
		offset:                 offset,
		writer:                 writer,
		skip:                   skip,
		cleanup:                cleanup,
		report:                 report,
		addReportEntry:         addReportEntry,
		ginkgoRecover:          ginkgoRecover,
		attachProgressReporter: attachProgressReporter,
		randomSeed:             randomSeed,
		parallelProcess:        parallelProcess,
		parallelTotal:          parallelTotal,
		f:                      formatter.NewWithNoColorBool(noColor),
	}
}

type ginkgoTestingTProxy struct {
	fail                   failFunc
	skip                   skipFunc
	cleanup                cleanupFunc
	report                 reportFunc
	offset                 int
	writer                 ginkgoWriterInterface
	addReportEntry         addReportEntryFunc
	ginkgoRecover          ginkgoRecoverFunc
	attachProgressReporter attachProgressReporterFunc
	randomSeed             int64
	parallelProcess        int
	parallelTotal          int
	f                      formatter.Formatter
}

// basic testing.T support

func (t *ginkgoTestingTProxy) Cleanup(f func()) {
	t.cleanup(f, internal.Offset(1))
}

func (t *ginkgoTestingTProxy) Setenv(key, value string) {
	originalValue, exists := os.LookupEnv(key)
	if exists {
		t.cleanup(os.Setenv, key, originalValue, internal.Offset(1))
	} else {
		t.cleanup(os.Unsetenv, key, internal.Offset(1))
	}

	err := os.Setenv(key, value)
	if err != nil {
		t.fail(fmt.Sprintf("Failed to set environment variable: %v", err), 1)
	}
}

func (t *ginkgoTestingTProxy) Error(args ...interface{}) {
	t.fail(fmt.Sprintln(args...), t.offset)
}

func (t *ginkgoTestingTProxy) Errorf(format string, args ...interface{}) {
	t.fail(fmt.Sprintf(format, args...), t.offset)
}

func (t *ginkgoTestingTProxy) Fail() {
	t.fail("failed", t.offset)
}

func (t *ginkgoTestingTProxy) FailNow() {
	t.fail("failed", t.offset)
}

func (t *ginkgoTestingTProxy) Failed() bool {
	return t.report().Failed()
}

func (t *ginkgoTestingTProxy) Fatal(args ...interface{}) {
	t.fail(fmt.Sprintln(args...), t.offset)
}

func (t *ginkgoTestingTProxy) Fatalf(format string, args ...interface{}) {
	t.fail(fmt.Sprintf(format, args...), t.offset)
}

func (t *ginkgoTestingTProxy) Helper() {
	types.MarkAsHelper(1)
}

func (t *ginkgoTestingTProxy) Log(args ...interface{}) {
	fmt.Fprintln(t.writer, args...)
}

func (t *ginkgoTestingTProxy) Logf(format string, args ...interface{}) {
	t.Log(fmt.Sprintf(format, args...))
}

func (t *ginkgoTestingTProxy) Name() string {
	return t.report().FullText()
}

func (t *ginkgoTestingTProxy) Parallel() {
	// No-op
}

func (t *ginkgoTestingTProxy) Skip(args ...interface{}) {
	t.skip(fmt.Sprintln(args...), t.offset)
}

func (t *ginkgoTestingTProxy) SkipNow() {
	t.skip("skip", t.offset)
}

func (t *ginkgoTestingTProxy) Skipf(format string, args ...interface{}) {
	t.skip(fmt.Sprintf(format, args...), t.offset)
}

func (t *ginkgoTestingTProxy) Skipped() bool {
	return t.report().State.Is(types.SpecStateSkipped)
}

func (t *ginkgoTestingTProxy) TempDir() string {
	tmpDir, err := os.MkdirTemp("", "ginkgo")
	if err != nil {
		t.fail(fmt.Sprintf("Failed to create temporary directory: %v", err), 1)
		return ""
	}
	t.cleanup(os.RemoveAll, tmpDir)

	return tmpDir
}

// FullGinkgoTInterface
func (t *ginkgoTestingTProxy) AddReportEntryVisibilityAlways(name string, args ...any) {
	finalArgs := []any{internal.Offset(1), types.ReportEntryVisibilityAlways}
	t.addReportEntry(name, append(finalArgs, args...)...)
}
func (t *ginkgoTestingTProxy) AddReportEntryVisibilityFailureOrVerbose(name string, args ...any) {
	finalArgs := []any{internal.Offset(1), types.ReportEntryVisibilityFailureOrVerbose}
	t.addReportEntry(name, append(finalArgs, args...)...)
}
func (t *ginkgoTestingTProxy) AddReportEntryVisibilityNever(name string, args ...any) {
	finalArgs := []any{internal.Offset(1), types.ReportEntryVisibilityNever}
	t.addReportEntry(name, append(finalArgs, args...)...)
}
func (t *ginkgoTestingTProxy) Print(a ...any) {
	t.writer.Print(a...)
}
func (t *ginkgoTestingTProxy) Printf(format string, a ...any) {
	t.writer.Printf(format, a...)
}
func (t *ginkgoTestingTProxy) Println(a ...any) {
	t.writer.Println(a...)
}
func (t *ginkgoTestingTProxy) F(format string, args ...any) string {
	return t.f.F(format, args...)
}
func (t *ginkgoTestingTProxy) Fi(indentation uint, format string, args ...any) string {
	return t.f.Fi(indentation, format, args...)
}
func (t *ginkgoTestingTProxy) Fiw(indentation uint, maxWidth uint, format string, args ...any) string {
	return t.f.Fiw(indentation, maxWidth, format, args...)
}
func (t *ginkgoTestingTProxy) GinkgoRecover() {
	t.ginkgoRecover()
}
func (t *ginkgoTestingTProxy) DeferCleanup(args ...any) {
	finalArgs := []any{internal.Offset(1)}
	t.cleanup(append(finalArgs, args...)...)
}
func (t *ginkgoTestingTProxy) RandomSeed() int64 {
	return t.randomSeed
}
func (t *ginkgoTestingTProxy) ParallelProcess() int {
	return t.parallelProcess
}
func (t *ginkgoTestingTProxy) ParallelTotal() int {
	return t.parallelTotal
}
func (t *ginkgoTestingTProxy) AttachProgressReporter(f func() string) func() {
	return t.attachProgressReporter(f)
}
   0707010000096D000081A4000000000000000000000001645E367C0000077D000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/tree.go package internal

import "github.com/onsi/ginkgo/v2/types"

type TreeNode struct {
	Node     Node
	Parent   *TreeNode
	Children TreeNodes
}

func (tn *TreeNode) AppendChild(child *TreeNode) {
	tn.Children = append(tn.Children, child)
	child.Parent = tn
}

func (tn *TreeNode) AncestorNodeChain() Nodes {
	if tn.Parent == nil || tn.Parent.Node.IsZero() {
		return Nodes{tn.Node}
	}
	return append(tn.Parent.AncestorNodeChain(), tn.Node)
}

type TreeNodes []*TreeNode

func (tn TreeNodes) Nodes() Nodes {
	out := make(Nodes, len(tn))
	for i := range tn {
		out[i] = tn[i].Node
	}
	return out
}

func (tn TreeNodes) WithID(id uint) *TreeNode {
	for i := range tn {
		if tn[i].Node.ID == id {
			return tn[i]
		}
	}

	return nil
}

func GenerateSpecsFromTreeRoot(tree *TreeNode) Specs {
	var walkTree func(nestingLevel int, lNodes Nodes, rNodes Nodes, trees TreeNodes) Specs
	walkTree = func(nestingLevel int, lNodes Nodes, rNodes Nodes, trees TreeNodes) Specs {
		tests := Specs{}

		nodes := make(Nodes, len(trees))
		for i := range trees {
			nodes[i] = trees[i].Node
			nodes[i].NestingLevel = nestingLevel
		}

		for i := range nodes {
			if !nodes[i].NodeType.Is(types.NodeTypesForContainerAndIt) {
				continue
			}
			leftNodes, rightNodes := nodes.SplitAround(nodes[i])
			leftNodes = leftNodes.WithoutType(types.NodeTypesForContainerAndIt)
			rightNodes = rightNodes.WithoutType(types.NodeTypesForContainerAndIt)

			leftNodes = lNodes.CopyAppend(leftNodes...)
			rightNodes = rightNodes.CopyAppend(rNodes...)

			if nodes[i].NodeType.Is(types.NodeTypeIt) {
				tests = append(tests, Spec{Nodes: leftNodes.CopyAppend(nodes[i]).CopyAppend(rightNodes...)})
			} else {
				treeNode := trees.WithID(nodes[i].ID)
				tests = append(tests, walkTree(nestingLevel+1, leftNodes.CopyAppend(nodes[i]), rightNodes, treeNode.Children)...)
			}
		}

		return tests
	}

	return walkTree(0, Nodes{}, Nodes{}, tree.Children)
}
   0707010000096E000081A4000000000000000000000001645E367C000009D0000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/internal/writer.go   package internal

import (
	"bytes"
	"fmt"
	"io"
	"sync"

	"github.com/go-logr/logr"
	"github.com/go-logr/logr/funcr"
)

type WriterMode uint

const (
	WriterModeStreamAndBuffer WriterMode = iota
	WriterModeBufferOnly
)

type WriterInterface interface {
	io.Writer

	Truncate()
	Bytes() []byte
	Len() int
}

// Writer implements WriterInterface and GinkgoWriterInterface
type Writer struct {
	buffer    *bytes.Buffer
	outWriter io.Writer
	lock      *sync.Mutex
	mode      WriterMode

	streamIndent []byte
	indentNext   bool

	teeWriters []io.Writer
}

func NewWriter(outWriter io.Writer) *Writer {
	return &Writer{
		buffer:       &bytes.Buffer{},
		lock:         &sync.Mutex{},
		outWriter:    outWriter,
		mode:         WriterModeStreamAndBuffer,
		streamIndent: []byte("  "),
		indentNext:   true,
	}
}

func (w *Writer) SetMode(mode WriterMode) {
	w.lock.Lock()
	defer w.lock.Unlock()
	w.mode = mode
}

func (w *Writer) Len() int {
	w.lock.Lock()
	defer w.lock.Unlock()
	return w.buffer.Len()
}

var newline = []byte("\n")

func (w *Writer) Write(b []byte) (n int, err error) {
	w.lock.Lock()
	defer w.lock.Unlock()

	for _, teeWriter := range w.teeWriters {
		teeWriter.Write(b)
	}

	if w.mode == WriterModeStreamAndBuffer {
		line, remaining, found := []byte{}, b, false
		for len(remaining) > 0 {
			line, remaining, found = bytes.Cut(remaining, newline)
			if len(line) > 0 {
				if w.indentNext {
					w.outWriter.Write(w.streamIndent)
					w.indentNext = false
				}
				w.outWriter.Write(line)
			}
			if found {
				w.outWriter.Write(newline)
				w.indentNext = true
			}
		}
	}
	return w.buffer.Write(b)
}

func (w *Writer) Truncate() {
	w.lock.Lock()
	defer w.lock.Unlock()
	w.buffer.Reset()
}

func (w *Writer) Bytes() []byte {
	w.lock.Lock()
	defer w.lock.Unlock()
	b := w.buffer.Bytes()
	copied := make([]byte, len(b))
	copy(copied, b)
	return copied
}

// GinkgoWriterInterface
func (w *Writer) TeeTo(writer io.Writer) {
	w.lock.Lock()
	defer w.lock.Unlock()

	w.teeWriters = append(w.teeWriters, writer)
}

func (w *Writer) ClearTeeWriters() {
	w.lock.Lock()
	defer w.lock.Unlock()

	w.teeWriters = []io.Writer{}
}

func (w *Writer) Print(a ...interface{}) {
	fmt.Fprint(w, a...)
}

func (w *Writer) Printf(format string, a ...interface{}) {
	fmt.Fprintf(w, format, a...)
}

func (w *Writer) Println(a ...interface{}) {
	fmt.Fprintln(w, a...)
}

func GinkgoLogrFunc(writer *Writer) logr.Logger {
	return funcr.New(func(prefix, args string) {
		writer.Printf("%s", args)
	}, funcr.Options{})
}
0707010000096F000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/reporters    07070100000970000081A4000000000000000000000001645E367C00006A33000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/reporters/default_reporter.go    /*
Ginkgo's Default Reporter

A number of command line flags are available to tweak Ginkgo's default output.

These are documented [here](http://onsi.github.io/ginkgo/#running_tests)
*/
package reporters

import (
	"fmt"
	"io"
	"runtime"
	"strings"
	"sync"
	"time"

	"github.com/onsi/ginkgo/v2/formatter"
	"github.com/onsi/ginkgo/v2/types"
)

type DefaultReporter struct {
	conf   types.ReporterConfig
	writer io.Writer

	// managing the emission stream
	lastCharWasNewline       bool
	lastEmissionWasDelimiter bool

	// rendering
	specDenoter  string
	retryDenoter string
	formatter    formatter.Formatter

	runningInParallel bool
	lock              *sync.Mutex
}

func NewDefaultReporterUnderTest(conf types.ReporterConfig, writer io.Writer) *DefaultReporter {
	reporter := NewDefaultReporter(conf, writer)
	reporter.formatter = formatter.New(formatter.ColorModePassthrough)

	return reporter
}

func NewDefaultReporter(conf types.ReporterConfig, writer io.Writer) *DefaultReporter {
	reporter := &DefaultReporter{
		conf:   conf,
		writer: writer,

		lastCharWasNewline:       true,
		lastEmissionWasDelimiter: false,

		specDenoter:  "•",
		retryDenoter: "↺",
		formatter:    formatter.NewWithNoColorBool(conf.NoColor),
		lock:         &sync.Mutex{},
	}
	if runtime.GOOS == "windows" {
		reporter.specDenoter = "+"
		reporter.retryDenoter = "R"
	}

	return reporter
}

/* The Reporter Interface */

func (r *DefaultReporter) SuiteWillBegin(report types.Report) {
	if r.conf.Verbosity().Is(types.VerbosityLevelSuccinct) {
		r.emit(r.f("[%d] {{bold}}%s{{/}} ", report.SuiteConfig.RandomSeed, report.SuiteDescription))
		if len(report.SuiteLabels) > 0 {
			r.emit(r.f("{{coral}}[%s]{{/}} ", strings.Join(report.SuiteLabels, ", ")))
		}
		r.emit(r.f("- %d/%d specs ", report.PreRunStats.SpecsThatWillRun, report.PreRunStats.TotalSpecs))
		if report.SuiteConfig.ParallelTotal > 1 {
			r.emit(r.f("- %d procs ", report.SuiteConfig.ParallelTotal))
		}
	} else {
		banner := r.f("Running Suite: %s - %s", report.SuiteDescription, report.SuitePath)
		r.emitBlock(banner)
		bannerWidth := len(banner)
		if len(report.SuiteLabels) > 0 {
			labels := strings.Join(report.SuiteLabels, ", ")
			r.emitBlock(r.f("{{coral}}[%s]{{/}} ", labels))
			if len(labels)+2 > bannerWidth {
				bannerWidth = len(labels) + 2
			}
		}
		r.emitBlock(strings.Repeat("=", bannerWidth))

		out := r.f("Random Seed: {{bold}}%d{{/}}", report.SuiteConfig.RandomSeed)
		if report.SuiteConfig.RandomizeAllSpecs {
			out += r.f(" - will randomize all specs")
		}
		r.emitBlock(out)
		r.emit("\n")
		r.emitBlock(r.f("Will run {{bold}}%d{{/}} of {{bold}}%d{{/}} specs", report.PreRunStats.SpecsThatWillRun, report.PreRunStats.TotalSpecs))
		if report.SuiteConfig.ParallelTotal > 1 {
			r.emitBlock(r.f("Running in parallel across {{bold}}%d{{/}} processes", report.SuiteConfig.ParallelTotal))
		}
	}
}

func (r *DefaultReporter) SuiteDidEnd(report types.Report) {
	failures := report.SpecReports.WithState(types.SpecStateFailureStates)
	if len(failures) > 0 {
		r.emitBlock("\n")
		if len(failures) > 1 {
			r.emitBlock(r.f("{{red}}{{bold}}Summarizing %d Failures:{{/}}", len(failures)))
		} else {
			r.emitBlock(r.f("{{red}}{{bold}}Summarizing 1 Failure:{{/}}"))
		}
		for _, specReport := range failures {
			highlightColor, heading := "{{red}}", "[FAIL]"
			switch specReport.State {
			case types.SpecStatePanicked:
				highlightColor, heading = "{{magenta}}", "[PANICKED!]"
			case types.SpecStateAborted:
				highlightColor, heading = "{{coral}}", "[ABORTED]"
			case types.SpecStateTimedout:
				highlightColor, heading = "{{orange}}", "[TIMEDOUT]"
			case types.SpecStateInterrupted:
				highlightColor, heading = "{{orange}}", "[INTERRUPTED]"
			}
			locationBlock := r.codeLocationBlock(specReport, highlightColor, false, true)
			r.emitBlock(r.fi(1, highlightColor+"%s{{/}} %s", heading, locationBlock))
		}
	}

	//summarize the suite
	if r.conf.Verbosity().Is(types.VerbosityLevelSuccinct) && report.SuiteSucceeded {
		r.emit(r.f(" {{green}}SUCCESS!{{/}} %s ", report.RunTime))
		return
	}

	r.emitBlock("\n")
	color, status := "{{green}}{{bold}}", "SUCCESS!"
	if !report.SuiteSucceeded {
		color, status = "{{red}}{{bold}}", "FAIL!"
	}

	specs := report.SpecReports.WithLeafNodeType(types.NodeTypeIt) //exclude any suite setup nodes
	r.emitBlock(r.f(color+"Ran %d of %d Specs in %.3f seconds{{/}}",
		specs.CountWithState(types.SpecStatePassed)+specs.CountWithState(types.SpecStateFailureStates),
		report.PreRunStats.TotalSpecs,
		report.RunTime.Seconds()),
	)

	switch len(report.SpecialSuiteFailureReasons) {
	case 0:
		r.emit(r.f(color+"%s{{/}} -- ", status))
	case 1:
		r.emit(r.f(color+"%s - %s{{/}} -- ", status, report.SpecialSuiteFailureReasons[0]))
	default:
		r.emitBlock(r.f(color+"%s - %s{{/}}\n", status, strings.Join(report.SpecialSuiteFailureReasons, ", ")))
	}

	if len(specs) == 0 && report.SpecReports.WithLeafNodeType(types.NodeTypeBeforeSuite|types.NodeTypeSynchronizedBeforeSuite).CountWithState(types.SpecStateFailureStates) > 0 {
		r.emit(r.f("{{cyan}}{{bold}}A BeforeSuite node failed so all tests were skipped.{{/}}\n"))
	} else {
		r.emit(r.f("{{green}}{{bold}}%d Passed{{/}} | ", specs.CountWithState(types.SpecStatePassed)))
		r.emit(r.f("{{red}}{{bold}}%d Failed{{/}} | ", specs.CountWithState(types.SpecStateFailureStates)))
		if specs.CountOfFlakedSpecs() > 0 {
			r.emit(r.f("{{light-yellow}}{{bold}}%d Flaked{{/}} | ", specs.CountOfFlakedSpecs()))
		}
		if specs.CountOfRepeatedSpecs() > 0 {
			r.emit(r.f("{{light-yellow}}{{bold}}%d Repeated{{/}} | ", specs.CountOfRepeatedSpecs()))
		}
		r.emit(r.f("{{yellow}}{{bold}}%d Pending{{/}} | ", specs.CountWithState(types.SpecStatePending)))
		r.emit(r.f("{{cyan}}{{bold}}%d Skipped{{/}}\n", specs.CountWithState(types.SpecStateSkipped)))
	}
}

func (r *DefaultReporter) WillRun(report types.SpecReport) {
	v := r.conf.Verbosity()
	if v.LT(types.VerbosityLevelVerbose) || report.State.Is(types.SpecStatePending|types.SpecStateSkipped) || report.RunningInParallel {
		return
	}

	r.emitDelimiter(0)
	r.emitBlock(r.f(r.codeLocationBlock(report, "{{/}}", v.Is(types.VerbosityLevelVeryVerbose), false)))
}

func (r *DefaultReporter) DidRun(report types.SpecReport) {
	v := r.conf.Verbosity()
	inParallel := report.RunningInParallel

	header := r.specDenoter
	if report.LeafNodeType.Is(types.NodeTypesForSuiteLevelNodes) {
		header = fmt.Sprintf("[%s]", report.LeafNodeType)
	}
	highlightColor := r.highlightColorForState(report.State)

	// have we already been streaming the timeline?
	timelineHasBeenStreaming := v.GTE(types.VerbosityLevelVerbose) && !inParallel

	// should we show the timeline?
	var timeline types.Timeline
	showTimeline := !timelineHasBeenStreaming && (v.GTE(types.VerbosityLevelVerbose) || report.Failed())
	if showTimeline {
		timeline = report.Timeline().WithoutHiddenReportEntries()
		keepVeryVerboseSpecEvents := v.Is(types.VerbosityLevelVeryVerbose) ||
			(v.Is(types.VerbosityLevelVerbose) && r.conf.ShowNodeEvents) ||
			(report.Failed() && r.conf.ShowNodeEvents)
		if !keepVeryVerboseSpecEvents {
			timeline = timeline.WithoutVeryVerboseSpecEvents()
		}
		if len(timeline) == 0 && report.CapturedGinkgoWriterOutput == "" {
			// the timeline is completely empty - don't show it
			showTimeline = false
		}
		if v.LT(types.VerbosityLevelVeryVerbose) && report.CapturedGinkgoWriterOutput == "" && len(timeline) > 0 {
			//if we aren't -vv and the timeline only has a single failure, don't show it as it will appear at the end of the report
			failure, isFailure := timeline[0].(types.Failure)
			if isFailure && (len(timeline) == 1 || (len(timeline) == 2 && failure.AdditionalFailure != nil)) {
				showTimeline = false
			}
		}
	}

	// should we have a separate section for always-visible reports?
	showSeparateVisibilityAlwaysReportsSection := !timelineHasBeenStreaming && !showTimeline && report.ReportEntries.HasVisibility(types.ReportEntryVisibilityAlways)

	// should we have a separate section for captured stdout/stderr
	showSeparateStdSection := inParallel && (report.CapturedStdOutErr != "")

	// given all that - do we have any actual content to show? or are we a single denoter in a stream?
	reportHasContent := v.Is(types.VerbosityLevelVeryVerbose) || showTimeline || showSeparateVisibilityAlwaysReportsSection || showSeparateStdSection || report.Failed() || (v.Is(types.VerbosityLevelVerbose) && !report.State.Is(types.SpecStateSkipped))

	// should we show a runtime?
	includeRuntime := !report.State.Is(types.SpecStateSkipped|types.SpecStatePending) || (report.State.Is(types.SpecStateSkipped) && report.Failure.Message != "")

	// should we show the codelocation block?
	showCodeLocation := !timelineHasBeenStreaming || !report.State.Is(types.SpecStatePassed)

	switch report.State {
	case types.SpecStatePassed:
		if report.LeafNodeType.Is(types.NodeTypesForSuiteLevelNodes) && !reportHasContent {
			return
		}
		if report.LeafNodeType.Is(types.NodeTypesForSuiteLevelNodes) {
			header = fmt.Sprintf("%s PASSED", header)
		}
		if report.NumAttempts > 1 && report.MaxFlakeAttempts > 1 {
			header, reportHasContent = fmt.Sprintf("%s [FLAKEY TEST - TOOK %d ATTEMPTS TO PASS]", r.retryDenoter, report.NumAttempts), true
		}
	case types.SpecStatePending:
		header = "P"
		if v.GT(types.VerbosityLevelSuccinct) {
			header, reportHasContent = "P [PENDING]", true
		}
	case types.SpecStateSkipped:
		header = "S"
		if v.Is(types.VerbosityLevelVeryVerbose) || (v.Is(types.VerbosityLevelVerbose) && report.Failure.Message != "") {
			header, reportHasContent = "S [SKIPPED]", true
		}
	default:
		header = fmt.Sprintf("%s [%s]", header, r.humanReadableState(report.State))
		if report.MaxMustPassRepeatedly > 1 {
			header = fmt.Sprintf("%s DURING REPETITION #%d", header, report.NumAttempts)
		}
	}

	// If we have no content to show, jsut emit the header and return
	if !reportHasContent {
		r.emit(r.f(highlightColor + header + "{{/}}"))
		return
	}

	if includeRuntime {
		header = r.f("%s [%.3f seconds]", header, report.RunTime.Seconds())
	}

	// Emit header
	if !timelineHasBeenStreaming {
		r.emitDelimiter(0)
	}
	r.emitBlock(r.f(highlightColor + header + "{{/}}"))
	if showCodeLocation {
		r.emitBlock(r.codeLocationBlock(report, highlightColor, v.Is(types.VerbosityLevelVeryVerbose), false))
	}

	//Emit Stdout/Stderr Output
	if showSeparateStdSection {
		r.emitBlock("\n")
		r.emitBlock(r.fi(1, "{{gray}}Captured StdOut/StdErr Output >>{{/}}"))
		r.emitBlock(r.fi(1, "%s", report.CapturedStdOutErr))
		r.emitBlock(r.fi(1, "{{gray}}<< Captured StdOut/StdErr Output{{/}}"))
	}

	if showSeparateVisibilityAlwaysReportsSection {
		r.emitBlock("\n")
		r.emitBlock(r.fi(1, "{{gray}}Report Entries >>{{/}}"))
		for _, entry := range report.ReportEntries.WithVisibility(types.ReportEntryVisibilityAlways) {
			r.emitReportEntry(1, entry)
		}
		r.emitBlock(r.fi(1, "{{gray}}<< Report Entries{{/}}"))
	}

	if showTimeline {
		r.emitBlock("\n")
		r.emitBlock(r.fi(1, "{{gray}}Timeline >>{{/}}"))
		r.emitTimeline(1, report, timeline)
		r.emitBlock(r.fi(1, "{{gray}}<< Timeline{{/}}"))
	}

	// Emit Failure Message
	if !report.Failure.IsZero() && !v.Is(types.VerbosityLevelVeryVerbose) {
		r.emitBlock("\n")
		r.emitFailure(1, report.State, report.Failure, true)
		if len(report.AdditionalFailures) > 0 {
			r.emitBlock(r.fi(1, "\nThere were {{bold}}{{red}}additional failures{{/}} detected.  To view them in detail run {{bold}}ginkgo -vv{{/}}"))
		}
	}

	r.emitDelimiter(0)
}

func (r *DefaultReporter) highlightColorForState(state types.SpecState) string {
	switch state {
	case types.SpecStatePassed:
		return "{{green}}"
	case types.SpecStatePending:
		return "{{yellow}}"
	case types.SpecStateSkipped:
		return "{{cyan}}"
	case types.SpecStateFailed:
		return "{{red}}"
	case types.SpecStateTimedout:
		return "{{orange}}"
	case types.SpecStatePanicked:
		return "{{magenta}}"
	case types.SpecStateInterrupted:
		return "{{orange}}"
	case types.SpecStateAborted:
		return "{{coral}}"
	default:
		return "{{gray}}"
	}
}

func (r *DefaultReporter) humanReadableState(state types.SpecState) string {
	return strings.ToUpper(state.String())
}

func (r *DefaultReporter) emitTimeline(indent uint, report types.SpecReport, timeline types.Timeline) {
	isVeryVerbose := r.conf.Verbosity().Is(types.VerbosityLevelVeryVerbose)
	gw := report.CapturedGinkgoWriterOutput
	cursor := 0
	for _, entry := range timeline {
		tl := entry.GetTimelineLocation()
		if tl.Offset < len(gw) {
			r.emit(r.fi(indent, "%s", gw[cursor:tl.Offset]))
			cursor = tl.Offset
		} else if cursor < len(gw) {
			r.emit(r.fi(indent, "%s", gw[cursor:]))
			cursor = len(gw)
		}
		switch x := entry.(type) {
		case types.Failure:
			if isVeryVerbose {
				r.emitFailure(indent, report.State, x, false)
			} else {
				r.emitShortFailure(indent, report.State, x)
			}
		case types.AdditionalFailure:
			if isVeryVerbose {
				r.emitFailure(indent, x.State, x.Failure, true)
			} else {
				r.emitShortFailure(indent, x.State, x.Failure)
			}
		case types.ReportEntry:
			r.emitReportEntry(indent, x)
		case types.ProgressReport:
			r.emitProgressReport(indent, false, x)
		case types.SpecEvent:
			if isVeryVerbose || !x.IsOnlyVisibleAtVeryVerbose() || r.conf.ShowNodeEvents {
				r.emitSpecEvent(indent, x, isVeryVerbose)
			}
		}
	}
	if cursor < len(gw) {
		r.emit(r.fi(indent, "%s", gw[cursor:]))
	}
}

func (r *DefaultReporter) EmitFailure(state types.SpecState, failure types.Failure) {
	if r.conf.Verbosity().Is(types.VerbosityLevelVerbose) {
		r.emitShortFailure(1, state, failure)
	} else if r.conf.Verbosity().Is(types.VerbosityLevelVeryVerbose) {
		r.emitFailure(1, state, failure, true)
	}
}

func (r *DefaultReporter) emitShortFailure(indent uint, state types.SpecState, failure types.Failure) {
	r.emitBlock(r.fi(indent, r.highlightColorForState(state)+"[%s]{{/}} in [%s] - %s {{gray}}@ %s{{/}}",
		r.humanReadableState(state),
		failure.FailureNodeType,
		failure.Location,
		failure.TimelineLocation.Time.Format(types.GINKGO_TIME_FORMAT),
	))
}

func (r *DefaultReporter) emitFailure(indent uint, state types.SpecState, failure types.Failure, includeAdditionalFailure bool) {
	highlightColor := r.highlightColorForState(state)
	r.emitBlock(r.fi(indent, highlightColor+"[%s] %s{{/}}", r.humanReadableState(state), failure.Message))
	r.emitBlock(r.fi(indent, highlightColor+"In {{bold}}[%s]{{/}}"+highlightColor+" at: {{bold}}%s{{/}} {{gray}}@ %s{{/}}\n", failure.FailureNodeType, failure.Location, failure.TimelineLocation.Time.Format(types.GINKGO_TIME_FORMAT)))
	if failure.ForwardedPanic != "" {
		r.emitBlock("\n")
		r.emitBlock(r.fi(indent, highlightColor+"%s{{/}}", failure.ForwardedPanic))
	}

	if r.conf.FullTrace || failure.ForwardedPanic != "" {
		r.emitBlock("\n")
		r.emitBlock(r.fi(indent, highlightColor+"Full Stack Trace{{/}}"))
		r.emitBlock(r.fi(indent+1, "%s", failure.Location.FullStackTrace))
	}

	if !failure.ProgressReport.IsZero() {
		r.emitBlock("\n")
		r.emitProgressReport(indent, false, failure.ProgressReport)
	}

	if failure.AdditionalFailure != nil && includeAdditionalFailure {
		r.emitBlock("\n")
		r.emitFailure(indent, failure.AdditionalFailure.State, failure.AdditionalFailure.Failure, true)
	}
}

func (r *DefaultReporter) EmitProgressReport(report types.ProgressReport) {
	r.emitDelimiter(1)

	if report.RunningInParallel {
		r.emit(r.fi(1, "{{coral}}Progress Report for Ginkgo Process #{{bold}}%d{{/}}\n", report.ParallelProcess))
	}
	shouldEmitGW := report.RunningInParallel || r.conf.Verbosity().LT(types.VerbosityLevelVerbose)
	r.emitProgressReport(1, shouldEmitGW, report)
	r.emitDelimiter(1)
}

func (r *DefaultReporter) emitProgressReport(indent uint, emitGinkgoWriterOutput bool, report types.ProgressReport) {
	if report.Message != "" {
		r.emitBlock(r.fi(indent, report.Message+"\n"))
		indent += 1
	}
	if report.LeafNodeText != "" {
		subjectIndent := indent
		if len(report.ContainerHierarchyTexts) > 0 {
			r.emit(r.fi(indent, r.cycleJoin(report.ContainerHierarchyTexts, " ")))
			r.emit(" ")
			subjectIndent = 0
		}
		r.emit(r.fi(subjectIndent, "{{bold}}{{orange}}%s{{/}} (Spec Runtime: %s)\n", report.LeafNodeText, report.Time().Sub(report.SpecStartTime).Round(time.Millisecond)))
		r.emit(r.fi(indent+1, "{{gray}}%s{{/}}\n", report.LeafNodeLocation))
		indent += 1
	}
	if report.CurrentNodeType != types.NodeTypeInvalid {
		r.emit(r.fi(indent, "In {{bold}}{{orange}}[%s]{{/}}", report.CurrentNodeType))
		if report.CurrentNodeText != "" && !report.CurrentNodeType.Is(types.NodeTypeIt) {
			r.emit(r.f(" {{bold}}{{orange}}%s{{/}}", report.CurrentNodeText))
		}

		r.emit(r.f(" (Node Runtime: %s)\n", report.Time().Sub(report.CurrentNodeStartTime).Round(time.Millisecond)))
		r.emit(r.fi(indent+1, "{{gray}}%s{{/}}\n", report.CurrentNodeLocation))
		indent += 1
	}
	if report.CurrentStepText != "" {
		r.emit(r.fi(indent, "At {{bold}}{{orange}}[By Step] %s{{/}} (Step Runtime: %s)\n", report.CurrentStepText, report.Time().Sub(report.CurrentStepStartTime).Round(time.Millisecond)))
		r.emit(r.fi(indent+1, "{{gray}}%s{{/}}\n", report.CurrentStepLocation))
		indent += 1
	}

	if indent > 0 {
		indent -= 1
	}

	if emitGinkgoWriterOutput && report.CapturedGinkgoWriterOutput != "" {
		r.emit("\n")
		r.emitBlock(r.fi(indent, "{{gray}}Begin Captured GinkgoWriter Output >>{{/}}"))
		limit, lines := 10, strings.Split(report.CapturedGinkgoWriterOutput, "\n")
		if len(lines) <= limit {
			r.emitBlock(r.fi(indent+1, "%s", report.CapturedGinkgoWriterOutput))
		} else {
			r.emitBlock(r.fi(indent+1, "{{gray}}...{{/}}"))
			for _, line := range lines[len(lines)-limit-1:] {
				r.emitBlock(r.fi(indent+1, "%s", line))
			}
		}
		r.emitBlock(r.fi(indent, "{{gray}}<< End Captured GinkgoWriter Output{{/}}"))
	}

	if !report.SpecGoroutine().IsZero() {
		r.emit("\n")
		r.emit(r.fi(indent, "{{bold}}{{underline}}Spec Goroutine{{/}}\n"))
		r.emitGoroutines(indent, report.SpecGoroutine())
	}

	if len(report.AdditionalReports) > 0 {
		r.emit("\n")
		r.emitBlock(r.fi(indent, "{{gray}}Begin Additional Progress Reports >>{{/}}"))
		for i, additionalReport := range report.AdditionalReports {
			r.emit(r.fi(indent+1, additionalReport))
			if i < len(report.AdditionalReports)-1 {
				r.emitBlock(r.fi(indent+1, "{{gray}}%s{{/}}", strings.Repeat("-", 10)))
			}
		}
		r.emitBlock(r.fi(indent, "{{gray}}<< End Additional Progress Reports{{/}}"))
	}

	highlightedGoroutines := report.HighlightedGoroutines()
	if len(highlightedGoroutines) > 0 {
		r.emit("\n")
		r.emit(r.fi(indent, "{{bold}}{{underline}}Goroutines of Interest{{/}}\n"))
		r.emitGoroutines(indent, highlightedGoroutines...)
	}

	otherGoroutines := report.OtherGoroutines()
	if len(otherGoroutines) > 0 {
		r.emit("\n")
		r.emit(r.fi(indent, "{{gray}}{{bold}}{{underline}}Other Goroutines{{/}}\n"))
		r.emitGoroutines(indent, otherGoroutines...)
	}
}

func (r *DefaultReporter) EmitReportEntry(entry types.ReportEntry) {
	if r.conf.Verbosity().LT(types.VerbosityLevelVerbose) || entry.Visibility == types.ReportEntryVisibilityNever {
		return
	}
	r.emitReportEntry(1, entry)
}

func (r *DefaultReporter) emitReportEntry(indent uint, entry types.ReportEntry) {
	r.emitBlock(r.fi(indent, "{{bold}}"+entry.Name+"{{gray}} "+fmt.Sprintf("- %s @ %s{{/}}", entry.Location, entry.Time.Format(types.GINKGO_TIME_FORMAT))))
	if representation := entry.StringRepresentation(); representation != "" {
		r.emitBlock(r.fi(indent+1, representation))
	}
}

func (r *DefaultReporter) EmitSpecEvent(event types.SpecEvent) {
	v := r.conf.Verbosity()
	if v.Is(types.VerbosityLevelVeryVerbose) || (v.Is(types.VerbosityLevelVerbose) && (r.conf.ShowNodeEvents || !event.IsOnlyVisibleAtVeryVerbose())) {
		r.emitSpecEvent(1, event, r.conf.Verbosity().Is(types.VerbosityLevelVeryVerbose))
	}
}

func (r *DefaultReporter) emitSpecEvent(indent uint, event types.SpecEvent, includeLocation bool) {
	location := ""
	if includeLocation {
		location = fmt.Sprintf("- %s ", event.CodeLocation.String())
	}
	switch event.SpecEventType {
	case types.SpecEventInvalid:
		return
	case types.SpecEventByStart:
		r.emitBlock(r.fi(indent, "{{bold}}STEP:{{/}} %s {{gray}}%s@ %s{{/}}", event.Message, location, event.TimelineLocation.Time.Format(types.GINKGO_TIME_FORMAT)))
	case types.SpecEventByEnd:
		r.emitBlock(r.fi(indent, "{{bold}}END STEP:{{/}} %s {{gray}}%s@ %s (%s){{/}}", event.Message, location, event.TimelineLocation.Time.Format(types.GINKGO_TIME_FORMAT), event.Duration.Round(time.Millisecond)))
	case types.SpecEventNodeStart:
		r.emitBlock(r.fi(indent, "> Enter {{bold}}[%s]{{/}} %s {{gray}}%s@ %s{{/}}", event.NodeType.String(), event.Message, location, event.TimelineLocation.Time.Format(types.GINKGO_TIME_FORMAT)))
	case types.SpecEventNodeEnd:
		r.emitBlock(r.fi(indent, "< Exit {{bold}}[%s]{{/}} %s {{gray}}%s@ %s (%s){{/}}", event.NodeType.String(), event.Message, location, event.TimelineLocation.Time.Format(types.GINKGO_TIME_FORMAT), event.Duration.Round(time.Millisecond)))
	case types.SpecEventSpecRepeat:
		r.emitBlock(r.fi(indent, "\n{{bold}}Attempt #%d {{green}}Passed{{/}}{{bold}}.  Repeating %s{{/}} {{gray}}@ %s{{/}}\n\n", event.Attempt, r.retryDenoter, event.TimelineLocation.Time.Format(types.GINKGO_TIME_FORMAT)))
	case types.SpecEventSpecRetry:
		r.emitBlock(r.fi(indent, "\n{{bold}}Attempt #%d {{red}}Failed{{/}}{{bold}}.  Retrying %s{{/}} {{gray}}@ %s{{/}}\n\n", event.Attempt, r.retryDenoter, event.TimelineLocation.Time.Format(types.GINKGO_TIME_FORMAT)))
	}
}

func (r *DefaultReporter) emitGoroutines(indent uint, goroutines ...types.Goroutine) {
	for idx, g := range goroutines {
		color := "{{gray}}"
		if g.HasHighlights() {
			color = "{{orange}}"
		}
		r.emit(r.fi(indent, color+"goroutine %d [%s]{{/}}\n", g.ID, g.State))
		for _, fc := range g.Stack {
			if fc.Highlight {
				r.emit(r.fi(indent, color+"{{bold}}> %s{{/}}\n", fc.Function))
				r.emit(r.fi(indent+2, color+"{{bold}}%s:%d{{/}}\n", fc.Filename, fc.Line))
				r.emitSource(indent+3, fc)
			} else {
				r.emit(r.fi(indent+1, "{{gray}}%s{{/}}\n", fc.Function))
				r.emit(r.fi(indent+2, "{{gray}}%s:%d{{/}}\n", fc.Filename, fc.Line))
			}
		}

		if idx+1 < len(goroutines) {
			r.emit("\n")
		}
	}
}

func (r *DefaultReporter) emitSource(indent uint, fc types.FunctionCall) {
	lines := fc.Source
	if len(lines) == 0 {
		return
	}

	lTrim := 100000
	for _, line := range lines {
		lTrimLine := len(line) - len(strings.TrimLeft(line, " \t"))
		if lTrimLine < lTrim && len(line) > 0 {
			lTrim = lTrimLine
		}
	}
	if lTrim == 100000 {
		lTrim = 0
	}

	for idx, line := range lines {
		if len(line) > lTrim {
			line = line[lTrim:]
		}
		if idx == fc.SourceHighlight {
			r.emit(r.fi(indent, "{{bold}}{{orange}}> %s{{/}}\n", line))
		} else {
			r.emit(r.fi(indent, "| %s\n", line))
		}
	}
}

/* Emitting to the writer */
func (r *DefaultReporter) emit(s string) {
	r._emit(s, false, false)
}

func (r *DefaultReporter) emitBlock(s string) {
	r._emit(s, true, false)
}

func (r *DefaultReporter) emitDelimiter(indent uint) {
	r._emit(r.fi(indent, "{{gray}}%s{{/}}", strings.Repeat("-", 30)), true, true)
}

// a bit ugly - but we're trying to minimize locking on this hot codepath
func (r *DefaultReporter) _emit(s string, block bool, isDelimiter bool) {
	if len(s) == 0 {
		return
	}
	r.lock.Lock()
	defer r.lock.Unlock()
	if isDelimiter && r.lastEmissionWasDelimiter {
		return
	}
	if block && !r.lastCharWasNewline {
		r.writer.Write([]byte("\n"))
	}
	r.lastCharWasNewline = (s[len(s)-1:] == "\n")
	r.writer.Write([]byte(s))
	if block && !r.lastCharWasNewline {
		r.writer.Write([]byte("\n"))
		r.lastCharWasNewline = true
	}
	r.lastEmissionWasDelimiter = isDelimiter
}

/* Rendering text */
func (r *DefaultReporter) f(format string, args ...interface{}) string {
	return r.formatter.F(format, args...)
}

func (r *DefaultReporter) fi(indentation uint, format string, args ...interface{}) string {
	return r.formatter.Fi(indentation, format, args...)
}

func (r *DefaultReporter) cycleJoin(elements []string, joiner string) string {
	return r.formatter.CycleJoin(elements, joiner, []string{"{{/}}", "{{gray}}"})
}

func (r *DefaultReporter) codeLocationBlock(report types.SpecReport, highlightColor string, veryVerbose bool, usePreciseFailureLocation bool) string {
	texts, locations, labels := []string{}, []types.CodeLocation{}, [][]string{}
	texts, locations, labels = append(texts, report.ContainerHierarchyTexts...), append(locations, report.ContainerHierarchyLocations...), append(labels, report.ContainerHierarchyLabels...)

	if report.LeafNodeType.Is(types.NodeTypesForSuiteLevelNodes) {
		texts = append(texts, r.f("[%s] %s", report.LeafNodeType, report.LeafNodeText))
	} else {
		texts = append(texts, r.f(report.LeafNodeText))
	}
	labels = append(labels, report.LeafNodeLabels)
	locations = append(locations, report.LeafNodeLocation)

	failureLocation := report.Failure.FailureNodeLocation
	if usePreciseFailureLocation {
		failureLocation = report.Failure.Location
	}

	highlightIndex := -1
	switch report.Failure.FailureNodeContext {
	case types.FailureNodeAtTopLevel:
		texts = append([]string{fmt.Sprintf("TOP-LEVEL [%s]", report.Failure.FailureNodeType)}, texts...)
		locations = append([]types.CodeLocation{failureLocation}, locations...)
		labels = append([][]string{{}}, labels...)
		highlightIndex = 0
	case types.FailureNodeInContainer:
		i := report.Failure.FailureNodeContainerIndex
		texts[i] = fmt.Sprintf("%s [%s]", texts[i], report.Failure.FailureNodeType)
		locations[i] = failureLocation
		highlightIndex = i
	case types.FailureNodeIsLeafNode:
		i := len(texts) - 1
		texts[i] = fmt.Sprintf("[%s] %s", report.LeafNodeType, report.LeafNodeText)
		locations[i] = failureLocation
		highlightIndex = i
	default:
		//there is no failure, so we highlight the leaf ndoe
		highlightIndex = len(texts) - 1
	}

	out := ""
	if veryVerbose {
		for i := range texts {
			if i == highlightIndex {
				out += r.fi(uint(i), highlightColor+"{{bold}}%s{{/}}", texts[i])
			} else {
				out += r.fi(uint(i), "%s", texts[i])
			}
			if len(labels[i]) > 0 {
				out += r.f(" {{coral}}[%s]{{/}}", strings.Join(labels[i], ", "))
			}
			out += "\n"
			out += r.fi(uint(i), "{{gray}}%s{{/}}\n", locations[i])
		}
	} else {
		for i := range texts {
			style := "{{/}}"
			if i%2 == 1 {
				style = "{{gray}}"
			}
			if i == highlightIndex {
				style = highlightColor + "{{bold}}"
			}
			out += r.f(style+"%s", texts[i])
			if i < len(texts)-1 {
				out += " "
			} else {
				out += r.f("{{/}}")
			}
		}
		flattenedLabels := report.Labels()
		if len(flattenedLabels) > 0 {
			out += r.f(" {{coral}}[%s]{{/}}", strings.Join(flattenedLabels, ", "))
		}
		out += "\n"
		if usePreciseFailureLocation {
			out += r.f("{{gray}}%s{{/}}", failureLocation)
		} else {
			leafLocation := locations[len(locations)-1]
			if (report.Failure.FailureNodeLocation != types.CodeLocation{}) && (report.Failure.FailureNodeLocation != leafLocation) {
				out += r.fi(1, highlightColor+"[%s]{{/}} {{gray}}%s{{/}}\n", report.Failure.FailureNodeType, report.Failure.FailureNodeLocation)
				out += r.fi(1, "{{gray}}[%s] %s{{/}}", report.LeafNodeType, leafLocation)
			} else {
				out += r.f("{{gray}}%s{{/}}", leafLocation)
			}
		}

	}
	return out
}
 07070100000971000081A4000000000000000000000001645E367C000015FE000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/reporters/deprecated_reporter.go package reporters

import (
	"github.com/onsi/ginkgo/v2/config"
	"github.com/onsi/ginkgo/v2/types"
)

// Deprecated: DeprecatedReporter was how Ginkgo V1 provided support for CustomReporters
// this has been removed in V2.
// Please read the documentation at:
// https://onsi.github.io/ginkgo/MIGRATING_TO_V2#removed-custom-reporters
// for Ginkgo's new behavior and for a migration path.
type DeprecatedReporter interface {
	SuiteWillBegin(config config.GinkgoConfigType, summary *types.SuiteSummary)
	BeforeSuiteDidRun(setupSummary *types.SetupSummary)
	SpecWillRun(specSummary *types.SpecSummary)
	SpecDidComplete(specSummary *types.SpecSummary)
	AfterSuiteDidRun(setupSummary *types.SetupSummary)
	SuiteDidEnd(summary *types.SuiteSummary)
}

// ReportViaDeprecatedReporter takes a V1 custom reporter and a V2 report and
// calls the custom reporter's methods with appropriately transformed data from the V2 report.
//
// ReportViaDeprecatedReporter should be called in a `ReportAfterSuite()`
//
// Deprecated: ReportViaDeprecatedReporter method exists to help developer bridge between deprecated V1 functionality and the new
// reporting support in V2.  It will be removed in a future minor version of Ginkgo.
func ReportViaDeprecatedReporter(reporter DeprecatedReporter, report types.Report) {
	conf := config.DeprecatedGinkgoConfigType{
		RandomSeed:        report.SuiteConfig.RandomSeed,
		RandomizeAllSpecs: report.SuiteConfig.RandomizeAllSpecs,
		FocusStrings:      report.SuiteConfig.FocusStrings,
		SkipStrings:       report.SuiteConfig.SkipStrings,
		FailOnPending:     report.SuiteConfig.FailOnPending,
		FailFast:          report.SuiteConfig.FailFast,
		FlakeAttempts:     report.SuiteConfig.FlakeAttempts,
		EmitSpecProgress:  false,
		DryRun:            report.SuiteConfig.DryRun,
		ParallelNode:      report.SuiteConfig.ParallelProcess,
		ParallelTotal:     report.SuiteConfig.ParallelTotal,
		SyncHost:          report.SuiteConfig.ParallelHost,
		StreamHost:        report.SuiteConfig.ParallelHost,
	}

	summary := &types.DeprecatedSuiteSummary{
		SuiteDescription: report.SuiteDescription,
		SuiteID:          report.SuitePath,

		NumberOfSpecsBeforeParallelization: report.PreRunStats.TotalSpecs,
		NumberOfTotalSpecs:                 report.PreRunStats.TotalSpecs,
		NumberOfSpecsThatWillBeRun:         report.PreRunStats.SpecsThatWillRun,
	}

	reporter.SuiteWillBegin(conf, summary)

	for _, spec := range report.SpecReports {
		switch spec.LeafNodeType {
		case types.NodeTypeBeforeSuite, types.NodeTypeSynchronizedBeforeSuite:
			setupSummary := &types.DeprecatedSetupSummary{
				ComponentType:  spec.LeafNodeType,
				CodeLocation:   spec.LeafNodeLocation,
				State:          spec.State,
				RunTime:        spec.RunTime,
				Failure:        failureFor(spec),
				CapturedOutput: spec.CombinedOutput(),
				SuiteID:        report.SuitePath,
			}
			reporter.BeforeSuiteDidRun(setupSummary)
		case types.NodeTypeAfterSuite, types.NodeTypeSynchronizedAfterSuite:
			setupSummary := &types.DeprecatedSetupSummary{
				ComponentType:  spec.LeafNodeType,
				CodeLocation:   spec.LeafNodeLocation,
				State:          spec.State,
				RunTime:        spec.RunTime,
				Failure:        failureFor(spec),
				CapturedOutput: spec.CombinedOutput(),
				SuiteID:        report.SuitePath,
			}
			reporter.AfterSuiteDidRun(setupSummary)
		case types.NodeTypeIt:
			componentTexts, componentCodeLocations := []string{}, []types.CodeLocation{}
			componentTexts = append(componentTexts, spec.ContainerHierarchyTexts...)
			componentCodeLocations = append(componentCodeLocations, spec.ContainerHierarchyLocations...)
			componentTexts = append(componentTexts, spec.LeafNodeText)
			componentCodeLocations = append(componentCodeLocations, spec.LeafNodeLocation)

			specSummary := &types.DeprecatedSpecSummary{
				ComponentTexts:         componentTexts,
				ComponentCodeLocations: componentCodeLocations,
				State:                  spec.State,
				RunTime:                spec.RunTime,
				Failure:                failureFor(spec),
				NumberOfSamples:        spec.NumAttempts,
				CapturedOutput:         spec.CombinedOutput(),
				SuiteID:                report.SuitePath,
			}
			reporter.SpecWillRun(specSummary)
			reporter.SpecDidComplete(specSummary)

			switch spec.State {
			case types.SpecStatePending:
				summary.NumberOfPendingSpecs += 1
			case types.SpecStateSkipped:
				summary.NumberOfSkippedSpecs += 1
			case types.SpecStateFailed, types.SpecStatePanicked, types.SpecStateInterrupted:
				summary.NumberOfFailedSpecs += 1
			case types.SpecStatePassed:
				summary.NumberOfPassedSpecs += 1
				if spec.NumAttempts > 1 {
					summary.NumberOfFlakedSpecs += 1
				}
			}
		}
	}

	summary.SuiteSucceeded = report.SuiteSucceeded
	summary.RunTime = report.RunTime

	reporter.SuiteDidEnd(summary)
}

func failureFor(spec types.SpecReport) types.DeprecatedSpecFailure {
	if spec.Failure.IsZero() {
		return types.DeprecatedSpecFailure{}
	}

	index := 0
	switch spec.Failure.FailureNodeContext {
	case types.FailureNodeInContainer:
		index = spec.Failure.FailureNodeContainerIndex
	case types.FailureNodeAtTopLevel:
		index = -1
	case types.FailureNodeIsLeafNode:
		index = len(spec.ContainerHierarchyTexts) - 1
		if spec.LeafNodeText != "" {
			index += 1
		}
	}

	return types.DeprecatedSpecFailure{
		Message:               spec.Failure.Message,
		Location:              spec.Failure.Location,
		ForwardedPanic:        spec.Failure.ForwardedPanic,
		ComponentIndex:        index,
		ComponentType:         spec.Failure.FailureNodeType,
		ComponentCodeLocation: spec.Failure.FailureNodeLocation,
	}
}
  07070100000972000081A4000000000000000000000001645E367C00000615000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/reporters/json_report.go package reporters

import (
	"encoding/json"
	"fmt"
	"os"

	"github.com/onsi/ginkgo/v2/types"
)

//GenerateJSONReport produces a JSON-formatted report at the passed in destination
func GenerateJSONReport(report types.Report, destination string) error {
	f, err := os.Create(destination)
	if err != nil {
		return err
	}
	enc := json.NewEncoder(f)
	enc.SetIndent("", "  ")
	err = enc.Encode([]types.Report{
		report,
	})
	if err != nil {
		return err
	}
	return f.Close()
}

//MergeJSONReports produces a single JSON-formatted report at the passed in destination by merging the JSON-formatted reports provided in sources
//It skips over reports that fail to decode but reports on them via the returned messages []string
func MergeAndCleanupJSONReports(sources []string, destination string) ([]string, error) {
	messages := []string{}
	allReports := []types.Report{}
	for _, source := range sources {
		reports := []types.Report{}
		data, err := os.ReadFile(source)
		if err != nil {
			messages = append(messages, fmt.Sprintf("Could not open %s:\n%s", source, err.Error()))
			continue
		}
		err = json.Unmarshal(data, &reports)
		if err != nil {
			messages = append(messages, fmt.Sprintf("Could not decode %s:\n%s", source, err.Error()))
			continue
		}
		os.Remove(source)
		allReports = append(allReports, reports...)
	}

	f, err := os.Create(destination)
	if err != nil {
		return messages, err
	}
	enc := json.NewEncoder(f)
	enc.SetIndent("", "  ")
	err = enc.Encode(allReports)
	if err != nil {
		return messages, err
	}
	return messages, f.Close()
}
   07070100000973000081A4000000000000000000000001645E367C000033B0000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/reporters/junit_report.go    /*

JUnit XML Reporter for Ginkgo

For usage instructions: http://onsi.github.io/ginkgo/#generating_junit_xml_output

The schema used for the generated JUnit xml file was adapted from https://llg.cubic.org/docs/junit/

*/

package reporters

import (
	"encoding/xml"
	"fmt"
	"os"
	"strings"

	"github.com/onsi/ginkgo/v2/config"
	"github.com/onsi/ginkgo/v2/types"
)

type JunitReportConfig struct {
	// Spec States for which no timeline should be emitted for system-err
	// set this to types.SpecStatePassed|types.SpecStateSkipped|types.SpecStatePending to only match failing specs
	OmitTimelinesForSpecState types.SpecState

	// Enable OmitFailureMessageAttr to prevent failure messages appearing in the "message" attribute of the Failure and Error tags
	OmitFailureMessageAttr bool

	//Enable OmitCapturedStdOutErr to prevent captured stdout/stderr appearing in system-out
	OmitCapturedStdOutErr bool

	// Enable OmitSpecLabels to prevent labels from appearing in the spec name
	OmitSpecLabels bool

	// Enable OmitLeafNodeType to prevent the spec leaf node type from appearing in the spec name
	OmitLeafNodeType bool

	// Enable OmitSuiteSetupNodes to prevent the creation of testcase entries for setup nodes
	OmitSuiteSetupNodes bool
}

type JUnitTestSuites struct {
	XMLName xml.Name `xml:"testsuites"`
	// Tests maps onto the total number of specs in all test suites (this includes any suite nodes such as BeforeSuite)
	Tests int `xml:"tests,attr"`
	// Disabled maps onto specs that are pending and/or skipped
	Disabled int `xml:"disabled,attr"`
	// Errors maps onto specs that panicked or were interrupted
	Errors int `xml:"errors,attr"`
	// Failures maps onto specs that failed
	Failures int `xml:"failures,attr"`
	// Time is the time in seconds to execute all test suites
	Time float64 `xml:"time,attr"`

	//The set of all test suites
	TestSuites []JUnitTestSuite `xml:"testsuite"`
}

type JUnitTestSuite struct {
	// Name maps onto the description of the test suite - maps onto Report.SuiteDescription
	Name string `xml:"name,attr"`
	// Package maps onto the absolute path to the test suite - maps onto Report.SuitePath
	Package string `xml:"package,attr"`
	// Tests maps onto the total number of specs in the test suite (this includes any suite nodes such as BeforeSuite)
	Tests int `xml:"tests,attr"`
	// Disabled maps onto specs that are pending
	Disabled int `xml:"disabled,attr"`
	// Skiped maps onto specs that are skipped
	Skipped int `xml:"skipped,attr"`
	// Errors maps onto specs that panicked or were interrupted
	Errors int `xml:"errors,attr"`
	// Failures maps onto specs that failed
	Failures int `xml:"failures,attr"`
	// Time is the time in seconds to execute all the test suite - maps onto Report.RunTime
	Time float64 `xml:"time,attr"`
	// Timestamp is the ISO 8601 formatted start-time of the suite - maps onto Report.StartTime
	Timestamp string `xml:"timestamp,attr"`

	//Properties captures the information stored in the rest of the Report type (including SuiteConfig) as key-value pairs
	Properties JUnitProperties `xml:"properties"`

	//TestCases capture the individual specs
	TestCases []JUnitTestCase `xml:"testcase"`
}

type JUnitProperties struct {
	Properties []JUnitProperty `xml:"property"`
}

func (jup JUnitProperties) WithName(name string) string {
	for _, property := range jup.Properties {
		if property.Name == name {
			return property.Value
		}
	}
	return ""
}

type JUnitProperty struct {
	Name  string `xml:"name,attr"`
	Value string `xml:"value,attr"`
}

type JUnitTestCase struct {
	// Name maps onto the full text of the spec - equivalent to "[SpecReport.LeafNodeType] SpecReport.FullText()"
	Name string `xml:"name,attr"`
	// Classname maps onto the name of the test suite - equivalent to Report.SuiteDescription
	Classname string `xml:"classname,attr"`
	// Status maps onto the string representation of SpecReport.State
	Status string `xml:"status,attr"`
	// Time is the time in seconds to execute the spec - maps onto SpecReport.RunTime
	Time float64 `xml:"time,attr"`
	//Skipped is populated with a message if the test was skipped or pending
	Skipped *JUnitSkipped `xml:"skipped,omitempty"`
	//Error is populated if the test panicked or was interrupted
	Error *JUnitError `xml:"error,omitempty"`
	//Failure is populated if the test failed
	Failure *JUnitFailure `xml:"failure,omitempty"`
	//SystemOut maps onto any captured stdout/stderr output - maps onto SpecReport.CapturedStdOutErr
	SystemOut string `xml:"system-out,omitempty"`
	//SystemOut maps onto any captured GinkgoWriter output - maps onto SpecReport.CapturedGinkgoWriterOutput
	SystemErr string `xml:"system-err,omitempty"`
}

type JUnitSkipped struct {
	// Message maps onto "pending" if the test was marked pending, "skipped" if the test was marked skipped, and "skipped - REASON" if the user called Skip(REASON)
	Message string `xml:"message,attr"`
}

type JUnitError struct {
	//Message maps onto the panic/exception thrown - equivalent to SpecReport.Failure.ForwardedPanic - or to "interrupted"
	Message string `xml:"message,attr"`
	//Type is one of "panicked" or "interrupted"
	Type string `xml:"type,attr"`
	//Description maps onto the captured stack trace for a panic, or the failure message for an interrupt which will include the dump of running goroutines
	Description string `xml:",chardata"`
}

type JUnitFailure struct {
	//Message maps onto the failure message - equivalent to SpecReport.Failure.Message
	Message string `xml:"message,attr"`
	//Type is "failed"
	Type string `xml:"type,attr"`
	//Description maps onto the location and stack trace of the failure
	Description string `xml:",chardata"`
}

func GenerateJUnitReport(report types.Report, dst string) error {
	return GenerateJUnitReportWithConfig(report, dst, JunitReportConfig{})
}

func GenerateJUnitReportWithConfig(report types.Report, dst string, config JunitReportConfig) error {
	suite := JUnitTestSuite{
		Name:      report.SuiteDescription,
		Package:   report.SuitePath,
		Time:      report.RunTime.Seconds(),
		Timestamp: report.StartTime.Format("2006-01-02T15:04:05"),
		Properties: JUnitProperties{
			Properties: []JUnitProperty{
				{"SuiteSucceeded", fmt.Sprintf("%t", report.SuiteSucceeded)},
				{"SuiteHasProgrammaticFocus", fmt.Sprintf("%t", report.SuiteHasProgrammaticFocus)},
				{"SpecialSuiteFailureReason", strings.Join(report.SpecialSuiteFailureReasons, ",")},
				{"SuiteLabels", fmt.Sprintf("[%s]", strings.Join(report.SuiteLabels, ","))},
				{"RandomSeed", fmt.Sprintf("%d", report.SuiteConfig.RandomSeed)},
				{"RandomizeAllSpecs", fmt.Sprintf("%t", report.SuiteConfig.RandomizeAllSpecs)},
				{"LabelFilter", report.SuiteConfig.LabelFilter},
				{"FocusStrings", strings.Join(report.SuiteConfig.FocusStrings, ",")},
				{"SkipStrings", strings.Join(report.SuiteConfig.SkipStrings, ",")},
				{"FocusFiles", strings.Join(report.SuiteConfig.FocusFiles, ";")},
				{"SkipFiles", strings.Join(report.SuiteConfig.SkipFiles, ";")},
				{"FailOnPending", fmt.Sprintf("%t", report.SuiteConfig.FailOnPending)},
				{"FailFast", fmt.Sprintf("%t", report.SuiteConfig.FailFast)},
				{"FlakeAttempts", fmt.Sprintf("%d", report.SuiteConfig.FlakeAttempts)},
				{"DryRun", fmt.Sprintf("%t", report.SuiteConfig.DryRun)},
				{"ParallelTotal", fmt.Sprintf("%d", report.SuiteConfig.ParallelTotal)},
				{"OutputInterceptorMode", report.SuiteConfig.OutputInterceptorMode},
			},
		},
	}
	for _, spec := range report.SpecReports {
		if config.OmitSuiteSetupNodes && spec.LeafNodeType != types.NodeTypeIt {
			continue
		}
		name := fmt.Sprintf("[%s]", spec.LeafNodeType)
		if config.OmitLeafNodeType {
			name = ""
		}
		if spec.FullText() != "" {
			name = name + " " + spec.FullText()
		}
		labels := spec.Labels()
		if len(labels) > 0 && !config.OmitSpecLabels {
			name = name + " [" + strings.Join(labels, ", ") + "]"
		}
		name = strings.TrimSpace(name)

		test := JUnitTestCase{
			Name:      name,
			Classname: report.SuiteDescription,
			Status:    spec.State.String(),
			Time:      spec.RunTime.Seconds(),
		}
		if !spec.State.Is(config.OmitTimelinesForSpecState) {
			test.SystemErr = systemErrForUnstructuredReporters(spec)
		}
		if !config.OmitCapturedStdOutErr {
			test.SystemOut = systemOutForUnstructuredReporters(spec)
		}
		suite.Tests += 1

		switch spec.State {
		case types.SpecStateSkipped:
			message := "skipped"
			if spec.Failure.Message != "" {
				message += " - " + spec.Failure.Message
			}
			test.Skipped = &JUnitSkipped{Message: message}
			suite.Skipped += 1
		case types.SpecStatePending:
			test.Skipped = &JUnitSkipped{Message: "pending"}
			suite.Disabled += 1
		case types.SpecStateFailed:
			test.Failure = &JUnitFailure{
				Message:     spec.Failure.Message,
				Type:        "failed",
				Description: failureDescriptionForUnstructuredReporters(spec),
			}
			if config.OmitFailureMessageAttr {
				test.Failure.Message = ""
			}
			suite.Failures += 1
		case types.SpecStateTimedout:
			test.Failure = &JUnitFailure{
				Message:     spec.Failure.Message,
				Type:        "timedout",
				Description: failureDescriptionForUnstructuredReporters(spec),
			}
			if config.OmitFailureMessageAttr {
				test.Failure.Message = ""
			}
			suite.Failures += 1
		case types.SpecStateInterrupted:
			test.Error = &JUnitError{
				Message:     spec.Failure.Message,
				Type:        "interrupted",
				Description: failureDescriptionForUnstructuredReporters(spec),
			}
			if config.OmitFailureMessageAttr {
				test.Error.Message = ""
			}
			suite.Errors += 1
		case types.SpecStateAborted:
			test.Failure = &JUnitFailure{
				Message:     spec.Failure.Message,
				Type:        "aborted",
				Description: failureDescriptionForUnstructuredReporters(spec),
			}
			if config.OmitFailureMessageAttr {
				test.Failure.Message = ""
			}
			suite.Errors += 1
		case types.SpecStatePanicked:
			test.Error = &JUnitError{
				Message:     spec.Failure.ForwardedPanic,
				Type:        "panicked",
				Description: failureDescriptionForUnstructuredReporters(spec),
			}
			if config.OmitFailureMessageAttr {
				test.Error.Message = ""
			}
			suite.Errors += 1
		}

		suite.TestCases = append(suite.TestCases, test)
	}

	junitReport := JUnitTestSuites{
		Tests:      suite.Tests,
		Disabled:   suite.Disabled + suite.Skipped,
		Errors:     suite.Errors,
		Failures:   suite.Failures,
		Time:       suite.Time,
		TestSuites: []JUnitTestSuite{suite},
	}

	f, err := os.Create(dst)
	if err != nil {
		return err
	}
	f.WriteString(xml.Header)
	encoder := xml.NewEncoder(f)
	encoder.Indent("  ", "    ")
	encoder.Encode(junitReport)

	return f.Close()
}

func MergeAndCleanupJUnitReports(sources []string, dst string) ([]string, error) {
	messages := []string{}
	mergedReport := JUnitTestSuites{}
	for _, source := range sources {
		report := JUnitTestSuites{}
		f, err := os.Open(source)
		if err != nil {
			messages = append(messages, fmt.Sprintf("Could not open %s:\n%s", source, err.Error()))
			continue
		}
		err = xml.NewDecoder(f).Decode(&report)
		if err != nil {
			messages = append(messages, fmt.Sprintf("Could not decode %s:\n%s", source, err.Error()))
			continue
		}
		os.Remove(source)

		mergedReport.Tests += report.Tests
		mergedReport.Disabled += report.Disabled
		mergedReport.Errors += report.Errors
		mergedReport.Failures += report.Failures
		mergedReport.Time += report.Time
		mergedReport.TestSuites = append(mergedReport.TestSuites, report.TestSuites...)
	}

	f, err := os.Create(dst)
	if err != nil {
		return messages, err
	}
	f.WriteString(xml.Header)
	encoder := xml.NewEncoder(f)
	encoder.Indent("  ", "    ")
	encoder.Encode(mergedReport)

	return messages, f.Close()
}

func failureDescriptionForUnstructuredReporters(spec types.SpecReport) string {
	out := &strings.Builder{}
	NewDefaultReporter(types.ReporterConfig{NoColor: true, VeryVerbose: true}, out).emitFailure(0, spec.State, spec.Failure, true)
	if len(spec.AdditionalFailures) > 0 {
		out.WriteString("\nThere were additional failures detected after the initial failure. These are visible in the timeline\n")
	}
	return out.String()
}

func systemErrForUnstructuredReporters(spec types.SpecReport) string {
	out := &strings.Builder{}
	NewDefaultReporter(types.ReporterConfig{NoColor: true, VeryVerbose: true}, out).emitTimeline(0, spec, spec.Timeline())
	return out.String()
}

func systemOutForUnstructuredReporters(spec types.SpecReport) string {
	return spec.CapturedStdOutErr
}

// Deprecated JUnitReporter (so folks can still compile their suites)
type JUnitReporter struct{}

func NewJUnitReporter(_ string) *JUnitReporter                                                  { return &JUnitReporter{} }
func (reporter *JUnitReporter) SuiteWillBegin(_ config.GinkgoConfigType, _ *types.SuiteSummary) {}
func (reporter *JUnitReporter) BeforeSuiteDidRun(_ *types.SetupSummary)                         {}
func (reporter *JUnitReporter) SpecWillRun(_ *types.SpecSummary)                                {}
func (reporter *JUnitReporter) SpecDidComplete(_ *types.SpecSummary)                            {}
func (reporter *JUnitReporter) AfterSuiteDidRun(_ *types.SetupSummary)                          {}
func (reporter *JUnitReporter) SuiteDidEnd(_ *types.SuiteSummary)                               {}
07070100000974000081A4000000000000000000000001645E367C00000477000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/reporters/reporter.go    package reporters

import (
	"github.com/onsi/ginkgo/v2/types"
)

type Reporter interface {
	SuiteWillBegin(report types.Report)
	WillRun(report types.SpecReport)
	DidRun(report types.SpecReport)
	SuiteDidEnd(report types.Report)

	//Timeline emission
	EmitFailure(state types.SpecState, failure types.Failure)
	EmitProgressReport(progressReport types.ProgressReport)
	EmitReportEntry(entry types.ReportEntry)
	EmitSpecEvent(event types.SpecEvent)
}

type NoopReporter struct{}

func (n NoopReporter) SuiteWillBegin(report types.Report)                       {}
func (n NoopReporter) WillRun(report types.SpecReport)                          {}
func (n NoopReporter) DidRun(report types.SpecReport)                           {}
func (n NoopReporter) SuiteDidEnd(report types.Report)                          {}
func (n NoopReporter) EmitFailure(state types.SpecState, failure types.Failure) {}
func (n NoopReporter) EmitProgressReport(progressReport types.ProgressReport)   {}
func (n NoopReporter) EmitReportEntry(entry types.ReportEntry)                  {}
func (n NoopReporter) EmitSpecEvent(event types.SpecEvent)                      {}
 07070100000975000081A4000000000000000000000001645E367C00000EE9000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/reporters/teamcity_report.go /*

TeamCity Reporter for Ginkgo

Makes use of TeamCity's support for Service Messages
http://confluence.jetbrains.com/display/TCD7/Build+Script+Interaction+with+TeamCity#BuildScriptInteractionwithTeamCity-ReportingTests
*/

package reporters

import (
	"fmt"
	"os"
	"strings"

	"github.com/onsi/ginkgo/v2/types"
)

func tcEscape(s string) string {
	s = strings.ReplaceAll(s, "|", "||")
	s = strings.ReplaceAll(s, "'", "|'")
	s = strings.ReplaceAll(s, "\n", "|n")
	s = strings.ReplaceAll(s, "\r", "|r")
	s = strings.ReplaceAll(s, "[", "|[")
	s = strings.ReplaceAll(s, "]", "|]")
	return s
}

func GenerateTeamcityReport(report types.Report, dst string) error {
	f, err := os.Create(dst)
	if err != nil {
		return err
	}

	name := report.SuiteDescription
	labels := report.SuiteLabels
	if len(labels) > 0 {
		name = name + " [" + strings.Join(labels, ", ") + "]"
	}
	fmt.Fprintf(f, "##teamcity[testSuiteStarted name='%s']\n", tcEscape(name))
	for _, spec := range report.SpecReports {
		name := fmt.Sprintf("[%s]", spec.LeafNodeType)
		if spec.FullText() != "" {
			name = name + " " + spec.FullText()
		}
		labels := spec.Labels()
		if len(labels) > 0 {
			name = name + " [" + strings.Join(labels, ", ") + "]"
		}

		name = tcEscape(name)
		fmt.Fprintf(f, "##teamcity[testStarted name='%s']\n", name)
		switch spec.State {
		case types.SpecStatePending:
			fmt.Fprintf(f, "##teamcity[testIgnored name='%s' message='pending']\n", name)
		case types.SpecStateSkipped:
			message := "skipped"
			if spec.Failure.Message != "" {
				message += " - " + spec.Failure.Message
			}
			fmt.Fprintf(f, "##teamcity[testIgnored name='%s' message='%s']\n", name, tcEscape(message))
		case types.SpecStateFailed:
			details := failureDescriptionForUnstructuredReporters(spec)
			fmt.Fprintf(f, "##teamcity[testFailed name='%s' message='failed - %s' details='%s']\n", name, tcEscape(spec.Failure.Message), tcEscape(details))
		case types.SpecStatePanicked:
			details := failureDescriptionForUnstructuredReporters(spec)
			fmt.Fprintf(f, "##teamcity[testFailed name='%s' message='panicked - %s' details='%s']\n", name, tcEscape(spec.Failure.ForwardedPanic), tcEscape(details))
		case types.SpecStateTimedout:
			details := failureDescriptionForUnstructuredReporters(spec)
			fmt.Fprintf(f, "##teamcity[testFailed name='%s' message='timedout - %s' details='%s']\n", name, tcEscape(spec.Failure.Message), tcEscape(details))
		case types.SpecStateInterrupted:
			details := failureDescriptionForUnstructuredReporters(spec)
			fmt.Fprintf(f, "##teamcity[testFailed name='%s' message='interrupted - %s' details='%s']\n", name, tcEscape(spec.Failure.Message), tcEscape(details))
		case types.SpecStateAborted:
			details := failureDescriptionForUnstructuredReporters(spec)
			fmt.Fprintf(f, "##teamcity[testFailed name='%s' message='aborted - %s' details='%s']\n", name, tcEscape(spec.Failure.Message), tcEscape(details))
		}

		fmt.Fprintf(f, "##teamcity[testStdOut name='%s' out='%s']\n", name, tcEscape(systemOutForUnstructuredReporters(spec)))
		fmt.Fprintf(f, "##teamcity[testStdErr name='%s' out='%s']\n", name, tcEscape(systemErrForUnstructuredReporters(spec)))
		fmt.Fprintf(f, "##teamcity[testFinished name='%s' duration='%d']\n", name, int(spec.RunTime.Seconds()*1000.0))
	}
	fmt.Fprintf(f, "##teamcity[testSuiteFinished name='%s']\n", tcEscape(report.SuiteDescription))

	return f.Close()
}

func MergeAndCleanupTeamcityReports(sources []string, dst string) ([]string, error) {
	messages := []string{}
	merged := []byte{}
	for _, source := range sources {
		data, err := os.ReadFile(source)
		if err != nil {
			messages = append(messages, fmt.Sprintf("Could not open %s:\n%s", source, err.Error()))
			continue
		}
		os.Remove(source)
		merged = append(merged, data...)
	}
	return messages, os.WriteFile(dst, merged, 0666)
}
   07070100000976000081A4000000000000000000000001645E367C000020FB000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/reporting_dsl.go package ginkgo

import (
	"fmt"
	"strings"

	"github.com/onsi/ginkgo/v2/internal"
	"github.com/onsi/ginkgo/v2/internal/global"
	"github.com/onsi/ginkgo/v2/reporters"
	"github.com/onsi/ginkgo/v2/types"
)

/*
Report represents the report for a Suite.
It is documented here: https://pkg.go.dev/github.com/onsi/ginkgo/v2/types#Report
*/
type Report = types.Report

/*
Report represents the report for a Spec.
It is documented here: https://pkg.go.dev/github.com/onsi/ginkgo/v2/types#SpecReport
*/
type SpecReport = types.SpecReport

/*
CurrentSpecReport returns information about the current running spec.
The returned object is a types.SpecReport which includes helper methods
to make extracting information about the spec easier.

You can learn more about SpecReport here: https://pkg.go.dev/github.com/onsi/ginkgo/types#SpecReport
You can learn more about CurrentSpecReport() here: https://onsi.github.io/ginkgo/#getting-a-report-for-the-current-spec
*/
func CurrentSpecReport() SpecReport {
	return global.Suite.CurrentSpecReport()
}

/*
	ReportEntryVisibility governs the visibility of ReportEntries in Ginkgo's console reporter

- ReportEntryVisibilityAlways: the default behavior - the ReportEntry is always emitted.
- ReportEntryVisibilityFailureOrVerbose: the ReportEntry is only emitted if the spec fails or if the tests are run with -v (similar to GinkgoWriters behavior).
- ReportEntryVisibilityNever: the ReportEntry is never emitted though it appears in any generated machine-readable reports (e.g. by setting `--json-report`).

You can learn more about Report Entries here: https://onsi.github.io/ginkgo/#attaching-data-to-reports
*/
type ReportEntryVisibility = types.ReportEntryVisibility

const ReportEntryVisibilityAlways, ReportEntryVisibilityFailureOrVerbose, ReportEntryVisibilityNever = types.ReportEntryVisibilityAlways, types.ReportEntryVisibilityFailureOrVerbose, types.ReportEntryVisibilityNever

/*
AddReportEntry generates and adds a new ReportEntry to the current spec's SpecReport.
It can take any of the following arguments:
  - A single arbitrary object to attach as the Value of the ReportEntry.  This object will be included in any generated reports and will be emitted to the console when the report is emitted.
  - A ReportEntryVisibility enum to control the visibility of the ReportEntry
  - An Offset or CodeLocation decoration to control the reported location of the ReportEntry

If the Value object implements `fmt.Stringer`, it's `String()` representation is used when emitting to the console.

AddReportEntry() must be called within a Subject or Setup node - not in a Container node.

You can learn more about Report Entries here: https://onsi.github.io/ginkgo/#attaching-data-to-reports
*/
func AddReportEntry(name string, args ...interface{}) {
	cl := types.NewCodeLocation(1)
	reportEntry, err := internal.NewReportEntry(name, cl, args...)
	if err != nil {
		Fail(fmt.Sprintf("Failed to generate Report Entry:\n%s", err.Error()), 1)
	}
	err = global.Suite.AddReportEntry(reportEntry)
	if err != nil {
		Fail(fmt.Sprintf("Failed to add Report Entry:\n%s", err.Error()), 1)
	}
}

/*
ReportBeforeEach nodes are run for each spec, even if the spec is skipped or pending.  ReportBeforeEach nodes take a function that
receives a SpecReport.  They are called before the spec starts.

You cannot nest any other Ginkgo nodes within a ReportBeforeEach node's closure.
You can learn more about ReportBeforeEach here: https://onsi.github.io/ginkgo/#generating-reports-programmatically
*/
func ReportBeforeEach(body func(SpecReport), args ...interface{}) bool {
	combinedArgs := []interface{}{body}
	combinedArgs = append(combinedArgs, args...)

	return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeReportBeforeEach, "", combinedArgs...))
}

/*
ReportAfterEach nodes are run for each spec, even if the spec is skipped or pending.  ReportAfterEach nodes take a function that
receives a SpecReport.  They are called after the spec has completed and receive the final report for the spec.

You cannot nest any other Ginkgo nodes within a ReportAfterEach node's closure.
You can learn more about ReportAfterEach here: https://onsi.github.io/ginkgo/#generating-reports-programmatically
*/
func ReportAfterEach(body func(SpecReport), args ...interface{}) bool {
	combinedArgs := []interface{}{body}
	combinedArgs = append(combinedArgs, args...)

	return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeReportAfterEach, "", combinedArgs...))
}

/*
ReportBeforeSuite nodes are run at the beginning of the suite.  ReportBeforeSuite nodes take a function that receives a suite Report.

They are called at the beginning of the suite, before any specs have run and any BeforeSuite or SynchronizedBeforeSuite nodes, and are passed in the initial report for the suite.
ReportBeforeSuite nodes must be created at the top-level (i.e. not nested in a Context/Describe/When node)

# When running in parallel, Ginkgo ensures that only one of the parallel nodes runs the ReportBeforeSuite

You cannot nest any other Ginkgo nodes within a ReportAfterSuite node's closure.
You can learn more about ReportAfterSuite here: https://onsi.github.io/ginkgo/#generating-reports-programmatically

You can learn more about Ginkgo's reporting infrastructure, including generating reports with the CLI here: https://onsi.github.io/ginkgo/#generating-machine-readable-reports
*/
func ReportBeforeSuite(body func(Report), args ...interface{}) bool {
	combinedArgs := []interface{}{body}
	combinedArgs = append(combinedArgs, args...)
	return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeReportBeforeSuite, "", combinedArgs...))
}

/*
ReportAfterSuite nodes are run at the end of the suite.  ReportAfterSuite nodes take a function that receives a suite Report.

They are called at the end of the suite, after all specs have run and any AfterSuite or SynchronizedAfterSuite nodes, and are passed in the final report for the suite.
ReportAftersuite nodes must be created at the top-level (i.e. not nested in a Context/Describe/When node)

When running in parallel, Ginkgo ensures that only one of the parallel nodes runs the ReportAfterSuite and that it is passed a report that is aggregated across
all parallel nodes

In addition to using ReportAfterSuite to programmatically generate suite reports, you can also generate JSON, JUnit, and Teamcity formatted reports using the --json-report, --junit-report, and --teamcity-report ginkgo CLI flags.

You cannot nest any other Ginkgo nodes within a ReportAfterSuite node's closure.
You can learn more about ReportAfterSuite here: https://onsi.github.io/ginkgo/#generating-reports-programmatically

You can learn more about Ginkgo's reporting infrastructure, including generating reports with the CLI here: https://onsi.github.io/ginkgo/#generating-machine-readable-reports
*/
func ReportAfterSuite(text string, body func(Report), args ...interface{}) bool {
	combinedArgs := []interface{}{body}
	combinedArgs = append(combinedArgs, args...)
	return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeReportAfterSuite, text, combinedArgs...))
}

func registerReportAfterSuiteNodeForAutogeneratedReports(reporterConfig types.ReporterConfig) {
	body := func(report Report) {
		if reporterConfig.JSONReport != "" {
			err := reporters.GenerateJSONReport(report, reporterConfig.JSONReport)
			if err != nil {
				Fail(fmt.Sprintf("Failed to generate JSON report:\n%s", err.Error()))
			}
		}
		if reporterConfig.JUnitReport != "" {
			err := reporters.GenerateJUnitReport(report, reporterConfig.JUnitReport)
			if err != nil {
				Fail(fmt.Sprintf("Failed to generate JUnit report:\n%s", err.Error()))
			}
		}
		if reporterConfig.TeamcityReport != "" {
			err := reporters.GenerateTeamcityReport(report, reporterConfig.TeamcityReport)
			if err != nil {
				Fail(fmt.Sprintf("Failed to generate Teamcity report:\n%s", err.Error()))
			}
		}
	}

	flags := []string{}
	if reporterConfig.JSONReport != "" {
		flags = append(flags, "--json-report")
	}
	if reporterConfig.JUnitReport != "" {
		flags = append(flags, "--junit-report")
	}
	if reporterConfig.TeamcityReport != "" {
		flags = append(flags, "--teamcity-report")
	}
	pushNode(internal.NewNode(
		deprecationTracker, types.NodeTypeReportAfterSuite,
		fmt.Sprintf("Autogenerated ReportAfterSuite for %s", strings.Join(flags, " ")),
		body,
		types.NewCustomCodeLocation("autogenerated by Ginkgo"),
	))
}
 07070100000977000081A4000000000000000000000001645E367C0000288A000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/table_dsl.go package ginkgo

import (
	"context"
	"fmt"
	"reflect"
	"strings"

	"github.com/onsi/ginkgo/v2/internal"
	"github.com/onsi/ginkgo/v2/types"
)

/*
The EntryDescription decorator allows you to pass a format string to DescribeTable() and Entry().  This format string is used to generate entry names via:

	fmt.Sprintf(formatString, parameters...)

where parameters are the parameters passed into the entry.

When passed into an Entry the EntryDescription is used to generate the name or that entry.  When passed to DescribeTable, the EntryDescription is used to generate the names for any entries that have `nil` descriptions.

You can learn more about generating EntryDescriptions here: https://onsi.github.io/ginkgo/#generating-entry-descriptions
*/
type EntryDescription string

func (ed EntryDescription) render(args ...interface{}) string {
	return fmt.Sprintf(string(ed), args...)
}

/*
DescribeTable describes a table-driven spec.

For example:

	DescribeTable("a simple table",
	    func(x int, y int, expected bool) {
	        Ω(x > y).Should(Equal(expected))
	    },
	    Entry("x > y", 1, 0, true),
	    Entry("x == y", 0, 0, false),
	    Entry("x < y", 0, 1, false),
	)

You can learn more about DescribeTable here: https://onsi.github.io/ginkgo/#table-specs
And can explore some Table patterns here: https://onsi.github.io/ginkgo/#table-specs-patterns
*/
func DescribeTable(description string, args ...interface{}) bool {
	GinkgoHelper()
	generateTable(description, args...)
	return true
}

/*
You can focus a table with `FDescribeTable`.  This is equivalent to `FDescribe`.
*/
func FDescribeTable(description string, args ...interface{}) bool {
	GinkgoHelper()
	args = append(args, internal.Focus)
	generateTable(description, args...)
	return true
}

/*
You can mark a table as pending with `PDescribeTable`.  This is equivalent to `PDescribe`.
*/
func PDescribeTable(description string, args ...interface{}) bool {
	GinkgoHelper()
	args = append(args, internal.Pending)
	generateTable(description, args...)
	return true
}

/*
You can mark a table as pending with `XDescribeTable`.  This is equivalent to `XDescribe`.
*/
var XDescribeTable = PDescribeTable

/*
TableEntry represents an entry in a table test.  You generally use the `Entry` constructor.
*/
type TableEntry struct {
	description  interface{}
	decorations  []interface{}
	parameters   []interface{}
	codeLocation types.CodeLocation
}

/*
Entry constructs a TableEntry.

The first argument is a description.  This can be a string, a function that accepts the parameters passed to the TableEntry and returns a string, an EntryDescription format string, or nil.  If nil is provided then the name of the Entry is derived using the table-level entry description.
Subsequent arguments accept any Ginkgo decorators.  These are filtered out and the remaining arguments are passed into the Spec function associated with the table.

Each Entry ends up generating an individual Ginkgo It.  The body of the it is the Table Body function with the Entry parameters passed in.

If you want to generate interruptible specs simply write a Table function that accepts a SpecContext as its first argument.  You can then decorate individual Entrys with the NodeTimeout and SpecTimeout decorators.

You can learn more about Entry here: https://onsi.github.io/ginkgo/#table-specs
*/
func Entry(description interface{}, args ...interface{}) TableEntry {
	GinkgoHelper()
	decorations, parameters := internal.PartitionDecorations(args...)
	return TableEntry{description: description, decorations: decorations, parameters: parameters, codeLocation: types.NewCodeLocation(0)}
}

/*
You can focus a particular entry with FEntry.  This is equivalent to FIt.
*/
func FEntry(description interface{}, args ...interface{}) TableEntry {
	GinkgoHelper()
	decorations, parameters := internal.PartitionDecorations(args...)
	decorations = append(decorations, internal.Focus)
	return TableEntry{description: description, decorations: decorations, parameters: parameters, codeLocation: types.NewCodeLocation(0)}
}

/*
You can mark a particular entry as pending with PEntry.  This is equivalent to PIt.
*/
func PEntry(description interface{}, args ...interface{}) TableEntry {
	GinkgoHelper()
	decorations, parameters := internal.PartitionDecorations(args...)
	decorations = append(decorations, internal.Pending)
	return TableEntry{description: description, decorations: decorations, parameters: parameters, codeLocation: types.NewCodeLocation(0)}
}

/*
You can mark a particular entry as pending with XEntry.  This is equivalent to XIt.
*/
var XEntry = PEntry

var contextType = reflect.TypeOf(new(context.Context)).Elem()
var specContextType = reflect.TypeOf(new(SpecContext)).Elem()

func generateTable(description string, args ...interface{}) {
	GinkgoHelper()
	cl := types.NewCodeLocation(0)
	containerNodeArgs := []interface{}{cl}

	entries := []TableEntry{}
	var itBody interface{}
	var itBodyType reflect.Type

	var tableLevelEntryDescription interface{}
	tableLevelEntryDescription = func(args ...interface{}) string {
		out := []string{}
		for _, arg := range args {
			out = append(out, fmt.Sprint(arg))
		}
		return "Entry: " + strings.Join(out, ", ")
	}

	if len(args) == 1 {
		exitIfErr(types.GinkgoErrors.MissingParametersForTableFunction(cl))
	}

	for i, arg := range args {
		switch t := reflect.TypeOf(arg); {
		case t == nil:
			exitIfErr(types.GinkgoErrors.IncorrectParameterTypeForTable(i, "nil", cl))
		case t == reflect.TypeOf(TableEntry{}):
			entries = append(entries, arg.(TableEntry))
		case t == reflect.TypeOf([]TableEntry{}):
			entries = append(entries, arg.([]TableEntry)...)
		case t == reflect.TypeOf(EntryDescription("")):
			tableLevelEntryDescription = arg.(EntryDescription).render
		case t.Kind() == reflect.Func && t.NumOut() == 1 && t.Out(0) == reflect.TypeOf(""):
			tableLevelEntryDescription = arg
		case t.Kind() == reflect.Func:
			if itBody != nil {
				exitIfErr(types.GinkgoErrors.MultipleEntryBodyFunctionsForTable(cl))
			}
			itBody = arg
			itBodyType = reflect.TypeOf(itBody)
		default:
			containerNodeArgs = append(containerNodeArgs, arg)
		}
	}

	containerNodeArgs = append(containerNodeArgs, func() {
		for _, entry := range entries {
			var err error
			entry := entry
			var description string
			switch t := reflect.TypeOf(entry.description); {
			case t == nil:
				err = validateParameters(tableLevelEntryDescription, entry.parameters, "Entry Description function", entry.codeLocation, false)
				if err == nil {
					description = invokeFunction(tableLevelEntryDescription, entry.parameters)[0].String()
				}
			case t == reflect.TypeOf(EntryDescription("")):
				description = entry.description.(EntryDescription).render(entry.parameters...)
			case t == reflect.TypeOf(""):
				description = entry.description.(string)
			case t.Kind() == reflect.Func && t.NumOut() == 1 && t.Out(0) == reflect.TypeOf(""):
				err = validateParameters(entry.description, entry.parameters, "Entry Description function", entry.codeLocation, false)
				if err == nil {
					description = invokeFunction(entry.description, entry.parameters)[0].String()
				}
			default:
				err = types.GinkgoErrors.InvalidEntryDescription(entry.codeLocation)
			}

			itNodeArgs := []interface{}{entry.codeLocation}
			itNodeArgs = append(itNodeArgs, entry.decorations...)

			hasContext := false
			if itBodyType.NumIn() > 0. {
				if itBodyType.In(0).Implements(specContextType) {
					hasContext = true
				} else if itBodyType.In(0).Implements(contextType) && (len(entry.parameters) == 0 || !reflect.TypeOf(entry.parameters[0]).Implements(contextType)) {
					hasContext = true
				}
			}

			if err == nil {
				err = validateParameters(itBody, entry.parameters, "Table Body function", entry.codeLocation, hasContext)
			}

			if hasContext {
				itNodeArgs = append(itNodeArgs, func(c SpecContext) {
					if err != nil {
						panic(err)
					}
					invokeFunction(itBody, append([]interface{}{c}, entry.parameters...))
				})
			} else {
				itNodeArgs = append(itNodeArgs, func() {
					if err != nil {
						panic(err)
					}
					invokeFunction(itBody, entry.parameters)
				})
			}

			pushNode(internal.NewNode(deprecationTracker, types.NodeTypeIt, description, itNodeArgs...))
		}
	})

	pushNode(internal.NewNode(deprecationTracker, types.NodeTypeContainer, description, containerNodeArgs...))
}

func invokeFunction(function interface{}, parameters []interface{}) []reflect.Value {
	inValues := make([]reflect.Value, len(parameters))

	funcType := reflect.TypeOf(function)
	limit := funcType.NumIn()
	if funcType.IsVariadic() {
		limit = limit - 1
	}

	for i := 0; i < limit && i < len(parameters); i++ {
		inValues[i] = computeValue(parameters[i], funcType.In(i))
	}

	if funcType.IsVariadic() {
		variadicType := funcType.In(limit).Elem()
		for i := limit; i < len(parameters); i++ {
			inValues[i] = computeValue(parameters[i], variadicType)
		}
	}

	return reflect.ValueOf(function).Call(inValues)
}

func validateParameters(function interface{}, parameters []interface{}, kind string, cl types.CodeLocation, hasContext bool) error {
	funcType := reflect.TypeOf(function)
	limit := funcType.NumIn()
	offset := 0
	if hasContext {
		limit = limit - 1
		offset = 1
	}
	if funcType.IsVariadic() {
		limit = limit - 1
	}
	if len(parameters) < limit {
		return types.GinkgoErrors.TooFewParametersToTableFunction(limit, len(parameters), kind, cl)
	}
	if len(parameters) > limit && !funcType.IsVariadic() {
		return types.GinkgoErrors.TooManyParametersToTableFunction(limit, len(parameters), kind, cl)
	}
	var i = 0
	for ; i < limit; i++ {
		actual := reflect.TypeOf(parameters[i])
		expected := funcType.In(i + offset)
		if !(actual == nil) && !actual.AssignableTo(expected) {
			return types.GinkgoErrors.IncorrectParameterTypeToTableFunction(i+1, expected, actual, kind, cl)
		}
	}
	if funcType.IsVariadic() {
		expected := funcType.In(limit + offset).Elem()
		for ; i < len(parameters); i++ {
			actual := reflect.TypeOf(parameters[i])
			if !(actual == nil) && !actual.AssignableTo(expected) {
				return types.GinkgoErrors.IncorrectVariadicParameterTypeToTableFunction(expected, actual, kind, cl)
			}
		}
	}

	return nil
}

func computeValue(parameter interface{}, t reflect.Type) reflect.Value {
	if parameter == nil {
		return reflect.Zero(t)
	} else {
		return reflect.ValueOf(parameter)
	}
}
  07070100000978000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/types    07070100000979000081A4000000000000000000000001645E367C00001021000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/types/code_location.go   package types

import (
	"fmt"
	"os"
	"regexp"
	"runtime"
	"runtime/debug"
	"strings"
	"sync"
)

type CodeLocation struct {
	FileName       string `json:",omitempty"`
	LineNumber     int    `json:",omitempty"`
	FullStackTrace string `json:",omitempty"`
	CustomMessage  string `json:",omitempty"`
}

func (codeLocation CodeLocation) String() string {
	if codeLocation.CustomMessage != "" {
		return codeLocation.CustomMessage
	}
	return fmt.Sprintf("%s:%d", codeLocation.FileName, codeLocation.LineNumber)
}

func (codeLocation CodeLocation) ContentsOfLine() string {
	if codeLocation.CustomMessage != "" {
		return ""
	}
	contents, err := os.ReadFile(codeLocation.FileName)
	if err != nil {
		return ""
	}
	lines := strings.Split(string(contents), "\n")
	if len(lines) < codeLocation.LineNumber {
		return ""
	}
	return lines[codeLocation.LineNumber-1]
}

type codeLocationLocator struct {
	pcs     map[uintptr]bool
	helpers map[string]bool
	lock    *sync.Mutex
}

func (c *codeLocationLocator) addHelper(pc uintptr) {
	c.lock.Lock()
	defer c.lock.Unlock()

	if c.pcs[pc] {
		return
	}
	c.lock.Unlock()
	f := runtime.FuncForPC(pc)
	c.lock.Lock()
	if f == nil {
		return
	}
	c.helpers[f.Name()] = true
	c.pcs[pc] = true
}

func (c *codeLocationLocator) hasHelper(name string) bool {
	c.lock.Lock()
	defer c.lock.Unlock()
	return c.helpers[name]
}

func (c *codeLocationLocator) getCodeLocation(skip int) CodeLocation {
	pc := make([]uintptr, 40)
	n := runtime.Callers(skip+2, pc)
	if n == 0 {
		return CodeLocation{}
	}
	pc = pc[:n]
	frames := runtime.CallersFrames(pc)
	for {
		frame, more := frames.Next()
		if !c.hasHelper(frame.Function) {
			return CodeLocation{FileName: frame.File, LineNumber: frame.Line}
		}
		if !more {
			break
		}
	}
	return CodeLocation{}
}

var clLocator = &codeLocationLocator{
	pcs:     map[uintptr]bool{},
	helpers: map[string]bool{},
	lock:    &sync.Mutex{},
}

// MarkAsHelper is used by GinkgoHelper to mark the caller (appropriately offset by skip)as a helper.  You can use this directly if you need to provide an optional `skip` to mark functions further up the call stack as helpers.
func MarkAsHelper(optionalSkip ...int) {
	skip := 1
	if len(optionalSkip) > 0 {
		skip += optionalSkip[0]
	}
	pc, _, _, ok := runtime.Caller(skip)
	if ok {
		clLocator.addHelper(pc)
	}
}

func NewCustomCodeLocation(message string) CodeLocation {
	return CodeLocation{
		CustomMessage: message,
	}
}

func NewCodeLocation(skip int) CodeLocation {
	return clLocator.getCodeLocation(skip + 1)
}

func NewCodeLocationWithStackTrace(skip int) CodeLocation {
	cl := clLocator.getCodeLocation(skip + 1)
	cl.FullStackTrace = PruneStack(string(debug.Stack()), skip+1)
	return cl
}

// PruneStack removes references to functions that are internal to Ginkgo
// and the Go runtime from a stack string and a certain number of stack entries
// at the beginning of the stack. The stack string has the format
// as returned by runtime/debug.Stack. The leading goroutine information is
// optional and always removed if present. Beware that runtime/debug.Stack
// adds itself as first entry, so typically skip must be >= 1 to remove that
// entry.
func PruneStack(fullStackTrace string, skip int) string {
	stack := strings.Split(fullStackTrace, "\n")
	// Ensure that the even entries are the method names and the
	// odd entries the source code information.
	if len(stack) > 0 && strings.HasPrefix(stack[0], "goroutine ") {
		// Ignore "goroutine 29 [running]:" line.
		stack = stack[1:]
	}
	// The "+1" is for skipping over the initial entry, which is
	// runtime/debug.Stack() itself.
	if len(stack) > 2*(skip+1) {
		stack = stack[2*(skip+1):]
	}
	prunedStack := []string{}
	if os.Getenv("GINKGO_PRUNE_STACK") == "FALSE" {
		prunedStack = stack
	} else {
		re := regexp.MustCompile(`\/ginkgo\/|\/pkg\/testing\/|\/pkg\/runtime\/`)
		for i := 0; i < len(stack)/2; i++ {
			// We filter out based on the source code file name.
			if !re.Match([]byte(stack[i*2+1])) {
				prunedStack = append(prunedStack, stack[i*2])
				prunedStack = append(prunedStack, stack[i*2+1])
			}
		}
	}
	return strings.Join(prunedStack, "\n")
}
   0707010000097A000081A4000000000000000000000001645E367C00009A8B000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/types/config.go  /*
Ginkgo accepts a number of configuration options.
These are documented [here](http://onsi.github.io/ginkgo/#the-ginkgo-cli)
*/

package types

import (
	"flag"
	"os"
	"path/filepath"
	"runtime"
	"strconv"
	"strings"
	"time"
)

// Configuration controlling how an individual test suite is run
type SuiteConfig struct {
	RandomSeed            int64
	RandomizeAllSpecs     bool
	FocusStrings          []string
	SkipStrings           []string
	FocusFiles            []string
	SkipFiles             []string
	LabelFilter           string
	FailOnPending         bool
	FailFast              bool
	FlakeAttempts         int
	DryRun                bool
	PollProgressAfter     time.Duration
	PollProgressInterval  time.Duration
	Timeout               time.Duration
	EmitSpecProgress      bool // this is deprecated but its removal is causing compile issue for some users that were setting it manually
	OutputInterceptorMode string
	SourceRoots           []string
	GracePeriod           time.Duration

	ParallelProcess int
	ParallelTotal   int
	ParallelHost    string
}

func NewDefaultSuiteConfig() SuiteConfig {
	return SuiteConfig{
		RandomSeed:      time.Now().Unix(),
		Timeout:         time.Hour,
		ParallelProcess: 1,
		ParallelTotal:   1,
		GracePeriod:     30 * time.Second,
	}
}

type VerbosityLevel uint

const (
	VerbosityLevelSuccinct VerbosityLevel = iota
	VerbosityLevelNormal
	VerbosityLevelVerbose
	VerbosityLevelVeryVerbose
)

func (vl VerbosityLevel) GT(comp VerbosityLevel) bool {
	return vl > comp
}

func (vl VerbosityLevel) GTE(comp VerbosityLevel) bool {
	return vl >= comp
}

func (vl VerbosityLevel) Is(comp VerbosityLevel) bool {
	return vl == comp
}

func (vl VerbosityLevel) LTE(comp VerbosityLevel) bool {
	return vl <= comp
}

func (vl VerbosityLevel) LT(comp VerbosityLevel) bool {
	return vl < comp
}

// Configuration for Ginkgo's reporter
type ReporterConfig struct {
	NoColor        bool
	Succinct       bool
	Verbose        bool
	VeryVerbose    bool
	FullTrace      bool
	ShowNodeEvents bool

	JSONReport     string
	JUnitReport    string
	TeamcityReport string
}

func (rc ReporterConfig) Verbosity() VerbosityLevel {
	if rc.Succinct {
		return VerbosityLevelSuccinct
	} else if rc.Verbose {
		return VerbosityLevelVerbose
	} else if rc.VeryVerbose {
		return VerbosityLevelVeryVerbose
	}
	return VerbosityLevelNormal
}

func (rc ReporterConfig) WillGenerateReport() bool {
	return rc.JSONReport != "" || rc.JUnitReport != "" || rc.TeamcityReport != ""
}

func NewDefaultReporterConfig() ReporterConfig {
	return ReporterConfig{}
}

// Configuration for the Ginkgo CLI
type CLIConfig struct {
	//for build, run, and watch
	Recurse      bool
	SkipPackage  string
	RequireSuite bool
	NumCompilers int

	//for run and watch only
	Procs                     int
	Parallel                  bool
	AfterRunHook              string
	OutputDir                 string
	KeepSeparateCoverprofiles bool
	KeepSeparateReports       bool

	//for run only
	KeepGoing       bool
	UntilItFails    bool
	Repeat          int
	RandomizeSuites bool

	//for watch only
	Depth       int
	WatchRegExp string
}

func NewDefaultCLIConfig() CLIConfig {
	return CLIConfig{
		Depth:       1,
		WatchRegExp: `\.go$`,
	}
}

func (g CLIConfig) ComputedProcs() int {
	if g.Procs > 0 {
		return g.Procs
	}

	n := 1
	if g.Parallel {
		n = runtime.NumCPU()
		if n > 4 {
			n = n - 1
		}
	}
	return n
}

func (g CLIConfig) ComputedNumCompilers() int {
	if g.NumCompilers > 0 {
		return g.NumCompilers
	}

	return runtime.NumCPU()
}

// Configuration for the Ginkgo CLI capturing available go flags
// A subset of Go flags are exposed by Ginkgo.  Some are available at compile time (e.g. ginkgo build) and others only at run time (e.g. ginkgo run - which has both build and run time flags).
// More details can be found at:
// https://docs.google.com/spreadsheets/d/1zkp-DS4hU4sAJl5eHh1UmgwxCPQhf3s5a8fbiOI8tJU/
type GoFlagsConfig struct {
	//build-time flags for code-and-performance analysis
	Race      bool
	Cover     bool
	CoverMode string
	CoverPkg  string
	Vet       string

	//run-time flags for code-and-performance analysis
	BlockProfile         string
	BlockProfileRate     int
	CoverProfile         string
	CPUProfile           string
	MemProfile           string
	MemProfileRate       int
	MutexProfile         string
	MutexProfileFraction int
	Trace                string

	//build-time flags for building
	A             bool
	ASMFlags      string
	BuildMode     string
	Compiler      string
	GCCGoFlags    string
	GCFlags       string
	InstallSuffix string
	LDFlags       string
	LinkShared    bool
	Mod           string
	N             bool
	ModFile       string
	ModCacheRW    bool
	MSan          bool
	PkgDir        string
	Tags          string
	TrimPath      bool
	ToolExec      string
	Work          bool
	X             bool
}

func NewDefaultGoFlagsConfig() GoFlagsConfig {
	return GoFlagsConfig{}
}

func (g GoFlagsConfig) BinaryMustBePreserved() bool {
	return g.BlockProfile != "" || g.CPUProfile != "" || g.MemProfile != "" || g.MutexProfile != ""
}

// Configuration that were deprecated in 2.0
type deprecatedConfig struct {
	DebugParallel                   bool
	NoisySkippings                  bool
	NoisyPendings                   bool
	RegexScansFilePath              bool
	SlowSpecThresholdWithFLoatUnits float64
	Stream                          bool
	Notify                          bool
	EmitSpecProgress                bool
	SlowSpecThreshold               time.Duration
	AlwaysEmitGinkgoWriter          bool
}

// Flags

// Flags sections used by both the CLI and the Ginkgo test process
var FlagSections = GinkgoFlagSections{
	{Key: "multiple-suites", Style: "{{dark-green}}", Heading: "Running Multiple Test Suites"},
	{Key: "order", Style: "{{green}}", Heading: "Controlling Test Order"},
	{Key: "parallel", Style: "{{yellow}}", Heading: "Controlling Test Parallelism"},
	{Key: "low-level-parallel", Style: "{{yellow}}", Heading: "Controlling Test Parallelism",
		Description: "These are set by the Ginkgo CLI, {{red}}{{bold}}do not set them manually{{/}} via go test.\nUse ginkgo -p or ginkgo -procs=N instead."},
	{Key: "filter", Style: "{{cyan}}", Heading: "Filtering Tests"},
	{Key: "failure", Style: "{{red}}", Heading: "Failure Handling"},
	{Key: "output", Style: "{{magenta}}", Heading: "Controlling Output Formatting"},
	{Key: "code-and-coverage-analysis", Style: "{{orange}}", Heading: "Code and Coverage Analysis"},
	{Key: "performance-analysis", Style: "{{coral}}", Heading: "Performance Analysis"},
	{Key: "debug", Style: "{{blue}}", Heading: "Debugging Tests",
		Description: "In addition to these flags, Ginkgo supports a few debugging environment variables.  To change the parallel server protocol set {{blue}}GINKGO_PARALLEL_PROTOCOL{{/}} to {{bold}}HTTP{{/}}.  To avoid pruning callstacks set {{blue}}GINKGO_PRUNE_STACK{{/}} to {{bold}}FALSE{{/}}."},
	{Key: "watch", Style: "{{light-yellow}}", Heading: "Controlling Ginkgo Watch"},
	{Key: "misc", Style: "{{light-gray}}", Heading: "Miscellaneous"},
	{Key: "go-build", Style: "{{light-gray}}", Heading: "Go Build Flags", Succinct: true,
		Description: "These flags are inherited from go build.  Run {{bold}}ginkgo help build{{/}} for more detailed flag documentation."},
}

// SuiteConfigFlags provides flags for the Ginkgo test process, and CLI
var SuiteConfigFlags = GinkgoFlags{
	{KeyPath: "S.RandomSeed", Name: "seed", SectionKey: "order", UsageDefaultValue: "randomly generated by Ginkgo",
		Usage: "The seed used to randomize the spec suite."},
	{KeyPath: "S.RandomizeAllSpecs", Name: "randomize-all", SectionKey: "order", DeprecatedName: "randomizeAllSpecs", DeprecatedDocLink: "changed-command-line-flags",
		Usage: "If set, ginkgo will randomize all specs together.  By default, ginkgo only randomizes the top level Describe, Context and When containers."},

	{KeyPath: "S.FailOnPending", Name: "fail-on-pending", SectionKey: "failure", DeprecatedName: "failOnPending", DeprecatedDocLink: "changed-command-line-flags",
		Usage: "If set, ginkgo will mark the test suite as failed if any specs are pending."},
	{KeyPath: "S.FailFast", Name: "fail-fast", SectionKey: "failure", DeprecatedName: "failFast", DeprecatedDocLink: "changed-command-line-flags",
		Usage: "If set, ginkgo will stop running a test suite after a failure occurs."},
	{KeyPath: "S.FlakeAttempts", Name: "flake-attempts", SectionKey: "failure", UsageDefaultValue: "0 - failed tests are not retried", DeprecatedName: "flakeAttempts", DeprecatedDocLink: "changed-command-line-flags",
		Usage: "Make up to this many attempts to run each spec. If any of the attempts succeed, the suite will not be failed."},

	{KeyPath: "S.DryRun", Name: "dry-run", SectionKey: "debug", DeprecatedName: "dryRun", DeprecatedDocLink: "changed-command-line-flags",
		Usage: "If set, ginkgo will walk the test hierarchy without actually running anything.  Best paired with -v."},
	{KeyPath: "S.PollProgressAfter", Name: "poll-progress-after", SectionKey: "debug", UsageDefaultValue: "0",
		Usage: "Emit node progress reports periodically if node hasn't completed after this duration."},
	{KeyPath: "S.PollProgressInterval", Name: "poll-progress-interval", SectionKey: "debug", UsageDefaultValue: "10s",
		Usage: "The rate at which to emit node progress reports after poll-progress-after has elapsed."},
	{KeyPath: "S.SourceRoots", Name: "source-root", SectionKey: "debug",
		Usage: "The location to look for source code when generating progress reports.  You can pass multiple --source-root flags."},
	{KeyPath: "S.Timeout", Name: "timeout", SectionKey: "debug", UsageDefaultValue: "1h",
		Usage: "Test suite fails if it does not complete within the specified timeout."},
	{KeyPath: "S.GracePeriod", Name: "grace-period", SectionKey: "debug", UsageDefaultValue: "30s",
		Usage: "When interrupted, Ginkgo will wait for GracePeriod for the current running node to exit before moving on to the next one."},
	{KeyPath: "S.OutputInterceptorMode", Name: "output-interceptor-mode", SectionKey: "debug", UsageArgument: "dup, swap, or none",
		Usage: "If set, ginkgo will use the specified output interception strategy when running in parallel.  Defaults to dup on unix and swap on windows."},

	{KeyPath: "S.LabelFilter", Name: "label-filter", SectionKey: "filter", UsageArgument: "expression",
		Usage: "If set, ginkgo will only run specs with labels that match the label-filter.  The passed-in expression can include boolean operations (!, &&, ||, ','), groupings via '()', and regular expressions '/regexp/'.  e.g. '(cat || dog) && !fruit'"},
	{KeyPath: "S.FocusStrings", Name: "focus", SectionKey: "filter",
		Usage: "If set, ginkgo will only run specs that match this regular expression. Can be specified multiple times, values are ORed."},
	{KeyPath: "S.SkipStrings", Name: "skip", SectionKey: "filter",
		Usage: "If set, ginkgo will only run specs that do not match this regular expression. Can be specified multiple times, values are ORed."},
	{KeyPath: "S.FocusFiles", Name: "focus-file", SectionKey: "filter", UsageArgument: "file (regexp) | file:line | file:lineA-lineB | file:line,line,line",
		Usage: "If set, ginkgo will only run specs in matching files. Can be specified multiple times, values are ORed."},
	{KeyPath: "S.SkipFiles", Name: "skip-file", SectionKey: "filter", UsageArgument: "file (regexp) | file:line | file:lineA-lineB | file:line,line,line",
		Usage: "If set, ginkgo will skip specs in matching files. Can be specified multiple times, values are ORed."},

	{KeyPath: "D.RegexScansFilePath", DeprecatedName: "regexScansFilePath", DeprecatedDocLink: "removed--regexscansfilepath", DeprecatedVersion: "2.0.0"},
	{KeyPath: "D.DebugParallel", DeprecatedName: "debug", DeprecatedDocLink: "removed--debug", DeprecatedVersion: "2.0.0"},
	{KeyPath: "D.EmitSpecProgress", DeprecatedName: "progress", SectionKey: "debug",
		DeprecatedVersion: "2.5.0", Usage: ".  The functionality provided by --progress was confusing and is no longer needed.  Use --show-node-events instead to see node entry and exit events included in the timeline of failed and verbose specs.  Or you can run with -vv to always see all node events.  Lastly, --poll-progress-after and the PollProgressAfter decorator now provide a better mechanism for debugging specs that tend to get stuck."},
}

// ParallelConfigFlags provides flags for the Ginkgo test process (not the CLI)
var ParallelConfigFlags = GinkgoFlags{
	{KeyPath: "S.ParallelProcess", Name: "parallel.process", SectionKey: "low-level-parallel", UsageDefaultValue: "1",
		Usage: "This worker process's (one-indexed) process number.  For running specs in parallel."},
	{KeyPath: "S.ParallelTotal", Name: "parallel.total", SectionKey: "low-level-parallel", UsageDefaultValue: "1",
		Usage: "The total number of worker processes.  For running specs in parallel."},
	{KeyPath: "S.ParallelHost", Name: "parallel.host", SectionKey: "low-level-parallel", UsageDefaultValue: "set by Ginkgo CLI",
		Usage: "The address for the server that will synchronize the processes."},
}

// ReporterConfigFlags provides flags for the Ginkgo test process, and CLI
var ReporterConfigFlags = GinkgoFlags{
	{KeyPath: "R.NoColor", Name: "no-color", SectionKey: "output", DeprecatedName: "noColor", DeprecatedDocLink: "changed-command-line-flags",
		Usage: "If set, suppress color output in default reporter."},
	{KeyPath: "R.Verbose", Name: "v", SectionKey: "output",
		Usage: "If set, emits more output including GinkgoWriter contents."},
	{KeyPath: "R.VeryVerbose", Name: "vv", SectionKey: "output",
		Usage: "If set, emits with maximal verbosity - includes skipped and pending tests."},
	{KeyPath: "R.Succinct", Name: "succinct", SectionKey: "output",
		Usage: "If set, default reporter prints out a very succinct report"},
	{KeyPath: "R.FullTrace", Name: "trace", SectionKey: "output",
		Usage: "If set, default reporter prints out the full stack trace when a failure occurs"},
	{KeyPath: "R.ShowNodeEvents", Name: "show-node-events", SectionKey: "output",
		Usage: "If set, default reporter prints node > Enter and < Exit events when specs fail"},

	{KeyPath: "R.JSONReport", Name: "json-report", UsageArgument: "filename.json", SectionKey: "output",
		Usage: "If set, Ginkgo will generate a JSON-formatted test report at the specified location."},
	{KeyPath: "R.JUnitReport", Name: "junit-report", UsageArgument: "filename.xml", SectionKey: "output", DeprecatedName: "reportFile", DeprecatedDocLink: "improved-reporting-infrastructure",
		Usage: "If set, Ginkgo will generate a conformant junit test report in the specified file."},
	{KeyPath: "R.TeamcityReport", Name: "teamcity-report", UsageArgument: "filename", SectionKey: "output",
		Usage: "If set, Ginkgo will generate a Teamcity-formatted test report at the specified location."},

	{KeyPath: "D.SlowSpecThresholdWithFLoatUnits", DeprecatedName: "slowSpecThreshold", DeprecatedDocLink: "changed--slowspecthreshold",
		Usage: "use --slow-spec-threshold instead and pass in a duration string (e.g. '5s', not '5.0')"},
	{KeyPath: "D.NoisyPendings", DeprecatedName: "noisyPendings", DeprecatedDocLink: "removed--noisypendings-and--noisyskippings", DeprecatedVersion: "2.0.0"},
	{KeyPath: "D.NoisySkippings", DeprecatedName: "noisySkippings", DeprecatedDocLink: "removed--noisypendings-and--noisyskippings", DeprecatedVersion: "2.0.0"},
	{KeyPath: "D.SlowSpecThreshold", DeprecatedName: "slow-spec-threshold", SectionKey: "output", Usage: "--slow-spec-threshold has been deprecated and will be removed in a future version of Ginkgo.  This feature has proved to be more noisy than useful.  You can use --poll-progress-after, instead, to get more actionable feedback about potentially slow specs and understand where they might be getting stuck.", DeprecatedVersion: "2.5.0"},
	{KeyPath: "D.AlwaysEmitGinkgoWriter", DeprecatedName: "always-emit-ginkgo-writer", SectionKey: "output", Usage: " - use -v instead, or one of Ginkgo's machine-readable report formats to get GinkgoWriter output for passing specs."},
}

// BuildTestSuiteFlagSet attaches to the CommandLine flagset and provides flags for the Ginkgo test process
func BuildTestSuiteFlagSet(suiteConfig *SuiteConfig, reporterConfig *ReporterConfig) (GinkgoFlagSet, error) {
	flags := SuiteConfigFlags.CopyAppend(ParallelConfigFlags...).CopyAppend(ReporterConfigFlags...)
	flags = flags.WithPrefix("ginkgo")
	bindings := map[string]interface{}{
		"S": suiteConfig,
		"R": reporterConfig,
		"D": &deprecatedConfig{},
	}
	extraGoFlagsSection := GinkgoFlagSection{Style: "{{gray}}", Heading: "Go test flags"}

	return NewAttachedGinkgoFlagSet(flag.CommandLine, flags, bindings, FlagSections, extraGoFlagsSection)
}

// VetConfig validates that the Ginkgo test process' configuration is sound
func VetConfig(flagSet GinkgoFlagSet, suiteConfig SuiteConfig, reporterConfig ReporterConfig) []error {
	errors := []error{}

	if flagSet.WasSet("count") || flagSet.WasSet("test.count") {
		flag := flagSet.Lookup("count")
		if flag == nil {
			flag = flagSet.Lookup("test.count")
		}
		count, err := strconv.Atoi(flag.Value.String())
		if err != nil || count != 1 {
			errors = append(errors, GinkgoErrors.InvalidGoFlagCount())
		}
	}

	if flagSet.WasSet("parallel") || flagSet.WasSet("test.parallel") {
		errors = append(errors, GinkgoErrors.InvalidGoFlagParallel())
	}

	if suiteConfig.ParallelTotal < 1 {
		errors = append(errors, GinkgoErrors.InvalidParallelTotalConfiguration())
	}

	if suiteConfig.ParallelProcess > suiteConfig.ParallelTotal || suiteConfig.ParallelProcess < 1 {
		errors = append(errors, GinkgoErrors.InvalidParallelProcessConfiguration())
	}

	if suiteConfig.ParallelTotal > 1 && suiteConfig.ParallelHost == "" {
		errors = append(errors, GinkgoErrors.MissingParallelHostConfiguration())
	}

	if suiteConfig.DryRun && suiteConfig.ParallelTotal > 1 {
		errors = append(errors, GinkgoErrors.DryRunInParallelConfiguration())
	}

	if suiteConfig.GracePeriod <= 0 {
		errors = append(errors, GinkgoErrors.GracePeriodCannotBeZero())
	}

	if len(suiteConfig.FocusFiles) > 0 {
		_, err := ParseFileFilters(suiteConfig.FocusFiles)
		if err != nil {
			errors = append(errors, err)
		}
	}

	if len(suiteConfig.SkipFiles) > 0 {
		_, err := ParseFileFilters(suiteConfig.SkipFiles)
		if err != nil {
			errors = append(errors, err)
		}
	}

	if suiteConfig.LabelFilter != "" {
		_, err := ParseLabelFilter(suiteConfig.LabelFilter)
		if err != nil {
			errors = append(errors, err)
		}
	}

	switch strings.ToLower(suiteConfig.OutputInterceptorMode) {
	case "", "dup", "swap", "none":
	default:
		errors = append(errors, GinkgoErrors.InvalidOutputInterceptorModeConfiguration(suiteConfig.OutputInterceptorMode))
	}

	numVerbosity := 0
	for _, v := range []bool{reporterConfig.Succinct, reporterConfig.Verbose, reporterConfig.VeryVerbose} {
		if v {
			numVerbosity++
		}
	}
	if numVerbosity > 1 {
		errors = append(errors, GinkgoErrors.ConflictingVerbosityConfiguration())
	}

	return errors
}

// GinkgoCLISharedFlags provides flags shared by the Ginkgo CLI's build, watch, and run commands
var GinkgoCLISharedFlags = GinkgoFlags{
	{KeyPath: "C.Recurse", Name: "r", SectionKey: "multiple-suites",
		Usage: "If set, ginkgo finds and runs test suites under the current directory recursively."},
	{KeyPath: "C.SkipPackage", Name: "skip-package", SectionKey: "multiple-suites", DeprecatedName: "skipPackage", DeprecatedDocLink: "changed-command-line-flags",
		UsageArgument: "comma-separated list of packages",
		Usage:         "A comma-separated list of package names to be skipped.  If any part of the package's path matches, that package is ignored."},
	{KeyPath: "C.RequireSuite", Name: "require-suite", SectionKey: "failure", DeprecatedName: "requireSuite", DeprecatedDocLink: "changed-command-line-flags",
		Usage: "If set, Ginkgo fails if there are ginkgo tests in a directory but no invocation of RunSpecs."},
	{KeyPath: "C.NumCompilers", Name: "compilers", SectionKey: "multiple-suites", UsageDefaultValue: "0 (will autodetect)",
		Usage: "When running multiple packages, the number of concurrent compilations to perform."},
}

// GinkgoCLIRunAndWatchFlags provides flags shared by the Ginkgo CLI's build and watch commands (but not run)
var GinkgoCLIRunAndWatchFlags = GinkgoFlags{
	{KeyPath: "C.Procs", Name: "procs", SectionKey: "parallel", UsageDefaultValue: "1 (run in series)",
		Usage: "The number of parallel test nodes to run."},
	{KeyPath: "C.Procs", Name: "nodes", SectionKey: "parallel", UsageDefaultValue: "1 (run in series)",
		Usage: "--nodes is an alias for --procs"},
	{KeyPath: "C.Parallel", Name: "p", SectionKey: "parallel",
		Usage: "If set, ginkgo will run in parallel with an auto-detected number of nodes."},
	{KeyPath: "C.AfterRunHook", Name: "after-run-hook", SectionKey: "misc", DeprecatedName: "afterSuiteHook", DeprecatedDocLink: "changed-command-line-flags",
		Usage: "Command to run when a test suite completes."},
	{KeyPath: "C.OutputDir", Name: "output-dir", SectionKey: "output", UsageArgument: "directory", DeprecatedName: "outputdir", DeprecatedDocLink: "improved-profiling-support",
		Usage: "A location to place all generated profiles and reports."},
	{KeyPath: "C.KeepSeparateCoverprofiles", Name: "keep-separate-coverprofiles", SectionKey: "code-and-coverage-analysis",
		Usage: "If set, Ginkgo does not merge coverprofiles into one monolithic coverprofile.  The coverprofiles will remain in their respective package directories or in -output-dir if set."},
	{KeyPath: "C.KeepSeparateReports", Name: "keep-separate-reports", SectionKey: "output",
		Usage: "If set, Ginkgo does not merge per-suite reports (e.g. -json-report) into one monolithic report for the entire testrun.  The reports will remain in their respective package directories or in -output-dir if set."},

	{KeyPath: "D.Stream", DeprecatedName: "stream", DeprecatedDocLink: "removed--stream", DeprecatedVersion: "2.0.0"},
	{KeyPath: "D.Notify", DeprecatedName: "notify", DeprecatedDocLink: "removed--notify", DeprecatedVersion: "2.0.0"},
}

// GinkgoCLIRunFlags provides flags for Ginkgo CLI's run command that aren't shared by any other commands
var GinkgoCLIRunFlags = GinkgoFlags{
	{KeyPath: "C.KeepGoing", Name: "keep-going", SectionKey: "multiple-suites", DeprecatedName: "keepGoing", DeprecatedDocLink: "changed-command-line-flags",
		Usage: "If set, failures from earlier test suites do not prevent later test suites from running."},
	{KeyPath: "C.UntilItFails", Name: "until-it-fails", SectionKey: "debug", DeprecatedName: "untilItFails", DeprecatedDocLink: "changed-command-line-flags",
		Usage: "If set, ginkgo will keep rerunning test suites until a failure occurs."},
	{KeyPath: "C.Repeat", Name: "repeat", SectionKey: "debug", UsageArgument: "n", UsageDefaultValue: "0 - i.e. no repetition, run only once",
		Usage: "The number of times to re-run a test-suite.  Useful for debugging flaky tests.  If set to N the suite will be run N+1 times and will be required to pass each time."},
	{KeyPath: "C.RandomizeSuites", Name: "randomize-suites", SectionKey: "order", DeprecatedName: "randomizeSuites", DeprecatedDocLink: "changed-command-line-flags",
		Usage: "If set, ginkgo will randomize the order in which test suites run."},
}

// GinkgoCLIRunFlags provides flags for Ginkgo CLI's watch command that aren't shared by any other commands
var GinkgoCLIWatchFlags = GinkgoFlags{
	{KeyPath: "C.Depth", Name: "depth", SectionKey: "watch",
		Usage: "Ginkgo will watch dependencies down to this depth in the dependency tree."},
	{KeyPath: "C.WatchRegExp", Name: "watch-regexp", SectionKey: "watch", DeprecatedName: "watchRegExp", DeprecatedDocLink: "changed-command-line-flags",
		UsageArgument:     "Regular Expression",
		UsageDefaultValue: `\.go$`,
		Usage:             "Only files matching this regular expression will be watched for changes."},
}

// GoBuildFlags provides flags for the Ginkgo CLI build, run, and watch commands that capture go's build-time flags.  These are passed to go test -c by the ginkgo CLI
var GoBuildFlags = GinkgoFlags{
	{KeyPath: "Go.Race", Name: "race", SectionKey: "code-and-coverage-analysis",
		Usage: "enable data race detection. Supported only on linux/amd64, freebsd/amd64, darwin/amd64, windows/amd64, linux/ppc64le and linux/arm64 (only for 48-bit VMA)."},
	{KeyPath: "Go.Vet", Name: "vet", UsageArgument: "list", SectionKey: "code-and-coverage-analysis",
		Usage: `Configure the invocation of "go vet" during "go test" to use the comma-separated list of vet checks.  If list is empty, "go test" runs "go vet" with a curated list of checks believed to be always worth addressing.  If list is "off", "go test" does not run "go vet" at all.  Available checks can be found by running 'go doc cmd/vet'`},
	{KeyPath: "Go.Cover", Name: "cover", SectionKey: "code-and-coverage-analysis",
		Usage: "Enable coverage analysis.	Note that because coverage works by annotating the source code before compilation, compilation and test failures with coverage enabled may report line numbers that don't correspond to the original sources."},
	{KeyPath: "Go.CoverMode", Name: "covermode", UsageArgument: "set,count,atomic", SectionKey: "code-and-coverage-analysis",
		Usage: `Set the mode for coverage analysis for the package[s] being tested. 'set': does this statement run? 'count': how many times does this statement run? 'atomic': like count, but correct in multithreaded tests and more expensive (must use atomic with -race). Sets -cover`},
	{KeyPath: "Go.CoverPkg", Name: "coverpkg", UsageArgument: "pattern1,pattern2,pattern3", SectionKey: "code-and-coverage-analysis",
		Usage: "Apply coverage analysis in each test to packages matching the patterns. 	The default is for each test to analyze only the package being tested. See 'go help packages' for a description of package patterns. Sets -cover."},

	{KeyPath: "Go.A", Name: "a", SectionKey: "go-build",
		Usage: "force rebuilding of packages that are already up-to-date."},
	{KeyPath: "Go.ASMFlags", Name: "asmflags", UsageArgument: "'[pattern=]arg list'", SectionKey: "go-build",
		Usage: "arguments to pass on each go tool asm invocation."},
	{KeyPath: "Go.BuildMode", Name: "buildmode", UsageArgument: "mode", SectionKey: "go-build",
		Usage: "build mode to use. See 'go help buildmode' for more."},
	{KeyPath: "Go.Compiler", Name: "compiler", UsageArgument: "name", SectionKey: "go-build",
		Usage: "name of compiler to use, as in runtime.Compiler (gccgo or gc)."},
	{KeyPath: "Go.GCCGoFlags", Name: "gccgoflags", UsageArgument: "'[pattern=]arg list'", SectionKey: "go-build",
		Usage: "arguments to pass on each gccgo compiler/linker invocation."},
	{KeyPath: "Go.GCFlags", Name: "gcflags", UsageArgument: "'[pattern=]arg list'", SectionKey: "go-build",
		Usage: "arguments to pass on each go tool compile invocation."},
	{KeyPath: "Go.InstallSuffix", Name: "installsuffix", SectionKey: "go-build",
		Usage: "a suffix to use in the name of the package installation directory, in order to keep output separate from default builds. If using the -race flag, the install suffix is automatically set to raceor, if set explicitly, has _race appended to it. Likewise for the -msan flag.  Using a -buildmode option that requires non-default compile flags has a similar effect."},
	{KeyPath: "Go.LDFlags", Name: "ldflags", UsageArgument: "'[pattern=]arg list'", SectionKey: "go-build",
		Usage: "arguments to pass on each go tool link invocation."},
	{KeyPath: "Go.LinkShared", Name: "linkshared", SectionKey: "go-build",
		Usage: "build code that will be linked against shared libraries previously created with -buildmode=shared."},
	{KeyPath: "Go.Mod", Name: "mod", UsageArgument: "mode (readonly, vendor, or mod)", SectionKey: "go-build",
		Usage: "module download mode to use: readonly, vendor, or mod.  See 'go help modules' for more."},
	{KeyPath: "Go.ModCacheRW", Name: "modcacherw", SectionKey: "go-build",
		Usage: "leave newly-created directories in the module cache read-write instead of making them read-only."},
	{KeyPath: "Go.ModFile", Name: "modfile", UsageArgument: "file", SectionKey: "go-build",
		Usage: `in module aware mode, read (and possibly write) an alternate go.mod file instead of the one in the module root directory. A file named go.mod must still be present in order to determine the module root directory, but it is not accessed. When -modfile is specified, an alternate go.sum file is also used: its path is derived from the -modfile flag by trimming the ".mod" extension and appending ".sum".`},
	{KeyPath: "Go.MSan", Name: "msan", SectionKey: "go-build",
		Usage: "enable interoperation with memory sanitizer. Supported only on linux/amd64, linux/arm64 and only with Clang/LLVM as the host C compiler. On linux/arm64, pie build mode will be used."},
	{KeyPath: "Go.N", Name: "n", SectionKey: "go-build",
		Usage: "print the commands but do not run them."},
	{KeyPath: "Go.PkgDir", Name: "pkgdir", UsageArgument: "dir", SectionKey: "go-build",
		Usage: "install and load all packages from dir instead of the usual locations. For example, when building with a non-standard configuration, use -pkgdir to keep generated packages in a separate location."},
	{KeyPath: "Go.Tags", Name: "tags", UsageArgument: "tag,list", SectionKey: "go-build",
		Usage: "a comma-separated list of build tags to consider satisfied during the build. For more information about build tags, see the description of build constraints in the documentation for the go/build package. (Earlier versions of Go used a space-separated list, and that form is deprecated but still recognized.)"},
	{KeyPath: "Go.TrimPath", Name: "trimpath", SectionKey: "go-build",
		Usage: `remove all file system paths from the resulting executable. Instead of absolute file system paths, the recorded file names will begin with either "go" (for the standard library), or a module path@version (when using modules), or a plain import path (when using GOPATH).`},
	{KeyPath: "Go.ToolExec", Name: "toolexec", UsageArgument: "'cmd args'", SectionKey: "go-build",
		Usage: "a program to use to invoke toolchain programs like vet and asm. For example, instead of running asm, the go command will run cmd args /path/to/asm <arguments for asm>'."},
	{KeyPath: "Go.Work", Name: "work", SectionKey: "go-build",
		Usage: "print the name of the temporary work directory and do not delete it when exiting."},
	{KeyPath: "Go.X", Name: "x", SectionKey: "go-build",
		Usage: "print the commands."},
}

// GoRunFlags provides flags for the Ginkgo CLI  run, and watch commands that capture go's run-time flags.  These are passed to the compiled test binary by the ginkgo CLI
var GoRunFlags = GinkgoFlags{
	{KeyPath: "Go.CoverProfile", Name: "coverprofile", UsageArgument: "file", SectionKey: "code-and-coverage-analysis",
		Usage: `Write a coverage profile to the file after all tests have passed. Sets -cover.`},
	{KeyPath: "Go.BlockProfile", Name: "blockprofile", UsageArgument: "file", SectionKey: "performance-analysis",
		Usage: `Write a goroutine blocking profile to the specified file when all tests are complete. Preserves test binary.`},
	{KeyPath: "Go.BlockProfileRate", Name: "blockprofilerate", UsageArgument: "rate", SectionKey: "performance-analysis",
		Usage: `Control the detail provided in goroutine blocking profiles by calling runtime.SetBlockProfileRate with rate. See 'go doc runtime.SetBlockProfileRate'. The profiler aims to sample, on average, one blocking event every n nanoseconds the program spends blocked. By default, if -test.blockprofile is set without this flag, all blocking events are recorded, equivalent to -test.blockprofilerate=1.`},
	{KeyPath: "Go.CPUProfile", Name: "cpuprofile", UsageArgument: "file", SectionKey: "performance-analysis",
		Usage: `Write a CPU profile to the specified file before exiting. Preserves test binary.`},
	{KeyPath: "Go.MemProfile", Name: "memprofile", UsageArgument: "file", SectionKey: "performance-analysis",
		Usage: `Write an allocation profile to the file after all tests have passed. Preserves test binary.`},
	{KeyPath: "Go.MemProfileRate", Name: "memprofilerate", UsageArgument: "rate", SectionKey: "performance-analysis",
		Usage: `Enable more precise (and expensive) memory allocation profiles by setting runtime.MemProfileRate. See 'go doc runtime.MemProfileRate'. To profile all memory allocations, use -test.memprofilerate=1.`},
	{KeyPath: "Go.MutexProfile", Name: "mutexprofile", UsageArgument: "file", SectionKey: "performance-analysis",
		Usage: `Write a mutex contention profile to the specified file when all tests are complete. Preserves test binary.`},
	{KeyPath: "Go.MutexProfileFraction", Name: "mutexprofilefraction", UsageArgument: "n", SectionKey: "performance-analysis",
		Usage: `if >= 0, calls runtime.SetMutexProfileFraction()	Sample 1 in n stack traces of goroutines holding a contended mutex.`},
	{KeyPath: "Go.Trace", Name: "execution-trace", UsageArgument: "file", ExportAs: "trace", SectionKey: "performance-analysis",
		Usage: `Write an execution trace to the specified file before exiting.`},
}

// VetAndInitializeCLIAndGoConfig validates that the Ginkgo CLI's configuration is sound
// It returns a potentially mutated copy of the config that rationalizes the configuration to ensure consistency for downstream consumers
func VetAndInitializeCLIAndGoConfig(cliConfig CLIConfig, goFlagsConfig GoFlagsConfig) (CLIConfig, GoFlagsConfig, []error) {
	errors := []error{}

	if cliConfig.Repeat > 0 && cliConfig.UntilItFails {
		errors = append(errors, GinkgoErrors.BothRepeatAndUntilItFails())
	}

	//initialize the output directory
	if cliConfig.OutputDir != "" {
		err := os.MkdirAll(cliConfig.OutputDir, 0777)
		if err != nil {
			errors = append(errors, err)
		}
	}

	//ensure cover mode is configured appropriately
	if goFlagsConfig.CoverMode != "" || goFlagsConfig.CoverPkg != "" || goFlagsConfig.CoverProfile != "" {
		goFlagsConfig.Cover = true
	}
	if goFlagsConfig.Cover && goFlagsConfig.CoverProfile == "" {
		goFlagsConfig.CoverProfile = "coverprofile.out"
	}

	return cliConfig, goFlagsConfig, errors
}

// GenerateGoTestCompileArgs is used by the Ginkgo CLI to generate command line arguments to pass to the go test -c command when compiling the test
func GenerateGoTestCompileArgs(goFlagsConfig GoFlagsConfig, destination string, packageToBuild string, pathToInvocationPath string) ([]string, error) {
	// if the user has set the CoverProfile run-time flag make sure to set the build-time cover flag to make sure
	// the built test binary can generate a coverprofile
	if goFlagsConfig.CoverProfile != "" {
		goFlagsConfig.Cover = true
	}

	if goFlagsConfig.CoverPkg != "" {
		coverPkgs := strings.Split(goFlagsConfig.CoverPkg, ",")
		adjustedCoverPkgs := make([]string, len(coverPkgs))
		for i, coverPkg := range coverPkgs {
			coverPkg = strings.Trim(coverPkg, " ")
			if strings.HasPrefix(coverPkg, "./") {
				// this is a relative coverPkg - we need to reroot it
				adjustedCoverPkgs[i] = "./" + filepath.Join(pathToInvocationPath, strings.TrimPrefix(coverPkg, "./"))
			} else {
				// this is a package name - don't touch it
				adjustedCoverPkgs[i] = coverPkg
			}
		}
		goFlagsConfig.CoverPkg = strings.Join(adjustedCoverPkgs, ",")
	}

	args := []string{"test", "-c", "-o", destination, packageToBuild}
	goArgs, err := GenerateFlagArgs(
		GoBuildFlags,
		map[string]interface{}{
			"Go": &goFlagsConfig,
		},
	)

	if err != nil {
		return []string{}, err
	}
	args = append(args, goArgs...)
	return args, nil
}

// GenerateGinkgoTestRunArgs is used by the Ginkgo CLI to generate command line arguments to pass to the compiled Ginkgo test binary
func GenerateGinkgoTestRunArgs(suiteConfig SuiteConfig, reporterConfig ReporterConfig, goFlagsConfig GoFlagsConfig) ([]string, error) {
	var flags GinkgoFlags
	flags = SuiteConfigFlags.WithPrefix("ginkgo")
	flags = flags.CopyAppend(ParallelConfigFlags.WithPrefix("ginkgo")...)
	flags = flags.CopyAppend(ReporterConfigFlags.WithPrefix("ginkgo")...)
	flags = flags.CopyAppend(GoRunFlags.WithPrefix("test")...)
	bindings := map[string]interface{}{
		"S":  &suiteConfig,
		"R":  &reporterConfig,
		"Go": &goFlagsConfig,
	}

	return GenerateFlagArgs(flags, bindings)
}

// GenerateGoTestRunArgs is used by the Ginkgo CLI to generate command line arguments to pass to the compiled non-Ginkgo test binary
func GenerateGoTestRunArgs(goFlagsConfig GoFlagsConfig) ([]string, error) {
	flags := GoRunFlags.WithPrefix("test")
	bindings := map[string]interface{}{
		"Go": &goFlagsConfig,
	}

	args, err := GenerateFlagArgs(flags, bindings)
	if err != nil {
		return args, err
	}
	args = append(args, "--test.v")
	return args, nil
}

// BuildRunCommandFlagSet builds the FlagSet for the `ginkgo run` command
func BuildRunCommandFlagSet(suiteConfig *SuiteConfig, reporterConfig *ReporterConfig, cliConfig *CLIConfig, goFlagsConfig *GoFlagsConfig) (GinkgoFlagSet, error) {
	flags := SuiteConfigFlags
	flags = flags.CopyAppend(ReporterConfigFlags...)
	flags = flags.CopyAppend(GinkgoCLISharedFlags...)
	flags = flags.CopyAppend(GinkgoCLIRunAndWatchFlags...)
	flags = flags.CopyAppend(GinkgoCLIRunFlags...)
	flags = flags.CopyAppend(GoBuildFlags...)
	flags = flags.CopyAppend(GoRunFlags...)

	bindings := map[string]interface{}{
		"S":  suiteConfig,
		"R":  reporterConfig,
		"C":  cliConfig,
		"Go": goFlagsConfig,
		"D":  &deprecatedConfig{},
	}

	return NewGinkgoFlagSet(flags, bindings, FlagSections)
}

// BuildWatchCommandFlagSet builds the FlagSet for the `ginkgo watch` command
func BuildWatchCommandFlagSet(suiteConfig *SuiteConfig, reporterConfig *ReporterConfig, cliConfig *CLIConfig, goFlagsConfig *GoFlagsConfig) (GinkgoFlagSet, error) {
	flags := SuiteConfigFlags
	flags = flags.CopyAppend(ReporterConfigFlags...)
	flags = flags.CopyAppend(GinkgoCLISharedFlags...)
	flags = flags.CopyAppend(GinkgoCLIRunAndWatchFlags...)
	flags = flags.CopyAppend(GinkgoCLIWatchFlags...)
	flags = flags.CopyAppend(GoBuildFlags...)
	flags = flags.CopyAppend(GoRunFlags...)

	bindings := map[string]interface{}{
		"S":  suiteConfig,
		"R":  reporterConfig,
		"C":  cliConfig,
		"Go": goFlagsConfig,
		"D":  &deprecatedConfig{},
	}

	return NewGinkgoFlagSet(flags, bindings, FlagSections)
}

// BuildBuildCommandFlagSet builds the FlagSet for the `ginkgo build` command
func BuildBuildCommandFlagSet(cliConfig *CLIConfig, goFlagsConfig *GoFlagsConfig) (GinkgoFlagSet, error) {
	flags := GinkgoCLISharedFlags
	flags = flags.CopyAppend(GoBuildFlags...)

	bindings := map[string]interface{}{
		"C":  cliConfig,
		"Go": goFlagsConfig,
		"D":  &deprecatedConfig{},
	}

	flagSections := make(GinkgoFlagSections, len(FlagSections))
	copy(flagSections, FlagSections)
	for i := range flagSections {
		if flagSections[i].Key == "multiple-suites" {
			flagSections[i].Heading = "Building Multiple Suites"
		}
		if flagSections[i].Key == "go-build" {
			flagSections[i] = GinkgoFlagSection{Key: "go-build", Style: "{{/}}", Heading: "Go Build Flags",
				Description: "These flags are inherited from go build."}
		}
	}

	return NewGinkgoFlagSet(flags, bindings, flagSections)
}

func BuildLabelsCommandFlagSet(cliConfig *CLIConfig) (GinkgoFlagSet, error) {
	flags := GinkgoCLISharedFlags.SubsetWithNames("r", "skip-package")

	bindings := map[string]interface{}{
		"C": cliConfig,
	}

	flagSections := make(GinkgoFlagSections, len(FlagSections))
	copy(flagSections, FlagSections)
	for i := range flagSections {
		if flagSections[i].Key == "multiple-suites" {
			flagSections[i].Heading = "Fetching Labels from Multiple Suites"
		}
	}

	return NewGinkgoFlagSet(flags, bindings, flagSections)
}
 0707010000097B000081A4000000000000000000000001645E367C00000D89000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/types/deprecated_types.go    package types

import (
	"strconv"
	"time"
)

/*
	A set of deprecations to make the transition from v1 to v2 easier for users who have written custom reporters.
*/

type SuiteSummary = DeprecatedSuiteSummary
type SetupSummary = DeprecatedSetupSummary
type SpecSummary = DeprecatedSpecSummary
type SpecMeasurement = DeprecatedSpecMeasurement
type SpecComponentType = NodeType
type SpecFailure = DeprecatedSpecFailure

var (
	SpecComponentTypeInvalid                 = NodeTypeInvalid
	SpecComponentTypeContainer               = NodeTypeContainer
	SpecComponentTypeIt                      = NodeTypeIt
	SpecComponentTypeBeforeEach              = NodeTypeBeforeEach
	SpecComponentTypeJustBeforeEach          = NodeTypeJustBeforeEach
	SpecComponentTypeAfterEach               = NodeTypeAfterEach
	SpecComponentTypeJustAfterEach           = NodeTypeJustAfterEach
	SpecComponentTypeBeforeSuite             = NodeTypeBeforeSuite
	SpecComponentTypeSynchronizedBeforeSuite = NodeTypeSynchronizedBeforeSuite
	SpecComponentTypeAfterSuite              = NodeTypeAfterSuite
	SpecComponentTypeSynchronizedAfterSuite  = NodeTypeSynchronizedAfterSuite
)

type DeprecatedSuiteSummary struct {
	SuiteDescription string
	SuiteSucceeded   bool
	SuiteID          string

	NumberOfSpecsBeforeParallelization int
	NumberOfTotalSpecs                 int
	NumberOfSpecsThatWillBeRun         int
	NumberOfPendingSpecs               int
	NumberOfSkippedSpecs               int
	NumberOfPassedSpecs                int
	NumberOfFailedSpecs                int
	NumberOfFlakedSpecs                int
	RunTime                            time.Duration
}

type DeprecatedSetupSummary struct {
	ComponentType SpecComponentType
	CodeLocation  CodeLocation

	State   SpecState
	RunTime time.Duration
	Failure SpecFailure

	CapturedOutput string
	SuiteID        string
}

type DeprecatedSpecSummary struct {
	ComponentTexts         []string
	ComponentCodeLocations []CodeLocation

	State           SpecState
	RunTime         time.Duration
	Failure         SpecFailure
	IsMeasurement   bool
	NumberOfSamples int
	Measurements    map[string]*DeprecatedSpecMeasurement

	CapturedOutput string
	SuiteID        string
}

func (s DeprecatedSpecSummary) HasFailureState() bool {
	return s.State.Is(SpecStateFailureStates)
}

func (s DeprecatedSpecSummary) TimedOut() bool {
	return false
}

func (s DeprecatedSpecSummary) Panicked() bool {
	return s.State == SpecStatePanicked
}

func (s DeprecatedSpecSummary) Failed() bool {
	return s.State == SpecStateFailed
}

func (s DeprecatedSpecSummary) Passed() bool {
	return s.State == SpecStatePassed
}

func (s DeprecatedSpecSummary) Skipped() bool {
	return s.State == SpecStateSkipped
}

func (s DeprecatedSpecSummary) Pending() bool {
	return s.State == SpecStatePending
}

type DeprecatedSpecFailure struct {
	Message        string
	Location       CodeLocation
	ForwardedPanic string

	ComponentIndex        int
	ComponentType         SpecComponentType
	ComponentCodeLocation CodeLocation
}

type DeprecatedSpecMeasurement struct {
	Name  string
	Info  interface{}
	Order int

	Results []float64

	Smallest     float64
	Largest      float64
	Average      float64
	StdDeviation float64

	SmallestLabel string
	LargestLabel  string
	AverageLabel  string
	Units         string
	Precision     int
}

func (s DeprecatedSpecMeasurement) PrecisionFmt() string {
	if s.Precision == 0 {
		return "%f"
	}

	str := strconv.Itoa(s.Precision)

	return "%." + str + "f"
}
   0707010000097C000081A4000000000000000000000001645E367C0000142D000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/types/deprecation_support.go package types

import (
	"os"
	"strconv"
	"strings"
	"sync"
	"unicode"

	"github.com/onsi/ginkgo/v2/formatter"
)

type Deprecation struct {
	Message string
	DocLink string
	Version string
}

type deprecations struct{}

var Deprecations = deprecations{}

func (d deprecations) CustomReporter() Deprecation {
	return Deprecation{
		Message: "Support for custom reporters has been removed in V2.  Please read the documentation linked to below for Ginkgo's new behavior and for a migration path:",
		DocLink: "removed-custom-reporters",
		Version: "1.16.0",
	}
}

func (d deprecations) Async() Deprecation {
	return Deprecation{
		Message: "You are passing a Done channel to a test node to test asynchronous behavior.  This is deprecated in Ginkgo V2.  Your test will run synchronously and the timeout will be ignored.",
		DocLink: "removed-async-testing",
		Version: "1.16.0",
	}
}

func (d deprecations) Measure() Deprecation {
	return Deprecation{
		Message: "Measure is deprecated and will be removed in Ginkgo V2.  Please migrate to gomega/gmeasure.",
		DocLink: "removed-measure",
		Version: "1.16.3",
	}
}

func (d deprecations) ParallelNode() Deprecation {
	return Deprecation{
		Message: "GinkgoParallelNode is deprecated and will be removed in Ginkgo V2.  Please use GinkgoParallelProcess instead.",
		DocLink: "renamed-ginkgoparallelnode",
		Version: "1.16.4",
	}
}

func (d deprecations) CurrentGinkgoTestDescription() Deprecation {
	return Deprecation{
		Message: "CurrentGinkgoTestDescription() is deprecated in Ginkgo V2.  Use CurrentSpecReport() instead.",
		DocLink: "changed-currentginkgotestdescription",
		Version: "1.16.0",
	}
}

func (d deprecations) Convert() Deprecation {
	return Deprecation{
		Message: "The convert command is deprecated in Ginkgo V2",
		DocLink: "removed-ginkgo-convert",
		Version: "1.16.0",
	}
}

func (d deprecations) Blur() Deprecation {
	return Deprecation{
		Message: "The blur command is deprecated in Ginkgo V2.  Use 'ginkgo unfocus' instead.",
		Version: "1.16.0",
	}
}

func (d deprecations) Nodot() Deprecation {
	return Deprecation{
		Message: "The nodot command is deprecated in Ginkgo V2.  Please either dot-import Ginkgo or use the package identifier in your code to references objects and types provided by Ginkgo and Gomega.",
		DocLink: "removed-ginkgo-nodot",
		Version: "1.16.0",
	}
}

func (d deprecations) SuppressProgressReporting() Deprecation {
	return Deprecation{
		Message: "Improvements to how reporters emit timeline information means that SuppressProgressReporting is no longer necessary and has been deprecated.",
		Version: "2.5.0",
	}
}

type DeprecationTracker struct {
	deprecations map[Deprecation][]CodeLocation
	lock         *sync.Mutex
}

func NewDeprecationTracker() *DeprecationTracker {
	return &DeprecationTracker{
		deprecations: map[Deprecation][]CodeLocation{},
		lock:         &sync.Mutex{},
	}
}

func (d *DeprecationTracker) TrackDeprecation(deprecation Deprecation, cl ...CodeLocation) {
	ackVersion := os.Getenv("ACK_GINKGO_DEPRECATIONS")
	if deprecation.Version != "" && ackVersion != "" {
		ack := ParseSemVer(ackVersion)
		version := ParseSemVer(deprecation.Version)
		if ack.GreaterThanOrEqualTo(version) {
			return
		}
	}

	d.lock.Lock()
	defer d.lock.Unlock()
	if len(cl) == 1 {
		d.deprecations[deprecation] = append(d.deprecations[deprecation], cl[0])
	} else {
		d.deprecations[deprecation] = []CodeLocation{}
	}
}

func (d *DeprecationTracker) DidTrackDeprecations() bool {
	d.lock.Lock()
	defer d.lock.Unlock()
	return len(d.deprecations) > 0
}

func (d *DeprecationTracker) DeprecationsReport() string {
	d.lock.Lock()
	defer d.lock.Unlock()
	out := formatter.F("{{light-yellow}}You're using deprecated Ginkgo functionality:{{/}}\n")
	out += formatter.F("{{light-yellow}}============================================={{/}}\n")
	for deprecation, locations := range d.deprecations {
		out += formatter.Fi(1, "{{yellow}}"+deprecation.Message+"{{/}}\n")
		if deprecation.DocLink != "" {
			out += formatter.Fi(1, "{{bold}}Learn more at:{{/}} {{cyan}}{{underline}}https://onsi.github.io/ginkgo/MIGRATING_TO_V2#%s{{/}}\n", deprecation.DocLink)
		}
		for _, location := range locations {
			out += formatter.Fi(2, "{{gray}}%s{{/}}\n", location)
		}
	}
	out += formatter.F("\n{{gray}}To silence deprecations that can be silenced set the following environment variable:{{/}}\n")
	out += formatter.Fi(1, "{{gray}}ACK_GINKGO_DEPRECATIONS=%s{{/}}\n", VERSION)
	return out
}

type SemVer struct {
	Major int
	Minor int
	Patch int
}

func (s SemVer) GreaterThanOrEqualTo(o SemVer) bool {
	return (s.Major > o.Major) ||
		(s.Major == o.Major && s.Minor > o.Minor) ||
		(s.Major == o.Major && s.Minor == o.Minor && s.Patch >= o.Patch)
}

func ParseSemVer(semver string) SemVer {
	out := SemVer{}
	semver = strings.TrimFunc(semver, func(r rune) bool {
		return !(unicode.IsNumber(r) || r == '.')
	})
	components := strings.Split(semver, ".")
	if len(components) > 0 {
		out.Major, _ = strconv.Atoi(components[0])
	}
	if len(components) > 1 {
		out.Minor, _ = strconv.Atoi(components[1])
	}
	if len(components) > 2 {
		out.Patch, _ = strconv.Atoi(components[2])
	}
	return out
}
   0707010000097D000081A4000000000000000000000001645E367C0000039B000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/types/enum_support.go    package types

import "encoding/json"

type EnumSupport struct {
	toString map[uint]string
	toEnum   map[string]uint
	maxEnum  uint
}

func NewEnumSupport(toString map[uint]string) EnumSupport {
	toEnum, maxEnum := map[string]uint{}, uint(0)
	for k, v := range toString {
		toEnum[v] = k
		if maxEnum < k {
			maxEnum = k
		}
	}
	return EnumSupport{toString: toString, toEnum: toEnum, maxEnum: maxEnum}
}

func (es EnumSupport) String(e uint) string {
	if e > es.maxEnum {
		return es.toString[0]
	}
	return es.toString[e]
}

func (es EnumSupport) UnmarshJSON(b []byte) (uint, error) {
	var dec string
	if err := json.Unmarshal(b, &dec); err != nil {
		return 0, err
	}
	out := es.toEnum[dec] // if we miss we get 0 which is what we want anyway
	return out, nil
}

func (es EnumSupport) MarshJSON(e uint) ([]byte, error) {
	if e == 0 || e > es.maxEnum {
		return json.Marshal(nil)
	}
	return json.Marshal(es.toString[e])
}
 0707010000097E000081A4000000000000000000000001645E367C00006434000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/types/errors.go  package types

import (
	"fmt"
	"reflect"
	"strings"

	"github.com/onsi/ginkgo/v2/formatter"
)

type GinkgoError struct {
	Heading      string
	Message      string
	DocLink      string
	CodeLocation CodeLocation
}

func (g GinkgoError) Error() string {
	out := formatter.F("{{bold}}{{red}}%s{{/}}\n", g.Heading)
	if (g.CodeLocation != CodeLocation{}) {
		contentsOfLine := strings.TrimLeft(g.CodeLocation.ContentsOfLine(), "\t ")
		if contentsOfLine != "" {
			out += formatter.F("{{light-gray}}%s{{/}}\n", contentsOfLine)
		}
		out += formatter.F("{{gray}}%s{{/}}\n", g.CodeLocation)
	}
	if g.Message != "" {
		out += formatter.Fiw(1, formatter.COLS, g.Message)
		out += "\n\n"
	}
	if g.DocLink != "" {
		out += formatter.Fiw(1, formatter.COLS, "{{bold}}Learn more at:{{/}} {{cyan}}{{underline}}http://onsi.github.io/ginkgo/#%s{{/}}\n", g.DocLink)
	}

	return out
}

type ginkgoErrors struct{}

var GinkgoErrors = ginkgoErrors{}

func (g ginkgoErrors) UncaughtGinkgoPanic(cl CodeLocation) error {
	return GinkgoError{
		Heading: "Your Test Panicked",
		Message: `When you, or your assertion library, calls Ginkgo's Fail(),
Ginkgo panics to prevent subsequent assertions from running.

Normally Ginkgo rescues this panic so you shouldn't see it.

However, if you make an assertion in a goroutine, Ginkgo can't capture the panic.
To circumvent this, you should call

	defer GinkgoRecover()

at the top of the goroutine that caused this panic.

Alternatively, you may have made an assertion outside of a Ginkgo
leaf node (e.g. in a container node or some out-of-band function) - please move your assertion to
an appropriate Ginkgo node (e.g. a BeforeSuite, BeforeEach, It, etc...).`,
		DocLink:      "mental-model-how-ginkgo-handles-failure",
		CodeLocation: cl,
	}
}

func (g ginkgoErrors) RerunningSuite() error {
	return GinkgoError{
		Heading: "Rerunning Suite",
		Message: formatter.F(`It looks like you are calling RunSpecs more than once. Ginkgo does not support rerunning suites.  If you want to rerun a suite try {{bold}}ginkgo --repeat=N{{/}} or {{bold}}ginkgo --until-it-fails{{/}}`),
		DocLink: "repeating-spec-runs-and-managing-flaky-specs",
	}
}

/* Tree construction errors */

func (g ginkgoErrors) PushingNodeInRunPhase(nodeType NodeType, cl CodeLocation) error {
	return GinkgoError{
		Heading: "Ginkgo detected an issue with your spec structure",
		Message: formatter.F(
			`It looks like you are trying to add a {{bold}}[%s]{{/}} node
to the Ginkgo spec tree in a leaf node {{bold}}after{{/}} the specs started running.

To enable randomization and parallelization Ginkgo requires the spec tree
to be fully constructed up front.  In practice, this means that you can
only create nodes like {{bold}}[%s]{{/}} at the top-level or within the
body of a {{bold}}Describe{{/}}, {{bold}}Context{{/}}, or {{bold}}When{{/}}.`, nodeType, nodeType),
		CodeLocation: cl,
		DocLink:      "mental-model-how-ginkgo-traverses-the-spec-hierarchy",
	}
}

func (g ginkgoErrors) CaughtPanicDuringABuildPhase(caughtPanic interface{}, cl CodeLocation) error {
	return GinkgoError{
		Heading: "Assertion or Panic detected during tree construction",
		Message: formatter.F(
			`Ginkgo detected a panic while constructing the spec tree.
You may be trying to make an assertion in the body of a container node
(i.e. {{bold}}Describe{{/}}, {{bold}}Context{{/}}, or {{bold}}When{{/}}).

Please ensure all assertions are inside leaf nodes such as {{bold}}BeforeEach{{/}},
{{bold}}It{{/}}, etc.

{{bold}}Here's the content of the panic that was caught:{{/}}
%v`, caughtPanic),
		CodeLocation: cl,
		DocLink:      "no-assertions-in-container-nodes",
	}
}

func (g ginkgoErrors) SuiteNodeInNestedContext(nodeType NodeType, cl CodeLocation) error {
	docLink := "suite-setup-and-cleanup-beforesuite-and-aftersuite"
	if nodeType.Is(NodeTypeReportBeforeSuite | NodeTypeReportAfterSuite) {
		docLink = "reporting-nodes---reportbeforesuite-and-reportaftersuite"
	}

	return GinkgoError{
		Heading: "Ginkgo detected an issue with your spec structure",
		Message: formatter.F(
			`It looks like you are trying to add a {{bold}}[%s]{{/}} node within a container node.

{{bold}}%s{{/}} can only be called at the top level.`, nodeType, nodeType),
		CodeLocation: cl,
		DocLink:      docLink,
	}
}

func (g ginkgoErrors) SuiteNodeDuringRunPhase(nodeType NodeType, cl CodeLocation) error {
	docLink := "suite-setup-and-cleanup-beforesuite-and-aftersuite"
	if nodeType.Is(NodeTypeReportBeforeSuite | NodeTypeReportAfterSuite) {
		docLink = "reporting-nodes---reportbeforesuite-and-reportaftersuite"
	}

	return GinkgoError{
		Heading: "Ginkgo detected an issue with your spec structure",
		Message: formatter.F(
			`It looks like you are trying to add a {{bold}}[%s]{{/}} node within a leaf node after the spec started running.

{{bold}}%s{{/}} can only be called at the top level.`, nodeType, nodeType),
		CodeLocation: cl,
		DocLink:      docLink,
	}
}

func (g ginkgoErrors) MultipleBeforeSuiteNodes(nodeType NodeType, cl CodeLocation, earlierNodeType NodeType, earlierCodeLocation CodeLocation) error {
	return ginkgoErrorMultipleSuiteNodes("setup", nodeType, cl, earlierNodeType, earlierCodeLocation)
}

func (g ginkgoErrors) MultipleAfterSuiteNodes(nodeType NodeType, cl CodeLocation, earlierNodeType NodeType, earlierCodeLocation CodeLocation) error {
	return ginkgoErrorMultipleSuiteNodes("teardown", nodeType, cl, earlierNodeType, earlierCodeLocation)
}

func ginkgoErrorMultipleSuiteNodes(setupOrTeardown string, nodeType NodeType, cl CodeLocation, earlierNodeType NodeType, earlierCodeLocation CodeLocation) error {
	return GinkgoError{
		Heading: "Ginkgo detected an issue with your spec structure",
		Message: formatter.F(
			`It looks like you are trying to add a {{bold}}[%s]{{/}} node but
you already have a {{bold}}[%s]{{/}} node defined at: {{gray}}%s{{/}}.

Ginkgo only allows you to define one suite %s node.`, nodeType, earlierNodeType, earlierCodeLocation, setupOrTeardown),
		CodeLocation: cl,
		DocLink:      "suite-setup-and-cleanup-beforesuite-and-aftersuite",
	}
}

/* Decorator errors */
func (g ginkgoErrors) InvalidDecoratorForNodeType(cl CodeLocation, nodeType NodeType, decorator string) error {
	return GinkgoError{
		Heading:      "Invalid Decorator",
		Message:      formatter.F(`[%s] node cannot be passed a(n) '%s' decorator`, nodeType, decorator),
		CodeLocation: cl,
		DocLink:      "node-decorators-overview",
	}
}

func (g ginkgoErrors) InvalidDeclarationOfFocusedAndPending(cl CodeLocation, nodeType NodeType) error {
	return GinkgoError{
		Heading:      "Invalid Combination of Decorators: Focused and Pending",
		Message:      formatter.F(`[%s] node was decorated with both Focus and Pending.  At most one is allowed.`, nodeType),
		CodeLocation: cl,
		DocLink:      "node-decorators-overview",
	}
}

func (g ginkgoErrors) InvalidDeclarationOfFlakeAttemptsAndMustPassRepeatedly(cl CodeLocation, nodeType NodeType) error {
	return GinkgoError{
		Heading:      "Invalid Combination of Decorators: FlakeAttempts and MustPassRepeatedly",
		Message:      formatter.F(`[%s] node was decorated with both FlakeAttempts and MustPassRepeatedly. At most one is allowed.`, nodeType),
		CodeLocation: cl,
		DocLink:      "node-decorators-overview",
	}
}

func (g ginkgoErrors) UnknownDecorator(cl CodeLocation, nodeType NodeType, decorator interface{}) error {
	return GinkgoError{
		Heading:      "Unknown Decorator",
		Message:      formatter.F(`[%s] node was passed an unknown decorator: '%#v'`, nodeType, decorator),
		CodeLocation: cl,
		DocLink:      "node-decorators-overview",
	}
}

func (g ginkgoErrors) InvalidBodyTypeForContainer(t reflect.Type, cl CodeLocation, nodeType NodeType) error {
	return GinkgoError{
		Heading:      "Invalid Function",
		Message:      formatter.F(`[%s] node must be passed {{bold}}func(){{/}} - i.e. functions that take nothing and return nothing.  You passed {{bold}}%s{{/}} instead.`, nodeType, t),
		CodeLocation: cl,
		DocLink:      "node-decorators-overview",
	}
}

func (g ginkgoErrors) InvalidBodyType(t reflect.Type, cl CodeLocation, nodeType NodeType) error {
	mustGet := "{{bold}}func(){{/}}, {{bold}}func(ctx SpecContext){{/}}, or {{bold}}func(ctx context.Context){{/}}"
	if nodeType.Is(NodeTypeContainer) {
		mustGet = "{{bold}}func(){{/}}"
	}
	return GinkgoError{
		Heading: "Invalid Function",
		Message: formatter.F(`[%s] node must be passed `+mustGet+`.
You passed {{bold}}%s{{/}} instead.`, nodeType, t),
		CodeLocation: cl,
		DocLink:      "node-decorators-overview",
	}
}

func (g ginkgoErrors) InvalidBodyTypeForSynchronizedBeforeSuiteProc1(t reflect.Type, cl CodeLocation) error {
	mustGet := "{{bold}}func() []byte{{/}}, {{bold}}func(ctx SpecContext) []byte{{/}}, or {{bold}}func(ctx context.Context) []byte{{/}}, {{bold}}func(){{/}}, {{bold}}func(ctx SpecContext){{/}}, or {{bold}}func(ctx context.Context){{/}}"
	return GinkgoError{
		Heading: "Invalid Function",
		Message: formatter.F(`[SynchronizedBeforeSuite] node must be passed `+mustGet+` for its first function.
You passed {{bold}}%s{{/}} instead.`, t),
		CodeLocation: cl,
		DocLink:      "node-decorators-overview",
	}
}

func (g ginkgoErrors) InvalidBodyTypeForSynchronizedBeforeSuiteAllProcs(t reflect.Type, cl CodeLocation) error {
	mustGet := "{{bold}}func(){{/}}, {{bold}}func(ctx SpecContext){{/}}, or {{bold}}func(ctx context.Context){{/}}, {{bold}}func([]byte){{/}}, {{bold}}func(ctx SpecContext, []byte){{/}}, or {{bold}}func(ctx context.Context, []byte){{/}}"
	return GinkgoError{
		Heading: "Invalid Function",
		Message: formatter.F(`[SynchronizedBeforeSuite] node must be passed `+mustGet+` for its second function.
You passed {{bold}}%s{{/}} instead.`, t),
		CodeLocation: cl,
		DocLink:      "node-decorators-overview",
	}
}

func (g ginkgoErrors) MultipleBodyFunctions(cl CodeLocation, nodeType NodeType) error {
	return GinkgoError{
		Heading:      "Multiple Functions",
		Message:      formatter.F(`[%s] node must be passed a single function - but more than one was passed in.`, nodeType),
		CodeLocation: cl,
		DocLink:      "node-decorators-overview",
	}
}

func (g ginkgoErrors) MissingBodyFunction(cl CodeLocation, nodeType NodeType) error {
	return GinkgoError{
		Heading:      "Missing Functions",
		Message:      formatter.F(`[%s] node must be passed a single function - but none was passed in.`, nodeType),
		CodeLocation: cl,
		DocLink:      "node-decorators-overview",
	}
}

func (g ginkgoErrors) InvalidTimeoutOrGracePeriodForNonContextNode(cl CodeLocation, nodeType NodeType) error {
	return GinkgoError{
		Heading:      "Invalid NodeTimeout SpecTimeout, or GracePeriod",
		Message:      formatter.F(`[%s] was passed NodeTimeout, SpecTimeout, or GracePeriod but does not have a callback that accepts a {{bold}}SpecContext{{/}} or {{bold}}context.Context{{/}}.  You must accept a context to enable timeouts and grace periods`, nodeType),
		CodeLocation: cl,
		DocLink:      "spec-timeouts-and-interruptible-nodes",
	}
}

func (g ginkgoErrors) InvalidTimeoutOrGracePeriodForNonContextCleanupNode(cl CodeLocation) error {
	return GinkgoError{
		Heading:      "Invalid NodeTimeout SpecTimeout, or GracePeriod",
		Message:      formatter.F(`[DeferCleanup] was passed NodeTimeout or GracePeriod but does not have a callback that accepts a {{bold}}SpecContext{{/}} or {{bold}}context.Context{{/}}.  You must accept a context to enable timeouts and grace periods`),
		CodeLocation: cl,
		DocLink:      "spec-timeouts-and-interruptible-nodes",
	}
}

/* Ordered Container errors */
func (g ginkgoErrors) InvalidSerialNodeInNonSerialOrderedContainer(cl CodeLocation, nodeType NodeType) error {
	return GinkgoError{
		Heading:      "Invalid Serial Node in Non-Serial Ordered Container",
		Message:      formatter.F(`[%s] node was decorated with Serial but occurs in an Ordered container that is not marked Serial.  Move the Serial decorator to the outer-most Ordered container to mark all ordered specs within the container as serial.`, nodeType),
		CodeLocation: cl,
		DocLink:      "node-decorators-overview",
	}
}

func (g ginkgoErrors) SetupNodeNotInOrderedContainer(cl CodeLocation, nodeType NodeType) error {
	return GinkgoError{
		Heading:      "Setup Node not in Ordered Container",
		Message:      fmt.Sprintf("[%s] setup nodes must appear inside an Ordered container.  They cannot be nested within other containers, even containers in an ordered container.", nodeType),
		CodeLocation: cl,
		DocLink:      "ordered-containers",
	}
}

func (g ginkgoErrors) InvalidContinueOnFailureDecoration(cl CodeLocation) error {
	return GinkgoError{
		Heading:      "ContinueOnFailure not decorating an outermost Ordered Container",
		Message:      "ContinueOnFailure can only decorate an Ordered container, and this Ordered container must be the outermost Ordered container.",
		CodeLocation: cl,
		DocLink:      "ordered-containers",
	}
}

/* DeferCleanup errors */
func (g ginkgoErrors) DeferCleanupInvalidFunction(cl CodeLocation) error {
	return GinkgoError{
		Heading:      "DeferCleanup requires a valid function",
		Message:      "You must pass DeferCleanup a function to invoke.  This function must return zero or one values - if it does return, it must return an error.  The function can take arbitrarily many arguments and you should provide these to DeferCleanup to pass along to the function.",
		CodeLocation: cl,
		DocLink:      "cleaning-up-our-cleanup-code-defercleanup",
	}
}

func (g ginkgoErrors) PushingCleanupNodeDuringTreeConstruction(cl CodeLocation) error {
	return GinkgoError{
		Heading:      "DeferCleanup must be called inside a setup or subject node",
		Message:      "You must call DeferCleanup inside a setup node (e.g. BeforeEach, BeforeSuite, AfterAll...) or a subject node (i.e. It).  You can't call DeferCleanup at the top-level or in a container node - use the After* family of setup nodes instead.",
		CodeLocation: cl,
		DocLink:      "cleaning-up-our-cleanup-code-defercleanup",
	}
}

func (g ginkgoErrors) PushingCleanupInReportingNode(cl CodeLocation, nodeType NodeType) error {
	return GinkgoError{
		Heading:      fmt.Sprintf("DeferCleanup cannot be called in %s", nodeType),
		Message:      "Please inline your cleanup code - Ginkgo won't run cleanup code after a Reporting node.",
		CodeLocation: cl,
		DocLink:      "cleaning-up-our-cleanup-code-defercleanup",
	}
}

func (g ginkgoErrors) PushingCleanupInCleanupNode(cl CodeLocation) error {
	return GinkgoError{
		Heading:      "DeferCleanup cannot be called in a DeferCleanup callback",
		Message:      "Please inline your cleanup code - Ginkgo doesn't let you call DeferCleanup from within DeferCleanup",
		CodeLocation: cl,
		DocLink:      "cleaning-up-our-cleanup-code-defercleanup",
	}
}

/* ReportEntry errors */
func (g ginkgoErrors) TooManyReportEntryValues(cl CodeLocation, arg interface{}) error {
	return GinkgoError{
		Heading:      "Too Many ReportEntry Values",
		Message:      formatter.F(`{{bold}}AddGinkgoReport{{/}} can only be given one value. Got unexpected value: %#v`, arg),
		CodeLocation: cl,
		DocLink:      "attaching-data-to-reports",
	}
}

func (g ginkgoErrors) AddReportEntryNotDuringRunPhase(cl CodeLocation) error {
	return GinkgoError{
		Heading:      "Ginkgo detected an issue with your spec structure",
		Message:      formatter.F(`It looks like you are calling {{bold}}AddGinkgoReport{{/}} outside of a running spec.  Make sure you call {{bold}}AddGinkgoReport{{/}} inside a runnable node such as It or BeforeEach and not inside the body of a container such as Describe or Context.`),
		CodeLocation: cl,
		DocLink:      "attaching-data-to-reports",
	}
}

/* By errors */
func (g ginkgoErrors) ByNotDuringRunPhase(cl CodeLocation) error {
	return GinkgoError{
		Heading:      "Ginkgo detected an issue with your spec structure",
		Message:      formatter.F(`It looks like you are calling {{bold}}By{{/}} outside of a running spec.  Make sure you call {{bold}}By{{/}} inside a runnable node such as It or BeforeEach and not inside the body of a container such as Describe or Context.`),
		CodeLocation: cl,
		DocLink:      "documenting-complex-specs-by",
	}
}

/* FileFilter and SkipFilter errors */
func (g ginkgoErrors) InvalidFileFilter(filter string) error {
	return GinkgoError{
		Heading: "Invalid File Filter",
		Message: fmt.Sprintf(`The provided file filter: "%s" is invalid.  File filters must have the format "file", "file:lines" where "file" is a regular expression that will match against the file path and lines is a comma-separated list of integers (e.g. file:1,5,7) or line-ranges (e.g. file:1-3,5-9) or both (e.g. file:1,5-9)`, filter),
		DocLink: "filtering-specs",
	}
}

func (g ginkgoErrors) InvalidFileFilterRegularExpression(filter string, err error) error {
	return GinkgoError{
		Heading: "Invalid File Filter Regular Expression",
		Message: fmt.Sprintf(`The provided file filter: "%s" included an invalid regular expression.  regexp.Compile error: %s`, filter, err),
		DocLink: "filtering-specs",
	}
}

/* Label Errors */
func (g ginkgoErrors) SyntaxErrorParsingLabelFilter(input string, location int, error string) error {
	var message string
	if location >= 0 {
		for i, r := range input {
			if i == location {
				message += "{{red}}{{bold}}{{underline}}"
			}
			message += string(r)
			if i == location {
				message += "{{/}}"
			}
		}
	} else {
		message = input
	}
	message += "\n" + error
	return GinkgoError{
		Heading: "Syntax Error Parsing Label Filter",
		Message: message,
		DocLink: "spec-labels",
	}
}

func (g ginkgoErrors) InvalidLabel(label string, cl CodeLocation) error {
	return GinkgoError{
		Heading:      "Invalid Label",
		Message:      fmt.Sprintf("'%s' is an invalid label.  Labels cannot contain of the following characters: '&|!,()/'", label),
		CodeLocation: cl,
		DocLink:      "spec-labels",
	}
}

func (g ginkgoErrors) InvalidEmptyLabel(cl CodeLocation) error {
	return GinkgoError{
		Heading:      "Invalid Empty Label",
		Message:      "Labels cannot be empty",
		CodeLocation: cl,
		DocLink:      "spec-labels",
	}
}

/* Table errors */
func (g ginkgoErrors) MultipleEntryBodyFunctionsForTable(cl CodeLocation) error {
	return GinkgoError{
		Heading:      "DescribeTable passed multiple functions",
		Message:      "It looks like you are passing multiple functions into DescribeTable.  Only one function can be passed in.  This function will be called for each Entry in the table.",
		CodeLocation: cl,
		DocLink:      "table-specs",
	}
}

func (g ginkgoErrors) InvalidEntryDescription(cl CodeLocation) error {
	return GinkgoError{
		Heading:      "Invalid Entry description",
		Message:      "Entry description functions must be a string, a function that accepts the entry parameters and returns a string, or nil.",
		CodeLocation: cl,
		DocLink:      "table-specs",
	}
}

func (g ginkgoErrors) MissingParametersForTableFunction(cl CodeLocation) error {
	return GinkgoError{
		Heading:      fmt.Sprintf("No parameters have been passed to the Table Function"),
		Message:      fmt.Sprintf("The Table Function expected at least 1 parameter"),
		CodeLocation: cl,
		DocLink:      "table-specs",
	}
}

func (g ginkgoErrors) IncorrectParameterTypeForTable(i int, name string, cl CodeLocation) error {
	return GinkgoError{
		Heading:      "DescribeTable passed incorrect parameter type",
		Message:      fmt.Sprintf("Parameter #%d passed to DescribeTable is of incorrect type <%s>", i, name),
		CodeLocation: cl,
		DocLink:      "table-specs",
	}
}

func (g ginkgoErrors) TooFewParametersToTableFunction(expected, actual int, kind string, cl CodeLocation) error {
	return GinkgoError{
		Heading:      fmt.Sprintf("Too few parameters passed in to %s", kind),
		Message:      fmt.Sprintf("The %s expected %d parameters but you passed in %d", kind, expected, actual),
		CodeLocation: cl,
		DocLink:      "table-specs",
	}
}

func (g ginkgoErrors) TooManyParametersToTableFunction(expected, actual int, kind string, cl CodeLocation) error {
	return GinkgoError{
		Heading:      fmt.Sprintf("Too many parameters passed in to %s", kind),
		Message:      fmt.Sprintf("The %s expected %d parameters but you passed in %d", kind, expected, actual),
		CodeLocation: cl,
		DocLink:      "table-specs",
	}
}

func (g ginkgoErrors) IncorrectParameterTypeToTableFunction(i int, expected, actual reflect.Type, kind string, cl CodeLocation) error {
	return GinkgoError{
		Heading:      fmt.Sprintf("Incorrect parameters type passed to %s", kind),
		Message:      fmt.Sprintf("The %s expected parameter #%d to be of type <%s> but you passed in <%s>", kind, i, expected, actual),
		CodeLocation: cl,
		DocLink:      "table-specs",
	}
}

func (g ginkgoErrors) IncorrectVariadicParameterTypeToTableFunction(expected, actual reflect.Type, kind string, cl CodeLocation) error {
	return GinkgoError{
		Heading:      fmt.Sprintf("Incorrect parameters type passed to %s", kind),
		Message:      fmt.Sprintf("The %s expected its variadic parameters to be of type <%s> but you passed in <%s>", kind, expected, actual),
		CodeLocation: cl,
		DocLink:      "table-specs",
	}
}

/* Parallel Synchronization errors */

func (g ginkgoErrors) AggregatedReportUnavailableDueToNodeDisappearing() error {
	return GinkgoError{
		Heading: "Test Report unavailable because a Ginkgo parallel process disappeared",
		Message: "The aggregated report could not be fetched for a ReportAfterSuite node.  A Ginkgo parallel process disappeared before it could finish reporting.",
	}
}

func (g ginkgoErrors) SynchronizedBeforeSuiteFailedOnProc1() error {
	return GinkgoError{
		Heading: "SynchronizedBeforeSuite failed on Ginkgo parallel process #1",
		Message: "The first SynchronizedBeforeSuite function running on Ginkgo parallel process #1 failed.  This suite will now abort.",
	}
}

func (g ginkgoErrors) SynchronizedBeforeSuiteDisappearedOnProc1() error {
	return GinkgoError{
		Heading: "Process #1 disappeared before SynchronizedBeforeSuite could report back",
		Message: "Ginkgo parallel process #1 disappeared before the first SynchronizedBeforeSuite function completed.  This suite will now abort.",
	}
}

/* Configuration errors */

func (g ginkgoErrors) UnknownTypePassedToRunSpecs(value interface{}) error {
	return GinkgoError{
		Heading: "Unknown Type passed to RunSpecs",
		Message: fmt.Sprintf("RunSpecs() accepts labels, and configuration of type types.SuiteConfig and/or types.ReporterConfig.\n You passed in: %v", value),
	}
}

var sharedParallelErrorMessage = "It looks like you are trying to run specs in parallel with go test.\nThis is unsupported and you should use the ginkgo CLI instead."

func (g ginkgoErrors) InvalidParallelTotalConfiguration() error {
	return GinkgoError{
		Heading: "-ginkgo.parallel.total must be >= 1",
		Message: sharedParallelErrorMessage,
		DocLink: "spec-parallelization",
	}
}

func (g ginkgoErrors) InvalidParallelProcessConfiguration() error {
	return GinkgoError{
		Heading: "-ginkgo.parallel.process is one-indexed and must be <= ginkgo.parallel.total",
		Message: sharedParallelErrorMessage,
		DocLink: "spec-parallelization",
	}
}

func (g ginkgoErrors) MissingParallelHostConfiguration() error {
	return GinkgoError{
		Heading: "-ginkgo.parallel.host is missing",
		Message: sharedParallelErrorMessage,
		DocLink: "spec-parallelization",
	}
}

func (g ginkgoErrors) UnreachableParallelHost(host string) error {
	return GinkgoError{
		Heading: "Could not reach ginkgo.parallel.host:" + host,
		Message: sharedParallelErrorMessage,
		DocLink: "spec-parallelization",
	}
}

func (g ginkgoErrors) DryRunInParallelConfiguration() error {
	return GinkgoError{
		Heading: "Ginkgo only performs -dryRun in serial mode.",
		Message: "Please try running ginkgo -dryRun again, but without -p or -procs to ensure the suite is running in series.",
	}
}

func (g ginkgoErrors) GracePeriodCannotBeZero() error {
	return GinkgoError{
		Heading: "Ginkgo requires a positive --grace-period.",
		Message: "Please set --grace-period to a positive duration.  The default is 30s.",
	}
}

func (g ginkgoErrors) ConflictingVerbosityConfiguration() error {
	return GinkgoError{
		Heading: "Conflicting reporter verbosity settings.",
		Message: "You can't set more than one of -v, -vv and --succinct.  Please pick one!",
	}
}

func (g ginkgoErrors) InvalidOutputInterceptorModeConfiguration(value string) error {
	return GinkgoError{
		Heading: fmt.Sprintf("Invalid value '%s' for --output-interceptor-mode.", value),
		Message: "You must choose one of 'dup', 'swap', or 'none'.",
	}
}

func (g ginkgoErrors) InvalidGoFlagCount() error {
	return GinkgoError{
		Heading: "Use of go test -count",
		Message: "Ginkgo does not support using go test -count to rerun suites.  Only -count=1 is allowed.  To repeat suite runs, please use the ginkgo cli and `ginkgo -until-it-fails` or `ginkgo -repeat=N`.",
	}
}

func (g ginkgoErrors) InvalidGoFlagParallel() error {
	return GinkgoError{
		Heading: "Use of go test -parallel",
		Message: "Go test's implementation of parallelization does not actually parallelize Ginkgo specs.  Please use the ginkgo cli and `ginkgo -p` or `ginkgo -procs=N` instead.",
	}
}

func (g ginkgoErrors) BothRepeatAndUntilItFails() error {
	return GinkgoError{
		Heading: "--repeat and --until-it-fails are both set",
		Message: "--until-it-fails directs Ginkgo to rerun specs indefinitely until they fail.  --repeat directs Ginkgo to rerun specs a set number of times.  You can't set both... which would you like?",
	}
}

/* Stack-Trace parsing errors */

func (g ginkgoErrors) FailedToParseStackTrace(message string) error {
	return GinkgoError{
		Heading: "Failed to Parse Stack Trace",
		Message: message,
	}
}
0707010000097F000081A4000000000000000000000001645E367C00000935000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/types/file_filter.go package types

import (
	"regexp"
	"strconv"
	"strings"
)

func ParseFileFilters(filters []string) (FileFilters, error) {
	ffs := FileFilters{}
	for _, filter := range filters {
		ff := FileFilter{}
		if filter == "" {
			return nil, GinkgoErrors.InvalidFileFilter(filter)
		}
		components := strings.Split(filter, ":")
		if !(len(components) == 1 || len(components) == 2) {
			return nil, GinkgoErrors.InvalidFileFilter(filter)
		}

		var err error
		ff.Filename, err = regexp.Compile(components[0])
		if err != nil {
			return nil, err
		}
		if len(components) == 2 {
			lineFilters := strings.Split(components[1], ",")
			for _, lineFilter := range lineFilters {
				components := strings.Split(lineFilter, "-")
				if len(components) == 1 {
					line, err := strconv.Atoi(strings.TrimSpace(components[0]))
					if err != nil {
						return nil, GinkgoErrors.InvalidFileFilter(filter)
					}
					ff.LineFilters = append(ff.LineFilters, LineFilter{line, line + 1})
				} else if len(components) == 2 {
					line1, err := strconv.Atoi(strings.TrimSpace(components[0]))
					if err != nil {
						return nil, GinkgoErrors.InvalidFileFilter(filter)
					}
					line2, err := strconv.Atoi(strings.TrimSpace(components[1]))
					if err != nil {
						return nil, GinkgoErrors.InvalidFileFilter(filter)
					}
					ff.LineFilters = append(ff.LineFilters, LineFilter{line1, line2})
				} else {
					return nil, GinkgoErrors.InvalidFileFilter(filter)
				}
			}
		}
		ffs = append(ffs, ff)
	}
	return ffs, nil
}

type FileFilter struct {
	Filename    *regexp.Regexp
	LineFilters LineFilters
}

func (f FileFilter) Matches(locations []CodeLocation) bool {
	for _, location := range locations {
		if f.Filename.MatchString(location.FileName) &&
			f.LineFilters.Matches(location.LineNumber) {
			return true
		}

	}
	return false
}

type FileFilters []FileFilter

func (ffs FileFilters) Matches(locations []CodeLocation) bool {
	for _, ff := range ffs {
		if ff.Matches(locations) {
			return true
		}
	}

	return false
}

type LineFilter struct {
	Min int
	Max int
}

func (lf LineFilter) Matches(line int) bool {
	return lf.Min <= line && line < lf.Max
}

type LineFilters []LineFilter

func (lfs LineFilters) Matches(line int) bool {
	if len(lfs) == 0 {
		return true
	}

	for _, lf := range lfs {
		if lf.Matches(line) {
			return true
		}
	}
	return false
}
   07070100000980000081A4000000000000000000000001645E367C00003143000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/types/flags.go   package types

import (
	"flag"
	"fmt"
	"io"
	"reflect"
	"strings"
	"time"

	"github.com/onsi/ginkgo/v2/formatter"
)

type GinkgoFlag struct {
	Name       string
	KeyPath    string
	SectionKey string

	Usage             string
	UsageArgument     string
	UsageDefaultValue string

	DeprecatedName    string
	DeprecatedDocLink string
	DeprecatedVersion string

	ExportAs string
}

type GinkgoFlags []GinkgoFlag

func (f GinkgoFlags) CopyAppend(flags ...GinkgoFlag) GinkgoFlags {
	out := GinkgoFlags{}
	out = append(out, f...)
	out = append(out, flags...)
	return out
}

func (f GinkgoFlags) WithPrefix(prefix string) GinkgoFlags {
	if prefix == "" {
		return f
	}
	out := GinkgoFlags{}
	for _, flag := range f {
		if flag.Name != "" {
			flag.Name = prefix + "." + flag.Name
		}
		if flag.DeprecatedName != "" {
			flag.DeprecatedName = prefix + "." + flag.DeprecatedName
		}
		if flag.ExportAs != "" {
			flag.ExportAs = prefix + "." + flag.ExportAs
		}
		out = append(out, flag)
	}
	return out
}

func (f GinkgoFlags) SubsetWithNames(names ...string) GinkgoFlags {
	out := GinkgoFlags{}
	for _, flag := range f {
		for _, name := range names {
			if flag.Name == name {
				out = append(out, flag)
				break
			}
		}
	}
	return out
}

type GinkgoFlagSection struct {
	Key         string
	Style       string
	Succinct    bool
	Heading     string
	Description string
}

type GinkgoFlagSections []GinkgoFlagSection

func (gfs GinkgoFlagSections) Lookup(key string) (GinkgoFlagSection, bool) {
	for _, section := range gfs {
		if section.Key == key {
			return section, true
		}
	}

	return GinkgoFlagSection{}, false
}

type GinkgoFlagSet struct {
	flags    GinkgoFlags
	bindings interface{}

	sections            GinkgoFlagSections
	extraGoFlagsSection GinkgoFlagSection

	flagSet *flag.FlagSet
}

// Call NewGinkgoFlagSet to create GinkgoFlagSet that creates and binds to it's own *flag.FlagSet
func NewGinkgoFlagSet(flags GinkgoFlags, bindings interface{}, sections GinkgoFlagSections) (GinkgoFlagSet, error) {
	return bindFlagSet(GinkgoFlagSet{
		flags:    flags,
		bindings: bindings,
		sections: sections,
	}, nil)
}

// Call NewGinkgoFlagSet to create GinkgoFlagSet that extends an existing *flag.FlagSet
func NewAttachedGinkgoFlagSet(flagSet *flag.FlagSet, flags GinkgoFlags, bindings interface{}, sections GinkgoFlagSections, extraGoFlagsSection GinkgoFlagSection) (GinkgoFlagSet, error) {
	return bindFlagSet(GinkgoFlagSet{
		flags:               flags,
		bindings:            bindings,
		sections:            sections,
		extraGoFlagsSection: extraGoFlagsSection,
	}, flagSet)
}

func bindFlagSet(f GinkgoFlagSet, flagSet *flag.FlagSet) (GinkgoFlagSet, error) {
	if flagSet == nil {
		f.flagSet = flag.NewFlagSet("", flag.ContinueOnError)
		//suppress all output as Ginkgo is responsible for formatting usage
		f.flagSet.SetOutput(io.Discard)
	} else {
		f.flagSet = flagSet
		//we're piggybacking on an existing flagset (typically go test) so we have limited control
		//on user feedback
		f.flagSet.Usage = f.substituteUsage
	}

	for _, flag := range f.flags {
		name := flag.Name

		deprecatedUsage := "[DEPRECATED]"
		deprecatedName := flag.DeprecatedName
		if name != "" {
			deprecatedUsage = fmt.Sprintf("[DEPRECATED] use --%s instead", name)
		} else if flag.Usage != "" {
			deprecatedUsage += " " + flag.Usage
		}

		value, ok := valueAtKeyPath(f.bindings, flag.KeyPath)
		if !ok {
			return GinkgoFlagSet{}, fmt.Errorf("could not load KeyPath: %s", flag.KeyPath)
		}

		iface, addr := value.Interface(), value.Addr().Interface()

		switch value.Type() {
		case reflect.TypeOf(string("")):
			if name != "" {
				f.flagSet.StringVar(addr.(*string), name, iface.(string), flag.Usage)
			}
			if deprecatedName != "" {
				f.flagSet.StringVar(addr.(*string), deprecatedName, iface.(string), deprecatedUsage)
			}
		case reflect.TypeOf(int64(0)):
			if name != "" {
				f.flagSet.Int64Var(addr.(*int64), name, iface.(int64), flag.Usage)
			}
			if deprecatedName != "" {
				f.flagSet.Int64Var(addr.(*int64), deprecatedName, iface.(int64), deprecatedUsage)
			}
		case reflect.TypeOf(float64(0)):
			if name != "" {
				f.flagSet.Float64Var(addr.(*float64), name, iface.(float64), flag.Usage)
			}
			if deprecatedName != "" {
				f.flagSet.Float64Var(addr.(*float64), deprecatedName, iface.(float64), deprecatedUsage)
			}
		case reflect.TypeOf(int(0)):
			if name != "" {
				f.flagSet.IntVar(addr.(*int), name, iface.(int), flag.Usage)
			}
			if deprecatedName != "" {
				f.flagSet.IntVar(addr.(*int), deprecatedName, iface.(int), deprecatedUsage)
			}
		case reflect.TypeOf(bool(true)):
			if name != "" {
				f.flagSet.BoolVar(addr.(*bool), name, iface.(bool), flag.Usage)
			}
			if deprecatedName != "" {
				f.flagSet.BoolVar(addr.(*bool), deprecatedName, iface.(bool), deprecatedUsage)
			}
		case reflect.TypeOf(time.Duration(0)):
			if name != "" {
				f.flagSet.DurationVar(addr.(*time.Duration), name, iface.(time.Duration), flag.Usage)
			}
			if deprecatedName != "" {
				f.flagSet.DurationVar(addr.(*time.Duration), deprecatedName, iface.(time.Duration), deprecatedUsage)
			}

		case reflect.TypeOf([]string{}):
			if name != "" {
				f.flagSet.Var(stringSliceVar{value}, name, flag.Usage)
			}
			if deprecatedName != "" {
				f.flagSet.Var(stringSliceVar{value}, deprecatedName, deprecatedUsage)
			}
		default:
			return GinkgoFlagSet{}, fmt.Errorf("unsupported type %T", iface)
		}
	}

	return f, nil
}

func (f GinkgoFlagSet) IsZero() bool {
	return f.flagSet == nil
}

func (f GinkgoFlagSet) WasSet(name string) bool {
	found := false
	f.flagSet.Visit(func(f *flag.Flag) {
		if f.Name == name {
			found = true
		}
	})

	return found
}

func (f GinkgoFlagSet) Lookup(name string) *flag.Flag {
	return f.flagSet.Lookup(name)
}

func (f GinkgoFlagSet) Parse(args []string) ([]string, error) {
	if f.IsZero() {
		return args, nil
	}
	err := f.flagSet.Parse(args)
	if err != nil {
		return []string{}, err
	}
	return f.flagSet.Args(), nil
}

func (f GinkgoFlagSet) ValidateDeprecations(deprecationTracker *DeprecationTracker) {
	if f.IsZero() {
		return
	}
	f.flagSet.Visit(func(flag *flag.Flag) {
		for _, ginkgoFlag := range f.flags {
			if ginkgoFlag.DeprecatedName != "" && strings.HasSuffix(flag.Name, ginkgoFlag.DeprecatedName) {
				message := fmt.Sprintf("--%s is deprecated", ginkgoFlag.DeprecatedName)
				if ginkgoFlag.Name != "" {
					message = fmt.Sprintf("--%s is deprecated, use --%s instead", ginkgoFlag.DeprecatedName, ginkgoFlag.Name)
				} else if ginkgoFlag.Usage != "" {
					message += " " + ginkgoFlag.Usage
				}

				deprecationTracker.TrackDeprecation(Deprecation{
					Message: message,
					DocLink: ginkgoFlag.DeprecatedDocLink,
					Version: ginkgoFlag.DeprecatedVersion,
				})
			}
		}
	})
}

func (f GinkgoFlagSet) Usage() string {
	if f.IsZero() {
		return ""
	}
	groupedFlags := map[GinkgoFlagSection]GinkgoFlags{}
	ungroupedFlags := GinkgoFlags{}
	managedFlags := map[string]bool{}
	extraGoFlags := []*flag.Flag{}

	for _, flag := range f.flags {
		managedFlags[flag.Name] = true
		managedFlags[flag.DeprecatedName] = true

		if flag.Name == "" {
			continue
		}

		section, ok := f.sections.Lookup(flag.SectionKey)
		if ok {
			groupedFlags[section] = append(groupedFlags[section], flag)
		} else {
			ungroupedFlags = append(ungroupedFlags, flag)
		}
	}

	f.flagSet.VisitAll(func(flag *flag.Flag) {
		if !managedFlags[flag.Name] {
			extraGoFlags = append(extraGoFlags, flag)
		}
	})

	out := ""
	for _, section := range f.sections {
		flags := groupedFlags[section]
		if len(flags) == 0 {
			continue
		}
		out += f.usageForSection(section)
		if section.Succinct {
			succinctFlags := []string{}
			for _, flag := range flags {
				if flag.Name != "" {
					succinctFlags = append(succinctFlags, fmt.Sprintf("--%s", flag.Name))
				}
			}
			out += formatter.Fiw(1, formatter.COLS, section.Style+strings.Join(succinctFlags, ", ")+"{{/}}\n")
		} else {
			for _, flag := range flags {
				out += f.usageForFlag(flag, section.Style)
			}
		}
		out += "\n"
	}
	if len(ungroupedFlags) > 0 {
		for _, flag := range ungroupedFlags {
			out += f.usageForFlag(flag, "")
		}
		out += "\n"
	}
	if len(extraGoFlags) > 0 {
		out += f.usageForSection(f.extraGoFlagsSection)
		for _, goFlag := range extraGoFlags {
			out += f.usageForGoFlag(goFlag)
		}
	}

	return out
}

func (f GinkgoFlagSet) substituteUsage() {
	fmt.Fprintln(f.flagSet.Output(), f.Usage())
}

func valueAtKeyPath(root interface{}, keyPath string) (reflect.Value, bool) {
	if len(keyPath) == 0 {
		return reflect.Value{}, false
	}

	val := reflect.ValueOf(root)
	components := strings.Split(keyPath, ".")
	for _, component := range components {
		val = reflect.Indirect(val)
		switch val.Kind() {
		case reflect.Map:
			val = val.MapIndex(reflect.ValueOf(component))
			if val.Kind() == reflect.Interface {
				val = reflect.ValueOf(val.Interface())
			}
		case reflect.Struct:
			val = val.FieldByName(component)
		default:
			return reflect.Value{}, false
		}
		if (val == reflect.Value{}) {
			return reflect.Value{}, false
		}
	}

	return val, true
}

func (f GinkgoFlagSet) usageForSection(section GinkgoFlagSection) string {
	out := formatter.F(section.Style + "{{bold}}{{underline}}" + section.Heading + "{{/}}\n")
	if section.Description != "" {
		out += formatter.Fiw(0, formatter.COLS, section.Description+"\n")
	}
	return out
}

func (f GinkgoFlagSet) usageForFlag(flag GinkgoFlag, style string) string {
	argument := flag.UsageArgument
	defValue := flag.UsageDefaultValue
	if argument == "" {
		value, _ := valueAtKeyPath(f.bindings, flag.KeyPath)
		switch value.Type() {
		case reflect.TypeOf(string("")):
			argument = "string"
		case reflect.TypeOf(int64(0)), reflect.TypeOf(int(0)):
			argument = "int"
		case reflect.TypeOf(time.Duration(0)):
			argument = "duration"
		case reflect.TypeOf(float64(0)):
			argument = "float"
		case reflect.TypeOf([]string{}):
			argument = "string"
		}
	}
	if argument != "" {
		argument = "[" + argument + "] "
	}
	if defValue != "" {
		defValue = fmt.Sprintf("(default: %s)", defValue)
	}
	hyphens := "--"
	if len(flag.Name) == 1 {
		hyphens = "-"
	}

	out := formatter.Fi(1, style+"%s%s{{/}} %s{{gray}}%s{{/}}\n", hyphens, flag.Name, argument, defValue)
	out += formatter.Fiw(2, formatter.COLS, "{{light-gray}}%s{{/}}\n", flag.Usage)
	return out
}

func (f GinkgoFlagSet) usageForGoFlag(goFlag *flag.Flag) string {
	//Taken directly from the flag package
	out := fmt.Sprintf("  -%s", goFlag.Name)
	name, usage := flag.UnquoteUsage(goFlag)
	if len(name) > 0 {
		out += " " + name
	}
	if len(out) <= 4 {
		out += "\t"
	} else {
		out += "\n    \t"
	}
	out += strings.ReplaceAll(usage, "\n", "\n    \t")
	out += "\n"
	return out
}

type stringSliceVar struct {
	slice reflect.Value
}

func (ssv stringSliceVar) String() string { return "" }
func (ssv stringSliceVar) Set(s string) error {
	ssv.slice.Set(reflect.AppendSlice(ssv.slice, reflect.ValueOf([]string{s})))
	return nil
}

//given a set of GinkgoFlags and bindings, generate flag arguments suitable to be passed to an application with that set of flags configured.
func GenerateFlagArgs(flags GinkgoFlags, bindings interface{}) ([]string, error) {
	result := []string{}
	for _, flag := range flags {
		name := flag.ExportAs
		if name == "" {
			name = flag.Name
		}
		if name == "" {
			continue
		}

		value, ok := valueAtKeyPath(bindings, flag.KeyPath)
		if !ok {
			return []string{}, fmt.Errorf("could not load KeyPath: %s", flag.KeyPath)
		}

		iface := value.Interface()
		switch value.Type() {
		case reflect.TypeOf(string("")):
			if iface.(string) != "" {
				result = append(result, fmt.Sprintf("--%s=%s", name, iface))
			}
		case reflect.TypeOf(int64(0)):
			if iface.(int64) != 0 {
				result = append(result, fmt.Sprintf("--%s=%d", name, iface))
			}
		case reflect.TypeOf(float64(0)):
			if iface.(float64) != 0 {
				result = append(result, fmt.Sprintf("--%s=%f", name, iface))
			}
		case reflect.TypeOf(int(0)):
			if iface.(int) != 0 {
				result = append(result, fmt.Sprintf("--%s=%d", name, iface))
			}
		case reflect.TypeOf(bool(true)):
			if iface.(bool) {
				result = append(result, fmt.Sprintf("--%s", name))
			}
		case reflect.TypeOf(time.Duration(0)):
			if iface.(time.Duration) != time.Duration(0) {
				result = append(result, fmt.Sprintf("--%s=%s", name, iface))
			}

		case reflect.TypeOf([]string{}):
			strings := iface.([]string)
			for _, s := range strings {
				result = append(result, fmt.Sprintf("--%s=%s", name, s))
			}
		default:
			return []string{}, fmt.Errorf("unsupported type %T", iface)
		}
	}

	return result, nil
}
 07070100000981000081A4000000000000000000000001645E367C0000219E000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/types/label_filter.go    package types

import (
	"fmt"
	"regexp"
	"strings"
)

var DEBUG_LABEL_FILTER_PARSING = false

type LabelFilter func([]string) bool

func matchLabelAction(label string) LabelFilter {
	expected := strings.ToLower(label)
	return func(labels []string) bool {
		for i := range labels {
			if strings.ToLower(labels[i]) == expected {
				return true
			}
		}
		return false
	}
}

func matchLabelRegexAction(regex *regexp.Regexp) LabelFilter {
	return func(labels []string) bool {
		for i := range labels {
			if regex.MatchString(labels[i]) {
				return true
			}
		}
		return false
	}
}

func notAction(filter LabelFilter) LabelFilter {
	return func(labels []string) bool { return !filter(labels) }
}

func andAction(a, b LabelFilter) LabelFilter {
	return func(labels []string) bool { return a(labels) && b(labels) }
}

func orAction(a, b LabelFilter) LabelFilter {
	return func(labels []string) bool { return a(labels) || b(labels) }
}

type lfToken uint

const (
	lfTokenInvalid lfToken = iota

	lfTokenRoot
	lfTokenOpenGroup
	lfTokenCloseGroup
	lfTokenNot
	lfTokenAnd
	lfTokenOr
	lfTokenRegexp
	lfTokenLabel
	lfTokenEOF
)

func (l lfToken) Precedence() int {
	switch l {
	case lfTokenRoot, lfTokenOpenGroup:
		return 0
	case lfTokenOr:
		return 1
	case lfTokenAnd:
		return 2
	case lfTokenNot:
		return 3
	}
	return -1
}

func (l lfToken) String() string {
	switch l {
	case lfTokenRoot:
		return "ROOT"
	case lfTokenOpenGroup:
		return "("
	case lfTokenCloseGroup:
		return ")"
	case lfTokenNot:
		return "!"
	case lfTokenAnd:
		return "&&"
	case lfTokenOr:
		return "||"
	case lfTokenRegexp:
		return "/regexp/"
	case lfTokenLabel:
		return "label"
	case lfTokenEOF:
		return "EOF"
	}
	return "INVALID"
}

type treeNode struct {
	token    lfToken
	location int
	value    string

	parent    *treeNode
	leftNode  *treeNode
	rightNode *treeNode
}

func (tn *treeNode) setRightNode(node *treeNode) {
	tn.rightNode = node
	node.parent = tn
}

func (tn *treeNode) setLeftNode(node *treeNode) {
	tn.leftNode = node
	node.parent = tn
}

func (tn *treeNode) firstAncestorWithPrecedenceLEQ(precedence int) *treeNode {
	if tn.token.Precedence() <= precedence {
		return tn
	}
	return tn.parent.firstAncestorWithPrecedenceLEQ(precedence)
}

func (tn *treeNode) firstUnmatchedOpenNode() *treeNode {
	if tn.token == lfTokenOpenGroup {
		return tn
	}
	if tn.parent == nil {
		return nil
	}
	return tn.parent.firstUnmatchedOpenNode()
}

func (tn *treeNode) constructLabelFilter(input string) (LabelFilter, error) {
	switch tn.token {
	case lfTokenOpenGroup:
		return nil, GinkgoErrors.SyntaxErrorParsingLabelFilter(input, tn.location, "Mismatched '(' - could not find matching ')'.")
	case lfTokenLabel:
		return matchLabelAction(tn.value), nil
	case lfTokenRegexp:
		re, err := regexp.Compile(tn.value)
		if err != nil {
			return nil, GinkgoErrors.SyntaxErrorParsingLabelFilter(input, tn.location, fmt.Sprintf("RegExp compilation error: %s", err))
		}
		return matchLabelRegexAction(re), nil
	}

	if tn.rightNode == nil {
		return nil, GinkgoErrors.SyntaxErrorParsingLabelFilter(input, -1, "Unexpected EOF.")
	}
	rightLF, err := tn.rightNode.constructLabelFilter(input)
	if err != nil {
		return nil, err
	}

	switch tn.token {
	case lfTokenRoot, lfTokenCloseGroup:
		return rightLF, nil
	case lfTokenNot:
		return notAction(rightLF), nil
	}

	if tn.leftNode == nil {
		return nil, GinkgoErrors.SyntaxErrorParsingLabelFilter(input, tn.location, fmt.Sprintf("Malformed tree - '%s' is missing left operand.", tn.token))
	}
	leftLF, err := tn.leftNode.constructLabelFilter(input)
	if err != nil {
		return nil, err
	}

	switch tn.token {
	case lfTokenAnd:
		return andAction(leftLF, rightLF), nil
	case lfTokenOr:
		return orAction(leftLF, rightLF), nil
	}

	return nil, GinkgoErrors.SyntaxErrorParsingLabelFilter(input, tn.location, fmt.Sprintf("Invalid token '%s'.", tn.token))
}

func (tn *treeNode) tokenString() string {
	out := fmt.Sprintf("<%s", tn.token)
	if tn.value != "" {
		out += " | " + tn.value
	}
	out += ">"
	return out
}

func (tn *treeNode) toString(indent int) string {
	out := tn.tokenString() + "\n"
	if tn.leftNode != nil {
		out += fmt.Sprintf("%s  |_(L)_%s", strings.Repeat(" ", indent), tn.leftNode.toString(indent+1))
	}
	if tn.rightNode != nil {
		out += fmt.Sprintf("%s  |_(R)_%s", strings.Repeat(" ", indent), tn.rightNode.toString(indent+1))
	}
	return out
}

func tokenize(input string) func() (*treeNode, error) {
	runes, i := []rune(input), 0

	peekIs := func(r rune) bool {
		if i+1 < len(runes) {
			return runes[i+1] == r
		}
		return false
	}

	consumeUntil := func(cutset string) (string, int) {
		j := i
		for ; j < len(runes); j++ {
			if strings.IndexRune(cutset, runes[j]) >= 0 {
				break
			}
		}
		return string(runes[i:j]), j - i
	}

	return func() (*treeNode, error) {
		for i < len(runes) && runes[i] == ' ' {
			i += 1
		}

		if i >= len(runes) {
			return &treeNode{token: lfTokenEOF}, nil
		}

		node := &treeNode{location: i}
		switch runes[i] {
		case '&':
			if !peekIs('&') {
				return &treeNode{}, GinkgoErrors.SyntaxErrorParsingLabelFilter(input, i, "Invalid token '&'.  Did you mean '&&'?")
			}
			i += 2
			node.token = lfTokenAnd
		case '|':
			if !peekIs('|') {
				return &treeNode{}, GinkgoErrors.SyntaxErrorParsingLabelFilter(input, i, "Invalid token '|'.  Did you mean '||'?")
			}
			i += 2
			node.token = lfTokenOr
		case '!':
			i += 1
			node.token = lfTokenNot
		case ',':
			i += 1
			node.token = lfTokenOr
		case '(':
			i += 1
			node.token = lfTokenOpenGroup
		case ')':
			i += 1
			node.token = lfTokenCloseGroup
		case '/':
			i += 1
			value, n := consumeUntil("/")
			i += n + 1
			node.token, node.value = lfTokenRegexp, value
		default:
			value, n := consumeUntil("&|!,()/")
			i += n
			node.token, node.value = lfTokenLabel, strings.TrimSpace(value)
		}
		return node, nil
	}
}

func MustParseLabelFilter(input string) LabelFilter {
	filter, err := ParseLabelFilter(input)
	if err != nil {
		panic(err)
	}
	return filter
}

func ParseLabelFilter(input string) (LabelFilter, error) {
	if DEBUG_LABEL_FILTER_PARSING {
		fmt.Println("\n==============")
		fmt.Println("Input: ", input)
		fmt.Print("Tokens: ")
	}
	if input == "" {
		return func(_ []string) bool { return true }, nil
	}
	nextToken := tokenize(input)

	root := &treeNode{token: lfTokenRoot}
	current := root
LOOP:
	for {
		node, err := nextToken()
		if err != nil {
			return nil, err
		}

		if DEBUG_LABEL_FILTER_PARSING {
			fmt.Print(node.tokenString() + " ")
		}

		switch node.token {
		case lfTokenEOF:
			break LOOP
		case lfTokenLabel, lfTokenRegexp:
			if current.rightNode != nil {
				return nil, GinkgoErrors.SyntaxErrorParsingLabelFilter(input, node.location, "Found two adjacent labels.  You need an operator between them.")
			}
			current.setRightNode(node)
		case lfTokenNot, lfTokenOpenGroup:
			if current.rightNode != nil {
				return nil, GinkgoErrors.SyntaxErrorParsingLabelFilter(input, node.location, fmt.Sprintf("Invalid token '%s'.", node.token))
			}
			current.setRightNode(node)
			current = node
		case lfTokenAnd, lfTokenOr:
			if current.rightNode == nil {
				return nil, GinkgoErrors.SyntaxErrorParsingLabelFilter(input, node.location, fmt.Sprintf("Operator '%s' missing left hand operand.", node.token))
			}
			nodeToStealFrom := current.firstAncestorWithPrecedenceLEQ(node.token.Precedence())
			node.setLeftNode(nodeToStealFrom.rightNode)
			nodeToStealFrom.setRightNode(node)
			current = node
		case lfTokenCloseGroup:
			firstUnmatchedOpenNode := current.firstUnmatchedOpenNode()
			if firstUnmatchedOpenNode == nil {
				return nil, GinkgoErrors.SyntaxErrorParsingLabelFilter(input, node.location, "Mismatched ')' - could not find matching '('.")
			}
			if firstUnmatchedOpenNode == current && current.rightNode == nil {
				return nil, GinkgoErrors.SyntaxErrorParsingLabelFilter(input, node.location, "Found empty '()' group.")
			}
			firstUnmatchedOpenNode.token = lfTokenCloseGroup //signify the group is now closed
			current = firstUnmatchedOpenNode.parent
		default:
			return nil, GinkgoErrors.SyntaxErrorParsingLabelFilter(input, node.location, fmt.Sprintf("Unknown token '%s'.", node.token))
		}
	}
	if DEBUG_LABEL_FILTER_PARSING {
		fmt.Printf("\n Tree:\n%s", root.toString(0))
	}
	return root.constructLabelFilter(input)
}

func ValidateAndCleanupLabel(label string, cl CodeLocation) (string, error) {
	out := strings.TrimSpace(label)
	if out == "" {
		return "", GinkgoErrors.InvalidEmptyLabel(cl)
	}
	if strings.ContainsAny(out, "&|!,()/") {
		return "", GinkgoErrors.InvalidLabel(label, cl)
	}
	return out, nil
}
  07070100000982000081A4000000000000000000000001645E367C0000164D000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/types/report_entry.go    package types

import (
	"encoding/json"
	"fmt"
	"time"
)

// ReportEntryValue wraps a report entry's value ensuring it can be encoded and decoded safely into reports
// and across the network connection when running in parallel
type ReportEntryValue struct {
	raw            interface{} //unexported to prevent gob from freaking out about unregistered structs
	AsJSON         string
	Representation string
}

func WrapEntryValue(value interface{}) ReportEntryValue {
	return ReportEntryValue{
		raw: value,
	}
}

func (rev ReportEntryValue) GetRawValue() interface{} {
	return rev.raw
}

func (rev ReportEntryValue) String() string {
	if rev.raw == nil {
		return ""
	}
	if colorableStringer, ok := rev.raw.(ColorableStringer); ok {
		return colorableStringer.ColorableString()
	}

	if stringer, ok := rev.raw.(fmt.Stringer); ok {
		return stringer.String()
	}
	if rev.Representation != "" {
		return rev.Representation
	}
	return fmt.Sprintf("%+v", rev.raw)
}

func (rev ReportEntryValue) MarshalJSON() ([]byte, error) {
	//All this to capture the representation at encoding-time, not creating time
	//This way users can Report on pointers and get their final values at reporting-time
	out := struct {
		AsJSON         string
		Representation string
	}{
		Representation: rev.String(),
	}
	asJSON, err := json.Marshal(rev.raw)
	if err != nil {
		return nil, err
	}
	out.AsJSON = string(asJSON)

	return json.Marshal(out)
}

func (rev *ReportEntryValue) UnmarshalJSON(data []byte) error {
	in := struct {
		AsJSON         string
		Representation string
	}{}
	err := json.Unmarshal(data, &in)
	if err != nil {
		return err
	}
	rev.AsJSON = in.AsJSON
	rev.Representation = in.Representation
	return json.Unmarshal([]byte(in.AsJSON), &(rev.raw))
}

func (rev ReportEntryValue) GobEncode() ([]byte, error) {
	return rev.MarshalJSON()
}

func (rev *ReportEntryValue) GobDecode(data []byte) error {
	return rev.UnmarshalJSON(data)
}

// ReportEntry captures information attached to `SpecReport` via `AddReportEntry`
type ReportEntry struct {
	// Visibility captures the visibility policy for this ReportEntry
	Visibility ReportEntryVisibility
	// Location captures the location of the AddReportEntry call
	Location CodeLocation

	Time             time.Time //need this for backwards compatibility
	TimelineLocation TimelineLocation

	// Name captures the name of this report
	Name string
	// Value captures the (optional) object passed into AddReportEntry - this can be
	// anything the user wants.  The value passed to AddReportEntry is wrapped in a ReportEntryValue to make
	// encoding/decoding the value easier.  To access the raw value call entry.GetRawValue()
	Value ReportEntryValue
}

// ColorableStringer is an interface that ReportEntry values can satisfy.  If they do then ColorableString() is used to generate their representation.
type ColorableStringer interface {
	ColorableString() string
}

// StringRepresentation() returns the string representation of the value associated with the ReportEntry --
// if value is nil, empty string is returned
// if value is a `ColorableStringer` then `Value.ColorableString()` is returned
// if value is a `fmt.Stringer` then `Value.String()` is returned
// otherwise the value is formatted with "%+v"
func (entry ReportEntry) StringRepresentation() string {
	return entry.Value.String()
}

// GetRawValue returns the Value object that was passed to AddReportEntry
// If called in-process this will be the same object that was passed into AddReportEntry.
// If used from a rehydrated JSON file _or_ in a ReportAfterSuite when running in parallel this will be
// a JSON-decoded {}interface.  If you want to reconstitute your original object you can decode the entry.Value.AsJSON
// field yourself.
func (entry ReportEntry) GetRawValue() interface{} {
	return entry.Value.GetRawValue()
}

func (entry ReportEntry) GetTimelineLocation() TimelineLocation {
	return entry.TimelineLocation
}

type ReportEntries []ReportEntry

func (re ReportEntries) HasVisibility(visibilities ...ReportEntryVisibility) bool {
	for _, entry := range re {
		if entry.Visibility.Is(visibilities...) {
			return true
		}
	}
	return false
}

func (re ReportEntries) WithVisibility(visibilities ...ReportEntryVisibility) ReportEntries {
	out := ReportEntries{}

	for _, entry := range re {
		if entry.Visibility.Is(visibilities...) {
			out = append(out, entry)
		}
	}

	return out
}

// ReportEntryVisibility governs the visibility of ReportEntries in Ginkgo's console reporter
type ReportEntryVisibility uint

const (
	// Always print out this ReportEntry
	ReportEntryVisibilityAlways ReportEntryVisibility = iota
	// Only print out this ReportEntry if the spec fails or if the test is run with -v
	ReportEntryVisibilityFailureOrVerbose
	// Never print out this ReportEntry (note that ReportEntrys are always encoded in machine readable reports (e.g. JSON, JUnit, etc.))
	ReportEntryVisibilityNever
)

var revEnumSupport = NewEnumSupport(map[uint]string{
	uint(ReportEntryVisibilityAlways):           "always",
	uint(ReportEntryVisibilityFailureOrVerbose): "failure-or-verbose",
	uint(ReportEntryVisibilityNever):            "never",
})

func (rev ReportEntryVisibility) String() string {
	return revEnumSupport.String(uint(rev))
}
func (rev *ReportEntryVisibility) UnmarshalJSON(b []byte) error {
	out, err := revEnumSupport.UnmarshJSON(b)
	*rev = ReportEntryVisibility(out)
	return err
}
func (rev ReportEntryVisibility) MarshalJSON() ([]byte, error) {
	return revEnumSupport.MarshJSON(uint(rev))
}

func (v ReportEntryVisibility) Is(visibilities ...ReportEntryVisibility) bool {
	for _, visibility := range visibilities {
		if v == visibility {
			return true
		}
	}

	return false
}
   07070100000983000081A4000000000000000000000001645E367C00007978000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/types/types.go   package types

import (
	"encoding/json"
	"fmt"
	"sort"
	"strings"
	"time"
)

const GINKGO_FOCUS_EXIT_CODE = 197
const GINKGO_TIME_FORMAT = "01/02/06 15:04:05.999"

// Report captures information about a Ginkgo test run
type Report struct {
	//SuitePath captures the absolute path to the test suite
	SuitePath string

	//SuiteDescription captures the description string passed to the DSL's RunSpecs() function
	SuiteDescription string

	//SuiteLabels captures any labels attached to the suite by the DSL's RunSpecs() function
	SuiteLabels []string

	//SuiteSucceeded captures the success or failure status of the test run
	//If true, the test run is considered successful.
	//If false, the test run is considered unsuccessful
	SuiteSucceeded bool

	//SuiteHasProgrammaticFocus captures whether the test suite has a test or set of tests that are programmatically focused
	//(i.e an `FIt` or an `FDescribe`
	SuiteHasProgrammaticFocus bool

	//SpecialSuiteFailureReasons may contain special failure reasons
	//For example, a test suite might be considered "failed" even if none of the individual specs
	//have a failure state.  For example, if the user has configured --fail-on-pending the test suite
	//will have failed if there are pending tests even though all non-pending tests may have passed.  In such
	//cases, Ginkgo populates SpecialSuiteFailureReasons with a clear message indicating the reason for the failure.
	//SpecialSuiteFailureReasons is also populated if the test suite is interrupted by the user.
	//Since multiple special failure reasons can occur, this field is a slice.
	SpecialSuiteFailureReasons []string

	//PreRunStats contains a set of stats captured before the test run begins.  This is primarily used
	//by Ginkgo's reporter to tell the user how many specs are in the current suite (PreRunStats.TotalSpecs)
	//and how many it intends to run (PreRunStats.SpecsThatWillRun) after applying any relevant focus or skip filters.
	PreRunStats PreRunStats

	//StartTime and EndTime capture the start and end time of the test run
	StartTime time.Time
	EndTime   time.Time

	//RunTime captures the duration of the test run
	RunTime time.Duration

	//SuiteConfig captures the Ginkgo configuration governing this test run
	//SuiteConfig includes information necessary for reproducing an identical test run,
	//such as the random seed and any filters applied during the test run
	SuiteConfig SuiteConfig

	//SpecReports is a list of all SpecReports generated by this test run
	//It is empty when the SuiteReport is provided to ReportBeforeSuite
	SpecReports SpecReports
}

// PreRunStats contains a set of stats captured before the test run begins.  This is primarily used
// by Ginkgo's reporter to tell the user how many specs are in the current suite (PreRunStats.TotalSpecs)
// and how many it intends to run (PreRunStats.SpecsThatWillRun) after applying any relevant focus or skip filters.
type PreRunStats struct {
	TotalSpecs       int
	SpecsThatWillRun int
}

// Add is used by Ginkgo's parallel aggregation mechanisms to combine test run reports form individual parallel processes
// to form a complete final report.
func (report Report) Add(other Report) Report {
	report.SuiteSucceeded = report.SuiteSucceeded && other.SuiteSucceeded

	if other.StartTime.Before(report.StartTime) {
		report.StartTime = other.StartTime
	}

	if other.EndTime.After(report.EndTime) {
		report.EndTime = other.EndTime
	}

	specialSuiteFailureReasons := []string{}
	reasonsLookup := map[string]bool{}
	for _, reasons := range [][]string{report.SpecialSuiteFailureReasons, other.SpecialSuiteFailureReasons} {
		for _, reason := range reasons {
			if !reasonsLookup[reason] {
				reasonsLookup[reason] = true
				specialSuiteFailureReasons = append(specialSuiteFailureReasons, reason)
			}
		}
	}
	report.SpecialSuiteFailureReasons = specialSuiteFailureReasons
	report.RunTime = report.EndTime.Sub(report.StartTime)

	reports := make(SpecReports, len(report.SpecReports)+len(other.SpecReports))
	for i := range report.SpecReports {
		reports[i] = report.SpecReports[i]
	}
	offset := len(report.SpecReports)
	for i := range other.SpecReports {
		reports[i+offset] = other.SpecReports[i]
	}

	report.SpecReports = reports
	return report
}

// SpecReport captures information about a Ginkgo spec.
type SpecReport struct {
	// ContainerHierarchyTexts is a slice containing the text strings of
	// all Describe/Context/When containers in this spec's hierarchy.
	ContainerHierarchyTexts []string

	// ContainerHierarchyLocations is a slice containing the CodeLocations of
	// all Describe/Context/When containers in this spec's hierarchy.
	ContainerHierarchyLocations []CodeLocation

	// ContainerHierarchyLabels is a slice containing the labels of
	// all Describe/Context/When containers in this spec's hierarchy
	ContainerHierarchyLabels [][]string

	// LeafNodeType, LeadNodeLocation, LeafNodeLabels and LeafNodeText capture the NodeType, CodeLocation, and text
	// of the Ginkgo node being tested (typically an NodeTypeIt node, though this can also be
	// one of the NodeTypesForSuiteLevelNodes node types)
	LeafNodeType     NodeType
	LeafNodeLocation CodeLocation
	LeafNodeLabels   []string
	LeafNodeText     string

	// State captures whether the spec has passed, failed, etc.
	State SpecState

	// IsSerial captures whether the spec has the Serial decorator
	IsSerial bool

	// IsInOrderedContainer captures whether the spec appears in an Ordered container
	IsInOrderedContainer bool

	// StartTime and EndTime capture the start and end time of the spec
	StartTime time.Time
	EndTime   time.Time

	// RunTime captures the duration of the spec
	RunTime time.Duration

	// ParallelProcess captures the parallel process that this spec ran on
	ParallelProcess int

	// RunningInParallel captures whether this spec is part of a suite that ran in parallel
	RunningInParallel bool

	//Failure is populated if a spec has failed, panicked, been interrupted, or skipped by the user (e.g. calling Skip())
	//It includes detailed information about the Failure
	Failure Failure

	// NumAttempts captures the number of times this Spec was run.
	// Flakey specs can be retried with ginkgo --flake-attempts=N or the use of the FlakeAttempts decorator.
	// Repeated specs can be retried with the use of the MustPassRepeatedly decorator
	NumAttempts int

	// MaxFlakeAttempts captures whether the spec has been retried with ginkgo --flake-attempts=N or the use of the FlakeAttempts decorator.
	MaxFlakeAttempts int

	// MaxMustPassRepeatedly captures whether the spec has the MustPassRepeatedly decorator
	MaxMustPassRepeatedly int

	// CapturedGinkgoWriterOutput contains text printed to the GinkgoWriter
	CapturedGinkgoWriterOutput string

	// CapturedStdOutErr contains text printed to stdout/stderr (when running in parallel)
	// This is always empty when running in series or calling CurrentSpecReport()
	// It is used internally by Ginkgo's reporter
	CapturedStdOutErr string

	// ReportEntries contains any reports added via `AddReportEntry`
	ReportEntries ReportEntries

	// ProgressReports contains any progress reports generated during this spec.  These can either be manually triggered, or automatically generated by Ginkgo via the PollProgressAfter() decorator
	ProgressReports []ProgressReport

	// AdditionalFailures contains any failures that occurred after the initial spec failure.  These typically occur in cleanup nodes after the initial failure and are only emitted when running in verbose mode.
	AdditionalFailures []AdditionalFailure

	// SpecEvents capture additional events that occur during the spec run
	SpecEvents SpecEvents
}

func (report SpecReport) MarshalJSON() ([]byte, error) {
	//All this to avoid emitting an empty Failure struct in the JSON
	out := struct {
		ContainerHierarchyTexts     []string
		ContainerHierarchyLocations []CodeLocation
		ContainerHierarchyLabels    [][]string
		LeafNodeType                NodeType
		LeafNodeLocation            CodeLocation
		LeafNodeLabels              []string
		LeafNodeText                string
		State                       SpecState
		StartTime                   time.Time
		EndTime                     time.Time
		RunTime                     time.Duration
		ParallelProcess             int
		Failure                     *Failure `json:",omitempty"`
		NumAttempts                 int
		MaxFlakeAttempts            int
		MaxMustPassRepeatedly       int
		CapturedGinkgoWriterOutput  string              `json:",omitempty"`
		CapturedStdOutErr           string              `json:",omitempty"`
		ReportEntries               ReportEntries       `json:",omitempty"`
		ProgressReports             []ProgressReport    `json:",omitempty"`
		AdditionalFailures          []AdditionalFailure `json:",omitempty"`
		SpecEvents                  SpecEvents          `json:",omitempty"`
	}{
		ContainerHierarchyTexts:     report.ContainerHierarchyTexts,
		ContainerHierarchyLocations: report.ContainerHierarchyLocations,
		ContainerHierarchyLabels:    report.ContainerHierarchyLabels,
		LeafNodeType:                report.LeafNodeType,
		LeafNodeLocation:            report.LeafNodeLocation,
		LeafNodeLabels:              report.LeafNodeLabels,
		LeafNodeText:                report.LeafNodeText,
		State:                       report.State,
		StartTime:                   report.StartTime,
		EndTime:                     report.EndTime,
		RunTime:                     report.RunTime,
		ParallelProcess:             report.ParallelProcess,
		Failure:                     nil,
		ReportEntries:               nil,
		NumAttempts:                 report.NumAttempts,
		MaxFlakeAttempts:            report.MaxFlakeAttempts,
		MaxMustPassRepeatedly:       report.MaxMustPassRepeatedly,
		CapturedGinkgoWriterOutput:  report.CapturedGinkgoWriterOutput,
		CapturedStdOutErr:           report.CapturedStdOutErr,
	}

	if !report.Failure.IsZero() {
		out.Failure = &(report.Failure)
	}
	if len(report.ReportEntries) > 0 {
		out.ReportEntries = report.ReportEntries
	}
	if len(report.ProgressReports) > 0 {
		out.ProgressReports = report.ProgressReports
	}
	if len(report.AdditionalFailures) > 0 {
		out.AdditionalFailures = report.AdditionalFailures
	}
	if len(report.SpecEvents) > 0 {
		out.SpecEvents = report.SpecEvents
	}

	return json.Marshal(out)
}

// CombinedOutput returns a single string representation of both CapturedStdOutErr and CapturedGinkgoWriterOutput
// Note that both are empty when using CurrentSpecReport() so CurrentSpecReport().CombinedOutput() will always be empty.
// CombinedOutput() is used internally by Ginkgo's reporter.
func (report SpecReport) CombinedOutput() string {
	if report.CapturedStdOutErr == "" {
		return report.CapturedGinkgoWriterOutput
	}
	if report.CapturedGinkgoWriterOutput == "" {
		return report.CapturedStdOutErr
	}
	return report.CapturedStdOutErr + "\n" + report.CapturedGinkgoWriterOutput
}

// Failed returns true if report.State is one of the SpecStateFailureStates
// (SpecStateFailed, SpecStatePanicked, SpecStateinterrupted, SpecStateAborted)
func (report SpecReport) Failed() bool {
	return report.State.Is(SpecStateFailureStates)
}

// FullText returns a concatenation of all the report.ContainerHierarchyTexts and report.LeafNodeText
func (report SpecReport) FullText() string {
	texts := []string{}
	texts = append(texts, report.ContainerHierarchyTexts...)
	if report.LeafNodeText != "" {
		texts = append(texts, report.LeafNodeText)
	}
	return strings.Join(texts, " ")
}

// Labels returns a deduped set of all the spec's Labels.
func (report SpecReport) Labels() []string {
	out := []string{}
	seen := map[string]bool{}
	for _, labels := range report.ContainerHierarchyLabels {
		for _, label := range labels {
			if !seen[label] {
				seen[label] = true
				out = append(out, label)
			}
		}
	}
	for _, label := range report.LeafNodeLabels {
		if !seen[label] {
			seen[label] = true
			out = append(out, label)
		}
	}

	return out
}

// MatchesLabelFilter returns true if the spec satisfies the passed in label filter query
func (report SpecReport) MatchesLabelFilter(query string) (bool, error) {
	filter, err := ParseLabelFilter(query)
	if err != nil {
		return false, err
	}
	return filter(report.Labels()), nil
}

// FileName() returns the name of the file containing the spec
func (report SpecReport) FileName() string {
	return report.LeafNodeLocation.FileName
}

// LineNumber() returns the line number of the leaf node
func (report SpecReport) LineNumber() int {
	return report.LeafNodeLocation.LineNumber
}

// FailureMessage() returns the failure message (or empty string if the test hasn't failed)
func (report SpecReport) FailureMessage() string {
	return report.Failure.Message
}

// FailureLocation() returns the location of the failure (or an empty CodeLocation if the test hasn't failed)
func (report SpecReport) FailureLocation() CodeLocation {
	return report.Failure.Location
}

// Timeline() returns a timeline view of the report
func (report SpecReport) Timeline() Timeline {
	timeline := Timeline{}
	if !report.Failure.IsZero() {
		timeline = append(timeline, report.Failure)
		if report.Failure.AdditionalFailure != nil {
			timeline = append(timeline, *(report.Failure.AdditionalFailure))
		}
	}
	for _, additionalFailure := range report.AdditionalFailures {
		timeline = append(timeline, additionalFailure)
	}
	for _, reportEntry := range report.ReportEntries {
		timeline = append(timeline, reportEntry)
	}
	for _, progressReport := range report.ProgressReports {
		timeline = append(timeline, progressReport)
	}
	for _, specEvent := range report.SpecEvents {
		timeline = append(timeline, specEvent)
	}
	sort.Sort(timeline)
	return timeline
}

type SpecReports []SpecReport

// WithLeafNodeType returns the subset of SpecReports with LeafNodeType matching one of the requested NodeTypes
func (reports SpecReports) WithLeafNodeType(nodeTypes NodeType) SpecReports {
	count := 0
	for i := range reports {
		if reports[i].LeafNodeType.Is(nodeTypes) {
			count++
		}
	}

	out := make(SpecReports, count)
	j := 0
	for i := range reports {
		if reports[i].LeafNodeType.Is(nodeTypes) {
			out[j] = reports[i]
			j++
		}
	}
	return out
}

// WithState returns the subset of SpecReports with State matching one of the requested SpecStates
func (reports SpecReports) WithState(states SpecState) SpecReports {
	count := 0
	for i := range reports {
		if reports[i].State.Is(states) {
			count++
		}
	}

	out, j := make(SpecReports, count), 0
	for i := range reports {
		if reports[i].State.Is(states) {
			out[j] = reports[i]
			j++
		}
	}
	return out
}

// CountWithState returns the number of SpecReports with State matching one of the requested SpecStates
func (reports SpecReports) CountWithState(states SpecState) int {
	n := 0
	for i := range reports {
		if reports[i].State.Is(states) {
			n += 1
		}
	}
	return n
}

// If the Spec passes, CountOfFlakedSpecs returns the number of SpecReports that failed after multiple attempts.
func (reports SpecReports) CountOfFlakedSpecs() int {
	n := 0
	for i := range reports {
		if reports[i].MaxFlakeAttempts > 1 && reports[i].State.Is(SpecStatePassed) && reports[i].NumAttempts > 1 {
			n += 1
		}
	}
	return n
}

// If the Spec fails, CountOfRepeatedSpecs returns the number of SpecReports that passed after multiple attempts
func (reports SpecReports) CountOfRepeatedSpecs() int {
	n := 0
	for i := range reports {
		if reports[i].MaxMustPassRepeatedly > 1 && reports[i].State.Is(SpecStateFailureStates) && reports[i].NumAttempts > 1 {
			n += 1
		}
	}
	return n
}

// TimelineLocation captures the location of an event in the spec's timeline
type TimelineLocation struct {
	//Offset is the offset (in bytes) of the event relative to the GinkgoWriter stream
	Offset int `json:",omitempty"`

	//Order is the order of the event with respect to other events.  The absolute value of Order
	//is irrelevant.  All that matters is that an event with a lower Order occurs before ane vent with a higher Order
	Order int `json:",omitempty"`

	Time time.Time
}

// TimelineEvent represent an event on the timeline
// consumers of Timeline will need to check the concrete type of each entry to determine how to handle it
type TimelineEvent interface {
	GetTimelineLocation() TimelineLocation
}

type Timeline []TimelineEvent

func (t Timeline) Len() int { return len(t) }
func (t Timeline) Less(i, j int) bool {
	return t[i].GetTimelineLocation().Order < t[j].GetTimelineLocation().Order
}
func (t Timeline) Swap(i, j int) { t[i], t[j] = t[j], t[i] }
func (t Timeline) WithoutHiddenReportEntries() Timeline {
	out := Timeline{}
	for _, event := range t {
		if reportEntry, isReportEntry := event.(ReportEntry); isReportEntry && reportEntry.Visibility == ReportEntryVisibilityNever {
			continue
		}
		out = append(out, event)
	}
	return out
}

func (t Timeline) WithoutVeryVerboseSpecEvents() Timeline {
	out := Timeline{}
	for _, event := range t {
		if specEvent, isSpecEvent := event.(SpecEvent); isSpecEvent && specEvent.IsOnlyVisibleAtVeryVerbose() {
			continue
		}
		out = append(out, event)
	}
	return out
}

// Failure captures failure information for an individual test
type Failure struct {
	// Message - the failure message passed into Fail(...).  When using a matcher library
	// like Gomega, this will contain the failure message generated by Gomega.
	//
	// Message is also populated if the user has called Skip(...).
	Message string

	// Location - the CodeLocation where the failure occurred
	// This CodeLocation will include a fully-populated StackTrace
	Location CodeLocation

	TimelineLocation TimelineLocation

	// ForwardedPanic - if the failure represents a captured panic (i.e. Summary.State == SpecStatePanicked)
	// then ForwardedPanic will be populated with a string representation of the captured panic.
	ForwardedPanic string `json:",omitempty"`

	// FailureNodeContext - one of three contexts describing the node in which the failure occurred:
	// FailureNodeIsLeafNode means the failure occurred in the leaf node of the associated SpecReport. None of the other FailureNode fields will be populated
	// FailureNodeAtTopLevel means the failure occurred in a non-leaf node that is defined at the top-level of the spec (i.e. not in a container). FailureNodeType and FailureNodeLocation will be populated.
	// FailureNodeInContainer means the failure occurred in a non-leaf node that is defined within a container.  FailureNodeType, FailureNodeLocation, and FailureNodeContainerIndex will be populated.
	//
	// FailureNodeType will contain the NodeType of the node in which the failure occurred.
	// FailureNodeLocation will contain the CodeLocation of the node in which the failure occurred.
	// If populated, FailureNodeContainerIndex will be the index into SpecReport.ContainerHierarchyTexts and SpecReport.ContainerHierarchyLocations that represents the parent container of the node in which the failure occurred.
	FailureNodeContext FailureNodeContext `json:",omitempty"`

	FailureNodeType NodeType `json:",omitempty"`

	FailureNodeLocation CodeLocation `json:",omitempty"`

	FailureNodeContainerIndex int `json:",omitempty"`

	//ProgressReport is populated if the spec was interrupted or timed out
	ProgressReport ProgressReport `json:",omitempty"`

	//AdditionalFailure is non-nil if a follow-on failure occurred within the same node after the primary failure.  This only happens when a node has timed out or been interrupted.  In such cases the AdditionalFailure can include information about where/why the spec was stuck.
	AdditionalFailure *AdditionalFailure `json:",omitempty"`
}

func (f Failure) IsZero() bool {
	return f.Message == "" && (f.Location == CodeLocation{})
}

func (f Failure) GetTimelineLocation() TimelineLocation {
	return f.TimelineLocation
}

// FailureNodeContext captures the location context for the node containing the failing line of code
type FailureNodeContext uint

const (
	FailureNodeContextInvalid FailureNodeContext = iota

	FailureNodeIsLeafNode
	FailureNodeAtTopLevel
	FailureNodeInContainer
)

var fncEnumSupport = NewEnumSupport(map[uint]string{
	uint(FailureNodeContextInvalid): "INVALID FAILURE NODE CONTEXT",
	uint(FailureNodeIsLeafNode):     "leaf-node",
	uint(FailureNodeAtTopLevel):     "top-level",
	uint(FailureNodeInContainer):    "in-container",
})

func (fnc FailureNodeContext) String() string {
	return fncEnumSupport.String(uint(fnc))
}
func (fnc *FailureNodeContext) UnmarshalJSON(b []byte) error {
	out, err := fncEnumSupport.UnmarshJSON(b)
	*fnc = FailureNodeContext(out)
	return err
}
func (fnc FailureNodeContext) MarshalJSON() ([]byte, error) {
	return fncEnumSupport.MarshJSON(uint(fnc))
}

// AdditionalFailure capturs any additional failures that occur after the initial failure of a psec
// these typically occur in clean up nodes after the spec has failed.
// We can't simply use Failure as we want to track the SpecState to know what kind of failure this is
type AdditionalFailure struct {
	State   SpecState
	Failure Failure
}

func (f AdditionalFailure) GetTimelineLocation() TimelineLocation {
	return f.Failure.TimelineLocation
}

// SpecState captures the state of a spec
// To determine if a given `state` represents a failure state, use `state.Is(SpecStateFailureStates)`
type SpecState uint

const (
	SpecStateInvalid SpecState = 0

	SpecStatePending SpecState = 1 << iota
	SpecStateSkipped
	SpecStatePassed
	SpecStateFailed
	SpecStateAborted
	SpecStatePanicked
	SpecStateInterrupted
	SpecStateTimedout
)

var ssEnumSupport = NewEnumSupport(map[uint]string{
	uint(SpecStateInvalid):     "INVALID SPEC STATE",
	uint(SpecStatePending):     "pending",
	uint(SpecStateSkipped):     "skipped",
	uint(SpecStatePassed):      "passed",
	uint(SpecStateFailed):      "failed",
	uint(SpecStateAborted):     "aborted",
	uint(SpecStatePanicked):    "panicked",
	uint(SpecStateInterrupted): "interrupted",
	uint(SpecStateTimedout):    "timedout",
})

func (ss SpecState) String() string {
	return ssEnumSupport.String(uint(ss))
}
func (ss SpecState) GomegaString() string {
	return ssEnumSupport.String(uint(ss))
}
func (ss *SpecState) UnmarshalJSON(b []byte) error {
	out, err := ssEnumSupport.UnmarshJSON(b)
	*ss = SpecState(out)
	return err
}
func (ss SpecState) MarshalJSON() ([]byte, error) {
	return ssEnumSupport.MarshJSON(uint(ss))
}

var SpecStateFailureStates = SpecStateFailed | SpecStateTimedout | SpecStateAborted | SpecStatePanicked | SpecStateInterrupted

func (ss SpecState) Is(states SpecState) bool {
	return ss&states != 0
}

// ProgressReport captures the progress of the current spec.  It is, effectively, a structured Ginkgo-aware stack trace
type ProgressReport struct {
	Message           string `json:",omitempty"`
	ParallelProcess   int    `json:",omitempty"`
	RunningInParallel bool   `json:",omitempty"`

	ContainerHierarchyTexts []string     `json:",omitempty"`
	LeafNodeText            string       `json:",omitempty"`
	LeafNodeLocation        CodeLocation `json:",omitempty"`
	SpecStartTime           time.Time    `json:",omitempty"`

	CurrentNodeType      NodeType     `json:",omitempty"`
	CurrentNodeText      string       `json:",omitempty"`
	CurrentNodeLocation  CodeLocation `json:",omitempty"`
	CurrentNodeStartTime time.Time    `json:",omitempty"`

	CurrentStepText      string       `json:",omitempty"`
	CurrentStepLocation  CodeLocation `json:",omitempty"`
	CurrentStepStartTime time.Time    `json:",omitempty"`

	AdditionalReports []string `json:",omitempty"`

	CapturedGinkgoWriterOutput string           `json:",omitempty"`
	TimelineLocation           TimelineLocation `json:",omitempty"`

	Goroutines []Goroutine `json:",omitempty"`
}

func (pr ProgressReport) IsZero() bool {
	return pr.CurrentNodeType == NodeTypeInvalid
}

func (pr ProgressReport) Time() time.Time {
	return pr.TimelineLocation.Time
}

func (pr ProgressReport) SpecGoroutine() Goroutine {
	for _, goroutine := range pr.Goroutines {
		if goroutine.IsSpecGoroutine {
			return goroutine
		}
	}
	return Goroutine{}
}

func (pr ProgressReport) HighlightedGoroutines() []Goroutine {
	out := []Goroutine{}
	for _, goroutine := range pr.Goroutines {
		if goroutine.IsSpecGoroutine || !goroutine.HasHighlights() {
			continue
		}
		out = append(out, goroutine)
	}
	return out
}

func (pr ProgressReport) OtherGoroutines() []Goroutine {
	out := []Goroutine{}
	for _, goroutine := range pr.Goroutines {
		if goroutine.IsSpecGoroutine || goroutine.HasHighlights() {
			continue
		}
		out = append(out, goroutine)
	}
	return out
}

func (pr ProgressReport) WithoutCapturedGinkgoWriterOutput() ProgressReport {
	out := pr
	out.CapturedGinkgoWriterOutput = ""
	return out
}

func (pr ProgressReport) WithoutOtherGoroutines() ProgressReport {
	out := pr
	filteredGoroutines := []Goroutine{}
	for _, goroutine := range pr.Goroutines {
		if goroutine.IsSpecGoroutine || goroutine.HasHighlights() {
			filteredGoroutines = append(filteredGoroutines, goroutine)
		}
	}
	out.Goroutines = filteredGoroutines
	return out
}

func (pr ProgressReport) GetTimelineLocation() TimelineLocation {
	return pr.TimelineLocation
}

type Goroutine struct {
	ID              uint64
	State           string
	Stack           []FunctionCall
	IsSpecGoroutine bool
}

func (g Goroutine) IsZero() bool {
	return g.ID == 0
}

func (g Goroutine) HasHighlights() bool {
	for _, fc := range g.Stack {
		if fc.Highlight {
			return true
		}
	}

	return false
}

type FunctionCall struct {
	Function        string
	Filename        string
	Line            int
	Highlight       bool     `json:",omitempty"`
	Source          []string `json:",omitempty"`
	SourceHighlight int      `json:",omitempty"`
}

// NodeType captures the type of a given Ginkgo Node
type NodeType uint

const (
	NodeTypeInvalid NodeType = 0

	NodeTypeContainer NodeType = 1 << iota
	NodeTypeIt

	NodeTypeBeforeEach
	NodeTypeJustBeforeEach
	NodeTypeAfterEach
	NodeTypeJustAfterEach

	NodeTypeBeforeAll
	NodeTypeAfterAll

	NodeTypeBeforeSuite
	NodeTypeSynchronizedBeforeSuite
	NodeTypeAfterSuite
	NodeTypeSynchronizedAfterSuite

	NodeTypeReportBeforeEach
	NodeTypeReportAfterEach
	NodeTypeReportBeforeSuite
	NodeTypeReportAfterSuite

	NodeTypeCleanupInvalid
	NodeTypeCleanupAfterEach
	NodeTypeCleanupAfterAll
	NodeTypeCleanupAfterSuite
)

var NodeTypesForContainerAndIt = NodeTypeContainer | NodeTypeIt
var NodeTypesForSuiteLevelNodes = NodeTypeBeforeSuite | NodeTypeSynchronizedBeforeSuite | NodeTypeAfterSuite | NodeTypeSynchronizedAfterSuite | NodeTypeReportBeforeSuite | NodeTypeReportAfterSuite | NodeTypeCleanupAfterSuite
var NodeTypesAllowedDuringCleanupInterrupt = NodeTypeAfterEach | NodeTypeJustAfterEach | NodeTypeAfterAll | NodeTypeAfterSuite | NodeTypeSynchronizedAfterSuite | NodeTypeCleanupAfterEach | NodeTypeCleanupAfterAll | NodeTypeCleanupAfterSuite
var NodeTypesAllowedDuringReportInterrupt = NodeTypeReportBeforeEach | NodeTypeReportAfterEach | NodeTypeReportBeforeSuite | NodeTypeReportAfterSuite

var ntEnumSupport = NewEnumSupport(map[uint]string{
	uint(NodeTypeInvalid):                 "INVALID NODE TYPE",
	uint(NodeTypeContainer):               "Container",
	uint(NodeTypeIt):                      "It",
	uint(NodeTypeBeforeEach):              "BeforeEach",
	uint(NodeTypeJustBeforeEach):          "JustBeforeEach",
	uint(NodeTypeAfterEach):               "AfterEach",
	uint(NodeTypeJustAfterEach):           "JustAfterEach",
	uint(NodeTypeBeforeAll):               "BeforeAll",
	uint(NodeTypeAfterAll):                "AfterAll",
	uint(NodeTypeBeforeSuite):             "BeforeSuite",
	uint(NodeTypeSynchronizedBeforeSuite): "SynchronizedBeforeSuite",
	uint(NodeTypeAfterSuite):              "AfterSuite",
	uint(NodeTypeSynchronizedAfterSuite):  "SynchronizedAfterSuite",
	uint(NodeTypeReportBeforeEach):        "ReportBeforeEach",
	uint(NodeTypeReportAfterEach):         "ReportAfterEach",
	uint(NodeTypeReportBeforeSuite):       "ReportBeforeSuite",
	uint(NodeTypeReportAfterSuite):        "ReportAfterSuite",
	uint(NodeTypeCleanupInvalid):          "DeferCleanup",
	uint(NodeTypeCleanupAfterEach):        "DeferCleanup (Each)",
	uint(NodeTypeCleanupAfterAll):         "DeferCleanup (All)",
	uint(NodeTypeCleanupAfterSuite):       "DeferCleanup (Suite)",
})

func (nt NodeType) String() string {
	return ntEnumSupport.String(uint(nt))
}
func (nt *NodeType) UnmarshalJSON(b []byte) error {
	out, err := ntEnumSupport.UnmarshJSON(b)
	*nt = NodeType(out)
	return err
}
func (nt NodeType) MarshalJSON() ([]byte, error) {
	return ntEnumSupport.MarshJSON(uint(nt))
}

func (nt NodeType) Is(nodeTypes NodeType) bool {
	return nt&nodeTypes != 0
}

/*
SpecEvent captures a vareity of events that can occur when specs run.  See SpecEventType for the list of available events.
*/
type SpecEvent struct {
	SpecEventType SpecEventType

	CodeLocation     CodeLocation
	TimelineLocation TimelineLocation

	Message  string        `json:",omitempty"`
	Duration time.Duration `json:",omitempty"`
	NodeType NodeType      `json:",omitempty"`
	Attempt  int           `json:",omitempty"`
}

func (se SpecEvent) GetTimelineLocation() TimelineLocation {
	return se.TimelineLocation
}

func (se SpecEvent) IsOnlyVisibleAtVeryVerbose() bool {
	return se.SpecEventType.Is(SpecEventByEnd | SpecEventNodeStart | SpecEventNodeEnd)
}

func (se SpecEvent) GomegaString() string {
	out := &strings.Builder{}
	out.WriteString("[" + se.SpecEventType.String() + " SpecEvent] ")
	if se.Message != "" {
		out.WriteString("Message=")
		out.WriteString(`"` + se.Message + `",`)
	}
	if se.Duration != 0 {
		out.WriteString("Duration=" + se.Duration.String() + ",")
	}
	if se.NodeType != NodeTypeInvalid {
		out.WriteString("NodeType=" + se.NodeType.String() + ",")
	}
	if se.Attempt != 0 {
		out.WriteString(fmt.Sprintf("Attempt=%d", se.Attempt) + ",")
	}
	out.WriteString("CL=" + se.CodeLocation.String() + ",")
	out.WriteString(fmt.Sprintf("TL.Offset=%d", se.TimelineLocation.Offset))

	return out.String()
}

type SpecEvents []SpecEvent

func (se SpecEvents) WithType(seType SpecEventType) SpecEvents {
	out := SpecEvents{}
	for _, event := range se {
		if event.SpecEventType.Is(seType) {
			out = append(out, event)
		}
	}
	return out
}

type SpecEventType uint

const (
	SpecEventInvalid SpecEventType = 0

	SpecEventByStart SpecEventType = 1 << iota
	SpecEventByEnd
	SpecEventNodeStart
	SpecEventNodeEnd
	SpecEventSpecRepeat
	SpecEventSpecRetry
)

var seEnumSupport = NewEnumSupport(map[uint]string{
	uint(SpecEventInvalid):    "INVALID SPEC EVENT",
	uint(SpecEventByStart):    "By",
	uint(SpecEventByEnd):      "By (End)",
	uint(SpecEventNodeStart):  "Node",
	uint(SpecEventNodeEnd):    "Node (End)",
	uint(SpecEventSpecRepeat): "Repeat",
	uint(SpecEventSpecRetry):  "Retry",
})

func (se SpecEventType) String() string {
	return seEnumSupport.String(uint(se))
}
func (se *SpecEventType) UnmarshalJSON(b []byte) error {
	out, err := seEnumSupport.UnmarshJSON(b)
	*se = SpecEventType(out)
	return err
}
func (se SpecEventType) MarshalJSON() ([]byte, error) {
	return seEnumSupport.MarshJSON(uint(se))
}

func (se SpecEventType) Is(specEventTypes SpecEventType) bool {
	return se&specEventTypes != 0
}
07070100000984000081A4000000000000000000000001645E367C00000027000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/onsi/ginkgo/v2/types/version.go package types

const VERSION = "2.9.2"
 07070100000985000041ED000000000000000000000006645E367C00000000000000000000000000000000000000000000003200000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega 07070100000986000081A4000000000000000000000001645E367C00000033000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/.gitignore  .DS_Store
*.test
.
.idea
gomega.iml
TODO.md
.vscode 07070100000987000081A4000000000000000000000001645E367C00005BC5000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/CHANGELOG.md    ## 1.27.6

### Fixes
- Allow collections matchers to work correctly when expected has nil elements [60e7cf3]

### Maintenance
- updates MatchError godoc comment to also accept a Gomega matcher (#654) [67b869d]

## 1.27.5

### Maintenance
- Bump github.com/onsi/ginkgo/v2 from 2.9.1 to 2.9.2 (#653) [a215021]
- Bump github.com/go-task/slim-sprig (#652) [a26fed8]

## 1.27.4

### Fixes
- improve error formatting and remove duplication of error message in Eventually/Consistently [854f075]

### Maintenance
- Bump github.com/onsi/ginkgo/v2 from 2.9.0 to 2.9.1 (#650) [ccebd9b]

## 1.27.3

### Fixes
- format.Object now always includes err.Error() when passed an error [86d97ef]
- Fix HaveExactElements to work inside ContainElement or other collection matchers (#648) [636757e]

### Maintenance
- Bump github.com/golang/protobuf from 1.5.2 to 1.5.3 (#649) [cc16689]
- Bump github.com/onsi/ginkgo/v2 from 2.8.4 to 2.9.0 (#646) [e783366]

## 1.27.2

### Fixes
- improve poll progress message when polling a consistently that has been passing [28a319b]

### Maintenance
- bump ginkgo
- remove tools.go hack as Ginkgo 2.8.2 automatically pulls in the cli dependencies [81443b3]

## 1.27.1

### Maintenance

- Bump golang.org/x/net from 0.6.0 to 0.7.0 (#640) [bc686cd]

## 1.27.0

### Features
- Add HaveExactElements matcher (#634) [9d50783]
- update Gomega docs to discuss GinkgoHelper() [be32774]

### Maintenance
- Bump github.com/onsi/ginkgo/v2 from 2.8.0 to 2.8.1 (#639) [296a68b]
- Bump golang.org/x/net from 0.5.0 to 0.6.0 (#638) [c2b098b]
- Bump github-pages from 227 to 228 in /docs (#636) [a9069ab]
- test: update matrix for Go 1.20 (#635) [6bd25c8]
- Bump github.com/onsi/ginkgo/v2 from 2.7.0 to 2.8.0 (#631) [5445f8b]
- Bump webrick from 1.7.0 to 1.8.1 in /docs (#630) [03e93bb]
- codeql: add ruby language (#626) [63c7d21]
- dependabot: add bundler package-ecosystem for docs (#625) [d92f963]

## 1.26.0

### Features
- When a polled function returns an error, keep track of the actual and report on the matcher state of the last non-errored actual [21f3090]
- improve eventually failure message output [c530fb3]

### Fixes
- fix several documentation spelling issues [e2eff1f]


## 1.25.0

### Features
- add `MustPassRepeatedly(int)` to asyncAssertion (#619) [4509f72]
- compare unwrapped errors using DeepEqual (#617) [aaeaa5d]

### Maintenance
- Bump golang.org/x/net from 0.4.0 to 0.5.0 (#614) [c7cfea4]
- Bump github.com/onsi/ginkgo/v2 from 2.6.1 to 2.7.0 (#615) [71b8adb]
- Docs: Fix typo "MUltiple" -> "Multiple" (#616) [9351dda]
- clean up go.sum [cd1dc1d]

## 1.24.2

### Fixes
- Correctly handle assertion failure panics for eventually/consistnetly "g Gomega"s in a goroutine [78f1660]
- docs:Fix typo "you an" -> "you can" (#607) [3187c1f]
- fixes issue #600 (#606) [808d192]

### Maintenance
- Bump golang.org/x/net from 0.2.0 to 0.4.0 (#611) [6ebc0bf]
- Bump nokogiri from 1.13.9 to 1.13.10 in /docs (#612) [258cfc8]
- Bump github.com/onsi/ginkgo/v2 from 2.5.0 to 2.5.1 (#609) [e6c3eb9]

## 1.24.1

### Fixes
- maintain backward compatibility for Eventually and Consisntetly's signatures [4c7df5e]
- fix small typo (#601) [ea0ebe6]

### Maintenance
- Bump golang.org/x/net from 0.1.0 to 0.2.0 (#603) [1ba8372]
- Bump github.com/onsi/ginkgo/v2 from 2.4.0 to 2.5.0 (#602) [f9426cb]
- fix label-filter in test.yml [d795db6]
- stop running flakey tests and rely on external network dependencies in CI [7133290]

## 1.24.0

### Features

Introducting [gcustom](https://onsi.github.io/gomega/#gcustom-a-convenient-mechanism-for-buildling-custom-matchers) - a convenient mechanism for building custom matchers.

This is an RC release for `gcustom`.  The external API may be tweaked in response to feedback however it is expected to remain mostly stable.

### Maintenance

- Update BeComparableTo documentation [756eaa0]

## 1.23.0

### Features
- Custom formatting on a per-type basis can be provided using `format.RegisterCustomFormatter()` -- see the docs [here](https://onsi.github.io/gomega/#adjusting-output)

- Substantial improvement have been made to `StopTrying()`:
  - Users can now use `StopTrying().Wrap(err)` to wrap errors and `StopTrying().Attach(description, object)` to attach arbitrary objects to the `StopTrying()` error
  - `StopTrying()` is now always interpreted as a failure.  If you are an early adopter of `StopTrying()` you may need to change your code as the prior version would match against the returned value even if `StopTrying()` was returned.  Going forward the `StopTrying()` api should remain stable.
  - `StopTrying()` and `StopTrying().Now()` can both be used in matchers - not just polled functions.

- `TryAgainAfter(duration)` is used like `StopTrying()` but instructs `Eventually` and `Consistently` that the poll should be tried again after the specified duration.  This allows you to dynamically adjust the polling duration.

- `ctx` can now be passed-in as the first argument to `Eventually` and `Consistently`.

## Maintenance

- Bump github.com/onsi/ginkgo/v2 from 2.3.0 to 2.3.1 (#597) [afed901]
- Bump nokogiri from 1.13.8 to 1.13.9 in /docs (#599) [7c691b3]
- Bump github.com/google/go-cmp from 0.5.8 to 0.5.9 (#587) [ff22665]

## 1.22.1

## Fixes
- When passed a context and no explicit timeout, Eventually will only timeout when the context is cancelled [e5105cf]
- Allow StopTrying() to be wrapped [bf3cba9]

## Maintenance
- bump to ginkgo v2.3.0 [c5d5c39]

## 1.22.0

### Features

Several improvements have been made to `Eventually` and `Consistently` in this and the most recent releases:

- Eventually and Consistently can take a context.Context [65c01bc]
  This enables integration with Ginkgo 2.3.0's interruptible nodes and node timeouts.
- Eventually and Consistently that are passed a SpecContext can provide reports when an interrupt occurs [0d063c9]
- Eventually/Consistently will forward an attached context to functions that ask for one [e2091c5]
- Eventually/Consistently supports passing arguments to functions via WithArguments() [a2dc7c3]
- Eventually and Consistently can now be stopped early with StopTrying(message) and StopTrying(message).Now() [52976bb]

These improvements are all documented in [Gomega's docs](https://onsi.github.io/gomega/#making-asynchronous-assertions)

## Fixes

## Maintenance

## 1.21.1

### Features
- Eventually and Consistently that are passed a SpecContext can provide reports when an interrupt occurs [0d063c9]

## 1.21.0

### Features
- Eventually and Consistently can take a context.Context [65c01bc]
  This enables integration with Ginkgo 2.3.0's interruptible nodes and node timeouts.
- Introduces Eventually.Within.ProbeEvery with tests and documentation (#591) [f633800]
- New BeKeyOf matcher with documentation and unit tests (#590) [fb586b3]
    
## Fixes
- Cover the entire gmeasure suite with leak detection [8c54344]
- Fix gmeasure leak [119d4ce]
- Ignore new Ginkgo ProgressSignal goroutine in gleak [ba548e2]

## Maintenance

- Fixes crashes on newer Ruby 3 installations by upgrading github-pages gem dependency (#596) [12469a0]


## 1.20.2

## Fixes
- label specs that rely on remote access; bump timeout on short-circuit test to make it less flaky [35eeadf]
- gexec: allow more headroom for SIGABRT-related unit tests (#581) [5b78f40]
- Enable reading from a closed gbytes.Buffer (#575) [061fd26]

## Maintenance
- Bump github.com/onsi/ginkgo/v2 from 2.1.5 to 2.1.6 (#583) [55d895b]
- Bump github.com/onsi/ginkgo/v2 from 2.1.4 to 2.1.5 (#582) [346de7c]

## 1.20.1

## Fixes
- fix false positive gleaks when using ginkgo -p (#577) [cb46517]
- Fix typos in gomega_dsl.go (#569) [5f71ed2]
- don't panic on Eventually(nil), fixing #555 (#567) [9d1186f]
- vet optional description args in assertions, fixing #560 (#566) [8e37808]

## Maintenance
- test: add new Go 1.19 to test matrix (#571) [40d7efe]
- Bump tzinfo from 1.2.9 to 1.2.10 in /docs (#564) [5f26371]

## 1.20.0

## Features
- New [`gleak`](https://onsi.github.io/gomega/#codegleakcode-finding-leaked-goroutines) experimental goroutine leak detection package! (#538) [85ba7bc]
- New `BeComparableTo` matcher(#546) that uses `gocmp` to make comparisons [e77ea75]
- New `HaveExistingField` matcher (#553) [fd130e1]
- Document how to wrap Gomega (#539) [56714a4]

## Fixes
- Support pointer receivers in HaveField; fixes #543 (#544) [8dab36e]

## Maintenance
- Bump various dependencies:
    - Upgrade to yaml.v3 (#556) [f5a83b1]
    - Bump github/codeql-action from 1 to 2 (#549) [52f5adf]
    - Bump github.com/google/go-cmp from 0.5.7 to 0.5.8 (#551) [5f3942d]
    - Bump nokogiri from 1.13.4 to 1.13.6 in /docs (#554) [eb4b4c2]
    - Use latest ginkgo (#535) [1c29028]
    - Bump nokogiri from 1.13.3 to 1.13.4 in /docs (#541) [1ce84d5]
    - Bump actions/setup-go from 2 to 3 (#540) [755485e]
    - Bump nokogiri from 1.12.5 to 1.13.3 in /docs (#522) [4fbb0dc]
    - Bump actions/checkout from 2 to 3 (#526) [ac49202]

## 1.19.0

## Features
- New [`HaveEach`](https://onsi.github.io/gomega/#haveeachelement-interface) matcher to ensure that each and every element in an `array`, `slice`, or `map` satisfies the passed in matcher. (#523) [9fc2ae2] (#524) [c8ba582]
- Users can now wrap the `Gomega` interface to implement custom behavior on each assertion. (#521) [1f2e714]
- [`ContainElement`](https://onsi.github.io/gomega/#containelementelement-interface) now accepts an additional pointer argument.  Elements that satisfy the matcher are stored in the pointer enabling developers to easily add subsequent, more detailed, assertions against the matching element. (#527) [1a4e27f]

## Fixes
- update RELEASING instructions to match ginkgo [0917cde]
- Bump github.com/onsi/ginkgo/v2 from 2.0.0 to 2.1.3 (#519) [49ab4b0]
- Fix CVE-2021-38561 (#534) [f1b4456]
- Fix max number of samples in experiments on non-64-bit systems. (#528) [1c84497]
- Remove dependency on ginkgo v1.16.4 (#530) [4dea8d5]
- Fix for Go 1.18 (#532) [56d2a29]
- Document precendence of timeouts (#533) [b607941]

## 1.18.1

## Fixes
- Add pointer support to HaveField matcher (#495) [79e41a3]

## 1.18.0

## Features
- Docs now live on the master branch in the docs folder which will make for easier PRs.  The docs also use Ginkgo 2.0's new docs html/css/js. [2570272]
- New HaveValue matcher can handle actuals that are either values (in which case they are passed on unscathed) or pointers (in which case they are indirected).  [Docs here.](https://onsi.github.io/gomega/#working-with-values) (#485) [bdc087c]
- Gmeasure has been declared GA [360db9d]

## Fixes
- Gomega now uses ioutil for Go 1.15 and lower (#492) - official support is only for the most recent two major versions of Go but this will unblock users who need to stay on older unsupported versions of Go. [c29c1c0]

## Maintenace
- Remove Travis workflow (#491) [72e6040]
- Upgrade to Ginkgo 2.0.0 GA [f383637]
- chore: fix description of HaveField matcher (#487) [2b4b2c0]
- use tools.go to ensure Ginkgo cli dependencies are included [f58a52b]
- remove dockerfile and simplify github actions to match ginkgo's actions [3f8160d]

## 1.17.0

### Features
- Add HaveField matcher [3a26311]
- add Error() assertions on the final error value of multi-return values (#480) [2f96943]
- separate out offsets and timeouts (#478) [18a4723]
- fix transformation error reporting (#479) [e001fab]
- allow transform functions to report errors (#472) [bf93408]

### Fixes
Stop using deprecated ioutil package (#467) [07f405d]

## 1.16.0

### Features
- feat: HaveHTTPStatus multiple expected values (#465) [aa69f1b]
- feat: HaveHTTPHeaderWithValue() matcher (#463) [dd83a96]
- feat: HaveHTTPBody matcher (#462) [504e1f2]
- feat: formatter for HTTP responses (#461) [e5b3157]

## 1.15.0

### Fixes
The previous version (1.14.0) introduced a change to allow `Eventually` and `Consistently` to support functions that make assertions.  This was accomplished by overriding the global fail handler when running the callbacks passed to `Eventually/Consistently` in order to capture any resulting errors.  Issue #457 uncovered a flaw with this approach: when multiple `Eventually`s are running concurrently they race when overriding the singleton global fail handler.

1.15.0 resolves this by requiring users who want to make assertions in `Eventually/Consistently` call backs to explicitly pass in a function that takes a `Gomega` as an argument.  The passed-in `Gomega` instance can be used to make assertions.  Any failures will cause `Eventually` to retry the callback.  This cleaner interface avoids the issue of swapping out globals but comes at the cost of changing the contract introduced in v1.14.0.  As such 1.15.0 introduces a breaking change with respect to 1.14.0 - however we expect that adoption of this feature in 1.14.0 remains limited.

In addition, 1.15.0 cleans up some of Gomega's internals.  Most users shouldn't notice any differences stemming from the refactoring that was made.

## 1.14.0

### Features
- gmeasure.SamplingConfig now suppers a MinSamplingInterval [e94dbca]
- Eventually and Consistently support functions that make assertions [2f04e6e]
    - Eventually and Consistently now allow their passed-in functions to make assertions.
    These assertions must pass or the function is considered to have failed and is retried.
    - Eventually and Consistently can now take functions with no return values.  These implicitly return nil
    if they contain no failed assertion.  Otherwise they return an error wrapping the first assertion failure.  This allows
    these functions to be used with the Succeed() matcher.
    - Introduce InterceptGomegaFailure - an analogue to InterceptGomegaFailures - that captures the first assertion failure
    and halts execution in its passed-in callback.

### Fixes
- Call Verify GHTTPWithGomega receiver funcs (#454) [496e6fd]
- Build a binary with an expected name (#446) [7356360]

## 1.13.0

### Features
- gmeasure provides BETA support for benchmarking (#447) [8f2dfbf]
- Set consistently and eventually defaults on init (#443) [12eb778]

## 1.12.0

### Features
- Add Satisfy() matcher (#437) [c548f31]
- tweak truncation message [3360b8c]
- Add format.GomegaStringer (#427) [cc80b6f]
- Add Clear() method to gbytes.Buffer [c3c0920]

### Fixes
- Fix error message in BeNumericallyMatcher (#432) [09c074a]
- Bump github.com/onsi/ginkgo from 1.12.1 to 1.16.2 (#442) [e5f6ea0]
- Bump github.com/golang/protobuf from 1.4.3 to 1.5.2 (#431) [adae3bf]
- Bump golang.org/x/net (#441) [3275b35]

## 1.11.0

### Features
- feature: add index to gstruct element func (#419) [334e00d]
- feat(gexec) Add CompileTest functions. Close #410 (#411) [47c613f]

### Fixes
- Check more carefully for nils in WithTransform (#423) [3c60a15]
- fix: typo in Makefile [b82522a]
- Allow WithTransform function to accept a nil value (#422) [b75d2f2]
- fix: print value type for interface{} containers (#409) [f08e2dc]
- fix(BeElementOf): consistently flatten expected values [1fa9468]

## 1.10.5

### Fixes
- fix: collections matchers should display type of expectation (#408) [6b4eb5a]
- fix(ContainElements): consistently flatten expected values [073b880]
- fix(ConsistOf): consistently flatten expected values [7266efe]

## 1.10.4

### Fixes
- update golang net library to more recent version without vulnerability (#406) [817a8b9]
- Correct spelling: alloted -> allotted (#403) [0bae715]
- fix a panic in MessageWithDiff with long message (#402) [ea06b9b]

## 1.10.3

### Fixes
- updates golang/x/net to fix vulnerability detected by snyk (#394) [c479356]

## 1.10.2

### Fixes
- Add ExpectWithOffset, EventuallyWithOffset and ConsistentlyWithOffset to WithT (#391) [990941a]

## 1.10.1

### Fixes
- Update dependencies (#389) [9f5eecd]

## 1.10.0

### Features
- Add HaveHTTPStatusMatcher (#378) [f335c94]
- Changed matcher for content-type in VerifyJSONRepresenting (#377) [6024f5b]
- Make ghttp usable with x-unit style tests (#376) [c0be499]
- Implement PanicWith matcher (#381) [f8032b4]

## 1.9.0

### Features
- Add ContainElements matcher (#370) [2f57380]
- Output missing and extra elements in ConsistOf failure message [a31eda7]
- Document method LargestMatching [7c5a280]

## 1.8.1

### Fixes
- Fix unexpected MatchError() behaviour (#375) [8ae7b2f]

## 1.8.0

### Features
- Allow optional description to be lazily evaluated function (#364) [bf64010]
- Support wrapped errors (#359) [0a981cb]

## 1.7.1

### Fixes
- Bump go-yaml version to cover fixed ddos heuristic (#362) [95e431e]

## 1.7.0

### Features
- export format property variables (#347) [642e5ba]

### Fixes
- minor fix in the documentation of ExpectWithOffset (#358) [beea727]

## 1.6.0

### Features

- Display special chars on error [41e1b26]
- Add BeElementOf matcher [6a48b48]

### Fixes

- Remove duplication in XML matcher tests [cc1a6cb]
- Remove unnecessary conversions (#357) [7bf756a]
- Fixed import order (#353) [2e3b965]
- Added missing error handling in test (#355) [c98d3eb]
- Simplify code (#356) [0001ed9]
- Simplify code (#354) [0d9100e]
- Fixed typos (#352) [3f647c4]
- Add failure message tests to BeElementOf matcher [efe19c3]
- Update go-testcov untested sections [37ee382]
- Mark all uncovered files so go-testcov ./... works [53b150e]
- Reenable gotip in travis [5c249dc]
- Fix the typo of comment (#345) [f0e010e]
- Optimize contain_element_matcher [abeb93d]


## 1.5.0

### Features

- Added MatchKeys matchers [8b909fc]

### Fixes and Minor Improvements

- Add type aliases to remove stuttering [03b0461]
- Don't run session_test.go on windows (#324) [5533ce8]

## 1.4.3

### Fixes:

- ensure file name and line numbers are correctly reported for XUnit [6fff58f]
- Fixed matcher for content-type (#305) [69d9b43]

## 1.4.2

### Fixes:

- Add go.mod and go.sum files to define the gomega go module [f3de367, a085d30]
- Work around go vet issue with Go v1.11 (#300) [40dd6ad]
- Better output when using with go XUnit-style tests, fixes #255 (#297) [29a4b97]
- Fix MatchJSON fail to parse json.RawMessage (#298) [ae19f1b]
- show threshold in failure message of BeNumericallyMatcher (#293) [4bbecc8]

## 1.4.1

### Fixes:

- Update documentation formatting and examples (#289) [9be8410]
- allow 'Receive' matcher to be used with concrete types (#286) [41673fd]
- Fix data race in ghttp server (#283) [7ac6b01]
- Travis badge should only show master [cc102ab]

## 1.4.0

### Features
- Make string pretty diff user configurable (#273) [eb112ce, 649b44d]

### Fixes
- Use httputil.DumpRequest to pretty-print unhandled requests (#278) [a4ff0fc, b7d1a52]
- fix typo floa32 > float32 (#272) [041ae3b, 6e33911]
- Fix link to documentation on adding your own matchers (#270) [bb2c830, fcebc62]
- Use setters and getters to avoid race condition (#262) [13057c3, a9c79f1]
- Avoid sending a signal if the process is not alive (#259) [b8043e5, 4fc1762]
- Improve message from AssignableToTypeOf when expected value is nil (#281) [9c1fb20]

## 1.3.0

Improvements:

- The `Equal` matcher matches byte slices more performantly.
- Improved how `MatchError` matches error strings.
- `MatchXML` ignores the order of xml node attributes.
- Improve support for XUnit style golang tests. ([#254](https://github.com/onsi/gomega/issues/254))

Bug Fixes:

- Diff generation now handles multi-byte sequences correctly.
- Multiple goroutines can now call `gexec.Build` concurrently.

## 1.2.0

Improvements:

- Added `BeSent` which attempts to send a value down a channel and fails if the attempt blocks.  Can be paired with `Eventually` to safely send a value down a channel with a timeout.
- `Ω`, `Expect`, `Eventually`, and `Consistently` now immediately `panic` if there is no registered fail handler.  This is always a mistake that can hide failing tests.
- `Receive()` no longer errors when passed a closed channel, it's perfectly fine to attempt to read from a closed channel so Ω(c).Should(Receive()) always fails and Ω(c).ShoudlNot(Receive()) always passes with a closed channel.
- Added `HavePrefix` and `HaveSuffix` matchers.
- `ghttp` can now handle concurrent requests.
- Added `Succeed` which allows one to write `Ω(MyFunction()).Should(Succeed())`.
- Improved `ghttp`'s behavior around failing assertions and panics:
    - If a registered handler makes a failing assertion `ghttp` will return `500`.
    - If a registered handler panics, `ghttp` will return `500` *and* fail the test.  This is new behavior that may cause existing code to break.  This code is almost certainly incorrect and creating a false positive.
- `ghttp` servers can take an `io.Writer`.  `ghttp` will write a line to the writer when each request arrives.
- Added `WithTransform` matcher to allow munging input data before feeding into the relevant matcher
- Added boolean `And`, `Or`, and `Not` matchers to allow creating composite matchers
- Added `gbytes.TimeoutCloser`, `gbytes.TimeoutReader`, and `gbytes.TimeoutWriter` - these are convenience wrappers that timeout if the underlying Closer/Reader/Writer does not return within the alloted time.
- Added `gbytes.BufferReader` - this constructs a `gbytes.Buffer` that asynchronously reads the passed-in `io.Reader` into its buffer.

Bug Fixes:
- gexec: `session.Wait` now uses `EventuallyWithOffset` to get the right line number in the failure.
- `ContainElement` no longer bails if a passed-in matcher errors.

## 1.0 (8/2/2014)

No changes. Dropping "beta" from the version number.

## 1.0.0-beta (7/8/2014)
Breaking Changes:

- Changed OmegaMatcher interface.  Instead of having `Match` return failure messages, two new methods `FailureMessage` and `NegatedFailureMessage` are called instead.
- Moved and renamed OmegaFailHandler to types.GomegaFailHandler and OmegaMatcher to types.GomegaMatcher.  Any references to OmegaMatcher in any custom matchers will need to be changed to point to types.GomegaMatcher

New Test-Support Features:

- `ghttp`: supports testing http clients
    - Provides a flexible fake http server
    - Provides a collection of chainable http handlers that perform assertions.
- `gbytes`: supports making ordered assertions against streams of data
    - Provides a `gbytes.Buffer`
    - Provides a `Say` matcher to perform ordered assertions against output data
- `gexec`: supports testing external processes
    - Provides support for building Go binaries
    - Wraps and starts `exec.Cmd` commands
    - Makes it easy to assert against stdout and stderr
    - Makes it easy to send signals and wait for processes to exit
    - Provides an `Exit` matcher to assert against exit code.

DSL Changes:

- `Eventually` and `Consistently` can accept `time.Duration` interval and polling inputs.
- The default timeouts for `Eventually` and `Consistently` are now configurable.

New Matchers:

- `ConsistOf`: order-independent assertion against the elements of an array/slice or keys of a map.
- `BeTemporally`: like `BeNumerically` but for `time.Time`
- `HaveKeyWithValue`: asserts a map has a given key with the given value.

Updated Matchers:

- `Receive` matcher can take a matcher as an argument and passes only if the channel under test receives an objet that satisfies the passed-in matcher.
- Matchers that implement `MatchMayChangeInTheFuture(actual interface{}) bool` can inform `Eventually` and/or `Consistently` when a match has no chance of changing status in the future.  For example, `Receive` returns `false` when a channel is closed.

Misc:

- Start using semantic versioning
- Start maintaining changelog

Major refactor:

- Pull out Gomega's internal to `internal`
   07070100000988000081A4000000000000000000000001645E367C0000039F000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/CONTRIBUTING.md # Contributing to Gomega

Your contributions to Gomega are essential for its long-term maintenance and improvement.  To make a contribution:

- Please **open an issue first** - describe what problem you are trying to solve and give the community a forum for input and feedback ahead of investing time in writing code!
- Ensure adequate test coverage:
    - Make sure to add appropriate unit tests
    - Please run all tests locally (`ginkgo -r -p`) and make sure they go green before submitting the PR
    - Please run following linter locally `go vet ./...` and make sure output does not contain any warnings
- Update the documentation.  In addition to standard `godoc` comments Gomega has extensive documentation on the `gh-pages` branch.  If relevant, please submit a docs PR to that branch alongside your code PR.

If you're a committer, check out RELEASING.md to learn how to cut a release.

Thanks for supporting Gomega!
 07070100000989000081A4000000000000000000000001645E367C00000426000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/LICENSE Copyright (c) 2013-2014 Onsi Fakhouri

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  0707010000098A000081A4000000000000000000000001645E367C000003CD000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/README.md   ![Gomega: Ginkgo's Preferred Matcher Library](http://onsi.github.io/gomega/images/gomega.png)

[![test](https://github.com/onsi/gomega/actions/workflows/test.yml/badge.svg)](https://github.com/onsi/gomega/actions/workflows/test.yml)

Jump straight to the [docs](http://onsi.github.io/gomega/) to learn about Gomega, including a list of [all available matchers](http://onsi.github.io/gomega/#provided-matchers).

If you have a question, comment, bug report, feature request, etc. please open a GitHub issue.

## [Ginkgo](http://github.com/onsi/ginkgo): a BDD Testing Framework for Golang

Learn more about Ginkgo [here](http://onsi.github.io/ginkgo/)

## Community Matchers

A collection of community matchers is available on the [wiki](https://github.com/onsi/gomega/wiki).

## License

Gomega is MIT-Licensed

The `ConsistOf` matcher uses [goraph](https://github.com/amitkgupta/goraph) which is embedded in the source to simplify distribution.  goraph has an MIT license.
   0707010000098B000081A4000000000000000000000001645E367C00000358000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/RELEASING.md    A Gomega release is a tagged sha and a GitHub release.  To cut a release:

1. Ensure CHANGELOG.md is up to date.
  - Use 
    ```bash
    LAST_VERSION=$(git tag --sort=version:refname | tail -n1)
    CHANGES=$(git log --pretty=format:'- %s [%h]' HEAD...$LAST_VERSION)
    echo -e "## NEXT\n\n$CHANGES\n\n### Features\n\n### Fixes\n\n### Maintenance\n\n$(cat CHANGELOG.md)" > CHANGELOG.md
    ```
   to update the changelog
  - Categorize the changes into
    - Breaking Changes (requires a major version)
    - New Features (minor version)
    - Fixes (fix version)
    - Maintenance (which in general should not be mentioned in `CHANGELOG.md` as they have no user impact)
1. Update GOMEGA_VERSION in `gomega_dsl.go`
1. Commit, push, and release:
  ```
  git commit -m "vM.m.p"
  git push
  gh release create "vM.m.p"
  git fetch --tags origin master
  ```0707010000098C000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/format  0707010000098D000081A4000000000000000000000001645E367C000039E1000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/format/format.go    /*
Gomega's format package pretty-prints objects.  It explores input objects recursively and generates formatted, indented output with type information.
*/

// untested sections: 4

package format

import (
	"context"
	"fmt"
	"reflect"
	"strconv"
	"strings"
	"time"
)

// Use MaxDepth to set the maximum recursion depth when printing deeply nested objects
var MaxDepth = uint(10)

// MaxLength of the string representation of an object.
// If MaxLength is set to 0, the Object will not be truncated.
var MaxLength = 4000

/*
By default, all objects (even those that implement fmt.Stringer and fmt.GoStringer) are recursively inspected to generate output.

Set UseStringerRepresentation = true to use GoString (for fmt.GoStringers) or String (for fmt.Stringer) instead.

Note that GoString and String don't always have all the information you need to understand why a test failed!
*/
var UseStringerRepresentation = false

/*
Print the content of context objects. By default it will be suppressed.

Set PrintContextObjects = true to enable printing of the context internals.
*/
var PrintContextObjects = false

// TruncatedDiff choose if we should display a truncated pretty diff or not
var TruncatedDiff = true

// TruncateThreshold (default 50) specifies the maximum length string to print in string comparison assertion error
// messages.
var TruncateThreshold uint = 50

// CharactersAroundMismatchToInclude (default 5) specifies how many contextual characters should be printed before and
// after the first diff location in a truncated string assertion error message.
var CharactersAroundMismatchToInclude uint = 5

var contextType = reflect.TypeOf((*context.Context)(nil)).Elem()
var timeType = reflect.TypeOf(time.Time{})

// The default indentation string emitted by the format package
var Indent = "    "

var longFormThreshold = 20

// GomegaStringer allows for custom formating of objects for gomega.
type GomegaStringer interface {
	// GomegaString will be used to custom format an object.
	// It does not follow UseStringerRepresentation value and will always be called regardless.
	// It also ignores the MaxLength value.
	GomegaString() string
}

/*
CustomFormatters can be registered with Gomega via RegisterCustomFormatter()
Any value to be rendered by Gomega is passed to each registered CustomFormatters.
The CustomFormatter signals that it will handle formatting the value by returning (formatted-string, true)
If the CustomFormatter does not want to handle the object it should return ("", false)

Strings returned by CustomFormatters are not truncated
*/
type CustomFormatter func(value interface{}) (string, bool)
type CustomFormatterKey uint

var customFormatterKey CustomFormatterKey = 1

type customFormatterKeyPair struct {
	CustomFormatter
	CustomFormatterKey
}

/*
RegisterCustomFormatter registers a CustomFormatter and returns a CustomFormatterKey

You can call UnregisterCustomFormatter with the returned key to unregister the associated CustomFormatter
*/
func RegisterCustomFormatter(customFormatter CustomFormatter) CustomFormatterKey {
	key := customFormatterKey
	customFormatterKey += 1
	customFormatters = append(customFormatters, customFormatterKeyPair{customFormatter, key})
	return key
}

/*
UnregisterCustomFormatter unregisters a previously registered CustomFormatter.  You should pass in the key returned by RegisterCustomFormatter
*/
func UnregisterCustomFormatter(key CustomFormatterKey) {
	formatters := []customFormatterKeyPair{}
	for _, f := range customFormatters {
		if f.CustomFormatterKey == key {
			continue
		}
		formatters = append(formatters, f)
	}
	customFormatters = formatters
}

var customFormatters = []customFormatterKeyPair{}

/*
Generates a formatted matcher success/failure message of the form:

	Expected
		<pretty printed actual>
	<message>
		<pretty printed expected>

If expected is omitted, then the message looks like:

	Expected
		<pretty printed actual>
	<message>
*/
func Message(actual interface{}, message string, expected ...interface{}) string {
	if len(expected) == 0 {
		return fmt.Sprintf("Expected\n%s\n%s", Object(actual, 1), message)
	}
	return fmt.Sprintf("Expected\n%s\n%s\n%s", Object(actual, 1), message, Object(expected[0], 1))
}

/*

Generates a nicely formatted matcher success / failure message

Much like Message(...), but it attempts to pretty print diffs in strings

Expected
    <string>: "...aaaaabaaaaa..."
to equal               |
    <string>: "...aaaaazaaaaa..."

*/

func MessageWithDiff(actual, message, expected string) string {
	if TruncatedDiff && len(actual) >= int(TruncateThreshold) && len(expected) >= int(TruncateThreshold) {
		diffPoint := findFirstMismatch(actual, expected)
		formattedActual := truncateAndFormat(actual, diffPoint)
		formattedExpected := truncateAndFormat(expected, diffPoint)

		spacesBeforeFormattedMismatch := findFirstMismatch(formattedActual, formattedExpected)

		tabLength := 4
		spaceFromMessageToActual := tabLength + len("<string>: ") - len(message)

		paddingCount := spaceFromMessageToActual + spacesBeforeFormattedMismatch
		if paddingCount < 0 {
			return Message(formattedActual, message, formattedExpected)
		}

		padding := strings.Repeat(" ", paddingCount) + "|"
		return Message(formattedActual, message+padding, formattedExpected)
	}

	actual = escapedWithGoSyntax(actual)
	expected = escapedWithGoSyntax(expected)

	return Message(actual, message, expected)
}

func escapedWithGoSyntax(str string) string {
	withQuotes := fmt.Sprintf("%q", str)
	return withQuotes[1 : len(withQuotes)-1]
}

func truncateAndFormat(str string, index int) string {
	leftPadding := `...`
	rightPadding := `...`

	start := index - int(CharactersAroundMismatchToInclude)
	if start < 0 {
		start = 0
		leftPadding = ""
	}

	// slice index must include the mis-matched character
	lengthOfMismatchedCharacter := 1
	end := index + int(CharactersAroundMismatchToInclude) + lengthOfMismatchedCharacter
	if end > len(str) {
		end = len(str)
		rightPadding = ""

	}
	return fmt.Sprintf("\"%s\"", leftPadding+str[start:end]+rightPadding)
}

func findFirstMismatch(a, b string) int {
	aSlice := strings.Split(a, "")
	bSlice := strings.Split(b, "")

	for index, str := range aSlice {
		if index > len(bSlice)-1 {
			return index
		}
		if str != bSlice[index] {
			return index
		}
	}

	if len(b) > len(a) {
		return len(a) + 1
	}

	return 0
}

const truncateHelpText = `
Gomega truncated this representation as it exceeds 'format.MaxLength'.
Consider having the object provide a custom 'GomegaStringer' representation
or adjust the parameters in Gomega's 'format' package.

Learn more here: https://onsi.github.io/gomega/#adjusting-output
`

func truncateLongStrings(s string) string {
	if MaxLength > 0 && len(s) > MaxLength {
		var sb strings.Builder
		for i, r := range s {
			if i < MaxLength {
				sb.WriteRune(r)
				continue
			}
			break
		}

		sb.WriteString("...\n")
		sb.WriteString(truncateHelpText)

		return sb.String()
	}
	return s
}

/*
Pretty prints the passed in object at the passed in indentation level.

Object recurses into deeply nested objects emitting pretty-printed representations of their components.

Modify format.MaxDepth to control how deep the recursion is allowed to go
Set format.UseStringerRepresentation to true to return object.GoString() or object.String() when available instead of
recursing into the object.

Set PrintContextObjects to true to print the content of objects implementing context.Context
*/
func Object(object interface{}, indentation uint) string {
	indent := strings.Repeat(Indent, int(indentation))
	value := reflect.ValueOf(object)
	commonRepresentation := ""
	if err, ok := object.(error); ok {
		commonRepresentation += "\n" + IndentString(err.Error(), indentation) + "\n" + indent
	}
	return fmt.Sprintf("%s<%s>: %s%s", indent, formatType(value), commonRepresentation, formatValue(value, indentation))
}

/*
IndentString takes a string and indents each line by the specified amount.
*/
func IndentString(s string, indentation uint) string {
	return indentString(s, indentation, true)
}

func indentString(s string, indentation uint, indentFirstLine bool) string {
	result := &strings.Builder{}
	components := strings.Split(s, "\n")
	indent := strings.Repeat(Indent, int(indentation))
	for i, component := range components {
		if i > 0 || indentFirstLine {
			result.WriteString(indent)
		}
		result.WriteString(component)
		if i < len(components)-1 {
			result.WriteString("\n")
		}
	}

	return result.String()
}

func formatType(v reflect.Value) string {
	switch v.Kind() {
	case reflect.Invalid:
		return "nil"
	case reflect.Chan:
		return fmt.Sprintf("%s | len:%d, cap:%d", v.Type(), v.Len(), v.Cap())
	case reflect.Ptr:
		return fmt.Sprintf("%s | 0x%x", v.Type(), v.Pointer())
	case reflect.Slice:
		return fmt.Sprintf("%s | len:%d, cap:%d", v.Type(), v.Len(), v.Cap())
	case reflect.Map:
		return fmt.Sprintf("%s | len:%d", v.Type(), v.Len())
	default:
		return fmt.Sprintf("%s", v.Type())
	}
}

func formatValue(value reflect.Value, indentation uint) string {
	if indentation > MaxDepth {
		return "..."
	}

	if isNilValue(value) {
		return "nil"
	}

	if value.CanInterface() {
		obj := value.Interface()

		// if a CustomFormatter handles this values, we'll go with that
		for _, customFormatter := range customFormatters {
			formatted, handled := customFormatter.CustomFormatter(obj)
			// do not truncate a user-provided CustomFormatter()
			if handled {
				return indentString(formatted, indentation+1, false)
			}
		}

		// GomegaStringer will take precedence to other representations and disregards UseStringerRepresentation
		if x, ok := obj.(GomegaStringer); ok {
			// do not truncate a user-defined GomegaString() value
			return indentString(x.GomegaString(), indentation+1, false)
		}

		if UseStringerRepresentation {
			switch x := obj.(type) {
			case fmt.GoStringer:
				return indentString(truncateLongStrings(x.GoString()), indentation+1, false)
			case fmt.Stringer:
				return indentString(truncateLongStrings(x.String()), indentation+1, false)
			}
		}
	}

	if !PrintContextObjects {
		if value.Type().Implements(contextType) && indentation > 1 {
			return "<suppressed context>"
		}
	}

	switch value.Kind() {
	case reflect.Bool:
		return fmt.Sprintf("%v", value.Bool())
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		return fmt.Sprintf("%v", value.Int())
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
		return fmt.Sprintf("%v", value.Uint())
	case reflect.Uintptr:
		return fmt.Sprintf("0x%x", value.Uint())
	case reflect.Float32, reflect.Float64:
		return fmt.Sprintf("%v", value.Float())
	case reflect.Complex64, reflect.Complex128:
		return fmt.Sprintf("%v", value.Complex())
	case reflect.Chan:
		return fmt.Sprintf("0x%x", value.Pointer())
	case reflect.Func:
		return fmt.Sprintf("0x%x", value.Pointer())
	case reflect.Ptr:
		return formatValue(value.Elem(), indentation)
	case reflect.Slice:
		return truncateLongStrings(formatSlice(value, indentation))
	case reflect.String:
		return truncateLongStrings(formatString(value.String(), indentation))
	case reflect.Array:
		return truncateLongStrings(formatSlice(value, indentation))
	case reflect.Map:
		return truncateLongStrings(formatMap(value, indentation))
	case reflect.Struct:
		if value.Type() == timeType && value.CanInterface() {
			t, _ := value.Interface().(time.Time)
			return t.Format(time.RFC3339Nano)
		}
		return truncateLongStrings(formatStruct(value, indentation))
	case reflect.Interface:
		return formatInterface(value, indentation)
	default:
		if value.CanInterface() {
			return truncateLongStrings(fmt.Sprintf("%#v", value.Interface()))
		}
		return truncateLongStrings(fmt.Sprintf("%#v", value))
	}
}

func formatString(object interface{}, indentation uint) string {
	if indentation == 1 {
		s := fmt.Sprintf("%s", object)
		components := strings.Split(s, "\n")
		result := ""
		for i, component := range components {
			if i == 0 {
				result += component
			} else {
				result += Indent + component
			}
			if i < len(components)-1 {
				result += "\n"
			}
		}

		return result
	} else {
		return fmt.Sprintf("%q", object)
	}
}

func formatSlice(v reflect.Value, indentation uint) string {
	if v.Kind() == reflect.Slice && v.Type().Elem().Kind() == reflect.Uint8 && isPrintableString(string(v.Bytes())) {
		return formatString(v.Bytes(), indentation)
	}

	l := v.Len()
	result := make([]string, l)
	longest := 0
	for i := 0; i < l; i++ {
		result[i] = formatValue(v.Index(i), indentation+1)
		if len(result[i]) > longest {
			longest = len(result[i])
		}
	}

	if longest > longFormThreshold {
		indenter := strings.Repeat(Indent, int(indentation))
		return fmt.Sprintf("[\n%s%s,\n%s]", indenter+Indent, strings.Join(result, ",\n"+indenter+Indent), indenter)
	}
	return fmt.Sprintf("[%s]", strings.Join(result, ", "))
}

func formatMap(v reflect.Value, indentation uint) string {
	l := v.Len()
	result := make([]string, l)

	longest := 0
	for i, key := range v.MapKeys() {
		value := v.MapIndex(key)
		result[i] = fmt.Sprintf("%s: %s", formatValue(key, indentation+1), formatValue(value, indentation+1))
		if len(result[i]) > longest {
			longest = len(result[i])
		}
	}

	if longest > longFormThreshold {
		indenter := strings.Repeat(Indent, int(indentation))
		return fmt.Sprintf("{\n%s%s,\n%s}", indenter+Indent, strings.Join(result, ",\n"+indenter+Indent), indenter)
	}
	return fmt.Sprintf("{%s}", strings.Join(result, ", "))
}

func formatStruct(v reflect.Value, indentation uint) string {
	t := v.Type()

	l := v.NumField()
	result := []string{}
	longest := 0
	for i := 0; i < l; i++ {
		structField := t.Field(i)
		fieldEntry := v.Field(i)
		representation := fmt.Sprintf("%s: %s", structField.Name, formatValue(fieldEntry, indentation+1))
		result = append(result, representation)
		if len(representation) > longest {
			longest = len(representation)
		}
	}
	if longest > longFormThreshold {
		indenter := strings.Repeat(Indent, int(indentation))
		return fmt.Sprintf("{\n%s%s,\n%s}", indenter+Indent, strings.Join(result, ",\n"+indenter+Indent), indenter)
	}
	return fmt.Sprintf("{%s}", strings.Join(result, ", "))
}

func formatInterface(v reflect.Value, indentation uint) string {
	return fmt.Sprintf("<%s>%s", formatType(v.Elem()), formatValue(v.Elem(), indentation))
}

func isNilValue(a reflect.Value) bool {
	switch a.Kind() {
	case reflect.Invalid:
		return true
	case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice:
		return a.IsNil()
	}

	return false
}

/*
Returns true when the string is entirely made of printable runes, false otherwise.
*/
func isPrintableString(str string) bool {
	for _, runeValue := range str {
		if !strconv.IsPrint(runeValue) {
			return false
		}
	}
	return true
}
   0707010000098E000081A4000000000000000000000001645E367C000064D8000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/gomega_dsl.go   /*
Gomega is the Ginkgo BDD-style testing framework's preferred matcher library.

The godoc documentation describes Gomega's API.  More comprehensive documentation (with examples!) is available at http://onsi.github.io/gomega/

Gomega on Github: http://github.com/onsi/gomega

Learn more about Ginkgo online: http://onsi.github.io/ginkgo

Ginkgo on Github: http://github.com/onsi/ginkgo

Gomega is MIT-Licensed
*/
package gomega

import (
	"errors"
	"fmt"
	"time"

	"github.com/onsi/gomega/internal"
	"github.com/onsi/gomega/types"
)

const GOMEGA_VERSION = "1.27.6"

const nilGomegaPanic = `You are trying to make an assertion, but haven't registered Gomega's fail handler.
If you're using Ginkgo then you probably forgot to put your assertion in an It().
Alternatively, you may have forgotten to register a fail handler with RegisterFailHandler() or RegisterTestingT().
Depending on your vendoring solution you may be inadvertently importing gomega and subpackages (e.g. ghhtp, gexec,...) from different locations.
`

// Gomega describes the essential Gomega DSL. This interface allows libraries
// to abstract between the standard package-level function implementations
// and alternatives like *WithT.
//
// The types in the top-level DSL have gotten a bit messy due to earlier deprecations that avoid stuttering
// and due to an accidental use of a concrete type (*WithT) in an earlier release.
//
// As of 1.15 both the WithT and Ginkgo variants of Gomega are implemented by the same underlying object
// however one (the Ginkgo variant) is exported as an interface (types.Gomega) whereas the other (the withT variant)
// is shared as a concrete type (*WithT, which is aliased to *internal.Gomega).  1.15 did not clean this mess up to ensure
// that declarations of *WithT in existing code are not broken by the upgrade to 1.15.
type Gomega = types.Gomega

// DefaultGomega supplies the standard package-level implementation
var Default = Gomega(internal.NewGomega(internal.FetchDefaultDurationBundle()))

// NewGomega returns an instance of Gomega wired into the passed-in fail handler.
// You generally don't need to use this when using Ginkgo - RegisterFailHandler will wire up the global gomega
// However creating a NewGomega with a custom fail handler can be useful in contexts where you want to use Gomega's
// rich ecosystem of matchers without causing a test to fail.  For example, to aggregate a series of potential failures
// or for use in a non-test setting.
func NewGomega(fail types.GomegaFailHandler) Gomega {
	return internal.NewGomega(internalGomega(Default).DurationBundle).ConfigureWithFailHandler(fail)
}

// WithT wraps a *testing.T and provides `Expect`, `Eventually`, and `Consistently` methods.  This allows you to leverage
// Gomega's rich ecosystem of matchers in standard `testing` test suites.
//
// Use `NewWithT` to instantiate a `WithT`
//
// As of 1.15 both the WithT and Ginkgo variants of Gomega are implemented by the same underlying object
// however one (the Ginkgo variant) is exported as an interface (types.Gomega) whereas the other (the withT variant)
// is shared as a concrete type (*WithT, which is aliased to *internal.Gomega).  1.15 did not clean this mess up to ensure
// that declarations of *WithT in existing code are not broken by the upgrade to 1.15.
type WithT = internal.Gomega

// GomegaWithT is deprecated in favor of gomega.WithT, which does not stutter.
type GomegaWithT = WithT

// inner is an interface that allows users to provide a wrapper around Default.  The wrapper
// must implement the inner interface and return either the original Default or the result of
// a call to NewGomega().
type inner interface {
	Inner() Gomega
}

func internalGomega(g Gomega) *internal.Gomega {
	if v, ok := g.(inner); ok {
		return v.Inner().(*internal.Gomega)
	}
	return g.(*internal.Gomega)
}

// NewWithT takes a *testing.T and returns a `gomega.WithT` allowing you to use `Expect`, `Eventually`, and `Consistently` along with
// Gomega's rich ecosystem of matchers in standard `testing` test suits.
//
//	func TestFarmHasCow(t *testing.T) {
//	    g := gomega.NewWithT(t)
//
//	    f := farm.New([]string{"Cow", "Horse"})
//	    g.Expect(f.HasCow()).To(BeTrue(), "Farm should have cow")
//	 }
func NewWithT(t types.GomegaTestingT) *WithT {
	return internal.NewGomega(internalGomega(Default).DurationBundle).ConfigureWithT(t)
}

// NewGomegaWithT is deprecated in favor of gomega.NewWithT, which does not stutter.
var NewGomegaWithT = NewWithT

// RegisterFailHandler connects Ginkgo to Gomega. When a matcher fails
// the fail handler passed into RegisterFailHandler is called.
func RegisterFailHandler(fail types.GomegaFailHandler) {
	internalGomega(Default).ConfigureWithFailHandler(fail)
}

// RegisterFailHandlerWithT is deprecated and will be removed in a future release.
// users should use RegisterFailHandler, or RegisterTestingT
func RegisterFailHandlerWithT(_ types.GomegaTestingT, fail types.GomegaFailHandler) {
	fmt.Println("RegisterFailHandlerWithT is deprecated.  Please use RegisterFailHandler or RegisterTestingT instead.")
	internalGomega(Default).ConfigureWithFailHandler(fail)
}

// RegisterTestingT connects Gomega to Golang's XUnit style
// Testing.T tests.  It is now deprecated and you should use NewWithT() instead to get a fresh instance of Gomega for each test.
func RegisterTestingT(t types.GomegaTestingT) {
	internalGomega(Default).ConfigureWithT(t)
}

// InterceptGomegaFailures runs a given callback and returns an array of
// failure messages generated by any Gomega assertions within the callback.
// Execution continues after the first failure allowing users to collect all failures
// in the callback.
//
// This is most useful when testing custom matchers, but can also be used to check
// on a value using a Gomega assertion without causing a test failure.
func InterceptGomegaFailures(f func()) []string {
	originalHandler := internalGomega(Default).Fail
	failures := []string{}
	internalGomega(Default).Fail = func(message string, callerSkip ...int) {
		failures = append(failures, message)
	}
	defer func() {
		internalGomega(Default).Fail = originalHandler
	}()
	f()
	return failures
}

// InterceptGomegaFailure runs a given callback and returns the first
// failure message generated by any Gomega assertions within the callback, wrapped in an error.
//
// The callback ceases execution as soon as the first failed assertion occurs, however Gomega
// does not register a failure with the FailHandler registered via RegisterFailHandler - it is up
// to the user to decide what to do with the returned error
func InterceptGomegaFailure(f func()) (err error) {
	originalHandler := internalGomega(Default).Fail
	internalGomega(Default).Fail = func(message string, callerSkip ...int) {
		err = errors.New(message)
		panic("stop execution")
	}

	defer func() {
		internalGomega(Default).Fail = originalHandler
		if e := recover(); e != nil {
			if err == nil {
				panic(e)
			}
		}
	}()

	f()
	return err
}

func ensureDefaultGomegaIsConfigured() {
	if !internalGomega(Default).IsConfigured() {
		panic(nilGomegaPanic)
	}
}

// Ω wraps an actual value allowing assertions to be made on it:
//
//	Ω("foo").Should(Equal("foo"))
//
// If Ω is passed more than one argument it will pass the *first* argument to the matcher.
// All subsequent arguments will be required to be nil/zero.
//
// This is convenient if you want to make an assertion on a method/function that returns
// a value and an error - a common patter in Go.
//
// For example, given a function with signature:
//
//	func MyAmazingThing() (int, error)
//
// Then:
//
//	Ω(MyAmazingThing()).Should(Equal(3))
//
// Will succeed only if `MyAmazingThing()` returns `(3, nil)`
//
// Ω and Expect are identical
func Ω(actual interface{}, extra ...interface{}) Assertion {
	ensureDefaultGomegaIsConfigured()
	return Default.Ω(actual, extra...)
}

// Expect wraps an actual value allowing assertions to be made on it:
//
//	Expect("foo").To(Equal("foo"))
//
// If Expect is passed more than one argument it will pass the *first* argument to the matcher.
// All subsequent arguments will be required to be nil/zero.
//
// This is convenient if you want to make an assertion on a method/function that returns
// a value and an error - a common pattern in Go.
//
// For example, given a function with signature:
//
//	func MyAmazingThing() (int, error)
//
// Then:
//
//	Expect(MyAmazingThing()).Should(Equal(3))
//
// Will succeed only if `MyAmazingThing()` returns `(3, nil)`
//
// Expect and Ω are identical
func Expect(actual interface{}, extra ...interface{}) Assertion {
	ensureDefaultGomegaIsConfigured()
	return Default.Expect(actual, extra...)
}

// ExpectWithOffset wraps an actual value allowing assertions to be made on it:
//
//	ExpectWithOffset(1, "foo").To(Equal("foo"))
//
// Unlike `Expect` and `Ω`, `ExpectWithOffset` takes an additional integer argument
// that is used to modify the call-stack offset when computing line numbers. It is
// the same as `Expect(...).WithOffset`.
//
// This is most useful in helper functions that make assertions.  If you want Gomega's
// error message to refer to the calling line in the test (as opposed to the line in the helper function)
// set the first argument of `ExpectWithOffset` appropriately.
func ExpectWithOffset(offset int, actual interface{}, extra ...interface{}) Assertion {
	ensureDefaultGomegaIsConfigured()
	return Default.ExpectWithOffset(offset, actual, extra...)
}

/*
Eventually enables making assertions on asynchronous behavior.

Eventually checks that an assertion *eventually* passes.  Eventually blocks when called and attempts an assertion periodically until it passes or a timeout occurs.  Both the timeout and polling interval are configurable as optional arguments.
The first optional argument is the timeout (which defaults to 1s), the second is the polling interval (which defaults to 10ms).  Both intervals can be specified as time.Duration, parsable duration strings or floats/integers (in which case they are interpreted as seconds).  In addition an optional context.Context can be passed in - Eventually will keep trying until either the timeout epxires or the context is cancelled, whichever comes first.

Eventually works with any Gomega compatible matcher and supports making assertions against three categories of actual value:

**Category 1: Making Eventually assertions on values**

There are several examples of values that can change over time.  These can be passed in to Eventually and will be passed to the matcher repeatedly until a match occurs.  For example:

	c := make(chan bool)
	go DoStuff(c)
	Eventually(c, "50ms").Should(BeClosed())

will poll the channel repeatedly until it is closed.  In this example `Eventually` will block until either the specified timeout of 50ms has elapsed or the channel is closed, whichever comes first.

Several Gomega libraries allow you to use Eventually in this way.  For example, the gomega/gexec package allows you to block until a *gexec.Session exits successfully via:

	Eventually(session).Should(gexec.Exit(0))

And the gomega/gbytes package allows you to monitor a streaming *gbytes.Buffer until a given string is seen:

	Eventually(buffer).Should(gbytes.Say("hello there"))

In these examples, both `session` and `buffer` are designed to be thread-safe when polled by the `Exit` and `Say` matchers.  This is not true in general of most raw values, so while it is tempting to do something like:

	// THIS IS NOT THREAD-SAFE
	var s *string
	go mutateStringEventually(s)
	Eventually(s).Should(Equal("I've changed"))

this will trigger Go's race detector as the goroutine polling via Eventually will race over the value of s with the goroutine mutating the string.  For cases like this you can use channels or introduce your own locking around s by passing Eventually a function.

**Category 2: Make Eventually assertions on functions**

Eventually can be passed functions that **return at least one value**.  When configured this way, Eventually will poll the function repeatedly and pass the first returned value to the matcher.

For example:

	   Eventually(func() int {
	   	return client.FetchCount()
	   }).Should(BeNumerically(">=", 17))

	will repeatedly poll client.FetchCount until the BeNumerically matcher is satisfied.  (Note that this example could have been written as Eventually(client.FetchCount).Should(BeNumerically(">=", 17)))

If multiple values are returned by the function, Eventually will pass the first value to the matcher and require that all others are zero-valued.  This allows you to pass Eventually a function that returns a value and an error - a common pattern in Go.

For example, consider a method that returns a value and an error:

	func FetchFromDB() (string, error)

Then

	Eventually(FetchFromDB).Should(Equal("got it"))

will pass only if and when the returned error is nil *and* the returned string satisfies the matcher.

Eventually can also accept functions that take arguments, however you must provide those arguments using .WithArguments().  For example, consider a function that takes a user-id and makes a network request to fetch a full name:

	func FetchFullName(userId int) (string, error)

You can poll this function like so:

	Eventually(FetchFullName).WithArguments(1138).Should(Equal("Wookie"))

It is important to note that the function passed into Eventually is invoked *synchronously* when polled.  Eventually does not (in fact, it cannot) kill the function if it takes longer to return than Eventually's configured timeout.  A common practice here is to use a context.  Here's an example that combines Ginkgo's spec timeout support with Eventually:

	It("fetches the correct count", func(ctx SpecContext) {
		Eventually(ctx, func() int {
			return client.FetchCount(ctx, "/users")
		}).Should(BeNumerically(">=", 17))
	}, SpecTimeout(time.Second))

you an also use Eventually().WithContext(ctx) to pass in the context.  Passed-in contexts play nicely with paseed-in arguments as long as the context appears first.  You can rewrite the above example as:

	It("fetches the correct count", func(ctx SpecContext) {
		Eventually(client.FetchCount).WithContext(ctx).WithArguments("/users").Should(BeNumerically(">=", 17))
	}, SpecTimeout(time.Second))

Either way the context passd to Eventually is also passed to the underlying funciton.  Now, when Ginkgo cancels the context both the FetchCount client and Gomega will be informed and can exit.

**Category 3: Making assertions _in_ the function passed into Eventually**

When testing complex systems it can be valuable to assert that a _set_ of assertions passes Eventually.  Eventually supports this by accepting functions that take a single Gomega argument and return zero or more values.

Here's an example that makes some assertions and returns a value and error:

	Eventually(func(g Gomega) (Widget, error) {
		ids, err := client.FetchIDs()
		g.Expect(err).NotTo(HaveOccurred())
		g.Expect(ids).To(ContainElement(1138))
		return client.FetchWidget(1138)
	}).Should(Equal(expectedWidget))

will pass only if all the assertions in the polled function pass and the return value satisfied the matcher.

Eventually also supports a special case polling function that takes a single Gomega argument and returns no values.  Eventually assumes such a function is making assertions and is designed to work with the Succeed matcher to validate that all assertions have passed.
For example:

	Eventually(func(g Gomega) {
		model, err := client.Find(1138)
		g.Expect(err).NotTo(HaveOccurred())
		g.Expect(model.Reticulate()).To(Succeed())
		g.Expect(model.IsReticulated()).To(BeTrue())
		g.Expect(model.Save()).To(Succeed())
	}).Should(Succeed())

will rerun the function until all assertions pass.

You can also pass additional arugments to functions that take a Gomega.  The only rule is that the Gomega argument must be first.  If you also want to pass the context attached to Eventually you must ensure that is the second argument.  For example:

	Eventually(func(g Gomega, ctx context.Context, path string, expected ...string){
		tok, err := client.GetToken(ctx)
		g.Expect(err).NotTo(HaveOccurred())

		elements, err := client.Fetch(ctx, tok, path)
		g.Expect(err).NotTo(HaveOccurred())
		g.Expect(elements).To(ConsistOf(expected))
	}).WithContext(ctx).WithArguments("/names", "Joe", "Jane", "Sam").Should(Succeed())

You can ensure that you get a number of consecutive successful tries before succeeding using `MustPassRepeatedly(int)`. For Example:

	int count := 0
	Eventually(func() bool {
		count++
		return count > 2
	}).MustPassRepeatedly(2).Should(BeTrue())
	// Because we had to wait for 2 calls that returned true
	Expect(count).To(Equal(3))

Finally, in addition to passing timeouts and a context to Eventually you can be more explicit with Eventually's chaining configuration methods:

	Eventually(..., "1s", "2s", ctx).Should(...)

is equivalent to

	Eventually(...).WithTimeout(time.Second).WithPolling(2*time.Second).WithContext(ctx).Should(...)
*/
func Eventually(actualOrCtx interface{}, args ...interface{}) AsyncAssertion {
	ensureDefaultGomegaIsConfigured()
	return Default.Eventually(actualOrCtx, args...)
}

// EventuallyWithOffset operates like Eventually but takes an additional
// initial argument to indicate an offset in the call stack.  This is useful when building helper
// functions that contain matchers.  To learn more, read about `ExpectWithOffset`.
//
// `EventuallyWithOffset` is the same as `Eventually(...).WithOffset`.
//
// `EventuallyWithOffset` specifying a timeout interval (and an optional polling interval) are
// the same as `Eventually(...).WithOffset(...).WithTimeout` or
// `Eventually(...).WithOffset(...).WithTimeout(...).WithPolling`.
func EventuallyWithOffset(offset int, actualOrCtx interface{}, args ...interface{}) AsyncAssertion {
	ensureDefaultGomegaIsConfigured()
	return Default.EventuallyWithOffset(offset, actualOrCtx, args...)
}

/*
Consistently, like Eventually, enables making assertions on asynchronous behavior.

Consistently blocks when called for a specified duration.  During that duration Consistently repeatedly polls its matcher and ensures that it is satisfied.  If the matcher is consistently satisfied, then Consistently will pass.  Otherwise Consistently will fail.

Both the total waiting duration and the polling interval are configurable as optional arguments.  The first optional argument is the duration that Consistently will run for (defaults to 100ms), and the second argument is the polling interval (defaults to 10ms).  As with Eventually, these intervals can be passed in as time.Duration, parsable duration strings or an integer or float number of seconds.  You can also pass in an optional context.Context - Consistently will exit early (with a failure) if the context is cancelled before the waiting duration expires.

Consistently accepts the same three categories of actual as Eventually, check the Eventually docs to learn more.

Consistently is useful in cases where you want to assert that something *does not happen* for a period of time.  For example, you may want to assert that a goroutine does *not* send data down a channel.  In this case you could write:

	Consistently(channel, "200ms").ShouldNot(Receive())

This will block for 200 milliseconds and repeatedly check the channel and ensure nothing has been received.
*/
func Consistently(actualOrCtx interface{}, args ...interface{}) AsyncAssertion {
	ensureDefaultGomegaIsConfigured()
	return Default.Consistently(actualOrCtx, args...)
}

// ConsistentlyWithOffset operates like Consistently but takes an additional
// initial argument to indicate an offset in the call stack. This is useful when building helper
// functions that contain matchers. To learn more, read about `ExpectWithOffset`.
//
// `ConsistentlyWithOffset` is the same as `Consistently(...).WithOffset` and
// optional `WithTimeout` and `WithPolling`.
func ConsistentlyWithOffset(offset int, actualOrCtx interface{}, args ...interface{}) AsyncAssertion {
	ensureDefaultGomegaIsConfigured()
	return Default.ConsistentlyWithOffset(offset, actualOrCtx, args...)
}

/*
StopTrying can be used to signal to Eventually and Consistentlythat they should abort and stop trying.  This always results in a failure of the assertion - and the failure message is the content of the StopTrying signal.

You can send the StopTrying signal by either returning StopTrying("message") as an error from your passed-in function _or_ by calling StopTrying("message").Now() to trigger a panic and end execution.

You can also wrap StopTrying around an error with `StopTrying("message").Wrap(err)` and can attach additional objects via `StopTrying("message").Attach("description", object).  When rendered, the signal will include the wrapped error and any attached objects rendered using Gomega's default formatting.

Here are a couple of examples.  This is how you might use StopTrying() as an error to signal that Eventually should stop:

	playerIndex, numPlayers := 0, 11
	Eventually(func() (string, error) {
	    if playerIndex == numPlayers {
	        return "", StopTrying("no more players left")
	    }
	    name := client.FetchPlayer(playerIndex)
	    playerIndex += 1
	    return name, nil
	}).Should(Equal("Patrick Mahomes"))

And here's an example where `StopTrying().Now()` is called to halt execution immediately:

	Eventually(func() []string {
		names, err := client.FetchAllPlayers()
		if err == client.IRRECOVERABLE_ERROR {
			StopTrying("Irrecoverable error occurred").Wrap(err).Now()
		}
		return names
	}).Should(ContainElement("Patrick Mahomes"))
*/
var StopTrying = internal.StopTrying

/*
TryAgainAfter(<duration>) allows you to adjust the polling interval for the _next_ iteration of `Eventually` or `Consistently`.  Like `StopTrying` you can either return `TryAgainAfter` as an error or trigger it immedieately with `.Now()`

When `TryAgainAfter(<duration>` is triggered `Eventually` and `Consistently` will wait for that duration.  If a timeout occurs before the next poll is triggered both `Eventually` and `Consistently` will always fail with the content of the TryAgainAfter message.  As with StopTrying you can `.Wrap()` and error and `.Attach()` additional objects to `TryAgainAfter`.
*/
var TryAgainAfter = internal.TryAgainAfter

/*
PollingSignalError is the error returned by StopTrying() and TryAgainAfter()
*/
type PollingSignalError = internal.PollingSignalError

// SetDefaultEventuallyTimeout sets the default timeout duration for Eventually. Eventually will repeatedly poll your condition until it succeeds, or until this timeout elapses.
func SetDefaultEventuallyTimeout(t time.Duration) {
	Default.SetDefaultEventuallyTimeout(t)
}

// SetDefaultEventuallyPollingInterval sets the default polling interval for Eventually.
func SetDefaultEventuallyPollingInterval(t time.Duration) {
	Default.SetDefaultEventuallyPollingInterval(t)
}

// SetDefaultConsistentlyDuration sets  the default duration for Consistently. Consistently will verify that your condition is satisfied for this long.
func SetDefaultConsistentlyDuration(t time.Duration) {
	Default.SetDefaultConsistentlyDuration(t)
}

// SetDefaultConsistentlyPollingInterval sets the default polling interval for Consistently.
func SetDefaultConsistentlyPollingInterval(t time.Duration) {
	Default.SetDefaultConsistentlyPollingInterval(t)
}

// AsyncAssertion is returned by Eventually and Consistently and polls the actual value passed into Eventually against
// the matcher passed to the Should and ShouldNot methods.
//
// Both Should and ShouldNot take a variadic optionalDescription argument.
// This argument allows you to make your failure messages more descriptive.
// If a single argument of type `func() string` is passed, this function will be lazily evaluated if a failure occurs
// and the returned string is used to annotate the failure message.
// Otherwise, this argument is passed on to fmt.Sprintf() and then used to annotate the failure message.
//
// Both Should and ShouldNot return a boolean that is true if the assertion passed and false if it failed.
//
// Example:
//
//	Eventually(myChannel).Should(Receive(), "Something should have come down the pipe.")
//	Consistently(myChannel).ShouldNot(Receive(), func() string { return "Nothing should have come down the pipe." })
type AsyncAssertion = types.AsyncAssertion

// GomegaAsyncAssertion is deprecated in favor of AsyncAssertion, which does not stutter.
type GomegaAsyncAssertion = types.AsyncAssertion

// Assertion is returned by Ω and Expect and compares the actual value to the matcher
// passed to the Should/ShouldNot and To/ToNot/NotTo methods.
//
// Typically Should/ShouldNot are used with Ω and To/ToNot/NotTo are used with Expect
// though this is not enforced.
//
// All methods take a variadic optionalDescription argument.
// This argument allows you to make your failure messages more descriptive.
// If a single argument of type `func() string` is passed, this function will be lazily evaluated if a failure occurs
// and the returned string is used to annotate the failure message.
// Otherwise, this argument is passed on to fmt.Sprintf() and then used to annotate the failure message.
//
// All methods return a bool that is true if the assertion passed and false if it failed.
//
// Example:
//
//	Ω(farm.HasCow()).Should(BeTrue(), "Farm %v should have a cow", farm)
type Assertion = types.Assertion

// GomegaAssertion is deprecated in favor of Assertion, which does not stutter.
type GomegaAssertion = types.Assertion

// OmegaMatcher is deprecated in favor of the better-named and better-organized types.GomegaMatcher but sticks around to support existing code that uses it
type OmegaMatcher = types.GomegaMatcher
0707010000098F000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/internal    07070100000990000081A4000000000000000000000001645E367C0000165C000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/internal/assertion.go   package internal

import (
	"fmt"
	"reflect"

	"github.com/onsi/gomega/format"
	"github.com/onsi/gomega/types"
)

type Assertion struct {
	actuals     []interface{} // actual value plus all extra values
	actualIndex int           // value to pass to the matcher
	vet         vetinari      // the vet to call before calling Gomega matcher
	offset      int
	g           *Gomega
}

// ...obligatory discworld reference, as "vetineer" doesn't sound ... quite right.
type vetinari func(assertion *Assertion, optionalDescription ...interface{}) bool

func NewAssertion(actualInput interface{}, g *Gomega, offset int, extra ...interface{}) *Assertion {
	return &Assertion{
		actuals:     append([]interface{}{actualInput}, extra...),
		actualIndex: 0,
		vet:         (*Assertion).vetActuals,
		offset:      offset,
		g:           g,
	}
}

func (assertion *Assertion) WithOffset(offset int) types.Assertion {
	assertion.offset = offset
	return assertion
}

func (assertion *Assertion) Error() types.Assertion {
	return &Assertion{
		actuals:     assertion.actuals,
		actualIndex: len(assertion.actuals) - 1,
		vet:         (*Assertion).vetError,
		offset:      assertion.offset,
		g:           assertion.g,
	}
}

func (assertion *Assertion) Should(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool {
	assertion.g.THelper()
	vetOptionalDescription("Assertion", optionalDescription...)
	return assertion.vet(assertion, optionalDescription...) && assertion.match(matcher, true, optionalDescription...)
}

func (assertion *Assertion) ShouldNot(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool {
	assertion.g.THelper()
	vetOptionalDescription("Assertion", optionalDescription...)
	return assertion.vet(assertion, optionalDescription...) && assertion.match(matcher, false, optionalDescription...)
}

func (assertion *Assertion) To(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool {
	assertion.g.THelper()
	vetOptionalDescription("Assertion", optionalDescription...)
	return assertion.vet(assertion, optionalDescription...) && assertion.match(matcher, true, optionalDescription...)
}

func (assertion *Assertion) ToNot(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool {
	assertion.g.THelper()
	vetOptionalDescription("Assertion", optionalDescription...)
	return assertion.vet(assertion, optionalDescription...) && assertion.match(matcher, false, optionalDescription...)
}

func (assertion *Assertion) NotTo(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool {
	assertion.g.THelper()
	vetOptionalDescription("Assertion", optionalDescription...)
	return assertion.vet(assertion, optionalDescription...) && assertion.match(matcher, false, optionalDescription...)
}

func (assertion *Assertion) buildDescription(optionalDescription ...interface{}) string {
	switch len(optionalDescription) {
	case 0:
		return ""
	case 1:
		if describe, ok := optionalDescription[0].(func() string); ok {
			return describe() + "\n"
		}
	}
	return fmt.Sprintf(optionalDescription[0].(string), optionalDescription[1:]...) + "\n"
}

func (assertion *Assertion) match(matcher types.GomegaMatcher, desiredMatch bool, optionalDescription ...interface{}) bool {
	actualInput := assertion.actuals[assertion.actualIndex]
	matches, err := matcher.Match(actualInput)
	assertion.g.THelper()
	if err != nil {
		description := assertion.buildDescription(optionalDescription...)
		assertion.g.Fail(description+err.Error(), 2+assertion.offset)
		return false
	}
	if matches != desiredMatch {
		var message string
		if desiredMatch {
			message = matcher.FailureMessage(actualInput)
		} else {
			message = matcher.NegatedFailureMessage(actualInput)
		}
		description := assertion.buildDescription(optionalDescription...)
		assertion.g.Fail(description+message, 2+assertion.offset)
		return false
	}

	return true
}

// vetActuals vets the actual values, with the (optional) exception of a
// specific value, such as the first value in case non-error assertions, or the
// last value in case of Error()-based assertions.
func (assertion *Assertion) vetActuals(optionalDescription ...interface{}) bool {
	success, message := vetActuals(assertion.actuals, assertion.actualIndex)
	if success {
		return true
	}

	description := assertion.buildDescription(optionalDescription...)
	assertion.g.THelper()
	assertion.g.Fail(description+message, 2+assertion.offset)
	return false
}

// vetError vets the actual values, except for the final error value, in case
// the final error value is non-zero. Otherwise, it doesn't vet the actual
// values, as these are allowed to take on any values unless there is a non-zero
// error value.
func (assertion *Assertion) vetError(optionalDescription ...interface{}) bool {
	if err := assertion.actuals[assertion.actualIndex]; err != nil {
		// Go error result idiom: all other actual values must be zero values.
		return assertion.vetActuals(optionalDescription...)
	}
	return true
}

// vetActuals vets a slice of actual values, optionally skipping a particular
// value slice element, such as the first or last value slice element.
func vetActuals(actuals []interface{}, skipIndex int) (bool, string) {
	for i, actual := range actuals {
		if i == skipIndex {
			continue
		}
		if actual != nil {
			zeroValue := reflect.Zero(reflect.TypeOf(actual)).Interface()
			if !reflect.DeepEqual(zeroValue, actual) {
				var message string
				if err, ok := actual.(error); ok {
					message = fmt.Sprintf("Unexpected error: %s\n%s", err, format.Object(err, 1))
				} else {
					message = fmt.Sprintf("Unexpected non-nil/non-zero argument at index %d:\n\t<%T>: %#v", i, actual, actual)
				}
				return false, message
			}
		}
	}
	return true, ""
}
07070100000991000081A4000000000000000000000001645E367C00004429000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/internal/async_assertion.go package internal

import (
	"context"
	"errors"
	"fmt"
	"reflect"
	"runtime"
	"sync"
	"time"

	"github.com/onsi/gomega/format"
	"github.com/onsi/gomega/types"
)

var errInterface = reflect.TypeOf((*error)(nil)).Elem()
var gomegaType = reflect.TypeOf((*types.Gomega)(nil)).Elem()
var contextType = reflect.TypeOf(new(context.Context)).Elem()

type formattedGomegaError interface {
	FormattedGomegaError() string
}

type asyncPolledActualError struct {
	message string
}

func (err *asyncPolledActualError) Error() string {
	return err.message
}

func (err *asyncPolledActualError) FormattedGomegaError() string {
	return err.message
}

type contextWithAttachProgressReporter interface {
	AttachProgressReporter(func() string) func()
}

type asyncGomegaHaltExecutionError struct{}

func (a asyncGomegaHaltExecutionError) GinkgoRecoverShouldIgnoreThisPanic() {}
func (a asyncGomegaHaltExecutionError) Error() string {
	return `An assertion has failed in a goroutine.  You should call 

    defer GinkgoRecover()

at the top of the goroutine that caused this panic.  This will allow Ginkgo and Gomega to correctly capture and manage this panic.`
}

type AsyncAssertionType uint

const (
	AsyncAssertionTypeEventually AsyncAssertionType = iota
	AsyncAssertionTypeConsistently
)

func (at AsyncAssertionType) String() string {
	switch at {
	case AsyncAssertionTypeEventually:
		return "Eventually"
	case AsyncAssertionTypeConsistently:
		return "Consistently"
	}
	return "INVALID ASYNC ASSERTION TYPE"
}

type AsyncAssertion struct {
	asyncType AsyncAssertionType

	actualIsFunc  bool
	actual        interface{}
	argsToForward []interface{}

	timeoutInterval    time.Duration
	pollingInterval    time.Duration
	mustPassRepeatedly int
	ctx                context.Context
	offset             int
	g                  *Gomega
}

func NewAsyncAssertion(asyncType AsyncAssertionType, actualInput interface{}, g *Gomega, timeoutInterval time.Duration, pollingInterval time.Duration, mustPassRepeatedly int, ctx context.Context, offset int) *AsyncAssertion {
	out := &AsyncAssertion{
		asyncType:          asyncType,
		timeoutInterval:    timeoutInterval,
		pollingInterval:    pollingInterval,
		mustPassRepeatedly: mustPassRepeatedly,
		offset:             offset,
		ctx:                ctx,
		g:                  g,
	}

	out.actual = actualInput
	if actualInput != nil && reflect.TypeOf(actualInput).Kind() == reflect.Func {
		out.actualIsFunc = true
	}

	return out
}

func (assertion *AsyncAssertion) WithOffset(offset int) types.AsyncAssertion {
	assertion.offset = offset
	return assertion
}

func (assertion *AsyncAssertion) WithTimeout(interval time.Duration) types.AsyncAssertion {
	assertion.timeoutInterval = interval
	return assertion
}

func (assertion *AsyncAssertion) WithPolling(interval time.Duration) types.AsyncAssertion {
	assertion.pollingInterval = interval
	return assertion
}

func (assertion *AsyncAssertion) Within(timeout time.Duration) types.AsyncAssertion {
	assertion.timeoutInterval = timeout
	return assertion
}

func (assertion *AsyncAssertion) ProbeEvery(interval time.Duration) types.AsyncAssertion {
	assertion.pollingInterval = interval
	return assertion
}

func (assertion *AsyncAssertion) WithContext(ctx context.Context) types.AsyncAssertion {
	assertion.ctx = ctx
	return assertion
}

func (assertion *AsyncAssertion) WithArguments(argsToForward ...interface{}) types.AsyncAssertion {
	assertion.argsToForward = argsToForward
	return assertion
}

func (assertion *AsyncAssertion) MustPassRepeatedly(count int) types.AsyncAssertion {
	assertion.mustPassRepeatedly = count
	return assertion
}

func (assertion *AsyncAssertion) Should(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool {
	assertion.g.THelper()
	vetOptionalDescription("Asynchronous assertion", optionalDescription...)
	return assertion.match(matcher, true, optionalDescription...)
}

func (assertion *AsyncAssertion) ShouldNot(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool {
	assertion.g.THelper()
	vetOptionalDescription("Asynchronous assertion", optionalDescription...)
	return assertion.match(matcher, false, optionalDescription...)
}

func (assertion *AsyncAssertion) buildDescription(optionalDescription ...interface{}) string {
	switch len(optionalDescription) {
	case 0:
		return ""
	case 1:
		if describe, ok := optionalDescription[0].(func() string); ok {
			return describe() + "\n"
		}
	}
	return fmt.Sprintf(optionalDescription[0].(string), optionalDescription[1:]...) + "\n"
}

func (assertion *AsyncAssertion) processReturnValues(values []reflect.Value) (interface{}, error) {
	if len(values) == 0 {
		return nil, &asyncPolledActualError{
			message: fmt.Sprintf("The function passed to %s did not return any values", assertion.asyncType),
		}
	}

	actual := values[0].Interface()
	if _, ok := AsPollingSignalError(actual); ok {
		return actual, actual.(error)
	}

	var err error
	for i, extraValue := range values[1:] {
		extra := extraValue.Interface()
		if extra == nil {
			continue
		}
		if _, ok := AsPollingSignalError(extra); ok {
			return actual, extra.(error)
		}
		extraType := reflect.TypeOf(extra)
		zero := reflect.Zero(extraType).Interface()
		if reflect.DeepEqual(extra, zero) {
			continue
		}
		if i == len(values)-2 && extraType.Implements(errInterface) {
			err = extra.(error)
		}
		if err == nil {
			err = &asyncPolledActualError{
				message: fmt.Sprintf("The function passed to %s had an unexpected non-nil/non-zero return value at index %d:\n%s", assertion.asyncType, i+1, format.Object(extra, 1)),
			}
		}
	}

	return actual, err
}

func (assertion *AsyncAssertion) invalidFunctionError(t reflect.Type) error {
	return fmt.Errorf(`The function passed to %s had an invalid signature of %s.  Functions passed to %s must either:

	(a) have return values or
	(b) take a Gomega interface as their first argument and use that Gomega instance to make assertions.

You can learn more at https://onsi.github.io/gomega/#eventually
`, assertion.asyncType, t, assertion.asyncType)
}

func (assertion *AsyncAssertion) noConfiguredContextForFunctionError() error {
	return fmt.Errorf(`The function passed to %s requested a context.Context, but no context has been provided.  Please pass one in using %s().WithContext().

You can learn more at https://onsi.github.io/gomega/#eventually
`, assertion.asyncType, assertion.asyncType)
}

func (assertion *AsyncAssertion) argumentMismatchError(t reflect.Type, numProvided int) error {
	have := "have"
	if numProvided == 1 {
		have = "has"
	}
	return fmt.Errorf(`The function passed to %s has signature %s takes %d arguments but %d %s been provided.  Please use %s().WithArguments() to pass the corect set of arguments.

You can learn more at https://onsi.github.io/gomega/#eventually
`, assertion.asyncType, t, t.NumIn(), numProvided, have, assertion.asyncType)
}

func (assertion *AsyncAssertion) invalidMustPassRepeatedlyError(reason string) error {
	return fmt.Errorf(`Invalid use of MustPassRepeatedly with %s %s

You can learn more at https://onsi.github.io/gomega/#eventually
`, assertion.asyncType, reason)
}

func (assertion *AsyncAssertion) buildActualPoller() (func() (interface{}, error), error) {
	if !assertion.actualIsFunc {
		return func() (interface{}, error) { return assertion.actual, nil }, nil
	}
	actualValue := reflect.ValueOf(assertion.actual)
	actualType := reflect.TypeOf(assertion.actual)
	numIn, numOut, isVariadic := actualType.NumIn(), actualType.NumOut(), actualType.IsVariadic()

	if numIn == 0 && numOut == 0 {
		return nil, assertion.invalidFunctionError(actualType)
	}
	takesGomega, takesContext := false, false
	if numIn > 0 {
		takesGomega, takesContext = actualType.In(0).Implements(gomegaType), actualType.In(0).Implements(contextType)
	}
	if takesGomega && numIn > 1 && actualType.In(1).Implements(contextType) {
		takesContext = true
	}
	if takesContext && len(assertion.argsToForward) > 0 && reflect.TypeOf(assertion.argsToForward[0]).Implements(contextType) {
		takesContext = false
	}
	if !takesGomega && numOut == 0 {
		return nil, assertion.invalidFunctionError(actualType)
	}
	if takesContext && assertion.ctx == nil {
		return nil, assertion.noConfiguredContextForFunctionError()
	}

	var assertionFailure error
	inValues := []reflect.Value{}
	if takesGomega {
		inValues = append(inValues, reflect.ValueOf(NewGomega(assertion.g.DurationBundle).ConfigureWithFailHandler(func(message string, callerSkip ...int) {
			skip := 0
			if len(callerSkip) > 0 {
				skip = callerSkip[0]
			}
			_, file, line, _ := runtime.Caller(skip + 1)
			assertionFailure = &asyncPolledActualError{
				message: fmt.Sprintf("The function passed to %s failed at %s:%d with:\n%s", assertion.asyncType, file, line, message),
			}
			// we throw an asyncGomegaHaltExecutionError so that defer GinkgoRecover() can catch this error if the user makes an assertion in a goroutine
			panic(asyncGomegaHaltExecutionError{})
		})))
	}
	if takesContext {
		inValues = append(inValues, reflect.ValueOf(assertion.ctx))
	}
	for _, arg := range assertion.argsToForward {
		inValues = append(inValues, reflect.ValueOf(arg))
	}

	if !isVariadic && numIn != len(inValues) {
		return nil, assertion.argumentMismatchError(actualType, len(inValues))
	} else if isVariadic && len(inValues) < numIn-1 {
		return nil, assertion.argumentMismatchError(actualType, len(inValues))
	}

	if assertion.mustPassRepeatedly != 1 && assertion.asyncType != AsyncAssertionTypeEventually {
		return nil, assertion.invalidMustPassRepeatedlyError("it can only be used with Eventually")
	}
	if assertion.mustPassRepeatedly < 1 {
		return nil, assertion.invalidMustPassRepeatedlyError("parameter can't be < 1")
	}

	return func() (actual interface{}, err error) {
		var values []reflect.Value
		assertionFailure = nil
		defer func() {
			if numOut == 0 && takesGomega {
				actual = assertionFailure
			} else {
				actual, err = assertion.processReturnValues(values)
				_, isAsyncError := AsPollingSignalError(err)
				if assertionFailure != nil && !isAsyncError {
					err = assertionFailure
				}
			}
			if e := recover(); e != nil {
				if _, isAsyncError := AsPollingSignalError(e); isAsyncError {
					err = e.(error)
				} else if assertionFailure == nil {
					panic(e)
				}
			}
		}()
		values = actualValue.Call(inValues)
		return
	}, nil
}

func (assertion *AsyncAssertion) afterTimeout() <-chan time.Time {
	if assertion.timeoutInterval >= 0 {
		return time.After(assertion.timeoutInterval)
	}

	if assertion.asyncType == AsyncAssertionTypeConsistently {
		return time.After(assertion.g.DurationBundle.ConsistentlyDuration)
	} else {
		if assertion.ctx == nil {
			return time.After(assertion.g.DurationBundle.EventuallyTimeout)
		} else {
			return nil
		}
	}
}

func (assertion *AsyncAssertion) afterPolling() <-chan time.Time {
	if assertion.pollingInterval >= 0 {
		return time.After(assertion.pollingInterval)
	}
	if assertion.asyncType == AsyncAssertionTypeConsistently {
		return time.After(assertion.g.DurationBundle.ConsistentlyPollingInterval)
	} else {
		return time.After(assertion.g.DurationBundle.EventuallyPollingInterval)
	}
}

func (assertion *AsyncAssertion) matcherSaysStopTrying(matcher types.GomegaMatcher, value interface{}) bool {
	if assertion.actualIsFunc || types.MatchMayChangeInTheFuture(matcher, value) {
		return false
	}
	return true
}

func (assertion *AsyncAssertion) pollMatcher(matcher types.GomegaMatcher, value interface{}) (matches bool, err error) {
	defer func() {
		if e := recover(); e != nil {
			if _, isAsyncError := AsPollingSignalError(e); isAsyncError {
				err = e.(error)
			} else {
				panic(e)
			}
		}
	}()

	matches, err = matcher.Match(value)

	return
}

func (assertion *AsyncAssertion) match(matcher types.GomegaMatcher, desiredMatch bool, optionalDescription ...interface{}) bool {
	timer := time.Now()
	timeout := assertion.afterTimeout()
	lock := sync.Mutex{}

	var matches, hasLastValidActual bool
	var actual, lastValidActual interface{}
	var actualErr, matcherErr error
	var oracleMatcherSaysStop bool

	assertion.g.THelper()

	pollActual, buildActualPollerErr := assertion.buildActualPoller()
	if buildActualPollerErr != nil {
		assertion.g.Fail(buildActualPollerErr.Error(), 2+assertion.offset)
		return false
	}

	actual, actualErr = pollActual()
	if actualErr == nil {
		lastValidActual = actual
		hasLastValidActual = true
		oracleMatcherSaysStop = assertion.matcherSaysStopTrying(matcher, actual)
		matches, matcherErr = assertion.pollMatcher(matcher, actual)
	}

	renderError := func(preamble string, err error) string {
		message := ""
		if pollingSignalErr, ok := AsPollingSignalError(err); ok {
			message = err.Error()
			for _, attachment := range pollingSignalErr.Attachments {
				message += fmt.Sprintf("\n%s:\n", attachment.Description)
				message += format.Object(attachment.Object, 1)
			}
		} else {
			message = preamble + "\n" + format.Object(err, 1)
		}
		return message
	}

	messageGenerator := func() string {
		// can be called out of band by Ginkgo if the user requests a progress report
		lock.Lock()
		defer lock.Unlock()
		message := ""

		if actualErr == nil {
			if matcherErr == nil {
				if desiredMatch != matches {
					if desiredMatch {
						message += matcher.FailureMessage(actual)
					} else {
						message += matcher.NegatedFailureMessage(actual)
					}
				} else {
					if assertion.asyncType == AsyncAssertionTypeConsistently {
						message += "There is no failure as the matcher passed to Consistently has not yet failed"
					} else {
						message += "There is no failure as the matcher passed to Eventually succeeded on its most recent iteration"
					}
				}
			} else {
				var fgErr formattedGomegaError
				if errors.As(actualErr, &fgErr) {
					message += fgErr.FormattedGomegaError() + "\n"
				} else {
					message += renderError(fmt.Sprintf("The matcher passed to %s returned the following error:", assertion.asyncType), matcherErr)
				}
			}
		} else {
			var fgErr formattedGomegaError
			if errors.As(actualErr, &fgErr) {
				message += fgErr.FormattedGomegaError() + "\n"
			} else {
				message += renderError(fmt.Sprintf("The function passed to %s returned the following error:", assertion.asyncType), actualErr)
			}
			if hasLastValidActual {
				message += fmt.Sprintf("\nAt one point, however, the function did return successfully.\nYet, %s failed because", assertion.asyncType)
				_, e := matcher.Match(lastValidActual)
				if e != nil {
					message += renderError(" the matcher returned the following error:", e)
				} else {
					message += " the matcher was not satisfied:\n"
					if desiredMatch {
						message += matcher.FailureMessage(lastValidActual)
					} else {
						message += matcher.NegatedFailureMessage(lastValidActual)
					}
				}
			}
		}

		description := assertion.buildDescription(optionalDescription...)
		return fmt.Sprintf("%s%s", description, message)
	}

	fail := func(preamble string) {
		assertion.g.THelper()
		assertion.g.Fail(fmt.Sprintf("%s after %.3fs.\n%s", preamble, time.Since(timer).Seconds(), messageGenerator()), 3+assertion.offset)
	}

	var contextDone <-chan struct{}
	if assertion.ctx != nil {
		contextDone = assertion.ctx.Done()
		if v, ok := assertion.ctx.Value("GINKGO_SPEC_CONTEXT").(contextWithAttachProgressReporter); ok {
			detach := v.AttachProgressReporter(messageGenerator)
			defer detach()
		}
	}

	// Used to count the number of times in a row a step passed
	passedRepeatedlyCount := 0
	for {
		var nextPoll <-chan time.Time = nil
		var isTryAgainAfterError = false

		for _, err := range []error{actualErr, matcherErr} {
			if pollingSignalErr, ok := AsPollingSignalError(err); ok {
				if pollingSignalErr.IsStopTrying() {
					fail("Told to stop trying")
					return false
				}
				if pollingSignalErr.IsTryAgainAfter() {
					nextPoll = time.After(pollingSignalErr.TryAgainDuration())
					isTryAgainAfterError = true
				}
			}
		}

		if actualErr == nil && matcherErr == nil && matches == desiredMatch {
			if assertion.asyncType == AsyncAssertionTypeEventually {
				passedRepeatedlyCount += 1
				if passedRepeatedlyCount == assertion.mustPassRepeatedly {
					return true
				}
			}
		} else if !isTryAgainAfterError {
			if assertion.asyncType == AsyncAssertionTypeConsistently {
				fail("Failed")
				return false
			}
			// Reset the consecutive pass count
			passedRepeatedlyCount = 0
		}

		if oracleMatcherSaysStop {
			if assertion.asyncType == AsyncAssertionTypeEventually {
				fail("No future change is possible.  Bailing out early")
				return false
			} else {
				return true
			}
		}

		if nextPoll == nil {
			nextPoll = assertion.afterPolling()
		}

		select {
		case <-nextPoll:
			a, e := pollActual()
			lock.Lock()
			actual, actualErr = a, e
			lock.Unlock()
			if actualErr == nil {
				lock.Lock()
				lastValidActual = actual
				hasLastValidActual = true
				lock.Unlock()
				oracleMatcherSaysStop = assertion.matcherSaysStopTrying(matcher, actual)
				m, e := assertion.pollMatcher(matcher, actual)
				lock.Lock()
				matches, matcherErr = m, e
				lock.Unlock()
			}
		case <-contextDone:
			fail("Context was cancelled")
			return false
		case <-timeout:
			if assertion.asyncType == AsyncAssertionTypeEventually {
				fail("Timed out")
				return false
			} else {
				if isTryAgainAfterError {
					fail("Timed out while waiting on TryAgainAfter")
					return false
				}
				return true
			}
		}
	}
}
   07070100000992000081A4000000000000000000000001645E367C00000913000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/internal/duration_bundle.go package internal

import (
	"fmt"
	"os"
	"reflect"
	"time"
)

type DurationBundle struct {
	EventuallyTimeout           time.Duration
	EventuallyPollingInterval   time.Duration
	ConsistentlyDuration        time.Duration
	ConsistentlyPollingInterval time.Duration
}

const (
	EventuallyTimeoutEnvVarName         = "GOMEGA_DEFAULT_EVENTUALLY_TIMEOUT"
	EventuallyPollingIntervalEnvVarName = "GOMEGA_DEFAULT_EVENTUALLY_POLLING_INTERVAL"

	ConsistentlyDurationEnvVarName        = "GOMEGA_DEFAULT_CONSISTENTLY_DURATION"
	ConsistentlyPollingIntervalEnvVarName = "GOMEGA_DEFAULT_CONSISTENTLY_POLLING_INTERVAL"
)

func FetchDefaultDurationBundle() DurationBundle {
	return DurationBundle{
		EventuallyTimeout:         durationFromEnv(EventuallyTimeoutEnvVarName, time.Second),
		EventuallyPollingInterval: durationFromEnv(EventuallyPollingIntervalEnvVarName, 10*time.Millisecond),

		ConsistentlyDuration:        durationFromEnv(ConsistentlyDurationEnvVarName, 100*time.Millisecond),
		ConsistentlyPollingInterval: durationFromEnv(ConsistentlyPollingIntervalEnvVarName, 10*time.Millisecond),
	}
}

func durationFromEnv(key string, defaultDuration time.Duration) time.Duration {
	value := os.Getenv(key)
	if value == "" {
		return defaultDuration
	}
	duration, err := time.ParseDuration(value)
	if err != nil {
		panic(fmt.Sprintf("Expected a duration when using %s!  Parse error %v", key, err))
	}
	return duration
}

func toDuration(input interface{}) (time.Duration, error) {
	duration, ok := input.(time.Duration)
	if ok {
		return duration, nil
	}

	value := reflect.ValueOf(input)
	kind := reflect.TypeOf(input).Kind()

	if reflect.Int <= kind && kind <= reflect.Int64 {
		return time.Duration(value.Int()) * time.Second, nil
	} else if reflect.Uint <= kind && kind <= reflect.Uint64 {
		return time.Duration(value.Uint()) * time.Second, nil
	} else if reflect.Float32 <= kind && kind <= reflect.Float64 {
		return time.Duration(value.Float() * float64(time.Second)), nil
	} else if reflect.String == kind {
		duration, err := time.ParseDuration(value.String())
		if err != nil {
			return 0, fmt.Errorf("%#v is not a valid parsable duration string: %w", input, err)
		}
		return duration, nil
	}

	return 0, fmt.Errorf("%#v is not a valid interval. Must be a time.Duration, a parsable duration string, or a number.", input)
}
 07070100000993000081A4000000000000000000000001645E367C00000F20000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/internal/gomega.go  package internal

import (
	"context"
	"time"

	"github.com/onsi/gomega/types"
)

type Gomega struct {
	Fail           types.GomegaFailHandler
	THelper        func()
	DurationBundle DurationBundle
}

func NewGomega(bundle DurationBundle) *Gomega {
	return &Gomega{
		Fail:           nil,
		THelper:        nil,
		DurationBundle: bundle,
	}
}

func (g *Gomega) IsConfigured() bool {
	return g.Fail != nil && g.THelper != nil
}

func (g *Gomega) ConfigureWithFailHandler(fail types.GomegaFailHandler) *Gomega {
	g.Fail = fail
	g.THelper = func() {}
	return g
}

func (g *Gomega) ConfigureWithT(t types.GomegaTestingT) *Gomega {
	g.Fail = func(message string, _ ...int) {
		t.Helper()
		t.Fatalf("\n%s", message)
	}
	g.THelper = t.Helper
	return g
}

func (g *Gomega) Ω(actual interface{}, extra ...interface{}) types.Assertion {
	return g.ExpectWithOffset(0, actual, extra...)
}

func (g *Gomega) Expect(actual interface{}, extra ...interface{}) types.Assertion {
	return g.ExpectWithOffset(0, actual, extra...)
}

func (g *Gomega) ExpectWithOffset(offset int, actual interface{}, extra ...interface{}) types.Assertion {
	return NewAssertion(actual, g, offset, extra...)
}

func (g *Gomega) Eventually(actualOrCtx interface{}, args ...interface{}) types.AsyncAssertion {
	return g.makeAsyncAssertion(AsyncAssertionTypeEventually, 0, actualOrCtx, args...)
}

func (g *Gomega) EventuallyWithOffset(offset int, actualOrCtx interface{}, args ...interface{}) types.AsyncAssertion {
	return g.makeAsyncAssertion(AsyncAssertionTypeEventually, offset, actualOrCtx, args...)
}

func (g *Gomega) Consistently(actualOrCtx interface{}, args ...interface{}) types.AsyncAssertion {
	return g.makeAsyncAssertion(AsyncAssertionTypeConsistently, 0, actualOrCtx, args...)
}

func (g *Gomega) ConsistentlyWithOffset(offset int, actualOrCtx interface{}, args ...interface{}) types.AsyncAssertion {
	return g.makeAsyncAssertion(AsyncAssertionTypeConsistently, offset, actualOrCtx, args...)
}

func (g *Gomega) makeAsyncAssertion(asyncAssertionType AsyncAssertionType, offset int, actualOrCtx interface{}, args ...interface{}) types.AsyncAssertion {
	baseOffset := 3
	timeoutInterval := -time.Duration(1)
	pollingInterval := -time.Duration(1)
	intervals := []interface{}{}
	var ctx context.Context

	actual := actualOrCtx
	startingIndex := 0
	if _, isCtx := actualOrCtx.(context.Context); isCtx && len(args) > 0 {
		// the first argument is a context, we should accept it as the context _only if_ it is **not** the only argumnent **and** the second argument is not a parseable duration
		// this is due to an unfortunate ambiguity in early version of Gomega in which multi-type durations are allowed after the actual
		if _, err := toDuration(args[0]); err != nil {
			ctx = actualOrCtx.(context.Context)
			actual = args[0]
			startingIndex = 1
		}
	}

	for _, arg := range args[startingIndex:] {
		switch v := arg.(type) {
		case context.Context:
			ctx = v
		default:
			intervals = append(intervals, arg)
		}
	}
	var err error
	if len(intervals) > 0 {
		timeoutInterval, err = toDuration(intervals[0])
		if err != nil {
			g.Fail(err.Error(), offset+baseOffset)
		}
	}
	if len(intervals) > 1 {
		pollingInterval, err = toDuration(intervals[1])
		if err != nil {
			g.Fail(err.Error(), offset+baseOffset)
		}
	}

	return NewAsyncAssertion(asyncAssertionType, actual, g, timeoutInterval, pollingInterval, 1, ctx, offset)
}

func (g *Gomega) SetDefaultEventuallyTimeout(t time.Duration) {
	g.DurationBundle.EventuallyTimeout = t
}

func (g *Gomega) SetDefaultEventuallyPollingInterval(t time.Duration) {
	g.DurationBundle.EventuallyPollingInterval = t
}

func (g *Gomega) SetDefaultConsistentlyDuration(t time.Duration) {
	g.DurationBundle.ConsistentlyDuration = t
}

func (g *Gomega) SetDefaultConsistentlyPollingInterval(t time.Duration) {
	g.DurationBundle.ConsistentlyPollingInterval = t
}
07070100000994000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/internal/gutil  07070100000995000081A4000000000000000000000001645E367C0000041E000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/internal/gutil/post_ioutil.go   //go:build go1.16
// +build go1.16

// Package gutil is a replacement for ioutil, which should not be used in new
// code as of Go 1.16. With Go 1.16 and higher, this implementation
// uses the ioutil replacement functions in "io" and "os" with some
// Gomega specifics. This means that we should not get deprecation warnings
// for ioutil when they are added.
package gutil

import (
	"io"
	"os"
)

func NopCloser(r io.Reader) io.ReadCloser {
	return io.NopCloser(r)
}

func ReadAll(r io.Reader) ([]byte, error) {
	return io.ReadAll(r)
}

func ReadDir(dirname string) ([]string, error) {
	entries, err := os.ReadDir(dirname)
	if err != nil {
		return nil, err
	}

	var names []string
	for _, entry := range entries {
		names = append(names, entry.Name())
	}

	return names, nil
}

func ReadFile(filename string) ([]byte, error) {
	return os.ReadFile(filename)
}

func MkdirTemp(dir, pattern string) (string, error) {
	return os.MkdirTemp(dir, pattern)
}

func WriteFile(filename string, data []byte) error {
	return os.WriteFile(filename, data, 0644)
}
  07070100000996000081A4000000000000000000000001645E367C0000040C000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/internal/gutil/using_ioutil.go  //go:build !go1.16
// +build !go1.16

// Package gutil is a replacement for ioutil, which should not be used in new
// code as of Go 1.16. With Go 1.15 and lower, this implementation
// uses the ioutil functions, meaning that although Gomega is not officially
// supported on these versions, it is still likely to work.
package gutil

import (
	"io"
	"io/ioutil"
)

func NopCloser(r io.Reader) io.ReadCloser {
	return ioutil.NopCloser(r)
}

func ReadAll(r io.Reader) ([]byte, error) {
	return ioutil.ReadAll(r)
}

func ReadDir(dirname string) ([]string, error) {
	files, err := ioutil.ReadDir(dirname)
	if err != nil {
		return nil, err
	}

	var names []string
	for _, file := range files {
		names = append(names, file.Name())
	}

	return names, nil
}

func ReadFile(filename string) ([]byte, error) {
	return ioutil.ReadFile(filename)
}

func MkdirTemp(dir, pattern string) (string, error) {
	return ioutil.TempDir(dir, pattern)
}

func WriteFile(filename string, data []byte) error {
	return ioutil.WriteFile(filename, data, 0644)
}
07070100000997000081A4000000000000000000000001645E367C00000982000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/internal/polling_signal_error.go    package internal

import (
	"errors"
	"fmt"
	"time"
)

type PollingSignalErrorType int

const (
	PollingSignalErrorTypeStopTrying PollingSignalErrorType = iota
	PollingSignalErrorTypeTryAgainAfter
)

type PollingSignalError interface {
	error
	Wrap(err error) PollingSignalError
	Attach(description string, obj any) PollingSignalError
	Now()
}

var StopTrying = func(message string) PollingSignalError {
	return &PollingSignalErrorImpl{
		message:                message,
		pollingSignalErrorType: PollingSignalErrorTypeStopTrying,
	}
}

var TryAgainAfter = func(duration time.Duration) PollingSignalError {
	return &PollingSignalErrorImpl{
		message:                fmt.Sprintf("told to try again after %s", duration),
		duration:               duration,
		pollingSignalErrorType: PollingSignalErrorTypeTryAgainAfter,
	}
}

type PollingSignalErrorAttachment struct {
	Description string
	Object      any
}

type PollingSignalErrorImpl struct {
	message                string
	wrappedErr             error
	pollingSignalErrorType PollingSignalErrorType
	duration               time.Duration
	Attachments            []PollingSignalErrorAttachment
}

func (s *PollingSignalErrorImpl) Wrap(err error) PollingSignalError {
	s.wrappedErr = err
	return s
}

func (s *PollingSignalErrorImpl) Attach(description string, obj any) PollingSignalError {
	s.Attachments = append(s.Attachments, PollingSignalErrorAttachment{description, obj})
	return s
}

func (s *PollingSignalErrorImpl) Error() string {
	if s.wrappedErr == nil {
		return s.message
	} else {
		return s.message + ": " + s.wrappedErr.Error()
	}
}

func (s *PollingSignalErrorImpl) Unwrap() error {
	if s == nil {
		return nil
	}
	return s.wrappedErr
}

func (s *PollingSignalErrorImpl) Now() {
	panic(s)
}

func (s *PollingSignalErrorImpl) IsStopTrying() bool {
	return s.pollingSignalErrorType == PollingSignalErrorTypeStopTrying
}

func (s *PollingSignalErrorImpl) IsTryAgainAfter() bool {
	return s.pollingSignalErrorType == PollingSignalErrorTypeTryAgainAfter
}

func (s *PollingSignalErrorImpl) TryAgainDuration() time.Duration {
	return s.duration
}

func AsPollingSignalError(actual interface{}) (*PollingSignalErrorImpl, bool) {
	if actual == nil {
		return nil, false
	}
	if actualErr, ok := actual.(error); ok {
		var target *PollingSignalErrorImpl
		if errors.As(actualErr, &target) {
			return target, true
		} else {
			return nil, false
		}
	}

	return nil, false
}
  07070100000998000081A4000000000000000000000001645E367C000002E5000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/internal/vetoptdesc.go  package internal

import (
	"fmt"

	"github.com/onsi/gomega/types"
)

// vetOptionalDescription vets the optional description args: if it finds any
// Gomega matcher at the beginning it panics. This allows for rendering Gomega
// matchers as part of an optional Description, as long as they're not in the
// first slot.
func vetOptionalDescription(assertion string, optionalDescription ...interface{}) {
	if len(optionalDescription) == 0 {
		return
	}
	if _, isGomegaMatcher := optionalDescription[0].(types.GomegaMatcher); isGomegaMatcher {
		panic(fmt.Sprintf("%s has a GomegaMatcher as the first element of optionalDescription.\n\t"+
			"Do you mean to use And/Or/SatisfyAll/SatisfyAny to combine multiple matchers?",
			assertion))
	}
}
   07070100000999000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers    0707010000099A000081A4000000000000000000000001645E367C0000695B000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers.go package gomega

import (
	"time"

	"github.com/google/go-cmp/cmp"
	"github.com/onsi/gomega/matchers"
	"github.com/onsi/gomega/types"
)

// Equal uses reflect.DeepEqual to compare actual with expected.  Equal is strict about
// types when performing comparisons.
// It is an error for both actual and expected to be nil.  Use BeNil() instead.
func Equal(expected interface{}) types.GomegaMatcher {
	return &matchers.EqualMatcher{
		Expected: expected,
	}
}

// BeEquivalentTo is more lax than Equal, allowing equality between different types.
// This is done by converting actual to have the type of expected before
// attempting equality with reflect.DeepEqual.
// It is an error for actual and expected to be nil.  Use BeNil() instead.
func BeEquivalentTo(expected interface{}) types.GomegaMatcher {
	return &matchers.BeEquivalentToMatcher{
		Expected: expected,
	}
}

// BeComparableTo uses gocmp.Equal from github.com/google/go-cmp (instead of reflect.DeepEqual) to perform a deep comparison.
// You can pass cmp.Option as options.
// It is an error for actual and expected to be nil.  Use BeNil() instead.
func BeComparableTo(expected interface{}, opts ...cmp.Option) types.GomegaMatcher {
	return &matchers.BeComparableToMatcher{
		Expected: expected,
		Options:  opts,
	}
}

// BeIdenticalTo uses the == operator to compare actual with expected.
// BeIdenticalTo is strict about types when performing comparisons.
// It is an error for both actual and expected to be nil.  Use BeNil() instead.
func BeIdenticalTo(expected interface{}) types.GomegaMatcher {
	return &matchers.BeIdenticalToMatcher{
		Expected: expected,
	}
}

// BeNil succeeds if actual is nil
func BeNil() types.GomegaMatcher {
	return &matchers.BeNilMatcher{}
}

// BeTrue succeeds if actual is true
func BeTrue() types.GomegaMatcher {
	return &matchers.BeTrueMatcher{}
}

// BeFalse succeeds if actual is false
func BeFalse() types.GomegaMatcher {
	return &matchers.BeFalseMatcher{}
}

// HaveOccurred succeeds if actual is a non-nil error
// The typical Go error checking pattern looks like:
//
//	err := SomethingThatMightFail()
//	Expect(err).ShouldNot(HaveOccurred())
func HaveOccurred() types.GomegaMatcher {
	return &matchers.HaveOccurredMatcher{}
}

// Succeed passes if actual is a nil error
// Succeed is intended to be used with functions that return a single error value. Instead of
//
//	err := SomethingThatMightFail()
//	Expect(err).ShouldNot(HaveOccurred())
//
// You can write:
//
//	Expect(SomethingThatMightFail()).Should(Succeed())
//
// It is a mistake to use Succeed with a function that has multiple return values.  Gomega's Ω and Expect
// functions automatically trigger failure if any return values after the first return value are non-zero/non-nil.
// This means that Ω(MultiReturnFunc()).ShouldNot(Succeed()) can never pass.
func Succeed() types.GomegaMatcher {
	return &matchers.SucceedMatcher{}
}

// MatchError succeeds if actual is a non-nil error that matches the passed in
// string, error, or matcher.
//
// These are valid use-cases:
//
//  Expect(err).Should(MatchError("an error")) //asserts that err.Error() == "an error"
//  Expect(err).Should(MatchError(SomeError)) //asserts that err == SomeError (via reflect.DeepEqual)
//  Expect(err).Should(MatchError(ContainsSubstring("sprocket not found"))) // asserts that edrr.Error() contains substring "sprocket not found"
//
// It is an error for err to be nil or an object that does not implement the
// Error interface
func MatchError(expected interface{}) types.GomegaMatcher {
	return &matchers.MatchErrorMatcher{
		Expected: expected,
	}
}

// BeClosed succeeds if actual is a closed channel.
// It is an error to pass a non-channel to BeClosed, it is also an error to pass nil
//
// In order to check whether or not the channel is closed, Gomega must try to read from the channel
// (even in the `ShouldNot(BeClosed())` case).  You should keep this in mind if you wish to make subsequent assertions about
// values coming down the channel.
//
// Also, if you are testing that a *buffered* channel is closed you must first read all values out of the channel before
// asserting that it is closed (it is not possible to detect that a buffered-channel has been closed until all its buffered values are read).
//
// Finally, as a corollary: it is an error to check whether or not a send-only channel is closed.
func BeClosed() types.GomegaMatcher {
	return &matchers.BeClosedMatcher{}
}

// Receive succeeds if there is a value to be received on actual.
// Actual must be a channel (and cannot be a send-only channel) -- anything else is an error.
//
// Receive returns immediately and never blocks:
//
// - If there is nothing on the channel `c` then Expect(c).Should(Receive()) will fail and Ω(c).ShouldNot(Receive()) will pass.
//
// - If the channel `c` is closed then Expect(c).Should(Receive()) will fail and Ω(c).ShouldNot(Receive()) will pass.
//
// - If there is something on the channel `c` ready to be read, then Expect(c).Should(Receive()) will pass and Ω(c).ShouldNot(Receive()) will fail.
//
// If you have a go-routine running in the background that will write to channel `c` you can:
//
//	Eventually(c).Should(Receive())
//
// This will timeout if nothing gets sent to `c` (you can modify the timeout interval as you normally do with `Eventually`)
//
// A similar use-case is to assert that no go-routine writes to a channel (for a period of time).  You can do this with `Consistently`:
//
//	Consistently(c).ShouldNot(Receive())
//
// You can pass `Receive` a matcher.  If you do so, it will match the received object against the matcher.  For example:
//
//	Expect(c).Should(Receive(Equal("foo")))
//
// When given a matcher, `Receive` will always fail if there is nothing to be received on the channel.
//
// Passing Receive a matcher is especially useful when paired with Eventually:
//
//	Eventually(c).Should(Receive(ContainSubstring("bar")))
//
// will repeatedly attempt to pull values out of `c` until a value matching "bar" is received.
//
// Finally, if you want to have a reference to the value *sent* to the channel you can pass the `Receive` matcher a pointer to a variable of the appropriate type:
//
//	var myThing thing
//	Eventually(thingChan).Should(Receive(&myThing))
//	Expect(myThing.Sprocket).Should(Equal("foo"))
//	Expect(myThing.IsValid()).Should(BeTrue())
func Receive(args ...interface{}) types.GomegaMatcher {
	var arg interface{}
	if len(args) > 0 {
		arg = args[0]
	}

	return &matchers.ReceiveMatcher{
		Arg: arg,
	}
}

// BeSent succeeds if a value can be sent to actual.
// Actual must be a channel (and cannot be a receive-only channel) that can sent the type of the value passed into BeSent -- anything else is an error.
// In addition, actual must not be closed.
//
// BeSent never blocks:
//
// - If the channel `c` is not ready to receive then Expect(c).Should(BeSent("foo")) will fail immediately
// - If the channel `c` is eventually ready to receive then Eventually(c).Should(BeSent("foo")) will succeed.. presuming the channel becomes ready to receive  before Eventually's timeout
// - If the channel `c` is closed then Expect(c).Should(BeSent("foo")) and Ω(c).ShouldNot(BeSent("foo")) will both fail immediately
//
// Of course, the value is actually sent to the channel.  The point of `BeSent` is less to make an assertion about the availability of the channel (which is typically an implementation detail that your test should not be concerned with).
// Rather, the point of `BeSent` is to make it possible to easily and expressively write tests that can timeout on blocked channel sends.
func BeSent(arg interface{}) types.GomegaMatcher {
	return &matchers.BeSentMatcher{
		Arg: arg,
	}
}

// MatchRegexp succeeds if actual is a string or stringer that matches the
// passed-in regexp.  Optional arguments can be provided to construct a regexp
// via fmt.Sprintf().
func MatchRegexp(regexp string, args ...interface{}) types.GomegaMatcher {
	return &matchers.MatchRegexpMatcher{
		Regexp: regexp,
		Args:   args,
	}
}

// ContainSubstring succeeds if actual is a string or stringer that contains the
// passed-in substring.  Optional arguments can be provided to construct the substring
// via fmt.Sprintf().
func ContainSubstring(substr string, args ...interface{}) types.GomegaMatcher {
	return &matchers.ContainSubstringMatcher{
		Substr: substr,
		Args:   args,
	}
}

// HavePrefix succeeds if actual is a string or stringer that contains the
// passed-in string as a prefix.  Optional arguments can be provided to construct
// via fmt.Sprintf().
func HavePrefix(prefix string, args ...interface{}) types.GomegaMatcher {
	return &matchers.HavePrefixMatcher{
		Prefix: prefix,
		Args:   args,
	}
}

// HaveSuffix succeeds if actual is a string or stringer that contains the
// passed-in string as a suffix.  Optional arguments can be provided to construct
// via fmt.Sprintf().
func HaveSuffix(suffix string, args ...interface{}) types.GomegaMatcher {
	return &matchers.HaveSuffixMatcher{
		Suffix: suffix,
		Args:   args,
	}
}

// MatchJSON succeeds if actual is a string or stringer of JSON that matches
// the expected JSON.  The JSONs are decoded and the resulting objects are compared via
// reflect.DeepEqual so things like key-ordering and whitespace shouldn't matter.
func MatchJSON(json interface{}) types.GomegaMatcher {
	return &matchers.MatchJSONMatcher{
		JSONToMatch: json,
	}
}

// MatchXML succeeds if actual is a string or stringer of XML that matches
// the expected XML.  The XMLs are decoded and the resulting objects are compared via
// reflect.DeepEqual so things like whitespaces shouldn't matter.
func MatchXML(xml interface{}) types.GomegaMatcher {
	return &matchers.MatchXMLMatcher{
		XMLToMatch: xml,
	}
}

// MatchYAML succeeds if actual is a string or stringer of YAML that matches
// the expected YAML.  The YAML's are decoded and the resulting objects are compared via
// reflect.DeepEqual so things like key-ordering and whitespace shouldn't matter.
func MatchYAML(yaml interface{}) types.GomegaMatcher {
	return &matchers.MatchYAMLMatcher{
		YAMLToMatch: yaml,
	}
}

// BeEmpty succeeds if actual is empty.  Actual must be of type string, array, map, chan, or slice.
func BeEmpty() types.GomegaMatcher {
	return &matchers.BeEmptyMatcher{}
}

// HaveLen succeeds if actual has the passed-in length.  Actual must be of type string, array, map, chan, or slice.
func HaveLen(count int) types.GomegaMatcher {
	return &matchers.HaveLenMatcher{
		Count: count,
	}
}

// HaveCap succeeds if actual has the passed-in capacity.  Actual must be of type array, chan, or slice.
func HaveCap(count int) types.GomegaMatcher {
	return &matchers.HaveCapMatcher{
		Count: count,
	}
}

// BeZero succeeds if actual is the zero value for its type or if actual is nil.
func BeZero() types.GomegaMatcher {
	return &matchers.BeZeroMatcher{}
}

// ContainElement succeeds if actual contains the passed in element. By default
// ContainElement() uses Equal() to perform the match, however a matcher can be
// passed in instead:
//
//	Expect([]string{"Foo", "FooBar"}).Should(ContainElement(ContainSubstring("Bar")))
//
// Actual must be an array, slice or map. For maps, ContainElement searches
// through the map's values.
//
// If you want to have a copy of the matching element(s) found you can pass a
// pointer to a variable of the appropriate type. If the variable isn't a slice
// or map, then exactly one match will be expected and returned. If the variable
// is a slice or map, then at least one match is expected and all matches will be
// stored in the variable.
//
//	var findings []string
//	Expect([]string{"Foo", "FooBar"}).Should(ContainElement(ContainSubString("Bar", &findings)))
func ContainElement(element interface{}, result ...interface{}) types.GomegaMatcher {
	return &matchers.ContainElementMatcher{
		Element: element,
		Result:  result,
	}
}

// BeElementOf succeeds if actual is contained in the passed in elements.
// BeElementOf() always uses Equal() to perform the match.
// When the passed in elements are comprised of a single element that is either an Array or Slice, BeElementOf() behaves
// as the reverse of ContainElement() that operates with Equal() to perform the match.
//
//	Expect(2).Should(BeElementOf([]int{1, 2}))
//	Expect(2).Should(BeElementOf([2]int{1, 2}))
//
// Otherwise, BeElementOf() provides a syntactic sugar for Or(Equal(_), Equal(_), ...):
//
//	Expect(2).Should(BeElementOf(1, 2))
//
// Actual must be typed.
func BeElementOf(elements ...interface{}) types.GomegaMatcher {
	return &matchers.BeElementOfMatcher{
		Elements: elements,
	}
}

// BeKeyOf succeeds if actual is contained in the keys of the passed in map.
// BeKeyOf() always uses Equal() to perform the match between actual and the map keys.
//
//	Expect("foo").Should(BeKeyOf(map[string]bool{"foo": true, "bar": false}))
func BeKeyOf(element interface{}) types.GomegaMatcher {
	return &matchers.BeKeyOfMatcher{
		Map: element,
	}
}

// ConsistOf succeeds if actual contains precisely the elements passed into the matcher.  The ordering of the elements does not matter.
// By default ConsistOf() uses Equal() to match the elements, however custom matchers can be passed in instead.  Here are some examples:
//
//	Expect([]string{"Foo", "FooBar"}).Should(ConsistOf("FooBar", "Foo"))
//	Expect([]string{"Foo", "FooBar"}).Should(ConsistOf(ContainSubstring("Bar"), "Foo"))
//	Expect([]string{"Foo", "FooBar"}).Should(ConsistOf(ContainSubstring("Foo"), ContainSubstring("Foo")))
//
// Actual must be an array, slice or map.  For maps, ConsistOf matches against the map's values.
//
// You typically pass variadic arguments to ConsistOf (as in the examples above).  However, if you need to pass in a slice you can provided that it
// is the only element passed in to ConsistOf:
//
//	Expect([]string{"Foo", "FooBar"}).Should(ConsistOf([]string{"FooBar", "Foo"}))
//
// Note that Go's type system does not allow you to write this as ConsistOf([]string{"FooBar", "Foo"}...) as []string and []interface{} are different types - hence the need for this special rule.
func ConsistOf(elements ...interface{}) types.GomegaMatcher {
	return &matchers.ConsistOfMatcher{
		Elements: elements,
	}
}

// HaveExactElemets succeeds if actual contains elements that precisely match the elemets passed into the matcher. The ordering of the elements does matter.
// By default HaveExactElements() uses Equal() to match the elements, however custom matchers can be passed in instead.  Here are some examples:
//
//	Expect([]string{"Foo", "FooBar"}).Should(HaveExactElements("Foo", "FooBar"))
//	Expect([]string{"Foo", "FooBar"}).Should(HaveExactElements("Foo", ContainSubstring("Bar")))
//	Expect([]string{"Foo", "FooBar"}).Should(HaveExactElements(ContainSubstring("Foo"), ContainSubstring("Foo")))
//
// Actual must be an array or slice.
func HaveExactElements(elements ...interface{}) types.GomegaMatcher {
	return &matchers.HaveExactElementsMatcher{
		Elements: elements,
	}
}

// ContainElements succeeds if actual contains the passed in elements. The ordering of the elements does not matter.
// By default ContainElements() uses Equal() to match the elements, however custom matchers can be passed in instead. Here are some examples:
//
//	Expect([]string{"Foo", "FooBar"}).Should(ContainElements("FooBar"))
//	Expect([]string{"Foo", "FooBar"}).Should(ContainElements(ContainSubstring("Bar"), "Foo"))
//
// Actual must be an array, slice or map.
// For maps, ContainElements searches through the map's values.
func ContainElements(elements ...interface{}) types.GomegaMatcher {
	return &matchers.ContainElementsMatcher{
		Elements: elements,
	}
}

// HaveEach succeeds if actual solely contains elements that match the passed in element.
// Please note that if actual is empty, HaveEach always will succeed.
// By default HaveEach() uses Equal() to perform the match, however a
// matcher can be passed in instead:
//
//	Expect([]string{"Foo", "FooBar"}).Should(HaveEach(ContainSubstring("Foo")))
//
// Actual must be an array, slice or map.
// For maps, HaveEach searches through the map's values.
func HaveEach(element interface{}) types.GomegaMatcher {
	return &matchers.HaveEachMatcher{
		Element: element,
	}
}

// HaveKey succeeds if actual is a map with the passed in key.
// By default HaveKey uses Equal() to perform the match, however a
// matcher can be passed in instead:
//
//	Expect(map[string]string{"Foo": "Bar", "BazFoo": "Duck"}).Should(HaveKey(MatchRegexp(`.+Foo$`)))
func HaveKey(key interface{}) types.GomegaMatcher {
	return &matchers.HaveKeyMatcher{
		Key: key,
	}
}

// HaveKeyWithValue succeeds if actual is a map with the passed in key and value.
// By default HaveKeyWithValue uses Equal() to perform the match, however a
// matcher can be passed in instead:
//
//	Expect(map[string]string{"Foo": "Bar", "BazFoo": "Duck"}).Should(HaveKeyWithValue("Foo", "Bar"))
//	Expect(map[string]string{"Foo": "Bar", "BazFoo": "Duck"}).Should(HaveKeyWithValue(MatchRegexp(`.+Foo$`), "Bar"))
func HaveKeyWithValue(key interface{}, value interface{}) types.GomegaMatcher {
	return &matchers.HaveKeyWithValueMatcher{
		Key:   key,
		Value: value,
	}
}

// HaveField succeeds if actual is a struct and the value at the passed in field
// matches the passed in matcher.  By default HaveField used Equal() to perform the match,
// however a matcher can be passed in in stead.
//
// The field must be a string that resolves to the name of a field in the struct.  Structs can be traversed
// using the '.' delimiter.  If the field ends with '()' a method named field is assumed to exist on the struct and is invoked.
// Such methods must take no arguments and return a single value:
//
//	type Book struct {
//	    Title string
//	    Author Person
//	}
//	type Person struct {
//	    FirstName string
//	    LastName string
//	    DOB time.Time
//	}
//	Expect(book).To(HaveField("Title", "Les Miserables"))
//	Expect(book).To(HaveField("Title", ContainSubstring("Les"))
//	Expect(book).To(HaveField("Author.FirstName", Equal("Victor"))
//	Expect(book).To(HaveField("Author.DOB.Year()", BeNumerically("<", 1900))
func HaveField(field string, expected interface{}) types.GomegaMatcher {
	return &matchers.HaveFieldMatcher{
		Field:    field,
		Expected: expected,
	}
}

// HaveExistingField succeeds if actual is a struct and the specified field
// exists.
//
// HaveExistingField can be combined with HaveField in order to cover use cases
// with optional fields. HaveField alone would trigger an error in such situations.
//
//	Expect(MrHarmless).NotTo(And(HaveExistingField("Title"), HaveField("Title", "Supervillain")))
func HaveExistingField(field string) types.GomegaMatcher {
	return &matchers.HaveExistingFieldMatcher{
		Field: field,
	}
}

// HaveValue applies the given matcher to the value of actual, optionally and
// repeatedly dereferencing pointers or taking the concrete value of interfaces.
// Thus, the matcher will always be applied to non-pointer and non-interface
// values only. HaveValue will fail with an error if a pointer or interface is
// nil. It will also fail for more than 31 pointer or interface dereferences to
// guard against mistakenly applying it to arbitrarily deep linked pointers.
//
// HaveValue differs from gstruct.PointTo in that it does not expect actual to
// be a pointer (as gstruct.PointTo does) but instead also accepts non-pointer
// and even interface values.
//
//	actual := 42
//	Expect(actual).To(HaveValue(42))
//	Expect(&actual).To(HaveValue(42))
func HaveValue(matcher types.GomegaMatcher) types.GomegaMatcher {
	return &matchers.HaveValueMatcher{
		Matcher: matcher,
	}
}

// BeNumerically performs numerical assertions in a type-agnostic way.
// Actual and expected should be numbers, though the specific type of
// number is irrelevant (float32, float64, uint8, etc...).
//
// There are six, self-explanatory, supported comparators:
//
//	Expect(1.0).Should(BeNumerically("==", 1))
//	Expect(1.0).Should(BeNumerically("~", 0.999, 0.01))
//	Expect(1.0).Should(BeNumerically(">", 0.9))
//	Expect(1.0).Should(BeNumerically(">=", 1.0))
//	Expect(1.0).Should(BeNumerically("<", 3))
//	Expect(1.0).Should(BeNumerically("<=", 1.0))
func BeNumerically(comparator string, compareTo ...interface{}) types.GomegaMatcher {
	return &matchers.BeNumericallyMatcher{
		Comparator: comparator,
		CompareTo:  compareTo,
	}
}

// BeTemporally compares time.Time's like BeNumerically
// Actual and expected must be time.Time. The comparators are the same as for BeNumerically
//
//	Expect(time.Now()).Should(BeTemporally(">", time.Time{}))
//	Expect(time.Now()).Should(BeTemporally("~", time.Now(), time.Second))
func BeTemporally(comparator string, compareTo time.Time, threshold ...time.Duration) types.GomegaMatcher {
	return &matchers.BeTemporallyMatcher{
		Comparator: comparator,
		CompareTo:  compareTo,
		Threshold:  threshold,
	}
}

// BeAssignableToTypeOf succeeds if actual is assignable to the type of expected.
// It will return an error when one of the values is nil.
//
//	Expect(0).Should(BeAssignableToTypeOf(0))         // Same values
//	Expect(5).Should(BeAssignableToTypeOf(-1))        // different values same type
//	Expect("foo").Should(BeAssignableToTypeOf("bar")) // different values same type
//	Expect(struct{ Foo string }{}).Should(BeAssignableToTypeOf(struct{ Foo string }{}))
func BeAssignableToTypeOf(expected interface{}) types.GomegaMatcher {
	return &matchers.AssignableToTypeOfMatcher{
		Expected: expected,
	}
}

// Panic succeeds if actual is a function that, when invoked, panics.
// Actual must be a function that takes no arguments and returns no results.
func Panic() types.GomegaMatcher {
	return &matchers.PanicMatcher{}
}

// PanicWith succeeds if actual is a function that, when invoked, panics with a specific value.
// Actual must be a function that takes no arguments and returns no results.
//
// By default PanicWith uses Equal() to perform the match, however a
// matcher can be passed in instead:
//
//	Expect(fn).Should(PanicWith(MatchRegexp(`.+Foo$`)))
func PanicWith(expected interface{}) types.GomegaMatcher {
	return &matchers.PanicMatcher{Expected: expected}
}

// BeAnExistingFile succeeds if a file exists.
// Actual must be a string representing the abs path to the file being checked.
func BeAnExistingFile() types.GomegaMatcher {
	return &matchers.BeAnExistingFileMatcher{}
}

// BeARegularFile succeeds if a file exists and is a regular file.
// Actual must be a string representing the abs path to the file being checked.
func BeARegularFile() types.GomegaMatcher {
	return &matchers.BeARegularFileMatcher{}
}

// BeADirectory succeeds if a file exists and is a directory.
// Actual must be a string representing the abs path to the file being checked.
func BeADirectory() types.GomegaMatcher {
	return &matchers.BeADirectoryMatcher{}
}

// HaveHTTPStatus succeeds if the Status or StatusCode field of an HTTP response matches.
// Actual must be either a *http.Response or *httptest.ResponseRecorder.
// Expected must be either an int or a string.
//
//	Expect(resp).Should(HaveHTTPStatus(http.StatusOK))   // asserts that resp.StatusCode == 200
//	Expect(resp).Should(HaveHTTPStatus("404 Not Found")) // asserts that resp.Status == "404 Not Found"
//	Expect(resp).Should(HaveHTTPStatus(http.StatusOK, http.StatusNoContent))   // asserts that resp.StatusCode == 200 || resp.StatusCode == 204
func HaveHTTPStatus(expected ...interface{}) types.GomegaMatcher {
	return &matchers.HaveHTTPStatusMatcher{Expected: expected}
}

// HaveHTTPHeaderWithValue succeeds if the header is found and the value matches.
// Actual must be either a *http.Response or *httptest.ResponseRecorder.
// Expected must be a string header name, followed by a header value which
// can be a string, or another matcher.
func HaveHTTPHeaderWithValue(header string, value interface{}) types.GomegaMatcher {
	return &matchers.HaveHTTPHeaderWithValueMatcher{
		Header: header,
		Value:  value,
	}
}

// HaveHTTPBody matches if the body matches.
// Actual must be either a *http.Response or *httptest.ResponseRecorder.
// Expected must be either a string, []byte, or other matcher
func HaveHTTPBody(expected interface{}) types.GomegaMatcher {
	return &matchers.HaveHTTPBodyMatcher{Expected: expected}
}

// And succeeds only if all of the given matchers succeed.
// The matchers are tried in order, and will fail-fast if one doesn't succeed.
//
//	Expect("hi").To(And(HaveLen(2), Equal("hi"))
//
// And(), Or(), Not() and WithTransform() allow matchers to be composed into complex expressions.
func And(ms ...types.GomegaMatcher) types.GomegaMatcher {
	return &matchers.AndMatcher{Matchers: ms}
}

// SatisfyAll is an alias for And().
//
//	Expect("hi").Should(SatisfyAll(HaveLen(2), Equal("hi")))
func SatisfyAll(matchers ...types.GomegaMatcher) types.GomegaMatcher {
	return And(matchers...)
}

// Or succeeds if any of the given matchers succeed.
// The matchers are tried in order and will return immediately upon the first successful match.
//
//	Expect("hi").To(Or(HaveLen(3), HaveLen(2))
//
// And(), Or(), Not() and WithTransform() allow matchers to be composed into complex expressions.
func Or(ms ...types.GomegaMatcher) types.GomegaMatcher {
	return &matchers.OrMatcher{Matchers: ms}
}

// SatisfyAny is an alias for Or().
//
//	Expect("hi").SatisfyAny(Or(HaveLen(3), HaveLen(2))
func SatisfyAny(matchers ...types.GomegaMatcher) types.GomegaMatcher {
	return Or(matchers...)
}

// Not negates the given matcher; it succeeds if the given matcher fails.
//
//	Expect(1).To(Not(Equal(2))
//
// And(), Or(), Not() and WithTransform() allow matchers to be composed into complex expressions.
func Not(matcher types.GomegaMatcher) types.GomegaMatcher {
	return &matchers.NotMatcher{Matcher: matcher}
}

// WithTransform applies the `transform` to the actual value and matches it against `matcher`.
// The given transform must be either a function of one parameter that returns one value or a
// function of one parameter that returns two values, where the second value must be of the
// error type.
//
//	var plus1 = func(i int) int { return i + 1 }
//	Expect(1).To(WithTransform(plus1, Equal(2))
//
//	 var failingplus1 = func(i int) (int, error) { return 42, "this does not compute" }
//	 Expect(1).To(WithTransform(failingplus1, Equal(2)))
//
// And(), Or(), Not() and WithTransform() allow matchers to be composed into complex expressions.
func WithTransform(transform interface{}, matcher types.GomegaMatcher) types.GomegaMatcher {
	return matchers.NewWithTransformMatcher(transform, matcher)
}

// Satisfy matches the actual value against the `predicate` function.
// The given predicate must be a function of one paramter that returns bool.
//
//	var isEven = func(i int) bool { return i%2 == 0 }
//	Expect(2).To(Satisfy(isEven))
func Satisfy(predicate interface{}) types.GomegaMatcher {
	return matchers.NewSatisfyMatcher(predicate)
}
 0707010000099B000081A4000000000000000000000001645E367C0000072A000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/and.go package matchers

import (
	"fmt"

	"github.com/onsi/gomega/format"
	"github.com/onsi/gomega/types"
)

type AndMatcher struct {
	Matchers []types.GomegaMatcher

	// state
	firstFailedMatcher types.GomegaMatcher
}

func (m *AndMatcher) Match(actual interface{}) (success bool, err error) {
	m.firstFailedMatcher = nil
	for _, matcher := range m.Matchers {
		success, err := matcher.Match(actual)
		if !success || err != nil {
			m.firstFailedMatcher = matcher
			return false, err
		}
	}
	return true, nil
}

func (m *AndMatcher) FailureMessage(actual interface{}) (message string) {
	return m.firstFailedMatcher.FailureMessage(actual)
}

func (m *AndMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	// not the most beautiful list of matchers, but not bad either...
	return format.Message(actual, fmt.Sprintf("To not satisfy all of these matchers: %s", m.Matchers))
}

func (m *AndMatcher) MatchMayChangeInTheFuture(actual interface{}) bool {
	/*
		Example with 3 matchers: A, B, C

		Match evaluates them: T, F, <?>  => F
		So match is currently F, what should MatchMayChangeInTheFuture() return?
		Seems like it only depends on B, since currently B MUST change to allow the result to become T

		Match eval: T, T, T  => T
		So match is currently T, what should MatchMayChangeInTheFuture() return?
		Seems to depend on ANY of them being able to change to F.
	*/

	if m.firstFailedMatcher == nil {
		// so all matchers succeeded.. Any one of them changing would change the result.
		for _, matcher := range m.Matchers {
			if types.MatchMayChangeInTheFuture(matcher, actual) {
				return true
			}
		}
		return false // none of were going to change
	}
	// one of the matchers failed.. it must be able to change in order to affect the result
	return types.MatchMayChangeInTheFuture(m.firstFailedMatcher, actual)
}
  0707010000099C000081A4000000000000000000000001645E367C00000527000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/assignable_to_type_of_matcher.go   // untested sections: 2

package matchers

import (
	"fmt"
	"reflect"

	"github.com/onsi/gomega/format"
)

type AssignableToTypeOfMatcher struct {
	Expected interface{}
}

func (matcher *AssignableToTypeOfMatcher) Match(actual interface{}) (success bool, err error) {
	if actual == nil && matcher.Expected == nil {
		return false, fmt.Errorf("Refusing to compare <nil> to <nil>.\nBe explicit and use BeNil() instead.  This is to avoid mistakes where both sides of an assertion are erroneously uninitialized.")
	} else if matcher.Expected == nil {
		return false, fmt.Errorf("Refusing to compare type to <nil>.\nBe explicit and use BeNil() instead.  This is to avoid mistakes where both sides of an assertion are erroneously uninitialized.")
	} else if actual == nil {
		return false, nil
	}

	actualType := reflect.TypeOf(actual)
	expectedType := reflect.TypeOf(matcher.Expected)

	return actualType.AssignableTo(expectedType), nil
}

func (matcher *AssignableToTypeOfMatcher) FailureMessage(actual interface{}) string {
	return format.Message(actual, fmt.Sprintf("to be assignable to the type: %T", matcher.Expected))
}

func (matcher *AssignableToTypeOfMatcher) NegatedFailureMessage(actual interface{}) string {
	return format.Message(actual, fmt.Sprintf("not to be assignable to the type: %T", matcher.Expected))
}
 0707010000099D000081A4000000000000000000000001645E367C0000016C000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/attributes_slice.go    package matchers

import (
	"encoding/xml"
	"strings"
)

type attributesSlice []xml.Attr

func (attrs attributesSlice) Len() int { return len(attrs) }
func (attrs attributesSlice) Less(i, j int) bool {
	return strings.Compare(attrs[i].Name.Local, attrs[j].Name.Local) == -1
}
func (attrs attributesSlice) Swap(i, j int) { attrs[i], attrs[j] = attrs[j], attrs[i] }
0707010000099E000081A4000000000000000000000001645E367C000004DD000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/be_a_directory.go  // untested sections: 5

package matchers

import (
	"fmt"
	"os"

	"github.com/onsi/gomega/format"
)

type notADirectoryError struct {
	os.FileInfo
}

func (t notADirectoryError) Error() string {
	fileInfo := os.FileInfo(t)
	switch {
	case fileInfo.Mode().IsRegular():
		return "file is a regular file"
	default:
		return fmt.Sprintf("file mode is: %s", fileInfo.Mode().String())
	}
}

type BeADirectoryMatcher struct {
	expected interface{}
	err      error
}

func (matcher *BeADirectoryMatcher) Match(actual interface{}) (success bool, err error) {
	actualFilename, ok := actual.(string)
	if !ok {
		return false, fmt.Errorf("BeADirectoryMatcher matcher expects a file path")
	}

	fileInfo, err := os.Stat(actualFilename)
	if err != nil {
		matcher.err = err
		return false, nil
	}

	if !fileInfo.Mode().IsDir() {
		matcher.err = notADirectoryError{fileInfo}
		return false, nil
	}
	return true, nil
}

func (matcher *BeADirectoryMatcher) FailureMessage(actual interface{}) (message string) {
	return format.Message(actual, fmt.Sprintf("to be a directory: %s", matcher.err))
}

func (matcher *BeADirectoryMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, fmt.Sprintf("not be a directory"))
}
   0707010000099F000081A4000000000000000000000001645E367C000004E9000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/be_a_regular_file.go   // untested sections: 5

package matchers

import (
	"fmt"
	"os"

	"github.com/onsi/gomega/format"
)

type notARegularFileError struct {
	os.FileInfo
}

func (t notARegularFileError) Error() string {
	fileInfo := os.FileInfo(t)
	switch {
	case fileInfo.IsDir():
		return "file is a directory"
	default:
		return fmt.Sprintf("file mode is: %s", fileInfo.Mode().String())
	}
}

type BeARegularFileMatcher struct {
	expected interface{}
	err      error
}

func (matcher *BeARegularFileMatcher) Match(actual interface{}) (success bool, err error) {
	actualFilename, ok := actual.(string)
	if !ok {
		return false, fmt.Errorf("BeARegularFileMatcher matcher expects a file path")
	}

	fileInfo, err := os.Stat(actualFilename)
	if err != nil {
		matcher.err = err
		return false, nil
	}

	if !fileInfo.Mode().IsRegular() {
		matcher.err = notARegularFileError{fileInfo}
		return false, nil
	}
	return true, nil
}

func (matcher *BeARegularFileMatcher) FailureMessage(actual interface{}) (message string) {
	return format.Message(actual, fmt.Sprintf("to be a regular file: %s", matcher.err))
}

func (matcher *BeARegularFileMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, fmt.Sprintf("not be a regular file"))
}
   070701000009A0000081A4000000000000000000000001645E367C00000371000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/be_an_existing_file.go // untested sections: 3

package matchers

import (
	"fmt"
	"os"

	"github.com/onsi/gomega/format"
)

type BeAnExistingFileMatcher struct {
	expected interface{}
}

func (matcher *BeAnExistingFileMatcher) Match(actual interface{}) (success bool, err error) {
	actualFilename, ok := actual.(string)
	if !ok {
		return false, fmt.Errorf("BeAnExistingFileMatcher matcher expects a file path")
	}

	if _, err = os.Stat(actualFilename); err != nil {
		switch {
		case os.IsNotExist(err):
			return false, nil
		default:
			return false, err
		}
	}

	return true, nil
}

func (matcher *BeAnExistingFileMatcher) FailureMessage(actual interface{}) (message string) {
	return format.Message(actual, fmt.Sprintf("to exist"))
}

func (matcher *BeAnExistingFileMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, fmt.Sprintf("not to exist"))
}
   070701000009A1000081A4000000000000000000000001645E367C0000049F000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/be_closed_matcher.go   // untested sections: 2

package matchers

import (
	"fmt"
	"reflect"

	"github.com/onsi/gomega/format"
)

type BeClosedMatcher struct {
}

func (matcher *BeClosedMatcher) Match(actual interface{}) (success bool, err error) {
	if !isChan(actual) {
		return false, fmt.Errorf("BeClosed matcher expects a channel.  Got:\n%s", format.Object(actual, 1))
	}

	channelType := reflect.TypeOf(actual)
	channelValue := reflect.ValueOf(actual)

	if channelType.ChanDir() == reflect.SendDir {
		return false, fmt.Errorf("BeClosed matcher cannot determine if a send-only channel is closed or open.  Got:\n%s", format.Object(actual, 1))
	}

	winnerIndex, _, open := reflect.Select([]reflect.SelectCase{
		{Dir: reflect.SelectRecv, Chan: channelValue},
		{Dir: reflect.SelectDefault},
	})

	var closed bool
	if winnerIndex == 0 {
		closed = !open
	} else if winnerIndex == 1 {
		closed = false
	}

	return closed, nil
}

func (matcher *BeClosedMatcher) FailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "to be closed")
}

func (matcher *BeClosedMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "to be open")
}
 070701000009A2000081A4000000000000000000000001645E367C000005D2000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/be_comparable_to_matcher.go    package matchers

import (
	"bytes"
	"fmt"

	"github.com/google/go-cmp/cmp"
	"github.com/onsi/gomega/format"
)

type BeComparableToMatcher struct {
	Expected interface{}
	Options  cmp.Options
}

func (matcher *BeComparableToMatcher) Match(actual interface{}) (success bool, matchErr error) {
	if actual == nil && matcher.Expected == nil {
		return false, fmt.Errorf("Refusing to compare <nil> to <nil>.\nBe explicit and use BeNil() instead.  This is to avoid mistakes where both sides of an assertion are erroneously uninitialized.")
	}
	// Shortcut for byte slices.
	// Comparing long byte slices with reflect.DeepEqual is very slow,
	// so use bytes.Equal if actual and expected are both byte slices.
	if actualByteSlice, ok := actual.([]byte); ok {
		if expectedByteSlice, ok := matcher.Expected.([]byte); ok {
			return bytes.Equal(actualByteSlice, expectedByteSlice), nil
		}
	}

	defer func() {
		if r := recover(); r != nil {
			success = false
			if err, ok := r.(error); ok {
				matchErr = err
			} else if errMsg, ok := r.(string); ok {
				matchErr = fmt.Errorf(errMsg)
			}
		}
	}()

	return cmp.Equal(actual, matcher.Expected, matcher.Options...), nil
}

func (matcher *BeComparableToMatcher) FailureMessage(actual interface{}) (message string) {
	return cmp.Diff(matcher.Expected, actual, matcher.Options)
}

func (matcher *BeComparableToMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "not to equal", matcher.Expected)
}
  070701000009A3000081A4000000000000000000000001645E367C000003EF000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/be_element_of_matcher.go   // untested sections: 1

package matchers

import (
	"fmt"
	"reflect"

	"github.com/onsi/gomega/format"
)

type BeElementOfMatcher struct {
	Elements []interface{}
}

func (matcher *BeElementOfMatcher) Match(actual interface{}) (success bool, err error) {
	if reflect.TypeOf(actual) == nil {
		return false, fmt.Errorf("BeElement matcher expects actual to be typed")
	}

	var lastError error
	for _, m := range flatten(matcher.Elements) {
		matcher := &EqualMatcher{Expected: m}
		success, err := matcher.Match(actual)
		if err != nil {
			lastError = err
			continue
		}
		if success {
			return true, nil
		}
	}

	return false, lastError
}

func (matcher *BeElementOfMatcher) FailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "to be an element of", presentable(matcher.Elements))
}

func (matcher *BeElementOfMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "not to be an element of", presentable(matcher.Elements))
}
 070701000009A4000081A4000000000000000000000001645E367C000002B1000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/be_empty_matcher.go    // untested sections: 2

package matchers

import (
	"fmt"

	"github.com/onsi/gomega/format"
)

type BeEmptyMatcher struct {
}

func (matcher *BeEmptyMatcher) Match(actual interface{}) (success bool, err error) {
	length, ok := lengthOf(actual)
	if !ok {
		return false, fmt.Errorf("BeEmpty matcher expects a string/array/map/channel/slice.  Got:\n%s", format.Object(actual, 1))
	}

	return length == 0, nil
}

func (matcher *BeEmptyMatcher) FailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "to be empty")
}

func (matcher *BeEmptyMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "not to be empty")
}
   070701000009A5000081A4000000000000000000000001645E367C00000417000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/be_equivalent_to_matcher.go    // untested sections: 2

package matchers

import (
	"fmt"
	"reflect"

	"github.com/onsi/gomega/format"
)

type BeEquivalentToMatcher struct {
	Expected interface{}
}

func (matcher *BeEquivalentToMatcher) Match(actual interface{}) (success bool, err error) {
	if actual == nil && matcher.Expected == nil {
		return false, fmt.Errorf("Both actual and expected must not be nil.")
	}

	convertedActual := actual

	if actual != nil && matcher.Expected != nil && reflect.TypeOf(actual).ConvertibleTo(reflect.TypeOf(matcher.Expected)) {
		convertedActual = reflect.ValueOf(actual).Convert(reflect.TypeOf(matcher.Expected)).Interface()
	}

	return reflect.DeepEqual(convertedActual, matcher.Expected), nil
}

func (matcher *BeEquivalentToMatcher) FailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "to be equivalent to", matcher.Expected)
}

func (matcher *BeEquivalentToMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "not to be equivalent to", matcher.Expected)
}
 070701000009A6000081A4000000000000000000000001645E367C0000027B000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/be_false_matcher.go    // untested sections: 2

package matchers

import (
	"fmt"

	"github.com/onsi/gomega/format"
)

type BeFalseMatcher struct {
}

func (matcher *BeFalseMatcher) Match(actual interface{}) (success bool, err error) {
	if !isBool(actual) {
		return false, fmt.Errorf("Expected a boolean.  Got:\n%s", format.Object(actual, 1))
	}

	return actual == false, nil
}

func (matcher *BeFalseMatcher) FailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "to be false")
}

func (matcher *BeFalseMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "not to be false")
}
 070701000009A7000081A4000000000000000000000001645E367C000003F5000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/be_identical_to.go // untested sections: 2

package matchers

import (
	"fmt"
	"runtime"

	"github.com/onsi/gomega/format"
)

type BeIdenticalToMatcher struct {
	Expected interface{}
}

func (matcher *BeIdenticalToMatcher) Match(actual interface{}) (success bool, matchErr error) {
	if actual == nil && matcher.Expected == nil {
		return false, fmt.Errorf("Refusing to compare <nil> to <nil>.\nBe explicit and use BeNil() instead.  This is to avoid mistakes where both sides of an assertion are erroneously uninitialized.")
	}

	defer func() {
		if r := recover(); r != nil {
			if _, ok := r.(runtime.Error); ok {
				success = false
				matchErr = nil
			}
		}
	}()

	return actual == matcher.Expected, nil
}

func (matcher *BeIdenticalToMatcher) FailureMessage(actual interface{}) string {
	return format.Message(actual, "to be identical to", matcher.Expected)
}

func (matcher *BeIdenticalToMatcher) NegatedFailureMessage(actual interface{}) string {
	return format.Message(actual, "not to be identical to", matcher.Expected)
}
   070701000009A8000081A4000000000000000000000001645E367C00000446000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/be_key_of_matcher.go   package matchers

import (
	"fmt"
	"reflect"

	"github.com/onsi/gomega/format"
)

type BeKeyOfMatcher struct {
	Map interface{}
}

func (matcher *BeKeyOfMatcher) Match(actual interface{}) (success bool, err error) {
	if !isMap(matcher.Map) {
		return false, fmt.Errorf("BeKeyOf matcher needs expected to be a map type")
	}

	if reflect.TypeOf(actual) == nil {
		return false, fmt.Errorf("BeKeyOf matcher expects actual to be typed")
	}

	var lastError error
	for _, key := range reflect.ValueOf(matcher.Map).MapKeys() {
		matcher := &EqualMatcher{Expected: key.Interface()}
		success, err := matcher.Match(actual)
		if err != nil {
			lastError = err
			continue
		}
		if success {
			return true, nil
		}
	}

	return false, lastError
}

func (matcher *BeKeyOfMatcher) FailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "to be a key of", presentable(valuesOf(matcher.Map)))
}

func (matcher *BeKeyOfMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "not to be a key of", presentable(valuesOf(matcher.Map)))
}
  070701000009A9000081A4000000000000000000000001645E367C000001F0000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/be_nil_matcher.go  // untested sections: 2

package matchers

import "github.com/onsi/gomega/format"

type BeNilMatcher struct {
}

func (matcher *BeNilMatcher) Match(actual interface{}) (success bool, err error) {
	return isNil(actual), nil
}

func (matcher *BeNilMatcher) FailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "to be nil")
}

func (matcher *BeNilMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "not to be nil")
}
070701000009AA000081A4000000000000000000000001645E367C00000FE2000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/be_numerically_matcher.go  // untested sections: 4

package matchers

import (
	"fmt"
	"math"

	"github.com/onsi/gomega/format"
)

type BeNumericallyMatcher struct {
	Comparator string
	CompareTo  []interface{}
}

func (matcher *BeNumericallyMatcher) FailureMessage(actual interface{}) (message string) {
	return matcher.FormatFailureMessage(actual, false)
}

func (matcher *BeNumericallyMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return matcher.FormatFailureMessage(actual, true)
}

func (matcher *BeNumericallyMatcher) FormatFailureMessage(actual interface{}, negated bool) (message string) {
	if len(matcher.CompareTo) == 1 {
		message = fmt.Sprintf("to be %s", matcher.Comparator)
	} else {
		message = fmt.Sprintf("to be within %v of %s", matcher.CompareTo[1], matcher.Comparator)
	}
	if negated {
		message = "not " + message
	}
	return format.Message(actual, message, matcher.CompareTo[0])
}

func (matcher *BeNumericallyMatcher) Match(actual interface{}) (success bool, err error) {
	if len(matcher.CompareTo) == 0 || len(matcher.CompareTo) > 2 {
		return false, fmt.Errorf("BeNumerically requires 1 or 2 CompareTo arguments.  Got:\n%s", format.Object(matcher.CompareTo, 1))
	}
	if !isNumber(actual) {
		return false, fmt.Errorf("Expected a number.  Got:\n%s", format.Object(actual, 1))
	}
	if !isNumber(matcher.CompareTo[0]) {
		return false, fmt.Errorf("Expected a number.  Got:\n%s", format.Object(matcher.CompareTo[0], 1))
	}
	if len(matcher.CompareTo) == 2 && !isNumber(matcher.CompareTo[1]) {
		return false, fmt.Errorf("Expected a number.  Got:\n%s", format.Object(matcher.CompareTo[1], 1))
	}

	switch matcher.Comparator {
	case "==", "~", ">", ">=", "<", "<=":
	default:
		return false, fmt.Errorf("Unknown comparator: %s", matcher.Comparator)
	}

	if isFloat(actual) || isFloat(matcher.CompareTo[0]) {
		var secondOperand float64 = 1e-8
		if len(matcher.CompareTo) == 2 {
			secondOperand = toFloat(matcher.CompareTo[1])
		}
		success = matcher.matchFloats(toFloat(actual), toFloat(matcher.CompareTo[0]), secondOperand)
	} else if isInteger(actual) {
		var secondOperand int64 = 0
		if len(matcher.CompareTo) == 2 {
			secondOperand = toInteger(matcher.CompareTo[1])
		}
		success = matcher.matchIntegers(toInteger(actual), toInteger(matcher.CompareTo[0]), secondOperand)
	} else if isUnsignedInteger(actual) {
		var secondOperand uint64 = 0
		if len(matcher.CompareTo) == 2 {
			secondOperand = toUnsignedInteger(matcher.CompareTo[1])
		}
		success = matcher.matchUnsignedIntegers(toUnsignedInteger(actual), toUnsignedInteger(matcher.CompareTo[0]), secondOperand)
	} else {
		return false, fmt.Errorf("Failed to compare:\n%s\n%s:\n%s", format.Object(actual, 1), matcher.Comparator, format.Object(matcher.CompareTo[0], 1))
	}

	return success, nil
}

func (matcher *BeNumericallyMatcher) matchIntegers(actual, compareTo, threshold int64) (success bool) {
	switch matcher.Comparator {
	case "==", "~":
		diff := actual - compareTo
		return -threshold <= diff && diff <= threshold
	case ">":
		return (actual > compareTo)
	case ">=":
		return (actual >= compareTo)
	case "<":
		return (actual < compareTo)
	case "<=":
		return (actual <= compareTo)
	}
	return false
}

func (matcher *BeNumericallyMatcher) matchUnsignedIntegers(actual, compareTo, threshold uint64) (success bool) {
	switch matcher.Comparator {
	case "==", "~":
		if actual < compareTo {
			actual, compareTo = compareTo, actual
		}
		return actual-compareTo <= threshold
	case ">":
		return (actual > compareTo)
	case ">=":
		return (actual >= compareTo)
	case "<":
		return (actual < compareTo)
	case "<=":
		return (actual <= compareTo)
	}
	return false
}

func (matcher *BeNumericallyMatcher) matchFloats(actual, compareTo, threshold float64) (success bool) {
	switch matcher.Comparator {
	case "~":
		return math.Abs(actual-compareTo) <= threshold
	case "==":
		return (actual == compareTo)
	case ">":
		return (actual > compareTo)
	case ">=":
		return (actual >= compareTo)
	case "<":
		return (actual < compareTo)
	case "<=":
		return (actual <= compareTo)
	}
	return false
}
  070701000009AB000081A4000000000000000000000001645E367C00000718000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/be_sent_matcher.go // untested sections: 3

package matchers

import (
	"fmt"
	"reflect"

	"github.com/onsi/gomega/format"
)

type BeSentMatcher struct {
	Arg           interface{}
	channelClosed bool
}

func (matcher *BeSentMatcher) Match(actual interface{}) (success bool, err error) {
	if !isChan(actual) {
		return false, fmt.Errorf("BeSent expects a channel.  Got:\n%s", format.Object(actual, 1))
	}

	channelType := reflect.TypeOf(actual)
	channelValue := reflect.ValueOf(actual)

	if channelType.ChanDir() == reflect.RecvDir {
		return false, fmt.Errorf("BeSent matcher cannot be passed a receive-only channel.  Got:\n%s", format.Object(actual, 1))
	}

	argType := reflect.TypeOf(matcher.Arg)
	assignable := argType.AssignableTo(channelType.Elem())

	if !assignable {
		return false, fmt.Errorf("Cannot pass:\n%s to the channel:\n%s\nThe types don't match.", format.Object(matcher.Arg, 1), format.Object(actual, 1))
	}

	argValue := reflect.ValueOf(matcher.Arg)

	defer func() {
		if e := recover(); e != nil {
			success = false
			err = fmt.Errorf("Cannot send to a closed channel")
			matcher.channelClosed = true
		}
	}()

	winnerIndex, _, _ := reflect.Select([]reflect.SelectCase{
		{Dir: reflect.SelectSend, Chan: channelValue, Send: argValue},
		{Dir: reflect.SelectDefault},
	})

	var didSend bool
	if winnerIndex == 0 {
		didSend = true
	}

	return didSend, nil
}

func (matcher *BeSentMatcher) FailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "to send:", matcher.Arg)
}

func (matcher *BeSentMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "not to send:", matcher.Arg)
}

func (matcher *BeSentMatcher) MatchMayChangeInTheFuture(actual interface{}) bool {
	if !isChan(actual) {
		return false
	}

	return !matcher.channelClosed
}
070701000009AC000081A4000000000000000000000001645E367C000006CD000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/be_temporally_matcher.go   // untested sections: 3

package matchers

import (
	"fmt"
	"time"

	"github.com/onsi/gomega/format"
)

type BeTemporallyMatcher struct {
	Comparator string
	CompareTo  time.Time
	Threshold  []time.Duration
}

func (matcher *BeTemporallyMatcher) FailureMessage(actual interface{}) (message string) {
	return format.Message(actual, fmt.Sprintf("to be %s", matcher.Comparator), matcher.CompareTo)
}

func (matcher *BeTemporallyMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, fmt.Sprintf("not to be %s", matcher.Comparator), matcher.CompareTo)
}

func (matcher *BeTemporallyMatcher) Match(actual interface{}) (bool, error) {
	// predicate to test for time.Time type
	isTime := func(t interface{}) bool {
		_, ok := t.(time.Time)
		return ok
	}

	if !isTime(actual) {
		return false, fmt.Errorf("Expected a time.Time.  Got:\n%s", format.Object(actual, 1))
	}

	switch matcher.Comparator {
	case "==", "~", ">", ">=", "<", "<=":
	default:
		return false, fmt.Errorf("Unknown comparator: %s", matcher.Comparator)
	}

	var threshold = time.Millisecond
	if len(matcher.Threshold) == 1 {
		threshold = matcher.Threshold[0]
	}

	return matcher.matchTimes(actual.(time.Time), matcher.CompareTo, threshold), nil
}

func (matcher *BeTemporallyMatcher) matchTimes(actual, compareTo time.Time, threshold time.Duration) (success bool) {
	switch matcher.Comparator {
	case "==":
		return actual.Equal(compareTo)
	case "~":
		diff := actual.Sub(compareTo)
		return -threshold <= diff && diff <= threshold
	case ">":
		return actual.After(compareTo)
	case ">=":
		return !actual.Before(compareTo)
	case "<":
		return actual.Before(compareTo)
	case "<=":
		return !actual.After(compareTo)
	}
	return false
}
   070701000009AD000081A4000000000000000000000001645E367C00000273000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/be_true_matcher.go // untested sections: 2

package matchers

import (
	"fmt"

	"github.com/onsi/gomega/format"
)

type BeTrueMatcher struct {
}

func (matcher *BeTrueMatcher) Match(actual interface{}) (success bool, err error) {
	if !isBool(actual) {
		return false, fmt.Errorf("Expected a boolean.  Got:\n%s", format.Object(actual, 1))
	}

	return actual.(bool), nil
}

func (matcher *BeTrueMatcher) FailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "to be true")
}

func (matcher *BeTrueMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "not to be true")
}
 070701000009AE000081A4000000000000000000000001645E367C0000027E000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/be_zero_matcher.go package matchers

import (
	"reflect"

	"github.com/onsi/gomega/format"
)

type BeZeroMatcher struct {
}

func (matcher *BeZeroMatcher) Match(actual interface{}) (success bool, err error) {
	if actual == nil {
		return true, nil
	}
	zeroValue := reflect.Zero(reflect.TypeOf(actual)).Interface()

	return reflect.DeepEqual(zeroValue, actual), nil

}

func (matcher *BeZeroMatcher) FailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "to be zero-valued")
}

func (matcher *BeZeroMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "not to be zero-valued")
}
  070701000009AF000081A4000000000000000000000001645E367C00000FE6000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/consist_of.go  // untested sections: 3

package matchers

import (
	"fmt"
	"reflect"

	"github.com/onsi/gomega/format"
	"github.com/onsi/gomega/matchers/support/goraph/bipartitegraph"
)

type ConsistOfMatcher struct {
	Elements        []interface{}
	missingElements []interface{}
	extraElements   []interface{}
}

func (matcher *ConsistOfMatcher) Match(actual interface{}) (success bool, err error) {
	if !isArrayOrSlice(actual) && !isMap(actual) {
		return false, fmt.Errorf("ConsistOf matcher expects an array/slice/map.  Got:\n%s", format.Object(actual, 1))
	}

	matchers := matchers(matcher.Elements)
	values := valuesOf(actual)

	bipartiteGraph, err := bipartitegraph.NewBipartiteGraph(values, matchers, neighbours)
	if err != nil {
		return false, err
	}

	edges := bipartiteGraph.LargestMatching()
	if len(edges) == len(values) && len(edges) == len(matchers) {
		return true, nil
	}

	var missingMatchers []interface{}
	matcher.extraElements, missingMatchers = bipartiteGraph.FreeLeftRight(edges)
	matcher.missingElements = equalMatchersToElements(missingMatchers)

	return false, nil
}

func neighbours(value, matcher interface{}) (bool, error) {
	match, err := matcher.(omegaMatcher).Match(value)
	return match && err == nil, nil
}

func equalMatchersToElements(matchers []interface{}) (elements []interface{}) {
	for _, matcher := range matchers {
		if equalMatcher, ok := matcher.(*EqualMatcher); ok {
			elements = append(elements, equalMatcher.Expected)
		} else if _, ok := matcher.(*BeNilMatcher); ok {
			elements = append(elements, nil)
		} else {
			elements = append(elements, matcher)
		}
	}
	return
}

func flatten(elems []interface{}) []interface{} {
	if len(elems) != 1 || !isArrayOrSlice(elems[0]) {
		return elems
	}

	value := reflect.ValueOf(elems[0])
	flattened := make([]interface{}, value.Len())
	for i := 0; i < value.Len(); i++ {
		flattened[i] = value.Index(i).Interface()
	}
	return flattened
}

func matchers(expectedElems []interface{}) (matchers []interface{}) {
	for _, e := range flatten(expectedElems) {
		if e == nil {
			matchers = append(matchers, &BeNilMatcher{})
		} else if matcher, isMatcher := e.(omegaMatcher); isMatcher {
			matchers = append(matchers, matcher)
		} else {
			matchers = append(matchers, &EqualMatcher{Expected: e})
		}
	}
	return
}

func presentable(elems []interface{}) interface{} {
	elems = flatten(elems)

	if len(elems) == 0 {
		return []interface{}{}
	}

	sv := reflect.ValueOf(elems)
	firstEl := sv.Index(0)
	if firstEl.IsNil() {
		return elems
	}
	tt := firstEl.Elem().Type()
	for i := 1; i < sv.Len(); i++ {
		el := sv.Index(i)
		if el.IsNil() || (sv.Index(i).Elem().Type() != tt) {
			return elems
		}
	}

	ss := reflect.MakeSlice(reflect.SliceOf(tt), sv.Len(), sv.Len())
	for i := 0; i < sv.Len(); i++ {
		ss.Index(i).Set(sv.Index(i).Elem())
	}

	return ss.Interface()
}

func valuesOf(actual interface{}) []interface{} {
	value := reflect.ValueOf(actual)
	values := []interface{}{}
	if isMap(actual) {
		keys := value.MapKeys()
		for i := 0; i < value.Len(); i++ {
			values = append(values, value.MapIndex(keys[i]).Interface())
		}
	} else {
		for i := 0; i < value.Len(); i++ {
			values = append(values, value.Index(i).Interface())
		}
	}

	return values
}

func (matcher *ConsistOfMatcher) FailureMessage(actual interface{}) (message string) {
	message = format.Message(actual, "to consist of", presentable(matcher.Elements))
	message = appendMissingElements(message, matcher.missingElements)
	if len(matcher.extraElements) > 0 {
		message = fmt.Sprintf("%s\nthe extra elements were\n%s", message,
			format.Object(presentable(matcher.extraElements), 1))
	}
	return
}

func appendMissingElements(message string, missingElements []interface{}) string {
	if len(missingElements) == 0 {
		return message
	}
	return fmt.Sprintf("%s\nthe missing elements were\n%s", message,
		format.Object(presentable(missingElements), 1))
}

func (matcher *ConsistOfMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "not to consist of", presentable(matcher.Elements))
}
  070701000009B0000081A4000000000000000000000001645E367C000015B4000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/contain_element_matcher.go // untested sections: 2

package matchers

import (
	"errors"
	"fmt"
	"reflect"

	"github.com/onsi/gomega/format"
)

type ContainElementMatcher struct {
	Element interface{}
	Result  []interface{}
}

func (matcher *ContainElementMatcher) Match(actual interface{}) (success bool, err error) {
	if !isArrayOrSlice(actual) && !isMap(actual) {
		return false, fmt.Errorf("ContainElement matcher expects an array/slice/map.  Got:\n%s", format.Object(actual, 1))
	}

	var actualT reflect.Type
	var result reflect.Value
	switch l := len(matcher.Result); {
	case l > 1:
		return false, errors.New("ContainElement matcher expects at most a single optional pointer to store its findings at")
	case l == 1:
		if reflect.ValueOf(matcher.Result[0]).Kind() != reflect.Ptr {
			return false, fmt.Errorf("ContainElement matcher expects a non-nil pointer to store its findings at.  Got\n%s",
				format.Object(matcher.Result[0], 1))
		}
		actualT = reflect.TypeOf(actual)
		resultReference := matcher.Result[0]
		result = reflect.ValueOf(resultReference).Elem() // what ResultReference points to, to stash away our findings
		switch result.Kind() {
		case reflect.Array:
			return false, fmt.Errorf("ContainElement cannot return findings.  Need *%s, got *%s",
				reflect.SliceOf(actualT.Elem()).String(), result.Type().String())
		case reflect.Slice:
			if !isArrayOrSlice(actual) {
				return false, fmt.Errorf("ContainElement cannot return findings.  Need *%s, got *%s",
					reflect.MapOf(actualT.Key(), actualT.Elem()).String(), result.Type().String())
			}
			if !actualT.Elem().AssignableTo(result.Type().Elem()) {
				return false, fmt.Errorf("ContainElement cannot return findings.  Need *%s, got *%s",
					actualT.String(), result.Type().String())
			}
		case reflect.Map:
			if !isMap(actual) {
				return false, fmt.Errorf("ContainElement cannot return findings.  Need *%s, got *%s",
					actualT.String(), result.Type().String())
			}
			if !actualT.AssignableTo(result.Type()) {
				return false, fmt.Errorf("ContainElement cannot return findings.  Need *%s, got *%s",
					actualT.String(), result.Type().String())
			}
		default:
			if !actualT.Elem().AssignableTo(result.Type()) {
				return false, fmt.Errorf("ContainElement cannot return findings.  Need *%s, got *%s",
					actualT.Elem().String(), result.Type().String())
			}
		}
	}

	elemMatcher, elementIsMatcher := matcher.Element.(omegaMatcher)
	if !elementIsMatcher {
		elemMatcher = &EqualMatcher{Expected: matcher.Element}
	}

	value := reflect.ValueOf(actual)
	var valueAt func(int) interface{}

	var getFindings func() reflect.Value
	var foundAt func(int)

	if isMap(actual) {
		keys := value.MapKeys()
		valueAt = func(i int) interface{} {
			return value.MapIndex(keys[i]).Interface()
		}
		if result.Kind() != reflect.Invalid {
			fm := reflect.MakeMap(actualT)
			getFindings = func() reflect.Value {
				return fm
			}
			foundAt = func(i int) {
				fm.SetMapIndex(keys[i], value.MapIndex(keys[i]))
			}
		}
	} else {
		valueAt = func(i int) interface{} {
			return value.Index(i).Interface()
		}
		if result.Kind() != reflect.Invalid {
			var f reflect.Value
			if result.Kind() == reflect.Slice {
				f = reflect.MakeSlice(result.Type(), 0, 0)
			} else {
				f = reflect.MakeSlice(reflect.SliceOf(result.Type()), 0, 0)
			}
			getFindings = func() reflect.Value {
				return f
			}
			foundAt = func(i int) {
				f = reflect.Append(f, value.Index(i))
			}
		}
	}

	var lastError error
	for i := 0; i < value.Len(); i++ {
		elem := valueAt(i)
		success, err := elemMatcher.Match(elem)
		if err != nil {
			lastError = err
			continue
		}
		if success {
			if result.Kind() == reflect.Invalid {
				return true, nil
			}
			foundAt(i)
		}
	}

	// when the expectation isn't interested in the findings except for success
	// or non-success, then we're done here and return the last matcher error
	// seen, if any, as well as non-success.
	if result.Kind() == reflect.Invalid {
		return false, lastError
	}

	// pick up any findings the test is interested in as it specified a non-nil
	// result reference. However, the expection always is that there are at
	// least one or multiple findings. So, if a result is expected, but we had
	// no findings, then this is an error.
	findings := getFindings()
	if findings.Len() == 0 {
		return false, lastError
	}

	// there's just a single finding and the result is neither a slice nor a map
	// (so it's a scalar): pick the one and only finding and return it in the
	// place the reference points to.
	if findings.Len() == 1 && !isArrayOrSlice(result.Interface()) && !isMap(result.Interface()) {
		if isMap(actual) {
			miter := findings.MapRange()
			miter.Next()
			result.Set(miter.Value())
		} else {
			result.Set(findings.Index(0))
		}
		return true, nil
	}

	// at least one or even multiple findings and a the result references a
	// slice or a map, so all we need to do is to store our findings where the
	// reference points to.
	if !findings.Type().AssignableTo(result.Type()) {
		return false, fmt.Errorf("ContainElement cannot return multiple findings.  Need *%s, got *%s",
			findings.Type().String(), result.Type().String())
	}
	result.Set(findings)
	return true, nil
}

func (matcher *ContainElementMatcher) FailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "to contain element matching", matcher.Element)
}

func (matcher *ContainElementMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "not to contain element matching", matcher.Element)
}
070701000009B1000081A4000000000000000000000001645E367C00000558000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/contain_elements_matcher.go    package matchers

import (
	"fmt"

	"github.com/onsi/gomega/format"
	"github.com/onsi/gomega/matchers/support/goraph/bipartitegraph"
)

type ContainElementsMatcher struct {
	Elements        []interface{}
	missingElements []interface{}
}

func (matcher *ContainElementsMatcher) Match(actual interface{}) (success bool, err error) {
	if !isArrayOrSlice(actual) && !isMap(actual) {
		return false, fmt.Errorf("ContainElements matcher expects an array/slice/map.  Got:\n%s", format.Object(actual, 1))
	}

	matchers := matchers(matcher.Elements)
	bipartiteGraph, err := bipartitegraph.NewBipartiteGraph(valuesOf(actual), matchers, neighbours)
	if err != nil {
		return false, err
	}

	edges := bipartiteGraph.LargestMatching()
	if len(edges) == len(matchers) {
		return true, nil
	}

	_, missingMatchers := bipartiteGraph.FreeLeftRight(edges)
	matcher.missingElements = equalMatchersToElements(missingMatchers)

	return false, nil
}

func (matcher *ContainElementsMatcher) FailureMessage(actual interface{}) (message string) {
	message = format.Message(actual, "to contain elements", presentable(matcher.Elements))
	return appendMissingElements(message, matcher.missingElements)
}

func (matcher *ContainElementsMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "not to contain elements", presentable(matcher.Elements))
}
070701000009B2000081A4000000000000000000000001645E367C00000452000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/contain_substring_matcher.go   // untested sections: 2

package matchers

import (
	"fmt"
	"strings"

	"github.com/onsi/gomega/format"
)

type ContainSubstringMatcher struct {
	Substr string
	Args   []interface{}
}

func (matcher *ContainSubstringMatcher) Match(actual interface{}) (success bool, err error) {
	actualString, ok := toString(actual)
	if !ok {
		return false, fmt.Errorf("ContainSubstring matcher requires a string or stringer.  Got:\n%s", format.Object(actual, 1))
	}

	return strings.Contains(actualString, matcher.stringToMatch()), nil
}

func (matcher *ContainSubstringMatcher) stringToMatch() string {
	stringToMatch := matcher.Substr
	if len(matcher.Args) > 0 {
		stringToMatch = fmt.Sprintf(matcher.Substr, matcher.Args...)
	}
	return stringToMatch
}

func (matcher *ContainSubstringMatcher) FailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "to contain substring", matcher.stringToMatch())
}

func (matcher *ContainSubstringMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "not to contain substring", matcher.stringToMatch())
}
  070701000009B3000081A4000000000000000000000001645E367C0000056D000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/equal_matcher.go   package matchers

import (
	"bytes"
	"fmt"
	"reflect"

	"github.com/onsi/gomega/format"
)

type EqualMatcher struct {
	Expected interface{}
}

func (matcher *EqualMatcher) Match(actual interface{}) (success bool, err error) {
	if actual == nil && matcher.Expected == nil {
		return false, fmt.Errorf("Refusing to compare <nil> to <nil>.\nBe explicit and use BeNil() instead.  This is to avoid mistakes where both sides of an assertion are erroneously uninitialized.")
	}
	// Shortcut for byte slices.
	// Comparing long byte slices with reflect.DeepEqual is very slow,
	// so use bytes.Equal if actual and expected are both byte slices.
	if actualByteSlice, ok := actual.([]byte); ok {
		if expectedByteSlice, ok := matcher.Expected.([]byte); ok {
			return bytes.Equal(actualByteSlice, expectedByteSlice), nil
		}
	}
	return reflect.DeepEqual(actual, matcher.Expected), nil
}

func (matcher *EqualMatcher) FailureMessage(actual interface{}) (message string) {
	actualString, actualOK := actual.(string)
	expectedString, expectedOK := matcher.Expected.(string)
	if actualOK && expectedOK {
		return format.MessageWithDiff(actualString, "to equal", expectedString)
	}

	return format.Message(actual, "to equal", matcher.Expected)
}

func (matcher *EqualMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "not to equal", matcher.Expected)
}
   070701000009B4000081A4000000000000000000000001645E367C00000322000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/have_cap_matcher.go    // untested sections: 2

package matchers

import (
	"fmt"

	"github.com/onsi/gomega/format"
)

type HaveCapMatcher struct {
	Count int
}

func (matcher *HaveCapMatcher) Match(actual interface{}) (success bool, err error) {
	length, ok := capOf(actual)
	if !ok {
		return false, fmt.Errorf("HaveCap matcher expects a array/channel/slice.  Got:\n%s", format.Object(actual, 1))
	}

	return length == matcher.Count, nil
}

func (matcher *HaveCapMatcher) FailureMessage(actual interface{}) (message string) {
	return fmt.Sprintf("Expected\n%s\nto have capacity %d", format.Object(actual, 1), matcher.Count)
}

func (matcher *HaveCapMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return fmt.Sprintf("Expected\n%s\nnot to have capacity %d", format.Object(actual, 1), matcher.Count)
}
  070701000009B5000081A4000000000000000000000001645E367C000006A6000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/have_each_matcher.go   package matchers

import (
	"fmt"
	"reflect"

	"github.com/onsi/gomega/format"
)

type HaveEachMatcher struct {
	Element interface{}
}

func (matcher *HaveEachMatcher) Match(actual interface{}) (success bool, err error) {
	if !isArrayOrSlice(actual) && !isMap(actual) {
		return false, fmt.Errorf("HaveEach matcher expects an array/slice/map.  Got:\n%s",
			format.Object(actual, 1))
	}

	elemMatcher, elementIsMatcher := matcher.Element.(omegaMatcher)
	if !elementIsMatcher {
		elemMatcher = &EqualMatcher{Expected: matcher.Element}
	}

	value := reflect.ValueOf(actual)
	if value.Len() == 0 {
		return false, fmt.Errorf("HaveEach matcher expects a non-empty array/slice/map.  Got:\n%s",
			format.Object(actual, 1))
	}

	var valueAt func(int) interface{}
	if isMap(actual) {
		keys := value.MapKeys()
		valueAt = func(i int) interface{} {
			return value.MapIndex(keys[i]).Interface()
		}
	} else {
		valueAt = func(i int) interface{} {
			return value.Index(i).Interface()
		}
	}

	// if there are no elements, then HaveEach will match.
	for i := 0; i < value.Len(); i++ {
		success, err := elemMatcher.Match(valueAt(i))
		if err != nil {
			return false, err
		}
		if !success {
			return false, nil
		}
	}

	return true, nil
}

// FailureMessage returns a suitable failure message.
func (matcher *HaveEachMatcher) FailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "to contain element matching", matcher.Element)
}

// NegatedFailureMessage returns a suitable negated failure message.
func (matcher *HaveEachMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "not to contain element matching", matcher.Element)
}
  070701000009B6000081A4000000000000000000000001645E367C00000896000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/have_exact_elements.go package matchers

import (
	"fmt"

	"github.com/onsi/gomega/format"
)

type mismatchFailure struct {
	failure string
	index   int
}

type HaveExactElementsMatcher struct {
	Elements         []interface{}
	mismatchFailures []mismatchFailure
	missingIndex     int
	extraIndex       int
}

func (matcher *HaveExactElementsMatcher) Match(actual interface{}) (success bool, err error) {
	matcher.resetState()

	if isMap(actual) {
		return false, fmt.Errorf("error")
	}

	matchers := matchers(matcher.Elements)
	values := valuesOf(actual)

	lenMatchers := len(matchers)
	lenValues := len(values)

	for i := 0; i < lenMatchers || i < lenValues; i++ {
		if i >= lenMatchers {
			matcher.extraIndex = i
			continue
		}

		if i >= lenValues {
			matcher.missingIndex = i
			return
		}

		elemMatcher := matchers[i].(omegaMatcher)
		match, err := elemMatcher.Match(values[i])
		if err != nil || !match {
			matcher.mismatchFailures = append(matcher.mismatchFailures, mismatchFailure{
				index:   i,
				failure: elemMatcher.FailureMessage(values[i]),
			})
		}
	}

	return matcher.missingIndex+matcher.extraIndex+len(matcher.mismatchFailures) == 0, nil
}

func (matcher *HaveExactElementsMatcher) FailureMessage(actual interface{}) (message string) {
	message = format.Message(actual, "to have exact elements with", presentable(matcher.Elements))
	if matcher.missingIndex > 0 {
		message = fmt.Sprintf("%s\nthe missing elements start from index %d", message, matcher.missingIndex)
	}
	if matcher.extraIndex > 0 {
		message = fmt.Sprintf("%s\nthe extra elements start from index %d", message, matcher.extraIndex)
	}
	if len(matcher.mismatchFailures) != 0 {
		message = fmt.Sprintf("%s\nthe mismatch indexes were:", message)
	}
	for _, mismatch := range matcher.mismatchFailures {
		message = fmt.Sprintf("%s\n%d: %s", message, mismatch.index, mismatch.failure)
	}
	return
}

func (matcher *HaveExactElementsMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "not to contain elements", presentable(matcher.Elements))
}

func (matcher *HaveExactElementsMatcher) resetState() {
	matcher.mismatchFailures = nil
	matcher.missingIndex = 0
	matcher.extraIndex = 0
}
  070701000009B7000081A4000000000000000000000001645E367C0000041D000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/have_existing_field_matcher.go package matchers

import (
	"errors"
	"fmt"

	"github.com/onsi/gomega/format"
)

type HaveExistingFieldMatcher struct {
	Field string
}

func (matcher *HaveExistingFieldMatcher) Match(actual interface{}) (success bool, err error) {
	// we don't care about the field's actual value, just about any error in
	// trying to find the field (or method).
	_, err = extractField(actual, matcher.Field, "HaveExistingField")
	if err == nil {
		return true, nil
	}
	var mferr missingFieldError
	if errors.As(err, &mferr) {
		// missing field errors aren't errors in this context, but instead
		// unsuccessful matches.
		return false, nil
	}
	return false, err
}

func (matcher *HaveExistingFieldMatcher) FailureMessage(actual interface{}) (message string) {
	return fmt.Sprintf("Expected\n%s\nto have field '%s'", format.Object(actual, 1), matcher.Field)
}

func (matcher *HaveExistingFieldMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return fmt.Sprintf("Expected\n%s\nnot to have field '%s'", format.Object(actual, 1), matcher.Field)
}
   070701000009B8000081A4000000000000000000000001645E367C00000D18000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/have_field.go  package matchers

import (
	"fmt"
	"reflect"
	"strings"

	"github.com/onsi/gomega/format"
)

// missingFieldError represents a missing field extraction error that
// HaveExistingFieldMatcher can ignore, as opposed to other, sever field
// extraction errors, such as nil pointers, et cetera.
type missingFieldError string

func (e missingFieldError) Error() string {
	return string(e)
}

func extractField(actual interface{}, field string, matchername string) (interface{}, error) {
	fields := strings.SplitN(field, ".", 2)
	actualValue := reflect.ValueOf(actual)

	if actualValue.Kind() == reflect.Ptr {
		actualValue = actualValue.Elem()
	}
	if actualValue == (reflect.Value{}) {
		return nil, fmt.Errorf("%s encountered nil while dereferencing a pointer of type %T.", matchername, actual)
	}

	if actualValue.Kind() != reflect.Struct {
		return nil, fmt.Errorf("%s encountered:\n%s\nWhich is not a struct.", matchername, format.Object(actual, 1))
	}

	var extractedValue reflect.Value

	if strings.HasSuffix(fields[0], "()") {
		extractedValue = actualValue.MethodByName(strings.TrimSuffix(fields[0], "()"))
		if extractedValue == (reflect.Value{}) && actualValue.CanAddr() {
			extractedValue = actualValue.Addr().MethodByName(strings.TrimSuffix(fields[0], "()"))
		}
		if extractedValue == (reflect.Value{}) {
			return nil, missingFieldError(fmt.Sprintf("%s could not find method named '%s' in struct of type %T.", matchername, fields[0], actual))
		}
		t := extractedValue.Type()
		if t.NumIn() != 0 || t.NumOut() != 1 {
			return nil, fmt.Errorf("%s found an invalid method named '%s' in struct of type %T.\nMethods must take no arguments and return exactly one value.", matchername, fields[0], actual)
		}
		extractedValue = extractedValue.Call([]reflect.Value{})[0]
	} else {
		extractedValue = actualValue.FieldByName(fields[0])
		if extractedValue == (reflect.Value{}) {
			return nil, missingFieldError(fmt.Sprintf("%s could not find field named '%s' in struct:\n%s", matchername, fields[0], format.Object(actual, 1)))
		}
	}

	if len(fields) == 1 {
		return extractedValue.Interface(), nil
	} else {
		return extractField(extractedValue.Interface(), fields[1], matchername)
	}
}

type HaveFieldMatcher struct {
	Field    string
	Expected interface{}

	extractedField  interface{}
	expectedMatcher omegaMatcher
}

func (matcher *HaveFieldMatcher) Match(actual interface{}) (success bool, err error) {
	matcher.extractedField, err = extractField(actual, matcher.Field, "HaveField")
	if err != nil {
		return false, err
	}

	var isMatcher bool
	matcher.expectedMatcher, isMatcher = matcher.Expected.(omegaMatcher)
	if !isMatcher {
		matcher.expectedMatcher = &EqualMatcher{Expected: matcher.Expected}
	}

	return matcher.expectedMatcher.Match(matcher.extractedField)
}

func (matcher *HaveFieldMatcher) FailureMessage(actual interface{}) (message string) {
	message = fmt.Sprintf("Value for field '%s' failed to satisfy matcher.\n", matcher.Field)
	message += matcher.expectedMatcher.FailureMessage(matcher.extractedField)

	return message
}

func (matcher *HaveFieldMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	message = fmt.Sprintf("Value for field '%s' satisfied matcher, but should not have.\n", matcher.Field)
	message += matcher.expectedMatcher.NegatedFailureMessage(matcher.extractedField)

	return message
}
070701000009B9000081A4000000000000000000000001645E367C00000B66000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/have_http_body_matcher.go  package matchers

import (
	"fmt"
	"net/http"
	"net/http/httptest"

	"github.com/onsi/gomega/format"
	"github.com/onsi/gomega/internal/gutil"
	"github.com/onsi/gomega/types"
)

type HaveHTTPBodyMatcher struct {
	Expected   interface{}
	cachedBody []byte
}

func (matcher *HaveHTTPBodyMatcher) Match(actual interface{}) (bool, error) {
	body, err := matcher.body(actual)
	if err != nil {
		return false, err
	}

	switch e := matcher.Expected.(type) {
	case string:
		return (&EqualMatcher{Expected: e}).Match(string(body))
	case []byte:
		return (&EqualMatcher{Expected: e}).Match(body)
	case types.GomegaMatcher:
		return e.Match(body)
	default:
		return false, fmt.Errorf("HaveHTTPBody matcher expects string, []byte, or GomegaMatcher. Got:\n%s", format.Object(matcher.Expected, 1))
	}
}

func (matcher *HaveHTTPBodyMatcher) FailureMessage(actual interface{}) (message string) {
	body, err := matcher.body(actual)
	if err != nil {
		return fmt.Sprintf("failed to read body: %s", err)
	}

	switch e := matcher.Expected.(type) {
	case string:
		return (&EqualMatcher{Expected: e}).FailureMessage(string(body))
	case []byte:
		return (&EqualMatcher{Expected: e}).FailureMessage(body)
	case types.GomegaMatcher:
		return e.FailureMessage(body)
	default:
		return fmt.Sprintf("HaveHTTPBody matcher expects string, []byte, or GomegaMatcher. Got:\n%s", format.Object(matcher.Expected, 1))
	}
}

func (matcher *HaveHTTPBodyMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	body, err := matcher.body(actual)
	if err != nil {
		return fmt.Sprintf("failed to read body: %s", err)
	}

	switch e := matcher.Expected.(type) {
	case string:
		return (&EqualMatcher{Expected: e}).NegatedFailureMessage(string(body))
	case []byte:
		return (&EqualMatcher{Expected: e}).NegatedFailureMessage(body)
	case types.GomegaMatcher:
		return e.NegatedFailureMessage(body)
	default:
		return fmt.Sprintf("HaveHTTPBody matcher expects string, []byte, or GomegaMatcher. Got:\n%s", format.Object(matcher.Expected, 1))
	}
}

// body returns the body. It is cached because once we read it in Match()
// the Reader is closed and it is not readable again in FailureMessage()
// or NegatedFailureMessage()
func (matcher *HaveHTTPBodyMatcher) body(actual interface{}) ([]byte, error) {
	if matcher.cachedBody != nil {
		return matcher.cachedBody, nil
	}

	body := func(a *http.Response) ([]byte, error) {
		if a.Body != nil {
			defer a.Body.Close()
			var err error
			matcher.cachedBody, err = gutil.ReadAll(a.Body)
			if err != nil {
				return nil, fmt.Errorf("error reading response body: %w", err)
			}
		}
		return matcher.cachedBody, nil
	}

	switch a := actual.(type) {
	case *http.Response:
		return body(a)
	case *httptest.ResponseRecorder:
		return body(a.Result())
	default:
		return nil, fmt.Errorf("HaveHTTPBody matcher expects *http.Response or *httptest.ResponseRecorder. Got:\n%s", format.Object(actual, 1))
	}

}
  070701000009BA000081A4000000000000000000000001645E367C00000904000000000000000000000000000000000000006200000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/have_http_header_with_value_matcher.go package matchers

import (
	"fmt"
	"net/http"
	"net/http/httptest"

	"github.com/onsi/gomega/format"
	"github.com/onsi/gomega/types"
)

type HaveHTTPHeaderWithValueMatcher struct {
	Header string
	Value  interface{}
}

func (matcher *HaveHTTPHeaderWithValueMatcher) Match(actual interface{}) (success bool, err error) {
	headerValue, err := matcher.extractHeader(actual)
	if err != nil {
		return false, err
	}

	headerMatcher, err := matcher.getSubMatcher()
	if err != nil {
		return false, err
	}

	return headerMatcher.Match(headerValue)
}

func (matcher *HaveHTTPHeaderWithValueMatcher) FailureMessage(actual interface{}) string {
	headerValue, err := matcher.extractHeader(actual)
	if err != nil {
		panic(err) // protected by Match()
	}

	headerMatcher, err := matcher.getSubMatcher()
	if err != nil {
		panic(err) // protected by Match()
	}

	diff := format.IndentString(headerMatcher.FailureMessage(headerValue), 1)
	return fmt.Sprintf("HTTP header %q:\n%s", matcher.Header, diff)
}

func (matcher *HaveHTTPHeaderWithValueMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	headerValue, err := matcher.extractHeader(actual)
	if err != nil {
		panic(err) // protected by Match()
	}

	headerMatcher, err := matcher.getSubMatcher()
	if err != nil {
		panic(err) // protected by Match()
	}

	diff := format.IndentString(headerMatcher.NegatedFailureMessage(headerValue), 1)
	return fmt.Sprintf("HTTP header %q:\n%s", matcher.Header, diff)
}

func (matcher *HaveHTTPHeaderWithValueMatcher) getSubMatcher() (types.GomegaMatcher, error) {
	switch m := matcher.Value.(type) {
	case string:
		return &EqualMatcher{Expected: matcher.Value}, nil
	case types.GomegaMatcher:
		return m, nil
	default:
		return nil, fmt.Errorf("HaveHTTPHeaderWithValue matcher must be passed a string or a GomegaMatcher. Got:\n%s", format.Object(matcher.Value, 1))
	}
}

func (matcher *HaveHTTPHeaderWithValueMatcher) extractHeader(actual interface{}) (string, error) {
	switch r := actual.(type) {
	case *http.Response:
		return r.Header.Get(matcher.Header), nil
	case *httptest.ResponseRecorder:
		return r.Result().Header.Get(matcher.Header), nil
	default:
		return "", fmt.Errorf("HaveHTTPHeaderWithValue matcher expects *http.Response or *httptest.ResponseRecorder. Got:\n%s", format.Object(actual, 1))
	}
}
070701000009BB000081A4000000000000000000000001645E367C00000AC6000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/have_http_status_matcher.go    package matchers

import (
	"fmt"
	"net/http"
	"net/http/httptest"
	"reflect"
	"strings"

	"github.com/onsi/gomega/format"
	"github.com/onsi/gomega/internal/gutil"
)

type HaveHTTPStatusMatcher struct {
	Expected []interface{}
}

func (matcher *HaveHTTPStatusMatcher) Match(actual interface{}) (success bool, err error) {
	var resp *http.Response
	switch a := actual.(type) {
	case *http.Response:
		resp = a
	case *httptest.ResponseRecorder:
		resp = a.Result()
	default:
		return false, fmt.Errorf("HaveHTTPStatus matcher expects *http.Response or *httptest.ResponseRecorder. Got:\n%s", format.Object(actual, 1))
	}

	if len(matcher.Expected) == 0 {
		return false, fmt.Errorf("HaveHTTPStatus matcher must be passed an int or a string. Got nothing")
	}

	for _, expected := range matcher.Expected {
		switch e := expected.(type) {
		case int:
			if resp.StatusCode == e {
				return true, nil
			}
		case string:
			if resp.Status == e {
				return true, nil
			}
		default:
			return false, fmt.Errorf("HaveHTTPStatus matcher must be passed int or string types. Got:\n%s", format.Object(expected, 1))
		}
	}

	return false, nil
}

func (matcher *HaveHTTPStatusMatcher) FailureMessage(actual interface{}) (message string) {
	return fmt.Sprintf("Expected\n%s\n%s\n%s", formatHttpResponse(actual), "to have HTTP status", matcher.expectedString())
}

func (matcher *HaveHTTPStatusMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return fmt.Sprintf("Expected\n%s\n%s\n%s", formatHttpResponse(actual), "not to have HTTP status", matcher.expectedString())
}

func (matcher *HaveHTTPStatusMatcher) expectedString() string {
	var lines []string
	for _, expected := range matcher.Expected {
		lines = append(lines, format.Object(expected, 1))
	}
	return strings.Join(lines, "\n")
}

func formatHttpResponse(input interface{}) string {
	var resp *http.Response
	switch r := input.(type) {
	case *http.Response:
		resp = r
	case *httptest.ResponseRecorder:
		resp = r.Result()
	default:
		return "cannot format invalid HTTP response"
	}

	body := "<nil>"
	if resp.Body != nil {
		defer resp.Body.Close()
		data, err := gutil.ReadAll(resp.Body)
		if err != nil {
			data = []byte("<error reading body>")
		}
		body = format.Object(string(data), 0)
	}

	var s strings.Builder
	s.WriteString(fmt.Sprintf("%s<%s>: {\n", format.Indent, reflect.TypeOf(input)))
	s.WriteString(fmt.Sprintf("%s%sStatus:     %s\n", format.Indent, format.Indent, format.Object(resp.Status, 0)))
	s.WriteString(fmt.Sprintf("%s%sStatusCode: %s\n", format.Indent, format.Indent, format.Object(resp.StatusCode, 0)))
	s.WriteString(fmt.Sprintf("%s%sBody:       %s\n", format.Indent, format.Indent, body))
	s.WriteString(fmt.Sprintf("%s}", format.Indent))

	return s.String()
}
  070701000009BC000081A4000000000000000000000001645E367C00000569000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/have_key_matcher.go    // untested sections: 6

package matchers

import (
	"fmt"
	"reflect"

	"github.com/onsi/gomega/format"
)

type HaveKeyMatcher struct {
	Key interface{}
}

func (matcher *HaveKeyMatcher) Match(actual interface{}) (success bool, err error) {
	if !isMap(actual) {
		return false, fmt.Errorf("HaveKey matcher expects a map.  Got:%s", format.Object(actual, 1))
	}

	keyMatcher, keyIsMatcher := matcher.Key.(omegaMatcher)
	if !keyIsMatcher {
		keyMatcher = &EqualMatcher{Expected: matcher.Key}
	}

	keys := reflect.ValueOf(actual).MapKeys()
	for i := 0; i < len(keys); i++ {
		success, err := keyMatcher.Match(keys[i].Interface())
		if err != nil {
			return false, fmt.Errorf("HaveKey's key matcher failed with:\n%s%s", format.Indent, err.Error())
		}
		if success {
			return true, nil
		}
	}

	return false, nil
}

func (matcher *HaveKeyMatcher) FailureMessage(actual interface{}) (message string) {
	switch matcher.Key.(type) {
	case omegaMatcher:
		return format.Message(actual, "to have key matching", matcher.Key)
	default:
		return format.Message(actual, "to have key", matcher.Key)
	}
}

func (matcher *HaveKeyMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	switch matcher.Key.(type) {
	case omegaMatcher:
		return format.Message(actual, "not to have key matching", matcher.Key)
	default:
		return format.Message(actual, "not to have key", matcher.Key)
	}
}
   070701000009BD000081A4000000000000000000000001645E367C0000083D000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/have_key_with_value_matcher.go // untested sections:10

package matchers

import (
	"fmt"
	"reflect"

	"github.com/onsi/gomega/format"
)

type HaveKeyWithValueMatcher struct {
	Key   interface{}
	Value interface{}
}

func (matcher *HaveKeyWithValueMatcher) Match(actual interface{}) (success bool, err error) {
	if !isMap(actual) {
		return false, fmt.Errorf("HaveKeyWithValue matcher expects a map.  Got:%s", format.Object(actual, 1))
	}

	keyMatcher, keyIsMatcher := matcher.Key.(omegaMatcher)
	if !keyIsMatcher {
		keyMatcher = &EqualMatcher{Expected: matcher.Key}
	}

	valueMatcher, valueIsMatcher := matcher.Value.(omegaMatcher)
	if !valueIsMatcher {
		valueMatcher = &EqualMatcher{Expected: matcher.Value}
	}

	keys := reflect.ValueOf(actual).MapKeys()
	for i := 0; i < len(keys); i++ {
		success, err := keyMatcher.Match(keys[i].Interface())
		if err != nil {
			return false, fmt.Errorf("HaveKeyWithValue's key matcher failed with:\n%s%s", format.Indent, err.Error())
		}
		if success {
			actualValue := reflect.ValueOf(actual).MapIndex(keys[i])
			success, err := valueMatcher.Match(actualValue.Interface())
			if err != nil {
				return false, fmt.Errorf("HaveKeyWithValue's value matcher failed with:\n%s%s", format.Indent, err.Error())
			}
			return success, nil
		}
	}

	return false, nil
}

func (matcher *HaveKeyWithValueMatcher) FailureMessage(actual interface{}) (message string) {
	str := "to have {key: value}"
	if _, ok := matcher.Key.(omegaMatcher); ok {
		str += " matching"
	} else if _, ok := matcher.Value.(omegaMatcher); ok {
		str += " matching"
	}

	expect := make(map[interface{}]interface{}, 1)
	expect[matcher.Key] = matcher.Value
	return format.Message(actual, str, expect)
}

func (matcher *HaveKeyWithValueMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	kStr := "not to have key"
	if _, ok := matcher.Key.(omegaMatcher); ok {
		kStr = "not to have key matching"
	}

	vStr := "or that key's value not be"
	if _, ok := matcher.Value.(omegaMatcher); ok {
		vStr = "or to have that key's value not matching"
	}

	return format.Message(actual, kStr, matcher.Key, vStr, matcher.Value)
}
   070701000009BE000081A4000000000000000000000001645E367C00000313000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/have_len_matcher.go    package matchers

import (
	"fmt"

	"github.com/onsi/gomega/format"
)

type HaveLenMatcher struct {
	Count int
}

func (matcher *HaveLenMatcher) Match(actual interface{}) (success bool, err error) {
	length, ok := lengthOf(actual)
	if !ok {
		return false, fmt.Errorf("HaveLen matcher expects a string/array/map/channel/slice.  Got:\n%s", format.Object(actual, 1))
	}

	return length == matcher.Count, nil
}

func (matcher *HaveLenMatcher) FailureMessage(actual interface{}) (message string) {
	return fmt.Sprintf("Expected\n%s\nto have length %d", format.Object(actual, 1), matcher.Count)
}

func (matcher *HaveLenMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return fmt.Sprintf("Expected\n%s\nnot to have length %d", format.Object(actual, 1), matcher.Count)
}
 070701000009BF000081A4000000000000000000000001645E367C00000374000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/have_occurred_matcher.go   // untested sections: 2

package matchers

import (
	"fmt"

	"github.com/onsi/gomega/format"
)

type HaveOccurredMatcher struct {
}

func (matcher *HaveOccurredMatcher) Match(actual interface{}) (success bool, err error) {
	// is purely nil?
	if actual == nil {
		return false, nil
	}

	// must be an 'error' type
	if !isError(actual) {
		return false, fmt.Errorf("Expected an error-type.  Got:\n%s", format.Object(actual, 1))
	}

	// must be non-nil (or a pointer to a non-nil)
	return !isNil(actual), nil
}

func (matcher *HaveOccurredMatcher) FailureMessage(actual interface{}) (message string) {
	return fmt.Sprintf("Expected an error to have occurred.  Got:\n%s", format.Object(actual, 1))
}

func (matcher *HaveOccurredMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return fmt.Sprintf("Unexpected error:\n%s\n%s", format.Object(actual, 1), "occurred")
}
070701000009C0000081A4000000000000000000000001645E367C000003ED000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/have_prefix_matcher.go package matchers

import (
	"fmt"

	"github.com/onsi/gomega/format"
)

type HavePrefixMatcher struct {
	Prefix string
	Args   []interface{}
}

func (matcher *HavePrefixMatcher) Match(actual interface{}) (success bool, err error) {
	actualString, ok := toString(actual)
	if !ok {
		return false, fmt.Errorf("HavePrefix matcher requires a string or stringer.  Got:\n%s", format.Object(actual, 1))
	}
	prefix := matcher.prefix()
	return len(actualString) >= len(prefix) && actualString[0:len(prefix)] == prefix, nil
}

func (matcher *HavePrefixMatcher) prefix() string {
	if len(matcher.Args) > 0 {
		return fmt.Sprintf(matcher.Prefix, matcher.Args...)
	}
	return matcher.Prefix
}

func (matcher *HavePrefixMatcher) FailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "to have prefix", matcher.prefix())
}

func (matcher *HavePrefixMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "not to have prefix", matcher.prefix())
}
   070701000009C1000081A4000000000000000000000001645E367C000003FE000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/have_suffix_matcher.go package matchers

import (
	"fmt"

	"github.com/onsi/gomega/format"
)

type HaveSuffixMatcher struct {
	Suffix string
	Args   []interface{}
}

func (matcher *HaveSuffixMatcher) Match(actual interface{}) (success bool, err error) {
	actualString, ok := toString(actual)
	if !ok {
		return false, fmt.Errorf("HaveSuffix matcher requires a string or stringer.  Got:\n%s", format.Object(actual, 1))
	}
	suffix := matcher.suffix()
	return len(actualString) >= len(suffix) && actualString[len(actualString)-len(suffix):] == suffix, nil
}

func (matcher *HaveSuffixMatcher) suffix() string {
	if len(matcher.Args) > 0 {
		return fmt.Sprintf(matcher.Suffix, matcher.Args...)
	}
	return matcher.Suffix
}

func (matcher *HaveSuffixMatcher) FailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "to have suffix", matcher.suffix())
}

func (matcher *HaveSuffixMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "not to have suffix", matcher.suffix())
}
  070701000009C2000081A4000000000000000000000001645E367C00000657000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/have_value.go  package matchers

import (
	"errors"
	"reflect"

	"github.com/onsi/gomega/format"
	"github.com/onsi/gomega/types"
)

const maxIndirections = 31

type HaveValueMatcher struct {
	Matcher        types.GomegaMatcher // the matcher to apply to the "resolved" actual value.
	resolvedActual interface{}         // the ("resolved") value.
}

func (m *HaveValueMatcher) Match(actual interface{}) (bool, error) {
	val := reflect.ValueOf(actual)
	for allowedIndirs := maxIndirections; allowedIndirs > 0; allowedIndirs-- {
		// return an error if value isn't valid. Please note that we cannot
		// check for nil here, as we might not deal with a pointer or interface
		// at this point.
		if !val.IsValid() {
			return false, errors.New(format.Message(
				actual, "not to be <nil>"))
		}
		switch val.Kind() {
		case reflect.Ptr, reflect.Interface:
			// resolve pointers and interfaces to their values, then rinse and
			// repeat.
			if val.IsNil() {
				return false, errors.New(format.Message(
					actual, "not to be <nil>"))
			}
			val = val.Elem()
			continue
		default:
			// forward the final value to the specified matcher.
			m.resolvedActual = val.Interface()
			return m.Matcher.Match(m.resolvedActual)
		}
	}
	// too many indirections: extreme star gazing, indeed...?
	return false, errors.New(format.Message(actual, "too many indirections"))
}

func (m *HaveValueMatcher) FailureMessage(_ interface{}) (message string) {
	return m.Matcher.FailureMessage(m.resolvedActual)
}

func (m *HaveValueMatcher) NegatedFailureMessage(_ interface{}) (message string) {
	return m.Matcher.NegatedFailureMessage(m.resolvedActual)
}
 070701000009C3000081A4000000000000000000000001645E367C00000658000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/match_error_matcher.go package matchers

import (
	"errors"
	"fmt"
	"reflect"

	"github.com/onsi/gomega/format"
)

type MatchErrorMatcher struct {
	Expected interface{}
}

func (matcher *MatchErrorMatcher) Match(actual interface{}) (success bool, err error) {
	if isNil(actual) {
		return false, fmt.Errorf("Expected an error, got nil")
	}

	if !isError(actual) {
		return false, fmt.Errorf("Expected an error.  Got:\n%s", format.Object(actual, 1))
	}

	actualErr := actual.(error)
	expected := matcher.Expected

	if isError(expected) {
		// first try the built-in errors.Is
		if errors.Is(actualErr, expected.(error)) {
			return true, nil
		}
		// if not, try DeepEqual along the error chain
		for unwrapped := actualErr; unwrapped != nil; unwrapped = errors.Unwrap(unwrapped) {
			if reflect.DeepEqual(unwrapped, expected) {
				return true, nil
			}
		}
		return false, nil
	}

	if isString(expected) {
		return actualErr.Error() == expected, nil
	}

	var subMatcher omegaMatcher
	var hasSubMatcher bool
	if expected != nil {
		subMatcher, hasSubMatcher = (expected).(omegaMatcher)
		if hasSubMatcher {
			return subMatcher.Match(actualErr.Error())
		}
	}

	return false, fmt.Errorf(
		"MatchError must be passed an error, a string, or a Matcher that can match on strings. Got:\n%s",
		format.Object(expected, 1))
}

func (matcher *MatchErrorMatcher) FailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "to match error", matcher.Expected)
}

func (matcher *MatchErrorMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "not to match error", matcher.Expected)
}
070701000009C4000081A4000000000000000000000001645E367C000008C3000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/match_json_matcher.go  package matchers

import (
	"bytes"
	"encoding/json"
	"fmt"

	"github.com/onsi/gomega/format"
)

type MatchJSONMatcher struct {
	JSONToMatch      interface{}
	firstFailurePath []interface{}
}

func (matcher *MatchJSONMatcher) Match(actual interface{}) (success bool, err error) {
	actualString, expectedString, err := matcher.prettyPrint(actual)
	if err != nil {
		return false, err
	}

	var aval interface{}
	var eval interface{}

	// this is guarded by prettyPrint
	json.Unmarshal([]byte(actualString), &aval)
	json.Unmarshal([]byte(expectedString), &eval)
	var equal bool
	equal, matcher.firstFailurePath = deepEqual(aval, eval)
	return equal, nil
}

func (matcher *MatchJSONMatcher) FailureMessage(actual interface{}) (message string) {
	actualString, expectedString, _ := matcher.prettyPrint(actual)
	return formattedMessage(format.Message(actualString, "to match JSON of", expectedString), matcher.firstFailurePath)
}

func (matcher *MatchJSONMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	actualString, expectedString, _ := matcher.prettyPrint(actual)
	return formattedMessage(format.Message(actualString, "not to match JSON of", expectedString), matcher.firstFailurePath)
}

func (matcher *MatchJSONMatcher) prettyPrint(actual interface{}) (actualFormatted, expectedFormatted string, err error) {
	actualString, ok := toString(actual)
	if !ok {
		return "", "", fmt.Errorf("MatchJSONMatcher matcher requires a string, stringer, or []byte.  Got actual:\n%s", format.Object(actual, 1))
	}
	expectedString, ok := toString(matcher.JSONToMatch)
	if !ok {
		return "", "", fmt.Errorf("MatchJSONMatcher matcher requires a string, stringer, or []byte.  Got expected:\n%s", format.Object(matcher.JSONToMatch, 1))
	}

	abuf := new(bytes.Buffer)
	ebuf := new(bytes.Buffer)

	if err := json.Indent(abuf, []byte(actualString), "", "  "); err != nil {
		return "", "", fmt.Errorf("Actual '%s' should be valid JSON, but it is not.\nUnderlying error:%s", actualString, err)
	}

	if err := json.Indent(ebuf, []byte(expectedString), "", "  "); err != nil {
		return "", "", fmt.Errorf("Expected '%s' should be valid JSON, but it is not.\nUnderlying error:%s", expectedString, err)
	}

	return abuf.String(), ebuf.String(), nil
}
 070701000009C5000081A4000000000000000000000001645E367C0000046E000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/match_regexp_matcher.go    package matchers

import (
	"fmt"
	"regexp"

	"github.com/onsi/gomega/format"
)

type MatchRegexpMatcher struct {
	Regexp string
	Args   []interface{}
}

func (matcher *MatchRegexpMatcher) Match(actual interface{}) (success bool, err error) {
	actualString, ok := toString(actual)
	if !ok {
		return false, fmt.Errorf("RegExp matcher requires a string or stringer.\nGot:%s", format.Object(actual, 1))
	}

	match, err := regexp.Match(matcher.regexp(), []byte(actualString))
	if err != nil {
		return false, fmt.Errorf("RegExp match failed to compile with error:\n\t%s", err.Error())
	}

	return match, nil
}

func (matcher *MatchRegexpMatcher) FailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "to match regular expression", matcher.regexp())
}

func (matcher *MatchRegexpMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "not to match regular expression", matcher.regexp())
}

func (matcher *MatchRegexpMatcher) regexp() string {
	re := matcher.Regexp
	if len(matcher.Args) > 0 {
		re = fmt.Sprintf(matcher.Regexp, matcher.Args...)
	}
	return re
}
  070701000009C6000081A4000000000000000000000001645E367C00000E94000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/match_xml_matcher.go   package matchers

import (
	"bytes"
	"encoding/xml"
	"errors"
	"fmt"
	"io"
	"reflect"
	"sort"
	"strings"

	"github.com/onsi/gomega/format"
	"golang.org/x/net/html/charset"
)

type MatchXMLMatcher struct {
	XMLToMatch interface{}
}

func (matcher *MatchXMLMatcher) Match(actual interface{}) (success bool, err error) {
	actualString, expectedString, err := matcher.formattedPrint(actual)
	if err != nil {
		return false, err
	}

	aval, err := parseXmlContent(actualString)
	if err != nil {
		return false, fmt.Errorf("Actual '%s' should be valid XML, but it is not.\nUnderlying error:%s", actualString, err)
	}

	eval, err := parseXmlContent(expectedString)
	if err != nil {
		return false, fmt.Errorf("Expected '%s' should be valid XML, but it is not.\nUnderlying error:%s", expectedString, err)
	}

	return reflect.DeepEqual(aval, eval), nil
}

func (matcher *MatchXMLMatcher) FailureMessage(actual interface{}) (message string) {
	actualString, expectedString, _ := matcher.formattedPrint(actual)
	return fmt.Sprintf("Expected\n%s\nto match XML of\n%s", actualString, expectedString)
}

func (matcher *MatchXMLMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	actualString, expectedString, _ := matcher.formattedPrint(actual)
	return fmt.Sprintf("Expected\n%s\nnot to match XML of\n%s", actualString, expectedString)
}

func (matcher *MatchXMLMatcher) formattedPrint(actual interface{}) (actualString, expectedString string, err error) {
	var ok bool
	actualString, ok = toString(actual)
	if !ok {
		return "", "", fmt.Errorf("MatchXMLMatcher matcher requires a string, stringer, or []byte.  Got actual:\n%s", format.Object(actual, 1))
	}
	expectedString, ok = toString(matcher.XMLToMatch)
	if !ok {
		return "", "", fmt.Errorf("MatchXMLMatcher matcher requires a string, stringer, or []byte.  Got expected:\n%s", format.Object(matcher.XMLToMatch, 1))
	}
	return actualString, expectedString, nil
}

func parseXmlContent(content string) (*xmlNode, error) {
	allNodes := []*xmlNode{}

	dec := newXmlDecoder(strings.NewReader(content))
	for {
		tok, err := dec.Token()
		if err != nil {
			if err == io.EOF {
				break
			}
			return nil, fmt.Errorf("failed to decode next token: %v", err) // untested section
		}

		lastNodeIndex := len(allNodes) - 1
		var lastNode *xmlNode
		if len(allNodes) > 0 {
			lastNode = allNodes[lastNodeIndex]
		} else {
			lastNode = &xmlNode{}
		}

		switch tok := tok.(type) {
		case xml.StartElement:
			attrs := attributesSlice(tok.Attr)
			sort.Sort(attrs)
			allNodes = append(allNodes, &xmlNode{XMLName: tok.Name, XMLAttr: tok.Attr})
		case xml.EndElement:
			if len(allNodes) > 1 {
				allNodes[lastNodeIndex-1].Nodes = append(allNodes[lastNodeIndex-1].Nodes, lastNode)
				allNodes = allNodes[:lastNodeIndex]
			}
		case xml.CharData:
			lastNode.Content = append(lastNode.Content, tok.Copy()...)
		case xml.Comment:
			lastNode.Comments = append(lastNode.Comments, tok.Copy()) // untested section
		case xml.ProcInst:
			lastNode.ProcInsts = append(lastNode.ProcInsts, tok.Copy())
		}
	}

	if len(allNodes) == 0 {
		return nil, errors.New("found no nodes")
	}
	firstNode := allNodes[0]
	trimParentNodesContentSpaces(firstNode)

	return firstNode, nil
}

func newXmlDecoder(reader io.Reader) *xml.Decoder {
	dec := xml.NewDecoder(reader)
	dec.CharsetReader = charset.NewReaderLabel
	return dec
}

func trimParentNodesContentSpaces(node *xmlNode) {
	if len(node.Nodes) > 0 {
		node.Content = bytes.TrimSpace(node.Content)
		for _, childNode := range node.Nodes {
			trimParentNodesContentSpaces(childNode)
		}
	}
}

type xmlNode struct {
	XMLName   xml.Name
	Comments  []xml.Comment
	ProcInsts []xml.ProcInst
	XMLAttr   []xml.Attr
	Content   []byte
	Nodes     []*xmlNode
}
070701000009C7000081A4000000000000000000000001645E367C00000A79000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/match_yaml_matcher.go  package matchers

import (
	"fmt"
	"strings"

	"github.com/onsi/gomega/format"
	"gopkg.in/yaml.v3"
)

type MatchYAMLMatcher struct {
	YAMLToMatch      interface{}
	firstFailurePath []interface{}
}

func (matcher *MatchYAMLMatcher) Match(actual interface{}) (success bool, err error) {
	actualString, expectedString, err := matcher.toStrings(actual)
	if err != nil {
		return false, err
	}

	var aval interface{}
	var eval interface{}

	if err := yaml.Unmarshal([]byte(actualString), &aval); err != nil {
		return false, fmt.Errorf("Actual '%s' should be valid YAML, but it is not.\nUnderlying error:%s", actualString, err)
	}
	if err := yaml.Unmarshal([]byte(expectedString), &eval); err != nil {
		return false, fmt.Errorf("Expected '%s' should be valid YAML, but it is not.\nUnderlying error:%s", expectedString, err)
	}

	var equal bool
	equal, matcher.firstFailurePath = deepEqual(aval, eval)
	return equal, nil
}

func (matcher *MatchYAMLMatcher) FailureMessage(actual interface{}) (message string) {
	actualString, expectedString, _ := matcher.toNormalisedStrings(actual)
	return formattedMessage(format.Message(actualString, "to match YAML of", expectedString), matcher.firstFailurePath)
}

func (matcher *MatchYAMLMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	actualString, expectedString, _ := matcher.toNormalisedStrings(actual)
	return formattedMessage(format.Message(actualString, "not to match YAML of", expectedString), matcher.firstFailurePath)
}

func (matcher *MatchYAMLMatcher) toNormalisedStrings(actual interface{}) (actualFormatted, expectedFormatted string, err error) {
	actualString, expectedString, err := matcher.toStrings(actual)
	return normalise(actualString), normalise(expectedString), err
}

func normalise(input string) string {
	var val interface{}
	err := yaml.Unmarshal([]byte(input), &val)
	if err != nil {
		panic(err) // unreachable since Match already calls Unmarshal
	}
	output, err := yaml.Marshal(val)
	if err != nil {
		panic(err) // untested section, unreachable since we Unmarshal above
	}
	return strings.TrimSpace(string(output))
}

func (matcher *MatchYAMLMatcher) toStrings(actual interface{}) (actualFormatted, expectedFormatted string, err error) {
	actualString, ok := toString(actual)
	if !ok {
		return "", "", fmt.Errorf("MatchYAMLMatcher matcher requires a string, stringer, or []byte.  Got actual:\n%s", format.Object(actual, 1))
	}
	expectedString, ok := toString(matcher.YAMLToMatch)
	if !ok {
		return "", "", fmt.Errorf("MatchYAMLMatcher matcher requires a string, stringer, or []byte.  Got expected:\n%s", format.Object(matcher.YAMLToMatch, 1))
	}

	return actualString, expectedString, nil
}
   070701000009C8000081A4000000000000000000000001645E367C000002EE000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/not.go package matchers

import (
	"github.com/onsi/gomega/types"
)

type NotMatcher struct {
	Matcher types.GomegaMatcher
}

func (m *NotMatcher) Match(actual interface{}) (bool, error) {
	success, err := m.Matcher.Match(actual)
	if err != nil {
		return false, err
	}
	return !success, nil
}

func (m *NotMatcher) FailureMessage(actual interface{}) (message string) {
	return m.Matcher.NegatedFailureMessage(actual) // works beautifully
}

func (m *NotMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return m.Matcher.FailureMessage(actual) // works beautifully
}

func (m *NotMatcher) MatchMayChangeInTheFuture(actual interface{}) bool {
	return types.MatchMayChangeInTheFuture(m.Matcher, actual) // just return m.Matcher's value
}
  070701000009C9000081A4000000000000000000000001645E367C00000771000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/or.go  package matchers

import (
	"fmt"

	"github.com/onsi/gomega/format"
	"github.com/onsi/gomega/types"
)

type OrMatcher struct {
	Matchers []types.GomegaMatcher

	// state
	firstSuccessfulMatcher types.GomegaMatcher
}

func (m *OrMatcher) Match(actual interface{}) (success bool, err error) {
	m.firstSuccessfulMatcher = nil
	for _, matcher := range m.Matchers {
		success, err := matcher.Match(actual)
		if err != nil {
			return false, err
		}
		if success {
			m.firstSuccessfulMatcher = matcher
			return true, nil
		}
	}
	return false, nil
}

func (m *OrMatcher) FailureMessage(actual interface{}) (message string) {
	// not the most beautiful list of matchers, but not bad either...
	return format.Message(actual, fmt.Sprintf("To satisfy at least one of these matchers: %s", m.Matchers))
}

func (m *OrMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return m.firstSuccessfulMatcher.NegatedFailureMessage(actual)
}

func (m *OrMatcher) MatchMayChangeInTheFuture(actual interface{}) bool {
	/*
		Example with 3 matchers: A, B, C

		Match evaluates them: F, T, <?>  => T
		So match is currently T, what should MatchMayChangeInTheFuture() return?
		Seems like it only depends on B, since currently B MUST change to allow the result to become F

		Match eval: F, F, F  => F
		So match is currently F, what should MatchMayChangeInTheFuture() return?
		Seems to depend on ANY of them being able to change to T.
	*/

	if m.firstSuccessfulMatcher != nil {
		// one of the matchers succeeded.. it must be able to change in order to affect the result
		return types.MatchMayChangeInTheFuture(m.firstSuccessfulMatcher, actual)
	} else {
		// so all matchers failed.. Any one of them changing would change the result.
		for _, matcher := range m.Matchers {
			if types.MatchMayChangeInTheFuture(matcher, actual) {
				return true
			}
		}
		return false // none of were going to change
	}
}
   070701000009CA000081A4000000000000000000000001645E367C00000BE6000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/panic_matcher.go   package matchers

import (
	"fmt"
	"reflect"

	"github.com/onsi/gomega/format"
)

type PanicMatcher struct {
	Expected interface{}
	object   interface{}
}

func (matcher *PanicMatcher) Match(actual interface{}) (success bool, err error) {
	if actual == nil {
		return false, fmt.Errorf("PanicMatcher expects a non-nil actual.")
	}

	actualType := reflect.TypeOf(actual)
	if actualType.Kind() != reflect.Func {
		return false, fmt.Errorf("PanicMatcher expects a function.  Got:\n%s", format.Object(actual, 1))
	}
	if !(actualType.NumIn() == 0 && actualType.NumOut() == 0) {
		return false, fmt.Errorf("PanicMatcher expects a function with no arguments and no return value.  Got:\n%s", format.Object(actual, 1))
	}

	success = false
	defer func() {
		if e := recover(); e != nil {
			matcher.object = e

			if matcher.Expected == nil {
				success = true
				return
			}

			valueMatcher, valueIsMatcher := matcher.Expected.(omegaMatcher)
			if !valueIsMatcher {
				valueMatcher = &EqualMatcher{Expected: matcher.Expected}
			}

			success, err = valueMatcher.Match(e)
			if err != nil {
				err = fmt.Errorf("PanicMatcher's value matcher failed with:\n%s%s", format.Indent, err.Error())
			}
		}
	}()

	reflect.ValueOf(actual).Call([]reflect.Value{})

	return
}

func (matcher *PanicMatcher) FailureMessage(actual interface{}) (message string) {
	if matcher.Expected == nil {
		// We wanted any panic to occur, but none did.
		return format.Message(actual, "to panic")
	}

	if matcher.object == nil {
		// We wanted a panic with a specific value to occur, but none did.
		switch matcher.Expected.(type) {
		case omegaMatcher:
			return format.Message(actual, "to panic with a value matching", matcher.Expected)
		default:
			return format.Message(actual, "to panic with", matcher.Expected)
		}
	}

	// We got a panic, but the value isn't what we expected.
	switch matcher.Expected.(type) {
	case omegaMatcher:
		return format.Message(
			actual,
			fmt.Sprintf(
				"to panic with a value matching\n%s\nbut panicked with\n%s",
				format.Object(matcher.Expected, 1),
				format.Object(matcher.object, 1),
			),
		)
	default:
		return format.Message(
			actual,
			fmt.Sprintf(
				"to panic with\n%s\nbut panicked with\n%s",
				format.Object(matcher.Expected, 1),
				format.Object(matcher.object, 1),
			),
		)
	}
}

func (matcher *PanicMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	if matcher.Expected == nil {
		// We didn't want any panic to occur, but one did.
		return format.Message(actual, fmt.Sprintf("not to panic, but panicked with\n%s", format.Object(matcher.object, 1)))
	}

	// We wanted a to ensure a panic with a specific value did not occur, but it did.
	switch matcher.Expected.(type) {
	case omegaMatcher:
		return format.Message(
			actual,
			fmt.Sprintf(
				"not to panic with a value matching\n%s\nbut panicked with\n%s",
				format.Object(matcher.Expected, 1),
				format.Object(matcher.object, 1),
			),
		)
	default:
		return format.Message(actual, "not to panic with", matcher.Expected)
	}
}
  070701000009CB000081A4000000000000000000000001645E367C00000D94000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/receive_matcher.go // untested sections: 3

package matchers

import (
	"fmt"
	"reflect"

	"github.com/onsi/gomega/format"
)

type ReceiveMatcher struct {
	Arg           interface{}
	receivedValue reflect.Value
	channelClosed bool
}

func (matcher *ReceiveMatcher) Match(actual interface{}) (success bool, err error) {
	if !isChan(actual) {
		return false, fmt.Errorf("ReceiveMatcher expects a channel.  Got:\n%s", format.Object(actual, 1))
	}

	channelType := reflect.TypeOf(actual)
	channelValue := reflect.ValueOf(actual)

	if channelType.ChanDir() == reflect.SendDir {
		return false, fmt.Errorf("ReceiveMatcher matcher cannot be passed a send-only channel.  Got:\n%s", format.Object(actual, 1))
	}

	var subMatcher omegaMatcher
	var hasSubMatcher bool

	if matcher.Arg != nil {
		subMatcher, hasSubMatcher = (matcher.Arg).(omegaMatcher)
		if !hasSubMatcher {
			argType := reflect.TypeOf(matcher.Arg)
			if argType.Kind() != reflect.Ptr {
				return false, fmt.Errorf("Cannot assign a value from the channel:\n%s\nTo:\n%s\nYou need to pass a pointer!", format.Object(actual, 1), format.Object(matcher.Arg, 1))
			}
		}
	}

	winnerIndex, value, open := reflect.Select([]reflect.SelectCase{
		{Dir: reflect.SelectRecv, Chan: channelValue},
		{Dir: reflect.SelectDefault},
	})

	var closed bool
	var didReceive bool
	if winnerIndex == 0 {
		closed = !open
		didReceive = open
	}
	matcher.channelClosed = closed

	if closed {
		return false, nil
	}

	if hasSubMatcher {
		if didReceive {
			matcher.receivedValue = value
			return subMatcher.Match(matcher.receivedValue.Interface())
		}
		return false, nil
	}

	if didReceive {
		if matcher.Arg != nil {
			outValue := reflect.ValueOf(matcher.Arg)

			if value.Type().AssignableTo(outValue.Elem().Type()) {
				outValue.Elem().Set(value)
				return true, nil
			}
			if value.Type().Kind() == reflect.Interface && value.Elem().Type().AssignableTo(outValue.Elem().Type()) {
				outValue.Elem().Set(value.Elem())
				return true, nil
			} else {
				return false, fmt.Errorf("Cannot assign a value from the channel:\n%s\nType:\n%s\nTo:\n%s", format.Object(actual, 1), format.Object(value.Interface(), 1), format.Object(matcher.Arg, 1))
			}

		}

		return true, nil
	}
	return false, nil
}

func (matcher *ReceiveMatcher) FailureMessage(actual interface{}) (message string) {
	subMatcher, hasSubMatcher := (matcher.Arg).(omegaMatcher)

	closedAddendum := ""
	if matcher.channelClosed {
		closedAddendum = " The channel is closed."
	}

	if hasSubMatcher {
		if matcher.receivedValue.IsValid() {
			return subMatcher.FailureMessage(matcher.receivedValue.Interface())
		}
		return "When passed a matcher, ReceiveMatcher's channel *must* receive something."
	}
	return format.Message(actual, "to receive something."+closedAddendum)
}

func (matcher *ReceiveMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	subMatcher, hasSubMatcher := (matcher.Arg).(omegaMatcher)

	closedAddendum := ""
	if matcher.channelClosed {
		closedAddendum = " The channel is closed."
	}

	if hasSubMatcher {
		if matcher.receivedValue.IsValid() {
			return subMatcher.NegatedFailureMessage(matcher.receivedValue.Interface())
		}
		return "When passed a matcher, ReceiveMatcher's channel *must* receive something."
	}
	return format.Message(actual, "not to receive anything."+closedAddendum)
}

func (matcher *ReceiveMatcher) MatchMayChangeInTheFuture(actual interface{}) bool {
	if !isChan(actual) {
		return false
	}

	return !matcher.channelClosed
}
070701000009CC000081A4000000000000000000000001645E367C00000788000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/satisfy_matcher.go package matchers

import (
	"fmt"
	"reflect"

	"github.com/onsi/gomega/format"
)

type SatisfyMatcher struct {
	Predicate interface{}

	// cached type
	predicateArgType reflect.Type
}

func NewSatisfyMatcher(predicate interface{}) *SatisfyMatcher {
	if predicate == nil {
		panic("predicate cannot be nil")
	}
	predicateType := reflect.TypeOf(predicate)
	if predicateType.Kind() != reflect.Func {
		panic("predicate must be a function")
	}
	if predicateType.NumIn() != 1 {
		panic("predicate must have 1 argument")
	}
	if predicateType.NumOut() != 1 || predicateType.Out(0).Kind() != reflect.Bool {
		panic("predicate must return bool")
	}

	return &SatisfyMatcher{
		Predicate:        predicate,
		predicateArgType: predicateType.In(0),
	}
}

func (m *SatisfyMatcher) Match(actual interface{}) (success bool, err error) {
	// prepare a parameter to pass to the predicate
	var param reflect.Value
	if actual != nil && reflect.TypeOf(actual).AssignableTo(m.predicateArgType) {
		// The dynamic type of actual is compatible with the predicate argument.
		param = reflect.ValueOf(actual)

	} else if actual == nil && m.predicateArgType.Kind() == reflect.Interface {
		// The dynamic type of actual is unknown, so there's no way to make its
		// reflect.Value. Create a nil of the predicate argument, which is known.
		param = reflect.Zero(m.predicateArgType)

	} else {
		return false, fmt.Errorf("predicate expects '%s' but we have '%T'", m.predicateArgType, actual)
	}

	// call the predicate with `actual`
	fn := reflect.ValueOf(m.Predicate)
	result := fn.Call([]reflect.Value{param})
	return result[0].Bool(), nil
}

func (m *SatisfyMatcher) FailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "to satisfy predicate", m.Predicate)
}

func (m *SatisfyMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "to not satisfy predicate", m.Predicate)
}
070701000009CD000081A4000000000000000000000001645E367C000008E1000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/semi_structured_data_support.go    // untested sections: 5

package matchers

import (
	"fmt"
	"reflect"
	"strings"
)

func formattedMessage(comparisonMessage string, failurePath []interface{}) string {
	var diffMessage string
	if len(failurePath) == 0 {
		diffMessage = ""
	} else {
		diffMessage = fmt.Sprintf("\n\nfirst mismatched key: %s", formattedFailurePath(failurePath))
	}
	return fmt.Sprintf("%s%s", comparisonMessage, diffMessage)
}

func formattedFailurePath(failurePath []interface{}) string {
	formattedPaths := []string{}
	for i := len(failurePath) - 1; i >= 0; i-- {
		switch p := failurePath[i].(type) {
		case int:
			formattedPaths = append(formattedPaths, fmt.Sprintf(`[%d]`, p))
		default:
			if i != len(failurePath)-1 {
				formattedPaths = append(formattedPaths, ".")
			}
			formattedPaths = append(formattedPaths, fmt.Sprintf(`"%s"`, p))
		}
	}
	return strings.Join(formattedPaths, "")
}

func deepEqual(a interface{}, b interface{}) (bool, []interface{}) {
	var errorPath []interface{}
	if reflect.TypeOf(a) != reflect.TypeOf(b) {
		return false, errorPath
	}

	switch a.(type) {
	case []interface{}:
		if len(a.([]interface{})) != len(b.([]interface{})) {
			return false, errorPath
		}

		for i, v := range a.([]interface{}) {
			elementEqual, keyPath := deepEqual(v, b.([]interface{})[i])
			if !elementEqual {
				return false, append(keyPath, i)
			}
		}
		return true, errorPath

	case map[interface{}]interface{}:
		if len(a.(map[interface{}]interface{})) != len(b.(map[interface{}]interface{})) {
			return false, errorPath
		}

		for k, v1 := range a.(map[interface{}]interface{}) {
			v2, ok := b.(map[interface{}]interface{})[k]
			if !ok {
				return false, errorPath
			}
			elementEqual, keyPath := deepEqual(v1, v2)
			if !elementEqual {
				return false, append(keyPath, k)
			}
		}
		return true, errorPath

	case map[string]interface{}:
		if len(a.(map[string]interface{})) != len(b.(map[string]interface{})) {
			return false, errorPath
		}

		for k, v1 := range a.(map[string]interface{}) {
			v2, ok := b.(map[string]interface{})[k]
			if !ok {
				return false, errorPath
			}
			elementEqual, keyPath := deepEqual(v1, v2)
			if !elementEqual {
				return false, append(keyPath, k)
			}
		}
		return true, errorPath

	default:
		return a == b, errorPath
	}
}
   070701000009CE000081A4000000000000000000000001645E367C000003D1000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/succeed_matcher.go package matchers

import (
	"errors"
	"fmt"

	"github.com/onsi/gomega/format"
)

type formattedGomegaError interface {
	FormattedGomegaError() string
}

type SucceedMatcher struct {
}

func (matcher *SucceedMatcher) Match(actual interface{}) (success bool, err error) {
	// is purely nil?
	if actual == nil {
		return true, nil
	}

	// must be an 'error' type
	if !isError(actual) {
		return false, fmt.Errorf("Expected an error-type.  Got:\n%s", format.Object(actual, 1))
	}

	// must be nil (or a pointer to a nil)
	return isNil(actual), nil
}

func (matcher *SucceedMatcher) FailureMessage(actual interface{}) (message string) {
	var fgErr formattedGomegaError
	if errors.As(actual.(error), &fgErr) {
		return fgErr.FormattedGomegaError()
	}
	return fmt.Sprintf("Expected success, but got an error:\n%s", format.Object(actual, 1))
}

func (matcher *SucceedMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return "Expected failure, but got no error."
}
   070701000009CF000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/support    070701000009D0000041ED000000000000000000000006645E367C00000000000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/support/goraph 070701000009D1000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph  070701000009D2000081A4000000000000000000000001645E367C0000060D000000000000000000000000000000000000006B00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraph.go    package bipartitegraph

import "fmt"

import . "github.com/onsi/gomega/matchers/support/goraph/node"
import . "github.com/onsi/gomega/matchers/support/goraph/edge"

type BipartiteGraph struct {
	Left  NodeOrderedSet
	Right NodeOrderedSet
	Edges EdgeSet
}

func NewBipartiteGraph(leftValues, rightValues []interface{}, neighbours func(interface{}, interface{}) (bool, error)) (*BipartiteGraph, error) {
	left := NodeOrderedSet{}
	for i, v := range leftValues {
		left = append(left, Node{ID: i, Value: v})
	}

	right := NodeOrderedSet{}
	for j, v := range rightValues {
		right = append(right, Node{ID: j + len(left), Value: v})
	}

	edges := EdgeSet{}
	for i, leftValue := range leftValues {
		for j, rightValue := range rightValues {
			neighbours, err := neighbours(leftValue, rightValue)
			if err != nil {
				return nil, fmt.Errorf("error determining adjacency for %v and %v: %s", leftValue, rightValue, err.Error())
			}

			if neighbours {
				edges = append(edges, Edge{Node1: left[i].ID, Node2: right[j].ID})
			}
		}
	}

	return &BipartiteGraph{left, right, edges}, nil
}

// FreeLeftRight returns left node values and right node values
// of the BipartiteGraph's nodes which are not part of the given edges.
func (bg *BipartiteGraph) FreeLeftRight(edges EdgeSet) (leftValues, rightValues []interface{}) {
	for _, node := range bg.Left {
		if edges.Free(node) {
			leftValues = append(leftValues, node.Value)
		}
	}
	for _, node := range bg.Right {
		if edges.Free(node) {
			rightValues = append(rightValues, node.Value)
		}
	}
	return
}
   070701000009D3000081A4000000000000000000000001645E367C00000EC2000000000000000000000000000000000000007300000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraphmatching.go    package bipartitegraph

import (
	. "github.com/onsi/gomega/matchers/support/goraph/edge"
	. "github.com/onsi/gomega/matchers/support/goraph/node"
	"github.com/onsi/gomega/matchers/support/goraph/util"
)

// LargestMatching implements the Hopcroft–Karp algorithm taking as input a bipartite graph
// and outputting a maximum cardinality matching, i.e. a set of as many edges as possible
// with the property that no two edges share an endpoint.
func (bg *BipartiteGraph) LargestMatching() (matching EdgeSet) {
	paths := bg.maximalDisjointSLAPCollection(matching)

	for len(paths) > 0 {
		for _, path := range paths {
			matching = matching.SymmetricDifference(path)
		}
		paths = bg.maximalDisjointSLAPCollection(matching)
	}

	return
}

func (bg *BipartiteGraph) maximalDisjointSLAPCollection(matching EdgeSet) (result []EdgeSet) {
	guideLayers := bg.createSLAPGuideLayers(matching)
	if len(guideLayers) == 0 {
		return
	}

	used := make(map[int]bool)

	for _, u := range guideLayers[len(guideLayers)-1] {
		slap, found := bg.findDisjointSLAP(u, matching, guideLayers, used)
		if found {
			for _, edge := range slap {
				used[edge.Node1] = true
				used[edge.Node2] = true
			}
			result = append(result, slap)
		}
	}

	return
}

func (bg *BipartiteGraph) findDisjointSLAP(
	start Node,
	matching EdgeSet,
	guideLayers []NodeOrderedSet,
	used map[int]bool,
) ([]Edge, bool) {
	return bg.findDisjointSLAPHelper(start, EdgeSet{}, len(guideLayers)-1, matching, guideLayers, used)
}

func (bg *BipartiteGraph) findDisjointSLAPHelper(
	currentNode Node,
	currentSLAP EdgeSet,
	currentLevel int,
	matching EdgeSet,
	guideLayers []NodeOrderedSet,
	used map[int]bool,
) (EdgeSet, bool) {
	used[currentNode.ID] = true

	if currentLevel == 0 {
		return currentSLAP, true
	}

	for _, nextNode := range guideLayers[currentLevel-1] {
		if used[nextNode.ID] {
			continue
		}

		edge, found := bg.Edges.FindByNodes(currentNode, nextNode)
		if !found {
			continue
		}

		if matching.Contains(edge) == util.Odd(currentLevel) {
			continue
		}

		currentSLAP = append(currentSLAP, edge)
		slap, found := bg.findDisjointSLAPHelper(nextNode, currentSLAP, currentLevel-1, matching, guideLayers, used)
		if found {
			return slap, true
		}
		currentSLAP = currentSLAP[:len(currentSLAP)-1]
	}

	used[currentNode.ID] = false
	return nil, false
}

func (bg *BipartiteGraph) createSLAPGuideLayers(matching EdgeSet) (guideLayers []NodeOrderedSet) {
	used := make(map[int]bool)
	currentLayer := NodeOrderedSet{}

	for _, node := range bg.Left {
		if matching.Free(node) {
			used[node.ID] = true
			currentLayer = append(currentLayer, node)
		}
	}

	if len(currentLayer) == 0 {
		return []NodeOrderedSet{}
	}
	guideLayers = append(guideLayers, currentLayer)

	done := false

	for !done {
		lastLayer := currentLayer
		currentLayer = NodeOrderedSet{}

		if util.Odd(len(guideLayers)) {
			for _, leftNode := range lastLayer {
				for _, rightNode := range bg.Right {
					if used[rightNode.ID] {
						continue
					}

					edge, found := bg.Edges.FindByNodes(leftNode, rightNode)
					if !found || matching.Contains(edge) {
						continue
					}

					currentLayer = append(currentLayer, rightNode)
					used[rightNode.ID] = true

					if matching.Free(rightNode) {
						done = true
					}
				}
			}
		} else {
			for _, rightNode := range lastLayer {
				for _, leftNode := range bg.Left {
					if used[leftNode.ID] {
						continue
					}

					edge, found := bg.Edges.FindByNodes(leftNode, rightNode)
					if !found || !matching.Contains(edge) {
						continue
					}

					currentLayer = append(currentLayer, leftNode)
					used[leftNode.ID] = true
				}
			}

		}

		if len(currentLayer) == 0 {
			return []NodeOrderedSet{}
		}
		guideLayers = append(guideLayers, currentLayer)
	}

	return
}
  070701000009D4000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/support/goraph/edge    070701000009D5000081A4000000000000000000000001645E367C000003FC000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/support/goraph/edge/edge.go    package edge

import . "github.com/onsi/gomega/matchers/support/goraph/node"

type Edge struct {
	Node1 int
	Node2 int
}

type EdgeSet []Edge

func (ec EdgeSet) Free(node Node) bool {
	for _, e := range ec {
		if e.Node1 == node.ID || e.Node2 == node.ID {
			return false
		}
	}

	return true
}

func (ec EdgeSet) Contains(edge Edge) bool {
	for _, e := range ec {
		if e == edge {
			return true
		}
	}

	return false
}

func (ec EdgeSet) FindByNodes(node1, node2 Node) (Edge, bool) {
	for _, e := range ec {
		if (e.Node1 == node1.ID && e.Node2 == node2.ID) || (e.Node1 == node2.ID && e.Node2 == node1.ID) {
			return e, true
		}
	}

	return Edge{}, false
}

func (ec EdgeSet) SymmetricDifference(ec2 EdgeSet) EdgeSet {
	edgesToInclude := make(map[Edge]bool)

	for _, e := range ec {
		edgesToInclude[e] = true
	}

	for _, e := range ec2 {
		edgesToInclude[e] = !edgesToInclude[e]
	}

	result := EdgeSet{}
	for e, include := range edgesToInclude {
		if include {
			result = append(result, e)
		}
	}

	return result
}
070701000009D6000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/support/goraph/node    070701000009D7000081A4000000000000000000000001645E367C0000005D000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/support/goraph/node/node.go    package node

type Node struct {
	ID    int
	Value interface{}
}

type NodeOrderedSet []Node
   070701000009D8000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/support/goraph/util    070701000009D9000081A4000000000000000000000001645E367C0000005F000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/support/goraph/util/util.go    package util

import "math"

func Odd(n int) bool {
	return math.Mod(float64(n), 2.0) == 1.0
}
 070701000009DA000081A4000000000000000000000001645E367C00000F1C000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/type_support.go    /*
Gomega matchers

This package implements the Gomega matchers and does not typically need to be imported.
See the docs for Gomega for documentation on the matchers

http://onsi.github.io/gomega/
*/

// untested sections: 11

package matchers

import (
	"encoding/json"
	"fmt"
	"reflect"
)

type omegaMatcher interface {
	Match(actual interface{}) (success bool, err error)
	FailureMessage(actual interface{}) (message string)
	NegatedFailureMessage(actual interface{}) (message string)
}

func isBool(a interface{}) bool {
	return reflect.TypeOf(a).Kind() == reflect.Bool
}

func isNumber(a interface{}) bool {
	if a == nil {
		return false
	}
	kind := reflect.TypeOf(a).Kind()
	return reflect.Int <= kind && kind <= reflect.Float64
}

func isInteger(a interface{}) bool {
	kind := reflect.TypeOf(a).Kind()
	return reflect.Int <= kind && kind <= reflect.Int64
}

func isUnsignedInteger(a interface{}) bool {
	kind := reflect.TypeOf(a).Kind()
	return reflect.Uint <= kind && kind <= reflect.Uint64
}

func isFloat(a interface{}) bool {
	kind := reflect.TypeOf(a).Kind()
	return reflect.Float32 <= kind && kind <= reflect.Float64
}

func toInteger(a interface{}) int64 {
	if isInteger(a) {
		return reflect.ValueOf(a).Int()
	} else if isUnsignedInteger(a) {
		return int64(reflect.ValueOf(a).Uint())
	} else if isFloat(a) {
		return int64(reflect.ValueOf(a).Float())
	}
	panic(fmt.Sprintf("Expected a number!  Got <%T> %#v", a, a))
}

func toUnsignedInteger(a interface{}) uint64 {
	if isInteger(a) {
		return uint64(reflect.ValueOf(a).Int())
	} else if isUnsignedInteger(a) {
		return reflect.ValueOf(a).Uint()
	} else if isFloat(a) {
		return uint64(reflect.ValueOf(a).Float())
	}
	panic(fmt.Sprintf("Expected a number!  Got <%T> %#v", a, a))
}

func toFloat(a interface{}) float64 {
	if isInteger(a) {
		return float64(reflect.ValueOf(a).Int())
	} else if isUnsignedInteger(a) {
		return float64(reflect.ValueOf(a).Uint())
	} else if isFloat(a) {
		return reflect.ValueOf(a).Float()
	}
	panic(fmt.Sprintf("Expected a number!  Got <%T> %#v", a, a))
}

func isError(a interface{}) bool {
	_, ok := a.(error)
	return ok
}

func isChan(a interface{}) bool {
	if isNil(a) {
		return false
	}
	return reflect.TypeOf(a).Kind() == reflect.Chan
}

func isMap(a interface{}) bool {
	if a == nil {
		return false
	}
	return reflect.TypeOf(a).Kind() == reflect.Map
}

func isArrayOrSlice(a interface{}) bool {
	if a == nil {
		return false
	}
	switch reflect.TypeOf(a).Kind() {
	case reflect.Array, reflect.Slice:
		return true
	default:
		return false
	}
}

func isString(a interface{}) bool {
	if a == nil {
		return false
	}
	return reflect.TypeOf(a).Kind() == reflect.String
}

func toString(a interface{}) (string, bool) {
	aString, isString := a.(string)
	if isString {
		return aString, true
	}

	aBytes, isBytes := a.([]byte)
	if isBytes {
		return string(aBytes), true
	}

	aStringer, isStringer := a.(fmt.Stringer)
	if isStringer {
		return aStringer.String(), true
	}

	aJSONRawMessage, isJSONRawMessage := a.(json.RawMessage)
	if isJSONRawMessage {
		return string(aJSONRawMessage), true
	}

	return "", false
}

func lengthOf(a interface{}) (int, bool) {
	if a == nil {
		return 0, false
	}
	switch reflect.TypeOf(a).Kind() {
	case reflect.Map, reflect.Array, reflect.String, reflect.Chan, reflect.Slice:
		return reflect.ValueOf(a).Len(), true
	default:
		return 0, false
	}
}
func capOf(a interface{}) (int, bool) {
	if a == nil {
		return 0, false
	}
	switch reflect.TypeOf(a).Kind() {
	case reflect.Array, reflect.Chan, reflect.Slice:
		return reflect.ValueOf(a).Cap(), true
	default:
		return 0, false
	}
}

func isNil(a interface{}) bool {
	if a == nil {
		return true
	}

	switch reflect.TypeOf(a).Kind() {
	case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice:
		return reflect.ValueOf(a).IsNil()
	}

	return false
}
070701000009DB000081A4000000000000000000000001645E367C00000BFC000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/matchers/with_transform.go  package matchers

import (
	"fmt"
	"reflect"

	"github.com/onsi/gomega/types"
)

type WithTransformMatcher struct {
	// input
	Transform interface{} // must be a function of one parameter that returns one value and an optional error
	Matcher   types.GomegaMatcher

	// cached value
	transformArgType reflect.Type

	// state
	transformedValue interface{}
}

// reflect.Type for error
var errorT = reflect.TypeOf((*error)(nil)).Elem()

func NewWithTransformMatcher(transform interface{}, matcher types.GomegaMatcher) *WithTransformMatcher {
	if transform == nil {
		panic("transform function cannot be nil")
	}
	txType := reflect.TypeOf(transform)
	if txType.NumIn() != 1 {
		panic("transform function must have 1 argument")
	}
	if numout := txType.NumOut(); numout != 1 {
		if numout != 2 || !txType.Out(1).AssignableTo(errorT) {
			panic("transform function must either have 1 return value, or 1 return value plus 1 error value")
		}
	}

	return &WithTransformMatcher{
		Transform:        transform,
		Matcher:          matcher,
		transformArgType: reflect.TypeOf(transform).In(0),
	}
}

func (m *WithTransformMatcher) Match(actual interface{}) (bool, error) {
	// prepare a parameter to pass to the Transform function
	var param reflect.Value
	if actual != nil && reflect.TypeOf(actual).AssignableTo(m.transformArgType) {
		// The dynamic type of actual is compatible with the transform argument.
		param = reflect.ValueOf(actual)

	} else if actual == nil && m.transformArgType.Kind() == reflect.Interface {
		// The dynamic type of actual is unknown, so there's no way to make its
		// reflect.Value. Create a nil of the transform argument, which is known.
		param = reflect.Zero(m.transformArgType)

	} else {
		return false, fmt.Errorf("Transform function expects '%s' but we have '%T'", m.transformArgType, actual)
	}

	// call the Transform function with `actual`
	fn := reflect.ValueOf(m.Transform)
	result := fn.Call([]reflect.Value{param})
	if len(result) == 2 {
		if !result[1].IsNil() {
			return false, fmt.Errorf("Transform function failed: %s", result[1].Interface().(error).Error())
		}
	}
	m.transformedValue = result[0].Interface() // expect exactly one value

	return m.Matcher.Match(m.transformedValue)
}

func (m *WithTransformMatcher) FailureMessage(_ interface{}) (message string) {
	return m.Matcher.FailureMessage(m.transformedValue)
}

func (m *WithTransformMatcher) NegatedFailureMessage(_ interface{}) (message string) {
	return m.Matcher.NegatedFailureMessage(m.transformedValue)
}

func (m *WithTransformMatcher) MatchMayChangeInTheFuture(_ interface{}) bool {
	// TODO: Maybe this should always just return true? (Only an issue for non-deterministic transformers.)
	//
	// Querying the next matcher is fine if the transformer always will return the same value.
	// But if the transformer is non-deterministic and returns a different value each time, then there
	// is no point in querying the next matcher, since it can only comment on the last transformed value.
	return types.MatchMayChangeInTheFuture(m.Matcher, m.transformedValue)
}
070701000009DC000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/types   070701000009DD000081A4000000000000000000000001645E367C00000DAA000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/onsi/gomega/types/types.go  package types

import (
	"context"
	"time"
)

type GomegaFailHandler func(message string, callerSkip ...int)

// A simple *testing.T interface wrapper
type GomegaTestingT interface {
	Helper()
	Fatalf(format string, args ...interface{})
}

// Gomega represents an object that can perform synchronous and assynchronous assertions with Gomega matchers
type Gomega interface {
	Ω(actual interface{}, extra ...interface{}) Assertion
	Expect(actual interface{}, extra ...interface{}) Assertion
	ExpectWithOffset(offset int, actual interface{}, extra ...interface{}) Assertion

	Eventually(actualOrCtx interface{}, args ...interface{}) AsyncAssertion
	EventuallyWithOffset(offset int, actualOrCtx interface{}, args ...interface{}) AsyncAssertion

	Consistently(actualOrCtx interface{}, args ...interface{}) AsyncAssertion
	ConsistentlyWithOffset(offset int, actualOrCtx interface{}, args ...interface{}) AsyncAssertion

	SetDefaultEventuallyTimeout(time.Duration)
	SetDefaultEventuallyPollingInterval(time.Duration)
	SetDefaultConsistentlyDuration(time.Duration)
	SetDefaultConsistentlyPollingInterval(time.Duration)
}

// All Gomega matchers must implement the GomegaMatcher interface
//
// For details on writing custom matchers, check out: http://onsi.github.io/gomega/#adding-your-own-matchers
type GomegaMatcher interface {
	Match(actual interface{}) (success bool, err error)
	FailureMessage(actual interface{}) (message string)
	NegatedFailureMessage(actual interface{}) (message string)
}

/*
GomegaMatchers that also match the OracleMatcher interface can convey information about
whether or not their result will change upon future attempts.

This allows `Eventually` and `Consistently` to short circuit if success becomes impossible.

For example, a process' exit code can never change.  So, gexec's Exit matcher returns `true`
for `MatchMayChangeInTheFuture` until the process exits, at which point it returns `false` forevermore.
*/
type OracleMatcher interface {
	MatchMayChangeInTheFuture(actual interface{}) bool
}

func MatchMayChangeInTheFuture(matcher GomegaMatcher, value interface{}) bool {
	oracleMatcher, ok := matcher.(OracleMatcher)
	if !ok {
		return true
	}

	return oracleMatcher.MatchMayChangeInTheFuture(value)
}

// AsyncAssertions are returned by Eventually and Consistently and enable matchers to be polled repeatedly to ensure
// they are eventually satisfied
type AsyncAssertion interface {
	Should(matcher GomegaMatcher, optionalDescription ...interface{}) bool
	ShouldNot(matcher GomegaMatcher, optionalDescription ...interface{}) bool

	WithOffset(offset int) AsyncAssertion
	WithTimeout(interval time.Duration) AsyncAssertion
	WithPolling(interval time.Duration) AsyncAssertion
	Within(timeout time.Duration) AsyncAssertion
	ProbeEvery(interval time.Duration) AsyncAssertion
	WithContext(ctx context.Context) AsyncAssertion
	WithArguments(argsToForward ...interface{}) AsyncAssertion
	MustPassRepeatedly(count int) AsyncAssertion
}

// Assertions are returned by Ω and Expect and enable assertions against Gomega matchers
type Assertion interface {
	Should(matcher GomegaMatcher, optionalDescription ...interface{}) bool
	ShouldNot(matcher GomegaMatcher, optionalDescription ...interface{}) bool

	To(matcher GomegaMatcher, optionalDescription ...interface{}) bool
	ToNot(matcher GomegaMatcher, optionalDescription ...interface{}) bool
	NotTo(matcher GomegaMatcher, optionalDescription ...interface{}) bool

	WithOffset(offset int) Assertion

	Error() Assertion
}
  070701000009DE000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/github.com/opencontainers  070701000009DF000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/opencontainers/go-digest    070701000009E0000081A4000000000000000000000001645E367C000000E4000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/opencontainers/go-digest/.mailmap   Aaron Lehmann <aaronl@vitelus.com> <aaron.lehmann@docker.com>
Derek McGowan <derek@mcg.dev> <derek@mcgstyle.net>
Stephen J Day <stephen.day@docker.com> <stevvooe@users.noreply.github.com>
Haibing Zhou <zhouhaibing089@gmail.com>
070701000009E1000081A4000000000000000000000001645E367C000001BC000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/opencontainers/go-digest/.pullapprove.yml   version: 2

requirements:
  signed_off_by:
    required: true

always_pending:
  title_regex: '^WIP'
  explanation: 'Work in progress...'

group_defaults:
  required: 2
  approve_by_comment:
    enabled: true
    approve_regex: '^LGTM'
    reject_regex: '^Rejected'
  reset_on_push:
    enabled: true
  author_approval:
    ignored: true
  conditions:
    branches:
      - master

groups:
  go-digest:
    teams:
      - go-digest-maintainers
070701000009E2000081A4000000000000000000000001645E367C00000032000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/opencontainers/go-digest/.travis.yml    language: go
go:
  - 1.12.x
  - 1.13.x
  - master
  070701000009E3000081A4000000000000000000000001645E367C00000B9F000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/opencontainers/go-digest/CONTRIBUTING.md    # Contributing to Docker open source projects

Want to hack on this project? Awesome! Here are instructions to get you started.

This project is a part of the [Docker](https://www.docker.com) project, and follows
the same rules and principles. If you're already familiar with the way
Docker does things, you'll feel right at home.

Otherwise, go read Docker's
[contributions guidelines](https://github.com/docker/docker/blob/master/CONTRIBUTING.md),
[issue triaging](https://github.com/docker/docker/blob/master/project/ISSUE-TRIAGE.md),
[review process](https://github.com/docker/docker/blob/master/project/REVIEWING.md) and
[branches and tags](https://github.com/docker/docker/blob/master/project/BRANCHES-AND-TAGS.md).

For an in-depth description of our contribution process, visit the
contributors guide: [Understand how to contribute](https://docs.docker.com/opensource/workflow/make-a-contribution/)

### Sign your work

The sign-off is a simple line at the end of the explanation for the patch. Your
signature certifies that you wrote the patch or otherwise have the right to pass
it on as an open-source patch. The rules are pretty simple: if you can certify
the below (from [developercertificate.org](http://developercertificate.org/)):

```
Developer Certificate of Origin
Version 1.1

Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
1 Letterman Drive
Suite D4700
San Francisco, CA, 94129

Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.


Developer's Certificate of Origin 1.1

By making a contribution to this project, I certify that:

(a) The contribution was created in whole or in part by me and I
    have the right to submit it under the open source license
    indicated in the file; or

(b) The contribution is based upon previous work that, to the best
    of my knowledge, is covered under an appropriate open source
    license and I have the right under that license to submit that
    work with modifications, whether created in whole or in part
    by me, under the same open source license (unless I am
    permitted to submit under a different license), as indicated
    in the file; or

(c) The contribution was provided directly to me by some other
    person who certified (a), (b) or (c) and I have not modified
    it.

(d) I understand and agree that this project and the contribution
    are public and that a record of the contribution (including all
    personal information I submit with it, including my sign-off) is
    maintained indefinitely and may be redistributed consistent with
    this project or the open source license(s) involved.
```

Then you just add a line to every git commit message:

    Signed-off-by: Joe Smith <joe.smith@email.com>

Use your real name (sorry, no pseudonyms or anonymous contributions.)

If you set your `user.name` and `user.email` git configs, you can sign your
commit automatically with `git commit -s`.
 070701000009E4000081A4000000000000000000000001645E367C00002A31000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/opencontainers/go-digest/LICENSE    
                                 Apache License
                           Version 2.0, January 2004
                        https://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   Copyright 2019, 2020 OCI Contributors
   Copyright 2016 Docker, Inc.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       https://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
   070701000009E5000081A4000000000000000000000001645E367C00004E24000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/opencontainers/go-digest/LICENSE.docs   Attribution-ShareAlike 4.0 International

=======================================================================

Creative Commons Corporation ("Creative Commons") is not a law firm and
does not provide legal services or legal advice. Distribution of
Creative Commons public licenses does not create a lawyer-client or
other relationship. Creative Commons makes its licenses and related
information available on an "as-is" basis. Creative Commons gives no
warranties regarding its licenses, any material licensed under their
terms and conditions, or any related information. Creative Commons
disclaims all liability for damages resulting from their use to the
fullest extent possible.

Using Creative Commons Public Licenses

Creative Commons public licenses provide a standard set of terms and
conditions that creators and other rights holders may use to share
original works of authorship and other material subject to copyright
and certain other rights specified in the public license below. The
following considerations are for informational purposes only, are not
exhaustive, and do not form part of our licenses.

     Considerations for licensors: Our public licenses are
     intended for use by those authorized to give the public
     permission to use material in ways otherwise restricted by
     copyright and certain other rights. Our licenses are
     irrevocable. Licensors should read and understand the terms
     and conditions of the license they choose before applying it.
     Licensors should also secure all rights necessary before
     applying our licenses so that the public can reuse the
     material as expected. Licensors should clearly mark any
     material not subject to the license. This includes other CC-
     licensed material, or material used under an exception or
     limitation to copyright. More considerations for licensors:
	wiki.creativecommons.org/Considerations_for_licensors

     Considerations for the public: By using one of our public
     licenses, a licensor grants the public permission to use the
     licensed material under specified terms and conditions. If
     the licensor's permission is not necessary for any reason--for
     example, because of any applicable exception or limitation to
     copyright--then that use is not regulated by the license. Our
     licenses grant only permissions under copyright and certain
     other rights that a licensor has authority to grant. Use of
     the licensed material may still be restricted for other
     reasons, including because others have copyright or other
     rights in the material. A licensor may make special requests,
     such as asking that all changes be marked or described.
     Although not required by our licenses, you are encouraged to
     respect those requests where reasonable. More_considerations
     for the public:
	wiki.creativecommons.org/Considerations_for_licensees

=======================================================================

Creative Commons Attribution-ShareAlike 4.0 International Public
License

By exercising the Licensed Rights (defined below), You accept and agree
to be bound by the terms and conditions of this Creative Commons
Attribution-ShareAlike 4.0 International Public License ("Public
License"). To the extent this Public License may be interpreted as a
contract, You are granted the Licensed Rights in consideration of Your
acceptance of these terms and conditions, and the Licensor grants You
such rights in consideration of benefits the Licensor receives from
making the Licensed Material available under these terms and
conditions.


Section 1 -- Definitions.

  a. Adapted Material means material subject to Copyright and Similar
     Rights that is derived from or based upon the Licensed Material
     and in which the Licensed Material is translated, altered,
     arranged, transformed, or otherwise modified in a manner requiring
     permission under the Copyright and Similar Rights held by the
     Licensor. For purposes of this Public License, where the Licensed
     Material is a musical work, performance, or sound recording,
     Adapted Material is always produced where the Licensed Material is
     synched in timed relation with a moving image.

  b. Adapter's License means the license You apply to Your Copyright
     and Similar Rights in Your contributions to Adapted Material in
     accordance with the terms and conditions of this Public License.

  c. BY-SA Compatible License means a license listed at
     creativecommons.org/compatiblelicenses, approved by Creative
     Commons as essentially the equivalent of this Public License.

  d. Copyright and Similar Rights means copyright and/or similar rights
     closely related to copyright including, without limitation,
     performance, broadcast, sound recording, and Sui Generis Database
     Rights, without regard to how the rights are labeled or
     categorized. For purposes of this Public License, the rights
     specified in Section 2(b)(1)-(2) are not Copyright and Similar
     Rights.

  e. Effective Technological Measures means those measures that, in the
     absence of proper authority, may not be circumvented under laws
     fulfilling obligations under Article 11 of the WIPO Copyright
     Treaty adopted on December 20, 1996, and/or similar international
     agreements.

  f. Exceptions and Limitations means fair use, fair dealing, and/or
     any other exception or limitation to Copyright and Similar Rights
     that applies to Your use of the Licensed Material.

  g. License Elements means the license attributes listed in the name
     of a Creative Commons Public License. The License Elements of this
     Public License are Attribution and ShareAlike.

  h. Licensed Material means the artistic or literary work, database,
     or other material to which the Licensor applied this Public
     License.

  i. Licensed Rights means the rights granted to You subject to the
     terms and conditions of this Public License, which are limited to
     all Copyright and Similar Rights that apply to Your use of the
     Licensed Material and that the Licensor has authority to license.

  j. Licensor means the individual(s) or entity(ies) granting rights
     under this Public License.

  k. Share means to provide material to the public by any means or
     process that requires permission under the Licensed Rights, such
     as reproduction, public display, public performance, distribution,
     dissemination, communication, or importation, and to make material
     available to the public including in ways that members of the
     public may access the material from a place and at a time
     individually chosen by them.

  l. Sui Generis Database Rights means rights other than copyright
     resulting from Directive 96/9/EC of the European Parliament and of
     the Council of 11 March 1996 on the legal protection of databases,
     as amended and/or succeeded, as well as other essentially
     equivalent rights anywhere in the world.

  m. You means the individual or entity exercising the Licensed Rights
     under this Public License. Your has a corresponding meaning.


Section 2 -- Scope.

  a. License grant.

       1. Subject to the terms and conditions of this Public License,
          the Licensor hereby grants You a worldwide, royalty-free,
          non-sublicensable, non-exclusive, irrevocable license to
          exercise the Licensed Rights in the Licensed Material to:

            a. reproduce and Share the Licensed Material, in whole or
               in part; and

            b. produce, reproduce, and Share Adapted Material.

       2. Exceptions and Limitations. For the avoidance of doubt, where
          Exceptions and Limitations apply to Your use, this Public
          License does not apply, and You do not need to comply with
          its terms and conditions.

       3. Term. The term of this Public License is specified in Section
          6(a).

       4. Media and formats; technical modifications allowed. The
          Licensor authorizes You to exercise the Licensed Rights in
          all media and formats whether now known or hereafter created,
          and to make technical modifications necessary to do so. The
          Licensor waives and/or agrees not to assert any right or
          authority to forbid You from making technical modifications
          necessary to exercise the Licensed Rights, including
          technical modifications necessary to circumvent Effective
          Technological Measures. For purposes of this Public License,
          simply making modifications authorized by this Section 2(a)
          (4) never produces Adapted Material.

       5. Downstream recipients.

            a. Offer from the Licensor -- Licensed Material. Every
               recipient of the Licensed Material automatically
               receives an offer from the Licensor to exercise the
               Licensed Rights under the terms and conditions of this
               Public License.

            b. Additional offer from the Licensor -- Adapted Material.
               Every recipient of Adapted Material from You
               automatically receives an offer from the Licensor to
               exercise the Licensed Rights in the Adapted Material
               under the conditions of the Adapter's License You apply.

            c. No downstream restrictions. You may not offer or impose
               any additional or different terms or conditions on, or
               apply any Effective Technological Measures to, the
               Licensed Material if doing so restricts exercise of the
               Licensed Rights by any recipient of the Licensed
               Material.

       6. No endorsement. Nothing in this Public License constitutes or
          may be construed as permission to assert or imply that You
          are, or that Your use of the Licensed Material is, connected
          with, or sponsored, endorsed, or granted official status by,
          the Licensor or others designated to receive attribution as
          provided in Section 3(a)(1)(A)(i).

  b. Other rights.

       1. Moral rights, such as the right of integrity, are not
          licensed under this Public License, nor are publicity,
          privacy, and/or other similar personality rights; however, to
          the extent possible, the Licensor waives and/or agrees not to
          assert any such rights held by the Licensor to the limited
          extent necessary to allow You to exercise the Licensed
          Rights, but not otherwise.

       2. Patent and trademark rights are not licensed under this
          Public License.

       3. To the extent possible, the Licensor waives any right to
          collect royalties from You for the exercise of the Licensed
          Rights, whether directly or through a collecting society
          under any voluntary or waivable statutory or compulsory
          licensing scheme. In all other cases the Licensor expressly
          reserves any right to collect such royalties.


Section 3 -- License Conditions.

Your exercise of the Licensed Rights is expressly made subject to the
following conditions.

  a. Attribution.

       1. If You Share the Licensed Material (including in modified
          form), You must:

            a. retain the following if it is supplied by the Licensor
               with the Licensed Material:

                 i. identification of the creator(s) of the Licensed
                    Material and any others designated to receive
                    attribution, in any reasonable manner requested by
                    the Licensor (including by pseudonym if
                    designated);

                ii. a copyright notice;

               iii. a notice that refers to this Public License;

                iv. a notice that refers to the disclaimer of
                    warranties;

                 v. a URI or hyperlink to the Licensed Material to the
                    extent reasonably practicable;

            b. indicate if You modified the Licensed Material and
               retain an indication of any previous modifications; and

            c. indicate the Licensed Material is licensed under this
               Public License, and include the text of, or the URI or
               hyperlink to, this Public License.

       2. You may satisfy the conditions in Section 3(a)(1) in any
          reasonable manner based on the medium, means, and context in
          which You Share the Licensed Material. For example, it may be
          reasonable to satisfy the conditions by providing a URI or
          hyperlink to a resource that includes the required
          information.

       3. If requested by the Licensor, You must remove any of the
          information required by Section 3(a)(1)(A) to the extent
          reasonably practicable.

  b. ShareAlike.

     In addition to the conditions in Section 3(a), if You Share
     Adapted Material You produce, the following conditions also apply.

       1. The Adapter's License You apply must be a Creative Commons
          license with the same License Elements, this version or
          later, or a BY-SA Compatible License.

       2. You must include the text of, or the URI or hyperlink to, the
          Adapter's License You apply. You may satisfy this condition
          in any reasonable manner based on the medium, means, and
          context in which You Share Adapted Material.

       3. You may not offer or impose any additional or different terms
          or conditions on, or apply any Effective Technological
          Measures to, Adapted Material that restrict exercise of the
          rights granted under the Adapter's License You apply.


Section 4 -- Sui Generis Database Rights.

Where the Licensed Rights include Sui Generis Database Rights that
apply to Your use of the Licensed Material:

  a. for the avoidance of doubt, Section 2(a)(1) grants You the right
     to extract, reuse, reproduce, and Share all or a substantial
     portion of the contents of the database;

  b. if You include all or a substantial portion of the database
     contents in a database in which You have Sui Generis Database
     Rights, then the database in which You have Sui Generis Database
     Rights (but not its individual contents) is Adapted Material,

     including for purposes of Section 3(b); and
  c. You must comply with the conditions in Section 3(a) if You Share
     all or a substantial portion of the contents of the database.

For the avoidance of doubt, this Section 4 supplements and does not
replace Your obligations under this Public License where the Licensed
Rights include other Copyright and Similar Rights.


Section 5 -- Disclaimer of Warranties and Limitation of Liability.

  a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
     EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
     AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
     ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
     IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
     WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
     PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
     ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
     KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
     ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.

  b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
     TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
     NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
     INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
     COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
     USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
     ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
     DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
     IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.

  c. The disclaimer of warranties and limitation of liability provided
     above shall be interpreted in a manner that, to the extent
     possible, most closely approximates an absolute disclaimer and
     waiver of all liability.


Section 6 -- Term and Termination.

  a. This Public License applies for the term of the Copyright and
     Similar Rights licensed here. However, if You fail to comply with
     this Public License, then Your rights under this Public License
     terminate automatically.

  b. Where Your right to use the Licensed Material has terminated under
     Section 6(a), it reinstates:

       1. automatically as of the date the violation is cured, provided
          it is cured within 30 days of Your discovery of the
          violation; or

       2. upon express reinstatement by the Licensor.

     For the avoidance of doubt, this Section 6(b) does not affect any
     right the Licensor may have to seek remedies for Your violations
     of this Public License.

  c. For the avoidance of doubt, the Licensor may also offer the
     Licensed Material under separate terms or conditions or stop
     distributing the Licensed Material at any time; however, doing so
     will not terminate this Public License.

  d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
     License.


Section 7 -- Other Terms and Conditions.

  a. The Licensor shall not be bound by any additional or different
     terms or conditions communicated by You unless expressly agreed.

  b. Any arrangements, understandings, or agreements regarding the
     Licensed Material not stated herein are separate from and
     independent of the terms and conditions of this Public License.


Section 8 -- Interpretation.

  a. For the avoidance of doubt, this Public License does not, and
     shall not be interpreted to, reduce, limit, restrict, or impose
     conditions on any use of the Licensed Material that could lawfully
     be made without permission under this Public License.

  b. To the extent possible, if any provision of this Public License is
     deemed unenforceable, it shall be automatically reformed to the
     minimum extent necessary to make it enforceable. If the provision
     cannot be reformed, it shall be severed from this Public License
     without affecting the enforceability of the remaining terms and
     conditions.

  c. No term or condition of this Public License will be waived and no
     failure to comply consented to unless expressly agreed to by the
     Licensor.

  d. Nothing in this Public License constitutes or may be interpreted
     as a limitation upon, or waiver of, any privileges and immunities
     that apply to the Licensor or You, including from the legal
     processes of any jurisdiction or authority.


=======================================================================

Creative Commons is not a party to its public licenses.
Notwithstanding, Creative Commons may elect to apply one of its public
licenses to material it publishes and in those instances will be
considered the "Licensor." Except for the limited purpose of indicating
that material is shared under a Creative Commons public license or as
otherwise permitted by the Creative Commons policies published at
creativecommons.org/policies, Creative Commons does not authorize the
use of the trademark "Creative Commons" or any other trademark or logo
of Creative Commons without its prior written consent including,
without limitation, in connection with any unauthorized modifications
to any of its public licenses or any other arrangements,
understandings, or agreements concerning use of licensed material. For
the avoidance of doubt, this paragraph does not form part of the public
licenses.

Creative Commons may be contacted at creativecommons.org.
070701000009E6000081A4000000000000000000000001645E367C000000FD000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/opencontainers/go-digest/MAINTAINERS    Derek McGowan <derek@mcgstyle.net> (@dmcgowan)
Stephen Day <stevvooe@gmail.com> (@stevvooe)
Vincent Batts <vbatts@hashbangbash.com> (@vbatts)
Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp> (@AkihiroSuda)
Sebastiaan van Stijn <github@gone.nl> (@thaJeztah)
   070701000009E7000081A4000000000000000000000001645E367C00001085000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/opencontainers/go-digest/README.md  # go-digest

[![GoDoc](https://godoc.org/github.com/opencontainers/go-digest?status.svg)](https://godoc.org/github.com/opencontainers/go-digest) [![Go Report Card](https://goreportcard.com/badge/github.com/opencontainers/go-digest)](https://goreportcard.com/report/github.com/opencontainers/go-digest) [![Build Status](https://travis-ci.org/opencontainers/go-digest.svg?branch=master)](https://travis-ci.org/opencontainers/go-digest)

Common digest package used across the container ecosystem.

Please see the [godoc](https://godoc.org/github.com/opencontainers/go-digest) for more information.

# What is a digest?

A digest is just a [hash](https://en.wikipedia.org/wiki/Hash_function).

The most common use case for a digest is to create a content identifier for use in [Content Addressable Storage](https://en.wikipedia.org/wiki/Content-addressable_storage) systems:

```go
id := digest.FromBytes([]byte("my content"))
```

In the example above, the id can be used to uniquely identify the byte slice "my content".
This allows two disparate applications to agree on a verifiable identifier without having to trust one another.

An identifying digest can be verified, as follows:

```go
if id != digest.FromBytes([]byte("my content")) {
  return errors.New("the content has changed!")
}
```

A `Verifier` type can be used to handle cases where an `io.Reader` makes more sense:

```go
rd := getContent()
verifier := id.Verifier()
io.Copy(verifier, rd)

if !verifier.Verified() {
  return errors.New("the content has changed!")
}
```

Using [Merkle DAGs](https://en.wikipedia.org/wiki/Merkle_tree), this can power a rich, safe, content distribution system.

# Usage

While the [godoc](https://godoc.org/github.com/opencontainers/go-digest) is considered the best resource, a few important items need to be called out when using this package.

1. Make sure to import the hash implementations into your application or the package will panic.
    You should have something like the following in the main (or other entrypoint) of your application:
   
    ```go
    import (
        _ "crypto/sha256"
        _ "crypto/sha512"
    )
    ```
    This may seem inconvenient but it allows you replace the hash 
    implementations with others, such as https://github.com/stevvooe/resumable.
 
2. Even though `digest.Digest` may be assemblable as a string, _always_ verify your input with `digest.Parse` or use `Digest.Validate` when accepting untrusted input.
    While there are measures to avoid common problems, this will ensure you have valid digests in the rest of your application.

3. While alternative encodings of hash values (digests) are possible (for example, base64), this package deals exclusively with hex-encoded digests.

# Stability

The Go API, at this stage, is considered stable, unless otherwise noted.

As always, before using a package export, read the [godoc](https://godoc.org/github.com/opencontainers/go-digest).

# Contributing

This package is considered fairly complete.
It has been in production in thousands (millions?) of deployments and is fairly battle-hardened.
New additions will be met with skepticism.
If you think there is a missing feature, please file a bug clearly describing the problem and the alternatives you tried before submitting a PR.

## Code of Conduct

Participation in the OpenContainers community is governed by [OpenContainer's Code of Conduct][code-of-conduct].

## Security

If you find an issue, please follow the [security][security] protocol to report it.

# Copyright and license

Copyright © 2019, 2020 OCI Contributors
Copyright © 2016 Docker, Inc.
All rights reserved, except as follows.
Code is released under the [Apache 2.0 license](LICENSE).
This `README.md` file and the [`CONTRIBUTING.md`](CONTRIBUTING.md) file are licensed under the Creative Commons Attribution 4.0 International License under the terms and conditions set forth in the file [`LICENSE.docs`](LICENSE.docs).
You may obtain a duplicate copy of the same license, titled CC BY-SA 4.0, at http://creativecommons.org/licenses/by-sa/4.0/.

[security]: https://github.com/opencontainers/org/blob/master/security
[code-of-conduct]: https://github.com/opencontainers/org/blob/master/CODE_OF_CONDUCT.md
   070701000009E8000081A4000000000000000000000001645E367C000016F8000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/opencontainers/go-digest/algorithm.go   // Copyright 2019, 2020 OCI Contributors
// Copyright 2017 Docker, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package digest

import (
	"crypto"
	"fmt"
	"hash"
	"io"
	"regexp"
)

// Algorithm identifies and implementation of a digester by an identifier.
// Note the that this defines both the hash algorithm used and the string
// encoding.
type Algorithm string

// supported digest types
const (
	SHA256 Algorithm = "sha256" // sha256 with hex encoding (lower case only)
	SHA384 Algorithm = "sha384" // sha384 with hex encoding (lower case only)
	SHA512 Algorithm = "sha512" // sha512 with hex encoding (lower case only)

	// Canonical is the primary digest algorithm used with the distribution
	// project. Other digests may be used but this one is the primary storage
	// digest.
	Canonical = SHA256
)

var (
	// TODO(stevvooe): Follow the pattern of the standard crypto package for
	// registration of digests. Effectively, we are a registerable set and
	// common symbol access.

	// algorithms maps values to hash.Hash implementations. Other algorithms
	// may be available but they cannot be calculated by the digest package.
	algorithms = map[Algorithm]crypto.Hash{
		SHA256: crypto.SHA256,
		SHA384: crypto.SHA384,
		SHA512: crypto.SHA512,
	}

	// anchoredEncodedRegexps contains anchored regular expressions for hex-encoded digests.
	// Note that /A-F/ disallowed.
	anchoredEncodedRegexps = map[Algorithm]*regexp.Regexp{
		SHA256: regexp.MustCompile(`^[a-f0-9]{64}$`),
		SHA384: regexp.MustCompile(`^[a-f0-9]{96}$`),
		SHA512: regexp.MustCompile(`^[a-f0-9]{128}$`),
	}
)

// Available returns true if the digest type is available for use. If this
// returns false, Digester and Hash will return nil.
func (a Algorithm) Available() bool {
	h, ok := algorithms[a]
	if !ok {
		return false
	}

	// check availability of the hash, as well
	return h.Available()
}

func (a Algorithm) String() string {
	return string(a)
}

// Size returns number of bytes returned by the hash.
func (a Algorithm) Size() int {
	h, ok := algorithms[a]
	if !ok {
		return 0
	}
	return h.Size()
}

// Set implemented to allow use of Algorithm as a command line flag.
func (a *Algorithm) Set(value string) error {
	if value == "" {
		*a = Canonical
	} else {
		// just do a type conversion, support is queried with Available.
		*a = Algorithm(value)
	}

	if !a.Available() {
		return ErrDigestUnsupported
	}

	return nil
}

// Digester returns a new digester for the specified algorithm. If the algorithm
// does not have a digester implementation, nil will be returned. This can be
// checked by calling Available before calling Digester.
func (a Algorithm) Digester() Digester {
	return &digester{
		alg:  a,
		hash: a.Hash(),
	}
}

// Hash returns a new hash as used by the algorithm. If not available, the
// method will panic. Check Algorithm.Available() before calling.
func (a Algorithm) Hash() hash.Hash {
	if !a.Available() {
		// Empty algorithm string is invalid
		if a == "" {
			panic(fmt.Sprintf("empty digest algorithm, validate before calling Algorithm.Hash()"))
		}

		// NOTE(stevvooe): A missing hash is usually a programming error that
		// must be resolved at compile time. We don't import in the digest
		// package to allow users to choose their hash implementation (such as
		// when using stevvooe/resumable or a hardware accelerated package).
		//
		// Applications that may want to resolve the hash at runtime should
		// call Algorithm.Available before call Algorithm.Hash().
		panic(fmt.Sprintf("%v not available (make sure it is imported)", a))
	}

	return algorithms[a].New()
}

// Encode encodes the raw bytes of a digest, typically from a hash.Hash, into
// the encoded portion of the digest.
func (a Algorithm) Encode(d []byte) string {
	// TODO(stevvooe): Currently, all algorithms use a hex encoding. When we
	// add support for back registration, we can modify this accordingly.
	return fmt.Sprintf("%x", d)
}

// FromReader returns the digest of the reader using the algorithm.
func (a Algorithm) FromReader(rd io.Reader) (Digest, error) {
	digester := a.Digester()

	if _, err := io.Copy(digester.Hash(), rd); err != nil {
		return "", err
	}

	return digester.Digest(), nil
}

// FromBytes digests the input and returns a Digest.
func (a Algorithm) FromBytes(p []byte) Digest {
	digester := a.Digester()

	if _, err := digester.Hash().Write(p); err != nil {
		// Writes to a Hash should never fail. None of the existing
		// hash implementations in the stdlib or hashes vendored
		// here can return errors from Write. Having a panic in this
		// condition instead of having FromBytes return an error value
		// avoids unnecessary error handling paths in all callers.
		panic("write to hash function returned error: " + err.Error())
	}

	return digester.Digest()
}

// FromString digests the string input and returns a Digest.
func (a Algorithm) FromString(s string) Digest {
	return a.FromBytes([]byte(s))
}

// Validate validates the encoded portion string
func (a Algorithm) Validate(encoded string) error {
	r, ok := anchoredEncodedRegexps[a]
	if !ok {
		return ErrDigestUnsupported
	}
	// Digests much always be hex-encoded, ensuring that their hex portion will
	// always be size*2
	if a.Size()*2 != len(encoded) {
		return ErrDigestInvalidLength
	}
	if r.MatchString(encoded) {
		return nil
	}
	return ErrDigestInvalidFormat
}
070701000009E9000081A4000000000000000000000001645E367C00001303000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/opencontainers/go-digest/digest.go  // Copyright 2019, 2020 OCI Contributors
// Copyright 2017 Docker, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package digest

import (
	"fmt"
	"hash"
	"io"
	"regexp"
	"strings"
)

// Digest allows simple protection of hex formatted digest strings, prefixed
// by their algorithm. Strings of type Digest have some guarantee of being in
// the correct format and it provides quick access to the components of a
// digest string.
//
// The following is an example of the contents of Digest types:
//
// 	sha256:7173b809ca12ec5dee4506cd86be934c4596dd234ee82c0662eac04a8c2c71dc
//
// This allows to abstract the digest behind this type and work only in those
// terms.
type Digest string

// NewDigest returns a Digest from alg and a hash.Hash object.
func NewDigest(alg Algorithm, h hash.Hash) Digest {
	return NewDigestFromBytes(alg, h.Sum(nil))
}

// NewDigestFromBytes returns a new digest from the byte contents of p.
// Typically, this can come from hash.Hash.Sum(...) or xxx.SumXXX(...)
// functions. This is also useful for rebuilding digests from binary
// serializations.
func NewDigestFromBytes(alg Algorithm, p []byte) Digest {
	return NewDigestFromEncoded(alg, alg.Encode(p))
}

// NewDigestFromHex is deprecated. Please use NewDigestFromEncoded.
func NewDigestFromHex(alg, hex string) Digest {
	return NewDigestFromEncoded(Algorithm(alg), hex)
}

// NewDigestFromEncoded returns a Digest from alg and the encoded digest.
func NewDigestFromEncoded(alg Algorithm, encoded string) Digest {
	return Digest(fmt.Sprintf("%s:%s", alg, encoded))
}

// DigestRegexp matches valid digest types.
var DigestRegexp = regexp.MustCompile(`[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+`)

// DigestRegexpAnchored matches valid digest types, anchored to the start and end of the match.
var DigestRegexpAnchored = regexp.MustCompile(`^` + DigestRegexp.String() + `$`)

var (
	// ErrDigestInvalidFormat returned when digest format invalid.
	ErrDigestInvalidFormat = fmt.Errorf("invalid checksum digest format")

	// ErrDigestInvalidLength returned when digest has invalid length.
	ErrDigestInvalidLength = fmt.Errorf("invalid checksum digest length")

	// ErrDigestUnsupported returned when the digest algorithm is unsupported.
	ErrDigestUnsupported = fmt.Errorf("unsupported digest algorithm")
)

// Parse parses s and returns the validated digest object. An error will
// be returned if the format is invalid.
func Parse(s string) (Digest, error) {
	d := Digest(s)
	return d, d.Validate()
}

// FromReader consumes the content of rd until io.EOF, returning canonical digest.
func FromReader(rd io.Reader) (Digest, error) {
	return Canonical.FromReader(rd)
}

// FromBytes digests the input and returns a Digest.
func FromBytes(p []byte) Digest {
	return Canonical.FromBytes(p)
}

// FromString digests the input and returns a Digest.
func FromString(s string) Digest {
	return Canonical.FromString(s)
}

// Validate checks that the contents of d is a valid digest, returning an
// error if not.
func (d Digest) Validate() error {
	s := string(d)
	i := strings.Index(s, ":")
	if i <= 0 || i+1 == len(s) {
		return ErrDigestInvalidFormat
	}
	algorithm, encoded := Algorithm(s[:i]), s[i+1:]
	if !algorithm.Available() {
		if !DigestRegexpAnchored.MatchString(s) {
			return ErrDigestInvalidFormat
		}
		return ErrDigestUnsupported
	}
	return algorithm.Validate(encoded)
}

// Algorithm returns the algorithm portion of the digest. This will panic if
// the underlying digest is not in a valid format.
func (d Digest) Algorithm() Algorithm {
	return Algorithm(d[:d.sepIndex()])
}

// Verifier returns a writer object that can be used to verify a stream of
// content against the digest. If the digest is invalid, the method will panic.
func (d Digest) Verifier() Verifier {
	return hashVerifier{
		hash:   d.Algorithm().Hash(),
		digest: d,
	}
}

// Encoded returns the encoded portion of the digest. This will panic if the
// underlying digest is not in a valid format.
func (d Digest) Encoded() string {
	return string(d[d.sepIndex()+1:])
}

// Hex is deprecated. Please use Digest.Encoded.
func (d Digest) Hex() string {
	return d.Encoded()
}

func (d Digest) String() string {
	return string(d)
}

func (d Digest) sepIndex() int {
	i := strings.Index(string(d), ":")

	if i < 0 {
		panic(fmt.Sprintf("no ':' separator in digest %q", d))
	}

	return i
}
 070701000009EA000081A4000000000000000000000001645E367C000004C2000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/opencontainers/go-digest/digester.go    // Copyright 2019, 2020 OCI Contributors
// Copyright 2017 Docker, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package digest

import "hash"

// Digester calculates the digest of written data. Writes should go directly
// to the return value of Hash, while calling Digest will return the current
// value of the digest.
type Digester interface {
	Hash() hash.Hash // provides direct access to underlying hash instance.
	Digest() Digest
}

// digester provides a simple digester definition that embeds a hasher.
type digester struct {
	alg  Algorithm
	hash hash.Hash
}

func (d *digester) Hash() hash.Hash {
	return d.hash
}

func (d *digester) Digest() Digest {
	return NewDigest(d.alg, d.hash)
}
  070701000009EB000081A4000000000000000000000001645E367C000009F4000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/opencontainers/go-digest/doc.go // Copyright 2019, 2020 OCI Contributors
// Copyright 2017 Docker, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package digest provides a generalized type to opaquely represent message
// digests and their operations within the registry. The Digest type is
// designed to serve as a flexible identifier in a content-addressable system.
// More importantly, it provides tools and wrappers to work with
// hash.Hash-based digests with little effort.
//
// Basics
//
// The format of a digest is simply a string with two parts, dubbed the
// "algorithm" and the "digest", separated by a colon:
//
// 	<algorithm>:<digest>
//
// An example of a sha256 digest representation follows:
//
// 	sha256:7173b809ca12ec5dee4506cd86be934c4596dd234ee82c0662eac04a8c2c71dc
//
// The "algorithm" portion defines both the hashing algorithm used to calculate
// the digest and the encoding of the resulting digest, which defaults to "hex"
// if not otherwise specified. Currently, all supported algorithms have their
// digests encoded in hex strings.
//
// In the example above, the string "sha256" is the algorithm and the hex bytes
// are the "digest".
//
// Because the Digest type is simply a string, once a valid Digest is
// obtained, comparisons are cheap, quick and simple to express with the
// standard equality operator.
//
// Verification
//
// The main benefit of using the Digest type is simple verification against a
// given digest. The Verifier interface, modeled after the stdlib hash.Hash
// interface, provides a common write sink for digest verification. After
// writing is complete, calling the Verifier.Verified method will indicate
// whether or not the stream of bytes matches the target digest.
//
// Missing Features
//
// In addition to the above, we intend to add the following features to this
// package:
//
// 1. A Digester type that supports write sink digest calculation.
//
// 2. Suspend and resume of ongoing digest calculations to support efficient digest verification in the registry.
//
package digest
070701000009EC000081A4000000000000000000000001645E367C00000548000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/opencontainers/go-digest/verifiers.go   // Copyright 2019, 2020 OCI Contributors
// Copyright 2017 Docker, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package digest

import (
	"hash"
	"io"
)

// Verifier presents a general verification interface to be used with message
// digests and other byte stream verifications. Users instantiate a Verifier
// from one of the various methods, write the data under test to it then check
// the result with the Verified method.
type Verifier interface {
	io.Writer

	// Verified will return true if the content written to Verifier matches
	// the digest.
	Verified() bool
}

type hashVerifier struct {
	digest Digest
	hash   hash.Hash
}

func (hv hashVerifier) Write(p []byte) (n int, err error) {
	return hv.hash.Write(p)
}

func (hv hashVerifier) Verified() bool {
	return hv.digest == NewDigest(hv.digest.Algorithm(), hv.hash)
}
070701000009ED000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/opencontainers/image-spec   070701000009EE000081A4000000000000000000000001645E367C00002A0F000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/opencontainers/image-spec/LICENSE   
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   Copyright 2016 The Linux Foundation.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
 070701000009EF000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/opencontainers/image-spec/specs-go  070701000009F0000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/opencontainers/image-spec/specs-go/v1   070701000009F1000081A4000000000000000000000001645E367C00000DE9000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/opencontainers/image-spec/specs-go/v1/annotations.go    // Copyright 2016 The Linux Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package v1

const (
	// AnnotationCreated is the annotation key for the date and time on which the image was built (date-time string as defined by RFC 3339).
	AnnotationCreated = "org.opencontainers.image.created"

	// AnnotationAuthors is the annotation key for the contact details of the people or organization responsible for the image (freeform string).
	AnnotationAuthors = "org.opencontainers.image.authors"

	// AnnotationURL is the annotation key for the URL to find more information on the image.
	AnnotationURL = "org.opencontainers.image.url"

	// AnnotationDocumentation is the annotation key for the URL to get documentation on the image.
	AnnotationDocumentation = "org.opencontainers.image.documentation"

	// AnnotationSource is the annotation key for the URL to get source code for building the image.
	AnnotationSource = "org.opencontainers.image.source"

	// AnnotationVersion is the annotation key for the version of the packaged software.
	// The version MAY match a label or tag in the source code repository.
	// The version MAY be Semantic versioning-compatible.
	AnnotationVersion = "org.opencontainers.image.version"

	// AnnotationRevision is the annotation key for the source control revision identifier for the packaged software.
	AnnotationRevision = "org.opencontainers.image.revision"

	// AnnotationVendor is the annotation key for the name of the distributing entity, organization or individual.
	AnnotationVendor = "org.opencontainers.image.vendor"

	// AnnotationLicenses is the annotation key for the license(s) under which contained software is distributed as an SPDX License Expression.
	AnnotationLicenses = "org.opencontainers.image.licenses"

	// AnnotationRefName is the annotation key for the name of the reference for a target.
	// SHOULD only be considered valid when on descriptors on `index.json` within image layout.
	AnnotationRefName = "org.opencontainers.image.ref.name"

	// AnnotationTitle is the annotation key for the human-readable title of the image.
	AnnotationTitle = "org.opencontainers.image.title"

	// AnnotationDescription is the annotation key for the human-readable description of the software packaged in the image.
	AnnotationDescription = "org.opencontainers.image.description"

	// AnnotationBaseImageDigest is the annotation key for the digest of the image's base image.
	AnnotationBaseImageDigest = "org.opencontainers.image.base.digest"

	// AnnotationBaseImageName is the annotation key for the image reference of the image's base image.
	AnnotationBaseImageName = "org.opencontainers.image.base.name"

	// AnnotationArtifactCreated is the annotation key for the date and time on which the artifact was built, conforming to RFC 3339.
	AnnotationArtifactCreated = "org.opencontainers.artifact.created"

	// AnnotationArtifactDescription is the annotation key for the human readable description for the artifact.
	AnnotationArtifactDescription = "org.opencontainers.artifact.description"
)
   070701000009F2000081A4000000000000000000000001645E367C000011C4000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/opencontainers/image-spec/specs-go/v1/config.go // Copyright 2016 The Linux Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package v1

import (
	"time"

	digest "github.com/opencontainers/go-digest"
)

// ImageConfig defines the execution parameters which should be used as a base when running a container using an image.
type ImageConfig struct {
	// User defines the username or UID which the process in the container should run as.
	User string `json:"User,omitempty"`

	// ExposedPorts a set of ports to expose from a container running this image.
	ExposedPorts map[string]struct{} `json:"ExposedPorts,omitempty"`

	// Env is a list of environment variables to be used in a container.
	Env []string `json:"Env,omitempty"`

	// Entrypoint defines a list of arguments to use as the command to execute when the container starts.
	Entrypoint []string `json:"Entrypoint,omitempty"`

	// Cmd defines the default arguments to the entrypoint of the container.
	Cmd []string `json:"Cmd,omitempty"`

	// Volumes is a set of directories describing where the process is likely write data specific to a container instance.
	Volumes map[string]struct{} `json:"Volumes,omitempty"`

	// WorkingDir sets the current working directory of the entrypoint process in the container.
	WorkingDir string `json:"WorkingDir,omitempty"`

	// Labels contains arbitrary metadata for the container.
	Labels map[string]string `json:"Labels,omitempty"`

	// StopSignal contains the system call signal that will be sent to the container to exit.
	StopSignal string `json:"StopSignal,omitempty"`

	// ArgsEscaped
	//
	// Deprecated: This field is present only for legacy compatibility with
	// Docker and should not be used by new image builders.  It is used by Docker
	// for Windows images to indicate that the `Entrypoint` or `Cmd` or both,
	// contains only a single element array, that is a pre-escaped, and combined
	// into a single string `CommandLine`. If `true` the value in `Entrypoint` or
	// `Cmd` should be used as-is to avoid double escaping.
	// https://github.com/opencontainers/image-spec/pull/892
	ArgsEscaped bool `json:"ArgsEscaped,omitempty"`
}

// RootFS describes a layer content addresses
type RootFS struct {
	// Type is the type of the rootfs.
	Type string `json:"type"`

	// DiffIDs is an array of layer content hashes (DiffIDs), in order from bottom-most to top-most.
	DiffIDs []digest.Digest `json:"diff_ids"`
}

// History describes the history of a layer.
type History struct {
	// Created is the combined date and time at which the layer was created, formatted as defined by RFC 3339, section 5.6.
	Created *time.Time `json:"created,omitempty"`

	// CreatedBy is the command which created the layer.
	CreatedBy string `json:"created_by,omitempty"`

	// Author is the author of the build point.
	Author string `json:"author,omitempty"`

	// Comment is a custom message set when creating the layer.
	Comment string `json:"comment,omitempty"`

	// EmptyLayer is used to mark if the history item created a filesystem diff.
	EmptyLayer bool `json:"empty_layer,omitempty"`
}

// Image is the JSON structure which describes some basic information about the image.
// This provides the `application/vnd.oci.image.config.v1+json` mediatype when marshalled to JSON.
type Image struct {
	// Created is the combined date and time at which the image was created, formatted as defined by RFC 3339, section 5.6.
	Created *time.Time `json:"created,omitempty"`

	// Author defines the name and/or email address of the person or entity which created and is responsible for maintaining the image.
	Author string `json:"author,omitempty"`

	// Platform describes the platform which the image in the manifest runs on.
	Platform

	// Config defines the execution parameters which should be used as a base when running a container using the image.
	Config ImageConfig `json:"config,omitempty"`

	// RootFS references the layer content addresses used by the image.
	RootFS RootFS `json:"rootfs"`

	// History describes the history of each layer.
	History []History `json:"history,omitempty"`
}
070701000009F3000081A4000000000000000000000001645E367C00000B1C000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/opencontainers/image-spec/specs-go/v1/descriptor.go // Copyright 2016-2022 The Linux Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package v1

import digest "github.com/opencontainers/go-digest"

// Descriptor describes the disposition of targeted content.
// This structure provides `application/vnd.oci.descriptor.v1+json` mediatype
// when marshalled to JSON.
type Descriptor struct {
	// MediaType is the media type of the object this schema refers to.
	MediaType string `json:"mediaType,omitempty"`

	// Digest is the digest of the targeted content.
	Digest digest.Digest `json:"digest"`

	// Size specifies the size in bytes of the blob.
	Size int64 `json:"size"`

	// URLs specifies a list of URLs from which this object MAY be downloaded
	URLs []string `json:"urls,omitempty"`

	// Annotations contains arbitrary metadata relating to the targeted content.
	Annotations map[string]string `json:"annotations,omitempty"`

	// Data is an embedding of the targeted content. This is encoded as a base64
	// string when marshalled to JSON (automatically, by encoding/json). If
	// present, Data can be used directly to avoid fetching the targeted content.
	Data []byte `json:"data,omitempty"`

	// Platform describes the platform which the image in the manifest runs on.
	//
	// This should only be used when referring to a manifest.
	Platform *Platform `json:"platform,omitempty"`

	// ArtifactType is the IANA media type of this artifact.
	ArtifactType string `json:"artifactType,omitempty"`
}

// Platform describes the platform which the image in the manifest runs on.
type Platform struct {
	// Architecture field specifies the CPU architecture, for example
	// `amd64` or `ppc64`.
	Architecture string `json:"architecture"`

	// OS specifies the operating system, for example `linux` or `windows`.
	OS string `json:"os"`

	// OSVersion is an optional field specifying the operating system
	// version, for example on Windows `10.0.14393.1066`.
	OSVersion string `json:"os.version,omitempty"`

	// OSFeatures is an optional field specifying an array of strings,
	// each listing a required OS feature (for example on Windows `win32k`).
	OSFeatures []string `json:"os.features,omitempty"`

	// Variant is an optional field specifying a variant of the CPU, for
	// example `v7` to specify ARMv7 when architecture is `arm`.
	Variant string `json:"variant,omitempty"`
}
070701000009F4000081A4000000000000000000000001645E367C000004E0000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/opencontainers/image-spec/specs-go/v1/index.go  // Copyright 2016 The Linux Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package v1

import "github.com/opencontainers/image-spec/specs-go"

// Index references manifests for various platforms.
// This structure provides `application/vnd.oci.image.index.v1+json` mediatype when marshalled to JSON.
type Index struct {
	specs.Versioned

	// MediaType specifies the type of this document data structure e.g. `application/vnd.oci.image.index.v1+json`
	MediaType string `json:"mediaType,omitempty"`

	// Manifests references platform specific manifests.
	Manifests []Descriptor `json:"manifests"`

	// Annotations contains arbitrary metadata for the image index.
	Annotations map[string]string `json:"annotations,omitempty"`
}
070701000009F5000081A4000000000000000000000001645E367C000003D7000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/opencontainers/image-spec/specs-go/v1/layout.go // Copyright 2016 The Linux Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package v1

const (
	// ImageLayoutFile is the file name of oci image layout file
	ImageLayoutFile = "oci-layout"
	// ImageLayoutVersion is the version of ImageLayout
	ImageLayoutVersion = "1.0.0"
)

// ImageLayout is the structure in the "oci-layout" file, found in the root
// of an OCI Image-layout directory.
type ImageLayout struct {
	Version string `json:"imageLayoutVersion"`
}
 070701000009F6000081A4000000000000000000000001645E367C0000080A000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/opencontainers/image-spec/specs-go/v1/manifest.go   // Copyright 2016-2022 The Linux Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package v1

import "github.com/opencontainers/image-spec/specs-go"

// Manifest provides `application/vnd.oci.image.manifest.v1+json` mediatype structure when marshalled to JSON.
type Manifest struct {
	specs.Versioned

	// MediaType specifies the type of this document data structure e.g. `application/vnd.oci.image.manifest.v1+json`
	MediaType string `json:"mediaType,omitempty"`

	// ArtifactType specifies the IANA media type of artifact when the manifest is used for an artifact.
	ArtifactType string `json:"artifactType,omitempty"`

	// Config references a configuration object for a container, by digest.
	// The referenced configuration object is a JSON blob that the runtime uses to set up the container.
	Config Descriptor `json:"config"`

	// Layers is an indexed list of layers referenced by the manifest.
	Layers []Descriptor `json:"layers"`

	// Subject is an optional link from the image manifest to another manifest forming an association between the image manifest and the other manifest.
	Subject *Descriptor `json:"subject,omitempty"`

	// Annotations contains arbitrary metadata for the image manifest.
	Annotations map[string]string `json:"annotations,omitempty"`
}

// ScratchDescriptor is the descriptor of a blob with content of `{}`.
var ScratchDescriptor = Descriptor{
	MediaType: MediaTypeScratch,
	Digest:    `sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a`,
	Size:      2,
	Data:      []byte(`{}`),
}
  070701000009F7000081A4000000000000000000000001645E367C00000D6A000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/opencontainers/image-spec/specs-go/v1/mediatype.go  // Copyright 2016 The Linux Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package v1

const (
	// MediaTypeDescriptor specifies the media type for a content descriptor.
	MediaTypeDescriptor = "application/vnd.oci.descriptor.v1+json"

	// MediaTypeLayoutHeader specifies the media type for the oci-layout.
	MediaTypeLayoutHeader = "application/vnd.oci.layout.header.v1+json"

	// MediaTypeImageManifest specifies the media type for an image manifest.
	MediaTypeImageManifest = "application/vnd.oci.image.manifest.v1+json"

	// MediaTypeImageIndex specifies the media type for an image index.
	MediaTypeImageIndex = "application/vnd.oci.image.index.v1+json"

	// MediaTypeImageLayer is the media type used for layers referenced by the manifest.
	MediaTypeImageLayer = "application/vnd.oci.image.layer.v1.tar"

	// MediaTypeImageLayerGzip is the media type used for gzipped layers
	// referenced by the manifest.
	MediaTypeImageLayerGzip = "application/vnd.oci.image.layer.v1.tar+gzip"

	// MediaTypeImageLayerZstd is the media type used for zstd compressed
	// layers referenced by the manifest.
	MediaTypeImageLayerZstd = "application/vnd.oci.image.layer.v1.tar+zstd"

	// MediaTypeImageLayerNonDistributable is the media type for layers referenced by
	// the manifest but with distribution restrictions.
	//
	// Deprecated: Non-distributable layers are deprecated, and not recommended
	// for future use. Implementations SHOULD NOT produce new non-distributable
	// layers.
	// https://github.com/opencontainers/image-spec/pull/965
	MediaTypeImageLayerNonDistributable = "application/vnd.oci.image.layer.nondistributable.v1.tar"

	// MediaTypeImageLayerNonDistributableGzip is the media type for
	// gzipped layers referenced by the manifest but with distribution
	// restrictions.
	//
	// Deprecated: Non-distributable layers are deprecated, and not recommended
	// for future use. Implementations SHOULD NOT produce new non-distributable
	// layers.
	// https://github.com/opencontainers/image-spec/pull/965
	MediaTypeImageLayerNonDistributableGzip = "application/vnd.oci.image.layer.nondistributable.v1.tar+gzip"

	// MediaTypeImageLayerNonDistributableZstd is the media type for zstd
	// compressed layers referenced by the manifest but with distribution
	// restrictions.
	//
	// Deprecated: Non-distributable layers are deprecated, and not recommended
	// for future use. Implementations SHOULD NOT produce new non-distributable
	// layers.
	// https://github.com/opencontainers/image-spec/pull/965
	MediaTypeImageLayerNonDistributableZstd = "application/vnd.oci.image.layer.nondistributable.v1.tar+zstd"

	// MediaTypeImageConfig specifies the media type for the image configuration.
	MediaTypeImageConfig = "application/vnd.oci.image.config.v1+json"

	// MediaTypeScratch specifies the media type for an unused blob containing the value `{}`
	MediaTypeScratch = "application/vnd.oci.scratch.v1+json"
)
  070701000009F8000081A4000000000000000000000001645E367C0000046F000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/opencontainers/image-spec/specs-go/version.go   // Copyright 2016 The Linux Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package specs

import "fmt"

const (
	// VersionMajor is for an API incompatible changes
	VersionMajor = 1
	// VersionMinor is for functionality in a backwards-compatible manner
	VersionMinor = 1
	// VersionPatch is for backwards-compatible bug fixes
	VersionPatch = 0

	// VersionDev indicates development branch. Releases will be empty string.
	VersionDev = "-rc.3"
)

// Version is the specification version that the package types support.
var Version = fmt.Sprintf("%d.%d.%d%s", VersionMajor, VersionMinor, VersionPatch, VersionDev)
 070701000009F9000081A4000000000000000000000001645E367C000003AA000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/opencontainers/image-spec/specs-go/versioned.go // Copyright 2016 The Linux Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package specs

// Versioned provides a struct with the manifest schemaVersion and mediaType.
// Incoming content with unknown schema version can be decoded against this
// struct to check the version.
type Versioned struct {
	// SchemaVersion is the image manifest schema that this image follows
	SchemaVersion int `json:"schemaVersion"`
}
  070701000009FA000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003100000000elemental-cli-0.3.1/vendor/github.com/packethost  070701000009FB000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/packethost/packngo  070701000009FC000081A4000000000000000000000001645E367C00000AAD000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/packethost/packngo/LICENSE.txt  Copyright (c) 2014 The packngo AUTHORS. All rights reserved.

MIT License

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

======================
Portions of the client are based on code at:
https://github.com/google/go-github/ and
https://github.com/digitalocean/godo

Copyright (c) 2013 The go-github AUTHORS. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

   070701000009FD000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/packethost/packngo/metadata 070701000009FE000081A4000000000000000000000001645E367C00000106000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/packethost/packngo/metadata/doc.go  // Package metadata implements the Equinix Metal Metadata API available
// to Equinix Metal devices at https://metadata.platformequinix.com/metadata.
//
// For more information, see
// https://metal.equinix.com/developers/docs/servers/metadata/
package metadata
  070701000009FF000081A4000000000000000000000001645E367C00000F65000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/packethost/packngo/metadata/metadata.go package metadata

import (
	"encoding/json"
	"errors"
	"fmt"
	"io/ioutil"
	"net"
	"net/http"
)

const BaseURL = "https://metadata.platformequinix.com"

func GetMetadata() (*CurrentDevice, error) {
	return GetMetadataFromURL(BaseURL)
}

func GetMetadataFromURL(baseURL string) (*CurrentDevice, error) {
	res, err := http.Get(baseURL + "/metadata")
	if err != nil {
		return nil, err
	}

	b, err := ioutil.ReadAll(res.Body)
	res.Body.Close()
	if err != nil {
		return nil, err
	}

	var result struct {
		Error string `json:"error"`
		*CurrentDevice
	}
	if err := json.Unmarshal(b, &result); err != nil {
		if res.StatusCode >= 400 {
			return nil, errors.New(res.Status)
		}
		return nil, err
	}
	if result.Error != "" {
		return nil, errors.New(result.Error)
	}
	return result.CurrentDevice, nil
}

func GetUserData() ([]byte, error) {
	return GetUserDataFromURL(BaseURL)
}

func GetUserDataFromURL(baseURL string) ([]byte, error) {
	res, err := http.Get(baseURL + "/userdata")
	if err != nil {
		return nil, err
	}

	b, err := ioutil.ReadAll(res.Body)
	res.Body.Close()
	return b, err
}

type AddressFamily int

const (
	IPv4 = AddressFamily(4)
	IPv6 = AddressFamily(6)
)

type AddressInfo struct {
	ID          string        `json:"id"`
	Family      AddressFamily `json:"address_family"`
	Public      bool          `json:"public"`
	Management  bool          `json:"management"`
	Address     net.IP        `json:"address"`
	NetworkMask net.IP        `json:"netmask"`
	Gateway     net.IP        `json:"gateway"`
	NetworkBits int           `json:"cidr"`

	// These are available, but not really needed:
	//   Network     net.IP `json:"network"`
}

type BondingMode int

const (
	BondingBalanceRR    = BondingMode(0)
	BondingActiveBackup = BondingMode(1)
	BondingBalanceXOR   = BondingMode(2)
	BondingBroadcast    = BondingMode(3)
	BondingLACP         = BondingMode(4)
	BondingBalanceTLB   = BondingMode(5)
	BondingBalanceALB   = BondingMode(6)
)

var bondingModeStrings = map[BondingMode]string{
	BondingBalanceRR:    "balance-rr",
	BondingActiveBackup: "active-backup",
	BondingBalanceXOR:   "balance-xor",
	BondingBroadcast:    "broadcast",
	BondingLACP:         "802.3ad",
	BondingBalanceTLB:   "balance-tlb",
	BondingBalanceALB:   "balance-alb",
}

func (m BondingMode) String() string {
	if str, ok := bondingModeStrings[m]; ok {
		return str
	}
	return fmt.Sprintf("%d", m)
}

type CurrentDevice struct {
	ID         string                 `json:"id"`
	Hostname   string                 `json:"hostname"`
	IQN        string                 `json:"iqn"`
	Plan       string                 `json:"plan"`
	Metro      string                 `json:"metro"`
	Facility   string                 `json:"facility"`
	Tags       []string               `json:"tags"`
	SSHKeys    []string               `json:"ssh_keys"`
	OS         OperatingSystem        `json:"operating_system"`
	Network    NetworkInfo            `json:"network"`
	Volumes    []VolumeInfo           `json:"volumes"`
	CustomData map[string]interface{} `json:"customdata"`

	// This is available, but is actually inaccurate, currently:
	//   APIBaseURL string          `json:"api_url"`
}

type InterfaceInfo struct {
	Name string `json:"name"`
	MAC  string `json:"mac"`
}

func (i *InterfaceInfo) ParseMAC() (net.HardwareAddr, error) {
	return net.ParseMAC(i.MAC)
}

type NetworkInfo struct {
	Interfaces []InterfaceInfo `json:"interfaces"`
	Addresses  []AddressInfo   `json:"addresses"`

	Bonding struct {
		Mode BondingMode `json:"mode"`
	} `json:"bonding"`
}

func (n *NetworkInfo) BondingMode() BondingMode {
	return n.Bonding.Mode
}

type OperatingSystem struct {
	Slug    string `json:"slug"`
	Distro  string `json:"distro"`
	Version string `json:"version"`
}

type VolumeInfo struct {
	Name string   `json:"name"`
	IQN  string   `json:"iqn"`
	IPs  []net.IP `json:"ips"`

	Capacity struct {
		Size int    `json:"size,string"`
		Unit string `json:"unit"`
	} `json:"capacity"`
}
   07070100000A00000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003000000000elemental-cli-0.3.1/vendor/github.com/pelletier   07070100000A01000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml   07070100000A02000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2    07070100000A03000081A4000000000000000000000001645E367C00000026000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/.dockerignore  cmd/tomll/tomll
cmd/tomljson/tomljson
  07070100000A04000081A4000000000000000000000001645E367C0000004A000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/.gitattributes * text=auto

benchmark/benchmark.toml text eol=lf
testdata/** text eol=lf
  07070100000A05000081A4000000000000000000000001645E367C0000006A000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/.gitignore test_program/test_program_bin
fuzz/
cmd/tomll/tomll
cmd/tomljson/tomljson
cmd/tomltestgen/tomltestgen
dist  07070100000A06000081A4000000000000000000000001645E367C00000584000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/.golangci.toml [service]
golangci-lint-version =  "1.39.0"

[linters-settings.wsl]
allow-assign-and-anything = true

[linters-settings.exhaustive]
default-signifies-exhaustive = true

[linters]
disable-all = true
enable = [
    "asciicheck",
    "bodyclose",
    "cyclop",
    "deadcode",
    "depguard",
    "dogsled",
    "dupl",
    "durationcheck",
    "errcheck",
    "errorlint",
    "exhaustive",
    # "exhaustivestruct",
    "exportloopref",
    "forbidigo",
    # "forcetypeassert",
    "funlen",
    "gci",
    # "gochecknoglobals",
    "gochecknoinits",
    "gocognit",
    "goconst",
    "gocritic",
    "gocyclo",
    "godot",
    "godox",
    # "goerr113",
    "gofmt",
    "gofumpt",
    "goheader",
    "goimports",
    "golint",
    "gomnd",
    # "gomoddirectives",
    "gomodguard",
    "goprintffuncname",
    "gosec",
    "gosimple",
    "govet",
    # "ifshort",
    "importas",
    "ineffassign",
    "lll",
    "makezero",
    "misspell",
    "nakedret",
    "nestif",
    "nilerr",
    # "nlreturn",
    "noctx",
    "nolintlint",
    #"paralleltest",
    "prealloc",
    "predeclared",
    "revive",
    "rowserrcheck",
    "sqlclosecheck",
    "staticcheck",
    "structcheck",
    "stylecheck",
    # "testpackage",
    "thelper",
    "tparallel",
    "typecheck",
    "unconvert",
    "unparam",
    "unused",
    "varcheck",
    "wastedassign",
    "whitespace",
    # "wrapcheck",
    # "wsl"
]
07070100000A07000081A4000000000000000000000001645E367C00000A3E000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/.goreleaser.yaml   before:
  hooks:
    - go mod tidy
    - go fmt ./...
    - go test ./...
builds:
  - id: tomll
    main: ./cmd/tomll
    binary: tomll
    env:
      - CGO_ENABLED=0
    flags:
      - -trimpath
    ldflags:
      - -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.CommitDate}}
    mod_timestamp: '{{ .CommitTimestamp }}'
    targets:
      - linux_amd64
      - linux_arm64
      - linux_arm
      - windows_amd64
      - windows_arm64
      - windows_arm
      - darwin_amd64
      - darwin_arm64
  - id: tomljson
    main: ./cmd/tomljson
    binary: tomljson
    env:
      - CGO_ENABLED=0
    flags:
      - -trimpath
    ldflags:
      - -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.CommitDate}}
    mod_timestamp: '{{ .CommitTimestamp }}'
    targets:
      - linux_amd64
      - linux_arm64
      - linux_arm
      - windows_amd64
      - windows_arm64
      - windows_arm
      - darwin_amd64
      - darwin_arm64
  - id: jsontoml
    main: ./cmd/jsontoml
    binary: jsontoml
    env:
      - CGO_ENABLED=0
    flags:
      - -trimpath
    ldflags:
      - -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.CommitDate}}
    mod_timestamp: '{{ .CommitTimestamp }}'
    targets:
      - linux_amd64
      - linux_arm64
      - linux_arm
      - windows_amd64
      - windows_arm64
      - windows_arm
      - darwin_amd64
      - darwin_arm64
universal_binaries:
  - id: tomll
    replace: true
    name_template: tomll
  - id: tomljson
    replace: true
    name_template: tomljson
  - id: jsontoml
    replace: true
    name_template: jsontoml
archives:
- id: jsontoml
  format: tar.xz
  builds:
    - jsontoml
  files:
  - none*
  name_template: "{{ .Binary }}_{{.Version}}_{{ .Os }}_{{ .Arch }}"
- id: tomljson
  format: tar.xz
  builds:
    - tomljson
  files:
  - none*
  name_template: "{{ .Binary }}_{{.Version}}_{{ .Os }}_{{ .Arch }}"
- id: tomll
  format: tar.xz
  builds:
    - tomll
  files:
  - none*
  name_template: "{{ .Binary }}_{{.Version}}_{{ .Os }}_{{ .Arch }}"
dockers:
  - id: tools
    goos: linux
    goarch: amd64
    ids:
      - jsontoml
      - tomljson
      - tomll
    image_templates:
      - "ghcr.io/pelletier/go-toml:latest"
      - "ghcr.io/pelletier/go-toml:{{ .Tag }}"
      - "ghcr.io/pelletier/go-toml:v{{ .Major }}"
    skip_push: false
checksum:
  name_template: 'sha256sums.txt'
snapshot:
  name_template: "{{ incpatch .Version }}-next"
release:
  github:
    owner: pelletier
    name: go-toml
  draft: true
  prerelease: auto
  mode: replace
changelog:
  use: github-native
announce:
  skip: true
  07070100000A08000081A4000000000000000000000001645E367C00001D55000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/CONTRIBUTING.md    # Contributing

Thank you for your interest in go-toml! We appreciate you considering
contributing to go-toml!

The main goal is the project is to provide an easy-to-use and efficient TOML
implementation for Go that gets the job done and gets out of your way – dealing
with TOML is probably not the central piece of your project.

As the single maintainer of go-toml, time is scarce. All help, big or small, is
more than welcomed!

## Ask questions

Any question you may have, somebody else might have it too. Always feel free to
ask them on the [discussion board][discussions]. We will try to answer them as
clearly and quickly as possible, time permitting.

Asking questions also helps us identify areas where the documentation needs
improvement, or new features that weren't envisioned before. Sometimes, a
seemingly innocent question leads to the fix of a bug. Don't hesitate and ask
away!

[discussions]: https://github.com/pelletier/go-toml/discussions

## Improve the documentation

The best way to share your knowledge and experience with go-toml is to improve
the documentation. Fix a typo, clarify an interface, add an example, anything
goes!

The documentation is present in the [README][readme] and thorough the source
code. On release, it gets updated on [pkg.go.dev][pkg.go.dev]. To make a change
to the documentation, create a pull request with your proposed changes. For
simple changes like that, the easiest way to go is probably the "Fork this
project and edit the file" button on Github, displayed at the top right of the
file. Unless it's a trivial change (for example a typo), provide a little bit of
context in your pull request description or commit message.

## Report a bug

Found a bug! Sorry to hear that :(. Help us and other track them down and fix by
reporting it. [File a new bug report][bug-report] on the [issues
tracker][issues-tracker]. The template should provide enough guidance on what to
include. When in doubt: add more details! By reducing ambiguity and providing
more information, it decreases back and forth and saves everyone time.

## Code changes

Want to contribute a patch? Very happy to hear that!

First, some high-level rules:

- A short proposal with some POC code is better than a lengthy piece of text
  with no code. Code speaks louder than words. That being said, bigger changes
  should probably start with a [discussion][discussions].
- No backward-incompatible patch will be accepted unless discussed. Sometimes
  it's hard, but we try not to break people's programs unless we absolutely have
  to.
- If you are writing a new feature or extending an existing one, make sure to
  write some documentation.
- Bug fixes need to be accompanied with regression tests.
- New code needs to be tested.
- Your commit messages need to explain why the change is needed, even if already
  included in the PR description.

It does sound like a lot, but those best practices are here to save time overall
and continuously improve the quality of the project, which is something everyone
benefits from.

### Get started

The fairly standard code contribution process looks like that:

1. [Fork the project][fork].
2. Make your changes, commit on any branch you like.
3. [Open up a pull request][pull-request]
4. Review, potential ask for changes.
5. Merge.

Feel free to ask for help! You can create draft pull requests to gather
some early feedback!

### Run the tests

You can run tests for go-toml using Go's test tool: `go test -race ./...`.

During the pull request process, all tests will be ran on Linux, Windows, and
MacOS on the last two versions of Go.

However, given GitHub's new policy to _not_ run Actions on pull requests until a
maintainer clicks on button, it is highly recommended that you run them locally
as you make changes.

### Check coverage

We use `go tool cover` to compute test coverage. Most code editors have a way to
run and display code coverage, but at the end of the day, we do this:

```
go test -covermode=atomic -coverprofile=coverage.out
go tool cover -func=coverage.out
```

and verify that the overall percentage of tested code does not go down. This is
a requirement. As a rule of thumb, all lines of code touched by your changes
should be covered. On Unix you can use `./ci.sh coverage -d v2` to check if your
code lowers the coverage.

### Verify performance

Go-toml aims to stay efficient. We rely on a set of scenarios executed with Go's
builtin benchmark systems. Because of their noisy nature, containers provided by
Github Actions cannot be reliably used for benchmarking. As a result, you are
responsible for checking that your changes do not incur a performance penalty.
You can run their following to execute benchmarks:

```
go test ./... -bench=. -count=10
```

Benchmark results should be compared against each other with
[benchstat][benchstat]. Typical flow looks like this:

1. On the `v2` branch, run `go test ./... -bench=. -count 10` and save output to
   a file (for example `old.txt`).
2. Make some code changes.
3. Run `go test ....` again, and save the output to an other file (for example
   `new.txt`).
4. Run `benchstat old.txt new.txt` to check that time/op does not go up in any
   test.

On Unix you can use `./ci.sh benchmark -d v2` to verify how your code impacts
performance.

It is highly encouraged to add the benchstat results to your pull request
description. Pull requests that lower performance will receive more scrutiny.

[benchstat]: https://pkg.go.dev/golang.org/x/perf/cmd/benchstat

### Style

Try to look around and follow the same format and structure as the rest of the
code. We enforce using `go fmt` on the whole code base.

---

## Maintainers-only

### Merge pull request

Checklist:

- Passing CI.
- Does not introduce backward-incompatible changes (unless discussed).
- Has relevant doc changes.
- Benchstat does not show performance regression.
- Pull request is [labeled appropriately][pr-labels].
- Title will be understandable in the changelog.

1. Merge using "squash and merge".
2. Make sure to edit the commit message to keep all the useful information
   nice and clean.
3. Make sure the commit title is clear and contains the PR number (#123).

### New release

1. Decide on the next version number. Use semver.
2. Generate release notes using [`gh`][gh]. Example:
```
$ gh api -X POST \
  -F tag_name='v2.0.0-beta.5' \
  -F target_commitish='v2' \
  -F previous_tag_name='v2.0.0-beta.4' \
  --jq '.body' \
  repos/pelletier/go-toml/releases/generate-notes
```
3. Look for "Other changes". That would indicate a pull request not labeled
   properly. Tweak labels and pull request titles until changelog looks good for
   users.
4. [Draft new release][new-release].
5. Fill tag and target with the same value used to generate the changelog.
6. Set title to the new tag value.
7. Paste the generated changelog.
8. Check "create discussion", in the "Releases" category.
9. Check pre-release if new version is an alpha or beta.

[issues-tracker]: https://github.com/pelletier/go-toml/issues
[bug-report]: https://github.com/pelletier/go-toml/issues/new?template=bug_report.md
[pkg.go.dev]: https://pkg.go.dev/github.com/pelletier/go-toml
[readme]: ./README.md
[fork]: https://help.github.com/articles/fork-a-repo
[pull-request]: https://help.github.com/en/articles/creating-a-pull-request
[new-release]: https://github.com/pelletier/go-toml/releases/new
[gh]: https://github.com/cli/cli
[pr-labels]: https://github.com/pelletier/go-toml/blob/v2/.github/release.yml
   07070100000A09000081A4000000000000000000000001645E367C00000071000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/Dockerfile FROM scratch
ENV PATH "$PATH:/bin"
COPY tomll /bin/tomll
COPY tomljson /bin/tomljson
COPY jsontoml /bin/jsontoml
   07070100000A0A000081A4000000000000000000000001645E367C00000451000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/LICENSE    The MIT License (MIT)

Copyright (c) 2013 - 2022 Thomas Pelletier, Eric Anderton

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
   07070100000A0B000081A4000000000000000000000001645E367C00004282000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/README.md  # go-toml v2

Go library for the [TOML](https://toml.io/en/) format.

This library supports [TOML v1.0.0](https://toml.io/en/v1.0.0).

[🐞 Bug Reports](https://github.com/pelletier/go-toml/issues)

[💬 Anything else](https://github.com/pelletier/go-toml/discussions)

## Documentation

Full API, examples, and implementation notes are available in the Go
documentation.

[![Go Reference](https://pkg.go.dev/badge/github.com/pelletier/go-toml/v2.svg)](https://pkg.go.dev/github.com/pelletier/go-toml/v2)

## Import

```go
import "github.com/pelletier/go-toml/v2"
```

See [Modules](#Modules).

## Features

### Stdlib behavior

As much as possible, this library is designed to behave similarly as the
standard library's `encoding/json`.

### Performance

While go-toml favors usability, it is written with performance in mind. Most
operations should not be shockingly slow. See [benchmarks](#benchmarks).

### Strict mode

`Decoder` can be set to "strict mode", which makes it error when some parts of
the TOML document was not present in the target structure. This is a great way
to check for typos. [See example in the documentation][strict].

[strict]: https://pkg.go.dev/github.com/pelletier/go-toml/v2#example-Decoder.DisallowUnknownFields

### Contextualized errors

When most decoding errors occur, go-toml returns [`DecodeError`][decode-err]),
which contains a human readable contextualized version of the error. For
example:

```
2| key1 = "value1"
3| key2 = "missing2"
 | ~~~~ missing field
4| key3 = "missing3"
5| key4 = "value4"
```

[decode-err]: https://pkg.go.dev/github.com/pelletier/go-toml/v2#DecodeError

### Local date and time support

TOML supports native [local date/times][ldt]. It allows to represent a given
date, time, or date-time without relation to a timezone or offset. To support
this use-case, go-toml provides [`LocalDate`][tld], [`LocalTime`][tlt], and
[`LocalDateTime`][tldt]. Those types can be transformed to and from `time.Time`,
making them convenient yet unambiguous structures for their respective TOML
representation.

[ldt]: https://toml.io/en/v1.0.0#local-date-time
[tld]: https://pkg.go.dev/github.com/pelletier/go-toml/v2#LocalDate
[tlt]: https://pkg.go.dev/github.com/pelletier/go-toml/v2#LocalTime
[tldt]: https://pkg.go.dev/github.com/pelletier/go-toml/v2#LocalDateTime

## Getting started

Given the following struct, let's see how to read it and write it as TOML:

```go
type MyConfig struct {
      Version int
      Name    string
      Tags    []string
}
```

### Unmarshaling

[`Unmarshal`][unmarshal] reads a TOML document and fills a Go structure with its
content. For example:

```go
doc := `
version = 2
name = "go-toml"
tags = ["go", "toml"]
`

var cfg MyConfig
err := toml.Unmarshal([]byte(doc), &cfg)
if err != nil {
      panic(err)
}
fmt.Println("version:", cfg.Version)
fmt.Println("name:", cfg.Name)
fmt.Println("tags:", cfg.Tags)

// Output:
// version: 2
// name: go-toml
// tags: [go toml]
```

[unmarshal]: https://pkg.go.dev/github.com/pelletier/go-toml/v2#Unmarshal

### Marshaling

[`Marshal`][marshal] is the opposite of Unmarshal: it represents a Go structure
as a TOML document:

```go
cfg := MyConfig{
      Version: 2,
      Name:    "go-toml",
      Tags:    []string{"go", "toml"},
}

b, err := toml.Marshal(cfg)
if err != nil {
      panic(err)
}
fmt.Println(string(b))

// Output:
// Version = 2
// Name = 'go-toml'
// Tags = ['go', 'toml']
```

[marshal]: https://pkg.go.dev/github.com/pelletier/go-toml/v2#Marshal

## Unstable API

This API does not yet follow the backward compatibility guarantees of this
library. They provide early access to features that may have rough edges or an
API subject to change.

### Parser

Parser is the unstable API that allows iterative parsing of a TOML document at
the AST level. See https://pkg.go.dev/github.com/pelletier/go-toml/v2/unstable.

## Benchmarks

Execution time speedup compared to other Go TOML libraries:

<table>
    <thead>
        <tr><th>Benchmark</th><th>go-toml v1</th><th>BurntSushi/toml</th></tr>
    </thead>
    <tbody>
        <tr><td>Marshal/HugoFrontMatter-2</td><td>1.9x</td><td>1.9x</td></tr>
        <tr><td>Marshal/ReferenceFile/map-2</td><td>1.7x</td><td>1.8x</td></tr>
        <tr><td>Marshal/ReferenceFile/struct-2</td><td>2.2x</td><td>2.5x</td></tr>
        <tr><td>Unmarshal/HugoFrontMatter-2</td><td>2.9x</td><td>2.9x</td></tr>
        <tr><td>Unmarshal/ReferenceFile/map-2</td><td>2.6x</td><td>2.9x</td></tr>
        <tr><td>Unmarshal/ReferenceFile/struct-2</td><td>4.4x</td><td>5.3x</td></tr>
     </tbody>
</table>
<details><summary>See more</summary>
<p>The table above has the results of the most common use-cases. The table below
contains the results of all benchmarks, including unrealistic ones. It is
provided for completeness.</p>

<table>
    <thead>
        <tr><th>Benchmark</th><th>go-toml v1</th><th>BurntSushi/toml</th></tr>
    </thead>
    <tbody>
        <tr><td>Marshal/SimpleDocument/map-2</td><td>1.8x</td><td>2.9x</td></tr>
        <tr><td>Marshal/SimpleDocument/struct-2</td><td>2.7x</td><td>4.2x</td></tr>
        <tr><td>Unmarshal/SimpleDocument/map-2</td><td>4.5x</td><td>3.1x</td></tr>
        <tr><td>Unmarshal/SimpleDocument/struct-2</td><td>6.2x</td><td>3.9x</td></tr>
        <tr><td>UnmarshalDataset/example-2</td><td>3.1x</td><td>3.5x</td></tr>
        <tr><td>UnmarshalDataset/code-2</td><td>2.3x</td><td>3.1x</td></tr>
        <tr><td>UnmarshalDataset/twitter-2</td><td>2.5x</td><td>2.6x</td></tr>
        <tr><td>UnmarshalDataset/citm_catalog-2</td><td>2.1x</td><td>2.2x</td></tr>
        <tr><td>UnmarshalDataset/canada-2</td><td>1.6x</td><td>1.3x</td></tr>
        <tr><td>UnmarshalDataset/config-2</td><td>4.3x</td><td>3.2x</td></tr>
        <tr><td>[Geo mean]</td><td>2.7x</td><td>2.8x</td></tr>
     </tbody>
</table>
<p>This table can be generated with <code>./ci.sh benchmark -a -html</code>.</p>
</details>

## Modules

go-toml uses Go's standard modules system.

Installation instructions:

- Go ≥ 1.16: Nothing to do. Use the import in your code. The `go` command deals
  with it automatically.
- Go ≥ 1.13: `GO111MODULE=on go get github.com/pelletier/go-toml/v2`.

In case of trouble: [Go Modules FAQ][mod-faq].

[mod-faq]: https://github.com/golang/go/wiki/Modules#why-does-installing-a-tool-via-go-get-fail-with-error-cannot-find-main-module

## Tools

Go-toml provides three handy command line tools:

 * `tomljson`: Reads a TOML file and outputs its JSON representation.

    ```
    $ go install github.com/pelletier/go-toml/v2/cmd/tomljson@latest
    $ tomljson --help
    ```

 * `jsontoml`: Reads a JSON file and outputs a TOML representation.

    ```
    $ go install github.com/pelletier/go-toml/v2/cmd/jsontoml@latest
    $ jsontoml --help
    ```

 * `tomll`: Lints and reformats a TOML file.

    ```
    $ go install github.com/pelletier/go-toml/v2/cmd/tomll@latest
    $ tomll --help
    ```

### Docker image

Those tools are also available as a [Docker image][docker]. For example, to use
`tomljson`:

```
docker run -i ghcr.io/pelletier/go-toml:v2 tomljson < example.toml
```

Multiple versions are availble on [ghcr.io][docker].

[docker]: https://github.com/pelletier/go-toml/pkgs/container/go-toml

## Migrating from v1

This section describes the differences between v1 and v2, with some pointers on
how to get the original behavior when possible.

### Decoding / Unmarshal

#### Automatic field name guessing

When unmarshaling to a struct, if a key in the TOML document does not exactly
match the name of a struct field or any of the `toml`-tagged field, v1 tries
multiple variations of the key ([code][v1-keys]).

V2 instead does a case-insensitive matching, like `encoding/json`.

This could impact you if you are relying on casing to differentiate two fields,
and one of them is a not using the `toml` struct tag. The recommended solution
is to be specific about tag names for those fields using the `toml` struct tag.

[v1-keys]: https://github.com/pelletier/go-toml/blob/a2e52561804c6cd9392ebf0048ca64fe4af67a43/marshal.go#L775-L781

#### Ignore preexisting value in interface

When decoding into a non-nil `interface{}`, go-toml v1 uses the type of the
element in the interface to decode the object. For example:

```go
type inner struct {
  B interface{}
}
type doc struct {
  A interface{}
}

d := doc{
  A: inner{
    B: "Before",
  },
}

data := `
[A]
B = "After"
`

toml.Unmarshal([]byte(data), &d)
fmt.Printf("toml v1: %#v\n", d)

// toml v1: main.doc{A:main.inner{B:"After"}}
```

In this case, field `A` is of type `interface{}`, containing a `inner` struct.
V1 sees that type and uses it when decoding the object.

When decoding an object into an `interface{}`, V2 instead disregards whatever
value the `interface{}` may contain and replaces it with a
`map[string]interface{}`. With the same data structure as above, here is what
the result looks like:

```go
toml.Unmarshal([]byte(data), &d)
fmt.Printf("toml v2: %#v\n", d)

// toml v2: main.doc{A:map[string]interface {}{"B":"After"}}
```

This is to match `encoding/json`'s behavior. There is no way to make the v2
decoder behave like v1.

#### Values out of array bounds ignored

When decoding into an array, v1 returns an error when the number of elements
contained in the doc is superior to the capacity of the array. For example:

```go
type doc struct {
  A [2]string
}
d := doc{}
err := toml.Unmarshal([]byte(`A = ["one", "two", "many"]`), &d)
fmt.Println(err)

// (1, 1): unmarshal: TOML array length (3) exceeds destination array length (2)
```

In the same situation, v2 ignores the last value:

```go
err := toml.Unmarshal([]byte(`A = ["one", "two", "many"]`), &d)
fmt.Println("err:", err, "d:", d)
// err: <nil> d: {[one two]}
```

This is to match `encoding/json`'s behavior. There is no way to make the v2
decoder behave like v1.

#### Support for `toml.Unmarshaler` has been dropped

This method was not widely used, poorly defined, and added a lot of complexity.
A similar effect can be achieved by implementing the `encoding.TextUnmarshaler`
interface and use strings.

#### Support for `default` struct tag has been dropped

This feature adds complexity and a poorly defined API for an effect that can be
accomplished outside of the library.

It does not seem like other format parsers in Go support that feature (the
project referenced in the original ticket #202 has not been updated since 2017).
Given that go-toml v2 should not touch values not in the document, the same
effect can be achieved by pre-filling the struct with defaults (libraries like
[go-defaults][go-defaults] can help). Also, string representation is not well
defined for all types: it creates issues like #278.

The recommended replacement is pre-filling the struct before unmarshaling.

[go-defaults]: https://github.com/mcuadros/go-defaults

#### `toml.Tree` replacement

This structure was the initial attempt at providing a document model for
go-toml. It allows manipulating the structure of any document, encoding and
decoding from their TOML representation. While a more robust feature was
initially planned in go-toml v2, this has been ultimately [removed from
scope][nodoc] of this library, with no plan to add it back at the moment. The
closest equivalent at the moment would be to unmarshal into an `interface{}` and
use type assertions and/or reflection to manipulate the arbitrary
structure. However this would fall short of providing all of the TOML features
such as adding comments and be specific about whitespace.


#### `toml.Position` are not retrievable anymore

The API for retrieving the position (line, column) of a specific TOML element do
not exist anymore. This was done to minimize the amount of concepts introduced
by the library (query path), and avoid the performance hit related to storing
positions in the absence of a document model, for a feature that seemed to have
little use. Errors however have gained more detailed position
information. Position retrieval seems better fitted for a document model, which
has been [removed from the scope][nodoc] of go-toml v2 at the moment.

### Encoding / Marshal

#### Default struct fields order

V1 emits struct fields order alphabetically by default. V2 struct fields are
emitted in order they are defined. For example:

```go
type S struct {
	B string
	A string
}

data := S{
	B: "B",
	A: "A",
}

b, _ := tomlv1.Marshal(data)
fmt.Println("v1:\n" + string(b))

b, _ = tomlv2.Marshal(data)
fmt.Println("v2:\n" + string(b))

// Output:
// v1:
// A = "A"
// B = "B"

// v2:
// B = 'B'
// A = 'A'
```

There is no way to make v2 encoder behave like v1. A workaround could be to
manually sort the fields alphabetically in the struct definition, or generate
struct types using `reflect.StructOf`.

#### No indentation by default

V1 automatically indents content of tables by default. V2 does not. However the
same behavior can be obtained using [`Encoder.SetIndentTables`][sit]. For example:

```go
data := map[string]interface{}{
	"table": map[string]string{
		"key": "value",
	},
}

b, _ := tomlv1.Marshal(data)
fmt.Println("v1:\n" + string(b))

b, _ = tomlv2.Marshal(data)
fmt.Println("v2:\n" + string(b))

buf := bytes.Buffer{}
enc := tomlv2.NewEncoder(&buf)
enc.SetIndentTables(true)
enc.Encode(data)
fmt.Println("v2 Encoder:\n" + string(buf.Bytes()))

// Output:
// v1:
//
// [table]
//   key = "value"
//
// v2:
// [table]
// key = 'value'
//
//
// v2 Encoder:
// [table]
//   key = 'value'
```

[sit]: https://pkg.go.dev/github.com/pelletier/go-toml/v2#Encoder.SetIndentTables

#### Keys and strings are single quoted

V1 always uses double quotes (`"`) around strings and keys that cannot be
represented bare (unquoted). V2 uses single quotes instead by default (`'`),
unless a character cannot be represented, then falls back to double quotes. As a
result of this change, `Encoder.QuoteMapKeys` has been removed, as it is not
useful anymore.

There is no way to make v2 encoder behave like v1.

#### `TextMarshaler` emits as a string, not TOML

Types that implement [`encoding.TextMarshaler`][tm] can emit arbitrary TOML in
v1. The encoder would append the result to the output directly. In v2 the result
is wrapped in a string. As a result, this interface cannot be implemented by the
root object.

There is no way to make v2 encoder behave like v1.

[tm]: https://golang.org/pkg/encoding/#TextMarshaler

#### `Encoder.CompactComments` has been removed

Emitting compact comments is now the default behavior of go-toml. This option
is not necessary anymore.

#### Struct tags have been merged

V1 used to provide multiple struct tags: `comment`, `commented`, `multiline`,
`toml`, and `omitempty`. To behave more like the standard library, v2 has merged
`toml`, `multiline`, and `omitempty`. For example:

```go
type doc struct {
	// v1
	F string `toml:"field" multiline:"true" omitempty:"true"`
	// v2
	F string `toml:"field,multiline,omitempty"`
}
```

Has a result, the `Encoder.SetTag*` methods have been removed, as there is just
one tag now.


#### `commented` tag has been removed

There is no replacement for the `commented` tag. This feature would be better
suited in a proper document model for go-toml v2, which has been [cut from
scope][nodoc] at the moment.

#### `Encoder.ArraysWithOneElementPerLine` has been renamed

The new name is `Encoder.SetArraysMultiline`. The behavior should be the same.

#### `Encoder.Indentation` has been renamed

The new name is `Encoder.SetIndentSymbol`. The behavior should be the same.


#### Embedded structs behave like stdlib

V1 defaults to merging embedded struct fields into the embedding struct. This
behavior was unexpected because it does not follow the standard library. To
avoid breaking backward compatibility, the `Encoder.PromoteAnonymous` method was
added to make the encoder behave correctly. Given backward compatibility is not
a problem anymore, v2 does the right thing by default: it follows the behavior
of `encoding/json`. `Encoder.PromoteAnonymous` has been removed.

[nodoc]: https://github.com/pelletier/go-toml/discussions/506#discussioncomment-1526038

### `query`

go-toml v1 provided the [`go-toml/query`][query] package. It allowed to run
JSONPath-style queries on TOML files. This feature is not available in v2. For a
replacement, check out [dasel][dasel].

This package has been removed because it was essentially not supported anymore
(last commit May 2020), increased the complexity of the code base, and more
complete solutions exist out there.

[query]: https://github.com/pelletier/go-toml/tree/f99d6bbca119636aeafcf351ee52b3d202782627/query
[dasel]: https://github.com/TomWright/dasel

## Versioning

Go-toml follows [Semantic Versioning](https://semver.org). The supported version
of [TOML](https://github.com/toml-lang/toml) is indicated at the beginning of
this document. The last two major versions of Go are supported
(see [Go Release Policy](https://golang.org/doc/devel/release.html#policy)).

## License

The MIT License (MIT). Read [LICENSE](LICENSE).
  07070100000A0C000081A4000000000000000000000001645E367C000002A3000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/SECURITY.md    # Security Policy

## Supported Versions

Use this section to tell people about which versions of your project are
currently being supported with security updates.

| Version    | Supported          |
| ---------- | ------------------ |
| Latest 2.x | :white_check_mark: |
| All 1.x    | :x:                |
| All 0.x    | :x:                |

## Reporting a Vulnerability

Email a vulnerability report to `security@pelletier.codes`. Make sure to include
as many details as possible to reproduce the vulnerability. This is a
side-project: I will try to get back to you as quickly as possible, time
permitting in my personal life. Providing a working patch helps very much!
 07070100000A0D000081A4000000000000000000000001645E367C00001A8F000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/ci.sh  #!/usr/bin/env bash


stderr() {
    echo "$@" 1>&2
}

usage() {
    b=$(basename "$0")
    echo $b: ERROR: "$@" 1>&2

    cat 1>&2 <<EOF

DESCRIPTION

    $(basename "$0") is the script to run continuous integration commands for
    go-toml on unix.

    Requires Go and Git to be available in the PATH. Expects to be ran from the
    root of go-toml's Git repository.

USAGE

    $b COMMAND [OPTIONS...]

COMMANDS

benchmark [OPTIONS...] [BRANCH]

    Run benchmarks.

    ARGUMENTS

        BRANCH Optional. Defines which Git branch to use when running
               benchmarks.

    OPTIONS

        -d      Compare benchmarks of HEAD with BRANCH using benchstats. In
                this form the BRANCH argument is required.

        -a      Compare benchmarks of HEAD against go-toml v1 and
                BurntSushi/toml.

        -html   When used with -a, emits the output as HTML, ready to be
                embedded in the README.

coverage [OPTIONS...] [BRANCH]

    Generates code coverage.

    ARGUMENTS

        BRANCH  Optional. Defines which Git branch to use when reporting
                coverage. Defaults to HEAD.

    OPTIONS

        -d      Compare coverage of HEAD with the one of BRANCH. In this form,
                the BRANCH argument is required. Exit code is non-zero when
                coverage percentage decreased.
EOF
    exit 1
}

cover() {
    branch="${1}"
    dir="$(mktemp -d)"

    stderr "Executing coverage for ${branch} at ${dir}"

    if [ "${branch}" = "HEAD" ]; then
	    cp -r . "${dir}/"
    else
	    git worktree add "$dir" "$branch"
    fi

    pushd "$dir"
    go test -covermode=atomic  -coverpkg=./... -coverprofile=coverage.out.tmp ./...
    cat coverage.out.tmp | grep -v testsuite | grep -v tomltestgen | grep -v gotoml-test-decoder > coverage.out
    go tool cover -func=coverage.out
    popd

    if [ "${branch}" != "HEAD" ]; then
	    git worktree remove --force "$dir"
    fi
}

coverage() {
    case "$1" in
	-d)
	    shift
	    target="${1?Need to provide a target branch argument}"

	    output_dir="$(mktemp -d)"
	    target_out="${output_dir}/target.txt"
	    head_out="${output_dir}/head.txt"
	    
	    cover "${target}" > "${target_out}"
	    cover "HEAD" > "${head_out}"

	    cat "${target_out}"
	    cat "${head_out}"

	    echo ""

	    target_pct="$(tail -n2 ${target_out} | head -n1 | sed -E 's/.*total.*\t([0-9.]+)%.*/\1/')"
	    head_pct="$(tail -n2 ${head_out} | head -n1 | sed -E 's/.*total.*\t([0-9.]+)%/\1/')"
	    echo "Results: ${target} ${target_pct}% HEAD ${head_pct}%"

	    delta_pct=$(echo "$head_pct - $target_pct" | bc -l)
	    echo "Delta: ${delta_pct}"

	    if [[ $delta_pct = \-* ]]; then
		    echo "Regression!";

            target_diff="${output_dir}/target.diff.txt"
            head_diff="${output_dir}/head.diff.txt"
            cat "${target_out}" | grep -E '^github.com/pelletier/go-toml' | tr -s "\t " | cut -f 2,3 | sort > "${target_diff}"
            cat "${head_out}" | grep -E '^github.com/pelletier/go-toml' | tr -s "\t " | cut -f 2,3 | sort > "${head_diff}"

            diff --side-by-side --suppress-common-lines "${target_diff}" "${head_diff}"
		    return 1
	    fi
	    return 0
	    ;;
    esac

    cover "${1-HEAD}"
}

bench() {
    branch="${1}"
    out="${2}"
    replace="${3}"
    dir="$(mktemp -d)"

    stderr "Executing benchmark for ${branch} at ${dir}"

    if [ "${branch}" = "HEAD" ]; then
    	cp -r . "${dir}/"
    else
	    git worktree add "$dir" "$branch"
    fi

    pushd "$dir"

    if [ "${replace}" != "" ]; then
        find ./benchmark/ -iname '*.go' -exec sed -i -E "s|github.com/pelletier/go-toml/v2|${replace}|g" {} \;
        go get "${replace}"
    fi

    export GOMAXPROCS=2
    nice -n -19 taskset --cpu-list 0,1 go test '-bench=^Benchmark(Un)?[mM]arshal' -count=5 -run=Nothing ./... | tee "${out}"
    popd

    if [ "${branch}" != "HEAD" ]; then
	    git worktree remove --force "$dir"
    fi
}

fmktemp() {
    if mktemp --version|grep GNU >/dev/null; then
        mktemp --suffix=-$1;
    else
        mktemp -t $1;
    fi
}

benchstathtml() {
python3 - $1 <<'EOF'
import sys

lines = []
stop = False

with open(sys.argv[1]) as f:
    for line in f.readlines():
        line = line.strip()
        if line == "":
            stop = True
        if not stop:
            lines.append(line.split(','))

results = []
for line in reversed(lines[1:]):
    v2 = float(line[1])
    results.append([
        line[0].replace("-32", ""),
        "%.1fx" % (float(line[3])/v2),  # v1
        "%.1fx" % (float(line[5])/v2),  # bs
    ])
# move geomean to the end
results.append(results[0])
del results[0]


def printtable(data):
    print("""
<table>
    <thead>
        <tr><th>Benchmark</th><th>go-toml v1</th><th>BurntSushi/toml</th></tr>
    </thead>
    <tbody>""")

    for r in data:
        print("        <tr><td>{}</td><td>{}</td><td>{}</td></tr>".format(*r))

    print("""     </tbody>
</table>""")


def match(x):
    return "ReferenceFile" in x[0] or "HugoFrontMatter" in x[0]

above = [x for x in results if match(x)]
below = [x for x in results if not match(x)]

printtable(above)
print("<details><summary>See more</summary>")
print("""<p>The table above has the results of the most common use-cases. The table below
contains the results of all benchmarks, including unrealistic ones. It is
provided for completeness.</p>""")
printtable(below)
print('<p>This table can be generated with <code>./ci.sh benchmark -a -html</code>.</p>')
print("</details>")

EOF
}

benchmark() {
    case "$1" in
    -d)
        shift
     	target="${1?Need to provide a target branch argument}"

        old=`fmktemp ${target}`
        bench "${target}" "${old}"

        new=`fmktemp HEAD`
        bench HEAD "${new}"

        benchstat "${old}" "${new}"
        return 0
        ;;
    -a)
        shift

        v2stats=`fmktemp go-toml-v2`
        bench HEAD "${v2stats}" "github.com/pelletier/go-toml/v2"
        v1stats=`fmktemp go-toml-v1`
        bench HEAD "${v1stats}" "github.com/pelletier/go-toml"
        bsstats=`fmktemp bs-toml`
        bench HEAD "${bsstats}" "github.com/BurntSushi/toml"

        cp "${v2stats}" go-toml-v2.txt
        cp "${v1stats}" go-toml-v1.txt
        cp "${bsstats}" bs-toml.txt

        if [ "$1" = "-html" ]; then
            tmpcsv=`fmktemp csv`
            benchstat -csv -geomean go-toml-v2.txt go-toml-v1.txt bs-toml.txt > $tmpcsv
            benchstathtml $tmpcsv
        else
            benchstat -geomean go-toml-v2.txt go-toml-v1.txt bs-toml.txt
        fi

        rm -f go-toml-v2.txt go-toml-v1.txt bs-toml.txt
        return $?
    esac

    bench "${1-HEAD}" `mktemp`
}

case "$1" in
    coverage) shift; coverage $@;;
    benchmark) shift; benchmark $@;;
    *) usage "bad argument $1";;
esac
 07070100000A0E000081A4000000000000000000000001645E367C0000320D000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/decode.go  package toml

import (
	"fmt"
	"math"
	"strconv"
	"time"

	"github.com/pelletier/go-toml/v2/unstable"
)

func parseInteger(b []byte) (int64, error) {
	if len(b) > 2 && b[0] == '0' {
		switch b[1] {
		case 'x':
			return parseIntHex(b)
		case 'b':
			return parseIntBin(b)
		case 'o':
			return parseIntOct(b)
		default:
			panic(fmt.Errorf("invalid base '%c', should have been checked by scanIntOrFloat", b[1]))
		}
	}

	return parseIntDec(b)
}

func parseLocalDate(b []byte) (LocalDate, error) {
	// full-date      = date-fullyear "-" date-month "-" date-mday
	// date-fullyear  = 4DIGIT
	// date-month     = 2DIGIT  ; 01-12
	// date-mday      = 2DIGIT  ; 01-28, 01-29, 01-30, 01-31 based on month/year
	var date LocalDate

	if len(b) != 10 || b[4] != '-' || b[7] != '-' {
		return date, unstable.NewParserError(b, "dates are expected to have the format YYYY-MM-DD")
	}

	var err error

	date.Year, err = parseDecimalDigits(b[0:4])
	if err != nil {
		return LocalDate{}, err
	}

	date.Month, err = parseDecimalDigits(b[5:7])
	if err != nil {
		return LocalDate{}, err
	}

	date.Day, err = parseDecimalDigits(b[8:10])
	if err != nil {
		return LocalDate{}, err
	}

	if !isValidDate(date.Year, date.Month, date.Day) {
		return LocalDate{}, unstable.NewParserError(b, "impossible date")
	}

	return date, nil
}

func parseDecimalDigits(b []byte) (int, error) {
	v := 0

	for i, c := range b {
		if c < '0' || c > '9' {
			return 0, unstable.NewParserError(b[i:i+1], "expected digit (0-9)")
		}
		v *= 10
		v += int(c - '0')
	}

	return v, nil
}

func parseDateTime(b []byte) (time.Time, error) {
	// offset-date-time = full-date time-delim full-time
	// full-time      = partial-time time-offset
	// time-offset    = "Z" / time-numoffset
	// time-numoffset = ( "+" / "-" ) time-hour ":" time-minute

	dt, b, err := parseLocalDateTime(b)
	if err != nil {
		return time.Time{}, err
	}

	var zone *time.Location

	if len(b) == 0 {
		// parser should have checked that when assigning the date time node
		panic("date time should have a timezone")
	}

	if b[0] == 'Z' || b[0] == 'z' {
		b = b[1:]
		zone = time.UTC
	} else {
		const dateTimeByteLen = 6
		if len(b) != dateTimeByteLen {
			return time.Time{}, unstable.NewParserError(b, "invalid date-time timezone")
		}
		var direction int
		switch b[0] {
		case '-':
			direction = -1
		case '+':
			direction = +1
		default:
			return time.Time{}, unstable.NewParserError(b[:1], "invalid timezone offset character")
		}

		if b[3] != ':' {
			return time.Time{}, unstable.NewParserError(b[3:4], "expected a : separator")
		}

		hours, err := parseDecimalDigits(b[1:3])
		if err != nil {
			return time.Time{}, err
		}
		if hours > 23 {
			return time.Time{}, unstable.NewParserError(b[:1], "invalid timezone offset hours")
		}

		minutes, err := parseDecimalDigits(b[4:6])
		if err != nil {
			return time.Time{}, err
		}
		if minutes > 59 {
			return time.Time{}, unstable.NewParserError(b[:1], "invalid timezone offset minutes")
		}

		seconds := direction * (hours*3600 + minutes*60)
		if seconds == 0 {
			zone = time.UTC
		} else {
			zone = time.FixedZone("", seconds)
		}
		b = b[dateTimeByteLen:]
	}

	if len(b) > 0 {
		return time.Time{}, unstable.NewParserError(b, "extra bytes at the end of the timezone")
	}

	t := time.Date(
		dt.Year,
		time.Month(dt.Month),
		dt.Day,
		dt.Hour,
		dt.Minute,
		dt.Second,
		dt.Nanosecond,
		zone)

	return t, nil
}

func parseLocalDateTime(b []byte) (LocalDateTime, []byte, error) {
	var dt LocalDateTime

	const localDateTimeByteMinLen = 11
	if len(b) < localDateTimeByteMinLen {
		return dt, nil, unstable.NewParserError(b, "local datetimes are expected to have the format YYYY-MM-DDTHH:MM:SS[.NNNNNNNNN]")
	}

	date, err := parseLocalDate(b[:10])
	if err != nil {
		return dt, nil, err
	}
	dt.LocalDate = date

	sep := b[10]
	if sep != 'T' && sep != ' ' && sep != 't' {
		return dt, nil, unstable.NewParserError(b[10:11], "datetime separator is expected to be T or a space")
	}

	t, rest, err := parseLocalTime(b[11:])
	if err != nil {
		return dt, nil, err
	}
	dt.LocalTime = t

	return dt, rest, nil
}

// parseLocalTime is a bit different because it also returns the remaining
// []byte that is didn't need. This is to allow parseDateTime to parse those
// remaining bytes as a timezone.
func parseLocalTime(b []byte) (LocalTime, []byte, error) {
	var (
		nspow = [10]int{0, 1e8, 1e7, 1e6, 1e5, 1e4, 1e3, 1e2, 1e1, 1e0}
		t     LocalTime
	)

	// check if b matches to have expected format HH:MM:SS[.NNNNNN]
	const localTimeByteLen = 8
	if len(b) < localTimeByteLen {
		return t, nil, unstable.NewParserError(b, "times are expected to have the format HH:MM:SS[.NNNNNN]")
	}

	var err error

	t.Hour, err = parseDecimalDigits(b[0:2])
	if err != nil {
		return t, nil, err
	}

	if t.Hour > 23 {
		return t, nil, unstable.NewParserError(b[0:2], "hour cannot be greater 23")
	}
	if b[2] != ':' {
		return t, nil, unstable.NewParserError(b[2:3], "expecting colon between hours and minutes")
	}

	t.Minute, err = parseDecimalDigits(b[3:5])
	if err != nil {
		return t, nil, err
	}
	if t.Minute > 59 {
		return t, nil, unstable.NewParserError(b[3:5], "minutes cannot be greater 59")
	}
	if b[5] != ':' {
		return t, nil, unstable.NewParserError(b[5:6], "expecting colon between minutes and seconds")
	}

	t.Second, err = parseDecimalDigits(b[6:8])
	if err != nil {
		return t, nil, err
	}

	if t.Second > 60 {
		return t, nil, unstable.NewParserError(b[6:8], "seconds cannot be greater 60")
	}

	b = b[8:]

	if len(b) >= 1 && b[0] == '.' {
		frac := 0
		precision := 0
		digits := 0

		for i, c := range b[1:] {
			if !isDigit(c) {
				if i == 0 {
					return t, nil, unstable.NewParserError(b[0:1], "need at least one digit after fraction point")
				}
				break
			}
			digits++

			const maxFracPrecision = 9
			if i >= maxFracPrecision {
				// go-toml allows decoding fractional seconds
				// beyond the supported precision of 9
				// digits. It truncates the fractional component
				// to the supported precision and ignores the
				// remaining digits.
				//
				// https://github.com/pelletier/go-toml/discussions/707
				continue
			}

			frac *= 10
			frac += int(c - '0')
			precision++
		}

		if precision == 0 {
			return t, nil, unstable.NewParserError(b[:1], "nanoseconds need at least one digit")
		}

		t.Nanosecond = frac * nspow[precision]
		t.Precision = precision

		return t, b[1+digits:], nil
	}
	return t, b, nil
}

//nolint:cyclop
func parseFloat(b []byte) (float64, error) {
	if len(b) == 4 && (b[0] == '+' || b[0] == '-') && b[1] == 'n' && b[2] == 'a' && b[3] == 'n' {
		return math.NaN(), nil
	}

	cleaned, err := checkAndRemoveUnderscoresFloats(b)
	if err != nil {
		return 0, err
	}

	if cleaned[0] == '.' {
		return 0, unstable.NewParserError(b, "float cannot start with a dot")
	}

	if cleaned[len(cleaned)-1] == '.' {
		return 0, unstable.NewParserError(b, "float cannot end with a dot")
	}

	dotAlreadySeen := false
	for i, c := range cleaned {
		if c == '.' {
			if dotAlreadySeen {
				return 0, unstable.NewParserError(b[i:i+1], "float can have at most one decimal point")
			}
			if !isDigit(cleaned[i-1]) {
				return 0, unstable.NewParserError(b[i-1:i+1], "float decimal point must be preceded by a digit")
			}
			if !isDigit(cleaned[i+1]) {
				return 0, unstable.NewParserError(b[i:i+2], "float decimal point must be followed by a digit")
			}
			dotAlreadySeen = true
		}
	}

	start := 0
	if cleaned[0] == '+' || cleaned[0] == '-' {
		start = 1
	}
	if cleaned[start] == '0' && isDigit(cleaned[start+1]) {
		return 0, unstable.NewParserError(b, "float integer part cannot have leading zeroes")
	}

	f, err := strconv.ParseFloat(string(cleaned), 64)
	if err != nil {
		return 0, unstable.NewParserError(b, "unable to parse float: %w", err)
	}

	return f, nil
}

func parseIntHex(b []byte) (int64, error) {
	cleaned, err := checkAndRemoveUnderscoresIntegers(b[2:])
	if err != nil {
		return 0, err
	}

	i, err := strconv.ParseInt(string(cleaned), 16, 64)
	if err != nil {
		return 0, unstable.NewParserError(b, "couldn't parse hexadecimal number: %w", err)
	}

	return i, nil
}

func parseIntOct(b []byte) (int64, error) {
	cleaned, err := checkAndRemoveUnderscoresIntegers(b[2:])
	if err != nil {
		return 0, err
	}

	i, err := strconv.ParseInt(string(cleaned), 8, 64)
	if err != nil {
		return 0, unstable.NewParserError(b, "couldn't parse octal number: %w", err)
	}

	return i, nil
}

func parseIntBin(b []byte) (int64, error) {
	cleaned, err := checkAndRemoveUnderscoresIntegers(b[2:])
	if err != nil {
		return 0, err
	}

	i, err := strconv.ParseInt(string(cleaned), 2, 64)
	if err != nil {
		return 0, unstable.NewParserError(b, "couldn't parse binary number: %w", err)
	}

	return i, nil
}

func isSign(b byte) bool {
	return b == '+' || b == '-'
}

func parseIntDec(b []byte) (int64, error) {
	cleaned, err := checkAndRemoveUnderscoresIntegers(b)
	if err != nil {
		return 0, err
	}

	startIdx := 0

	if isSign(cleaned[0]) {
		startIdx++
	}

	if len(cleaned) > startIdx+1 && cleaned[startIdx] == '0' {
		return 0, unstable.NewParserError(b, "leading zero not allowed on decimal number")
	}

	i, err := strconv.ParseInt(string(cleaned), 10, 64)
	if err != nil {
		return 0, unstable.NewParserError(b, "couldn't parse decimal number: %w", err)
	}

	return i, nil
}

func checkAndRemoveUnderscoresIntegers(b []byte) ([]byte, error) {
	start := 0
	if b[start] == '+' || b[start] == '-' {
		start++
	}

	if len(b) == start {
		return b, nil
	}

	if b[start] == '_' {
		return nil, unstable.NewParserError(b[start:start+1], "number cannot start with underscore")
	}

	if b[len(b)-1] == '_' {
		return nil, unstable.NewParserError(b[len(b)-1:], "number cannot end with underscore")
	}

	// fast path
	i := 0
	for ; i < len(b); i++ {
		if b[i] == '_' {
			break
		}
	}
	if i == len(b) {
		return b, nil
	}

	before := false
	cleaned := make([]byte, i, len(b))
	copy(cleaned, b)

	for i++; i < len(b); i++ {
		c := b[i]
		if c == '_' {
			if !before {
				return nil, unstable.NewParserError(b[i-1:i+1], "number must have at least one digit between underscores")
			}
			before = false
		} else {
			before = true
			cleaned = append(cleaned, c)
		}
	}

	return cleaned, nil
}

func checkAndRemoveUnderscoresFloats(b []byte) ([]byte, error) {
	if b[0] == '_' {
		return nil, unstable.NewParserError(b[0:1], "number cannot start with underscore")
	}

	if b[len(b)-1] == '_' {
		return nil, unstable.NewParserError(b[len(b)-1:], "number cannot end with underscore")
	}

	// fast path
	i := 0
	for ; i < len(b); i++ {
		if b[i] == '_' {
			break
		}
	}
	if i == len(b) {
		return b, nil
	}

	before := false
	cleaned := make([]byte, 0, len(b))

	for i := 0; i < len(b); i++ {
		c := b[i]

		switch c {
		case '_':
			if !before {
				return nil, unstable.NewParserError(b[i-1:i+1], "number must have at least one digit between underscores")
			}
			if i < len(b)-1 && (b[i+1] == 'e' || b[i+1] == 'E') {
				return nil, unstable.NewParserError(b[i+1:i+2], "cannot have underscore before exponent")
			}
			before = false
		case '+', '-':
			// signed exponents
			cleaned = append(cleaned, c)
			before = false
		case 'e', 'E':
			if i < len(b)-1 && b[i+1] == '_' {
				return nil, unstable.NewParserError(b[i+1:i+2], "cannot have underscore after exponent")
			}
			cleaned = append(cleaned, c)
		case '.':
			if i < len(b)-1 && b[i+1] == '_' {
				return nil, unstable.NewParserError(b[i+1:i+2], "cannot have underscore after decimal point")
			}
			if i > 0 && b[i-1] == '_' {
				return nil, unstable.NewParserError(b[i-1:i], "cannot have underscore before decimal point")
			}
			cleaned = append(cleaned, c)
		default:
			before = true
			cleaned = append(cleaned, c)
		}
	}

	return cleaned, nil
}

// isValidDate checks if a provided date is a date that exists.
func isValidDate(year int, month int, day int) bool {
	return month > 0 && month < 13 && day > 0 && day <= daysIn(month, year)
}

// daysBefore[m] counts the number of days in a non-leap year
// before month m begins. There is an entry for m=12, counting
// the number of days before January of next year (365).
var daysBefore = [...]int32{
	0,
	31,
	31 + 28,
	31 + 28 + 31,
	31 + 28 + 31 + 30,
	31 + 28 + 31 + 30 + 31,
	31 + 28 + 31 + 30 + 31 + 30,
	31 + 28 + 31 + 30 + 31 + 30 + 31,
	31 + 28 + 31 + 30 + 31 + 30 + 31 + 31,
	31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30,
	31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31,
	31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30,
	31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 31,
}

func daysIn(m int, year int) int {
	if m == 2 && isLeap(year) {
		return 29
	}
	return int(daysBefore[m] - daysBefore[m-1])
}

func isLeap(year int) bool {
	return year%4 == 0 && (year%100 != 0 || year%400 == 0)
}

func isDigit(r byte) bool {
	return r >= '0' && r <= '9'
}
   07070100000A0F000081A4000000000000000000000001645E367C0000004C000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/doc.go // Package toml is a library to read and write TOML documents.
package toml
07070100000A10000081A4000000000000000000000001645E367C00001768000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/errors.go  package toml

import (
	"fmt"
	"strconv"
	"strings"

	"github.com/pelletier/go-toml/v2/internal/danger"
	"github.com/pelletier/go-toml/v2/unstable"
)

// DecodeError represents an error encountered during the parsing or decoding
// of a TOML document.
//
// In addition to the error message, it contains the position in the document
// where it happened, as well as a human-readable representation that shows
// where the error occurred in the document.
type DecodeError struct {
	message string
	line    int
	column  int
	key     Key

	human string
}

// StrictMissingError occurs in a TOML document that does not have a
// corresponding field in the target value. It contains all the missing fields
// in Errors.
//
// Emitted by Decoder when DisallowUnknownFields() was called.
type StrictMissingError struct {
	// One error per field that could not be found.
	Errors []DecodeError
}

// Error returns the canonical string for this error.
func (s *StrictMissingError) Error() string {
	return "strict mode: fields in the document are missing in the target struct"
}

// String returns a human readable description of all errors.
func (s *StrictMissingError) String() string {
	var buf strings.Builder

	for i, e := range s.Errors {
		if i > 0 {
			buf.WriteString("\n---\n")
		}

		buf.WriteString(e.String())
	}

	return buf.String()
}

type Key []string

// Error returns the error message contained in the DecodeError.
func (e *DecodeError) Error() string {
	return "toml: " + e.message
}

// String returns the human-readable contextualized error. This string is multi-line.
func (e *DecodeError) String() string {
	return e.human
}

// Position returns the (line, column) pair indicating where the error
// occurred in the document. Positions are 1-indexed.
func (e *DecodeError) Position() (row int, column int) {
	return e.line, e.column
}

// Key that was being processed when the error occurred. The key is present only
// if this DecodeError is part of a StrictMissingError.
func (e *DecodeError) Key() Key {
	return e.key
}

// decodeErrorFromHighlight creates a DecodeError referencing a highlighted
// range of bytes from document.
//
// highlight needs to be a sub-slice of document, or this function panics.
//
// The function copies all bytes used in DecodeError, so that document and
// highlight can be freely deallocated.
//
//nolint:funlen
func wrapDecodeError(document []byte, de *unstable.ParserError) *DecodeError {
	offset := danger.SubsliceOffset(document, de.Highlight)

	errMessage := de.Error()
	errLine, errColumn := positionAtEnd(document[:offset])
	before, after := linesOfContext(document, de.Highlight, offset, 3)

	var buf strings.Builder

	maxLine := errLine + len(after) - 1
	lineColumnWidth := len(strconv.Itoa(maxLine))

	// Write the lines of context strictly before the error.
	for i := len(before) - 1; i > 0; i-- {
		line := errLine - i
		buf.WriteString(formatLineNumber(line, lineColumnWidth))
		buf.WriteString("|")

		if len(before[i]) > 0 {
			buf.WriteString(" ")
			buf.Write(before[i])
		}

		buf.WriteRune('\n')
	}

	// Write the document line that contains the error.

	buf.WriteString(formatLineNumber(errLine, lineColumnWidth))
	buf.WriteString("| ")

	if len(before) > 0 {
		buf.Write(before[0])
	}

	buf.Write(de.Highlight)

	if len(after) > 0 {
		buf.Write(after[0])
	}

	buf.WriteRune('\n')

	// Write the line with the error message itself (so it does not have a line
	// number).

	buf.WriteString(strings.Repeat(" ", lineColumnWidth))
	buf.WriteString("| ")

	if len(before) > 0 {
		buf.WriteString(strings.Repeat(" ", len(before[0])))
	}

	buf.WriteString(strings.Repeat("~", len(de.Highlight)))

	if len(errMessage) > 0 {
		buf.WriteString(" ")
		buf.WriteString(errMessage)
	}

	// Write the lines of context strictly after the error.

	for i := 1; i < len(after); i++ {
		buf.WriteRune('\n')
		line := errLine + i
		buf.WriteString(formatLineNumber(line, lineColumnWidth))
		buf.WriteString("|")

		if len(after[i]) > 0 {
			buf.WriteString(" ")
			buf.Write(after[i])
		}
	}

	return &DecodeError{
		message: errMessage,
		line:    errLine,
		column:  errColumn,
		key:     de.Key,
		human:   buf.String(),
	}
}

func formatLineNumber(line int, width int) string {
	format := "%" + strconv.Itoa(width) + "d"

	return fmt.Sprintf(format, line)
}

func linesOfContext(document []byte, highlight []byte, offset int, linesAround int) ([][]byte, [][]byte) {
	return beforeLines(document, offset, linesAround), afterLines(document, highlight, offset, linesAround)
}

func beforeLines(document []byte, offset int, linesAround int) [][]byte {
	var beforeLines [][]byte

	// Walk the document backward from the highlight to find previous lines
	// of context.
	rest := document[:offset]
backward:
	for o := len(rest) - 1; o >= 0 && len(beforeLines) <= linesAround && len(rest) > 0; {
		switch {
		case rest[o] == '\n':
			// handle individual lines
			beforeLines = append(beforeLines, rest[o+1:])
			rest = rest[:o]
			o = len(rest) - 1
		case o == 0:
			// add the first line only if it's non-empty
			beforeLines = append(beforeLines, rest)

			break backward
		default:
			o--
		}
	}

	return beforeLines
}

func afterLines(document []byte, highlight []byte, offset int, linesAround int) [][]byte {
	var afterLines [][]byte

	// Walk the document forward from the highlight to find the following
	// lines of context.
	rest := document[offset+len(highlight):]
forward:
	for o := 0; o < len(rest) && len(afterLines) <= linesAround; {
		switch {
		case rest[o] == '\n':
			// handle individual lines
			afterLines = append(afterLines, rest[:o])
			rest = rest[o+1:]
			o = 0

		case o == len(rest)-1:
			// add last line only if it's non-empty
			afterLines = append(afterLines, rest)

			break forward
		default:
			o++
		}
	}

	return afterLines
}

func positionAtEnd(b []byte) (row int, column int) {
	row = 1
	column = 1

	for _, c := range b {
		if c == '\n' {
			row++
			column = 1
		} else {
			column++
		}
	}

	return
}
07070100000A11000041ED000000000000000000000005645E367C00000000000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/internal   07070100000A12000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/internal/characters    07070100000A13000081A4000000000000000000000001645E367C00000250000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/internal/characters/ascii.go   package characters

var invalidAsciiTable = [256]bool{
	0x00: true,
	0x01: true,
	0x02: true,
	0x03: true,
	0x04: true,
	0x05: true,
	0x06: true,
	0x07: true,
	0x08: true,
	// 0x09 TAB
	// 0x0A LF
	0x0B: true,
	0x0C: true,
	// 0x0D CR
	0x0E: true,
	0x0F: true,
	0x10: true,
	0x11: true,
	0x12: true,
	0x13: true,
	0x14: true,
	0x15: true,
	0x16: true,
	0x17: true,
	0x18: true,
	0x19: true,
	0x1A: true,
	0x1B: true,
	0x1C: true,
	0x1D: true,
	0x1E: true,
	0x1F: true,
	// 0x20 - 0x7E Printable ASCII characters
	0x7F: true,
}

func InvalidAscii(b byte) bool {
	return invalidAsciiTable[b]
}
07070100000A14000081A4000000000000000000000001645E367C000015E0000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/internal/characters/utf8.go    package characters

import (
	"unicode/utf8"
)

type utf8Err struct {
	Index int
	Size  int
}

func (u utf8Err) Zero() bool {
	return u.Size == 0
}

// Verified that a given string is only made of valid UTF-8 characters allowed
// by the TOML spec:
//
// Any Unicode character may be used except those that must be escaped:
// quotation mark, backslash, and the control characters other than tab (U+0000
// to U+0008, U+000A to U+001F, U+007F).
//
// It is a copy of the Go 1.17 utf8.Valid implementation, tweaked to exit early
// when a character is not allowed.
//
// The returned utf8Err is Zero() if the string is valid, or contains the byte
// index and size of the invalid character.
//
// quotation mark => already checked
// backslash => already checked
// 0-0x8 => invalid
// 0x9 => tab, ok
// 0xA - 0x1F => invalid
// 0x7F => invalid
func Utf8TomlValidAlreadyEscaped(p []byte) (err utf8Err) {
	// Fast path. Check for and skip 8 bytes of ASCII characters per iteration.
	offset := 0
	for len(p) >= 8 {
		// Combining two 32 bit loads allows the same code to be used
		// for 32 and 64 bit platforms.
		// The compiler can generate a 32bit load for first32 and second32
		// on many platforms. See test/codegen/memcombine.go.
		first32 := uint32(p[0]) | uint32(p[1])<<8 | uint32(p[2])<<16 | uint32(p[3])<<24
		second32 := uint32(p[4]) | uint32(p[5])<<8 | uint32(p[6])<<16 | uint32(p[7])<<24
		if (first32|second32)&0x80808080 != 0 {
			// Found a non ASCII byte (>= RuneSelf).
			break
		}

		for i, b := range p[:8] {
			if InvalidAscii(b) {
				err.Index = offset + i
				err.Size = 1
				return
			}
		}

		p = p[8:]
		offset += 8
	}
	n := len(p)
	for i := 0; i < n; {
		pi := p[i]
		if pi < utf8.RuneSelf {
			if InvalidAscii(pi) {
				err.Index = offset + i
				err.Size = 1
				return
			}
			i++
			continue
		}
		x := first[pi]
		if x == xx {
			// Illegal starter byte.
			err.Index = offset + i
			err.Size = 1
			return
		}
		size := int(x & 7)
		if i+size > n {
			// Short or invalid.
			err.Index = offset + i
			err.Size = n - i
			return
		}
		accept := acceptRanges[x>>4]
		if c := p[i+1]; c < accept.lo || accept.hi < c {
			err.Index = offset + i
			err.Size = 2
			return
		} else if size == 2 {
		} else if c := p[i+2]; c < locb || hicb < c {
			err.Index = offset + i
			err.Size = 3
			return
		} else if size == 3 {
		} else if c := p[i+3]; c < locb || hicb < c {
			err.Index = offset + i
			err.Size = 4
			return
		}
		i += size
	}
	return
}

// Return the size of the next rune if valid, 0 otherwise.
func Utf8ValidNext(p []byte) int {
	c := p[0]

	if c < utf8.RuneSelf {
		if InvalidAscii(c) {
			return 0
		}
		return 1
	}

	x := first[c]
	if x == xx {
		// Illegal starter byte.
		return 0
	}
	size := int(x & 7)
	if size > len(p) {
		// Short or invalid.
		return 0
	}
	accept := acceptRanges[x>>4]
	if c := p[1]; c < accept.lo || accept.hi < c {
		return 0
	} else if size == 2 {
	} else if c := p[2]; c < locb || hicb < c {
		return 0
	} else if size == 3 {
	} else if c := p[3]; c < locb || hicb < c {
		return 0
	}

	return size
}

// acceptRange gives the range of valid values for the second byte in a UTF-8
// sequence.
type acceptRange struct {
	lo uint8 // lowest value for second byte.
	hi uint8 // highest value for second byte.
}

// acceptRanges has size 16 to avoid bounds checks in the code that uses it.
var acceptRanges = [16]acceptRange{
	0: {locb, hicb},
	1: {0xA0, hicb},
	2: {locb, 0x9F},
	3: {0x90, hicb},
	4: {locb, 0x8F},
}

// first is information about the first byte in a UTF-8 sequence.
var first = [256]uint8{
	//   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
	as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x00-0x0F
	as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x10-0x1F
	as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x20-0x2F
	as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x30-0x3F
	as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x40-0x4F
	as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x50-0x5F
	as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x60-0x6F
	as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x70-0x7F
	//   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
	xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0x80-0x8F
	xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0x90-0x9F
	xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0xA0-0xAF
	xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0xB0-0xBF
	xx, xx, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, // 0xC0-0xCF
	s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, // 0xD0-0xDF
	s2, s3, s3, s3, s3, s3, s3, s3, s3, s3, s3, s3, s3, s4, s3, s3, // 0xE0-0xEF
	s5, s6, s6, s6, s7, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0xF0-0xFF
}

const (
	// The default lowest and highest continuation byte.
	locb = 0b10000000
	hicb = 0b10111111

	// These names of these constants are chosen to give nice alignment in the
	// table below. The first nibble is an index into acceptRanges or F for
	// special one-byte cases. The second nibble is the Rune length or the
	// Status for the special one-byte case.
	xx = 0xF1 // invalid: size 1
	as = 0xF0 // ASCII: size 1
	s1 = 0x02 // accept 0, size 2
	s2 = 0x13 // accept 1, size 3
	s3 = 0x03 // accept 0, size 3
	s4 = 0x23 // accept 2, size 3
	s5 = 0x34 // accept 3, size 4
	s6 = 0x04 // accept 0, size 4
	s7 = 0x44 // accept 4, size 4
)
07070100000A15000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/internal/danger    07070100000A16000081A4000000000000000000000001645E367C00000694000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/internal/danger/danger.go  package danger

import (
	"fmt"
	"reflect"
	"unsafe"
)

const maxInt = uintptr(int(^uint(0) >> 1))

func SubsliceOffset(data []byte, subslice []byte) int {
	datap := (*reflect.SliceHeader)(unsafe.Pointer(&data))
	hlp := (*reflect.SliceHeader)(unsafe.Pointer(&subslice))

	if hlp.Data < datap.Data {
		panic(fmt.Errorf("subslice address (%d) is before data address (%d)", hlp.Data, datap.Data))
	}
	offset := hlp.Data - datap.Data

	if offset > maxInt {
		panic(fmt.Errorf("slice offset larger than int (%d)", offset))
	}

	intoffset := int(offset)

	if intoffset > datap.Len {
		panic(fmt.Errorf("slice offset (%d) is farther than data length (%d)", intoffset, datap.Len))
	}

	if intoffset+hlp.Len > datap.Len {
		panic(fmt.Errorf("slice ends (%d+%d) is farther than data length (%d)", intoffset, hlp.Len, datap.Len))
	}

	return intoffset
}

func BytesRange(start []byte, end []byte) []byte {
	if start == nil || end == nil {
		panic("cannot call BytesRange with nil")
	}
	startp := (*reflect.SliceHeader)(unsafe.Pointer(&start))
	endp := (*reflect.SliceHeader)(unsafe.Pointer(&end))

	if startp.Data > endp.Data {
		panic(fmt.Errorf("start pointer address (%d) is after end pointer address (%d)", startp.Data, endp.Data))
	}

	l := startp.Len
	endLen := int(endp.Data-startp.Data) + endp.Len
	if endLen > l {
		l = endLen
	}

	if l > startp.Cap {
		panic(fmt.Errorf("range length is larger than capacity"))
	}

	return start[:l]
}

func Stride(ptr unsafe.Pointer, size uintptr, offset int) unsafe.Pointer {
	// TODO: replace with unsafe.Add when Go 1.17 is released
	//   https://github.com/golang/go/issues/40481
	return unsafe.Pointer(uintptr(ptr) + uintptr(int(size)*offset))
}
07070100000A17000081A4000000000000000000000001645E367C0000027B000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/internal/danger/typeid.go  package danger

import (
	"reflect"
	"unsafe"
)

// typeID is used as key in encoder and decoder caches to enable using
// the optimize runtime.mapaccess2_fast64 function instead of the more
// expensive lookup if we were to use reflect.Type as map key.
//
// typeID holds the pointer to the reflect.Type value, which is unique
// in the program.
//
// https://github.com/segmentio/encoding/blob/master/json/codec.go#L59-L61
type TypeID unsafe.Pointer

func MakeTypeID(t reflect.Type) TypeID {
	// reflect.Type has the fields:
	// typ unsafe.Pointer
	// ptr unsafe.Pointer
	return TypeID((*[2]unsafe.Pointer)(unsafe.Pointer(&t))[1])
}
 07070100000A18000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/internal/tracker   07070100000A19000081A4000000000000000000000001645E367C000003EA000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/internal/tracker/key.go    package tracker

import "github.com/pelletier/go-toml/v2/unstable"

// KeyTracker is a tracker that keeps track of the current Key as the AST is
// walked.
type KeyTracker struct {
	k []string
}

// UpdateTable sets the state of the tracker with the AST table node.
func (t *KeyTracker) UpdateTable(node *unstable.Node) {
	t.reset()
	t.Push(node)
}

// UpdateArrayTable sets the state of the tracker with the AST array table node.
func (t *KeyTracker) UpdateArrayTable(node *unstable.Node) {
	t.reset()
	t.Push(node)
}

// Push the given key on the stack.
func (t *KeyTracker) Push(node *unstable.Node) {
	it := node.Key()
	for it.Next() {
		t.k = append(t.k, string(it.Node().Data))
	}
}

// Pop key from stack.
func (t *KeyTracker) Pop(node *unstable.Node) {
	it := node.Key()
	for it.Next() {
		t.k = t.k[:len(t.k)-1]
	}
}

// Key returns the current key
func (t *KeyTracker) Key() []string {
	k := make([]string, len(t.k))
	copy(k, t.k)
	return k
}

func (t *KeyTracker) reset() {
	t.k = t.k[:0]
}
  07070100000A1A000081A4000000000000000000000001645E367C00001F0A000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/internal/tracker/seen.go   package tracker

import (
	"bytes"
	"fmt"
	"sync"

	"github.com/pelletier/go-toml/v2/unstable"
)

type keyKind uint8

const (
	invalidKind keyKind = iota
	valueKind
	tableKind
	arrayTableKind
)

func (k keyKind) String() string {
	switch k {
	case invalidKind:
		return "invalid"
	case valueKind:
		return "value"
	case tableKind:
		return "table"
	case arrayTableKind:
		return "array table"
	}
	panic("missing keyKind string mapping")
}

// SeenTracker tracks which keys have been seen with which TOML type to flag
// duplicates and mismatches according to the spec.
//
// Each node in the visited tree is represented by an entry. Each entry has an
// identifier, which is provided by a counter. Entries are stored in the array
// entries. As new nodes are discovered (referenced for the first time in the
// TOML document), entries are created and appended to the array. An entry
// points to its parent using its id.
//
// To find whether a given key (sequence of []byte) has already been visited,
// the entries are linearly searched, looking for one with the right name and
// parent id.
//
// Given that all keys appear in the document after their parent, it is
// guaranteed that all descendants of a node are stored after the node, this
// speeds up the search process.
//
// When encountering [[array tables]], the descendants of that node are removed
// to allow that branch of the tree to be "rediscovered". To maintain the
// invariant above, the deletion process needs to keep the order of entries.
// This results in more copies in that case.
type SeenTracker struct {
	entries    []entry
	currentIdx int
}

var pool sync.Pool

func (s *SeenTracker) reset() {
	// Always contains a root element at index 0.
	s.currentIdx = 0
	if len(s.entries) == 0 {
		s.entries = make([]entry, 1, 2)
	} else {
		s.entries = s.entries[:1]
	}
	s.entries[0].child = -1
	s.entries[0].next = -1
}

type entry struct {
	// Use -1 to indicate no child or no sibling.
	child int
	next  int

	name     []byte
	kind     keyKind
	explicit bool
	kv       bool
}

// Find the index of the child of parentIdx with key k. Returns -1 if
// it does not exist.
func (s *SeenTracker) find(parentIdx int, k []byte) int {
	for i := s.entries[parentIdx].child; i >= 0; i = s.entries[i].next {
		if bytes.Equal(s.entries[i].name, k) {
			return i
		}
	}
	return -1
}

// Remove all descendants of node at position idx.
func (s *SeenTracker) clear(idx int) {
	if idx >= len(s.entries) {
		return
	}

	for i := s.entries[idx].child; i >= 0; {
		next := s.entries[i].next
		n := s.entries[0].next
		s.entries[0].next = i
		s.entries[i].next = n
		s.entries[i].name = nil
		s.clear(i)
		i = next
	}

	s.entries[idx].child = -1
}

func (s *SeenTracker) create(parentIdx int, name []byte, kind keyKind, explicit bool, kv bool) int {
	e := entry{
		child: -1,
		next:  s.entries[parentIdx].child,

		name:     name,
		kind:     kind,
		explicit: explicit,
		kv:       kv,
	}
	var idx int
	if s.entries[0].next >= 0 {
		idx = s.entries[0].next
		s.entries[0].next = s.entries[idx].next
		s.entries[idx] = e
	} else {
		idx = len(s.entries)
		s.entries = append(s.entries, e)
	}

	s.entries[parentIdx].child = idx

	return idx
}

func (s *SeenTracker) setExplicitFlag(parentIdx int) {
	for i := s.entries[parentIdx].child; i >= 0; i = s.entries[i].next {
		if s.entries[i].kv {
			s.entries[i].explicit = true
			s.entries[i].kv = false
		}
		s.setExplicitFlag(i)
	}
}

// CheckExpression takes a top-level node and checks that it does not contain
// keys that have been seen in previous calls, and validates that types are
// consistent.
func (s *SeenTracker) CheckExpression(node *unstable.Node) error {
	if s.entries == nil {
		s.reset()
	}
	switch node.Kind {
	case unstable.KeyValue:
		return s.checkKeyValue(node)
	case unstable.Table:
		return s.checkTable(node)
	case unstable.ArrayTable:
		return s.checkArrayTable(node)
	default:
		panic(fmt.Errorf("this should not be a top level node type: %s", node.Kind))
	}
}

func (s *SeenTracker) checkTable(node *unstable.Node) error {
	if s.currentIdx >= 0 {
		s.setExplicitFlag(s.currentIdx)
	}

	it := node.Key()

	parentIdx := 0

	// This code is duplicated in checkArrayTable. This is because factoring
	// it in a function requires to copy the iterator, or allocate it to the
	// heap, which is not cheap.
	for it.Next() {
		if it.IsLast() {
			break
		}

		k := it.Node().Data

		idx := s.find(parentIdx, k)

		if idx < 0 {
			idx = s.create(parentIdx, k, tableKind, false, false)
		} else {
			entry := s.entries[idx]
			if entry.kind == valueKind {
				return fmt.Errorf("toml: expected %s to be a table, not a %s", string(k), entry.kind)
			}
		}
		parentIdx = idx
	}

	k := it.Node().Data
	idx := s.find(parentIdx, k)

	if idx >= 0 {
		kind := s.entries[idx].kind
		if kind != tableKind {
			return fmt.Errorf("toml: key %s should be a table, not a %s", string(k), kind)
		}
		if s.entries[idx].explicit {
			return fmt.Errorf("toml: table %s already exists", string(k))
		}
		s.entries[idx].explicit = true
	} else {
		idx = s.create(parentIdx, k, tableKind, true, false)
	}

	s.currentIdx = idx

	return nil
}

func (s *SeenTracker) checkArrayTable(node *unstable.Node) error {
	if s.currentIdx >= 0 {
		s.setExplicitFlag(s.currentIdx)
	}

	it := node.Key()

	parentIdx := 0

	for it.Next() {
		if it.IsLast() {
			break
		}

		k := it.Node().Data

		idx := s.find(parentIdx, k)

		if idx < 0 {
			idx = s.create(parentIdx, k, tableKind, false, false)
		} else {
			entry := s.entries[idx]
			if entry.kind == valueKind {
				return fmt.Errorf("toml: expected %s to be a table, not a %s", string(k), entry.kind)
			}
		}

		parentIdx = idx
	}

	k := it.Node().Data
	idx := s.find(parentIdx, k)

	if idx >= 0 {
		kind := s.entries[idx].kind
		if kind != arrayTableKind {
			return fmt.Errorf("toml: key %s already exists as a %s,  but should be an array table", kind, string(k))
		}
		s.clear(idx)
	} else {
		idx = s.create(parentIdx, k, arrayTableKind, true, false)
	}

	s.currentIdx = idx

	return nil
}

func (s *SeenTracker) checkKeyValue(node *unstable.Node) error {
	parentIdx := s.currentIdx
	it := node.Key()

	for it.Next() {
		k := it.Node().Data

		idx := s.find(parentIdx, k)

		if idx < 0 {
			idx = s.create(parentIdx, k, tableKind, false, true)
		} else {
			entry := s.entries[idx]
			if it.IsLast() {
				return fmt.Errorf("toml: key %s is already defined", string(k))
			} else if entry.kind != tableKind {
				return fmt.Errorf("toml: expected %s to be a table, not a %s", string(k), entry.kind)
			} else if entry.explicit {
				return fmt.Errorf("toml: cannot redefine table %s that has already been explicitly defined", string(k))
			}
		}

		parentIdx = idx
	}

	s.entries[parentIdx].kind = valueKind

	value := node.Value()

	switch value.Kind {
	case unstable.InlineTable:
		return s.checkInlineTable(value)
	case unstable.Array:
		return s.checkArray(value)
	}

	return nil
}

func (s *SeenTracker) checkArray(node *unstable.Node) error {
	it := node.Children()
	for it.Next() {
		n := it.Node()
		switch n.Kind {
		case unstable.InlineTable:
			err := s.checkInlineTable(n)
			if err != nil {
				return err
			}
		case unstable.Array:
			err := s.checkArray(n)
			if err != nil {
				return err
			}
		}
	}
	return nil
}

func (s *SeenTracker) checkInlineTable(node *unstable.Node) error {
	if pool.New == nil {
		pool.New = func() interface{} {
			return &SeenTracker{}
		}
	}

	s = pool.Get().(*SeenTracker)
	s.reset()

	it := node.Children()
	for it.Next() {
		n := it.Node()
		err := s.checkKeyValue(n)
		if err != nil {
			return err
		}
	}

	// As inline tables are self-contained, the tracker does not
	// need to retain the details of what they contain. The
	// keyValue element that creates the inline table is kept to
	// mark the presence of the inline table and prevent
	// redefinition of its keys: check* functions cannot walk into
	// a value.
	pool.Put(s)
	return nil
}
  07070100000A1B000081A4000000000000000000000001645E367C00000010000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/internal/tracker/tracker.go    package tracker
07070100000A1C000081A4000000000000000000000001645E367C00000CEC000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/localtime.go   package toml

import (
	"fmt"
	"strings"
	"time"

	"github.com/pelletier/go-toml/v2/unstable"
)

// LocalDate represents a calendar day in no specific timezone.
type LocalDate struct {
	Year  int
	Month int
	Day   int
}

// AsTime converts d into a specific time instance at midnight in zone.
func (d LocalDate) AsTime(zone *time.Location) time.Time {
	return time.Date(d.Year, time.Month(d.Month), d.Day, 0, 0, 0, 0, zone)
}

// String returns RFC 3339 representation of d.
func (d LocalDate) String() string {
	return fmt.Sprintf("%04d-%02d-%02d", d.Year, d.Month, d.Day)
}

// MarshalText returns RFC 3339 representation of d.
func (d LocalDate) MarshalText() ([]byte, error) {
	return []byte(d.String()), nil
}

// UnmarshalText parses b using RFC 3339 to fill d.
func (d *LocalDate) UnmarshalText(b []byte) error {
	res, err := parseLocalDate(b)
	if err != nil {
		return err
	}
	*d = res
	return nil
}

// LocalTime represents a time of day of no specific day in no specific
// timezone.
type LocalTime struct {
	Hour       int // Hour of the day: [0; 24[
	Minute     int // Minute of the hour: [0; 60[
	Second     int // Second of the minute: [0; 60[
	Nanosecond int // Nanoseconds within the second:  [0, 1000000000[
	Precision  int // Number of digits to display for Nanosecond.
}

// String returns RFC 3339 representation of d.
// If d.Nanosecond and d.Precision are zero, the time won't have a nanosecond
// component. If d.Nanosecond > 0 but d.Precision = 0, then the minimum number
// of digits for nanoseconds is provided.
func (d LocalTime) String() string {
	s := fmt.Sprintf("%02d:%02d:%02d", d.Hour, d.Minute, d.Second)

	if d.Precision > 0 {
		s += fmt.Sprintf(".%09d", d.Nanosecond)[:d.Precision+1]
	} else if d.Nanosecond > 0 {
		// Nanoseconds are specified, but precision is not provided. Use the
		// minimum.
		s += strings.Trim(fmt.Sprintf(".%09d", d.Nanosecond), "0")
	}

	return s
}

// MarshalText returns RFC 3339 representation of d.
func (d LocalTime) MarshalText() ([]byte, error) {
	return []byte(d.String()), nil
}

// UnmarshalText parses b using RFC 3339 to fill d.
func (d *LocalTime) UnmarshalText(b []byte) error {
	res, left, err := parseLocalTime(b)
	if err == nil && len(left) != 0 {
		err = unstable.NewParserError(left, "extra characters")
	}
	if err != nil {
		return err
	}
	*d = res
	return nil
}

// LocalDateTime represents a time of a specific day in no specific timezone.
type LocalDateTime struct {
	LocalDate
	LocalTime
}

// AsTime converts d into a specific time instance in zone.
func (d LocalDateTime) AsTime(zone *time.Location) time.Time {
	return time.Date(d.Year, time.Month(d.Month), d.Day, d.Hour, d.Minute, d.Second, d.Nanosecond, zone)
}

// String returns RFC 3339 representation of d.
func (d LocalDateTime) String() string {
	return d.LocalDate.String() + "T" + d.LocalTime.String()
}

// MarshalText returns RFC 3339 representation of d.
func (d LocalDateTime) MarshalText() ([]byte, error) {
	return []byte(d.String()), nil
}

// UnmarshalText parses b using RFC 3339 to fill d.
func (d *LocalDateTime) UnmarshalText(data []byte) error {
	res, left, err := parseLocalDateTime(data)
	if err == nil && len(left) != 0 {
		err = unstable.NewParserError(left, "extra characters")
	}
	if err != nil {
		return err
	}

	*d = res
	return nil
}
07070100000A1D000081A4000000000000000000000001645E367C00005637000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/marshaler.go   package toml

import (
	"bytes"
	"encoding"
	"fmt"
	"io"
	"math"
	"reflect"
	"sort"
	"strconv"
	"strings"
	"time"
	"unicode"

	"github.com/pelletier/go-toml/v2/internal/characters"
)

// Marshal serializes a Go value as a TOML document.
//
// It is a shortcut for Encoder.Encode() with the default options.
func Marshal(v interface{}) ([]byte, error) {
	var buf bytes.Buffer
	enc := NewEncoder(&buf)

	err := enc.Encode(v)
	if err != nil {
		return nil, err
	}

	return buf.Bytes(), nil
}

// Encoder writes a TOML document to an output stream.
type Encoder struct {
	// output
	w io.Writer

	// global settings
	tablesInline    bool
	arraysMultiline bool
	indentSymbol    string
	indentTables    bool
}

// NewEncoder returns a new Encoder that writes to w.
func NewEncoder(w io.Writer) *Encoder {
	return &Encoder{
		w:            w,
		indentSymbol: "  ",
	}
}

// SetTablesInline forces the encoder to emit all tables inline.
//
// This behavior can be controlled on an individual struct field basis with the
// inline tag:
//
//	MyField `toml:",inline"`
func (enc *Encoder) SetTablesInline(inline bool) *Encoder {
	enc.tablesInline = inline
	return enc
}

// SetArraysMultiline forces the encoder to emit all arrays with one element per
// line.
//
// This behavior can be controlled on an individual struct field basis with the multiline tag:
//
//	MyField `multiline:"true"`
func (enc *Encoder) SetArraysMultiline(multiline bool) *Encoder {
	enc.arraysMultiline = multiline
	return enc
}

// SetIndentSymbol defines the string that should be used for indentation. The
// provided string is repeated for each indentation level. Defaults to two
// spaces.
func (enc *Encoder) SetIndentSymbol(s string) *Encoder {
	enc.indentSymbol = s
	return enc
}

// SetIndentTables forces the encoder to intent tables and array tables.
func (enc *Encoder) SetIndentTables(indent bool) *Encoder {
	enc.indentTables = indent
	return enc
}

// Encode writes a TOML representation of v to the stream.
//
// If v cannot be represented to TOML it returns an error.
//
// # Encoding rules
//
// A top level slice containing only maps or structs is encoded as [[table
// array]].
//
// All slices not matching rule 1 are encoded as [array]. As a result, any map
// or struct they contain is encoded as an {inline table}.
//
// Nil interfaces and nil pointers are not supported.
//
// Keys in key-values always have one part.
//
// Intermediate tables are always printed.
//
// By default, strings are encoded as literal string, unless they contain either
// a newline character or a single quote. In that case they are emitted as
// quoted strings.
//
// Unsigned integers larger than math.MaxInt64 cannot be encoded. Doing so
// results in an error. This rule exists because the TOML specification only
// requires parsers to support at least the 64 bits integer range. Allowing
// larger numbers would create non-standard TOML documents, which may not be
// readable (at best) by other implementations. To encode such numbers, a
// solution is a custom type that implements encoding.TextMarshaler.
//
// When encoding structs, fields are encoded in order of definition, with their
// exact name.
//
// Tables and array tables are separated by empty lines. However, consecutive
// subtables definitions are not. For example:
//
//	[top1]
//
//	[top2]
//	[top2.child1]
//
//	[[array]]
//
//	[[array]]
//	[array.child2]
//
// # Struct tags
//
// The encoding of each public struct field can be customized by the format
// string in the "toml" key of the struct field's tag. This follows
// encoding/json's convention. The format string starts with the name of the
// field, optionally followed by a comma-separated list of options. The name may
// be empty in order to provide options without overriding the default name.
//
// The "multiline" option emits strings as quoted multi-line TOML strings. It
// has no effect on fields that would not be encoded as strings.
//
// The "inline" option turns fields that would be emitted as tables into inline
// tables instead. It has no effect on other fields.
//
// The "omitempty" option prevents empty values or groups from being emitted.
//
// In addition to the "toml" tag struct tag, a "comment" tag can be used to emit
// a TOML comment before the value being annotated. Comments are ignored inside
// inline tables. For array tables, the comment is only present before the first
// element of the array.
func (enc *Encoder) Encode(v interface{}) error {
	var (
		b   []byte
		ctx encoderCtx
	)

	ctx.inline = enc.tablesInline

	if v == nil {
		return fmt.Errorf("toml: cannot encode a nil interface")
	}

	b, err := enc.encode(b, ctx, reflect.ValueOf(v))
	if err != nil {
		return err
	}

	_, err = enc.w.Write(b)
	if err != nil {
		return fmt.Errorf("toml: cannot write: %w", err)
	}

	return nil
}

type valueOptions struct {
	multiline bool
	omitempty bool
	comment   string
}

type encoderCtx struct {
	// Current top-level key.
	parentKey []string

	// Key that should be used for a KV.
	key string
	// Extra flag to account for the empty string
	hasKey bool

	// Set to true to indicate that the encoder is inside a KV, so that all
	// tables need to be inlined.
	insideKv bool

	// Set to true to skip the first table header in an array table.
	skipTableHeader bool

	// Should the next table be encoded as inline
	inline bool

	// Indentation level
	indent int

	// Options coming from struct tags
	options valueOptions
}

func (ctx *encoderCtx) shiftKey() {
	if ctx.hasKey {
		ctx.parentKey = append(ctx.parentKey, ctx.key)
		ctx.clearKey()
	}
}

func (ctx *encoderCtx) setKey(k string) {
	ctx.key = k
	ctx.hasKey = true
}

func (ctx *encoderCtx) clearKey() {
	ctx.key = ""
	ctx.hasKey = false
}

func (ctx *encoderCtx) isRoot() bool {
	return len(ctx.parentKey) == 0 && !ctx.hasKey
}

func (enc *Encoder) encode(b []byte, ctx encoderCtx, v reflect.Value) ([]byte, error) {
	i := v.Interface()

	switch x := i.(type) {
	case time.Time:
		if x.Nanosecond() > 0 {
			return x.AppendFormat(b, time.RFC3339Nano), nil
		}
		return x.AppendFormat(b, time.RFC3339), nil
	case LocalTime:
		return append(b, x.String()...), nil
	case LocalDate:
		return append(b, x.String()...), nil
	case LocalDateTime:
		return append(b, x.String()...), nil
	}

	hasTextMarshaler := v.Type().Implements(textMarshalerType)
	if hasTextMarshaler || (v.CanAddr() && reflect.PtrTo(v.Type()).Implements(textMarshalerType)) {
		if !hasTextMarshaler {
			v = v.Addr()
		}

		if ctx.isRoot() {
			return nil, fmt.Errorf("toml: type %s implementing the TextMarshaler interface cannot be a root element", v.Type())
		}

		text, err := v.Interface().(encoding.TextMarshaler).MarshalText()
		if err != nil {
			return nil, err
		}

		b = enc.encodeString(b, string(text), ctx.options)

		return b, nil
	}

	switch v.Kind() {
	// containers
	case reflect.Map:
		return enc.encodeMap(b, ctx, v)
	case reflect.Struct:
		return enc.encodeStruct(b, ctx, v)
	case reflect.Slice:
		return enc.encodeSlice(b, ctx, v)
	case reflect.Interface:
		if v.IsNil() {
			return nil, fmt.Errorf("toml: encoding a nil interface is not supported")
		}

		return enc.encode(b, ctx, v.Elem())
	case reflect.Ptr:
		if v.IsNil() {
			return enc.encode(b, ctx, reflect.Zero(v.Type().Elem()))
		}

		return enc.encode(b, ctx, v.Elem())

	// values
	case reflect.String:
		b = enc.encodeString(b, v.String(), ctx.options)
	case reflect.Float32:
		f := v.Float()

		if math.IsNaN(f) {
			b = append(b, "nan"...)
		} else if f > math.MaxFloat32 {
			b = append(b, "inf"...)
		} else if f < -math.MaxFloat32 {
			b = append(b, "-inf"...)
		} else if math.Trunc(f) == f {
			b = strconv.AppendFloat(b, f, 'f', 1, 32)
		} else {
			b = strconv.AppendFloat(b, f, 'f', -1, 32)
		}
	case reflect.Float64:
		f := v.Float()
		if math.IsNaN(f) {
			b = append(b, "nan"...)
		} else if f > math.MaxFloat64 {
			b = append(b, "inf"...)
		} else if f < -math.MaxFloat64 {
			b = append(b, "-inf"...)
		} else if math.Trunc(f) == f {
			b = strconv.AppendFloat(b, f, 'f', 1, 64)
		} else {
			b = strconv.AppendFloat(b, f, 'f', -1, 64)
		}
	case reflect.Bool:
		if v.Bool() {
			b = append(b, "true"...)
		} else {
			b = append(b, "false"...)
		}
	case reflect.Uint64, reflect.Uint32, reflect.Uint16, reflect.Uint8, reflect.Uint:
		x := v.Uint()
		if x > uint64(math.MaxInt64) {
			return nil, fmt.Errorf("toml: not encoding uint (%d) greater than max int64 (%d)", x, int64(math.MaxInt64))
		}
		b = strconv.AppendUint(b, x, 10)
	case reflect.Int64, reflect.Int32, reflect.Int16, reflect.Int8, reflect.Int:
		b = strconv.AppendInt(b, v.Int(), 10)
	default:
		return nil, fmt.Errorf("toml: cannot encode value of type %s", v.Kind())
	}

	return b, nil
}

func isNil(v reflect.Value) bool {
	switch v.Kind() {
	case reflect.Ptr, reflect.Interface, reflect.Map:
		return v.IsNil()
	default:
		return false
	}
}

func shouldOmitEmpty(options valueOptions, v reflect.Value) bool {
	return options.omitempty && isEmptyValue(v)
}

func (enc *Encoder) encodeKv(b []byte, ctx encoderCtx, options valueOptions, v reflect.Value) ([]byte, error) {
	var err error

	if !ctx.inline {
		b = enc.encodeComment(ctx.indent, options.comment, b)
		b = enc.indent(ctx.indent, b)
	}

	b = enc.encodeKey(b, ctx.key)
	b = append(b, " = "...)

	// create a copy of the context because the value of a KV shouldn't
	// modify the global context.
	subctx := ctx
	subctx.insideKv = true
	subctx.shiftKey()
	subctx.options = options

	b, err = enc.encode(b, subctx, v)
	if err != nil {
		return nil, err
	}

	return b, nil
}

func isEmptyValue(v reflect.Value) bool {
	switch v.Kind() {
	case reflect.Struct:
		return isEmptyStruct(v)
	case reflect.Array, reflect.Map, reflect.Slice, reflect.String:
		return v.Len() == 0
	case reflect.Bool:
		return !v.Bool()
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		return v.Int() == 0
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		return v.Uint() == 0
	case reflect.Float32, reflect.Float64:
		return v.Float() == 0
	case reflect.Interface, reflect.Ptr:
		return v.IsNil()
	}
	return false
}

func isEmptyStruct(v reflect.Value) bool {
	// TODO: merge with walkStruct and cache.
	typ := v.Type()
	for i := 0; i < typ.NumField(); i++ {
		fieldType := typ.Field(i)

		// only consider exported fields
		if fieldType.PkgPath != "" {
			continue
		}

		tag := fieldType.Tag.Get("toml")

		// special field name to skip field
		if tag == "-" {
			continue
		}

		f := v.Field(i)

		if !isEmptyValue(f) {
			return false
		}
	}

	return true
}

const literalQuote = '\''

func (enc *Encoder) encodeString(b []byte, v string, options valueOptions) []byte {
	if needsQuoting(v) {
		return enc.encodeQuotedString(options.multiline, b, v)
	}

	return enc.encodeLiteralString(b, v)
}

func needsQuoting(v string) bool {
	// TODO: vectorize
	for _, b := range []byte(v) {
		if b == '\'' || b == '\r' || b == '\n' || characters.InvalidAscii(b) {
			return true
		}
	}
	return false
}

// caller should have checked that the string does not contain new lines or ' .
func (enc *Encoder) encodeLiteralString(b []byte, v string) []byte {
	b = append(b, literalQuote)
	b = append(b, v...)
	b = append(b, literalQuote)

	return b
}

func (enc *Encoder) encodeQuotedString(multiline bool, b []byte, v string) []byte {
	stringQuote := `"`

	if multiline {
		stringQuote = `"""`
	}

	b = append(b, stringQuote...)
	if multiline {
		b = append(b, '\n')
	}

	const (
		hextable = "0123456789ABCDEF"
		// U+0000 to U+0008, U+000A to U+001F, U+007F
		nul = 0x0
		bs  = 0x8
		lf  = 0xa
		us  = 0x1f
		del = 0x7f
	)

	for _, r := range []byte(v) {
		switch r {
		case '\\':
			b = append(b, `\\`...)
		case '"':
			b = append(b, `\"`...)
		case '\b':
			b = append(b, `\b`...)
		case '\f':
			b = append(b, `\f`...)
		case '\n':
			if multiline {
				b = append(b, r)
			} else {
				b = append(b, `\n`...)
			}
		case '\r':
			b = append(b, `\r`...)
		case '\t':
			b = append(b, `\t`...)
		default:
			switch {
			case r >= nul && r <= bs, r >= lf && r <= us, r == del:
				b = append(b, `\u00`...)
				b = append(b, hextable[r>>4])
				b = append(b, hextable[r&0x0f])
			default:
				b = append(b, r)
			}
		}
	}

	b = append(b, stringQuote...)

	return b
}

// caller should have checked that the string is in A-Z / a-z / 0-9 / - / _ .
func (enc *Encoder) encodeUnquotedKey(b []byte, v string) []byte {
	return append(b, v...)
}

func (enc *Encoder) encodeTableHeader(ctx encoderCtx, b []byte) ([]byte, error) {
	if len(ctx.parentKey) == 0 {
		return b, nil
	}

	b = enc.encodeComment(ctx.indent, ctx.options.comment, b)

	b = enc.indent(ctx.indent, b)

	b = append(b, '[')

	b = enc.encodeKey(b, ctx.parentKey[0])

	for _, k := range ctx.parentKey[1:] {
		b = append(b, '.')
		b = enc.encodeKey(b, k)
	}

	b = append(b, "]\n"...)

	return b, nil
}

//nolint:cyclop
func (enc *Encoder) encodeKey(b []byte, k string) []byte {
	needsQuotation := false
	cannotUseLiteral := false

	if len(k) == 0 {
		return append(b, "''"...)
	}

	for _, c := range k {
		if (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == '-' || c == '_' {
			continue
		}

		if c == literalQuote {
			cannotUseLiteral = true
		}

		needsQuotation = true
	}

	if needsQuotation && needsQuoting(k) {
		cannotUseLiteral = true
	}

	switch {
	case cannotUseLiteral:
		return enc.encodeQuotedString(false, b, k)
	case needsQuotation:
		return enc.encodeLiteralString(b, k)
	default:
		return enc.encodeUnquotedKey(b, k)
	}
}

func (enc *Encoder) encodeMap(b []byte, ctx encoderCtx, v reflect.Value) ([]byte, error) {
	if v.Type().Key().Kind() != reflect.String {
		return nil, fmt.Errorf("toml: type %s is not supported as a map key", v.Type().Key().Kind())
	}

	var (
		t                 table
		emptyValueOptions valueOptions
	)

	iter := v.MapRange()
	for iter.Next() {
		k := iter.Key().String()
		v := iter.Value()

		if isNil(v) {
			continue
		}

		if willConvertToTableOrArrayTable(ctx, v) {
			t.pushTable(k, v, emptyValueOptions)
		} else {
			t.pushKV(k, v, emptyValueOptions)
		}
	}

	sortEntriesByKey(t.kvs)
	sortEntriesByKey(t.tables)

	return enc.encodeTable(b, ctx, t)
}

func sortEntriesByKey(e []entry) {
	sort.Slice(e, func(i, j int) bool {
		return e[i].Key < e[j].Key
	})
}

type entry struct {
	Key     string
	Value   reflect.Value
	Options valueOptions
}

type table struct {
	kvs    []entry
	tables []entry
}

func (t *table) pushKV(k string, v reflect.Value, options valueOptions) {
	for _, e := range t.kvs {
		if e.Key == k {
			return
		}
	}

	t.kvs = append(t.kvs, entry{Key: k, Value: v, Options: options})
}

func (t *table) pushTable(k string, v reflect.Value, options valueOptions) {
	for _, e := range t.tables {
		if e.Key == k {
			return
		}
	}
	t.tables = append(t.tables, entry{Key: k, Value: v, Options: options})
}

func walkStruct(ctx encoderCtx, t *table, v reflect.Value) {
	// TODO: cache this
	typ := v.Type()
	for i := 0; i < typ.NumField(); i++ {
		fieldType := typ.Field(i)

		// only consider exported fields
		if fieldType.PkgPath != "" {
			continue
		}

		tag := fieldType.Tag.Get("toml")

		// special field name to skip field
		if tag == "-" {
			continue
		}

		k, opts := parseTag(tag)
		if !isValidName(k) {
			k = ""
		}

		f := v.Field(i)

		if k == "" {
			if fieldType.Anonymous {
				if fieldType.Type.Kind() == reflect.Struct {
					walkStruct(ctx, t, f)
				}
				continue
			} else {
				k = fieldType.Name
			}
		}

		if isNil(f) {
			continue
		}

		options := valueOptions{
			multiline: opts.multiline,
			omitempty: opts.omitempty,
			comment:   fieldType.Tag.Get("comment"),
		}

		if opts.inline || !willConvertToTableOrArrayTable(ctx, f) {
			t.pushKV(k, f, options)
		} else {
			t.pushTable(k, f, options)
		}
	}
}

func (enc *Encoder) encodeStruct(b []byte, ctx encoderCtx, v reflect.Value) ([]byte, error) {
	var t table

	walkStruct(ctx, &t, v)

	return enc.encodeTable(b, ctx, t)
}

func (enc *Encoder) encodeComment(indent int, comment string, b []byte) []byte {
	for len(comment) > 0 {
		var line string
		idx := strings.IndexByte(comment, '\n')
		if idx >= 0 {
			line = comment[:idx]
			comment = comment[idx+1:]
		} else {
			line = comment
			comment = ""
		}
		b = enc.indent(indent, b)
		b = append(b, "# "...)
		b = append(b, line...)
		b = append(b, '\n')
	}
	return b
}

func isValidName(s string) bool {
	if s == "" {
		return false
	}
	for _, c := range s {
		switch {
		case strings.ContainsRune("!#$%&()*+-./:;<=>?@[]^_{|}~ ", c):
			// Backslash and quote chars are reserved, but
			// otherwise any punctuation chars are allowed
			// in a tag name.
		case !unicode.IsLetter(c) && !unicode.IsDigit(c):
			return false
		}
	}
	return true
}

type tagOptions struct {
	multiline bool
	inline    bool
	omitempty bool
}

func parseTag(tag string) (string, tagOptions) {
	opts := tagOptions{}

	idx := strings.Index(tag, ",")
	if idx == -1 {
		return tag, opts
	}

	raw := tag[idx+1:]
	tag = string(tag[:idx])
	for raw != "" {
		var o string
		i := strings.Index(raw, ",")
		if i >= 0 {
			o, raw = raw[:i], raw[i+1:]
		} else {
			o, raw = raw, ""
		}
		switch o {
		case "multiline":
			opts.multiline = true
		case "inline":
			opts.inline = true
		case "omitempty":
			opts.omitempty = true
		}
	}

	return tag, opts
}

func (enc *Encoder) encodeTable(b []byte, ctx encoderCtx, t table) ([]byte, error) {
	var err error

	ctx.shiftKey()

	if ctx.insideKv || (ctx.inline && !ctx.isRoot()) {
		return enc.encodeTableInline(b, ctx, t)
	}

	if !ctx.skipTableHeader {
		b, err = enc.encodeTableHeader(ctx, b)
		if err != nil {
			return nil, err
		}

		if enc.indentTables && len(ctx.parentKey) > 0 {
			ctx.indent++
		}
	}
	ctx.skipTableHeader = false

	hasNonEmptyKV := false
	for _, kv := range t.kvs {
		if shouldOmitEmpty(kv.Options, kv.Value) {
			continue
		}
		hasNonEmptyKV = true

		ctx.setKey(kv.Key)

		b, err = enc.encodeKv(b, ctx, kv.Options, kv.Value)
		if err != nil {
			return nil, err
		}

		b = append(b, '\n')
	}

	first := true
	for _, table := range t.tables {
		if shouldOmitEmpty(table.Options, table.Value) {
			continue
		}
		if first {
			first = false
			if hasNonEmptyKV {
				b = append(b, '\n')
			}
		} else {
			b = append(b, "\n"...)
		}

		ctx.setKey(table.Key)

		ctx.options = table.Options

		b, err = enc.encode(b, ctx, table.Value)
		if err != nil {
			return nil, err
		}
	}

	return b, nil
}

func (enc *Encoder) encodeTableInline(b []byte, ctx encoderCtx, t table) ([]byte, error) {
	var err error

	b = append(b, '{')

	first := true
	for _, kv := range t.kvs {
		if shouldOmitEmpty(kv.Options, kv.Value) {
			continue
		}

		if first {
			first = false
		} else {
			b = append(b, `, `...)
		}

		ctx.setKey(kv.Key)

		b, err = enc.encodeKv(b, ctx, kv.Options, kv.Value)
		if err != nil {
			return nil, err
		}
	}

	if len(t.tables) > 0 {
		panic("inline table cannot contain nested tables, only key-values")
	}

	b = append(b, "}"...)

	return b, nil
}

func willConvertToTable(ctx encoderCtx, v reflect.Value) bool {
	if !v.IsValid() {
		return false
	}
	if v.Type() == timeType || v.Type().Implements(textMarshalerType) || (v.Kind() != reflect.Ptr && v.CanAddr() && reflect.PtrTo(v.Type()).Implements(textMarshalerType)) {
		return false
	}

	t := v.Type()
	switch t.Kind() {
	case reflect.Map, reflect.Struct:
		return !ctx.inline
	case reflect.Interface:
		return willConvertToTable(ctx, v.Elem())
	case reflect.Ptr:
		if v.IsNil() {
			return false
		}

		return willConvertToTable(ctx, v.Elem())
	default:
		return false
	}
}

func willConvertToTableOrArrayTable(ctx encoderCtx, v reflect.Value) bool {
	if ctx.insideKv {
		return false
	}
	t := v.Type()

	if t.Kind() == reflect.Interface {
		return willConvertToTableOrArrayTable(ctx, v.Elem())
	}

	if t.Kind() == reflect.Slice {
		if v.Len() == 0 {
			// An empty slice should be a kv = [].
			return false
		}

		for i := 0; i < v.Len(); i++ {
			t := willConvertToTable(ctx, v.Index(i))

			if !t {
				return false
			}
		}

		return true
	}

	return willConvertToTable(ctx, v)
}

func (enc *Encoder) encodeSlice(b []byte, ctx encoderCtx, v reflect.Value) ([]byte, error) {
	if v.Len() == 0 {
		b = append(b, "[]"...)

		return b, nil
	}

	if willConvertToTableOrArrayTable(ctx, v) {
		return enc.encodeSliceAsArrayTable(b, ctx, v)
	}

	return enc.encodeSliceAsArray(b, ctx, v)
}

// caller should have checked that v is a slice that only contains values that
// encode into tables.
func (enc *Encoder) encodeSliceAsArrayTable(b []byte, ctx encoderCtx, v reflect.Value) ([]byte, error) {
	ctx.shiftKey()

	scratch := make([]byte, 0, 64)
	scratch = append(scratch, "[["...)

	for i, k := range ctx.parentKey {
		if i > 0 {
			scratch = append(scratch, '.')
		}

		scratch = enc.encodeKey(scratch, k)
	}

	scratch = append(scratch, "]]\n"...)
	ctx.skipTableHeader = true

	b = enc.encodeComment(ctx.indent, ctx.options.comment, b)

	for i := 0; i < v.Len(); i++ {
		if i != 0 {
			b = append(b, "\n"...)
		}

		b = append(b, scratch...)

		var err error
		b, err = enc.encode(b, ctx, v.Index(i))
		if err != nil {
			return nil, err
		}
	}

	return b, nil
}

func (enc *Encoder) encodeSliceAsArray(b []byte, ctx encoderCtx, v reflect.Value) ([]byte, error) {
	multiline := ctx.options.multiline || enc.arraysMultiline
	separator := ", "

	b = append(b, '[')

	subCtx := ctx
	subCtx.options = valueOptions{}

	if multiline {
		separator = ",\n"

		b = append(b, '\n')

		subCtx.indent++
	}

	var err error
	first := true

	for i := 0; i < v.Len(); i++ {
		if first {
			first = false
		} else {
			b = append(b, separator...)
		}

		if multiline {
			b = enc.indent(subCtx.indent, b)
		}

		b, err = enc.encode(b, subCtx, v.Index(i))
		if err != nil {
			return nil, err
		}
	}

	if multiline {
		b = append(b, '\n')
		b = enc.indent(ctx.indent, b)
	}

	b = append(b, ']')

	return b, nil
}

func (enc *Encoder) indent(level int, b []byte) []byte {
	for i := 0; i < level; i++ {
		b = append(b, enc.indentSymbol...)
	}

	return b
}
 07070100000A1E000081A4000000000000000000000001645E367C0000070D000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/strict.go  package toml

import (
	"github.com/pelletier/go-toml/v2/internal/danger"
	"github.com/pelletier/go-toml/v2/internal/tracker"
	"github.com/pelletier/go-toml/v2/unstable"
)

type strict struct {
	Enabled bool

	// Tracks the current key being processed.
	key tracker.KeyTracker

	missing []unstable.ParserError
}

func (s *strict) EnterTable(node *unstable.Node) {
	if !s.Enabled {
		return
	}

	s.key.UpdateTable(node)
}

func (s *strict) EnterArrayTable(node *unstable.Node) {
	if !s.Enabled {
		return
	}

	s.key.UpdateArrayTable(node)
}

func (s *strict) EnterKeyValue(node *unstable.Node) {
	if !s.Enabled {
		return
	}

	s.key.Push(node)
}

func (s *strict) ExitKeyValue(node *unstable.Node) {
	if !s.Enabled {
		return
	}

	s.key.Pop(node)
}

func (s *strict) MissingTable(node *unstable.Node) {
	if !s.Enabled {
		return
	}

	s.missing = append(s.missing, unstable.ParserError{
		Highlight: keyLocation(node),
		Message:   "missing table",
		Key:       s.key.Key(),
	})
}

func (s *strict) MissingField(node *unstable.Node) {
	if !s.Enabled {
		return
	}

	s.missing = append(s.missing, unstable.ParserError{
		Highlight: keyLocation(node),
		Message:   "missing field",
		Key:       s.key.Key(),
	})
}

func (s *strict) Error(doc []byte) error {
	if !s.Enabled || len(s.missing) == 0 {
		return nil
	}

	err := &StrictMissingError{
		Errors: make([]DecodeError, 0, len(s.missing)),
	}

	for _, derr := range s.missing {
		derr := derr
		err.Errors = append(err.Errors, *wrapDecodeError(doc, &derr))
	}

	return err
}

func keyLocation(node *unstable.Node) []byte {
	k := node.Key()

	hasOne := k.Next()
	if !hasOne {
		panic("should not be called with empty key")
	}

	start := k.Node().Data
	end := k.Node().Data

	for k.Next() {
		end = k.Node().Data
	}

	return danger.BytesRange(start, end)
}
   07070100000A1F000081A4000000000000000000000001645E367C00001B75000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/toml.abnf  ;; This document describes TOML's syntax, using the ABNF format (defined in
;; RFC 5234 -- https://www.ietf.org/rfc/rfc5234.txt).
;;
;; All valid TOML documents will match this description, however certain
;; invalid documents would need to be rejected as per the semantics described
;; in the supporting text description.

;; It is possible to try this grammar interactively, using instaparse.
;;     http://instaparse.mojombo.com/
;;
;; To do so, in the lower right, click on Options and change `:input-format` to
;; ':abnf'. Then paste this entire ABNF document into the grammar entry box
;; (above the options). Then you can type or paste a sample TOML document into
;; the beige box on the left. Tada!

;; Overall Structure

toml = expression *( newline expression )

expression =  ws [ comment ]
expression =/ ws keyval ws [ comment ]
expression =/ ws table ws [ comment ]

;; Whitespace

ws = *wschar
wschar =  %x20  ; Space
wschar =/ %x09  ; Horizontal tab

;; Newline

newline =  %x0A     ; LF
newline =/ %x0D.0A  ; CRLF

;; Comment

comment-start-symbol = %x23 ; #
non-ascii = %x80-D7FF / %xE000-10FFFF
non-eol = %x09 / %x20-7F / non-ascii

comment = comment-start-symbol *non-eol

;; Key-Value pairs

keyval = key keyval-sep val

key = simple-key / dotted-key
simple-key = quoted-key / unquoted-key

unquoted-key = 1*( ALPHA / DIGIT / %x2D / %x5F ) ; A-Z / a-z / 0-9 / - / _
quoted-key = basic-string / literal-string
dotted-key = simple-key 1*( dot-sep simple-key )

dot-sep   = ws %x2E ws  ; . Period
keyval-sep = ws %x3D ws ; =

val = string / boolean / array / inline-table / date-time / float / integer

;; String

string = ml-basic-string / basic-string / ml-literal-string / literal-string

;; Basic String

basic-string = quotation-mark *basic-char quotation-mark

quotation-mark = %x22            ; "

basic-char = basic-unescaped / escaped
basic-unescaped = wschar / %x21 / %x23-5B / %x5D-7E / non-ascii
escaped = escape escape-seq-char

escape = %x5C                   ; \
escape-seq-char =  %x22         ; "    quotation mark  U+0022
escape-seq-char =/ %x5C         ; \    reverse solidus U+005C
escape-seq-char =/ %x62         ; b    backspace       U+0008
escape-seq-char =/ %x66         ; f    form feed       U+000C
escape-seq-char =/ %x6E         ; n    line feed       U+000A
escape-seq-char =/ %x72         ; r    carriage return U+000D
escape-seq-char =/ %x74         ; t    tab             U+0009
escape-seq-char =/ %x75 4HEXDIG ; uXXXX                U+XXXX
escape-seq-char =/ %x55 8HEXDIG ; UXXXXXXXX            U+XXXXXXXX

;; Multiline Basic String

ml-basic-string = ml-basic-string-delim [ newline ] ml-basic-body
                  ml-basic-string-delim
ml-basic-string-delim = 3quotation-mark
ml-basic-body = *mlb-content *( mlb-quotes 1*mlb-content ) [ mlb-quotes ]

mlb-content = mlb-char / newline / mlb-escaped-nl
mlb-char = mlb-unescaped / escaped
mlb-quotes = 1*2quotation-mark
mlb-unescaped = wschar / %x21 / %x23-5B / %x5D-7E / non-ascii
mlb-escaped-nl = escape ws newline *( wschar / newline )

;; Literal String

literal-string = apostrophe *literal-char apostrophe

apostrophe = %x27 ; ' apostrophe

literal-char = %x09 / %x20-26 / %x28-7E / non-ascii

;; Multiline Literal String

ml-literal-string = ml-literal-string-delim [ newline ] ml-literal-body
                    ml-literal-string-delim
ml-literal-string-delim = 3apostrophe
ml-literal-body = *mll-content *( mll-quotes 1*mll-content ) [ mll-quotes ]

mll-content = mll-char / newline
mll-char = %x09 / %x20-26 / %x28-7E / non-ascii
mll-quotes = 1*2apostrophe

;; Integer

integer = dec-int / hex-int / oct-int / bin-int

minus = %x2D                       ; -
plus = %x2B                        ; +
underscore = %x5F                  ; _
digit1-9 = %x31-39                 ; 1-9
digit0-7 = %x30-37                 ; 0-7
digit0-1 = %x30-31                 ; 0-1

hex-prefix = %x30.78               ; 0x
oct-prefix = %x30.6F               ; 0o
bin-prefix = %x30.62               ; 0b

dec-int = [ minus / plus ] unsigned-dec-int
unsigned-dec-int = DIGIT / digit1-9 1*( DIGIT / underscore DIGIT )

hex-int = hex-prefix HEXDIG *( HEXDIG / underscore HEXDIG )
oct-int = oct-prefix digit0-7 *( digit0-7 / underscore digit0-7 )
bin-int = bin-prefix digit0-1 *( digit0-1 / underscore digit0-1 )

;; Float

float = float-int-part ( exp / frac [ exp ] )
float =/ special-float

float-int-part = dec-int
frac = decimal-point zero-prefixable-int
decimal-point = %x2E               ; .
zero-prefixable-int = DIGIT *( DIGIT / underscore DIGIT )

exp = "e" float-exp-part
float-exp-part = [ minus / plus ] zero-prefixable-int

special-float = [ minus / plus ] ( inf / nan )
inf = %x69.6e.66  ; inf
nan = %x6e.61.6e  ; nan

;; Boolean

boolean = true / false

true    = %x74.72.75.65     ; true
false   = %x66.61.6C.73.65  ; false

;; Date and Time (as defined in RFC 3339)

date-time      = offset-date-time / local-date-time / local-date / local-time

date-fullyear  = 4DIGIT
date-month     = 2DIGIT  ; 01-12
date-mday      = 2DIGIT  ; 01-28, 01-29, 01-30, 01-31 based on month/year
time-delim     = "T" / %x20 ; T, t, or space
time-hour      = 2DIGIT  ; 00-23
time-minute    = 2DIGIT  ; 00-59
time-second    = 2DIGIT  ; 00-58, 00-59, 00-60 based on leap second rules
time-secfrac   = "." 1*DIGIT
time-numoffset = ( "+" / "-" ) time-hour ":" time-minute
time-offset    = "Z" / time-numoffset

partial-time   = time-hour ":" time-minute ":" time-second [ time-secfrac ]
full-date      = date-fullyear "-" date-month "-" date-mday
full-time      = partial-time time-offset

;; Offset Date-Time

offset-date-time = full-date time-delim full-time

;; Local Date-Time

local-date-time = full-date time-delim partial-time

;; Local Date

local-date = full-date

;; Local Time

local-time = partial-time

;; Array

array = array-open [ array-values ] ws-comment-newline array-close

array-open =  %x5B ; [
array-close = %x5D ; ]

array-values =  ws-comment-newline val ws-comment-newline array-sep array-values
array-values =/ ws-comment-newline val ws-comment-newline [ array-sep ]

array-sep = %x2C  ; , Comma

ws-comment-newline = *( wschar / [ comment ] newline )

;; Table

table = std-table / array-table

;; Standard Table

std-table = std-table-open key std-table-close

std-table-open  = %x5B ws     ; [ Left square bracket
std-table-close = ws %x5D     ; ] Right square bracket

;; Inline Table

inline-table = inline-table-open [ inline-table-keyvals ] inline-table-close

inline-table-open  = %x7B ws     ; {
inline-table-close = ws %x7D     ; }
inline-table-sep   = ws %x2C ws  ; , Comma

inline-table-keyvals = keyval [ inline-table-sep inline-table-keyvals ]

;; Array Table

array-table = array-table-open key array-table-close

array-table-open  = %x5B.5B ws  ; [[ Double left square bracket
array-table-close = ws %x5D.5D  ; ]] Double right square bracket

;; Built-in ABNF terms, reproduced here for clarity

ALPHA = %x41-5A / %x61-7A ; A-Z / a-z
DIGIT = %x30-39 ; 0-9
HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
   07070100000A20000081A4000000000000000000000001645E367C000001BA000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/types.go   package toml

import (
	"encoding"
	"reflect"
	"time"
)

var timeType = reflect.TypeOf((*time.Time)(nil)).Elem()
var textMarshalerType = reflect.TypeOf((*encoding.TextMarshaler)(nil)).Elem()
var textUnmarshalerType = reflect.TypeOf((*encoding.TextUnmarshaler)(nil)).Elem()
var mapStringInterfaceType = reflect.TypeOf(map[string]interface{}(nil))
var sliceInterfaceType = reflect.TypeOf([]interface{}(nil))
var stringType = reflect.TypeOf("")
  07070100000A21000081A4000000000000000000000001645E367C0000750F000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/unmarshaler.go package toml

import (
	"encoding"
	"errors"
	"fmt"
	"io"
	"io/ioutil"
	"math"
	"reflect"
	"strings"
	"sync/atomic"
	"time"

	"github.com/pelletier/go-toml/v2/internal/danger"
	"github.com/pelletier/go-toml/v2/internal/tracker"
	"github.com/pelletier/go-toml/v2/unstable"
)

// Unmarshal deserializes a TOML document into a Go value.
//
// It is a shortcut for Decoder.Decode() with the default options.
func Unmarshal(data []byte, v interface{}) error {
	p := unstable.Parser{}
	p.Reset(data)
	d := decoder{p: &p}

	return d.FromParser(v)
}

// Decoder reads and decode a TOML document from an input stream.
type Decoder struct {
	// input
	r io.Reader

	// global settings
	strict bool
}

// NewDecoder creates a new Decoder that will read from r.
func NewDecoder(r io.Reader) *Decoder {
	return &Decoder{r: r}
}

// DisallowUnknownFields causes the Decoder to return an error when the
// destination is a struct and the input contains a key that does not match a
// non-ignored field.
//
// In that case, the Decoder returns a StrictMissingError that can be used to
// retrieve the individual errors as well as generate a human readable
// description of the missing fields.
func (d *Decoder) DisallowUnknownFields() *Decoder {
	d.strict = true
	return d
}

// Decode the whole content of r into v.
//
// By default, values in the document that don't exist in the target Go value
// are ignored. See Decoder.DisallowUnknownFields() to change this behavior.
//
// When a TOML local date, time, or date-time is decoded into a time.Time, its
// value is represented in time.Local timezone. Otherwise the appropriate Local*
// structure is used. For time values, precision up to the nanosecond is
// supported by truncating extra digits.
//
// Empty tables decoded in an interface{} create an empty initialized
// map[string]interface{}.
//
// Types implementing the encoding.TextUnmarshaler interface are decoded from a
// TOML string.
//
// When decoding a number, go-toml will return an error if the number is out of
// bounds for the target type (which includes negative numbers when decoding
// into an unsigned int).
//
// If an error occurs while decoding the content of the document, this function
// returns a toml.DecodeError, providing context about the issue. When using
// strict mode and a field is missing, a `toml.StrictMissingError` is
// returned. In any other case, this function returns a standard Go error.
//
// # Type mapping
//
// List of supported TOML types and their associated accepted Go types:
//
//	String           -> string
//	Integer          -> uint*, int*, depending on size
//	Float            -> float*, depending on size
//	Boolean          -> bool
//	Offset Date-Time -> time.Time
//	Local Date-time  -> LocalDateTime, time.Time
//	Local Date       -> LocalDate, time.Time
//	Local Time       -> LocalTime, time.Time
//	Array            -> slice and array, depending on elements types
//	Table            -> map and struct
//	Inline Table     -> same as Table
//	Array of Tables  -> same as Array and Table
func (d *Decoder) Decode(v interface{}) error {
	b, err := ioutil.ReadAll(d.r)
	if err != nil {
		return fmt.Errorf("toml: %w", err)
	}

	p := unstable.Parser{}
	p.Reset(b)
	dec := decoder{
		p: &p,
		strict: strict{
			Enabled: d.strict,
		},
	}

	return dec.FromParser(v)
}

type decoder struct {
	// Which parser instance in use for this decoding session.
	p *unstable.Parser

	// Flag indicating that the current expression is stashed.
	// If set to true, calling nextExpr will not actually pull a new expression
	// but turn off the flag instead.
	stashedExpr bool

	// Skip expressions until a table is found. This is set to true when a
	// table could not be created (missing field in map), so all KV expressions
	// need to be skipped.
	skipUntilTable bool

	// Tracks position in Go arrays.
	// This is used when decoding [[array tables]] into Go arrays. Given array
	// tables are separate TOML expression, we need to keep track of where we
	// are at in the Go array, as we can't just introspect its size.
	arrayIndexes map[reflect.Value]int

	// Tracks keys that have been seen, with which type.
	seen tracker.SeenTracker

	// Strict mode
	strict strict

	// Current context for the error.
	errorContext *errorContext
}

type errorContext struct {
	Struct reflect.Type
	Field  []int
}

func (d *decoder) typeMismatchError(toml string, target reflect.Type) error {
	if d.errorContext != nil && d.errorContext.Struct != nil {
		ctx := d.errorContext
		f := ctx.Struct.FieldByIndex(ctx.Field)
		return fmt.Errorf("toml: cannot decode TOML %s into struct field %s.%s of type %s", toml, ctx.Struct, f.Name, f.Type)
	}
	return fmt.Errorf("toml: cannot decode TOML %s into a Go value of type %s", toml, target)
}

func (d *decoder) expr() *unstable.Node {
	return d.p.Expression()
}

func (d *decoder) nextExpr() bool {
	if d.stashedExpr {
		d.stashedExpr = false
		return true
	}
	return d.p.NextExpression()
}

func (d *decoder) stashExpr() {
	d.stashedExpr = true
}

func (d *decoder) arrayIndex(shouldAppend bool, v reflect.Value) int {
	if d.arrayIndexes == nil {
		d.arrayIndexes = make(map[reflect.Value]int, 1)
	}

	idx, ok := d.arrayIndexes[v]

	if !ok {
		d.arrayIndexes[v] = 0
	} else if shouldAppend {
		idx++
		d.arrayIndexes[v] = idx
	}

	return idx
}

func (d *decoder) FromParser(v interface{}) error {
	r := reflect.ValueOf(v)
	if r.Kind() != reflect.Ptr {
		return fmt.Errorf("toml: decoding can only be performed into a pointer, not %s", r.Kind())
	}

	if r.IsNil() {
		return fmt.Errorf("toml: decoding pointer target cannot be nil")
	}

	r = r.Elem()
	if r.Kind() == reflect.Interface && r.IsNil() {
		newMap := map[string]interface{}{}
		r.Set(reflect.ValueOf(newMap))
	}

	err := d.fromParser(r)
	if err == nil {
		return d.strict.Error(d.p.Data())
	}

	var e *unstable.ParserError
	if errors.As(err, &e) {
		return wrapDecodeError(d.p.Data(), e)
	}

	return err
}

func (d *decoder) fromParser(root reflect.Value) error {
	for d.nextExpr() {
		err := d.handleRootExpression(d.expr(), root)
		if err != nil {
			return err
		}
	}

	return d.p.Error()
}

/*
Rules for the unmarshal code:

- The stack is used to keep track of which values need to be set where.
- handle* functions <=> switch on a given unstable.Kind.
- unmarshalX* functions need to unmarshal a node of kind X.
- An "object" is either a struct or a map.
*/

func (d *decoder) handleRootExpression(expr *unstable.Node, v reflect.Value) error {
	var x reflect.Value
	var err error

	if !(d.skipUntilTable && expr.Kind == unstable.KeyValue) {
		err = d.seen.CheckExpression(expr)
		if err != nil {
			return err
		}
	}

	switch expr.Kind {
	case unstable.KeyValue:
		if d.skipUntilTable {
			return nil
		}
		x, err = d.handleKeyValue(expr, v)
	case unstable.Table:
		d.skipUntilTable = false
		d.strict.EnterTable(expr)
		x, err = d.handleTable(expr.Key(), v)
	case unstable.ArrayTable:
		d.skipUntilTable = false
		d.strict.EnterArrayTable(expr)
		x, err = d.handleArrayTable(expr.Key(), v)
	default:
		panic(fmt.Errorf("parser should not permit expression of kind %s at document root", expr.Kind))
	}

	if d.skipUntilTable {
		if expr.Kind == unstable.Table || expr.Kind == unstable.ArrayTable {
			d.strict.MissingTable(expr)
		}
	} else if err == nil && x.IsValid() {
		v.Set(x)
	}

	return err
}

func (d *decoder) handleArrayTable(key unstable.Iterator, v reflect.Value) (reflect.Value, error) {
	if key.Next() {
		return d.handleArrayTablePart(key, v)
	}
	return d.handleKeyValues(v)
}

func (d *decoder) handleArrayTableCollectionLast(key unstable.Iterator, v reflect.Value) (reflect.Value, error) {
	switch v.Kind() {
	case reflect.Interface:
		elem := v.Elem()
		if !elem.IsValid() {
			elem = reflect.New(sliceInterfaceType).Elem()
			elem.Set(reflect.MakeSlice(sliceInterfaceType, 0, 16))
		} else if elem.Kind() == reflect.Slice {
			if elem.Type() != sliceInterfaceType {
				elem = reflect.New(sliceInterfaceType).Elem()
				elem.Set(reflect.MakeSlice(sliceInterfaceType, 0, 16))
			} else if !elem.CanSet() {
				nelem := reflect.New(sliceInterfaceType).Elem()
				nelem.Set(reflect.MakeSlice(sliceInterfaceType, elem.Len(), elem.Cap()))
				reflect.Copy(nelem, elem)
				elem = nelem
			}
		}
		return d.handleArrayTableCollectionLast(key, elem)
	case reflect.Ptr:
		elem := v.Elem()
		if !elem.IsValid() {
			ptr := reflect.New(v.Type().Elem())
			v.Set(ptr)
			elem = ptr.Elem()
		}

		elem, err := d.handleArrayTableCollectionLast(key, elem)
		if err != nil {
			return reflect.Value{}, err
		}
		v.Elem().Set(elem)

		return v, nil
	case reflect.Slice:
		elemType := v.Type().Elem()
		var elem reflect.Value
		if elemType.Kind() == reflect.Interface {
			elem = makeMapStringInterface()
		} else {
			elem = reflect.New(elemType).Elem()
		}
		elem2, err := d.handleArrayTable(key, elem)
		if err != nil {
			return reflect.Value{}, err
		}
		if elem2.IsValid() {
			elem = elem2
		}
		return reflect.Append(v, elem), nil
	case reflect.Array:
		idx := d.arrayIndex(true, v)
		if idx >= v.Len() {
			return v, fmt.Errorf("%s at position %d", d.typeMismatchError("array table", v.Type()), idx)
		}
		elem := v.Index(idx)
		_, err := d.handleArrayTable(key, elem)
		return v, err
	default:
		return reflect.Value{}, d.typeMismatchError("array table", v.Type())
	}
}

// When parsing an array table expression, each part of the key needs to be
// evaluated like a normal key, but if it returns a collection, it also needs to
// point to the last element of the collection. Unless it is the last part of
// the key, then it needs to create a new element at the end.
func (d *decoder) handleArrayTableCollection(key unstable.Iterator, v reflect.Value) (reflect.Value, error) {
	if key.IsLast() {
		return d.handleArrayTableCollectionLast(key, v)
	}

	switch v.Kind() {
	case reflect.Ptr:
		elem := v.Elem()
		if !elem.IsValid() {
			ptr := reflect.New(v.Type().Elem())
			v.Set(ptr)
			elem = ptr.Elem()
		}

		elem, err := d.handleArrayTableCollection(key, elem)
		if err != nil {
			return reflect.Value{}, err
		}
		if elem.IsValid() {
			v.Elem().Set(elem)
		}

		return v, nil
	case reflect.Slice:
		elem := v.Index(v.Len() - 1)
		x, err := d.handleArrayTable(key, elem)
		if err != nil || d.skipUntilTable {
			return reflect.Value{}, err
		}
		if x.IsValid() {
			elem.Set(x)
		}

		return v, err
	case reflect.Array:
		idx := d.arrayIndex(false, v)
		if idx >= v.Len() {
			return v, fmt.Errorf("%s at position %d", d.typeMismatchError("array table", v.Type()), idx)
		}
		elem := v.Index(idx)
		_, err := d.handleArrayTable(key, elem)
		return v, err
	}

	return d.handleArrayTable(key, v)
}

func (d *decoder) handleKeyPart(key unstable.Iterator, v reflect.Value, nextFn handlerFn, makeFn valueMakerFn) (reflect.Value, error) {
	var rv reflect.Value

	// First, dispatch over v to make sure it is a valid object.
	// There is no guarantee over what it could be.
	switch v.Kind() {
	case reflect.Ptr:
		elem := v.Elem()
		if !elem.IsValid() {
			v.Set(reflect.New(v.Type().Elem()))
		}
		elem = v.Elem()
		return d.handleKeyPart(key, elem, nextFn, makeFn)
	case reflect.Map:
		vt := v.Type()

		// Create the key for the map element. Convert to key type.
		mk := reflect.ValueOf(string(key.Node().Data)).Convert(vt.Key())

		// If the map does not exist, create it.
		if v.IsNil() {
			vt := v.Type()
			v = reflect.MakeMap(vt)
			rv = v
		}

		mv := v.MapIndex(mk)
		set := false
		if !mv.IsValid() {
			// If there is no value in the map, create a new one according to
			// the map type. If the element type is interface, create either a
			// map[string]interface{} or a []interface{} depending on whether
			// this is the last part of the array table key.

			t := vt.Elem()
			if t.Kind() == reflect.Interface {
				mv = makeFn()
			} else {
				mv = reflect.New(t).Elem()
			}
			set = true
		} else if mv.Kind() == reflect.Interface {
			mv = mv.Elem()
			if !mv.IsValid() {
				mv = makeFn()
			}
			set = true
		} else if !mv.CanAddr() {
			vt := v.Type()
			t := vt.Elem()
			oldmv := mv
			mv = reflect.New(t).Elem()
			mv.Set(oldmv)
			set = true
		}

		x, err := nextFn(key, mv)
		if err != nil {
			return reflect.Value{}, err
		}

		if x.IsValid() {
			mv = x
			set = true
		}

		if set {
			v.SetMapIndex(mk, mv)
		}
	case reflect.Struct:
		path, found := structFieldPath(v, string(key.Node().Data))
		if !found {
			d.skipUntilTable = true
			return reflect.Value{}, nil
		}

		if d.errorContext == nil {
			d.errorContext = new(errorContext)
		}
		t := v.Type()
		d.errorContext.Struct = t
		d.errorContext.Field = path

		f := fieldByIndex(v, path)
		x, err := nextFn(key, f)
		if err != nil || d.skipUntilTable {
			return reflect.Value{}, err
		}
		if x.IsValid() {
			f.Set(x)
		}
		d.errorContext.Field = nil
		d.errorContext.Struct = nil
	case reflect.Interface:
		if v.Elem().IsValid() {
			v = v.Elem()
		} else {
			v = makeMapStringInterface()
		}

		x, err := d.handleKeyPart(key, v, nextFn, makeFn)
		if err != nil {
			return reflect.Value{}, err
		}
		if x.IsValid() {
			v = x
		}
		rv = v
	default:
		panic(fmt.Errorf("unhandled part: %s", v.Kind()))
	}

	return rv, nil
}

// HandleArrayTablePart navigates the Go structure v using the key v. It is
// only used for the prefix (non-last) parts of an array-table. When
// encountering a collection, it should go to the last element.
func (d *decoder) handleArrayTablePart(key unstable.Iterator, v reflect.Value) (reflect.Value, error) {
	var makeFn valueMakerFn
	if key.IsLast() {
		makeFn = makeSliceInterface
	} else {
		makeFn = makeMapStringInterface
	}
	return d.handleKeyPart(key, v, d.handleArrayTableCollection, makeFn)
}

// HandleTable returns a reference when it has checked the next expression but
// cannot handle it.
func (d *decoder) handleTable(key unstable.Iterator, v reflect.Value) (reflect.Value, error) {
	if v.Kind() == reflect.Slice {
		if v.Len() == 0 {
			return reflect.Value{}, unstable.NewParserError(key.Node().Data, "cannot store a table in a slice")
		}
		elem := v.Index(v.Len() - 1)
		x, err := d.handleTable(key, elem)
		if err != nil {
			return reflect.Value{}, err
		}
		if x.IsValid() {
			elem.Set(x)
		}
		return reflect.Value{}, nil
	}
	if key.Next() {
		// Still scoping the key
		return d.handleTablePart(key, v)
	}
	// Done scoping the key.
	// Now handle all the key-value expressions in this table.
	return d.handleKeyValues(v)
}

// Handle root expressions until the end of the document or the next
// non-key-value.
func (d *decoder) handleKeyValues(v reflect.Value) (reflect.Value, error) {
	var rv reflect.Value
	for d.nextExpr() {
		expr := d.expr()
		if expr.Kind != unstable.KeyValue {
			// Stash the expression so that fromParser can just loop and use
			// the right handler.
			// We could just recurse ourselves here, but at least this gives a
			// chance to pop the stack a bit.
			d.stashExpr()
			break
		}

		err := d.seen.CheckExpression(expr)
		if err != nil {
			return reflect.Value{}, err
		}

		x, err := d.handleKeyValue(expr, v)
		if err != nil {
			return reflect.Value{}, err
		}
		if x.IsValid() {
			v = x
			rv = x
		}
	}
	return rv, nil
}

type (
	handlerFn    func(key unstable.Iterator, v reflect.Value) (reflect.Value, error)
	valueMakerFn func() reflect.Value
)

func makeMapStringInterface() reflect.Value {
	return reflect.MakeMap(mapStringInterfaceType)
}

func makeSliceInterface() reflect.Value {
	return reflect.MakeSlice(sliceInterfaceType, 0, 16)
}

func (d *decoder) handleTablePart(key unstable.Iterator, v reflect.Value) (reflect.Value, error) {
	return d.handleKeyPart(key, v, d.handleTable, makeMapStringInterface)
}

func (d *decoder) tryTextUnmarshaler(node *unstable.Node, v reflect.Value) (bool, error) {
	// Special case for time, because we allow to unmarshal to it from
	// different kind of AST nodes.
	if v.Type() == timeType {
		return false, nil
	}

	if v.CanAddr() && v.Addr().Type().Implements(textUnmarshalerType) {
		err := v.Addr().Interface().(encoding.TextUnmarshaler).UnmarshalText(node.Data)
		if err != nil {
			return false, unstable.NewParserError(d.p.Raw(node.Raw), "%w", err)
		}

		return true, nil
	}

	return false, nil
}

func (d *decoder) handleValue(value *unstable.Node, v reflect.Value) error {
	for v.Kind() == reflect.Ptr {
		v = initAndDereferencePointer(v)
	}

	ok, err := d.tryTextUnmarshaler(value, v)
	if ok || err != nil {
		return err
	}

	switch value.Kind {
	case unstable.String:
		return d.unmarshalString(value, v)
	case unstable.Integer:
		return d.unmarshalInteger(value, v)
	case unstable.Float:
		return d.unmarshalFloat(value, v)
	case unstable.Bool:
		return d.unmarshalBool(value, v)
	case unstable.DateTime:
		return d.unmarshalDateTime(value, v)
	case unstable.LocalDate:
		return d.unmarshalLocalDate(value, v)
	case unstable.LocalTime:
		return d.unmarshalLocalTime(value, v)
	case unstable.LocalDateTime:
		return d.unmarshalLocalDateTime(value, v)
	case unstable.InlineTable:
		return d.unmarshalInlineTable(value, v)
	case unstable.Array:
		return d.unmarshalArray(value, v)
	default:
		panic(fmt.Errorf("handleValue not implemented for %s", value.Kind))
	}
}

func (d *decoder) unmarshalArray(array *unstable.Node, v reflect.Value) error {
	switch v.Kind() {
	case reflect.Slice:
		if v.IsNil() {
			v.Set(reflect.MakeSlice(v.Type(), 0, 16))
		} else {
			v.SetLen(0)
		}
	case reflect.Array:
		// arrays are always initialized
	case reflect.Interface:
		elem := v.Elem()
		if !elem.IsValid() {
			elem = reflect.New(sliceInterfaceType).Elem()
			elem.Set(reflect.MakeSlice(sliceInterfaceType, 0, 16))
		} else if elem.Kind() == reflect.Slice {
			if elem.Type() != sliceInterfaceType {
				elem = reflect.New(sliceInterfaceType).Elem()
				elem.Set(reflect.MakeSlice(sliceInterfaceType, 0, 16))
			} else if !elem.CanSet() {
				nelem := reflect.New(sliceInterfaceType).Elem()
				nelem.Set(reflect.MakeSlice(sliceInterfaceType, elem.Len(), elem.Cap()))
				reflect.Copy(nelem, elem)
				elem = nelem
			}
		}
		err := d.unmarshalArray(array, elem)
		if err != nil {
			return err
		}
		v.Set(elem)
		return nil
	default:
		// TODO: use newDecodeError, but first the parser needs to fill
		//   array.Data.
		return d.typeMismatchError("array", v.Type())
	}

	elemType := v.Type().Elem()

	it := array.Children()
	idx := 0
	for it.Next() {
		n := it.Node()

		// TODO: optimize
		if v.Kind() == reflect.Slice {
			elem := reflect.New(elemType).Elem()

			err := d.handleValue(n, elem)
			if err != nil {
				return err
			}

			v.Set(reflect.Append(v, elem))
		} else { // array
			if idx >= v.Len() {
				return nil
			}
			elem := v.Index(idx)
			err := d.handleValue(n, elem)
			if err != nil {
				return err
			}
			idx++
		}
	}

	return nil
}

func (d *decoder) unmarshalInlineTable(itable *unstable.Node, v reflect.Value) error {
	// Make sure v is an initialized object.
	switch v.Kind() {
	case reflect.Map:
		if v.IsNil() {
			v.Set(reflect.MakeMap(v.Type()))
		}
	case reflect.Struct:
	// structs are always initialized.
	case reflect.Interface:
		elem := v.Elem()
		if !elem.IsValid() {
			elem = makeMapStringInterface()
			v.Set(elem)
		}
		return d.unmarshalInlineTable(itable, elem)
	default:
		return unstable.NewParserError(d.p.Raw(itable.Raw), "cannot store inline table in Go type %s", v.Kind())
	}

	it := itable.Children()
	for it.Next() {
		n := it.Node()

		x, err := d.handleKeyValue(n, v)
		if err != nil {
			return err
		}
		if x.IsValid() {
			v = x
		}
	}

	return nil
}

func (d *decoder) unmarshalDateTime(value *unstable.Node, v reflect.Value) error {
	dt, err := parseDateTime(value.Data)
	if err != nil {
		return err
	}

	v.Set(reflect.ValueOf(dt))
	return nil
}

func (d *decoder) unmarshalLocalDate(value *unstable.Node, v reflect.Value) error {
	ld, err := parseLocalDate(value.Data)
	if err != nil {
		return err
	}

	if v.Type() == timeType {
		cast := ld.AsTime(time.Local)
		v.Set(reflect.ValueOf(cast))
		return nil
	}

	v.Set(reflect.ValueOf(ld))

	return nil
}

func (d *decoder) unmarshalLocalTime(value *unstable.Node, v reflect.Value) error {
	lt, rest, err := parseLocalTime(value.Data)
	if err != nil {
		return err
	}

	if len(rest) > 0 {
		return unstable.NewParserError(rest, "extra characters at the end of a local time")
	}

	v.Set(reflect.ValueOf(lt))
	return nil
}

func (d *decoder) unmarshalLocalDateTime(value *unstable.Node, v reflect.Value) error {
	ldt, rest, err := parseLocalDateTime(value.Data)
	if err != nil {
		return err
	}

	if len(rest) > 0 {
		return unstable.NewParserError(rest, "extra characters at the end of a local date time")
	}

	if v.Type() == timeType {
		cast := ldt.AsTime(time.Local)

		v.Set(reflect.ValueOf(cast))
		return nil
	}

	v.Set(reflect.ValueOf(ldt))

	return nil
}

func (d *decoder) unmarshalBool(value *unstable.Node, v reflect.Value) error {
	b := value.Data[0] == 't'

	switch v.Kind() {
	case reflect.Bool:
		v.SetBool(b)
	case reflect.Interface:
		v.Set(reflect.ValueOf(b))
	default:
		return unstable.NewParserError(value.Data, "cannot assign boolean to a %t", b)
	}

	return nil
}

func (d *decoder) unmarshalFloat(value *unstable.Node, v reflect.Value) error {
	f, err := parseFloat(value.Data)
	if err != nil {
		return err
	}

	switch v.Kind() {
	case reflect.Float64:
		v.SetFloat(f)
	case reflect.Float32:
		if f > math.MaxFloat32 {
			return unstable.NewParserError(value.Data, "number %f does not fit in a float32", f)
		}
		v.SetFloat(f)
	case reflect.Interface:
		v.Set(reflect.ValueOf(f))
	default:
		return unstable.NewParserError(value.Data, "float cannot be assigned to %s", v.Kind())
	}

	return nil
}

const (
	maxInt = int64(^uint(0) >> 1)
	minInt = -maxInt - 1
)

// Maximum value of uint for decoding. Currently the decoder parses the integer
// into an int64. As a result, on architectures where uint is 64 bits, the
// effective maximum uint we can decode is the maximum of int64. On
// architectures where uint is 32 bits, the maximum value we can decode is
// lower: the maximum of uint32. I didn't find a way to figure out this value at
// compile time, so it is computed during initialization.
var maxUint int64 = math.MaxInt64

func init() {
	m := uint64(^uint(0))
	if m < uint64(maxUint) {
		maxUint = int64(m)
	}
}

func (d *decoder) unmarshalInteger(value *unstable.Node, v reflect.Value) error {
	kind := v.Kind()
	if kind == reflect.Float32 || kind == reflect.Float64 {
		return d.unmarshalFloat(value, v)
	}

	i, err := parseInteger(value.Data)
	if err != nil {
		return err
	}

	var r reflect.Value

	switch kind {
	case reflect.Int64:
		v.SetInt(i)
		return nil
	case reflect.Int32:
		if i < math.MinInt32 || i > math.MaxInt32 {
			return fmt.Errorf("toml: number %d does not fit in an int32", i)
		}

		r = reflect.ValueOf(int32(i))
	case reflect.Int16:
		if i < math.MinInt16 || i > math.MaxInt16 {
			return fmt.Errorf("toml: number %d does not fit in an int16", i)
		}

		r = reflect.ValueOf(int16(i))
	case reflect.Int8:
		if i < math.MinInt8 || i > math.MaxInt8 {
			return fmt.Errorf("toml: number %d does not fit in an int8", i)
		}

		r = reflect.ValueOf(int8(i))
	case reflect.Int:
		if i < minInt || i > maxInt {
			return fmt.Errorf("toml: number %d does not fit in an int", i)
		}

		r = reflect.ValueOf(int(i))
	case reflect.Uint64:
		if i < 0 {
			return fmt.Errorf("toml: negative number %d does not fit in an uint64", i)
		}

		r = reflect.ValueOf(uint64(i))
	case reflect.Uint32:
		if i < 0 || i > math.MaxUint32 {
			return fmt.Errorf("toml: negative number %d does not fit in an uint32", i)
		}

		r = reflect.ValueOf(uint32(i))
	case reflect.Uint16:
		if i < 0 || i > math.MaxUint16 {
			return fmt.Errorf("toml: negative number %d does not fit in an uint16", i)
		}

		r = reflect.ValueOf(uint16(i))
	case reflect.Uint8:
		if i < 0 || i > math.MaxUint8 {
			return fmt.Errorf("toml: negative number %d does not fit in an uint8", i)
		}

		r = reflect.ValueOf(uint8(i))
	case reflect.Uint:
		if i < 0 || i > maxUint {
			return fmt.Errorf("toml: negative number %d does not fit in an uint", i)
		}

		r = reflect.ValueOf(uint(i))
	case reflect.Interface:
		r = reflect.ValueOf(i)
	default:
		return d.typeMismatchError("integer", v.Type())
	}

	if !r.Type().AssignableTo(v.Type()) {
		r = r.Convert(v.Type())
	}

	v.Set(r)

	return nil
}

func (d *decoder) unmarshalString(value *unstable.Node, v reflect.Value) error {
	switch v.Kind() {
	case reflect.String:
		v.SetString(string(value.Data))
	case reflect.Interface:
		v.Set(reflect.ValueOf(string(value.Data)))
	default:
		return unstable.NewParserError(d.p.Raw(value.Raw), "cannot store TOML string into a Go %s", v.Kind())
	}

	return nil
}

func (d *decoder) handleKeyValue(expr *unstable.Node, v reflect.Value) (reflect.Value, error) {
	d.strict.EnterKeyValue(expr)

	v, err := d.handleKeyValueInner(expr.Key(), expr.Value(), v)
	if d.skipUntilTable {
		d.strict.MissingField(expr)
		d.skipUntilTable = false
	}

	d.strict.ExitKeyValue(expr)

	return v, err
}

func (d *decoder) handleKeyValueInner(key unstable.Iterator, value *unstable.Node, v reflect.Value) (reflect.Value, error) {
	if key.Next() {
		// Still scoping the key
		return d.handleKeyValuePart(key, value, v)
	}
	// Done scoping the key.
	// v is whatever Go value we need to fill.
	return reflect.Value{}, d.handleValue(value, v)
}

func (d *decoder) handleKeyValuePart(key unstable.Iterator, value *unstable.Node, v reflect.Value) (reflect.Value, error) {
	// contains the replacement for v
	var rv reflect.Value

	// First, dispatch over v to make sure it is a valid object.
	// There is no guarantee over what it could be.
	switch v.Kind() {
	case reflect.Map:
		vt := v.Type()

		mk := reflect.ValueOf(string(key.Node().Data))
		mkt := stringType

		keyType := vt.Key()
		if !mkt.AssignableTo(keyType) {
			if !mkt.ConvertibleTo(keyType) {
				return reflect.Value{}, fmt.Errorf("toml: cannot convert map key of type %s to expected type %s", mkt, keyType)
			}

			mk = mk.Convert(keyType)
		}

		// If the map does not exist, create it.
		if v.IsNil() {
			v = reflect.MakeMap(vt)
			rv = v
		}

		mv := v.MapIndex(mk)
		set := false
		if !mv.IsValid() || key.IsLast() {
			set = true
			mv = reflect.New(v.Type().Elem()).Elem()
		}

		nv, err := d.handleKeyValueInner(key, value, mv)
		if err != nil {
			return reflect.Value{}, err
		}
		if nv.IsValid() {
			mv = nv
			set = true
		}

		if set {
			v.SetMapIndex(mk, mv)
		}
	case reflect.Struct:
		path, found := structFieldPath(v, string(key.Node().Data))
		if !found {
			d.skipUntilTable = true
			break
		}

		if d.errorContext == nil {
			d.errorContext = new(errorContext)
		}
		t := v.Type()
		d.errorContext.Struct = t
		d.errorContext.Field = path

		f := fieldByIndex(v, path)
		x, err := d.handleKeyValueInner(key, value, f)
		if err != nil {
			return reflect.Value{}, err
		}

		if x.IsValid() {
			f.Set(x)
		}
		d.errorContext.Struct = nil
		d.errorContext.Field = nil
	case reflect.Interface:
		v = v.Elem()

		// Following encoding/json: decoding an object into an
		// interface{}, it needs to always hold a
		// map[string]interface{}. This is for the types to be
		// consistent whether a previous value was set or not.
		if !v.IsValid() || v.Type() != mapStringInterfaceType {
			v = makeMapStringInterface()
		}

		x, err := d.handleKeyValuePart(key, value, v)
		if err != nil {
			return reflect.Value{}, err
		}
		if x.IsValid() {
			v = x
		}
		rv = v
	case reflect.Ptr:
		elem := v.Elem()
		if !elem.IsValid() {
			ptr := reflect.New(v.Type().Elem())
			v.Set(ptr)
			rv = v
			elem = ptr.Elem()
		}

		elem2, err := d.handleKeyValuePart(key, value, elem)
		if err != nil {
			return reflect.Value{}, err
		}
		if elem2.IsValid() {
			elem = elem2
		}
		v.Elem().Set(elem)
	default:
		return reflect.Value{}, fmt.Errorf("unhandled kv part: %s", v.Kind())
	}

	return rv, nil
}

func initAndDereferencePointer(v reflect.Value) reflect.Value {
	var elem reflect.Value
	if v.IsNil() {
		ptr := reflect.New(v.Type().Elem())
		v.Set(ptr)
	}
	elem = v.Elem()
	return elem
}

// Same as reflect.Value.FieldByIndex, but creates pointers if needed.
func fieldByIndex(v reflect.Value, path []int) reflect.Value {
	for i, x := range path {
		v = v.Field(x)

		if i < len(path)-1 && v.Kind() == reflect.Ptr {
			if v.IsNil() {
				v.Set(reflect.New(v.Type().Elem()))
			}
			v = v.Elem()
		}
	}
	return v
}

type fieldPathsMap = map[string][]int

var globalFieldPathsCache atomic.Value // map[danger.TypeID]fieldPathsMap

func structFieldPath(v reflect.Value, name string) ([]int, bool) {
	t := v.Type()

	cache, _ := globalFieldPathsCache.Load().(map[danger.TypeID]fieldPathsMap)
	fieldPaths, ok := cache[danger.MakeTypeID(t)]

	if !ok {
		fieldPaths = map[string][]int{}

		forEachField(t, nil, func(name string, path []int) {
			fieldPaths[name] = path
			// extra copy for the case-insensitive match
			fieldPaths[strings.ToLower(name)] = path
		})

		newCache := make(map[danger.TypeID]fieldPathsMap, len(cache)+1)
		newCache[danger.MakeTypeID(t)] = fieldPaths
		for k, v := range cache {
			newCache[k] = v
		}
		globalFieldPathsCache.Store(newCache)
	}

	path, ok := fieldPaths[name]
	if !ok {
		path, ok = fieldPaths[strings.ToLower(name)]
	}
	return path, ok
}

func forEachField(t reflect.Type, path []int, do func(name string, path []int)) {
	n := t.NumField()
	for i := 0; i < n; i++ {
		f := t.Field(i)

		if !f.Anonymous && f.PkgPath != "" {
			// only consider exported fields.
			continue
		}

		fieldPath := append(path, i)
		fieldPath = fieldPath[:len(fieldPath):len(fieldPath)]

		name := f.Tag.Get("toml")
		if name == "-" {
			continue
		}

		if i := strings.IndexByte(name, ','); i >= 0 {
			name = name[:i]
		}

		if f.Anonymous && name == "" {
			t2 := f.Type
			if t2.Kind() == reflect.Ptr {
				t2 = t2.Elem()
			}

			if t2.Kind() == reflect.Struct {
				forEachField(t2, fieldPath, do)
			}
			continue
		}

		if name == "" {
			name = f.Name
		}

		do(name, fieldPath)
	}
}
 07070100000A22000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/unstable   07070100000A23000081A4000000000000000000000001645E367C00000E40000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/unstable/ast.go    package unstable

import (
	"fmt"
	"unsafe"

	"github.com/pelletier/go-toml/v2/internal/danger"
)

// Iterator over a sequence of nodes.
//
// Starts uninitialized, you need to call Next() first.
//
// For example:
//
//	it := n.Children()
//	for it.Next() {
//		n := it.Node()
//		// do something with n
//	}
type Iterator struct {
	started bool
	node    *Node
}

// Next moves the iterator forward and returns true if points to a
// node, false otherwise.
func (c *Iterator) Next() bool {
	if !c.started {
		c.started = true
	} else if c.node.Valid() {
		c.node = c.node.Next()
	}
	return c.node.Valid()
}

// IsLast returns true if the current node of the iterator is the last
// one.  Subsequent calls to Next() will return false.
func (c *Iterator) IsLast() bool {
	return c.node.next == 0
}

// Node returns a pointer to the node pointed at by the iterator.
func (c *Iterator) Node() *Node {
	return c.node
}

// Node in a TOML expression AST.
//
// Depending on Kind, its sequence of children should be interpreted
// differently.
//
//   - Array have one child per element in the array.
//   - InlineTable have one child per key-value in the table (each of kind
//     InlineTable).
//   - KeyValue have at least two children. The first one is the value. The rest
//     make a potentially dotted key.
//   - Table and ArrayTable's children represent a dotted key (same as
//     KeyValue, but without the first node being the value).
//
// When relevant, Raw describes the range of bytes this node is referring to in
// the input document. Use Parser.Raw() to retrieve the actual bytes.
type Node struct {
	Kind Kind
	Raw  Range  // Raw bytes from the input.
	Data []byte // Node value (either allocated or referencing the input).

	// References to other nodes, as offsets in the backing array
	// from this node. References can go backward, so those can be
	// negative.
	next  int // 0 if last element
	child int // 0 if no child
}

// Range of bytes in the document.
type Range struct {
	Offset uint32
	Length uint32
}

// Next returns a pointer to the next node, or nil if there is no next node.
func (n *Node) Next() *Node {
	if n.next == 0 {
		return nil
	}
	ptr := unsafe.Pointer(n)
	size := unsafe.Sizeof(Node{})
	return (*Node)(danger.Stride(ptr, size, n.next))
}

// Child returns a pointer to the first child node of this node. Other children
// can be accessed calling Next on the first child.  Returns an nil if this Node
// has no child.
func (n *Node) Child() *Node {
	if n.child == 0 {
		return nil
	}
	ptr := unsafe.Pointer(n)
	size := unsafe.Sizeof(Node{})
	return (*Node)(danger.Stride(ptr, size, n.child))
}

// Valid returns true if the node's kind is set (not to Invalid).
func (n *Node) Valid() bool {
	return n != nil
}

// Key returns the children nodes making the Key on a supported node. Panics
// otherwise.  They are guaranteed to be all be of the Kind Key. A simple key
// would return just one element.
func (n *Node) Key() Iterator {
	switch n.Kind {
	case KeyValue:
		value := n.Child()
		if !value.Valid() {
			panic(fmt.Errorf("KeyValue should have at least two children"))
		}
		return Iterator{node: value.Next()}
	case Table, ArrayTable:
		return Iterator{node: n.Child()}
	default:
		panic(fmt.Errorf("Key() is not supported on a %s", n.Kind))
	}
}

// Value returns a pointer to the value node of a KeyValue.
// Guaranteed to be non-nil.  Panics if not called on a KeyValue node,
// or if the Children are malformed.
func (n *Node) Value() *Node {
	return n.Child()
}

// Children returns an iterator over a node's children.
func (n *Node) Children() Iterator {
	return Iterator{node: n.Child()}
}
07070100000A24000081A4000000000000000000000001645E367C00000556000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/unstable/builder.go    package unstable

// root contains a full AST.
//
// It is immutable once constructed with Builder.
type root struct {
	nodes []Node
}

// Iterator over the top level nodes.
func (r *root) Iterator() Iterator {
	it := Iterator{}
	if len(r.nodes) > 0 {
		it.node = &r.nodes[0]
	}
	return it
}

func (r *root) at(idx reference) *Node {
	return &r.nodes[idx]
}

type reference int

const invalidReference reference = -1

func (r reference) Valid() bool {
	return r != invalidReference
}

type builder struct {
	tree    root
	lastIdx int
}

func (b *builder) Tree() *root {
	return &b.tree
}

func (b *builder) NodeAt(ref reference) *Node {
	return b.tree.at(ref)
}

func (b *builder) Reset() {
	b.tree.nodes = b.tree.nodes[:0]
	b.lastIdx = 0
}

func (b *builder) Push(n Node) reference {
	b.lastIdx = len(b.tree.nodes)
	b.tree.nodes = append(b.tree.nodes, n)
	return reference(b.lastIdx)
}

func (b *builder) PushAndChain(n Node) reference {
	newIdx := len(b.tree.nodes)
	b.tree.nodes = append(b.tree.nodes, n)
	if b.lastIdx >= 0 {
		b.tree.nodes[b.lastIdx].next = newIdx - b.lastIdx
	}
	b.lastIdx = newIdx
	return reference(b.lastIdx)
}

func (b *builder) AttachChild(parent reference, child reference) {
	b.tree.nodes[parent].child = int(child) - int(parent)
}

func (b *builder) Chain(from reference, to reference) {
	b.tree.nodes[from].next = int(to) - int(from)
}
  07070100000A25000081A4000000000000000000000001645E367C00000072000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/unstable/doc.go    // Package unstable provides APIs that do not meet the backward compatibility
// guarantees yet.
package unstable
  07070100000A26000081A4000000000000000000000001645E367C0000042F000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/unstable/kind.go   package unstable

import "fmt"

// Kind represents the type of TOML structure contained in a given Node.
type Kind int

const (
	// Meta
	Invalid Kind = iota
	Comment
	Key

	// Top level structures
	Table
	ArrayTable
	KeyValue

	// Containers values
	Array
	InlineTable

	// Values
	String
	Bool
	Float
	Integer
	LocalDate
	LocalTime
	LocalDateTime
	DateTime
)

// String implementation of fmt.Stringer.
func (k Kind) String() string {
	switch k {
	case Invalid:
		return "Invalid"
	case Comment:
		return "Comment"
	case Key:
		return "Key"
	case Table:
		return "Table"
	case ArrayTable:
		return "ArrayTable"
	case KeyValue:
		return "KeyValue"
	case Array:
		return "Array"
	case InlineTable:
		return "InlineTable"
	case String:
		return "String"
	case Bool:
		return "Bool"
	case Float:
		return "Float"
	case Integer:
		return "Integer"
	case LocalDate:
		return "LocalDate"
	case LocalTime:
		return "LocalTime"
	case LocalDateTime:
		return "LocalDateTime"
	case DateTime:
		return "DateTime"
	}
	panic(fmt.Errorf("Kind.String() not implemented for '%d'", k))
}
 07070100000A27000081A4000000000000000000000001645E367C00006100000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/unstable/parser.go package unstable

import (
	"bytes"
	"fmt"
	"unicode"

	"github.com/pelletier/go-toml/v2/internal/characters"
	"github.com/pelletier/go-toml/v2/internal/danger"
)

// ParserError describes an error relative to the content of the document.
//
// It cannot outlive the instance of Parser it refers to, and may cause panics
// if the parser is reset.
type ParserError struct {
	Highlight []byte
	Message   string
	Key       []string // optional
}

// Error is the implementation of the error interface.
func (e *ParserError) Error() string {
	return e.Message
}

// NewParserError is a convenience function to create a ParserError
//
// Warning: Highlight needs to be a subslice of Parser.data, so only slices
// returned by Parser.Raw are valid candidates.
func NewParserError(highlight []byte, format string, args ...interface{}) error {
	return &ParserError{
		Highlight: highlight,
		Message:   fmt.Errorf(format, args...).Error(),
	}
}

// Parser scans over a TOML-encoded document and generates an iterative AST.
//
// To prime the Parser, first reset it with the contents of a TOML document.
// Then, process all top-level expressions sequentially. See Example.
//
// Don't forget to check Error() after you're done parsing.
//
// Each top-level expression needs to be fully processed before calling
// NextExpression() again. Otherwise, calls to various Node methods may panic if
// the parser has moved on the next expression.
//
// For performance reasons, go-toml doesn't make a copy of the input bytes to
// the parser. Make sure to copy all the bytes you need to outlive the slice
// given to the parser.
//
// The parser doesn't provide nodes for comments yet, nor for whitespace.
type Parser struct {
	data    []byte
	builder builder
	ref     reference
	left    []byte
	err     error
	first   bool
}

// Data returns the slice provided to the last call to Reset.
func (p *Parser) Data() []byte {
	return p.data
}

// Range returns a range description that corresponds to a given slice of the
// input. If the argument is not a subslice of the parser input, this function
// panics.
func (p *Parser) Range(b []byte) Range {
	return Range{
		Offset: uint32(danger.SubsliceOffset(p.data, b)),
		Length: uint32(len(b)),
	}
}

// Raw returns the slice corresponding to the bytes in the given range.
func (p *Parser) Raw(raw Range) []byte {
	return p.data[raw.Offset : raw.Offset+raw.Length]
}

// Reset brings the parser to its initial state for a given input. It wipes an
// reuses internal storage to reduce allocation.
func (p *Parser) Reset(b []byte) {
	p.builder.Reset()
	p.ref = invalidReference
	p.data = b
	p.left = b
	p.err = nil
	p.first = true
}

// NextExpression parses the next top-level expression. If an expression was
// successfully parsed, it returns true. If the parser is at the end of the
// document or an error occurred, it returns false.
//
// Retrieve the parsed expression with Expression().
func (p *Parser) NextExpression() bool {
	if len(p.left) == 0 || p.err != nil {
		return false
	}

	p.builder.Reset()
	p.ref = invalidReference

	for {
		if len(p.left) == 0 || p.err != nil {
			return false
		}

		if !p.first {
			p.left, p.err = p.parseNewline(p.left)
		}

		if len(p.left) == 0 || p.err != nil {
			return false
		}

		p.ref, p.left, p.err = p.parseExpression(p.left)

		if p.err != nil {
			return false
		}

		p.first = false

		if p.ref.Valid() {
			return true
		}
	}
}

// Expression returns a pointer to the node representing the last successfully
// parsed expression.
func (p *Parser) Expression() *Node {
	return p.builder.NodeAt(p.ref)
}

// Error returns any error that has occurred during parsing.
func (p *Parser) Error() error {
	return p.err
}

func (p *Parser) parseNewline(b []byte) ([]byte, error) {
	if b[0] == '\n' {
		return b[1:], nil
	}

	if b[0] == '\r' {
		_, rest, err := scanWindowsNewline(b)
		return rest, err
	}

	return nil, NewParserError(b[0:1], "expected newline but got %#U", b[0])
}

func (p *Parser) parseExpression(b []byte) (reference, []byte, error) {
	// expression =  ws [ comment ]
	// expression =/ ws keyval ws [ comment ]
	// expression =/ ws table ws [ comment ]
	ref := invalidReference

	b = p.parseWhitespace(b)

	if len(b) == 0 {
		return ref, b, nil
	}

	if b[0] == '#' {
		_, rest, err := scanComment(b)
		return ref, rest, err
	}

	if b[0] == '\n' || b[0] == '\r' {
		return ref, b, nil
	}

	var err error
	if b[0] == '[' {
		ref, b, err = p.parseTable(b)
	} else {
		ref, b, err = p.parseKeyval(b)
	}

	if err != nil {
		return ref, nil, err
	}

	b = p.parseWhitespace(b)

	if len(b) > 0 && b[0] == '#' {
		_, rest, err := scanComment(b)
		return ref, rest, err
	}

	return ref, b, nil
}

func (p *Parser) parseTable(b []byte) (reference, []byte, error) {
	// table = std-table / array-table
	if len(b) > 1 && b[1] == '[' {
		return p.parseArrayTable(b)
	}

	return p.parseStdTable(b)
}

func (p *Parser) parseArrayTable(b []byte) (reference, []byte, error) {
	// array-table = array-table-open key array-table-close
	// array-table-open  = %x5B.5B ws  ; [[ Double left square bracket
	// array-table-close = ws %x5D.5D  ; ]] Double right square bracket
	ref := p.builder.Push(Node{
		Kind: ArrayTable,
	})

	b = b[2:]
	b = p.parseWhitespace(b)

	k, b, err := p.parseKey(b)
	if err != nil {
		return ref, nil, err
	}

	p.builder.AttachChild(ref, k)
	b = p.parseWhitespace(b)

	b, err = expect(']', b)
	if err != nil {
		return ref, nil, err
	}

	b, err = expect(']', b)

	return ref, b, err
}

func (p *Parser) parseStdTable(b []byte) (reference, []byte, error) {
	// std-table = std-table-open key std-table-close
	// std-table-open  = %x5B ws     ; [ Left square bracket
	// std-table-close = ws %x5D     ; ] Right square bracket
	ref := p.builder.Push(Node{
		Kind: Table,
	})

	b = b[1:]
	b = p.parseWhitespace(b)

	key, b, err := p.parseKey(b)
	if err != nil {
		return ref, nil, err
	}

	p.builder.AttachChild(ref, key)

	b = p.parseWhitespace(b)

	b, err = expect(']', b)

	return ref, b, err
}

func (p *Parser) parseKeyval(b []byte) (reference, []byte, error) {
	// keyval = key keyval-sep val
	ref := p.builder.Push(Node{
		Kind: KeyValue,
	})

	key, b, err := p.parseKey(b)
	if err != nil {
		return invalidReference, nil, err
	}

	// keyval-sep = ws %x3D ws ; =

	b = p.parseWhitespace(b)

	if len(b) == 0 {
		return invalidReference, nil, NewParserError(b, "expected = after a key, but the document ends there")
	}

	b, err = expect('=', b)
	if err != nil {
		return invalidReference, nil, err
	}

	b = p.parseWhitespace(b)

	valRef, b, err := p.parseVal(b)
	if err != nil {
		return ref, b, err
	}

	p.builder.Chain(valRef, key)
	p.builder.AttachChild(ref, valRef)

	return ref, b, err
}

//nolint:cyclop,funlen
func (p *Parser) parseVal(b []byte) (reference, []byte, error) {
	// val = string / boolean / array / inline-table / date-time / float / integer
	ref := invalidReference

	if len(b) == 0 {
		return ref, nil, NewParserError(b, "expected value, not eof")
	}

	var err error
	c := b[0]

	switch c {
	case '"':
		var raw []byte
		var v []byte
		if scanFollowsMultilineBasicStringDelimiter(b) {
			raw, v, b, err = p.parseMultilineBasicString(b)
		} else {
			raw, v, b, err = p.parseBasicString(b)
		}

		if err == nil {
			ref = p.builder.Push(Node{
				Kind: String,
				Raw:  p.Range(raw),
				Data: v,
			})
		}

		return ref, b, err
	case '\'':
		var raw []byte
		var v []byte
		if scanFollowsMultilineLiteralStringDelimiter(b) {
			raw, v, b, err = p.parseMultilineLiteralString(b)
		} else {
			raw, v, b, err = p.parseLiteralString(b)
		}

		if err == nil {
			ref = p.builder.Push(Node{
				Kind: String,
				Raw:  p.Range(raw),
				Data: v,
			})
		}

		return ref, b, err
	case 't':
		if !scanFollowsTrue(b) {
			return ref, nil, NewParserError(atmost(b, 4), "expected 'true'")
		}

		ref = p.builder.Push(Node{
			Kind: Bool,
			Data: b[:4],
		})

		return ref, b[4:], nil
	case 'f':
		if !scanFollowsFalse(b) {
			return ref, nil, NewParserError(atmost(b, 5), "expected 'false'")
		}

		ref = p.builder.Push(Node{
			Kind: Bool,
			Data: b[:5],
		})

		return ref, b[5:], nil
	case '[':
		return p.parseValArray(b)
	case '{':
		return p.parseInlineTable(b)
	default:
		return p.parseIntOrFloatOrDateTime(b)
	}
}

func atmost(b []byte, n int) []byte {
	if n >= len(b) {
		return b
	}

	return b[:n]
}

func (p *Parser) parseLiteralString(b []byte) ([]byte, []byte, []byte, error) {
	v, rest, err := scanLiteralString(b)
	if err != nil {
		return nil, nil, nil, err
	}

	return v, v[1 : len(v)-1], rest, nil
}

func (p *Parser) parseInlineTable(b []byte) (reference, []byte, error) {
	// inline-table = inline-table-open [ inline-table-keyvals ] inline-table-close
	// inline-table-open  = %x7B ws     ; {
	// inline-table-close = ws %x7D     ; }
	// inline-table-sep   = ws %x2C ws  ; , Comma
	// inline-table-keyvals = keyval [ inline-table-sep inline-table-keyvals ]
	parent := p.builder.Push(Node{
		Kind: InlineTable,
		Raw:  p.Range(b[:1]),
	})

	first := true

	var child reference

	b = b[1:]

	var err error

	for len(b) > 0 {
		previousB := b
		b = p.parseWhitespace(b)

		if len(b) == 0 {
			return parent, nil, NewParserError(previousB[:1], "inline table is incomplete")
		}

		if b[0] == '}' {
			break
		}

		if !first {
			b, err = expect(',', b)
			if err != nil {
				return parent, nil, err
			}
			b = p.parseWhitespace(b)
		}

		var kv reference

		kv, b, err = p.parseKeyval(b)
		if err != nil {
			return parent, nil, err
		}

		if first {
			p.builder.AttachChild(parent, kv)
		} else {
			p.builder.Chain(child, kv)
		}
		child = kv

		first = false
	}

	rest, err := expect('}', b)

	return parent, rest, err
}

//nolint:funlen,cyclop
func (p *Parser) parseValArray(b []byte) (reference, []byte, error) {
	// array = array-open [ array-values ] ws-comment-newline array-close
	// array-open =  %x5B ; [
	// array-close = %x5D ; ]
	// array-values =  ws-comment-newline val ws-comment-newline array-sep array-values
	// array-values =/ ws-comment-newline val ws-comment-newline [ array-sep ]
	// array-sep = %x2C  ; , Comma
	// ws-comment-newline = *( wschar / [ comment ] newline )
	arrayStart := b
	b = b[1:]

	parent := p.builder.Push(Node{
		Kind: Array,
	})

	first := true

	var lastChild reference

	var err error
	for len(b) > 0 {
		b, err = p.parseOptionalWhitespaceCommentNewline(b)
		if err != nil {
			return parent, nil, err
		}

		if len(b) == 0 {
			return parent, nil, NewParserError(arrayStart[:1], "array is incomplete")
		}

		if b[0] == ']' {
			break
		}

		if b[0] == ',' {
			if first {
				return parent, nil, NewParserError(b[0:1], "array cannot start with comma")
			}
			b = b[1:]

			b, err = p.parseOptionalWhitespaceCommentNewline(b)
			if err != nil {
				return parent, nil, err
			}
		} else if !first {
			return parent, nil, NewParserError(b[0:1], "array elements must be separated by commas")
		}

		// TOML allows trailing commas in arrays.
		if len(b) > 0 && b[0] == ']' {
			break
		}

		var valueRef reference
		valueRef, b, err = p.parseVal(b)
		if err != nil {
			return parent, nil, err
		}

		if first {
			p.builder.AttachChild(parent, valueRef)
		} else {
			p.builder.Chain(lastChild, valueRef)
		}
		lastChild = valueRef

		b, err = p.parseOptionalWhitespaceCommentNewline(b)
		if err != nil {
			return parent, nil, err
		}
		first = false
	}

	rest, err := expect(']', b)

	return parent, rest, err
}

func (p *Parser) parseOptionalWhitespaceCommentNewline(b []byte) ([]byte, error) {
	for len(b) > 0 {
		var err error
		b = p.parseWhitespace(b)

		if len(b) > 0 && b[0] == '#' {
			_, b, err = scanComment(b)
			if err != nil {
				return nil, err
			}
		}

		if len(b) == 0 {
			break
		}

		if b[0] == '\n' || b[0] == '\r' {
			b, err = p.parseNewline(b)
			if err != nil {
				return nil, err
			}
		} else {
			break
		}
	}

	return b, nil
}

func (p *Parser) parseMultilineLiteralString(b []byte) ([]byte, []byte, []byte, error) {
	token, rest, err := scanMultilineLiteralString(b)
	if err != nil {
		return nil, nil, nil, err
	}

	i := 3

	// skip the immediate new line
	if token[i] == '\n' {
		i++
	} else if token[i] == '\r' && token[i+1] == '\n' {
		i += 2
	}

	return token, token[i : len(token)-3], rest, err
}

//nolint:funlen,gocognit,cyclop
func (p *Parser) parseMultilineBasicString(b []byte) ([]byte, []byte, []byte, error) {
	// ml-basic-string = ml-basic-string-delim [ newline ] ml-basic-body
	// ml-basic-string-delim
	// ml-basic-string-delim = 3quotation-mark
	// ml-basic-body = *mlb-content *( mlb-quotes 1*mlb-content ) [ mlb-quotes ]
	//
	// mlb-content = mlb-char / newline / mlb-escaped-nl
	// mlb-char = mlb-unescaped / escaped
	// mlb-quotes = 1*2quotation-mark
	// mlb-unescaped = wschar / %x21 / %x23-5B / %x5D-7E / non-ascii
	// mlb-escaped-nl = escape ws newline *( wschar / newline )
	token, escaped, rest, err := scanMultilineBasicString(b)
	if err != nil {
		return nil, nil, nil, err
	}

	i := 3

	// skip the immediate new line
	if token[i] == '\n' {
		i++
	} else if token[i] == '\r' && token[i+1] == '\n' {
		i += 2
	}

	// fast path
	startIdx := i
	endIdx := len(token) - len(`"""`)

	if !escaped {
		str := token[startIdx:endIdx]
		verr := characters.Utf8TomlValidAlreadyEscaped(str)
		if verr.Zero() {
			return token, str, rest, nil
		}
		return nil, nil, nil, NewParserError(str[verr.Index:verr.Index+verr.Size], "invalid UTF-8")
	}

	var builder bytes.Buffer

	// The scanner ensures that the token starts and ends with quotes and that
	// escapes are balanced.
	for i < len(token)-3 {
		c := token[i]

		//nolint:nestif
		if c == '\\' {
			// When the last non-whitespace character on a line is an unescaped \,
			// it will be trimmed along with all whitespace (including newlines) up
			// to the next non-whitespace character or closing delimiter.

			isLastNonWhitespaceOnLine := false
			j := 1
		findEOLLoop:
			for ; j < len(token)-3-i; j++ {
				switch token[i+j] {
				case ' ', '\t':
					continue
				case '\r':
					if token[i+j+1] == '\n' {
						continue
					}
				case '\n':
					isLastNonWhitespaceOnLine = true
				}
				break findEOLLoop
			}
			if isLastNonWhitespaceOnLine {
				i += j
				for ; i < len(token)-3; i++ {
					c := token[i]
					if !(c == '\n' || c == '\r' || c == ' ' || c == '\t') {
						i--
						break
					}
				}
				i++
				continue
			}

			// handle escaping
			i++
			c = token[i]

			switch c {
			case '"', '\\':
				builder.WriteByte(c)
			case 'b':
				builder.WriteByte('\b')
			case 'f':
				builder.WriteByte('\f')
			case 'n':
				builder.WriteByte('\n')
			case 'r':
				builder.WriteByte('\r')
			case 't':
				builder.WriteByte('\t')
			case 'e':
				builder.WriteByte(0x1B)
			case 'u':
				x, err := hexToRune(atmost(token[i+1:], 4), 4)
				if err != nil {
					return nil, nil, nil, err
				}
				builder.WriteRune(x)
				i += 4
			case 'U':
				x, err := hexToRune(atmost(token[i+1:], 8), 8)
				if err != nil {
					return nil, nil, nil, err
				}

				builder.WriteRune(x)
				i += 8
			default:
				return nil, nil, nil, NewParserError(token[i:i+1], "invalid escaped character %#U", c)
			}
			i++
		} else {
			size := characters.Utf8ValidNext(token[i:])
			if size == 0 {
				return nil, nil, nil, NewParserError(token[i:i+1], "invalid character %#U", c)
			}
			builder.Write(token[i : i+size])
			i += size
		}
	}

	return token, builder.Bytes(), rest, nil
}

func (p *Parser) parseKey(b []byte) (reference, []byte, error) {
	// key = simple-key / dotted-key
	// simple-key = quoted-key / unquoted-key
	//
	// unquoted-key = 1*( ALPHA / DIGIT / %x2D / %x5F ) ; A-Z / a-z / 0-9 / - / _
	// quoted-key = basic-string / literal-string
	// dotted-key = simple-key 1*( dot-sep simple-key )
	//
	// dot-sep   = ws %x2E ws  ; . Period
	raw, key, b, err := p.parseSimpleKey(b)
	if err != nil {
		return invalidReference, nil, err
	}

	ref := p.builder.Push(Node{
		Kind: Key,
		Raw:  p.Range(raw),
		Data: key,
	})

	for {
		b = p.parseWhitespace(b)
		if len(b) > 0 && b[0] == '.' {
			b = p.parseWhitespace(b[1:])

			raw, key, b, err = p.parseSimpleKey(b)
			if err != nil {
				return ref, nil, err
			}

			p.builder.PushAndChain(Node{
				Kind: Key,
				Raw:  p.Range(raw),
				Data: key,
			})
		} else {
			break
		}
	}

	return ref, b, nil
}

func (p *Parser) parseSimpleKey(b []byte) (raw, key, rest []byte, err error) {
	if len(b) == 0 {
		return nil, nil, nil, NewParserError(b, "expected key but found none")
	}

	// simple-key = quoted-key / unquoted-key
	// unquoted-key = 1*( ALPHA / DIGIT / %x2D / %x5F ) ; A-Z / a-z / 0-9 / - / _
	// quoted-key = basic-string / literal-string
	switch {
	case b[0] == '\'':
		return p.parseLiteralString(b)
	case b[0] == '"':
		return p.parseBasicString(b)
	case isUnquotedKeyChar(b[0]):
		key, rest = scanUnquotedKey(b)
		return key, key, rest, nil
	default:
		return nil, nil, nil, NewParserError(b[0:1], "invalid character at start of key: %c", b[0])
	}
}

//nolint:funlen,cyclop
func (p *Parser) parseBasicString(b []byte) ([]byte, []byte, []byte, error) {
	// basic-string = quotation-mark *basic-char quotation-mark
	// quotation-mark = %x22            ; "
	// basic-char = basic-unescaped / escaped
	// basic-unescaped = wschar / %x21 / %x23-5B / %x5D-7E / non-ascii
	// escaped = escape escape-seq-char
	// escape-seq-char =  %x22         ; "    quotation mark  U+0022
	// escape-seq-char =/ %x5C         ; \    reverse solidus U+005C
	// escape-seq-char =/ %x62         ; b    backspace       U+0008
	// escape-seq-char =/ %x66         ; f    form feed       U+000C
	// escape-seq-char =/ %x6E         ; n    line feed       U+000A
	// escape-seq-char =/ %x72         ; r    carriage return U+000D
	// escape-seq-char =/ %x74         ; t    tab             U+0009
	// escape-seq-char =/ %x75 4HEXDIG ; uXXXX                U+XXXX
	// escape-seq-char =/ %x55 8HEXDIG ; UXXXXXXXX            U+XXXXXXXX
	token, escaped, rest, err := scanBasicString(b)
	if err != nil {
		return nil, nil, nil, err
	}

	startIdx := len(`"`)
	endIdx := len(token) - len(`"`)

	// Fast path. If there is no escape sequence, the string should just be
	// an UTF-8 encoded string, which is the same as Go. In that case,
	// validate the string and return a direct reference to the buffer.
	if !escaped {
		str := token[startIdx:endIdx]
		verr := characters.Utf8TomlValidAlreadyEscaped(str)
		if verr.Zero() {
			return token, str, rest, nil
		}
		return nil, nil, nil, NewParserError(str[verr.Index:verr.Index+verr.Size], "invalid UTF-8")
	}

	i := startIdx

	var builder bytes.Buffer

	// The scanner ensures that the token starts and ends with quotes and that
	// escapes are balanced.
	for i < len(token)-1 {
		c := token[i]
		if c == '\\' {
			i++
			c = token[i]

			switch c {
			case '"', '\\':
				builder.WriteByte(c)
			case 'b':
				builder.WriteByte('\b')
			case 'f':
				builder.WriteByte('\f')
			case 'n':
				builder.WriteByte('\n')
			case 'r':
				builder.WriteByte('\r')
			case 't':
				builder.WriteByte('\t')
			case 'e':
				builder.WriteByte(0x1B)
			case 'u':
				x, err := hexToRune(token[i+1:len(token)-1], 4)
				if err != nil {
					return nil, nil, nil, err
				}

				builder.WriteRune(x)
				i += 4
			case 'U':
				x, err := hexToRune(token[i+1:len(token)-1], 8)
				if err != nil {
					return nil, nil, nil, err
				}

				builder.WriteRune(x)
				i += 8
			default:
				return nil, nil, nil, NewParserError(token[i:i+1], "invalid escaped character %#U", c)
			}
			i++
		} else {
			size := characters.Utf8ValidNext(token[i:])
			if size == 0 {
				return nil, nil, nil, NewParserError(token[i:i+1], "invalid character %#U", c)
			}
			builder.Write(token[i : i+size])
			i += size
		}
	}

	return token, builder.Bytes(), rest, nil
}

func hexToRune(b []byte, length int) (rune, error) {
	if len(b) < length {
		return -1, NewParserError(b, "unicode point needs %d character, not %d", length, len(b))
	}
	b = b[:length]

	var r uint32
	for i, c := range b {
		d := uint32(0)
		switch {
		case '0' <= c && c <= '9':
			d = uint32(c - '0')
		case 'a' <= c && c <= 'f':
			d = uint32(c - 'a' + 10)
		case 'A' <= c && c <= 'F':
			d = uint32(c - 'A' + 10)
		default:
			return -1, NewParserError(b[i:i+1], "non-hex character")
		}
		r = r*16 + d
	}

	if r > unicode.MaxRune || 0xD800 <= r && r < 0xE000 {
		return -1, NewParserError(b, "escape sequence is invalid Unicode code point")
	}

	return rune(r), nil
}

func (p *Parser) parseWhitespace(b []byte) []byte {
	// ws = *wschar
	// wschar =  %x20  ; Space
	// wschar =/ %x09  ; Horizontal tab
	_, rest := scanWhitespace(b)

	return rest
}

//nolint:cyclop
func (p *Parser) parseIntOrFloatOrDateTime(b []byte) (reference, []byte, error) {
	switch b[0] {
	case 'i':
		if !scanFollowsInf(b) {
			return invalidReference, nil, NewParserError(atmost(b, 3), "expected 'inf'")
		}

		return p.builder.Push(Node{
			Kind: Float,
			Data: b[:3],
		}), b[3:], nil
	case 'n':
		if !scanFollowsNan(b) {
			return invalidReference, nil, NewParserError(atmost(b, 3), "expected 'nan'")
		}

		return p.builder.Push(Node{
			Kind: Float,
			Data: b[:3],
		}), b[3:], nil
	case '+', '-':
		return p.scanIntOrFloat(b)
	}

	if len(b) < 3 {
		return p.scanIntOrFloat(b)
	}

	s := 5
	if len(b) < s {
		s = len(b)
	}

	for idx, c := range b[:s] {
		if isDigit(c) {
			continue
		}

		if idx == 2 && c == ':' || (idx == 4 && c == '-') {
			return p.scanDateTime(b)
		}

		break
	}

	return p.scanIntOrFloat(b)
}

func (p *Parser) scanDateTime(b []byte) (reference, []byte, error) {
	// scans for contiguous characters in [0-9T:Z.+-], and up to one space if
	// followed by a digit.
	hasDate := false
	hasTime := false
	hasTz := false
	seenSpace := false

	i := 0
byteLoop:
	for ; i < len(b); i++ {
		c := b[i]

		switch {
		case isDigit(c):
		case c == '-':
			hasDate = true
			const minOffsetOfTz = 8
			if i >= minOffsetOfTz {
				hasTz = true
			}
		case c == 'T' || c == 't' || c == ':' || c == '.':
			hasTime = true
		case c == '+' || c == '-' || c == 'Z' || c == 'z':
			hasTz = true
		case c == ' ':
			if !seenSpace && i+1 < len(b) && isDigit(b[i+1]) {
				i += 2
				// Avoid reaching past the end of the document in case the time
				// is malformed. See TestIssue585.
				if i >= len(b) {
					i--
				}
				seenSpace = true
				hasTime = true
			} else {
				break byteLoop
			}
		default:
			break byteLoop
		}
	}

	var kind Kind

	if hasTime {
		if hasDate {
			if hasTz {
				kind = DateTime
			} else {
				kind = LocalDateTime
			}
		} else {
			kind = LocalTime
		}
	} else {
		kind = LocalDate
	}

	return p.builder.Push(Node{
		Kind: kind,
		Data: b[:i],
	}), b[i:], nil
}

//nolint:funlen,gocognit,cyclop
func (p *Parser) scanIntOrFloat(b []byte) (reference, []byte, error) {
	i := 0

	if len(b) > 2 && b[0] == '0' && b[1] != '.' && b[1] != 'e' && b[1] != 'E' {
		var isValidRune validRuneFn

		switch b[1] {
		case 'x':
			isValidRune = isValidHexRune
		case 'o':
			isValidRune = isValidOctalRune
		case 'b':
			isValidRune = isValidBinaryRune
		default:
			i++
		}

		if isValidRune != nil {
			i += 2
			for ; i < len(b); i++ {
				if !isValidRune(b[i]) {
					break
				}
			}
		}

		return p.builder.Push(Node{
			Kind: Integer,
			Data: b[:i],
		}), b[i:], nil
	}

	isFloat := false

	for ; i < len(b); i++ {
		c := b[i]

		if c >= '0' && c <= '9' || c == '+' || c == '-' || c == '_' {
			continue
		}

		if c == '.' || c == 'e' || c == 'E' {
			isFloat = true

			continue
		}

		if c == 'i' {
			if scanFollowsInf(b[i:]) {
				return p.builder.Push(Node{
					Kind: Float,
					Data: b[:i+3],
				}), b[i+3:], nil
			}

			return invalidReference, nil, NewParserError(b[i:i+1], "unexpected character 'i' while scanning for a number")
		}

		if c == 'n' {
			if scanFollowsNan(b[i:]) {
				return p.builder.Push(Node{
					Kind: Float,
					Data: b[:i+3],
				}), b[i+3:], nil
			}

			return invalidReference, nil, NewParserError(b[i:i+1], "unexpected character 'n' while scanning for a number")
		}

		break
	}

	if i == 0 {
		return invalidReference, b, NewParserError(b, "incomplete number")
	}

	kind := Integer

	if isFloat {
		kind = Float
	}

	return p.builder.Push(Node{
		Kind: kind,
		Data: b[:i],
	}), b[i:], nil
}

func isDigit(r byte) bool {
	return r >= '0' && r <= '9'
}

type validRuneFn func(r byte) bool

func isValidHexRune(r byte) bool {
	return r >= 'a' && r <= 'f' ||
		r >= 'A' && r <= 'F' ||
		r >= '0' && r <= '9' ||
		r == '_'
}

func isValidOctalRune(r byte) bool {
	return r >= '0' && r <= '7' || r == '_'
}

func isValidBinaryRune(r byte) bool {
	return r == '0' || r == '1' || r == '_'
}

func expect(x byte, b []byte) ([]byte, error) {
	if len(b) == 0 {
		return nil, NewParserError(b, "expected character %c but the document ended here", x)
	}

	if b[0] != x {
		return nil, NewParserError(b[0:1], "expected character %c", x)
	}

	return b[1:], nil
}
07070100000A28000081A4000000000000000000000001645E367C00001C06000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/pelletier/go-toml/v2/unstable/scanner.go    package unstable

import "github.com/pelletier/go-toml/v2/internal/characters"

func scanFollows(b []byte, pattern string) bool {
	n := len(pattern)

	return len(b) >= n && string(b[:n]) == pattern
}

func scanFollowsMultilineBasicStringDelimiter(b []byte) bool {
	return scanFollows(b, `"""`)
}

func scanFollowsMultilineLiteralStringDelimiter(b []byte) bool {
	return scanFollows(b, `'''`)
}

func scanFollowsTrue(b []byte) bool {
	return scanFollows(b, `true`)
}

func scanFollowsFalse(b []byte) bool {
	return scanFollows(b, `false`)
}

func scanFollowsInf(b []byte) bool {
	return scanFollows(b, `inf`)
}

func scanFollowsNan(b []byte) bool {
	return scanFollows(b, `nan`)
}

func scanUnquotedKey(b []byte) ([]byte, []byte) {
	// unquoted-key = 1*( ALPHA / DIGIT / %x2D / %x5F ) ; A-Z / a-z / 0-9 / - / _
	for i := 0; i < len(b); i++ {
		if !isUnquotedKeyChar(b[i]) {
			return b[:i], b[i:]
		}
	}

	return b, b[len(b):]
}

func isUnquotedKeyChar(r byte) bool {
	return (r >= 'A' && r <= 'Z') || (r >= 'a' && r <= 'z') || (r >= '0' && r <= '9') || r == '-' || r == '_'
}

func scanLiteralString(b []byte) ([]byte, []byte, error) {
	// literal-string = apostrophe *literal-char apostrophe
	// apostrophe = %x27 ; ' apostrophe
	// literal-char = %x09 / %x20-26 / %x28-7E / non-ascii
	for i := 1; i < len(b); {
		switch b[i] {
		case '\'':
			return b[:i+1], b[i+1:], nil
		case '\n', '\r':
			return nil, nil, NewParserError(b[i:i+1], "literal strings cannot have new lines")
		}
		size := characters.Utf8ValidNext(b[i:])
		if size == 0 {
			return nil, nil, NewParserError(b[i:i+1], "invalid character")
		}
		i += size
	}

	return nil, nil, NewParserError(b[len(b):], "unterminated literal string")
}

func scanMultilineLiteralString(b []byte) ([]byte, []byte, error) {
	// ml-literal-string = ml-literal-string-delim [ newline ] ml-literal-body
	// ml-literal-string-delim
	// ml-literal-string-delim = 3apostrophe
	// ml-literal-body = *mll-content *( mll-quotes 1*mll-content ) [ mll-quotes ]
	//
	// mll-content = mll-char / newline
	// mll-char = %x09 / %x20-26 / %x28-7E / non-ascii
	// mll-quotes = 1*2apostrophe
	for i := 3; i < len(b); {
		switch b[i] {
		case '\'':
			if scanFollowsMultilineLiteralStringDelimiter(b[i:]) {
				i += 3

				// At that point we found 3 apostrophe, and i is the
				// index of the byte after the third one. The scanner
				// needs to be eager, because there can be an extra 2
				// apostrophe that can be accepted at the end of the
				// string.

				if i >= len(b) || b[i] != '\'' {
					return b[:i], b[i:], nil
				}
				i++

				if i >= len(b) || b[i] != '\'' {
					return b[:i], b[i:], nil
				}
				i++

				if i < len(b) && b[i] == '\'' {
					return nil, nil, NewParserError(b[i-3:i+1], "''' not allowed in multiline literal string")
				}

				return b[:i], b[i:], nil
			}
		case '\r':
			if len(b) < i+2 {
				return nil, nil, NewParserError(b[len(b):], `need a \n after \r`)
			}
			if b[i+1] != '\n' {
				return nil, nil, NewParserError(b[i:i+2], `need a \n after \r`)
			}
			i += 2 // skip the \n
			continue
		}
		size := characters.Utf8ValidNext(b[i:])
		if size == 0 {
			return nil, nil, NewParserError(b[i:i+1], "invalid character")
		}
		i += size
	}

	return nil, nil, NewParserError(b[len(b):], `multiline literal string not terminated by '''`)
}

func scanWindowsNewline(b []byte) ([]byte, []byte, error) {
	const lenCRLF = 2
	if len(b) < lenCRLF {
		return nil, nil, NewParserError(b, "windows new line expected")
	}

	if b[1] != '\n' {
		return nil, nil, NewParserError(b, `windows new line should be \r\n`)
	}

	return b[:lenCRLF], b[lenCRLF:], nil
}

func scanWhitespace(b []byte) ([]byte, []byte) {
	for i := 0; i < len(b); i++ {
		switch b[i] {
		case ' ', '\t':
			continue
		default:
			return b[:i], b[i:]
		}
	}

	return b, b[len(b):]
}

//nolint:unparam
func scanComment(b []byte) ([]byte, []byte, error) {
	// comment-start-symbol = %x23 ; #
	// non-ascii = %x80-D7FF / %xE000-10FFFF
	// non-eol = %x09 / %x20-7F / non-ascii
	//
	// comment = comment-start-symbol *non-eol

	for i := 1; i < len(b); {
		if b[i] == '\n' {
			return b[:i], b[i:], nil
		}
		if b[i] == '\r' {
			if i+1 < len(b) && b[i+1] == '\n' {
				return b[:i+1], b[i+1:], nil
			}
			return nil, nil, NewParserError(b[i:i+1], "invalid character in comment")
		}
		size := characters.Utf8ValidNext(b[i:])
		if size == 0 {
			return nil, nil, NewParserError(b[i:i+1], "invalid character in comment")
		}

		i += size
	}

	return b, b[len(b):], nil
}

func scanBasicString(b []byte) ([]byte, bool, []byte, error) {
	// basic-string = quotation-mark *basic-char quotation-mark
	// quotation-mark = %x22            ; "
	// basic-char = basic-unescaped / escaped
	// basic-unescaped = wschar / %x21 / %x23-5B / %x5D-7E / non-ascii
	// escaped = escape escape-seq-char
	escaped := false
	i := 1

	for ; i < len(b); i++ {
		switch b[i] {
		case '"':
			return b[:i+1], escaped, b[i+1:], nil
		case '\n', '\r':
			return nil, escaped, nil, NewParserError(b[i:i+1], "basic strings cannot have new lines")
		case '\\':
			if len(b) < i+2 {
				return nil, escaped, nil, NewParserError(b[i:i+1], "need a character after \\")
			}
			escaped = true
			i++ // skip the next character
		}
	}

	return nil, escaped, nil, NewParserError(b[len(b):], `basic string not terminated by "`)
}

func scanMultilineBasicString(b []byte) ([]byte, bool, []byte, error) {
	// ml-basic-string = ml-basic-string-delim [ newline ] ml-basic-body
	// ml-basic-string-delim
	// ml-basic-string-delim = 3quotation-mark
	// ml-basic-body = *mlb-content *( mlb-quotes 1*mlb-content ) [ mlb-quotes ]
	//
	// mlb-content = mlb-char / newline / mlb-escaped-nl
	// mlb-char = mlb-unescaped / escaped
	// mlb-quotes = 1*2quotation-mark
	// mlb-unescaped = wschar / %x21 / %x23-5B / %x5D-7E / non-ascii
	// mlb-escaped-nl = escape ws newline *( wschar / newline )

	escaped := false
	i := 3

	for ; i < len(b); i++ {
		switch b[i] {
		case '"':
			if scanFollowsMultilineBasicStringDelimiter(b[i:]) {
				i += 3

				// At that point we found 3 apostrophe, and i is the
				// index of the byte after the third one. The scanner
				// needs to be eager, because there can be an extra 2
				// apostrophe that can be accepted at the end of the
				// string.

				if i >= len(b) || b[i] != '"' {
					return b[:i], escaped, b[i:], nil
				}
				i++

				if i >= len(b) || b[i] != '"' {
					return b[:i], escaped, b[i:], nil
				}
				i++

				if i < len(b) && b[i] == '"' {
					return nil, escaped, nil, NewParserError(b[i-3:i+1], `""" not allowed in multiline basic string`)
				}

				return b[:i], escaped, b[i:], nil
			}
		case '\\':
			if len(b) < i+2 {
				return nil, escaped, nil, NewParserError(b[len(b):], "need a character after \\")
			}
			escaped = true
			i++ // skip the next character
		case '\r':
			if len(b) < i+2 {
				return nil, escaped, nil, NewParserError(b[len(b):], `need a \n after \r`)
			}
			if b[i+1] != '\n' {
				return nil, escaped, nil, NewParserError(b[i:i+2], `need a \n after \r`)
			}
			i++ // skip the \n
		}
	}

	return nil, escaped, nil, NewParserError(b[len(b):], `multiline basic string not terminated by """`)
}
  07070100000A29000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/vendor/github.com/phayes  07070100000A2A000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/github.com/phayes/permbits 07070100000A2B000081A4000000000000000000000001645E367C00000153000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/phayes/permbits/.travis.yml language: go
go: 1.5
install:
    - go get -v golang.org/x/tools/cmd/cover
script:
    - go test -v ./... -covermode=count -coverprofile=profile.cov
after_success:
    - go get -v github.com/mattn/goveralls
    - export PATH=$PATH:$HOME/gopath/bin
    - goveralls -coverprofile=profile.cov -service=travis-ci
notifications:
  email: false
 07070100000A2C000081A4000000000000000000000001645E367C00000430000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/phayes/permbits/LICENSE MIT License

Copyright (c) 2016 Patrick D Hayes

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
07070100000A2D000081A4000000000000000000000001645E367C000007DE000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/phayes/permbits/README.md   [![GoDoc](https://godoc.org/github.com/phayes/permbits?status.svg)](https://godoc.org/github.com/phayes/permbits)
[![CircleCI](https://circleci.com/gh/phayes/permbits.svg?style=svg)](https://circleci.com/gh/phayes/permbits)
[![Maintainability](https://api.codeclimate.com/v1/badges/4066ed1d4e9e3c9fc1de/maintainability)](https://codeclimate.com/github/phayes/permbits/maintainability)
[![Test Coverage](https://api.codeclimate.com/v1/badges/4066ed1d4e9e3c9fc1de/test_coverage)](https://codeclimate.com/github/phayes/permbits/test_coverage)
[![patreon](https://img.shields.io/badge/patreon-donate-green.svg)](https://patreon.com/phayes)
[![flattr](https://img.shields.io/badge/flattr-donate-green.svg)](https://flattr.com/@phayes)

# PermBits

Easy file permissions for golang. Easily get and set file permission bits. 

This package makes it a breeze to check and modify file permission bits in Linux, Mac, and other Unix systems. 

## Example

```go
permissions, err := permbits.Stat("/path/to/my/file")
if err != nil {
	return err
}

// Check to make sure the group can write to the file
// If they can't write, update the permissions so they can
if !permissions.GroupWrite() {
	permissions.SetGroupWrite(true)
	err := permbits.Chmod("/path/to/my/file", permissions)
	if err != nil {
		return errors.New("error setting permission on file", err)
	}
}

// Also works well with os.File
fileInfo, err := file.Stat()
if err != nil {
	return err
}
fileMode := fileInfo.Mode()
permissions := permbits.FileMode(fileMode)

// Disable write access to the file for everyone but the user
permissions.SetGroupWrite(false)
permissions.SetOtherWrite(false)
permbits.UpdateFileMode(&fileMode, permissions)

// You can also work with octets directly
if permissions != 0777 {
	return fmt.Errorf("Permissions on file are incorrect. Should be 777, got %o", permissions)
}

```

 ## Contributors
 
 1. Patrick Hayes ([linkedin](https://www.linkedin.com/in/patrickdhayes/)) ([github](https://github.com/phayes)) - Available for hire.
  07070100000A2E000081A4000000000000000000000001645E367C000004B6000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/phayes/permbits/godoc.go    // Easy file permissions for golang. Easily get and set file permission bits.
//
// This package makes it a breeze to check and modify file permission bits in Linux, Mac, and other Unix systems.
//
//	permissions, err := permbits.Stat("/path/to/my/file")
//	if err != nil {
//		return err
//	}
//
//	// Check to make sure the group can write to the file
//	// If they can't write, update the permissions so they can
//	if !permissions.GroupWrite() {
//	permissions.SetGroupWrite(true)
//		err := permbits.Chmod("/path/to/my/file", permissions)
//		if err != nil {
//			return errors.New("error setting permission on file", err)
//		}
//	}
//	// Also works well with os.File
//	fileInfo, err := file.Stat()
//	if err != nil {
//		return err
//	}
//	fileMode := fileInfo.Mode()
//	permissions := permbits.FileMode(fileMode)
//
//	// Disable write access to the file for everyone but the user
//	permissions.SetGroupWrite(false)
//	permissions.SetOtherWrite(false)
//	permbits.UpdateFileMode(&fileMode, permissions)
//
//	// You can also work with octets directly
//	if permissions != 0777 {
//		return fmt.Errorf("Permissions on file are incorrect. Should be 777, got %o", permissions)
//	}
package permbits
  07070100000A2F000081A4000000000000000000000001645E367C0000117C000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/phayes/permbits/permbits.go package permbits

import (
	"os"
	"syscall"
)

type PermissionBits uint32

const (
	Setuid PermissionBits = 1 << (12 - 1 - iota)
	Setgid
	Sticky
	UserRead
	UserWrite
	UserExecute
	GroupRead
	GroupWrite
	GroupExecute
	OtherRead
	OtherWrite
	OtherExecute
)

// Given a filepath, get it's permission bits
func Stat(filepath string) (PermissionBits, error) {
	fi, err := os.Stat(filepath)
	if err != nil {
		return 0, err
	}
	return FileMode(fi.Mode()), nil
}

// Given a FileMode from the os package, get it's permission bits
func FileMode(fm os.FileMode) PermissionBits {
	perm := PermissionBits(fm.Perm())

	if fm&os.ModeSetuid != 0 {
		perm.SetSetuid(true)
	}
	if fm&os.ModeSetgid != 0 {
		perm.SetSetgid(true)
	}
	if fm&os.ModeSticky != 0 {
		perm.SetSticky(true)
	}
	return perm
}

// Given a filepath, set it's permission bits directly
func Chmod(filepath string, b PermissionBits) error {
	if e := syscall.Chmod(filepath, syscallMode(b)); e != nil {
		return &os.PathError{"chmod", filepath, e}
	}
	return nil
}

// Given an os.FileMode object, update it's permissions
func UpdateFileMode(fm *os.FileMode, b PermissionBits) {
	// Setuid, Setgid, and Sticky bits are not in the same position in the two bitmaks
	// So we need to set their values manually
	if b.Setuid() {
		*fm |= os.ModeSetuid
	} else {
		*fm &^= os.ModeSetuid
	}
	if b.Setgid() {
		*fm |= os.ModeSetgid
	} else {
		*fm &^= os.ModeSetgid
	}
	if b.Sticky() {
		*fm |= os.ModeSticky
	} else {
		*fm &^= os.ModeSticky
	}

	// unset bit-values that don't map to the same position in FileMode
	b.SetSetgid(false)
	b.SetSetuid(false)
	b.SetSticky(false)

	// Clear the permission bitss
	*fm &^= 0777

	// Set the permission bits
	*fm |= os.FileMode(b)
}

func (b PermissionBits) Setuid() bool {
	return b&Setuid != 0
}

func (b PermissionBits) Setgid() bool {
	return b&Setgid != 0
}

func (b PermissionBits) Sticky() bool {
	return b&Sticky != 0
}

func (b PermissionBits) UserRead() bool {
	return b&UserRead != 0
}

func (b PermissionBits) UserWrite() bool {
	return b&UserWrite != 0
}

func (b PermissionBits) UserExecute() bool {
	return b&UserExecute != 0
}

func (b PermissionBits) GroupRead() bool {
	return b&GroupRead != 0
}

func (b PermissionBits) GroupWrite() bool {
	return b&GroupWrite != 0
}

func (b PermissionBits) GroupExecute() bool {
	return b&GroupExecute != 0
}

func (b PermissionBits) OtherRead() bool {
	return b&OtherRead != 0
}

func (b PermissionBits) OtherWrite() bool {
	return b&OtherWrite != 0
}

func (b PermissionBits) OtherExecute() bool {
	return b&OtherExecute != 0
}

func (b *PermissionBits) SetSetuid(set bool) {
	if set {
		*b |= Setuid
	} else {
		*b &^= Setuid
	}
}

func (b *PermissionBits) SetSetgid(set bool) {
	if set {
		*b |= Setgid
	} else {
		*b &^= Setgid
	}
}

func (b *PermissionBits) SetSticky(set bool) {
	if set {
		*b |= Sticky
	} else {
		*b &^= Sticky
	}
}

func (b *PermissionBits) SetUserRead(set bool) {
	if set {
		*b |= UserRead
	} else {
		*b &^= UserRead
	}
}

func (b *PermissionBits) SetUserWrite(set bool) {
	if set {
		*b |= UserWrite
	} else {
		*b &^= UserWrite
	}
}

func (b *PermissionBits) SetUserExecute(set bool) {
	if set {
		*b |= UserExecute
	} else {
		*b &^= UserExecute
	}
}

func (b *PermissionBits) SetGroupRead(set bool) {
	if set {
		*b |= GroupRead
	} else {
		*b &^= GroupRead
	}
}

func (b *PermissionBits) SetGroupWrite(set bool) {
	if set {
		*b |= GroupWrite
	} else {
		*b &^= GroupWrite
	}
}

func (b *PermissionBits) SetGroupExecute(set bool) {
	if set {
		*b |= GroupExecute
	} else {
		*b &^= GroupExecute
	}
}

func (b *PermissionBits) SetOtherRead(set bool) {
	if set {
		*b |= OtherRead
	} else {
		*b &^= OtherRead
	}
}

func (b *PermissionBits) SetOtherWrite(set bool) {
	if set {
		*b |= OtherWrite
	} else {
		*b &^= OtherWrite
	}
}

func (b *PermissionBits) SetOtherExecute(set bool) {
	if set {
		*b |= OtherExecute
	} else {
		*b &^= OtherExecute
	}
}

func (b PermissionBits) String() string {
	var buf [32]byte // Mode is uint32.
	w := 0

	const rwx = "rwxrwxrwx"
	for i, c := range rwx {
		if b&(1<<uint(9-1-i)) != 0 {
			buf[w] = byte(c)
		} else {
			buf[w] = '-'
		}
		w++
	}
	return string(buf[:w])
}

// syscallMode returns the syscall-specific mode bits from PermissionBits bit positions
func syscallMode(p PermissionBits) (o uint32) {
	o |= uint32(p)

	if p.Setuid() {
		o |= syscall.S_ISUID
	}
	if p.Setgid() {
		o |= syscall.S_ISGID
	}
	if p.Sticky() {
		o |= syscall.S_ISVTX
	}
	return
}
07070100000A30000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002E00000000elemental-cli-0.3.1/vendor/github.com/pierrec 07070100000A31000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003200000000elemental-cli-0.3.1/vendor/github.com/pierrec/lz4 07070100000A32000081A4000000000000000000000001645E367C00000205000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/pierrec/lz4/.gitignore  # Created by https://www.gitignore.io/api/macos

### macOS ###
*.DS_Store
.AppleDouble
.LSOverride

# Icon must end with two \r
Icon


# Thumbnails
._*

# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent

# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk

# End of https://www.gitignore.io/api/macos

cmd/*/*exe
.idea   07070100000A33000081A4000000000000000000000001645E367C0000012E000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/pierrec/lz4/.travis.yml language: go

env:
  - GO111MODULE=off

go:
  - 1.9.x
  - 1.10.x
  - 1.11.x
  - 1.12.x
  - master

matrix:
 fast_finish: true
 allow_failures:
   - go: master

sudo: false

script: 
 - go test -v -cpu=2
 - go test -v -cpu=2 -race
 - go test -v -cpu=2 -tags noasm
 - go test -v -cpu=2 -race -tags noasm
  07070100000A34000081A4000000000000000000000001645E367C000005C5000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/pierrec/lz4/LICENSE Copyright (c) 2015, Pierre Curto
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
  list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice,
  this list of conditions and the following disclaimer in the documentation
  and/or other materials provided with the distribution.

* Neither the name of xxHash nor the names of its
  contributors may be used to endorse or promote products derived from
  this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

   07070100000A35000081A4000000000000000000000001645E367C000009A1000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/pierrec/lz4/README.md   # lz4 : LZ4 compression in pure Go

[![GoDoc](https://godoc.org/github.com/pierrec/lz4?status.svg)](https://godoc.org/github.com/pierrec/lz4)
[![Build Status](https://travis-ci.org/pierrec/lz4.svg?branch=master)](https://travis-ci.org/pierrec/lz4)
[![Go Report Card](https://goreportcard.com/badge/github.com/pierrec/lz4)](https://goreportcard.com/report/github.com/pierrec/lz4)
[![GitHub tag (latest SemVer)](https://img.shields.io/github/tag/pierrec/lz4.svg?style=social)](https://github.com/pierrec/lz4/tags)

## Overview

This package provides a streaming interface to [LZ4 data streams](http://fastcompression.blogspot.fr/2013/04/lz4-streaming-format-final.html) as well as low level compress and uncompress functions for LZ4 data blocks.
The implementation is based on the reference C [one](https://github.com/lz4/lz4).

## Install

Assuming you have the go toolchain installed:

```
go get github.com/pierrec/lz4
```

There is a command line interface tool to compress and decompress LZ4 files.

```
go install github.com/pierrec/lz4/cmd/lz4c
```

Usage

```
Usage of lz4c:
  -version
        print the program version

Subcommands:
Compress the given files or from stdin to stdout.
compress [arguments] [<file name> ...]
  -bc
        enable block checksum
  -l int
        compression level (0=fastest)
  -sc
        disable stream checksum
  -size string
        block max size [64K,256K,1M,4M] (default "4M")

Uncompress the given files or from stdin to stdout.
uncompress [arguments] [<file name> ...]

```


## Example

```
// Compress and uncompress an input string.
s := "hello world"
r := strings.NewReader(s)

// The pipe will uncompress the data from the writer.
pr, pw := io.Pipe()
zw := lz4.NewWriter(pw)
zr := lz4.NewReader(pr)

go func() {
	// Compress the input string.
	_, _ = io.Copy(zw, r)
	_ = zw.Close() // Make sure the writer is closed
	_ = pw.Close() // Terminate the pipe
}()

_, _ = io.Copy(os.Stdout, zr)

// Output:
// hello world
```

## Contributing

Contributions are very welcome for bug fixing, performance improvements...!

- Open an issue with a proper description
- Send a pull request with appropriate test case(s)

## Contributors

Thanks to all [contributors](https://github.com/pierrec/lz4/graphs/contributors)  so far!

Special thanks to [@Zariel](https://github.com/Zariel) for his asm implementation of the decoder.

Special thanks to [@klauspost](https://github.com/klauspost) for his work on optimizing the code.
   07070100000A36000081A4000000000000000000000001645E367C000029CC000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/pierrec/lz4/block.go    package lz4

import (
	"encoding/binary"
	"math/bits"
	"sync"
)

// blockHash hashes the lower 6 bytes into a value < htSize.
func blockHash(x uint64) uint32 {
	const prime6bytes = 227718039650203
	return uint32(((x << (64 - 48)) * prime6bytes) >> (64 - hashLog))
}

// CompressBlockBound returns the maximum size of a given buffer of size n, when not compressible.
func CompressBlockBound(n int) int {
	return n + n/255 + 16
}

// UncompressBlock uncompresses the source buffer into the destination one,
// and returns the uncompressed size.
//
// The destination buffer must be sized appropriately.
//
// An error is returned if the source data is invalid or the destination buffer is too small.
func UncompressBlock(src, dst []byte) (int, error) {
	if len(src) == 0 {
		return 0, nil
	}
	if di := decodeBlock(dst, src); di >= 0 {
		return di, nil
	}
	return 0, ErrInvalidSourceShortBuffer
}

// CompressBlock compresses the source buffer into the destination one.
// This is the fast version of LZ4 compression and also the default one.
//
// The argument hashTable is scratch space for a hash table used by the
// compressor. If provided, it should have length at least 1<<16. If it is
// shorter (or nil), CompressBlock allocates its own hash table.
//
// The size of the compressed data is returned.
//
// If the destination buffer size is lower than CompressBlockBound and
// the compressed size is 0 and no error, then the data is incompressible.
//
// An error is returned if the destination buffer is too small.
func CompressBlock(src, dst []byte, hashTable []int) (_ int, err error) {
	defer recoverBlock(&err)

	// Return 0, nil only if the destination buffer size is < CompressBlockBound.
	isNotCompressible := len(dst) < CompressBlockBound(len(src))

	// adaptSkipLog sets how quickly the compressor begins skipping blocks when data is incompressible.
	// This significantly speeds up incompressible data and usually has very small impact on compression.
	// bytes to skip =  1 + (bytes since last match >> adaptSkipLog)
	const adaptSkipLog = 7
	if len(hashTable) < htSize {
		htIface := htPool.Get()
		defer htPool.Put(htIface)
		hashTable = (*(htIface).(*[htSize]int))[:]
	}
	// Prove to the compiler the table has at least htSize elements.
	// The compiler can see that "uint32() >> hashShift" cannot be out of bounds.
	hashTable = hashTable[:htSize]

	// si: Current position of the search.
	// anchor: Position of the current literals.
	var si, di, anchor int
	sn := len(src) - mfLimit
	if sn <= 0 {
		goto lastLiterals
	}

	// Fast scan strategy: the hash table only stores the last 4 bytes sequences.
	for si < sn {
		// Hash the next 6 bytes (sequence)...
		match := binary.LittleEndian.Uint64(src[si:])
		h := blockHash(match)
		h2 := blockHash(match >> 8)

		// We check a match at s, s+1 and s+2 and pick the first one we get.
		// Checking 3 only requires us to load the source one.
		ref := hashTable[h]
		ref2 := hashTable[h2]
		hashTable[h] = si
		hashTable[h2] = si + 1
		offset := si - ref

		// If offset <= 0 we got an old entry in the hash table.
		if offset <= 0 || offset >= winSize || // Out of window.
			uint32(match) != binary.LittleEndian.Uint32(src[ref:]) { // Hash collision on different matches.
			// No match. Start calculating another hash.
			// The processor can usually do this out-of-order.
			h = blockHash(match >> 16)
			ref = hashTable[h]

			// Check the second match at si+1
			si += 1
			offset = si - ref2

			if offset <= 0 || offset >= winSize ||
				uint32(match>>8) != binary.LittleEndian.Uint32(src[ref2:]) {
				// No match. Check the third match at si+2
				si += 1
				offset = si - ref
				hashTable[h] = si

				if offset <= 0 || offset >= winSize ||
					uint32(match>>16) != binary.LittleEndian.Uint32(src[ref:]) {
					// Skip one extra byte (at si+3) before we check 3 matches again.
					si += 2 + (si-anchor)>>adaptSkipLog
					continue
				}
			}
		}

		// Match found.
		lLen := si - anchor // Literal length.
		// We already matched 4 bytes.
		mLen := 4

		// Extend backwards if we can, reducing literals.
		tOff := si - offset - 1
		for lLen > 0 && tOff >= 0 && src[si-1] == src[tOff] {
			si--
			tOff--
			lLen--
			mLen++
		}

		// Add the match length, so we continue search at the end.
		// Use mLen to store the offset base.
		si, mLen = si+mLen, si+minMatch

		// Find the longest match by looking by batches of 8 bytes.
		for si+8 < sn {
			x := binary.LittleEndian.Uint64(src[si:]) ^ binary.LittleEndian.Uint64(src[si-offset:])
			if x == 0 {
				si += 8
			} else {
				// Stop is first non-zero byte.
				si += bits.TrailingZeros64(x) >> 3
				break
			}
		}

		mLen = si - mLen
		if mLen < 0xF {
			dst[di] = byte(mLen)
		} else {
			dst[di] = 0xF
		}

		// Encode literals length.
		if lLen < 0xF {
			dst[di] |= byte(lLen << 4)
		} else {
			dst[di] |= 0xF0
			di++
			l := lLen - 0xF
			for ; l >= 0xFF; l -= 0xFF {
				dst[di] = 0xFF
				di++
			}
			dst[di] = byte(l)
		}
		di++

		// Literals.
		copy(dst[di:di+lLen], src[anchor:anchor+lLen])
		di += lLen + 2
		anchor = si

		// Encode offset.
		_ = dst[di] // Bound check elimination.
		dst[di-2], dst[di-1] = byte(offset), byte(offset>>8)

		// Encode match length part 2.
		if mLen >= 0xF {
			for mLen -= 0xF; mLen >= 0xFF; mLen -= 0xFF {
				dst[di] = 0xFF
				di++
			}
			dst[di] = byte(mLen)
			di++
		}
		// Check if we can load next values.
		if si >= sn {
			break
		}
		// Hash match end-2
		h = blockHash(binary.LittleEndian.Uint64(src[si-2:]))
		hashTable[h] = si - 2
	}

lastLiterals:
	if isNotCompressible && anchor == 0 {
		// Incompressible.
		return 0, nil
	}

	// Last literals.
	lLen := len(src) - anchor
	if lLen < 0xF {
		dst[di] = byte(lLen << 4)
	} else {
		dst[di] = 0xF0
		di++
		for lLen -= 0xF; lLen >= 0xFF; lLen -= 0xFF {
			dst[di] = 0xFF
			di++
		}
		dst[di] = byte(lLen)
	}
	di++

	// Write the last literals.
	if isNotCompressible && di >= anchor {
		// Incompressible.
		return 0, nil
	}
	di += copy(dst[di:di+len(src)-anchor], src[anchor:])
	return di, nil
}

// Pool of hash tables for CompressBlock.
var htPool = sync.Pool{
	New: func() interface{} {
		return new([htSize]int)
	},
}

// blockHash hashes 4 bytes into a value < winSize.
func blockHashHC(x uint32) uint32 {
	const hasher uint32 = 2654435761 // Knuth multiplicative hash.
	return x * hasher >> (32 - winSizeLog)
}

// CompressBlockHC compresses the source buffer src into the destination dst
// with max search depth (use 0 or negative value for no max).
//
// CompressBlockHC compression ratio is better than CompressBlock but it is also slower.
//
// The size of the compressed data is returned.
//
// If the destination buffer size is lower than CompressBlockBound and
// the compressed size is 0 and no error, then the data is incompressible.
//
// An error is returned if the destination buffer is too small.
func CompressBlockHC(src, dst []byte, depth int) (_ int, err error) {
	defer recoverBlock(&err)

	// Return 0, nil only if the destination buffer size is < CompressBlockBound.
	isNotCompressible := len(dst) < CompressBlockBound(len(src))

	// adaptSkipLog sets how quickly the compressor begins skipping blocks when data is incompressible.
	// This significantly speeds up incompressible data and usually has very small impact on compression.
	// bytes to skip =  1 + (bytes since last match >> adaptSkipLog)
	const adaptSkipLog = 7

	var si, di, anchor int

	// hashTable: stores the last position found for a given hash
	// chainTable: stores previous positions for a given hash
	var hashTable, chainTable [winSize]int

	if depth <= 0 {
		depth = winSize
	}

	sn := len(src) - mfLimit
	if sn <= 0 {
		goto lastLiterals
	}

	for si < sn {
		// Hash the next 4 bytes (sequence).
		match := binary.LittleEndian.Uint32(src[si:])
		h := blockHashHC(match)

		// Follow the chain until out of window and give the longest match.
		mLen := 0
		offset := 0
		for next, try := hashTable[h], depth; try > 0 && next > 0 && si-next < winSize; next = chainTable[next&winMask] {
			// The first (mLen==0) or next byte (mLen>=minMatch) at current match length
			// must match to improve on the match length.
			if src[next+mLen] != src[si+mLen] {
				continue
			}
			ml := 0
			// Compare the current position with a previous with the same hash.
			for ml < sn-si {
				x := binary.LittleEndian.Uint64(src[next+ml:]) ^ binary.LittleEndian.Uint64(src[si+ml:])
				if x == 0 {
					ml += 8
				} else {
					// Stop is first non-zero byte.
					ml += bits.TrailingZeros64(x) >> 3
					break
				}
			}
			if ml < minMatch || ml <= mLen {
				// Match too small (<minMath) or smaller than the current match.
				continue
			}
			// Found a longer match, keep its position and length.
			mLen = ml
			offset = si - next
			// Try another previous position with the same hash.
			try--
		}
		chainTable[si&winMask] = hashTable[h]
		hashTable[h] = si

		// No match found.
		if mLen == 0 {
			si += 1 + (si-anchor)>>adaptSkipLog
			continue
		}

		// Match found.
		// Update hash/chain tables with overlapping bytes:
		// si already hashed, add everything from si+1 up to the match length.
		winStart := si + 1
		if ws := si + mLen - winSize; ws > winStart {
			winStart = ws
		}
		for si, ml := winStart, si+mLen; si < ml; {
			match >>= 8
			match |= uint32(src[si+3]) << 24
			h := blockHashHC(match)
			chainTable[si&winMask] = hashTable[h]
			hashTable[h] = si
			si++
		}

		lLen := si - anchor
		si += mLen
		mLen -= minMatch // Match length does not include minMatch.

		if mLen < 0xF {
			dst[di] = byte(mLen)
		} else {
			dst[di] = 0xF
		}

		// Encode literals length.
		if lLen < 0xF {
			dst[di] |= byte(lLen << 4)
		} else {
			dst[di] |= 0xF0
			di++
			l := lLen - 0xF
			for ; l >= 0xFF; l -= 0xFF {
				dst[di] = 0xFF
				di++
			}
			dst[di] = byte(l)
		}
		di++

		// Literals.
		copy(dst[di:di+lLen], src[anchor:anchor+lLen])
		di += lLen
		anchor = si

		// Encode offset.
		di += 2
		dst[di-2], dst[di-1] = byte(offset), byte(offset>>8)

		// Encode match length part 2.
		if mLen >= 0xF {
			for mLen -= 0xF; mLen >= 0xFF; mLen -= 0xFF {
				dst[di] = 0xFF
				di++
			}
			dst[di] = byte(mLen)
			di++
		}
	}

	if isNotCompressible && anchor == 0 {
		// Incompressible.
		return 0, nil
	}

	// Last literals.
lastLiterals:
	lLen := len(src) - anchor
	if lLen < 0xF {
		dst[di] = byte(lLen << 4)
	} else {
		dst[di] = 0xF0
		di++
		lLen -= 0xF
		for ; lLen >= 0xFF; lLen -= 0xFF {
			dst[di] = 0xFF
			di++
		}
		dst[di] = byte(lLen)
	}
	di++

	// Write the last literals.
	if isNotCompressible && di >= anchor {
		// Incompressible.
		return 0, nil
	}
	di += copy(dst[di:di+len(src)-anchor], src[anchor:])
	return di, nil
}
07070100000A37000081A4000000000000000000000001645E367C0000015F000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/pierrec/lz4/debug.go    // +build lz4debug

package lz4

import (
	"fmt"
	"os"
	"path/filepath"
	"runtime"
)

const debugFlag = true

func debug(args ...interface{}) {
	_, file, line, _ := runtime.Caller(1)
	file = filepath.Base(file)

	f := fmt.Sprintf("LZ4: %s:%d %s", file, line, args[0])
	if f[len(f)-1] != '\n' {
		f += "\n"
	}
	fmt.Fprintf(os.Stderr, f, args[1:]...)
}
 07070100000A38000081A4000000000000000000000001645E367C0000005E000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/pierrec/lz4/debug_stub.go   // +build !lz4debug

package lz4

const debugFlag = false

func debug(args ...interface{}) {}
  07070100000A39000081A4000000000000000000000001645E367C00000075000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/pierrec/lz4/decode_amd64.go // +build !appengine
// +build gc
// +build !noasm

package lz4

//go:noescape
func decodeBlock(dst, src []byte) int
   07070100000A3A000081A4000000000000000000000001645E367C00001821000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/pierrec/lz4/decode_amd64.s  // +build !appengine
// +build gc
// +build !noasm

#include "textflag.h"

// AX scratch
// BX scratch
// CX scratch
// DX token
//
// DI &dst
// SI &src
// R8 &dst + len(dst)
// R9 &src + len(src)
// R11 &dst
// R12 short output end
// R13 short input end
// func decodeBlock(dst, src []byte) int
// using 50 bytes of stack currently
TEXT ·decodeBlock(SB), NOSPLIT, $64-56
	MOVQ dst_base+0(FP), DI
	MOVQ DI, R11
	MOVQ dst_len+8(FP), R8
	ADDQ DI, R8

	MOVQ src_base+24(FP), SI
	MOVQ src_len+32(FP), R9
	ADDQ SI, R9

	// shortcut ends
	// short output end
	MOVQ R8, R12
	SUBQ $32, R12
	// short input end
	MOVQ R9, R13
	SUBQ $16, R13

loop:
	// for si < len(src)
	CMPQ SI, R9
	JGE end

	// token := uint32(src[si])
	MOVBQZX (SI), DX
	INCQ SI

	// lit_len = token >> 4
	// if lit_len > 0
	// CX = lit_len
	MOVQ DX, CX
	SHRQ $4, CX

	// if lit_len != 0xF
	CMPQ CX, $0xF
	JEQ lit_len_loop_pre
	CMPQ DI, R12
	JGE lit_len_loop_pre
	CMPQ SI, R13
	JGE lit_len_loop_pre

	// copy shortcut

	// A two-stage shortcut for the most common case:
	// 1) If the literal length is 0..14, and there is enough space,
	// enter the shortcut and copy 16 bytes on behalf of the literals
	// (in the fast mode, only 8 bytes can be safely copied this way).
	// 2) Further if the match length is 4..18, copy 18 bytes in a similar
	// manner; but we ensure that there's enough space in the output for
	// those 18 bytes earlier, upon entering the shortcut (in other words,
	// there is a combined check for both stages).

	// copy literal
	MOVOU (SI), X0
	MOVOU X0, (DI)
	ADDQ CX, DI
	ADDQ CX, SI

	MOVQ DX, CX
	ANDQ $0xF, CX

	// The second stage: prepare for match copying, decode full info.
	// If it doesn't work out, the info won't be wasted.
	// offset := uint16(data[:2])
	MOVWQZX (SI), DX
	ADDQ $2, SI

	MOVQ DI, AX
	SUBQ DX, AX
	CMPQ AX, DI
	JGT err_short_buf

	// if we can't do the second stage then jump straight to read the
	// match length, we already have the offset.
	CMPQ CX, $0xF
	JEQ match_len_loop_pre
	CMPQ DX, $8
	JLT match_len_loop_pre
	CMPQ AX, R11
	JLT err_short_buf

	// memcpy(op + 0, match + 0, 8);
	MOVQ (AX), BX
	MOVQ BX, (DI)
	// memcpy(op + 8, match + 8, 8);
	MOVQ 8(AX), BX
	MOVQ BX, 8(DI)
	// memcpy(op +16, match +16, 2);
	MOVW 16(AX), BX
	MOVW BX, 16(DI)

	ADDQ $4, DI // minmatch
	ADDQ CX, DI

	// shortcut complete, load next token
	JMP loop

lit_len_loop_pre:
	// if lit_len > 0
	CMPQ CX, $0
	JEQ offset
	CMPQ CX, $0xF
	JNE copy_literal

lit_len_loop:
	// for src[si] == 0xFF
	CMPB (SI), $0xFF
	JNE lit_len_finalise

	// bounds check src[si+1]
	MOVQ SI, AX
	ADDQ $1, AX
	CMPQ AX, R9
	JGT err_short_buf

	// lit_len += 0xFF
	ADDQ $0xFF, CX
	INCQ SI
	JMP lit_len_loop

lit_len_finalise:
	// lit_len += int(src[si])
	// si++
	MOVBQZX (SI), AX
	ADDQ AX, CX
	INCQ SI

copy_literal:
	// bounds check src and dst
	MOVQ SI, AX
	ADDQ CX, AX
	CMPQ AX, R9
	JGT err_short_buf

	MOVQ DI, AX
	ADDQ CX, AX
	CMPQ AX, R8
	JGT err_short_buf

	// whats a good cut off to call memmove?
	CMPQ CX, $16
	JGT memmove_lit

	// if len(dst[di:]) < 16
	MOVQ R8, AX
	SUBQ DI, AX
	CMPQ AX, $16
	JLT memmove_lit

	// if len(src[si:]) < 16
	MOVQ R9, AX
	SUBQ SI, AX
	CMPQ AX, $16
	JLT memmove_lit

	MOVOU (SI), X0
	MOVOU X0, (DI)

	JMP finish_lit_copy

memmove_lit:
	// memmove(to, from, len)
	MOVQ DI, 0(SP)
	MOVQ SI, 8(SP)
	MOVQ CX, 16(SP)
	// spill
	MOVQ DI, 24(SP)
	MOVQ SI, 32(SP)
	MOVQ CX, 40(SP) // need len to inc SI, DI after
	MOVB DX, 48(SP)
	CALL runtime·memmove(SB)

	// restore registers
	MOVQ 24(SP), DI
	MOVQ 32(SP), SI
	MOVQ 40(SP), CX
	MOVB 48(SP), DX

	// recalc initial values
	MOVQ dst_base+0(FP), R8
	MOVQ R8, R11
	ADDQ dst_len+8(FP), R8
	MOVQ src_base+24(FP), R9
	ADDQ src_len+32(FP), R9
	MOVQ R8, R12
	SUBQ $32, R12
	MOVQ R9, R13
	SUBQ $16, R13

finish_lit_copy:
	ADDQ CX, SI
	ADDQ CX, DI

	CMPQ SI, R9
	JGE end

offset:
	// CX := mLen
	// free up DX to use for offset
	MOVQ DX, CX

	MOVQ SI, AX
	ADDQ $2, AX
	CMPQ AX, R9
	JGT err_short_buf

	// offset
	// DX := int(src[si]) | int(src[si+1])<<8
	MOVWQZX (SI), DX
	ADDQ $2, SI

	// 0 offset is invalid
	CMPQ DX, $0
	JEQ err_corrupt

	ANDB $0xF, CX

match_len_loop_pre:
	// if mlen != 0xF
	CMPB CX, $0xF
	JNE copy_match

match_len_loop:
	// for src[si] == 0xFF
	// lit_len += 0xFF
	CMPB (SI), $0xFF
	JNE match_len_finalise

	// bounds check src[si+1]
	MOVQ SI, AX
	ADDQ $1, AX
	CMPQ AX, R9
	JGT err_short_buf

	ADDQ $0xFF, CX
	INCQ SI
	JMP match_len_loop

match_len_finalise:
	// lit_len += int(src[si])
	// si++
	MOVBQZX (SI), AX
	ADDQ AX, CX
	INCQ SI

copy_match:
	// mLen += minMatch
	ADDQ $4, CX

	// check we have match_len bytes left in dst
	// di+match_len < len(dst)
	MOVQ DI, AX
	ADDQ CX, AX
	CMPQ AX, R8
	JGT err_short_buf

	// DX = offset
	// CX = match_len
	// BX = &dst + (di - offset)
	MOVQ DI, BX
	SUBQ DX, BX

	// check BX is within dst
	// if BX < &dst
	CMPQ BX, R11
	JLT err_short_buf

	// if offset + match_len < di
	MOVQ BX, AX
	ADDQ CX, AX
	CMPQ DI, AX
	JGT copy_interior_match

	// AX := len(dst[:di])
	// MOVQ DI, AX
	// SUBQ R11, AX

	// copy 16 bytes at a time
	// if di-offset < 16 copy 16-(di-offset) bytes to di
	// then do the remaining

copy_match_loop:
	// for match_len >= 0
	// dst[di] = dst[i]
	// di++
	// i++
	MOVB (BX), AX
	MOVB AX, (DI)
	INCQ DI
	INCQ BX
	DECQ CX

	CMPQ CX, $0
	JGT copy_match_loop

	JMP loop

copy_interior_match:
	CMPQ CX, $16
	JGT memmove_match

	// if len(dst[di:]) < 16
	MOVQ R8, AX
	SUBQ DI, AX
	CMPQ AX, $16
	JLT memmove_match

	MOVOU (BX), X0
	MOVOU X0, (DI)

	ADDQ CX, DI
	JMP loop

memmove_match:
	// memmove(to, from, len)
	MOVQ DI, 0(SP)
	MOVQ BX, 8(SP)
	MOVQ CX, 16(SP)
	// spill
	MOVQ DI, 24(SP)
	MOVQ SI, 32(SP)
	MOVQ CX, 40(SP) // need len to inc SI, DI after
	CALL runtime·memmove(SB)

	// restore registers
	MOVQ 24(SP), DI
	MOVQ 32(SP), SI
	MOVQ 40(SP), CX

	// recalc initial values
	MOVQ dst_base+0(FP), R8
	MOVQ R8, R11 // TODO: make these sensible numbers
	ADDQ dst_len+8(FP), R8
	MOVQ src_base+24(FP), R9
	ADDQ src_len+32(FP), R9
	MOVQ R8, R12
	SUBQ $32, R12
	MOVQ R9, R13
	SUBQ $16, R13

	ADDQ CX, DI
	JMP loop

err_corrupt:
	MOVQ $-1, ret+48(FP)
	RET

err_short_buf:
	MOVQ $-2, ret+48(FP)
	RET

end:
	SUBQ R11, DI
	MOVQ DI, ret+48(FP)
	RET
   07070100000A3B000081A4000000000000000000000001645E367C00000844000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/pierrec/lz4/decode_other.go // +build !amd64 appengine !gc noasm

package lz4

func decodeBlock(dst, src []byte) (ret int) {
	const hasError = -2
	defer func() {
		if recover() != nil {
			ret = hasError
		}
	}()

	var si, di int
	for {
		// Literals and match lengths (token).
		b := int(src[si])
		si++

		// Literals.
		if lLen := b >> 4; lLen > 0 {
			switch {
			case lLen < 0xF && si+16 < len(src):
				// Shortcut 1
				// if we have enough room in src and dst, and the literals length
				// is small enough (0..14) then copy all 16 bytes, even if not all
				// are part of the literals.
				copy(dst[di:], src[si:si+16])
				si += lLen
				di += lLen
				if mLen := b & 0xF; mLen < 0xF {
					// Shortcut 2
					// if the match length (4..18) fits within the literals, then copy
					// all 18 bytes, even if not all are part of the literals.
					mLen += 4
					if offset := int(src[si]) | int(src[si+1])<<8; mLen <= offset {
						i := di - offset
						end := i + 18
						if end > len(dst) {
							// The remaining buffer may not hold 18 bytes.
							// See https://github.com/pierrec/lz4/issues/51.
							end = len(dst)
						}
						copy(dst[di:], dst[i:end])
						si += 2
						di += mLen
						continue
					}
				}
			case lLen == 0xF:
				for src[si] == 0xFF {
					lLen += 0xFF
					si++
				}
				lLen += int(src[si])
				si++
				fallthrough
			default:
				copy(dst[di:di+lLen], src[si:si+lLen])
				si += lLen
				di += lLen
			}
		}
		if si >= len(src) {
			return di
		}

		offset := int(src[si]) | int(src[si+1])<<8
		if offset == 0 {
			return hasError
		}
		si += 2

		// Match.
		mLen := b & 0xF
		if mLen == 0xF {
			for src[si] == 0xFF {
				mLen += 0xFF
				si++
			}
			mLen += int(src[si])
			si++
		}
		mLen += minMatch

		// Copy the match.
		expanded := dst[di-offset:]
		if mLen > offset {
			// Efficiently copy the match dst[di-offset:di] into the dst slice.
			bytesToCopy := offset * (mLen / offset)
			for n := offset; n <= bytesToCopy+offset; n *= 2 {
				copy(expanded[n:], expanded[:n])
			}
			di += bytesToCopy
			mLen -= bytesToCopy
		}
		di += copy(dst[di:di+mLen], expanded[:mLen])
	}
}
07070100000A3C000081A4000000000000000000000001645E367C00000412000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/pierrec/lz4/errors.go   package lz4

import (
	"errors"
	"fmt"
	"os"
	rdebug "runtime/debug"
)

var (
	// ErrInvalidSourceShortBuffer is returned by UncompressBlock or CompressBLock when a compressed
	// block is corrupted or the destination buffer is not large enough for the uncompressed data.
	ErrInvalidSourceShortBuffer = errors.New("lz4: invalid source or destination buffer too short")
	// ErrInvalid is returned when reading an invalid LZ4 archive.
	ErrInvalid = errors.New("lz4: bad magic number")
	// ErrBlockDependency is returned when attempting to decompress an archive created with block dependency.
	ErrBlockDependency = errors.New("lz4: block dependency not supported")
	// ErrUnsupportedSeek is returned when attempting to Seek any way but forward from the current position.
	ErrUnsupportedSeek = errors.New("lz4: can only seek forward from io.SeekCurrent")
)

func recoverBlock(e *error) {
	if r := recover(); r != nil && *e == nil {
		if debugFlag {
			fmt.Fprintln(os.Stderr, r)
			rdebug.PrintStack()
		}
		*e = ErrInvalidSourceShortBuffer
	}
}
  07070100000A3D000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/pierrec/lz4/internal    07070100000A3E000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/pierrec/lz4/internal/xxh32  07070100000A3F000081A4000000000000000000000001645E367C00001388000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/pierrec/lz4/internal/xxh32/xxh32zero.go // Package xxh32 implements the very fast XXH hashing algorithm (32 bits version).
// (https://github.com/Cyan4973/XXH/)
package xxh32

import (
	"encoding/binary"
)

const (
	prime1 uint32 = 2654435761
	prime2 uint32 = 2246822519
	prime3 uint32 = 3266489917
	prime4 uint32 = 668265263
	prime5 uint32 = 374761393

	primeMask   = 0xFFFFFFFF
	prime1plus2 = uint32((uint64(prime1) + uint64(prime2)) & primeMask) // 606290984
	prime1minus = uint32((-int64(prime1)) & primeMask)                  // 1640531535
)

// XXHZero represents an xxhash32 object with seed 0.
type XXHZero struct {
	v1       uint32
	v2       uint32
	v3       uint32
	v4       uint32
	totalLen uint64
	buf      [16]byte
	bufused  int
}

// Sum appends the current hash to b and returns the resulting slice.
// It does not change the underlying hash state.
func (xxh XXHZero) Sum(b []byte) []byte {
	h32 := xxh.Sum32()
	return append(b, byte(h32), byte(h32>>8), byte(h32>>16), byte(h32>>24))
}

// Reset resets the Hash to its initial state.
func (xxh *XXHZero) Reset() {
	xxh.v1 = prime1plus2
	xxh.v2 = prime2
	xxh.v3 = 0
	xxh.v4 = prime1minus
	xxh.totalLen = 0
	xxh.bufused = 0
}

// Size returns the number of bytes returned by Sum().
func (xxh *XXHZero) Size() int {
	return 4
}

// BlockSize gives the minimum number of bytes accepted by Write().
func (xxh *XXHZero) BlockSize() int {
	return 1
}

// Write adds input bytes to the Hash.
// It never returns an error.
func (xxh *XXHZero) Write(input []byte) (int, error) {
	if xxh.totalLen == 0 {
		xxh.Reset()
	}
	n := len(input)
	m := xxh.bufused

	xxh.totalLen += uint64(n)

	r := len(xxh.buf) - m
	if n < r {
		copy(xxh.buf[m:], input)
		xxh.bufused += len(input)
		return n, nil
	}

	p := 0
	// Causes compiler to work directly from registers instead of stack:
	v1, v2, v3, v4 := xxh.v1, xxh.v2, xxh.v3, xxh.v4
	if m > 0 {
		// some data left from previous update
		copy(xxh.buf[xxh.bufused:], input[:r])
		xxh.bufused += len(input) - r

		// fast rotl(13)
		buf := xxh.buf[:16] // BCE hint.
		v1 = rol13(v1+binary.LittleEndian.Uint32(buf[:])*prime2) * prime1
		v2 = rol13(v2+binary.LittleEndian.Uint32(buf[4:])*prime2) * prime1
		v3 = rol13(v3+binary.LittleEndian.Uint32(buf[8:])*prime2) * prime1
		v4 = rol13(v4+binary.LittleEndian.Uint32(buf[12:])*prime2) * prime1
		p = r
		xxh.bufused = 0
	}

	for n := n - 16; p <= n; p += 16 {
		sub := input[p:][:16] //BCE hint for compiler
		v1 = rol13(v1+binary.LittleEndian.Uint32(sub[:])*prime2) * prime1
		v2 = rol13(v2+binary.LittleEndian.Uint32(sub[4:])*prime2) * prime1
		v3 = rol13(v3+binary.LittleEndian.Uint32(sub[8:])*prime2) * prime1
		v4 = rol13(v4+binary.LittleEndian.Uint32(sub[12:])*prime2) * prime1
	}
	xxh.v1, xxh.v2, xxh.v3, xxh.v4 = v1, v2, v3, v4

	copy(xxh.buf[xxh.bufused:], input[p:])
	xxh.bufused += len(input) - p

	return n, nil
}

// Sum32 returns the 32 bits Hash value.
func (xxh *XXHZero) Sum32() uint32 {
	h32 := uint32(xxh.totalLen)
	if h32 >= 16 {
		h32 += rol1(xxh.v1) + rol7(xxh.v2) + rol12(xxh.v3) + rol18(xxh.v4)
	} else {
		h32 += prime5
	}

	p := 0
	n := xxh.bufused
	buf := xxh.buf
	for n := n - 4; p <= n; p += 4 {
		h32 += binary.LittleEndian.Uint32(buf[p:p+4]) * prime3
		h32 = rol17(h32) * prime4
	}
	for ; p < n; p++ {
		h32 += uint32(buf[p]) * prime5
		h32 = rol11(h32) * prime1
	}

	h32 ^= h32 >> 15
	h32 *= prime2
	h32 ^= h32 >> 13
	h32 *= prime3
	h32 ^= h32 >> 16

	return h32
}

// ChecksumZero returns the 32bits Hash value.
func ChecksumZero(input []byte) uint32 {
	n := len(input)
	h32 := uint32(n)

	if n < 16 {
		h32 += prime5
	} else {
		v1 := prime1plus2
		v2 := prime2
		v3 := uint32(0)
		v4 := prime1minus
		p := 0
		for n := n - 16; p <= n; p += 16 {
			sub := input[p:][:16] //BCE hint for compiler
			v1 = rol13(v1+binary.LittleEndian.Uint32(sub[:])*prime2) * prime1
			v2 = rol13(v2+binary.LittleEndian.Uint32(sub[4:])*prime2) * prime1
			v3 = rol13(v3+binary.LittleEndian.Uint32(sub[8:])*prime2) * prime1
			v4 = rol13(v4+binary.LittleEndian.Uint32(sub[12:])*prime2) * prime1
		}
		input = input[p:]
		n -= p
		h32 += rol1(v1) + rol7(v2) + rol12(v3) + rol18(v4)
	}

	p := 0
	for n := n - 4; p <= n; p += 4 {
		h32 += binary.LittleEndian.Uint32(input[p:p+4]) * prime3
		h32 = rol17(h32) * prime4
	}
	for p < n {
		h32 += uint32(input[p]) * prime5
		h32 = rol11(h32) * prime1
		p++
	}

	h32 ^= h32 >> 15
	h32 *= prime2
	h32 ^= h32 >> 13
	h32 *= prime3
	h32 ^= h32 >> 16

	return h32
}

// Uint32Zero hashes x with seed 0.
func Uint32Zero(x uint32) uint32 {
	h := prime5 + 4 + x*prime3
	h = rol17(h) * prime4
	h ^= h >> 15
	h *= prime2
	h ^= h >> 13
	h *= prime3
	h ^= h >> 16
	return h
}

func rol1(u uint32) uint32 {
	return u<<1 | u>>31
}

func rol7(u uint32) uint32 {
	return u<<7 | u>>25
}

func rol11(u uint32) uint32 {
	return u<<11 | u>>21
}

func rol12(u uint32) uint32 {
	return u<<12 | u>>20
}

func rol13(u uint32) uint32 {
	return u<<13 | u>>19
}

func rol17(u uint32) uint32 {
	return u<<17 | u>>15
}

func rol18(u uint32) uint32 {
	return u<<18 | u>>14
}
07070100000A40000081A4000000000000000000000001645E367C00000FAF000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/pierrec/lz4/lz4.go  // Package lz4 implements reading and writing lz4 compressed data (a frame),
// as specified in http://fastcompression.blogspot.fr/2013/04/lz4-streaming-format-final.html.
//
// Although the block level compression and decompression functions are exposed and are fully compatible
// with the lz4 block format definition, they are low level and should not be used directly.
// For a complete description of an lz4 compressed block, see:
// http://fastcompression.blogspot.fr/2011/05/lz4-explained.html
//
// See https://github.com/Cyan4973/lz4 for the reference C implementation.
//
package lz4

import (
	"math/bits"
	"sync"
)

const (
	// Extension is the LZ4 frame file name extension
	Extension = ".lz4"
	// Version is the LZ4 frame format version
	Version = 1

	frameMagic       uint32 = 0x184D2204
	frameSkipMagic   uint32 = 0x184D2A50
	frameMagicLegacy uint32 = 0x184C2102

	// The following constants are used to setup the compression algorithm.
	minMatch            = 4  // the minimum size of the match sequence size (4 bytes)
	winSizeLog          = 16 // LZ4 64Kb window size limit
	winSize             = 1 << winSizeLog
	winMask             = winSize - 1 // 64Kb window of previous data for dependent blocks
	compressedBlockFlag = 1 << 31
	compressedBlockMask = compressedBlockFlag - 1

	// hashLog determines the size of the hash table used to quickly find a previous match position.
	// Its value influences the compression speed and memory usage, the lower the faster,
	// but at the expense of the compression ratio.
	// 16 seems to be the best compromise for fast compression.
	hashLog = 16
	htSize  = 1 << hashLog

	mfLimit = 10 + minMatch // The last match cannot start within the last 14 bytes.
)

// map the block max size id with its value in bytes: 64Kb, 256Kb, 1Mb and 4Mb.
const (
	blockSize64K = 1 << (16 + 2*iota)
	blockSize256K
	blockSize1M
	blockSize4M
)

var (
	// Keep a pool of buffers for each valid block sizes.
	bsMapValue = [...]*sync.Pool{
		newBufferPool(2 * blockSize64K),
		newBufferPool(2 * blockSize256K),
		newBufferPool(2 * blockSize1M),
		newBufferPool(2 * blockSize4M),
	}
)

// newBufferPool returns a pool for buffers of the given size.
func newBufferPool(size int) *sync.Pool {
	return &sync.Pool{
		New: func() interface{} {
			return make([]byte, size)
		},
	}
}

// getBuffer returns a buffer to its pool.
func getBuffer(size int) []byte {
	idx := blockSizeValueToIndex(size) - 4
	return bsMapValue[idx].Get().([]byte)
}

// putBuffer returns a buffer to its pool.
func putBuffer(size int, buf []byte) {
	if cap(buf) > 0 {
		idx := blockSizeValueToIndex(size) - 4
		bsMapValue[idx].Put(buf[:cap(buf)])
	}
}
func blockSizeIndexToValue(i byte) int {
	return 1 << (16 + 2*uint(i))
}
func isValidBlockSize(size int) bool {
	const blockSizeMask = blockSize64K | blockSize256K | blockSize1M | blockSize4M

	return size&blockSizeMask > 0 && bits.OnesCount(uint(size)) == 1
}
func blockSizeValueToIndex(size int) byte {
	return 4 + byte(bits.TrailingZeros(uint(size)>>16)/2)
}

// Header describes the various flags that can be set on a Writer or obtained from a Reader.
// The default values match those of the LZ4 frame format definition
// (http://fastcompression.blogspot.com/2013/04/lz4-streaming-format-final.html).
//
// NB. in a Reader, in case of concatenated frames, the Header values may change between Read() calls.
// It is the caller's responsibility to check them if necessary.
type Header struct {
	BlockChecksum    bool   // Compressed blocks checksum flag.
	NoChecksum       bool   // Frame checksum flag.
	BlockMaxSize     int    // Size of the uncompressed data block (one of [64KB, 256KB, 1MB, 4MB]). Default=4MB.
	Size             uint64 // Frame total size. It is _not_ computed by the Writer.
	CompressionLevel int    // Compression level (higher is better, use 0 for fastest compression).
	done             bool   // Header processed flag (Read or Write and checked).
}

// Reset reset internal status
func (h *Header) Reset() {
	h.done = false
}
 07070100000A41000081A4000000000000000000000001645E367C0000020E000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/pierrec/lz4/lz4_go1.10.go   //+build go1.10

package lz4

import (
	"fmt"
	"strings"
)

func (h Header) String() string {
	var s strings.Builder

	s.WriteString(fmt.Sprintf("%T{", h))
	if h.BlockChecksum {
		s.WriteString("BlockChecksum: true ")
	}
	if h.NoChecksum {
		s.WriteString("NoChecksum: true ")
	}
	if bs := h.BlockMaxSize; bs != 0 && bs != 4<<20 {
		s.WriteString(fmt.Sprintf("BlockMaxSize: %d ", bs))
	}
	if l := h.CompressionLevel; l != 0 {
		s.WriteString(fmt.Sprintf("CompressionLevel: %d ", l))
	}
	s.WriteByte('}')

	return s.String()
}
  07070100000A42000081A4000000000000000000000001645E367C0000020A000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/pierrec/lz4/lz4_notgo1.10.go    //+build !go1.10

package lz4

import (
	"bytes"
	"fmt"
)

func (h Header) String() string {
	var s bytes.Buffer

	s.WriteString(fmt.Sprintf("%T{", h))
	if h.BlockChecksum {
		s.WriteString("BlockChecksum: true ")
	}
	if h.NoChecksum {
		s.WriteString("NoChecksum: true ")
	}
	if bs := h.BlockMaxSize; bs != 0 && bs != 4<<20 {
		s.WriteString(fmt.Sprintf("BlockMaxSize: %d ", bs))
	}
	if l := h.CompressionLevel; l != 0 {
		s.WriteString(fmt.Sprintf("CompressionLevel: %d ", l))
	}
	s.WriteByte('}')

	return s.String()
}
  07070100000A43000081A4000000000000000000000001645E367C000020E6000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/pierrec/lz4/reader.go   package lz4

import (
	"encoding/binary"
	"fmt"
	"io"
	"io/ioutil"

	"github.com/pierrec/lz4/internal/xxh32"
)

// Reader implements the LZ4 frame decoder.
// The Header is set after the first call to Read().
// The Header may change between Read() calls in case of concatenated frames.
type Reader struct {
	Header
	// Handler called when a block has been successfully read.
	// It provides the number of bytes read.
	OnBlockDone func(size int)

	buf      [8]byte       // Scrap buffer.
	pos      int64         // Current position in src.
	src      io.Reader     // Source.
	zdata    []byte        // Compressed data.
	data     []byte        // Uncompressed data.
	idx      int           // Index of unread bytes into data.
	checksum xxh32.XXHZero // Frame hash.
	skip     int64         // Bytes to skip before next read.
	dpos     int64         // Position in dest
}

// NewReader returns a new LZ4 frame decoder.
// No access to the underlying io.Reader is performed.
func NewReader(src io.Reader) *Reader {
	r := &Reader{src: src}
	return r
}

// readHeader checks the frame magic number and parses the frame descriptoz.
// Skippable frames are supported even as a first frame although the LZ4
// specifications recommends skippable frames not to be used as first frames.
func (z *Reader) readHeader(first bool) error {
	defer z.checksum.Reset()

	buf := z.buf[:]
	for {
		magic, err := z.readUint32()
		if err != nil {
			z.pos += 4
			if !first && err == io.ErrUnexpectedEOF {
				return io.EOF
			}
			return err
		}
		if magic == frameMagic {
			break
		}
		if magic>>8 != frameSkipMagic>>8 {
			return ErrInvalid
		}
		skipSize, err := z.readUint32()
		if err != nil {
			return err
		}
		z.pos += 4
		m, err := io.CopyN(ioutil.Discard, z.src, int64(skipSize))
		if err != nil {
			return err
		}
		z.pos += m
	}

	// Header.
	if _, err := io.ReadFull(z.src, buf[:2]); err != nil {
		return err
	}
	z.pos += 8

	b := buf[0]
	if v := b >> 6; v != Version {
		return fmt.Errorf("lz4: invalid version: got %d; expected %d", v, Version)
	}
	if b>>5&1 == 0 {
		return ErrBlockDependency
	}
	z.BlockChecksum = b>>4&1 > 0
	frameSize := b>>3&1 > 0
	z.NoChecksum = b>>2&1 == 0

	bmsID := buf[1] >> 4 & 0x7
	if bmsID < 4 || bmsID > 7 {
		return fmt.Errorf("lz4: invalid block max size ID: %d", bmsID)
	}
	bSize := blockSizeIndexToValue(bmsID - 4)
	z.BlockMaxSize = bSize

	// Allocate the compressed/uncompressed buffers.
	// The compressed buffer cannot exceed the uncompressed one.
	if n := 2 * bSize; cap(z.zdata) < n {
		z.zdata = make([]byte, n, n)
	}
	if debugFlag {
		debug("header block max size id=%d size=%d", bmsID, bSize)
	}
	z.zdata = z.zdata[:bSize]
	z.data = z.zdata[:cap(z.zdata)][bSize:]
	z.idx = len(z.data)

	_, _ = z.checksum.Write(buf[0:2])

	if frameSize {
		buf := buf[:8]
		if _, err := io.ReadFull(z.src, buf); err != nil {
			return err
		}
		z.Size = binary.LittleEndian.Uint64(buf)
		z.pos += 8
		_, _ = z.checksum.Write(buf)
	}

	// Header checksum.
	if _, err := io.ReadFull(z.src, buf[:1]); err != nil {
		return err
	}
	z.pos++
	if h := byte(z.checksum.Sum32() >> 8 & 0xFF); h != buf[0] {
		return fmt.Errorf("lz4: invalid header checksum: got %x; expected %x", buf[0], h)
	}

	z.Header.done = true
	if debugFlag {
		debug("header read: %v", z.Header)
	}

	return nil
}

// Read decompresses data from the underlying source into the supplied buffer.
//
// Since there can be multiple streams concatenated, Header values may
// change between calls to Read(). If that is the case, no data is actually read from
// the underlying io.Reader, to allow for potential input buffer resizing.
func (z *Reader) Read(buf []byte) (int, error) {
	if debugFlag {
		debug("Read buf len=%d", len(buf))
	}
	if !z.Header.done {
		if err := z.readHeader(true); err != nil {
			return 0, err
		}
		if debugFlag {
			debug("header read OK compressed buffer %d / %d uncompressed buffer %d : %d index=%d",
				len(z.zdata), cap(z.zdata), len(z.data), cap(z.data), z.idx)
		}
	}

	if len(buf) == 0 {
		return 0, nil
	}

	if z.idx == len(z.data) {
		// No data ready for reading, process the next block.
		if debugFlag {
			debug("reading block from writer")
		}
		// Reset uncompressed buffer
		z.data = z.zdata[:cap(z.zdata)][len(z.zdata):]

		// Block length: 0 = end of frame, highest bit set: uncompressed.
		bLen, err := z.readUint32()
		if err != nil {
			return 0, err
		}
		z.pos += 4

		if bLen == 0 {
			// End of frame reached.
			if !z.NoChecksum {
				// Validate the frame checksum.
				checksum, err := z.readUint32()
				if err != nil {
					return 0, err
				}
				if debugFlag {
					debug("frame checksum got=%x / want=%x", z.checksum.Sum32(), checksum)
				}
				z.pos += 4
				if h := z.checksum.Sum32(); checksum != h {
					return 0, fmt.Errorf("lz4: invalid frame checksum: got %x; expected %x", h, checksum)
				}
			}

			// Get ready for the next concatenated frame and keep the position.
			pos := z.pos
			z.Reset(z.src)
			z.pos = pos

			// Since multiple frames can be concatenated, check for more.
			return 0, z.readHeader(false)
		}

		if debugFlag {
			debug("raw block size %d", bLen)
		}
		if bLen&compressedBlockFlag > 0 {
			// Uncompressed block.
			bLen &= compressedBlockMask
			if debugFlag {
				debug("uncompressed block size %d", bLen)
			}
			if int(bLen) > cap(z.data) {
				return 0, fmt.Errorf("lz4: invalid block size: %d", bLen)
			}
			z.data = z.data[:bLen]
			if _, err := io.ReadFull(z.src, z.data); err != nil {
				return 0, err
			}
			z.pos += int64(bLen)
			if z.OnBlockDone != nil {
				z.OnBlockDone(int(bLen))
			}

			if z.BlockChecksum {
				checksum, err := z.readUint32()
				if err != nil {
					return 0, err
				}
				z.pos += 4

				if h := xxh32.ChecksumZero(z.data); h != checksum {
					return 0, fmt.Errorf("lz4: invalid block checksum: got %x; expected %x", h, checksum)
				}
			}

		} else {
			// Compressed block.
			if debugFlag {
				debug("compressed block size %d", bLen)
			}
			if int(bLen) > cap(z.data) {
				return 0, fmt.Errorf("lz4: invalid block size: %d", bLen)
			}
			zdata := z.zdata[:bLen]
			if _, err := io.ReadFull(z.src, zdata); err != nil {
				return 0, err
			}
			z.pos += int64(bLen)

			if z.BlockChecksum {
				checksum, err := z.readUint32()
				if err != nil {
					return 0, err
				}
				z.pos += 4

				if h := xxh32.ChecksumZero(zdata); h != checksum {
					return 0, fmt.Errorf("lz4: invalid block checksum: got %x; expected %x", h, checksum)
				}
			}

			n, err := UncompressBlock(zdata, z.data)
			if err != nil {
				return 0, err
			}
			z.data = z.data[:n]
			if z.OnBlockDone != nil {
				z.OnBlockDone(n)
			}
		}

		if !z.NoChecksum {
			_, _ = z.checksum.Write(z.data)
			if debugFlag {
				debug("current frame checksum %x", z.checksum.Sum32())
			}
		}
		z.idx = 0
	}

	if z.skip > int64(len(z.data[z.idx:])) {
		z.skip -= int64(len(z.data[z.idx:]))
		z.dpos += int64(len(z.data[z.idx:]))
		z.idx = len(z.data)
		return 0, nil
	}

	z.idx += int(z.skip)
	z.dpos += z.skip
	z.skip = 0

	n := copy(buf, z.data[z.idx:])
	z.idx += n
	z.dpos += int64(n)
	if debugFlag {
		debug("copied %d bytes to input", n)
	}

	return n, nil
}

// Seek implements io.Seeker, but supports seeking forward from the current
// position only. Any other seek will return an error. Allows skipping output
// bytes which aren't needed, which in some scenarios is faster than reading
// and discarding them.
// Note this may cause future calls to Read() to read 0 bytes if all of the
// data they would have returned is skipped.
func (z *Reader) Seek(offset int64, whence int) (int64, error) {
	if offset < 0 || whence != io.SeekCurrent {
		return z.dpos + z.skip, ErrUnsupportedSeek
	}
	z.skip += offset
	return z.dpos + z.skip, nil
}

// Reset discards the Reader's state and makes it equivalent to the
// result of its original state from NewReader, but reading from r instead.
// This permits reusing a Reader rather than allocating a new one.
func (z *Reader) Reset(r io.Reader) {
	z.Header = Header{}
	z.pos = 0
	z.src = r
	z.zdata = z.zdata[:0]
	z.data = z.data[:0]
	z.idx = 0
	z.checksum.Reset()
}

// readUint32 reads an uint32 into the supplied buffer.
// The idea is to make use of the already allocated buffers avoiding additional allocations.
func (z *Reader) readUint32() (uint32, error) {
	buf := z.buf[:4]
	_, err := io.ReadFull(z.src, buf)
	x := binary.LittleEndian.Uint32(buf)
	return x, err
}
  07070100000A44000081A4000000000000000000000001645E367C000015CC000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/pierrec/lz4/reader_legacy.go    package lz4

import (
	"encoding/binary"
	"fmt"
	"io"
)

// ReaderLegacy implements the LZ4Demo frame decoder.
// The Header is set after the first call to Read().
type ReaderLegacy struct {
	Header
	// Handler called when a block has been successfully read.
	// It provides the number of bytes read.
	OnBlockDone func(size int)

	lastBlock bool
	buf       [8]byte   // Scrap buffer.
	pos       int64     // Current position in src.
	src       io.Reader // Source.
	zdata     []byte    // Compressed data.
	data      []byte    // Uncompressed data.
	idx       int       // Index of unread bytes into data.
	skip      int64     // Bytes to skip before next read.
	dpos      int64     // Position in dest
}

// NewReaderLegacy returns a new LZ4Demo frame decoder.
// No access to the underlying io.Reader is performed.
func NewReaderLegacy(src io.Reader) *ReaderLegacy {
	r := &ReaderLegacy{src: src}
	return r
}

// readHeader checks the frame magic number and parses the frame descriptoz.
// Skippable frames are supported even as a first frame although the LZ4
// specifications recommends skippable frames not to be used as first frames.
func (z *ReaderLegacy) readLegacyHeader() error {
	z.lastBlock = false
	magic, err := z.readUint32()
	if err != nil {
		z.pos += 4
		if err == io.ErrUnexpectedEOF {
			return io.EOF
		}
		return err
	}
	if magic != frameMagicLegacy {
		return ErrInvalid
	}
	z.pos += 4

	// Legacy has fixed 8MB blocksizes
	// https://github.com/lz4/lz4/blob/dev/doc/lz4_Frame_format.md#legacy-frame
	bSize := blockSize4M * 2

	// Allocate the compressed/uncompressed buffers.
	// The compressed buffer cannot exceed the uncompressed one.
	if n := 2 * bSize; cap(z.zdata) < n {
		z.zdata = make([]byte, n, n)
	}
	if debugFlag {
		debug("header block max size size=%d", bSize)
	}
	z.zdata = z.zdata[:bSize]
	z.data = z.zdata[:cap(z.zdata)][bSize:]
	z.idx = len(z.data)

	z.Header.done = true
	if debugFlag {
		debug("header read: %v", z.Header)
	}

	return nil
}

// Read decompresses data from the underlying source into the supplied buffer.
//
// Since there can be multiple streams concatenated, Header values may
// change between calls to Read(). If that is the case, no data is actually read from
// the underlying io.Reader, to allow for potential input buffer resizing.
func (z *ReaderLegacy) Read(buf []byte) (int, error) {
	if debugFlag {
		debug("Read buf len=%d", len(buf))
	}
	if !z.Header.done {
		if err := z.readLegacyHeader(); err != nil {
			return 0, err
		}
		if debugFlag {
			debug("header read OK compressed buffer %d / %d uncompressed buffer %d : %d index=%d",
				len(z.zdata), cap(z.zdata), len(z.data), cap(z.data), z.idx)
		}
	}

	if len(buf) == 0 {
		return 0, nil
	}

	if z.idx == len(z.data) {
		// No data ready for reading, process the next block.
		if debugFlag {
			debug("  reading block from writer %d %d", z.idx, blockSize4M*2)
		}

		// Reset uncompressed buffer
		z.data = z.zdata[:cap(z.zdata)][len(z.zdata):]

		bLen, err := z.readUint32()
		if err != nil {
			return 0, err
		}
		if debugFlag {
			debug("   bLen %d (0x%x) offset = %d (0x%x)", bLen, bLen, z.pos, z.pos)
		}
		z.pos += 4

		// Legacy blocks are always compressed, even when detrimental
		if debugFlag {
			debug("   compressed block size %d", bLen)
		}

		if int(bLen) > cap(z.data) {
			return 0, fmt.Errorf("lz4: invalid block size: %d", bLen)
		}
		zdata := z.zdata[:bLen]
		if _, err := io.ReadFull(z.src, zdata); err != nil {
			return 0, err
		}
		z.pos += int64(bLen)

		n, err := UncompressBlock(zdata, z.data)
		if err != nil {
			return 0, err
		}

		z.data = z.data[:n]
		if z.OnBlockDone != nil {
			z.OnBlockDone(n)
		}

		z.idx = 0

		// Legacy blocks are fixed to 8MB, if we read a decompressed block smaller than this
		// it means we've reached the end...
		if n < blockSize4M*2 {
			z.lastBlock = true
		}
	}

	if z.skip > int64(len(z.data[z.idx:])) {
		z.skip -= int64(len(z.data[z.idx:]))
		z.dpos += int64(len(z.data[z.idx:]))
		z.idx = len(z.data)
		return 0, nil
	}

	z.idx += int(z.skip)
	z.dpos += z.skip
	z.skip = 0

	n := copy(buf, z.data[z.idx:])
	z.idx += n
	z.dpos += int64(n)
	if debugFlag {
		debug("%v] copied %d bytes to input (%d:%d)", z.lastBlock, n, z.idx, len(z.data))
	}
	if z.lastBlock && len(z.data) == z.idx {
		return n, io.EOF
	}
	return n, nil
}

// Seek implements io.Seeker, but supports seeking forward from the current
// position only. Any other seek will return an error. Allows skipping output
// bytes which aren't needed, which in some scenarios is faster than reading
// and discarding them.
// Note this may cause future calls to Read() to read 0 bytes if all of the
// data they would have returned is skipped.
func (z *ReaderLegacy) Seek(offset int64, whence int) (int64, error) {
	if offset < 0 || whence != io.SeekCurrent {
		return z.dpos + z.skip, ErrUnsupportedSeek
	}
	z.skip += offset
	return z.dpos + z.skip, nil
}

// Reset discards the Reader's state and makes it equivalent to the
// result of its original state from NewReader, but reading from r instead.
// This permits reusing a Reader rather than allocating a new one.
func (z *ReaderLegacy) Reset(r io.Reader) {
	z.Header = Header{}
	z.pos = 0
	z.src = r
	z.zdata = z.zdata[:0]
	z.data = z.data[:0]
	z.idx = 0
}

// readUint32 reads an uint32 into the supplied buffer.
// The idea is to make use of the already allocated buffers avoiding additional allocations.
func (z *ReaderLegacy) readUint32() (uint32, error) {
	buf := z.buf[:4]
	_, err := io.ReadFull(z.src, buf)
	x := binary.LittleEndian.Uint32(buf)
	return x, err
}
07070100000A45000081A4000000000000000000000001645E367C00002AF5000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/pierrec/lz4/writer.go   package lz4

import (
	"encoding/binary"
	"fmt"
	"io"
	"runtime"

	"github.com/pierrec/lz4/internal/xxh32"
)

// zResult contains the results of compressing a block.
type zResult struct {
	size     uint32 // Block header
	data     []byte // Compressed data
	checksum uint32 // Data checksum
}

// Writer implements the LZ4 frame encoder.
type Writer struct {
	Header
	// Handler called when a block has been successfully written out.
	// It provides the number of bytes written.
	OnBlockDone func(size int)

	buf       [19]byte      // magic number(4) + header(flags(2)+[Size(8)+DictID(4)]+checksum(1)) does not exceed 19 bytes
	dst       io.Writer     // Destination.
	checksum  xxh32.XXHZero // Frame checksum.
	data      []byte        // Data to be compressed + buffer for compressed data.
	idx       int           // Index into data.
	hashtable [winSize]int  // Hash table used in CompressBlock().

	// For concurrency.
	c   chan chan zResult // Channel for block compression goroutines and writer goroutine.
	err error             // Any error encountered while writing to the underlying destination.
}

// NewWriter returns a new LZ4 frame encoder.
// No access to the underlying io.Writer is performed.
// The supplied Header is checked at the first Write.
// It is ok to change it before the first Write but then not until a Reset() is performed.
func NewWriter(dst io.Writer) *Writer {
	z := new(Writer)
	z.Reset(dst)
	return z
}

// WithConcurrency sets the number of concurrent go routines used for compression.
// A negative value sets the concurrency to GOMAXPROCS.
func (z *Writer) WithConcurrency(n int) *Writer {
	switch {
	case n == 0 || n == 1:
		z.c = nil
		return z
	case n < 0:
		n = runtime.GOMAXPROCS(0)
	}
	z.c = make(chan chan zResult, n)
	// Writer goroutine managing concurrent block compression goroutines.
	go func() {
		// Process next block compression item.
		for c := range z.c {
			// Read the next compressed block result.
			// Waiting here ensures that the blocks are output in the order they were sent.
			// The incoming channel is always closed as it indicates to the caller that
			// the block has been processed.
			res := <-c
			n := len(res.data)
			if n == 0 {
				// Notify the block compression routine that we are done with its result.
				// This is used when a sentinel block is sent to terminate the compression.
				close(c)
				return
			}
			// Write the block.
			if err := z.writeUint32(res.size); err != nil && z.err == nil {
				z.err = err
			}
			if _, err := z.dst.Write(res.data); err != nil && z.err == nil {
				z.err = err
			}
			if z.BlockChecksum {
				if err := z.writeUint32(res.checksum); err != nil && z.err == nil {
					z.err = err
				}
			}
			// It is now safe to release the buffer as no longer in use by any goroutine.
			putBuffer(cap(res.data), res.data)
			if h := z.OnBlockDone; h != nil {
				h(n)
			}
			close(c)
		}
	}()
	return z
}

// newBuffers instantiates new buffers which size matches the one in Header.
// The returned buffers are for decompression and compression respectively.
func (z *Writer) newBuffers() {
	bSize := z.Header.BlockMaxSize
	buf := getBuffer(bSize)
	z.data = buf[:bSize] // Uncompressed buffer is the first half.
}

// freeBuffers puts the writer's buffers back to the pool.
func (z *Writer) freeBuffers() {
	// Put the buffer back into the pool, if any.
	putBuffer(z.Header.BlockMaxSize, z.data)
	z.data = nil
}

// writeHeader builds and writes the header (magic+header) to the underlying io.Writer.
func (z *Writer) writeHeader() error {
	// Default to 4Mb if BlockMaxSize is not set.
	if z.Header.BlockMaxSize == 0 {
		z.Header.BlockMaxSize = blockSize4M
	}
	// The only option that needs to be validated.
	bSize := z.Header.BlockMaxSize
	if !isValidBlockSize(z.Header.BlockMaxSize) {
		return fmt.Errorf("lz4: invalid block max size: %d", bSize)
	}
	// Allocate the compressed/uncompressed buffers.
	// The compressed buffer cannot exceed the uncompressed one.
	z.newBuffers()
	z.idx = 0

	// Size is optional.
	buf := z.buf[:]

	// Set the fixed size data: magic number, block max size and flags.
	binary.LittleEndian.PutUint32(buf[0:], frameMagic)
	flg := byte(Version << 6)
	flg |= 1 << 5 // No block dependency.
	if z.Header.BlockChecksum {
		flg |= 1 << 4
	}
	if z.Header.Size > 0 {
		flg |= 1 << 3
	}
	if !z.Header.NoChecksum {
		flg |= 1 << 2
	}
	buf[4] = flg
	buf[5] = blockSizeValueToIndex(z.Header.BlockMaxSize) << 4

	// Current buffer size: magic(4) + flags(1) + block max size (1).
	n := 6
	// Optional items.
	if z.Header.Size > 0 {
		binary.LittleEndian.PutUint64(buf[n:], z.Header.Size)
		n += 8
	}

	// The header checksum includes the flags, block max size and optional Size.
	buf[n] = byte(xxh32.ChecksumZero(buf[4:n]) >> 8 & 0xFF)
	z.checksum.Reset()

	// Header ready, write it out.
	if _, err := z.dst.Write(buf[0 : n+1]); err != nil {
		return err
	}
	z.Header.done = true
	if debugFlag {
		debug("wrote header %v", z.Header)
	}

	return nil
}

// Write compresses data from the supplied buffer into the underlying io.Writer.
// Write does not return until the data has been written.
func (z *Writer) Write(buf []byte) (int, error) {
	if !z.Header.done {
		if err := z.writeHeader(); err != nil {
			return 0, err
		}
	}
	if debugFlag {
		debug("input buffer len=%d index=%d", len(buf), z.idx)
	}

	zn := len(z.data)
	var n int
	for len(buf) > 0 {
		if z.idx == 0 && len(buf) >= zn {
			// Avoid a copy as there is enough data for a block.
			if err := z.compressBlock(buf[:zn]); err != nil {
				return n, err
			}
			n += zn
			buf = buf[zn:]
			continue
		}
		// Accumulate the data to be compressed.
		m := copy(z.data[z.idx:], buf)
		n += m
		z.idx += m
		buf = buf[m:]
		if debugFlag {
			debug("%d bytes copied to buf, current index %d", n, z.idx)
		}

		if z.idx < len(z.data) {
			// Buffer not filled.
			if debugFlag {
				debug("need more data for compression")
			}
			return n, nil
		}

		// Buffer full.
		if err := z.compressBlock(z.data); err != nil {
			return n, err
		}
		z.idx = 0
	}

	return n, nil
}

// compressBlock compresses a block.
func (z *Writer) compressBlock(data []byte) error {
	if !z.NoChecksum {
		_, _ = z.checksum.Write(data)
	}

	if z.c != nil {
		c := make(chan zResult)
		z.c <- c // Send now to guarantee order

		// get a buffer from the pool and copy the data over
		block := getBuffer(z.Header.BlockMaxSize)[:len(data)]
		copy(block, data)

		go writerCompressBlock(c, z.Header, block)
		return nil
	}

	zdata := z.data[z.Header.BlockMaxSize:cap(z.data)]
	// The compressed block size cannot exceed the input's.
	var zn int

	if level := z.Header.CompressionLevel; level != 0 {
		zn, _ = CompressBlockHC(data, zdata, level)
	} else {
		zn, _ = CompressBlock(data, zdata, z.hashtable[:])
	}

	var bLen uint32
	if debugFlag {
		debug("block compression %d => %d", len(data), zn)
	}
	if zn > 0 && zn < len(data) {
		// Compressible and compressed size smaller than uncompressed: ok!
		bLen = uint32(zn)
		zdata = zdata[:zn]
	} else {
		// Uncompressed block.
		bLen = uint32(len(data)) | compressedBlockFlag
		zdata = data
	}
	if debugFlag {
		debug("block compression to be written len=%d data len=%d", bLen, len(zdata))
	}

	// Write the block.
	if err := z.writeUint32(bLen); err != nil {
		return err
	}
	written, err := z.dst.Write(zdata)
	if err != nil {
		return err
	}
	if h := z.OnBlockDone; h != nil {
		h(written)
	}

	if !z.BlockChecksum {
		if debugFlag {
			debug("current frame checksum %x", z.checksum.Sum32())
		}
		return nil
	}
	checksum := xxh32.ChecksumZero(zdata)
	if debugFlag {
		debug("block checksum %x", checksum)
		defer func() { debug("current frame checksum %x", z.checksum.Sum32()) }()
	}
	return z.writeUint32(checksum)
}

// Flush flushes any pending compressed data to the underlying writer.
// Flush does not return until the data has been written.
// If the underlying writer returns an error, Flush returns that error.
func (z *Writer) Flush() error {
	if debugFlag {
		debug("flush with index %d", z.idx)
	}
	if z.idx == 0 {
		return nil
	}

	data := getBuffer(z.Header.BlockMaxSize)[:len(z.data[:z.idx])]
	copy(data, z.data[:z.idx])

	z.idx = 0
	if z.c == nil {
		return z.compressBlock(data)
	}
	if !z.NoChecksum {
		_, _ = z.checksum.Write(data)
	}
	c := make(chan zResult)
	z.c <- c
	writerCompressBlock(c, z.Header, data)
	return nil
}

func (z *Writer) close() error {
	if z.c == nil {
		return nil
	}
	// Send a sentinel block (no data to compress) to terminate the writer main goroutine.
	c := make(chan zResult)
	z.c <- c
	c <- zResult{}
	// Wait for the main goroutine to complete.
	<-c
	// At this point the main goroutine has shut down or is about to return.
	z.c = nil
	return z.err
}

// Close closes the Writer, flushing any unwritten data to the underlying io.Writer, but does not close the underlying io.Writer.
func (z *Writer) Close() error {
	if !z.Header.done {
		if err := z.writeHeader(); err != nil {
			return err
		}
	}
	if err := z.Flush(); err != nil {
		return err
	}
	if err := z.close(); err != nil {
		return err
	}
	z.freeBuffers()

	if debugFlag {
		debug("writing last empty block")
	}
	if err := z.writeUint32(0); err != nil {
		return err
	}
	if z.NoChecksum {
		return nil
	}
	checksum := z.checksum.Sum32()
	if debugFlag {
		debug("stream checksum %x", checksum)
	}
	return z.writeUint32(checksum)
}

// Reset clears the state of the Writer z such that it is equivalent to its
// initial state from NewWriter, but instead writing to w.
// No access to the underlying io.Writer is performed.
func (z *Writer) Reset(w io.Writer) {
	n := cap(z.c)
	_ = z.close()
	z.freeBuffers()
	z.Header.Reset()
	z.dst = w
	z.checksum.Reset()
	z.idx = 0
	z.err = nil
	// reset hashtable to ensure deterministic output.
	for i := range z.hashtable {
		z.hashtable[i] = 0
	}
	z.WithConcurrency(n)
}

// writeUint32 writes a uint32 to the underlying writer.
func (z *Writer) writeUint32(x uint32) error {
	buf := z.buf[:4]
	binary.LittleEndian.PutUint32(buf, x)
	_, err := z.dst.Write(buf)
	return err
}

// writerCompressBlock compresses data into a pooled buffer and writes its result
// out to the input channel.
func writerCompressBlock(c chan zResult, header Header, data []byte) {
	zdata := getBuffer(header.BlockMaxSize)
	// The compressed block size cannot exceed the input's.
	var zn int
	if level := header.CompressionLevel; level != 0 {
		zn, _ = CompressBlockHC(data, zdata, level)
	} else {
		var hashTable [winSize]int
		zn, _ = CompressBlock(data, zdata, hashTable[:])
	}
	var res zResult
	if zn > 0 && zn < len(data) {
		res.size = uint32(zn)
		res.data = zdata[:zn]
		// release the uncompressed block since it is not used anymore
		putBuffer(header.BlockMaxSize, data)
	} else {
		res.size = uint32(len(data)) | compressedBlockFlag
		res.data = data
		// release the compressed block since it was not used
		putBuffer(header.BlockMaxSize, zdata)
	}
	if header.BlockChecksum {
		res.checksum = xxh32.ChecksumZero(res.data)
	}
	c <- res
}
   07070100000A46000081A4000000000000000000000001645E367C00001190000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/pierrec/lz4/writer_legacy.go    package lz4

import (
	"encoding/binary"
	"io"
)

// WriterLegacy implements the LZ4Demo frame decoder.
type WriterLegacy struct {
	Header
	// Handler called when a block has been successfully read.
	// It provides the number of bytes read.
	OnBlockDone func(size int)

	dst       io.Writer    // Destination.
	data      []byte       // Data to be compressed + buffer for compressed data.
	idx       int          // Index into data.
	hashtable [winSize]int // Hash table used in CompressBlock().
}

// NewWriterLegacy returns a new LZ4 encoder for the legacy frame format.
// No access to the underlying io.Writer is performed.
// The supplied Header is checked at the first Write.
// It is ok to change it before the first Write but then not until a Reset() is performed.
func NewWriterLegacy(dst io.Writer) *WriterLegacy {
	z := new(WriterLegacy)
	z.Reset(dst)
	return z
}

// Write compresses data from the supplied buffer into the underlying io.Writer.
// Write does not return until the data has been written.
func (z *WriterLegacy) Write(buf []byte) (int, error) {
	if !z.Header.done {
		if err := z.writeHeader(); err != nil {
			return 0, err
		}
	}
	if debugFlag {
		debug("input buffer len=%d index=%d", len(buf), z.idx)
	}

	zn := len(z.data)
	var n int
	for len(buf) > 0 {
		if z.idx == 0 && len(buf) >= zn {
			// Avoid a copy as there is enough data for a block.
			if err := z.compressBlock(buf[:zn]); err != nil {
				return n, err
			}
			n += zn
			buf = buf[zn:]
			continue
		}
		// Accumulate the data to be compressed.
		m := copy(z.data[z.idx:], buf)
		n += m
		z.idx += m
		buf = buf[m:]
		if debugFlag {
			debug("%d bytes copied to buf, current index %d", n, z.idx)
		}

		if z.idx < len(z.data) {
			// Buffer not filled.
			if debugFlag {
				debug("need more data for compression")
			}
			return n, nil
		}

		// Buffer full.
		if err := z.compressBlock(z.data); err != nil {
			return n, err
		}
		z.idx = 0
	}

	return n, nil
}

// writeHeader builds and writes the header to the underlying io.Writer.
func (z *WriterLegacy) writeHeader() error {
	// Legacy has fixed 8MB blocksizes
	// https://github.com/lz4/lz4/blob/dev/doc/lz4_Frame_format.md#legacy-frame
	bSize := 2 * blockSize4M

	buf := make([]byte, 2*bSize, 2*bSize)
	z.data = buf[:bSize] // Uncompressed buffer is the first half.

	z.idx = 0

	// Header consists of one mageic number, write it out.
	if err := binary.Write(z.dst, binary.LittleEndian, frameMagicLegacy); err != nil {
		return err
	}
	z.Header.done = true
	if debugFlag {
		debug("wrote header %v", z.Header)
	}

	return nil
}

// compressBlock compresses a block.
func (z *WriterLegacy) compressBlock(data []byte) error {
	bSize := 2 * blockSize4M
	zdata := z.data[bSize:cap(z.data)]
	// The compressed block size cannot exceed the input's.
	var zn int

	if level := z.Header.CompressionLevel; level != 0 {
		zn, _ = CompressBlockHC(data, zdata, level)
	} else {
		zn, _ = CompressBlock(data, zdata, z.hashtable[:])
	}

	if debugFlag {
		debug("block compression %d => %d", len(data), zn)
	}
	zdata = zdata[:zn]

	// Write the block.
	if err := binary.Write(z.dst, binary.LittleEndian, uint32(zn)); err != nil {
		return err
	}
	written, err := z.dst.Write(zdata)
	if err != nil {
		return err
	}
	if h := z.OnBlockDone; h != nil {
		h(written)
	}
	return nil
}

// Flush flushes any pending compressed data to the underlying writer.
// Flush does not return until the data has been written.
// If the underlying writer returns an error, Flush returns that error.
func (z *WriterLegacy) Flush() error {
	if debugFlag {
		debug("flush with index %d", z.idx)
	}
	if z.idx == 0 {
		return nil
	}

	data := z.data[:z.idx]
	z.idx = 0
	return z.compressBlock(data)
}

// Close closes the WriterLegacy, flushing any unwritten data to the underlying io.Writer, but does not close the underlying io.Writer.
func (z *WriterLegacy) Close() error {
	if !z.Header.done {
		if err := z.writeHeader(); err != nil {
			return err
		}
	}
	if err := z.Flush(); err != nil {
		return err
	}

	if debugFlag {
		debug("writing last empty block")
	}

	return nil
}

// Reset clears the state of the WriterLegacy z such that it is equivalent to its
// initial state from NewWriterLegacy, but instead writing to w.
// No access to the underlying io.Writer is performed.
func (z *WriterLegacy) Reset(w io.Writer) {
	z.Header.Reset()
	z.dst = w
	z.idx = 0
	// reset hashtable to ensure deterministic output.
	for i := range z.hashtable {
		z.hashtable[i] = 0
	}
}
07070100000A47000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000002A00000000elemental-cli-0.3.1/vendor/github.com/pkg 07070100000A48000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003100000000elemental-cli-0.3.1/vendor/github.com/pkg/errors  07070100000A49000081A4000000000000000000000001645E367C0000010A000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/pkg/errors/.gitignore   # Compiled Object files, Static and Dynamic libs (Shared Objects)
*.o
*.a
*.so

# Folders
_obj
_test

# Architecture specific extensions/prefixes
*.[568vq]
[568vq].out

*.cgo1.go
*.cgo2.c
_cgo_defun.c
_cgo_gotypes.go
_cgo_export.*

_testmain.go

*.exe
*.test
*.prof
  07070100000A4A000081A4000000000000000000000001645E367C00000078000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/pkg/errors/.travis.yml  language: go
go_import_path: github.com/pkg/errors
go:
  - 1.11.x
  - 1.12.x
  - 1.13.x
  - tip

script:
  - make check
07070100000A4B000081A4000000000000000000000001645E367C00000520000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/pkg/errors/LICENSE  Copyright (c) 2015, Dave Cheney <dave@cheney.net>
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
  list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice,
  this list of conditions and the following disclaimer in the documentation
  and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
07070100000A4C000081A4000000000000000000000001645E367C00000367000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/pkg/errors/Makefile PKGS := github.com/pkg/errors
SRCDIRS := $(shell go list -f '{{.Dir}}' $(PKGS))
GO := go

check: test vet gofmt misspell unconvert staticcheck ineffassign unparam

test: 
	$(GO) test $(PKGS)

vet: | test
	$(GO) vet $(PKGS)

staticcheck:
	$(GO) get honnef.co/go/tools/cmd/staticcheck
	staticcheck -checks all $(PKGS)

misspell:
	$(GO) get github.com/client9/misspell/cmd/misspell
	misspell \
		-locale GB \
		-error \
		*.md *.go

unconvert:
	$(GO) get github.com/mdempsky/unconvert
	unconvert -v $(PKGS)

ineffassign:
	$(GO) get github.com/gordonklaus/ineffassign
	find $(SRCDIRS) -name '*.go' | xargs ineffassign

pedantic: check errcheck

unparam:
	$(GO) get mvdan.cc/unparam
	unparam ./...

errcheck:
	$(GO) get github.com/kisielk/errcheck
	errcheck $(PKGS)

gofmt:  
	@echo Checking code is gofmted
	@test -z "$(shell gofmt -s -l -d -e $(SRCDIRS) | tee /dev/stderr)"
 07070100000A4D000081A4000000000000000000000001645E367C00000A9D000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/pkg/errors/README.md    # errors [![Travis-CI](https://travis-ci.org/pkg/errors.svg)](https://travis-ci.org/pkg/errors) [![AppVeyor](https://ci.appveyor.com/api/projects/status/b98mptawhudj53ep/branch/master?svg=true)](https://ci.appveyor.com/project/davecheney/errors/branch/master) [![GoDoc](https://godoc.org/github.com/pkg/errors?status.svg)](http://godoc.org/github.com/pkg/errors) [![Report card](https://goreportcard.com/badge/github.com/pkg/errors)](https://goreportcard.com/report/github.com/pkg/errors) [![Sourcegraph](https://sourcegraph.com/github.com/pkg/errors/-/badge.svg)](https://sourcegraph.com/github.com/pkg/errors?badge)

Package errors provides simple error handling primitives.

`go get github.com/pkg/errors`

The traditional error handling idiom in Go is roughly akin to
```go
if err != nil {
        return err
}
```
which applied recursively up the call stack results in error reports without context or debugging information. The errors package allows programmers to add context to the failure path in their code in a way that does not destroy the original value of the error.

## Adding context to an error

The errors.Wrap function returns a new error that adds context to the original error. For example
```go
_, err := ioutil.ReadAll(r)
if err != nil {
        return errors.Wrap(err, "read failed")
}
```
## Retrieving the cause of an error

Using `errors.Wrap` constructs a stack of errors, adding context to the preceding error. Depending on the nature of the error it may be necessary to reverse the operation of errors.Wrap to retrieve the original error for inspection. Any error value which implements this interface can be inspected by `errors.Cause`.
```go
type causer interface {
        Cause() error
}
```
`errors.Cause` will recursively retrieve the topmost error which does not implement `causer`, which is assumed to be the original cause. For example:
```go
switch err := errors.Cause(err).(type) {
case *MyError:
        // handle specifically
default:
        // unknown error
}
```

[Read the package documentation for more information](https://godoc.org/github.com/pkg/errors).

## Roadmap

With the upcoming [Go2 error proposals](https://go.googlesource.com/proposal/+/master/design/go2draft.md) this package is moving into maintenance mode. The roadmap for a 1.0 release is as follows:

- 0.9. Remove pre Go 1.9 and Go 1.10 support, address outstanding pull requests (if possible)
- 1.0. Final release.

## Contributing

Because of the Go2 errors changes, this package is not accepting proposals for new functionality. With that said, we welcome pull requests, bug fixes and issue reports. 

Before sending a PR, please discuss your change by raising an issue.

## License

BSD-2-Clause
   07070100000A4E000081A4000000000000000000000001645E367C0000027F000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/pkg/errors/appveyor.yml version: build-{build}.{branch}

clone_folder: C:\gopath\src\github.com\pkg\errors
shallow_clone: true # for startup speed

environment:
  GOPATH: C:\gopath

platform:
  - x64

# http://www.appveyor.com/docs/installed-software
install:
  # some helpful output for debugging builds
  - go version
  - go env
  # pre-installed MinGW at C:\MinGW is 32bit only
  # but MSYS2 at C:\msys64 has mingw64
  - set PATH=C:\msys64\mingw64\bin;%PATH%
  - gcc --version
  - g++ --version

build_script:
  - go install -v ./...

test_script:
  - set PATH=C:\gopath\bin;%PATH%
  - go test -v ./...

#artifacts:
#  - path: '%GOPATH%\bin\*.exe'
deploy: off
 07070100000A4F000081A4000000000000000000000001645E367C00001D0F000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/pkg/errors/errors.go    // Package errors provides simple error handling primitives.
//
// The traditional error handling idiom in Go is roughly akin to
//
//     if err != nil {
//             return err
//     }
//
// which when applied recursively up the call stack results in error reports
// without context or debugging information. The errors package allows
// programmers to add context to the failure path in their code in a way
// that does not destroy the original value of the error.
//
// Adding context to an error
//
// The errors.Wrap function returns a new error that adds context to the
// original error by recording a stack trace at the point Wrap is called,
// together with the supplied message. For example
//
//     _, err := ioutil.ReadAll(r)
//     if err != nil {
//             return errors.Wrap(err, "read failed")
//     }
//
// If additional control is required, the errors.WithStack and
// errors.WithMessage functions destructure errors.Wrap into its component
// operations: annotating an error with a stack trace and with a message,
// respectively.
//
// Retrieving the cause of an error
//
// Using errors.Wrap constructs a stack of errors, adding context to the
// preceding error. Depending on the nature of the error it may be necessary
// to reverse the operation of errors.Wrap to retrieve the original error
// for inspection. Any error value which implements this interface
//
//     type causer interface {
//             Cause() error
//     }
//
// can be inspected by errors.Cause. errors.Cause will recursively retrieve
// the topmost error that does not implement causer, which is assumed to be
// the original cause. For example:
//
//     switch err := errors.Cause(err).(type) {
//     case *MyError:
//             // handle specifically
//     default:
//             // unknown error
//     }
//
// Although the causer interface is not exported by this package, it is
// considered a part of its stable public interface.
//
// Formatted printing of errors
//
// All error values returned from this package implement fmt.Formatter and can
// be formatted by the fmt package. The following verbs are supported:
//
//     %s    print the error. If the error has a Cause it will be
//           printed recursively.
//     %v    see %s
//     %+v   extended format. Each Frame of the error's StackTrace will
//           be printed in detail.
//
// Retrieving the stack trace of an error or wrapper
//
// New, Errorf, Wrap, and Wrapf record a stack trace at the point they are
// invoked. This information can be retrieved with the following interface:
//
//     type stackTracer interface {
//             StackTrace() errors.StackTrace
//     }
//
// The returned errors.StackTrace type is defined as
//
//     type StackTrace []Frame
//
// The Frame type represents a call site in the stack trace. Frame supports
// the fmt.Formatter interface that can be used for printing information about
// the stack trace of this error. For example:
//
//     if err, ok := err.(stackTracer); ok {
//             for _, f := range err.StackTrace() {
//                     fmt.Printf("%+s:%d\n", f, f)
//             }
//     }
//
// Although the stackTracer interface is not exported by this package, it is
// considered a part of its stable public interface.
//
// See the documentation for Frame.Format for more details.
package errors

import (
	"fmt"
	"io"
)

// New returns an error with the supplied message.
// New also records the stack trace at the point it was called.
func New(message string) error {
	return &fundamental{
		msg:   message,
		stack: callers(),
	}
}

// Errorf formats according to a format specifier and returns the string
// as a value that satisfies error.
// Errorf also records the stack trace at the point it was called.
func Errorf(format string, args ...interface{}) error {
	return &fundamental{
		msg:   fmt.Sprintf(format, args...),
		stack: callers(),
	}
}

// fundamental is an error that has a message and a stack, but no caller.
type fundamental struct {
	msg string
	*stack
}

func (f *fundamental) Error() string { return f.msg }

func (f *fundamental) Format(s fmt.State, verb rune) {
	switch verb {
	case 'v':
		if s.Flag('+') {
			io.WriteString(s, f.msg)
			f.stack.Format(s, verb)
			return
		}
		fallthrough
	case 's':
		io.WriteString(s, f.msg)
	case 'q':
		fmt.Fprintf(s, "%q", f.msg)
	}
}

// WithStack annotates err with a stack trace at the point WithStack was called.
// If err is nil, WithStack returns nil.
func WithStack(err error) error {
	if err == nil {
		return nil
	}
	return &withStack{
		err,
		callers(),
	}
}

type withStack struct {
	error
	*stack
}

func (w *withStack) Cause() error { return w.error }

// Unwrap provides compatibility for Go 1.13 error chains.
func (w *withStack) Unwrap() error { return w.error }

func (w *withStack) Format(s fmt.State, verb rune) {
	switch verb {
	case 'v':
		if s.Flag('+') {
			fmt.Fprintf(s, "%+v", w.Cause())
			w.stack.Format(s, verb)
			return
		}
		fallthrough
	case 's':
		io.WriteString(s, w.Error())
	case 'q':
		fmt.Fprintf(s, "%q", w.Error())
	}
}

// Wrap returns an error annotating err with a stack trace
// at the point Wrap is called, and the supplied message.
// If err is nil, Wrap returns nil.
func Wrap(err error, message string) error {
	if err == nil {
		return nil
	}
	err = &withMessage{
		cause: err,
		msg:   message,
	}
	return &withStack{
		err,
		callers(),
	}
}

// Wrapf returns an error annotating err with a stack trace
// at the point Wrapf is called, and the format specifier.
// If err is nil, Wrapf returns nil.
func Wrapf(err error, format string, args ...interface{}) error {
	if err == nil {
		return nil
	}
	err = &withMessage{
		cause: err,
		msg:   fmt.Sprintf(format, args...),
	}
	return &withStack{
		err,
		callers(),
	}
}

// WithMessage annotates err with a new message.
// If err is nil, WithMessage returns nil.
func WithMessage(err error, message string) error {
	if err == nil {
		return nil
	}
	return &withMessage{
		cause: err,
		msg:   message,
	}
}

// WithMessagef annotates err with the format specifier.
// If err is nil, WithMessagef returns nil.
func WithMessagef(err error, format string, args ...interface{}) error {
	if err == nil {
		return nil
	}
	return &withMessage{
		cause: err,
		msg:   fmt.Sprintf(format, args...),
	}
}

type withMessage struct {
	cause error
	msg   string
}

func (w *withMessage) Error() string { return w.msg + ": " + w.cause.Error() }
func (w *withMessage) Cause() error  { return w.cause }

// Unwrap provides compatibility for Go 1.13 error chains.
func (w *withMessage) Unwrap() error { return w.cause }

func (w *withMessage) Format(s fmt.State, verb rune) {
	switch verb {
	case 'v':
		if s.Flag('+') {
			fmt.Fprintf(s, "%+v\n", w.Cause())
			io.WriteString(s, w.msg)
			return
		}
		fallthrough
	case 's', 'q':
		io.WriteString(s, w.Error())
	}
}

// Cause returns the underlying cause of the error, if possible.
// An error value has a cause if it implements the following
// interface:
//
//     type causer interface {
//            Cause() error
//     }
//
// If the error does not implement Cause, the original error will
// be returned. If the error is nil, nil will be returned without further
// investigation.
func Cause(err error) error {
	type causer interface {
		Cause() error
	}

	for err != nil {
		cause, ok := err.(causer)
		if !ok {
			break
		}
		err = cause.Cause()
	}
	return err
}
 07070100000A50000081A4000000000000000000000001645E367C000005AB000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/pkg/errors/go113.go // +build go1.13

package errors

import (
	stderrors "errors"
)

// Is reports whether any error in err's chain matches target.
//
// The chain consists of err itself followed by the sequence of errors obtained by
// repeatedly calling Unwrap.
//
// An error is considered to match a target if it is equal to that target or if
// it implements a method Is(error) bool such that Is(target) returns true.
func Is(err, target error) bool { return stderrors.Is(err, target) }

// As finds the first error in err's chain that matches target, and if so, sets
// target to that error value and returns true.
//
// The chain consists of err itself followed by the sequence of errors obtained by
// repeatedly calling Unwrap.
//
// An error matches target if the error's concrete value is assignable to the value
// pointed to by target, or if the error has a method As(interface{}) bool such that
// As(target) returns true. In the latter case, the As method is responsible for
// setting target.
//
// As will panic if target is not a non-nil pointer to either a type that implements
// error, or to any interface type. As returns false if err is nil.
func As(err error, target interface{}) bool { return stderrors.As(err, target) }

// Unwrap returns the result of calling the Unwrap method on err, if err's
// type contains an Unwrap method returning error.
// Otherwise, Unwrap returns nil.
func Unwrap(err error) error {
	return stderrors.Unwrap(err)
}
 07070100000A51000081A4000000000000000000000001645E367C0000107D000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/pkg/errors/stack.go package errors

import (
	"fmt"
	"io"
	"path"
	"runtime"
	"strconv"
	"strings"
)

// Frame represents a program counter inside a stack frame.
// For historical reasons if Frame is interpreted as a uintptr
// its value represents the program counter + 1.
type Frame uintptr

// pc returns the program counter for this frame;
// multiple frames may have the same PC value.
func (f Frame) pc() uintptr { return uintptr(f) - 1 }

// file returns the full path to the file that contains the
// function for this Frame's pc.
func (f Frame) file() string {
	fn := runtime.FuncForPC(f.pc())
	if fn == nil {
		return "unknown"
	}
	file, _ := fn.FileLine(f.pc())
	return file
}

// line returns the line number of source code of the
// function for this Frame's pc.
func (f Frame) line() int {
	fn := runtime.FuncForPC(f.pc())
	if fn == nil {
		return 0
	}
	_, line := fn.FileLine(f.pc())
	return line
}

// name returns the name of this function, if known.
func (f Frame) name() string {
	fn := runtime.FuncForPC(f.pc())
	if fn == nil {
		return "unknown"
	}
	return fn.Name()
}

// Format formats the frame according to the fmt.Formatter interface.
//
//    %s    source file
//    %d    source line
//    %n    function name
//    %v    equivalent to %s:%d
//
// Format accepts flags that alter the printing of some verbs, as follows:
//
//    %+s   function name and path of source file relative to the compile time
//          GOPATH separated by \n\t (<funcname>\n\t<path>)
//    %+v   equivalent to %+s:%d
func (f Frame) Format(s fmt.State, verb rune) {
	switch verb {
	case 's':
		switch {
		case s.Flag('+'):
			io.WriteString(s, f.name())
			io.WriteString(s, "\n\t")
			io.WriteString(s, f.file())
		default:
			io.WriteString(s, path.Base(f.file()))
		}
	case 'd':
		io.WriteString(s, strconv.Itoa(f.line()))
	case 'n':
		io.WriteString(s, funcname(f.name()))
	case 'v':
		f.Format(s, 's')
		io.WriteString(s, ":")
		f.Format(s, 'd')
	}
}

// MarshalText formats a stacktrace Frame as a text string. The output is the
// same as that of fmt.Sprintf("%+v", f), but without newlines or tabs.
func (f Frame) MarshalText() ([]byte, error) {
	name := f.name()
	if name == "unknown" {
		return []byte(name), nil
	}
	return []byte(fmt.Sprintf("%s %s:%d", name, f.file(), f.line())), nil
}

// StackTrace is stack of Frames from innermost (newest) to outermost (oldest).
type StackTrace []Frame

// Format formats the stack of Frames according to the fmt.Formatter interface.
//
//    %s	lists source files for each Frame in the stack
//    %v	lists the source file and line number for each Frame in the stack
//
// Format accepts flags that alter the printing of some verbs, as follows:
//
//    %+v   Prints filename, function, and line number for each Frame in the stack.
func (st StackTrace) Format(s fmt.State, verb rune) {
	switch verb {
	case 'v':
		switch {
		case s.Flag('+'):
			for _, f := range st {
				io.WriteString(s, "\n")
				f.Format(s, verb)
			}
		case s.Flag('#'):
			fmt.Fprintf(s, "%#v", []Frame(st))
		default:
			st.formatSlice(s, verb)
		}
	case 's':
		st.formatSlice(s, verb)
	}
}

// formatSlice will format this StackTrace into the given buffer as a slice of
// Frame, only valid when called with '%s' or '%v'.
func (st StackTrace) formatSlice(s fmt.State, verb rune) {
	io.WriteString(s, "[")
	for i, f := range st {
		if i > 0 {
			io.WriteString(s, " ")
		}
		f.Format(s, verb)
	}
	io.WriteString(s, "]")
}

// stack represents a stack of program counters.
type stack []uintptr

func (s *stack) Format(st fmt.State, verb rune) {
	switch verb {
	case 'v':
		switch {
		case st.Flag('+'):
			for _, pc := range *s {
				f := Frame(pc)
				fmt.Fprintf(st, "\n%+v", f)
			}
		}
	}
}

func (s *stack) StackTrace() StackTrace {
	f := make([]Frame, len(*s))
	for i := 0; i < len(f); i++ {
		f[i] = Frame((*s)[i])
	}
	return f
}

func callers() *stack {
	const depth = 32
	var pcs [depth]uintptr
	n := runtime.Callers(3, pcs[:])
	var st stack = pcs[0:n]
	return &st
}

// funcname removes the path prefix component of a function's name reported by func.Name().
func funcname(name string) string {
	i := strings.LastIndex(name, "/")
	name = name[i+1:]
	i = strings.Index(name, ".")
	return name[i+1:]
}
   07070100000A52000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003000000000elemental-cli-0.3.1/vendor/github.com/pkg/xattr   07070100000A53000081A4000000000000000000000001645E367C00000114000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/pkg/xattr/.gitignore    # Compiled Object files, Static and Dynamic libs (Shared Objects)
*.o
*.a
*.so

# Folders
_obj
_test
.DS_Store

# Architecture specific extensions/prefixes
*.[568vq]
[568vq].out

*.cgo1.go
*.cgo2.c
_cgo_defun.c
_cgo_gotypes.go
_cgo_export.*

_testmain.go

*.exe
*.test

*.swp
07070100000A54000081A4000000000000000000000001645E367C00000545000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/pkg/xattr/LICENSE   Copyright (c) 2012 Dave Cheney. All rights reserved.
Copyright (c) 2014 Kuba Podgórski. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   07070100000A55000081A4000000000000000000000001645E367C000007A3000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/pkg/xattr/README.md [![GoDoc](https://godoc.org/github.com/pkg/xattr?status.svg)](http://godoc.org/github.com/pkg/xattr)
[![Go Report Card](https://goreportcard.com/badge/github.com/pkg/xattr)](https://goreportcard.com/report/github.com/pkg/xattr)
[![Build Status](https://github.com/pkg/xattr/workflows/build/badge.svg)](https://github.com/pkg/xattr/actions?query=workflow%3Abuild)
[![Codecov](https://codecov.io/gh/pkg/xattr/branch/master/graph/badge.svg)](https://codecov.io/gh/pkg/xattr)

xattr
=====
Extended attribute support for Go (linux + darwin + freebsd + netbsd + solaris).

"Extended attributes are name:value pairs associated permanently with files and directories, similar to the environment strings associated with a process. An attribute may be defined or undefined. If it is defined, its value may be empty or non-empty." [See more...](https://en.wikipedia.org/wiki/Extended_file_attributes)

`SetWithFlags` allows to additionally pass system flags to be forwarded to the underlying calls. FreeBSD and NetBSD do not support this and the parameter will be ignored.

The `L` variants of all functions (`LGet/LSet/...`) are identical to `Get/Set/...` except that they
do not reference a symlink that appears at the end of a path. See
[GoDoc](http://godoc.org/github.com/pkg/xattr) for details.

### Example
```go
  const path = "/tmp/myfile"
  const prefix = "user."

  if err := xattr.Set(path, prefix+"test", []byte("test-attr-value")); err != nil {
  	log.Fatal(err)
  }

  var list []string
  if list, err = xattr.List(path); err != nil {
  	log.Fatal(err)
  }

  var data []byte
  if data, err = xattr.Get(path, prefix+"test"); err != nil {
  	log.Fatal(err)
  }

  if err = xattr.Remove(path, prefix+"test"); err != nil {
  	log.Fatal(err)
  }

  // One can also specify the flags parameter to be passed to the OS.
  if err := xattr.SetWithFlags(path, prefix+"test", []byte("test-attr-value"), xattr.XATTR_CREATE); err != nil {
  	log.Fatal(err)
  }
```
 07070100000A56000081A4000000000000000000000001645E367C00001E03000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/pkg/xattr/xattr.go  /*
Package xattr provides support for extended attributes on linux, darwin and freebsd.
Extended attributes are name:value pairs associated permanently with files and directories,
similar to the environment strings associated with a process.
An attribute may be defined or undefined. If it is defined, its value may be empty or non-empty.
More details you can find here: https://en.wikipedia.org/wiki/Extended_file_attributes .

All functions are provided in triples: Get/LGet/FGet, Set/LSet/FSet etc. The "L"
variant will not follow a symlink at the end of the path, and "F" variant accepts
a file descriptor instead of a path.

Example for "L" variant, assuming path is "/symlink1/symlink2", where both components are
symlinks:
Get will follow "symlink1" and "symlink2" and operate on the target of
"symlink2". LGet will follow "symlink1" but operate directly on "symlink2".
*/
package xattr

import (
	"os"
	"syscall"
)

// Error records an error and the operation, file path and attribute that caused it.
type Error struct {
	Op   string
	Path string
	Name string
	Err  error
}

func (e *Error) Unwrap() error { return e.Err }

func (e *Error) Error() (errstr string) {
	if e.Op != "" {
		errstr += e.Op
	}
	if e.Path != "" {
		if errstr != "" {
			errstr += " "
		}
		errstr += e.Path
	}
	if e.Name != "" {
		if errstr != "" {
			errstr += " "
		}
		errstr += e.Name
	}
	if e.Err != nil {
		if errstr != "" {
			errstr += ": "
		}
		errstr += e.Err.Error()
	}
	return
}

// Get retrieves extended attribute data associated with path. It will follow
// all symlinks along the path.
func Get(path, name string) ([]byte, error) {
	return get(path, name, func(name string, data []byte) (int, error) {
		return getxattr(path, name, data)
	})
}

// LGet is like Get but does not follow a symlink at the end of the path.
func LGet(path, name string) ([]byte, error) {
	return get(path, name, func(name string, data []byte) (int, error) {
		return lgetxattr(path, name, data)
	})
}

// FGet is like Get but accepts a os.File instead of a file path.
func FGet(f *os.File, name string) ([]byte, error) {
	return get(f.Name(), name, func(name string, data []byte) (int, error) {
		return fgetxattr(f, name, data)
	})
}

type getxattrFunc func(name string, data []byte) (int, error)

// get contains the buffer allocation logic used by both Get and LGet.
func get(path string, name string, getxattrFunc getxattrFunc) ([]byte, error) {
	const (
		// Start with a 1 KB buffer for the xattr value
		initialBufSize = 1024

		// The theoretical maximum xattr value size on MacOS is 64 MB. On Linux it's
		// much smaller at 64 KB. Unless the kernel is evil or buggy, we should never
		// hit the limit.
		maxBufSize = 64 * 1024 * 1024

		// Function name as reported in error messages
		myname = "xattr.get"
	)

	size := initialBufSize
	for {
		data := make([]byte, size)
		read, err := getxattrFunc(name, data)

		// If the buffer was too small to fit the value, Linux and MacOS react
		// differently:
		// Linux: returns an ERANGE error and "-1" bytes.
		// MacOS: truncates the value and returns "size" bytes. If the value
		//   happens to be exactly as big as the buffer, we cannot know if it was
		//   truncated, and we retry with a bigger buffer. Contrary to documentation,
		//   MacOS never seems to return ERANGE!
		// To keep the code simple, we always check both conditions, and sometimes
		// double the buffer size without it being strictly necessary.
		if err == syscall.ERANGE || read == size {
			// The buffer was too small. Try again.
			size <<= 1
			if size >= maxBufSize {
				return nil, &Error{myname, path, name, syscall.EOVERFLOW}
			}
			continue
		}
		if err != nil {
			return nil, &Error{myname, path, name, err}
		}
		return data[:read], nil
	}
}

// Set associates name and data together as an attribute of path.
func Set(path, name string, data []byte) error {
	if err := setxattr(path, name, data, 0); err != nil {
		return &Error{"xattr.Set", path, name, err}
	}
	return nil
}

// LSet is like Set but does not follow a symlink at
// the end of the path.
func LSet(path, name string, data []byte) error {
	if err := lsetxattr(path, name, data, 0); err != nil {
		return &Error{"xattr.LSet", path, name, err}
	}
	return nil
}

// FSet is like Set but accepts a os.File instead of a file path.
func FSet(f *os.File, name string, data []byte) error {
	if err := fsetxattr(f, name, data, 0); err != nil {
		return &Error{"xattr.FSet", f.Name(), name, err}
	}
	return nil
}

// SetWithFlags associates name and data together as an attribute of path.
// Forwards the flags parameter to the syscall layer.
func SetWithFlags(path, name string, data []byte, flags int) error {
	if err := setxattr(path, name, data, flags); err != nil {
		return &Error{"xattr.SetWithFlags", path, name, err}
	}
	return nil
}

// LSetWithFlags is like SetWithFlags but does not follow a symlink at
// the end of the path.
func LSetWithFlags(path, name string, data []byte, flags int) error {
	if err := lsetxattr(path, name, data, flags); err != nil {
		return &Error{"xattr.LSetWithFlags", path, name, err}
	}
	return nil
}

// FSetWithFlags is like SetWithFlags but accepts a os.File instead of a file path.
func FSetWithFlags(f *os.File, name string, data []byte, flags int) error {
	if err := fsetxattr(f, name, data, flags); err != nil {
		return &Error{"xattr.FSetWithFlags", f.Name(), name, err}
	}
	return nil
}

// Remove removes the attribute associated with the given path.
func Remove(path, name string) error {
	if err := removexattr(path, name); err != nil {
		return &Error{"xattr.Remove", path, name, err}
	}
	return nil
}

// LRemove is like Remove but does not follow a symlink at the end of the
// path.
func LRemove(path, name string) error {
	if err := lremovexattr(path, name); err != nil {
		return &Error{"xattr.LRemove", path, name, err}
	}
	return nil
}

// FRemove is like Remove but accepts a os.File instead of a file path.
func FRemove(f *os.File, name string) error {
	if err := fremovexattr(f, name); err != nil {
		return &Error{"xattr.FRemove", f.Name(), name, err}
	}
	return nil
}

// List retrieves a list of names of extended attributes associated
// with the given path in the file system.
func List(path string) ([]string, error) {
	return list(path, func(data []byte) (int, error) {
		return listxattr(path, data)
	})
}

// LList is like List but does not follow a symlink at the end of the
// path.
func LList(path string) ([]string, error) {
	return list(path, func(data []byte) (int, error) {
		return llistxattr(path, data)
	})
}

// FList is like List but accepts a os.File instead of a file path.
func FList(f *os.File) ([]string, error) {
	return list(f.Name(), func(data []byte) (int, error) {
		return flistxattr(f, data)
	})
}

type listxattrFunc func(data []byte) (int, error)

// list contains the buffer allocation logic used by both List and LList.
func list(path string, listxattrFunc listxattrFunc) ([]string, error) {
	myname := "xattr.list"
	// find size.
	size, err := listxattrFunc(nil)
	if err != nil {
		return nil, &Error{myname, path, "", err}
	}
	if size > 0 {
		// `size + 1` because of ERANGE error when reading
		// from a SMB1 mount point (https://github.com/pkg/xattr/issues/16).
		buf := make([]byte, size+1)
		// Read into buffer of that size.
		read, err := listxattrFunc(buf)
		if err != nil {
			return nil, &Error{myname, path, "", err}
		}
		return stringsFromByteSlice(buf[:read]), nil
	}
	return []string{}, nil
}

// bytePtrFromSlice returns a pointer to array of bytes and a size.
func bytePtrFromSlice(data []byte) (ptr *byte, size int) {
	size = len(data)
	if size > 0 {
		ptr = &data[0]
	}
	return
}
 07070100000A57000081A4000000000000000000000001645E367C000015AE000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/pkg/xattr/xattr_bsd.go  //go:build freebsd || netbsd
// +build freebsd netbsd

package xattr

import (
	"os"
	"syscall"
	"unsafe"
)

const (
	// XATTR_SUPPORTED will be true if the current platform is supported
	XATTR_SUPPORTED = true

	EXTATTR_NAMESPACE_USER = 1

	// ENOATTR is not exported by the syscall package on Linux, because it is
	// an alias for ENODATA. We export it here so it is available on all
	// our supported platforms.
	ENOATTR = syscall.ENOATTR
)

func getxattr(path string, name string, data []byte) (int, error) {
	return sysGet(syscall.SYS_EXTATTR_GET_FILE, path, name, data)
}

func lgetxattr(path string, name string, data []byte) (int, error) {
	return sysGet(syscall.SYS_EXTATTR_GET_LINK, path, name, data)
}

func fgetxattr(f *os.File, name string, data []byte) (int, error) {
	return getxattr(f.Name(), name, data)
}

// sysGet is called by getxattr and lgetxattr with the appropriate syscall
// number. This works because syscalls have the same signature and return
// values.
func sysGet(syscallNum uintptr, path string, name string, data []byte) (int, error) {
	ptr, nbytes := bytePtrFromSlice(data)
	/*
		ssize_t extattr_get_file(
			const char *path,
			int attrnamespace,
			const char *attrname,
			void *data,
			size_t nbytes);

		ssize_t extattr_get_link(
			const char *path,
			int attrnamespace,
			const char *attrname,
			void *data,
			size_t nbytes);
	*/
	r0, _, err := syscall.Syscall6(syscallNum, uintptr(unsafe.Pointer(syscall.StringBytePtr(path))),
		EXTATTR_NAMESPACE_USER, uintptr(unsafe.Pointer(syscall.StringBytePtr(name))),
		uintptr(unsafe.Pointer(ptr)), uintptr(nbytes), 0)
	if err != syscall.Errno(0) {
		return int(r0), err
	}
	return int(r0), nil
}

func setxattr(path string, name string, data []byte, flags int) error {
	return sysSet(syscall.SYS_EXTATTR_SET_FILE, path, name, data)
}

func lsetxattr(path string, name string, data []byte, flags int) error {
	return sysSet(syscall.SYS_EXTATTR_SET_LINK, path, name, data)
}

func fsetxattr(f *os.File, name string, data []byte, flags int) error {
	return setxattr(f.Name(), name, data, flags)
}

// sysSet is called by setxattr and lsetxattr with the appropriate syscall
// number. This works because syscalls have the same signature and return
// values.
func sysSet(syscallNum uintptr, path string, name string, data []byte) error {
	ptr, nbytes := bytePtrFromSlice(data)
	/*
		ssize_t extattr_set_file(
			const char *path,
			int attrnamespace,
			const char *attrname,
			const void *data,
			size_t nbytes
		);

		ssize_t extattr_set_link(
			const char *path,
			int attrnamespace,
			const char *attrname,
			const void *data,
			size_t nbytes
		);
	*/
	r0, _, err := syscall.Syscall6(syscallNum, uintptr(unsafe.Pointer(syscall.StringBytePtr(path))),
		EXTATTR_NAMESPACE_USER, uintptr(unsafe.Pointer(syscall.StringBytePtr(name))),
		uintptr(unsafe.Pointer(ptr)), uintptr(nbytes), 0)
	if err != syscall.Errno(0) {
		return err
	}
	if int(r0) != nbytes {
		return syscall.E2BIG
	}
	return nil
}

func removexattr(path string, name string) error {
	return sysRemove(syscall.SYS_EXTATTR_DELETE_FILE, path, name)
}

func lremovexattr(path string, name string) error {
	return sysRemove(syscall.SYS_EXTATTR_DELETE_LINK, path, name)
}

func fremovexattr(f *os.File, name string) error {
	return removexattr(f.Name(), name)
}

// sysSet is called by removexattr and lremovexattr with the appropriate syscall
// number. This works because syscalls have the same signature and return
// values.
func sysRemove(syscallNum uintptr, path string, name string) error {
	/*
		int extattr_delete_file(
			const char *path,
			int attrnamespace,
			const char *attrname
		);

		int extattr_delete_link(
			const char *path,
			int attrnamespace,
			const char *attrname
		);
	*/
	_, _, err := syscall.Syscall(syscallNum, uintptr(unsafe.Pointer(syscall.StringBytePtr(path))),
		EXTATTR_NAMESPACE_USER, uintptr(unsafe.Pointer(syscall.StringBytePtr(name))),
	)
	if err != syscall.Errno(0) {
		return err
	}
	return nil
}

func listxattr(path string, data []byte) (int, error) {
	return sysList(syscall.SYS_EXTATTR_LIST_FILE, path, data)
}

func llistxattr(path string, data []byte) (int, error) {
	return sysList(syscall.SYS_EXTATTR_LIST_LINK, path, data)
}

func flistxattr(f *os.File, data []byte) (int, error) {
	return listxattr(f.Name(), data)
}

// sysSet is called by listxattr and llistxattr with the appropriate syscall
// number. This works because syscalls have the same signature and return
// values.
func sysList(syscallNum uintptr, path string, data []byte) (int, error) {
	ptr, nbytes := bytePtrFromSlice(data)
	/*
		ssize_t extattr_list_file(
				const char *path,
				int attrnamespace,
				void *data,
				size_t nbytes
			);

		ssize_t extattr_list_link(
			const char *path,
			int attrnamespace,
			void *data,
			size_t nbytes
		);
	*/
	r0, _, err := syscall.Syscall6(syscallNum, uintptr(unsafe.Pointer(syscall.StringBytePtr(path))),
		EXTATTR_NAMESPACE_USER, uintptr(unsafe.Pointer(ptr)), uintptr(nbytes), 0, 0)
	if err != syscall.Errno(0) {
		return int(r0), err
	}
	return int(r0), nil
}

// stringsFromByteSlice converts a sequence of attributes to a []string.
// On FreeBSD, each entry consists of a single byte containing the length
// of the attribute name, followed by the attribute name.
// The name is _not_ terminated by NULL.
func stringsFromByteSlice(buf []byte) (result []string) {
	index := 0
	for index < len(buf) {
		next := index + 1 + int(buf[index])
		result = append(result, string(buf[index+1:next]))
		index = next
	}
	return
}
  07070100000A58000081A4000000000000000000000001645E367C000008F7000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/pkg/xattr/xattr_darwin.go   //go:build darwin
// +build darwin

package xattr

import (
	"os"
	"syscall"

	"golang.org/x/sys/unix"
)

// See https://opensource.apple.com/source/xnu/xnu-1504.15.3/bsd/sys/xattr.h.auto.html
const (
	// XATTR_SUPPORTED will be true if the current platform is supported
	XATTR_SUPPORTED = true

	XATTR_NOFOLLOW        = 0x0001
	XATTR_CREATE          = 0x0002
	XATTR_REPLACE         = 0x0004
	XATTR_NOSECURITY      = 0x0008
	XATTR_NODEFAULT       = 0x0010
	XATTR_SHOWCOMPRESSION = 0x0020

	// ENOATTR is not exported by the syscall package on Linux, because it is
	// an alias for ENODATA. We export it here so it is available on all
	// our supported platforms.
	ENOATTR = syscall.ENOATTR
)

func getxattr(path string, name string, data []byte) (int, error) {
	return unix.Getxattr(path, name, data)
}

func lgetxattr(path string, name string, data []byte) (int, error) {
	return unix.Lgetxattr(path, name, data)
}

func fgetxattr(f *os.File, name string, data []byte) (int, error) {
	return getxattr(f.Name(), name, data)
}

func setxattr(path string, name string, data []byte, flags int) error {
	return unix.Setxattr(path, name, data, flags)
}

func lsetxattr(path string, name string, data []byte, flags int) error {
	return unix.Lsetxattr(path, name, data, flags)
}

func fsetxattr(f *os.File, name string, data []byte, flags int) error {
	return setxattr(f.Name(), name, data, flags)
}

func removexattr(path string, name string) error {
	return unix.Removexattr(path, name)
}

func lremovexattr(path string, name string) error {
	return unix.Lremovexattr(path, name)
}

func fremovexattr(f *os.File, name string) error {
	return removexattr(f.Name(), name)
}

func listxattr(path string, data []byte) (int, error) {
	return unix.Listxattr(path, data)
}

func llistxattr(path string, data []byte) (int, error) {
	return unix.Llistxattr(path, data)
}

func flistxattr(f *os.File, data []byte) (int, error) {
	return listxattr(f.Name(), data)
}

// stringsFromByteSlice converts a sequence of attributes to a []string.
// On Darwin and Linux, each entry is a NULL-terminated string.
func stringsFromByteSlice(buf []byte) (result []string) {
	offset := 0
	for index, b := range buf {
		if b == 0 {
			result = append(result, string(buf[offset:index]))
			offset = index + 1
		}
	}
	return
}
 07070100000A59000081A4000000000000000000000001645E367C00000D0B000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/pkg/xattr/xattr_linux.go    //go:build linux
// +build linux

package xattr

import (
	"os"
	"syscall"

	"golang.org/x/sys/unix"
)

const (
	// XATTR_SUPPORTED will be true if the current platform is supported
	XATTR_SUPPORTED = true

	XATTR_CREATE  = unix.XATTR_CREATE
	XATTR_REPLACE = unix.XATTR_REPLACE

	// ENOATTR is not exported by the syscall package on Linux, because it is
	// an alias for ENODATA. We export it here so it is available on all
	// our supported platforms.
	ENOATTR = syscall.ENODATA
)

// On Linux, FUSE and CIFS filesystems can return EINTR for interrupted system
// calls. This function works around this by retrying system calls until they
// stop returning EINTR.
//
// See https://github.com/golang/go/commit/6b420169d798c7ebe733487b56ea5c3fa4aab5ce.
func ignoringEINTR(fn func() error) (err error) {
	for {
		err = fn()
		if err != unix.EINTR {
			break
		}
	}
	return err
}

func getxattr(path string, name string, data []byte) (int, error) {
	var r int
	err := ignoringEINTR(func() (err error) {
		r, err = unix.Getxattr(path, name, data)
		return err
	})
	return r, err
}

func lgetxattr(path string, name string, data []byte) (int, error) {
	var r int
	err := ignoringEINTR(func() (err error) {
		r, err = unix.Lgetxattr(path, name, data)
		return err
	})
	return r, err
}

func fgetxattr(f *os.File, name string, data []byte) (int, error) {
	var r int
	err := ignoringEINTR(func() (err error) {
		r, err = unix.Fgetxattr(int(f.Fd()), name, data)
		return err
	})
	return r, err
}

func setxattr(path string, name string, data []byte, flags int) error {
	return ignoringEINTR(func() (err error) {
		return unix.Setxattr(path, name, data, flags)
	})
}

func lsetxattr(path string, name string, data []byte, flags int) error {
	return ignoringEINTR(func() (err error) {
		return unix.Lsetxattr(path, name, data, flags)
	})
}

func fsetxattr(f *os.File, name string, data []byte, flags int) error {
	return ignoringEINTR(func() (err error) {
		return unix.Fsetxattr(int(f.Fd()), name, data, flags)
	})
}

func removexattr(path string, name string) error {
	return ignoringEINTR(func() (err error) {
		return unix.Removexattr(path, name)
	})
}

func lremovexattr(path string, name string) error {
	return ignoringEINTR(func() (err error) {
		return unix.Lremovexattr(path, name)
	})
}

func fremovexattr(f *os.File, name string) error {
	return ignoringEINTR(func() (err error) {
		return unix.Fremovexattr(int(f.Fd()), name)
	})
}

func listxattr(path string, data []byte) (int, error) {
	var r int
	err := ignoringEINTR(func() (err error) {
		r, err = unix.Listxattr(path, data)
		return err
	})
	return r, err
}

func llistxattr(path string, data []byte) (int, error) {
	var r int
	err := ignoringEINTR(func() (err error) {
		r, err = unix.Llistxattr(path, data)
		return err
	})
	return r, err
}

func flistxattr(f *os.File, data []byte) (int, error) {
	var r int
	err := ignoringEINTR(func() (err error) {
		r, err = unix.Flistxattr(int(f.Fd()), data)
		return err
	})
	return r, err
}

// stringsFromByteSlice converts a sequence of attributes to a []string.
// On Darwin and Linux, each entry is a NULL-terminated string.
func stringsFromByteSlice(buf []byte) (result []string) {
	offset := 0
	for index, b := range buf {
		if b == 0 {
			result = append(result, string(buf[offset:index]))
			offset = index + 1
		}
	}
	return
}
 07070100000A5A000081A4000000000000000000000001645E367C00000DE2000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/pkg/xattr/xattr_solaris.go  //go:build solaris
// +build solaris

package xattr

import (
	"os"
	"syscall"

	"golang.org/x/sys/unix"
)

const (
	// XATTR_SUPPORTED will be true if the current platform is supported
	XATTR_SUPPORTED = true

	XATTR_CREATE  = 0x1
	XATTR_REPLACE = 0x2

	// ENOATTR is not exported by the syscall package on Linux, because it is
	// an alias for ENODATA. We export it here so it is available on all
	// our supported platforms.
	ENOATTR = syscall.ENODATA
)

func getxattr(path string, name string, data []byte) (int, error) {
	f, err := os.OpenFile(path, os.O_RDONLY, 0)
	if err != nil {
		return 0, err
	}
	defer func() {
		_ = f.Close()
	}()
	return fgetxattr(f, name, data)
}

func lgetxattr(path string, name string, data []byte) (int, error) {
	return 0, unix.ENOTSUP
}

func fgetxattr(f *os.File, name string, data []byte) (int, error) {
	fd, err := unix.Openat(int(f.Fd()), name, unix.O_RDONLY|unix.O_XATTR, 0)
	if err != nil {
		return 0, err
	}
	defer func() {
		_ = unix.Close(fd)
	}()
	return unix.Read(fd, data)
}

func setxattr(path string, name string, data []byte, flags int) error {
	f, err := os.OpenFile(path, os.O_RDONLY, 0)
	if err != nil {
		return err
	}
	err = fsetxattr(f, name, data, flags)
	if err != nil {
		_ = f.Close()
		return err
	}
	return f.Close()
}

func lsetxattr(path string, name string, data []byte, flags int) error {
	return unix.ENOTSUP
}

func fsetxattr(f *os.File, name string, data []byte, flags int) error {
	mode := unix.O_WRONLY | unix.O_XATTR
	if flags&XATTR_REPLACE != 0 {
		mode |= unix.O_TRUNC
	} else if flags&XATTR_CREATE != 0 {
		mode |= unix.O_CREAT | unix.O_EXCL
	} else {
		mode |= unix.O_CREAT | unix.O_TRUNC
	}
	fd, err := unix.Openat(int(f.Fd()), name, mode, 0666)
	if err != nil {
		return err
	}
	if _, err = unix.Write(fd, data); err != nil {
		_ = unix.Close(fd)
		return err
	}
	return unix.Close(fd)
}

func removexattr(path string, name string) error {
	fd, err := unix.Open(path, unix.O_RDONLY|unix.O_XATTR, 0)
	if err != nil {
		return err
	}
	f := os.NewFile(uintptr(fd), path)
	defer func() {
		_ = f.Close()
	}()
	return fremovexattr(f, name)
}

func lremovexattr(path string, name string) error {
	return unix.ENOTSUP
}

func fremovexattr(f *os.File, name string) error {
	fd, err := unix.Openat(int(f.Fd()), ".", unix.O_XATTR, 0)
	if err != nil {
		return err
	}
	defer func() {
		_ = unix.Close(fd)
	}()
	return unix.Unlinkat(fd, name, 0)
}

func listxattr(path string, data []byte) (int, error) {
	f, err := os.OpenFile(path, os.O_RDONLY, 0)
	if err != nil {
		return 0, err
	}
	defer func() {
		_ = f.Close()
	}()
	return flistxattr(f, data)
}

func llistxattr(path string, data []byte) (int, error) {
	return 0, unix.ENOTSUP
}

func flistxattr(f *os.File, data []byte) (int, error) {
	fd, err := unix.Openat(int(f.Fd()), ".", unix.O_RDONLY|unix.O_XATTR, 0)
	if err != nil {
		return 0, unix.ENOTSUP
	}
	xf := os.NewFile(uintptr(fd), f.Name())
	defer func() {
		_ = xf.Close()
	}()
	names, err := xf.Readdirnames(-1)
	if err != nil {
		return 0, err
	}
	var buf []byte
	for _, name := range names {
		buf = append(buf, append([]byte(name), '\000')...)
	}
	if data == nil {
		return len(buf), nil
	}
	return copy(data, buf), nil
}

// stringsFromByteSlice converts a sequence of attributes to a []string.
// On Darwin and Linux, each entry is a NULL-terminated string.
func stringsFromByteSlice(buf []byte) (result []string) {
	offset := 0
	for index, b := range buf {
		if b == 0 {
			result = append(result, string(buf[offset:index]))
			offset = index + 1
		}
	}
	return
}
  07070100000A5B000081A4000000000000000000000001645E367C00000578000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/pkg/xattr/xattr_unsupported.go  //go:build !linux && !freebsd && !netbsd && !darwin && !solaris
// +build !linux,!freebsd,!netbsd,!darwin,!solaris

package xattr

import (
	"os"
	"syscall"
)

const (
	// We need to use the default for non supported operating systems
	ENOATTR = syscall.Errno(0x59)
)

// XATTR_SUPPORTED will be true if the current platform is supported
const XATTR_SUPPORTED = false

func getxattr(path string, name string, data []byte) (int, error) {
	return 0, nil
}

func lgetxattr(path string, name string, data []byte) (int, error) {
	return 0, nil
}

func fgetxattr(f *os.File, name string, data []byte) (int, error) {
	return 0, nil
}

func setxattr(path string, name string, data []byte, flags int) error {
	return nil
}

func lsetxattr(path string, name string, data []byte, flags int) error {
	return nil
}

func fsetxattr(f *os.File, name string, data []byte, flags int) error {
	return nil
}

func removexattr(path string, name string) error {
	return nil
}

func lremovexattr(path string, name string) error {
	return nil
}

func fremovexattr(f *os.File, name string) error {
	return nil
}

func listxattr(path string, data []byte) (int, error) {
	return 0, nil
}

func llistxattr(path string, data []byte) (int, error) {
	return 0, nil
}

func flistxattr(f *os.File, data []byte) (int, error) {
	return 0, nil
}

// dummy
func stringsFromByteSlice(buf []byte) (result []string) {
	return []string{}
}
07070100000A5C000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/github.com/rancher-sandbox 07070100000A5D000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/rancher-sandbox/linuxkit    07070100000A5E000081A4000000000000000000000001645E367C00001C4B000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/rancher-sandbox/linuxkit/AUTHORS    # This file lists all individuals having contributed content to the repository.
# For how it is generated, see `scripts/generate-authors.sh`.

Ajeet Singh Raina, Docker Captain, {Code} Catalysts, Dell EMC R&D <ajeetraina@gmail.com>
Akihiro Suda <suda.akihiro@lab.ntt.co.jp>
Alan Raison <alanraison@users.noreply.github.com>
Alex Ellis <alexellis2@gmail.com>
Alex Johnson <hello@alex-johnson.net>
Alex Szakaly <alex.szakaly@gmail.com>
Alexander Slesarev <alex.slesarev@nudatasecurity.com>
Alice Frosi <alice@linux.vnet.ibm.com>
Amir Chaudhry <amir.chaudhry@docker.com>
Anca Iordache <anca.iordache@docker.com>
Anil Madhavapeddy <anil.madhavapeddy@docker.com>
Arthur Lutz <arthur.lutz@logilab.fr>
Asbjorn Enge <asbjorn@hanafjedle.net>
Avi Deitcher <avi@deitcher.net>
Aymen EL AMRI <aymen@eralabs.io>
Ben Allen <bsallen@alcf.anl.gov>
Bill Kerr <bill@generalbill.com>
Birol Bilgin <birolbilgin@gmail.com>
Björn Ingeson <bjorn.ingeson@gmail.com>
Brice Figureau <brice-puppet@daysofwonder.com>
Carlton-Semple <carlton.semple@ibm.com>
Chanwit Kaewkasi <chanwit@gmail.com>
Christian Wuerdig <christian.wuerdig@gmail.com>
Clovis Durand <cd.clovel19@gmail.com>
Craig Ingram <cingram@heroku.com>
Damiano Donati <damiano.donati@gmail.com>
Dan Finneran <dan@thebsdbox.co.uk>
Daniel Caminada <daniel.caminada@ergon.ch>
Daniel Dean <daniel@razorsecure.com>
Daniel Hiltgen <daniel.hiltgen@docker.com>
Daniel Nephin <dnephin@gmail.com>
Danny Bessems <github.com.danny@spamasaurus.com>
Dave Freitag <dcfreita@us.ibm.com>
Dave Tucker <dt@docker.com>
David Cassany <dcassany@suse.com>
David Gageot <david.gageot@docker.com>
David Manouchehri <david.manouchehri@riseup.net>
David Protasowski <dprotaso@gmail.com>
David Scott <dave.scott@docker.com>
David Sheets <david.sheets@docker.com>
Davide Brini <waldner@katamail.com>
Dennis Chen <dennis.chen@arm.com>
Dieter Reuter <dieter.reuter@me.com>
Dominic White <singe-github@singe.za.net>
duraki <duraki@linuxmail.org>
Edvin Eriksson <edvin.erikson@leovegas.com>
Edward Vielmetti <edward.vielmetti@gmail.com>
Emily Casey <ecasey@pivotal.io>
Emmanuel Briney <emmanuel.briney@docker.com>
Eric Briand <eric.briand@gmail.com>
Erik Nordmark <erik@zededa.com>
Ettore Di Giacinto <edigiacinto@suse.com>
Evan Hazlett <ejhazlett@gmail.com>
Federico Pellegatta <12744504+federico-pellegatta@users.noreply.github.com>
Frederic Dalleau <frederic.dalleau@docker.com>
French Ben <frenchben@docker.com>
Frédéric Dalleau <79831213+fredericdalleau@users.noreply.github.com>
Frédéric Dalleau <frederic.dalleau@docker.com>
functor <meehow@gmail.com>
Gabriel Chabot <gabriel.chabot@qarnot-computing.com>
Garth Bushell <garth.bushell@oracle.com>
George Papanikolaou <g3orge.app@gmail.com>
Gerben Geijteman <gerben@isset.nl>
Gianluca Arbezzano <gianarb92@gmail.com>
Guillaume Rose <guillaume.rose@docker.com>
Hans van den Bogert <hansbogert@gmail.com>
hyperized <gerben@hyperized.net>
Ian Campbell <ian.campbell@docker.com>
Ilya Dmitrichenko <errordeveloper@gmail.com>
Isaac Rodman <isaac@eyz.us>
Istvan Szukacs <l1x@users.noreply.github.com>
Itxaka <itxak.garcia@spectrocloud.com>
Ivan Markin <sw@nogoegst.net>
James McCoy <james@mcy.email>
Jason A. Donenfeld <Jason@zx2c4.com>
Jeff Wu <jeff.wu.junfei@gmail.com>
Jeffrey 'jf' Lim <jf@users.noreply.github.com>
Jeffrey Hogan <jeff.hogan1@gmail.com>
Jeremy Yallop <yallop@docker.com>
Jes Ferrier <jes.ferrier@gmail.com>
Jesse Adametz <jesseadametz@gmail.com>
Johannes Würbach <johannes.wuerbach@googlemail.com>
John Albietz <inthecloud247@gmail.com>
Jose Carlos Venegas Munoz <jose.carlos.venegas.munoz@intel.com>
Justin Barrick <jbarrick@cloudflare.com>
Justin Cormack <justin.cormack@docker.com>
Justin Ko <justin.ko@oracle.com>
Justin Terry (VM) <juterry@microsoft.com>
Karol Woźniak <wozniakk@gmail.com>
Ken Cochrane <ken.cochrane@docker.com>
Krister Johansen <krister.johansen@oracle.com>
Krisztian Horvath <keyki.kk@gmail.com>
Kunal Kushwaha <kushwaha_kunal_v7@lab.ntt.co.jp>
Liqdfire <liqdfire@gmail.com>
Lorenzo Fontana <lo@linux.com>
Loïc Pottier <lpottier@isi.edu>
Luke Hodkinson <furious.luke@gmail.com>
Madhu Venugopal <madhu@docker.com>
Magnus Skjegstad <magnus.skjegstad@docker.com>
Marco Mariani <marco.mariani@alterway.fr>
Marcus van Dam <marcus@marcusvandam.nl>
Marcus Weiner <marcus.weiner@gmail.com>
Mario Loriedo <mario.loriedo@gmail.com>
marten <marten.cassel@gmail.com>
Mathieu Champlon <mathieu.champlon@docker.com>
Mathieu Pasquet <mathieu.pasquet@alterway.fr>
Matt Bajor <matt.bajor@workday.com>
Matt Bentley <matt.bentley@docker.com>
Matt Johnson <matjohn2@cisco.com>
Michael Aldridge <aldridge.mac@gmail.com>
Michael Schnerring <3743342+schnerring@users.noreply.github.com>
Michel Courtine <michel.courtine@docker.com>
Mickaël Salaün <mic@digikod.net>
Mindy Preston <mindy.preston@docker.com>
MinJae Kwon <mingrammer@gmail.com>
Natanael Copa <natanael.copa@docker.com>
Nathan Dautenhahn <ndd@rice.edu>
Nathan LeClaire <nathan.leclaire@docker.com>
Neil Gerring <ng@neilgerring.co.uk>
Nick Jones <nick@dischord.org>
Niclas Mietz <niclas@mietz.io>
Nico Di Rocco <dirocco.nico@gmail.com>
Olaf Bergner <olaf.bergner@gmx.de>
Olaf Flebbe <of@oflebbe.de>
Olli Janatuinen <olli.janatuinen@gmail.com>
Omar Ramadan <omar.ramadan93@gmail.com>
Patrik Cyvoct <patrik@ptrk.io>
Petr Fedchenkov <giggsoff@gmail.com>
Phil Estes <estesp@linux.vnet.ibm.com>
Pierre Gayvallet <pierre.gayvallet@docker.com>
Pratik Mallya <mallya@us.ibm.com>
Preston Holmes <preston@ptone.com>
Radu Matei <matei.radu94@gmail.com>
Richard Connon <richard@connon.me.uk>
Richard Mortier <mort@cantab.net>
Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Robb Kistler <robb.kistler@docker.com>
Robin Winkelewski <w9ncontact@gmail.com>
Rolf Neugebauer <rn@rneugeba.io>
Roman Shaposhnik <rvs@zededa.com>
Rui Lopes <rgl@ruilopes.com>
Ryoga Saito <proelbtn@gmail.com>
Sachi King <nakato@nakato.io>
salman aljammaz <s@aljmz.com>
schrotthaufen <schrotthaufen@invalid.invalid>
Scott Coulton <scott.coulton@puppet.com>
Sebastiaan van Stijn <sebastiaan.vanstijn@docker.com>
sethp <seth.pellegrino@gmail.com>
Simarpreet Singh <simar@linux.com>
Simon Ferquel <simon.ferquel@docker.com>
Simon Fridlund <simon@fridlund.email>
Sotiris Salloumis <sotiris.salloumis@gmail.com>
Steeve Morin <steeve.morin@gmail.com>
Stefan Bourlon <stefan.bourlon@ca.com>
Stephen J Day <stephen.day@docker.com>
Steve Hiehn <shiehn@pivotal.io>
Sukchan Lee <acetcom@gmail.com>
Sylvain Prat <sylvain.prat@gmail.com>
Theo Koulouris <theo.koulouris@hpe.com>
Thomas Conte <thomas@conte.com>
Thomas Gazagnaire <thomas.gazagnaire@docker.com>
Thomas Leonard <thomas.leonard@docker.com>
Thomas Shaw <tomwillfixit@users.noreply.github.com>
Tiago Pires <tandrepires@gmail.com>
Tiejun Chen <tiejun.china@gmail.com>
Tim Potter <tpot@hpe.com>
Tobias Gesellchen <tobias@gesellix.de>
Tobias Klauser <tklauser@distanz.ch>
Tomas Knappek <tomas.knappek@gmail.com>
Tonis Tiigi <tonistiigi@gmail.com>
Tristan Slominski <tristan.slominski@gmail.com>
Tycho Andersen <tycho@docker.com>
Vincent Demeester <Vincent.Demeester@docker.com>
Yoann Ricordel <yoann.ricordel@qarnot-computing.com>
Yuri Volchkov <yuri@zededa.com>
Zachery Hostens <zacheryph@gmail.com>
zimbatm <zimbatm@zimbatm.com>
zlim <zlim.lnx@gmail.com>
谢瑶瑶 <yaoyao.xyy@alibaba-inc.com>
 07070100000A5F000081A4000000000000000000000001645E367C00002A0D000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/rancher-sandbox/linuxkit/LICENSE    
                                 Apache License
                           Version 2.0, January 2004
                        https://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   Copyright 2015-2017 Docker, Inc.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       https://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
   07070100000A60000081A4000000000000000000000001645E367C00000254000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/rancher-sandbox/linuxkit/NOTICE Copyright © 2022 - 2023 SUSE LLC

Copyright © 2015-2017 Docker, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
07070100000A61000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/rancher-sandbox/linuxkit/providers  07070100000A62000081A4000000000000000000000001645E367C00000509000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/rancher-sandbox/linuxkit/providers/provider.go  /*
Copyright © 2022 - 2023 SUSE LLC

Copyright © 2015-2017 Docker, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package providers

const (
	// ConfigPath is where the data is extracted to
	ConfigPath = "/run/config"

	// Hostname is the filename in configPath where the hostname is stored
	Hostname = "hostname"

	// SSH is the path where sshd configuration from the provider is stored
	SSH = "ssh"
)

// Provider is a generic interface for metadata/userdata providers.
type Provider interface {
	// String should return a unique name for the Provider
	String() string

	// Probe returns true if the provider was detected.
	Probe() bool

	// Extract user data. This may write some data, specific to a
	// provider, to ConfigPath and should return the generic userdata.
	Extract() ([]byte, error)
}
   07070100000A63000081A4000000000000000000000001645E367C00001085000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/rancher-sandbox/linuxkit/providers/provider_aws.go  /*
Copyright © 2022 - 2023 SUSE LLC

Copyright © 2015-2017 Docker, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package providers

import (
	"fmt"
	"io"
	"log"
	"net/http"
	"os"
	"path"
	"time"
)

const (
	// Standard AWS-compatible Metadata URLs
	userDataURL = "http://169.254.169.254/latest/user-data"
	metaDataURL = "http://169.254.169.254/latest/meta-data/"
)

// ProviderAWS is the type implementing the Provider interface for AWS
type ProviderAWS struct {
}

// NewAWS returns a new ProviderAWS
func NewAWS() *ProviderAWS {
	return &ProviderAWS{}
}

func (p *ProviderAWS) String() string {
	return "AWS"
}

// Probe checks if we are running on AWS
func (p *ProviderAWS) Probe() bool {
	// Getting the hostname should always work...
	_, err := awsGet(metaDataURL + "hostname")
	return err == nil
}

// Extract gets both the AWS specific and generic userdata
func (p *ProviderAWS) Extract() ([]byte, error) {
	// Get host name. This must not fail
	hostname, err := awsGet(metaDataURL + "hostname")
	if err != nil {
		return nil, err
	}
	err = os.WriteFile(path.Join(ConfigPath, Hostname), hostname, 0644)
	if err != nil {
		return nil, fmt.Errorf("AWS: Failed to write hostname: %s", err)
	}

	// public ipv4
	awsMetaGet("public-ipv4", "public_ipv4", 0644)

	// private ipv4
	awsMetaGet("local-ipv4", "local_ipv4", 0644)

	// availability zone
	awsMetaGet("placement/availability-zone", "availability_zone", 0644)

	// instance type
	awsMetaGet("instance-type", "instance_type", 0644)

	// instance-id
	awsMetaGet("instance-id", "instance_id", 0644)

	// local-hostname
	awsMetaGet("local-hostname", "local_hostname", 0644)

	// ssh
	if err := p.handleSSH(); err != nil {
		log.Printf("AWS: Failed to get ssh data: %s", err)
	}

	// Generic userdata
	userData, err := awsGet(userDataURL)
	if err != nil {
		log.Printf("AWS: Failed to get user-data: %s", err)
		// This is not an error
		return nil, nil
	}
	return userData, nil
}

// lookup a value (lookupName) in aws metaservice and store in given fileName
func awsMetaGet(lookupName string, fileName string, fileMode os.FileMode) {
	if lookupValue, err := awsGet(metaDataURL + lookupName); err == nil {
		// we got a value from the metadata server, now save to filesystem
		err = os.WriteFile(path.Join(ConfigPath, fileName), lookupValue, fileMode)
		if err != nil {
			// we couldn't save the file for some reason
			log.Printf("AWS: Failed to write %s:%s %s", fileName, lookupValue, err)
		}
	} else {
		// we did not get a value back from the metadata server
		log.Printf("AWS: Failed to get %s: %s", lookupName, err)
	}
}

// awsGet requests and extracts the requested URL
func awsGet(url string) ([]byte, error) {
	var client = &http.Client{
		Timeout: time.Second * 2,
	}

	req, err := http.NewRequest("", url, nil)
	if err != nil {
		return nil, fmt.Errorf("AWS: http.NewRequest failed: %s", err)
	}

	resp, err := client.Do(req)
	if err != nil {
		return nil, fmt.Errorf("AWS: Could not contact metadata service: %s", err)
	}
	if resp.StatusCode != 200 {
		return nil, fmt.Errorf("AWS: Status not ok: %d", resp.StatusCode)
	}
	body, err := io.ReadAll(resp.Body)
	if err != nil {
		return nil, fmt.Errorf("AWS: Failed to read http response: %s", err)
	}
	return body, nil
}

// SSH keys:
func (p *ProviderAWS) handleSSH() error {
	sshKeys, err := awsGet(metaDataURL + "public-keys/0/openssh-key")
	if err != nil {
		return fmt.Errorf("Failed to get sshKeys: %s", err)
	}

	if err := os.Mkdir(path.Join(ConfigPath, SSH), 0755); err != nil {
		return fmt.Errorf("Failed to create %s: %s", SSH, err)
	}

	err = os.WriteFile(path.Join(ConfigPath, SSH, "authorized_keys"), sshKeys, 0600)
	if err != nil {
		return fmt.Errorf("Failed to write ssh keys: %s", err)
	}
	return nil
}
   07070100000A64000081A4000000000000000000000001645E367C000014DB000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/rancher-sandbox/linuxkit/providers/provider_azure.go    /*
Copyright © 2022 - 2023 SUSE LLC

Copyright © 2015-2017 Docker, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package providers

import (
	"encoding/base64"
	"fmt"
	"io/ioutil"
	"net/http"
	"os"
	"path"
	"strings"
	"time"

	log "github.com/sirupsen/logrus"
)

// ProviderAzure reads from Azure's Instance Metadata Service (IMDS) API.
type ProviderAzure struct {
	client *http.Client
}

// NewAzure factory
func NewAzure() *ProviderAzure {
	client := &http.Client{
		Timeout: time.Second * 2,
	}
	return &ProviderAzure{
		client: client,
	}
}

func (p *ProviderAzure) String() string {
	return "Azure"
}

// Probe checks if Azure IMDS API is available
func (p *ProviderAzure) Probe() bool {
	// "Poll" VM Unique ID
	// See: https://azure.microsoft.com/en-us/blog/accessing-and-using-azure-vm-unique-id/
	_, err := p.imdsGet("compute/vmId")
	return (err == nil)
}

// Extract user data via Azure IMDS.
func (p *ProviderAzure) Extract() ([]byte, error) {
	if err := p.saveHostname(); err != nil {
		return nil, fmt.Errorf("%s: %s", p.String(), err)
	}

	if err := p.saveSSHKeys(); err != nil {
		log.Warnf("%s: Saving SSH keys failed: %s", p.String(), err)
	}

	p.imdsSave("network/interface/0/ipv4/ipAddress/0/publicIpAddress")
	p.imdsSave("network/interface/0/ipv4/ipAddress/0/privateIpAddress")
	p.imdsSave("compute/zone")
	p.imdsSave("compute/vmId")

	userData, err := p.getUserData()
	if err != nil {
		return nil, fmt.Errorf("%s: %s", p.String(), err)
	}
	return userData, nil
}

func (p *ProviderAzure) saveHostname() error {
	hostname, err := p.imdsGet("compute/name")
	if err != nil {
		return err
	}
	err = ioutil.WriteFile(path.Join(ConfigPath, Hostname), hostname, 0644)
	if err != nil {
		return fmt.Errorf("%s: Failed to write hostname: %s", p.String(), err)
	}
	log.Debugf("%s: Saved hostname: %s", p.String(), string(hostname))
	return nil
}

func (p *ProviderAzure) saveSSHKeys() error {
	// TODO support multiple keys
	sshKey, err := p.imdsGet("compute/publicKeys/0/keyData")
	if err != nil {
		return fmt.Errorf("Getting SSH key failed: %s", err)
	}
	if err := os.Mkdir(path.Join(ConfigPath, SSH), 0755); err != nil {
		return fmt.Errorf("Creating directory %s failed: %s", SSH, err)
	}
	err = ioutil.WriteFile(path.Join(ConfigPath, SSH, "authorized_keys"), sshKey, 0600)
	if err != nil {
		return fmt.Errorf("Writing SSH key failed: %s", err)
	}
	log.Debugf("%s: Saved authorized_keys", p.String())
	return nil
}

// Get resource value from IMDS and write to file in ConfigPath
func (p *ProviderAzure) imdsSave(resourceName string) {
	if value, err := p.imdsGet(resourceName); err == nil {
		fileName := strings.Replace(resourceName, "/", "_", -1)
		err = ioutil.WriteFile(path.Join(ConfigPath, fileName), value, 0644)
		if err != nil {
			log.Warnf("%s: Failed to write file %s:%s %s", p.String(), fileName, value, err)
		}
		log.Debugf("%s: Saved resource %s: %s", p.String(), resourceName, string(value))
	} else {
		log.Warnf("%s: Failed to get resource %s: %s", p.String(), resourceName, err)
	}
}

// Get IMDS resource value
func (p *ProviderAzure) imdsGet(resourceName string) ([]byte, error) {
	req, err := http.NewRequest("GET", imdsURL(resourceName), nil)
	if err != nil {
		return nil, fmt.Errorf("http.NewRequest failed: %s", err)
	}
	req.Header.Set("Metadata", "true")

	resp, err := p.client.Do(req)
	if err != nil {
		return nil, fmt.Errorf("IMDS unavailable: %s", err)
	}
	defer resp.Body.Close()
	if resp.StatusCode != 200 {
		return nil, fmt.Errorf("IMDS returned status code: %d", resp.StatusCode)
	}

	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		return nil, fmt.Errorf("Reading HTTP response failed: %s", err)
	}

	return body, nil
}

// Build Azure Instance Metadata Service (IMDS) URL
// For available nodes, see: https://docs.microsoft.com/en-us/azure/virtual-machines/windows/instance-metadata-service
func imdsURL(node string) string {
	const (
		baseURL    = "http://169.254.169.254/metadata/instance"
		apiVersion = "2021-01-01"
		// For leaf nodes in /metadata/instance, the format=json doesn't work.
		// For these queries, format=text needs to be explicitly specified
		// because the default format is JSON.
		params = "?api-version=" + apiVersion + "&format=text"
	)
	if len(node) > 0 {
		return baseURL + "/" + node + params
	}
	return baseURL + params
}

func (p *ProviderAzure) getUserData() ([]byte, error) {
	userDataBase64, err := p.imdsGet("compute/userData")
	if err != nil {
		log.Errorf("Failed to get user data: %s", err)
		return nil, err
	}

	userData := make([]byte, base64.StdEncoding.DecodedLen(len(userDataBase64)))
	msgLen, err := base64.StdEncoding.Decode(userData, userDataBase64)
	if err != nil {
		log.Errorf("Failed to base64-decode user data: %s", err)
		return nil, err
	}
	userData = userData[:msgLen]

	defer ReportReady(p.client)

	return userData, nil
}
 07070100000A65000081A4000000000000000000000001645E367C000010D5000000000000000000000000000000000000006000000000elemental-cli-0.3.1/vendor/github.com/rancher-sandbox/linuxkit/providers/provider_azure_wire.go   /*
Copyright © 2022 - 2023 SUSE LLC

Copyright © 2015-2017 Docker, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package providers

import (
	"bytes"
	"encoding/xml"
	"fmt"
	"io/ioutil"
	"net/http"

	log "github.com/sirupsen/logrus"
)

const (
	wireServerURL string = "http://168.63.129.16/machine"
)

// WireServerClient used to report ready to Azure
//  1. GET Goal State from WireServer.
//  2. Build XML repsonse, by extracing ContainerId and InstanceId from
//     goal state.
//  3. POST XML response to WireServer indicating successful provisioning.
//
// See also:
//
//	https://docs.microsoft.com/en-us/azure/virtual-machines/linux/no-agent#generic-steps-without-using-python
type WireServerClient struct{}

// GoalState XML model (request)
type GoalState struct {
	ContainerID string `xml:"Container>ContainerId"`
	InstanceID  string `xml:"Container>RoleInstanceList>RoleInstance>InstanceId"`
}

// Health XML model (response)
type Health struct {
	GoalStateIncarnation string `xml:"GoalStateIncarnation"`
	ContainerID          string `xml:"Container>ContainerId"`
	InstanceID           string `xml:"Container>RoleInstanceList>Role>InstanceId"`
	State                string `xml:"Container>RoleInstanceList>Role>Health>State"`
}

// ReportReady to Azure's WireServer, indicating successful provisioning
func ReportReady(client *http.Client) error {
	goalState, err := getGoalState(client)
	if err != nil {
		return fmt.Errorf("Report ready: GET goal state: %s", err)
	}
	reportReadyXML, err := buildXML(goalState.ContainerID, goalState.InstanceID)
	if err != nil {
		return fmt.Errorf("Report ready: Build XML: %s", err)
	}
	err = postReportReady(client, reportReadyXML)
	if err != nil {
		return fmt.Errorf("Report ready: POST XML: %s", err)
	}
	log.Debugf(
		"Report ready: ContainerId=%s InstanceId=%s succeeded",
		goalState.ContainerID,
		goalState.InstanceID,
	)
	return nil
}

// Get goal state from WireServer
func getGoalState(client *http.Client) (*GoalState, error) {
	req, err := http.NewRequest("GET", wireServerURL+"?comp=goalstate", nil)
	if err != nil {
		return nil, fmt.Errorf("http.NewRequest failed: %s", err)
	}
	req.Header.Set("x-ms-version", "2012-11-30")

	resp, err := client.Do(req)
	if err != nil {
		return nil, fmt.Errorf("WireServer unavailable: %s", err)
	}
	defer resp.Body.Close()
	if resp.StatusCode != 200 {
		return nil, fmt.Errorf("WireServer returned status code: %d", resp.StatusCode)
	}

	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		return nil, fmt.Errorf("Reading HTTP response failed: %s", err)
	}

	var goalState GoalState
	if err = xml.Unmarshal(body, &goalState); err != nil {
		return nil, fmt.Errorf("Unmarshalling XML failed: %s", err)
	}
	return &goalState, nil
}

// Build report ready XML from container and instance ID
func buildXML(containerID, instanceID string) ([]byte, error) {
	xmlBytes, err := xml.Marshal(
		Health{
			GoalStateIncarnation: "1",
			ContainerID:          containerID,
			InstanceID:           instanceID,
			State:                "Ready"})
	if err != nil {
		return nil, fmt.Errorf("Marshalling XML failed: %s", err)
	}
	return xmlBytes, nil
}

// Post report ready XML to WireServer
func postReportReady(client *http.Client, body []byte) error {
	req, err := http.NewRequest("POST", wireServerURL+"?comp=health", bytes.NewBuffer(body))
	if err != nil {
		return fmt.Errorf("http.NewRequest failed: %s", err)
	}
	req.Header.Set("x-ms-version", "2012-11-30")
	req.Header.Set("x-ms-agent-name", "WALinuxAgent")
	req.Header.Set("Content-Type", "text/xml;charset=utf-8")

	resp, err := client.Do(req)
	if err != nil {
		return fmt.Errorf("WireServer unavailable: %s", err)
	}
	defer resp.Body.Close()
	if resp.StatusCode != 200 {
		return fmt.Errorf("WireServer returned status code: %d", resp.StatusCode)
	}
	return err
}
   07070100000A66000081A4000000000000000000000001645E367C00001609000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/rancher-sandbox/linuxkit/providers/provider_cdrom.go    /*
Copyright © 2022 - 2023 SUSE LLC

Copyright © 2015-2017 Docker, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package providers

import (
	"fmt"
	"os"
	"path"
	"path/filepath"
	"strings"
	"syscall"

	"github.com/diskfs/go-diskfs"
	log "github.com/sirupsen/logrus"
)

const (
	userdataFile     = "user-data"
	userdataFallback = "config"
	cdromDevs        = "/dev/sr[0-9]*"
	blockDevs        = "/sys/class/block/*"
)

var (
	userdataFiles = []string{userdataFile, userdataFallback}
)

// ProviderCDROM is the type implementing the Provider interface for CDROMs
// It looks for file called 'meta-data', 'user-data' or 'config' in the root
type ProviderCDROM struct {
	device     string
	mountPoint string
	err        error
	userdata   []byte
}

// ListCDROMs lists all the cdroms in the system
func ListCDROMs() []Provider {
	cdroms, err := filepath.Glob(cdromDevs)
	if err != nil {
		// Glob can only error on invalid pattern
		panic(fmt.Sprintf("Invalid glob pattern: %s", cdromDevs))
	}
	log.Debugf("cdrom devices to be checked: %v", cdroms)
	// get the devices that match the cloud-init spec
	cidevs := FindCIs()
	log.Debugf("CIDATA devices to be checked: %v", cidevs)
	// merge the two, ensuring that the list is unique
	cdroms = append(cidevs, cdroms...)
	cdroms = uniqueString(cdroms)
	log.Debugf("unique devices to be checked: %v", cdroms)
	providers := []Provider{}
	for _, device := range cdroms {
		providers = append(providers, NewCDROM(device))
	}
	return providers
}

// FindCIs goes through all known devices. Returns any that are either fat32 or
// iso9660 and have a filesystem label "CIDATA" or "cidata", per the spec
// here https://github.com/canonical/cloud-init/blob/master/doc/rtd/topics/datasources/nocloud.rst
func FindCIs() []string {
	devs, err := filepath.Glob(blockDevs)
	log.Debugf("block devices found: %v", devs)
	if err != nil {
		// Glob can only error on invalid pattern
		panic(fmt.Sprintf("Invalid glob pattern: %s", blockDevs))
	}
	foundDevices := []string{}
	for _, device := range devs {
		// get the base device name
		dev := filepath.Base(device)
		// ignore loop and ram devices
		if strings.HasPrefix(dev, "loop") || strings.HasPrefix(dev, "ram") {
			log.Debugf("ignoring loop or ram device: %s", dev)
			continue
		}
		dev = fmt.Sprintf("/dev/%s", dev)
		log.Debugf("checking device: %s", dev)
		// open readonly, ignore errors
		disk, err := diskfs.Open(dev, diskfs.WithOpenMode(diskfs.ReadOnly))
		if err != nil {
			log.Debugf("failed to open device read-only: %s: %v", dev, err)
			continue
		}
		disk.DefaultBlocks = true
		fs, err := disk.GetFilesystem(0)
		if err != nil {
			log.Debugf("failed to get filesystem on partition 0 for device: %s: %v", dev, err)
			_ = disk.File.Close()
			continue
		}
		// get the label
		label := strings.TrimSpace(fs.Label())
		log.Debugf("found trimmed filesystem label for device: %s: '%s'", dev, label)
		if label == "cidata" || label == "CIDATA" {
			log.Debugf("adding device: %s", dev)
			foundDevices = append(foundDevices, dev)
		}
		err = disk.File.Close()
		if err != nil {
			log.Debugf("failed closing device %s", dev)
		}
	}
	return foundDevices
}

// NewCDROM returns a new ProviderCDROM
func NewCDROM(device string) *ProviderCDROM {
	mountPoint, err := os.MkdirTemp("", "cd")
	p := ProviderCDROM{device, mountPoint, err, []byte{}}
	if err == nil {
		if p.err = p.mount(); p.err == nil {
			defer p.unmount()
			// read the userdata - we read the spec file and the fallback, but eventually
			// will remove the fallback
			for _, f := range userdataFiles {
				userdata, err := os.ReadFile(path.Join(p.mountPoint, f))
				// did we find a file?
				if err == nil && userdata != nil {
					p.userdata = userdata
					break
				}
			}
			if p.userdata == nil {
				log.Debugf("no userdata file found at any of %v", userdataFiles)
			}
		}
	}
	return &p
}

func (p *ProviderCDROM) String() string {
	return "CDROM " + p.device
}

// Probe checks if the CD has the right file
func (p *ProviderCDROM) Probe() bool {
	if p.err != nil {
		log.Errorf("there were errors probing %s: %v", p.device, p.err)
	}
	return len(p.userdata) != 0
}

// Extract gets both the CDROM specific and generic userdata
func (p *ProviderCDROM) Extract() ([]byte, error) {
	return p.userdata, p.err
}

// mount mounts a CDROM/DVD device under mountPoint
func (p *ProviderCDROM) mount() error {
	var err error
	// We may need to poll a little for device ready
	errISO := syscall.Mount(p.device, p.mountPoint, "iso9660", syscall.MS_RDONLY, "")
	if errISO != nil {
		errFat := syscall.Mount(p.device, p.mountPoint, "vfat", syscall.MS_RDONLY, "")
		if errFat != nil {
			err = fmt.Errorf("failed mounting %s: %v %v", p.device, errISO, errFat)
			p.err = err
		}
	}
	return err
}

// unmount removes the mount
func (p *ProviderCDROM) unmount() {
	_ = syscall.Unmount(p.mountPoint, 0)
}

// uniqueString returns a unique subset of the string slice provided.
func uniqueString(input []string) []string {
	u := make([]string, 0, len(input))
	m := make(map[string]bool)

	for _, val := range input {
		if _, ok := m[val]; !ok {
			m[val] = true
			u = append(u, val)
		}
	}

	return u
}
   07070100000A67000081A4000000000000000000000001645E367C00001101000000000000000000000000000000000000006200000000elemental-cli-0.3.1/vendor/github.com/rancher-sandbox/linuxkit/providers/provider_digitalocean.go /*
Copyright © 2022 - 2023 SUSE LLC

Copyright © 2015-2017 Docker, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package providers

import (
	"fmt"
	"io"
	"log"
	"net/http"
	"os"
	"path"
	"time"
)

const (
	digitalOceanMetaDataURL = "http://169.254.169.254/metadata/v1/"
)

// ProviderDigitalOcean is the type implementing the Provider interface for DigitalOcean
type ProviderDigitalOcean struct {
}

// NewDigitalOcean returns a new ProviderDigitalOcean
func NewDigitalOcean() *ProviderDigitalOcean {
	return &ProviderDigitalOcean{}
}

func (p *ProviderDigitalOcean) String() string {
	return "DigitalOcean"
}

// Probe checks if we are running on DigitalOcean
func (p *ProviderDigitalOcean) Probe() bool {
	// Getting the index should always work...
	_, err := digitalOceanGet(digitalOceanMetaDataURL)
	return err == nil
}

// Extract gets both the DigitalOcean specific and generic userdata
func (p *ProviderDigitalOcean) Extract() ([]byte, error) {
	// Get host name. This must not fail
	hostname, err := digitalOceanGet(digitalOceanMetaDataURL + "hostname")
	if err != nil {
		return nil, err
	}
	err = os.WriteFile(path.Join(ConfigPath, Hostname), hostname, 0644)
	if err != nil {
		return nil, fmt.Errorf("DigitalOcean: Failed to write hostname: %s", err)
	}

	// public ipv4
	digitalOceanMetaGet("interfaces/public/0/ipv4/address", "public_ipv4", 0644)

	// private ipv4
	digitalOceanMetaGet("interfaces/private/0/ipv4/address", "private_ipv4", 0644)

	// region
	digitalOceanMetaGet("region", "region", 0644)

	// droplet id
	digitalOceanMetaGet("id", "id", 0644)

	// ssh
	if err := p.handleSSH(); err != nil {
		log.Printf("DigitalOcean: Failed to get ssh data: %s", err)
	}

	// Generic userdata
	userData, err := digitalOceanGet(digitalOceanMetaDataURL + "user-data")
	if err != nil {
		log.Printf("DigitalOcean: Failed to get user-data: %s", err)
		// This is not an error
		return nil, nil
	}
	return userData, nil
}

// lookup a value (lookupName) in DigitalOcean metaservice and store in given fileName
func digitalOceanMetaGet(lookupName string, fileName string, fileMode os.FileMode) {
	if lookupValue, err := digitalOceanGet(digitalOceanMetaDataURL + lookupName); err == nil {
		// we got a value from the metadata server, now save to filesystem
		err = os.WriteFile(path.Join(ConfigPath, fileName), lookupValue, fileMode)
		if err != nil {
			// we couldn't save the file for some reason
			log.Printf("DigitalOcean: Failed to write %s:%s %s", fileName, lookupValue, err)
		}
	} else {
		// we did not get a value back from the metadata server
		log.Printf("DigitalOcean: Failed to get %s: %s", lookupName, err)
	}
}

// digitalOceanGet requests and extracts the requested URL
func digitalOceanGet(url string) ([]byte, error) {
	var client = &http.Client{
		Timeout: time.Second * 2,
	}

	req, err := http.NewRequest("", url, nil)
	if err != nil {
		return nil, fmt.Errorf("DigitalOcean: http.NewRequest failed: %s", err)
	}

	resp, err := client.Do(req)
	if err != nil {
		return nil, fmt.Errorf("DigitalOcean: Could not contact metadata service: %s", err)
	}
	if resp.StatusCode != 200 {
		return nil, fmt.Errorf("DigitalOcean: Status not ok: %d", resp.StatusCode)
	}
	body, err := io.ReadAll(resp.Body)
	if err != nil {
		return nil, fmt.Errorf("DigitalOcean: Failed to read http response: %s", err)
	}
	return body, nil
}

// SSH keys:
func (p *ProviderDigitalOcean) handleSSH() error {
	sshKeys, err := digitalOceanGet(digitalOceanMetaDataURL + "public-keys")
	if err != nil {
		return fmt.Errorf("Failed to get sshKeys: %s", err)
	}

	if err := os.Mkdir(path.Join(ConfigPath, SSH), 0755); err != nil {
		return fmt.Errorf("Failed to create %s: %s", SSH, err)
	}

	err = os.WriteFile(path.Join(ConfigPath, SSH, "authorized_keys"), sshKeys, 0600)
	if err != nil {
		return fmt.Errorf("Failed to write ssh keys: %s", err)
	}
	return nil
}
   07070100000A68000081A4000000000000000000000001645E367C00000383000000000000000000000000000000000000005A00000000elemental-cli-0.3.1/vendor/github.com/rancher-sandbox/linuxkit/providers/provider_file.go /*
Copyright © 2022 - 2023 SUSE LLC

Copyright © 2015-2017 Docker, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package providers

import (
	"os"
)

type FileProvider string

func (p FileProvider) String() string {
	return string(p)
}

func (p FileProvider) Probe() bool {
	_, err := os.Stat(string(p))
	return err == nil
}

func (p FileProvider) Extract() ([]byte, error) {
	return os.ReadFile(string(p))
}
 07070100000A69000081A4000000000000000000000001645E367C00000F10000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/github.com/rancher-sandbox/linuxkit/providers/provider_gcp.go  /*
Copyright © 2022 - 2023 SUSE LLC

Copyright © 2015-2017 Docker, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package providers

import (
	"fmt"
	"io"
	"log"
	"net/http"
	"os"
	"path"
	"strings"
	"time"
)

const (
	project  = "http://metadata.google.internal/computeMetadata/v1/project/"
	instance = "http://metadata.google.internal/computeMetadata/v1/instance/"
)

// ProviderGCP is the type implementing the Provider interface for GCP
type ProviderGCP struct {
}

// NewGCP returns a new ProviderGCP
func NewGCP() *ProviderGCP {
	return &ProviderGCP{}
}

func (p *ProviderGCP) String() string {
	return "GCP"
}

// Probe checks if we are running on GCP
func (p *ProviderGCP) Probe() bool {
	// Getting the hostname should always work...
	_, err := gcpGet(instance + "hostname")
	return err == nil
}

// Extract gets both the GCP specific and generic userdata
func (p *ProviderGCP) Extract() ([]byte, error) {
	// Get host name. This must not fail
	hostname, err := gcpGet(instance + "hostname")
	if err != nil {
		return nil, err
	}
	err = os.WriteFile(path.Join(ConfigPath, Hostname), hostname, 0644)
	if err != nil {
		return nil, fmt.Errorf("GCP: Failed to write hostname: %s", err)
	}

	if err := p.handleSSH(); err != nil {
		log.Printf("GCP: Failed to get ssh data: %s", err)
	}

	// Generic userdata
	userData, err := gcpGet(instance + "attributes/user-data")
	if err != nil {
		log.Printf("GCP: Failed to get user-data: %s", err)
		// This is not an error
		return nil, nil
	}
	return userData, nil
}

// gcpGet requests and extracts the requested URL
func gcpGet(url string) ([]byte, error) {
	var client = &http.Client{
		Timeout: time.Second * 2,
	}

	req, err := http.NewRequest("", url, nil)
	if err != nil {
		return nil, fmt.Errorf("GCP: http.NewRequest failed: %s", err)
	}
	req.Header.Set("Metadata-Flavor", "Google")

	resp, err := client.Do(req)
	if err != nil {
		return nil, fmt.Errorf("GCP: Could not contact metadata service: %s", err)
	}
	if resp.StatusCode != 200 {
		return nil, fmt.Errorf("GCP: Status not ok: %d", resp.StatusCode)
	}
	body, err := io.ReadAll(resp.Body)
	if err != nil {
		return nil, fmt.Errorf("GCP: Failed to read http response: %s", err)
	}
	return body, nil
}

// SSH keys:
// TODO also retrieve the instance keys and respect block
//
//	project keys see:
//	https://cloud.google.com/compute/docs/instances/ssh-keys
//
// The keys have usernames attached, but as a simplification
// we are going to add them all to one root file
// TODO split them into individual user files and make the ssh
//
//	container construct those users
func (p *ProviderGCP) handleSSH() error {
	sshKeys, err := gcpGet(project + "attributes/ssh-keys")
	if err != nil {
		return fmt.Errorf("Failed to get sshKeys: %s", err)
	}

	if _, err := os.Stat(path.Join(ConfigPath, SSH)); os.IsNotExist(err) {
		if err := os.Mkdir(path.Join(ConfigPath, SSH), 0755); err != nil {
			return fmt.Errorf("Failed to create %s: %s", SSH, err)
		}
	}

	rootKeys := ""
	for _, line := range strings.Split(string(sshKeys), "\n") {
		parts := strings.SplitN(line, ":", 2)
		// ignoring username for now
		if len(parts) == 2 {
			rootKeys = rootKeys + parts[1] + "\n"
		}
	}
	err = os.WriteFile(path.Join(ConfigPath, SSH, "authorized_keys"), []byte(rootKeys), 0600)
	if err != nil {
		return fmt.Errorf("Failed to write ssh keys: %s", err)
	}
	return nil
}
07070100000A6A000081A4000000000000000000000001645E367C00001102000000000000000000000000000000000000005D00000000elemental-cli-0.3.1/vendor/github.com/rancher-sandbox/linuxkit/providers/provider_hetzner.go  /*
Copyright © 2022 - 2023 SUSE LLC

Copyright © 2015-2017 Docker, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package providers

import (
	"encoding/json"
	"fmt"
	"io"
	"log"
	"net/http"
	"os"
	"path"
	"time"
)

// ProviderHetzner is the type implementing the Provider interface for Hetzner
type ProviderHetzner struct {
}

// NewHetzner returns a new ProviderHetzner
func NewHetzner() *ProviderHetzner {
	return &ProviderHetzner{}
}

func (p *ProviderHetzner) String() string {
	return "Hetzner"
}

// Probe checks if we are running on Hetzner
func (p *ProviderHetzner) Probe() bool {
	// Getting the hostname should always work...
	_, err := hetznerGet(metaDataURL + "hostname")
	return err == nil
}

// Extract gets both the Hetzner specific and generic userdata
func (p *ProviderHetzner) Extract() ([]byte, error) {
	// Get host name. This must not fail
	hostname, err := hetznerGet(metaDataURL + "hostname")
	if err != nil {
		return nil, err
	}
	err = os.WriteFile(path.Join(ConfigPath, Hostname), hostname, 0644)
	if err != nil {
		return nil, fmt.Errorf("Hetzner: Failed to write hostname: %s", err)
	}

	// public ipv4
	hetznerMetaGet("public-ipv4", "public_ipv4", 0644)

	// private ipv4
	hetznerMetaGet("local-ipv4", "local_ipv4", 0644)

	// instance-id
	hetznerMetaGet("instance-id", "instance_id", 0644)

	// // local-hostname
	// hetznerMetaGet("local-hostname", "local_hostname", 0644)

	// ssh
	if err := p.handleSSH(); err != nil {
		log.Printf("Hetzner: Failed to get ssh data: %s", err)
	}

	// Generic userdata
	userData, err := hetznerGet(userDataURL)
	if err != nil {
		log.Printf("Hetzner: Failed to get user-data: %s", err)
		// This is not an error
		return nil, nil
	}
	return userData, nil
}

// lookup a value (lookupName) in hetzner metaservice and store in given fileName
func hetznerMetaGet(lookupName string, fileName string, fileMode os.FileMode) {
	if lookupValue, err := hetznerGet(metaDataURL + lookupName); err == nil {
		// we got a value from the metadata server, now save to filesystem
		err = os.WriteFile(path.Join(ConfigPath, fileName), lookupValue, fileMode)
		if err != nil {
			// we couldn't save the file for some reason
			log.Printf("Hetzner: Failed to write %s:%s %s", fileName, lookupValue, err)
		}
	} else {
		// we did not get a value back from the metadata server
		log.Printf("Hetzner: Failed to get %s: %s", lookupName, err)
	}
}

// hetznerGet requests and extracts the requested URL
func hetznerGet(url string) ([]byte, error) {
	var client = &http.Client{
		Timeout: time.Second * 2,
	}

	req, err := http.NewRequest("", url, nil)
	if err != nil {
		return nil, fmt.Errorf("Hetzner: http.NewRequest failed: %s", err)
	}

	resp, err := client.Do(req)
	if err != nil {
		return nil, fmt.Errorf("Hetzner: Could not contact metadata service: %s", err)
	}
	if resp.StatusCode != 200 {
		return nil, fmt.Errorf("Hetzner: Status not ok: %d", resp.StatusCode)
	}
	body, err := io.ReadAll(resp.Body)
	if err != nil {
		return nil, fmt.Errorf("Hetzner: Failed to read http response: %s", err)
	}
	return body, nil
}

// SSH keys:
func (p *ProviderHetzner) handleSSH() error {
	sshKeysJSON, err := hetznerGet(metaDataURL + "public-keys")
	if err != nil {
		return fmt.Errorf("Failed to get sshKeys: %s", err)
	}

	var sshKeys []string
	err = json.Unmarshal(sshKeysJSON, &sshKeys)
	if err != nil {
		return fmt.Errorf("Failed to get sshKeys: %s", err)
	}

	if err := os.Mkdir(path.Join(ConfigPath, SSH), 0755); err != nil {
		return fmt.Errorf("Failed to create %s: %s", SSH, err)
	}

	fileHandle, _ := os.OpenFile(path.Join(ConfigPath, SSH, "authorized_keys"), os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0600)
	defer fileHandle.Close()

	for _, sshKey := range sshKeys {
		_, err = fileHandle.WriteString(sshKey + "\n")
		if err != nil {
			return fmt.Errorf("Failed to write ssh keys: %s", err)
		}
	}

	return nil
}
  07070100000A6B000081A4000000000000000000000001645E367C0000110F000000000000000000000000000000000000005F00000000elemental-cli-0.3.1/vendor/github.com/rancher-sandbox/linuxkit/providers/provider_metaldata.go    /*
Copyright © 2022 - 2023 SUSE LLC

Copyright © 2015-2017 Docker, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package providers

import (
	"fmt"
	"io"
	"log"
	"net/http"
	"os"
	"path"
	"time"
)

const (
	metaldataMetaDataURL = "http://metaldata/get/meta/"
	metaldataUserDataURL = "http://metaldata/get/user"
)

// ProviderMetaldata is the type implementing the Provider interface for Metaldata
type ProviderMetaldata struct {
}

// NewMetalData returns a new ProviderMetaldata
func NewMetalData() *ProviderMetaldata {
	return &ProviderMetaldata{}
}

func (p *ProviderMetaldata) String() string {
	return "metaldata"
}

// Probe checks if we are running on Metaldata
func (p *ProviderMetaldata) Probe() bool {
	log.Println("Metaldata: Probing...")
	// Getting the hostname should always work...
	_, err := metaldataGet(metaldataMetaDataURL + "hostname")
	return err == nil
}

// Extract gets both the Metaldata specific and generic userdata
func (p *ProviderMetaldata) Extract() ([]byte, error) {
	// Get host name. This must not fail
	hostname, err := metaldataGet(metaldataMetaDataURL + "hostname")
	if err != nil {
		return nil, err
	}
	err = os.WriteFile(path.Join(ConfigPath, Hostname), hostname, 0644)
	if err != nil {
		return nil, fmt.Errorf("Metaldata: Failed to write hostname: %s", err)
	}

	// public ipv4
	metaldataMetaGet("public-ipv4", "public_ipv4", 0644)

	// private ipv4
	metaldataMetaGet("private-ipv4", "private_ipv4", 0644)

	// failure domain
	metaldataMetaGet("failure-domain", "failure_domain", 0644)

	// id
	metaldataMetaGet("machine-id", "machine_id", 0644)

	// type
	metaldataMetaGet("machine-type", "machine_type", 0644)

	// ssh
	if err := p.handleSSH(); err != nil {
		log.Printf("Metaldata: Failed to get ssh data: %s", err)
	}

	// Generic userdata
	userData, err := metaldataGet(metaldataUserDataURL)
	if err != nil {
		log.Printf("Metaldata: Failed to get user-data: %s", err)
		// This is not an error
		return nil, nil
	}
	return userData, nil
}

// lookup a value (lookupName) in Metaldata metaservice and store in given fileName
func metaldataMetaGet(lookupName string, fileName string, fileMode os.FileMode) {
	if lookupValue, err := metaldataGet(metaldataMetaDataURL + lookupName); err == nil {
		// we got a value from the metadata server, now save to filesystem
		err = os.WriteFile(path.Join(ConfigPath, fileName), lookupValue, fileMode)
		if err != nil {
			// we couldn't save the file for some reason
			log.Printf("Metaldata: Failed to write %s:%s %s", fileName, lookupValue, err)
		}
	} else {
		// we did not get a value back from the metadata server
		log.Printf("Metaldata: Failed to get %s: %s", lookupName, err)
	}
}

// metaldataGet requests and extracts the requested URL
func metaldataGet(url string) ([]byte, error) {
	var client = &http.Client{
		Timeout: time.Second * 2,
	}

	req, err := http.NewRequest("", url, nil)
	if err != nil {
		return nil, fmt.Errorf("Metaldata: http.NewRequest failed: %s", err)
	}

	resp, err := client.Do(req)
	if err != nil {
		return nil, fmt.Errorf("Metaldata: Could not contact metadata service: %s", err)
	}
	if resp.StatusCode != 200 {
		return nil, fmt.Errorf("Metaldata: Status not ok: %d", resp.StatusCode)
	}
	body, err := io.ReadAll(resp.Body)
	if err != nil {
		return nil, fmt.Errorf("Metaldata: Failed to read http response: %s", err)
	}
	return body, nil
}

// SSH keys:
func (p *ProviderMetaldata) handleSSH() error {
	sshKeys, err := metaldataGet(metaldataMetaDataURL + "authorized-keys")
	if err != nil {
		return fmt.Errorf("Failed to get sshKeys: %s", err)
	}

	if err := os.Mkdir(path.Join(ConfigPath, SSH), 0755); err != nil {
		return fmt.Errorf("Failed to create %s: %s", SSH, err)
	}

	err = os.WriteFile(path.Join(ConfigPath, SSH, "authorized_keys"), sshKeys, 0600)
	if err != nil {
		return fmt.Errorf("Failed to write ssh keys: %s", err)
	}
	return nil
}
 07070100000A6C000081A4000000000000000000000001645E367C000010C9000000000000000000000000000000000000005F00000000elemental-cli-0.3.1/vendor/github.com/rancher-sandbox/linuxkit/providers/provider_openstack.go    /*
Copyright © 2022 - 2023 SUSE LLC

Copyright © 2015-2017 Docker, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package providers

import (
	"fmt"
	"io"
	"log"
	"net/http"
	"os"
	"path"
	"time"
)

// ProviderOpenstack is the type implementing the Provider interface for OpenStack
type ProviderOpenstack struct {
}

// NewOpenstack returns a new ProviderOpenstack
func NewOpenstack() *ProviderOpenstack {
	return &ProviderOpenstack{}
}

func (p *ProviderOpenstack) String() string {
	return "openstack"
}

// Probe checks if we are running on OpenStack
func (p *ProviderOpenstack) Probe() bool {
	// Getting the hostname should always work...
	_, err := openstackGet(metaDataURL + "hostname")
	return err == nil
}

// Extract gets both the OpenStack specific and generic userdata
func (p *ProviderOpenstack) Extract() ([]byte, error) {
	// Get host name. This must not fail
	hostname, err := openstackGet(metaDataURL + "hostname")
	if err != nil {
		return nil, err
	}
	err = os.WriteFile(path.Join(ConfigPath, Hostname), hostname, 0644)
	if err != nil {
		return nil, fmt.Errorf("OpenStack: Failed to write hostname: %s", err)
	}

	// public ipv4
	openstackMetaGet("public-ipv4", "public_ipv4", 0644)

	// private ipv4
	openstackMetaGet("local-ipv4", "local_ipv4", 0644)

	// availability zone
	openstackMetaGet("placement/availability-zone", "availability_zone", 0644)

	// instance type
	openstackMetaGet("instance-type", "instance_type", 0644)

	// instance-id
	openstackMetaGet("instance-id", "instance_id", 0644)

	// local-hostname
	openstackMetaGet("local-hostname", "local_hostname", 0644)

	// ssh
	if err := p.handleSSH(); err != nil {
		log.Printf("OpenStack: Failed to get ssh data: %s", err)
	}

	// Generic userdata
	userData, err := openstackGet(userDataURL)
	if err != nil {
		log.Printf("OpenStack: Failed to get user-data: %s", err)
		// This is not an error
		return nil, nil
	}
	return userData, nil
}

// lookup a value (lookupName) in OpenStack's metaservice and store in given fileName
func openstackMetaGet(lookupName string, fileName string, fileMode os.FileMode) {
	if lookupValue, err := openstackGet(metaDataURL + lookupName); err == nil {
		// we got a value from the metadata server, now save to filesystem
		err = os.WriteFile(path.Join(ConfigPath, fileName), lookupValue, fileMode)
		if err != nil {
			// we couldn't save the file for some reason
			log.Printf("OpenStack: Failed to write %s:%s %s", fileName, lookupValue, err)
		}
	} else {
		// we did not get a value back from the metadata server
		log.Printf("OpenStack: Failed to get %s: %s", lookupName, err)
	}
}

// openstackGet requests and extracts the requested URL
func openstackGet(url string) ([]byte, error) {
	var client = &http.Client{
		Timeout: time.Second * 2,
	}

	req, err := http.NewRequest("", url, nil)
	if err != nil {
		return nil, fmt.Errorf("OpenStack: http.NewRequest failed: %s", err)
	}

	resp, err := client.Do(req)
	if err != nil {
		return nil, fmt.Errorf("OpenStack: Could not contact metadata service: %s", err)
	}
	if resp.StatusCode != 200 {
		return nil, fmt.Errorf("OpenStack: Status not ok: %d", resp.StatusCode)
	}
	body, err := io.ReadAll(resp.Body)
	if err != nil {
		return nil, fmt.Errorf("OpenStack: Failed to read http response: %s", err)
	}
	return body, nil
}

// SSH keys:
func (p *ProviderOpenstack) handleSSH() error {
	sshKeys, err := openstackGet(metaDataURL + "public-keys/0/openssh-key")
	if err != nil {
		return fmt.Errorf("Failed to get sshKeys: %s", err)
	}

	if err := os.Mkdir(path.Join(ConfigPath, SSH), 0755); err != nil {
		return fmt.Errorf("Failed to create %s: %s", SSH, err)
	}

	err = os.WriteFile(path.Join(ConfigPath, SSH, "authorized_keys"), sshKeys, 0600)
	if err != nil {
		return fmt.Errorf("Failed to write ssh keys: %s", err)
	}
	return nil
}
   07070100000A6D000081A4000000000000000000000001645E367C0000174D000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/rancher-sandbox/linuxkit/providers/provider_packet.go   /*
Copyright © 2022 - 2023 SUSE LLC

Copyright © 2015-2017 Docker, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package providers

import (
	"fmt"
	"net"
	"os"
	"path"
	"strconv"
	"strings"

	"github.com/packethost/packngo/metadata"
	"github.com/vishvananda/netlink"
)

// ProviderPacket is the type implementing the Provider interface for Packet.net
type ProviderPacket struct {
	metadata *metadata.CurrentDevice
	err      error
}

// NewPacket returns a new ProviderPacket
func NewPacket() *ProviderPacket {
	return &ProviderPacket{}
}

func (p *ProviderPacket) String() string {
	return "Packet"
}

// Probe checks if we are running on Packet
func (p *ProviderPacket) Probe() bool {
	// Unfortunately the host is resolveable globally, so no easy test
	p.metadata, p.err = metadata.GetMetadata()
	return p.err == nil
}

// Extract gets both the Packet specific and generic userdata
func (p *ProviderPacket) Extract() ([]byte, error) {
	// do not retrieve if we Probed
	if p.metadata == nil && p.err == nil {
		p.metadata, p.err = metadata.GetMetadata()
		if p.err != nil {
			return nil, p.err
		}
	} else if p.err != nil {
		return nil, p.err
	}

	if err := os.WriteFile(path.Join(ConfigPath, Hostname), []byte(p.metadata.Hostname), 0644); err != nil {
		return nil, fmt.Errorf("Packet: Failed to write hostname: %s", err)
	}

	if err := os.MkdirAll(path.Join(ConfigPath, SSH), 0755); err != nil {
		return nil, fmt.Errorf("Failed to create %s: %s", SSH, err)
	}

	sshKeys := strings.Join(p.metadata.SSHKeys, "\n")

	if err := os.WriteFile(path.Join(ConfigPath, SSH, "authorized_keys"), []byte(sshKeys), 0600); err != nil {
		return nil, fmt.Errorf("Failed to write ssh keys: %s", err)
	}

	if err := networkConfig(p.metadata.Network); err != nil {
		return nil, err
	}

	userData, err := metadata.GetUserData()
	if err != nil {
		return nil, fmt.Errorf("Packet: failed to get userdata: %s", err)
	}

	if len(userData) == 0 {
		return nil, nil
	}

	if len(userData) > 6 && string(userData[0:6]) == "#!ipxe" {
		// if you use the userdata for ipxe boot, no use as userdata
		return nil, nil
	}

	return userData, nil
}

// networkConfig handles Packet network configuration, primarily bonding
func networkConfig(ni metadata.NetworkInfo) error {
	// rename interfaces to match what the metadata calls them
	links, err := netlink.LinkList()
	if err != nil {
		return fmt.Errorf("Failed to list links: %v", err)
	}
	for _, link := range links {
		attrs := link.Attrs()
		mac := attrs.HardwareAddr.String()
		for _, iface := range ni.Interfaces {
			if iface.MAC == mac {
				// remove existing addresses from link
				addresses, err := netlink.AddrList(link, netlink.FAMILY_ALL)
				if err != nil {
					return fmt.Errorf("Cannot list addresses on interface: %v", err)
				}
				for _, addr := range addresses {
					if err := netlink.AddrDel(link, &addr); err != nil {
						return fmt.Errorf("Cannot remove address from interface: %v", err)
					}
				}
				// links need to be down to be bonded
				if err := netlink.LinkSetDown(link); err != nil {
					return fmt.Errorf("Cannot down link: %v", err)
				}
				// see if we need to rename interface
				if iface.Name != attrs.Name {
					if err := netlink.LinkSetName(link, iface.Name); err != nil {
						return fmt.Errorf("Interface rename failed: %v", err)
					}
				}
			}
		}
	}

	// set up bonding
	la := netlink.LinkAttrs{Name: "bond0"}
	bond := &netlink.GenericLink{la, "bond"}
	if err := netlink.LinkAdd(bond); err != nil {
		// weirdly creating a bind always seems to return EEXIST
		fmt.Fprintf(os.Stderr, "Error adding bond0: %v (ignoring)", err)
	}
	if err := os.WriteFile("/sys/class/net/bond0/bonding/mode", []byte(strconv.Itoa(int(ni.Bonding.Mode))), 0); err != nil {
		return fmt.Errorf("Cannot write to /sys/class/net/bond0/bonding/mode: %v", err)
	}
	if err := netlink.LinkSetUp(bond); err != nil {
		return fmt.Errorf("Failed to bring bond0 up: %v", err)
	}
	for _, iface := range ni.Interfaces {
		link, err := netlink.LinkByName(iface.Name)
		if err != nil {
			return fmt.Errorf("Cannot find interface %s: %v", iface.Name, err)
		}
		if err := netlink.LinkSetMasterByIndex(link, bond.Attrs().Index); err != nil {
			return fmt.Errorf("Cannot join %s to bond0: %v", iface.Name, err)
		}
	}

	// set up addresses and routes
	for _, address := range ni.Addresses {
		cidr := "/" + strconv.Itoa(address.NetworkBits)
		addr, err := netlink.ParseAddr(address.Address.String() + cidr)
		if err != nil {
			return err
		}
		if err := netlink.AddrAdd(bond, addr); err != nil {
			return fmt.Errorf("Failed to add address to bonded interface: %v", err)
		}
		var additionalNet string
		switch {
		case address.Public && address.Family == metadata.IPv4:
			additionalNet = "0.0.0.0/0"
		case address.Public && address.Family == metadata.IPv6:
			additionalNet = "::/0"
		case !address.Public && address.Family == metadata.IPv4:
			// add a gateway for eg 10.0.0.0/8
			mask := address.Address.DefaultMask()
			masked := address.Address.Mask(mask)
			network := &net.IPNet{IP: masked, Mask: mask}
			additionalNet = network.String()
		}
		if additionalNet != "" {
			_, network, err := net.ParseCIDR(additionalNet)
			if err != nil {
				return err
			}
			route := netlink.Route{
				LinkIndex: bond.Attrs().Index,
				Gw:        address.Gateway,
				Dst:       network,
			}
			if err := netlink.RouteAdd(&route); err != nil {
				return fmt.Errorf("Failed to add route: %v", err)
			}
		}
	}

	return nil
}
   07070100000A6E000081A4000000000000000000000001645E367C00001B4C000000000000000000000000000000000000005E00000000elemental-cli-0.3.1/vendor/github.com/rancher-sandbox/linuxkit/providers/provider_scaleway.go /*
Copyright © 2022 - 2023 SUSE LLC

Copyright © 2015-2017 Docker, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package providers

import (
	"bufio"
	"bytes"
	"errors"
	"fmt"
	"io"
	"log"
	"net"
	"net/http"
	"os"
	"path"
	"strconv"
	"strings"
	"time"
)

const (
	scalewayMetadataURL  = "http://169.254.42.42/"
	scalewayUserdataURL  = "169.254.42.42:80"
	instanceIDFile       = "instance_id"
	instanceLocationFile = "instance_location"
	publicIPFile         = "public_ip"
	privateIPFile        = "private_ip"
)

// ProviderScaleway is the type implementing the Provider interface for Scaleway
type ProviderScaleway struct {
}

// NewScaleway returns a new ProviderScaleway
func NewScaleway() *ProviderScaleway {
	return &ProviderScaleway{}
}

func (p *ProviderScaleway) String() string {
	return "Scaleway"
}

// Probe checks if we are running on Scaleway
func (p *ProviderScaleway) Probe() bool {
	// Getting the conf should always work...
	_, err := scalewayGet(scalewayMetadataURL + "conf")
	if err != nil {
		log.Printf(err.Error())
		return false
	}

	return true
}

// Extract gets both the Scaleway specific and generic userdata
func (p *ProviderScaleway) Extract() ([]byte, error) {
	metadata, err := scalewayGet(scalewayMetadataURL + "conf")
	if err != nil {
		return nil, fmt.Errorf("Scaleway: Failed to get conf: %s", err)
	}

	hostname, err := p.extractInformation(metadata, "hostname")
	if err != nil {
		return nil, fmt.Errorf("Scaleway: Failed to get hostname: %s", err)
	}

	err = os.WriteFile(path.Join(ConfigPath, Hostname), hostname, 0644)
	if err != nil {
		return nil, fmt.Errorf("Scaleway: Failed to write hostname: %s", err)
	}

	instanceID, err := p.extractInformation(metadata, "id")
	if err != nil {
		return nil, fmt.Errorf("Scaleway: Failed to get instanceID: %s", err)
	}

	err = os.WriteFile(path.Join(ConfigPath, instanceIDFile), instanceID, 0644)
	if err != nil {
		return nil, fmt.Errorf("Scaleway: Failed to write instance_id: %s", err)
	}

	instanceLocation, err := p.extractInformation(metadata, "location_zone_id")
	if err != nil {
		return nil, fmt.Errorf("Scaleway: Failed to get instanceLocation: %s", err)
	}

	err = os.WriteFile(path.Join(ConfigPath, instanceLocationFile), instanceLocation, 0644)
	if err != nil {
		return nil, fmt.Errorf("Scaleway: Failed to write instance_location: %s", err)
	}

	publicIP, err := p.extractInformation(metadata, "public_ip_address")
	if err != nil {
		// not an error
		log.Printf("Scaleway: Failed to get publicIP: %s", err)
	} else {
		err = os.WriteFile(path.Join(ConfigPath, publicIPFile), publicIP, 0644)
		if err != nil {
			return nil, fmt.Errorf("Scaleway: Failed to write public_ip: %s", err)
		}

	}

	privateIP, err := p.extractInformation(metadata, "private_ip")
	if err != nil {
		return nil, fmt.Errorf("Scaleway: Failed to get privateIP: %s", err)
	}

	err = os.WriteFile(path.Join(ConfigPath, privateIPFile), privateIP, 0644)
	if err != nil {
		return nil, fmt.Errorf("Scaleway: Failed to write private_ip: %s", err)
	}

	if err := p.handleSSH(metadata); err != nil {
		log.Printf("Scaleway: Failed to get ssh data: %s", err)
	}

	// Generic userdata
	userData, err := scalewayGetUserdata()
	if err != nil {
		log.Printf("Scaleway: Failed to get user-data: %s", err)
		// This is not an error
		return nil, nil
	}
	return userData, nil
}

// exctractInformation returns the extracted information given as parameter from the metadata
func (p *ProviderScaleway) extractInformation(metadata []byte, information string) ([]byte, error) {
	query := strings.ToUpper(information) + "="
	for _, line := range bytes.Split(metadata, []byte("\n")) {
		if bytes.HasPrefix(line, []byte(query)) {
			return bytes.TrimPrefix(line, []byte(query)), nil
		}
	}
	return []byte(""), fmt.Errorf("No %s found", information)
}

// scalewayGet requests and extracts the requested URL
func scalewayGet(url string) ([]byte, error) {
	var client = &http.Client{
		Timeout: time.Second * 2,
	}

	req, err := http.NewRequest("", url, nil)
	if err != nil {
		return nil, fmt.Errorf("Scaleway: http.NewRequest failed: %s", err)
	}

	resp, err := client.Do(req)
	if err != nil {
		return nil, fmt.Errorf("Scaleway: Could not contact metadata service: %s", err)
	}
	if resp.StatusCode != 200 {
		return nil, fmt.Errorf("Scaleway: Status not ok: %d", resp.StatusCode)
	}
	body, err := io.ReadAll(resp.Body)
	if err != nil {
		return nil, fmt.Errorf("Scaleway: Failed to read http response: %s", err)
	}
	return body, nil
}

// scalewayGetUserdata returns the userdata of the server, differs from scalewayGet since the source port has to be below 1024 in order to work
func scalewayGetUserdata() ([]byte, error) {
	server, err := net.ResolveTCPAddr("tcp", scalewayUserdataURL)
	if err != nil {
		return nil, err
	}
	var conn *net.TCPConn
	foundPort := false
	for i := 1; i <= 1024; i++ {
		client, err := net.ResolveTCPAddr("tcp", ":"+strconv.Itoa(i))
		if err != nil {
			return nil, err
		}

		conn, err = net.DialTCP("tcp", client, server)
		if err == nil {
			foundPort = true
			break
		}
	}
	if foundPort == false {
		return nil, errors.New("not able to found a free port below 1024")
	}
	defer conn.Close()
	fmt.Fprintf(conn, "GET /user_data/cloud-init HTTP/1.0\r\n\r\n")

	reader := bufio.NewReader(conn)
	resp, err := http.ReadResponse(reader, nil)
	if err != nil || resp.StatusCode == 404 {
		return nil, err
	}
	defer resp.Body.Close()

	body, err := io.ReadAll(resp.Body)
	if err != nil {
		return nil, err
	}

	return body, nil
}

func (p *ProviderScaleway) handleSSH(metadata []byte) error {
	sshKeysNumberString, err := p.extractInformation(metadata, "ssh_public_keys")
	if err != nil {
		return fmt.Errorf("Failed to get sshKeys: %s", err)
	}
	sshKeysNumber, err := strconv.Atoi(string(sshKeysNumberString))
	if err != nil {
		return fmt.Errorf("Failed to convert sshKeysNumber to int: %s", err)
	}

	rootKeys := ""
	for i := 0; i < sshKeysNumber; i++ {
		sshKey, err := p.extractInformation(metadata, "ssh_public_keys_"+strconv.Itoa(i)+"_key")
		if err != nil {
			return fmt.Errorf("Failed to get ssh_key %d: %s", i, err)
		}

		line := string(bytes.Trim(sshKey, "'"))
		rootKeys = rootKeys + line + "\n"
	}

	if err := os.Mkdir(path.Join(ConfigPath, SSH), 0755); err != nil {
		return fmt.Errorf("Failed to create %s: %s", SSH, err)
	}

	err = os.WriteFile(path.Join(ConfigPath, SSH, "authorized_keys"), []byte(rootKeys), 0600)
	if err != nil {
		return fmt.Errorf("Failed to write ssh keys: %s", err)
	}
	return nil
}
07070100000A6F000081A4000000000000000000000001645E367C00000FC9000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/rancher-sandbox/linuxkit/providers/provider_vmware.go   //go:build linux && 386 && amd64

/*
Copyright © 2022 - 2023 SUSE LLC

Copyright © 2015-2017 Docker, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package providers

import (
	"compress/gzip"
	"encoding/base64"
	"fmt"
	"io/ioutil"
	"path"
	"strings"

	log "github.com/sirupsen/logrus"
	"github.com/vmware/vmw-guestinfo/rpcvmx"
	"github.com/vmware/vmw-guestinfo/vmcheck"
)

const (
	guestMetaData = "guestinfo.metadata"

	guestUserData = "guestinfo.userdata"

	guestVendorData = "guestinfo.vendordata"
)

// ProviderVMware implements the Provider interface for VMware guestinfo api
type ProviderVMware struct{}

// NewVMware returns a new VMware Provider
func NewVMware() *ProviderVMware {
	return &ProviderVMware{}
}

// String returns provider name
func (p *ProviderVMware) String() string {
	return "VMWARE"
}

// Probe checks if we are running on VMware and either userdata or metadata is set
func (p *ProviderVMware) Probe() bool {
	isVM, err := vmcheck.IsVirtualWorld()
	if err != nil || !isVM {
		return false
	}

	md, merr := vmwareGet(guestMetaData)
	ud, uerr := vmwareGet(guestUserData)

	return ((merr == nil) && len(md) > 1 && string(md) != "---") || ((uerr == nil) && len(ud) > 1 && string(ud) != "---")
}

// Extract gets the host specific metadata, generic userdata and if set vendordata
// This function returns error if it fails to write metadata or vendordata to disk
func (p *ProviderVMware) Extract() ([]byte, error) {
	// Get vendor data, if empty do not fail
	vendorData, err := vmwareGet(guestVendorData)
	if err != nil {
		log.Debugf("VMWare: Failed to get vendordata: %v", err)
	} else {
		err = ioutil.WriteFile(path.Join(ConfigPath, "vendordata"), vendorData, 0644)
		if err != nil {
			log.Debugf("VMWare: Failed to write vendordata: %v", err)
		}
	}

	// Get metadata
	metaData, err := vmwareGet(guestMetaData)
	if err != nil {
		log.Printf("VMWare: Failed to get metadata: %v", err)
	} else {
		err = ioutil.WriteFile(path.Join(ConfigPath, "metadata"), metaData, 0644)
		if err != nil {
			return nil, fmt.Errorf("VMWare: Failed to write metadata: %s", err)
		}
	}

	// Get userdata
	userData, err := vmwareGet(guestUserData)
	if err != nil {
		log.Printf("VMware: Failed to get userdata: %v", err)
		// This is not an error
		return nil, nil
	}

	return userData, nil
}

// vmwareGet gets and extracts the guestinfo data
func vmwareGet(name string) ([]byte, error) {
	config := rpcvmx.NewConfig()

	// get the gusest info value
	out, err := config.String(name, "")
	if err != nil {
		log.Debugf("Getting guest info %s failed: error %s", name, err)
		return nil, err
	}

	enc, err := config.String(name+".encoding", "")
	if err != nil {
		log.Debugf("Getting guest info %s.encoding failed: error %s", name, err)
		return nil, err
	}

	switch strings.TrimSuffix(enc, "\n") {
	case " ":
		return []byte(strings.TrimSuffix(out, "\n")), nil
	case "base64":
		r := base64.NewDecoder(base64.StdEncoding, strings.NewReader(out))

		dst, err := ioutil.ReadAll(r)
		if err != nil {
			log.Debugf("Decoding base64 of '%s' failed %v", name, err)
			return nil, err
		}

		return dst, nil
	case "gzip+base64":
		r := base64.NewDecoder(base64.StdEncoding, strings.NewReader(out))

		zr, err := gzip.NewReader(r)
		if err != nil {
			log.Debugf("New gzip reader from '%s' failed %v", name, err)
			return nil, err
		}

		dst, err := ioutil.ReadAll(zr)
		if err != nil {
			log.Debugf("Read '%s' failed %v", name, err)
			return nil, err
		}

		return dst, nil
	default:
		return nil, fmt.Errorf("Unknown encoding %s", string(enc))
	}
}
   07070100000A70000081A4000000000000000000000001645E367C000004BF000000000000000000000000000000000000006800000000elemental-cli-0.3.1/vendor/github.com/rancher-sandbox/linuxkit/providers/provider_vmware_unsupported.go   //go:build !(linux && 386 && amd64)

/*
Copyright © 2022 - 2023 SUSE LLC

Copyright © 2015-2017 Docker, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package providers

// ProviderVMware implements VMware provider interface for unsupported architectures
type ProviderVMware struct{}

// NewVMware returns a new VMware Provider
func NewVMware() *ProviderVMware {
	return nil
}

// String implements provider interface
func (p *ProviderVMware) String() string {
	return ""
}

// Probe implements provider interface
func (p *ProviderVMware) Probe() bool {
	return false
}

// Extract implements provider interface
func (p *ProviderVMware) Extract() ([]byte, error) {
	// Get vendor data, if empty do not fail
	return nil, nil
}
 07070100000A71000081A4000000000000000000000001645E367C00000F6F000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/github.com/rancher-sandbox/linuxkit/providers/provider_vultr.go    /*
Copyright © 2022 - 2023 SUSE LLC

Copyright © 2015-2017 Docker, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package providers

import (
	"fmt"
	"io"
	"log"
	"net/http"
	"os"
	"path"
	"time"
)

const (
	vultrMetaDataURL = "http://169.254.169.254/v1/"
)

// ProviderVultr is the type implementing the Provider interface for Vultr
type ProviderVultr struct {
}

// NewVultr returns a new ProviderVultr
func NewVultr() *ProviderVultr {
	return &ProviderVultr{}
}

func (p *ProviderVultr) String() string {
	return "Vultr"
}

// Probe checks if we are running on Vultr
func (p *ProviderVultr) Probe() bool {
	// Getting the index should always work...
	_, err := vultrGet(vultrMetaDataURL)
	return err == nil
}

// Extract gets both the Vultr specific and generic userdata
func (p *ProviderVultr) Extract() ([]byte, error) {
	// Get host name. This must not fail
	hostname, err := vultrGet(vultrMetaDataURL + "hostname")
	if err != nil {
		return nil, err
	}
	err = os.WriteFile(path.Join(ConfigPath, Hostname), hostname, 0644)
	if err != nil {
		return nil, fmt.Errorf("Vultr: Failed to write hostname: %s", err)
	}

	// public ipv4
	vultrMetaGet("interfaces/0/ipv4/address", "public_ipv4", 0644)

	// private ipv4
	vultrMetaGet("interfaces/1/ipv4/address", "private_ipv4", 0644)

	// private netmask
	vultrMetaGet("interfaces/1/ipv4/netmask", "private_netmask", 0644)

	// region code
	vultrMetaGet("region/regioncode", "region_code", 0644)

	// instance-id
	vultrMetaGet("instanceid", "instance_id", 0644)

	// ssh
	if err := p.handleSSH(); err != nil {
		log.Printf("Vultr: Failed to get ssh data: %s", err)
	}

	return nil, nil
}

// lookup a value (lookupName) in Vultr metaservice and store in given fileName
func vultrMetaGet(lookupName string, fileName string, fileMode os.FileMode) {
	if lookupValue, err := vultrGet(vultrMetaDataURL + lookupName); err == nil {
		// we got a value from the metadata server, now save to filesystem
		err = os.WriteFile(path.Join(ConfigPath, fileName), lookupValue, fileMode)
		if err != nil {
			// we couldn't save the file for some reason
			log.Printf("Vultr: Failed to write %s:%s %s", fileName, lookupValue, err)
		}
	} else {
		// we did not get a value back from the metadata server
		log.Printf("Vultr: Failed to get %s: %s", lookupName, err)
	}
}

// vultrGet requests and extracts the requested URL
func vultrGet(url string) ([]byte, error) {
	var client = &http.Client{
		Timeout: time.Second * 2,
	}

	req, err := http.NewRequest("", url, nil)
	if err != nil {
		return nil, fmt.Errorf("Vultr: http.NewRequest failed: %s", err)
	}

	resp, err := client.Do(req)
	if err != nil {
		return nil, fmt.Errorf("Vultr: Could not contact metadata service: %s", err)
	}
	if resp.StatusCode != 200 {
		return nil, fmt.Errorf("Vultr: Status not ok: %d", resp.StatusCode)
	}
	body, err := io.ReadAll(resp.Body)
	if err != nil {
		return nil, fmt.Errorf("Vultr: Failed to read http response: %s", err)
	}
	return body, nil
}

// SSH keys:
func (p *ProviderVultr) handleSSH() error {
	sshKeys, err := vultrGet(vultrMetaDataURL + "public-keys")
	if err != nil {
		return fmt.Errorf("Failed to get sshKeys: %s", err)
	}

	if err := os.Mkdir(path.Join(ConfigPath, SSH), 0755); err != nil {
		return fmt.Errorf("Failed to create %s: %s", SSH, err)
	}

	err = os.WriteFile(path.Join(ConfigPath, SSH, "authorized_keys"), sshKeys, 0600)
	if err != nil {
		return fmt.Errorf("Failed to write ssh keys: %s", err)
	}
	return nil
}
 07070100000A72000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002F00000000elemental-cli-0.3.1/vendor/github.com/russross    07070100000A73000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/russross/blackfriday    07070100000A74000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/russross/blackfriday/v2 07070100000A75000081A4000000000000000000000001645E367C0000002E000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/russross/blackfriday/v2/.gitignore  *.out
*.swp
*.8
*.6
_obj
_test*
markdown
tags
  07070100000A76000081A4000000000000000000000001645E367C00000189000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/russross/blackfriday/v2/.travis.yml sudo: false
language: go
go:
  - "1.10.x"
  - "1.11.x"
  - tip
matrix:
  fast_finish: true
  allow_failures:
    - go: tip
install:
  - # Do nothing. This is needed to prevent default install action "go get -t -v ./..." from happening here (we want it to happen inside script step).
script:
  - go get -t -v ./...
  - diff -u <(echo -n) <(gofmt -d -s .)
  - go tool vet .
  - go test -v ./...
   07070100000A77000081A4000000000000000000000001645E367C00000588000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/russross/blackfriday/v2/LICENSE.txt Blackfriday is distributed under the Simplified BSD License:

> Copyright © 2011 Russ Ross
> All rights reserved.
>
> Redistribution and use in source and binary forms, with or without
> modification, are permitted provided that the following conditions
> are met:
>
> 1.  Redistributions of source code must retain the above copyright
>     notice, this list of conditions and the following disclaimer.
>
> 2.  Redistributions in binary form must reproduce the above
>     copyright notice, this list of conditions and the following
>     disclaimer in the documentation and/or other materials provided with
>     the distribution.
>
> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
> FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
> COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
> INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
> BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
> LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
> CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
> LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
> ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
> POSSIBILITY OF SUCH DAMAGE.
07070100000A78000081A4000000000000000000000001645E367C00002FCC000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/russross/blackfriday/v2/README.md   Blackfriday
[![Build Status][BuildV2SVG]][BuildV2URL]
[![PkgGoDev][PkgGoDevV2SVG]][PkgGoDevV2URL]
===========

Blackfriday is a [Markdown][1] processor implemented in [Go][2]. It
is paranoid about its input (so you can safely feed it user-supplied
data), it is fast, it supports common extensions (tables, smart
punctuation substitutions, etc.), and it is safe for all utf-8
(unicode) input.

HTML output is currently supported, along with Smartypants
extensions.

It started as a translation from C of [Sundown][3].


Installation
------------

Blackfriday is compatible with modern Go releases in module mode.
With Go installed:

    go get github.com/russross/blackfriday/v2

will resolve and add the package to the current development module,
then build and install it. Alternatively, you can achieve the same
if you import it in a package:

    import "github.com/russross/blackfriday/v2"

and `go get` without parameters.

Legacy GOPATH mode is unsupported.


Versions
--------

Currently maintained and recommended version of Blackfriday is `v2`. It's being
developed on its own branch: https://github.com/russross/blackfriday/tree/v2 and the
documentation is available at
https://pkg.go.dev/github.com/russross/blackfriday/v2.

It is `go get`-able in module mode at `github.com/russross/blackfriday/v2`.

Version 2 offers a number of improvements over v1:

* Cleaned up API
* A separate call to [`Parse`][4], which produces an abstract syntax tree for
  the document
* Latest bug fixes
* Flexibility to easily add your own rendering extensions

Potential drawbacks:

* Our benchmarks show v2 to be slightly slower than v1. Currently in the
  ballpark of around 15%.
* API breakage. If you can't afford modifying your code to adhere to the new API
  and don't care too much about the new features, v2 is probably not for you.
* Several bug fixes are trailing behind and still need to be forward-ported to
  v2. See issue [#348](https://github.com/russross/blackfriday/issues/348) for
  tracking.

If you are still interested in the legacy `v1`, you can import it from
`github.com/russross/blackfriday`. Documentation for the legacy v1 can be found
here: https://pkg.go.dev/github.com/russross/blackfriday.


Usage
-----

For the most sensible markdown processing, it is as simple as getting your input
into a byte slice and calling:

```go
output := blackfriday.Run(input)
```

Your input will be parsed and the output rendered with a set of most popular
extensions enabled. If you want the most basic feature set, corresponding with
the bare Markdown specification, use:

```go
output := blackfriday.Run(input, blackfriday.WithNoExtensions())
```

### Sanitize untrusted content

Blackfriday itself does nothing to protect against malicious content. If you are
dealing with user-supplied markdown, we recommend running Blackfriday's output
through HTML sanitizer such as [Bluemonday][5].

Here's an example of simple usage of Blackfriday together with Bluemonday:

```go
import (
    "github.com/microcosm-cc/bluemonday"
    "github.com/russross/blackfriday/v2"
)

// ...
unsafe := blackfriday.Run(input)
html := bluemonday.UGCPolicy().SanitizeBytes(unsafe)
```

### Custom options

If you want to customize the set of options, use `blackfriday.WithExtensions`,
`blackfriday.WithRenderer` and `blackfriday.WithRefOverride`.

### `blackfriday-tool`

You can also check out `blackfriday-tool` for a more complete example
of how to use it. Download and install it using:

    go get github.com/russross/blackfriday-tool

This is a simple command-line tool that allows you to process a
markdown file using a standalone program.  You can also browse the
source directly on github if you are just looking for some example
code:

* <https://github.com/russross/blackfriday-tool>

Note that if you have not already done so, installing
`blackfriday-tool` will be sufficient to download and install
blackfriday in addition to the tool itself. The tool binary will be
installed in `$GOPATH/bin`.  This is a statically-linked binary that
can be copied to wherever you need it without worrying about
dependencies and library versions.

### Sanitized anchor names

Blackfriday includes an algorithm for creating sanitized anchor names
corresponding to a given input text. This algorithm is used to create
anchors for headings when `AutoHeadingIDs` extension is enabled. The
algorithm has a specification, so that other packages can create
compatible anchor names and links to those anchors.

The specification is located at https://pkg.go.dev/github.com/russross/blackfriday/v2#hdr-Sanitized_Anchor_Names.

[`SanitizedAnchorName`](https://pkg.go.dev/github.com/russross/blackfriday/v2#SanitizedAnchorName) exposes this functionality, and can be used to
create compatible links to the anchor names generated by blackfriday.
This algorithm is also implemented in a small standalone package at
[`github.com/shurcooL/sanitized_anchor_name`](https://pkg.go.dev/github.com/shurcooL/sanitized_anchor_name). It can be useful for clients
that want a small package and don't need full functionality of blackfriday.


Features
--------

All features of Sundown are supported, including:

*   **Compatibility**. The Markdown v1.0.3 test suite passes with
    the `--tidy` option.  Without `--tidy`, the differences are
    mostly in whitespace and entity escaping, where blackfriday is
    more consistent and cleaner.

*   **Common extensions**, including table support, fenced code
    blocks, autolinks, strikethroughs, non-strict emphasis, etc.

*   **Safety**. Blackfriday is paranoid when parsing, making it safe
    to feed untrusted user input without fear of bad things
    happening. The test suite stress tests this and there are no
    known inputs that make it crash.  If you find one, please let me
    know and send me the input that does it.

    NOTE: "safety" in this context means *runtime safety only*. In order to
    protect yourself against JavaScript injection in untrusted content, see
    [this example](https://github.com/russross/blackfriday#sanitize-untrusted-content).

*   **Fast processing**. It is fast enough to render on-demand in
    most web applications without having to cache the output.

*   **Thread safety**. You can run multiple parsers in different
    goroutines without ill effect. There is no dependence on global
    shared state.

*   **Minimal dependencies**. Blackfriday only depends on standard
    library packages in Go. The source code is pretty
    self-contained, so it is easy to add to any project, including
    Google App Engine projects.

*   **Standards compliant**. Output successfully validates using the
    W3C validation tool for HTML 4.01 and XHTML 1.0 Transitional.


Extensions
----------

In addition to the standard markdown syntax, this package
implements the following extensions:

*   **Intra-word emphasis supression**. The `_` character is
    commonly used inside words when discussing code, so having
    markdown interpret it as an emphasis command is usually the
    wrong thing. Blackfriday lets you treat all emphasis markers as
    normal characters when they occur inside a word.

*   **Tables**. Tables can be created by drawing them in the input
    using a simple syntax:

    ```
    Name    | Age
    --------|------
    Bob     | 27
    Alice   | 23
    ```

*   **Fenced code blocks**. In addition to the normal 4-space
    indentation to mark code blocks, you can explicitly mark them
    and supply a language (to make syntax highlighting simple). Just
    mark it like this:

        ```go
        func getTrue() bool {
            return true
        }
        ```

    You can use 3 or more backticks to mark the beginning of the
    block, and the same number to mark the end of the block.

    To preserve classes of fenced code blocks while using the bluemonday
    HTML sanitizer, use the following policy:

    ```go
    p := bluemonday.UGCPolicy()
    p.AllowAttrs("class").Matching(regexp.MustCompile("^language-[a-zA-Z0-9]+$")).OnElements("code")
    html := p.SanitizeBytes(unsafe)
    ```

*   **Definition lists**. A simple definition list is made of a single-line
    term followed by a colon and the definition for that term.

        Cat
        : Fluffy animal everyone likes

        Internet
        : Vector of transmission for pictures of cats

    Terms must be separated from the previous definition by a blank line.

*   **Footnotes**. A marker in the text that will become a superscript number;
    a footnote definition that will be placed in a list of footnotes at the
    end of the document. A footnote looks like this:

        This is a footnote.[^1]

        [^1]: the footnote text.

*   **Autolinking**. Blackfriday can find URLs that have not been
    explicitly marked as links and turn them into links.

*   **Strikethrough**. Use two tildes (`~~`) to mark text that
    should be crossed out.

*   **Hard line breaks**. With this extension enabled newlines in the input
    translate into line breaks in the output. This extension is off by default.

*   **Smart quotes**. Smartypants-style punctuation substitution is
    supported, turning normal double- and single-quote marks into
    curly quotes, etc.

*   **LaTeX-style dash parsing** is an additional option, where `--`
    is translated into `&ndash;`, and `---` is translated into
    `&mdash;`. This differs from most smartypants processors, which
    turn a single hyphen into an ndash and a double hyphen into an
    mdash.

*   **Smart fractions**, where anything that looks like a fraction
    is translated into suitable HTML (instead of just a few special
    cases like most smartypant processors). For example, `4/5`
    becomes `<sup>4</sup>&frasl;<sub>5</sub>`, which renders as
    <sup>4</sup>&frasl;<sub>5</sub>.


Other renderers
---------------

Blackfriday is structured to allow alternative rendering engines. Here
are a few of note:

*   [github_flavored_markdown](https://pkg.go.dev/github.com/shurcooL/github_flavored_markdown):
    provides a GitHub Flavored Markdown renderer with fenced code block
    highlighting, clickable heading anchor links.

    It's not customizable, and its goal is to produce HTML output
    equivalent to the [GitHub Markdown API endpoint](https://developer.github.com/v3/markdown/#render-a-markdown-document-in-raw-mode),
    except the rendering is performed locally.

*   [markdownfmt](https://github.com/shurcooL/markdownfmt): like gofmt,
    but for markdown.

*   [LaTeX output](https://gitlab.com/ambrevar/blackfriday-latex):
    renders output as LaTeX.

*   [bfchroma](https://github.com/Depado/bfchroma/): provides convenience
    integration with the [Chroma](https://github.com/alecthomas/chroma) code
    highlighting library. bfchroma is only compatible with v2 of Blackfriday and
    provides a drop-in renderer ready to use with Blackfriday, as well as
    options and means for further customization.

*   [Blackfriday-Confluence](https://github.com/kentaro-m/blackfriday-confluence): provides a [Confluence Wiki Markup](https://confluence.atlassian.com/doc/confluence-wiki-markup-251003035.html) renderer.

*   [Blackfriday-Slack](https://github.com/karriereat/blackfriday-slack): converts markdown to slack message style


TODO
----

*   More unit testing
*   Improve Unicode support. It does not understand all Unicode
    rules (about what constitutes a letter, a punctuation symbol,
    etc.), so it may fail to detect word boundaries correctly in
    some instances. It is safe on all UTF-8 input.


License
-------

[Blackfriday is distributed under the Simplified BSD License](LICENSE.txt)


   [1]: https://daringfireball.net/projects/markdown/ "Markdown"
   [2]: https://golang.org/ "Go Language"
   [3]: https://github.com/vmg/sundown "Sundown"
   [4]: https://pkg.go.dev/github.com/russross/blackfriday/v2#Parse "Parse func"
   [5]: https://github.com/microcosm-cc/bluemonday "Bluemonday"

   [BuildV2SVG]: https://travis-ci.org/russross/blackfriday.svg?branch=v2
   [BuildV2URL]: https://travis-ci.org/russross/blackfriday
   [PkgGoDevV2SVG]: https://pkg.go.dev/badge/github.com/russross/blackfriday/v2
   [PkgGoDevV2URL]: https://pkg.go.dev/github.com/russross/blackfriday/v2
07070100000A79000081A4000000000000000000000001645E367C000086CD000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/russross/blackfriday/v2/block.go    //
// Blackfriday Markdown Processor
// Available at http://github.com/russross/blackfriday
//
// Copyright © 2011 Russ Ross <russ@russross.com>.
// Distributed under the Simplified BSD License.
// See README.md for details.
//

//
// Functions to parse block-level elements.
//

package blackfriday

import (
	"bytes"
	"html"
	"regexp"
	"strings"
	"unicode"
)

const (
	charEntity = "&(?:#x[a-f0-9]{1,8}|#[0-9]{1,8}|[a-z][a-z0-9]{1,31});"
	escapable  = "[!\"#$%&'()*+,./:;<=>?@[\\\\\\]^_`{|}~-]"
)

var (
	reBackslashOrAmp      = regexp.MustCompile("[\\&]")
	reEntityOrEscapedChar = regexp.MustCompile("(?i)\\\\" + escapable + "|" + charEntity)
)

// Parse block-level data.
// Note: this function and many that it calls assume that
// the input buffer ends with a newline.
func (p *Markdown) block(data []byte) {
	// this is called recursively: enforce a maximum depth
	if p.nesting >= p.maxNesting {
		return
	}
	p.nesting++

	// parse out one block-level construct at a time
	for len(data) > 0 {
		// prefixed heading:
		//
		// # Heading 1
		// ## Heading 2
		// ...
		// ###### Heading 6
		if p.isPrefixHeading(data) {
			data = data[p.prefixHeading(data):]
			continue
		}

		// block of preformatted HTML:
		//
		// <div>
		//     ...
		// </div>
		if data[0] == '<' {
			if i := p.html(data, true); i > 0 {
				data = data[i:]
				continue
			}
		}

		// title block
		//
		// % stuff
		// % more stuff
		// % even more stuff
		if p.extensions&Titleblock != 0 {
			if data[0] == '%' {
				if i := p.titleBlock(data, true); i > 0 {
					data = data[i:]
					continue
				}
			}
		}

		// blank lines.  note: returns the # of bytes to skip
		if i := p.isEmpty(data); i > 0 {
			data = data[i:]
			continue
		}

		// indented code block:
		//
		//     func max(a, b int) int {
		//         if a > b {
		//             return a
		//         }
		//         return b
		//      }
		if p.codePrefix(data) > 0 {
			data = data[p.code(data):]
			continue
		}

		// fenced code block:
		//
		// ``` go
		// func fact(n int) int {
		//     if n <= 1 {
		//         return n
		//     }
		//     return n * fact(n-1)
		// }
		// ```
		if p.extensions&FencedCode != 0 {
			if i := p.fencedCodeBlock(data, true); i > 0 {
				data = data[i:]
				continue
			}
		}

		// horizontal rule:
		//
		// ------
		// or
		// ******
		// or
		// ______
		if p.isHRule(data) {
			p.addBlock(HorizontalRule, nil)
			var i int
			for i = 0; i < len(data) && data[i] != '\n'; i++ {
			}
			data = data[i:]
			continue
		}

		// block quote:
		//
		// > A big quote I found somewhere
		// > on the web
		if p.quotePrefix(data) > 0 {
			data = data[p.quote(data):]
			continue
		}

		// table:
		//
		// Name  | Age | Phone
		// ------|-----|---------
		// Bob   | 31  | 555-1234
		// Alice | 27  | 555-4321
		if p.extensions&Tables != 0 {
			if i := p.table(data); i > 0 {
				data = data[i:]
				continue
			}
		}

		// an itemized/unordered list:
		//
		// * Item 1
		// * Item 2
		//
		// also works with + or -
		if p.uliPrefix(data) > 0 {
			data = data[p.list(data, 0):]
			continue
		}

		// a numbered/ordered list:
		//
		// 1. Item 1
		// 2. Item 2
		if p.oliPrefix(data) > 0 {
			data = data[p.list(data, ListTypeOrdered):]
			continue
		}

		// definition lists:
		//
		// Term 1
		// :   Definition a
		// :   Definition b
		//
		// Term 2
		// :   Definition c
		if p.extensions&DefinitionLists != 0 {
			if p.dliPrefix(data) > 0 {
				data = data[p.list(data, ListTypeDefinition):]
				continue
			}
		}

		// anything else must look like a normal paragraph
		// note: this finds underlined headings, too
		data = data[p.paragraph(data):]
	}

	p.nesting--
}

func (p *Markdown) addBlock(typ NodeType, content []byte) *Node {
	p.closeUnmatchedBlocks()
	container := p.addChild(typ, 0)
	container.content = content
	return container
}

func (p *Markdown) isPrefixHeading(data []byte) bool {
	if data[0] != '#' {
		return false
	}

	if p.extensions&SpaceHeadings != 0 {
		level := 0
		for level < 6 && level < len(data) && data[level] == '#' {
			level++
		}
		if level == len(data) || data[level] != ' ' {
			return false
		}
	}
	return true
}

func (p *Markdown) prefixHeading(data []byte) int {
	level := 0
	for level < 6 && level < len(data) && data[level] == '#' {
		level++
	}
	i := skipChar(data, level, ' ')
	end := skipUntilChar(data, i, '\n')
	skip := end
	id := ""
	if p.extensions&HeadingIDs != 0 {
		j, k := 0, 0
		// find start/end of heading id
		for j = i; j < end-1 && (data[j] != '{' || data[j+1] != '#'); j++ {
		}
		for k = j + 1; k < end && data[k] != '}'; k++ {
		}
		// extract heading id iff found
		if j < end && k < end {
			id = string(data[j+2 : k])
			end = j
			skip = k + 1
			for end > 0 && data[end-1] == ' ' {
				end--
			}
		}
	}
	for end > 0 && data[end-1] == '#' {
		if isBackslashEscaped(data, end-1) {
			break
		}
		end--
	}
	for end > 0 && data[end-1] == ' ' {
		end--
	}
	if end > i {
		if id == "" && p.extensions&AutoHeadingIDs != 0 {
			id = SanitizedAnchorName(string(data[i:end]))
		}
		block := p.addBlock(Heading, data[i:end])
		block.HeadingID = id
		block.Level = level
	}
	return skip
}

func (p *Markdown) isUnderlinedHeading(data []byte) int {
	// test of level 1 heading
	if data[0] == '=' {
		i := skipChar(data, 1, '=')
		i = skipChar(data, i, ' ')
		if i < len(data) && data[i] == '\n' {
			return 1
		}
		return 0
	}

	// test of level 2 heading
	if data[0] == '-' {
		i := skipChar(data, 1, '-')
		i = skipChar(data, i, ' ')
		if i < len(data) && data[i] == '\n' {
			return 2
		}
		return 0
	}

	return 0
}

func (p *Markdown) titleBlock(data []byte, doRender bool) int {
	if data[0] != '%' {
		return 0
	}
	splitData := bytes.Split(data, []byte("\n"))
	var i int
	for idx, b := range splitData {
		if !bytes.HasPrefix(b, []byte("%")) {
			i = idx // - 1
			break
		}
	}

	data = bytes.Join(splitData[0:i], []byte("\n"))
	consumed := len(data)
	data = bytes.TrimPrefix(data, []byte("% "))
	data = bytes.Replace(data, []byte("\n% "), []byte("\n"), -1)
	block := p.addBlock(Heading, data)
	block.Level = 1
	block.IsTitleblock = true

	return consumed
}

func (p *Markdown) html(data []byte, doRender bool) int {
	var i, j int

	// identify the opening tag
	if data[0] != '<' {
		return 0
	}
	curtag, tagfound := p.htmlFindTag(data[1:])

	// handle special cases
	if !tagfound {
		// check for an HTML comment
		if size := p.htmlComment(data, doRender); size > 0 {
			return size
		}

		// check for an <hr> tag
		if size := p.htmlHr(data, doRender); size > 0 {
			return size
		}

		// no special case recognized
		return 0
	}

	// look for an unindented matching closing tag
	// followed by a blank line
	found := false
	/*
		closetag := []byte("\n</" + curtag + ">")
		j = len(curtag) + 1
		for !found {
			// scan for a closing tag at the beginning of a line
			if skip := bytes.Index(data[j:], closetag); skip >= 0 {
				j += skip + len(closetag)
			} else {
				break
			}

			// see if it is the only thing on the line
			if skip := p.isEmpty(data[j:]); skip > 0 {
				// see if it is followed by a blank line/eof
				j += skip
				if j >= len(data) {
					found = true
					i = j
				} else {
					if skip := p.isEmpty(data[j:]); skip > 0 {
						j += skip
						found = true
						i = j
					}
				}
			}
		}
	*/

	// if not found, try a second pass looking for indented match
	// but not if tag is "ins" or "del" (following original Markdown.pl)
	if !found && curtag != "ins" && curtag != "del" {
		i = 1
		for i < len(data) {
			i++
			for i < len(data) && !(data[i-1] == '<' && data[i] == '/') {
				i++
			}

			if i+2+len(curtag) >= len(data) {
				break
			}

			j = p.htmlFindEnd(curtag, data[i-1:])

			if j > 0 {
				i += j - 1
				found = true
				break
			}
		}
	}

	if !found {
		return 0
	}

	// the end of the block has been found
	if doRender {
		// trim newlines
		end := i
		for end > 0 && data[end-1] == '\n' {
			end--
		}
		finalizeHTMLBlock(p.addBlock(HTMLBlock, data[:end]))
	}

	return i
}

func finalizeHTMLBlock(block *Node) {
	block.Literal = block.content
	block.content = nil
}

// HTML comment, lax form
func (p *Markdown) htmlComment(data []byte, doRender bool) int {
	i := p.inlineHTMLComment(data)
	// needs to end with a blank line
	if j := p.isEmpty(data[i:]); j > 0 {
		size := i + j
		if doRender {
			// trim trailing newlines
			end := size
			for end > 0 && data[end-1] == '\n' {
				end--
			}
			block := p.addBlock(HTMLBlock, data[:end])
			finalizeHTMLBlock(block)
		}
		return size
	}
	return 0
}

// HR, which is the only self-closing block tag considered
func (p *Markdown) htmlHr(data []byte, doRender bool) int {
	if len(data) < 4 {
		return 0
	}
	if data[0] != '<' || (data[1] != 'h' && data[1] != 'H') || (data[2] != 'r' && data[2] != 'R') {
		return 0
	}
	if data[3] != ' ' && data[3] != '/' && data[3] != '>' {
		// not an <hr> tag after all; at least not a valid one
		return 0
	}
	i := 3
	for i < len(data) && data[i] != '>' && data[i] != '\n' {
		i++
	}
	if i < len(data) && data[i] == '>' {
		i++
		if j := p.isEmpty(data[i:]); j > 0 {
			size := i + j
			if doRender {
				// trim newlines
				end := size
				for end > 0 && data[end-1] == '\n' {
					end--
				}
				finalizeHTMLBlock(p.addBlock(HTMLBlock, data[:end]))
			}
			return size
		}
	}
	return 0
}

func (p *Markdown) htmlFindTag(data []byte) (string, bool) {
	i := 0
	for i < len(data) && isalnum(data[i]) {
		i++
	}
	key := string(data[:i])
	if _, ok := blockTags[key]; ok {
		return key, true
	}
	return "", false
}

func (p *Markdown) htmlFindEnd(tag string, data []byte) int {
	// assume data[0] == '<' && data[1] == '/' already tested
	if tag == "hr" {
		return 2
	}
	// check if tag is a match
	closetag := []byte("</" + tag + ">")
	if !bytes.HasPrefix(data, closetag) {
		return 0
	}
	i := len(closetag)

	// check that the rest of the line is blank
	skip := 0
	if skip = p.isEmpty(data[i:]); skip == 0 {
		return 0
	}
	i += skip
	skip = 0

	if i >= len(data) {
		return i
	}

	if p.extensions&LaxHTMLBlocks != 0 {
		return i
	}
	if skip = p.isEmpty(data[i:]); skip == 0 {
		// following line must be blank
		return 0
	}

	return i + skip
}

func (*Markdown) isEmpty(data []byte) int {
	// it is okay to call isEmpty on an empty buffer
	if len(data) == 0 {
		return 0
	}

	var i int
	for i = 0; i < len(data) && data[i] != '\n'; i++ {
		if data[i] != ' ' && data[i] != '\t' {
			return 0
		}
	}
	if i < len(data) && data[i] == '\n' {
		i++
	}
	return i
}

func (*Markdown) isHRule(data []byte) bool {
	i := 0

	// skip up to three spaces
	for i < 3 && data[i] == ' ' {
		i++
	}

	// look at the hrule char
	if data[i] != '*' && data[i] != '-' && data[i] != '_' {
		return false
	}
	c := data[i]

	// the whole line must be the char or whitespace
	n := 0
	for i < len(data) && data[i] != '\n' {
		switch {
		case data[i] == c:
			n++
		case data[i] != ' ':
			return false
		}
		i++
	}

	return n >= 3
}

// isFenceLine checks if there's a fence line (e.g., ``` or ``` go) at the beginning of data,
// and returns the end index if so, or 0 otherwise. It also returns the marker found.
// If info is not nil, it gets set to the syntax specified in the fence line.
func isFenceLine(data []byte, info *string, oldmarker string) (end int, marker string) {
	i, size := 0, 0

	// skip up to three spaces
	for i < len(data) && i < 3 && data[i] == ' ' {
		i++
	}

	// check for the marker characters: ~ or `
	if i >= len(data) {
		return 0, ""
	}
	if data[i] != '~' && data[i] != '`' {
		return 0, ""
	}

	c := data[i]

	// the whole line must be the same char or whitespace
	for i < len(data) && data[i] == c {
		size++
		i++
	}

	// the marker char must occur at least 3 times
	if size < 3 {
		return 0, ""
	}
	marker = string(data[i-size : i])

	// if this is the end marker, it must match the beginning marker
	if oldmarker != "" && marker != oldmarker {
		return 0, ""
	}

	// TODO(shurcooL): It's probably a good idea to simplify the 2 code paths here
	// into one, always get the info string, and discard it if the caller doesn't care.
	if info != nil {
		infoLength := 0
		i = skipChar(data, i, ' ')

		if i >= len(data) {
			if i == len(data) {
				return i, marker
			}
			return 0, ""
		}

		infoStart := i

		if data[i] == '{' {
			i++
			infoStart++

			for i < len(data) && data[i] != '}' && data[i] != '\n' {
				infoLength++
				i++
			}

			if i >= len(data) || data[i] != '}' {
				return 0, ""
			}

			// strip all whitespace at the beginning and the end
			// of the {} block
			for infoLength > 0 && isspace(data[infoStart]) {
				infoStart++
				infoLength--
			}

			for infoLength > 0 && isspace(data[infoStart+infoLength-1]) {
				infoLength--
			}
			i++
			i = skipChar(data, i, ' ')
		} else {
			for i < len(data) && !isverticalspace(data[i]) {
				infoLength++
				i++
			}
		}

		*info = strings.TrimSpace(string(data[infoStart : infoStart+infoLength]))
	}

	if i == len(data) {
		return i, marker
	}
	if i > len(data) || data[i] != '\n' {
		return 0, ""
	}
	return i + 1, marker // Take newline into account.
}

// fencedCodeBlock returns the end index if data contains a fenced code block at the beginning,
// or 0 otherwise. It writes to out if doRender is true, otherwise it has no side effects.
// If doRender is true, a final newline is mandatory to recognize the fenced code block.
func (p *Markdown) fencedCodeBlock(data []byte, doRender bool) int {
	var info string
	beg, marker := isFenceLine(data, &info, "")
	if beg == 0 || beg >= len(data) {
		return 0
	}
	fenceLength := beg - 1

	var work bytes.Buffer
	work.Write([]byte(info))
	work.WriteByte('\n')

	for {
		// safe to assume beg < len(data)

		// check for the end of the code block
		fenceEnd, _ := isFenceLine(data[beg:], nil, marker)
		if fenceEnd != 0 {
			beg += fenceEnd
			break
		}

		// copy the current line
		end := skipUntilChar(data, beg, '\n') + 1

		// did we reach the end of the buffer without a closing marker?
		if end >= len(data) {
			return 0
		}

		// verbatim copy to the working buffer
		if doRender {
			work.Write(data[beg:end])
		}
		beg = end
	}

	if doRender {
		block := p.addBlock(CodeBlock, work.Bytes()) // TODO: get rid of temp buffer
		block.IsFenced = true
		block.FenceLength = fenceLength
		finalizeCodeBlock(block)
	}

	return beg
}

func unescapeChar(str []byte) []byte {
	if str[0] == '\\' {
		return []byte{str[1]}
	}
	return []byte(html.UnescapeString(string(str)))
}

func unescapeString(str []byte) []byte {
	if reBackslashOrAmp.Match(str) {
		return reEntityOrEscapedChar.ReplaceAllFunc(str, unescapeChar)
	}
	return str
}

func finalizeCodeBlock(block *Node) {
	if block.IsFenced {
		newlinePos := bytes.IndexByte(block.content, '\n')
		firstLine := block.content[:newlinePos]
		rest := block.content[newlinePos+1:]
		block.Info = unescapeString(bytes.Trim(firstLine, "\n"))
		block.Literal = rest
	} else {
		block.Literal = block.content
	}
	block.content = nil
}

func (p *Markdown) table(data []byte) int {
	table := p.addBlock(Table, nil)
	i, columns := p.tableHeader(data)
	if i == 0 {
		p.tip = table.Parent
		table.Unlink()
		return 0
	}

	p.addBlock(TableBody, nil)

	for i < len(data) {
		pipes, rowStart := 0, i
		for ; i < len(data) && data[i] != '\n'; i++ {
			if data[i] == '|' {
				pipes++
			}
		}

		if pipes == 0 {
			i = rowStart
			break
		}

		// include the newline in data sent to tableRow
		if i < len(data) && data[i] == '\n' {
			i++
		}
		p.tableRow(data[rowStart:i], columns, false)
	}

	return i
}

// check if the specified position is preceded by an odd number of backslashes
func isBackslashEscaped(data []byte, i int) bool {
	backslashes := 0
	for i-backslashes-1 >= 0 && data[i-backslashes-1] == '\\' {
		backslashes++
	}
	return backslashes&1 == 1
}

func (p *Markdown) tableHeader(data []byte) (size int, columns []CellAlignFlags) {
	i := 0
	colCount := 1
	for i = 0; i < len(data) && data[i] != '\n'; i++ {
		if data[i] == '|' && !isBackslashEscaped(data, i) {
			colCount++
		}
	}

	// doesn't look like a table header
	if colCount == 1 {
		return
	}

	// include the newline in the data sent to tableRow
	j := i
	if j < len(data) && data[j] == '\n' {
		j++
	}
	header := data[:j]

	// column count ignores pipes at beginning or end of line
	if data[0] == '|' {
		colCount--
	}
	if i > 2 && data[i-1] == '|' && !isBackslashEscaped(data, i-1) {
		colCount--
	}

	columns = make([]CellAlignFlags, colCount)

	// move on to the header underline
	i++
	if i >= len(data) {
		return
	}

	if data[i] == '|' && !isBackslashEscaped(data, i) {
		i++
	}
	i = skipChar(data, i, ' ')

	// each column header is of form: / *:?-+:? *|/ with # dashes + # colons >= 3
	// and trailing | optional on last column
	col := 0
	for i < len(data) && data[i] != '\n' {
		dashes := 0

		if data[i] == ':' {
			i++
			columns[col] |= TableAlignmentLeft
			dashes++
		}
		for i < len(data) && data[i] == '-' {
			i++
			dashes++
		}
		if i < len(data) && data[i] == ':' {
			i++
			columns[col] |= TableAlignmentRight
			dashes++
		}
		for i < len(data) && data[i] == ' ' {
			i++
		}
		if i == len(data) {
			return
		}
		// end of column test is messy
		switch {
		case dashes < 3:
			// not a valid column
			return

		case data[i] == '|' && !isBackslashEscaped(data, i):
			// marker found, now skip past trailing whitespace
			col++
			i++
			for i < len(data) && data[i] == ' ' {
				i++
			}

			// trailing junk found after last column
			if col >= colCount && i < len(data) && data[i] != '\n' {
				return
			}

		case (data[i] != '|' || isBackslashEscaped(data, i)) && col+1 < colCount:
			// something else found where marker was required
			return

		case data[i] == '\n':
			// marker is optional for the last column
			col++

		default:
			// trailing junk found after last column
			return
		}
	}
	if col != colCount {
		return
	}

	p.addBlock(TableHead, nil)
	p.tableRow(header, columns, true)
	size = i
	if size < len(data) && data[size] == '\n' {
		size++
	}
	return
}

func (p *Markdown) tableRow(data []byte, columns []CellAlignFlags, header bool) {
	p.addBlock(TableRow, nil)
	i, col := 0, 0

	if data[i] == '|' && !isBackslashEscaped(data, i) {
		i++
	}

	for col = 0; col < len(columns) && i < len(data); col++ {
		for i < len(data) && data[i] == ' ' {
			i++
		}

		cellStart := i

		for i < len(data) && (data[i] != '|' || isBackslashEscaped(data, i)) && data[i] != '\n' {
			i++
		}

		cellEnd := i

		// skip the end-of-cell marker, possibly taking us past end of buffer
		i++

		for cellEnd > cellStart && cellEnd-1 < len(data) && data[cellEnd-1] == ' ' {
			cellEnd--
		}

		cell := p.addBlock(TableCell, data[cellStart:cellEnd])
		cell.IsHeader = header
		cell.Align = columns[col]
	}

	// pad it out with empty columns to get the right number
	for ; col < len(columns); col++ {
		cell := p.addBlock(TableCell, nil)
		cell.IsHeader = header
		cell.Align = columns[col]
	}

	// silently ignore rows with too many cells
}

// returns blockquote prefix length
func (p *Markdown) quotePrefix(data []byte) int {
	i := 0
	for i < 3 && i < len(data) && data[i] == ' ' {
		i++
	}
	if i < len(data) && data[i] == '>' {
		if i+1 < len(data) && data[i+1] == ' ' {
			return i + 2
		}
		return i + 1
	}
	return 0
}

// blockquote ends with at least one blank line
// followed by something without a blockquote prefix
func (p *Markdown) terminateBlockquote(data []byte, beg, end int) bool {
	if p.isEmpty(data[beg:]) <= 0 {
		return false
	}
	if end >= len(data) {
		return true
	}
	return p.quotePrefix(data[end:]) == 0 && p.isEmpty(data[end:]) == 0
}

// parse a blockquote fragment
func (p *Markdown) quote(data []byte) int {
	block := p.addBlock(BlockQuote, nil)
	var raw bytes.Buffer
	beg, end := 0, 0
	for beg < len(data) {
		end = beg
		// Step over whole lines, collecting them. While doing that, check for
		// fenced code and if one's found, incorporate it altogether,
		// irregardless of any contents inside it
		for end < len(data) && data[end] != '\n' {
			if p.extensions&FencedCode != 0 {
				if i := p.fencedCodeBlock(data[end:], false); i > 0 {
					// -1 to compensate for the extra end++ after the loop:
					end += i - 1
					break
				}
			}
			end++
		}
		if end < len(data) && data[end] == '\n' {
			end++
		}
		if pre := p.quotePrefix(data[beg:]); pre > 0 {
			// skip the prefix
			beg += pre
		} else if p.terminateBlockquote(data, beg, end) {
			break
		}
		// this line is part of the blockquote
		raw.Write(data[beg:end])
		beg = end
	}
	p.block(raw.Bytes())
	p.finalize(block)
	return end
}

// returns prefix length for block code
func (p *Markdown) codePrefix(data []byte) int {
	if len(data) >= 1 && data[0] == '\t' {
		return 1
	}
	if len(data) >= 4 && data[0] == ' ' && data[1] == ' ' && data[2] == ' ' && data[3] == ' ' {
		return 4
	}
	return 0
}

func (p *Markdown) code(data []byte) int {
	var work bytes.Buffer

	i := 0
	for i < len(data) {
		beg := i
		for i < len(data) && data[i] != '\n' {
			i++
		}
		if i < len(data) && data[i] == '\n' {
			i++
		}

		blankline := p.isEmpty(data[beg:i]) > 0
		if pre := p.codePrefix(data[beg:i]); pre > 0 {
			beg += pre
		} else if !blankline {
			// non-empty, non-prefixed line breaks the pre
			i = beg
			break
		}

		// verbatim copy to the working buffer
		if blankline {
			work.WriteByte('\n')
		} else {
			work.Write(data[beg:i])
		}
	}

	// trim all the \n off the end of work
	workbytes := work.Bytes()
	eol := len(workbytes)
	for eol > 0 && workbytes[eol-1] == '\n' {
		eol--
	}
	if eol != len(workbytes) {
		work.Truncate(eol)
	}

	work.WriteByte('\n')

	block := p.addBlock(CodeBlock, work.Bytes()) // TODO: get rid of temp buffer
	block.IsFenced = false
	finalizeCodeBlock(block)

	return i
}

// returns unordered list item prefix
func (p *Markdown) uliPrefix(data []byte) int {
	i := 0
	// start with up to 3 spaces
	for i < len(data) && i < 3 && data[i] == ' ' {
		i++
	}
	if i >= len(data)-1 {
		return 0
	}
	// need one of {'*', '+', '-'} followed by a space or a tab
	if (data[i] != '*' && data[i] != '+' && data[i] != '-') ||
		(data[i+1] != ' ' && data[i+1] != '\t') {
		return 0
	}
	return i + 2
}

// returns ordered list item prefix
func (p *Markdown) oliPrefix(data []byte) int {
	i := 0

	// start with up to 3 spaces
	for i < 3 && i < len(data) && data[i] == ' ' {
		i++
	}

	// count the digits
	start := i
	for i < len(data) && data[i] >= '0' && data[i] <= '9' {
		i++
	}
	if start == i || i >= len(data)-1 {
		return 0
	}

	// we need >= 1 digits followed by a dot and a space or a tab
	if data[i] != '.' || !(data[i+1] == ' ' || data[i+1] == '\t') {
		return 0
	}
	return i + 2
}

// returns definition list item prefix
func (p *Markdown) dliPrefix(data []byte) int {
	if len(data) < 2 {
		return 0
	}
	i := 0
	// need a ':' followed by a space or a tab
	if data[i] != ':' || !(data[i+1] == ' ' || data[i+1] == '\t') {
		return 0
	}
	for i < len(data) && data[i] == ' ' {
		i++
	}
	return i + 2
}

// parse ordered or unordered list block
func (p *Markdown) list(data []byte, flags ListType) int {
	i := 0
	flags |= ListItemBeginningOfList
	block := p.addBlock(List, nil)
	block.ListFlags = flags
	block.Tight = true

	for i < len(data) {
		skip := p.listItem(data[i:], &flags)
		if flags&ListItemContainsBlock != 0 {
			block.ListData.Tight = false
		}
		i += skip
		if skip == 0 || flags&ListItemEndOfList != 0 {
			break
		}
		flags &= ^ListItemBeginningOfList
	}

	above := block.Parent
	finalizeList(block)
	p.tip = above
	return i
}

// Returns true if the list item is not the same type as its parent list
func (p *Markdown) listTypeChanged(data []byte, flags *ListType) bool {
	if p.dliPrefix(data) > 0 && *flags&ListTypeDefinition == 0 {
		return true
	} else if p.oliPrefix(data) > 0 && *flags&ListTypeOrdered == 0 {
		return true
	} else if p.uliPrefix(data) > 0 && (*flags&ListTypeOrdered != 0 || *flags&ListTypeDefinition != 0) {
		return true
	}
	return false
}

// Returns true if block ends with a blank line, descending if needed
// into lists and sublists.
func endsWithBlankLine(block *Node) bool {
	// TODO: figure this out. Always false now.
	for block != nil {
		//if block.lastLineBlank {
		//return true
		//}
		t := block.Type
		if t == List || t == Item {
			block = block.LastChild
		} else {
			break
		}
	}
	return false
}

func finalizeList(block *Node) {
	block.open = false
	item := block.FirstChild
	for item != nil {
		// check for non-final list item ending with blank line:
		if endsWithBlankLine(item) && item.Next != nil {
			block.ListData.Tight = false
			break
		}
		// recurse into children of list item, to see if there are spaces
		// between any of them:
		subItem := item.FirstChild
		for subItem != nil {
			if endsWithBlankLine(subItem) && (item.Next != nil || subItem.Next != nil) {
				block.ListData.Tight = false
				break
			}
			subItem = subItem.Next
		}
		item = item.Next
	}
}

// Parse a single list item.
// Assumes initial prefix is already removed if this is a sublist.
func (p *Markdown) listItem(data []byte, flags *ListType) int {
	// keep track of the indentation of the first line
	itemIndent := 0
	if data[0] == '\t' {
		itemIndent += 4
	} else {
		for itemIndent < 3 && data[itemIndent] == ' ' {
			itemIndent++
		}
	}

	var bulletChar byte = '*'
	i := p.uliPrefix(data)
	if i == 0 {
		i = p.oliPrefix(data)
	} else {
		bulletChar = data[i-2]
	}
	if i == 0 {
		i = p.dliPrefix(data)
		// reset definition term flag
		if i > 0 {
			*flags &= ^ListTypeTerm
		}
	}
	if i == 0 {
		// if in definition list, set term flag and continue
		if *flags&ListTypeDefinition != 0 {
			*flags |= ListTypeTerm
		} else {
			return 0
		}
	}

	// skip leading whitespace on first line
	for i < len(data) && data[i] == ' ' {
		i++
	}

	// find the end of the line
	line := i
	for i > 0 && i < len(data) && data[i-1] != '\n' {
		i++
	}

	// get working buffer
	var raw bytes.Buffer

	// put the first line into the working buffer
	raw.Write(data[line:i])
	line = i

	// process the following lines
	containsBlankLine := false
	sublist := 0
	codeBlockMarker := ""

gatherlines:
	for line < len(data) {
		i++

		// find the end of this line
		for i < len(data) && data[i-1] != '\n' {
			i++
		}

		// if it is an empty line, guess that it is part of this item
		// and move on to the next line
		if p.isEmpty(data[line:i]) > 0 {
			containsBlankLine = true
			line = i
			continue
		}

		// calculate the indentation
		indent := 0
		indentIndex := 0
		if data[line] == '\t' {
			indentIndex++
			indent += 4
		} else {
			for indent < 4 && line+indent < i && data[line+indent] == ' ' {
				indent++
				indentIndex++
			}
		}

		chunk := data[line+indentIndex : i]

		if p.extensions&FencedCode != 0 {
			// determine if in or out of codeblock
			// if in codeblock, ignore normal list processing
			_, marker := isFenceLine(chunk, nil, codeBlockMarker)
			if marker != "" {
				if codeBlockMarker == "" {
					// start of codeblock
					codeBlockMarker = marker
				} else {
					// end of codeblock.
					codeBlockMarker = ""
				}
			}
			// we are in a codeblock, write line, and continue
			if codeBlockMarker != "" || marker != "" {
				raw.Write(data[line+indentIndex : i])
				line = i
				continue gatherlines
			}
		}

		// evaluate how this line fits in
		switch {
		// is this a nested list item?
		case (p.uliPrefix(chunk) > 0 && !p.isHRule(chunk)) ||
			p.oliPrefix(chunk) > 0 ||
			p.dliPrefix(chunk) > 0:

			// to be a nested list, it must be indented more
			// if not, it is either a different kind of list
			// or the next item in the same list
			if indent <= itemIndent {
				if p.listTypeChanged(chunk, flags) {
					*flags |= ListItemEndOfList
				} else if containsBlankLine {
					*flags |= ListItemContainsBlock
				}

				break gatherlines
			}

			if containsBlankLine {
				*flags |= ListItemContainsBlock
			}

			// is this the first item in the nested list?
			if sublist == 0 {
				sublist = raw.Len()
			}

		// is this a nested prefix heading?
		case p.isPrefixHeading(chunk):
			// if the heading is not indented, it is not nested in the list
			// and thus ends the list
			if containsBlankLine && indent < 4 {
				*flags |= ListItemEndOfList
				break gatherlines
			}
			*flags |= ListItemContainsBlock

		// anything following an empty line is only part
		// of this item if it is indented 4 spaces
		// (regardless of the indentation of the beginning of the item)
		case containsBlankLine && indent < 4:
			if *flags&ListTypeDefinition != 0 && i < len(data)-1 {
				// is the next item still a part of this list?
				next := i
				for next < len(data) && data[next] != '\n' {
					next++
				}
				for next < len(data)-1 && data[next] == '\n' {
					next++
				}
				if i < len(data)-1 && data[i] != ':' && data[next] != ':' {
					*flags |= ListItemEndOfList
				}
			} else {
				*flags |= ListItemEndOfList
			}
			break gatherlines

		// a blank line means this should be parsed as a block
		case containsBlankLine:
			raw.WriteByte('\n')
			*flags |= ListItemContainsBlock
		}

		// if this line was preceded by one or more blanks,
		// re-introduce the blank into the buffer
		if containsBlankLine {
			containsBlankLine = false
			raw.WriteByte('\n')
		}

		// add the line into the working buffer without prefix
		raw.Write(data[line+indentIndex : i])

		line = i
	}

	rawBytes := raw.Bytes()

	block := p.addBlock(Item, nil)
	block.ListFlags = *flags
	block.Tight = false
	block.BulletChar = bulletChar
	block.Delimiter = '.' // Only '.' is possible in Markdown, but ')' will also be possible in CommonMark

	// render the contents of the list item
	if *flags&ListItemContainsBlock != 0 && *flags&ListTypeTerm == 0 {
		// intermediate render of block item, except for definition term
		if sublist > 0 {
			p.block(rawBytes[:sublist])
			p.block(rawBytes[sublist:])
		} else {
			p.block(rawBytes)
		}
	} else {
		// intermediate render of inline item
		if sublist > 0 {
			child := p.addChild(Paragraph, 0)
			child.content = rawBytes[:sublist]
			p.block(rawBytes[sublist:])
		} else {
			child := p.addChild(Paragraph, 0)
			child.content = rawBytes
		}
	}
	return line
}

// render a single paragraph that has already been parsed out
func (p *Markdown) renderParagraph(data []byte) {
	if len(data) == 0 {
		return
	}

	// trim leading spaces
	beg := 0
	for data[beg] == ' ' {
		beg++
	}

	end := len(data)
	// trim trailing newline
	if data[len(data)-1] == '\n' {
		end--
	}

	// trim trailing spaces
	for end > beg && data[end-1] == ' ' {
		end--
	}

	p.addBlock(Paragraph, data[beg:end])
}

func (p *Markdown) paragraph(data []byte) int {
	// prev: index of 1st char of previous line
	// line: index of 1st char of current line
	// i: index of cursor/end of current line
	var prev, line, i int
	tabSize := TabSizeDefault
	if p.extensions&TabSizeEight != 0 {
		tabSize = TabSizeDouble
	}
	// keep going until we find something to mark the end of the paragraph
	for i < len(data) {
		// mark the beginning of the current line
		prev = line
		current := data[i:]
		line = i

		// did we find a reference or a footnote? If so, end a paragraph
		// preceding it and report that we have consumed up to the end of that
		// reference:
		if refEnd := isReference(p, current, tabSize); refEnd > 0 {
			p.renderParagraph(data[:i])
			return i + refEnd
		}

		// did we find a blank line marking the end of the paragraph?
		if n := p.isEmpty(current); n > 0 {
			// did this blank line followed by a definition list item?
			if p.extensions&DefinitionLists != 0 {
				if i < len(data)-1 && data[i+1] == ':' {
					return p.list(data[prev:], ListTypeDefinition)
				}
			}

			p.renderParagraph(data[:i])
			return i + n
		}

		// an underline under some text marks a heading, so our paragraph ended on prev line
		if i > 0 {
			if level := p.isUnderlinedHeading(current); level > 0 {
				// render the paragraph
				p.renderParagraph(data[:prev])

				// ignore leading and trailing whitespace
				eol := i - 1
				for prev < eol && data[prev] == ' ' {
					prev++
				}
				for eol > prev && data[eol-1] == ' ' {
					eol--
				}

				id := ""
				if p.extensions&AutoHeadingIDs != 0 {
					id = SanitizedAnchorName(string(data[prev:eol]))
				}

				block := p.addBlock(Heading, data[prev:eol])
				block.Level = level
				block.HeadingID = id

				// find the end of the underline
				for i < len(data) && data[i] != '\n' {
					i++
				}
				return i
			}
		}

		// if the next line starts a block of HTML, then the paragraph ends here
		if p.extensions&LaxHTMLBlocks != 0 {
			if data[i] == '<' && p.html(current, false) > 0 {
				// rewind to before the HTML block
				p.renderParagraph(data[:i])
				return i
			}
		}

		// if there's a prefixed heading or a horizontal rule after this, paragraph is over
		if p.isPrefixHeading(current) || p.isHRule(current) {
			p.renderParagraph(data[:i])
			return i
		}

		// if there's a fenced code block, paragraph is over
		if p.extensions&FencedCode != 0 {
			if p.fencedCodeBlock(current, false) > 0 {
				p.renderParagraph(data[:i])
				return i
			}
		}

		// if there's a definition list item, prev line is a definition term
		if p.extensions&DefinitionLists != 0 {
			if p.dliPrefix(current) != 0 {
				ret := p.list(data[prev:], ListTypeDefinition)
				return ret
			}
		}

		// if there's a list after this, paragraph is over
		if p.extensions&NoEmptyLineBeforeBlock != 0 {
			if p.uliPrefix(current) != 0 ||
				p.oliPrefix(current) != 0 ||
				p.quotePrefix(current) != 0 ||
				p.codePrefix(current) != 0 {
				p.renderParagraph(data[:i])
				return i
			}
		}

		// otherwise, scan to the beginning of the next line
		nl := bytes.IndexByte(data[i:], '\n')
		if nl >= 0 {
			i += nl + 1
		} else {
			i += len(data[i:])
		}
	}

	p.renderParagraph(data[:i])
	return i
}

func skipChar(data []byte, start int, char byte) int {
	i := start
	for i < len(data) && data[i] == char {
		i++
	}
	return i
}

func skipUntilChar(text []byte, start int, char byte) int {
	i := start
	for i < len(text) && text[i] != char {
		i++
	}
	return i
}

// SanitizedAnchorName returns a sanitized anchor name for the given text.
//
// It implements the algorithm specified in the package comment.
func SanitizedAnchorName(text string) string {
	var anchorName []rune
	futureDash := false
	for _, r := range text {
		switch {
		case unicode.IsLetter(r) || unicode.IsNumber(r):
			if futureDash && len(anchorName) > 0 {
				anchorName = append(anchorName, '-')
			}
			futureDash = false
			anchorName = append(anchorName, unicode.ToLower(r))
		default:
			futureDash = true
		}
	}
	return string(anchorName)
}
   07070100000A7A000081A4000000000000000000000001645E367C000009C9000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/russross/blackfriday/v2/doc.go  // Package blackfriday is a markdown processor.
//
// It translates plain text with simple formatting rules into an AST, which can
// then be further processed to HTML (provided by Blackfriday itself) or other
// formats (provided by the community).
//
// The simplest way to invoke Blackfriday is to call the Run function. It will
// take a text input and produce a text output in HTML (or other format).
//
// A slightly more sophisticated way to use Blackfriday is to create a Markdown
// processor and to call Parse, which returns a syntax tree for the input
// document. You can leverage Blackfriday's parsing for content extraction from
// markdown documents. You can assign a custom renderer and set various options
// to the Markdown processor.
//
// If you're interested in calling Blackfriday from command line, see
// https://github.com/russross/blackfriday-tool.
//
// Sanitized Anchor Names
//
// Blackfriday includes an algorithm for creating sanitized anchor names
// corresponding to a given input text. This algorithm is used to create
// anchors for headings when AutoHeadingIDs extension is enabled. The
// algorithm is specified below, so that other packages can create
// compatible anchor names and links to those anchors.
//
// The algorithm iterates over the input text, interpreted as UTF-8,
// one Unicode code point (rune) at a time. All runes that are letters (category L)
// or numbers (category N) are considered valid characters. They are mapped to
// lower case, and included in the output. All other runes are considered
// invalid characters. Invalid characters that precede the first valid character,
// as well as invalid character that follow the last valid character
// are dropped completely. All other sequences of invalid characters
// between two valid characters are replaced with a single dash character '-'.
//
// SanitizedAnchorName exposes this functionality, and can be used to
// create compatible links to the anchor names generated by blackfriday.
// This algorithm is also implemented in a small standalone package at
// github.com/shurcooL/sanitized_anchor_name. It can be useful for clients
// that want a small package and don't need full functionality of blackfriday.
package blackfriday

// NOTE: Keep Sanitized Anchor Name algorithm in sync with package
//       github.com/shurcooL/sanitized_anchor_name.
//       Otherwise, users of sanitized_anchor_name will get anchor names
//       that are incompatible with those generated by blackfriday.
   07070100000A7B000081A4000000000000000000000001645E367C00017FF2000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/russross/blackfriday/v2/entities.go package blackfriday

// Extracted from https://html.spec.whatwg.org/multipage/entities.json
var entities = map[string]bool{
	"&AElig":                            true,
	"&AElig;":                           true,
	"&AMP":                              true,
	"&AMP;":                             true,
	"&Aacute":                           true,
	"&Aacute;":                          true,
	"&Abreve;":                          true,
	"&Acirc":                            true,
	"&Acirc;":                           true,
	"&Acy;":                             true,
	"&Afr;":                             true,
	"&Agrave":                           true,
	"&Agrave;":                          true,
	"&Alpha;":                           true,
	"&Amacr;":                           true,
	"&And;":                             true,
	"&Aogon;":                           true,
	"&Aopf;":                            true,
	"&ApplyFunction;":                   true,
	"&Aring":                            true,
	"&Aring;":                           true,
	"&Ascr;":                            true,
	"&Assign;":                          true,
	"&Atilde":                           true,
	"&Atilde;":                          true,
	"&Auml":                             true,
	"&Auml;":                            true,
	"&Backslash;":                       true,
	"&Barv;":                            true,
	"&Barwed;":                          true,
	"&Bcy;":                             true,
	"&Because;":                         true,
	"&Bernoullis;":                      true,
	"&Beta;":                            true,
	"&Bfr;":                             true,
	"&Bopf;":                            true,
	"&Breve;":                           true,
	"&Bscr;":                            true,
	"&Bumpeq;":                          true,
	"&CHcy;":                            true,
	"&COPY":                             true,
	"&COPY;":                            true,
	"&Cacute;":                          true,
	"&Cap;":                             true,
	"&CapitalDifferentialD;":            true,
	"&Cayleys;":                         true,
	"&Ccaron;":                          true,
	"&Ccedil":                           true,
	"&Ccedil;":                          true,
	"&Ccirc;":                           true,
	"&Cconint;":                         true,
	"&Cdot;":                            true,
	"&Cedilla;":                         true,
	"&CenterDot;":                       true,
	"&Cfr;":                             true,
	"&Chi;":                             true,
	"&CircleDot;":                       true,
	"&CircleMinus;":                     true,
	"&CirclePlus;":                      true,
	"&CircleTimes;":                     true,
	"&ClockwiseContourIntegral;":        true,
	"&CloseCurlyDoubleQuote;":           true,
	"&CloseCurlyQuote;":                 true,
	"&Colon;":                           true,
	"&Colone;":                          true,
	"&Congruent;":                       true,
	"&Conint;":                          true,
	"&ContourIntegral;":                 true,
	"&Copf;":                            true,
	"&Coproduct;":                       true,
	"&CounterClockwiseContourIntegral;": true,
	"&Cross;":                           true,
	"&Cscr;":                            true,
	"&Cup;":                             true,
	"&CupCap;":                          true,
	"&DD;":                              true,
	"&DDotrahd;":                        true,
	"&DJcy;":                            true,
	"&DScy;":                            true,
	"&DZcy;":                            true,
	"&Dagger;":                          true,
	"&Darr;":                            true,
	"&Dashv;":                           true,
	"&Dcaron;":                          true,
	"&Dcy;":                             true,
	"&Del;":                             true,
	"&Delta;":                           true,
	"&Dfr;":                             true,
	"&DiacriticalAcute;":                true,
	"&DiacriticalDot;":                  true,
	"&DiacriticalDoubleAcute;":          true,
	"&DiacriticalGrave;":                true,
	"&DiacriticalTilde;":                true,
	"&Diamond;":                         true,
	"&DifferentialD;":                   true,
	"&Dopf;":                            true,
	"&Dot;":                             true,
	"&DotDot;":                          true,
	"&DotEqual;":                        true,
	"&DoubleContourIntegral;":           true,
	"&DoubleDot;":                       true,
	"&DoubleDownArrow;":                 true,
	"&DoubleLeftArrow;":                 true,
	"&DoubleLeftRightArrow;":            true,
	"&DoubleLeftTee;":                   true,
	"&DoubleLongLeftArrow;":             true,
	"&DoubleLongLeftRightArrow;":        true,
	"&DoubleLongRightArrow;":            true,
	"&DoubleRightArrow;":                true,
	"&DoubleRightTee;":                  true,
	"&DoubleUpArrow;":                   true,
	"&DoubleUpDownArrow;":               true,
	"&DoubleVerticalBar;":               true,
	"&DownArrow;":                       true,
	"&DownArrowBar;":                    true,
	"&DownArrowUpArrow;":                true,
	"&DownBreve;":                       true,
	"&DownLeftRightVector;":             true,
	"&DownLeftTeeVector;":               true,
	"&DownLeftVector;":                  true,
	"&DownLeftVectorBar;":               true,
	"&DownRightTeeVector;":              true,
	"&DownRightVector;":                 true,
	"&DownRightVectorBar;":              true,
	"&DownTee;":                         true,
	"&DownTeeArrow;":                    true,
	"&Downarrow;":                       true,
	"&Dscr;":                            true,
	"&Dstrok;":                          true,
	"&ENG;":                             true,
	"&ETH":                              true,
	"&ETH;":                             true,
	"&Eacute":                           true,
	"&Eacute;":                          true,
	"&Ecaron;":                          true,
	"&Ecirc":                            true,
	"&Ecirc;":                           true,
	"&Ecy;":                             true,
	"&Edot;":                            true,
	"&Efr;":                             true,
	"&Egrave":                           true,
	"&Egrave;":                          true,
	"&Element;":                         true,
	"&Emacr;":                           true,
	"&EmptySmallSquare;":                true,
	"&EmptyVerySmallSquare;":            true,
	"&Eogon;":                           true,
	"&Eopf;":                            true,
	"&Epsilon;":                         true,
	"&Equal;":                           true,
	"&EqualTilde;":                      true,
	"&Equilibrium;":                     true,
	"&Escr;":                            true,
	"&Esim;":                            true,
	"&Eta;":                             true,
	"&Euml":                             true,
	"&Euml;":                            true,
	"&Exists;":                          true,
	"&ExponentialE;":                    true,
	"&Fcy;":                             true,
	"&Ffr;":                             true,
	"&FilledSmallSquare;":               true,
	"&FilledVerySmallSquare;":           true,
	"&Fopf;":                            true,
	"&ForAll;":                          true,
	"&Fouriertrf;":                      true,
	"&Fscr;":                            true,
	"&GJcy;":                            true,
	"&GT":                               true,
	"&GT;":                              true,
	"&Gamma;":                           true,
	"&Gammad;":                          true,
	"&Gbreve;":                          true,
	"&Gcedil;":                          true,
	"&Gcirc;":                           true,
	"&Gcy;":                             true,
	"&Gdot;":                            true,
	"&Gfr;":                             true,
	"&Gg;":                              true,
	"&Gopf;":                            true,
	"&GreaterEqual;":                    true,
	"&GreaterEqualLess;":                true,
	"&GreaterFullEqual;":                true,
	"&GreaterGreater;":                  true,
	"&GreaterLess;":                     true,
	"&GreaterSlantEqual;":               true,
	"&GreaterTilde;":                    true,
	"&Gscr;":                            true,
	"&Gt;":                              true,
	"&HARDcy;":                          true,
	"&Hacek;":                           true,
	"&Hat;":                             true,
	"&Hcirc;":                           true,
	"&Hfr;":                             true,
	"&HilbertSpace;":                    true,
	"&Hopf;":                            true,
	"&HorizontalLine;":                  true,
	"&Hscr;":                            true,
	"&Hstrok;":                          true,
	"&HumpDownHump;":                    true,
	"&HumpEqual;":                       true,
	"&IEcy;":                            true,
	"&IJlig;":                           true,
	"&IOcy;":                            true,
	"&Iacute":                           true,
	"&Iacute;":                          true,
	"&Icirc":                            true,
	"&Icirc;":                           true,
	"&Icy;":                             true,
	"&Idot;":                            true,
	"&Ifr;":                             true,
	"&Igrave":                           true,
	"&Igrave;":                          true,
	"&Im;":                              true,
	"&Imacr;":                           true,
	"&ImaginaryI;":                      true,
	"&Implies;":                         true,
	"&Int;":                             true,
	"&Integral;":                        true,
	"&Intersection;":                    true,
	"&InvisibleComma;":                  true,
	"&InvisibleTimes;":                  true,
	"&Iogon;":                           true,
	"&Iopf;":                            true,
	"&Iota;":                            true,
	"&Iscr;":                            true,
	"&Itilde;":                          true,
	"&Iukcy;":                           true,
	"&Iuml":                             true,
	"&Iuml;":                            true,
	"&Jcirc;":                           true,
	"&Jcy;":                             true,
	"&Jfr;":                             true,
	"&Jopf;":                            true,
	"&Jscr;":                            true,
	"&Jsercy;":                          true,
	"&Jukcy;":                           true,
	"&KHcy;":                            true,
	"&KJcy;":                            true,
	"&Kappa;":                           true,
	"&Kcedil;":                          true,
	"&Kcy;":                             true,
	"&Kfr;":                             true,
	"&Kopf;":                            true,
	"&Kscr;":                            true,
	"&LJcy;":                            true,
	"&LT":                               true,
	"&LT;":                              true,
	"&Lacute;":                          true,
	"&Lambda;":                          true,
	"&Lang;":                            true,
	"&Laplacetrf;":                      true,
	"&Larr;":                            true,
	"&Lcaron;":                          true,
	"&Lcedil;":                          true,
	"&Lcy;":                             true,
	"&LeftAngleBracket;":                true,
	"&LeftArrow;":                       true,
	"&LeftArrowBar;":                    true,
	"&LeftArrowRightArrow;":             true,
	"&LeftCeiling;":                     true,
	"&LeftDoubleBracket;":               true,
	"&LeftDownTeeVector;":               true,
	"&LeftDownVector;":                  true,
	"&LeftDownVectorBar;":               true,
	"&LeftFloor;":                       true,
	"&LeftRightArrow;":                  true,
	"&LeftRightVector;":                 true,
	"&LeftTee;":                         true,
	"&LeftTeeArrow;":                    true,
	"&LeftTeeVector;":                   true,
	"&LeftTriangle;":                    true,
	"&LeftTriangleBar;":                 true,
	"&LeftTriangleEqual;":               true,
	"&LeftUpDownVector;":                true,
	"&LeftUpTeeVector;":                 true,
	"&LeftUpVector;":                    true,
	"&LeftUpVectorBar;":                 true,
	"&LeftVector;":                      true,
	"&LeftVectorBar;":                   true,
	"&Leftarrow;":                       true,
	"&Leftrightarrow;":                  true,
	"&LessEqualGreater;":                true,
	"&LessFullEqual;":                   true,
	"&LessGreater;":                     true,
	"&LessLess;":                        true,
	"&LessSlantEqual;":                  true,
	"&LessTilde;":                       true,
	"&Lfr;":                             true,
	"&Ll;":                              true,
	"&Lleftarrow;":                      true,
	"&Lmidot;":                          true,
	"&LongLeftArrow;":                   true,
	"&LongLeftRightArrow;":              true,
	"&LongRightArrow;":                  true,
	"&Longleftarrow;":                   true,
	"&Longleftrightarrow;":              true,
	"&Longrightarrow;":                  true,
	"&Lopf;":                            true,
	"&LowerLeftArrow;":                  true,
	"&LowerRightArrow;":                 true,
	"&Lscr;":                            true,
	"&Lsh;":                             true,
	"&Lstrok;":                          true,
	"&Lt;":                              true,
	"&Map;":                             true,
	"&Mcy;":                             true,
	"&MediumSpace;":                     true,
	"&Mellintrf;":                       true,
	"&Mfr;":                             true,
	"&MinusPlus;":                       true,
	"&Mopf;":                            true,
	"&Mscr;":                            true,
	"&Mu;":                              true,
	"&NJcy;":                            true,
	"&Nacute;":                          true,
	"&Ncaron;":                          true,
	"&Ncedil;":                          true,
	"&Ncy;":                             true,
	"&NegativeMediumSpace;":             true,
	"&NegativeThickSpace;":              true,
	"&NegativeThinSpace;":               true,
	"&NegativeVeryThinSpace;":           true,
	"&NestedGreaterGreater;":            true,
	"&NestedLessLess;":                  true,
	"&NewLine;":                         true,
	"&Nfr;":                             true,
	"&NoBreak;":                         true,
	"&NonBreakingSpace;":                true,
	"&Nopf;":                            true,
	"&Not;":                             true,
	"&NotCongruent;":                    true,
	"&NotCupCap;":                       true,
	"&NotDoubleVerticalBar;":            true,
	"&NotElement;":                      true,
	"&NotEqual;":                        true,
	"&NotEqualTilde;":                   true,
	"&NotExists;":                       true,
	"&NotGreater;":                      true,
	"&NotGreaterEqual;":                 true,
	"&NotGreaterFullEqual;":             true,
	"&NotGreaterGreater;":               true,
	"&NotGreaterLess;":                  true,
	"&NotGreaterSlantEqual;":            true,
	"&NotGreaterTilde;":                 true,
	"&NotHumpDownHump;":                 true,
	"&NotHumpEqual;":                    true,
	"&NotLeftTriangle;":                 true,
	"&NotLeftTriangleBar;":              true,
	"&NotLeftTriangleEqual;":            true,
	"&NotLess;":                         true,
	"&NotLessEqual;":                    true,
	"&NotLessGreater;":                  true,
	"&NotLessLess;":                     true,
	"&NotLessSlantEqual;":               true,
	"&NotLessTilde;":                    true,
	"&NotNestedGreaterGreater;":         true,
	"&NotNestedLessLess;":               true,
	"&NotPrecedes;":                     true,
	"&NotPrecedesEqual;":                true,
	"&NotPrecedesSlantEqual;":           true,
	"&NotReverseElement;":               true,
	"&NotRightTriangle;":                true,
	"&NotRightTriangleBar;":             true,
	"&NotRightTriangleEqual;":           true,
	"&NotSquareSubset;":                 true,
	"&NotSquareSubsetEqual;":            true,
	"&NotSquareSuperset;":               true,
	"&NotSquareSupersetEqual;":          true,
	"&NotSubset;":                       true,
	"&NotSubsetEqual;":                  true,
	"&NotSucceeds;":                     true,
	"&NotSucceedsEqual;":                true,
	"&NotSucceedsSlantEqual;":           true,
	"&NotSucceedsTilde;":                true,
	"&NotSuperset;":                     true,
	"&NotSupersetEqual;":                true,
	"&NotTilde;":                        true,
	"&NotTildeEqual;":                   true,
	"&NotTildeFullEqual;":               true,
	"&NotTildeTilde;":                   true,
	"&NotVerticalBar;":                  true,
	"&Nscr;":                            true,
	"&Ntilde":                           true,
	"&Ntilde;":                          true,
	"&Nu;":                              true,
	"&OElig;":                           true,
	"&Oacute":                           true,
	"&Oacute;":                          true,
	"&Ocirc":                            true,
	"&Ocirc;":                           true,
	"&Ocy;":                             true,
	"&Odblac;":                          true,
	"&Ofr;":                             true,
	"&Ograve":                           true,
	"&Ograve;":                          true,
	"&Omacr;":                           true,
	"&Omega;":                           true,
	"&Omicron;":                         true,
	"&Oopf;":                            true,
	"&OpenCurlyDoubleQuote;":            true,
	"&OpenCurlyQuote;":                  true,
	"&Or;":                              true,
	"&Oscr;":                            true,
	"&Oslash":                           true,
	"&Oslash;":                          true,
	"&Otilde":                           true,
	"&Otilde;":                          true,
	"&Otimes;":                          true,
	"&Ouml":                             true,
	"&Ouml;":                            true,
	"&OverBar;":                         true,
	"&OverBrace;":                       true,
	"&OverBracket;":                     true,
	"&OverParenthesis;":                 true,
	"&PartialD;":                        true,
	"&Pcy;":                             true,
	"&Pfr;":                             true,
	"&Phi;":                             true,
	"&Pi;":                              true,
	"&PlusMinus;":                       true,
	"&Poincareplane;":                   true,
	"&Popf;":                            true,
	"&Pr;":                              true,
	"&Precedes;":                        true,
	"&PrecedesEqual;":                   true,
	"&PrecedesSlantEqual;":              true,
	"&PrecedesTilde;":                   true,
	"&Prime;":                           true,
	"&Product;":                         true,
	"&Proportion;":                      true,
	"&Proportional;":                    true,
	"&Pscr;":                            true,
	"&Psi;":                             true,
	"&QUOT":                             true,
	"&QUOT;":                            true,
	"&Qfr;":                             true,
	"&Qopf;":                            true,
	"&Qscr;":                            true,
	"&RBarr;":                           true,
	"&REG":                              true,
	"&REG;":                             true,
	"&Racute;":                          true,
	"&Rang;":                            true,
	"&Rarr;":                            true,
	"&Rarrtl;":                          true,
	"&Rcaron;":                          true,
	"&Rcedil;":                          true,
	"&Rcy;":                             true,
	"&Re;":                              true,
	"&ReverseElement;":                  true,
	"&ReverseEquilibrium;":              true,
	"&ReverseUpEquilibrium;":            true,
	"&Rfr;":                             true,
	"&Rho;":                             true,
	"&RightAngleBracket;":               true,
	"&RightArrow;":                      true,
	"&RightArrowBar;":                   true,
	"&RightArrowLeftArrow;":             true,
	"&RightCeiling;":                    true,
	"&RightDoubleBracket;":              true,
	"&RightDownTeeVector;":              true,
	"&RightDownVector;":                 true,
	"&RightDownVectorBar;":              true,
	"&RightFloor;":                      true,
	"&RightTee;":                        true,
	"&RightTeeArrow;":                   true,
	"&RightTeeVector;":                  true,
	"&RightTriangle;":                   true,
	"&RightTriangleBar;":                true,
	"&RightTriangleEqual;":              true,
	"&RightUpDownVector;":               true,
	"&RightUpTeeVector;":                true,
	"&RightUpVector;":                   true,
	"&RightUpVectorBar;":                true,
	"&RightVector;":                     true,
	"&RightVectorBar;":                  true,
	"&Rightarrow;":                      true,
	"&Ropf;":                            true,
	"&RoundImplies;":                    true,
	"&Rrightarrow;":                     true,
	"&Rscr;":                            true,
	"&Rsh;":                             true,
	"&RuleDelayed;":                     true,
	"&SHCHcy;":                          true,
	"&SHcy;":                            true,
	"&SOFTcy;":                          true,
	"&Sacute;":                          true,
	"&Sc;":                              true,
	"&Scaron;":                          true,
	"&Scedil;":                          true,
	"&Scirc;":                           true,
	"&Scy;":                             true,
	"&Sfr;":                             true,
	"&ShortDownArrow;":                  true,
	"&ShortLeftArrow;":                  true,
	"&ShortRightArrow;":                 true,
	"&ShortUpArrow;":                    true,
	"&Sigma;":                           true,
	"&SmallCircle;":                     true,
	"&Sopf;":                            true,
	"&Sqrt;":                            true,
	"&Square;":                          true,
	"&SquareIntersection;":              true,
	"&SquareSubset;":                    true,
	"&SquareSubsetEqual;":               true,
	"&SquareSuperset;":                  true,
	"&SquareSupersetEqual;":             true,
	"&SquareUnion;":                     true,
	"&Sscr;":                            true,
	"&Star;":                            true,
	"&Sub;":                             true,
	"&Subset;":                          true,
	"&SubsetEqual;":                     true,
	"&Succeeds;":                        true,
	"&SucceedsEqual;":                   true,
	"&SucceedsSlantEqual;":              true,
	"&SucceedsTilde;":                   true,
	"&SuchThat;":                        true,
	"&Sum;":                             true,
	"&Sup;":                             true,
	"&Superset;":                        true,
	"&SupersetEqual;":                   true,
	"&Supset;":                          true,
	"&THORN":                            true,
	"&THORN;":                           true,
	"&TRADE;":                           true,
	"&TSHcy;":                           true,
	"&TScy;":                            true,
	"&Tab;":                             true,
	"&Tau;":                             true,
	"&Tcaron;":                          true,
	"&Tcedil;":                          true,
	"&Tcy;":                             true,
	"&Tfr;":                             true,
	"&Therefore;":                       true,
	"&Theta;":                           true,
	"&ThickSpace;":                      true,
	"&ThinSpace;":                       true,
	"&Tilde;":                           true,
	"&TildeEqual;":                      true,
	"&TildeFullEqual;":                  true,
	"&TildeTilde;":                      true,
	"&Topf;":                            true,
	"&TripleDot;":                       true,
	"&Tscr;":                            true,
	"&Tstrok;":                          true,
	"&Uacute":                           true,
	"&Uacute;":                          true,
	"&Uarr;":                            true,
	"&Uarrocir;":                        true,
	"&Ubrcy;":                           true,
	"&Ubreve;":                          true,
	"&Ucirc":                            true,
	"&Ucirc;":                           true,
	"&Ucy;":                             true,
	"&Udblac;":                          true,
	"&Ufr;":                             true,
	"&Ugrave":                           true,
	"&Ugrave;":                          true,
	"&Umacr;":                           true,
	"&UnderBar;":                        true,
	"&UnderBrace;":                      true,
	"&UnderBracket;":                    true,
	"&UnderParenthesis;":                true,
	"&Union;":                           true,
	"&UnionPlus;":                       true,
	"&Uogon;":                           true,
	"&Uopf;":                            true,
	"&UpArrow;":                         true,
	"&UpArrowBar;":                      true,
	"&UpArrowDownArrow;":                true,
	"&UpDownArrow;":                     true,
	"&UpEquilibrium;":                   true,
	"&UpTee;":                           true,
	"&UpTeeArrow;":                      true,
	"&Uparrow;":                         true,
	"&Updownarrow;":                     true,
	"&UpperLeftArrow;":                  true,
	"&UpperRightArrow;":                 true,
	"&Upsi;":                            true,
	"&Upsilon;":                         true,
	"&Uring;":                           true,
	"&Uscr;":                            true,
	"&Utilde;":                          true,
	"&Uuml":                             true,
	"&Uuml;":                            true,
	"&VDash;":                           true,
	"&Vbar;":                            true,
	"&Vcy;":                             true,
	"&Vdash;":                           true,
	"&Vdashl;":                          true,
	"&Vee;":                             true,
	"&Verbar;":                          true,
	"&Vert;":                            true,
	"&VerticalBar;":                     true,
	"&VerticalLine;":                    true,
	"&VerticalSeparator;":               true,
	"&VerticalTilde;":                   true,
	"&VeryThinSpace;":                   true,
	"&Vfr;":                             true,
	"&Vopf;":                            true,
	"&Vscr;":                            true,
	"&Vvdash;":                          true,
	"&Wcirc;":                           true,
	"&Wedge;":                           true,
	"&Wfr;":                             true,
	"&Wopf;":                            true,
	"&Wscr;":                            true,
	"&Xfr;":                             true,
	"&Xi;":                              true,
	"&Xopf;":                            true,
	"&Xscr;":                            true,
	"&YAcy;":                            true,
	"&YIcy;":                            true,
	"&YUcy;":                            true,
	"&Yacute":                           true,
	"&Yacute;":                          true,
	"&Ycirc;":                           true,
	"&Ycy;":                             true,
	"&Yfr;":                             true,
	"&Yopf;":                            true,
	"&Yscr;":                            true,
	"&Yuml;":                            true,
	"&ZHcy;":                            true,
	"&Zacute;":                          true,
	"&Zcaron;":                          true,
	"&Zcy;":                             true,
	"&Zdot;":                            true,
	"&ZeroWidthSpace;":                  true,
	"&Zeta;":                            true,
	"&Zfr;":                             true,
	"&Zopf;":                            true,
	"&Zscr;":                            true,
	"&aacute":                           true,
	"&aacute;":                          true,
	"&abreve;":                          true,
	"&ac;":                              true,
	"&acE;":                             true,
	"&acd;":                             true,
	"&acirc":                            true,
	"&acirc;":                           true,
	"&acute":                            true,
	"&acute;":                           true,
	"&acy;":                             true,
	"&aelig":                            true,
	"&aelig;":                           true,
	"&af;":                              true,
	"&afr;":                             true,
	"&agrave":                           true,
	"&agrave;":                          true,
	"&alefsym;":                         true,
	"&aleph;":                           true,
	"&alpha;":                           true,
	"&amacr;":                           true,
	"&amalg;":                           true,
	"&amp":                              true,
	"&amp;":                             true,
	"&and;":                             true,
	"&andand;":                          true,
	"&andd;":                            true,
	"&andslope;":                        true,
	"&andv;":                            true,
	"&ang;":                             true,
	"&ange;":                            true,
	"&angle;":                           true,
	"&angmsd;":                          true,
	"&angmsdaa;":                        true,
	"&angmsdab;":                        true,
	"&angmsdac;":                        true,
	"&angmsdad;":                        true,
	"&angmsdae;":                        true,
	"&angmsdaf;":                        true,
	"&angmsdag;":                        true,
	"&angmsdah;":                        true,
	"&angrt;":                           true,
	"&angrtvb;":                         true,
	"&angrtvbd;":                        true,
	"&angsph;":                          true,
	"&angst;":                           true,
	"&angzarr;":                         true,
	"&aogon;":                           true,
	"&aopf;":                            true,
	"&ap;":                              true,
	"&apE;":                             true,
	"&apacir;":                          true,
	"&ape;":                             true,
	"&apid;":                            true,
	"&apos;":                            true,
	"&approx;":                          true,
	"&approxeq;":                        true,
	"&aring":                            true,
	"&aring;":                           true,
	"&ascr;":                            true,
	"&ast;":                             true,
	"&asymp;":                           true,
	"&asympeq;":                         true,
	"&atilde":                           true,
	"&atilde;":                          true,
	"&auml":                             true,
	"&auml;":                            true,
	"&awconint;":                        true,
	"&awint;":                           true,
	"&bNot;":                            true,
	"&backcong;":                        true,
	"&backepsilon;":                     true,
	"&backprime;":                       true,
	"&backsim;":                         true,
	"&backsimeq;":                       true,
	"&barvee;":                          true,
	"&barwed;":                          true,
	"&barwedge;":                        true,
	"&bbrk;":                            true,
	"&bbrktbrk;":                        true,
	"&bcong;":                           true,
	"&bcy;":                             true,
	"&bdquo;":                           true,
	"&becaus;":                          true,
	"&because;":                         true,
	"&bemptyv;":                         true,
	"&bepsi;":                           true,
	"&bernou;":                          true,
	"&beta;":                            true,
	"&beth;":                            true,
	"&between;":                         true,
	"&bfr;":                             true,
	"&bigcap;":                          true,
	"&bigcirc;":                         true,
	"&bigcup;":                          true,
	"&bigodot;":                         true,
	"&bigoplus;":                        true,
	"&bigotimes;":                       true,
	"&bigsqcup;":                        true,
	"&bigstar;":                         true,
	"&bigtriangledown;":                 true,
	"&bigtriangleup;":                   true,
	"&biguplus;":                        true,
	"&bigvee;":                          true,
	"&bigwedge;":                        true,
	"&bkarow;":                          true,
	"&blacklozenge;":                    true,
	"&blacksquare;":                     true,
	"&blacktriangle;":                   true,
	"&blacktriangledown;":               true,
	"&blacktriangleleft;":               true,
	"&blacktriangleright;":              true,
	"&blank;":                           true,
	"&blk12;":                           true,
	"&blk14;":                           true,
	"&blk34;":                           true,
	"&block;":                           true,
	"&bne;":                             true,
	"&bnequiv;":                         true,
	"&bnot;":                            true,
	"&bopf;":                            true,
	"&bot;":                             true,
	"&bottom;":                          true,
	"&bowtie;":                          true,
	"&boxDL;":                           true,
	"&boxDR;":                           true,
	"&boxDl;":                           true,
	"&boxDr;":                           true,
	"&boxH;":                            true,
	"&boxHD;":                           true,
	"&boxHU;":                           true,
	"&boxHd;":                           true,
	"&boxHu;":                           true,
	"&boxUL;":                           true,
	"&boxUR;":                           true,
	"&boxUl;":                           true,
	"&boxUr;":                           true,
	"&boxV;":                            true,
	"&boxVH;":                           true,
	"&boxVL;":                           true,
	"&boxVR;":                           true,
	"&boxVh;":                           true,
	"&boxVl;":                           true,
	"&boxVr;":                           true,
	"&boxbox;":                          true,
	"&boxdL;":                           true,
	"&boxdR;":                           true,
	"&boxdl;":                           true,
	"&boxdr;":                           true,
	"&boxh;":                            true,
	"&boxhD;":                           true,
	"&boxhU;":                           true,
	"&boxhd;":                           true,
	"&boxhu;":                           true,
	"&boxminus;":                        true,
	"&boxplus;":                         true,
	"&boxtimes;":                        true,
	"&boxuL;":                           true,
	"&boxuR;":                           true,
	"&boxul;":                           true,
	"&boxur;":                           true,
	"&boxv;":                            true,
	"&boxvH;":                           true,
	"&boxvL;":                           true,
	"&boxvR;":                           true,
	"&boxvh;":                           true,
	"&boxvl;":                           true,
	"&boxvr;":                           true,
	"&bprime;":                          true,
	"&breve;":                           true,
	"&brvbar":                           true,
	"&brvbar;":                          true,
	"&bscr;":                            true,
	"&bsemi;":                           true,
	"&bsim;":                            true,
	"&bsime;":                           true,
	"&bsol;":                            true,
	"&bsolb;":                           true,
	"&bsolhsub;":                        true,
	"&bull;":                            true,
	"&bullet;":                          true,
	"&bump;":                            true,
	"&bumpE;":                           true,
	"&bumpe;":                           true,
	"&bumpeq;":                          true,
	"&cacute;":                          true,
	"&cap;":                             true,
	"&capand;":                          true,
	"&capbrcup;":                        true,
	"&capcap;":                          true,
	"&capcup;":                          true,
	"&capdot;":                          true,
	"&caps;":                            true,
	"&caret;":                           true,
	"&caron;":                           true,
	"&ccaps;":                           true,
	"&ccaron;":                          true,
	"&ccedil":                           true,
	"&ccedil;":                          true,
	"&ccirc;":                           true,
	"&ccups;":                           true,
	"&ccupssm;":                         true,
	"&cdot;":                            true,
	"&cedil":                            true,
	"&cedil;":                           true,
	"&cemptyv;":                         true,
	"&cent":                             true,
	"&cent;":                            true,
	"&centerdot;":                       true,
	"&cfr;":                             true,
	"&chcy;":                            true,
	"&check;":                           true,
	"&checkmark;":                       true,
	"&chi;":                             true,
	"&cir;":                             true,
	"&cirE;":                            true,
	"&circ;":                            true,
	"&circeq;":                          true,
	"&circlearrowleft;":                 true,
	"&circlearrowright;":                true,
	"&circledR;":                        true,
	"&circledS;":                        true,
	"&circledast;":                      true,
	"&circledcirc;":                     true,
	"&circleddash;":                     true,
	"&cire;":                            true,
	"&cirfnint;":                        true,
	"&cirmid;":                          true,
	"&cirscir;":                         true,
	"&clubs;":                           true,
	"&clubsuit;":                        true,
	"&colon;":                           true,
	"&colone;":                          true,
	"&coloneq;":                         true,
	"&comma;":                           true,
	"&commat;":                          true,
	"&comp;":                            true,
	"&compfn;":                          true,
	"&complement;":                      true,
	"&complexes;":                       true,
	"&cong;":                            true,
	"&congdot;":                         true,
	"&conint;":                          true,
	"&copf;":                            true,
	"&coprod;":                          true,
	"&copy":                             true,
	"&copy;":                            true,
	"&copysr;":                          true,
	"&crarr;":                           true,
	"&cross;":                           true,
	"&cscr;":                            true,
	"&csub;":                            true,
	"&csube;":                           true,
	"&csup;":                            true,
	"&csupe;":                           true,
	"&ctdot;":                           true,
	"&cudarrl;":                         true,
	"&cudarrr;":                         true,
	"&cuepr;":                           true,
	"&cuesc;":                           true,
	"&cularr;":                          true,
	"&cularrp;":                         true,
	"&cup;":                             true,
	"&cupbrcap;":                        true,
	"&cupcap;":                          true,
	"&cupcup;":                          true,
	"&cupdot;":                          true,
	"&cupor;":                           true,
	"&cups;":                            true,
	"&curarr;":                          true,
	"&curarrm;":                         true,
	"&curlyeqprec;":                     true,
	"&curlyeqsucc;":                     true,
	"&curlyvee;":                        true,
	"&curlywedge;":                      true,
	"&curren":                           true,
	"&curren;":                          true,
	"&curvearrowleft;":                  true,
	"&curvearrowright;":                 true,
	"&cuvee;":                           true,
	"&cuwed;":                           true,
	"&cwconint;":                        true,
	"&cwint;":                           true,
	"&cylcty;":                          true,
	"&dArr;":                            true,
	"&dHar;":                            true,
	"&dagger;":                          true,
	"&daleth;":                          true,
	"&darr;":                            true,
	"&dash;":                            true,
	"&dashv;":                           true,
	"&dbkarow;":                         true,
	"&dblac;":                           true,
	"&dcaron;":                          true,
	"&dcy;":                             true,
	"&dd;":                              true,
	"&ddagger;":                         true,
	"&ddarr;":                           true,
	"&ddotseq;":                         true,
	"&deg":                              true,
	"&deg;":                             true,
	"&delta;":                           true,
	"&demptyv;":                         true,
	"&dfisht;":                          true,
	"&dfr;":                             true,
	"&dharl;":                           true,
	"&dharr;":                           true,
	"&diam;":                            true,
	"&diamond;":                         true,
	"&diamondsuit;":                     true,
	"&diams;":                           true,
	"&die;":                             true,
	"&digamma;":                         true,
	"&disin;":                           true,
	"&div;":                             true,
	"&divide":                           true,
	"&divide;":                          true,
	"&divideontimes;":                   true,
	"&divonx;":                          true,
	"&djcy;":                            true,
	"&dlcorn;":                          true,
	"&dlcrop;":                          true,
	"&dollar;":                          true,
	"&dopf;":                            true,
	"&dot;":                             true,
	"&doteq;":                           true,
	"&doteqdot;":                        true,
	"&dotminus;":                        true,
	"&dotplus;":                         true,
	"&dotsquare;":                       true,
	"&doublebarwedge;":                  true,
	"&downarrow;":                       true,
	"&downdownarrows;":                  true,
	"&downharpoonleft;":                 true,
	"&downharpoonright;":                true,
	"&drbkarow;":                        true,
	"&drcorn;":                          true,
	"&drcrop;":                          true,
	"&dscr;":                            true,
	"&dscy;":                            true,
	"&dsol;":                            true,
	"&dstrok;":                          true,
	"&dtdot;":                           true,
	"&dtri;":                            true,
	"&dtrif;":                           true,
	"&duarr;":                           true,
	"&duhar;":                           true,
	"&dwangle;":                         true,
	"&dzcy;":                            true,
	"&dzigrarr;":                        true,
	"&eDDot;":                           true,
	"&eDot;":                            true,
	"&eacute":                           true,
	"&eacute;":                          true,
	"&easter;":                          true,
	"&ecaron;":                          true,
	"&ecir;":                            true,
	"&ecirc":                            true,
	"&ecirc;":                           true,
	"&ecolon;":                          true,
	"&ecy;":                             true,
	"&edot;":                            true,
	"&ee;":                              true,
	"&efDot;":                           true,
	"&efr;":                             true,
	"&eg;":                              true,
	"&egrave":                           true,
	"&egrave;":                          true,
	"&egs;":                             true,
	"&egsdot;":                          true,
	"&el;":                              true,
	"&elinters;":                        true,
	"&ell;":                             true,
	"&els;":                             true,
	"&elsdot;":                          true,
	"&emacr;":                           true,
	"&empty;":                           true,
	"&emptyset;":                        true,
	"&emptyv;":                          true,
	"&emsp13;":                          true,
	"&emsp14;":                          true,
	"&emsp;":                            true,
	"&eng;":                             true,
	"&ensp;":                            true,
	"&eogon;":                           true,
	"&eopf;":                            true,
	"&epar;":                            true,
	"&eparsl;":                          true,
	"&eplus;":                           true,
	"&epsi;":                            true,
	"&epsilon;":                         true,
	"&epsiv;":                           true,
	"&eqcirc;":                          true,
	"&eqcolon;":                         true,
	"&eqsim;":                           true,
	"&eqslantgtr;":                      true,
	"&eqslantless;":                     true,
	"&equals;":                          true,
	"&equest;":                          true,
	"&equiv;":                           true,
	"&equivDD;":                         true,
	"&eqvparsl;":                        true,
	"&erDot;":                           true,
	"&erarr;":                           true,
	"&escr;":                            true,
	"&esdot;":                           true,
	"&esim;":                            true,
	"&eta;":                             true,
	"&eth":                              true,
	"&eth;":                             true,
	"&euml":                             true,
	"&euml;":                            true,
	"&euro;":                            true,
	"&excl;":                            true,
	"&exist;":                           true,
	"&expectation;":                     true,
	"&exponentiale;":                    true,
	"&fallingdotseq;":                   true,
	"&fcy;":                             true,
	"&female;":                          true,
	"&ffilig;":                          true,
	"&fflig;":                           true,
	"&ffllig;":                          true,
	"&ffr;":                             true,
	"&filig;":                           true,
	"&fjlig;":                           true,
	"&flat;":                            true,
	"&fllig;":                           true,
	"&fltns;":                           true,
	"&fnof;":                            true,
	"&fopf;":                            true,
	"&forall;":                          true,
	"&fork;":                            true,
	"&forkv;":                           true,
	"&fpartint;":                        true,
	"&frac12":                           true,
	"&frac12;":                          true,
	"&frac13;":                          true,
	"&frac14":                           true,
	"&frac14;":                          true,
	"&frac15;":                          true,
	"&frac16;":                          true,
	"&frac18;":                          true,
	"&frac23;":                          true,
	"&frac25;":                          true,
	"&frac34":                           true,
	"&frac34;":                          true,
	"&frac35;":                          true,
	"&frac38;":                          true,
	"&frac45;":                          true,
	"&frac56;":                          true,
	"&frac58;":                          true,
	"&frac78;":                          true,
	"&frasl;":                           true,
	"&frown;":                           true,
	"&fscr;":                            true,
	"&gE;":                              true,
	"&gEl;":                             true,
	"&gacute;":                          true,
	"&gamma;":                           true,
	"&gammad;":                          true,
	"&gap;":                             true,
	"&gbreve;":                          true,
	"&gcirc;":                           true,
	"&gcy;":                             true,
	"&gdot;":                            true,
	"&ge;":                              true,
	"&gel;":                             true,
	"&geq;":                             true,
	"&geqq;":                            true,
	"&geqslant;":                        true,
	"&ges;":                             true,
	"&gescc;":                           true,
	"&gesdot;":                          true,
	"&gesdoto;":                         true,
	"&gesdotol;":                        true,
	"&gesl;":                            true,
	"&gesles;":                          true,
	"&gfr;":                             true,
	"&gg;":                              true,
	"&ggg;":                             true,
	"&gimel;":                           true,
	"&gjcy;":                            true,
	"&gl;":                              true,
	"&glE;":                             true,
	"&gla;":                             true,
	"&glj;":                             true,
	"&gnE;":                             true,
	"&gnap;":                            true,
	"&gnapprox;":                        true,
	"&gne;":                             true,
	"&gneq;":                            true,
	"&gneqq;":                           true,
	"&gnsim;":                           true,
	"&gopf;":                            true,
	"&grave;":                           true,
	"&gscr;":                            true,
	"&gsim;":                            true,
	"&gsime;":                           true,
	"&gsiml;":                           true,
	"&gt":                               true,
	"&gt;":                              true,
	"&gtcc;":                            true,
	"&gtcir;":                           true,
	"&gtdot;":                           true,
	"&gtlPar;":                          true,
	"&gtquest;":                         true,
	"&gtrapprox;":                       true,
	"&gtrarr;":                          true,
	"&gtrdot;":                          true,
	"&gtreqless;":                       true,
	"&gtreqqless;":                      true,
	"&gtrless;":                         true,
	"&gtrsim;":                          true,
	"&gvertneqq;":                       true,
	"&gvnE;":                            true,
	"&hArr;":                            true,
	"&hairsp;":                          true,
	"&half;":                            true,
	"&hamilt;":                          true,
	"&hardcy;":                          true,
	"&harr;":                            true,
	"&harrcir;":                         true,
	"&harrw;":                           true,
	"&hbar;":                            true,
	"&hcirc;":                           true,
	"&hearts;":                          true,
	"&heartsuit;":                       true,
	"&hellip;":                          true,
	"&hercon;":                          true,
	"&hfr;":                             true,
	"&hksearow;":                        true,
	"&hkswarow;":                        true,
	"&hoarr;":                           true,
	"&homtht;":                          true,
	"&hookleftarrow;":                   true,
	"&hookrightarrow;":                  true,
	"&hopf;":                            true,
	"&horbar;":                          true,
	"&hscr;":                            true,
	"&hslash;":                          true,
	"&hstrok;":                          true,
	"&hybull;":                          true,
	"&hyphen;":                          true,
	"&iacute":                           true,
	"&iacute;":                          true,
	"&ic;":                              true,
	"&icirc":                            true,
	"&icirc;":                           true,
	"&icy;":                             true,
	"&iecy;":                            true,
	"&iexcl":                            true,
	"&iexcl;":                           true,
	"&iff;":                             true,
	"&ifr;":                             true,
	"&igrave":                           true,
	"&igrave;":                          true,
	"&ii;":                              true,
	"&iiiint;":                          true,
	"&iiint;":                           true,
	"&iinfin;":                          true,
	"&iiota;":                           true,
	"&ijlig;":                           true,
	"&imacr;":                           true,
	"&image;":                           true,
	"&imagline;":                        true,
	"&imagpart;":                        true,
	"&imath;":                           true,
	"&imof;":                            true,
	"&imped;":                           true,
	"&in;":                              true,
	"&incare;":                          true,
	"&infin;":                           true,
	"&infintie;":                        true,
	"&inodot;":                          true,
	"&int;":                             true,
	"&intcal;":                          true,
	"&integers;":                        true,
	"&intercal;":                        true,
	"&intlarhk;":                        true,
	"&intprod;":                         true,
	"&iocy;":                            true,
	"&iogon;":                           true,
	"&iopf;":                            true,
	"&iota;":                            true,
	"&iprod;":                           true,
	"&iquest":                           true,
	"&iquest;":                          true,
	"&iscr;":                            true,
	"&isin;":                            true,
	"&isinE;":                           true,
	"&isindot;":                         true,
	"&isins;":                           true,
	"&isinsv;":                          true,
	"&isinv;":                           true,
	"&it;":                              true,
	"&itilde;":                          true,
	"&iukcy;":                           true,
	"&iuml":                             true,
	"&iuml;":                            true,
	"&jcirc;":                           true,
	"&jcy;":                             true,
	"&jfr;":                             true,
	"&jmath;":                           true,
	"&jopf;":                            true,
	"&jscr;":                            true,
	"&jsercy;":                          true,
	"&jukcy;":                           true,
	"&kappa;":                           true,
	"&kappav;":                          true,
	"&kcedil;":                          true,
	"&kcy;":                             true,
	"&kfr;":                             true,
	"&kgreen;":                          true,
	"&khcy;":                            true,
	"&kjcy;":                            true,
	"&kopf;":                            true,
	"&kscr;":                            true,
	"&lAarr;":                           true,
	"&lArr;":                            true,
	"&lAtail;":                          true,
	"&lBarr;":                           true,
	"&lE;":                              true,
	"&lEg;":                             true,
	"&lHar;":                            true,
	"&lacute;":                          true,
	"&laemptyv;":                        true,
	"&lagran;":                          true,
	"&lambda;":                          true,
	"&lang;":                            true,
	"&langd;":                           true,
	"&langle;":                          true,
	"&lap;":                             true,
	"&laquo":                            true,
	"&laquo;":                           true,
	"&larr;":                            true,
	"&larrb;":                           true,
	"&larrbfs;":                         true,
	"&larrfs;":                          true,
	"&larrhk;":                          true,
	"&larrlp;":                          true,
	"&larrpl;":                          true,
	"&larrsim;":                         true,
	"&larrtl;":                          true,
	"&lat;":                             true,
	"&latail;":                          true,
	"&late;":                            true,
	"&lates;":                           true,
	"&lbarr;":                           true,
	"&lbbrk;":                           true,
	"&lbrace;":                          true,
	"&lbrack;":                          true,
	"&lbrke;":                           true,
	"&lbrksld;":                         true,
	"&lbrkslu;":                         true,
	"&lcaron;":                          true,
	"&lcedil;":                          true,
	"&lceil;":                           true,
	"&lcub;":                            true,
	"&lcy;":                             true,
	"&ldca;":                            true,
	"&ldquo;":                           true,
	"&ldquor;":                          true,
	"&ldrdhar;":                         true,
	"&ldrushar;":                        true,
	"&ldsh;":                            true,
	"&le;":                              true,
	"&leftarrow;":                       true,
	"&leftarrowtail;":                   true,
	"&leftharpoondown;":                 true,
	"&leftharpoonup;":                   true,
	"&leftleftarrows;":                  true,
	"&leftrightarrow;":                  true,
	"&leftrightarrows;":                 true,
	"&leftrightharpoons;":               true,
	"&leftrightsquigarrow;":             true,
	"&leftthreetimes;":                  true,
	"&leg;":                             true,
	"&leq;":                             true,
	"&leqq;":                            true,
	"&leqslant;":                        true,
	"&les;":                             true,
	"&lescc;":                           true,
	"&lesdot;":                          true,
	"&lesdoto;":                         true,
	"&lesdotor;":                        true,
	"&lesg;":                            true,
	"&lesges;":                          true,
	"&lessapprox;":                      true,
	"&lessdot;":                         true,
	"&lesseqgtr;":                       true,
	"&lesseqqgtr;":                      true,
	"&lessgtr;":                         true,
	"&lesssim;":                         true,
	"&lfisht;":                          true,
	"&lfloor;":                          true,
	"&lfr;":                             true,
	"&lg;":                              true,
	"&lgE;":                             true,
	"&lhard;":                           true,
	"&lharu;":                           true,
	"&lharul;":                          true,
	"&lhblk;":                           true,
	"&ljcy;":                            true,
	"&ll;":                              true,
	"&llarr;":                           true,
	"&llcorner;":                        true,
	"&llhard;":                          true,
	"&lltri;":                           true,
	"&lmidot;":                          true,
	"&lmoust;":                          true,
	"&lmoustache;":                      true,
	"&lnE;":                             true,
	"&lnap;":                            true,
	"&lnapprox;":                        true,
	"&lne;":                             true,
	"&lneq;":                            true,
	"&lneqq;":                           true,
	"&lnsim;":                           true,
	"&loang;":                           true,
	"&loarr;":                           true,
	"&lobrk;":                           true,
	"&longleftarrow;":                   true,
	"&longleftrightarrow;":              true,
	"&longmapsto;":                      true,
	"&longrightarrow;":                  true,
	"&looparrowleft;":                   true,
	"&looparrowright;":                  true,
	"&lopar;":                           true,
	"&lopf;":                            true,
	"&loplus;":                          true,
	"&lotimes;":                         true,
	"&lowast;":                          true,
	"&lowbar;":                          true,
	"&loz;":                             true,
	"&lozenge;":                         true,
	"&lozf;":                            true,
	"&lpar;":                            true,
	"&lparlt;":                          true,
	"&lrarr;":                           true,
	"&lrcorner;":                        true,
	"&lrhar;":                           true,
	"&lrhard;":                          true,
	"&lrm;":                             true,
	"&lrtri;":                           true,
	"&lsaquo;":                          true,
	"&lscr;":                            true,
	"&lsh;":                             true,
	"&lsim;":                            true,
	"&lsime;":                           true,
	"&lsimg;":                           true,
	"&lsqb;":                            true,
	"&lsquo;":                           true,
	"&lsquor;":                          true,
	"&lstrok;":                          true,
	"&lt":                               true,
	"&lt;":                              true,
	"&ltcc;":                            true,
	"&ltcir;":                           true,
	"&ltdot;":                           true,
	"&lthree;":                          true,
	"&ltimes;":                          true,
	"&ltlarr;":                          true,
	"&ltquest;":                         true,
	"&ltrPar;":                          true,
	"&ltri;":                            true,
	"&ltrie;":                           true,
	"&ltrif;":                           true,
	"&lurdshar;":                        true,
	"&luruhar;":                         true,
	"&lvertneqq;":                       true,
	"&lvnE;":                            true,
	"&mDDot;":                           true,
	"&macr":                             true,
	"&macr;":                            true,
	"&male;":                            true,
	"&malt;":                            true,
	"&maltese;":                         true,
	"&map;":                             true,
	"&mapsto;":                          true,
	"&mapstodown;":                      true,
	"&mapstoleft;":                      true,
	"&mapstoup;":                        true,
	"&marker;":                          true,
	"&mcomma;":                          true,
	"&mcy;":                             true,
	"&mdash;":                           true,
	"&measuredangle;":                   true,
	"&mfr;":                             true,
	"&mho;":                             true,
	"&micro":                            true,
	"&micro;":                           true,
	"&mid;":                             true,
	"&midast;":                          true,
	"&midcir;":                          true,
	"&middot":                           true,
	"&middot;":                          true,
	"&minus;":                           true,
	"&minusb;":                          true,
	"&minusd;":                          true,
	"&minusdu;":                         true,
	"&mlcp;":                            true,
	"&mldr;":                            true,
	"&mnplus;":                          true,
	"&models;":                          true,
	"&mopf;":                            true,
	"&mp;":                              true,
	"&mscr;":                            true,
	"&mstpos;":                          true,
	"&mu;":                              true,
	"&multimap;":                        true,
	"&mumap;":                           true,
	"&nGg;":                             true,
	"&nGt;":                             true,
	"&nGtv;":                            true,
	"&nLeftarrow;":                      true,
	"&nLeftrightarrow;":                 true,
	"&nLl;":                             true,
	"&nLt;":                             true,
	"&nLtv;":                            true,
	"&nRightarrow;":                     true,
	"&nVDash;":                          true,
	"&nVdash;":                          true,
	"&nabla;":                           true,
	"&nacute;":                          true,
	"&nang;":                            true,
	"&nap;":                             true,
	"&napE;":                            true,
	"&napid;":                           true,
	"&napos;":                           true,
	"&napprox;":                         true,
	"&natur;":                           true,
	"&natural;":                         true,
	"&naturals;":                        true,
	"&nbsp":                             true,
	"&nbsp;":                            true,
	"&nbump;":                           true,
	"&nbumpe;":                          true,
	"&ncap;":                            true,
	"&ncaron;":                          true,
	"&ncedil;":                          true,
	"&ncong;":                           true,
	"&ncongdot;":                        true,
	"&ncup;":                            true,
	"&ncy;":                             true,
	"&ndash;":                           true,
	"&ne;":                              true,
	"&neArr;":                           true,
	"&nearhk;":                          true,
	"&nearr;":                           true,
	"&nearrow;":                         true,
	"&nedot;":                           true,
	"&nequiv;":                          true,
	"&nesear;":                          true,
	"&nesim;":                           true,
	"&nexist;":                          true,
	"&nexists;":                         true,
	"&nfr;":                             true,
	"&ngE;":                             true,
	"&nge;":                             true,
	"&ngeq;":                            true,
	"&ngeqq;":                           true,
	"&ngeqslant;":                       true,
	"&nges;":                            true,
	"&ngsim;":                           true,
	"&ngt;":                             true,
	"&ngtr;":                            true,
	"&nhArr;":                           true,
	"&nharr;":                           true,
	"&nhpar;":                           true,
	"&ni;":                              true,
	"&nis;":                             true,
	"&nisd;":                            true,
	"&niv;":                             true,
	"&njcy;":                            true,
	"&nlArr;":                           true,
	"&nlE;":                             true,
	"&nlarr;":                           true,
	"&nldr;":                            true,
	"&nle;":                             true,
	"&nleftarrow;":                      true,
	"&nleftrightarrow;":                 true,
	"&nleq;":                            true,
	"&nleqq;":                           true,
	"&nleqslant;":                       true,
	"&nles;":                            true,
	"&nless;":                           true,
	"&nlsim;":                           true,
	"&nlt;":                             true,
	"&nltri;":                           true,
	"&nltrie;":                          true,
	"&nmid;":                            true,
	"&nopf;":                            true,
	"&not":                              true,
	"&not;":                             true,
	"&notin;":                           true,
	"&notinE;":                          true,
	"&notindot;":                        true,
	"&notinva;":                         true,
	"&notinvb;":                         true,
	"&notinvc;":                         true,
	"&notni;":                           true,
	"&notniva;":                         true,
	"&notnivb;":                         true,
	"&notnivc;":                         true,
	"&npar;":                            true,
	"&nparallel;":                       true,
	"&nparsl;":                          true,
	"&npart;":                           true,
	"&npolint;":                         true,
	"&npr;":                             true,
	"&nprcue;":                          true,
	"&npre;":                            true,
	"&nprec;":                           true,
	"&npreceq;":                         true,
	"&nrArr;":                           true,
	"&nrarr;":                           true,
	"&nrarrc;":                          true,
	"&nrarrw;":                          true,
	"&nrightarrow;":                     true,
	"&nrtri;":                           true,
	"&nrtrie;":                          true,
	"&nsc;":                             true,
	"&nsccue;":                          true,
	"&nsce;":                            true,
	"&nscr;":                            true,
	"&nshortmid;":                       true,
	"&nshortparallel;":                  true,
	"&nsim;":                            true,
	"&nsime;":                           true,
	"&nsimeq;":                          true,
	"&nsmid;":                           true,
	"&nspar;":                           true,
	"&nsqsube;":                         true,
	"&nsqsupe;":                         true,
	"&nsub;":                            true,
	"&nsubE;":                           true,
	"&nsube;":                           true,
	"&nsubset;":                         true,
	"&nsubseteq;":                       true,
	"&nsubseteqq;":                      true,
	"&nsucc;":                           true,
	"&nsucceq;":                         true,
	"&nsup;":                            true,
	"&nsupE;":                           true,
	"&nsupe;":                           true,
	"&nsupset;":                         true,
	"&nsupseteq;":                       true,
	"&nsupseteqq;":                      true,
	"&ntgl;":                            true,
	"&ntilde":                           true,
	"&ntilde;":                          true,
	"&ntlg;":                            true,
	"&ntriangleleft;":                   true,
	"&ntrianglelefteq;":                 true,
	"&ntriangleright;":                  true,
	"&ntrianglerighteq;":                true,
	"&nu;":                              true,
	"&num;":                             true,
	"&numero;":                          true,
	"&numsp;":                           true,
	"&nvDash;":                          true,
	"&nvHarr;":                          true,
	"&nvap;":                            true,
	"&nvdash;":                          true,
	"&nvge;":                            true,
	"&nvgt;":                            true,
	"&nvinfin;":                         true,
	"&nvlArr;":                          true,
	"&nvle;":                            true,
	"&nvlt;":                            true,
	"&nvltrie;":                         true,
	"&nvrArr;":                          true,
	"&nvrtrie;":                         true,
	"&nvsim;":                           true,
	"&nwArr;":                           true,
	"&nwarhk;":                          true,
	"&nwarr;":                           true,
	"&nwarrow;":                         true,
	"&nwnear;":                          true,
	"&oS;":                              true,
	"&oacute":                           true,
	"&oacute;":                          true,
	"&oast;":                            true,
	"&ocir;":                            true,
	"&ocirc":                            true,
	"&ocirc;":                           true,
	"&ocy;":                             true,
	"&odash;":                           true,
	"&odblac;":                          true,
	"&odiv;":                            true,
	"&odot;":                            true,
	"&odsold;":                          true,
	"&oelig;":                           true,
	"&ofcir;":                           true,
	"&ofr;":                             true,
	"&ogon;":                            true,
	"&ograve":                           true,
	"&ograve;":                          true,
	"&ogt;":                             true,
	"&ohbar;":                           true,
	"&ohm;":                             true,
	"&oint;":                            true,
	"&olarr;":                           true,
	"&olcir;":                           true,
	"&olcross;":                         true,
	"&oline;":                           true,
	"&olt;":                             true,
	"&omacr;":                           true,
	"&omega;":                           true,
	"&omicron;":                         true,
	"&omid;":                            true,
	"&ominus;":                          true,
	"&oopf;":                            true,
	"&opar;":                            true,
	"&operp;":                           true,
	"&oplus;":                           true,
	"&or;":                              true,
	"&orarr;":                           true,
	"&ord;":                             true,
	"&order;":                           true,
	"&orderof;":                         true,
	"&ordf":                             true,
	"&ordf;":                            true,
	"&ordm":                             true,
	"&ordm;":                            true,
	"&origof;":                          true,
	"&oror;":                            true,
	"&orslope;":                         true,
	"&orv;":                             true,
	"&oscr;":                            true,
	"&oslash":                           true,
	"&oslash;":                          true,
	"&osol;":                            true,
	"&otilde":                           true,
	"&otilde;":                          true,
	"&otimes;":                          true,
	"&otimesas;":                        true,
	"&ouml":                             true,
	"&ouml;":                            true,
	"&ovbar;":                           true,
	"&par;":                             true,
	"&para":                             true,
	"&para;":                            true,
	"&parallel;":                        true,
	"&parsim;":                          true,
	"&parsl;":                           true,
	"&part;":                            true,
	"&pcy;":                             true,
	"&percnt;":                          true,
	"&period;":                          true,
	"&permil;":                          true,
	"&perp;":                            true,
	"&pertenk;":                         true,
	"&pfr;":                             true,
	"&phi;":                             true,
	"&phiv;":                            true,
	"&phmmat;":                          true,
	"&phone;":                           true,
	"&pi;":                              true,
	"&pitchfork;":                       true,
	"&piv;":                             true,
	"&planck;":                          true,
	"&planckh;":                         true,
	"&plankv;":                          true,
	"&plus;":                            true,
	"&plusacir;":                        true,
	"&plusb;":                           true,
	"&pluscir;":                         true,
	"&plusdo;":                          true,
	"&plusdu;":                          true,
	"&pluse;":                           true,
	"&plusmn":                           true,
	"&plusmn;":                          true,
	"&plussim;":                         true,
	"&plustwo;":                         true,
	"&pm;":                              true,
	"&pointint;":                        true,
	"&popf;":                            true,
	"&pound":                            true,
	"&pound;":                           true,
	"&pr;":                              true,
	"&prE;":                             true,
	"&prap;":                            true,
	"&prcue;":                           true,
	"&pre;":                             true,
	"&prec;":                            true,
	"&precapprox;":                      true,
	"&preccurlyeq;":                     true,
	"&preceq;":                          true,
	"&precnapprox;":                     true,
	"&precneqq;":                        true,
	"&precnsim;":                        true,
	"&precsim;":                         true,
	"&prime;":                           true,
	"&primes;":                          true,
	"&prnE;":                            true,
	"&prnap;":                           true,
	"&prnsim;":                          true,
	"&prod;":                            true,
	"&profalar;":                        true,
	"&profline;":                        true,
	"&profsurf;":                        true,
	"&prop;":                            true,
	"&propto;":                          true,
	"&prsim;":                           true,
	"&prurel;":                          true,
	"&pscr;":                            true,
	"&psi;":                             true,
	"&puncsp;":                          true,
	"&qfr;":                             true,
	"&qint;":                            true,
	"&qopf;":                            true,
	"&qprime;":                          true,
	"&qscr;":                            true,
	"&quaternions;":                     true,
	"&quatint;":                         true,
	"&quest;":                           true,
	"&questeq;":                         true,
	"&quot":                             true,
	"&quot;":                            true,
	"&rAarr;":                           true,
	"&rArr;":                            true,
	"&rAtail;":                          true,
	"&rBarr;":                           true,
	"&rHar;":                            true,
	"&race;":                            true,
	"&racute;":                          true,
	"&radic;":                           true,
	"&raemptyv;":                        true,
	"&rang;":                            true,
	"&rangd;":                           true,
	"&range;":                           true,
	"&rangle;":                          true,
	"&raquo":                            true,
	"&raquo;":                           true,
	"&rarr;":                            true,
	"&rarrap;":                          true,
	"&rarrb;":                           true,
	"&rarrbfs;":                         true,
	"&rarrc;":                           true,
	"&rarrfs;":                          true,
	"&rarrhk;":                          true,
	"&rarrlp;":                          true,
	"&rarrpl;":                          true,
	"&rarrsim;":                         true,
	"&rarrtl;":                          true,
	"&rarrw;":                           true,
	"&ratail;":                          true,
	"&ratio;":                           true,
	"&rationals;":                       true,
	"&rbarr;":                           true,
	"&rbbrk;":                           true,
	"&rbrace;":                          true,
	"&rbrack;":                          true,
	"&rbrke;":                           true,
	"&rbrksld;":                         true,
	"&rbrkslu;":                         true,
	"&rcaron;":                          true,
	"&rcedil;":                          true,
	"&rceil;":                           true,
	"&rcub;":                            true,
	"&rcy;":                             true,
	"&rdca;":                            true,
	"&rdldhar;":                         true,
	"&rdquo;":                           true,
	"&rdquor;":                          true,
	"&rdsh;":                            true,
	"&real;":                            true,
	"&realine;":                         true,
	"&realpart;":                        true,
	"&reals;":                           true,
	"&rect;":                            true,
	"&reg":                              true,
	"&reg;":                             true,
	"&rfisht;":                          true,
	"&rfloor;":                          true,
	"&rfr;":                             true,
	"&rhard;":                           true,
	"&rharu;":                           true,
	"&rharul;":                          true,
	"&rho;":                             true,
	"&rhov;":                            true,
	"&rightarrow;":                      true,
	"&rightarrowtail;":                  true,
	"&rightharpoondown;":                true,
	"&rightharpoonup;":                  true,
	"&rightleftarrows;":                 true,
	"&rightleftharpoons;":               true,
	"&rightrightarrows;":                true,
	"&rightsquigarrow;":                 true,
	"&rightthreetimes;":                 true,
	"&ring;":                            true,
	"&risingdotseq;":                    true,
	"&rlarr;":                           true,
	"&rlhar;":                           true,
	"&rlm;":                             true,
	"&rmoust;":                          true,
	"&rmoustache;":                      true,
	"&rnmid;":                           true,
	"&roang;":                           true,
	"&roarr;":                           true,
	"&robrk;":                           true,
	"&ropar;":                           true,
	"&ropf;":                            true,
	"&roplus;":                          true,
	"&rotimes;":                         true,
	"&rpar;":                            true,
	"&rpargt;":                          true,
	"&rppolint;":                        true,
	"&rrarr;":                           true,
	"&rsaquo;":                          true,
	"&rscr;":                            true,
	"&rsh;":                             true,
	"&rsqb;":                            true,
	"&rsquo;":                           true,
	"&rsquor;":                          true,
	"&rthree;":                          true,
	"&rtimes;":                          true,
	"&rtri;":                            true,
	"&rtrie;":                           true,
	"&rtrif;":                           true,
	"&rtriltri;":                        true,
	"&ruluhar;":                         true,
	"&rx;":                              true,
	"&sacute;":                          true,
	"&sbquo;":                           true,
	"&sc;":                              true,
	"&scE;":                             true,
	"&scap;":                            true,
	"&scaron;":                          true,
	"&sccue;":                           true,
	"&sce;":                             true,
	"&scedil;":                          true,
	"&scirc;":                           true,
	"&scnE;":                            true,
	"&scnap;":                           true,
	"&scnsim;":                          true,
	"&scpolint;":                        true,
	"&scsim;":                           true,
	"&scy;":                             true,
	"&sdot;":                            true,
	"&sdotb;":                           true,
	"&sdote;":                           true,
	"&seArr;":                           true,
	"&searhk;":                          true,
	"&searr;":                           true,
	"&searrow;":                         true,
	"&sect":                             true,
	"&sect;":                            true,
	"&semi;":                            true,
	"&seswar;":                          true,
	"&setminus;":                        true,
	"&setmn;":                           true,
	"&sext;":                            true,
	"&sfr;":                             true,
	"&sfrown;":                          true,
	"&sharp;":                           true,
	"&shchcy;":                          true,
	"&shcy;":                            true,
	"&shortmid;":                        true,
	"&shortparallel;":                   true,
	"&shy":                              true,
	"&shy;":                             true,
	"&sigma;":                           true,
	"&sigmaf;":                          true,
	"&sigmav;":                          true,
	"&sim;":                             true,
	"&simdot;":                          true,
	"&sime;":                            true,
	"&simeq;":                           true,
	"&simg;":                            true,
	"&simgE;":                           true,
	"&siml;":                            true,
	"&simlE;":                           true,
	"&simne;":                           true,
	"&simplus;":                         true,
	"&simrarr;":                         true,
	"&slarr;":                           true,
	"&smallsetminus;":                   true,
	"&smashp;":                          true,
	"&smeparsl;":                        true,
	"&smid;":                            true,
	"&smile;":                           true,
	"&smt;":                             true,
	"&smte;":                            true,
	"&smtes;":                           true,
	"&softcy;":                          true,
	"&sol;":                             true,
	"&solb;":                            true,
	"&solbar;":                          true,
	"&sopf;":                            true,
	"&spades;":                          true,
	"&spadesuit;":                       true,
	"&spar;":                            true,
	"&sqcap;":                           true,
	"&sqcaps;":                          true,
	"&sqcup;":                           true,
	"&sqcups;":                          true,
	"&sqsub;":                           true,
	"&sqsube;":                          true,
	"&sqsubset;":                        true,
	"&sqsubseteq;":                      true,
	"&sqsup;":                           true,
	"&sqsupe;":                          true,
	"&sqsupset;":                        true,
	"&sqsupseteq;":                      true,
	"&squ;":                             true,
	"&square;":                          true,
	"&squarf;":                          true,
	"&squf;":                            true,
	"&srarr;":                           true,
	"&sscr;":                            true,
	"&ssetmn;":                          true,
	"&ssmile;":                          true,
	"&sstarf;":                          true,
	"&star;":                            true,
	"&starf;":                           true,
	"&straightepsilon;":                 true,
	"&straightphi;":                     true,
	"&strns;":                           true,
	"&sub;":                             true,
	"&subE;":                            true,
	"&subdot;":                          true,
	"&sube;":                            true,
	"&subedot;":                         true,
	"&submult;":                         true,
	"&subnE;":                           true,
	"&subne;":                           true,
	"&subplus;":                         true,
	"&subrarr;":                         true,
	"&subset;":                          true,
	"&subseteq;":                        true,
	"&subseteqq;":                       true,
	"&subsetneq;":                       true,
	"&subsetneqq;":                      true,
	"&subsim;":                          true,
	"&subsub;":                          true,
	"&subsup;":                          true,
	"&succ;":                            true,
	"&succapprox;":                      true,
	"&succcurlyeq;":                     true,
	"&succeq;":                          true,
	"&succnapprox;":                     true,
	"&succneqq;":                        true,
	"&succnsim;":                        true,
	"&succsim;":                         true,
	"&sum;":                             true,
	"&sung;":                            true,
	"&sup1":                             true,
	"&sup1;":                            true,
	"&sup2":                             true,
	"&sup2;":                            true,
	"&sup3":                             true,
	"&sup3;":                            true,
	"&sup;":                             true,
	"&supE;":                            true,
	"&supdot;":                          true,
	"&supdsub;":                         true,
	"&supe;":                            true,
	"&supedot;":                         true,
	"&suphsol;":                         true,
	"&suphsub;":                         true,
	"&suplarr;":                         true,
	"&supmult;":                         true,
	"&supnE;":                           true,
	"&supne;":                           true,
	"&supplus;":                         true,
	"&supset;":                          true,
	"&supseteq;":                        true,
	"&supseteqq;":                       true,
	"&supsetneq;":                       true,
	"&supsetneqq;":                      true,
	"&supsim;":                          true,
	"&supsub;":                          true,
	"&supsup;":                          true,
	"&swArr;":                           true,
	"&swarhk;":                          true,
	"&swarr;":                           true,
	"&swarrow;":                         true,
	"&swnwar;":                          true,
	"&szlig":                            true,
	"&szlig;":                           true,
	"&target;":                          true,
	"&tau;":                             true,
	"&tbrk;":                            true,
	"&tcaron;":                          true,
	"&tcedil;":                          true,
	"&tcy;":                             true,
	"&tdot;":                            true,
	"&telrec;":                          true,
	"&tfr;":                             true,
	"&there4;":                          true,
	"&therefore;":                       true,
	"&theta;":                           true,
	"&thetasym;":                        true,
	"&thetav;":                          true,
	"&thickapprox;":                     true,
	"&thicksim;":                        true,
	"&thinsp;":                          true,
	"&thkap;":                           true,
	"&thksim;":                          true,
	"&thorn":                            true,
	"&thorn;":                           true,
	"&tilde;":                           true,
	"&times":                            true,
	"&times;":                           true,
	"&timesb;":                          true,
	"&timesbar;":                        true,
	"&timesd;":                          true,
	"&tint;":                            true,
	"&toea;":                            true,
	"&top;":                             true,
	"&topbot;":                          true,
	"&topcir;":                          true,
	"&topf;":                            true,
	"&topfork;":                         true,
	"&tosa;":                            true,
	"&tprime;":                          true,
	"&trade;":                           true,
	"&triangle;":                        true,
	"&triangledown;":                    true,
	"&triangleleft;":                    true,
	"&trianglelefteq;":                  true,
	"&triangleq;":                       true,
	"&triangleright;":                   true,
	"&trianglerighteq;":                 true,
	"&tridot;":                          true,
	"&trie;":                            true,
	"&triminus;":                        true,
	"&triplus;":                         true,
	"&trisb;":                           true,
	"&tritime;":                         true,
	"&trpezium;":                        true,
	"&tscr;":                            true,
	"&tscy;":                            true,
	"&tshcy;":                           true,
	"&tstrok;":                          true,
	"&twixt;":                           true,
	"&twoheadleftarrow;":                true,
	"&twoheadrightarrow;":               true,
	"&uArr;":                            true,
	"&uHar;":                            true,
	"&uacute":                           true,
	"&uacute;":                          true,
	"&uarr;":                            true,
	"&ubrcy;":                           true,
	"&ubreve;":                          true,
	"&ucirc":                            true,
	"&ucirc;":                           true,
	"&ucy;":                             true,
	"&udarr;":                           true,
	"&udblac;":                          true,
	"&udhar;":                           true,
	"&ufisht;":                          true,
	"&ufr;":                             true,
	"&ugrave":                           true,
	"&ugrave;":                          true,
	"&uharl;":                           true,
	"&uharr;":                           true,
	"&uhblk;":                           true,
	"&ulcorn;":                          true,
	"&ulcorner;":                        true,
	"&ulcrop;":                          true,
	"&ultri;":                           true,
	"&umacr;":                           true,
	"&uml":                              true,
	"&uml;":                             true,
	"&uogon;":                           true,
	"&uopf;":                            true,
	"&uparrow;":                         true,
	"&updownarrow;":                     true,
	"&upharpoonleft;":                   true,
	"&upharpoonright;":                  true,
	"&uplus;":                           true,
	"&upsi;":                            true,
	"&upsih;":                           true,
	"&upsilon;":                         true,
	"&upuparrows;":                      true,
	"&urcorn;":                          true,
	"&urcorner;":                        true,
	"&urcrop;":                          true,
	"&uring;":                           true,
	"&urtri;":                           true,
	"&uscr;":                            true,
	"&utdot;":                           true,
	"&utilde;":                          true,
	"&utri;":                            true,
	"&utrif;":                           true,
	"&uuarr;":                           true,
	"&uuml":                             true,
	"&uuml;":                            true,
	"&uwangle;":                         true,
	"&vArr;":                            true,
	"&vBar;":                            true,
	"&vBarv;":                           true,
	"&vDash;":                           true,
	"&vangrt;":                          true,
	"&varepsilon;":                      true,
	"&varkappa;":                        true,
	"&varnothing;":                      true,
	"&varphi;":                          true,
	"&varpi;":                           true,
	"&varpropto;":                       true,
	"&varr;":                            true,
	"&varrho;":                          true,
	"&varsigma;":                        true,
	"&varsubsetneq;":                    true,
	"&varsubsetneqq;":                   true,
	"&varsupsetneq;":                    true,
	"&varsupsetneqq;":                   true,
	"&vartheta;":                        true,
	"&vartriangleleft;":                 true,
	"&vartriangleright;":                true,
	"&vcy;":                             true,
	"&vdash;":                           true,
	"&vee;":                             true,
	"&veebar;":                          true,
	"&veeeq;":                           true,
	"&vellip;":                          true,
	"&verbar;":                          true,
	"&vert;":                            true,
	"&vfr;":                             true,
	"&vltri;":                           true,
	"&vnsub;":                           true,
	"&vnsup;":                           true,
	"&vopf;":                            true,
	"&vprop;":                           true,
	"&vrtri;":                           true,
	"&vscr;":                            true,
	"&vsubnE;":                          true,
	"&vsubne;":                          true,
	"&vsupnE;":                          true,
	"&vsupne;":                          true,
	"&vzigzag;":                         true,
	"&wcirc;":                           true,
	"&wedbar;":                          true,
	"&wedge;":                           true,
	"&wedgeq;":                          true,
	"&weierp;":                          true,
	"&wfr;":                             true,
	"&wopf;":                            true,
	"&wp;":                              true,
	"&wr;":                              true,
	"&wreath;":                          true,
	"&wscr;":                            true,
	"&xcap;":                            true,
	"&xcirc;":                           true,
	"&xcup;":                            true,
	"&xdtri;":                           true,
	"&xfr;":                             true,
	"&xhArr;":                           true,
	"&xharr;":                           true,
	"&xi;":                              true,
	"&xlArr;":                           true,
	"&xlarr;":                           true,
	"&xmap;":                            true,
	"&xnis;":                            true,
	"&xodot;":                           true,
	"&xopf;":                            true,
	"&xoplus;":                          true,
	"&xotime;":                          true,
	"&xrArr;":                           true,
	"&xrarr;":                           true,
	"&xscr;":                            true,
	"&xsqcup;":                          true,
	"&xuplus;":                          true,
	"&xutri;":                           true,
	"&xvee;":                            true,
	"&xwedge;":                          true,
	"&yacute":                           true,
	"&yacute;":                          true,
	"&yacy;":                            true,
	"&ycirc;":                           true,
	"&ycy;":                             true,
	"&yen":                              true,
	"&yen;":                             true,
	"&yfr;":                             true,
	"&yicy;":                            true,
	"&yopf;":                            true,
	"&yscr;":                            true,
	"&yucy;":                            true,
	"&yuml":                             true,
	"&yuml;":                            true,
	"&zacute;":                          true,
	"&zcaron;":                          true,
	"&zcy;":                             true,
	"&zdot;":                            true,
	"&zeetrf;":                          true,
	"&zeta;":                            true,
	"&zfr;":                             true,
	"&zhcy;":                            true,
	"&zigrarr;":                         true,
	"&zopf;":                            true,
	"&zscr;":                            true,
	"&zwj;":                             true,
	"&zwnj;":                            true,
}
  07070100000A7C000081A4000000000000000000000001645E367C00000557000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/russross/blackfriday/v2/esc.go  package blackfriday

import (
	"html"
	"io"
)

var htmlEscaper = [256][]byte{
	'&': []byte("&amp;"),
	'<': []byte("&lt;"),
	'>': []byte("&gt;"),
	'"': []byte("&quot;"),
}

func escapeHTML(w io.Writer, s []byte) {
	escapeEntities(w, s, false)
}

func escapeAllHTML(w io.Writer, s []byte) {
	escapeEntities(w, s, true)
}

func escapeEntities(w io.Writer, s []byte, escapeValidEntities bool) {
	var start, end int
	for end < len(s) {
		escSeq := htmlEscaper[s[end]]
		if escSeq != nil {
			isEntity, entityEnd := nodeIsEntity(s, end)
			if isEntity && !escapeValidEntities {
				w.Write(s[start : entityEnd+1])
				start = entityEnd + 1
			} else {
				w.Write(s[start:end])
				w.Write(escSeq)
				start = end + 1
			}
		}
		end++
	}
	if start < len(s) && end <= len(s) {
		w.Write(s[start:end])
	}
}

func nodeIsEntity(s []byte, end int) (isEntity bool, endEntityPos int) {
	isEntity = false
	endEntityPos = end + 1

	if s[end] == '&' {
		for endEntityPos < len(s) {
			if s[endEntityPos] == ';' {
				if entities[string(s[end:endEntityPos+1])] {
					isEntity = true
					break
				}
			}
			if !isalnum(s[endEntityPos]) && s[endEntityPos] != '&' && s[endEntityPos] != '#' {
				break
			}
			endEntityPos++
		}
	}

	return isEntity, endEntityPos
}

func escLink(w io.Writer, text []byte) {
	unesc := html.UnescapeString(string(text))
	escapeHTML(w, []byte(unesc))
}
 07070100000A7D000081A4000000000000000000000001645E367C00006062000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/russross/blackfriday/v2/html.go //
// Blackfriday Markdown Processor
// Available at http://github.com/russross/blackfriday
//
// Copyright © 2011 Russ Ross <russ@russross.com>.
// Distributed under the Simplified BSD License.
// See README.md for details.
//

//
//
// HTML rendering backend
//
//

package blackfriday

import (
	"bytes"
	"fmt"
	"io"
	"regexp"
	"strings"
)

// HTMLFlags control optional behavior of HTML renderer.
type HTMLFlags int

// HTML renderer configuration options.
const (
	HTMLFlagsNone           HTMLFlags = 0
	SkipHTML                HTMLFlags = 1 << iota // Skip preformatted HTML blocks
	SkipImages                                    // Skip embedded images
	SkipLinks                                     // Skip all links
	Safelink                                      // Only link to trusted protocols
	NofollowLinks                                 // Only link with rel="nofollow"
	NoreferrerLinks                               // Only link with rel="noreferrer"
	NoopenerLinks                                 // Only link with rel="noopener"
	HrefTargetBlank                               // Add a blank target
	CompletePage                                  // Generate a complete HTML page
	UseXHTML                                      // Generate XHTML output instead of HTML
	FootnoteReturnLinks                           // Generate a link at the end of a footnote to return to the source
	Smartypants                                   // Enable smart punctuation substitutions
	SmartypantsFractions                          // Enable smart fractions (with Smartypants)
	SmartypantsDashes                             // Enable smart dashes (with Smartypants)
	SmartypantsLatexDashes                        // Enable LaTeX-style dashes (with Smartypants)
	SmartypantsAngledQuotes                       // Enable angled double quotes (with Smartypants) for double quotes rendering
	SmartypantsQuotesNBSP                         // Enable « French guillemets » (with Smartypants)
	TOC                                           // Generate a table of contents
)

var (
	htmlTagRe = regexp.MustCompile("(?i)^" + htmlTag)
)

const (
	htmlTag = "(?:" + openTag + "|" + closeTag + "|" + htmlComment + "|" +
		processingInstruction + "|" + declaration + "|" + cdata + ")"
	closeTag              = "</" + tagName + "\\s*[>]"
	openTag               = "<" + tagName + attribute + "*" + "\\s*/?>"
	attribute             = "(?:" + "\\s+" + attributeName + attributeValueSpec + "?)"
	attributeValue        = "(?:" + unquotedValue + "|" + singleQuotedValue + "|" + doubleQuotedValue + ")"
	attributeValueSpec    = "(?:" + "\\s*=" + "\\s*" + attributeValue + ")"
	attributeName         = "[a-zA-Z_:][a-zA-Z0-9:._-]*"
	cdata                 = "<!\\[CDATA\\[[\\s\\S]*?\\]\\]>"
	declaration           = "<![A-Z]+" + "\\s+[^>]*>"
	doubleQuotedValue     = "\"[^\"]*\""
	htmlComment           = "<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->"
	processingInstruction = "[<][?].*?[?][>]"
	singleQuotedValue     = "'[^']*'"
	tagName               = "[A-Za-z][A-Za-z0-9-]*"
	unquotedValue         = "[^\"'=<>`\\x00-\\x20]+"
)

// HTMLRendererParameters is a collection of supplementary parameters tweaking
// the behavior of various parts of HTML renderer.
type HTMLRendererParameters struct {
	// Prepend this text to each relative URL.
	AbsolutePrefix string
	// Add this text to each footnote anchor, to ensure uniqueness.
	FootnoteAnchorPrefix string
	// Show this text inside the <a> tag for a footnote return link, if the
	// HTML_FOOTNOTE_RETURN_LINKS flag is enabled. If blank, the string
	// <sup>[return]</sup> is used.
	FootnoteReturnLinkContents string
	// If set, add this text to the front of each Heading ID, to ensure
	// uniqueness.
	HeadingIDPrefix string
	// If set, add this text to the back of each Heading ID, to ensure uniqueness.
	HeadingIDSuffix string
	// Increase heading levels: if the offset is 1, <h1> becomes <h2> etc.
	// Negative offset is also valid.
	// Resulting levels are clipped between 1 and 6.
	HeadingLevelOffset int

	Title string // Document title (used if CompletePage is set)
	CSS   string // Optional CSS file URL (used if CompletePage is set)
	Icon  string // Optional icon file URL (used if CompletePage is set)

	Flags HTMLFlags // Flags allow customizing this renderer's behavior
}

// HTMLRenderer is a type that implements the Renderer interface for HTML output.
//
// Do not create this directly, instead use the NewHTMLRenderer function.
type HTMLRenderer struct {
	HTMLRendererParameters

	closeTag string // how to end singleton tags: either " />" or ">"

	// Track heading IDs to prevent ID collision in a single generation.
	headingIDs map[string]int

	lastOutputLen int
	disableTags   int

	sr *SPRenderer
}

const (
	xhtmlClose = " />"
	htmlClose  = ">"
)

// NewHTMLRenderer creates and configures an HTMLRenderer object, which
// satisfies the Renderer interface.
func NewHTMLRenderer(params HTMLRendererParameters) *HTMLRenderer {
	// configure the rendering engine
	closeTag := htmlClose
	if params.Flags&UseXHTML != 0 {
		closeTag = xhtmlClose
	}

	if params.FootnoteReturnLinkContents == "" {
		// U+FE0E is VARIATION SELECTOR-15.
		// It suppresses automatic emoji presentation of the preceding
		// U+21A9 LEFTWARDS ARROW WITH HOOK on iOS and iPadOS.
		params.FootnoteReturnLinkContents = "<span aria-label='Return'>↩\ufe0e</span>"
	}

	return &HTMLRenderer{
		HTMLRendererParameters: params,

		closeTag:   closeTag,
		headingIDs: make(map[string]int),

		sr: NewSmartypantsRenderer(params.Flags),
	}
}

func isHTMLTag(tag []byte, tagname string) bool {
	found, _ := findHTMLTagPos(tag, tagname)
	return found
}

// Look for a character, but ignore it when it's in any kind of quotes, it
// might be JavaScript
func skipUntilCharIgnoreQuotes(html []byte, start int, char byte) int {
	inSingleQuote := false
	inDoubleQuote := false
	inGraveQuote := false
	i := start
	for i < len(html) {
		switch {
		case html[i] == char && !inSingleQuote && !inDoubleQuote && !inGraveQuote:
			return i
		case html[i] == '\'':
			inSingleQuote = !inSingleQuote
		case html[i] == '"':
			inDoubleQuote = !inDoubleQuote
		case html[i] == '`':
			inGraveQuote = !inGraveQuote
		}
		i++
	}
	return start
}

func findHTMLTagPos(tag []byte, tagname string) (bool, int) {
	i := 0
	if i < len(tag) && tag[0] != '<' {
		return false, -1
	}
	i++
	i = skipSpace(tag, i)

	if i < len(tag) && tag[i] == '/' {
		i++
	}

	i = skipSpace(tag, i)
	j := 0
	for ; i < len(tag); i, j = i+1, j+1 {
		if j >= len(tagname) {
			break
		}

		if strings.ToLower(string(tag[i]))[0] != tagname[j] {
			return false, -1
		}
	}

	if i == len(tag) {
		return false, -1
	}

	rightAngle := skipUntilCharIgnoreQuotes(tag, i, '>')
	if rightAngle >= i {
		return true, rightAngle
	}

	return false, -1
}

func skipSpace(tag []byte, i int) int {
	for i < len(tag) && isspace(tag[i]) {
		i++
	}
	return i
}

func isRelativeLink(link []byte) (yes bool) {
	// a tag begin with '#'
	if link[0] == '#' {
		return true
	}

	// link begin with '/' but not '//', the second maybe a protocol relative link
	if len(link) >= 2 && link[0] == '/' && link[1] != '/' {
		return true
	}

	// only the root '/'
	if len(link) == 1 && link[0] == '/' {
		return true
	}

	// current directory : begin with "./"
	if bytes.HasPrefix(link, []byte("./")) {
		return true
	}

	// parent directory : begin with "../"
	if bytes.HasPrefix(link, []byte("../")) {
		return true
	}

	return false
}

func (r *HTMLRenderer) ensureUniqueHeadingID(id string) string {
	for count, found := r.headingIDs[id]; found; count, found = r.headingIDs[id] {
		tmp := fmt.Sprintf("%s-%d", id, count+1)

		if _, tmpFound := r.headingIDs[tmp]; !tmpFound {
			r.headingIDs[id] = count + 1
			id = tmp
		} else {
			id = id + "-1"
		}
	}

	if _, found := r.headingIDs[id]; !found {
		r.headingIDs[id] = 0
	}

	return id
}

func (r *HTMLRenderer) addAbsPrefix(link []byte) []byte {
	if r.AbsolutePrefix != "" && isRelativeLink(link) && link[0] != '.' {
		newDest := r.AbsolutePrefix
		if link[0] != '/' {
			newDest += "/"
		}
		newDest += string(link)
		return []byte(newDest)
	}
	return link
}

func appendLinkAttrs(attrs []string, flags HTMLFlags, link []byte) []string {
	if isRelativeLink(link) {
		return attrs
	}
	val := []string{}
	if flags&NofollowLinks != 0 {
		val = append(val, "nofollow")
	}
	if flags&NoreferrerLinks != 0 {
		val = append(val, "noreferrer")
	}
	if flags&NoopenerLinks != 0 {
		val = append(val, "noopener")
	}
	if flags&HrefTargetBlank != 0 {
		attrs = append(attrs, "target=\"_blank\"")
	}
	if len(val) == 0 {
		return attrs
	}
	attr := fmt.Sprintf("rel=%q", strings.Join(val, " "))
	return append(attrs, attr)
}

func isMailto(link []byte) bool {
	return bytes.HasPrefix(link, []byte("mailto:"))
}

func needSkipLink(flags HTMLFlags, dest []byte) bool {
	if flags&SkipLinks != 0 {
		return true
	}
	return flags&Safelink != 0 && !isSafeLink(dest) && !isMailto(dest)
}

func isSmartypantable(node *Node) bool {
	pt := node.Parent.Type
	return pt != Link && pt != CodeBlock && pt != Code
}

func appendLanguageAttr(attrs []string, info []byte) []string {
	if len(info) == 0 {
		return attrs
	}
	endOfLang := bytes.IndexAny(info, "\t ")
	if endOfLang < 0 {
		endOfLang = len(info)
	}
	return append(attrs, fmt.Sprintf("class=\"language-%s\"", info[:endOfLang]))
}

func (r *HTMLRenderer) tag(w io.Writer, name []byte, attrs []string) {
	w.Write(name)
	if len(attrs) > 0 {
		w.Write(spaceBytes)
		w.Write([]byte(strings.Join(attrs, " ")))
	}
	w.Write(gtBytes)
	r.lastOutputLen = 1
}

func footnoteRef(prefix string, node *Node) []byte {
	urlFrag := prefix + string(slugify(node.Destination))
	anchor := fmt.Sprintf(`<a href="#fn:%s">%d</a>`, urlFrag, node.NoteID)
	return []byte(fmt.Sprintf(`<sup class="footnote-ref" id="fnref:%s">%s</sup>`, urlFrag, anchor))
}

func footnoteItem(prefix string, slug []byte) []byte {
	return []byte(fmt.Sprintf(`<li id="fn:%s%s">`, prefix, slug))
}

func footnoteReturnLink(prefix, returnLink string, slug []byte) []byte {
	const format = ` <a class="footnote-return" href="#fnref:%s%s">%s</a>`
	return []byte(fmt.Sprintf(format, prefix, slug, returnLink))
}

func itemOpenCR(node *Node) bool {
	if node.Prev == nil {
		return false
	}
	ld := node.Parent.ListData
	return !ld.Tight && ld.ListFlags&ListTypeDefinition == 0
}

func skipParagraphTags(node *Node) bool {
	grandparent := node.Parent.Parent
	if grandparent == nil || grandparent.Type != List {
		return false
	}
	tightOrTerm := grandparent.Tight || node.Parent.ListFlags&ListTypeTerm != 0
	return grandparent.Type == List && tightOrTerm
}

func cellAlignment(align CellAlignFlags) string {
	switch align {
	case TableAlignmentLeft:
		return "left"
	case TableAlignmentRight:
		return "right"
	case TableAlignmentCenter:
		return "center"
	default:
		return ""
	}
}

func (r *HTMLRenderer) out(w io.Writer, text []byte) {
	if r.disableTags > 0 {
		w.Write(htmlTagRe.ReplaceAll(text, []byte{}))
	} else {
		w.Write(text)
	}
	r.lastOutputLen = len(text)
}

func (r *HTMLRenderer) cr(w io.Writer) {
	if r.lastOutputLen > 0 {
		r.out(w, nlBytes)
	}
}

var (
	nlBytes    = []byte{'\n'}
	gtBytes    = []byte{'>'}
	spaceBytes = []byte{' '}
)

var (
	brTag              = []byte("<br>")
	brXHTMLTag         = []byte("<br />")
	emTag              = []byte("<em>")
	emCloseTag         = []byte("</em>")
	strongTag          = []byte("<strong>")
	strongCloseTag     = []byte("</strong>")
	delTag             = []byte("<del>")
	delCloseTag        = []byte("</del>")
	ttTag              = []byte("<tt>")
	ttCloseTag         = []byte("</tt>")
	aTag               = []byte("<a")
	aCloseTag          = []byte("</a>")
	preTag             = []byte("<pre>")
	preCloseTag        = []byte("</pre>")
	codeTag            = []byte("<code>")
	codeCloseTag       = []byte("</code>")
	pTag               = []byte("<p>")
	pCloseTag          = []byte("</p>")
	blockquoteTag      = []byte("<blockquote>")
	blockquoteCloseTag = []byte("</blockquote>")
	hrTag              = []byte("<hr>")
	hrXHTMLTag         = []byte("<hr />")
	ulTag              = []byte("<ul>")
	ulCloseTag         = []byte("</ul>")
	olTag              = []byte("<ol>")
	olCloseTag         = []byte("</ol>")
	dlTag              = []byte("<dl>")
	dlCloseTag         = []byte("</dl>")
	liTag              = []byte("<li>")
	liCloseTag         = []byte("</li>")
	ddTag              = []byte("<dd>")
	ddCloseTag         = []byte("</dd>")
	dtTag              = []byte("<dt>")
	dtCloseTag         = []byte("</dt>")
	tableTag           = []byte("<table>")
	tableCloseTag      = []byte("</table>")
	tdTag              = []byte("<td")
	tdCloseTag         = []byte("</td>")
	thTag              = []byte("<th")
	thCloseTag         = []byte("</th>")
	theadTag           = []byte("<thead>")
	theadCloseTag      = []byte("</thead>")
	tbodyTag           = []byte("<tbody>")
	tbodyCloseTag      = []byte("</tbody>")
	trTag              = []byte("<tr>")
	trCloseTag         = []byte("</tr>")
	h1Tag              = []byte("<h1")
	h1CloseTag         = []byte("</h1>")
	h2Tag              = []byte("<h2")
	h2CloseTag         = []byte("</h2>")
	h3Tag              = []byte("<h3")
	h3CloseTag         = []byte("</h3>")
	h4Tag              = []byte("<h4")
	h4CloseTag         = []byte("</h4>")
	h5Tag              = []byte("<h5")
	h5CloseTag         = []byte("</h5>")
	h6Tag              = []byte("<h6")
	h6CloseTag         = []byte("</h6>")

	footnotesDivBytes      = []byte("\n<div class=\"footnotes\">\n\n")
	footnotesCloseDivBytes = []byte("\n</div>\n")
)

func headingTagsFromLevel(level int) ([]byte, []byte) {
	if level <= 1 {
		return h1Tag, h1CloseTag
	}
	switch level {
	case 2:
		return h2Tag, h2CloseTag
	case 3:
		return h3Tag, h3CloseTag
	case 4:
		return h4Tag, h4CloseTag
	case 5:
		return h5Tag, h5CloseTag
	}
	return h6Tag, h6CloseTag
}

func (r *HTMLRenderer) outHRTag(w io.Writer) {
	if r.Flags&UseXHTML == 0 {
		r.out(w, hrTag)
	} else {
		r.out(w, hrXHTMLTag)
	}
}

// RenderNode is a default renderer of a single node of a syntax tree. For
// block nodes it will be called twice: first time with entering=true, second
// time with entering=false, so that it could know when it's working on an open
// tag and when on close. It writes the result to w.
//
// The return value is a way to tell the calling walker to adjust its walk
// pattern: e.g. it can terminate the traversal by returning Terminate. Or it
// can ask the walker to skip a subtree of this node by returning SkipChildren.
// The typical behavior is to return GoToNext, which asks for the usual
// traversal to the next node.
func (r *HTMLRenderer) RenderNode(w io.Writer, node *Node, entering bool) WalkStatus {
	attrs := []string{}
	switch node.Type {
	case Text:
		if r.Flags&Smartypants != 0 {
			var tmp bytes.Buffer
			escapeHTML(&tmp, node.Literal)
			r.sr.Process(w, tmp.Bytes())
		} else {
			if node.Parent.Type == Link {
				escLink(w, node.Literal)
			} else {
				escapeHTML(w, node.Literal)
			}
		}
	case Softbreak:
		r.cr(w)
		// TODO: make it configurable via out(renderer.softbreak)
	case Hardbreak:
		if r.Flags&UseXHTML == 0 {
			r.out(w, brTag)
		} else {
			r.out(w, brXHTMLTag)
		}
		r.cr(w)
	case Emph:
		if entering {
			r.out(w, emTag)
		} else {
			r.out(w, emCloseTag)
		}
	case Strong:
		if entering {
			r.out(w, strongTag)
		} else {
			r.out(w, strongCloseTag)
		}
	case Del:
		if entering {
			r.out(w, delTag)
		} else {
			r.out(w, delCloseTag)
		}
	case HTMLSpan:
		if r.Flags&SkipHTML != 0 {
			break
		}
		r.out(w, node.Literal)
	case Link:
		// mark it but don't link it if it is not a safe link: no smartypants
		dest := node.LinkData.Destination
		if needSkipLink(r.Flags, dest) {
			if entering {
				r.out(w, ttTag)
			} else {
				r.out(w, ttCloseTag)
			}
		} else {
			if entering {
				dest = r.addAbsPrefix(dest)
				var hrefBuf bytes.Buffer
				hrefBuf.WriteString("href=\"")
				escLink(&hrefBuf, dest)
				hrefBuf.WriteByte('"')
				attrs = append(attrs, hrefBuf.String())
				if node.NoteID != 0 {
					r.out(w, footnoteRef(r.FootnoteAnchorPrefix, node))
					break
				}
				attrs = appendLinkAttrs(attrs, r.Flags, dest)
				if len(node.LinkData.Title) > 0 {
					var titleBuff bytes.Buffer
					titleBuff.WriteString("title=\"")
					escapeHTML(&titleBuff, node.LinkData.Title)
					titleBuff.WriteByte('"')
					attrs = append(attrs, titleBuff.String())
				}
				r.tag(w, aTag, attrs)
			} else {
				if node.NoteID != 0 {
					break
				}
				r.out(w, aCloseTag)
			}
		}
	case Image:
		if r.Flags&SkipImages != 0 {
			return SkipChildren
		}
		if entering {
			dest := node.LinkData.Destination
			dest = r.addAbsPrefix(dest)
			if r.disableTags == 0 {
				//if options.safe && potentiallyUnsafe(dest) {
				//out(w, `<img src="" alt="`)
				//} else {
				r.out(w, []byte(`<img src="`))
				escLink(w, dest)
				r.out(w, []byte(`" alt="`))
				//}
			}
			r.disableTags++
		} else {
			r.disableTags--
			if r.disableTags == 0 {
				if node.LinkData.Title != nil {
					r.out(w, []byte(`" title="`))
					escapeHTML(w, node.LinkData.Title)
				}
				r.out(w, []byte(`" />`))
			}
		}
	case Code:
		r.out(w, codeTag)
		escapeAllHTML(w, node.Literal)
		r.out(w, codeCloseTag)
	case Document:
		break
	case Paragraph:
		if skipParagraphTags(node) {
			break
		}
		if entering {
			// TODO: untangle this clusterfuck about when the newlines need
			// to be added and when not.
			if node.Prev != nil {
				switch node.Prev.Type {
				case HTMLBlock, List, Paragraph, Heading, CodeBlock, BlockQuote, HorizontalRule:
					r.cr(w)
				}
			}
			if node.Parent.Type == BlockQuote && node.Prev == nil {
				r.cr(w)
			}
			r.out(w, pTag)
		} else {
			r.out(w, pCloseTag)
			if !(node.Parent.Type == Item && node.Next == nil) {
				r.cr(w)
			}
		}
	case BlockQuote:
		if entering {
			r.cr(w)
			r.out(w, blockquoteTag)
		} else {
			r.out(w, blockquoteCloseTag)
			r.cr(w)
		}
	case HTMLBlock:
		if r.Flags&SkipHTML != 0 {
			break
		}
		r.cr(w)
		r.out(w, node.Literal)
		r.cr(w)
	case Heading:
		headingLevel := r.HTMLRendererParameters.HeadingLevelOffset + node.Level
		openTag, closeTag := headingTagsFromLevel(headingLevel)
		if entering {
			if node.IsTitleblock {
				attrs = append(attrs, `class="title"`)
			}
			if node.HeadingID != "" {
				id := r.ensureUniqueHeadingID(node.HeadingID)
				if r.HeadingIDPrefix != "" {
					id = r.HeadingIDPrefix + id
				}
				if r.HeadingIDSuffix != "" {
					id = id + r.HeadingIDSuffix
				}
				attrs = append(attrs, fmt.Sprintf(`id="%s"`, id))
			}
			r.cr(w)
			r.tag(w, openTag, attrs)
		} else {
			r.out(w, closeTag)
			if !(node.Parent.Type == Item && node.Next == nil) {
				r.cr(w)
			}
		}
	case HorizontalRule:
		r.cr(w)
		r.outHRTag(w)
		r.cr(w)
	case List:
		openTag := ulTag
		closeTag := ulCloseTag
		if node.ListFlags&ListTypeOrdered != 0 {
			openTag = olTag
			closeTag = olCloseTag
		}
		if node.ListFlags&ListTypeDefinition != 0 {
			openTag = dlTag
			closeTag = dlCloseTag
		}
		if entering {
			if node.IsFootnotesList {
				r.out(w, footnotesDivBytes)
				r.outHRTag(w)
				r.cr(w)
			}
			r.cr(w)
			if node.Parent.Type == Item && node.Parent.Parent.Tight {
				r.cr(w)
			}
			r.tag(w, openTag[:len(openTag)-1], attrs)
			r.cr(w)
		} else {
			r.out(w, closeTag)
			//cr(w)
			//if node.parent.Type != Item {
			//	cr(w)
			//}
			if node.Parent.Type == Item && node.Next != nil {
				r.cr(w)
			}
			if node.Parent.Type == Document || node.Parent.Type == BlockQuote {
				r.cr(w)
			}
			if node.IsFootnotesList {
				r.out(w, footnotesCloseDivBytes)
			}
		}
	case Item:
		openTag := liTag
		closeTag := liCloseTag
		if node.ListFlags&ListTypeDefinition != 0 {
			openTag = ddTag
			closeTag = ddCloseTag
		}
		if node.ListFlags&ListTypeTerm != 0 {
			openTag = dtTag
			closeTag = dtCloseTag
		}
		if entering {
			if itemOpenCR(node) {
				r.cr(w)
			}
			if node.ListData.RefLink != nil {
				slug := slugify(node.ListData.RefLink)
				r.out(w, footnoteItem(r.FootnoteAnchorPrefix, slug))
				break
			}
			r.out(w, openTag)
		} else {
			if node.ListData.RefLink != nil {
				slug := slugify(node.ListData.RefLink)
				if r.Flags&FootnoteReturnLinks != 0 {
					r.out(w, footnoteReturnLink(r.FootnoteAnchorPrefix, r.FootnoteReturnLinkContents, slug))
				}
			}
			r.out(w, closeTag)
			r.cr(w)
		}
	case CodeBlock:
		attrs = appendLanguageAttr(attrs, node.Info)
		r.cr(w)
		r.out(w, preTag)
		r.tag(w, codeTag[:len(codeTag)-1], attrs)
		escapeAllHTML(w, node.Literal)
		r.out(w, codeCloseTag)
		r.out(w, preCloseTag)
		if node.Parent.Type != Item {
			r.cr(w)
		}
	case Table:
		if entering {
			r.cr(w)
			r.out(w, tableTag)
		} else {
			r.out(w, tableCloseTag)
			r.cr(w)
		}
	case TableCell:
		openTag := tdTag
		closeTag := tdCloseTag
		if node.IsHeader {
			openTag = thTag
			closeTag = thCloseTag
		}
		if entering {
			align := cellAlignment(node.Align)
			if align != "" {
				attrs = append(attrs, fmt.Sprintf(`align="%s"`, align))
			}
			if node.Prev == nil {
				r.cr(w)
			}
			r.tag(w, openTag, attrs)
		} else {
			r.out(w, closeTag)
			r.cr(w)
		}
	case TableHead:
		if entering {
			r.cr(w)
			r.out(w, theadTag)
		} else {
			r.out(w, theadCloseTag)
			r.cr(w)
		}
	case TableBody:
		if entering {
			r.cr(w)
			r.out(w, tbodyTag)
			// XXX: this is to adhere to a rather silly test. Should fix test.
			if node.FirstChild == nil {
				r.cr(w)
			}
		} else {
			r.out(w, tbodyCloseTag)
			r.cr(w)
		}
	case TableRow:
		if entering {
			r.cr(w)
			r.out(w, trTag)
		} else {
			r.out(w, trCloseTag)
			r.cr(w)
		}
	default:
		panic("Unknown node type " + node.Type.String())
	}
	return GoToNext
}

// RenderHeader writes HTML document preamble and TOC if requested.
func (r *HTMLRenderer) RenderHeader(w io.Writer, ast *Node) {
	r.writeDocumentHeader(w)
	if r.Flags&TOC != 0 {
		r.writeTOC(w, ast)
	}
}

// RenderFooter writes HTML document footer.
func (r *HTMLRenderer) RenderFooter(w io.Writer, ast *Node) {
	if r.Flags&CompletePage == 0 {
		return
	}
	io.WriteString(w, "\n</body>\n</html>\n")
}

func (r *HTMLRenderer) writeDocumentHeader(w io.Writer) {
	if r.Flags&CompletePage == 0 {
		return
	}
	ending := ""
	if r.Flags&UseXHTML != 0 {
		io.WriteString(w, "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" ")
		io.WriteString(w, "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n")
		io.WriteString(w, "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n")
		ending = " /"
	} else {
		io.WriteString(w, "<!DOCTYPE html>\n")
		io.WriteString(w, "<html>\n")
	}
	io.WriteString(w, "<head>\n")
	io.WriteString(w, "  <title>")
	if r.Flags&Smartypants != 0 {
		r.sr.Process(w, []byte(r.Title))
	} else {
		escapeHTML(w, []byte(r.Title))
	}
	io.WriteString(w, "</title>\n")
	io.WriteString(w, "  <meta name=\"GENERATOR\" content=\"Blackfriday Markdown Processor v")
	io.WriteString(w, Version)
	io.WriteString(w, "\"")
	io.WriteString(w, ending)
	io.WriteString(w, ">\n")
	io.WriteString(w, "  <meta charset=\"utf-8\"")
	io.WriteString(w, ending)
	io.WriteString(w, ">\n")
	if r.CSS != "" {
		io.WriteString(w, "  <link rel=\"stylesheet\" type=\"text/css\" href=\"")
		escapeHTML(w, []byte(r.CSS))
		io.WriteString(w, "\"")
		io.WriteString(w, ending)
		io.WriteString(w, ">\n")
	}
	if r.Icon != "" {
		io.WriteString(w, "  <link rel=\"icon\" type=\"image/x-icon\" href=\"")
		escapeHTML(w, []byte(r.Icon))
		io.WriteString(w, "\"")
		io.WriteString(w, ending)
		io.WriteString(w, ">\n")
	}
	io.WriteString(w, "</head>\n")
	io.WriteString(w, "<body>\n\n")
}

func (r *HTMLRenderer) writeTOC(w io.Writer, ast *Node) {
	buf := bytes.Buffer{}

	inHeading := false
	tocLevel := 0
	headingCount := 0

	ast.Walk(func(node *Node, entering bool) WalkStatus {
		if node.Type == Heading && !node.HeadingData.IsTitleblock {
			inHeading = entering
			if entering {
				node.HeadingID = fmt.Sprintf("toc_%d", headingCount)
				if node.Level == tocLevel {
					buf.WriteString("</li>\n\n<li>")
				} else if node.Level < tocLevel {
					for node.Level < tocLevel {
						tocLevel--
						buf.WriteString("</li>\n</ul>")
					}
					buf.WriteString("</li>\n\n<li>")
				} else {
					for node.Level > tocLevel {
						tocLevel++
						buf.WriteString("\n<ul>\n<li>")
					}
				}

				fmt.Fprintf(&buf, `<a href="#toc_%d">`, headingCount)
				headingCount++
			} else {
				buf.WriteString("</a>")
			}
			return GoToNext
		}

		if inHeading {
			return r.RenderNode(&buf, node, entering)
		}

		return GoToNext
	})

	for ; tocLevel > 0; tocLevel-- {
		buf.WriteString("</li>\n</ul>")
	}

	if buf.Len() > 0 {
		io.WriteString(w, "<nav>\n")
		w.Write(buf.Bytes())
		io.WriteString(w, "\n\n</nav>\n")
	}
	r.lastOutputLen = buf.Len()
}
  07070100000A7E000081A4000000000000000000000001645E367C000064E0000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/russross/blackfriday/v2/inline.go   //
// Blackfriday Markdown Processor
// Available at http://github.com/russross/blackfriday
//
// Copyright © 2011 Russ Ross <russ@russross.com>.
// Distributed under the Simplified BSD License.
// See README.md for details.
//

//
// Functions to parse inline elements.
//

package blackfriday

import (
	"bytes"
	"regexp"
	"strconv"
)

var (
	urlRe    = `((https?|ftp):\/\/|\/)[-A-Za-z0-9+&@#\/%?=~_|!:,.;\(\)]+`
	anchorRe = regexp.MustCompile(`^(<a\shref="` + urlRe + `"(\stitle="[^"<>]+")?\s?>` + urlRe + `<\/a>)`)

	// https://www.w3.org/TR/html5/syntax.html#character-references
	// highest unicode code point in 17 planes (2^20): 1,114,112d =
	// 7 dec digits or 6 hex digits
	// named entity references can be 2-31 characters with stuff like &lt;
	// at one end and &CounterClockwiseContourIntegral; at the other. There
	// are also sometimes numbers at the end, although this isn't inherent
	// in the specification; there are never numbers anywhere else in
	// current character references, though; see &frac34; and &blk12;, etc.
	// https://www.w3.org/TR/html5/syntax.html#named-character-references
	//
	// entity := "&" (named group | number ref) ";"
	// named group := [a-zA-Z]{2,31}[0-9]{0,2}
	// number ref := "#" (dec ref | hex ref)
	// dec ref := [0-9]{1,7}
	// hex ref := ("x" | "X") [0-9a-fA-F]{1,6}
	htmlEntityRe = regexp.MustCompile(`&([a-zA-Z]{2,31}[0-9]{0,2}|#([0-9]{1,7}|[xX][0-9a-fA-F]{1,6}));`)
)

// Functions to parse text within a block
// Each function returns the number of chars taken care of
// data is the complete block being rendered
// offset is the number of valid chars before the current cursor

func (p *Markdown) inline(currBlock *Node, data []byte) {
	// handlers might call us recursively: enforce a maximum depth
	if p.nesting >= p.maxNesting || len(data) == 0 {
		return
	}
	p.nesting++
	beg, end := 0, 0
	for end < len(data) {
		handler := p.inlineCallback[data[end]]
		if handler != nil {
			if consumed, node := handler(p, data, end); consumed == 0 {
				// No action from the callback.
				end++
			} else {
				// Copy inactive chars into the output.
				currBlock.AppendChild(text(data[beg:end]))
				if node != nil {
					currBlock.AppendChild(node)
				}
				// Skip past whatever the callback used.
				beg = end + consumed
				end = beg
			}
		} else {
			end++
		}
	}
	if beg < len(data) {
		if data[end-1] == '\n' {
			end--
		}
		currBlock.AppendChild(text(data[beg:end]))
	}
	p.nesting--
}

// single and double emphasis parsing
func emphasis(p *Markdown, data []byte, offset int) (int, *Node) {
	data = data[offset:]
	c := data[0]

	if len(data) > 2 && data[1] != c {
		// whitespace cannot follow an opening emphasis;
		// strikethrough only takes two characters '~~'
		if c == '~' || isspace(data[1]) {
			return 0, nil
		}
		ret, node := helperEmphasis(p, data[1:], c)
		if ret == 0 {
			return 0, nil
		}

		return ret + 1, node
	}

	if len(data) > 3 && data[1] == c && data[2] != c {
		if isspace(data[2]) {
			return 0, nil
		}
		ret, node := helperDoubleEmphasis(p, data[2:], c)
		if ret == 0 {
			return 0, nil
		}

		return ret + 2, node
	}

	if len(data) > 4 && data[1] == c && data[2] == c && data[3] != c {
		if c == '~' || isspace(data[3]) {
			return 0, nil
		}
		ret, node := helperTripleEmphasis(p, data, 3, c)
		if ret == 0 {
			return 0, nil
		}

		return ret + 3, node
	}

	return 0, nil
}

func codeSpan(p *Markdown, data []byte, offset int) (int, *Node) {
	data = data[offset:]

	nb := 0

	// count the number of backticks in the delimiter
	for nb < len(data) && data[nb] == '`' {
		nb++
	}

	// find the next delimiter
	i, end := 0, 0
	for end = nb; end < len(data) && i < nb; end++ {
		if data[end] == '`' {
			i++
		} else {
			i = 0
		}
	}

	// no matching delimiter?
	if i < nb && end >= len(data) {
		return 0, nil
	}

	// trim outside whitespace
	fBegin := nb
	for fBegin < end && data[fBegin] == ' ' {
		fBegin++
	}

	fEnd := end - nb
	for fEnd > fBegin && data[fEnd-1] == ' ' {
		fEnd--
	}

	// render the code span
	if fBegin != fEnd {
		code := NewNode(Code)
		code.Literal = data[fBegin:fEnd]
		return end, code
	}

	return end, nil
}

// newline preceded by two spaces becomes <br>
func maybeLineBreak(p *Markdown, data []byte, offset int) (int, *Node) {
	origOffset := offset
	for offset < len(data) && data[offset] == ' ' {
		offset++
	}

	if offset < len(data) && data[offset] == '\n' {
		if offset-origOffset >= 2 {
			return offset - origOffset + 1, NewNode(Hardbreak)
		}
		return offset - origOffset, nil
	}
	return 0, nil
}

// newline without two spaces works when HardLineBreak is enabled
func lineBreak(p *Markdown, data []byte, offset int) (int, *Node) {
	if p.extensions&HardLineBreak != 0 {
		return 1, NewNode(Hardbreak)
	}
	return 0, nil
}

type linkType int

const (
	linkNormal linkType = iota
	linkImg
	linkDeferredFootnote
	linkInlineFootnote
)

func isReferenceStyleLink(data []byte, pos int, t linkType) bool {
	if t == linkDeferredFootnote {
		return false
	}
	return pos < len(data)-1 && data[pos] == '[' && data[pos+1] != '^'
}

func maybeImage(p *Markdown, data []byte, offset int) (int, *Node) {
	if offset < len(data)-1 && data[offset+1] == '[' {
		return link(p, data, offset)
	}
	return 0, nil
}

func maybeInlineFootnote(p *Markdown, data []byte, offset int) (int, *Node) {
	if offset < len(data)-1 && data[offset+1] == '[' {
		return link(p, data, offset)
	}
	return 0, nil
}

// '[': parse a link or an image or a footnote
func link(p *Markdown, data []byte, offset int) (int, *Node) {
	// no links allowed inside regular links, footnote, and deferred footnotes
	if p.insideLink && (offset > 0 && data[offset-1] == '[' || len(data)-1 > offset && data[offset+1] == '^') {
		return 0, nil
	}

	var t linkType
	switch {
	// special case: ![^text] == deferred footnote (that follows something with
	// an exclamation point)
	case p.extensions&Footnotes != 0 && len(data)-1 > offset && data[offset+1] == '^':
		t = linkDeferredFootnote
	// ![alt] == image
	case offset >= 0 && data[offset] == '!':
		t = linkImg
		offset++
	// ^[text] == inline footnote
	// [^refId] == deferred footnote
	case p.extensions&Footnotes != 0:
		if offset >= 0 && data[offset] == '^' {
			t = linkInlineFootnote
			offset++
		} else if len(data)-1 > offset && data[offset+1] == '^' {
			t = linkDeferredFootnote
		}
	// [text] == regular link
	default:
		t = linkNormal
	}

	data = data[offset:]

	var (
		i                       = 1
		noteID                  int
		title, link, altContent []byte
		textHasNl               = false
	)

	if t == linkDeferredFootnote {
		i++
	}

	// look for the matching closing bracket
	for level := 1; level > 0 && i < len(data); i++ {
		switch {
		case data[i] == '\n':
			textHasNl = true

		case isBackslashEscaped(data, i):
			continue

		case data[i] == '[':
			level++

		case data[i] == ']':
			level--
			if level <= 0 {
				i-- // compensate for extra i++ in for loop
			}
		}
	}

	if i >= len(data) {
		return 0, nil
	}

	txtE := i
	i++
	var footnoteNode *Node

	// skip any amount of whitespace or newline
	// (this is much more lax than original markdown syntax)
	for i < len(data) && isspace(data[i]) {
		i++
	}

	// inline style link
	switch {
	case i < len(data) && data[i] == '(':
		// skip initial whitespace
		i++

		for i < len(data) && isspace(data[i]) {
			i++
		}

		linkB := i

		// look for link end: ' " )
	findlinkend:
		for i < len(data) {
			switch {
			case data[i] == '\\':
				i += 2

			case data[i] == ')' || data[i] == '\'' || data[i] == '"':
				break findlinkend

			default:
				i++
			}
		}

		if i >= len(data) {
			return 0, nil
		}
		linkE := i

		// look for title end if present
		titleB, titleE := 0, 0
		if data[i] == '\'' || data[i] == '"' {
			i++
			titleB = i

		findtitleend:
			for i < len(data) {
				switch {
				case data[i] == '\\':
					i += 2

				case data[i] == ')':
					break findtitleend

				default:
					i++
				}
			}

			if i >= len(data) {
				return 0, nil
			}

			// skip whitespace after title
			titleE = i - 1
			for titleE > titleB && isspace(data[titleE]) {
				titleE--
			}

			// check for closing quote presence
			if data[titleE] != '\'' && data[titleE] != '"' {
				titleB, titleE = 0, 0
				linkE = i
			}
		}

		// remove whitespace at the end of the link
		for linkE > linkB && isspace(data[linkE-1]) {
			linkE--
		}

		// remove optional angle brackets around the link
		if data[linkB] == '<' {
			linkB++
		}
		if data[linkE-1] == '>' {
			linkE--
		}

		// build escaped link and title
		if linkE > linkB {
			link = data[linkB:linkE]
		}

		if titleE > titleB {
			title = data[titleB:titleE]
		}

		i++

	// reference style link
	case isReferenceStyleLink(data, i, t):
		var id []byte
		altContentConsidered := false

		// look for the id
		i++
		linkB := i
		for i < len(data) && data[i] != ']' {
			i++
		}
		if i >= len(data) {
			return 0, nil
		}
		linkE := i

		// find the reference
		if linkB == linkE {
			if textHasNl {
				var b bytes.Buffer

				for j := 1; j < txtE; j++ {
					switch {
					case data[j] != '\n':
						b.WriteByte(data[j])
					case data[j-1] != ' ':
						b.WriteByte(' ')
					}
				}

				id = b.Bytes()
			} else {
				id = data[1:txtE]
				altContentConsidered = true
			}
		} else {
			id = data[linkB:linkE]
		}

		// find the reference with matching id
		lr, ok := p.getRef(string(id))
		if !ok {
			return 0, nil
		}

		// keep link and title from reference
		link = lr.link
		title = lr.title
		if altContentConsidered {
			altContent = lr.text
		}
		i++

	// shortcut reference style link or reference or inline footnote
	default:
		var id []byte

		// craft the id
		if textHasNl {
			var b bytes.Buffer

			for j := 1; j < txtE; j++ {
				switch {
				case data[j] != '\n':
					b.WriteByte(data[j])
				case data[j-1] != ' ':
					b.WriteByte(' ')
				}
			}

			id = b.Bytes()
		} else {
			if t == linkDeferredFootnote {
				id = data[2:txtE] // get rid of the ^
			} else {
				id = data[1:txtE]
			}
		}

		footnoteNode = NewNode(Item)
		if t == linkInlineFootnote {
			// create a new reference
			noteID = len(p.notes) + 1

			var fragment []byte
			if len(id) > 0 {
				if len(id) < 16 {
					fragment = make([]byte, len(id))
				} else {
					fragment = make([]byte, 16)
				}
				copy(fragment, slugify(id))
			} else {
				fragment = append([]byte("footnote-"), []byte(strconv.Itoa(noteID))...)
			}

			ref := &reference{
				noteID:   noteID,
				hasBlock: false,
				link:     fragment,
				title:    id,
				footnote: footnoteNode,
			}

			p.notes = append(p.notes, ref)

			link = ref.link
			title = ref.title
		} else {
			// find the reference with matching id
			lr, ok := p.getRef(string(id))
			if !ok {
				return 0, nil
			}

			if t == linkDeferredFootnote {
				lr.noteID = len(p.notes) + 1
				lr.footnote = footnoteNode
				p.notes = append(p.notes, lr)
			}

			// keep link and title from reference
			link = lr.link
			// if inline footnote, title == footnote contents
			title = lr.title
			noteID = lr.noteID
		}

		// rewind the whitespace
		i = txtE + 1
	}

	var uLink []byte
	if t == linkNormal || t == linkImg {
		if len(link) > 0 {
			var uLinkBuf bytes.Buffer
			unescapeText(&uLinkBuf, link)
			uLink = uLinkBuf.Bytes()
		}

		// links need something to click on and somewhere to go
		if len(uLink) == 0 || (t == linkNormal && txtE <= 1) {
			return 0, nil
		}
	}

	// call the relevant rendering function
	var linkNode *Node
	switch t {
	case linkNormal:
		linkNode = NewNode(Link)
		linkNode.Destination = normalizeURI(uLink)
		linkNode.Title = title
		if len(altContent) > 0 {
			linkNode.AppendChild(text(altContent))
		} else {
			// links cannot contain other links, so turn off link parsing
			// temporarily and recurse
			insideLink := p.insideLink
			p.insideLink = true
			p.inline(linkNode, data[1:txtE])
			p.insideLink = insideLink
		}

	case linkImg:
		linkNode = NewNode(Image)
		linkNode.Destination = uLink
		linkNode.Title = title
		linkNode.AppendChild(text(data[1:txtE]))
		i++

	case linkInlineFootnote, linkDeferredFootnote:
		linkNode = NewNode(Link)
		linkNode.Destination = link
		linkNode.Title = title
		linkNode.NoteID = noteID
		linkNode.Footnote = footnoteNode
		if t == linkInlineFootnote {
			i++
		}

	default:
		return 0, nil
	}

	return i, linkNode
}

func (p *Markdown) inlineHTMLComment(data []byte) int {
	if len(data) < 5 {
		return 0
	}
	if data[0] != '<' || data[1] != '!' || data[2] != '-' || data[3] != '-' {
		return 0
	}
	i := 5
	// scan for an end-of-comment marker, across lines if necessary
	for i < len(data) && !(data[i-2] == '-' && data[i-1] == '-' && data[i] == '>') {
		i++
	}
	// no end-of-comment marker
	if i >= len(data) {
		return 0
	}
	return i + 1
}

func stripMailto(link []byte) []byte {
	if bytes.HasPrefix(link, []byte("mailto://")) {
		return link[9:]
	} else if bytes.HasPrefix(link, []byte("mailto:")) {
		return link[7:]
	} else {
		return link
	}
}

// autolinkType specifies a kind of autolink that gets detected.
type autolinkType int

// These are the possible flag values for the autolink renderer.
const (
	notAutolink autolinkType = iota
	normalAutolink
	emailAutolink
)

// '<' when tags or autolinks are allowed
func leftAngle(p *Markdown, data []byte, offset int) (int, *Node) {
	data = data[offset:]
	altype, end := tagLength(data)
	if size := p.inlineHTMLComment(data); size > 0 {
		end = size
	}
	if end > 2 {
		if altype != notAutolink {
			var uLink bytes.Buffer
			unescapeText(&uLink, data[1:end+1-2])
			if uLink.Len() > 0 {
				link := uLink.Bytes()
				node := NewNode(Link)
				node.Destination = link
				if altype == emailAutolink {
					node.Destination = append([]byte("mailto:"), link...)
				}
				node.AppendChild(text(stripMailto(link)))
				return end, node
			}
		} else {
			htmlTag := NewNode(HTMLSpan)
			htmlTag.Literal = data[:end]
			return end, htmlTag
		}
	}

	return end, nil
}

// '\\' backslash escape
var escapeChars = []byte("\\`*_{}[]()#+-.!:|&<>~")

func escape(p *Markdown, data []byte, offset int) (int, *Node) {
	data = data[offset:]

	if len(data) > 1 {
		if p.extensions&BackslashLineBreak != 0 && data[1] == '\n' {
			return 2, NewNode(Hardbreak)
		}
		if bytes.IndexByte(escapeChars, data[1]) < 0 {
			return 0, nil
		}

		return 2, text(data[1:2])
	}

	return 2, nil
}

func unescapeText(ob *bytes.Buffer, src []byte) {
	i := 0
	for i < len(src) {
		org := i
		for i < len(src) && src[i] != '\\' {
			i++
		}

		if i > org {
			ob.Write(src[org:i])
		}

		if i+1 >= len(src) {
			break
		}

		ob.WriteByte(src[i+1])
		i += 2
	}
}

// '&' escaped when it doesn't belong to an entity
// valid entities are assumed to be anything matching &#?[A-Za-z0-9]+;
func entity(p *Markdown, data []byte, offset int) (int, *Node) {
	data = data[offset:]

	end := 1

	if end < len(data) && data[end] == '#' {
		end++
	}

	for end < len(data) && isalnum(data[end]) {
		end++
	}

	if end < len(data) && data[end] == ';' {
		end++ // real entity
	} else {
		return 0, nil // lone '&'
	}

	ent := data[:end]
	// undo &amp; escaping or it will be converted to &amp;amp; by another
	// escaper in the renderer
	if bytes.Equal(ent, []byte("&amp;")) {
		ent = []byte{'&'}
	}

	return end, text(ent)
}

func linkEndsWithEntity(data []byte, linkEnd int) bool {
	entityRanges := htmlEntityRe.FindAllIndex(data[:linkEnd], -1)
	return entityRanges != nil && entityRanges[len(entityRanges)-1][1] == linkEnd
}

// hasPrefixCaseInsensitive is a custom implementation of
//     strings.HasPrefix(strings.ToLower(s), prefix)
// we rolled our own because ToLower pulls in a huge machinery of lowercasing
// anything from Unicode and that's very slow. Since this func will only be
// used on ASCII protocol prefixes, we can take shortcuts.
func hasPrefixCaseInsensitive(s, prefix []byte) bool {
	if len(s) < len(prefix) {
		return false
	}
	delta := byte('a' - 'A')
	for i, b := range prefix {
		if b != s[i] && b != s[i]+delta {
			return false
		}
	}
	return true
}

var protocolPrefixes = [][]byte{
	[]byte("http://"),
	[]byte("https://"),
	[]byte("ftp://"),
	[]byte("file://"),
	[]byte("mailto:"),
}

const shortestPrefix = 6 // len("ftp://"), the shortest of the above

func maybeAutoLink(p *Markdown, data []byte, offset int) (int, *Node) {
	// quick check to rule out most false hits
	if p.insideLink || len(data) < offset+shortestPrefix {
		return 0, nil
	}
	for _, prefix := range protocolPrefixes {
		endOfHead := offset + 8 // 8 is the len() of the longest prefix
		if endOfHead > len(data) {
			endOfHead = len(data)
		}
		if hasPrefixCaseInsensitive(data[offset:endOfHead], prefix) {
			return autoLink(p, data, offset)
		}
	}
	return 0, nil
}

func autoLink(p *Markdown, data []byte, offset int) (int, *Node) {
	// Now a more expensive check to see if we're not inside an anchor element
	anchorStart := offset
	offsetFromAnchor := 0
	for anchorStart > 0 && data[anchorStart] != '<' {
		anchorStart--
		offsetFromAnchor++
	}

	anchorStr := anchorRe.Find(data[anchorStart:])
	if anchorStr != nil {
		anchorClose := NewNode(HTMLSpan)
		anchorClose.Literal = anchorStr[offsetFromAnchor:]
		return len(anchorStr) - offsetFromAnchor, anchorClose
	}

	// scan backward for a word boundary
	rewind := 0
	for offset-rewind > 0 && rewind <= 7 && isletter(data[offset-rewind-1]) {
		rewind++
	}
	if rewind > 6 { // longest supported protocol is "mailto" which has 6 letters
		return 0, nil
	}

	origData := data
	data = data[offset-rewind:]

	if !isSafeLink(data) {
		return 0, nil
	}

	linkEnd := 0
	for linkEnd < len(data) && !isEndOfLink(data[linkEnd]) {
		linkEnd++
	}

	// Skip punctuation at the end of the link
	if (data[linkEnd-1] == '.' || data[linkEnd-1] == ',') && data[linkEnd-2] != '\\' {
		linkEnd--
	}

	// But don't skip semicolon if it's a part of escaped entity:
	if data[linkEnd-1] == ';' && data[linkEnd-2] != '\\' && !linkEndsWithEntity(data, linkEnd) {
		linkEnd--
	}

	// See if the link finishes with a punctuation sign that can be closed.
	var copen byte
	switch data[linkEnd-1] {
	case '"':
		copen = '"'
	case '\'':
		copen = '\''
	case ')':
		copen = '('
	case ']':
		copen = '['
	case '}':
		copen = '{'
	default:
		copen = 0
	}

	if copen != 0 {
		bufEnd := offset - rewind + linkEnd - 2

		openDelim := 1

		/* Try to close the final punctuation sign in this same line;
		 * if we managed to close it outside of the URL, that means that it's
		 * not part of the URL. If it closes inside the URL, that means it
		 * is part of the URL.
		 *
		 * Examples:
		 *
		 *      foo http://www.pokemon.com/Pikachu_(Electric) bar
		 *              => http://www.pokemon.com/Pikachu_(Electric)
		 *
		 *      foo (http://www.pokemon.com/Pikachu_(Electric)) bar
		 *              => http://www.pokemon.com/Pikachu_(Electric)
		 *
		 *      foo http://www.pokemon.com/Pikachu_(Electric)) bar
		 *              => http://www.pokemon.com/Pikachu_(Electric))
		 *
		 *      (foo http://www.pokemon.com/Pikachu_(Electric)) bar
		 *              => foo http://www.pokemon.com/Pikachu_(Electric)
		 */

		for bufEnd >= 0 && origData[bufEnd] != '\n' && openDelim != 0 {
			if origData[bufEnd] == data[linkEnd-1] {
				openDelim++
			}

			if origData[bufEnd] == copen {
				openDelim--
			}

			bufEnd--
		}

		if openDelim == 0 {
			linkEnd--
		}
	}

	var uLink bytes.Buffer
	unescapeText(&uLink, data[:linkEnd])

	if uLink.Len() > 0 {
		node := NewNode(Link)
		node.Destination = uLink.Bytes()
		node.AppendChild(text(uLink.Bytes()))
		return linkEnd, node
	}

	return linkEnd, nil
}

func isEndOfLink(char byte) bool {
	return isspace(char) || char == '<'
}

var validUris = [][]byte{[]byte("http://"), []byte("https://"), []byte("ftp://"), []byte("mailto://")}
var validPaths = [][]byte{[]byte("/"), []byte("./"), []byte("../")}

func isSafeLink(link []byte) bool {
	for _, path := range validPaths {
		if len(link) >= len(path) && bytes.Equal(link[:len(path)], path) {
			if len(link) == len(path) {
				return true
			} else if isalnum(link[len(path)]) {
				return true
			}
		}
	}

	for _, prefix := range validUris {
		// TODO: handle unicode here
		// case-insensitive prefix test
		if len(link) > len(prefix) && bytes.Equal(bytes.ToLower(link[:len(prefix)]), prefix) && isalnum(link[len(prefix)]) {
			return true
		}
	}

	return false
}

// return the length of the given tag, or 0 is it's not valid
func tagLength(data []byte) (autolink autolinkType, end int) {
	var i, j int

	// a valid tag can't be shorter than 3 chars
	if len(data) < 3 {
		return notAutolink, 0
	}

	// begins with a '<' optionally followed by '/', followed by letter or number
	if data[0] != '<' {
		return notAutolink, 0
	}
	if data[1] == '/' {
		i = 2
	} else {
		i = 1
	}

	if !isalnum(data[i]) {
		return notAutolink, 0
	}

	// scheme test
	autolink = notAutolink

	// try to find the beginning of an URI
	for i < len(data) && (isalnum(data[i]) || data[i] == '.' || data[i] == '+' || data[i] == '-') {
		i++
	}

	if i > 1 && i < len(data) && data[i] == '@' {
		if j = isMailtoAutoLink(data[i:]); j != 0 {
			return emailAutolink, i + j
		}
	}

	if i > 2 && i < len(data) && data[i] == ':' {
		autolink = normalAutolink
		i++
	}

	// complete autolink test: no whitespace or ' or "
	switch {
	case i >= len(data):
		autolink = notAutolink
	case autolink != notAutolink:
		j = i

		for i < len(data) {
			if data[i] == '\\' {
				i += 2
			} else if data[i] == '>' || data[i] == '\'' || data[i] == '"' || isspace(data[i]) {
				break
			} else {
				i++
			}

		}

		if i >= len(data) {
			return autolink, 0
		}
		if i > j && data[i] == '>' {
			return autolink, i + 1
		}

		// one of the forbidden chars has been found
		autolink = notAutolink
	}
	i += bytes.IndexByte(data[i:], '>')
	if i < 0 {
		return autolink, 0
	}
	return autolink, i + 1
}

// look for the address part of a mail autolink and '>'
// this is less strict than the original markdown e-mail address matching
func isMailtoAutoLink(data []byte) int {
	nb := 0

	// address is assumed to be: [-@._a-zA-Z0-9]+ with exactly one '@'
	for i := 0; i < len(data); i++ {
		if isalnum(data[i]) {
			continue
		}

		switch data[i] {
		case '@':
			nb++

		case '-', '.', '_':
			break

		case '>':
			if nb == 1 {
				return i + 1
			}
			return 0
		default:
			return 0
		}
	}

	return 0
}

// look for the next emph char, skipping other constructs
func helperFindEmphChar(data []byte, c byte) int {
	i := 0

	for i < len(data) {
		for i < len(data) && data[i] != c && data[i] != '`' && data[i] != '[' {
			i++
		}
		if i >= len(data) {
			return 0
		}
		// do not count escaped chars
		if i != 0 && data[i-1] == '\\' {
			i++
			continue
		}
		if data[i] == c {
			return i
		}

		if data[i] == '`' {
			// skip a code span
			tmpI := 0
			i++
			for i < len(data) && data[i] != '`' {
				if tmpI == 0 && data[i] == c {
					tmpI = i
				}
				i++
			}
			if i >= len(data) {
				return tmpI
			}
			i++
		} else if data[i] == '[' {
			// skip a link
			tmpI := 0
			i++
			for i < len(data) && data[i] != ']' {
				if tmpI == 0 && data[i] == c {
					tmpI = i
				}
				i++
			}
			i++
			for i < len(data) && (data[i] == ' ' || data[i] == '\n') {
				i++
			}
			if i >= len(data) {
				return tmpI
			}
			if data[i] != '[' && data[i] != '(' { // not a link
				if tmpI > 0 {
					return tmpI
				}
				continue
			}
			cc := data[i]
			i++
			for i < len(data) && data[i] != cc {
				if tmpI == 0 && data[i] == c {
					return i
				}
				i++
			}
			if i >= len(data) {
				return tmpI
			}
			i++
		}
	}
	return 0
}

func helperEmphasis(p *Markdown, data []byte, c byte) (int, *Node) {
	i := 0

	// skip one symbol if coming from emph3
	if len(data) > 1 && data[0] == c && data[1] == c {
		i = 1
	}

	for i < len(data) {
		length := helperFindEmphChar(data[i:], c)
		if length == 0 {
			return 0, nil
		}
		i += length
		if i >= len(data) {
			return 0, nil
		}

		if i+1 < len(data) && data[i+1] == c {
			i++
			continue
		}

		if data[i] == c && !isspace(data[i-1]) {

			if p.extensions&NoIntraEmphasis != 0 {
				if !(i+1 == len(data) || isspace(data[i+1]) || ispunct(data[i+1])) {
					continue
				}
			}

			emph := NewNode(Emph)
			p.inline(emph, data[:i])
			return i + 1, emph
		}
	}

	return 0, nil
}

func helperDoubleEmphasis(p *Markdown, data []byte, c byte) (int, *Node) {
	i := 0

	for i < len(data) {
		length := helperFindEmphChar(data[i:], c)
		if length == 0 {
			return 0, nil
		}
		i += length

		if i+1 < len(data) && data[i] == c && data[i+1] == c && i > 0 && !isspace(data[i-1]) {
			nodeType := Strong
			if c == '~' {
				nodeType = Del
			}
			node := NewNode(nodeType)
			p.inline(node, data[:i])
			return i + 2, node
		}
		i++
	}
	return 0, nil
}

func helperTripleEmphasis(p *Markdown, data []byte, offset int, c byte) (int, *Node) {
	i := 0
	origData := data
	data = data[offset:]

	for i < len(data) {
		length := helperFindEmphChar(data[i:], c)
		if length == 0 {
			return 0, nil
		}
		i += length

		// skip whitespace preceded symbols
		if data[i] != c || isspace(data[i-1]) {
			continue
		}

		switch {
		case i+2 < len(data) && data[i+1] == c && data[i+2] == c:
			// triple symbol found
			strong := NewNode(Strong)
			em := NewNode(Emph)
			strong.AppendChild(em)
			p.inline(em, data[:i])
			return i + 3, strong
		case (i+1 < len(data) && data[i+1] == c):
			// double symbol found, hand over to emph1
			length, node := helperEmphasis(p, origData[offset-2:], c)
			if length == 0 {
				return 0, nil
			}
			return length - 2, node
		default:
			// single symbol found, hand over to emph2
			length, node := helperDoubleEmphasis(p, origData[offset-1:], c)
			if length == 0 {
				return 0, nil
			}
			return length - 1, node
		}
	}
	return 0, nil
}

func text(s []byte) *Node {
	node := NewNode(Text)
	node.Literal = s
	return node
}

func normalizeURI(s []byte) []byte {
	return s // TODO: implement
}
07070100000A7F000081A4000000000000000000000001645E367C000066DC000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/russross/blackfriday/v2/markdown.go // Blackfriday Markdown Processor
// Available at http://github.com/russross/blackfriday
//
// Copyright © 2011 Russ Ross <russ@russross.com>.
// Distributed under the Simplified BSD License.
// See README.md for details.

package blackfriday

import (
	"bytes"
	"fmt"
	"io"
	"strings"
	"unicode/utf8"
)

//
// Markdown parsing and processing
//

// Version string of the package. Appears in the rendered document when
// CompletePage flag is on.
const Version = "2.0"

// Extensions is a bitwise or'ed collection of enabled Blackfriday's
// extensions.
type Extensions int

// These are the supported markdown parsing extensions.
// OR these values together to select multiple extensions.
const (
	NoExtensions           Extensions = 0
	NoIntraEmphasis        Extensions = 1 << iota // Ignore emphasis markers inside words
	Tables                                        // Render tables
	FencedCode                                    // Render fenced code blocks
	Autolink                                      // Detect embedded URLs that are not explicitly marked
	Strikethrough                                 // Strikethrough text using ~~test~~
	LaxHTMLBlocks                                 // Loosen up HTML block parsing rules
	SpaceHeadings                                 // Be strict about prefix heading rules
	HardLineBreak                                 // Translate newlines into line breaks
	TabSizeEight                                  // Expand tabs to eight spaces instead of four
	Footnotes                                     // Pandoc-style footnotes
	NoEmptyLineBeforeBlock                        // No need to insert an empty line to start a (code, quote, ordered list, unordered list) block
	HeadingIDs                                    // specify heading IDs  with {#id}
	Titleblock                                    // Titleblock ala pandoc
	AutoHeadingIDs                                // Create the heading ID from the text
	BackslashLineBreak                            // Translate trailing backslashes into line breaks
	DefinitionLists                               // Render definition lists

	CommonHTMLFlags HTMLFlags = UseXHTML | Smartypants |
		SmartypantsFractions | SmartypantsDashes | SmartypantsLatexDashes

	CommonExtensions Extensions = NoIntraEmphasis | Tables | FencedCode |
		Autolink | Strikethrough | SpaceHeadings | HeadingIDs |
		BackslashLineBreak | DefinitionLists
)

// ListType contains bitwise or'ed flags for list and list item objects.
type ListType int

// These are the possible flag values for the ListItem renderer.
// Multiple flag values may be ORed together.
// These are mostly of interest if you are writing a new output format.
const (
	ListTypeOrdered ListType = 1 << iota
	ListTypeDefinition
	ListTypeTerm

	ListItemContainsBlock
	ListItemBeginningOfList // TODO: figure out if this is of any use now
	ListItemEndOfList
)

// CellAlignFlags holds a type of alignment in a table cell.
type CellAlignFlags int

// These are the possible flag values for the table cell renderer.
// Only a single one of these values will be used; they are not ORed together.
// These are mostly of interest if you are writing a new output format.
const (
	TableAlignmentLeft CellAlignFlags = 1 << iota
	TableAlignmentRight
	TableAlignmentCenter = (TableAlignmentLeft | TableAlignmentRight)
)

// The size of a tab stop.
const (
	TabSizeDefault = 4
	TabSizeDouble  = 8
)

// blockTags is a set of tags that are recognized as HTML block tags.
// Any of these can be included in markdown text without special escaping.
var blockTags = map[string]struct{}{
	"blockquote": {},
	"del":        {},
	"div":        {},
	"dl":         {},
	"fieldset":   {},
	"form":       {},
	"h1":         {},
	"h2":         {},
	"h3":         {},
	"h4":         {},
	"h5":         {},
	"h6":         {},
	"iframe":     {},
	"ins":        {},
	"math":       {},
	"noscript":   {},
	"ol":         {},
	"pre":        {},
	"p":          {},
	"script":     {},
	"style":      {},
	"table":      {},
	"ul":         {},

	// HTML5
	"address":    {},
	"article":    {},
	"aside":      {},
	"canvas":     {},
	"figcaption": {},
	"figure":     {},
	"footer":     {},
	"header":     {},
	"hgroup":     {},
	"main":       {},
	"nav":        {},
	"output":     {},
	"progress":   {},
	"section":    {},
	"video":      {},
}

// Renderer is the rendering interface. This is mostly of interest if you are
// implementing a new rendering format.
//
// Only an HTML implementation is provided in this repository, see the README
// for external implementations.
type Renderer interface {
	// RenderNode is the main rendering method. It will be called once for
	// every leaf node and twice for every non-leaf node (first with
	// entering=true, then with entering=false). The method should write its
	// rendition of the node to the supplied writer w.
	RenderNode(w io.Writer, node *Node, entering bool) WalkStatus

	// RenderHeader is a method that allows the renderer to produce some
	// content preceding the main body of the output document. The header is
	// understood in the broad sense here. For example, the default HTML
	// renderer will write not only the HTML document preamble, but also the
	// table of contents if it was requested.
	//
	// The method will be passed an entire document tree, in case a particular
	// implementation needs to inspect it to produce output.
	//
	// The output should be written to the supplied writer w. If your
	// implementation has no header to write, supply an empty implementation.
	RenderHeader(w io.Writer, ast *Node)

	// RenderFooter is a symmetric counterpart of RenderHeader.
	RenderFooter(w io.Writer, ast *Node)
}

// Callback functions for inline parsing. One such function is defined
// for each character that triggers a response when parsing inline data.
type inlineParser func(p *Markdown, data []byte, offset int) (int, *Node)

// Markdown is a type that holds extensions and the runtime state used by
// Parse, and the renderer. You can not use it directly, construct it with New.
type Markdown struct {
	renderer          Renderer
	referenceOverride ReferenceOverrideFunc
	refs              map[string]*reference
	inlineCallback    [256]inlineParser
	extensions        Extensions
	nesting           int
	maxNesting        int
	insideLink        bool

	// Footnotes need to be ordered as well as available to quickly check for
	// presence. If a ref is also a footnote, it's stored both in refs and here
	// in notes. Slice is nil if footnotes not enabled.
	notes []*reference

	doc                  *Node
	tip                  *Node // = doc
	oldTip               *Node
	lastMatchedContainer *Node // = doc
	allClosed            bool
}

func (p *Markdown) getRef(refid string) (ref *reference, found bool) {
	if p.referenceOverride != nil {
		r, overridden := p.referenceOverride(refid)
		if overridden {
			if r == nil {
				return nil, false
			}
			return &reference{
				link:     []byte(r.Link),
				title:    []byte(r.Title),
				noteID:   0,
				hasBlock: false,
				text:     []byte(r.Text)}, true
		}
	}
	// refs are case insensitive
	ref, found = p.refs[strings.ToLower(refid)]
	return ref, found
}

func (p *Markdown) finalize(block *Node) {
	above := block.Parent
	block.open = false
	p.tip = above
}

func (p *Markdown) addChild(node NodeType, offset uint32) *Node {
	return p.addExistingChild(NewNode(node), offset)
}

func (p *Markdown) addExistingChild(node *Node, offset uint32) *Node {
	for !p.tip.canContain(node.Type) {
		p.finalize(p.tip)
	}
	p.tip.AppendChild(node)
	p.tip = node
	return node
}

func (p *Markdown) closeUnmatchedBlocks() {
	if !p.allClosed {
		for p.oldTip != p.lastMatchedContainer {
			parent := p.oldTip.Parent
			p.finalize(p.oldTip)
			p.oldTip = parent
		}
		p.allClosed = true
	}
}

//
//
// Public interface
//
//

// Reference represents the details of a link.
// See the documentation in Options for more details on use-case.
type Reference struct {
	// Link is usually the URL the reference points to.
	Link string
	// Title is the alternate text describing the link in more detail.
	Title string
	// Text is the optional text to override the ref with if the syntax used was
	// [refid][]
	Text string
}

// ReferenceOverrideFunc is expected to be called with a reference string and
// return either a valid Reference type that the reference string maps to or
// nil. If overridden is false, the default reference logic will be executed.
// See the documentation in Options for more details on use-case.
type ReferenceOverrideFunc func(reference string) (ref *Reference, overridden bool)

// New constructs a Markdown processor. You can use the same With* functions as
// for Run() to customize parser's behavior and the renderer.
func New(opts ...Option) *Markdown {
	var p Markdown
	for _, opt := range opts {
		opt(&p)
	}
	p.refs = make(map[string]*reference)
	p.maxNesting = 16
	p.insideLink = false
	docNode := NewNode(Document)
	p.doc = docNode
	p.tip = docNode
	p.oldTip = docNode
	p.lastMatchedContainer = docNode
	p.allClosed = true
	// register inline parsers
	p.inlineCallback[' '] = maybeLineBreak
	p.inlineCallback['*'] = emphasis
	p.inlineCallback['_'] = emphasis
	if p.extensions&Strikethrough != 0 {
		p.inlineCallback['~'] = emphasis
	}
	p.inlineCallback['`'] = codeSpan
	p.inlineCallback['\n'] = lineBreak
	p.inlineCallback['['] = link
	p.inlineCallback['<'] = leftAngle
	p.inlineCallback['\\'] = escape
	p.inlineCallback['&'] = entity
	p.inlineCallback['!'] = maybeImage
	p.inlineCallback['^'] = maybeInlineFootnote
	if p.extensions&Autolink != 0 {
		p.inlineCallback['h'] = maybeAutoLink
		p.inlineCallback['m'] = maybeAutoLink
		p.inlineCallback['f'] = maybeAutoLink
		p.inlineCallback['H'] = maybeAutoLink
		p.inlineCallback['M'] = maybeAutoLink
		p.inlineCallback['F'] = maybeAutoLink
	}
	if p.extensions&Footnotes != 0 {
		p.notes = make([]*reference, 0)
	}
	return &p
}

// Option customizes the Markdown processor's default behavior.
type Option func(*Markdown)

// WithRenderer allows you to override the default renderer.
func WithRenderer(r Renderer) Option {
	return func(p *Markdown) {
		p.renderer = r
	}
}

// WithExtensions allows you to pick some of the many extensions provided by
// Blackfriday. You can bitwise OR them.
func WithExtensions(e Extensions) Option {
	return func(p *Markdown) {
		p.extensions = e
	}
}

// WithNoExtensions turns off all extensions and custom behavior.
func WithNoExtensions() Option {
	return func(p *Markdown) {
		p.extensions = NoExtensions
		p.renderer = NewHTMLRenderer(HTMLRendererParameters{
			Flags: HTMLFlagsNone,
		})
	}
}

// WithRefOverride sets an optional function callback that is called every
// time a reference is resolved.
//
// In Markdown, the link reference syntax can be made to resolve a link to
// a reference instead of an inline URL, in one of the following ways:
//
//  * [link text][refid]
//  * [refid][]
//
// Usually, the refid is defined at the bottom of the Markdown document. If
// this override function is provided, the refid is passed to the override
// function first, before consulting the defined refids at the bottom. If
// the override function indicates an override did not occur, the refids at
// the bottom will be used to fill in the link details.
func WithRefOverride(o ReferenceOverrideFunc) Option {
	return func(p *Markdown) {
		p.referenceOverride = o
	}
}

// Run is the main entry point to Blackfriday. It parses and renders a
// block of markdown-encoded text.
//
// The simplest invocation of Run takes one argument, input:
//     output := Run(input)
// This will parse the input with CommonExtensions enabled and render it with
// the default HTMLRenderer (with CommonHTMLFlags).
//
// Variadic arguments opts can customize the default behavior. Since Markdown
// type does not contain exported fields, you can not use it directly. Instead,
// use the With* functions. For example, this will call the most basic
// functionality, with no extensions:
//     output := Run(input, WithNoExtensions())
//
// You can use any number of With* arguments, even contradicting ones. They
// will be applied in order of appearance and the latter will override the
// former:
//     output := Run(input, WithNoExtensions(), WithExtensions(exts),
//         WithRenderer(yourRenderer))
func Run(input []byte, opts ...Option) []byte {
	r := NewHTMLRenderer(HTMLRendererParameters{
		Flags: CommonHTMLFlags,
	})
	optList := []Option{WithRenderer(r), WithExtensions(CommonExtensions)}
	optList = append(optList, opts...)
	parser := New(optList...)
	ast := parser.Parse(input)
	var buf bytes.Buffer
	parser.renderer.RenderHeader(&buf, ast)
	ast.Walk(func(node *Node, entering bool) WalkStatus {
		return parser.renderer.RenderNode(&buf, node, entering)
	})
	parser.renderer.RenderFooter(&buf, ast)
	return buf.Bytes()
}

// Parse is an entry point to the parsing part of Blackfriday. It takes an
// input markdown document and produces a syntax tree for its contents. This
// tree can then be rendered with a default or custom renderer, or
// analyzed/transformed by the caller to whatever non-standard needs they have.
// The return value is the root node of the syntax tree.
func (p *Markdown) Parse(input []byte) *Node {
	p.block(input)
	// Walk the tree and finish up some of unfinished blocks
	for p.tip != nil {
		p.finalize(p.tip)
	}
	// Walk the tree again and process inline markdown in each block
	p.doc.Walk(func(node *Node, entering bool) WalkStatus {
		if node.Type == Paragraph || node.Type == Heading || node.Type == TableCell {
			p.inline(node, node.content)
			node.content = nil
		}
		return GoToNext
	})
	p.parseRefsToAST()
	return p.doc
}

func (p *Markdown) parseRefsToAST() {
	if p.extensions&Footnotes == 0 || len(p.notes) == 0 {
		return
	}
	p.tip = p.doc
	block := p.addBlock(List, nil)
	block.IsFootnotesList = true
	block.ListFlags = ListTypeOrdered
	flags := ListItemBeginningOfList
	// Note: this loop is intentionally explicit, not range-form. This is
	// because the body of the loop will append nested footnotes to p.notes and
	// we need to process those late additions. Range form would only walk over
	// the fixed initial set.
	for i := 0; i < len(p.notes); i++ {
		ref := p.notes[i]
		p.addExistingChild(ref.footnote, 0)
		block := ref.footnote
		block.ListFlags = flags | ListTypeOrdered
		block.RefLink = ref.link
		if ref.hasBlock {
			flags |= ListItemContainsBlock
			p.block(ref.title)
		} else {
			p.inline(block, ref.title)
		}
		flags &^= ListItemBeginningOfList | ListItemContainsBlock
	}
	above := block.Parent
	finalizeList(block)
	p.tip = above
	block.Walk(func(node *Node, entering bool) WalkStatus {
		if node.Type == Paragraph || node.Type == Heading {
			p.inline(node, node.content)
			node.content = nil
		}
		return GoToNext
	})
}

//
// Link references
//
// This section implements support for references that (usually) appear
// as footnotes in a document, and can be referenced anywhere in the document.
// The basic format is:
//
//    [1]: http://www.google.com/ "Google"
//    [2]: http://www.github.com/ "Github"
//
// Anywhere in the document, the reference can be linked by referring to its
// label, i.e., 1 and 2 in this example, as in:
//
//    This library is hosted on [Github][2], a git hosting site.
//
// Actual footnotes as specified in Pandoc and supported by some other Markdown
// libraries such as php-markdown are also taken care of. They look like this:
//
//    This sentence needs a bit of further explanation.[^note]
//
//    [^note]: This is the explanation.
//
// Footnotes should be placed at the end of the document in an ordered list.
// Finally, there are inline footnotes such as:
//
//    Inline footnotes^[Also supported.] provide a quick inline explanation,
//    but are rendered at the bottom of the document.
//

// reference holds all information necessary for a reference-style links or
// footnotes.
//
// Consider this markdown with reference-style links:
//
//     [link][ref]
//
//     [ref]: /url/ "tooltip title"
//
// It will be ultimately converted to this HTML:
//
//     <p><a href=\"/url/\" title=\"title\">link</a></p>
//
// And a reference structure will be populated as follows:
//
//     p.refs["ref"] = &reference{
//         link: "/url/",
//         title: "tooltip title",
//     }
//
// Alternatively, reference can contain information about a footnote. Consider
// this markdown:
//
//     Text needing a footnote.[^a]
//
//     [^a]: This is the note
//
// A reference structure will be populated as follows:
//
//     p.refs["a"] = &reference{
//         link: "a",
//         title: "This is the note",
//         noteID: <some positive int>,
//     }
//
// TODO: As you can see, it begs for splitting into two dedicated structures
// for refs and for footnotes.
type reference struct {
	link     []byte
	title    []byte
	noteID   int // 0 if not a footnote ref
	hasBlock bool
	footnote *Node // a link to the Item node within a list of footnotes

	text []byte // only gets populated by refOverride feature with Reference.Text
}

func (r *reference) String() string {
	return fmt.Sprintf("{link: %q, title: %q, text: %q, noteID: %d, hasBlock: %v}",
		r.link, r.title, r.text, r.noteID, r.hasBlock)
}

// Check whether or not data starts with a reference link.
// If so, it is parsed and stored in the list of references
// (in the render struct).
// Returns the number of bytes to skip to move past it,
// or zero if the first line is not a reference.
func isReference(p *Markdown, data []byte, tabSize int) int {
	// up to 3 optional leading spaces
	if len(data) < 4 {
		return 0
	}
	i := 0
	for i < 3 && data[i] == ' ' {
		i++
	}

	noteID := 0

	// id part: anything but a newline between brackets
	if data[i] != '[' {
		return 0
	}
	i++
	if p.extensions&Footnotes != 0 {
		if i < len(data) && data[i] == '^' {
			// we can set it to anything here because the proper noteIds will
			// be assigned later during the second pass. It just has to be != 0
			noteID = 1
			i++
		}
	}
	idOffset := i
	for i < len(data) && data[i] != '\n' && data[i] != '\r' && data[i] != ']' {
		i++
	}
	if i >= len(data) || data[i] != ']' {
		return 0
	}
	idEnd := i
	// footnotes can have empty ID, like this: [^], but a reference can not be
	// empty like this: []. Break early if it's not a footnote and there's no ID
	if noteID == 0 && idOffset == idEnd {
		return 0
	}
	// spacer: colon (space | tab)* newline? (space | tab)*
	i++
	if i >= len(data) || data[i] != ':' {
		return 0
	}
	i++
	for i < len(data) && (data[i] == ' ' || data[i] == '\t') {
		i++
	}
	if i < len(data) && (data[i] == '\n' || data[i] == '\r') {
		i++
		if i < len(data) && data[i] == '\n' && data[i-1] == '\r' {
			i++
		}
	}
	for i < len(data) && (data[i] == ' ' || data[i] == '\t') {
		i++
	}
	if i >= len(data) {
		return 0
	}

	var (
		linkOffset, linkEnd   int
		titleOffset, titleEnd int
		lineEnd               int
		raw                   []byte
		hasBlock              bool
	)

	if p.extensions&Footnotes != 0 && noteID != 0 {
		linkOffset, linkEnd, raw, hasBlock = scanFootnote(p, data, i, tabSize)
		lineEnd = linkEnd
	} else {
		linkOffset, linkEnd, titleOffset, titleEnd, lineEnd = scanLinkRef(p, data, i)
	}
	if lineEnd == 0 {
		return 0
	}

	// a valid ref has been found

	ref := &reference{
		noteID:   noteID,
		hasBlock: hasBlock,
	}

	if noteID > 0 {
		// reusing the link field for the id since footnotes don't have links
		ref.link = data[idOffset:idEnd]
		// if footnote, it's not really a title, it's the contained text
		ref.title = raw
	} else {
		ref.link = data[linkOffset:linkEnd]
		ref.title = data[titleOffset:titleEnd]
	}

	// id matches are case-insensitive
	id := string(bytes.ToLower(data[idOffset:idEnd]))

	p.refs[id] = ref

	return lineEnd
}

func scanLinkRef(p *Markdown, data []byte, i int) (linkOffset, linkEnd, titleOffset, titleEnd, lineEnd int) {
	// link: whitespace-free sequence, optionally between angle brackets
	if data[i] == '<' {
		i++
	}
	linkOffset = i
	for i < len(data) && data[i] != ' ' && data[i] != '\t' && data[i] != '\n' && data[i] != '\r' {
		i++
	}
	linkEnd = i
	if data[linkOffset] == '<' && data[linkEnd-1] == '>' {
		linkOffset++
		linkEnd--
	}

	// optional spacer: (space | tab)* (newline | '\'' | '"' | '(' )
	for i < len(data) && (data[i] == ' ' || data[i] == '\t') {
		i++
	}
	if i < len(data) && data[i] != '\n' && data[i] != '\r' && data[i] != '\'' && data[i] != '"' && data[i] != '(' {
		return
	}

	// compute end-of-line
	if i >= len(data) || data[i] == '\r' || data[i] == '\n' {
		lineEnd = i
	}
	if i+1 < len(data) && data[i] == '\r' && data[i+1] == '\n' {
		lineEnd++
	}

	// optional (space|tab)* spacer after a newline
	if lineEnd > 0 {
		i = lineEnd + 1
		for i < len(data) && (data[i] == ' ' || data[i] == '\t') {
			i++
		}
	}

	// optional title: any non-newline sequence enclosed in '"() alone on its line
	if i+1 < len(data) && (data[i] == '\'' || data[i] == '"' || data[i] == '(') {
		i++
		titleOffset = i

		// look for EOL
		for i < len(data) && data[i] != '\n' && data[i] != '\r' {
			i++
		}
		if i+1 < len(data) && data[i] == '\n' && data[i+1] == '\r' {
			titleEnd = i + 1
		} else {
			titleEnd = i
		}

		// step back
		i--
		for i > titleOffset && (data[i] == ' ' || data[i] == '\t') {
			i--
		}
		if i > titleOffset && (data[i] == '\'' || data[i] == '"' || data[i] == ')') {
			lineEnd = titleEnd
			titleEnd = i
		}
	}

	return
}

// The first bit of this logic is the same as Parser.listItem, but the rest
// is much simpler. This function simply finds the entire block and shifts it
// over by one tab if it is indeed a block (just returns the line if it's not).
// blockEnd is the end of the section in the input buffer, and contents is the
// extracted text that was shifted over one tab. It will need to be rendered at
// the end of the document.
func scanFootnote(p *Markdown, data []byte, i, indentSize int) (blockStart, blockEnd int, contents []byte, hasBlock bool) {
	if i == 0 || len(data) == 0 {
		return
	}

	// skip leading whitespace on first line
	for i < len(data) && data[i] == ' ' {
		i++
	}

	blockStart = i

	// find the end of the line
	blockEnd = i
	for i < len(data) && data[i-1] != '\n' {
		i++
	}

	// get working buffer
	var raw bytes.Buffer

	// put the first line into the working buffer
	raw.Write(data[blockEnd:i])
	blockEnd = i

	// process the following lines
	containsBlankLine := false

gatherLines:
	for blockEnd < len(data) {
		i++

		// find the end of this line
		for i < len(data) && data[i-1] != '\n' {
			i++
		}

		// if it is an empty line, guess that it is part of this item
		// and move on to the next line
		if p.isEmpty(data[blockEnd:i]) > 0 {
			containsBlankLine = true
			blockEnd = i
			continue
		}

		n := 0
		if n = isIndented(data[blockEnd:i], indentSize); n == 0 {
			// this is the end of the block.
			// we don't want to include this last line in the index.
			break gatherLines
		}

		// if there were blank lines before this one, insert a new one now
		if containsBlankLine {
			raw.WriteByte('\n')
			containsBlankLine = false
		}

		// get rid of that first tab, write to buffer
		raw.Write(data[blockEnd+n : i])
		hasBlock = true

		blockEnd = i
	}

	if data[blockEnd-1] != '\n' {
		raw.WriteByte('\n')
	}

	contents = raw.Bytes()

	return
}

//
//
// Miscellaneous helper functions
//
//

// Test if a character is a punctuation symbol.
// Taken from a private function in regexp in the stdlib.
func ispunct(c byte) bool {
	for _, r := range []byte("!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~") {
		if c == r {
			return true
		}
	}
	return false
}

// Test if a character is a whitespace character.
func isspace(c byte) bool {
	return ishorizontalspace(c) || isverticalspace(c)
}

// Test if a character is a horizontal whitespace character.
func ishorizontalspace(c byte) bool {
	return c == ' ' || c == '\t'
}

// Test if a character is a vertical character.
func isverticalspace(c byte) bool {
	return c == '\n' || c == '\r' || c == '\f' || c == '\v'
}

// Test if a character is letter.
func isletter(c byte) bool {
	return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')
}

// Test if a character is a letter or a digit.
// TODO: check when this is looking for ASCII alnum and when it should use unicode
func isalnum(c byte) bool {
	return (c >= '0' && c <= '9') || isletter(c)
}

// Replace tab characters with spaces, aligning to the next TAB_SIZE column.
// always ends output with a newline
func expandTabs(out *bytes.Buffer, line []byte, tabSize int) {
	// first, check for common cases: no tabs, or only tabs at beginning of line
	i, prefix := 0, 0
	slowcase := false
	for i = 0; i < len(line); i++ {
		if line[i] == '\t' {
			if prefix == i {
				prefix++
			} else {
				slowcase = true
				break
			}
		}
	}

	// no need to decode runes if all tabs are at the beginning of the line
	if !slowcase {
		for i = 0; i < prefix*tabSize; i++ {
			out.WriteByte(' ')
		}
		out.Write(line[prefix:])
		return
	}

	// the slow case: we need to count runes to figure out how
	// many spaces to insert for each tab
	column := 0
	i = 0
	for i < len(line) {
		start := i
		for i < len(line) && line[i] != '\t' {
			_, size := utf8.DecodeRune(line[i:])
			i += size
			column++
		}

		if i > start {
			out.Write(line[start:i])
		}

		if i >= len(line) {
			break
		}

		for {
			out.WriteByte(' ')
			column++
			if column%tabSize == 0 {
				break
			}
		}

		i++
	}
}

// Find if a line counts as indented or not.
// Returns number of characters the indent is (0 = not indented).
func isIndented(data []byte, indentSize int) int {
	if len(data) == 0 {
		return 0
	}
	if data[0] == '\t' {
		return 1
	}
	if len(data) < indentSize {
		return 0
	}
	for i := 0; i < indentSize; i++ {
		if data[i] != ' ' {
			return 0
		}
	}
	return indentSize
}

// Create a url-safe slug for fragments
func slugify(in []byte) []byte {
	if len(in) == 0 {
		return in
	}
	out := make([]byte, 0, len(in))
	sym := false

	for _, ch := range in {
		if isalnum(ch) {
			sym = false
			out = append(out, ch)
		} else if sym {
			continue
		} else {
			out = append(out, '-')
			sym = true
		}
	}
	var a, b int
	var ch byte
	for a, ch = range out {
		if ch != '-' {
			break
		}
	}
	for b = len(out) - 1; b > 0; b-- {
		if out[b] != '-' {
			break
		}
	}
	return out[a : b+1]
}
07070100000A80000081A4000000000000000000000001645E367C00002282000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/russross/blackfriday/v2/node.go package blackfriday

import (
	"bytes"
	"fmt"
)

// NodeType specifies a type of a single node of a syntax tree. Usually one
// node (and its type) corresponds to a single markdown feature, e.g. emphasis
// or code block.
type NodeType int

// Constants for identifying different types of nodes. See NodeType.
const (
	Document NodeType = iota
	BlockQuote
	List
	Item
	Paragraph
	Heading
	HorizontalRule
	Emph
	Strong
	Del
	Link
	Image
	Text
	HTMLBlock
	CodeBlock
	Softbreak
	Hardbreak
	Code
	HTMLSpan
	Table
	TableCell
	TableHead
	TableBody
	TableRow
)

var nodeTypeNames = []string{
	Document:       "Document",
	BlockQuote:     "BlockQuote",
	List:           "List",
	Item:           "Item",
	Paragraph:      "Paragraph",
	Heading:        "Heading",
	HorizontalRule: "HorizontalRule",
	Emph:           "Emph",
	Strong:         "Strong",
	Del:            "Del",
	Link:           "Link",
	Image:          "Image",
	Text:           "Text",
	HTMLBlock:      "HTMLBlock",
	CodeBlock:      "CodeBlock",
	Softbreak:      "Softbreak",
	Hardbreak:      "Hardbreak",
	Code:           "Code",
	HTMLSpan:       "HTMLSpan",
	Table:          "Table",
	TableCell:      "TableCell",
	TableHead:      "TableHead",
	TableBody:      "TableBody",
	TableRow:       "TableRow",
}

func (t NodeType) String() string {
	return nodeTypeNames[t]
}

// ListData contains fields relevant to a List and Item node type.
type ListData struct {
	ListFlags       ListType
	Tight           bool   // Skip <p>s around list item data if true
	BulletChar      byte   // '*', '+' or '-' in bullet lists
	Delimiter       byte   // '.' or ')' after the number in ordered lists
	RefLink         []byte // If not nil, turns this list item into a footnote item and triggers different rendering
	IsFootnotesList bool   // This is a list of footnotes
}

// LinkData contains fields relevant to a Link node type.
type LinkData struct {
	Destination []byte // Destination is what goes into a href
	Title       []byte // Title is the tooltip thing that goes in a title attribute
	NoteID      int    // NoteID contains a serial number of a footnote, zero if it's not a footnote
	Footnote    *Node  // If it's a footnote, this is a direct link to the footnote Node. Otherwise nil.
}

// CodeBlockData contains fields relevant to a CodeBlock node type.
type CodeBlockData struct {
	IsFenced    bool   // Specifies whether it's a fenced code block or an indented one
	Info        []byte // This holds the info string
	FenceChar   byte
	FenceLength int
	FenceOffset int
}

// TableCellData contains fields relevant to a TableCell node type.
type TableCellData struct {
	IsHeader bool           // This tells if it's under the header row
	Align    CellAlignFlags // This holds the value for align attribute
}

// HeadingData contains fields relevant to a Heading node type.
type HeadingData struct {
	Level        int    // This holds the heading level number
	HeadingID    string // This might hold heading ID, if present
	IsTitleblock bool   // Specifies whether it's a title block
}

// Node is a single element in the abstract syntax tree of the parsed document.
// It holds connections to the structurally neighboring nodes and, for certain
// types of nodes, additional information that might be needed when rendering.
type Node struct {
	Type       NodeType // Determines the type of the node
	Parent     *Node    // Points to the parent
	FirstChild *Node    // Points to the first child, if any
	LastChild  *Node    // Points to the last child, if any
	Prev       *Node    // Previous sibling; nil if it's the first child
	Next       *Node    // Next sibling; nil if it's the last child

	Literal []byte // Text contents of the leaf nodes

	HeadingData   // Populated if Type is Heading
	ListData      // Populated if Type is List
	CodeBlockData // Populated if Type is CodeBlock
	LinkData      // Populated if Type is Link
	TableCellData // Populated if Type is TableCell

	content []byte // Markdown content of the block nodes
	open    bool   // Specifies an open block node that has not been finished to process yet
}

// NewNode allocates a node of a specified type.
func NewNode(typ NodeType) *Node {
	return &Node{
		Type: typ,
		open: true,
	}
}

func (n *Node) String() string {
	ellipsis := ""
	snippet := n.Literal
	if len(snippet) > 16 {
		snippet = snippet[:16]
		ellipsis = "..."
	}
	return fmt.Sprintf("%s: '%s%s'", n.Type, snippet, ellipsis)
}

// Unlink removes node 'n' from the tree.
// It panics if the node is nil.
func (n *Node) Unlink() {
	if n.Prev != nil {
		n.Prev.Next = n.Next
	} else if n.Parent != nil {
		n.Parent.FirstChild = n.Next
	}
	if n.Next != nil {
		n.Next.Prev = n.Prev
	} else if n.Parent != nil {
		n.Parent.LastChild = n.Prev
	}
	n.Parent = nil
	n.Next = nil
	n.Prev = nil
}

// AppendChild adds a node 'child' as a child of 'n'.
// It panics if either node is nil.
func (n *Node) AppendChild(child *Node) {
	child.Unlink()
	child.Parent = n
	if n.LastChild != nil {
		n.LastChild.Next = child
		child.Prev = n.LastChild
		n.LastChild = child
	} else {
		n.FirstChild = child
		n.LastChild = child
	}
}

// InsertBefore inserts 'sibling' immediately before 'n'.
// It panics if either node is nil.
func (n *Node) InsertBefore(sibling *Node) {
	sibling.Unlink()
	sibling.Prev = n.Prev
	if sibling.Prev != nil {
		sibling.Prev.Next = sibling
	}
	sibling.Next = n
	n.Prev = sibling
	sibling.Parent = n.Parent
	if sibling.Prev == nil {
		sibling.Parent.FirstChild = sibling
	}
}

// IsContainer returns true if 'n' can contain children.
func (n *Node) IsContainer() bool {
	switch n.Type {
	case Document:
		fallthrough
	case BlockQuote:
		fallthrough
	case List:
		fallthrough
	case Item:
		fallthrough
	case Paragraph:
		fallthrough
	case Heading:
		fallthrough
	case Emph:
		fallthrough
	case Strong:
		fallthrough
	case Del:
		fallthrough
	case Link:
		fallthrough
	case Image:
		fallthrough
	case Table:
		fallthrough
	case TableHead:
		fallthrough
	case TableBody:
		fallthrough
	case TableRow:
		fallthrough
	case TableCell:
		return true
	default:
		return false
	}
}

// IsLeaf returns true if 'n' is a leaf node.
func (n *Node) IsLeaf() bool {
	return !n.IsContainer()
}

func (n *Node) canContain(t NodeType) bool {
	if n.Type == List {
		return t == Item
	}
	if n.Type == Document || n.Type == BlockQuote || n.Type == Item {
		return t != Item
	}
	if n.Type == Table {
		return t == TableHead || t == TableBody
	}
	if n.Type == TableHead || n.Type == TableBody {
		return t == TableRow
	}
	if n.Type == TableRow {
		return t == TableCell
	}
	return false
}

// WalkStatus allows NodeVisitor to have some control over the tree traversal.
// It is returned from NodeVisitor and different values allow Node.Walk to
// decide which node to go to next.
type WalkStatus int

const (
	// GoToNext is the default traversal of every node.
	GoToNext WalkStatus = iota
	// SkipChildren tells walker to skip all children of current node.
	SkipChildren
	// Terminate tells walker to terminate the traversal.
	Terminate
)

// NodeVisitor is a callback to be called when traversing the syntax tree.
// Called twice for every node: once with entering=true when the branch is
// first visited, then with entering=false after all the children are done.
type NodeVisitor func(node *Node, entering bool) WalkStatus

// Walk is a convenience method that instantiates a walker and starts a
// traversal of subtree rooted at n.
func (n *Node) Walk(visitor NodeVisitor) {
	w := newNodeWalker(n)
	for w.current != nil {
		status := visitor(w.current, w.entering)
		switch status {
		case GoToNext:
			w.next()
		case SkipChildren:
			w.entering = false
			w.next()
		case Terminate:
			return
		}
	}
}

type nodeWalker struct {
	current  *Node
	root     *Node
	entering bool
}

func newNodeWalker(root *Node) *nodeWalker {
	return &nodeWalker{
		current:  root,
		root:     root,
		entering: true,
	}
}

func (nw *nodeWalker) next() {
	if (!nw.current.IsContainer() || !nw.entering) && nw.current == nw.root {
		nw.current = nil
		return
	}
	if nw.entering && nw.current.IsContainer() {
		if nw.current.FirstChild != nil {
			nw.current = nw.current.FirstChild
			nw.entering = true
		} else {
			nw.entering = false
		}
	} else if nw.current.Next == nil {
		nw.current = nw.current.Parent
		nw.entering = false
	} else {
		nw.current = nw.current.Next
		nw.entering = true
	}
}

func dump(ast *Node) {
	fmt.Println(dumpString(ast))
}

func dumpR(ast *Node, depth int) string {
	if ast == nil {
		return ""
	}
	indent := bytes.Repeat([]byte("\t"), depth)
	content := ast.Literal
	if content == nil {
		content = ast.content
	}
	result := fmt.Sprintf("%s%s(%q)\n", indent, ast.Type, content)
	for n := ast.FirstChild; n != nil; n = n.Next {
		result += dumpR(n, depth+1)
	}
	return result
}

func dumpString(ast *Node) string {
	return dumpR(ast, 0)
}
  07070100000A81000081A4000000000000000000000001645E367C00002D1C000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/russross/blackfriday/v2/smartypants.go  //
// Blackfriday Markdown Processor
// Available at http://github.com/russross/blackfriday
//
// Copyright © 2011 Russ Ross <russ@russross.com>.
// Distributed under the Simplified BSD License.
// See README.md for details.
//

//
//
// SmartyPants rendering
//
//

package blackfriday

import (
	"bytes"
	"io"
)

// SPRenderer is a struct containing state of a Smartypants renderer.
type SPRenderer struct {
	inSingleQuote bool
	inDoubleQuote bool
	callbacks     [256]smartCallback
}

func wordBoundary(c byte) bool {
	return c == 0 || isspace(c) || ispunct(c)
}

func tolower(c byte) byte {
	if c >= 'A' && c <= 'Z' {
		return c - 'A' + 'a'
	}
	return c
}

func isdigit(c byte) bool {
	return c >= '0' && c <= '9'
}

func smartQuoteHelper(out *bytes.Buffer, previousChar byte, nextChar byte, quote byte, isOpen *bool, addNBSP bool) bool {
	// edge of the buffer is likely to be a tag that we don't get to see,
	// so we treat it like text sometimes

	// enumerate all sixteen possibilities for (previousChar, nextChar)
	// each can be one of {0, space, punct, other}
	switch {
	case previousChar == 0 && nextChar == 0:
		// context is not any help here, so toggle
		*isOpen = !*isOpen
	case isspace(previousChar) && nextChar == 0:
		// [ "] might be [ "<code>foo...]
		*isOpen = true
	case ispunct(previousChar) && nextChar == 0:
		// [!"] hmm... could be [Run!"] or [("<code>...]
		*isOpen = false
	case /* isnormal(previousChar) && */ nextChar == 0:
		// [a"] is probably a close
		*isOpen = false
	case previousChar == 0 && isspace(nextChar):
		// [" ] might be [...foo</code>" ]
		*isOpen = false
	case isspace(previousChar) && isspace(nextChar):
		// [ " ] context is not any help here, so toggle
		*isOpen = !*isOpen
	case ispunct(previousChar) && isspace(nextChar):
		// [!" ] is probably a close
		*isOpen = false
	case /* isnormal(previousChar) && */ isspace(nextChar):
		// [a" ] this is one of the easy cases
		*isOpen = false
	case previousChar == 0 && ispunct(nextChar):
		// ["!] hmm... could be ["$1.95] or [</code>"!...]
		*isOpen = false
	case isspace(previousChar) && ispunct(nextChar):
		// [ "!] looks more like [ "$1.95]
		*isOpen = true
	case ispunct(previousChar) && ispunct(nextChar):
		// [!"!] context is not any help here, so toggle
		*isOpen = !*isOpen
	case /* isnormal(previousChar) && */ ispunct(nextChar):
		// [a"!] is probably a close
		*isOpen = false
	case previousChar == 0 /* && isnormal(nextChar) */ :
		// ["a] is probably an open
		*isOpen = true
	case isspace(previousChar) /* && isnormal(nextChar) */ :
		// [ "a] this is one of the easy cases
		*isOpen = true
	case ispunct(previousChar) /* && isnormal(nextChar) */ :
		// [!"a] is probably an open
		*isOpen = true
	default:
		// [a'b] maybe a contraction?
		*isOpen = false
	}

	// Note that with the limited lookahead, this non-breaking
	// space will also be appended to single double quotes.
	if addNBSP && !*isOpen {
		out.WriteString("&nbsp;")
	}

	out.WriteByte('&')
	if *isOpen {
		out.WriteByte('l')
	} else {
		out.WriteByte('r')
	}
	out.WriteByte(quote)
	out.WriteString("quo;")

	if addNBSP && *isOpen {
		out.WriteString("&nbsp;")
	}

	return true
}

func (r *SPRenderer) smartSingleQuote(out *bytes.Buffer, previousChar byte, text []byte) int {
	if len(text) >= 2 {
		t1 := tolower(text[1])

		if t1 == '\'' {
			nextChar := byte(0)
			if len(text) >= 3 {
				nextChar = text[2]
			}
			if smartQuoteHelper(out, previousChar, nextChar, 'd', &r.inDoubleQuote, false) {
				return 1
			}
		}

		if (t1 == 's' || t1 == 't' || t1 == 'm' || t1 == 'd') && (len(text) < 3 || wordBoundary(text[2])) {
			out.WriteString("&rsquo;")
			return 0
		}

		if len(text) >= 3 {
			t2 := tolower(text[2])

			if ((t1 == 'r' && t2 == 'e') || (t1 == 'l' && t2 == 'l') || (t1 == 'v' && t2 == 'e')) &&
				(len(text) < 4 || wordBoundary(text[3])) {
				out.WriteString("&rsquo;")
				return 0
			}
		}
	}

	nextChar := byte(0)
	if len(text) > 1 {
		nextChar = text[1]
	}
	if smartQuoteHelper(out, previousChar, nextChar, 's', &r.inSingleQuote, false) {
		return 0
	}

	out.WriteByte(text[0])
	return 0
}

func (r *SPRenderer) smartParens(out *bytes.Buffer, previousChar byte, text []byte) int {
	if len(text) >= 3 {
		t1 := tolower(text[1])
		t2 := tolower(text[2])

		if t1 == 'c' && t2 == ')' {
			out.WriteString("&copy;")
			return 2
		}

		if t1 == 'r' && t2 == ')' {
			out.WriteString("&reg;")
			return 2
		}

		if len(text) >= 4 && t1 == 't' && t2 == 'm' && text[3] == ')' {
			out.WriteString("&trade;")
			return 3
		}
	}

	out.WriteByte(text[0])
	return 0
}

func (r *SPRenderer) smartDash(out *bytes.Buffer, previousChar byte, text []byte) int {
	if len(text) >= 2 {
		if text[1] == '-' {
			out.WriteString("&mdash;")
			return 1
		}

		if wordBoundary(previousChar) && wordBoundary(text[1]) {
			out.WriteString("&ndash;")
			return 0
		}
	}

	out.WriteByte(text[0])
	return 0
}

func (r *SPRenderer) smartDashLatex(out *bytes.Buffer, previousChar byte, text []byte) int {
	if len(text) >= 3 && text[1] == '-' && text[2] == '-' {
		out.WriteString("&mdash;")
		return 2
	}
	if len(text) >= 2 && text[1] == '-' {
		out.WriteString("&ndash;")
		return 1
	}

	out.WriteByte(text[0])
	return 0
}

func (r *SPRenderer) smartAmpVariant(out *bytes.Buffer, previousChar byte, text []byte, quote byte, addNBSP bool) int {
	if bytes.HasPrefix(text, []byte("&quot;")) {
		nextChar := byte(0)
		if len(text) >= 7 {
			nextChar = text[6]
		}
		if smartQuoteHelper(out, previousChar, nextChar, quote, &r.inDoubleQuote, addNBSP) {
			return 5
		}
	}

	if bytes.HasPrefix(text, []byte("&#0;")) {
		return 3
	}

	out.WriteByte('&')
	return 0
}

func (r *SPRenderer) smartAmp(angledQuotes, addNBSP bool) func(*bytes.Buffer, byte, []byte) int {
	var quote byte = 'd'
	if angledQuotes {
		quote = 'a'
	}

	return func(out *bytes.Buffer, previousChar byte, text []byte) int {
		return r.smartAmpVariant(out, previousChar, text, quote, addNBSP)
	}
}

func (r *SPRenderer) smartPeriod(out *bytes.Buffer, previousChar byte, text []byte) int {
	if len(text) >= 3 && text[1] == '.' && text[2] == '.' {
		out.WriteString("&hellip;")
		return 2
	}

	if len(text) >= 5 && text[1] == ' ' && text[2] == '.' && text[3] == ' ' && text[4] == '.' {
		out.WriteString("&hellip;")
		return 4
	}

	out.WriteByte(text[0])
	return 0
}

func (r *SPRenderer) smartBacktick(out *bytes.Buffer, previousChar byte, text []byte) int {
	if len(text) >= 2 && text[1] == '`' {
		nextChar := byte(0)
		if len(text) >= 3 {
			nextChar = text[2]
		}
		if smartQuoteHelper(out, previousChar, nextChar, 'd', &r.inDoubleQuote, false) {
			return 1
		}
	}

	out.WriteByte(text[0])
	return 0
}

func (r *SPRenderer) smartNumberGeneric(out *bytes.Buffer, previousChar byte, text []byte) int {
	if wordBoundary(previousChar) && previousChar != '/' && len(text) >= 3 {
		// is it of the form digits/digits(word boundary)?, i.e., \d+/\d+\b
		// note: check for regular slash (/) or fraction slash (⁄, 0x2044, or 0xe2 81 84 in utf-8)
		//       and avoid changing dates like 1/23/2005 into fractions.
		numEnd := 0
		for len(text) > numEnd && isdigit(text[numEnd]) {
			numEnd++
		}
		if numEnd == 0 {
			out.WriteByte(text[0])
			return 0
		}
		denStart := numEnd + 1
		if len(text) > numEnd+3 && text[numEnd] == 0xe2 && text[numEnd+1] == 0x81 && text[numEnd+2] == 0x84 {
			denStart = numEnd + 3
		} else if len(text) < numEnd+2 || text[numEnd] != '/' {
			out.WriteByte(text[0])
			return 0
		}
		denEnd := denStart
		for len(text) > denEnd && isdigit(text[denEnd]) {
			denEnd++
		}
		if denEnd == denStart {
			out.WriteByte(text[0])
			return 0
		}
		if len(text) == denEnd || wordBoundary(text[denEnd]) && text[denEnd] != '/' {
			out.WriteString("<sup>")
			out.Write(text[:numEnd])
			out.WriteString("</sup>&frasl;<sub>")
			out.Write(text[denStart:denEnd])
			out.WriteString("</sub>")
			return denEnd - 1
		}
	}

	out.WriteByte(text[0])
	return 0
}

func (r *SPRenderer) smartNumber(out *bytes.Buffer, previousChar byte, text []byte) int {
	if wordBoundary(previousChar) && previousChar != '/' && len(text) >= 3 {
		if text[0] == '1' && text[1] == '/' && text[2] == '2' {
			if len(text) < 4 || wordBoundary(text[3]) && text[3] != '/' {
				out.WriteString("&frac12;")
				return 2
			}
		}

		if text[0] == '1' && text[1] == '/' && text[2] == '4' {
			if len(text) < 4 || wordBoundary(text[3]) && text[3] != '/' || (len(text) >= 5 && tolower(text[3]) == 't' && tolower(text[4]) == 'h') {
				out.WriteString("&frac14;")
				return 2
			}
		}

		if text[0] == '3' && text[1] == '/' && text[2] == '4' {
			if len(text) < 4 || wordBoundary(text[3]) && text[3] != '/' || (len(text) >= 6 && tolower(text[3]) == 't' && tolower(text[4]) == 'h' && tolower(text[5]) == 's') {
				out.WriteString("&frac34;")
				return 2
			}
		}
	}

	out.WriteByte(text[0])
	return 0
}

func (r *SPRenderer) smartDoubleQuoteVariant(out *bytes.Buffer, previousChar byte, text []byte, quote byte) int {
	nextChar := byte(0)
	if len(text) > 1 {
		nextChar = text[1]
	}
	if !smartQuoteHelper(out, previousChar, nextChar, quote, &r.inDoubleQuote, false) {
		out.WriteString("&quot;")
	}

	return 0
}

func (r *SPRenderer) smartDoubleQuote(out *bytes.Buffer, previousChar byte, text []byte) int {
	return r.smartDoubleQuoteVariant(out, previousChar, text, 'd')
}

func (r *SPRenderer) smartAngledDoubleQuote(out *bytes.Buffer, previousChar byte, text []byte) int {
	return r.smartDoubleQuoteVariant(out, previousChar, text, 'a')
}

func (r *SPRenderer) smartLeftAngle(out *bytes.Buffer, previousChar byte, text []byte) int {
	i := 0

	for i < len(text) && text[i] != '>' {
		i++
	}

	out.Write(text[:i+1])
	return i
}

type smartCallback func(out *bytes.Buffer, previousChar byte, text []byte) int

// NewSmartypantsRenderer constructs a Smartypants renderer object.
func NewSmartypantsRenderer(flags HTMLFlags) *SPRenderer {
	var (
		r SPRenderer

		smartAmpAngled      = r.smartAmp(true, false)
		smartAmpAngledNBSP  = r.smartAmp(true, true)
		smartAmpRegular     = r.smartAmp(false, false)
		smartAmpRegularNBSP = r.smartAmp(false, true)

		addNBSP = flags&SmartypantsQuotesNBSP != 0
	)

	if flags&SmartypantsAngledQuotes == 0 {
		r.callbacks['"'] = r.smartDoubleQuote
		if !addNBSP {
			r.callbacks['&'] = smartAmpRegular
		} else {
			r.callbacks['&'] = smartAmpRegularNBSP
		}
	} else {
		r.callbacks['"'] = r.smartAngledDoubleQuote
		if !addNBSP {
			r.callbacks['&'] = smartAmpAngled
		} else {
			r.callbacks['&'] = smartAmpAngledNBSP
		}
	}
	r.callbacks['\''] = r.smartSingleQuote
	r.callbacks['('] = r.smartParens
	if flags&SmartypantsDashes != 0 {
		if flags&SmartypantsLatexDashes == 0 {
			r.callbacks['-'] = r.smartDash
		} else {
			r.callbacks['-'] = r.smartDashLatex
		}
	}
	r.callbacks['.'] = r.smartPeriod
	if flags&SmartypantsFractions == 0 {
		r.callbacks['1'] = r.smartNumber
		r.callbacks['3'] = r.smartNumber
	} else {
		for ch := '1'; ch <= '9'; ch++ {
			r.callbacks[ch] = r.smartNumberGeneric
		}
	}
	r.callbacks['<'] = r.smartLeftAngle
	r.callbacks['`'] = r.smartBacktick
	return &r
}

// Process is the entry point of the Smartypants renderer.
func (r *SPRenderer) Process(w io.Writer, text []byte) {
	mark := 0
	for i := 0; i < len(text); i++ {
		if action := r.callbacks[text[i]]; action != nil {
			if i > mark {
				w.Write(text[mark:i])
			}
			previousChar := byte(0)
			if i > 0 {
				previousChar = text[i-1]
			}
			var tmp bytes.Buffer
			i += action(&tmp, previousChar, text[i:])
			w.Write(tmp.Bytes())
			mark = i + 1
		}
	}
	if mark < len(text) {
		w.Write(text[mark:])
	}
}
07070100000A82000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/vendor/github.com/samber  07070100000A83000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003000000000elemental-cli-0.3.1/vendor/github.com/samber/lo   07070100000A84000081A4000000000000000000000001645E367C000002F5000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/samber/lo/.gitignore    
# Created by https://www.toptal.com/developers/gitignore/api/go
# Edit at https://www.toptal.com/developers/gitignore?templates=go

### Go ###
# If you prefer the allow list template instead of the deny list, see community template:
# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore
#
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib

# Test binary, built with `go test -c`
*.test

# Output of the go coverage tool, specifically when used with LiteIDE
*.out

# Dependency directories (remove the comment below to include it)
# vendor/

# Go workspace file
go.work

### Go Patch ###
/vendor/
/Godeps/

# End of https://www.toptal.com/developers/gitignore/api/go

cover.out
cover.html
.vscode

.idea/
   07070100000A85000081A4000000000000000000000001645E367C00000061000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/samber/lo/.travis.yml   language: go
before_install:
  - go mod download
  - make tools
go:
  - "1.18"
script: make test
   07070100000A86000081A4000000000000000000000001645E367C00001553000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/samber/lo/CHANGELOG.md  # Changelog

@samber: I sometimes forget to update this file. Ping me on [Twitter](https://twitter.com/samuelberthe) or open an issue in case of error. We need to keep a clear changelog for easier lib upgrade.

## 1.37.0 (2022-12-15)

Adding:
- lo.PartialX
- lo.Transaction

Improvement:
- lo.Associate / lo.SliceToMap: faster memory allocation

Chore:
- Remove *_test.go files from releases, in order to cleanup dev dependencies

## 1.36.0 (2022-11-28)

Adding:
- lo.AttemptWhile
- lo.AttemptWhileWithDelay

## 1.35.0 (2022-11-15)

Adding:
- lo.RandomString
- lo.BufferWithTimeout (alias to lo.BatchWithTimeout)
- lo.Buffer (alias to lo.Batch)

Change:
- lo.Slice: avoid panic caused by out-of-bounds

Deprecation:
- lo.BatchWithTimeout
- lo.Batch

## 1.34.0 (2022-11-12)

Improving:
- lo.Union: faster and can receive more than 2 lists

Adding:
- lo.FanIn (alias to lo.ChannelMerge)
- lo.FanOut

Deprecation:
- lo.ChannelMerge

## 1.33.0 (2022-10-14)

Adding:
- lo.ChannelMerge

Improving:
- helpers with callbacks/predicates/iteratee now have named arguments, for easier autocompletion

## 1.32.0 (2022-10-10)

Adding:

- lo.ChannelToSlice
- lo.CountValues
- lo.CountValuesBy
- lo.MapEntries
- lo.Sum
- lo.Interleave
- TupleX.Unpack()

## 1.31.0 (2022-10-06)

Adding:

- lo.SliceToChannel
- lo.Generator
- lo.Batch
- lo.BatchWithTimeout

## 1.30.1 (2022-10-06)

Fix:

- lo.Try1: remove generic type
- lo.Validate: format error properly

## 1.30.0 (2022-10-04)

Adding:

- lo.TernaryF
- lo.Validate

## 1.29.0 (2022-10-02)

Adding:

- lo.ErrorAs
- lo.TryOr
- lo.TryOrX

## 1.28.0 (2022-09-05)

Adding:

- lo.ChannelDispatcher with 6 dispatching strategies:
  - lo.DispatchingStrategyRoundRobin
  - lo.DispatchingStrategyRandom
  - lo.DispatchingStrategyWeightedRandom
  - lo.DispatchingStrategyFirst
  - lo.DispatchingStrategyLeast
  - lo.DispatchingStrategyMost

## 1.27.1 (2022-08-15)

Bugfix:

- Removed comparable constraint for lo.FindKeyBy

## 1.27.0 (2022-07-29)

Breaking:

- Change of MapToSlice prototype: `MapToSlice[K comparable, V any, R any](in map[K]V, iteratee func(V, K) R) []R` -> `MapToSlice[K comparable, V any, R any](in map[K]V, iteratee func(K, V) R) []R`

Added:

- lo.ChunkString
- lo.SliceToMap (alias to lo.Associate)

## 1.26.0 (2022-07-24)

Adding:

- lo.Associate
- lo.ReduceRight
- lo.FromPtrOr
- lo.MapToSlice
- lo.IsSorted
- lo.IsSortedByKey

## 1.25.0 (2022-07-04)

Adding:

- lo.FindUniques
- lo.FindUniquesBy
- lo.FindDuplicates
- lo.FindDuplicatesBy
- lo.IsNotEmpty

## 1.24.0 (2022-07-04)

Adding:

- lo.Without
- lo.WithoutEmpty

## 1.23.0 (2022-07-04)

Adding:

- lo.FindKey
- lo.FindKeyBy

## 1.22.0 (2022-07-04)

Adding:

- lo.Slice
- lo.FromPtr
- lo.IsEmpty
- lo.Compact
- lo.ToPairs: alias to lo.Entries
- lo.FromPairs: alias to lo.FromEntries
- lo.Partial

Change:

- lo.Must + lo.MustX: add context to panic message

Fix:

- lo.Nth: out of bound exception (#137)

## 1.21.0 (2022-05-10)

Adding:

- lo.ToAnySlice
- lo.FromAnySlice

## 1.20.0 (2022-05-02)

Adding:

- lo.Synchronize
- lo.SumBy

Change:
- Removed generic type definition for lo.Try0: `lo.Try0[T]()` -> `lo.Try0()`

## 1.19.0 (2022-04-30)

Adding:

- lo.RepeatBy
- lo.Subset
- lo.Replace
- lo.ReplaceAll
- lo.Substring
- lo.RuneLength

## 1.18.0 (2022-04-28)

Adding:

- lo.SomeBy
- lo.EveryBy
- lo.None
- lo.NoneBy

## 1.17.0 (2022-04-27)

Adding:

- lo.Unpack2 -> lo.Unpack3
- lo.Async0 -> lo.Async6

## 1.16.0 (2022-04-26)

Adding:

- lo.AttemptWithDelay

## 1.15.0 (2022-04-22)

Improvement:

- lo.Must: error or boolean value

## 1.14.0 (2022-04-21)

Adding:

- lo.Coalesce

## 1.13.0 (2022-04-14)

Adding:

- PickBy
- PickByKeys
- PickByValues
- OmitBy
- OmitByKeys
- OmitByValues
- Clamp
- MapKeys
- Invert
- IfF + ElseIfF + ElseF
- T0() + T1() + T2() + T3() + ...

## 1.12.0 (2022-04-12)

Adding:

- Must
- Must{0-6}
- FindOrElse
- Async
- MinBy
- MaxBy
- Count
- CountBy
- FindIndexOf
- FindLastIndexOf
- FilterMap

## 1.11.0 (2022-03-11)

Adding:

- Try
- Try{0-6}
- TryWitchValue
- TryCatch
- TryCatchWitchValue
- Debounce
- Reject

## 1.10.0 (2022-03-11)

Adding:

- Range
- RangeFrom
- RangeWithSteps

## 1.9.0 (2022-03-10)

Added

- Drop
- DropRight
- DropWhile
- DropRightWhile

## 1.8.0 (2022-03-10)

Adding Union.

## 1.7.0 (2022-03-09)

Adding ContainBy

Adding MapValues

Adding FlatMap

## 1.6.0 (2022-03-07)

Fixed PartitionBy.

Adding Sample

Adding Samples

## 1.5.0 (2022-03-07)

Adding Times

Adding Attempt

Adding Repeat

## 1.4.0 (2022-03-07)

- adding tuple types (2->9)
- adding Zip + Unzip
- adding lo.PartitionBy + lop.PartitionBy
- adding lop.GroupBy
- fixing Nth

## 1.3.0 (2022-03-03)

Last and Nth return errors

## 1.2.0 (2022-03-03)

Adding `lop.Map` and `lop.ForEach`.

## 1.1.0 (2022-03-03)

Adding `i int` param to `lo.Map()`, `lo.Filter()`, `lo.ForEach()` and `lo.Reduce()` predicates.

## 1.0.0 (2022-03-02)

*Initial release*

Supported helpers for slices:

- Filter
- Map
- Reduce
- ForEach
- Uniq
- UniqBy
- GroupBy
- Chunk
- Flatten
- Shuffle
- Reverse
- Fill
- ToMap

Supported helpers for maps:

- Keys
- Values
- Entries
- FromEntries
- Assign (maps merge)

Supported intersection helpers:

- Contains
- Every
- Some
- Intersect
- Difference

Supported search helpers:

- IndexOf
- LastIndexOf
- Find
- Min
- Max
- Last
- Nth

Other functional programming helpers:

- Ternary (1 line if/else statement)
- If / ElseIf / Else
- Switch / Case / Default
- ToPtr
- ToSlicePtr

Constraints:

- Clonable
 07070100000A87000081A4000000000000000000000001645E367C0000005F000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/samber/lo/Dockerfile    
FROM golang:1.18

WORKDIR /go/src/github.com/samber/lo

COPY Makefile go.* ./

RUN make tools
 07070100000A88000081A4000000000000000000000001645E367C0000042E000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/samber/lo/LICENSE   MIT License

Copyright (c) 2022 Samuel Berthe

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
  07070100000A89000081A4000000000000000000000001645E367C00000456000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/samber/lo/Makefile  
BIN=go

build:
	${BIN} build -v ./...

test:
	go test -race -v ./...
watch-test:
	reflex -t 50ms -s -- sh -c 'gotest -race -v ./...'

bench:
	go test -benchmem -count 3 -bench ./...
watch-bench:
	reflex -t 50ms -s -- sh -c 'go test -benchmem -count 3 -bench ./...'

coverage:
	${BIN} test -v -coverprofile=cover.out -covermode=atomic .
	${BIN} tool cover -html=cover.out -o cover.html

# tools
tools:
	${BIN} install github.com/cespare/reflex@latest
	${BIN} install github.com/rakyll/gotest@latest
	${BIN} install github.com/psampaz/go-mod-outdated@latest
	${BIN} install github.com/jondot/goweight@latest
	${BIN} install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
	${BIN} get -t -u golang.org/x/tools/cmd/cover
	${BIN} install github.com/sonatype-nexus-community/nancy@latest
	go mod tidy

lint:
	golangci-lint run --timeout 60s --max-same-issues 50 ./...
lint-fix:
	golangci-lint run --timeout 60s --max-same-issues 50 --fix ./...

audit: tools
	${BIN} list -json -m all | nancy sleuth

outdated: tools
	${BIN} list -u -m -json all | go-mod-outdated -update -direct

weight: tools
	goweight
  07070100000A8A000081A4000000000000000000000001645E367C0000F70A000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/samber/lo/README.md # lo

[![tag](https://img.shields.io/github/tag/samber/lo.svg)](https://github.com/samber/lo/releases)
![Go Version](https://img.shields.io/badge/Go-%3E%3D%201.18-%23007d9c)
[![GoDoc](https://godoc.org/github.com/samber/lo?status.svg)](https://pkg.go.dev/github.com/samber/lo)
![Build Status](https://github.com/samber/lo/actions/workflows/go.yml/badge.svg)
[![Go report](https://goreportcard.com/badge/github.com/samber/lo)](https://goreportcard.com/report/github.com/samber/lo)
[![Coverage](https://img.shields.io/codecov/c/github/samber/lo)](https://codecov.io/gh/samber/lo)
[![Contributors](https://img.shields.io/github/contributors/samber/lo)](https://github.com/samber/lo/graphs/contributors)
[![License](https://img.shields.io/github/license/samber/lo)](./LICENSE)

✨ **`samber/lo` is a Lodash-style Go library based on Go 1.18+ Generics.**

This project started as an experiment with the new generics implementation. It may look like [Lodash](https://github.com/lodash/lodash) in some aspects. I used to code with the fantastic ["go-funk"](https://github.com/thoas/go-funk) package, but "go-funk" uses reflection and therefore is not typesafe.

As expected, benchmarks demonstrate that generics are much faster than implementations based on the "reflect" package. Benchmarks also show similar performance gains compared to pure `for` loops. [See below](#-benchmark).

In the future, 5 to 10 helpers will overlap with those coming into the Go standard library (under package names `slices` and `maps`). I feel this library is legitimate and offers many more valuable abstractions.

**See also:**

- [samber/do](https://github.com/samber/do): A dependency injection toolkit based on Go 1.18+ Generics
- [samber/mo](https://github.com/samber/mo): Monads based on Go 1.18+ Generics (Option, Result, Either...)

**Why this name?**

I wanted a **short name**, similar to "Lodash" and no Go package currently uses this name.

![](img/logo-full.png)

## 🚀 Install

```sh
go get github.com/samber/lo@v1
```

This library is v1 and follows SemVer strictly.

No breaking changes will be made to exported APIs before v2.0.0.

## 💡 Usage

You can import `lo` using:

```go
import (
    "github.com/samber/lo"
    lop "github.com/samber/lo/parallel"
)
```

Then use one of the helpers below:

```go
names := lo.Uniq[string]([]string{"Samuel", "John", "Samuel"})
// []string{"Samuel", "John"}
```

Most of the time, the compiler will be able to infer the type so that you can call: `lo.Uniq([]string{...})`.

### Tips for lazy developers

I cannot recommend it, but in case you are too lazy for repeating `lo.` everywhere, you can import the entire library into the namespace.

```go
import (
    . "github.com/samber/lo"
)
```

I take no responsibility on this junk. 😁 💩

## 🤠 Spec

GoDoc: [https://godoc.org/github.com/samber/lo](https://godoc.org/github.com/samber/lo)

Supported helpers for slices:

- [Filter](#filter)
- [Map](#map)
- [FilterMap](#filtermap)
- [FlatMap](#flatmap)
- [Reduce](#reduce)
- [ReduceRight](#reduceright)
- [ForEach](#foreach)
- [Times](#times)
- [Uniq](#uniq)
- [UniqBy](#uniqby)
- [GroupBy](#groupby)
- [Chunk](#chunk)
- [PartitionBy](#partitionby)
- [Flatten](#flatten)
- [Interleave](#interleave)
- [Shuffle](#shuffle)
- [Reverse](#reverse)
- [Fill](#fill)
- [Repeat](#repeat)
- [RepeatBy](#repeatby)
- [KeyBy](#keyby)
- [Associate / SliceToMap](#associate-alias-slicetomap)
- [Drop](#drop)
- [DropRight](#dropright)
- [DropWhile](#dropwhile)
- [DropRightWhile](#droprightwhile)
- [Reject](#reject)
- [Count](#count)
- [CountBy](#countby)
- [CountValues](#countvalues)
- [CountValuesBy](#countvaluesby)
- [Subset](#subset)
- [Slice](#slice)
- [Replace](#replace)
- [ReplaceAll](#replaceall)
- [Compact](#compact)
- [IsSorted](#issorted)
- [IsSortedByKey](#issortedbykey)

Supported helpers for maps:

- [Keys](#keys)
- [Values](#values)
- [PickBy](#pickby)
- [PickByKeys](#pickbykeys)
- [PickByValues](#pickbyvalues)
- [OmitBy](#omitby)
- [OmitByKeys](#omitbykeys)
- [OmitByValues](#omitbyvalues)
- [Entries / ToPairs](#entries-alias-topairs)
- [FromEntries / FromPairs](#fromentries-alias-frompairs)
- [Invert](#invert)
- [Assign (merge of maps)](#assign)
- [MapKeys](#mapkeys)
- [MapValues](#mapvalues)
- [MapEntries](#mapentries)
- [MapToSlice](#maptoslice)

Supported math helpers:

- [Range / RangeFrom / RangeWithSteps](#range--rangefrom--rangewithsteps)
- [Clamp](#clamp)
- [Sum](#sum)
- [SumBy](#sumby)

Supported helpers for strings:

- [RandomString](#randomstring)
- [Substring](#substring)
- [ChunkString](#chunkstring)
- [RuneLength](#runelength)

Supported helpers for tuples:

- [T2 -> T9](#t2---t9)
- [Unpack2 -> Unpack9](#unpack2---unpack9)
- [Zip2 -> Zip9](#zip2---zip9)
- [Unzip2 -> Unzip9](#unzip2---unzip9)

Supported helpers for channels:

- [ChannelDispatcher](#channeldispatcher)
- [SliceToChannel](#slicetochannel)
- [Generator](#generator)
- [Buffer](#buffer)
- [BufferWithTimeout](#bufferwithtimeout)
- [FanIn](#fanin)
- [FanOut](#fanout)

Supported intersection helpers:

- [Contains](#contains)
- [ContainsBy](#containsby)
- [Every](#every)
- [EveryBy](#everyby)
- [Some](#some)
- [SomeBy](#someby)
- [None](#none)
- [NoneBy](#noneby)
- [Intersect](#intersect)
- [Difference](#difference)
- [Union](#union)
- [Without](#without)
- [WithoutEmpty](#withoutempty)

Supported search helpers:

- [IndexOf](#indexof)
- [LastIndexOf](#lastindexof)
- [Find](#find)
- [FindIndexOf](#findindexof)
- [FindLastIndexOf](#findlastindexof)
- [FindKey](#findkey)
- [FindKeyBy](#findkeyby)
- [FindUniques](#finduniques)
- [FindUniquesBy](#finduniquesby)
- [FindDuplicates](#findduplicates)
- [FindDuplicatesBy](#findduplicatesby)
- [Min](#min)
- [MinBy](#minby)
- [Max](#max)
- [MaxBy](#maxby)
- [Last](#last)
- [Nth](#nth)
- [Sample](#sample)
- [Samples](#samples)

Conditional helpers:

- [Ternary](#ternary)
- [TernaryF](#ternaryf)
- [If / ElseIf / Else](#if--elseif--else)
- [Switch / Case / Default](#switch--case--default)

Type manipulation helpers:

- [ToPtr](#toptr)
- [FromPtr](#fromptr)
- [FromPtrOr](#fromptror)
- [ToSlicePtr](#tosliceptr)
- [ToAnySlice](#toanyslice)
- [FromAnySlice](#fromanyslice)
- [Empty](#empty)
- [IsEmpty](#isempty)
- [IsNotEmpty](#isnotempty)
- [Coalesce](#coalesce)

Function helpers:

- [Partial](#partial)
- [Partial2 -> Partial5](#partial2---partial5)

Concurrency helpers:

- [Attempt](#attempt)
- [AttemptWhile](#attemptwhile)
- [AttemptWithDelay](#attemptwithdelay)
- [AttemptWhileWithDelay](#attemptwhilewithdelay)
- [Debounce](#debounce)
- [Synchronize](#synchronize)
- [Async](#async)
- [Transaction](#transaction)

Error handling:

- [Validate](#validate)
- [Must](#must)
- [Try](#try)
- [Try1 -> Try6](#try0-6)
- [TryOr](#tryor)
- [TryOr1 -> TryOr6](#tryor0-6)
- [TryCatch](#trycatch)
- [TryWithErrorValue](#trywitherrorvalue)
- [TryCatchWithErrorValue](#trycatchwitherrorvalue)
- [ErrorsAs](#errorsas)

Constraints:

- Clonable

### Filter

Iterates over a collection and returns an array of all the elements the predicate function returns `true` for.

```go
even := lo.Filter[int]([]int{1, 2, 3, 4}, func(x int, index int) bool {
    return x%2 == 0
})
// []int{2, 4}
```

[[play](https://go.dev/play/p/Apjg3WeSi7K)]

### Map

Manipulates a slice of one type and transforms it into a slice of another type:

```go
import "github.com/samber/lo"

lo.Map[int64, string]([]int64{1, 2, 3, 4}, func(x int64, index int) string {
    return strconv.FormatInt(x, 10)
})
// []string{"1", "2", "3", "4"}
```

[[play](https://go.dev/play/p/OkPcYAhBo0D)]

Parallel processing: like `lo.Map()`, but the mapper function is called in a goroutine. Results are returned in the same order.

```go
import lop "github.com/samber/lo/parallel"

lop.Map[int64, string]([]int64{1, 2, 3, 4}, func(x int64, _ int) string {
    return strconv.FormatInt(x, 10)
})
// []string{"1", "2", "3", "4"}
```

### FilterMap

Returns a slice which obtained after both filtering and mapping using the given callback function.

The callback function should return two values: the result of the mapping operation and whether the result element should be included or not.

```go
matching := lo.FilterMap[string, string]([]string{"cpu", "gpu", "mouse", "keyboard"}, func(x string, _ int) (string, bool) {
    if strings.HasSuffix(x, "pu") {
        return "xpu", true
    }
    return "", false
})
// []string{"xpu", "xpu"}
```

[[play](https://go.dev/play/p/-AuYXfy7opz)]

### FlatMap

Manipulates a slice and transforms and flattens it to a slice of another type.

```go
lo.FlatMap[int, string]([]int{0, 1, 2}, func(x int, _ int) []string {
	return []string{
		strconv.FormatInt(x, 10),
		strconv.FormatInt(x, 10),
	}
})
// []string{"0", "0", "1", "1", "2", "2"}
```

[[play](https://go.dev/play/p/YSoYmQTA8-U)]

### Reduce

Reduces a collection to a single value. The value is calculated by accumulating the result of running each element in the collection through an accumulator function. Each successive invocation is supplied with the return value returned by the previous call.

```go
sum := lo.Reduce[int, int]([]int{1, 2, 3, 4}, func(agg int, item int, _ int) int {
    return agg + item
}, 0)
// 10
```

[[play](https://go.dev/play/p/R4UHXZNaaUG)]

### ReduceRight

Like `lo.Reduce` except that it iterates over elements of collection from right to left.

```go
result := lo.ReduceRight[[]int, []int]([][]int{{0, 1}, {2, 3}, {4, 5}}, func(agg []int, item []int, _ int) []int {
	  return append(agg, item...)
}, []int{})
// []int{4, 5, 2, 3, 0, 1}
```

[[play](https://go.dev/play/p/Fq3W70l7wXF)]

### ForEach

Iterates over elements of a collection and invokes the function over each element.

```go
import "github.com/samber/lo"

lo.ForEach[string]([]string{"hello", "world"}, func(x string, _ int) {
    println(x)
})
// prints "hello\nworld\n"
```

[[play](https://go.dev/play/p/oofyiUPRf8t)]

Parallel processing: like `lo.ForEach()`, but the callback is called as a goroutine.

```go
import lop "github.com/samber/lo/parallel"

lop.ForEach[string]([]string{"hello", "world"}, func(x string, _ int) {
    println(x)
})
// prints "hello\nworld\n" or "world\nhello\n"
```

### Times

Times invokes the iteratee n times, returning an array of the results of each invocation. The iteratee is invoked with index as argument.

```go
import "github.com/samber/lo"

lo.Times[string](3, func(i int) string {
    return strconv.FormatInt(int64(i), 10)
})
// []string{"0", "1", "2"}
```

[[play](https://go.dev/play/p/vgQj3Glr6lT)]

Parallel processing: like `lo.Times()`, but callback is called in goroutine.

```go
import lop "github.com/samber/lo/parallel"

lop.Times[string](3, func(i int) string {
    return strconv.FormatInt(int64(i), 10)
})
// []string{"0", "1", "2"}
```

### Uniq

Returns a duplicate-free version of an array, in which only the first occurrence of each element is kept. The order of result values is determined by the order they occur in the array.

```go
uniqValues := lo.Uniq[int]([]int{1, 2, 2, 1})
// []int{1, 2}
```

[[play](https://go.dev/play/p/DTzbeXZ6iEN)]

### UniqBy

Returns a duplicate-free version of an array, in which only the first occurrence of each element is kept. The order of result values is determined by the order they occur in the array. It accepts `iteratee` which is invoked for each element in array to generate the criterion by which uniqueness is computed.

```go
uniqValues := lo.UniqBy[int, int]([]int{0, 1, 2, 3, 4, 5}, func(i int) int {
    return i%3
})
// []int{0, 1, 2}
```

[[play](https://go.dev/play/p/g42Z3QSb53u)]

### GroupBy

Returns an object composed of keys generated from the results of running each element of collection through iteratee.

```go
import lo "github.com/samber/lo"

groups := lo.GroupBy[int, int]([]int{0, 1, 2, 3, 4, 5}, func(i int) int {
    return i%3
})
// map[int][]int{0: []int{0, 3}, 1: []int{1, 4}, 2: []int{2, 5}}
```

[[play](https://go.dev/play/p/XnQBd_v6brd)]

Parallel processing: like `lo.GroupBy()`, but callback is called in goroutine.

```go
import lop "github.com/samber/lo/parallel"

lop.GroupBy[int, int]([]int{0, 1, 2, 3, 4, 5}, func(i int) int {
    return i%3
})
// map[int][]int{0: []int{0, 3}, 1: []int{1, 4}, 2: []int{2, 5}}
```

### Chunk

Returns an array of elements split into groups the length of size. If array can't be split evenly, the final chunk will be the remaining elements.

```go
lo.Chunk[int]([]int{0, 1, 2, 3, 4, 5}, 2)
// [][]int{{0, 1}, {2, 3}, {4, 5}}

lo.Chunk[int]([]int{0, 1, 2, 3, 4, 5, 6}, 2)
// [][]int{{0, 1}, {2, 3}, {4, 5}, {6}}

lo.Chunk[int]([]int{}, 2)
// [][]int{}

lo.Chunk[int]([]int{0}, 2)
// [][]int{{0}}
```

[[play](https://go.dev/play/p/EeKl0AuTehH)]

### PartitionBy

Returns an array of elements split into groups. The order of grouped values is determined by the order they occur in collection. The grouping is generated from the results of running each element of collection through iteratee.

```go
import lo "github.com/samber/lo"

partitions := lo.PartitionBy[int, string]([]int{-2, -1, 0, 1, 2, 3, 4, 5}, func(x int) string {
    if x < 0 {
        return "negative"
    } else if x%2 == 0 {
        return "even"
    }
    return "odd"
})
// [][]int{{-2, -1}, {0, 2, 4}, {1, 3, 5}}
```

[[play](https://go.dev/play/p/NfQ_nGjkgXW)]

Parallel processing: like `lo.PartitionBy()`, but callback is called in goroutine. Results are returned in the same order.

```go
import lop "github.com/samber/lo/parallel"

partitions := lop.PartitionBy[int, string]([]int{-2, -1, 0, 1, 2, 3, 4, 5}, func(x int) string {
    if x < 0 {
        return "negative"
    } else if x%2 == 0 {
        return "even"
    }
    return "odd"
})
// [][]int{{-2, -1}, {0, 2, 4}, {1, 3, 5}}
```

### Flatten

Returns an array a single level deep.

```go
flat := lo.Flatten[int]([][]int{{0, 1}, {2, 3, 4, 5}})
// []int{0, 1, 2, 3, 4, 5}
```

[[play](https://go.dev/play/p/rbp9ORaMpjw)]

### Interleave

Round-robin alternating input slices and sequentially appending value at index into result.

```go
interleaved := lo.Interleave[int]([]int{1, 4, 7}, []int{2, 5, 8}, []int{3, 6, 9})
// []int{1, 2, 3, 4, 5, 6, 7, 8, 9}

interleaved := lo.Interleave[int]([]int{1}, []int{2, 5, 8}, []int{3, 6}, []int{4, 7, 9, 10})
// []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
```

[[play](https://go.dev/play/p/DDhlwrShbwe)]

### Shuffle

Returns an array of shuffled values. Uses the Fisher-Yates shuffle algorithm.

```go
randomOrder := lo.Shuffle[int]([]int{0, 1, 2, 3, 4, 5})
// []int{1, 4, 0, 3, 5, 2}
```

[[play](https://go.dev/play/p/Qp73bnTDnc7)]

### Reverse

Reverses array so that the first element becomes the last, the second element becomes the second to last, and so on.

```go
reverseOrder := lo.Reverse[int]([]int{0, 1, 2, 3, 4, 5})
// []int{5, 4, 3, 2, 1, 0}
```

[[play](https://go.dev/play/p/fhUMLvZ7vS6)]

### Fill

Fills elements of array with `initial` value.

```go
type foo struct {
	bar string
}

func (f foo) Clone() foo {
	return foo{f.bar}
}

initializedSlice := lo.Fill[foo]([]foo{foo{"a"}, foo{"a"}}, foo{"b"})
// []foo{foo{"b"}, foo{"b"}}
```

[[play](https://go.dev/play/p/VwR34GzqEub)]

### Repeat

Builds a slice with N copies of initial value.

```go
type foo struct {
	bar string
}

func (f foo) Clone() foo {
	return foo{f.bar}
}

slice := lo.Repeat[foo](2, foo{"a"})
// []foo{foo{"a"}, foo{"a"}}
```

[[play](https://go.dev/play/p/g3uHXbmc3b6)]

### RepeatBy

Builds a slice with values returned by N calls of callback.

```go
slice := lo.RepeatBy[string](0, func (i int) string {
    return strconv.FormatInt(int64(math.Pow(float64(i), 2)), 10)
})
// []string{}

slice := lo.RepeatBy[string](5, func(i int) string {
    return strconv.FormatInt(int64(math.Pow(float64(i), 2)), 10)
})
// []string{"0", "1", "4", "9", "16"}
```

[[play](https://go.dev/play/p/ozZLCtX_hNU)]

### KeyBy

Transforms a slice or an array of structs to a map based on a pivot callback.

```go
m := lo.KeyBy[int, string]([]string{"a", "aa", "aaa"}, func(str string) int {
    return len(str)
})
// map[int]string{1: "a", 2: "aa", 3: "aaa"}

type Character struct {
	dir  string
	code int
}
characters := []Character{
    {dir: "left", code: 97},
    {dir: "right", code: 100},
}
result := lo.KeyBy[string, Character](characters, func(char Character) string {
    return string(rune(char.code))
})
//map[a:{dir:left code:97} d:{dir:right code:100}]
```

[[play](https://go.dev/play/p/mdaClUAT-zZ)]

### Associate (alias: SliceToMap)

Returns a map containing key-value pairs provided by transform function applied to elements of the given slice.
If any of two pairs would have the same key the last one gets added to the map.

The order of keys in returned map is not specified and is not guaranteed to be the same from the original array.

```go
in := []*foo{{baz: "apple", bar: 1}, {baz: "banana", bar: 2}}

aMap := lo.Associate[*foo, string, int](in, func (f *foo) (string, int) {
	return f.baz, f.bar
})
// map[string][int]{ "apple":1, "banana":2 }
```

[[play](https://go.dev/play/p/WHa2CfMO3Lr)]

### Drop

Drops n elements from the beginning of a slice or array.

```go
l := lo.Drop[int]([]int{0, 1, 2, 3, 4, 5}, 2)
// []int{2, 3, 4, 5}
```

[[play](https://go.dev/play/p/JswS7vXRJP2)]

### DropRight

Drops n elements from the end of a slice or array.

```go
l := lo.DropRight[int]([]int{0, 1, 2, 3, 4, 5}, 2)
// []int{0, 1, 2, 3}
```

[[play](https://go.dev/play/p/GG0nXkSJJa3)]

### DropWhile

Drop elements from the beginning of a slice or array while the predicate returns true.

```go
l := lo.DropWhile[string]([]string{"a", "aa", "aaa", "aa", "aa"}, func(val string) bool {
	return len(val) <= 2
})
// []string{"aaa", "aa", "aa"}
```

[[play](https://go.dev/play/p/7gBPYw2IK16)]

### DropRightWhile

Drop elements from the end of a slice or array while the predicate returns true.

```go
l := lo.DropRightWhile[string]([]string{"a", "aa", "aaa", "aa", "aa"}, func(val string) bool {
	return len(val) <= 2
})
// []string{"a", "aa", "aaa"}
```

[[play](https://go.dev/play/p/3-n71oEC0Hz)]

### Reject

The opposite of Filter, this method returns the elements of collection that predicate does not return truthy for.

```go
odd := lo.Reject[int]([]int{1, 2, 3, 4}, func(x int, _ int) bool {
    return x%2 == 0
})
// []int{1, 3}
```

[[play](https://go.dev/play/p/YkLMODy1WEL)]

### Count

Counts the number of elements in the collection that compare equal to value.

```go
count := lo.Count[int]([]int{1, 5, 1}, 1)
// 2
```

[[play](https://go.dev/play/p/Y3FlK54yveC)]

### CountBy

Counts the number of elements in the collection for which predicate is true.

```go
count := lo.CountBy[int]([]int{1, 5, 1}, func(i int) bool {
    return i < 4
})
// 2
```

[[play](https://go.dev/play/p/ByQbNYQQi4X)]

### CountValues

Counts the number of each element in the collection.

```go
lo.CountValues([]int{})
// map[int]int{}

lo.CountValues([]int{1, 2})
// map[int]int{1: 1, 2: 1}

lo.CountValues([]int{1, 2, 2})
// map[int]int{1: 1, 2: 2}

lo.CountValues([]string{"foo", "bar", ""})
// map[string]int{"": 1, "foo": 1, "bar": 1}

lo.CountValues([]string{"foo", "bar", "bar"})
// map[string]int{"foo": 1, "bar": 2}
```

[[play](https://go.dev/play/p/-p-PyLT4dfy)]

### CountValuesBy

Counts the number of each element in the collection. It ss equivalent to chaining lo.Map and lo.CountValues.

```go
isEven := func(v int) bool {
    return v%2==0
}

lo.CountValuesBy([]int{}, isEven)
// map[bool]int{}

lo.CountValuesBy([]int{1, 2}, isEven)
// map[bool]int{false: 1, true: 1}

lo.CountValuesBy([]int{1, 2, 2}, isEven)
// map[bool]int{false: 1, true: 2}

length := func(v string) int {
    return len(v)
}

lo.CountValuesBy([]string{"foo", "bar", ""}, length)
// map[int]int{0: 1, 3: 2}

lo.CountValuesBy([]string{"foo", "bar", "bar"}, length)
// map[int]int{3: 3}
```

[[play](https://go.dev/play/p/2U0dG1SnOmS)]

### Subset

Returns a copy of a slice from `offset` up to `length` elements. Like `slice[start:start+length]`, but does not panic on overflow.

```go
in := []int{0, 1, 2, 3, 4}

sub := lo.Subset(in, 2, 3)
// []int{2, 3, 4}

sub := lo.Subset(in, -4, 3)
// []int{1, 2, 3}

sub := lo.Subset(in, -2, math.MaxUint)
// []int{3, 4}
```

[[play](https://go.dev/play/p/tOQu1GhFcog)]

### Slice

Returns a copy of a slice from `start` up to, but not including `end`. Like `slice[start:end]`, but does not panic on overflow.

```go
in := []int{0, 1, 2, 3, 4}

slice := lo.Slice(in, 0, 5)
// []int{0, 1, 2, 3, 4}

slice := lo.Slice(in, 2, 3)
// []int{2}

slice := lo.Slice(in, 2, 6)
// []int{2, 3, 4}

slice := lo.Slice(in, 4, 3)
// []int{}
```

[[play](https://go.dev/play/p/8XWYhfMMA1h)]

### Replace

Returns a copy of the slice with the first n non-overlapping instances of old replaced by new.

```go
in := []int{0, 1, 0, 1, 2, 3, 0}

slice := lo.Replace(in, 0, 42, 1)
// []int{42, 1, 0, 1, 2, 3, 0}

slice := lo.Replace(in, -1, 42, 1)
// []int{0, 1, 0, 1, 2, 3, 0}

slice := lo.Replace(in, 0, 42, 2)
// []int{42, 1, 42, 1, 2, 3, 0}

slice := lo.Replace(in, 0, 42, -1)
// []int{42, 1, 42, 1, 2, 3, 42}
```

[[play](https://go.dev/play/p/XfPzmf9gql6)]

### ReplaceAll

Returns a copy of the slice with all non-overlapping instances of old replaced by new.

```go
in := []int{0, 1, 0, 1, 2, 3, 0}

slice := lo.ReplaceAll(in, 0, 42)
// []int{42, 1, 42, 1, 2, 3, 42}

slice := lo.ReplaceAll(in, -1, 42)
// []int{0, 1, 0, 1, 2, 3, 0}
```

[[play](https://go.dev/play/p/a9xZFUHfYcV)]

### Compact

Returns a slice of all non-zero elements.

```go
in := []string{"", "foo", "", "bar", ""}

slice := lo.Compact[string](in)
// []string{"foo", "bar"}
```

[[play](https://go.dev/play/p/tXiy-iK6PAc)]

### IsSorted

Checks if a slice is sorted.

```go
slice := lo.IsSorted([]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9})
// true
```

[[play](https://go.dev/play/p/mc3qR-t4mcx)]

### IsSortedByKey

Checks if a slice is sorted by iteratee.

```go
slice := lo.IsSortedByKey([]string{"a", "bb", "ccc"}, func(s string) int {
    return len(s)
})
// true
```

[[play](https://go.dev/play/p/wiG6XyBBu49)]

### Keys

Creates an array of the map keys.

```go
keys := lo.Keys[string, int](map[string]int{"foo": 1, "bar": 2})
// []string{"foo", "bar"}
```

[[play](https://go.dev/play/p/Uu11fHASqrU)]

### Values

Creates an array of the map values.

```go
values := lo.Values[string, int](map[string]int{"foo": 1, "bar": 2})
// []int{1, 2}
```

[[play](https://go.dev/play/p/nnRTQkzQfF6)]

### PickBy

Returns same map type filtered by given predicate.

```go
m := lo.PickBy[string, int](map[string]int{"foo": 1, "bar": 2, "baz": 3}, func(key string, value int) bool {
    return value%2 == 1
})
// map[string]int{"foo": 1, "baz": 3}
```

[[play](https://go.dev/play/p/kdg8GR_QMmf)]

### PickByKeys

Returns same map type filtered by given keys.

```go
m := lo.PickByKeys[string, int](map[string]int{"foo": 1, "bar": 2, "baz": 3}, []string{"foo", "baz"})
// map[string]int{"foo": 1, "baz": 3}
```

[[play](https://go.dev/play/p/R1imbuci9qU)]

### PickByValues

Returns same map type filtered by given values.

```go
m := lo.PickByValues[string, int](map[string]int{"foo": 1, "bar": 2, "baz": 3}, []int{1, 3})
// map[string]int{"foo": 1, "baz": 3}
```

[[play](https://go.dev/play/p/1zdzSvbfsJc)]

### OmitBy

Returns same map type filtered by given predicate.

```go
m := lo.OmitBy[string, int](map[string]int{"foo": 1, "bar": 2, "baz": 3}, func(key string, value int) bool {
    return value%2 == 1
})
// map[string]int{"bar": 2}
```

[[play](https://go.dev/play/p/EtBsR43bdsd)]

### OmitByKeys

Returns same map type filtered by given keys.

```go
m := lo.OmitByKeys[string, int](map[string]int{"foo": 1, "bar": 2, "baz": 3}, []string{"foo", "baz"})
// map[string]int{"bar": 2}
```

[[play](https://go.dev/play/p/t1QjCrs-ysk)]

### OmitByValues

Returns same map type filtered by given values.

```go
m := lo.OmitByValues[string, int](map[string]int{"foo": 1, "bar": 2, "baz": 3}, []int{1, 3})
// map[string]int{"bar": 2}
```

[[play](https://go.dev/play/p/9UYZi-hrs8j)]

### Entries (alias: ToPairs)

Transforms a map into array of key/value pairs.

```go
entries := lo.Entries[string, int](map[string]int{"foo": 1, "bar": 2})
// []lo.Entry[string, int]{
//     {
//         Key: "foo",
//         Value: 1,
//     },
//     {
//         Key: "bar",
//         Value: 2,
//     },
// }
```

[[play](https://go.dev/play/p/3Dhgx46gawJ)]

### FromEntries (alias: FromPairs)

Transforms an array of key/value pairs into a map.

```go
m := lo.FromEntries[string, int]([]lo.Entry[string, int]{
    {
        Key: "foo",
        Value: 1,
    },
    {
        Key: "bar",
        Value: 2,
    },
})
// map[string]int{"foo": 1, "bar": 2}
```

[[play](https://go.dev/play/p/oIr5KHFGCEN)]

### Invert

Creates a map composed of the inverted keys and values. If map contains duplicate values, subsequent values overwrite property assignments of previous values.

```go
m1 := lo.Invert[string, int](map[string]int{"a": 1, "b": 2})
// map[int]string{1: "a", 2: "b"}

m2 := lo.Invert[string, int](map[string]int{"a": 1, "b": 2, "c": 1})
// map[int]string{1: "c", 2: "b"}
```

[[play](https://go.dev/play/p/rFQ4rak6iA1)]

### Assign

Merges multiple maps from left to right.

```go
mergedMaps := lo.Assign[string, int](
    map[string]int{"a": 1, "b": 2},
    map[string]int{"b": 3, "c": 4},
)
// map[string]int{"a": 1, "b": 3, "c": 4}
```

[[play](https://go.dev/play/p/VhwfJOyxf5o)]

### MapKeys

Manipulates a map keys and transforms it to a map of another type.

```go
m2 := lo.MapKeys[int, int, string](map[int]int{1: 1, 2: 2, 3: 3, 4: 4}, func(_ int, v int) string {
    return strconv.FormatInt(int64(v), 10)
})
// map[string]int{"1": 1, "2": 2, "3": 3, "4": 4}
```

[[play](https://go.dev/play/p/9_4WPIqOetJ)]

### MapValues

Manipulates a map values and transforms it to a map of another type.

```go
m1 := map[int]int64{1: 1, 2: 2, 3: 3}

m2 := lo.MapValues[int, int64, string](m1, func(x int64, _ int) string {
	return strconv.FormatInt(x, 10)
})
// map[int]string{1: "1", 2: "2", 3: "3"}
```

[[play](https://go.dev/play/p/T_8xAfvcf0W)]

### MapEntries

Manipulates a map entries and transforms it to a map of another type.

```go
in := map[string]int{"foo": 1, "bar": 2}

out := lo.MapEntries(in, func(k string, v int) (int, string) {
    return v,k
})
// map[int]string{1: "foo", 2: "bar"}
```

[[play](https://go.dev/play/p/VuvNQzxKimT)]

### MapToSlice

Transforms a map into a slice based on specific iteratee.

```go
m := map[int]int64{1: 4, 2: 5, 3: 6}

s := lo.MapToSlice(m, func(k int, v int64) string {
    return fmt.Sprintf("%d_%d", k, v)
})
// []string{"1_4", "2_5", "3_6"}
```

[[play](https://go.dev/play/p/ZuiCZpDt6LD)]

### Range / RangeFrom / RangeWithSteps

Creates an array of numbers (positive and/or negative) progressing from start up to, but not including end.

```go
result := lo.Range(4)
// [0, 1, 2, 3]

result := lo.Range(-4)
// [0, -1, -2, -3]

result := lo.RangeFrom(1, 5)
// [1, 2, 3, 4, 5]

result := lo.RangeFrom[float64](1.0, 5)
// [1.0, 2.0, 3.0, 4.0, 5.0]

result := lo.RangeWithSteps(0, 20, 5)
// [0, 5, 10, 15]

result := lo.RangeWithSteps[float32](-1.0, -4.0, -1.0)
// [-1.0, -2.0, -3.0]

result := lo.RangeWithSteps(1, 4, -1)
// []

result := lo.Range(0)
// []
```

[[play](https://go.dev/play/p/0r6VimXAi9H)]

### Clamp

Clamps number within the inclusive lower and upper bounds.

```go
r1 := lo.Clamp(0, -10, 10)
// 0

r2 := lo.Clamp(-42, -10, 10)
// -10

r3 := lo.Clamp(42, -10, 10)
// 10
```

[[play](https://go.dev/play/p/RU4lJNC2hlI)]

### Sum

Sums the values in a collection.

If collection is empty 0 is returned.

```go
list := []int{1, 2, 3, 4, 5}
sum := lo.Sum(list)
// 15
```

[[play](https://go.dev/play/p/upfeJVqs4Bt)]

### SumBy

Summarizes the values in a collection using the given return value from the iteration function.

If collection is empty 0 is returned.

```go
strings := []string{"foo", "bar"}
sum := lo.SumBy(strings, func(item string) int {
    return len(item)
})
// 6
```

[[play](https://go.dev/play/p/Dz_a_7jN_ca)]

### RandomString

Returns a random string of the specified length and made of the specified charset.

```go
str := lo.RandomString(5, lo.LettersCharset)
// example: "eIGbt"
```

[[play](https://go.dev/play/p/rRseOQVVum4)]

### Substring

Return part of a string.

```go
sub := lo.Substring("hello", 2, 3)
// "llo"

sub := lo.Substring("hello", -4, 3)
// "ell"

sub := lo.Substring("hello", -2, math.MaxUint)
// "lo"
```

[[play](https://go.dev/play/p/TQlxQi82Lu1)]

### ChunkString

Returns an array of strings split into groups the length of size. If array can't be split evenly, the final chunk will be the remaining elements.

```go
lo.ChunkString("123456", 2)
// []string{"12", "34", "56"}

lo.ChunkString("1234567", 2)
// []string{"12", "34", "56", "7"}

lo.ChunkString("", 2)
// []string{""}

lo.ChunkString("1", 2)
// []string{"1"}
```

[[play](https://go.dev/play/p/__FLTuJVz54)]

### RuneLength

An alias to utf8.RuneCountInString which returns the number of runes in string.

```go
sub := lo.RuneLength("hellô")
// 5

sub := len("hellô")
// 6
```

[[play](https://go.dev/play/p/tuhgW_lWY8l)]

### T2 -> T9

Creates a tuple from a list of values.

```go
tuple1 := lo.T2("x", 1)
// Tuple2[string, int]{A: "x", B: 1}

func example() (string, int) { return "y", 2 }
tuple2 := lo.T2(example())
// Tuple2[string, int]{A: "y", B: 2}
```

[[play](https://go.dev/play/p/IllL3ZO4BQm)]

### Unpack2 -> Unpack9

Returns values contained in tuple.

```go
r1, r2 := lo.Unpack2[string, int](lo.Tuple2[string, int]{"a", 1})
// "a", 1
```

Unpack is also available as a method of TupleX.

```go
tuple2 := lo.T2("a", 1)
a, b := tuple2.Unpack()
// "a" 1
```

[[play](https://go.dev/play/p/xVP_k0kJ96W)]

### Zip2 -> Zip9

Zip creates a slice of grouped elements, the first of which contains the first elements of the given arrays, the second of which contains the second elements of the given arrays, and so on.

When collections have different size, the Tuple attributes are filled with zero value.

```go
tuples := lo.Zip2[string, int]([]string{"a", "b"}, []int{1, 2})
// []Tuple2[string, int]{{A: "a", B: 1}, {A: "b", B: 2}}
```

[[play](https://go.dev/play/p/jujaA6GaJTp)]

### Unzip2 -> Unzip9

Unzip accepts an array of grouped elements and creates an array regrouping the elements to their pre-zip configuration.

```go
a, b := lo.Unzip2[string, int]([]Tuple2[string, int]{{A: "a", B: 1}, {A: "b", B: 2}})
// []string{"a", "b"}
// []int{1, 2}
```

[[play](https://go.dev/play/p/ciHugugvaAW)]

### ChannelDispatcher

Distributes messages from input channels into N child channels. Close events are propagated to children.

Underlying channels can have a fixed buffer capacity or be unbuffered when cap is 0.

```go
ch := make(chan int, 42)
for i := 0; i <= 10; i++ {
    ch <- i
}

children := lo.ChannelDispatcher(ch, 5, 10, DispatchingStrategyRoundRobin[int])
// []<-chan int{...}

consumer := func(c <-chan int) {
    for {
        msg, ok := <-c
        if !ok {
            println("closed")
            break
        }

        println(msg)
    }
}

for i := range children {
    go consumer(children[i])
}
```

Many distributions strategies are available:

- [lo.DispatchingStrategyRoundRobin](./channel.go): Distributes messages in a rotating sequential manner.
- [lo.DispatchingStrategyRandom](./channel.go): Distributes messages in a random manner.
- [lo.DispatchingStrategyWeightedRandom](./channel.go): Distributes messages in a weighted manner.
- [lo.DispatchingStrategyFirst](./channel.go): Distributes messages in the first non-full channel.
- [lo.DispatchingStrategyLeast](./channel.go): Distributes messages in the emptiest channel.
- [lo.DispatchingStrategyMost](./channel.go): Distributes to the fullest channel.

Some strategies bring fallback, in order to favor non-blocking behaviors. See implementations.

For custom strategies, just implement the `lo.DispatchingStrategy` prototype:

```go
type DispatchingStrategy[T any] func(message T, messageIndex uint64, channels []<-chan T) int
```

Eg:

```go
type Message struct {
    TenantID uuid.UUID
}

func hash(id uuid.UUID) int {
	h := fnv.New32a()
	h.Write([]byte(id.String()))
	return int(h.Sum32())
}

// Routes messages per TenantID.
customStrategy := func(message pubsub.AMQPSubMessage, messageIndex uint64, channels []<-chan pubsub.AMQPSubMessage) int {
    destination := hash(message.TenantID) % len(channels)

    // check if channel is full
    if len(channels[destination]) < cap(channels[destination]) {
        return destination
    }

    // fallback when child channel is full
    return utils.DispatchingStrategyRoundRobin(message, uint64(destination), channels)
}

children := lo.ChannelDispatcher(ch, 5, 10, customStrategy)
...
```

### SliceToChannel

Returns a read-only channels of collection elements. Channel is closed after last element. Channel capacity can be customized.

```go
list := []int{1, 2, 3, 4, 5}

for v := range lo.SliceToChannel(2, list) {
    println(v)
}
// prints 1, then 2, then 3, then 4, then 5
```

### ChannelToSlice

Returns a slice built from channels items. Blocks until channel closes.

```go
list := []int{1, 2, 3, 4, 5}
ch := lo.SliceToChannel(2, list)

items := ChannelToSlice(ch)
// []int{1, 2, 3, 4, 5}
```

### Generator

Implements the generator design pattern. Channel is closed after last element. Channel capacity can be customized.

```go
generator := func(yield func(int)) {
    yield(1)
    yield(2)
    yield(3)
}

for v := range lo.Generator(2, generator) {
    println(v)
}
// prints 1, then 2, then 3
```

### Buffer

Creates a slice of n elements from a channel. Returns the slice, the slice length, the read time and the channel status (opened/closed).

```go
ch := lo.SliceToChannel(2, []int{1, 2, 3, 4, 5})

items1, length1, duration1, ok1 := lo.Buffer(ch, 3)
// []int{1, 2, 3}, 3, 0s, true
items2, length2, duration2, ok2 := lo.Buffer(ch, 3)
// []int{4, 5}, 2, 0s, false
```

Example: RabbitMQ consumer 👇

```go
ch := readFromQueue()

for {
    // read 1k items
    items, length, _, ok := lo.Buffer(ch, 1000)

    // do batching stuff

    if !ok {
        break
    }
}
```

### BufferWithTimeout

Creates a slice of n elements from a channel, with timeout. Returns the slice, the slice length, the read time and the channel status (opened/closed).

```go
generator := func(yield func(int)) {
    for i := 0; i < 5; i++ {
        yield(i)
        time.Sleep(35*time.Millisecond)
    }
}

ch := lo.Generator(0, generator)

items1, length1, duration1, ok1 := lo.BufferWithTimeout(ch, 3, 100*time.Millisecond)
// []int{1, 2}, 2, 100ms, true
items2, length2, duration2, ok2 := lo.BufferWithTimeout(ch, 3, 100*time.Millisecond)
// []int{3, 4, 5}, 3, 75ms, true
items3, length3, duration2, ok3 := lo.BufferWithTimeout(ch, 3, 100*time.Millisecond)
// []int{}, 0, 10ms, false
```

Example: RabbitMQ consumer 👇

```go
ch := readFromQueue()

for {
    // read 1k items
    // wait up to 1 second
    items, length, _, ok := lo.BufferWithTimeout(ch, 1000, 1*time.Second)

    // do batching stuff

    if !ok {
        break
    }
}
```

Example: Multithreaded RabbitMQ consumer 👇

```go
ch := readFromQueue()

// 5 workers
// prefetch 1k messages per worker
children := lo.ChannelDispatcher(ch, 5, 1000, DispatchingStrategyFirst[int])

consumer := func(c <-chan int) {
    for {
        // read 1k items
        // wait up to 1 second
        items, length, _, ok := lo.BufferWithTimeout(ch, 1000, 1*time.Second)

        // do batching stuff

        if !ok {
            break
        }
    }
}

for i := range children {
    go consumer(children[i])
}
```

### FanIn

Merge messages from multiple input channels into a single buffered channel. Output messages has no priority. When all upstream channels reach EOF, downstream channel closes.

```go
stream1 := make(chan int, 42)
stream2 := make(chan int, 42)
stream3 := make(chan int, 42)

all := lo.FanIn(100, stream1, stream2, stream3)
// <-chan int
```

### FanOut

Broadcasts all the upstream messages to multiple downstream channels. When upstream channel reach EOF, downstream channels close. If any downstream channels is full, broadcasting is paused.

```go
stream := make(chan int, 42)

all := lo.FanOut(5, 100, stream)
// [5]<-chan int
```

### Contains

Returns true if an element is present in a collection.

```go
present := lo.Contains[int]([]int{0, 1, 2, 3, 4, 5}, 5)
// true
```

### ContainsBy

Returns true if the predicate function returns `true`.

```go
present := lo.ContainsBy[int]([]int{0, 1, 2, 3, 4, 5}, func(x int) bool {
    return x == 3
})
// true
```

### Every

Returns true if all elements of a subset are contained into a collection or if the subset is empty.

```go
ok := lo.Every[int]([]int{0, 1, 2, 3, 4, 5}, []int{0, 2})
// true

ok := lo.Every[int]([]int{0, 1, 2, 3, 4, 5}, []int{0, 6})
// false
```

### EveryBy

Returns true if the predicate returns true for all of the elements in the collection or if the collection is empty.

```go
b := EveryBy[int]([]int{1, 2, 3, 4}, func(x int) bool {
    return x < 5
})
// true
```

### Some

Returns true if at least 1 element of a subset is contained into a collection.
If the subset is empty Some returns false.

```go
ok := lo.Some[int]([]int{0, 1, 2, 3, 4, 5}, []int{0, 2})
// true

ok := lo.Some[int]([]int{0, 1, 2, 3, 4, 5}, []int{-1, 6})
// false
```

### SomeBy

Returns true if the predicate returns true for any of the elements in the collection.
If the collection is empty SomeBy returns false.

```go
b := SomeBy[int]([]int{1, 2, 3, 4}, func(x int) bool {
    return x < 3
})
// true
```

### None

Returns true if no element of a subset are contained into a collection or if the subset is empty.

```go
b := None[int]([]int{0, 1, 2, 3, 4, 5}, []int{0, 2})
// false
b := None[int]([]int{0, 1, 2, 3, 4, 5}, []int{-1, 6})
// true
```

### NoneBy

Returns true if the predicate returns true for none of the elements in the collection or if the collection is empty.

```go
b := NoneBy[int]([]int{1, 2, 3, 4}, func(x int) bool {
    return x < 0
})
// true
```

### Intersect

Returns the intersection between two collections.

```go
result1 := lo.Intersect[int]([]int{0, 1, 2, 3, 4, 5}, []int{0, 2})
// []int{0, 2}

result2 := lo.Intersect[int]([]int{0, 1, 2, 3, 4, 5}, []int{0, 6}
// []int{0}

result3 := lo.Intersect[int]([]int{0, 1, 2, 3, 4, 5}, []int{-1, 6})
// []int{}
```

### Difference

Returns the difference between two collections.

- The first value is the collection of element absent of list2.
- The second value is the collection of element absent of list1.

```go
left, right := lo.Difference[int]([]int{0, 1, 2, 3, 4, 5}, []int{0, 2, 6})
// []int{1, 3, 4, 5}, []int{6}

left, right := lo.Difference[int]([]int{0, 1, 2, 3, 4, 5}, []int{0, 1, 2, 3, 4, 5})
// []int{}, []int{}
```

### Union

Returns all distinct elements from given collections. Result will not change the order of elements relatively.

```go
union := lo.Union[int]([]int{0, 1, 2, 3, 4, 5}, []int{0, 2}, []int{0, 10})
// []int{0, 1, 2, 3, 4, 5, 10}
```

### Without

Returns slice excluding all given values.

```go
subset := lo.Without[int]([]int{0, 2, 10}, 2)
// []int{0, 10}

subset := lo.Without[int]([]int{0, 2, 10}, 0, 1, 2, 3, 4, 5)
// []int{10}
```

### WithoutEmpty

Returns slice excluding empty values.

```go
subset := lo.WithoutEmpty[int]([]int{0, 2, 10})
// []int{2, 10}
```

### IndexOf

Returns the index at which the first occurrence of a value is found in an array or return -1 if the value cannot be found.

```go
found := lo.IndexOf[int]([]int{0, 1, 2, 1, 2, 3}, 2)
// 2

notFound := lo.IndexOf[int]([]int{0, 1, 2, 1, 2, 3}, 6)
// -1
```

### LastIndexOf

Returns the index at which the last occurrence of a value is found in an array or return -1 if the value cannot be found.

```go
found := lo.LastIndexOf[int]([]int{0, 1, 2, 1, 2, 3}, 2)
// 4

notFound := lo.LastIndexOf[int]([]int{0, 1, 2, 1, 2, 3}, 6)
// -1
```

### Find

Search an element in a slice based on a predicate. It returns element and true if element was found.

```go
str, ok := lo.Find[string]([]string{"a", "b", "c", "d"}, func(i string) bool {
    return i == "b"
})
// "b", true

str, ok := lo.Find[string]([]string{"foobar"}, func(i string) bool {
    return i == "b"
})
// "", false
```

### FindIndexOf

FindIndexOf searches an element in a slice based on a predicate and returns the index and true. It returns -1 and false if the element is not found.

```go
str, index, ok := lo.FindIndexOf[string]([]string{"a", "b", "a", "b"}, func(i string) bool {
    return i == "b"
})
// "b", 1, true

str, index, ok := lo.FindIndexOf[string]([]string{"foobar"}, func(i string) bool {
    return i == "b"
})
// "", -1, false
```

### FindLastIndexOf

FindLastIndexOf searches an element in a slice based on a predicate and returns the index and true. It returns -1 and false if the element is not found.

```go
str, index, ok := lo.FindLastIndexOf[string]([]string{"a", "b", "a", "b"}, func(i string) bool {
    return i == "b"
})
// "b", 4, true

str, index, ok := lo.FindLastIndexOf[string]([]string{"foobar"}, func(i string) bool {
    return i == "b"
})
// "", -1, false
```

### FindKey

Returns the key of the first value matching.

```go
result1, ok1 := lo.FindKey(map[string]int{"foo": 1, "bar": 2, "baz": 3}, 2)
// "bar", true

result2, ok2 := lo.FindKey(map[string]int{"foo": 1, "bar": 2, "baz": 3}, 42)
// "", false

type test struct {
    foobar string
}
result3, ok3 := lo.FindKey(map[string]test{"foo": test{"foo"}, "bar": test{"bar"}, "baz": test{"baz"}}, test{"foo"})
// "foo", true
```

### FindKeyBy

Returns the key of the first element predicate returns truthy for.

```go
result1, ok1 := lo.FindKeyBy(map[string]int{"foo": 1, "bar": 2, "baz": 3}, func(k string, v int) bool {
    return k == "foo"
})
// "foo", true

result2, ok2 := lo.FindKeyBy(map[string]int{"foo": 1, "bar": 2, "baz": 3}, func(k string, v int) bool {
    return false
})
// "", false
```

### FindUniques

Returns a slice with all the unique elements of the collection. The order of result values is determined by the order they occur in the array.

```go
uniqueValues := lo.FindUniques[int]([]int{1, 2, 2, 1, 2, 3})
// []int{3}
```

### FindUniquesBy

Returns a slice with all the unique elements of the collection. The order of result values is determined by the order they occur in the array. It accepts `iteratee` which is invoked for each element in array to generate the criterion by which uniqueness is computed.

```go
uniqueValues := lo.FindUniquesBy[int, int]([]int{3, 4, 5, 6, 7}, func(i int) int {
    return i%3
})
// []int{5}
```

### FindDuplicates

Returns a slice with the first occurrence of each duplicated elements of the collection. The order of result values is determined by the order they occur in the array.

```go
duplicatedValues := lo.FindDuplicates[int]([]int{1, 2, 2, 1, 2, 3})
// []int{1, 2}
```

### FindDuplicatesBy

Returns a slice with the first occurrence of each duplicated elements of the collection. The order of result values is determined by the order they occur in the array. It accepts `iteratee` which is invoked for each element in array to generate the criterion by which uniqueness is computed.

```go
duplicatedValues := lo.FindDuplicatesBy[int, int]([]int{3, 4, 5, 6, 7}, func(i int) int {
    return i%3
})
// []int{3, 4}
```

### Min

Search the minimum value of a collection.

Returns zero value when collection is empty.

```go
min := lo.Min([]int{1, 2, 3})
// 1

min := lo.Min([]int{})
// 0
```

### MinBy

Search the minimum value of a collection using the given comparison function.

If several values of the collection are equal to the smallest value, returns the first such value.

Returns zero value when collection is empty.

```go
min := lo.MinBy([]string{"s1", "string2", "s3"}, func(item string, min string) bool {
    return len(item) < len(min)
})
// "s1"

min := lo.MinBy([]string{}, func(item string, min string) bool {
    return len(item) < len(min)
})
// ""
```

### Max

Search the maximum value of a collection.

Returns zero value when collection is empty.

```go
max := lo.Max([]int{1, 2, 3})
// 3

max := lo.Max([]int{})
// 0
```

### MaxBy

Search the maximum value of a collection using the given comparison function.

If several values of the collection are equal to the greatest value, returns the first such value.

Returns zero value when collection is empty.

```go
max := lo.MaxBy([]string{"string1", "s2", "string3"}, func(item string, max string) bool {
    return len(item) > len(max)
})
// "string1"

max := lo.MaxBy([]string{}, func(item string, max string) bool {
    return len(item) > len(max)
})
// ""
```

### Last

Returns the last element of a collection or error if empty.

```go
last, err := lo.Last[int]([]int{1, 2, 3})
// 3
```

### Nth

Returns the element at index `nth` of collection. If `nth` is negative, the nth element from the end is returned. An error is returned when nth is out of slice bounds.

```go
nth, err := lo.Nth[int]([]int{0, 1, 2, 3}, 2)
// 2

nth, err := lo.Nth[int]([]int{0, 1, 2, 3}, -2)
// 2
```

### Sample

Returns a random item from collection.

```go
lo.Sample[string]([]string{"a", "b", "c"})
// a random string from []string{"a", "b", "c"}

lo.Sample[string]([]string{})
// ""
```

### Samples

Returns N random unique items from collection.

```go
lo.Samples[string]([]string{"a", "b", "c"}, 3)
// []string{"a", "b", "c"} in random order
```

### Ternary

A 1 line if/else statement.

```go
result := lo.Ternary[string](true, "a", "b")
// "a"

result := lo.Ternary[string](false, "a", "b")
// "b"
```

[[play](https://go.dev/play/p/t-D7WBL44h2)]

### TernaryF

A 1 line if/else statement whose options are functions.

```go
result := lo.TernaryF[string](true, func() string { return "a" }, func() string { return "b" })
// "a"

result := lo.TernaryF[string](false, func() string { return "a" }, func() string { return "b" })
// "b"
```

Useful to avoid nil-pointer dereferencing in intializations, or avoid running unnecessary code

```go
var s *string

someStr := TernaryF[string](s == nil, func() string { return uuid.New().String() }, func() string { return *s })
// ef782193-c30c-4e2e-a7ae-f8ab5e125e02
```

[[play](https://go.dev/play/p/AO4VW20JoqM)]

### If / ElseIf / Else

```go
result := lo.If[int](true, 1).
    ElseIf(false, 2).
    Else(3)
// 1

result := lo.If[int](false, 1).
    ElseIf(true, 2).
    Else(3)
// 2

result := lo.If[int](false, 1).
    ElseIf(false, 2).
    Else(3)
// 3
```

Using callbacks:

```go
result := lo.IfF[int](true, func () int {
        return 1
    }).
    ElseIfF(false, func () int {
        return 2
    }).
    ElseF(func () int {
        return 3
    })
// 1
```

Mixed:

```go
result := lo.IfF[int](true, func () int {
        return 1
    }).
    Else(42)
// 1
```

[[play](https://go.dev/play/p/WSw3ApMxhyW)]

### Switch / Case / Default

```go
result := lo.Switch[int, string](1).
    Case(1, "1").
    Case(2, "2").
    Default("3")
// "1"

result := lo.Switch[int, string](2).
    Case(1, "1").
    Case(2, "2").
    Default("3")
// "2"

result := lo.Switch[int, string](42).
    Case(1, "1").
    Case(2, "2").
    Default("3")
// "3"
```

Using callbacks:

```go
result := lo.Switch[int, string](1).
    CaseF(1, func() string {
        return "1"
    }).
    CaseF(2, func() string {
        return "2"
    }).
    DefaultF(func() string {
        return "3"
    })
// "1"
```

Mixed:

```go
result := lo.Switch[int, string](1).
    CaseF(1, func() string {
        return "1"
    }).
    Default("42")
// "1"
```

[[play](https://go.dev/play/p/TGbKUMAeRUd)]

### ToPtr

Returns a pointer copy of value.

```go
ptr := lo.ToPtr[string]("hello world")
// *string{"hello world"}
```

### FromPtr

Returns the pointer value or empty.

```go
str := "hello world"
value := lo.FromPtr[string](&str)
// "hello world"

value := lo.FromPtr[string](nil)
// ""
```

### FromPtrOr

Returns the pointer value or the fallback value.

```go
str := "hello world"
value := lo.FromPtrOr[string](&str, "empty")
// "hello world"

value := lo.FromPtrOr[string](nil, "empty")
// "empty"
```

### ToSlicePtr

Returns a slice of pointer copy of value.

```go
ptr := lo.ToSlicePtr[string]([]string{"hello", "world"})
// []*string{"hello", "world"}
```

### ToAnySlice

Returns a slice with all elements mapped to `any` type.

```go
elements := lo.ToAnySlice[int]([]int{1, 5, 1})
// []any{1, 5, 1}
```

### FromAnySlice

Returns an `any` slice with all elements mapped to a type. Returns false in case of type conversion failure.

```go
elements, ok := lo.FromAnySlice[string]([]any{"foobar", 42})
// []string{}, false

elements, ok := lo.FromAnySlice[string]([]any{"foobar", "42"})
// []string{"foobar", "42"}, true
```

### Empty

Returns an empty value.

```go
lo.Empty[int]()
// 0
lo.Empty[string]()
// ""
lo.Empty[bool]()
// false
```

### IsEmpty

Returns true if argument is a zero value.

```go
lo.IsEmpty[int](0)
// true
lo.IsEmpty[int](42)
// false

lo.IsEmpty[string]("")
// true
lo.IsEmpty[bool]("foobar")
// false

type test struct {
    foobar string
}

lo.IsEmpty[test](test{foobar: ""})
// true
lo.IsEmpty[test](test{foobar: "foobar"})
// false
```

### IsNotEmpty

Returns true if argument is a zero value.

```go
lo.IsNotEmpty[int](0)
// false
lo.IsNotEmpty[int](42)
// true

lo.IsNotEmpty[string]("")
// false
lo.IsNotEmpty[bool]("foobar")
// true

type test struct {
    foobar string
}

lo.IsNotEmpty[test](test{foobar: ""})
// false
lo.IsNotEmpty[test](test{foobar: "foobar"})
// true
```

### Coalesce

Returns the first non-empty arguments. Arguments must be comparable.

```go
result, ok := lo.Coalesce(0, 1, 2, 3)
// 1 true

result, ok := lo.Coalesce("")
// "" false

var nilStr *string
str := "foobar"
result, ok := lo.Coalesce[*string](nil, nilStr, &str)
// &"foobar" true
```

### Partial

Returns new function that, when called, has its first argument set to the provided value.

```go
add := func(x, y int) int { return x + y }
f := lo.Partial(add, 5)

f(10)
// 15

f(42)
// 47
```

### Partial2 -> Partial5

Returns new function that, when called, has its first argument set to the provided value.

```go
add := func(x, y, z int) int { return x + y + z }
f := lo.Partial2(add, 42)

f(10, 5)
// 57

f(42, -4)
// 80
```

### Attempt

Invokes a function N times until it returns valid output. Returning either the caught error or nil. When first argument is less than `1`, the function runs until a successful response is returned.

```go
iter, err := lo.Attempt(42, func(i int) error {
    if i == 5 {
        return nil
    }

    return fmt.Errorf("failed")
})
// 6
// nil

iter, err := lo.Attempt(2, func(i int) error {
    if i == 5 {
        return nil
    }

    return fmt.Errorf("failed")
})
// 2
// error "failed"

iter, err := lo.Attempt(0, func(i int) error {
    if i < 42 {
        return fmt.Errorf("failed")
    }

    return nil
})
// 43
// nil
```

For more advanced retry strategies (delay, exponential backoff...), please take a look on [cenkalti/backoff](https://github.com/cenkalti/backoff).

[[play](https://go.dev/play/p/3ggJZ2ZKcMj)]

### AttemptWithDelay

Invokes a function N times until it returns valid output, with a pause between each call. Returning either the caught error or nil.

When first argument is less than `1`, the function runs until a successful response is returned.

```go
iter, duration, err := lo.AttemptWithDelay(5, 2*time.Second, func(i int, duration time.Duration) error {
    if i == 2 {
        return nil
    }

    return fmt.Errorf("failed")
})
// 3
// ~ 4 seconds
// nil
```

For more advanced retry strategies (delay, exponential backoff...), please take a look on [cenkalti/backoff](https://github.com/cenkalti/backoff).

[[play](https://go.dev/play/p/tVs6CygC7m1)]

### AttemptWhile

Invokes a function N times until it returns valid output. Returning either the caught error or nil, and along with a bool value to identifying whether it needs invoke function continuously. It will terminate the invoke immediately if second bool value is returned with falsy value.

When first argument is less than `1`, the function runs until a successful response is returned.

```go
count1, err1 := lo.AttemptWhile(5, func(i int) (error, bool) {
    err := doMockedHTTPRequest(i)
    if err != nil {
        if errors.Is(err, ErrBadRequest) { // lets assume ErrBadRequest is a critical error that needs to terminate the invoke
            return err, false // flag the second return value as false to terminate the invoke
        }

        return err, true
    }

    return nil, false
})
```

For more advanced retry strategies (delay, exponential backoff...), please take a look on [cenkalti/backoff](https://github.com/cenkalti/backoff).

[[play](https://go.dev/play/p/M2wVq24PaZM)]

### AttemptWhileWithDelay

Invokes a function N times until it returns valid output, with a pause between each call. Returning either the caught error or nil, and along with a bool value to identifying whether it needs to invoke function continuously. It will terminate the invoke immediately if second bool value is returned with falsy value.

When first argument is less than `1`, the function runs until a successful response is returned.

```go
count1, time1, err1 := lo.AttemptWhileWithDelay(5, time.Millisecond, func(i int, d time.Duration) (error, bool) {
    err := doMockedHTTPRequest(i)
    if err != nil {
        if errors.Is(err, ErrBadRequest) { // lets assume ErrBadRequest is a critical error that needs to terminate the invoke
            return err, false // flag the second return value as false to terminate the invoke
        }

        return err, true
    }

    return nil, false
})
```

For more advanced retry strategies (delay, exponential backoff...), please take a look on [cenkalti/backoff](https://github.com/cenkalti/backoff).

[[play](https://go.dev/play/p/cfcmhvLO-nv)]

### Debounce

`NewDebounce` creates a debounced instance that delays invoking functions given until after wait milliseconds have elapsed, until `cancel` is called.

```go
f := func() {
    println("Called once after 100ms when debounce stopped invoking!")
}

debounce, cancel := lo.NewDebounce(100 * time.Millisecond, f)
for j := 0; j < 10; j++ {
    debounce()
}

time.Sleep(1 * time.Second)
cancel()
```

[[play](https://go.dev/play/p/mz32VMK2nqe)]

### Synchronize

Wraps the underlying callback in a mutex. It receives an optional mutex.

```go
s := lo.Synchronize()

for i := 0; i < 10; i++ {
    go s.Do(func () {
        println("will be called sequentially")
    })
}
```

It is equivalent to:

```go
mu := sync.Mutex{}

func foobar() {
    mu.Lock()
    defer mu.Unlock()

    // ...
}
```

### Async

Executes a function in a goroutine and returns the result in a channel.

```go
ch := lo.Async(func() error { time.Sleep(10 * time.Second); return nil })
// chan error (nil)
```

### Async{0->6}

Executes a function in a goroutine and returns the result in a channel.
For function with multiple return values, the results will be returned as a tuple inside the channel.
For function without return, struct{} will be returned in the channel.

```go
ch := lo.Async0(func() { time.Sleep(10 * time.Second) })
// chan struct{}

ch := lo.Async1(func() int {
  time.Sleep(10 * time.Second);
  return 42
})
// chan int (42)

ch := lo.Async2(func() (int, string) {
  time.Sleep(10 * time.Second);
  return 42, "Hello"
})
// chan lo.Tuple2[int, string] ({42, "Hello"})
```

### Transaction

Implements a Saga pattern.

```go
transaction := NewTransaction[int]().
    Then(
        func(state int) (int, error) {
            fmt.Println("step 1")
            return state + 10, nil
        },
        func(state int) int {
            fmt.Println("rollback 1")
            return state - 10
        },
    ).
    Then(
        func(state int) (int, error) {
            fmt.Println("step 2")
            return state + 15, nil
        },
        func(state int) int {
            fmt.Println("rollback 2")
            return state - 15
        },
    ).
    Then(
        func(state int) (int, error) {
            fmt.Println("step 3")

            if true {
                return state, fmt.Errorf("error")
            }

            return state + 42, nil
        },
        func(state int) int {
            fmt.Println("rollback 3")
            return state - 42
        },
    )

_, _ = transaction.Process(-5)

// Output:
// step 1
// step 2
// step 3
// rollback 2
// rollback 1
```

### Validate

Helper function that creates an error when a condition is not met.

```go
slice := []string{"a"}
val := lo.Validate(len(slice) == 0, "Slice should be empty but contains %v", slice)
// error("Slice should be empty but contains [a]")

slice := []string{}
val := lo.Validate(len(slice) == 0, "Slice should be empty but contains %v", slice)
// nil
```

[[play](https://go.dev/play/p/vPyh51XpCBt)]

### Must

Wraps a function call to panics if second argument is `error` or `false`, returns the value otherwise.

```go
val := lo.Must(time.Parse("2006-01-02", "2022-01-15"))
// 2022-01-15

val := lo.Must(time.Parse("2006-01-02", "bad-value"))
// panics
```

[[play](https://go.dev/play/p/TMoWrRp3DyC)]

### Must{0->6}

Must\* has the same behavior as Must, but returns multiple values.

```go
func example0() (error)
func example1() (int, error)
func example2() (int, string, error)
func example3() (int, string, time.Date, error)
func example4() (int, string, time.Date, bool, error)
func example5() (int, string, time.Date, bool, float64, error)
func example6() (int, string, time.Date, bool, float64, byte, error)

lo.Must0(example0())
val1 := lo.Must1(example1())    // alias to Must
val1, val2 := lo.Must2(example2())
val1, val2, val3 := lo.Must3(example3())
val1, val2, val3, val4 := lo.Must4(example4())
val1, val2, val3, val4, val5 := lo.Must5(example5())
val1, val2, val3, val4, val5, val6 := lo.Must6(example6())
```

You can wrap functions like `func (...) (..., ok bool)`.

```go
// math.Signbit(float64) bool
lo.Must0(math.Signbit(v))

// bytes.Cut([]byte,[]byte) ([]byte, []byte, bool)
before, after := lo.Must2(bytes.Cut(s, sep))
```

You can give context to the panic message by adding some printf-like arguments.

```go
val, ok := lo.Find(myString, func(i string) bool {
    return i == requiredChar
})
lo.Must0(ok, "'%s' must always contain '%s'", myString, requiredChar)

list := []int{0, 1, 2}
item := 5
lo.Must0(lo.Contains[int](list, item), "'%s' must always contain '%s'", list, item)
...
```

[[play](https://go.dev/play/p/TMoWrRp3DyC)]

### Try

Calls the function and return false in case of error and on panic.

```go
ok := lo.Try(func() error {
    panic("error")
    return nil
})
// false

ok := lo.Try(func() error {
    return nil
})
// true

ok := lo.Try(func() error {
    return fmt.Errorf("error")
})
// false
```

[[play](https://go.dev/play/p/mTyyWUvn9u4)]

### Try{0->6}

The same behavior than `Try`, but callback returns 2 variables.

```go
ok := lo.Try2(func() (string, error) {
    panic("error")
    return "", nil
})
// false
```

[[play](https://go.dev/play/p/mTyyWUvn9u4)]

### TryOr

Calls the function and return a default value in case of error and on panic.

```go
str, ok := lo.TryOr(func() (string, error) {
    panic("error")
    return "hello", nil
}, "world")
// world
// false

ok := lo.TryOr(func() error {
    return "hello", nil
}, "world")
// hello
// true

ok := lo.TryOr(func() error {
    return "hello", fmt.Errorf("error")
}, "world")
// world
// false
```

[[play](https://go.dev/play/p/B4F7Wg2Zh9X)]

### TryOr{0->6}

The same behavior than `TryOr`, but callback returns 2 variables.

```go
str, nbr, ok := lo.TryOr2(func() (string, int, error) {
    panic("error")
    return "hello", 42, nil
}, "world", 21)
// world
// 21
// false
```

[[play](https://go.dev/play/p/B4F7Wg2Zh9X)]

### TryWithErrorValue

The same behavior than `Try`, but also returns value passed to panic.

```go
err, ok := lo.TryWithErrorValue(func() error {
    panic("error")
    return nil
})
// "error", false
```

[[play](https://go.dev/play/p/Kc7afQIT2Fs)]

### TryCatch

The same behavior than `Try`, but calls the catch function in case of error.

```go
caught := false

ok := lo.TryCatch(func() error {
    panic("error")
    return nil
}, func() {
    caught = true
})
// false
// caught == true
```

[[play](https://go.dev/play/p/PnOON-EqBiU)]

### TryCatchWithErrorValue

The same behavior than `TryWithErrorValue`, but calls the catch function in case of error.

```go
caught := false

ok := lo.TryCatchWithErrorValue(func() error {
    panic("error")
    return nil
}, func(val any) {
    caught = val == "error"
})
// false
// caught == true
```

[[play](https://go.dev/play/p/8Pc9gwX_GZO)]

### ErrorsAs

A shortcut for:

```go
err := doSomething()

var rateLimitErr *RateLimitError
if ok := errors.As(err, &rateLimitErr); ok {
    // retry later
}
```

1 line `lo` helper:

```go
err := doSomething()

if rateLimitErr, ok := lo.ErrorsAs[*RateLimitError](err); ok {
    // retry later
}
```

[[play](https://go.dev/play/p/8wk5rH8UfrE)]

## 🛩 Benchmark

We executed a simple benchmark with the a dead-simple `lo.Map` loop:

See the full implementation [here](./benchmark_test.go).

```go
_ = lo.Map[int64](arr, func(x int64, i int) string {
    return strconv.FormatInt(x, 10)
})
```

**Result:**

Here is a comparison between `lo.Map`, `lop.Map`, `go-funk` library and a simple Go `for` loop.

```
$ go test -benchmem -bench ./...
goos: linux
goarch: amd64
pkg: github.com/samber/lo
cpu: Intel(R) Core(TM) i5-7267U CPU @ 3.10GHz
cpu: Intel(R) Core(TM) i7 CPU         920  @ 2.67GHz
BenchmarkMap/lo.Map-8         	       8	 132728237 ns/op	39998945 B/op	 1000002 allocs/op
BenchmarkMap/lop.Map-8        	       2	 503947830 ns/op	119999956 B/op	 3000007 allocs/op
BenchmarkMap/reflect-8        	       2	 826400560 ns/op	170326512 B/op	 4000042 allocs/op
BenchmarkMap/for-8            	       9	 126252954 ns/op	39998674 B/op	 1000001 allocs/op
PASS
ok  	github.com/samber/lo	6.657s
```

- `lo.Map` is way faster (x7) than `go-funk`, a reflection-based Map implementation.
- `lo.Map` have the same allocation profile than `for`.
- `lo.Map` is 4% slower than `for`.
- `lop.Map` is slower than `lo.Map` because it implies more memory allocation and locks. `lop.Map` will be useful for long-running callbacks, such as i/o bound processing.
- `for` beats other implementations for memory and CPU.

## 🤝 Contributing

- Ping me on twitter [@samuelberthe](https://twitter.com/samuelberthe) (DMs, mentions, whatever :))
- Fork the [project](https://github.com/samber/lo)
- Fix [open issues](https://github.com/samber/lo/issues) or request new features

Don't hesitate ;)

### With Docker

```bash
docker-compose run --rm dev
```

### Without Docker

```bash
# Install some dev dependencies
make tools

# Run tests
make test
# or
make watch-test
```

## 👤 Contributors

![Contributors](https://contrib.rocks/image?repo=samber/lo)

## 💫 Show your support

Give a ⭐️ if this project helped you!

[![support us](https://c5.patreon.com/external/logo/become_a_patron_button.png)](https://www.patreon.com/samber)

## 📝 License

Copyright © 2022 [Samuel Berthe](https://github.com/samber).

This project is [MIT](./LICENSE) licensed.
  07070100000A8B000081A4000000000000000000000001645E367C00002149000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/samber/lo/channel.go    package lo

import (
	"math/rand"
	"sync"
	"time"
)

type DispatchingStrategy[T any] func(msg T, index uint64, channels []<-chan T) int

// ChannelDispatcher distributes messages from input channels into N child channels.
// Close events are propagated to children.
// Underlying channels can have a fixed buffer capacity or be unbuffered when cap is 0.
func ChannelDispatcher[T any](stream <-chan T, count int, channelBufferCap int, strategy DispatchingStrategy[T]) []<-chan T {
	children := createChannels[T](count, channelBufferCap)

	roChildren := channelsToReadOnly(children)

	go func() {
		// propagate channel closing to children
		defer closeChannels(children)

		var i uint64 = 0

		for {
			msg, ok := <-stream
			if !ok {
				return
			}

			destination := strategy(msg, i, roChildren) % count
			children[destination] <- msg

			i++
		}
	}()

	return roChildren
}

func createChannels[T any](count int, channelBufferCap int) []chan T {
	children := make([]chan T, 0, count)

	for i := 0; i < count; i++ {
		children = append(children, make(chan T, channelBufferCap))
	}

	return children
}

func channelsToReadOnly[T any](children []chan T) []<-chan T {
	roChildren := make([]<-chan T, 0, len(children))

	for i := range children {
		roChildren = append(roChildren, children[i])
	}

	return roChildren
}

func closeChannels[T any](children []chan T) {
	for i := 0; i < len(children); i++ {
		close(children[i])
	}
}

func channelIsNotFull[T any](ch <-chan T) bool {
	return cap(ch) == 0 || len(ch) < cap(ch)
}

// DispatchingStrategyRoundRobin distributes messages in a rotating sequential manner.
// If the channel capacity is exceeded, the next channel will be selected and so on.
func DispatchingStrategyRoundRobin[T any](msg T, index uint64, channels []<-chan T) int {
	for {
		i := int(index % uint64(len(channels)))
		if channelIsNotFull(channels[i]) {
			return i
		}

		index++
		time.Sleep(10 * time.Microsecond) // prevent CPU from burning 🔥
	}
}

// DispatchingStrategyRandom distributes messages in a random manner.
// If the channel capacity is exceeded, another random channel will be selected and so on.
func DispatchingStrategyRandom[T any](msg T, index uint64, channels []<-chan T) int {
	for {
		i := rand.Intn(len(channels))
		if channelIsNotFull(channels[i]) {
			return i
		}

		time.Sleep(10 * time.Microsecond) // prevent CPU from burning 🔥
	}
}

// DispatchingStrategyWeightedRandom distributes messages in a weighted manner.
// If the channel capacity is exceeded, another random channel will be selected and so on.
func DispatchingStrategyWeightedRandom[T any](weights []int) DispatchingStrategy[T] {
	seq := []int{}

	for i := 0; i < len(weights); i++ {
		for j := 0; j < weights[i]; j++ {
			seq = append(seq, i)
		}
	}

	return func(msg T, index uint64, channels []<-chan T) int {
		for {
			i := seq[rand.Intn(len(seq))]
			if channelIsNotFull(channels[i]) {
				return i
			}

			time.Sleep(10 * time.Microsecond) // prevent CPU from burning 🔥
		}
	}
}

// DispatchingStrategyFirst distributes messages in the first non-full channel.
// If the capacity of the first channel is exceeded, the second channel will be selected and so on.
func DispatchingStrategyFirst[T any](msg T, index uint64, channels []<-chan T) int {
	for {
		for i := range channels {
			if channelIsNotFull(channels[i]) {
				return i
			}
		}

		time.Sleep(10 * time.Microsecond) // prevent CPU from burning 🔥
	}
}

// DispatchingStrategyLeast distributes messages in the emptiest channel.
func DispatchingStrategyLeast[T any](msg T, index uint64, channels []<-chan T) int {
	seq := Range(len(channels))

	return MinBy(seq, func(item int, min int) bool {
		return len(channels[item]) < len(channels[min])
	})
}

// DispatchingStrategyMost distributes messages in the fullest channel.
// If the channel capacity is exceeded, the next channel will be selected and so on.
func DispatchingStrategyMost[T any](msg T, index uint64, channels []<-chan T) int {
	seq := Range(len(channels))

	return MaxBy(seq, func(item int, max int) bool {
		return len(channels[item]) > len(channels[max]) && channelIsNotFull(channels[item])
	})
}

// SliceToChannel returns a read-only channels of collection elements.
func SliceToChannel[T any](bufferSize int, collection []T) <-chan T {
	ch := make(chan T, bufferSize)

	go func() {
		for _, item := range collection {
			ch <- item
		}

		close(ch)
	}()

	return ch
}

// ChannelToSlice returns a slice built from channels items. Blocks until channel closes.
func ChannelToSlice[T any](ch <-chan T) []T {
	collection := []T{}

	for item := range ch {
		collection = append(collection, item)
	}

	return collection
}

// Generator implements the generator design pattern.
func Generator[T any](bufferSize int, generator func(yield func(T))) <-chan T {
	ch := make(chan T, bufferSize)

	go func() {
		// WARNING: infinite loop
		generator(func(t T) {
			ch <- t
		})

		close(ch)
	}()

	return ch
}

// Buffer creates a slice of n elements from a channel. Returns the slice and the slice length.
// @TODO: we should probably provide an helper that reuse the same buffer.
func Buffer[T any](ch <-chan T, size int) (collection []T, length int, readTime time.Duration, ok bool) {
	buffer := make([]T, 0, size)
	index := 0
	now := time.Now()

	for ; index < size; index++ {
		item, ok := <-ch
		if !ok {
			return buffer, index, time.Since(now), false
		}

		buffer = append(buffer, item)
	}

	return buffer, index, time.Since(now), true
}

// Buffer creates a slice of n elements from a channel. Returns the slice and the slice length.
// Deprecated: Use lo.Buffer instead.
func Batch[T any](ch <-chan T, size int) (collection []T, length int, readTime time.Duration, ok bool) {
	return Buffer(ch, size)
}

// BufferWithTimeout creates a slice of n elements from a channel, with timeout. Returns the slice and the slice length.
// @TODO: we should probably provide an helper that reuse the same buffer.
func BufferWithTimeout[T any](ch <-chan T, size int, timeout time.Duration) (collection []T, length int, readTime time.Duration, ok bool) {
	expire := time.NewTimer(timeout)
	defer expire.Stop()

	buffer := make([]T, 0, size)
	index := 0
	now := time.Now()

	for ; index < size; index++ {
		select {
		case item, ok := <-ch:
			if !ok {
				return buffer, index, time.Since(now), false
			}

			buffer = append(buffer, item)

		case <-expire.C:
			return buffer, index, time.Since(now), true
		}
	}

	return buffer, index, time.Since(now), true
}

// BufferWithTimeout creates a slice of n elements from a channel, with timeout. Returns the slice and the slice length.
// Deprecated: Use lo.BufferWithTimeout instead.
func BatchWithTimeout[T any](ch <-chan T, size int, timeout time.Duration) (collection []T, length int, readTime time.Duration, ok bool) {
	return BufferWithTimeout(ch, size, timeout)
}

// FanIn collects messages from multiple input channels into a single buffered channel.
// Output messages has no priority. When all upstream channels reach EOF, downstream channel closes.
func FanIn[T any](channelBufferCap int, upstreams ...<-chan T) <-chan T {
	out := make(chan T, channelBufferCap)
	var wg sync.WaitGroup

	// Start an output goroutine for each input channel in upstreams.
	wg.Add(len(upstreams))
	for _, c := range upstreams {
		go func(c <-chan T) {
			for n := range c {
				out <- n
			}
			wg.Done()
		}(c)
	}

	// Start a goroutine to close out once all the output goroutines are done.
	go func() {
		wg.Wait()
		close(out)
	}()
	return out
}

// ChannelMerge collects messages from multiple input channels into a single buffered channel.
// Output messages has no priority. When all upstream channels reach EOF, downstream channel closes.
// Deprecated: Use lo.FanIn instead.
func ChannelMerge[T any](channelBufferCap int, upstreams ...<-chan T) <-chan T {
	return FanIn(channelBufferCap, upstreams...)
}

// FanOut broadcasts all the upstream messages to multiple downstream channels.
// When upstream channel reach EOF, downstream channels close. If any downstream
// channels is full, broadcasting is paused.
func FanOut[T any](count int, channelsBufferCap int, upstream <-chan T) []<-chan T {
	downstreams := createChannels[T](count, channelsBufferCap)

	go func() {
		for msg := range upstream {
			for i := range downstreams {
				downstreams[i] <- msg
			}
		}

		// Close out once all the output goroutines are done.
		for i := range downstreams {
			close(downstreams[i])
		}
	}()

	return channelsToReadOnly(downstreams)
}
   07070100000A8C000081A4000000000000000000000001645E367C00000917000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/samber/lo/concurrency.go    package lo

import "sync"

type synchronize struct {
	locker sync.Locker
}

func (s *synchronize) Do(cb func()) {
	s.locker.Lock()
	Try0(cb)
	s.locker.Unlock()
}

// Synchronize wraps the underlying callback in a mutex. It receives an optional mutex.
func Synchronize(opt ...sync.Locker) *synchronize {
	if len(opt) > 1 {
		panic("unexpected arguments")
	} else if len(opt) == 0 {
		opt = append(opt, &sync.Mutex{})
	}

	return &synchronize{
		locker: opt[0],
	}
}

// Async executes a function in a goroutine and returns the result in a channel.
func Async[A any](f func() A) chan A {
	ch := make(chan A)
	go func() {
		ch <- f()
	}()
	return ch
}

// Async0 executes a function in a goroutine and returns a channel set once the function finishes.
func Async0(f func()) chan struct{} {
	ch := make(chan struct{})
	go func() {
		f()
		ch <- struct{}{}
	}()
	return ch
}

// Async1 is an alias to Async.
func Async1[A any](f func() A) chan A {
	return Async(f)
}

// Async2 has the same behavior as Async, but returns the 2 results as a tuple inside the channel.
func Async2[A any, B any](f func() (A, B)) chan Tuple2[A, B] {
	ch := make(chan Tuple2[A, B])
	go func() {
		ch <- T2(f())
	}()
	return ch
}

// Async3 has the same behavior as Async, but returns the 3 results as a tuple inside the channel.
func Async3[A any, B any, C any](f func() (A, B, C)) chan Tuple3[A, B, C] {
	ch := make(chan Tuple3[A, B, C])
	go func() {
		ch <- T3(f())
	}()
	return ch
}

// Async4 has the same behavior as Async, but returns the 4 results as a tuple inside the channel.
func Async4[A any, B any, C any, D any](f func() (A, B, C, D)) chan Tuple4[A, B, C, D] {
	ch := make(chan Tuple4[A, B, C, D])
	go func() {
		ch <- T4(f())
	}()
	return ch
}

// Async5 has the same behavior as Async, but returns the 5 results as a tuple inside the channel.
func Async5[A any, B any, C any, D any, E any](f func() (A, B, C, D, E)) chan Tuple5[A, B, C, D, E] {
	ch := make(chan Tuple5[A, B, C, D, E])
	go func() {
		ch <- T5(f())
	}()
	return ch
}

// Async6 has the same behavior as Async, but returns the 6 results as a tuple inside the channel.
func Async6[A any, B any, C any, D any, E any, F any](f func() (A, B, C, D, E, F)) chan Tuple6[A, B, C, D, E, F] {
	ch := make(chan Tuple6[A, B, C, D, E, F])
	go func() {
		ch <- T6(f())
	}()
	return ch
}
 07070100000A8D000081A4000000000000000000000001645E367C00000AB7000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/samber/lo/condition.go  package lo

// Ternary is a 1 line if/else statement.
// Play: https://go.dev/play/p/t-D7WBL44h2
func Ternary[T any](condition bool, ifOutput T, elseOutput T) T {
	if condition {
		return ifOutput
	}

	return elseOutput
}

// TernaryF is a 1 line if/else statement whose options are functions
// Play: https://go.dev/play/p/AO4VW20JoqM
func TernaryF[T any](condition bool, ifFunc func() T, elseFunc func() T) T {
	if condition {
		return ifFunc()
	}

	return elseFunc()
}

type ifElse[T any] struct {
	result T
	done   bool
}

// If.
// Play: https://go.dev/play/p/WSw3ApMxhyW
func If[T any](condition bool, result T) *ifElse[T] {
	if condition {
		return &ifElse[T]{result, true}
	}

	var t T
	return &ifElse[T]{t, false}
}

// IfF.
// Play: https://go.dev/play/p/WSw3ApMxhyW
func IfF[T any](condition bool, resultF func() T) *ifElse[T] {
	if condition {
		return &ifElse[T]{resultF(), true}
	}

	var t T
	return &ifElse[T]{t, false}
}

// ElseIf.
// Play: https://go.dev/play/p/WSw3ApMxhyW
func (i *ifElse[T]) ElseIf(condition bool, result T) *ifElse[T] {
	if !i.done && condition {
		i.result = result
		i.done = true
	}

	return i
}

// ElseIfF.
// Play: https://go.dev/play/p/WSw3ApMxhyW
func (i *ifElse[T]) ElseIfF(condition bool, resultF func() T) *ifElse[T] {
	if !i.done && condition {
		i.result = resultF()
		i.done = true
	}

	return i
}

// Else.
// Play: https://go.dev/play/p/WSw3ApMxhyW
func (i *ifElse[T]) Else(result T) T {
	if i.done {
		return i.result
	}

	return result
}

// ElseF.
// Play: https://go.dev/play/p/WSw3ApMxhyW
func (i *ifElse[T]) ElseF(resultF func() T) T {
	if i.done {
		return i.result
	}

	return resultF()
}

type switchCase[T comparable, R any] struct {
	predicate T
	result    R
	done      bool
}

// Switch is a pure functional switch/case/default statement.
// Play: https://go.dev/play/p/TGbKUMAeRUd
func Switch[T comparable, R any](predicate T) *switchCase[T, R] {
	var result R

	return &switchCase[T, R]{
		predicate,
		result,
		false,
	}
}

// Case.
// Play: https://go.dev/play/p/TGbKUMAeRUd
func (s *switchCase[T, R]) Case(val T, result R) *switchCase[T, R] {
	if !s.done && s.predicate == val {
		s.result = result
		s.done = true
	}

	return s
}

// CaseF.
// Play: https://go.dev/play/p/TGbKUMAeRUd
func (s *switchCase[T, R]) CaseF(val T, cb func() R) *switchCase[T, R] {
	if !s.done && s.predicate == val {
		s.result = cb()
		s.done = true
	}

	return s
}

// Default.
// Play: https://go.dev/play/p/TGbKUMAeRUd
func (s *switchCase[T, R]) Default(result R) R {
	if !s.done {
		s.result = result
	}

	return s.result
}

// DefaultF.
// Play: https://go.dev/play/p/TGbKUMAeRUd
func (s *switchCase[T, R]) DefaultF(cb func() R) R {
	if !s.done {
		s.result = cb()
	}

	return s.result
}
 07070100000A8E000081A4000000000000000000000001645E367C0000007D000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/samber/lo/constraints.go    package lo

// Clonable defines a constraint of types having Clone() T method.
type Clonable[T any] interface {
	Clone() T
}
   07070100000A8F000081A4000000000000000000000001645E367C0000251E000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/samber/lo/errors.go package lo

import (
	"errors"
	"fmt"
	"reflect"
)

// Validate is a helper that creates an error when a condition is not met.
// Play: https://go.dev/play/p/vPyh51XpCBt
func Validate(ok bool, format string, args ...any) error {
	if !ok {
		return fmt.Errorf(fmt.Sprintf(format, args...))
	}
	return nil
}

func messageFromMsgAndArgs(msgAndArgs ...interface{}) string {
	if len(msgAndArgs) == 1 {
		if msgAsStr, ok := msgAndArgs[0].(string); ok {
			return msgAsStr
		}
		return fmt.Sprintf("%+v", msgAndArgs[0])
	}
	if len(msgAndArgs) > 1 {
		return fmt.Sprintf(msgAndArgs[0].(string), msgAndArgs[1:]...)
	}
	return ""
}

// must panics if err is error or false.
func must(err any, messageArgs ...interface{}) {
	if err == nil {
		return
	}

	switch e := err.(type) {
	case bool:
		if !e {
			message := messageFromMsgAndArgs(messageArgs...)
			if message == "" {
				message = "not ok"
			}

			panic(message)
		}

	case error:
		message := messageFromMsgAndArgs(messageArgs...)
		if message != "" {
			panic(message + ": " + e.Error())
		} else {
			panic(e.Error())
		}

	default:
		panic("must: invalid err type '" + reflect.TypeOf(err).Name() + "', should either be a bool or an error")
	}
}

// Must is a helper that wraps a call to a function returning a value and an error
// and panics if err is error or false.
// Play: https://go.dev/play/p/TMoWrRp3DyC
func Must[T any](val T, err any, messageArgs ...interface{}) T {
	must(err, messageArgs...)
	return val
}

// Must0 has the same behavior as Must, but callback returns no variable.
// Play: https://go.dev/play/p/TMoWrRp3DyC
func Must0(err any, messageArgs ...interface{}) {
	must(err, messageArgs...)
}

// Must1 is an alias to Must
// Play: https://go.dev/play/p/TMoWrRp3DyC
func Must1[T any](val T, err any, messageArgs ...interface{}) T {
	return Must(val, err, messageArgs...)
}

// Must2 has the same behavior as Must, but callback returns 2 variables.
// Play: https://go.dev/play/p/TMoWrRp3DyC
func Must2[T1 any, T2 any](val1 T1, val2 T2, err any, messageArgs ...interface{}) (T1, T2) {
	must(err, messageArgs...)
	return val1, val2
}

// Must3 has the same behavior as Must, but callback returns 3 variables.
// Play: https://go.dev/play/p/TMoWrRp3DyC
func Must3[T1 any, T2 any, T3 any](val1 T1, val2 T2, val3 T3, err any, messageArgs ...interface{}) (T1, T2, T3) {
	must(err, messageArgs...)
	return val1, val2, val3
}

// Must4 has the same behavior as Must, but callback returns 4 variables.
// Play: https://go.dev/play/p/TMoWrRp3DyC
func Must4[T1 any, T2 any, T3 any, T4 any](val1 T1, val2 T2, val3 T3, val4 T4, err any, messageArgs ...interface{}) (T1, T2, T3, T4) {
	must(err, messageArgs...)
	return val1, val2, val3, val4
}

// Must5 has the same behavior as Must, but callback returns 5 variables.
// Play: https://go.dev/play/p/TMoWrRp3DyC
func Must5[T1 any, T2 any, T3 any, T4 any, T5 any](val1 T1, val2 T2, val3 T3, val4 T4, val5 T5, err any, messageArgs ...interface{}) (T1, T2, T3, T4, T5) {
	must(err, messageArgs...)
	return val1, val2, val3, val4, val5
}

// Must6 has the same behavior as Must, but callback returns 6 variables.
// Play: https://go.dev/play/p/TMoWrRp3DyC
func Must6[T1 any, T2 any, T3 any, T4 any, T5 any, T6 any](val1 T1, val2 T2, val3 T3, val4 T4, val5 T5, val6 T6, err any, messageArgs ...interface{}) (T1, T2, T3, T4, T5, T6) {
	must(err, messageArgs...)
	return val1, val2, val3, val4, val5, val6
}

// Try calls the function and return false in case of error.
func Try(callback func() error) (ok bool) {
	ok = true

	defer func() {
		if r := recover(); r != nil {
			ok = false
		}
	}()

	err := callback()
	if err != nil {
		ok = false
	}

	return
}

// Try0 has the same behavior as Try, but callback returns no variable.
// Play: https://go.dev/play/p/mTyyWUvn9u4
func Try0(callback func()) bool {
	return Try(func() error {
		callback()
		return nil
	})
}

// Try1 is an alias to Try.
// Play: https://go.dev/play/p/mTyyWUvn9u4
func Try1(callback func() error) bool {
	return Try(callback)
}

// Try2 has the same behavior as Try, but callback returns 2 variables.
// Play: https://go.dev/play/p/mTyyWUvn9u4
func Try2[T any](callback func() (T, error)) bool {
	return Try(func() error {
		_, err := callback()
		return err
	})
}

// Try3 has the same behavior as Try, but callback returns 3 variables.
// Play: https://go.dev/play/p/mTyyWUvn9u4
func Try3[T, R any](callback func() (T, R, error)) bool {
	return Try(func() error {
		_, _, err := callback()
		return err
	})
}

// Try4 has the same behavior as Try, but callback returns 4 variables.
// Play: https://go.dev/play/p/mTyyWUvn9u4
func Try4[T, R, S any](callback func() (T, R, S, error)) bool {
	return Try(func() error {
		_, _, _, err := callback()
		return err
	})
}

// Try5 has the same behavior as Try, but callback returns 5 variables.
// Play: https://go.dev/play/p/mTyyWUvn9u4
func Try5[T, R, S, Q any](callback func() (T, R, S, Q, error)) bool {
	return Try(func() error {
		_, _, _, _, err := callback()
		return err
	})
}

// Try6 has the same behavior as Try, but callback returns 6 variables.
// Play: https://go.dev/play/p/mTyyWUvn9u4
func Try6[T, R, S, Q, U any](callback func() (T, R, S, Q, U, error)) bool {
	return Try(func() error {
		_, _, _, _, _, err := callback()
		return err
	})
}

// TryOr has the same behavior as Must, but returns a default value in case of error.
// Play: https://go.dev/play/p/B4F7Wg2Zh9X
func TryOr[A any](callback func() (A, error), fallbackA A) (A, bool) {
	return TryOr1(callback, fallbackA)
}

// TryOr1 has the same behavior as Must, but returns a default value in case of error.
// Play: https://go.dev/play/p/B4F7Wg2Zh9X
func TryOr1[A any](callback func() (A, error), fallbackA A) (A, bool) {
	ok := false

	Try0(func() {
		a, err := callback()
		if err == nil {
			fallbackA = a
			ok = true
		}
	})

	return fallbackA, ok
}

// TryOr2 has the same behavior as Must, but returns a default value in case of error.
// Play: https://go.dev/play/p/B4F7Wg2Zh9X
func TryOr2[A any, B any](callback func() (A, B, error), fallbackA A, fallbackB B) (A, B, bool) {
	ok := false

	Try0(func() {
		a, b, err := callback()
		if err == nil {
			fallbackA = a
			fallbackB = b
			ok = true
		}
	})

	return fallbackA, fallbackB, ok
}

// TryOr3 has the same behavior as Must, but returns a default value in case of error.
// Play: https://go.dev/play/p/B4F7Wg2Zh9X
func TryOr3[A any, B any, C any](callback func() (A, B, C, error), fallbackA A, fallbackB B, fallbackC C) (A, B, C, bool) {
	ok := false

	Try0(func() {
		a, b, c, err := callback()
		if err == nil {
			fallbackA = a
			fallbackB = b
			fallbackC = c
			ok = true
		}
	})

	return fallbackA, fallbackB, fallbackC, ok
}

// TryOr4 has the same behavior as Must, but returns a default value in case of error.
// Play: https://go.dev/play/p/B4F7Wg2Zh9X
func TryOr4[A any, B any, C any, D any](callback func() (A, B, C, D, error), fallbackA A, fallbackB B, fallbackC C, fallbackD D) (A, B, C, D, bool) {
	ok := false

	Try0(func() {
		a, b, c, d, err := callback()
		if err == nil {
			fallbackA = a
			fallbackB = b
			fallbackC = c
			fallbackD = d
			ok = true
		}
	})

	return fallbackA, fallbackB, fallbackC, fallbackD, ok
}

// TryOr5 has the same behavior as Must, but returns a default value in case of error.
// Play: https://go.dev/play/p/B4F7Wg2Zh9X
func TryOr5[A any, B any, C any, D any, E any](callback func() (A, B, C, D, E, error), fallbackA A, fallbackB B, fallbackC C, fallbackD D, fallbackE E) (A, B, C, D, E, bool) {
	ok := false

	Try0(func() {
		a, b, c, d, e, err := callback()
		if err == nil {
			fallbackA = a
			fallbackB = b
			fallbackC = c
			fallbackD = d
			fallbackE = e
			ok = true
		}
	})

	return fallbackA, fallbackB, fallbackC, fallbackD, fallbackE, ok
}

// TryOr6 has the same behavior as Must, but returns a default value in case of error.
// Play: https://go.dev/play/p/B4F7Wg2Zh9X
func TryOr6[A any, B any, C any, D any, E any, F any](callback func() (A, B, C, D, E, F, error), fallbackA A, fallbackB B, fallbackC C, fallbackD D, fallbackE E, fallbackF F) (A, B, C, D, E, F, bool) {
	ok := false

	Try0(func() {
		a, b, c, d, e, f, err := callback()
		if err == nil {
			fallbackA = a
			fallbackB = b
			fallbackC = c
			fallbackD = d
			fallbackE = e
			fallbackF = f
			ok = true
		}
	})

	return fallbackA, fallbackB, fallbackC, fallbackD, fallbackE, fallbackF, ok
}

// TryWithErrorValue has the same behavior as Try, but also returns value passed to panic.
// Play: https://go.dev/play/p/Kc7afQIT2Fs
func TryWithErrorValue(callback func() error) (errorValue any, ok bool) {
	ok = true

	defer func() {
		if r := recover(); r != nil {
			ok = false
			errorValue = r
		}
	}()

	err := callback()
	if err != nil {
		ok = false
		errorValue = err
	}

	return
}

// TryCatch has the same behavior as Try, but calls the catch function in case of error.
// Play: https://go.dev/play/p/PnOON-EqBiU
func TryCatch(callback func() error, catch func()) {
	if !Try(callback) {
		catch()
	}
}

// TryCatchWithErrorValue has the same behavior as TryWithErrorValue, but calls the catch function in case of error.
// Play: https://go.dev/play/p/8Pc9gwX_GZO
func TryCatchWithErrorValue(callback func() error, catch func(any)) {
	if err, ok := TryWithErrorValue(callback); !ok {
		catch(err)
	}
}

// ErrorsAs is a shortcut for errors.As(err, &&T).
// Play: https://go.dev/play/p/8wk5rH8UfrE
func ErrorsAs[T error](err error) (T, bool) {
	var t T
	ok := errors.As(err, &t)
	return t, ok
}
  07070100000A90000081A4000000000000000000000001645E367C000022A4000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/samber/lo/find.go   package lo

import (
	"fmt"
	"math/rand"

	"golang.org/x/exp/constraints"
)

// import "golang.org/x/exp/constraints"

// IndexOf returns the index at which the first occurrence of a value is found in an array or return -1
// if the value cannot be found.
func IndexOf[T comparable](collection []T, element T) int {
	for i, item := range collection {
		if item == element {
			return i
		}
	}

	return -1
}

// LastIndexOf returns the index at which the last occurrence of a value is found in an array or return -1
// if the value cannot be found.
func LastIndexOf[T comparable](collection []T, element T) int {
	length := len(collection)

	for i := length - 1; i >= 0; i-- {
		if collection[i] == element {
			return i
		}
	}

	return -1
}

// Find search an element in a slice based on a predicate. It returns element and true if element was found.
func Find[T any](collection []T, predicate func(item T) bool) (T, bool) {
	for _, item := range collection {
		if predicate(item) {
			return item, true
		}
	}

	var result T
	return result, false
}

// FindIndexOf searches an element in a slice based on a predicate and returns the index and true.
// It returns -1 and false if the element is not found.
func FindIndexOf[T any](collection []T, predicate func(item T) bool) (T, int, bool) {
	for i, item := range collection {
		if predicate(item) {
			return item, i, true
		}
	}

	var result T
	return result, -1, false
}

// FindLastIndexOf searches last element in a slice based on a predicate and returns the index and true.
// It returns -1 and false if the element is not found.
func FindLastIndexOf[T any](collection []T, predicate func(item T) bool) (T, int, bool) {
	length := len(collection)

	for i := length - 1; i >= 0; i-- {
		if predicate(collection[i]) {
			return collection[i], i, true
		}
	}

	var result T
	return result, -1, false
}

// FindOrElse search an element in a slice based on a predicate. It returns the element if found or a given fallback value otherwise.
func FindOrElse[T any](collection []T, fallback T, predicate func(item T) bool) T {
	for _, item := range collection {
		if predicate(item) {
			return item
		}
	}

	return fallback
}

// FindKey returns the key of the first value matching.
func FindKey[K comparable, V comparable](object map[K]V, value V) (K, bool) {
	for k, v := range object {
		if v == value {
			return k, true
		}
	}

	return Empty[K](), false
}

// FindKeyBy returns the key of the first element predicate returns truthy for.
func FindKeyBy[K comparable, V any](object map[K]V, predicate func(key K, value V) bool) (K, bool) {
	for k, v := range object {
		if predicate(k, v) {
			return k, true
		}
	}

	return Empty[K](), false
}

// FindUniques returns a slice with all the unique elements of the collection.
// The order of result values is determined by the order they occur in the collection.
func FindUniques[T comparable](collection []T) []T {
	isDupl := make(map[T]bool, len(collection))

	for _, item := range collection {
		duplicated, ok := isDupl[item]
		if !ok {
			isDupl[item] = false
		} else if !duplicated {
			isDupl[item] = true
		}
	}

	result := make([]T, 0, len(collection)-len(isDupl))

	for _, item := range collection {
		if duplicated := isDupl[item]; !duplicated {
			result = append(result, item)
		}
	}

	return result
}

// FindUniquesBy returns a slice with all the unique elements of the collection.
// The order of result values is determined by the order they occur in the array. It accepts `iteratee` which is
// invoked for each element in array to generate the criterion by which uniqueness is computed.
func FindUniquesBy[T any, U comparable](collection []T, iteratee func(item T) U) []T {
	isDupl := make(map[U]bool, len(collection))

	for _, item := range collection {
		key := iteratee(item)

		duplicated, ok := isDupl[key]
		if !ok {
			isDupl[key] = false
		} else if !duplicated {
			isDupl[key] = true
		}
	}

	result := make([]T, 0, len(collection)-len(isDupl))

	for _, item := range collection {
		key := iteratee(item)

		if duplicated := isDupl[key]; !duplicated {
			result = append(result, item)
		}
	}

	return result
}

// FindDuplicates returns a slice with the first occurrence of each duplicated elements of the collection.
// The order of result values is determined by the order they occur in the collection.
func FindDuplicates[T comparable](collection []T) []T {
	isDupl := make(map[T]bool, len(collection))

	for _, item := range collection {
		duplicated, ok := isDupl[item]
		if !ok {
			isDupl[item] = false
		} else if !duplicated {
			isDupl[item] = true
		}
	}

	result := make([]T, 0, len(collection)-len(isDupl))

	for _, item := range collection {
		if duplicated := isDupl[item]; duplicated {
			result = append(result, item)
			isDupl[item] = false
		}
	}

	return result
}

// FindDuplicatesBy returns a slice with the first occurrence of each duplicated elements of the collection.
// The order of result values is determined by the order they occur in the array. It accepts `iteratee` which is
// invoked for each element in array to generate the criterion by which uniqueness is computed.
func FindDuplicatesBy[T any, U comparable](collection []T, iteratee func(item T) U) []T {
	isDupl := make(map[U]bool, len(collection))

	for _, item := range collection {
		key := iteratee(item)

		duplicated, ok := isDupl[key]
		if !ok {
			isDupl[key] = false
		} else if !duplicated {
			isDupl[key] = true
		}
	}

	result := make([]T, 0, len(collection)-len(isDupl))

	for _, item := range collection {
		key := iteratee(item)

		if duplicated := isDupl[key]; duplicated {
			result = append(result, item)
			isDupl[key] = false
		}
	}

	return result
}

// Min search the minimum value of a collection.
// Returns zero value when collection is empty.
func Min[T constraints.Ordered](collection []T) T {
	var min T

	if len(collection) == 0 {
		return min
	}

	min = collection[0]

	for i := 1; i < len(collection); i++ {
		item := collection[i]

		if item < min {
			min = item
		}
	}

	return min
}

// MinBy search the minimum value of a collection using the given comparison function.
// If several values of the collection are equal to the smallest value, returns the first such value.
// Returns zero value when collection is empty.
func MinBy[T any](collection []T, comparison func(a T, b T) bool) T {
	var min T

	if len(collection) == 0 {
		return min
	}

	min = collection[0]

	for i := 1; i < len(collection); i++ {
		item := collection[i]

		if comparison(item, min) {
			min = item
		}
	}

	return min
}

// Max searches the maximum value of a collection.
// Returns zero value when collection is empty.
func Max[T constraints.Ordered](collection []T) T {
	var max T

	if len(collection) == 0 {
		return max
	}

	max = collection[0]

	for i := 1; i < len(collection); i++ {
		item := collection[i]

		if item > max {
			max = item
		}
	}

	return max
}

// MaxBy search the maximum value of a collection using the given comparison function.
// If several values of the collection are equal to the greatest value, returns the first such value.
// Returns zero value when collection is empty.
func MaxBy[T any](collection []T, comparison func(a T, b T) bool) T {
	var max T

	if len(collection) == 0 {
		return max
	}

	max = collection[0]

	for i := 1; i < len(collection); i++ {
		item := collection[i]

		if comparison(item, max) {
			max = item
		}
	}

	return max
}

// Last returns the last element of a collection or error if empty.
func Last[T any](collection []T) (T, error) {
	length := len(collection)

	if length == 0 {
		var t T
		return t, fmt.Errorf("last: cannot extract the last element of an empty slice")
	}

	return collection[length-1], nil
}

// Nth returns the element at index `nth` of collection. If `nth` is negative, the nth element
// from the end is returned. An error is returned when nth is out of slice bounds.
func Nth[T any, N constraints.Integer](collection []T, nth N) (T, error) {
	n := int(nth)
	l := len(collection)
	if n >= l || -n > l {
		var t T
		return t, fmt.Errorf("nth: %d out of slice bounds", n)
	}

	if n >= 0 {
		return collection[n], nil
	}
	return collection[l+n], nil
}

// Sample returns a random item from collection.
func Sample[T any](collection []T) T {
	size := len(collection)
	if size == 0 {
		return Empty[T]()
	}

	return collection[rand.Intn(size)]
}

// Samples returns N random unique items from collection.
func Samples[T any](collection []T, count int) []T {
	size := len(collection)

	copy := append([]T{}, collection...)

	results := []T{}

	for i := 0; i < size && i < count; i++ {
		copyLength := size - i

		index := rand.Intn(size - i)
		results = append(results, copy[index])

		// Removes element.
		// It is faster to swap with last element and remove it.
		copy[index] = copy[copyLength-1]
		copy = copy[:copyLength-1]
	}

	return results
}
07070100000A91000081A4000000000000000000000001645E367C0000060F000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/samber/lo/func.go   package lo

// Partial returns new function that, when called, has its first argument set to the provided value.
func Partial[T1, T2, R any](f func(a T1, b T2) R, arg1 T1) func(T2) R {
	return func(t2 T2) R {
		return f(arg1, t2)
	}
}

// Partial1 returns new function that, when called, has its first argument set to the provided value.
func Partial1[T1, T2, R any](f func(T1, T2) R, arg1 T1) func(T2) R {
	return Partial(f, arg1)
}

// Partial2 returns new function that, when called, has its first argument set to the provided value.
func Partial2[T1, T2, T3, R any](f func(T1, T2, T3) R, arg1 T1) func(T2, T3) R {
	return func(t2 T2, t3 T3) R {
		return f(arg1, t2, t3)
	}
}

// Partial3 returns new function that, when called, has its first argument set to the provided value.
func Partial3[T1, T2, T3, T4, R any](f func(T1, T2, T3, T4) R, arg1 T1) func(T2, T3, T4) R {
	return func(t2 T2, t3 T3, t4 T4) R {
		return f(arg1, t2, t3, t4)
	}
}

// Partial4 returns new function that, when called, has its first argument set to the provided value.
func Partial4[T1, T2, T3, T4, T5, R any](f func(T1, T2, T3, T4, T5) R, arg1 T1) func(T2, T3, T4, T5) R {
	return func(t2 T2, t3 T3, t4 T4, t5 T5) R {
		return f(arg1, t2, t3, t4, t5)
	}
}

// Partial5 returns new function that, when called, has its first argument set to the provided value
func Partial5[T1, T2, T3, T4, T5, T6, R any](f func(T1, T2, T3, T4, T5, T6) R, arg1 T1) func(T2, T3, T4, T5, T6) R {
	return func(t2 T2, t3 T3, t4 T4, t5 T5, t6 T6) R {
		return f(arg1, t2, t3, t4, t5, t6)
	}
}
 07070100000A92000081A4000000000000000000000001645E367C00001069000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/samber/lo/intersect.go  package lo

// Contains returns true if an element is present in a collection.
func Contains[T comparable](collection []T, element T) bool {
	for _, item := range collection {
		if item == element {
			return true
		}
	}

	return false
}

// ContainsBy returns true if predicate function return true.
func ContainsBy[T any](collection []T, predicate func(item T) bool) bool {
	for _, item := range collection {
		if predicate(item) {
			return true
		}
	}

	return false
}

// Every returns true if all elements of a subset are contained into a collection or if the subset is empty.
func Every[T comparable](collection []T, subset []T) bool {
	for _, elem := range subset {
		if !Contains(collection, elem) {
			return false
		}
	}

	return true
}

// EveryBy returns true if the predicate returns true for all of the elements in the collection or if the collection is empty.
func EveryBy[T any](collection []T, predicate func(item T) bool) bool {
	for _, v := range collection {
		if !predicate(v) {
			return false
		}
	}

	return true
}

// Some returns true if at least 1 element of a subset is contained into a collection.
// If the subset is empty Some returns false.
func Some[T comparable](collection []T, subset []T) bool {
	for _, elem := range subset {
		if Contains(collection, elem) {
			return true
		}
	}

	return false
}

// SomeBy returns true if the predicate returns true for any of the elements in the collection.
// If the collection is empty SomeBy returns false.
func SomeBy[T any](collection []T, predicate func(item T) bool) bool {
	for _, v := range collection {
		if predicate(v) {
			return true
		}
	}

	return false
}

// None returns true if no element of a subset are contained into a collection or if the subset is empty.
func None[T comparable](collection []T, subset []T) bool {
	for _, elem := range subset {
		if Contains(collection, elem) {
			return false
		}
	}

	return true
}

// NoneBy returns true if the predicate returns true for none of the elements in the collection or if the collection is empty.
func NoneBy[T any](collection []T, predicate func(item T) bool) bool {
	for _, v := range collection {
		if predicate(v) {
			return false
		}
	}

	return true
}

// Intersect returns the intersection between two collections.
func Intersect[T comparable](list1 []T, list2 []T) []T {
	result := []T{}
	seen := map[T]struct{}{}

	for _, elem := range list1 {
		seen[elem] = struct{}{}
	}

	for _, elem := range list2 {
		if _, ok := seen[elem]; ok {
			result = append(result, elem)
		}
	}

	return result
}

// Difference returns the difference between two collections.
// The first value is the collection of element absent of list2.
// The second value is the collection of element absent of list1.
func Difference[T comparable](list1 []T, list2 []T) ([]T, []T) {
	left := []T{}
	right := []T{}

	seenLeft := map[T]struct{}{}
	seenRight := map[T]struct{}{}

	for _, elem := range list1 {
		seenLeft[elem] = struct{}{}
	}

	for _, elem := range list2 {
		seenRight[elem] = struct{}{}
	}

	for _, elem := range list1 {
		if _, ok := seenRight[elem]; !ok {
			left = append(left, elem)
		}
	}

	for _, elem := range list2 {
		if _, ok := seenLeft[elem]; !ok {
			right = append(right, elem)
		}
	}

	return left, right
}

// Union returns all distinct elements from given collections.
// result returns will not change the order of elements relatively.
func Union[T comparable](lists ...[]T) []T {
	result := []T{}
	seen := map[T]struct{}{}

	for _, list := range lists {
		for _, e := range list {
			if _, ok := seen[e]; !ok {
				seen[e] = struct{}{}
				result = append(result, e)
			}
		}
	}

	return result
}

// Without returns slice excluding all given values.
func Without[T comparable](collection []T, exclude ...T) []T {
	result := make([]T, 0, len(collection))
	for _, e := range collection {
		if !Contains(exclude, e) {
			result = append(result, e)
		}
	}
	return result
}

// WithoutEmpty returns slice excluding empty values.
func WithoutEmpty[T comparable](collection []T) []T {
	var empty T

	result := make([]T, 0, len(collection))
	for _, e := range collection {
		if e != empty {
			result = append(result, e)
		}
	}

	return result
}
   07070100000A93000081A4000000000000000000000001645E367C0000143C000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/github.com/samber/lo/map.go    package lo

// Keys creates an array of the map keys.
// Play: https://go.dev/play/p/Uu11fHASqrU
func Keys[K comparable, V any](in map[K]V) []K {
	result := make([]K, 0, len(in))

	for k := range in {
		result = append(result, k)
	}

	return result
}

// Values creates an array of the map values.
// Play: https://go.dev/play/p/nnRTQkzQfF6
func Values[K comparable, V any](in map[K]V) []V {
	result := make([]V, 0, len(in))

	for _, v := range in {
		result = append(result, v)
	}

	return result
}

// PickBy returns same map type filtered by given predicate.
// Play: https://go.dev/play/p/kdg8GR_QMmf
func PickBy[K comparable, V any](in map[K]V, predicate func(key K, value V) bool) map[K]V {
	r := map[K]V{}
	for k, v := range in {
		if predicate(k, v) {
			r[k] = v
		}
	}
	return r
}

// PickByKeys returns same map type filtered by given keys.
// Play: https://go.dev/play/p/R1imbuci9qU
func PickByKeys[K comparable, V any](in map[K]V, keys []K) map[K]V {
	r := map[K]V{}
	for k, v := range in {
		if Contains(keys, k) {
			r[k] = v
		}
	}
	return r
}

// PickByValues returns same map type filtered by given values.
// Play: https://go.dev/play/p/1zdzSvbfsJc
func PickByValues[K comparable, V comparable](in map[K]V, values []V) map[K]V {
	r := map[K]V{}
	for k, v := range in {
		if Contains(values, v) {
			r[k] = v
		}
	}
	return r
}

// OmitBy returns same map type filtered by given predicate.
// Play: https://go.dev/play/p/EtBsR43bdsd
func OmitBy[K comparable, V any](in map[K]V, predicate func(key K, value V) bool) map[K]V {
	r := map[K]V{}
	for k, v := range in {
		if !predicate(k, v) {
			r[k] = v
		}
	}
	return r
}

// OmitByKeys returns same map type filtered by given keys.
// Play: https://go.dev/play/p/t1QjCrs-ysk
func OmitByKeys[K comparable, V any](in map[K]V, keys []K) map[K]V {
	r := map[K]V{}
	for k, v := range in {
		if !Contains(keys, k) {
			r[k] = v
		}
	}
	return r
}

// OmitByValues returns same map type filtered by given values.
// Play: https://go.dev/play/p/9UYZi-hrs8j
func OmitByValues[K comparable, V comparable](in map[K]V, values []V) map[K]V {
	r := map[K]V{}
	for k, v := range in {
		if !Contains(values, v) {
			r[k] = v
		}
	}
	return r
}

// Entries transforms a map into array of key/value pairs.
// Play:
func Entries[K comparable, V any](in map[K]V) []Entry[K, V] {
	entries := make([]Entry[K, V], 0, len(in))

	for k, v := range in {
		entries = append(entries, Entry[K, V]{
			Key:   k,
			Value: v,
		})
	}

	return entries
}

// ToPairs transforms a map into array of key/value pairs.
// Alias of Entries().
// Play: https://go.dev/play/p/3Dhgx46gawJ
func ToPairs[K comparable, V any](in map[K]V) []Entry[K, V] {
	return Entries(in)
}

// FromEntries transforms an array of key/value pairs into a map.
// Play: https://go.dev/play/p/oIr5KHFGCEN
func FromEntries[K comparable, V any](entries []Entry[K, V]) map[K]V {
	out := map[K]V{}

	for _, v := range entries {
		out[v.Key] = v.Value
	}

	return out
}

// FromPairs transforms an array of key/value pairs into a map.
// Alias of FromEntries().
// Play: https://go.dev/play/p/oIr5KHFGCEN
func FromPairs[K comparable, V any](entries []Entry[K, V]) map[K]V {
	return FromEntries(entries)
}

// Invert creates a map composed of the inverted keys and values. If map
// contains duplicate values, subsequent values overwrite property assignments
// of previous values.
// Play: https://go.dev/play/p/rFQ4rak6iA1
func Invert[K comparable, V comparable](in map[K]V) map[V]K {
	out := map[V]K{}

	for k, v := range in {
		out[v] = k
	}

	return out
}

// Assign merges multiple maps from left to right.
// Play: https://go.dev/play/p/VhwfJOyxf5o
func Assign[K comparable, V any](maps ...map[K]V) map[K]V {
	out := map[K]V{}

	for _, m := range maps {
		for k, v := range m {
			out[k] = v
		}
	}

	return out
}

// MapKeys manipulates a map keys and transforms it to a map of another type.
// Play: https://go.dev/play/p/9_4WPIqOetJ
func MapKeys[K comparable, V any, R comparable](in map[K]V, iteratee func(value V, key K) R) map[R]V {
	result := map[R]V{}

	for k, v := range in {
		result[iteratee(v, k)] = v
	}

	return result
}

// MapValues manipulates a map values and transforms it to a map of another type.
// Play: https://go.dev/play/p/T_8xAfvcf0W
func MapValues[K comparable, V any, R any](in map[K]V, iteratee func(value V, key K) R) map[K]R {
	result := map[K]R{}

	for k, v := range in {
		result[k] = iteratee(v, k)
	}

	return result
}

// MapEntries manipulates a map entries and transforms it to a map of another type.
// Play: https://go.dev/play/p/VuvNQzxKimT
func MapEntries[K1 comparable, V1 any, K2 comparable, V2 any](in map[K1]V1, iteratee func(key K1, value V1) (K2, V2)) map[K2]V2 {
	result := make(map[K2]V2, len(in))

	for k1, v1 := range in {
		k2, v2 := iteratee(k1, v1)
		result[k2] = v2
	}

	return result
}

// MapToSlice transforms a map into a slice based on specific iteratee
// Play: https://go.dev/play/p/ZuiCZpDt6LD
func MapToSlice[K comparable, V any, R any](in map[K]V, iteratee func(key K, value V) R) []R {
	result := make([]R, 0, len(in))

	for k, v := range in {
		result = append(result, iteratee(k, v))
	}

	return result
}
07070100000A94000081A4000000000000000000000001645E367C000009A6000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/samber/lo/math.go   package lo

import "golang.org/x/exp/constraints"

// Range creates an array of numbers (positive and/or negative) with given length.
// Play: https://go.dev/play/p/0r6VimXAi9H
func Range(elementNum int) []int {
	length := If(elementNum < 0, -elementNum).Else(elementNum)
	result := make([]int, length)
	step := If(elementNum < 0, -1).Else(1)
	for i, j := 0, 0; i < length; i, j = i+1, j+step {
		result[i] = j
	}
	return result
}

// RangeFrom creates an array of numbers from start with specified length.
// Play: https://go.dev/play/p/0r6VimXAi9H
func RangeFrom[T constraints.Integer | constraints.Float](start T, elementNum int) []T {
	length := If(elementNum < 0, -elementNum).Else(elementNum)
	result := make([]T, length)
	step := If(elementNum < 0, -1).Else(1)
	for i, j := 0, start; i < length; i, j = i+1, j+T(step) {
		result[i] = j
	}
	return result
}

// RangeWithSteps creates an array of numbers (positive and/or negative) progressing from start up to, but not including end.
// step set to zero will return empty array.
// Play: https://go.dev/play/p/0r6VimXAi9H
func RangeWithSteps[T constraints.Integer | constraints.Float](start, end, step T) []T {
	result := []T{}
	if start == end || step == 0 {
		return result
	}
	if start < end {
		if step < 0 {
			return result
		}
		for i := start; i < end; i += step {
			result = append(result, i)
		}
		return result
	}
	if step > 0 {
		return result
	}
	for i := start; i > end; i += step {
		result = append(result, i)
	}
	return result
}

// Clamp clamps number within the inclusive lower and upper bounds.
// Play: https://go.dev/play/p/RU4lJNC2hlI
func Clamp[T constraints.Ordered](value T, min T, max T) T {
	if value < min {
		return min
	} else if value > max {
		return max
	}
	return value
}

// Sum sums the values in a collection. If collection is empty 0 is returned.
// Play: https://go.dev/play/p/upfeJVqs4Bt
func Sum[T constraints.Float | constraints.Integer | constraints.Complex](collection []T) T {
	var sum T = 0
	for _, val := range collection {
		sum += val
	}
	return sum
}

// SumBy summarizes the values in a collection using the given return value from the iteration function. If collection is empty 0 is returned.
// Play: https://go.dev/play/p/Dz_a_7jN_ca
func SumBy[T any, R constraints.Float | constraints.Integer | constraints.Complex](collection []T, iteratee func(item T) R) R {
	var sum R = 0
	for _, item := range collection {
		sum = sum + iteratee(item)
	}
	return sum
}
  07070100000A95000081A4000000000000000000000001645E367C0000145E000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/samber/lo/retry.go  package lo

import (
	"sync"
	"time"
)

type debounce struct {
	after     time.Duration
	mu        *sync.Mutex
	timer     *time.Timer
	done      bool
	callbacks []func()
}

func (d *debounce) reset() *debounce {
	d.mu.Lock()
	defer d.mu.Unlock()

	if d.done {
		return d
	}

	if d.timer != nil {
		d.timer.Stop()
	}

	d.timer = time.AfterFunc(d.after, func() {
		for _, f := range d.callbacks {
			f()
		}
	})
	return d
}

func (d *debounce) cancel() {
	d.mu.Lock()
	defer d.mu.Unlock()

	if d.timer != nil {
		d.timer.Stop()
		d.timer = nil
	}

	d.done = true
}

// NewDebounce creates a debounced instance that delays invoking functions given until after wait milliseconds have elapsed.
// Play: https://go.dev/play/p/mz32VMK2nqe
func NewDebounce(duration time.Duration, f ...func()) (func(), func()) {
	d := &debounce{
		after:     duration,
		mu:        new(sync.Mutex),
		timer:     nil,
		done:      false,
		callbacks: f,
	}

	return func() {
		d.reset()
	}, d.cancel
}

// Attempt invokes a function N times until it returns valid output. Returning either the caught error or nil. When first argument is less than `1`, the function runs until a successful response is returned.
// Play: https://go.dev/play/p/3ggJZ2ZKcMj
func Attempt(maxIteration int, f func(index int) error) (int, error) {
	var err error

	for i := 0; maxIteration <= 0 || i < maxIteration; i++ {
		// for retries >= 0 {
		err = f(i)
		if err == nil {
			return i + 1, nil
		}
	}

	return maxIteration, err
}

// AttemptWithDelay invokes a function N times until it returns valid output,
// with a pause between each call. Returning either the caught error or nil.
// When first argument is less than `1`, the function runs until a successful
// response is returned.
// Play: https://go.dev/play/p/tVs6CygC7m1
func AttemptWithDelay(maxIteration int, delay time.Duration, f func(index int, duration time.Duration) error) (int, time.Duration, error) {
	var err error

	start := time.Now()

	for i := 0; maxIteration <= 0 || i < maxIteration; i++ {
		err = f(i, time.Since(start))
		if err == nil {
			return i + 1, time.Since(start), nil
		}

		if maxIteration <= 0 || i+1 < maxIteration {
			time.Sleep(delay)
		}
	}

	return maxIteration, time.Since(start), err
}

// AttemptWhile invokes a function N times until it returns valid output.
// Returning either the caught error or nil, and along with a bool value to identify
// whether it needs invoke function continuously. It will terminate the invoke
// immediately if second bool value is returned with falsy value. When first
// argument is less than `1`, the function runs until a successful response is
// returned.
func AttemptWhile(maxIteration int, f func(int) (error, bool)) (int, error) {
	var err error
	var shouldContinueInvoke bool

	for i := 0; maxIteration <= 0 || i < maxIteration; i++ {
		// for retries >= 0 {
		err, shouldContinueInvoke = f(i)
		if !shouldContinueInvoke { // if shouldContinueInvoke is false, then return immediately
			return i + 1, err
		}
		if err == nil {
			return i + 1, nil
		}
	}

	return maxIteration, err
}

// AttemptWhileWithDelay invokes a function N times until it returns valid output,
// with a pause between each call. Returning either the caught error or nil, and along
// with a bool value to identify whether it needs to invoke function continuously.
// It will terminate the invoke immediately if second bool value is returned with falsy
// value. When first argument is less than `1`, the function runs until a successful
// response is returned.
func AttemptWhileWithDelay(maxIteration int, delay time.Duration, f func(int, time.Duration) (error, bool)) (int, time.Duration, error) {
	var err error
	var shouldContinueInvoke bool

	start := time.Now()

	for i := 0; maxIteration <= 0 || i < maxIteration; i++ {
		err, shouldContinueInvoke = f(i, time.Since(start))
		if !shouldContinueInvoke { // if shouldContinueInvoke is false, then return immediately
			return i + 1, time.Since(start), err
		}
		if err == nil {
			return i + 1, time.Since(start), nil
		}

		if maxIteration <= 0 || i+1 < maxIteration {
			time.Sleep(delay)
		}
	}

	return maxIteration, time.Since(start), err
}

type transactionStep[T any] struct {
	exec       func(T) (T, error)
	onRollback func(T) T
}

// NewTransaction instanciate a new transaction.
func NewTransaction[T any]() *Transaction[T] {
	return &Transaction[T]{
		steps: []transactionStep[T]{},
	}
}

// Transaction implements a Saga pattern
type Transaction[T any] struct {
	steps []transactionStep[T]
}

// Then adds a step to the chain of callbacks. It returns the same Transaction.
func (t *Transaction[T]) Then(exec func(T) (T, error), onRollback func(T) T) *Transaction[T] {
	t.steps = append(t.steps, transactionStep[T]{
		exec:       exec,
		onRollback: onRollback,
	})

	return t
}

// Process runs the Transaction steps and rollbacks in case of errors.
func (t *Transaction[T]) Process(state T) (T, error) {
	var i int
	var err error

	for i < len(t.steps) {
		state, err = t.steps[i].exec(state)
		if err != nil {
			break
		}

		i++
	}

	if err == nil {
		return state, nil
	}

	for i > 0 {
		i--
		state = t.steps[i].onRollback(state)
	}

	return state, err
}

// throttle ?
  07070100000A96000081A4000000000000000000000001645E367C00003E26000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/samber/lo/slice.go  package lo

import (
	"math/rand"

	"golang.org/x/exp/constraints"
)

// Filter iterates over elements of collection, returning an array of all elements predicate returns truthy for.
// Play: https://go.dev/play/p/Apjg3WeSi7K
func Filter[V any](collection []V, predicate func(item V, index int) bool) []V {
	result := []V{}

	for i, item := range collection {
		if predicate(item, i) {
			result = append(result, item)
		}
	}

	return result
}

// Map manipulates a slice and transforms it to a slice of another type.
// Play: https://go.dev/play/p/OkPcYAhBo0D
func Map[T any, R any](collection []T, iteratee func(item T, index int) R) []R {
	result := make([]R, len(collection))

	for i, item := range collection {
		result[i] = iteratee(item, i)
	}

	return result
}

// FilterMap returns a slice which obtained after both filtering and mapping using the given callback function.
// The callback function should return two values:
//   - the result of the mapping operation and
//   - whether the result element should be included or not.
//
// Play: https://go.dev/play/p/-AuYXfy7opz
func FilterMap[T any, R any](collection []T, callback func(item T, index int) (R, bool)) []R {
	result := []R{}

	for i, item := range collection {
		if r, ok := callback(item, i); ok {
			result = append(result, r)
		}
	}

	return result
}

// FlatMap manipulates a slice and transforms and flattens it to a slice of another type.
// Play: https://go.dev/play/p/YSoYmQTA8-U
func FlatMap[T any, R any](collection []T, iteratee func(item T, index int) []R) []R {
	result := []R{}

	for i, item := range collection {
		result = append(result, iteratee(item, i)...)
	}

	return result
}

// Reduce reduces collection to a value which is the accumulated result of running each element in collection
// through accumulator, where each successive invocation is supplied the return value of the previous.
// Play: https://go.dev/play/p/R4UHXZNaaUG
func Reduce[T any, R any](collection []T, accumulator func(agg R, item T, index int) R, initial R) R {
	for i, item := range collection {
		initial = accumulator(initial, item, i)
	}

	return initial
}

// ReduceRight helper is like Reduce except that it iterates over elements of collection from right to left.
// Play: https://go.dev/play/p/Fq3W70l7wXF
func ReduceRight[T any, R any](collection []T, accumulator func(agg R, item T, index int) R, initial R) R {
	for i := len(collection) - 1; i >= 0; i-- {
		initial = accumulator(initial, collection[i], i)
	}

	return initial
}

// ForEach iterates over elements of collection and invokes iteratee for each element.
// Play: https://go.dev/play/p/oofyiUPRf8t
func ForEach[T any](collection []T, iteratee func(item T, index int)) {
	for i, item := range collection {
		iteratee(item, i)
	}
}

// Times invokes the iteratee n times, returning an array of the results of each invocation.
// The iteratee is invoked with index as argument.
// Play: https://go.dev/play/p/vgQj3Glr6lT
func Times[T any](count int, iteratee func(index int) T) []T {
	result := make([]T, count)

	for i := 0; i < count; i++ {
		result[i] = iteratee(i)
	}

	return result
}

// Uniq returns a duplicate-free version of an array, in which only the first occurrence of each element is kept.
// The order of result values is determined by the order they occur in the array.
// Play: https://go.dev/play/p/DTzbeXZ6iEN
func Uniq[T comparable](collection []T) []T {
	result := make([]T, 0, len(collection))
	seen := make(map[T]struct{}, len(collection))

	for _, item := range collection {
		if _, ok := seen[item]; ok {
			continue
		}

		seen[item] = struct{}{}
		result = append(result, item)
	}

	return result
}

// UniqBy returns a duplicate-free version of an array, in which only the first occurrence of each element is kept.
// The order of result values is determined by the order they occur in the array. It accepts `iteratee` which is
// invoked for each element in array to generate the criterion by which uniqueness is computed.
// Play: https://go.dev/play/p/g42Z3QSb53u
func UniqBy[T any, U comparable](collection []T, iteratee func(item T) U) []T {
	result := make([]T, 0, len(collection))
	seen := make(map[U]struct{}, len(collection))

	for _, item := range collection {
		key := iteratee(item)

		if _, ok := seen[key]; ok {
			continue
		}

		seen[key] = struct{}{}
		result = append(result, item)
	}

	return result
}

// GroupBy returns an object composed of keys generated from the results of running each element of collection through iteratee.
// Play: https://go.dev/play/p/XnQBd_v6brd
func GroupBy[T any, U comparable](collection []T, iteratee func(item T) U) map[U][]T {
	result := map[U][]T{}

	for _, item := range collection {
		key := iteratee(item)

		result[key] = append(result[key], item)
	}

	return result
}

// Chunk returns an array of elements split into groups the length of size. If array can't be split evenly,
// the final chunk will be the remaining elements.
// Play: https://go.dev/play/p/EeKl0AuTehH
func Chunk[T any](collection []T, size int) [][]T {
	if size <= 0 {
		panic("Second parameter must be greater than 0")
	}

	chunksNum := len(collection) / size
	if len(collection)%size != 0 {
		chunksNum += 1
	}

	result := make([][]T, 0, chunksNum)

	for i := 0; i < chunksNum; i++ {
		last := (i + 1) * size
		if last > len(collection) {
			last = len(collection)
		}
		result = append(result, collection[i*size:last])
	}

	return result
}

// PartitionBy returns an array of elements split into groups. The order of grouped values is
// determined by the order they occur in collection. The grouping is generated from the results
// of running each element of collection through iteratee.
// Play: https://go.dev/play/p/NfQ_nGjkgXW
func PartitionBy[T any, K comparable](collection []T, iteratee func(item T) K) [][]T {
	result := [][]T{}
	seen := map[K]int{}

	for _, item := range collection {
		key := iteratee(item)

		resultIndex, ok := seen[key]
		if !ok {
			resultIndex = len(result)
			seen[key] = resultIndex
			result = append(result, []T{})
		}

		result[resultIndex] = append(result[resultIndex], item)
	}

	return result

	// unordered:
	// groups := GroupBy[T, K](collection, iteratee)
	// return Values[K, []T](groups)
}

// Flatten returns an array a single level deep.
// Play: https://go.dev/play/p/rbp9ORaMpjw
func Flatten[T any](collection [][]T) []T {
	totalLen := 0
	for i := range collection {
		totalLen += len(collection[i])
	}

	result := make([]T, 0, totalLen)
	for i := range collection {
		result = append(result, collection[i]...)
	}

	return result
}

// Interleave round-robin alternating input slices and sequentially appending value at index into result
// Play: https://go.dev/play/p/DDhlwrShbwe
func Interleave[T any](collections ...[]T) []T {
	if len(collections) == 0 {
		return []T{}
	}

	maxSize := 0
	totalSize := 0
	for _, c := range collections {
		size := len(c)
		totalSize += size
		if size > maxSize {
			maxSize = size
		}
	}

	if maxSize == 0 {
		return []T{}
	}

	result := make([]T, totalSize)

	resultIdx := 0
	for i := 0; i < maxSize; i++ {
		for j := range collections {
			if len(collections[j])-1 < i {
				continue
			}

			result[resultIdx] = collections[j][i]
			resultIdx++
		}
	}

	return result
}

// Shuffle returns an array of shuffled values. Uses the Fisher-Yates shuffle algorithm.
// Play: https://go.dev/play/p/Qp73bnTDnc7
func Shuffle[T any](collection []T) []T {
	rand.Shuffle(len(collection), func(i, j int) {
		collection[i], collection[j] = collection[j], collection[i]
	})

	return collection
}

// Reverse reverses array so that the first element becomes the last, the second element becomes the second to last, and so on.
// Play: https://go.dev/play/p/fhUMLvZ7vS6
func Reverse[T any](collection []T) []T {
	length := len(collection)
	half := length / 2

	for i := 0; i < half; i = i + 1 {
		j := length - 1 - i
		collection[i], collection[j] = collection[j], collection[i]
	}

	return collection
}

// Fill fills elements of array with `initial` value.
// Play: https://go.dev/play/p/VwR34GzqEub
func Fill[T Clonable[T]](collection []T, initial T) []T {
	result := make([]T, 0, len(collection))

	for range collection {
		result = append(result, initial.Clone())
	}

	return result
}

// Repeat builds a slice with N copies of initial value.
// Play: https://go.dev/play/p/g3uHXbmc3b6
func Repeat[T Clonable[T]](count int, initial T) []T {
	result := make([]T, 0, count)

	for i := 0; i < count; i++ {
		result = append(result, initial.Clone())
	}

	return result
}

// RepeatBy builds a slice with values returned by N calls of callback.
// Play: https://go.dev/play/p/ozZLCtX_hNU
func RepeatBy[T any](count int, predicate func(index int) T) []T {
	result := make([]T, 0, count)

	for i := 0; i < count; i++ {
		result = append(result, predicate(i))
	}

	return result
}

// KeyBy transforms a slice or an array of structs to a map based on a pivot callback.
// Play: https://go.dev/play/p/mdaClUAT-zZ
func KeyBy[K comparable, V any](collection []V, iteratee func(item V) K) map[K]V {
	result := make(map[K]V, len(collection))

	for _, v := range collection {
		k := iteratee(v)
		result[k] = v
	}

	return result
}

// Associate returns a map containing key-value pairs provided by transform function applied to elements of the given slice.
// If any of two pairs would have the same key the last one gets added to the map.
// The order of keys in returned map is not specified and is not guaranteed to be the same from the original array.
// Play: https://go.dev/play/p/WHa2CfMO3Lr
func Associate[T any, K comparable, V any](collection []T, transform func(item T) (K, V)) map[K]V {
	result := make(map[K]V, len(collection))

	for _, t := range collection {
		k, v := transform(t)
		result[k] = v
	}

	return result
}

// SliceToMap returns a map containing key-value pairs provided by transform function applied to elements of the given slice.
// If any of two pairs would have the same key the last one gets added to the map.
// The order of keys in returned map is not specified and is not guaranteed to be the same from the original array.
// Alias of Associate().
// Play: https://go.dev/play/p/WHa2CfMO3Lr
func SliceToMap[T any, K comparable, V any](collection []T, transform func(item T) (K, V)) map[K]V {
	return Associate(collection, transform)
}

// Drop drops n elements from the beginning of a slice or array.
// Play: https://go.dev/play/p/JswS7vXRJP2
func Drop[T any](collection []T, n int) []T {
	if len(collection) <= n {
		return make([]T, 0)
	}

	result := make([]T, 0, len(collection)-n)

	return append(result, collection[n:]...)
}

// DropRight drops n elements from the end of a slice or array.
// Play: https://go.dev/play/p/GG0nXkSJJa3
func DropRight[T any](collection []T, n int) []T {
	if len(collection) <= n {
		return []T{}
	}

	result := make([]T, 0, len(collection)-n)
	return append(result, collection[:len(collection)-n]...)
}

// DropWhile drops elements from the beginning of a slice or array while the predicate returns true.
// Play: https://go.dev/play/p/7gBPYw2IK16
func DropWhile[T any](collection []T, predicate func(item T) bool) []T {
	i := 0
	for ; i < len(collection); i++ {
		if !predicate(collection[i]) {
			break
		}
	}

	result := make([]T, 0, len(collection)-i)
	return append(result, collection[i:]...)
}

// DropRightWhile drops elements from the end of a slice or array while the predicate returns true.
// Play: https://go.dev/play/p/3-n71oEC0Hz
func DropRightWhile[T any](collection []T, predicate func(item T) bool) []T {
	i := len(collection) - 1
	for ; i >= 0; i-- {
		if !predicate(collection[i]) {
			break
		}
	}

	result := make([]T, 0, i+1)
	return append(result, collection[:i+1]...)
}

// Reject is the opposite of Filter, this method returns the elements of collection that predicate does not return truthy for.
// Play: https://go.dev/play/p/YkLMODy1WEL
func Reject[V any](collection []V, predicate func(item V, index int) bool) []V {
	result := []V{}

	for i, item := range collection {
		if !predicate(item, i) {
			result = append(result, item)
		}
	}

	return result
}

// Count counts the number of elements in the collection that compare equal to value.
// Play: https://go.dev/play/p/Y3FlK54yveC
func Count[T comparable](collection []T, value T) (count int) {
	for _, item := range collection {
		if item == value {
			count++
		}
	}

	return count
}

// CountBy counts the number of elements in the collection for which predicate is true.
// Play: https://go.dev/play/p/ByQbNYQQi4X
func CountBy[T any](collection []T, predicate func(item T) bool) (count int) {
	for _, item := range collection {
		if predicate(item) {
			count++
		}
	}

	return count
}

// CountValues counts the number of each element in the collection.
// Play: https://go.dev/play/p/-p-PyLT4dfy
func CountValues[T comparable](collection []T) map[T]int {
	result := make(map[T]int)

	for _, item := range collection {
		result[item]++
	}

	return result
}

// CountValuesBy counts the number of each element return from mapper function.
// Is equivalent to chaining lo.Map and lo.CountValues.
// Play: https://go.dev/play/p/2U0dG1SnOmS
func CountValuesBy[T any, U comparable](collection []T, mapper func(item T) U) map[U]int {
	result := make(map[U]int)

	for _, item := range collection {
		result[mapper(item)]++
	}

	return result
}

// Subset returns a copy of a slice from `offset` up to `length` elements. Like `slice[start:start+length]`, but does not panic on overflow.
// Play: https://go.dev/play/p/tOQu1GhFcog
func Subset[T any](collection []T, offset int, length uint) []T {
	size := len(collection)

	if offset < 0 {
		offset = size + offset
		if offset < 0 {
			offset = 0
		}
	}

	if offset > size {
		return []T{}
	}

	if length > uint(size)-uint(offset) {
		length = uint(size - offset)
	}

	return collection[offset : offset+int(length)]
}

// Slice returns a copy of a slice from `start` up to, but not including `end`. Like `slice[start:end]`, but does not panic on overflow.
// Play: https://go.dev/play/p/8XWYhfMMA1h
func Slice[T any](collection []T, start int, end int) []T {
	size := len(collection)

	if start >= end {
		return []T{}
	}

	if start > size {
		start = size
	}
	if start < 0 {
		start = 0
	}

	if end > size {
		end = size
	}
	if end < 0 {
		end = 0
	}

	return collection[start:end]
}

// Replace returns a copy of the slice with the first n non-overlapping instances of old replaced by new.
// Play: https://go.dev/play/p/XfPzmf9gql6
func Replace[T comparable](collection []T, old T, new T, n int) []T {
	result := make([]T, len(collection))
	copy(result, collection)

	for i := range result {
		if result[i] == old && n != 0 {
			result[i] = new
			n--
		}
	}

	return result
}

// ReplaceAll returns a copy of the slice with all non-overlapping instances of old replaced by new.
// Play: https://go.dev/play/p/a9xZFUHfYcV
func ReplaceAll[T comparable](collection []T, old T, new T) []T {
	return Replace(collection, old, new, -1)
}

// Compact returns a slice of all non-zero elements.
// Play: https://go.dev/play/p/tXiy-iK6PAc
func Compact[T comparable](collection []T) []T {
	var zero T

	result := []T{}

	for _, item := range collection {
		if item != zero {
			result = append(result, item)
		}
	}

	return result
}

// IsSorted checks if a slice is sorted.
// Play: https://go.dev/play/p/mc3qR-t4mcx
func IsSorted[T constraints.Ordered](collection []T) bool {
	for i := 1; i < len(collection); i++ {
		if collection[i-1] > collection[i] {
			return false
		}
	}

	return true
}

// IsSortedByKey checks if a slice is sorted by iteratee.
// Play: https://go.dev/play/p/wiG6XyBBu49
func IsSortedByKey[T any, K constraints.Ordered](collection []T, iteratee func(item T) K) bool {
	size := len(collection)

	for i := 0; i < size-1; i++ {
		if iteratee(collection[i]) > iteratee(collection[i+1]) {
			return false
		}
	}

	return true
}
  07070100000A97000081A4000000000000000000000001645E367C00000940000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/samber/lo/string.go package lo

import (
	"math/rand"
	"unicode/utf8"
)

var (
	LowerCaseLettersCharset = []rune("abcdefghijklmnopqrstuvwxyz")
	UpperCaseLettersCharset = []rune("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
	LettersCharset          = append(LowerCaseLettersCharset, UpperCaseLettersCharset...)
	NumbersCharset          = []rune("0123456789")
	AlphanumericCharset     = append(LettersCharset, NumbersCharset...)
	SpecialCharset          = []rune("!@#$%^&*()_+-=[]{}|;':\",./<>?")
	AllCharset              = append(AlphanumericCharset, SpecialCharset...)
)

// RandomString return a random string.
// Play: https://go.dev/play/p/rRseOQVVum4
func RandomString(size int, charset []rune) string {
	if size <= 0 {
		panic("lo.RandomString: Size parameter must be greater than 0")
	}
	if len(charset) <= 0 {
		panic("lo.RandomString: Charset parameter must not be empty")
	}

	b := make([]rune, size)
	possibleCharactersCount := len(charset)
	for i := range b {
		b[i] = charset[rand.Intn(possibleCharactersCount)]
	}
	return string(b)
}

// Substring return part of a string.
// Play: https://go.dev/play/p/TQlxQi82Lu1
func Substring[T ~string](str T, offset int, length uint) T {
	size := len(str)

	if offset < 0 {
		offset = size + offset
		if offset < 0 {
			offset = 0
		}
	}

	if offset > size {
		return Empty[T]()
	}

	if length > uint(size)-uint(offset) {
		length = uint(size - offset)
	}

	return str[offset : offset+int(length)]
}

// ChunkString returns an array of strings split into groups the length of size. If array can't be split evenly,
// the final chunk will be the remaining elements.
// Play: https://go.dev/play/p/__FLTuJVz54
func ChunkString[T ~string](str T, size int) []T {
	if size <= 0 {
		panic("lo.ChunkString: Size parameter must be greater than 0")
	}

	if len(str) == 0 {
		return []T{""}
	}

	if size >= len(str) {
		return []T{str}
	}

	var chunks []T = make([]T, 0, ((len(str)-1)/size)+1)
	currentLen := 0
	currentStart := 0
	for i := range str {
		if currentLen == size {
			chunks = append(chunks, str[currentStart:i])
			currentLen = 0
			currentStart = i
		}
		currentLen++
	}
	chunks = append(chunks, str[currentStart:])
	return chunks
}

// RuneLength is an alias to utf8.RuneCountInString which returns the number of runes in string.
// Play: https://go.dev/play/p/tuhgW_lWY8l
func RuneLength(str string) int {
	return utf8.RuneCountInString(str)
}
07070100000A98000081A4000000000000000000000001645E367C00003FF3000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/samber/lo/tuples.go package lo

// T2 creates a tuple from a list of values.
// Play: https://go.dev/play/p/IllL3ZO4BQm
func T2[A any, B any](a A, b B) Tuple2[A, B] {
	return Tuple2[A, B]{A: a, B: b}
}

// T3 creates a tuple from a list of values.
// Play: https://go.dev/play/p/IllL3ZO4BQm
func T3[A any, B any, C any](a A, b B, c C) Tuple3[A, B, C] {
	return Tuple3[A, B, C]{A: a, B: b, C: c}
}

// T4 creates a tuple from a list of values.
// Play: https://go.dev/play/p/IllL3ZO4BQm
func T4[A any, B any, C any, D any](a A, b B, c C, d D) Tuple4[A, B, C, D] {
	return Tuple4[A, B, C, D]{A: a, B: b, C: c, D: d}
}

// T5 creates a tuple from a list of values.
// Play: https://go.dev/play/p/IllL3ZO4BQm
func T5[A any, B any, C any, D any, E any](a A, b B, c C, d D, e E) Tuple5[A, B, C, D, E] {
	return Tuple5[A, B, C, D, E]{A: a, B: b, C: c, D: d, E: e}
}

// T6 creates a tuple from a list of values.
// Play: https://go.dev/play/p/IllL3ZO4BQm
func T6[A any, B any, C any, D any, E any, F any](a A, b B, c C, d D, e E, f F) Tuple6[A, B, C, D, E, F] {
	return Tuple6[A, B, C, D, E, F]{A: a, B: b, C: c, D: d, E: e, F: f}
}

// T7 creates a tuple from a list of values.
// Play: https://go.dev/play/p/IllL3ZO4BQm
func T7[A any, B any, C any, D any, E any, F any, G any](a A, b B, c C, d D, e E, f F, g G) Tuple7[A, B, C, D, E, F, G] {
	return Tuple7[A, B, C, D, E, F, G]{A: a, B: b, C: c, D: d, E: e, F: f, G: g}
}

// T8 creates a tuple from a list of values.
// Play: https://go.dev/play/p/IllL3ZO4BQm
func T8[A any, B any, C any, D any, E any, F any, G any, H any](a A, b B, c C, d D, e E, f F, g G, h H) Tuple8[A, B, C, D, E, F, G, H] {
	return Tuple8[A, B, C, D, E, F, G, H]{A: a, B: b, C: c, D: d, E: e, F: f, G: g, H: h}
}

// T9 creates a tuple from a list of values.
// Play: https://go.dev/play/p/IllL3ZO4BQm
func T9[A any, B any, C any, D any, E any, F any, G any, H any, I any](a A, b B, c C, d D, e E, f F, g G, h H, i I) Tuple9[A, B, C, D, E, F, G, H, I] {
	return Tuple9[A, B, C, D, E, F, G, H, I]{A: a, B: b, C: c, D: d, E: e, F: f, G: g, H: h, I: i}
}

// Unpack2 returns values contained in tuple.
// Play: https://go.dev/play/p/xVP_k0kJ96W
func Unpack2[A any, B any](tuple Tuple2[A, B]) (A, B) {
	return tuple.A, tuple.B
}

// Unpack3 returns values contained in tuple.
// Play: https://go.dev/play/p/xVP_k0kJ96W
func Unpack3[A any, B any, C any](tuple Tuple3[A, B, C]) (A, B, C) {
	return tuple.A, tuple.B, tuple.C
}

// Unpack4 returns values contained in tuple.
// Play: https://go.dev/play/p/xVP_k0kJ96W
func Unpack4[A any, B any, C any, D any](tuple Tuple4[A, B, C, D]) (A, B, C, D) {
	return tuple.A, tuple.B, tuple.C, tuple.D
}

// Unpack5 returns values contained in tuple.
// Play: https://go.dev/play/p/xVP_k0kJ96W
func Unpack5[A any, B any, C any, D any, E any](tuple Tuple5[A, B, C, D, E]) (A, B, C, D, E) {
	return tuple.A, tuple.B, tuple.C, tuple.D, tuple.E
}

// Unpack6 returns values contained in tuple.
// Play: https://go.dev/play/p/xVP_k0kJ96W
func Unpack6[A any, B any, C any, D any, E any, F any](tuple Tuple6[A, B, C, D, E, F]) (A, B, C, D, E, F) {
	return tuple.A, tuple.B, tuple.C, tuple.D, tuple.E, tuple.F
}

// Unpack7 returns values contained in tuple.
// Play: https://go.dev/play/p/xVP_k0kJ96W
func Unpack7[A any, B any, C any, D any, E any, F any, G any](tuple Tuple7[A, B, C, D, E, F, G]) (A, B, C, D, E, F, G) {
	return tuple.A, tuple.B, tuple.C, tuple.D, tuple.E, tuple.F, tuple.G
}

// Unpack8 returns values contained in tuple.
// Play: https://go.dev/play/p/xVP_k0kJ96W
func Unpack8[A any, B any, C any, D any, E any, F any, G any, H any](tuple Tuple8[A, B, C, D, E, F, G, H]) (A, B, C, D, E, F, G, H) {
	return tuple.A, tuple.B, tuple.C, tuple.D, tuple.E, tuple.F, tuple.G, tuple.H
}

// Unpack9 returns values contained in tuple.
// Play: https://go.dev/play/p/xVP_k0kJ96W
func Unpack9[A any, B any, C any, D any, E any, F any, G any, H any, I any](tuple Tuple9[A, B, C, D, E, F, G, H, I]) (A, B, C, D, E, F, G, H, I) {
	return tuple.A, tuple.B, tuple.C, tuple.D, tuple.E, tuple.F, tuple.G, tuple.H, tuple.I
}

// Zip2 creates a slice of grouped elements, the first of which contains the first elements
// of the given arrays, the second of which contains the second elements of the given arrays, and so on.
// When collections have different size, the Tuple attributes are filled with zero value.
// Play: https://go.dev/play/p/jujaA6GaJTp
func Zip2[A any, B any](a []A, b []B) []Tuple2[A, B] {
	size := Max([]int{len(a), len(b)})

	result := make([]Tuple2[A, B], 0, size)

	for index := 0; index < size; index++ {
		_a, _ := Nth(a, index)
		_b, _ := Nth(b, index)

		result = append(result, Tuple2[A, B]{
			A: _a,
			B: _b,
		})
	}

	return result
}

// Zip3 creates a slice of grouped elements, the first of which contains the first elements
// of the given arrays, the second of which contains the second elements of the given arrays, and so on.
// When collections have different size, the Tuple attributes are filled with zero value.
// Play: https://go.dev/play/p/jujaA6GaJTp
func Zip3[A any, B any, C any](a []A, b []B, c []C) []Tuple3[A, B, C] {
	size := Max([]int{len(a), len(b), len(c)})

	result := make([]Tuple3[A, B, C], 0, size)

	for index := 0; index < size; index++ {
		_a, _ := Nth(a, index)
		_b, _ := Nth(b, index)
		_c, _ := Nth(c, index)

		result = append(result, Tuple3[A, B, C]{
			A: _a,
			B: _b,
			C: _c,
		})
	}

	return result
}

// Zip4 creates a slice of grouped elements, the first of which contains the first elements
// of the given arrays, the second of which contains the second elements of the given arrays, and so on.
// When collections have different size, the Tuple attributes are filled with zero value.
// Play: https://go.dev/play/p/jujaA6GaJTp
func Zip4[A any, B any, C any, D any](a []A, b []B, c []C, d []D) []Tuple4[A, B, C, D] {
	size := Max([]int{len(a), len(b), len(c), len(d)})

	result := make([]Tuple4[A, B, C, D], 0, size)

	for index := 0; index < size; index++ {
		_a, _ := Nth(a, index)
		_b, _ := Nth(b, index)
		_c, _ := Nth(c, index)
		_d, _ := Nth(d, index)

		result = append(result, Tuple4[A, B, C, D]{
			A: _a,
			B: _b,
			C: _c,
			D: _d,
		})
	}

	return result
}

// Zip5 creates a slice of grouped elements, the first of which contains the first elements
// of the given arrays, the second of which contains the second elements of the given arrays, and so on.
// When collections have different size, the Tuple attributes are filled with zero value.
// Play: https://go.dev/play/p/jujaA6GaJTp
func Zip5[A any, B any, C any, D any, E any](a []A, b []B, c []C, d []D, e []E) []Tuple5[A, B, C, D, E] {
	size := Max([]int{len(a), len(b), len(c), len(d), len(e)})

	result := make([]Tuple5[A, B, C, D, E], 0, size)

	for index := 0; index < size; index++ {
		_a, _ := Nth(a, index)
		_b, _ := Nth(b, index)
		_c, _ := Nth(c, index)
		_d, _ := Nth(d, index)
		_e, _ := Nth(e, index)

		result = append(result, Tuple5[A, B, C, D, E]{
			A: _a,
			B: _b,
			C: _c,
			D: _d,
			E: _e,
		})
	}

	return result
}

// Zip6 creates a slice of grouped elements, the first of which contains the first elements
// of the given arrays, the second of which contains the second elements of the given arrays, and so on.
// When collections have different size, the Tuple attributes are filled with zero value.
// Play: https://go.dev/play/p/jujaA6GaJTp
func Zip6[A any, B any, C any, D any, E any, F any](a []A, b []B, c []C, d []D, e []E, f []F) []Tuple6[A, B, C, D, E, F] {
	size := Max([]int{len(a), len(b), len(c), len(d), len(e), len(f)})

	result := make([]Tuple6[A, B, C, D, E, F], 0, size)

	for index := 0; index < size; index++ {
		_a, _ := Nth(a, index)
		_b, _ := Nth(b, index)
		_c, _ := Nth(c, index)
		_d, _ := Nth(d, index)
		_e, _ := Nth(e, index)
		_f, _ := Nth(f, index)

		result = append(result, Tuple6[A, B, C, D, E, F]{
			A: _a,
			B: _b,
			C: _c,
			D: _d,
			E: _e,
			F: _f,
		})
	}

	return result
}

// Zip7 creates a slice of grouped elements, the first of which contains the first elements
// of the given arrays, the second of which contains the second elements of the given arrays, and so on.
// When collections have different size, the Tuple attributes are filled with zero value.
// Play: https://go.dev/play/p/jujaA6GaJTp
func Zip7[A any, B any, C any, D any, E any, F any, G any](a []A, b []B, c []C, d []D, e []E, f []F, g []G) []Tuple7[A, B, C, D, E, F, G] {
	size := Max([]int{len(a), len(b), len(c), len(d), len(e), len(f), len(g)})

	result := make([]Tuple7[A, B, C, D, E, F, G], 0, size)

	for index := 0; index < size; index++ {
		_a, _ := Nth(a, index)
		_b, _ := Nth(b, index)
		_c, _ := Nth(c, index)
		_d, _ := Nth(d, index)
		_e, _ := Nth(e, index)
		_f, _ := Nth(f, index)
		_g, _ := Nth(g, index)

		result = append(result, Tuple7[A, B, C, D, E, F, G]{
			A: _a,
			B: _b,
			C: _c,
			D: _d,
			E: _e,
			F: _f,
			G: _g,
		})
	}

	return result
}

// Zip8 creates a slice of grouped elements, the first of which contains the first elements
// of the given arrays, the second of which contains the second elements of the given arrays, and so on.
// When collections have different size, the Tuple attributes are filled with zero value.
// Play: https://go.dev/play/p/jujaA6GaJTp
func Zip8[A any, B any, C any, D any, E any, F any, G any, H any](a []A, b []B, c []C, d []D, e []E, f []F, g []G, h []H) []Tuple8[A, B, C, D, E, F, G, H] {
	size := Max([]int{len(a), len(b), len(c), len(d), len(e), len(f), len(g), len(h)})

	result := make([]Tuple8[A, B, C, D, E, F, G, H], 0, size)

	for index := 0; index < size; index++ {
		_a, _ := Nth(a, index)
		_b, _ := Nth(b, index)
		_c, _ := Nth(c, index)
		_d, _ := Nth(d, index)
		_e, _ := Nth(e, index)
		_f, _ := Nth(f, index)
		_g, _ := Nth(g, index)
		_h, _ := Nth(h, index)

		result = append(result, Tuple8[A, B, C, D, E, F, G, H]{
			A: _a,
			B: _b,
			C: _c,
			D: _d,
			E: _e,
			F: _f,
			G: _g,
			H: _h,
		})
	}

	return result
}

// Zip9 creates a slice of grouped elements, the first of which contains the first elements
// of the given arrays, the second of which contains the second elements of the given arrays, and so on.
// When collections have different size, the Tuple attributes are filled with zero value.
// Play: https://go.dev/play/p/jujaA6GaJTp
func Zip9[A any, B any, C any, D any, E any, F any, G any, H any, I any](a []A, b []B, c []C, d []D, e []E, f []F, g []G, h []H, i []I) []Tuple9[A, B, C, D, E, F, G, H, I] {
	size := Max([]int{len(a), len(b), len(c), len(d), len(e), len(f), len(g), len(h), len(i)})

	result := make([]Tuple9[A, B, C, D, E, F, G, H, I], 0, size)

	for index := 0; index < size; index++ {
		_a, _ := Nth(a, index)
		_b, _ := Nth(b, index)
		_c, _ := Nth(c, index)
		_d, _ := Nth(d, index)
		_e, _ := Nth(e, index)
		_f, _ := Nth(f, index)
		_g, _ := Nth(g, index)
		_h, _ := Nth(h, index)
		_i, _ := Nth(i, index)

		result = append(result, Tuple9[A, B, C, D, E, F, G, H, I]{
			A: _a,
			B: _b,
			C: _c,
			D: _d,
			E: _e,
			F: _f,
			G: _g,
			H: _h,
			I: _i,
		})
	}

	return result
}

// Unzip2 accepts an array of grouped elements and creates an array regrouping the elements
// to their pre-zip configuration.
// Play: https://go.dev/play/p/ciHugugvaAW
func Unzip2[A any, B any](tuples []Tuple2[A, B]) ([]A, []B) {
	size := len(tuples)
	r1 := make([]A, 0, size)
	r2 := make([]B, 0, size)

	for _, tuple := range tuples {
		r1 = append(r1, tuple.A)
		r2 = append(r2, tuple.B)
	}

	return r1, r2
}

// Unzip3 accepts an array of grouped elements and creates an array regrouping the elements
// to their pre-zip configuration.
// Play: https://go.dev/play/p/ciHugugvaAW
func Unzip3[A any, B any, C any](tuples []Tuple3[A, B, C]) ([]A, []B, []C) {
	size := len(tuples)
	r1 := make([]A, 0, size)
	r2 := make([]B, 0, size)
	r3 := make([]C, 0, size)

	for _, tuple := range tuples {
		r1 = append(r1, tuple.A)
		r2 = append(r2, tuple.B)
		r3 = append(r3, tuple.C)
	}

	return r1, r2, r3
}

// Unzip4 accepts an array of grouped elements and creates an array regrouping the elements
// to their pre-zip configuration.
// Play: https://go.dev/play/p/ciHugugvaAW
func Unzip4[A any, B any, C any, D any](tuples []Tuple4[A, B, C, D]) ([]A, []B, []C, []D) {
	size := len(tuples)
	r1 := make([]A, 0, size)
	r2 := make([]B, 0, size)
	r3 := make([]C, 0, size)
	r4 := make([]D, 0, size)

	for _, tuple := range tuples {
		r1 = append(r1, tuple.A)
		r2 = append(r2, tuple.B)
		r3 = append(r3, tuple.C)
		r4 = append(r4, tuple.D)
	}

	return r1, r2, r3, r4
}

// Unzip5 accepts an array of grouped elements and creates an array regrouping the elements
// to their pre-zip configuration.
// Play: https://go.dev/play/p/ciHugugvaAW
func Unzip5[A any, B any, C any, D any, E any](tuples []Tuple5[A, B, C, D, E]) ([]A, []B, []C, []D, []E) {
	size := len(tuples)
	r1 := make([]A, 0, size)
	r2 := make([]B, 0, size)
	r3 := make([]C, 0, size)
	r4 := make([]D, 0, size)
	r5 := make([]E, 0, size)

	for _, tuple := range tuples {
		r1 = append(r1, tuple.A)
		r2 = append(r2, tuple.B)
		r3 = append(r3, tuple.C)
		r4 = append(r4, tuple.D)
		r5 = append(r5, tuple.E)
	}

	return r1, r2, r3, r4, r5
}

// Unzip6 accepts an array of grouped elements and creates an array regrouping the elements
// to their pre-zip configuration.
// Play: https://go.dev/play/p/ciHugugvaAW
func Unzip6[A any, B any, C any, D any, E any, F any](tuples []Tuple6[A, B, C, D, E, F]) ([]A, []B, []C, []D, []E, []F) {
	size := len(tuples)
	r1 := make([]A, 0, size)
	r2 := make([]B, 0, size)
	r3 := make([]C, 0, size)
	r4 := make([]D, 0, size)
	r5 := make([]E, 0, size)
	r6 := make([]F, 0, size)

	for _, tuple := range tuples {
		r1 = append(r1, tuple.A)
		r2 = append(r2, tuple.B)
		r3 = append(r3, tuple.C)
		r4 = append(r4, tuple.D)
		r5 = append(r5, tuple.E)
		r6 = append(r6, tuple.F)
	}

	return r1, r2, r3, r4, r5, r6
}

// Unzip7 accepts an array of grouped elements and creates an array regrouping the elements
// to their pre-zip configuration.
// Play: https://go.dev/play/p/ciHugugvaAW
func Unzip7[A any, B any, C any, D any, E any, F any, G any](tuples []Tuple7[A, B, C, D, E, F, G]) ([]A, []B, []C, []D, []E, []F, []G) {
	size := len(tuples)
	r1 := make([]A, 0, size)
	r2 := make([]B, 0, size)
	r3 := make([]C, 0, size)
	r4 := make([]D, 0, size)
	r5 := make([]E, 0, size)
	r6 := make([]F, 0, size)
	r7 := make([]G, 0, size)

	for _, tuple := range tuples {
		r1 = append(r1, tuple.A)
		r2 = append(r2, tuple.B)
		r3 = append(r3, tuple.C)
		r4 = append(r4, tuple.D)
		r5 = append(r5, tuple.E)
		r6 = append(r6, tuple.F)
		r7 = append(r7, tuple.G)
	}

	return r1, r2, r3, r4, r5, r6, r7
}

// Unzip8 accepts an array of grouped elements and creates an array regrouping the elements
// to their pre-zip configuration.
// Play: https://go.dev/play/p/ciHugugvaAW
func Unzip8[A any, B any, C any, D any, E any, F any, G any, H any](tuples []Tuple8[A, B, C, D, E, F, G, H]) ([]A, []B, []C, []D, []E, []F, []G, []H) {
	size := len(tuples)
	r1 := make([]A, 0, size)
	r2 := make([]B, 0, size)
	r3 := make([]C, 0, size)
	r4 := make([]D, 0, size)
	r5 := make([]E, 0, size)
	r6 := make([]F, 0, size)
	r7 := make([]G, 0, size)
	r8 := make([]H, 0, size)

	for _, tuple := range tuples {
		r1 = append(r1, tuple.A)
		r2 = append(r2, tuple.B)
		r3 = append(r3, tuple.C)
		r4 = append(r4, tuple.D)
		r5 = append(r5, tuple.E)
		r6 = append(r6, tuple.F)
		r7 = append(r7, tuple.G)
		r8 = append(r8, tuple.H)
	}

	return r1, r2, r3, r4, r5, r6, r7, r8
}

// Unzip9 accepts an array of grouped elements and creates an array regrouping the elements
// to their pre-zip configuration.
// Play: https://go.dev/play/p/ciHugugvaAW
func Unzip9[A any, B any, C any, D any, E any, F any, G any, H any, I any](tuples []Tuple9[A, B, C, D, E, F, G, H, I]) ([]A, []B, []C, []D, []E, []F, []G, []H, []I) {
	size := len(tuples)
	r1 := make([]A, 0, size)
	r2 := make([]B, 0, size)
	r3 := make([]C, 0, size)
	r4 := make([]D, 0, size)
	r5 := make([]E, 0, size)
	r6 := make([]F, 0, size)
	r7 := make([]G, 0, size)
	r8 := make([]H, 0, size)
	r9 := make([]I, 0, size)

	for _, tuple := range tuples {
		r1 = append(r1, tuple.A)
		r2 = append(r2, tuple.B)
		r3 = append(r3, tuple.C)
		r4 = append(r4, tuple.D)
		r5 = append(r5, tuple.E)
		r6 = append(r6, tuple.F)
		r7 = append(r7, tuple.G)
		r8 = append(r8, tuple.H)
		r9 = append(r9, tuple.I)
	}

	return r1, r2, r3, r4, r5, r6, r7, r8, r9
}
 07070100000A99000081A4000000000000000000000001645E367C000006CC000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/samber/lo/type_manipulation.go  package lo

// ToPtr returns a pointer copy of value.
func ToPtr[T any](x T) *T {
	return &x
}

// FromPtr returns the pointer value or empty.
func FromPtr[T any](x *T) T {
	if x == nil {
		return Empty[T]()
	}

	return *x
}

// FromPtrOr returns the pointer value or the fallback value.
func FromPtrOr[T any](x *T, fallback T) T {
	if x == nil {
		return fallback
	}

	return *x
}

// ToSlicePtr returns a slice of pointer copy of value.
func ToSlicePtr[T any](collection []T) []*T {
	return Map(collection, func(x T, _ int) *T {
		return &x
	})
}

// ToAnySlice returns a slice with all elements mapped to `any` type
func ToAnySlice[T any](collection []T) []any {
	result := make([]any, len(collection))
	for i, item := range collection {
		result[i] = item
	}
	return result
}

// FromAnySlice returns an `any` slice with all elements mapped to a type.
// Returns false in case of type conversion failure.
func FromAnySlice[T any](in []any) (out []T, ok bool) {
	defer func() {
		if r := recover(); r != nil {
			out = []T{}
			ok = false
		}
	}()

	result := make([]T, len(in))
	for i, item := range in {
		result[i] = item.(T)
	}
	return result, true
}

// Empty returns an empty value.
func Empty[T any]() T {
	var zero T
	return zero
}

// IsEmpty returns true if argument is a zero value.
func IsEmpty[T comparable](v T) bool {
	var zero T
	return zero == v
}

// IsNotEmpty returns true if argument is not a zero value.
func IsNotEmpty[T comparable](v T) bool {
	var zero T
	return zero != v
}

// Coalesce returns the first non-empty arguments. Arguments must be comparable.
func Coalesce[T comparable](v ...T) (result T, ok bool) {
	for _, e := range v {
		if e != result {
			result = e
			ok = true
			return
		}
	}

	return
}
07070100000A9A000081A4000000000000000000000001645E367C000008E0000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/samber/lo/types.go  package lo

// Entry defines a key/value pairs.
type Entry[K comparable, V any] struct {
	Key   K
	Value V
}

// Tuple2 is a group of 2 elements (pair).
type Tuple2[A any, B any] struct {
	A A
	B B
}

// Unpack returns values contained in tuple.
func (t Tuple2[A, B]) Unpack() (A, B) {
	return t.A, t.B
}

// Tuple3 is a group of 3 elements.
type Tuple3[A any, B any, C any] struct {
	A A
	B B
	C C
}

// Unpack returns values contained in tuple.
func (t Tuple3[A, B, C]) Unpack() (A, B, C) {
	return t.A, t.B, t.C
}

// Tuple4 is a group of 4 elements.
type Tuple4[A any, B any, C any, D any] struct {
	A A
	B B
	C C
	D D
}

// Unpack returns values contained in tuple.
func (t Tuple4[A, B, C, D]) Unpack() (A, B, C, D) {
	return t.A, t.B, t.C, t.D
}

// Tuple5 is a group of 5 elements.
type Tuple5[A any, B any, C any, D any, E any] struct {
	A A
	B B
	C C
	D D
	E E
}

// Unpack returns values contained in tuple.
func (t Tuple5[A, B, C, D, E]) Unpack() (A, B, C, D, E) {
	return t.A, t.B, t.C, t.D, t.E
}

// Tuple6 is a group of 6 elements.
type Tuple6[A any, B any, C any, D any, E any, F any] struct {
	A A
	B B
	C C
	D D
	E E
	F F
}

// Unpack returns values contained in tuple.
func (t Tuple6[A, B, C, D, E, F]) Unpack() (A, B, C, D, E, F) {
	return t.A, t.B, t.C, t.D, t.E, t.F
}

// Tuple7 is a group of 7 elements.
type Tuple7[A any, B any, C any, D any, E any, F any, G any] struct {
	A A
	B B
	C C
	D D
	E E
	F F
	G G
}

// Unpack returns values contained in tuple.
func (t Tuple7[A, B, C, D, E, F, G]) Unpack() (A, B, C, D, E, F, G) {
	return t.A, t.B, t.C, t.D, t.E, t.F, t.G
}

// Tuple8 is a group of 8 elements.
type Tuple8[A any, B any, C any, D any, E any, F any, G any, H any] struct {
	A A
	B B
	C C
	D D
	E E
	F F
	G G
	H H
}

// Unpack returns values contained in tuple.
func (t Tuple8[A, B, C, D, E, F, G, H]) Unpack() (A, B, C, D, E, F, G, H) {
	return t.A, t.B, t.C, t.D, t.E, t.F, t.G, t.H
}

// Tuple9 is a group of 9 elements.
type Tuple9[A any, B any, C any, D any, E any, F any, G any, H any, I any] struct {
	A A
	B B
	C C
	D D
	E E
	F F
	G G
	H H
	I I
}

// Unpack returns values contained in tuple.
func (t Tuple9[A, B, C, D, E, F, G, H, I]) Unpack() (A, B, C, D, E, F, G, H, I) {
	return t.A, t.B, t.C, t.D, t.E, t.F, t.G, t.H, t.I
}
07070100000A9B000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003000000000elemental-cli-0.3.1/vendor/github.com/sanity-io   07070100000A9C000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/github.com/sanity-io/litter    07070100000A9D000081A4000000000000000000000001645E367C0000000A000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/sanity-io/litter/.gitignore .DS_Store
  07070100000A9E000081A4000000000000000000000001645E367C000000C8000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/sanity-io/litter/CHANGELOG.md   # 1.1.0 (2017-11-1)

A slight breaking change. The dump-method of the `Dumper` interface has changed from `Dump` to `LitterDump` to mitigate potential collisions.

# 1.0.0 (2017-10-29)

Tagged 1.0.0.
07070100000A9F000081A4000000000000000000000001645E367C0000043A000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/sanity-io/litter/LICENSE    The MIT License (MIT)

Copyright (c) 2016-2017 Sanity.io.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
  07070100000AA0000081A4000000000000000000000001645E367C000012E2000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/sanity-io/litter/README.md  [![!Build Status](https://travis-ci.org/sanity-io/litter.svg?branch=master)](https://travis-ci.org/sanity-io/litter)

# Litter

**Litter is a pretty printer library for Go data structures to aid in debugging and testing.**

---

Litter is provided by

<a href="https://www.sanity.io/?utm_source=GitHub&utm_campaign=litter" rel="nofollow" target="_blank">
	<img src="https://www.sanity.io/static/images/logo_red.svg?v=2" width="300"><br />
	Sanity: The Headless CMS Construction Kit
</a>

---

Litter named for the fact that it outputs *literals*, which you *litter* your output with. As a side benefit, all Litter output is syntactically correct Go. You can use Litter to emit data during debug, and it's also really nice for "snapshot data" in unit tests, since it produces consistent, sorted output. Litter was inspired by [Spew](https://github.com/davecgh/go-spew), but focuses on terseness and readability.

### Basic example

This:

```go
type Person struct {
	Name   string
	Age    int
	Parent *Person
}

litter.Dump(Person{
	Name:   "Bob",
	Age:    20,
	Parent: &Person{
		Name: "Jane",
		Age:  50,
	},
})
```

will output:

```
Person{
	Name: "Bob",
	Age: 20,
	Parent: &Person{
		Name: "Jane",
		Age: 50,
	},
}
```

### Use in tests

Litter is a great alternative to JSON or YAML for providing "snapshots" or example data. For example:

```go
func TestSearch(t *testing.T) {
	result := DoSearch()

	actual := litterOpts.Sdump(result)
	expected, err := ioutil.ReadFile("testdata.txt")
	if err != nil {
		// First run, write test data since it doesn't exist
		if !os.IsNotExist(err) {
			t.Error(err)
		}
		ioutil.Write("testdata.txt", actual, 0644)
		actual = expected
	}
	if expected != actual {
		t.Errorf("Expected %s, got %s", expected, actual)
	}
}
```

The first run will use Litter to write the data to `testdata.txt`. On subsequent runs, the test will compare the data. Since Litter always provides a consistent view of a value, you can compare the strings directly.

### Circular references

Litter detects circular references or aliasing, and will replace additional references to the same object with aliases. For example:

```go
type Circular struct {
	Self *Circular
}

selfref := Circular{}
selfref.Self = &selfref

litter.Dump(selfref)
```

will output:

```
Circular { // p0
	Self: p0,
}
```

## Installation

```bash
$ go get -u github.com/sanity-io/litter
```

## Quick start

Add this import line to the file you're working in:

```go
import "github.com/sanity-io/litter"
```

To dump a variable with full newlines, indentation, type, and aliasing information, use `Dump` or `Sdump`:

```go
litter.Dump(myVar1)
str := litter.Sdump(myVar1)
```

### `litter.Dump(value, ...)`

Dumps the data structure to STDOUT.

### `litter.Sdump(value, ...)`

Returns the dump as a string

## Configuration

You can configure litter globally by modifying the default `litter.Config`

```go
// Strip all package names from types
litter.Config.StripPackageNames = true

// Hide private struct fields from dumped structs
litter.Config.HidePrivateFields = true

// Hide fields matched with given regexp if it is not nil. It is set up to hide fields generate with protoc-gen-go
litter.Config.FieldExclusions = regexp.MustCompile(`^(XXX_.*)$`)

// Sets a "home" package. The package name will be stripped from all its types
litter.Config.HomePackage = "mypackage"

// Sets separator used when multiple arguments are passed to Dump() or Sdump().
litter.Config.Separator = "\n"

// Use compact output: strip newlines and other unnecessary whitespace
litter.Config.Compact = true

// Prevents duplicate pointers from being replaced by placeholder variable names (except in necessary, in the case
// of circular references)
litter.Config.DisablePointerReplacement = true
```

### `litter.Options`

Allows you to configure a local configuration of litter to allow for proper compartmentalization of state at the expense of some comfort:

``` go
	sq := litter.Options {
		HidePrivateFields: true,
		HomePackage: "thispack",
		Separator: " ",
	}

	sq.Dump("dumped", "with", "local", "settings")
```

## Custom dumpers

Implement the interface Dumper on your types to take control of how your type is dumped.

``` go
type Dumper interface {
	LitterDump(w io.Writer)
}
```

Just write your custom dump to the provided stream, using multiple lines divided by `"\n"` if you need. Litter
might indent your output according to context, and optionally decorate your first line with a pointer comment
where appropriate.

A couple of examples from the test suite:

``` go
type CustomMultiLineDumper struct {}

func (cmld *CustomMultiLineDumper) LitterDump(w io.Writer) {
	w.Write([]byte("{\n  multi\n  line\n}"))
}

type CustomSingleLineDumper int

func (csld CustomSingleLineDumper) LitterDump(w io.Writer) {
	w.Write([]byte("<custom>"))
}
````
  07070100000AA1000081A4000000000000000000000001645E367C00002ECD000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/sanity-io/litter/dump.go    package litter

import (
	"bytes"
	"fmt"
	"io"
	"os"
	"reflect"
	"regexp"
	"runtime"
	"sort"
	"strconv"
	"strings"
)

var (
	packageNameStripperRegexp = regexp.MustCompile(`\b[a-zA-Z_]+[a-zA-Z_0-9]+\.`)
	compactTypeRegexp         = regexp.MustCompile(`\s*([,;{}()])\s*`)
)

// Dumper is the interface for implementing custom dumper for your types.
type Dumper interface {
	LitterDump(w io.Writer)
}

// Options represents configuration options for litter
type Options struct {
	Compact           bool
	StripPackageNames bool
	HidePrivateFields bool
	HideZeroValues    bool
	FieldExclusions   *regexp.Regexp
	FieldFilter       func(reflect.StructField, reflect.Value) bool
	HomePackage       string
	Separator         string
	StrictGo          bool
	DumpFunc          func(reflect.Value, io.Writer) bool

	// DisablePointerReplacement, if true, disables the replacing of pointer data with variable names
	// when it's safe. This is useful for diffing two structures, where pointer variables would cause
	// false changes. However, circular graphs are still detected and elided to avoid infinite output.
	DisablePointerReplacement bool
}

// Config is the default config used when calling Dump
var Config = Options{
	StripPackageNames: false,
	HidePrivateFields: true,
	FieldExclusions:   regexp.MustCompile(`^(XXX_.*)$`), // XXX_ is a prefix of fields generated by protoc-gen-go
	Separator:         " ",
}

type dumpState struct {
	w                 io.Writer
	depth             int
	config            *Options
	pointers          ptrmap
	visitedPointers   ptrmap
	parentPointers    ptrmap
	currentPointer    *ptrinfo
	homePackageRegexp *regexp.Regexp
}

func (s *dumpState) write(b []byte) {
	if _, err := s.w.Write(b); err != nil {
		panic(err)
	}
}

func (s *dumpState) writeString(str string) {
	s.write([]byte(str))
}

func (s *dumpState) indent() {
	if !s.config.Compact {
		s.write(bytes.Repeat([]byte("  "), s.depth))
	}
}

func (s *dumpState) newlineWithPointerNameComment() {
	if ptr := s.currentPointer; ptr != nil {
		if s.config.Compact {
			s.write([]byte(fmt.Sprintf("/*%s*/", ptr.label())))
		} else {
			s.write([]byte(fmt.Sprintf(" // %s\n", ptr.label())))
		}
		s.currentPointer = nil
		return
	}
	if !s.config.Compact {
		s.write([]byte("\n"))
	}
}

func (s *dumpState) dumpType(v reflect.Value) {
	typeName := v.Type().String()
	if s.config.StripPackageNames {
		typeName = packageNameStripperRegexp.ReplaceAllLiteralString(typeName, "")
	} else if s.homePackageRegexp != nil {
		typeName = s.homePackageRegexp.ReplaceAllLiteralString(typeName, "")
	}
	if s.config.Compact {
		typeName = compactTypeRegexp.ReplaceAllString(typeName, "$1")
	}
	s.write([]byte(typeName))
}

func (s *dumpState) dumpSlice(v reflect.Value) {
	s.dumpType(v)
	numEntries := v.Len()
	if numEntries == 0 {
		s.write([]byte("{}"))
		return
	}
	s.write([]byte("{"))
	s.newlineWithPointerNameComment()
	s.depth++
	for i := 0; i < numEntries; i++ {
		s.indent()
		s.dumpVal(v.Index(i))
		if !s.config.Compact || i < numEntries-1 {
			s.write([]byte(","))
		}
		s.newlineWithPointerNameComment()
	}
	s.depth--
	s.indent()
	s.write([]byte("}"))
}

func (s *dumpState) dumpStruct(v reflect.Value) {
	dumpPreamble := func() {
		s.dumpType(v)
		s.write([]byte("{"))
		s.newlineWithPointerNameComment()
		s.depth++
	}
	preambleDumped := false
	vt := v.Type()
	numFields := v.NumField()
	for i := 0; i < numFields; i++ {
		vtf := vt.Field(i)
		if s.config.HidePrivateFields && vtf.PkgPath != "" || s.config.FieldExclusions != nil && s.config.FieldExclusions.MatchString(vtf.Name) {
			continue
		}
		if s.config.FieldFilter != nil && !s.config.FieldFilter(vtf, v.Field(i)) {
			continue
		}
		if s.config.HideZeroValues && isZeroValue(v.Field(i)) {
			continue
		}
		if !preambleDumped {
			dumpPreamble()
			preambleDumped = true
		}
		s.indent()
		s.write([]byte(vtf.Name))
		if s.config.Compact {
			s.write([]byte(":"))
		} else {
			s.write([]byte(": "))
		}
		s.dumpVal(v.Field(i))
		if !s.config.Compact || i < numFields-1 {
			s.write([]byte(","))
		}
		s.newlineWithPointerNameComment()
	}
	if preambleDumped {
		s.depth--
		s.indent()
		s.write([]byte("}"))
	} else {
		// There were no fields dumped
		s.dumpType(v)
		s.write([]byte("{}"))
	}
}

func (s *dumpState) dumpMap(v reflect.Value) {
	if v.IsNil() {
		s.dumpType(v)
		s.writeString("(nil)")
		return
	}

	s.dumpType(v)

	keys := v.MapKeys()
	if len(keys) == 0 {
		s.write([]byte("{}"))
		return
	}

	s.write([]byte("{"))
	s.newlineWithPointerNameComment()
	s.depth++
	sort.Sort(mapKeySorter{
		keys:    keys,
		options: s.config,
	})
	numKeys := len(keys)
	for i, key := range keys {
		s.indent()
		s.dumpVal(key)
		if s.config.Compact {
			s.write([]byte(":"))
		} else {
			s.write([]byte(": "))
		}
		s.dumpVal(v.MapIndex(key))
		if !s.config.Compact || i < numKeys-1 {
			s.write([]byte(","))
		}
		s.newlineWithPointerNameComment()
	}
	s.depth--
	s.indent()
	s.write([]byte("}"))
}

func (s *dumpState) dumpFunc(v reflect.Value) {
	parts := strings.Split(runtime.FuncForPC(v.Pointer()).Name(), "/")
	name := parts[len(parts)-1]

	// Anonymous function
	if strings.Count(name, ".") > 1 {
		s.dumpType(v)
	} else {
		if s.config.StripPackageNames {
			name = packageNameStripperRegexp.ReplaceAllLiteralString(name, "")
		} else if s.homePackageRegexp != nil {
			name = s.homePackageRegexp.ReplaceAllLiteralString(name, "")
		}
		if s.config.Compact {
			name = compactTypeRegexp.ReplaceAllString(name, "$1")
		}
		s.write([]byte(name))
	}
}

func (s *dumpState) dumpChan(v reflect.Value) {
	vType := v.Type()
	res := []byte(vType.String())
	s.write(res)
}

func (s *dumpState) dumpCustom(v reflect.Value, buf *bytes.Buffer) {

	// Dump the type
	s.dumpType(v)

	if s.config.Compact {
		s.write(buf.Bytes())
		return
	}

	// Now output the dump taking care to apply the current indentation-level
	// and pointer name comments.
	var err error
	firstLine := true
	for err == nil {
		var lineBytes []byte
		lineBytes, err = buf.ReadBytes('\n')
		line := strings.TrimRight(string(lineBytes), " \n")

		if err != nil && err != io.EOF {
			break
		}
		// Do not indent first line
		if firstLine {
			firstLine = false
		} else {
			s.indent()
		}
		s.write([]byte(line))

		// At EOF we're done
		if err == io.EOF {
			return
		}
		s.newlineWithPointerNameComment()
	}
	panic(err)
}

func (s *dumpState) dump(value interface{}) {
	if value == nil {
		printNil(s.w)
		return
	}
	v := reflect.ValueOf(value)
	s.dumpVal(v)
}

func (s *dumpState) descendIntoPossiblePointer(value reflect.Value, f func()) {
	canonicalize := true
	if isPointerValue(value) {
		// If elision disabled, and this is not a circular reference, don't canonicalize
		if s.config.DisablePointerReplacement && s.parentPointers.add(value) {
			canonicalize = false
		}

		// Add to stack of pointers we're recursively descending into
		s.parentPointers.add(value)
		defer s.parentPointers.remove(value)
	}

	if !canonicalize {
		ptr, _ := s.pointerFor(value)
		s.currentPointer = ptr
		f()
		return
	}

	ptr, firstVisit := s.pointerFor(value)
	if ptr == nil {
		f()
		return
	}
	if firstVisit {
		s.currentPointer = ptr
		f()
		return
	}
	s.write([]byte(ptr.label()))
}

func (s *dumpState) dumpVal(value reflect.Value) {
	if value.Kind() == reflect.Ptr && value.IsNil() {
		s.write([]byte("nil"))
		return
	}

	v := deInterface(value)
	kind := v.Kind()

	// Try to handle with dump func
	if s.config.DumpFunc != nil {
		buf := new(bytes.Buffer)
		if s.config.DumpFunc(v, buf) {
			s.dumpCustom(v, buf)
			return
		}
	}

	// Handle custom dumpers
	dumperType := reflect.TypeOf((*Dumper)(nil)).Elem()
	if v.Type().Implements(dumperType) {
		s.descendIntoPossiblePointer(v, func() {
			// Run the custom dumper buffering the output
			buf := new(bytes.Buffer)
			dumpFunc := v.MethodByName("LitterDump")
			dumpFunc.Call([]reflect.Value{reflect.ValueOf(buf)})
			s.dumpCustom(v, buf)
		})
		return
	}

	switch kind {
	case reflect.Invalid:
		// Do nothing.  We should never get here since invalid has already
		// been handled above.
		s.write([]byte("<invalid>"))

	case reflect.Bool:
		printBool(s.w, v.Bool())

	case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int:
		printInt(s.w, v.Int(), 10)

	case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint:
		printUint(s.w, v.Uint(), 10)

	case reflect.Float32:
		printFloat(s.w, v.Float(), 32)

	case reflect.Float64:
		printFloat(s.w, v.Float(), 64)

	case reflect.Complex64:
		printComplex(s.w, v.Complex(), 32)

	case reflect.Complex128:
		printComplex(s.w, v.Complex(), 64)

	case reflect.String:
		s.write([]byte(strconv.Quote(v.String())))

	case reflect.Slice:
		if v.IsNil() {
			printNil(s.w)
			break
		}
		fallthrough

	case reflect.Array:
		s.descendIntoPossiblePointer(v, func() {
			s.dumpSlice(v)
		})

	case reflect.Interface:
		// The only time we should get here is for nil interfaces due to
		// unpackValue calls.
		if v.IsNil() {
			printNil(s.w)
		}

	case reflect.Ptr:
		s.descendIntoPossiblePointer(v, func() {
			if s.config.StrictGo {
				s.writeString(fmt.Sprintf("(func(v %s) *%s { return &v })(", v.Elem().Type(), v.Elem().Type()))
				s.dumpVal(v.Elem())
				s.writeString(")")
			} else {
				s.writeString("&")
				s.dumpVal(v.Elem())
			}
		})

	case reflect.Map:
		s.descendIntoPossiblePointer(v, func() {
			s.dumpMap(v)
		})

	case reflect.Struct:
		s.dumpStruct(v)

	case reflect.Func:
		s.dumpFunc(v)

	case reflect.Chan:
		s.dumpChan(v)

	default:
		if v.CanInterface() {
			s.writeString(fmt.Sprintf("%v", v.Interface()))
		} else {
			s.writeString(fmt.Sprintf("%v", v.String()))
		}
	}
}

// registers that the value has been visited and checks to see if it is one of the
// pointers we will see multiple times. If it is, it returns a temporary name for this
// pointer. It also returns a boolean value indicating whether this is the first time
// this name is returned so the caller can decide whether the contents of the pointer
// has been dumped before or not.
func (s *dumpState) pointerFor(v reflect.Value) (*ptrinfo, bool) {
	if isPointerValue(v) {
		if info, ok := s.pointers.get(v); ok {
			firstVisit := s.visitedPointers.add(v)
			return info, firstVisit
		}
	}
	return nil, false
}

// prepares a new state object for dumping the provided value
func newDumpState(value reflect.Value, options *Options, writer io.Writer) *dumpState {
	result := &dumpState{
		config:   options,
		pointers: mapReusedPointers(value),
		w:        writer,
	}

	if options.HomePackage != "" {
		result.homePackageRegexp = regexp.MustCompile(fmt.Sprintf("\\b%s\\.", options.HomePackage))
	}

	return result
}

// Dump a value to stdout
func Dump(value ...interface{}) {
	(&Config).Dump(value...)
}

// Sdump dumps a value to a string
func Sdump(value ...interface{}) string {
	return (&Config).Sdump(value...)
}

// Dump a value to stdout according to the options
func (o Options) Dump(values ...interface{}) {
	for i, value := range values {
		state := newDumpState(reflect.ValueOf(value), &o, os.Stdout)
		if i > 0 {
			state.write([]byte(o.Separator))
		}
		state.dump(value)
	}
	_, _ = os.Stdout.Write([]byte("\n"))
}

// Sdump dumps a value to a string according to the options
func (o Options) Sdump(values ...interface{}) string {
	buf := new(bytes.Buffer)
	for i, value := range values {
		if i > 0 {
			_, _ = buf.Write([]byte(o.Separator))
		}
		state := newDumpState(reflect.ValueOf(value), &o, buf)
		state.dump(value)
	}
	return buf.String()
}

type mapKeySorter struct {
	keys    []reflect.Value
	options *Options
}

func (s mapKeySorter) Len() int {
	return len(s.keys)
}

func (s mapKeySorter) Swap(i, j int) {
	s.keys[i], s.keys[j] = s.keys[j], s.keys[i]
}

func (s mapKeySorter) Less(i, j int) bool {
	ibuf := new(bytes.Buffer)
	jbuf := new(bytes.Buffer)
	newDumpState(s.keys[i], s.options, ibuf).dumpVal(s.keys[i])
	newDumpState(s.keys[j], s.options, jbuf).dumpVal(s.keys[j])
	return ibuf.String() < jbuf.String()
}
   07070100000AA2000081A4000000000000000000000001645E367C00000CCC000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/sanity-io/litter/pointers.go    package litter

import (
	"fmt"
	"reflect"
	"sort"
)

// mapReusedPointers takes a structure, and recursively maps all pointers mentioned in the tree,
// detecting circular references, and providing a list of all pointers that was referenced at
// least twice by the provided structure.
func mapReusedPointers(v reflect.Value) ptrmap {
	pm := &pointerVisitor{}
	pm.consider(v)
	return pm.reused
}

// A map of pointers.
type ptrinfo struct {
	id     int
	parent *ptrmap
}

func (p *ptrinfo) label() string {
	if p.id == -1 {
		p.id = p.parent.count
		p.parent.count++
	}
	return fmt.Sprintf("p%d", p.id)
}

type ptrkey struct {
	p uintptr
	t reflect.Type
}

func ptrkeyFor(v reflect.Value) (k ptrkey) {
	k.p = v.Pointer()
	for v.Kind() == reflect.Ptr {
		v = v.Elem()
	}
	if v.IsValid() {
		k.t = v.Type()
	}
	return
}

type ptrmap struct {
	m     map[ptrkey]*ptrinfo
	count int
}

// Returns true if contains a pointer.
func (pm *ptrmap) contains(v reflect.Value) bool {
	if pm.m != nil {
		_, ok := pm.m[ptrkeyFor(v)]
		return ok
	}
	return false
}

// Gets a pointer.
func (pm *ptrmap) get(v reflect.Value) (*ptrinfo, bool) {
	if pm.m != nil {
		p, ok := pm.m[ptrkeyFor(v)]
		return p, ok
	}
	return nil, false
}

// Removes a pointer.
func (pm *ptrmap) remove(v reflect.Value) {
	if pm.m != nil {
		delete(pm.m, ptrkeyFor(v))
	}
}

// Adds a pointer.
func (pm *ptrmap) add(p reflect.Value) bool {
	if pm.contains(p) {
		return false
	}
	pm.put(p)
	return true
}

// Adds a pointer (slow path).
func (pm *ptrmap) put(v reflect.Value) {
	if pm.m == nil {
		pm.m = make(map[ptrkey]*ptrinfo, 31)
	}

	key := ptrkeyFor(v)
	if _, ok := pm.m[key]; !ok {
		pm.m[key] = &ptrinfo{id: -1, parent: pm}
	}
}

type pointerVisitor struct {
	pointers ptrmap
	reused   ptrmap
}

// Recursively consider v and each of its children, updating the map according to the
// semantics of MapReusedPointers
func (pv *pointerVisitor) consider(v reflect.Value) {
	if v.Kind() == reflect.Invalid {
		return
	}
	if isPointerValue(v) { // pointer is 0 for unexported fields
		if pv.tryAddPointer(v) {
			// No use descending inside this value, since it have been seen before and all its descendants
			// have been considered
			return
		}
	}

	// Now descend into any children of this value
	switch v.Kind() {
	case reflect.Slice, reflect.Array:
		for i := 0; i < v.Len(); i++ {
			pv.consider(v.Index(i))
		}

	case reflect.Interface:
		pv.consider(v.Elem())

	case reflect.Ptr:
		pv.consider(v.Elem())

	case reflect.Map:
		keys := v.MapKeys()
		sort.Sort(mapKeySorter{
			keys:    keys,
			options: &Config,
		})
		for _, key := range keys {
			pv.consider(key)
			pv.consider(v.MapIndex(key))
		}

	case reflect.Struct:
		numFields := v.NumField()
		for i := 0; i < numFields; i++ {
			pv.consider(v.Field(i))
		}
	}
}

// addPointer to the pointerMap, update reusedPointers. Returns true if pointer was reused
func (pv *pointerVisitor) tryAddPointer(v reflect.Value) bool {
	// Is this allready known to be reused?
	if pv.reused.contains(v) {
		return true
	}

	// Have we seen it once before?
	if pv.pointers.contains(v) {
		// Add it to the register of pointers we have seen more than once
		pv.reused.add(v)
		return true
	}

	// This pointer was new to us
	pv.pointers.add(v)
	return false
}
07070100000AA3000081A4000000000000000000000001645E367C00000460000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/sanity-io/litter/print.go   package litter

import (
	"io"
	"math"
	"strconv"
)

func printBool(w io.Writer, value bool) {
	if value {
		w.Write([]byte("true"))
		return
	}
	w.Write([]byte("false"))
}

func printInt(w io.Writer, val int64, base int) {
	w.Write([]byte(strconv.FormatInt(val, base)))
}

func printUint(w io.Writer, val uint64, base int) {
	w.Write([]byte(strconv.FormatUint(val, base)))
}

func printFloat(w io.Writer, val float64, precision int) {
	if math.Trunc(val) == val {
		// Ensure that floats like 1.0 are always printed with a decimal point
		w.Write([]byte(strconv.FormatFloat(val, 'f', 1, precision)))
	} else {
		w.Write([]byte(strconv.FormatFloat(val, 'g', -1, precision)))
	}
}

func printComplex(w io.Writer, c complex128, floatPrecision int) {
	w.Write([]byte("complex"))
	printInt(w, int64(floatPrecision*2), 10)
	r := real(c)
	w.Write([]byte("("))
	w.Write([]byte(strconv.FormatFloat(r, 'g', -1, floatPrecision)))
	i := imag(c)
	if i >= 0 {
		w.Write([]byte("+"))
	}
	w.Write([]byte(strconv.FormatFloat(i, 'g', -1, floatPrecision)))
	w.Write([]byte("i)"))
}

func printNil(w io.Writer) {
	w.Write([]byte("nil"))
}
07070100000AA4000081A4000000000000000000000001645E367C00000301000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/sanity-io/litter/util.go    package litter

import (
	"reflect"
)

// deInterface returns values inside of non-nil interfaces when possible.
// This is useful for data types like structs, arrays, slices, and maps which
// can contain varying types packed inside an interface.
func deInterface(v reflect.Value) reflect.Value {
	if v.Kind() == reflect.Interface && !v.IsNil() {
		v = v.Elem()
	}
	return v
}

func isPointerValue(v reflect.Value) bool {
	switch v.Kind() {
	case reflect.Chan, reflect.Func, reflect.Map, reflect.Ptr, reflect.Slice, reflect.UnsafePointer:
		return true
	}
	return false
}

func isZeroValue(v reflect.Value) bool {
	return (isPointerValue(v) && v.IsNil()) ||
		(v.IsValid() && v.CanInterface() && reflect.DeepEqual(v.Interface(), reflect.Zero(v.Type()).Interface()))
}
   07070100000AA5000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/vendor/github.com/satori  07070100000AA6000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/github.com/satori/go.uuid  07070100000AA7000081A4000000000000000000000001645E367C00000173000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/satori/go.uuid/.travis.yml  language: go
sudo: false
go:
    - 1.6.x
    - 1.7.x
    - 1.8.x
    - 1.9.x
    - 1.10.x
    - 1.11.x
    - tip
matrix:
    allow_failures:
        - go: tip
    fast_finish: true
before_install:
    - go get github.com/mattn/goveralls
    - go get golang.org/x/tools/cmd/cover
script:
    - $HOME/gopath/bin/goveralls -service=travis-ci
notifications:
    email: false
 07070100000AA8000081A4000000000000000000000001645E367C0000043A000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/satori/go.uuid/LICENSE  Copyright (C) 2013-2018 by Maxim Bublis <b@codemonkey.ru>

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  07070100000AA9000081A4000000000000000000000001645E367C00000825000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/satori/go.uuid/README.md    # UUID package for Go language

[![Build Status](https://travis-ci.org/satori/go.uuid.svg?branch=master)](https://travis-ci.org/satori/go.uuid)
[![Coverage Status](https://coveralls.io/repos/github/satori/go.uuid/badge.svg?branch=master)](https://coveralls.io/github/satori/go.uuid)
[![GoDoc](http://godoc.org/github.com/satori/go.uuid?status.svg)](http://godoc.org/github.com/satori/go.uuid)

This package provides pure Go implementation of Universally Unique Identifier (UUID). Supported both creation and parsing of UUIDs.

With 100% test coverage and benchmarks out of box.

Supported versions:
* Version 1, based on timestamp and MAC address (RFC 4122)
* Version 2, based on timestamp, MAC address and POSIX UID/GID (DCE 1.1)
* Version 3, based on MD5 hashing (RFC 4122)
* Version 4, based on random numbers (RFC 4122)
* Version 5, based on SHA-1 hashing (RFC 4122)

## Installation

Use the `go` command:

	$ go get github.com/satori/go.uuid

## Requirements

UUID package tested against Go >= 1.6.

## Example

```go
package main

import (
	"fmt"
	"github.com/satori/go.uuid"
)

func main() {
	// Creating UUID Version 4
	// panic on error
	u1 := uuid.Must(uuid.NewV4())
	fmt.Printf("UUIDv4: %s\n", u1)

	// or error handling
	u2, err := uuid.NewV4()
	if err != nil {
		fmt.Printf("Something went wrong: %s", err)
		return
	}
	fmt.Printf("UUIDv4: %s\n", u2)

	// Parsing UUID from string input
	u2, err := uuid.FromString("6ba7b810-9dad-11d1-80b4-00c04fd430c8")
	if err != nil {
		fmt.Printf("Something went wrong: %s", err)
		return
	}
	fmt.Printf("Successfully parsed: %s", u2)
}
```

## Documentation

[Documentation](http://godoc.org/github.com/satori/go.uuid) is hosted at GoDoc project.

## Links
* [RFC 4122](http://tools.ietf.org/html/rfc4122)
* [DCE 1.1: Authentication and Security Services](http://pubs.opengroup.org/onlinepubs/9696989899/chap5.htm#tagcjh_08_02_01_01)

## Copyright

Copyright (C) 2013-2018 by Maxim Bublis <b@codemonkey.ru>.

UUID package released under MIT License.
See [LICENSE](https://github.com/satori/go.uuid/blob/master/LICENSE) for details.
   07070100000AAA000081A4000000000000000000000001645E367C0000178D000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/satori/go.uuid/codec.go // Copyright (C) 2013-2018 by Maxim Bublis <b@codemonkey.ru>
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

package uuid

import (
	"bytes"
	"encoding/hex"
	"fmt"
)

// FromBytes returns UUID converted from raw byte slice input.
// It will return error if the slice isn't 16 bytes long.
func FromBytes(input []byte) (u UUID, err error) {
	err = u.UnmarshalBinary(input)
	return
}

// FromBytesOrNil returns UUID converted from raw byte slice input.
// Same behavior as FromBytes, but returns a Nil UUID on error.
func FromBytesOrNil(input []byte) UUID {
	uuid, err := FromBytes(input)
	if err != nil {
		return Nil
	}
	return uuid
}

// FromString returns UUID parsed from string input.
// Input is expected in a form accepted by UnmarshalText.
func FromString(input string) (u UUID, err error) {
	err = u.UnmarshalText([]byte(input))
	return
}

// FromStringOrNil returns UUID parsed from string input.
// Same behavior as FromString, but returns a Nil UUID on error.
func FromStringOrNil(input string) UUID {
	uuid, err := FromString(input)
	if err != nil {
		return Nil
	}
	return uuid
}

// MarshalText implements the encoding.TextMarshaler interface.
// The encoding is the same as returned by String.
func (u UUID) MarshalText() (text []byte, err error) {
	text = []byte(u.String())
	return
}

// UnmarshalText implements the encoding.TextUnmarshaler interface.
// Following formats are supported:
//   "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
//   "{6ba7b810-9dad-11d1-80b4-00c04fd430c8}",
//   "urn:uuid:6ba7b810-9dad-11d1-80b4-00c04fd430c8"
//   "6ba7b8109dad11d180b400c04fd430c8"
// ABNF for supported UUID text representation follows:
//   uuid := canonical | hashlike | braced | urn
//   plain := canonical | hashlike
//   canonical := 4hexoct '-' 2hexoct '-' 2hexoct '-' 6hexoct
//   hashlike := 12hexoct
//   braced := '{' plain '}'
//   urn := URN ':' UUID-NID ':' plain
//   URN := 'urn'
//   UUID-NID := 'uuid'
//   12hexoct := 6hexoct 6hexoct
//   6hexoct := 4hexoct 2hexoct
//   4hexoct := 2hexoct 2hexoct
//   2hexoct := hexoct hexoct
//   hexoct := hexdig hexdig
//   hexdig := '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' |
//             'a' | 'b' | 'c' | 'd' | 'e' | 'f' |
//             'A' | 'B' | 'C' | 'D' | 'E' | 'F'
func (u *UUID) UnmarshalText(text []byte) (err error) {
	switch len(text) {
	case 32:
		return u.decodeHashLike(text)
	case 36:
		return u.decodeCanonical(text)
	case 38:
		return u.decodeBraced(text)
	case 41:
		fallthrough
	case 45:
		return u.decodeURN(text)
	default:
		return fmt.Errorf("uuid: incorrect UUID length: %s", text)
	}
}

// decodeCanonical decodes UUID string in format
// "6ba7b810-9dad-11d1-80b4-00c04fd430c8".
func (u *UUID) decodeCanonical(t []byte) (err error) {
	if t[8] != '-' || t[13] != '-' || t[18] != '-' || t[23] != '-' {
		return fmt.Errorf("uuid: incorrect UUID format %s", t)
	}

	src := t[:]
	dst := u[:]

	for i, byteGroup := range byteGroups {
		if i > 0 {
			src = src[1:] // skip dash
		}
		_, err = hex.Decode(dst[:byteGroup/2], src[:byteGroup])
		if err != nil {
			return
		}
		src = src[byteGroup:]
		dst = dst[byteGroup/2:]
	}

	return
}

// decodeHashLike decodes UUID string in format
// "6ba7b8109dad11d180b400c04fd430c8".
func (u *UUID) decodeHashLike(t []byte) (err error) {
	src := t[:]
	dst := u[:]

	if _, err = hex.Decode(dst, src); err != nil {
		return err
	}
	return
}

// decodeBraced decodes UUID string in format
// "{6ba7b810-9dad-11d1-80b4-00c04fd430c8}" or in format
// "{6ba7b8109dad11d180b400c04fd430c8}".
func (u *UUID) decodeBraced(t []byte) (err error) {
	l := len(t)

	if t[0] != '{' || t[l-1] != '}' {
		return fmt.Errorf("uuid: incorrect UUID format %s", t)
	}

	return u.decodePlain(t[1 : l-1])
}

// decodeURN decodes UUID string in format
// "urn:uuid:6ba7b810-9dad-11d1-80b4-00c04fd430c8" or in format
// "urn:uuid:6ba7b8109dad11d180b400c04fd430c8".
func (u *UUID) decodeURN(t []byte) (err error) {
	total := len(t)

	urn_uuid_prefix := t[:9]

	if !bytes.Equal(urn_uuid_prefix, urnPrefix) {
		return fmt.Errorf("uuid: incorrect UUID format: %s", t)
	}

	return u.decodePlain(t[9:total])
}

// decodePlain decodes UUID string in canonical format
// "6ba7b810-9dad-11d1-80b4-00c04fd430c8" or in hash-like format
// "6ba7b8109dad11d180b400c04fd430c8".
func (u *UUID) decodePlain(t []byte) (err error) {
	switch len(t) {
	case 32:
		return u.decodeHashLike(t)
	case 36:
		return u.decodeCanonical(t)
	default:
		return fmt.Errorf("uuid: incorrrect UUID length: %s", t)
	}
}

// MarshalBinary implements the encoding.BinaryMarshaler interface.
func (u UUID) MarshalBinary() (data []byte, err error) {
	data = u.Bytes()
	return
}

// UnmarshalBinary implements the encoding.BinaryUnmarshaler interface.
// It will return error if the slice isn't 16 bytes long.
func (u *UUID) UnmarshalBinary(data []byte) (err error) {
	if len(data) != Size {
		err = fmt.Errorf("uuid: UUID must be exactly 16 bytes long, got %d bytes", len(data))
		return
	}
	copy(u[:], data)

	return
}
   07070100000AAB000081A4000000000000000000000001645E367C000019D3000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/satori/go.uuid/generator.go // Copyright (C) 2013-2018 by Maxim Bublis <b@codemonkey.ru>
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

package uuid

import (
	"crypto/md5"
	"crypto/rand"
	"crypto/sha1"
	"encoding/binary"
	"fmt"
	"hash"
	"io"
	"net"
	"os"
	"sync"
	"time"
)

// Difference in 100-nanosecond intervals between
// UUID epoch (October 15, 1582) and Unix epoch (January 1, 1970).
const epochStart = 122192928000000000

type epochFunc func() time.Time
type hwAddrFunc func() (net.HardwareAddr, error)

var (
	global = newRFC4122Generator()

	posixUID = uint32(os.Getuid())
	posixGID = uint32(os.Getgid())
)

// NewV1 returns UUID based on current timestamp and MAC address.
func NewV1() (UUID, error) {
	return global.NewV1()
}

// NewV2 returns DCE Security UUID based on POSIX UID/GID.
func NewV2(domain byte) (UUID, error) {
	return global.NewV2(domain)
}

// NewV3 returns UUID based on MD5 hash of namespace UUID and name.
func NewV3(ns UUID, name string) UUID {
	return global.NewV3(ns, name)
}

// NewV4 returns random generated UUID.
func NewV4() (UUID, error) {
	return global.NewV4()
}

// NewV5 returns UUID based on SHA-1 hash of namespace UUID and name.
func NewV5(ns UUID, name string) UUID {
	return global.NewV5(ns, name)
}

// Generator provides interface for generating UUIDs.
type Generator interface {
	NewV1() (UUID, error)
	NewV2(domain byte) (UUID, error)
	NewV3(ns UUID, name string) UUID
	NewV4() (UUID, error)
	NewV5(ns UUID, name string) UUID
}

// Default generator implementation.
type rfc4122Generator struct {
	clockSequenceOnce sync.Once
	hardwareAddrOnce  sync.Once
	storageMutex      sync.Mutex

	rand io.Reader

	epochFunc     epochFunc
	hwAddrFunc    hwAddrFunc
	lastTime      uint64
	clockSequence uint16
	hardwareAddr  [6]byte
}

func newRFC4122Generator() Generator {
	return &rfc4122Generator{
		epochFunc:  time.Now,
		hwAddrFunc: defaultHWAddrFunc,
		rand:       rand.Reader,
	}
}

// NewV1 returns UUID based on current timestamp and MAC address.
func (g *rfc4122Generator) NewV1() (UUID, error) {
	u := UUID{}

	timeNow, clockSeq, err := g.getClockSequence()
	if err != nil {
		return Nil, err
	}
	binary.BigEndian.PutUint32(u[0:], uint32(timeNow))
	binary.BigEndian.PutUint16(u[4:], uint16(timeNow>>32))
	binary.BigEndian.PutUint16(u[6:], uint16(timeNow>>48))
	binary.BigEndian.PutUint16(u[8:], clockSeq)

	hardwareAddr, err := g.getHardwareAddr()
	if err != nil {
		return Nil, err
	}
	copy(u[10:], hardwareAddr)

	u.SetVersion(V1)
	u.SetVariant(VariantRFC4122)

	return u, nil
}

// NewV2 returns DCE Security UUID based on POSIX UID/GID.
func (g *rfc4122Generator) NewV2(domain byte) (UUID, error) {
	u, err := g.NewV1()
	if err != nil {
		return Nil, err
	}

	switch domain {
	case DomainPerson:
		binary.BigEndian.PutUint32(u[:], posixUID)
	case DomainGroup:
		binary.BigEndian.PutUint32(u[:], posixGID)
	}

	u[9] = domain

	u.SetVersion(V2)
	u.SetVariant(VariantRFC4122)

	return u, nil
}

// NewV3 returns UUID based on MD5 hash of namespace UUID and name.
func (g *rfc4122Generator) NewV3(ns UUID, name string) UUID {
	u := newFromHash(md5.New(), ns, name)
	u.SetVersion(V3)
	u.SetVariant(VariantRFC4122)

	return u
}

// NewV4 returns random generated UUID.
func (g *rfc4122Generator) NewV4() (UUID, error) {
	u := UUID{}
	if _, err := io.ReadFull(g.rand, u[:]); err != nil {
		return Nil, err
	}
	u.SetVersion(V4)
	u.SetVariant(VariantRFC4122)

	return u, nil
}

// NewV5 returns UUID based on SHA-1 hash of namespace UUID and name.
func (g *rfc4122Generator) NewV5(ns UUID, name string) UUID {
	u := newFromHash(sha1.New(), ns, name)
	u.SetVersion(V5)
	u.SetVariant(VariantRFC4122)

	return u
}

// Returns epoch and clock sequence.
func (g *rfc4122Generator) getClockSequence() (uint64, uint16, error) {
	var err error
	g.clockSequenceOnce.Do(func() {
		buf := make([]byte, 2)
		if _, err = io.ReadFull(g.rand, buf); err != nil {
			return
		}
		g.clockSequence = binary.BigEndian.Uint16(buf)
	})
	if err != nil {
		return 0, 0, err
	}

	g.storageMutex.Lock()
	defer g.storageMutex.Unlock()

	timeNow := g.getEpoch()
	// Clock didn't change since last UUID generation.
	// Should increase clock sequence.
	if timeNow <= g.lastTime {
		g.clockSequence++
	}
	g.lastTime = timeNow

	return timeNow, g.clockSequence, nil
}

// Returns hardware address.
func (g *rfc4122Generator) getHardwareAddr() ([]byte, error) {
	var err error
	g.hardwareAddrOnce.Do(func() {
		if hwAddr, err := g.hwAddrFunc(); err == nil {
			copy(g.hardwareAddr[:], hwAddr)
			return
		}

		// Initialize hardwareAddr randomly in case
		// of real network interfaces absence.
		if _, err = io.ReadFull(g.rand, g.hardwareAddr[:]); err != nil {
			return
		}
		// Set multicast bit as recommended by RFC 4122
		g.hardwareAddr[0] |= 0x01
	})
	if err != nil {
		return []byte{}, err
	}
	return g.hardwareAddr[:], nil
}

// Returns difference in 100-nanosecond intervals between
// UUID epoch (October 15, 1582) and current time.
func (g *rfc4122Generator) getEpoch() uint64 {
	return epochStart + uint64(g.epochFunc().UnixNano()/100)
}

// Returns UUID based on hashing of namespace UUID and name.
func newFromHash(h hash.Hash, ns UUID, name string) UUID {
	u := UUID{}
	h.Write(ns[:])
	h.Write([]byte(name))
	copy(u[:], h.Sum(nil))

	return u
}

// Returns hardware address.
func defaultHWAddrFunc() (net.HardwareAddr, error) {
	ifaces, err := net.Interfaces()
	if err != nil {
		return []byte{}, err
	}
	for _, iface := range ifaces {
		if len(iface.HardwareAddr) >= 6 {
			return iface.HardwareAddr, nil
		}
	}
	return []byte{}, fmt.Errorf("uuid: no HW address found")
}
 07070100000AAC000081A4000000000000000000000001645E367C0000094E000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/satori/go.uuid/sql.go   // Copyright (C) 2013-2018 by Maxim Bublis <b@codemonkey.ru>
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

package uuid

import (
	"database/sql/driver"
	"fmt"
)

// Value implements the driver.Valuer interface.
func (u UUID) Value() (driver.Value, error) {
	return u.String(), nil
}

// Scan implements the sql.Scanner interface.
// A 16-byte slice is handled by UnmarshalBinary, while
// a longer byte slice or a string is handled by UnmarshalText.
func (u *UUID) Scan(src interface{}) error {
	switch src := src.(type) {
	case []byte:
		if len(src) == Size {
			return u.UnmarshalBinary(src)
		}
		return u.UnmarshalText(src)

	case string:
		return u.UnmarshalText([]byte(src))
	}

	return fmt.Errorf("uuid: cannot convert %T to UUID", src)
}

// NullUUID can be used with the standard sql package to represent a
// UUID value that can be NULL in the database
type NullUUID struct {
	UUID  UUID
	Valid bool
}

// Value implements the driver.Valuer interface.
func (u NullUUID) Value() (driver.Value, error) {
	if !u.Valid {
		return nil, nil
	}
	// Delegate to UUID Value function
	return u.UUID.Value()
}

// Scan implements the sql.Scanner interface.
func (u *NullUUID) Scan(src interface{}) error {
	if src == nil {
		u.UUID, u.Valid = Nil, false
		return nil
	}

	// Delegate to UUID Scan function
	u.Valid = true
	return u.UUID.Scan(src)
}
  07070100000AAD000081A4000000000000000000000001645E367C00001058000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/satori/go.uuid/uuid.go  // Copyright (C) 2013-2018 by Maxim Bublis <b@codemonkey.ru>
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

// Package uuid provides implementation of Universally Unique Identifier (UUID).
// Supported versions are 1, 3, 4 and 5 (as specified in RFC 4122) and
// version 2 (as specified in DCE 1.1).
package uuid

import (
	"bytes"
	"encoding/hex"
)

// Size of a UUID in bytes.
const Size = 16

// UUID representation compliant with specification
// described in RFC 4122.
type UUID [Size]byte

// UUID versions
const (
	_ byte = iota
	V1
	V2
	V3
	V4
	V5
)

// UUID layout variants.
const (
	VariantNCS byte = iota
	VariantRFC4122
	VariantMicrosoft
	VariantFuture
)

// UUID DCE domains.
const (
	DomainPerson = iota
	DomainGroup
	DomainOrg
)

// String parse helpers.
var (
	urnPrefix  = []byte("urn:uuid:")
	byteGroups = []int{8, 4, 4, 4, 12}
)

// Nil is special form of UUID that is specified to have all
// 128 bits set to zero.
var Nil = UUID{}

// Predefined namespace UUIDs.
var (
	NamespaceDNS  = Must(FromString("6ba7b810-9dad-11d1-80b4-00c04fd430c8"))
	NamespaceURL  = Must(FromString("6ba7b811-9dad-11d1-80b4-00c04fd430c8"))
	NamespaceOID  = Must(FromString("6ba7b812-9dad-11d1-80b4-00c04fd430c8"))
	NamespaceX500 = Must(FromString("6ba7b814-9dad-11d1-80b4-00c04fd430c8"))
)

// Equal returns true if u1 and u2 equals, otherwise returns false.
func Equal(u1 UUID, u2 UUID) bool {
	return bytes.Equal(u1[:], u2[:])
}

// Version returns algorithm version used to generate UUID.
func (u UUID) Version() byte {
	return u[6] >> 4
}

// Variant returns UUID layout variant.
func (u UUID) Variant() byte {
	switch {
	case (u[8] >> 7) == 0x00:
		return VariantNCS
	case (u[8] >> 6) == 0x02:
		return VariantRFC4122
	case (u[8] >> 5) == 0x06:
		return VariantMicrosoft
	case (u[8] >> 5) == 0x07:
		fallthrough
	default:
		return VariantFuture
	}
}

// Bytes returns bytes slice representation of UUID.
func (u UUID) Bytes() []byte {
	return u[:]
}

// Returns canonical string representation of UUID:
// xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
func (u UUID) String() string {
	buf := make([]byte, 36)

	hex.Encode(buf[0:8], u[0:4])
	buf[8] = '-'
	hex.Encode(buf[9:13], u[4:6])
	buf[13] = '-'
	hex.Encode(buf[14:18], u[6:8])
	buf[18] = '-'
	hex.Encode(buf[19:23], u[8:10])
	buf[23] = '-'
	hex.Encode(buf[24:], u[10:])

	return string(buf)
}

// SetVersion sets version bits.
func (u *UUID) SetVersion(v byte) {
	u[6] = (u[6] & 0x0f) | (v << 4)
}

// SetVariant sets variant bits.
func (u *UUID) SetVariant(v byte) {
	switch v {
	case VariantNCS:
		u[8] = (u[8]&(0xff>>1) | (0x00 << 7))
	case VariantRFC4122:
		u[8] = (u[8]&(0xff>>2) | (0x02 << 6))
	case VariantMicrosoft:
		u[8] = (u[8]&(0xff>>3) | (0x06 << 5))
	case VariantFuture:
		fallthrough
	default:
		u[8] = (u[8]&(0xff>>3) | (0x07 << 5))
	}
}

// Must is a helper that wraps a call to a function returning (UUID, error)
// and panics if the error is non-nil. It is intended for use in variable
// initializations such as
//	var packageUUID = uuid.Must(uuid.FromString("123e4567-e89b-12d3-a456-426655440000"));
func Must(u UUID, err error) UUID {
	if err != nil {
		panic(err)
	}
	return u
}
07070100000AAE000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002C00000000elemental-cli-0.3.1/vendor/github.com/sergi   07070100000AAF000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/github.com/sergi/go-diff   07070100000AB0000081A4000000000000000000000001645E367C000003AC000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/sergi/go-diff/AUTHORS   # This is the official list of go-diff authors for copyright purposes.
# This file is distinct from the CONTRIBUTORS files.
# See the latter for an explanation.

# Names should be added to this file as
#	Name or Organization <email address>
# The email address is not required for organizations.

# Please keep the list sorted.

Danny Yoo <dannyyoo@google.com>
James Kolb <jkolb@google.com>
Jonathan Amsterdam <jba@google.com>
Markus Zimmermann <markus.zimmermann@nethead.at> <markus.zimmermann@symflower.com> <zimmski@gmail.com>
Matt Kovars <akaskik@gmail.com>
Örjan Persson <orjan@spotify.com>
Osman Masood <oamasood@gmail.com>
Robert Carlsen <rwcarlsen@gmail.com>
Rory Flynn <roryflynn@users.noreply.github.com>
Sergi Mansilla <sergi.mansilla@gmail.com>
Shatrugna Sadhu <ssadhu@apcera.com>
Shawn Smith <shawnpsmith@gmail.com>
Stas Maksimov <maksimov@gmail.com>
Tor Arvid Lund <torarvid@gmail.com>
Zac Bergquist <zbergquist99@gmail.com>
07070100000AB1000081A4000000000000000000000001645E367C000004A1000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/sergi/go-diff/CONTRIBUTORS  # This is the official list of people who can contribute
# (and typically have contributed) code to the go-diff
# repository.
#
# The AUTHORS file lists the copyright holders; this file
# lists people.  For example, ACME Inc. employees would be listed here
# but not in AUTHORS, because ACME Inc. would hold the copyright.
#
# When adding J Random Contributor's name to this file,
# either J's name or J's organization's name should be
# added to the AUTHORS file.
#
# Names should be added to this file like so:
#     Name <email address>
#
# Please keep the list sorted.

Danny Yoo <dannyyoo@google.com>
James Kolb <jkolb@google.com>
Jonathan Amsterdam <jba@google.com>
Markus Zimmermann <markus.zimmermann@nethead.at> <markus.zimmermann@symflower.com> <zimmski@gmail.com>
Matt Kovars <akaskik@gmail.com>
Örjan Persson <orjan@spotify.com>
Osman Masood <oamasood@gmail.com>
Robert Carlsen <rwcarlsen@gmail.com>
Rory Flynn <roryflynn@users.noreply.github.com>
Sergi Mansilla <sergi.mansilla@gmail.com>
Shatrugna Sadhu <ssadhu@apcera.com>
Shawn Smith <shawnpsmith@gmail.com>
Stas Maksimov <maksimov@gmail.com>
Tor Arvid Lund <torarvid@gmail.com>
Zac Bergquist <zbergquist99@gmail.com>
   07070100000AB2000081A4000000000000000000000001645E367C00000443000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/sergi/go-diff/LICENSE   Copyright (c) 2012-2016 The go-diff Authors. All rights reserved.

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

 07070100000AB3000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/sergi/go-diff/diffmatchpatch    07070100000AB4000081A4000000000000000000000001645E367C0000A60E000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/sergi/go-diff/diffmatchpatch/diff.go    // Copyright (c) 2012-2016 The go-diff authors. All rights reserved.
// https://github.com/sergi/go-diff
// See the included LICENSE file for license details.
//
// go-diff is a Go implementation of Google's Diff, Match, and Patch library
// Original library is Copyright (c) 2006 Google Inc.
// http://code.google.com/p/google-diff-match-patch/

package diffmatchpatch

import (
	"bytes"
	"errors"
	"fmt"
	"html"
	"math"
	"net/url"
	"regexp"
	"strconv"
	"strings"
	"time"
	"unicode/utf8"
)

// Operation defines the operation of a diff item.
type Operation int8

//go:generate stringer -type=Operation -trimprefix=Diff

const (
	// DiffDelete item represents a delete diff.
	DiffDelete Operation = -1
	// DiffInsert item represents an insert diff.
	DiffInsert Operation = 1
	// DiffEqual item represents an equal diff.
	DiffEqual Operation = 0
	//IndexSeparator is used to seperate the array indexes in an index string
	IndexSeparator = ","
)

// Diff represents one diff operation
type Diff struct {
	Type Operation
	Text string
}

// splice removes amount elements from slice at index index, replacing them with elements.
func splice(slice []Diff, index int, amount int, elements ...Diff) []Diff {
	if len(elements) == amount {
		// Easy case: overwrite the relevant items.
		copy(slice[index:], elements)
		return slice
	}
	if len(elements) < amount {
		// Fewer new items than old.
		// Copy in the new items.
		copy(slice[index:], elements)
		// Shift the remaining items left.
		copy(slice[index+len(elements):], slice[index+amount:])
		// Calculate the new end of the slice.
		end := len(slice) - amount + len(elements)
		// Zero stranded elements at end so that they can be garbage collected.
		tail := slice[end:]
		for i := range tail {
			tail[i] = Diff{}
		}
		return slice[:end]
	}
	// More new items than old.
	// Make room in slice for new elements.
	// There's probably an even more efficient way to do this,
	// but this is simple and clear.
	need := len(slice) - amount + len(elements)
	for len(slice) < need {
		slice = append(slice, Diff{})
	}
	// Shift slice elements right to make room for new elements.
	copy(slice[index+len(elements):], slice[index+amount:])
	// Copy in new elements.
	copy(slice[index:], elements)
	return slice
}

// DiffMain finds the differences between two texts.
// If an invalid UTF-8 sequence is encountered, it will be replaced by the Unicode replacement character.
func (dmp *DiffMatchPatch) DiffMain(text1, text2 string, checklines bool) []Diff {
	return dmp.DiffMainRunes([]rune(text1), []rune(text2), checklines)
}

// DiffMainRunes finds the differences between two rune sequences.
// If an invalid UTF-8 sequence is encountered, it will be replaced by the Unicode replacement character.
func (dmp *DiffMatchPatch) DiffMainRunes(text1, text2 []rune, checklines bool) []Diff {
	var deadline time.Time
	if dmp.DiffTimeout > 0 {
		deadline = time.Now().Add(dmp.DiffTimeout)
	}
	return dmp.diffMainRunes(text1, text2, checklines, deadline)
}

func (dmp *DiffMatchPatch) diffMainRunes(text1, text2 []rune, checklines bool, deadline time.Time) []Diff {
	if runesEqual(text1, text2) {
		var diffs []Diff
		if len(text1) > 0 {
			diffs = append(diffs, Diff{DiffEqual, string(text1)})
		}
		return diffs
	}
	// Trim off common prefix (speedup).
	commonlength := commonPrefixLength(text1, text2)
	commonprefix := text1[:commonlength]
	text1 = text1[commonlength:]
	text2 = text2[commonlength:]

	// Trim off common suffix (speedup).
	commonlength = commonSuffixLength(text1, text2)
	commonsuffix := text1[len(text1)-commonlength:]
	text1 = text1[:len(text1)-commonlength]
	text2 = text2[:len(text2)-commonlength]

	// Compute the diff on the middle block.
	diffs := dmp.diffCompute(text1, text2, checklines, deadline)

	// Restore the prefix and suffix.
	if len(commonprefix) != 0 {
		diffs = append([]Diff{{DiffEqual, string(commonprefix)}}, diffs...)
	}
	if len(commonsuffix) != 0 {
		diffs = append(diffs, Diff{DiffEqual, string(commonsuffix)})
	}

	return dmp.DiffCleanupMerge(diffs)
}

// diffCompute finds the differences between two rune slices.  Assumes that the texts do not have any common prefix or suffix.
func (dmp *DiffMatchPatch) diffCompute(text1, text2 []rune, checklines bool, deadline time.Time) []Diff {
	diffs := []Diff{}
	if len(text1) == 0 {
		// Just add some text (speedup).
		return append(diffs, Diff{DiffInsert, string(text2)})
	} else if len(text2) == 0 {
		// Just delete some text (speedup).
		return append(diffs, Diff{DiffDelete, string(text1)})
	}

	var longtext, shorttext []rune
	if len(text1) > len(text2) {
		longtext = text1
		shorttext = text2
	} else {
		longtext = text2
		shorttext = text1
	}

	if i := runesIndex(longtext, shorttext); i != -1 {
		op := DiffInsert
		// Swap insertions for deletions if diff is reversed.
		if len(text1) > len(text2) {
			op = DiffDelete
		}
		// Shorter text is inside the longer text (speedup).
		return []Diff{
			Diff{op, string(longtext[:i])},
			Diff{DiffEqual, string(shorttext)},
			Diff{op, string(longtext[i+len(shorttext):])},
		}
	} else if len(shorttext) == 1 {
		// Single character string.
		// After the previous speedup, the character can't be an equality.
		return []Diff{
			{DiffDelete, string(text1)},
			{DiffInsert, string(text2)},
		}
		// Check to see if the problem can be split in two.
	} else if hm := dmp.diffHalfMatch(text1, text2); hm != nil {
		// A half-match was found, sort out the return data.
		text1A := hm[0]
		text1B := hm[1]
		text2A := hm[2]
		text2B := hm[3]
		midCommon := hm[4]
		// Send both pairs off for separate processing.
		diffsA := dmp.diffMainRunes(text1A, text2A, checklines, deadline)
		diffsB := dmp.diffMainRunes(text1B, text2B, checklines, deadline)
		// Merge the results.
		diffs := diffsA
		diffs = append(diffs, Diff{DiffEqual, string(midCommon)})
		diffs = append(diffs, diffsB...)
		return diffs
	} else if checklines && len(text1) > 100 && len(text2) > 100 {
		return dmp.diffLineMode(text1, text2, deadline)
	}
	return dmp.diffBisect(text1, text2, deadline)
}

// diffLineMode does a quick line-level diff on both []runes, then rediff the parts for greater accuracy. This speedup can produce non-minimal diffs.
func (dmp *DiffMatchPatch) diffLineMode(text1, text2 []rune, deadline time.Time) []Diff {
	// Scan the text on a line-by-line basis first.
	text1, text2, linearray := dmp.DiffLinesToRunes(string(text1), string(text2))

	diffs := dmp.diffMainRunes(text1, text2, false, deadline)

	// Convert the diff back to original text.
	diffs = dmp.DiffCharsToLines(diffs, linearray)
	// Eliminate freak matches (e.g. blank lines)
	diffs = dmp.DiffCleanupSemantic(diffs)

	// Rediff any replacement blocks, this time character-by-character.
	// Add a dummy entry at the end.
	diffs = append(diffs, Diff{DiffEqual, ""})

	pointer := 0
	countDelete := 0
	countInsert := 0

	// NOTE: Rune slices are slower than using strings in this case.
	textDelete := ""
	textInsert := ""

	for pointer < len(diffs) {
		switch diffs[pointer].Type {
		case DiffInsert:
			countInsert++
			textInsert += diffs[pointer].Text
		case DiffDelete:
			countDelete++
			textDelete += diffs[pointer].Text
		case DiffEqual:
			// Upon reaching an equality, check for prior redundancies.
			if countDelete >= 1 && countInsert >= 1 {
				// Delete the offending records and add the merged ones.
				diffs = splice(diffs, pointer-countDelete-countInsert,
					countDelete+countInsert)

				pointer = pointer - countDelete - countInsert
				a := dmp.diffMainRunes([]rune(textDelete), []rune(textInsert), false, deadline)
				for j := len(a) - 1; j >= 0; j-- {
					diffs = splice(diffs, pointer, 0, a[j])
				}
				pointer = pointer + len(a)
			}

			countInsert = 0
			countDelete = 0
			textDelete = ""
			textInsert = ""
		}
		pointer++
	}

	return diffs[:len(diffs)-1] // Remove the dummy entry at the end.
}

// DiffBisect finds the 'middle snake' of a diff, split the problem in two and return the recursively constructed diff.
// If an invalid UTF-8 sequence is encountered, it will be replaced by the Unicode replacement character.
// See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.
func (dmp *DiffMatchPatch) DiffBisect(text1, text2 string, deadline time.Time) []Diff {
	// Unused in this code, but retained for interface compatibility.
	return dmp.diffBisect([]rune(text1), []rune(text2), deadline)
}

// diffBisect finds the 'middle snake' of a diff, splits the problem in two and returns the recursively constructed diff.
// See Myers's 1986 paper: An O(ND) Difference Algorithm and Its Variations.
func (dmp *DiffMatchPatch) diffBisect(runes1, runes2 []rune, deadline time.Time) []Diff {
	// Cache the text lengths to prevent multiple calls.
	runes1Len, runes2Len := len(runes1), len(runes2)

	maxD := (runes1Len + runes2Len + 1) / 2
	vOffset := maxD
	vLength := 2 * maxD

	v1 := make([]int, vLength)
	v2 := make([]int, vLength)
	for i := range v1 {
		v1[i] = -1
		v2[i] = -1
	}
	v1[vOffset+1] = 0
	v2[vOffset+1] = 0

	delta := runes1Len - runes2Len
	// If the total number of characters is odd, then the front path will collide with the reverse path.
	front := (delta%2 != 0)
	// Offsets for start and end of k loop. Prevents mapping of space beyond the grid.
	k1start := 0
	k1end := 0
	k2start := 0
	k2end := 0
	for d := 0; d < maxD; d++ {
		// Bail out if deadline is reached.
		if !deadline.IsZero() && d%16 == 0 && time.Now().After(deadline) {
			break
		}

		// Walk the front path one step.
		for k1 := -d + k1start; k1 <= d-k1end; k1 += 2 {
			k1Offset := vOffset + k1
			var x1 int

			if k1 == -d || (k1 != d && v1[k1Offset-1] < v1[k1Offset+1]) {
				x1 = v1[k1Offset+1]
			} else {
				x1 = v1[k1Offset-1] + 1
			}

			y1 := x1 - k1
			for x1 < runes1Len && y1 < runes2Len {
				if runes1[x1] != runes2[y1] {
					break
				}
				x1++
				y1++
			}
			v1[k1Offset] = x1
			if x1 > runes1Len {
				// Ran off the right of the graph.
				k1end += 2
			} else if y1 > runes2Len {
				// Ran off the bottom of the graph.
				k1start += 2
			} else if front {
				k2Offset := vOffset + delta - k1
				if k2Offset >= 0 && k2Offset < vLength && v2[k2Offset] != -1 {
					// Mirror x2 onto top-left coordinate system.
					x2 := runes1Len - v2[k2Offset]
					if x1 >= x2 {
						// Overlap detected.
						return dmp.diffBisectSplit(runes1, runes2, x1, y1, deadline)
					}
				}
			}
		}
		// Walk the reverse path one step.
		for k2 := -d + k2start; k2 <= d-k2end; k2 += 2 {
			k2Offset := vOffset + k2
			var x2 int
			if k2 == -d || (k2 != d && v2[k2Offset-1] < v2[k2Offset+1]) {
				x2 = v2[k2Offset+1]
			} else {
				x2 = v2[k2Offset-1] + 1
			}
			var y2 = x2 - k2
			for x2 < runes1Len && y2 < runes2Len {
				if runes1[runes1Len-x2-1] != runes2[runes2Len-y2-1] {
					break
				}
				x2++
				y2++
			}
			v2[k2Offset] = x2
			if x2 > runes1Len {
				// Ran off the left of the graph.
				k2end += 2
			} else if y2 > runes2Len {
				// Ran off the top of the graph.
				k2start += 2
			} else if !front {
				k1Offset := vOffset + delta - k2
				if k1Offset >= 0 && k1Offset < vLength && v1[k1Offset] != -1 {
					x1 := v1[k1Offset]
					y1 := vOffset + x1 - k1Offset
					// Mirror x2 onto top-left coordinate system.
					x2 = runes1Len - x2
					if x1 >= x2 {
						// Overlap detected.
						return dmp.diffBisectSplit(runes1, runes2, x1, y1, deadline)
					}
				}
			}
		}
	}
	// Diff took too long and hit the deadline or number of diffs equals number of characters, no commonality at all.
	return []Diff{
		{DiffDelete, string(runes1)},
		{DiffInsert, string(runes2)},
	}
}

func (dmp *DiffMatchPatch) diffBisectSplit(runes1, runes2 []rune, x, y int,
	deadline time.Time) []Diff {
	runes1a := runes1[:x]
	runes2a := runes2[:y]
	runes1b := runes1[x:]
	runes2b := runes2[y:]

	// Compute both diffs serially.
	diffs := dmp.diffMainRunes(runes1a, runes2a, false, deadline)
	diffsb := dmp.diffMainRunes(runes1b, runes2b, false, deadline)

	return append(diffs, diffsb...)
}

// DiffLinesToChars splits two texts into a list of strings, and educes the texts to a string of hashes where each Unicode character represents one line.
// It's slightly faster to call DiffLinesToRunes first, followed by DiffMainRunes.
func (dmp *DiffMatchPatch) DiffLinesToChars(text1, text2 string) (string, string, []string) {
	chars1, chars2, lineArray := dmp.diffLinesToStrings(text1, text2)
	return chars1, chars2, lineArray
}

// DiffLinesToRunes splits two texts into a list of runes.
func (dmp *DiffMatchPatch) DiffLinesToRunes(text1, text2 string) ([]rune, []rune, []string) {
	chars1, chars2, lineArray := dmp.diffLinesToStrings(text1, text2)
	return []rune(chars1), []rune(chars2), lineArray
}

// DiffCharsToLines rehydrates the text in a diff from a string of line hashes to real lines of text.
func (dmp *DiffMatchPatch) DiffCharsToLines(diffs []Diff, lineArray []string) []Diff {
	hydrated := make([]Diff, 0, len(diffs))
	for _, aDiff := range diffs {
		chars := strings.Split(aDiff.Text, IndexSeparator)
		text := make([]string, len(chars))

		for i, r := range chars {
			i1, err := strconv.Atoi(r)
			if err == nil {
				text[i] = lineArray[i1]
			}
		}

		aDiff.Text = strings.Join(text, "")
		hydrated = append(hydrated, aDiff)
	}
	return hydrated
}

// DiffCommonPrefix determines the common prefix length of two strings.
func (dmp *DiffMatchPatch) DiffCommonPrefix(text1, text2 string) int {
	// Unused in this code, but retained for interface compatibility.
	return commonPrefixLength([]rune(text1), []rune(text2))
}

// DiffCommonSuffix determines the common suffix length of two strings.
func (dmp *DiffMatchPatch) DiffCommonSuffix(text1, text2 string) int {
	// Unused in this code, but retained for interface compatibility.
	return commonSuffixLength([]rune(text1), []rune(text2))
}

// commonPrefixLength returns the length of the common prefix of two rune slices.
func commonPrefixLength(text1, text2 []rune) int {
	// Linear search. See comment in commonSuffixLength.
	n := 0
	for ; n < len(text1) && n < len(text2); n++ {
		if text1[n] != text2[n] {
			return n
		}
	}
	return n
}

// commonSuffixLength returns the length of the common suffix of two rune slices.
func commonSuffixLength(text1, text2 []rune) int {
	// Use linear search rather than the binary search discussed at https://neil.fraser.name/news/2007/10/09/.
	// See discussion at https://github.com/sergi/go-diff/issues/54.
	i1 := len(text1)
	i2 := len(text2)
	for n := 0; ; n++ {
		i1--
		i2--
		if i1 < 0 || i2 < 0 || text1[i1] != text2[i2] {
			return n
		}
	}
}

// DiffCommonOverlap determines if the suffix of one string is the prefix of another.
func (dmp *DiffMatchPatch) DiffCommonOverlap(text1 string, text2 string) int {
	// Cache the text lengths to prevent multiple calls.
	text1Length := len(text1)
	text2Length := len(text2)
	// Eliminate the null case.
	if text1Length == 0 || text2Length == 0 {
		return 0
	}
	// Truncate the longer string.
	if text1Length > text2Length {
		text1 = text1[text1Length-text2Length:]
	} else if text1Length < text2Length {
		text2 = text2[0:text1Length]
	}
	textLength := int(math.Min(float64(text1Length), float64(text2Length)))
	// Quick check for the worst case.
	if text1 == text2 {
		return textLength
	}

	// Start by looking for a single character match and increase length until no match is found. Performance analysis: http://neil.fraser.name/news/2010/11/04/
	best := 0
	length := 1
	for {
		pattern := text1[textLength-length:]
		found := strings.Index(text2, pattern)
		if found == -1 {
			break
		}
		length += found
		if found == 0 || text1[textLength-length:] == text2[0:length] {
			best = length
			length++
		}
	}

	return best
}

// DiffHalfMatch checks whether the two texts share a substring which is at least half the length of the longer text. This speedup can produce non-minimal diffs.
func (dmp *DiffMatchPatch) DiffHalfMatch(text1, text2 string) []string {
	// Unused in this code, but retained for interface compatibility.
	runeSlices := dmp.diffHalfMatch([]rune(text1), []rune(text2))
	if runeSlices == nil {
		return nil
	}

	result := make([]string, len(runeSlices))
	for i, r := range runeSlices {
		result[i] = string(r)
	}
	return result
}

func (dmp *DiffMatchPatch) diffHalfMatch(text1, text2 []rune) [][]rune {
	if dmp.DiffTimeout <= 0 {
		// Don't risk returning a non-optimal diff if we have unlimited time.
		return nil
	}

	var longtext, shorttext []rune
	if len(text1) > len(text2) {
		longtext = text1
		shorttext = text2
	} else {
		longtext = text2
		shorttext = text1
	}

	if len(longtext) < 4 || len(shorttext)*2 < len(longtext) {
		return nil // Pointless.
	}

	// First check if the second quarter is the seed for a half-match.
	hm1 := dmp.diffHalfMatchI(longtext, shorttext, int(float64(len(longtext)+3)/4))

	// Check again based on the third quarter.
	hm2 := dmp.diffHalfMatchI(longtext, shorttext, int(float64(len(longtext)+1)/2))

	hm := [][]rune{}
	if hm1 == nil && hm2 == nil {
		return nil
	} else if hm2 == nil {
		hm = hm1
	} else if hm1 == nil {
		hm = hm2
	} else {
		// Both matched.  Select the longest.
		if len(hm1[4]) > len(hm2[4]) {
			hm = hm1
		} else {
			hm = hm2
		}
	}

	// A half-match was found, sort out the return data.
	if len(text1) > len(text2) {
		return hm
	}

	return [][]rune{hm[2], hm[3], hm[0], hm[1], hm[4]}
}

// diffHalfMatchI checks if a substring of shorttext exist within longtext such that the substring is at least half the length of longtext?
// Returns a slice containing the prefix of longtext, the suffix of longtext, the prefix of shorttext, the suffix of shorttext and the common middle, or null if there was no match.
func (dmp *DiffMatchPatch) diffHalfMatchI(l, s []rune, i int) [][]rune {
	var bestCommonA []rune
	var bestCommonB []rune
	var bestCommonLen int
	var bestLongtextA []rune
	var bestLongtextB []rune
	var bestShorttextA []rune
	var bestShorttextB []rune

	// Start with a 1/4 length substring at position i as a seed.
	seed := l[i : i+len(l)/4]

	for j := runesIndexOf(s, seed, 0); j != -1; j = runesIndexOf(s, seed, j+1) {
		prefixLength := commonPrefixLength(l[i:], s[j:])
		suffixLength := commonSuffixLength(l[:i], s[:j])

		if bestCommonLen < suffixLength+prefixLength {
			bestCommonA = s[j-suffixLength : j]
			bestCommonB = s[j : j+prefixLength]
			bestCommonLen = len(bestCommonA) + len(bestCommonB)
			bestLongtextA = l[:i-suffixLength]
			bestLongtextB = l[i+prefixLength:]
			bestShorttextA = s[:j-suffixLength]
			bestShorttextB = s[j+prefixLength:]
		}
	}

	if bestCommonLen*2 < len(l) {
		return nil
	}

	return [][]rune{
		bestLongtextA,
		bestLongtextB,
		bestShorttextA,
		bestShorttextB,
		append(bestCommonA, bestCommonB...),
	}
}

// DiffCleanupSemantic reduces the number of edits by eliminating semantically trivial equalities.
func (dmp *DiffMatchPatch) DiffCleanupSemantic(diffs []Diff) []Diff {
	changes := false
	// Stack of indices where equalities are found.
	equalities := make([]int, 0, len(diffs))

	var lastequality string
	// Always equal to diffs[equalities[equalitiesLength - 1]][1]
	var pointer int // Index of current position.
	// Number of characters that changed prior to the equality.
	var lengthInsertions1, lengthDeletions1 int
	// Number of characters that changed after the equality.
	var lengthInsertions2, lengthDeletions2 int

	for pointer < len(diffs) {
		if diffs[pointer].Type == DiffEqual {
			// Equality found.
			equalities = append(equalities, pointer)
			lengthInsertions1 = lengthInsertions2
			lengthDeletions1 = lengthDeletions2
			lengthInsertions2 = 0
			lengthDeletions2 = 0
			lastequality = diffs[pointer].Text
		} else {
			// An insertion or deletion.

			if diffs[pointer].Type == DiffInsert {
				lengthInsertions2 += utf8.RuneCountInString(diffs[pointer].Text)
			} else {
				lengthDeletions2 += utf8.RuneCountInString(diffs[pointer].Text)
			}
			// Eliminate an equality that is smaller or equal to the edits on both sides of it.
			difference1 := int(math.Max(float64(lengthInsertions1), float64(lengthDeletions1)))
			difference2 := int(math.Max(float64(lengthInsertions2), float64(lengthDeletions2)))
			if utf8.RuneCountInString(lastequality) > 0 &&
				(utf8.RuneCountInString(lastequality) <= difference1) &&
				(utf8.RuneCountInString(lastequality) <= difference2) {
				// Duplicate record.
				insPoint := equalities[len(equalities)-1]
				diffs = splice(diffs, insPoint, 0, Diff{DiffDelete, lastequality})

				// Change second copy to insert.
				diffs[insPoint+1].Type = DiffInsert
				// Throw away the equality we just deleted.
				equalities = equalities[:len(equalities)-1]

				if len(equalities) > 0 {
					equalities = equalities[:len(equalities)-1]
				}
				pointer = -1
				if len(equalities) > 0 {
					pointer = equalities[len(equalities)-1]
				}

				lengthInsertions1 = 0 // Reset the counters.
				lengthDeletions1 = 0
				lengthInsertions2 = 0
				lengthDeletions2 = 0
				lastequality = ""
				changes = true
			}
		}
		pointer++
	}

	// Normalize the diff.
	if changes {
		diffs = dmp.DiffCleanupMerge(diffs)
	}
	diffs = dmp.DiffCleanupSemanticLossless(diffs)
	// Find any overlaps between deletions and insertions.
	// e.g: <del>abcxxx</del><ins>xxxdef</ins>
	//   -> <del>abc</del>xxx<ins>def</ins>
	// e.g: <del>xxxabc</del><ins>defxxx</ins>
	//   -> <ins>def</ins>xxx<del>abc</del>
	// Only extract an overlap if it is as big as the edit ahead or behind it.
	pointer = 1
	for pointer < len(diffs) {
		if diffs[pointer-1].Type == DiffDelete &&
			diffs[pointer].Type == DiffInsert {
			deletion := diffs[pointer-1].Text
			insertion := diffs[pointer].Text
			overlapLength1 := dmp.DiffCommonOverlap(deletion, insertion)
			overlapLength2 := dmp.DiffCommonOverlap(insertion, deletion)
			if overlapLength1 >= overlapLength2 {
				if float64(overlapLength1) >= float64(utf8.RuneCountInString(deletion))/2 ||
					float64(overlapLength1) >= float64(utf8.RuneCountInString(insertion))/2 {

					// Overlap found. Insert an equality and trim the surrounding edits.
					diffs = splice(diffs, pointer, 0, Diff{DiffEqual, insertion[:overlapLength1]})
					diffs[pointer-1].Text =
						deletion[0 : len(deletion)-overlapLength1]
					diffs[pointer+1].Text = insertion[overlapLength1:]
					pointer++
				}
			} else {
				if float64(overlapLength2) >= float64(utf8.RuneCountInString(deletion))/2 ||
					float64(overlapLength2) >= float64(utf8.RuneCountInString(insertion))/2 {
					// Reverse overlap found. Insert an equality and swap and trim the surrounding edits.
					overlap := Diff{DiffEqual, deletion[:overlapLength2]}
					diffs = splice(diffs, pointer, 0, overlap)
					diffs[pointer-1].Type = DiffInsert
					diffs[pointer-1].Text = insertion[0 : len(insertion)-overlapLength2]
					diffs[pointer+1].Type = DiffDelete
					diffs[pointer+1].Text = deletion[overlapLength2:]
					pointer++
				}
			}
			pointer++
		}
		pointer++
	}

	return diffs
}

// Define some regex patterns for matching boundaries.
var (
	nonAlphaNumericRegex = regexp.MustCompile(`[^a-zA-Z0-9]`)
	whitespaceRegex      = regexp.MustCompile(`\s`)
	linebreakRegex       = regexp.MustCompile(`[\r\n]`)
	blanklineEndRegex    = regexp.MustCompile(`\n\r?\n$`)
	blanklineStartRegex  = regexp.MustCompile(`^\r?\n\r?\n`)
)

// diffCleanupSemanticScore computes a score representing whether the internal boundary falls on logical boundaries.
// Scores range from 6 (best) to 0 (worst). Closure, but does not reference any external variables.
func diffCleanupSemanticScore(one, two string) int {
	if len(one) == 0 || len(two) == 0 {
		// Edges are the best.
		return 6
	}

	// Each port of this function behaves slightly differently due to subtle differences in each language's definition of things like 'whitespace'.  Since this function's purpose is largely cosmetic, the choice has been made to use each language's native features rather than force total conformity.
	rune1, _ := utf8.DecodeLastRuneInString(one)
	rune2, _ := utf8.DecodeRuneInString(two)
	char1 := string(rune1)
	char2 := string(rune2)

	nonAlphaNumeric1 := nonAlphaNumericRegex.MatchString(char1)
	nonAlphaNumeric2 := nonAlphaNumericRegex.MatchString(char2)
	whitespace1 := nonAlphaNumeric1 && whitespaceRegex.MatchString(char1)
	whitespace2 := nonAlphaNumeric2 && whitespaceRegex.MatchString(char2)
	lineBreak1 := whitespace1 && linebreakRegex.MatchString(char1)
	lineBreak2 := whitespace2 && linebreakRegex.MatchString(char2)
	blankLine1 := lineBreak1 && blanklineEndRegex.MatchString(one)
	blankLine2 := lineBreak2 && blanklineEndRegex.MatchString(two)

	if blankLine1 || blankLine2 {
		// Five points for blank lines.
		return 5
	} else if lineBreak1 || lineBreak2 {
		// Four points for line breaks.
		return 4
	} else if nonAlphaNumeric1 && !whitespace1 && whitespace2 {
		// Three points for end of sentences.
		return 3
	} else if whitespace1 || whitespace2 {
		// Two points for whitespace.
		return 2
	} else if nonAlphaNumeric1 || nonAlphaNumeric2 {
		// One point for non-alphanumeric.
		return 1
	}
	return 0
}

// DiffCleanupSemanticLossless looks for single edits surrounded on both sides by equalities which can be shifted sideways to align the edit to a word boundary.
// E.g: The c<ins>at c</ins>ame. -> The <ins>cat </ins>came.
func (dmp *DiffMatchPatch) DiffCleanupSemanticLossless(diffs []Diff) []Diff {
	pointer := 1

	// Intentionally ignore the first and last element (don't need checking).
	for pointer < len(diffs)-1 {
		if diffs[pointer-1].Type == DiffEqual &&
			diffs[pointer+1].Type == DiffEqual {

			// This is a single edit surrounded by equalities.
			equality1 := diffs[pointer-1].Text
			edit := diffs[pointer].Text
			equality2 := diffs[pointer+1].Text

			// First, shift the edit as far left as possible.
			commonOffset := dmp.DiffCommonSuffix(equality1, edit)
			if commonOffset > 0 {
				commonString := edit[len(edit)-commonOffset:]
				equality1 = equality1[0 : len(equality1)-commonOffset]
				edit = commonString + edit[:len(edit)-commonOffset]
				equality2 = commonString + equality2
			}

			// Second, step character by character right, looking for the best fit.
			bestEquality1 := equality1
			bestEdit := edit
			bestEquality2 := equality2
			bestScore := diffCleanupSemanticScore(equality1, edit) +
				diffCleanupSemanticScore(edit, equality2)

			for len(edit) != 0 && len(equality2) != 0 {
				_, sz := utf8.DecodeRuneInString(edit)
				if len(equality2) < sz || edit[:sz] != equality2[:sz] {
					break
				}
				equality1 += edit[:sz]
				edit = edit[sz:] + equality2[:sz]
				equality2 = equality2[sz:]
				score := diffCleanupSemanticScore(equality1, edit) +
					diffCleanupSemanticScore(edit, equality2)
				// The >= encourages trailing rather than leading whitespace on edits.
				if score >= bestScore {
					bestScore = score
					bestEquality1 = equality1
					bestEdit = edit
					bestEquality2 = equality2
				}
			}

			if diffs[pointer-1].Text != bestEquality1 {
				// We have an improvement, save it back to the diff.
				if len(bestEquality1) != 0 {
					diffs[pointer-1].Text = bestEquality1
				} else {
					diffs = splice(diffs, pointer-1, 1)
					pointer--
				}

				diffs[pointer].Text = bestEdit
				if len(bestEquality2) != 0 {
					diffs[pointer+1].Text = bestEquality2
				} else {
					diffs = append(diffs[:pointer+1], diffs[pointer+2:]...)
					pointer--
				}
			}
		}
		pointer++
	}

	return diffs
}

// DiffCleanupEfficiency reduces the number of edits by eliminating operationally trivial equalities.
func (dmp *DiffMatchPatch) DiffCleanupEfficiency(diffs []Diff) []Diff {
	changes := false
	// Stack of indices where equalities are found.
	type equality struct {
		data int
		next *equality
	}
	var equalities *equality
	// Always equal to equalities[equalitiesLength-1][1]
	lastequality := ""
	pointer := 0 // Index of current position.
	// Is there an insertion operation before the last equality.
	preIns := false
	// Is there a deletion operation before the last equality.
	preDel := false
	// Is there an insertion operation after the last equality.
	postIns := false
	// Is there a deletion operation after the last equality.
	postDel := false
	for pointer < len(diffs) {
		if diffs[pointer].Type == DiffEqual { // Equality found.
			if len(diffs[pointer].Text) < dmp.DiffEditCost &&
				(postIns || postDel) {
				// Candidate found.
				equalities = &equality{
					data: pointer,
					next: equalities,
				}
				preIns = postIns
				preDel = postDel
				lastequality = diffs[pointer].Text
			} else {
				// Not a candidate, and can never become one.
				equalities = nil
				lastequality = ""
			}
			postIns = false
			postDel = false
		} else { // An insertion or deletion.
			if diffs[pointer].Type == DiffDelete {
				postDel = true
			} else {
				postIns = true
			}

			// Five types to be split:
			// <ins>A</ins><del>B</del>XY<ins>C</ins><del>D</del>
			// <ins>A</ins>X<ins>C</ins><del>D</del>
			// <ins>A</ins><del>B</del>X<ins>C</ins>
			// <ins>A</del>X<ins>C</ins><del>D</del>
			// <ins>A</ins><del>B</del>X<del>C</del>
			var sumPres int
			if preIns {
				sumPres++
			}
			if preDel {
				sumPres++
			}
			if postIns {
				sumPres++
			}
			if postDel {
				sumPres++
			}
			if len(lastequality) > 0 &&
				((preIns && preDel && postIns && postDel) ||
					((len(lastequality) < dmp.DiffEditCost/2) && sumPres == 3)) {

				insPoint := equalities.data

				// Duplicate record.
				diffs = splice(diffs, insPoint, 0, Diff{DiffDelete, lastequality})

				// Change second copy to insert.
				diffs[insPoint+1].Type = DiffInsert
				// Throw away the equality we just deleted.
				equalities = equalities.next
				lastequality = ""

				if preIns && preDel {
					// No changes made which could affect previous entry, keep going.
					postIns = true
					postDel = true
					equalities = nil
				} else {
					if equalities != nil {
						equalities = equalities.next
					}
					if equalities != nil {
						pointer = equalities.data
					} else {
						pointer = -1
					}
					postIns = false
					postDel = false
				}
				changes = true
			}
		}
		pointer++
	}

	if changes {
		diffs = dmp.DiffCleanupMerge(diffs)
	}

	return diffs
}

// DiffCleanupMerge reorders and merges like edit sections. Merge equalities.
// Any edit section can move as long as it doesn't cross an equality.
func (dmp *DiffMatchPatch) DiffCleanupMerge(diffs []Diff) []Diff {
	// Add a dummy entry at the end.
	diffs = append(diffs, Diff{DiffEqual, ""})
	pointer := 0
	countDelete := 0
	countInsert := 0
	commonlength := 0
	textDelete := []rune(nil)
	textInsert := []rune(nil)

	for pointer < len(diffs) {
		switch diffs[pointer].Type {
		case DiffInsert:
			countInsert++
			textInsert = append(textInsert, []rune(diffs[pointer].Text)...)
			pointer++
			break
		case DiffDelete:
			countDelete++
			textDelete = append(textDelete, []rune(diffs[pointer].Text)...)
			pointer++
			break
		case DiffEqual:
			// Upon reaching an equality, check for prior redundancies.
			if countDelete+countInsert > 1 {
				if countDelete != 0 && countInsert != 0 {
					// Factor out any common prefixies.
					commonlength = commonPrefixLength(textInsert, textDelete)
					if commonlength != 0 {
						x := pointer - countDelete - countInsert
						if x > 0 && diffs[x-1].Type == DiffEqual {
							diffs[x-1].Text += string(textInsert[:commonlength])
						} else {
							diffs = append([]Diff{{DiffEqual, string(textInsert[:commonlength])}}, diffs...)
							pointer++
						}
						textInsert = textInsert[commonlength:]
						textDelete = textDelete[commonlength:]
					}
					// Factor out any common suffixies.
					commonlength = commonSuffixLength(textInsert, textDelete)
					if commonlength != 0 {
						insertIndex := len(textInsert) - commonlength
						deleteIndex := len(textDelete) - commonlength
						diffs[pointer].Text = string(textInsert[insertIndex:]) + diffs[pointer].Text
						textInsert = textInsert[:insertIndex]
						textDelete = textDelete[:deleteIndex]
					}
				}
				// Delete the offending records and add the merged ones.
				if countDelete == 0 {
					diffs = splice(diffs, pointer-countInsert,
						countDelete+countInsert,
						Diff{DiffInsert, string(textInsert)})
				} else if countInsert == 0 {
					diffs = splice(diffs, pointer-countDelete,
						countDelete+countInsert,
						Diff{DiffDelete, string(textDelete)})
				} else {
					diffs = splice(diffs, pointer-countDelete-countInsert,
						countDelete+countInsert,
						Diff{DiffDelete, string(textDelete)},
						Diff{DiffInsert, string(textInsert)})
				}

				pointer = pointer - countDelete - countInsert + 1
				if countDelete != 0 {
					pointer++
				}
				if countInsert != 0 {
					pointer++
				}
			} else if pointer != 0 && diffs[pointer-1].Type == DiffEqual {
				// Merge this equality with the previous one.
				diffs[pointer-1].Text += diffs[pointer].Text
				diffs = append(diffs[:pointer], diffs[pointer+1:]...)
			} else {
				pointer++
			}
			countInsert = 0
			countDelete = 0
			textDelete = nil
			textInsert = nil
			break
		}
	}

	if len(diffs[len(diffs)-1].Text) == 0 {
		diffs = diffs[0 : len(diffs)-1] // Remove the dummy entry at the end.
	}

	// Second pass: look for single edits surrounded on both sides by equalities which can be shifted sideways to eliminate an equality. E.g: A<ins>BA</ins>C -> <ins>AB</ins>AC
	changes := false
	pointer = 1
	// Intentionally ignore the first and last element (don't need checking).
	for pointer < (len(diffs) - 1) {
		if diffs[pointer-1].Type == DiffEqual &&
			diffs[pointer+1].Type == DiffEqual {
			// This is a single edit surrounded by equalities.
			if strings.HasSuffix(diffs[pointer].Text, diffs[pointer-1].Text) {
				// Shift the edit over the previous equality.
				diffs[pointer].Text = diffs[pointer-1].Text +
					diffs[pointer].Text[:len(diffs[pointer].Text)-len(diffs[pointer-1].Text)]
				diffs[pointer+1].Text = diffs[pointer-1].Text + diffs[pointer+1].Text
				diffs = splice(diffs, pointer-1, 1)
				changes = true
			} else if strings.HasPrefix(diffs[pointer].Text, diffs[pointer+1].Text) {
				// Shift the edit over the next equality.
				diffs[pointer-1].Text += diffs[pointer+1].Text
				diffs[pointer].Text =
					diffs[pointer].Text[len(diffs[pointer+1].Text):] + diffs[pointer+1].Text
				diffs = splice(diffs, pointer+1, 1)
				changes = true
			}
		}
		pointer++
	}

	// If shifts were made, the diff needs reordering and another shift sweep.
	if changes {
		diffs = dmp.DiffCleanupMerge(diffs)
	}

	return diffs
}

// DiffXIndex returns the equivalent location in s2.
func (dmp *DiffMatchPatch) DiffXIndex(diffs []Diff, loc int) int {
	chars1 := 0
	chars2 := 0
	lastChars1 := 0
	lastChars2 := 0
	lastDiff := Diff{}
	for i := 0; i < len(diffs); i++ {
		aDiff := diffs[i]
		if aDiff.Type != DiffInsert {
			// Equality or deletion.
			chars1 += len(aDiff.Text)
		}
		if aDiff.Type != DiffDelete {
			// Equality or insertion.
			chars2 += len(aDiff.Text)
		}
		if chars1 > loc {
			// Overshot the location.
			lastDiff = aDiff
			break
		}
		lastChars1 = chars1
		lastChars2 = chars2
	}
	if lastDiff.Type == DiffDelete {
		// The location was deleted.
		return lastChars2
	}
	// Add the remaining character length.
	return lastChars2 + (loc - lastChars1)
}

// DiffPrettyHtml converts a []Diff into a pretty HTML report.
// It is intended as an example from which to write one's own display functions.
func (dmp *DiffMatchPatch) DiffPrettyHtml(diffs []Diff) string {
	var buff bytes.Buffer
	for _, diff := range diffs {
		text := strings.Replace(html.EscapeString(diff.Text), "\n", "&para;<br>", -1)
		switch diff.Type {
		case DiffInsert:
			_, _ = buff.WriteString("<ins style=\"background:#e6ffe6;\">")
			_, _ = buff.WriteString(text)
			_, _ = buff.WriteString("</ins>")
		case DiffDelete:
			_, _ = buff.WriteString("<del style=\"background:#ffe6e6;\">")
			_, _ = buff.WriteString(text)
			_, _ = buff.WriteString("</del>")
		case DiffEqual:
			_, _ = buff.WriteString("<span>")
			_, _ = buff.WriteString(text)
			_, _ = buff.WriteString("</span>")
		}
	}
	return buff.String()
}

// DiffPrettyText converts a []Diff into a colored text report.
func (dmp *DiffMatchPatch) DiffPrettyText(diffs []Diff) string {
	var buff bytes.Buffer
	for _, diff := range diffs {
		text := diff.Text

		switch diff.Type {
		case DiffInsert:
			_, _ = buff.WriteString("\x1b[32m")
			_, _ = buff.WriteString(text)
			_, _ = buff.WriteString("\x1b[0m")
		case DiffDelete:
			_, _ = buff.WriteString("\x1b[31m")
			_, _ = buff.WriteString(text)
			_, _ = buff.WriteString("\x1b[0m")
		case DiffEqual:
			_, _ = buff.WriteString(text)
		}
	}

	return buff.String()
}

// DiffText1 computes and returns the source text (all equalities and deletions).
func (dmp *DiffMatchPatch) DiffText1(diffs []Diff) string {
	//StringBuilder text = new StringBuilder()
	var text bytes.Buffer

	for _, aDiff := range diffs {
		if aDiff.Type != DiffInsert {
			_, _ = text.WriteString(aDiff.Text)
		}
	}
	return text.String()
}

// DiffText2 computes and returns the destination text (all equalities and insertions).
func (dmp *DiffMatchPatch) DiffText2(diffs []Diff) string {
	var text bytes.Buffer

	for _, aDiff := range diffs {
		if aDiff.Type != DiffDelete {
			_, _ = text.WriteString(aDiff.Text)
		}
	}
	return text.String()
}

// DiffLevenshtein computes the Levenshtein distance that is the number of inserted, deleted or substituted characters.
func (dmp *DiffMatchPatch) DiffLevenshtein(diffs []Diff) int {
	levenshtein := 0
	insertions := 0
	deletions := 0

	for _, aDiff := range diffs {
		switch aDiff.Type {
		case DiffInsert:
			insertions += utf8.RuneCountInString(aDiff.Text)
		case DiffDelete:
			deletions += utf8.RuneCountInString(aDiff.Text)
		case DiffEqual:
			// A deletion and an insertion is one substitution.
			levenshtein += max(insertions, deletions)
			insertions = 0
			deletions = 0
		}
	}

	levenshtein += max(insertions, deletions)
	return levenshtein
}

// DiffToDelta crushes the diff into an encoded string which describes the operations required to transform text1 into text2.
// E.g. =3\t-2\t+ing  -> Keep 3 chars, delete 2 chars, insert 'ing'. Operations are tab-separated.  Inserted text is escaped using %xx notation.
func (dmp *DiffMatchPatch) DiffToDelta(diffs []Diff) string {
	var text bytes.Buffer
	for _, aDiff := range diffs {
		switch aDiff.Type {
		case DiffInsert:
			_, _ = text.WriteString("+")
			_, _ = text.WriteString(strings.Replace(url.QueryEscape(aDiff.Text), "+", " ", -1))
			_, _ = text.WriteString("\t")
			break
		case DiffDelete:
			_, _ = text.WriteString("-")
			_, _ = text.WriteString(strconv.Itoa(utf8.RuneCountInString(aDiff.Text)))
			_, _ = text.WriteString("\t")
			break
		case DiffEqual:
			_, _ = text.WriteString("=")
			_, _ = text.WriteString(strconv.Itoa(utf8.RuneCountInString(aDiff.Text)))
			_, _ = text.WriteString("\t")
			break
		}
	}
	delta := text.String()
	if len(delta) != 0 {
		// Strip off trailing tab character.
		delta = delta[0 : utf8.RuneCountInString(delta)-1]
		delta = unescaper.Replace(delta)
	}
	return delta
}

// DiffFromDelta given the original text1, and an encoded string which describes the operations required to transform text1 into text2, comAdde the full diff.
func (dmp *DiffMatchPatch) DiffFromDelta(text1 string, delta string) (diffs []Diff, err error) {
	i := 0
	runes := []rune(text1)

	for _, token := range strings.Split(delta, "\t") {
		if len(token) == 0 {
			// Blank tokens are ok (from a trailing \t).
			continue
		}

		// Each token begins with a one character parameter which specifies the operation of this token (delete, insert, equality).
		param := token[1:]

		switch op := token[0]; op {
		case '+':
			// Decode would Diff all "+" to " "
			param = strings.Replace(param, "+", "%2b", -1)
			param, err = url.QueryUnescape(param)
			if err != nil {
				return nil, err
			}
			if !utf8.ValidString(param) {
				return nil, fmt.Errorf("invalid UTF-8 token: %q", param)
			}

			diffs = append(diffs, Diff{DiffInsert, param})
		case '=', '-':
			n, err := strconv.ParseInt(param, 10, 0)
			if err != nil {
				return nil, err
			} else if n < 0 {
				return nil, errors.New("Negative number in DiffFromDelta: " + param)
			}

			i += int(n)
			// Break out if we are out of bounds, go1.6 can't handle this very well
			if i > len(runes) {
				break
			}
			// Remember that string slicing is by byte - we want by rune here.
			text := string(runes[i-int(n) : i])

			if op == '=' {
				diffs = append(diffs, Diff{DiffEqual, text})
			} else {
				diffs = append(diffs, Diff{DiffDelete, text})
			}
		default:
			// Anything else is an error.
			return nil, errors.New("Invalid diff operation in DiffFromDelta: " + string(token[0]))
		}
	}

	if i != len(runes) {
		return nil, fmt.Errorf("Delta length (%v) is different from source text length (%v)", i, len(text1))
	}

	return diffs, nil
}

// diffLinesToStrings splits two texts into a list of strings. Each string represents one line.
func (dmp *DiffMatchPatch) diffLinesToStrings(text1, text2 string) (string, string, []string) {
	// '\x00' is a valid character, but various debuggers don't like it. So we'll insert a junk entry to avoid generating a null character.
	lineArray := []string{""} // e.g. lineArray[4] == 'Hello\n'

	//Each string has the index of lineArray which it points to
	strIndexArray1 := dmp.diffLinesToStringsMunge(text1, &lineArray)
	strIndexArray2 := dmp.diffLinesToStringsMunge(text2, &lineArray)

	return intArrayToString(strIndexArray1), intArrayToString(strIndexArray2), lineArray
}

// diffLinesToStringsMunge splits a text into an array of strings, and reduces the texts to a []string.
func (dmp *DiffMatchPatch) diffLinesToStringsMunge(text string, lineArray *[]string) []uint32 {
	// Walk the text, pulling out a substring for each line. text.split('\n') would would temporarily double our memory footprint. Modifying text would create many large strings to garbage collect.
	lineHash := map[string]int{} // e.g. lineHash['Hello\n'] == 4
	lineStart := 0
	lineEnd := -1
	strs := []uint32{}

	for lineEnd < len(text)-1 {
		lineEnd = indexOf(text, "\n", lineStart)

		if lineEnd == -1 {
			lineEnd = len(text) - 1
		}

		line := text[lineStart : lineEnd+1]
		lineStart = lineEnd + 1
		lineValue, ok := lineHash[line]

		if ok {
			strs = append(strs, uint32(lineValue))
		} else {
			*lineArray = append(*lineArray, line)
			lineHash[line] = len(*lineArray) - 1
			strs = append(strs, uint32(len(*lineArray)-1))
		}
	}

	return strs
}
  07070100000AB5000081A4000000000000000000000001645E367C00000736000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/sergi/go-diff/diffmatchpatch/diffmatchpatch.go  // Copyright (c) 2012-2016 The go-diff authors. All rights reserved.
// https://github.com/sergi/go-diff
// See the included LICENSE file for license details.
//
// go-diff is a Go implementation of Google's Diff, Match, and Patch library
// Original library is Copyright (c) 2006 Google Inc.
// http://code.google.com/p/google-diff-match-patch/

// Package diffmatchpatch offers robust algorithms to perform the operations required for synchronizing plain text.
package diffmatchpatch

import (
	"time"
)

// DiffMatchPatch holds the configuration for diff-match-patch operations.
type DiffMatchPatch struct {
	// Number of seconds to map a diff before giving up (0 for infinity).
	DiffTimeout time.Duration
	// Cost of an empty edit operation in terms of edit characters.
	DiffEditCost int
	// How far to search for a match (0 = exact location, 1000+ = broad match). A match this many characters away from the expected location will add 1.0 to the score (0.0 is a perfect match).
	MatchDistance int
	// When deleting a large block of text (over ~64 characters), how close do the contents have to be to match the expected contents. (0.0 = perfection, 1.0 = very loose).  Note that MatchThreshold controls how closely the end points of a delete need to match.
	PatchDeleteThreshold float64
	// Chunk size for context length.
	PatchMargin int
	// The number of bits in an int.
	MatchMaxBits int
	// At what point is no match declared (0.0 = perfection, 1.0 = very loose).
	MatchThreshold float64
}

// New creates a new DiffMatchPatch object with default parameters.
func New() *DiffMatchPatch {
	// Defaults.
	return &DiffMatchPatch{
		DiffTimeout:          time.Second,
		DiffEditCost:         4,
		MatchThreshold:       0.5,
		MatchDistance:        1000,
		PatchDeleteThreshold: 0.5,
		PatchMargin:          4,
		MatchMaxBits:         32,
	}
}
  07070100000AB6000081A4000000000000000000000001645E367C000012E2000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/sergi/go-diff/diffmatchpatch/match.go   // Copyright (c) 2012-2016 The go-diff authors. All rights reserved.
// https://github.com/sergi/go-diff
// See the included LICENSE file for license details.
//
// go-diff is a Go implementation of Google's Diff, Match, and Patch library
// Original library is Copyright (c) 2006 Google Inc.
// http://code.google.com/p/google-diff-match-patch/

package diffmatchpatch

import (
	"math"
)

// MatchMain locates the best instance of 'pattern' in 'text' near 'loc'.
// Returns -1 if no match found.
func (dmp *DiffMatchPatch) MatchMain(text, pattern string, loc int) int {
	// Check for null inputs not needed since null can't be passed in C#.

	loc = int(math.Max(0, math.Min(float64(loc), float64(len(text)))))
	if text == pattern {
		// Shortcut (potentially not guaranteed by the algorithm)
		return 0
	} else if len(text) == 0 {
		// Nothing to match.
		return -1
	} else if loc+len(pattern) <= len(text) && text[loc:loc+len(pattern)] == pattern {
		// Perfect match at the perfect spot!  (Includes case of null pattern)
		return loc
	}
	// Do a fuzzy compare.
	return dmp.MatchBitap(text, pattern, loc)
}

// MatchBitap locates the best instance of 'pattern' in 'text' near 'loc' using the Bitap algorithm.
// Returns -1 if no match was found.
func (dmp *DiffMatchPatch) MatchBitap(text, pattern string, loc int) int {
	// Initialise the alphabet.
	s := dmp.MatchAlphabet(pattern)

	// Highest score beyond which we give up.
	scoreThreshold := dmp.MatchThreshold
	// Is there a nearby exact match? (speedup)
	bestLoc := indexOf(text, pattern, loc)
	if bestLoc != -1 {
		scoreThreshold = math.Min(dmp.matchBitapScore(0, bestLoc, loc,
			pattern), scoreThreshold)
		// What about in the other direction? (speedup)
		bestLoc = lastIndexOf(text, pattern, loc+len(pattern))
		if bestLoc != -1 {
			scoreThreshold = math.Min(dmp.matchBitapScore(0, bestLoc, loc,
				pattern), scoreThreshold)
		}
	}

	// Initialise the bit arrays.
	matchmask := 1 << uint((len(pattern) - 1))
	bestLoc = -1

	var binMin, binMid int
	binMax := len(pattern) + len(text)
	lastRd := []int{}
	for d := 0; d < len(pattern); d++ {
		// Scan for the best match; each iteration allows for one more error. Run a binary search to determine how far from 'loc' we can stray at this error level.
		binMin = 0
		binMid = binMax
		for binMin < binMid {
			if dmp.matchBitapScore(d, loc+binMid, loc, pattern) <= scoreThreshold {
				binMin = binMid
			} else {
				binMax = binMid
			}
			binMid = (binMax-binMin)/2 + binMin
		}
		// Use the result from this iteration as the maximum for the next.
		binMax = binMid
		start := int(math.Max(1, float64(loc-binMid+1)))
		finish := int(math.Min(float64(loc+binMid), float64(len(text))) + float64(len(pattern)))

		rd := make([]int, finish+2)
		rd[finish+1] = (1 << uint(d)) - 1

		for j := finish; j >= start; j-- {
			var charMatch int
			if len(text) <= j-1 {
				// Out of range.
				charMatch = 0
			} else if _, ok := s[text[j-1]]; !ok {
				charMatch = 0
			} else {
				charMatch = s[text[j-1]]
			}

			if d == 0 {
				// First pass: exact match.
				rd[j] = ((rd[j+1] << 1) | 1) & charMatch
			} else {
				// Subsequent passes: fuzzy match.
				rd[j] = ((rd[j+1]<<1)|1)&charMatch | (((lastRd[j+1] | lastRd[j]) << 1) | 1) | lastRd[j+1]
			}
			if (rd[j] & matchmask) != 0 {
				score := dmp.matchBitapScore(d, j-1, loc, pattern)
				// This match will almost certainly be better than any existing match.  But check anyway.
				if score <= scoreThreshold {
					// Told you so.
					scoreThreshold = score
					bestLoc = j - 1
					if bestLoc > loc {
						// When passing loc, don't exceed our current distance from loc.
						start = int(math.Max(1, float64(2*loc-bestLoc)))
					} else {
						// Already passed loc, downhill from here on in.
						break
					}
				}
			}
		}
		if dmp.matchBitapScore(d+1, loc, loc, pattern) > scoreThreshold {
			// No hope for a (better) match at greater error levels.
			break
		}
		lastRd = rd
	}
	return bestLoc
}

// matchBitapScore computes and returns the score for a match with e errors and x location.
func (dmp *DiffMatchPatch) matchBitapScore(e, x, loc int, pattern string) float64 {
	accuracy := float64(e) / float64(len(pattern))
	proximity := math.Abs(float64(loc - x))
	if dmp.MatchDistance == 0 {
		// Dodge divide by zero error.
		if proximity == 0 {
			return accuracy
		}

		return 1.0
	}
	return accuracy + (proximity / float64(dmp.MatchDistance))
}

// MatchAlphabet initialises the alphabet for the Bitap algorithm.
func (dmp *DiffMatchPatch) MatchAlphabet(pattern string) map[byte]int {
	s := map[byte]int{}
	charPattern := []byte(pattern)
	for _, c := range charPattern {
		_, ok := s[c]
		if !ok {
			s[c] = 0
		}
	}
	i := 0

	for _, c := range charPattern {
		value := s[c] | int(uint(1)<<uint((len(pattern)-i-1)))
		s[c] = value
		i++
	}
	return s
}
  07070100000AB7000081A4000000000000000000000001645E367C000001F2000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/sergi/go-diff/diffmatchpatch/mathutil.go    // Copyright (c) 2012-2016 The go-diff authors. All rights reserved.
// https://github.com/sergi/go-diff
// See the included LICENSE file for license details.
//
// go-diff is a Go implementation of Google's Diff, Match, and Patch library
// Original library is Copyright (c) 2006 Google Inc.
// http://code.google.com/p/google-diff-match-patch/

package diffmatchpatch

func min(x, y int) int {
	if x < y {
		return x
	}
	return y
}

func max(x, y int) int {
	if x > y {
		return x
	}
	return y
}
  07070100000AB8000081A4000000000000000000000001645E367C000001AD000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/sergi/go-diff/diffmatchpatch/operation_string.go    // Code generated by "stringer -type=Operation -trimprefix=Diff"; DO NOT EDIT.

package diffmatchpatch

import "fmt"

const _Operation_name = "DeleteEqualInsert"

var _Operation_index = [...]uint8{0, 6, 11, 17}

func (i Operation) String() string {
	i -= -1
	if i < 0 || i >= Operation(len(_Operation_index)-1) {
		return fmt.Sprintf("Operation(%d)", i+-1)
	}
	return _Operation_name[_Operation_index[i]:_Operation_index[i+1]]
}
   07070100000AB9000081A4000000000000000000000001645E367C00004599000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/sergi/go-diff/diffmatchpatch/patch.go   // Copyright (c) 2012-2016 The go-diff authors. All rights reserved.
// https://github.com/sergi/go-diff
// See the included LICENSE file for license details.
//
// go-diff is a Go implementation of Google's Diff, Match, and Patch library
// Original library is Copyright (c) 2006 Google Inc.
// http://code.google.com/p/google-diff-match-patch/

package diffmatchpatch

import (
	"bytes"
	"errors"
	"math"
	"net/url"
	"regexp"
	"strconv"
	"strings"
)

// Patch represents one patch operation.
type Patch struct {
	diffs   []Diff
	Start1  int
	Start2  int
	Length1 int
	Length2 int
}

// String emulates GNU diff's format.
// Header: @@ -382,8 +481,9 @@
// Indices are printed as 1-based, not 0-based.
func (p *Patch) String() string {
	var coords1, coords2 string

	if p.Length1 == 0 {
		coords1 = strconv.Itoa(p.Start1) + ",0"
	} else if p.Length1 == 1 {
		coords1 = strconv.Itoa(p.Start1 + 1)
	} else {
		coords1 = strconv.Itoa(p.Start1+1) + "," + strconv.Itoa(p.Length1)
	}

	if p.Length2 == 0 {
		coords2 = strconv.Itoa(p.Start2) + ",0"
	} else if p.Length2 == 1 {
		coords2 = strconv.Itoa(p.Start2 + 1)
	} else {
		coords2 = strconv.Itoa(p.Start2+1) + "," + strconv.Itoa(p.Length2)
	}

	var text bytes.Buffer
	_, _ = text.WriteString("@@ -" + coords1 + " +" + coords2 + " @@\n")

	// Escape the body of the patch with %xx notation.
	for _, aDiff := range p.diffs {
		switch aDiff.Type {
		case DiffInsert:
			_, _ = text.WriteString("+")
		case DiffDelete:
			_, _ = text.WriteString("-")
		case DiffEqual:
			_, _ = text.WriteString(" ")
		}

		_, _ = text.WriteString(strings.Replace(url.QueryEscape(aDiff.Text), "+", " ", -1))
		_, _ = text.WriteString("\n")
	}

	return unescaper.Replace(text.String())
}

// PatchAddContext increases the context until it is unique, but doesn't let the pattern expand beyond MatchMaxBits.
func (dmp *DiffMatchPatch) PatchAddContext(patch Patch, text string) Patch {
	if len(text) == 0 {
		return patch
	}

	pattern := text[patch.Start2 : patch.Start2+patch.Length1]
	padding := 0

	// Look for the first and last matches of pattern in text.  If two different matches are found, increase the pattern length.
	for strings.Index(text, pattern) != strings.LastIndex(text, pattern) &&
		len(pattern) < dmp.MatchMaxBits-2*dmp.PatchMargin {
		padding += dmp.PatchMargin
		maxStart := max(0, patch.Start2-padding)
		minEnd := min(len(text), patch.Start2+patch.Length1+padding)
		pattern = text[maxStart:minEnd]
	}
	// Add one chunk for good luck.
	padding += dmp.PatchMargin

	// Add the prefix.
	prefix := text[max(0, patch.Start2-padding):patch.Start2]
	if len(prefix) != 0 {
		patch.diffs = append([]Diff{Diff{DiffEqual, prefix}}, patch.diffs...)
	}
	// Add the suffix.
	suffix := text[patch.Start2+patch.Length1 : min(len(text), patch.Start2+patch.Length1+padding)]
	if len(suffix) != 0 {
		patch.diffs = append(patch.diffs, Diff{DiffEqual, suffix})
	}

	// Roll back the start points.
	patch.Start1 -= len(prefix)
	patch.Start2 -= len(prefix)
	// Extend the lengths.
	patch.Length1 += len(prefix) + len(suffix)
	patch.Length2 += len(prefix) + len(suffix)

	return patch
}

// PatchMake computes a list of patches.
func (dmp *DiffMatchPatch) PatchMake(opt ...interface{}) []Patch {
	if len(opt) == 1 {
		diffs, _ := opt[0].([]Diff)
		text1 := dmp.DiffText1(diffs)
		return dmp.PatchMake(text1, diffs)
	} else if len(opt) == 2 {
		text1 := opt[0].(string)
		switch t := opt[1].(type) {
		case string:
			diffs := dmp.DiffMain(text1, t, true)
			if len(diffs) > 2 {
				diffs = dmp.DiffCleanupSemantic(diffs)
				diffs = dmp.DiffCleanupEfficiency(diffs)
			}
			return dmp.PatchMake(text1, diffs)
		case []Diff:
			return dmp.patchMake2(text1, t)
		}
	} else if len(opt) == 3 {
		return dmp.PatchMake(opt[0], opt[2])
	}
	return []Patch{}
}

// patchMake2 computes a list of patches to turn text1 into text2.
// text2 is not provided, diffs are the delta between text1 and text2.
func (dmp *DiffMatchPatch) patchMake2(text1 string, diffs []Diff) []Patch {
	// Check for null inputs not needed since null can't be passed in C#.
	patches := []Patch{}
	if len(diffs) == 0 {
		return patches // Get rid of the null case.
	}

	patch := Patch{}
	charCount1 := 0 // Number of characters into the text1 string.
	charCount2 := 0 // Number of characters into the text2 string.
	// Start with text1 (prepatchText) and apply the diffs until we arrive at text2 (postpatchText). We recreate the patches one by one to determine context info.
	prepatchText := text1
	postpatchText := text1

	for i, aDiff := range diffs {
		if len(patch.diffs) == 0 && aDiff.Type != DiffEqual {
			// A new patch starts here.
			patch.Start1 = charCount1
			patch.Start2 = charCount2
		}

		switch aDiff.Type {
		case DiffInsert:
			patch.diffs = append(patch.diffs, aDiff)
			patch.Length2 += len(aDiff.Text)
			postpatchText = postpatchText[:charCount2] +
				aDiff.Text + postpatchText[charCount2:]
		case DiffDelete:
			patch.Length1 += len(aDiff.Text)
			patch.diffs = append(patch.diffs, aDiff)
			postpatchText = postpatchText[:charCount2] + postpatchText[charCount2+len(aDiff.Text):]
		case DiffEqual:
			if len(aDiff.Text) <= 2*dmp.PatchMargin &&
				len(patch.diffs) != 0 && i != len(diffs)-1 {
				// Small equality inside a patch.
				patch.diffs = append(patch.diffs, aDiff)
				patch.Length1 += len(aDiff.Text)
				patch.Length2 += len(aDiff.Text)
			}
			if len(aDiff.Text) >= 2*dmp.PatchMargin {
				// Time for a new patch.
				if len(patch.diffs) != 0 {
					patch = dmp.PatchAddContext(patch, prepatchText)
					patches = append(patches, patch)
					patch = Patch{}
					// Unlike Unidiff, our patch lists have a rolling context. http://code.google.com/p/google-diff-match-patch/wiki/Unidiff Update prepatch text & pos to reflect the application of the just completed patch.
					prepatchText = postpatchText
					charCount1 = charCount2
				}
			}
		}

		// Update the current character count.
		if aDiff.Type != DiffInsert {
			charCount1 += len(aDiff.Text)
		}
		if aDiff.Type != DiffDelete {
			charCount2 += len(aDiff.Text)
		}
	}

	// Pick up the leftover patch if not empty.
	if len(patch.diffs) != 0 {
		patch = dmp.PatchAddContext(patch, prepatchText)
		patches = append(patches, patch)
	}

	return patches
}

// PatchDeepCopy returns an array that is identical to a given an array of patches.
func (dmp *DiffMatchPatch) PatchDeepCopy(patches []Patch) []Patch {
	patchesCopy := []Patch{}
	for _, aPatch := range patches {
		patchCopy := Patch{}
		for _, aDiff := range aPatch.diffs {
			patchCopy.diffs = append(patchCopy.diffs, Diff{
				aDiff.Type,
				aDiff.Text,
			})
		}
		patchCopy.Start1 = aPatch.Start1
		patchCopy.Start2 = aPatch.Start2
		patchCopy.Length1 = aPatch.Length1
		patchCopy.Length2 = aPatch.Length2
		patchesCopy = append(patchesCopy, patchCopy)
	}
	return patchesCopy
}

// PatchApply merges a set of patches onto the text.  Returns a patched text, as well as an array of true/false values indicating which patches were applied.
func (dmp *DiffMatchPatch) PatchApply(patches []Patch, text string) (string, []bool) {
	if len(patches) == 0 {
		return text, []bool{}
	}

	// Deep copy the patches so that no changes are made to originals.
	patches = dmp.PatchDeepCopy(patches)

	nullPadding := dmp.PatchAddPadding(patches)
	text = nullPadding + text + nullPadding
	patches = dmp.PatchSplitMax(patches)

	x := 0
	// delta keeps track of the offset between the expected and actual location of the previous patch.  If there are patches expected at positions 10 and 20, but the first patch was found at 12, delta is 2 and the second patch has an effective expected position of 22.
	delta := 0
	results := make([]bool, len(patches))
	for _, aPatch := range patches {
		expectedLoc := aPatch.Start2 + delta
		text1 := dmp.DiffText1(aPatch.diffs)
		var startLoc int
		endLoc := -1
		if len(text1) > dmp.MatchMaxBits {
			// PatchSplitMax will only provide an oversized pattern in the case of a monster delete.
			startLoc = dmp.MatchMain(text, text1[:dmp.MatchMaxBits], expectedLoc)
			if startLoc != -1 {
				endLoc = dmp.MatchMain(text,
					text1[len(text1)-dmp.MatchMaxBits:], expectedLoc+len(text1)-dmp.MatchMaxBits)
				if endLoc == -1 || startLoc >= endLoc {
					// Can't find valid trailing context.  Drop this patch.
					startLoc = -1
				}
			}
		} else {
			startLoc = dmp.MatchMain(text, text1, expectedLoc)
		}
		if startLoc == -1 {
			// No match found.  :(
			results[x] = false
			// Subtract the delta for this failed patch from subsequent patches.
			delta -= aPatch.Length2 - aPatch.Length1
		} else {
			// Found a match.  :)
			results[x] = true
			delta = startLoc - expectedLoc
			var text2 string
			if endLoc == -1 {
				text2 = text[startLoc:int(math.Min(float64(startLoc+len(text1)), float64(len(text))))]
			} else {
				text2 = text[startLoc:int(math.Min(float64(endLoc+dmp.MatchMaxBits), float64(len(text))))]
			}
			if text1 == text2 {
				// Perfect match, just shove the Replacement text in.
				text = text[:startLoc] + dmp.DiffText2(aPatch.diffs) + text[startLoc+len(text1):]
			} else {
				// Imperfect match.  Run a diff to get a framework of equivalent indices.
				diffs := dmp.DiffMain(text1, text2, false)
				if len(text1) > dmp.MatchMaxBits && float64(dmp.DiffLevenshtein(diffs))/float64(len(text1)) > dmp.PatchDeleteThreshold {
					// The end points match, but the content is unacceptably bad.
					results[x] = false
				} else {
					diffs = dmp.DiffCleanupSemanticLossless(diffs)
					index1 := 0
					for _, aDiff := range aPatch.diffs {
						if aDiff.Type != DiffEqual {
							index2 := dmp.DiffXIndex(diffs, index1)
							if aDiff.Type == DiffInsert {
								// Insertion
								text = text[:startLoc+index2] + aDiff.Text + text[startLoc+index2:]
							} else if aDiff.Type == DiffDelete {
								// Deletion
								startIndex := startLoc + index2
								text = text[:startIndex] +
									text[startIndex+dmp.DiffXIndex(diffs, index1+len(aDiff.Text))-index2:]
							}
						}
						if aDiff.Type != DiffDelete {
							index1 += len(aDiff.Text)
						}
					}
				}
			}
		}
		x++
	}
	// Strip the padding off.
	text = text[len(nullPadding) : len(nullPadding)+(len(text)-2*len(nullPadding))]
	return text, results
}

// PatchAddPadding adds some padding on text start and end so that edges can match something.
// Intended to be called only from within patchApply.
func (dmp *DiffMatchPatch) PatchAddPadding(patches []Patch) string {
	paddingLength := dmp.PatchMargin
	nullPadding := ""
	for x := 1; x <= paddingLength; x++ {
		nullPadding += string(rune(x))
	}

	// Bump all the patches forward.
	for i := range patches {
		patches[i].Start1 += paddingLength
		patches[i].Start2 += paddingLength
	}

	// Add some padding on start of first diff.
	if len(patches[0].diffs) == 0 || patches[0].diffs[0].Type != DiffEqual {
		// Add nullPadding equality.
		patches[0].diffs = append([]Diff{Diff{DiffEqual, nullPadding}}, patches[0].diffs...)
		patches[0].Start1 -= paddingLength // Should be 0.
		patches[0].Start2 -= paddingLength // Should be 0.
		patches[0].Length1 += paddingLength
		patches[0].Length2 += paddingLength
	} else if paddingLength > len(patches[0].diffs[0].Text) {
		// Grow first equality.
		extraLength := paddingLength - len(patches[0].diffs[0].Text)
		patches[0].diffs[0].Text = nullPadding[len(patches[0].diffs[0].Text):] + patches[0].diffs[0].Text
		patches[0].Start1 -= extraLength
		patches[0].Start2 -= extraLength
		patches[0].Length1 += extraLength
		patches[0].Length2 += extraLength
	}

	// Add some padding on end of last diff.
	last := len(patches) - 1
	if len(patches[last].diffs) == 0 || patches[last].diffs[len(patches[last].diffs)-1].Type != DiffEqual {
		// Add nullPadding equality.
		patches[last].diffs = append(patches[last].diffs, Diff{DiffEqual, nullPadding})
		patches[last].Length1 += paddingLength
		patches[last].Length2 += paddingLength
	} else if paddingLength > len(patches[last].diffs[len(patches[last].diffs)-1].Text) {
		// Grow last equality.
		lastDiff := patches[last].diffs[len(patches[last].diffs)-1]
		extraLength := paddingLength - len(lastDiff.Text)
		patches[last].diffs[len(patches[last].diffs)-1].Text += nullPadding[:extraLength]
		patches[last].Length1 += extraLength
		patches[last].Length2 += extraLength
	}

	return nullPadding
}

// PatchSplitMax looks through the patches and breaks up any which are longer than the maximum limit of the match algorithm.
// Intended to be called only from within patchApply.
func (dmp *DiffMatchPatch) PatchSplitMax(patches []Patch) []Patch {
	patchSize := dmp.MatchMaxBits
	for x := 0; x < len(patches); x++ {
		if patches[x].Length1 <= patchSize {
			continue
		}
		bigpatch := patches[x]
		// Remove the big old patch.
		patches = append(patches[:x], patches[x+1:]...)
		x--

		Start1 := bigpatch.Start1
		Start2 := bigpatch.Start2
		precontext := ""
		for len(bigpatch.diffs) != 0 {
			// Create one of several smaller patches.
			patch := Patch{}
			empty := true
			patch.Start1 = Start1 - len(precontext)
			patch.Start2 = Start2 - len(precontext)
			if len(precontext) != 0 {
				patch.Length1 = len(precontext)
				patch.Length2 = len(precontext)
				patch.diffs = append(patch.diffs, Diff{DiffEqual, precontext})
			}
			for len(bigpatch.diffs) != 0 && patch.Length1 < patchSize-dmp.PatchMargin {
				diffType := bigpatch.diffs[0].Type
				diffText := bigpatch.diffs[0].Text
				if diffType == DiffInsert {
					// Insertions are harmless.
					patch.Length2 += len(diffText)
					Start2 += len(diffText)
					patch.diffs = append(patch.diffs, bigpatch.diffs[0])
					bigpatch.diffs = bigpatch.diffs[1:]
					empty = false
				} else if diffType == DiffDelete && len(patch.diffs) == 1 && patch.diffs[0].Type == DiffEqual && len(diffText) > 2*patchSize {
					// This is a large deletion.  Let it pass in one chunk.
					patch.Length1 += len(diffText)
					Start1 += len(diffText)
					empty = false
					patch.diffs = append(patch.diffs, Diff{diffType, diffText})
					bigpatch.diffs = bigpatch.diffs[1:]
				} else {
					// Deletion or equality.  Only take as much as we can stomach.
					diffText = diffText[:min(len(diffText), patchSize-patch.Length1-dmp.PatchMargin)]

					patch.Length1 += len(diffText)
					Start1 += len(diffText)
					if diffType == DiffEqual {
						patch.Length2 += len(diffText)
						Start2 += len(diffText)
					} else {
						empty = false
					}
					patch.diffs = append(patch.diffs, Diff{diffType, diffText})
					if diffText == bigpatch.diffs[0].Text {
						bigpatch.diffs = bigpatch.diffs[1:]
					} else {
						bigpatch.diffs[0].Text =
							bigpatch.diffs[0].Text[len(diffText):]
					}
				}
			}
			// Compute the head context for the next patch.
			precontext = dmp.DiffText2(patch.diffs)
			precontext = precontext[max(0, len(precontext)-dmp.PatchMargin):]

			postcontext := ""
			// Append the end context for this patch.
			if len(dmp.DiffText1(bigpatch.diffs)) > dmp.PatchMargin {
				postcontext = dmp.DiffText1(bigpatch.diffs)[:dmp.PatchMargin]
			} else {
				postcontext = dmp.DiffText1(bigpatch.diffs)
			}

			if len(postcontext) != 0 {
				patch.Length1 += len(postcontext)
				patch.Length2 += len(postcontext)
				if len(patch.diffs) != 0 && patch.diffs[len(patch.diffs)-1].Type == DiffEqual {
					patch.diffs[len(patch.diffs)-1].Text += postcontext
				} else {
					patch.diffs = append(patch.diffs, Diff{DiffEqual, postcontext})
				}
			}
			if !empty {
				x++
				patches = append(patches[:x], append([]Patch{patch}, patches[x:]...)...)
			}
		}
	}
	return patches
}

// PatchToText takes a list of patches and returns a textual representation.
func (dmp *DiffMatchPatch) PatchToText(patches []Patch) string {
	var text bytes.Buffer
	for _, aPatch := range patches {
		_, _ = text.WriteString(aPatch.String())
	}
	return text.String()
}

// PatchFromText parses a textual representation of patches and returns a List of Patch objects.
func (dmp *DiffMatchPatch) PatchFromText(textline string) ([]Patch, error) {
	patches := []Patch{}
	if len(textline) == 0 {
		return patches, nil
	}
	text := strings.Split(textline, "\n")
	textPointer := 0
	patchHeader := regexp.MustCompile("^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$")

	var patch Patch
	var sign uint8
	var line string
	for textPointer < len(text) {

		if !patchHeader.MatchString(text[textPointer]) {
			return patches, errors.New("Invalid patch string: " + text[textPointer])
		}

		patch = Patch{}
		m := patchHeader.FindStringSubmatch(text[textPointer])

		patch.Start1, _ = strconv.Atoi(m[1])
		if len(m[2]) == 0 {
			patch.Start1--
			patch.Length1 = 1
		} else if m[2] == "0" {
			patch.Length1 = 0
		} else {
			patch.Start1--
			patch.Length1, _ = strconv.Atoi(m[2])
		}

		patch.Start2, _ = strconv.Atoi(m[3])

		if len(m[4]) == 0 {
			patch.Start2--
			patch.Length2 = 1
		} else if m[4] == "0" {
			patch.Length2 = 0
		} else {
			patch.Start2--
			patch.Length2, _ = strconv.Atoi(m[4])
		}
		textPointer++

		for textPointer < len(text) {
			if len(text[textPointer]) > 0 {
				sign = text[textPointer][0]
			} else {
				textPointer++
				continue
			}

			line = text[textPointer][1:]
			line = strings.Replace(line, "+", "%2b", -1)
			line, _ = url.QueryUnescape(line)
			if sign == '-' {
				// Deletion.
				patch.diffs = append(patch.diffs, Diff{DiffDelete, line})
			} else if sign == '+' {
				// Insertion.
				patch.diffs = append(patch.diffs, Diff{DiffInsert, line})
			} else if sign == ' ' {
				// Minor equality.
				patch.diffs = append(patch.diffs, Diff{DiffEqual, line})
			} else if sign == '@' {
				// Start of next patch.
				break
			} else {
				// WTF?
				return patches, errors.New("Invalid patch mode '" + string(sign) + "' in: " + string(line))
			}
			textPointer++
		}

		patches = append(patches, patch)
	}
	return patches, nil
}
   07070100000ABA000081A4000000000000000000000001645E367C00000AC8000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/sergi/go-diff/diffmatchpatch/stringutil.go  // Copyright (c) 2012-2016 The go-diff authors. All rights reserved.
// https://github.com/sergi/go-diff
// See the included LICENSE file for license details.
//
// go-diff is a Go implementation of Google's Diff, Match, and Patch library
// Original library is Copyright (c) 2006 Google Inc.
// http://code.google.com/p/google-diff-match-patch/

package diffmatchpatch

import (
	"strconv"
	"strings"
	"unicode/utf8"
)

// unescaper unescapes selected chars for compatibility with JavaScript's encodeURI.
// In speed critical applications this could be dropped since the receiving application will certainly decode these fine. Note that this function is case-sensitive.  Thus "%3F" would not be unescaped.  But this is ok because it is only called with the output of HttpUtility.UrlEncode which returns lowercase hex. Example: "%3f" -> "?", "%24" -> "$", etc.
var unescaper = strings.NewReplacer(
	"%21", "!", "%7E", "~", "%27", "'",
	"%28", "(", "%29", ")", "%3B", ";",
	"%2F", "/", "%3F", "?", "%3A", ":",
	"%40", "@", "%26", "&", "%3D", "=",
	"%2B", "+", "%24", "$", "%2C", ",", "%23", "#", "%2A", "*")

// indexOf returns the first index of pattern in str, starting at str[i].
func indexOf(str string, pattern string, i int) int {
	if i > len(str)-1 {
		return -1
	}
	if i <= 0 {
		return strings.Index(str, pattern)
	}
	ind := strings.Index(str[i:], pattern)
	if ind == -1 {
		return -1
	}
	return ind + i
}

// lastIndexOf returns the last index of pattern in str, starting at str[i].
func lastIndexOf(str string, pattern string, i int) int {
	if i < 0 {
		return -1
	}
	if i >= len(str) {
		return strings.LastIndex(str, pattern)
	}
	_, size := utf8.DecodeRuneInString(str[i:])
	return strings.LastIndex(str[:i+size], pattern)
}

// runesIndexOf returns the index of pattern in target, starting at target[i].
func runesIndexOf(target, pattern []rune, i int) int {
	if i > len(target)-1 {
		return -1
	}
	if i <= 0 {
		return runesIndex(target, pattern)
	}
	ind := runesIndex(target[i:], pattern)
	if ind == -1 {
		return -1
	}
	return ind + i
}

func runesEqual(r1, r2 []rune) bool {
	if len(r1) != len(r2) {
		return false
	}
	for i, c := range r1 {
		if c != r2[i] {
			return false
		}
	}
	return true
}

// runesIndex is the equivalent of strings.Index for rune slices.
func runesIndex(r1, r2 []rune) int {
	last := len(r1) - len(r2)
	for i := 0; i <= last; i++ {
		if runesEqual(r1[i:i+len(r2)], r2) {
			return i
		}
	}
	return -1
}

func intArrayToString(ns []uint32) string {
	if len(ns) == 0 {
		return ""
	}

	indexSeparator := IndexSeparator[0]

	// Appr. 3 chars per num plus the comma.
	b := []byte{}
	for _, n := range ns {
		b = strconv.AppendInt(b, int64(n), 10)
		b = append(b, indexSeparator)
	}
	b = b[:len(b)-1]
	return string(b)
}
07070100000ABB000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003100000000elemental-cli-0.3.1/vendor/github.com/shopspring  07070100000ABC000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/shopspring/decimal  07070100000ABD000081A4000000000000000000000001645E367C00000040000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/shopspring/decimal/.gitignore   .git
*.swp

# IntelliJ
.idea/
*.iml

# VS code
*.code-workspace
07070100000ABE000081A4000000000000000000000001645E367C0000009D000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/shopspring/decimal/.travis.yml  language: go

arch: 
 - amd64
 - ppc64le

go:
  - 1.7.x
  - 1.14.x
  - 1.15.x
  - 1.16.x
  - 1.17.x
  - tip

install:
  - go build .

script:
  - go test -v
   07070100000ABF000081A4000000000000000000000001645E367C00000B2F000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/shopspring/decimal/CHANGELOG.md ## Decimal v1.3.1

#### ENHANCEMENTS
- Reduce memory allocation in case of initialization from big.Int [#252](https://github.com/shopspring/decimal/pull/252)

#### BUGFIXES
- Fix binary marshalling of decimal zero value  [#253](https://github.com/shopspring/decimal/pull/253)

## Decimal v1.3.0

#### FEATURES
- Add NewFromFormattedString initializer [#184](https://github.com/shopspring/decimal/pull/184)
- Add NewNullDecimal initializer [#234](https://github.com/shopspring/decimal/pull/234)
- Add implementation of natural exponent function (Taylor, Hull-Abraham) [#229](https://github.com/shopspring/decimal/pull/229)
- Add RoundUp, RoundDown, RoundCeil, RoundFloor methods [#196](https://github.com/shopspring/decimal/pull/196) [#202](https://github.com/shopspring/decimal/pull/202) [#220](https://github.com/shopspring/decimal/pull/220)
- Add XML support for NullDecimal [#192](https://github.com/shopspring/decimal/pull/192)
- Add IsInteger method [#179](https://github.com/shopspring/decimal/pull/179)
- Add Copy helper method [#123](https://github.com/shopspring/decimal/pull/123)
- Add InexactFloat64 helper method [#205](https://github.com/shopspring/decimal/pull/205)
- Add CoefficientInt64 helper method [#244](https://github.com/shopspring/decimal/pull/244)

#### ENHANCEMENTS
- Performance optimization of NewFromString init method [#198](https://github.com/shopspring/decimal/pull/198)
- Performance optimization of Abs and Round methods [#240](https://github.com/shopspring/decimal/pull/240)
- Additional tests (CI) for ppc64le architecture [#188](https://github.com/shopspring/decimal/pull/188)

#### BUGFIXES
- Fix rounding in FormatFloat fallback path (roundShortest method, fix taken from Go main repository) [#161](https://github.com/shopspring/decimal/pull/161)
- Add slice range checks to UnmarshalBinary method [#232](https://github.com/shopspring/decimal/pull/232)

## Decimal v1.2.0

#### BREAKING
- Drop support for Go version older than 1.7 [#172](https://github.com/shopspring/decimal/pull/172)

#### FEATURES
- Add NewFromInt and NewFromInt32 initializers [#72](https://github.com/shopspring/decimal/pull/72)
- Add support for Go modules [#157](https://github.com/shopspring/decimal/pull/157)
- Add BigInt, BigFloat helper methods [#171](https://github.com/shopspring/decimal/pull/171)

#### ENHANCEMENTS
- Memory usage optimization [#160](https://github.com/shopspring/decimal/pull/160)
- Updated travis CI golang versions [#156](https://github.com/shopspring/decimal/pull/156)
- Update documentation [#173](https://github.com/shopspring/decimal/pull/173)
- Improve code quality [#174](https://github.com/shopspring/decimal/pull/174)

#### BUGFIXES
- Revert remove insignificant digits [#159](https://github.com/shopspring/decimal/pull/159)
- Remove 15 interval for RoundCash [#166](https://github.com/shopspring/decimal/pull/166)
 07070100000AC0000081A4000000000000000000000001645E367C000008C5000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/shopspring/decimal/LICENSE  The MIT License (MIT)

Copyright (c) 2015 Spring, Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

- Based on https://github.com/oguzbilgic/fpd, which has the following license:
"""
The MIT License (MIT)

Copyright (c) 2013 Oguz Bilgic

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
"""
   07070100000AC1000081A4000000000000000000000001645E367C00001291000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/shopspring/decimal/README.md    # decimal

[![Build Status](https://app.travis-ci.com/shopspring/decimal.svg?branch=master)](https://app.travis-ci.com/shopspring/decimal) [![GoDoc](https://godoc.org/github.com/shopspring/decimal?status.svg)](https://godoc.org/github.com/shopspring/decimal) [![Go Report Card](https://goreportcard.com/badge/github.com/shopspring/decimal)](https://goreportcard.com/report/github.com/shopspring/decimal)

Arbitrary-precision fixed-point decimal numbers in go.

_Note:_ Decimal library can "only" represent numbers with a maximum of 2^31 digits after the decimal point.

## Features

 * The zero-value is 0, and is safe to use without initialization
 * Addition, subtraction, multiplication with no loss of precision
 * Division with specified precision
 * Database/sql serialization/deserialization
 * JSON and XML serialization/deserialization

## Install

Run `go get github.com/shopspring/decimal`

## Requirements 

Decimal library requires Go version `>=1.7`

## Usage

```go
package main

import (
	"fmt"
	"github.com/shopspring/decimal"
)

func main() {
	price, err := decimal.NewFromString("136.02")
	if err != nil {
		panic(err)
	}

	quantity := decimal.NewFromInt(3)

	fee, _ := decimal.NewFromString(".035")
	taxRate, _ := decimal.NewFromString(".08875")

	subtotal := price.Mul(quantity)

	preTax := subtotal.Mul(fee.Add(decimal.NewFromFloat(1)))

	total := preTax.Mul(taxRate.Add(decimal.NewFromFloat(1)))

	fmt.Println("Subtotal:", subtotal)                      // Subtotal: 408.06
	fmt.Println("Pre-tax:", preTax)                         // Pre-tax: 422.3421
	fmt.Println("Taxes:", total.Sub(preTax))                // Taxes: 37.482861375
	fmt.Println("Total:", total)                            // Total: 459.824961375
	fmt.Println("Tax rate:", total.Sub(preTax).Div(preTax)) // Tax rate: 0.08875
}
```

## Documentation

http://godoc.org/github.com/shopspring/decimal

## Production Usage

* [Spring](https://shopspring.com/), since August 14, 2014.
* If you are using this in production, please let us know!

## FAQ

#### Why don't you just use float64?

Because float64 (or any binary floating point type, actually) can't represent
numbers such as `0.1` exactly.

Consider this code: http://play.golang.org/p/TQBd4yJe6B You might expect that
it prints out `10`, but it actually prints `9.999999999999831`. Over time,
these small errors can really add up!

#### Why don't you just use big.Rat?

big.Rat is fine for representing rational numbers, but Decimal is better for
representing money. Why? Here's a (contrived) example:

Let's say you use big.Rat, and you have two numbers, x and y, both
representing 1/3, and you have `z = 1 - x - y = 1/3`. If you print each one
out, the string output has to stop somewhere (let's say it stops at 3 decimal
digits, for simplicity), so you'll get 0.333, 0.333, and 0.333. But where did
the other 0.001 go?

Here's the above example as code: http://play.golang.org/p/lCZZs0w9KE

With Decimal, the strings being printed out represent the number exactly. So,
if you have `x = y = 1/3` (with precision 3), they will actually be equal to
0.333, and when you do `z = 1 - x - y`, `z` will be equal to .334. No money is
unaccounted for!

You still have to be careful. If you want to split a number `N` 3 ways, you
can't just send `N/3` to three different people. You have to pick one to send
`N - (2/3*N)` to. That person will receive the fraction of a penny remainder.

But, it is much easier to be careful with Decimal than with big.Rat.

#### Why isn't the API similar to big.Int's?

big.Int's API is built to reduce the number of memory allocations for maximal
performance. This makes sense for its use-case, but the trade-off is that the
API is awkward and easy to misuse.

For example, to add two big.Ints, you do: `z := new(big.Int).Add(x, y)`. A
developer unfamiliar with this API might try to do `z := a.Add(a, b)`. This
modifies `a` and sets `z` as an alias for `a`, which they might not expect. It
also modifies any other aliases to `a`.

Here's an example of the subtle bugs you can introduce with big.Int's API:
https://play.golang.org/p/x2R_78pa8r

In contrast, it's difficult to make such mistakes with decimal. Decimals
behave like other go numbers types: even though `a = b` will not deep copy
`b` into `a`, it is impossible to modify a Decimal, since all Decimal methods
return new Decimals and do not modify the originals. The downside is that
this causes extra allocations, so Decimal is less performant.  My assumption
is that if you're using Decimals, you probably care more about correctness
than performance.

## License

The MIT License (MIT)

This is a heavily modified fork of [fpd.Decimal](https://github.com/oguzbilgic/fpd), which was also released under the MIT License.
   07070100000AC2000081A4000000000000000000000001645E367C00002C23000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/shopspring/decimal/decimal-go.go    // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Multiprecision decimal numbers.
// For floating-point formatting only; not general purpose.
// Only operations are assign and (binary) left/right shift.
// Can do binary floating point in multiprecision decimal precisely
// because 2 divides 10; cannot do decimal floating point
// in multiprecision binary precisely.

package decimal

type decimal struct {
	d     [800]byte // digits, big-endian representation
	nd    int       // number of digits used
	dp    int       // decimal point
	neg   bool      // negative flag
	trunc bool      // discarded nonzero digits beyond d[:nd]
}

func (a *decimal) String() string {
	n := 10 + a.nd
	if a.dp > 0 {
		n += a.dp
	}
	if a.dp < 0 {
		n += -a.dp
	}

	buf := make([]byte, n)
	w := 0
	switch {
	case a.nd == 0:
		return "0"

	case a.dp <= 0:
		// zeros fill space between decimal point and digits
		buf[w] = '0'
		w++
		buf[w] = '.'
		w++
		w += digitZero(buf[w : w+-a.dp])
		w += copy(buf[w:], a.d[0:a.nd])

	case a.dp < a.nd:
		// decimal point in middle of digits
		w += copy(buf[w:], a.d[0:a.dp])
		buf[w] = '.'
		w++
		w += copy(buf[w:], a.d[a.dp:a.nd])

	default:
		// zeros fill space between digits and decimal point
		w += copy(buf[w:], a.d[0:a.nd])
		w += digitZero(buf[w : w+a.dp-a.nd])
	}
	return string(buf[0:w])
}

func digitZero(dst []byte) int {
	for i := range dst {
		dst[i] = '0'
	}
	return len(dst)
}

// trim trailing zeros from number.
// (They are meaningless; the decimal point is tracked
// independent of the number of digits.)
func trim(a *decimal) {
	for a.nd > 0 && a.d[a.nd-1] == '0' {
		a.nd--
	}
	if a.nd == 0 {
		a.dp = 0
	}
}

// Assign v to a.
func (a *decimal) Assign(v uint64) {
	var buf [24]byte

	// Write reversed decimal in buf.
	n := 0
	for v > 0 {
		v1 := v / 10
		v -= 10 * v1
		buf[n] = byte(v + '0')
		n++
		v = v1
	}

	// Reverse again to produce forward decimal in a.d.
	a.nd = 0
	for n--; n >= 0; n-- {
		a.d[a.nd] = buf[n]
		a.nd++
	}
	a.dp = a.nd
	trim(a)
}

// Maximum shift that we can do in one pass without overflow.
// A uint has 32 or 64 bits, and we have to be able to accommodate 9<<k.
const uintSize = 32 << (^uint(0) >> 63)
const maxShift = uintSize - 4

// Binary shift right (/ 2) by k bits.  k <= maxShift to avoid overflow.
func rightShift(a *decimal, k uint) {
	r := 0 // read pointer
	w := 0 // write pointer

	// Pick up enough leading digits to cover first shift.
	var n uint
	for ; n>>k == 0; r++ {
		if r >= a.nd {
			if n == 0 {
				// a == 0; shouldn't get here, but handle anyway.
				a.nd = 0
				return
			}
			for n>>k == 0 {
				n = n * 10
				r++
			}
			break
		}
		c := uint(a.d[r])
		n = n*10 + c - '0'
	}
	a.dp -= r - 1

	var mask uint = (1 << k) - 1

	// Pick up a digit, put down a digit.
	for ; r < a.nd; r++ {
		c := uint(a.d[r])
		dig := n >> k
		n &= mask
		a.d[w] = byte(dig + '0')
		w++
		n = n*10 + c - '0'
	}

	// Put down extra digits.
	for n > 0 {
		dig := n >> k
		n &= mask
		if w < len(a.d) {
			a.d[w] = byte(dig + '0')
			w++
		} else if dig > 0 {
			a.trunc = true
		}
		n = n * 10
	}

	a.nd = w
	trim(a)
}

// Cheat sheet for left shift: table indexed by shift count giving
// number of new digits that will be introduced by that shift.
//
// For example, leftcheats[4] = {2, "625"}.  That means that
// if we are shifting by 4 (multiplying by 16), it will add 2 digits
// when the string prefix is "625" through "999", and one fewer digit
// if the string prefix is "000" through "624".
//
// Credit for this trick goes to Ken.

type leftCheat struct {
	delta  int    // number of new digits
	cutoff string // minus one digit if original < a.
}

var leftcheats = []leftCheat{
	// Leading digits of 1/2^i = 5^i.
	// 5^23 is not an exact 64-bit floating point number,
	// so have to use bc for the math.
	// Go up to 60 to be large enough for 32bit and 64bit platforms.
	/*
		seq 60 | sed 's/^/5^/' | bc |
		awk 'BEGIN{ print "\t{ 0, \"\" }," }
		{
			log2 = log(2)/log(10)
			printf("\t{ %d, \"%s\" },\t// * %d\n",
				int(log2*NR+1), $0, 2**NR)
		}'
	*/
	{0, ""},
	{1, "5"},                                           // * 2
	{1, "25"},                                          // * 4
	{1, "125"},                                         // * 8
	{2, "625"},                                         // * 16
	{2, "3125"},                                        // * 32
	{2, "15625"},                                       // * 64
	{3, "78125"},                                       // * 128
	{3, "390625"},                                      // * 256
	{3, "1953125"},                                     // * 512
	{4, "9765625"},                                     // * 1024
	{4, "48828125"},                                    // * 2048
	{4, "244140625"},                                   // * 4096
	{4, "1220703125"},                                  // * 8192
	{5, "6103515625"},                                  // * 16384
	{5, "30517578125"},                                 // * 32768
	{5, "152587890625"},                                // * 65536
	{6, "762939453125"},                                // * 131072
	{6, "3814697265625"},                               // * 262144
	{6, "19073486328125"},                              // * 524288
	{7, "95367431640625"},                              // * 1048576
	{7, "476837158203125"},                             // * 2097152
	{7, "2384185791015625"},                            // * 4194304
	{7, "11920928955078125"},                           // * 8388608
	{8, "59604644775390625"},                           // * 16777216
	{8, "298023223876953125"},                          // * 33554432
	{8, "1490116119384765625"},                         // * 67108864
	{9, "7450580596923828125"},                         // * 134217728
	{9, "37252902984619140625"},                        // * 268435456
	{9, "186264514923095703125"},                       // * 536870912
	{10, "931322574615478515625"},                      // * 1073741824
	{10, "4656612873077392578125"},                     // * 2147483648
	{10, "23283064365386962890625"},                    // * 4294967296
	{10, "116415321826934814453125"},                   // * 8589934592
	{11, "582076609134674072265625"},                   // * 17179869184
	{11, "2910383045673370361328125"},                  // * 34359738368
	{11, "14551915228366851806640625"},                 // * 68719476736
	{12, "72759576141834259033203125"},                 // * 137438953472
	{12, "363797880709171295166015625"},                // * 274877906944
	{12, "1818989403545856475830078125"},               // * 549755813888
	{13, "9094947017729282379150390625"},               // * 1099511627776
	{13, "45474735088646411895751953125"},              // * 2199023255552
	{13, "227373675443232059478759765625"},             // * 4398046511104
	{13, "1136868377216160297393798828125"},            // * 8796093022208
	{14, "5684341886080801486968994140625"},            // * 17592186044416
	{14, "28421709430404007434844970703125"},           // * 35184372088832
	{14, "142108547152020037174224853515625"},          // * 70368744177664
	{15, "710542735760100185871124267578125"},          // * 140737488355328
	{15, "3552713678800500929355621337890625"},         // * 281474976710656
	{15, "17763568394002504646778106689453125"},        // * 562949953421312
	{16, "88817841970012523233890533447265625"},        // * 1125899906842624
	{16, "444089209850062616169452667236328125"},       // * 2251799813685248
	{16, "2220446049250313080847263336181640625"},      // * 4503599627370496
	{16, "11102230246251565404236316680908203125"},     // * 9007199254740992
	{17, "55511151231257827021181583404541015625"},     // * 18014398509481984
	{17, "277555756156289135105907917022705078125"},    // * 36028797018963968
	{17, "1387778780781445675529539585113525390625"},   // * 72057594037927936
	{18, "6938893903907228377647697925567626953125"},   // * 144115188075855872
	{18, "34694469519536141888238489627838134765625"},  // * 288230376151711744
	{18, "173472347597680709441192448139190673828125"}, // * 576460752303423488
	{19, "867361737988403547205962240695953369140625"}, // * 1152921504606846976
}

// Is the leading prefix of b lexicographically less than s?
func prefixIsLessThan(b []byte, s string) bool {
	for i := 0; i < len(s); i++ {
		if i >= len(b) {
			return true
		}
		if b[i] != s[i] {
			return b[i] < s[i]
		}
	}
	return false
}

// Binary shift left (* 2) by k bits.  k <= maxShift to avoid overflow.
func leftShift(a *decimal, k uint) {
	delta := leftcheats[k].delta
	if prefixIsLessThan(a.d[0:a.nd], leftcheats[k].cutoff) {
		delta--
	}

	r := a.nd         // read index
	w := a.nd + delta // write index

	// Pick up a digit, put down a digit.
	var n uint
	for r--; r >= 0; r-- {
		n += (uint(a.d[r]) - '0') << k
		quo := n / 10
		rem := n - 10*quo
		w--
		if w < len(a.d) {
			a.d[w] = byte(rem + '0')
		} else if rem != 0 {
			a.trunc = true
		}
		n = quo
	}

	// Put down extra digits.
	for n > 0 {
		quo := n / 10
		rem := n - 10*quo
		w--
		if w < len(a.d) {
			a.d[w] = byte(rem + '0')
		} else if rem != 0 {
			a.trunc = true
		}
		n = quo
	}

	a.nd += delta
	if a.nd >= len(a.d) {
		a.nd = len(a.d)
	}
	a.dp += delta
	trim(a)
}

// Binary shift left (k > 0) or right (k < 0).
func (a *decimal) Shift(k int) {
	switch {
	case a.nd == 0:
		// nothing to do: a == 0
	case k > 0:
		for k > maxShift {
			leftShift(a, maxShift)
			k -= maxShift
		}
		leftShift(a, uint(k))
	case k < 0:
		for k < -maxShift {
			rightShift(a, maxShift)
			k += maxShift
		}
		rightShift(a, uint(-k))
	}
}

// If we chop a at nd digits, should we round up?
func shouldRoundUp(a *decimal, nd int) bool {
	if nd < 0 || nd >= a.nd {
		return false
	}
	if a.d[nd] == '5' && nd+1 == a.nd { // exactly halfway - round to even
		// if we truncated, a little higher than what's recorded - always round up
		if a.trunc {
			return true
		}
		return nd > 0 && (a.d[nd-1]-'0')%2 != 0
	}
	// not halfway - digit tells all
	return a.d[nd] >= '5'
}

// Round a to nd digits (or fewer).
// If nd is zero, it means we're rounding
// just to the left of the digits, as in
// 0.09 -> 0.1.
func (a *decimal) Round(nd int) {
	if nd < 0 || nd >= a.nd {
		return
	}
	if shouldRoundUp(a, nd) {
		a.RoundUp(nd)
	} else {
		a.RoundDown(nd)
	}
}

// Round a down to nd digits (or fewer).
func (a *decimal) RoundDown(nd int) {
	if nd < 0 || nd >= a.nd {
		return
	}
	a.nd = nd
	trim(a)
}

// Round a up to nd digits (or fewer).
func (a *decimal) RoundUp(nd int) {
	if nd < 0 || nd >= a.nd {
		return
	}

	// round up
	for i := nd - 1; i >= 0; i-- {
		c := a.d[i]
		if c < '9' { // can stop after this digit
			a.d[i]++
			a.nd = i + 1
			return
		}
	}

	// Number is all 9s.
	// Change to single 1 with adjusted decimal point.
	a.d[0] = '1'
	a.nd = 1
	a.dp++
}

// Extract integer part, rounded appropriately.
// No guarantees about overflow.
func (a *decimal) RoundedInteger() uint64 {
	if a.dp > 20 {
		return 0xFFFFFFFFFFFFFFFF
	}
	var i int
	n := uint64(0)
	for i = 0; i < a.dp && i < a.nd; i++ {
		n = n*10 + uint64(a.d[i]-'0')
	}
	for ; i < a.dp; i++ {
		n *= 10
	}
	if shouldRoundUp(a, a.dp) {
		n++
	}
	return n
}
 07070100000AC3000081A4000000000000000000000001645E367C0000CB7B000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/shopspring/decimal/decimal.go   // Package decimal implements an arbitrary precision fixed-point decimal.
//
// The zero-value of a Decimal is 0, as you would expect.
//
// The best way to create a new Decimal is to use decimal.NewFromString, ex:
//
//     n, err := decimal.NewFromString("-123.4567")
//     n.String() // output: "-123.4567"
//
// To use Decimal as part of a struct:
//
//     type Struct struct {
//         Number Decimal
//     }
//
// Note: This can "only" represent numbers with a maximum of 2^31 digits after the decimal point.
package decimal

import (
	"database/sql/driver"
	"encoding/binary"
	"fmt"
	"math"
	"math/big"
	"regexp"
	"strconv"
	"strings"
)

// DivisionPrecision is the number of decimal places in the result when it
// doesn't divide exactly.
//
// Example:
//
//     d1 := decimal.NewFromFloat(2).Div(decimal.NewFromFloat(3))
//     d1.String() // output: "0.6666666666666667"
//     d2 := decimal.NewFromFloat(2).Div(decimal.NewFromFloat(30000))
//     d2.String() // output: "0.0000666666666667"
//     d3 := decimal.NewFromFloat(20000).Div(decimal.NewFromFloat(3))
//     d3.String() // output: "6666.6666666666666667"
//     decimal.DivisionPrecision = 3
//     d4 := decimal.NewFromFloat(2).Div(decimal.NewFromFloat(3))
//     d4.String() // output: "0.667"
//
var DivisionPrecision = 16

// MarshalJSONWithoutQuotes should be set to true if you want the decimal to
// be JSON marshaled as a number, instead of as a string.
// WARNING: this is dangerous for decimals with many digits, since many JSON
// unmarshallers (ex: Javascript's) will unmarshal JSON numbers to IEEE 754
// double-precision floating point numbers, which means you can potentially
// silently lose precision.
var MarshalJSONWithoutQuotes = false

// ExpMaxIterations specifies the maximum number of iterations needed to calculate
// precise natural exponent value using ExpHullAbrham method.
var ExpMaxIterations = 1000

// Zero constant, to make computations faster.
// Zero should never be compared with == or != directly, please use decimal.Equal or decimal.Cmp instead.
var Zero = New(0, 1)

var zeroInt = big.NewInt(0)
var oneInt = big.NewInt(1)
var twoInt = big.NewInt(2)
var fourInt = big.NewInt(4)
var fiveInt = big.NewInt(5)
var tenInt = big.NewInt(10)
var twentyInt = big.NewInt(20)

var factorials = []Decimal{New(1, 0)}

// Decimal represents a fixed-point decimal. It is immutable.
// number = value * 10 ^ exp
type Decimal struct {
	value *big.Int

	// NOTE(vadim): this must be an int32, because we cast it to float64 during
	// calculations. If exp is 64 bit, we might lose precision.
	// If we cared about being able to represent every possible decimal, we
	// could make exp a *big.Int but it would hurt performance and numbers
	// like that are unrealistic.
	exp int32
}

// New returns a new fixed-point decimal, value * 10 ^ exp.
func New(value int64, exp int32) Decimal {
	return Decimal{
		value: big.NewInt(value),
		exp:   exp,
	}
}

// NewFromInt converts a int64 to Decimal.
//
// Example:
//
//     NewFromInt(123).String() // output: "123"
//     NewFromInt(-10).String() // output: "-10"
func NewFromInt(value int64) Decimal {
	return Decimal{
		value: big.NewInt(value),
		exp:   0,
	}
}

// NewFromInt32 converts a int32 to Decimal.
//
// Example:
//
//     NewFromInt(123).String() // output: "123"
//     NewFromInt(-10).String() // output: "-10"
func NewFromInt32(value int32) Decimal {
	return Decimal{
		value: big.NewInt(int64(value)),
		exp:   0,
	}
}

// NewFromBigInt returns a new Decimal from a big.Int, value * 10 ^ exp
func NewFromBigInt(value *big.Int, exp int32) Decimal {
	return Decimal{
		value: new(big.Int).Set(value),
		exp:   exp,
	}
}

// NewFromString returns a new Decimal from a string representation.
// Trailing zeroes are not trimmed.
//
// Example:
//
//     d, err := NewFromString("-123.45")
//     d2, err := NewFromString(".0001")
//     d3, err := NewFromString("1.47000")
//
func NewFromString(value string) (Decimal, error) {
	originalInput := value
	var intString string
	var exp int64

	// Check if number is using scientific notation
	eIndex := strings.IndexAny(value, "Ee")
	if eIndex != -1 {
		expInt, err := strconv.ParseInt(value[eIndex+1:], 10, 32)
		if err != nil {
			if e, ok := err.(*strconv.NumError); ok && e.Err == strconv.ErrRange {
				return Decimal{}, fmt.Errorf("can't convert %s to decimal: fractional part too long", value)
			}
			return Decimal{}, fmt.Errorf("can't convert %s to decimal: exponent is not numeric", value)
		}
		value = value[:eIndex]
		exp = expInt
	}

	pIndex := -1
	vLen := len(value)
	for i := 0; i < vLen; i++ {
		if value[i] == '.' {
			if pIndex > -1 {
				return Decimal{}, fmt.Errorf("can't convert %s to decimal: too many .s", value)
			}
			pIndex = i
		}
	}

	if pIndex == -1 {
		// There is no decimal point, we can just parse the original string as
		// an int
		intString = value
	} else {
		if pIndex+1 < vLen {
			intString = value[:pIndex] + value[pIndex+1:]
		} else {
			intString = value[:pIndex]
		}
		expInt := -len(value[pIndex+1:])
		exp += int64(expInt)
	}

	var dValue *big.Int
	// strconv.ParseInt is faster than new(big.Int).SetString so this is just a shortcut for strings we know won't overflow
	if len(intString) <= 18 {
		parsed64, err := strconv.ParseInt(intString, 10, 64)
		if err != nil {
			return Decimal{}, fmt.Errorf("can't convert %s to decimal", value)
		}
		dValue = big.NewInt(parsed64)
	} else {
		dValue = new(big.Int)
		_, ok := dValue.SetString(intString, 10)
		if !ok {
			return Decimal{}, fmt.Errorf("can't convert %s to decimal", value)
		}
	}

	if exp < math.MinInt32 || exp > math.MaxInt32 {
		// NOTE(vadim): I doubt a string could realistically be this long
		return Decimal{}, fmt.Errorf("can't convert %s to decimal: fractional part too long", originalInput)
	}

	return Decimal{
		value: dValue,
		exp:   int32(exp),
	}, nil
}

// NewFromFormattedString returns a new Decimal from a formatted string representation.
// The second argument - replRegexp, is a regular expression that is used to find characters that should be
// removed from given decimal string representation. All matched characters will be replaced with an empty string.
//
// Example:
//
//     r := regexp.MustCompile("[$,]")
//     d1, err := NewFromFormattedString("$5,125.99", r)
//
//     r2 := regexp.MustCompile("[_]")
//     d2, err := NewFromFormattedString("1_000_000", r2)
//
//     r3 := regexp.MustCompile("[USD\\s]")
//     d3, err := NewFromFormattedString("5000 USD", r3)
//
func NewFromFormattedString(value string, replRegexp *regexp.Regexp) (Decimal, error) {
	parsedValue := replRegexp.ReplaceAllString(value, "")
	d, err := NewFromString(parsedValue)
	if err != nil {
		return Decimal{}, err
	}
	return d, nil
}

// RequireFromString returns a new Decimal from a string representation
// or panics if NewFromString would have returned an error.
//
// Example:
//
//     d := RequireFromString("-123.45")
//     d2 := RequireFromString(".0001")
//
func RequireFromString(value string) Decimal {
	dec, err := NewFromString(value)
	if err != nil {
		panic(err)
	}
	return dec
}

// NewFromFloat converts a float64 to Decimal.
//
// The converted number will contain the number of significant digits that can be
// represented in a float with reliable roundtrip.
// This is typically 15 digits, but may be more in some cases.
// See https://www.exploringbinary.com/decimal-precision-of-binary-floating-point-numbers/ for more information.
//
// For slightly faster conversion, use NewFromFloatWithExponent where you can specify the precision in absolute terms.
//
// NOTE: this will panic on NaN, +/-inf
func NewFromFloat(value float64) Decimal {
	if value == 0 {
		return New(0, 0)
	}
	return newFromFloat(value, math.Float64bits(value), &float64info)
}

// NewFromFloat32 converts a float32 to Decimal.
//
// The converted number will contain the number of significant digits that can be
// represented in a float with reliable roundtrip.
// This is typically 6-8 digits depending on the input.
// See https://www.exploringbinary.com/decimal-precision-of-binary-floating-point-numbers/ for more information.
//
// For slightly faster conversion, use NewFromFloatWithExponent where you can specify the precision in absolute terms.
//
// NOTE: this will panic on NaN, +/-inf
func NewFromFloat32(value float32) Decimal {
	if value == 0 {
		return New(0, 0)
	}
	// XOR is workaround for https://github.com/golang/go/issues/26285
	a := math.Float32bits(value) ^ 0x80808080
	return newFromFloat(float64(value), uint64(a)^0x80808080, &float32info)
}

func newFromFloat(val float64, bits uint64, flt *floatInfo) Decimal {
	if math.IsNaN(val) || math.IsInf(val, 0) {
		panic(fmt.Sprintf("Cannot create a Decimal from %v", val))
	}
	exp := int(bits>>flt.mantbits) & (1<<flt.expbits - 1)
	mant := bits & (uint64(1)<<flt.mantbits - 1)

	switch exp {
	case 0:
		// denormalized
		exp++

	default:
		// add implicit top bit
		mant |= uint64(1) << flt.mantbits
	}
	exp += flt.bias

	var d decimal
	d.Assign(mant)
	d.Shift(exp - int(flt.mantbits))
	d.neg = bits>>(flt.expbits+flt.mantbits) != 0

	roundShortest(&d, mant, exp, flt)
	// If less than 19 digits, we can do calculation in an int64.
	if d.nd < 19 {
		tmp := int64(0)
		m := int64(1)
		for i := d.nd - 1; i >= 0; i-- {
			tmp += m * int64(d.d[i]-'0')
			m *= 10
		}
		if d.neg {
			tmp *= -1
		}
		return Decimal{value: big.NewInt(tmp), exp: int32(d.dp) - int32(d.nd)}
	}
	dValue := new(big.Int)
	dValue, ok := dValue.SetString(string(d.d[:d.nd]), 10)
	if ok {
		return Decimal{value: dValue, exp: int32(d.dp) - int32(d.nd)}
	}

	return NewFromFloatWithExponent(val, int32(d.dp)-int32(d.nd))
}

// NewFromFloatWithExponent converts a float64 to Decimal, with an arbitrary
// number of fractional digits.
//
// Example:
//
//     NewFromFloatWithExponent(123.456, -2).String() // output: "123.46"
//
func NewFromFloatWithExponent(value float64, exp int32) Decimal {
	if math.IsNaN(value) || math.IsInf(value, 0) {
		panic(fmt.Sprintf("Cannot create a Decimal from %v", value))
	}

	bits := math.Float64bits(value)
	mant := bits & (1<<52 - 1)
	exp2 := int32((bits >> 52) & (1<<11 - 1))
	sign := bits >> 63

	if exp2 == 0 {
		// specials
		if mant == 0 {
			return Decimal{}
		}
		// subnormal
		exp2++
	} else {
		// normal
		mant |= 1 << 52
	}

	exp2 -= 1023 + 52

	// normalizing base-2 values
	for mant&1 == 0 {
		mant = mant >> 1
		exp2++
	}

	// maximum number of fractional base-10 digits to represent 2^N exactly cannot be more than -N if N<0
	if exp < 0 && exp < exp2 {
		if exp2 < 0 {
			exp = exp2
		} else {
			exp = 0
		}
	}

	// representing 10^M * 2^N as 5^M * 2^(M+N)
	exp2 -= exp

	temp := big.NewInt(1)
	dMant := big.NewInt(int64(mant))

	// applying 5^M
	if exp > 0 {
		temp = temp.SetInt64(int64(exp))
		temp = temp.Exp(fiveInt, temp, nil)
	} else if exp < 0 {
		temp = temp.SetInt64(-int64(exp))
		temp = temp.Exp(fiveInt, temp, nil)
		dMant = dMant.Mul(dMant, temp)
		temp = temp.SetUint64(1)
	}

	// applying 2^(M+N)
	if exp2 > 0 {
		dMant = dMant.Lsh(dMant, uint(exp2))
	} else if exp2 < 0 {
		temp = temp.Lsh(temp, uint(-exp2))
	}

	// rounding and downscaling
	if exp > 0 || exp2 < 0 {
		halfDown := new(big.Int).Rsh(temp, 1)
		dMant = dMant.Add(dMant, halfDown)
		dMant = dMant.Quo(dMant, temp)
	}

	if sign == 1 {
		dMant = dMant.Neg(dMant)
	}

	return Decimal{
		value: dMant,
		exp:   exp,
	}
}

// Copy returns a copy of decimal with the same value and exponent, but a different pointer to value.
func (d Decimal) Copy() Decimal {
	d.ensureInitialized()
	return Decimal{
		value: &(*d.value),
		exp:   d.exp,
	}
}

// rescale returns a rescaled version of the decimal. Returned
// decimal may be less precise if the given exponent is bigger
// than the initial exponent of the Decimal.
// NOTE: this will truncate, NOT round
//
// Example:
//
// 	d := New(12345, -4)
//	d2 := d.rescale(-1)
//	d3 := d2.rescale(-4)
//	println(d1)
//	println(d2)
//	println(d3)
//
// Output:
//
//	1.2345
//	1.2
//	1.2000
//
func (d Decimal) rescale(exp int32) Decimal {
	d.ensureInitialized()

	if d.exp == exp {
		return Decimal{
			new(big.Int).Set(d.value),
			d.exp,
		}
	}

	// NOTE(vadim): must convert exps to float64 before - to prevent overflow
	diff := math.Abs(float64(exp) - float64(d.exp))
	value := new(big.Int).Set(d.value)

	expScale := new(big.Int).Exp(tenInt, big.NewInt(int64(diff)), nil)
	if exp > d.exp {
		value = value.Quo(value, expScale)
	} else if exp < d.exp {
		value = value.Mul(value, expScale)
	}

	return Decimal{
		value: value,
		exp:   exp,
	}
}

// Abs returns the absolute value of the decimal.
func (d Decimal) Abs() Decimal {
	if !d.IsNegative() {
		return d
	}
	d.ensureInitialized()
	d2Value := new(big.Int).Abs(d.value)
	return Decimal{
		value: d2Value,
		exp:   d.exp,
	}
}

// Add returns d + d2.
func (d Decimal) Add(d2 Decimal) Decimal {
	rd, rd2 := RescalePair(d, d2)

	d3Value := new(big.Int).Add(rd.value, rd2.value)
	return Decimal{
		value: d3Value,
		exp:   rd.exp,
	}
}

// Sub returns d - d2.
func (d Decimal) Sub(d2 Decimal) Decimal {
	rd, rd2 := RescalePair(d, d2)

	d3Value := new(big.Int).Sub(rd.value, rd2.value)
	return Decimal{
		value: d3Value,
		exp:   rd.exp,
	}
}

// Neg returns -d.
func (d Decimal) Neg() Decimal {
	d.ensureInitialized()
	val := new(big.Int).Neg(d.value)
	return Decimal{
		value: val,
		exp:   d.exp,
	}
}

// Mul returns d * d2.
func (d Decimal) Mul(d2 Decimal) Decimal {
	d.ensureInitialized()
	d2.ensureInitialized()

	expInt64 := int64(d.exp) + int64(d2.exp)
	if expInt64 > math.MaxInt32 || expInt64 < math.MinInt32 {
		// NOTE(vadim): better to panic than give incorrect results, as
		// Decimals are usually used for money
		panic(fmt.Sprintf("exponent %v overflows an int32!", expInt64))
	}

	d3Value := new(big.Int).Mul(d.value, d2.value)
	return Decimal{
		value: d3Value,
		exp:   int32(expInt64),
	}
}

// Shift shifts the decimal in base 10.
// It shifts left when shift is positive and right if shift is negative.
// In simpler terms, the given value for shift is added to the exponent
// of the decimal.
func (d Decimal) Shift(shift int32) Decimal {
	d.ensureInitialized()
	return Decimal{
		value: new(big.Int).Set(d.value),
		exp:   d.exp + shift,
	}
}

// Div returns d / d2. If it doesn't divide exactly, the result will have
// DivisionPrecision digits after the decimal point.
func (d Decimal) Div(d2 Decimal) Decimal {
	return d.DivRound(d2, int32(DivisionPrecision))
}

// QuoRem does divsion with remainder
// d.QuoRem(d2,precision) returns quotient q and remainder r such that
//   d = d2 * q + r, q an integer multiple of 10^(-precision)
//   0 <= r < abs(d2) * 10 ^(-precision) if d>=0
//   0 >= r > -abs(d2) * 10 ^(-precision) if d<0
// Note that precision<0 is allowed as input.
func (d Decimal) QuoRem(d2 Decimal, precision int32) (Decimal, Decimal) {
	d.ensureInitialized()
	d2.ensureInitialized()
	if d2.value.Sign() == 0 {
		panic("decimal division by 0")
	}
	scale := -precision
	e := int64(d.exp - d2.exp - scale)
	if e > math.MaxInt32 || e < math.MinInt32 {
		panic("overflow in decimal QuoRem")
	}
	var aa, bb, expo big.Int
	var scalerest int32
	// d = a 10^ea
	// d2 = b 10^eb
	if e < 0 {
		aa = *d.value
		expo.SetInt64(-e)
		bb.Exp(tenInt, &expo, nil)
		bb.Mul(d2.value, &bb)
		scalerest = d.exp
		// now aa = a
		//     bb = b 10^(scale + eb - ea)
	} else {
		expo.SetInt64(e)
		aa.Exp(tenInt, &expo, nil)
		aa.Mul(d.value, &aa)
		bb = *d2.value
		scalerest = scale + d2.exp
		// now aa = a ^ (ea - eb - scale)
		//     bb = b
	}
	var q, r big.Int
	q.QuoRem(&aa, &bb, &r)
	dq := Decimal{value: &q, exp: scale}
	dr := Decimal{value: &r, exp: scalerest}
	return dq, dr
}

// DivRound divides and rounds to a given precision
// i.e. to an integer multiple of 10^(-precision)
//   for a positive quotient digit 5 is rounded up, away from 0
//   if the quotient is negative then digit 5 is rounded down, away from 0
// Note that precision<0 is allowed as input.
func (d Decimal) DivRound(d2 Decimal, precision int32) Decimal {
	// QuoRem already checks initialization
	q, r := d.QuoRem(d2, precision)
	// the actual rounding decision is based on comparing r*10^precision and d2/2
	// instead compare 2 r 10 ^precision and d2
	var rv2 big.Int
	rv2.Abs(r.value)
	rv2.Lsh(&rv2, 1)
	// now rv2 = abs(r.value) * 2
	r2 := Decimal{value: &rv2, exp: r.exp + precision}
	// r2 is now 2 * r * 10 ^ precision
	var c = r2.Cmp(d2.Abs())

	if c < 0 {
		return q
	}

	if d.value.Sign()*d2.value.Sign() < 0 {
		return q.Sub(New(1, -precision))
	}

	return q.Add(New(1, -precision))
}

// Mod returns d % d2.
func (d Decimal) Mod(d2 Decimal) Decimal {
	quo := d.Div(d2).Truncate(0)
	return d.Sub(d2.Mul(quo))
}

// Pow returns d to the power d2
func (d Decimal) Pow(d2 Decimal) Decimal {
	var temp Decimal
	if d2.IntPart() == 0 {
		return NewFromFloat(1)
	}
	temp = d.Pow(d2.Div(NewFromFloat(2)))
	if d2.IntPart()%2 == 0 {
		return temp.Mul(temp)
	}
	if d2.IntPart() > 0 {
		return temp.Mul(temp).Mul(d)
	}
	return temp.Mul(temp).Div(d)
}

// ExpHullAbrham calculates the natural exponent of decimal (e to the power of d) using Hull-Abraham algorithm.
// OverallPrecision argument specifies the overall precision of the result (integer part + decimal part).
//
// ExpHullAbrham is faster than ExpTaylor for small precision values, but it is much slower for large precision values.
//
// Example:
//
//     NewFromFloat(26.1).ExpHullAbrham(2).String()    // output: "220000000000"
//     NewFromFloat(26.1).ExpHullAbrham(20).String()   // output: "216314672147.05767284"
//
func (d Decimal) ExpHullAbrham(overallPrecision uint32) (Decimal, error) {
	// Algorithm based on Variable precision exponential function.
	// ACM Transactions on Mathematical Software by T. E. Hull & A. Abrham.
	if d.IsZero() {
		return Decimal{oneInt, 0}, nil
	}

	currentPrecision := overallPrecision

	// Algorithm does not work if currentPrecision * 23 < |x|.
	// Precision is automatically increased in such cases, so the value can be calculated precisely.
	// If newly calculated precision is higher than ExpMaxIterations the currentPrecision will not be changed.
	f := d.Abs().InexactFloat64()
	if ncp := f / 23; ncp > float64(currentPrecision) && ncp < float64(ExpMaxIterations) {
		currentPrecision = uint32(math.Ceil(ncp))
	}

	// fail if abs(d) beyond an over/underflow threshold
	overflowThreshold := New(23*int64(currentPrecision), 0)
	if d.Abs().Cmp(overflowThreshold) > 0 {
		return Decimal{}, fmt.Errorf("over/underflow threshold, exp(x) cannot be calculated precisely")
	}

	// Return 1 if abs(d) small enough; this also avoids later over/underflow
	overflowThreshold2 := New(9, -int32(currentPrecision)-1)
	if d.Abs().Cmp(overflowThreshold2) <= 0 {
		return Decimal{oneInt, d.exp}, nil
	}

	// t is the smallest integer >= 0 such that the corresponding abs(d/k) < 1
	t := d.exp + int32(d.NumDigits()) // Add d.NumDigits because the paper assumes that d.value [0.1, 1)

	if t < 0 {
		t = 0
	}

	k := New(1, t)                                     // reduction factor
	r := Decimal{new(big.Int).Set(d.value), d.exp - t} // reduced argument
	p := int32(currentPrecision) + t + 2               // precision for calculating the sum

	// Determine n, the number of therms for calculating sum
	// use first Newton step (1.435p - 1.182) / log10(p/abs(r))
	// for solving appropriate equation, along with directed
	// roundings and simple rational bound for log10(p/abs(r))
	rf := r.Abs().InexactFloat64()
	pf := float64(p)
	nf := math.Ceil((1.453*pf - 1.182) / math.Log10(pf/rf))
	if nf > float64(ExpMaxIterations) || math.IsNaN(nf) {
		return Decimal{}, fmt.Errorf("exact value cannot be calculated in <=ExpMaxIterations iterations")
	}
	n := int64(nf)

	tmp := New(0, 0)
	sum := New(1, 0)
	one := New(1, 0)
	for i := n - 1; i > 0; i-- {
		tmp.value.SetInt64(i)
		sum = sum.Mul(r.DivRound(tmp, p))
		sum = sum.Add(one)
	}

	ki := k.IntPart()
	res := New(1, 0)
	for i := ki; i > 0; i-- {
		res = res.Mul(sum)
	}

	resNumDigits := int32(res.NumDigits())

	var roundDigits int32
	if resNumDigits > abs(res.exp) {
		roundDigits = int32(currentPrecision) - resNumDigits - res.exp
	} else {
		roundDigits = int32(currentPrecision)
	}

	res = res.Round(roundDigits)

	return res, nil
}

// ExpTaylor calculates the natural exponent of decimal (e to the power of d) using Taylor series expansion.
// Precision argument specifies how precise the result must be (number of digits after decimal point).
// Negative precision is allowed.
//
// ExpTaylor is much faster for large precision values than ExpHullAbrham.
//
// Example:
//
//     d, err := NewFromFloat(26.1).ExpTaylor(2).String()
//     d.String()  // output: "216314672147.06"
//
//     NewFromFloat(26.1).ExpTaylor(20).String()
//     d.String()  // output: "216314672147.05767284062928674083"
//
//     NewFromFloat(26.1).ExpTaylor(-10).String()
//     d.String()  // output: "220000000000"
//
func (d Decimal) ExpTaylor(precision int32) (Decimal, error) {
	// Note(mwoss): Implementation can be optimized by exclusively using big.Int API only
	if d.IsZero() {
		return Decimal{oneInt, 0}.Round(precision), nil
	}

	var epsilon Decimal
	var divPrecision int32
	if precision < 0 {
		epsilon = New(1, -1)
		divPrecision = 8
	} else {
		epsilon = New(1, -precision-1)
		divPrecision = precision + 1
	}

	decAbs := d.Abs()
	pow := d.Abs()
	factorial := New(1, 0)

	result := New(1, 0)

	for i := int64(1); ; {
		step := pow.DivRound(factorial, divPrecision)
		result = result.Add(step)

		// Stop Taylor series when current step is smaller than epsilon
		if step.Cmp(epsilon) < 0 {
			break
		}

		pow = pow.Mul(decAbs)

		i++

		// Calculate next factorial number or retrieve cached value
		if len(factorials) >= int(i) && !factorials[i-1].IsZero() {
			factorial = factorials[i-1]
		} else {
			// To avoid any race conditions, firstly the zero value is appended to a slice to create
			// a spot for newly calculated factorial. After that, the zero value is replaced by calculated
			// factorial using the index notation.
			factorial = factorials[i-2].Mul(New(i, 0))
			factorials = append(factorials, Zero)
			factorials[i-1] = factorial
		}
	}

	if d.Sign() < 0 {
		result = New(1, 0).DivRound(result, precision+1)
	}

	result = result.Round(precision)
	return result, nil
}

// NumDigits returns the number of digits of the decimal coefficient (d.Value)
// Note: Current implementation is extremely slow for large decimals and/or decimals with large fractional part
func (d Decimal) NumDigits() int {
	// Note(mwoss): It can be optimized, unnecessary cast of big.Int to string
	if d.IsNegative() {
		return len(d.value.String()) - 1
	}
	return len(d.value.String())
}

// IsInteger returns true when decimal can be represented as an integer value, otherwise, it returns false.
func (d Decimal) IsInteger() bool {
	// The most typical case, all decimal with exponent higher or equal 0 can be represented as integer
	if d.exp >= 0 {
		return true
	}
	// When the exponent is negative we have to check every number after the decimal place
	// If all of them are zeroes, we are sure that given decimal can be represented as an integer
	var r big.Int
	q := new(big.Int).Set(d.value)
	for z := abs(d.exp); z > 0; z-- {
		q.QuoRem(q, tenInt, &r)
		if r.Cmp(zeroInt) != 0 {
			return false
		}
	}
	return true
}

// Abs calculates absolute value of any int32. Used for calculating absolute value of decimal's exponent.
func abs(n int32) int32 {
	if n < 0 {
		return -n
	}
	return n
}

// Cmp compares the numbers represented by d and d2 and returns:
//
//     -1 if d <  d2
//      0 if d == d2
//     +1 if d >  d2
//
func (d Decimal) Cmp(d2 Decimal) int {
	d.ensureInitialized()
	d2.ensureInitialized()

	if d.exp == d2.exp {
		return d.value.Cmp(d2.value)
	}

	rd, rd2 := RescalePair(d, d2)

	return rd.value.Cmp(rd2.value)
}

// Equal returns whether the numbers represented by d and d2 are equal.
func (d Decimal) Equal(d2 Decimal) bool {
	return d.Cmp(d2) == 0
}

// Equals is deprecated, please use Equal method instead
func (d Decimal) Equals(d2 Decimal) bool {
	return d.Equal(d2)
}

// GreaterThan (GT) returns true when d is greater than d2.
func (d Decimal) GreaterThan(d2 Decimal) bool {
	return d.Cmp(d2) == 1
}

// GreaterThanOrEqual (GTE) returns true when d is greater than or equal to d2.
func (d Decimal) GreaterThanOrEqual(d2 Decimal) bool {
	cmp := d.Cmp(d2)
	return cmp == 1 || cmp == 0
}

// LessThan (LT) returns true when d is less than d2.
func (d Decimal) LessThan(d2 Decimal) bool {
	return d.Cmp(d2) == -1
}

// LessThanOrEqual (LTE) returns true when d is less than or equal to d2.
func (d Decimal) LessThanOrEqual(d2 Decimal) bool {
	cmp := d.Cmp(d2)
	return cmp == -1 || cmp == 0
}

// Sign returns:
//
//	-1 if d <  0
//	 0 if d == 0
//	+1 if d >  0
//
func (d Decimal) Sign() int {
	if d.value == nil {
		return 0
	}
	return d.value.Sign()
}

// IsPositive return
//
//	true if d > 0
//	false if d == 0
//	false if d < 0
func (d Decimal) IsPositive() bool {
	return d.Sign() == 1
}

// IsNegative return
//
//	true if d < 0
//	false if d == 0
//	false if d > 0
func (d Decimal) IsNegative() bool {
	return d.Sign() == -1
}

// IsZero return
//
//	true if d == 0
//	false if d > 0
//	false if d < 0
func (d Decimal) IsZero() bool {
	return d.Sign() == 0
}

// Exponent returns the exponent, or scale component of the decimal.
func (d Decimal) Exponent() int32 {
	return d.exp
}

// Coefficient returns the coefficient of the decimal. It is scaled by 10^Exponent()
func (d Decimal) Coefficient() *big.Int {
	d.ensureInitialized()
	// we copy the coefficient so that mutating the result does not mutate the Decimal.
	return new(big.Int).Set(d.value)
}

// CoefficientInt64 returns the coefficient of the decimal as int64. It is scaled by 10^Exponent()
// If coefficient cannot be represented in an int64, the result will be undefined.
func (d Decimal) CoefficientInt64() int64 {
	d.ensureInitialized()
	return d.value.Int64()
}

// IntPart returns the integer component of the decimal.
func (d Decimal) IntPart() int64 {
	scaledD := d.rescale(0)
	return scaledD.value.Int64()
}

// BigInt returns integer component of the decimal as a BigInt.
func (d Decimal) BigInt() *big.Int {
	scaledD := d.rescale(0)
	i := &big.Int{}
	i.SetString(scaledD.String(), 10)
	return i
}

// BigFloat returns decimal as BigFloat.
// Be aware that casting decimal to BigFloat might cause a loss of precision.
func (d Decimal) BigFloat() *big.Float {
	f := &big.Float{}
	f.SetString(d.String())
	return f
}

// Rat returns a rational number representation of the decimal.
func (d Decimal) Rat() *big.Rat {
	d.ensureInitialized()
	if d.exp <= 0 {
		// NOTE(vadim): must negate after casting to prevent int32 overflow
		denom := new(big.Int).Exp(tenInt, big.NewInt(-int64(d.exp)), nil)
		return new(big.Rat).SetFrac(d.value, denom)
	}

	mul := new(big.Int).Exp(tenInt, big.NewInt(int64(d.exp)), nil)
	num := new(big.Int).Mul(d.value, mul)
	return new(big.Rat).SetFrac(num, oneInt)
}

// Float64 returns the nearest float64 value for d and a bool indicating
// whether f represents d exactly.
// For more details, see the documentation for big.Rat.Float64
func (d Decimal) Float64() (f float64, exact bool) {
	return d.Rat().Float64()
}

// InexactFloat64 returns the nearest float64 value for d.
// It doesn't indicate if the returned value represents d exactly.
func (d Decimal) InexactFloat64() float64 {
	f, _ := d.Float64()
	return f
}

// String returns the string representation of the decimal
// with the fixed point.
//
// Example:
//
//     d := New(-12345, -3)
//     println(d.String())
//
// Output:
//
//     -12.345
//
func (d Decimal) String() string {
	return d.string(true)
}

// StringFixed returns a rounded fixed-point string with places digits after
// the decimal point.
//
// Example:
//
// 	   NewFromFloat(0).StringFixed(2) // output: "0.00"
// 	   NewFromFloat(0).StringFixed(0) // output: "0"
// 	   NewFromFloat(5.45).StringFixed(0) // output: "5"
// 	   NewFromFloat(5.45).StringFixed(1) // output: "5.5"
// 	   NewFromFloat(5.45).StringFixed(2) // output: "5.45"
// 	   NewFromFloat(5.45).StringFixed(3) // output: "5.450"
// 	   NewFromFloat(545).StringFixed(-1) // output: "550"
//
func (d Decimal) StringFixed(places int32) string {
	rounded := d.Round(places)
	return rounded.string(false)
}

// StringFixedBank returns a banker rounded fixed-point string with places digits
// after the decimal point.
//
// Example:
//
// 	   NewFromFloat(0).StringFixedBank(2) // output: "0.00"
// 	   NewFromFloat(0).StringFixedBank(0) // output: "0"
// 	   NewFromFloat(5.45).StringFixedBank(0) // output: "5"
// 	   NewFromFloat(5.45).StringFixedBank(1) // output: "5.4"
// 	   NewFromFloat(5.45).StringFixedBank(2) // output: "5.45"
// 	   NewFromFloat(5.45).StringFixedBank(3) // output: "5.450"
// 	   NewFromFloat(545).StringFixedBank(-1) // output: "540"
//
func (d Decimal) StringFixedBank(places int32) string {
	rounded := d.RoundBank(places)
	return rounded.string(false)
}

// StringFixedCash returns a Swedish/Cash rounded fixed-point string. For
// more details see the documentation at function RoundCash.
func (d Decimal) StringFixedCash(interval uint8) string {
	rounded := d.RoundCash(interval)
	return rounded.string(false)
}

// Round rounds the decimal to places decimal places.
// If places < 0, it will round the integer part to the nearest 10^(-places).
//
// Example:
//
// 	   NewFromFloat(5.45).Round(1).String() // output: "5.5"
// 	   NewFromFloat(545).Round(-1).String() // output: "550"
//
func (d Decimal) Round(places int32) Decimal {
	if d.exp == -places {
		return d
	}
	// truncate to places + 1
	ret := d.rescale(-places - 1)

	// add sign(d) * 0.5
	if ret.value.Sign() < 0 {
		ret.value.Sub(ret.value, fiveInt)
	} else {
		ret.value.Add(ret.value, fiveInt)
	}

	// floor for positive numbers, ceil for negative numbers
	_, m := ret.value.DivMod(ret.value, tenInt, new(big.Int))
	ret.exp++
	if ret.value.Sign() < 0 && m.Cmp(zeroInt) != 0 {
		ret.value.Add(ret.value, oneInt)
	}

	return ret
}

// RoundCeil rounds the decimal towards +infinity.
//
// Example:
//
//     NewFromFloat(545).RoundCeil(-2).String()   // output: "600"
//     NewFromFloat(500).RoundCeil(-2).String()   // output: "500"
//     NewFromFloat(1.1001).RoundCeil(2).String() // output: "1.11"
//     NewFromFloat(-1.454).RoundCeil(1).String() // output: "-1.5"
//
func (d Decimal) RoundCeil(places int32) Decimal {
	if d.exp >= -places {
		return d
	}

	rescaled := d.rescale(-places)
	if d.Equal(rescaled) {
		return d
	}

	if d.value.Sign() > 0 {
		rescaled.value.Add(rescaled.value, oneInt)
	}

	return rescaled
}

// RoundFloor rounds the decimal towards -infinity.
//
// Example:
//
//     NewFromFloat(545).RoundFloor(-2).String()   // output: "500"
//     NewFromFloat(-500).RoundFloor(-2).String()   // output: "-500"
//     NewFromFloat(1.1001).RoundFloor(2).String() // output: "1.1"
//     NewFromFloat(-1.454).RoundFloor(1).String() // output: "-1.4"
//
func (d Decimal) RoundFloor(places int32) Decimal {
	if d.exp >= -places {
		return d
	}

	rescaled := d.rescale(-places)
	if d.Equal(rescaled) {
		return d
	}

	if d.value.Sign() < 0 {
		rescaled.value.Sub(rescaled.value, oneInt)
	}

	return rescaled
}

// RoundUp rounds the decimal away from zero.
//
// Example:
//
//     NewFromFloat(545).RoundUp(-2).String()   // output: "600"
//     NewFromFloat(500).RoundUp(-2).String()   // output: "500"
//     NewFromFloat(1.1001).RoundUp(2).String() // output: "1.11"
//     NewFromFloat(-1.454).RoundUp(1).String() // output: "-1.4"
//
func (d Decimal) RoundUp(places int32) Decimal {
	if d.exp >= -places {
		return d
	}

	rescaled := d.rescale(-places)
	if d.Equal(rescaled) {
		return d
	}

	if d.value.Sign() > 0 {
		rescaled.value.Add(rescaled.value, oneInt)
	} else if d.value.Sign() < 0 {
		rescaled.value.Sub(rescaled.value, oneInt)
	}

	return rescaled
}

// RoundDown rounds the decimal towards zero.
//
// Example:
//
//     NewFromFloat(545).RoundDown(-2).String()   // output: "500"
//     NewFromFloat(-500).RoundDown(-2).String()   // output: "-500"
//     NewFromFloat(1.1001).RoundDown(2).String() // output: "1.1"
//     NewFromFloat(-1.454).RoundDown(1).String() // output: "-1.5"
//
func (d Decimal) RoundDown(places int32) Decimal {
	if d.exp >= -places {
		return d
	}

	rescaled := d.rescale(-places)
	if d.Equal(rescaled) {
		return d
	}
	return rescaled
}

// RoundBank rounds the decimal to places decimal places.
// If the final digit to round is equidistant from the nearest two integers the
// rounded value is taken as the even number
//
// If places < 0, it will round the integer part to the nearest 10^(-places).
//
// Examples:
//
// 	   NewFromFloat(5.45).RoundBank(1).String() // output: "5.4"
// 	   NewFromFloat(545).RoundBank(-1).String() // output: "540"
// 	   NewFromFloat(5.46).RoundBank(1).String() // output: "5.5"
// 	   NewFromFloat(546).RoundBank(-1).String() // output: "550"
// 	   NewFromFloat(5.55).RoundBank(1).String() // output: "5.6"
// 	   NewFromFloat(555).RoundBank(-1).String() // output: "560"
//
func (d Decimal) RoundBank(places int32) Decimal {

	round := d.Round(places)
	remainder := d.Sub(round).Abs()

	half := New(5, -places-1)
	if remainder.Cmp(half) == 0 && round.value.Bit(0) != 0 {
		if round.value.Sign() < 0 {
			round.value.Add(round.value, oneInt)
		} else {
			round.value.Sub(round.value, oneInt)
		}
	}

	return round
}

// RoundCash aka Cash/Penny/öre rounding rounds decimal to a specific
// interval. The amount payable for a cash transaction is rounded to the nearest
// multiple of the minimum currency unit available. The following intervals are
// available: 5, 10, 25, 50 and 100; any other number throws a panic.
//	    5:   5 cent rounding 3.43 => 3.45
// 	   10:  10 cent rounding 3.45 => 3.50 (5 gets rounded up)
// 	   25:  25 cent rounding 3.41 => 3.50
// 	   50:  50 cent rounding 3.75 => 4.00
// 	  100: 100 cent rounding 3.50 => 4.00
// For more details: https://en.wikipedia.org/wiki/Cash_rounding
func (d Decimal) RoundCash(interval uint8) Decimal {
	var iVal *big.Int
	switch interval {
	case 5:
		iVal = twentyInt
	case 10:
		iVal = tenInt
	case 25:
		iVal = fourInt
	case 50:
		iVal = twoInt
	case 100:
		iVal = oneInt
	default:
		panic(fmt.Sprintf("Decimal does not support this Cash rounding interval `%d`. Supported: 5, 10, 25, 50, 100", interval))
	}
	dVal := Decimal{
		value: iVal,
	}

	// TODO: optimize those calculations to reduce the high allocations (~29 allocs).
	return d.Mul(dVal).Round(0).Div(dVal).Truncate(2)
}

// Floor returns the nearest integer value less than or equal to d.
func (d Decimal) Floor() Decimal {
	d.ensureInitialized()

	if d.exp >= 0 {
		return d
	}

	exp := big.NewInt(10)

	// NOTE(vadim): must negate after casting to prevent int32 overflow
	exp.Exp(exp, big.NewInt(-int64(d.exp)), nil)

	z := new(big.Int).Div(d.value, exp)
	return Decimal{value: z, exp: 0}
}

// Ceil returns the nearest integer value greater than or equal to d.
func (d Decimal) Ceil() Decimal {
	d.ensureInitialized()

	if d.exp >= 0 {
		return d
	}

	exp := big.NewInt(10)

	// NOTE(vadim): must negate after casting to prevent int32 overflow
	exp.Exp(exp, big.NewInt(-int64(d.exp)), nil)

	z, m := new(big.Int).DivMod(d.value, exp, new(big.Int))
	if m.Cmp(zeroInt) != 0 {
		z.Add(z, oneInt)
	}
	return Decimal{value: z, exp: 0}
}

// Truncate truncates off digits from the number, without rounding.
//
// NOTE: precision is the last digit that will not be truncated (must be >= 0).
//
// Example:
//
//     decimal.NewFromString("123.456").Truncate(2).String() // "123.45"
//
func (d Decimal) Truncate(precision int32) Decimal {
	d.ensureInitialized()
	if precision >= 0 && -precision > d.exp {
		return d.rescale(-precision)
	}
	return d
}

// UnmarshalJSON implements the json.Unmarshaler interface.
func (d *Decimal) UnmarshalJSON(decimalBytes []byte) error {
	if string(decimalBytes) == "null" {
		return nil
	}

	str, err := unquoteIfQuoted(decimalBytes)
	if err != nil {
		return fmt.Errorf("error decoding string '%s': %s", decimalBytes, err)
	}

	decimal, err := NewFromString(str)
	*d = decimal
	if err != nil {
		return fmt.Errorf("error decoding string '%s': %s", str, err)
	}
	return nil
}

// MarshalJSON implements the json.Marshaler interface.
func (d Decimal) MarshalJSON() ([]byte, error) {
	var str string
	if MarshalJSONWithoutQuotes {
		str = d.String()
	} else {
		str = "\"" + d.String() + "\""
	}
	return []byte(str), nil
}

// UnmarshalBinary implements the encoding.BinaryUnmarshaler interface. As a string representation
// is already used when encoding to text, this method stores that string as []byte
func (d *Decimal) UnmarshalBinary(data []byte) error {
	// Verify we have at least 4 bytes for the exponent. The GOB encoded value
	// may be empty.
	if len(data) < 4 {
		return fmt.Errorf("error decoding binary %v: expected at least 4 bytes, got %d", data, len(data))
	}

	// Extract the exponent
	d.exp = int32(binary.BigEndian.Uint32(data[:4]))

	// Extract the value
	d.value = new(big.Int)
	if err := d.value.GobDecode(data[4:]); err != nil {
		return fmt.Errorf("error decoding binary %v: %s", data, err)
	}

	return nil
}

// MarshalBinary implements the encoding.BinaryMarshaler interface.
func (d Decimal) MarshalBinary() (data []byte, err error) {
	// Write the exponent first since it's a fixed size
	v1 := make([]byte, 4)
	binary.BigEndian.PutUint32(v1, uint32(d.exp))

	// Add the value
	var v2 []byte
	if v2, err = d.value.GobEncode(); err != nil {
		return
	}

	// Return the byte array
	data = append(v1, v2...)
	return
}

// Scan implements the sql.Scanner interface for database deserialization.
func (d *Decimal) Scan(value interface{}) error {
	// first try to see if the data is stored in database as a Numeric datatype
	switch v := value.(type) {

	case float32:
		*d = NewFromFloat(float64(v))
		return nil

	case float64:
		// numeric in sqlite3 sends us float64
		*d = NewFromFloat(v)
		return nil

	case int64:
		// at least in sqlite3 when the value is 0 in db, the data is sent
		// to us as an int64 instead of a float64 ...
		*d = New(v, 0)
		return nil

	default:
		// default is trying to interpret value stored as string
		str, err := unquoteIfQuoted(v)
		if err != nil {
			return err
		}
		*d, err = NewFromString(str)
		return err
	}
}

// Value implements the driver.Valuer interface for database serialization.
func (d Decimal) Value() (driver.Value, error) {
	return d.String(), nil
}

// UnmarshalText implements the encoding.TextUnmarshaler interface for XML
// deserialization.
func (d *Decimal) UnmarshalText(text []byte) error {
	str := string(text)

	dec, err := NewFromString(str)
	*d = dec
	if err != nil {
		return fmt.Errorf("error decoding string '%s': %s", str, err)
	}

	return nil
}

// MarshalText implements the encoding.TextMarshaler interface for XML
// serialization.
func (d Decimal) MarshalText() (text []byte, err error) {
	return []byte(d.String()), nil
}

// GobEncode implements the gob.GobEncoder interface for gob serialization.
func (d Decimal) GobEncode() ([]byte, error) {
	return d.MarshalBinary()
}

// GobDecode implements the gob.GobDecoder interface for gob serialization.
func (d *Decimal) GobDecode(data []byte) error {
	return d.UnmarshalBinary(data)
}

// StringScaled first scales the decimal then calls .String() on it.
// NOTE: buggy, unintuitive, and DEPRECATED! Use StringFixed instead.
func (d Decimal) StringScaled(exp int32) string {
	return d.rescale(exp).String()
}

func (d Decimal) string(trimTrailingZeros bool) string {
	if d.exp >= 0 {
		return d.rescale(0).value.String()
	}

	abs := new(big.Int).Abs(d.value)
	str := abs.String()

	var intPart, fractionalPart string

	// NOTE(vadim): this cast to int will cause bugs if d.exp == INT_MIN
	// and you are on a 32-bit machine. Won't fix this super-edge case.
	dExpInt := int(d.exp)
	if len(str) > -dExpInt {
		intPart = str[:len(str)+dExpInt]
		fractionalPart = str[len(str)+dExpInt:]
	} else {
		intPart = "0"

		num0s := -dExpInt - len(str)
		fractionalPart = strings.Repeat("0", num0s) + str
	}

	if trimTrailingZeros {
		i := len(fractionalPart) - 1
		for ; i >= 0; i-- {
			if fractionalPart[i] != '0' {
				break
			}
		}
		fractionalPart = fractionalPart[:i+1]
	}

	number := intPart
	if len(fractionalPart) > 0 {
		number += "." + fractionalPart
	}

	if d.value.Sign() < 0 {
		return "-" + number
	}

	return number
}

func (d *Decimal) ensureInitialized() {
	if d.value == nil {
		d.value = new(big.Int)
	}
}

// Min returns the smallest Decimal that was passed in the arguments.
//
// To call this function with an array, you must do:
//
//     Min(arr[0], arr[1:]...)
//
// This makes it harder to accidentally call Min with 0 arguments.
func Min(first Decimal, rest ...Decimal) Decimal {
	ans := first
	for _, item := range rest {
		if item.Cmp(ans) < 0 {
			ans = item
		}
	}
	return ans
}

// Max returns the largest Decimal that was passed in the arguments.
//
// To call this function with an array, you must do:
//
//     Max(arr[0], arr[1:]...)
//
// This makes it harder to accidentally call Max with 0 arguments.
func Max(first Decimal, rest ...Decimal) Decimal {
	ans := first
	for _, item := range rest {
		if item.Cmp(ans) > 0 {
			ans = item
		}
	}
	return ans
}

// Sum returns the combined total of the provided first and rest Decimals
func Sum(first Decimal, rest ...Decimal) Decimal {
	total := first
	for _, item := range rest {
		total = total.Add(item)
	}

	return total
}

// Avg returns the average value of the provided first and rest Decimals
func Avg(first Decimal, rest ...Decimal) Decimal {
	count := New(int64(len(rest)+1), 0)
	sum := Sum(first, rest...)
	return sum.Div(count)
}

// RescalePair rescales two decimals to common exponential value (minimal exp of both decimals)
func RescalePair(d1 Decimal, d2 Decimal) (Decimal, Decimal) {
	d1.ensureInitialized()
	d2.ensureInitialized()

	if d1.exp == d2.exp {
		return d1, d2
	}

	baseScale := min(d1.exp, d2.exp)
	if baseScale != d1.exp {
		return d1.rescale(baseScale), d2
	}
	return d1, d2.rescale(baseScale)
}

func min(x, y int32) int32 {
	if x >= y {
		return y
	}
	return x
}

func unquoteIfQuoted(value interface{}) (string, error) {
	var bytes []byte

	switch v := value.(type) {
	case string:
		bytes = []byte(v)
	case []byte:
		bytes = v
	default:
		return "", fmt.Errorf("could not convert value '%+v' to byte array of type '%T'",
			value, value)
	}

	// If the amount is quoted, strip the quotes
	if len(bytes) > 2 && bytes[0] == '"' && bytes[len(bytes)-1] == '"' {
		bytes = bytes[1 : len(bytes)-1]
	}
	return string(bytes), nil
}

// NullDecimal represents a nullable decimal with compatibility for
// scanning null values from the database.
type NullDecimal struct {
	Decimal Decimal
	Valid   bool
}

func NewNullDecimal(d Decimal) NullDecimal {
	return NullDecimal{
		Decimal: d,
		Valid:   true,
	}
}

// Scan implements the sql.Scanner interface for database deserialization.
func (d *NullDecimal) Scan(value interface{}) error {
	if value == nil {
		d.Valid = false
		return nil
	}
	d.Valid = true
	return d.Decimal.Scan(value)
}

// Value implements the driver.Valuer interface for database serialization.
func (d NullDecimal) Value() (driver.Value, error) {
	if !d.Valid {
		return nil, nil
	}
	return d.Decimal.Value()
}

// UnmarshalJSON implements the json.Unmarshaler interface.
func (d *NullDecimal) UnmarshalJSON(decimalBytes []byte) error {
	if string(decimalBytes) == "null" {
		d.Valid = false
		return nil
	}
	d.Valid = true
	return d.Decimal.UnmarshalJSON(decimalBytes)
}

// MarshalJSON implements the json.Marshaler interface.
func (d NullDecimal) MarshalJSON() ([]byte, error) {
	if !d.Valid {
		return []byte("null"), nil
	}
	return d.Decimal.MarshalJSON()
}

// UnmarshalText implements the encoding.TextUnmarshaler interface for XML
// deserialization
func (d *NullDecimal) UnmarshalText(text []byte) error {
	str := string(text)

	// check for empty XML or XML without body e.g., <tag></tag>
	if str == "" {
		d.Valid = false
		return nil
	}
	if err := d.Decimal.UnmarshalText(text); err != nil {
		d.Valid = false
		return err
	}
	d.Valid = true
	return nil
}

// MarshalText implements the encoding.TextMarshaler interface for XML
// serialization.
func (d NullDecimal) MarshalText() (text []byte, err error) {
	if !d.Valid {
		return []byte{}, nil
	}
	return d.Decimal.MarshalText()
}

// Trig functions

// Atan returns the arctangent, in radians, of x.
func (d Decimal) Atan() Decimal {
	if d.Equal(NewFromFloat(0.0)) {
		return d
	}
	if d.GreaterThan(NewFromFloat(0.0)) {
		return d.satan()
	}
	return d.Neg().satan().Neg()
}

func (d Decimal) xatan() Decimal {
	P0 := NewFromFloat(-8.750608600031904122785e-01)
	P1 := NewFromFloat(-1.615753718733365076637e+01)
	P2 := NewFromFloat(-7.500855792314704667340e+01)
	P3 := NewFromFloat(-1.228866684490136173410e+02)
	P4 := NewFromFloat(-6.485021904942025371773e+01)
	Q0 := NewFromFloat(2.485846490142306297962e+01)
	Q1 := NewFromFloat(1.650270098316988542046e+02)
	Q2 := NewFromFloat(4.328810604912902668951e+02)
	Q3 := NewFromFloat(4.853903996359136964868e+02)
	Q4 := NewFromFloat(1.945506571482613964425e+02)
	z := d.Mul(d)
	b1 := P0.Mul(z).Add(P1).Mul(z).Add(P2).Mul(z).Add(P3).Mul(z).Add(P4).Mul(z)
	b2 := z.Add(Q0).Mul(z).Add(Q1).Mul(z).Add(Q2).Mul(z).Add(Q3).Mul(z).Add(Q4)
	z = b1.Div(b2)
	z = d.Mul(z).Add(d)
	return z
}

// satan reduces its argument (known to be positive)
// to the range [0, 0.66] and calls xatan.
func (d Decimal) satan() Decimal {
	Morebits := NewFromFloat(6.123233995736765886130e-17) // pi/2 = PIO2 + Morebits
	Tan3pio8 := NewFromFloat(2.41421356237309504880)      // tan(3*pi/8)
	pi := NewFromFloat(3.14159265358979323846264338327950288419716939937510582097494459)

	if d.LessThanOrEqual(NewFromFloat(0.66)) {
		return d.xatan()
	}
	if d.GreaterThan(Tan3pio8) {
		return pi.Div(NewFromFloat(2.0)).Sub(NewFromFloat(1.0).Div(d).xatan()).Add(Morebits)
	}
	return pi.Div(NewFromFloat(4.0)).Add((d.Sub(NewFromFloat(1.0)).Div(d.Add(NewFromFloat(1.0)))).xatan()).Add(NewFromFloat(0.5).Mul(Morebits))
}

// sin coefficients
var _sin = [...]Decimal{
	NewFromFloat(1.58962301576546568060e-10), // 0x3de5d8fd1fd19ccd
	NewFromFloat(-2.50507477628578072866e-8), // 0xbe5ae5e5a9291f5d
	NewFromFloat(2.75573136213857245213e-6),  // 0x3ec71de3567d48a1
	NewFromFloat(-1.98412698295895385996e-4), // 0xbf2a01a019bfdf03
	NewFromFloat(8.33333333332211858878e-3),  // 0x3f8111111110f7d0
	NewFromFloat(-1.66666666666666307295e-1), // 0xbfc5555555555548
}

// Sin returns the sine of the radian argument x.
func (d Decimal) Sin() Decimal {
	PI4A := NewFromFloat(7.85398125648498535156e-1)                             // 0x3fe921fb40000000, Pi/4 split into three parts
	PI4B := NewFromFloat(3.77489470793079817668e-8)                             // 0x3e64442d00000000,
	PI4C := NewFromFloat(2.69515142907905952645e-15)                            // 0x3ce8469898cc5170,
	M4PI := NewFromFloat(1.273239544735162542821171882678754627704620361328125) // 4/pi

	if d.Equal(NewFromFloat(0.0)) {
		return d
	}
	// make argument positive but save the sign
	sign := false
	if d.LessThan(NewFromFloat(0.0)) {
		d = d.Neg()
		sign = true
	}

	j := d.Mul(M4PI).IntPart()    // integer part of x/(Pi/4), as integer for tests on the phase angle
	y := NewFromFloat(float64(j)) // integer part of x/(Pi/4), as float

	// map zeros to origin
	if j&1 == 1 {
		j++
		y = y.Add(NewFromFloat(1.0))
	}
	j &= 7 // octant modulo 2Pi radians (360 degrees)
	// reflect in x axis
	if j > 3 {
		sign = !sign
		j -= 4
	}
	z := d.Sub(y.Mul(PI4A)).Sub(y.Mul(PI4B)).Sub(y.Mul(PI4C)) // Extended precision modular arithmetic
	zz := z.Mul(z)

	if j == 1 || j == 2 {
		w := zz.Mul(zz).Mul(_cos[0].Mul(zz).Add(_cos[1]).Mul(zz).Add(_cos[2]).Mul(zz).Add(_cos[3]).Mul(zz).Add(_cos[4]).Mul(zz).Add(_cos[5]))
		y = NewFromFloat(1.0).Sub(NewFromFloat(0.5).Mul(zz)).Add(w)
	} else {
		y = z.Add(z.Mul(zz).Mul(_sin[0].Mul(zz).Add(_sin[1]).Mul(zz).Add(_sin[2]).Mul(zz).Add(_sin[3]).Mul(zz).Add(_sin[4]).Mul(zz).Add(_sin[5])))
	}
	if sign {
		y = y.Neg()
	}
	return y
}

// cos coefficients
var _cos = [...]Decimal{
	NewFromFloat(-1.13585365213876817300e-11), // 0xbda8fa49a0861a9b
	NewFromFloat(2.08757008419747316778e-9),   // 0x3e21ee9d7b4e3f05
	NewFromFloat(-2.75573141792967388112e-7),  // 0xbe927e4f7eac4bc6
	NewFromFloat(2.48015872888517045348e-5),   // 0x3efa01a019c844f5
	NewFromFloat(-1.38888888888730564116e-3),  // 0xbf56c16c16c14f91
	NewFromFloat(4.16666666666665929218e-2),   // 0x3fa555555555554b
}

// Cos returns the cosine of the radian argument x.
func (d Decimal) Cos() Decimal {

	PI4A := NewFromFloat(7.85398125648498535156e-1)                             // 0x3fe921fb40000000, Pi/4 split into three parts
	PI4B := NewFromFloat(3.77489470793079817668e-8)                             // 0x3e64442d00000000,
	PI4C := NewFromFloat(2.69515142907905952645e-15)                            // 0x3ce8469898cc5170,
	M4PI := NewFromFloat(1.273239544735162542821171882678754627704620361328125) // 4/pi

	// make argument positive
	sign := false
	if d.LessThan(NewFromFloat(0.0)) {
		d = d.Neg()
	}

	j := d.Mul(M4PI).IntPart()    // integer part of x/(Pi/4), as integer for tests on the phase angle
	y := NewFromFloat(float64(j)) // integer part of x/(Pi/4), as float

	// map zeros to origin
	if j&1 == 1 {
		j++
		y = y.Add(NewFromFloat(1.0))
	}
	j &= 7 // octant modulo 2Pi radians (360 degrees)
	// reflect in x axis
	if j > 3 {
		sign = !sign
		j -= 4
	}
	if j > 1 {
		sign = !sign
	}

	z := d.Sub(y.Mul(PI4A)).Sub(y.Mul(PI4B)).Sub(y.Mul(PI4C)) // Extended precision modular arithmetic
	zz := z.Mul(z)

	if j == 1 || j == 2 {
		y = z.Add(z.Mul(zz).Mul(_sin[0].Mul(zz).Add(_sin[1]).Mul(zz).Add(_sin[2]).Mul(zz).Add(_sin[3]).Mul(zz).Add(_sin[4]).Mul(zz).Add(_sin[5])))
	} else {
		w := zz.Mul(zz).Mul(_cos[0].Mul(zz).Add(_cos[1]).Mul(zz).Add(_cos[2]).Mul(zz).Add(_cos[3]).Mul(zz).Add(_cos[4]).Mul(zz).Add(_cos[5]))
		y = NewFromFloat(1.0).Sub(NewFromFloat(0.5).Mul(zz)).Add(w)
	}
	if sign {
		y = y.Neg()
	}
	return y
}

var _tanP = [...]Decimal{
	NewFromFloat(-1.30936939181383777646e+4), // 0xc0c992d8d24f3f38
	NewFromFloat(1.15351664838587416140e+6),  // 0x413199eca5fc9ddd
	NewFromFloat(-1.79565251976484877988e+7), // 0xc1711fead3299176
}
var _tanQ = [...]Decimal{
	NewFromFloat(1.00000000000000000000e+0),
	NewFromFloat(1.36812963470692954678e+4),  //0x40cab8a5eeb36572
	NewFromFloat(-1.32089234440210967447e+6), //0xc13427bc582abc96
	NewFromFloat(2.50083801823357915839e+7),  //0x4177d98fc2ead8ef
	NewFromFloat(-5.38695755929454629881e+7), //0xc189afe03cbe5a31
}

// Tan returns the tangent of the radian argument x.
func (d Decimal) Tan() Decimal {

	PI4A := NewFromFloat(7.85398125648498535156e-1)                             // 0x3fe921fb40000000, Pi/4 split into three parts
	PI4B := NewFromFloat(3.77489470793079817668e-8)                             // 0x3e64442d00000000,
	PI4C := NewFromFloat(2.69515142907905952645e-15)                            // 0x3ce8469898cc5170,
	M4PI := NewFromFloat(1.273239544735162542821171882678754627704620361328125) // 4/pi

	if d.Equal(NewFromFloat(0.0)) {
		return d
	}

	// make argument positive but save the sign
	sign := false
	if d.LessThan(NewFromFloat(0.0)) {
		d = d.Neg()
		sign = true
	}

	j := d.Mul(M4PI).IntPart()    // integer part of x/(Pi/4), as integer for tests on the phase angle
	y := NewFromFloat(float64(j)) // integer part of x/(Pi/4), as float

	// map zeros to origin
	if j&1 == 1 {
		j++
		y = y.Add(NewFromFloat(1.0))
	}

	z := d.Sub(y.Mul(PI4A)).Sub(y.Mul(PI4B)).Sub(y.Mul(PI4C)) // Extended precision modular arithmetic
	zz := z.Mul(z)

	if zz.GreaterThan(NewFromFloat(1e-14)) {
		w := zz.Mul(_tanP[0].Mul(zz).Add(_tanP[1]).Mul(zz).Add(_tanP[2]))
		x := zz.Add(_tanQ[1]).Mul(zz).Add(_tanQ[2]).Mul(zz).Add(_tanQ[3]).Mul(zz).Add(_tanQ[4])
		y = z.Add(z.Mul(w.Div(x)))
	} else {
		y = z
	}
	if j&2 == 2 {
		y = NewFromFloat(-1.0).Div(y)
	}
	if sign {
		y = y.Neg()
	}
	return y
}
 07070100000AC4000081A4000000000000000000000001645E367C00001447000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/shopspring/decimal/rounding.go  // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Multiprecision decimal numbers.
// For floating-point formatting only; not general purpose.
// Only operations are assign and (binary) left/right shift.
// Can do binary floating point in multiprecision decimal precisely
// because 2 divides 10; cannot do decimal floating point
// in multiprecision binary precisely.

package decimal

type floatInfo struct {
	mantbits uint
	expbits  uint
	bias     int
}

var float32info = floatInfo{23, 8, -127}
var float64info = floatInfo{52, 11, -1023}

// roundShortest rounds d (= mant * 2^exp) to the shortest number of digits
// that will let the original floating point value be precisely reconstructed.
func roundShortest(d *decimal, mant uint64, exp int, flt *floatInfo) {
	// If mantissa is zero, the number is zero; stop now.
	if mant == 0 {
		d.nd = 0
		return
	}

	// Compute upper and lower such that any decimal number
	// between upper and lower (possibly inclusive)
	// will round to the original floating point number.

	// We may see at once that the number is already shortest.
	//
	// Suppose d is not denormal, so that 2^exp <= d < 10^dp.
	// The closest shorter number is at least 10^(dp-nd) away.
	// The lower/upper bounds computed below are at distance
	// at most 2^(exp-mantbits).
	//
	// So the number is already shortest if 10^(dp-nd) > 2^(exp-mantbits),
	// or equivalently log2(10)*(dp-nd) > exp-mantbits.
	// It is true if 332/100*(dp-nd) >= exp-mantbits (log2(10) > 3.32).
	minexp := flt.bias + 1 // minimum possible exponent
	if exp > minexp && 332*(d.dp-d.nd) >= 100*(exp-int(flt.mantbits)) {
		// The number is already shortest.
		return
	}

	// d = mant << (exp - mantbits)
	// Next highest floating point number is mant+1 << exp-mantbits.
	// Our upper bound is halfway between, mant*2+1 << exp-mantbits-1.
	upper := new(decimal)
	upper.Assign(mant*2 + 1)
	upper.Shift(exp - int(flt.mantbits) - 1)

	// d = mant << (exp - mantbits)
	// Next lowest floating point number is mant-1 << exp-mantbits,
	// unless mant-1 drops the significant bit and exp is not the minimum exp,
	// in which case the next lowest is mant*2-1 << exp-mantbits-1.
	// Either way, call it mantlo << explo-mantbits.
	// Our lower bound is halfway between, mantlo*2+1 << explo-mantbits-1.
	var mantlo uint64
	var explo int
	if mant > 1<<flt.mantbits || exp == minexp {
		mantlo = mant - 1
		explo = exp
	} else {
		mantlo = mant*2 - 1
		explo = exp - 1
	}
	lower := new(decimal)
	lower.Assign(mantlo*2 + 1)
	lower.Shift(explo - int(flt.mantbits) - 1)

	// The upper and lower bounds are possible outputs only if
	// the original mantissa is even, so that IEEE round-to-even
	// would round to the original mantissa and not the neighbors.
	inclusive := mant%2 == 0

	// As we walk the digits we want to know whether rounding up would fall
	// within the upper bound. This is tracked by upperdelta:
	//
	// If upperdelta == 0, the digits of d and upper are the same so far.
	//
	// If upperdelta == 1, we saw a difference of 1 between d and upper on a
	// previous digit and subsequently only 9s for d and 0s for upper.
	// (Thus rounding up may fall outside the bound, if it is exclusive.)
	//
	// If upperdelta == 2, then the difference is greater than 1
	// and we know that rounding up falls within the bound.
	var upperdelta uint8

	// Now we can figure out the minimum number of digits required.
	// Walk along until d has distinguished itself from upper and lower.
	for ui := 0; ; ui++ {
		// lower, d, and upper may have the decimal points at different
		// places. In this case upper is the longest, so we iterate from
		// ui==0 and start li and mi at (possibly) -1.
		mi := ui - upper.dp + d.dp
		if mi >= d.nd {
			break
		}
		li := ui - upper.dp + lower.dp
		l := byte('0') // lower digit
		if li >= 0 && li < lower.nd {
			l = lower.d[li]
		}
		m := byte('0') // middle digit
		if mi >= 0 {
			m = d.d[mi]
		}
		u := byte('0') // upper digit
		if ui < upper.nd {
			u = upper.d[ui]
		}

		// Okay to round down (truncate) if lower has a different digit
		// or if lower is inclusive and is exactly the result of rounding
		// down (i.e., and we have reached the final digit of lower).
		okdown := l != m || inclusive && li+1 == lower.nd

		switch {
		case upperdelta == 0 && m+1 < u:
			// Example:
			// m = 12345xxx
			// u = 12347xxx
			upperdelta = 2
		case upperdelta == 0 && m != u:
			// Example:
			// m = 12345xxx
			// u = 12346xxx
			upperdelta = 1
		case upperdelta == 1 && (m != '9' || u != '0'):
			// Example:
			// m = 1234598x
			// u = 1234600x
			upperdelta = 2
		}
		// Okay to round up if upper has a different digit and either upper
		// is inclusive or upper is bigger than the result of rounding up.
		okup := upperdelta > 0 && (inclusive || upperdelta > 1 || ui+1 < upper.nd)

		// If it's okay to do either, then round to the nearest one.
		// If it's okay to do only one, do it.
		switch {
		case okdown && okup:
			d.Round(mi + 1)
			return
		case okdown:
			d.RoundDown(mi + 1)
			return
		case okup:
			d.RoundUp(mi + 1)
			return
		}
	}
}
 07070100000AC5000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002F00000000elemental-cli-0.3.1/vendor/github.com/sirupsen    07070100000AC6000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus 07070100000AC7000081A4000000000000000000000001645E367C00000016000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus/.gitignore  logrus
vendor

.idea/
  07070100000AC8000081A4000000000000000000000001645E367C000003CE000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus/.golangci.yml   run:
  # do not run on test files yet
  tests: false

# all available settings of specific linters
linters-settings:
  errcheck:
    # report about not checking of errors in type assetions: `a := b.(MyStruct)`;
    # default is false: such cases aren't reported by default.
    check-type-assertions: false

    # report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`;
    # default is false: such cases aren't reported by default.
    check-blank: false

  lll:
    line-length: 100
    tab-width: 4

  prealloc:
    simple: false
    range-loops: false
    for-loops: false

  whitespace:
    multi-if: false   # Enforces newlines (or comments) after every multi-line if statement
    multi-func: false # Enforces newlines (or comments) after every multi-line function signature

linters:
  enable:
    - megacheck
    - govet
  disable:
    - maligned
    - prealloc
  disable-all: false
  presets:
    - bugs
    - unused
  fast: false
  07070100000AC9000081A4000000000000000000000001645E367C00000114000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus/.travis.yml language: go
go_import_path: github.com/sirupsen/logrus
git:
  depth: 1
env:
  - GO111MODULE=on
go: 1.15.x
os: linux
install:
  - ./travis/install.sh
script:
  - cd ci
  - go run mage.go -v -w ../ crossBuild
  - go run mage.go -v -w ../ lint
  - go run mage.go -v -w ../ test
07070100000ACA000081A4000000000000000000000001645E367C00001D2E000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus/CHANGELOG.md    # 1.8.1
Code quality:
  * move magefile in its own subdir/submodule to remove magefile dependency on logrus consumer
  * improve timestamp format documentation

Fixes:
  * fix race condition on logger hooks


# 1.8.0

Correct versioning number replacing v1.7.1.

# 1.7.1

Beware this release has introduced a new public API and its semver is therefore incorrect.

Code quality:
  * use go 1.15 in travis
  * use magefile as task runner

Fixes:
  * small fixes about new go 1.13 error formatting system
  * Fix for long time race condiction with mutating data hooks

Features:
  * build support for zos

# 1.7.0
Fixes:
  * the dependency toward a windows terminal library has been removed

Features:
  * a new buffer pool management API has been added
  * a set of `<LogLevel>Fn()` functions have been added

# 1.6.0
Fixes:
  * end of line cleanup
  * revert the entry concurrency bug fix whic leads to deadlock under some circumstances
  * update dependency on go-windows-terminal-sequences to fix a crash with go 1.14

Features:
  * add an option to the `TextFormatter` to completely disable fields quoting

# 1.5.0
Code quality:
  * add golangci linter run on travis

Fixes:
  * add mutex for hooks concurrent access on `Entry` data
  * caller function field for go1.14
  * fix build issue for gopherjs target

Feature:
  * add an hooks/writer sub-package whose goal is to split output on different stream depending on the trace level
  * add a `DisableHTMLEscape` option in the `JSONFormatter`
  * add `ForceQuote` and `PadLevelText` options in the `TextFormatter`

# 1.4.2
  * Fixes build break for plan9, nacl, solaris
# 1.4.1
This new release introduces:
  * Enhance TextFormatter to not print caller information when they are empty (#944)
  * Remove dependency on golang.org/x/crypto (#932, #943)

Fixes:
  * Fix Entry.WithContext method to return a copy of the initial entry (#941)

# 1.4.0
This new release introduces:
  * Add `DeferExitHandler`, similar to `RegisterExitHandler` but prepending the handler to the list of handlers (semantically like `defer`) (#848).
  * Add `CallerPrettyfier` to `JSONFormatter` and `TextFormatter` (#909, #911)
  * Add `Entry.WithContext()` and `Entry.Context`, to set a context on entries to be used e.g. in hooks (#919).

Fixes:
  * Fix wrong method calls `Logger.Print` and `Logger.Warningln` (#893).
  * Update `Entry.Logf` to not do string formatting unless the log level is enabled (#903)
  * Fix infinite recursion on unknown `Level.String()` (#907)
  * Fix race condition in `getCaller` (#916).


# 1.3.0
This new release introduces:
  * Log, Logf, Logln functions for Logger and Entry that take a Level

Fixes:
  * Building prometheus node_exporter on AIX (#840)
  * Race condition in TextFormatter (#468)
  * Travis CI import path (#868)
  * Remove coloured output on Windows (#862)
  * Pointer to func as field in JSONFormatter (#870)
  * Properly marshal Levels (#873)

# 1.2.0
This new release introduces:
  * A new method `SetReportCaller` in the `Logger` to enable the file, line and calling function from which the trace has been issued
  * A new trace level named `Trace` whose level is below `Debug`
  * A configurable exit function to be called upon a Fatal trace
  * The `Level` object now implements `encoding.TextUnmarshaler` interface

# 1.1.1
This is a bug fix release.
  * fix the build break on Solaris
  * don't drop a whole trace in JSONFormatter when a field param is a function pointer which can not be serialized

# 1.1.0
This new release introduces:
  * several fixes:
    * a fix for a race condition on entry formatting
    * proper cleanup of previously used entries before putting them back in the pool
    * the extra new line at the end of message in text formatter has been removed
  * a new global public API to check if a level is activated: IsLevelEnabled
  * the following methods have been added to the Logger object
    * IsLevelEnabled
    * SetFormatter
    * SetOutput
    * ReplaceHooks
  * introduction of go module
  * an indent configuration for the json formatter
  * output colour support for windows
  * the field sort function is now configurable for text formatter
  * the CLICOLOR and CLICOLOR\_FORCE environment variable support in text formater

# 1.0.6

This new release introduces:
  * a new api WithTime which allows to easily force the time of the log entry
    which is mostly useful for logger wrapper
  * a fix reverting the immutability of the entry given as parameter to the hooks
    a new configuration field of the json formatter in order to put all the fields
    in a nested dictionnary
  * a new SetOutput method in the Logger
  * a new configuration of the textformatter to configure the name of the default keys
  * a new configuration of the text formatter to disable the level truncation

# 1.0.5

* Fix hooks race (#707)
* Fix panic deadlock (#695)

# 1.0.4

* Fix race when adding hooks (#612)
* Fix terminal check in AppEngine (#635)

# 1.0.3

* Replace example files with testable examples

# 1.0.2

* bug: quote non-string values in text formatter (#583)
* Make (*Logger) SetLevel a public method

# 1.0.1

* bug: fix escaping in text formatter (#575)

# 1.0.0

* Officially changed name to lower-case
* bug: colors on Windows 10 (#541)
* bug: fix race in accessing level (#512)

# 0.11.5

* feature: add writer and writerlevel to entry (#372)

# 0.11.4

* bug: fix undefined variable on solaris (#493)

# 0.11.3

* formatter: configure quoting of empty values (#484)
* formatter: configure quoting character (default is `"`) (#484)
* bug: fix not importing io correctly in non-linux environments (#481)

# 0.11.2

* bug: fix windows terminal detection (#476)

# 0.11.1

* bug: fix tty detection with custom out (#471)

# 0.11.0

* performance: Use bufferpool to allocate (#370)
* terminal: terminal detection for app-engine (#343)
* feature: exit handler (#375)

# 0.10.0

* feature: Add a test hook (#180)
* feature: `ParseLevel` is now case-insensitive (#326)
* feature: `FieldLogger` interface that generalizes `Logger` and `Entry` (#308)
* performance: avoid re-allocations on `WithFields` (#335)

# 0.9.0

* logrus/text_formatter: don't emit empty msg
* logrus/hooks/airbrake: move out of main repository
* logrus/hooks/sentry: move out of main repository
* logrus/hooks/papertrail: move out of main repository
* logrus/hooks/bugsnag: move out of main repository
* logrus/core: run tests with `-race`
* logrus/core: detect TTY based on `stderr`
* logrus/core: support `WithError` on logger
* logrus/core: Solaris support

# 0.8.7

* logrus/core: fix possible race (#216)
* logrus/doc: small typo fixes and doc improvements


# 0.8.6

* hooks/raven: allow passing an initialized client

# 0.8.5

* logrus/core: revert #208

# 0.8.4

* formatter/text: fix data race (#218)

# 0.8.3

* logrus/core: fix entry log level (#208)
* logrus/core: improve performance of text formatter by 40%
* logrus/core: expose `LevelHooks` type
* logrus/core: add support for DragonflyBSD and NetBSD
* formatter/text: print structs more verbosely

# 0.8.2

* logrus: fix more Fatal family functions

# 0.8.1

* logrus: fix not exiting on `Fatalf` and `Fatalln`

# 0.8.0

* logrus: defaults to stderr instead of stdout
* hooks/sentry: add special field for `*http.Request`
* formatter/text: ignore Windows for colors

# 0.7.3

* formatter/\*: allow configuration of timestamp layout

# 0.7.2

* formatter/text: Add configuration option for time format (#158)
  07070100000ACB000081A4000000000000000000000001645E367C0000043A000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus/LICENSE The MIT License (MIT)

Copyright (c) 2014 Simon Eskildsen

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
  07070100000ACC000081A4000000000000000000000001645E367C00004BB6000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus/README.md   # Logrus <img src="http://i.imgur.com/hTeVwmJ.png" width="40" height="40" alt=":walrus:" class="emoji" title=":walrus:"/> [![Build Status](https://github.com/sirupsen/logrus/workflows/CI/badge.svg)](https://github.com/sirupsen/logrus/actions?query=workflow%3ACI) [![Build Status](https://travis-ci.org/sirupsen/logrus.svg?branch=master)](https://travis-ci.org/sirupsen/logrus) [![Go Reference](https://pkg.go.dev/badge/github.com/sirupsen/logrus.svg)](https://pkg.go.dev/github.com/sirupsen/logrus)

Logrus is a structured logger for Go (golang), completely API compatible with
the standard library logger.

**Logrus is in maintenance-mode.** We will not be introducing new features. It's
simply too hard to do in a way that won't break many people's projects, which is
the last thing you want from your Logging library (again...).

This does not mean Logrus is dead. Logrus will continue to be maintained for
security, (backwards compatible) bug fixes, and performance (where we are
limited by the interface). 

I believe Logrus' biggest contribution is to have played a part in today's
widespread use of structured logging in Golang. There doesn't seem to be a
reason to do a major, breaking iteration into Logrus V2, since the fantastic Go
community has built those independently. Many fantastic alternatives have sprung
up. Logrus would look like those, had it been re-designed with what we know
about structured logging in Go today. Check out, for example,
[Zerolog][zerolog], [Zap][zap], and [Apex][apex].

[zerolog]: https://github.com/rs/zerolog
[zap]: https://github.com/uber-go/zap
[apex]: https://github.com/apex/log

**Seeing weird case-sensitive problems?** It's in the past been possible to
import Logrus as both upper- and lower-case. Due to the Go package environment,
this caused issues in the community and we needed a standard. Some environments
experienced problems with the upper-case variant, so the lower-case was decided.
Everything using `logrus` will need to use the lower-case:
`github.com/sirupsen/logrus`. Any package that isn't, should be changed.

To fix Glide, see [these
comments](https://github.com/sirupsen/logrus/issues/553#issuecomment-306591437).
For an in-depth explanation of the casing issue, see [this
comment](https://github.com/sirupsen/logrus/issues/570#issuecomment-313933276).

Nicely color-coded in development (when a TTY is attached, otherwise just
plain text):

![Colored](http://i.imgur.com/PY7qMwd.png)

With `log.SetFormatter(&log.JSONFormatter{})`, for easy parsing by logstash
or Splunk:

```json
{"animal":"walrus","level":"info","msg":"A group of walrus emerges from the
ocean","size":10,"time":"2014-03-10 19:57:38.562264131 -0400 EDT"}

{"level":"warning","msg":"The group's number increased tremendously!",
"number":122,"omg":true,"time":"2014-03-10 19:57:38.562471297 -0400 EDT"}

{"animal":"walrus","level":"info","msg":"A giant walrus appears!",
"size":10,"time":"2014-03-10 19:57:38.562500591 -0400 EDT"}

{"animal":"walrus","level":"info","msg":"Tremendously sized cow enters the ocean.",
"size":9,"time":"2014-03-10 19:57:38.562527896 -0400 EDT"}

{"level":"fatal","msg":"The ice breaks!","number":100,"omg":true,
"time":"2014-03-10 19:57:38.562543128 -0400 EDT"}
```

With the default `log.SetFormatter(&log.TextFormatter{})` when a TTY is not
attached, the output is compatible with the
[logfmt](http://godoc.org/github.com/kr/logfmt) format:

```text
time="2015-03-26T01:27:38-04:00" level=debug msg="Started observing beach" animal=walrus number=8
time="2015-03-26T01:27:38-04:00" level=info msg="A group of walrus emerges from the ocean" animal=walrus size=10
time="2015-03-26T01:27:38-04:00" level=warning msg="The group's number increased tremendously!" number=122 omg=true
time="2015-03-26T01:27:38-04:00" level=debug msg="Temperature changes" temperature=-4
time="2015-03-26T01:27:38-04:00" level=panic msg="It's over 9000!" animal=orca size=9009
time="2015-03-26T01:27:38-04:00" level=fatal msg="The ice breaks!" err=&{0x2082280c0 map[animal:orca size:9009] 2015-03-26 01:27:38.441574009 -0400 EDT panic It's over 9000!} number=100 omg=true
```
To ensure this behaviour even if a TTY is attached, set your formatter as follows:

```go
	log.SetFormatter(&log.TextFormatter{
		DisableColors: true,
		FullTimestamp: true,
	})
```

#### Logging Method Name

If you wish to add the calling method as a field, instruct the logger via:
```go
log.SetReportCaller(true)
```
This adds the caller as 'method' like so:

```json
{"animal":"penguin","level":"fatal","method":"github.com/sirupsen/arcticcreatures.migrate","msg":"a penguin swims by",
"time":"2014-03-10 19:57:38.562543129 -0400 EDT"}
```

```text
time="2015-03-26T01:27:38-04:00" level=fatal method=github.com/sirupsen/arcticcreatures.migrate msg="a penguin swims by" animal=penguin
```
Note that this does add measurable overhead - the cost will depend on the version of Go, but is
between 20 and 40% in recent tests with 1.6 and 1.7.  You can validate this in your
environment via benchmarks: 
```
go test -bench=.*CallerTracing
```


#### Case-sensitivity

The organization's name was changed to lower-case--and this will not be changed
back. If you are getting import conflicts due to case sensitivity, please use
the lower-case import: `github.com/sirupsen/logrus`.

#### Example

The simplest way to use Logrus is simply the package-level exported logger:

```go
package main

import (
  log "github.com/sirupsen/logrus"
)

func main() {
  log.WithFields(log.Fields{
    "animal": "walrus",
  }).Info("A walrus appears")
}
```

Note that it's completely api-compatible with the stdlib logger, so you can
replace your `log` imports everywhere with `log "github.com/sirupsen/logrus"`
and you'll now have the flexibility of Logrus. You can customize it all you
want:

```go
package main

import (
  "os"
  log "github.com/sirupsen/logrus"
)

func init() {
  // Log as JSON instead of the default ASCII formatter.
  log.SetFormatter(&log.JSONFormatter{})

  // Output to stdout instead of the default stderr
  // Can be any io.Writer, see below for File example
  log.SetOutput(os.Stdout)

  // Only log the warning severity or above.
  log.SetLevel(log.WarnLevel)
}

func main() {
  log.WithFields(log.Fields{
    "animal": "walrus",
    "size":   10,
  }).Info("A group of walrus emerges from the ocean")

  log.WithFields(log.Fields{
    "omg":    true,
    "number": 122,
  }).Warn("The group's number increased tremendously!")

  log.WithFields(log.Fields{
    "omg":    true,
    "number": 100,
  }).Fatal("The ice breaks!")

  // A common pattern is to re-use fields between logging statements by re-using
  // the logrus.Entry returned from WithFields()
  contextLogger := log.WithFields(log.Fields{
    "common": "this is a common field",
    "other": "I also should be logged always",
  })

  contextLogger.Info("I'll be logged with common and other field")
  contextLogger.Info("Me too")
}
```

For more advanced usage such as logging to multiple locations from the same
application, you can also create an instance of the `logrus` Logger:

```go
package main

import (
  "os"
  "github.com/sirupsen/logrus"
)

// Create a new instance of the logger. You can have any number of instances.
var log = logrus.New()

func main() {
  // The API for setting attributes is a little different than the package level
  // exported logger. See Godoc.
  log.Out = os.Stdout

  // You could set this to any `io.Writer` such as a file
  // file, err := os.OpenFile("logrus.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
  // if err == nil {
  //  log.Out = file
  // } else {
  //  log.Info("Failed to log to file, using default stderr")
  // }

  log.WithFields(logrus.Fields{
    "animal": "walrus",
    "size":   10,
  }).Info("A group of walrus emerges from the ocean")
}
```

#### Fields

Logrus encourages careful, structured logging through logging fields instead of
long, unparseable error messages. For example, instead of: `log.Fatalf("Failed
to send event %s to topic %s with key %d")`, you should log the much more
discoverable:

```go
log.WithFields(log.Fields{
  "event": event,
  "topic": topic,
  "key": key,
}).Fatal("Failed to send event")
```

We've found this API forces you to think about logging in a way that produces
much more useful logging messages. We've been in countless situations where just
a single added field to a log statement that was already there would've saved us
hours. The `WithFields` call is optional.

In general, with Logrus using any of the `printf`-family functions should be
seen as a hint you should add a field, however, you can still use the
`printf`-family functions with Logrus.

#### Default Fields

Often it's helpful to have fields _always_ attached to log statements in an
application or parts of one. For example, you may want to always log the
`request_id` and `user_ip` in the context of a request. Instead of writing
`log.WithFields(log.Fields{"request_id": request_id, "user_ip": user_ip})` on
every line, you can create a `logrus.Entry` to pass around instead:

```go
requestLogger := log.WithFields(log.Fields{"request_id": request_id, "user_ip": user_ip})
requestLogger.Info("something happened on that request") # will log request_id and user_ip
requestLogger.Warn("something not great happened")
```

#### Hooks

You can add hooks for logging levels. For example to send errors to an exception
tracking service on `Error`, `Fatal` and `Panic`, info to StatsD or log to
multiple places simultaneously, e.g. syslog.

Logrus comes with [built-in hooks](hooks/). Add those, or your custom hook, in
`init`:

```go
import (
  log "github.com/sirupsen/logrus"
  "gopkg.in/gemnasium/logrus-airbrake-hook.v2" // the package is named "airbrake"
  logrus_syslog "github.com/sirupsen/logrus/hooks/syslog"
  "log/syslog"
)

func init() {

  // Use the Airbrake hook to report errors that have Error severity or above to
  // an exception tracker. You can create custom hooks, see the Hooks section.
  log.AddHook(airbrake.NewHook(123, "xyz", "production"))

  hook, err := logrus_syslog.NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, "")
  if err != nil {
    log.Error("Unable to connect to local syslog daemon")
  } else {
    log.AddHook(hook)
  }
}
```
Note: Syslog hook also support connecting to local syslog (Ex. "/dev/log" or "/var/run/syslog" or "/var/run/log"). For the detail, please check the [syslog hook README](hooks/syslog/README.md).

A list of currently known service hooks can be found in this wiki [page](https://github.com/sirupsen/logrus/wiki/Hooks)


#### Level logging

Logrus has seven logging levels: Trace, Debug, Info, Warning, Error, Fatal and Panic.

```go
log.Trace("Something very low level.")
log.Debug("Useful debugging information.")
log.Info("Something noteworthy happened!")
log.Warn("You should probably take a look at this.")
log.Error("Something failed but I'm not quitting.")
// Calls os.Exit(1) after logging
log.Fatal("Bye.")
// Calls panic() after logging
log.Panic("I'm bailing.")
```

You can set the logging level on a `Logger`, then it will only log entries with
that severity or anything above it:

```go
// Will log anything that is info or above (warn, error, fatal, panic). Default.
log.SetLevel(log.InfoLevel)
```

It may be useful to set `log.Level = logrus.DebugLevel` in a debug or verbose
environment if your application has that.

#### Entries

Besides the fields added with `WithField` or `WithFields` some fields are
automatically added to all logging events:

1. `time`. The timestamp when the entry was created.
2. `msg`. The logging message passed to `{Info,Warn,Error,Fatal,Panic}` after
   the `AddFields` call. E.g. `Failed to send event.`
3. `level`. The logging level. E.g. `info`.

#### Environments

Logrus has no notion of environment.

If you wish for hooks and formatters to only be used in specific environments,
you should handle that yourself. For example, if your application has a global
variable `Environment`, which is a string representation of the environment you
could do:

```go
import (
  log "github.com/sirupsen/logrus"
)

func init() {
  // do something here to set environment depending on an environment variable
  // or command-line flag
  if Environment == "production" {
    log.SetFormatter(&log.JSONFormatter{})
  } else {
    // The TextFormatter is default, you don't actually have to do this.
    log.SetFormatter(&log.TextFormatter{})
  }
}
```

This configuration is how `logrus` was intended to be used, but JSON in
production is mostly only useful if you do log aggregation with tools like
Splunk or Logstash.

#### Formatters

The built-in logging formatters are:

* `logrus.TextFormatter`. Logs the event in colors if stdout is a tty, otherwise
  without colors.
  * *Note:* to force colored output when there is no TTY, set the `ForceColors`
    field to `true`.  To force no colored output even if there is a TTY  set the
    `DisableColors` field to `true`. For Windows, see
    [github.com/mattn/go-colorable](https://github.com/mattn/go-colorable).
  * When colors are enabled, levels are truncated to 4 characters by default. To disable
    truncation set the `DisableLevelTruncation` field to `true`.
  * When outputting to a TTY, it's often helpful to visually scan down a column where all the levels are the same width. Setting the `PadLevelText` field to `true` enables this behavior, by adding padding to the level text.
  * All options are listed in the [generated docs](https://godoc.org/github.com/sirupsen/logrus#TextFormatter).
* `logrus.JSONFormatter`. Logs fields as JSON.
  * All options are listed in the [generated docs](https://godoc.org/github.com/sirupsen/logrus#JSONFormatter).

Third party logging formatters:

* [`FluentdFormatter`](https://github.com/joonix/log). Formats entries that can be parsed by Kubernetes and Google Container Engine.
* [`GELF`](https://github.com/fabienm/go-logrus-formatters). Formats entries so they comply to Graylog's [GELF 1.1 specification](http://docs.graylog.org/en/2.4/pages/gelf.html).
* [`logstash`](https://github.com/bshuster-repo/logrus-logstash-hook). Logs fields as [Logstash](http://logstash.net) Events.
* [`prefixed`](https://github.com/x-cray/logrus-prefixed-formatter). Displays log entry source along with alternative layout.
* [`zalgo`](https://github.com/aybabtme/logzalgo). Invoking the Power of Zalgo.
* [`nested-logrus-formatter`](https://github.com/antonfisher/nested-logrus-formatter). Converts logrus fields to a nested structure.
* [`powerful-logrus-formatter`](https://github.com/zput/zxcTool). get fileName, log's line number and the latest function's name when print log; Sava log to files.
* [`caption-json-formatter`](https://github.com/nolleh/caption_json_formatter). logrus's message json formatter with human-readable caption added.

You can define your formatter by implementing the `Formatter` interface,
requiring a `Format` method. `Format` takes an `*Entry`. `entry.Data` is a
`Fields` type (`map[string]interface{}`) with all your fields as well as the
default ones (see Entries section above):

```go
type MyJSONFormatter struct {
}

log.SetFormatter(new(MyJSONFormatter))

func (f *MyJSONFormatter) Format(entry *Entry) ([]byte, error) {
  // Note this doesn't include Time, Level and Message which are available on
  // the Entry. Consult `godoc` on information about those fields or read the
  // source of the official loggers.
  serialized, err := json.Marshal(entry.Data)
    if err != nil {
      return nil, fmt.Errorf("Failed to marshal fields to JSON, %w", err)
    }
  return append(serialized, '\n'), nil
}
```

#### Logger as an `io.Writer`

Logrus can be transformed into an `io.Writer`. That writer is the end of an `io.Pipe` and it is your responsibility to close it.

```go
w := logger.Writer()
defer w.Close()

srv := http.Server{
    // create a stdlib log.Logger that writes to
    // logrus.Logger.
    ErrorLog: log.New(w, "", 0),
}
```

Each line written to that writer will be printed the usual way, using formatters
and hooks. The level for those entries is `info`.

This means that we can override the standard library logger easily:

```go
logger := logrus.New()
logger.Formatter = &logrus.JSONFormatter{}

// Use logrus for standard log output
// Note that `log` here references stdlib's log
// Not logrus imported under the name `log`.
log.SetOutput(logger.Writer())
```

#### Rotation

Log rotation is not provided with Logrus. Log rotation should be done by an
external program (like `logrotate(8)`) that can compress and delete old log
entries. It should not be a feature of the application-level logger.

#### Tools

| Tool | Description |
| ---- | ----------- |
|[Logrus Mate](https://github.com/gogap/logrus_mate)|Logrus mate is a tool for Logrus to manage loggers, you can initial logger's level, hook and formatter by config file, the logger will be generated with different configs in different environments.|
|[Logrus Viper Helper](https://github.com/heirko/go-contrib/tree/master/logrusHelper)|An Helper around Logrus to wrap with spf13/Viper to load configuration with fangs! And to simplify Logrus configuration use some behavior of [Logrus Mate](https://github.com/gogap/logrus_mate). [sample](https://github.com/heirko/iris-contrib/blob/master/middleware/logrus-logger/example) |

#### Testing

Logrus has a built in facility for asserting the presence of log messages. This is implemented through the `test` hook and provides:

* decorators for existing logger (`test.NewLocal` and `test.NewGlobal`) which basically just adds the `test` hook
* a test logger (`test.NewNullLogger`) that just records log messages (and does not output any):

```go
import(
  "github.com/sirupsen/logrus"
  "github.com/sirupsen/logrus/hooks/test"
  "github.com/stretchr/testify/assert"
  "testing"
)

func TestSomething(t*testing.T){
  logger, hook := test.NewNullLogger()
  logger.Error("Helloerror")

  assert.Equal(t, 1, len(hook.Entries))
  assert.Equal(t, logrus.ErrorLevel, hook.LastEntry().Level)
  assert.Equal(t, "Helloerror", hook.LastEntry().Message)

  hook.Reset()
  assert.Nil(t, hook.LastEntry())
}
```

#### Fatal handlers

Logrus can register one or more functions that will be called when any `fatal`
level message is logged. The registered handlers will be executed before
logrus performs an `os.Exit(1)`. This behavior may be helpful if callers need
to gracefully shutdown. Unlike a `panic("Something went wrong...")` call which can be intercepted with a deferred `recover` a call to `os.Exit(1)` can not be intercepted.

```
...
handler := func() {
  // gracefully shutdown something...
}
logrus.RegisterExitHandler(handler)
...
```

#### Thread safety

By default, Logger is protected by a mutex for concurrent writes. The mutex is held when calling hooks and writing logs.
If you are sure such locking is not needed, you can call logger.SetNoLock() to disable the locking.

Situation when locking is not needed includes:

* You have no hooks registered, or hooks calling is already thread-safe.

* Writing to logger.Out is already thread-safe, for example:

  1) logger.Out is protected by locks.

  2) logger.Out is an os.File handler opened with `O_APPEND` flag, and every write is smaller than 4k. (This allows multi-thread/multi-process writing)

     (Refer to http://www.notthewizard.com/2014/06/17/are-files-appends-really-atomic/)
  07070100000ACD000081A4000000000000000000000001645E367C00000AF2000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus/alt_exit.go package logrus

// The following code was sourced and modified from the
// https://github.com/tebeka/atexit package governed by the following license:
//
// Copyright (c) 2012 Miki Tebeka <miki.tebeka@gmail.com>.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of
// this software and associated documentation files (the "Software"), to deal in
// the Software without restriction, including without limitation the rights to
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
// the Software, and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

import (
	"fmt"
	"os"
)

var handlers = []func(){}

func runHandler(handler func()) {
	defer func() {
		if err := recover(); err != nil {
			fmt.Fprintln(os.Stderr, "Error: Logrus exit handler error:", err)
		}
	}()

	handler()
}

func runHandlers() {
	for _, handler := range handlers {
		runHandler(handler)
	}
}

// Exit runs all the Logrus atexit handlers and then terminates the program using os.Exit(code)
func Exit(code int) {
	runHandlers()
	os.Exit(code)
}

// RegisterExitHandler appends a Logrus Exit handler to the list of handlers,
// call logrus.Exit to invoke all handlers. The handlers will also be invoked when
// any Fatal log entry is made.
//
// This method is useful when a caller wishes to use logrus to log a fatal
// message but also needs to gracefully shutdown. An example usecase could be
// closing database connections, or sending a alert that the application is
// closing.
func RegisterExitHandler(handler func()) {
	handlers = append(handlers, handler)
}

// DeferExitHandler prepends a Logrus Exit handler to the list of handlers,
// call logrus.Exit to invoke all handlers. The handlers will also be invoked when
// any Fatal log entry is made.
//
// This method is useful when a caller wishes to use logrus to log a fatal
// message but also needs to gracefully shutdown. An example usecase could be
// closing database connections, or sending a alert that the application is
// closing.
func DeferExitHandler(handler func()) {
	handlers = append([]func(){handler}, handlers...)
}
  07070100000ACE000081A4000000000000000000000001645E367C00000103000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus/appveyor.yml    version: "{build}"
platform: x64
clone_folder: c:\gopath\src\github.com\sirupsen\logrus
environment:
  GOPATH: c:\gopath
branches:
  only:
    - master
install:
  - set PATH=%GOPATH%\bin;c:\go\bin;%PATH%
  - go version
build_script:
  - go get -t
  - go test
 07070100000ACF000081A4000000000000000000000001645E367C00000297000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus/buffer_pool.go  package logrus

import (
	"bytes"
	"sync"
)

var (
	bufferPool BufferPool
)

type BufferPool interface {
	Put(*bytes.Buffer)
	Get() *bytes.Buffer
}

type defaultPool struct {
	pool *sync.Pool
}

func (p *defaultPool) Put(buf *bytes.Buffer) {
	p.pool.Put(buf)
}

func (p *defaultPool) Get() *bytes.Buffer {
	return p.pool.Get().(*bytes.Buffer)
}

// SetBufferPool allows to replace the default logrus buffer pool
// to better meets the specific needs of an application.
func SetBufferPool(bp BufferPool) {
	bufferPool = bp
}

func init() {
	SetBufferPool(&defaultPool{
		pool: &sync.Pool{
			New: func() interface{} {
				return new(bytes.Buffer)
			},
		},
	})
}
 07070100000AD0000081A4000000000000000000000001645E367C0000024A000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus/doc.go  /*
Package logrus is a structured logger for Go, completely API compatible with the standard library logger.


The simplest way to use Logrus is simply the package-level exported logger:

  package main

  import (
    log "github.com/sirupsen/logrus"
  )

  func main() {
    log.WithFields(log.Fields{
      "animal": "walrus",
      "number": 1,
      "size":   10,
    }).Info("A walrus appears")
  }

Output:
  time="2015-09-07T08:48:33Z" level=info msg="A walrus appears" animal=walrus number=1 size=10

For a full guide visit https://github.com/sirupsen/logrus
*/
package logrus
  07070100000AD1000081A4000000000000000000000001645E367C00002B75000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus/entry.go    package logrus

import (
	"bytes"
	"context"
	"fmt"
	"os"
	"reflect"
	"runtime"
	"strings"
	"sync"
	"time"
)

var (

	// qualified package name, cached at first use
	logrusPackage string

	// Positions in the call stack when tracing to report the calling method
	minimumCallerDepth int

	// Used for caller information initialisation
	callerInitOnce sync.Once
)

const (
	maximumCallerDepth int = 25
	knownLogrusFrames  int = 4
)

func init() {
	// start at the bottom of the stack before the package-name cache is primed
	minimumCallerDepth = 1
}

// Defines the key when adding errors using WithError.
var ErrorKey = "error"

// An entry is the final or intermediate Logrus logging entry. It contains all
// the fields passed with WithField{,s}. It's finally logged when Trace, Debug,
// Info, Warn, Error, Fatal or Panic is called on it. These objects can be
// reused and passed around as much as you wish to avoid field duplication.
type Entry struct {
	Logger *Logger

	// Contains all the fields set by the user.
	Data Fields

	// Time at which the log entry was created
	Time time.Time

	// Level the log entry was logged at: Trace, Debug, Info, Warn, Error, Fatal or Panic
	// This field will be set on entry firing and the value will be equal to the one in Logger struct field.
	Level Level

	// Calling method, with package name
	Caller *runtime.Frame

	// Message passed to Trace, Debug, Info, Warn, Error, Fatal or Panic
	Message string

	// When formatter is called in entry.log(), a Buffer may be set to entry
	Buffer *bytes.Buffer

	// Contains the context set by the user. Useful for hook processing etc.
	Context context.Context

	// err may contain a field formatting error
	err string
}

func NewEntry(logger *Logger) *Entry {
	return &Entry{
		Logger: logger,
		// Default is three fields, plus one optional.  Give a little extra room.
		Data: make(Fields, 6),
	}
}

func (entry *Entry) Dup() *Entry {
	data := make(Fields, len(entry.Data))
	for k, v := range entry.Data {
		data[k] = v
	}
	return &Entry{Logger: entry.Logger, Data: data, Time: entry.Time, Context: entry.Context, err: entry.err}
}

// Returns the bytes representation of this entry from the formatter.
func (entry *Entry) Bytes() ([]byte, error) {
	return entry.Logger.Formatter.Format(entry)
}

// Returns the string representation from the reader and ultimately the
// formatter.
func (entry *Entry) String() (string, error) {
	serialized, err := entry.Bytes()
	if err != nil {
		return "", err
	}
	str := string(serialized)
	return str, nil
}

// Add an error as single field (using the key defined in ErrorKey) to the Entry.
func (entry *Entry) WithError(err error) *Entry {
	return entry.WithField(ErrorKey, err)
}

// Add a context to the Entry.
func (entry *Entry) WithContext(ctx context.Context) *Entry {
	dataCopy := make(Fields, len(entry.Data))
	for k, v := range entry.Data {
		dataCopy[k] = v
	}
	return &Entry{Logger: entry.Logger, Data: dataCopy, Time: entry.Time, err: entry.err, Context: ctx}
}

// Add a single field to the Entry.
func (entry *Entry) WithField(key string, value interface{}) *Entry {
	return entry.WithFields(Fields{key: value})
}

// Add a map of fields to the Entry.
func (entry *Entry) WithFields(fields Fields) *Entry {
	data := make(Fields, len(entry.Data)+len(fields))
	for k, v := range entry.Data {
		data[k] = v
	}
	fieldErr := entry.err
	for k, v := range fields {
		isErrField := false
		if t := reflect.TypeOf(v); t != nil {
			switch {
			case t.Kind() == reflect.Func, t.Kind() == reflect.Ptr && t.Elem().Kind() == reflect.Func:
				isErrField = true
			}
		}
		if isErrField {
			tmp := fmt.Sprintf("can not add field %q", k)
			if fieldErr != "" {
				fieldErr = entry.err + ", " + tmp
			} else {
				fieldErr = tmp
			}
		} else {
			data[k] = v
		}
	}
	return &Entry{Logger: entry.Logger, Data: data, Time: entry.Time, err: fieldErr, Context: entry.Context}
}

// Overrides the time of the Entry.
func (entry *Entry) WithTime(t time.Time) *Entry {
	dataCopy := make(Fields, len(entry.Data))
	for k, v := range entry.Data {
		dataCopy[k] = v
	}
	return &Entry{Logger: entry.Logger, Data: dataCopy, Time: t, err: entry.err, Context: entry.Context}
}

// getPackageName reduces a fully qualified function name to the package name
// There really ought to be to be a better way...
func getPackageName(f string) string {
	for {
		lastPeriod := strings.LastIndex(f, ".")
		lastSlash := strings.LastIndex(f, "/")
		if lastPeriod > lastSlash {
			f = f[:lastPeriod]
		} else {
			break
		}
	}

	return f
}

// getCaller retrieves the name of the first non-logrus calling function
func getCaller() *runtime.Frame {
	// cache this package's fully-qualified name
	callerInitOnce.Do(func() {
		pcs := make([]uintptr, maximumCallerDepth)
		_ = runtime.Callers(0, pcs)

		// dynamic get the package name and the minimum caller depth
		for i := 0; i < maximumCallerDepth; i++ {
			funcName := runtime.FuncForPC(pcs[i]).Name()
			if strings.Contains(funcName, "getCaller") {
				logrusPackage = getPackageName(funcName)
				break
			}
		}

		minimumCallerDepth = knownLogrusFrames
	})

	// Restrict the lookback frames to avoid runaway lookups
	pcs := make([]uintptr, maximumCallerDepth)
	depth := runtime.Callers(minimumCallerDepth, pcs)
	frames := runtime.CallersFrames(pcs[:depth])

	for f, again := frames.Next(); again; f, again = frames.Next() {
		pkg := getPackageName(f.Function)

		// If the caller isn't part of this package, we're done
		if pkg != logrusPackage {
			return &f //nolint:scopelint
		}
	}

	// if we got here, we failed to find the caller's context
	return nil
}

func (entry Entry) HasCaller() (has bool) {
	return entry.Logger != nil &&
		entry.Logger.ReportCaller &&
		entry.Caller != nil
}

func (entry *Entry) log(level Level, msg string) {
	var buffer *bytes.Buffer

	newEntry := entry.Dup()

	if newEntry.Time.IsZero() {
		newEntry.Time = time.Now()
	}

	newEntry.Level = level
	newEntry.Message = msg

	newEntry.Logger.mu.Lock()
	reportCaller := newEntry.Logger.ReportCaller
	bufPool := newEntry.getBufferPool()
	newEntry.Logger.mu.Unlock()

	if reportCaller {
		newEntry.Caller = getCaller()
	}

	newEntry.fireHooks()
	buffer = bufPool.Get()
	defer func() {
		newEntry.Buffer = nil
		buffer.Reset()
		bufPool.Put(buffer)
	}()
	buffer.Reset()
	newEntry.Buffer = buffer

	newEntry.write()

	newEntry.Buffer = nil

	// To avoid Entry#log() returning a value that only would make sense for
	// panic() to use in Entry#Panic(), we avoid the allocation by checking
	// directly here.
	if level <= PanicLevel {
		panic(newEntry)
	}
}

func (entry *Entry) getBufferPool() (pool BufferPool) {
	if entry.Logger.BufferPool != nil {
		return entry.Logger.BufferPool
	}
	return bufferPool
}

func (entry *Entry) fireHooks() {
	var tmpHooks LevelHooks
	entry.Logger.mu.Lock()
	tmpHooks = make(LevelHooks, len(entry.Logger.Hooks))
	for k, v := range entry.Logger.Hooks {
		tmpHooks[k] = v
	}
	entry.Logger.mu.Unlock()

	err := tmpHooks.Fire(entry.Level, entry)
	if err != nil {
		fmt.Fprintf(os.Stderr, "Failed to fire hook: %v\n", err)
	}
}

func (entry *Entry) write() {
	entry.Logger.mu.Lock()
	defer entry.Logger.mu.Unlock()
	serialized, err := entry.Logger.Formatter.Format(entry)
	if err != nil {
		fmt.Fprintf(os.Stderr, "Failed to obtain reader, %v\n", err)
		return
	}
	if _, err := entry.Logger.Out.Write(serialized); err != nil {
		fmt.Fprintf(os.Stderr, "Failed to write to log, %v\n", err)
	}
}

// Log will log a message at the level given as parameter.
// Warning: using Log at Panic or Fatal level will not respectively Panic nor Exit.
// For this behaviour Entry.Panic or Entry.Fatal should be used instead.
func (entry *Entry) Log(level Level, args ...interface{}) {
	if entry.Logger.IsLevelEnabled(level) {
		entry.log(level, fmt.Sprint(args...))
	}
}

func (entry *Entry) Trace(args ...interface{}) {
	entry.Log(TraceLevel, args...)
}

func (entry *Entry) Debug(args ...interface{}) {
	entry.Log(DebugLevel, args...)
}

func (entry *Entry) Print(args ...interface{}) {
	entry.Info(args...)
}

func (entry *Entry) Info(args ...interface{}) {
	entry.Log(InfoLevel, args...)
}

func (entry *Entry) Warn(args ...interface{}) {
	entry.Log(WarnLevel, args...)
}

func (entry *Entry) Warning(args ...interface{}) {
	entry.Warn(args...)
}

func (entry *Entry) Error(args ...interface{}) {
	entry.Log(ErrorLevel, args...)
}

func (entry *Entry) Fatal(args ...interface{}) {
	entry.Log(FatalLevel, args...)
	entry.Logger.Exit(1)
}

func (entry *Entry) Panic(args ...interface{}) {
	entry.Log(PanicLevel, args...)
}

// Entry Printf family functions

func (entry *Entry) Logf(level Level, format string, args ...interface{}) {
	if entry.Logger.IsLevelEnabled(level) {
		entry.Log(level, fmt.Sprintf(format, args...))
	}
}

func (entry *Entry) Tracef(format string, args ...interface{}) {
	entry.Logf(TraceLevel, format, args...)
}

func (entry *Entry) Debugf(format string, args ...interface{}) {
	entry.Logf(DebugLevel, format, args...)
}

func (entry *Entry) Infof(format string, args ...interface{}) {
	entry.Logf(InfoLevel, format, args...)
}

func (entry *Entry) Printf(format string, args ...interface{}) {
	entry.Infof(format, args...)
}

func (entry *Entry) Warnf(format string, args ...interface{}) {
	entry.Logf(WarnLevel, format, args...)
}

func (entry *Entry) Warningf(format string, args ...interface{}) {
	entry.Warnf(format, args...)
}

func (entry *Entry) Errorf(format string, args ...interface{}) {
	entry.Logf(ErrorLevel, format, args...)
}

func (entry *Entry) Fatalf(format string, args ...interface{}) {
	entry.Logf(FatalLevel, format, args...)
	entry.Logger.Exit(1)
}

func (entry *Entry) Panicf(format string, args ...interface{}) {
	entry.Logf(PanicLevel, format, args...)
}

// Entry Println family functions

func (entry *Entry) Logln(level Level, args ...interface{}) {
	if entry.Logger.IsLevelEnabled(level) {
		entry.Log(level, entry.sprintlnn(args...))
	}
}

func (entry *Entry) Traceln(args ...interface{}) {
	entry.Logln(TraceLevel, args...)
}

func (entry *Entry) Debugln(args ...interface{}) {
	entry.Logln(DebugLevel, args...)
}

func (entry *Entry) Infoln(args ...interface{}) {
	entry.Logln(InfoLevel, args...)
}

func (entry *Entry) Println(args ...interface{}) {
	entry.Infoln(args...)
}

func (entry *Entry) Warnln(args ...interface{}) {
	entry.Logln(WarnLevel, args...)
}

func (entry *Entry) Warningln(args ...interface{}) {
	entry.Warnln(args...)
}

func (entry *Entry) Errorln(args ...interface{}) {
	entry.Logln(ErrorLevel, args...)
}

func (entry *Entry) Fatalln(args ...interface{}) {
	entry.Logln(FatalLevel, args...)
	entry.Logger.Exit(1)
}

func (entry *Entry) Panicln(args ...interface{}) {
	entry.Logln(PanicLevel, args...)
}

// Sprintlnn => Sprint no newline. This is to get the behavior of how
// fmt.Sprintln where spaces are always added between operands, regardless of
// their type. Instead of vendoring the Sprintln implementation to spare a
// string allocation, we do the simplest thing.
func (entry *Entry) sprintlnn(args ...interface{}) string {
	msg := fmt.Sprintln(args...)
	return msg[:len(msg)-1]
}
   07070100000AD2000081A4000000000000000000000001645E367C00001C47000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus/exported.go package logrus

import (
	"context"
	"io"
	"time"
)

var (
	// std is the name of the standard logger in stdlib `log`
	std = New()
)

func StandardLogger() *Logger {
	return std
}

// SetOutput sets the standard logger output.
func SetOutput(out io.Writer) {
	std.SetOutput(out)
}

// SetFormatter sets the standard logger formatter.
func SetFormatter(formatter Formatter) {
	std.SetFormatter(formatter)
}

// SetReportCaller sets whether the standard logger will include the calling
// method as a field.
func SetReportCaller(include bool) {
	std.SetReportCaller(include)
}

// SetLevel sets the standard logger level.
func SetLevel(level Level) {
	std.SetLevel(level)
}

// GetLevel returns the standard logger level.
func GetLevel() Level {
	return std.GetLevel()
}

// IsLevelEnabled checks if the log level of the standard logger is greater than the level param
func IsLevelEnabled(level Level) bool {
	return std.IsLevelEnabled(level)
}

// AddHook adds a hook to the standard logger hooks.
func AddHook(hook Hook) {
	std.AddHook(hook)
}

// WithError creates an entry from the standard logger and adds an error to it, using the value defined in ErrorKey as key.
func WithError(err error) *Entry {
	return std.WithField(ErrorKey, err)
}

// WithContext creates an entry from the standard logger and adds a context to it.
func WithContext(ctx context.Context) *Entry {
	return std.WithContext(ctx)
}

// WithField creates an entry from the standard logger and adds a field to
// it. If you want multiple fields, use `WithFields`.
//
// Note that it doesn't log until you call Debug, Print, Info, Warn, Fatal
// or Panic on the Entry it returns.
func WithField(key string, value interface{}) *Entry {
	return std.WithField(key, value)
}

// WithFields creates an entry from the standard logger and adds multiple
// fields to it. This is simply a helper for `WithField`, invoking it
// once for each field.
//
// Note that it doesn't log until you call Debug, Print, Info, Warn, Fatal
// or Panic on the Entry it returns.
func WithFields(fields Fields) *Entry {
	return std.WithFields(fields)
}

// WithTime creates an entry from the standard logger and overrides the time of
// logs generated with it.
//
// Note that it doesn't log until you call Debug, Print, Info, Warn, Fatal
// or Panic on the Entry it returns.
func WithTime(t time.Time) *Entry {
	return std.WithTime(t)
}

// Trace logs a message at level Trace on the standard logger.
func Trace(args ...interface{}) {
	std.Trace(args...)
}

// Debug logs a message at level Debug on the standard logger.
func Debug(args ...interface{}) {
	std.Debug(args...)
}

// Print logs a message at level Info on the standard logger.
func Print(args ...interface{}) {
	std.Print(args...)
}

// Info logs a message at level Info on the standard logger.
func Info(args ...interface{}) {
	std.Info(args...)
}

// Warn logs a message at level Warn on the standard logger.
func Warn(args ...interface{}) {
	std.Warn(args...)
}

// Warning logs a message at level Warn on the standard logger.
func Warning(args ...interface{}) {
	std.Warning(args...)
}

// Error logs a message at level Error on the standard logger.
func Error(args ...interface{}) {
	std.Error(args...)
}

// Panic logs a message at level Panic on the standard logger.
func Panic(args ...interface{}) {
	std.Panic(args...)
}

// Fatal logs a message at level Fatal on the standard logger then the process will exit with status set to 1.
func Fatal(args ...interface{}) {
	std.Fatal(args...)
}

// TraceFn logs a message from a func at level Trace on the standard logger.
func TraceFn(fn LogFunction) {
	std.TraceFn(fn)
}

// DebugFn logs a message from a func at level Debug on the standard logger.
func DebugFn(fn LogFunction) {
	std.DebugFn(fn)
}

// PrintFn logs a message from a func at level Info on the standard logger.
func PrintFn(fn LogFunction) {
	std.PrintFn(fn)
}

// InfoFn logs a message from a func at level Info on the standard logger.
func InfoFn(fn LogFunction) {
	std.InfoFn(fn)
}

// WarnFn logs a message from a func at level Warn on the standard logger.
func WarnFn(fn LogFunction) {
	std.WarnFn(fn)
}

// WarningFn logs a message from a func at level Warn on the standard logger.
func WarningFn(fn LogFunction) {
	std.WarningFn(fn)
}

// ErrorFn logs a message from a func at level Error on the standard logger.
func ErrorFn(fn LogFunction) {
	std.ErrorFn(fn)
}

// PanicFn logs a message from a func at level Panic on the standard logger.
func PanicFn(fn LogFunction) {
	std.PanicFn(fn)
}

// FatalFn logs a message from a func at level Fatal on the standard logger then the process will exit with status set to 1.
func FatalFn(fn LogFunction) {
	std.FatalFn(fn)
}

// Tracef logs a message at level Trace on the standard logger.
func Tracef(format string, args ...interface{}) {
	std.Tracef(format, args...)
}

// Debugf logs a message at level Debug on the standard logger.
func Debugf(format string, args ...interface{}) {
	std.Debugf(format, args...)
}

// Printf logs a message at level Info on the standard logger.
func Printf(format string, args ...interface{}) {
	std.Printf(format, args...)
}

// Infof logs a message at level Info on the standard logger.
func Infof(format string, args ...interface{}) {
	std.Infof(format, args...)
}

// Warnf logs a message at level Warn on the standard logger.
func Warnf(format string, args ...interface{}) {
	std.Warnf(format, args...)
}

// Warningf logs a message at level Warn on the standard logger.
func Warningf(format string, args ...interface{}) {
	std.Warningf(format, args...)
}

// Errorf logs a message at level Error on the standard logger.
func Errorf(format string, args ...interface{}) {
	std.Errorf(format, args...)
}

// Panicf logs a message at level Panic on the standard logger.
func Panicf(format string, args ...interface{}) {
	std.Panicf(format, args...)
}

// Fatalf logs a message at level Fatal on the standard logger then the process will exit with status set to 1.
func Fatalf(format string, args ...interface{}) {
	std.Fatalf(format, args...)
}

// Traceln logs a message at level Trace on the standard logger.
func Traceln(args ...interface{}) {
	std.Traceln(args...)
}

// Debugln logs a message at level Debug on the standard logger.
func Debugln(args ...interface{}) {
	std.Debugln(args...)
}

// Println logs a message at level Info on the standard logger.
func Println(args ...interface{}) {
	std.Println(args...)
}

// Infoln logs a message at level Info on the standard logger.
func Infoln(args ...interface{}) {
	std.Infoln(args...)
}

// Warnln logs a message at level Warn on the standard logger.
func Warnln(args ...interface{}) {
	std.Warnln(args...)
}

// Warningln logs a message at level Warn on the standard logger.
func Warningln(args ...interface{}) {
	std.Warningln(args...)
}

// Errorln logs a message at level Error on the standard logger.
func Errorln(args ...interface{}) {
	std.Errorln(args...)
}

// Panicln logs a message at level Panic on the standard logger.
func Panicln(args ...interface{}) {
	std.Panicln(args...)
}

// Fatalln logs a message at level Fatal on the standard logger then the process will exit with status set to 1.
func Fatalln(args ...interface{}) {
	std.Fatalln(args...)
}
 07070100000AD3000081A4000000000000000000000001645E367C00000931000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus/formatter.go    package logrus

import "time"

// Default key names for the default fields
const (
	defaultTimestampFormat = time.RFC3339
	FieldKeyMsg            = "msg"
	FieldKeyLevel          = "level"
	FieldKeyTime           = "time"
	FieldKeyLogrusError    = "logrus_error"
	FieldKeyFunc           = "func"
	FieldKeyFile           = "file"
)

// The Formatter interface is used to implement a custom Formatter. It takes an
// `Entry`. It exposes all the fields, including the default ones:
//
// * `entry.Data["msg"]`. The message passed from Info, Warn, Error ..
// * `entry.Data["time"]`. The timestamp.
// * `entry.Data["level"]. The level the entry was logged at.
//
// Any additional fields added with `WithField` or `WithFields` are also in
// `entry.Data`. Format is expected to return an array of bytes which are then
// logged to `logger.Out`.
type Formatter interface {
	Format(*Entry) ([]byte, error)
}

// This is to not silently overwrite `time`, `msg`, `func` and `level` fields when
// dumping it. If this code wasn't there doing:
//
//  logrus.WithField("level", 1).Info("hello")
//
// Would just silently drop the user provided level. Instead with this code
// it'll logged as:
//
//  {"level": "info", "fields.level": 1, "msg": "hello", "time": "..."}
//
// It's not exported because it's still using Data in an opinionated way. It's to
// avoid code duplication between the two default formatters.
func prefixFieldClashes(data Fields, fieldMap FieldMap, reportCaller bool) {
	timeKey := fieldMap.resolve(FieldKeyTime)
	if t, ok := data[timeKey]; ok {
		data["fields."+timeKey] = t
		delete(data, timeKey)
	}

	msgKey := fieldMap.resolve(FieldKeyMsg)
	if m, ok := data[msgKey]; ok {
		data["fields."+msgKey] = m
		delete(data, msgKey)
	}

	levelKey := fieldMap.resolve(FieldKeyLevel)
	if l, ok := data[levelKey]; ok {
		data["fields."+levelKey] = l
		delete(data, levelKey)
	}

	logrusErrKey := fieldMap.resolve(FieldKeyLogrusError)
	if l, ok := data[logrusErrKey]; ok {
		data["fields."+logrusErrKey] = l
		delete(data, logrusErrKey)
	}

	// If reportCaller is not set, 'func' will not conflict.
	if reportCaller {
		funcKey := fieldMap.resolve(FieldKeyFunc)
		if l, ok := data[funcKey]; ok {
			data["fields."+funcKey] = l
		}
		fileKey := fieldMap.resolve(FieldKeyFile)
		if l, ok := data[fileKey]; ok {
			data["fields."+fileKey] = l
		}
	}
}
   07070100000AD4000081A4000000000000000000000001645E367C0000044D000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus/hooks.go    package logrus

// A hook to be fired when logging on the logging levels returned from
// `Levels()` on your implementation of the interface. Note that this is not
// fired in a goroutine or a channel with workers, you should handle such
// functionality yourself if your call is non-blocking and you don't wish for
// the logging calls for levels returned from `Levels()` to block.
type Hook interface {
	Levels() []Level
	Fire(*Entry) error
}

// Internal type for storing the hooks on a logger instance.
type LevelHooks map[Level][]Hook

// Add a hook to an instance of logger. This is called with
// `log.Hooks.Add(new(MyHook))` where `MyHook` implements the `Hook` interface.
func (hooks LevelHooks) Add(hook Hook) {
	for _, level := range hook.Levels() {
		hooks[level] = append(hooks[level], hook)
	}
}

// Fire all the hooks for the passed level. Used by `entry.log` to fire
// appropriate hooks for a log entry.
func (hooks LevelHooks) Fire(level Level, entry *Entry) error {
	for _, hook := range hooks[level] {
		if err := hook.Fire(entry); err != nil {
			return err
		}
	}

	return nil
}
   07070100000AD5000081A4000000000000000000000001645E367C00000D3D000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus/json_formatter.go   package logrus

import (
	"bytes"
	"encoding/json"
	"fmt"
	"runtime"
)

type fieldKey string

// FieldMap allows customization of the key names for default fields.
type FieldMap map[fieldKey]string

func (f FieldMap) resolve(key fieldKey) string {
	if k, ok := f[key]; ok {
		return k
	}

	return string(key)
}

// JSONFormatter formats logs into parsable json
type JSONFormatter struct {
	// TimestampFormat sets the format used for marshaling timestamps.
	// The format to use is the same than for time.Format or time.Parse from the standard
	// library.
	// The standard Library already provides a set of predefined format.
	TimestampFormat string

	// DisableTimestamp allows disabling automatic timestamps in output
	DisableTimestamp bool

	// DisableHTMLEscape allows disabling html escaping in output
	DisableHTMLEscape bool

	// DataKey allows users to put all the log entry parameters into a nested dictionary at a given key.
	DataKey string

	// FieldMap allows users to customize the names of keys for default fields.
	// As an example:
	// formatter := &JSONFormatter{
	//   	FieldMap: FieldMap{
	// 		 FieldKeyTime:  "@timestamp",
	// 		 FieldKeyLevel: "@level",
	// 		 FieldKeyMsg:   "@message",
	// 		 FieldKeyFunc:  "@caller",
	//    },
	// }
	FieldMap FieldMap

	// CallerPrettyfier can be set by the user to modify the content
	// of the function and file keys in the json data when ReportCaller is
	// activated. If any of the returned value is the empty string the
	// corresponding key will be removed from json fields.
	CallerPrettyfier func(*runtime.Frame) (function string, file string)

	// PrettyPrint will indent all json logs
	PrettyPrint bool
}

// Format renders a single log entry
func (f *JSONFormatter) Format(entry *Entry) ([]byte, error) {
	data := make(Fields, len(entry.Data)+4)
	for k, v := range entry.Data {
		switch v := v.(type) {
		case error:
			// Otherwise errors are ignored by `encoding/json`
			// https://github.com/sirupsen/logrus/issues/137
			data[k] = v.Error()
		default:
			data[k] = v
		}
	}

	if f.DataKey != "" {
		newData := make(Fields, 4)
		newData[f.DataKey] = data
		data = newData
	}

	prefixFieldClashes(data, f.FieldMap, entry.HasCaller())

	timestampFormat := f.TimestampFormat
	if timestampFormat == "" {
		timestampFormat = defaultTimestampFormat
	}

	if entry.err != "" {
		data[f.FieldMap.resolve(FieldKeyLogrusError)] = entry.err
	}
	if !f.DisableTimestamp {
		data[f.FieldMap.resolve(FieldKeyTime)] = entry.Time.Format(timestampFormat)
	}
	data[f.FieldMap.resolve(FieldKeyMsg)] = entry.Message
	data[f.FieldMap.resolve(FieldKeyLevel)] = entry.Level.String()
	if entry.HasCaller() {
		funcVal := entry.Caller.Function
		fileVal := fmt.Sprintf("%s:%d", entry.Caller.File, entry.Caller.Line)
		if f.CallerPrettyfier != nil {
			funcVal, fileVal = f.CallerPrettyfier(entry.Caller)
		}
		if funcVal != "" {
			data[f.FieldMap.resolve(FieldKeyFunc)] = funcVal
		}
		if fileVal != "" {
			data[f.FieldMap.resolve(FieldKeyFile)] = fileVal
		}
	}

	var b *bytes.Buffer
	if entry.Buffer != nil {
		b = entry.Buffer
	} else {
		b = &bytes.Buffer{}
	}

	encoder := json.NewEncoder(b)
	encoder.SetEscapeHTML(!f.DisableHTMLEscape)
	if f.PrettyPrint {
		encoder.SetIndent("", "  ")
	}
	if err := encoder.Encode(data); err != nil {
		return nil, fmt.Errorf("failed to marshal fields to JSON, %w", err)
	}

	return b.Bytes(), nil
}
   07070100000AD6000081A4000000000000000000000001645E367C00002A46000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus/logger.go   package logrus

import (
	"context"
	"io"
	"os"
	"sync"
	"sync/atomic"
	"time"
)

// LogFunction For big messages, it can be more efficient to pass a function
// and only call it if the log level is actually enables rather than
// generating the log message and then checking if the level is enabled
type LogFunction func() []interface{}

type Logger struct {
	// The logs are `io.Copy`'d to this in a mutex. It's common to set this to a
	// file, or leave it default which is `os.Stderr`. You can also set this to
	// something more adventurous, such as logging to Kafka.
	Out io.Writer
	// Hooks for the logger instance. These allow firing events based on logging
	// levels and log entries. For example, to send errors to an error tracking
	// service, log to StatsD or dump the core on fatal errors.
	Hooks LevelHooks
	// All log entries pass through the formatter before logged to Out. The
	// included formatters are `TextFormatter` and `JSONFormatter` for which
	// TextFormatter is the default. In development (when a TTY is attached) it
	// logs with colors, but to a file it wouldn't. You can easily implement your
	// own that implements the `Formatter` interface, see the `README` or included
	// formatters for examples.
	Formatter Formatter

	// Flag for whether to log caller info (off by default)
	ReportCaller bool

	// The logging level the logger should log at. This is typically (and defaults
	// to) `logrus.Info`, which allows Info(), Warn(), Error() and Fatal() to be
	// logged.
	Level Level
	// Used to sync writing to the log. Locking is enabled by Default
	mu MutexWrap
	// Reusable empty entry
	entryPool sync.Pool
	// Function to exit the application, defaults to `os.Exit()`
	ExitFunc exitFunc
	// The buffer pool used to format the log. If it is nil, the default global
	// buffer pool will be used.
	BufferPool BufferPool
}

type exitFunc func(int)

type MutexWrap struct {
	lock     sync.Mutex
	disabled bool
}

func (mw *MutexWrap) Lock() {
	if !mw.disabled {
		mw.lock.Lock()
	}
}

func (mw *MutexWrap) Unlock() {
	if !mw.disabled {
		mw.lock.Unlock()
	}
}

func (mw *MutexWrap) Disable() {
	mw.disabled = true
}

// Creates a new logger. Configuration should be set by changing `Formatter`,
// `Out` and `Hooks` directly on the default logger instance. You can also just
// instantiate your own:
//
//    var log = &logrus.Logger{
//      Out: os.Stderr,
//      Formatter: new(logrus.TextFormatter),
//      Hooks: make(logrus.LevelHooks),
//      Level: logrus.DebugLevel,
//    }
//
// It's recommended to make this a global instance called `log`.
func New() *Logger {
	return &Logger{
		Out:          os.Stderr,
		Formatter:    new(TextFormatter),
		Hooks:        make(LevelHooks),
		Level:        InfoLevel,
		ExitFunc:     os.Exit,
		ReportCaller: false,
	}
}

func (logger *Logger) newEntry() *Entry {
	entry, ok := logger.entryPool.Get().(*Entry)
	if ok {
		return entry
	}
	return NewEntry(logger)
}

func (logger *Logger) releaseEntry(entry *Entry) {
	entry.Data = map[string]interface{}{}
	logger.entryPool.Put(entry)
}

// WithField allocates a new entry and adds a field to it.
// Debug, Print, Info, Warn, Error, Fatal or Panic must be then applied to
// this new returned entry.
// If you want multiple fields, use `WithFields`.
func (logger *Logger) WithField(key string, value interface{}) *Entry {
	entry := logger.newEntry()
	defer logger.releaseEntry(entry)
	return entry.WithField(key, value)
}

// Adds a struct of fields to the log entry. All it does is call `WithField` for
// each `Field`.
func (logger *Logger) WithFields(fields Fields) *Entry {
	entry := logger.newEntry()
	defer logger.releaseEntry(entry)
	return entry.WithFields(fields)
}

// Add an error as single field to the log entry.  All it does is call
// `WithError` for the given `error`.
func (logger *Logger) WithError(err error) *Entry {
	entry := logger.newEntry()
	defer logger.releaseEntry(entry)
	return entry.WithError(err)
}

// Add a context to the log entry.
func (logger *Logger) WithContext(ctx context.Context) *Entry {
	entry := logger.newEntry()
	defer logger.releaseEntry(entry)
	return entry.WithContext(ctx)
}

// Overrides the time of the log entry.
func (logger *Logger) WithTime(t time.Time) *Entry {
	entry := logger.newEntry()
	defer logger.releaseEntry(entry)
	return entry.WithTime(t)
}

func (logger *Logger) Logf(level Level, format string, args ...interface{}) {
	if logger.IsLevelEnabled(level) {
		entry := logger.newEntry()
		entry.Logf(level, format, args...)
		logger.releaseEntry(entry)
	}
}

func (logger *Logger) Tracef(format string, args ...interface{}) {
	logger.Logf(TraceLevel, format, args...)
}

func (logger *Logger) Debugf(format string, args ...interface{}) {
	logger.Logf(DebugLevel, format, args...)
}

func (logger *Logger) Infof(format string, args ...interface{}) {
	logger.Logf(InfoLevel, format, args...)
}

func (logger *Logger) Printf(format string, args ...interface{}) {
	entry := logger.newEntry()
	entry.Printf(format, args...)
	logger.releaseEntry(entry)
}

func (logger *Logger) Warnf(format string, args ...interface{}) {
	logger.Logf(WarnLevel, format, args...)
}

func (logger *Logger) Warningf(format string, args ...interface{}) {
	logger.Warnf(format, args...)
}

func (logger *Logger) Errorf(format string, args ...interface{}) {
	logger.Logf(ErrorLevel, format, args...)
}

func (logger *Logger) Fatalf(format string, args ...interface{}) {
	logger.Logf(FatalLevel, format, args...)
	logger.Exit(1)
}

func (logger *Logger) Panicf(format string, args ...interface{}) {
	logger.Logf(PanicLevel, format, args...)
}

// Log will log a message at the level given as parameter.
// Warning: using Log at Panic or Fatal level will not respectively Panic nor Exit.
// For this behaviour Logger.Panic or Logger.Fatal should be used instead.
func (logger *Logger) Log(level Level, args ...interface{}) {
	if logger.IsLevelEnabled(level) {
		entry := logger.newEntry()
		entry.Log(level, args...)
		logger.releaseEntry(entry)
	}
}

func (logger *Logger) LogFn(level Level, fn LogFunction) {
	if logger.IsLevelEnabled(level) {
		entry := logger.newEntry()
		entry.Log(level, fn()...)
		logger.releaseEntry(entry)
	}
}

func (logger *Logger) Trace(args ...interface{}) {
	logger.Log(TraceLevel, args...)
}

func (logger *Logger) Debug(args ...interface{}) {
	logger.Log(DebugLevel, args...)
}

func (logger *Logger) Info(args ...interface{}) {
	logger.Log(InfoLevel, args...)
}

func (logger *Logger) Print(args ...interface{}) {
	entry := logger.newEntry()
	entry.Print(args...)
	logger.releaseEntry(entry)
}

func (logger *Logger) Warn(args ...interface{}) {
	logger.Log(WarnLevel, args...)
}

func (logger *Logger) Warning(args ...interface{}) {
	logger.Warn(args...)
}

func (logger *Logger) Error(args ...interface{}) {
	logger.Log(ErrorLevel, args...)
}

func (logger *Logger) Fatal(args ...interface{}) {
	logger.Log(FatalLevel, args...)
	logger.Exit(1)
}

func (logger *Logger) Panic(args ...interface{}) {
	logger.Log(PanicLevel, args...)
}

func (logger *Logger) TraceFn(fn LogFunction) {
	logger.LogFn(TraceLevel, fn)
}

func (logger *Logger) DebugFn(fn LogFunction) {
	logger.LogFn(DebugLevel, fn)
}

func (logger *Logger) InfoFn(fn LogFunction) {
	logger.LogFn(InfoLevel, fn)
}

func (logger *Logger) PrintFn(fn LogFunction) {
	entry := logger.newEntry()
	entry.Print(fn()...)
	logger.releaseEntry(entry)
}

func (logger *Logger) WarnFn(fn LogFunction) {
	logger.LogFn(WarnLevel, fn)
}

func (logger *Logger) WarningFn(fn LogFunction) {
	logger.WarnFn(fn)
}

func (logger *Logger) ErrorFn(fn LogFunction) {
	logger.LogFn(ErrorLevel, fn)
}

func (logger *Logger) FatalFn(fn LogFunction) {
	logger.LogFn(FatalLevel, fn)
	logger.Exit(1)
}

func (logger *Logger) PanicFn(fn LogFunction) {
	logger.LogFn(PanicLevel, fn)
}

func (logger *Logger) Logln(level Level, args ...interface{}) {
	if logger.IsLevelEnabled(level) {
		entry := logger.newEntry()
		entry.Logln(level, args...)
		logger.releaseEntry(entry)
	}
}

func (logger *Logger) Traceln(args ...interface{}) {
	logger.Logln(TraceLevel, args...)
}

func (logger *Logger) Debugln(args ...interface{}) {
	logger.Logln(DebugLevel, args...)
}

func (logger *Logger) Infoln(args ...interface{}) {
	logger.Logln(InfoLevel, args...)
}

func (logger *Logger) Println(args ...interface{}) {
	entry := logger.newEntry()
	entry.Println(args...)
	logger.releaseEntry(entry)
}

func (logger *Logger) Warnln(args ...interface{}) {
	logger.Logln(WarnLevel, args...)
}

func (logger *Logger) Warningln(args ...interface{}) {
	logger.Warnln(args...)
}

func (logger *Logger) Errorln(args ...interface{}) {
	logger.Logln(ErrorLevel, args...)
}

func (logger *Logger) Fatalln(args ...interface{}) {
	logger.Logln(FatalLevel, args...)
	logger.Exit(1)
}

func (logger *Logger) Panicln(args ...interface{}) {
	logger.Logln(PanicLevel, args...)
}

func (logger *Logger) Exit(code int) {
	runHandlers()
	if logger.ExitFunc == nil {
		logger.ExitFunc = os.Exit
	}
	logger.ExitFunc(code)
}

//When file is opened with appending mode, it's safe to
//write concurrently to a file (within 4k message on Linux).
//In these cases user can choose to disable the lock.
func (logger *Logger) SetNoLock() {
	logger.mu.Disable()
}

func (logger *Logger) level() Level {
	return Level(atomic.LoadUint32((*uint32)(&logger.Level)))
}

// SetLevel sets the logger level.
func (logger *Logger) SetLevel(level Level) {
	atomic.StoreUint32((*uint32)(&logger.Level), uint32(level))
}

// GetLevel returns the logger level.
func (logger *Logger) GetLevel() Level {
	return logger.level()
}

// AddHook adds a hook to the logger hooks.
func (logger *Logger) AddHook(hook Hook) {
	logger.mu.Lock()
	defer logger.mu.Unlock()
	logger.Hooks.Add(hook)
}

// IsLevelEnabled checks if the log level of the logger is greater than the level param
func (logger *Logger) IsLevelEnabled(level Level) bool {
	return logger.level() >= level
}

// SetFormatter sets the logger formatter.
func (logger *Logger) SetFormatter(formatter Formatter) {
	logger.mu.Lock()
	defer logger.mu.Unlock()
	logger.Formatter = formatter
}

// SetOutput sets the logger output.
func (logger *Logger) SetOutput(output io.Writer) {
	logger.mu.Lock()
	defer logger.mu.Unlock()
	logger.Out = output
}

func (logger *Logger) SetReportCaller(reportCaller bool) {
	logger.mu.Lock()
	defer logger.mu.Unlock()
	logger.ReportCaller = reportCaller
}

// ReplaceHooks replaces the logger hooks and returns the old ones
func (logger *Logger) ReplaceHooks(hooks LevelHooks) LevelHooks {
	logger.mu.Lock()
	oldHooks := logger.Hooks
	logger.Hooks = hooks
	logger.mu.Unlock()
	return oldHooks
}

// SetBufferPool sets the logger buffer pool.
func (logger *Logger) SetBufferPool(pool BufferPool) {
	logger.mu.Lock()
	defer logger.mu.Unlock()
	logger.BufferPool = pool
}
  07070100000AD7000081A4000000000000000000000001645E367C000012C0000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus/logrus.go   package logrus

import (
	"fmt"
	"log"
	"strings"
)

// Fields type, used to pass to `WithFields`.
type Fields map[string]interface{}

// Level type
type Level uint32

// Convert the Level to a string. E.g. PanicLevel becomes "panic".
func (level Level) String() string {
	if b, err := level.MarshalText(); err == nil {
		return string(b)
	} else {
		return "unknown"
	}
}

// ParseLevel takes a string level and returns the Logrus log level constant.
func ParseLevel(lvl string) (Level, error) {
	switch strings.ToLower(lvl) {
	case "panic":
		return PanicLevel, nil
	case "fatal":
		return FatalLevel, nil
	case "error":
		return ErrorLevel, nil
	case "warn", "warning":
		return WarnLevel, nil
	case "info":
		return InfoLevel, nil
	case "debug":
		return DebugLevel, nil
	case "trace":
		return TraceLevel, nil
	}

	var l Level
	return l, fmt.Errorf("not a valid logrus Level: %q", lvl)
}

// UnmarshalText implements encoding.TextUnmarshaler.
func (level *Level) UnmarshalText(text []byte) error {
	l, err := ParseLevel(string(text))
	if err != nil {
		return err
	}

	*level = l

	return nil
}

func (level Level) MarshalText() ([]byte, error) {
	switch level {
	case TraceLevel:
		return []byte("trace"), nil
	case DebugLevel:
		return []byte("debug"), nil
	case InfoLevel:
		return []byte("info"), nil
	case WarnLevel:
		return []byte("warning"), nil
	case ErrorLevel:
		return []byte("error"), nil
	case FatalLevel:
		return []byte("fatal"), nil
	case PanicLevel:
		return []byte("panic"), nil
	}

	return nil, fmt.Errorf("not a valid logrus level %d", level)
}

// A constant exposing all logging levels
var AllLevels = []Level{
	PanicLevel,
	FatalLevel,
	ErrorLevel,
	WarnLevel,
	InfoLevel,
	DebugLevel,
	TraceLevel,
}

// These are the different logging levels. You can set the logging level to log
// on your instance of logger, obtained with `logrus.New()`.
const (
	// PanicLevel level, highest level of severity. Logs and then calls panic with the
	// message passed to Debug, Info, ...
	PanicLevel Level = iota
	// FatalLevel level. Logs and then calls `logger.Exit(1)`. It will exit even if the
	// logging level is set to Panic.
	FatalLevel
	// ErrorLevel level. Logs. Used for errors that should definitely be noted.
	// Commonly used for hooks to send errors to an error tracking service.
	ErrorLevel
	// WarnLevel level. Non-critical entries that deserve eyes.
	WarnLevel
	// InfoLevel level. General operational entries about what's going on inside the
	// application.
	InfoLevel
	// DebugLevel level. Usually only enabled when debugging. Very verbose logging.
	DebugLevel
	// TraceLevel level. Designates finer-grained informational events than the Debug.
	TraceLevel
)

// Won't compile if StdLogger can't be realized by a log.Logger
var (
	_ StdLogger = &log.Logger{}
	_ StdLogger = &Entry{}
	_ StdLogger = &Logger{}
)

// StdLogger is what your logrus-enabled library should take, that way
// it'll accept a stdlib logger and a logrus logger. There's no standard
// interface, this is the closest we get, unfortunately.
type StdLogger interface {
	Print(...interface{})
	Printf(string, ...interface{})
	Println(...interface{})

	Fatal(...interface{})
	Fatalf(string, ...interface{})
	Fatalln(...interface{})

	Panic(...interface{})
	Panicf(string, ...interface{})
	Panicln(...interface{})
}

// The FieldLogger interface generalizes the Entry and Logger types
type FieldLogger interface {
	WithField(key string, value interface{}) *Entry
	WithFields(fields Fields) *Entry
	WithError(err error) *Entry

	Debugf(format string, args ...interface{})
	Infof(format string, args ...interface{})
	Printf(format string, args ...interface{})
	Warnf(format string, args ...interface{})
	Warningf(format string, args ...interface{})
	Errorf(format string, args ...interface{})
	Fatalf(format string, args ...interface{})
	Panicf(format string, args ...interface{})

	Debug(args ...interface{})
	Info(args ...interface{})
	Print(args ...interface{})
	Warn(args ...interface{})
	Warning(args ...interface{})
	Error(args ...interface{})
	Fatal(args ...interface{})
	Panic(args ...interface{})

	Debugln(args ...interface{})
	Infoln(args ...interface{})
	Println(args ...interface{})
	Warnln(args ...interface{})
	Warningln(args ...interface{})
	Errorln(args ...interface{})
	Fatalln(args ...interface{})
	Panicln(args ...interface{})

	// IsDebugEnabled() bool
	// IsInfoEnabled() bool
	// IsWarnEnabled() bool
	// IsErrorEnabled() bool
	// IsFatalEnabled() bool
	// IsPanicEnabled() bool
}

// Ext1FieldLogger (the first extension to FieldLogger) is superfluous, it is
// here for consistancy. Do not use. Use Logger or Entry instead.
type Ext1FieldLogger interface {
	FieldLogger
	Tracef(format string, args ...interface{})
	Trace(args ...interface{})
	Traceln(args ...interface{})
}
07070100000AD8000081A4000000000000000000000001645E367C0000006F000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus/terminal_check_appengine.go // +build appengine

package logrus

import (
	"io"
)

func checkIfTerminal(w io.Writer) bool {
	return true
}
 07070100000AD9000081A4000000000000000000000001645E367C00000103000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus/terminal_check_bsd.go   // +build darwin dragonfly freebsd netbsd openbsd
// +build !js

package logrus

import "golang.org/x/sys/unix"

const ioctlReadTermios = unix.TIOCGETA

func isTerminal(fd int) bool {
	_, err := unix.IoctlGetTermios(fd, ioctlReadTermios)
	return err == nil
}
 07070100000ADA000081A4000000000000000000000001645E367C0000004D000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus/terminal_check_js.go    // +build js

package logrus

func isTerminal(fd int) bool {
	return false
}
   07070100000ADB000081A4000000000000000000000001645E367C00000074000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus/terminal_check_no_terminal.go   // +build js nacl plan9

package logrus

import (
	"io"
)

func checkIfTerminal(w io.Writer) bool {
	return false
}
07070100000ADC000081A4000000000000000000000001645E367C000000E8000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus/terminal_check_notappengine.go  // +build !appengine,!js,!windows,!nacl,!plan9

package logrus

import (
	"io"
	"os"
)

func checkIfTerminal(w io.Writer) bool {
	switch v := w.(type) {
	case *os.File:
		return isTerminal(int(v.Fd()))
	default:
		return false
	}
}
07070100000ADD000081A4000000000000000000000001645E367C000000E0000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus/terminal_check_solaris.go   package logrus

import (
	"golang.org/x/sys/unix"
)

// IsTerminal returns true if the given file descriptor is a terminal.
func isTerminal(fd int) bool {
	_, err := unix.IoctlGetTermio(fd, unix.TCGETA)
	return err == nil
}
07070100000ADE000081A4000000000000000000000001645E367C000000E7000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus/terminal_check_unix.go  // +build linux aix zos
// +build !js

package logrus

import "golang.org/x/sys/unix"

const ioctlReadTermios = unix.TCGETS

func isTerminal(fd int) bool {
	_, err := unix.IoctlGetTermios(fd, ioctlReadTermios)
	return err == nil
}
 07070100000ADF000081A4000000000000000000000001645E367C000001EA000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus/terminal_check_windows.go   // +build !appengine,!js,windows

package logrus

import (
	"io"
	"os"

	"golang.org/x/sys/windows"
)

func checkIfTerminal(w io.Writer) bool {
	switch v := w.(type) {
	case *os.File:
		handle := windows.Handle(v.Fd())
		var mode uint32
		if err := windows.GetConsoleMode(handle, &mode); err != nil {
			return false
		}
		mode |= windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING
		if err := windows.SetConsoleMode(handle, mode); err != nil {
			return false
		}
		return true
	}
	return false
}
  07070100000AE0000081A4000000000000000000000001645E367C000023D1000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus/text_formatter.go   package logrus

import (
	"bytes"
	"fmt"
	"os"
	"runtime"
	"sort"
	"strconv"
	"strings"
	"sync"
	"time"
	"unicode/utf8"
)

const (
	red    = 31
	yellow = 33
	blue   = 36
	gray   = 37
)

var baseTimestamp time.Time

func init() {
	baseTimestamp = time.Now()
}

// TextFormatter formats logs into text
type TextFormatter struct {
	// Set to true to bypass checking for a TTY before outputting colors.
	ForceColors bool

	// Force disabling colors.
	DisableColors bool

	// Force quoting of all values
	ForceQuote bool

	// DisableQuote disables quoting for all values.
	// DisableQuote will have a lower priority than ForceQuote.
	// If both of them are set to true, quote will be forced on all values.
	DisableQuote bool

	// Override coloring based on CLICOLOR and CLICOLOR_FORCE. - https://bixense.com/clicolors/
	EnvironmentOverrideColors bool

	// Disable timestamp logging. useful when output is redirected to logging
	// system that already adds timestamps.
	DisableTimestamp bool

	// Enable logging the full timestamp when a TTY is attached instead of just
	// the time passed since beginning of execution.
	FullTimestamp bool

	// TimestampFormat to use for display when a full timestamp is printed.
	// The format to use is the same than for time.Format or time.Parse from the standard
	// library.
	// The standard Library already provides a set of predefined format.
	TimestampFormat string

	// The fields are sorted by default for a consistent output. For applications
	// that log extremely frequently and don't use the JSON formatter this may not
	// be desired.
	DisableSorting bool

	// The keys sorting function, when uninitialized it uses sort.Strings.
	SortingFunc func([]string)

	// Disables the truncation of the level text to 4 characters.
	DisableLevelTruncation bool

	// PadLevelText Adds padding the level text so that all the levels output at the same length
	// PadLevelText is a superset of the DisableLevelTruncation option
	PadLevelText bool

	// QuoteEmptyFields will wrap empty fields in quotes if true
	QuoteEmptyFields bool

	// Whether the logger's out is to a terminal
	isTerminal bool

	// FieldMap allows users to customize the names of keys for default fields.
	// As an example:
	// formatter := &TextFormatter{
	//     FieldMap: FieldMap{
	//         FieldKeyTime:  "@timestamp",
	//         FieldKeyLevel: "@level",
	//         FieldKeyMsg:   "@message"}}
	FieldMap FieldMap

	// CallerPrettyfier can be set by the user to modify the content
	// of the function and file keys in the data when ReportCaller is
	// activated. If any of the returned value is the empty string the
	// corresponding key will be removed from fields.
	CallerPrettyfier func(*runtime.Frame) (function string, file string)

	terminalInitOnce sync.Once

	// The max length of the level text, generated dynamically on init
	levelTextMaxLength int
}

func (f *TextFormatter) init(entry *Entry) {
	if entry.Logger != nil {
		f.isTerminal = checkIfTerminal(entry.Logger.Out)
	}
	// Get the max length of the level text
	for _, level := range AllLevels {
		levelTextLength := utf8.RuneCount([]byte(level.String()))
		if levelTextLength > f.levelTextMaxLength {
			f.levelTextMaxLength = levelTextLength
		}
	}
}

func (f *TextFormatter) isColored() bool {
	isColored := f.ForceColors || (f.isTerminal && (runtime.GOOS != "windows"))

	if f.EnvironmentOverrideColors {
		switch force, ok := os.LookupEnv("CLICOLOR_FORCE"); {
		case ok && force != "0":
			isColored = true
		case ok && force == "0", os.Getenv("CLICOLOR") == "0":
			isColored = false
		}
	}

	return isColored && !f.DisableColors
}

// Format renders a single log entry
func (f *TextFormatter) Format(entry *Entry) ([]byte, error) {
	data := make(Fields)
	for k, v := range entry.Data {
		data[k] = v
	}
	prefixFieldClashes(data, f.FieldMap, entry.HasCaller())
	keys := make([]string, 0, len(data))
	for k := range data {
		keys = append(keys, k)
	}

	var funcVal, fileVal string

	fixedKeys := make([]string, 0, 4+len(data))
	if !f.DisableTimestamp {
		fixedKeys = append(fixedKeys, f.FieldMap.resolve(FieldKeyTime))
	}
	fixedKeys = append(fixedKeys, f.FieldMap.resolve(FieldKeyLevel))
	if entry.Message != "" {
		fixedKeys = append(fixedKeys, f.FieldMap.resolve(FieldKeyMsg))
	}
	if entry.err != "" {
		fixedKeys = append(fixedKeys, f.FieldMap.resolve(FieldKeyLogrusError))
	}
	if entry.HasCaller() {
		if f.CallerPrettyfier != nil {
			funcVal, fileVal = f.CallerPrettyfier(entry.Caller)
		} else {
			funcVal = entry.Caller.Function
			fileVal = fmt.Sprintf("%s:%d", entry.Caller.File, entry.Caller.Line)
		}

		if funcVal != "" {
			fixedKeys = append(fixedKeys, f.FieldMap.resolve(FieldKeyFunc))
		}
		if fileVal != "" {
			fixedKeys = append(fixedKeys, f.FieldMap.resolve(FieldKeyFile))
		}
	}

	if !f.DisableSorting {
		if f.SortingFunc == nil {
			sort.Strings(keys)
			fixedKeys = append(fixedKeys, keys...)
		} else {
			if !f.isColored() {
				fixedKeys = append(fixedKeys, keys...)
				f.SortingFunc(fixedKeys)
			} else {
				f.SortingFunc(keys)
			}
		}
	} else {
		fixedKeys = append(fixedKeys, keys...)
	}

	var b *bytes.Buffer
	if entry.Buffer != nil {
		b = entry.Buffer
	} else {
		b = &bytes.Buffer{}
	}

	f.terminalInitOnce.Do(func() { f.init(entry) })

	timestampFormat := f.TimestampFormat
	if timestampFormat == "" {
		timestampFormat = defaultTimestampFormat
	}
	if f.isColored() {
		f.printColored(b, entry, keys, data, timestampFormat)
	} else {

		for _, key := range fixedKeys {
			var value interface{}
			switch {
			case key == f.FieldMap.resolve(FieldKeyTime):
				value = entry.Time.Format(timestampFormat)
			case key == f.FieldMap.resolve(FieldKeyLevel):
				value = entry.Level.String()
			case key == f.FieldMap.resolve(FieldKeyMsg):
				value = entry.Message
			case key == f.FieldMap.resolve(FieldKeyLogrusError):
				value = entry.err
			case key == f.FieldMap.resolve(FieldKeyFunc) && entry.HasCaller():
				value = funcVal
			case key == f.FieldMap.resolve(FieldKeyFile) && entry.HasCaller():
				value = fileVal
			default:
				value = data[key]
			}
			f.appendKeyValue(b, key, value)
		}
	}

	b.WriteByte('\n')
	return b.Bytes(), nil
}

func (f *TextFormatter) printColored(b *bytes.Buffer, entry *Entry, keys []string, data Fields, timestampFormat string) {
	var levelColor int
	switch entry.Level {
	case DebugLevel, TraceLevel:
		levelColor = gray
	case WarnLevel:
		levelColor = yellow
	case ErrorLevel, FatalLevel, PanicLevel:
		levelColor = red
	case InfoLevel:
		levelColor = blue
	default:
		levelColor = blue
	}

	levelText := strings.ToUpper(entry.Level.String())
	if !f.DisableLevelTruncation && !f.PadLevelText {
		levelText = levelText[0:4]
	}
	if f.PadLevelText {
		// Generates the format string used in the next line, for example "%-6s" or "%-7s".
		// Based on the max level text length.
		formatString := "%-" + strconv.Itoa(f.levelTextMaxLength) + "s"
		// Formats the level text by appending spaces up to the max length, for example:
		// 	- "INFO   "
		//	- "WARNING"
		levelText = fmt.Sprintf(formatString, levelText)
	}

	// Remove a single newline if it already exists in the message to keep
	// the behavior of logrus text_formatter the same as the stdlib log package
	entry.Message = strings.TrimSuffix(entry.Message, "\n")

	caller := ""
	if entry.HasCaller() {
		funcVal := fmt.Sprintf("%s()", entry.Caller.Function)
		fileVal := fmt.Sprintf("%s:%d", entry.Caller.File, entry.Caller.Line)

		if f.CallerPrettyfier != nil {
			funcVal, fileVal = f.CallerPrettyfier(entry.Caller)
		}

		if fileVal == "" {
			caller = funcVal
		} else if funcVal == "" {
			caller = fileVal
		} else {
			caller = fileVal + " " + funcVal
		}
	}

	switch {
	case f.DisableTimestamp:
		fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m%s %-44s ", levelColor, levelText, caller, entry.Message)
	case !f.FullTimestamp:
		fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m[%04d]%s %-44s ", levelColor, levelText, int(entry.Time.Sub(baseTimestamp)/time.Second), caller, entry.Message)
	default:
		fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m[%s]%s %-44s ", levelColor, levelText, entry.Time.Format(timestampFormat), caller, entry.Message)
	}
	for _, k := range keys {
		v := data[k]
		fmt.Fprintf(b, " \x1b[%dm%s\x1b[0m=", levelColor, k)
		f.appendValue(b, v)
	}
}

func (f *TextFormatter) needsQuoting(text string) bool {
	if f.ForceQuote {
		return true
	}
	if f.QuoteEmptyFields && len(text) == 0 {
		return true
	}
	if f.DisableQuote {
		return false
	}
	for _, ch := range text {
		if !((ch >= 'a' && ch <= 'z') ||
			(ch >= 'A' && ch <= 'Z') ||
			(ch >= '0' && ch <= '9') ||
			ch == '-' || ch == '.' || ch == '_' || ch == '/' || ch == '@' || ch == '^' || ch == '+') {
			return true
		}
	}
	return false
}

func (f *TextFormatter) appendKeyValue(b *bytes.Buffer, key string, value interface{}) {
	if b.Len() > 0 {
		b.WriteByte(' ')
	}
	b.WriteString(key)
	b.WriteByte('=')
	f.appendValue(b, value)
}

func (f *TextFormatter) appendValue(b *bytes.Buffer, value interface{}) {
	stringVal, ok := value.(string)
	if !ok {
		stringVal = fmt.Sprint(value)
	}

	if !f.needsQuoting(stringVal) {
		b.WriteString(stringVal)
	} else {
		b.WriteString(fmt.Sprintf("%q", stringVal))
	}
}
   07070100000AE1000081A4000000000000000000000001645E367C000006D9000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/sirupsen/logrus/writer.go   package logrus

import (
	"bufio"
	"io"
	"runtime"
)

// Writer at INFO level. See WriterLevel for details.
func (logger *Logger) Writer() *io.PipeWriter {
	return logger.WriterLevel(InfoLevel)
}

// WriterLevel returns an io.Writer that can be used to write arbitrary text to
// the logger at the given log level. Each line written to the writer will be
// printed in the usual way using formatters and hooks. The writer is part of an
// io.Pipe and it is the callers responsibility to close the writer when done.
// This can be used to override the standard library logger easily.
func (logger *Logger) WriterLevel(level Level) *io.PipeWriter {
	return NewEntry(logger).WriterLevel(level)
}

func (entry *Entry) Writer() *io.PipeWriter {
	return entry.WriterLevel(InfoLevel)
}

func (entry *Entry) WriterLevel(level Level) *io.PipeWriter {
	reader, writer := io.Pipe()

	var printFunc func(args ...interface{})

	switch level {
	case TraceLevel:
		printFunc = entry.Trace
	case DebugLevel:
		printFunc = entry.Debug
	case InfoLevel:
		printFunc = entry.Info
	case WarnLevel:
		printFunc = entry.Warn
	case ErrorLevel:
		printFunc = entry.Error
	case FatalLevel:
		printFunc = entry.Fatal
	case PanicLevel:
		printFunc = entry.Panic
	default:
		printFunc = entry.Print
	}

	go entry.writerScanner(reader, printFunc)
	runtime.SetFinalizer(writer, writerFinalizer)

	return writer
}

func (entry *Entry) writerScanner(reader *io.PipeReader, printFunc func(args ...interface{})) {
	scanner := bufio.NewScanner(reader)
	for scanner.Scan() {
		printFunc(scanner.Text())
	}
	if err := scanner.Err(); err != nil {
		entry.Errorf("Error while reading from Writer: %s", err)
	}
	reader.Close()
}

func writerFinalizer(writer *io.PipeWriter) {
	writer.Close()
}
   07070100000AE2000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/spectrocloud-labs   07070100000AE3000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/spectrocloud-labs/herd  07070100000AE4000081A4000000000000000000000001645E367C00000202000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/spectrocloud-labs/herd/.golangci.yml    run:
  timeout: 5m
  tests: false
linters:
  enable:
    - revive # replacement for golint
    - dupl # check duplicated code
    - goconst # check strings that can turn into constants
    - gofmt # check fmt
    - goheader # Check license headers, only checks files in current year
    - goimports # check imports
    - gocyclo # check complexity
    - govet
    - gosimple
    - deadcode
    - ineffassign
    - unused
    - varcheck
    - staticcheck
    - typecheck
    - structcheck
    - godot
    - misspell  07070100000AE5000081A4000000000000000000000001645E367C00000344000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/spectrocloud-labs/herd/Earthfile    VERSION 0.6

ARG GO_VERSION=1.18
ARG GOLINT_VERSION=1.47.3

go-deps:
    ARG GO_VERSION
    FROM golang:$GO_VERSION
    WORKDIR /build
    COPY go.mod go.sum ./
    RUN go mod download
    RUN apt-get update
    SAVE ARTIFACT go.mod AS LOCAL go.mod
    SAVE ARTIFACT go.sum AS LOCAL go.sum

test:
    FROM +go-deps
    WORKDIR /build
    RUN go install -mod=mod github.com/onsi/ginkgo/v2/ginkgo
    COPY . .
    RUN ginkgo run --race --fail-fast --slow-spec-threshold 30s --covermode=atomic --coverprofile=coverage.out -p -r ./
    SAVE ARTIFACT coverage.out AS LOCAL coverage.out

lint:
    ARG GO_VERSION
    FROM golang:$GO_VERSION
    ARG GOLINT_VERSION
    RUN wget -O- -nv https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v$GOLINT_VERSION
    WORKDIR /build
    COPY . .
    RUN golangci-lint run07070100000AE6000081A4000000000000000000000001645E367C00000432000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/spectrocloud-labs/herd/LICENSE  MIT License

Copyright (c) 2023 Ettore Di Giacinto

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.  07070100000AE7000081A4000000000000000000000001645E367C000006F1000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/spectrocloud-labs/herd/README.md    # :checkered_flag:  herd

[![Go Reference](https://pkg.go.dev/badge/github.com/spectrocloud-labs/herd.svg)](https://pkg.go.dev/github.com/spectrocloud-labs/herd)
[![Lint](https://github.com/spectrocloud-labs/herd/actions/workflows/lint.yaml/badge.svg)](https://github.com/spectrocloud-labs/herd/actions/workflows/lint.yaml)
[![Unit tests](https://github.com/spectrocloud-labs/herd/actions/workflows/test.yaml/badge.svg)](https://github.com/spectrocloud-labs/herd/actions/workflows/test.yaml)

Herd is a Embedded Runnable DAG (H.E.R.D.). it aims to be a tiny library that allows to define arbitrary DAG, and associate job operations on them.

## Why?

I've found couple of nice libraries ([fx](https://github.com/uber-go/fx), or [dag](https://github.com/mostafa-asg/dag) for instance), however none of them satisfied my constraints:

- Tiny
- Completely tested (TDD)
- Define jobs in a DAG, runs them in sequence, execute the ones that can be done in parallel (parallel topological sorting) in separate go routines
- Provide some sorta of similarity with `systemd` concepts

## Usage

`herd` can be used as a library as such:

```golang
package main

import (
    "context"

    "github.com/spectrocloud-labs/herd"
)

func main() {

    // Generic usage
    g := herd.DAG()
    g.Add("name", ...)
    g.Run(context.TODO())

    // Example
    f := ""
    g.Add("foo", herd.WithCallback(func(ctx context.Context) error {
        f += "foo"
        // This executes after "bar" has ended successfully.
        return nil
    }), herd.WithDeps("bar"))

    g.Add("bar", herd.WithCallback(func(ctx context.Context) error {
        f += "bar"
        // This execute first
        return nil
    }))

    // Execute the DAG
    g.Run(context.Background())
    // f is "barfoo"
}

```   07070100000AE8000081A4000000000000000000000001645E367C00001129000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/spectrocloud-labs/herd/dag.go   package herd

import (
	"context"
	"fmt"
	"sync"

	"github.com/hashicorp/go-multierror"
	"github.com/kendru/darwin/go/depgraph"
	"github.com/samber/lo"
)

// Graph represents a directed graph.
type Graph struct {
	*depgraph.Graph
	ops            map[string]*OpState
	init           bool
	orphans        *sync.WaitGroup
	collectOrphans bool
}

// GraphEntry is the external representation of
// the operation to execute (OpState).
type GraphEntry struct {
	WithCallback                       bool
	Background                         bool
	Callback                           []func(context.Context) error
	Error                              error
	Ignored, Fatal, WeakDeps, Executed bool
	Name                               string
	Dependencies                       []string
	WeakDependencies                   []string
}

// DAG creates a new instance of a runnable Graph.
// A DAG is a Direct Acyclic Graph.
// The graph is walked, and depending on the dependencies it will run the jobs as requested.
// The Graph can be explored with `Analyze()`, extended with new operations with Add(),
// and finally being run with Run(context.Context).
func DAG(opts ...GraphOption) *Graph {
	g := &Graph{Graph: depgraph.New(), ops: make(map[string]*OpState), orphans: &sync.WaitGroup{}}
	for _, o := range opts {
		o(g)
	}
	if g.init {
		if err := g.Add("init"); err != nil {
			return nil
		}
	}
	return g
}

// Add adds a new operation to the graph.
// Requires a name (string), and accepts a list of options.
func (g *Graph) Add(name string, opts ...OpOption) error {
	state := &OpState{Mutex: sync.Mutex{}}

	for _, o := range opts {
		if err := o(name, state, g); err != nil {
			return err
		}
	}

	g.ops[name] = state

	if g.init && len(g.Graph.Dependents(name)) == 0 && name != "init" {
		if err := g.Graph.DependOn(name, "init"); err != nil {
			return err
		}
	}

	return nil
}

// Stage returns the DAG item state.
// Note: it locks to be thread-safe.
func (g *Graph) State(name string) GraphEntry {
	g.ops[name].Lock()
	defer g.ops[name].Unlock()
	return g.ops[name].toGraphEntry(name)
}

func (g *Graph) buildStateGraph() (graph [][]GraphEntry) {
	for _, layer := range g.TopoSortedLayers() {
		states := []GraphEntry{}

		for _, r := range layer {
			g.ops[r].Lock()
			states = append(states, g.ops[r].toGraphEntry(r))
			g.ops[r].Unlock()
		}

		graph = append(graph, states)
	}
	return
}

// Analyze returns the DAG and the Graph in the execution order.
// It will also return eventual updates if called after Run().
func (g *Graph) Analyze() (graph [][]GraphEntry) {
	return g.buildStateGraph()
}

// Run starts the jobs defined in the DAG with a context.
// It returns error in case of failure.
func (g *Graph) Run(ctx context.Context) error {

	checkFatal := func(layer []GraphEntry) error {
		for _, s := range layer {
			if s.Fatal && g.ops[s.Name].err != nil {
				return g.ops[s.Name].err
			}
		}
		return nil
	}

	for _, layer := range g.buildStateGraph() {
		var wg sync.WaitGroup

	LAYER:
		for _, r := range layer {
			if !r.WithCallback || r.Ignored {
				continue
			}
			fns := r.Callback

			if !r.WeakDeps {
				for k := range g.Graph.Dependencies(r.Name) {
					if len(r.WeakDependencies) != 0 && lo.Contains(r.WeakDependencies, k) {
						continue
					}

					g.ops[r.Name].Lock()
					g.ops[k].Lock()

					unlock := func() {
						g.ops[r.Name].Unlock()
						g.ops[k].Unlock()
					}

					if g.ops[k].err != nil {
						g.ops[r.Name].err = fmt.Errorf("'%s' deps %s failed", r.Name, k)
						unlock()

						continue LAYER
					}
					unlock()
				}
			}

			for i := range fns {
				if !r.Background {
					wg.Add(1)
				} else if g.collectOrphans {
					g.orphans.Add(1)
				}

				go func(ctx context.Context, g *Graph, key string, f func(context.Context) error) {
					err := f(ctx)
					g.ops[key].Lock()
					if err != nil {
						g.ops[key].err = multierror.Append(g.ops[key].err, err)
					}
					g.ops[key].executed = true

					if !g.ops[key].background {
						wg.Done()
					} else if g.collectOrphans {
						g.orphans.Done()
					}
					g.ops[key].Unlock()
				}(ctx, g, r.Name, fns[i])
			}
		}

		wg.Wait()
		if err := checkFatal(layer); err != nil {
			return err
		}
	}

	if g.collectOrphans {
		g.orphans.Wait()
		for _, layer := range g.buildStateGraph() {
			if err := checkFatal(layer); err != nil {
				return err
			}
		}
	}
	return nil
}
   07070100000AE9000081A4000000000000000000000001645E367C0000017F000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/spectrocloud-labs/herd/dag_options.go   package herd

// GraphOption it's the option for the DAG graph.
type GraphOption func(g *Graph)

// EnableInit enables an Init jobs that takes paternity
// of orphan jobs without dependencies.
var EnableInit GraphOption = func(g *Graph) {
	g.init = true
}

// CollectOrphans enables orphan job collection.
var CollectOrphans GraphOption = func(g *Graph) {
	g.collectOrphans = true
}
 07070100000AEA000081A4000000000000000000000001645E367C000002A4000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/spectrocloud-labs/herd/ops.go   package herd

import (
	"context"
	"sync"
)

type OpState struct {
	sync.Mutex
	fn         []func(context.Context) error
	err        error
	fatal      bool
	background bool
	executed   bool
	weak       bool
	weakdeps   []string
	deps       []string
	ignore     bool
}

func (o *OpState) toGraphEntry(name string) GraphEntry {
	return GraphEntry{
		WithCallback:     o.fn != nil,
		Callback:         o.fn,
		Error:            o.err,
		Executed:         o.executed,
		Background:       o.background,
		WeakDeps:         o.weak,
		Dependencies:     o.deps,
		WeakDependencies: o.weakdeps,
		Fatal:            o.fatal,
		Name:             name,
		Ignored:          o.ignore,
	}
}
07070100000AEB000081A4000000000000000000000001645E367C00000AA5000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/spectrocloud-labs/herd/ops_options.go   package herd

import "context"

// OpOption defines the operation settings.
type OpOption func(string, *OpState, *Graph) error

var NoOp OpOption = func(s string, os *OpState, g *Graph) error { return nil }

// FatalOp makes the operation fatal.
// Any error will make the DAG to stop and return the error immediately.
var FatalOp OpOption = func(key string, os *OpState, g *Graph) error {
	os.fatal = true
	return nil
}

// Background runs the operation in the background.
var Background OpOption = func(key string, os *OpState, g *Graph) error {
	os.background = true
	return nil
}

// WeakDeps sets all the dependencies of the job as "weak".
// Any failure of the jobs which depends on won't impact running the job.
// By default, a failure job will make also fail all the children - this is option
// disables this behavor and make the child start too.
var WeakDeps OpOption = func(key string, os *OpState, g *Graph) error {
	os.weak = true
	return nil
}

// WithWeakDeps defines dependencies that doesn't prevent the op to trigger.
func WithWeakDeps(deps ...string) OpOption {
	return func(key string, os *OpState, g *Graph) error {

		err := WithDeps(deps...)(key, os, g)
		if err != nil {
			return err
		}
		os.weakdeps = append(os.weakdeps, deps...)
		return nil
	}
}

// WithDeps defines an operation dependency.
// Dependencies can be expressed as a string.
// Note: before running the DAG you must define all the operations.
func WithDeps(deps ...string) OpOption {
	return func(key string, os *OpState, g *Graph) error {
		os.deps = append(os.deps, deps...)

		for _, d := range deps {
			if err := g.Graph.DependOn(key, d); err != nil {
				return err
			}
		}
		return nil
	}
}

// ConditionalOption defines an option that is enabled only if the
// conditional callback returns true.
func ConditionalOption(condition func() bool, op OpOption) OpOption {
	if condition() {
		return op
	}

	return NoOp
}

// IfElse defines options that are enabled if the condition passess or not
// It is just syntax sugar.
func IfElse(condition bool, op, noOp OpOption) OpOption {
	if condition {
		return op
	}

	return noOp
}

// EnableIf defines an operation dependency.
// Dependencies can be expressed as a string.
// Note: before running the DAG you must define all the operations.
func EnableIf(conditional func() bool) OpOption {
	return func(key string, os *OpState, g *Graph) error {
		if !conditional() {
			os.ignore = true
		}
		return nil
	}
}

// WithCallback associates a callback to the operation to be executed
// when the DAG is walked-by.
func WithCallback(fn ...func(context.Context) error) OpOption {
	return func(s string, os *OpState, g *Graph) error {
		os.fn = append(os.fn, fn...)
		return nil
	}
}
   07070100000AEC000041ED000000000000000000000008645E367C00000000000000000000000000000000000000000000002C00000000elemental-cli-0.3.1/vendor/github.com/spf13   07070100000AED000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000003200000000elemental-cli-0.3.1/vendor/github.com/spf13/afero 07070100000AEE000081A4000000000000000000000001645E367C0000001A000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/.gitignore  sftpfs/file1
sftpfs/test/
  07070100000AEF000081A4000000000000000000000001645E367C0000279C000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/LICENSE.txt                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.
07070100000AF0000081A4000000000000000000000001645E367C0000383A000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/README.md   ![afero logo-sm](https://cloud.githubusercontent.com/assets/173412/11490338/d50e16dc-97a5-11e5-8b12-019a300d0fcb.png)

A FileSystem Abstraction System for Go

[![Test](https://github.com/spf13/afero/actions/workflows/test.yml/badge.svg)](https://github.com/spf13/afero/actions/workflows/test.yml) [![GoDoc](https://godoc.org/github.com/spf13/afero?status.svg)](https://godoc.org/github.com/spf13/afero) [![Join the chat at https://gitter.im/spf13/afero](https://badges.gitter.im/Dev%20Chat.svg)](https://gitter.im/spf13/afero?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

# Overview

Afero is a filesystem framework providing a simple, uniform and universal API
interacting with any filesystem, as an abstraction layer providing interfaces,
types and methods. Afero has an exceptionally clean interface and simple design
without needless constructors or initialization methods.

Afero is also a library providing a base set of interoperable backend
filesystems that make it easy to work with afero while retaining all the power
and benefit of the os and ioutil packages.

Afero provides significant improvements over using the os package alone, most
notably the ability to create mock and testing filesystems without relying on the disk.

It is suitable for use in any situation where you would consider using the OS
package as it provides an additional abstraction that makes it easy to use a
memory backed file system during testing. It also adds support for the http
filesystem for full interoperability.


## Afero Features

* A single consistent API for accessing a variety of filesystems
* Interoperation between a variety of file system types
* A set of interfaces to encourage and enforce interoperability between backends
* An atomic cross platform memory backed file system
* Support for compositional (union) file systems by combining multiple file systems acting as one
* Specialized backends which modify existing filesystems (Read Only, Regexp filtered)
* A set of utility functions ported from io, ioutil & hugo to be afero aware
* Wrapper for go 1.16 filesystem abstraction `io/fs.FS`

# Using Afero

Afero is easy to use and easier to adopt.

A few different ways you could use Afero:

* Use the interfaces alone to define your own file system.
* Wrapper for the OS packages.
* Define different filesystems for different parts of your application.
* Use Afero for mock filesystems while testing

## Step 1: Install Afero

First use go get to install the latest version of the library.

    $ go get github.com/spf13/afero

Next include Afero in your application.
```go
import "github.com/spf13/afero"
```

## Step 2: Declare a backend

First define a package variable and set it to a pointer to a filesystem.
```go
var AppFs = afero.NewMemMapFs()

or

var AppFs = afero.NewOsFs()
```
It is important to note that if you repeat the composite literal you
will be using a completely new and isolated filesystem. In the case of
OsFs it will still use the same underlying filesystem but will reduce
the ability to drop in other filesystems as desired.

## Step 3: Use it like you would the OS package

Throughout your application use any function and method like you normally
would.

So if my application before had:
```go
os.Open("/tmp/foo")
```
We would replace it with:
```go
AppFs.Open("/tmp/foo")
```

`AppFs` being the variable we defined above.


## List of all available functions

File System Methods Available:
```go
Chmod(name string, mode os.FileMode) : error
Chown(name string, uid, gid int) : error
Chtimes(name string, atime time.Time, mtime time.Time) : error
Create(name string) : File, error
Mkdir(name string, perm os.FileMode) : error
MkdirAll(path string, perm os.FileMode) : error
Name() : string
Open(name string) : File, error
OpenFile(name string, flag int, perm os.FileMode) : File, error
Remove(name string) : error
RemoveAll(path string) : error
Rename(oldname, newname string) : error
Stat(name string) : os.FileInfo, error
```
File Interfaces and Methods Available:
```go
io.Closer
io.Reader
io.ReaderAt
io.Seeker
io.Writer
io.WriterAt

Name() : string
Readdir(count int) : []os.FileInfo, error
Readdirnames(n int) : []string, error
Stat() : os.FileInfo, error
Sync() : error
Truncate(size int64) : error
WriteString(s string) : ret int, err error
```
In some applications it may make sense to define a new package that
simply exports the file system variable for easy access from anywhere.

## Using Afero's utility functions

Afero provides a set of functions to make it easier to use the underlying file systems.
These functions have been primarily ported from io & ioutil with some developed for Hugo.

The afero utilities support all afero compatible backends.

The list of utilities includes:

```go
DirExists(path string) (bool, error)
Exists(path string) (bool, error)
FileContainsBytes(filename string, subslice []byte) (bool, error)
GetTempDir(subPath string) string
IsDir(path string) (bool, error)
IsEmpty(path string) (bool, error)
ReadDir(dirname string) ([]os.FileInfo, error)
ReadFile(filename string) ([]byte, error)
SafeWriteReader(path string, r io.Reader) (err error)
TempDir(dir, prefix string) (name string, err error)
TempFile(dir, prefix string) (f File, err error)
Walk(root string, walkFn filepath.WalkFunc) error
WriteFile(filename string, data []byte, perm os.FileMode) error
WriteReader(path string, r io.Reader) (err error)
```
For a complete list see [Afero's GoDoc](https://godoc.org/github.com/spf13/afero)

They are available under two different approaches to use. You can either call
them directly where the first parameter of each function will be the file
system, or you can declare a new `Afero`, a custom type used to bind these
functions as methods to a given filesystem.

### Calling utilities directly

```go
fs := new(afero.MemMapFs)
f, err := afero.TempFile(fs,"", "ioutil-test")

```

### Calling via Afero

```go
fs := afero.NewMemMapFs()
afs := &afero.Afero{Fs: fs}
f, err := afs.TempFile("", "ioutil-test")
```

## Using Afero for Testing

There is a large benefit to using a mock filesystem for testing. It has a
completely blank state every time it is initialized and can be easily
reproducible regardless of OS. You could create files to your heart’s content
and the file access would be fast while also saving you from all the annoying
issues with deleting temporary files, Windows file locking, etc. The MemMapFs
backend is perfect for testing.

* Much faster than performing I/O operations on disk
* Avoid security issues and permissions
* Far more control. 'rm -rf /' with confidence
* Test setup is far more easier to do
* No test cleanup needed

One way to accomplish this is to define a variable as mentioned above.
In your application this will be set to afero.NewOsFs() during testing you
can set it to afero.NewMemMapFs().

It wouldn't be uncommon to have each test initialize a blank slate memory
backend. To do this I would define my `appFS = afero.NewOsFs()` somewhere
appropriate in my application code. This approach ensures that Tests are order
independent, with no test relying on the state left by an earlier test.

Then in my tests I would initialize a new MemMapFs for each test:
```go
func TestExist(t *testing.T) {
	appFS := afero.NewMemMapFs()
	// create test files and directories
	appFS.MkdirAll("src/a", 0755)
	afero.WriteFile(appFS, "src/a/b", []byte("file b"), 0644)
	afero.WriteFile(appFS, "src/c", []byte("file c"), 0644)
	name := "src/c"
	_, err := appFS.Stat(name)
	if os.IsNotExist(err) {
		t.Errorf("file \"%s\" does not exist.\n", name)
	}
}
```

# Available Backends

## Operating System Native

### OsFs

The first is simply a wrapper around the native OS calls. This makes it
very easy to use as all of the calls are the same as the existing OS
calls. It also makes it trivial to have your code use the OS during
operation and a mock filesystem during testing or as needed.

```go
appfs := afero.NewOsFs()
appfs.MkdirAll("src/a", 0755)
```

## Memory Backed Storage

### MemMapFs

Afero also provides a fully atomic memory backed filesystem perfect for use in
mocking and to speed up unnecessary disk io when persistence isn’t
necessary. It is fully concurrent and will work within go routines
safely.

```go
mm := afero.NewMemMapFs()
mm.MkdirAll("src/a", 0755)
```

#### InMemoryFile

As part of MemMapFs, Afero also provides an atomic, fully concurrent memory
backed file implementation. This can be used in other memory backed file
systems with ease. Plans are to add a radix tree memory stored file
system using InMemoryFile.

## Network Interfaces

### SftpFs

Afero has experimental support for secure file transfer protocol (sftp). Which can
be used to perform file operations over a encrypted channel.

### GCSFs

Afero has experimental support for Google Cloud Storage (GCS). You can either set the
`GOOGLE_APPLICATION_CREDENTIALS_JSON` env variable to your JSON credentials or use `opts` in
`NewGcsFS` to configure access to your GCS bucket.

Some known limitations of the existing implementation:
* No Chmod support - The GCS ACL could probably be mapped to *nix style permissions but that would add another level of complexity and is ignored in this version.
* No Chtimes support - Could be simulated with attributes (gcs a/m-times are set implicitly) but that's is left for another version.
* Not thread safe - Also assumes all file operations are done through the same instance of the GcsFs. File operations between different GcsFs instances are not guaranteed to be consistent.


## Filtering Backends

### BasePathFs

The BasePathFs restricts all operations to a given path within an Fs.
The given file name to the operations on this Fs will be prepended with
the base path before calling the source Fs.

```go
bp := afero.NewBasePathFs(afero.NewOsFs(), "/base/path")
```

### ReadOnlyFs

A thin wrapper around the source Fs providing a read only view.

```go
fs := afero.NewReadOnlyFs(afero.NewOsFs())
_, err := fs.Create("/file.txt")
// err = syscall.EPERM
```

# RegexpFs

A filtered view on file names, any file NOT matching
the passed regexp will be treated as non-existing.
Files not matching the regexp provided will not be created.
Directories are not filtered.

```go
fs := afero.NewRegexpFs(afero.NewMemMapFs(), regexp.MustCompile(`\.txt$`))
_, err := fs.Create("/file.html")
// err = syscall.ENOENT
```

### HttpFs

Afero provides an http compatible backend which can wrap any of the existing
backends.

The Http package requires a slightly specific version of Open which
returns an http.File type.

Afero provides an httpFs file system which satisfies this requirement.
Any Afero FileSystem can be used as an httpFs.

```go
httpFs := afero.NewHttpFs(<ExistingFS>)
fileserver := http.FileServer(httpFs.Dir(<PATH>))
http.Handle("/", fileserver)
```

## Composite Backends

Afero provides the ability have two filesystems (or more) act as a single
file system.

### CacheOnReadFs

The CacheOnReadFs will lazily make copies of any accessed files from the base
layer into the overlay. Subsequent reads will be pulled from the overlay
directly permitting the request is within the cache duration of when it was
created in the overlay.

If the base filesystem is writeable, any changes to files will be
done first to the base, then to the overlay layer. Write calls to open file
handles like `Write()` or `Truncate()` to the overlay first.

To writing files to the overlay only, you can use the overlay Fs directly (not
via the union Fs).

Cache files in the layer for the given time.Duration, a cache duration of 0
means "forever" meaning the file will not be re-requested from the base ever.

A read-only base will make the overlay also read-only but still copy files
from the base to the overlay when they're not present (or outdated) in the
caching layer.

```go
base := afero.NewOsFs()
layer := afero.NewMemMapFs()
ufs := afero.NewCacheOnReadFs(base, layer, 100 * time.Second)
```

### CopyOnWriteFs()

The CopyOnWriteFs is a read only base file system with a potentially
writeable layer on top.

Read operations will first look in the overlay and if not found there, will
serve the file from the base.

Changes to the file system will only be made in the overlay.

Any attempt to modify a file found only in the base will copy the file to the
overlay layer before modification (including opening a file with a writable
handle).

Removing and Renaming files present only in the base layer is not currently
permitted. If a file is present in the base layer and the overlay, only the
overlay will be removed/renamed.

```go
	base := afero.NewOsFs()
	roBase := afero.NewReadOnlyFs(base)
	ufs := afero.NewCopyOnWriteFs(roBase, afero.NewMemMapFs())

	fh, _ = ufs.Create("/home/test/file2.txt")
	fh.WriteString("This is a test")
	fh.Close()
```

In this example all write operations will only occur in memory (MemMapFs)
leaving the base filesystem (OsFs) untouched.


## Desired/possible backends

The following is a short list of possible backends we hope someone will
implement:

* SSH
* S3

# About the project

## What's in the name

Afero comes from the latin roots Ad-Facere.

**"Ad"** is a prefix meaning "to".

**"Facere"** is a form of the root "faciō" making "make or do".

The literal meaning of afero is "to make" or "to do" which seems very fitting
for a library that allows one to make files and directories and do things with them.

The English word that shares the same roots as Afero is "affair". Affair shares
the same concept but as a noun it means "something that is made or done" or "an
object of a particular type".

It's also nice that unlike some of my other libraries (hugo, cobra, viper) it
Googles very well.

## Release Notes

See the [Releases Page](https://github.com/spf13/afero/releases).

## Contributing

1. Fork it
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create new Pull Request

## Contributors

Names in no particular order:

* [spf13](https://github.com/spf13)
* [jaqx0r](https://github.com/jaqx0r)
* [mbertschler](https://github.com/mbertschler)
* [xor-gate](https://github.com/xor-gate)

## License

Afero is released under the Apache 2.0 license. See
[LICENSE.txt](https://github.com/spf13/afero/blob/master/LICENSE.txt)
  07070100000AF1000081A4000000000000000000000001645E367C00000D1B000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/afero.go    // Copyright © 2014 Steve Francia <spf@spf13.com>.
// Copyright 2013 tsuru authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package afero provides types and methods for interacting with the filesystem,
// as an abstraction layer.

// Afero also provides a few implementations that are mostly interoperable. One that
// uses the operating system filesystem, one that uses memory to store files
// (cross platform) and an interface that should be implemented if you want to
// provide your own filesystem.

package afero

import (
	"errors"
	"io"
	"os"
	"time"
)

type Afero struct {
	Fs
}

// File represents a file in the filesystem.
type File interface {
	io.Closer
	io.Reader
	io.ReaderAt
	io.Seeker
	io.Writer
	io.WriterAt

	Name() string
	Readdir(count int) ([]os.FileInfo, error)
	Readdirnames(n int) ([]string, error)
	Stat() (os.FileInfo, error)
	Sync() error
	Truncate(size int64) error
	WriteString(s string) (ret int, err error)
}

// Fs is the filesystem interface.
//
// Any simulated or real filesystem should implement this interface.
type Fs interface {
	// Create creates a file in the filesystem, returning the file and an
	// error, if any happens.
	Create(name string) (File, error)

	// Mkdir creates a directory in the filesystem, return an error if any
	// happens.
	Mkdir(name string, perm os.FileMode) error

	// MkdirAll creates a directory path and all parents that does not exist
	// yet.
	MkdirAll(path string, perm os.FileMode) error

	// Open opens a file, returning it or an error, if any happens.
	Open(name string) (File, error)

	// OpenFile opens a file using the given flags and the given mode.
	OpenFile(name string, flag int, perm os.FileMode) (File, error)

	// Remove removes a file identified by name, returning an error, if any
	// happens.
	Remove(name string) error

	// RemoveAll removes a directory path and any children it contains. It
	// does not fail if the path does not exist (return nil).
	RemoveAll(path string) error

	// Rename renames a file.
	Rename(oldname, newname string) error

	// Stat returns a FileInfo describing the named file, or an error, if any
	// happens.
	Stat(name string) (os.FileInfo, error)

	// The name of this FileSystem
	Name() string

	// Chmod changes the mode of the named file to mode.
	Chmod(name string, mode os.FileMode) error

	// Chown changes the uid and gid of the named file.
	Chown(name string, uid, gid int) error

	// Chtimes changes the access and modification times of the named file
	Chtimes(name string, atime time.Time, mtime time.Time) error
}

var (
	ErrFileClosed        = errors.New("File is closed")
	ErrOutOfRange        = errors.New("out of range")
	ErrTooLarge          = errors.New("too large")
	ErrFileNotFound      = os.ErrNotExist
	ErrFileExists        = os.ErrExist
	ErrDestinationExists = os.ErrExist
)
 07070100000AF2000081A4000000000000000000000001645E367C00000114000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/appveyor.yml    # This currently does nothing. We have moved to GitHub action, but this is kept
# until spf13 has disabled this project in AppVeyor.
version: '{build}'
clone_folder: C:\gopath\src\github.com\spf13\afero
environment:
  GOPATH: C:\gopath
build_script:
- cmd: >-
    go version

07070100000AF3000081A4000000000000000000000001645E367C00001882000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/basepath.go package afero

import (
	"io/fs"
	"os"
	"path/filepath"
	"runtime"
	"strings"
	"time"
)

var (
	_ Lstater        = (*BasePathFs)(nil)
	_ fs.ReadDirFile = (*BasePathFile)(nil)
)

// The BasePathFs restricts all operations to a given path within an Fs.
// The given file name to the operations on this Fs will be prepended with
// the base path before calling the base Fs.
// Any file name (after filepath.Clean()) outside this base path will be
// treated as non existing file.
//
// Note that it does not clean the error messages on return, so you may
// reveal the real path on errors.
type BasePathFs struct {
	source Fs
	path   string
}

type BasePathFile struct {
	File
	path string
}

func (f *BasePathFile) Name() string {
	sourcename := f.File.Name()
	return strings.TrimPrefix(sourcename, filepath.Clean(f.path))
}

func (f *BasePathFile) ReadDir(n int) ([]fs.DirEntry, error) {
	if rdf, ok := f.File.(fs.ReadDirFile); ok {
		return rdf.ReadDir(n)
	}
	return readDirFile{f.File}.ReadDir(n)
}

func NewBasePathFs(source Fs, path string) Fs {
	return &BasePathFs{source: source, path: path}
}

// on a file outside the base path it returns the given file name and an error,
// else the given file with the base path prepended
func (b *BasePathFs) RealPath(name string) (path string, err error) {
	if err := validateBasePathName(name); err != nil {
		return name, err
	}

	bpath := filepath.Clean(b.path)
	path = filepath.Clean(filepath.Join(bpath, name))
	if !strings.HasPrefix(path, bpath) {
		return name, os.ErrNotExist
	}

	return path, nil
}

func validateBasePathName(name string) error {
	if runtime.GOOS != "windows" {
		// Not much to do here;
		// the virtual file paths all look absolute on *nix.
		return nil
	}

	// On Windows a common mistake would be to provide an absolute OS path
	// We could strip out the base part, but that would not be very portable.
	if filepath.IsAbs(name) {
		return os.ErrNotExist
	}

	return nil
}

func (b *BasePathFs) Chtimes(name string, atime, mtime time.Time) (err error) {
	if name, err = b.RealPath(name); err != nil {
		return &os.PathError{Op: "chtimes", Path: name, Err: err}
	}
	return b.source.Chtimes(name, atime, mtime)
}

func (b *BasePathFs) Chmod(name string, mode os.FileMode) (err error) {
	if name, err = b.RealPath(name); err != nil {
		return &os.PathError{Op: "chmod", Path: name, Err: err}
	}
	return b.source.Chmod(name, mode)
}

func (b *BasePathFs) Chown(name string, uid, gid int) (err error) {
	if name, err = b.RealPath(name); err != nil {
		return &os.PathError{Op: "chown", Path: name, Err: err}
	}
	return b.source.Chown(name, uid, gid)
}

func (b *BasePathFs) Name() string {
	return "BasePathFs"
}

func (b *BasePathFs) Stat(name string) (fi os.FileInfo, err error) {
	if name, err = b.RealPath(name); err != nil {
		return nil, &os.PathError{Op: "stat", Path: name, Err: err}
	}
	return b.source.Stat(name)
}

func (b *BasePathFs) Rename(oldname, newname string) (err error) {
	if oldname, err = b.RealPath(oldname); err != nil {
		return &os.PathError{Op: "rename", Path: oldname, Err: err}
	}
	if newname, err = b.RealPath(newname); err != nil {
		return &os.PathError{Op: "rename", Path: newname, Err: err}
	}
	return b.source.Rename(oldname, newname)
}

func (b *BasePathFs) RemoveAll(name string) (err error) {
	if name, err = b.RealPath(name); err != nil {
		return &os.PathError{Op: "remove_all", Path: name, Err: err}
	}
	return b.source.RemoveAll(name)
}

func (b *BasePathFs) Remove(name string) (err error) {
	if name, err = b.RealPath(name); err != nil {
		return &os.PathError{Op: "remove", Path: name, Err: err}
	}
	return b.source.Remove(name)
}

func (b *BasePathFs) OpenFile(name string, flag int, mode os.FileMode) (f File, err error) {
	if name, err = b.RealPath(name); err != nil {
		return nil, &os.PathError{Op: "openfile", Path: name, Err: err}
	}
	sourcef, err := b.source.OpenFile(name, flag, mode)
	if err != nil {
		return nil, err
	}
	return &BasePathFile{sourcef, b.path}, nil
}

func (b *BasePathFs) Open(name string) (f File, err error) {
	if name, err = b.RealPath(name); err != nil {
		return nil, &os.PathError{Op: "open", Path: name, Err: err}
	}
	sourcef, err := b.source.Open(name)
	if err != nil {
		return nil, err
	}
	return &BasePathFile{File: sourcef, path: b.path}, nil
}

func (b *BasePathFs) Mkdir(name string, mode os.FileMode) (err error) {
	if name, err = b.RealPath(name); err != nil {
		return &os.PathError{Op: "mkdir", Path: name, Err: err}
	}
	return b.source.Mkdir(name, mode)
}

func (b *BasePathFs) MkdirAll(name string, mode os.FileMode) (err error) {
	if name, err = b.RealPath(name); err != nil {
		return &os.PathError{Op: "mkdir", Path: name, Err: err}
	}
	return b.source.MkdirAll(name, mode)
}

func (b *BasePathFs) Create(name string) (f File, err error) {
	if name, err = b.RealPath(name); err != nil {
		return nil, &os.PathError{Op: "create", Path: name, Err: err}
	}
	sourcef, err := b.source.Create(name)
	if err != nil {
		return nil, err
	}
	return &BasePathFile{File: sourcef, path: b.path}, nil
}

func (b *BasePathFs) LstatIfPossible(name string) (os.FileInfo, bool, error) {
	name, err := b.RealPath(name)
	if err != nil {
		return nil, false, &os.PathError{Op: "lstat", Path: name, Err: err}
	}
	if lstater, ok := b.source.(Lstater); ok {
		return lstater.LstatIfPossible(name)
	}
	fi, err := b.source.Stat(name)
	return fi, false, err
}

func (b *BasePathFs) SymlinkIfPossible(oldname, newname string) error {
	oldname, err := b.RealPath(oldname)
	if err != nil {
		return &os.LinkError{Op: "symlink", Old: oldname, New: newname, Err: err}
	}
	newname, err = b.RealPath(newname)
	if err != nil {
		return &os.LinkError{Op: "symlink", Old: oldname, New: newname, Err: err}
	}
	if linker, ok := b.source.(Linker); ok {
		return linker.SymlinkIfPossible(oldname, newname)
	}
	return &os.LinkError{Op: "symlink", Old: oldname, New: newname, Err: ErrNoSymlink}
}

func (b *BasePathFs) ReadlinkIfPossible(name string) (string, error) {
	name, err := b.RealPath(name)
	if err != nil {
		return "", &os.PathError{Op: "readlink", Path: name, Err: err}
	}
	if reader, ok := b.source.(LinkReader); ok {
		return reader.ReadlinkIfPossible(name)
	}
	return "", &os.PathError{Op: "readlink", Path: name, Err: ErrNoReadlink}
}
  07070100000AF4000081A4000000000000000000000001645E367C00001D47000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/cacheOnReadFs.go    package afero

import (
	"os"
	"syscall"
	"time"
)

// If the cache duration is 0, cache time will be unlimited, i.e. once
// a file is in the layer, the base will never be read again for this file.
//
// For cache times greater than 0, the modification time of a file is
// checked. Note that a lot of file system implementations only allow a
// resolution of a second for timestamps... or as the godoc for os.Chtimes()
// states: "The underlying filesystem may truncate or round the values to a
// less precise time unit."
//
// This caching union will forward all write calls also to the base file
// system first. To prevent writing to the base Fs, wrap it in a read-only
// filter - Note: this will also make the overlay read-only, for writing files
// in the overlay, use the overlay Fs directly, not via the union Fs.
type CacheOnReadFs struct {
	base      Fs
	layer     Fs
	cacheTime time.Duration
}

func NewCacheOnReadFs(base Fs, layer Fs, cacheTime time.Duration) Fs {
	return &CacheOnReadFs{base: base, layer: layer, cacheTime: cacheTime}
}

type cacheState int

const (
	// not present in the overlay, unknown if it exists in the base:
	cacheMiss cacheState = iota
	// present in the overlay and in base, base file is newer:
	cacheStale
	// present in the overlay - with cache time == 0 it may exist in the base,
	// with cacheTime > 0 it exists in the base and is same age or newer in the
	// overlay
	cacheHit
	// happens if someone writes directly to the overlay without
	// going through this union
	cacheLocal
)

func (u *CacheOnReadFs) cacheStatus(name string) (state cacheState, fi os.FileInfo, err error) {
	var lfi, bfi os.FileInfo
	lfi, err = u.layer.Stat(name)
	if err == nil {
		if u.cacheTime == 0 {
			return cacheHit, lfi, nil
		}
		if lfi.ModTime().Add(u.cacheTime).Before(time.Now()) {
			bfi, err = u.base.Stat(name)
			if err != nil {
				return cacheLocal, lfi, nil
			}
			if bfi.ModTime().After(lfi.ModTime()) {
				return cacheStale, bfi, nil
			}
		}
		return cacheHit, lfi, nil
	}

	if err == syscall.ENOENT || os.IsNotExist(err) {
		return cacheMiss, nil, nil
	}

	return cacheMiss, nil, err
}

func (u *CacheOnReadFs) copyToLayer(name string) error {
	return copyToLayer(u.base, u.layer, name)
}

func (u *CacheOnReadFs) copyFileToLayer(name string, flag int, perm os.FileMode) error {
	return copyFileToLayer(u.base, u.layer, name, flag, perm)
}

func (u *CacheOnReadFs) Chtimes(name string, atime, mtime time.Time) error {
	st, _, err := u.cacheStatus(name)
	if err != nil {
		return err
	}
	switch st {
	case cacheLocal:
	case cacheHit:
		err = u.base.Chtimes(name, atime, mtime)
	case cacheStale, cacheMiss:
		if err := u.copyToLayer(name); err != nil {
			return err
		}
		err = u.base.Chtimes(name, atime, mtime)
	}
	if err != nil {
		return err
	}
	return u.layer.Chtimes(name, atime, mtime)
}

func (u *CacheOnReadFs) Chmod(name string, mode os.FileMode) error {
	st, _, err := u.cacheStatus(name)
	if err != nil {
		return err
	}
	switch st {
	case cacheLocal:
	case cacheHit:
		err = u.base.Chmod(name, mode)
	case cacheStale, cacheMiss:
		if err := u.copyToLayer(name); err != nil {
			return err
		}
		err = u.base.Chmod(name, mode)
	}
	if err != nil {
		return err
	}
	return u.layer.Chmod(name, mode)
}

func (u *CacheOnReadFs) Chown(name string, uid, gid int) error {
	st, _, err := u.cacheStatus(name)
	if err != nil {
		return err
	}
	switch st {
	case cacheLocal:
	case cacheHit:
		err = u.base.Chown(name, uid, gid)
	case cacheStale, cacheMiss:
		if err := u.copyToLayer(name); err != nil {
			return err
		}
		err = u.base.Chown(name, uid, gid)
	}
	if err != nil {
		return err
	}
	return u.layer.Chown(name, uid, gid)
}

func (u *CacheOnReadFs) Stat(name string) (os.FileInfo, error) {
	st, fi, err := u.cacheStatus(name)
	if err != nil {
		return nil, err
	}
	switch st {
	case cacheMiss:
		return u.base.Stat(name)
	default: // cacheStale has base, cacheHit and cacheLocal the layer os.FileInfo
		return fi, nil
	}
}

func (u *CacheOnReadFs) Rename(oldname, newname string) error {
	st, _, err := u.cacheStatus(oldname)
	if err != nil {
		return err
	}
	switch st {
	case cacheLocal:
	case cacheHit:
		err = u.base.Rename(oldname, newname)
	case cacheStale, cacheMiss:
		if err := u.copyToLayer(oldname); err != nil {
			return err
		}
		err = u.base.Rename(oldname, newname)
	}
	if err != nil {
		return err
	}
	return u.layer.Rename(oldname, newname)
}

func (u *CacheOnReadFs) Remove(name string) error {
	st, _, err := u.cacheStatus(name)
	if err != nil {
		return err
	}
	switch st {
	case cacheLocal:
	case cacheHit, cacheStale, cacheMiss:
		err = u.base.Remove(name)
	}
	if err != nil {
		return err
	}
	return u.layer.Remove(name)
}

func (u *CacheOnReadFs) RemoveAll(name string) error {
	st, _, err := u.cacheStatus(name)
	if err != nil {
		return err
	}
	switch st {
	case cacheLocal:
	case cacheHit, cacheStale, cacheMiss:
		err = u.base.RemoveAll(name)
	}
	if err != nil {
		return err
	}
	return u.layer.RemoveAll(name)
}

func (u *CacheOnReadFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
	st, _, err := u.cacheStatus(name)
	if err != nil {
		return nil, err
	}
	switch st {
	case cacheLocal, cacheHit:
	default:
		if err := u.copyFileToLayer(name, flag, perm); err != nil {
			return nil, err
		}
	}
	if flag&(os.O_WRONLY|syscall.O_RDWR|os.O_APPEND|os.O_CREATE|os.O_TRUNC) != 0 {
		bfi, err := u.base.OpenFile(name, flag, perm)
		if err != nil {
			return nil, err
		}
		lfi, err := u.layer.OpenFile(name, flag, perm)
		if err != nil {
			bfi.Close() // oops, what if O_TRUNC was set and file opening in the layer failed...?
			return nil, err
		}
		return &UnionFile{Base: bfi, Layer: lfi}, nil
	}
	return u.layer.OpenFile(name, flag, perm)
}

func (u *CacheOnReadFs) Open(name string) (File, error) {
	st, fi, err := u.cacheStatus(name)
	if err != nil {
		return nil, err
	}

	switch st {
	case cacheLocal:
		return u.layer.Open(name)

	case cacheMiss:
		bfi, err := u.base.Stat(name)
		if err != nil {
			return nil, err
		}
		if bfi.IsDir() {
			return u.base.Open(name)
		}
		if err := u.copyToLayer(name); err != nil {
			return nil, err
		}
		return u.layer.Open(name)

	case cacheStale:
		if !fi.IsDir() {
			if err := u.copyToLayer(name); err != nil {
				return nil, err
			}
			return u.layer.Open(name)
		}
	case cacheHit:
		if !fi.IsDir() {
			return u.layer.Open(name)
		}
	}
	// the dirs from cacheHit, cacheStale fall down here:
	bfile, _ := u.base.Open(name)
	lfile, err := u.layer.Open(name)
	if err != nil && bfile == nil {
		return nil, err
	}
	return &UnionFile{Base: bfile, Layer: lfile}, nil
}

func (u *CacheOnReadFs) Mkdir(name string, perm os.FileMode) error {
	err := u.base.Mkdir(name, perm)
	if err != nil {
		return err
	}
	return u.layer.MkdirAll(name, perm) // yes, MkdirAll... we cannot assume it exists in the cache
}

func (u *CacheOnReadFs) Name() string {
	return "CacheOnReadFs"
}

func (u *CacheOnReadFs) MkdirAll(name string, perm os.FileMode) error {
	err := u.base.MkdirAll(name, perm)
	if err != nil {
		return err
	}
	return u.layer.MkdirAll(name, perm)
}

func (u *CacheOnReadFs) Create(name string) (File, error) {
	bfh, err := u.base.Create(name)
	if err != nil {
		return nil, err
	}
	lfh, err := u.layer.Create(name)
	if err != nil {
		// oops, see comment about OS_TRUNC above, should we remove? then we have to
		// remember if the file did not exist before
		bfh.Close()
		return nil, err
	}
	return &UnionFile{Base: bfh, Layer: lfh}, nil
}
 07070100000AF5000081A4000000000000000000000001645E367C0000031B000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/const_bsds.go   // Copyright © 2016 Steve Francia <spf@spf13.com>.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

//go:build aix || darwin || openbsd || freebsd || netbsd || dragonfly
// +build aix darwin openbsd freebsd netbsd dragonfly

package afero

import (
	"syscall"
)

const BADFD = syscall.EBADF
 07070100000AF6000081A4000000000000000000000001645E367C00000327000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/const_win_unix.go   // Copyright © 2016 Steve Francia <spf@spf13.com>.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//go:build !darwin && !openbsd && !freebsd && !dragonfly && !netbsd && !aix
// +build !darwin,!openbsd,!freebsd,!dragonfly,!netbsd,!aix

package afero

import (
	"syscall"
)

const BADFD = syscall.EBADFD
 07070100000AF7000081A4000000000000000000000001645E367C00001E53000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/copyOnWriteFs.go    package afero

import (
	"fmt"
	"os"
	"path/filepath"
	"syscall"
	"time"
)

var _ Lstater = (*CopyOnWriteFs)(nil)

// The CopyOnWriteFs is a union filesystem: a read only base file system with
// a possibly writeable layer on top. Changes to the file system will only
// be made in the overlay: Changing an existing file in the base layer which
// is not present in the overlay will copy the file to the overlay ("changing"
// includes also calls to e.g. Chtimes(), Chmod() and Chown()).
//
// Reading directories is currently only supported via Open(), not OpenFile().
type CopyOnWriteFs struct {
	base  Fs
	layer Fs
}

func NewCopyOnWriteFs(base Fs, layer Fs) Fs {
	return &CopyOnWriteFs{base: base, layer: layer}
}

// Returns true if the file is not in the overlay
func (u *CopyOnWriteFs) isBaseFile(name string) (bool, error) {
	if _, err := u.layer.Stat(name); err == nil {
		return false, nil
	}
	_, err := u.base.Stat(name)
	if err != nil {
		if oerr, ok := err.(*os.PathError); ok {
			if oerr.Err == os.ErrNotExist || oerr.Err == syscall.ENOENT || oerr.Err == syscall.ENOTDIR {
				return false, nil
			}
		}
		if err == syscall.ENOENT {
			return false, nil
		}
	}
	return true, err
}

func (u *CopyOnWriteFs) copyToLayer(name string) error {
	return copyToLayer(u.base, u.layer, name)
}

func (u *CopyOnWriteFs) Chtimes(name string, atime, mtime time.Time) error {
	b, err := u.isBaseFile(name)
	if err != nil {
		return err
	}
	if b {
		if err := u.copyToLayer(name); err != nil {
			return err
		}
	}
	return u.layer.Chtimes(name, atime, mtime)
}

func (u *CopyOnWriteFs) Chmod(name string, mode os.FileMode) error {
	b, err := u.isBaseFile(name)
	if err != nil {
		return err
	}
	if b {
		if err := u.copyToLayer(name); err != nil {
			return err
		}
	}
	return u.layer.Chmod(name, mode)
}

func (u *CopyOnWriteFs) Chown(name string, uid, gid int) error {
	b, err := u.isBaseFile(name)
	if err != nil {
		return err
	}
	if b {
		if err := u.copyToLayer(name); err != nil {
			return err
		}
	}
	return u.layer.Chown(name, uid, gid)
}

func (u *CopyOnWriteFs) Stat(name string) (os.FileInfo, error) {
	fi, err := u.layer.Stat(name)
	if err != nil {
		isNotExist := u.isNotExist(err)
		if isNotExist {
			return u.base.Stat(name)
		}
		return nil, err
	}
	return fi, nil
}

func (u *CopyOnWriteFs) LstatIfPossible(name string) (os.FileInfo, bool, error) {
	llayer, ok1 := u.layer.(Lstater)
	lbase, ok2 := u.base.(Lstater)

	if ok1 {
		fi, b, err := llayer.LstatIfPossible(name)
		if err == nil {
			return fi, b, nil
		}

		if !u.isNotExist(err) {
			return nil, b, err
		}
	}

	if ok2 {
		fi, b, err := lbase.LstatIfPossible(name)
		if err == nil {
			return fi, b, nil
		}
		if !u.isNotExist(err) {
			return nil, b, err
		}
	}

	fi, err := u.Stat(name)

	return fi, false, err
}

func (u *CopyOnWriteFs) SymlinkIfPossible(oldname, newname string) error {
	if slayer, ok := u.layer.(Linker); ok {
		return slayer.SymlinkIfPossible(oldname, newname)
	}

	return &os.LinkError{Op: "symlink", Old: oldname, New: newname, Err: ErrNoSymlink}
}

func (u *CopyOnWriteFs) ReadlinkIfPossible(name string) (string, error) {
	if rlayer, ok := u.layer.(LinkReader); ok {
		return rlayer.ReadlinkIfPossible(name)
	}

	if rbase, ok := u.base.(LinkReader); ok {
		return rbase.ReadlinkIfPossible(name)
	}

	return "", &os.PathError{Op: "readlink", Path: name, Err: ErrNoReadlink}
}

func (u *CopyOnWriteFs) isNotExist(err error) bool {
	if e, ok := err.(*os.PathError); ok {
		err = e.Err
	}
	if err == os.ErrNotExist || err == syscall.ENOENT || err == syscall.ENOTDIR {
		return true
	}
	return false
}

// Renaming files present only in the base layer is not permitted
func (u *CopyOnWriteFs) Rename(oldname, newname string) error {
	b, err := u.isBaseFile(oldname)
	if err != nil {
		return err
	}
	if b {
		return syscall.EPERM
	}
	return u.layer.Rename(oldname, newname)
}

// Removing files present only in the base layer is not permitted. If
// a file is present in the base layer and the overlay, only the overlay
// will be removed.
func (u *CopyOnWriteFs) Remove(name string) error {
	err := u.layer.Remove(name)
	switch err {
	case syscall.ENOENT:
		_, err = u.base.Stat(name)
		if err == nil {
			return syscall.EPERM
		}
		return syscall.ENOENT
	default:
		return err
	}
}

func (u *CopyOnWriteFs) RemoveAll(name string) error {
	err := u.layer.RemoveAll(name)
	switch err {
	case syscall.ENOENT:
		_, err = u.base.Stat(name)
		if err == nil {
			return syscall.EPERM
		}
		return syscall.ENOENT
	default:
		return err
	}
}

func (u *CopyOnWriteFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
	b, err := u.isBaseFile(name)
	if err != nil {
		return nil, err
	}

	if flag&(os.O_WRONLY|os.O_RDWR|os.O_APPEND|os.O_CREATE|os.O_TRUNC) != 0 {
		if b {
			if err = u.copyToLayer(name); err != nil {
				return nil, err
			}
			return u.layer.OpenFile(name, flag, perm)
		}

		dir := filepath.Dir(name)
		isaDir, err := IsDir(u.base, dir)
		if err != nil && !os.IsNotExist(err) {
			return nil, err
		}
		if isaDir {
			if err = u.layer.MkdirAll(dir, 0o777); err != nil {
				return nil, err
			}
			return u.layer.OpenFile(name, flag, perm)
		}

		isaDir, err = IsDir(u.layer, dir)
		if err != nil {
			return nil, err
		}
		if isaDir {
			return u.layer.OpenFile(name, flag, perm)
		}

		return nil, &os.PathError{Op: "open", Path: name, Err: syscall.ENOTDIR} // ...or os.ErrNotExist?
	}
	if b {
		return u.base.OpenFile(name, flag, perm)
	}
	return u.layer.OpenFile(name, flag, perm)
}

// This function handles the 9 different possibilities caused
// by the union which are the intersection of the following...
//
//	layer: doesn't exist, exists as a file, and exists as a directory
//	base:  doesn't exist, exists as a file, and exists as a directory
func (u *CopyOnWriteFs) Open(name string) (File, error) {
	// Since the overlay overrides the base we check that first
	b, err := u.isBaseFile(name)
	if err != nil {
		return nil, err
	}

	// If overlay doesn't exist, return the base (base state irrelevant)
	if b {
		return u.base.Open(name)
	}

	// If overlay is a file, return it (base state irrelevant)
	dir, err := IsDir(u.layer, name)
	if err != nil {
		return nil, err
	}
	if !dir {
		return u.layer.Open(name)
	}

	// Overlay is a directory, base state now matters.
	// Base state has 3 states to check but 2 outcomes:
	// A. It's a file or non-readable in the base (return just the overlay)
	// B. It's an accessible directory in the base (return a UnionFile)

	// If base is file or nonreadable, return overlay
	dir, err = IsDir(u.base, name)
	if !dir || err != nil {
		return u.layer.Open(name)
	}

	// Both base & layer are directories
	// Return union file (if opens are without error)
	bfile, bErr := u.base.Open(name)
	lfile, lErr := u.layer.Open(name)

	// If either have errors at this point something is very wrong. Return nil and the errors
	if bErr != nil || lErr != nil {
		return nil, fmt.Errorf("BaseErr: %v\nOverlayErr: %v", bErr, lErr)
	}

	return &UnionFile{Base: bfile, Layer: lfile}, nil
}

func (u *CopyOnWriteFs) Mkdir(name string, perm os.FileMode) error {
	dir, err := IsDir(u.base, name)
	if err != nil {
		return u.layer.MkdirAll(name, perm)
	}
	if dir {
		return ErrFileExists
	}
	return u.layer.MkdirAll(name, perm)
}

func (u *CopyOnWriteFs) Name() string {
	return "CopyOnWriteFs"
}

func (u *CopyOnWriteFs) MkdirAll(name string, perm os.FileMode) error {
	dir, err := IsDir(u.base, name)
	if err != nil {
		return u.layer.MkdirAll(name, perm)
	}
	if dir {
		// This is in line with how os.MkdirAll behaves.
		return nil
	}
	return u.layer.MkdirAll(name, perm)
}

func (u *CopyOnWriteFs) Create(name string) (File, error) {
	return u.OpenFile(name, os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0o666)
}
 07070100000AF8000081A4000000000000000000000001645E367C00000AA8000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/httpFs.go   // Copyright © 2014 Steve Francia <spf@spf13.com>.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package afero

import (
	"errors"
	"net/http"
	"os"
	"path"
	"path/filepath"
	"strings"
	"time"
)

type httpDir struct {
	basePath string
	fs       HttpFs
}

func (d httpDir) Open(name string) (http.File, error) {
	if filepath.Separator != '/' && strings.ContainsRune(name, filepath.Separator) ||
		strings.Contains(name, "\x00") {
		return nil, errors.New("http: invalid character in file path")
	}
	dir := string(d.basePath)
	if dir == "" {
		dir = "."
	}

	f, err := d.fs.Open(filepath.Join(dir, filepath.FromSlash(path.Clean("/"+name))))
	if err != nil {
		return nil, err
	}
	return f, nil
}

type HttpFs struct {
	source Fs
}

func NewHttpFs(source Fs) *HttpFs {
	return &HttpFs{source: source}
}

func (h HttpFs) Dir(s string) *httpDir {
	return &httpDir{basePath: s, fs: h}
}

func (h HttpFs) Name() string { return "h HttpFs" }

func (h HttpFs) Create(name string) (File, error) {
	return h.source.Create(name)
}

func (h HttpFs) Chmod(name string, mode os.FileMode) error {
	return h.source.Chmod(name, mode)
}

func (h HttpFs) Chown(name string, uid, gid int) error {
	return h.source.Chown(name, uid, gid)
}

func (h HttpFs) Chtimes(name string, atime time.Time, mtime time.Time) error {
	return h.source.Chtimes(name, atime, mtime)
}

func (h HttpFs) Mkdir(name string, perm os.FileMode) error {
	return h.source.Mkdir(name, perm)
}

func (h HttpFs) MkdirAll(path string, perm os.FileMode) error {
	return h.source.MkdirAll(path, perm)
}

func (h HttpFs) Open(name string) (http.File, error) {
	f, err := h.source.Open(name)
	if err == nil {
		if httpfile, ok := f.(http.File); ok {
			return httpfile, nil
		}
	}
	return nil, err
}

func (h HttpFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
	return h.source.OpenFile(name, flag, perm)
}

func (h HttpFs) Remove(name string) error {
	return h.source.Remove(name)
}

func (h HttpFs) RemoveAll(path string) error {
	return h.source.RemoveAll(path)
}

func (h HttpFs) Rename(oldname, newname string) error {
	return h.source.Rename(oldname, newname)
}

func (h HttpFs) Stat(name string) (os.FileInfo, error) {
	return h.source.Stat(name)
}
07070100000AF9000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/internal    07070100000AFA000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/internal/common 07070100000AFB000081A4000000000000000000000001645E367C000003BE000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/internal/common/adapters.go // Copyright © 2022 Steve Francia <spf@spf13.com>.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package common

import "io/fs"

// FileInfoDirEntry provides an adapter from os.FileInfo to fs.DirEntry
type FileInfoDirEntry struct {
	fs.FileInfo
}

var _ fs.DirEntry = FileInfoDirEntry{}

func (d FileInfoDirEntry) Type() fs.FileMode { return d.FileInfo.Mode().Type() }

func (d FileInfoDirEntry) Info() (fs.FileInfo, error) { return d.FileInfo, nil }
  07070100000AFC000081A4000000000000000000000001645E367C00001991000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/iofs.go //go:build go1.16
// +build go1.16

package afero

import (
	"io"
	"io/fs"
	"os"
	"path"
	"sort"
	"time"

	"github.com/spf13/afero/internal/common"
)

// IOFS adopts afero.Fs to stdlib io/fs.FS
type IOFS struct {
	Fs
}

func NewIOFS(fs Fs) IOFS {
	return IOFS{Fs: fs}
}

var (
	_ fs.FS         = IOFS{}
	_ fs.GlobFS     = IOFS{}
	_ fs.ReadDirFS  = IOFS{}
	_ fs.ReadFileFS = IOFS{}
	_ fs.StatFS     = IOFS{}
	_ fs.SubFS      = IOFS{}
)

func (iofs IOFS) Open(name string) (fs.File, error) {
	const op = "open"

	// by convention for fs.FS implementations we should perform this check
	if !fs.ValidPath(name) {
		return nil, iofs.wrapError(op, name, fs.ErrInvalid)
	}

	file, err := iofs.Fs.Open(name)
	if err != nil {
		return nil, iofs.wrapError(op, name, err)
	}

	// file should implement fs.ReadDirFile
	if _, ok := file.(fs.ReadDirFile); !ok {
		file = readDirFile{file}
	}

	return file, nil
}

func (iofs IOFS) Glob(pattern string) ([]string, error) {
	const op = "glob"

	// afero.Glob does not perform this check but it's required for implementations
	if _, err := path.Match(pattern, ""); err != nil {
		return nil, iofs.wrapError(op, pattern, err)
	}

	items, err := Glob(iofs.Fs, pattern)
	if err != nil {
		return nil, iofs.wrapError(op, pattern, err)
	}

	return items, nil
}

func (iofs IOFS) ReadDir(name string) ([]fs.DirEntry, error) {
	f, err := iofs.Fs.Open(name)
	if err != nil {
		return nil, iofs.wrapError("readdir", name, err)
	}

	defer f.Close()

	if rdf, ok := f.(fs.ReadDirFile); ok {
		items, err := rdf.ReadDir(-1)
		if err != nil {
			return nil, iofs.wrapError("readdir", name, err)
		}
		sort.Slice(items, func(i, j int) bool { return items[i].Name() < items[j].Name() })
		return items, nil
	}

	items, err := f.Readdir(-1)
	if err != nil {
		return nil, iofs.wrapError("readdir", name, err)
	}
	sort.Sort(byName(items))

	ret := make([]fs.DirEntry, len(items))
	for i := range items {
		ret[i] = common.FileInfoDirEntry{FileInfo: items[i]}
	}

	return ret, nil
}

func (iofs IOFS) ReadFile(name string) ([]byte, error) {
	const op = "readfile"

	if !fs.ValidPath(name) {
		return nil, iofs.wrapError(op, name, fs.ErrInvalid)
	}

	bytes, err := ReadFile(iofs.Fs, name)
	if err != nil {
		return nil, iofs.wrapError(op, name, err)
	}

	return bytes, nil
}

func (iofs IOFS) Sub(dir string) (fs.FS, error) { return IOFS{NewBasePathFs(iofs.Fs, dir)}, nil }

func (IOFS) wrapError(op, path string, err error) error {
	if _, ok := err.(*fs.PathError); ok {
		return err // don't need to wrap again
	}

	return &fs.PathError{
		Op:   op,
		Path: path,
		Err:  err,
	}
}

// readDirFile provides adapter from afero.File to fs.ReadDirFile needed for correct Open
type readDirFile struct {
	File
}

var _ fs.ReadDirFile = readDirFile{}

func (r readDirFile) ReadDir(n int) ([]fs.DirEntry, error) {
	items, err := r.File.Readdir(n)
	if err != nil {
		return nil, err
	}

	ret := make([]fs.DirEntry, len(items))
	for i := range items {
		ret[i] = common.FileInfoDirEntry{FileInfo: items[i]}
	}

	return ret, nil
}

// FromIOFS adopts io/fs.FS to use it as afero.Fs
// Note that io/fs.FS is read-only so all mutating methods will return fs.PathError with fs.ErrPermission
// To store modifications you may use afero.CopyOnWriteFs
type FromIOFS struct {
	fs.FS
}

var _ Fs = FromIOFS{}

func (f FromIOFS) Create(name string) (File, error) { return nil, notImplemented("create", name) }

func (f FromIOFS) Mkdir(name string, perm os.FileMode) error { return notImplemented("mkdir", name) }

func (f FromIOFS) MkdirAll(path string, perm os.FileMode) error {
	return notImplemented("mkdirall", path)
}

func (f FromIOFS) Open(name string) (File, error) {
	file, err := f.FS.Open(name)
	if err != nil {
		return nil, err
	}

	return fromIOFSFile{File: file, name: name}, nil
}

func (f FromIOFS) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
	return f.Open(name)
}

func (f FromIOFS) Remove(name string) error {
	return notImplemented("remove", name)
}

func (f FromIOFS) RemoveAll(path string) error {
	return notImplemented("removeall", path)
}

func (f FromIOFS) Rename(oldname, newname string) error {
	return notImplemented("rename", oldname)
}

func (f FromIOFS) Stat(name string) (os.FileInfo, error) { return fs.Stat(f.FS, name) }

func (f FromIOFS) Name() string { return "fromiofs" }

func (f FromIOFS) Chmod(name string, mode os.FileMode) error {
	return notImplemented("chmod", name)
}

func (f FromIOFS) Chown(name string, uid, gid int) error {
	return notImplemented("chown", name)
}

func (f FromIOFS) Chtimes(name string, atime time.Time, mtime time.Time) error {
	return notImplemented("chtimes", name)
}

type fromIOFSFile struct {
	fs.File
	name string
}

func (f fromIOFSFile) ReadAt(p []byte, off int64) (n int, err error) {
	readerAt, ok := f.File.(io.ReaderAt)
	if !ok {
		return -1, notImplemented("readat", f.name)
	}

	return readerAt.ReadAt(p, off)
}

func (f fromIOFSFile) Seek(offset int64, whence int) (int64, error) {
	seeker, ok := f.File.(io.Seeker)
	if !ok {
		return -1, notImplemented("seek", f.name)
	}

	return seeker.Seek(offset, whence)
}

func (f fromIOFSFile) Write(p []byte) (n int, err error) {
	return -1, notImplemented("write", f.name)
}

func (f fromIOFSFile) WriteAt(p []byte, off int64) (n int, err error) {
	return -1, notImplemented("writeat", f.name)
}

func (f fromIOFSFile) Name() string { return f.name }

func (f fromIOFSFile) Readdir(count int) ([]os.FileInfo, error) {
	rdfile, ok := f.File.(fs.ReadDirFile)
	if !ok {
		return nil, notImplemented("readdir", f.name)
	}

	entries, err := rdfile.ReadDir(count)
	if err != nil {
		return nil, err
	}

	ret := make([]os.FileInfo, len(entries))
	for i := range entries {
		ret[i], err = entries[i].Info()

		if err != nil {
			return nil, err
		}
	}

	return ret, nil
}

func (f fromIOFSFile) Readdirnames(n int) ([]string, error) {
	rdfile, ok := f.File.(fs.ReadDirFile)
	if !ok {
		return nil, notImplemented("readdir", f.name)
	}

	entries, err := rdfile.ReadDir(n)
	if err != nil {
		return nil, err
	}

	ret := make([]string, len(entries))
	for i := range entries {
		ret[i] = entries[i].Name()
	}

	return ret, nil
}

func (f fromIOFSFile) Sync() error { return nil }

func (f fromIOFSFile) Truncate(size int64) error {
	return notImplemented("truncate", f.name)
}

func (f fromIOFSFile) WriteString(s string) (ret int, err error) {
	return -1, notImplemented("writestring", f.name)
}

func notImplemented(op, path string) error {
	return &fs.PathError{Op: op, Path: path, Err: fs.ErrPermission}
}
   07070100000AFD000081A4000000000000000000000001645E367C00001BDB000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/ioutil.go   // Copyright ©2015 The Go Authors
// Copyright ©2015 Steve Francia <spf@spf13.com>
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package afero

import (
	"bytes"
	"io"
	"os"
	"path/filepath"
	"sort"
	"strconv"
	"strings"
	"sync"
	"time"
)

// byName implements sort.Interface.
type byName []os.FileInfo

func (f byName) Len() int           { return len(f) }
func (f byName) Less(i, j int) bool { return f[i].Name() < f[j].Name() }
func (f byName) Swap(i, j int)      { f[i], f[j] = f[j], f[i] }

// ReadDir reads the directory named by dirname and returns
// a list of sorted directory entries.
func (a Afero) ReadDir(dirname string) ([]os.FileInfo, error) {
	return ReadDir(a.Fs, dirname)
}

func ReadDir(fs Fs, dirname string) ([]os.FileInfo, error) {
	f, err := fs.Open(dirname)
	if err != nil {
		return nil, err
	}
	list, err := f.Readdir(-1)
	f.Close()
	if err != nil {
		return nil, err
	}
	sort.Sort(byName(list))
	return list, nil
}

// ReadFile reads the file named by filename and returns the contents.
// A successful call returns err == nil, not err == EOF. Because ReadFile
// reads the whole file, it does not treat an EOF from Read as an error
// to be reported.
func (a Afero) ReadFile(filename string) ([]byte, error) {
	return ReadFile(a.Fs, filename)
}

func ReadFile(fs Fs, filename string) ([]byte, error) {
	f, err := fs.Open(filename)
	if err != nil {
		return nil, err
	}
	defer f.Close()
	// It's a good but not certain bet that FileInfo will tell us exactly how much to
	// read, so let's try it but be prepared for the answer to be wrong.
	var n int64

	if fi, err := f.Stat(); err == nil {
		// Don't preallocate a huge buffer, just in case.
		if size := fi.Size(); size < 1e9 {
			n = size
		}
	}
	// As initial capacity for readAll, use n + a little extra in case Size is zero,
	// and to avoid another allocation after Read has filled the buffer.  The readAll
	// call will read into its allocated internal buffer cheaply.  If the size was
	// wrong, we'll either waste some space off the end or reallocate as needed, but
	// in the overwhelmingly common case we'll get it just right.
	return readAll(f, n+bytes.MinRead)
}

// readAll reads from r until an error or EOF and returns the data it read
// from the internal buffer allocated with a specified capacity.
func readAll(r io.Reader, capacity int64) (b []byte, err error) {
	buf := bytes.NewBuffer(make([]byte, 0, capacity))
	// If the buffer overflows, we will get bytes.ErrTooLarge.
	// Return that as an error. Any other panic remains.
	defer func() {
		e := recover()
		if e == nil {
			return
		}
		if panicErr, ok := e.(error); ok && panicErr == bytes.ErrTooLarge {
			err = panicErr
		} else {
			panic(e)
		}
	}()
	_, err = buf.ReadFrom(r)
	return buf.Bytes(), err
}

// ReadAll reads from r until an error or EOF and returns the data it read.
// A successful call returns err == nil, not err == EOF. Because ReadAll is
// defined to read from src until EOF, it does not treat an EOF from Read
// as an error to be reported.
func ReadAll(r io.Reader) ([]byte, error) {
	return readAll(r, bytes.MinRead)
}

// WriteFile writes data to a file named by filename.
// If the file does not exist, WriteFile creates it with permissions perm;
// otherwise WriteFile truncates it before writing.
func (a Afero) WriteFile(filename string, data []byte, perm os.FileMode) error {
	return WriteFile(a.Fs, filename, data, perm)
}

func WriteFile(fs Fs, filename string, data []byte, perm os.FileMode) error {
	f, err := fs.OpenFile(filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, perm)
	if err != nil {
		return err
	}
	n, err := f.Write(data)
	if err == nil && n < len(data) {
		err = io.ErrShortWrite
	}
	if err1 := f.Close(); err == nil {
		err = err1
	}
	return err
}

// Random number state.
// We generate random temporary file names so that there's a good
// chance the file doesn't exist yet - keeps the number of tries in
// TempFile to a minimum.
var (
	randNum uint32
	randmu  sync.Mutex
)

func reseed() uint32 {
	return uint32(time.Now().UnixNano() + int64(os.Getpid()))
}

func nextRandom() string {
	randmu.Lock()
	r := randNum
	if r == 0 {
		r = reseed()
	}
	r = r*1664525 + 1013904223 // constants from Numerical Recipes
	randNum = r
	randmu.Unlock()
	return strconv.Itoa(int(1e9 + r%1e9))[1:]
}

// TempFile creates a new temporary file in the directory dir,
// opens the file for reading and writing, and returns the resulting *os.File.
// The filename is generated by taking pattern and adding a random
// string to the end. If pattern includes a "*", the random string
// replaces the last "*".
// If dir is the empty string, TempFile uses the default directory
// for temporary files (see os.TempDir).
// Multiple programs calling TempFile simultaneously
// will not choose the same file. The caller can use f.Name()
// to find the pathname of the file. It is the caller's responsibility
// to remove the file when no longer needed.
func (a Afero) TempFile(dir, pattern string) (f File, err error) {
	return TempFile(a.Fs, dir, pattern)
}

func TempFile(fs Fs, dir, pattern string) (f File, err error) {
	if dir == "" {
		dir = os.TempDir()
	}

	var prefix, suffix string
	if pos := strings.LastIndex(pattern, "*"); pos != -1 {
		prefix, suffix = pattern[:pos], pattern[pos+1:]
	} else {
		prefix = pattern
	}

	nconflict := 0
	for i := 0; i < 10000; i++ {
		name := filepath.Join(dir, prefix+nextRandom()+suffix)
		f, err = fs.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0o600)
		if os.IsExist(err) {
			if nconflict++; nconflict > 10 {
				randmu.Lock()
				randNum = reseed()
				randmu.Unlock()
			}
			continue
		}
		break
	}
	return
}

// TempDir creates a new temporary directory in the directory dir
// with a name beginning with prefix and returns the path of the
// new directory.  If dir is the empty string, TempDir uses the
// default directory for temporary files (see os.TempDir).
// Multiple programs calling TempDir simultaneously
// will not choose the same directory.  It is the caller's responsibility
// to remove the directory when no longer needed.
func (a Afero) TempDir(dir, prefix string) (name string, err error) {
	return TempDir(a.Fs, dir, prefix)
}

func TempDir(fs Fs, dir, prefix string) (name string, err error) {
	if dir == "" {
		dir = os.TempDir()
	}

	nconflict := 0
	for i := 0; i < 10000; i++ {
		try := filepath.Join(dir, prefix+nextRandom())
		err = fs.Mkdir(try, 0o700)
		if os.IsExist(err) {
			if nconflict++; nconflict > 10 {
				randmu.Lock()
				randNum = reseed()
				randmu.Unlock()
			}
			continue
		}
		if err == nil {
			name = try
		}
		break
	}
	return
}
 07070100000AFE000081A4000000000000000000000001645E367C0000040C000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/lstater.go  // Copyright © 2018 Steve Francia <spf@spf13.com>.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package afero

import (
	"os"
)

// Lstater is an optional interface in Afero. It is only implemented by the
// filesystems saying so.
// It will call Lstat if the filesystem iself is, or it delegates to, the os filesystem.
// Else it will call Stat.
// In addtion to the FileInfo, it will return a boolean telling whether Lstat was called or not.
type Lstater interface {
	LstatIfPossible(name string) (os.FileInfo, bool, error)
}
07070100000AFF000081A4000000000000000000000001645E367C00000B35000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/match.go    // Copyright © 2014 Steve Francia <spf@spf13.com>.
// Copyright 2009 The Go Authors. All rights reserved.

// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package afero

import (
	"path/filepath"
	"sort"
	"strings"
)

// Glob returns the names of all files matching pattern or nil
// if there is no matching file. The syntax of patterns is the same
// as in Match. The pattern may describe hierarchical names such as
// /usr/*/bin/ed (assuming the Separator is '/').
//
// Glob ignores file system errors such as I/O errors reading directories.
// The only possible returned error is ErrBadPattern, when pattern
// is malformed.
//
// This was adapted from (http://golang.org/pkg/path/filepath) and uses several
// built-ins from that package.
func Glob(fs Fs, pattern string) (matches []string, err error) {
	if !hasMeta(pattern) {
		// Lstat not supported by a ll filesystems.
		if _, err = lstatIfPossible(fs, pattern); err != nil {
			return nil, nil
		}
		return []string{pattern}, nil
	}

	dir, file := filepath.Split(pattern)
	switch dir {
	case "":
		dir = "."
	case string(filepath.Separator):
	// nothing
	default:
		dir = dir[0 : len(dir)-1] // chop off trailing separator
	}

	if !hasMeta(dir) {
		return glob(fs, dir, file, nil)
	}

	var m []string
	m, err = Glob(fs, dir)
	if err != nil {
		return
	}
	for _, d := range m {
		matches, err = glob(fs, d, file, matches)
		if err != nil {
			return
		}
	}
	return
}

// glob searches for files matching pattern in the directory dir
// and appends them to matches. If the directory cannot be
// opened, it returns the existing matches. New matches are
// added in lexicographical order.
func glob(fs Fs, dir, pattern string, matches []string) (m []string, e error) {
	m = matches
	fi, err := fs.Stat(dir)
	if err != nil {
		return
	}
	if !fi.IsDir() {
		return
	}
	d, err := fs.Open(dir)
	if err != nil {
		return
	}
	defer d.Close()

	names, _ := d.Readdirnames(-1)
	sort.Strings(names)

	for _, n := range names {
		matched, err := filepath.Match(pattern, n)
		if err != nil {
			return m, err
		}
		if matched {
			m = append(m, filepath.Join(dir, n))
		}
	}
	return
}

// hasMeta reports whether path contains any of the magic characters
// recognized by Match.
func hasMeta(path string) bool {
	// TODO(niemeyer): Should other magic characters be added here?
	return strings.ContainsAny(path, "*?[")
}
   07070100000B00000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/mem 07070100000B01000081A4000000000000000000000001645E367C000003CB000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/mem/dir.go  // Copyright © 2014 Steve Francia <spf@spf13.com>.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package mem

type Dir interface {
	Len() int
	Names() []string
	Files() []*FileData
	Add(*FileData)
	Remove(*FileData)
}

func RemoveFromMemDir(dir *FileData, f *FileData) {
	dir.memDir.Remove(f)
}

func AddToMemDir(dir *FileData, f *FileData) {
	dir.memDir.Add(f)
}

func InitializeDir(d *FileData) {
	if d.memDir == nil {
		d.dir = true
		d.memDir = &DirMap{}
	}
}
 07070100000B02000081A4000000000000000000000001645E367C00000555000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/mem/dirmap.go   // Copyright © 2015 Steve Francia <spf@spf13.com>.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package mem

import "sort"

type DirMap map[string]*FileData

func (m DirMap) Len() int           { return len(m) }
func (m DirMap) Add(f *FileData)    { m[f.name] = f }
func (m DirMap) Remove(f *FileData) { delete(m, f.name) }
func (m DirMap) Files() (files []*FileData) {
	for _, f := range m {
		files = append(files, f)
	}
	sort.Sort(filesSorter(files))
	return files
}

// implement sort.Interface for []*FileData
type filesSorter []*FileData

func (s filesSorter) Len() int           { return len(s) }
func (s filesSorter) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }
func (s filesSorter) Less(i, j int) bool { return s[i].name < s[j].name }

func (m DirMap) Names() (names []string) {
	for x := range m {
		names = append(names, x)
	}
	return names
}
   07070100000B03000081A4000000000000000000000001645E367C00001DB5000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/mem/file.go // Copyright © 2015 Steve Francia <spf@spf13.com>.
// Copyright 2013 tsuru authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package mem

import (
	"bytes"
	"errors"
	"io"
	"io/fs"
	"os"
	"path/filepath"
	"sync"
	"sync/atomic"
	"time"

	"github.com/spf13/afero/internal/common"
)

const FilePathSeparator = string(filepath.Separator)

var _ fs.ReadDirFile = &File{}

type File struct {
	// atomic requires 64-bit alignment for struct field access
	at           int64
	readDirCount int64
	closed       bool
	readOnly     bool
	fileData     *FileData
}

func NewFileHandle(data *FileData) *File {
	return &File{fileData: data}
}

func NewReadOnlyFileHandle(data *FileData) *File {
	return &File{fileData: data, readOnly: true}
}

func (f File) Data() *FileData {
	return f.fileData
}

type FileData struct {
	sync.Mutex
	name    string
	data    []byte
	memDir  Dir
	dir     bool
	mode    os.FileMode
	modtime time.Time
	uid     int
	gid     int
}

func (d *FileData) Name() string {
	d.Lock()
	defer d.Unlock()
	return d.name
}

func CreateFile(name string) *FileData {
	return &FileData{name: name, mode: os.ModeTemporary, modtime: time.Now()}
}

func CreateDir(name string) *FileData {
	return &FileData{name: name, memDir: &DirMap{}, dir: true, modtime: time.Now()}
}

func ChangeFileName(f *FileData, newname string) {
	f.Lock()
	f.name = newname
	f.Unlock()
}

func SetMode(f *FileData, mode os.FileMode) {
	f.Lock()
	f.mode = mode
	f.Unlock()
}

func SetModTime(f *FileData, mtime time.Time) {
	f.Lock()
	setModTime(f, mtime)
	f.Unlock()
}

func setModTime(f *FileData, mtime time.Time) {
	f.modtime = mtime
}

func SetUID(f *FileData, uid int) {
	f.Lock()
	f.uid = uid
	f.Unlock()
}

func SetGID(f *FileData, gid int) {
	f.Lock()
	f.gid = gid
	f.Unlock()
}

func GetFileInfo(f *FileData) *FileInfo {
	return &FileInfo{f}
}

func (f *File) Open() error {
	atomic.StoreInt64(&f.at, 0)
	atomic.StoreInt64(&f.readDirCount, 0)
	f.fileData.Lock()
	f.closed = false
	f.fileData.Unlock()
	return nil
}

func (f *File) Close() error {
	f.fileData.Lock()
	f.closed = true
	if !f.readOnly {
		setModTime(f.fileData, time.Now())
	}
	f.fileData.Unlock()
	return nil
}

func (f *File) Name() string {
	return f.fileData.Name()
}

func (f *File) Stat() (os.FileInfo, error) {
	return &FileInfo{f.fileData}, nil
}

func (f *File) Sync() error {
	return nil
}

func (f *File) Readdir(count int) (res []os.FileInfo, err error) {
	if !f.fileData.dir {
		return nil, &os.PathError{Op: "readdir", Path: f.fileData.name, Err: errors.New("not a dir")}
	}
	var outLength int64

	f.fileData.Lock()
	files := f.fileData.memDir.Files()[f.readDirCount:]
	if count > 0 {
		if len(files) < count {
			outLength = int64(len(files))
		} else {
			outLength = int64(count)
		}
		if len(files) == 0 {
			err = io.EOF
		}
	} else {
		outLength = int64(len(files))
	}
	f.readDirCount += outLength
	f.fileData.Unlock()

	res = make([]os.FileInfo, outLength)
	for i := range res {
		res[i] = &FileInfo{files[i]}
	}

	return res, err
}

func (f *File) Readdirnames(n int) (names []string, err error) {
	fi, err := f.Readdir(n)
	names = make([]string, len(fi))
	for i, f := range fi {
		_, names[i] = filepath.Split(f.Name())
	}
	return names, err
}

// Implements fs.ReadDirFile
func (f *File) ReadDir(n int) ([]fs.DirEntry, error) {
	fi, err := f.Readdir(n)
	if err != nil {
		return nil, err
	}
	di := make([]fs.DirEntry, len(fi))
	for i, f := range fi {
		di[i] = common.FileInfoDirEntry{FileInfo: f}
	}
	return di, nil
}

func (f *File) Read(b []byte) (n int, err error) {
	f.fileData.Lock()
	defer f.fileData.Unlock()
	if f.closed {
		return 0, ErrFileClosed
	}
	if len(b) > 0 && int(f.at) == len(f.fileData.data) {
		return 0, io.EOF
	}
	if int(f.at) > len(f.fileData.data) {
		return 0, io.ErrUnexpectedEOF
	}
	if len(f.fileData.data)-int(f.at) >= len(b) {
		n = len(b)
	} else {
		n = len(f.fileData.data) - int(f.at)
	}
	copy(b, f.fileData.data[f.at:f.at+int64(n)])
	atomic.AddInt64(&f.at, int64(n))
	return
}

func (f *File) ReadAt(b []byte, off int64) (n int, err error) {
	prev := atomic.LoadInt64(&f.at)
	atomic.StoreInt64(&f.at, off)
	n, err = f.Read(b)
	atomic.StoreInt64(&f.at, prev)
	return
}

func (f *File) Truncate(size int64) error {
	if f.closed {
		return ErrFileClosed
	}
	if f.readOnly {
		return &os.PathError{Op: "truncate", Path: f.fileData.name, Err: errors.New("file handle is read only")}
	}
	if size < 0 {
		return ErrOutOfRange
	}
	f.fileData.Lock()
	defer f.fileData.Unlock()
	if size > int64(len(f.fileData.data)) {
		diff := size - int64(len(f.fileData.data))
		f.fileData.data = append(f.fileData.data, bytes.Repeat([]byte{0o0}, int(diff))...)
	} else {
		f.fileData.data = f.fileData.data[0:size]
	}
	setModTime(f.fileData, time.Now())
	return nil
}

func (f *File) Seek(offset int64, whence int) (int64, error) {
	if f.closed {
		return 0, ErrFileClosed
	}
	switch whence {
	case io.SeekStart:
		atomic.StoreInt64(&f.at, offset)
	case io.SeekCurrent:
		atomic.AddInt64(&f.at, offset)
	case io.SeekEnd:
		atomic.StoreInt64(&f.at, int64(len(f.fileData.data))+offset)
	}
	return f.at, nil
}

func (f *File) Write(b []byte) (n int, err error) {
	if f.closed {
		return 0, ErrFileClosed
	}
	if f.readOnly {
		return 0, &os.PathError{Op: "write", Path: f.fileData.name, Err: errors.New("file handle is read only")}
	}
	n = len(b)
	cur := atomic.LoadInt64(&f.at)
	f.fileData.Lock()
	defer f.fileData.Unlock()
	diff := cur - int64(len(f.fileData.data))
	var tail []byte
	if n+int(cur) < len(f.fileData.data) {
		tail = f.fileData.data[n+int(cur):]
	}
	if diff > 0 {
		f.fileData.data = append(f.fileData.data, append(bytes.Repeat([]byte{0o0}, int(diff)), b...)...)
		f.fileData.data = append(f.fileData.data, tail...)
	} else {
		f.fileData.data = append(f.fileData.data[:cur], b...)
		f.fileData.data = append(f.fileData.data, tail...)
	}
	setModTime(f.fileData, time.Now())

	atomic.AddInt64(&f.at, int64(n))
	return
}

func (f *File) WriteAt(b []byte, off int64) (n int, err error) {
	atomic.StoreInt64(&f.at, off)
	return f.Write(b)
}

func (f *File) WriteString(s string) (ret int, err error) {
	return f.Write([]byte(s))
}

func (f *File) Info() *FileInfo {
	return &FileInfo{f.fileData}
}

type FileInfo struct {
	*FileData
}

// Implements os.FileInfo
func (s *FileInfo) Name() string {
	s.Lock()
	_, name := filepath.Split(s.name)
	s.Unlock()
	return name
}

func (s *FileInfo) Mode() os.FileMode {
	s.Lock()
	defer s.Unlock()
	return s.mode
}

func (s *FileInfo) ModTime() time.Time {
	s.Lock()
	defer s.Unlock()
	return s.modtime
}

func (s *FileInfo) IsDir() bool {
	s.Lock()
	defer s.Unlock()
	return s.dir
}
func (s *FileInfo) Sys() interface{} { return nil }
func (s *FileInfo) Size() int64 {
	if s.IsDir() {
		return int64(42)
	}
	s.Lock()
	defer s.Unlock()
	return int64(len(s.data))
}

var (
	ErrFileClosed        = errors.New("File is closed")
	ErrOutOfRange        = errors.New("out of range")
	ErrTooLarge          = errors.New("too large")
	ErrFileNotFound      = os.ErrNotExist
	ErrFileExists        = os.ErrExist
	ErrDestinationExists = os.ErrExist
)
   07070100000B04000081A4000000000000000000000001645E367C000023D6000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/memmap.go   // Copyright © 2014 Steve Francia <spf@spf13.com>.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package afero

import (
	"fmt"
	"io"
	"log"
	"os"
	"path/filepath"
	"strings"
	"sync"
	"time"

	"github.com/spf13/afero/mem"
)

const chmodBits = os.ModePerm | os.ModeSetuid | os.ModeSetgid | os.ModeSticky // Only a subset of bits are allowed to be changed. Documented under os.Chmod()

type MemMapFs struct {
	mu   sync.RWMutex
	data map[string]*mem.FileData
	init sync.Once
}

func NewMemMapFs() Fs {
	return &MemMapFs{}
}

func (m *MemMapFs) getData() map[string]*mem.FileData {
	m.init.Do(func() {
		m.data = make(map[string]*mem.FileData)
		// Root should always exist, right?
		// TODO: what about windows?
		root := mem.CreateDir(FilePathSeparator)
		mem.SetMode(root, os.ModeDir|0o755)
		m.data[FilePathSeparator] = root
	})
	return m.data
}

func (*MemMapFs) Name() string { return "MemMapFS" }

func (m *MemMapFs) Create(name string) (File, error) {
	name = normalizePath(name)
	m.mu.Lock()
	file := mem.CreateFile(name)
	m.getData()[name] = file
	m.registerWithParent(file, 0)
	m.mu.Unlock()
	return mem.NewFileHandle(file), nil
}

func (m *MemMapFs) unRegisterWithParent(fileName string) error {
	f, err := m.lockfreeOpen(fileName)
	if err != nil {
		return err
	}
	parent := m.findParent(f)
	if parent == nil {
		log.Panic("parent of ", f.Name(), " is nil")
	}

	parent.Lock()
	mem.RemoveFromMemDir(parent, f)
	parent.Unlock()
	return nil
}

func (m *MemMapFs) findParent(f *mem.FileData) *mem.FileData {
	pdir, _ := filepath.Split(f.Name())
	pdir = filepath.Clean(pdir)
	pfile, err := m.lockfreeOpen(pdir)
	if err != nil {
		return nil
	}
	return pfile
}

func (m *MemMapFs) registerWithParent(f *mem.FileData, perm os.FileMode) {
	if f == nil {
		return
	}
	parent := m.findParent(f)
	if parent == nil {
		pdir := filepath.Dir(filepath.Clean(f.Name()))
		err := m.lockfreeMkdir(pdir, perm)
		if err != nil {
			// log.Println("Mkdir error:", err)
			return
		}
		parent, err = m.lockfreeOpen(pdir)
		if err != nil {
			// log.Println("Open after Mkdir error:", err)
			return
		}
	}

	parent.Lock()
	mem.InitializeDir(parent)
	mem.AddToMemDir(parent, f)
	parent.Unlock()
}

func (m *MemMapFs) lockfreeMkdir(name string, perm os.FileMode) error {
	name = normalizePath(name)
	x, ok := m.getData()[name]
	if ok {
		// Only return ErrFileExists if it's a file, not a directory.
		i := mem.FileInfo{FileData: x}
		if !i.IsDir() {
			return ErrFileExists
		}
	} else {
		item := mem.CreateDir(name)
		mem.SetMode(item, os.ModeDir|perm)
		m.getData()[name] = item
		m.registerWithParent(item, perm)
	}
	return nil
}

func (m *MemMapFs) Mkdir(name string, perm os.FileMode) error {
	perm &= chmodBits
	name = normalizePath(name)

	m.mu.RLock()
	_, ok := m.getData()[name]
	m.mu.RUnlock()
	if ok {
		return &os.PathError{Op: "mkdir", Path: name, Err: ErrFileExists}
	}

	m.mu.Lock()
	// Dobule check that it doesn't exist.
	if _, ok := m.getData()[name]; ok {
		m.mu.Unlock()
		return &os.PathError{Op: "mkdir", Path: name, Err: ErrFileExists}
	}
	item := mem.CreateDir(name)
	mem.SetMode(item, os.ModeDir|perm)
	m.getData()[name] = item
	m.registerWithParent(item, perm)
	m.mu.Unlock()

	return m.setFileMode(name, perm|os.ModeDir)
}

func (m *MemMapFs) MkdirAll(path string, perm os.FileMode) error {
	err := m.Mkdir(path, perm)
	if err != nil {
		if err.(*os.PathError).Err == ErrFileExists {
			return nil
		}
		return err
	}
	return nil
}

// Handle some relative paths
func normalizePath(path string) string {
	path = filepath.Clean(path)

	switch path {
	case ".":
		return FilePathSeparator
	case "..":
		return FilePathSeparator
	default:
		return path
	}
}

func (m *MemMapFs) Open(name string) (File, error) {
	f, err := m.open(name)
	if f != nil {
		return mem.NewReadOnlyFileHandle(f), err
	}
	return nil, err
}

func (m *MemMapFs) openWrite(name string) (File, error) {
	f, err := m.open(name)
	if f != nil {
		return mem.NewFileHandle(f), err
	}
	return nil, err
}

func (m *MemMapFs) open(name string) (*mem.FileData, error) {
	name = normalizePath(name)

	m.mu.RLock()
	f, ok := m.getData()[name]
	m.mu.RUnlock()
	if !ok {
		return nil, &os.PathError{Op: "open", Path: name, Err: ErrFileNotFound}
	}
	return f, nil
}

func (m *MemMapFs) lockfreeOpen(name string) (*mem.FileData, error) {
	name = normalizePath(name)
	f, ok := m.getData()[name]
	if ok {
		return f, nil
	} else {
		return nil, ErrFileNotFound
	}
}

func (m *MemMapFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
	perm &= chmodBits
	chmod := false
	file, err := m.openWrite(name)
	if err == nil && (flag&os.O_EXCL > 0) {
		return nil, &os.PathError{Op: "open", Path: name, Err: ErrFileExists}
	}
	if os.IsNotExist(err) && (flag&os.O_CREATE > 0) {
		file, err = m.Create(name)
		chmod = true
	}
	if err != nil {
		return nil, err
	}
	if flag == os.O_RDONLY {
		file = mem.NewReadOnlyFileHandle(file.(*mem.File).Data())
	}
	if flag&os.O_APPEND > 0 {
		_, err = file.Seek(0, io.SeekEnd)
		if err != nil {
			file.Close()
			return nil, err
		}
	}
	if flag&os.O_TRUNC > 0 && flag&(os.O_RDWR|os.O_WRONLY) > 0 {
		err = file.Truncate(0)
		if err != nil {
			file.Close()
			return nil, err
		}
	}
	if chmod {
		return file, m.setFileMode(name, perm)
	}
	return file, nil
}

func (m *MemMapFs) Remove(name string) error {
	name = normalizePath(name)

	m.mu.Lock()
	defer m.mu.Unlock()

	if _, ok := m.getData()[name]; ok {
		err := m.unRegisterWithParent(name)
		if err != nil {
			return &os.PathError{Op: "remove", Path: name, Err: err}
		}
		delete(m.getData(), name)
	} else {
		return &os.PathError{Op: "remove", Path: name, Err: os.ErrNotExist}
	}
	return nil
}

func (m *MemMapFs) RemoveAll(path string) error {
	path = normalizePath(path)
	m.mu.Lock()
	m.unRegisterWithParent(path)
	m.mu.Unlock()

	m.mu.RLock()
	defer m.mu.RUnlock()

	for p := range m.getData() {
		if p == path || strings.HasPrefix(p, path+FilePathSeparator) {
			m.mu.RUnlock()
			m.mu.Lock()
			delete(m.getData(), p)
			m.mu.Unlock()
			m.mu.RLock()
		}
	}
	return nil
}

func (m *MemMapFs) Rename(oldname, newname string) error {
	oldname = normalizePath(oldname)
	newname = normalizePath(newname)

	if oldname == newname {
		return nil
	}

	m.mu.RLock()
	defer m.mu.RUnlock()
	if _, ok := m.getData()[oldname]; ok {
		m.mu.RUnlock()
		m.mu.Lock()
		m.unRegisterWithParent(oldname)
		fileData := m.getData()[oldname]
		delete(m.getData(), oldname)
		mem.ChangeFileName(fileData, newname)
		m.getData()[newname] = fileData
		m.registerWithParent(fileData, 0)
		m.mu.Unlock()
		m.mu.RLock()
	} else {
		return &os.PathError{Op: "rename", Path: oldname, Err: ErrFileNotFound}
	}

	for p, fileData := range m.getData() {
		if strings.HasPrefix(p, oldname+FilePathSeparator) {
			m.mu.RUnlock()
			m.mu.Lock()
			delete(m.getData(), p)
			p := strings.Replace(p, oldname, newname, 1)
			m.getData()[p] = fileData
			m.mu.Unlock()
			m.mu.RLock()
		}
	}
	return nil
}

func (m *MemMapFs) LstatIfPossible(name string) (os.FileInfo, bool, error) {
	fileInfo, err := m.Stat(name)
	return fileInfo, false, err
}

func (m *MemMapFs) Stat(name string) (os.FileInfo, error) {
	f, err := m.Open(name)
	if err != nil {
		return nil, err
	}
	fi := mem.GetFileInfo(f.(*mem.File).Data())
	return fi, nil
}

func (m *MemMapFs) Chmod(name string, mode os.FileMode) error {
	mode &= chmodBits

	m.mu.RLock()
	f, ok := m.getData()[name]
	m.mu.RUnlock()
	if !ok {
		return &os.PathError{Op: "chmod", Path: name, Err: ErrFileNotFound}
	}
	prevOtherBits := mem.GetFileInfo(f).Mode() & ^chmodBits

	mode = prevOtherBits | mode
	return m.setFileMode(name, mode)
}

func (m *MemMapFs) setFileMode(name string, mode os.FileMode) error {
	name = normalizePath(name)

	m.mu.RLock()
	f, ok := m.getData()[name]
	m.mu.RUnlock()
	if !ok {
		return &os.PathError{Op: "chmod", Path: name, Err: ErrFileNotFound}
	}

	m.mu.Lock()
	mem.SetMode(f, mode)
	m.mu.Unlock()

	return nil
}

func (m *MemMapFs) Chown(name string, uid, gid int) error {
	name = normalizePath(name)

	m.mu.RLock()
	f, ok := m.getData()[name]
	m.mu.RUnlock()
	if !ok {
		return &os.PathError{Op: "chown", Path: name, Err: ErrFileNotFound}
	}

	mem.SetUID(f, uid)
	mem.SetGID(f, gid)

	return nil
}

func (m *MemMapFs) Chtimes(name string, atime time.Time, mtime time.Time) error {
	name = normalizePath(name)

	m.mu.RLock()
	f, ok := m.getData()[name]
	m.mu.RUnlock()
	if !ok {
		return &os.PathError{Op: "chtimes", Path: name, Err: ErrFileNotFound}
	}

	m.mu.Lock()
	mem.SetModTime(f, mtime)
	m.mu.Unlock()

	return nil
}

func (m *MemMapFs) List() {
	for _, x := range m.data {
		y := mem.FileInfo{FileData: x}
		fmt.Println(x.Name(), y.Size())
	}
}
  07070100000B05000081A4000000000000000000000001645E367C00000B6F000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/os.go   // Copyright © 2014 Steve Francia <spf@spf13.com>.
// Copyright 2013 tsuru authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package afero

import (
	"os"
	"time"
)

var _ Lstater = (*OsFs)(nil)

// OsFs is a Fs implementation that uses functions provided by the os package.
//
// For details in any method, check the documentation of the os package
// (http://golang.org/pkg/os/).
type OsFs struct{}

func NewOsFs() Fs {
	return &OsFs{}
}

func (OsFs) Name() string { return "OsFs" }

func (OsFs) Create(name string) (File, error) {
	f, e := os.Create(name)
	if f == nil {
		// while this looks strange, we need to return a bare nil (of type nil) not
		// a nil value of type *os.File or nil won't be nil
		return nil, e
	}
	return f, e
}

func (OsFs) Mkdir(name string, perm os.FileMode) error {
	return os.Mkdir(name, perm)
}

func (OsFs) MkdirAll(path string, perm os.FileMode) error {
	return os.MkdirAll(path, perm)
}

func (OsFs) Open(name string) (File, error) {
	f, e := os.Open(name)
	if f == nil {
		// while this looks strange, we need to return a bare nil (of type nil) not
		// a nil value of type *os.File or nil won't be nil
		return nil, e
	}
	return f, e
}

func (OsFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
	f, e := os.OpenFile(name, flag, perm)
	if f == nil {
		// while this looks strange, we need to return a bare nil (of type nil) not
		// a nil value of type *os.File or nil won't be nil
		return nil, e
	}
	return f, e
}

func (OsFs) Remove(name string) error {
	return os.Remove(name)
}

func (OsFs) RemoveAll(path string) error {
	return os.RemoveAll(path)
}

func (OsFs) Rename(oldname, newname string) error {
	return os.Rename(oldname, newname)
}

func (OsFs) Stat(name string) (os.FileInfo, error) {
	return os.Stat(name)
}

func (OsFs) Chmod(name string, mode os.FileMode) error {
	return os.Chmod(name, mode)
}

func (OsFs) Chown(name string, uid, gid int) error {
	return os.Chown(name, uid, gid)
}

func (OsFs) Chtimes(name string, atime time.Time, mtime time.Time) error {
	return os.Chtimes(name, atime, mtime)
}

func (OsFs) LstatIfPossible(name string) (os.FileInfo, bool, error) {
	fi, err := os.Lstat(name)
	return fi, true, err
}

func (OsFs) SymlinkIfPossible(oldname, newname string) error {
	return os.Symlink(oldname, newname)
}

func (OsFs) ReadlinkIfPossible(name string) (string, error) {
	return os.Readlink(name)
}
 07070100000B06000081A4000000000000000000000001645E367C00000B70000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/path.go // Copyright ©2015 The Go Authors
// Copyright ©2015 Steve Francia <spf@spf13.com>
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package afero

import (
	"os"
	"path/filepath"
	"sort"
)

// readDirNames reads the directory named by dirname and returns
// a sorted list of directory entries.
// adapted from https://golang.org/src/path/filepath/path.go
func readDirNames(fs Fs, dirname string) ([]string, error) {
	f, err := fs.Open(dirname)
	if err != nil {
		return nil, err
	}
	names, err := f.Readdirnames(-1)
	f.Close()
	if err != nil {
		return nil, err
	}
	sort.Strings(names)
	return names, nil
}

// walk recursively descends path, calling walkFn
// adapted from https://golang.org/src/path/filepath/path.go
func walk(fs Fs, path string, info os.FileInfo, walkFn filepath.WalkFunc) error {
	err := walkFn(path, info, nil)
	if err != nil {
		if info.IsDir() && err == filepath.SkipDir {
			return nil
		}
		return err
	}

	if !info.IsDir() {
		return nil
	}

	names, err := readDirNames(fs, path)
	if err != nil {
		return walkFn(path, info, err)
	}

	for _, name := range names {
		filename := filepath.Join(path, name)
		fileInfo, err := lstatIfPossible(fs, filename)
		if err != nil {
			if err := walkFn(filename, fileInfo, err); err != nil && err != filepath.SkipDir {
				return err
			}
		} else {
			err = walk(fs, filename, fileInfo, walkFn)
			if err != nil {
				if !fileInfo.IsDir() || err != filepath.SkipDir {
					return err
				}
			}
		}
	}
	return nil
}

// if the filesystem supports it, use Lstat, else use fs.Stat
func lstatIfPossible(fs Fs, path string) (os.FileInfo, error) {
	if lfs, ok := fs.(Lstater); ok {
		fi, _, err := lfs.LstatIfPossible(path)
		return fi, err
	}
	return fs.Stat(path)
}

// Walk walks the file tree rooted at root, calling walkFn for each file or
// directory in the tree, including root. All errors that arise visiting files
// and directories are filtered by walkFn. The files are walked in lexical
// order, which makes the output deterministic but means that for very
// large directories Walk can be inefficient.
// Walk does not follow symbolic links.

func (a Afero) Walk(root string, walkFn filepath.WalkFunc) error {
	return Walk(a.Fs, root, walkFn)
}

func Walk(fs Fs, root string, walkFn filepath.WalkFunc) error {
	info, err := lstatIfPossible(fs, root)
	if err != nil {
		return walkFn(root, nil, err)
	}
	return walk(fs, root, info, walkFn)
}
07070100000B07000081A4000000000000000000000001645E367C00000848000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/readonlyfs.go   package afero

import (
	"os"
	"syscall"
	"time"
)

var _ Lstater = (*ReadOnlyFs)(nil)

type ReadOnlyFs struct {
	source Fs
}

func NewReadOnlyFs(source Fs) Fs {
	return &ReadOnlyFs{source: source}
}

func (r *ReadOnlyFs) ReadDir(name string) ([]os.FileInfo, error) {
	return ReadDir(r.source, name)
}

func (r *ReadOnlyFs) Chtimes(n string, a, m time.Time) error {
	return syscall.EPERM
}

func (r *ReadOnlyFs) Chmod(n string, m os.FileMode) error {
	return syscall.EPERM
}

func (r *ReadOnlyFs) Chown(n string, uid, gid int) error {
	return syscall.EPERM
}

func (r *ReadOnlyFs) Name() string {
	return "ReadOnlyFilter"
}

func (r *ReadOnlyFs) Stat(name string) (os.FileInfo, error) {
	return r.source.Stat(name)
}

func (r *ReadOnlyFs) LstatIfPossible(name string) (os.FileInfo, bool, error) {
	if lsf, ok := r.source.(Lstater); ok {
		return lsf.LstatIfPossible(name)
	}
	fi, err := r.Stat(name)
	return fi, false, err
}

func (r *ReadOnlyFs) SymlinkIfPossible(oldname, newname string) error {
	return &os.LinkError{Op: "symlink", Old: oldname, New: newname, Err: ErrNoSymlink}
}

func (r *ReadOnlyFs) ReadlinkIfPossible(name string) (string, error) {
	if srdr, ok := r.source.(LinkReader); ok {
		return srdr.ReadlinkIfPossible(name)
	}

	return "", &os.PathError{Op: "readlink", Path: name, Err: ErrNoReadlink}
}

func (r *ReadOnlyFs) Rename(o, n string) error {
	return syscall.EPERM
}

func (r *ReadOnlyFs) RemoveAll(p string) error {
	return syscall.EPERM
}

func (r *ReadOnlyFs) Remove(n string) error {
	return syscall.EPERM
}

func (r *ReadOnlyFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
	if flag&(os.O_WRONLY|syscall.O_RDWR|os.O_APPEND|os.O_CREATE|os.O_TRUNC) != 0 {
		return nil, syscall.EPERM
	}
	return r.source.OpenFile(name, flag, perm)
}

func (r *ReadOnlyFs) Open(n string) (File, error) {
	return r.source.Open(n)
}

func (r *ReadOnlyFs) Mkdir(n string, p os.FileMode) error {
	return syscall.EPERM
}

func (r *ReadOnlyFs) MkdirAll(n string, p os.FileMode) error {
	return syscall.EPERM
}

func (r *ReadOnlyFs) Create(n string) (File, error) {
	return nil, syscall.EPERM
}
07070100000B08000081A4000000000000000000000001645E367C00001111000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/regexpfs.go package afero

import (
	"os"
	"regexp"
	"syscall"
	"time"
)

// The RegexpFs filters files (not directories) by regular expression. Only
// files matching the given regexp will be allowed, all others get a ENOENT error (
// "No such file or directory").
type RegexpFs struct {
	re     *regexp.Regexp
	source Fs
}

func NewRegexpFs(source Fs, re *regexp.Regexp) Fs {
	return &RegexpFs{source: source, re: re}
}

type RegexpFile struct {
	f  File
	re *regexp.Regexp
}

func (r *RegexpFs) matchesName(name string) error {
	if r.re == nil {
		return nil
	}
	if r.re.MatchString(name) {
		return nil
	}
	return syscall.ENOENT
}

func (r *RegexpFs) dirOrMatches(name string) error {
	dir, err := IsDir(r.source, name)
	if err != nil {
		return err
	}
	if dir {
		return nil
	}
	return r.matchesName(name)
}

func (r *RegexpFs) Chtimes(name string, a, m time.Time) error {
	if err := r.dirOrMatches(name); err != nil {
		return err
	}
	return r.source.Chtimes(name, a, m)
}

func (r *RegexpFs) Chmod(name string, mode os.FileMode) error {
	if err := r.dirOrMatches(name); err != nil {
		return err
	}
	return r.source.Chmod(name, mode)
}

func (r *RegexpFs) Chown(name string, uid, gid int) error {
	if err := r.dirOrMatches(name); err != nil {
		return err
	}
	return r.source.Chown(name, uid, gid)
}

func (r *RegexpFs) Name() string {
	return "RegexpFs"
}

func (r *RegexpFs) Stat(name string) (os.FileInfo, error) {
	if err := r.dirOrMatches(name); err != nil {
		return nil, err
	}
	return r.source.Stat(name)
}

func (r *RegexpFs) Rename(oldname, newname string) error {
	dir, err := IsDir(r.source, oldname)
	if err != nil {
		return err
	}
	if dir {
		return nil
	}
	if err := r.matchesName(oldname); err != nil {
		return err
	}
	if err := r.matchesName(newname); err != nil {
		return err
	}
	return r.source.Rename(oldname, newname)
}

func (r *RegexpFs) RemoveAll(p string) error {
	dir, err := IsDir(r.source, p)
	if err != nil {
		return err
	}
	if !dir {
		if err := r.matchesName(p); err != nil {
			return err
		}
	}
	return r.source.RemoveAll(p)
}

func (r *RegexpFs) Remove(name string) error {
	if err := r.dirOrMatches(name); err != nil {
		return err
	}
	return r.source.Remove(name)
}

func (r *RegexpFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
	if err := r.dirOrMatches(name); err != nil {
		return nil, err
	}
	return r.source.OpenFile(name, flag, perm)
}

func (r *RegexpFs) Open(name string) (File, error) {
	dir, err := IsDir(r.source, name)
	if err != nil {
		return nil, err
	}
	if !dir {
		if err := r.matchesName(name); err != nil {
			return nil, err
		}
	}
	f, err := r.source.Open(name)
	if err != nil {
		return nil, err
	}
	return &RegexpFile{f: f, re: r.re}, nil
}

func (r *RegexpFs) Mkdir(n string, p os.FileMode) error {
	return r.source.Mkdir(n, p)
}

func (r *RegexpFs) MkdirAll(n string, p os.FileMode) error {
	return r.source.MkdirAll(n, p)
}

func (r *RegexpFs) Create(name string) (File, error) {
	if err := r.matchesName(name); err != nil {
		return nil, err
	}
	return r.source.Create(name)
}

func (f *RegexpFile) Close() error {
	return f.f.Close()
}

func (f *RegexpFile) Read(s []byte) (int, error) {
	return f.f.Read(s)
}

func (f *RegexpFile) ReadAt(s []byte, o int64) (int, error) {
	return f.f.ReadAt(s, o)
}

func (f *RegexpFile) Seek(o int64, w int) (int64, error) {
	return f.f.Seek(o, w)
}

func (f *RegexpFile) Write(s []byte) (int, error) {
	return f.f.Write(s)
}

func (f *RegexpFile) WriteAt(s []byte, o int64) (int, error) {
	return f.f.WriteAt(s, o)
}

func (f *RegexpFile) Name() string {
	return f.f.Name()
}

func (f *RegexpFile) Readdir(c int) (fi []os.FileInfo, err error) {
	var rfi []os.FileInfo
	rfi, err = f.f.Readdir(c)
	if err != nil {
		return nil, err
	}
	for _, i := range rfi {
		if i.IsDir() || f.re.MatchString(i.Name()) {
			fi = append(fi, i)
		}
	}
	return fi, nil
}

func (f *RegexpFile) Readdirnames(c int) (n []string, err error) {
	fi, err := f.Readdir(c)
	if err != nil {
		return nil, err
	}
	for _, s := range fi {
		n = append(n, s.Name())
	}
	return n, nil
}

func (f *RegexpFile) Stat() (os.FileInfo, error) {
	return f.f.Stat()
}

func (f *RegexpFile) Sync() error {
	return f.f.Sync()
}

func (f *RegexpFile) Truncate(s int64) error {
	return f.f.Truncate(s)
}

func (f *RegexpFile) WriteString(s string) (int, error) {
	return f.f.WriteString(s)
}
   07070100000B09000081A4000000000000000000000001645E367C000007F5000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/symlink.go  // Copyright © 2018 Steve Francia <spf@spf13.com>.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package afero

import (
	"errors"
)

// Symlinker is an optional interface in Afero. It is only implemented by the
// filesystems saying so.
// It indicates support for 3 symlink related interfaces that implement the
// behaviors of the os methods:
//   - Lstat
//   - Symlink, and
//   - Readlink
type Symlinker interface {
	Lstater
	Linker
	LinkReader
}

// Linker is an optional interface in Afero. It is only implemented by the
// filesystems saying so.
// It will call Symlink if the filesystem itself is, or it delegates to, the os filesystem,
// or the filesystem otherwise supports Symlink's.
type Linker interface {
	SymlinkIfPossible(oldname, newname string) error
}

// ErrNoSymlink is the error that will be wrapped in an os.LinkError if a file system
// does not support Symlink's either directly or through its delegated filesystem.
// As expressed by support for the Linker interface.
var ErrNoSymlink = errors.New("symlink not supported")

// LinkReader is an optional interface in Afero. It is only implemented by the
// filesystems saying so.
type LinkReader interface {
	ReadlinkIfPossible(name string) (string, error)
}

// ErrNoReadlink is the error that will be wrapped in an os.Path if a file system
// does not support the readlink operation either directly or through its delegated filesystem.
// As expressed by support for the LinkReader interface.
var ErrNoReadlink = errors.New("readlink not supported")
   07070100000B0A000081A4000000000000000000000001645E367C00001B6A000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/unionFile.go    package afero

import (
	"io"
	"os"
	"path/filepath"
	"syscall"
)

// The UnionFile implements the afero.File interface and will be returned
// when reading a directory present at least in the overlay or opening a file
// for writing.
//
// The calls to
// Readdir() and Readdirnames() merge the file os.FileInfo / names from the
// base and the overlay - for files present in both layers, only those
// from the overlay will be used.
//
// When opening files for writing (Create() / OpenFile() with the right flags)
// the operations will be done in both layers, starting with the overlay. A
// successful read in the overlay will move the cursor position in the base layer
// by the number of bytes read.
type UnionFile struct {
	Base   File
	Layer  File
	Merger DirsMerger
	off    int
	files  []os.FileInfo
}

func (f *UnionFile) Close() error {
	// first close base, so we have a newer timestamp in the overlay. If we'd close
	// the overlay first, we'd get a cacheStale the next time we access this file
	// -> cache would be useless ;-)
	if f.Base != nil {
		f.Base.Close()
	}
	if f.Layer != nil {
		return f.Layer.Close()
	}
	return BADFD
}

func (f *UnionFile) Read(s []byte) (int, error) {
	if f.Layer != nil {
		n, err := f.Layer.Read(s)
		if (err == nil || err == io.EOF) && f.Base != nil {
			// advance the file position also in the base file, the next
			// call may be a write at this position (or a seek with SEEK_CUR)
			if _, seekErr := f.Base.Seek(int64(n), io.SeekCurrent); seekErr != nil {
				// only overwrite err in case the seek fails: we need to
				// report an eventual io.EOF to the caller
				err = seekErr
			}
		}
		return n, err
	}
	if f.Base != nil {
		return f.Base.Read(s)
	}
	return 0, BADFD
}

func (f *UnionFile) ReadAt(s []byte, o int64) (int, error) {
	if f.Layer != nil {
		n, err := f.Layer.ReadAt(s, o)
		if (err == nil || err == io.EOF) && f.Base != nil {
			_, err = f.Base.Seek(o+int64(n), io.SeekStart)
		}
		return n, err
	}
	if f.Base != nil {
		return f.Base.ReadAt(s, o)
	}
	return 0, BADFD
}

func (f *UnionFile) Seek(o int64, w int) (pos int64, err error) {
	if f.Layer != nil {
		pos, err = f.Layer.Seek(o, w)
		if (err == nil || err == io.EOF) && f.Base != nil {
			_, err = f.Base.Seek(o, w)
		}
		return pos, err
	}
	if f.Base != nil {
		return f.Base.Seek(o, w)
	}
	return 0, BADFD
}

func (f *UnionFile) Write(s []byte) (n int, err error) {
	if f.Layer != nil {
		n, err = f.Layer.Write(s)
		if err == nil && f.Base != nil { // hmm, do we have fixed size files where a write may hit the EOF mark?
			_, err = f.Base.Write(s)
		}
		return n, err
	}
	if f.Base != nil {
		return f.Base.Write(s)
	}
	return 0, BADFD
}

func (f *UnionFile) WriteAt(s []byte, o int64) (n int, err error) {
	if f.Layer != nil {
		n, err = f.Layer.WriteAt(s, o)
		if err == nil && f.Base != nil {
			_, err = f.Base.WriteAt(s, o)
		}
		return n, err
	}
	if f.Base != nil {
		return f.Base.WriteAt(s, o)
	}
	return 0, BADFD
}

func (f *UnionFile) Name() string {
	if f.Layer != nil {
		return f.Layer.Name()
	}
	return f.Base.Name()
}

// DirsMerger is how UnionFile weaves two directories together.
// It takes the FileInfo slices from the layer and the base and returns a
// single view.
type DirsMerger func(lofi, bofi []os.FileInfo) ([]os.FileInfo, error)

var defaultUnionMergeDirsFn = func(lofi, bofi []os.FileInfo) ([]os.FileInfo, error) {
	files := make(map[string]os.FileInfo)

	for _, fi := range lofi {
		files[fi.Name()] = fi
	}

	for _, fi := range bofi {
		if _, exists := files[fi.Name()]; !exists {
			files[fi.Name()] = fi
		}
	}

	rfi := make([]os.FileInfo, len(files))

	i := 0
	for _, fi := range files {
		rfi[i] = fi
		i++
	}

	return rfi, nil
}

// Readdir will weave the two directories together and
// return a single view of the overlayed directories.
// At the end of the directory view, the error is io.EOF if c > 0.
func (f *UnionFile) Readdir(c int) (ofi []os.FileInfo, err error) {
	var merge DirsMerger = f.Merger
	if merge == nil {
		merge = defaultUnionMergeDirsFn
	}

	if f.off == 0 {
		var lfi []os.FileInfo
		if f.Layer != nil {
			lfi, err = f.Layer.Readdir(-1)
			if err != nil {
				return nil, err
			}
		}

		var bfi []os.FileInfo
		if f.Base != nil {
			bfi, err = f.Base.Readdir(-1)
			if err != nil {
				return nil, err
			}

		}
		merged, err := merge(lfi, bfi)
		if err != nil {
			return nil, err
		}
		f.files = append(f.files, merged...)
	}
	files := f.files[f.off:]

	if c <= 0 {
		return files, nil
	}

	if len(files) == 0 {
		return nil, io.EOF
	}

	if c > len(files) {
		c = len(files)
	}

	defer func() { f.off += c }()
	return files[:c], nil
}

func (f *UnionFile) Readdirnames(c int) ([]string, error) {
	rfi, err := f.Readdir(c)
	if err != nil {
		return nil, err
	}
	var names []string
	for _, fi := range rfi {
		names = append(names, fi.Name())
	}
	return names, nil
}

func (f *UnionFile) Stat() (os.FileInfo, error) {
	if f.Layer != nil {
		return f.Layer.Stat()
	}
	if f.Base != nil {
		return f.Base.Stat()
	}
	return nil, BADFD
}

func (f *UnionFile) Sync() (err error) {
	if f.Layer != nil {
		err = f.Layer.Sync()
		if err == nil && f.Base != nil {
			err = f.Base.Sync()
		}
		return err
	}
	if f.Base != nil {
		return f.Base.Sync()
	}
	return BADFD
}

func (f *UnionFile) Truncate(s int64) (err error) {
	if f.Layer != nil {
		err = f.Layer.Truncate(s)
		if err == nil && f.Base != nil {
			err = f.Base.Truncate(s)
		}
		return err
	}
	if f.Base != nil {
		return f.Base.Truncate(s)
	}
	return BADFD
}

func (f *UnionFile) WriteString(s string) (n int, err error) {
	if f.Layer != nil {
		n, err = f.Layer.WriteString(s)
		if err == nil && f.Base != nil {
			_, err = f.Base.WriteString(s)
		}
		return n, err
	}
	if f.Base != nil {
		return f.Base.WriteString(s)
	}
	return 0, BADFD
}

func copyFile(base Fs, layer Fs, name string, bfh File) error {
	// First make sure the directory exists
	exists, err := Exists(layer, filepath.Dir(name))
	if err != nil {
		return err
	}
	if !exists {
		err = layer.MkdirAll(filepath.Dir(name), 0o777) // FIXME?
		if err != nil {
			return err
		}
	}

	// Create the file on the overlay
	lfh, err := layer.Create(name)
	if err != nil {
		return err
	}
	n, err := io.Copy(lfh, bfh)
	if err != nil {
		// If anything fails, clean up the file
		layer.Remove(name)
		lfh.Close()
		return err
	}

	bfi, err := bfh.Stat()
	if err != nil || bfi.Size() != n {
		layer.Remove(name)
		lfh.Close()
		return syscall.EIO
	}

	err = lfh.Close()
	if err != nil {
		layer.Remove(name)
		lfh.Close()
		return err
	}
	return layer.Chtimes(name, bfi.ModTime(), bfi.ModTime())
}

func copyToLayer(base Fs, layer Fs, name string) error {
	bfh, err := base.Open(name)
	if err != nil {
		return err
	}
	defer bfh.Close()

	return copyFile(base, layer, name, bfh)
}

func copyFileToLayer(base Fs, layer Fs, name string, flag int, perm os.FileMode) error {
	bfh, err := base.OpenFile(name, flag, perm)
	if err != nil {
		return err
	}
	defer bfh.Close()

	return copyFile(base, layer, name, bfh)
}
  07070100000B0B000081A4000000000000000000000001645E367C00001CA7000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/spf13/afero/util.go // Copyright ©2015 Steve Francia <spf@spf13.com>
// Portions Copyright ©2015 The Hugo Authors
// Portions Copyright 2016-present Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package afero

import (
	"bytes"
	"fmt"
	"io"
	"os"
	"path/filepath"
	"strings"
	"unicode"

	"golang.org/x/text/runes"
	"golang.org/x/text/transform"
	"golang.org/x/text/unicode/norm"
)

// Filepath separator defined by os.Separator.
const FilePathSeparator = string(filepath.Separator)

// Takes a reader and a path and writes the content
func (a Afero) WriteReader(path string, r io.Reader) (err error) {
	return WriteReader(a.Fs, path, r)
}

func WriteReader(fs Fs, path string, r io.Reader) (err error) {
	dir, _ := filepath.Split(path)
	ospath := filepath.FromSlash(dir)

	if ospath != "" {
		err = fs.MkdirAll(ospath, 0o777) // rwx, rw, r
		if err != nil {
			if err != os.ErrExist {
				return err
			}
		}
	}

	file, err := fs.Create(path)
	if err != nil {
		return
	}
	defer file.Close()

	_, err = io.Copy(file, r)
	return
}

// Same as WriteReader but checks to see if file/directory already exists.
func (a Afero) SafeWriteReader(path string, r io.Reader) (err error) {
	return SafeWriteReader(a.Fs, path, r)
}

func SafeWriteReader(fs Fs, path string, r io.Reader) (err error) {
	dir, _ := filepath.Split(path)
	ospath := filepath.FromSlash(dir)

	if ospath != "" {
		err = fs.MkdirAll(ospath, 0o777) // rwx, rw, r
		if err != nil {
			return
		}
	}

	exists, err := Exists(fs, path)
	if err != nil {
		return
	}
	if exists {
		return fmt.Errorf("%v already exists", path)
	}

	file, err := fs.Create(path)
	if err != nil {
		return
	}
	defer file.Close()

	_, err = io.Copy(file, r)
	return
}

func (a Afero) GetTempDir(subPath string) string {
	return GetTempDir(a.Fs, subPath)
}

// GetTempDir returns the default temp directory with trailing slash
// if subPath is not empty then it will be created recursively with mode 777 rwx rwx rwx
func GetTempDir(fs Fs, subPath string) string {
	addSlash := func(p string) string {
		if FilePathSeparator != p[len(p)-1:] {
			p = p + FilePathSeparator
		}
		return p
	}
	dir := addSlash(os.TempDir())

	if subPath != "" {
		// preserve windows backslash :-(
		if FilePathSeparator == "\\" {
			subPath = strings.Replace(subPath, "\\", "____", -1)
		}
		dir = dir + UnicodeSanitize((subPath))
		if FilePathSeparator == "\\" {
			dir = strings.Replace(dir, "____", "\\", -1)
		}

		if exists, _ := Exists(fs, dir); exists {
			return addSlash(dir)
		}

		err := fs.MkdirAll(dir, 0o777)
		if err != nil {
			panic(err)
		}
		dir = addSlash(dir)
	}
	return dir
}

// Rewrite string to remove non-standard path characters
func UnicodeSanitize(s string) string {
	source := []rune(s)
	target := make([]rune, 0, len(source))

	for _, r := range source {
		if unicode.IsLetter(r) ||
			unicode.IsDigit(r) ||
			unicode.IsMark(r) ||
			r == '.' ||
			r == '/' ||
			r == '\\' ||
			r == '_' ||
			r == '-' ||
			r == '%' ||
			r == ' ' ||
			r == '#' {
			target = append(target, r)
		}
	}

	return string(target)
}

// Transform characters with accents into plain forms.
func NeuterAccents(s string) string {
	t := transform.Chain(norm.NFD, runes.Remove(runes.In(unicode.Mn)), norm.NFC)
	result, _, _ := transform.String(t, string(s))

	return result
}

func (a Afero) FileContainsBytes(filename string, subslice []byte) (bool, error) {
	return FileContainsBytes(a.Fs, filename, subslice)
}

// Check if a file contains a specified byte slice.
func FileContainsBytes(fs Fs, filename string, subslice []byte) (bool, error) {
	f, err := fs.Open(filename)
	if err != nil {
		return false, err
	}
	defer f.Close()

	return readerContainsAny(f, subslice), nil
}

func (a Afero) FileContainsAnyBytes(filename string, subslices [][]byte) (bool, error) {
	return FileContainsAnyBytes(a.Fs, filename, subslices)
}

// Check if a file contains any of the specified byte slices.
func FileContainsAnyBytes(fs Fs, filename string, subslices [][]byte) (bool, error) {
	f, err := fs.Open(filename)
	if err != nil {
		return false, err
	}
	defer f.Close()

	return readerContainsAny(f, subslices...), nil
}

// readerContains reports whether any of the subslices is within r.
func readerContainsAny(r io.Reader, subslices ...[]byte) bool {
	if r == nil || len(subslices) == 0 {
		return false
	}

	largestSlice := 0

	for _, sl := range subslices {
		if len(sl) > largestSlice {
			largestSlice = len(sl)
		}
	}

	if largestSlice == 0 {
		return false
	}

	bufflen := largestSlice * 4
	halflen := bufflen / 2
	buff := make([]byte, bufflen)
	var err error
	var n, i int

	for {
		i++
		if i == 1 {
			n, err = io.ReadAtLeast(r, buff[:halflen], halflen)
		} else {
			if i != 2 {
				// shift left to catch overlapping matches
				copy(buff[:], buff[halflen:])
			}
			n, err = io.ReadAtLeast(r, buff[halflen:], halflen)
		}

		if n > 0 {
			for _, sl := range subslices {
				if bytes.Contains(buff, sl) {
					return true
				}
			}
		}

		if err != nil {
			break
		}
	}
	return false
}

func (a Afero) DirExists(path string) (bool, error) {
	return DirExists(a.Fs, path)
}

// DirExists checks if a path exists and is a directory.
func DirExists(fs Fs, path string) (bool, error) {
	fi, err := fs.Stat(path)
	if err == nil && fi.IsDir() {
		return true, nil
	}
	if os.IsNotExist(err) {
		return false, nil
	}
	return false, err
}

func (a Afero) IsDir(path string) (bool, error) {
	return IsDir(a.Fs, path)
}

// IsDir checks if a given path is a directory.
func IsDir(fs Fs, path string) (bool, error) {
	fi, err := fs.Stat(path)
	if err != nil {
		return false, err
	}
	return fi.IsDir(), nil
}

func (a Afero) IsEmpty(path string) (bool, error) {
	return IsEmpty(a.Fs, path)
}

// IsEmpty checks if a given file or directory is empty.
func IsEmpty(fs Fs, path string) (bool, error) {
	if b, _ := Exists(fs, path); !b {
		return false, fmt.Errorf("%q path does not exist", path)
	}
	fi, err := fs.Stat(path)
	if err != nil {
		return false, err
	}
	if fi.IsDir() {
		f, err := fs.Open(path)
		if err != nil {
			return false, err
		}
		defer f.Close()
		list, err := f.Readdir(-1)
		if err != nil {
			return false, err
		}
		return len(list) == 0, nil
	}
	return fi.Size() == 0, nil
}

func (a Afero) Exists(path string) (bool, error) {
	return Exists(a.Fs, path)
}

// Check if a file or directory exists.
func Exists(fs Fs, path string) (bool, error) {
	_, err := fs.Stat(path)
	if err == nil {
		return true, nil
	}
	if os.IsNotExist(err) {
		return false, nil
	}
	return false, err
}

func FullBaseFsPath(basePathFs *BasePathFs, relativePath string) string {
	combinedPath := filepath.Join(basePathFs.path, relativePath)
	if parent, ok := basePathFs.source.(*BasePathFs); ok {
		return FullBaseFsPath(parent, combinedPath)
	}

	return combinedPath
}
 07070100000B0C000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003100000000elemental-cli-0.3.1/vendor/github.com/spf13/cast  07070100000B0D000081A4000000000000000000000001645E367C0000010C000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/spf13/cast/.gitignore   # Compiled Object files, Static and Dynamic libs (Shared Objects)
*.o
*.a
*.so

# Folders
_obj
_test

# Architecture specific extensions/prefixes
*.[568vq]
[568vq].out

*.cgo1.go
*.cgo2.c
_cgo_defun.c
_cgo_gotypes.go
_cgo_export.*

_testmain.go

*.exe
*.test

*.bench
07070100000B0E000081A4000000000000000000000001645E367C00000437000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/spf13/cast/LICENSE  The MIT License (MIT)

Copyright (c) 2014 Steve Francia

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. 07070100000B0F000081A4000000000000000000000001645E367C0000045E000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/spf13/cast/Makefile GOVERSION := $(shell go version | cut -d ' ' -f 3 | cut -d '.' -f 2)

.PHONY: check fmt lint test test-race vet test-cover-html help
.DEFAULT_GOAL := help

check: test-race fmt vet lint ## Run tests and linters

test: ## Run tests
	go test ./...

test-race: ## Run tests with race detector
	go test -race ./...

fmt: ## Run gofmt linter
ifeq "$(GOVERSION)" "12"
	@for d in `go list` ; do \
		if [ "`gofmt -l -s $$GOPATH/src/$$d | tee /dev/stderr`" ]; then \
			echo "^ improperly formatted go files" && echo && exit 1; \
		fi \
	done
endif

lint: ## Run golint linter
	@for d in `go list` ; do \
		if [ "`golint $$d | tee /dev/stderr`" ]; then \
			echo "^ golint errors!" && echo && exit 1; \
		fi \
	done

vet: ## Run go vet linter
	@if [ "`go vet | tee /dev/stderr`" ]; then \
		echo "^ go vet errors!" && echo && exit 1; \
	fi

test-cover-html: ## Generate test coverage report
	go test -coverprofile=coverage.out -covermode=count
	go tool cover -func=coverage.out

help:
	@grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
  07070100000B10000081A4000000000000000000000001645E367C00000B8A000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/spf13/cast/README.md    cast
====
[![GoDoc](https://godoc.org/github.com/spf13/cast?status.svg)](https://godoc.org/github.com/spf13/cast)
[![Build Status](https://github.com/spf13/cast/actions/workflows/go.yml/badge.svg)](https://github.com/spf13/cast/actions/workflows/go.yml)
[![Go Report Card](https://goreportcard.com/badge/github.com/spf13/cast)](https://goreportcard.com/report/github.com/spf13/cast)

Easy and safe casting from one type to another in Go

Don’t Panic! ... Cast

## What is Cast?

Cast is a library to convert between different go types in a consistent and easy way.

Cast provides simple functions to easily convert a number to a string, an
interface into a bool, etc. Cast does this intelligently when an obvious
conversion is possible. It doesn’t make any attempts to guess what you meant,
for example you can only convert a string to an int when it is a string
representation of an int such as “8”. Cast was developed for use in
[Hugo](http://hugo.spf13.com), a website engine which uses YAML, TOML or JSON
for meta data.

## Why use Cast?

When working with dynamic data in Go you often need to cast or convert the data
from one type into another. Cast goes beyond just using type assertion (though
it uses that when possible) to provide a very straightforward and convenient
library.

If you are working with interfaces to handle things like dynamic content
you’ll need an easy way to convert an interface into a given type. This
is the library for you.

If you are taking in data from YAML, TOML or JSON or other formats which lack
full types, then Cast is the library for you.

## Usage

Cast provides a handful of To_____ methods. These methods will always return
the desired type. **If input is provided that will not convert to that type, the
0 or nil value for that type will be returned**.

Cast also provides identical methods To_____E. These return the same result as
the To_____ methods, plus an additional error which tells you if it successfully
converted. Using these methods you can tell the difference between when the
input matched the zero value or when the conversion failed and the zero value
was returned.

The following examples are merely a sample of what is available. Please review
the code for a complete set.

### Example ‘ToString’:

    cast.ToString("mayonegg")         // "mayonegg"
    cast.ToString(8)                  // "8"
    cast.ToString(8.31)               // "8.31"
    cast.ToString([]byte("one time")) // "one time"
    cast.ToString(nil)                // ""

	var foo interface{} = "one more time"
    cast.ToString(foo)                // "one more time"


### Example ‘ToInt’:

    cast.ToInt(8)                  // 8
    cast.ToInt(8.31)               // 8
    cast.ToInt("8")                // 8
    cast.ToInt(true)               // 1
    cast.ToInt(false)              // 0

	var eight interface{} = 8
    cast.ToInt(eight)              // 8
    cast.ToInt(nil)                // 0

  07070100000B11000081A4000000000000000000000001645E367C00000FA5000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/spf13/cast/cast.go  // Copyright © 2014 Steve Francia <spf@spf13.com>.
//
// Use of this source code is governed by an MIT-style
// license that can be found in the LICENSE file.

// Package cast provides easy and safe casting in Go.
package cast

import "time"

// ToBool casts an interface to a bool type.
func ToBool(i interface{}) bool {
	v, _ := ToBoolE(i)
	return v
}

// ToTime casts an interface to a time.Time type.
func ToTime(i interface{}) time.Time {
	v, _ := ToTimeE(i)
	return v
}

func ToTimeInDefaultLocation(i interface{}, location *time.Location) time.Time {
	v, _ := ToTimeInDefaultLocationE(i, location)
	return v
}

// ToDuration casts an interface to a time.Duration type.
func ToDuration(i interface{}) time.Duration {
	v, _ := ToDurationE(i)
	return v
}

// ToFloat64 casts an interface to a float64 type.
func ToFloat64(i interface{}) float64 {
	v, _ := ToFloat64E(i)
	return v
}

// ToFloat32 casts an interface to a float32 type.
func ToFloat32(i interface{}) float32 {
	v, _ := ToFloat32E(i)
	return v
}

// ToInt64 casts an interface to an int64 type.
func ToInt64(i interface{}) int64 {
	v, _ := ToInt64E(i)
	return v
}

// ToInt32 casts an interface to an int32 type.
func ToInt32(i interface{}) int32 {
	v, _ := ToInt32E(i)
	return v
}

// ToInt16 casts an interface to an int16 type.
func ToInt16(i interface{}) int16 {
	v, _ := ToInt16E(i)
	return v
}

// ToInt8 casts an interface to an int8 type.
func ToInt8(i interface{}) int8 {
	v, _ := ToInt8E(i)
	return v
}

// ToInt casts an interface to an int type.
func ToInt(i interface{}) int {
	v, _ := ToIntE(i)
	return v
}

// ToUint casts an interface to a uint type.
func ToUint(i interface{}) uint {
	v, _ := ToUintE(i)
	return v
}

// ToUint64 casts an interface to a uint64 type.
func ToUint64(i interface{}) uint64 {
	v, _ := ToUint64E(i)
	return v
}

// ToUint32 casts an interface to a uint32 type.
func ToUint32(i interface{}) uint32 {
	v, _ := ToUint32E(i)
	return v
}

// ToUint16 casts an interface to a uint16 type.
func ToUint16(i interface{}) uint16 {
	v, _ := ToUint16E(i)
	return v
}

// ToUint8 casts an interface to a uint8 type.
func ToUint8(i interface{}) uint8 {
	v, _ := ToUint8E(i)
	return v
}

// ToString casts an interface to a string type.
func ToString(i interface{}) string {
	v, _ := ToStringE(i)
	return v
}

// ToStringMapString casts an interface to a map[string]string type.
func ToStringMapString(i interface{}) map[string]string {
	v, _ := ToStringMapStringE(i)
	return v
}

// ToStringMapStringSlice casts an interface to a map[string][]string type.
func ToStringMapStringSlice(i interface{}) map[string][]string {
	v, _ := ToStringMapStringSliceE(i)
	return v
}

// ToStringMapBool casts an interface to a map[string]bool type.
func ToStringMapBool(i interface{}) map[string]bool {
	v, _ := ToStringMapBoolE(i)
	return v
}

// ToStringMapInt casts an interface to a map[string]int type.
func ToStringMapInt(i interface{}) map[string]int {
	v, _ := ToStringMapIntE(i)
	return v
}

// ToStringMapInt64 casts an interface to a map[string]int64 type.
func ToStringMapInt64(i interface{}) map[string]int64 {
	v, _ := ToStringMapInt64E(i)
	return v
}

// ToStringMap casts an interface to a map[string]interface{} type.
func ToStringMap(i interface{}) map[string]interface{} {
	v, _ := ToStringMapE(i)
	return v
}

// ToSlice casts an interface to a []interface{} type.
func ToSlice(i interface{}) []interface{} {
	v, _ := ToSliceE(i)
	return v
}

// ToBoolSlice casts an interface to a []bool type.
func ToBoolSlice(i interface{}) []bool {
	v, _ := ToBoolSliceE(i)
	return v
}

// ToStringSlice casts an interface to a []string type.
func ToStringSlice(i interface{}) []string {
	v, _ := ToStringSliceE(i)
	return v
}

// ToIntSlice casts an interface to a []int type.
func ToIntSlice(i interface{}) []int {
	v, _ := ToIntSliceE(i)
	return v
}

// ToDurationSlice casts an interface to a []time.Duration type.
func ToDurationSlice(i interface{}) []time.Duration {
	v, _ := ToDurationSliceE(i)
	return v
}
   07070100000B12000081A4000000000000000000000001645E367C0000816C000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/spf13/cast/caste.go // Copyright © 2014 Steve Francia <spf@spf13.com>.
//
// Use of this source code is governed by an MIT-style
// license that can be found in the LICENSE file.

package cast

import (
	"encoding/json"
	"errors"
	"fmt"
	"html/template"
	"reflect"
	"strconv"
	"strings"
	"time"
)

var errNegativeNotAllowed = errors.New("unable to cast negative value")

// ToTimeE casts an interface to a time.Time type.
func ToTimeE(i interface{}) (tim time.Time, err error) {
	return ToTimeInDefaultLocationE(i, time.UTC)
}

// ToTimeInDefaultLocationE casts an empty interface to time.Time,
// interpreting inputs without a timezone to be in the given location,
// or the local timezone if nil.
func ToTimeInDefaultLocationE(i interface{}, location *time.Location) (tim time.Time, err error) {
	i = indirect(i)

	switch v := i.(type) {
	case time.Time:
		return v, nil
	case string:
		return StringToDateInDefaultLocation(v, location)
	case json.Number:
		s, err1 := ToInt64E(v)
		if err1 != nil {
			return time.Time{}, fmt.Errorf("unable to cast %#v of type %T to Time", i, i)
		}
		return time.Unix(s, 0), nil
	case int:
		return time.Unix(int64(v), 0), nil
	case int64:
		return time.Unix(v, 0), nil
	case int32:
		return time.Unix(int64(v), 0), nil
	case uint:
		return time.Unix(int64(v), 0), nil
	case uint64:
		return time.Unix(int64(v), 0), nil
	case uint32:
		return time.Unix(int64(v), 0), nil
	default:
		return time.Time{}, fmt.Errorf("unable to cast %#v of type %T to Time", i, i)
	}
}

// ToDurationE casts an interface to a time.Duration type.
func ToDurationE(i interface{}) (d time.Duration, err error) {
	i = indirect(i)

	switch s := i.(type) {
	case time.Duration:
		return s, nil
	case int, int64, int32, int16, int8, uint, uint64, uint32, uint16, uint8:
		d = time.Duration(ToInt64(s))
		return
	case float32, float64:
		d = time.Duration(ToFloat64(s))
		return
	case string:
		if strings.ContainsAny(s, "nsuµmh") {
			d, err = time.ParseDuration(s)
		} else {
			d, err = time.ParseDuration(s + "ns")
		}
		return
	case json.Number:
		var v float64
		v, err = s.Float64()
		d = time.Duration(v)
		return
	default:
		err = fmt.Errorf("unable to cast %#v of type %T to Duration", i, i)
		return
	}
}

// ToBoolE casts an interface to a bool type.
func ToBoolE(i interface{}) (bool, error) {
	i = indirect(i)

	switch b := i.(type) {
	case bool:
		return b, nil
	case nil:
		return false, nil
	case int:
		if i.(int) != 0 {
			return true, nil
		}
		return false, nil
	case string:
		return strconv.ParseBool(i.(string))
	case json.Number:
		v, err := ToInt64E(b)
		if err == nil {
			return v != 0, nil
		}
		return false, fmt.Errorf("unable to cast %#v of type %T to bool", i, i)
	default:
		return false, fmt.Errorf("unable to cast %#v of type %T to bool", i, i)
	}
}

// ToFloat64E casts an interface to a float64 type.
func ToFloat64E(i interface{}) (float64, error) {
	i = indirect(i)

	intv, ok := toInt(i)
	if ok {
		return float64(intv), nil
	}

	switch s := i.(type) {
	case float64:
		return s, nil
	case float32:
		return float64(s), nil
	case int64:
		return float64(s), nil
	case int32:
		return float64(s), nil
	case int16:
		return float64(s), nil
	case int8:
		return float64(s), nil
	case uint:
		return float64(s), nil
	case uint64:
		return float64(s), nil
	case uint32:
		return float64(s), nil
	case uint16:
		return float64(s), nil
	case uint8:
		return float64(s), nil
	case string:
		v, err := strconv.ParseFloat(s, 64)
		if err == nil {
			return v, nil
		}
		return 0, fmt.Errorf("unable to cast %#v of type %T to float64", i, i)
	case json.Number:
		v, err := s.Float64()
		if err == nil {
			return v, nil
		}
		return 0, fmt.Errorf("unable to cast %#v of type %T to float64", i, i)
	case bool:
		if s {
			return 1, nil
		}
		return 0, nil
	case nil:
		return 0, nil
	default:
		return 0, fmt.Errorf("unable to cast %#v of type %T to float64", i, i)
	}
}

// ToFloat32E casts an interface to a float32 type.
func ToFloat32E(i interface{}) (float32, error) {
	i = indirect(i)

	intv, ok := toInt(i)
	if ok {
		return float32(intv), nil
	}

	switch s := i.(type) {
	case float64:
		return float32(s), nil
	case float32:
		return s, nil
	case int64:
		return float32(s), nil
	case int32:
		return float32(s), nil
	case int16:
		return float32(s), nil
	case int8:
		return float32(s), nil
	case uint:
		return float32(s), nil
	case uint64:
		return float32(s), nil
	case uint32:
		return float32(s), nil
	case uint16:
		return float32(s), nil
	case uint8:
		return float32(s), nil
	case string:
		v, err := strconv.ParseFloat(s, 32)
		if err == nil {
			return float32(v), nil
		}
		return 0, fmt.Errorf("unable to cast %#v of type %T to float32", i, i)
	case json.Number:
		v, err := s.Float64()
		if err == nil {
			return float32(v), nil
		}
		return 0, fmt.Errorf("unable to cast %#v of type %T to float32", i, i)
	case bool:
		if s {
			return 1, nil
		}
		return 0, nil
	case nil:
		return 0, nil
	default:
		return 0, fmt.Errorf("unable to cast %#v of type %T to float32", i, i)
	}
}

// ToInt64E casts an interface to an int64 type.
func ToInt64E(i interface{}) (int64, error) {
	i = indirect(i)

	intv, ok := toInt(i)
	if ok {
		return int64(intv), nil
	}

	switch s := i.(type) {
	case int64:
		return s, nil
	case int32:
		return int64(s), nil
	case int16:
		return int64(s), nil
	case int8:
		return int64(s), nil
	case uint:
		return int64(s), nil
	case uint64:
		return int64(s), nil
	case uint32:
		return int64(s), nil
	case uint16:
		return int64(s), nil
	case uint8:
		return int64(s), nil
	case float64:
		return int64(s), nil
	case float32:
		return int64(s), nil
	case string:
		v, err := strconv.ParseInt(trimZeroDecimal(s), 0, 0)
		if err == nil {
			return v, nil
		}
		return 0, fmt.Errorf("unable to cast %#v of type %T to int64", i, i)
	case json.Number:
		return ToInt64E(string(s))
	case bool:
		if s {
			return 1, nil
		}
		return 0, nil
	case nil:
		return 0, nil
	default:
		return 0, fmt.Errorf("unable to cast %#v of type %T to int64", i, i)
	}
}

// ToInt32E casts an interface to an int32 type.
func ToInt32E(i interface{}) (int32, error) {
	i = indirect(i)

	intv, ok := toInt(i)
	if ok {
		return int32(intv), nil
	}

	switch s := i.(type) {
	case int64:
		return int32(s), nil
	case int32:
		return s, nil
	case int16:
		return int32(s), nil
	case int8:
		return int32(s), nil
	case uint:
		return int32(s), nil
	case uint64:
		return int32(s), nil
	case uint32:
		return int32(s), nil
	case uint16:
		return int32(s), nil
	case uint8:
		return int32(s), nil
	case float64:
		return int32(s), nil
	case float32:
		return int32(s), nil
	case string:
		v, err := strconv.ParseInt(trimZeroDecimal(s), 0, 0)
		if err == nil {
			return int32(v), nil
		}
		return 0, fmt.Errorf("unable to cast %#v of type %T to int32", i, i)
	case json.Number:
		return ToInt32E(string(s))
	case bool:
		if s {
			return 1, nil
		}
		return 0, nil
	case nil:
		return 0, nil
	default:
		return 0, fmt.Errorf("unable to cast %#v of type %T to int32", i, i)
	}
}

// ToInt16E casts an interface to an int16 type.
func ToInt16E(i interface{}) (int16, error) {
	i = indirect(i)

	intv, ok := toInt(i)
	if ok {
		return int16(intv), nil
	}

	switch s := i.(type) {
	case int64:
		return int16(s), nil
	case int32:
		return int16(s), nil
	case int16:
		return s, nil
	case int8:
		return int16(s), nil
	case uint:
		return int16(s), nil
	case uint64:
		return int16(s), nil
	case uint32:
		return int16(s), nil
	case uint16:
		return int16(s), nil
	case uint8:
		return int16(s), nil
	case float64:
		return int16(s), nil
	case float32:
		return int16(s), nil
	case string:
		v, err := strconv.ParseInt(trimZeroDecimal(s), 0, 0)
		if err == nil {
			return int16(v), nil
		}
		return 0, fmt.Errorf("unable to cast %#v of type %T to int16", i, i)
	case json.Number:
		return ToInt16E(string(s))
	case bool:
		if s {
			return 1, nil
		}
		return 0, nil
	case nil:
		return 0, nil
	default:
		return 0, fmt.Errorf("unable to cast %#v of type %T to int16", i, i)
	}
}

// ToInt8E casts an interface to an int8 type.
func ToInt8E(i interface{}) (int8, error) {
	i = indirect(i)

	intv, ok := toInt(i)
	if ok {
		return int8(intv), nil
	}

	switch s := i.(type) {
	case int64:
		return int8(s), nil
	case int32:
		return int8(s), nil
	case int16:
		return int8(s), nil
	case int8:
		return s, nil
	case uint:
		return int8(s), nil
	case uint64:
		return int8(s), nil
	case uint32:
		return int8(s), nil
	case uint16:
		return int8(s), nil
	case uint8:
		return int8(s), nil
	case float64:
		return int8(s), nil
	case float32:
		return int8(s), nil
	case string:
		v, err := strconv.ParseInt(trimZeroDecimal(s), 0, 0)
		if err == nil {
			return int8(v), nil
		}
		return 0, fmt.Errorf("unable to cast %#v of type %T to int8", i, i)
	case json.Number:
		return ToInt8E(string(s))
	case bool:
		if s {
			return 1, nil
		}
		return 0, nil
	case nil:
		return 0, nil
	default:
		return 0, fmt.Errorf("unable to cast %#v of type %T to int8", i, i)
	}
}

// ToIntE casts an interface to an int type.
func ToIntE(i interface{}) (int, error) {
	i = indirect(i)

	intv, ok := toInt(i)
	if ok {
		return intv, nil
	}

	switch s := i.(type) {
	case int64:
		return int(s), nil
	case int32:
		return int(s), nil
	case int16:
		return int(s), nil
	case int8:
		return int(s), nil
	case uint:
		return int(s), nil
	case uint64:
		return int(s), nil
	case uint32:
		return int(s), nil
	case uint16:
		return int(s), nil
	case uint8:
		return int(s), nil
	case float64:
		return int(s), nil
	case float32:
		return int(s), nil
	case string:
		v, err := strconv.ParseInt(trimZeroDecimal(s), 0, 0)
		if err == nil {
			return int(v), nil
		}
		return 0, fmt.Errorf("unable to cast %#v of type %T to int64", i, i)
	case json.Number:
		return ToIntE(string(s))
	case bool:
		if s {
			return 1, nil
		}
		return 0, nil
	case nil:
		return 0, nil
	default:
		return 0, fmt.Errorf("unable to cast %#v of type %T to int", i, i)
	}
}

// ToUintE casts an interface to a uint type.
func ToUintE(i interface{}) (uint, error) {
	i = indirect(i)

	intv, ok := toInt(i)
	if ok {
		if intv < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint(intv), nil
	}

	switch s := i.(type) {
	case string:
		v, err := strconv.ParseInt(trimZeroDecimal(s), 0, 0)
		if err == nil {
			if v < 0 {
				return 0, errNegativeNotAllowed
			}
			return uint(v), nil
		}
		return 0, fmt.Errorf("unable to cast %#v of type %T to uint", i, i)
	case json.Number:
		return ToUintE(string(s))
	case int64:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint(s), nil
	case int32:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint(s), nil
	case int16:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint(s), nil
	case int8:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint(s), nil
	case uint:
		return s, nil
	case uint64:
		return uint(s), nil
	case uint32:
		return uint(s), nil
	case uint16:
		return uint(s), nil
	case uint8:
		return uint(s), nil
	case float64:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint(s), nil
	case float32:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint(s), nil
	case bool:
		if s {
			return 1, nil
		}
		return 0, nil
	case nil:
		return 0, nil
	default:
		return 0, fmt.Errorf("unable to cast %#v of type %T to uint", i, i)
	}
}

// ToUint64E casts an interface to a uint64 type.
func ToUint64E(i interface{}) (uint64, error) {
	i = indirect(i)

	intv, ok := toInt(i)
	if ok {
		if intv < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint64(intv), nil
	}

	switch s := i.(type) {
	case string:
		v, err := strconv.ParseInt(trimZeroDecimal(s), 0, 0)
		if err == nil {
			if v < 0 {
				return 0, errNegativeNotAllowed
			}
			return uint64(v), nil
		}
		return 0, fmt.Errorf("unable to cast %#v of type %T to uint64", i, i)
	case json.Number:
		return ToUint64E(string(s))
	case int64:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint64(s), nil
	case int32:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint64(s), nil
	case int16:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint64(s), nil
	case int8:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint64(s), nil
	case uint:
		return uint64(s), nil
	case uint64:
		return s, nil
	case uint32:
		return uint64(s), nil
	case uint16:
		return uint64(s), nil
	case uint8:
		return uint64(s), nil
	case float32:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint64(s), nil
	case float64:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint64(s), nil
	case bool:
		if s {
			return 1, nil
		}
		return 0, nil
	case nil:
		return 0, nil
	default:
		return 0, fmt.Errorf("unable to cast %#v of type %T to uint64", i, i)
	}
}

// ToUint32E casts an interface to a uint32 type.
func ToUint32E(i interface{}) (uint32, error) {
	i = indirect(i)

	intv, ok := toInt(i)
	if ok {
		if intv < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint32(intv), nil
	}

	switch s := i.(type) {
	case string:
		v, err := strconv.ParseInt(trimZeroDecimal(s), 0, 0)
		if err == nil {
			if v < 0 {
				return 0, errNegativeNotAllowed
			}
			return uint32(v), nil
		}
		return 0, fmt.Errorf("unable to cast %#v of type %T to uint32", i, i)
	case json.Number:
		return ToUint32E(string(s))
	case int64:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint32(s), nil
	case int32:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint32(s), nil
	case int16:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint32(s), nil
	case int8:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint32(s), nil
	case uint:
		return uint32(s), nil
	case uint64:
		return uint32(s), nil
	case uint32:
		return s, nil
	case uint16:
		return uint32(s), nil
	case uint8:
		return uint32(s), nil
	case float64:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint32(s), nil
	case float32:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint32(s), nil
	case bool:
		if s {
			return 1, nil
		}
		return 0, nil
	case nil:
		return 0, nil
	default:
		return 0, fmt.Errorf("unable to cast %#v of type %T to uint32", i, i)
	}
}

// ToUint16E casts an interface to a uint16 type.
func ToUint16E(i interface{}) (uint16, error) {
	i = indirect(i)

	intv, ok := toInt(i)
	if ok {
		if intv < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint16(intv), nil
	}

	switch s := i.(type) {
	case string:
		v, err := strconv.ParseInt(trimZeroDecimal(s), 0, 0)
		if err == nil {
			if v < 0 {
				return 0, errNegativeNotAllowed
			}
			return uint16(v), nil
		}
		return 0, fmt.Errorf("unable to cast %#v of type %T to uint16", i, i)
	case json.Number:
		return ToUint16E(string(s))
	case int64:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint16(s), nil
	case int32:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint16(s), nil
	case int16:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint16(s), nil
	case int8:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint16(s), nil
	case uint:
		return uint16(s), nil
	case uint64:
		return uint16(s), nil
	case uint32:
		return uint16(s), nil
	case uint16:
		return s, nil
	case uint8:
		return uint16(s), nil
	case float64:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint16(s), nil
	case float32:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint16(s), nil
	case bool:
		if s {
			return 1, nil
		}
		return 0, nil
	case nil:
		return 0, nil
	default:
		return 0, fmt.Errorf("unable to cast %#v of type %T to uint16", i, i)
	}
}

// ToUint8E casts an interface to a uint type.
func ToUint8E(i interface{}) (uint8, error) {
	i = indirect(i)

	intv, ok := toInt(i)
	if ok {
		if intv < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint8(intv), nil
	}

	switch s := i.(type) {
	case string:
		v, err := strconv.ParseInt(trimZeroDecimal(s), 0, 0)
		if err == nil {
			if v < 0 {
				return 0, errNegativeNotAllowed
			}
			return uint8(v), nil
		}
		return 0, fmt.Errorf("unable to cast %#v of type %T to uint8", i, i)
	case json.Number:
		return ToUint8E(string(s))
	case int64:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint8(s), nil
	case int32:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint8(s), nil
	case int16:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint8(s), nil
	case int8:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint8(s), nil
	case uint:
		return uint8(s), nil
	case uint64:
		return uint8(s), nil
	case uint32:
		return uint8(s), nil
	case uint16:
		return uint8(s), nil
	case uint8:
		return s, nil
	case float64:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint8(s), nil
	case float32:
		if s < 0 {
			return 0, errNegativeNotAllowed
		}
		return uint8(s), nil
	case bool:
		if s {
			return 1, nil
		}
		return 0, nil
	case nil:
		return 0, nil
	default:
		return 0, fmt.Errorf("unable to cast %#v of type %T to uint8", i, i)
	}
}

// From html/template/content.go
// Copyright 2011 The Go Authors. All rights reserved.
// indirect returns the value, after dereferencing as many times
// as necessary to reach the base type (or nil).
func indirect(a interface{}) interface{} {
	if a == nil {
		return nil
	}
	if t := reflect.TypeOf(a); t.Kind() != reflect.Ptr {
		// Avoid creating a reflect.Value if it's not a pointer.
		return a
	}
	v := reflect.ValueOf(a)
	for v.Kind() == reflect.Ptr && !v.IsNil() {
		v = v.Elem()
	}
	return v.Interface()
}

// From html/template/content.go
// Copyright 2011 The Go Authors. All rights reserved.
// indirectToStringerOrError returns the value, after dereferencing as many times
// as necessary to reach the base type (or nil) or an implementation of fmt.Stringer
// or error,
func indirectToStringerOrError(a interface{}) interface{} {
	if a == nil {
		return nil
	}

	var errorType = reflect.TypeOf((*error)(nil)).Elem()
	var fmtStringerType = reflect.TypeOf((*fmt.Stringer)(nil)).Elem()

	v := reflect.ValueOf(a)
	for !v.Type().Implements(fmtStringerType) && !v.Type().Implements(errorType) && v.Kind() == reflect.Ptr && !v.IsNil() {
		v = v.Elem()
	}
	return v.Interface()
}

// ToStringE casts an interface to a string type.
func ToStringE(i interface{}) (string, error) {
	i = indirectToStringerOrError(i)

	switch s := i.(type) {
	case string:
		return s, nil
	case bool:
		return strconv.FormatBool(s), nil
	case float64:
		return strconv.FormatFloat(s, 'f', -1, 64), nil
	case float32:
		return strconv.FormatFloat(float64(s), 'f', -1, 32), nil
	case int:
		return strconv.Itoa(s), nil
	case int64:
		return strconv.FormatInt(s, 10), nil
	case int32:
		return strconv.Itoa(int(s)), nil
	case int16:
		return strconv.FormatInt(int64(s), 10), nil
	case int8:
		return strconv.FormatInt(int64(s), 10), nil
	case uint:
		return strconv.FormatUint(uint64(s), 10), nil
	case uint64:
		return strconv.FormatUint(uint64(s), 10), nil
	case uint32:
		return strconv.FormatUint(uint64(s), 10), nil
	case uint16:
		return strconv.FormatUint(uint64(s), 10), nil
	case uint8:
		return strconv.FormatUint(uint64(s), 10), nil
	case json.Number:
		return s.String(), nil
	case []byte:
		return string(s), nil
	case template.HTML:
		return string(s), nil
	case template.URL:
		return string(s), nil
	case template.JS:
		return string(s), nil
	case template.CSS:
		return string(s), nil
	case template.HTMLAttr:
		return string(s), nil
	case nil:
		return "", nil
	case fmt.Stringer:
		return s.String(), nil
	case error:
		return s.Error(), nil
	default:
		return "", fmt.Errorf("unable to cast %#v of type %T to string", i, i)
	}
}

// ToStringMapStringE casts an interface to a map[string]string type.
func ToStringMapStringE(i interface{}) (map[string]string, error) {
	var m = map[string]string{}

	switch v := i.(type) {
	case map[string]string:
		return v, nil
	case map[string]interface{}:
		for k, val := range v {
			m[ToString(k)] = ToString(val)
		}
		return m, nil
	case map[interface{}]string:
		for k, val := range v {
			m[ToString(k)] = ToString(val)
		}
		return m, nil
	case map[interface{}]interface{}:
		for k, val := range v {
			m[ToString(k)] = ToString(val)
		}
		return m, nil
	case string:
		err := jsonStringToObject(v, &m)
		return m, err
	default:
		return m, fmt.Errorf("unable to cast %#v of type %T to map[string]string", i, i)
	}
}

// ToStringMapStringSliceE casts an interface to a map[string][]string type.
func ToStringMapStringSliceE(i interface{}) (map[string][]string, error) {
	var m = map[string][]string{}

	switch v := i.(type) {
	case map[string][]string:
		return v, nil
	case map[string][]interface{}:
		for k, val := range v {
			m[ToString(k)] = ToStringSlice(val)
		}
		return m, nil
	case map[string]string:
		for k, val := range v {
			m[ToString(k)] = []string{val}
		}
	case map[string]interface{}:
		for k, val := range v {
			switch vt := val.(type) {
			case []interface{}:
				m[ToString(k)] = ToStringSlice(vt)
			case []string:
				m[ToString(k)] = vt
			default:
				m[ToString(k)] = []string{ToString(val)}
			}
		}
		return m, nil
	case map[interface{}][]string:
		for k, val := range v {
			m[ToString(k)] = ToStringSlice(val)
		}
		return m, nil
	case map[interface{}]string:
		for k, val := range v {
			m[ToString(k)] = ToStringSlice(val)
		}
		return m, nil
	case map[interface{}][]interface{}:
		for k, val := range v {
			m[ToString(k)] = ToStringSlice(val)
		}
		return m, nil
	case map[interface{}]interface{}:
		for k, val := range v {
			key, err := ToStringE(k)
			if err != nil {
				return m, fmt.Errorf("unable to cast %#v of type %T to map[string][]string", i, i)
			}
			value, err := ToStringSliceE(val)
			if err != nil {
				return m, fmt.Errorf("unable to cast %#v of type %T to map[string][]string", i, i)
			}
			m[key] = value
		}
	case string:
		err := jsonStringToObject(v, &m)
		return m, err
	default:
		return m, fmt.Errorf("unable to cast %#v of type %T to map[string][]string", i, i)
	}
	return m, nil
}

// ToStringMapBoolE casts an interface to a map[string]bool type.
func ToStringMapBoolE(i interface{}) (map[string]bool, error) {
	var m = map[string]bool{}

	switch v := i.(type) {
	case map[interface{}]interface{}:
		for k, val := range v {
			m[ToString(k)] = ToBool(val)
		}
		return m, nil
	case map[string]interface{}:
		for k, val := range v {
			m[ToString(k)] = ToBool(val)
		}
		return m, nil
	case map[string]bool:
		return v, nil
	case string:
		err := jsonStringToObject(v, &m)
		return m, err
	default:
		return m, fmt.Errorf("unable to cast %#v of type %T to map[string]bool", i, i)
	}
}

// ToStringMapE casts an interface to a map[string]interface{} type.
func ToStringMapE(i interface{}) (map[string]interface{}, error) {
	var m = map[string]interface{}{}

	switch v := i.(type) {
	case map[interface{}]interface{}:
		for k, val := range v {
			m[ToString(k)] = val
		}
		return m, nil
	case map[string]interface{}:
		return v, nil
	case string:
		err := jsonStringToObject(v, &m)
		return m, err
	default:
		return m, fmt.Errorf("unable to cast %#v of type %T to map[string]interface{}", i, i)
	}
}

// ToStringMapIntE casts an interface to a map[string]int{} type.
func ToStringMapIntE(i interface{}) (map[string]int, error) {
	var m = map[string]int{}
	if i == nil {
		return m, fmt.Errorf("unable to cast %#v of type %T to map[string]int", i, i)
	}

	switch v := i.(type) {
	case map[interface{}]interface{}:
		for k, val := range v {
			m[ToString(k)] = ToInt(val)
		}
		return m, nil
	case map[string]interface{}:
		for k, val := range v {
			m[k] = ToInt(val)
		}
		return m, nil
	case map[string]int:
		return v, nil
	case string:
		err := jsonStringToObject(v, &m)
		return m, err
	}

	if reflect.TypeOf(i).Kind() != reflect.Map {
		return m, fmt.Errorf("unable to cast %#v of type %T to map[string]int", i, i)
	}

	mVal := reflect.ValueOf(m)
	v := reflect.ValueOf(i)
	for _, keyVal := range v.MapKeys() {
		val, err := ToIntE(v.MapIndex(keyVal).Interface())
		if err != nil {
			return m, fmt.Errorf("unable to cast %#v of type %T to map[string]int", i, i)
		}
		mVal.SetMapIndex(keyVal, reflect.ValueOf(val))
	}
	return m, nil
}

// ToStringMapInt64E casts an interface to a map[string]int64{} type.
func ToStringMapInt64E(i interface{}) (map[string]int64, error) {
	var m = map[string]int64{}
	if i == nil {
		return m, fmt.Errorf("unable to cast %#v of type %T to map[string]int64", i, i)
	}

	switch v := i.(type) {
	case map[interface{}]interface{}:
		for k, val := range v {
			m[ToString(k)] = ToInt64(val)
		}
		return m, nil
	case map[string]interface{}:
		for k, val := range v {
			m[k] = ToInt64(val)
		}
		return m, nil
	case map[string]int64:
		return v, nil
	case string:
		err := jsonStringToObject(v, &m)
		return m, err
	}

	if reflect.TypeOf(i).Kind() != reflect.Map {
		return m, fmt.Errorf("unable to cast %#v of type %T to map[string]int64", i, i)
	}
	mVal := reflect.ValueOf(m)
	v := reflect.ValueOf(i)
	for _, keyVal := range v.MapKeys() {
		val, err := ToInt64E(v.MapIndex(keyVal).Interface())
		if err != nil {
			return m, fmt.Errorf("unable to cast %#v of type %T to map[string]int64", i, i)
		}
		mVal.SetMapIndex(keyVal, reflect.ValueOf(val))
	}
	return m, nil
}

// ToSliceE casts an interface to a []interface{} type.
func ToSliceE(i interface{}) ([]interface{}, error) {
	var s []interface{}

	switch v := i.(type) {
	case []interface{}:
		return append(s, v...), nil
	case []map[string]interface{}:
		for _, u := range v {
			s = append(s, u)
		}
		return s, nil
	default:
		return s, fmt.Errorf("unable to cast %#v of type %T to []interface{}", i, i)
	}
}

// ToBoolSliceE casts an interface to a []bool type.
func ToBoolSliceE(i interface{}) ([]bool, error) {
	if i == nil {
		return []bool{}, fmt.Errorf("unable to cast %#v of type %T to []bool", i, i)
	}

	switch v := i.(type) {
	case []bool:
		return v, nil
	}

	kind := reflect.TypeOf(i).Kind()
	switch kind {
	case reflect.Slice, reflect.Array:
		s := reflect.ValueOf(i)
		a := make([]bool, s.Len())
		for j := 0; j < s.Len(); j++ {
			val, err := ToBoolE(s.Index(j).Interface())
			if err != nil {
				return []bool{}, fmt.Errorf("unable to cast %#v of type %T to []bool", i, i)
			}
			a[j] = val
		}
		return a, nil
	default:
		return []bool{}, fmt.Errorf("unable to cast %#v of type %T to []bool", i, i)
	}
}

// ToStringSliceE casts an interface to a []string type.
func ToStringSliceE(i interface{}) ([]string, error) {
	var a []string

	switch v := i.(type) {
	case []interface{}:
		for _, u := range v {
			a = append(a, ToString(u))
		}
		return a, nil
	case []string:
		return v, nil
	case []int8:
		for _, u := range v {
			a = append(a, ToString(u))
		}
		return a, nil
	case []int:
		for _, u := range v {
			a = append(a, ToString(u))
		}
		return a, nil
	case []int32:
		for _, u := range v {
			a = append(a, ToString(u))
		}
		return a, nil
	case []int64:
		for _, u := range v {
			a = append(a, ToString(u))
		}
		return a, nil
	case []float32:
		for _, u := range v {
			a = append(a, ToString(u))
		}
		return a, nil
	case []float64:
		for _, u := range v {
			a = append(a, ToString(u))
		}
		return a, nil
	case string:
		return strings.Fields(v), nil
	case []error:
		for _, err := range i.([]error) {
			a = append(a, err.Error())
		}
		return a, nil
	case interface{}:
		str, err := ToStringE(v)
		if err != nil {
			return a, fmt.Errorf("unable to cast %#v of type %T to []string", i, i)
		}
		return []string{str}, nil
	default:
		return a, fmt.Errorf("unable to cast %#v of type %T to []string", i, i)
	}
}

// ToIntSliceE casts an interface to a []int type.
func ToIntSliceE(i interface{}) ([]int, error) {
	if i == nil {
		return []int{}, fmt.Errorf("unable to cast %#v of type %T to []int", i, i)
	}

	switch v := i.(type) {
	case []int:
		return v, nil
	}

	kind := reflect.TypeOf(i).Kind()
	switch kind {
	case reflect.Slice, reflect.Array:
		s := reflect.ValueOf(i)
		a := make([]int, s.Len())
		for j := 0; j < s.Len(); j++ {
			val, err := ToIntE(s.Index(j).Interface())
			if err != nil {
				return []int{}, fmt.Errorf("unable to cast %#v of type %T to []int", i, i)
			}
			a[j] = val
		}
		return a, nil
	default:
		return []int{}, fmt.Errorf("unable to cast %#v of type %T to []int", i, i)
	}
}

// ToDurationSliceE casts an interface to a []time.Duration type.
func ToDurationSliceE(i interface{}) ([]time.Duration, error) {
	if i == nil {
		return []time.Duration{}, fmt.Errorf("unable to cast %#v of type %T to []time.Duration", i, i)
	}

	switch v := i.(type) {
	case []time.Duration:
		return v, nil
	}

	kind := reflect.TypeOf(i).Kind()
	switch kind {
	case reflect.Slice, reflect.Array:
		s := reflect.ValueOf(i)
		a := make([]time.Duration, s.Len())
		for j := 0; j < s.Len(); j++ {
			val, err := ToDurationE(s.Index(j).Interface())
			if err != nil {
				return []time.Duration{}, fmt.Errorf("unable to cast %#v of type %T to []time.Duration", i, i)
			}
			a[j] = val
		}
		return a, nil
	default:
		return []time.Duration{}, fmt.Errorf("unable to cast %#v of type %T to []time.Duration", i, i)
	}
}

// StringToDate attempts to parse a string into a time.Time type using a
// predefined list of formats.  If no suitable format is found, an error is
// returned.
func StringToDate(s string) (time.Time, error) {
	return parseDateWith(s, time.UTC, timeFormats)
}

// StringToDateInDefaultLocation casts an empty interface to a time.Time,
// interpreting inputs without a timezone to be in the given location,
// or the local timezone if nil.
func StringToDateInDefaultLocation(s string, location *time.Location) (time.Time, error) {
	return parseDateWith(s, location, timeFormats)
}

type timeFormatType int

const (
	timeFormatNoTimezone timeFormatType = iota
	timeFormatNamedTimezone
	timeFormatNumericTimezone
	timeFormatNumericAndNamedTimezone
	timeFormatTimeOnly
)

type timeFormat struct {
	format string
	typ    timeFormatType
}

func (f timeFormat) hasTimezone() bool {
	// We don't include the formats with only named timezones, see
	// https://github.com/golang/go/issues/19694#issuecomment-289103522
	return f.typ >= timeFormatNumericTimezone && f.typ <= timeFormatNumericAndNamedTimezone
}

var (
	timeFormats = []timeFormat{
		{time.RFC3339, timeFormatNumericTimezone},
		{"2006-01-02T15:04:05", timeFormatNoTimezone}, // iso8601 without timezone
		{time.RFC1123Z, timeFormatNumericTimezone},
		{time.RFC1123, timeFormatNamedTimezone},
		{time.RFC822Z, timeFormatNumericTimezone},
		{time.RFC822, timeFormatNamedTimezone},
		{time.RFC850, timeFormatNamedTimezone},
		{"2006-01-02 15:04:05.999999999 -0700 MST", timeFormatNumericAndNamedTimezone}, // Time.String()
		{"2006-01-02T15:04:05-0700", timeFormatNumericTimezone},                        // RFC3339 without timezone hh:mm colon
		{"2006-01-02 15:04:05Z0700", timeFormatNumericTimezone},                        // RFC3339 without T or timezone hh:mm colon
		{"2006-01-02 15:04:05", timeFormatNoTimezone},
		{time.ANSIC, timeFormatNoTimezone},
		{time.UnixDate, timeFormatNamedTimezone},
		{time.RubyDate, timeFormatNumericTimezone},
		{"2006-01-02 15:04:05Z07:00", timeFormatNumericTimezone},
		{"2006-01-02", timeFormatNoTimezone},
		{"02 Jan 2006", timeFormatNoTimezone},
		{"2006-01-02 15:04:05 -07:00", timeFormatNumericTimezone},
		{"2006-01-02 15:04:05 -0700", timeFormatNumericTimezone},
		{time.Kitchen, timeFormatTimeOnly},
		{time.Stamp, timeFormatTimeOnly},
		{time.StampMilli, timeFormatTimeOnly},
		{time.StampMicro, timeFormatTimeOnly},
		{time.StampNano, timeFormatTimeOnly},
	}
)

func parseDateWith(s string, location *time.Location, formats []timeFormat) (d time.Time, e error) {

	for _, format := range formats {
		if d, e = time.Parse(format.format, s); e == nil {

			// Some time formats have a zone name, but no offset, so it gets
			// put in that zone name (not the default one passed in to us), but
			// without that zone's offset. So set the location manually.
			if format.typ <= timeFormatNamedTimezone {
				if location == nil {
					location = time.Local
				}
				year, month, day := d.Date()
				hour, min, sec := d.Clock()
				d = time.Date(year, month, day, hour, min, sec, d.Nanosecond(), location)
			}

			return
		}
	}
	return d, fmt.Errorf("unable to parse date: %s", s)
}

// jsonStringToObject attempts to unmarshall a string as JSON into
// the object passed as pointer.
func jsonStringToObject(s string, v interface{}) error {
	data := []byte(s)
	return json.Unmarshal(data, v)
}

// toInt returns the int value of v if v or v's underlying type
// is an int.
// Note that this will return false for int64 etc. types.
func toInt(v interface{}) (int, bool) {
	switch v := v.(type) {
	case int:
		return v, true
	case time.Weekday:
		return int(v), true
	case time.Month:
		return int(v), true
	default:
		return 0, false
	}
}

func trimZeroDecimal(s string) string {
	var foundZero bool
	for i := len(s); i > 0; i-- {
		switch s[i-1] {
		case '.':
			if foundZero {
				return s[:i-1]
			}
		case '0':
			foundZero = true
		default:
			return s
		}
	}
	return s
}
07070100000B13000081A4000000000000000000000001645E367C000003A6000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/spf13/cast/timeformattype_string.go // Code generated by "stringer -type timeFormatType"; DO NOT EDIT.

package cast

import "strconv"

func _() {
	// An "invalid array index" compiler error signifies that the constant values have changed.
	// Re-run the stringer command to generate them again.
	var x [1]struct{}
	_ = x[timeFormatNoTimezone-0]
	_ = x[timeFormatNamedTimezone-1]
	_ = x[timeFormatNumericTimezone-2]
	_ = x[timeFormatNumericAndNamedTimezone-3]
	_ = x[timeFormatTimeOnly-4]
}

const _timeFormatType_name = "timeFormatNoTimezonetimeFormatNamedTimezonetimeFormatNumericTimezonetimeFormatNumericAndNamedTimezonetimeFormatTimeOnly"

var _timeFormatType_index = [...]uint8{0, 20, 43, 68, 101, 119}

func (i timeFormatType) String() string {
	if i < 0 || i >= timeFormatType(len(_timeFormatType_index)-1) {
		return "timeFormatType(" + strconv.FormatInt(int64(i), 10) + ")"
	}
	return _timeFormatType_name[_timeFormatType_index[i]:_timeFormatType_index[i+1]]
}
  07070100000B14000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003200000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra 07070100000B15000081A4000000000000000000000001645E367C000001E4000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/.gitignore  # Compiled Object files, Static and Dynamic libs (Shared Objects)
*.o
*.a
*.so

# Folders
_obj
_test

# Architecture specific extensions/prefixes
*.[568vq]
[568vq].out

*.cgo1.go
*.cgo2.c
_cgo_defun.c
_cgo_gotypes.go
_cgo_export.*

_testmain.go

# Vim files https://github.com/github/gitignore/blob/master/Global/Vim.gitignore
# swap
[._]*.s[a-w][a-z]
[._]s[a-w][a-z]
# session
Session.vim
# temporary
.netrwhist
*~
# auto-generated tag files
tags

*.exe
cobra.test
bin

.idea/
*.iml
07070100000B16000081A4000000000000000000000001645E367C0000051C000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/.golangci.yml   # Copyright 2013-2023 The Cobra Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

run:
  deadline: 5m

linters:
  disable-all: true
  enable:
    #- bodyclose
    - deadcode
    #- depguard
    #- dogsled
    #- dupl
    - errcheck
    #- exhaustive
    #- funlen
    - gas
    #- gochecknoinits
    - goconst
    #- gocritic
    #- gocyclo
    #- gofmt
    - goimports
    - golint
    #- gomnd
    #- goprintffuncname
    #- gosec
    #- gosimple
    - govet
    - ineffassign
    - interfacer
    #- lll
    - maligned
    - megacheck
    #- misspell
    #- nakedret
    #- noctx
    #- nolintlint
    #- rowserrcheck
    #- scopelint
    #- staticcheck
    - structcheck
    #- stylecheck
    #- typecheck
    - unconvert
    #- unparam
    #- unused
    - varcheck
    #- whitespace
  fast: false
07070100000B17000081A4000000000000000000000001645E367C000000AC000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/.mailmap    Steve Francia <steve.francia@gmail.com>
Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fabiano Franz <ffranz@redhat.com>                   <contact@fabianofranz.com>
07070100000B18000081A4000000000000000000000001645E367C00000C32000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/CONDUCT.md  ## Cobra User Contract

### Versioning
Cobra will follow a steady release cadence. Non breaking changes will be released as minor versions quarterly. Patch bug releases are at the discretion of the maintainers. Users can expect security patch fixes to be released within relatively short order of a CVE becoming known. For more information on security patch fixes see the CVE section below. Releases will follow [Semantic Versioning](https://semver.org/). Users tracking the Master branch should expect unpredictable breaking changes as the project continues to move forward. For stability, it is highly recommended to use a release.

### Backward Compatibility
We will maintain two major releases in a moving window. The N-1 release will only receive bug fixes and security updates and will be dropped once N+1 is released.

### Deprecation
Deprecation of Go versions or dependent packages will only occur in major releases. To reduce the change of this taking users by surprise, any large deprecation will be preceded by an announcement in the [#cobra slack channel](https://gophers.slack.com/archives/CD3LP1199) and an Issue on Github.

### CVE
Maintainers will make every effort to release security patches in the case of a medium to high severity CVE directly impacting the library. The speed in which these patches reach a release is up to the discretion of the maintainers. A low severity CVE may be a lower priority than a high severity one.

### Communication
Cobra maintainers will use GitHub issues and the [#cobra slack channel](https://gophers.slack.com/archives/CD3LP1199) as the primary means of communication with the community. This is to foster open communication with all users and contributors.

### Breaking Changes
Breaking changes are generally allowed in the master branch, as this is the branch used to develop the next release of Cobra.

There may be times, however, when master is closed for breaking changes. This is likely to happen as we near the release of a new version.

Breaking changes are not allowed in release branches, as these represent minor versions that have already been released. These version have consumers who expect the APIs, behaviors, etc, to remain stable during the lifetime of the patch stream for the minor release.

Examples of breaking changes include:
- Removing or renaming exported constant, variable, type, or function.
- Updating the version of critical libraries such as `spf13/pflag`, `spf13/viper` etc...
  - Some version updates may be acceptable for picking up bug fixes, but maintainers must exercise caution when reviewing.

There may, at times, need to be exceptions where breaking changes are allowed in release branches. These are at the discretion of the project's maintainers, and must be carefully considered before merging.

### CI Testing
Maintainers will ensure the Cobra test suite utilizes the current supported versions of Golang.

### Disclaimer
Changes to this document and the contents therein are at the discretion of the maintainers.
None of the contents of this document are legally binding in any way to the maintainers or the users.
  07070100000B19000081A4000000000000000000000001645E367C00000831000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/CONTRIBUTING.md # Contributing to Cobra

Thank you so much for contributing to Cobra. We appreciate your time and help.
Here are some guidelines to help you get started.

## Code of Conduct

Be kind and respectful to the members of the community. Take time to educate
others who are seeking help. Harassment of any kind will not be tolerated.

## Questions

If you have questions regarding Cobra, feel free to ask it in the community
[#cobra Slack channel][cobra-slack]

## Filing a bug or feature

1. Before filing an issue, please check the existing issues to see if a
   similar one was already opened. If there is one already opened, feel free
   to comment on it.
1. If you believe you've found a bug, please provide detailed steps of
   reproduction, the version of Cobra and anything else you believe will be
   useful to help troubleshoot it (e.g. OS environment, environment variables,
   etc...). Also state the current behavior vs. the expected behavior.
1. If you'd like to see a feature or an enhancement please open an issue with
   a clear title and description of what the feature is and why it would be
   beneficial to the project and its users.

## Submitting changes

1. CLA: Upon submitting a Pull Request (PR), contributors will be prompted to
   sign a CLA. Please sign the CLA :slightly_smiling_face:
1. Tests: If you are submitting code, please ensure you have adequate tests
   for the feature. Tests can be run via `go test ./...` or `make test`.
1. Since this is golang project, ensure the new code is properly formatted to
   ensure code consistency. Run `make all`.

### Quick steps to contribute

1. Fork the project.
1. Download your fork to your PC (`git clone https://github.com/your_username/cobra && cd cobra`)
1. Create your feature branch (`git checkout -b my-new-feature`)
1. Make changes and run tests (`make test`)
1. Add them to staging (`git add .`)
1. Commit your changes (`git commit -m 'Add some feature'`)
1. Push to the branch (`git push origin my-new-feature`)
1. Create new pull request

<!-- Links -->
[cobra-slack]: https://gophers.slack.com/archives/CD3LP1199
   07070100000B1A000081A4000000000000000000000001645E367C0000279C000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/LICENSE.txt                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.
07070100000B1B000081A4000000000000000000000001645E367C00000089000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/MAINTAINERS maintainers:
- spf13
- johnSchnake
- jpmcb
- marckhouzam
inactive:
- anthonyfok
- bep
- bogem
- broady
- eparis
- jharshman
- wfernandes
   07070100000B1C000081A4000000000000000000000001645E367C0000038B000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/Makefile    BIN="./bin"
SRC=$(shell find . -name "*.go")

ifeq (, $(shell which golangci-lint))
$(warning "could not find golangci-lint in $(PATH), run: curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh")
endif

.PHONY: fmt lint test install_deps clean

default: all

all: fmt test

fmt:
	$(info ******************** checking formatting ********************)
	@test -z $(shell gofmt -l $(SRC)) || (gofmt -d $(SRC); exit 1)

lint:
	$(info ******************** running lint tools ********************)
	golangci-lint run -v

test: install_deps
	$(info ******************** running tests ********************)
	go test -v ./...

richtest: install_deps
	$(info ******************** running tests with kyoh86/richgo ********************)
	richgo test -v ./...

install_deps:
	$(info ******************** downloading dependencies ********************)
	go get -v ./...

clean:
	rm -rf $(BIN)
 07070100000B1D000081A4000000000000000000000001645E367C000010EE000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/README.md   ![cobra logo](assets/CobraMain.png)

Cobra is a library for creating powerful modern CLI applications.

Cobra is used in many Go projects such as [Kubernetes](https://kubernetes.io/),
[Hugo](https://gohugo.io), and [GitHub CLI](https://github.com/cli/cli) to
name a few. [This list](./projects_using_cobra.md) contains a more extensive list of projects using Cobra.

[![](https://img.shields.io/github/actions/workflow/status/spf13/cobra/test.yml?branch=main&longCache=true&label=Test&logo=github%20actions&logoColor=fff)](https://github.com/spf13/cobra/actions?query=workflow%3ATest)
[![Go Reference](https://pkg.go.dev/badge/github.com/spf13/cobra.svg)](https://pkg.go.dev/github.com/spf13/cobra)
[![Go Report Card](https://goreportcard.com/badge/github.com/spf13/cobra)](https://goreportcard.com/report/github.com/spf13/cobra)
[![Slack](https://img.shields.io/badge/Slack-cobra-brightgreen)](https://gophers.slack.com/archives/CD3LP1199)

# Overview

Cobra is a library providing a simple interface to create powerful modern CLI
interfaces similar to git & go tools.

Cobra provides:
* Easy subcommand-based CLIs: `app server`, `app fetch`, etc.
* Fully POSIX-compliant flags (including short & long versions)
* Nested subcommands
* Global, local and cascading flags
* Intelligent suggestions (`app srver`... did you mean `app server`?)
* Automatic help generation for commands and flags
* Grouping help for subcommands
* Automatic help flag recognition of `-h`, `--help`, etc.
* Automatically generated shell autocomplete for your application (bash, zsh, fish, powershell)
* Automatically generated man pages for your application
* Command aliases so you can change things without breaking them
* The flexibility to define your own help, usage, etc.
* Optional seamless integration with [viper](https://github.com/spf13/viper) for 12-factor apps

# Concepts

Cobra is built on a structure of commands, arguments & flags.

**Commands** represent actions, **Args** are things and **Flags** are modifiers for those actions.

The best applications read like sentences when used, and as a result, users
intuitively know how to interact with them.

The pattern to follow is
`APPNAME VERB NOUN --ADJECTIVE`
    or
`APPNAME COMMAND ARG --FLAG`.

A few good real world examples may better illustrate this point.

In the following example, 'server' is a command, and 'port' is a flag:

    hugo server --port=1313

In this command we are telling Git to clone the url bare.

    git clone URL --bare

## Commands

Command is the central point of the application. Each interaction that
the application supports will be contained in a Command. A command can
have children commands and optionally run an action.

In the example above, 'server' is the command.

[More about cobra.Command](https://pkg.go.dev/github.com/spf13/cobra#Command)

## Flags

A flag is a way to modify the behavior of a command. Cobra supports
fully POSIX-compliant flags as well as the Go [flag package](https://golang.org/pkg/flag/).
A Cobra command can define flags that persist through to children commands
and flags that are only available to that command.

In the example above, 'port' is the flag.

Flag functionality is provided by the [pflag
library](https://github.com/spf13/pflag), a fork of the flag standard library
which maintains the same interface while adding POSIX compliance.

# Installing
Using Cobra is easy. First, use `go get` to install the latest version
of the library.     

```
go get -u github.com/spf13/cobra@latest
```

Next, include Cobra in your application:

```go
import "github.com/spf13/cobra"
```

# Usage
`cobra-cli` is a command line program to generate cobra applications and command files.
It will bootstrap your application scaffolding to rapidly
develop a Cobra-based application. It is the easiest way to incorporate Cobra into your application.

It can be installed by running:

```
go install github.com/spf13/cobra-cli@latest
```

For complete details on using the Cobra-CLI generator, please read [The Cobra Generator README](https://github.com/spf13/cobra-cli/blob/main/README.md)

For complete details on using the Cobra library, please read the [The Cobra User Guide](user_guide.md).

# License

Cobra is released under the Apache 2.0 license. See [LICENSE.txt](https://github.com/spf13/cobra/blob/master/LICENSE.txt)
  07070100000B1E000081A4000000000000000000000001645E367C00000A8C000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/active_help.go  // Copyright 2013-2023 The Cobra Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package cobra

import (
	"fmt"
	"os"
	"strings"
)

const (
	activeHelpMarker = "_activeHelp_ "
	// The below values should not be changed: programs will be using them explicitly
	// in their user documentation, and users will be using them explicitly.
	activeHelpEnvVarSuffix  = "_ACTIVE_HELP"
	activeHelpGlobalEnvVar  = "COBRA_ACTIVE_HELP"
	activeHelpGlobalDisable = "0"
)

// AppendActiveHelp adds the specified string to the specified array to be used as ActiveHelp.
// Such strings will be processed by the completion script and will be shown as ActiveHelp
// to the user.
// The array parameter should be the array that will contain the completions.
// This function can be called multiple times before and/or after completions are added to
// the array.  Each time this function is called with the same array, the new
// ActiveHelp line will be shown below the previous ones when completion is triggered.
func AppendActiveHelp(compArray []string, activeHelpStr string) []string {
	return append(compArray, fmt.Sprintf("%s%s", activeHelpMarker, activeHelpStr))
}

// GetActiveHelpConfig returns the value of the ActiveHelp environment variable
// <PROGRAM>_ACTIVE_HELP where <PROGRAM> is the name of the root command in upper
// case, with all - replaced by _.
// It will always return "0" if the global environment variable COBRA_ACTIVE_HELP
// is set to "0".
func GetActiveHelpConfig(cmd *Command) string {
	activeHelpCfg := os.Getenv(activeHelpGlobalEnvVar)
	if activeHelpCfg != activeHelpGlobalDisable {
		activeHelpCfg = os.Getenv(activeHelpEnvVar(cmd.Root().Name()))
	}
	return activeHelpCfg
}

// activeHelpEnvVar returns the name of the program-specific ActiveHelp environment
// variable.  It has the format <PROGRAM>_ACTIVE_HELP where <PROGRAM> is the name of the
// root command in upper case, with all - replaced by _.
func activeHelpEnvVar(name string) string {
	// This format should not be changed: users will be using it explicitly.
	activeHelpEnvVar := strings.ToUpper(fmt.Sprintf("%s%s", name, activeHelpEnvVarSuffix))
	return strings.ReplaceAll(activeHelpEnvVar, "-", "_")
}
07070100000B1F000081A4000000000000000000000001645E367C00002166000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/active_help.md  # Active Help

Active Help is a framework provided by Cobra which allows a program to define messages (hints, warnings, etc) that will be printed during program usage.  It aims to make it easier for your users to learn how to use your program.  If configured by the program, Active Help is printed when the user triggers shell completion.

For example, 
```
bash-5.1$ helm repo add [tab]
You must choose a name for the repo you are adding.

bash-5.1$ bin/helm package [tab]
Please specify the path to the chart to package

bash-5.1$ bin/helm package [tab][tab]
bin/    internal/    scripts/    pkg/     testdata/
```

**Hint**: A good place to use Active Help messages is when the normal completion system does not provide any suggestions. In such cases, Active Help nicely supplements the normal shell completions to guide the user in knowing what is expected by the program.
## Supported shells

Active Help is currently only supported for the following shells:
- Bash (using [bash completion V2](shell_completions.md#bash-completion-v2) only). Note that bash 4.4 or higher is required for the prompt to appear when an Active Help message is printed.
- Zsh

## Adding Active Help messages

As Active Help uses the shell completion system, the implementation of Active Help messages is done by enhancing custom dynamic completions.  If you are not familiar with dynamic completions, please refer to [Shell Completions](shell_completions.md).

Adding Active Help is done through the use of the `cobra.AppendActiveHelp(...)` function, where the program repeatedly adds Active Help messages to the list of completions.  Keep reading for details.

### Active Help for nouns

Adding Active Help when completing a noun is done within the `ValidArgsFunction(...)` of a command.  Please notice the use of `cobra.AppendActiveHelp(...)` in the following example:

```go
cmd := &cobra.Command{
	Use:   "add [NAME] [URL]",
	Short: "add a chart repository",
	Args:  require.ExactArgs(2),
	RunE: func(cmd *cobra.Command, args []string) error {
		return addRepo(args)
	},
	ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
		var comps []string
		if len(args) == 0 {
			comps = cobra.AppendActiveHelp(comps, "You must choose a name for the repo you are adding")
		} else if len(args) == 1 {
			comps = cobra.AppendActiveHelp(comps, "You must specify the URL for the repo you are adding")
		} else {
			comps = cobra.AppendActiveHelp(comps, "This command does not take any more arguments")
		}
		return comps, cobra.ShellCompDirectiveNoFileComp
	},
}
```
The example above defines the completions (none, in this specific example) as well as the Active Help messages for the `helm repo add` command.  It yields the following behavior:
```
bash-5.1$ helm repo add [tab]
You must choose a name for the repo you are adding

bash-5.1$ helm repo add grafana [tab]
You must specify the URL for the repo you are adding

bash-5.1$ helm repo add grafana https://grafana.github.io/helm-charts [tab]
This command does not take any more arguments
```
**Hint**: As can be seen in the above example, a good place to use Active Help messages is when the normal completion system does not provide any suggestions. In such cases, Active Help nicely supplements the normal shell completions.

### Active Help for flags

Providing Active Help for flags is done in the same fashion as for nouns, but using the completion function registered for the flag.  For example:
```go
_ = cmd.RegisterFlagCompletionFunc("version", func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
		if len(args) != 2 {
			return cobra.AppendActiveHelp(nil, "You must first specify the chart to install before the --version flag can be completed"), cobra.ShellCompDirectiveNoFileComp
		}
		return compVersionFlag(args[1], toComplete)
	})
```
The example above prints an Active Help message when not enough information was given by the user to complete the `--version` flag.
```
bash-5.1$ bin/helm install myrelease --version 2.0.[tab]
You must first specify the chart to install before the --version flag can be completed

bash-5.1$ bin/helm install myrelease bitnami/solr --version 2.0.[tab][tab]
2.0.1  2.0.2  2.0.3
```

## User control of Active Help

You may want to allow your users to disable Active Help or choose between different levels of Active Help.  It is entirely up to the program to define the type of configurability of Active Help that it wants to offer, if any.
Allowing to configure Active Help is entirely optional; you can use Active Help in your program without doing anything about Active Help configuration.

The way to configure Active Help is to use the program's Active Help environment
variable.  That variable is named `<PROGRAM>_ACTIVE_HELP` where `<PROGRAM>` is the name of your 
program in uppercase with any `-` replaced by an `_`.  The variable should be set by the user to whatever
Active Help configuration values are supported by the program.

For example, say `helm` has chosen to support three levels for Active Help: `on`, `off`, `local`.  Then a user
would set the desired behavior to `local` by doing `export HELM_ACTIVE_HELP=local` in their shell.

For simplicity, when in `cmd.ValidArgsFunction(...)` or a flag's completion function, the program should read the
Active Help configuration using the `cobra.GetActiveHelpConfig(cmd)` function and select what Active Help messages
should or should not be added (instead of reading the environment variable directly).

For example:
```go
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
	activeHelpLevel := cobra.GetActiveHelpConfig(cmd)

	var comps []string
	if len(args) == 0 {
		if activeHelpLevel != "off"  {
			comps = cobra.AppendActiveHelp(comps, "You must choose a name for the repo you are adding")
		}
	} else if len(args) == 1 {
		if activeHelpLevel != "off" {
			comps = cobra.AppendActiveHelp(comps, "You must specify the URL for the repo you are adding")
		}
	} else {
		if activeHelpLevel == "local" {
			comps = cobra.AppendActiveHelp(comps, "This command does not take any more arguments")
		}
	}
	return comps, cobra.ShellCompDirectiveNoFileComp
},
```
**Note 1**: If the `<PROGRAM>_ACTIVE_HELP` environment variable is set to the string "0", Cobra will automatically disable all Active Help output (even if some output was specified by the program using the `cobra.AppendActiveHelp(...)` function).  Using "0" can simplify your code in situations where you want to blindly disable Active Help without having to call `cobra.GetActiveHelpConfig(cmd)` explicitly.

**Note 2**: If a user wants to disable Active Help for every single program based on Cobra, she can set the environment variable `COBRA_ACTIVE_HELP` to "0".  In this case `cobra.GetActiveHelpConfig(cmd)` will return "0" no matter what the variable `<PROGRAM>_ACTIVE_HELP` is set to.

**Note 3**: If the user does not set `<PROGRAM>_ACTIVE_HELP` or `COBRA_ACTIVE_HELP` (which will be a common case), the default value for the Active Help configuration returned by `cobra.GetActiveHelpConfig(cmd)` will be the empty string. 
## Active Help with Cobra's default completion command

Cobra provides a default `completion` command for programs that wish to use it.
When using the default `completion` command, Active Help is configurable in the same
fashion as described above using environment variables.  You may wish to document this in more
details for your users.

## Debugging Active Help

Debugging your Active Help code is done in the same way as debugging your dynamic completion code, which is with Cobra's hidden `__complete` command.  Please refer to [debugging shell completion](shell_completions.md#debugging) for details.

When debugging with the `__complete` command, if you want to specify different Active Help configurations, you should use the active help environment variable.  That variable is named `<PROGRAM>_ACTIVE_HELP` where any `-` is replaced by an `_`.  For example, we can test deactivating some Active Help as shown below:
```
$ HELM_ACTIVE_HELP=1 bin/helm __complete install wordpress bitnami/h<ENTER>
bitnami/haproxy
bitnami/harbor
_activeHelp_ WARNING: cannot re-use a name that is still in use
:0
Completion ended with directive: ShellCompDirectiveDefault

$ HELM_ACTIVE_HELP=0 bin/helm __complete install wordpress bitnami/h<ENTER>
bitnami/haproxy
bitnami/harbor
:0
Completion ended with directive: ShellCompDirectiveDefault
```
  07070100000B20000081A4000000000000000000000001645E367C00000FEE000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/args.go // Copyright 2013-2023 The Cobra Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package cobra

import (
	"fmt"
	"strings"
)

type PositionalArgs func(cmd *Command, args []string) error

// legacyArgs validation has the following behaviour:
// - root commands with no subcommands can take arbitrary arguments
// - root commands with subcommands will do subcommand validity checking
// - subcommands will always accept arbitrary arguments
func legacyArgs(cmd *Command, args []string) error {
	// no subcommand, always take args
	if !cmd.HasSubCommands() {
		return nil
	}

	// root command with subcommands, do subcommand checking.
	if !cmd.HasParent() && len(args) > 0 {
		return fmt.Errorf("unknown command %q for %q%s", args[0], cmd.CommandPath(), cmd.findSuggestions(args[0]))
	}
	return nil
}

// NoArgs returns an error if any args are included.
func NoArgs(cmd *Command, args []string) error {
	if len(args) > 0 {
		return fmt.Errorf("unknown command %q for %q", args[0], cmd.CommandPath())
	}
	return nil
}

// OnlyValidArgs returns an error if there are any positional args that are not in
// the `ValidArgs` field of `Command`
func OnlyValidArgs(cmd *Command, args []string) error {
	if len(cmd.ValidArgs) > 0 {
		// Remove any description that may be included in ValidArgs.
		// A description is following a tab character.
		var validArgs []string
		for _, v := range cmd.ValidArgs {
			validArgs = append(validArgs, strings.Split(v, "\t")[0])
		}
		for _, v := range args {
			if !stringInSlice(v, validArgs) {
				return fmt.Errorf("invalid argument %q for %q%s", v, cmd.CommandPath(), cmd.findSuggestions(args[0]))
			}
		}
	}
	return nil
}

// ArbitraryArgs never returns an error.
func ArbitraryArgs(cmd *Command, args []string) error {
	return nil
}

// MinimumNArgs returns an error if there is not at least N args.
func MinimumNArgs(n int) PositionalArgs {
	return func(cmd *Command, args []string) error {
		if len(args) < n {
			return fmt.Errorf("requires at least %d arg(s), only received %d", n, len(args))
		}
		return nil
	}
}

// MaximumNArgs returns an error if there are more than N args.
func MaximumNArgs(n int) PositionalArgs {
	return func(cmd *Command, args []string) error {
		if len(args) > n {
			return fmt.Errorf("accepts at most %d arg(s), received %d", n, len(args))
		}
		return nil
	}
}

// ExactArgs returns an error if there are not exactly n args.
func ExactArgs(n int) PositionalArgs {
	return func(cmd *Command, args []string) error {
		if len(args) != n {
			return fmt.Errorf("accepts %d arg(s), received %d", n, len(args))
		}
		return nil
	}
}

// RangeArgs returns an error if the number of args is not within the expected range.
func RangeArgs(min int, max int) PositionalArgs {
	return func(cmd *Command, args []string) error {
		if len(args) < min || len(args) > max {
			return fmt.Errorf("accepts between %d and %d arg(s), received %d", min, max, len(args))
		}
		return nil
	}
}

// MatchAll allows combining several PositionalArgs to work in concert.
func MatchAll(pargs ...PositionalArgs) PositionalArgs {
	return func(cmd *Command, args []string) error {
		for _, parg := range pargs {
			if err := parg(cmd, args); err != nil {
				return err
			}
		}
		return nil
	}
}

// ExactValidArgs returns an error if there are not exactly N positional args OR
// there are any positional args that are not in the `ValidArgs` field of `Command`
//
// Deprecated: use MatchAll(ExactArgs(n), OnlyValidArgs) instead
func ExactValidArgs(n int) PositionalArgs {
	return MatchAll(ExactArgs(n), OnlyValidArgs)
}
  07070100000B21000081A4000000000000000000000001645E367C00005A12000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/bash_completions.go // Copyright 2013-2023 The Cobra Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package cobra

import (
	"bytes"
	"fmt"
	"io"
	"os"
	"sort"
	"strings"

	"github.com/spf13/pflag"
)

// Annotations for Bash completion.
const (
	BashCompFilenameExt     = "cobra_annotation_bash_completion_filename_extensions"
	BashCompCustom          = "cobra_annotation_bash_completion_custom"
	BashCompOneRequiredFlag = "cobra_annotation_bash_completion_one_required_flag"
	BashCompSubdirsInDir    = "cobra_annotation_bash_completion_subdirs_in_dir"
)

func writePreamble(buf io.StringWriter, name string) {
	WriteStringAndCheck(buf, fmt.Sprintf("# bash completion for %-36s -*- shell-script -*-\n", name))
	WriteStringAndCheck(buf, fmt.Sprintf(`
__%[1]s_debug()
{
    if [[ -n ${BASH_COMP_DEBUG_FILE:-} ]]; then
        echo "$*" >> "${BASH_COMP_DEBUG_FILE}"
    fi
}

# Homebrew on Macs have version 1.3 of bash-completion which doesn't include
# _init_completion. This is a very minimal version of that function.
__%[1]s_init_completion()
{
    COMPREPLY=()
    _get_comp_words_by_ref "$@" cur prev words cword
}

__%[1]s_index_of_word()
{
    local w word=$1
    shift
    index=0
    for w in "$@"; do
        [[ $w = "$word" ]] && return
        index=$((index+1))
    done
    index=-1
}

__%[1]s_contains_word()
{
    local w word=$1; shift
    for w in "$@"; do
        [[ $w = "$word" ]] && return
    done
    return 1
}

__%[1]s_handle_go_custom_completion()
{
    __%[1]s_debug "${FUNCNAME[0]}: cur is ${cur}, words[*] is ${words[*]}, #words[@] is ${#words[@]}"

    local shellCompDirectiveError=%[3]d
    local shellCompDirectiveNoSpace=%[4]d
    local shellCompDirectiveNoFileComp=%[5]d
    local shellCompDirectiveFilterFileExt=%[6]d
    local shellCompDirectiveFilterDirs=%[7]d

    local out requestComp lastParam lastChar comp directive args

    # Prepare the command to request completions for the program.
    # Calling ${words[0]} instead of directly %[1]s allows to handle aliases
    args=("${words[@]:1}")
    # Disable ActiveHelp which is not supported for bash completion v1
    requestComp="%[8]s=0 ${words[0]} %[2]s ${args[*]}"

    lastParam=${words[$((${#words[@]}-1))]}
    lastChar=${lastParam:$((${#lastParam}-1)):1}
    __%[1]s_debug "${FUNCNAME[0]}: lastParam ${lastParam}, lastChar ${lastChar}"

    if [ -z "${cur}" ] && [ "${lastChar}" != "=" ]; then
        # If the last parameter is complete (there is a space following it)
        # We add an extra empty parameter so we can indicate this to the go method.
        __%[1]s_debug "${FUNCNAME[0]}: Adding extra empty parameter"
        requestComp="${requestComp} \"\""
    fi

    __%[1]s_debug "${FUNCNAME[0]}: calling ${requestComp}"
    # Use eval to handle any environment variables and such
    out=$(eval "${requestComp}" 2>/dev/null)

    # Extract the directive integer at the very end of the output following a colon (:)
    directive=${out##*:}
    # Remove the directive
    out=${out%%:*}
    if [ "${directive}" = "${out}" ]; then
        # There is not directive specified
        directive=0
    fi
    __%[1]s_debug "${FUNCNAME[0]}: the completion directive is: ${directive}"
    __%[1]s_debug "${FUNCNAME[0]}: the completions are: ${out}"

    if [ $((directive & shellCompDirectiveError)) -ne 0 ]; then
        # Error code.  No completion.
        __%[1]s_debug "${FUNCNAME[0]}: received error from custom completion go code"
        return
    else
        if [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ]; then
            if [[ $(type -t compopt) = "builtin" ]]; then
                __%[1]s_debug "${FUNCNAME[0]}: activating no space"
                compopt -o nospace
            fi
        fi
        if [ $((directive & shellCompDirectiveNoFileComp)) -ne 0 ]; then
            if [[ $(type -t compopt) = "builtin" ]]; then
                __%[1]s_debug "${FUNCNAME[0]}: activating no file completion"
                compopt +o default
            fi
        fi
    fi

    if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then
        # File extension filtering
        local fullFilter filter filteringCmd
        # Do not use quotes around the $out variable or else newline
        # characters will be kept.
        for filter in ${out}; do
            fullFilter+="$filter|"
        done

        filteringCmd="_filedir $fullFilter"
        __%[1]s_debug "File filtering command: $filteringCmd"
        $filteringCmd
    elif [ $((directive & shellCompDirectiveFilterDirs)) -ne 0 ]; then
        # File completion for directories only
        local subdir
        # Use printf to strip any trailing newline
        subdir=$(printf "%%s" "${out}")
        if [ -n "$subdir" ]; then
            __%[1]s_debug "Listing directories in $subdir"
            __%[1]s_handle_subdirs_in_dir_flag "$subdir"
        else
            __%[1]s_debug "Listing directories in ."
            _filedir -d
        fi
    else
        while IFS='' read -r comp; do
            COMPREPLY+=("$comp")
        done < <(compgen -W "${out}" -- "$cur")
    fi
}

__%[1]s_handle_reply()
{
    __%[1]s_debug "${FUNCNAME[0]}"
    local comp
    case $cur in
        -*)
            if [[ $(type -t compopt) = "builtin" ]]; then
                compopt -o nospace
            fi
            local allflags
            if [ ${#must_have_one_flag[@]} -ne 0 ]; then
                allflags=("${must_have_one_flag[@]}")
            else
                allflags=("${flags[*]} ${two_word_flags[*]}")
            fi
            while IFS='' read -r comp; do
                COMPREPLY+=("$comp")
            done < <(compgen -W "${allflags[*]}" -- "$cur")
            if [[ $(type -t compopt) = "builtin" ]]; then
                [[ "${COMPREPLY[0]}" == *= ]] || compopt +o nospace
            fi

            # complete after --flag=abc
            if [[ $cur == *=* ]]; then
                if [[ $(type -t compopt) = "builtin" ]]; then
                    compopt +o nospace
                fi

                local index flag
                flag="${cur%%=*}"
                __%[1]s_index_of_word "${flag}" "${flags_with_completion[@]}"
                COMPREPLY=()
                if [[ ${index} -ge 0 ]]; then
                    PREFIX=""
                    cur="${cur#*=}"
                    ${flags_completion[${index}]}
                    if [ -n "${ZSH_VERSION:-}" ]; then
                        # zsh completion needs --flag= prefix
                        eval "COMPREPLY=( \"\${COMPREPLY[@]/#/${flag}=}\" )"
                    fi
                fi
            fi

            if [[ -z "${flag_parsing_disabled}" ]]; then
                # If flag parsing is enabled, we have completed the flags and can return.
                # If flag parsing is disabled, we may not know all (or any) of the flags, so we fallthrough
                # to possibly call handle_go_custom_completion.
                return 0;
            fi
            ;;
    esac

    # check if we are handling a flag with special work handling
    local index
    __%[1]s_index_of_word "${prev}" "${flags_with_completion[@]}"
    if [[ ${index} -ge 0 ]]; then
        ${flags_completion[${index}]}
        return
    fi

    # we are parsing a flag and don't have a special handler, no completion
    if [[ ${cur} != "${words[cword]}" ]]; then
        return
    fi

    local completions
    completions=("${commands[@]}")
    if [[ ${#must_have_one_noun[@]} -ne 0 ]]; then
        completions+=("${must_have_one_noun[@]}")
    elif [[ -n "${has_completion_function}" ]]; then
        # if a go completion function is provided, defer to that function
        __%[1]s_handle_go_custom_completion
    fi
    if [[ ${#must_have_one_flag[@]} -ne 0 ]]; then
        completions+=("${must_have_one_flag[@]}")
    fi
    while IFS='' read -r comp; do
        COMPREPLY+=("$comp")
    done < <(compgen -W "${completions[*]}" -- "$cur")

    if [[ ${#COMPREPLY[@]} -eq 0 && ${#noun_aliases[@]} -gt 0 && ${#must_have_one_noun[@]} -ne 0 ]]; then
        while IFS='' read -r comp; do
            COMPREPLY+=("$comp")
        done < <(compgen -W "${noun_aliases[*]}" -- "$cur")
    fi

    if [[ ${#COMPREPLY[@]} -eq 0 ]]; then
        if declare -F __%[1]s_custom_func >/dev/null; then
            # try command name qualified custom func
            __%[1]s_custom_func
        else
            # otherwise fall back to unqualified for compatibility
            declare -F __custom_func >/dev/null && __custom_func
        fi
    fi

    # available in bash-completion >= 2, not always present on macOS
    if declare -F __ltrim_colon_completions >/dev/null; then
        __ltrim_colon_completions "$cur"
    fi

    # If there is only 1 completion and it is a flag with an = it will be completed
    # but we don't want a space after the =
    if [[ "${#COMPREPLY[@]}" -eq "1" ]] && [[ $(type -t compopt) = "builtin" ]] && [[ "${COMPREPLY[0]}" == --*= ]]; then
       compopt -o nospace
    fi
}

# The arguments should be in the form "ext1|ext2|extn"
__%[1]s_handle_filename_extension_flag()
{
    local ext="$1"
    _filedir "@(${ext})"
}

__%[1]s_handle_subdirs_in_dir_flag()
{
    local dir="$1"
    pushd "${dir}" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 || return
}

__%[1]s_handle_flag()
{
    __%[1]s_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"

    # if a command required a flag, and we found it, unset must_have_one_flag()
    local flagname=${words[c]}
    local flagvalue=""
    # if the word contained an =
    if [[ ${words[c]} == *"="* ]]; then
        flagvalue=${flagname#*=} # take in as flagvalue after the =
        flagname=${flagname%%=*} # strip everything after the =
        flagname="${flagname}=" # but put the = back
    fi
    __%[1]s_debug "${FUNCNAME[0]}: looking for ${flagname}"
    if __%[1]s_contains_word "${flagname}" "${must_have_one_flag[@]}"; then
        must_have_one_flag=()
    fi

    # if you set a flag which only applies to this command, don't show subcommands
    if __%[1]s_contains_word "${flagname}" "${local_nonpersistent_flags[@]}"; then
      commands=()
    fi

    # keep flag value with flagname as flaghash
    # flaghash variable is an associative array which is only supported in bash > 3.
    if [[ -z "${BASH_VERSION:-}" || "${BASH_VERSINFO[0]:-}" -gt 3 ]]; then
        if [ -n "${flagvalue}" ] ; then
            flaghash[${flagname}]=${flagvalue}
        elif [ -n "${words[ $((c+1)) ]}" ] ; then
            flaghash[${flagname}]=${words[ $((c+1)) ]}
        else
            flaghash[${flagname}]="true" # pad "true" for bool flag
        fi
    fi

    # skip the argument to a two word flag
    if [[ ${words[c]} != *"="* ]] && __%[1]s_contains_word "${words[c]}" "${two_word_flags[@]}"; then
        __%[1]s_debug "${FUNCNAME[0]}: found a flag ${words[c]}, skip the next argument"
        c=$((c+1))
        # if we are looking for a flags value, don't show commands
        if [[ $c -eq $cword ]]; then
            commands=()
        fi
    fi

    c=$((c+1))

}

__%[1]s_handle_noun()
{
    __%[1]s_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"

    if __%[1]s_contains_word "${words[c]}" "${must_have_one_noun[@]}"; then
        must_have_one_noun=()
    elif __%[1]s_contains_word "${words[c]}" "${noun_aliases[@]}"; then
        must_have_one_noun=()
    fi

    nouns+=("${words[c]}")
    c=$((c+1))
}

__%[1]s_handle_command()
{
    __%[1]s_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"

    local next_command
    if [[ -n ${last_command} ]]; then
        next_command="_${last_command}_${words[c]//:/__}"
    else
        if [[ $c -eq 0 ]]; then
            next_command="_%[1]s_root_command"
        else
            next_command="_${words[c]//:/__}"
        fi
    fi
    c=$((c+1))
    __%[1]s_debug "${FUNCNAME[0]}: looking for ${next_command}"
    declare -F "$next_command" >/dev/null && $next_command
}

__%[1]s_handle_word()
{
    if [[ $c -ge $cword ]]; then
        __%[1]s_handle_reply
        return
    fi
    __%[1]s_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
    if [[ "${words[c]}" == -* ]]; then
        __%[1]s_handle_flag
    elif __%[1]s_contains_word "${words[c]}" "${commands[@]}"; then
        __%[1]s_handle_command
    elif [[ $c -eq 0 ]]; then
        __%[1]s_handle_command
    elif __%[1]s_contains_word "${words[c]}" "${command_aliases[@]}"; then
        # aliashash variable is an associative array which is only supported in bash > 3.
        if [[ -z "${BASH_VERSION:-}" || "${BASH_VERSINFO[0]:-}" -gt 3 ]]; then
            words[c]=${aliashash[${words[c]}]}
            __%[1]s_handle_command
        else
            __%[1]s_handle_noun
        fi
    else
        __%[1]s_handle_noun
    fi
    __%[1]s_handle_word
}

`, name, ShellCompNoDescRequestCmd,
		ShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp,
		ShellCompDirectiveFilterFileExt, ShellCompDirectiveFilterDirs, activeHelpEnvVar(name)))
}

func writePostscript(buf io.StringWriter, name string) {
	name = strings.ReplaceAll(name, ":", "__")
	WriteStringAndCheck(buf, fmt.Sprintf("__start_%s()\n", name))
	WriteStringAndCheck(buf, fmt.Sprintf(`{
    local cur prev words cword split
    declare -A flaghash 2>/dev/null || :
    declare -A aliashash 2>/dev/null || :
    if declare -F _init_completion >/dev/null 2>&1; then
        _init_completion -s || return
    else
        __%[1]s_init_completion -n "=" || return
    fi

    local c=0
    local flag_parsing_disabled=
    local flags=()
    local two_word_flags=()
    local local_nonpersistent_flags=()
    local flags_with_completion=()
    local flags_completion=()
    local commands=("%[1]s")
    local command_aliases=()
    local must_have_one_flag=()
    local must_have_one_noun=()
    local has_completion_function=""
    local last_command=""
    local nouns=()
    local noun_aliases=()

    __%[1]s_handle_word
}

`, name))
	WriteStringAndCheck(buf, fmt.Sprintf(`if [[ $(type -t compopt) = "builtin" ]]; then
    complete -o default -F __start_%s %s
else
    complete -o default -o nospace -F __start_%s %s
fi

`, name, name, name, name))
	WriteStringAndCheck(buf, "# ex: ts=4 sw=4 et filetype=sh\n")
}

func writeCommands(buf io.StringWriter, cmd *Command) {
	WriteStringAndCheck(buf, "    commands=()\n")
	for _, c := range cmd.Commands() {
		if !c.IsAvailableCommand() && c != cmd.helpCommand {
			continue
		}
		WriteStringAndCheck(buf, fmt.Sprintf("    commands+=(%q)\n", c.Name()))
		writeCmdAliases(buf, c)
	}
	WriteStringAndCheck(buf, "\n")
}

func writeFlagHandler(buf io.StringWriter, name string, annotations map[string][]string, cmd *Command) {
	for key, value := range annotations {
		switch key {
		case BashCompFilenameExt:
			WriteStringAndCheck(buf, fmt.Sprintf("    flags_with_completion+=(%q)\n", name))

			var ext string
			if len(value) > 0 {
				ext = fmt.Sprintf("__%s_handle_filename_extension_flag ", cmd.Root().Name()) + strings.Join(value, "|")
			} else {
				ext = "_filedir"
			}
			WriteStringAndCheck(buf, fmt.Sprintf("    flags_completion+=(%q)\n", ext))
		case BashCompCustom:
			WriteStringAndCheck(buf, fmt.Sprintf("    flags_with_completion+=(%q)\n", name))

			if len(value) > 0 {
				handlers := strings.Join(value, "; ")
				WriteStringAndCheck(buf, fmt.Sprintf("    flags_completion+=(%q)\n", handlers))
			} else {
				WriteStringAndCheck(buf, "    flags_completion+=(:)\n")
			}
		case BashCompSubdirsInDir:
			WriteStringAndCheck(buf, fmt.Sprintf("    flags_with_completion+=(%q)\n", name))

			var ext string
			if len(value) == 1 {
				ext = fmt.Sprintf("__%s_handle_subdirs_in_dir_flag ", cmd.Root().Name()) + value[0]
			} else {
				ext = "_filedir -d"
			}
			WriteStringAndCheck(buf, fmt.Sprintf("    flags_completion+=(%q)\n", ext))
		}
	}
}

const cbn = "\")\n"

func writeShortFlag(buf io.StringWriter, flag *pflag.Flag, cmd *Command) {
	name := flag.Shorthand
	format := "    "
	if len(flag.NoOptDefVal) == 0 {
		format += "two_word_"
	}
	format += "flags+=(\"-%s" + cbn
	WriteStringAndCheck(buf, fmt.Sprintf(format, name))
	writeFlagHandler(buf, "-"+name, flag.Annotations, cmd)
}

func writeFlag(buf io.StringWriter, flag *pflag.Flag, cmd *Command) {
	name := flag.Name
	format := "    flags+=(\"--%s"
	if len(flag.NoOptDefVal) == 0 {
		format += "="
	}
	format += cbn
	WriteStringAndCheck(buf, fmt.Sprintf(format, name))
	if len(flag.NoOptDefVal) == 0 {
		format = "    two_word_flags+=(\"--%s" + cbn
		WriteStringAndCheck(buf, fmt.Sprintf(format, name))
	}
	writeFlagHandler(buf, "--"+name, flag.Annotations, cmd)
}

func writeLocalNonPersistentFlag(buf io.StringWriter, flag *pflag.Flag) {
	name := flag.Name
	format := "    local_nonpersistent_flags+=(\"--%[1]s" + cbn
	if len(flag.NoOptDefVal) == 0 {
		format += "    local_nonpersistent_flags+=(\"--%[1]s=" + cbn
	}
	WriteStringAndCheck(buf, fmt.Sprintf(format, name))
	if len(flag.Shorthand) > 0 {
		WriteStringAndCheck(buf, fmt.Sprintf("    local_nonpersistent_flags+=(\"-%s\")\n", flag.Shorthand))
	}
}

// prepareCustomAnnotationsForFlags setup annotations for go completions for registered flags
func prepareCustomAnnotationsForFlags(cmd *Command) {
	flagCompletionMutex.RLock()
	defer flagCompletionMutex.RUnlock()
	for flag := range flagCompletionFunctions {
		// Make sure the completion script calls the __*_go_custom_completion function for
		// every registered flag.  We need to do this here (and not when the flag was registered
		// for completion) so that we can know the root command name for the prefix
		// of __<prefix>_go_custom_completion
		if flag.Annotations == nil {
			flag.Annotations = map[string][]string{}
		}
		flag.Annotations[BashCompCustom] = []string{fmt.Sprintf("__%[1]s_handle_go_custom_completion", cmd.Root().Name())}
	}
}

func writeFlags(buf io.StringWriter, cmd *Command) {
	prepareCustomAnnotationsForFlags(cmd)
	WriteStringAndCheck(buf, `    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

`)

	if cmd.DisableFlagParsing {
		WriteStringAndCheck(buf, "    flag_parsing_disabled=1\n")
	}

	localNonPersistentFlags := cmd.LocalNonPersistentFlags()
	cmd.NonInheritedFlags().VisitAll(func(flag *pflag.Flag) {
		if nonCompletableFlag(flag) {
			return
		}
		writeFlag(buf, flag, cmd)
		if len(flag.Shorthand) > 0 {
			writeShortFlag(buf, flag, cmd)
		}
		// localNonPersistentFlags are used to stop the completion of subcommands when one is set
		// if TraverseChildren is true we should allow to complete subcommands
		if localNonPersistentFlags.Lookup(flag.Name) != nil && !cmd.Root().TraverseChildren {
			writeLocalNonPersistentFlag(buf, flag)
		}
	})
	cmd.InheritedFlags().VisitAll(func(flag *pflag.Flag) {
		if nonCompletableFlag(flag) {
			return
		}
		writeFlag(buf, flag, cmd)
		if len(flag.Shorthand) > 0 {
			writeShortFlag(buf, flag, cmd)
		}
	})

	WriteStringAndCheck(buf, "\n")
}

func writeRequiredFlag(buf io.StringWriter, cmd *Command) {
	WriteStringAndCheck(buf, "    must_have_one_flag=()\n")
	flags := cmd.NonInheritedFlags()
	flags.VisitAll(func(flag *pflag.Flag) {
		if nonCompletableFlag(flag) {
			return
		}
		for key := range flag.Annotations {
			switch key {
			case BashCompOneRequiredFlag:
				format := "    must_have_one_flag+=(\"--%s"
				if flag.Value.Type() != "bool" {
					format += "="
				}
				format += cbn
				WriteStringAndCheck(buf, fmt.Sprintf(format, flag.Name))

				if len(flag.Shorthand) > 0 {
					WriteStringAndCheck(buf, fmt.Sprintf("    must_have_one_flag+=(\"-%s"+cbn, flag.Shorthand))
				}
			}
		}
	})
}

func writeRequiredNouns(buf io.StringWriter, cmd *Command) {
	WriteStringAndCheck(buf, "    must_have_one_noun=()\n")
	sort.Strings(cmd.ValidArgs)
	for _, value := range cmd.ValidArgs {
		// Remove any description that may be included following a tab character.
		// Descriptions are not supported by bash completion.
		value = strings.Split(value, "\t")[0]
		WriteStringAndCheck(buf, fmt.Sprintf("    must_have_one_noun+=(%q)\n", value))
	}
	if cmd.ValidArgsFunction != nil {
		WriteStringAndCheck(buf, "    has_completion_function=1\n")
	}
}

func writeCmdAliases(buf io.StringWriter, cmd *Command) {
	if len(cmd.Aliases) == 0 {
		return
	}

	sort.Strings(cmd.Aliases)

	WriteStringAndCheck(buf, fmt.Sprint(`    if [[ -z "${BASH_VERSION:-}" || "${BASH_VERSINFO[0]:-}" -gt 3 ]]; then`, "\n"))
	for _, value := range cmd.Aliases {
		WriteStringAndCheck(buf, fmt.Sprintf("        command_aliases+=(%q)\n", value))
		WriteStringAndCheck(buf, fmt.Sprintf("        aliashash[%q]=%q\n", value, cmd.Name()))
	}
	WriteStringAndCheck(buf, `    fi`)
	WriteStringAndCheck(buf, "\n")
}
func writeArgAliases(buf io.StringWriter, cmd *Command) {
	WriteStringAndCheck(buf, "    noun_aliases=()\n")
	sort.Strings(cmd.ArgAliases)
	for _, value := range cmd.ArgAliases {
		WriteStringAndCheck(buf, fmt.Sprintf("    noun_aliases+=(%q)\n", value))
	}
}

func gen(buf io.StringWriter, cmd *Command) {
	for _, c := range cmd.Commands() {
		if !c.IsAvailableCommand() && c != cmd.helpCommand {
			continue
		}
		gen(buf, c)
	}
	commandName := cmd.CommandPath()
	commandName = strings.ReplaceAll(commandName, " ", "_")
	commandName = strings.ReplaceAll(commandName, ":", "__")

	if cmd.Root() == cmd {
		WriteStringAndCheck(buf, fmt.Sprintf("_%s_root_command()\n{\n", commandName))
	} else {
		WriteStringAndCheck(buf, fmt.Sprintf("_%s()\n{\n", commandName))
	}

	WriteStringAndCheck(buf, fmt.Sprintf("    last_command=%q\n", commandName))
	WriteStringAndCheck(buf, "\n")
	WriteStringAndCheck(buf, "    command_aliases=()\n")
	WriteStringAndCheck(buf, "\n")

	writeCommands(buf, cmd)
	writeFlags(buf, cmd)
	writeRequiredFlag(buf, cmd)
	writeRequiredNouns(buf, cmd)
	writeArgAliases(buf, cmd)
	WriteStringAndCheck(buf, "}\n\n")
}

// GenBashCompletion generates bash completion file and writes to the passed writer.
func (c *Command) GenBashCompletion(w io.Writer) error {
	buf := new(bytes.Buffer)
	writePreamble(buf, c.Name())
	if len(c.BashCompletionFunction) > 0 {
		buf.WriteString(c.BashCompletionFunction + "\n")
	}
	gen(buf, c)
	writePostscript(buf, c.Name())

	_, err := buf.WriteTo(w)
	return err
}

func nonCompletableFlag(flag *pflag.Flag) bool {
	return flag.Hidden || len(flag.Deprecated) > 0
}

// GenBashCompletionFile generates bash completion file.
func (c *Command) GenBashCompletionFile(filename string) error {
	outFile, err := os.Create(filename)
	if err != nil {
		return err
	}
	defer outFile.Close()

	return c.GenBashCompletion(outFile)
}
  07070100000B22000081A4000000000000000000000001645E367C00000EDD000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/bash_completions.md # Generating Bash Completions For Your cobra.Command

Please refer to [Shell Completions](shell_completions.md) for details.

## Bash legacy dynamic completions

For backward compatibility, Cobra still supports its legacy dynamic completion solution (described below).  Unlike the `ValidArgsFunction` solution, the legacy solution will only work for Bash shell-completion and not for other shells. This legacy solution can be used along-side `ValidArgsFunction` and `RegisterFlagCompletionFunc()`, as long as both solutions are not used for the same command.  This provides a path to gradually migrate from the legacy solution to the new solution.

**Note**: Cobra's default `completion` command uses bash completion V2.  If you are currently using Cobra's legacy dynamic completion solution, you should not use the default `completion` command but continue using your own.

The legacy solution allows you to inject bash functions into the bash completion script.  Those bash functions are responsible for providing the completion choices for your own completions.

Some code that works in kubernetes:

```bash
const (
        bash_completion_func = `__kubectl_parse_get()
{
    local kubectl_output out
    if kubectl_output=$(kubectl get --no-headers "$1" 2>/dev/null); then
        out=($(echo "${kubectl_output}" | awk '{print $1}'))
        COMPREPLY=( $( compgen -W "${out[*]}" -- "$cur" ) )
    fi
}

__kubectl_get_resource()
{
    if [[ ${#nouns[@]} -eq 0 ]]; then
        return 1
    fi
    __kubectl_parse_get ${nouns[${#nouns[@]} -1]}
    if [[ $? -eq 0 ]]; then
        return 0
    fi
}

__kubectl_custom_func() {
    case ${last_command} in
        kubectl_get | kubectl_describe | kubectl_delete | kubectl_stop)
            __kubectl_get_resource
            return
            ;;
        *)
            ;;
    esac
}
`)
```

And then I set that in my command definition:

```go
cmds := &cobra.Command{
	Use:   "kubectl",
	Short: "kubectl controls the Kubernetes cluster manager",
	Long: `kubectl controls the Kubernetes cluster manager.

Find more information at https://github.com/GoogleCloudPlatform/kubernetes.`,
	Run: runHelp,
	BashCompletionFunction: bash_completion_func,
}
```

The `BashCompletionFunction` option is really only valid/useful on the root command. Doing the above will cause `__kubectl_custom_func()` (`__<command-use>_custom_func()`) to be called when the built in processor was unable to find a solution. In the case of kubernetes a valid command might look something like `kubectl get pod [mypod]`. If you type `kubectl get pod [tab][tab]` the `__kubectl_customc_func()` will run because the cobra.Command only understood "kubectl" and "get." `__kubectl_custom_func()` will see that the cobra.Command is "kubectl_get" and will thus call another helper `__kubectl_get_resource()`.  `__kubectl_get_resource` will look at the 'nouns' collected. In our example the only noun will be `pod`.  So it will call `__kubectl_parse_get pod`.  `__kubectl_parse_get` will actually call out to kubernetes and get any pods.  It will then set `COMPREPLY` to valid pods!

Similarly, for flags:

```go
	annotation := make(map[string][]string)
	annotation[cobra.BashCompCustom] = []string{"__kubectl_get_namespaces"}

	flag := &pflag.Flag{
		Name:        "namespace",
		Usage:       usage,
		Annotations: annotation,
	}
	cmd.Flags().AddFlag(flag)
```

In addition add the `__kubectl_get_namespaces` implementation in the `BashCompletionFunction`
value, e.g.:

```bash
__kubectl_get_namespaces()
{
    local template
    template="{{ range .items  }}{{ .metadata.name }} {{ end }}"
    local kubectl_out
    if kubectl_out=$(kubectl get -o template --template="${template}" namespace 2>/dev/null); then
        COMPREPLY=( $( compgen -W "${kubectl_out}[*]" -- "$cur" ) )
    fi
}
```
   07070100000B23000081A4000000000000000000000001645E367C000034B5000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/bash_completionsV2.go   // Copyright 2013-2023 The Cobra Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package cobra

import (
	"bytes"
	"fmt"
	"io"
	"os"
)

func (c *Command) genBashCompletion(w io.Writer, includeDesc bool) error {
	buf := new(bytes.Buffer)
	genBashComp(buf, c.Name(), includeDesc)
	_, err := buf.WriteTo(w)
	return err
}

func genBashComp(buf io.StringWriter, name string, includeDesc bool) {
	compCmd := ShellCompRequestCmd
	if !includeDesc {
		compCmd = ShellCompNoDescRequestCmd
	}

	WriteStringAndCheck(buf, fmt.Sprintf(`# bash completion V2 for %-36[1]s -*- shell-script -*-

__%[1]s_debug()
{
    if [[ -n ${BASH_COMP_DEBUG_FILE-} ]]; then
        echo "$*" >> "${BASH_COMP_DEBUG_FILE}"
    fi
}

# Macs have bash3 for which the bash-completion package doesn't include
# _init_completion. This is a minimal version of that function.
__%[1]s_init_completion()
{
    COMPREPLY=()
    _get_comp_words_by_ref "$@" cur prev words cword
}

# This function calls the %[1]s program to obtain the completion
# results and the directive.  It fills the 'out' and 'directive' vars.
__%[1]s_get_completion_results() {
    local requestComp lastParam lastChar args

    # Prepare the command to request completions for the program.
    # Calling ${words[0]} instead of directly %[1]s allows to handle aliases
    args=("${words[@]:1}")
    requestComp="${words[0]} %[2]s ${args[*]}"

    lastParam=${words[$((${#words[@]}-1))]}
    lastChar=${lastParam:$((${#lastParam}-1)):1}
    __%[1]s_debug "lastParam ${lastParam}, lastChar ${lastChar}"

    if [[ -z ${cur} && ${lastChar} != = ]]; then
        # If the last parameter is complete (there is a space following it)
        # We add an extra empty parameter so we can indicate this to the go method.
        __%[1]s_debug "Adding extra empty parameter"
        requestComp="${requestComp} ''"
    fi

    # When completing a flag with an = (e.g., %[1]s -n=<TAB>)
    # bash focuses on the part after the =, so we need to remove
    # the flag part from $cur
    if [[ ${cur} == -*=* ]]; then
        cur="${cur#*=}"
    fi

    __%[1]s_debug "Calling ${requestComp}"
    # Use eval to handle any environment variables and such
    out=$(eval "${requestComp}" 2>/dev/null)

    # Extract the directive integer at the very end of the output following a colon (:)
    directive=${out##*:}
    # Remove the directive
    out=${out%%:*}
    if [[ ${directive} == "${out}" ]]; then
        # There is not directive specified
        directive=0
    fi
    __%[1]s_debug "The completion directive is: ${directive}"
    __%[1]s_debug "The completions are: ${out}"
}

__%[1]s_process_completion_results() {
    local shellCompDirectiveError=%[3]d
    local shellCompDirectiveNoSpace=%[4]d
    local shellCompDirectiveNoFileComp=%[5]d
    local shellCompDirectiveFilterFileExt=%[6]d
    local shellCompDirectiveFilterDirs=%[7]d
    local shellCompDirectiveKeepOrder=%[8]d

    if (((directive & shellCompDirectiveError) != 0)); then
        # Error code.  No completion.
        __%[1]s_debug "Received error from custom completion go code"
        return
    else
        if (((directive & shellCompDirectiveNoSpace) != 0)); then
            if [[ $(type -t compopt) == builtin ]]; then
                __%[1]s_debug "Activating no space"
                compopt -o nospace
            else
                __%[1]s_debug "No space directive not supported in this version of bash"
            fi
        fi
        if (((directive & shellCompDirectiveKeepOrder) != 0)); then
            if [[ $(type -t compopt) == builtin ]]; then
                # no sort isn't supported for bash less than < 4.4
                if [[ ${BASH_VERSINFO[0]} -lt 4 || ( ${BASH_VERSINFO[0]} -eq 4 && ${BASH_VERSINFO[1]} -lt 4 ) ]]; then
                    __%[1]s_debug "No sort directive not supported in this version of bash"
                else
                    __%[1]s_debug "Activating keep order"
                    compopt -o nosort
                fi
            else
                __%[1]s_debug "No sort directive not supported in this version of bash"
            fi
        fi
        if (((directive & shellCompDirectiveNoFileComp) != 0)); then
            if [[ $(type -t compopt) == builtin ]]; then
                __%[1]s_debug "Activating no file completion"
                compopt +o default
            else
                __%[1]s_debug "No file completion directive not supported in this version of bash"
            fi
        fi
    fi

    # Separate activeHelp from normal completions
    local completions=()
    local activeHelp=()
    __%[1]s_extract_activeHelp

    if (((directive & shellCompDirectiveFilterFileExt) != 0)); then
        # File extension filtering
        local fullFilter filter filteringCmd

        # Do not use quotes around the $completions variable or else newline
        # characters will be kept.
        for filter in ${completions[*]}; do
            fullFilter+="$filter|"
        done

        filteringCmd="_filedir $fullFilter"
        __%[1]s_debug "File filtering command: $filteringCmd"
        $filteringCmd
    elif (((directive & shellCompDirectiveFilterDirs) != 0)); then
        # File completion for directories only

        local subdir
        subdir=${completions[0]}
        if [[ -n $subdir ]]; then
            __%[1]s_debug "Listing directories in $subdir"
            pushd "$subdir" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 || return
        else
            __%[1]s_debug "Listing directories in ."
            _filedir -d
        fi
    else
        __%[1]s_handle_completion_types
    fi

    __%[1]s_handle_special_char "$cur" :
    __%[1]s_handle_special_char "$cur" =

    # Print the activeHelp statements before we finish
    if ((${#activeHelp[*]} != 0)); then
        printf "\n";
        printf "%%s\n" "${activeHelp[@]}"
        printf "\n"

        # The prompt format is only available from bash 4.4.
        # We test if it is available before using it.
        if (x=${PS1@P}) 2> /dev/null; then
            printf "%%s" "${PS1@P}${COMP_LINE[@]}"
        else
            # Can't print the prompt.  Just print the
            # text the user had typed, it is workable enough.
            printf "%%s" "${COMP_LINE[@]}"
        fi
    fi
}

# Separate activeHelp lines from real completions.
# Fills the $activeHelp and $completions arrays.
__%[1]s_extract_activeHelp() {
    local activeHelpMarker="%[9]s"
    local endIndex=${#activeHelpMarker}

    while IFS='' read -r comp; do
        if [[ ${comp:0:endIndex} == $activeHelpMarker ]]; then
            comp=${comp:endIndex}
            __%[1]s_debug "ActiveHelp found: $comp"
            if [[ -n $comp ]]; then
                activeHelp+=("$comp")
            fi
        else
            # Not an activeHelp line but a normal completion
            completions+=("$comp")
        fi
    done <<<"${out}"
}

__%[1]s_handle_completion_types() {
    __%[1]s_debug "__%[1]s_handle_completion_types: COMP_TYPE is $COMP_TYPE"

    case $COMP_TYPE in
    37|42)
        # Type: menu-complete/menu-complete-backward and insert-completions
        # If the user requested inserting one completion at a time, or all
        # completions at once on the command-line we must remove the descriptions.
        # https://github.com/spf13/cobra/issues/1508
        local tab=$'\t' comp
        while IFS='' read -r comp; do
            [[ -z $comp ]] && continue
            # Strip any description
            comp=${comp%%%%$tab*}
            # Only consider the completions that match
            if [[ $comp == "$cur"* ]]; then
                COMPREPLY+=("$comp")
            fi
        done < <(printf "%%s\n" "${completions[@]}")
        ;;

    *)
        # Type: complete (normal completion)
        __%[1]s_handle_standard_completion_case
        ;;
    esac
}

__%[1]s_handle_standard_completion_case() {
    local tab=$'\t' comp

    # Short circuit to optimize if we don't have descriptions
    if [[ "${completions[*]}" != *$tab* ]]; then
        IFS=$'\n' read -ra COMPREPLY -d '' < <(compgen -W "${completions[*]}" -- "$cur")
        return 0
    fi

    local longest=0
    local compline
    # Look for the longest completion so that we can format things nicely
    while IFS='' read -r compline; do
        [[ -z $compline ]] && continue
        # Strip any description before checking the length
        comp=${compline%%%%$tab*}
        # Only consider the completions that match
        [[ $comp == "$cur"* ]] || continue
        COMPREPLY+=("$compline")
        if ((${#comp}>longest)); then
            longest=${#comp}
        fi
    done < <(printf "%%s\n" "${completions[@]}")

    # If there is a single completion left, remove the description text
    if ((${#COMPREPLY[*]} == 1)); then
        __%[1]s_debug "COMPREPLY[0]: ${COMPREPLY[0]}"
        comp="${COMPREPLY[0]%%%%$tab*}"
        __%[1]s_debug "Removed description from single completion, which is now: ${comp}"
        COMPREPLY[0]=$comp
    else # Format the descriptions
        __%[1]s_format_comp_descriptions $longest
    fi
}

__%[1]s_handle_special_char()
{
    local comp="$1"
    local char=$2
    if [[ "$comp" == *${char}* && "$COMP_WORDBREAKS" == *${char}* ]]; then
        local word=${comp%%"${comp##*${char}}"}
        local idx=${#COMPREPLY[*]}
        while ((--idx >= 0)); do
            COMPREPLY[idx]=${COMPREPLY[idx]#"$word"}
        done
    fi
}

__%[1]s_format_comp_descriptions()
{
    local tab=$'\t'
    local comp desc maxdesclength
    local longest=$1

    local i ci
    for ci in ${!COMPREPLY[*]}; do
        comp=${COMPREPLY[ci]}
        # Properly format the description string which follows a tab character if there is one
        if [[ "$comp" == *$tab* ]]; then
            __%[1]s_debug "Original comp: $comp"
            desc=${comp#*$tab}
            comp=${comp%%%%$tab*}

            # $COLUMNS stores the current shell width.
            # Remove an extra 4 because we add 2 spaces and 2 parentheses.
            maxdesclength=$(( COLUMNS - longest - 4 ))

            # Make sure we can fit a description of at least 8 characters
            # if we are to align the descriptions.
            if ((maxdesclength > 8)); then
                # Add the proper number of spaces to align the descriptions
                for ((i = ${#comp} ; i < longest ; i++)); do
                    comp+=" "
                done
            else
                # Don't pad the descriptions so we can fit more text after the completion
                maxdesclength=$(( COLUMNS - ${#comp} - 4 ))
            fi

            # If there is enough space for any description text,
            # truncate the descriptions that are too long for the shell width
            if ((maxdesclength > 0)); then
                if ((${#desc} > maxdesclength)); then
                    desc=${desc:0:$(( maxdesclength - 1 ))}
                    desc+="…"
                fi
                comp+="  ($desc)"
            fi
            COMPREPLY[ci]=$comp
            __%[1]s_debug "Final comp: $comp"
        fi
    done
}

__start_%[1]s()
{
    local cur prev words cword split

    COMPREPLY=()

    # Call _init_completion from the bash-completion package
    # to prepare the arguments properly
    if declare -F _init_completion >/dev/null 2>&1; then
        _init_completion -n =: || return
    else
        __%[1]s_init_completion -n =: || return
    fi

    __%[1]s_debug
    __%[1]s_debug "========= starting completion logic =========="
    __%[1]s_debug "cur is ${cur}, words[*] is ${words[*]}, #words[@] is ${#words[@]}, cword is $cword"

    # The user could have moved the cursor backwards on the command-line.
    # We need to trigger completion from the $cword location, so we need
    # to truncate the command-line ($words) up to the $cword location.
    words=("${words[@]:0:$cword+1}")
    __%[1]s_debug "Truncated words[*]: ${words[*]},"

    local out directive
    __%[1]s_get_completion_results
    __%[1]s_process_completion_results
}

if [[ $(type -t compopt) = "builtin" ]]; then
    complete -o default -F __start_%[1]s %[1]s
else
    complete -o default -o nospace -F __start_%[1]s %[1]s
fi

# ex: ts=4 sw=4 et filetype=sh
`, name, compCmd,
		ShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp,
		ShellCompDirectiveFilterFileExt, ShellCompDirectiveFilterDirs, ShellCompDirectiveKeepOrder,
		activeHelpMarker))
}

// GenBashCompletionFileV2 generates Bash completion version 2.
func (c *Command) GenBashCompletionFileV2(filename string, includeDesc bool) error {
	outFile, err := os.Create(filename)
	if err != nil {
		return err
	}
	defer outFile.Close()

	return c.GenBashCompletionV2(outFile, includeDesc)
}

// GenBashCompletionV2 generates Bash completion file version 2
// and writes it to the passed writer.
func (c *Command) GenBashCompletionV2(w io.Writer, includeDesc bool) error {
	return c.genBashCompletion(w, includeDesc)
}
   07070100000B24000081A4000000000000000000000001645E367C00001C40000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/cobra.go    // Copyright 2013-2023 The Cobra Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Commands similar to git, go tools and other modern CLI tools
// inspired by go, go-Commander, gh and subcommand

package cobra

import (
	"fmt"
	"io"
	"os"
	"reflect"
	"strconv"
	"strings"
	"text/template"
	"time"
	"unicode"
)

var templateFuncs = template.FuncMap{
	"trim":                    strings.TrimSpace,
	"trimRightSpace":          trimRightSpace,
	"trimTrailingWhitespaces": trimRightSpace,
	"appendIfNotPresent":      appendIfNotPresent,
	"rpad":                    rpad,
	"gt":                      Gt,
	"eq":                      Eq,
}

var initializers []func()
var finalizers []func()

const (
	defaultPrefixMatching  = false
	defaultCommandSorting  = true
	defaultCaseInsensitive = false
)

// EnablePrefixMatching allows to set automatic prefix matching. Automatic prefix matching can be a dangerous thing
// to automatically enable in CLI tools.
// Set this to true to enable it.
var EnablePrefixMatching = defaultPrefixMatching

// EnableCommandSorting controls sorting of the slice of commands, which is turned on by default.
// To disable sorting, set it to false.
var EnableCommandSorting = defaultCommandSorting

// EnableCaseInsensitive allows case-insensitive commands names. (case sensitive by default)
var EnableCaseInsensitive = defaultCaseInsensitive

// MousetrapHelpText enables an information splash screen on Windows
// if the CLI is started from explorer.exe.
// To disable the mousetrap, just set this variable to blank string ("").
// Works only on Microsoft Windows.
var MousetrapHelpText = `This is a command line tool.

You need to open cmd.exe and run it from there.
`

// MousetrapDisplayDuration controls how long the MousetrapHelpText message is displayed on Windows
// if the CLI is started from explorer.exe. Set to 0 to wait for the return key to be pressed.
// To disable the mousetrap, just set MousetrapHelpText to blank string ("").
// Works only on Microsoft Windows.
var MousetrapDisplayDuration = 5 * time.Second

// AddTemplateFunc adds a template function that's available to Usage and Help
// template generation.
func AddTemplateFunc(name string, tmplFunc interface{}) {
	templateFuncs[name] = tmplFunc
}

// AddTemplateFuncs adds multiple template functions that are available to Usage and
// Help template generation.
func AddTemplateFuncs(tmplFuncs template.FuncMap) {
	for k, v := range tmplFuncs {
		templateFuncs[k] = v
	}
}

// OnInitialize sets the passed functions to be run when each command's
// Execute method is called.
func OnInitialize(y ...func()) {
	initializers = append(initializers, y...)
}

// OnFinalize sets the passed functions to be run when each command's
// Execute method is terminated.
func OnFinalize(y ...func()) {
	finalizers = append(finalizers, y...)
}

// FIXME Gt is unused by cobra and should be removed in a version 2. It exists only for compatibility with users of cobra.

// Gt takes two types and checks whether the first type is greater than the second. In case of types Arrays, Chans,
// Maps and Slices, Gt will compare their lengths. Ints are compared directly while strings are first parsed as
// ints and then compared.
func Gt(a interface{}, b interface{}) bool {
	var left, right int64
	av := reflect.ValueOf(a)

	switch av.Kind() {
	case reflect.Array, reflect.Chan, reflect.Map, reflect.Slice:
		left = int64(av.Len())
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		left = av.Int()
	case reflect.String:
		left, _ = strconv.ParseInt(av.String(), 10, 64)
	}

	bv := reflect.ValueOf(b)

	switch bv.Kind() {
	case reflect.Array, reflect.Chan, reflect.Map, reflect.Slice:
		right = int64(bv.Len())
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		right = bv.Int()
	case reflect.String:
		right, _ = strconv.ParseInt(bv.String(), 10, 64)
	}

	return left > right
}

// FIXME Eq is unused by cobra and should be removed in a version 2. It exists only for compatibility with users of cobra.

// Eq takes two types and checks whether they are equal. Supported types are int and string. Unsupported types will panic.
func Eq(a interface{}, b interface{}) bool {
	av := reflect.ValueOf(a)
	bv := reflect.ValueOf(b)

	switch av.Kind() {
	case reflect.Array, reflect.Chan, reflect.Map, reflect.Slice:
		panic("Eq called on unsupported type")
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		return av.Int() == bv.Int()
	case reflect.String:
		return av.String() == bv.String()
	}
	return false
}

func trimRightSpace(s string) string {
	return strings.TrimRightFunc(s, unicode.IsSpace)
}

// FIXME appendIfNotPresent is unused by cobra and should be removed in a version 2. It exists only for compatibility with users of cobra.

// appendIfNotPresent will append stringToAppend to the end of s, but only if it's not yet present in s.
func appendIfNotPresent(s, stringToAppend string) string {
	if strings.Contains(s, stringToAppend) {
		return s
	}
	return s + " " + stringToAppend
}

// rpad adds padding to the right of a string.
func rpad(s string, padding int) string {
	formattedString := fmt.Sprintf("%%-%ds", padding)
	return fmt.Sprintf(formattedString, s)
}

// tmpl executes the given template text on data, writing the result to w.
func tmpl(w io.Writer, text string, data interface{}) error {
	t := template.New("top")
	t.Funcs(templateFuncs)
	template.Must(t.Parse(text))
	return t.Execute(w, data)
}

// ld compares two strings and returns the levenshtein distance between them.
func ld(s, t string, ignoreCase bool) int {
	if ignoreCase {
		s = strings.ToLower(s)
		t = strings.ToLower(t)
	}
	d := make([][]int, len(s)+1)
	for i := range d {
		d[i] = make([]int, len(t)+1)
	}
	for i := range d {
		d[i][0] = i
	}
	for j := range d[0] {
		d[0][j] = j
	}
	for j := 1; j <= len(t); j++ {
		for i := 1; i <= len(s); i++ {
			if s[i-1] == t[j-1] {
				d[i][j] = d[i-1][j-1]
			} else {
				min := d[i-1][j]
				if d[i][j-1] < min {
					min = d[i][j-1]
				}
				if d[i-1][j-1] < min {
					min = d[i-1][j-1]
				}
				d[i][j] = min + 1
			}
		}

	}
	return d[len(s)][len(t)]
}

func stringInSlice(a string, list []string) bool {
	for _, b := range list {
		if b == a {
			return true
		}
	}
	return false
}

// CheckErr prints the msg with the prefix 'Error:' and exits with error code 1. If the msg is nil, it does nothing.
func CheckErr(msg interface{}) {
	if msg != nil {
		fmt.Fprintln(os.Stderr, "Error:", msg)
		os.Exit(1)
	}
}

// WriteStringAndCheck writes a string into a buffer, and checks if the error is not nil.
func WriteStringAndCheck(b io.StringWriter, s string) {
	_, err := b.WriteString(s)
	CheckErr(err)
}
07070100000B25000081A4000000000000000000000001645E367C0000D18F000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/command.go  // Copyright 2013-2023 The Cobra Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package cobra is a commander providing a simple interface to create powerful modern CLI interfaces.
// In addition to providing an interface, Cobra simultaneously provides a controller to organize your application code.
package cobra

import (
	"bytes"
	"context"
	"errors"
	"fmt"
	"io"
	"os"
	"path/filepath"
	"sort"
	"strings"

	flag "github.com/spf13/pflag"
)

const FlagSetByCobraAnnotation = "cobra_annotation_flag_set_by_cobra"

// FParseErrWhitelist configures Flag parse errors to be ignored
type FParseErrWhitelist flag.ParseErrorsWhitelist

// Group Structure to manage groups for commands
type Group struct {
	ID    string
	Title string
}

// Command is just that, a command for your application.
// E.g.  'go run ...' - 'run' is the command. Cobra requires
// you to define the usage and description as part of your command
// definition to ensure usability.
type Command struct {
	// Use is the one-line usage message.
	// Recommended syntax is as follows:
	//   [ ] identifies an optional argument. Arguments that are not enclosed in brackets are required.
	//   ... indicates that you can specify multiple values for the previous argument.
	//   |   indicates mutually exclusive information. You can use the argument to the left of the separator or the
	//       argument to the right of the separator. You cannot use both arguments in a single use of the command.
	//   { } delimits a set of mutually exclusive arguments when one of the arguments is required. If the arguments are
	//       optional, they are enclosed in brackets ([ ]).
	// Example: add [-F file | -D dir]... [-f format] profile
	Use string

	// Aliases is an array of aliases that can be used instead of the first word in Use.
	Aliases []string

	// SuggestFor is an array of command names for which this command will be suggested -
	// similar to aliases but only suggests.
	SuggestFor []string

	// Short is the short description shown in the 'help' output.
	Short string

	// The group id under which this subcommand is grouped in the 'help' output of its parent.
	GroupID string

	// Long is the long message shown in the 'help <this-command>' output.
	Long string

	// Example is examples of how to use the command.
	Example string

	// ValidArgs is list of all valid non-flag arguments that are accepted in shell completions
	ValidArgs []string
	// ValidArgsFunction is an optional function that provides valid non-flag arguments for shell completion.
	// It is a dynamic version of using ValidArgs.
	// Only one of ValidArgs and ValidArgsFunction can be used for a command.
	ValidArgsFunction func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective)

	// Expected arguments
	Args PositionalArgs

	// ArgAliases is List of aliases for ValidArgs.
	// These are not suggested to the user in the shell completion,
	// but accepted if entered manually.
	ArgAliases []string

	// BashCompletionFunction is custom bash functions used by the legacy bash autocompletion generator.
	// For portability with other shells, it is recommended to instead use ValidArgsFunction
	BashCompletionFunction string

	// Deprecated defines, if this command is deprecated and should print this string when used.
	Deprecated string

	// Annotations are key/value pairs that can be used by applications to identify or
	// group commands.
	Annotations map[string]string

	// Version defines the version for this command. If this value is non-empty and the command does not
	// define a "version" flag, a "version" boolean flag will be added to the command and, if specified,
	// will print content of the "Version" variable. A shorthand "v" flag will also be added if the
	// command does not define one.
	Version string

	// The *Run functions are executed in the following order:
	//   * PersistentPreRun()
	//   * PreRun()
	//   * Run()
	//   * PostRun()
	//   * PersistentPostRun()
	// All functions get the same args, the arguments after the command name.
	//
	// PersistentPreRun: children of this command will inherit and execute.
	PersistentPreRun func(cmd *Command, args []string)
	// PersistentPreRunE: PersistentPreRun but returns an error.
	PersistentPreRunE func(cmd *Command, args []string) error
	// PreRun: children of this command will not inherit.
	PreRun func(cmd *Command, args []string)
	// PreRunE: PreRun but returns an error.
	PreRunE func(cmd *Command, args []string) error
	// Run: Typically the actual work function. Most commands will only implement this.
	Run func(cmd *Command, args []string)
	// RunE: Run but returns an error.
	RunE func(cmd *Command, args []string) error
	// PostRun: run after the Run command.
	PostRun func(cmd *Command, args []string)
	// PostRunE: PostRun but returns an error.
	PostRunE func(cmd *Command, args []string) error
	// PersistentPostRun: children of this command will inherit and execute after PostRun.
	PersistentPostRun func(cmd *Command, args []string)
	// PersistentPostRunE: PersistentPostRun but returns an error.
	PersistentPostRunE func(cmd *Command, args []string) error

	// groups for subcommands
	commandgroups []*Group

	// args is actual args parsed from flags.
	args []string
	// flagErrorBuf contains all error messages from pflag.
	flagErrorBuf *bytes.Buffer
	// flags is full set of flags.
	flags *flag.FlagSet
	// pflags contains persistent flags.
	pflags *flag.FlagSet
	// lflags contains local flags.
	lflags *flag.FlagSet
	// iflags contains inherited flags.
	iflags *flag.FlagSet
	// parentsPflags is all persistent flags of cmd's parents.
	parentsPflags *flag.FlagSet
	// globNormFunc is the global normalization function
	// that we can use on every pflag set and children commands
	globNormFunc func(f *flag.FlagSet, name string) flag.NormalizedName

	// usageFunc is usage func defined by user.
	usageFunc func(*Command) error
	// usageTemplate is usage template defined by user.
	usageTemplate string
	// flagErrorFunc is func defined by user and it's called when the parsing of
	// flags returns an error.
	flagErrorFunc func(*Command, error) error
	// helpTemplate is help template defined by user.
	helpTemplate string
	// helpFunc is help func defined by user.
	helpFunc func(*Command, []string)
	// helpCommand is command with usage 'help'. If it's not defined by user,
	// cobra uses default help command.
	helpCommand *Command
	// helpCommandGroupID is the group id for the helpCommand
	helpCommandGroupID string

	// completionCommandGroupID is the group id for the completion command
	completionCommandGroupID string

	// versionTemplate is the version template defined by user.
	versionTemplate string

	// inReader is a reader defined by the user that replaces stdin
	inReader io.Reader
	// outWriter is a writer defined by the user that replaces stdout
	outWriter io.Writer
	// errWriter is a writer defined by the user that replaces stderr
	errWriter io.Writer

	// FParseErrWhitelist flag parse errors to be ignored
	FParseErrWhitelist FParseErrWhitelist

	// CompletionOptions is a set of options to control the handling of shell completion
	CompletionOptions CompletionOptions

	// commandsAreSorted defines, if command slice are sorted or not.
	commandsAreSorted bool
	// commandCalledAs is the name or alias value used to call this command.
	commandCalledAs struct {
		name   string
		called bool
	}

	ctx context.Context

	// commands is the list of commands supported by this program.
	commands []*Command
	// parent is a parent command for this command.
	parent *Command
	// Max lengths of commands' string lengths for use in padding.
	commandsMaxUseLen         int
	commandsMaxCommandPathLen int
	commandsMaxNameLen        int

	// TraverseChildren parses flags on all parents before executing child command.
	TraverseChildren bool

	// Hidden defines, if this command is hidden and should NOT show up in the list of available commands.
	Hidden bool

	// SilenceErrors is an option to quiet errors down stream.
	SilenceErrors bool

	// SilenceUsage is an option to silence usage when an error occurs.
	SilenceUsage bool

	// DisableFlagParsing disables the flag parsing.
	// If this is true all flags will be passed to the command as arguments.
	DisableFlagParsing bool

	// DisableAutoGenTag defines, if gen tag ("Auto generated by spf13/cobra...")
	// will be printed by generating docs for this command.
	DisableAutoGenTag bool

	// DisableFlagsInUseLine will disable the addition of [flags] to the usage
	// line of a command when printing help or generating docs
	DisableFlagsInUseLine bool

	// DisableSuggestions disables the suggestions based on Levenshtein distance
	// that go along with 'unknown command' messages.
	DisableSuggestions bool

	// SuggestionsMinimumDistance defines minimum levenshtein distance to display suggestions.
	// Must be > 0.
	SuggestionsMinimumDistance int
}

// Context returns underlying command context. If command was executed
// with ExecuteContext or the context was set with SetContext, the
// previously set context will be returned. Otherwise, nil is returned.
//
// Notice that a call to Execute and ExecuteC will replace a nil context of
// a command with a context.Background, so a background context will be
// returned by Context after one of these functions has been called.
func (c *Command) Context() context.Context {
	return c.ctx
}

// SetContext sets context for the command. This context will be overwritten by
// Command.ExecuteContext or Command.ExecuteContextC.
func (c *Command) SetContext(ctx context.Context) {
	c.ctx = ctx
}

// SetArgs sets arguments for the command. It is set to os.Args[1:] by default, if desired, can be overridden
// particularly useful when testing.
func (c *Command) SetArgs(a []string) {
	c.args = a
}

// SetOutput sets the destination for usage and error messages.
// If output is nil, os.Stderr is used.
// Deprecated: Use SetOut and/or SetErr instead
func (c *Command) SetOutput(output io.Writer) {
	c.outWriter = output
	c.errWriter = output
}

// SetOut sets the destination for usage messages.
// If newOut is nil, os.Stdout is used.
func (c *Command) SetOut(newOut io.Writer) {
	c.outWriter = newOut
}

// SetErr sets the destination for error messages.
// If newErr is nil, os.Stderr is used.
func (c *Command) SetErr(newErr io.Writer) {
	c.errWriter = newErr
}

// SetIn sets the source for input data
// If newIn is nil, os.Stdin is used.
func (c *Command) SetIn(newIn io.Reader) {
	c.inReader = newIn
}

// SetUsageFunc sets usage function. Usage can be defined by application.
func (c *Command) SetUsageFunc(f func(*Command) error) {
	c.usageFunc = f
}

// SetUsageTemplate sets usage template. Can be defined by Application.
func (c *Command) SetUsageTemplate(s string) {
	c.usageTemplate = s
}

// SetFlagErrorFunc sets a function to generate an error when flag parsing
// fails.
func (c *Command) SetFlagErrorFunc(f func(*Command, error) error) {
	c.flagErrorFunc = f
}

// SetHelpFunc sets help function. Can be defined by Application.
func (c *Command) SetHelpFunc(f func(*Command, []string)) {
	c.helpFunc = f
}

// SetHelpCommand sets help command.
func (c *Command) SetHelpCommand(cmd *Command) {
	c.helpCommand = cmd
}

// SetHelpCommandGroupID sets the group id of the help command.
func (c *Command) SetHelpCommandGroupID(groupID string) {
	if c.helpCommand != nil {
		c.helpCommand.GroupID = groupID
	}
	// helpCommandGroupID is used if no helpCommand is defined by the user
	c.helpCommandGroupID = groupID
}

// SetCompletionCommandGroupID sets the group id of the completion command.
func (c *Command) SetCompletionCommandGroupID(groupID string) {
	// completionCommandGroupID is used if no completion command is defined by the user
	c.Root().completionCommandGroupID = groupID
}

// SetHelpTemplate sets help template to be used. Application can use it to set custom template.
func (c *Command) SetHelpTemplate(s string) {
	c.helpTemplate = s
}

// SetVersionTemplate sets version template to be used. Application can use it to set custom template.
func (c *Command) SetVersionTemplate(s string) {
	c.versionTemplate = s
}

// SetGlobalNormalizationFunc sets a normalization function to all flag sets and also to child commands.
// The user should not have a cyclic dependency on commands.
func (c *Command) SetGlobalNormalizationFunc(n func(f *flag.FlagSet, name string) flag.NormalizedName) {
	c.Flags().SetNormalizeFunc(n)
	c.PersistentFlags().SetNormalizeFunc(n)
	c.globNormFunc = n

	for _, command := range c.commands {
		command.SetGlobalNormalizationFunc(n)
	}
}

// OutOrStdout returns output to stdout.
func (c *Command) OutOrStdout() io.Writer {
	return c.getOut(os.Stdout)
}

// OutOrStderr returns output to stderr
func (c *Command) OutOrStderr() io.Writer {
	return c.getOut(os.Stderr)
}

// ErrOrStderr returns output to stderr
func (c *Command) ErrOrStderr() io.Writer {
	return c.getErr(os.Stderr)
}

// InOrStdin returns input to stdin
func (c *Command) InOrStdin() io.Reader {
	return c.getIn(os.Stdin)
}

func (c *Command) getOut(def io.Writer) io.Writer {
	if c.outWriter != nil {
		return c.outWriter
	}
	if c.HasParent() {
		return c.parent.getOut(def)
	}
	return def
}

func (c *Command) getErr(def io.Writer) io.Writer {
	if c.errWriter != nil {
		return c.errWriter
	}
	if c.HasParent() {
		return c.parent.getErr(def)
	}
	return def
}

func (c *Command) getIn(def io.Reader) io.Reader {
	if c.inReader != nil {
		return c.inReader
	}
	if c.HasParent() {
		return c.parent.getIn(def)
	}
	return def
}

// UsageFunc returns either the function set by SetUsageFunc for this command
// or a parent, or it returns a default usage function.
func (c *Command) UsageFunc() (f func(*Command) error) {
	if c.usageFunc != nil {
		return c.usageFunc
	}
	if c.HasParent() {
		return c.Parent().UsageFunc()
	}
	return func(c *Command) error {
		c.mergePersistentFlags()
		err := tmpl(c.OutOrStderr(), c.UsageTemplate(), c)
		if err != nil {
			c.PrintErrln(err)
		}
		return err
	}
}

// Usage puts out the usage for the command.
// Used when a user provides invalid input.
// Can be defined by user by overriding UsageFunc.
func (c *Command) Usage() error {
	return c.UsageFunc()(c)
}

// HelpFunc returns either the function set by SetHelpFunc for this command
// or a parent, or it returns a function with default help behavior.
func (c *Command) HelpFunc() func(*Command, []string) {
	if c.helpFunc != nil {
		return c.helpFunc
	}
	if c.HasParent() {
		return c.Parent().HelpFunc()
	}
	return func(c *Command, a []string) {
		c.mergePersistentFlags()
		// The help should be sent to stdout
		// See https://github.com/spf13/cobra/issues/1002
		err := tmpl(c.OutOrStdout(), c.HelpTemplate(), c)
		if err != nil {
			c.PrintErrln(err)
		}
	}
}

// Help puts out the help for the command.
// Used when a user calls help [command].
// Can be defined by user by overriding HelpFunc.
func (c *Command) Help() error {
	c.HelpFunc()(c, []string{})
	return nil
}

// UsageString returns usage string.
func (c *Command) UsageString() string {
	// Storing normal writers
	tmpOutput := c.outWriter
	tmpErr := c.errWriter

	bb := new(bytes.Buffer)
	c.outWriter = bb
	c.errWriter = bb

	CheckErr(c.Usage())

	// Setting things back to normal
	c.outWriter = tmpOutput
	c.errWriter = tmpErr

	return bb.String()
}

// FlagErrorFunc returns either the function set by SetFlagErrorFunc for this
// command or a parent, or it returns a function which returns the original
// error.
func (c *Command) FlagErrorFunc() (f func(*Command, error) error) {
	if c.flagErrorFunc != nil {
		return c.flagErrorFunc
	}

	if c.HasParent() {
		return c.parent.FlagErrorFunc()
	}
	return func(c *Command, err error) error {
		return err
	}
}

var minUsagePadding = 25

// UsagePadding return padding for the usage.
func (c *Command) UsagePadding() int {
	if c.parent == nil || minUsagePadding > c.parent.commandsMaxUseLen {
		return minUsagePadding
	}
	return c.parent.commandsMaxUseLen
}

var minCommandPathPadding = 11

// CommandPathPadding return padding for the command path.
func (c *Command) CommandPathPadding() int {
	if c.parent == nil || minCommandPathPadding > c.parent.commandsMaxCommandPathLen {
		return minCommandPathPadding
	}
	return c.parent.commandsMaxCommandPathLen
}

var minNamePadding = 11

// NamePadding returns padding for the name.
func (c *Command) NamePadding() int {
	if c.parent == nil || minNamePadding > c.parent.commandsMaxNameLen {
		return minNamePadding
	}
	return c.parent.commandsMaxNameLen
}

// UsageTemplate returns usage template for the command.
func (c *Command) UsageTemplate() string {
	if c.usageTemplate != "" {
		return c.usageTemplate
	}

	if c.HasParent() {
		return c.parent.UsageTemplate()
	}
	return `Usage:{{if .Runnable}}
  {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}}
  {{.CommandPath}} [command]{{end}}{{if gt (len .Aliases) 0}}

Aliases:
  {{.NameAndAliases}}{{end}}{{if .HasExample}}

Examples:
{{.Example}}{{end}}{{if .HasAvailableSubCommands}}{{$cmds := .Commands}}{{if eq (len .Groups) 0}}

Available Commands:{{range $cmds}}{{if (or .IsAvailableCommand (eq .Name "help"))}}
  {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{else}}{{range $group := .Groups}}

{{.Title}}{{range $cmds}}{{if (and (eq .GroupID $group.ID) (or .IsAvailableCommand (eq .Name "help")))}}
  {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if not .AllChildCommandsHaveGroup}}

Additional Commands:{{range $cmds}}{{if (and (eq .GroupID "") (or .IsAvailableCommand (eq .Name "help")))}}
  {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}}

Flags:
{{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}}

Global Flags:
{{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}}

Additional help topics:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}}
  {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}}

Use "{{.CommandPath}} [command] --help" for more information about a command.{{end}}
`
}

// HelpTemplate return help template for the command.
func (c *Command) HelpTemplate() string {
	if c.helpTemplate != "" {
		return c.helpTemplate
	}

	if c.HasParent() {
		return c.parent.HelpTemplate()
	}
	return `{{with (or .Long .Short)}}{{. | trimTrailingWhitespaces}}

{{end}}{{if or .Runnable .HasSubCommands}}{{.UsageString}}{{end}}`
}

// VersionTemplate return version template for the command.
func (c *Command) VersionTemplate() string {
	if c.versionTemplate != "" {
		return c.versionTemplate
	}

	if c.HasParent() {
		return c.parent.VersionTemplate()
	}
	return `{{with .Name}}{{printf "%s " .}}{{end}}{{printf "version %s" .Version}}
`
}

func hasNoOptDefVal(name string, fs *flag.FlagSet) bool {
	flag := fs.Lookup(name)
	if flag == nil {
		return false
	}
	return flag.NoOptDefVal != ""
}

func shortHasNoOptDefVal(name string, fs *flag.FlagSet) bool {
	if len(name) == 0 {
		return false
	}

	flag := fs.ShorthandLookup(name[:1])
	if flag == nil {
		return false
	}
	return flag.NoOptDefVal != ""
}

func stripFlags(args []string, c *Command) []string {
	if len(args) == 0 {
		return args
	}
	c.mergePersistentFlags()

	commands := []string{}
	flags := c.Flags()

Loop:
	for len(args) > 0 {
		s := args[0]
		args = args[1:]
		switch {
		case s == "--":
			// "--" terminates the flags
			break Loop
		case strings.HasPrefix(s, "--") && !strings.Contains(s, "=") && !hasNoOptDefVal(s[2:], flags):
			// If '--flag arg' then
			// delete arg from args.
			fallthrough // (do the same as below)
		case strings.HasPrefix(s, "-") && !strings.Contains(s, "=") && len(s) == 2 && !shortHasNoOptDefVal(s[1:], flags):
			// If '-f arg' then
			// delete 'arg' from args or break the loop if len(args) <= 1.
			if len(args) <= 1 {
				break Loop
			} else {
				args = args[1:]
				continue
			}
		case s != "" && !strings.HasPrefix(s, "-"):
			commands = append(commands, s)
		}
	}

	return commands
}

// argsMinusFirstX removes only the first x from args.  Otherwise, commands that look like
// openshift admin policy add-role-to-user admin my-user, lose the admin argument (arg[4]).
// Special care needs to be taken not to remove a flag value.
func (c *Command) argsMinusFirstX(args []string, x string) []string {
	if len(args) == 0 {
		return args
	}
	c.mergePersistentFlags()
	flags := c.Flags()

Loop:
	for pos := 0; pos < len(args); pos++ {
		s := args[pos]
		switch {
		case s == "--":
			// -- means we have reached the end of the parseable args. Break out of the loop now.
			break Loop
		case strings.HasPrefix(s, "--") && !strings.Contains(s, "=") && !hasNoOptDefVal(s[2:], flags):
			fallthrough
		case strings.HasPrefix(s, "-") && !strings.Contains(s, "=") && len(s) == 2 && !shortHasNoOptDefVal(s[1:], flags):
			// This is a flag without a default value, and an equal sign is not used. Increment pos in order to skip
			// over the next arg, because that is the value of this flag.
			pos++
			continue
		case !strings.HasPrefix(s, "-"):
			// This is not a flag or a flag value. Check to see if it matches what we're looking for, and if so,
			// return the args, excluding the one at this position.
			if s == x {
				ret := []string{}
				ret = append(ret, args[:pos]...)
				ret = append(ret, args[pos+1:]...)
				return ret
			}
		}
	}
	return args
}

func isFlagArg(arg string) bool {
	return ((len(arg) >= 3 && arg[0:2] == "--") ||
		(len(arg) >= 2 && arg[0] == '-' && arg[1] != '-'))
}

// Find the target command given the args and command tree
// Meant to be run on the highest node. Only searches down.
func (c *Command) Find(args []string) (*Command, []string, error) {
	var innerfind func(*Command, []string) (*Command, []string)

	innerfind = func(c *Command, innerArgs []string) (*Command, []string) {
		argsWOflags := stripFlags(innerArgs, c)
		if len(argsWOflags) == 0 {
			return c, innerArgs
		}
		nextSubCmd := argsWOflags[0]

		cmd := c.findNext(nextSubCmd)
		if cmd != nil {
			return innerfind(cmd, c.argsMinusFirstX(innerArgs, nextSubCmd))
		}
		return c, innerArgs
	}

	commandFound, a := innerfind(c, args)
	if commandFound.Args == nil {
		return commandFound, a, legacyArgs(commandFound, stripFlags(a, commandFound))
	}
	return commandFound, a, nil
}

func (c *Command) findSuggestions(arg string) string {
	if c.DisableSuggestions {
		return ""
	}
	if c.SuggestionsMinimumDistance <= 0 {
		c.SuggestionsMinimumDistance = 2
	}
	suggestionsString := ""
	if suggestions := c.SuggestionsFor(arg); len(suggestions) > 0 {
		suggestionsString += "\n\nDid you mean this?\n"
		for _, s := range suggestions {
			suggestionsString += fmt.Sprintf("\t%v\n", s)
		}
	}
	return suggestionsString
}

func (c *Command) findNext(next string) *Command {
	matches := make([]*Command, 0)
	for _, cmd := range c.commands {
		if commandNameMatches(cmd.Name(), next) || cmd.HasAlias(next) {
			cmd.commandCalledAs.name = next
			return cmd
		}
		if EnablePrefixMatching && cmd.hasNameOrAliasPrefix(next) {
			matches = append(matches, cmd)
		}
	}

	if len(matches) == 1 {
		return matches[0]
	}

	return nil
}

// Traverse the command tree to find the command, and parse args for
// each parent.
func (c *Command) Traverse(args []string) (*Command, []string, error) {
	flags := []string{}
	inFlag := false

	for i, arg := range args {
		switch {
		// A long flag with a space separated value
		case strings.HasPrefix(arg, "--") && !strings.Contains(arg, "="):
			// TODO: this isn't quite right, we should really check ahead for 'true' or 'false'
			inFlag = !hasNoOptDefVal(arg[2:], c.Flags())
			flags = append(flags, arg)
			continue
		// A short flag with a space separated value
		case strings.HasPrefix(arg, "-") && !strings.Contains(arg, "=") && len(arg) == 2 && !shortHasNoOptDefVal(arg[1:], c.Flags()):
			inFlag = true
			flags = append(flags, arg)
			continue
		// The value for a flag
		case inFlag:
			inFlag = false
			flags = append(flags, arg)
			continue
		// A flag without a value, or with an `=` separated value
		case isFlagArg(arg):
			flags = append(flags, arg)
			continue
		}

		cmd := c.findNext(arg)
		if cmd == nil {
			return c, args, nil
		}

		if err := c.ParseFlags(flags); err != nil {
			return nil, args, err
		}
		return cmd.Traverse(args[i+1:])
	}
	return c, args, nil
}

// SuggestionsFor provides suggestions for the typedName.
func (c *Command) SuggestionsFor(typedName string) []string {
	suggestions := []string{}
	for _, cmd := range c.commands {
		if cmd.IsAvailableCommand() {
			levenshteinDistance := ld(typedName, cmd.Name(), true)
			suggestByLevenshtein := levenshteinDistance <= c.SuggestionsMinimumDistance
			suggestByPrefix := strings.HasPrefix(strings.ToLower(cmd.Name()), strings.ToLower(typedName))
			if suggestByLevenshtein || suggestByPrefix {
				suggestions = append(suggestions, cmd.Name())
			}
			for _, explicitSuggestion := range cmd.SuggestFor {
				if strings.EqualFold(typedName, explicitSuggestion) {
					suggestions = append(suggestions, cmd.Name())
				}
			}
		}
	}
	return suggestions
}

// VisitParents visits all parents of the command and invokes fn on each parent.
func (c *Command) VisitParents(fn func(*Command)) {
	if c.HasParent() {
		fn(c.Parent())
		c.Parent().VisitParents(fn)
	}
}

// Root finds root command.
func (c *Command) Root() *Command {
	if c.HasParent() {
		return c.Parent().Root()
	}
	return c
}

// ArgsLenAtDash will return the length of c.Flags().Args at the moment
// when a -- was found during args parsing.
func (c *Command) ArgsLenAtDash() int {
	return c.Flags().ArgsLenAtDash()
}

func (c *Command) execute(a []string) (err error) {
	if c == nil {
		return fmt.Errorf("Called Execute() on a nil Command")
	}

	if len(c.Deprecated) > 0 {
		c.Printf("Command %q is deprecated, %s\n", c.Name(), c.Deprecated)
	}

	// initialize help and version flag at the last point possible to allow for user
	// overriding
	c.InitDefaultHelpFlag()
	c.InitDefaultVersionFlag()

	err = c.ParseFlags(a)
	if err != nil {
		return c.FlagErrorFunc()(c, err)
	}

	// If help is called, regardless of other flags, return we want help.
	// Also say we need help if the command isn't runnable.
	helpVal, err := c.Flags().GetBool("help")
	if err != nil {
		// should be impossible to get here as we always declare a help
		// flag in InitDefaultHelpFlag()
		c.Println("\"help\" flag declared as non-bool. Please correct your code")
		return err
	}

	if helpVal {
		return flag.ErrHelp
	}

	// for back-compat, only add version flag behavior if version is defined
	if c.Version != "" {
		versionVal, err := c.Flags().GetBool("version")
		if err != nil {
			c.Println("\"version\" flag declared as non-bool. Please correct your code")
			return err
		}
		if versionVal {
			err := tmpl(c.OutOrStdout(), c.VersionTemplate(), c)
			if err != nil {
				c.Println(err)
			}
			return err
		}
	}

	if !c.Runnable() {
		return flag.ErrHelp
	}

	c.preRun()

	defer c.postRun()

	argWoFlags := c.Flags().Args()
	if c.DisableFlagParsing {
		argWoFlags = a
	}

	if err := c.ValidateArgs(argWoFlags); err != nil {
		return err
	}

	for p := c; p != nil; p = p.Parent() {
		if p.PersistentPreRunE != nil {
			if err := p.PersistentPreRunE(c, argWoFlags); err != nil {
				return err
			}
			break
		} else if p.PersistentPreRun != nil {
			p.PersistentPreRun(c, argWoFlags)
			break
		}
	}
	if c.PreRunE != nil {
		if err := c.PreRunE(c, argWoFlags); err != nil {
			return err
		}
	} else if c.PreRun != nil {
		c.PreRun(c, argWoFlags)
	}

	if err := c.ValidateRequiredFlags(); err != nil {
		return err
	}
	if err := c.ValidateFlagGroups(); err != nil {
		return err
	}

	if c.RunE != nil {
		if err := c.RunE(c, argWoFlags); err != nil {
			return err
		}
	} else {
		c.Run(c, argWoFlags)
	}
	if c.PostRunE != nil {
		if err := c.PostRunE(c, argWoFlags); err != nil {
			return err
		}
	} else if c.PostRun != nil {
		c.PostRun(c, argWoFlags)
	}
	for p := c; p != nil; p = p.Parent() {
		if p.PersistentPostRunE != nil {
			if err := p.PersistentPostRunE(c, argWoFlags); err != nil {
				return err
			}
			break
		} else if p.PersistentPostRun != nil {
			p.PersistentPostRun(c, argWoFlags)
			break
		}
	}

	return nil
}

func (c *Command) preRun() {
	for _, x := range initializers {
		x()
	}
}

func (c *Command) postRun() {
	for _, x := range finalizers {
		x()
	}
}

// ExecuteContext is the same as Execute(), but sets the ctx on the command.
// Retrieve ctx by calling cmd.Context() inside your *Run lifecycle or ValidArgs
// functions.
func (c *Command) ExecuteContext(ctx context.Context) error {
	c.ctx = ctx
	return c.Execute()
}

// Execute uses the args (os.Args[1:] by default)
// and run through the command tree finding appropriate matches
// for commands and then corresponding flags.
func (c *Command) Execute() error {
	_, err := c.ExecuteC()
	return err
}

// ExecuteContextC is the same as ExecuteC(), but sets the ctx on the command.
// Retrieve ctx by calling cmd.Context() inside your *Run lifecycle or ValidArgs
// functions.
func (c *Command) ExecuteContextC(ctx context.Context) (*Command, error) {
	c.ctx = ctx
	return c.ExecuteC()
}

// ExecuteC executes the command.
func (c *Command) ExecuteC() (cmd *Command, err error) {
	if c.ctx == nil {
		c.ctx = context.Background()
	}

	// Regardless of what command execute is called on, run on Root only
	if c.HasParent() {
		return c.Root().ExecuteC()
	}

	// windows hook
	if preExecHookFn != nil {
		preExecHookFn(c)
	}

	// initialize help at the last point to allow for user overriding
	c.InitDefaultHelpCmd()
	// initialize completion at the last point to allow for user overriding
	c.InitDefaultCompletionCmd()

	// Now that all commands have been created, let's make sure all groups
	// are properly created also
	c.checkCommandGroups()

	args := c.args

	// Workaround FAIL with "go test -v" or "cobra.test -test.v", see #155
	if c.args == nil && filepath.Base(os.Args[0]) != "cobra.test" {
		args = os.Args[1:]
	}

	// initialize the hidden command to be used for shell completion
	c.initCompleteCmd(args)

	var flags []string
	if c.TraverseChildren {
		cmd, flags, err = c.Traverse(args)
	} else {
		cmd, flags, err = c.Find(args)
	}
	if err != nil {
		// If found parse to a subcommand and then failed, talk about the subcommand
		if cmd != nil {
			c = cmd
		}
		if !c.SilenceErrors {
			c.PrintErrln("Error:", err.Error())
			c.PrintErrf("Run '%v --help' for usage.\n", c.CommandPath())
		}
		return c, err
	}

	cmd.commandCalledAs.called = true
	if cmd.commandCalledAs.name == "" {
		cmd.commandCalledAs.name = cmd.Name()
	}

	// We have to pass global context to children command
	// if context is present on the parent command.
	if cmd.ctx == nil {
		cmd.ctx = c.ctx
	}

	err = cmd.execute(flags)
	if err != nil {
		// Always show help if requested, even if SilenceErrors is in
		// effect
		if errors.Is(err, flag.ErrHelp) {
			cmd.HelpFunc()(cmd, args)
			return cmd, nil
		}

		// If root command has SilenceErrors flagged,
		// all subcommands should respect it
		if !cmd.SilenceErrors && !c.SilenceErrors {
			c.PrintErrln("Error:", err.Error())
		}

		// If root command has SilenceUsage flagged,
		// all subcommands should respect it
		if !cmd.SilenceUsage && !c.SilenceUsage {
			c.Println(cmd.UsageString())
		}
	}
	return cmd, err
}

func (c *Command) ValidateArgs(args []string) error {
	if c.Args == nil {
		return ArbitraryArgs(c, args)
	}
	return c.Args(c, args)
}

// ValidateRequiredFlags validates all required flags are present and returns an error otherwise
func (c *Command) ValidateRequiredFlags() error {
	if c.DisableFlagParsing {
		return nil
	}

	flags := c.Flags()
	missingFlagNames := []string{}
	flags.VisitAll(func(pflag *flag.Flag) {
		requiredAnnotation, found := pflag.Annotations[BashCompOneRequiredFlag]
		if !found {
			return
		}
		if (requiredAnnotation[0] == "true") && !pflag.Changed {
			missingFlagNames = append(missingFlagNames, pflag.Name)
		}
	})

	if len(missingFlagNames) > 0 {
		return fmt.Errorf(`required flag(s) "%s" not set`, strings.Join(missingFlagNames, `", "`))
	}
	return nil
}

// checkCommandGroups checks if a command has been added to a group that does not exists.
// If so, we panic because it indicates a coding error that should be corrected.
func (c *Command) checkCommandGroups() {
	for _, sub := range c.commands {
		// if Group is not defined let the developer know right away
		if sub.GroupID != "" && !c.ContainsGroup(sub.GroupID) {
			panic(fmt.Sprintf("group id '%s' is not defined for subcommand '%s'", sub.GroupID, sub.CommandPath()))
		}

		sub.checkCommandGroups()
	}
}

// InitDefaultHelpFlag adds default help flag to c.
// It is called automatically by executing the c or by calling help and usage.
// If c already has help flag, it will do nothing.
func (c *Command) InitDefaultHelpFlag() {
	c.mergePersistentFlags()
	if c.Flags().Lookup("help") == nil {
		usage := "help for "
		if c.Name() == "" {
			usage += "this command"
		} else {
			usage += c.Name()
		}
		c.Flags().BoolP("help", "h", false, usage)
		_ = c.Flags().SetAnnotation("help", FlagSetByCobraAnnotation, []string{"true"})
	}
}

// InitDefaultVersionFlag adds default version flag to c.
// It is called automatically by executing the c.
// If c already has a version flag, it will do nothing.
// If c.Version is empty, it will do nothing.
func (c *Command) InitDefaultVersionFlag() {
	if c.Version == "" {
		return
	}

	c.mergePersistentFlags()
	if c.Flags().Lookup("version") == nil {
		usage := "version for "
		if c.Name() == "" {
			usage += "this command"
		} else {
			usage += c.Name()
		}
		if c.Flags().ShorthandLookup("v") == nil {
			c.Flags().BoolP("version", "v", false, usage)
		} else {
			c.Flags().Bool("version", false, usage)
		}
		_ = c.Flags().SetAnnotation("version", FlagSetByCobraAnnotation, []string{"true"})
	}
}

// InitDefaultHelpCmd adds default help command to c.
// It is called automatically by executing the c or by calling help and usage.
// If c already has help command or c has no subcommands, it will do nothing.
func (c *Command) InitDefaultHelpCmd() {
	if !c.HasSubCommands() {
		return
	}

	if c.helpCommand == nil {
		c.helpCommand = &Command{
			Use:   "help [command]",
			Short: "Help about any command",
			Long: `Help provides help for any command in the application.
Simply type ` + c.Name() + ` help [path to command] for full details.`,
			ValidArgsFunction: func(c *Command, args []string, toComplete string) ([]string, ShellCompDirective) {
				var completions []string
				cmd, _, e := c.Root().Find(args)
				if e != nil {
					return nil, ShellCompDirectiveNoFileComp
				}
				if cmd == nil {
					// Root help command.
					cmd = c.Root()
				}
				for _, subCmd := range cmd.Commands() {
					if subCmd.IsAvailableCommand() || subCmd == cmd.helpCommand {
						if strings.HasPrefix(subCmd.Name(), toComplete) {
							completions = append(completions, fmt.Sprintf("%s\t%s", subCmd.Name(), subCmd.Short))
						}
					}
				}
				return completions, ShellCompDirectiveNoFileComp
			},
			Run: func(c *Command, args []string) {
				cmd, _, e := c.Root().Find(args)
				if cmd == nil || e != nil {
					c.Printf("Unknown help topic %#q\n", args)
					CheckErr(c.Root().Usage())
				} else {
					cmd.InitDefaultHelpFlag()    // make possible 'help' flag to be shown
					cmd.InitDefaultVersionFlag() // make possible 'version' flag to be shown
					CheckErr(cmd.Help())
				}
			},
			GroupID: c.helpCommandGroupID,
		}
	}
	c.RemoveCommand(c.helpCommand)
	c.AddCommand(c.helpCommand)
}

// ResetCommands delete parent, subcommand and help command from c.
func (c *Command) ResetCommands() {
	c.parent = nil
	c.commands = nil
	c.helpCommand = nil
	c.parentsPflags = nil
}

// Sorts commands by their names.
type commandSorterByName []*Command

func (c commandSorterByName) Len() int           { return len(c) }
func (c commandSorterByName) Swap(i, j int)      { c[i], c[j] = c[j], c[i] }
func (c commandSorterByName) Less(i, j int) bool { return c[i].Name() < c[j].Name() }

// Commands returns a sorted slice of child commands.
func (c *Command) Commands() []*Command {
	// do not sort commands if it already sorted or sorting was disabled
	if EnableCommandSorting && !c.commandsAreSorted {
		sort.Sort(commandSorterByName(c.commands))
		c.commandsAreSorted = true
	}
	return c.commands
}

// AddCommand adds one or more commands to this parent command.
func (c *Command) AddCommand(cmds ...*Command) {
	for i, x := range cmds {
		if cmds[i] == c {
			panic("Command can't be a child of itself")
		}
		cmds[i].parent = c
		// update max lengths
		usageLen := len(x.Use)
		if usageLen > c.commandsMaxUseLen {
			c.commandsMaxUseLen = usageLen
		}
		commandPathLen := len(x.CommandPath())
		if commandPathLen > c.commandsMaxCommandPathLen {
			c.commandsMaxCommandPathLen = commandPathLen
		}
		nameLen := len(x.Name())
		if nameLen > c.commandsMaxNameLen {
			c.commandsMaxNameLen = nameLen
		}
		// If global normalization function exists, update all children
		if c.globNormFunc != nil {
			x.SetGlobalNormalizationFunc(c.globNormFunc)
		}
		c.commands = append(c.commands, x)
		c.commandsAreSorted = false
	}
}

// Groups returns a slice of child command groups.
func (c *Command) Groups() []*Group {
	return c.commandgroups
}

// AllChildCommandsHaveGroup returns if all subcommands are assigned to a group
func (c *Command) AllChildCommandsHaveGroup() bool {
	for _, sub := range c.commands {
		if (sub.IsAvailableCommand() || sub == c.helpCommand) && sub.GroupID == "" {
			return false
		}
	}
	return true
}

// ContainsGroup return if groupID exists in the list of command groups.
func (c *Command) ContainsGroup(groupID string) bool {
	for _, x := range c.commandgroups {
		if x.ID == groupID {
			return true
		}
	}
	return false
}

// AddGroup adds one or more command groups to this parent command.
func (c *Command) AddGroup(groups ...*Group) {
	c.commandgroups = append(c.commandgroups, groups...)
}

// RemoveCommand removes one or more commands from a parent command.
func (c *Command) RemoveCommand(cmds ...*Command) {
	commands := []*Command{}
main:
	for _, command := range c.commands {
		for _, cmd := range cmds {
			if command == cmd {
				command.parent = nil
				continue main
			}
		}
		commands = append(commands, command)
	}
	c.commands = commands
	// recompute all lengths
	c.commandsMaxUseLen = 0
	c.commandsMaxCommandPathLen = 0
	c.commandsMaxNameLen = 0
	for _, command := range c.commands {
		usageLen := len(command.Use)
		if usageLen > c.commandsMaxUseLen {
			c.commandsMaxUseLen = usageLen
		}
		commandPathLen := len(command.CommandPath())
		if commandPathLen > c.commandsMaxCommandPathLen {
			c.commandsMaxCommandPathLen = commandPathLen
		}
		nameLen := len(command.Name())
		if nameLen > c.commandsMaxNameLen {
			c.commandsMaxNameLen = nameLen
		}
	}
}

// Print is a convenience method to Print to the defined output, fallback to Stderr if not set.
func (c *Command) Print(i ...interface{}) {
	fmt.Fprint(c.OutOrStderr(), i...)
}

// Println is a convenience method to Println to the defined output, fallback to Stderr if not set.
func (c *Command) Println(i ...interface{}) {
	c.Print(fmt.Sprintln(i...))
}

// Printf is a convenience method to Printf to the defined output, fallback to Stderr if not set.
func (c *Command) Printf(format string, i ...interface{}) {
	c.Print(fmt.Sprintf(format, i...))
}

// PrintErr is a convenience method to Print to the defined Err output, fallback to Stderr if not set.
func (c *Command) PrintErr(i ...interface{}) {
	fmt.Fprint(c.ErrOrStderr(), i...)
}

// PrintErrln is a convenience method to Println to the defined Err output, fallback to Stderr if not set.
func (c *Command) PrintErrln(i ...interface{}) {
	c.PrintErr(fmt.Sprintln(i...))
}

// PrintErrf is a convenience method to Printf to the defined Err output, fallback to Stderr if not set.
func (c *Command) PrintErrf(format string, i ...interface{}) {
	c.PrintErr(fmt.Sprintf(format, i...))
}

// CommandPath returns the full path to this command.
func (c *Command) CommandPath() string {
	if c.HasParent() {
		return c.Parent().CommandPath() + " " + c.Name()
	}
	return c.Name()
}

// UseLine puts out the full usage for a given command (including parents).
func (c *Command) UseLine() string {
	var useline string
	if c.HasParent() {
		useline = c.parent.CommandPath() + " " + c.Use
	} else {
		useline = c.Use
	}
	if c.DisableFlagsInUseLine {
		return useline
	}
	if c.HasAvailableFlags() && !strings.Contains(useline, "[flags]") {
		useline += " [flags]"
	}
	return useline
}

// DebugFlags used to determine which flags have been assigned to which commands
// and which persist.
func (c *Command) DebugFlags() {
	c.Println("DebugFlags called on", c.Name())
	var debugflags func(*Command)

	debugflags = func(x *Command) {
		if x.HasFlags() || x.HasPersistentFlags() {
			c.Println(x.Name())
		}
		if x.HasFlags() {
			x.flags.VisitAll(func(f *flag.Flag) {
				if x.HasPersistentFlags() && x.persistentFlag(f.Name) != nil {
					c.Println("  -"+f.Shorthand+",", "--"+f.Name, "["+f.DefValue+"]", "", f.Value, "  [LP]")
				} else {
					c.Println("  -"+f.Shorthand+",", "--"+f.Name, "["+f.DefValue+"]", "", f.Value, "  [L]")
				}
			})
		}
		if x.HasPersistentFlags() {
			x.pflags.VisitAll(func(f *flag.Flag) {
				if x.HasFlags() {
					if x.flags.Lookup(f.Name) == nil {
						c.Println("  -"+f.Shorthand+",", "--"+f.Name, "["+f.DefValue+"]", "", f.Value, "  [P]")
					}
				} else {
					c.Println("  -"+f.Shorthand+",", "--"+f.Name, "["+f.DefValue+"]", "", f.Value, "  [P]")
				}
			})
		}
		c.Println(x.flagErrorBuf)
		if x.HasSubCommands() {
			for _, y := range x.commands {
				debugflags(y)
			}
		}
	}

	debugflags(c)
}

// Name returns the command's name: the first word in the use line.
func (c *Command) Name() string {
	name := c.Use
	i := strings.Index(name, " ")
	if i >= 0 {
		name = name[:i]
	}
	return name
}

// HasAlias determines if a given string is an alias of the command.
func (c *Command) HasAlias(s string) bool {
	for _, a := range c.Aliases {
		if commandNameMatches(a, s) {
			return true
		}
	}
	return false
}

// CalledAs returns the command name or alias that was used to invoke
// this command or an empty string if the command has not been called.
func (c *Command) CalledAs() string {
	if c.commandCalledAs.called {
		return c.commandCalledAs.name
	}
	return ""
}

// hasNameOrAliasPrefix returns true if the Name or any of aliases start
// with prefix
func (c *Command) hasNameOrAliasPrefix(prefix string) bool {
	if strings.HasPrefix(c.Name(), prefix) {
		c.commandCalledAs.name = c.Name()
		return true
	}
	for _, alias := range c.Aliases {
		if strings.HasPrefix(alias, prefix) {
			c.commandCalledAs.name = alias
			return true
		}
	}
	return false
}

// NameAndAliases returns a list of the command name and all aliases
func (c *Command) NameAndAliases() string {
	return strings.Join(append([]string{c.Name()}, c.Aliases...), ", ")
}

// HasExample determines if the command has example.
func (c *Command) HasExample() bool {
	return len(c.Example) > 0
}

// Runnable determines if the command is itself runnable.
func (c *Command) Runnable() bool {
	return c.Run != nil || c.RunE != nil
}

// HasSubCommands determines if the command has children commands.
func (c *Command) HasSubCommands() bool {
	return len(c.commands) > 0
}

// IsAvailableCommand determines if a command is available as a non-help command
// (this includes all non deprecated/hidden commands).
func (c *Command) IsAvailableCommand() bool {
	if len(c.Deprecated) != 0 || c.Hidden {
		return false
	}

	if c.HasParent() && c.Parent().helpCommand == c {
		return false
	}

	if c.Runnable() || c.HasAvailableSubCommands() {
		return true
	}

	return false
}

// IsAdditionalHelpTopicCommand determines if a command is an additional
// help topic command; additional help topic command is determined by the
// fact that it is NOT runnable/hidden/deprecated, and has no sub commands that
// are runnable/hidden/deprecated.
// Concrete example: https://github.com/spf13/cobra/issues/393#issuecomment-282741924.
func (c *Command) IsAdditionalHelpTopicCommand() bool {
	// if a command is runnable, deprecated, or hidden it is not a 'help' command
	if c.Runnable() || len(c.Deprecated) != 0 || c.Hidden {
		return false
	}

	// if any non-help sub commands are found, the command is not a 'help' command
	for _, sub := range c.commands {
		if !sub.IsAdditionalHelpTopicCommand() {
			return false
		}
	}

	// the command either has no sub commands, or no non-help sub commands
	return true
}

// HasHelpSubCommands determines if a command has any available 'help' sub commands
// that need to be shown in the usage/help default template under 'additional help
// topics'.
func (c *Command) HasHelpSubCommands() bool {
	// return true on the first found available 'help' sub command
	for _, sub := range c.commands {
		if sub.IsAdditionalHelpTopicCommand() {
			return true
		}
	}

	// the command either has no sub commands, or no available 'help' sub commands
	return false
}

// HasAvailableSubCommands determines if a command has available sub commands that
// need to be shown in the usage/help default template under 'available commands'.
func (c *Command) HasAvailableSubCommands() bool {
	// return true on the first found available (non deprecated/help/hidden)
	// sub command
	for _, sub := range c.commands {
		if sub.IsAvailableCommand() {
			return true
		}
	}

	// the command either has no sub commands, or no available (non deprecated/help/hidden)
	// sub commands
	return false
}

// HasParent determines if the command is a child command.
func (c *Command) HasParent() bool {
	return c.parent != nil
}

// GlobalNormalizationFunc returns the global normalization function or nil if it doesn't exist.
func (c *Command) GlobalNormalizationFunc() func(f *flag.FlagSet, name string) flag.NormalizedName {
	return c.globNormFunc
}

// Flags returns the complete FlagSet that applies
// to this command (local and persistent declared here and by all parents).
func (c *Command) Flags() *flag.FlagSet {
	if c.flags == nil {
		c.flags = flag.NewFlagSet(c.Name(), flag.ContinueOnError)
		if c.flagErrorBuf == nil {
			c.flagErrorBuf = new(bytes.Buffer)
		}
		c.flags.SetOutput(c.flagErrorBuf)
	}

	return c.flags
}

// LocalNonPersistentFlags are flags specific to this command which will NOT persist to subcommands.
func (c *Command) LocalNonPersistentFlags() *flag.FlagSet {
	persistentFlags := c.PersistentFlags()

	out := flag.NewFlagSet(c.Name(), flag.ContinueOnError)
	c.LocalFlags().VisitAll(func(f *flag.Flag) {
		if persistentFlags.Lookup(f.Name) == nil {
			out.AddFlag(f)
		}
	})
	return out
}

// LocalFlags returns the local FlagSet specifically set in the current command.
func (c *Command) LocalFlags() *flag.FlagSet {
	c.mergePersistentFlags()

	if c.lflags == nil {
		c.lflags = flag.NewFlagSet(c.Name(), flag.ContinueOnError)
		if c.flagErrorBuf == nil {
			c.flagErrorBuf = new(bytes.Buffer)
		}
		c.lflags.SetOutput(c.flagErrorBuf)
	}
	c.lflags.SortFlags = c.Flags().SortFlags
	if c.globNormFunc != nil {
		c.lflags.SetNormalizeFunc(c.globNormFunc)
	}

	addToLocal := func(f *flag.Flag) {
		// Add the flag if it is not a parent PFlag, or it shadows a parent PFlag
		if c.lflags.Lookup(f.Name) == nil && f != c.parentsPflags.Lookup(f.Name) {
			c.lflags.AddFlag(f)
		}
	}
	c.Flags().VisitAll(addToLocal)
	c.PersistentFlags().VisitAll(addToLocal)
	return c.lflags
}

// InheritedFlags returns all flags which were inherited from parent commands.
func (c *Command) InheritedFlags() *flag.FlagSet {
	c.mergePersistentFlags()

	if c.iflags == nil {
		c.iflags = flag.NewFlagSet(c.Name(), flag.ContinueOnError)
		if c.flagErrorBuf == nil {
			c.flagErrorBuf = new(bytes.Buffer)
		}
		c.iflags.SetOutput(c.flagErrorBuf)
	}

	local := c.LocalFlags()
	if c.globNormFunc != nil {
		c.iflags.SetNormalizeFunc(c.globNormFunc)
	}

	c.parentsPflags.VisitAll(func(f *flag.Flag) {
		if c.iflags.Lookup(f.Name) == nil && local.Lookup(f.Name) == nil {
			c.iflags.AddFlag(f)
		}
	})
	return c.iflags
}

// NonInheritedFlags returns all flags which were not inherited from parent commands.
func (c *Command) NonInheritedFlags() *flag.FlagSet {
	return c.LocalFlags()
}

// PersistentFlags returns the persistent FlagSet specifically set in the current command.
func (c *Command) PersistentFlags() *flag.FlagSet {
	if c.pflags == nil {
		c.pflags = flag.NewFlagSet(c.Name(), flag.ContinueOnError)
		if c.flagErrorBuf == nil {
			c.flagErrorBuf = new(bytes.Buffer)
		}
		c.pflags.SetOutput(c.flagErrorBuf)
	}
	return c.pflags
}

// ResetFlags deletes all flags from command.
func (c *Command) ResetFlags() {
	c.flagErrorBuf = new(bytes.Buffer)
	c.flagErrorBuf.Reset()
	c.flags = flag.NewFlagSet(c.Name(), flag.ContinueOnError)
	c.flags.SetOutput(c.flagErrorBuf)
	c.pflags = flag.NewFlagSet(c.Name(), flag.ContinueOnError)
	c.pflags.SetOutput(c.flagErrorBuf)

	c.lflags = nil
	c.iflags = nil
	c.parentsPflags = nil
}

// HasFlags checks if the command contains any flags (local plus persistent from the entire structure).
func (c *Command) HasFlags() bool {
	return c.Flags().HasFlags()
}

// HasPersistentFlags checks if the command contains persistent flags.
func (c *Command) HasPersistentFlags() bool {
	return c.PersistentFlags().HasFlags()
}

// HasLocalFlags checks if the command has flags specifically declared locally.
func (c *Command) HasLocalFlags() bool {
	return c.LocalFlags().HasFlags()
}

// HasInheritedFlags checks if the command has flags inherited from its parent command.
func (c *Command) HasInheritedFlags() bool {
	return c.InheritedFlags().HasFlags()
}

// HasAvailableFlags checks if the command contains any flags (local plus persistent from the entire
// structure) which are not hidden or deprecated.
func (c *Command) HasAvailableFlags() bool {
	return c.Flags().HasAvailableFlags()
}

// HasAvailablePersistentFlags checks if the command contains persistent flags which are not hidden or deprecated.
func (c *Command) HasAvailablePersistentFlags() bool {
	return c.PersistentFlags().HasAvailableFlags()
}

// HasAvailableLocalFlags checks if the command has flags specifically declared locally which are not hidden
// or deprecated.
func (c *Command) HasAvailableLocalFlags() bool {
	return c.LocalFlags().HasAvailableFlags()
}

// HasAvailableInheritedFlags checks if the command has flags inherited from its parent command which are
// not hidden or deprecated.
func (c *Command) HasAvailableInheritedFlags() bool {
	return c.InheritedFlags().HasAvailableFlags()
}

// Flag climbs up the command tree looking for matching flag.
func (c *Command) Flag(name string) (flag *flag.Flag) {
	flag = c.Flags().Lookup(name)

	if flag == nil {
		flag = c.persistentFlag(name)
	}

	return
}

// Recursively find matching persistent flag.
func (c *Command) persistentFlag(name string) (flag *flag.Flag) {
	if c.HasPersistentFlags() {
		flag = c.PersistentFlags().Lookup(name)
	}

	if flag == nil {
		c.updateParentsPflags()
		flag = c.parentsPflags.Lookup(name)
	}
	return
}

// ParseFlags parses persistent flag tree and local flags.
func (c *Command) ParseFlags(args []string) error {
	if c.DisableFlagParsing {
		return nil
	}

	if c.flagErrorBuf == nil {
		c.flagErrorBuf = new(bytes.Buffer)
	}
	beforeErrorBufLen := c.flagErrorBuf.Len()
	c.mergePersistentFlags()

	// do it here after merging all flags and just before parse
	c.Flags().ParseErrorsWhitelist = flag.ParseErrorsWhitelist(c.FParseErrWhitelist)

	err := c.Flags().Parse(args)
	// Print warnings if they occurred (e.g. deprecated flag messages).
	if c.flagErrorBuf.Len()-beforeErrorBufLen > 0 && err == nil {
		c.Print(c.flagErrorBuf.String())
	}

	return err
}

// Parent returns a commands parent command.
func (c *Command) Parent() *Command {
	return c.parent
}

// mergePersistentFlags merges c.PersistentFlags() to c.Flags()
// and adds missing persistent flags of all parents.
func (c *Command) mergePersistentFlags() {
	c.updateParentsPflags()
	c.Flags().AddFlagSet(c.PersistentFlags())
	c.Flags().AddFlagSet(c.parentsPflags)
}

// updateParentsPflags updates c.parentsPflags by adding
// new persistent flags of all parents.
// If c.parentsPflags == nil, it makes new.
func (c *Command) updateParentsPflags() {
	if c.parentsPflags == nil {
		c.parentsPflags = flag.NewFlagSet(c.Name(), flag.ContinueOnError)
		c.parentsPflags.SetOutput(c.flagErrorBuf)
		c.parentsPflags.SortFlags = false
	}

	if c.globNormFunc != nil {
		c.parentsPflags.SetNormalizeFunc(c.globNormFunc)
	}

	c.Root().PersistentFlags().AddFlagSet(flag.CommandLine)

	c.VisitParents(func(parent *Command) {
		c.parentsPflags.AddFlagSet(parent.PersistentFlags())
	})
}

// commandNameMatches checks if two command names are equal
// taking into account case sensitivity according to
// EnableCaseInsensitive global configuration.
func commandNameMatches(s string, t string) bool {
	if EnableCaseInsensitive {
		return strings.EqualFold(s, t)
	}

	return s == t
}
 07070100000B26000081A4000000000000000000000001645E367C000002B1000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/command_notwin.go   // Copyright 2013-2023 The Cobra Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

//go:build !windows
// +build !windows

package cobra

var preExecHookFn func(*Command)
   07070100000B27000081A4000000000000000000000001645E367C0000041D000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/command_win.go  // Copyright 2013-2023 The Cobra Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

//go:build windows
// +build windows

package cobra

import (
	"fmt"
	"os"
	"time"

	"github.com/inconshreveable/mousetrap"
)

var preExecHookFn = preExecHook

func preExecHook(c *Command) {
	if MousetrapHelpText != "" && mousetrap.StartedByExplorer() {
		c.Print(MousetrapHelpText)
		if MousetrapDisplayDuration > 0 {
			time.Sleep(MousetrapDisplayDuration)
		} else {
			c.Println("Press return to continue...")
			fmt.Scanln()
		}
		os.Exit(1)
	}
}
   07070100000B28000081A4000000000000000000000001645E367C0000818B000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/completions.go  // Copyright 2013-2023 The Cobra Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package cobra

import (
	"fmt"
	"os"
	"strings"
	"sync"

	"github.com/spf13/pflag"
)

const (
	// ShellCompRequestCmd is the name of the hidden command that is used to request
	// completion results from the program.  It is used by the shell completion scripts.
	ShellCompRequestCmd = "__complete"
	// ShellCompNoDescRequestCmd is the name of the hidden command that is used to request
	// completion results without their description.  It is used by the shell completion scripts.
	ShellCompNoDescRequestCmd = "__completeNoDesc"
)

// Global map of flag completion functions. Make sure to use flagCompletionMutex before you try to read and write from it.
var flagCompletionFunctions = map[*pflag.Flag]func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective){}

// lock for reading and writing from flagCompletionFunctions
var flagCompletionMutex = &sync.RWMutex{}

// ShellCompDirective is a bit map representing the different behaviors the shell
// can be instructed to have once completions have been provided.
type ShellCompDirective int

type flagCompError struct {
	subCommand string
	flagName   string
}

func (e *flagCompError) Error() string {
	return "Subcommand '" + e.subCommand + "' does not support flag '" + e.flagName + "'"
}

const (
	// ShellCompDirectiveError indicates an error occurred and completions should be ignored.
	ShellCompDirectiveError ShellCompDirective = 1 << iota

	// ShellCompDirectiveNoSpace indicates that the shell should not add a space
	// after the completion even if there is a single completion provided.
	ShellCompDirectiveNoSpace

	// ShellCompDirectiveNoFileComp indicates that the shell should not provide
	// file completion even when no completion is provided.
	ShellCompDirectiveNoFileComp

	// ShellCompDirectiveFilterFileExt indicates that the provided completions
	// should be used as file extension filters.
	// For flags, using Command.MarkFlagFilename() and Command.MarkPersistentFlagFilename()
	// is a shortcut to using this directive explicitly.  The BashCompFilenameExt
	// annotation can also be used to obtain the same behavior for flags.
	ShellCompDirectiveFilterFileExt

	// ShellCompDirectiveFilterDirs indicates that only directory names should
	// be provided in file completion.  To request directory names within another
	// directory, the returned completions should specify the directory within
	// which to search.  The BashCompSubdirsInDir annotation can be used to
	// obtain the same behavior but only for flags.
	ShellCompDirectiveFilterDirs

	// ShellCompDirectiveKeepOrder indicates that the shell should preserve the order
	// in which the completions are provided
	ShellCompDirectiveKeepOrder

	// ===========================================================================

	// All directives using iota should be above this one.
	// For internal use.
	shellCompDirectiveMaxValue

	// ShellCompDirectiveDefault indicates to let the shell perform its default
	// behavior after completions have been provided.
	// This one must be last to avoid messing up the iota count.
	ShellCompDirectiveDefault ShellCompDirective = 0
)

const (
	// Constants for the completion command
	compCmdName              = "completion"
	compCmdNoDescFlagName    = "no-descriptions"
	compCmdNoDescFlagDesc    = "disable completion descriptions"
	compCmdNoDescFlagDefault = false
)

// CompletionOptions are the options to control shell completion
type CompletionOptions struct {
	// DisableDefaultCmd prevents Cobra from creating a default 'completion' command
	DisableDefaultCmd bool
	// DisableNoDescFlag prevents Cobra from creating the '--no-descriptions' flag
	// for shells that support completion descriptions
	DisableNoDescFlag bool
	// DisableDescriptions turns off all completion descriptions for shells
	// that support them
	DisableDescriptions bool
	// HiddenDefaultCmd makes the default 'completion' command hidden
	HiddenDefaultCmd bool
}

// NoFileCompletions can be used to disable file completion for commands that should
// not trigger file completions.
func NoFileCompletions(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective) {
	return nil, ShellCompDirectiveNoFileComp
}

// FixedCompletions can be used to create a completion function which always
// returns the same results.
func FixedCompletions(choices []string, directive ShellCompDirective) func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective) {
	return func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective) {
		return choices, directive
	}
}

// RegisterFlagCompletionFunc should be called to register a function to provide completion for a flag.
func (c *Command) RegisterFlagCompletionFunc(flagName string, f func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective)) error {
	flag := c.Flag(flagName)
	if flag == nil {
		return fmt.Errorf("RegisterFlagCompletionFunc: flag '%s' does not exist", flagName)
	}
	flagCompletionMutex.Lock()
	defer flagCompletionMutex.Unlock()

	if _, exists := flagCompletionFunctions[flag]; exists {
		return fmt.Errorf("RegisterFlagCompletionFunc: flag '%s' already registered", flagName)
	}
	flagCompletionFunctions[flag] = f
	return nil
}

// Returns a string listing the different directive enabled in the specified parameter
func (d ShellCompDirective) string() string {
	var directives []string
	if d&ShellCompDirectiveError != 0 {
		directives = append(directives, "ShellCompDirectiveError")
	}
	if d&ShellCompDirectiveNoSpace != 0 {
		directives = append(directives, "ShellCompDirectiveNoSpace")
	}
	if d&ShellCompDirectiveNoFileComp != 0 {
		directives = append(directives, "ShellCompDirectiveNoFileComp")
	}
	if d&ShellCompDirectiveFilterFileExt != 0 {
		directives = append(directives, "ShellCompDirectiveFilterFileExt")
	}
	if d&ShellCompDirectiveFilterDirs != 0 {
		directives = append(directives, "ShellCompDirectiveFilterDirs")
	}
	if d&ShellCompDirectiveKeepOrder != 0 {
		directives = append(directives, "ShellCompDirectiveKeepOrder")
	}
	if len(directives) == 0 {
		directives = append(directives, "ShellCompDirectiveDefault")
	}

	if d >= shellCompDirectiveMaxValue {
		return fmt.Sprintf("ERROR: unexpected ShellCompDirective value: %d", d)
	}
	return strings.Join(directives, ", ")
}

// initCompleteCmd adds a special hidden command that can be used to request custom completions.
func (c *Command) initCompleteCmd(args []string) {
	completeCmd := &Command{
		Use:                   fmt.Sprintf("%s [command-line]", ShellCompRequestCmd),
		Aliases:               []string{ShellCompNoDescRequestCmd},
		DisableFlagsInUseLine: true,
		Hidden:                true,
		DisableFlagParsing:    true,
		Args:                  MinimumNArgs(1),
		Short:                 "Request shell completion choices for the specified command-line",
		Long: fmt.Sprintf("%[2]s is a special command that is used by the shell completion logic\n%[1]s",
			"to request completion choices for the specified command-line.", ShellCompRequestCmd),
		Run: func(cmd *Command, args []string) {
			finalCmd, completions, directive, err := cmd.getCompletions(args)
			if err != nil {
				CompErrorln(err.Error())
				// Keep going for multiple reasons:
				// 1- There could be some valid completions even though there was an error
				// 2- Even without completions, we need to print the directive
			}

			noDescriptions := (cmd.CalledAs() == ShellCompNoDescRequestCmd)
			for _, comp := range completions {
				if GetActiveHelpConfig(finalCmd) == activeHelpGlobalDisable {
					// Remove all activeHelp entries in this case
					if strings.HasPrefix(comp, activeHelpMarker) {
						continue
					}
				}
				if noDescriptions {
					// Remove any description that may be included following a tab character.
					comp = strings.Split(comp, "\t")[0]
				}

				// Make sure we only write the first line to the output.
				// This is needed if a description contains a linebreak.
				// Otherwise the shell scripts will interpret the other lines as new flags
				// and could therefore provide a wrong completion.
				comp = strings.Split(comp, "\n")[0]

				// Finally trim the completion.  This is especially important to get rid
				// of a trailing tab when there are no description following it.
				// For example, a sub-command without a description should not be completed
				// with a tab at the end (or else zsh will show a -- following it
				// although there is no description).
				comp = strings.TrimSpace(comp)

				// Print each possible completion to stdout for the completion script to consume.
				fmt.Fprintln(finalCmd.OutOrStdout(), comp)
			}

			// As the last printout, print the completion directive for the completion script to parse.
			// The directive integer must be that last character following a single colon (:).
			// The completion script expects :<directive>
			fmt.Fprintf(finalCmd.OutOrStdout(), ":%d\n", directive)

			// Print some helpful info to stderr for the user to understand.
			// Output from stderr must be ignored by the completion script.
			fmt.Fprintf(finalCmd.ErrOrStderr(), "Completion ended with directive: %s\n", directive.string())
		},
	}
	c.AddCommand(completeCmd)
	subCmd, _, err := c.Find(args)
	if err != nil || subCmd.Name() != ShellCompRequestCmd {
		// Only create this special command if it is actually being called.
		// This reduces possible side-effects of creating such a command;
		// for example, having this command would cause problems to a
		// cobra program that only consists of the root command, since this
		// command would cause the root command to suddenly have a subcommand.
		c.RemoveCommand(completeCmd)
	}
}

func (c *Command) getCompletions(args []string) (*Command, []string, ShellCompDirective, error) {
	// The last argument, which is not completely typed by the user,
	// should not be part of the list of arguments
	toComplete := args[len(args)-1]
	trimmedArgs := args[:len(args)-1]

	var finalCmd *Command
	var finalArgs []string
	var err error
	// Find the real command for which completion must be performed
	// check if we need to traverse here to parse local flags on parent commands
	if c.Root().TraverseChildren {
		finalCmd, finalArgs, err = c.Root().Traverse(trimmedArgs)
	} else {
		// For Root commands that don't specify any value for their Args fields, when we call
		// Find(), if those Root commands don't have any sub-commands, they will accept arguments.
		// However, because we have added the __complete sub-command in the current code path, the
		// call to Find() -> legacyArgs() will return an error if there are any arguments.
		// To avoid this, we first remove the __complete command to get back to having no sub-commands.
		rootCmd := c.Root()
		if len(rootCmd.Commands()) == 1 {
			rootCmd.RemoveCommand(c)
		}

		finalCmd, finalArgs, err = rootCmd.Find(trimmedArgs)
	}
	if err != nil {
		// Unable to find the real command. E.g., <program> someInvalidCmd <TAB>
		return c, []string{}, ShellCompDirectiveDefault, fmt.Errorf("Unable to find a command for arguments: %v", trimmedArgs)
	}
	finalCmd.ctx = c.ctx

	// These flags are normally added when `execute()` is called on `finalCmd`,
	// however, when doing completion, we don't call `finalCmd.execute()`.
	// Let's add the --help and --version flag ourselves.
	finalCmd.InitDefaultHelpFlag()
	finalCmd.InitDefaultVersionFlag()

	// Check if we are doing flag value completion before parsing the flags.
	// This is important because if we are completing a flag value, we need to also
	// remove the flag name argument from the list of finalArgs or else the parsing
	// could fail due to an invalid value (incomplete) for the flag.
	flag, finalArgs, toComplete, flagErr := checkIfFlagCompletion(finalCmd, finalArgs, toComplete)

	// Check if interspersed is false or -- was set on a previous arg.
	// This works by counting the arguments. Normally -- is not counted as arg but
	// if -- was already set or interspersed is false and there is already one arg then
	// the extra added -- is counted as arg.
	flagCompletion := true
	_ = finalCmd.ParseFlags(append(finalArgs, "--"))
	newArgCount := finalCmd.Flags().NArg()

	// Parse the flags early so we can check if required flags are set
	if err = finalCmd.ParseFlags(finalArgs); err != nil {
		return finalCmd, []string{}, ShellCompDirectiveDefault, fmt.Errorf("Error while parsing flags from args %v: %s", finalArgs, err.Error())
	}

	realArgCount := finalCmd.Flags().NArg()
	if newArgCount > realArgCount {
		// don't do flag completion (see above)
		flagCompletion = false
	}
	// Error while attempting to parse flags
	if flagErr != nil {
		// If error type is flagCompError and we don't want flagCompletion we should ignore the error
		if _, ok := flagErr.(*flagCompError); !(ok && !flagCompletion) {
			return finalCmd, []string{}, ShellCompDirectiveDefault, flagErr
		}
	}

	// Look for the --help or --version flags.  If they are present,
	// there should be no further completions.
	if helpOrVersionFlagPresent(finalCmd) {
		return finalCmd, []string{}, ShellCompDirectiveNoFileComp, nil
	}

	// We only remove the flags from the arguments if DisableFlagParsing is not set.
	// This is important for commands which have requested to do their own flag completion.
	if !finalCmd.DisableFlagParsing {
		finalArgs = finalCmd.Flags().Args()
	}

	if flag != nil && flagCompletion {
		// Check if we are completing a flag value subject to annotations
		if validExts, present := flag.Annotations[BashCompFilenameExt]; present {
			if len(validExts) != 0 {
				// File completion filtered by extensions
				return finalCmd, validExts, ShellCompDirectiveFilterFileExt, nil
			}

			// The annotation requests simple file completion.  There is no reason to do
			// that since it is the default behavior anyway.  Let's ignore this annotation
			// in case the program also registered a completion function for this flag.
			// Even though it is a mistake on the program's side, let's be nice when we can.
		}

		if subDir, present := flag.Annotations[BashCompSubdirsInDir]; present {
			if len(subDir) == 1 {
				// Directory completion from within a directory
				return finalCmd, subDir, ShellCompDirectiveFilterDirs, nil
			}
			// Directory completion
			return finalCmd, []string{}, ShellCompDirectiveFilterDirs, nil
		}
	}

	var completions []string
	var directive ShellCompDirective

	// Enforce flag groups before doing flag completions
	finalCmd.enforceFlagGroupsForCompletion()

	// Note that we want to perform flagname completion even if finalCmd.DisableFlagParsing==true;
	// doing this allows for completion of persistent flag names even for commands that disable flag parsing.
	//
	// When doing completion of a flag name, as soon as an argument starts with
	// a '-' we know it is a flag.  We cannot use isFlagArg() here as it requires
	// the flag name to be complete
	if flag == nil && len(toComplete) > 0 && toComplete[0] == '-' && !strings.Contains(toComplete, "=") && flagCompletion {
		// First check for required flags
		completions = completeRequireFlags(finalCmd, toComplete)

		// If we have not found any required flags, only then can we show regular flags
		if len(completions) == 0 {
			doCompleteFlags := func(flag *pflag.Flag) {
				if !flag.Changed ||
					strings.Contains(flag.Value.Type(), "Slice") ||
					strings.Contains(flag.Value.Type(), "Array") {
					// If the flag is not already present, or if it can be specified multiple times (Array or Slice)
					// we suggest it as a completion
					completions = append(completions, getFlagNameCompletions(flag, toComplete)...)
				}
			}

			// We cannot use finalCmd.Flags() because we may not have called ParsedFlags() for commands
			// that have set DisableFlagParsing; it is ParseFlags() that merges the inherited and
			// non-inherited flags.
			finalCmd.InheritedFlags().VisitAll(func(flag *pflag.Flag) {
				doCompleteFlags(flag)
			})
			finalCmd.NonInheritedFlags().VisitAll(func(flag *pflag.Flag) {
				doCompleteFlags(flag)
			})
		}

		directive = ShellCompDirectiveNoFileComp
		if len(completions) == 1 && strings.HasSuffix(completions[0], "=") {
			// If there is a single completion, the shell usually adds a space
			// after the completion.  We don't want that if the flag ends with an =
			directive = ShellCompDirectiveNoSpace
		}

		if !finalCmd.DisableFlagParsing {
			// If DisableFlagParsing==false, we have completed the flags as known by Cobra;
			// we can return what we found.
			// If DisableFlagParsing==true, Cobra may not be aware of all flags, so we
			// let the logic continue to see if ValidArgsFunction needs to be called.
			return finalCmd, completions, directive, nil
		}
	} else {
		directive = ShellCompDirectiveDefault
		if flag == nil {
			foundLocalNonPersistentFlag := false
			// If TraverseChildren is true on the root command we don't check for
			// local flags because we can use a local flag on a parent command
			if !finalCmd.Root().TraverseChildren {
				// Check if there are any local, non-persistent flags on the command-line
				localNonPersistentFlags := finalCmd.LocalNonPersistentFlags()
				finalCmd.NonInheritedFlags().VisitAll(func(flag *pflag.Flag) {
					if localNonPersistentFlags.Lookup(flag.Name) != nil && flag.Changed {
						foundLocalNonPersistentFlag = true
					}
				})
			}

			// Complete subcommand names, including the help command
			if len(finalArgs) == 0 && !foundLocalNonPersistentFlag {
				// We only complete sub-commands if:
				// - there are no arguments on the command-line and
				// - there are no local, non-persistent flags on the command-line or TraverseChildren is true
				for _, subCmd := range finalCmd.Commands() {
					if subCmd.IsAvailableCommand() || subCmd == finalCmd.helpCommand {
						if strings.HasPrefix(subCmd.Name(), toComplete) {
							completions = append(completions, fmt.Sprintf("%s\t%s", subCmd.Name(), subCmd.Short))
						}
						directive = ShellCompDirectiveNoFileComp
					}
				}
			}

			// Complete required flags even without the '-' prefix
			completions = append(completions, completeRequireFlags(finalCmd, toComplete)...)

			// Always complete ValidArgs, even if we are completing a subcommand name.
			// This is for commands that have both subcommands and ValidArgs.
			if len(finalCmd.ValidArgs) > 0 {
				if len(finalArgs) == 0 {
					// ValidArgs are only for the first argument
					for _, validArg := range finalCmd.ValidArgs {
						if strings.HasPrefix(validArg, toComplete) {
							completions = append(completions, validArg)
						}
					}
					directive = ShellCompDirectiveNoFileComp

					// If no completions were found within commands or ValidArgs,
					// see if there are any ArgAliases that should be completed.
					if len(completions) == 0 {
						for _, argAlias := range finalCmd.ArgAliases {
							if strings.HasPrefix(argAlias, toComplete) {
								completions = append(completions, argAlias)
							}
						}
					}
				}

				// If there are ValidArgs specified (even if they don't match), we stop completion.
				// Only one of ValidArgs or ValidArgsFunction can be used for a single command.
				return finalCmd, completions, directive, nil
			}

			// Let the logic continue so as to add any ValidArgsFunction completions,
			// even if we already found sub-commands.
			// This is for commands that have subcommands but also specify a ValidArgsFunction.
		}
	}

	// Find the completion function for the flag or command
	var completionFn func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective)
	if flag != nil && flagCompletion {
		flagCompletionMutex.RLock()
		completionFn = flagCompletionFunctions[flag]
		flagCompletionMutex.RUnlock()
	} else {
		completionFn = finalCmd.ValidArgsFunction
	}
	if completionFn != nil {
		// Go custom completion defined for this flag or command.
		// Call the registered completion function to get the completions.
		var comps []string
		comps, directive = completionFn(finalCmd, finalArgs, toComplete)
		completions = append(completions, comps...)
	}

	return finalCmd, completions, directive, nil
}

func helpOrVersionFlagPresent(cmd *Command) bool {
	if versionFlag := cmd.Flags().Lookup("version"); versionFlag != nil &&
		len(versionFlag.Annotations[FlagSetByCobraAnnotation]) > 0 && versionFlag.Changed {
		return true
	}
	if helpFlag := cmd.Flags().Lookup("help"); helpFlag != nil &&
		len(helpFlag.Annotations[FlagSetByCobraAnnotation]) > 0 && helpFlag.Changed {
		return true
	}
	return false
}

func getFlagNameCompletions(flag *pflag.Flag, toComplete string) []string {
	if nonCompletableFlag(flag) {
		return []string{}
	}

	var completions []string
	flagName := "--" + flag.Name
	if strings.HasPrefix(flagName, toComplete) {
		// Flag without the =
		completions = append(completions, fmt.Sprintf("%s\t%s", flagName, flag.Usage))

		// Why suggest both long forms: --flag and --flag= ?
		// This forces the user to *always* have to type either an = or a space after the flag name.
		// Let's be nice and avoid making users have to do that.
		// Since boolean flags and shortname flags don't show the = form, let's go that route and never show it.
		// The = form will still work, we just won't suggest it.
		// This also makes the list of suggested flags shorter as we avoid all the = forms.
		//
		// if len(flag.NoOptDefVal) == 0 {
		// 	// Flag requires a value, so it can be suffixed with =
		// 	flagName += "="
		// 	completions = append(completions, fmt.Sprintf("%s\t%s", flagName, flag.Usage))
		// }
	}

	flagName = "-" + flag.Shorthand
	if len(flag.Shorthand) > 0 && strings.HasPrefix(flagName, toComplete) {
		completions = append(completions, fmt.Sprintf("%s\t%s", flagName, flag.Usage))
	}

	return completions
}

func completeRequireFlags(finalCmd *Command, toComplete string) []string {
	var completions []string

	doCompleteRequiredFlags := func(flag *pflag.Flag) {
		if _, present := flag.Annotations[BashCompOneRequiredFlag]; present {
			if !flag.Changed {
				// If the flag is not already present, we suggest it as a completion
				completions = append(completions, getFlagNameCompletions(flag, toComplete)...)
			}
		}
	}

	// We cannot use finalCmd.Flags() because we may not have called ParsedFlags() for commands
	// that have set DisableFlagParsing; it is ParseFlags() that merges the inherited and
	// non-inherited flags.
	finalCmd.InheritedFlags().VisitAll(func(flag *pflag.Flag) {
		doCompleteRequiredFlags(flag)
	})
	finalCmd.NonInheritedFlags().VisitAll(func(flag *pflag.Flag) {
		doCompleteRequiredFlags(flag)
	})

	return completions
}

func checkIfFlagCompletion(finalCmd *Command, args []string, lastArg string) (*pflag.Flag, []string, string, error) {
	if finalCmd.DisableFlagParsing {
		// We only do flag completion if we are allowed to parse flags
		// This is important for commands which have requested to do their own flag completion.
		return nil, args, lastArg, nil
	}

	var flagName string
	trimmedArgs := args
	flagWithEqual := false
	orgLastArg := lastArg

	// When doing completion of a flag name, as soon as an argument starts with
	// a '-' we know it is a flag.  We cannot use isFlagArg() here as that function
	// requires the flag name to be complete
	if len(lastArg) > 0 && lastArg[0] == '-' {
		if index := strings.Index(lastArg, "="); index >= 0 {
			// Flag with an =
			if strings.HasPrefix(lastArg[:index], "--") {
				// Flag has full name
				flagName = lastArg[2:index]
			} else {
				// Flag is shorthand
				// We have to get the last shorthand flag name
				// e.g. `-asd` => d to provide the correct completion
				// https://github.com/spf13/cobra/issues/1257
				flagName = lastArg[index-1 : index]
			}
			lastArg = lastArg[index+1:]
			flagWithEqual = true
		} else {
			// Normal flag completion
			return nil, args, lastArg, nil
		}
	}

	if len(flagName) == 0 {
		if len(args) > 0 {
			prevArg := args[len(args)-1]
			if isFlagArg(prevArg) {
				// Only consider the case where the flag does not contain an =.
				// If the flag contains an = it means it has already been fully processed,
				// so we don't need to deal with it here.
				if index := strings.Index(prevArg, "="); index < 0 {
					if strings.HasPrefix(prevArg, "--") {
						// Flag has full name
						flagName = prevArg[2:]
					} else {
						// Flag is shorthand
						// We have to get the last shorthand flag name
						// e.g. `-asd` => d to provide the correct completion
						// https://github.com/spf13/cobra/issues/1257
						flagName = prevArg[len(prevArg)-1:]
					}
					// Remove the uncompleted flag or else there could be an error created
					// for an invalid value for that flag
					trimmedArgs = args[:len(args)-1]
				}
			}
		}
	}

	if len(flagName) == 0 {
		// Not doing flag completion
		return nil, trimmedArgs, lastArg, nil
	}

	flag := findFlag(finalCmd, flagName)
	if flag == nil {
		// Flag not supported by this command, the interspersed option might be set so return the original args
		return nil, args, orgLastArg, &flagCompError{subCommand: finalCmd.Name(), flagName: flagName}
	}

	if !flagWithEqual {
		if len(flag.NoOptDefVal) != 0 {
			// We had assumed dealing with a two-word flag but the flag is a boolean flag.
			// In that case, there is no value following it, so we are not really doing flag completion.
			// Reset everything to do noun completion.
			trimmedArgs = args
			flag = nil
		}
	}

	return flag, trimmedArgs, lastArg, nil
}

// InitDefaultCompletionCmd adds a default 'completion' command to c.
// This function will do nothing if any of the following is true:
// 1- the feature has been explicitly disabled by the program,
// 2- c has no subcommands (to avoid creating one),
// 3- c already has a 'completion' command provided by the program.
func (c *Command) InitDefaultCompletionCmd() {
	if c.CompletionOptions.DisableDefaultCmd || !c.HasSubCommands() {
		return
	}

	for _, cmd := range c.commands {
		if cmd.Name() == compCmdName || cmd.HasAlias(compCmdName) {
			// A completion command is already available
			return
		}
	}

	haveNoDescFlag := !c.CompletionOptions.DisableNoDescFlag && !c.CompletionOptions.DisableDescriptions

	completionCmd := &Command{
		Use:   compCmdName,
		Short: "Generate the autocompletion script for the specified shell",
		Long: fmt.Sprintf(`Generate the autocompletion script for %[1]s for the specified shell.
See each sub-command's help for details on how to use the generated script.
`, c.Root().Name()),
		Args:              NoArgs,
		ValidArgsFunction: NoFileCompletions,
		Hidden:            c.CompletionOptions.HiddenDefaultCmd,
		GroupID:           c.completionCommandGroupID,
	}
	c.AddCommand(completionCmd)

	out := c.OutOrStdout()
	noDesc := c.CompletionOptions.DisableDescriptions
	shortDesc := "Generate the autocompletion script for %s"
	bash := &Command{
		Use:   "bash",
		Short: fmt.Sprintf(shortDesc, "bash"),
		Long: fmt.Sprintf(`Generate the autocompletion script for the bash shell.

This script depends on the 'bash-completion' package.
If it is not installed already, you can install it via your OS's package manager.

To load completions in your current shell session:

	source <(%[1]s completion bash)

To load completions for every new session, execute once:

#### Linux:

	%[1]s completion bash > /etc/bash_completion.d/%[1]s

#### macOS:

	%[1]s completion bash > $(brew --prefix)/etc/bash_completion.d/%[1]s

You will need to start a new shell for this setup to take effect.
`, c.Root().Name()),
		Args:                  NoArgs,
		DisableFlagsInUseLine: true,
		ValidArgsFunction:     NoFileCompletions,
		RunE: func(cmd *Command, args []string) error {
			return cmd.Root().GenBashCompletionV2(out, !noDesc)
		},
	}
	if haveNoDescFlag {
		bash.Flags().BoolVar(&noDesc, compCmdNoDescFlagName, compCmdNoDescFlagDefault, compCmdNoDescFlagDesc)
	}

	zsh := &Command{
		Use:   "zsh",
		Short: fmt.Sprintf(shortDesc, "zsh"),
		Long: fmt.Sprintf(`Generate the autocompletion script for the zsh shell.

If shell completion is not already enabled in your environment you will need
to enable it.  You can execute the following once:

	echo "autoload -U compinit; compinit" >> ~/.zshrc

To load completions in your current shell session:

	source <(%[1]s completion zsh)

To load completions for every new session, execute once:

#### Linux:

	%[1]s completion zsh > "${fpath[1]}/_%[1]s"

#### macOS:

	%[1]s completion zsh > $(brew --prefix)/share/zsh/site-functions/_%[1]s

You will need to start a new shell for this setup to take effect.
`, c.Root().Name()),
		Args:              NoArgs,
		ValidArgsFunction: NoFileCompletions,
		RunE: func(cmd *Command, args []string) error {
			if noDesc {
				return cmd.Root().GenZshCompletionNoDesc(out)
			}
			return cmd.Root().GenZshCompletion(out)
		},
	}
	if haveNoDescFlag {
		zsh.Flags().BoolVar(&noDesc, compCmdNoDescFlagName, compCmdNoDescFlagDefault, compCmdNoDescFlagDesc)
	}

	fish := &Command{
		Use:   "fish",
		Short: fmt.Sprintf(shortDesc, "fish"),
		Long: fmt.Sprintf(`Generate the autocompletion script for the fish shell.

To load completions in your current shell session:

	%[1]s completion fish | source

To load completions for every new session, execute once:

	%[1]s completion fish > ~/.config/fish/completions/%[1]s.fish

You will need to start a new shell for this setup to take effect.
`, c.Root().Name()),
		Args:              NoArgs,
		ValidArgsFunction: NoFileCompletions,
		RunE: func(cmd *Command, args []string) error {
			return cmd.Root().GenFishCompletion(out, !noDesc)
		},
	}
	if haveNoDescFlag {
		fish.Flags().BoolVar(&noDesc, compCmdNoDescFlagName, compCmdNoDescFlagDefault, compCmdNoDescFlagDesc)
	}

	powershell := &Command{
		Use:   "powershell",
		Short: fmt.Sprintf(shortDesc, "powershell"),
		Long: fmt.Sprintf(`Generate the autocompletion script for powershell.

To load completions in your current shell session:

	%[1]s completion powershell | Out-String | Invoke-Expression

To load completions for every new session, add the output of the above command
to your powershell profile.
`, c.Root().Name()),
		Args:              NoArgs,
		ValidArgsFunction: NoFileCompletions,
		RunE: func(cmd *Command, args []string) error {
			if noDesc {
				return cmd.Root().GenPowerShellCompletion(out)
			}
			return cmd.Root().GenPowerShellCompletionWithDesc(out)

		},
	}
	if haveNoDescFlag {
		powershell.Flags().BoolVar(&noDesc, compCmdNoDescFlagName, compCmdNoDescFlagDefault, compCmdNoDescFlagDesc)
	}

	completionCmd.AddCommand(bash, zsh, fish, powershell)
}

func findFlag(cmd *Command, name string) *pflag.Flag {
	flagSet := cmd.Flags()
	if len(name) == 1 {
		// First convert the short flag into a long flag
		// as the cmd.Flag() search only accepts long flags
		if short := flagSet.ShorthandLookup(name); short != nil {
			name = short.Name
		} else {
			set := cmd.InheritedFlags()
			if short = set.ShorthandLookup(name); short != nil {
				name = short.Name
			} else {
				return nil
			}
		}
	}
	return cmd.Flag(name)
}

// CompDebug prints the specified string to the same file as where the
// completion script prints its logs.
// Note that completion printouts should never be on stdout as they would
// be wrongly interpreted as actual completion choices by the completion script.
func CompDebug(msg string, printToStdErr bool) {
	msg = fmt.Sprintf("[Debug] %s", msg)

	// Such logs are only printed when the user has set the environment
	// variable BASH_COMP_DEBUG_FILE to the path of some file to be used.
	if path := os.Getenv("BASH_COMP_DEBUG_FILE"); path != "" {
		f, err := os.OpenFile(path,
			os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
		if err == nil {
			defer f.Close()
			WriteStringAndCheck(f, msg)
		}
	}

	if printToStdErr {
		// Must print to stderr for this not to be read by the completion script.
		fmt.Fprint(os.Stderr, msg)
	}
}

// CompDebugln prints the specified string with a newline at the end
// to the same file as where the completion script prints its logs.
// Such logs are only printed when the user has set the environment
// variable BASH_COMP_DEBUG_FILE to the path of some file to be used.
func CompDebugln(msg string, printToStdErr bool) {
	CompDebug(fmt.Sprintf("%s\n", msg), printToStdErr)
}

// CompError prints the specified completion message to stderr.
func CompError(msg string) {
	msg = fmt.Sprintf("[Error] %s", msg)
	CompDebug(msg, true)
}

// CompErrorln prints the specified completion message to stderr with a newline at the end.
func CompErrorln(msg string) {
	CompError(fmt.Sprintf("%s\n", msg))
}
 07070100000B29000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/doc 07070100000B2A000081A4000000000000000000000001645E367C000001D9000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/doc/README.md   # Documentation generation

- [Man page docs](./man_docs.md)
- [Markdown docs](./md_docs.md)
- [Rest docs](./rest_docs.md)
- [Yaml docs](./yaml_docs.md)

## Options
### `DisableAutoGenTag`

You may set `cmd.DisableAutoGenTag = true`
to _entirely_ remove the auto generated string "Auto generated by spf13/cobra..."
from any documentation source.

### `InitDefaultCompletionCmd`

You may call `cmd.InitDefaultCompletionCmd()` to document the default autocompletion command.
   07070100000B2B000081A4000000000000000000000001645E367C00001CD0000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/doc/man_docs.go // Copyright 2013-2023 The Cobra Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package doc

import (
	"bytes"
	"fmt"
	"io"
	"os"
	"path/filepath"
	"sort"
	"strconv"
	"strings"
	"time"

	"github.com/cpuguy83/go-md2man/v2/md2man"
	"github.com/spf13/cobra"
	"github.com/spf13/pflag"
)

// GenManTree will generate a man page for this command and all descendants
// in the directory given. The header may be nil. This function may not work
// correctly if your command names have `-` in them. If you have `cmd` with two
// subcmds, `sub` and `sub-third`, and `sub` has a subcommand called `third`
// it is undefined which help output will be in the file `cmd-sub-third.1`.
func GenManTree(cmd *cobra.Command, header *GenManHeader, dir string) error {
	return GenManTreeFromOpts(cmd, GenManTreeOptions{
		Header:           header,
		Path:             dir,
		CommandSeparator: "-",
	})
}

// GenManTreeFromOpts generates a man page for the command and all descendants.
// The pages are written to the opts.Path directory.
func GenManTreeFromOpts(cmd *cobra.Command, opts GenManTreeOptions) error {
	header := opts.Header
	if header == nil {
		header = &GenManHeader{}
	}
	for _, c := range cmd.Commands() {
		if !c.IsAvailableCommand() || c.IsAdditionalHelpTopicCommand() {
			continue
		}
		if err := GenManTreeFromOpts(c, opts); err != nil {
			return err
		}
	}
	section := "1"
	if header.Section != "" {
		section = header.Section
	}

	separator := "_"
	if opts.CommandSeparator != "" {
		separator = opts.CommandSeparator
	}
	basename := strings.ReplaceAll(cmd.CommandPath(), " ", separator)
	filename := filepath.Join(opts.Path, basename+"."+section)
	f, err := os.Create(filename)
	if err != nil {
		return err
	}
	defer f.Close()

	headerCopy := *header
	return GenMan(cmd, &headerCopy, f)
}

// GenManTreeOptions is the options for generating the man pages.
// Used only in GenManTreeFromOpts.
type GenManTreeOptions struct {
	Header           *GenManHeader
	Path             string
	CommandSeparator string
}

// GenManHeader is a lot like the .TH header at the start of man pages. These
// include the title, section, date, source, and manual. We will use the
// current time if Date is unset and will use "Auto generated by spf13/cobra"
// if the Source is unset.
type GenManHeader struct {
	Title   string
	Section string
	Date    *time.Time
	date    string
	Source  string
	Manual  string
}

// GenMan will generate a man page for the given command and write it to
// w. The header argument may be nil, however obviously w may not.
func GenMan(cmd *cobra.Command, header *GenManHeader, w io.Writer) error {
	if header == nil {
		header = &GenManHeader{}
	}
	if err := fillHeader(header, cmd.CommandPath(), cmd.DisableAutoGenTag); err != nil {
		return err
	}

	b := genMan(cmd, header)
	_, err := w.Write(md2man.Render(b))
	return err
}

func fillHeader(header *GenManHeader, name string, disableAutoGen bool) error {
	if header.Title == "" {
		header.Title = strings.ToUpper(strings.ReplaceAll(name, " ", "\\-"))
	}
	if header.Section == "" {
		header.Section = "1"
	}
	if header.Date == nil {
		now := time.Now()
		if epoch := os.Getenv("SOURCE_DATE_EPOCH"); epoch != "" {
			unixEpoch, err := strconv.ParseInt(epoch, 10, 64)
			if err != nil {
				return fmt.Errorf("invalid SOURCE_DATE_EPOCH: %v", err)
			}
			now = time.Unix(unixEpoch, 0)
		}
		header.Date = &now
	}
	header.date = (*header.Date).Format("Jan 2006")
	if header.Source == "" && !disableAutoGen {
		header.Source = "Auto generated by spf13/cobra"
	}
	return nil
}

func manPreamble(buf io.StringWriter, header *GenManHeader, cmd *cobra.Command, dashedName string) {
	description := cmd.Long
	if len(description) == 0 {
		description = cmd.Short
	}

	cobra.WriteStringAndCheck(buf, fmt.Sprintf(`%% "%s" "%s" "%s" "%s" "%s"
# NAME
`, header.Title, header.Section, header.date, header.Source, header.Manual))
	cobra.WriteStringAndCheck(buf, fmt.Sprintf("%s \\- %s\n\n", dashedName, cmd.Short))
	cobra.WriteStringAndCheck(buf, "# SYNOPSIS\n")
	cobra.WriteStringAndCheck(buf, fmt.Sprintf("**%s**\n\n", cmd.UseLine()))
	cobra.WriteStringAndCheck(buf, "# DESCRIPTION\n")
	cobra.WriteStringAndCheck(buf, description+"\n\n")
}

func manPrintFlags(buf io.StringWriter, flags *pflag.FlagSet) {
	flags.VisitAll(func(flag *pflag.Flag) {
		if len(flag.Deprecated) > 0 || flag.Hidden {
			return
		}
		format := ""
		if len(flag.Shorthand) > 0 && len(flag.ShorthandDeprecated) == 0 {
			format = fmt.Sprintf("**-%s**, **--%s**", flag.Shorthand, flag.Name)
		} else {
			format = fmt.Sprintf("**--%s**", flag.Name)
		}
		if len(flag.NoOptDefVal) > 0 {
			format += "["
		}
		if flag.Value.Type() == "string" {
			// put quotes on the value
			format += "=%q"
		} else {
			format += "=%s"
		}
		if len(flag.NoOptDefVal) > 0 {
			format += "]"
		}
		format += "\n\t%s\n\n"
		cobra.WriteStringAndCheck(buf, fmt.Sprintf(format, flag.DefValue, flag.Usage))
	})
}

func manPrintOptions(buf io.StringWriter, command *cobra.Command) {
	flags := command.NonInheritedFlags()
	if flags.HasAvailableFlags() {
		cobra.WriteStringAndCheck(buf, "# OPTIONS\n")
		manPrintFlags(buf, flags)
		cobra.WriteStringAndCheck(buf, "\n")
	}
	flags = command.InheritedFlags()
	if flags.HasAvailableFlags() {
		cobra.WriteStringAndCheck(buf, "# OPTIONS INHERITED FROM PARENT COMMANDS\n")
		manPrintFlags(buf, flags)
		cobra.WriteStringAndCheck(buf, "\n")
	}
}

func genMan(cmd *cobra.Command, header *GenManHeader) []byte {
	cmd.InitDefaultHelpCmd()
	cmd.InitDefaultHelpFlag()

	// something like `rootcmd-subcmd1-subcmd2`
	dashCommandName := strings.ReplaceAll(cmd.CommandPath(), " ", "-")

	buf := new(bytes.Buffer)

	manPreamble(buf, header, cmd, dashCommandName)
	manPrintOptions(buf, cmd)
	if len(cmd.Example) > 0 {
		buf.WriteString("# EXAMPLE\n")
		buf.WriteString(fmt.Sprintf("```\n%s\n```\n", cmd.Example))
	}
	if hasSeeAlso(cmd) {
		buf.WriteString("# SEE ALSO\n")
		seealsos := make([]string, 0)
		if cmd.HasParent() {
			parentPath := cmd.Parent().CommandPath()
			dashParentPath := strings.ReplaceAll(parentPath, " ", "-")
			seealso := fmt.Sprintf("**%s(%s)**", dashParentPath, header.Section)
			seealsos = append(seealsos, seealso)
			cmd.VisitParents(func(c *cobra.Command) {
				if c.DisableAutoGenTag {
					cmd.DisableAutoGenTag = c.DisableAutoGenTag
				}
			})
		}
		children := cmd.Commands()
		sort.Sort(byName(children))
		for _, c := range children {
			if !c.IsAvailableCommand() || c.IsAdditionalHelpTopicCommand() {
				continue
			}
			seealso := fmt.Sprintf("**%s-%s(%s)**", dashCommandName, c.Name(), header.Section)
			seealsos = append(seealsos, seealso)
		}
		buf.WriteString(strings.Join(seealsos, ", ") + "\n")
	}
	if !cmd.DisableAutoGenTag {
		buf.WriteString(fmt.Sprintf("# HISTORY\n%s Auto generated by spf13/cobra\n", header.Date.Format("2-Jan-2006")))
	}
	return buf.Bytes()
}
07070100000B2C000081A4000000000000000000000001645E367C00000207000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/doc/man_docs.md # Generating Man Pages For Your Own cobra.Command

Generating man pages from a cobra command is incredibly easy. An example is as follows:

```go
package main

import (
	"log"

	"github.com/spf13/cobra"
	"github.com/spf13/cobra/doc"
)

func main() {
	cmd := &cobra.Command{
		Use:   "test",
		Short: "my test program",
	}
	header := &doc.GenManHeader{
		Title: "MINE",
		Section: "3",
	}
	err := doc.GenManTree(cmd, header, "/tmp")
	if err != nil {
		log.Fatal(err)
	}
}
```

That will get you a man page `/tmp/test.3`
 07070100000B2D000081A4000000000000000000000001645E367C0000121D000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/doc/md_docs.go  // Copyright 2013-2023 The Cobra Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package doc

import (
	"bytes"
	"fmt"
	"io"
	"os"
	"path/filepath"
	"sort"
	"strings"
	"time"

	"github.com/spf13/cobra"
)

func printOptions(buf *bytes.Buffer, cmd *cobra.Command, name string) error {
	flags := cmd.NonInheritedFlags()
	flags.SetOutput(buf)
	if flags.HasAvailableFlags() {
		buf.WriteString("### Options\n\n```\n")
		flags.PrintDefaults()
		buf.WriteString("```\n\n")
	}

	parentFlags := cmd.InheritedFlags()
	parentFlags.SetOutput(buf)
	if parentFlags.HasAvailableFlags() {
		buf.WriteString("### Options inherited from parent commands\n\n```\n")
		parentFlags.PrintDefaults()
		buf.WriteString("```\n\n")
	}
	return nil
}

// GenMarkdown creates markdown output.
func GenMarkdown(cmd *cobra.Command, w io.Writer) error {
	return GenMarkdownCustom(cmd, w, func(s string) string { return s })
}

// GenMarkdownCustom creates custom markdown output.
func GenMarkdownCustom(cmd *cobra.Command, w io.Writer, linkHandler func(string) string) error {
	cmd.InitDefaultHelpCmd()
	cmd.InitDefaultHelpFlag()

	buf := new(bytes.Buffer)
	name := cmd.CommandPath()

	buf.WriteString("## " + name + "\n\n")
	buf.WriteString(cmd.Short + "\n\n")
	if len(cmd.Long) > 0 {
		buf.WriteString("### Synopsis\n\n")
		buf.WriteString(cmd.Long + "\n\n")
	}

	if cmd.Runnable() {
		buf.WriteString(fmt.Sprintf("```\n%s\n```\n\n", cmd.UseLine()))
	}

	if len(cmd.Example) > 0 {
		buf.WriteString("### Examples\n\n")
		buf.WriteString(fmt.Sprintf("```\n%s\n```\n\n", cmd.Example))
	}

	if err := printOptions(buf, cmd, name); err != nil {
		return err
	}
	if hasSeeAlso(cmd) {
		buf.WriteString("### SEE ALSO\n\n")
		if cmd.HasParent() {
			parent := cmd.Parent()
			pname := parent.CommandPath()
			link := pname + ".md"
			link = strings.ReplaceAll(link, " ", "_")
			buf.WriteString(fmt.Sprintf("* [%s](%s)\t - %s\n", pname, linkHandler(link), parent.Short))
			cmd.VisitParents(func(c *cobra.Command) {
				if c.DisableAutoGenTag {
					cmd.DisableAutoGenTag = c.DisableAutoGenTag
				}
			})
		}

		children := cmd.Commands()
		sort.Sort(byName(children))

		for _, child := range children {
			if !child.IsAvailableCommand() || child.IsAdditionalHelpTopicCommand() {
				continue
			}
			cname := name + " " + child.Name()
			link := cname + ".md"
			link = strings.ReplaceAll(link, " ", "_")
			buf.WriteString(fmt.Sprintf("* [%s](%s)\t - %s\n", cname, linkHandler(link), child.Short))
		}
		buf.WriteString("\n")
	}
	if !cmd.DisableAutoGenTag {
		buf.WriteString("###### Auto generated by spf13/cobra on " + time.Now().Format("2-Jan-2006") + "\n")
	}
	_, err := buf.WriteTo(w)
	return err
}

// GenMarkdownTree will generate a markdown page for this command and all
// descendants in the directory given. The header may be nil.
// This function may not work correctly if your command names have `-` in them.
// If you have `cmd` with two subcmds, `sub` and `sub-third`,
// and `sub` has a subcommand called `third`, it is undefined which
// help output will be in the file `cmd-sub-third.1`.
func GenMarkdownTree(cmd *cobra.Command, dir string) error {
	identity := func(s string) string { return s }
	emptyStr := func(s string) string { return "" }
	return GenMarkdownTreeCustom(cmd, dir, emptyStr, identity)
}

// GenMarkdownTreeCustom is the the same as GenMarkdownTree, but
// with custom filePrepender and linkHandler.
func GenMarkdownTreeCustom(cmd *cobra.Command, dir string, filePrepender, linkHandler func(string) string) error {
	for _, c := range cmd.Commands() {
		if !c.IsAvailableCommand() || c.IsAdditionalHelpTopicCommand() {
			continue
		}
		if err := GenMarkdownTreeCustom(c, dir, filePrepender, linkHandler); err != nil {
			return err
		}
	}

	basename := strings.ReplaceAll(cmd.CommandPath(), " ", "_") + ".md"
	filename := filepath.Join(dir, basename)
	f, err := os.Create(filename)
	if err != nil {
		return err
	}
	defer f.Close()

	if _, err := io.WriteString(f, filePrepender(filename)); err != nil {
		return err
	}
	if err := GenMarkdownCustom(cmd, f, linkHandler); err != nil {
		return err
	}
	return nil
}
   07070100000B2E000081A4000000000000000000000001645E367C00000AF9000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/doc/md_docs.md  # Generating Markdown Docs For Your Own cobra.Command

Generating Markdown pages from a cobra command is incredibly easy. An example is as follows:

```go
package main

import (
	"log"

	"github.com/spf13/cobra"
	"github.com/spf13/cobra/doc"
)

func main() {
	cmd := &cobra.Command{
		Use:   "test",
		Short: "my test program",
	}
	err := doc.GenMarkdownTree(cmd, "/tmp")
	if err != nil {
		log.Fatal(err)
	}
}
```

That will get you a Markdown document `/tmp/test.md`

## Generate markdown docs for the entire command tree

This program can actually generate docs for the kubectl command in the kubernetes project

```go
package main

import (
	"log"
	"io/ioutil"
	"os"

	"k8s.io/kubernetes/pkg/kubectl/cmd"
	cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"

	"github.com/spf13/cobra/doc"
)

func main() {
	kubectl := cmd.NewKubectlCommand(cmdutil.NewFactory(nil), os.Stdin, ioutil.Discard, ioutil.Discard)
	err := doc.GenMarkdownTree(kubectl, "./")
	if err != nil {
		log.Fatal(err)
	}
}
```

This will generate a whole series of files, one for each command in the tree, in the directory specified (in this case "./")

## Generate markdown docs for a single command

You may wish to have more control over the output, or only generate for a single command, instead of the entire command tree. If this is the case you may prefer to `GenMarkdown` instead of `GenMarkdownTree`

```go
	out := new(bytes.Buffer)
	err := doc.GenMarkdown(cmd, out)
	if err != nil {
		log.Fatal(err)
	}
```

This will write the markdown doc for ONLY "cmd" into the out, buffer.

## Customize the output

Both `GenMarkdown` and `GenMarkdownTree` have alternate versions with callbacks to get some control of the output:

```go
func GenMarkdownTreeCustom(cmd *Command, dir string, filePrepender, linkHandler func(string) string) error {
	//...
}
```

```go
func GenMarkdownCustom(cmd *Command, out *bytes.Buffer, linkHandler func(string) string) error {
	//...
}
```

The `filePrepender` will prepend the return value given the full filepath to the rendered Markdown file. A common use case is to add front matter to use the generated documentation with [Hugo](https://gohugo.io/):

```go
const fmTemplate = `---
date: %s
title: "%s"
slug: %s
url: %s
---
`

filePrepender := func(filename string) string {
	now := time.Now().Format(time.RFC3339)
	name := filepath.Base(filename)
	base := strings.TrimSuffix(name, path.Ext(name))
	url := "/commands/" + strings.ToLower(base) + "/"
	return fmt.Sprintf(fmTemplate, now, strings.Replace(base, "_", " ", -1), base, url)
}
```

The `linkHandler` can be used to customize the rendered internal links to the commands, given a filename:

```go
linkHandler := func(name string) string {
	base := strings.TrimSuffix(name, path.Ext(name))
	return "/commands/" + strings.ToLower(base) + "/"
}
```
   07070100000B2F000081A4000000000000000000000001645E367C000014E2000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/doc/rest_docs.go    // Copyright 2013-2023 The Cobra Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package doc

import (
	"bytes"
	"fmt"
	"io"
	"os"
	"path/filepath"
	"sort"
	"strings"
	"time"

	"github.com/spf13/cobra"
)

func printOptionsReST(buf *bytes.Buffer, cmd *cobra.Command, name string) error {
	flags := cmd.NonInheritedFlags()
	flags.SetOutput(buf)
	if flags.HasAvailableFlags() {
		buf.WriteString("Options\n")
		buf.WriteString("~~~~~~~\n\n::\n\n")
		flags.PrintDefaults()
		buf.WriteString("\n")
	}

	parentFlags := cmd.InheritedFlags()
	parentFlags.SetOutput(buf)
	if parentFlags.HasAvailableFlags() {
		buf.WriteString("Options inherited from parent commands\n")
		buf.WriteString("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n")
		parentFlags.PrintDefaults()
		buf.WriteString("\n")
	}
	return nil
}

// defaultLinkHandler for default ReST hyperlink markup
func defaultLinkHandler(name, ref string) string {
	return fmt.Sprintf("`%s <%s.rst>`_", name, ref)
}

// GenReST creates reStructured Text output.
func GenReST(cmd *cobra.Command, w io.Writer) error {
	return GenReSTCustom(cmd, w, defaultLinkHandler)
}

// GenReSTCustom creates custom reStructured Text output.
func GenReSTCustom(cmd *cobra.Command, w io.Writer, linkHandler func(string, string) string) error {
	cmd.InitDefaultHelpCmd()
	cmd.InitDefaultHelpFlag()

	buf := new(bytes.Buffer)
	name := cmd.CommandPath()

	short := cmd.Short
	long := cmd.Long
	if len(long) == 0 {
		long = short
	}
	ref := strings.ReplaceAll(name, " ", "_")

	buf.WriteString(".. _" + ref + ":\n\n")
	buf.WriteString(name + "\n")
	buf.WriteString(strings.Repeat("-", len(name)) + "\n\n")
	buf.WriteString(short + "\n\n")
	buf.WriteString("Synopsis\n")
	buf.WriteString("~~~~~~~~\n\n")
	buf.WriteString("\n" + long + "\n\n")

	if cmd.Runnable() {
		buf.WriteString(fmt.Sprintf("::\n\n  %s\n\n", cmd.UseLine()))
	}

	if len(cmd.Example) > 0 {
		buf.WriteString("Examples\n")
		buf.WriteString("~~~~~~~~\n\n")
		buf.WriteString(fmt.Sprintf("::\n\n%s\n\n", indentString(cmd.Example, "  ")))
	}

	if err := printOptionsReST(buf, cmd, name); err != nil {
		return err
	}
	if hasSeeAlso(cmd) {
		buf.WriteString("SEE ALSO\n")
		buf.WriteString("~~~~~~~~\n\n")
		if cmd.HasParent() {
			parent := cmd.Parent()
			pname := parent.CommandPath()
			ref = strings.ReplaceAll(pname, " ", "_")
			buf.WriteString(fmt.Sprintf("* %s \t - %s\n", linkHandler(pname, ref), parent.Short))
			cmd.VisitParents(func(c *cobra.Command) {
				if c.DisableAutoGenTag {
					cmd.DisableAutoGenTag = c.DisableAutoGenTag
				}
			})
		}

		children := cmd.Commands()
		sort.Sort(byName(children))

		for _, child := range children {
			if !child.IsAvailableCommand() || child.IsAdditionalHelpTopicCommand() {
				continue
			}
			cname := name + " " + child.Name()
			ref = strings.ReplaceAll(cname, " ", "_")
			buf.WriteString(fmt.Sprintf("* %s \t - %s\n", linkHandler(cname, ref), child.Short))
		}
		buf.WriteString("\n")
	}
	if !cmd.DisableAutoGenTag {
		buf.WriteString("*Auto generated by spf13/cobra on " + time.Now().Format("2-Jan-2006") + "*\n")
	}
	_, err := buf.WriteTo(w)
	return err
}

// GenReSTTree will generate a ReST page for this command and all
// descendants in the directory given.
// This function may not work correctly if your command names have `-` in them.
// If you have `cmd` with two subcmds, `sub` and `sub-third`,
// and `sub` has a subcommand called `third`, it is undefined which
// help output will be in the file `cmd-sub-third.1`.
func GenReSTTree(cmd *cobra.Command, dir string) error {
	emptyStr := func(s string) string { return "" }
	return GenReSTTreeCustom(cmd, dir, emptyStr, defaultLinkHandler)
}

// GenReSTTreeCustom is the the same as GenReSTTree, but
// with custom filePrepender and linkHandler.
func GenReSTTreeCustom(cmd *cobra.Command, dir string, filePrepender func(string) string, linkHandler func(string, string) string) error {
	for _, c := range cmd.Commands() {
		if !c.IsAvailableCommand() || c.IsAdditionalHelpTopicCommand() {
			continue
		}
		if err := GenReSTTreeCustom(c, dir, filePrepender, linkHandler); err != nil {
			return err
		}
	}

	basename := strings.ReplaceAll(cmd.CommandPath(), " ", "_") + ".rst"
	filename := filepath.Join(dir, basename)
	f, err := os.Create(filename)
	if err != nil {
		return err
	}
	defer f.Close()

	if _, err := io.WriteString(f, filePrepender(filename)); err != nil {
		return err
	}
	if err := GenReSTCustom(cmd, f, linkHandler); err != nil {
		return err
	}
	return nil
}

// indentString adapted from: https://github.com/kr/text/blob/main/indent.go
func indentString(s, p string) string {
	var res []byte
	b := []byte(s)
	prefix := []byte(p)
	bol := true
	for _, c := range b {
		if bol && c != '\n' {
			res = append(res, prefix...)
		}
		res = append(res, c)
		bol = c == '\n'
	}
	return string(res)
}
  07070100000B30000081A4000000000000000000000001645E367C00000B66000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/doc/rest_docs.md    # Generating ReStructured Text Docs For Your Own cobra.Command

Generating ReST pages from a cobra command is incredibly easy. An example is as follows:

```go
package main

import (
	"log"

	"github.com/spf13/cobra"
	"github.com/spf13/cobra/doc"
)

func main() {
	cmd := &cobra.Command{
		Use:   "test",
		Short: "my test program",
	}
	err := doc.GenReSTTree(cmd, "/tmp")
	if err != nil {
		log.Fatal(err)
	}
}
```

That will get you a ReST document `/tmp/test.rst`

## Generate ReST docs for the entire command tree

This program can actually generate docs for the kubectl command in the kubernetes project

```go
package main

import (
	"log"
	"io/ioutil"
	"os"

	"k8s.io/kubernetes/pkg/kubectl/cmd"
	cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"

	"github.com/spf13/cobra/doc"
)

func main() {
	kubectl := cmd.NewKubectlCommand(cmdutil.NewFactory(nil), os.Stdin, ioutil.Discard, ioutil.Discard)
	err := doc.GenReSTTree(kubectl, "./")
	if err != nil {
		log.Fatal(err)
	}
}
```

This will generate a whole series of files, one for each command in the tree, in the directory specified (in this case "./")

## Generate ReST docs for a single command

You may wish to have more control over the output, or only generate for a single command, instead of the entire command tree. If this is the case you may prefer to `GenReST` instead of `GenReSTTree`

```go
	out := new(bytes.Buffer)
	err := doc.GenReST(cmd, out)
	if err != nil {
		log.Fatal(err)
	}
```

This will write the ReST doc for ONLY "cmd" into the out, buffer.

## Customize the output

Both `GenReST` and `GenReSTTree` have alternate versions with callbacks to get some control of the output:

```go
func GenReSTTreeCustom(cmd *Command, dir string, filePrepender func(string) string, linkHandler func(string, string) string) error {
	//...
}
```

```go
func GenReSTCustom(cmd *Command, out *bytes.Buffer, linkHandler func(string, string) string) error {
	//...
}
```

The `filePrepender` will prepend the return value given the full filepath to the rendered ReST file. A common use case is to add front matter to use the generated documentation with [Hugo](https://gohugo.io/):

```go
const fmTemplate = `---
date: %s
title: "%s"
slug: %s
url: %s
---
`
filePrepender := func(filename string) string {
	now := time.Now().Format(time.RFC3339)
	name := filepath.Base(filename)
	base := strings.TrimSuffix(name, path.Ext(name))
	url := "/commands/" + strings.ToLower(base) + "/"
	return fmt.Sprintf(fmTemplate, now, strings.Replace(base, "_", " ", -1), base, url)
}
```

The `linkHandler` can be used to customize the rendered links to the commands, given a command name and reference. This is useful while converting rst to html or while generating documentation with tools like Sphinx where `:ref:` is used:

```go
// Sphinx cross-referencing format
linkHandler := func(name, ref string) string {
    return fmt.Sprintf(":ref:`%s <%s>`", name, ref)
}
```
  07070100000B31000081A4000000000000000000000001645E367C00000614000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/doc/util.go // Copyright 2013-2023 The Cobra Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package doc

import (
	"strings"

	"github.com/spf13/cobra"
)

// Test to see if we have a reason to print See Also information in docs
// Basically this is a test for a parent command or a subcommand which is
// both not deprecated and not the autogenerated help command.
func hasSeeAlso(cmd *cobra.Command) bool {
	if cmd.HasParent() {
		return true
	}
	for _, c := range cmd.Commands() {
		if !c.IsAvailableCommand() || c.IsAdditionalHelpTopicCommand() {
			continue
		}
		return true
	}
	return false
}

// Temporary workaround for yaml lib generating incorrect yaml with long strings
// that do not contain \n.
func forceMultiLine(s string) string {
	if len(s) > 60 && !strings.Contains(s, "\n") {
		s = s + "\n"
	}
	return s
}

type byName []*cobra.Command

func (s byName) Len() int           { return len(s) }
func (s byName) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }
func (s byName) Less(i, j int) bool { return s[i].Name() < s[j].Name() }
07070100000B32000081A4000000000000000000000001645E367C00001351000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/doc/yaml_docs.go    // Copyright 2013-2023 The Cobra Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package doc

import (
	"fmt"
	"io"
	"os"
	"path/filepath"
	"sort"
	"strings"

	"github.com/spf13/cobra"
	"github.com/spf13/pflag"
	"gopkg.in/yaml.v3"
)

type cmdOption struct {
	Name         string
	Shorthand    string `yaml:",omitempty"`
	DefaultValue string `yaml:"default_value,omitempty"`
	Usage        string `yaml:",omitempty"`
}

type cmdDoc struct {
	Name             string
	Synopsis         string      `yaml:",omitempty"`
	Description      string      `yaml:",omitempty"`
	Usage            string      `yaml:",omitempty"`
	Options          []cmdOption `yaml:",omitempty"`
	InheritedOptions []cmdOption `yaml:"inherited_options,omitempty"`
	Example          string      `yaml:",omitempty"`
	SeeAlso          []string    `yaml:"see_also,omitempty"`
}

// GenYamlTree creates yaml structured ref files for this command and all descendants
// in the directory given. This function may not work
// correctly if your command names have `-` in them. If you have `cmd` with two
// subcmds, `sub` and `sub-third`, and `sub` has a subcommand called `third`
// it is undefined which help output will be in the file `cmd-sub-third.1`.
func GenYamlTree(cmd *cobra.Command, dir string) error {
	identity := func(s string) string { return s }
	emptyStr := func(s string) string { return "" }
	return GenYamlTreeCustom(cmd, dir, emptyStr, identity)
}

// GenYamlTreeCustom creates yaml structured ref files.
func GenYamlTreeCustom(cmd *cobra.Command, dir string, filePrepender, linkHandler func(string) string) error {
	for _, c := range cmd.Commands() {
		if !c.IsAvailableCommand() || c.IsAdditionalHelpTopicCommand() {
			continue
		}
		if err := GenYamlTreeCustom(c, dir, filePrepender, linkHandler); err != nil {
			return err
		}
	}

	basename := strings.ReplaceAll(cmd.CommandPath(), " ", "_") + ".yaml"
	filename := filepath.Join(dir, basename)
	f, err := os.Create(filename)
	if err != nil {
		return err
	}
	defer f.Close()

	if _, err := io.WriteString(f, filePrepender(filename)); err != nil {
		return err
	}
	if err := GenYamlCustom(cmd, f, linkHandler); err != nil {
		return err
	}
	return nil
}

// GenYaml creates yaml output.
func GenYaml(cmd *cobra.Command, w io.Writer) error {
	return GenYamlCustom(cmd, w, func(s string) string { return s })
}

// GenYamlCustom creates custom yaml output.
func GenYamlCustom(cmd *cobra.Command, w io.Writer, linkHandler func(string) string) error {
	cmd.InitDefaultHelpCmd()
	cmd.InitDefaultHelpFlag()

	yamlDoc := cmdDoc{}
	yamlDoc.Name = cmd.CommandPath()

	yamlDoc.Synopsis = forceMultiLine(cmd.Short)
	yamlDoc.Description = forceMultiLine(cmd.Long)

	if cmd.Runnable() {
		yamlDoc.Usage = cmd.UseLine()
	}

	if len(cmd.Example) > 0 {
		yamlDoc.Example = cmd.Example
	}

	flags := cmd.NonInheritedFlags()
	if flags.HasFlags() {
		yamlDoc.Options = genFlagResult(flags)
	}
	flags = cmd.InheritedFlags()
	if flags.HasFlags() {
		yamlDoc.InheritedOptions = genFlagResult(flags)
	}

	if hasSeeAlso(cmd) {
		result := []string{}
		if cmd.HasParent() {
			parent := cmd.Parent()
			result = append(result, parent.CommandPath()+" - "+parent.Short)
		}
		children := cmd.Commands()
		sort.Sort(byName(children))
		for _, child := range children {
			if !child.IsAvailableCommand() || child.IsAdditionalHelpTopicCommand() {
				continue
			}
			result = append(result, child.CommandPath()+" - "+child.Short)
		}
		yamlDoc.SeeAlso = result
	}

	final, err := yaml.Marshal(&yamlDoc)
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}

	if _, err := w.Write(final); err != nil {
		return err
	}
	return nil
}

func genFlagResult(flags *pflag.FlagSet) []cmdOption {
	var result []cmdOption

	flags.VisitAll(func(flag *pflag.Flag) {
		// Todo, when we mark a shorthand is deprecated, but specify an empty message.
		// The flag.ShorthandDeprecated is empty as the shorthand is deprecated.
		// Using len(flag.ShorthandDeprecated) > 0 can't handle this, others are ok.
		if !(len(flag.ShorthandDeprecated) > 0) && len(flag.Shorthand) > 0 {
			opt := cmdOption{
				flag.Name,
				flag.Shorthand,
				flag.DefValue,
				forceMultiLine(flag.Usage),
			}
			result = append(result, opt)
		} else {
			opt := cmdOption{
				Name:         flag.Name,
				DefaultValue: forceMultiLine(flag.DefValue),
				Usage:        forceMultiLine(flag.Usage),
			}
			result = append(result, opt)
		}
	})

	return result
}
   07070100000B33000081A4000000000000000000000001645E367C00000A8F000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/doc/yaml_docs.md    # Generating Yaml Docs For Your Own cobra.Command

Generating yaml files from a cobra command is incredibly easy. An example is as follows:

```go
package main

import (
	"log"

	"github.com/spf13/cobra"
	"github.com/spf13/cobra/doc"
)

func main() {
	cmd := &cobra.Command{
		Use:   "test",
		Short: "my test program",
	}
	err := doc.GenYamlTree(cmd, "/tmp")
	if err != nil {
		log.Fatal(err)
	}
}
```

That will get you a Yaml document `/tmp/test.yaml`

## Generate yaml docs for the entire command tree

This program can actually generate docs for the kubectl command in the kubernetes project

```go
package main

import (
	"io/ioutil"
	"log"
	"os"

	"k8s.io/kubernetes/pkg/kubectl/cmd"
	cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"

	"github.com/spf13/cobra/doc"
)

func main() {
	kubectl := cmd.NewKubectlCommand(cmdutil.NewFactory(nil), os.Stdin, ioutil.Discard, ioutil.Discard)
	err := doc.GenYamlTree(kubectl, "./")
	if err != nil {
		log.Fatal(err)
	}
}
```

This will generate a whole series of files, one for each command in the tree, in the directory specified (in this case "./")

## Generate yaml docs for a single command

You may wish to have more control over the output, or only generate for a single command, instead of the entire command tree. If this is the case you may prefer to `GenYaml` instead of `GenYamlTree`

```go
	out := new(bytes.Buffer)
	doc.GenYaml(cmd, out)
```

This will write the yaml doc for ONLY "cmd" into the out, buffer.

## Customize the output

Both `GenYaml` and `GenYamlTree` have alternate versions with callbacks to get some control of the output:

```go
func GenYamlTreeCustom(cmd *Command, dir string, filePrepender, linkHandler func(string) string) error {
	//...
}
```

```go
func GenYamlCustom(cmd *Command, out *bytes.Buffer, linkHandler func(string) string) error {
	//...
}
```

The `filePrepender` will prepend the return value given the full filepath to the rendered Yaml file. A common use case is to add front matter to use the generated documentation with [Hugo](https://gohugo.io/):

```go
const fmTemplate = `---
date: %s
title: "%s"
slug: %s
url: %s
---
`

filePrepender := func(filename string) string {
	now := time.Now().Format(time.RFC3339)
	name := filepath.Base(filename)
	base := strings.TrimSuffix(name, path.Ext(name))
	url := "/commands/" + strings.ToLower(base) + "/"
	return fmt.Sprintf(fmTemplate, now, strings.Replace(base, "_", " ", -1), base, url)
}
```

The `linkHandler` can be used to customize the rendered internal links to the commands, given a filename:

```go
linkHandler := func(name string) string {
	base := strings.TrimSuffix(name, path.Ext(name))
	return "/commands/" + strings.ToLower(base) + "/"
}
```
 07070100000B34000081A4000000000000000000000001645E367C00002CD8000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/fish_completions.go // Copyright 2013-2023 The Cobra Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package cobra

import (
	"bytes"
	"fmt"
	"io"
	"os"
	"strings"
)

func genFishComp(buf io.StringWriter, name string, includeDesc bool) {
	// Variables should not contain a '-' or ':' character
	nameForVar := name
	nameForVar = strings.ReplaceAll(nameForVar, "-", "_")
	nameForVar = strings.ReplaceAll(nameForVar, ":", "_")

	compCmd := ShellCompRequestCmd
	if !includeDesc {
		compCmd = ShellCompNoDescRequestCmd
	}
	WriteStringAndCheck(buf, fmt.Sprintf("# fish completion for %-36s -*- shell-script -*-\n", name))
	WriteStringAndCheck(buf, fmt.Sprintf(`
function __%[1]s_debug
    set -l file "$BASH_COMP_DEBUG_FILE"
    if test -n "$file"
        echo "$argv" >> $file
    end
end

function __%[1]s_perform_completion
    __%[1]s_debug "Starting __%[1]s_perform_completion"

    # Extract all args except the last one
    set -l args (commandline -opc)
    # Extract the last arg and escape it in case it is a space
    set -l lastArg (string escape -- (commandline -ct))

    __%[1]s_debug "args: $args"
    __%[1]s_debug "last arg: $lastArg"

    # Disable ActiveHelp which is not supported for fish shell
    set -l requestComp "%[10]s=0 $args[1] %[3]s $args[2..-1] $lastArg"

    __%[1]s_debug "Calling $requestComp"
    set -l results (eval $requestComp 2> /dev/null)

    # Some programs may output extra empty lines after the directive.
    # Let's ignore them or else it will break completion.
    # Ref: https://github.com/spf13/cobra/issues/1279
    for line in $results[-1..1]
        if test (string trim -- $line) = ""
            # Found an empty line, remove it
            set results $results[1..-2]
        else
            # Found non-empty line, we have our proper output
            break
        end
    end

    set -l comps $results[1..-2]
    set -l directiveLine $results[-1]

    # For Fish, when completing a flag with an = (e.g., <program> -n=<TAB>)
    # completions must be prefixed with the flag
    set -l flagPrefix (string match -r -- '-.*=' "$lastArg")

    __%[1]s_debug "Comps: $comps"
    __%[1]s_debug "DirectiveLine: $directiveLine"
    __%[1]s_debug "flagPrefix: $flagPrefix"

    for comp in $comps
        printf "%%s%%s\n" "$flagPrefix" "$comp"
    end

    printf "%%s\n" "$directiveLine"
end

# this function limits calls to __%[1]s_perform_completion, by caching the result behind $__%[1]s_perform_completion_once_result
function __%[1]s_perform_completion_once
    __%[1]s_debug "Starting __%[1]s_perform_completion_once"

    if test -n "$__%[1]s_perform_completion_once_result"
        __%[1]s_debug "Seems like a valid result already exists, skipping __%[1]s_perform_completion"
        return 0
    end

    set --global __%[1]s_perform_completion_once_result (__%[1]s_perform_completion)
    if test -z "$__%[1]s_perform_completion_once_result"
        __%[1]s_debug "No completions, probably due to a failure"
        return 1
    end

    __%[1]s_debug "Performed completions and set __%[1]s_perform_completion_once_result"
    return 0
end

# this function is used to clear the $__%[1]s_perform_completion_once_result variable after completions are run
function __%[1]s_clear_perform_completion_once_result
    __%[1]s_debug ""
    __%[1]s_debug "========= clearing previously set __%[1]s_perform_completion_once_result variable =========="
    set --erase __%[1]s_perform_completion_once_result
    __%[1]s_debug "Succesfully erased the variable __%[1]s_perform_completion_once_result"
end

function __%[1]s_requires_order_preservation
    __%[1]s_debug ""
    __%[1]s_debug "========= checking if order preservation is required =========="

    __%[1]s_perform_completion_once
    if test -z "$__%[1]s_perform_completion_once_result"
        __%[1]s_debug "Error determining if order preservation is required"
        return 1
    end

    set -l directive (string sub --start 2 $__%[1]s_perform_completion_once_result[-1])
    __%[1]s_debug "Directive is: $directive"

    set -l shellCompDirectiveKeepOrder %[9]d
    set -l keeporder (math (math --scale 0 $directive / $shellCompDirectiveKeepOrder) %% 2)
    __%[1]s_debug "Keeporder is: $keeporder"

    if test $keeporder -ne 0
        __%[1]s_debug "This does require order preservation"
        return 0
    end

    __%[1]s_debug "This doesn't require order preservation"
    return 1
end


# This function does two things:
# - Obtain the completions and store them in the global __%[1]s_comp_results
# - Return false if file completion should be performed
function __%[1]s_prepare_completions
    __%[1]s_debug ""
    __%[1]s_debug "========= starting completion logic =========="

    # Start fresh
    set --erase __%[1]s_comp_results

    __%[1]s_perform_completion_once
    __%[1]s_debug "Completion results: $__%[1]s_perform_completion_once_result"

    if test -z "$__%[1]s_perform_completion_once_result"
        __%[1]s_debug "No completion, probably due to a failure"
        # Might as well do file completion, in case it helps
        return 1
    end

    set -l directive (string sub --start 2 $__%[1]s_perform_completion_once_result[-1])
    set --global __%[1]s_comp_results $__%[1]s_perform_completion_once_result[1..-2]

    __%[1]s_debug "Completions are: $__%[1]s_comp_results"
    __%[1]s_debug "Directive is: $directive"

    set -l shellCompDirectiveError %[4]d
    set -l shellCompDirectiveNoSpace %[5]d
    set -l shellCompDirectiveNoFileComp %[6]d
    set -l shellCompDirectiveFilterFileExt %[7]d
    set -l shellCompDirectiveFilterDirs %[8]d

    if test -z "$directive"
        set directive 0
    end

    set -l compErr (math (math --scale 0 $directive / $shellCompDirectiveError) %% 2)
    if test $compErr -eq 1
        __%[1]s_debug "Received error directive: aborting."
        # Might as well do file completion, in case it helps
        return 1
    end

    set -l filefilter (math (math --scale 0 $directive / $shellCompDirectiveFilterFileExt) %% 2)
    set -l dirfilter (math (math --scale 0 $directive / $shellCompDirectiveFilterDirs) %% 2)
    if test $filefilter -eq 1; or test $dirfilter -eq 1
        __%[1]s_debug "File extension filtering or directory filtering not supported"
        # Do full file completion instead
        return 1
    end

    set -l nospace (math (math --scale 0 $directive / $shellCompDirectiveNoSpace) %% 2)
    set -l nofiles (math (math --scale 0 $directive / $shellCompDirectiveNoFileComp) %% 2)

    __%[1]s_debug "nospace: $nospace, nofiles: $nofiles"

    # If we want to prevent a space, or if file completion is NOT disabled,
    # we need to count the number of valid completions.
    # To do so, we will filter on prefix as the completions we have received
    # may not already be filtered so as to allow fish to match on different
    # criteria than the prefix.
    if test $nospace -ne 0; or test $nofiles -eq 0
        set -l prefix (commandline -t | string escape --style=regex)
        __%[1]s_debug "prefix: $prefix"

        set -l completions (string match -r -- "^$prefix.*" $__%[1]s_comp_results)
        set --global __%[1]s_comp_results $completions
        __%[1]s_debug "Filtered completions are: $__%[1]s_comp_results"

        # Important not to quote the variable for count to work
        set -l numComps (count $__%[1]s_comp_results)
        __%[1]s_debug "numComps: $numComps"

        if test $numComps -eq 1; and test $nospace -ne 0
            # We must first split on \t to get rid of the descriptions to be
            # able to check what the actual completion will be.
            # We don't need descriptions anyway since there is only a single
            # real completion which the shell will expand immediately.
            set -l split (string split --max 1 \t $__%[1]s_comp_results[1])

            # Fish won't add a space if the completion ends with any
            # of the following characters: @=/:.,
            set -l lastChar (string sub -s -1 -- $split)
            if not string match -r -q "[@=/:.,]" -- "$lastChar"
                # In other cases, to support the "nospace" directive we trick the shell
                # by outputting an extra, longer completion.
                __%[1]s_debug "Adding second completion to perform nospace directive"
                set --global __%[1]s_comp_results $split[1] $split[1].
                __%[1]s_debug "Completions are now: $__%[1]s_comp_results"
            end
        end

        if test $numComps -eq 0; and test $nofiles -eq 0
            # To be consistent with bash and zsh, we only trigger file
            # completion when there are no other completions
            __%[1]s_debug "Requesting file completion"
            return 1
        end
    end

    return 0
end

# Since Fish completions are only loaded once the user triggers them, we trigger them ourselves
# so we can properly delete any completions provided by another script.
# Only do this if the program can be found, or else fish may print some errors; besides,
# the existing completions will only be loaded if the program can be found.
if type -q "%[2]s"
    # The space after the program name is essential to trigger completion for the program
    # and not completion of the program name itself.
    # Also, we use '> /dev/null 2>&1' since '&>' is not supported in older versions of fish.
    complete --do-complete "%[2]s " > /dev/null 2>&1
end

# Remove any pre-existing completions for the program since we will be handling all of them.
complete -c %[2]s -e

# this will get called after the two calls below and clear the $__%[1]s_perform_completion_once_result global
complete -c %[2]s -n '__%[1]s_clear_perform_completion_once_result'
# The call to __%[1]s_prepare_completions will setup __%[1]s_comp_results
# which provides the program's completion choices.
# If this doesn't require order preservation, we don't use the -k flag
complete -c %[2]s -n 'not __%[1]s_requires_order_preservation && __%[1]s_prepare_completions' -f -a '$__%[1]s_comp_results'
# otherwise we use the -k flag
complete -k -c %[2]s -n '__%[1]s_requires_order_preservation && __%[1]s_prepare_completions' -f -a '$__%[1]s_comp_results'
`, nameForVar, name, compCmd,
		ShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp,
		ShellCompDirectiveFilterFileExt, ShellCompDirectiveFilterDirs, ShellCompDirectiveKeepOrder, activeHelpEnvVar(name)))
}

// GenFishCompletion generates fish completion file and writes to the passed writer.
func (c *Command) GenFishCompletion(w io.Writer, includeDesc bool) error {
	buf := new(bytes.Buffer)
	genFishComp(buf, c.Name(), includeDesc)
	_, err := buf.WriteTo(w)
	return err
}

// GenFishCompletionFile generates fish completion file.
func (c *Command) GenFishCompletionFile(filename string, includeDesc bool) error {
	outFile, err := os.Create(filename)
	if err != nil {
		return err
	}
	defer outFile.Close()

	return c.GenFishCompletion(outFile, includeDesc)
}
07070100000B35000081A4000000000000000000000001645E367C0000007F000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/fish_completions.md ## Generating Fish Completions For Your cobra.Command

Please refer to [Shell Completions](shell_completions.md) for details.

 07070100000B36000081A4000000000000000000000001645E367C00001C1D000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/flag_groups.go  // Copyright 2013-2023 The Cobra Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package cobra

import (
	"fmt"
	"sort"
	"strings"

	flag "github.com/spf13/pflag"
)

const (
	requiredAsGroup   = "cobra_annotation_required_if_others_set"
	mutuallyExclusive = "cobra_annotation_mutually_exclusive"
)

// MarkFlagsRequiredTogether marks the given flags with annotations so that Cobra errors
// if the command is invoked with a subset (but not all) of the given flags.
func (c *Command) MarkFlagsRequiredTogether(flagNames ...string) {
	c.mergePersistentFlags()
	for _, v := range flagNames {
		f := c.Flags().Lookup(v)
		if f == nil {
			panic(fmt.Sprintf("Failed to find flag %q and mark it as being required in a flag group", v))
		}
		if err := c.Flags().SetAnnotation(v, requiredAsGroup, append(f.Annotations[requiredAsGroup], strings.Join(flagNames, " "))); err != nil {
			// Only errs if the flag isn't found.
			panic(err)
		}
	}
}

// MarkFlagsMutuallyExclusive marks the given flags with annotations so that Cobra errors
// if the command is invoked with more than one flag from the given set of flags.
func (c *Command) MarkFlagsMutuallyExclusive(flagNames ...string) {
	c.mergePersistentFlags()
	for _, v := range flagNames {
		f := c.Flags().Lookup(v)
		if f == nil {
			panic(fmt.Sprintf("Failed to find flag %q and mark it as being in a mutually exclusive flag group", v))
		}
		// Each time this is called is a single new entry; this allows it to be a member of multiple groups if needed.
		if err := c.Flags().SetAnnotation(v, mutuallyExclusive, append(f.Annotations[mutuallyExclusive], strings.Join(flagNames, " "))); err != nil {
			panic(err)
		}
	}
}

// ValidateFlagGroups validates the mutuallyExclusive/requiredAsGroup logic and returns the
// first error encountered.
func (c *Command) ValidateFlagGroups() error {
	if c.DisableFlagParsing {
		return nil
	}

	flags := c.Flags()

	// groupStatus format is the list of flags as a unique ID,
	// then a map of each flag name and whether it is set or not.
	groupStatus := map[string]map[string]bool{}
	mutuallyExclusiveGroupStatus := map[string]map[string]bool{}
	flags.VisitAll(func(pflag *flag.Flag) {
		processFlagForGroupAnnotation(flags, pflag, requiredAsGroup, groupStatus)
		processFlagForGroupAnnotation(flags, pflag, mutuallyExclusive, mutuallyExclusiveGroupStatus)
	})

	if err := validateRequiredFlagGroups(groupStatus); err != nil {
		return err
	}
	if err := validateExclusiveFlagGroups(mutuallyExclusiveGroupStatus); err != nil {
		return err
	}
	return nil
}

func hasAllFlags(fs *flag.FlagSet, flagnames ...string) bool {
	for _, fname := range flagnames {
		f := fs.Lookup(fname)
		if f == nil {
			return false
		}
	}
	return true
}

func processFlagForGroupAnnotation(flags *flag.FlagSet, pflag *flag.Flag, annotation string, groupStatus map[string]map[string]bool) {
	groupInfo, found := pflag.Annotations[annotation]
	if found {
		for _, group := range groupInfo {
			if groupStatus[group] == nil {
				flagnames := strings.Split(group, " ")

				// Only consider this flag group at all if all the flags are defined.
				if !hasAllFlags(flags, flagnames...) {
					continue
				}

				groupStatus[group] = map[string]bool{}
				for _, name := range flagnames {
					groupStatus[group][name] = false
				}
			}

			groupStatus[group][pflag.Name] = pflag.Changed
		}
	}
}

func validateRequiredFlagGroups(data map[string]map[string]bool) error {
	keys := sortedKeys(data)
	for _, flagList := range keys {
		flagnameAndStatus := data[flagList]

		unset := []string{}
		for flagname, isSet := range flagnameAndStatus {
			if !isSet {
				unset = append(unset, flagname)
			}
		}
		if len(unset) == len(flagnameAndStatus) || len(unset) == 0 {
			continue
		}

		// Sort values, so they can be tested/scripted against consistently.
		sort.Strings(unset)
		return fmt.Errorf("if any flags in the group [%v] are set they must all be set; missing %v", flagList, unset)
	}

	return nil
}

func validateExclusiveFlagGroups(data map[string]map[string]bool) error {
	keys := sortedKeys(data)
	for _, flagList := range keys {
		flagnameAndStatus := data[flagList]
		var set []string
		for flagname, isSet := range flagnameAndStatus {
			if isSet {
				set = append(set, flagname)
			}
		}
		if len(set) == 0 || len(set) == 1 {
			continue
		}

		// Sort values, so they can be tested/scripted against consistently.
		sort.Strings(set)
		return fmt.Errorf("if any flags in the group [%v] are set none of the others can be; %v were all set", flagList, set)
	}
	return nil
}

func sortedKeys(m map[string]map[string]bool) []string {
	keys := make([]string, len(m))
	i := 0
	for k := range m {
		keys[i] = k
		i++
	}
	sort.Strings(keys)
	return keys
}

// enforceFlagGroupsForCompletion will do the following:
// - when a flag in a group is present, other flags in the group will be marked required
// - when a flag in a mutually exclusive group is present, other flags in the group will be marked as hidden
// This allows the standard completion logic to behave appropriately for flag groups
func (c *Command) enforceFlagGroupsForCompletion() {
	if c.DisableFlagParsing {
		return
	}

	flags := c.Flags()
	groupStatus := map[string]map[string]bool{}
	mutuallyExclusiveGroupStatus := map[string]map[string]bool{}
	c.Flags().VisitAll(func(pflag *flag.Flag) {
		processFlagForGroupAnnotation(flags, pflag, requiredAsGroup, groupStatus)
		processFlagForGroupAnnotation(flags, pflag, mutuallyExclusive, mutuallyExclusiveGroupStatus)
	})

	// If a flag that is part of a group is present, we make all the other flags
	// of that group required so that the shell completion suggests them automatically
	for flagList, flagnameAndStatus := range groupStatus {
		for _, isSet := range flagnameAndStatus {
			if isSet {
				// One of the flags of the group is set, mark the other ones as required
				for _, fName := range strings.Split(flagList, " ") {
					_ = c.MarkFlagRequired(fName)
				}
			}
		}
	}

	// If a flag that is mutually exclusive to others is present, we hide the other
	// flags of that group so the shell completion does not suggest them
	for flagList, flagnameAndStatus := range mutuallyExclusiveGroupStatus {
		for flagName, isSet := range flagnameAndStatus {
			if isSet {
				// One of the flags of the mutually exclusive group is set, mark the other ones as hidden
				// Don't mark the flag that is already set as hidden because it may be an
				// array or slice flag and therefore must continue being suggested
				for _, fName := range strings.Split(flagList, " ") {
					if fName != flagName {
						flag := c.Flags().Lookup(fName)
						flag.Hidden = true
					}
				}
			}
		}
	}
}
   07070100000B37000081A4000000000000000000000001645E367C00003141000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/powershell_completions.go   // Copyright 2013-2023 The Cobra Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// The generated scripts require PowerShell v5.0+ (which comes Windows 10, but
// can be downloaded separately for windows 7 or 8.1).

package cobra

import (
	"bytes"
	"fmt"
	"io"
	"os"
	"strings"
)

func genPowerShellComp(buf io.StringWriter, name string, includeDesc bool) {
	// Variables should not contain a '-' or ':' character
	nameForVar := name
	nameForVar = strings.Replace(nameForVar, "-", "_", -1)
	nameForVar = strings.Replace(nameForVar, ":", "_", -1)

	compCmd := ShellCompRequestCmd
	if !includeDesc {
		compCmd = ShellCompNoDescRequestCmd
	}
	WriteStringAndCheck(buf, fmt.Sprintf(`# powershell completion for %-36[1]s -*- shell-script -*-

function __%[1]s_debug {
    if ($env:BASH_COMP_DEBUG_FILE) {
        "$args" | Out-File -Append -FilePath "$env:BASH_COMP_DEBUG_FILE"
    }
}

filter __%[1]s_escapeStringWithSpecialChars {
`+"    $_ -replace '\\s|#|@|\\$|;|,|''|\\{|\\}|\\(|\\)|\"|`|\\||<|>|&','`$&'"+`
}

[scriptblock]$__%[2]sCompleterBlock = {
    param(
            $WordToComplete,
            $CommandAst,
            $CursorPosition
        )

    # Get the current command line and convert into a string
    $Command = $CommandAst.CommandElements
    $Command = "$Command"

    __%[1]s_debug ""
    __%[1]s_debug "========= starting completion logic =========="
    __%[1]s_debug "WordToComplete: $WordToComplete Command: $Command CursorPosition: $CursorPosition"

    # The user could have moved the cursor backwards on the command-line.
    # We need to trigger completion from the $CursorPosition location, so we need
    # to truncate the command-line ($Command) up to the $CursorPosition location.
    # Make sure the $Command is longer then the $CursorPosition before we truncate.
    # This happens because the $Command does not include the last space.
    if ($Command.Length -gt $CursorPosition) {
        $Command=$Command.Substring(0,$CursorPosition)
    }
    __%[1]s_debug "Truncated command: $Command"

    $ShellCompDirectiveError=%[4]d
    $ShellCompDirectiveNoSpace=%[5]d
    $ShellCompDirectiveNoFileComp=%[6]d
    $ShellCompDirectiveFilterFileExt=%[7]d
    $ShellCompDirectiveFilterDirs=%[8]d
    $ShellCompDirectiveKeepOrder=%[9]d

    # Prepare the command to request completions for the program.
    # Split the command at the first space to separate the program and arguments.
    $Program,$Arguments = $Command.Split(" ",2)

    $RequestComp="$Program %[3]s $Arguments"
    __%[1]s_debug "RequestComp: $RequestComp"

    # we cannot use $WordToComplete because it
    # has the wrong values if the cursor was moved
    # so use the last argument
    if ($WordToComplete -ne "" ) {
        $WordToComplete = $Arguments.Split(" ")[-1]
    }
    __%[1]s_debug "New WordToComplete: $WordToComplete"


    # Check for flag with equal sign
    $IsEqualFlag = ($WordToComplete -Like "--*=*" )
    if ( $IsEqualFlag ) {
        __%[1]s_debug "Completing equal sign flag"
        # Remove the flag part
        $Flag,$WordToComplete = $WordToComplete.Split("=",2)
    }

    if ( $WordToComplete -eq "" -And ( -Not $IsEqualFlag )) {
        # If the last parameter is complete (there is a space following it)
        # We add an extra empty parameter so we can indicate this to the go method.
        __%[1]s_debug "Adding extra empty parameter"
        # PowerShell 7.2+ changed the way how the arguments are passed to executables,
        # so for pre-7.2 or when Legacy argument passing is enabled we need to use
`+"        # `\"`\" to pass an empty argument, a \"\" or '' does not work!!!"+`
        if ($PSVersionTable.PsVersion -lt [version]'7.2.0' -or
            ($PSVersionTable.PsVersion -lt [version]'7.3.0' -and -not [ExperimentalFeature]::IsEnabled("PSNativeCommandArgumentPassing")) -or
            (($PSVersionTable.PsVersion -ge [version]'7.3.0' -or [ExperimentalFeature]::IsEnabled("PSNativeCommandArgumentPassing")) -and
              $PSNativeCommandArgumentPassing -eq 'Legacy')) {
`+"             $RequestComp=\"$RequestComp\" + ' `\"`\"'"+`
        } else {
             $RequestComp="$RequestComp" + ' ""'
        }
    }

    __%[1]s_debug "Calling $RequestComp"
    # First disable ActiveHelp which is not supported for Powershell
    $env:%[10]s=0

    #call the command store the output in $out and redirect stderr and stdout to null
    # $Out is an array contains each line per element
    Invoke-Expression -OutVariable out "$RequestComp" 2>&1 | Out-Null

    # get directive from last line
    [int]$Directive = $Out[-1].TrimStart(':')
    if ($Directive -eq "") {
        # There is no directive specified
        $Directive = 0
    }
    __%[1]s_debug "The completion directive is: $Directive"

    # remove directive (last element) from out
    $Out = $Out | Where-Object { $_ -ne $Out[-1] }
    __%[1]s_debug "The completions are: $Out"

    if (($Directive -band $ShellCompDirectiveError) -ne 0 ) {
        # Error code.  No completion.
        __%[1]s_debug "Received error from custom completion go code"
        return
    }

    $Longest = 0
    [Array]$Values = $Out | ForEach-Object {
        #Split the output in name and description
`+"        $Name, $Description = $_.Split(\"`t\",2)"+`
        __%[1]s_debug "Name: $Name Description: $Description"

        # Look for the longest completion so that we can format things nicely
        if ($Longest -lt $Name.Length) {
            $Longest = $Name.Length
        }

        # Set the description to a one space string if there is none set.
        # This is needed because the CompletionResult does not accept an empty string as argument
        if (-Not $Description) {
            $Description = " "
        }
        @{Name="$Name";Description="$Description"}
    }


    $Space = " "
    if (($Directive -band $ShellCompDirectiveNoSpace) -ne 0 ) {
        # remove the space here
        __%[1]s_debug "ShellCompDirectiveNoSpace is called"
        $Space = ""
    }

    if ((($Directive -band $ShellCompDirectiveFilterFileExt) -ne 0 ) -or
       (($Directive -band $ShellCompDirectiveFilterDirs) -ne 0 ))  {
        __%[1]s_debug "ShellCompDirectiveFilterFileExt ShellCompDirectiveFilterDirs are not supported"

        # return here to prevent the completion of the extensions
        return
    }

    $Values = $Values | Where-Object {
        # filter the result
        $_.Name -like "$WordToComplete*"

        # Join the flag back if we have an equal sign flag
        if ( $IsEqualFlag ) {
            __%[1]s_debug "Join the equal sign flag back to the completion value"
            $_.Name = $Flag + "=" + $_.Name
        }
    }

    # we sort the values in ascending order by name if keep order isn't passed
    if (($Directive -band $ShellCompDirectiveKeepOrder) -eq 0 ) {
        $Values = $Values | Sort-Object -Property Name
    }

    if (($Directive -band $ShellCompDirectiveNoFileComp) -ne 0 ) {
        __%[1]s_debug "ShellCompDirectiveNoFileComp is called"

        if ($Values.Length -eq 0) {
            # Just print an empty string here so the
            # shell does not start to complete paths.
            # We cannot use CompletionResult here because
            # it does not accept an empty string as argument.
            ""
            return
        }
    }

    # Get the current mode
    $Mode = (Get-PSReadLineKeyHandler | Where-Object {$_.Key -eq "Tab" }).Function
    __%[1]s_debug "Mode: $Mode"

    $Values | ForEach-Object {

        # store temporary because switch will overwrite $_
        $comp = $_

        # PowerShell supports three different completion modes
        # - TabCompleteNext (default windows style - on each key press the next option is displayed)
        # - Complete (works like bash)
        # - MenuComplete (works like zsh)
        # You set the mode with Set-PSReadLineKeyHandler -Key Tab -Function <mode>

        # CompletionResult Arguments:
        # 1) CompletionText text to be used as the auto completion result
        # 2) ListItemText   text to be displayed in the suggestion list
        # 3) ResultType     type of completion result
        # 4) ToolTip        text for the tooltip with details about the object

        switch ($Mode) {

            # bash like
            "Complete" {

                if ($Values.Length -eq 1) {
                    __%[1]s_debug "Only one completion left"

                    # insert space after value
                    [System.Management.Automation.CompletionResult]::new($($comp.Name | __%[1]s_escapeStringWithSpecialChars) + $Space, "$($comp.Name)", 'ParameterValue', "$($comp.Description)")

                } else {
                    # Add the proper number of spaces to align the descriptions
                    while($comp.Name.Length -lt $Longest) {
                        $comp.Name = $comp.Name + " "
                    }

                    # Check for empty description and only add parentheses if needed
                    if ($($comp.Description) -eq " " ) {
                        $Description = ""
                    } else {
                        $Description = "  ($($comp.Description))"
                    }

                    [System.Management.Automation.CompletionResult]::new("$($comp.Name)$Description", "$($comp.Name)$Description", 'ParameterValue', "$($comp.Description)")
                }
             }

            # zsh like
            "MenuComplete" {
                # insert space after value
                # MenuComplete will automatically show the ToolTip of
                # the highlighted value at the bottom of the suggestions.
                [System.Management.Automation.CompletionResult]::new($($comp.Name | __%[1]s_escapeStringWithSpecialChars) + $Space, "$($comp.Name)", 'ParameterValue', "$($comp.Description)")
            }

            # TabCompleteNext and in case we get something unknown
            Default {
                # Like MenuComplete but we don't want to add a space here because
                # the user need to press space anyway to get the completion.
                # Description will not be shown because that's not possible with TabCompleteNext
                [System.Management.Automation.CompletionResult]::new($($comp.Name | __%[1]s_escapeStringWithSpecialChars), "$($comp.Name)", 'ParameterValue', "$($comp.Description)")
            }
        }

    }
}

Register-ArgumentCompleter -CommandName '%[1]s' -ScriptBlock $__%[2]sCompleterBlock
`, name, nameForVar, compCmd,
		ShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp,
		ShellCompDirectiveFilterFileExt, ShellCompDirectiveFilterDirs, ShellCompDirectiveKeepOrder, activeHelpEnvVar(name)))
}

func (c *Command) genPowerShellCompletion(w io.Writer, includeDesc bool) error {
	buf := new(bytes.Buffer)
	genPowerShellComp(buf, c.Name(), includeDesc)
	_, err := buf.WriteTo(w)
	return err
}

func (c *Command) genPowerShellCompletionFile(filename string, includeDesc bool) error {
	outFile, err := os.Create(filename)
	if err != nil {
		return err
	}
	defer outFile.Close()

	return c.genPowerShellCompletion(outFile, includeDesc)
}

// GenPowerShellCompletionFile generates powershell completion file without descriptions.
func (c *Command) GenPowerShellCompletionFile(filename string) error {
	return c.genPowerShellCompletionFile(filename, false)
}

// GenPowerShellCompletion generates powershell completion file without descriptions
// and writes it to the passed writer.
func (c *Command) GenPowerShellCompletion(w io.Writer) error {
	return c.genPowerShellCompletion(w, false)
}

// GenPowerShellCompletionFileWithDesc generates powershell completion file with descriptions.
func (c *Command) GenPowerShellCompletionFileWithDesc(filename string) error {
	return c.genPowerShellCompletionFile(filename, true)
}

// GenPowerShellCompletionWithDesc generates powershell completion file with descriptions
// and writes it to the passed writer.
func (c *Command) GenPowerShellCompletionWithDesc(w io.Writer) error {
	return c.genPowerShellCompletion(w, true)
}
   07070100000B38000081A4000000000000000000000001645E367C0000009E000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/powershell_completions.md   # Generating PowerShell Completions For Your Own cobra.Command

Please refer to [Shell Completions](shell_completions.md#powershell-completions) for details.
  07070100000B39000081A4000000000000000000000001645E367C00000C24000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/projects_using_cobra.md ## Projects using Cobra

- [Allero](https://github.com/allero-io/allero)
- [Arewefastyet](https://benchmark.vitess.io)
- [Arduino CLI](https://github.com/arduino/arduino-cli)
- [Bleve](https://blevesearch.com/)
- [Cilium](https://cilium.io/)
- [CloudQuery](https://github.com/cloudquery/cloudquery)
- [CockroachDB](https://www.cockroachlabs.com/)
- [Constellation](https://github.com/edgelesssys/constellation)
- [Cosmos SDK](https://github.com/cosmos/cosmos-sdk)
- [Datree](https://github.com/datreeio/datree)
- [Delve](https://github.com/derekparker/delve)
- [Docker (distribution)](https://github.com/docker/distribution)
- [Etcd](https://etcd.io/)
- [Gardener](https://github.com/gardener/gardenctl)
- [Giant Swarm's gsctl](https://github.com/giantswarm/gsctl)
- [Git Bump](https://github.com/erdaltsksn/git-bump)
- [GitHub CLI](https://github.com/cli/cli)
- [GitHub Labeler](https://github.com/erdaltsksn/gh-label)
- [Golangci-lint](https://golangci-lint.run)
- [GopherJS](https://github.com/gopherjs/gopherjs)
- [GoReleaser](https://goreleaser.com)
- [Helm](https://helm.sh)
- [Hugo](https://gohugo.io)
- [Infracost](https://github.com/infracost/infracost)
- [Istio](https://istio.io)
- [Kool](https://github.com/kool-dev/kool)
- [Kubernetes](https://kubernetes.io/)
- [Kubescape](https://github.com/kubescape/kubescape)
- [KubeVirt](https://github.com/kubevirt/kubevirt)
- [Linkerd](https://linkerd.io/)
- [Mattermost-server](https://github.com/mattermost/mattermost-server)
- [Mercure](https://mercure.rocks/)
- [Meroxa CLI](https://github.com/meroxa/cli)
- [Metal Stack CLI](https://github.com/metal-stack/metalctl)
- [Moby (former Docker)](https://github.com/moby/moby)
- [Moldy](https://github.com/Moldy-Community/moldy)
- [Multi-gitter](https://github.com/lindell/multi-gitter)
- [Nanobox](https://github.com/nanobox-io/nanobox)/[Nanopack](https://github.com/nanopack)
- [nFPM](https://nfpm.goreleaser.com)
- [Okteto](https://github.com/okteto/okteto)
- [OpenShift](https://www.openshift.com/)
- [Ory Hydra](https://github.com/ory/hydra)
- [Ory Kratos](https://github.com/ory/kratos)
- [Pixie](https://github.com/pixie-io/pixie)
- [Polygon Edge](https://github.com/0xPolygon/polygon-edge)
- [Pouch](https://github.com/alibaba/pouch)
- [ProjectAtomic (enterprise)](https://www.projectatomic.io/)
- [Prototool](https://github.com/uber/prototool)
- [Pulumi](https://www.pulumi.com)
- [QRcp](https://github.com/claudiodangelis/qrcp)
- [Random](https://github.com/erdaltsksn/random)
- [Rclone](https://rclone.org/)
- [Scaleway CLI](https://github.com/scaleway/scaleway-cli)
- [Sia](https://github.com/SiaFoundation/siad)
- [Skaffold](https://skaffold.dev/)
- [Tendermint](https://github.com/tendermint/tendermint)
- [Twitch CLI](https://github.com/twitchdev/twitch-cli)
- [UpCloud CLI (`upctl`)](https://github.com/UpCloudLtd/upcloud-cli)
- [Vitess](https://vitess.io)
- VMware's [Tanzu Community Edition](https://github.com/vmware-tanzu/community-edition) & [Tanzu Framework](https://github.com/vmware-tanzu/tanzu-framework)
- [Werf](https://werf.io/)
- [ZITADEL](https://github.com/zitadel/zitadel)
07070100000B3A000081A4000000000000000000000001645E367C000010FD000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/shell_completions.go    // Copyright 2013-2023 The Cobra Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package cobra

import (
	"github.com/spf13/pflag"
)

// MarkFlagRequired instructs the various shell completion implementations to
// prioritize the named flag when performing completion,
// and causes your command to report an error if invoked without the flag.
func (c *Command) MarkFlagRequired(name string) error {
	return MarkFlagRequired(c.Flags(), name)
}

// MarkPersistentFlagRequired instructs the various shell completion implementations to
// prioritize the named persistent flag when performing completion,
// and causes your command to report an error if invoked without the flag.
func (c *Command) MarkPersistentFlagRequired(name string) error {
	return MarkFlagRequired(c.PersistentFlags(), name)
}

// MarkFlagRequired instructs the various shell completion implementations to
// prioritize the named flag when performing completion,
// and causes your command to report an error if invoked without the flag.
func MarkFlagRequired(flags *pflag.FlagSet, name string) error {
	return flags.SetAnnotation(name, BashCompOneRequiredFlag, []string{"true"})
}

// MarkFlagFilename instructs the various shell completion implementations to
// limit completions for the named flag to the specified file extensions.
func (c *Command) MarkFlagFilename(name string, extensions ...string) error {
	return MarkFlagFilename(c.Flags(), name, extensions...)
}

// MarkFlagCustom adds the BashCompCustom annotation to the named flag, if it exists.
// The bash completion script will call the bash function f for the flag.
//
// This will only work for bash completion.
// It is recommended to instead use c.RegisterFlagCompletionFunc(...) which allows
// to register a Go function which will work across all shells.
func (c *Command) MarkFlagCustom(name string, f string) error {
	return MarkFlagCustom(c.Flags(), name, f)
}

// MarkPersistentFlagFilename instructs the various shell completion
// implementations to limit completions for the named persistent flag to the
// specified file extensions.
func (c *Command) MarkPersistentFlagFilename(name string, extensions ...string) error {
	return MarkFlagFilename(c.PersistentFlags(), name, extensions...)
}

// MarkFlagFilename instructs the various shell completion implementations to
// limit completions for the named flag to the specified file extensions.
func MarkFlagFilename(flags *pflag.FlagSet, name string, extensions ...string) error {
	return flags.SetAnnotation(name, BashCompFilenameExt, extensions)
}

// MarkFlagCustom adds the BashCompCustom annotation to the named flag, if it exists.
// The bash completion script will call the bash function f for the flag.
//
// This will only work for bash completion.
// It is recommended to instead use c.RegisterFlagCompletionFunc(...) which allows
// to register a Go function which will work across all shells.
func MarkFlagCustom(flags *pflag.FlagSet, name string, f string) error {
	return flags.SetAnnotation(name, BashCompCustom, []string{f})
}

// MarkFlagDirname instructs the various shell completion implementations to
// limit completions for the named flag to directory names.
func (c *Command) MarkFlagDirname(name string) error {
	return MarkFlagDirname(c.Flags(), name)
}

// MarkPersistentFlagDirname instructs the various shell completion
// implementations to limit completions for the named persistent flag to
// directory names.
func (c *Command) MarkPersistentFlagDirname(name string) error {
	return MarkFlagDirname(c.PersistentFlags(), name)
}

// MarkFlagDirname instructs the various shell completion implementations to
// limit completions for the named flag to directory names.
func MarkFlagDirname(flags *pflag.FlagSet, name string) error {
	return flags.SetAnnotation(name, BashCompSubdirsInDir, []string{})
}
   07070100000B3B000081A4000000000000000000000001645E367C00006589000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/shell_completions.md    # Generating shell completions

Cobra can generate shell completions for multiple shells.
The currently supported shells are:
- Bash
- Zsh
- fish
- PowerShell

Cobra will automatically provide your program with a fully functional `completion` command,
similarly to how it provides the `help` command.

## Creating your own completion command

If you do not wish to use the default `completion` command, you can choose to
provide your own, which will take precedence over the default one. (This also provides
backwards-compatibility with programs that already have their own `completion` command.)

If you are using the `cobra-cli` generator,
which can be found at [spf13/cobra-cli](https://github.com/spf13/cobra-cli),
you can create a completion command by running

```bash
cobra-cli add completion
```
and then modifying the generated `cmd/completion.go` file to look something like this
(writing the shell script to stdout allows the most flexible use):

```go
var completionCmd = &cobra.Command{
	Use:   "completion [bash|zsh|fish|powershell]",
	Short: "Generate completion script",
	Long: fmt.Sprintf(`To load completions:

Bash:

  $ source <(%[1]s completion bash)

  # To load completions for each session, execute once:
  # Linux:
  $ %[1]s completion bash > /etc/bash_completion.d/%[1]s
  # macOS:
  $ %[1]s completion bash > $(brew --prefix)/etc/bash_completion.d/%[1]s

Zsh:

  # If shell completion is not already enabled in your environment,
  # you will need to enable it.  You can execute the following once:

  $ echo "autoload -U compinit; compinit" >> ~/.zshrc

  # To load completions for each session, execute once:
  $ %[1]s completion zsh > "${fpath[1]}/_%[1]s"

  # You will need to start a new shell for this setup to take effect.

fish:

  $ %[1]s completion fish | source

  # To load completions for each session, execute once:
  $ %[1]s completion fish > ~/.config/fish/completions/%[1]s.fish

PowerShell:

  PS> %[1]s completion powershell | Out-String | Invoke-Expression

  # To load completions for every new session, run:
  PS> %[1]s completion powershell > %[1]s.ps1
  # and source this file from your PowerShell profile.
`,cmd.Root().Name()),
	DisableFlagsInUseLine: true,
	ValidArgs:             []string{"bash", "zsh", "fish", "powershell"},
	Args:                  cobra.MatchAll(cobra.ExactArgs(1), cobra.OnlyValidArgs),
	Run: func(cmd *cobra.Command, args []string) {
		switch args[0] {
		case "bash":
			cmd.Root().GenBashCompletion(os.Stdout)
		case "zsh":
			cmd.Root().GenZshCompletion(os.Stdout)
		case "fish":
			cmd.Root().GenFishCompletion(os.Stdout, true)
		case "powershell":
			cmd.Root().GenPowerShellCompletionWithDesc(os.Stdout)
		}
	},
}
```

**Note:** The cobra generator may include messages printed to stdout, for example, if the config file is loaded; this will break the auto-completion script so must be removed.

## Adapting the default completion command

Cobra provides a few options for the default `completion` command.  To configure such options you must set
the `CompletionOptions` field on the *root* command.

To tell Cobra *not* to provide the default `completion` command:
```
rootCmd.CompletionOptions.DisableDefaultCmd = true
```

To tell Cobra to mark the default `completion` command as *hidden*:
```
rootCmd.CompletionOptions.HiddenDefaultCmd = true
```

To tell Cobra *not* to provide the user with the `--no-descriptions` flag to the completion sub-commands:
```
rootCmd.CompletionOptions.DisableNoDescFlag = true
```

To tell Cobra to completely disable descriptions for completions:
```
rootCmd.CompletionOptions.DisableDescriptions = true
```

# Customizing completions

The generated completion scripts will automatically handle completing commands and flags.  However, you can make your completions much more powerful by providing information to complete your program's nouns and flag values.

## Completion of nouns

### Static completion of nouns

Cobra allows you to provide a pre-defined list of completion choices for your nouns using the `ValidArgs` field.
For example, if you want `kubectl get [tab][tab]` to show a list of valid "nouns" you have to set them.
Some simplified code from `kubectl get` looks like:

```go
validArgs = []string{ "pod", "node", "service", "replicationcontroller" }

cmd := &cobra.Command{
	Use:     "get [(-o|--output=)json|yaml|template|...] (RESOURCE [NAME] | RESOURCE/NAME ...)",
	Short:   "Display one or many resources",
	Long:    get_long,
	Example: get_example,
	Run: func(cmd *cobra.Command, args []string) {
		cobra.CheckErr(RunGet(f, out, cmd, args))
	},
	ValidArgs: validArgs,
}
```

Notice we put the `ValidArgs` field on the `get` sub-command. Doing so will give results like:

```bash
$ kubectl get [tab][tab]
node   pod   replicationcontroller   service
```

#### Aliases for nouns

If your nouns have aliases, you can define them alongside `ValidArgs` using `ArgAliases`:

```go
argAliases = []string { "pods", "nodes", "services", "svc", "replicationcontrollers", "rc" }

cmd := &cobra.Command{
    ...
	ValidArgs:  validArgs,
	ArgAliases: argAliases
}
```

The aliases are shown to the user on tab completion only if no completions were found within sub-commands or `ValidArgs`.

### Dynamic completion of nouns

In some cases it is not possible to provide a list of completions in advance.  Instead, the list of completions must be determined at execution-time. In a similar fashion as for static completions, you can use the `ValidArgsFunction` field to provide a Go function that Cobra will execute when it needs the list of completion choices for the nouns of a command.  Note that either `ValidArgs` or `ValidArgsFunction` can be used for a single cobra command, but not both.
Simplified code from `helm status` looks like:

```go
cmd := &cobra.Command{
	Use:   "status RELEASE_NAME",
	Short: "Display the status of the named release",
	Long:  status_long,
	RunE: func(cmd *cobra.Command, args []string) {
		RunGet(args[0])
	},
	ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
		if len(args) != 0 {
			return nil, cobra.ShellCompDirectiveNoFileComp
		}
		return getReleasesFromCluster(toComplete), cobra.ShellCompDirectiveNoFileComp
	},
}
```
Where `getReleasesFromCluster()` is a Go function that obtains the list of current Helm releases running on the Kubernetes cluster.
Notice we put the `ValidArgsFunction` on the `status` sub-command. Let's assume the Helm releases on the cluster are: `harbor`, `notary`, `rook` and `thanos` then this dynamic completion will give results like:

```bash
$ helm status [tab][tab]
harbor notary rook thanos
```
You may have noticed the use of `cobra.ShellCompDirective`.  These directives are bit fields allowing to control some shell completion behaviors for your particular completion.  You can combine them with the bit-or operator such as `cobra.ShellCompDirectiveNoSpace | cobra.ShellCompDirectiveNoFileComp`
```go
// Indicates that the shell will perform its default behavior after completions
// have been provided (this implies none of the other directives).
ShellCompDirectiveDefault

// Indicates an error occurred and completions should be ignored.
ShellCompDirectiveError

// Indicates that the shell should not add a space after the completion,
// even if there is a single completion provided.
ShellCompDirectiveNoSpace

// Indicates that the shell should not provide file completion even when
// no completion is provided.
ShellCompDirectiveNoFileComp

// Indicates that the returned completions should be used as file extension filters.
// For example, to complete only files of the form *.json or *.yaml:
//    return []string{"yaml", "json"}, ShellCompDirectiveFilterFileExt
// For flags, using MarkFlagFilename() and MarkPersistentFlagFilename()
// is a shortcut to using this directive explicitly.
//
ShellCompDirectiveFilterFileExt

// Indicates that only directory names should be provided in file completion.
// For example:
//    return nil, ShellCompDirectiveFilterDirs
// For flags, using MarkFlagDirname() is a shortcut to using this directive explicitly.
//
// To request directory names within another directory, the returned completions
// should specify a single directory name within which to search. For example,
// to complete directories within "themes/":
//    return []string{"themes"}, ShellCompDirectiveFilterDirs
//
ShellCompDirectiveFilterDirs

// ShellCompDirectiveKeepOrder indicates that the shell should preserve the order
// in which the completions are provided
ShellCompDirectiveKeepOrder
```

***Note***: When using the `ValidArgsFunction`, Cobra will call your registered function after having parsed all flags and arguments provided in the command-line.  You therefore don't need to do this parsing yourself.  For example, when a user calls `helm status --namespace my-rook-ns [tab][tab]`, Cobra will call your registered `ValidArgsFunction` after having parsed the `--namespace` flag, as it would have done when calling the `RunE` function.

#### Debugging

Cobra achieves dynamic completion through the use of a hidden command called by the completion script.  To debug your Go completion code, you can call this hidden command directly:
```bash
$ helm __complete status har<ENTER>
harbor
:4
Completion ended with directive: ShellCompDirectiveNoFileComp # This is on stderr
```
***Important:*** If the noun to complete is empty (when the user has not yet typed any letters of that noun), you must pass an empty parameter to the `__complete` command:
```bash
$ helm __complete status ""<ENTER>
harbor
notary
rook
thanos
:4
Completion ended with directive: ShellCompDirectiveNoFileComp # This is on stderr
```
Calling the `__complete` command directly allows you to run the Go debugger to troubleshoot your code.  You can also add printouts to your code; Cobra provides the following functions to use for printouts in Go completion code:
```go
// Prints to the completion script debug file (if BASH_COMP_DEBUG_FILE
// is set to a file path) and optionally prints to stderr.
cobra.CompDebug(msg string, printToStdErr bool) {
cobra.CompDebugln(msg string, printToStdErr bool)

// Prints to the completion script debug file (if BASH_COMP_DEBUG_FILE
// is set to a file path) and to stderr.
cobra.CompError(msg string)
cobra.CompErrorln(msg string)
```
***Important:*** You should **not** leave traces that print directly to stdout in your completion code as they will be interpreted as completion choices by the completion script.  Instead, use the cobra-provided debugging traces functions mentioned above.

## Completions for flags

### Mark flags as required

Most of the time completions will only show sub-commands. But if a flag is required to make a sub-command work, you probably want it to show up when the user types [tab][tab].  You can mark a flag as 'Required' like so:

```go
cmd.MarkFlagRequired("pod")
cmd.MarkFlagRequired("container")
```

and you'll get something like

```bash
$ kubectl exec [tab][tab]
-c            --container=  -p            --pod=
```

### Specify dynamic flag completion

As for nouns, Cobra provides a way of defining dynamic completion of flags.  To provide a Go function that Cobra will execute when it needs the list of completion choices for a flag, you must register the function using the `command.RegisterFlagCompletionFunc()` function.

```go
flagName := "output"
cmd.RegisterFlagCompletionFunc(flagName, func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
	return []string{"json", "table", "yaml"}, cobra.ShellCompDirectiveDefault
})
```
Notice that calling `RegisterFlagCompletionFunc()` is done through the `command` with which the flag is associated.  In our example this dynamic completion will give results like so:

```bash
$ helm status --output [tab][tab]
json table yaml
```

#### Debugging

You can also easily debug your Go completion code for flags:
```bash
$ helm __complete status --output ""
json
table
yaml
:4
Completion ended with directive: ShellCompDirectiveNoFileComp # This is on stderr
```
***Important:*** You should **not** leave traces that print to stdout in your completion code as they will be interpreted as completion choices by the completion script.  Instead, use the cobra-provided debugging traces functions mentioned further above.

### Specify valid filename extensions for flags that take a filename

To limit completions of flag values to file names with certain extensions you can either use the different `MarkFlagFilename()` functions or a combination of `RegisterFlagCompletionFunc()` and `ShellCompDirectiveFilterFileExt`, like so:
```go
flagName := "output"
cmd.MarkFlagFilename(flagName, "yaml", "json")
```
or
```go
flagName := "output"
cmd.RegisterFlagCompletionFunc(flagName, func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
	return []string{"yaml", "json"}, ShellCompDirectiveFilterFileExt})
```

### Limit flag completions to directory names

To limit completions of flag values to directory names you can either use the `MarkFlagDirname()` functions or a combination of `RegisterFlagCompletionFunc()` and `ShellCompDirectiveFilterDirs`, like so:
```go
flagName := "output"
cmd.MarkFlagDirname(flagName)
```
or
```go
flagName := "output"
cmd.RegisterFlagCompletionFunc(flagName, func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
	return nil, cobra.ShellCompDirectiveFilterDirs
})
```
To limit completions of flag values to directory names *within another directory* you can use a combination of `RegisterFlagCompletionFunc()` and `ShellCompDirectiveFilterDirs` like so:
```go
flagName := "output"
cmd.RegisterFlagCompletionFunc(flagName, func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
	return []string{"themes"}, cobra.ShellCompDirectiveFilterDirs
})
```
### Descriptions for completions

Cobra provides support for completion descriptions.  Such descriptions are supported for each shell
(however, for bash, it is only available in the [completion V2 version](#bash-completion-v2)).
For commands and flags, Cobra will provide the descriptions automatically, based on usage information.
For example, using zsh:
```
$ helm s[tab]
search  -- search for a keyword in charts
show    -- show information of a chart
status  -- displays the status of the named release
```
while using fish:
```
$ helm s[tab]
search  (search for a keyword in charts)  show  (show information of a chart)  status  (displays the status of the named release)
```

Cobra allows you to add descriptions to your own completions.  Simply add the description text after each completion, following a `\t` separator.  This technique applies to completions returned by `ValidArgs`, `ValidArgsFunction` and `RegisterFlagCompletionFunc()`.  For example:
```go
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
	return []string{"harbor\tAn image registry", "thanos\tLong-term metrics"}, cobra.ShellCompDirectiveNoFileComp
}}
```
or
```go
ValidArgs: []string{"bash\tCompletions for bash", "zsh\tCompletions for zsh"}
```

If you don't want to show descriptions in the completions, you can add `--no-descriptions` to the default `completion` command to disable them, like:

```bash
$ source <(helm completion bash)
$ helm completion [tab][tab]
bash        (generate autocompletion script for bash)        powershell  (generate autocompletion script for powershell)
fish        (generate autocompletion script for fish)        zsh         (generate autocompletion script for zsh)

$ source <(helm completion bash --no-descriptions)
$ helm completion [tab][tab]
bash        fish        powershell  zsh
```
## Bash completions

### Dependencies

The bash completion script generated by Cobra requires the `bash_completion` package. You should update the help text of your completion command to show how to install the `bash_completion` package ([Kubectl docs](https://kubernetes.io/docs/tasks/tools/install-kubectl/#enabling-shell-autocompletion))

### Aliases

You can also configure `bash` aliases for your program and they will also support completions.

```bash
alias aliasname=origcommand
complete -o default -F __start_origcommand aliasname

# and now when you run `aliasname` completion will make
# suggestions as it did for `origcommand`.

$ aliasname <tab><tab>
completion     firstcommand   secondcommand
```
### Bash legacy dynamic completions

For backward compatibility, Cobra still supports its bash legacy dynamic completion solution.
Please refer to [Bash Completions](bash_completions.md) for details.

### Bash completion V2

Cobra provides two versions for bash completion.  The original bash completion (which started it all!) can be used by calling
`GenBashCompletion()` or `GenBashCompletionFile()`.

A new V2 bash completion version is also available.  This version can be used by calling `GenBashCompletionV2()` or
`GenBashCompletionFileV2()`.  The V2 version does **not** support the legacy dynamic completion
(see [Bash Completions](bash_completions.md)) but instead works only with the Go dynamic completion
solution described in this document.
Unless your program already uses the legacy dynamic completion solution, it is recommended that you use the bash
completion V2 solution which provides the following extra features:
- Supports completion descriptions (like the other shells)
- Small completion script of less than 300 lines (v1 generates scripts of thousands of lines; `kubectl` for example has a bash v1 completion script of over 13K lines)
- Streamlined user experience thanks to a completion behavior aligned with the other shells 

`Bash` completion V2 supports descriptions for completions. When calling `GenBashCompletionV2()` or `GenBashCompletionFileV2()`
you must provide these functions with a parameter indicating if the completions should be annotated with a description; Cobra
will provide the description automatically based on usage information.  You can choose to make this option configurable by
your users.

```
# With descriptions
$ helm s[tab][tab]
search  (search for a keyword in charts)           status  (display the status of the named release)
show    (show information of a chart)

# Without descriptions
$ helm s[tab][tab]
search  show  status
```
**Note**: Cobra's default `completion` command uses bash completion V2.  If for some reason you need to use bash completion V1, you will need to implement your own `completion` command. 
## Zsh completions

Cobra supports native zsh completion generated from the root `cobra.Command`.
The generated completion script should be put somewhere in your `$fpath` and be named
`_<yourProgram>`.  You will need to start a new shell for the completions to become available.

Zsh supports descriptions for completions. Cobra will provide the description automatically,
based on usage information. Cobra provides a way to completely disable such descriptions by
using `GenZshCompletionNoDesc()` or `GenZshCompletionFileNoDesc()`. You can choose to make
this a configurable option to your users.
```
# With descriptions
$ helm s[tab]
search  -- search for a keyword in charts
show    -- show information of a chart
status  -- displays the status of the named release

# Without descriptions
$ helm s[tab]
search  show  status
```
*Note*: Because of backward-compatibility requirements, we were forced to have a different API to disable completion descriptions between `zsh` and `fish`.

### Limitations

* Custom completions implemented in Bash scripting (legacy) are not supported and will be ignored for `zsh` (including the use of the `BashCompCustom` flag annotation).
  * You should instead use `ValidArgsFunction` and `RegisterFlagCompletionFunc()` which are portable to the different shells (`bash`, `zsh`, `fish`, `powershell`).
* The function `MarkFlagCustom()` is not supported and will be ignored for `zsh`.
  * You should instead use `RegisterFlagCompletionFunc()`.

### Zsh completions standardization

Cobra 1.1 standardized its zsh completion support to align it with its other shell completions.  Although the API was kept backward-compatible, some small changes in behavior were introduced.
Please refer to [Zsh Completions](zsh_completions.md) for details.

## fish completions

Cobra supports native fish completions generated from the root `cobra.Command`.  You can use the `command.GenFishCompletion()` or `command.GenFishCompletionFile()` functions. You must provide these functions with a parameter indicating if the completions should be annotated with a description; Cobra will provide the description automatically based on usage information.  You can choose to make this option configurable by your users.
```
# With descriptions
$ helm s[tab]
search  (search for a keyword in charts)  show  (show information of a chart)  status  (displays the status of the named release)

# Without descriptions
$ helm s[tab]
search  show  status
```
*Note*: Because of backward-compatibility requirements, we were forced to have a different API to disable completion descriptions between `zsh` and `fish`.

### Limitations

* Custom completions implemented in bash scripting (legacy) are not supported and will be ignored for `fish` (including the use of the `BashCompCustom` flag annotation).
  * You should instead use `ValidArgsFunction` and `RegisterFlagCompletionFunc()` which are portable to the different shells (`bash`, `zsh`, `fish`, `powershell`).
* The function `MarkFlagCustom()` is not supported and will be ignored for `fish`.
  * You should instead use `RegisterFlagCompletionFunc()`.
* The following flag completion annotations are not supported and will be ignored for `fish`:
  * `BashCompFilenameExt` (filtering by file extension)
  * `BashCompSubdirsInDir` (filtering by directory)
* The functions corresponding to the above annotations are consequently not supported and will be ignored for `fish`:
  * `MarkFlagFilename()` and `MarkPersistentFlagFilename()` (filtering by file extension)
  * `MarkFlagDirname()` and `MarkPersistentFlagDirname()` (filtering by directory)
* Similarly, the following completion directives are not supported and will be ignored for `fish`:
  * `ShellCompDirectiveFilterFileExt` (filtering by file extension)
  * `ShellCompDirectiveFilterDirs` (filtering by directory)

## PowerShell completions

Cobra supports native PowerShell completions generated from the root `cobra.Command`. You can use the `command.GenPowerShellCompletion()` or `command.GenPowerShellCompletionFile()` functions. To include descriptions use `command.GenPowerShellCompletionWithDesc()` and `command.GenPowerShellCompletionFileWithDesc()`. Cobra will provide the description automatically based on usage information. You can choose to make this option configurable by your users.

The script is designed to support all three PowerShell completion modes:

* TabCompleteNext (default windows style - on each key press the next option is displayed)
* Complete (works like bash)
* MenuComplete (works like zsh)

You set the mode with `Set-PSReadLineKeyHandler -Key Tab -Function <mode>`. Descriptions are only displayed when using the `Complete` or `MenuComplete` mode.

Users need PowerShell version 5.0 or above, which comes with Windows 10 and can be downloaded separately for Windows 7 or 8.1. They can then write the completions to a file and source this file from their PowerShell profile, which is referenced by the `$Profile` environment variable. See `Get-Help about_Profiles` for more info about PowerShell profiles.

```
# With descriptions and Mode 'Complete'
$ helm s[tab]
search  (search for a keyword in charts)  show  (show information of a chart)  status  (displays the status of the named release)

# With descriptions and Mode 'MenuComplete' The description of the current selected value will be displayed below the suggestions.
$ helm s[tab]
search    show     status  

search for a keyword in charts

# Without descriptions
$ helm s[tab]
search  show  status
```
### Aliases

You can also configure `powershell` aliases for your program and they will also support completions.

```
$ sal aliasname origcommand
$ Register-ArgumentCompleter -CommandName 'aliasname' -ScriptBlock $__origcommandCompleterBlock

# and now when you run `aliasname` completion will make
# suggestions as it did for `origcommand`.

$ aliasname <tab>
completion     firstcommand   secondcommand
```
The name of the completer block variable is of the form `$__<programName>CompleterBlock` where every `-` and `:` in the program name have been replaced with `_`, to respect powershell naming syntax.

### Limitations

* Custom completions implemented in bash scripting (legacy) are not supported and will be ignored for `powershell` (including the use of the `BashCompCustom` flag annotation).
  * You should instead use `ValidArgsFunction` and `RegisterFlagCompletionFunc()` which are portable to the different shells (`bash`, `zsh`, `fish`, `powershell`).
* The function `MarkFlagCustom()` is not supported and will be ignored for `powershell`.
  * You should instead use `RegisterFlagCompletionFunc()`.
* The following flag completion annotations are not supported and will be ignored for `powershell`:
  * `BashCompFilenameExt` (filtering by file extension)
  * `BashCompSubdirsInDir` (filtering by directory)
* The functions corresponding to the above annotations are consequently not supported and will be ignored for `powershell`:
  * `MarkFlagFilename()` and `MarkPersistentFlagFilename()` (filtering by file extension)
  * `MarkFlagDirname()` and `MarkPersistentFlagDirname()` (filtering by directory)
* Similarly, the following completion directives are not supported and will be ignored for `powershell`:
  * `ShellCompDirectiveFilterFileExt` (filtering by file extension)
  * `ShellCompDirectiveFilterDirs` (filtering by directory)
   07070100000B3C000081A4000000000000000000000001645E367C00005889000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/user_guide.md   # User Guide

While you are welcome to provide your own organization, typically a Cobra-based
application will follow the following organizational structure:

```
  ▾ appName/
    ▾ cmd/
        add.go
        your.go
        commands.go
        here.go
      main.go
```

In a Cobra app, typically the main.go file is very bare. It serves one purpose: initializing Cobra.

```go
package main

import (
  "{pathToYourApp}/cmd"
)

func main() {
  cmd.Execute()
}
```

## Using the Cobra Generator

Cobra-CLI is its own program that will create your application and add any
commands you want. It's the easiest way to incorporate Cobra into your application.

For complete details on using the Cobra generator, please refer to [The Cobra-CLI Generator README](https://github.com/spf13/cobra-cli/blob/main/README.md)

## Using the Cobra Library

To manually implement Cobra you need to create a bare main.go file and a rootCmd file.
You will optionally provide additional commands as you see fit.

### Create rootCmd

Cobra doesn't require any special constructors. Simply create your commands.

Ideally you place this in app/cmd/root.go:

```go
var rootCmd = &cobra.Command{
  Use:   "hugo",
  Short: "Hugo is a very fast static site generator",
  Long: `A Fast and Flexible Static Site Generator built with
                love by spf13 and friends in Go.
                Complete documentation is available at https://gohugo.io/documentation/`,
  Run: func(cmd *cobra.Command, args []string) {
    // Do Stuff Here
  },
}

func Execute() {
  if err := rootCmd.Execute(); err != nil {
    fmt.Fprintln(os.Stderr, err)
    os.Exit(1)
  }
}
```

You will additionally define flags and handle configuration in your init() function.

For example cmd/root.go:

```go
package cmd

import (
	"fmt"
	"os"

	"github.com/spf13/cobra"
	"github.com/spf13/viper"
)

var (
	// Used for flags.
	cfgFile     string
	userLicense string

	rootCmd = &cobra.Command{
		Use:   "cobra-cli",
		Short: "A generator for Cobra based Applications",
		Long: `Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.`,
	}
)

// Execute executes the root command.
func Execute() error {
	return rootCmd.Execute()
}

func init() {
	cobra.OnInitialize(initConfig)

	rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.cobra.yaml)")
	rootCmd.PersistentFlags().StringP("author", "a", "YOUR NAME", "author name for copyright attribution")
	rootCmd.PersistentFlags().StringVarP(&userLicense, "license", "l", "", "name of license for the project")
	rootCmd.PersistentFlags().Bool("viper", true, "use Viper for configuration")
	viper.BindPFlag("author", rootCmd.PersistentFlags().Lookup("author"))
	viper.BindPFlag("useViper", rootCmd.PersistentFlags().Lookup("viper"))
	viper.SetDefault("author", "NAME HERE <EMAIL ADDRESS>")
	viper.SetDefault("license", "apache")

	rootCmd.AddCommand(addCmd)
	rootCmd.AddCommand(initCmd)
}

func initConfig() {
	if cfgFile != "" {
		// Use config file from the flag.
		viper.SetConfigFile(cfgFile)
	} else {
		// Find home directory.
		home, err := os.UserHomeDir()
		cobra.CheckErr(err)

		// Search config in home directory with name ".cobra" (without extension).
		viper.AddConfigPath(home)
		viper.SetConfigType("yaml")
		viper.SetConfigName(".cobra")
	}

	viper.AutomaticEnv()

	if err := viper.ReadInConfig(); err == nil {
		fmt.Println("Using config file:", viper.ConfigFileUsed())
	}
}
```

### Create your main.go

With the root command you need to have your main function execute it.
Execute should be run on the root for clarity, though it can be called on any command.

In a Cobra app, typically the main.go file is very bare. It serves one purpose: to initialize Cobra.

```go
package main

import (
  "{pathToYourApp}/cmd"
)

func main() {
  cmd.Execute()
}
```

### Create additional commands

Additional commands can be defined and typically are each given their own file
inside of the cmd/ directory.

If you wanted to create a version command you would create cmd/version.go and
populate it with the following:

```go
package cmd

import (
  "fmt"

  "github.com/spf13/cobra"
)

func init() {
  rootCmd.AddCommand(versionCmd)
}

var versionCmd = &cobra.Command{
  Use:   "version",
  Short: "Print the version number of Hugo",
  Long:  `All software has versions. This is Hugo's`,
  Run: func(cmd *cobra.Command, args []string) {
    fmt.Println("Hugo Static Site Generator v0.9 -- HEAD")
  },
}
```

### Organizing subcommands

A command may have subcommands which in turn may have other subcommands. This is achieved by using
`AddCommand`. In some cases, especially in larger applications, each subcommand may be defined in
its own go package.

The suggested approach is for the parent command to use `AddCommand` to add its most immediate
subcommands. For example, consider the following directory structure:

```text
├── cmd
│   ├── root.go
│   └── sub1
│       ├── sub1.go
│       └── sub2
│           ├── leafA.go
│           ├── leafB.go
│           └── sub2.go
└── main.go
```

In this case:

* The `init` function of `root.go` adds the command defined in `sub1.go` to the root command.
* The `init` function of `sub1.go` adds the command defined in `sub2.go` to the sub1 command.
* The `init` function of `sub2.go` adds the commands defined in `leafA.go` and `leafB.go` to the
  sub2 command.

This approach ensures the subcommands are always included at compile time while avoiding cyclic
references.

### Returning and handling errors

If you wish to return an error to the caller of a command, `RunE` can be used.

```go
package cmd

import (
  "fmt"

  "github.com/spf13/cobra"
)

func init() {
  rootCmd.AddCommand(tryCmd)
}

var tryCmd = &cobra.Command{
  Use:   "try",
  Short: "Try and possibly fail at something",
  RunE: func(cmd *cobra.Command, args []string) error {
    if err := someFunc(); err != nil {
	return err
    }
    return nil
  },
}
```

The error can then be caught at the execute function call.

## Working with Flags

Flags provide modifiers to control how the action command operates.

### Assign flags to a command

Since the flags are defined and used in different locations, we need to
define a variable outside with the correct scope to assign the flag to
work with.

```go
var Verbose bool
var Source string
```

There are two different approaches to assign a flag.

### Persistent Flags

A flag can be 'persistent', meaning that this flag will be available to the
command it's assigned to as well as every command under that command. For
global flags, assign a flag as a persistent flag on the root.

```go
rootCmd.PersistentFlags().BoolVarP(&Verbose, "verbose", "v", false, "verbose output")
```

### Local Flags

A flag can also be assigned locally, which will only apply to that specific command.

```go
localCmd.Flags().StringVarP(&Source, "source", "s", "", "Source directory to read from")
```

### Local Flag on Parent Commands

By default, Cobra only parses local flags on the target command, and any local flags on
parent commands are ignored. By enabling `Command.TraverseChildren`, Cobra will
parse local flags on each command before executing the target command.

```go
command := cobra.Command{
  Use: "print [OPTIONS] [COMMANDS]",
  TraverseChildren: true,
}
```

### Bind Flags with Config

You can also bind your flags with [viper](https://github.com/spf13/viper):
```go
var author string

func init() {
  rootCmd.PersistentFlags().StringVar(&author, "author", "YOUR NAME", "Author name for copyright attribution")
  viper.BindPFlag("author", rootCmd.PersistentFlags().Lookup("author"))
}
```

In this example, the persistent flag `author` is bound with `viper`.
**Note**: the variable `author` will not be set to the value from config,
when the `--author` flag is provided by user.

More in [viper documentation](https://github.com/spf13/viper#working-with-flags).

### Required flags

Flags are optional by default. If instead you wish your command to report an error
when a flag has not been set, mark it as required:
```go
rootCmd.Flags().StringVarP(&Region, "region", "r", "", "AWS region (required)")
rootCmd.MarkFlagRequired("region")
```

Or, for persistent flags:
```go
rootCmd.PersistentFlags().StringVarP(&Region, "region", "r", "", "AWS region (required)")
rootCmd.MarkPersistentFlagRequired("region")
```

### Flag Groups

If you have different flags that must be provided together (e.g. if they provide the `--username` flag they MUST provide the `--password` flag as well) then
Cobra can enforce that requirement:
```go
rootCmd.Flags().StringVarP(&u, "username", "u", "", "Username (required if password is set)")
rootCmd.Flags().StringVarP(&pw, "password", "p", "", "Password (required if username is set)")
rootCmd.MarkFlagsRequiredTogether("username", "password")
```

You can also prevent different flags from being provided together if they represent mutually
exclusive options such as specifying an output format as either `--json` or `--yaml` but never both:
```go
rootCmd.Flags().BoolVar(&ofJson, "json", false, "Output in JSON")
rootCmd.Flags().BoolVar(&ofYaml, "yaml", false, "Output in YAML")
rootCmd.MarkFlagsMutuallyExclusive("json", "yaml")
```

In both of these cases:
  - both local and persistent flags can be used
    - **NOTE:** the group is only enforced on commands where every flag is defined
  - a flag may appear in multiple groups
  - a group may contain any number of flags

## Positional and Custom Arguments

Validation of positional arguments can be specified using the `Args` field of `Command`.
The following validators are built in:

- Number of arguments:
  - `NoArgs` - report an error if there are any positional args.
  - `ArbitraryArgs` - accept any number of args.
  - `MinimumNArgs(int)` - report an error if less than N positional args are provided.
  - `MaximumNArgs(int)` - report an error if more than N positional args are provided.
  - `ExactArgs(int)` - report an error if there are not exactly N positional args.
  - `RangeArgs(min, max)` - report an error if the number of args is not between `min` and `max`.
- Content of the arguments:
  - `OnlyValidArgs` - report an error if there are any positional args not specified in the `ValidArgs` field of `Command`, which can optionally be set to a list of valid values for positional args.

If `Args` is undefined or `nil`, it defaults to `ArbitraryArgs`.

Moreover, `MatchAll(pargs ...PositionalArgs)` enables combining existing checks with arbitrary other checks.
For instance, if you want to report an error if there are not exactly N positional args OR if there are any positional
args that are not in the `ValidArgs` field of `Command`, you can call `MatchAll` on `ExactArgs` and `OnlyValidArgs`, as
shown below:

```go
var cmd = &cobra.Command{
  Short: "hello",
  Args: cobra.MatchAll(cobra.ExactArgs(2), cobra.OnlyValidArgs),
  Run: func(cmd *cobra.Command, args []string) {
    fmt.Println("Hello, World!")
  },
}
```

It is possible to set any custom validator that satisfies `func(cmd *cobra.Command, args []string) error`.
For example:

```go
var cmd = &cobra.Command{
  Short: "hello",
  Args: func(cmd *cobra.Command, args []string) error {
    // Optionally run one of the validators provided by cobra
    if err := cobra.MinimumNArgs(1)(cmd, args); err != nil {
        return err
    }
    // Run the custom validation logic
    if myapp.IsValidColor(args[0]) {
      return nil
    }
    return fmt.Errorf("invalid color specified: %s", args[0])
  },
  Run: func(cmd *cobra.Command, args []string) {
    fmt.Println("Hello, World!")
  },
}
```

## Example

In the example below, we have defined three commands. Two are at the top level
and one (cmdTimes) is a child of one of the top commands. In this case the root
is not executable, meaning that a subcommand is required. This is accomplished
by not providing a 'Run' for the 'rootCmd'.

We have only defined one flag for a single command.

More documentation about flags is available at https://github.com/spf13/pflag

```go
package main

import (
  "fmt"
  "strings"

  "github.com/spf13/cobra"
)

func main() {
  var echoTimes int

  var cmdPrint = &cobra.Command{
    Use:   "print [string to print]",
    Short: "Print anything to the screen",
    Long: `print is for printing anything back to the screen.
For many years people have printed back to the screen.`,
    Args: cobra.MinimumNArgs(1),
    Run: func(cmd *cobra.Command, args []string) {
      fmt.Println("Print: " + strings.Join(args, " "))
    },
  }

  var cmdEcho = &cobra.Command{
    Use:   "echo [string to echo]",
    Short: "Echo anything to the screen",
    Long: `echo is for echoing anything back.
Echo works a lot like print, except it has a child command.`,
    Args: cobra.MinimumNArgs(1),
    Run: func(cmd *cobra.Command, args []string) {
      fmt.Println("Echo: " + strings.Join(args, " "))
    },
  }

  var cmdTimes = &cobra.Command{
    Use:   "times [string to echo]",
    Short: "Echo anything to the screen more times",
    Long: `echo things multiple times back to the user by providing
a count and a string.`,
    Args: cobra.MinimumNArgs(1),
    Run: func(cmd *cobra.Command, args []string) {
      for i := 0; i < echoTimes; i++ {
        fmt.Println("Echo: " + strings.Join(args, " "))
      }
    },
  }

  cmdTimes.Flags().IntVarP(&echoTimes, "times", "t", 1, "times to echo the input")

  var rootCmd = &cobra.Command{Use: "app"}
  rootCmd.AddCommand(cmdPrint, cmdEcho)
  cmdEcho.AddCommand(cmdTimes)
  rootCmd.Execute()
}
```

For a more complete example of a larger application, please checkout [Hugo](https://gohugo.io/).

## Help Command

Cobra automatically adds a help command to your application when you have subcommands.
This will be called when a user runs 'app help'. Additionally, help will also
support all other commands as input. Say, for instance, you have a command called
'create' without any additional configuration; Cobra will work when 'app help
create' is called.  Every command will automatically have the '--help' flag added.

### Example

The following output is automatically generated by Cobra. Nothing beyond the
command and flag definitions are needed.

    $ cobra-cli help

    Cobra is a CLI library for Go that empowers applications.
    This application is a tool to generate the needed files
    to quickly create a Cobra application.

    Usage:
      cobra-cli [command]

    Available Commands:
      add         Add a command to a Cobra Application
      completion  Generate the autocompletion script for the specified shell
      help        Help about any command
      init        Initialize a Cobra Application

    Flags:
      -a, --author string    author name for copyright attribution (default "YOUR NAME")
          --config string    config file (default is $HOME/.cobra.yaml)
      -h, --help             help for cobra-cli
      -l, --license string   name of license for the project
          --viper            use Viper for configuration

    Use "cobra-cli [command] --help" for more information about a command.


Help is just a command like any other. There is no special logic or behavior
around it. In fact, you can provide your own if you want.

### Grouping commands in help

Cobra supports grouping of available commands in the help output.  To group commands, each group must be explicitly
defined using `AddGroup()` on the parent command.  Then a subcommand can be added to a group using the `GroupID` element
of that subcommand. The groups will appear in the help output in the same order as they are defined using different
calls to `AddGroup()`.  If you use the generated `help` or `completion` commands, you can set their group ids using
`SetHelpCommandGroupId()` and `SetCompletionCommandGroupId()` on the root command, respectively.

### Defining your own help

You can provide your own Help command or your own template for the default command to use
with the following functions:

```go
cmd.SetHelpCommand(cmd *Command)
cmd.SetHelpFunc(f func(*Command, []string))
cmd.SetHelpTemplate(s string)
```

The latter two will also apply to any children commands.

## Usage Message

When the user provides an invalid flag or invalid command, Cobra responds by
showing the user the 'usage'.

### Example
You may recognize this from the help above. That's because the default help
embeds the usage as part of its output.

    $ cobra-cli --invalid
    Error: unknown flag: --invalid
    Usage:
      cobra-cli [command]

    Available Commands:
      add         Add a command to a Cobra Application
      completion  Generate the autocompletion script for the specified shell
      help        Help about any command
      init        Initialize a Cobra Application

    Flags:
      -a, --author string    author name for copyright attribution (default "YOUR NAME")
          --config string    config file (default is $HOME/.cobra.yaml)
      -h, --help             help for cobra-cli
      -l, --license string   name of license for the project
          --viper            use Viper for configuration

    Use "cobra [command] --help" for more information about a command.

### Defining your own usage
You can provide your own usage function or template for Cobra to use.
Like help, the function and template are overridable through public methods:

```go
cmd.SetUsageFunc(f func(*Command) error)
cmd.SetUsageTemplate(s string)
```

## Version Flag

Cobra adds a top-level '--version' flag if the Version field is set on the root command.
Running an application with the '--version' flag will print the version to stdout using
the version template. The template can be customized using the
`cmd.SetVersionTemplate(s string)` function.

## PreRun and PostRun Hooks

It is possible to run functions before or after the main `Run` function of your command. The `PersistentPreRun` and `PreRun` functions will be executed before `Run`. `PersistentPostRun` and `PostRun` will be executed after `Run`.  The `Persistent*Run` functions will be inherited by children if they do not declare their own.  These functions are run in the following order:

- `PersistentPreRun`
- `PreRun`
- `Run`
- `PostRun`
- `PersistentPostRun`

An example of two commands which use all of these features is below.  When the subcommand is executed, it will run the root command's `PersistentPreRun` but not the root command's `PersistentPostRun`:

```go
package main

import (
  "fmt"

  "github.com/spf13/cobra"
)

func main() {

  var rootCmd = &cobra.Command{
    Use:   "root [sub]",
    Short: "My root command",
    PersistentPreRun: func(cmd *cobra.Command, args []string) {
      fmt.Printf("Inside rootCmd PersistentPreRun with args: %v\n", args)
    },
    PreRun: func(cmd *cobra.Command, args []string) {
      fmt.Printf("Inside rootCmd PreRun with args: %v\n", args)
    },
    Run: func(cmd *cobra.Command, args []string) {
      fmt.Printf("Inside rootCmd Run with args: %v\n", args)
    },
    PostRun: func(cmd *cobra.Command, args []string) {
      fmt.Printf("Inside rootCmd PostRun with args: %v\n", args)
    },
    PersistentPostRun: func(cmd *cobra.Command, args []string) {
      fmt.Printf("Inside rootCmd PersistentPostRun with args: %v\n", args)
    },
  }

  var subCmd = &cobra.Command{
    Use:   "sub [no options!]",
    Short: "My subcommand",
    PreRun: func(cmd *cobra.Command, args []string) {
      fmt.Printf("Inside subCmd PreRun with args: %v\n", args)
    },
    Run: func(cmd *cobra.Command, args []string) {
      fmt.Printf("Inside subCmd Run with args: %v\n", args)
    },
    PostRun: func(cmd *cobra.Command, args []string) {
      fmt.Printf("Inside subCmd PostRun with args: %v\n", args)
    },
    PersistentPostRun: func(cmd *cobra.Command, args []string) {
      fmt.Printf("Inside subCmd PersistentPostRun with args: %v\n", args)
    },
  }

  rootCmd.AddCommand(subCmd)

  rootCmd.SetArgs([]string{""})
  rootCmd.Execute()
  fmt.Println()
  rootCmd.SetArgs([]string{"sub", "arg1", "arg2"})
  rootCmd.Execute()
}
```

Output:
```
Inside rootCmd PersistentPreRun with args: []
Inside rootCmd PreRun with args: []
Inside rootCmd Run with args: []
Inside rootCmd PostRun with args: []
Inside rootCmd PersistentPostRun with args: []

Inside rootCmd PersistentPreRun with args: [arg1 arg2]
Inside subCmd PreRun with args: [arg1 arg2]
Inside subCmd Run with args: [arg1 arg2]
Inside subCmd PostRun with args: [arg1 arg2]
Inside subCmd PersistentPostRun with args: [arg1 arg2]
```

## Suggestions when "unknown command" happens

Cobra will print automatic suggestions when "unknown command" errors happen. This allows Cobra to behave similarly to the `git` command when a typo happens. For example:

```
$ hugo srever
Error: unknown command "srever" for "hugo"

Did you mean this?
        server

Run 'hugo --help' for usage.
```

Suggestions are automatically generated based on existing subcommands and use an implementation of [Levenshtein distance](https://en.wikipedia.org/wiki/Levenshtein_distance). Every registered command that matches a minimum distance of 2 (ignoring case) will be displayed as a suggestion.

If you need to disable suggestions or tweak the string distance in your command, use:

```go
command.DisableSuggestions = true
```

or

```go
command.SuggestionsMinimumDistance = 1
```

You can also explicitly set names for which a given command will be suggested using the `SuggestFor` attribute. This allows suggestions for strings that are not close in terms of string distance, but make sense in your set of commands but for which
you don't want aliases. Example:

```
$ kubectl remove
Error: unknown command "remove" for "kubectl"

Did you mean this?
        delete

Run 'kubectl help' for usage.
```

## Generating documentation for your command

Cobra can generate documentation based on subcommands, flags, etc. Read more about it in the [docs generation documentation](doc/README.md).

## Generating shell completions

Cobra can generate a shell-completion file for the following shells: bash, zsh, fish, PowerShell. If you add more information to your commands, these completions can be amazingly powerful and flexible.  Read more about it in [Shell Completions](shell_completions.md).

## Providing Active Help

Cobra makes use of the shell-completion system to define a framework allowing you to provide Active Help to your users.  Active Help are messages (hints, warnings, etc) printed as the program is being used.  Read more about it in [Active Help](active_help.md).
   07070100000B3D000081A4000000000000000000000001645E367C00002B0C000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/zsh_completions.go  // Copyright 2013-2023 The Cobra Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package cobra

import (
	"bytes"
	"fmt"
	"io"
	"os"
)

// GenZshCompletionFile generates zsh completion file including descriptions.
func (c *Command) GenZshCompletionFile(filename string) error {
	return c.genZshCompletionFile(filename, true)
}

// GenZshCompletion generates zsh completion file including descriptions
// and writes it to the passed writer.
func (c *Command) GenZshCompletion(w io.Writer) error {
	return c.genZshCompletion(w, true)
}

// GenZshCompletionFileNoDesc generates zsh completion file without descriptions.
func (c *Command) GenZshCompletionFileNoDesc(filename string) error {
	return c.genZshCompletionFile(filename, false)
}

// GenZshCompletionNoDesc generates zsh completion file without descriptions
// and writes it to the passed writer.
func (c *Command) GenZshCompletionNoDesc(w io.Writer) error {
	return c.genZshCompletion(w, false)
}

// MarkZshCompPositionalArgumentFile only worked for zsh and its behavior was
// not consistent with Bash completion. It has therefore been disabled.
// Instead, when no other completion is specified, file completion is done by
// default for every argument. One can disable file completion on a per-argument
// basis by using ValidArgsFunction and ShellCompDirectiveNoFileComp.
// To achieve file extension filtering, one can use ValidArgsFunction and
// ShellCompDirectiveFilterFileExt.
//
// Deprecated
func (c *Command) MarkZshCompPositionalArgumentFile(argPosition int, patterns ...string) error {
	return nil
}

// MarkZshCompPositionalArgumentWords only worked for zsh. It has therefore
// been disabled.
// To achieve the same behavior across all shells, one can use
// ValidArgs (for the first argument only) or ValidArgsFunction for
// any argument (can include the first one also).
//
// Deprecated
func (c *Command) MarkZshCompPositionalArgumentWords(argPosition int, words ...string) error {
	return nil
}

func (c *Command) genZshCompletionFile(filename string, includeDesc bool) error {
	outFile, err := os.Create(filename)
	if err != nil {
		return err
	}
	defer outFile.Close()

	return c.genZshCompletion(outFile, includeDesc)
}

func (c *Command) genZshCompletion(w io.Writer, includeDesc bool) error {
	buf := new(bytes.Buffer)
	genZshComp(buf, c.Name(), includeDesc)
	_, err := buf.WriteTo(w)
	return err
}

func genZshComp(buf io.StringWriter, name string, includeDesc bool) {
	compCmd := ShellCompRequestCmd
	if !includeDesc {
		compCmd = ShellCompNoDescRequestCmd
	}
	WriteStringAndCheck(buf, fmt.Sprintf(`#compdef %[1]s
compdef _%[1]s %[1]s

# zsh completion for %-36[1]s -*- shell-script -*-

__%[1]s_debug()
{
    local file="$BASH_COMP_DEBUG_FILE"
    if [[ -n ${file} ]]; then
        echo "$*" >> "${file}"
    fi
}

_%[1]s()
{
    local shellCompDirectiveError=%[3]d
    local shellCompDirectiveNoSpace=%[4]d
    local shellCompDirectiveNoFileComp=%[5]d
    local shellCompDirectiveFilterFileExt=%[6]d
    local shellCompDirectiveFilterDirs=%[7]d
    local shellCompDirectiveKeepOrder=%[8]d

    local lastParam lastChar flagPrefix requestComp out directive comp lastComp noSpace keepOrder
    local -a completions

    __%[1]s_debug "\n========= starting completion logic =========="
    __%[1]s_debug "CURRENT: ${CURRENT}, words[*]: ${words[*]}"

    # The user could have moved the cursor backwards on the command-line.
    # We need to trigger completion from the $CURRENT location, so we need
    # to truncate the command-line ($words) up to the $CURRENT location.
    # (We cannot use $CURSOR as its value does not work when a command is an alias.)
    words=("${=words[1,CURRENT]}")
    __%[1]s_debug "Truncated words[*]: ${words[*]},"

    lastParam=${words[-1]}
    lastChar=${lastParam[-1]}
    __%[1]s_debug "lastParam: ${lastParam}, lastChar: ${lastChar}"

    # For zsh, when completing a flag with an = (e.g., %[1]s -n=<TAB>)
    # completions must be prefixed with the flag
    setopt local_options BASH_REMATCH
    if [[ "${lastParam}" =~ '-.*=' ]]; then
        # We are dealing with a flag with an =
        flagPrefix="-P ${BASH_REMATCH}"
    fi

    # Prepare the command to obtain completions
    requestComp="${words[1]} %[2]s ${words[2,-1]}"
    if [ "${lastChar}" = "" ]; then
        # If the last parameter is complete (there is a space following it)
        # We add an extra empty parameter so we can indicate this to the go completion code.
        __%[1]s_debug "Adding extra empty parameter"
        requestComp="${requestComp} \"\""
    fi

    __%[1]s_debug "About to call: eval ${requestComp}"

    # Use eval to handle any environment variables and such
    out=$(eval ${requestComp} 2>/dev/null)
    __%[1]s_debug "completion output: ${out}"

    # Extract the directive integer following a : from the last line
    local lastLine
    while IFS='\n' read -r line; do
        lastLine=${line}
    done < <(printf "%%s\n" "${out[@]}")
    __%[1]s_debug "last line: ${lastLine}"

    if [ "${lastLine[1]}" = : ]; then
        directive=${lastLine[2,-1]}
        # Remove the directive including the : and the newline
        local suffix
        (( suffix=${#lastLine}+2))
        out=${out[1,-$suffix]}
    else
        # There is no directive specified.  Leave $out as is.
        __%[1]s_debug "No directive found.  Setting do default"
        directive=0
    fi

    __%[1]s_debug "directive: ${directive}"
    __%[1]s_debug "completions: ${out}"
    __%[1]s_debug "flagPrefix: ${flagPrefix}"

    if [ $((directive & shellCompDirectiveError)) -ne 0 ]; then
        __%[1]s_debug "Completion received error. Ignoring completions."
        return
    fi

    local activeHelpMarker="%[9]s"
    local endIndex=${#activeHelpMarker}
    local startIndex=$((${#activeHelpMarker}+1))
    local hasActiveHelp=0
    while IFS='\n' read -r comp; do
        # Check if this is an activeHelp statement (i.e., prefixed with $activeHelpMarker)
        if [ "${comp[1,$endIndex]}" = "$activeHelpMarker" ];then
            __%[1]s_debug "ActiveHelp found: $comp"
            comp="${comp[$startIndex,-1]}"
            if [ -n "$comp" ]; then
                compadd -x "${comp}"
                __%[1]s_debug "ActiveHelp will need delimiter"
                hasActiveHelp=1
            fi

            continue
        fi

        if [ -n "$comp" ]; then
            # If requested, completions are returned with a description.
            # The description is preceded by a TAB character.
            # For zsh's _describe, we need to use a : instead of a TAB.
            # We first need to escape any : as part of the completion itself.
            comp=${comp//:/\\:}

            local tab="$(printf '\t')"
            comp=${comp//$tab/:}

            __%[1]s_debug "Adding completion: ${comp}"
            completions+=${comp}
            lastComp=$comp
        fi
    done < <(printf "%%s\n" "${out[@]}")

    # Add a delimiter after the activeHelp statements, but only if:
    # - there are completions following the activeHelp statements, or
    # - file completion will be performed (so there will be choices after the activeHelp)
    if [ $hasActiveHelp -eq 1 ]; then
        if [ ${#completions} -ne 0 ] || [ $((directive & shellCompDirectiveNoFileComp)) -eq 0 ]; then
            __%[1]s_debug "Adding activeHelp delimiter"
            compadd -x "--"
            hasActiveHelp=0
        fi
    fi

    if [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ]; then
        __%[1]s_debug "Activating nospace."
        noSpace="-S ''"
    fi

    if [ $((directive & shellCompDirectiveKeepOrder)) -ne 0 ]; then
        __%[1]s_debug "Activating keep order."
        keepOrder="-V"
    fi

    if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then
        # File extension filtering
        local filteringCmd
        filteringCmd='_files'
        for filter in ${completions[@]}; do
            if [ ${filter[1]} != '*' ]; then
                # zsh requires a glob pattern to do file filtering
                filter="\*.$filter"
            fi
            filteringCmd+=" -g $filter"
        done
        filteringCmd+=" ${flagPrefix}"

        __%[1]s_debug "File filtering command: $filteringCmd"
        _arguments '*:filename:'"$filteringCmd"
    elif [ $((directive & shellCompDirectiveFilterDirs)) -ne 0 ]; then
        # File completion for directories only
        local subdir
        subdir="${completions[1]}"
        if [ -n "$subdir" ]; then
            __%[1]s_debug "Listing directories in $subdir"
            pushd "${subdir}" >/dev/null 2>&1
        else
            __%[1]s_debug "Listing directories in ."
        fi

        local result
        _arguments '*:dirname:_files -/'" ${flagPrefix}"
        result=$?
        if [ -n "$subdir" ]; then
            popd >/dev/null 2>&1
        fi
        return $result
    else
        __%[1]s_debug "Calling _describe"
        if eval _describe $keepOrder "completions" completions $flagPrefix $noSpace; then
            __%[1]s_debug "_describe found some completions"

            # Return the success of having called _describe
            return 0
        else
            __%[1]s_debug "_describe did not find completions."
            __%[1]s_debug "Checking if we should do file completion."
            if [ $((directive & shellCompDirectiveNoFileComp)) -ne 0 ]; then
                __%[1]s_debug "deactivating file completion"

                # We must return an error code here to let zsh know that there were no
                # completions found by _describe; this is what will trigger other
                # matching algorithms to attempt to find completions.
                # For example zsh can match letters in the middle of words.
                return 1
            else
                # Perform file completion
                __%[1]s_debug "Activating file completion"

                # We must return the result of this command, so it must be the
                # last command, or else we must store its result to return it.
                _arguments '*:filename:_files'" ${flagPrefix}"
            fi
        fi
    fi
}

# don't run the completion function when being source-ed or eval-ed
if [ "$funcstack[1]" = "_%[1]s" ]; then
    _%[1]s
fi
`, name, compCmd,
		ShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp,
		ShellCompDirectiveFilterFileExt, ShellCompDirectiveFilterDirs, ShellCompDirectiveKeepOrder,
		activeHelpMarker))
}
07070100000B3E000081A4000000000000000000000001645E367C00000E3F000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/spf13/cobra/zsh_completions.md  ## Generating Zsh Completion For Your cobra.Command

Please refer to [Shell Completions](shell_completions.md) for details.

## Zsh completions standardization

Cobra 1.1 standardized its zsh completion support to align it with its other shell completions.  Although the API was kept backwards-compatible, some small changes in behavior were introduced.

### Deprecation summary

See further below for more details on these deprecations.

* `cmd.MarkZshCompPositionalArgumentFile(pos, []string{})` is no longer needed.  It is therefore **deprecated** and silently ignored.
* `cmd.MarkZshCompPositionalArgumentFile(pos, glob[])` is **deprecated** and silently ignored.
  * Instead use `ValidArgsFunction` with `ShellCompDirectiveFilterFileExt`.
* `cmd.MarkZshCompPositionalArgumentWords()` is **deprecated** and silently ignored.
  * Instead use `ValidArgsFunction`.

### Behavioral changes

**Noun completion**
|Old behavior|New behavior|
|---|---|
|No file completion by default (opposite of bash)|File completion by default; use `ValidArgsFunction` with `ShellCompDirectiveNoFileComp` to turn off file completion on a per-argument basis|
|Completion of flag names without the `-` prefix having been typed|Flag names are only completed if the user has typed the first `-`|
`cmd.MarkZshCompPositionalArgumentFile(pos, []string{})` used to turn on file completion on a per-argument position basis|File completion for all arguments by default; `cmd.MarkZshCompPositionalArgumentFile()` is **deprecated** and silently ignored|
|`cmd.MarkZshCompPositionalArgumentFile(pos, glob[])` used to turn on file completion **with glob filtering** on a per-argument position basis (zsh-specific)|`cmd.MarkZshCompPositionalArgumentFile()` is **deprecated** and silently ignored; use `ValidArgsFunction` with `ShellCompDirectiveFilterFileExt` for file **extension** filtering (not full glob filtering)|
|`cmd.MarkZshCompPositionalArgumentWords(pos, words[])` used to provide completion choices on a per-argument position basis (zsh-specific)|`cmd.MarkZshCompPositionalArgumentWords()` is **deprecated** and silently ignored; use `ValidArgsFunction` to achieve the same behavior|

**Flag-value completion**

|Old behavior|New behavior|
|---|---|
|No file completion by default (opposite of bash)|File completion by default; use `RegisterFlagCompletionFunc()` with `ShellCompDirectiveNoFileComp` to turn off file completion|
|`cmd.MarkFlagFilename(flag, []string{})` and similar used to turn on file completion|File completion by default; `cmd.MarkFlagFilename(flag, []string{})` no longer needed in this context and silently ignored|
|`cmd.MarkFlagFilename(flag, glob[])`  used to turn on file completion **with glob filtering** (syntax of `[]string{"*.yaml", "*.yml"}` incompatible with bash)|Will continue to work, however, support for bash syntax is added and should be used instead so as to work for all shells (`[]string{"yaml", "yml"}`)|
|`cmd.MarkFlagDirname(flag)` only completes directories (zsh-specific)|Has been added for all shells|
|Completion of a flag name does not repeat, unless flag is of type `*Array` or `*Slice` (not supported by bash)|Retained for `zsh` and added to `fish`|
|Completion of a flag name does not provide the `=` form (unlike bash)|Retained for `zsh` and added to `fish`|

**Improvements**

* Custom completion support (`ValidArgsFunction` and `RegisterFlagCompletionFunc()`)
* File completion by default if no other completions found
* Handling of required flags
* File extension filtering no longer mutually exclusive with bash usage
* Completion of directory names *within* another directory
* Support for `=` form of flags
 07070100000B3F000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/spf13/jwalterweatherman 07070100000B40000081A4000000000000000000000001645E367C0000010A000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/spf13/jwalterweatherman/.gitignore  # Compiled Object files, Static and Dynamic libs (Shared Objects)
*.o
*.a
*.so

# Folders
_obj
_test

# Architecture specific extensions/prefixes
*.[568vq]
[568vq].out

*.cgo1.go
*.cgo2.c
_cgo_defun.c
_cgo_gotypes.go
_cgo_export.*

_testmain.go

*.exe
*.bench
go.sum  07070100000B41000081A4000000000000000000000001645E367C00000437000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/spf13/jwalterweatherman/LICENSE The MIT License (MIT)

Copyright (c) 2014 Steve Francia

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. 07070100000B42000081A4000000000000000000000001645E367C0000112A000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/spf13/jwalterweatherman/README.md   jWalterWeatherman
=================

Seamless printing to the terminal (stdout) and logging to a io.Writer
(file) that’s as easy to use as fmt.Println.

![and_that__s_why_you_always_leave_a_note_by_jonnyetc-d57q7um](https://cloud.githubusercontent.com/assets/173412/11002937/ccd01654-847d-11e5-828e-12ebaf582eaf.jpg)
Graphic by [JonnyEtc](http://jonnyetc.deviantart.com/art/And-That-s-Why-You-Always-Leave-a-Note-315311422)

JWW is primarily a wrapper around the excellent standard log library. It
provides a few advantages over using the standard log library alone.

1. Ready to go out of the box. 
2. One library for both printing to the terminal and logging (to files).
3. Really easy to log to either a temp file or a file you specify.


I really wanted a very straightforward library that could seamlessly do
the following things.

1. Replace all the println, printf, etc statements thoughout my code with
   something more useful
2. Allow the user to easily control what levels are printed to stdout
3. Allow the user to easily control what levels are logged
4. Provide an easy mechanism (like fmt.Println) to print info to the user
   which can be easily logged as well 
5. Due to 2 & 3 provide easy verbose mode for output and logs
6. Not have any unnecessary initialization cruft. Just use it.

# Usage

## Step 1. Use it
Put calls throughout your source based on type of feedback.
No initialization or setup needs to happen. Just start calling things.

Available Loggers are:

 * TRACE
 * DEBUG
 * INFO
 * WARN
 * ERROR
 * CRITICAL
 * FATAL

These each are loggers based on the log standard library and follow the
standard usage. Eg.

```go
    import (
        jww "github.com/spf13/jwalterweatherman"
    )

    ...

    if err != nil {

        // This is a pretty serious error and the user should know about
        // it. It will be printed to the terminal as well as logged under the
        // default thresholds.

        jww.ERROR.Println(err)
    }

    if err2 != nil {
        // This error isn’t going to materially change the behavior of the
        // application, but it’s something that may not be what the user
        // expects. Under the default thresholds, Warn will be logged, but
        // not printed to the terminal. 

        jww.WARN.Println(err2)
    }

    // Information that’s relevant to what’s happening, but not very
    // important for the user. Under the default thresholds this will be
    // discarded.

    jww.INFO.Printf("information %q", response)

```

NOTE: You can also use the library in a non-global setting by creating an instance of a Notebook:

```go
notepad = jww.NewNotepad(jww.LevelInfo, jww.LevelTrace, os.Stdout, ioutil.Discard, "", log.Ldate|log.Ltime)
notepad.WARN.Println("Some warning"")
```

_Why 7 levels?_

Maybe you think that 7 levels are too much for any application... and you
are probably correct. Just because there are seven levels doesn’t mean
that you should be using all 7 levels. Pick the right set for your needs.
Remember they only have to mean something to your project.

## Step 2. Optionally configure JWW

Under the default thresholds :

 * Debug, Trace & Info goto /dev/null
 * Warn and above is logged (when a log file/io.Writer is provided)
 * Error and above is printed to the terminal (stdout)

### Changing the thresholds

The threshold can be changed at any time, but will only affect calls that
execute after the change was made.

This is very useful if your application has a verbose mode. Of course you
can decide what verbose means to you or even have multiple levels of
verbosity.


```go
    import (
        jww "github.com/spf13/jwalterweatherman"
    )

    if Verbose {
        jww.SetLogThreshold(jww.LevelTrace)
        jww.SetStdoutThreshold(jww.LevelInfo)
    }
```

Note that JWW's own internal output uses log levels as well, so set the log
level before making any other calls if you want to see what it's up to.


### Setting a log file

JWW can log to any `io.Writer`:


```go

    jww.SetLogOutput(customWriter) 

```


# More information

This is an early release. I’ve been using it for a while and this is the
third interface I’ve tried. I like this one pretty well, but no guarantees
that it won’t change a bit.

I wrote this for use in [hugo](https://gohugo.io). If you are looking
for a static website engine that’s super fast please checkout Hugo.
  07070100000B43000081A4000000000000000000000001645E367C00000B08000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/spf13/jwalterweatherman/default_notepad.go  // Copyright © 2016 Steve Francia <spf@spf13.com>.
//
// Use of this source code is governed by an MIT-style
// license that can be found in the LICENSE file.

package jwalterweatherman

import (
	"io"
	"io/ioutil"
	"log"
	"os"
)

var (
	TRACE    *log.Logger
	DEBUG    *log.Logger
	INFO     *log.Logger
	WARN     *log.Logger
	ERROR    *log.Logger
	CRITICAL *log.Logger
	FATAL    *log.Logger

	LOG      *log.Logger
	FEEDBACK *Feedback

	defaultNotepad *Notepad
)

func reloadDefaultNotepad() {
	TRACE = defaultNotepad.TRACE
	DEBUG = defaultNotepad.DEBUG
	INFO = defaultNotepad.INFO
	WARN = defaultNotepad.WARN
	ERROR = defaultNotepad.ERROR
	CRITICAL = defaultNotepad.CRITICAL
	FATAL = defaultNotepad.FATAL

	LOG = defaultNotepad.LOG
	FEEDBACK = defaultNotepad.FEEDBACK
}

func init() {
	defaultNotepad = NewNotepad(LevelError, LevelWarn, os.Stdout, ioutil.Discard, "", log.Ldate|log.Ltime)
	reloadDefaultNotepad()
}

// SetLogThreshold set the log threshold for the default notepad. Trace by default.
func SetLogThreshold(threshold Threshold) {
	defaultNotepad.SetLogThreshold(threshold)
	reloadDefaultNotepad()
}

// SetLogOutput set the log output for the default notepad. Discarded by default.
func SetLogOutput(handle io.Writer) {
	defaultNotepad.SetLogOutput(handle)
	reloadDefaultNotepad()
}

// SetStdoutThreshold set the standard output threshold for the default notepad.
// Info by default.
func SetStdoutThreshold(threshold Threshold) {
	defaultNotepad.SetStdoutThreshold(threshold)
	reloadDefaultNotepad()
}

// SetStdoutOutput set the stdout output for the default notepad. Default is stdout.
func SetStdoutOutput(handle io.Writer) {
	defaultNotepad.outHandle = handle
	defaultNotepad.init()
	reloadDefaultNotepad()
}

// SetPrefix set the prefix for the default logger. Empty by default.
func SetPrefix(prefix string) {
	defaultNotepad.SetPrefix(prefix)
	reloadDefaultNotepad()
}

// SetFlags set the flags for the default logger. "log.Ldate | log.Ltime" by default.
func SetFlags(flags int) {
	defaultNotepad.SetFlags(flags)
	reloadDefaultNotepad()
}

// SetLogListeners configures the default logger with one or more log listeners.
func SetLogListeners(l ...LogListener) {
	defaultNotepad.logListeners = l
	defaultNotepad.init()
	reloadDefaultNotepad()
}

// Level returns the current global log threshold.
func LogThreshold() Threshold {
	return defaultNotepad.logThreshold
}

// Level returns the current global output threshold.
func StdoutThreshold() Threshold {
	return defaultNotepad.stdoutThreshold
}

// GetStdoutThreshold returns the defined Treshold for the log logger.
func GetLogThreshold() Threshold {
	return defaultNotepad.GetLogThreshold()
}

// GetStdoutThreshold returns the Treshold for the stdout logger.
func GetStdoutThreshold() Threshold {
	return defaultNotepad.GetStdoutThreshold()
}
07070100000B44000081A4000000000000000000000001645E367C000003BE000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/spf13/jwalterweatherman/log_counter.go  // Copyright © 2016 Steve Francia <spf@spf13.com>.
//
// Use of this source code is governed by an MIT-style
// license that can be found in the LICENSE file.

package jwalterweatherman

import (
	"io"
	"sync/atomic"
)

// Counter is an io.Writer that increments a counter on Write.
type Counter struct {
	count uint64
}

func (c *Counter) incr() {
	atomic.AddUint64(&c.count, 1)
}

// Reset resets the counter.
func (c *Counter) Reset() {
	atomic.StoreUint64(&c.count, 0)
}

// Count returns the current count.
func (c *Counter) Count() uint64 {
	return atomic.LoadUint64(&c.count)
}

func (c *Counter) Write(p []byte) (n int, err error) {
	c.incr()
	return len(p), nil
}

// LogCounter creates a LogListener that counts log statements >= the given threshold.
func LogCounter(counter *Counter, t1 Threshold) LogListener {
	return func(t2 Threshold) io.Writer {
		if t2 < t1 {
			// Not interested in this threshold.
			return nil
		}
		return counter
	}
}
  07070100000B45000081A4000000000000000000000001645E367C0000156A000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/spf13/jwalterweatherman/notepad.go  // Copyright © 2016 Steve Francia <spf@spf13.com>.
//
// Use of this source code is governed by an MIT-style
// license that can be found in the LICENSE file.

package jwalterweatherman

import (
	"fmt"
	"io"
	"io/ioutil"
	"log"
)

type Threshold int

func (t Threshold) String() string {
	return prefixes[t]
}

const (
	LevelTrace Threshold = iota
	LevelDebug
	LevelInfo
	LevelWarn
	LevelError
	LevelCritical
	LevelFatal
)

var prefixes map[Threshold]string = map[Threshold]string{
	LevelTrace:    "TRACE",
	LevelDebug:    "DEBUG",
	LevelInfo:     "INFO",
	LevelWarn:     "WARN",
	LevelError:    "ERROR",
	LevelCritical: "CRITICAL",
	LevelFatal:    "FATAL",
}

// Notepad is where you leave a note!
type Notepad struct {
	TRACE    *log.Logger
	DEBUG    *log.Logger
	INFO     *log.Logger
	WARN     *log.Logger
	ERROR    *log.Logger
	CRITICAL *log.Logger
	FATAL    *log.Logger

	LOG      *log.Logger
	FEEDBACK *Feedback

	loggers         [7]**log.Logger
	logHandle       io.Writer
	outHandle       io.Writer
	logThreshold    Threshold
	stdoutThreshold Threshold
	prefix          string
	flags           int

	logListeners []LogListener
}

// A LogListener can ble supplied to a Notepad to listen on log writes for a given
// threshold. This can be used to capture log events in unit tests and similar.
// Note that this function will be invoked once for each log threshold. If
// the given threshold is not of interest to you, return nil.
// Note that these listeners will receive log events for a given threshold, even
// if the current configuration says not to log it. That way you can count ERRORs even
// if you don't print them to the console.
type LogListener func(t Threshold) io.Writer

// NewNotepad creates a new Notepad.
func NewNotepad(
	outThreshold Threshold,
	logThreshold Threshold,
	outHandle, logHandle io.Writer,
	prefix string, flags int,
	logListeners ...LogListener,
) *Notepad {

	n := &Notepad{logListeners: logListeners}

	n.loggers = [7]**log.Logger{&n.TRACE, &n.DEBUG, &n.INFO, &n.WARN, &n.ERROR, &n.CRITICAL, &n.FATAL}
	n.outHandle = outHandle
	n.logHandle = logHandle
	n.stdoutThreshold = outThreshold
	n.logThreshold = logThreshold

	if len(prefix) != 0 {
		n.prefix = "[" + prefix + "] "
	} else {
		n.prefix = ""
	}

	n.flags = flags

	n.LOG = log.New(n.logHandle,
		"LOG:   ",
		n.flags)
	n.FEEDBACK = &Feedback{out: log.New(outHandle, "", 0), log: n.LOG}

	n.init()
	return n
}

// init creates the loggers for each level depending on the notepad thresholds.
func (n *Notepad) init() {
	logAndOut := io.MultiWriter(n.outHandle, n.logHandle)

	for t, logger := range n.loggers {
		threshold := Threshold(t)
		prefix := n.prefix + threshold.String() + " "

		switch {
		case threshold >= n.logThreshold && threshold >= n.stdoutThreshold:
			*logger = log.New(n.createLogWriters(threshold, logAndOut), prefix, n.flags)

		case threshold >= n.logThreshold:
			*logger = log.New(n.createLogWriters(threshold, n.logHandle), prefix, n.flags)

		case threshold >= n.stdoutThreshold:
			*logger = log.New(n.createLogWriters(threshold, n.outHandle), prefix, n.flags)

		default:
			*logger = log.New(n.createLogWriters(threshold, ioutil.Discard), prefix, n.flags)
		}
	}
}

func (n *Notepad) createLogWriters(t Threshold, handle io.Writer) io.Writer {
	if len(n.logListeners) == 0 {
		return handle
	}
	writers := []io.Writer{handle}
	for _, l := range n.logListeners {
		w := l(t)
		if w != nil {
			writers = append(writers, w)
		}
	}

	if len(writers) == 1 {
		return handle
	}

	return io.MultiWriter(writers...)
}

// SetLogThreshold changes the threshold above which messages are written to the
// log file.
func (n *Notepad) SetLogThreshold(threshold Threshold) {
	n.logThreshold = threshold
	n.init()
}

// SetLogOutput changes the file where log messages are written.
func (n *Notepad) SetLogOutput(handle io.Writer) {
	n.logHandle = handle
	n.init()
}

// GetStdoutThreshold returns the defined Treshold for the log logger.
func (n *Notepad) GetLogThreshold() Threshold {
	return n.logThreshold
}

// SetStdoutThreshold changes the threshold above which messages are written to the
// standard output.
func (n *Notepad) SetStdoutThreshold(threshold Threshold) {
	n.stdoutThreshold = threshold
	n.init()
}

// GetStdoutThreshold returns the Treshold for the stdout logger.
func (n *Notepad) GetStdoutThreshold() Threshold {
	return n.stdoutThreshold
}

// SetPrefix changes the prefix used by the notepad. Prefixes are displayed between
// brackets at the beginning of the line. An empty prefix won't be displayed at all.
func (n *Notepad) SetPrefix(prefix string) {
	if len(prefix) != 0 {
		n.prefix = "[" + prefix + "] "
	} else {
		n.prefix = ""
	}
	n.init()
}

// SetFlags choose which flags the logger will display (after prefix and message
// level). See the package log for more informations on this.
func (n *Notepad) SetFlags(flags int) {
	n.flags = flags
	n.init()
}

// Feedback writes plainly to the outHandle while
// logging with the standard extra information (date, file, etc).
type Feedback struct {
	out *log.Logger
	log *log.Logger
}

func (fb *Feedback) Println(v ...interface{}) {
	fb.output(fmt.Sprintln(v...))
}

func (fb *Feedback) Printf(format string, v ...interface{}) {
	fb.output(fmt.Sprintf(format, v...))
}

func (fb *Feedback) Print(v ...interface{}) {
	fb.output(fmt.Sprint(v...))
}

func (fb *Feedback) output(s string) {
	if fb.out != nil {
		fb.out.Output(2, s)
	}
	if fb.log != nil {
		fb.log.Output(2, s)
	}
}
  07070100000B46000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003200000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag 07070100000B47000081A4000000000000000000000001645E367C00000009000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/.gitignore  .idea/*

   07070100000B48000081A4000000000000000000000001645E367C00000105000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/.travis.yml sudo: false

language: go

go:
  - 1.9.x
  - 1.10.x
  - 1.11.x
  - tip

matrix:
  allow_failures:
    - go: tip

install:
  - go get golang.org/x/lint/golint
  - export PATH=$GOPATH/bin:$PATH
  - go install ./...

script:
  - verify/all.sh -v
  - go test ./...
   07070100000B49000081A4000000000000000000000001645E367C000005FB000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/LICENSE Copyright (c) 2012 Alex Ogier. All rights reserved.
Copyright (c) 2012 The Go Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 07070100000B4A000081A4000000000000000000000001645E367C0000262E000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/README.md   [![Build Status](https://travis-ci.org/spf13/pflag.svg?branch=master)](https://travis-ci.org/spf13/pflag)
[![Go Report Card](https://goreportcard.com/badge/github.com/spf13/pflag)](https://goreportcard.com/report/github.com/spf13/pflag)
[![GoDoc](https://godoc.org/github.com/spf13/pflag?status.svg)](https://godoc.org/github.com/spf13/pflag)

## Description

pflag is a drop-in replacement for Go's flag package, implementing
POSIX/GNU-style --flags.

pflag is compatible with the [GNU extensions to the POSIX recommendations
for command-line options][1]. For a more precise description, see the
"Command-line flag syntax" section below.

[1]: http://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html

pflag is available under the same style of BSD license as the Go language,
which can be found in the LICENSE file.

## Installation

pflag is available using the standard `go get` command.

Install by running:

    go get github.com/spf13/pflag

Run tests by running:

    go test github.com/spf13/pflag

## Usage

pflag is a drop-in replacement of Go's native flag package. If you import
pflag under the name "flag" then all code should continue to function
with no changes.

``` go
import flag "github.com/spf13/pflag"
```

There is one exception to this: if you directly instantiate the Flag struct
there is one more field "Shorthand" that you will need to set.
Most code never instantiates this struct directly, and instead uses
functions such as String(), BoolVar(), and Var(), and is therefore
unaffected.

Define flags using flag.String(), Bool(), Int(), etc.

This declares an integer flag, -flagname, stored in the pointer ip, with type *int.

``` go
var ip *int = flag.Int("flagname", 1234, "help message for flagname")
```

If you like, you can bind the flag to a variable using the Var() functions.

``` go
var flagvar int
func init() {
    flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")
}
```

Or you can create custom flags that satisfy the Value interface (with
pointer receivers) and couple them to flag parsing by

``` go
flag.Var(&flagVal, "name", "help message for flagname")
```

For such flags, the default value is just the initial value of the variable.

After all flags are defined, call

``` go
flag.Parse()
```

to parse the command line into the defined flags.

Flags may then be used directly. If you're using the flags themselves,
they are all pointers; if you bind to variables, they're values.

``` go
fmt.Println("ip has value ", *ip)
fmt.Println("flagvar has value ", flagvar)
```

There are helper functions available to get the value stored in a Flag if you have a FlagSet but find
it difficult to keep up with all of the pointers in your code.
If you have a pflag.FlagSet with a flag called 'flagname' of type int you
can use GetInt() to get the int value. But notice that 'flagname' must exist
and it must be an int. GetString("flagname") will fail.

``` go
i, err := flagset.GetInt("flagname")
```

After parsing, the arguments after the flag are available as the
slice flag.Args() or individually as flag.Arg(i).
The arguments are indexed from 0 through flag.NArg()-1.

The pflag package also defines some new functions that are not in flag,
that give one-letter shorthands for flags. You can use these by appending
'P' to the name of any function that defines a flag.

``` go
var ip = flag.IntP("flagname", "f", 1234, "help message")
var flagvar bool
func init() {
	flag.BoolVarP(&flagvar, "boolname", "b", true, "help message")
}
flag.VarP(&flagVal, "varname", "v", "help message")
```

Shorthand letters can be used with single dashes on the command line.
Boolean shorthand flags can be combined with other shorthand flags.

The default set of command-line flags is controlled by
top-level functions.  The FlagSet type allows one to define
independent sets of flags, such as to implement subcommands
in a command-line interface. The methods of FlagSet are
analogous to the top-level functions for the command-line
flag set.

## Setting no option default values for flags

After you create a flag it is possible to set the pflag.NoOptDefVal for
the given flag. Doing this changes the meaning of the flag slightly. If
a flag has a NoOptDefVal and the flag is set on the command line without
an option the flag will be set to the NoOptDefVal. For example given:

``` go
var ip = flag.IntP("flagname", "f", 1234, "help message")
flag.Lookup("flagname").NoOptDefVal = "4321"
```

Would result in something like

| Parsed Arguments | Resulting Value |
| -------------    | -------------   |
| --flagname=1357  | ip=1357         |
| --flagname       | ip=4321         |
| [nothing]        | ip=1234         |

## Command line flag syntax

```
--flag    // boolean flags, or flags with no option default values
--flag x  // only on flags without a default value
--flag=x
```

Unlike the flag package, a single dash before an option means something
different than a double dash. Single dashes signify a series of shorthand
letters for flags. All but the last shorthand letter must be boolean flags
or a flag with a default value

```
// boolean or flags where the 'no option default value' is set
-f
-f=true
-abc
but
-b true is INVALID

// non-boolean and flags without a 'no option default value'
-n 1234
-n=1234
-n1234

// mixed
-abcs "hello"
-absd="hello"
-abcs1234
```

Flag parsing stops after the terminator "--". Unlike the flag package,
flags can be interspersed with arguments anywhere on the command line
before this terminator.

Integer flags accept 1234, 0664, 0x1234 and may be negative.
Boolean flags (in their long form) accept 1, 0, t, f, true, false,
TRUE, FALSE, True, False.
Duration flags accept any input valid for time.ParseDuration.

## Mutating or "Normalizing" Flag names

It is possible to set a custom flag name 'normalization function.' It allows flag names to be mutated both when created in the code and when used on the command line to some 'normalized' form. The 'normalized' form is used for comparison. Two examples of using the custom normalization func follow.

**Example #1**: You want -, _, and . in flags to compare the same. aka --my-flag == --my_flag == --my.flag

``` go
func wordSepNormalizeFunc(f *pflag.FlagSet, name string) pflag.NormalizedName {
	from := []string{"-", "_"}
	to := "."
	for _, sep := range from {
		name = strings.Replace(name, sep, to, -1)
	}
	return pflag.NormalizedName(name)
}

myFlagSet.SetNormalizeFunc(wordSepNormalizeFunc)
```

**Example #2**: You want to alias two flags. aka --old-flag-name == --new-flag-name

``` go
func aliasNormalizeFunc(f *pflag.FlagSet, name string) pflag.NormalizedName {
	switch name {
	case "old-flag-name":
		name = "new-flag-name"
		break
	}
	return pflag.NormalizedName(name)
}

myFlagSet.SetNormalizeFunc(aliasNormalizeFunc)
```

## Deprecating a flag or its shorthand
It is possible to deprecate a flag, or just its shorthand. Deprecating a flag/shorthand hides it from help text and prints a usage message when the deprecated flag/shorthand is used.

**Example #1**: You want to deprecate a flag named "badflag" as well as inform the users what flag they should use instead.
```go
// deprecate a flag by specifying its name and a usage message
flags.MarkDeprecated("badflag", "please use --good-flag instead")
```
This hides "badflag" from help text, and prints `Flag --badflag has been deprecated, please use --good-flag instead` when "badflag" is used.

**Example #2**: You want to keep a flag name "noshorthandflag" but deprecate its shortname "n".
```go
// deprecate a flag shorthand by specifying its flag name and a usage message
flags.MarkShorthandDeprecated("noshorthandflag", "please use --noshorthandflag only")
```
This hides the shortname "n" from help text, and prints `Flag shorthand -n has been deprecated, please use --noshorthandflag only` when the shorthand "n" is used.

Note that usage message is essential here, and it should not be empty.

## Hidden flags
It is possible to mark a flag as hidden, meaning it will still function as normal, however will not show up in usage/help text.

**Example**: You have a flag named "secretFlag" that you need for internal use only and don't want it showing up in help text, or for its usage text to be available.
```go
// hide a flag by specifying its name
flags.MarkHidden("secretFlag")
```

## Disable sorting of flags
`pflag` allows you to disable sorting of flags for help and usage message.

**Example**:
```go
flags.BoolP("verbose", "v", false, "verbose output")
flags.String("coolflag", "yeaah", "it's really cool flag")
flags.Int("usefulflag", 777, "sometimes it's very useful")
flags.SortFlags = false
flags.PrintDefaults()
```
**Output**:
```
  -v, --verbose           verbose output
      --coolflag string   it's really cool flag (default "yeaah")
      --usefulflag int    sometimes it's very useful (default 777)
```


## Supporting Go flags when using pflag
In order to support flags defined using Go's `flag` package, they must be added to the `pflag` flagset. This is usually necessary
to support flags defined by third-party dependencies (e.g. `golang/glog`).

**Example**: You want to add the Go flags to the `CommandLine` flagset
```go
import (
	goflag "flag"
	flag "github.com/spf13/pflag"
)

var ip *int = flag.Int("flagname", 1234, "help message for flagname")

func main() {
	flag.CommandLine.AddGoFlagSet(goflag.CommandLine)
	flag.Parse()
}
```

## More info

You can see the full reference documentation of the pflag package
[at godoc.org][3], or through go's standard documentation system by
running `godoc -http=:6060` and browsing to
[http://localhost:6060/pkg/github.com/spf13/pflag][2] after
installation.

[2]: http://localhost:6060/pkg/github.com/spf13/pflag
[3]: http://godoc.org/github.com/spf13/pflag
  07070100000B4B000081A4000000000000000000000001645E367C00000C00000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/bool.go package pflag

import "strconv"

// optional interface to indicate boolean flags that can be
// supplied without "=value" text
type boolFlag interface {
	Value
	IsBoolFlag() bool
}

// -- bool Value
type boolValue bool

func newBoolValue(val bool, p *bool) *boolValue {
	*p = val
	return (*boolValue)(p)
}

func (b *boolValue) Set(s string) error {
	v, err := strconv.ParseBool(s)
	*b = boolValue(v)
	return err
}

func (b *boolValue) Type() string {
	return "bool"
}

func (b *boolValue) String() string { return strconv.FormatBool(bool(*b)) }

func (b *boolValue) IsBoolFlag() bool { return true }

func boolConv(sval string) (interface{}, error) {
	return strconv.ParseBool(sval)
}

// GetBool return the bool value of a flag with the given name
func (f *FlagSet) GetBool(name string) (bool, error) {
	val, err := f.getFlagType(name, "bool", boolConv)
	if err != nil {
		return false, err
	}
	return val.(bool), nil
}

// BoolVar defines a bool flag with specified name, default value, and usage string.
// The argument p points to a bool variable in which to store the value of the flag.
func (f *FlagSet) BoolVar(p *bool, name string, value bool, usage string) {
	f.BoolVarP(p, name, "", value, usage)
}

// BoolVarP is like BoolVar, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) BoolVarP(p *bool, name, shorthand string, value bool, usage string) {
	flag := f.VarPF(newBoolValue(value, p), name, shorthand, usage)
	flag.NoOptDefVal = "true"
}

// BoolVar defines a bool flag with specified name, default value, and usage string.
// The argument p points to a bool variable in which to store the value of the flag.
func BoolVar(p *bool, name string, value bool, usage string) {
	BoolVarP(p, name, "", value, usage)
}

// BoolVarP is like BoolVar, but accepts a shorthand letter that can be used after a single dash.
func BoolVarP(p *bool, name, shorthand string, value bool, usage string) {
	flag := CommandLine.VarPF(newBoolValue(value, p), name, shorthand, usage)
	flag.NoOptDefVal = "true"
}

// Bool defines a bool flag with specified name, default value, and usage string.
// The return value is the address of a bool variable that stores the value of the flag.
func (f *FlagSet) Bool(name string, value bool, usage string) *bool {
	return f.BoolP(name, "", value, usage)
}

// BoolP is like Bool, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) BoolP(name, shorthand string, value bool, usage string) *bool {
	p := new(bool)
	f.BoolVarP(p, name, shorthand, value, usage)
	return p
}

// Bool defines a bool flag with specified name, default value, and usage string.
// The return value is the address of a bool variable that stores the value of the flag.
func Bool(name string, value bool, usage string) *bool {
	return BoolP(name, "", value, usage)
}

// BoolP is like Bool, but accepts a shorthand letter that can be used after a single dash.
func BoolP(name, shorthand string, value bool, usage string) *bool {
	b := CommandLine.BoolP(name, shorthand, value, usage)
	return b
}
07070100000B4C000081A4000000000000000000000001645E367C000014C9000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/bool_slice.go   package pflag

import (
	"io"
	"strconv"
	"strings"
)

// -- boolSlice Value
type boolSliceValue struct {
	value   *[]bool
	changed bool
}

func newBoolSliceValue(val []bool, p *[]bool) *boolSliceValue {
	bsv := new(boolSliceValue)
	bsv.value = p
	*bsv.value = val
	return bsv
}

// Set converts, and assigns, the comma-separated boolean argument string representation as the []bool value of this flag.
// If Set is called on a flag that already has a []bool assigned, the newly converted values will be appended.
func (s *boolSliceValue) Set(val string) error {

	// remove all quote characters
	rmQuote := strings.NewReplacer(`"`, "", `'`, "", "`", "")

	// read flag arguments with CSV parser
	boolStrSlice, err := readAsCSV(rmQuote.Replace(val))
	if err != nil && err != io.EOF {
		return err
	}

	// parse boolean values into slice
	out := make([]bool, 0, len(boolStrSlice))
	for _, boolStr := range boolStrSlice {
		b, err := strconv.ParseBool(strings.TrimSpace(boolStr))
		if err != nil {
			return err
		}
		out = append(out, b)
	}

	if !s.changed {
		*s.value = out
	} else {
		*s.value = append(*s.value, out...)
	}

	s.changed = true

	return nil
}

// Type returns a string that uniquely represents this flag's type.
func (s *boolSliceValue) Type() string {
	return "boolSlice"
}

// String defines a "native" format for this boolean slice flag value.
func (s *boolSliceValue) String() string {

	boolStrSlice := make([]string, len(*s.value))
	for i, b := range *s.value {
		boolStrSlice[i] = strconv.FormatBool(b)
	}

	out, _ := writeAsCSV(boolStrSlice)

	return "[" + out + "]"
}

func (s *boolSliceValue) fromString(val string) (bool, error) {
	return strconv.ParseBool(val)
}

func (s *boolSliceValue) toString(val bool) string {
	return strconv.FormatBool(val)
}

func (s *boolSliceValue) Append(val string) error {
	i, err := s.fromString(val)
	if err != nil {
		return err
	}
	*s.value = append(*s.value, i)
	return nil
}

func (s *boolSliceValue) Replace(val []string) error {
	out := make([]bool, len(val))
	for i, d := range val {
		var err error
		out[i], err = s.fromString(d)
		if err != nil {
			return err
		}
	}
	*s.value = out
	return nil
}

func (s *boolSliceValue) GetSlice() []string {
	out := make([]string, len(*s.value))
	for i, d := range *s.value {
		out[i] = s.toString(d)
	}
	return out
}

func boolSliceConv(val string) (interface{}, error) {
	val = strings.Trim(val, "[]")
	// Empty string would cause a slice with one (empty) entry
	if len(val) == 0 {
		return []bool{}, nil
	}
	ss := strings.Split(val, ",")
	out := make([]bool, len(ss))
	for i, t := range ss {
		var err error
		out[i], err = strconv.ParseBool(t)
		if err != nil {
			return nil, err
		}
	}
	return out, nil
}

// GetBoolSlice returns the []bool value of a flag with the given name.
func (f *FlagSet) GetBoolSlice(name string) ([]bool, error) {
	val, err := f.getFlagType(name, "boolSlice", boolSliceConv)
	if err != nil {
		return []bool{}, err
	}
	return val.([]bool), nil
}

// BoolSliceVar defines a boolSlice flag with specified name, default value, and usage string.
// The argument p points to a []bool variable in which to store the value of the flag.
func (f *FlagSet) BoolSliceVar(p *[]bool, name string, value []bool, usage string) {
	f.VarP(newBoolSliceValue(value, p), name, "", usage)
}

// BoolSliceVarP is like BoolSliceVar, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) BoolSliceVarP(p *[]bool, name, shorthand string, value []bool, usage string) {
	f.VarP(newBoolSliceValue(value, p), name, shorthand, usage)
}

// BoolSliceVar defines a []bool flag with specified name, default value, and usage string.
// The argument p points to a []bool variable in which to store the value of the flag.
func BoolSliceVar(p *[]bool, name string, value []bool, usage string) {
	CommandLine.VarP(newBoolSliceValue(value, p), name, "", usage)
}

// BoolSliceVarP is like BoolSliceVar, but accepts a shorthand letter that can be used after a single dash.
func BoolSliceVarP(p *[]bool, name, shorthand string, value []bool, usage string) {
	CommandLine.VarP(newBoolSliceValue(value, p), name, shorthand, usage)
}

// BoolSlice defines a []bool flag with specified name, default value, and usage string.
// The return value is the address of a []bool variable that stores the value of the flag.
func (f *FlagSet) BoolSlice(name string, value []bool, usage string) *[]bool {
	p := []bool{}
	f.BoolSliceVarP(&p, name, "", value, usage)
	return &p
}

// BoolSliceP is like BoolSlice, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) BoolSliceP(name, shorthand string, value []bool, usage string) *[]bool {
	p := []bool{}
	f.BoolSliceVarP(&p, name, shorthand, value, usage)
	return &p
}

// BoolSlice defines a []bool flag with specified name, default value, and usage string.
// The return value is the address of a []bool variable that stores the value of the flag.
func BoolSlice(name string, value []bool, usage string) *[]bool {
	return CommandLine.BoolSliceP(name, "", value, usage)
}

// BoolSliceP is like BoolSlice, but accepts a shorthand letter that can be used after a single dash.
func BoolSliceP(name, shorthand string, value []bool, usage string) *[]bool {
	return CommandLine.BoolSliceP(name, shorthand, value, usage)
}
   07070100000B4D000081A4000000000000000000000001645E367C00001C01000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/bytes.go    package pflag

import (
	"encoding/base64"
	"encoding/hex"
	"fmt"
	"strings"
)

// BytesHex adapts []byte for use as a flag. Value of flag is HEX encoded
type bytesHexValue []byte

// String implements pflag.Value.String.
func (bytesHex bytesHexValue) String() string {
	return fmt.Sprintf("%X", []byte(bytesHex))
}

// Set implements pflag.Value.Set.
func (bytesHex *bytesHexValue) Set(value string) error {
	bin, err := hex.DecodeString(strings.TrimSpace(value))

	if err != nil {
		return err
	}

	*bytesHex = bin

	return nil
}

// Type implements pflag.Value.Type.
func (*bytesHexValue) Type() string {
	return "bytesHex"
}

func newBytesHexValue(val []byte, p *[]byte) *bytesHexValue {
	*p = val
	return (*bytesHexValue)(p)
}

func bytesHexConv(sval string) (interface{}, error) {

	bin, err := hex.DecodeString(sval)

	if err == nil {
		return bin, nil
	}

	return nil, fmt.Errorf("invalid string being converted to Bytes: %s %s", sval, err)
}

// GetBytesHex return the []byte value of a flag with the given name
func (f *FlagSet) GetBytesHex(name string) ([]byte, error) {
	val, err := f.getFlagType(name, "bytesHex", bytesHexConv)

	if err != nil {
		return []byte{}, err
	}

	return val.([]byte), nil
}

// BytesHexVar defines an []byte flag with specified name, default value, and usage string.
// The argument p points to an []byte variable in which to store the value of the flag.
func (f *FlagSet) BytesHexVar(p *[]byte, name string, value []byte, usage string) {
	f.VarP(newBytesHexValue(value, p), name, "", usage)
}

// BytesHexVarP is like BytesHexVar, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) BytesHexVarP(p *[]byte, name, shorthand string, value []byte, usage string) {
	f.VarP(newBytesHexValue(value, p), name, shorthand, usage)
}

// BytesHexVar defines an []byte flag with specified name, default value, and usage string.
// The argument p points to an []byte variable in which to store the value of the flag.
func BytesHexVar(p *[]byte, name string, value []byte, usage string) {
	CommandLine.VarP(newBytesHexValue(value, p), name, "", usage)
}

// BytesHexVarP is like BytesHexVar, but accepts a shorthand letter that can be used after a single dash.
func BytesHexVarP(p *[]byte, name, shorthand string, value []byte, usage string) {
	CommandLine.VarP(newBytesHexValue(value, p), name, shorthand, usage)
}

// BytesHex defines an []byte flag with specified name, default value, and usage string.
// The return value is the address of an []byte variable that stores the value of the flag.
func (f *FlagSet) BytesHex(name string, value []byte, usage string) *[]byte {
	p := new([]byte)
	f.BytesHexVarP(p, name, "", value, usage)
	return p
}

// BytesHexP is like BytesHex, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) BytesHexP(name, shorthand string, value []byte, usage string) *[]byte {
	p := new([]byte)
	f.BytesHexVarP(p, name, shorthand, value, usage)
	return p
}

// BytesHex defines an []byte flag with specified name, default value, and usage string.
// The return value is the address of an []byte variable that stores the value of the flag.
func BytesHex(name string, value []byte, usage string) *[]byte {
	return CommandLine.BytesHexP(name, "", value, usage)
}

// BytesHexP is like BytesHex, but accepts a shorthand letter that can be used after a single dash.
func BytesHexP(name, shorthand string, value []byte, usage string) *[]byte {
	return CommandLine.BytesHexP(name, shorthand, value, usage)
}

// BytesBase64 adapts []byte for use as a flag. Value of flag is Base64 encoded
type bytesBase64Value []byte

// String implements pflag.Value.String.
func (bytesBase64 bytesBase64Value) String() string {
	return base64.StdEncoding.EncodeToString([]byte(bytesBase64))
}

// Set implements pflag.Value.Set.
func (bytesBase64 *bytesBase64Value) Set(value string) error {
	bin, err := base64.StdEncoding.DecodeString(strings.TrimSpace(value))

	if err != nil {
		return err
	}

	*bytesBase64 = bin

	return nil
}

// Type implements pflag.Value.Type.
func (*bytesBase64Value) Type() string {
	return "bytesBase64"
}

func newBytesBase64Value(val []byte, p *[]byte) *bytesBase64Value {
	*p = val
	return (*bytesBase64Value)(p)
}

func bytesBase64ValueConv(sval string) (interface{}, error) {

	bin, err := base64.StdEncoding.DecodeString(sval)
	if err == nil {
		return bin, nil
	}

	return nil, fmt.Errorf("invalid string being converted to Bytes: %s %s", sval, err)
}

// GetBytesBase64 return the []byte value of a flag with the given name
func (f *FlagSet) GetBytesBase64(name string) ([]byte, error) {
	val, err := f.getFlagType(name, "bytesBase64", bytesBase64ValueConv)

	if err != nil {
		return []byte{}, err
	}

	return val.([]byte), nil
}

// BytesBase64Var defines an []byte flag with specified name, default value, and usage string.
// The argument p points to an []byte variable in which to store the value of the flag.
func (f *FlagSet) BytesBase64Var(p *[]byte, name string, value []byte, usage string) {
	f.VarP(newBytesBase64Value(value, p), name, "", usage)
}

// BytesBase64VarP is like BytesBase64Var, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) BytesBase64VarP(p *[]byte, name, shorthand string, value []byte, usage string) {
	f.VarP(newBytesBase64Value(value, p), name, shorthand, usage)
}

// BytesBase64Var defines an []byte flag with specified name, default value, and usage string.
// The argument p points to an []byte variable in which to store the value of the flag.
func BytesBase64Var(p *[]byte, name string, value []byte, usage string) {
	CommandLine.VarP(newBytesBase64Value(value, p), name, "", usage)
}

// BytesBase64VarP is like BytesBase64Var, but accepts a shorthand letter that can be used after a single dash.
func BytesBase64VarP(p *[]byte, name, shorthand string, value []byte, usage string) {
	CommandLine.VarP(newBytesBase64Value(value, p), name, shorthand, usage)
}

// BytesBase64 defines an []byte flag with specified name, default value, and usage string.
// The return value is the address of an []byte variable that stores the value of the flag.
func (f *FlagSet) BytesBase64(name string, value []byte, usage string) *[]byte {
	p := new([]byte)
	f.BytesBase64VarP(p, name, "", value, usage)
	return p
}

// BytesBase64P is like BytesBase64, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) BytesBase64P(name, shorthand string, value []byte, usage string) *[]byte {
	p := new([]byte)
	f.BytesBase64VarP(p, name, shorthand, value, usage)
	return p
}

// BytesBase64 defines an []byte flag with specified name, default value, and usage string.
// The return value is the address of an []byte variable that stores the value of the flag.
func BytesBase64(name string, value []byte, usage string) *[]byte {
	return CommandLine.BytesBase64P(name, "", value, usage)
}

// BytesBase64P is like BytesBase64, but accepts a shorthand letter that can be used after a single dash.
func BytesBase64P(name, shorthand string, value []byte, usage string) *[]byte {
	return CommandLine.BytesBase64P(name, shorthand, value, usage)
}
   07070100000B4E000081A4000000000000000000000001645E367C00000B93000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/count.go    package pflag

import "strconv"

// -- count Value
type countValue int

func newCountValue(val int, p *int) *countValue {
	*p = val
	return (*countValue)(p)
}

func (i *countValue) Set(s string) error {
	// "+1" means that no specific value was passed, so increment
	if s == "+1" {
		*i = countValue(*i + 1)
		return nil
	}
	v, err := strconv.ParseInt(s, 0, 0)
	*i = countValue(v)
	return err
}

func (i *countValue) Type() string {
	return "count"
}

func (i *countValue) String() string { return strconv.Itoa(int(*i)) }

func countConv(sval string) (interface{}, error) {
	i, err := strconv.Atoi(sval)
	if err != nil {
		return nil, err
	}
	return i, nil
}

// GetCount return the int value of a flag with the given name
func (f *FlagSet) GetCount(name string) (int, error) {
	val, err := f.getFlagType(name, "count", countConv)
	if err != nil {
		return 0, err
	}
	return val.(int), nil
}

// CountVar defines a count flag with specified name, default value, and usage string.
// The argument p points to an int variable in which to store the value of the flag.
// A count flag will add 1 to its value every time it is found on the command line
func (f *FlagSet) CountVar(p *int, name string, usage string) {
	f.CountVarP(p, name, "", usage)
}

// CountVarP is like CountVar only take a shorthand for the flag name.
func (f *FlagSet) CountVarP(p *int, name, shorthand string, usage string) {
	flag := f.VarPF(newCountValue(0, p), name, shorthand, usage)
	flag.NoOptDefVal = "+1"
}

// CountVar like CountVar only the flag is placed on the CommandLine instead of a given flag set
func CountVar(p *int, name string, usage string) {
	CommandLine.CountVar(p, name, usage)
}

// CountVarP is like CountVar only take a shorthand for the flag name.
func CountVarP(p *int, name, shorthand string, usage string) {
	CommandLine.CountVarP(p, name, shorthand, usage)
}

// Count defines a count flag with specified name, default value, and usage string.
// The return value is the address of an int variable that stores the value of the flag.
// A count flag will add 1 to its value every time it is found on the command line
func (f *FlagSet) Count(name string, usage string) *int {
	p := new(int)
	f.CountVarP(p, name, "", usage)
	return p
}

// CountP is like Count only takes a shorthand for the flag name.
func (f *FlagSet) CountP(name, shorthand string, usage string) *int {
	p := new(int)
	f.CountVarP(p, name, shorthand, usage)
	return p
}

// Count defines a count flag with specified name, default value, and usage string.
// The return value is the address of an int variable that stores the value of the flag.
// A count flag will add 1 to its value evey time it is found on the command line
func Count(name string, usage string) *int {
	return CommandLine.CountP(name, "", usage)
}

// CountP is like Count only takes a shorthand for the flag name.
func CountP(name, shorthand string, usage string) *int {
	return CommandLine.CountP(name, shorthand, usage)
}
 07070100000B4F000081A4000000000000000000000001645E367C00000CF5000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/duration.go package pflag

import (
	"time"
)

// -- time.Duration Value
type durationValue time.Duration

func newDurationValue(val time.Duration, p *time.Duration) *durationValue {
	*p = val
	return (*durationValue)(p)
}

func (d *durationValue) Set(s string) error {
	v, err := time.ParseDuration(s)
	*d = durationValue(v)
	return err
}

func (d *durationValue) Type() string {
	return "duration"
}

func (d *durationValue) String() string { return (*time.Duration)(d).String() }

func durationConv(sval string) (interface{}, error) {
	return time.ParseDuration(sval)
}

// GetDuration return the duration value of a flag with the given name
func (f *FlagSet) GetDuration(name string) (time.Duration, error) {
	val, err := f.getFlagType(name, "duration", durationConv)
	if err != nil {
		return 0, err
	}
	return val.(time.Duration), nil
}

// DurationVar defines a time.Duration flag with specified name, default value, and usage string.
// The argument p points to a time.Duration variable in which to store the value of the flag.
func (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string) {
	f.VarP(newDurationValue(value, p), name, "", usage)
}

// DurationVarP is like DurationVar, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) DurationVarP(p *time.Duration, name, shorthand string, value time.Duration, usage string) {
	f.VarP(newDurationValue(value, p), name, shorthand, usage)
}

// DurationVar defines a time.Duration flag with specified name, default value, and usage string.
// The argument p points to a time.Duration variable in which to store the value of the flag.
func DurationVar(p *time.Duration, name string, value time.Duration, usage string) {
	CommandLine.VarP(newDurationValue(value, p), name, "", usage)
}

// DurationVarP is like DurationVar, but accepts a shorthand letter that can be used after a single dash.
func DurationVarP(p *time.Duration, name, shorthand string, value time.Duration, usage string) {
	CommandLine.VarP(newDurationValue(value, p), name, shorthand, usage)
}

// Duration defines a time.Duration flag with specified name, default value, and usage string.
// The return value is the address of a time.Duration variable that stores the value of the flag.
func (f *FlagSet) Duration(name string, value time.Duration, usage string) *time.Duration {
	p := new(time.Duration)
	f.DurationVarP(p, name, "", value, usage)
	return p
}

// DurationP is like Duration, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) DurationP(name, shorthand string, value time.Duration, usage string) *time.Duration {
	p := new(time.Duration)
	f.DurationVarP(p, name, shorthand, value, usage)
	return p
}

// Duration defines a time.Duration flag with specified name, default value, and usage string.
// The return value is the address of a time.Duration variable that stores the value of the flag.
func Duration(name string, value time.Duration, usage string) *time.Duration {
	return CommandLine.DurationP(name, "", value, usage)
}

// DurationP is like Duration, but accepts a shorthand letter that can be used after a single dash.
func DurationP(name, shorthand string, value time.Duration, usage string) *time.Duration {
	return CommandLine.DurationP(name, shorthand, value, usage)
}
   07070100000B50000081A4000000000000000000000001645E367C0000140B000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/duration_slice.go   package pflag

import (
	"fmt"
	"strings"
	"time"
)

// -- durationSlice Value
type durationSliceValue struct {
	value   *[]time.Duration
	changed bool
}

func newDurationSliceValue(val []time.Duration, p *[]time.Duration) *durationSliceValue {
	dsv := new(durationSliceValue)
	dsv.value = p
	*dsv.value = val
	return dsv
}

func (s *durationSliceValue) Set(val string) error {
	ss := strings.Split(val, ",")
	out := make([]time.Duration, len(ss))
	for i, d := range ss {
		var err error
		out[i], err = time.ParseDuration(d)
		if err != nil {
			return err
		}

	}
	if !s.changed {
		*s.value = out
	} else {
		*s.value = append(*s.value, out...)
	}
	s.changed = true
	return nil
}

func (s *durationSliceValue) Type() string {
	return "durationSlice"
}

func (s *durationSliceValue) String() string {
	out := make([]string, len(*s.value))
	for i, d := range *s.value {
		out[i] = fmt.Sprintf("%s", d)
	}
	return "[" + strings.Join(out, ",") + "]"
}

func (s *durationSliceValue) fromString(val string) (time.Duration, error) {
	return time.ParseDuration(val)
}

func (s *durationSliceValue) toString(val time.Duration) string {
	return fmt.Sprintf("%s", val)
}

func (s *durationSliceValue) Append(val string) error {
	i, err := s.fromString(val)
	if err != nil {
		return err
	}
	*s.value = append(*s.value, i)
	return nil
}

func (s *durationSliceValue) Replace(val []string) error {
	out := make([]time.Duration, len(val))
	for i, d := range val {
		var err error
		out[i], err = s.fromString(d)
		if err != nil {
			return err
		}
	}
	*s.value = out
	return nil
}

func (s *durationSliceValue) GetSlice() []string {
	out := make([]string, len(*s.value))
	for i, d := range *s.value {
		out[i] = s.toString(d)
	}
	return out
}

func durationSliceConv(val string) (interface{}, error) {
	val = strings.Trim(val, "[]")
	// Empty string would cause a slice with one (empty) entry
	if len(val) == 0 {
		return []time.Duration{}, nil
	}
	ss := strings.Split(val, ",")
	out := make([]time.Duration, len(ss))
	for i, d := range ss {
		var err error
		out[i], err = time.ParseDuration(d)
		if err != nil {
			return nil, err
		}

	}
	return out, nil
}

// GetDurationSlice returns the []time.Duration value of a flag with the given name
func (f *FlagSet) GetDurationSlice(name string) ([]time.Duration, error) {
	val, err := f.getFlagType(name, "durationSlice", durationSliceConv)
	if err != nil {
		return []time.Duration{}, err
	}
	return val.([]time.Duration), nil
}

// DurationSliceVar defines a durationSlice flag with specified name, default value, and usage string.
// The argument p points to a []time.Duration variable in which to store the value of the flag.
func (f *FlagSet) DurationSliceVar(p *[]time.Duration, name string, value []time.Duration, usage string) {
	f.VarP(newDurationSliceValue(value, p), name, "", usage)
}

// DurationSliceVarP is like DurationSliceVar, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) DurationSliceVarP(p *[]time.Duration, name, shorthand string, value []time.Duration, usage string) {
	f.VarP(newDurationSliceValue(value, p), name, shorthand, usage)
}

// DurationSliceVar defines a duration[] flag with specified name, default value, and usage string.
// The argument p points to a duration[] variable in which to store the value of the flag.
func DurationSliceVar(p *[]time.Duration, name string, value []time.Duration, usage string) {
	CommandLine.VarP(newDurationSliceValue(value, p), name, "", usage)
}

// DurationSliceVarP is like DurationSliceVar, but accepts a shorthand letter that can be used after a single dash.
func DurationSliceVarP(p *[]time.Duration, name, shorthand string, value []time.Duration, usage string) {
	CommandLine.VarP(newDurationSliceValue(value, p), name, shorthand, usage)
}

// DurationSlice defines a []time.Duration flag with specified name, default value, and usage string.
// The return value is the address of a []time.Duration variable that stores the value of the flag.
func (f *FlagSet) DurationSlice(name string, value []time.Duration, usage string) *[]time.Duration {
	p := []time.Duration{}
	f.DurationSliceVarP(&p, name, "", value, usage)
	return &p
}

// DurationSliceP is like DurationSlice, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) DurationSliceP(name, shorthand string, value []time.Duration, usage string) *[]time.Duration {
	p := []time.Duration{}
	f.DurationSliceVarP(&p, name, shorthand, value, usage)
	return &p
}

// DurationSlice defines a []time.Duration flag with specified name, default value, and usage string.
// The return value is the address of a []time.Duration variable that stores the value of the flag.
func DurationSlice(name string, value []time.Duration, usage string) *[]time.Duration {
	return CommandLine.DurationSliceP(name, "", value, usage)
}

// DurationSliceP is like DurationSlice, but accepts a shorthand letter that can be used after a single dash.
func DurationSliceP(name, shorthand string, value []time.Duration, usage string) *[]time.Duration {
	return CommandLine.DurationSliceP(name, shorthand, value, usage)
}
 07070100000B51000081A4000000000000000000000001645E367C00008DF1000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/flag.go // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

/*
Package pflag is a drop-in replacement for Go's flag package, implementing
POSIX/GNU-style --flags.

pflag is compatible with the GNU extensions to the POSIX recommendations
for command-line options. See
http://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html

Usage:

pflag is a drop-in replacement of Go's native flag package. If you import
pflag under the name "flag" then all code should continue to function
with no changes.

	import flag "github.com/spf13/pflag"

There is one exception to this: if you directly instantiate the Flag struct
there is one more field "Shorthand" that you will need to set.
Most code never instantiates this struct directly, and instead uses
functions such as String(), BoolVar(), and Var(), and is therefore
unaffected.

Define flags using flag.String(), Bool(), Int(), etc.

This declares an integer flag, -flagname, stored in the pointer ip, with type *int.
	var ip = flag.Int("flagname", 1234, "help message for flagname")
If you like, you can bind the flag to a variable using the Var() functions.
	var flagvar int
	func init() {
		flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")
	}
Or you can create custom flags that satisfy the Value interface (with
pointer receivers) and couple them to flag parsing by
	flag.Var(&flagVal, "name", "help message for flagname")
For such flags, the default value is just the initial value of the variable.

After all flags are defined, call
	flag.Parse()
to parse the command line into the defined flags.

Flags may then be used directly. If you're using the flags themselves,
they are all pointers; if you bind to variables, they're values.
	fmt.Println("ip has value ", *ip)
	fmt.Println("flagvar has value ", flagvar)

After parsing, the arguments after the flag are available as the
slice flag.Args() or individually as flag.Arg(i).
The arguments are indexed from 0 through flag.NArg()-1.

The pflag package also defines some new functions that are not in flag,
that give one-letter shorthands for flags. You can use these by appending
'P' to the name of any function that defines a flag.
	var ip = flag.IntP("flagname", "f", 1234, "help message")
	var flagvar bool
	func init() {
		flag.BoolVarP(&flagvar, "boolname", "b", true, "help message")
	}
	flag.VarP(&flagval, "varname", "v", "help message")
Shorthand letters can be used with single dashes on the command line.
Boolean shorthand flags can be combined with other shorthand flags.

Command line flag syntax:
	--flag    // boolean flags only
	--flag=x

Unlike the flag package, a single dash before an option means something
different than a double dash. Single dashes signify a series of shorthand
letters for flags. All but the last shorthand letter must be boolean flags.
	// boolean flags
	-f
	-abc
	// non-boolean flags
	-n 1234
	-Ifile
	// mixed
	-abcs "hello"
	-abcn1234

Flag parsing stops after the terminator "--". Unlike the flag package,
flags can be interspersed with arguments anywhere on the command line
before this terminator.

Integer flags accept 1234, 0664, 0x1234 and may be negative.
Boolean flags (in their long form) accept 1, 0, t, f, true, false,
TRUE, FALSE, True, False.
Duration flags accept any input valid for time.ParseDuration.

The default set of command-line flags is controlled by
top-level functions.  The FlagSet type allows one to define
independent sets of flags, such as to implement subcommands
in a command-line interface. The methods of FlagSet are
analogous to the top-level functions for the command-line
flag set.
*/
package pflag

import (
	"bytes"
	"errors"
	goflag "flag"
	"fmt"
	"io"
	"os"
	"sort"
	"strings"
)

// ErrHelp is the error returned if the flag -help is invoked but no such flag is defined.
var ErrHelp = errors.New("pflag: help requested")

// ErrorHandling defines how to handle flag parsing errors.
type ErrorHandling int

const (
	// ContinueOnError will return an err from Parse() if an error is found
	ContinueOnError ErrorHandling = iota
	// ExitOnError will call os.Exit(2) if an error is found when parsing
	ExitOnError
	// PanicOnError will panic() if an error is found when parsing flags
	PanicOnError
)

// ParseErrorsWhitelist defines the parsing errors that can be ignored
type ParseErrorsWhitelist struct {
	// UnknownFlags will ignore unknown flags errors and continue parsing rest of the flags
	UnknownFlags bool
}

// NormalizedName is a flag name that has been normalized according to rules
// for the FlagSet (e.g. making '-' and '_' equivalent).
type NormalizedName string

// A FlagSet represents a set of defined flags.
type FlagSet struct {
	// Usage is the function called when an error occurs while parsing flags.
	// The field is a function (not a method) that may be changed to point to
	// a custom error handler.
	Usage func()

	// SortFlags is used to indicate, if user wants to have sorted flags in
	// help/usage messages.
	SortFlags bool

	// ParseErrorsWhitelist is used to configure a whitelist of errors
	ParseErrorsWhitelist ParseErrorsWhitelist

	name              string
	parsed            bool
	actual            map[NormalizedName]*Flag
	orderedActual     []*Flag
	sortedActual      []*Flag
	formal            map[NormalizedName]*Flag
	orderedFormal     []*Flag
	sortedFormal      []*Flag
	shorthands        map[byte]*Flag
	args              []string // arguments after flags
	argsLenAtDash     int      // len(args) when a '--' was located when parsing, or -1 if no --
	errorHandling     ErrorHandling
	output            io.Writer // nil means stderr; use out() accessor
	interspersed      bool      // allow interspersed option/non-option args
	normalizeNameFunc func(f *FlagSet, name string) NormalizedName

	addedGoFlagSets []*goflag.FlagSet
}

// A Flag represents the state of a flag.
type Flag struct {
	Name                string              // name as it appears on command line
	Shorthand           string              // one-letter abbreviated flag
	Usage               string              // help message
	Value               Value               // value as set
	DefValue            string              // default value (as text); for usage message
	Changed             bool                // If the user set the value (or if left to default)
	NoOptDefVal         string              // default value (as text); if the flag is on the command line without any options
	Deprecated          string              // If this flag is deprecated, this string is the new or now thing to use
	Hidden              bool                // used by cobra.Command to allow flags to be hidden from help/usage text
	ShorthandDeprecated string              // If the shorthand of this flag is deprecated, this string is the new or now thing to use
	Annotations         map[string][]string // used by cobra.Command bash autocomple code
}

// Value is the interface to the dynamic value stored in a flag.
// (The default value is represented as a string.)
type Value interface {
	String() string
	Set(string) error
	Type() string
}

// SliceValue is a secondary interface to all flags which hold a list
// of values.  This allows full control over the value of list flags,
// and avoids complicated marshalling and unmarshalling to csv.
type SliceValue interface {
	// Append adds the specified value to the end of the flag value list.
	Append(string) error
	// Replace will fully overwrite any data currently in the flag value list.
	Replace([]string) error
	// GetSlice returns the flag value list as an array of strings.
	GetSlice() []string
}

// sortFlags returns the flags as a slice in lexicographical sorted order.
func sortFlags(flags map[NormalizedName]*Flag) []*Flag {
	list := make(sort.StringSlice, len(flags))
	i := 0
	for k := range flags {
		list[i] = string(k)
		i++
	}
	list.Sort()
	result := make([]*Flag, len(list))
	for i, name := range list {
		result[i] = flags[NormalizedName(name)]
	}
	return result
}

// SetNormalizeFunc allows you to add a function which can translate flag names.
// Flags added to the FlagSet will be translated and then when anything tries to
// look up the flag that will also be translated. So it would be possible to create
// a flag named "getURL" and have it translated to "geturl".  A user could then pass
// "--getUrl" which may also be translated to "geturl" and everything will work.
func (f *FlagSet) SetNormalizeFunc(n func(f *FlagSet, name string) NormalizedName) {
	f.normalizeNameFunc = n
	f.sortedFormal = f.sortedFormal[:0]
	for fname, flag := range f.formal {
		nname := f.normalizeFlagName(flag.Name)
		if fname == nname {
			continue
		}
		flag.Name = string(nname)
		delete(f.formal, fname)
		f.formal[nname] = flag
		if _, set := f.actual[fname]; set {
			delete(f.actual, fname)
			f.actual[nname] = flag
		}
	}
}

// GetNormalizeFunc returns the previously set NormalizeFunc of a function which
// does no translation, if not set previously.
func (f *FlagSet) GetNormalizeFunc() func(f *FlagSet, name string) NormalizedName {
	if f.normalizeNameFunc != nil {
		return f.normalizeNameFunc
	}
	return func(f *FlagSet, name string) NormalizedName { return NormalizedName(name) }
}

func (f *FlagSet) normalizeFlagName(name string) NormalizedName {
	n := f.GetNormalizeFunc()
	return n(f, name)
}

func (f *FlagSet) out() io.Writer {
	if f.output == nil {
		return os.Stderr
	}
	return f.output
}

// SetOutput sets the destination for usage and error messages.
// If output is nil, os.Stderr is used.
func (f *FlagSet) SetOutput(output io.Writer) {
	f.output = output
}

// VisitAll visits the flags in lexicographical order or
// in primordial order if f.SortFlags is false, calling fn for each.
// It visits all flags, even those not set.
func (f *FlagSet) VisitAll(fn func(*Flag)) {
	if len(f.formal) == 0 {
		return
	}

	var flags []*Flag
	if f.SortFlags {
		if len(f.formal) != len(f.sortedFormal) {
			f.sortedFormal = sortFlags(f.formal)
		}
		flags = f.sortedFormal
	} else {
		flags = f.orderedFormal
	}

	for _, flag := range flags {
		fn(flag)
	}
}

// HasFlags returns a bool to indicate if the FlagSet has any flags defined.
func (f *FlagSet) HasFlags() bool {
	return len(f.formal) > 0
}

// HasAvailableFlags returns a bool to indicate if the FlagSet has any flags
// that are not hidden.
func (f *FlagSet) HasAvailableFlags() bool {
	for _, flag := range f.formal {
		if !flag.Hidden {
			return true
		}
	}
	return false
}

// VisitAll visits the command-line flags in lexicographical order or
// in primordial order if f.SortFlags is false, calling fn for each.
// It visits all flags, even those not set.
func VisitAll(fn func(*Flag)) {
	CommandLine.VisitAll(fn)
}

// Visit visits the flags in lexicographical order or
// in primordial order if f.SortFlags is false, calling fn for each.
// It visits only those flags that have been set.
func (f *FlagSet) Visit(fn func(*Flag)) {
	if len(f.actual) == 0 {
		return
	}

	var flags []*Flag
	if f.SortFlags {
		if len(f.actual) != len(f.sortedActual) {
			f.sortedActual = sortFlags(f.actual)
		}
		flags = f.sortedActual
	} else {
		flags = f.orderedActual
	}

	for _, flag := range flags {
		fn(flag)
	}
}

// Visit visits the command-line flags in lexicographical order or
// in primordial order if f.SortFlags is false, calling fn for each.
// It visits only those flags that have been set.
func Visit(fn func(*Flag)) {
	CommandLine.Visit(fn)
}

// Lookup returns the Flag structure of the named flag, returning nil if none exists.
func (f *FlagSet) Lookup(name string) *Flag {
	return f.lookup(f.normalizeFlagName(name))
}

// ShorthandLookup returns the Flag structure of the short handed flag,
// returning nil if none exists.
// It panics, if len(name) > 1.
func (f *FlagSet) ShorthandLookup(name string) *Flag {
	if name == "" {
		return nil
	}
	if len(name) > 1 {
		msg := fmt.Sprintf("can not look up shorthand which is more than one ASCII character: %q", name)
		fmt.Fprintf(f.out(), msg)
		panic(msg)
	}
	c := name[0]
	return f.shorthands[c]
}

// lookup returns the Flag structure of the named flag, returning nil if none exists.
func (f *FlagSet) lookup(name NormalizedName) *Flag {
	return f.formal[name]
}

// func to return a given type for a given flag name
func (f *FlagSet) getFlagType(name string, ftype string, convFunc func(sval string) (interface{}, error)) (interface{}, error) {
	flag := f.Lookup(name)
	if flag == nil {
		err := fmt.Errorf("flag accessed but not defined: %s", name)
		return nil, err
	}

	if flag.Value.Type() != ftype {
		err := fmt.Errorf("trying to get %s value of flag of type %s", ftype, flag.Value.Type())
		return nil, err
	}

	sval := flag.Value.String()
	result, err := convFunc(sval)
	if err != nil {
		return nil, err
	}
	return result, nil
}

// ArgsLenAtDash will return the length of f.Args at the moment when a -- was
// found during arg parsing. This allows your program to know which args were
// before the -- and which came after.
func (f *FlagSet) ArgsLenAtDash() int {
	return f.argsLenAtDash
}

// MarkDeprecated indicated that a flag is deprecated in your program. It will
// continue to function but will not show up in help or usage messages. Using
// this flag will also print the given usageMessage.
func (f *FlagSet) MarkDeprecated(name string, usageMessage string) error {
	flag := f.Lookup(name)
	if flag == nil {
		return fmt.Errorf("flag %q does not exist", name)
	}
	if usageMessage == "" {
		return fmt.Errorf("deprecated message for flag %q must be set", name)
	}
	flag.Deprecated = usageMessage
	flag.Hidden = true
	return nil
}

// MarkShorthandDeprecated will mark the shorthand of a flag deprecated in your
// program. It will continue to function but will not show up in help or usage
// messages. Using this flag will also print the given usageMessage.
func (f *FlagSet) MarkShorthandDeprecated(name string, usageMessage string) error {
	flag := f.Lookup(name)
	if flag == nil {
		return fmt.Errorf("flag %q does not exist", name)
	}
	if usageMessage == "" {
		return fmt.Errorf("deprecated message for flag %q must be set", name)
	}
	flag.ShorthandDeprecated = usageMessage
	return nil
}

// MarkHidden sets a flag to 'hidden' in your program. It will continue to
// function but will not show up in help or usage messages.
func (f *FlagSet) MarkHidden(name string) error {
	flag := f.Lookup(name)
	if flag == nil {
		return fmt.Errorf("flag %q does not exist", name)
	}
	flag.Hidden = true
	return nil
}

// Lookup returns the Flag structure of the named command-line flag,
// returning nil if none exists.
func Lookup(name string) *Flag {
	return CommandLine.Lookup(name)
}

// ShorthandLookup returns the Flag structure of the short handed flag,
// returning nil if none exists.
func ShorthandLookup(name string) *Flag {
	return CommandLine.ShorthandLookup(name)
}

// Set sets the value of the named flag.
func (f *FlagSet) Set(name, value string) error {
	normalName := f.normalizeFlagName(name)
	flag, ok := f.formal[normalName]
	if !ok {
		return fmt.Errorf("no such flag -%v", name)
	}

	err := flag.Value.Set(value)
	if err != nil {
		var flagName string
		if flag.Shorthand != "" && flag.ShorthandDeprecated == "" {
			flagName = fmt.Sprintf("-%s, --%s", flag.Shorthand, flag.Name)
		} else {
			flagName = fmt.Sprintf("--%s", flag.Name)
		}
		return fmt.Errorf("invalid argument %q for %q flag: %v", value, flagName, err)
	}

	if !flag.Changed {
		if f.actual == nil {
			f.actual = make(map[NormalizedName]*Flag)
		}
		f.actual[normalName] = flag
		f.orderedActual = append(f.orderedActual, flag)

		flag.Changed = true
	}

	if flag.Deprecated != "" {
		fmt.Fprintf(f.out(), "Flag --%s has been deprecated, %s\n", flag.Name, flag.Deprecated)
	}
	return nil
}

// SetAnnotation allows one to set arbitrary annotations on a flag in the FlagSet.
// This is sometimes used by spf13/cobra programs which want to generate additional
// bash completion information.
func (f *FlagSet) SetAnnotation(name, key string, values []string) error {
	normalName := f.normalizeFlagName(name)
	flag, ok := f.formal[normalName]
	if !ok {
		return fmt.Errorf("no such flag -%v", name)
	}
	if flag.Annotations == nil {
		flag.Annotations = map[string][]string{}
	}
	flag.Annotations[key] = values
	return nil
}

// Changed returns true if the flag was explicitly set during Parse() and false
// otherwise
func (f *FlagSet) Changed(name string) bool {
	flag := f.Lookup(name)
	// If a flag doesn't exist, it wasn't changed....
	if flag == nil {
		return false
	}
	return flag.Changed
}

// Set sets the value of the named command-line flag.
func Set(name, value string) error {
	return CommandLine.Set(name, value)
}

// PrintDefaults prints, to standard error unless configured
// otherwise, the default values of all defined flags in the set.
func (f *FlagSet) PrintDefaults() {
	usages := f.FlagUsages()
	fmt.Fprint(f.out(), usages)
}

// defaultIsZeroValue returns true if the default value for this flag represents
// a zero value.
func (f *Flag) defaultIsZeroValue() bool {
	switch f.Value.(type) {
	case boolFlag:
		return f.DefValue == "false"
	case *durationValue:
		// Beginning in Go 1.7, duration zero values are "0s"
		return f.DefValue == "0" || f.DefValue == "0s"
	case *intValue, *int8Value, *int32Value, *int64Value, *uintValue, *uint8Value, *uint16Value, *uint32Value, *uint64Value, *countValue, *float32Value, *float64Value:
		return f.DefValue == "0"
	case *stringValue:
		return f.DefValue == ""
	case *ipValue, *ipMaskValue, *ipNetValue:
		return f.DefValue == "<nil>"
	case *intSliceValue, *stringSliceValue, *stringArrayValue:
		return f.DefValue == "[]"
	default:
		switch f.Value.String() {
		case "false":
			return true
		case "<nil>":
			return true
		case "":
			return true
		case "0":
			return true
		}
		return false
	}
}

// UnquoteUsage extracts a back-quoted name from the usage
// string for a flag and returns it and the un-quoted usage.
// Given "a `name` to show" it returns ("name", "a name to show").
// If there are no back quotes, the name is an educated guess of the
// type of the flag's value, or the empty string if the flag is boolean.
func UnquoteUsage(flag *Flag) (name string, usage string) {
	// Look for a back-quoted name, but avoid the strings package.
	usage = flag.Usage
	for i := 0; i < len(usage); i++ {
		if usage[i] == '`' {
			for j := i + 1; j < len(usage); j++ {
				if usage[j] == '`' {
					name = usage[i+1 : j]
					usage = usage[:i] + name + usage[j+1:]
					return name, usage
				}
			}
			break // Only one back quote; use type name.
		}
	}

	name = flag.Value.Type()
	switch name {
	case "bool":
		name = ""
	case "float64":
		name = "float"
	case "int64":
		name = "int"
	case "uint64":
		name = "uint"
	case "stringSlice":
		name = "strings"
	case "intSlice":
		name = "ints"
	case "uintSlice":
		name = "uints"
	case "boolSlice":
		name = "bools"
	}

	return
}

// Splits the string `s` on whitespace into an initial substring up to
// `i` runes in length and the remainder. Will go `slop` over `i` if
// that encompasses the entire string (which allows the caller to
// avoid short orphan words on the final line).
func wrapN(i, slop int, s string) (string, string) {
	if i+slop > len(s) {
		return s, ""
	}

	w := strings.LastIndexAny(s[:i], " \t\n")
	if w <= 0 {
		return s, ""
	}
	nlPos := strings.LastIndex(s[:i], "\n")
	if nlPos > 0 && nlPos < w {
		return s[:nlPos], s[nlPos+1:]
	}
	return s[:w], s[w+1:]
}

// Wraps the string `s` to a maximum width `w` with leading indent
// `i`. The first line is not indented (this is assumed to be done by
// caller). Pass `w` == 0 to do no wrapping
func wrap(i, w int, s string) string {
	if w == 0 {
		return strings.Replace(s, "\n", "\n"+strings.Repeat(" ", i), -1)
	}

	// space between indent i and end of line width w into which
	// we should wrap the text.
	wrap := w - i

	var r, l string

	// Not enough space for sensible wrapping. Wrap as a block on
	// the next line instead.
	if wrap < 24 {
		i = 16
		wrap = w - i
		r += "\n" + strings.Repeat(" ", i)
	}
	// If still not enough space then don't even try to wrap.
	if wrap < 24 {
		return strings.Replace(s, "\n", r, -1)
	}

	// Try to avoid short orphan words on the final line, by
	// allowing wrapN to go a bit over if that would fit in the
	// remainder of the line.
	slop := 5
	wrap = wrap - slop

	// Handle first line, which is indented by the caller (or the
	// special case above)
	l, s = wrapN(wrap, slop, s)
	r = r + strings.Replace(l, "\n", "\n"+strings.Repeat(" ", i), -1)

	// Now wrap the rest
	for s != "" {
		var t string

		t, s = wrapN(wrap, slop, s)
		r = r + "\n" + strings.Repeat(" ", i) + strings.Replace(t, "\n", "\n"+strings.Repeat(" ", i), -1)
	}

	return r

}

// FlagUsagesWrapped returns a string containing the usage information
// for all flags in the FlagSet. Wrapped to `cols` columns (0 for no
// wrapping)
func (f *FlagSet) FlagUsagesWrapped(cols int) string {
	buf := new(bytes.Buffer)

	lines := make([]string, 0, len(f.formal))

	maxlen := 0
	f.VisitAll(func(flag *Flag) {
		if flag.Hidden {
			return
		}

		line := ""
		if flag.Shorthand != "" && flag.ShorthandDeprecated == "" {
			line = fmt.Sprintf("  -%s, --%s", flag.Shorthand, flag.Name)
		} else {
			line = fmt.Sprintf("      --%s", flag.Name)
		}

		varname, usage := UnquoteUsage(flag)
		if varname != "" {
			line += " " + varname
		}
		if flag.NoOptDefVal != "" {
			switch flag.Value.Type() {
			case "string":
				line += fmt.Sprintf("[=\"%s\"]", flag.NoOptDefVal)
			case "bool":
				if flag.NoOptDefVal != "true" {
					line += fmt.Sprintf("[=%s]", flag.NoOptDefVal)
				}
			case "count":
				if flag.NoOptDefVal != "+1" {
					line += fmt.Sprintf("[=%s]", flag.NoOptDefVal)
				}
			default:
				line += fmt.Sprintf("[=%s]", flag.NoOptDefVal)
			}
		}

		// This special character will be replaced with spacing once the
		// correct alignment is calculated
		line += "\x00"
		if len(line) > maxlen {
			maxlen = len(line)
		}

		line += usage
		if !flag.defaultIsZeroValue() {
			if flag.Value.Type() == "string" {
				line += fmt.Sprintf(" (default %q)", flag.DefValue)
			} else {
				line += fmt.Sprintf(" (default %s)", flag.DefValue)
			}
		}
		if len(flag.Deprecated) != 0 {
			line += fmt.Sprintf(" (DEPRECATED: %s)", flag.Deprecated)
		}

		lines = append(lines, line)
	})

	for _, line := range lines {
		sidx := strings.Index(line, "\x00")
		spacing := strings.Repeat(" ", maxlen-sidx)
		// maxlen + 2 comes from + 1 for the \x00 and + 1 for the (deliberate) off-by-one in maxlen-sidx
		fmt.Fprintln(buf, line[:sidx], spacing, wrap(maxlen+2, cols, line[sidx+1:]))
	}

	return buf.String()
}

// FlagUsages returns a string containing the usage information for all flags in
// the FlagSet
func (f *FlagSet) FlagUsages() string {
	return f.FlagUsagesWrapped(0)
}

// PrintDefaults prints to standard error the default values of all defined command-line flags.
func PrintDefaults() {
	CommandLine.PrintDefaults()
}

// defaultUsage is the default function to print a usage message.
func defaultUsage(f *FlagSet) {
	fmt.Fprintf(f.out(), "Usage of %s:\n", f.name)
	f.PrintDefaults()
}

// NOTE: Usage is not just defaultUsage(CommandLine)
// because it serves (via godoc flag Usage) as the example
// for how to write your own usage function.

// Usage prints to standard error a usage message documenting all defined command-line flags.
// The function is a variable that may be changed to point to a custom function.
// By default it prints a simple header and calls PrintDefaults; for details about the
// format of the output and how to control it, see the documentation for PrintDefaults.
var Usage = func() {
	fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0])
	PrintDefaults()
}

// NFlag returns the number of flags that have been set.
func (f *FlagSet) NFlag() int { return len(f.actual) }

// NFlag returns the number of command-line flags that have been set.
func NFlag() int { return len(CommandLine.actual) }

// Arg returns the i'th argument.  Arg(0) is the first remaining argument
// after flags have been processed.
func (f *FlagSet) Arg(i int) string {
	if i < 0 || i >= len(f.args) {
		return ""
	}
	return f.args[i]
}

// Arg returns the i'th command-line argument.  Arg(0) is the first remaining argument
// after flags have been processed.
func Arg(i int) string {
	return CommandLine.Arg(i)
}

// NArg is the number of arguments remaining after flags have been processed.
func (f *FlagSet) NArg() int { return len(f.args) }

// NArg is the number of arguments remaining after flags have been processed.
func NArg() int { return len(CommandLine.args) }

// Args returns the non-flag arguments.
func (f *FlagSet) Args() []string { return f.args }

// Args returns the non-flag command-line arguments.
func Args() []string { return CommandLine.args }

// Var defines a flag with the specified name and usage string. The type and
// value of the flag are represented by the first argument, of type Value, which
// typically holds a user-defined implementation of Value. For instance, the
// caller could create a flag that turns a comma-separated string into a slice
// of strings by giving the slice the methods of Value; in particular, Set would
// decompose the comma-separated string into the slice.
func (f *FlagSet) Var(value Value, name string, usage string) {
	f.VarP(value, name, "", usage)
}

// VarPF is like VarP, but returns the flag created
func (f *FlagSet) VarPF(value Value, name, shorthand, usage string) *Flag {
	// Remember the default value as a string; it won't change.
	flag := &Flag{
		Name:      name,
		Shorthand: shorthand,
		Usage:     usage,
		Value:     value,
		DefValue:  value.String(),
	}
	f.AddFlag(flag)
	return flag
}

// VarP is like Var, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) VarP(value Value, name, shorthand, usage string) {
	f.VarPF(value, name, shorthand, usage)
}

// AddFlag will add the flag to the FlagSet
func (f *FlagSet) AddFlag(flag *Flag) {
	normalizedFlagName := f.normalizeFlagName(flag.Name)

	_, alreadyThere := f.formal[normalizedFlagName]
	if alreadyThere {
		msg := fmt.Sprintf("%s flag redefined: %s", f.name, flag.Name)
		fmt.Fprintln(f.out(), msg)
		panic(msg) // Happens only if flags are declared with identical names
	}
	if f.formal == nil {
		f.formal = make(map[NormalizedName]*Flag)
	}

	flag.Name = string(normalizedFlagName)
	f.formal[normalizedFlagName] = flag
	f.orderedFormal = append(f.orderedFormal, flag)

	if flag.Shorthand == "" {
		return
	}
	if len(flag.Shorthand) > 1 {
		msg := fmt.Sprintf("%q shorthand is more than one ASCII character", flag.Shorthand)
		fmt.Fprintf(f.out(), msg)
		panic(msg)
	}
	if f.shorthands == nil {
		f.shorthands = make(map[byte]*Flag)
	}
	c := flag.Shorthand[0]
	used, alreadyThere := f.shorthands[c]
	if alreadyThere {
		msg := fmt.Sprintf("unable to redefine %q shorthand in %q flagset: it's already used for %q flag", c, f.name, used.Name)
		fmt.Fprintf(f.out(), msg)
		panic(msg)
	}
	f.shorthands[c] = flag
}

// AddFlagSet adds one FlagSet to another. If a flag is already present in f
// the flag from newSet will be ignored.
func (f *FlagSet) AddFlagSet(newSet *FlagSet) {
	if newSet == nil {
		return
	}
	newSet.VisitAll(func(flag *Flag) {
		if f.Lookup(flag.Name) == nil {
			f.AddFlag(flag)
		}
	})
}

// Var defines a flag with the specified name and usage string. The type and
// value of the flag are represented by the first argument, of type Value, which
// typically holds a user-defined implementation of Value. For instance, the
// caller could create a flag that turns a comma-separated string into a slice
// of strings by giving the slice the methods of Value; in particular, Set would
// decompose the comma-separated string into the slice.
func Var(value Value, name string, usage string) {
	CommandLine.VarP(value, name, "", usage)
}

// VarP is like Var, but accepts a shorthand letter that can be used after a single dash.
func VarP(value Value, name, shorthand, usage string) {
	CommandLine.VarP(value, name, shorthand, usage)
}

// failf prints to standard error a formatted error and usage message and
// returns the error.
func (f *FlagSet) failf(format string, a ...interface{}) error {
	err := fmt.Errorf(format, a...)
	if f.errorHandling != ContinueOnError {
		fmt.Fprintln(f.out(), err)
		f.usage()
	}
	return err
}

// usage calls the Usage method for the flag set, or the usage function if
// the flag set is CommandLine.
func (f *FlagSet) usage() {
	if f == CommandLine {
		Usage()
	} else if f.Usage == nil {
		defaultUsage(f)
	} else {
		f.Usage()
	}
}

//--unknown (args will be empty)
//--unknown --next-flag ... (args will be --next-flag ...)
//--unknown arg ... (args will be arg ...)
func stripUnknownFlagValue(args []string) []string {
	if len(args) == 0 {
		//--unknown
		return args
	}

	first := args[0]
	if len(first) > 0 && first[0] == '-' {
		//--unknown --next-flag ...
		return args
	}

	//--unknown arg ... (args will be arg ...)
	if len(args) > 1 {
		return args[1:]
	}
	return nil
}

func (f *FlagSet) parseLongArg(s string, args []string, fn parseFunc) (a []string, err error) {
	a = args
	name := s[2:]
	if len(name) == 0 || name[0] == '-' || name[0] == '=' {
		err = f.failf("bad flag syntax: %s", s)
		return
	}

	split := strings.SplitN(name, "=", 2)
	name = split[0]
	flag, exists := f.formal[f.normalizeFlagName(name)]

	if !exists {
		switch {
		case name == "help":
			f.usage()
			return a, ErrHelp
		case f.ParseErrorsWhitelist.UnknownFlags:
			// --unknown=unknownval arg ...
			// we do not want to lose arg in this case
			if len(split) >= 2 {
				return a, nil
			}

			return stripUnknownFlagValue(a), nil
		default:
			err = f.failf("unknown flag: --%s", name)
			return
		}
	}

	var value string
	if len(split) == 2 {
		// '--flag=arg'
		value = split[1]
	} else if flag.NoOptDefVal != "" {
		// '--flag' (arg was optional)
		value = flag.NoOptDefVal
	} else if len(a) > 0 {
		// '--flag arg'
		value = a[0]
		a = a[1:]
	} else {
		// '--flag' (arg was required)
		err = f.failf("flag needs an argument: %s", s)
		return
	}

	err = fn(flag, value)
	if err != nil {
		f.failf(err.Error())
	}
	return
}

func (f *FlagSet) parseSingleShortArg(shorthands string, args []string, fn parseFunc) (outShorts string, outArgs []string, err error) {
	outArgs = args

	if strings.HasPrefix(shorthands, "test.") {
		return
	}

	outShorts = shorthands[1:]
	c := shorthands[0]

	flag, exists := f.shorthands[c]
	if !exists {
		switch {
		case c == 'h':
			f.usage()
			err = ErrHelp
			return
		case f.ParseErrorsWhitelist.UnknownFlags:
			// '-f=arg arg ...'
			// we do not want to lose arg in this case
			if len(shorthands) > 2 && shorthands[1] == '=' {
				outShorts = ""
				return
			}

			outArgs = stripUnknownFlagValue(outArgs)
			return
		default:
			err = f.failf("unknown shorthand flag: %q in -%s", c, shorthands)
			return
		}
	}

	var value string
	if len(shorthands) > 2 && shorthands[1] == '=' {
		// '-f=arg'
		value = shorthands[2:]
		outShorts = ""
	} else if flag.NoOptDefVal != "" {
		// '-f' (arg was optional)
		value = flag.NoOptDefVal
	} else if len(shorthands) > 1 {
		// '-farg'
		value = shorthands[1:]
		outShorts = ""
	} else if len(args) > 0 {
		// '-f arg'
		value = args[0]
		outArgs = args[1:]
	} else {
		// '-f' (arg was required)
		err = f.failf("flag needs an argument: %q in -%s", c, shorthands)
		return
	}

	if flag.ShorthandDeprecated != "" {
		fmt.Fprintf(f.out(), "Flag shorthand -%s has been deprecated, %s\n", flag.Shorthand, flag.ShorthandDeprecated)
	}

	err = fn(flag, value)
	if err != nil {
		f.failf(err.Error())
	}
	return
}

func (f *FlagSet) parseShortArg(s string, args []string, fn parseFunc) (a []string, err error) {
	a = args
	shorthands := s[1:]

	// "shorthands" can be a series of shorthand letters of flags (e.g. "-vvv").
	for len(shorthands) > 0 {
		shorthands, a, err = f.parseSingleShortArg(shorthands, args, fn)
		if err != nil {
			return
		}
	}

	return
}

func (f *FlagSet) parseArgs(args []string, fn parseFunc) (err error) {
	for len(args) > 0 {
		s := args[0]
		args = args[1:]
		if len(s) == 0 || s[0] != '-' || len(s) == 1 {
			if !f.interspersed {
				f.args = append(f.args, s)
				f.args = append(f.args, args...)
				return nil
			}
			f.args = append(f.args, s)
			continue
		}

		if s[1] == '-' {
			if len(s) == 2 { // "--" terminates the flags
				f.argsLenAtDash = len(f.args)
				f.args = append(f.args, args...)
				break
			}
			args, err = f.parseLongArg(s, args, fn)
		} else {
			args, err = f.parseShortArg(s, args, fn)
		}
		if err != nil {
			return
		}
	}
	return
}

// Parse parses flag definitions from the argument list, which should not
// include the command name.  Must be called after all flags in the FlagSet
// are defined and before flags are accessed by the program.
// The return value will be ErrHelp if -help was set but not defined.
func (f *FlagSet) Parse(arguments []string) error {
	if f.addedGoFlagSets != nil {
		for _, goFlagSet := range f.addedGoFlagSets {
			goFlagSet.Parse(nil)
		}
	}
	f.parsed = true

	if len(arguments) < 0 {
		return nil
	}

	f.args = make([]string, 0, len(arguments))

	set := func(flag *Flag, value string) error {
		return f.Set(flag.Name, value)
	}

	err := f.parseArgs(arguments, set)
	if err != nil {
		switch f.errorHandling {
		case ContinueOnError:
			return err
		case ExitOnError:
			fmt.Println(err)
			os.Exit(2)
		case PanicOnError:
			panic(err)
		}
	}
	return nil
}

type parseFunc func(flag *Flag, value string) error

// ParseAll parses flag definitions from the argument list, which should not
// include the command name. The arguments for fn are flag and value. Must be
// called after all flags in the FlagSet are defined and before flags are
// accessed by the program. The return value will be ErrHelp if -help was set
// but not defined.
func (f *FlagSet) ParseAll(arguments []string, fn func(flag *Flag, value string) error) error {
	f.parsed = true
	f.args = make([]string, 0, len(arguments))

	err := f.parseArgs(arguments, fn)
	if err != nil {
		switch f.errorHandling {
		case ContinueOnError:
			return err
		case ExitOnError:
			os.Exit(2)
		case PanicOnError:
			panic(err)
		}
	}
	return nil
}

// Parsed reports whether f.Parse has been called.
func (f *FlagSet) Parsed() bool {
	return f.parsed
}

// Parse parses the command-line flags from os.Args[1:].  Must be called
// after all flags are defined and before flags are accessed by the program.
func Parse() {
	// Ignore errors; CommandLine is set for ExitOnError.
	CommandLine.Parse(os.Args[1:])
}

// ParseAll parses the command-line flags from os.Args[1:] and called fn for each.
// The arguments for fn are flag and value. Must be called after all flags are
// defined and before flags are accessed by the program.
func ParseAll(fn func(flag *Flag, value string) error) {
	// Ignore errors; CommandLine is set for ExitOnError.
	CommandLine.ParseAll(os.Args[1:], fn)
}

// SetInterspersed sets whether to support interspersed option/non-option arguments.
func SetInterspersed(interspersed bool) {
	CommandLine.SetInterspersed(interspersed)
}

// Parsed returns true if the command-line flags have been parsed.
func Parsed() bool {
	return CommandLine.Parsed()
}

// CommandLine is the default set of command-line flags, parsed from os.Args.
var CommandLine = NewFlagSet(os.Args[0], ExitOnError)

// NewFlagSet returns a new, empty flag set with the specified name,
// error handling property and SortFlags set to true.
func NewFlagSet(name string, errorHandling ErrorHandling) *FlagSet {
	f := &FlagSet{
		name:          name,
		errorHandling: errorHandling,
		argsLenAtDash: -1,
		interspersed:  true,
		SortFlags:     true,
	}
	return f
}

// SetInterspersed sets whether to support interspersed option/non-option arguments.
func (f *FlagSet) SetInterspersed(interspersed bool) {
	f.interspersed = interspersed
}

// Init sets the name and error handling property for a flag set.
// By default, the zero FlagSet uses an empty name and the
// ContinueOnError error handling policy.
func (f *FlagSet) Init(name string, errorHandling ErrorHandling) {
	f.name = name
	f.errorHandling = errorHandling
	f.argsLenAtDash = -1
}
   07070100000B52000081A4000000000000000000000001645E367C00000C60000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/float32.go  package pflag

import "strconv"

// -- float32 Value
type float32Value float32

func newFloat32Value(val float32, p *float32) *float32Value {
	*p = val
	return (*float32Value)(p)
}

func (f *float32Value) Set(s string) error {
	v, err := strconv.ParseFloat(s, 32)
	*f = float32Value(v)
	return err
}

func (f *float32Value) Type() string {
	return "float32"
}

func (f *float32Value) String() string { return strconv.FormatFloat(float64(*f), 'g', -1, 32) }

func float32Conv(sval string) (interface{}, error) {
	v, err := strconv.ParseFloat(sval, 32)
	if err != nil {
		return 0, err
	}
	return float32(v), nil
}

// GetFloat32 return the float32 value of a flag with the given name
func (f *FlagSet) GetFloat32(name string) (float32, error) {
	val, err := f.getFlagType(name, "float32", float32Conv)
	if err != nil {
		return 0, err
	}
	return val.(float32), nil
}

// Float32Var defines a float32 flag with specified name, default value, and usage string.
// The argument p points to a float32 variable in which to store the value of the flag.
func (f *FlagSet) Float32Var(p *float32, name string, value float32, usage string) {
	f.VarP(newFloat32Value(value, p), name, "", usage)
}

// Float32VarP is like Float32Var, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Float32VarP(p *float32, name, shorthand string, value float32, usage string) {
	f.VarP(newFloat32Value(value, p), name, shorthand, usage)
}

// Float32Var defines a float32 flag with specified name, default value, and usage string.
// The argument p points to a float32 variable in which to store the value of the flag.
func Float32Var(p *float32, name string, value float32, usage string) {
	CommandLine.VarP(newFloat32Value(value, p), name, "", usage)
}

// Float32VarP is like Float32Var, but accepts a shorthand letter that can be used after a single dash.
func Float32VarP(p *float32, name, shorthand string, value float32, usage string) {
	CommandLine.VarP(newFloat32Value(value, p), name, shorthand, usage)
}

// Float32 defines a float32 flag with specified name, default value, and usage string.
// The return value is the address of a float32 variable that stores the value of the flag.
func (f *FlagSet) Float32(name string, value float32, usage string) *float32 {
	p := new(float32)
	f.Float32VarP(p, name, "", value, usage)
	return p
}

// Float32P is like Float32, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Float32P(name, shorthand string, value float32, usage string) *float32 {
	p := new(float32)
	f.Float32VarP(p, name, shorthand, value, usage)
	return p
}

// Float32 defines a float32 flag with specified name, default value, and usage string.
// The return value is the address of a float32 variable that stores the value of the flag.
func Float32(name string, value float32, usage string) *float32 {
	return CommandLine.Float32P(name, "", value, usage)
}

// Float32P is like Float32, but accepts a shorthand letter that can be used after a single dash.
func Float32P(name, shorthand string, value float32, usage string) *float32 {
	return CommandLine.Float32P(name, shorthand, value, usage)
}
07070100000B53000081A4000000000000000000000001645E367C000013B2000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/float32_slice.go    package pflag

import (
	"fmt"
	"strconv"
	"strings"
)

// -- float32Slice Value
type float32SliceValue struct {
	value   *[]float32
	changed bool
}

func newFloat32SliceValue(val []float32, p *[]float32) *float32SliceValue {
	isv := new(float32SliceValue)
	isv.value = p
	*isv.value = val
	return isv
}

func (s *float32SliceValue) Set(val string) error {
	ss := strings.Split(val, ",")
	out := make([]float32, len(ss))
	for i, d := range ss {
		var err error
		var temp64 float64
		temp64, err = strconv.ParseFloat(d, 32)
		if err != nil {
			return err
		}
		out[i] = float32(temp64)

	}
	if !s.changed {
		*s.value = out
	} else {
		*s.value = append(*s.value, out...)
	}
	s.changed = true
	return nil
}

func (s *float32SliceValue) Type() string {
	return "float32Slice"
}

func (s *float32SliceValue) String() string {
	out := make([]string, len(*s.value))
	for i, d := range *s.value {
		out[i] = fmt.Sprintf("%f", d)
	}
	return "[" + strings.Join(out, ",") + "]"
}

func (s *float32SliceValue) fromString(val string) (float32, error) {
	t64, err := strconv.ParseFloat(val, 32)
	if err != nil {
		return 0, err
	}
	return float32(t64), nil
}

func (s *float32SliceValue) toString(val float32) string {
	return fmt.Sprintf("%f", val)
}

func (s *float32SliceValue) Append(val string) error {
	i, err := s.fromString(val)
	if err != nil {
		return err
	}
	*s.value = append(*s.value, i)
	return nil
}

func (s *float32SliceValue) Replace(val []string) error {
	out := make([]float32, len(val))
	for i, d := range val {
		var err error
		out[i], err = s.fromString(d)
		if err != nil {
			return err
		}
	}
	*s.value = out
	return nil
}

func (s *float32SliceValue) GetSlice() []string {
	out := make([]string, len(*s.value))
	for i, d := range *s.value {
		out[i] = s.toString(d)
	}
	return out
}

func float32SliceConv(val string) (interface{}, error) {
	val = strings.Trim(val, "[]")
	// Empty string would cause a slice with one (empty) entry
	if len(val) == 0 {
		return []float32{}, nil
	}
	ss := strings.Split(val, ",")
	out := make([]float32, len(ss))
	for i, d := range ss {
		var err error
		var temp64 float64
		temp64, err = strconv.ParseFloat(d, 32)
		if err != nil {
			return nil, err
		}
		out[i] = float32(temp64)

	}
	return out, nil
}

// GetFloat32Slice return the []float32 value of a flag with the given name
func (f *FlagSet) GetFloat32Slice(name string) ([]float32, error) {
	val, err := f.getFlagType(name, "float32Slice", float32SliceConv)
	if err != nil {
		return []float32{}, err
	}
	return val.([]float32), nil
}

// Float32SliceVar defines a float32Slice flag with specified name, default value, and usage string.
// The argument p points to a []float32 variable in which to store the value of the flag.
func (f *FlagSet) Float32SliceVar(p *[]float32, name string, value []float32, usage string) {
	f.VarP(newFloat32SliceValue(value, p), name, "", usage)
}

// Float32SliceVarP is like Float32SliceVar, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Float32SliceVarP(p *[]float32, name, shorthand string, value []float32, usage string) {
	f.VarP(newFloat32SliceValue(value, p), name, shorthand, usage)
}

// Float32SliceVar defines a float32[] flag with specified name, default value, and usage string.
// The argument p points to a float32[] variable in which to store the value of the flag.
func Float32SliceVar(p *[]float32, name string, value []float32, usage string) {
	CommandLine.VarP(newFloat32SliceValue(value, p), name, "", usage)
}

// Float32SliceVarP is like Float32SliceVar, but accepts a shorthand letter that can be used after a single dash.
func Float32SliceVarP(p *[]float32, name, shorthand string, value []float32, usage string) {
	CommandLine.VarP(newFloat32SliceValue(value, p), name, shorthand, usage)
}

// Float32Slice defines a []float32 flag with specified name, default value, and usage string.
// The return value is the address of a []float32 variable that stores the value of the flag.
func (f *FlagSet) Float32Slice(name string, value []float32, usage string) *[]float32 {
	p := []float32{}
	f.Float32SliceVarP(&p, name, "", value, usage)
	return &p
}

// Float32SliceP is like Float32Slice, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Float32SliceP(name, shorthand string, value []float32, usage string) *[]float32 {
	p := []float32{}
	f.Float32SliceVarP(&p, name, shorthand, value, usage)
	return &p
}

// Float32Slice defines a []float32 flag with specified name, default value, and usage string.
// The return value is the address of a []float32 variable that stores the value of the flag.
func Float32Slice(name string, value []float32, usage string) *[]float32 {
	return CommandLine.Float32SliceP(name, "", value, usage)
}

// Float32SliceP is like Float32Slice, but accepts a shorthand letter that can be used after a single dash.
func Float32SliceP(name, shorthand string, value []float32, usage string) *[]float32 {
	return CommandLine.Float32SliceP(name, shorthand, value, usage)
}
  07070100000B54000081A4000000000000000000000001645E367C00000C21000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/float64.go  package pflag

import "strconv"

// -- float64 Value
type float64Value float64

func newFloat64Value(val float64, p *float64) *float64Value {
	*p = val
	return (*float64Value)(p)
}

func (f *float64Value) Set(s string) error {
	v, err := strconv.ParseFloat(s, 64)
	*f = float64Value(v)
	return err
}

func (f *float64Value) Type() string {
	return "float64"
}

func (f *float64Value) String() string { return strconv.FormatFloat(float64(*f), 'g', -1, 64) }

func float64Conv(sval string) (interface{}, error) {
	return strconv.ParseFloat(sval, 64)
}

// GetFloat64 return the float64 value of a flag with the given name
func (f *FlagSet) GetFloat64(name string) (float64, error) {
	val, err := f.getFlagType(name, "float64", float64Conv)
	if err != nil {
		return 0, err
	}
	return val.(float64), nil
}

// Float64Var defines a float64 flag with specified name, default value, and usage string.
// The argument p points to a float64 variable in which to store the value of the flag.
func (f *FlagSet) Float64Var(p *float64, name string, value float64, usage string) {
	f.VarP(newFloat64Value(value, p), name, "", usage)
}

// Float64VarP is like Float64Var, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Float64VarP(p *float64, name, shorthand string, value float64, usage string) {
	f.VarP(newFloat64Value(value, p), name, shorthand, usage)
}

// Float64Var defines a float64 flag with specified name, default value, and usage string.
// The argument p points to a float64 variable in which to store the value of the flag.
func Float64Var(p *float64, name string, value float64, usage string) {
	CommandLine.VarP(newFloat64Value(value, p), name, "", usage)
}

// Float64VarP is like Float64Var, but accepts a shorthand letter that can be used after a single dash.
func Float64VarP(p *float64, name, shorthand string, value float64, usage string) {
	CommandLine.VarP(newFloat64Value(value, p), name, shorthand, usage)
}

// Float64 defines a float64 flag with specified name, default value, and usage string.
// The return value is the address of a float64 variable that stores the value of the flag.
func (f *FlagSet) Float64(name string, value float64, usage string) *float64 {
	p := new(float64)
	f.Float64VarP(p, name, "", value, usage)
	return p
}

// Float64P is like Float64, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Float64P(name, shorthand string, value float64, usage string) *float64 {
	p := new(float64)
	f.Float64VarP(p, name, shorthand, value, usage)
	return p
}

// Float64 defines a float64 flag with specified name, default value, and usage string.
// The return value is the address of a float64 variable that stores the value of the flag.
func Float64(name string, value float64, usage string) *float64 {
	return CommandLine.Float64P(name, "", value, usage)
}

// Float64P is like Float64, but accepts a shorthand letter that can be used after a single dash.
func Float64P(name, shorthand string, value float64, usage string) *float64 {
	return CommandLine.Float64P(name, shorthand, value, usage)
}
   07070100000B55000081A4000000000000000000000001645E367C0000130F000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/float64_slice.go    package pflag

import (
	"fmt"
	"strconv"
	"strings"
)

// -- float64Slice Value
type float64SliceValue struct {
	value   *[]float64
	changed bool
}

func newFloat64SliceValue(val []float64, p *[]float64) *float64SliceValue {
	isv := new(float64SliceValue)
	isv.value = p
	*isv.value = val
	return isv
}

func (s *float64SliceValue) Set(val string) error {
	ss := strings.Split(val, ",")
	out := make([]float64, len(ss))
	for i, d := range ss {
		var err error
		out[i], err = strconv.ParseFloat(d, 64)
		if err != nil {
			return err
		}

	}
	if !s.changed {
		*s.value = out
	} else {
		*s.value = append(*s.value, out...)
	}
	s.changed = true
	return nil
}

func (s *float64SliceValue) Type() string {
	return "float64Slice"
}

func (s *float64SliceValue) String() string {
	out := make([]string, len(*s.value))
	for i, d := range *s.value {
		out[i] = fmt.Sprintf("%f", d)
	}
	return "[" + strings.Join(out, ",") + "]"
}

func (s *float64SliceValue) fromString(val string) (float64, error) {
	return strconv.ParseFloat(val, 64)
}

func (s *float64SliceValue) toString(val float64) string {
	return fmt.Sprintf("%f", val)
}

func (s *float64SliceValue) Append(val string) error {
	i, err := s.fromString(val)
	if err != nil {
		return err
	}
	*s.value = append(*s.value, i)
	return nil
}

func (s *float64SliceValue) Replace(val []string) error {
	out := make([]float64, len(val))
	for i, d := range val {
		var err error
		out[i], err = s.fromString(d)
		if err != nil {
			return err
		}
	}
	*s.value = out
	return nil
}

func (s *float64SliceValue) GetSlice() []string {
	out := make([]string, len(*s.value))
	for i, d := range *s.value {
		out[i] = s.toString(d)
	}
	return out
}

func float64SliceConv(val string) (interface{}, error) {
	val = strings.Trim(val, "[]")
	// Empty string would cause a slice with one (empty) entry
	if len(val) == 0 {
		return []float64{}, nil
	}
	ss := strings.Split(val, ",")
	out := make([]float64, len(ss))
	for i, d := range ss {
		var err error
		out[i], err = strconv.ParseFloat(d, 64)
		if err != nil {
			return nil, err
		}

	}
	return out, nil
}

// GetFloat64Slice return the []float64 value of a flag with the given name
func (f *FlagSet) GetFloat64Slice(name string) ([]float64, error) {
	val, err := f.getFlagType(name, "float64Slice", float64SliceConv)
	if err != nil {
		return []float64{}, err
	}
	return val.([]float64), nil
}

// Float64SliceVar defines a float64Slice flag with specified name, default value, and usage string.
// The argument p points to a []float64 variable in which to store the value of the flag.
func (f *FlagSet) Float64SliceVar(p *[]float64, name string, value []float64, usage string) {
	f.VarP(newFloat64SliceValue(value, p), name, "", usage)
}

// Float64SliceVarP is like Float64SliceVar, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Float64SliceVarP(p *[]float64, name, shorthand string, value []float64, usage string) {
	f.VarP(newFloat64SliceValue(value, p), name, shorthand, usage)
}

// Float64SliceVar defines a float64[] flag with specified name, default value, and usage string.
// The argument p points to a float64[] variable in which to store the value of the flag.
func Float64SliceVar(p *[]float64, name string, value []float64, usage string) {
	CommandLine.VarP(newFloat64SliceValue(value, p), name, "", usage)
}

// Float64SliceVarP is like Float64SliceVar, but accepts a shorthand letter that can be used after a single dash.
func Float64SliceVarP(p *[]float64, name, shorthand string, value []float64, usage string) {
	CommandLine.VarP(newFloat64SliceValue(value, p), name, shorthand, usage)
}

// Float64Slice defines a []float64 flag with specified name, default value, and usage string.
// The return value is the address of a []float64 variable that stores the value of the flag.
func (f *FlagSet) Float64Slice(name string, value []float64, usage string) *[]float64 {
	p := []float64{}
	f.Float64SliceVarP(&p, name, "", value, usage)
	return &p
}

// Float64SliceP is like Float64Slice, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Float64SliceP(name, shorthand string, value []float64, usage string) *[]float64 {
	p := []float64{}
	f.Float64SliceVarP(&p, name, shorthand, value, usage)
	return &p
}

// Float64Slice defines a []float64 flag with specified name, default value, and usage string.
// The return value is the address of a []float64 variable that stores the value of the flag.
func Float64Slice(name string, value []float64, usage string) *[]float64 {
	return CommandLine.Float64SliceP(name, "", value, usage)
}

// Float64SliceP is like Float64Slice, but accepts a shorthand letter that can be used after a single dash.
func Float64SliceP(name, shorthand string, value []float64, usage string) *[]float64 {
	return CommandLine.Float64SliceP(name, shorthand, value, usage)
}
 07070100000B56000081A4000000000000000000000001645E367C00000AFD000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/golangflag.go   // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package pflag

import (
	goflag "flag"
	"reflect"
	"strings"
)

// flagValueWrapper implements pflag.Value around a flag.Value.  The main
// difference here is the addition of the Type method that returns a string
// name of the type.  As this is generally unknown, we approximate that with
// reflection.
type flagValueWrapper struct {
	inner    goflag.Value
	flagType string
}

// We are just copying the boolFlag interface out of goflag as that is what
// they use to decide if a flag should get "true" when no arg is given.
type goBoolFlag interface {
	goflag.Value
	IsBoolFlag() bool
}

func wrapFlagValue(v goflag.Value) Value {
	// If the flag.Value happens to also be a pflag.Value, just use it directly.
	if pv, ok := v.(Value); ok {
		return pv
	}

	pv := &flagValueWrapper{
		inner: v,
	}

	t := reflect.TypeOf(v)
	if t.Kind() == reflect.Interface || t.Kind() == reflect.Ptr {
		t = t.Elem()
	}

	pv.flagType = strings.TrimSuffix(t.Name(), "Value")
	return pv
}

func (v *flagValueWrapper) String() string {
	return v.inner.String()
}

func (v *flagValueWrapper) Set(s string) error {
	return v.inner.Set(s)
}

func (v *flagValueWrapper) Type() string {
	return v.flagType
}

// PFlagFromGoFlag will return a *pflag.Flag given a *flag.Flag
// If the *flag.Flag.Name was a single character (ex: `v`) it will be accessiblei
// with both `-v` and `--v` in flags. If the golang flag was more than a single
// character (ex: `verbose`) it will only be accessible via `--verbose`
func PFlagFromGoFlag(goflag *goflag.Flag) *Flag {
	// Remember the default value as a string; it won't change.
	flag := &Flag{
		Name:  goflag.Name,
		Usage: goflag.Usage,
		Value: wrapFlagValue(goflag.Value),
		// Looks like golang flags don't set DefValue correctly  :-(
		//DefValue: goflag.DefValue,
		DefValue: goflag.Value.String(),
	}
	// Ex: if the golang flag was -v, allow both -v and --v to work
	if len(flag.Name) == 1 {
		flag.Shorthand = flag.Name
	}
	if fv, ok := goflag.Value.(goBoolFlag); ok && fv.IsBoolFlag() {
		flag.NoOptDefVal = "true"
	}
	return flag
}

// AddGoFlag will add the given *flag.Flag to the pflag.FlagSet
func (f *FlagSet) AddGoFlag(goflag *goflag.Flag) {
	if f.Lookup(goflag.Name) != nil {
		return
	}
	newflag := PFlagFromGoFlag(goflag)
	f.AddFlag(newflag)
}

// AddGoFlagSet will add the given *flag.FlagSet to the pflag.FlagSet
func (f *FlagSet) AddGoFlagSet(newSet *goflag.FlagSet) {
	if newSet == nil {
		return
	}
	newSet.VisitAll(func(goflag *goflag.Flag) {
		f.AddGoFlag(goflag)
	})
	if f.addedGoFlagSets == nil {
		f.addedGoFlagSets = make([]*goflag.FlagSet, 0)
	}
	f.addedGoFlagSets = append(f.addedGoFlagSets, newSet)
}
   07070100000B57000081A4000000000000000000000001645E367C00000ADC000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/int.go  package pflag

import "strconv"

// -- int Value
type intValue int

func newIntValue(val int, p *int) *intValue {
	*p = val
	return (*intValue)(p)
}

func (i *intValue) Set(s string) error {
	v, err := strconv.ParseInt(s, 0, 64)
	*i = intValue(v)
	return err
}

func (i *intValue) Type() string {
	return "int"
}

func (i *intValue) String() string { return strconv.Itoa(int(*i)) }

func intConv(sval string) (interface{}, error) {
	return strconv.Atoi(sval)
}

// GetInt return the int value of a flag with the given name
func (f *FlagSet) GetInt(name string) (int, error) {
	val, err := f.getFlagType(name, "int", intConv)
	if err != nil {
		return 0, err
	}
	return val.(int), nil
}

// IntVar defines an int flag with specified name, default value, and usage string.
// The argument p points to an int variable in which to store the value of the flag.
func (f *FlagSet) IntVar(p *int, name string, value int, usage string) {
	f.VarP(newIntValue(value, p), name, "", usage)
}

// IntVarP is like IntVar, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) IntVarP(p *int, name, shorthand string, value int, usage string) {
	f.VarP(newIntValue(value, p), name, shorthand, usage)
}

// IntVar defines an int flag with specified name, default value, and usage string.
// The argument p points to an int variable in which to store the value of the flag.
func IntVar(p *int, name string, value int, usage string) {
	CommandLine.VarP(newIntValue(value, p), name, "", usage)
}

// IntVarP is like IntVar, but accepts a shorthand letter that can be used after a single dash.
func IntVarP(p *int, name, shorthand string, value int, usage string) {
	CommandLine.VarP(newIntValue(value, p), name, shorthand, usage)
}

// Int defines an int flag with specified name, default value, and usage string.
// The return value is the address of an int variable that stores the value of the flag.
func (f *FlagSet) Int(name string, value int, usage string) *int {
	p := new(int)
	f.IntVarP(p, name, "", value, usage)
	return p
}

// IntP is like Int, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) IntP(name, shorthand string, value int, usage string) *int {
	p := new(int)
	f.IntVarP(p, name, shorthand, value, usage)
	return p
}

// Int defines an int flag with specified name, default value, and usage string.
// The return value is the address of an int variable that stores the value of the flag.
func Int(name string, value int, usage string) *int {
	return CommandLine.IntP(name, "", value, usage)
}

// IntP is like Int, but accepts a shorthand letter that can be used after a single dash.
func IntP(name, shorthand string, value int, usage string) *int {
	return CommandLine.IntP(name, shorthand, value, usage)
}
07070100000B58000081A4000000000000000000000001645E367C00000BC6000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/int16.go    package pflag

import "strconv"

// -- int16 Value
type int16Value int16

func newInt16Value(val int16, p *int16) *int16Value {
	*p = val
	return (*int16Value)(p)
}

func (i *int16Value) Set(s string) error {
	v, err := strconv.ParseInt(s, 0, 16)
	*i = int16Value(v)
	return err
}

func (i *int16Value) Type() string {
	return "int16"
}

func (i *int16Value) String() string { return strconv.FormatInt(int64(*i), 10) }

func int16Conv(sval string) (interface{}, error) {
	v, err := strconv.ParseInt(sval, 0, 16)
	if err != nil {
		return 0, err
	}
	return int16(v), nil
}

// GetInt16 returns the int16 value of a flag with the given name
func (f *FlagSet) GetInt16(name string) (int16, error) {
	val, err := f.getFlagType(name, "int16", int16Conv)
	if err != nil {
		return 0, err
	}
	return val.(int16), nil
}

// Int16Var defines an int16 flag with specified name, default value, and usage string.
// The argument p points to an int16 variable in which to store the value of the flag.
func (f *FlagSet) Int16Var(p *int16, name string, value int16, usage string) {
	f.VarP(newInt16Value(value, p), name, "", usage)
}

// Int16VarP is like Int16Var, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Int16VarP(p *int16, name, shorthand string, value int16, usage string) {
	f.VarP(newInt16Value(value, p), name, shorthand, usage)
}

// Int16Var defines an int16 flag with specified name, default value, and usage string.
// The argument p points to an int16 variable in which to store the value of the flag.
func Int16Var(p *int16, name string, value int16, usage string) {
	CommandLine.VarP(newInt16Value(value, p), name, "", usage)
}

// Int16VarP is like Int16Var, but accepts a shorthand letter that can be used after a single dash.
func Int16VarP(p *int16, name, shorthand string, value int16, usage string) {
	CommandLine.VarP(newInt16Value(value, p), name, shorthand, usage)
}

// Int16 defines an int16 flag with specified name, default value, and usage string.
// The return value is the address of an int16 variable that stores the value of the flag.
func (f *FlagSet) Int16(name string, value int16, usage string) *int16 {
	p := new(int16)
	f.Int16VarP(p, name, "", value, usage)
	return p
}

// Int16P is like Int16, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Int16P(name, shorthand string, value int16, usage string) *int16 {
	p := new(int16)
	f.Int16VarP(p, name, shorthand, value, usage)
	return p
}

// Int16 defines an int16 flag with specified name, default value, and usage string.
// The return value is the address of an int16 variable that stores the value of the flag.
func Int16(name string, value int16, usage string) *int16 {
	return CommandLine.Int16P(name, "", value, usage)
}

// Int16P is like Int16, but accepts a shorthand letter that can be used after a single dash.
func Int16P(name, shorthand string, value int16, usage string) *int16 {
	return CommandLine.Int16P(name, shorthand, value, usage)
}
  07070100000B59000081A4000000000000000000000001645E367C00000BC5000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/int32.go    package pflag

import "strconv"

// -- int32 Value
type int32Value int32

func newInt32Value(val int32, p *int32) *int32Value {
	*p = val
	return (*int32Value)(p)
}

func (i *int32Value) Set(s string) error {
	v, err := strconv.ParseInt(s, 0, 32)
	*i = int32Value(v)
	return err
}

func (i *int32Value) Type() string {
	return "int32"
}

func (i *int32Value) String() string { return strconv.FormatInt(int64(*i), 10) }

func int32Conv(sval string) (interface{}, error) {
	v, err := strconv.ParseInt(sval, 0, 32)
	if err != nil {
		return 0, err
	}
	return int32(v), nil
}

// GetInt32 return the int32 value of a flag with the given name
func (f *FlagSet) GetInt32(name string) (int32, error) {
	val, err := f.getFlagType(name, "int32", int32Conv)
	if err != nil {
		return 0, err
	}
	return val.(int32), nil
}

// Int32Var defines an int32 flag with specified name, default value, and usage string.
// The argument p points to an int32 variable in which to store the value of the flag.
func (f *FlagSet) Int32Var(p *int32, name string, value int32, usage string) {
	f.VarP(newInt32Value(value, p), name, "", usage)
}

// Int32VarP is like Int32Var, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Int32VarP(p *int32, name, shorthand string, value int32, usage string) {
	f.VarP(newInt32Value(value, p), name, shorthand, usage)
}

// Int32Var defines an int32 flag with specified name, default value, and usage string.
// The argument p points to an int32 variable in which to store the value of the flag.
func Int32Var(p *int32, name string, value int32, usage string) {
	CommandLine.VarP(newInt32Value(value, p), name, "", usage)
}

// Int32VarP is like Int32Var, but accepts a shorthand letter that can be used after a single dash.
func Int32VarP(p *int32, name, shorthand string, value int32, usage string) {
	CommandLine.VarP(newInt32Value(value, p), name, shorthand, usage)
}

// Int32 defines an int32 flag with specified name, default value, and usage string.
// The return value is the address of an int32 variable that stores the value of the flag.
func (f *FlagSet) Int32(name string, value int32, usage string) *int32 {
	p := new(int32)
	f.Int32VarP(p, name, "", value, usage)
	return p
}

// Int32P is like Int32, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Int32P(name, shorthand string, value int32, usage string) *int32 {
	p := new(int32)
	f.Int32VarP(p, name, shorthand, value, usage)
	return p
}

// Int32 defines an int32 flag with specified name, default value, and usage string.
// The return value is the address of an int32 variable that stores the value of the flag.
func Int32(name string, value int32, usage string) *int32 {
	return CommandLine.Int32P(name, "", value, usage)
}

// Int32P is like Int32, but accepts a shorthand letter that can be used after a single dash.
func Int32P(name, shorthand string, value int32, usage string) *int32 {
	return CommandLine.Int32P(name, shorthand, value, usage)
}
   07070100000B5A000081A4000000000000000000000001645E367C000012FF000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/int32_slice.go  package pflag

import (
	"fmt"
	"strconv"
	"strings"
)

// -- int32Slice Value
type int32SliceValue struct {
	value   *[]int32
	changed bool
}

func newInt32SliceValue(val []int32, p *[]int32) *int32SliceValue {
	isv := new(int32SliceValue)
	isv.value = p
	*isv.value = val
	return isv
}

func (s *int32SliceValue) Set(val string) error {
	ss := strings.Split(val, ",")
	out := make([]int32, len(ss))
	for i, d := range ss {
		var err error
		var temp64 int64
		temp64, err = strconv.ParseInt(d, 0, 32)
		if err != nil {
			return err
		}
		out[i] = int32(temp64)

	}
	if !s.changed {
		*s.value = out
	} else {
		*s.value = append(*s.value, out...)
	}
	s.changed = true
	return nil
}

func (s *int32SliceValue) Type() string {
	return "int32Slice"
}

func (s *int32SliceValue) String() string {
	out := make([]string, len(*s.value))
	for i, d := range *s.value {
		out[i] = fmt.Sprintf("%d", d)
	}
	return "[" + strings.Join(out, ",") + "]"
}

func (s *int32SliceValue) fromString(val string) (int32, error) {
	t64, err := strconv.ParseInt(val, 0, 32)
	if err != nil {
		return 0, err
	}
	return int32(t64), nil
}

func (s *int32SliceValue) toString(val int32) string {
	return fmt.Sprintf("%d", val)
}

func (s *int32SliceValue) Append(val string) error {
	i, err := s.fromString(val)
	if err != nil {
		return err
	}
	*s.value = append(*s.value, i)
	return nil
}

func (s *int32SliceValue) Replace(val []string) error {
	out := make([]int32, len(val))
	for i, d := range val {
		var err error
		out[i], err = s.fromString(d)
		if err != nil {
			return err
		}
	}
	*s.value = out
	return nil
}

func (s *int32SliceValue) GetSlice() []string {
	out := make([]string, len(*s.value))
	for i, d := range *s.value {
		out[i] = s.toString(d)
	}
	return out
}

func int32SliceConv(val string) (interface{}, error) {
	val = strings.Trim(val, "[]")
	// Empty string would cause a slice with one (empty) entry
	if len(val) == 0 {
		return []int32{}, nil
	}
	ss := strings.Split(val, ",")
	out := make([]int32, len(ss))
	for i, d := range ss {
		var err error
		var temp64 int64
		temp64, err = strconv.ParseInt(d, 0, 32)
		if err != nil {
			return nil, err
		}
		out[i] = int32(temp64)

	}
	return out, nil
}

// GetInt32Slice return the []int32 value of a flag with the given name
func (f *FlagSet) GetInt32Slice(name string) ([]int32, error) {
	val, err := f.getFlagType(name, "int32Slice", int32SliceConv)
	if err != nil {
		return []int32{}, err
	}
	return val.([]int32), nil
}

// Int32SliceVar defines a int32Slice flag with specified name, default value, and usage string.
// The argument p points to a []int32 variable in which to store the value of the flag.
func (f *FlagSet) Int32SliceVar(p *[]int32, name string, value []int32, usage string) {
	f.VarP(newInt32SliceValue(value, p), name, "", usage)
}

// Int32SliceVarP is like Int32SliceVar, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Int32SliceVarP(p *[]int32, name, shorthand string, value []int32, usage string) {
	f.VarP(newInt32SliceValue(value, p), name, shorthand, usage)
}

// Int32SliceVar defines a int32[] flag with specified name, default value, and usage string.
// The argument p points to a int32[] variable in which to store the value of the flag.
func Int32SliceVar(p *[]int32, name string, value []int32, usage string) {
	CommandLine.VarP(newInt32SliceValue(value, p), name, "", usage)
}

// Int32SliceVarP is like Int32SliceVar, but accepts a shorthand letter that can be used after a single dash.
func Int32SliceVarP(p *[]int32, name, shorthand string, value []int32, usage string) {
	CommandLine.VarP(newInt32SliceValue(value, p), name, shorthand, usage)
}

// Int32Slice defines a []int32 flag with specified name, default value, and usage string.
// The return value is the address of a []int32 variable that stores the value of the flag.
func (f *FlagSet) Int32Slice(name string, value []int32, usage string) *[]int32 {
	p := []int32{}
	f.Int32SliceVarP(&p, name, "", value, usage)
	return &p
}

// Int32SliceP is like Int32Slice, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Int32SliceP(name, shorthand string, value []int32, usage string) *[]int32 {
	p := []int32{}
	f.Int32SliceVarP(&p, name, shorthand, value, usage)
	return &p
}

// Int32Slice defines a []int32 flag with specified name, default value, and usage string.
// The return value is the address of a []int32 variable that stores the value of the flag.
func Int32Slice(name string, value []int32, usage string) *[]int32 {
	return CommandLine.Int32SliceP(name, "", value, usage)
}

// Int32SliceP is like Int32Slice, but accepts a shorthand letter that can be used after a single dash.
func Int32SliceP(name, shorthand string, value []int32, usage string) *[]int32 {
	return CommandLine.Int32SliceP(name, shorthand, value, usage)
}
 07070100000B5B000081A4000000000000000000000001645E367C00000B88000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/int64.go    package pflag

import "strconv"

// -- int64 Value
type int64Value int64

func newInt64Value(val int64, p *int64) *int64Value {
	*p = val
	return (*int64Value)(p)
}

func (i *int64Value) Set(s string) error {
	v, err := strconv.ParseInt(s, 0, 64)
	*i = int64Value(v)
	return err
}

func (i *int64Value) Type() string {
	return "int64"
}

func (i *int64Value) String() string { return strconv.FormatInt(int64(*i), 10) }

func int64Conv(sval string) (interface{}, error) {
	return strconv.ParseInt(sval, 0, 64)
}

// GetInt64 return the int64 value of a flag with the given name
func (f *FlagSet) GetInt64(name string) (int64, error) {
	val, err := f.getFlagType(name, "int64", int64Conv)
	if err != nil {
		return 0, err
	}
	return val.(int64), nil
}

// Int64Var defines an int64 flag with specified name, default value, and usage string.
// The argument p points to an int64 variable in which to store the value of the flag.
func (f *FlagSet) Int64Var(p *int64, name string, value int64, usage string) {
	f.VarP(newInt64Value(value, p), name, "", usage)
}

// Int64VarP is like Int64Var, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Int64VarP(p *int64, name, shorthand string, value int64, usage string) {
	f.VarP(newInt64Value(value, p), name, shorthand, usage)
}

// Int64Var defines an int64 flag with specified name, default value, and usage string.
// The argument p points to an int64 variable in which to store the value of the flag.
func Int64Var(p *int64, name string, value int64, usage string) {
	CommandLine.VarP(newInt64Value(value, p), name, "", usage)
}

// Int64VarP is like Int64Var, but accepts a shorthand letter that can be used after a single dash.
func Int64VarP(p *int64, name, shorthand string, value int64, usage string) {
	CommandLine.VarP(newInt64Value(value, p), name, shorthand, usage)
}

// Int64 defines an int64 flag with specified name, default value, and usage string.
// The return value is the address of an int64 variable that stores the value of the flag.
func (f *FlagSet) Int64(name string, value int64, usage string) *int64 {
	p := new(int64)
	f.Int64VarP(p, name, "", value, usage)
	return p
}

// Int64P is like Int64, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Int64P(name, shorthand string, value int64, usage string) *int64 {
	p := new(int64)
	f.Int64VarP(p, name, shorthand, value, usage)
	return p
}

// Int64 defines an int64 flag with specified name, default value, and usage string.
// The return value is the address of an int64 variable that stores the value of the flag.
func Int64(name string, value int64, usage string) *int64 {
	return CommandLine.Int64P(name, "", value, usage)
}

// Int64P is like Int64, but accepts a shorthand letter that can be used after a single dash.
func Int64P(name, shorthand string, value int64, usage string) *int64 {
	return CommandLine.Int64P(name, shorthand, value, usage)
}
07070100000B5C000081A4000000000000000000000001645E367C00001266000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/int64_slice.go  package pflag

import (
	"fmt"
	"strconv"
	"strings"
)

// -- int64Slice Value
type int64SliceValue struct {
	value   *[]int64
	changed bool
}

func newInt64SliceValue(val []int64, p *[]int64) *int64SliceValue {
	isv := new(int64SliceValue)
	isv.value = p
	*isv.value = val
	return isv
}

func (s *int64SliceValue) Set(val string) error {
	ss := strings.Split(val, ",")
	out := make([]int64, len(ss))
	for i, d := range ss {
		var err error
		out[i], err = strconv.ParseInt(d, 0, 64)
		if err != nil {
			return err
		}

	}
	if !s.changed {
		*s.value = out
	} else {
		*s.value = append(*s.value, out...)
	}
	s.changed = true
	return nil
}

func (s *int64SliceValue) Type() string {
	return "int64Slice"
}

func (s *int64SliceValue) String() string {
	out := make([]string, len(*s.value))
	for i, d := range *s.value {
		out[i] = fmt.Sprintf("%d", d)
	}
	return "[" + strings.Join(out, ",") + "]"
}

func (s *int64SliceValue) fromString(val string) (int64, error) {
	return strconv.ParseInt(val, 0, 64)
}

func (s *int64SliceValue) toString(val int64) string {
	return fmt.Sprintf("%d", val)
}

func (s *int64SliceValue) Append(val string) error {
	i, err := s.fromString(val)
	if err != nil {
		return err
	}
	*s.value = append(*s.value, i)
	return nil
}

func (s *int64SliceValue) Replace(val []string) error {
	out := make([]int64, len(val))
	for i, d := range val {
		var err error
		out[i], err = s.fromString(d)
		if err != nil {
			return err
		}
	}
	*s.value = out
	return nil
}

func (s *int64SliceValue) GetSlice() []string {
	out := make([]string, len(*s.value))
	for i, d := range *s.value {
		out[i] = s.toString(d)
	}
	return out
}

func int64SliceConv(val string) (interface{}, error) {
	val = strings.Trim(val, "[]")
	// Empty string would cause a slice with one (empty) entry
	if len(val) == 0 {
		return []int64{}, nil
	}
	ss := strings.Split(val, ",")
	out := make([]int64, len(ss))
	for i, d := range ss {
		var err error
		out[i], err = strconv.ParseInt(d, 0, 64)
		if err != nil {
			return nil, err
		}

	}
	return out, nil
}

// GetInt64Slice return the []int64 value of a flag with the given name
func (f *FlagSet) GetInt64Slice(name string) ([]int64, error) {
	val, err := f.getFlagType(name, "int64Slice", int64SliceConv)
	if err != nil {
		return []int64{}, err
	}
	return val.([]int64), nil
}

// Int64SliceVar defines a int64Slice flag with specified name, default value, and usage string.
// The argument p points to a []int64 variable in which to store the value of the flag.
func (f *FlagSet) Int64SliceVar(p *[]int64, name string, value []int64, usage string) {
	f.VarP(newInt64SliceValue(value, p), name, "", usage)
}

// Int64SliceVarP is like Int64SliceVar, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Int64SliceVarP(p *[]int64, name, shorthand string, value []int64, usage string) {
	f.VarP(newInt64SliceValue(value, p), name, shorthand, usage)
}

// Int64SliceVar defines a int64[] flag with specified name, default value, and usage string.
// The argument p points to a int64[] variable in which to store the value of the flag.
func Int64SliceVar(p *[]int64, name string, value []int64, usage string) {
	CommandLine.VarP(newInt64SliceValue(value, p), name, "", usage)
}

// Int64SliceVarP is like Int64SliceVar, but accepts a shorthand letter that can be used after a single dash.
func Int64SliceVarP(p *[]int64, name, shorthand string, value []int64, usage string) {
	CommandLine.VarP(newInt64SliceValue(value, p), name, shorthand, usage)
}

// Int64Slice defines a []int64 flag with specified name, default value, and usage string.
// The return value is the address of a []int64 variable that stores the value of the flag.
func (f *FlagSet) Int64Slice(name string, value []int64, usage string) *[]int64 {
	p := []int64{}
	f.Int64SliceVarP(&p, name, "", value, usage)
	return &p
}

// Int64SliceP is like Int64Slice, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Int64SliceP(name, shorthand string, value []int64, usage string) *[]int64 {
	p := []int64{}
	f.Int64SliceVarP(&p, name, shorthand, value, usage)
	return &p
}

// Int64Slice defines a []int64 flag with specified name, default value, and usage string.
// The return value is the address of a []int64 variable that stores the value of the flag.
func Int64Slice(name string, value []int64, usage string) *[]int64 {
	return CommandLine.Int64SliceP(name, "", value, usage)
}

// Int64SliceP is like Int64Slice, but accepts a shorthand letter that can be used after a single dash.
func Int64SliceP(name, shorthand string, value []int64, usage string) *[]int64 {
	return CommandLine.Int64SliceP(name, shorthand, value, usage)
}
  07070100000B5D000081A4000000000000000000000001645E367C00000B77000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/int8.go package pflag

import "strconv"

// -- int8 Value
type int8Value int8

func newInt8Value(val int8, p *int8) *int8Value {
	*p = val
	return (*int8Value)(p)
}

func (i *int8Value) Set(s string) error {
	v, err := strconv.ParseInt(s, 0, 8)
	*i = int8Value(v)
	return err
}

func (i *int8Value) Type() string {
	return "int8"
}

func (i *int8Value) String() string { return strconv.FormatInt(int64(*i), 10) }

func int8Conv(sval string) (interface{}, error) {
	v, err := strconv.ParseInt(sval, 0, 8)
	if err != nil {
		return 0, err
	}
	return int8(v), nil
}

// GetInt8 return the int8 value of a flag with the given name
func (f *FlagSet) GetInt8(name string) (int8, error) {
	val, err := f.getFlagType(name, "int8", int8Conv)
	if err != nil {
		return 0, err
	}
	return val.(int8), nil
}

// Int8Var defines an int8 flag with specified name, default value, and usage string.
// The argument p points to an int8 variable in which to store the value of the flag.
func (f *FlagSet) Int8Var(p *int8, name string, value int8, usage string) {
	f.VarP(newInt8Value(value, p), name, "", usage)
}

// Int8VarP is like Int8Var, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Int8VarP(p *int8, name, shorthand string, value int8, usage string) {
	f.VarP(newInt8Value(value, p), name, shorthand, usage)
}

// Int8Var defines an int8 flag with specified name, default value, and usage string.
// The argument p points to an int8 variable in which to store the value of the flag.
func Int8Var(p *int8, name string, value int8, usage string) {
	CommandLine.VarP(newInt8Value(value, p), name, "", usage)
}

// Int8VarP is like Int8Var, but accepts a shorthand letter that can be used after a single dash.
func Int8VarP(p *int8, name, shorthand string, value int8, usage string) {
	CommandLine.VarP(newInt8Value(value, p), name, shorthand, usage)
}

// Int8 defines an int8 flag with specified name, default value, and usage string.
// The return value is the address of an int8 variable that stores the value of the flag.
func (f *FlagSet) Int8(name string, value int8, usage string) *int8 {
	p := new(int8)
	f.Int8VarP(p, name, "", value, usage)
	return p
}

// Int8P is like Int8, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Int8P(name, shorthand string, value int8, usage string) *int8 {
	p := new(int8)
	f.Int8VarP(p, name, shorthand, value, usage)
	return p
}

// Int8 defines an int8 flag with specified name, default value, and usage string.
// The return value is the address of an int8 variable that stores the value of the flag.
func Int8(name string, value int8, usage string) *int8 {
	return CommandLine.Int8P(name, "", value, usage)
}

// Int8P is like Int8, but accepts a shorthand letter that can be used after a single dash.
func Int8P(name, shorthand string, value int8, usage string) *int8 {
	return CommandLine.Int8P(name, shorthand, value, usage)
}
 07070100000B5E000081A4000000000000000000000001645E367C000010EB000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/int_slice.go    package pflag

import (
	"fmt"
	"strconv"
	"strings"
)

// -- intSlice Value
type intSliceValue struct {
	value   *[]int
	changed bool
}

func newIntSliceValue(val []int, p *[]int) *intSliceValue {
	isv := new(intSliceValue)
	isv.value = p
	*isv.value = val
	return isv
}

func (s *intSliceValue) Set(val string) error {
	ss := strings.Split(val, ",")
	out := make([]int, len(ss))
	for i, d := range ss {
		var err error
		out[i], err = strconv.Atoi(d)
		if err != nil {
			return err
		}

	}
	if !s.changed {
		*s.value = out
	} else {
		*s.value = append(*s.value, out...)
	}
	s.changed = true
	return nil
}

func (s *intSliceValue) Type() string {
	return "intSlice"
}

func (s *intSliceValue) String() string {
	out := make([]string, len(*s.value))
	for i, d := range *s.value {
		out[i] = fmt.Sprintf("%d", d)
	}
	return "[" + strings.Join(out, ",") + "]"
}

func (s *intSliceValue) Append(val string) error {
	i, err := strconv.Atoi(val)
	if err != nil {
		return err
	}
	*s.value = append(*s.value, i)
	return nil
}

func (s *intSliceValue) Replace(val []string) error {
	out := make([]int, len(val))
	for i, d := range val {
		var err error
		out[i], err = strconv.Atoi(d)
		if err != nil {
			return err
		}
	}
	*s.value = out
	return nil
}

func (s *intSliceValue) GetSlice() []string {
	out := make([]string, len(*s.value))
	for i, d := range *s.value {
		out[i] = strconv.Itoa(d)
	}
	return out
}

func intSliceConv(val string) (interface{}, error) {
	val = strings.Trim(val, "[]")
	// Empty string would cause a slice with one (empty) entry
	if len(val) == 0 {
		return []int{}, nil
	}
	ss := strings.Split(val, ",")
	out := make([]int, len(ss))
	for i, d := range ss {
		var err error
		out[i], err = strconv.Atoi(d)
		if err != nil {
			return nil, err
		}

	}
	return out, nil
}

// GetIntSlice return the []int value of a flag with the given name
func (f *FlagSet) GetIntSlice(name string) ([]int, error) {
	val, err := f.getFlagType(name, "intSlice", intSliceConv)
	if err != nil {
		return []int{}, err
	}
	return val.([]int), nil
}

// IntSliceVar defines a intSlice flag with specified name, default value, and usage string.
// The argument p points to a []int variable in which to store the value of the flag.
func (f *FlagSet) IntSliceVar(p *[]int, name string, value []int, usage string) {
	f.VarP(newIntSliceValue(value, p), name, "", usage)
}

// IntSliceVarP is like IntSliceVar, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) IntSliceVarP(p *[]int, name, shorthand string, value []int, usage string) {
	f.VarP(newIntSliceValue(value, p), name, shorthand, usage)
}

// IntSliceVar defines a int[] flag with specified name, default value, and usage string.
// The argument p points to a int[] variable in which to store the value of the flag.
func IntSliceVar(p *[]int, name string, value []int, usage string) {
	CommandLine.VarP(newIntSliceValue(value, p), name, "", usage)
}

// IntSliceVarP is like IntSliceVar, but accepts a shorthand letter that can be used after a single dash.
func IntSliceVarP(p *[]int, name, shorthand string, value []int, usage string) {
	CommandLine.VarP(newIntSliceValue(value, p), name, shorthand, usage)
}

// IntSlice defines a []int flag with specified name, default value, and usage string.
// The return value is the address of a []int variable that stores the value of the flag.
func (f *FlagSet) IntSlice(name string, value []int, usage string) *[]int {
	p := []int{}
	f.IntSliceVarP(&p, name, "", value, usage)
	return &p
}

// IntSliceP is like IntSlice, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) IntSliceP(name, shorthand string, value []int, usage string) *[]int {
	p := []int{}
	f.IntSliceVarP(&p, name, shorthand, value, usage)
	return &p
}

// IntSlice defines a []int flag with specified name, default value, and usage string.
// The return value is the address of a []int variable that stores the value of the flag.
func IntSlice(name string, value []int, usage string) *[]int {
	return CommandLine.IntSliceP(name, "", value, usage)
}

// IntSliceP is like IntSlice, but accepts a shorthand letter that can be used after a single dash.
func IntSliceP(name, shorthand string, value []int, usage string) *[]int {
	return CommandLine.IntSliceP(name, shorthand, value, usage)
}
 07070100000B5F000081A4000000000000000000000001645E367C00000BE3000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/ip.go   package pflag

import (
	"fmt"
	"net"
	"strings"
)

// -- net.IP value
type ipValue net.IP

func newIPValue(val net.IP, p *net.IP) *ipValue {
	*p = val
	return (*ipValue)(p)
}

func (i *ipValue) String() string { return net.IP(*i).String() }
func (i *ipValue) Set(s string) error {
	ip := net.ParseIP(strings.TrimSpace(s))
	if ip == nil {
		return fmt.Errorf("failed to parse IP: %q", s)
	}
	*i = ipValue(ip)
	return nil
}

func (i *ipValue) Type() string {
	return "ip"
}

func ipConv(sval string) (interface{}, error) {
	ip := net.ParseIP(sval)
	if ip != nil {
		return ip, nil
	}
	return nil, fmt.Errorf("invalid string being converted to IP address: %s", sval)
}

// GetIP return the net.IP value of a flag with the given name
func (f *FlagSet) GetIP(name string) (net.IP, error) {
	val, err := f.getFlagType(name, "ip", ipConv)
	if err != nil {
		return nil, err
	}
	return val.(net.IP), nil
}

// IPVar defines an net.IP flag with specified name, default value, and usage string.
// The argument p points to an net.IP variable in which to store the value of the flag.
func (f *FlagSet) IPVar(p *net.IP, name string, value net.IP, usage string) {
	f.VarP(newIPValue(value, p), name, "", usage)
}

// IPVarP is like IPVar, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) IPVarP(p *net.IP, name, shorthand string, value net.IP, usage string) {
	f.VarP(newIPValue(value, p), name, shorthand, usage)
}

// IPVar defines an net.IP flag with specified name, default value, and usage string.
// The argument p points to an net.IP variable in which to store the value of the flag.
func IPVar(p *net.IP, name string, value net.IP, usage string) {
	CommandLine.VarP(newIPValue(value, p), name, "", usage)
}

// IPVarP is like IPVar, but accepts a shorthand letter that can be used after a single dash.
func IPVarP(p *net.IP, name, shorthand string, value net.IP, usage string) {
	CommandLine.VarP(newIPValue(value, p), name, shorthand, usage)
}

// IP defines an net.IP flag with specified name, default value, and usage string.
// The return value is the address of an net.IP variable that stores the value of the flag.
func (f *FlagSet) IP(name string, value net.IP, usage string) *net.IP {
	p := new(net.IP)
	f.IPVarP(p, name, "", value, usage)
	return p
}

// IPP is like IP, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) IPP(name, shorthand string, value net.IP, usage string) *net.IP {
	p := new(net.IP)
	f.IPVarP(p, name, shorthand, value, usage)
	return p
}

// IP defines an net.IP flag with specified name, default value, and usage string.
// The return value is the address of an net.IP variable that stores the value of the flag.
func IP(name string, value net.IP, usage string) *net.IP {
	return CommandLine.IPP(name, "", value, usage)
}

// IPP is like IP, but accepts a shorthand letter that can be used after a single dash.
func IPP(name, shorthand string, value net.IP, usage string) *net.IP {
	return CommandLine.IPP(name, shorthand, value, usage)
}
 07070100000B60000081A4000000000000000000000001645E367C00001524000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/ip_slice.go package pflag

import (
	"fmt"
	"io"
	"net"
	"strings"
)

// -- ipSlice Value
type ipSliceValue struct {
	value   *[]net.IP
	changed bool
}

func newIPSliceValue(val []net.IP, p *[]net.IP) *ipSliceValue {
	ipsv := new(ipSliceValue)
	ipsv.value = p
	*ipsv.value = val
	return ipsv
}

// Set converts, and assigns, the comma-separated IP argument string representation as the []net.IP value of this flag.
// If Set is called on a flag that already has a []net.IP assigned, the newly converted values will be appended.
func (s *ipSliceValue) Set(val string) error {

	// remove all quote characters
	rmQuote := strings.NewReplacer(`"`, "", `'`, "", "`", "")

	// read flag arguments with CSV parser
	ipStrSlice, err := readAsCSV(rmQuote.Replace(val))
	if err != nil && err != io.EOF {
		return err
	}

	// parse ip values into slice
	out := make([]net.IP, 0, len(ipStrSlice))
	for _, ipStr := range ipStrSlice {
		ip := net.ParseIP(strings.TrimSpace(ipStr))
		if ip == nil {
			return fmt.Errorf("invalid string being converted to IP address: %s", ipStr)
		}
		out = append(out, ip)
	}

	if !s.changed {
		*s.value = out
	} else {
		*s.value = append(*s.value, out...)
	}

	s.changed = true

	return nil
}

// Type returns a string that uniquely represents this flag's type.
func (s *ipSliceValue) Type() string {
	return "ipSlice"
}

// String defines a "native" format for this net.IP slice flag value.
func (s *ipSliceValue) String() string {

	ipStrSlice := make([]string, len(*s.value))
	for i, ip := range *s.value {
		ipStrSlice[i] = ip.String()
	}

	out, _ := writeAsCSV(ipStrSlice)

	return "[" + out + "]"
}

func (s *ipSliceValue) fromString(val string) (net.IP, error) {
	return net.ParseIP(strings.TrimSpace(val)), nil
}

func (s *ipSliceValue) toString(val net.IP) string {
	return val.String()
}

func (s *ipSliceValue) Append(val string) error {
	i, err := s.fromString(val)
	if err != nil {
		return err
	}
	*s.value = append(*s.value, i)
	return nil
}

func (s *ipSliceValue) Replace(val []string) error {
	out := make([]net.IP, len(val))
	for i, d := range val {
		var err error
		out[i], err = s.fromString(d)
		if err != nil {
			return err
		}
	}
	*s.value = out
	return nil
}

func (s *ipSliceValue) GetSlice() []string {
	out := make([]string, len(*s.value))
	for i, d := range *s.value {
		out[i] = s.toString(d)
	}
	return out
}

func ipSliceConv(val string) (interface{}, error) {
	val = strings.Trim(val, "[]")
	// Empty string would cause a slice with one (empty) entry
	if len(val) == 0 {
		return []net.IP{}, nil
	}
	ss := strings.Split(val, ",")
	out := make([]net.IP, len(ss))
	for i, sval := range ss {
		ip := net.ParseIP(strings.TrimSpace(sval))
		if ip == nil {
			return nil, fmt.Errorf("invalid string being converted to IP address: %s", sval)
		}
		out[i] = ip
	}
	return out, nil
}

// GetIPSlice returns the []net.IP value of a flag with the given name
func (f *FlagSet) GetIPSlice(name string) ([]net.IP, error) {
	val, err := f.getFlagType(name, "ipSlice", ipSliceConv)
	if err != nil {
		return []net.IP{}, err
	}
	return val.([]net.IP), nil
}

// IPSliceVar defines a ipSlice flag with specified name, default value, and usage string.
// The argument p points to a []net.IP variable in which to store the value of the flag.
func (f *FlagSet) IPSliceVar(p *[]net.IP, name string, value []net.IP, usage string) {
	f.VarP(newIPSliceValue(value, p), name, "", usage)
}

// IPSliceVarP is like IPSliceVar, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) IPSliceVarP(p *[]net.IP, name, shorthand string, value []net.IP, usage string) {
	f.VarP(newIPSliceValue(value, p), name, shorthand, usage)
}

// IPSliceVar defines a []net.IP flag with specified name, default value, and usage string.
// The argument p points to a []net.IP variable in which to store the value of the flag.
func IPSliceVar(p *[]net.IP, name string, value []net.IP, usage string) {
	CommandLine.VarP(newIPSliceValue(value, p), name, "", usage)
}

// IPSliceVarP is like IPSliceVar, but accepts a shorthand letter that can be used after a single dash.
func IPSliceVarP(p *[]net.IP, name, shorthand string, value []net.IP, usage string) {
	CommandLine.VarP(newIPSliceValue(value, p), name, shorthand, usage)
}

// IPSlice defines a []net.IP flag with specified name, default value, and usage string.
// The return value is the address of a []net.IP variable that stores the value of that flag.
func (f *FlagSet) IPSlice(name string, value []net.IP, usage string) *[]net.IP {
	p := []net.IP{}
	f.IPSliceVarP(&p, name, "", value, usage)
	return &p
}

// IPSliceP is like IPSlice, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) IPSliceP(name, shorthand string, value []net.IP, usage string) *[]net.IP {
	p := []net.IP{}
	f.IPSliceVarP(&p, name, shorthand, value, usage)
	return &p
}

// IPSlice defines a []net.IP flag with specified name, default value, and usage string.
// The return value is the address of a []net.IP variable that stores the value of the flag.
func IPSlice(name string, value []net.IP, usage string) *[]net.IP {
	return CommandLine.IPSliceP(name, "", value, usage)
}

// IPSliceP is like IPSlice, but accepts a shorthand letter that can be used after a single dash.
func IPSliceP(name, shorthand string, value []net.IP, usage string) *[]net.IP {
	return CommandLine.IPSliceP(name, shorthand, value, usage)
}
07070100000B61000081A4000000000000000000000001645E367C00000FD4000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/ipmask.go   package pflag

import (
	"fmt"
	"net"
	"strconv"
)

// -- net.IPMask value
type ipMaskValue net.IPMask

func newIPMaskValue(val net.IPMask, p *net.IPMask) *ipMaskValue {
	*p = val
	return (*ipMaskValue)(p)
}

func (i *ipMaskValue) String() string { return net.IPMask(*i).String() }
func (i *ipMaskValue) Set(s string) error {
	ip := ParseIPv4Mask(s)
	if ip == nil {
		return fmt.Errorf("failed to parse IP mask: %q", s)
	}
	*i = ipMaskValue(ip)
	return nil
}

func (i *ipMaskValue) Type() string {
	return "ipMask"
}

// ParseIPv4Mask written in IP form (e.g. 255.255.255.0).
// This function should really belong to the net package.
func ParseIPv4Mask(s string) net.IPMask {
	mask := net.ParseIP(s)
	if mask == nil {
		if len(s) != 8 {
			return nil
		}
		// net.IPMask.String() actually outputs things like ffffff00
		// so write a horrible parser for that as well  :-(
		m := []int{}
		for i := 0; i < 4; i++ {
			b := "0x" + s[2*i:2*i+2]
			d, err := strconv.ParseInt(b, 0, 0)
			if err != nil {
				return nil
			}
			m = append(m, int(d))
		}
		s := fmt.Sprintf("%d.%d.%d.%d", m[0], m[1], m[2], m[3])
		mask = net.ParseIP(s)
		if mask == nil {
			return nil
		}
	}
	return net.IPv4Mask(mask[12], mask[13], mask[14], mask[15])
}

func parseIPv4Mask(sval string) (interface{}, error) {
	mask := ParseIPv4Mask(sval)
	if mask == nil {
		return nil, fmt.Errorf("unable to parse %s as net.IPMask", sval)
	}
	return mask, nil
}

// GetIPv4Mask return the net.IPv4Mask value of a flag with the given name
func (f *FlagSet) GetIPv4Mask(name string) (net.IPMask, error) {
	val, err := f.getFlagType(name, "ipMask", parseIPv4Mask)
	if err != nil {
		return nil, err
	}
	return val.(net.IPMask), nil
}

// IPMaskVar defines an net.IPMask flag with specified name, default value, and usage string.
// The argument p points to an net.IPMask variable in which to store the value of the flag.
func (f *FlagSet) IPMaskVar(p *net.IPMask, name string, value net.IPMask, usage string) {
	f.VarP(newIPMaskValue(value, p), name, "", usage)
}

// IPMaskVarP is like IPMaskVar, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) IPMaskVarP(p *net.IPMask, name, shorthand string, value net.IPMask, usage string) {
	f.VarP(newIPMaskValue(value, p), name, shorthand, usage)
}

// IPMaskVar defines an net.IPMask flag with specified name, default value, and usage string.
// The argument p points to an net.IPMask variable in which to store the value of the flag.
func IPMaskVar(p *net.IPMask, name string, value net.IPMask, usage string) {
	CommandLine.VarP(newIPMaskValue(value, p), name, "", usage)
}

// IPMaskVarP is like IPMaskVar, but accepts a shorthand letter that can be used after a single dash.
func IPMaskVarP(p *net.IPMask, name, shorthand string, value net.IPMask, usage string) {
	CommandLine.VarP(newIPMaskValue(value, p), name, shorthand, usage)
}

// IPMask defines an net.IPMask flag with specified name, default value, and usage string.
// The return value is the address of an net.IPMask variable that stores the value of the flag.
func (f *FlagSet) IPMask(name string, value net.IPMask, usage string) *net.IPMask {
	p := new(net.IPMask)
	f.IPMaskVarP(p, name, "", value, usage)
	return p
}

// IPMaskP is like IPMask, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) IPMaskP(name, shorthand string, value net.IPMask, usage string) *net.IPMask {
	p := new(net.IPMask)
	f.IPMaskVarP(p, name, shorthand, value, usage)
	return p
}

// IPMask defines an net.IPMask flag with specified name, default value, and usage string.
// The return value is the address of an net.IPMask variable that stores the value of the flag.
func IPMask(name string, value net.IPMask, usage string) *net.IPMask {
	return CommandLine.IPMaskP(name, "", value, usage)
}

// IPMaskP is like IP, but accepts a shorthand letter that can be used after a single dash.
func IPMaskP(name, shorthand string, value net.IPMask, usage string) *net.IPMask {
	return CommandLine.IPMaskP(name, shorthand, value, usage)
}
07070100000B62000081A4000000000000000000000001645E367C00000D02000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/ipnet.go    package pflag

import (
	"fmt"
	"net"
	"strings"
)

// IPNet adapts net.IPNet for use as a flag.
type ipNetValue net.IPNet

func (ipnet ipNetValue) String() string {
	n := net.IPNet(ipnet)
	return n.String()
}

func (ipnet *ipNetValue) Set(value string) error {
	_, n, err := net.ParseCIDR(strings.TrimSpace(value))
	if err != nil {
		return err
	}
	*ipnet = ipNetValue(*n)
	return nil
}

func (*ipNetValue) Type() string {
	return "ipNet"
}

func newIPNetValue(val net.IPNet, p *net.IPNet) *ipNetValue {
	*p = val
	return (*ipNetValue)(p)
}

func ipNetConv(sval string) (interface{}, error) {
	_, n, err := net.ParseCIDR(strings.TrimSpace(sval))
	if err == nil {
		return *n, nil
	}
	return nil, fmt.Errorf("invalid string being converted to IPNet: %s", sval)
}

// GetIPNet return the net.IPNet value of a flag with the given name
func (f *FlagSet) GetIPNet(name string) (net.IPNet, error) {
	val, err := f.getFlagType(name, "ipNet", ipNetConv)
	if err != nil {
		return net.IPNet{}, err
	}
	return val.(net.IPNet), nil
}

// IPNetVar defines an net.IPNet flag with specified name, default value, and usage string.
// The argument p points to an net.IPNet variable in which to store the value of the flag.
func (f *FlagSet) IPNetVar(p *net.IPNet, name string, value net.IPNet, usage string) {
	f.VarP(newIPNetValue(value, p), name, "", usage)
}

// IPNetVarP is like IPNetVar, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) IPNetVarP(p *net.IPNet, name, shorthand string, value net.IPNet, usage string) {
	f.VarP(newIPNetValue(value, p), name, shorthand, usage)
}

// IPNetVar defines an net.IPNet flag with specified name, default value, and usage string.
// The argument p points to an net.IPNet variable in which to store the value of the flag.
func IPNetVar(p *net.IPNet, name string, value net.IPNet, usage string) {
	CommandLine.VarP(newIPNetValue(value, p), name, "", usage)
}

// IPNetVarP is like IPNetVar, but accepts a shorthand letter that can be used after a single dash.
func IPNetVarP(p *net.IPNet, name, shorthand string, value net.IPNet, usage string) {
	CommandLine.VarP(newIPNetValue(value, p), name, shorthand, usage)
}

// IPNet defines an net.IPNet flag with specified name, default value, and usage string.
// The return value is the address of an net.IPNet variable that stores the value of the flag.
func (f *FlagSet) IPNet(name string, value net.IPNet, usage string) *net.IPNet {
	p := new(net.IPNet)
	f.IPNetVarP(p, name, "", value, usage)
	return p
}

// IPNetP is like IPNet, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) IPNetP(name, shorthand string, value net.IPNet, usage string) *net.IPNet {
	p := new(net.IPNet)
	f.IPNetVarP(p, name, shorthand, value, usage)
	return p
}

// IPNet defines an net.IPNet flag with specified name, default value, and usage string.
// The return value is the address of an net.IPNet variable that stores the value of the flag.
func IPNet(name string, value net.IPNet, usage string) *net.IPNet {
	return CommandLine.IPNetP(name, "", value, usage)
}

// IPNetP is like IPNet, but accepts a shorthand letter that can be used after a single dash.
func IPNetP(name, shorthand string, value net.IPNet, usage string) *net.IPNet {
	return CommandLine.IPNetP(name, shorthand, value, usage)
}
  07070100000B63000081A4000000000000000000000001645E367C00000B6D000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/string.go   package pflag

// -- string Value
type stringValue string

func newStringValue(val string, p *string) *stringValue {
	*p = val
	return (*stringValue)(p)
}

func (s *stringValue) Set(val string) error {
	*s = stringValue(val)
	return nil
}
func (s *stringValue) Type() string {
	return "string"
}

func (s *stringValue) String() string { return string(*s) }

func stringConv(sval string) (interface{}, error) {
	return sval, nil
}

// GetString return the string value of a flag with the given name
func (f *FlagSet) GetString(name string) (string, error) {
	val, err := f.getFlagType(name, "string", stringConv)
	if err != nil {
		return "", err
	}
	return val.(string), nil
}

// StringVar defines a string flag with specified name, default value, and usage string.
// The argument p points to a string variable in which to store the value of the flag.
func (f *FlagSet) StringVar(p *string, name string, value string, usage string) {
	f.VarP(newStringValue(value, p), name, "", usage)
}

// StringVarP is like StringVar, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) StringVarP(p *string, name, shorthand string, value string, usage string) {
	f.VarP(newStringValue(value, p), name, shorthand, usage)
}

// StringVar defines a string flag with specified name, default value, and usage string.
// The argument p points to a string variable in which to store the value of the flag.
func StringVar(p *string, name string, value string, usage string) {
	CommandLine.VarP(newStringValue(value, p), name, "", usage)
}

// StringVarP is like StringVar, but accepts a shorthand letter that can be used after a single dash.
func StringVarP(p *string, name, shorthand string, value string, usage string) {
	CommandLine.VarP(newStringValue(value, p), name, shorthand, usage)
}

// String defines a string flag with specified name, default value, and usage string.
// The return value is the address of a string variable that stores the value of the flag.
func (f *FlagSet) String(name string, value string, usage string) *string {
	p := new(string)
	f.StringVarP(p, name, "", value, usage)
	return p
}

// StringP is like String, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) StringP(name, shorthand string, value string, usage string) *string {
	p := new(string)
	f.StringVarP(p, name, shorthand, value, usage)
	return p
}

// String defines a string flag with specified name, default value, and usage string.
// The return value is the address of a string variable that stores the value of the flag.
func String(name string, value string, usage string) *string {
	return CommandLine.StringP(name, "", value, usage)
}

// StringP is like String, but accepts a shorthand letter that can be used after a single dash.
func StringP(name, shorthand string, value string, usage string) *string {
	return CommandLine.StringP(name, shorthand, value, usage)
}
   07070100000B64000081A4000000000000000000000001645E367C00001136000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/string_array.go package pflag

// -- stringArray Value
type stringArrayValue struct {
	value   *[]string
	changed bool
}

func newStringArrayValue(val []string, p *[]string) *stringArrayValue {
	ssv := new(stringArrayValue)
	ssv.value = p
	*ssv.value = val
	return ssv
}

func (s *stringArrayValue) Set(val string) error {
	if !s.changed {
		*s.value = []string{val}
		s.changed = true
	} else {
		*s.value = append(*s.value, val)
	}
	return nil
}

func (s *stringArrayValue) Append(val string) error {
	*s.value = append(*s.value, val)
	return nil
}

func (s *stringArrayValue) Replace(val []string) error {
	out := make([]string, len(val))
	for i, d := range val {
		var err error
		out[i] = d
		if err != nil {
			return err
		}
	}
	*s.value = out
	return nil
}

func (s *stringArrayValue) GetSlice() []string {
	out := make([]string, len(*s.value))
	for i, d := range *s.value {
		out[i] = d
	}
	return out
}

func (s *stringArrayValue) Type() string {
	return "stringArray"
}

func (s *stringArrayValue) String() string {
	str, _ := writeAsCSV(*s.value)
	return "[" + str + "]"
}

func stringArrayConv(sval string) (interface{}, error) {
	sval = sval[1 : len(sval)-1]
	// An empty string would cause a array with one (empty) string
	if len(sval) == 0 {
		return []string{}, nil
	}
	return readAsCSV(sval)
}

// GetStringArray return the []string value of a flag with the given name
func (f *FlagSet) GetStringArray(name string) ([]string, error) {
	val, err := f.getFlagType(name, "stringArray", stringArrayConv)
	if err != nil {
		return []string{}, err
	}
	return val.([]string), nil
}

// StringArrayVar defines a string flag with specified name, default value, and usage string.
// The argument p points to a []string variable in which to store the values of the multiple flags.
// The value of each argument will not try to be separated by comma. Use a StringSlice for that.
func (f *FlagSet) StringArrayVar(p *[]string, name string, value []string, usage string) {
	f.VarP(newStringArrayValue(value, p), name, "", usage)
}

// StringArrayVarP is like StringArrayVar, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) StringArrayVarP(p *[]string, name, shorthand string, value []string, usage string) {
	f.VarP(newStringArrayValue(value, p), name, shorthand, usage)
}

// StringArrayVar defines a string flag with specified name, default value, and usage string.
// The argument p points to a []string variable in which to store the value of the flag.
// The value of each argument will not try to be separated by comma. Use a StringSlice for that.
func StringArrayVar(p *[]string, name string, value []string, usage string) {
	CommandLine.VarP(newStringArrayValue(value, p), name, "", usage)
}

// StringArrayVarP is like StringArrayVar, but accepts a shorthand letter that can be used after a single dash.
func StringArrayVarP(p *[]string, name, shorthand string, value []string, usage string) {
	CommandLine.VarP(newStringArrayValue(value, p), name, shorthand, usage)
}

// StringArray defines a string flag with specified name, default value, and usage string.
// The return value is the address of a []string variable that stores the value of the flag.
// The value of each argument will not try to be separated by comma. Use a StringSlice for that.
func (f *FlagSet) StringArray(name string, value []string, usage string) *[]string {
	p := []string{}
	f.StringArrayVarP(&p, name, "", value, usage)
	return &p
}

// StringArrayP is like StringArray, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) StringArrayP(name, shorthand string, value []string, usage string) *[]string {
	p := []string{}
	f.StringArrayVarP(&p, name, shorthand, value, usage)
	return &p
}

// StringArray defines a string flag with specified name, default value, and usage string.
// The return value is the address of a []string variable that stores the value of the flag.
// The value of each argument will not try to be separated by comma. Use a StringSlice for that.
func StringArray(name string, value []string, usage string) *[]string {
	return CommandLine.StringArrayP(name, "", value, usage)
}

// StringArrayP is like StringArray, but accepts a shorthand letter that can be used after a single dash.
func StringArrayP(name, shorthand string, value []string, usage string) *[]string {
	return CommandLine.StringArrayP(name, shorthand, value, usage)
}
  07070100000B65000081A4000000000000000000000001645E367C00001433000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/string_slice.go package pflag

import (
	"bytes"
	"encoding/csv"
	"strings"
)

// -- stringSlice Value
type stringSliceValue struct {
	value   *[]string
	changed bool
}

func newStringSliceValue(val []string, p *[]string) *stringSliceValue {
	ssv := new(stringSliceValue)
	ssv.value = p
	*ssv.value = val
	return ssv
}

func readAsCSV(val string) ([]string, error) {
	if val == "" {
		return []string{}, nil
	}
	stringReader := strings.NewReader(val)
	csvReader := csv.NewReader(stringReader)
	return csvReader.Read()
}

func writeAsCSV(vals []string) (string, error) {
	b := &bytes.Buffer{}
	w := csv.NewWriter(b)
	err := w.Write(vals)
	if err != nil {
		return "", err
	}
	w.Flush()
	return strings.TrimSuffix(b.String(), "\n"), nil
}

func (s *stringSliceValue) Set(val string) error {
	v, err := readAsCSV(val)
	if err != nil {
		return err
	}
	if !s.changed {
		*s.value = v
	} else {
		*s.value = append(*s.value, v...)
	}
	s.changed = true
	return nil
}

func (s *stringSliceValue) Type() string {
	return "stringSlice"
}

func (s *stringSliceValue) String() string {
	str, _ := writeAsCSV(*s.value)
	return "[" + str + "]"
}

func (s *stringSliceValue) Append(val string) error {
	*s.value = append(*s.value, val)
	return nil
}

func (s *stringSliceValue) Replace(val []string) error {
	*s.value = val
	return nil
}

func (s *stringSliceValue) GetSlice() []string {
	return *s.value
}

func stringSliceConv(sval string) (interface{}, error) {
	sval = sval[1 : len(sval)-1]
	// An empty string would cause a slice with one (empty) string
	if len(sval) == 0 {
		return []string{}, nil
	}
	return readAsCSV(sval)
}

// GetStringSlice return the []string value of a flag with the given name
func (f *FlagSet) GetStringSlice(name string) ([]string, error) {
	val, err := f.getFlagType(name, "stringSlice", stringSliceConv)
	if err != nil {
		return []string{}, err
	}
	return val.([]string), nil
}

// StringSliceVar defines a string flag with specified name, default value, and usage string.
// The argument p points to a []string variable in which to store the value of the flag.
// Compared to StringArray flags, StringSlice flags take comma-separated value as arguments and split them accordingly.
// For example:
//   --ss="v1,v2" --ss="v3"
// will result in
//   []string{"v1", "v2", "v3"}
func (f *FlagSet) StringSliceVar(p *[]string, name string, value []string, usage string) {
	f.VarP(newStringSliceValue(value, p), name, "", usage)
}

// StringSliceVarP is like StringSliceVar, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) StringSliceVarP(p *[]string, name, shorthand string, value []string, usage string) {
	f.VarP(newStringSliceValue(value, p), name, shorthand, usage)
}

// StringSliceVar defines a string flag with specified name, default value, and usage string.
// The argument p points to a []string variable in which to store the value of the flag.
// Compared to StringArray flags, StringSlice flags take comma-separated value as arguments and split them accordingly.
// For example:
//   --ss="v1,v2" --ss="v3"
// will result in
//   []string{"v1", "v2", "v3"}
func StringSliceVar(p *[]string, name string, value []string, usage string) {
	CommandLine.VarP(newStringSliceValue(value, p), name, "", usage)
}

// StringSliceVarP is like StringSliceVar, but accepts a shorthand letter that can be used after a single dash.
func StringSliceVarP(p *[]string, name, shorthand string, value []string, usage string) {
	CommandLine.VarP(newStringSliceValue(value, p), name, shorthand, usage)
}

// StringSlice defines a string flag with specified name, default value, and usage string.
// The return value is the address of a []string variable that stores the value of the flag.
// Compared to StringArray flags, StringSlice flags take comma-separated value as arguments and split them accordingly.
// For example:
//   --ss="v1,v2" --ss="v3"
// will result in
//   []string{"v1", "v2", "v3"}
func (f *FlagSet) StringSlice(name string, value []string, usage string) *[]string {
	p := []string{}
	f.StringSliceVarP(&p, name, "", value, usage)
	return &p
}

// StringSliceP is like StringSlice, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) StringSliceP(name, shorthand string, value []string, usage string) *[]string {
	p := []string{}
	f.StringSliceVarP(&p, name, shorthand, value, usage)
	return &p
}

// StringSlice defines a string flag with specified name, default value, and usage string.
// The return value is the address of a []string variable that stores the value of the flag.
// Compared to StringArray flags, StringSlice flags take comma-separated value as arguments and split them accordingly.
// For example:
//   --ss="v1,v2" --ss="v3"
// will result in
//   []string{"v1", "v2", "v3"}
func StringSlice(name string, value []string, usage string) *[]string {
	return CommandLine.StringSliceP(name, "", value, usage)
}

// StringSliceP is like StringSlice, but accepts a shorthand letter that can be used after a single dash.
func StringSliceP(name, shorthand string, value []string, usage string) *[]string {
	return CommandLine.StringSliceP(name, shorthand, value, usage)
}
 07070100000B66000081A4000000000000000000000001645E367C000012F8000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/string_to_int.go    package pflag

import (
	"bytes"
	"fmt"
	"strconv"
	"strings"
)

// -- stringToInt Value
type stringToIntValue struct {
	value   *map[string]int
	changed bool
}

func newStringToIntValue(val map[string]int, p *map[string]int) *stringToIntValue {
	ssv := new(stringToIntValue)
	ssv.value = p
	*ssv.value = val
	return ssv
}

// Format: a=1,b=2
func (s *stringToIntValue) Set(val string) error {
	ss := strings.Split(val, ",")
	out := make(map[string]int, len(ss))
	for _, pair := range ss {
		kv := strings.SplitN(pair, "=", 2)
		if len(kv) != 2 {
			return fmt.Errorf("%s must be formatted as key=value", pair)
		}
		var err error
		out[kv[0]], err = strconv.Atoi(kv[1])
		if err != nil {
			return err
		}
	}
	if !s.changed {
		*s.value = out
	} else {
		for k, v := range out {
			(*s.value)[k] = v
		}
	}
	s.changed = true
	return nil
}

func (s *stringToIntValue) Type() string {
	return "stringToInt"
}

func (s *stringToIntValue) String() string {
	var buf bytes.Buffer
	i := 0
	for k, v := range *s.value {
		if i > 0 {
			buf.WriteRune(',')
		}
		buf.WriteString(k)
		buf.WriteRune('=')
		buf.WriteString(strconv.Itoa(v))
		i++
	}
	return "[" + buf.String() + "]"
}

func stringToIntConv(val string) (interface{}, error) {
	val = strings.Trim(val, "[]")
	// An empty string would cause an empty map
	if len(val) == 0 {
		return map[string]int{}, nil
	}
	ss := strings.Split(val, ",")
	out := make(map[string]int, len(ss))
	for _, pair := range ss {
		kv := strings.SplitN(pair, "=", 2)
		if len(kv) != 2 {
			return nil, fmt.Errorf("%s must be formatted as key=value", pair)
		}
		var err error
		out[kv[0]], err = strconv.Atoi(kv[1])
		if err != nil {
			return nil, err
		}
	}
	return out, nil
}

// GetStringToInt return the map[string]int value of a flag with the given name
func (f *FlagSet) GetStringToInt(name string) (map[string]int, error) {
	val, err := f.getFlagType(name, "stringToInt", stringToIntConv)
	if err != nil {
		return map[string]int{}, err
	}
	return val.(map[string]int), nil
}

// StringToIntVar defines a string flag with specified name, default value, and usage string.
// The argument p points to a map[string]int variable in which to store the values of the multiple flags.
// The value of each argument will not try to be separated by comma
func (f *FlagSet) StringToIntVar(p *map[string]int, name string, value map[string]int, usage string) {
	f.VarP(newStringToIntValue(value, p), name, "", usage)
}

// StringToIntVarP is like StringToIntVar, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) StringToIntVarP(p *map[string]int, name, shorthand string, value map[string]int, usage string) {
	f.VarP(newStringToIntValue(value, p), name, shorthand, usage)
}

// StringToIntVar defines a string flag with specified name, default value, and usage string.
// The argument p points to a map[string]int variable in which to store the value of the flag.
// The value of each argument will not try to be separated by comma
func StringToIntVar(p *map[string]int, name string, value map[string]int, usage string) {
	CommandLine.VarP(newStringToIntValue(value, p), name, "", usage)
}

// StringToIntVarP is like StringToIntVar, but accepts a shorthand letter that can be used after a single dash.
func StringToIntVarP(p *map[string]int, name, shorthand string, value map[string]int, usage string) {
	CommandLine.VarP(newStringToIntValue(value, p), name, shorthand, usage)
}

// StringToInt defines a string flag with specified name, default value, and usage string.
// The return value is the address of a map[string]int variable that stores the value of the flag.
// The value of each argument will not try to be separated by comma
func (f *FlagSet) StringToInt(name string, value map[string]int, usage string) *map[string]int {
	p := map[string]int{}
	f.StringToIntVarP(&p, name, "", value, usage)
	return &p
}

// StringToIntP is like StringToInt, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) StringToIntP(name, shorthand string, value map[string]int, usage string) *map[string]int {
	p := map[string]int{}
	f.StringToIntVarP(&p, name, shorthand, value, usage)
	return &p
}

// StringToInt defines a string flag with specified name, default value, and usage string.
// The return value is the address of a map[string]int variable that stores the value of the flag.
// The value of each argument will not try to be separated by comma
func StringToInt(name string, value map[string]int, usage string) *map[string]int {
	return CommandLine.StringToIntP(name, "", value, usage)
}

// StringToIntP is like StringToInt, but accepts a shorthand letter that can be used after a single dash.
func StringToIntP(name, shorthand string, value map[string]int, usage string) *map[string]int {
	return CommandLine.StringToIntP(name, shorthand, value, usage)
}
07070100000B67000081A4000000000000000000000001645E367C000013B1000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/string_to_int64.go  package pflag

import (
	"bytes"
	"fmt"
	"strconv"
	"strings"
)

// -- stringToInt64 Value
type stringToInt64Value struct {
	value   *map[string]int64
	changed bool
}

func newStringToInt64Value(val map[string]int64, p *map[string]int64) *stringToInt64Value {
	ssv := new(stringToInt64Value)
	ssv.value = p
	*ssv.value = val
	return ssv
}

// Format: a=1,b=2
func (s *stringToInt64Value) Set(val string) error {
	ss := strings.Split(val, ",")
	out := make(map[string]int64, len(ss))
	for _, pair := range ss {
		kv := strings.SplitN(pair, "=", 2)
		if len(kv) != 2 {
			return fmt.Errorf("%s must be formatted as key=value", pair)
		}
		var err error
		out[kv[0]], err = strconv.ParseInt(kv[1], 10, 64)
		if err != nil {
			return err
		}
	}
	if !s.changed {
		*s.value = out
	} else {
		for k, v := range out {
			(*s.value)[k] = v
		}
	}
	s.changed = true
	return nil
}

func (s *stringToInt64Value) Type() string {
	return "stringToInt64"
}

func (s *stringToInt64Value) String() string {
	var buf bytes.Buffer
	i := 0
	for k, v := range *s.value {
		if i > 0 {
			buf.WriteRune(',')
		}
		buf.WriteString(k)
		buf.WriteRune('=')
		buf.WriteString(strconv.FormatInt(v, 10))
		i++
	}
	return "[" + buf.String() + "]"
}

func stringToInt64Conv(val string) (interface{}, error) {
	val = strings.Trim(val, "[]")
	// An empty string would cause an empty map
	if len(val) == 0 {
		return map[string]int64{}, nil
	}
	ss := strings.Split(val, ",")
	out := make(map[string]int64, len(ss))
	for _, pair := range ss {
		kv := strings.SplitN(pair, "=", 2)
		if len(kv) != 2 {
			return nil, fmt.Errorf("%s must be formatted as key=value", pair)
		}
		var err error
		out[kv[0]], err = strconv.ParseInt(kv[1], 10, 64)
		if err != nil {
			return nil, err
		}
	}
	return out, nil
}

// GetStringToInt64 return the map[string]int64 value of a flag with the given name
func (f *FlagSet) GetStringToInt64(name string) (map[string]int64, error) {
	val, err := f.getFlagType(name, "stringToInt64", stringToInt64Conv)
	if err != nil {
		return map[string]int64{}, err
	}
	return val.(map[string]int64), nil
}

// StringToInt64Var defines a string flag with specified name, default value, and usage string.
// The argument p point64s to a map[string]int64 variable in which to store the values of the multiple flags.
// The value of each argument will not try to be separated by comma
func (f *FlagSet) StringToInt64Var(p *map[string]int64, name string, value map[string]int64, usage string) {
	f.VarP(newStringToInt64Value(value, p), name, "", usage)
}

// StringToInt64VarP is like StringToInt64Var, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) StringToInt64VarP(p *map[string]int64, name, shorthand string, value map[string]int64, usage string) {
	f.VarP(newStringToInt64Value(value, p), name, shorthand, usage)
}

// StringToInt64Var defines a string flag with specified name, default value, and usage string.
// The argument p point64s to a map[string]int64 variable in which to store the value of the flag.
// The value of each argument will not try to be separated by comma
func StringToInt64Var(p *map[string]int64, name string, value map[string]int64, usage string) {
	CommandLine.VarP(newStringToInt64Value(value, p), name, "", usage)
}

// StringToInt64VarP is like StringToInt64Var, but accepts a shorthand letter that can be used after a single dash.
func StringToInt64VarP(p *map[string]int64, name, shorthand string, value map[string]int64, usage string) {
	CommandLine.VarP(newStringToInt64Value(value, p), name, shorthand, usage)
}

// StringToInt64 defines a string flag with specified name, default value, and usage string.
// The return value is the address of a map[string]int64 variable that stores the value of the flag.
// The value of each argument will not try to be separated by comma
func (f *FlagSet) StringToInt64(name string, value map[string]int64, usage string) *map[string]int64 {
	p := map[string]int64{}
	f.StringToInt64VarP(&p, name, "", value, usage)
	return &p
}

// StringToInt64P is like StringToInt64, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) StringToInt64P(name, shorthand string, value map[string]int64, usage string) *map[string]int64 {
	p := map[string]int64{}
	f.StringToInt64VarP(&p, name, shorthand, value, usage)
	return &p
}

// StringToInt64 defines a string flag with specified name, default value, and usage string.
// The return value is the address of a map[string]int64 variable that stores the value of the flag.
// The value of each argument will not try to be separated by comma
func StringToInt64(name string, value map[string]int64, usage string) *map[string]int64 {
	return CommandLine.StringToInt64P(name, "", value, usage)
}

// StringToInt64P is like StringToInt64, but accepts a shorthand letter that can be used after a single dash.
func StringToInt64P(name, shorthand string, value map[string]int64, usage string) *map[string]int64 {
	return CommandLine.StringToInt64P(name, shorthand, value, usage)
}
   07070100000B68000081A4000000000000000000000001645E367C000014F0000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/string_to_string.go package pflag

import (
	"bytes"
	"encoding/csv"
	"fmt"
	"strings"
)

// -- stringToString Value
type stringToStringValue struct {
	value   *map[string]string
	changed bool
}

func newStringToStringValue(val map[string]string, p *map[string]string) *stringToStringValue {
	ssv := new(stringToStringValue)
	ssv.value = p
	*ssv.value = val
	return ssv
}

// Format: a=1,b=2
func (s *stringToStringValue) Set(val string) error {
	var ss []string
	n := strings.Count(val, "=")
	switch n {
	case 0:
		return fmt.Errorf("%s must be formatted as key=value", val)
	case 1:
		ss = append(ss, strings.Trim(val, `"`))
	default:
		r := csv.NewReader(strings.NewReader(val))
		var err error
		ss, err = r.Read()
		if err != nil {
			return err
		}
	}

	out := make(map[string]string, len(ss))
	for _, pair := range ss {
		kv := strings.SplitN(pair, "=", 2)
		if len(kv) != 2 {
			return fmt.Errorf("%s must be formatted as key=value", pair)
		}
		out[kv[0]] = kv[1]
	}
	if !s.changed {
		*s.value = out
	} else {
		for k, v := range out {
			(*s.value)[k] = v
		}
	}
	s.changed = true
	return nil
}

func (s *stringToStringValue) Type() string {
	return "stringToString"
}

func (s *stringToStringValue) String() string {
	records := make([]string, 0, len(*s.value)>>1)
	for k, v := range *s.value {
		records = append(records, k+"="+v)
	}

	var buf bytes.Buffer
	w := csv.NewWriter(&buf)
	if err := w.Write(records); err != nil {
		panic(err)
	}
	w.Flush()
	return "[" + strings.TrimSpace(buf.String()) + "]"
}

func stringToStringConv(val string) (interface{}, error) {
	val = strings.Trim(val, "[]")
	// An empty string would cause an empty map
	if len(val) == 0 {
		return map[string]string{}, nil
	}
	r := csv.NewReader(strings.NewReader(val))
	ss, err := r.Read()
	if err != nil {
		return nil, err
	}
	out := make(map[string]string, len(ss))
	for _, pair := range ss {
		kv := strings.SplitN(pair, "=", 2)
		if len(kv) != 2 {
			return nil, fmt.Errorf("%s must be formatted as key=value", pair)
		}
		out[kv[0]] = kv[1]
	}
	return out, nil
}

// GetStringToString return the map[string]string value of a flag with the given name
func (f *FlagSet) GetStringToString(name string) (map[string]string, error) {
	val, err := f.getFlagType(name, "stringToString", stringToStringConv)
	if err != nil {
		return map[string]string{}, err
	}
	return val.(map[string]string), nil
}

// StringToStringVar defines a string flag with specified name, default value, and usage string.
// The argument p points to a map[string]string variable in which to store the values of the multiple flags.
// The value of each argument will not try to be separated by comma
func (f *FlagSet) StringToStringVar(p *map[string]string, name string, value map[string]string, usage string) {
	f.VarP(newStringToStringValue(value, p), name, "", usage)
}

// StringToStringVarP is like StringToStringVar, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) StringToStringVarP(p *map[string]string, name, shorthand string, value map[string]string, usage string) {
	f.VarP(newStringToStringValue(value, p), name, shorthand, usage)
}

// StringToStringVar defines a string flag with specified name, default value, and usage string.
// The argument p points to a map[string]string variable in which to store the value of the flag.
// The value of each argument will not try to be separated by comma
func StringToStringVar(p *map[string]string, name string, value map[string]string, usage string) {
	CommandLine.VarP(newStringToStringValue(value, p), name, "", usage)
}

// StringToStringVarP is like StringToStringVar, but accepts a shorthand letter that can be used after a single dash.
func StringToStringVarP(p *map[string]string, name, shorthand string, value map[string]string, usage string) {
	CommandLine.VarP(newStringToStringValue(value, p), name, shorthand, usage)
}

// StringToString defines a string flag with specified name, default value, and usage string.
// The return value is the address of a map[string]string variable that stores the value of the flag.
// The value of each argument will not try to be separated by comma
func (f *FlagSet) StringToString(name string, value map[string]string, usage string) *map[string]string {
	p := map[string]string{}
	f.StringToStringVarP(&p, name, "", value, usage)
	return &p
}

// StringToStringP is like StringToString, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) StringToStringP(name, shorthand string, value map[string]string, usage string) *map[string]string {
	p := map[string]string{}
	f.StringToStringVarP(&p, name, shorthand, value, usage)
	return &p
}

// StringToString defines a string flag with specified name, default value, and usage string.
// The return value is the address of a map[string]string variable that stores the value of the flag.
// The value of each argument will not try to be separated by comma
func StringToString(name string, value map[string]string, usage string) *map[string]string {
	return CommandLine.StringToStringP(name, "", value, usage)
}

// StringToStringP is like StringToString, but accepts a shorthand letter that can be used after a single dash.
func StringToStringP(name, shorthand string, value map[string]string, usage string) *map[string]string {
	return CommandLine.StringToStringP(name, shorthand, value, usage)
}
07070100000B69000081A4000000000000000000000001645E367C00000B77000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/uint.go package pflag

import "strconv"

// -- uint Value
type uintValue uint

func newUintValue(val uint, p *uint) *uintValue {
	*p = val
	return (*uintValue)(p)
}

func (i *uintValue) Set(s string) error {
	v, err := strconv.ParseUint(s, 0, 64)
	*i = uintValue(v)
	return err
}

func (i *uintValue) Type() string {
	return "uint"
}

func (i *uintValue) String() string { return strconv.FormatUint(uint64(*i), 10) }

func uintConv(sval string) (interface{}, error) {
	v, err := strconv.ParseUint(sval, 0, 0)
	if err != nil {
		return 0, err
	}
	return uint(v), nil
}

// GetUint return the uint value of a flag with the given name
func (f *FlagSet) GetUint(name string) (uint, error) {
	val, err := f.getFlagType(name, "uint", uintConv)
	if err != nil {
		return 0, err
	}
	return val.(uint), nil
}

// UintVar defines a uint flag with specified name, default value, and usage string.
// The argument p points to a uint variable in which to store the value of the flag.
func (f *FlagSet) UintVar(p *uint, name string, value uint, usage string) {
	f.VarP(newUintValue(value, p), name, "", usage)
}

// UintVarP is like UintVar, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) UintVarP(p *uint, name, shorthand string, value uint, usage string) {
	f.VarP(newUintValue(value, p), name, shorthand, usage)
}

// UintVar defines a uint flag with specified name, default value, and usage string.
// The argument p points to a uint  variable in which to store the value of the flag.
func UintVar(p *uint, name string, value uint, usage string) {
	CommandLine.VarP(newUintValue(value, p), name, "", usage)
}

// UintVarP is like UintVar, but accepts a shorthand letter that can be used after a single dash.
func UintVarP(p *uint, name, shorthand string, value uint, usage string) {
	CommandLine.VarP(newUintValue(value, p), name, shorthand, usage)
}

// Uint defines a uint flag with specified name, default value, and usage string.
// The return value is the address of a uint  variable that stores the value of the flag.
func (f *FlagSet) Uint(name string, value uint, usage string) *uint {
	p := new(uint)
	f.UintVarP(p, name, "", value, usage)
	return p
}

// UintP is like Uint, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) UintP(name, shorthand string, value uint, usage string) *uint {
	p := new(uint)
	f.UintVarP(p, name, shorthand, value, usage)
	return p
}

// Uint defines a uint flag with specified name, default value, and usage string.
// The return value is the address of a uint  variable that stores the value of the flag.
func Uint(name string, value uint, usage string) *uint {
	return CommandLine.UintP(name, "", value, usage)
}

// UintP is like Uint, but accepts a shorthand letter that can be used after a single dash.
func UintP(name, shorthand string, value uint, usage string) *uint {
	return CommandLine.UintP(name, shorthand, value, usage)
}
 07070100000B6A000081A4000000000000000000000001645E367C00000C00000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/uint16.go   package pflag

import "strconv"

// -- uint16 value
type uint16Value uint16

func newUint16Value(val uint16, p *uint16) *uint16Value {
	*p = val
	return (*uint16Value)(p)
}

func (i *uint16Value) Set(s string) error {
	v, err := strconv.ParseUint(s, 0, 16)
	*i = uint16Value(v)
	return err
}

func (i *uint16Value) Type() string {
	return "uint16"
}

func (i *uint16Value) String() string { return strconv.FormatUint(uint64(*i), 10) }

func uint16Conv(sval string) (interface{}, error) {
	v, err := strconv.ParseUint(sval, 0, 16)
	if err != nil {
		return 0, err
	}
	return uint16(v), nil
}

// GetUint16 return the uint16 value of a flag with the given name
func (f *FlagSet) GetUint16(name string) (uint16, error) {
	val, err := f.getFlagType(name, "uint16", uint16Conv)
	if err != nil {
		return 0, err
	}
	return val.(uint16), nil
}

// Uint16Var defines a uint flag with specified name, default value, and usage string.
// The argument p points to a uint variable in which to store the value of the flag.
func (f *FlagSet) Uint16Var(p *uint16, name string, value uint16, usage string) {
	f.VarP(newUint16Value(value, p), name, "", usage)
}

// Uint16VarP is like Uint16Var, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Uint16VarP(p *uint16, name, shorthand string, value uint16, usage string) {
	f.VarP(newUint16Value(value, p), name, shorthand, usage)
}

// Uint16Var defines a uint flag with specified name, default value, and usage string.
// The argument p points to a uint  variable in which to store the value of the flag.
func Uint16Var(p *uint16, name string, value uint16, usage string) {
	CommandLine.VarP(newUint16Value(value, p), name, "", usage)
}

// Uint16VarP is like Uint16Var, but accepts a shorthand letter that can be used after a single dash.
func Uint16VarP(p *uint16, name, shorthand string, value uint16, usage string) {
	CommandLine.VarP(newUint16Value(value, p), name, shorthand, usage)
}

// Uint16 defines a uint flag with specified name, default value, and usage string.
// The return value is the address of a uint  variable that stores the value of the flag.
func (f *FlagSet) Uint16(name string, value uint16, usage string) *uint16 {
	p := new(uint16)
	f.Uint16VarP(p, name, "", value, usage)
	return p
}

// Uint16P is like Uint16, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Uint16P(name, shorthand string, value uint16, usage string) *uint16 {
	p := new(uint16)
	f.Uint16VarP(p, name, shorthand, value, usage)
	return p
}

// Uint16 defines a uint flag with specified name, default value, and usage string.
// The return value is the address of a uint  variable that stores the value of the flag.
func Uint16(name string, value uint16, usage string) *uint16 {
	return CommandLine.Uint16P(name, "", value, usage)
}

// Uint16P is like Uint16, but accepts a shorthand letter that can be used after a single dash.
func Uint16P(name, shorthand string, value uint16, usage string) *uint16 {
	return CommandLine.Uint16P(name, shorthand, value, usage)
}
07070100000B6B000081A4000000000000000000000001645E367C00000C10000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/uint32.go   package pflag

import "strconv"

// -- uint32 value
type uint32Value uint32

func newUint32Value(val uint32, p *uint32) *uint32Value {
	*p = val
	return (*uint32Value)(p)
}

func (i *uint32Value) Set(s string) error {
	v, err := strconv.ParseUint(s, 0, 32)
	*i = uint32Value(v)
	return err
}

func (i *uint32Value) Type() string {
	return "uint32"
}

func (i *uint32Value) String() string { return strconv.FormatUint(uint64(*i), 10) }

func uint32Conv(sval string) (interface{}, error) {
	v, err := strconv.ParseUint(sval, 0, 32)
	if err != nil {
		return 0, err
	}
	return uint32(v), nil
}

// GetUint32 return the uint32 value of a flag with the given name
func (f *FlagSet) GetUint32(name string) (uint32, error) {
	val, err := f.getFlagType(name, "uint32", uint32Conv)
	if err != nil {
		return 0, err
	}
	return val.(uint32), nil
}

// Uint32Var defines a uint32 flag with specified name, default value, and usage string.
// The argument p points to a uint32 variable in which to store the value of the flag.
func (f *FlagSet) Uint32Var(p *uint32, name string, value uint32, usage string) {
	f.VarP(newUint32Value(value, p), name, "", usage)
}

// Uint32VarP is like Uint32Var, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Uint32VarP(p *uint32, name, shorthand string, value uint32, usage string) {
	f.VarP(newUint32Value(value, p), name, shorthand, usage)
}

// Uint32Var defines a uint32 flag with specified name, default value, and usage string.
// The argument p points to a uint32  variable in which to store the value of the flag.
func Uint32Var(p *uint32, name string, value uint32, usage string) {
	CommandLine.VarP(newUint32Value(value, p), name, "", usage)
}

// Uint32VarP is like Uint32Var, but accepts a shorthand letter that can be used after a single dash.
func Uint32VarP(p *uint32, name, shorthand string, value uint32, usage string) {
	CommandLine.VarP(newUint32Value(value, p), name, shorthand, usage)
}

// Uint32 defines a uint32 flag with specified name, default value, and usage string.
// The return value is the address of a uint32  variable that stores the value of the flag.
func (f *FlagSet) Uint32(name string, value uint32, usage string) *uint32 {
	p := new(uint32)
	f.Uint32VarP(p, name, "", value, usage)
	return p
}

// Uint32P is like Uint32, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Uint32P(name, shorthand string, value uint32, usage string) *uint32 {
	p := new(uint32)
	f.Uint32VarP(p, name, shorthand, value, usage)
	return p
}

// Uint32 defines a uint32 flag with specified name, default value, and usage string.
// The return value is the address of a uint32  variable that stores the value of the flag.
func Uint32(name string, value uint32, usage string) *uint32 {
	return CommandLine.Uint32P(name, "", value, usage)
}

// Uint32P is like Uint32, but accepts a shorthand letter that can be used after a single dash.
func Uint32P(name, shorthand string, value uint32, usage string) *uint32 {
	return CommandLine.Uint32P(name, shorthand, value, usage)
}
07070100000B6C000081A4000000000000000000000001645E367C00000C0D000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/uint64.go   package pflag

import "strconv"

// -- uint64 Value
type uint64Value uint64

func newUint64Value(val uint64, p *uint64) *uint64Value {
	*p = val
	return (*uint64Value)(p)
}

func (i *uint64Value) Set(s string) error {
	v, err := strconv.ParseUint(s, 0, 64)
	*i = uint64Value(v)
	return err
}

func (i *uint64Value) Type() string {
	return "uint64"
}

func (i *uint64Value) String() string { return strconv.FormatUint(uint64(*i), 10) }

func uint64Conv(sval string) (interface{}, error) {
	v, err := strconv.ParseUint(sval, 0, 64)
	if err != nil {
		return 0, err
	}
	return uint64(v), nil
}

// GetUint64 return the uint64 value of a flag with the given name
func (f *FlagSet) GetUint64(name string) (uint64, error) {
	val, err := f.getFlagType(name, "uint64", uint64Conv)
	if err != nil {
		return 0, err
	}
	return val.(uint64), nil
}

// Uint64Var defines a uint64 flag with specified name, default value, and usage string.
// The argument p points to a uint64 variable in which to store the value of the flag.
func (f *FlagSet) Uint64Var(p *uint64, name string, value uint64, usage string) {
	f.VarP(newUint64Value(value, p), name, "", usage)
}

// Uint64VarP is like Uint64Var, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Uint64VarP(p *uint64, name, shorthand string, value uint64, usage string) {
	f.VarP(newUint64Value(value, p), name, shorthand, usage)
}

// Uint64Var defines a uint64 flag with specified name, default value, and usage string.
// The argument p points to a uint64 variable in which to store the value of the flag.
func Uint64Var(p *uint64, name string, value uint64, usage string) {
	CommandLine.VarP(newUint64Value(value, p), name, "", usage)
}

// Uint64VarP is like Uint64Var, but accepts a shorthand letter that can be used after a single dash.
func Uint64VarP(p *uint64, name, shorthand string, value uint64, usage string) {
	CommandLine.VarP(newUint64Value(value, p), name, shorthand, usage)
}

// Uint64 defines a uint64 flag with specified name, default value, and usage string.
// The return value is the address of a uint64 variable that stores the value of the flag.
func (f *FlagSet) Uint64(name string, value uint64, usage string) *uint64 {
	p := new(uint64)
	f.Uint64VarP(p, name, "", value, usage)
	return p
}

// Uint64P is like Uint64, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Uint64P(name, shorthand string, value uint64, usage string) *uint64 {
	p := new(uint64)
	f.Uint64VarP(p, name, shorthand, value, usage)
	return p
}

// Uint64 defines a uint64 flag with specified name, default value, and usage string.
// The return value is the address of a uint64 variable that stores the value of the flag.
func Uint64(name string, value uint64, usage string) *uint64 {
	return CommandLine.Uint64P(name, "", value, usage)
}

// Uint64P is like Uint64, but accepts a shorthand letter that can be used after a single dash.
func Uint64P(name, shorthand string, value uint64, usage string) *uint64 {
	return CommandLine.Uint64P(name, shorthand, value, usage)
}
   07070100000B6D000081A4000000000000000000000001645E367C00000BBF000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/uint8.go    package pflag

import "strconv"

// -- uint8 Value
type uint8Value uint8

func newUint8Value(val uint8, p *uint8) *uint8Value {
	*p = val
	return (*uint8Value)(p)
}

func (i *uint8Value) Set(s string) error {
	v, err := strconv.ParseUint(s, 0, 8)
	*i = uint8Value(v)
	return err
}

func (i *uint8Value) Type() string {
	return "uint8"
}

func (i *uint8Value) String() string { return strconv.FormatUint(uint64(*i), 10) }

func uint8Conv(sval string) (interface{}, error) {
	v, err := strconv.ParseUint(sval, 0, 8)
	if err != nil {
		return 0, err
	}
	return uint8(v), nil
}

// GetUint8 return the uint8 value of a flag with the given name
func (f *FlagSet) GetUint8(name string) (uint8, error) {
	val, err := f.getFlagType(name, "uint8", uint8Conv)
	if err != nil {
		return 0, err
	}
	return val.(uint8), nil
}

// Uint8Var defines a uint8 flag with specified name, default value, and usage string.
// The argument p points to a uint8 variable in which to store the value of the flag.
func (f *FlagSet) Uint8Var(p *uint8, name string, value uint8, usage string) {
	f.VarP(newUint8Value(value, p), name, "", usage)
}

// Uint8VarP is like Uint8Var, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Uint8VarP(p *uint8, name, shorthand string, value uint8, usage string) {
	f.VarP(newUint8Value(value, p), name, shorthand, usage)
}

// Uint8Var defines a uint8 flag with specified name, default value, and usage string.
// The argument p points to a uint8 variable in which to store the value of the flag.
func Uint8Var(p *uint8, name string, value uint8, usage string) {
	CommandLine.VarP(newUint8Value(value, p), name, "", usage)
}

// Uint8VarP is like Uint8Var, but accepts a shorthand letter that can be used after a single dash.
func Uint8VarP(p *uint8, name, shorthand string, value uint8, usage string) {
	CommandLine.VarP(newUint8Value(value, p), name, shorthand, usage)
}

// Uint8 defines a uint8 flag with specified name, default value, and usage string.
// The return value is the address of a uint8 variable that stores the value of the flag.
func (f *FlagSet) Uint8(name string, value uint8, usage string) *uint8 {
	p := new(uint8)
	f.Uint8VarP(p, name, "", value, usage)
	return p
}

// Uint8P is like Uint8, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) Uint8P(name, shorthand string, value uint8, usage string) *uint8 {
	p := new(uint8)
	f.Uint8VarP(p, name, shorthand, value, usage)
	return p
}

// Uint8 defines a uint8 flag with specified name, default value, and usage string.
// The return value is the address of a uint8 variable that stores the value of the flag.
func Uint8(name string, value uint8, usage string) *uint8 {
	return CommandLine.Uint8P(name, "", value, usage)
}

// Uint8P is like Uint8, but accepts a shorthand letter that can be used after a single dash.
func Uint8P(name, shorthand string, value uint8, usage string) *uint8 {
	return CommandLine.Uint8P(name, shorthand, value, usage)
}
 07070100000B6E000081A4000000000000000000000001645E367C00001255000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/spf13/pflag/uint_slice.go   package pflag

import (
	"fmt"
	"strconv"
	"strings"
)

// -- uintSlice Value
type uintSliceValue struct {
	value   *[]uint
	changed bool
}

func newUintSliceValue(val []uint, p *[]uint) *uintSliceValue {
	uisv := new(uintSliceValue)
	uisv.value = p
	*uisv.value = val
	return uisv
}

func (s *uintSliceValue) Set(val string) error {
	ss := strings.Split(val, ",")
	out := make([]uint, len(ss))
	for i, d := range ss {
		u, err := strconv.ParseUint(d, 10, 0)
		if err != nil {
			return err
		}
		out[i] = uint(u)
	}
	if !s.changed {
		*s.value = out
	} else {
		*s.value = append(*s.value, out...)
	}
	s.changed = true
	return nil
}

func (s *uintSliceValue) Type() string {
	return "uintSlice"
}

func (s *uintSliceValue) String() string {
	out := make([]string, len(*s.value))
	for i, d := range *s.value {
		out[i] = fmt.Sprintf("%d", d)
	}
	return "[" + strings.Join(out, ",") + "]"
}

func (s *uintSliceValue) fromString(val string) (uint, error) {
	t, err := strconv.ParseUint(val, 10, 0)
	if err != nil {
		return 0, err
	}
	return uint(t), nil
}

func (s *uintSliceValue) toString(val uint) string {
	return fmt.Sprintf("%d", val)
}

func (s *uintSliceValue) Append(val string) error {
	i, err := s.fromString(val)
	if err != nil {
		return err
	}
	*s.value = append(*s.value, i)
	return nil
}

func (s *uintSliceValue) Replace(val []string) error {
	out := make([]uint, len(val))
	for i, d := range val {
		var err error
		out[i], err = s.fromString(d)
		if err != nil {
			return err
		}
	}
	*s.value = out
	return nil
}

func (s *uintSliceValue) GetSlice() []string {
	out := make([]string, len(*s.value))
	for i, d := range *s.value {
		out[i] = s.toString(d)
	}
	return out
}

func uintSliceConv(val string) (interface{}, error) {
	val = strings.Trim(val, "[]")
	// Empty string would cause a slice with one (empty) entry
	if len(val) == 0 {
		return []uint{}, nil
	}
	ss := strings.Split(val, ",")
	out := make([]uint, len(ss))
	for i, d := range ss {
		u, err := strconv.ParseUint(d, 10, 0)
		if err != nil {
			return nil, err
		}
		out[i] = uint(u)
	}
	return out, nil
}

// GetUintSlice returns the []uint value of a flag with the given name.
func (f *FlagSet) GetUintSlice(name string) ([]uint, error) {
	val, err := f.getFlagType(name, "uintSlice", uintSliceConv)
	if err != nil {
		return []uint{}, err
	}
	return val.([]uint), nil
}

// UintSliceVar defines a uintSlice flag with specified name, default value, and usage string.
// The argument p points to a []uint variable in which to store the value of the flag.
func (f *FlagSet) UintSliceVar(p *[]uint, name string, value []uint, usage string) {
	f.VarP(newUintSliceValue(value, p), name, "", usage)
}

// UintSliceVarP is like UintSliceVar, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) UintSliceVarP(p *[]uint, name, shorthand string, value []uint, usage string) {
	f.VarP(newUintSliceValue(value, p), name, shorthand, usage)
}

// UintSliceVar defines a uint[] flag with specified name, default value, and usage string.
// The argument p points to a uint[] variable in which to store the value of the flag.
func UintSliceVar(p *[]uint, name string, value []uint, usage string) {
	CommandLine.VarP(newUintSliceValue(value, p), name, "", usage)
}

// UintSliceVarP is like the UintSliceVar, but accepts a shorthand letter that can be used after a single dash.
func UintSliceVarP(p *[]uint, name, shorthand string, value []uint, usage string) {
	CommandLine.VarP(newUintSliceValue(value, p), name, shorthand, usage)
}

// UintSlice defines a []uint flag with specified name, default value, and usage string.
// The return value is the address of a []uint variable that stores the value of the flag.
func (f *FlagSet) UintSlice(name string, value []uint, usage string) *[]uint {
	p := []uint{}
	f.UintSliceVarP(&p, name, "", value, usage)
	return &p
}

// UintSliceP is like UintSlice, but accepts a shorthand letter that can be used after a single dash.
func (f *FlagSet) UintSliceP(name, shorthand string, value []uint, usage string) *[]uint {
	p := []uint{}
	f.UintSliceVarP(&p, name, shorthand, value, usage)
	return &p
}

// UintSlice defines a []uint flag with specified name, default value, and usage string.
// The return value is the address of a []uint variable that stores the value of the flag.
func UintSlice(name string, value []uint, usage string) *[]uint {
	return CommandLine.UintSliceP(name, "", value, usage)
}

// UintSliceP is like UintSlice, but accepts a shorthand letter that can be used after a single dash.
func UintSliceP(name, shorthand string, value []uint, usage string) *[]uint {
	return CommandLine.UintSliceP(name, shorthand, value, usage)
}
   07070100000B6F000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003200000000elemental-cli-0.3.1/vendor/github.com/spf13/viper 07070100000B70000081A4000000000000000000000001645E367C000000D4000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/.editorconfig   root = true

[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true

[*.go]
indent_style = tab

[{Makefile,*.mk}]
indent_style = tab
07070100000B71000081A4000000000000000000000001645E367C00000025000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/.gitignore  /.idea/
/bin/
/build/
/var/
/vendor/
   07070100000B72000081A4000000000000000000000001645E367C0000074C000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/.golangci.yaml  run:
    timeout: 5m

linters-settings:
    gci:
        sections:
            - standard
            - default
            - prefix(github.com/spf13/viper)
    golint:
        min-confidence: 0
    goimports:
        local-prefixes: github.com/spf13/viper

linters:
    disable-all: true
    enable:
        - bodyclose
        - deadcode
        - dogsled
        - dupl
        - durationcheck
        - exhaustive
        - exportloopref
        - gci
        - gofmt
        - gofumpt
        - goimports
        - gomoddirectives
        - goprintffuncname
        - govet
        - importas
        - ineffassign
        - makezero
        - misspell
        - nakedret
        - nilerr
        - noctx
        - nolintlint
        - prealloc
        - predeclared
        - revive
        - rowserrcheck
        - sqlclosecheck
        - staticcheck
        - structcheck
        - stylecheck
        - tparallel
        - typecheck
        - unconvert
        - unparam
        - unused
        - varcheck
        - wastedassign
        - whitespace

        # fixme
        # - cyclop
        # - errcheck
        # - errorlint
        # - exhaustivestruct
        # - forbidigo
        # - forcetypeassert
        # - gochecknoglobals
        # - gochecknoinits
        # - gocognit
        # - goconst
        # - gocritic
        # - gocyclo
        # - godot
        # - gosec
        # - gosimple
        # - ifshort
        # - lll
        # - nlreturn
        # - paralleltest
        # - scopelint
        # - thelper
        # - wrapcheck

        # unused
        # - depguard
        # - goheader
        # - gomodguard

        # don't enable:
        # - asciicheck
        # - funlen
        # - godox
        # - goerr113
        # - gomnd
        # - interfacer
        # - maligned
        # - nestif
        # - testpackage
        # - wsl
07070100000B73000081A4000000000000000000000001645E367C00000437000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/LICENSE The MIT License (MIT)

Copyright (c) 2014 Steve Francia

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. 07070100000B74000081A4000000000000000000000001645E367C000009D4000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/Makefile    # A Self-Documenting Makefile: http://marmelab.com/blog/2016/02/29/auto-documented-makefile.html

OS = $(shell uname | tr A-Z a-z)
export PATH := $(abspath bin/):${PATH}

# Build variables
BUILD_DIR ?= build
export CGO_ENABLED ?= 0
export GOOS = $(shell go env GOOS)
ifeq (${VERBOSE}, 1)
ifeq ($(filter -v,${GOARGS}),)
	GOARGS += -v
endif
TEST_FORMAT = short-verbose
endif

# Dependency versions
GOTESTSUM_VERSION = 1.8.0
GOLANGCI_VERSION = 1.50.1

# Add the ability to override some variables
# Use with care
-include override.mk

.PHONY: clear
clear: ## Clear the working area and the project
	rm -rf bin/

.PHONY: check
check: test lint ## Run tests and linters

bin/gotestsum: bin/gotestsum-${GOTESTSUM_VERSION}
	@ln -sf gotestsum-${GOTESTSUM_VERSION} bin/gotestsum
bin/gotestsum-${GOTESTSUM_VERSION}:
	@mkdir -p bin
	curl -L https://github.com/gotestyourself/gotestsum/releases/download/v${GOTESTSUM_VERSION}/gotestsum_${GOTESTSUM_VERSION}_${OS}_amd64.tar.gz | tar -zOxf - gotestsum > ./bin/gotestsum-${GOTESTSUM_VERSION} && chmod +x ./bin/gotestsum-${GOTESTSUM_VERSION}

TEST_PKGS ?= ./...
.PHONY: test
test: TEST_FORMAT ?= short
test: SHELL = /bin/bash
test: export CGO_ENABLED=1
test: bin/gotestsum ## Run tests
	@mkdir -p ${BUILD_DIR}
	bin/gotestsum --no-summary=skipped --junitfile ${BUILD_DIR}/coverage.xml --format ${TEST_FORMAT} -- -race -coverprofile=${BUILD_DIR}/coverage.txt -covermode=atomic $(filter-out -v,${GOARGS}) $(if ${TEST_PKGS},${TEST_PKGS},./...)

bin/golangci-lint: bin/golangci-lint-${GOLANGCI_VERSION}
	@ln -sf golangci-lint-${GOLANGCI_VERSION} bin/golangci-lint
bin/golangci-lint-${GOLANGCI_VERSION}:
	@mkdir -p bin
	curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | bash -s -- -b ./bin/ v${GOLANGCI_VERSION}
	@mv bin/golangci-lint "$@"

.PHONY: lint
lint: bin/golangci-lint ## Run linter
	bin/golangci-lint run

.PHONY: fix
fix: bin/golangci-lint ## Fix lint violations
	bin/golangci-lint run --fix

# Add custom targets here
-include custom.mk

.PHONY: list
list: ## List all make targets
	@${MAKE} -pRrn : -f $(MAKEFILE_LIST) 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | egrep -v -e '^[^[:alnum:]]' -e '^$@$$' | sort

.PHONY: help
.DEFAULT_GOAL := help
help:
	@grep -h -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'

# Variable outputting/exporting rules
var-%: ; @echo $($*)
varexport-%: ; @echo $*=$($*)
07070100000B75000081A4000000000000000000000001645E367C00006EEA000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/README.md   > ## Viper v2 feedback
> Viper is heading towards v2 and we would love to hear what _**you**_ would like to see in it. Share your thoughts here: https://forms.gle/R6faU74qPRPAzchZ9
>
> **Thank you!**

![Viper](.github/logo.png?raw=true)

[![Mentioned in Awesome Go](https://awesome.re/mentioned-badge-flat.svg)](https://github.com/avelino/awesome-go#configuration)
[![run on repl.it](https://repl.it/badge/github/sagikazarmark/Viper-example)](https://repl.it/@sagikazarmark/Viper-example#main.go)

[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/spf13/viper/ci.yaml?branch=master&style=flat-square)](https://github.com/spf13/viper/actions?query=workflow%3ACI)
[![Join the chat at https://gitter.im/spf13/viper](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/spf13/viper?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![Go Report Card](https://goreportcard.com/badge/github.com/spf13/viper?style=flat-square)](https://goreportcard.com/report/github.com/spf13/viper)
![Go Version](https://img.shields.io/badge/go%20version-%3E=1.16-61CFDD.svg?style=flat-square)
[![PkgGoDev](https://pkg.go.dev/badge/mod/github.com/spf13/viper)](https://pkg.go.dev/mod/github.com/spf13/viper)

**Go configuration with fangs!**

Many Go projects are built using Viper including:

* [Hugo](http://gohugo.io)
* [EMC RexRay](http://rexray.readthedocs.org/en/stable/)
* [Imgur’s Incus](https://github.com/Imgur/incus)
* [Nanobox](https://github.com/nanobox-io/nanobox)/[Nanopack](https://github.com/nanopack)
* [Docker Notary](https://github.com/docker/Notary)
* [BloomApi](https://www.bloomapi.com/)
* [doctl](https://github.com/digitalocean/doctl)
* [Clairctl](https://github.com/jgsqware/clairctl)
* [Mercure](https://mercure.rocks)


## Install

```shell
go get github.com/spf13/viper
```

**Note:** Viper uses [Go Modules](https://github.com/golang/go/wiki/Modules) to manage dependencies.


## What is Viper?

Viper is a complete configuration solution for Go applications including [12-Factor apps](https://12factor.net/#the_twelve_factors).
It is designed to work within an application, and can handle all types of configuration needs
and formats. It supports:

* setting defaults
* reading from JSON, TOML, YAML, HCL, envfile and Java properties config files
* live watching and re-reading of config files (optional)
* reading from environment variables
* reading from remote config systems (etcd or Consul), and watching changes
* reading from command line flags
* reading from buffer
* setting explicit values

Viper can be thought of as a registry for all of your applications configuration needs.


## Why Viper?

When building a modern application, you don’t want to worry about
configuration file formats; you want to focus on building awesome software.
Viper is here to help with that.

Viper does the following for you:

1. Find, load, and unmarshal a configuration file in JSON, TOML, YAML, HCL, INI, envfile or Java properties formats.
2. Provide a mechanism to set default values for your different configuration options.
3. Provide a mechanism to set override values for options specified through command line flags.
4. Provide an alias system to easily rename parameters without breaking existing code.
5. Make it easy to tell the difference between when a user has provided a command line or config file which is the same as the default.

Viper uses the following precedence order. Each item takes precedence over the item below it:

 * explicit call to `Set`
 * flag
 * env
 * config
 * key/value store
 * default

**Important:** Viper configuration keys are case insensitive.
There are ongoing discussions about making that optional.


## Putting Values into Viper

### Establishing Defaults

A good configuration system will support default values. A default value is not
required for a key, but it’s useful in the event that a key hasn't been set via
config file, environment variable, remote configuration or flag.

Examples:

```go
viper.SetDefault("ContentDir", "content")
viper.SetDefault("LayoutDir", "layouts")
viper.SetDefault("Taxonomies", map[string]string{"tag": "tags", "category": "categories"})
```

### Reading Config Files

Viper requires minimal configuration so it knows where to look for config files.
Viper supports JSON, TOML, YAML, HCL, INI, envfile and Java Properties files. Viper can search multiple paths, but
currently a single Viper instance only supports a single configuration file.
Viper does not default to any configuration search paths leaving defaults decision
to an application.

Here is an example of how to use Viper to search for and read a configuration file.
None of the specific paths are required, but at least one path should be provided
where a configuration file is expected.

```go
viper.SetConfigName("config") // name of config file (without extension)
viper.SetConfigType("yaml") // REQUIRED if the config file does not have the extension in the name
viper.AddConfigPath("/etc/appname/")   // path to look for the config file in
viper.AddConfigPath("$HOME/.appname")  // call multiple times to add many search paths
viper.AddConfigPath(".")               // optionally look for config in the working directory
err := viper.ReadInConfig() // Find and read the config file
if err != nil { // Handle errors reading the config file
	panic(fmt.Errorf("fatal error config file: %w", err))
}
```

You can handle the specific case where no config file is found like this:

```go
if err := viper.ReadInConfig(); err != nil {
	if _, ok := err.(viper.ConfigFileNotFoundError); ok {
		// Config file not found; ignore error if desired
	} else {
		// Config file was found but another error was produced
	}
}

// Config file found and successfully parsed
```

*NOTE [since 1.6]:* You can also have a file without an extension and specify the format programmaticaly. For those configuration files that lie in the home of the user without any extension like `.bashrc`

### Writing Config Files

Reading from config files is useful, but at times you want to store all modifications made at run time.
For that, a bunch of commands are available, each with its own purpose:

* WriteConfig - writes the current viper configuration to the predefined path, if exists. Errors if no predefined path. Will overwrite the current config file, if it exists.
* SafeWriteConfig - writes the current viper configuration to the predefined path. Errors if no predefined path. Will not overwrite the current config file, if it exists.
* WriteConfigAs - writes the current viper configuration to the given filepath. Will overwrite the given file, if it exists.
* SafeWriteConfigAs - writes the current viper configuration to the given filepath. Will not overwrite the given file, if it exists.

As a rule of the thumb, everything marked with safe won't overwrite any file, but just create if not existent, whilst the default behavior is to create or truncate.

A small examples section:

```go
viper.WriteConfig() // writes current config to predefined path set by 'viper.AddConfigPath()' and 'viper.SetConfigName'
viper.SafeWriteConfig()
viper.WriteConfigAs("/path/to/my/.config")
viper.SafeWriteConfigAs("/path/to/my/.config") // will error since it has already been written
viper.SafeWriteConfigAs("/path/to/my/.other_config")
```

### Watching and re-reading config files

Viper supports the ability to have your application live read a config file while running.

Gone are the days of needing to restart a server to have a config take effect,
viper powered applications can read an update to a config file while running and
not miss a beat.

Simply tell the viper instance to watchConfig.
Optionally you can provide a function for Viper to run each time a change occurs.

**Make sure you add all of the configPaths prior to calling `WatchConfig()`**

```go
viper.OnConfigChange(func(e fsnotify.Event) {
	fmt.Println("Config file changed:", e.Name)
})
viper.WatchConfig()
```

### Reading Config from io.Reader

Viper predefines many configuration sources such as files, environment
variables, flags, and remote K/V store, but you are not bound to them. You can
also implement your own required configuration source and feed it to viper.

```go
viper.SetConfigType("yaml") // or viper.SetConfigType("YAML")

// any approach to require this configuration into your program.
var yamlExample = []byte(`
Hacker: true
name: steve
hobbies:
- skateboarding
- snowboarding
- go
clothing:
  jacket: leather
  trousers: denim
age: 35
eyes : brown
beard: true
`)

viper.ReadConfig(bytes.NewBuffer(yamlExample))

viper.Get("name") // this would be "steve"
```

### Setting Overrides

These could be from a command line flag, or from your own application logic.

```go
viper.Set("Verbose", true)
viper.Set("LogFile", LogFile)
```

### Registering and Using Aliases

Aliases permit a single value to be referenced by multiple keys

```go
viper.RegisterAlias("loud", "Verbose")

viper.Set("verbose", true) // same result as next line
viper.Set("loud", true)   // same result as prior line

viper.GetBool("loud") // true
viper.GetBool("verbose") // true
```

### Working with Environment Variables

Viper has full support for environment variables. This enables 12 factor
applications out of the box. There are five methods that exist to aid working
with ENV:

 * `AutomaticEnv()`
 * `BindEnv(string...) : error`
 * `SetEnvPrefix(string)`
 * `SetEnvKeyReplacer(string...) *strings.Replacer`
 * `AllowEmptyEnv(bool)`

_When working with ENV variables, it’s important to recognize that Viper
treats ENV variables as case sensitive._

Viper provides a mechanism to try to ensure that ENV variables are unique. By
using `SetEnvPrefix`, you can tell Viper to use a prefix while reading from
the environment variables. Both `BindEnv` and `AutomaticEnv` will use this
prefix.

`BindEnv` takes one or more parameters. The first parameter is the key name, the
rest are the name of the environment variables to bind to this key. If more than
one are provided, they will take precedence in the specified order. The name of
the environment variable is case sensitive. If the ENV variable name is not provided, then
Viper will automatically assume that the ENV variable matches the following format: prefix + "_" + the key name in ALL CAPS. When you explicitly provide the ENV variable name (the second parameter),
it **does not** automatically add the prefix. For example if the second parameter is "id",
Viper will look for the ENV variable "ID".

One important thing to recognize when working with ENV variables is that the
value will be read each time it is accessed. Viper does not fix the value when
the `BindEnv` is called.

`AutomaticEnv` is a powerful helper especially when combined with
`SetEnvPrefix`. When called, Viper will check for an environment variable any
time a `viper.Get` request is made. It will apply the following rules. It will
check for an environment variable with a name matching the key uppercased and
prefixed with the `EnvPrefix` if set.

`SetEnvKeyReplacer` allows you to use a `strings.Replacer` object to rewrite Env
keys to an extent. This is useful if you want to use `-` or something in your
`Get()` calls, but want your environmental variables to use `_` delimiters. An
example of using it can be found in `viper_test.go`.

Alternatively, you can use `EnvKeyReplacer` with `NewWithOptions` factory function.
Unlike `SetEnvKeyReplacer`, it accepts a `StringReplacer` interface allowing you to write custom string replacing logic.

By default empty environment variables are considered unset and will fall back to
the next configuration source. To treat empty environment variables as set, use
the `AllowEmptyEnv` method.

#### Env example

```go
SetEnvPrefix("spf") // will be uppercased automatically
BindEnv("id")

os.Setenv("SPF_ID", "13") // typically done outside of the app

id := Get("id") // 13
```

### Working with Flags

Viper has the ability to bind to flags. Specifically, Viper supports `Pflags`
as used in the [Cobra](https://github.com/spf13/cobra) library.

Like `BindEnv`, the value is not set when the binding method is called, but when
it is accessed. This means you can bind as early as you want, even in an
`init()` function.

For individual flags, the `BindPFlag()` method provides this functionality.

Example:

```go
serverCmd.Flags().Int("port", 1138, "Port to run Application server on")
viper.BindPFlag("port", serverCmd.Flags().Lookup("port"))
```

You can also bind an existing set of pflags (pflag.FlagSet):

Example:

```go
pflag.Int("flagname", 1234, "help message for flagname")

pflag.Parse()
viper.BindPFlags(pflag.CommandLine)

i := viper.GetInt("flagname") // retrieve values from viper instead of pflag
```

The use of [pflag](https://github.com/spf13/pflag/) in Viper does not preclude
the use of other packages that use the [flag](https://golang.org/pkg/flag/)
package from the standard library. The pflag package can handle the flags
defined for the flag package by importing these flags. This is accomplished
by a calling a convenience function provided by the pflag package called
AddGoFlagSet().

Example:

```go
package main

import (
	"flag"
	"github.com/spf13/pflag"
)

func main() {

	// using standard library "flag" package
	flag.Int("flagname", 1234, "help message for flagname")

	pflag.CommandLine.AddGoFlagSet(flag.CommandLine)
	pflag.Parse()
	viper.BindPFlags(pflag.CommandLine)

	i := viper.GetInt("flagname") // retrieve value from viper

	// ...
}
```

#### Flag interfaces

Viper provides two Go interfaces to bind other flag systems if you don’t use `Pflags`.

`FlagValue` represents a single flag. This is a very simple example on how to implement this interface:

```go
type myFlag struct {}
func (f myFlag) HasChanged() bool { return false }
func (f myFlag) Name() string { return "my-flag-name" }
func (f myFlag) ValueString() string { return "my-flag-value" }
func (f myFlag) ValueType() string { return "string" }
```

Once your flag implements this interface, you can simply tell Viper to bind it:

```go
viper.BindFlagValue("my-flag-name", myFlag{})
```

`FlagValueSet` represents a group of flags. This is a very simple example on how to implement this interface:

```go
type myFlagSet struct {
	flags []myFlag
}

func (f myFlagSet) VisitAll(fn func(FlagValue)) {
	for _, flag := range flags {
		fn(flag)
	}
}
```

Once your flag set implements this interface, you can simply tell Viper to bind it:

```go
fSet := myFlagSet{
	flags: []myFlag{myFlag{}, myFlag{}},
}
viper.BindFlagValues("my-flags", fSet)
```

### Remote Key/Value Store Support

To enable remote support in Viper, do a blank import of the `viper/remote`
package:

`import _ "github.com/spf13/viper/remote"`

Viper will read a config string (as JSON, TOML, YAML, HCL or envfile) retrieved from a path
in a Key/Value store such as etcd or Consul.  These values take precedence over
default values, but are overridden by configuration values retrieved from disk,
flags, or environment variables.

Viper uses [crypt](https://github.com/bketelsen/crypt) to retrieve
configuration from the K/V store, which means that you can store your
configuration values encrypted and have them automatically decrypted if you have
the correct gpg keyring.  Encryption is optional.

You can use remote configuration in conjunction with local configuration, or
independently of it.

`crypt` has a command-line helper that you can use to put configurations in your
K/V store. `crypt` defaults to etcd on http://127.0.0.1:4001.

```bash
$ go get github.com/bketelsen/crypt/bin/crypt
$ crypt set -plaintext /config/hugo.json /Users/hugo/settings/config.json
```

Confirm that your value was set:

```bash
$ crypt get -plaintext /config/hugo.json
```

See the `crypt` documentation for examples of how to set encrypted values, or
how to use Consul.

### Remote Key/Value Store Example - Unencrypted

#### etcd
```go
viper.AddRemoteProvider("etcd", "http://127.0.0.1:4001","/config/hugo.json")
viper.SetConfigType("json") // because there is no file extension in a stream of bytes, supported extensions are "json", "toml", "yaml", "yml", "properties", "props", "prop", "env", "dotenv"
err := viper.ReadRemoteConfig()
```

#### etcd3
```go
viper.AddRemoteProvider("etcd3", "http://127.0.0.1:4001","/config/hugo.json")
viper.SetConfigType("json") // because there is no file extension in a stream of bytes, supported extensions are "json", "toml", "yaml", "yml", "properties", "props", "prop", "env", "dotenv"
err := viper.ReadRemoteConfig()
```

#### Consul
You need to set a key to Consul key/value storage with JSON value containing your desired config.
For example, create a Consul key/value store key `MY_CONSUL_KEY` with value:

```json
{
    "port": 8080,
    "hostname": "myhostname.com"
}
```

```go
viper.AddRemoteProvider("consul", "localhost:8500", "MY_CONSUL_KEY")
viper.SetConfigType("json") // Need to explicitly set this to json
err := viper.ReadRemoteConfig()

fmt.Println(viper.Get("port")) // 8080
fmt.Println(viper.Get("hostname")) // myhostname.com
```

#### Firestore

```go
viper.AddRemoteProvider("firestore", "google-cloud-project-id", "collection/document")
viper.SetConfigType("json") // Config's format: "json", "toml", "yaml", "yml"
err := viper.ReadRemoteConfig()
```

Of course, you're allowed to use `SecureRemoteProvider` also

### Remote Key/Value Store Example - Encrypted

```go
viper.AddSecureRemoteProvider("etcd","http://127.0.0.1:4001","/config/hugo.json","/etc/secrets/mykeyring.gpg")
viper.SetConfigType("json") // because there is no file extension in a stream of bytes,  supported extensions are "json", "toml", "yaml", "yml", "properties", "props", "prop", "env", "dotenv"
err := viper.ReadRemoteConfig()
```

### Watching Changes in etcd - Unencrypted

```go
// alternatively, you can create a new viper instance.
var runtime_viper = viper.New()

runtime_viper.AddRemoteProvider("etcd", "http://127.0.0.1:4001", "/config/hugo.yml")
runtime_viper.SetConfigType("yaml") // because there is no file extension in a stream of bytes, supported extensions are "json", "toml", "yaml", "yml", "properties", "props", "prop", "env", "dotenv"

// read from remote config the first time.
err := runtime_viper.ReadRemoteConfig()

// unmarshal config
runtime_viper.Unmarshal(&runtime_conf)

// open a goroutine to watch remote changes forever
go func(){
	for {
		time.Sleep(time.Second * 5) // delay after each request

		// currently, only tested with etcd support
		err := runtime_viper.WatchRemoteConfig()
		if err != nil {
			log.Errorf("unable to read remote config: %v", err)
			continue
		}

		// unmarshal new config into our runtime config struct. you can also use channel
		// to implement a signal to notify the system of the changes
		runtime_viper.Unmarshal(&runtime_conf)
	}
}()
```

## Getting Values From Viper

In Viper, there are a few ways to get a value depending on the value’s type.
The following functions and methods exist:

 * `Get(key string) : interface{}`
 * `GetBool(key string) : bool`
 * `GetFloat64(key string) : float64`
 * `GetInt(key string) : int`
 * `GetIntSlice(key string) : []int`
 * `GetString(key string) : string`
 * `GetStringMap(key string) : map[string]interface{}`
 * `GetStringMapString(key string) : map[string]string`
 * `GetStringSlice(key string) : []string`
 * `GetTime(key string) : time.Time`
 * `GetDuration(key string) : time.Duration`
 * `IsSet(key string) : bool`
 * `AllSettings() : map[string]interface{}`

One important thing to recognize is that each Get function will return a zero
value if it’s not found. To check if a given key exists, the `IsSet()` method
has been provided.

Example:
```go
viper.GetString("logfile") // case-insensitive Setting & Getting
if viper.GetBool("verbose") {
	fmt.Println("verbose enabled")
}
```
### Accessing nested keys

The accessor methods also accept formatted paths to deeply nested keys. For
example, if the following JSON file is loaded:

```json
{
    "host": {
        "address": "localhost",
        "port": 5799
    },
    "datastore": {
        "metric": {
            "host": "127.0.0.1",
            "port": 3099
        },
        "warehouse": {
            "host": "198.0.0.1",
            "port": 2112
        }
    }
}

```

Viper can access a nested field by passing a `.` delimited path of keys:

```go
GetString("datastore.metric.host") // (returns "127.0.0.1")
```

This obeys the precedence rules established above; the search for the path
will cascade through the remaining configuration registries until found.

For example, given this configuration file, both `datastore.metric.host` and
`datastore.metric.port` are already defined (and may be overridden). If in addition
`datastore.metric.protocol` was defined in the defaults, Viper would also find it.

However, if `datastore.metric` was overridden (by a flag, an environment variable,
the `Set()` method, …) with an immediate value, then all sub-keys of
`datastore.metric` become undefined, they are “shadowed” by the higher-priority
configuration level.

Viper can access array indices by using numbers in the path. For example:

```jsonc
{
    "host": {
        "address": "localhost",
        "ports": [
            5799,
            6029
        ]
    },
    "datastore": {
        "metric": {
            "host": "127.0.0.1",
            "port": 3099
        },
        "warehouse": {
            "host": "198.0.0.1",
            "port": 2112
        }
    }
}

GetInt("host.ports.1") // returns 6029

```

Lastly, if there exists a key that matches the delimited key path, its value
will be returned instead. E.g.

```jsonc
{
    "datastore.metric.host": "0.0.0.0",
    "host": {
        "address": "localhost",
        "port": 5799
    },
    "datastore": {
        "metric": {
            "host": "127.0.0.1",
            "port": 3099
        },
        "warehouse": {
            "host": "198.0.0.1",
            "port": 2112
        }
    }
}

GetString("datastore.metric.host") // returns "0.0.0.0"
```

### Extracting a sub-tree

When developing reusable modules, it's often useful to extract a subset of the configuration
and pass it to a module. This way the module can be instantiated more than once, with different configurations.

For example, an application might use multiple different cache stores for different purposes:

```yaml
cache:
  cache1:
    max-items: 100
    item-size: 64
  cache2:
    max-items: 200
    item-size: 80
```

We could pass the cache name to a module (eg. `NewCache("cache1")`),
but it would require weird concatenation for accessing config keys and would be less separated from the global config.

So instead of doing that let's pass a Viper instance to the constructor that represents a subset of the configuration:

```go
cache1Config := viper.Sub("cache.cache1")
if cache1Config == nil { // Sub returns nil if the key cannot be found
	panic("cache configuration not found")
}

cache1 := NewCache(cache1Config)
```

**Note:** Always check the return value of `Sub`. It returns `nil` if a key cannot be found.

Internally, the `NewCache` function can address `max-items` and `item-size` keys directly:

```go
func NewCache(v *Viper) *Cache {
	return &Cache{
		MaxItems: v.GetInt("max-items"),
		ItemSize: v.GetInt("item-size"),
	}
}
```

The resulting code is easy to test, since it's decoupled from the main config structure,
and easier to reuse (for the same reason).


### Unmarshaling

You also have the option of Unmarshaling all or a specific value to a struct, map,
etc.

There are two methods to do this:

 * `Unmarshal(rawVal interface{}) : error`
 * `UnmarshalKey(key string, rawVal interface{}) : error`

Example:

```go
type config struct {
	Port int
	Name string
	PathMap string `mapstructure:"path_map"`
}

var C config

err := viper.Unmarshal(&C)
if err != nil {
	t.Fatalf("unable to decode into struct, %v", err)
}
```

If you want to unmarshal configuration where the keys themselves contain dot (the default key delimiter),
you have to change the delimiter:

```go
v := viper.NewWithOptions(viper.KeyDelimiter("::"))

v.SetDefault("chart::values", map[string]interface{}{
	"ingress": map[string]interface{}{
		"annotations": map[string]interface{}{
			"traefik.frontend.rule.type":                 "PathPrefix",
			"traefik.ingress.kubernetes.io/ssl-redirect": "true",
		},
	},
})

type config struct {
	Chart struct{
		Values map[string]interface{}
	}
}

var C config

v.Unmarshal(&C)
```

Viper also supports unmarshaling into embedded structs:

```go
/*
Example config:

module:
    enabled: true
    token: 89h3f98hbwf987h3f98wenf89ehf
*/
type config struct {
	Module struct {
		Enabled bool

		moduleConfig `mapstructure:",squash"`
	}
}

// moduleConfig could be in a module specific package
type moduleConfig struct {
	Token string
}

var C config

err := viper.Unmarshal(&C)
if err != nil {
	t.Fatalf("unable to decode into struct, %v", err)
}
```

Viper uses [github.com/mitchellh/mapstructure](https://github.com/mitchellh/mapstructure) under the hood for unmarshaling values which uses `mapstructure` tags by default.

### Decoding custom formats

A frequently requested feature for Viper is adding more value formats and decoders.
For example, parsing character (dot, comma, semicolon, etc) separated strings into slices.

This is already available in Viper using mapstructure decode hooks.

Read more about the details in [this blog post](https://sagikazarmark.hu/blog/decoding-custom-formats-with-viper/).

### Marshalling to string

You may need to marshal all the settings held in viper into a string rather than write them to a file.
You can use your favorite format's marshaller with the config returned by `AllSettings()`.

```go
import (
	yaml "gopkg.in/yaml.v2"
	// ...
)

func yamlStringSettings() string {
	c := viper.AllSettings()
	bs, err := yaml.Marshal(c)
	if err != nil {
		log.Fatalf("unable to marshal config to YAML: %v", err)
	}
	return string(bs)
}
```

## Viper or Vipers?

Viper comes ready to use out of the box. There is no configuration or
initialization needed to begin using Viper. Since most applications will want
to use a single central repository for their configuration, the viper package
provides this. It is similar to a singleton.

In all of the examples above, they demonstrate using viper in its singleton
style approach.

### Working with multiple vipers

You can also create many different vipers for use in your application. Each will
have its own unique set of configurations and values. Each can read from a
different config file, key value store, etc. All of the functions that viper
package supports are mirrored as methods on a viper.

Example:

```go
x := viper.New()
y := viper.New()

x.SetDefault("ContentDir", "content")
y.SetDefault("ContentDir", "foobar")

//...
```

When working with multiple vipers, it is up to the user to keep track of the
different vipers.


## Q & A

### Why is it called “Viper”?

A: Viper is designed to be a [companion](http://en.wikipedia.org/wiki/Viper_(G.I._Joe))
to [Cobra](https://github.com/spf13/cobra). While both can operate completely
independently, together they make a powerful pair to handle much of your
application foundation needs.

### Why is it called “Cobra”?

Is there a better name for a [commander](http://en.wikipedia.org/wiki/Cobra_Commander)?

### Does Viper support case sensitive keys?

**tl;dr:** No.

Viper merges configuration from various sources, many of which are either case insensitive or uses different casing than the rest of the sources (eg. env vars).
In order to provide the best experience when using multiple sources, the decision has been made to make all keys case insensitive.

There has been several attempts to implement case sensitivity, but unfortunately it's not that trivial. We might take a stab at implementing it in [Viper v2](https://github.com/spf13/viper/issues/772), but despite the initial noise, it does not seem to be requested that much.

You can vote for case sensitivity by filling out this feedback form: https://forms.gle/R6faU74qPRPAzchZ9

### Is it safe to concurrently read and write to a viper?

No, you will need to synchronize access to the viper yourself (for example by using the `sync` package). Concurrent reads and writes can cause a panic.

## Troubleshooting

See [TROUBLESHOOTING.md](TROUBLESHOOTING.md).
  07070100000B76000081A4000000000000000000000001645E367C000006F8000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/TROUBLESHOOTING.md  # Troubleshooting

## Unmarshaling doesn't work

The most common reason for this issue is improper use of struct tags (eg. `yaml` or `json`). Viper uses [github.com/mitchellh/mapstructure](https://github.com/mitchellh/mapstructure) under the hood for unmarshaling values which uses `mapstructure` tags by default. Please refer to the library's documentation for using other struct tags.

## Cannot find package

Viper installation seems to fail a lot lately with the following (or a similar) error:

```
cannot find package "github.com/hashicorp/hcl/tree/hcl1" in any of:
/usr/local/Cellar/go/1.15.7_1/libexec/src/github.com/hashicorp/hcl/tree/hcl1 (from $GOROOT)
/Users/user/go/src/github.com/hashicorp/hcl/tree/hcl1 (from $GOPATH)
```

As the error message suggests, Go tries to look up dependencies in `GOPATH` mode (as it's commonly called) from the `GOPATH`.
Viper opted to use [Go Modules](https://github.com/golang/go/wiki/Modules) to manage its dependencies. While in many cases the two methods are interchangeable, once a dependency releases new (major) versions, `GOPATH` mode is no longer able to decide which version to use, so it'll either use one that's already present or pick a version (usually the `master` branch).

The solution is easy: switch to using Go Modules.
Please refer to the [wiki](https://github.com/golang/go/wiki/Modules) on how to do that.

**tl;dr* `export GO111MODULE=on`

## Unquoted 'y' and 'n' characters get replaced with _true_ and _false_ when reading a YAML file

This is a YAML 1.1 feature according to [go-yaml/yaml#740](https://github.com/go-yaml/yaml/issues/740).

Potential solutions are:

1. Quoting values resolved as boolean
1. Upgrading to YAML v3 (for the time being this is possible by passing the `viper_yaml3` tag to your build)
07070100000B77000081A4000000000000000000000001645E367C000000BF000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/experimental_logger.go  //go:build viper_logger
// +build viper_logger

package viper

// WithLogger sets a custom logger.
func WithLogger(l Logger) Option {
	return optionFunc(func(v *Viper) {
		v.logger = l
	})
}
 07070100000B78000081A4000000000000000000000001645E367C00000540000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/flags.go    package viper

import "github.com/spf13/pflag"

// FlagValueSet is an interface that users can implement
// to bind a set of flags to viper.
type FlagValueSet interface {
	VisitAll(fn func(FlagValue))
}

// FlagValue is an interface that users can implement
// to bind different flags to viper.
type FlagValue interface {
	HasChanged() bool
	Name() string
	ValueString() string
	ValueType() string
}

// pflagValueSet is a wrapper around *pflag.ValueSet
// that implements FlagValueSet.
type pflagValueSet struct {
	flags *pflag.FlagSet
}

// VisitAll iterates over all *pflag.Flag inside the *pflag.FlagSet.
func (p pflagValueSet) VisitAll(fn func(flag FlagValue)) {
	p.flags.VisitAll(func(flag *pflag.Flag) {
		fn(pflagValue{flag})
	})
}

// pflagValue is a wrapper aroung *pflag.flag
// that implements FlagValue
type pflagValue struct {
	flag *pflag.Flag
}

// HasChanged returns whether the flag has changes or not.
func (p pflagValue) HasChanged() bool {
	return p.flag.Changed
}

// Name returns the name of the flag.
func (p pflagValue) Name() string {
	return p.flag.Name
}

// ValueString returns the value of the flag as a string.
func (p pflagValue) ValueString() string {
	return p.flag.Value.String()
}

// ValueType returns the type of the flag as a string.
func (p pflagValue) ValueType() string {
	return p.flag.Value.Type()
}
07070100000B79000081A4000000000000000000000001645E367C00000431000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/fs.go   //go:build go1.16 && finder
// +build go1.16,finder

package viper

import (
	"errors"
	"io/fs"
	"path"
)

type finder struct {
	paths      []string
	fileNames  []string
	extensions []string

	withoutExtension bool
}

func (f finder) Find(fsys fs.FS) (string, error) {
	for _, searchPath := range f.paths {
		for _, fileName := range f.fileNames {
			for _, extension := range f.extensions {
				filePath := path.Join(searchPath, fileName+"."+extension)

				ok, err := fileExists(fsys, filePath)
				if err != nil {
					return "", err
				}

				if ok {
					return filePath, nil
				}
			}

			if f.withoutExtension {
				filePath := path.Join(searchPath, fileName)

				ok, err := fileExists(fsys, filePath)
				if err != nil {
					return "", err
				}

				if ok {
					return filePath, nil
				}
			}
		}
	}

	return "", nil
}

func fileExists(fsys fs.FS, filePath string) (bool, error) {
	fileInfo, err := fs.Stat(fsys, filePath)
	if err == nil {
		return !fileInfo.IsDir(), nil
	}

	if errors.Is(err, fs.ErrNotExist) {
		return false, nil
	}

	return false, err
}
   07070100000B7A000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/internal    07070100000B7B000041ED000000000000000000000009645E367C00000000000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/internal/encoding   07070100000B7C000081A4000000000000000000000001645E367C00000652000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/internal/encoding/decoder.go    package encoding

import (
	"sync"
)

// Decoder decodes the contents of b into v.
// It's primarily used for decoding contents of a file into a map[string]interface{}.
type Decoder interface {
	Decode(b []byte, v map[string]interface{}) error
}

const (
	// ErrDecoderNotFound is returned when there is no decoder registered for a format.
	ErrDecoderNotFound = encodingError("decoder not found for this format")

	// ErrDecoderFormatAlreadyRegistered is returned when an decoder is already registered for a format.
	ErrDecoderFormatAlreadyRegistered = encodingError("decoder already registered for this format")
)

// DecoderRegistry can choose an appropriate Decoder based on the provided format.
type DecoderRegistry struct {
	decoders map[string]Decoder

	mu sync.RWMutex
}

// NewDecoderRegistry returns a new, initialized DecoderRegistry.
func NewDecoderRegistry() *DecoderRegistry {
	return &DecoderRegistry{
		decoders: make(map[string]Decoder),
	}
}

// RegisterDecoder registers a Decoder for a format.
// Registering a Decoder for an already existing format is not supported.
func (e *DecoderRegistry) RegisterDecoder(format string, enc Decoder) error {
	e.mu.Lock()
	defer e.mu.Unlock()

	if _, ok := e.decoders[format]; ok {
		return ErrDecoderFormatAlreadyRegistered
	}

	e.decoders[format] = enc

	return nil
}

// Decode calls the underlying Decoder based on the format.
func (e *DecoderRegistry) Decode(format string, b []byte, v map[string]interface{}) error {
	e.mu.RLock()
	decoder, ok := e.decoders[format]
	e.mu.RUnlock()

	if !ok {
		return ErrDecoderNotFound
	}

	return decoder.Decode(b, v)
}
  07070100000B7D000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/internal/encoding/dotenv    07070100000B7E000081A4000000000000000000000001645E367C00000448000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/internal/encoding/dotenv/codec.go   package dotenv

import (
	"bytes"
	"fmt"
	"sort"
	"strings"

	"github.com/subosito/gotenv"
)

const keyDelimiter = "_"

// Codec implements the encoding.Encoder and encoding.Decoder interfaces for encoding data containing environment variables
// (commonly called as dotenv format).
type Codec struct{}

func (Codec) Encode(v map[string]interface{}) ([]byte, error) {
	flattened := map[string]interface{}{}

	flattened = flattenAndMergeMap(flattened, v, "", keyDelimiter)

	keys := make([]string, 0, len(flattened))

	for key := range flattened {
		keys = append(keys, key)
	}

	sort.Strings(keys)

	var buf bytes.Buffer

	for _, key := range keys {
		_, err := buf.WriteString(fmt.Sprintf("%v=%v\n", strings.ToUpper(key), flattened[key]))
		if err != nil {
			return nil, err
		}
	}

	return buf.Bytes(), nil
}

func (Codec) Decode(b []byte, v map[string]interface{}) error {
	var buf bytes.Buffer

	_, err := buf.Write(b)
	if err != nil {
		return err
	}

	env, err := gotenv.StrictParse(&buf)
	if err != nil {
		return err
	}

	for key, value := range env {
		v[key] = value
	}

	return nil
}
07070100000B7F000081A4000000000000000000000001645E367C0000042D000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/internal/encoding/dotenv/map_utils.go   package dotenv

import (
	"strings"

	"github.com/spf13/cast"
)

// flattenAndMergeMap recursively flattens the given map into a new map
// Code is based on the function with the same name in tha main package.
// TODO: move it to a common place
func flattenAndMergeMap(shadow map[string]interface{}, m map[string]interface{}, prefix string, delimiter string) map[string]interface{} {
	if shadow != nil && prefix != "" && shadow[prefix] != nil {
		// prefix is shadowed => nothing more to flatten
		return shadow
	}
	if shadow == nil {
		shadow = make(map[string]interface{})
	}

	var m2 map[string]interface{}
	if prefix != "" {
		prefix += delimiter
	}
	for k, val := range m {
		fullKey := prefix + k
		switch val.(type) {
		case map[string]interface{}:
			m2 = val.(map[string]interface{})
		case map[interface{}]interface{}:
			m2 = cast.ToStringMap(val)
		default:
			// immediate value
			shadow[strings.ToLower(fullKey)] = val
			continue
		}
		// recursively merge to shadow map
		shadow = flattenAndMergeMap(shadow, m2, fullKey, delimiter)
	}
	return shadow
}
   07070100000B80000081A4000000000000000000000001645E367C00000628000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/internal/encoding/encoder.go    package encoding

import (
	"sync"
)

// Encoder encodes the contents of v into a byte representation.
// It's primarily used for encoding a map[string]interface{} into a file format.
type Encoder interface {
	Encode(v map[string]interface{}) ([]byte, error)
}

const (
	// ErrEncoderNotFound is returned when there is no encoder registered for a format.
	ErrEncoderNotFound = encodingError("encoder not found for this format")

	// ErrEncoderFormatAlreadyRegistered is returned when an encoder is already registered for a format.
	ErrEncoderFormatAlreadyRegistered = encodingError("encoder already registered for this format")
)

// EncoderRegistry can choose an appropriate Encoder based on the provided format.
type EncoderRegistry struct {
	encoders map[string]Encoder

	mu sync.RWMutex
}

// NewEncoderRegistry returns a new, initialized EncoderRegistry.
func NewEncoderRegistry() *EncoderRegistry {
	return &EncoderRegistry{
		encoders: make(map[string]Encoder),
	}
}

// RegisterEncoder registers an Encoder for a format.
// Registering a Encoder for an already existing format is not supported.
func (e *EncoderRegistry) RegisterEncoder(format string, enc Encoder) error {
	e.mu.Lock()
	defer e.mu.Unlock()

	if _, ok := e.encoders[format]; ok {
		return ErrEncoderFormatAlreadyRegistered
	}

	e.encoders[format] = enc

	return nil
}

func (e *EncoderRegistry) Encode(format string, v map[string]interface{}) ([]byte, error) {
	e.mu.RLock()
	encoder, ok := e.encoders[format]
	e.mu.RUnlock()

	if !ok {
		return nil, ErrEncoderNotFound
	}

	return encoder.Encode(v)
}
07070100000B81000081A4000000000000000000000001645E367C00000069000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/internal/encoding/error.go  package encoding

type encodingError string

func (e encodingError) Error() string {
	return string(e)
}
   07070100000B82000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/internal/encoding/hcl   07070100000B83000081A4000000000000000000000001645E367C000002FD000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/internal/encoding/hcl/codec.go  package hcl

import (
	"bytes"
	"encoding/json"

	"github.com/hashicorp/hcl"
	"github.com/hashicorp/hcl/hcl/printer"
)

// Codec implements the encoding.Encoder and encoding.Decoder interfaces for HCL encoding.
// TODO: add printer config to the codec?
type Codec struct{}

func (Codec) Encode(v map[string]interface{}) ([]byte, error) {
	b, err := json.Marshal(v)
	if err != nil {
		return nil, err
	}

	// TODO: use printer.Format? Is the trailing newline an issue?

	ast, err := hcl.Parse(string(b))
	if err != nil {
		return nil, err
	}

	var buf bytes.Buffer

	err = printer.Fprint(&buf, ast.Node)
	if err != nil {
		return nil, err
	}

	return buf.Bytes(), nil
}

func (Codec) Decode(b []byte, v map[string]interface{}) error {
	return hcl.Unmarshal(b, &v)
}
   07070100000B84000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/internal/encoding/ini   07070100000B85000081A4000000000000000000000001645E367C000007BA000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/internal/encoding/ini/codec.go  package ini

import (
	"bytes"
	"sort"
	"strings"

	"github.com/spf13/cast"
	"gopkg.in/ini.v1"
)

// LoadOptions contains all customized options used for load data source(s).
// This type is added here for convenience: this way consumers can import a single package called "ini".
type LoadOptions = ini.LoadOptions

// Codec implements the encoding.Encoder and encoding.Decoder interfaces for INI encoding.
type Codec struct {
	KeyDelimiter string
	LoadOptions  LoadOptions
}

func (c Codec) Encode(v map[string]interface{}) ([]byte, error) {
	cfg := ini.Empty()
	ini.PrettyFormat = false

	flattened := map[string]interface{}{}

	flattened = flattenAndMergeMap(flattened, v, "", c.keyDelimiter())

	keys := make([]string, 0, len(flattened))

	for key := range flattened {
		keys = append(keys, key)
	}

	sort.Strings(keys)

	for _, key := range keys {
		sectionName, keyName := "", key

		lastSep := strings.LastIndex(key, ".")
		if lastSep != -1 {
			sectionName = key[:(lastSep)]
			keyName = key[(lastSep + 1):]
		}

		// TODO: is this a good idea?
		if sectionName == "default" {
			sectionName = ""
		}

		cfg.Section(sectionName).Key(keyName).SetValue(cast.ToString(flattened[key]))
	}

	var buf bytes.Buffer

	_, err := cfg.WriteTo(&buf)
	if err != nil {
		return nil, err
	}

	return buf.Bytes(), nil
}

func (c Codec) Decode(b []byte, v map[string]interface{}) error {
	cfg := ini.Empty(c.LoadOptions)

	err := cfg.Append(b)
	if err != nil {
		return err
	}

	sections := cfg.Sections()

	for i := 0; i < len(sections); i++ {
		section := sections[i]
		keys := section.Keys()

		for j := 0; j < len(keys); j++ {
			key := keys[j]
			value := cfg.Section(section.Name()).Key(key.Name()).String()

			deepestMap := deepSearch(v, strings.Split(section.Name(), c.keyDelimiter()))

			// set innermost value
			deepestMap[key.Name()] = value
		}
	}

	return nil
}

func (c Codec) keyDelimiter() string {
	if c.KeyDelimiter == "" {
		return "."
	}

	return c.KeyDelimiter
}
  07070100000B86000081A4000000000000000000000001645E367C000007F7000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/internal/encoding/ini/map_utils.go  package ini

import (
	"strings"

	"github.com/spf13/cast"
)

// THIS CODE IS COPIED HERE: IT SHOULD NOT BE MODIFIED
// AT SOME POINT IT WILL BE MOVED TO A COMMON PLACE
// deepSearch scans deep maps, following the key indexes listed in the
// sequence "path".
// The last value is expected to be another map, and is returned.
//
// In case intermediate keys do not exist, or map to a non-map value,
// a new map is created and inserted, and the search continues from there:
// the initial map "m" may be modified!
func deepSearch(m map[string]interface{}, path []string) map[string]interface{} {
	for _, k := range path {
		m2, ok := m[k]
		if !ok {
			// intermediate key does not exist
			// => create it and continue from there
			m3 := make(map[string]interface{})
			m[k] = m3
			m = m3
			continue
		}
		m3, ok := m2.(map[string]interface{})
		if !ok {
			// intermediate key is a value
			// => replace with a new map
			m3 = make(map[string]interface{})
			m[k] = m3
		}
		// continue search from here
		m = m3
	}
	return m
}

// flattenAndMergeMap recursively flattens the given map into a new map
// Code is based on the function with the same name in tha main package.
// TODO: move it to a common place
func flattenAndMergeMap(shadow map[string]interface{}, m map[string]interface{}, prefix string, delimiter string) map[string]interface{} {
	if shadow != nil && prefix != "" && shadow[prefix] != nil {
		// prefix is shadowed => nothing more to flatten
		return shadow
	}
	if shadow == nil {
		shadow = make(map[string]interface{})
	}

	var m2 map[string]interface{}
	if prefix != "" {
		prefix += delimiter
	}
	for k, val := range m {
		fullKey := prefix + k
		switch val.(type) {
		case map[string]interface{}:
			m2 = val.(map[string]interface{})
		case map[interface{}]interface{}:
			m2 = cast.ToStringMap(val)
		default:
			// immediate value
			shadow[strings.ToLower(fullKey)] = val
			continue
		}
		// recursively merge to shadow map
		shadow = flattenAndMergeMap(shadow, m2, fullKey, delimiter)
	}
	return shadow
}
 07070100000B87000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/internal/encoding/javaproperties    07070100000B88000081A4000000000000000000000001645E367C00000771000000000000000000000000000000000000005C00000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/internal/encoding/javaproperties/codec.go   package javaproperties

import (
	"bytes"
	"sort"
	"strings"

	"github.com/magiconair/properties"
	"github.com/spf13/cast"
)

// Codec implements the encoding.Encoder and encoding.Decoder interfaces for Java properties encoding.
type Codec struct {
	KeyDelimiter string

	// Store read properties on the object so that we can write back in order with comments.
	// This will only be used if the configuration read is a properties file.
	// TODO: drop this feature in v2
	// TODO: make use of the global properties object optional
	Properties *properties.Properties
}

func (c *Codec) Encode(v map[string]interface{}) ([]byte, error) {
	if c.Properties == nil {
		c.Properties = properties.NewProperties()
	}

	flattened := map[string]interface{}{}

	flattened = flattenAndMergeMap(flattened, v, "", c.keyDelimiter())

	keys := make([]string, 0, len(flattened))

	for key := range flattened {
		keys = append(keys, key)
	}

	sort.Strings(keys)

	for _, key := range keys {
		_, _, err := c.Properties.Set(key, cast.ToString(flattened[key]))
		if err != nil {
			return nil, err
		}
	}

	var buf bytes.Buffer

	_, err := c.Properties.WriteComment(&buf, "#", properties.UTF8)
	if err != nil {
		return nil, err
	}

	return buf.Bytes(), nil
}

func (c *Codec) Decode(b []byte, v map[string]interface{}) error {
	var err error
	c.Properties, err = properties.Load(b, properties.UTF8)
	if err != nil {
		return err
	}

	for _, key := range c.Properties.Keys() {
		// ignore existence check: we know it's there
		value, _ := c.Properties.Get(key)

		// recursively build nested maps
		path := strings.Split(key, c.keyDelimiter())
		lastKey := strings.ToLower(path[len(path)-1])
		deepestMap := deepSearch(v, path[0:len(path)-1])

		// set innermost value
		deepestMap[lastKey] = value
	}

	return nil
}

func (c Codec) keyDelimiter() string {
	if c.KeyDelimiter == "" {
		return "."
	}

	return c.KeyDelimiter
}
   07070100000B89000081A4000000000000000000000001645E367C00000802000000000000000000000000000000000000006000000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/internal/encoding/javaproperties/map_utils.go   package javaproperties

import (
	"strings"

	"github.com/spf13/cast"
)

// THIS CODE IS COPIED HERE: IT SHOULD NOT BE MODIFIED
// AT SOME POINT IT WILL BE MOVED TO A COMMON PLACE
// deepSearch scans deep maps, following the key indexes listed in the
// sequence "path".
// The last value is expected to be another map, and is returned.
//
// In case intermediate keys do not exist, or map to a non-map value,
// a new map is created and inserted, and the search continues from there:
// the initial map "m" may be modified!
func deepSearch(m map[string]interface{}, path []string) map[string]interface{} {
	for _, k := range path {
		m2, ok := m[k]
		if !ok {
			// intermediate key does not exist
			// => create it and continue from there
			m3 := make(map[string]interface{})
			m[k] = m3
			m = m3
			continue
		}
		m3, ok := m2.(map[string]interface{})
		if !ok {
			// intermediate key is a value
			// => replace with a new map
			m3 = make(map[string]interface{})
			m[k] = m3
		}
		// continue search from here
		m = m3
	}
	return m
}

// flattenAndMergeMap recursively flattens the given map into a new map
// Code is based on the function with the same name in tha main package.
// TODO: move it to a common place
func flattenAndMergeMap(shadow map[string]interface{}, m map[string]interface{}, prefix string, delimiter string) map[string]interface{} {
	if shadow != nil && prefix != "" && shadow[prefix] != nil {
		// prefix is shadowed => nothing more to flatten
		return shadow
	}
	if shadow == nil {
		shadow = make(map[string]interface{})
	}

	var m2 map[string]interface{}
	if prefix != "" {
		prefix += delimiter
	}
	for k, val := range m {
		fullKey := prefix + k
		switch val.(type) {
		case map[string]interface{}:
			m2 = val.(map[string]interface{})
		case map[interface{}]interface{}:
			m2 = cast.ToStringMap(val)
		default:
			// immediate value
			shadow[strings.ToLower(fullKey)] = val
			continue
		}
		// recursively merge to shadow map
		shadow = flattenAndMergeMap(shadow, m2, fullKey, delimiter)
	}
	return shadow
}
  07070100000B8A000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/internal/encoding/json  07070100000B8B000081A4000000000000000000000001645E367C000001A3000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/internal/encoding/json/codec.go package json

import (
	"encoding/json"
)

// Codec implements the encoding.Encoder and encoding.Decoder interfaces for JSON encoding.
type Codec struct{}

func (Codec) Encode(v map[string]interface{}) ([]byte, error) {
	// TODO: expose prefix and indent in the Codec as setting?
	return json.MarshalIndent(v, "", "  ")
}

func (Codec) Decode(b []byte, v map[string]interface{}) error {
	return json.Unmarshal(b, &v)
}
 07070100000B8C000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/internal/encoding/toml  07070100000B8D000081A4000000000000000000000001645E367C00000169000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/internal/encoding/toml/codec.go package toml

import (
	"github.com/pelletier/go-toml/v2"
)

// Codec implements the encoding.Encoder and encoding.Decoder interfaces for TOML encoding.
type Codec struct{}

func (Codec) Encode(v map[string]interface{}) ([]byte, error) {
	return toml.Marshal(v)
}

func (Codec) Decode(b []byte, v map[string]interface{}) error {
	return toml.Unmarshal(b, &v)
}
   07070100000B8E000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/internal/encoding/yaml  07070100000B8F000081A4000000000000000000000001645E367C00000155000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/internal/encoding/yaml/codec.go package yaml

import "gopkg.in/yaml.v3"

// Codec implements the encoding.Encoder and encoding.Decoder interfaces for YAML encoding.
type Codec struct{}

func (Codec) Encode(v map[string]interface{}) ([]byte, error) {
	return yaml.Marshal(v)
}

func (Codec) Decode(b []byte, v map[string]interface{}) error {
	return yaml.Unmarshal(b, &v)
}
   07070100000B90000081A4000000000000000000000001645E367C000007EE000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/logger.go   package viper

import (
	"fmt"

	jww "github.com/spf13/jwalterweatherman"
)

// Logger is a unified interface for various logging use cases and practices, including:
//   - leveled logging
//   - structured logging
type Logger interface {
	// Trace logs a Trace event.
	//
	// Even more fine-grained information than Debug events.
	// Loggers not supporting this level should fall back to Debug.
	Trace(msg string, keyvals ...interface{})

	// Debug logs a Debug event.
	//
	// A verbose series of information events.
	// They are useful when debugging the system.
	Debug(msg string, keyvals ...interface{})

	// Info logs an Info event.
	//
	// General information about what's happening inside the system.
	Info(msg string, keyvals ...interface{})

	// Warn logs a Warn(ing) event.
	//
	// Non-critical events that should be looked at.
	Warn(msg string, keyvals ...interface{})

	// Error logs an Error event.
	//
	// Critical events that require immediate attention.
	// Loggers commonly provide Fatal and Panic levels above Error level,
	// but exiting and panicing is out of scope for a logging library.
	Error(msg string, keyvals ...interface{})
}

type jwwLogger struct{}

func (jwwLogger) Trace(msg string, keyvals ...interface{}) {
	jww.TRACE.Printf(jwwLogMessage(msg, keyvals...))
}

func (jwwLogger) Debug(msg string, keyvals ...interface{}) {
	jww.DEBUG.Printf(jwwLogMessage(msg, keyvals...))
}

func (jwwLogger) Info(msg string, keyvals ...interface{}) {
	jww.INFO.Printf(jwwLogMessage(msg, keyvals...))
}

func (jwwLogger) Warn(msg string, keyvals ...interface{}) {
	jww.WARN.Printf(jwwLogMessage(msg, keyvals...))
}

func (jwwLogger) Error(msg string, keyvals ...interface{}) {
	jww.ERROR.Printf(jwwLogMessage(msg, keyvals...))
}

func jwwLogMessage(msg string, keyvals ...interface{}) string {
	out := msg

	if len(keyvals) > 0 && len(keyvals)%2 == 1 {
		keyvals = append(keyvals, nil)
	}

	for i := 0; i <= len(keyvals)-2; i += 2 {
		out = fmt.Sprintf("%s %v=%v", out, keyvals[i], keyvals[i+1])
	}

	return out
}
  07070100000B91000081A4000000000000000000000001645E367C0000149D000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/util.go // Copyright © 2014 Steve Francia <spf@spf13.com>.
//
// Use of this source code is governed by an MIT-style
// license that can be found in the LICENSE file.

// Viper is a application configuration system.
// It believes that applications can be configured a variety of ways
// via flags, ENVIRONMENT variables, configuration files retrieved
// from the file system, or a remote key/value store.

package viper

import (
	"fmt"
	"os"
	"path/filepath"
	"runtime"
	"strings"
	"unicode"

	"github.com/spf13/cast"
)

// ConfigParseError denotes failing to parse configuration file.
type ConfigParseError struct {
	err error
}

// Error returns the formatted configuration error.
func (pe ConfigParseError) Error() string {
	return fmt.Sprintf("While parsing config: %s", pe.err.Error())
}

// toCaseInsensitiveValue checks if the value is a  map;
// if so, create a copy and lower-case the keys recursively.
func toCaseInsensitiveValue(value interface{}) interface{} {
	switch v := value.(type) {
	case map[interface{}]interface{}:
		value = copyAndInsensitiviseMap(cast.ToStringMap(v))
	case map[string]interface{}:
		value = copyAndInsensitiviseMap(v)
	}

	return value
}

// copyAndInsensitiviseMap behaves like insensitiviseMap, but creates a copy of
// any map it makes case insensitive.
func copyAndInsensitiviseMap(m map[string]interface{}) map[string]interface{} {
	nm := make(map[string]interface{})

	for key, val := range m {
		lkey := strings.ToLower(key)
		switch v := val.(type) {
		case map[interface{}]interface{}:
			nm[lkey] = copyAndInsensitiviseMap(cast.ToStringMap(v))
		case map[string]interface{}:
			nm[lkey] = copyAndInsensitiviseMap(v)
		default:
			nm[lkey] = v
		}
	}

	return nm
}

func insensitiviseVal(val interface{}) interface{} {
	switch val.(type) {
	case map[interface{}]interface{}:
		// nested map: cast and recursively insensitivise
		val = cast.ToStringMap(val)
		insensitiviseMap(val.(map[string]interface{}))
	case map[string]interface{}:
		// nested map: recursively insensitivise
		insensitiviseMap(val.(map[string]interface{}))
	case []interface{}:
		// nested array: recursively insensitivise
		insensitiveArray(val.([]interface{}))
	}
	return val
}

func insensitiviseMap(m map[string]interface{}) {
	for key, val := range m {
		val = insensitiviseVal(val)
		lower := strings.ToLower(key)
		if key != lower {
			// remove old key (not lower-cased)
			delete(m, key)
		}
		// update map
		m[lower] = val
	}
}

func insensitiveArray(a []interface{}) {
	for i, val := range a {
		a[i] = insensitiviseVal(val)
	}
}

func absPathify(logger Logger, inPath string) string {
	logger.Info("trying to resolve absolute path", "path", inPath)

	if inPath == "$HOME" || strings.HasPrefix(inPath, "$HOME"+string(os.PathSeparator)) {
		inPath = userHomeDir() + inPath[5:]
	}

	inPath = os.ExpandEnv(inPath)

	if filepath.IsAbs(inPath) {
		return filepath.Clean(inPath)
	}

	p, err := filepath.Abs(inPath)
	if err == nil {
		return filepath.Clean(p)
	}

	logger.Error(fmt.Errorf("could not discover absolute path: %w", err).Error())

	return ""
}

func stringInSlice(a string, list []string) bool {
	for _, b := range list {
		if b == a {
			return true
		}
	}
	return false
}

func userHomeDir() string {
	if runtime.GOOS == "windows" {
		home := os.Getenv("HOMEDRIVE") + os.Getenv("HOMEPATH")
		if home == "" {
			home = os.Getenv("USERPROFILE")
		}
		return home
	}
	return os.Getenv("HOME")
}

func safeMul(a, b uint) uint {
	c := a * b
	if a > 1 && b > 1 && c/b != a {
		return 0
	}
	return c
}

// parseSizeInBytes converts strings like 1GB or 12 mb into an unsigned integer number of bytes
func parseSizeInBytes(sizeStr string) uint {
	sizeStr = strings.TrimSpace(sizeStr)
	lastChar := len(sizeStr) - 1
	multiplier := uint(1)

	if lastChar > 0 {
		if sizeStr[lastChar] == 'b' || sizeStr[lastChar] == 'B' {
			if lastChar > 1 {
				switch unicode.ToLower(rune(sizeStr[lastChar-1])) {
				case 'k':
					multiplier = 1 << 10
					sizeStr = strings.TrimSpace(sizeStr[:lastChar-1])
				case 'm':
					multiplier = 1 << 20
					sizeStr = strings.TrimSpace(sizeStr[:lastChar-1])
				case 'g':
					multiplier = 1 << 30
					sizeStr = strings.TrimSpace(sizeStr[:lastChar-1])
				default:
					multiplier = 1
					sizeStr = strings.TrimSpace(sizeStr[:lastChar])
				}
			}
		}
	}

	size := cast.ToInt(sizeStr)
	if size < 0 {
		size = 0
	}

	return safeMul(uint(size), multiplier)
}

// deepSearch scans deep maps, following the key indexes listed in the
// sequence "path".
// The last value is expected to be another map, and is returned.
//
// In case intermediate keys do not exist, or map to a non-map value,
// a new map is created and inserted, and the search continues from there:
// the initial map "m" may be modified!
func deepSearch(m map[string]interface{}, path []string) map[string]interface{} {
	for _, k := range path {
		m2, ok := m[k]
		if !ok {
			// intermediate key does not exist
			// => create it and continue from there
			m3 := make(map[string]interface{})
			m[k] = m3
			m = m3
			continue
		}
		m3, ok := m2.(map[string]interface{})
		if !ok {
			// intermediate key is a value
			// => replace with a new map
			m3 = make(map[string]interface{})
			m[k] = m3
		}
		// continue search from here
		m = m3
	}
	return m
}
   07070100000B92000081A4000000000000000000000001645E367C0000F126000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/viper.go    // Copyright © 2014 Steve Francia <spf@spf13.com>.
//
// Use of this source code is governed by an MIT-style
// license that can be found in the LICENSE file.

// Viper is an application configuration system.
// It believes that applications can be configured a variety of ways
// via flags, ENVIRONMENT variables, configuration files retrieved
// from the file system, or a remote key/value store.

// Each item takes precedence over the item below it:

// overrides
// flag
// env
// config
// key/value store
// default

package viper

import (
	"bytes"
	"encoding/csv"
	"errors"
	"fmt"
	"io"
	"log"
	"os"
	"path/filepath"
	"reflect"
	"strconv"
	"strings"
	"sync"
	"time"

	"github.com/fsnotify/fsnotify"
	"github.com/mitchellh/mapstructure"
	"github.com/spf13/afero"
	"github.com/spf13/cast"
	"github.com/spf13/pflag"

	"github.com/spf13/viper/internal/encoding"
	"github.com/spf13/viper/internal/encoding/dotenv"
	"github.com/spf13/viper/internal/encoding/hcl"
	"github.com/spf13/viper/internal/encoding/ini"
	"github.com/spf13/viper/internal/encoding/javaproperties"
	"github.com/spf13/viper/internal/encoding/json"
	"github.com/spf13/viper/internal/encoding/toml"
	"github.com/spf13/viper/internal/encoding/yaml"
)

// ConfigMarshalError happens when failing to marshal the configuration.
type ConfigMarshalError struct {
	err error
}

// Error returns the formatted configuration error.
func (e ConfigMarshalError) Error() string {
	return fmt.Sprintf("While marshaling config: %s", e.err.Error())
}

var v *Viper

type RemoteResponse struct {
	Value []byte
	Error error
}

func init() {
	v = New()
}

type remoteConfigFactory interface {
	Get(rp RemoteProvider) (io.Reader, error)
	Watch(rp RemoteProvider) (io.Reader, error)
	WatchChannel(rp RemoteProvider) (<-chan *RemoteResponse, chan bool)
}

// RemoteConfig is optional, see the remote package
var RemoteConfig remoteConfigFactory

// UnsupportedConfigError denotes encountering an unsupported
// configuration filetype.
type UnsupportedConfigError string

// Error returns the formatted configuration error.
func (str UnsupportedConfigError) Error() string {
	return fmt.Sprintf("Unsupported Config Type %q", string(str))
}

// UnsupportedRemoteProviderError denotes encountering an unsupported remote
// provider. Currently only etcd and Consul are supported.
type UnsupportedRemoteProviderError string

// Error returns the formatted remote provider error.
func (str UnsupportedRemoteProviderError) Error() string {
	return fmt.Sprintf("Unsupported Remote Provider Type %q", string(str))
}

// RemoteConfigError denotes encountering an error while trying to
// pull the configuration from the remote provider.
type RemoteConfigError string

// Error returns the formatted remote provider error
func (rce RemoteConfigError) Error() string {
	return fmt.Sprintf("Remote Configurations Error: %s", string(rce))
}

// ConfigFileNotFoundError denotes failing to find configuration file.
type ConfigFileNotFoundError struct {
	name, locations string
}

// Error returns the formatted configuration error.
func (fnfe ConfigFileNotFoundError) Error() string {
	return fmt.Sprintf("Config File %q Not Found in %q", fnfe.name, fnfe.locations)
}

// ConfigFileAlreadyExistsError denotes failure to write new configuration file.
type ConfigFileAlreadyExistsError string

// Error returns the formatted error when configuration already exists.
func (faee ConfigFileAlreadyExistsError) Error() string {
	return fmt.Sprintf("Config File %q Already Exists", string(faee))
}

// A DecoderConfigOption can be passed to viper.Unmarshal to configure
// mapstructure.DecoderConfig options
type DecoderConfigOption func(*mapstructure.DecoderConfig)

// DecodeHook returns a DecoderConfigOption which overrides the default
// DecoderConfig.DecodeHook value, the default is:
//
//	 mapstructure.ComposeDecodeHookFunc(
//			mapstructure.StringToTimeDurationHookFunc(),
//			mapstructure.StringToSliceHookFunc(","),
//		)
func DecodeHook(hook mapstructure.DecodeHookFunc) DecoderConfigOption {
	return func(c *mapstructure.DecoderConfig) {
		c.DecodeHook = hook
	}
}

// Viper is a prioritized configuration registry. It
// maintains a set of configuration sources, fetches
// values to populate those, and provides them according
// to the source's priority.
// The priority of the sources is the following:
// 1. overrides
// 2. flags
// 3. env. variables
// 4. config file
// 5. key/value store
// 6. defaults
//
// For example, if values from the following sources were loaded:
//
//	Defaults : {
//		"secret": "",
//		"user": "default",
//		"endpoint": "https://localhost"
//	}
//	Config : {
//		"user": "root"
//		"secret": "defaultsecret"
//	}
//	Env : {
//		"secret": "somesecretkey"
//	}
//
// The resulting config will have the following values:
//
//	{
//		"secret": "somesecretkey",
//		"user": "root",
//		"endpoint": "https://localhost"
//	}
//
// Note: Vipers are not safe for concurrent Get() and Set() operations.
type Viper struct {
	// Delimiter that separates a list of keys
	// used to access a nested value in one go
	keyDelim string

	// A set of paths to look for the config file in
	configPaths []string

	// The filesystem to read config from.
	fs afero.Fs

	// A set of remote providers to search for the configuration
	remoteProviders []*defaultRemoteProvider

	// Name of file to look for inside the path
	configName        string
	configFile        string
	configType        string
	configPermissions os.FileMode
	envPrefix         string

	// Specific commands for ini parsing
	iniLoadOptions ini.LoadOptions

	automaticEnvApplied bool
	envKeyReplacer      StringReplacer
	allowEmptyEnv       bool

	config         map[string]interface{}
	override       map[string]interface{}
	defaults       map[string]interface{}
	kvstore        map[string]interface{}
	pflags         map[string]FlagValue
	env            map[string][]string
	aliases        map[string]string
	typeByDefValue bool

	onConfigChange func(fsnotify.Event)

	logger Logger

	// TODO: should probably be protected with a mutex
	encoderRegistry *encoding.EncoderRegistry
	decoderRegistry *encoding.DecoderRegistry
}

// New returns an initialized Viper instance.
func New() *Viper {
	v := new(Viper)
	v.keyDelim = "."
	v.configName = "config"
	v.configPermissions = os.FileMode(0o644)
	v.fs = afero.NewOsFs()
	v.config = make(map[string]interface{})
	v.override = make(map[string]interface{})
	v.defaults = make(map[string]interface{})
	v.kvstore = make(map[string]interface{})
	v.pflags = make(map[string]FlagValue)
	v.env = make(map[string][]string)
	v.aliases = make(map[string]string)
	v.typeByDefValue = false
	v.logger = jwwLogger{}

	v.resetEncoding()

	return v
}

// Option configures Viper using the functional options paradigm popularized by Rob Pike and Dave Cheney.
// If you're unfamiliar with this style,
// see https://commandcenter.blogspot.com/2014/01/self-referential-functions-and-design.html and
// https://dave.cheney.net/2014/10/17/functional-options-for-friendly-apis.
type Option interface {
	apply(v *Viper)
}

type optionFunc func(v *Viper)

func (fn optionFunc) apply(v *Viper) {
	fn(v)
}

// KeyDelimiter sets the delimiter used for determining key parts.
// By default it's value is ".".
func KeyDelimiter(d string) Option {
	return optionFunc(func(v *Viper) {
		v.keyDelim = d
	})
}

// StringReplacer applies a set of replacements to a string.
type StringReplacer interface {
	// Replace returns a copy of s with all replacements performed.
	Replace(s string) string
}

// EnvKeyReplacer sets a replacer used for mapping environment variables to internal keys.
func EnvKeyReplacer(r StringReplacer) Option {
	return optionFunc(func(v *Viper) {
		v.envKeyReplacer = r
	})
}

// NewWithOptions creates a new Viper instance.
func NewWithOptions(opts ...Option) *Viper {
	v := New()

	for _, opt := range opts {
		opt.apply(v)
	}

	v.resetEncoding()

	return v
}

// Reset is intended for testing, will reset all to default settings.
// In the public interface for the viper package so applications
// can use it in their testing as well.
func Reset() {
	v = New()
	SupportedExts = []string{"json", "toml", "yaml", "yml", "properties", "props", "prop", "hcl", "tfvars", "dotenv", "env", "ini"}
	SupportedRemoteProviders = []string{"etcd", "etcd3", "consul", "firestore"}
}

// TODO: make this lazy initialization instead
func (v *Viper) resetEncoding() {
	encoderRegistry := encoding.NewEncoderRegistry()
	decoderRegistry := encoding.NewDecoderRegistry()

	{
		codec := yaml.Codec{}

		encoderRegistry.RegisterEncoder("yaml", codec)
		decoderRegistry.RegisterDecoder("yaml", codec)

		encoderRegistry.RegisterEncoder("yml", codec)
		decoderRegistry.RegisterDecoder("yml", codec)
	}

	{
		codec := json.Codec{}

		encoderRegistry.RegisterEncoder("json", codec)
		decoderRegistry.RegisterDecoder("json", codec)
	}

	{
		codec := toml.Codec{}

		encoderRegistry.RegisterEncoder("toml", codec)
		decoderRegistry.RegisterDecoder("toml", codec)
	}

	{
		codec := hcl.Codec{}

		encoderRegistry.RegisterEncoder("hcl", codec)
		decoderRegistry.RegisterDecoder("hcl", codec)

		encoderRegistry.RegisterEncoder("tfvars", codec)
		decoderRegistry.RegisterDecoder("tfvars", codec)
	}

	{
		codec := ini.Codec{
			KeyDelimiter: v.keyDelim,
			LoadOptions:  v.iniLoadOptions,
		}

		encoderRegistry.RegisterEncoder("ini", codec)
		decoderRegistry.RegisterDecoder("ini", codec)
	}

	{
		codec := &javaproperties.Codec{
			KeyDelimiter: v.keyDelim,
		}

		encoderRegistry.RegisterEncoder("properties", codec)
		decoderRegistry.RegisterDecoder("properties", codec)

		encoderRegistry.RegisterEncoder("props", codec)
		decoderRegistry.RegisterDecoder("props", codec)

		encoderRegistry.RegisterEncoder("prop", codec)
		decoderRegistry.RegisterDecoder("prop", codec)
	}

	{
		codec := &dotenv.Codec{}

		encoderRegistry.RegisterEncoder("dotenv", codec)
		decoderRegistry.RegisterDecoder("dotenv", codec)

		encoderRegistry.RegisterEncoder("env", codec)
		decoderRegistry.RegisterDecoder("env", codec)
	}

	v.encoderRegistry = encoderRegistry
	v.decoderRegistry = decoderRegistry
}

type defaultRemoteProvider struct {
	provider      string
	endpoint      string
	path          string
	secretKeyring string
}

func (rp defaultRemoteProvider) Provider() string {
	return rp.provider
}

func (rp defaultRemoteProvider) Endpoint() string {
	return rp.endpoint
}

func (rp defaultRemoteProvider) Path() string {
	return rp.path
}

func (rp defaultRemoteProvider) SecretKeyring() string {
	return rp.secretKeyring
}

// RemoteProvider stores the configuration necessary
// to connect to a remote key/value store.
// Optional secretKeyring to unencrypt encrypted values
// can be provided.
type RemoteProvider interface {
	Provider() string
	Endpoint() string
	Path() string
	SecretKeyring() string
}

// SupportedExts are universally supported extensions.
var SupportedExts = []string{"json", "toml", "yaml", "yml", "properties", "props", "prop", "hcl", "tfvars", "dotenv", "env", "ini"}

// SupportedRemoteProviders are universally supported remote providers.
var SupportedRemoteProviders = []string{"etcd", "etcd3", "consul", "firestore"}

// OnConfigChange sets the event handler that is called when a config file changes.
func OnConfigChange(run func(in fsnotify.Event)) { v.OnConfigChange(run) }

// OnConfigChange sets the event handler that is called when a config file changes.
func (v *Viper) OnConfigChange(run func(in fsnotify.Event)) {
	v.onConfigChange = run
}

// WatchConfig starts watching a config file for changes.
func WatchConfig() { v.WatchConfig() }

// WatchConfig starts watching a config file for changes.
func (v *Viper) WatchConfig() {
	initWG := sync.WaitGroup{}
	initWG.Add(1)
	go func() {
		watcher, err := newWatcher()
		if err != nil {
			log.Fatal(err)
		}
		defer watcher.Close()
		// we have to watch the entire directory to pick up renames/atomic saves in a cross-platform way
		filename, err := v.getConfigFile()
		if err != nil {
			log.Printf("error: %v\n", err)
			initWG.Done()
			return
		}

		configFile := filepath.Clean(filename)
		configDir, _ := filepath.Split(configFile)
		realConfigFile, _ := filepath.EvalSymlinks(filename)

		eventsWG := sync.WaitGroup{}
		eventsWG.Add(1)
		go func() {
			for {
				select {
				case event, ok := <-watcher.Events:
					if !ok { // 'Events' channel is closed
						eventsWG.Done()
						return
					}
					currentConfigFile, _ := filepath.EvalSymlinks(filename)
					// we only care about the config file with the following cases:
					// 1 - if the config file was modified or created
					// 2 - if the real path to the config file changed (eg: k8s ConfigMap replacement)
					if (filepath.Clean(event.Name) == configFile &&
						(event.Has(fsnotify.Write) || event.Has(fsnotify.Create))) ||
						(currentConfigFile != "" && currentConfigFile != realConfigFile) {
						realConfigFile = currentConfigFile
						err := v.ReadInConfig()
						if err != nil {
							log.Printf("error reading config file: %v\n", err)
						}
						if v.onConfigChange != nil {
							v.onConfigChange(event)
						}
					} else if filepath.Clean(event.Name) == configFile && event.Has(fsnotify.Remove) {
						eventsWG.Done()
						return
					}

				case err, ok := <-watcher.Errors:
					if ok { // 'Errors' channel is not closed
						log.Printf("watcher error: %v\n", err)
					}
					eventsWG.Done()
					return
				}
			}
		}()
		watcher.Add(configDir)
		initWG.Done()   // done initializing the watch in this go routine, so the parent routine can move on...
		eventsWG.Wait() // now, wait for event loop to end in this go-routine...
	}()
	initWG.Wait() // make sure that the go routine above fully ended before returning
}

// SetConfigFile explicitly defines the path, name and extension of the config file.
// Viper will use this and not check any of the config paths.
func SetConfigFile(in string) { v.SetConfigFile(in) }

func (v *Viper) SetConfigFile(in string) {
	if in != "" {
		v.configFile = in
	}
}

// SetEnvPrefix defines a prefix that ENVIRONMENT variables will use.
// E.g. if your prefix is "spf", the env registry will look for env
// variables that start with "SPF_".
func SetEnvPrefix(in string) { v.SetEnvPrefix(in) }

func (v *Viper) SetEnvPrefix(in string) {
	if in != "" {
		v.envPrefix = in
	}
}

func (v *Viper) mergeWithEnvPrefix(in string) string {
	if v.envPrefix != "" {
		return strings.ToUpper(v.envPrefix + "_" + in)
	}

	return strings.ToUpper(in)
}

// AllowEmptyEnv tells Viper to consider set,
// but empty environment variables as valid values instead of falling back.
// For backward compatibility reasons this is false by default.
func AllowEmptyEnv(allowEmptyEnv bool) { v.AllowEmptyEnv(allowEmptyEnv) }

func (v *Viper) AllowEmptyEnv(allowEmptyEnv bool) {
	v.allowEmptyEnv = allowEmptyEnv
}

// TODO: should getEnv logic be moved into find(). Can generalize the use of
// rewriting keys many things, Ex: Get('someKey') -> some_key
// (camel case to snake case for JSON keys perhaps)

// getEnv is a wrapper around os.Getenv which replaces characters in the original
// key. This allows env vars which have different keys than the config object
// keys.
func (v *Viper) getEnv(key string) (string, bool) {
	if v.envKeyReplacer != nil {
		key = v.envKeyReplacer.Replace(key)
	}

	val, ok := os.LookupEnv(key)

	return val, ok && (v.allowEmptyEnv || val != "")
}

// ConfigFileUsed returns the file used to populate the config registry.
func ConfigFileUsed() string            { return v.ConfigFileUsed() }
func (v *Viper) ConfigFileUsed() string { return v.configFile }

// AddConfigPath adds a path for Viper to search for the config file in.
// Can be called multiple times to define multiple search paths.
func AddConfigPath(in string) { v.AddConfigPath(in) }

func (v *Viper) AddConfigPath(in string) {
	if in != "" {
		absin := absPathify(v.logger, in)

		v.logger.Info("adding path to search paths", "path", absin)
		if !stringInSlice(absin, v.configPaths) {
			v.configPaths = append(v.configPaths, absin)
		}
	}
}

// AddRemoteProvider adds a remote configuration source.
// Remote Providers are searched in the order they are added.
// provider is a string value: "etcd", "etcd3", "consul" or "firestore" are currently supported.
// endpoint is the url.  etcd requires http://ip:port  consul requires ip:port
// path is the path in the k/v store to retrieve configuration
// To retrieve a config file called myapp.json from /configs/myapp.json
// you should set path to /configs and set config name (SetConfigName()) to
// "myapp"
func AddRemoteProvider(provider, endpoint, path string) error {
	return v.AddRemoteProvider(provider, endpoint, path)
}

func (v *Viper) AddRemoteProvider(provider, endpoint, path string) error {
	if !stringInSlice(provider, SupportedRemoteProviders) {
		return UnsupportedRemoteProviderError(provider)
	}
	if provider != "" && endpoint != "" {
		v.logger.Info("adding remote provider", "provider", provider, "endpoint", endpoint)

		rp := &defaultRemoteProvider{
			endpoint: endpoint,
			provider: provider,
			path:     path,
		}
		if !v.providerPathExists(rp) {
			v.remoteProviders = append(v.remoteProviders, rp)
		}
	}
	return nil
}

// AddSecureRemoteProvider adds a remote configuration source.
// Secure Remote Providers are searched in the order they are added.
// provider is a string value: "etcd", "etcd3", "consul" or "firestore" are currently supported.
// endpoint is the url.  etcd requires http://ip:port  consul requires ip:port
// secretkeyring is the filepath to your openpgp secret keyring.  e.g. /etc/secrets/myring.gpg
// path is the path in the k/v store to retrieve configuration
// To retrieve a config file called myapp.json from /configs/myapp.json
// you should set path to /configs and set config name (SetConfigName()) to
// "myapp"
// Secure Remote Providers are implemented with github.com/bketelsen/crypt
func AddSecureRemoteProvider(provider, endpoint, path, secretkeyring string) error {
	return v.AddSecureRemoteProvider(provider, endpoint, path, secretkeyring)
}

func (v *Viper) AddSecureRemoteProvider(provider, endpoint, path, secretkeyring string) error {
	if !stringInSlice(provider, SupportedRemoteProviders) {
		return UnsupportedRemoteProviderError(provider)
	}
	if provider != "" && endpoint != "" {
		v.logger.Info("adding remote provider", "provider", provider, "endpoint", endpoint)

		rp := &defaultRemoteProvider{
			endpoint:      endpoint,
			provider:      provider,
			path:          path,
			secretKeyring: secretkeyring,
		}
		if !v.providerPathExists(rp) {
			v.remoteProviders = append(v.remoteProviders, rp)
		}
	}
	return nil
}

func (v *Viper) providerPathExists(p *defaultRemoteProvider) bool {
	for _, y := range v.remoteProviders {
		if reflect.DeepEqual(y, p) {
			return true
		}
	}
	return false
}

// searchMap recursively searches for a value for path in source map.
// Returns nil if not found.
// Note: This assumes that the path entries and map keys are lower cased.
func (v *Viper) searchMap(source map[string]interface{}, path []string) interface{} {
	if len(path) == 0 {
		return source
	}

	next, ok := source[path[0]]
	if ok {
		// Fast path
		if len(path) == 1 {
			return next
		}

		// Nested case
		switch next.(type) {
		case map[interface{}]interface{}:
			return v.searchMap(cast.ToStringMap(next), path[1:])
		case map[string]interface{}:
			// Type assertion is safe here since it is only reached
			// if the type of `next` is the same as the type being asserted
			return v.searchMap(next.(map[string]interface{}), path[1:])
		default:
			// got a value but nested key expected, return "nil" for not found
			return nil
		}
	}
	return nil
}

// searchIndexableWithPathPrefixes recursively searches for a value for path in source map/slice.
//
// While searchMap() considers each path element as a single map key or slice index, this
// function searches for, and prioritizes, merged path elements.
// e.g., if in the source, "foo" is defined with a sub-key "bar", and "foo.bar"
// is also defined, this latter value is returned for path ["foo", "bar"].
//
// This should be useful only at config level (other maps may not contain dots
// in their keys).
//
// Note: This assumes that the path entries and map keys are lower cased.
func (v *Viper) searchIndexableWithPathPrefixes(source interface{}, path []string) interface{} {
	if len(path) == 0 {
		return source
	}

	// search for path prefixes, starting from the longest one
	for i := len(path); i > 0; i-- {
		prefixKey := strings.ToLower(strings.Join(path[0:i], v.keyDelim))

		var val interface{}
		switch sourceIndexable := source.(type) {
		case []interface{}:
			val = v.searchSliceWithPathPrefixes(sourceIndexable, prefixKey, i, path)
		case map[string]interface{}:
			val = v.searchMapWithPathPrefixes(sourceIndexable, prefixKey, i, path)
		}
		if val != nil {
			return val
		}
	}

	// not found
	return nil
}

// searchSliceWithPathPrefixes searches for a value for path in sourceSlice
//
// This function is part of the searchIndexableWithPathPrefixes recurring search and
// should not be called directly from functions other than searchIndexableWithPathPrefixes.
func (v *Viper) searchSliceWithPathPrefixes(
	sourceSlice []interface{},
	prefixKey string,
	pathIndex int,
	path []string,
) interface{} {
	// if the prefixKey is not a number or it is out of bounds of the slice
	index, err := strconv.Atoi(prefixKey)
	if err != nil || len(sourceSlice) <= index {
		return nil
	}

	next := sourceSlice[index]

	// Fast path
	if pathIndex == len(path) {
		return next
	}

	switch n := next.(type) {
	case map[interface{}]interface{}:
		return v.searchIndexableWithPathPrefixes(cast.ToStringMap(n), path[pathIndex:])
	case map[string]interface{}, []interface{}:
		return v.searchIndexableWithPathPrefixes(n, path[pathIndex:])
	default:
		// got a value but nested key expected, do nothing and look for next prefix
	}

	// not found
	return nil
}

// searchMapWithPathPrefixes searches for a value for path in sourceMap
//
// This function is part of the searchIndexableWithPathPrefixes recurring search and
// should not be called directly from functions other than searchIndexableWithPathPrefixes.
func (v *Viper) searchMapWithPathPrefixes(
	sourceMap map[string]interface{},
	prefixKey string,
	pathIndex int,
	path []string,
) interface{} {
	next, ok := sourceMap[prefixKey]
	if !ok {
		return nil
	}

	// Fast path
	if pathIndex == len(path) {
		return next
	}

	// Nested case
	switch n := next.(type) {
	case map[interface{}]interface{}:
		return v.searchIndexableWithPathPrefixes(cast.ToStringMap(n), path[pathIndex:])
	case map[string]interface{}, []interface{}:
		return v.searchIndexableWithPathPrefixes(n, path[pathIndex:])
	default:
		// got a value but nested key expected, do nothing and look for next prefix
	}

	// not found
	return nil
}

// isPathShadowedInDeepMap makes sure the given path is not shadowed somewhere
// on its path in the map.
// e.g., if "foo.bar" has a value in the given map, it “shadows”
//
//	"foo.bar.baz" in a lower-priority map
func (v *Viper) isPathShadowedInDeepMap(path []string, m map[string]interface{}) string {
	var parentVal interface{}
	for i := 1; i < len(path); i++ {
		parentVal = v.searchMap(m, path[0:i])
		if parentVal == nil {
			// not found, no need to add more path elements
			return ""
		}
		switch parentVal.(type) {
		case map[interface{}]interface{}:
			continue
		case map[string]interface{}:
			continue
		default:
			// parentVal is a regular value which shadows "path"
			return strings.Join(path[0:i], v.keyDelim)
		}
	}
	return ""
}

// isPathShadowedInFlatMap makes sure the given path is not shadowed somewhere
// in a sub-path of the map.
// e.g., if "foo.bar" has a value in the given map, it “shadows”
//
//	"foo.bar.baz" in a lower-priority map
func (v *Viper) isPathShadowedInFlatMap(path []string, mi interface{}) string {
	// unify input map
	var m map[string]interface{}
	switch mi.(type) {
	case map[string]string, map[string]FlagValue:
		m = cast.ToStringMap(mi)
	default:
		return ""
	}

	// scan paths
	var parentKey string
	for i := 1; i < len(path); i++ {
		parentKey = strings.Join(path[0:i], v.keyDelim)
		if _, ok := m[parentKey]; ok {
			return parentKey
		}
	}
	return ""
}

// isPathShadowedInAutoEnv makes sure the given path is not shadowed somewhere
// in the environment, when automatic env is on.
// e.g., if "foo.bar" has a value in the environment, it “shadows”
//
//	"foo.bar.baz" in a lower-priority map
func (v *Viper) isPathShadowedInAutoEnv(path []string) string {
	var parentKey string
	for i := 1; i < len(path); i++ {
		parentKey = strings.Join(path[0:i], v.keyDelim)
		if _, ok := v.getEnv(v.mergeWithEnvPrefix(parentKey)); ok {
			return parentKey
		}
	}
	return ""
}

// SetTypeByDefaultValue enables or disables the inference of a key value's
// type when the Get function is used based upon a key's default value as
// opposed to the value returned based on the normal fetch logic.
//
// For example, if a key has a default value of []string{} and the same key
// is set via an environment variable to "a b c", a call to the Get function
// would return a string slice for the key if the key's type is inferred by
// the default value and the Get function would return:
//
//	[]string {"a", "b", "c"}
//
// Otherwise the Get function would return:
//
//	"a b c"
func SetTypeByDefaultValue(enable bool) { v.SetTypeByDefaultValue(enable) }

func (v *Viper) SetTypeByDefaultValue(enable bool) {
	v.typeByDefValue = enable
}

// GetViper gets the global Viper instance.
func GetViper() *Viper {
	return v
}

// Get can retrieve any value given the key to use.
// Get is case-insensitive for a key.
// Get has the behavior of returning the value associated with the first
// place from where it is set. Viper will check in the following order:
// override, flag, env, config file, key/value store, default
//
// Get returns an interface. For a specific value use one of the Get____ methods.
func Get(key string) interface{} { return v.Get(key) }

func (v *Viper) Get(key string) interface{} {
	lcaseKey := strings.ToLower(key)
	val := v.find(lcaseKey, true)
	if val == nil {
		return nil
	}

	if v.typeByDefValue {
		// TODO(bep) this branch isn't covered by a single test.
		valType := val
		path := strings.Split(lcaseKey, v.keyDelim)
		defVal := v.searchMap(v.defaults, path)
		if defVal != nil {
			valType = defVal
		}

		switch valType.(type) {
		case bool:
			return cast.ToBool(val)
		case string:
			return cast.ToString(val)
		case int32, int16, int8, int:
			return cast.ToInt(val)
		case uint:
			return cast.ToUint(val)
		case uint32:
			return cast.ToUint32(val)
		case uint64:
			return cast.ToUint64(val)
		case int64:
			return cast.ToInt64(val)
		case float64, float32:
			return cast.ToFloat64(val)
		case time.Time:
			return cast.ToTime(val)
		case time.Duration:
			return cast.ToDuration(val)
		case []string:
			return cast.ToStringSlice(val)
		case []int:
			return cast.ToIntSlice(val)
		}
	}

	return val
}

// Sub returns new Viper instance representing a sub tree of this instance.
// Sub is case-insensitive for a key.
func Sub(key string) *Viper { return v.Sub(key) }

func (v *Viper) Sub(key string) *Viper {
	subv := New()
	data := v.Get(key)
	if data == nil {
		return nil
	}

	if reflect.TypeOf(data).Kind() == reflect.Map {
		subv.config = cast.ToStringMap(data)
		return subv
	}
	return nil
}

// GetString returns the value associated with the key as a string.
func GetString(key string) string { return v.GetString(key) }

func (v *Viper) GetString(key string) string {
	return cast.ToString(v.Get(key))
}

// GetBool returns the value associated with the key as a boolean.
func GetBool(key string) bool { return v.GetBool(key) }

func (v *Viper) GetBool(key string) bool {
	return cast.ToBool(v.Get(key))
}

// GetInt returns the value associated with the key as an integer.
func GetInt(key string) int { return v.GetInt(key) }

func (v *Viper) GetInt(key string) int {
	return cast.ToInt(v.Get(key))
}

// GetInt32 returns the value associated with the key as an integer.
func GetInt32(key string) int32 { return v.GetInt32(key) }

func (v *Viper) GetInt32(key string) int32 {
	return cast.ToInt32(v.Get(key))
}

// GetInt64 returns the value associated with the key as an integer.
func GetInt64(key string) int64 { return v.GetInt64(key) }

func (v *Viper) GetInt64(key string) int64 {
	return cast.ToInt64(v.Get(key))
}

// GetUint returns the value associated with the key as an unsigned integer.
func GetUint(key string) uint { return v.GetUint(key) }

func (v *Viper) GetUint(key string) uint {
	return cast.ToUint(v.Get(key))
}

// GetUint16 returns the value associated with the key as an unsigned integer.
func GetUint16(key string) uint16 { return v.GetUint16(key) }

func (v *Viper) GetUint16(key string) uint16 {
	return cast.ToUint16(v.Get(key))
}

// GetUint32 returns the value associated with the key as an unsigned integer.
func GetUint32(key string) uint32 { return v.GetUint32(key) }

func (v *Viper) GetUint32(key string) uint32 {
	return cast.ToUint32(v.Get(key))
}

// GetUint64 returns the value associated with the key as an unsigned integer.
func GetUint64(key string) uint64 { return v.GetUint64(key) }

func (v *Viper) GetUint64(key string) uint64 {
	return cast.ToUint64(v.Get(key))
}

// GetFloat64 returns the value associated with the key as a float64.
func GetFloat64(key string) float64 { return v.GetFloat64(key) }

func (v *Viper) GetFloat64(key string) float64 {
	return cast.ToFloat64(v.Get(key))
}

// GetTime returns the value associated with the key as time.
func GetTime(key string) time.Time { return v.GetTime(key) }

func (v *Viper) GetTime(key string) time.Time {
	return cast.ToTime(v.Get(key))
}

// GetDuration returns the value associated with the key as a duration.
func GetDuration(key string) time.Duration { return v.GetDuration(key) }

func (v *Viper) GetDuration(key string) time.Duration {
	return cast.ToDuration(v.Get(key))
}

// GetIntSlice returns the value associated with the key as a slice of int values.
func GetIntSlice(key string) []int { return v.GetIntSlice(key) }

func (v *Viper) GetIntSlice(key string) []int {
	return cast.ToIntSlice(v.Get(key))
}

// GetStringSlice returns the value associated with the key as a slice of strings.
func GetStringSlice(key string) []string { return v.GetStringSlice(key) }

func (v *Viper) GetStringSlice(key string) []string {
	return cast.ToStringSlice(v.Get(key))
}

// GetStringMap returns the value associated with the key as a map of interfaces.
func GetStringMap(key string) map[string]interface{} { return v.GetStringMap(key) }

func (v *Viper) GetStringMap(key string) map[string]interface{} {
	return cast.ToStringMap(v.Get(key))
}

// GetStringMapString returns the value associated with the key as a map of strings.
func GetStringMapString(key string) map[string]string { return v.GetStringMapString(key) }

func (v *Viper) GetStringMapString(key string) map[string]string {
	return cast.ToStringMapString(v.Get(key))
}

// GetStringMapStringSlice returns the value associated with the key as a map to a slice of strings.
func GetStringMapStringSlice(key string) map[string][]string { return v.GetStringMapStringSlice(key) }

func (v *Viper) GetStringMapStringSlice(key string) map[string][]string {
	return cast.ToStringMapStringSlice(v.Get(key))
}

// GetSizeInBytes returns the size of the value associated with the given key
// in bytes.
func GetSizeInBytes(key string) uint { return v.GetSizeInBytes(key) }

func (v *Viper) GetSizeInBytes(key string) uint {
	sizeStr := cast.ToString(v.Get(key))
	return parseSizeInBytes(sizeStr)
}

// UnmarshalKey takes a single key and unmarshals it into a Struct.
func UnmarshalKey(key string, rawVal interface{}, opts ...DecoderConfigOption) error {
	return v.UnmarshalKey(key, rawVal, opts...)
}

func (v *Viper) UnmarshalKey(key string, rawVal interface{}, opts ...DecoderConfigOption) error {
	return decode(v.Get(key), defaultDecoderConfig(rawVal, opts...))
}

// Unmarshal unmarshals the config into a Struct. Make sure that the tags
// on the fields of the structure are properly set.
func Unmarshal(rawVal interface{}, opts ...DecoderConfigOption) error {
	return v.Unmarshal(rawVal, opts...)
}

func (v *Viper) Unmarshal(rawVal interface{}, opts ...DecoderConfigOption) error {
	return decode(v.AllSettings(), defaultDecoderConfig(rawVal, opts...))
}

// defaultDecoderConfig returns default mapsstructure.DecoderConfig with suppot
// of time.Duration values & string slices
func defaultDecoderConfig(output interface{}, opts ...DecoderConfigOption) *mapstructure.DecoderConfig {
	c := &mapstructure.DecoderConfig{
		Metadata:         nil,
		Result:           output,
		WeaklyTypedInput: true,
		DecodeHook: mapstructure.ComposeDecodeHookFunc(
			mapstructure.StringToTimeDurationHookFunc(),
			mapstructure.StringToSliceHookFunc(","),
		),
	}
	for _, opt := range opts {
		opt(c)
	}
	return c
}

// A wrapper around mapstructure.Decode that mimics the WeakDecode functionality
func decode(input interface{}, config *mapstructure.DecoderConfig) error {
	decoder, err := mapstructure.NewDecoder(config)
	if err != nil {
		return err
	}
	return decoder.Decode(input)
}

// UnmarshalExact unmarshals the config into a Struct, erroring if a field is nonexistent
// in the destination struct.
func UnmarshalExact(rawVal interface{}, opts ...DecoderConfigOption) error {
	return v.UnmarshalExact(rawVal, opts...)
}

func (v *Viper) UnmarshalExact(rawVal interface{}, opts ...DecoderConfigOption) error {
	config := defaultDecoderConfig(rawVal, opts...)
	config.ErrorUnused = true

	return decode(v.AllSettings(), config)
}

// BindPFlags binds a full flag set to the configuration, using each flag's long
// name as the config key.
func BindPFlags(flags *pflag.FlagSet) error { return v.BindPFlags(flags) }

func (v *Viper) BindPFlags(flags *pflag.FlagSet) error {
	return v.BindFlagValues(pflagValueSet{flags})
}

// BindPFlag binds a specific key to a pflag (as used by cobra).
// Example (where serverCmd is a Cobra instance):
//
//	serverCmd.Flags().Int("port", 1138, "Port to run Application server on")
//	Viper.BindPFlag("port", serverCmd.Flags().Lookup("port"))
func BindPFlag(key string, flag *pflag.Flag) error { return v.BindPFlag(key, flag) }

func (v *Viper) BindPFlag(key string, flag *pflag.Flag) error {
	if flag == nil {
		return fmt.Errorf("flag for %q is nil", key)
	}
	return v.BindFlagValue(key, pflagValue{flag})
}

// BindFlagValues binds a full FlagValue set to the configuration, using each flag's long
// name as the config key.
func BindFlagValues(flags FlagValueSet) error { return v.BindFlagValues(flags) }

func (v *Viper) BindFlagValues(flags FlagValueSet) (err error) {
	flags.VisitAll(func(flag FlagValue) {
		if err = v.BindFlagValue(flag.Name(), flag); err != nil {
			return
		}
	})
	return nil
}

// BindFlagValue binds a specific key to a FlagValue.
func BindFlagValue(key string, flag FlagValue) error { return v.BindFlagValue(key, flag) }

func (v *Viper) BindFlagValue(key string, flag FlagValue) error {
	if flag == nil {
		return fmt.Errorf("flag for %q is nil", key)
	}
	v.pflags[strings.ToLower(key)] = flag
	return nil
}

// BindEnv binds a Viper key to a ENV variable.
// ENV variables are case sensitive.
// If only a key is provided, it will use the env key matching the key, uppercased.
// If more arguments are provided, they will represent the env variable names that
// should bind to this key and will be taken in the specified order.
// EnvPrefix will be used when set when env name is not provided.
func BindEnv(input ...string) error { return v.BindEnv(input...) }

func (v *Viper) BindEnv(input ...string) error {
	if len(input) == 0 {
		return fmt.Errorf("missing key to bind to")
	}

	key := strings.ToLower(input[0])

	if len(input) == 1 {
		v.env[key] = append(v.env[key], v.mergeWithEnvPrefix(key))
	} else {
		v.env[key] = append(v.env[key], input[1:]...)
	}

	return nil
}

// MustBindEnv wraps BindEnv in a panic.
// If there is an error binding an environment variable, MustBindEnv will
// panic.
func MustBindEnv(input ...string) { v.MustBindEnv(input...) }

func (v *Viper) MustBindEnv(input ...string) {
	if err := v.BindEnv(input...); err != nil {
		panic(fmt.Sprintf("error while binding environment variable: %v", err))
	}
}

// Given a key, find the value.
//
// Viper will check to see if an alias exists first.
// Viper will then check in the following order:
// flag, env, config file, key/value store.
// Lastly, if no value was found and flagDefault is true, and if the key
// corresponds to a flag, the flag's default value is returned.
//
// Note: this assumes a lower-cased key given.
func (v *Viper) find(lcaseKey string, flagDefault bool) interface{} {
	var (
		val    interface{}
		exists bool
		path   = strings.Split(lcaseKey, v.keyDelim)
		nested = len(path) > 1
	)

	// compute the path through the nested maps to the nested value
	if nested && v.isPathShadowedInDeepMap(path, castMapStringToMapInterface(v.aliases)) != "" {
		return nil
	}

	// if the requested key is an alias, then return the proper key
	lcaseKey = v.realKey(lcaseKey)
	path = strings.Split(lcaseKey, v.keyDelim)
	nested = len(path) > 1

	// Set() override first
	val = v.searchMap(v.override, path)
	if val != nil {
		return val
	}
	if nested && v.isPathShadowedInDeepMap(path, v.override) != "" {
		return nil
	}

	// PFlag override next
	flag, exists := v.pflags[lcaseKey]
	if exists && flag.HasChanged() {
		switch flag.ValueType() {
		case "int", "int8", "int16", "int32", "int64":
			return cast.ToInt(flag.ValueString())
		case "bool":
			return cast.ToBool(flag.ValueString())
		case "stringSlice", "stringArray":
			s := strings.TrimPrefix(flag.ValueString(), "[")
			s = strings.TrimSuffix(s, "]")
			res, _ := readAsCSV(s)
			return res
		case "intSlice":
			s := strings.TrimPrefix(flag.ValueString(), "[")
			s = strings.TrimSuffix(s, "]")
			res, _ := readAsCSV(s)
			return cast.ToIntSlice(res)
		case "stringToString":
			return stringToStringConv(flag.ValueString())
		default:
			return flag.ValueString()
		}
	}
	if nested && v.isPathShadowedInFlatMap(path, v.pflags) != "" {
		return nil
	}

	// Env override next
	if v.automaticEnvApplied {
		// even if it hasn't been registered, if automaticEnv is used,
		// check any Get request
		if val, ok := v.getEnv(v.mergeWithEnvPrefix(lcaseKey)); ok {
			return val
		}
		if nested && v.isPathShadowedInAutoEnv(path) != "" {
			return nil
		}
	}
	envkeys, exists := v.env[lcaseKey]
	if exists {
		for _, envkey := range envkeys {
			if val, ok := v.getEnv(envkey); ok {
				return val
			}
		}
	}
	if nested && v.isPathShadowedInFlatMap(path, v.env) != "" {
		return nil
	}

	// Config file next
	val = v.searchIndexableWithPathPrefixes(v.config, path)
	if val != nil {
		return val
	}
	if nested && v.isPathShadowedInDeepMap(path, v.config) != "" {
		return nil
	}

	// K/V store next
	val = v.searchMap(v.kvstore, path)
	if val != nil {
		return val
	}
	if nested && v.isPathShadowedInDeepMap(path, v.kvstore) != "" {
		return nil
	}

	// Default next
	val = v.searchMap(v.defaults, path)
	if val != nil {
		return val
	}
	if nested && v.isPathShadowedInDeepMap(path, v.defaults) != "" {
		return nil
	}

	if flagDefault {
		// last chance: if no value is found and a flag does exist for the key,
		// get the flag's default value even if the flag's value has not been set.
		if flag, exists := v.pflags[lcaseKey]; exists {
			switch flag.ValueType() {
			case "int", "int8", "int16", "int32", "int64":
				return cast.ToInt(flag.ValueString())
			case "bool":
				return cast.ToBool(flag.ValueString())
			case "stringSlice", "stringArray":
				s := strings.TrimPrefix(flag.ValueString(), "[")
				s = strings.TrimSuffix(s, "]")
				res, _ := readAsCSV(s)
				return res
			case "intSlice":
				s := strings.TrimPrefix(flag.ValueString(), "[")
				s = strings.TrimSuffix(s, "]")
				res, _ := readAsCSV(s)
				return cast.ToIntSlice(res)
			case "stringToString":
				return stringToStringConv(flag.ValueString())
			default:
				return flag.ValueString()
			}
		}
		// last item, no need to check shadowing
	}

	return nil
}

func readAsCSV(val string) ([]string, error) {
	if val == "" {
		return []string{}, nil
	}
	stringReader := strings.NewReader(val)
	csvReader := csv.NewReader(stringReader)
	return csvReader.Read()
}

// mostly copied from pflag's implementation of this operation here https://github.com/spf13/pflag/blob/master/string_to_string.go#L79
// alterations are: errors are swallowed, map[string]interface{} is returned in order to enable cast.ToStringMap
func stringToStringConv(val string) interface{} {
	val = strings.Trim(val, "[]")
	// An empty string would cause an empty map
	if len(val) == 0 {
		return map[string]interface{}{}
	}
	r := csv.NewReader(strings.NewReader(val))
	ss, err := r.Read()
	if err != nil {
		return nil
	}
	out := make(map[string]interface{}, len(ss))
	for _, pair := range ss {
		kv := strings.SplitN(pair, "=", 2)
		if len(kv) != 2 {
			return nil
		}
		out[kv[0]] = kv[1]
	}
	return out
}

// IsSet checks to see if the key has been set in any of the data locations.
// IsSet is case-insensitive for a key.
func IsSet(key string) bool { return v.IsSet(key) }

func (v *Viper) IsSet(key string) bool {
	lcaseKey := strings.ToLower(key)
	val := v.find(lcaseKey, false)
	return val != nil
}

// AutomaticEnv makes Viper check if environment variables match any of the existing keys
// (config, default or flags). If matching env vars are found, they are loaded into Viper.
func AutomaticEnv() { v.AutomaticEnv() }

func (v *Viper) AutomaticEnv() {
	v.automaticEnvApplied = true
}

// SetEnvKeyReplacer sets the strings.Replacer on the viper object
// Useful for mapping an environmental variable to a key that does
// not match it.
func SetEnvKeyReplacer(r *strings.Replacer) { v.SetEnvKeyReplacer(r) }

func (v *Viper) SetEnvKeyReplacer(r *strings.Replacer) {
	v.envKeyReplacer = r
}

// RegisterAlias creates an alias that provides another accessor for the same key.
// This enables one to change a name without breaking the application.
func RegisterAlias(alias string, key string) { v.RegisterAlias(alias, key) }

func (v *Viper) RegisterAlias(alias string, key string) {
	v.registerAlias(alias, strings.ToLower(key))
}

func (v *Viper) registerAlias(alias string, key string) {
	alias = strings.ToLower(alias)
	if alias != key && alias != v.realKey(key) {
		_, exists := v.aliases[alias]

		if !exists {
			// if we alias something that exists in one of the maps to another
			// name, we'll never be able to get that value using the original
			// name, so move the config value to the new realkey.
			if val, ok := v.config[alias]; ok {
				delete(v.config, alias)
				v.config[key] = val
			}
			if val, ok := v.kvstore[alias]; ok {
				delete(v.kvstore, alias)
				v.kvstore[key] = val
			}
			if val, ok := v.defaults[alias]; ok {
				delete(v.defaults, alias)
				v.defaults[key] = val
			}
			if val, ok := v.override[alias]; ok {
				delete(v.override, alias)
				v.override[key] = val
			}
			v.aliases[alias] = key
		}
	} else {
		v.logger.Warn("creating circular reference alias", "alias", alias, "key", key, "real_key", v.realKey(key))
	}
}

func (v *Viper) realKey(key string) string {
	newkey, exists := v.aliases[key]
	if exists {
		v.logger.Debug("key is an alias", "alias", key, "to", newkey)

		return v.realKey(newkey)
	}
	return key
}

// InConfig checks to see if the given key (or an alias) is in the config file.
func InConfig(key string) bool { return v.InConfig(key) }

func (v *Viper) InConfig(key string) bool {
	lcaseKey := strings.ToLower(key)

	// if the requested key is an alias, then return the proper key
	lcaseKey = v.realKey(lcaseKey)
	path := strings.Split(lcaseKey, v.keyDelim)

	return v.searchIndexableWithPathPrefixes(v.config, path) != nil
}

// SetDefault sets the default value for this key.
// SetDefault is case-insensitive for a key.
// Default only used when no value is provided by the user via flag, config or ENV.
func SetDefault(key string, value interface{}) { v.SetDefault(key, value) }

func (v *Viper) SetDefault(key string, value interface{}) {
	// If alias passed in, then set the proper default
	key = v.realKey(strings.ToLower(key))
	value = toCaseInsensitiveValue(value)

	path := strings.Split(key, v.keyDelim)
	lastKey := strings.ToLower(path[len(path)-1])
	deepestMap := deepSearch(v.defaults, path[0:len(path)-1])

	// set innermost value
	deepestMap[lastKey] = value
}

// Set sets the value for the key in the override register.
// Set is case-insensitive for a key.
// Will be used instead of values obtained via
// flags, config file, ENV, default, or key/value store.
func Set(key string, value interface{}) { v.Set(key, value) }

func (v *Viper) Set(key string, value interface{}) {
	// If alias passed in, then set the proper override
	key = v.realKey(strings.ToLower(key))
	value = toCaseInsensitiveValue(value)

	path := strings.Split(key, v.keyDelim)
	lastKey := strings.ToLower(path[len(path)-1])
	deepestMap := deepSearch(v.override, path[0:len(path)-1])

	// set innermost value
	deepestMap[lastKey] = value
}

// ReadInConfig will discover and load the configuration file from disk
// and key/value stores, searching in one of the defined paths.
func ReadInConfig() error { return v.ReadInConfig() }

func (v *Viper) ReadInConfig() error {
	v.logger.Info("attempting to read in config file")
	filename, err := v.getConfigFile()
	if err != nil {
		return err
	}

	if !stringInSlice(v.getConfigType(), SupportedExts) {
		return UnsupportedConfigError(v.getConfigType())
	}

	v.logger.Debug("reading file", "file", filename)
	file, err := afero.ReadFile(v.fs, filename)
	if err != nil {
		return err
	}

	config := make(map[string]interface{})

	err = v.unmarshalReader(bytes.NewReader(file), config)
	if err != nil {
		return err
	}

	v.config = config
	return nil
}

// MergeInConfig merges a new configuration with an existing config.
func MergeInConfig() error { return v.MergeInConfig() }

func (v *Viper) MergeInConfig() error {
	v.logger.Info("attempting to merge in config file")
	filename, err := v.getConfigFile()
	if err != nil {
		return err
	}

	if !stringInSlice(v.getConfigType(), SupportedExts) {
		return UnsupportedConfigError(v.getConfigType())
	}

	file, err := afero.ReadFile(v.fs, filename)
	if err != nil {
		return err
	}

	return v.MergeConfig(bytes.NewReader(file))
}

// ReadConfig will read a configuration file, setting existing keys to nil if the
// key does not exist in the file.
func ReadConfig(in io.Reader) error { return v.ReadConfig(in) }

func (v *Viper) ReadConfig(in io.Reader) error {
	v.config = make(map[string]interface{})
	return v.unmarshalReader(in, v.config)
}

// MergeConfig merges a new configuration with an existing config.
func MergeConfig(in io.Reader) error { return v.MergeConfig(in) }

func (v *Viper) MergeConfig(in io.Reader) error {
	cfg := make(map[string]interface{})
	if err := v.unmarshalReader(in, cfg); err != nil {
		return err
	}
	return v.MergeConfigMap(cfg)
}

// MergeConfigMap merges the configuration from the map given with an existing config.
// Note that the map given may be modified.
func MergeConfigMap(cfg map[string]interface{}) error { return v.MergeConfigMap(cfg) }

func (v *Viper) MergeConfigMap(cfg map[string]interface{}) error {
	if v.config == nil {
		v.config = make(map[string]interface{})
	}
	insensitiviseMap(cfg)
	mergeMaps(cfg, v.config, nil)
	return nil
}

// WriteConfig writes the current configuration to a file.
func WriteConfig() error { return v.WriteConfig() }

func (v *Viper) WriteConfig() error {
	filename, err := v.getConfigFile()
	if err != nil {
		return err
	}
	return v.writeConfig(filename, true)
}

// SafeWriteConfig writes current configuration to file only if the file does not exist.
func SafeWriteConfig() error { return v.SafeWriteConfig() }

func (v *Viper) SafeWriteConfig() error {
	if len(v.configPaths) < 1 {
		return errors.New("missing configuration for 'configPath'")
	}
	return v.SafeWriteConfigAs(filepath.Join(v.configPaths[0], v.configName+"."+v.configType))
}

// WriteConfigAs writes current configuration to a given filename.
func WriteConfigAs(filename string) error { return v.WriteConfigAs(filename) }

func (v *Viper) WriteConfigAs(filename string) error {
	return v.writeConfig(filename, true)
}

// SafeWriteConfigAs writes current configuration to a given filename if it does not exist.
func SafeWriteConfigAs(filename string) error { return v.SafeWriteConfigAs(filename) }

func (v *Viper) SafeWriteConfigAs(filename string) error {
	alreadyExists, err := afero.Exists(v.fs, filename)
	if alreadyExists && err == nil {
		return ConfigFileAlreadyExistsError(filename)
	}
	return v.writeConfig(filename, false)
}

func (v *Viper) writeConfig(filename string, force bool) error {
	v.logger.Info("attempting to write configuration to file")

	var configType string

	ext := filepath.Ext(filename)
	if ext != "" && ext != filepath.Base(filename) {
		configType = ext[1:]
	} else {
		configType = v.configType
	}
	if configType == "" {
		return fmt.Errorf("config type could not be determined for %s", filename)
	}

	if !stringInSlice(configType, SupportedExts) {
		return UnsupportedConfigError(configType)
	}
	if v.config == nil {
		v.config = make(map[string]interface{})
	}
	flags := os.O_CREATE | os.O_TRUNC | os.O_WRONLY
	if !force {
		flags |= os.O_EXCL
	}
	f, err := v.fs.OpenFile(filename, flags, v.configPermissions)
	if err != nil {
		return err
	}
	defer f.Close()

	if err := v.marshalWriter(f, configType); err != nil {
		return err
	}

	return f.Sync()
}

// Unmarshal a Reader into a map.
// Should probably be an unexported function.
func unmarshalReader(in io.Reader, c map[string]interface{}) error {
	return v.unmarshalReader(in, c)
}

func (v *Viper) unmarshalReader(in io.Reader, c map[string]interface{}) error {
	buf := new(bytes.Buffer)
	buf.ReadFrom(in)

	switch format := strings.ToLower(v.getConfigType()); format {
	case "yaml", "yml", "json", "toml", "hcl", "tfvars", "ini", "properties", "props", "prop", "dotenv", "env":
		err := v.decoderRegistry.Decode(format, buf.Bytes(), c)
		if err != nil {
			return ConfigParseError{err}
		}
	}

	insensitiviseMap(c)
	return nil
}

// Marshal a map into Writer.
func (v *Viper) marshalWriter(f afero.File, configType string) error {
	c := v.AllSettings()
	switch configType {
	case "yaml", "yml", "json", "toml", "hcl", "tfvars", "ini", "prop", "props", "properties", "dotenv", "env":
		b, err := v.encoderRegistry.Encode(configType, c)
		if err != nil {
			return ConfigMarshalError{err}
		}

		_, err = f.WriteString(string(b))
		if err != nil {
			return ConfigMarshalError{err}
		}
	}
	return nil
}

func keyExists(k string, m map[string]interface{}) string {
	lk := strings.ToLower(k)
	for mk := range m {
		lmk := strings.ToLower(mk)
		if lmk == lk {
			return mk
		}
	}
	return ""
}

func castToMapStringInterface(
	src map[interface{}]interface{},
) map[string]interface{} {
	tgt := map[string]interface{}{}
	for k, v := range src {
		tgt[fmt.Sprintf("%v", k)] = v
	}
	return tgt
}

func castMapStringSliceToMapInterface(src map[string][]string) map[string]interface{} {
	tgt := map[string]interface{}{}
	for k, v := range src {
		tgt[k] = v
	}
	return tgt
}

func castMapStringToMapInterface(src map[string]string) map[string]interface{} {
	tgt := map[string]interface{}{}
	for k, v := range src {
		tgt[k] = v
	}
	return tgt
}

func castMapFlagToMapInterface(src map[string]FlagValue) map[string]interface{} {
	tgt := map[string]interface{}{}
	for k, v := range src {
		tgt[k] = v
	}
	return tgt
}

// mergeMaps merges two maps. The `itgt` parameter is for handling go-yaml's
// insistence on parsing nested structures as `map[interface{}]interface{}`
// instead of using a `string` as the key for nest structures beyond one level
// deep. Both map types are supported as there is a go-yaml fork that uses
// `map[string]interface{}` instead.
func mergeMaps(
	src, tgt map[string]interface{}, itgt map[interface{}]interface{},
) {
	for sk, sv := range src {
		tk := keyExists(sk, tgt)
		if tk == "" {
			v.logger.Trace("", "tk", "\"\"", fmt.Sprintf("tgt[%s]", sk), sv)
			tgt[sk] = sv
			if itgt != nil {
				itgt[sk] = sv
			}
			continue
		}

		tv, ok := tgt[tk]
		if !ok {
			v.logger.Trace("", fmt.Sprintf("ok[%s]", tk), false, fmt.Sprintf("tgt[%s]", sk), sv)
			tgt[sk] = sv
			if itgt != nil {
				itgt[sk] = sv
			}
			continue
		}

		svType := reflect.TypeOf(sv)
		tvType := reflect.TypeOf(tv)

		v.logger.Trace(
			"processing",
			"key", sk,
			"st", svType,
			"tt", tvType,
			"sv", sv,
			"tv", tv,
		)

		switch ttv := tv.(type) {
		case map[interface{}]interface{}:
			v.logger.Trace("merging maps (must convert)")
			tsv, ok := sv.(map[interface{}]interface{})
			if !ok {
				v.logger.Error(
					"Could not cast sv to map[interface{}]interface{}",
					"key", sk,
					"st", svType,
					"tt", tvType,
					"sv", sv,
					"tv", tv,
				)
				continue
			}

			ssv := castToMapStringInterface(tsv)
			stv := castToMapStringInterface(ttv)
			mergeMaps(ssv, stv, ttv)
		case map[string]interface{}:
			v.logger.Trace("merging maps")
			tsv, ok := sv.(map[string]interface{})
			if !ok {
				v.logger.Error(
					"Could not cast sv to map[string]interface{}",
					"key", sk,
					"st", svType,
					"tt", tvType,
					"sv", sv,
					"tv", tv,
				)
				continue
			}
			mergeMaps(tsv, ttv, nil)
		default:
			v.logger.Trace("setting value")
			tgt[tk] = sv
			if itgt != nil {
				itgt[tk] = sv
			}
		}
	}
}

// ReadRemoteConfig attempts to get configuration from a remote source
// and read it in the remote configuration registry.
func ReadRemoteConfig() error { return v.ReadRemoteConfig() }

func (v *Viper) ReadRemoteConfig() error {
	return v.getKeyValueConfig()
}

func WatchRemoteConfig() error { return v.WatchRemoteConfig() }
func (v *Viper) WatchRemoteConfig() error {
	return v.watchKeyValueConfig()
}

func (v *Viper) WatchRemoteConfigOnChannel() error {
	return v.watchKeyValueConfigOnChannel()
}

// Retrieve the first found remote configuration.
func (v *Viper) getKeyValueConfig() error {
	if RemoteConfig == nil {
		return RemoteConfigError("Enable the remote features by doing a blank import of the viper/remote package: '_ github.com/spf13/viper/remote'")
	}

	if len(v.remoteProviders) == 0 {
		return RemoteConfigError("No Remote Providers")
	}

	for _, rp := range v.remoteProviders {
		val, err := v.getRemoteConfig(rp)
		if err != nil {
			v.logger.Error(fmt.Errorf("get remote config: %w", err).Error())

			continue
		}

		v.kvstore = val

		return nil
	}
	return RemoteConfigError("No Files Found")
}

func (v *Viper) getRemoteConfig(provider RemoteProvider) (map[string]interface{}, error) {
	reader, err := RemoteConfig.Get(provider)
	if err != nil {
		return nil, err
	}
	err = v.unmarshalReader(reader, v.kvstore)
	return v.kvstore, err
}

// Retrieve the first found remote configuration.
func (v *Viper) watchKeyValueConfigOnChannel() error {
	if len(v.remoteProviders) == 0 {
		return RemoteConfigError("No Remote Providers")
	}

	for _, rp := range v.remoteProviders {
		respc, _ := RemoteConfig.WatchChannel(rp)
		// Todo: Add quit channel
		go func(rc <-chan *RemoteResponse) {
			for {
				b := <-rc
				reader := bytes.NewReader(b.Value)
				v.unmarshalReader(reader, v.kvstore)
			}
		}(respc)
		return nil
	}
	return RemoteConfigError("No Files Found")
}

// Retrieve the first found remote configuration.
func (v *Viper) watchKeyValueConfig() error {
	if len(v.remoteProviders) == 0 {
		return RemoteConfigError("No Remote Providers")
	}

	for _, rp := range v.remoteProviders {
		val, err := v.watchRemoteConfig(rp)
		if err != nil {
			v.logger.Error(fmt.Errorf("watch remote config: %w", err).Error())

			continue
		}
		v.kvstore = val
		return nil
	}
	return RemoteConfigError("No Files Found")
}

func (v *Viper) watchRemoteConfig(provider RemoteProvider) (map[string]interface{}, error) {
	reader, err := RemoteConfig.Watch(provider)
	if err != nil {
		return nil, err
	}
	err = v.unmarshalReader(reader, v.kvstore)
	return v.kvstore, err
}

// AllKeys returns all keys holding a value, regardless of where they are set.
// Nested keys are returned with a v.keyDelim separator
func AllKeys() []string { return v.AllKeys() }

func (v *Viper) AllKeys() []string {
	m := map[string]bool{}
	// add all paths, by order of descending priority to ensure correct shadowing
	m = v.flattenAndMergeMap(m, castMapStringToMapInterface(v.aliases), "")
	m = v.flattenAndMergeMap(m, v.override, "")
	m = v.mergeFlatMap(m, castMapFlagToMapInterface(v.pflags))
	m = v.mergeFlatMap(m, castMapStringSliceToMapInterface(v.env))
	m = v.flattenAndMergeMap(m, v.config, "")
	m = v.flattenAndMergeMap(m, v.kvstore, "")
	m = v.flattenAndMergeMap(m, v.defaults, "")

	// convert set of paths to list
	a := make([]string, 0, len(m))
	for x := range m {
		a = append(a, x)
	}
	return a
}

// flattenAndMergeMap recursively flattens the given map into a map[string]bool
// of key paths (used as a set, easier to manipulate than a []string):
//   - each path is merged into a single key string, delimited with v.keyDelim
//   - if a path is shadowed by an earlier value in the initial shadow map,
//     it is skipped.
//
// The resulting set of paths is merged to the given shadow set at the same time.
func (v *Viper) flattenAndMergeMap(shadow map[string]bool, m map[string]interface{}, prefix string) map[string]bool {
	if shadow != nil && prefix != "" && shadow[prefix] {
		// prefix is shadowed => nothing more to flatten
		return shadow
	}
	if shadow == nil {
		shadow = make(map[string]bool)
	}

	var m2 map[string]interface{}
	if prefix != "" {
		prefix += v.keyDelim
	}
	for k, val := range m {
		fullKey := prefix + k
		switch val.(type) {
		case map[string]interface{}:
			m2 = val.(map[string]interface{})
		case map[interface{}]interface{}:
			m2 = cast.ToStringMap(val)
		default:
			// immediate value
			shadow[strings.ToLower(fullKey)] = true
			continue
		}
		// recursively merge to shadow map
		shadow = v.flattenAndMergeMap(shadow, m2, fullKey)
	}
	return shadow
}

// mergeFlatMap merges the given maps, excluding values of the second map
// shadowed by values from the first map.
func (v *Viper) mergeFlatMap(shadow map[string]bool, m map[string]interface{}) map[string]bool {
	// scan keys
outer:
	for k := range m {
		path := strings.Split(k, v.keyDelim)
		// scan intermediate paths
		var parentKey string
		for i := 1; i < len(path); i++ {
			parentKey = strings.Join(path[0:i], v.keyDelim)
			if shadow[parentKey] {
				// path is shadowed, continue
				continue outer
			}
		}
		// add key
		shadow[strings.ToLower(k)] = true
	}
	return shadow
}

// AllSettings merges all settings and returns them as a map[string]interface{}.
func AllSettings() map[string]interface{} { return v.AllSettings() }

func (v *Viper) AllSettings() map[string]interface{} {
	m := map[string]interface{}{}
	// start from the list of keys, and construct the map one value at a time
	for _, k := range v.AllKeys() {
		value := v.Get(k)
		if value == nil {
			// should not happen, since AllKeys() returns only keys holding a value,
			// check just in case anything changes
			continue
		}
		path := strings.Split(k, v.keyDelim)
		lastKey := strings.ToLower(path[len(path)-1])
		deepestMap := deepSearch(m, path[0:len(path)-1])
		// set innermost value
		deepestMap[lastKey] = value
	}
	return m
}

// SetFs sets the filesystem to use to read configuration.
func SetFs(fs afero.Fs) { v.SetFs(fs) }

func (v *Viper) SetFs(fs afero.Fs) {
	v.fs = fs
}

// SetConfigName sets name for the config file.
// Does not include extension.
func SetConfigName(in string) { v.SetConfigName(in) }

func (v *Viper) SetConfigName(in string) {
	if in != "" {
		v.configName = in
		v.configFile = ""
	}
}

// SetConfigType sets the type of the configuration returned by the
// remote source, e.g. "json".
func SetConfigType(in string) { v.SetConfigType(in) }

func (v *Viper) SetConfigType(in string) {
	if in != "" {
		v.configType = in
	}
}

// SetConfigPermissions sets the permissions for the config file.
func SetConfigPermissions(perm os.FileMode) { v.SetConfigPermissions(perm) }

func (v *Viper) SetConfigPermissions(perm os.FileMode) {
	v.configPermissions = perm.Perm()
}

// IniLoadOptions sets the load options for ini parsing.
func IniLoadOptions(in ini.LoadOptions) Option {
	return optionFunc(func(v *Viper) {
		v.iniLoadOptions = in
	})
}

func (v *Viper) getConfigType() string {
	if v.configType != "" {
		return v.configType
	}

	cf, err := v.getConfigFile()
	if err != nil {
		return ""
	}

	ext := filepath.Ext(cf)

	if len(ext) > 1 {
		return ext[1:]
	}

	return ""
}

func (v *Viper) getConfigFile() (string, error) {
	if v.configFile == "" {
		cf, err := v.findConfigFile()
		if err != nil {
			return "", err
		}
		v.configFile = cf
	}
	return v.configFile, nil
}

// Debug prints all configuration registries for debugging
// purposes.
func Debug()              { v.Debug() }
func DebugTo(w io.Writer) { v.DebugTo(w) }

func (v *Viper) Debug() { v.DebugTo(os.Stdout) }

func (v *Viper) DebugTo(w io.Writer) {
	fmt.Fprintf(w, "Aliases:\n%#v\n", v.aliases)
	fmt.Fprintf(w, "Override:\n%#v\n", v.override)
	fmt.Fprintf(w, "PFlags:\n%#v\n", v.pflags)
	fmt.Fprintf(w, "Env:\n%#v\n", v.env)
	fmt.Fprintf(w, "Key/Value Store:\n%#v\n", v.kvstore)
	fmt.Fprintf(w, "Config:\n%#v\n", v.config)
	fmt.Fprintf(w, "Defaults:\n%#v\n", v.defaults)
}
  07070100000B93000081A4000000000000000000000001645E367C00000580000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/viper_go1_15.go //go:build !go1.16 || !finder
// +build !go1.16 !finder

package viper

import (
	"fmt"
	"os"
	"path/filepath"

	"github.com/spf13/afero"
)

// Search all configPaths for any config file.
// Returns the first path that exists (and is a config file).
func (v *Viper) findConfigFile() (string, error) {
	v.logger.Info("searching for config in paths", "paths", v.configPaths)

	for _, cp := range v.configPaths {
		file := v.searchInPath(cp)
		if file != "" {
			return file, nil
		}
	}
	return "", ConfigFileNotFoundError{v.configName, fmt.Sprintf("%s", v.configPaths)}
}

func (v *Viper) searchInPath(in string) (filename string) {
	v.logger.Debug("searching for config in path", "path", in)
	for _, ext := range SupportedExts {
		v.logger.Debug("checking if file exists", "file", filepath.Join(in, v.configName+"."+ext))
		if b, _ := exists(v.fs, filepath.Join(in, v.configName+"."+ext)); b {
			v.logger.Debug("found file", "file", filepath.Join(in, v.configName+"."+ext))
			return filepath.Join(in, v.configName+"."+ext)
		}
	}

	if v.configType != "" {
		if b, _ := exists(v.fs, filepath.Join(in, v.configName)); b {
			return filepath.Join(in, v.configName)
		}
	}

	return ""
}

// Check if file Exists
func exists(fs afero.Fs, path string) (bool, error) {
	stat, err := fs.Stat(path)
	if err == nil {
		return !stat.IsDir(), nil
	}
	if os.IsNotExist(err) {
		return false, nil
	}
	return false, err
}
07070100000B94000081A4000000000000000000000001645E367C00000296000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/viper_go1_16.go //go:build go1.16 && finder
// +build go1.16,finder

package viper

import (
	"fmt"

	"github.com/spf13/afero"
)

// Search all configPaths for any config file.
// Returns the first path that exists (and is a config file).
func (v *Viper) findConfigFile() (string, error) {
	finder := finder{
		paths:            v.configPaths,
		fileNames:        []string{v.configName},
		extensions:       SupportedExts,
		withoutExtension: v.configType != "",
	}

	file, err := finder.Find(afero.NewIOFS(v.fs))
	if err != nil {
		return "", err
	}

	if file == "" {
		return "", ConfigFileNotFoundError{v.configName, fmt.Sprintf("%s", v.configPaths)}
	}

	return file, nil
}
  07070100000B95000081A4000000000000000000000001645E367C00000144000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/watch.go    //go:build darwin || dragonfly || freebsd || openbsd || linux || netbsd || solaris || windows
// +build darwin dragonfly freebsd openbsd linux netbsd solaris windows

package viper

import "github.com/fsnotify/fsnotify"

type watcher = fsnotify.Watcher

func newWatcher() (*watcher, error) {
	return fsnotify.NewWatcher()
}
07070100000B96000081A4000000000000000000000001645E367C0000027D000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/spf13/viper/watch_unsupported.go    //go:build appengine || (!darwin && !dragonfly && !freebsd && !openbsd && !linux && !netbsd && !solaris && !windows)
// +build appengine !darwin,!dragonfly,!freebsd,!openbsd,!linux,!netbsd,!solaris,!windows

package viper

import (
	"fmt"
	"runtime"

	"github.com/fsnotify/fsnotify"
)

func newWatcher() (*watcher, error) {
	return &watcher{}, fmt.Errorf("fsnotify not supported on %s", runtime.GOOS)
}

type watcher struct {
	Events chan fsnotify.Event
	Errors chan error
}

func (*watcher) Close() error {
	return nil
}

func (*watcher) Add(name string) error {
	return nil
}

func (*watcher) Remove(name string) error {
	return nil
}
   07070100000B97000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002F00000000elemental-cli-0.3.1/vendor/github.com/subosito    07070100000B98000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/github.com/subosito/gotenv 07070100000B99000081A4000000000000000000000001645E367C0000000C000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/subosito/gotenv/.env    HELLO=world
07070100000B9A000081A4000000000000000000000001645E367C00000008000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/subosito/gotenv/.env.invalid    lol$wut
07070100000B9B000081A4000000000000000000000001645E367C00000027000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/subosito/gotenv/.gitignore  *.test
*.out
annotate.json
profile.cov
 07070100000B9C000081A4000000000000000000000001645E367C00000062000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/subosito/gotenv/.golangci.yaml  # Options for analysis running.
run:
  timeout: 1m

linters-settings:
  gofmt:
    simplify: true
  07070100000B9D000081A4000000000000000000000001645E367C00000532000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/subosito/gotenv/CHANGELOG.md    # Changelog

## [1.4.0] - 2022-06-02

### Added

- Add `Marshal` and `Unmarshal` helpers

### Changed

- The CI will now run a linter and the tests on PRs.

## [1.3.0] - 2022-05-23

### Added

- Support = within double-quoted strings
- Add support for multiline values

### Changed

- `OverLoad` prefer environment variables over local variables

## [1.2.0] - 2019-08-03

### Added

- Add `Must` helper to raise an error as panic. It can be used with `Load` and `OverLoad`.
- Add more tests to be 100% coverage.
- Add CHANGELOG
- Add more OS for the test: OSX and Windows

### Changed

- Reduce complexity and improve source code for having `A+` score in [goreportcard](https://goreportcard.com/report/github.com/subosito/gotenv).
- Updated README with mentions to all available functions

### Removed

- Remove `ErrFormat`
- Remove `MustLoad` and `MustOverload`, replaced with `Must` helper.

## [1.1.1] - 2018-06-05

### Changed

- Replace `os.Getenv` with `os.LookupEnv` to ensure that the environment variable is not set, by [radding](https://github.com/radding)

## [1.1.0] - 2017-03-20

### Added

- Supports carriage return in env
- Handle files with UTF-8 BOM

### Changed

- Whitespace handling

### Fixed

- Incorrect variable expansion
- Handling escaped '$' characters

## [1.0.0] - 2014-10-05

First stable release.

  07070100000B9E000081A4000000000000000000000001645E367C0000043A000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/subosito/gotenv/LICENSE The MIT License (MIT)

Copyright (c) 2013 Alif Rachmawadi

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
  07070100000B9F000081A4000000000000000000000001645E367C00000F9D000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/subosito/gotenv/README.md   # gotenv

[![Build Status](https://github.com/subosito/gotenv/workflows/Go%20workflow/badge.svg)](https://github.com/subosito/gotenv/actions)
[![Coverage Status](https://badgen.net/codecov/c/github/subosito/gotenv)](https://codecov.io/gh/subosito/gotenv)
[![Go Report Card](https://goreportcard.com/badge/github.com/subosito/gotenv)](https://goreportcard.com/report/github.com/subosito/gotenv)
[![GoDoc](https://godoc.org/github.com/subosito/gotenv?status.svg)](https://godoc.org/github.com/subosito/gotenv)

Load environment variables from `.env` or `io.Reader` in Go.

## Usage

Put the gotenv package on your `import` statement:

```go
import "github.com/subosito/gotenv"
```

To modify your app environment variables, `gotenv` expose 2 main functions:

- `gotenv.Load`
- `gotenv.Apply`

By default, `gotenv.Load` will look for a file called `.env` in the current working directory.

Behind the scene, it will then load `.env` file and export the valid variables to the environment variables. Make sure you call the method as soon as possible to ensure it loads all variables, say, put it on `init()` function.

Once loaded you can use `os.Getenv()` to get the value of the variable.

Let's say you have `.env` file:

```sh
APP_ID=1234567
APP_SECRET=abcdef
```

Here's the example of your app:

```go
package main

import (
	"github.com/subosito/gotenv"
	"log"
	"os"
)

func init() {
	gotenv.Load()
}

func main() {
	log.Println(os.Getenv("APP_ID"))     // "1234567"
	log.Println(os.Getenv("APP_SECRET")) // "abcdef"
}
```

You can also load other than `.env` file if you wish. Just supply filenames when calling `Load()`. It will load them in order and the first value set for a variable will win.:

```go
gotenv.Load(".env.production", "credentials")
```

While `gotenv.Load` loads entries from `.env` file, `gotenv.Apply` allows you to use any `io.Reader`:

```go
gotenv.Apply(strings.NewReader("APP_ID=1234567"))

log.Println(os.Getenv("APP_ID"))
// Output: "1234567"
```

Both `gotenv.Load` and `gotenv.Apply` **DO NOT** overrides existing environment variables. If you want to override existing ones, you can see section below.

### Environment Overrides

Besides above functions, `gotenv` also provides another functions that overrides existing:

- `gotenv.OverLoad`
- `gotenv.OverApply`

Here's the example of this overrides behavior:

```go
os.Setenv("HELLO", "world")

// NOTE: using Apply existing value will be reserved
gotenv.Apply(strings.NewReader("HELLO=universe"))
fmt.Println(os.Getenv("HELLO"))
// Output: "world"

// NOTE: using OverApply existing value will be overridden
gotenv.OverApply(strings.NewReader("HELLO=universe"))
fmt.Println(os.Getenv("HELLO"))
// Output: "universe"
```

### Throw a Panic

Both `gotenv.Load` and `gotenv.OverLoad` returns an error on something wrong occurred, like your env file is not exist, and so on. To make it easier to use, `gotenv` also provides `gotenv.Must` helper, to let it panic when an error returned.

```go
err := gotenv.Load(".env-is-not-exist")
fmt.Println("error", err)
// error: open .env-is-not-exist: no such file or directory

gotenv.Must(gotenv.Load, ".env-is-not-exist")
// it will throw a panic
// panic: open .env-is-not-exist: no such file or directory
```

### Another Scenario

Just in case you want to parse environment variables from any `io.Reader`, gotenv keeps its `Parse` and `StrictParse` function as public API so you can use that.

```go
// import "strings"

pairs := gotenv.Parse(strings.NewReader("FOO=test\nBAR=$FOO"))
// gotenv.Env{"FOO": "test", "BAR": "test"}

pairs, err := gotenv.StrictParse(strings.NewReader(`FOO="bar"`))
// gotenv.Env{"FOO": "bar"}
```

`Parse` ignores invalid lines and returns `Env` of valid environment variables, while `StrictParse` returns an error for invalid lines.

## Notes

The gotenv package is a Go port of [`dotenv`](https://github.com/bkeepers/dotenv) project with some additions made for Go. For general features, it aims to be compatible as close as possible.
   07070100000BA0000081A4000000000000000000000001645E367C00002488000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/subosito/gotenv/gotenv.go   // Package gotenv provides functionality to dynamically load the environment variables
package gotenv

import (
	"bufio"
	"bytes"
	"fmt"
	"io"
	"os"
	"path/filepath"
	"regexp"
	"sort"
	"strconv"
	"strings"
)

const (
	// Pattern for detecting valid line format
	linePattern = `\A\s*(?:export\s+)?([\w\.]+)(?:\s*=\s*|:\s+?)('(?:\'|[^'])*'|"(?:\"|[^"])*"|[^#\n]+)?\s*(?:\s*\#.*)?\z`

	// Pattern for detecting valid variable within a value
	variablePattern = `(\\)?(\$)(\{?([A-Z0-9_]+)?\}?)`

	// Byte order mark character
	bom = "\xef\xbb\xbf"
)

// Env holds key/value pair of valid environment variable
type Env map[string]string

// Load is a function to load a file or multiple files and then export the valid variables into environment variables if they do not exist.
// When it's called with no argument, it will load `.env` file on the current path and set the environment variables.
// Otherwise, it will loop over the filenames parameter and set the proper environment variables.
func Load(filenames ...string) error {
	return loadenv(false, filenames...)
}

// OverLoad is a function to load a file or multiple files and then export and override the valid variables into environment variables.
func OverLoad(filenames ...string) error {
	return loadenv(true, filenames...)
}

// Must is wrapper function that will panic when supplied function returns an error.
func Must(fn func(filenames ...string) error, filenames ...string) {
	if err := fn(filenames...); err != nil {
		panic(err.Error())
	}
}

// Apply is a function to load an io Reader then export the valid variables into environment variables if they do not exist.
func Apply(r io.Reader) error {
	return parset(r, false)
}

// OverApply is a function to load an io Reader then export and override the valid variables into environment variables.
func OverApply(r io.Reader) error {
	return parset(r, true)
}

func loadenv(override bool, filenames ...string) error {
	if len(filenames) == 0 {
		filenames = []string{".env"}
	}

	for _, filename := range filenames {
		f, err := os.Open(filename)
		if err != nil {
			return err
		}

		err = parset(f, override)
		f.Close()
		if err != nil {
			return err
		}
	}

	return nil
}

// parse and set :)
func parset(r io.Reader, override bool) error {
	env, err := strictParse(r, override)
	if err != nil {
		return err
	}

	for key, val := range env {
		setenv(key, val, override)
	}

	return nil
}

func setenv(key, val string, override bool) {
	if override {
		os.Setenv(key, val)
	} else {
		if _, present := os.LookupEnv(key); !present {
			os.Setenv(key, val)
		}
	}
}

// Parse is a function to parse line by line any io.Reader supplied and returns the valid Env key/value pair of valid variables.
// It expands the value of a variable from the environment variable but does not set the value to the environment itself.
// This function is skipping any invalid lines and only processing the valid one.
func Parse(r io.Reader) Env {
	env, _ := strictParse(r, false)
	return env
}

// StrictParse is a function to parse line by line any io.Reader supplied and returns the valid Env key/value pair of valid variables.
// It expands the value of a variable from the environment variable but does not set the value to the environment itself.
// This function is returning an error if there are any invalid lines.
func StrictParse(r io.Reader) (Env, error) {
	return strictParse(r, false)
}

// Read is a function to parse a file line by line and returns the valid Env key/value pair of valid variables.
// It expands the value of a variable from the environment variable but does not set the value to the environment itself.
// This function is skipping any invalid lines and only processing the valid one.
func Read(filename string) (Env, error) {
	f, err := os.Open(filename)
	if err != nil {
		return nil, err
	}
	defer f.Close()
	return strictParse(f, false)
}

// Unmarshal reads a string line by line and returns the valid Env key/value pair of valid variables.
// It expands the value of a variable from the environment variable but does not set the value to the environment itself.
// This function is returning an error if there are any invalid lines.
func Unmarshal(str string) (Env, error) {
	return strictParse(strings.NewReader(str), false)
}

// Marshal outputs the given environment as a env file.
// Variables will be sorted by name.
func Marshal(env Env) (string, error) {
	lines := make([]string, 0, len(env))
	for k, v := range env {
		if d, err := strconv.Atoi(v); err == nil {
			lines = append(lines, fmt.Sprintf(`%s=%d`, k, d))
		} else {
			lines = append(lines, fmt.Sprintf(`%s=%q`, k, v))
		}
	}
	sort.Strings(lines)
	return strings.Join(lines, "\n"), nil
}

// Write serializes the given environment and writes it to a file
func Write(env Env, filename string) error {
	content, err := Marshal(env)
	if err != nil {
		return err
	}
	// ensure the path exists
	if err := os.MkdirAll(filepath.Dir(filename), 0o775); err != nil {
		return err
	}
	// create or truncate the file
	file, err := os.Create(filename)
	if err != nil {
		return err
	}
	defer file.Close()
	_, err = file.WriteString(content + "\n")
	if err != nil {
		return err
	}

	return file.Sync()
}

// splitLines is a valid SplitFunc for a bufio.Scanner. It will split lines on CR ('\r'), LF ('\n') or CRLF (any of the three sequences).
// If a CR is immediately followed by a LF, it is treated as a CRLF (one single line break).
func splitLines(data []byte, atEOF bool) (advance int, token []byte, err error) {
	if atEOF && len(data) == 0 {
		return 0, nil, bufio.ErrFinalToken
	}

	idx := bytes.IndexAny(data, "\r\n")
	switch {
	case atEOF && idx < 0:
		return len(data), data, bufio.ErrFinalToken

	case idx < 0:
		return 0, nil, nil
	}

	// consume CR or LF
	eol := idx + 1
	// detect CRLF
	if len(data) > eol && data[eol-1] == '\r' && data[eol] == '\n' {
		eol++
	}

	return eol, data[:idx], nil
}

func strictParse(r io.Reader, override bool) (Env, error) {
	env := make(Env)
	scanner := bufio.NewScanner(r)
	scanner.Split(splitLines)

	firstLine := true

	for scanner.Scan() {
		line := strings.TrimSpace(scanner.Text())

		if firstLine {
			line = strings.TrimPrefix(line, bom)
			firstLine = false
		}

		if line == "" || line[0] == '#' {
			continue
		}

		quote := ""
		// look for the delimiter character
		idx := strings.Index(line, "=")
		if idx == -1 {
			idx = strings.Index(line, ":")
		}
		// look for a quote character
		if idx > 0 && idx < len(line)-1 {
			val := strings.TrimSpace(line[idx+1:])
			if val[0] == '"' || val[0] == '\'' {
				quote = val[:1]
				// look for the closing quote character within the same line
				idx = strings.LastIndex(strings.TrimSpace(val[1:]), quote)
				if idx >= 0 && val[idx] != '\\' {
					quote = ""
				}
			}
		}
		// look for the closing quote character
		for quote != "" && scanner.Scan() {
			l := scanner.Text()
			line += "\n" + l
			idx := strings.LastIndex(l, quote)
			if idx > 0 && l[idx-1] == '\\' {
				// foud a matching quote character but it's escaped
				continue
			}
			if idx >= 0 {
				// foud a matching quote
				quote = ""
			}
		}

		if quote != "" {
			return env, fmt.Errorf("missing quotes")
		}

		err := parseLine(line, env, override)
		if err != nil {
			return env, err
		}
	}

	return env, nil
}

var (
	lineRgx     = regexp.MustCompile(linePattern)
	unescapeRgx = regexp.MustCompile(`\\([^$])`)
	varRgx      = regexp.MustCompile(variablePattern)
)

func parseLine(s string, env Env, override bool) error {
	rm := lineRgx.FindStringSubmatch(s)

	if len(rm) == 0 {
		return checkFormat(s, env)
	}

	key := strings.TrimSpace(rm[1])
	val := strings.TrimSpace(rm[2])

	var hsq, hdq bool

	// check if the value is quoted
	if l := len(val); l >= 2 {
		l -= 1
		// has double quotes
		hdq = val[0] == '"' && val[l] == '"'
		// has single quotes
		hsq = val[0] == '\'' && val[l] == '\''

		// remove quotes '' or ""
		if hsq || hdq {
			val = val[1:l]
		}
	}

	if hdq {
		val = strings.ReplaceAll(val, `\n`, "\n")
		val = strings.ReplaceAll(val, `\r`, "\r")

		// Unescape all characters except $ so variables can be escaped properly
		val = unescapeRgx.ReplaceAllString(val, "$1")
	}

	if !hsq {
		fv := func(s string) string {
			return varReplacement(s, hsq, env, override)
		}
		val = varRgx.ReplaceAllStringFunc(val, fv)
	}

	env[key] = val
	return nil
}

func parseExport(st string, env Env) error {
	if strings.HasPrefix(st, "export") {
		vs := strings.SplitN(st, " ", 2)

		if len(vs) > 1 {
			if _, ok := env[vs[1]]; !ok {
				return fmt.Errorf("line `%s` has an unset variable", st)
			}
		}
	}

	return nil
}

var varNameRgx = regexp.MustCompile(`(\$)(\{?([A-Z0-9_]+)\}?)`)

func varReplacement(s string, hsq bool, env Env, override bool) string {
	if s == "" {
		return s
	}

	if s[0] == '\\' {
		// the dollar sign is escaped
		return s[1:]
	}

	if hsq {
		return s
	}

	mn := varNameRgx.FindStringSubmatch(s)

	if len(mn) == 0 {
		return s
	}

	v := mn[3]

	if replace, ok := os.LookupEnv(v); ok && !override {
		return replace
	}

	if replace, ok := env[v]; ok {
		return replace
	}

	return os.Getenv(v)
}

func checkFormat(s string, env Env) error {
	st := strings.TrimSpace(s)

	if st == "" || st[0] == '#' {
		return nil
	}

	if err := parseExport(st, env); err != nil {
		return err
	}

	return fmt.Errorf("line `%s` doesn't match format", s)
}
07070100000BA1000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/vendor/github.com/tredoe  07070100000BA2000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/github.com/tredoe/osutil   07070100000BA3000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/github.com/tredoe/osutil/v2    07070100000BA4000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/tredoe/osutil/v2/userutil   07070100000BA5000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/tredoe/osutil/v2/userutil/crypt 07070100000BA6000081A4000000000000000000000001645E367C0000007E000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/tredoe/osutil/v2/userutil/crypt/AUTHORS.md  ### Initial author

[Jeramey Crawford](https://github.com/jeramey)

### Other authors

[Jonas mg](https://github.com/tredoe)

  07070100000BA7000081A4000000000000000000000001645E367C00000552000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/tredoe/osutil/v2/userutil/crypt/LICENSE Copyright (c) 2012, Jeramey Crawford <jeramey@antihe.ro>
Copyright (c) 2013, Jonas mg
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

  * Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.

  * Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in
    the documentation and/or other materials provided with the
    distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  07070100000BA8000081A4000000000000000000000001645E367C00000314000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/tredoe/osutil/v2/userutil/crypt/README.md   crypt
=====
A password hashing library.

The goal of crypt is to bring a library of many common and popular password
hashing algorithms to Go and to provide a simple and consistent interface to
each of them. As every hashing method is implemented in pure Go, this library
should be as portable as Go itself.

All hashing methods come with a test suite which verifies their operation
against itself as well as the output of other password hashing implementations
to ensure compatibility with them.

I hope you find this library to be useful and easy to use!

Note: forked from <https://github.com/jeramey/go-pwhash>

## Installation

	go get github.com/tredoe/osutil/user/crypt

## License

The source files are distributed under a BSD-style license that can be found
in the LICENSE file.
07070100000BA9000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/tredoe/osutil/v2/userutil/crypt/common  07070100000BAA000081A4000000000000000000000001645E367C000006A2000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/github.com/tredoe/osutil/v2/userutil/crypt/common/base64.go    // Copyright 2012, Jeramey Crawford <jeramey@antihe.ro>
// Copyright 2013, Jonas mg
// All rights reserved.
//
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file.

package common

const alphabet = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"

// Base64_24Bit is a variant of Base64 encoding, commonly used with password
// hashing algorithms to encode the result of their checksum output.
//
// The algorithm operates on up to 3 bytes at a time, encoding the following
// 6-bit sequences into up to 4 hash64 ASCII bytes.
//
//   1. Bottom 6 bits of the first byte
//   2. Top 2 bits of the first byte, and bottom 4 bits of the second byte.
//   3. Top 4 bits of the second byte, and bottom 2 bits of the third byte.
//   4. Top 6 bits of the third byte.
//
// This encoding method does not emit padding bytes as Base64 does.
func Base64_24Bit(src []byte) (hash []byte) {
	if len(src) == 0 {
		return []byte{} // TODO: return nil
	}

	hashSize := (len(src) * 8) / 6
	if (len(src) % 6) != 0 {
		hashSize += 1
	}
	hash = make([]byte, hashSize)

	dst := hash
	for len(src) > 0 {
		switch len(src) {
		default:
			dst[0] = alphabet[src[0]&0x3f]
			dst[1] = alphabet[((src[0]>>6)|(src[1]<<2))&0x3f]
			dst[2] = alphabet[((src[1]>>4)|(src[2]<<4))&0x3f]
			dst[3] = alphabet[(src[2]>>2)&0x3f]
			src = src[3:]
			dst = dst[4:]
		case 2:
			dst[0] = alphabet[src[0]&0x3f]
			dst[1] = alphabet[((src[0]>>6)|(src[1]<<2))&0x3f]
			dst[2] = alphabet[(src[1]>>4)&0x3f]
			src = src[2:]
			dst = dst[3:]
		case 1:
			dst[0] = alphabet[src[0]&0x3f]
			dst[1] = alphabet[(src[0]>>6)&0x3f]
			src = src[1:]
			dst = dst[2:]
		}
	}

	return
}
  07070100000BAB000081A4000000000000000000000001645E367C000001C7000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/tredoe/osutil/v2/userutil/crypt/common/doc.go   // Copyright 2012, Jeramey Crawford <jeramey@antihe.ro>
// Copyright 2013, Jonas mg
// All rights reserved.
//
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file.

// Package common contains routines used by multiple password hashing
// algorithms.
//
// Generally, you will never import this package directly. Many of the
// *_crypt packages will import this package if they require it.
package common
 07070100000BAC000081A4000000000000000000000001645E367C000009AB000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/github.com/tredoe/osutil/v2/userutil/crypt/common/salt.go  // Copyright 2012, Jeramey Crawford <jeramey@antihe.ro>
// Copyright 2013, Jonas mg
// All rights reserved.
//
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file.

package common

import (
	"crypto/rand"
	"errors"
	"strconv"
)

var (
	ErrSaltPrefix = errors.New("invalid magic prefix")
	ErrSaltFormat = errors.New("invalid salt format")
	ErrSaltRounds = errors.New("invalid rounds")
)

// Salt represents a salt.
type Salt struct {
	MagicPrefix []byte

	SaltLenMin int
	SaltLenMax int

	RoundsMin     int
	RoundsMax     int
	RoundsDefault int
}

// Generate generates a random salt of a given length.
//
// The length is set thus:
//
//   length > SaltLenMax: length = SaltLenMax
//   length < SaltLenMin: length = SaltLenMin
func (s *Salt) Generate(length int) []byte {
	if length > s.SaltLenMax {
		length = s.SaltLenMax
	} else if length < s.SaltLenMin {
		length = s.SaltLenMin
	}

	saltLen := (length * 6 / 8)
	if (length*6)%8 != 0 {
		saltLen++
	}
	salt := make([]byte, saltLen)
	rand.Read(salt)

	out := make([]byte, len(s.MagicPrefix)+length)
	copy(out, s.MagicPrefix)
	copy(out[len(s.MagicPrefix):], Base64_24Bit(salt))
	return out
}

// GenerateWRounds creates a random salt with the random bytes being of the
// length provided, and the rounds parameter set as specified.
//
// The parameters are set thus:
//
//   length > SaltLenMax: length = SaltLenMax
//   length < SaltLenMin: length = SaltLenMin
//
//   rounds < 0: rounds = RoundsDefault
//   rounds < RoundsMin: rounds = RoundsMin
//   rounds > RoundsMax: rounds = RoundsMax
//
// If rounds is equal to RoundsDefault, then the "rounds=" part of the salt is
// removed.
func (s *Salt) GenerateWRounds(length, rounds int) []byte {
	if length > s.SaltLenMax {
		length = s.SaltLenMax
	} else if length < s.SaltLenMin {
		length = s.SaltLenMin
	}
	if rounds < 0 {
		rounds = s.RoundsDefault
	} else if rounds < s.RoundsMin {
		rounds = s.RoundsMin
	} else if rounds > s.RoundsMax {
		rounds = s.RoundsMax
	}

	saltLen := (length * 6 / 8)
	if (length*6)%8 != 0 {
		saltLen++
	}
	salt := make([]byte, saltLen)
	rand.Read(salt)

	roundsText := ""
	if rounds != s.RoundsDefault {
		roundsText = "rounds=" + strconv.Itoa(rounds) + "$"
	}

	out := make([]byte, len(s.MagicPrefix)+len(roundsText)+length)
	copy(out, s.MagicPrefix)
	copy(out[len(s.MagicPrefix):], []byte(roundsText))
	copy(out[len(s.MagicPrefix)+len(roundsText):], Base64_24Bit(salt))
	return out
}
 07070100000BAD000081A4000000000000000000000001645E367C00000DD4000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/tredoe/osutil/v2/userutil/crypt/crypt.go    // Copyright 2013, Jonas mg
// All rights reserved.
//
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file.

// Package crypt provides interface for password crypt functions and collects
// common constants.
package crypt

import (
	"errors"
	"strings"

	"github.com/tredoe/osutil/v2/userutil/crypt/common"
)

var ErrKeyMismatch = errors.New("hashed value is not the hash of the given password")

// Crypter is the common interface implemented by all crypt functions.
type Crypter interface {
	// Generate performs the hashing algorithm, returning a full hash suitable
	// for storage and later password verification.
	//
	// If the salt is empty, a randomly-generated salt will be generated with a
	// length of SaltLenMax and number RoundsDefault of rounds.
	//
	// Any error only can be got when the salt argument is not empty.
	Generate(key, salt []byte) (string, error)

	// Verify compares a hashed key with its possible key equivalent.
	// Returns nil on success, or an error on failure; if the hashed key is
	// diffrent, the error is "ErrKeyMismatch".
	Verify(hashedKey string, key []byte) error

	// Cost returns the hashing cost (in rounds) used to create the given hashed
	// key.
	//
	// When, in the future, the hashing cost of a key needs to be increased in
	// order to adjust for greater computational power, this function allows one
	// to establish which keys need to be updated.
	//
	// The algorithms based in MD5-crypt use a fixed value of rounds.
	Cost(hashedKey string) (int, error)

	// SetSalt sets a different salt. It is used to easily create derivated
	// algorithms, i.e. "apr1_crypt" from "md5_crypt".
	SetSalt(salt common.Salt)
}

// Crypt identifies a crypt function that is implemented in another package.
type Crypt uint

const (
	APR1   Crypt = iota + 1 // import "github.com/tredoe/osutil/v2/user/crypt/apr1_crypt"
	MD5                     // import "github.com/tredoe/osutil/v2/user/crypt/md5_crypt"
	SHA256                  // import "github.com/tredoe/osutil/v2/user/crypt/sha256_crypt"
	SHA512                  // import "github.com/tredoe/osutil/v2/user/crypt/sha512_crypt"
	maxCrypt
)

var cryptPrefixes = make([]string, maxCrypt)

var crypts = make([]func() Crypter, maxCrypt)

// RegisterCrypt registers a function that returns a new instance of the given
// crypt function. This is intended to be called from the init function in
// packages that implement crypt functions.
func RegisterCrypt(c Crypt, f func() Crypter, prefix string) {
	if c >= maxCrypt {
		panic("crypt: RegisterHash of unknown crypt function")
	}
	crypts[c] = f
	cryptPrefixes[c] = prefix
}

// New returns a new crypter.
func New(c Crypt) Crypter {
	f := crypts[c]
	if f != nil {
		return f()
	}
	panic("crypt: requested crypt function is unavailable")
}

// NewFromHash returns a new Crypter using the prefix in the given hashed key.
func NewFromHash(hashedKey string) Crypter {
	var f func() Crypter

	if strings.HasPrefix(hashedKey, cryptPrefixes[SHA512]) {
		f = crypts[SHA512]
	} else if strings.HasPrefix(hashedKey, cryptPrefixes[SHA256]) {
		f = crypts[SHA256]
	} else if strings.HasPrefix(hashedKey, cryptPrefixes[MD5]) {
		f = crypts[MD5]
	} else if strings.HasPrefix(hashedKey, cryptPrefixes[APR1]) {
		f = crypts[APR1]
	} else {
		toks := strings.SplitN(hashedKey, "$", 3)
		prefix := "$" + toks[1] + "$"
		panic("crypt: unknown cryp function from prefix: " + prefix)
	}

	if f != nil {
		return f()
	}
	panic("crypt: requested cryp function is unavailable")
}
07070100000BAE000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/tredoe/osutil/v2/userutil/crypt/sha512_crypt    07070100000BAF000081A4000000000000000000000001645E367C000016E7000000000000000000000000000000000000006300000000elemental-cli-0.3.1/vendor/github.com/tredoe/osutil/v2/userutil/crypt/sha512_crypt/sha512_crypt.go    // Copyright 2012, Jeramey Crawford <jeramey@antihe.ro>
// Copyright 2013, Jonas mg
// All rights reserved.
//
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file.

// Package sha512_crypt implements Ulrich Drepper's SHA512-crypt password
// hashing algorithm.
//
// The specification for this algorithm can be found here:
// http://www.akkadia.org/drepper/SHA-crypt.txt
package sha512_crypt

import (
	"bytes"
	"crypto/sha512"
	"strconv"

	"github.com/tredoe/osutil/v2/userutil/crypt"
	"github.com/tredoe/osutil/v2/userutil/crypt/common"
)

func init() {
	crypt.RegisterCrypt(crypt.SHA512, New, MagicPrefix)
}

const (
	MagicPrefix   = "$6$"
	SaltLenMin    = 1
	SaltLenMax    = 16
	RoundsMin     = 1000
	RoundsMax     = 999999999
	RoundsDefault = 5000
)

var _rounds = []byte("rounds=")

type crypter struct{ Salt common.Salt }

// New returns a new crypt.Crypter computing the SHA512-crypt password hashing.
func New() crypt.Crypter {
	return &crypter{GetSalt()}
}

func (c *crypter) Generate(key, salt []byte) (string, error) {
	var rounds int
	var isRoundsDef bool

	if len(salt) == 0 {
		salt = c.Salt.GenerateWRounds(SaltLenMax, RoundsDefault)
	}
	if !bytes.HasPrefix(salt, c.Salt.MagicPrefix) {
		return "", common.ErrSaltPrefix
	}

	saltToks := bytes.Split(salt, []byte{'$'})
	if len(saltToks) < 3 {
		return "", common.ErrSaltFormat
	}

	if bytes.HasPrefix(saltToks[2], _rounds) {
		isRoundsDef = true
		pr, err := strconv.ParseInt(string(saltToks[2][7:]), 10, 32)
		if err != nil {
			return "", common.ErrSaltRounds
		}
		rounds = int(pr)
		if rounds < RoundsMin {
			rounds = RoundsMin
		} else if rounds > RoundsMax {
			rounds = RoundsMax
		}
		salt = saltToks[3]
	} else {
		rounds = RoundsDefault
		salt = saltToks[2]
	}

	if len(salt) > SaltLenMax {
		salt = salt[0:SaltLenMax]
	}

	// Compute alternate SHA512 sum with input KEY, SALT, and KEY.
	Alternate := sha512.New()
	Alternate.Write(key)
	Alternate.Write(salt)
	Alternate.Write(key)
	AlternateSum := Alternate.Sum(nil) // 64 bytes

	A := sha512.New()
	A.Write(key)
	A.Write(salt)
	// Add for any character in the key one byte of the alternate sum.
	i := len(key)
	for ; i > 64; i -= 64 {
		A.Write(AlternateSum)
	}
	A.Write(AlternateSum[0:i])

	// Take the binary representation of the length of the key and for every add
	// the alternate sum, for every 0 the key.
	for i = len(key); i > 0; i >>= 1 {
		if (i & 1) != 0 {
			A.Write(AlternateSum)
		} else {
			A.Write(key)
		}
	}
	Asum := A.Sum(nil)

	// Start computation of P byte sequence.
	P := sha512.New()
	// For every character in the password add the entire password.
	for i = 0; i < len(key); i++ {
		P.Write(key)
	}
	Psum := P.Sum(nil)
	// Create byte sequence P.
	Pseq := make([]byte, 0, len(key))
	for i = len(key); i > 64; i -= 64 {
		Pseq = append(Pseq, Psum...)
	}
	Pseq = append(Pseq, Psum[0:i]...)

	// Start computation of S byte sequence.
	S := sha512.New()
	for i = 0; i < (16 + int(Asum[0])); i++ {
		S.Write(salt)
	}
	Ssum := S.Sum(nil)
	// Create byte sequence S.
	Sseq := make([]byte, 0, len(salt))
	for i = len(salt); i > 64; i -= 64 {
		Sseq = append(Sseq, Ssum...)
	}
	Sseq = append(Sseq, Ssum[0:i]...)

	Csum := Asum

	// Repeatedly run the collected hash value through SHA512 to burn CPU cycles.
	for i = 0; i < rounds; i++ {
		C := sha512.New()

		// Add key or last result.
		if (i & 1) != 0 {
			C.Write(Pseq)
		} else {
			C.Write(Csum)
		}
		// Add salt for numbers not divisible by 3.
		if (i % 3) != 0 {
			C.Write(Sseq)
		}
		// Add key for numbers not divisible by 7.
		if (i % 7) != 0 {
			C.Write(Pseq)
		}
		// Add key or last result.
		if (i & 1) != 0 {
			C.Write(Csum)
		} else {
			C.Write(Pseq)
		}

		Csum = C.Sum(nil)
	}

	out := make([]byte, 0, 123)
	out = append(out, c.Salt.MagicPrefix...)
	if isRoundsDef {
		out = append(out, []byte("rounds="+strconv.Itoa(rounds)+"$")...)
	}
	out = append(out, salt...)
	out = append(out, '$')
	out = append(out, common.Base64_24Bit([]byte{
		Csum[42], Csum[21], Csum[0],
		Csum[1], Csum[43], Csum[22],
		Csum[23], Csum[2], Csum[44],
		Csum[45], Csum[24], Csum[3],
		Csum[4], Csum[46], Csum[25],
		Csum[26], Csum[5], Csum[47],
		Csum[48], Csum[27], Csum[6],
		Csum[7], Csum[49], Csum[28],
		Csum[29], Csum[8], Csum[50],
		Csum[51], Csum[30], Csum[9],
		Csum[10], Csum[52], Csum[31],
		Csum[32], Csum[11], Csum[53],
		Csum[54], Csum[33], Csum[12],
		Csum[13], Csum[55], Csum[34],
		Csum[35], Csum[14], Csum[56],
		Csum[57], Csum[36], Csum[15],
		Csum[16], Csum[58], Csum[37],
		Csum[38], Csum[17], Csum[59],
		Csum[60], Csum[39], Csum[18],
		Csum[19], Csum[61], Csum[40],
		Csum[41], Csum[20], Csum[62],
		Csum[63],
	})...)

	// Clean sensitive data.
	A.Reset()
	Alternate.Reset()
	P.Reset()
	for i = 0; i < len(Asum); i++ {
		Asum[i] = 0
	}
	for i = 0; i < len(AlternateSum); i++ {
		AlternateSum[i] = 0
	}
	for i = 0; i < len(Pseq); i++ {
		Pseq[i] = 0
	}

	return string(out), nil
}

func (c *crypter) Verify(hashedKey string, key []byte) error {
	newHash, err := c.Generate(key, []byte(hashedKey))
	if err != nil {
		return err
	}
	if newHash != hashedKey {
		return crypt.ErrKeyMismatch
	}
	return nil
}

func (c *crypter) Cost(hashedKey string) (int, error) {
	saltToks := bytes.Split([]byte(hashedKey), []byte{'$'})
	if len(saltToks) < 3 {
		return 0, common.ErrSaltFormat
	}

	if !bytes.HasPrefix(saltToks[2], _rounds) {
		return RoundsDefault, nil
	}
	roundToks := bytes.Split(saltToks[2], []byte{'='})
	cost, err := strconv.ParseInt(string(roundToks[1]), 10, 0)
	return int(cost), err
}

func (c *crypter) SetSalt(salt common.Salt) { c.Salt = salt }

func GetSalt() common.Salt {
	return common.Salt{
		MagicPrefix:   []byte(MagicPrefix),
		SaltLenMin:    SaltLenMin,
		SaltLenMax:    SaltLenMax,
		RoundsDefault: RoundsDefault,
		RoundsMin:     RoundsMin,
		RoundsMax:     RoundsMax,
	}
}
 07070100000BB0000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002E00000000elemental-cli-0.3.1/vendor/github.com/twpayne 07070100000BB1000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/github.com/twpayne/go-vfs  07070100000BB2000081A4000000000000000000000001645E367C00000004000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/twpayne/go-vfs/.gitignore   /bin07070100000BB3000081A4000000000000000000000001645E367C00000302000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/twpayne/go-vfs/.golangci.yml    linters:
  enable:
  - bodyclose
  - deadcode
  - depguard
  - dogsled
  - dupl
  - errcheck
  - gochecknoglobals
  - gocognit
  - goconst
  - gocritic
  - gocyclo
  - godot
  - godox
  - gofmt
  - goimports
  - golint
  - gomodguard
  - goprintffuncname
  - gosec
  - gosimple
  - govet
  - ineffassign
  - interfacer
  - lll
  - maligned
  - misspell
  - nakedret
  - prealloc
  - rowserrcheck
  - scopelint
  - staticcheck
  - structcheck
  - stylecheck
  - thelper
  - typecheck
  - unconvert
  - unparam
  - unused
  - varcheck
  - whitespace
  disable:
  - funlen
  - gomnd
  - nestif
  - testpackage
  - wsl

linters-settings:
  goimports:
    local-prefixes: github.com/twpayne/go-vfs

issues:
  exclude-rules:
  - linters:
    - scopelint
    path: "_test\\.go"  07070100000BB4000081A4000000000000000000000001645E367C00000434000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/twpayne/go-vfs/LICENSE  The MIT License (MIT)

Copyright (c) 2018 Tom Payne

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
07070100000BB5000081A4000000000000000000000001645E367C00000372000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/twpayne/go-vfs/Makefile GOLANGCI_LINT_VERSION=1.34.1

.PHONY: smoketest
smoketest: test lint

.PHONY: test
test:
	go test ./...

.PHONY: lint
lint: ensure-golangci-lint
	./bin/golangci-lint run

.PHONY: format
format: ensure-gofumports
	find . -name \*.go | xargs ./bin/gofumports -local github.com/twpayne/chezmoi -w

.PHONY: ensure-tools
ensure-tools: \
	ensure-gofumports \
	ensure-golangci-lint

.PHONY: ensure-gofumports
ensure-gofumports:
	if [ ! -x bin/gofumports ] ; then \
		mkdir -p bin ; \
		( cd $$(mktemp -d) && go mod init tmp && GOBIN=${PWD}/bin go get mvdan.cc/gofumpt/gofumports ) ; \
	fi

.PHONY: ensure-golangci-lint
ensure-golangci-lint:
	if [ ! -x bin/golangci-lint ] || ( ./bin/golangci-lint --version | grep -Fqv "version ${GOLANGCI_LINT_VERSION}" ) ; then \
		curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- v${GOLANGCI_LINT_VERSION} ; \
	fi  07070100000BB6000081A4000000000000000000000001645E367C00001768000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/twpayne/go-vfs/README.md    # go-vfs

[![PkgGoDev](https://pkg.go.dev/badge/github.com/twpayne/go-vfs)](https://pkg.go.dev/github.com/twpayne/go-vfs)
[![Report Card](https://goreportcard.com/badge/github.com/twpayne/go-vfs)](https://goreportcard.com/report/github.com/twpayne/go-vfs)

Package `vfs` provides an abstraction of the `os` and `ioutil` packages that is
easy to test.

## Key features

* File system abstraction layer for commonly-used `os` and `ioutil` functions
  from the standard library.

* Powerful and easy-to-use declarative testing framework, `vfst`. You declare
  the desired state of the filesystem after your code has run, and `vfst` tests
  that the filesystem matches that state. For a quick tour of `vfst`'s features,
  see [the examples in the
  documentation](https://godoc.org/github.com/twpayne/go-vfs/vfst#pkg-examples).

* Compatibility with
  [`github.com/spf13/afero`](https://github.com/spf13/afero) and
  [`github.com/src-d/go-billy`](https://github.com/src-d/go-billy).

## Quick start

`vfs` provides implementations of the `FS` interface:

```go
// An FS is an abstraction over commonly-used functions in the os and ioutil
// packages.
type FS interface {
    Chmod(name string, mode os.FileMode) error
    Chown(name string, uid, git int) error
    Chtimes(name string, atime, mtime time.Time) error
    Create(name string) (*os.File, error)
    FileSeparator() rune
    Glob(pattern string) ([]string, error)
    Lchown(name string, uid, git int) error
    Lstat(name string) (os.FileInfo, error)
    Mkdir(name string, perm os.FileMode) error
    Open(name string) (*os.File, error)
    OpenFile(name string, flag int, perm os.ModePerm) (*os.File, error)
    RawPath(name string) (string, error)
    ReadDir(dirname string) ([]os.FileInfo, error)
    ReadFile(filename string) ([]byte, error)
    Readlink(name string) (string, error)
    Remove(name string) error
    RemoveAll(name string) error
    Rename(oldpath, newpath string) error
    Stat(name string) (os.FileInfo, error)
    Symlink(oldname, newname string) error
    Truncate(name string, size int64) error
    WriteFile(filename string, data []byte, perm os.FileMode) error
}
```

To use `vfs`, you write your code to use the `FS` interface, and then use
`vfst` to test it.

`vfs` also provides functions `MkdirAll` (equivalent to `os.MkdirAll`),
`Contains` (an improved `filepath.HasPrefix`), and `Walk` (equivalent to
`filepath.Walk`) that operate on an `FS`.

The implementations of `FS` provided are:

* `OSFS` which calls the underlying `os` and `ioutil` functions directly.

* `PathFS` which transforms all paths to provide a poor-man's `chroot`.

* `ReadOnlyFS` which prevents modification of the underlying FS.

* `TestFS` which assists running tests on a real filesystem but in a temporary
  directory that is easily cleaned up. It uses `OSFS` under the hood.

Example usage:

```go
// writeConfigFile is the function we're going to test. It can make arbitrary
// changes to the filesystem through fs.
func writeConfigFile(fs vfs.FS) error {
    return fs.WriteFile("/home/user/app.conf", []byte(`app config`), 0644)
}

// TestWriteConfigFile is our test function.
func TestWriteConfigFile(t *testing.T) {
    // Create and populate an temporary directory with a home directory.
    fs, cleanup, err := vfst.NewTestFS(map[string]interface{}{
        "/home/user/.bashrc": "# contents of user's .bashrc\n",
    })

    // Check that the directory was populated successfully.
    if err != nil {
        t.Fatalf("vfsTest.NewTestFS(_) == _, _, %v, want _, _, <nil>", err)
    }

    // Ensure that the temporary directory is removed.
    defer cleanup()

    // Call the function we want to test.
    if err := writeConfigFile(fs); err != nil {
        t.Error(err)
    }

    // Check properties of the filesystem after our function has modified it.
    vfst.RunTest(t, fs, "app_conf",
        vfst.PathTest("/home/user/app.conf",
            vfst.TestModeIsRegular,
            vfst.TestModePerm(0644),
            vfst.TestContentsString("app config"),
        ),
    )
}
```

## `github.com/spf13/afero` compatibility

There is a compatibility shim for
[`github.com/spf13/afero`](https://github.com/spf13/afero) in
[`github.com/twpayne/go-vfsafero`](https://github.com/twpayne/go-vfsafero). This
allows you to use `vfst` to test existing code that uses
[`afero.FS`](https://godoc.org/github.com/spf13/afero#Fs). See [the
documentation](https://godoc.org/github.com/twpayne/go-vfsafero) for an example.

## `github.com/src-d/go-billy` compatibility

There is a compatibility shim for
[`github.com/src-d/go-billy`](https://github.com/src-d/go-billy) in
[`github.com/twpayne/go-vfsbilly`](https://github.com/twpayne/go-vfsbilly). This
allows you to use `vfst` to test existing code that uses
[`billy.Filesystem`](https://godoc.org/github.com/src-d/go-billy#Filesystem).
See [the documentation](https://godoc.org/github.com/twpayne/go-vfsbilly) for an
example.

## Motivation

`vfs` was inspired by
[`github.com/spf13/afero`](https://github.com/spf13/afero). So, why not use
`afero`?

* `afero` has several critical bugs in its in-memory mock filesystem
  implementation `MemMapFs`, to the point that it is unusable for non-trivial
  test cases. `vfs` does not attempt to implement an in-memory mock filesystem,
  and instead only provides a thin layer around the standard library's `os` and
  `ioutil` packages, and as such should have fewer bugs.

* `afero` does not support creating or reading symbolic links, and its
  `LstatIfPossible` interface is clumsy to use as it is not part of the
  `afero.Fs` interface. `vfs` provides out-of-the-box support for symbolic links
  with all methods in the `FS` interface.

* `afero` has been effectively abandoned by its author, and a "friendly fork"
  ([`github.com/absfs/afero`](https://github.com/absfs/afero)) has not seen much
  activity. `vfs`, by providing much less functionality than `afero`, should be
  smaller and easier to maintain.

## License

MIT
07070100000BB7000081A4000000000000000000000001645E367C0000059E000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/twpayne/go-vfs/contains.go  package vfs

import (
	"os"
	"path/filepath"
	"syscall"
)

// A Stater implements Stat. It is assumed that the os.FileInfos returned by
// Stat are compatible with os.SameFile.
type Stater interface {
	Stat(string) (os.FileInfo, error)
}

// Contains returns true if p is reachable by traversing through prefix. prefix
// must exist, but p may not. It is an expensive but accurate alternative to the
// deprecated filepath.HasPrefix.
func Contains(fs Stater, p, prefix string) (bool, error) {
	prefixFI, err := fs.Stat(prefix)
	if err != nil {
		return false, err
	}
	for {
		fi, err := fs.Stat(p)
		switch {
		case err == nil:
			if os.SameFile(fi, prefixFI) {
				return true, nil
			}
			goto TryParent
		case os.IsNotExist(err):
			goto TryParent
		case os.IsPermission(err):
			goto TryParent
		default:
			// Remove any os.PathError or os.SyscallError wrapping, if present.
			for {
				if pathError, ok := err.(*os.PathError); ok {
					err = pathError.Err
				} else if syscallError, ok := err.(*os.SyscallError); ok {
					err = syscallError.Err
				} else {
					break
				}
			}
			// Ignore some syscall.Errnos.
			if errno, ok := err.(syscall.Errno); ok {
				if _, ignore := ignoreErrnoInContains[errno]; ignore {
					goto TryParent
				}
			}
			return false, err
		}
	TryParent:
		parentDir := filepath.Dir(p)
		if parentDir == p {
			// Return when we stop making progress.
			return false, nil
		}
		p = parentDir
	}
}
  07070100000BB8000081A4000000000000000000000001645E367C000006BC000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/twpayne/go-vfs/mkdirall.go  package vfs

import (
	"os"
	"path/filepath"
)

// A MkdirStater implements all the functionality needed by MkdirAll.
type MkdirStater interface {
	Mkdir(name string, perm os.FileMode) error
	Stat(name string) (os.FileInfo, error)
}

// MkdirAll is equivalent to os.MkdirAll but operates on fs.
func MkdirAll(fs MkdirStater, path string, perm os.FileMode) error {
	err := fs.Mkdir(path, perm)
	switch {
	case err == nil:
		// Mkdir was successful.
		return nil
	case os.IsExist(err):
		// path already exists, but we don't know whether it's a directory or
		// something else. We get this error if we try to create a subdirectory
		// of a non-directory, for example if the parent directory of path is a
		// file. There's a race condition here between the call to Mkdir and the
		// call to Stat but we can't avoid it because there's not enough
		// information in the returned error from Mkdir. We need to distinguish
		// between "path already exists and is already a directory" and "path
		// already exists and is not a directory". Between the call to Mkdir and
		// the call to Stat path might have changed.
		info, statErr := fs.Stat(path)
		if statErr != nil {
			return statErr
		}
		if !info.IsDir() {
			return err
		}
		return nil
	case os.IsNotExist(err):
		// Parent directory does not exist. Create the parent directory
		// recursively, then try again.
		parentDir := filepath.Dir(path)
		if parentDir == "/" || parentDir == "." {
			// We cannot create the root directory or the current directory, so
			// return the original error.
			return err
		}
		if err := MkdirAll(fs, parentDir, perm); err != nil {
			return err
		}
		return fs.Mkdir(path, perm)
	default:
		// Some other error.
		return err
	}
}
07070100000BB9000081A4000000000000000000000001645E367C00000B5C000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/twpayne/go-vfs/osfs.go  package vfs

import (
	"io/ioutil"
	"os"
	"path/filepath"
	"time"
)

type osfs struct{}

// OSFS is the FS that calls os and ioutil functions directly.
//nolint:gochecknoglobals
var OSFS = &osfs{}

// Chmod implements os.Chmod.
func (osfs) Chmod(name string, mode os.FileMode) error {
	return os.Chmod(name, mode)
}

// Chown implements os.Chown.
func (osfs) Chown(name string, uid, gid int) error {
	return os.Chown(name, uid, gid)
}

// Chtimes implements os.Chtimes.
func (osfs) Chtimes(name string, atime, mtime time.Time) error {
	return os.Chtimes(name, atime, mtime)
}

// Create implements os.Create.
func (osfs) Create(name string) (*os.File, error) {
	return os.Create(name)
}

// Glob implements filepath.Glob.
func (osfs) Glob(pattern string) ([]string, error) {
	return filepath.Glob(pattern)
}

// Lchown implements os.Lchown.
func (osfs) Lchown(name string, uid, gid int) error {
	return os.Lchown(name, uid, gid)
}

// Lstat implements os.Lstat.
func (osfs) Lstat(name string) (os.FileInfo, error) {
	return os.Lstat(name)
}

// Mkdir implements os.Mkdir.
func (osfs) Mkdir(name string, perm os.FileMode) error {
	return os.Mkdir(name, perm)
}

// Open implements os.Open.
func (osfs) Open(name string) (*os.File, error) {
	return os.Open(name)
}

// OpenFile implements os.OpenFile.
func (osfs) OpenFile(name string, flag int, perm os.FileMode) (*os.File, error) {
	return os.OpenFile(name, flag, perm)
}

// PathSeparator returns os.PathSeparator.
func (osfs) PathSeparator() rune {
	return os.PathSeparator
}

// RawPath returns the path to path on the underlying filesystem.
func (osfs) RawPath(path string) (string, error) {
	return path, nil
}

// ReadDir implements ioutil.ReadDir.
func (osfs) ReadDir(dirname string) ([]os.FileInfo, error) {
	return ioutil.ReadDir(dirname)
}

// ReadFile implements ioutil.ReadFile.
func (osfs) ReadFile(dirname string) ([]byte, error) {
	return ioutil.ReadFile(dirname)
}

// Readlink implments os.Readlink.
func (osfs) Readlink(name string) (string, error) {
	return os.Readlink(name)
}

// Remove implements os.Remove.
func (osfs) Remove(name string) error {
	return os.Remove(name)
}

// RemoveAll implements os.RemoveAll.
func (osfs) RemoveAll(name string) error {
	return os.RemoveAll(name)
}

// Rename implements os.Rename.
func (osfs) Rename(oldpath, newpath string) error {
	return os.Rename(oldpath, newpath)
}

// Stat implements os.Stat.
func (osfs) Stat(name string) (os.FileInfo, error) {
	return os.Stat(name)
}

// Symlink implements os.Symlink.
func (osfs) Symlink(oldname, newname string) error {
	return os.Symlink(oldname, newname)
}

// Truncate implements os.Truncate.
func (osfs) Truncate(name string, size int64) error {
	return os.Truncate(name, size)
}

// WriteFile implements ioutil.WriteFile.
func (osfs) WriteFile(filename string, data []byte, perm os.FileMode) error {
	return ioutil.WriteFile(filename, data, perm)
}
07070100000BBA000081A4000000000000000000000001645E367C000016DE000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/twpayne/go-vfs/pathfs.go    package vfs

import (
	"os"
	"path"
	"path/filepath"
	"syscall"
	"time"
)

// A PathFS operates on an existing FS, but prefixes all names with a path. All
// names must be absolute paths, with the exception of symlinks, which may be
// relative.
type PathFS struct {
	fs   FS
	path string
}

// NewPathFS returns a new *PathFS operating on fs and prefixing all names with
// path.
func NewPathFS(fs FS, path string) *PathFS {
	return &PathFS{
		path: filepath.ToSlash(path),
		fs:   fs,
	}
}

// Chmod implements os.Chmod.
func (p *PathFS) Chmod(name string, mode os.FileMode) error {
	realName, err := p.join("Chmod", name)
	if err != nil {
		return err
	}
	return p.fs.Chmod(realName, mode)
}

// Chown implements os.Chown.
func (p *PathFS) Chown(name string, uid, gid int) error {
	realName, err := p.join("Chown", name)
	if err != nil {
		return err
	}
	return p.fs.Chown(realName, uid, gid)
}

// Chtimes implements os.Chtimes.
func (p *PathFS) Chtimes(name string, atime, mtime time.Time) error {
	realName, err := p.join("Chtimes", name)
	if err != nil {
		return err
	}
	return p.fs.Chtimes(realName, atime, mtime)
}

// Create implements os.Create.
func (p *PathFS) Create(name string) (*os.File, error) {
	realName, err := p.join("Create", name)
	if err != nil {
		return nil, err
	}
	return p.fs.Create(realName)
}

// Glob implements filepath.Glob.
func (p *PathFS) Glob(pattern string) ([]string, error) {
	realPattern, err := p.join("Glob", pattern)
	if err != nil {
		return nil, err
	}
	matches, err := p.fs.Glob(realPattern)
	if err != nil {
		return nil, err
	}
	for i, match := range matches {
		matches[i], err = trimPrefix(match, p.path)
		if err != nil {
			return nil, err
		}
	}
	return matches, nil
}

// Join returns p's path joined with name.
func (p *PathFS) Join(op, name string) (string, error) {
	return p.join("Join", name)
}

// Lchown implements os.Lchown.
func (p *PathFS) Lchown(name string, uid, gid int) error {
	realName, err := p.join("Lchown", name)
	if err != nil {
		return err
	}
	return p.fs.Lchown(realName, uid, gid)
}

// Lstat implements os.Lstat.
func (p *PathFS) Lstat(name string) (os.FileInfo, error) {
	realName, err := p.join("Lstat", name)
	if err != nil {
		return nil, err
	}
	return p.fs.Lstat(realName)
}

// Mkdir implements os.Mkdir.
func (p *PathFS) Mkdir(name string, perm os.FileMode) error {
	realName, err := p.join("Mkdir", name)
	if err != nil {
		return err
	}
	return p.fs.Mkdir(realName, perm)
}

// Open implements os.Open.
func (p *PathFS) Open(name string) (*os.File, error) {
	realName, err := p.join("Open", name)
	if err != nil {
		return nil, err
	}
	return p.fs.Open(realName)
}

// OpenFile implements os.OpenFile.
func (p *PathFS) OpenFile(name string, flag int, perm os.FileMode) (*os.File, error) {
	realName, err := p.join("OpenFile", name)
	if err != nil {
		return nil, err
	}
	return p.fs.OpenFile(realName, flag, perm)
}

// PathSeparator implements PathSeparator.
func (p *PathFS) PathSeparator() rune {
	return p.fs.PathSeparator()
}

// RawPath implements RawPath.
func (p *PathFS) RawPath(path string) (string, error) {
	return p.join("RawPath", path)
}

// ReadDir implements ioutil.ReadDir.
func (p *PathFS) ReadDir(dirname string) ([]os.FileInfo, error) {
	realDirname, err := p.join("ReadDir", dirname)
	if err != nil {
		return nil, err
	}
	return p.fs.ReadDir(realDirname)
}

// ReadFile implements ioutil.ReadFile.
func (p *PathFS) ReadFile(filename string) ([]byte, error) {
	realFilename, err := p.join("ReadFile", filename)
	if err != nil {
		return nil, err
	}
	return p.fs.ReadFile(realFilename)
}

// Readlink implements os.Readlink.
func (p *PathFS) Readlink(name string) (string, error) {
	realName, err := p.join("Readlink", name)
	if err != nil {
		return "", err
	}
	return p.fs.Readlink(realName)
}

// Remove implements os.Remove.
func (p *PathFS) Remove(name string) error {
	realName, err := p.join("Remove", name)
	if err != nil {
		return err
	}
	return p.fs.Remove(realName)
}

// RemoveAll implements os.RemoveAll.
func (p *PathFS) RemoveAll(name string) error {
	realName, err := p.join("RemoveAll", name)
	if err != nil {
		return err
	}
	return p.fs.RemoveAll(realName)
}

// Rename implements os.Rename.
func (p *PathFS) Rename(oldpath, newpath string) error {
	realOldpath, err := p.join("Rename", oldpath)
	if err != nil {
		return err
	}
	realNewpath, err := p.join("Rename", newpath)
	if err != nil {
		return err
	}
	return p.fs.Rename(realOldpath, realNewpath)
}

// Stat implements os.Stat.
func (p *PathFS) Stat(name string) (os.FileInfo, error) {
	realName, err := p.join("Stat", name)
	if err != nil {
		return nil, err
	}
	return p.fs.Stat(realName)
}

// Symlink implements os.Symlink.
func (p *PathFS) Symlink(oldname, newname string) error {
	var realOldname string
	if path.IsAbs(oldname) {
		var err error
		realOldname, err = p.join("Symlink", oldname)
		if err != nil {
			return err
		}
	} else {
		realOldname = oldname
	}
	realNewname, err := p.join("Symlink", newname)
	if err != nil {
		return err
	}
	return p.fs.Symlink(realOldname, realNewname)
}

// Truncate implements os.Truncate.
func (p *PathFS) Truncate(name string, size int64) error {
	realName, err := p.join("Truncate", name)
	if err != nil {
		return err
	}
	return p.fs.Truncate(realName, size)
}

// WriteFile implements ioutil.WriteFile.
func (p *PathFS) WriteFile(filename string, data []byte, perm os.FileMode) error {
	realFilename, err := p.join("WriteFile", filename)
	if err != nil {
		return err
	}
	return p.fs.WriteFile(realFilename, data, perm)
}

// join returns p's path joined with name.
func (p *PathFS) join(op, name string) (string, error) {
	name = relativizePath(name)
	if !path.IsAbs(name) {
		return "", &os.PathError{
			Op:   op,
			Path: name,
			Err:  syscall.EPERM,
		}
	}
	return filepath.Join(p.path, name), nil
}
  07070100000BBB000081A4000000000000000000000001645E367C00000231000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/twpayne/go-vfs/posix.go // +build !windows

package vfs

import (
	"strings"
	"syscall"
)

//nolint:gochecknoglobals
var ignoreErrnoInContains = map[syscall.Errno]struct{}{
	syscall.ELOOP:        {},
	syscall.EMLINK:       {},
	syscall.ENAMETOOLONG: {},
	syscall.ENOENT:       {},
	syscall.EOVERFLOW:    {},
}

// relativizePath, on POSIX systems, just returns path.
func relativizePath(path string) string {
	return path
}

// trimPrefix, on POSIX systems, trims prefix from path.
func trimPrefix(path, prefix string) (string, error) {
	return strings.TrimPrefix(path, prefix), nil
}
   07070100000BBC000081A4000000000000000000000001645E367C00000DD1000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/twpayne/go-vfs/readonlyfs.go    package vfs

import (
	"os"
	"syscall"
	"time"
)

// A ReadOnlyFS operates on an existing FS, but any methods that
// modify the FS return an error.
type ReadOnlyFS struct {
	fs FS
}

// NewReadOnlyFS returns a new *ReadOnlyFS operating on fs.
func NewReadOnlyFS(fs FS) *ReadOnlyFS {
	return &ReadOnlyFS{
		fs: fs,
	}
}

// Chmod implements os.Chmod.
func (r *ReadOnlyFS) Chmod(name string, mode os.FileMode) error {
	return permError("Chmod", name)
}

// Chown implements os.Chown.
func (r *ReadOnlyFS) Chown(name string, uid, gid int) error {
	return permError("Chown", name)
}

// Chtimes implements os.Chtimes.
func (r *ReadOnlyFS) Chtimes(name string, atime, mtime time.Time) error {
	return permError("Chtimes", name)
}

// Create implements os.Create.
func (r *ReadOnlyFS) Create(name string) (*os.File, error) {
	return nil, permError("Create", name)
}

// Glob implements filepath.Glob.
func (r *ReadOnlyFS) Glob(pattern string) ([]string, error) {
	return r.fs.Glob(pattern)
}

// Lchown implements os.Lchown.
func (r *ReadOnlyFS) Lchown(name string, uid, gid int) error {
	return permError("Lchown", name)
}

// Lstat implements os.Lstat.
func (r *ReadOnlyFS) Lstat(name string) (os.FileInfo, error) {
	return r.fs.Lstat(name)
}

// Mkdir implements os.Mkdir.
func (r *ReadOnlyFS) Mkdir(name string, perm os.FileMode) error {
	return permError("Mkdir", name)
}

// Open implements os.Open.
func (r *ReadOnlyFS) Open(name string) (*os.File, error) {
	return r.fs.Open(name)
}

// OpenFile implements os.OpenFile.
func (r *ReadOnlyFS) OpenFile(name string, flag int, perm os.FileMode) (*os.File, error) {
	if flag&(os.O_RDONLY|os.O_WRONLY|os.O_RDWR) != os.O_RDONLY {
		return nil, permError("OpenFile", name)
	}
	return r.fs.OpenFile(name, flag, perm)
}

// PathSeparator implements PathSeparator.
func (r *ReadOnlyFS) PathSeparator() rune {
	return r.fs.PathSeparator()
}

// ReadDir implements ioutil.ReadDir.
func (r *ReadOnlyFS) ReadDir(dirname string) ([]os.FileInfo, error) {
	return r.fs.ReadDir(dirname)
}

// ReadFile implements ioutil.ReadFile.
func (r *ReadOnlyFS) ReadFile(filename string) ([]byte, error) {
	return r.fs.ReadFile(filename)
}

// Readlink implments os.Readlink.
func (r *ReadOnlyFS) Readlink(name string) (string, error) {
	return r.fs.Readlink(name)
}

// Remove implements os.Remove.
func (r *ReadOnlyFS) Remove(name string) error {
	return permError("Remove", name)
}

// RemoveAll implements os.RemoveAll.
func (r *ReadOnlyFS) RemoveAll(name string) error {
	return permError("RemoveAll", name)
}

// Rename implements os.Rename.
func (r *ReadOnlyFS) Rename(oldpath, newpath string) error {
	return permError("Rename", oldpath)
}

// RawPath implements RawPath.
func (r *ReadOnlyFS) RawPath(path string) (string, error) {
	return r.fs.RawPath(path)
}

// Stat implements os.Stat.
func (r *ReadOnlyFS) Stat(name string) (os.FileInfo, error) {
	return r.fs.Stat(name)
}

// Symlink implements os.Symlink.
func (r *ReadOnlyFS) Symlink(oldname, newname string) error {
	return permError("Symlink", newname)
}

// Truncate implements os.Truncate.
func (r *ReadOnlyFS) Truncate(name string, size int64) error {
	return permError("Truncate", name)
}

// WriteFile implements ioutil.WriteFile.
func (r *ReadOnlyFS) WriteFile(filename string, data []byte, perm os.FileMode) error {
	return permError("WriteFile", filename)
}

// permError returns an *os.PathError with Err syscall.EPERM.
func permError(op, path string) error {
	return &os.PathError{
		Op:   op,
		Path: path,
		Err:  syscall.EPERM,
	}
}
   07070100000BBD000081A4000000000000000000000001645E367C0000048C000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/twpayne/go-vfs/vfs.go   // Package vfs provides an abstraction of the os and ioutil packages that is
// easy to test.
package vfs

import (
	"os"
	"time"
)

// An FS is an abstraction over commonly-used functions in the os and ioutil
// packages.
type FS interface {
	Chmod(name string, mode os.FileMode) error
	Chown(name string, uid, git int) error
	Chtimes(name string, atime, mtime time.Time) error
	Create(name string) (*os.File, error)
	Glob(pattern string) ([]string, error)
	Lchown(name string, uid, git int) error
	Lstat(name string) (os.FileInfo, error)
	Mkdir(name string, perm os.FileMode) error
	Open(name string) (*os.File, error)
	OpenFile(name string, flag int, perm os.FileMode) (*os.File, error)
	PathSeparator() rune
	RawPath(name string) (string, error)
	ReadDir(dirname string) ([]os.FileInfo, error)
	ReadFile(filename string) ([]byte, error)
	Readlink(name string) (string, error)
	Remove(name string) error
	RemoveAll(name string) error
	Rename(oldpath, newpath string) error
	Stat(name string) (os.FileInfo, error)
	Symlink(oldname, newname string) error
	Truncate(name string, size int64) error
	WriteFile(filename string, data []byte, perm os.FileMode) error
}
07070100000BBE000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/twpayne/go-vfs/vfst 07070100000BBF000081A4000000000000000000000001645E367C00000417000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/twpayne/go-vfs/vfst/test.go // +build !windows

package vfst

import (
	"os"
	"syscall"
	"testing"

	vfs "github.com/twpayne/go-vfs"
)

func init() {
	umask = os.FileMode(syscall.Umask(0))
	syscall.Umask(int(umask))
}

// permEqual returns if perm1 and perm2 represent the same permissions. On
// Windows, it always returns true.
func permEqual(perm1, perm2 os.FileMode) bool {
	return perm1&os.ModePerm&^umask == perm2&os.ModePerm&^umask
}

// TestSysNlink returns a PathTest that verifies that the the path's
// Sys().(*syscall.Stat_t).Nlink is equal to wantNlink. If path's Sys() cannot
// be converted to a *syscall.Stat_t, it does nothing.
func TestSysNlink(wantNlink int) PathTest {
	return func(t *testing.T, fs vfs.FS, path string) {
		info, err := fs.Lstat(path)
		if err != nil {
			t.Errorf("fs.Lstat(%q) == %+v, %v, want !<nil>, <nil>", path, info, err)
			return
		}
		if stat, ok := info.Sys().(*syscall.Stat_t); ok && int(stat.Nlink) != wantNlink {
			t.Errorf("fs.Lstat(%q).Sys().(*syscall.Stat_t).Nlink == %d, want %d", path, stat.Nlink, wantNlink)
		}
	}
}
 07070100000BC0000081A4000000000000000000000001645E367C0000021F000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/twpayne/go-vfs/vfst/test_windows.go package vfst

import (
	"os"
	"testing"

	"github.com/twpayne/go-vfs"
)

// permEqual returns if perm1 and perm2 represent the same permissions. On
// Windows, it always returns true.
func permEqual(perm1, perm2 os.FileMode) bool {
	return true
}

// TestSysNlink returns a PathTest that verifies that the the path's
// Sys().(*syscall.Stat_t).Nlink is equal to wantNlink. If path's Sys() cannot
// be converted to a *syscall.Stat_t, it does nothing.
func TestSysNlink(wantNlink int) PathTest {
	return func(*testing.T, vfs.FS, string) {
	}
}
 07070100000BC1000081A4000000000000000000000001645E367C000004CF000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/twpayne/go-vfs/vfst/testfs.go   package vfst

import (
	"io/ioutil"
	"os"

	vfs "github.com/twpayne/go-vfs"
)

// A TestFS is a virtual filesystem based in a temporary directory.
type TestFS struct {
	vfs.PathFS
	tempDir string
	keep    bool
}

func newTestFS() (*TestFS, func(), error) {
	tempDir, err := ioutil.TempDir("", "go-vfs-vfst")
	if err != nil {
		return nil, nil, err
	}
	t := &TestFS{
		PathFS:  *vfs.NewPathFS(vfs.OSFS, tempDir),
		tempDir: tempDir,
		keep:    false,
	}
	return t, t.cleanup, nil
}

// NewTestFS returns a new *TestFS populated with root and a cleanup function.
func NewTestFS(root interface{}, builderOptions ...BuilderOption) (*TestFS, func(), error) {
	fs, cleanup, err := newTestFS()
	if err != nil {
		cleanup()
		return nil, nil, err
	}
	if err := NewBuilder(builderOptions...).Build(fs, root); err != nil {
		cleanup()
		return nil, nil, err
	}
	return fs, cleanup, nil
}

// Keep prevents t's cleanup function from removing the temporary directory. It
// has no effect if cleanup has already been called.
func (t *TestFS) Keep() {
	t.keep = true
}

// TempDir returns t's temporary directory.
func (t *TestFS) TempDir() string {
	return t.tempDir
}

func (t *TestFS) cleanup() {
	if !t.keep {
		os.RemoveAll(t.tempDir)
	}
}
 07070100000BC2000081A4000000000000000000000001645E367C00003450000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/twpayne/go-vfs/vfst/vfst.go // Package vfst provides helper functions for testing code that uses
// github.com/twpayne/go-vfs.
package vfst

import (
	"bytes"
	"fmt"
	"log"
	"os"
	"path/filepath"
	"sort"
	"strconv"
	"testing"

	vfs "github.com/twpayne/go-vfs"
)

//nolint:gochecknoglobals
var umask os.FileMode

// A Dir is a directory with a specified permissions and zero or more Entries.
type Dir struct {
	Perm    os.FileMode
	Entries map[string]interface{}
}

// A File is a file with a specified permissions and contents.
type File struct {
	Perm     os.FileMode
	Contents []byte
}

// A Symlink is a symbolic link with a specified target.
type Symlink struct {
	Target string
}

// A Test is a test on an vfs.FS.
type Test func(*testing.T, vfs.FS)

// A PathTest is a test on a specified path in an vfs.FS.
type PathTest func(*testing.T, vfs.FS, string)

// A BuilderOption sets an option on a Builder.
type BuilderOption func(*Builder)

// A Builder populates an vfs.FS.
type Builder struct {
	umask   os.FileMode
	verbose bool
}

// BuilderUmask sets a builder's umask.
func BuilderUmask(umask os.FileMode) BuilderOption {
	return func(b *Builder) {
		b.umask = umask
	}
}

// BuilderVerbose sets a builder's verbose flag. When true, the builder will
// log all operations with the standard log package.
func BuilderVerbose(verbose bool) BuilderOption {
	return func(b *Builder) {
		b.verbose = verbose
	}
}

// NewBuilder returns a new Builder with the given options set.
func NewBuilder(options ...BuilderOption) *Builder {
	b := &Builder{
		umask:   umask,
		verbose: false,
	}
	for _, option := range options {
		option(b)
	}
	return b
}

// build is a recursive helper for Build.
func (b *Builder) build(fs vfs.FS, path string, i interface{}) error {
	switch i := i.(type) {
	case []interface{}:
		for _, element := range i {
			if err := b.build(fs, path, element); err != nil {
				return err
			}
		}
		return nil
	case *Dir:
		if parentDir := filepath.Dir(path); parentDir != "." {
			if err := b.MkdirAll(fs, parentDir, 0o777); err != nil {
				return err
			}
		}
		if err := b.Mkdir(fs, path, i.Perm); err != nil {
			return err
		}
		entryNames := make([]string, 0, len(i.Entries))
		for entryName := range i.Entries {
			entryNames = append(entryNames, entryName)
		}
		sort.Strings(entryNames)
		for _, entryName := range entryNames {
			if err := b.build(fs, filepath.Join(path, entryName), i.Entries[entryName]); err != nil {
				return err
			}
		}
		return nil
	case map[string]interface{}:
		if err := b.MkdirAll(fs, path, 0o777); err != nil {
			return err
		}
		entryNames := make([]string, 0, len(i))
		for entryName := range i {
			entryNames = append(entryNames, entryName)
		}
		sort.Strings(entryNames)
		for _, entryName := range entryNames {
			if err := b.build(fs, filepath.Join(path, entryName), i[entryName]); err != nil {
				return err
			}
		}
		return nil
	case map[string]string:
		if err := b.MkdirAll(fs, path, 0o777); err != nil {
			return err
		}
		entryNames := make([]string, 0, len(i))
		for entryName := range i {
			entryNames = append(entryNames, entryName)
		}
		sort.Strings(entryNames)
		for _, entryName := range entryNames {
			if err := b.WriteFile(fs, filepath.Join(path, entryName), []byte(i[entryName]), 0o666); err != nil {
				return err
			}
		}
		return nil
	case *File:
		return b.WriteFile(fs, path, i.Contents, i.Perm)
	case string:
		return b.WriteFile(fs, path, []byte(i), 0o666)
	case []byte:
		return b.WriteFile(fs, path, i, 0o666)
	case *Symlink:
		return b.Symlink(fs, i.Target, path)
	case nil:
		return nil
	default:
		return fmt.Errorf("%s: unsupported type %T", path, i)
	}
}

// Build populates fs from root.
func (b *Builder) Build(fs vfs.FS, root interface{}) error {
	return b.build(fs, "/", root)
}

// Mkdir creates directory path with permissions perm. It is idempotent and
// will not fail if path already exists, is a directory, and has permissions
// perm.
func (b *Builder) Mkdir(fs vfs.FS, path string, perm os.FileMode) error {
	if info, err := fs.Lstat(path); os.IsNotExist(err) {
		if b.verbose {
			log.Printf("mkdir -m 0%o %s", perm&^b.umask, path)
		}
		return fs.Mkdir(path, perm&^b.umask)
	} else if err != nil {
		return err
	} else if !info.IsDir() {
		return fmt.Errorf("%s: not a directory", path)
	} else if gotPerm, wantPerm := info.Mode()&os.ModePerm, perm&^b.umask; !permEqual(gotPerm, wantPerm) {
		return fmt.Errorf("%s has permissions 0%o, want 0%o", path, gotPerm, wantPerm)
	}
	return nil
}

// MkdirAll creates directory path and any missing parent directories with
// permissions perm. It is idempotent and will not file if path already exists
// and is a directory.
func (b *Builder) MkdirAll(fs vfs.FS, path string, perm os.FileMode) error {
	// Check path.
	info, err := fs.Lstat(path)
	switch {
	case err != nil && os.IsNotExist(err):
		// path does not exist, fallthrough to create.
	case err == nil && info.IsDir():
		// path already exists and is a directory.
		return nil
	case err == nil && !info.IsDir():
		// path already exists, but is not a directory.
		return err
	default:
		// Some other error.
		return err
	}

	// Create path.
	if b.verbose {
		log.Printf("mkdir -p -m 0%o %s", perm&^b.umask, path)
	}
	return vfs.MkdirAll(fs, path, perm&^b.umask)
}

// Symlink creates a symbolic link from newname to oldname. It will create any
// missing parent directories with default permissions. It is idempotent and
// will not fail if the symbolic link already exists and points to oldname.
func (b *Builder) Symlink(fs vfs.FS, oldname, newname string) error {
	// Check newname.
	info, err := fs.Lstat(newname)
	switch {
	case err == nil && info.Mode()&os.ModeType != os.ModeSymlink:
		// newname exists, but it's not a symlink.
		return fmt.Errorf("%s: not a symbolic link", newname)
	case err == nil:
		// newname exists, and it's a symlink. Check that it is a symlink to
		// oldname.
		gotTarget, err := fs.Readlink(newname)
		if err != nil {
			return err
		}
		if gotTarget != oldname {
			return fmt.Errorf("%s: has target %s, want %s", newname, gotTarget, oldname)
		}
		return nil
	case os.IsNotExist(err):
		// newname does not exist, fallthrough to create.
	default:
		// Some other error, return it.
		return err
	}

	// Create newname.
	if err := b.MkdirAll(fs, filepath.Dir(newname), 0o777); err != nil {
		return err
	}
	if b.verbose {
		log.Printf("ln -s %s %s", oldname, newname)
	}
	return fs.Symlink(oldname, newname)
}

// WriteFile writes file path withe contents contents and permissions perm. It
// will create any missing parent directories with default permissions. It is
// idempotent and will not fail if the file already exists, has contents
// contents, and permissions perm.
func (b *Builder) WriteFile(fs vfs.FS, path string, contents []byte, perm os.FileMode) error {
	if info, err := fs.Lstat(path); os.IsNotExist(err) {
		// fallthrough to fs.WriteFile
	} else if err != nil {
		return err
	} else if !info.Mode().IsRegular() {
		return fmt.Errorf("%s: not a regular file", path)
	} else if gotPerm, wantPerm := info.Mode()&os.ModePerm, perm&^b.umask; !permEqual(gotPerm, wantPerm) {
		return fmt.Errorf("%s has permissions 0%o, want 0%o", path, gotPerm, wantPerm)
	} else {
		gotContents, err := fs.ReadFile(path)
		if err != nil {
			return err
		}
		if !bytes.Equal(gotContents, contents) {
			return fmt.Errorf("%s: has contents %v, want %v", path, gotContents, contents)
		}
		return nil
	}
	if err := b.MkdirAll(fs, filepath.Dir(path), 0o777); err != nil {
		return err
	}
	if b.verbose {
		log.Printf("install -m 0%o /dev/null %s", perm&^b.umask, path)
	}
	return fs.WriteFile(path, contents, perm&^b.umask)
}

// runTests recursively runs tests on fs.
func runTests(t *testing.T, fs vfs.FS, name string, test interface{}) {
	t.Helper()
	prefix := ""
	if name != "" {
		prefix = name + "_"
	}
	switch test := test.(type) {
	case Test:
		test(t, fs)
	case []Test:
		for i, test := range test {
			t.Run(prefix+strconv.Itoa(i), func(t *testing.T) {
				//nolint:scopelint
				test(t, fs)
			})
		}
	case map[string]Test:
		testNames := make([]string, 0, len(test))
		for testName := range test {
			testNames = append(testNames, testName)
		}
		sort.Strings(testNames)
		for _, testName := range testNames {
			t.Run(prefix+testName, func(t *testing.T) {
				//nolint:scopelint
				test[testName](t, fs)
			})
		}
	case []interface{}:
		for _, u := range test {
			runTests(t, fs, name, u)
		}
	case map[string]interface{}:
		testNames := make([]string, 0, len(test))
		for testName := range test {
			testNames = append(testNames, testName)
		}
		sort.Strings(testNames)
		for _, testName := range testNames {
			runTests(t, fs, prefix+testName, test[testName])
		}
	case nil:
	default:
		t.Fatalf("%s: unsupported type %T", name, test)
	}
}

// RunTests recursively runs tests on fs.
func RunTests(t *testing.T, fs vfs.FS, name string, tests ...interface{}) {
	t.Helper()
	runTests(t, fs, name, tests)
}

// TestContents returns a PathTest that verifies the contents of the file are
// equal to wantContents.
func TestContents(wantContents []byte) PathTest {
	return func(t *testing.T, fs vfs.FS, path string) {
		t.Helper()
		if gotContents, err := fs.ReadFile(path); err != nil || !bytes.Equal(gotContents, wantContents) {
			t.Errorf("fs.ReadFile(%q) == %v, %v, want %v, <nil>", path, gotContents, err, wantContents)
		}
	}
}

// TestContentsString returns a PathTest that verifies the contetnts of the
// file are equal to wantContentsStr.
func TestContentsString(wantContentsStr string) PathTest {
	return func(t *testing.T, fs vfs.FS, path string) {
		t.Helper()
		if gotContents, err := fs.ReadFile(path); err != nil || string(gotContents) != wantContentsStr {
			t.Errorf("fs.ReadFile(%q) == %q, %v, want %q, <nil>", path, gotContents, err, wantContentsStr)
		}
	}
}

// testDoesNotExist is a PathTest that verifies that a file or directory does
// not exist.
//nolint:gochecknoglobals
var testDoesNotExist = func(t *testing.T, fs vfs.FS, path string) {
	t.Helper()
	_, err := fs.Lstat(path)
	if got, want := os.IsNotExist(err), true; got != want {
		t.Errorf("_, err := fs.Lstat(%q); os.IsNotExist(err) == %v, want %v", path, got, want)
	}
}

// TestDoesNotExist is a PathTest that verifies that a file or directory does
// not exist.
//nolint:gochecknoglobals
var TestDoesNotExist PathTest = testDoesNotExist

// TestIsDir is a PathTest that verifies that the path is a directory.
//nolint:gochecknoglobals
var TestIsDir = TestModeType(os.ModeDir)

// TestModePerm returns a PathTest that verifies that the path's permissions
// are equal to wantPerm.
func TestModePerm(wantPerm os.FileMode) PathTest {
	return func(t *testing.T, fs vfs.FS, path string) {
		t.Helper()
		info, err := fs.Lstat(path)
		if err != nil {
			t.Errorf("fs.Lstat(%q) == %+v, %v, want !<nil>, <nil>", path, info, err)
			return
		}
		if gotPerm := info.Mode() & os.ModePerm; !permEqual(gotPerm, wantPerm) {
			t.Errorf("fs.Lstat(%q).Mode()&os.ModePerm == 0%o, want 0%o", path, gotPerm, wantPerm)
		}
	}
}

// TestModeIsRegular is a PathTest that tests that the path is a regular file.
//nolint:gochecknoglobals
var TestModeIsRegular = TestModeType(0)

// TestModeType returns a PathTest that verifies that the path's mode type is
// equal to wantModeType.
func TestModeType(wantModeType os.FileMode) PathTest {
	return func(t *testing.T, fs vfs.FS, path string) {
		t.Helper()
		info, err := fs.Lstat(path)
		if err != nil {
			t.Errorf("fs.Lstat(%q) == %+v, %v, want !<nil>, <nil>", path, info, err)
			return
		}
		if gotModeType := info.Mode() & os.ModeType; gotModeType != wantModeType {
			t.Errorf("fs.Lstat(%q).Mode()&os.ModeType == %v, want %v", path, gotModeType, wantModeType)
		}
	}
}

// TestPath returns a Test that runs pathTests on path.
func TestPath(path string, pathTests ...PathTest) Test {
	return func(t *testing.T, fs vfs.FS) {
		t.Helper()
		for i, pathTest := range pathTests {
			t.Run(strconv.Itoa(i), func(t *testing.T) {
				//nolint:scopelint
				pathTest(t, fs, path)
			})
		}
	}
}

// TestSize returns a PathTest that tests that path's Size() is equal to
// wantSize.
func TestSize(wantSize int64) PathTest {
	return func(t *testing.T, fs vfs.FS, path string) {
		t.Helper()
		info, err := fs.Lstat(path)
		if err != nil {
			t.Errorf("fs.Lstat(%q) == %+v, %v, want !<nil>, <nil>", path, info, err)
			return
		}
		if gotSize := info.Size(); gotSize != wantSize {
			t.Errorf("fs.Lstat(%q).Size() == %d, want %d", path, gotSize, wantSize)
		}
	}
}

// TestSymlinkTarget returns a PathTest that tests that path's target is wantTarget.
func TestSymlinkTarget(wantTarget string) PathTest {
	return func(t *testing.T, fs vfs.FS, path string) {
		t.Helper()
		if gotTarget, err := fs.Readlink(path); err != nil || gotTarget != wantTarget {
			t.Errorf("fs.Readlink(%q) == %q, %v, want %q, <nil>", path, gotTarget, err, wantTarget)
			return
		}
	}
}

// TestMinSize returns a PathTest that tests that path's Size() is at least
// wantMinSize.
func TestMinSize(wantMinSize int64) PathTest {
	return func(t *testing.T, fs vfs.FS, path string) {
		t.Helper()
		info, err := fs.Lstat(path)
		if err != nil {
			t.Errorf("fs.Lstat(%q) == %+v, %v, want !<nil>, <nil>", path, info, err)
			return
		}
		if gotSize := info.Size(); gotSize < wantMinSize {
			t.Errorf("fs.Lstat(%q).Size() == %d, want >=%d", path, gotSize, wantMinSize)
		}
	}
}
07070100000BC3000081A4000000000000000000000001645E367C00000719000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/twpayne/go-vfs/walk.go  package vfs

import (
	"os"
	"path/filepath"
	"sort"
)

// SkipDir is filepath.SkipDir.
//nolint:gochecknoglobals
var SkipDir = filepath.SkipDir

// A LstatReadDirer implements all the functionality needed by Walk.
type LstatReadDirer interface {
	Lstat(name string) (os.FileInfo, error)
	ReadDir(dirname string) ([]os.FileInfo, error)
}

type infosByName []os.FileInfo

func (is infosByName) Len() int           { return len(is) }
func (is infosByName) Less(i, j int) bool { return is[i].Name() < is[j].Name() }
func (is infosByName) Swap(i, j int)      { is[i], is[j] = is[j], is[i] }

// walk recursively walks fs from path.
func walk(fs LstatReadDirer, path string, walkFn filepath.WalkFunc, info os.FileInfo, err error) error {
	if err != nil {
		return walkFn(path, info, err)
	}
	err = walkFn(path, info, nil)
	if !info.IsDir() {
		return err
	}
	if err == filepath.SkipDir {
		return nil
	}
	infos, err := fs.ReadDir(path)
	if err != nil {
		return err
	}
	sort.Sort(infosByName(infos))
	for _, info := range infos {
		name := info.Name()
		if name == "." || name == ".." {
			continue
		}
		if err := walk(fs, filepath.Join(path, info.Name()), walkFn, info, nil); err != nil {
			return err
		}
	}
	return nil
}

// Walk is the equivalent of filepath.Walk but operates on fs. Entries are
// returned in lexicographical order.
func Walk(fs LstatReadDirer, path string, walkFn filepath.WalkFunc) error {
	info, err := fs.Lstat(path)
	return walk(fs, path, walkFn, info, err)
}

// WalkSlash is the equivalent of Walk but all paths are converted to use
// forward slashes with filepath.ToSlash.
func WalkSlash(fs LstatReadDirer, path string, walkFn filepath.WalkFunc) error {
	return Walk(fs, path, func(path string, info os.FileInfo, err error) error {
		return walkFn(filepath.ToSlash(path), info, err)
	})
}
   07070100000BC4000081A4000000000000000000000001645E367C000004F7000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/twpayne/go-vfs/windows.go   // +build windows

package vfs

import (
	"path/filepath"
	"strings"
	"syscall"

	"golang.org/x/sys/windows"
)

var ignoreErrnoInContains = map[syscall.Errno]struct{}{
	syscall.ELOOP:                       {},
	syscall.EMLINK:                      {},
	syscall.ENAMETOOLONG:                {},
	syscall.ENOENT:                      {},
	syscall.EOVERFLOW:                   {},
	windows.ERROR_CANT_RESOLVE_FILENAME: {},
}

// relativizePath, on Windows, strips any leading volume name from path. Since
// this is used to prepare paths to have the prefix prepended, returned values
// use slashes instead of backslashes.
func relativizePath(path string) string {
	if volumeName := filepath.VolumeName(path); volumeName != "" {
		path = path[len(volumeName):]
	}
	return filepath.ToSlash(path)
}

// trimPrefix, on Windows, trims prefix from path and returns an absolute path.
// prefix must be a /-separated path. Since this is used to prepare results to
// be returned to the calling client, returned values use backslashes instead of
// slashes
func trimPrefix(path, prefix string) (string, error) {
	trimmedPath, err := filepath.Abs(strings.TrimPrefix(filepath.ToSlash(path), prefix))
	if err != nil {
		return "", err
	}
	return filepath.FromSlash(trimmedPath), nil
}
 07070100000BC5000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003000000000elemental-cli-0.3.1/vendor/github.com/ulikunitz   07070100000BC6000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000003300000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz    07070100000BC7000081A4000000000000000000000001645E367C00000116000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/.gitignore # .gitignore

TODO.html
README.html

lzma/writer.txt
lzma/reader.txt

cmd/gxz/gxz
cmd/xb/xb

# test executables
*.test

# profile files
*.out

# vim swap file
.*.swp

# executables on windows
*.exe

# default compression test file
enwik8*

# file generated by example
example.xz  07070100000BC8000081A4000000000000000000000001645E367C000005A7000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/LICENSE    Copyright (c) 2014-2022  Ulrich Kunitz
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
  list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice,
  this list of conditions and the following disclaimer in the documentation
  and/or other materials provided with the distribution.

* My name, Ulrich Kunitz, may not be used to endorse or promote products
  derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 07070100000BC9000081A4000000000000000000000001645E367C00000811000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/README.md  # Package xz

This Go language package supports the reading and writing of xz
compressed streams. It includes also a gxz command for compressing and
decompressing data. The package is completely written in Go and doesn't
have any dependency on any C code.

The package is currently under development. There might be bugs and APIs
are not considered stable. At this time the package cannot compete with
the xz tool regarding compression speed and size. The algorithms there
have been developed over a long time and are highly optimized. However
there are a number of improvements planned and I'm very optimistic about
parallel compression and decompression. Stay tuned!

## Using the API

The following example program shows how to use the API.

```go
package main

import (
    "bytes"
    "io"
    "log"
    "os"

    "github.com/ulikunitz/xz"
)

func main() {
    const text = "The quick brown fox jumps over the lazy dog.\n"
    var buf bytes.Buffer
    // compress text
    w, err := xz.NewWriter(&buf)
    if err != nil {
        log.Fatalf("xz.NewWriter error %s", err)
    }
    if _, err := io.WriteString(w, text); err != nil {
        log.Fatalf("WriteString error %s", err)
    }
    if err := w.Close(); err != nil {
        log.Fatalf("w.Close error %s", err)
    }
    // decompress buffer and write output to stdout
    r, err := xz.NewReader(&buf)
    if err != nil {
        log.Fatalf("NewReader error %s", err)
    }
    if _, err = io.Copy(os.Stdout, r); err != nil {
        log.Fatalf("io.Copy error %s", err)
    }
}
```

## Documentation

You can find the full documentation at [pkg.go.dev](https://pkg.go.dev/github.com/ulikunitz/xz).

## Using the gxz compression tool

The package includes a gxz command line utility for compression and
decompression.

Use following command for installation:

    $ go get github.com/ulikunitz/xz/cmd/gxz

To test it call the following command.

    $ gxz bigfile

After some time a much smaller file bigfile.xz will replace bigfile.
To decompress it use the following command.

    $ gxz -d bigfile.xz

   07070100000BCA000081A4000000000000000000000001645E367C000000FB000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/SECURITY.md    # Security Policy

## Supported Versions

Currently the last minor version v0.5.x is supported.

## Reporting a Vulnerability

Report a vulnerability by creating a Github issue at
<https://github.com/ulikunitz/xz/issues>. Expect a response in a week.
 07070100000BCB000081A4000000000000000000000001645E367C00002BFB000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/TODO.md    # TODO list

## Release v0.5.x

1. Support check flag in gxz command.

## Release v0.6

1. Review encoder and check for lzma improvements under xz.
2. Fix binary tree matcher.
3. Compare compression ratio with xz tool using comparable parameters and optimize parameters
4. rename operation action and make it a simple type of size 8
5. make maxMatches, wordSize parameters
6. stop searching after a certain length is found (parameter sweetLen)

## Release v0.7

1. Optimize code
2. Do statistical analysis to get linear presets.
3. Test sync.Pool compatability for xz and lzma Writer and Reader
4. Fuzz optimized code.

## Release v0.8

1. Support parallel go routines for writing and reading xz files.
2. Support a ReaderAt interface for xz files with small block sizes.
3. Improve compatibility between gxz and xz
4. Provide manual page for gxz

## Release v0.9

1. Improve documentation
2. Fuzz again

## Release v1.0

1. Full functioning gxz
2. Add godoc URL to README.md (godoc.org)
3. Resolve all issues.
4. Define release candidates.
5. Public announcement.

## Package lzma

### v0.6

* Rewrite Encoder into a simple greedy one-op-at-a-time encoder including
  * simple scan at the dictionary head for the same byte
  * use the killer byte (requiring matches to get longer, the first test should be the byte that would make the match longer)

## Optimizations

* There may be a lot of false sharing in lzma. State; check whether this  can be improved by reorganizing the internal structure of it.

* Check whether batching encoding and decoding improves speed.

### DAG optimizations

* Use full buffer to create minimal bit-length above range encoder.
* Might be too slow (see v0.4)

### Different match finders

* hashes with 2, 3 characters additional to 4 characters
* binary trees with 2-7 characters (uint64 as key, use uint32 as

  pointers into a an array)

* rb-trees with 2-7 characters (uint64 as key, use uint32 as pointers

  into an array with bit-steeling for the colors)

## Release Procedure

* execute goch -l for all packages; probably with lower param like 0.5.
* check orthography with gospell
* Write release notes in doc/relnotes.
* Update README.md
* xb copyright . in xz directory to ensure all new files have Copyright header
* `VERSION=<version> go generate github.com/ulikunitz/xz/...` to update version files
* Execute test for Linux/amd64, Linux/x86 and Windows/amd64.
* Update TODO.md - write short log entry
* `git checkout master && git merge dev`
* `git tag -a <version>`
* `git push`

## Log

### 2022-12-12

Matt Dantay (@bodgit) reported an issue with the LZMA reader. The implementation
returned an error if the dictionary size was less than 4096 byte, but the
recommendation stated the actual used window size should be set to 4096 byte in
that case. It actually was the pull request
[#52](https://github.com/ulikunitz/xz/pull/52). The new patch v0.5.11 will fix
it.

### 2021-02-02

Mituo Heijo has fuzzed xz and found a bug in the function readIndexBody. The
function allocated a slice of records immediately after reading the value
without further checks. Sincex the number has been too large the make function
did panic. The fix is to check the number against the expected number of records
before allocating the records.

### 2020-12-17

Release v0.5.9 fixes warnings, a typo and adds SECURITY.md.

One fix is interesting.

```go
const (
  a byte = 0x1
  b      = 0x2
)
```

The constants a and b don't have the same type. Correct is

```go
const (
  a byte = 0x1
  b byte = 0x2
)
```

### 2020-08-19

Release v0.5.8 fixes issue
[issue #35](https://github.com/ulikunitz/xz/issues/35).

### 2020-02-24

Release v0.5.7 supports the check-ID None and fixes
[issue #27](https://github.com/ulikunitz/xz/issues/27).

### 2019-02-20

Release v0.5.6 supports the go.mod file.

### 2018-10-28

Release v0.5.5 fixes issues #19 observing ErrLimit outputs.

### 2017-06-05

Release v0.5.4 fixes issues #15 of another problem with the padding size
check for the xz block header. I removed the check completely.

### 2017-02-15

Release v0.5.3 fixes issue #12 regarding the decompression of an empty
XZ stream. Many thanks to Tomasz Kłak, who reported the issue.

### 2016-12-02

Release v0.5.2 became necessary to allow the decoding of xz files with
4-byte padding in the block header. Many thanks to Greg, who reported
the issue.

### 2016-07-23

Release v0.5.1 became necessary to fix problems with 32-bit platforms.
Many thanks to Bruno Brigas, who reported the issue.

### 2016-07-04

Release v0.5 provides improvements to the compressor and provides support for
the decompression of xz files with multiple xz streams.

### 2016-01-31

Another compression rate increase by checking the byte at length of the
best match first, before checking the whole prefix. This makes the
compressor even faster. We have now a large time budget to beat the
compression ratio of the xz tool. For enwik8 we have now over 40 seconds
to reduce the compressed file size for another 7 MiB.

### 2016-01-30

I simplified the encoder. Speed and compression rate increased
dramatically. A high compression rate affects also the decompression
speed. The approach with the buffer and optimizing for operation
compression rate has not been successful. Going for the maximum length
appears to be the best approach.

### 2016-01-28

The release v0.4 is ready. It provides a working xz implementation,
which is rather slow, but works and is interoperable with the xz tool.
It is an important milestone.

### 2016-01-10

I have the first working implementation of an xz reader and writer. I'm
happy about reaching this milestone.

### 2015-12-02

I'm now ready to implement xz because, I have a working LZMA2
implementation. I decided today that v0.4 will use the slow encoder
using the operations buffer to be able to go back, if I intend to do so.

### 2015-10-21

I have restarted the work on the library. While trying to implement
LZMA2, I discovered that I need to resimplify the encoder and decoder
functions. The option approach is too complicated. Using a limited byte
writer and not caring for written bytes at all and not to try to handle
uncompressed data simplifies the LZMA encoder and decoder much.
Processing uncompressed data and handling limits is a feature of the
LZMA2 format not of LZMA.

I learned an interesting method from the LZO format. If the last copy is
too far away they are moving the head one 2 bytes and not 1 byte to
reduce processing times.

### 2015-08-26

I have now reimplemented the lzma package. The code is reasonably fast,
but can still be optimized. The next step is to implement LZMA2 and then
xz.

### 2015-07-05

Created release v0.3. The version is the foundation for a full xz
implementation that is the target of v0.4.

### 2015-06-11

The gflag package has been developed because I couldn't use flag and
pflag for a fully compatible support of gzip's and lzma's options. It
seems to work now quite nicely.

### 2015-06-05

The overflow issue was interesting to research, however Henry S. Warren
Jr. Hacker's Delight book was very helpful as usual and had the issue
explained perfectly. Fefe's information on his website was based on the
C FAQ and quite bad, because it didn't address the issue of -MININT ==
MININT.

### 2015-06-04

It has been a productive day. I improved the interface of lzma. Reader
and lzma. Writer and fixed the error handling.

### 2015-06-01

By computing the bit length of the LZMA operations I was able to
improve the greedy algorithm implementation. By using an 8 MByte buffer
the compression rate was not as good as for xz but already better then
gzip default.

Compression is currently slow, but this is something we will be able to
improve over time.

### 2015-05-26

Checked the license of ogier/pflag. The binary lzmago binary should
include the license terms for the pflag library.

I added the endorsement clause as used by Google for the Go sources the
LICENSE file.

### 2015-05-22

The package lzb contains now the basic implementation for creating or
reading LZMA byte streams. It allows the support for the implementation
of the DAG-shortest-path algorithm for the compression function.

### 2015-04-23

Completed yesterday the lzbase classes. I'm a little bit concerned that
using the components may require too much code, but on the other hand
there is a lot of flexibility.

### 2015-04-22

Implemented Reader and Writer during the Bayern game against Porto. The
second half gave me enough time.

### 2015-04-21

While showering today morning I discovered that the design for OpEncoder
and OpDecoder doesn't work, because encoding/decoding might depend on
the current status of the dictionary. This is not exactly the right way
to start the day.

Therefore we need to keep the Reader and Writer design. This time around
we simplify it by ignoring size limits. These can be added by wrappers
around the Reader and Writer interfaces. The Parameters type isn't
needed anymore.

However I will implement a ReaderState and WriterState type to use
static typing to ensure the right State object is combined with the
right lzbase. Reader and lzbase. Writer.

As a start I have implemented ReaderState and WriterState to ensure
that the state for reading is only used by readers and WriterState only
used by Writers.

### 2015-04-20

Today I implemented the OpDecoder and tested OpEncoder and OpDecoder.

### 2015-04-08

Came up with a new simplified design for lzbase. I implemented already
the type State that replaces OpCodec.

### 2015-04-06

The new lzma package is now fully usable and lzmago is using it now. The
old lzma package has been completely removed.

### 2015-04-05

Implemented lzma. Reader and tested it.

### 2015-04-04

Implemented baseReader by adapting code form lzma. Reader.

### 2015-04-03

The opCodec has been copied yesterday to lzma2. opCodec has a high
number of dependencies on other files in lzma2. Therefore I had to copy
almost all files from lzma.

### 2015-03-31

Removed only a TODO item.

However in Francesco Campoy's presentation "Go for Javaneros
(Javaïstes?)" is the the idea that using an embedded field E, all the
methods of E will be defined on T. If E is an interface T satisfies E.

<https://talks.golang.org/2014/go4java.slide#51>

I have never used this, but it seems to be a cool idea.

### 2015-03-30

Finished the type writerDict and wrote a simple test.

### 2015-03-25

I started to implement the writerDict.

### 2015-03-24

After thinking long about the LZMA2 code and several false starts, I
have now a plan to create a self-sufficient lzma2 package that supports
the classic LZMA format as well as LZMA2. The core idea is to support a
baseReader and baseWriter type that support the basic LZMA stream
without any headers. Both types must support the reuse of dictionaries
and the opCodec.

### 2015-01-10

1. Implemented simple lzmago tool
2. Tested tool against large 4.4G file
   * compression worked correctly; tested decompression with lzma
   * decompression hits a full buffer condition
3. Fixed a bug in the compressor and wrote a test for it
4. Executed full cycle for 4.4 GB file; performance can be improved ;-)

### 2015-01-11

* Release v0.2 because of the working LZMA encoder and decoder
 07070100000BCC000081A4000000000000000000000001645E367C000006DC000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/bits.go    // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package xz

import (
	"errors"
	"io"
)

// putUint32LE puts the little-endian representation of x into the first
// four bytes of p.
func putUint32LE(p []byte, x uint32) {
	p[0] = byte(x)
	p[1] = byte(x >> 8)
	p[2] = byte(x >> 16)
	p[3] = byte(x >> 24)
}

// putUint64LE puts the little-endian representation of x into the first
// eight bytes of p.
func putUint64LE(p []byte, x uint64) {
	p[0] = byte(x)
	p[1] = byte(x >> 8)
	p[2] = byte(x >> 16)
	p[3] = byte(x >> 24)
	p[4] = byte(x >> 32)
	p[5] = byte(x >> 40)
	p[6] = byte(x >> 48)
	p[7] = byte(x >> 56)
}

// uint32LE converts a little endian representation to an uint32 value.
func uint32LE(p []byte) uint32 {
	return uint32(p[0]) | uint32(p[1])<<8 | uint32(p[2])<<16 |
		uint32(p[3])<<24
}

// putUvarint puts a uvarint representation of x into the byte slice.
func putUvarint(p []byte, x uint64) int {
	i := 0
	for x >= 0x80 {
		p[i] = byte(x) | 0x80
		x >>= 7
		i++
	}
	p[i] = byte(x)
	return i + 1
}

// errOverflow indicates an overflow of the 64-bit unsigned integer.
var errOverflowU64 = errors.New("xz: uvarint overflows 64-bit unsigned integer")

// readUvarint reads a uvarint from the given byte reader.
func readUvarint(r io.ByteReader) (x uint64, n int, err error) {
	const maxUvarintLen = 10

	var s uint
	i := 0
	for {
		b, err := r.ReadByte()
		if err != nil {
			return x, i, err
		}
		i++
		if i > maxUvarintLen {
			return x, i, errOverflowU64
		}
		if b < 0x80 {
			if i == maxUvarintLen && b > 1 {
				return x, i, errOverflowU64
			}
			return x | uint64(b)<<s, i, nil
		}
		x |= uint64(b&0x7f) << s
		s += 7
	}
}
07070100000BCD000081A4000000000000000000000001645E367C0000056C000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/crc.go // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package xz

import (
	"hash"
	"hash/crc32"
	"hash/crc64"
)

// crc32Hash implements the hash.Hash32 interface with Sum returning the
// crc32 value in little-endian encoding.
type crc32Hash struct {
	hash.Hash32
}

// Sum returns the crc32 value as little endian.
func (h crc32Hash) Sum(b []byte) []byte {
	p := make([]byte, 4)
	putUint32LE(p, h.Hash32.Sum32())
	b = append(b, p...)
	return b
}

// newCRC32 returns a CRC-32 hash that returns the 64-bit value in
// little-endian encoding using the IEEE polynomial.
func newCRC32() hash.Hash {
	return crc32Hash{Hash32: crc32.NewIEEE()}
}

// crc64Hash implements the Hash64 interface with Sum returning the
// CRC-64 value in little-endian encoding.
type crc64Hash struct {
	hash.Hash64
}

// Sum returns the CRC-64 value in little-endian encoding.
func (h crc64Hash) Sum(b []byte) []byte {
	p := make([]byte, 8)
	putUint64LE(p, h.Hash64.Sum64())
	b = append(b, p...)
	return b
}

// crc64Table is used to create a CRC-64 hash.
var crc64Table = crc64.MakeTable(crc64.ECMA)

// newCRC64 returns a CRC-64 hash that returns the 64-bit value in
// little-endian encoding using the ECMA polynomial.
func newCRC64() hash.Hash {
	return crc64Hash{Hash64: crc64.New(crc64Table)}
}
07070100000BCE000081A4000000000000000000000001645E367C00003E40000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/format.go  // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package xz

import (
	"bytes"
	"crypto/sha256"
	"errors"
	"fmt"
	"hash"
	"hash/crc32"
	"io"

	"github.com/ulikunitz/xz/lzma"
)

// allZeros checks whether a given byte slice has only zeros.
func allZeros(p []byte) bool {
	for _, c := range p {
		if c != 0 {
			return false
		}
	}
	return true
}

// padLen returns the length of the padding required for the given
// argument.
func padLen(n int64) int {
	k := int(n % 4)
	if k > 0 {
		k = 4 - k
	}
	return k
}

/*** Header ***/

// headerMagic stores the magic bytes for the header
var headerMagic = []byte{0xfd, '7', 'z', 'X', 'Z', 0x00}

// HeaderLen provides the length of the xz file header.
const HeaderLen = 12

// Constants for the checksum methods supported by xz.
const (
	None   byte = 0x0
	CRC32  byte = 0x1
	CRC64  byte = 0x4
	SHA256 byte = 0xa
)

// errInvalidFlags indicates that flags are invalid.
var errInvalidFlags = errors.New("xz: invalid flags")

// verifyFlags returns the error errInvalidFlags if the value is
// invalid.
func verifyFlags(flags byte) error {
	switch flags {
	case None, CRC32, CRC64, SHA256:
		return nil
	default:
		return errInvalidFlags
	}
}

// flagstrings maps flag values to strings.
var flagstrings = map[byte]string{
	None:   "None",
	CRC32:  "CRC-32",
	CRC64:  "CRC-64",
	SHA256: "SHA-256",
}

// flagString returns the string representation for the given flags.
func flagString(flags byte) string {
	s, ok := flagstrings[flags]
	if !ok {
		return "invalid"
	}
	return s
}

// newHashFunc returns a function that creates hash instances for the
// hash method encoded in flags.
func newHashFunc(flags byte) (newHash func() hash.Hash, err error) {
	switch flags {
	case None:
		newHash = newNoneHash
	case CRC32:
		newHash = newCRC32
	case CRC64:
		newHash = newCRC64
	case SHA256:
		newHash = sha256.New
	default:
		err = errInvalidFlags
	}
	return
}

// header provides the actual content of the xz file header: the flags.
type header struct {
	flags byte
}

// Errors returned by readHeader.
var errHeaderMagic = errors.New("xz: invalid header magic bytes")

// ValidHeader checks whether data is a correct xz file header. The
// length of data must be HeaderLen.
func ValidHeader(data []byte) bool {
	var h header
	err := h.UnmarshalBinary(data)
	return err == nil
}

// String returns a string representation of the flags.
func (h header) String() string {
	return flagString(h.flags)
}

// UnmarshalBinary reads header from the provided data slice.
func (h *header) UnmarshalBinary(data []byte) error {
	// header length
	if len(data) != HeaderLen {
		return errors.New("xz: wrong file header length")
	}

	// magic header
	if !bytes.Equal(headerMagic, data[:6]) {
		return errHeaderMagic
	}

	// checksum
	crc := crc32.NewIEEE()
	crc.Write(data[6:8])
	if uint32LE(data[8:]) != crc.Sum32() {
		return errors.New("xz: invalid checksum for file header")
	}

	// stream flags
	if data[6] != 0 {
		return errInvalidFlags
	}
	flags := data[7]
	if err := verifyFlags(flags); err != nil {
		return err
	}

	h.flags = flags
	return nil
}

// MarshalBinary generates the xz file header.
func (h *header) MarshalBinary() (data []byte, err error) {
	if err = verifyFlags(h.flags); err != nil {
		return nil, err
	}

	data = make([]byte, 12)
	copy(data, headerMagic)
	data[7] = h.flags

	crc := crc32.NewIEEE()
	crc.Write(data[6:8])
	putUint32LE(data[8:], crc.Sum32())

	return data, nil
}

/*** Footer ***/

// footerLen defines the length of the footer.
const footerLen = 12

// footerMagic contains the footer magic bytes.
var footerMagic = []byte{'Y', 'Z'}

// footer represents the content of the xz file footer.
type footer struct {
	indexSize int64
	flags     byte
}

// String prints a string representation of the footer structure.
func (f footer) String() string {
	return fmt.Sprintf("%s index size %d", flagString(f.flags), f.indexSize)
}

// Minimum and maximum for the size of the index (backward size).
const (
	minIndexSize = 4
	maxIndexSize = (1 << 32) * 4
)

// MarshalBinary converts footer values into an xz file footer. Note
// that the footer value is checked for correctness.
func (f *footer) MarshalBinary() (data []byte, err error) {
	if err = verifyFlags(f.flags); err != nil {
		return nil, err
	}
	if !(minIndexSize <= f.indexSize && f.indexSize <= maxIndexSize) {
		return nil, errors.New("xz: index size out of range")
	}
	if f.indexSize%4 != 0 {
		return nil, errors.New(
			"xz: index size not aligned to four bytes")
	}

	data = make([]byte, footerLen)

	// backward size (index size)
	s := (f.indexSize / 4) - 1
	putUint32LE(data[4:], uint32(s))
	// flags
	data[9] = f.flags
	// footer magic
	copy(data[10:], footerMagic)

	// CRC-32
	crc := crc32.NewIEEE()
	crc.Write(data[4:10])
	putUint32LE(data, crc.Sum32())

	return data, nil
}

// UnmarshalBinary sets the footer value by unmarshalling an xz file
// footer.
func (f *footer) UnmarshalBinary(data []byte) error {
	if len(data) != footerLen {
		return errors.New("xz: wrong footer length")
	}

	// magic bytes
	if !bytes.Equal(data[10:], footerMagic) {
		return errors.New("xz: footer magic invalid")
	}

	// CRC-32
	crc := crc32.NewIEEE()
	crc.Write(data[4:10])
	if uint32LE(data) != crc.Sum32() {
		return errors.New("xz: footer checksum error")
	}

	var g footer
	// backward size (index size)
	g.indexSize = (int64(uint32LE(data[4:])) + 1) * 4

	// flags
	if data[8] != 0 {
		return errInvalidFlags
	}
	g.flags = data[9]
	if err := verifyFlags(g.flags); err != nil {
		return err
	}

	*f = g
	return nil
}

/*** Block Header ***/

// blockHeader represents the content of an xz block header.
type blockHeader struct {
	compressedSize   int64
	uncompressedSize int64
	filters          []filter
}

// String converts the block header into a string.
func (h blockHeader) String() string {
	var buf bytes.Buffer
	first := true
	if h.compressedSize >= 0 {
		fmt.Fprintf(&buf, "compressed size %d", h.compressedSize)
		first = false
	}
	if h.uncompressedSize >= 0 {
		if !first {
			buf.WriteString(" ")
		}
		fmt.Fprintf(&buf, "uncompressed size %d", h.uncompressedSize)
		first = false
	}
	for _, f := range h.filters {
		if !first {
			buf.WriteString(" ")
		}
		fmt.Fprintf(&buf, "filter %s", f)
		first = false
	}
	return buf.String()
}

// Masks for the block flags.
const (
	filterCountMask         = 0x03
	compressedSizePresent   = 0x40
	uncompressedSizePresent = 0x80
	reservedBlockFlags      = 0x3C
)

// errIndexIndicator signals that an index indicator (0x00) has been found
// instead of an expected block header indicator.
var errIndexIndicator = errors.New("xz: found index indicator")

// readBlockHeader reads the block header.
func readBlockHeader(r io.Reader) (h *blockHeader, n int, err error) {
	var buf bytes.Buffer
	buf.Grow(20)

	// block header size
	z, err := io.CopyN(&buf, r, 1)
	n = int(z)
	if err != nil {
		return nil, n, err
	}
	s := buf.Bytes()[0]
	if s == 0 {
		return nil, n, errIndexIndicator
	}

	// read complete header
	headerLen := (int(s) + 1) * 4
	buf.Grow(headerLen - 1)
	z, err = io.CopyN(&buf, r, int64(headerLen-1))
	n += int(z)
	if err != nil {
		return nil, n, err
	}

	// unmarshal block header
	h = new(blockHeader)
	if err = h.UnmarshalBinary(buf.Bytes()); err != nil {
		return nil, n, err
	}

	return h, n, nil
}

// readSizeInBlockHeader reads the uncompressed or compressed size
// fields in the block header. The present value informs the function
// whether the respective field is actually present in the header.
func readSizeInBlockHeader(r io.ByteReader, present bool) (n int64, err error) {
	if !present {
		return -1, nil
	}
	x, _, err := readUvarint(r)
	if err != nil {
		return 0, err
	}
	if x >= 1<<63 {
		return 0, errors.New("xz: size overflow in block header")
	}
	return int64(x), nil
}

// UnmarshalBinary unmarshals the block header.
func (h *blockHeader) UnmarshalBinary(data []byte) error {
	// Check header length
	s := data[0]
	if data[0] == 0 {
		return errIndexIndicator
	}
	headerLen := (int(s) + 1) * 4
	if len(data) != headerLen {
		return fmt.Errorf("xz: data length %d; want %d", len(data),
			headerLen)
	}
	n := headerLen - 4

	// Check CRC-32
	crc := crc32.NewIEEE()
	crc.Write(data[:n])
	if crc.Sum32() != uint32LE(data[n:]) {
		return errors.New("xz: checksum error for block header")
	}

	// Block header flags
	flags := data[1]
	if flags&reservedBlockFlags != 0 {
		return errors.New("xz: reserved block header flags set")
	}

	r := bytes.NewReader(data[2:n])

	// Compressed size
	var err error
	h.compressedSize, err = readSizeInBlockHeader(
		r, flags&compressedSizePresent != 0)
	if err != nil {
		return err
	}

	// Uncompressed size
	h.uncompressedSize, err = readSizeInBlockHeader(
		r, flags&uncompressedSizePresent != 0)
	if err != nil {
		return err
	}

	h.filters, err = readFilters(r, int(flags&filterCountMask)+1)
	if err != nil {
		return err
	}

	// Check padding
	// Since headerLen is a multiple of 4 we don't need to check
	// alignment.
	k := r.Len()
	// The standard spec says that the padding should have not more
	// than 3 bytes. However we found paddings of 4 or 5 in the
	// wild. See https://github.com/ulikunitz/xz/pull/11 and
	// https://github.com/ulikunitz/xz/issues/15
	//
	// The only reasonable approach seems to be to ignore the
	// padding size. We still check that all padding bytes are zero.
	if !allZeros(data[n-k : n]) {
		return errPadding
	}
	return nil
}

// MarshalBinary marshals the binary header.
func (h *blockHeader) MarshalBinary() (data []byte, err error) {
	if !(minFilters <= len(h.filters) && len(h.filters) <= maxFilters) {
		return nil, errors.New("xz: filter count wrong")
	}
	for i, f := range h.filters {
		if i < len(h.filters)-1 {
			if f.id() == lzmaFilterID {
				return nil, errors.New(
					"xz: LZMA2 filter is not the last")
			}
		} else {
			// last filter
			if f.id() != lzmaFilterID {
				return nil, errors.New("xz: " +
					"last filter must be the LZMA2 filter")
			}
		}
	}

	var buf bytes.Buffer
	// header size must set at the end
	buf.WriteByte(0)

	// flags
	flags := byte(len(h.filters) - 1)
	if h.compressedSize >= 0 {
		flags |= compressedSizePresent
	}
	if h.uncompressedSize >= 0 {
		flags |= uncompressedSizePresent
	}
	buf.WriteByte(flags)

	p := make([]byte, 10)
	if h.compressedSize >= 0 {
		k := putUvarint(p, uint64(h.compressedSize))
		buf.Write(p[:k])
	}
	if h.uncompressedSize >= 0 {
		k := putUvarint(p, uint64(h.uncompressedSize))
		buf.Write(p[:k])
	}

	for _, f := range h.filters {
		fp, err := f.MarshalBinary()
		if err != nil {
			return nil, err
		}
		buf.Write(fp)
	}

	// padding
	for i := padLen(int64(buf.Len())); i > 0; i-- {
		buf.WriteByte(0)
	}

	// crc place holder
	buf.Write(p[:4])

	data = buf.Bytes()
	if len(data)%4 != 0 {
		panic("data length not aligned")
	}
	s := len(data)/4 - 1
	if !(1 < s && s <= 255) {
		panic("wrong block header size")
	}
	data[0] = byte(s)

	crc := crc32.NewIEEE()
	crc.Write(data[:len(data)-4])
	putUint32LE(data[len(data)-4:], crc.Sum32())

	return data, nil
}

// Constants used for marshalling and unmarshalling filters in the xz
// block header.
const (
	minFilters    = 1
	maxFilters    = 4
	minReservedID = 1 << 62
)

// filter represents a filter in the block header.
type filter interface {
	id() uint64
	UnmarshalBinary(data []byte) error
	MarshalBinary() (data []byte, err error)
	reader(r io.Reader, c *ReaderConfig) (fr io.Reader, err error)
	writeCloser(w io.WriteCloser, c *WriterConfig) (fw io.WriteCloser, err error)
	// filter must be last filter
	last() bool
}

// readFilter reads a block filter from the block header. At this point
// in time only the LZMA2 filter is supported.
func readFilter(r io.Reader) (f filter, err error) {
	br := lzma.ByteReader(r)

	// index
	id, _, err := readUvarint(br)
	if err != nil {
		return nil, err
	}

	var data []byte
	switch id {
	case lzmaFilterID:
		data = make([]byte, lzmaFilterLen)
		data[0] = lzmaFilterID
		if _, err = io.ReadFull(r, data[1:]); err != nil {
			return nil, err
		}
		f = new(lzmaFilter)
	default:
		if id >= minReservedID {
			return nil, errors.New(
				"xz: reserved filter id in block stream header")
		}
		return nil, errors.New("xz: invalid filter id")
	}
	if err = f.UnmarshalBinary(data); err != nil {
		return nil, err
	}
	return f, err
}

// readFilters reads count filters. At this point in time only the count
// 1 is supported.
func readFilters(r io.Reader, count int) (filters []filter, err error) {
	if count != 1 {
		return nil, errors.New("xz: unsupported filter count")
	}
	f, err := readFilter(r)
	if err != nil {
		return nil, err
	}
	return []filter{f}, err
}

/*** Index ***/

// record describes a block in the xz file index.
type record struct {
	unpaddedSize     int64
	uncompressedSize int64
}

// readRecord reads an index record.
func readRecord(r io.ByteReader) (rec record, n int, err error) {
	u, k, err := readUvarint(r)
	n += k
	if err != nil {
		return rec, n, err
	}
	rec.unpaddedSize = int64(u)
	if rec.unpaddedSize < 0 {
		return rec, n, errors.New("xz: unpadded size negative")
	}

	u, k, err = readUvarint(r)
	n += k
	if err != nil {
		return rec, n, err
	}
	rec.uncompressedSize = int64(u)
	if rec.uncompressedSize < 0 {
		return rec, n, errors.New("xz: uncompressed size negative")
	}

	return rec, n, nil
}

// MarshalBinary converts an index record in its binary encoding.
func (rec *record) MarshalBinary() (data []byte, err error) {
	// maximum length of a uvarint is 10
	p := make([]byte, 20)
	n := putUvarint(p, uint64(rec.unpaddedSize))
	n += putUvarint(p[n:], uint64(rec.uncompressedSize))
	return p[:n], nil
}

// writeIndex writes the index, a sequence of records.
func writeIndex(w io.Writer, index []record) (n int64, err error) {
	crc := crc32.NewIEEE()
	mw := io.MultiWriter(w, crc)

	// index indicator
	k, err := mw.Write([]byte{0})
	n += int64(k)
	if err != nil {
		return n, err
	}

	// number of records
	p := make([]byte, 10)
	k = putUvarint(p, uint64(len(index)))
	k, err = mw.Write(p[:k])
	n += int64(k)
	if err != nil {
		return n, err
	}

	// list of records
	for _, rec := range index {
		p, err := rec.MarshalBinary()
		if err != nil {
			return n, err
		}
		k, err = mw.Write(p)
		n += int64(k)
		if err != nil {
			return n, err
		}
	}

	// index padding
	k, err = mw.Write(make([]byte, padLen(int64(n))))
	n += int64(k)
	if err != nil {
		return n, err
	}

	// crc32 checksum
	putUint32LE(p, crc.Sum32())
	k, err = w.Write(p[:4])
	n += int64(k)

	return n, err
}

// readIndexBody reads the index from the reader. It assumes that the
// index indicator has already been read.
func readIndexBody(r io.Reader, expectedRecordLen int) (records []record, n int64, err error) {
	crc := crc32.NewIEEE()
	// index indicator
	crc.Write([]byte{0})

	br := lzma.ByteReader(io.TeeReader(r, crc))

	// number of records
	u, k, err := readUvarint(br)
	n += int64(k)
	if err != nil {
		return nil, n, err
	}
	recLen := int(u)
	if recLen < 0 || uint64(recLen) != u {
		return nil, n, errors.New("xz: record number overflow")
	}
	if recLen != expectedRecordLen {
		return nil, n, fmt.Errorf(
			"xz: index length is %d; want %d",
			recLen, expectedRecordLen)
	}

	// list of records
	records = make([]record, recLen)
	for i := range records {
		records[i], k, err = readRecord(br)
		n += int64(k)
		if err != nil {
			return nil, n, err
		}
	}

	p := make([]byte, padLen(int64(n+1)), 4)
	k, err = io.ReadFull(br.(io.Reader), p)
	n += int64(k)
	if err != nil {
		return nil, n, err
	}
	if !allZeros(p) {
		return nil, n, errors.New("xz: non-zero byte in index padding")
	}

	// crc32
	s := crc.Sum32()
	p = p[:4]
	k, err = io.ReadFull(br.(io.Reader), p)
	n += int64(k)
	if err != nil {
		return records, n, err
	}
	if uint32LE(p) != s {
		return nil, n, errors.New("xz: wrong checksum for index")
	}

	return records, n, nil
}
07070100000BCF000081A4000000000000000000000001645E367C00000060000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/fox-check-none.xz  7zXZ   A !   t/ ,The quick brown fox jumps over the lazy dog.
     =-ࡱrz     YZ07070100000BD0000081A4000000000000000000000001645E367C00000068000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/fox.xz 7zXZ  ִF !   t/ ,The quick brown fox jumps over the lazy dog.
    &RY( E-RW}    YZ07070100000BD1000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/internal   07070100000BD2000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/internal/hash  07070100000BD3000081A4000000000000000000000001645E367C00001A1B000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/internal/hash/cyclic_poly.go   // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package hash

// CyclicPoly provides a cyclic polynomial rolling hash.
type CyclicPoly struct {
	h uint64
	p []uint64
	i int
}

// ror rotates the unsigned 64-bit integer to right. The argument s must be
// less than 64.
func ror(x uint64, s uint) uint64 {
	return (x >> s) | (x << (64 - s))
}

// NewCyclicPoly creates a new instance of the CyclicPoly structure. The
// argument n gives the number of bytes for which a hash will be executed.
// This number must be positive; the method panics if this isn't the case.
func NewCyclicPoly(n int) *CyclicPoly {
	if n < 1 {
		panic("argument n must be positive")
	}
	return &CyclicPoly{p: make([]uint64, 0, n)}
}

// Len returns the length of the byte sequence for which a hash is generated.
func (r *CyclicPoly) Len() int {
	return cap(r.p)
}

// RollByte hashes the next byte and returns a hash value. The complete becomes
// available after at least Len() bytes have been hashed.
func (r *CyclicPoly) RollByte(x byte) uint64 {
	y := hash[x]
	if len(r.p) < cap(r.p) {
		r.h = ror(r.h, 1) ^ y
		r.p = append(r.p, y)
	} else {
		r.h ^= ror(r.p[r.i], uint(cap(r.p)-1))
		r.h = ror(r.h, 1) ^ y
		r.p[r.i] = y
		r.i = (r.i + 1) % cap(r.p)
	}
	return r.h
}

// Stores the hash for the individual bytes.
var hash = [256]uint64{
	0x2e4fc3f904065142, 0xc790984cfbc99527,
	0x879f95eb8c62f187, 0x3b61be86b5021ef2,
	0x65a896a04196f0a5, 0xc5b307b80470b59e,
	0xd3bff376a70df14b, 0xc332f04f0b3f1701,
	0x753b5f0e9abf3e0d, 0xb41538fdfe66ef53,
	0x1906a10c2c1c0208, 0xfb0c712a03421c0d,
	0x38be311a65c9552b, 0xfee7ee4ca6445c7e,
	0x71aadeded184f21e, 0xd73426fccda23b2d,
	0x29773fb5fb9600b5, 0xce410261cd32981a,
	0xfe2848b3c62dbc2d, 0x459eaaff6e43e11c,
	0xc13e35fc9c73a887, 0xf30ed5c201e76dbc,
	0xa5f10b3910482cea, 0x2945d59be02dfaad,
	0x06ee334ff70571b5, 0xbabf9d8070f44380,
	0xee3e2e9912ffd27c, 0x2a7118d1ea6b8ea7,
	0x26183cb9f7b1664c, 0xea71dac7da068f21,
	0xea92eca5bd1d0bb7, 0x415595862defcd75,
	0x248a386023c60648, 0x9cf021ab284b3c8a,
	0xfc9372df02870f6c, 0x2b92d693eeb3b3fc,
	0x73e799d139dc6975, 0x7b15ae312486363c,
	0xb70e5454a2239c80, 0x208e3fb31d3b2263,
	0x01f563cabb930f44, 0x2ac4533d2a3240d8,
	0x84231ed1064f6f7c, 0xa9f020977c2a6d19,
	0x213c227271c20122, 0x09fe8a9a0a03d07a,
	0x4236dc75bcaf910c, 0x460a8b2bead8f17e,
	0xd9b27be1aa07055f, 0xd202d5dc4b11c33e,
	0x70adb010543bea12, 0xcdae938f7ea6f579,
	0x3f3d870208672f4d, 0x8e6ccbce9d349536,
	0xe4c0871a389095ae, 0xf5f2a49152bca080,
	0x9a43f9b97269934e, 0xc17b3753cb6f475c,
	0xd56d941e8e206bd4, 0xac0a4f3e525eda00,
	0xa06d5a011912a550, 0x5537ed19537ad1df,
	0xa32fe713d611449d, 0x2a1d05b47c3b579f,
	0x991d02dbd30a2a52, 0x39e91e7e28f93eb0,
	0x40d06adb3e92c9ac, 0x9b9d3afde1c77c97,
	0x9a3f3f41c02c616f, 0x22ecd4ba00f60c44,
	0x0b63d5d801708420, 0x8f227ca8f37ffaec,
	0x0256278670887c24, 0x107e14877dbf540b,
	0x32c19f2786ac1c05, 0x1df5b12bb4bc9c61,
	0xc0cac129d0d4c4e2, 0x9fdb52ee9800b001,
	0x31f601d5d31c48c4, 0x72ff3c0928bcaec7,
	0xd99264421147eb03, 0x535a2d6d38aefcfe,
	0x6ba8b4454a916237, 0xfa39366eaae4719c,
	0x10f00fd7bbb24b6f, 0x5bd23185c76c84d4,
	0xb22c3d7e1b00d33f, 0x3efc20aa6bc830a8,
	0xd61c2503fe639144, 0x30ce625441eb92d3,
	0xe5d34cf359e93100, 0xa8e5aa13f2b9f7a5,
	0x5c2b8d851ca254a6, 0x68fb6c5e8b0d5fdf,
	0xc7ea4872c96b83ae, 0x6dd5d376f4392382,
	0x1be88681aaa9792f, 0xfef465ee1b6c10d9,
	0x1f98b65ed43fcb2e, 0x4d1ca11eb6e9a9c9,
	0x7808e902b3857d0b, 0x171c9c4ea4607972,
	0x58d66274850146df, 0x42b311c10d3981d1,
	0x647fa8c621c41a4c, 0xf472771c66ddfedc,
	0x338d27e3f847b46b, 0x6402ce3da97545ce,
	0x5162db616fc38638, 0x9c83be97bc22a50e,
	0x2d3d7478a78d5e72, 0xe621a9b938fd5397,
	0x9454614eb0f81c45, 0x395fb6e742ed39b6,
	0x77dd9179d06037bf, 0xc478d0fee4d2656d,
	0x35d9d6cb772007af, 0x83a56e92c883f0f6,
	0x27937453250c00a1, 0x27bd6ebc3a46a97d,
	0x9f543bf784342d51, 0xd158f38c48b0ed52,
	0x8dd8537c045f66b4, 0x846a57230226f6d5,
	0x6b13939e0c4e7cdf, 0xfca25425d8176758,
	0x92e5fc6cd52788e6, 0x9992e13d7a739170,
	0x518246f7a199e8ea, 0xf104c2a71b9979c7,
	0x86b3ffaabea4768f, 0x6388061cf3e351ad,
	0x09d9b5295de5bbb5, 0x38bf1638c2599e92,
	0x1d759846499e148d, 0x4c0ff015e5f96ef4,
	0xa41a94cfa270f565, 0x42d76f9cb2326c0b,
	0x0cf385dd3c9c23ba, 0x0508a6c7508d6e7a,
	0x337523aabbe6cf8d, 0x646bb14001d42b12,
	0xc178729d138adc74, 0xf900ef4491f24086,
	0xee1a90d334bb5ac4, 0x9755c92247301a50,
	0xb999bf7c4ff1b610, 0x6aeeb2f3b21e8fc9,
	0x0fa8084cf91ac6ff, 0x10d226cf136e6189,
	0xd302057a07d4fb21, 0x5f03800e20a0fcc3,
	0x80118d4ae46bd210, 0x58ab61a522843733,
	0x51edd575c5432a4b, 0x94ee6ff67f9197f7,
	0x765669e0e5e8157b, 0xa5347830737132f0,
	0x3ba485a69f01510c, 0x0b247d7b957a01c3,
	0x1b3d63449fd807dc, 0x0fdc4721c30ad743,
	0x8b535ed3829b2b14, 0xee41d0cad65d232c,
	0xe6a99ed97a6a982f, 0x65ac6194c202003d,
	0x692accf3a70573eb, 0xcc3c02c3e200d5af,
	0x0d419e8b325914a3, 0x320f160f42c25e40,
	0x00710d647a51fe7a, 0x3c947692330aed60,
	0x9288aa280d355a7a, 0xa1806a9b791d1696,
	0x5d60e38496763da1, 0x6c69e22e613fd0f4,
	0x977fc2a5aadffb17, 0xfb7bd063fc5a94ba,
	0x460c17992cbaece1, 0xf7822c5444d3297f,
	0x344a9790c69b74aa, 0xb80a42e6cae09dce,
	0x1b1361eaf2b1e757, 0xd84c1e758e236f01,
	0x88e0b7be347627cc, 0x45246009b7a99490,
	0x8011c6dd3fe50472, 0xc341d682bffb99d7,
	0x2511be93808e2d15, 0xd5bc13d7fd739840,
	0x2a3cd030679ae1ec, 0x8ad9898a4b9ee157,
	0x3245fef0a8eaf521, 0x3d6d8dbbb427d2b0,
	0x1ed146d8968b3981, 0x0c6a28bf7d45f3fc,
	0x4a1fd3dbcee3c561, 0x4210ff6a476bf67e,
	0xa559cce0d9199aac, 0xde39d47ef3723380,
	0xe5b69d848ce42e35, 0xefa24296f8e79f52,
	0x70190b59db9a5afc, 0x26f166cdb211e7bf,
	0x4deaf2df3c6b8ef5, 0xf171dbdd670f1017,
	0xb9059b05e9420d90, 0x2f0da855c9388754,
	0x611d5e9ab77949cc, 0x2912038ac01163f4,
	0x0231df50402b2fba, 0x45660fc4f3245f58,
	0xb91cc97c7c8dac50, 0xb72d2aafe4953427,
	0xfa6463f87e813d6b, 0x4515f7ee95d5c6a2,
	0x1310e1c1a48d21c3, 0xad48a7810cdd8544,
	0x4d5bdfefd5c9e631, 0xa43ed43f1fdcb7de,
	0xe70cfc8fe1ee9626, 0xef4711b0d8dda442,
	0xb80dd9bd4dab6c93, 0xa23be08d31ba4d93,
	0x9b37db9d0335a39c, 0x494b6f870f5cfebc,
	0x6d1b3c1149dda943, 0x372c943a518c1093,
	0xad27af45e77c09c4, 0x3b6f92b646044604,
	0xac2917909f5fcf4f, 0x2069a60e977e5557,
	0x353a469e71014de5, 0x24be356281f55c15,
	0x2b6d710ba8e9adea, 0x404ad1751c749c29,
	0xed7311bf23d7f185, 0xba4f6976b4acc43e,
	0x32d7198d2bc39000, 0xee667019014d6e01,
	0x494ef3e128d14c83, 0x1f95a152baecd6be,
	0x201648dff1f483a5, 0x68c28550c8384af6,
	0x5fc834a6824a7f48, 0x7cd06cb7365eaf28,
	0xd82bbd95e9b30909, 0x234f0d1694c53f6d,
	0xd2fb7f4a96d83f4a, 0xff0d5da83acac05e,
	0xf8f6b97f5585080a, 0x74236084be57b95b,
	0xa25e40c03bbc36ad, 0x6b6e5c14ce88465b,
	0x4378ffe93e1528c5, 0x94ca92a17118e2d2,
}
 07070100000BD4000081A4000000000000000000000001645E367C000001E0000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/internal/hash/doc.go   // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

/*
Package hash provides rolling hashes.

Rolling hashes have to be used for maintaining the positions of n-byte
sequences in the dictionary buffer.

The package provides currently the Rabin-Karp rolling hash and a Cyclic
Polynomial hash. Both support the Hashes method to be used with an interface.
*/
package hash
07070100000BD5000081A4000000000000000000000001645E367C0000067F000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/internal/hash/rabin_karp.go    // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package hash

// A is the default constant for Robin-Karp rolling hash. This is a random
// prime.
const A = 0x97b548add41d5da1

// RabinKarp supports the computation of a rolling hash.
type RabinKarp struct {
	A uint64
	// a^n
	aOldest uint64
	h       uint64
	p       []byte
	i       int
}

// NewRabinKarp creates a new RabinKarp value. The argument n defines the
// length of the byte sequence to be hashed. The default constant will will be
// used.
func NewRabinKarp(n int) *RabinKarp {
	return NewRabinKarpConst(n, A)
}

// NewRabinKarpConst creates a new RabinKarp value. The argument n defines the
// length of the byte sequence to be hashed. The argument a provides the
// constant used to compute the hash.
func NewRabinKarpConst(n int, a uint64) *RabinKarp {
	if n <= 0 {
		panic("number of bytes n must be positive")
	}
	aOldest := uint64(1)
	// There are faster methods. For the small n required by the LZMA
	// compressor O(n) is sufficient.
	for i := 0; i < n; i++ {
		aOldest *= a
	}
	return &RabinKarp{
		A: a, aOldest: aOldest,
		p: make([]byte, 0, n),
	}
}

// Len returns the length of the byte sequence.
func (r *RabinKarp) Len() int {
	return cap(r.p)
}

// RollByte computes the hash after x has been added.
func (r *RabinKarp) RollByte(x byte) uint64 {
	if len(r.p) < cap(r.p) {
		r.h += uint64(x)
		r.h *= r.A
		r.p = append(r.p, x)
	} else {
		r.h -= uint64(r.p[r.i]) * r.aOldest
		r.h += uint64(x)
		r.h *= r.A
		r.p[r.i] = x
		r.i = (r.i + 1) % cap(r.p)
	}
	return r.h
}
 07070100000BD6000081A4000000000000000000000001645E367C000002C2000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/internal/hash/roller.go    // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package hash

// Roller provides an interface for rolling hashes. The hash value will become
// valid after hash has been called Len times.
type Roller interface {
	Len() int
	RollByte(x byte) uint64
}

// Hashes computes all hash values for the array p. Note that the state of the
// roller is changed.
func Hashes(r Roller, p []byte) []uint64 {
	n := r.Len()
	if len(p) < n {
		return nil
	}
	h := make([]uint64, len(p)-n+1)
	for i := 0; i < n-1; i++ {
		r.RollByte(p[i])
	}
	for i := range h {
		h[i] = r.RollByte(p[i+n-1])
	}
	return h
}
  07070100000BD7000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/internal/xlog  07070100000BD8000081A4000000000000000000000001645E367C00003502000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/internal/xlog/xlog.go  // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package xlog provides a simple logging package that allows to disable
// certain message categories. It defines a type, Logger, with multiple
// methods for formatting output. The package has also a predefined
// 'standard' Logger accessible through helper function Print[f|ln],
// Fatal[f|ln], Panic[f|ln], Warn[f|ln], Print[f|ln] and Debug[f|ln]
// that are easier to use then creating a Logger manually. That logger
// writes to standard error and prints the date and time of each logged
// message, which can be configured using the function SetFlags.
//
// The Fatal functions call os.Exit(1) after the message is output
// unless not suppressed by the flags. The Panic functions call panic
// after the writing the log message unless suppressed.
package xlog

import (
	"fmt"
	"io"
	"os"
	"runtime"
	"sync"
	"time"
)

// The flags define what information is prefixed to each log entry
// generated by the Logger. The Lno* versions allow the suppression of
// specific output. The bits are or'ed together to control what will be
// printed. There is no control over the order of the items printed and
// the format. The full format is:
//
//	2009-01-23 01:23:23.123123 /a/b/c/d.go:23: message
const (
	Ldate         = 1 << iota // the date: 2009-01-23
	Ltime                     // the time: 01:23:23
	Lmicroseconds             // microsecond resolution: 01:23:23.123123
	Llongfile                 // full file name and line number: /a/b/c/d.go:23
	Lshortfile                // final file name element and line number: d.go:23
	Lnopanic                  // suppresses output from Panic[f|ln] but not the panic call
	Lnofatal                  // suppresses output from Fatal[f|ln] but not the exit
	Lnowarn                   // suppresses output from Warn[f|ln]
	Lnoprint                  // suppresses output from Print[f|ln]
	Lnodebug                  // suppresses output from Debug[f|ln]
	// initial values for the standard logger
	Lstdflags = Ldate | Ltime | Lnodebug
)

// A Logger represents an active logging object that generates lines of
// output to an io.Writer. Each logging operation if not suppressed
// makes a single call to the Writer's Write method. A Logger can be
// used simultaneously from multiple goroutines; it guarantees to
// serialize access to the Writer.
type Logger struct {
	mu sync.Mutex // ensures atomic writes; and protects the following
	// fields
	prefix string    // prefix to write at beginning of each line
	flag   int       // properties
	out    io.Writer // destination for output
	buf    []byte    // for accumulating text to write
}

// New creates a new Logger. The out argument sets the destination to
// which the log output will be written. The prefix appears at the
// beginning of each log line. The flag argument defines the logging
// properties.
func New(out io.Writer, prefix string, flag int) *Logger {
	return &Logger{out: out, prefix: prefix, flag: flag}
}

// std is the standard logger used by the package scope functions.
var std = New(os.Stderr, "", Lstdflags)

// itoa converts the integer to ASCII. A negative widths will avoid
// zero-padding. The function supports only non-negative integers.
func itoa(buf *[]byte, i int, wid int) {
	var u = uint(i)
	if u == 0 && wid <= 1 {
		*buf = append(*buf, '0')
		return
	}
	var b [32]byte
	bp := len(b)
	for ; u > 0 || wid > 0; u /= 10 {
		bp--
		wid--
		b[bp] = byte(u%10) + '0'
	}
	*buf = append(*buf, b[bp:]...)
}

// formatHeader puts the header into the buf field of the buffer.
func (l *Logger) formatHeader(t time.Time, file string, line int) {
	l.buf = append(l.buf, l.prefix...)
	if l.flag&(Ldate|Ltime|Lmicroseconds) != 0 {
		if l.flag&Ldate != 0 {
			year, month, day := t.Date()
			itoa(&l.buf, year, 4)
			l.buf = append(l.buf, '-')
			itoa(&l.buf, int(month), 2)
			l.buf = append(l.buf, '-')
			itoa(&l.buf, day, 2)
			l.buf = append(l.buf, ' ')
		}
		if l.flag&(Ltime|Lmicroseconds) != 0 {
			hour, min, sec := t.Clock()
			itoa(&l.buf, hour, 2)
			l.buf = append(l.buf, ':')
			itoa(&l.buf, min, 2)
			l.buf = append(l.buf, ':')
			itoa(&l.buf, sec, 2)
			if l.flag&Lmicroseconds != 0 {
				l.buf = append(l.buf, '.')
				itoa(&l.buf, t.Nanosecond()/1e3, 6)
			}
			l.buf = append(l.buf, ' ')
		}
	}
	if l.flag&(Lshortfile|Llongfile) != 0 {
		if l.flag&Lshortfile != 0 {
			short := file
			for i := len(file) - 1; i > 0; i-- {
				if file[i] == '/' {
					short = file[i+1:]
					break
				}
			}
			file = short
		}
		l.buf = append(l.buf, file...)
		l.buf = append(l.buf, ':')
		itoa(&l.buf, line, -1)
		l.buf = append(l.buf, ": "...)
	}
}

func (l *Logger) output(calldepth int, now time.Time, s string) error {
	var file string
	var line int
	if l.flag&(Lshortfile|Llongfile) != 0 {
		l.mu.Unlock()
		var ok bool
		_, file, line, ok = runtime.Caller(calldepth)
		if !ok {
			file = "???"
			line = 0
		}
		l.mu.Lock()
	}
	l.buf = l.buf[:0]
	l.formatHeader(now, file, line)
	l.buf = append(l.buf, s...)
	if len(s) == 0 || s[len(s)-1] != '\n' {
		l.buf = append(l.buf, '\n')
	}
	_, err := l.out.Write(l.buf)
	return err
}

// Output writes the string s with the header controlled by the flags to
// the l.out writer. A newline will be appended if s doesn't end in a
// newline. Calldepth is used to recover the PC, although all current
// calls of Output use the call depth 2. Access to the function is serialized.
func (l *Logger) Output(calldepth, noflag int, v ...interface{}) error {
	now := time.Now()
	l.mu.Lock()
	defer l.mu.Unlock()
	if l.flag&noflag != 0 {
		return nil
	}
	s := fmt.Sprint(v...)
	return l.output(calldepth+1, now, s)
}

// Outputf works like output but formats the output like Printf.
func (l *Logger) Outputf(calldepth int, noflag int, format string, v ...interface{}) error {
	now := time.Now()
	l.mu.Lock()
	defer l.mu.Unlock()
	if l.flag&noflag != 0 {
		return nil
	}
	s := fmt.Sprintf(format, v...)
	return l.output(calldepth+1, now, s)
}

// Outputln works like output but formats the output like Println.
func (l *Logger) Outputln(calldepth int, noflag int, v ...interface{}) error {
	now := time.Now()
	l.mu.Lock()
	defer l.mu.Unlock()
	if l.flag&noflag != 0 {
		return nil
	}
	s := fmt.Sprintln(v...)
	return l.output(calldepth+1, now, s)
}

// Panic prints the message like Print and calls panic. The printing
// might be suppressed by the flag Lnopanic.
func (l *Logger) Panic(v ...interface{}) {
	l.Output(2, Lnopanic, v...)
	s := fmt.Sprint(v...)
	panic(s)
}

// Panic prints the message like Print and calls panic. The printing
// might be suppressed by the flag Lnopanic.
func Panic(v ...interface{}) {
	std.Output(2, Lnopanic, v...)
	s := fmt.Sprint(v...)
	panic(s)
}

// Panicf prints the message like Printf and calls panic. The printing
// might be suppressed by the flag Lnopanic.
func (l *Logger) Panicf(format string, v ...interface{}) {
	l.Outputf(2, Lnopanic, format, v...)
	s := fmt.Sprintf(format, v...)
	panic(s)
}

// Panicf prints the message like Printf and calls panic. The printing
// might be suppressed by the flag Lnopanic.
func Panicf(format string, v ...interface{}) {
	std.Outputf(2, Lnopanic, format, v...)
	s := fmt.Sprintf(format, v...)
	panic(s)
}

// Panicln prints the message like Println and calls panic. The printing
// might be suppressed by the flag Lnopanic.
func (l *Logger) Panicln(v ...interface{}) {
	l.Outputln(2, Lnopanic, v...)
	s := fmt.Sprintln(v...)
	panic(s)
}

// Panicln prints the message like Println and calls panic. The printing
// might be suppressed by the flag Lnopanic.
func Panicln(v ...interface{}) {
	std.Outputln(2, Lnopanic, v...)
	s := fmt.Sprintln(v...)
	panic(s)
}

// Fatal prints the message like Print and calls os.Exit(1). The
// printing might be suppressed by the flag Lnofatal.
func (l *Logger) Fatal(v ...interface{}) {
	l.Output(2, Lnofatal, v...)
	os.Exit(1)
}

// Fatal prints the message like Print and calls os.Exit(1). The
// printing might be suppressed by the flag Lnofatal.
func Fatal(v ...interface{}) {
	std.Output(2, Lnofatal, v...)
	os.Exit(1)
}

// Fatalf prints the message like Printf and calls os.Exit(1). The
// printing might be suppressed by the flag Lnofatal.
func (l *Logger) Fatalf(format string, v ...interface{}) {
	l.Outputf(2, Lnofatal, format, v...)
	os.Exit(1)
}

// Fatalf prints the message like Printf and calls os.Exit(1). The
// printing might be suppressed by the flag Lnofatal.
func Fatalf(format string, v ...interface{}) {
	std.Outputf(2, Lnofatal, format, v...)
	os.Exit(1)
}

// Fatalln prints the message like Println and calls os.Exit(1). The
// printing might be suppressed by the flag Lnofatal.
func (l *Logger) Fatalln(format string, v ...interface{}) {
	l.Outputln(2, Lnofatal, v...)
	os.Exit(1)
}

// Fatalln prints the message like Println and calls os.Exit(1). The
// printing might be suppressed by the flag Lnofatal.
func Fatalln(format string, v ...interface{}) {
	std.Outputln(2, Lnofatal, v...)
	os.Exit(1)
}

// Warn prints the message like Print. The printing might be suppressed
// by the flag Lnowarn.
func (l *Logger) Warn(v ...interface{}) {
	l.Output(2, Lnowarn, v...)
}

// Warn prints the message like Print. The printing might be suppressed
// by the flag Lnowarn.
func Warn(v ...interface{}) {
	std.Output(2, Lnowarn, v...)
}

// Warnf prints the message like Printf. The printing might be suppressed
// by the flag Lnowarn.
func (l *Logger) Warnf(format string, v ...interface{}) {
	l.Outputf(2, Lnowarn, format, v...)
}

// Warnf prints the message like Printf. The printing might be suppressed
// by the flag Lnowarn.
func Warnf(format string, v ...interface{}) {
	std.Outputf(2, Lnowarn, format, v...)
}

// Warnln prints the message like Println. The printing might be suppressed
// by the flag Lnowarn.
func (l *Logger) Warnln(v ...interface{}) {
	l.Outputln(2, Lnowarn, v...)
}

// Warnln prints the message like Println. The printing might be suppressed
// by the flag Lnowarn.
func Warnln(v ...interface{}) {
	std.Outputln(2, Lnowarn, v...)
}

// Print prints the message like fmt.Print. The printing might be suppressed
// by the flag Lnoprint.
func (l *Logger) Print(v ...interface{}) {
	l.Output(2, Lnoprint, v...)
}

// Print prints the message like fmt.Print. The printing might be suppressed
// by the flag Lnoprint.
func Print(v ...interface{}) {
	std.Output(2, Lnoprint, v...)
}

// Printf prints the message like fmt.Printf. The printing might be suppressed
// by the flag Lnoprint.
func (l *Logger) Printf(format string, v ...interface{}) {
	l.Outputf(2, Lnoprint, format, v...)
}

// Printf prints the message like fmt.Printf. The printing might be suppressed
// by the flag Lnoprint.
func Printf(format string, v ...interface{}) {
	std.Outputf(2, Lnoprint, format, v...)
}

// Println prints the message like fmt.Println. The printing might be
// suppressed by the flag Lnoprint.
func (l *Logger) Println(v ...interface{}) {
	l.Outputln(2, Lnoprint, v...)
}

// Println prints the message like fmt.Println. The printing might be
// suppressed by the flag Lnoprint.
func Println(v ...interface{}) {
	std.Outputln(2, Lnoprint, v...)
}

// Debug prints the message like Print. The printing might be suppressed
// by the flag Lnodebug.
func (l *Logger) Debug(v ...interface{}) {
	l.Output(2, Lnodebug, v...)
}

// Debug prints the message like Print. The printing might be suppressed
// by the flag Lnodebug.
func Debug(v ...interface{}) {
	std.Output(2, Lnodebug, v...)
}

// Debugf prints the message like Printf. The printing might be suppressed
// by the flag Lnodebug.
func (l *Logger) Debugf(format string, v ...interface{}) {
	l.Outputf(2, Lnodebug, format, v...)
}

// Debugf prints the message like Printf. The printing might be suppressed
// by the flag Lnodebug.
func Debugf(format string, v ...interface{}) {
	std.Outputf(2, Lnodebug, format, v...)
}

// Debugln prints the message like Println. The printing might be suppressed
// by the flag Lnodebug.
func (l *Logger) Debugln(v ...interface{}) {
	l.Outputln(2, Lnodebug, v...)
}

// Debugln prints the message like Println. The printing might be suppressed
// by the flag Lnodebug.
func Debugln(v ...interface{}) {
	std.Outputln(2, Lnodebug, v...)
}

// Flags returns the current flags used by the logger.
func (l *Logger) Flags() int {
	l.mu.Lock()
	defer l.mu.Unlock()
	return l.flag
}

// Flags returns the current flags used by the standard logger.
func Flags() int {
	return std.Flags()
}

// SetFlags sets the flags of the logger.
func (l *Logger) SetFlags(flag int) {
	l.mu.Lock()
	defer l.mu.Unlock()
	l.flag = flag
}

// SetFlags sets the flags for the standard logger.
func SetFlags(flag int) {
	std.SetFlags(flag)
}

// Prefix returns the prefix used by the logger.
func (l *Logger) Prefix() string {
	l.mu.Lock()
	defer l.mu.Unlock()
	return l.prefix
}

// Prefix returns the prefix used by the standard logger of the package.
func Prefix() string {
	return std.Prefix()
}

// SetPrefix sets the prefix for the logger.
func (l *Logger) SetPrefix(prefix string) {
	l.mu.Lock()
	defer l.mu.Unlock()
	l.prefix = prefix
}

// SetPrefix sets the prefix of the standard logger of the package.
func SetPrefix(prefix string) {
	std.SetPrefix(prefix)
}

// SetOutput sets the output of the logger.
func (l *Logger) SetOutput(w io.Writer) {
	l.mu.Lock()
	defer l.mu.Unlock()
	l.out = w
}

// SetOutput sets the output for the standard logger of the package.
func SetOutput(w io.Writer) {
	std.SetOutput(w)
}
  07070100000BD9000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma   07070100000BDA000081A4000000000000000000000001645E367C000025CC000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/bintree.go    // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lzma

import (
	"errors"
	"unicode"
)

// node represents a node in the binary tree.
type node struct {
	// x is the search value
	x uint32
	// p parent node
	p uint32
	// l left child
	l uint32
	// r right child
	r uint32
}

// wordLen is the number of bytes represented by the v field of a node.
const wordLen = 4

// binTree supports the identification of the next operation based on a
// binary tree.
//
// Nodes will be identified by their index into the ring buffer.
type binTree struct {
	dict *encoderDict
	// ring buffer of nodes
	node []node
	// absolute offset of the entry for the next node. Position 4
	// byte larger.
	hoff int64
	// front position in the node ring buffer
	front uint32
	// index of the root node
	root uint32
	// current x value
	x uint32
	// preallocated array
	data []byte
}

// null represents the nonexistent index. We can't use zero because it
// would always exist or we would need to decrease the index for each
// reference.
const null uint32 = 1<<32 - 1

// newBinTree initializes the binTree structure. The capacity defines
// the size of the buffer and defines the maximum distance for which
// matches will be found.
func newBinTree(capacity int) (t *binTree, err error) {
	if capacity < 1 {
		return nil, errors.New(
			"newBinTree: capacity must be larger than zero")
	}
	if int64(capacity) >= int64(null) {
		return nil, errors.New(
			"newBinTree: capacity must less 2^{32}-1")
	}
	t = &binTree{
		node: make([]node, capacity),
		hoff: -int64(wordLen),
		root: null,
		data: make([]byte, maxMatchLen),
	}
	return t, nil
}

func (t *binTree) SetDict(d *encoderDict) { t.dict = d }

// WriteByte writes a single byte into the binary tree.
func (t *binTree) WriteByte(c byte) error {
	t.x = (t.x << 8) | uint32(c)
	t.hoff++
	if t.hoff < 0 {
		return nil
	}
	v := t.front
	if int64(v) < t.hoff {
		// We are overwriting old nodes stored in the tree.
		t.remove(v)
	}
	t.node[v].x = t.x
	t.add(v)
	t.front++
	if int64(t.front) >= int64(len(t.node)) {
		t.front = 0
	}
	return nil
}

// Writes writes a sequence of bytes into the binTree structure.
func (t *binTree) Write(p []byte) (n int, err error) {
	for _, c := range p {
		t.WriteByte(c)
	}
	return len(p), nil
}

// add puts the node v into the tree. The node must not be part of the
// tree before.
func (t *binTree) add(v uint32) {
	vn := &t.node[v]
	// Set left and right to null indices.
	vn.l, vn.r = null, null
	// If the binary tree is empty make v the root.
	if t.root == null {
		t.root = v
		vn.p = null
		return
	}
	x := vn.x
	p := t.root
	// Search for the right leave link and add the new node.
	for {
		pn := &t.node[p]
		if x <= pn.x {
			if pn.l == null {
				pn.l = v
				vn.p = p
				return
			}
			p = pn.l
		} else {
			if pn.r == null {
				pn.r = v
				vn.p = p
				return
			}
			p = pn.r
		}
	}
}

// parent returns the parent node index of v and the pointer to v value
// in the parent.
func (t *binTree) parent(v uint32) (p uint32, ptr *uint32) {
	if t.root == v {
		return null, &t.root
	}
	p = t.node[v].p
	if t.node[p].l == v {
		ptr = &t.node[p].l
	} else {
		ptr = &t.node[p].r
	}
	return
}

// Remove node v.
func (t *binTree) remove(v uint32) {
	vn := &t.node[v]
	p, ptr := t.parent(v)
	l, r := vn.l, vn.r
	if l == null {
		// Move the right child up.
		*ptr = r
		if r != null {
			t.node[r].p = p
		}
		return
	}
	if r == null {
		// Move the left child up.
		*ptr = l
		t.node[l].p = p
		return
	}

	// Search the in-order predecessor u.
	un := &t.node[l]
	ur := un.r
	if ur == null {
		// In order predecessor is l. Move it up.
		un.r = r
		t.node[r].p = l
		un.p = p
		*ptr = l
		return
	}
	var u uint32
	for {
		// Look for the max value in the tree where l is root.
		u = ur
		ur = t.node[u].r
		if ur == null {
			break
		}
	}
	// replace u with ul
	un = &t.node[u]
	ul := un.l
	up := un.p
	t.node[up].r = ul
	if ul != null {
		t.node[ul].p = up
	}

	// replace v by u
	un.l, un.r = l, r
	t.node[l].p = u
	t.node[r].p = u
	*ptr = u
	un.p = p
}

// search looks for the node that have the value x or for the nodes that
// brace it. The node highest in the tree with the value x will be
// returned. All other nodes with the same value live in left subtree of
// the returned node.
func (t *binTree) search(v uint32, x uint32) (a, b uint32) {
	a, b = null, null
	if v == null {
		return
	}
	for {
		vn := &t.node[v]
		if x <= vn.x {
			if x == vn.x {
				return v, v
			}
			b = v
			if vn.l == null {
				return
			}
			v = vn.l
		} else {
			a = v
			if vn.r == null {
				return
			}
			v = vn.r
		}
	}
}

// max returns the node with maximum value in the subtree with v as
// root.
func (t *binTree) max(v uint32) uint32 {
	if v == null {
		return null
	}
	for {
		r := t.node[v].r
		if r == null {
			return v
		}
		v = r
	}
}

// min returns the node with the minimum value in the subtree with v as
// root.
func (t *binTree) min(v uint32) uint32 {
	if v == null {
		return null
	}
	for {
		l := t.node[v].l
		if l == null {
			return v
		}
		v = l
	}
}

// pred returns the in-order predecessor of node v.
func (t *binTree) pred(v uint32) uint32 {
	if v == null {
		return null
	}
	u := t.max(t.node[v].l)
	if u != null {
		return u
	}
	for {
		p := t.node[v].p
		if p == null {
			return null
		}
		if t.node[p].r == v {
			return p
		}
		v = p
	}
}

// succ returns the in-order successor of node v.
func (t *binTree) succ(v uint32) uint32 {
	if v == null {
		return null
	}
	u := t.min(t.node[v].r)
	if u != null {
		return u
	}
	for {
		p := t.node[v].p
		if p == null {
			return null
		}
		if t.node[p].l == v {
			return p
		}
		v = p
	}
}

// xval converts the first four bytes of a into an 32-bit unsigned
// integer in big-endian order.
func xval(a []byte) uint32 {
	var x uint32
	switch len(a) {
	default:
		x |= uint32(a[3])
		fallthrough
	case 3:
		x |= uint32(a[2]) << 8
		fallthrough
	case 2:
		x |= uint32(a[1]) << 16
		fallthrough
	case 1:
		x |= uint32(a[0]) << 24
	case 0:
	}
	return x
}

// dumpX converts value x into a four-letter string.
func dumpX(x uint32) string {
	a := make([]byte, 4)
	for i := 0; i < 4; i++ {
		c := byte(x >> uint((3-i)*8))
		if unicode.IsGraphic(rune(c)) {
			a[i] = c
		} else {
			a[i] = '.'
		}
	}
	return string(a)
}

/*
// dumpNode writes a representation of the node v into the io.Writer.
func (t *binTree) dumpNode(w io.Writer, v uint32, indent int) {
	if v == null {
		return
	}

	vn := &t.node[v]

	t.dumpNode(w, vn.r, indent+2)

	for i := 0; i < indent; i++ {
		fmt.Fprint(w, " ")
	}
	if vn.p == null {
		fmt.Fprintf(w, "node %d %q parent null\n", v, dumpX(vn.x))
	} else {
		fmt.Fprintf(w, "node %d %q parent %d\n", v, dumpX(vn.x), vn.p)
	}

	t.dumpNode(w, vn.l, indent+2)
}

// dump prints a representation of the binary tree into the writer.
func (t *binTree) dump(w io.Writer) error {
	bw := bufio.NewWriter(w)
	t.dumpNode(bw, t.root, 0)
	return bw.Flush()
}
*/

func (t *binTree) distance(v uint32) int {
	dist := int(t.front) - int(v)
	if dist <= 0 {
		dist += len(t.node)
	}
	return dist
}

type matchParams struct {
	rep [4]uint32
	// length when match will be accepted
	nAccept int
	// nodes to check
	check int
	// finish if length get shorter
	stopShorter bool
}

func (t *binTree) match(m match, distIter func() (int, bool), p matchParams,
) (r match, checked int, accepted bool) {
	buf := &t.dict.buf
	for {
		if checked >= p.check {
			return m, checked, true
		}
		dist, ok := distIter()
		if !ok {
			return m, checked, false
		}
		checked++
		if m.n > 0 {
			i := buf.rear - dist + m.n - 1
			if i < 0 {
				i += len(buf.data)
			} else if i >= len(buf.data) {
				i -= len(buf.data)
			}
			if buf.data[i] != t.data[m.n-1] {
				if p.stopShorter {
					return m, checked, false
				}
				continue
			}
		}
		n := buf.matchLen(dist, t.data)
		switch n {
		case 0:
			if p.stopShorter {
				return m, checked, false
			}
			continue
		case 1:
			if uint32(dist-minDistance) != p.rep[0] {
				continue
			}
		}
		if n < m.n || (n == m.n && int64(dist) >= m.distance) {
			continue
		}
		m = match{int64(dist), n}
		if n >= p.nAccept {
			return m, checked, true
		}
	}
}

func (t *binTree) NextOp(rep [4]uint32) operation {
	// retrieve maxMatchLen data
	n, _ := t.dict.buf.Peek(t.data[:maxMatchLen])
	if n == 0 {
		panic("no data in buffer")
	}
	t.data = t.data[:n]

	var (
		m                  match
		x, u, v            uint32
		iterPred, iterSucc func() (int, bool)
	)
	p := matchParams{
		rep:     rep,
		nAccept: maxMatchLen,
		check:   32,
	}
	i := 4
	iterSmall := func() (dist int, ok bool) {
		i--
		if i <= 0 {
			return 0, false
		}
		return i, true
	}
	m, checked, accepted := t.match(m, iterSmall, p)
	if accepted {
		goto end
	}
	p.check -= checked
	x = xval(t.data)
	u, v = t.search(t.root, x)
	if u == v && len(t.data) == 4 {
		iter := func() (dist int, ok bool) {
			if u == null {
				return 0, false
			}
			dist = t.distance(u)
			u, v = t.search(t.node[u].l, x)
			if u != v {
				u = null
			}
			return dist, true
		}
		m, _, _ = t.match(m, iter, p)
		goto end
	}
	p.stopShorter = true
	iterSucc = func() (dist int, ok bool) {
		if v == null {
			return 0, false
		}
		dist = t.distance(v)
		v = t.succ(v)
		return dist, true
	}
	m, checked, accepted = t.match(m, iterSucc, p)
	if accepted {
		goto end
	}
	p.check -= checked
	iterPred = func() (dist int, ok bool) {
		if u == null {
			return 0, false
		}
		dist = t.distance(u)
		u = t.pred(u)
		return dist, true
	}
	m, _, _ = t.match(m, iterPred, p)
end:
	if m.n == 0 {
		return lit{t.data[0]}
	}
	return m
}
07070100000BDB000081A4000000000000000000000001645E367C0000048E000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/bitops.go // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lzma

/* Naming conventions follows the CodeReviewComments in the Go Wiki. */

// ntz32Const is used by the functions NTZ and NLZ.
const ntz32Const = 0x04d7651f

// ntz32Table is a helper table for de Bruijn algorithm by Danny Dubé.
// See Henry S. Warren, Jr. "Hacker's Delight" section 5-1 figure 5-26.
var ntz32Table = [32]int8{
	0, 1, 2, 24, 3, 19, 6, 25,
	22, 4, 20, 10, 16, 7, 12, 26,
	31, 23, 18, 5, 21, 9, 15, 11,
	30, 17, 8, 14, 29, 13, 28, 27,
}

/*
// ntz32 computes the number of trailing zeros for an unsigned 32-bit integer.
func ntz32(x uint32) int {
	if x == 0 {
		return 32
	}
	x = (x & -x) * ntz32Const
	return int(ntz32Table[x>>27])
}
*/

// nlz32 computes the number of leading zeros for an unsigned 32-bit integer.
func nlz32(x uint32) int {
	// Smear left most bit to the right
	x |= x >> 1
	x |= x >> 2
	x |= x >> 4
	x |= x >> 8
	x |= x >> 16
	// Use ntz mechanism to calculate nlz.
	x++
	if x == 0 {
		return 0
	}
	x *= ntz32Const
	return 32 - int(ntz32Table[x>>27])
}
  07070100000BDC000081A4000000000000000000000001645E367C00000354000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/breader.go    // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lzma

import (
	"errors"
	"io"
)

// breader provides the ReadByte function for a Reader. It doesn't read
// more data from the reader than absolutely necessary.
type breader struct {
	io.Reader
	// helper slice to save allocations
	p []byte
}

// ByteReader converts an io.Reader into an io.ByteReader.
func ByteReader(r io.Reader) io.ByteReader {
	br, ok := r.(io.ByteReader)
	if !ok {
		return &breader{r, make([]byte, 1)}
	}
	return br
}

// ReadByte read byte function.
func (r *breader) ReadByte() (c byte, err error) {
	n, err := r.Reader.Read(r.p)
	if n < 1 {
		if err == nil {
			err = errors.New("breader.ReadByte: no data")
		}
		return 0, err
	}
	return r.p[0], nil
}
07070100000BDD000081A4000000000000000000000001645E367C00000FE7000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/buffer.go // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lzma

import (
	"errors"
)

// buffer provides a circular buffer of bytes. If the front index equals
// the rear index the buffer is empty. As a consequence front cannot be
// equal rear for a full buffer. So a full buffer has a length that is
// one byte less the the length of the data slice.
type buffer struct {
	data  []byte
	front int
	rear  int
}

// newBuffer creates a buffer with the given size.
func newBuffer(size int) *buffer {
	return &buffer{data: make([]byte, size+1)}
}

// Cap returns the capacity of the buffer.
func (b *buffer) Cap() int {
	return len(b.data) - 1
}

// Resets the buffer. The front and rear index are set to zero.
func (b *buffer) Reset() {
	b.front = 0
	b.rear = 0
}

// Buffered returns the number of bytes buffered.
func (b *buffer) Buffered() int {
	delta := b.front - b.rear
	if delta < 0 {
		delta += len(b.data)
	}
	return delta
}

// Available returns the number of bytes available for writing.
func (b *buffer) Available() int {
	delta := b.rear - 1 - b.front
	if delta < 0 {
		delta += len(b.data)
	}
	return delta
}

// addIndex adds a non-negative integer to the index i and returns the
// resulting index. The function takes care of wrapping the index as
// well as potential overflow situations.
func (b *buffer) addIndex(i int, n int) int {
	// subtraction of len(b.data) prevents overflow
	i += n - len(b.data)
	if i < 0 {
		i += len(b.data)
	}
	return i
}

// Read reads bytes from the buffer into p and returns the number of
// bytes read. The function never returns an error but might return less
// data than requested.
func (b *buffer) Read(p []byte) (n int, err error) {
	n, err = b.Peek(p)
	b.rear = b.addIndex(b.rear, n)
	return n, err
}

// Peek reads bytes from the buffer into p without changing the buffer.
// Peek will never return an error but might return less data than
// requested.
func (b *buffer) Peek(p []byte) (n int, err error) {
	m := b.Buffered()
	n = len(p)
	if m < n {
		n = m
		p = p[:n]
	}
	k := copy(p, b.data[b.rear:])
	if k < n {
		copy(p[k:], b.data)
	}
	return n, nil
}

// Discard skips the n next bytes to read from the buffer, returning the
// bytes discarded.
//
// If Discards skips fewer than n bytes, it returns an error.
func (b *buffer) Discard(n int) (discarded int, err error) {
	if n < 0 {
		return 0, errors.New("buffer.Discard: negative argument")
	}
	m := b.Buffered()
	if m < n {
		n = m
		err = errors.New(
			"buffer.Discard: discarded less bytes then requested")
	}
	b.rear = b.addIndex(b.rear, n)
	return n, err
}

// ErrNoSpace indicates that there is insufficient space for the Write
// operation.
var ErrNoSpace = errors.New("insufficient space")

// Write puts data into the  buffer. If less bytes are written than
// requested ErrNoSpace is returned.
func (b *buffer) Write(p []byte) (n int, err error) {
	m := b.Available()
	n = len(p)
	if m < n {
		n = m
		p = p[:m]
		err = ErrNoSpace
	}
	k := copy(b.data[b.front:], p)
	if k < n {
		copy(b.data, p[k:])
	}
	b.front = b.addIndex(b.front, n)
	return n, err
}

// WriteByte writes a single byte into the buffer. The error ErrNoSpace
// is returned if no single byte is available in the buffer for writing.
func (b *buffer) WriteByte(c byte) error {
	if b.Available() < 1 {
		return ErrNoSpace
	}
	b.data[b.front] = c
	b.front = b.addIndex(b.front, 1)
	return nil
}

// prefixLen returns the length of the common prefix of a and b.
func prefixLen(a, b []byte) int {
	if len(a) > len(b) {
		a, b = b, a
	}
	for i, c := range a {
		if b[i] != c {
			return i
		}
	}
	return len(a)
}

// matchLen returns the length of the common prefix for the given
// distance from the rear and the byte slice p.
func (b *buffer) matchLen(distance int, p []byte) int {
	var n int
	i := b.rear - distance
	if i < 0 {
		if n = prefixLen(p, b.data[len(b.data)+i:]); n < -i {
			return n
		}
		p = p[n:]
		i = 0
	}
	n += prefixLen(p, b.data[i:])
	return n
}
 07070100000BDE000081A4000000000000000000000001645E367C000003A9000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/bytewriter.go // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lzma

import (
	"errors"
	"io"
)

// ErrLimit indicates that the limit of the LimitedByteWriter has been
// reached.
var ErrLimit = errors.New("limit reached")

// LimitedByteWriter provides a byte writer that can be written until a
// limit is reached. The field N provides the number of remaining
// bytes.
type LimitedByteWriter struct {
	BW io.ByteWriter
	N  int64
}

// WriteByte writes a single byte to the limited byte writer. It returns
// ErrLimit if the limit has been reached. If the byte is successfully
// written the field N of the LimitedByteWriter will be decremented by
// one.
func (l *LimitedByteWriter) WriteByte(c byte) error {
	if l.N <= 0 {
		return ErrLimit
	}
	if err := l.BW.WriteByte(c); err != nil {
		return err
	}
	l.N--
	return nil
}
   07070100000BDF000081A4000000000000000000000001645E367C000019E4000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/decoder.go    // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lzma

import (
	"errors"
	"fmt"
	"io"
)

// decoder decodes a raw LZMA stream without any header.
type decoder struct {
	// dictionary; the rear pointer of the buffer will be used for
	// reading the data.
	Dict *decoderDict
	// decoder state
	State *state
	// range decoder
	rd *rangeDecoder
	// start stores the head value of the dictionary for the LZMA
	// stream
	start int64
	// size of uncompressed data
	size int64
	// end-of-stream encountered
	eos bool
	// EOS marker found
	eosMarker bool
}

// newDecoder creates a new decoder instance. The parameter size provides
// the expected byte size of the decompressed data. If the size is
// unknown use a negative value. In that case the decoder will look for
// a terminating end-of-stream marker.
func newDecoder(br io.ByteReader, state *state, dict *decoderDict, size int64) (d *decoder, err error) {
	rd, err := newRangeDecoder(br)
	if err != nil {
		return nil, err
	}
	d = &decoder{
		State: state,
		Dict:  dict,
		rd:    rd,
		size:  size,
		start: dict.pos(),
	}
	return d, nil
}

// Reopen restarts the decoder with a new byte reader and a new size. Reopen
// resets the Decompressed counter to zero.
func (d *decoder) Reopen(br io.ByteReader, size int64) error {
	var err error
	if d.rd, err = newRangeDecoder(br); err != nil {
		return err
	}
	d.start = d.Dict.pos()
	d.size = size
	d.eos = false
	return nil
}

// decodeLiteral decodes a single literal from the LZMA stream.
func (d *decoder) decodeLiteral() (op operation, err error) {
	litState := d.State.litState(d.Dict.byteAt(1), d.Dict.head)
	match := d.Dict.byteAt(int(d.State.rep[0]) + 1)
	s, err := d.State.litCodec.Decode(d.rd, d.State.state, match, litState)
	if err != nil {
		return nil, err
	}
	return lit{s}, nil
}

// errEOS indicates that an EOS marker has been found.
var errEOS = errors.New("EOS marker found")

// readOp decodes the next operation from the compressed stream. It
// returns the operation. If an explicit end of stream marker is
// identified the eos error is returned.
func (d *decoder) readOp() (op operation, err error) {
	// Value of the end of stream (EOS) marker
	const eosDist = 1<<32 - 1

	state, state2, posState := d.State.states(d.Dict.head)

	b, err := d.State.isMatch[state2].Decode(d.rd)
	if err != nil {
		return nil, err
	}
	if b == 0 {
		// literal
		op, err := d.decodeLiteral()
		if err != nil {
			return nil, err
		}
		d.State.updateStateLiteral()
		return op, nil
	}
	b, err = d.State.isRep[state].Decode(d.rd)
	if err != nil {
		return nil, err
	}
	if b == 0 {
		// simple match
		d.State.rep[3], d.State.rep[2], d.State.rep[1] =
			d.State.rep[2], d.State.rep[1], d.State.rep[0]

		d.State.updateStateMatch()
		// The length decoder returns the length offset.
		n, err := d.State.lenCodec.Decode(d.rd, posState)
		if err != nil {
			return nil, err
		}
		// The dist decoder returns the distance offset. The actual
		// distance is 1 higher.
		d.State.rep[0], err = d.State.distCodec.Decode(d.rd, n)
		if err != nil {
			return nil, err
		}
		if d.State.rep[0] == eosDist {
			d.eosMarker = true
			return nil, errEOS
		}
		op = match{n: int(n) + minMatchLen,
			distance: int64(d.State.rep[0]) + minDistance}
		return op, nil
	}
	b, err = d.State.isRepG0[state].Decode(d.rd)
	if err != nil {
		return nil, err
	}
	dist := d.State.rep[0]
	if b == 0 {
		// rep match 0
		b, err = d.State.isRepG0Long[state2].Decode(d.rd)
		if err != nil {
			return nil, err
		}
		if b == 0 {
			d.State.updateStateShortRep()
			op = match{n: 1, distance: int64(dist) + minDistance}
			return op, nil
		}
	} else {
		b, err = d.State.isRepG1[state].Decode(d.rd)
		if err != nil {
			return nil, err
		}
		if b == 0 {
			dist = d.State.rep[1]
		} else {
			b, err = d.State.isRepG2[state].Decode(d.rd)
			if err != nil {
				return nil, err
			}
			if b == 0 {
				dist = d.State.rep[2]
			} else {
				dist = d.State.rep[3]
				d.State.rep[3] = d.State.rep[2]
			}
			d.State.rep[2] = d.State.rep[1]
		}
		d.State.rep[1] = d.State.rep[0]
		d.State.rep[0] = dist
	}
	n, err := d.State.repLenCodec.Decode(d.rd, posState)
	if err != nil {
		return nil, err
	}
	d.State.updateStateRep()
	op = match{n: int(n) + minMatchLen, distance: int64(dist) + minDistance}
	return op, nil
}

// apply takes the operation and transforms the decoder dictionary accordingly.
func (d *decoder) apply(op operation) error {
	var err error
	switch x := op.(type) {
	case match:
		err = d.Dict.writeMatch(x.distance, x.n)
	case lit:
		err = d.Dict.WriteByte(x.b)
	default:
		panic("op is neither a match nor a literal")
	}
	return err
}

// decompress fills the dictionary unless no space for new data is
// available. If the end of the LZMA stream has been reached io.EOF will
// be returned.
func (d *decoder) decompress() error {
	if d.eos {
		return io.EOF
	}
	for d.Dict.Available() >= maxMatchLen {
		op, err := d.readOp()
		switch err {
		case nil:
			// break
		case errEOS:
			d.eos = true
			if !d.rd.possiblyAtEnd() {
				return errDataAfterEOS
			}
			if d.size >= 0 && d.size != d.Decompressed() {
				return errSize
			}
			return io.EOF
		case io.EOF:
			d.eos = true
			return io.ErrUnexpectedEOF
		default:
			return err
		}
		if err = d.apply(op); err != nil {
			return err
		}
		if d.size >= 0 && d.Decompressed() >= d.size {
			d.eos = true
			if d.Decompressed() > d.size {
				return errSize
			}
			if !d.rd.possiblyAtEnd() {
				switch _, err = d.readOp(); err {
				case nil:
					return errSize
				case io.EOF:
					return io.ErrUnexpectedEOF
				case errEOS:
					break
				default:
					return err
				}
			}
			return io.EOF
		}
	}
	return nil
}

// Errors that may be returned while decoding data.
var (
	errDataAfterEOS = errors.New("lzma: data after end of stream marker")
	errSize         = errors.New("lzma: wrong uncompressed data size")
)

// Read reads data from the buffer. If no more data is available io.EOF is
// returned.
func (d *decoder) Read(p []byte) (n int, err error) {
	var k int
	for {
		// Read of decoder dict never returns an error.
		k, err = d.Dict.Read(p[n:])
		if err != nil {
			panic(fmt.Errorf("dictionary read error %s", err))
		}
		if k == 0 && d.eos {
			return n, io.EOF
		}
		n += k
		if n >= len(p) {
			return n, nil
		}
		if err = d.decompress(); err != nil && err != io.EOF {
			return n, err
		}
	}
}

// Decompressed returns the number of bytes decompressed by the decoder.
func (d *decoder) Decompressed() int64 {
	return d.Dict.pos() - d.start
}
07070100000BE0000081A4000000000000000000000001645E367C00000D69000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/decoderdict.go    // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lzma

import (
	"errors"
	"fmt"
)

// decoderDict provides the dictionary for the decoder. The whole
// dictionary is used as reader buffer.
type decoderDict struct {
	buf  buffer
	head int64
}

// newDecoderDict creates a new decoder dictionary. The whole dictionary
// will be used as reader buffer.
func newDecoderDict(dictCap int) (d *decoderDict, err error) {
	// lower limit supports easy test cases
	if !(1 <= dictCap && int64(dictCap) <= MaxDictCap) {
		return nil, errors.New("lzma: dictCap out of range")
	}
	d = &decoderDict{buf: *newBuffer(dictCap)}
	return d, nil
}

// Reset clears the dictionary. The read buffer is not changed, so the
// buffered data can still be read.
func (d *decoderDict) Reset() {
	d.head = 0
}

// WriteByte writes a single byte into the dictionary. It is used to
// write literals into the dictionary.
func (d *decoderDict) WriteByte(c byte) error {
	if err := d.buf.WriteByte(c); err != nil {
		return err
	}
	d.head++
	return nil
}

// pos returns the position of the dictionary head.
func (d *decoderDict) pos() int64 { return d.head }

// dictLen returns the actual length of the dictionary.
func (d *decoderDict) dictLen() int {
	capacity := d.buf.Cap()
	if d.head >= int64(capacity) {
		return capacity
	}
	return int(d.head)
}

// byteAt returns a byte stored in the dictionary. If the distance is
// non-positive or exceeds the current length of the dictionary the zero
// byte is returned.
func (d *decoderDict) byteAt(dist int) byte {
	if !(0 < dist && dist <= d.dictLen()) {
		return 0
	}
	i := d.buf.front - dist
	if i < 0 {
		i += len(d.buf.data)
	}
	return d.buf.data[i]
}

// writeMatch writes the match at the top of the dictionary. The given
// distance must point in the current dictionary and the length must not
// exceed the maximum length 273 supported in LZMA.
//
// The error value ErrNoSpace indicates that no space is available in
// the dictionary for writing. You need to read from the dictionary
// first.
func (d *decoderDict) writeMatch(dist int64, length int) error {
	if !(0 < dist && dist <= int64(d.dictLen())) {
		return errors.New("writeMatch: distance out of range")
	}
	if !(0 < length && length <= maxMatchLen) {
		return errors.New("writeMatch: length out of range")
	}
	if length > d.buf.Available() {
		return ErrNoSpace
	}
	d.head += int64(length)

	i := d.buf.front - int(dist)
	if i < 0 {
		i += len(d.buf.data)
	}
	for length > 0 {
		var p []byte
		if i >= d.buf.front {
			p = d.buf.data[i:]
			i = 0
		} else {
			p = d.buf.data[i:d.buf.front]
			i = d.buf.front
		}
		if len(p) > length {
			p = p[:length]
		}
		if _, err := d.buf.Write(p); err != nil {
			panic(fmt.Errorf("d.buf.Write returned error %s", err))
		}
		length -= len(p)
	}
	return nil
}

// Write writes the given bytes into the dictionary and advances the
// head.
func (d *decoderDict) Write(p []byte) (n int, err error) {
	n, err = d.buf.Write(p)
	d.head += int64(n)
	return n, err
}

// Available returns the number of available bytes for writing into the
// decoder dictionary.
func (d *decoderDict) Available() int { return d.buf.Available() }

// Read reads data from the buffer contained in the decoder dictionary.
func (d *decoderDict) Read(p []byte) (n int, err error) { return d.buf.Read(p) }
   07070100000BE1000081A4000000000000000000000001645E367C00000467000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/directcodec.go    // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lzma

// directCodec allows the encoding and decoding of values with a fixed number
// of bits. The number of bits must be in the range [1,32].
type directCodec byte

// Bits returns the number of bits supported by this codec.
func (dc directCodec) Bits() int {
	return int(dc)
}

// Encode uses the range encoder to encode a value with the fixed number of
// bits. The most-significant bit is encoded first.
func (dc directCodec) Encode(e *rangeEncoder, v uint32) error {
	for i := int(dc) - 1; i >= 0; i-- {
		if err := e.DirectEncodeBit(v >> uint(i)); err != nil {
			return err
		}
	}
	return nil
}

// Decode uses the range decoder to decode a value with the given number of
// given bits. The most-significant bit is decoded first.
func (dc directCodec) Decode(d *rangeDecoder) (v uint32, err error) {
	for i := int(dc) - 1; i >= 0; i-- {
		x, err := d.DirectDecodeBit()
		if err != nil {
			return 0, err
		}
		v = (v << 1) | x
	}
	return v, nil
}
 07070100000BE2000081A4000000000000000000000001645E367C00000E8E000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/distcodec.go  // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lzma

// Constants used by the distance codec.
const (
	// minimum supported distance
	minDistance = 1
	// maximum supported distance, value is used for the eos marker.
	maxDistance = 1 << 32
	// number of the supported len states
	lenStates = 4
	// start for the position models
	startPosModel = 4
	// first index with align bits support
	endPosModel = 14
	// bits for the position slots
	posSlotBits = 6
	// number of align bits
	alignBits = 4
)

// distCodec provides encoding and decoding of distance values.
type distCodec struct {
	posSlotCodecs [lenStates]treeCodec
	posModel      [endPosModel - startPosModel]treeReverseCodec
	alignCodec    treeReverseCodec
}

// deepcopy initializes dc as deep copy of the source.
func (dc *distCodec) deepcopy(src *distCodec) {
	if dc == src {
		return
	}
	for i := range dc.posSlotCodecs {
		dc.posSlotCodecs[i].deepcopy(&src.posSlotCodecs[i])
	}
	for i := range dc.posModel {
		dc.posModel[i].deepcopy(&src.posModel[i])
	}
	dc.alignCodec.deepcopy(&src.alignCodec)
}

// newDistCodec creates a new distance codec.
func (dc *distCodec) init() {
	for i := range dc.posSlotCodecs {
		dc.posSlotCodecs[i] = makeTreeCodec(posSlotBits)
	}
	for i := range dc.posModel {
		posSlot := startPosModel + i
		bits := (posSlot >> 1) - 1
		dc.posModel[i] = makeTreeReverseCodec(bits)
	}
	dc.alignCodec = makeTreeReverseCodec(alignBits)
}

// lenState converts the value l to a supported lenState value.
func lenState(l uint32) uint32 {
	if l >= lenStates {
		l = lenStates - 1
	}
	return l
}

// Encode encodes the distance using the parameter l. Dist can have values from
// the full range of uint32 values. To get the distance offset the actual match
// distance has to be decreased by 1. A distance offset of 0xffffffff (eos)
// indicates the end of the stream.
func (dc *distCodec) Encode(e *rangeEncoder, dist uint32, l uint32) (err error) {
	// Compute the posSlot using nlz32
	var posSlot uint32
	var bits uint32
	if dist < startPosModel {
		posSlot = dist
	} else {
		bits = uint32(30 - nlz32(dist))
		posSlot = startPosModel - 2 + (bits << 1)
		posSlot += (dist >> uint(bits)) & 1
	}

	if err = dc.posSlotCodecs[lenState(l)].Encode(e, posSlot); err != nil {
		return
	}

	switch {
	case posSlot < startPosModel:
		return nil
	case posSlot < endPosModel:
		tc := &dc.posModel[posSlot-startPosModel]
		return tc.Encode(dist, e)
	}
	dic := directCodec(bits - alignBits)
	if err = dic.Encode(e, dist>>alignBits); err != nil {
		return
	}
	return dc.alignCodec.Encode(dist, e)
}

// Decode decodes the distance offset using the parameter l. The dist value
// 0xffffffff (eos) indicates the end of the stream. Add one to the distance
// offset to get the actual match distance.
func (dc *distCodec) Decode(d *rangeDecoder, l uint32) (dist uint32, err error) {
	posSlot, err := dc.posSlotCodecs[lenState(l)].Decode(d)
	if err != nil {
		return
	}

	// posSlot equals distance
	if posSlot < startPosModel {
		return posSlot, nil
	}

	// posSlot uses the individual models
	bits := (posSlot >> 1) - 1
	dist = (2 | (posSlot & 1)) << bits
	var u uint32
	if posSlot < endPosModel {
		tc := &dc.posModel[posSlot-startPosModel]
		if u, err = tc.Decode(d); err != nil {
			return 0, err
		}
		dist += u
		return dist, nil
	}

	// posSlots use direct encoding and a single model for the four align
	// bits.
	dic := directCodec(bits - alignBits)
	if u, err = dic.Decode(d); err != nil {
		return 0, err
	}
	dist += u << alignBits
	if u, err = dc.alignCodec.Decode(d); err != nil {
		return 0, err
	}
	dist += u
	return dist, nil
}
  07070100000BE3000081A4000000000000000000000001645E367C00001A56000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/encoder.go    // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lzma

import (
	"fmt"
	"io"
)

// opLenMargin provides the upper limit of the number of bytes required
// to encode a single operation.
const opLenMargin = 16

// compressFlags control the compression process.
type compressFlags uint32

// Values for compressFlags.
const (
	// all data should be compressed, even if compression is not
	// optimal.
	all compressFlags = 1 << iota
)

// encoderFlags provide the flags for an encoder.
type encoderFlags uint32

// Flags for the encoder.
const (
	// eosMarker requests an EOS marker to be written.
	eosMarker encoderFlags = 1 << iota
)

// Encoder compresses data buffered in the encoder dictionary and writes
// it into a byte writer.
type encoder struct {
	dict  *encoderDict
	state *state
	re    *rangeEncoder
	start int64
	// generate eos marker
	marker bool
	limit  bool
	margin int
}

// newEncoder creates a new encoder. If the byte writer must be
// limited use LimitedByteWriter provided by this package. The flags
// argument supports the eosMarker flag, controlling whether a
// terminating end-of-stream marker must be written.
func newEncoder(bw io.ByteWriter, state *state, dict *encoderDict,
	flags encoderFlags) (e *encoder, err error) {

	re, err := newRangeEncoder(bw)
	if err != nil {
		return nil, err
	}
	e = &encoder{
		dict:   dict,
		state:  state,
		re:     re,
		marker: flags&eosMarker != 0,
		start:  dict.Pos(),
		margin: opLenMargin,
	}
	if e.marker {
		e.margin += 5
	}
	return e, nil
}

// Write writes the bytes from p into the dictionary. If not enough
// space is available the data in the dictionary buffer will be
// compressed to make additional space available. If the limit of the
// underlying writer has been reached ErrLimit will be returned.
func (e *encoder) Write(p []byte) (n int, err error) {
	for {
		k, err := e.dict.Write(p[n:])
		n += k
		if err == ErrNoSpace {
			if err = e.compress(0); err != nil {
				return n, err
			}
			continue
		}
		return n, err
	}
}

// Reopen reopens the encoder with a new byte writer.
func (e *encoder) Reopen(bw io.ByteWriter) error {
	var err error
	if e.re, err = newRangeEncoder(bw); err != nil {
		return err
	}
	e.start = e.dict.Pos()
	e.limit = false
	return nil
}

// writeLiteral writes a literal into the LZMA stream
func (e *encoder) writeLiteral(l lit) error {
	var err error
	state, state2, _ := e.state.states(e.dict.Pos())
	if err = e.state.isMatch[state2].Encode(e.re, 0); err != nil {
		return err
	}
	litState := e.state.litState(e.dict.ByteAt(1), e.dict.Pos())
	match := e.dict.ByteAt(int(e.state.rep[0]) + 1)
	err = e.state.litCodec.Encode(e.re, l.b, state, match, litState)
	if err != nil {
		return err
	}
	e.state.updateStateLiteral()
	return nil
}

// iverson implements the Iverson operator as proposed by Donald Knuth in his
// book Concrete Mathematics.
func iverson(ok bool) uint32 {
	if ok {
		return 1
	}
	return 0
}

// writeMatch writes a repetition operation into the operation stream
func (e *encoder) writeMatch(m match) error {
	var err error
	if !(minDistance <= m.distance && m.distance <= maxDistance) {
		panic(fmt.Errorf("match distance %d out of range", m.distance))
	}
	dist := uint32(m.distance - minDistance)
	if !(minMatchLen <= m.n && m.n <= maxMatchLen) &&
		!(dist == e.state.rep[0] && m.n == 1) {
		panic(fmt.Errorf(
			"match length %d out of range; dist %d rep[0] %d",
			m.n, dist, e.state.rep[0]))
	}
	state, state2, posState := e.state.states(e.dict.Pos())
	if err = e.state.isMatch[state2].Encode(e.re, 1); err != nil {
		return err
	}
	g := 0
	for ; g < 4; g++ {
		if e.state.rep[g] == dist {
			break
		}
	}
	b := iverson(g < 4)
	if err = e.state.isRep[state].Encode(e.re, b); err != nil {
		return err
	}
	n := uint32(m.n - minMatchLen)
	if b == 0 {
		// simple match
		e.state.rep[3], e.state.rep[2], e.state.rep[1], e.state.rep[0] =
			e.state.rep[2], e.state.rep[1], e.state.rep[0], dist
		e.state.updateStateMatch()
		if err = e.state.lenCodec.Encode(e.re, n, posState); err != nil {
			return err
		}
		return e.state.distCodec.Encode(e.re, dist, n)
	}
	b = iverson(g != 0)
	if err = e.state.isRepG0[state].Encode(e.re, b); err != nil {
		return err
	}
	if b == 0 {
		// g == 0
		b = iverson(m.n != 1)
		if err = e.state.isRepG0Long[state2].Encode(e.re, b); err != nil {
			return err
		}
		if b == 0 {
			e.state.updateStateShortRep()
			return nil
		}
	} else {
		// g in {1,2,3}
		b = iverson(g != 1)
		if err = e.state.isRepG1[state].Encode(e.re, b); err != nil {
			return err
		}
		if b == 1 {
			// g in {2,3}
			b = iverson(g != 2)
			err = e.state.isRepG2[state].Encode(e.re, b)
			if err != nil {
				return err
			}
			if b == 1 {
				e.state.rep[3] = e.state.rep[2]
			}
			e.state.rep[2] = e.state.rep[1]
		}
		e.state.rep[1] = e.state.rep[0]
		e.state.rep[0] = dist
	}
	e.state.updateStateRep()
	return e.state.repLenCodec.Encode(e.re, n, posState)
}

// writeOp writes a single operation to the range encoder. The function
// checks whether there is enough space available to close the LZMA
// stream.
func (e *encoder) writeOp(op operation) error {
	if e.re.Available() < int64(e.margin) {
		return ErrLimit
	}
	switch x := op.(type) {
	case lit:
		return e.writeLiteral(x)
	case match:
		return e.writeMatch(x)
	default:
		panic("unexpected operation")
	}
}

// compress compressed data from the dictionary buffer. If the flag all
// is set, all data in the dictionary buffer will be compressed. The
// function returns ErrLimit if the underlying writer has reached its
// limit.
func (e *encoder) compress(flags compressFlags) error {
	n := 0
	if flags&all == 0 {
		n = maxMatchLen - 1
	}
	d := e.dict
	m := d.m
	for d.Buffered() > n {
		op := m.NextOp(e.state.rep)
		if err := e.writeOp(op); err != nil {
			return err
		}
		d.Discard(op.Len())
	}
	return nil
}

// eosMatch is a pseudo operation that indicates the end of the stream.
var eosMatch = match{distance: maxDistance, n: minMatchLen}

// Close terminates the LZMA stream. If requested the end-of-stream
// marker will be written. If the byte writer limit has been or will be
// reached during compression of the remaining data in the buffer the
// LZMA stream will be closed and data will remain in the buffer.
func (e *encoder) Close() error {
	err := e.compress(all)
	if err != nil && err != ErrLimit {
		return err
	}
	if e.marker {
		if err := e.writeMatch(eosMatch); err != nil {
			return err
		}
	}
	err = e.re.Close()
	return err
}

// Compressed returns the number bytes of the input data that been
// compressed.
func (e *encoder) Compressed() int64 {
	return e.dict.Pos() - e.start
}
  07070100000BE4000081A4000000000000000000000001645E367C00000D9D000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/encoderdict.go    // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lzma

import (
	"errors"
	"fmt"
	"io"
)

// matcher is an interface that supports the identification of the next
// operation.
type matcher interface {
	io.Writer
	SetDict(d *encoderDict)
	NextOp(rep [4]uint32) operation
}

// encoderDict provides the dictionary of the encoder. It includes an
// additional buffer atop of the actual dictionary.
type encoderDict struct {
	buf      buffer
	m        matcher
	head     int64
	capacity int
	// preallocated array
	data [maxMatchLen]byte
}

// newEncoderDict creates the encoder dictionary. The argument bufSize
// defines the size of the additional buffer.
func newEncoderDict(dictCap, bufSize int, m matcher) (d *encoderDict, err error) {
	if !(1 <= dictCap && int64(dictCap) <= MaxDictCap) {
		return nil, errors.New(
			"lzma: dictionary capacity out of range")
	}
	if bufSize < 1 {
		return nil, errors.New(
			"lzma: buffer size must be larger than zero")
	}
	d = &encoderDict{
		buf:      *newBuffer(dictCap + bufSize),
		capacity: dictCap,
		m:        m,
	}
	m.SetDict(d)
	return d, nil
}

// Discard discards n bytes. Note that n must not be larger than
// MaxMatchLen.
func (d *encoderDict) Discard(n int) {
	p := d.data[:n]
	k, _ := d.buf.Read(p)
	if k < n {
		panic(fmt.Errorf("lzma: can't discard %d bytes", n))
	}
	d.head += int64(n)
	d.m.Write(p)
}

// Len returns the data available in the encoder dictionary.
func (d *encoderDict) Len() int {
	n := d.buf.Available()
	if int64(n) > d.head {
		return int(d.head)
	}
	return n
}

// DictLen returns the actual length of data in the dictionary.
func (d *encoderDict) DictLen() int {
	if d.head < int64(d.capacity) {
		return int(d.head)
	}
	return d.capacity
}

// Available returns the number of bytes that can be written by a
// following Write call.
func (d *encoderDict) Available() int {
	return d.buf.Available() - d.DictLen()
}

// Write writes data into the dictionary buffer. Note that the position
// of the dictionary head will not be moved. If there is not enough
// space in the buffer ErrNoSpace will be returned.
func (d *encoderDict) Write(p []byte) (n int, err error) {
	m := d.Available()
	if len(p) > m {
		p = p[:m]
		err = ErrNoSpace
	}
	var e error
	if n, e = d.buf.Write(p); e != nil {
		err = e
	}
	return n, err
}

// Pos returns the position of the head.
func (d *encoderDict) Pos() int64 { return d.head }

// ByteAt returns the byte at the given distance.
func (d *encoderDict) ByteAt(distance int) byte {
	if !(0 < distance && distance <= d.Len()) {
		return 0
	}
	i := d.buf.rear - distance
	if i < 0 {
		i += len(d.buf.data)
	}
	return d.buf.data[i]
}

// CopyN copies the last n bytes from the dictionary into the provided
// writer. This is used for copying uncompressed data into an
// uncompressed segment.
func (d *encoderDict) CopyN(w io.Writer, n int) (written int, err error) {
	if n <= 0 {
		return 0, nil
	}
	m := d.Len()
	if n > m {
		n = m
		err = ErrNoSpace
	}
	i := d.buf.rear - n
	var e error
	if i < 0 {
		i += len(d.buf.data)
		if written, e = w.Write(d.buf.data[i:]); e != nil {
			return written, e
		}
		i = 0
	}
	var k int
	k, e = w.Write(d.buf.data[i:d.buf.rear])
	written += k
	if e != nil {
		err = e
	}
	return written, err
}

// Buffered returns the number of bytes in the buffer.
func (d *encoderDict) Buffered() int { return d.buf.Buffered() }
   07070100000BE5000081A4000000000000000000000001645E367C00000043000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/fox.lzma  ]    *%fKxŢ. 4A6i<4'	f#  07070100000BE6000081A4000000000000000000000001645E367C00001D9B000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/hashtable.go  // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lzma

import (
	"errors"
	"fmt"

	"github.com/ulikunitz/xz/internal/hash"
)

/* For compression we need to find byte sequences that match the byte
 * sequence at the dictionary head. A hash table is a simple method to
 * provide this capability.
 */

// maxMatches limits the number of matches requested from the Matches
// function. This controls the speed of the overall encoding.
const maxMatches = 16

// shortDists defines the number of short distances supported by the
// implementation.
const shortDists = 8

// The minimum is somehow arbitrary but the maximum is limited by the
// memory requirements of the hash table.
const (
	minTableExponent = 9
	maxTableExponent = 20
)

// newRoller contains the function used to create an instance of the
// hash.Roller.
var newRoller = func(n int) hash.Roller { return hash.NewCyclicPoly(n) }

// hashTable stores the hash table including the rolling hash method.
//
// We implement chained hashing into a circular buffer. Each entry in
// the circular buffer stores the delta distance to the next position with a
// word that has the same hash value.
type hashTable struct {
	dict *encoderDict
	// actual hash table
	t []int64
	// circular list data with the offset to the next word
	data  []uint32
	front int
	// mask for computing the index for the hash table
	mask uint64
	// hash offset; initial value is -int64(wordLen)
	hoff int64
	// length of the hashed word
	wordLen int
	// hash roller for computing the hash values for the Write
	// method
	wr hash.Roller
	// hash roller for computing arbitrary hashes
	hr hash.Roller
	// preallocated slices
	p         [maxMatches]int64
	distances [maxMatches + shortDists]int
}

// hashTableExponent derives the hash table exponent from the dictionary
// capacity.
func hashTableExponent(n uint32) int {
	e := 30 - nlz32(n)
	switch {
	case e < minTableExponent:
		e = minTableExponent
	case e > maxTableExponent:
		e = maxTableExponent
	}
	return e
}

// newHashTable creates a new hash table for words of length wordLen
func newHashTable(capacity int, wordLen int) (t *hashTable, err error) {
	if !(0 < capacity) {
		return nil, errors.New(
			"newHashTable: capacity must not be negative")
	}
	exp := hashTableExponent(uint32(capacity))
	if !(1 <= wordLen && wordLen <= 4) {
		return nil, errors.New("newHashTable: " +
			"argument wordLen out of range")
	}
	n := 1 << uint(exp)
	if n <= 0 {
		panic("newHashTable: exponent is too large")
	}
	t = &hashTable{
		t:       make([]int64, n),
		data:    make([]uint32, capacity),
		mask:    (uint64(1) << uint(exp)) - 1,
		hoff:    -int64(wordLen),
		wordLen: wordLen,
		wr:      newRoller(wordLen),
		hr:      newRoller(wordLen),
	}
	return t, nil
}

func (t *hashTable) SetDict(d *encoderDict) { t.dict = d }

// buffered returns the number of bytes that are currently hashed.
func (t *hashTable) buffered() int {
	n := t.hoff + 1
	switch {
	case n <= 0:
		return 0
	case n >= int64(len(t.data)):
		return len(t.data)
	}
	return int(n)
}

// addIndex adds n to an index ensuring that is stays inside the
// circular buffer for the hash chain.
func (t *hashTable) addIndex(i, n int) int {
	i += n - len(t.data)
	if i < 0 {
		i += len(t.data)
	}
	return i
}

// putDelta puts the delta instance at the current front of the circular
// chain buffer.
func (t *hashTable) putDelta(delta uint32) {
	t.data[t.front] = delta
	t.front = t.addIndex(t.front, 1)
}

// putEntry puts a new entry into the hash table. If there is already a
// value stored it is moved into the circular chain buffer.
func (t *hashTable) putEntry(h uint64, pos int64) {
	if pos < 0 {
		return
	}
	i := h & t.mask
	old := t.t[i] - 1
	t.t[i] = pos + 1
	var delta int64
	if old >= 0 {
		delta = pos - old
		if delta > 1<<32-1 || delta > int64(t.buffered()) {
			delta = 0
		}
	}
	t.putDelta(uint32(delta))
}

// WriteByte converts a single byte into a hash and puts them into the hash
// table.
func (t *hashTable) WriteByte(b byte) error {
	h := t.wr.RollByte(b)
	t.hoff++
	t.putEntry(h, t.hoff)
	return nil
}

// Write converts the bytes provided into hash tables and stores the
// abbreviated offsets into the hash table. The method will never return an
// error.
func (t *hashTable) Write(p []byte) (n int, err error) {
	for _, b := range p {
		// WriteByte doesn't generate an error.
		t.WriteByte(b)
	}
	return len(p), nil
}

// getMatches the matches for a specific hash. The functions returns the
// number of positions found.
//
// TODO: Make a getDistances because that we are actually interested in.
func (t *hashTable) getMatches(h uint64, positions []int64) (n int) {
	if t.hoff < 0 || len(positions) == 0 {
		return 0
	}
	buffered := t.buffered()
	tailPos := t.hoff + 1 - int64(buffered)
	rear := t.front - buffered
	if rear >= 0 {
		rear -= len(t.data)
	}
	// get the slot for the hash
	pos := t.t[h&t.mask] - 1
	delta := pos - tailPos
	for {
		if delta < 0 {
			return n
		}
		positions[n] = tailPos + delta
		n++
		if n >= len(positions) {
			return n
		}
		i := rear + int(delta)
		if i < 0 {
			i += len(t.data)
		}
		u := t.data[i]
		if u == 0 {
			return n
		}
		delta -= int64(u)
	}
}

// hash computes the rolling hash for the word stored in p. For correct
// results its length must be equal to t.wordLen.
func (t *hashTable) hash(p []byte) uint64 {
	var h uint64
	for _, b := range p {
		h = t.hr.RollByte(b)
	}
	return h
}

// Matches fills the positions slice with potential matches. The
// functions returns the number of positions filled into positions. The
// byte slice p must have word length of the hash table.
func (t *hashTable) Matches(p []byte, positions []int64) int {
	if len(p) != t.wordLen {
		panic(fmt.Errorf(
			"byte slice must have length %d", t.wordLen))
	}
	h := t.hash(p)
	return t.getMatches(h, positions)
}

// NextOp identifies the next operation using the hash table.
//
// TODO: Use all repetitions to find matches.
func (t *hashTable) NextOp(rep [4]uint32) operation {
	// get positions
	data := t.dict.data[:maxMatchLen]
	n, _ := t.dict.buf.Peek(data)
	data = data[:n]
	var p []int64
	if n < t.wordLen {
		p = t.p[:0]
	} else {
		p = t.p[:maxMatches]
		n = t.Matches(data[:t.wordLen], p)
		p = p[:n]
	}

	// convert positions in potential distances
	head := t.dict.head
	dists := append(t.distances[:0], 1, 2, 3, 4, 5, 6, 7, 8)
	for _, pos := range p {
		dis := int(head - pos)
		if dis > shortDists {
			dists = append(dists, dis)
		}
	}

	// check distances
	var m match
	dictLen := t.dict.DictLen()
	for _, dist := range dists {
		if dist > dictLen {
			continue
		}

		// Here comes a trick. We are only interested in matches
		// that are longer than the matches we have been found
		// before. So before we test the whole byte sequence at
		// the given distance, we test the first byte that would
		// make the match longer. If it doesn't match the byte
		// to match, we don't to care any longer.
		i := t.dict.buf.rear - dist + m.n
		if i < 0 {
			i += len(t.dict.buf.data)
		}
		if t.dict.buf.data[i] != data[m.n] {
			// We can't get a longer match. Jump to the next
			// distance.
			continue
		}

		n := t.dict.buf.matchLen(dist, data)
		switch n {
		case 0:
			continue
		case 1:
			if uint32(dist-minDistance) != rep[0] {
				continue
			}
		}
		if n > m.n {
			m = match{int64(dist), n}
			if n == len(data) {
				// No better match will be found.
				break
			}
		}
	}

	if m.n == 0 {
		return lit{data[0]}
	}
	return m
}
 07070100000BE7000081A4000000000000000000000001645E367C00000EE2000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/header.go // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lzma

import (
	"errors"
	"fmt"
)

// uint32LE reads an uint32 integer from a byte slice
func uint32LE(b []byte) uint32 {
	x := uint32(b[3]) << 24
	x |= uint32(b[2]) << 16
	x |= uint32(b[1]) << 8
	x |= uint32(b[0])
	return x
}

// uint64LE converts the uint64 value stored as little endian to an uint64
// value.
func uint64LE(b []byte) uint64 {
	x := uint64(b[7]) << 56
	x |= uint64(b[6]) << 48
	x |= uint64(b[5]) << 40
	x |= uint64(b[4]) << 32
	x |= uint64(b[3]) << 24
	x |= uint64(b[2]) << 16
	x |= uint64(b[1]) << 8
	x |= uint64(b[0])
	return x
}

// putUint32LE puts an uint32 integer into a byte slice that must have at least
// a length of 4 bytes.
func putUint32LE(b []byte, x uint32) {
	b[0] = byte(x)
	b[1] = byte(x >> 8)
	b[2] = byte(x >> 16)
	b[3] = byte(x >> 24)
}

// putUint64LE puts the uint64 value into the byte slice as little endian
// value. The byte slice b must have at least place for 8 bytes.
func putUint64LE(b []byte, x uint64) {
	b[0] = byte(x)
	b[1] = byte(x >> 8)
	b[2] = byte(x >> 16)
	b[3] = byte(x >> 24)
	b[4] = byte(x >> 32)
	b[5] = byte(x >> 40)
	b[6] = byte(x >> 48)
	b[7] = byte(x >> 56)
}

// noHeaderSize defines the value of the length field in the LZMA header.
const noHeaderSize uint64 = 1<<64 - 1

// HeaderLen provides the length of the LZMA file header.
const HeaderLen = 13

// header represents the header of an LZMA file.
type header struct {
	properties Properties
	dictCap    int
	// uncompressed size; negative value if no size is given
	size int64
}

// marshalBinary marshals the header.
func (h *header) marshalBinary() (data []byte, err error) {
	if err = h.properties.verify(); err != nil {
		return nil, err
	}
	if !(0 <= h.dictCap && int64(h.dictCap) <= MaxDictCap) {
		return nil, fmt.Errorf("lzma: DictCap %d out of range",
			h.dictCap)
	}

	data = make([]byte, 13)

	// property byte
	data[0] = h.properties.Code()

	// dictionary capacity
	putUint32LE(data[1:5], uint32(h.dictCap))

	// uncompressed size
	var s uint64
	if h.size > 0 {
		s = uint64(h.size)
	} else {
		s = noHeaderSize
	}
	putUint64LE(data[5:], s)

	return data, nil
}

// unmarshalBinary unmarshals the header.
func (h *header) unmarshalBinary(data []byte) error {
	if len(data) != HeaderLen {
		return errors.New("lzma.unmarshalBinary: data has wrong length")
	}

	// properties
	var err error
	if h.properties, err = PropertiesForCode(data[0]); err != nil {
		return err
	}

	// dictionary capacity
	h.dictCap = int(uint32LE(data[1:]))
	if h.dictCap < 0 {
		return errors.New(
			"LZMA header: dictionary capacity exceeds maximum " +
				"integer")
	}

	// uncompressed size
	s := uint64LE(data[5:])
	if s == noHeaderSize {
		h.size = -1
	} else {
		h.size = int64(s)
		if h.size < 0 {
			return errors.New(
				"LZMA header: uncompressed size " +
					"out of int64 range")
		}
	}

	return nil
}

// validDictCap checks whether the dictionary capacity is correct. This
// is used to weed out wrong file headers.
func validDictCap(dictcap int) bool {
	if int64(dictcap) == MaxDictCap {
		return true
	}
	for n := uint(10); n < 32; n++ {
		if dictcap == 1<<n {
			return true
		}
		if dictcap == 1<<n+1<<(n-1) {
			return true
		}
	}
	return false
}

// ValidHeader checks for a valid LZMA file header. It allows only
// dictionary sizes of 2^n or 2^n+2^(n-1) with n >= 10 or 2^32-1. If
// there is an explicit size it must not exceed 256 GiB. The length of
// the data argument must be HeaderLen.
func ValidHeader(data []byte) bool {
	var h header
	if err := h.unmarshalBinary(data); err != nil {
		return false
	}
	if !validDictCap(h.dictCap) {
		return false
	}
	return h.size < 0 || h.size <= 1<<38
}
  07070100000BE8000081A4000000000000000000000001645E367C0000204D000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/header2.go    // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lzma

import (
	"errors"
	"fmt"
	"io"
)

const (
	// maximum size of compressed data in a chunk
	maxCompressed = 1 << 16
	// maximum size of uncompressed data in a chunk
	maxUncompressed = 1 << 21
)

// chunkType represents the type of an LZMA2 chunk. Note that this
// value is an internal representation and no actual encoding of a LZMA2
// chunk header.
type chunkType byte

// Possible values for the chunk type.
const (
	// end of stream
	cEOS chunkType = iota
	// uncompressed; reset dictionary
	cUD
	// uncompressed; no reset of dictionary
	cU
	// LZMA compressed; no reset
	cL
	// LZMA compressed; reset state
	cLR
	// LZMA compressed; reset state; new property value
	cLRN
	// LZMA compressed; reset state; new property value; reset dictionary
	cLRND
)

// chunkTypeStrings provide a string representation for the chunk types.
var chunkTypeStrings = [...]string{
	cEOS:  "EOS",
	cU:    "U",
	cUD:   "UD",
	cL:    "L",
	cLR:   "LR",
	cLRN:  "LRN",
	cLRND: "LRND",
}

// String returns a string representation of the chunk type.
func (c chunkType) String() string {
	if !(cEOS <= c && c <= cLRND) {
		return "unknown"
	}
	return chunkTypeStrings[c]
}

// Actual encodings for the chunk types in the value. Note that the high
// uncompressed size bits are stored in the header byte additionally.
const (
	hEOS  = 0
	hUD   = 1
	hU    = 2
	hL    = 1 << 7
	hLR   = 1<<7 | 1<<5
	hLRN  = 1<<7 | 1<<6
	hLRND = 1<<7 | 1<<6 | 1<<5
)

// errHeaderByte indicates an unsupported value for the chunk header
// byte. These bytes starts the variable-length chunk header.
var errHeaderByte = errors.New("lzma: unsupported chunk header byte")

// headerChunkType converts the header byte into a chunk type. It
// ignores the uncompressed size bits in the chunk header byte.
func headerChunkType(h byte) (c chunkType, err error) {
	if h&hL == 0 {
		// no compression
		switch h {
		case hEOS:
			c = cEOS
		case hUD:
			c = cUD
		case hU:
			c = cU
		default:
			return 0, errHeaderByte
		}
		return
	}
	switch h & hLRND {
	case hL:
		c = cL
	case hLR:
		c = cLR
	case hLRN:
		c = cLRN
	case hLRND:
		c = cLRND
	default:
		return 0, errHeaderByte
	}
	return
}

// uncompressedHeaderLen provides the length of an uncompressed header
const uncompressedHeaderLen = 3

// headerLen returns the length of the LZMA2 header for a given chunk
// type.
func headerLen(c chunkType) int {
	switch c {
	case cEOS:
		return 1
	case cU, cUD:
		return uncompressedHeaderLen
	case cL, cLR:
		return 5
	case cLRN, cLRND:
		return 6
	}
	panic(fmt.Errorf("unsupported chunk type %d", c))
}

// chunkHeader represents the contents of a chunk header.
type chunkHeader struct {
	ctype        chunkType
	uncompressed uint32
	compressed   uint16
	props        Properties
}

// String returns a string representation of the chunk header.
func (h *chunkHeader) String() string {
	return fmt.Sprintf("%s %d %d %s", h.ctype, h.uncompressed,
		h.compressed, &h.props)
}

// UnmarshalBinary reads the content of the chunk header from the data
// slice. The slice must have the correct length.
func (h *chunkHeader) UnmarshalBinary(data []byte) error {
	if len(data) == 0 {
		return errors.New("no data")
	}
	c, err := headerChunkType(data[0])
	if err != nil {
		return err
	}

	n := headerLen(c)
	if len(data) < n {
		return errors.New("incomplete data")
	}
	if len(data) > n {
		return errors.New("invalid data length")
	}

	*h = chunkHeader{ctype: c}
	if c == cEOS {
		return nil
	}

	h.uncompressed = uint32(uint16BE(data[1:3]))
	if c <= cU {
		return nil
	}
	h.uncompressed |= uint32(data[0]&^hLRND) << 16

	h.compressed = uint16BE(data[3:5])
	if c <= cLR {
		return nil
	}

	h.props, err = PropertiesForCode(data[5])
	return err
}

// MarshalBinary encodes the chunk header value. The function checks
// whether the content of the chunk header is correct.
func (h *chunkHeader) MarshalBinary() (data []byte, err error) {
	if h.ctype > cLRND {
		return nil, errors.New("invalid chunk type")
	}
	if err = h.props.verify(); err != nil {
		return nil, err
	}

	data = make([]byte, headerLen(h.ctype))

	switch h.ctype {
	case cEOS:
		return data, nil
	case cUD:
		data[0] = hUD
	case cU:
		data[0] = hU
	case cL:
		data[0] = hL
	case cLR:
		data[0] = hLR
	case cLRN:
		data[0] = hLRN
	case cLRND:
		data[0] = hLRND
	}

	putUint16BE(data[1:3], uint16(h.uncompressed))
	if h.ctype <= cU {
		return data, nil
	}
	data[0] |= byte(h.uncompressed>>16) &^ hLRND

	putUint16BE(data[3:5], h.compressed)
	if h.ctype <= cLR {
		return data, nil
	}

	data[5] = h.props.Code()
	return data, nil
}

// readChunkHeader reads the chunk header from the IO reader.
func readChunkHeader(r io.Reader) (h *chunkHeader, err error) {
	p := make([]byte, 1, 6)
	if _, err = io.ReadFull(r, p); err != nil {
		return
	}
	c, err := headerChunkType(p[0])
	if err != nil {
		return
	}
	p = p[:headerLen(c)]
	if _, err = io.ReadFull(r, p[1:]); err != nil {
		return
	}
	h = new(chunkHeader)
	if err = h.UnmarshalBinary(p); err != nil {
		return nil, err
	}
	return h, nil
}

// uint16BE converts a big-endian uint16 representation to an uint16
// value.
func uint16BE(p []byte) uint16 {
	return uint16(p[0])<<8 | uint16(p[1])
}

// putUint16BE puts the big-endian uint16 presentation into the given
// slice.
func putUint16BE(p []byte, x uint16) {
	p[0] = byte(x >> 8)
	p[1] = byte(x)
}

// chunkState is used to manage the state of the chunks
type chunkState byte

// start and stop define the initial and terminating state of the chunk
// state
const (
	start chunkState = 'S'
	stop  chunkState = 'T'
)

// errors for the chunk state handling
var (
	errChunkType = errors.New("lzma: unexpected chunk type")
	errState     = errors.New("lzma: wrong chunk state")
)

// next transitions state based on chunk type input
func (c *chunkState) next(ctype chunkType) error {
	switch *c {
	// start state
	case 'S':
		switch ctype {
		case cEOS:
			*c = 'T'
		case cUD:
			*c = 'R'
		case cLRND:
			*c = 'L'
		default:
			return errChunkType
		}
	// normal LZMA mode
	case 'L':
		switch ctype {
		case cEOS:
			*c = 'T'
		case cUD:
			*c = 'R'
		case cU:
			*c = 'U'
		case cL, cLR, cLRN, cLRND:
			break
		default:
			return errChunkType
		}
	// reset required
	case 'R':
		switch ctype {
		case cEOS:
			*c = 'T'
		case cUD, cU:
			break
		case cLRN, cLRND:
			*c = 'L'
		default:
			return errChunkType
		}
	// uncompressed
	case 'U':
		switch ctype {
		case cEOS:
			*c = 'T'
		case cUD:
			*c = 'R'
		case cU:
			break
		case cL, cLR, cLRN, cLRND:
			*c = 'L'
		default:
			return errChunkType
		}
	// terminal state
	case 'T':
		return errChunkType
	default:
		return errState
	}
	return nil
}

// defaultChunkType returns the default chunk type for each chunk state.
func (c chunkState) defaultChunkType() chunkType {
	switch c {
	case 'S':
		return cLRND
	case 'L', 'U':
		return cL
	case 'R':
		return cLRN
	default:
		// no error
		return cEOS
	}
}

// maxDictCap defines the maximum dictionary capacity supported by the
// LZMA2 dictionary capacity encoding.
const maxDictCap = 1<<32 - 1

// maxDictCapCode defines the maximum dictionary capacity code.
const maxDictCapCode = 40

// The function decodes the dictionary capacity byte, but doesn't change
// for the correct range of the given byte.
func decodeDictCap(c byte) int64 {
	return (2 | int64(c)&1) << (11 + (c>>1)&0x1f)
}

// DecodeDictCap decodes the encoded dictionary capacity. The function
// returns an error if the code is out of range.
func DecodeDictCap(c byte) (n int64, err error) {
	if c >= maxDictCapCode {
		if c == maxDictCapCode {
			return maxDictCap, nil
		}
		return 0, errors.New("lzma: invalid dictionary size code")
	}
	return decodeDictCap(c), nil
}

// EncodeDictCap encodes a dictionary capacity. The function returns the
// code for the capacity that is greater or equal n. If n exceeds the
// maximum support dictionary capacity, the maximum value is returned.
func EncodeDictCap(n int64) byte {
	a, b := byte(0), byte(40)
	for a < b {
		c := a + (b-a)>>1
		m := decodeDictCap(c)
		if n <= m {
			if n == m {
				return c
			}
			b = c
		} else {
			a = c + 1
		}
	}
	return a
}
   07070100000BE9000081A4000000000000000000000001645E367C00000AC9000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/lengthcodec.go    // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lzma

import "errors"

// maxPosBits defines the number of bits of the position value that are used to
// to compute the posState value. The value is used to select the tree codec
// for length encoding and decoding.
const maxPosBits = 4

// minMatchLen and maxMatchLen give the minimum and maximum values for
// encoding and decoding length values. minMatchLen is also used as base
// for the encoded length values.
const (
	minMatchLen = 2
	maxMatchLen = minMatchLen + 16 + 256 - 1
)

// lengthCodec support the encoding of the length value.
type lengthCodec struct {
	choice [2]prob
	low    [1 << maxPosBits]treeCodec
	mid    [1 << maxPosBits]treeCodec
	high   treeCodec
}

// deepcopy initializes the lc value as deep copy of the source value.
func (lc *lengthCodec) deepcopy(src *lengthCodec) {
	if lc == src {
		return
	}
	lc.choice = src.choice
	for i := range lc.low {
		lc.low[i].deepcopy(&src.low[i])
	}
	for i := range lc.mid {
		lc.mid[i].deepcopy(&src.mid[i])
	}
	lc.high.deepcopy(&src.high)
}

// init initializes a new length codec.
func (lc *lengthCodec) init() {
	for i := range lc.choice {
		lc.choice[i] = probInit
	}
	for i := range lc.low {
		lc.low[i] = makeTreeCodec(3)
	}
	for i := range lc.mid {
		lc.mid[i] = makeTreeCodec(3)
	}
	lc.high = makeTreeCodec(8)
}

// Encode encodes the length offset. The length offset l can be compute by
// subtracting minMatchLen (2) from the actual length.
//
//	l = length - minMatchLen
func (lc *lengthCodec) Encode(e *rangeEncoder, l uint32, posState uint32,
) (err error) {
	if l > maxMatchLen-minMatchLen {
		return errors.New("lengthCodec.Encode: l out of range")
	}
	if l < 8 {
		if err = lc.choice[0].Encode(e, 0); err != nil {
			return
		}
		return lc.low[posState].Encode(e, l)
	}
	if err = lc.choice[0].Encode(e, 1); err != nil {
		return
	}
	if l < 16 {
		if err = lc.choice[1].Encode(e, 0); err != nil {
			return
		}
		return lc.mid[posState].Encode(e, l-8)
	}
	if err = lc.choice[1].Encode(e, 1); err != nil {
		return
	}
	if err = lc.high.Encode(e, l-16); err != nil {
		return
	}
	return nil
}

// Decode reads the length offset. Add minMatchLen to compute the actual length
// to the length offset l.
func (lc *lengthCodec) Decode(d *rangeDecoder, posState uint32,
) (l uint32, err error) {
	var b uint32
	if b, err = lc.choice[0].Decode(d); err != nil {
		return
	}
	if b == 0 {
		l, err = lc.low[posState].Decode(d)
		return
	}
	if b, err = lc.choice[1].Decode(d); err != nil {
		return
	}
	if b == 0 {
		l, err = lc.mid[posState].Decode(d)
		l += 8
		return
	}
	l, err = lc.high.Decode(d)
	l += 16
	return
}
   07070100000BEA000081A4000000000000000000000001645E367C00000AD9000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/literalcodec.go   // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lzma

// literalCodec supports the encoding of literal. It provides 768 probability
// values per literal state. The upper 512 probabilities are used with the
// context of a match bit.
type literalCodec struct {
	probs []prob
}

// deepcopy initializes literal codec c as a deep copy of the source.
func (c *literalCodec) deepcopy(src *literalCodec) {
	if c == src {
		return
	}
	c.probs = make([]prob, len(src.probs))
	copy(c.probs, src.probs)
}

// init initializes the literal codec.
func (c *literalCodec) init(lc, lp int) {
	switch {
	case !(minLC <= lc && lc <= maxLC):
		panic("lc out of range")
	case !(minLP <= lp && lp <= maxLP):
		panic("lp out of range")
	}
	c.probs = make([]prob, 0x300<<uint(lc+lp))
	for i := range c.probs {
		c.probs[i] = probInit
	}
}

// Encode encodes the byte s using a range encoder as well as the current LZMA
// encoder state, a match byte and the literal state.
func (c *literalCodec) Encode(e *rangeEncoder, s byte,
	state uint32, match byte, litState uint32,
) (err error) {
	k := litState * 0x300
	probs := c.probs[k : k+0x300]
	symbol := uint32(1)
	r := uint32(s)
	if state >= 7 {
		m := uint32(match)
		for {
			matchBit := (m >> 7) & 1
			m <<= 1
			bit := (r >> 7) & 1
			r <<= 1
			i := ((1 + matchBit) << 8) | symbol
			if err = probs[i].Encode(e, bit); err != nil {
				return
			}
			symbol = (symbol << 1) | bit
			if matchBit != bit {
				break
			}
			if symbol >= 0x100 {
				break
			}
		}
	}
	for symbol < 0x100 {
		bit := (r >> 7) & 1
		r <<= 1
		if err = probs[symbol].Encode(e, bit); err != nil {
			return
		}
		symbol = (symbol << 1) | bit
	}
	return nil
}

// Decode decodes a literal byte using the range decoder as well as the LZMA
// state, a match byte, and the literal state.
func (c *literalCodec) Decode(d *rangeDecoder,
	state uint32, match byte, litState uint32,
) (s byte, err error) {
	k := litState * 0x300
	probs := c.probs[k : k+0x300]
	symbol := uint32(1)
	if state >= 7 {
		m := uint32(match)
		for {
			matchBit := (m >> 7) & 1
			m <<= 1
			i := ((1 + matchBit) << 8) | symbol
			bit, err := d.DecodeBit(&probs[i])
			if err != nil {
				return 0, err
			}
			symbol = (symbol << 1) | bit
			if matchBit != bit {
				break
			}
			if symbol >= 0x100 {
				break
			}
		}
	}
	for symbol < 0x100 {
		bit, err := d.DecodeBit(&probs[symbol])
		if err != nil {
			return 0, err
		}
		symbol = (symbol << 1) | bit
	}
	s = byte(symbol - 0x100)
	return s, nil
}

// minLC and maxLC define the range for LC values.
const (
	minLC = 0
	maxLC = 8
)

// minLC and maxLC define the range for LP values.
const (
	minLP = 0
	maxLP = 4
)
   07070100000BEB000081A4000000000000000000000001645E367C000004B5000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/matchalgorithm.go // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lzma

import "errors"

// MatchAlgorithm identifies an algorithm to find matches in the
// dictionary.
type MatchAlgorithm byte

// Supported matcher algorithms.
const (
	HashTable4 MatchAlgorithm = iota
	BinaryTree
)

// maStrings are used by the String method.
var maStrings = map[MatchAlgorithm]string{
	HashTable4: "HashTable4",
	BinaryTree: "BinaryTree",
}

// String returns a string representation of the Matcher.
func (a MatchAlgorithm) String() string {
	if s, ok := maStrings[a]; ok {
		return s
	}
	return "unknown"
}

var errUnsupportedMatchAlgorithm = errors.New(
	"lzma: unsupported match algorithm value")

// verify checks whether the matcher value is supported.
func (a MatchAlgorithm) verify() error {
	if _, ok := maStrings[a]; !ok {
		return errUnsupportedMatchAlgorithm
	}
	return nil
}

func (a MatchAlgorithm) new(dictCap int) (m matcher, err error) {
	switch a {
	case HashTable4:
		return newHashTable(dictCap, 4)
	case BinaryTree:
		return newBinTree(dictCap)
	}
	return nil, errUnsupportedMatchAlgorithm
}
   07070100000BEC000081A4000000000000000000000001645E367C0000046E000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/operation.go  // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lzma

import (
	"fmt"
	"unicode"
)

// operation represents an operation on the dictionary during encoding or
// decoding.
type operation interface {
	Len() int
}

// rep represents a repetition at the given distance and the given length
type match struct {
	// supports all possible distance values, including the eos marker
	distance int64
	// length
	n int
}

// Len returns the number of bytes matched.
func (m match) Len() int {
	return m.n
}

// String returns a string representation for the repetition.
func (m match) String() string {
	return fmt.Sprintf("M{%d,%d}", m.distance, m.n)
}

// lit represents a single byte literal.
type lit struct {
	b byte
}

// Len returns 1 for the single byte literal.
func (l lit) Len() int {
	return 1
}

// String returns a string representation for the literal.
func (l lit) String() string {
	var c byte
	if unicode.IsPrint(rune(l.b)) {
		c = l.b
	} else {
		c = '.'
	}
	return fmt.Sprintf("L{%c/%02x}", c, l.b)
}
  07070100000BED000081A4000000000000000000000001645E367C00000606000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/prob.go   // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lzma

// movebits defines the number of bits used for the updates of probability
// values.
const movebits = 5

// probbits defines the number of bits of a probability value.
const probbits = 11

// probInit defines 0.5 as initial value for prob values.
const probInit prob = 1 << (probbits - 1)

// Type prob represents probabilities. The type can also be used to encode and
// decode single bits.
type prob uint16

// Dec decreases the probability. The decrease is proportional to the
// probability value.
func (p *prob) dec() {
	*p -= *p >> movebits
}

// Inc increases the probability. The Increase is proportional to the
// difference of 1 and the probability value.
func (p *prob) inc() {
	*p += ((1 << probbits) - *p) >> movebits
}

// Computes the new bound for a given range using the probability value.
func (p prob) bound(r uint32) uint32 {
	return (r >> probbits) * uint32(p)
}

// Bits returns 1. One is the number of bits that can be encoded or decoded
// with a single prob value.
func (p prob) Bits() int {
	return 1
}

// Encode encodes the least-significant bit of v. Note that the p value will be
// changed.
func (p *prob) Encode(e *rangeEncoder, v uint32) error {
	return e.EncodeBit(v, p)
}

// Decode decodes a single bit. Note that the p value will change.
func (p *prob) Decode(d *rangeDecoder) (v uint32, err error) {
	return d.DecodeBit(p)
}
  07070100000BEE000081A4000000000000000000000001645E367C00000706000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/properties.go // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lzma

import (
	"errors"
	"fmt"
)

// maximum and minimum values for the LZMA properties.
const (
	minPB = 0
	maxPB = 4
)

// maxPropertyCode is the possible maximum of a properties code byte.
const maxPropertyCode = (maxPB+1)*(maxLP+1)*(maxLC+1) - 1

// Properties contains the parameters LC, LP and PB. The parameter LC
// defines the number of literal context bits; parameter LP the number
// of literal position bits and PB the number of position bits.
type Properties struct {
	LC int
	LP int
	PB int
}

// String returns the properties in a string representation.
func (p *Properties) String() string {
	return fmt.Sprintf("LC %d LP %d PB %d", p.LC, p.LP, p.PB)
}

// PropertiesForCode converts a properties code byte into a Properties value.
func PropertiesForCode(code byte) (p Properties, err error) {
	if code > maxPropertyCode {
		return p, errors.New("lzma: invalid properties code")
	}
	p.LC = int(code % 9)
	code /= 9
	p.LP = int(code % 5)
	code /= 5
	p.PB = int(code % 5)
	return p, err
}

// verify checks the properties for correctness.
func (p *Properties) verify() error {
	if p == nil {
		return errors.New("lzma: properties are nil")
	}
	if !(minLC <= p.LC && p.LC <= maxLC) {
		return errors.New("lzma: lc out of range")
	}
	if !(minLP <= p.LP && p.LP <= maxLP) {
		return errors.New("lzma: lp out of range")
	}
	if !(minPB <= p.PB && p.PB <= maxPB) {
		return errors.New("lzma: pb out of range")
	}
	return nil
}

// Code converts the properties to a byte. The function assumes that
// the properties components are all in range.
func (p Properties) Code() byte {
	return byte((p.PB*5+p.LP)*9 + p.LC)
}
  07070100000BEF000081A4000000000000000000000001645E367C00001456000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/rangecodec.go // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lzma

import (
	"errors"
	"io"
)

// rangeEncoder implements range encoding of single bits. The low value can
// overflow therefore we need uint64. The cache value is used to handle
// overflows.
type rangeEncoder struct {
	lbw      *LimitedByteWriter
	nrange   uint32
	low      uint64
	cacheLen int64
	cache    byte
}

// maxInt64 provides the  maximal value of the int64 type
const maxInt64 = 1<<63 - 1

// newRangeEncoder creates a new range encoder.
func newRangeEncoder(bw io.ByteWriter) (re *rangeEncoder, err error) {
	lbw, ok := bw.(*LimitedByteWriter)
	if !ok {
		lbw = &LimitedByteWriter{BW: bw, N: maxInt64}
	}
	return &rangeEncoder{
		lbw:      lbw,
		nrange:   0xffffffff,
		cacheLen: 1}, nil
}

// Available returns the number of bytes that still can be written. The
// method takes the bytes that will be currently written by Close into
// account.
func (e *rangeEncoder) Available() int64 {
	return e.lbw.N - (e.cacheLen + 4)
}

// writeByte writes a single byte to the underlying writer. An error is
// returned if the limit is reached. The written byte will be counted if
// the underlying writer doesn't return an error.
func (e *rangeEncoder) writeByte(c byte) error {
	if e.Available() < 1 {
		return ErrLimit
	}
	return e.lbw.WriteByte(c)
}

// DirectEncodeBit encodes the least-significant bit of b with probability 1/2.
func (e *rangeEncoder) DirectEncodeBit(b uint32) error {
	e.nrange >>= 1
	e.low += uint64(e.nrange) & (0 - (uint64(b) & 1))

	// normalize
	const top = 1 << 24
	if e.nrange >= top {
		return nil
	}
	e.nrange <<= 8
	return e.shiftLow()
}

// EncodeBit encodes the least significant bit of b. The p value will be
// updated by the function depending on the bit encoded.
func (e *rangeEncoder) EncodeBit(b uint32, p *prob) error {
	bound := p.bound(e.nrange)
	if b&1 == 0 {
		e.nrange = bound
		p.inc()
	} else {
		e.low += uint64(bound)
		e.nrange -= bound
		p.dec()
	}

	// normalize
	const top = 1 << 24
	if e.nrange >= top {
		return nil
	}
	e.nrange <<= 8
	return e.shiftLow()
}

// Close writes a complete copy of the low value.
func (e *rangeEncoder) Close() error {
	for i := 0; i < 5; i++ {
		if err := e.shiftLow(); err != nil {
			return err
		}
	}
	return nil
}

// shiftLow shifts the low value for 8 bit. The shifted byte is written into
// the byte writer. The cache value is used to handle overflows.
func (e *rangeEncoder) shiftLow() error {
	if uint32(e.low) < 0xff000000 || (e.low>>32) != 0 {
		tmp := e.cache
		for {
			err := e.writeByte(tmp + byte(e.low>>32))
			if err != nil {
				return err
			}
			tmp = 0xff
			e.cacheLen--
			if e.cacheLen <= 0 {
				if e.cacheLen < 0 {
					panic("negative cacheLen")
				}
				break
			}
		}
		e.cache = byte(uint32(e.low) >> 24)
	}
	e.cacheLen++
	e.low = uint64(uint32(e.low) << 8)
	return nil
}

// rangeDecoder decodes single bits of the range encoding stream.
type rangeDecoder struct {
	br     io.ByteReader
	nrange uint32
	code   uint32
}

// newRangeDecoder initializes a range decoder. It reads five bytes from the
// reader and therefore may return an error.
func newRangeDecoder(br io.ByteReader) (d *rangeDecoder, err error) {
	d = &rangeDecoder{br: br, nrange: 0xffffffff}

	b, err := d.br.ReadByte()
	if err != nil {
		return nil, err
	}
	if b != 0 {
		return nil, errors.New("newRangeDecoder: first byte not zero")
	}

	for i := 0; i < 4; i++ {
		if err = d.updateCode(); err != nil {
			return nil, err
		}
	}

	if d.code >= d.nrange {
		return nil, errors.New("newRangeDecoder: d.code >= d.nrange")
	}

	return d, nil
}

// possiblyAtEnd checks whether the decoder may be at the end of the stream.
func (d *rangeDecoder) possiblyAtEnd() bool {
	return d.code == 0
}

// DirectDecodeBit decodes a bit with probability 1/2. The return value b will
// contain the bit at the least-significant position. All other bits will be
// zero.
func (d *rangeDecoder) DirectDecodeBit() (b uint32, err error) {
	d.nrange >>= 1
	d.code -= d.nrange
	t := 0 - (d.code >> 31)
	d.code += d.nrange & t
	b = (t + 1) & 1

	// d.code will stay less then d.nrange

	// normalize
	// assume d.code < d.nrange
	const top = 1 << 24
	if d.nrange >= top {
		return b, nil
	}
	d.nrange <<= 8
	// d.code < d.nrange will be maintained
	return b, d.updateCode()
}

// decodeBit decodes a single bit. The bit will be returned at the
// least-significant position. All other bits will be zero. The probability
// value will be updated.
func (d *rangeDecoder) DecodeBit(p *prob) (b uint32, err error) {
	bound := p.bound(d.nrange)
	if d.code < bound {
		d.nrange = bound
		p.inc()
		b = 0
	} else {
		d.code -= bound
		d.nrange -= bound
		p.dec()
		b = 1
	}
	// normalize
	// assume d.code < d.nrange
	const top = 1 << 24
	if d.nrange >= top {
		return b, nil
	}
	d.nrange <<= 8
	// d.code < d.nrange will be maintained
	return b, d.updateCode()
}

// updateCode reads a new byte into the code.
func (d *rangeDecoder) updateCode() error {
	b, err := d.br.ReadByte()
	if err != nil {
		return err
	}
	d.code = (d.code << 8) | uint32(b)
	return nil
}
  07070100000BF0000081A4000000000000000000000001645E367C00000A33000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/reader.go // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package lzma supports the decoding and encoding of LZMA streams.
// Reader and Writer support the classic LZMA format. Reader2 and
// Writer2 support the decoding and encoding of LZMA2 streams.
//
// The package is written completely in Go and doesn't rely on any external
// library.
package lzma

import (
	"errors"
	"io"
)

// ReaderConfig stores the parameters for the reader of the classic LZMA
// format.
type ReaderConfig struct {
	DictCap int
}

// fill converts the zero values of the configuration to the default values.
func (c *ReaderConfig) fill() {
	if c.DictCap == 0 {
		c.DictCap = 8 * 1024 * 1024
	}
}

// Verify checks the reader configuration for errors. Zero values will
// be replaced by default values.
func (c *ReaderConfig) Verify() error {
	c.fill()
	if !(MinDictCap <= c.DictCap && int64(c.DictCap) <= MaxDictCap) {
		return errors.New("lzma: dictionary capacity is out of range")
	}
	return nil
}

// Reader provides a reader for LZMA files or streams.
type Reader struct {
	lzma io.Reader
	h    header
	d    *decoder
}

// NewReader creates a new reader for an LZMA stream using the classic
// format. NewReader reads and checks the header of the LZMA stream.
func NewReader(lzma io.Reader) (r *Reader, err error) {
	return ReaderConfig{}.NewReader(lzma)
}

// NewReader creates a new reader for an LZMA stream in the classic
// format. The function reads and verifies the the header of the LZMA
// stream.
func (c ReaderConfig) NewReader(lzma io.Reader) (r *Reader, err error) {
	if err = c.Verify(); err != nil {
		return nil, err
	}
	data := make([]byte, HeaderLen)
	if _, err := io.ReadFull(lzma, data); err != nil {
		if err == io.EOF {
			return nil, errors.New("lzma: unexpected EOF")
		}
		return nil, err
	}
	r = &Reader{lzma: lzma}
	if err = r.h.unmarshalBinary(data); err != nil {
		return nil, err
	}
	if r.h.dictCap < MinDictCap {
		r.h.dictCap = MinDictCap
	}
	dictCap := r.h.dictCap
	if c.DictCap > dictCap {
		dictCap = c.DictCap
	}

	state := newState(r.h.properties)
	dict, err := newDecoderDict(dictCap)
	if err != nil {
		return nil, err
	}
	r.d, err = newDecoder(ByteReader(lzma), state, dict, r.h.size)
	if err != nil {
		return nil, err
	}
	return r, nil
}

// EOSMarker indicates that an EOS marker has been encountered.
func (r *Reader) EOSMarker() bool {
	return r.d.eosMarker
}

// Read returns uncompressed data.
func (r *Reader) Read(p []byte) (n int, err error) {
	return r.d.Read(p)
}
 07070100000BF1000081A4000000000000000000000001645E367C000013E2000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/reader2.go    // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lzma

import (
	"errors"
	"io"

	"github.com/ulikunitz/xz/internal/xlog"
)

// Reader2Config stores the parameters for the LZMA2 reader.
// format.
type Reader2Config struct {
	DictCap int
}

// fill converts the zero values of the configuration to the default values.
func (c *Reader2Config) fill() {
	if c.DictCap == 0 {
		c.DictCap = 8 * 1024 * 1024
	}
}

// Verify checks the reader configuration for errors. Zero configuration values
// will be replaced by default values.
func (c *Reader2Config) Verify() error {
	c.fill()
	if !(MinDictCap <= c.DictCap && int64(c.DictCap) <= MaxDictCap) {
		return errors.New("lzma: dictionary capacity is out of range")
	}
	return nil
}

// Reader2 supports the reading of LZMA2 chunk sequences. Note that the
// first chunk should have a dictionary reset and the first compressed
// chunk a properties reset. The chunk sequence may not be terminated by
// an end-of-stream chunk.
type Reader2 struct {
	r   io.Reader
	err error

	dict        *decoderDict
	ur          *uncompressedReader
	decoder     *decoder
	chunkReader io.Reader

	cstate chunkState
}

// NewReader2 creates a reader for an LZMA2 chunk sequence.
func NewReader2(lzma2 io.Reader) (r *Reader2, err error) {
	return Reader2Config{}.NewReader2(lzma2)
}

// NewReader2 creates an LZMA2 reader using the given configuration.
func (c Reader2Config) NewReader2(lzma2 io.Reader) (r *Reader2, err error) {
	if err = c.Verify(); err != nil {
		return nil, err
	}
	r = &Reader2{r: lzma2, cstate: start}
	r.dict, err = newDecoderDict(c.DictCap)
	if err != nil {
		return nil, err
	}
	if err = r.startChunk(); err != nil {
		r.err = err
	}
	return r, nil
}

// uncompressed tests whether the chunk type specifies an uncompressed
// chunk.
func uncompressed(ctype chunkType) bool {
	return ctype == cU || ctype == cUD
}

// startChunk parses a new chunk.
func (r *Reader2) startChunk() error {
	r.chunkReader = nil
	header, err := readChunkHeader(r.r)
	if err != nil {
		if err == io.EOF {
			err = io.ErrUnexpectedEOF
		}
		return err
	}
	xlog.Debugf("chunk header %v", header)
	if err = r.cstate.next(header.ctype); err != nil {
		return err
	}
	if r.cstate == stop {
		return io.EOF
	}
	if header.ctype == cUD || header.ctype == cLRND {
		r.dict.Reset()
	}
	size := int64(header.uncompressed) + 1
	if uncompressed(header.ctype) {
		if r.ur != nil {
			r.ur.Reopen(r.r, size)
		} else {
			r.ur = newUncompressedReader(r.r, r.dict, size)
		}
		r.chunkReader = r.ur
		return nil
	}
	br := ByteReader(io.LimitReader(r.r, int64(header.compressed)+1))
	if r.decoder == nil {
		state := newState(header.props)
		r.decoder, err = newDecoder(br, state, r.dict, size)
		if err != nil {
			return err
		}
		r.chunkReader = r.decoder
		return nil
	}
	switch header.ctype {
	case cLR:
		r.decoder.State.Reset()
	case cLRN, cLRND:
		r.decoder.State = newState(header.props)
	}
	err = r.decoder.Reopen(br, size)
	if err != nil {
		return err
	}
	r.chunkReader = r.decoder
	return nil
}

// Read reads data from the LZMA2 chunk sequence.
func (r *Reader2) Read(p []byte) (n int, err error) {
	if r.err != nil {
		return 0, r.err
	}
	for n < len(p) {
		var k int
		k, err = r.chunkReader.Read(p[n:])
		n += k
		if err != nil {
			if err == io.EOF {
				err = r.startChunk()
				if err == nil {
					continue
				}
			}
			r.err = err
			return n, err
		}
		if k == 0 {
			r.err = errors.New("lzma: Reader2 doesn't get data")
			return n, r.err
		}
	}
	return n, nil
}

// EOS returns whether the LZMA2 stream has been terminated by an
// end-of-stream chunk.
func (r *Reader2) EOS() bool {
	return r.cstate == stop
}

// uncompressedReader is used to read uncompressed chunks.
type uncompressedReader struct {
	lr   io.LimitedReader
	Dict *decoderDict
	eof  bool
	err  error
}

// newUncompressedReader initializes a new uncompressedReader.
func newUncompressedReader(r io.Reader, dict *decoderDict, size int64) *uncompressedReader {
	ur := &uncompressedReader{
		lr:   io.LimitedReader{R: r, N: size},
		Dict: dict,
	}
	return ur
}

// Reopen reinitializes an uncompressed reader.
func (ur *uncompressedReader) Reopen(r io.Reader, size int64) {
	ur.err = nil
	ur.eof = false
	ur.lr = io.LimitedReader{R: r, N: size}
}

// fill reads uncompressed data into the dictionary.
func (ur *uncompressedReader) fill() error {
	if !ur.eof {
		n, err := io.CopyN(ur.Dict, &ur.lr, int64(ur.Dict.Available()))
		if err != io.EOF {
			return err
		}
		ur.eof = true
		if n > 0 {
			return nil
		}
	}
	if ur.lr.N != 0 {
		return io.ErrUnexpectedEOF
	}
	return io.EOF
}

// Read reads uncompressed data from the limited reader.
func (ur *uncompressedReader) Read(p []byte) (n int, err error) {
	if ur.err != nil {
		return 0, ur.err
	}
	for {
		var k int
		k, err = ur.Dict.Read(p[n:])
		n += k
		if n >= len(p) {
			return n, nil
		}
		if err != nil {
			break
		}
		err = ur.fill()
		if err != nil {
			break
		}
	}
	ur.err = err
	return n, err
}
  07070100000BF2000081A4000000000000000000000001645E367C00000D03000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/state.go  // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lzma

// states defines the overall state count
const states = 12

// State maintains the full state of the operation encoding or decoding
// process.
type state struct {
	rep         [4]uint32
	isMatch     [states << maxPosBits]prob
	isRepG0Long [states << maxPosBits]prob
	isRep       [states]prob
	isRepG0     [states]prob
	isRepG1     [states]prob
	isRepG2     [states]prob
	litCodec    literalCodec
	lenCodec    lengthCodec
	repLenCodec lengthCodec
	distCodec   distCodec
	state       uint32
	posBitMask  uint32
	Properties  Properties
}

// initProbSlice initializes a slice of probabilities.
func initProbSlice(p []prob) {
	for i := range p {
		p[i] = probInit
	}
}

// Reset sets all state information to the original values.
func (s *state) Reset() {
	p := s.Properties
	*s = state{
		Properties: p,
		// dict:       s.dict,
		posBitMask: (uint32(1) << uint(p.PB)) - 1,
	}
	initProbSlice(s.isMatch[:])
	initProbSlice(s.isRep[:])
	initProbSlice(s.isRepG0[:])
	initProbSlice(s.isRepG1[:])
	initProbSlice(s.isRepG2[:])
	initProbSlice(s.isRepG0Long[:])
	s.litCodec.init(p.LC, p.LP)
	s.lenCodec.init()
	s.repLenCodec.init()
	s.distCodec.init()
}

// newState creates a new state from the give Properties.
func newState(p Properties) *state {
	s := &state{Properties: p}
	s.Reset()
	return s
}

// deepcopy initializes s as a deep copy of the source.
func (s *state) deepcopy(src *state) {
	if s == src {
		return
	}
	s.rep = src.rep
	s.isMatch = src.isMatch
	s.isRepG0Long = src.isRepG0Long
	s.isRep = src.isRep
	s.isRepG0 = src.isRepG0
	s.isRepG1 = src.isRepG1
	s.isRepG2 = src.isRepG2
	s.litCodec.deepcopy(&src.litCodec)
	s.lenCodec.deepcopy(&src.lenCodec)
	s.repLenCodec.deepcopy(&src.repLenCodec)
	s.distCodec.deepcopy(&src.distCodec)
	s.state = src.state
	s.posBitMask = src.posBitMask
	s.Properties = src.Properties
}

// cloneState creates a new clone of the give state.
func cloneState(src *state) *state {
	s := new(state)
	s.deepcopy(src)
	return s
}

// updateStateLiteral updates the state for a literal.
func (s *state) updateStateLiteral() {
	switch {
	case s.state < 4:
		s.state = 0
		return
	case s.state < 10:
		s.state -= 3
		return
	}
	s.state -= 6
}

// updateStateMatch updates the state for a match.
func (s *state) updateStateMatch() {
	if s.state < 7 {
		s.state = 7
	} else {
		s.state = 10
	}
}

// updateStateRep updates the state for a repetition.
func (s *state) updateStateRep() {
	if s.state < 7 {
		s.state = 8
	} else {
		s.state = 11
	}
}

// updateStateShortRep updates the state for a short repetition.
func (s *state) updateStateShortRep() {
	if s.state < 7 {
		s.state = 9
	} else {
		s.state = 11
	}
}

// states computes the states of the operation codec.
func (s *state) states(dictHead int64) (state1, state2, posState uint32) {
	state1 = s.state
	posState = uint32(dictHead) & s.posBitMask
	state2 = (s.state << maxPosBits) | posState
	return
}

// litState computes the literal state.
func (s *state) litState(prev byte, dictHead int64) uint32 {
	lp, lc := uint(s.Properties.LP), uint(s.Properties.LC)
	litState := ((uint32(dictHead) & ((1 << lp) - 1)) << lc) |
		(uint32(prev) >> (8 - lc))
	return litState
}
 07070100000BF3000081A4000000000000000000000001645E367C00000DD9000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/treecodecs.go // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lzma

// treeCodec encodes or decodes values with a fixed bit size. It is using a
// tree of probability value. The root of the tree is the most-significant bit.
type treeCodec struct {
	probTree
}

// makeTreeCodec makes a tree codec. The bits value must be inside the range
// [1,32].
func makeTreeCodec(bits int) treeCodec {
	return treeCodec{makeProbTree(bits)}
}

// deepcopy initializes tc as a deep copy of the source.
func (tc *treeCodec) deepcopy(src *treeCodec) {
	tc.probTree.deepcopy(&src.probTree)
}

// Encode uses the range encoder to encode a fixed-bit-size value.
func (tc *treeCodec) Encode(e *rangeEncoder, v uint32) (err error) {
	m := uint32(1)
	for i := int(tc.bits) - 1; i >= 0; i-- {
		b := (v >> uint(i)) & 1
		if err := e.EncodeBit(b, &tc.probs[m]); err != nil {
			return err
		}
		m = (m << 1) | b
	}
	return nil
}

// Decodes uses the range decoder to decode a fixed-bit-size value. Errors may
// be caused by the range decoder.
func (tc *treeCodec) Decode(d *rangeDecoder) (v uint32, err error) {
	m := uint32(1)
	for j := 0; j < int(tc.bits); j++ {
		b, err := d.DecodeBit(&tc.probs[m])
		if err != nil {
			return 0, err
		}
		m = (m << 1) | b
	}
	return m - (1 << uint(tc.bits)), nil
}

// treeReverseCodec is another tree codec, where the least-significant bit is
// the start of the probability tree.
type treeReverseCodec struct {
	probTree
}

// deepcopy initializes the treeReverseCodec as a deep copy of the
// source.
func (tc *treeReverseCodec) deepcopy(src *treeReverseCodec) {
	tc.probTree.deepcopy(&src.probTree)
}

// makeTreeReverseCodec creates treeReverseCodec value. The bits argument must
// be in the range [1,32].
func makeTreeReverseCodec(bits int) treeReverseCodec {
	return treeReverseCodec{makeProbTree(bits)}
}

// Encode uses range encoder to encode a fixed-bit-size value. The range
// encoder may cause errors.
func (tc *treeReverseCodec) Encode(v uint32, e *rangeEncoder) (err error) {
	m := uint32(1)
	for i := uint(0); i < uint(tc.bits); i++ {
		b := (v >> i) & 1
		if err := e.EncodeBit(b, &tc.probs[m]); err != nil {
			return err
		}
		m = (m << 1) | b
	}
	return nil
}

// Decodes uses the range decoder to decode a fixed-bit-size value. Errors
// returned by the range decoder will be returned.
func (tc *treeReverseCodec) Decode(d *rangeDecoder) (v uint32, err error) {
	m := uint32(1)
	for j := uint(0); j < uint(tc.bits); j++ {
		b, err := d.DecodeBit(&tc.probs[m])
		if err != nil {
			return 0, err
		}
		m = (m << 1) | b
		v |= b << j
	}
	return v, nil
}

// probTree stores enough probability values to be used by the treeEncode and
// treeDecode methods of the range coder types.
type probTree struct {
	probs []prob
	bits  byte
}

// deepcopy initializes the probTree value as a deep copy of the source.
func (t *probTree) deepcopy(src *probTree) {
	if t == src {
		return
	}
	t.probs = make([]prob, len(src.probs))
	copy(t.probs, src.probs)
	t.bits = src.bits
}

// makeProbTree initializes a probTree structure.
func makeProbTree(bits int) probTree {
	if !(1 <= bits && bits <= 32) {
		panic("bits outside of range [1,32]")
	}
	t := probTree{
		bits:  byte(bits),
		probs: make([]prob, 1<<uint(bits)),
	}
	for i := range t.probs {
		t.probs[i] = probInit
	}
	return t
}

// Bits provides the number of bits for the values to de- or encode.
func (t *probTree) Bits() int {
	return int(t.bits)
}
   07070100000BF4000081A4000000000000000000000001645E367C00001309000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/writer.go // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lzma

import (
	"bufio"
	"errors"
	"io"
)

// MinDictCap and MaxDictCap provide the range of supported dictionary
// capacities.
const (
	MinDictCap = 1 << 12
	MaxDictCap = 1<<32 - 1
)

// WriterConfig defines the configuration parameter for a writer.
type WriterConfig struct {
	// Properties for the encoding. If the it is nil the value
	// {LC: 3, LP: 0, PB: 2} will be chosen.
	Properties *Properties
	// The capacity of the dictionary. If DictCap is zero, the value
	// 8 MiB will be chosen.
	DictCap int
	// Size of the lookahead buffer; value 0 indicates default size
	// 4096
	BufSize int
	// Match algorithm
	Matcher MatchAlgorithm
	// SizeInHeader indicates that the header will contain an
	// explicit size.
	SizeInHeader bool
	// Size of the data to be encoded. A positive value will imply
	// than an explicit size will be set in the header.
	Size int64
	// EOSMarker requests whether the EOSMarker needs to be written.
	// If no explicit size is been given the EOSMarker will be
	// set automatically.
	EOSMarker bool
}

// fill converts zero-value fields to their explicit default values.
func (c *WriterConfig) fill() {
	if c.Properties == nil {
		c.Properties = &Properties{LC: 3, LP: 0, PB: 2}
	}
	if c.DictCap == 0 {
		c.DictCap = 8 * 1024 * 1024
	}
	if c.BufSize == 0 {
		c.BufSize = 4096
	}
	if c.Size > 0 {
		c.SizeInHeader = true
	}
	if !c.SizeInHeader {
		c.EOSMarker = true
	}
}

// Verify checks WriterConfig for errors. Verify will replace zero
// values with default values.
func (c *WriterConfig) Verify() error {
	c.fill()
	var err error
	if c == nil {
		return errors.New("lzma: WriterConfig is nil")
	}
	if c.Properties == nil {
		return errors.New("lzma: WriterConfig has no Properties set")
	}
	if err = c.Properties.verify(); err != nil {
		return err
	}
	if !(MinDictCap <= c.DictCap && int64(c.DictCap) <= MaxDictCap) {
		return errors.New("lzma: dictionary capacity is out of range")
	}
	if !(maxMatchLen <= c.BufSize) {
		return errors.New("lzma: lookahead buffer size too small")
	}
	if c.SizeInHeader {
		if c.Size < 0 {
			return errors.New("lzma: negative size not supported")
		}
	} else if !c.EOSMarker {
		return errors.New("lzma: EOS marker is required")
	}
	if err = c.Matcher.verify(); err != nil {
		return err
	}

	return nil
}

// header returns the header structure for this configuration.
func (c *WriterConfig) header() header {
	h := header{
		properties: *c.Properties,
		dictCap:    c.DictCap,
		size:       -1,
	}
	if c.SizeInHeader {
		h.size = c.Size
	}
	return h
}

// Writer writes an LZMA stream in the classic format.
type Writer struct {
	h   header
	bw  io.ByteWriter
	buf *bufio.Writer
	e   *encoder
}

// NewWriter creates a new LZMA writer for the classic format. The
// method will write the header to the underlying stream.
func (c WriterConfig) NewWriter(lzma io.Writer) (w *Writer, err error) {
	if err = c.Verify(); err != nil {
		return nil, err
	}
	w = &Writer{h: c.header()}

	var ok bool
	w.bw, ok = lzma.(io.ByteWriter)
	if !ok {
		w.buf = bufio.NewWriter(lzma)
		w.bw = w.buf
	}
	state := newState(w.h.properties)
	m, err := c.Matcher.new(w.h.dictCap)
	if err != nil {
		return nil, err
	}
	dict, err := newEncoderDict(w.h.dictCap, c.BufSize, m)
	if err != nil {
		return nil, err
	}
	var flags encoderFlags
	if c.EOSMarker {
		flags = eosMarker
	}
	if w.e, err = newEncoder(w.bw, state, dict, flags); err != nil {
		return nil, err
	}

	if err = w.writeHeader(); err != nil {
		return nil, err
	}
	return w, nil
}

// NewWriter creates a new LZMA writer using the classic format. The
// function writes the header to the underlying stream.
func NewWriter(lzma io.Writer) (w *Writer, err error) {
	return WriterConfig{}.NewWriter(lzma)
}

// writeHeader writes the LZMA header into the stream.
func (w *Writer) writeHeader() error {
	data, err := w.h.marshalBinary()
	if err != nil {
		return err
	}
	_, err = w.bw.(io.Writer).Write(data)
	return err
}

// Write puts data into the Writer.
func (w *Writer) Write(p []byte) (n int, err error) {
	if w.h.size >= 0 {
		m := w.h.size
		m -= w.e.Compressed() + int64(w.e.dict.Buffered())
		if m < 0 {
			m = 0
		}
		if m < int64(len(p)) {
			p = p[:m]
			err = ErrNoSpace
		}
	}
	var werr error
	if n, werr = w.e.Write(p); werr != nil {
		err = werr
	}
	return n, err
}

// Close closes the writer stream. It ensures that all data from the
// buffer will be compressed and the LZMA stream will be finished.
func (w *Writer) Close() error {
	if w.h.size >= 0 {
		n := w.e.Compressed() + int64(w.e.dict.Buffered())
		if n != w.h.size {
			return errSize
		}
	}
	err := w.e.Close()
	if w.buf != nil {
		ferr := w.buf.Flush()
		if err == nil {
			err = ferr
		}
	}
	return err
}
   07070100000BF5000081A4000000000000000000000001645E367C00001C50000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzma/writer2.go    // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lzma

import (
	"bytes"
	"errors"
	"io"
)

// Writer2Config is used to create a Writer2 using parameters.
type Writer2Config struct {
	// The properties for the encoding. If the it is nil the value
	// {LC: 3, LP: 0, PB: 2} will be chosen.
	Properties *Properties
	// The capacity of the dictionary. If DictCap is zero, the value
	// 8 MiB will be chosen.
	DictCap int
	// Size of the lookahead buffer; value 0 indicates default size
	// 4096
	BufSize int
	// Match algorithm
	Matcher MatchAlgorithm
}

// fill replaces zero values with default values.
func (c *Writer2Config) fill() {
	if c.Properties == nil {
		c.Properties = &Properties{LC: 3, LP: 0, PB: 2}
	}
	if c.DictCap == 0 {
		c.DictCap = 8 * 1024 * 1024
	}
	if c.BufSize == 0 {
		c.BufSize = 4096
	}
}

// Verify checks the Writer2Config for correctness. Zero values will be
// replaced by default values.
func (c *Writer2Config) Verify() error {
	c.fill()
	var err error
	if c == nil {
		return errors.New("lzma: WriterConfig is nil")
	}
	if c.Properties == nil {
		return errors.New("lzma: WriterConfig has no Properties set")
	}
	if err = c.Properties.verify(); err != nil {
		return err
	}
	if !(MinDictCap <= c.DictCap && int64(c.DictCap) <= MaxDictCap) {
		return errors.New("lzma: dictionary capacity is out of range")
	}
	if !(maxMatchLen <= c.BufSize) {
		return errors.New("lzma: lookahead buffer size too small")
	}
	if c.Properties.LC+c.Properties.LP > 4 {
		return errors.New("lzma: sum of lc and lp exceeds 4")
	}
	if err = c.Matcher.verify(); err != nil {
		return err
	}
	return nil
}

// Writer2 supports the creation of an LZMA2 stream. But note that
// written data is buffered, so call Flush or Close to write data to the
// underlying writer. The Close method writes the end-of-stream marker
// to the stream. So you may be able to concatenate the output of two
// writers as long the output of the first writer has only been flushed
// but not closed.
//
// Any change to the fields Properties, DictCap must be done before the
// first call to Write, Flush or Close.
type Writer2 struct {
	w io.Writer

	start   *state
	encoder *encoder

	cstate chunkState
	ctype  chunkType

	buf bytes.Buffer
	lbw LimitedByteWriter
}

// NewWriter2 creates an LZMA2 chunk sequence writer with the default
// parameters and options.
func NewWriter2(lzma2 io.Writer) (w *Writer2, err error) {
	return Writer2Config{}.NewWriter2(lzma2)
}

// NewWriter2 creates a new LZMA2 writer using the given configuration.
func (c Writer2Config) NewWriter2(lzma2 io.Writer) (w *Writer2, err error) {
	if err = c.Verify(); err != nil {
		return nil, err
	}
	w = &Writer2{
		w:      lzma2,
		start:  newState(*c.Properties),
		cstate: start,
		ctype:  start.defaultChunkType(),
	}
	w.buf.Grow(maxCompressed)
	w.lbw = LimitedByteWriter{BW: &w.buf, N: maxCompressed}
	m, err := c.Matcher.new(c.DictCap)
	if err != nil {
		return nil, err
	}
	d, err := newEncoderDict(c.DictCap, c.BufSize, m)
	if err != nil {
		return nil, err
	}
	w.encoder, err = newEncoder(&w.lbw, cloneState(w.start), d, 0)
	if err != nil {
		return nil, err
	}
	return w, nil
}

// written returns the number of bytes written to the current chunk
func (w *Writer2) written() int {
	if w.encoder == nil {
		return 0
	}
	return int(w.encoder.Compressed()) + w.encoder.dict.Buffered()
}

// errClosed indicates that the writer is closed.
var errClosed = errors.New("lzma: writer closed")

// Writes data to LZMA2 stream. Note that written data will be buffered.
// Use Flush or Close to ensure that data is written to the underlying
// writer.
func (w *Writer2) Write(p []byte) (n int, err error) {
	if w.cstate == stop {
		return 0, errClosed
	}
	for n < len(p) {
		m := maxUncompressed - w.written()
		if m <= 0 {
			panic("lzma: maxUncompressed reached")
		}
		var q []byte
		if n+m < len(p) {
			q = p[n : n+m]
		} else {
			q = p[n:]
		}
		k, err := w.encoder.Write(q)
		n += k
		if err != nil && err != ErrLimit {
			return n, err
		}
		if err == ErrLimit || k == m {
			if err = w.flushChunk(); err != nil {
				return n, err
			}
		}
	}
	return n, nil
}

// writeUncompressedChunk writes an uncompressed chunk to the LZMA2
// stream.
func (w *Writer2) writeUncompressedChunk() error {
	u := w.encoder.Compressed()
	if u <= 0 {
		return errors.New("lzma: can't write empty uncompressed chunk")
	}
	if u > maxUncompressed {
		panic("overrun of uncompressed data limit")
	}
	switch w.ctype {
	case cLRND:
		w.ctype = cUD
	default:
		w.ctype = cU
	}
	w.encoder.state = w.start

	header := chunkHeader{
		ctype:        w.ctype,
		uncompressed: uint32(u - 1),
	}
	hdata, err := header.MarshalBinary()
	if err != nil {
		return err
	}
	if _, err = w.w.Write(hdata); err != nil {
		return err
	}
	_, err = w.encoder.dict.CopyN(w.w, int(u))
	return err
}

// writeCompressedChunk writes a compressed chunk to the underlying
// writer.
func (w *Writer2) writeCompressedChunk() error {
	if w.ctype == cU || w.ctype == cUD {
		panic("chunk type uncompressed")
	}

	u := w.encoder.Compressed()
	if u <= 0 {
		return errors.New("writeCompressedChunk: empty chunk")
	}
	if u > maxUncompressed {
		panic("overrun of uncompressed data limit")
	}
	c := w.buf.Len()
	if c <= 0 {
		panic("no compressed data")
	}
	if c > maxCompressed {
		panic("overrun of compressed data limit")
	}
	header := chunkHeader{
		ctype:        w.ctype,
		uncompressed: uint32(u - 1),
		compressed:   uint16(c - 1),
		props:        w.encoder.state.Properties,
	}
	hdata, err := header.MarshalBinary()
	if err != nil {
		return err
	}
	if _, err = w.w.Write(hdata); err != nil {
		return err
	}
	_, err = io.Copy(w.w, &w.buf)
	return err
}

// writes a single chunk to the underlying writer.
func (w *Writer2) writeChunk() error {
	u := int(uncompressedHeaderLen + w.encoder.Compressed())
	c := headerLen(w.ctype) + w.buf.Len()
	if u < c {
		return w.writeUncompressedChunk()
	}
	return w.writeCompressedChunk()
}

// flushChunk terminates the current chunk. The encoder will be reset
// to support the next chunk.
func (w *Writer2) flushChunk() error {
	if w.written() == 0 {
		return nil
	}
	var err error
	if err = w.encoder.Close(); err != nil {
		return err
	}
	if err = w.writeChunk(); err != nil {
		return err
	}
	w.buf.Reset()
	w.lbw.N = maxCompressed
	if err = w.encoder.Reopen(&w.lbw); err != nil {
		return err
	}
	if err = w.cstate.next(w.ctype); err != nil {
		return err
	}
	w.ctype = w.cstate.defaultChunkType()
	w.start = cloneState(w.encoder.state)
	return nil
}

// Flush writes all buffered data out to the underlying stream. This
// could result in multiple chunks to be created.
func (w *Writer2) Flush() error {
	if w.cstate == stop {
		return errClosed
	}
	for w.written() > 0 {
		if err := w.flushChunk(); err != nil {
			return err
		}
	}
	return nil
}

// Close terminates the LZMA2 stream with an EOS chunk.
func (w *Writer2) Close() error {
	if w.cstate == stop {
		return errClosed
	}
	if err := w.Flush(); err != nil {
		return nil
	}
	// write zero byte EOS chunk
	_, err := w.w.Write([]byte{0})
	if err != nil {
		return err
	}
	w.cstate = stop
	return nil
}
07070100000BF6000081A4000000000000000000000001645E367C00000AAD000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/lzmafilter.go  // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package xz

import (
	"errors"
	"fmt"
	"io"

	"github.com/ulikunitz/xz/lzma"
)

// LZMA filter constants.
const (
	lzmaFilterID  = 0x21
	lzmaFilterLen = 3
)

// lzmaFilter declares the LZMA2 filter information stored in an xz
// block header.
type lzmaFilter struct {
	dictCap int64
}

// String returns a representation of the LZMA filter.
func (f lzmaFilter) String() string {
	return fmt.Sprintf("LZMA dict cap %#x", f.dictCap)
}

// id returns the ID for the LZMA2 filter.
func (f lzmaFilter) id() uint64 { return lzmaFilterID }

// MarshalBinary converts the lzmaFilter in its encoded representation.
func (f lzmaFilter) MarshalBinary() (data []byte, err error) {
	c := lzma.EncodeDictCap(f.dictCap)
	return []byte{lzmaFilterID, 1, c}, nil
}

// UnmarshalBinary unmarshals the given data representation of the LZMA2
// filter.
func (f *lzmaFilter) UnmarshalBinary(data []byte) error {
	if len(data) != lzmaFilterLen {
		return errors.New("xz: data for LZMA2 filter has wrong length")
	}
	if data[0] != lzmaFilterID {
		return errors.New("xz: wrong LZMA2 filter id")
	}
	if data[1] != 1 {
		return errors.New("xz: wrong LZMA2 filter size")
	}
	dc, err := lzma.DecodeDictCap(data[2])
	if err != nil {
		return errors.New("xz: wrong LZMA2 dictionary size property")
	}

	f.dictCap = dc
	return nil
}

// reader creates a new reader for the LZMA2 filter.
func (f lzmaFilter) reader(r io.Reader, c *ReaderConfig) (fr io.Reader,
	err error) {

	config := new(lzma.Reader2Config)
	if c != nil {
		config.DictCap = c.DictCap
	}
	dc := int(f.dictCap)
	if dc < 1 {
		return nil, errors.New("xz: LZMA2 filter parameter " +
			"dictionary capacity overflow")
	}
	if dc > config.DictCap {
		config.DictCap = dc
	}

	fr, err = config.NewReader2(r)
	if err != nil {
		return nil, err
	}
	return fr, nil
}

// writeCloser creates a io.WriteCloser for the LZMA2 filter.
func (f lzmaFilter) writeCloser(w io.WriteCloser, c *WriterConfig,
) (fw io.WriteCloser, err error) {
	config := new(lzma.Writer2Config)
	if c != nil {
		*config = lzma.Writer2Config{
			Properties: c.Properties,
			DictCap:    c.DictCap,
			BufSize:    c.BufSize,
			Matcher:    c.Matcher,
		}
	}

	dc := int(f.dictCap)
	if dc < 1 {
		return nil, errors.New("xz: LZMA2 filter parameter " +
			"dictionary capacity overflow")
	}
	if dc > config.DictCap {
		config.DictCap = dc
	}

	fw, err = config.NewWriter2(w)
	if err != nil {
		return nil, err
	}
	return fw, nil
}

// last returns true, because an LZMA2 filter must be the last filter in
// the filter list.
func (f lzmaFilter) last() bool { return true }
   07070100000BF7000081A4000000000000000000000001645E367C000000A0000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/make-docs  #!/bin/sh

set -x
pandoc -t html5 -f markdown -s --css=doc/md.css -o README.html README.md
pandoc -t html5 -f markdown -s --css=doc/md.css -o TODO.html TODO.md
07070100000BF8000081A4000000000000000000000001645E367C00000207000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/none-check.go  // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package xz

import "hash"

type noneHash struct{}

func (h noneHash) Write(p []byte) (n int, err error) { return len(p), nil }

func (h noneHash) Sum(b []byte) []byte { return b }

func (h noneHash) Reset() {}

func (h noneHash) Size() int { return 0 }

func (h noneHash) BlockSize() int { return 0 }

func newNoneHash() hash.Hash {
	return &noneHash{}
}
 07070100000BF9000081A4000000000000000000000001645E367C00002071000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/reader.go  // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package xz supports the compression and decompression of xz files. It
// supports version 1.0.4 of the specification without the non-LZMA2
// filters. See http://tukaani.org/xz/xz-file-format-1.0.4.txt
package xz

import (
	"bytes"
	"errors"
	"fmt"
	"hash"
	"io"

	"github.com/ulikunitz/xz/internal/xlog"
	"github.com/ulikunitz/xz/lzma"
)

// ReaderConfig defines the parameters for the xz reader. The
// SingleStream parameter requests the reader to assume that the
// underlying stream contains only a single stream.
type ReaderConfig struct {
	DictCap      int
	SingleStream bool
}

// Verify checks the reader parameters for Validity. Zero values will be
// replaced by default values.
func (c *ReaderConfig) Verify() error {
	if c == nil {
		return errors.New("xz: reader parameters are nil")
	}
	lc := lzma.Reader2Config{DictCap: c.DictCap}
	if err := lc.Verify(); err != nil {
		return err
	}
	return nil
}

// Reader supports the reading of one or multiple xz streams.
type Reader struct {
	ReaderConfig

	xz io.Reader
	sr *streamReader
}

// streamReader decodes a single xz stream
type streamReader struct {
	ReaderConfig

	xz      io.Reader
	br      *blockReader
	newHash func() hash.Hash
	h       header
	index   []record
}

// NewReader creates a new xz reader using the default parameters.
// The function reads and checks the header of the first XZ stream. The
// reader will process multiple streams including padding.
func NewReader(xz io.Reader) (r *Reader, err error) {
	return ReaderConfig{}.NewReader(xz)
}

// NewReader creates an xz stream reader. The created reader will be
// able to process multiple streams and padding unless a SingleStream
// has been set in the reader configuration c.
func (c ReaderConfig) NewReader(xz io.Reader) (r *Reader, err error) {
	if err = c.Verify(); err != nil {
		return nil, err
	}
	r = &Reader{
		ReaderConfig: c,
		xz:           xz,
	}
	if r.sr, err = c.newStreamReader(xz); err != nil {
		if err == io.EOF {
			err = io.ErrUnexpectedEOF
		}
		return nil, err
	}
	return r, nil
}

var errUnexpectedData = errors.New("xz: unexpected data after stream")

// Read reads uncompressed data from the stream.
func (r *Reader) Read(p []byte) (n int, err error) {
	for n < len(p) {
		if r.sr == nil {
			if r.SingleStream {
				data := make([]byte, 1)
				_, err = io.ReadFull(r.xz, data)
				if err != io.EOF {
					return n, errUnexpectedData
				}
				return n, io.EOF
			}
			for {
				r.sr, err = r.ReaderConfig.newStreamReader(r.xz)
				if err != errPadding {
					break
				}
			}
			if err != nil {
				return n, err
			}
		}
		k, err := r.sr.Read(p[n:])
		n += k
		if err != nil {
			if err == io.EOF {
				r.sr = nil
				continue
			}
			return n, err
		}
	}
	return n, nil
}

var errPadding = errors.New("xz: padding (4 zero bytes) encountered")

// newStreamReader creates a new xz stream reader using the given configuration
// parameters. NewReader reads and checks the header of the xz stream.
func (c ReaderConfig) newStreamReader(xz io.Reader) (r *streamReader, err error) {
	if err = c.Verify(); err != nil {
		return nil, err
	}
	data := make([]byte, HeaderLen)
	if _, err := io.ReadFull(xz, data[:4]); err != nil {
		return nil, err
	}
	if bytes.Equal(data[:4], []byte{0, 0, 0, 0}) {
		return nil, errPadding
	}
	if _, err = io.ReadFull(xz, data[4:]); err != nil {
		if err == io.EOF {
			err = io.ErrUnexpectedEOF
		}
		return nil, err
	}
	r = &streamReader{
		ReaderConfig: c,
		xz:           xz,
		index:        make([]record, 0, 4),
	}
	if err = r.h.UnmarshalBinary(data); err != nil {
		return nil, err
	}
	xlog.Debugf("xz header %s", r.h)
	if r.newHash, err = newHashFunc(r.h.flags); err != nil {
		return nil, err
	}
	return r, nil
}

// readTail reads the index body and the xz footer.
func (r *streamReader) readTail() error {
	index, n, err := readIndexBody(r.xz, len(r.index))
	if err != nil {
		if err == io.EOF {
			err = io.ErrUnexpectedEOF
		}
		return err
	}

	for i, rec := range r.index {
		if rec != index[i] {
			return fmt.Errorf("xz: record %d is %v; want %v",
				i, rec, index[i])
		}
	}

	p := make([]byte, footerLen)
	if _, err = io.ReadFull(r.xz, p); err != nil {
		if err == io.EOF {
			err = io.ErrUnexpectedEOF
		}
		return err
	}
	var f footer
	if err = f.UnmarshalBinary(p); err != nil {
		return err
	}
	xlog.Debugf("xz footer %s", f)
	if f.flags != r.h.flags {
		return errors.New("xz: footer flags incorrect")
	}
	if f.indexSize != int64(n)+1 {
		return errors.New("xz: index size in footer wrong")
	}
	return nil
}

// Read reads actual data from the xz stream.
func (r *streamReader) Read(p []byte) (n int, err error) {
	for n < len(p) {
		if r.br == nil {
			bh, hlen, err := readBlockHeader(r.xz)
			if err != nil {
				if err == errIndexIndicator {
					if err = r.readTail(); err != nil {
						return n, err
					}
					return n, io.EOF
				}
				return n, err
			}
			xlog.Debugf("block %v", *bh)
			r.br, err = r.ReaderConfig.newBlockReader(r.xz, bh,
				hlen, r.newHash())
			if err != nil {
				return n, err
			}
		}
		k, err := r.br.Read(p[n:])
		n += k
		if err != nil {
			if err == io.EOF {
				r.index = append(r.index, r.br.record())
				r.br = nil
			} else {
				return n, err
			}
		}
	}
	return n, nil
}

// countingReader is a reader that counts the bytes read.
type countingReader struct {
	r io.Reader
	n int64
}

// Read reads data from the wrapped reader and adds it to the n field.
func (lr *countingReader) Read(p []byte) (n int, err error) {
	n, err = lr.r.Read(p)
	lr.n += int64(n)
	return n, err
}

// blockReader supports the reading of a block.
type blockReader struct {
	lxz       countingReader
	header    *blockHeader
	headerLen int
	n         int64
	hash      hash.Hash
	r         io.Reader
}

// newBlockReader creates a new block reader.
func (c *ReaderConfig) newBlockReader(xz io.Reader, h *blockHeader,
	hlen int, hash hash.Hash) (br *blockReader, err error) {

	br = &blockReader{
		lxz:       countingReader{r: xz},
		header:    h,
		headerLen: hlen,
		hash:      hash,
	}

	fr, err := c.newFilterReader(&br.lxz, h.filters)
	if err != nil {
		return nil, err
	}
	if br.hash.Size() != 0 {
		br.r = io.TeeReader(fr, br.hash)
	} else {
		br.r = fr
	}

	return br, nil
}

// uncompressedSize returns the uncompressed size of the block.
func (br *blockReader) uncompressedSize() int64 {
	return br.n
}

// compressedSize returns the compressed size of the block.
func (br *blockReader) compressedSize() int64 {
	return br.lxz.n
}

// unpaddedSize computes the unpadded size for the block.
func (br *blockReader) unpaddedSize() int64 {
	n := int64(br.headerLen)
	n += br.compressedSize()
	n += int64(br.hash.Size())
	return n
}

// record returns the index record for the current block.
func (br *blockReader) record() record {
	return record{br.unpaddedSize(), br.uncompressedSize()}
}

// Read reads data from the block.
func (br *blockReader) Read(p []byte) (n int, err error) {
	n, err = br.r.Read(p)
	br.n += int64(n)

	u := br.header.uncompressedSize
	if u >= 0 && br.uncompressedSize() > u {
		return n, errors.New("xz: wrong uncompressed size for block")
	}
	c := br.header.compressedSize
	if c >= 0 && br.compressedSize() > c {
		return n, errors.New("xz: wrong compressed size for block")
	}
	if err != io.EOF {
		return n, err
	}
	if br.uncompressedSize() < u || br.compressedSize() < c {
		return n, io.ErrUnexpectedEOF
	}

	s := br.hash.Size()
	k := padLen(br.lxz.n)
	q := make([]byte, k+s, k+2*s)
	if _, err = io.ReadFull(br.lxz.r, q); err != nil {
		if err == io.EOF {
			err = io.ErrUnexpectedEOF
		}
		return n, err
	}
	if !allZeros(q[:k]) {
		return n, errors.New("xz: non-zero block padding")
	}
	checkSum := q[k:]
	computedSum := br.hash.Sum(checkSum[s:])
	if !bytes.Equal(checkSum, computedSum) {
		return n, errors.New("xz: checksum error for block")
	}
	return n, io.EOF
}

func (c *ReaderConfig) newFilterReader(r io.Reader, f []filter) (fr io.Reader,
	err error) {

	if err = verifyFilters(f); err != nil {
		return nil, err
	}

	fr = r
	for i := len(f) - 1; i >= 0; i-- {
		fr, err = f[i].reader(fr, c)
		if err != nil {
			return nil, err
		}
	}
	return fr, nil
}
   07070100000BFA000081A4000000000000000000000001645E367C000022D4000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/ulikunitz/xz/writer.go  // Copyright 2014-2022 Ulrich Kunitz. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package xz

import (
	"errors"
	"fmt"
	"hash"
	"io"

	"github.com/ulikunitz/xz/lzma"
)

// WriterConfig describe the parameters for an xz writer.
type WriterConfig struct {
	Properties *lzma.Properties
	DictCap    int
	BufSize    int
	BlockSize  int64
	// checksum method: CRC32, CRC64 or SHA256 (default: CRC64)
	CheckSum byte
	// Forces NoChecksum (default: false)
	NoCheckSum bool
	// match algorithm
	Matcher lzma.MatchAlgorithm
}

// fill replaces zero values with default values.
func (c *WriterConfig) fill() {
	if c.Properties == nil {
		c.Properties = &lzma.Properties{LC: 3, LP: 0, PB: 2}
	}
	if c.DictCap == 0 {
		c.DictCap = 8 * 1024 * 1024
	}
	if c.BufSize == 0 {
		c.BufSize = 4096
	}
	if c.BlockSize == 0 {
		c.BlockSize = maxInt64
	}
	if c.CheckSum == 0 {
		c.CheckSum = CRC64
	}
	if c.NoCheckSum {
		c.CheckSum = None
	}
}

// Verify checks the configuration for errors. Zero values will be
// replaced by default values.
func (c *WriterConfig) Verify() error {
	if c == nil {
		return errors.New("xz: writer configuration is nil")
	}
	c.fill()
	lc := lzma.Writer2Config{
		Properties: c.Properties,
		DictCap:    c.DictCap,
		BufSize:    c.BufSize,
		Matcher:    c.Matcher,
	}
	if err := lc.Verify(); err != nil {
		return err
	}
	if c.BlockSize <= 0 {
		return errors.New("xz: block size out of range")
	}
	if err := verifyFlags(c.CheckSum); err != nil {
		return err
	}
	return nil
}

// filters creates the filter list for the given parameters.
func (c *WriterConfig) filters() []filter {
	return []filter{&lzmaFilter{int64(c.DictCap)}}
}

// maxInt64 defines the maximum 64-bit signed integer.
const maxInt64 = 1<<63 - 1

// verifyFilters checks the filter list for the length and the right
// sequence of filters.
func verifyFilters(f []filter) error {
	if len(f) == 0 {
		return errors.New("xz: no filters")
	}
	if len(f) > 4 {
		return errors.New("xz: more than four filters")
	}
	for _, g := range f[:len(f)-1] {
		if g.last() {
			return errors.New("xz: last filter is not last")
		}
	}
	if !f[len(f)-1].last() {
		return errors.New("xz: wrong last filter")
	}
	return nil
}

// newFilterWriteCloser converts a filter list into a WriteCloser that
// can be used by a blockWriter.
func (c *WriterConfig) newFilterWriteCloser(w io.Writer, f []filter) (fw io.WriteCloser, err error) {
	if err = verifyFilters(f); err != nil {
		return nil, err
	}
	fw = nopWriteCloser(w)
	for i := len(f) - 1; i >= 0; i-- {
		fw, err = f[i].writeCloser(fw, c)
		if err != nil {
			return nil, err
		}
	}
	return fw, nil
}

// nopWCloser implements a WriteCloser with a Close method not doing
// anything.
type nopWCloser struct {
	io.Writer
}

// Close returns nil and doesn't do anything else.
func (c nopWCloser) Close() error {
	return nil
}

// nopWriteCloser converts the Writer into a WriteCloser with a Close
// function that does nothing beside returning nil.
func nopWriteCloser(w io.Writer) io.WriteCloser {
	return nopWCloser{w}
}

// Writer compresses data written to it. It is an io.WriteCloser.
type Writer struct {
	WriterConfig

	xz      io.Writer
	bw      *blockWriter
	newHash func() hash.Hash
	h       header
	index   []record
	closed  bool
}

// newBlockWriter creates a new block writer writes the header out.
func (w *Writer) newBlockWriter() error {
	var err error
	w.bw, err = w.WriterConfig.newBlockWriter(w.xz, w.newHash())
	if err != nil {
		return err
	}
	if err = w.bw.writeHeader(w.xz); err != nil {
		return err
	}
	return nil
}

// closeBlockWriter closes a block writer and records the sizes in the
// index.
func (w *Writer) closeBlockWriter() error {
	var err error
	if err = w.bw.Close(); err != nil {
		return err
	}
	w.index = append(w.index, w.bw.record())
	return nil
}

// NewWriter creates a new xz writer using default parameters.
func NewWriter(xz io.Writer) (w *Writer, err error) {
	return WriterConfig{}.NewWriter(xz)
}

// NewWriter creates a new Writer using the given configuration parameters.
func (c WriterConfig) NewWriter(xz io.Writer) (w *Writer, err error) {
	if err = c.Verify(); err != nil {
		return nil, err
	}
	w = &Writer{
		WriterConfig: c,
		xz:           xz,
		h:            header{c.CheckSum},
		index:        make([]record, 0, 4),
	}
	if w.newHash, err = newHashFunc(c.CheckSum); err != nil {
		return nil, err
	}
	data, err := w.h.MarshalBinary()
	if err != nil {
		return nil, fmt.Errorf("w.h.MarshalBinary(): error %w", err)
	}
	if _, err = xz.Write(data); err != nil {
		return nil, err
	}
	if err = w.newBlockWriter(); err != nil {
		return nil, err
	}
	return w, nil

}

// Write compresses the uncompressed data provided.
func (w *Writer) Write(p []byte) (n int, err error) {
	if w.closed {
		return 0, errClosed
	}
	for {
		k, err := w.bw.Write(p[n:])
		n += k
		if err != errNoSpace {
			return n, err
		}
		if err = w.closeBlockWriter(); err != nil {
			return n, err
		}
		if err = w.newBlockWriter(); err != nil {
			return n, err
		}
	}
}

// Close closes the writer and adds the footer to the Writer. Close
// doesn't close the underlying writer.
func (w *Writer) Close() error {
	if w.closed {
		return errClosed
	}
	w.closed = true
	var err error
	if err = w.closeBlockWriter(); err != nil {
		return err
	}

	f := footer{flags: w.h.flags}
	if f.indexSize, err = writeIndex(w.xz, w.index); err != nil {
		return err
	}
	data, err := f.MarshalBinary()
	if err != nil {
		return err
	}
	if _, err = w.xz.Write(data); err != nil {
		return err
	}
	return nil
}

// countingWriter is a writer that counts all data written to it.
type countingWriter struct {
	w io.Writer
	n int64
}

// Write writes data to the countingWriter.
func (cw *countingWriter) Write(p []byte) (n int, err error) {
	n, err = cw.w.Write(p)
	cw.n += int64(n)
	if err == nil && cw.n < 0 {
		return n, errors.New("xz: counter overflow")
	}
	return
}

// blockWriter is writes a single block.
type blockWriter struct {
	cxz countingWriter
	// mw combines io.WriteCloser w and the hash.
	mw        io.Writer
	w         io.WriteCloser
	n         int64
	blockSize int64
	closed    bool
	headerLen int

	filters []filter
	hash    hash.Hash
}

// newBlockWriter creates a new block writer.
func (c *WriterConfig) newBlockWriter(xz io.Writer, hash hash.Hash) (bw *blockWriter, err error) {
	bw = &blockWriter{
		cxz:       countingWriter{w: xz},
		blockSize: c.BlockSize,
		filters:   c.filters(),
		hash:      hash,
	}
	bw.w, err = c.newFilterWriteCloser(&bw.cxz, bw.filters)
	if err != nil {
		return nil, err
	}
	if bw.hash.Size() != 0 {
		bw.mw = io.MultiWriter(bw.w, bw.hash)
	} else {
		bw.mw = bw.w
	}
	return bw, nil
}

// writeHeader writes the header. If the function is called after Close
// the commpressedSize and uncompressedSize fields will be filled.
func (bw *blockWriter) writeHeader(w io.Writer) error {
	h := blockHeader{
		compressedSize:   -1,
		uncompressedSize: -1,
		filters:          bw.filters,
	}
	if bw.closed {
		h.compressedSize = bw.compressedSize()
		h.uncompressedSize = bw.uncompressedSize()
	}
	data, err := h.MarshalBinary()
	if err != nil {
		return err
	}
	if _, err = w.Write(data); err != nil {
		return err
	}
	bw.headerLen = len(data)
	return nil
}

// compressed size returns the amount of data written to the underlying
// stream.
func (bw *blockWriter) compressedSize() int64 {
	return bw.cxz.n
}

// uncompressedSize returns the number of data written to the
// blockWriter
func (bw *blockWriter) uncompressedSize() int64 {
	return bw.n
}

// unpaddedSize returns the sum of the header length, the uncompressed
// size of the block and the hash size.
func (bw *blockWriter) unpaddedSize() int64 {
	if bw.headerLen <= 0 {
		panic("xz: block header not written")
	}
	n := int64(bw.headerLen)
	n += bw.compressedSize()
	n += int64(bw.hash.Size())
	return n
}

// record returns the record for the current stream. Call Close before
// calling this method.
func (bw *blockWriter) record() record {
	return record{bw.unpaddedSize(), bw.uncompressedSize()}
}

var errClosed = errors.New("xz: writer already closed")

var errNoSpace = errors.New("xz: no space")

// Write writes uncompressed data to the block writer.
func (bw *blockWriter) Write(p []byte) (n int, err error) {
	if bw.closed {
		return 0, errClosed
	}

	t := bw.blockSize - bw.n
	if int64(len(p)) > t {
		err = errNoSpace
		p = p[:t]
	}

	var werr error
	n, werr = bw.mw.Write(p)
	bw.n += int64(n)
	if werr != nil {
		return n, werr
	}
	return n, err
}

// Close closes the writer.
func (bw *blockWriter) Close() error {
	if bw.closed {
		return errClosed
	}
	bw.closed = true
	if err := bw.w.Close(); err != nil {
		return err
	}
	s := bw.hash.Size()
	k := padLen(bw.cxz.n)
	p := make([]byte, k+s)
	bw.hash.Sum(p[k:k])
	if _, err := bw.cxz.w.Write(p); err != nil {
		return err
	}
	return nil
}
07070100000BFB000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/vendor/github.com/vbatts  07070100000BFC000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/github.com/vbatts/tar-split    07070100000BFD000081A4000000000000000000000001645E367C000005DE000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/vbatts/tar-split/LICENSE    Copyright (c) 2015 Vincent Batts, Raleigh, NC, USA

All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.

3. Neither the name of the copyright holder nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  07070100000BFE000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/vbatts/tar-split/archive    07070100000BFF000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/vbatts/tar-split/archive/tar    07070100000C00000081A4000000000000000000000001645E367C00005EE7000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/vbatts/tar-split/archive/tar/common.go  // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package tar implements access to tar archives.
//
// Tape archives (tar) are a file format for storing a sequence of files that
// can be read and written in a streaming manner.
// This package aims to cover most variations of the format,
// including those produced by GNU and BSD tar tools.
package tar

import (
	"errors"
	"fmt"
	"math"
	"os"
	"path"
	"reflect"
	"strconv"
	"strings"
	"time"
)

// BUG: Use of the Uid and Gid fields in Header could overflow on 32-bit
// architectures. If a large value is encountered when decoding, the result
// stored in Header will be the truncated version.

var (
	ErrHeader          = errors.New("archive/tar: invalid tar header")
	ErrWriteTooLong    = errors.New("archive/tar: write too long")
	ErrFieldTooLong    = errors.New("archive/tar: header field too long")
	ErrWriteAfterClose = errors.New("archive/tar: write after close")
	errMissData        = errors.New("archive/tar: sparse file references non-existent data")
	errUnrefData       = errors.New("archive/tar: sparse file contains unreferenced data")
	errWriteHole       = errors.New("archive/tar: write non-NUL byte in sparse hole")
)

type headerError []string

func (he headerError) Error() string {
	const prefix = "archive/tar: cannot encode header"
	var ss []string
	for _, s := range he {
		if s != "" {
			ss = append(ss, s)
		}
	}
	if len(ss) == 0 {
		return prefix
	}
	return fmt.Sprintf("%s: %v", prefix, strings.Join(ss, "; and "))
}

// Type flags for Header.Typeflag.
const (
	// Type '0' indicates a regular file.
	TypeReg  = '0'
	TypeRegA = '\x00' // Deprecated: Use TypeReg instead.

	// Type '1' to '6' are header-only flags and may not have a data body.
	TypeLink    = '1' // Hard link
	TypeSymlink = '2' // Symbolic link
	TypeChar    = '3' // Character device node
	TypeBlock   = '4' // Block device node
	TypeDir     = '5' // Directory
	TypeFifo    = '6' // FIFO node

	// Type '7' is reserved.
	TypeCont = '7'

	// Type 'x' is used by the PAX format to store key-value records that
	// are only relevant to the next file.
	// This package transparently handles these types.
	TypeXHeader = 'x'

	// Type 'g' is used by the PAX format to store key-value records that
	// are relevant to all subsequent files.
	// This package only supports parsing and composing such headers,
	// but does not currently support persisting the global state across files.
	TypeXGlobalHeader = 'g'

	// Type 'S' indicates a sparse file in the GNU format.
	TypeGNUSparse = 'S'

	// Types 'L' and 'K' are used by the GNU format for a meta file
	// used to store the path or link name for the next file.
	// This package transparently handles these types.
	TypeGNULongName = 'L'
	TypeGNULongLink = 'K'
)

// Keywords for PAX extended header records.
const (
	paxNone     = "" // Indicates that no PAX key is suitable
	paxPath     = "path"
	paxLinkpath = "linkpath"
	paxSize     = "size"
	paxUid      = "uid"
	paxGid      = "gid"
	paxUname    = "uname"
	paxGname    = "gname"
	paxMtime    = "mtime"
	paxAtime    = "atime"
	paxCtime    = "ctime"   // Removed from later revision of PAX spec, but was valid
	paxCharset  = "charset" // Currently unused
	paxComment  = "comment" // Currently unused

	paxSchilyXattr = "SCHILY.xattr."

	// Keywords for GNU sparse files in a PAX extended header.
	paxGNUSparse          = "GNU.sparse."
	paxGNUSparseNumBlocks = "GNU.sparse.numblocks"
	paxGNUSparseOffset    = "GNU.sparse.offset"
	paxGNUSparseNumBytes  = "GNU.sparse.numbytes"
	paxGNUSparseMap       = "GNU.sparse.map"
	paxGNUSparseName      = "GNU.sparse.name"
	paxGNUSparseMajor     = "GNU.sparse.major"
	paxGNUSparseMinor     = "GNU.sparse.minor"
	paxGNUSparseSize      = "GNU.sparse.size"
	paxGNUSparseRealSize  = "GNU.sparse.realsize"
)

// basicKeys is a set of the PAX keys for which we have built-in support.
// This does not contain "charset" or "comment", which are both PAX-specific,
// so adding them as first-class features of Header is unlikely.
// Users can use the PAXRecords field to set it themselves.
var basicKeys = map[string]bool{
	paxPath: true, paxLinkpath: true, paxSize: true, paxUid: true, paxGid: true,
	paxUname: true, paxGname: true, paxMtime: true, paxAtime: true, paxCtime: true,
}

// A Header represents a single header in a tar archive.
// Some fields may not be populated.
//
// For forward compatibility, users that retrieve a Header from Reader.Next,
// mutate it in some ways, and then pass it back to Writer.WriteHeader
// should do so by creating a new Header and copying the fields
// that they are interested in preserving.
type Header struct {
	// Typeflag is the type of header entry.
	// The zero value is automatically promoted to either TypeReg or TypeDir
	// depending on the presence of a trailing slash in Name.
	Typeflag byte

	Name     string // Name of file entry
	Linkname string // Target name of link (valid for TypeLink or TypeSymlink)

	Size  int64  // Logical file size in bytes
	Mode  int64  // Permission and mode bits
	Uid   int    // User ID of owner
	Gid   int    // Group ID of owner
	Uname string // User name of owner
	Gname string // Group name of owner

	// If the Format is unspecified, then Writer.WriteHeader rounds ModTime
	// to the nearest second and ignores the AccessTime and ChangeTime fields.
	//
	// To use AccessTime or ChangeTime, specify the Format as PAX or GNU.
	// To use sub-second resolution, specify the Format as PAX.
	ModTime    time.Time // Modification time
	AccessTime time.Time // Access time (requires either PAX or GNU support)
	ChangeTime time.Time // Change time (requires either PAX or GNU support)

	Devmajor int64 // Major device number (valid for TypeChar or TypeBlock)
	Devminor int64 // Minor device number (valid for TypeChar or TypeBlock)

	// Xattrs stores extended attributes as PAX records under the
	// "SCHILY.xattr." namespace.
	//
	// The following are semantically equivalent:
	//  h.Xattrs[key] = value
	//  h.PAXRecords["SCHILY.xattr."+key] = value
	//
	// When Writer.WriteHeader is called, the contents of Xattrs will take
	// precedence over those in PAXRecords.
	//
	// Deprecated: Use PAXRecords instead.
	Xattrs map[string]string

	// PAXRecords is a map of PAX extended header records.
	//
	// User-defined records should have keys of the following form:
	//	VENDOR.keyword
	// Where VENDOR is some namespace in all uppercase, and keyword may
	// not contain the '=' character (e.g., "GOLANG.pkg.version").
	// The key and value should be non-empty UTF-8 strings.
	//
	// When Writer.WriteHeader is called, PAX records derived from the
	// other fields in Header take precedence over PAXRecords.
	PAXRecords map[string]string

	// Format specifies the format of the tar header.
	//
	// This is set by Reader.Next as a best-effort guess at the format.
	// Since the Reader liberally reads some non-compliant files,
	// it is possible for this to be FormatUnknown.
	//
	// If the format is unspecified when Writer.WriteHeader is called,
	// then it uses the first format (in the order of USTAR, PAX, GNU)
	// capable of encoding this Header (see Format).
	Format Format
}

// sparseEntry represents a Length-sized fragment at Offset in the file.
type sparseEntry struct{ Offset, Length int64 }

func (s sparseEntry) endOffset() int64 { return s.Offset + s.Length }

// A sparse file can be represented as either a sparseDatas or a sparseHoles.
// As long as the total size is known, they are equivalent and one can be
// converted to the other form and back. The various tar formats with sparse
// file support represent sparse files in the sparseDatas form. That is, they
// specify the fragments in the file that has data, and treat everything else as
// having zero bytes. As such, the encoding and decoding logic in this package
// deals with sparseDatas.
//
// However, the external API uses sparseHoles instead of sparseDatas because the
// zero value of sparseHoles logically represents a normal file (i.e., there are
// no holes in it). On the other hand, the zero value of sparseDatas implies
// that the file has no data in it, which is rather odd.
//
// As an example, if the underlying raw file contains the 10-byte data:
//	var compactFile = "abcdefgh"
//
// And the sparse map has the following entries:
//	var spd sparseDatas = []sparseEntry{
//		{Offset: 2,  Length: 5},  // Data fragment for 2..6
//		{Offset: 18, Length: 3},  // Data fragment for 18..20
//	}
//	var sph sparseHoles = []sparseEntry{
//		{Offset: 0,  Length: 2},  // Hole fragment for 0..1
//		{Offset: 7,  Length: 11}, // Hole fragment for 7..17
//		{Offset: 21, Length: 4},  // Hole fragment for 21..24
//	}
//
// Then the content of the resulting sparse file with a Header.Size of 25 is:
//	var sparseFile = "\x00"*2 + "abcde" + "\x00"*11 + "fgh" + "\x00"*4
type (
	sparseDatas []sparseEntry
	sparseHoles []sparseEntry
)

// validateSparseEntries reports whether sp is a valid sparse map.
// It does not matter whether sp represents data fragments or hole fragments.
func validateSparseEntries(sp []sparseEntry, size int64) bool {
	// Validate all sparse entries. These are the same checks as performed by
	// the BSD tar utility.
	if size < 0 {
		return false
	}
	var pre sparseEntry
	for _, cur := range sp {
		switch {
		case cur.Offset < 0 || cur.Length < 0:
			return false // Negative values are never okay
		case cur.Offset > math.MaxInt64-cur.Length:
			return false // Integer overflow with large length
		case cur.endOffset() > size:
			return false // Region extends beyond the actual size
		case pre.endOffset() > cur.Offset:
			return false // Regions cannot overlap and must be in order
		}
		pre = cur
	}
	return true
}

// alignSparseEntries mutates src and returns dst where each fragment's
// starting offset is aligned up to the nearest block edge, and each
// ending offset is aligned down to the nearest block edge.
//
// Even though the Go tar Reader and the BSD tar utility can handle entries
// with arbitrary offsets and lengths, the GNU tar utility can only handle
// offsets and lengths that are multiples of blockSize.
func alignSparseEntries(src []sparseEntry, size int64) []sparseEntry {
	dst := src[:0]
	for _, s := range src {
		pos, end := s.Offset, s.endOffset()
		pos += blockPadding(+pos) // Round-up to nearest blockSize
		if end != size {
			end -= blockPadding(-end) // Round-down to nearest blockSize
		}
		if pos < end {
			dst = append(dst, sparseEntry{Offset: pos, Length: end - pos})
		}
	}
	return dst
}

// invertSparseEntries converts a sparse map from one form to the other.
// If the input is sparseHoles, then it will output sparseDatas and vice-versa.
// The input must have been already validated.
//
// This function mutates src and returns a normalized map where:
//	* adjacent fragments are coalesced together
//	* only the last fragment may be empty
//	* the endOffset of the last fragment is the total size
func invertSparseEntries(src []sparseEntry, size int64) []sparseEntry {
	dst := src[:0]
	var pre sparseEntry
	for _, cur := range src {
		if cur.Length == 0 {
			continue // Skip empty fragments
		}
		pre.Length = cur.Offset - pre.Offset
		if pre.Length > 0 {
			dst = append(dst, pre) // Only add non-empty fragments
		}
		pre.Offset = cur.endOffset()
	}
	pre.Length = size - pre.Offset // Possibly the only empty fragment
	return append(dst, pre)
}

// fileState tracks the number of logical (includes sparse holes) and physical
// (actual in tar archive) bytes remaining for the current file.
//
// Invariant: LogicalRemaining >= PhysicalRemaining
type fileState interface {
	LogicalRemaining() int64
	PhysicalRemaining() int64
}

// allowedFormats determines which formats can be used.
// The value returned is the logical OR of multiple possible formats.
// If the value is FormatUnknown, then the input Header cannot be encoded
// and an error is returned explaining why.
//
// As a by-product of checking the fields, this function returns paxHdrs, which
// contain all fields that could not be directly encoded.
// A value receiver ensures that this method does not mutate the source Header.
func (h Header) allowedFormats() (format Format, paxHdrs map[string]string, err error) {
	format = FormatUSTAR | FormatPAX | FormatGNU
	paxHdrs = make(map[string]string)

	var whyNoUSTAR, whyNoPAX, whyNoGNU string
	var preferPAX bool // Prefer PAX over USTAR
	verifyString := func(s string, size int, name, paxKey string) {
		// NUL-terminator is optional for path and linkpath.
		// Technically, it is required for uname and gname,
		// but neither GNU nor BSD tar checks for it.
		tooLong := len(s) > size
		allowLongGNU := paxKey == paxPath || paxKey == paxLinkpath
		if hasNUL(s) || (tooLong && !allowLongGNU) {
			whyNoGNU = fmt.Sprintf("GNU cannot encode %s=%q", name, s)
			format.mustNotBe(FormatGNU)
		}
		if !isASCII(s) || tooLong {
			canSplitUSTAR := paxKey == paxPath
			if _, _, ok := splitUSTARPath(s); !canSplitUSTAR || !ok {
				whyNoUSTAR = fmt.Sprintf("USTAR cannot encode %s=%q", name, s)
				format.mustNotBe(FormatUSTAR)
			}
			if paxKey == paxNone {
				whyNoPAX = fmt.Sprintf("PAX cannot encode %s=%q", name, s)
				format.mustNotBe(FormatPAX)
			} else {
				paxHdrs[paxKey] = s
			}
		}
		if v, ok := h.PAXRecords[paxKey]; ok && v == s {
			paxHdrs[paxKey] = v
		}
	}
	verifyNumeric := func(n int64, size int, name, paxKey string) {
		if !fitsInBase256(size, n) {
			whyNoGNU = fmt.Sprintf("GNU cannot encode %s=%d", name, n)
			format.mustNotBe(FormatGNU)
		}
		if !fitsInOctal(size, n) {
			whyNoUSTAR = fmt.Sprintf("USTAR cannot encode %s=%d", name, n)
			format.mustNotBe(FormatUSTAR)
			if paxKey == paxNone {
				whyNoPAX = fmt.Sprintf("PAX cannot encode %s=%d", name, n)
				format.mustNotBe(FormatPAX)
			} else {
				paxHdrs[paxKey] = strconv.FormatInt(n, 10)
			}
		}
		if v, ok := h.PAXRecords[paxKey]; ok && v == strconv.FormatInt(n, 10) {
			paxHdrs[paxKey] = v
		}
	}
	verifyTime := func(ts time.Time, size int, name, paxKey string) {
		if ts.IsZero() {
			return // Always okay
		}
		if !fitsInBase256(size, ts.Unix()) {
			whyNoGNU = fmt.Sprintf("GNU cannot encode %s=%v", name, ts)
			format.mustNotBe(FormatGNU)
		}
		isMtime := paxKey == paxMtime
		fitsOctal := fitsInOctal(size, ts.Unix())
		if (isMtime && !fitsOctal) || !isMtime {
			whyNoUSTAR = fmt.Sprintf("USTAR cannot encode %s=%v", name, ts)
			format.mustNotBe(FormatUSTAR)
		}
		needsNano := ts.Nanosecond() != 0
		if !isMtime || !fitsOctal || needsNano {
			preferPAX = true // USTAR may truncate sub-second measurements
			if paxKey == paxNone {
				whyNoPAX = fmt.Sprintf("PAX cannot encode %s=%v", name, ts)
				format.mustNotBe(FormatPAX)
			} else {
				paxHdrs[paxKey] = formatPAXTime(ts)
			}
		}
		if v, ok := h.PAXRecords[paxKey]; ok && v == formatPAXTime(ts) {
			paxHdrs[paxKey] = v
		}
	}

	// Check basic fields.
	var blk block
	v7 := blk.V7()
	ustar := blk.USTAR()
	gnu := blk.GNU()
	verifyString(h.Name, len(v7.Name()), "Name", paxPath)
	verifyString(h.Linkname, len(v7.LinkName()), "Linkname", paxLinkpath)
	verifyString(h.Uname, len(ustar.UserName()), "Uname", paxUname)
	verifyString(h.Gname, len(ustar.GroupName()), "Gname", paxGname)
	verifyNumeric(h.Mode, len(v7.Mode()), "Mode", paxNone)
	verifyNumeric(int64(h.Uid), len(v7.UID()), "Uid", paxUid)
	verifyNumeric(int64(h.Gid), len(v7.GID()), "Gid", paxGid)
	verifyNumeric(h.Size, len(v7.Size()), "Size", paxSize)
	verifyNumeric(h.Devmajor, len(ustar.DevMajor()), "Devmajor", paxNone)
	verifyNumeric(h.Devminor, len(ustar.DevMinor()), "Devminor", paxNone)
	verifyTime(h.ModTime, len(v7.ModTime()), "ModTime", paxMtime)
	verifyTime(h.AccessTime, len(gnu.AccessTime()), "AccessTime", paxAtime)
	verifyTime(h.ChangeTime, len(gnu.ChangeTime()), "ChangeTime", paxCtime)

	// Check for header-only types.
	var whyOnlyPAX, whyOnlyGNU string
	switch h.Typeflag {
	case TypeReg, TypeChar, TypeBlock, TypeFifo, TypeGNUSparse:
		// Exclude TypeLink and TypeSymlink, since they may reference directories.
		if strings.HasSuffix(h.Name, "/") {
			return FormatUnknown, nil, headerError{"filename may not have trailing slash"}
		}
	case TypeXHeader, TypeGNULongName, TypeGNULongLink:
		return FormatUnknown, nil, headerError{"cannot manually encode TypeXHeader, TypeGNULongName, or TypeGNULongLink headers"}
	case TypeXGlobalHeader:
		h2 := Header{Name: h.Name, Typeflag: h.Typeflag, Xattrs: h.Xattrs, PAXRecords: h.PAXRecords, Format: h.Format}
		if !reflect.DeepEqual(h, h2) {
			return FormatUnknown, nil, headerError{"only PAXRecords should be set for TypeXGlobalHeader"}
		}
		whyOnlyPAX = "only PAX supports TypeXGlobalHeader"
		format.mayOnlyBe(FormatPAX)
	}
	if !isHeaderOnlyType(h.Typeflag) && h.Size < 0 {
		return FormatUnknown, nil, headerError{"negative size on header-only type"}
	}

	// Check PAX records.
	if len(h.Xattrs) > 0 {
		for k, v := range h.Xattrs {
			paxHdrs[paxSchilyXattr+k] = v
		}
		whyOnlyPAX = "only PAX supports Xattrs"
		format.mayOnlyBe(FormatPAX)
	}
	if len(h.PAXRecords) > 0 {
		for k, v := range h.PAXRecords {
			switch _, exists := paxHdrs[k]; {
			case exists:
				continue // Do not overwrite existing records
			case h.Typeflag == TypeXGlobalHeader:
				paxHdrs[k] = v // Copy all records
			case !basicKeys[k] && !strings.HasPrefix(k, paxGNUSparse):
				paxHdrs[k] = v // Ignore local records that may conflict
			}
		}
		whyOnlyPAX = "only PAX supports PAXRecords"
		format.mayOnlyBe(FormatPAX)
	}
	for k, v := range paxHdrs {
		if !validPAXRecord(k, v) {
			return FormatUnknown, nil, headerError{fmt.Sprintf("invalid PAX record: %q", k+" = "+v)}
		}
	}

	// TODO(dsnet): Re-enable this when adding sparse support.
	// See https://golang.org/issue/22735
	/*
		// Check sparse files.
		if len(h.SparseHoles) > 0 || h.Typeflag == TypeGNUSparse {
			if isHeaderOnlyType(h.Typeflag) {
				return FormatUnknown, nil, headerError{"header-only type cannot be sparse"}
			}
			if !validateSparseEntries(h.SparseHoles, h.Size) {
				return FormatUnknown, nil, headerError{"invalid sparse holes"}
			}
			if h.Typeflag == TypeGNUSparse {
				whyOnlyGNU = "only GNU supports TypeGNUSparse"
				format.mayOnlyBe(FormatGNU)
			} else {
				whyNoGNU = "GNU supports sparse files only with TypeGNUSparse"
				format.mustNotBe(FormatGNU)
			}
			whyNoUSTAR = "USTAR does not support sparse files"
			format.mustNotBe(FormatUSTAR)
		}
	*/

	// Check desired format.
	if wantFormat := h.Format; wantFormat != FormatUnknown {
		if wantFormat.has(FormatPAX) && !preferPAX {
			wantFormat.mayBe(FormatUSTAR) // PAX implies USTAR allowed too
		}
		format.mayOnlyBe(wantFormat) // Set union of formats allowed and format wanted
	}
	if format == FormatUnknown {
		switch h.Format {
		case FormatUSTAR:
			err = headerError{"Format specifies USTAR", whyNoUSTAR, whyOnlyPAX, whyOnlyGNU}
		case FormatPAX:
			err = headerError{"Format specifies PAX", whyNoPAX, whyOnlyGNU}
		case FormatGNU:
			err = headerError{"Format specifies GNU", whyNoGNU, whyOnlyPAX}
		default:
			err = headerError{whyNoUSTAR, whyNoPAX, whyNoGNU, whyOnlyPAX, whyOnlyGNU}
		}
	}
	return format, paxHdrs, err
}

// FileInfo returns an os.FileInfo for the Header.
func (h *Header) FileInfo() os.FileInfo {
	return headerFileInfo{h}
}

// headerFileInfo implements os.FileInfo.
type headerFileInfo struct {
	h *Header
}

func (fi headerFileInfo) Size() int64        { return fi.h.Size }
func (fi headerFileInfo) IsDir() bool        { return fi.Mode().IsDir() }
func (fi headerFileInfo) ModTime() time.Time { return fi.h.ModTime }
func (fi headerFileInfo) Sys() interface{}   { return fi.h }

// Name returns the base name of the file.
func (fi headerFileInfo) Name() string {
	if fi.IsDir() {
		return path.Base(path.Clean(fi.h.Name))
	}
	return path.Base(fi.h.Name)
}

// Mode returns the permission and mode bits for the headerFileInfo.
func (fi headerFileInfo) Mode() (mode os.FileMode) {
	// Set file permission bits.
	mode = os.FileMode(fi.h.Mode).Perm()

	// Set setuid, setgid and sticky bits.
	if fi.h.Mode&c_ISUID != 0 {
		mode |= os.ModeSetuid
	}
	if fi.h.Mode&c_ISGID != 0 {
		mode |= os.ModeSetgid
	}
	if fi.h.Mode&c_ISVTX != 0 {
		mode |= os.ModeSticky
	}

	// Set file mode bits; clear perm, setuid, setgid, and sticky bits.
	switch m := os.FileMode(fi.h.Mode) &^ 07777; m {
	case c_ISDIR:
		mode |= os.ModeDir
	case c_ISFIFO:
		mode |= os.ModeNamedPipe
	case c_ISLNK:
		mode |= os.ModeSymlink
	case c_ISBLK:
		mode |= os.ModeDevice
	case c_ISCHR:
		mode |= os.ModeDevice
		mode |= os.ModeCharDevice
	case c_ISSOCK:
		mode |= os.ModeSocket
	}

	switch fi.h.Typeflag {
	case TypeSymlink:
		mode |= os.ModeSymlink
	case TypeChar:
		mode |= os.ModeDevice
		mode |= os.ModeCharDevice
	case TypeBlock:
		mode |= os.ModeDevice
	case TypeDir:
		mode |= os.ModeDir
	case TypeFifo:
		mode |= os.ModeNamedPipe
	}

	return mode
}

// sysStat, if non-nil, populates h from system-dependent fields of fi.
var sysStat func(fi os.FileInfo, h *Header) error

const (
	// Mode constants from the USTAR spec:
	// See http://pubs.opengroup.org/onlinepubs/9699919799/utilities/pax.html#tag_20_92_13_06
	c_ISUID = 04000 // Set uid
	c_ISGID = 02000 // Set gid
	c_ISVTX = 01000 // Save text (sticky bit)

	// Common Unix mode constants; these are not defined in any common tar standard.
	// Header.FileInfo understands these, but FileInfoHeader will never produce these.
	c_ISDIR  = 040000  // Directory
	c_ISFIFO = 010000  // FIFO
	c_ISREG  = 0100000 // Regular file
	c_ISLNK  = 0120000 // Symbolic link
	c_ISBLK  = 060000  // Block special file
	c_ISCHR  = 020000  // Character special file
	c_ISSOCK = 0140000 // Socket
)

// FileInfoHeader creates a partially-populated Header from fi.
// If fi describes a symlink, FileInfoHeader records link as the link target.
// If fi describes a directory, a slash is appended to the name.
//
// Since os.FileInfo's Name method only returns the base name of
// the file it describes, it may be necessary to modify Header.Name
// to provide the full path name of the file.
func FileInfoHeader(fi os.FileInfo, link string) (*Header, error) {
	if fi == nil {
		return nil, errors.New("archive/tar: FileInfo is nil")
	}
	fm := fi.Mode()
	h := &Header{
		Name:    fi.Name(),
		ModTime: fi.ModTime(),
		Mode:    int64(fm.Perm()), // or'd with c_IS* constants later
	}
	switch {
	case fm.IsRegular():
		h.Typeflag = TypeReg
		h.Size = fi.Size()
	case fi.IsDir():
		h.Typeflag = TypeDir
		h.Name += "/"
	case fm&os.ModeSymlink != 0:
		h.Typeflag = TypeSymlink
		h.Linkname = link
	case fm&os.ModeDevice != 0:
		if fm&os.ModeCharDevice != 0 {
			h.Typeflag = TypeChar
		} else {
			h.Typeflag = TypeBlock
		}
	case fm&os.ModeNamedPipe != 0:
		h.Typeflag = TypeFifo
	case fm&os.ModeSocket != 0:
		return nil, fmt.Errorf("archive/tar: sockets not supported")
	default:
		return nil, fmt.Errorf("archive/tar: unknown file mode %v", fm)
	}
	if fm&os.ModeSetuid != 0 {
		h.Mode |= c_ISUID
	}
	if fm&os.ModeSetgid != 0 {
		h.Mode |= c_ISGID
	}
	if fm&os.ModeSticky != 0 {
		h.Mode |= c_ISVTX
	}
	// If possible, populate additional fields from OS-specific
	// FileInfo fields.
	if sys, ok := fi.Sys().(*Header); ok {
		// This FileInfo came from a Header (not the OS). Use the
		// original Header to populate all remaining fields.
		h.Uid = sys.Uid
		h.Gid = sys.Gid
		h.Uname = sys.Uname
		h.Gname = sys.Gname
		h.AccessTime = sys.AccessTime
		h.ChangeTime = sys.ChangeTime
		if sys.Xattrs != nil {
			h.Xattrs = make(map[string]string)
			for k, v := range sys.Xattrs {
				h.Xattrs[k] = v
			}
		}
		if sys.Typeflag == TypeLink {
			// hard link
			h.Typeflag = TypeLink
			h.Size = 0
			h.Linkname = sys.Linkname
		}
		if sys.PAXRecords != nil {
			h.PAXRecords = make(map[string]string)
			for k, v := range sys.PAXRecords {
				h.PAXRecords[k] = v
			}
		}
	}
	if sysStat != nil {
		return h, sysStat(fi, h)
	}
	return h, nil
}

// isHeaderOnlyType checks if the given type flag is of the type that has no
// data section even if a size is specified.
func isHeaderOnlyType(flag byte) bool {
	switch flag {
	case TypeLink, TypeSymlink, TypeChar, TypeBlock, TypeDir, TypeFifo:
		return true
	default:
		return false
	}
}

func min(a, b int64) int64 {
	if a < b {
		return a
	}
	return b
}
 07070100000C01000081A4000000000000000000000001645E367C00002C63000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/vbatts/tar-split/archive/tar/format.go  // Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package tar

import "strings"

// Format represents the tar archive format.
//
// The original tar format was introduced in Unix V7.
// Since then, there have been multiple competing formats attempting to
// standardize or extend the V7 format to overcome its limitations.
// The most common formats are the USTAR, PAX, and GNU formats,
// each with their own advantages and limitations.
//
// The following table captures the capabilities of each format:
//
//	                  |  USTAR |       PAX |       GNU
//	------------------+--------+-----------+----------
//	Name              |   256B | unlimited | unlimited
//	Linkname          |   100B | unlimited | unlimited
//	Size              | uint33 | unlimited |    uint89
//	Mode              | uint21 |    uint21 |    uint57
//	Uid/Gid           | uint21 | unlimited |    uint57
//	Uname/Gname       |    32B | unlimited |       32B
//	ModTime           | uint33 | unlimited |     int89
//	AccessTime        |    n/a | unlimited |     int89
//	ChangeTime        |    n/a | unlimited |     int89
//	Devmajor/Devminor | uint21 |    uint21 |    uint57
//	------------------+--------+-----------+----------
//	string encoding   |  ASCII |     UTF-8 |    binary
//	sub-second times  |     no |       yes |        no
//	sparse files      |     no |       yes |       yes
//
// The table's upper portion shows the Header fields, where each format reports
// the maximum number of bytes allowed for each string field and
// the integer type used to store each numeric field
// (where timestamps are stored as the number of seconds since the Unix epoch).
//
// The table's lower portion shows specialized features of each format,
// such as supported string encodings, support for sub-second timestamps,
// or support for sparse files.
//
// The Writer currently provides no support for sparse files.
type Format int

// Constants to identify various tar formats.
const (
	// Deliberately hide the meaning of constants from public API.
	_ Format = (1 << iota) / 4 // Sequence of 0, 0, 1, 2, 4, 8, etc...

	// FormatUnknown indicates that the format is unknown.
	FormatUnknown

	// The format of the original Unix V7 tar tool prior to standardization.
	formatV7

	// FormatUSTAR represents the USTAR header format defined in POSIX.1-1988.
	//
	// While this format is compatible with most tar readers,
	// the format has several limitations making it unsuitable for some usages.
	// Most notably, it cannot support sparse files, files larger than 8GiB,
	// filenames larger than 256 characters, and non-ASCII filenames.
	//
	// Reference:
	//	http://pubs.opengroup.org/onlinepubs/9699919799/utilities/pax.html#tag_20_92_13_06
	FormatUSTAR

	// FormatPAX represents the PAX header format defined in POSIX.1-2001.
	//
	// PAX extends USTAR by writing a special file with Typeflag TypeXHeader
	// preceding the original header. This file contains a set of key-value
	// records, which are used to overcome USTAR's shortcomings, in addition to
	// providing the ability to have sub-second resolution for timestamps.
	//
	// Some newer formats add their own extensions to PAX by defining their
	// own keys and assigning certain semantic meaning to the associated values.
	// For example, sparse file support in PAX is implemented using keys
	// defined by the GNU manual (e.g., "GNU.sparse.map").
	//
	// Reference:
	//	http://pubs.opengroup.org/onlinepubs/009695399/utilities/pax.html
	FormatPAX

	// FormatGNU represents the GNU header format.
	//
	// The GNU header format is older than the USTAR and PAX standards and
	// is not compatible with them. The GNU format supports
	// arbitrary file sizes, filenames of arbitrary encoding and length,
	// sparse files, and other features.
	//
	// It is recommended that PAX be chosen over GNU unless the target
	// application can only parse GNU formatted archives.
	//
	// Reference:
	//	https://www.gnu.org/software/tar/manual/html_node/Standard.html
	FormatGNU

	// Schily's tar format, which is incompatible with USTAR.
	// This does not cover STAR extensions to the PAX format; these fall under
	// the PAX format.
	formatSTAR

	formatMax
)

func (f Format) has(f2 Format) bool   { return f&f2 != 0 }
func (f *Format) mayBe(f2 Format)     { *f |= f2 }
func (f *Format) mayOnlyBe(f2 Format) { *f &= f2 }
func (f *Format) mustNotBe(f2 Format) { *f &^= f2 }

var formatNames = map[Format]string{
	formatV7: "V7", FormatUSTAR: "USTAR", FormatPAX: "PAX", FormatGNU: "GNU", formatSTAR: "STAR",
}

func (f Format) String() string {
	var ss []string
	for f2 := Format(1); f2 < formatMax; f2 <<= 1 {
		if f.has(f2) {
			ss = append(ss, formatNames[f2])
		}
	}
	switch len(ss) {
	case 0:
		return "<unknown>"
	case 1:
		return ss[0]
	default:
		return "(" + strings.Join(ss, " | ") + ")"
	}
}

// Magics used to identify various formats.
const (
	magicGNU, versionGNU     = "ustar ", " \x00"
	magicUSTAR, versionUSTAR = "ustar\x00", "00"
	trailerSTAR              = "tar\x00"
)

// Size constants from various tar specifications.
const (
	blockSize  = 512 // Size of each block in a tar stream
	nameSize   = 100 // Max length of the name field in USTAR format
	prefixSize = 155 // Max length of the prefix field in USTAR format
)

// blockPadding computes the number of bytes needed to pad offset up to the
// nearest block edge where 0 <= n < blockSize.
func blockPadding(offset int64) (n int64) {
	return -offset & (blockSize - 1)
}

var zeroBlock block

type block [blockSize]byte

// Convert block to any number of formats.
func (b *block) V7() *headerV7       { return (*headerV7)(b) }
func (b *block) GNU() *headerGNU     { return (*headerGNU)(b) }
func (b *block) STAR() *headerSTAR   { return (*headerSTAR)(b) }
func (b *block) USTAR() *headerUSTAR { return (*headerUSTAR)(b) }
func (b *block) Sparse() sparseArray { return (sparseArray)(b[:]) }

// GetFormat checks that the block is a valid tar header based on the checksum.
// It then attempts to guess the specific format based on magic values.
// If the checksum fails, then FormatUnknown is returned.
func (b *block) GetFormat() Format {
	// Verify checksum.
	var p parser
	value := p.parseOctal(b.V7().Chksum())
	chksum1, chksum2 := b.ComputeChecksum()
	if p.err != nil || (value != chksum1 && value != chksum2) {
		return FormatUnknown
	}

	// Guess the magic values.
	magic := string(b.USTAR().Magic())
	version := string(b.USTAR().Version())
	trailer := string(b.STAR().Trailer())
	switch {
	case magic == magicUSTAR && trailer == trailerSTAR:
		return formatSTAR
	case magic == magicUSTAR:
		return FormatUSTAR | FormatPAX
	case magic == magicGNU && version == versionGNU:
		return FormatGNU
	default:
		return formatV7
	}
}

// SetFormat writes the magic values necessary for specified format
// and then updates the checksum accordingly.
func (b *block) SetFormat(format Format) {
	// Set the magic values.
	switch {
	case format.has(formatV7):
		// Do nothing.
	case format.has(FormatGNU):
		copy(b.GNU().Magic(), magicGNU)
		copy(b.GNU().Version(), versionGNU)
	case format.has(formatSTAR):
		copy(b.STAR().Magic(), magicUSTAR)
		copy(b.STAR().Version(), versionUSTAR)
		copy(b.STAR().Trailer(), trailerSTAR)
	case format.has(FormatUSTAR | FormatPAX):
		copy(b.USTAR().Magic(), magicUSTAR)
		copy(b.USTAR().Version(), versionUSTAR)
	default:
		panic("invalid format")
	}

	// Update checksum.
	// This field is special in that it is terminated by a NULL then space.
	var f formatter
	field := b.V7().Chksum()
	chksum, _ := b.ComputeChecksum() // Possible values are 256..128776
	f.formatOctal(field[:7], chksum) // Never fails since 128776 < 262143
	field[7] = ' '
}

// ComputeChecksum computes the checksum for the header block.
// POSIX specifies a sum of the unsigned byte values, but the Sun tar used
// signed byte values.
// We compute and return both.
func (b *block) ComputeChecksum() (unsigned, signed int64) {
	for i, c := range b {
		if 148 <= i && i < 156 {
			c = ' ' // Treat the checksum field itself as all spaces.
		}
		unsigned += int64(c)
		signed += int64(int8(c))
	}
	return unsigned, signed
}

// Reset clears the block with all zeros.
func (b *block) Reset() {
	*b = block{}
}

type headerV7 [blockSize]byte

func (h *headerV7) Name() []byte     { return h[000:][:100] }
func (h *headerV7) Mode() []byte     { return h[100:][:8] }
func (h *headerV7) UID() []byte      { return h[108:][:8] }
func (h *headerV7) GID() []byte      { return h[116:][:8] }
func (h *headerV7) Size() []byte     { return h[124:][:12] }
func (h *headerV7) ModTime() []byte  { return h[136:][:12] }
func (h *headerV7) Chksum() []byte   { return h[148:][:8] }
func (h *headerV7) TypeFlag() []byte { return h[156:][:1] }
func (h *headerV7) LinkName() []byte { return h[157:][:100] }

type headerGNU [blockSize]byte

func (h *headerGNU) V7() *headerV7       { return (*headerV7)(h) }
func (h *headerGNU) Magic() []byte       { return h[257:][:6] }
func (h *headerGNU) Version() []byte     { return h[263:][:2] }
func (h *headerGNU) UserName() []byte    { return h[265:][:32] }
func (h *headerGNU) GroupName() []byte   { return h[297:][:32] }
func (h *headerGNU) DevMajor() []byte    { return h[329:][:8] }
func (h *headerGNU) DevMinor() []byte    { return h[337:][:8] }
func (h *headerGNU) AccessTime() []byte  { return h[345:][:12] }
func (h *headerGNU) ChangeTime() []byte  { return h[357:][:12] }
func (h *headerGNU) Sparse() sparseArray { return (sparseArray)(h[386:][:24*4+1]) }
func (h *headerGNU) RealSize() []byte    { return h[483:][:12] }

type headerSTAR [blockSize]byte

func (h *headerSTAR) V7() *headerV7      { return (*headerV7)(h) }
func (h *headerSTAR) Magic() []byte      { return h[257:][:6] }
func (h *headerSTAR) Version() []byte    { return h[263:][:2] }
func (h *headerSTAR) UserName() []byte   { return h[265:][:32] }
func (h *headerSTAR) GroupName() []byte  { return h[297:][:32] }
func (h *headerSTAR) DevMajor() []byte   { return h[329:][:8] }
func (h *headerSTAR) DevMinor() []byte   { return h[337:][:8] }
func (h *headerSTAR) Prefix() []byte     { return h[345:][:131] }
func (h *headerSTAR) AccessTime() []byte { return h[476:][:12] }
func (h *headerSTAR) ChangeTime() []byte { return h[488:][:12] }
func (h *headerSTAR) Trailer() []byte    { return h[508:][:4] }

type headerUSTAR [blockSize]byte

func (h *headerUSTAR) V7() *headerV7     { return (*headerV7)(h) }
func (h *headerUSTAR) Magic() []byte     { return h[257:][:6] }
func (h *headerUSTAR) Version() []byte   { return h[263:][:2] }
func (h *headerUSTAR) UserName() []byte  { return h[265:][:32] }
func (h *headerUSTAR) GroupName() []byte { return h[297:][:32] }
func (h *headerUSTAR) DevMajor() []byte  { return h[329:][:8] }
func (h *headerUSTAR) DevMinor() []byte  { return h[337:][:8] }
func (h *headerUSTAR) Prefix() []byte    { return h[345:][:155] }

type sparseArray []byte

func (s sparseArray) Entry(i int) sparseElem { return (sparseElem)(s[i*24:]) }
func (s sparseArray) IsExtended() []byte     { return s[24*s.MaxEntries():][:1] }
func (s sparseArray) MaxEntries() int        { return len(s) / 24 }

type sparseElem []byte

func (s sparseElem) Offset() []byte { return s[00:][:12] }
func (s sparseElem) Length() []byte { return s[12:][:12] }
 07070100000C02000081A4000000000000000000000001645E367C00006D18000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/vbatts/tar-split/archive/tar/reader.go  // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package tar

import (
	"bytes"
	"io"
	"io/ioutil"
	"strconv"
	"strings"
	"time"
)

// Reader provides sequential access to the contents of a tar archive.
// Reader.Next advances to the next file in the archive (including the first),
// and then Reader can be treated as an io.Reader to access the file's data.
type Reader struct {
	r    io.Reader
	pad  int64      // Amount of padding (ignored) after current file entry
	curr fileReader // Reader for current file entry
	blk  block      // Buffer to use as temporary local storage

	// err is a persistent error.
	// It is only the responsibility of every exported method of Reader to
	// ensure that this error is sticky.
	err error

	RawAccounting bool          // Whether to enable the access needed to reassemble the tar from raw bytes. Some performance/memory hit for this.
	rawBytes      *bytes.Buffer // last raw bits
}

type fileReader interface {
	io.Reader
	fileState

	WriteTo(io.Writer) (int64, error)
}

// RawBytes accesses the raw bytes of the archive, apart from the file payload itself.
// This includes the header and padding.
//
// # This call resets the current rawbytes buffer
//
// Only when RawAccounting is enabled, otherwise this returns nil
func (tr *Reader) RawBytes() []byte {
	if !tr.RawAccounting {
		return nil
	}
	if tr.rawBytes == nil {
		tr.rawBytes = bytes.NewBuffer(nil)
	}
	defer tr.rawBytes.Reset() // if we've read them, then flush them.

	return tr.rawBytes.Bytes()

}

// NewReader creates a new Reader reading from r.
func NewReader(r io.Reader) *Reader {
	return &Reader{r: r, curr: &regFileReader{r, 0}}
}

// Next advances to the next entry in the tar archive.
// The Header.Size determines how many bytes can be read for the next file.
// Any remaining data in the current file is automatically discarded.
//
// io.EOF is returned at the end of the input.
func (tr *Reader) Next() (*Header, error) {
	if tr.err != nil {
		return nil, tr.err
	}
	hdr, err := tr.next()
	tr.err = err
	return hdr, err
}

func (tr *Reader) next() (*Header, error) {
	var paxHdrs map[string]string
	var gnuLongName, gnuLongLink string

	if tr.RawAccounting {
		if tr.rawBytes == nil {
			tr.rawBytes = bytes.NewBuffer(nil)
		} else {
			tr.rawBytes.Reset()
		}
	}

	// Externally, Next iterates through the tar archive as if it is a series of
	// files. Internally, the tar format often uses fake "files" to add meta
	// data that describes the next file. These meta data "files" should not
	// normally be visible to the outside. As such, this loop iterates through
	// one or more "header files" until it finds a "normal file".
	format := FormatUSTAR | FormatPAX | FormatGNU
	for {
		// Discard the remainder of the file and any padding.
		if err := discard(tr, tr.curr.PhysicalRemaining()); err != nil {
			return nil, err
		}
		n, err := tryReadFull(tr.r, tr.blk[:tr.pad])
		if err != nil {
			return nil, err
		}
		if tr.RawAccounting {
			tr.rawBytes.Write(tr.blk[:n])
		}
		tr.pad = 0

		hdr, rawHdr, err := tr.readHeader()
		if err != nil {
			return nil, err
		}
		if err := tr.handleRegularFile(hdr); err != nil {
			return nil, err
		}
		format.mayOnlyBe(hdr.Format)

		// Check for PAX/GNU special headers and files.
		switch hdr.Typeflag {
		case TypeXHeader, TypeXGlobalHeader:
			format.mayOnlyBe(FormatPAX)
			paxHdrs, err = parsePAX(tr)
			if err != nil {
				return nil, err
			}
			if hdr.Typeflag == TypeXGlobalHeader {
				if err = mergePAX(hdr, paxHdrs); err != nil {
					return nil, err
				}
				return &Header{
					Name:       hdr.Name,
					Typeflag:   hdr.Typeflag,
					Xattrs:     hdr.Xattrs,
					PAXRecords: hdr.PAXRecords,
					Format:     format,
				}, nil
			}
			continue // This is a meta header affecting the next header
		case TypeGNULongName, TypeGNULongLink:
			format.mayOnlyBe(FormatGNU)
			realname, err := ioutil.ReadAll(tr)
			if err != nil {
				return nil, err
			}

			if tr.RawAccounting {
				tr.rawBytes.Write(realname)
			}

			var p parser
			switch hdr.Typeflag {
			case TypeGNULongName:
				gnuLongName = p.parseString(realname)
			case TypeGNULongLink:
				gnuLongLink = p.parseString(realname)
			}
			continue // This is a meta header affecting the next header
		default:
			// The old GNU sparse format is handled here since it is technically
			// just a regular file with additional attributes.

			if err := mergePAX(hdr, paxHdrs); err != nil {
				return nil, err
			}
			if gnuLongName != "" {
				hdr.Name = gnuLongName
			}
			if gnuLongLink != "" {
				hdr.Linkname = gnuLongLink
			}
			if hdr.Typeflag == TypeRegA {
				if strings.HasSuffix(hdr.Name, "/") {
					hdr.Typeflag = TypeDir // Legacy archives use trailing slash for directories
				} else {
					hdr.Typeflag = TypeReg
				}
			}

			// The extended headers may have updated the size.
			// Thus, setup the regFileReader again after merging PAX headers.
			if err := tr.handleRegularFile(hdr); err != nil {
				return nil, err
			}

			// Sparse formats rely on being able to read from the logical data
			// section; there must be a preceding call to handleRegularFile.
			if err := tr.handleSparseFile(hdr, rawHdr); err != nil {
				return nil, err
			}

			// Set the final guess at the format.
			if format.has(FormatUSTAR) && format.has(FormatPAX) {
				format.mayOnlyBe(FormatUSTAR)
			}
			hdr.Format = format
			return hdr, nil // This is a file, so stop
		}
	}
}

// handleRegularFile sets up the current file reader and padding such that it
// can only read the following logical data section. It will properly handle
// special headers that contain no data section.
func (tr *Reader) handleRegularFile(hdr *Header) error {
	nb := hdr.Size
	if isHeaderOnlyType(hdr.Typeflag) {
		nb = 0
	}
	if nb < 0 {
		return ErrHeader
	}

	tr.pad = blockPadding(nb)
	tr.curr = &regFileReader{r: tr.r, nb: nb}
	return nil
}

// handleSparseFile checks if the current file is a sparse format of any type
// and sets the curr reader appropriately.
func (tr *Reader) handleSparseFile(hdr *Header, rawHdr *block) error {
	var spd sparseDatas
	var err error
	if hdr.Typeflag == TypeGNUSparse {
		spd, err = tr.readOldGNUSparseMap(hdr, rawHdr)
	} else {
		spd, err = tr.readGNUSparsePAXHeaders(hdr)
	}

	// If sp is non-nil, then this is a sparse file.
	// Note that it is possible for len(sp) == 0.
	if err == nil && spd != nil {
		if isHeaderOnlyType(hdr.Typeflag) || !validateSparseEntries(spd, hdr.Size) {
			return ErrHeader
		}
		sph := invertSparseEntries(spd, hdr.Size)
		tr.curr = &sparseFileReader{tr.curr, sph, 0}
	}
	return err
}

// readGNUSparsePAXHeaders checks the PAX headers for GNU sparse headers.
// If they are found, then this function reads the sparse map and returns it.
// This assumes that 0.0 headers have already been converted to 0.1 headers
// by the PAX header parsing logic.
func (tr *Reader) readGNUSparsePAXHeaders(hdr *Header) (sparseDatas, error) {
	// Identify the version of GNU headers.
	var is1x0 bool
	major, minor := hdr.PAXRecords[paxGNUSparseMajor], hdr.PAXRecords[paxGNUSparseMinor]
	switch {
	case major == "0" && (minor == "0" || minor == "1"):
		is1x0 = false
	case major == "1" && minor == "0":
		is1x0 = true
	case major != "" || minor != "":
		return nil, nil // Unknown GNU sparse PAX version
	case hdr.PAXRecords[paxGNUSparseMap] != "":
		is1x0 = false // 0.0 and 0.1 did not have explicit version records, so guess
	default:
		return nil, nil // Not a PAX format GNU sparse file.
	}
	hdr.Format.mayOnlyBe(FormatPAX)

	// Update hdr from GNU sparse PAX headers.
	if name := hdr.PAXRecords[paxGNUSparseName]; name != "" {
		hdr.Name = name
	}
	size := hdr.PAXRecords[paxGNUSparseSize]
	if size == "" {
		size = hdr.PAXRecords[paxGNUSparseRealSize]
	}
	if size != "" {
		n, err := strconv.ParseInt(size, 10, 64)
		if err != nil {
			return nil, ErrHeader
		}
		hdr.Size = n
	}

	// Read the sparse map according to the appropriate format.
	if is1x0 {
		return readGNUSparseMap1x0(tr.curr)
	}
	return readGNUSparseMap0x1(hdr.PAXRecords)
}

// mergePAX merges paxHdrs into hdr for all relevant fields of Header.
func mergePAX(hdr *Header, paxHdrs map[string]string) (err error) {
	for k, v := range paxHdrs {
		if v == "" {
			continue // Keep the original USTAR value
		}
		var id64 int64
		switch k {
		case paxPath:
			hdr.Name = v
		case paxLinkpath:
			hdr.Linkname = v
		case paxUname:
			hdr.Uname = v
		case paxGname:
			hdr.Gname = v
		case paxUid:
			id64, err = strconv.ParseInt(v, 10, 64)
			hdr.Uid = int(id64) // Integer overflow possible
		case paxGid:
			id64, err = strconv.ParseInt(v, 10, 64)
			hdr.Gid = int(id64) // Integer overflow possible
		case paxAtime:
			hdr.AccessTime, err = parsePAXTime(v)
		case paxMtime:
			hdr.ModTime, err = parsePAXTime(v)
		case paxCtime:
			hdr.ChangeTime, err = parsePAXTime(v)
		case paxSize:
			hdr.Size, err = strconv.ParseInt(v, 10, 64)
		default:
			if strings.HasPrefix(k, paxSchilyXattr) {
				if hdr.Xattrs == nil {
					hdr.Xattrs = make(map[string]string)
				}
				hdr.Xattrs[k[len(paxSchilyXattr):]] = v
			}
		}
		if err != nil {
			return ErrHeader
		}
	}
	hdr.PAXRecords = paxHdrs
	return nil
}

// parsePAX parses PAX headers.
// If an extended header (type 'x') is invalid, ErrHeader is returned
func parsePAX(r io.Reader) (map[string]string, error) {
	buf, err := ioutil.ReadAll(r)
	if err != nil {
		return nil, err
	}
	// leaving this function for io.Reader makes it more testable
	if tr, ok := r.(*Reader); ok && tr.RawAccounting {
		if _, err = tr.rawBytes.Write(buf); err != nil {
			return nil, err
		}
	}
	sbuf := string(buf)

	// For GNU PAX sparse format 0.0 support.
	// This function transforms the sparse format 0.0 headers into format 0.1
	// headers since 0.0 headers were not PAX compliant.
	var sparseMap []string

	paxHdrs := make(map[string]string)
	for len(sbuf) > 0 {
		key, value, residual, err := parsePAXRecord(sbuf)
		if err != nil {
			return nil, ErrHeader
		}
		sbuf = residual

		switch key {
		case paxGNUSparseOffset, paxGNUSparseNumBytes:
			// Validate sparse header order and value.
			if (len(sparseMap)%2 == 0 && key != paxGNUSparseOffset) ||
				(len(sparseMap)%2 == 1 && key != paxGNUSparseNumBytes) ||
				strings.Contains(value, ",") {
				return nil, ErrHeader
			}
			sparseMap = append(sparseMap, value)
		default:
			paxHdrs[key] = value
		}
	}
	if len(sparseMap) > 0 {
		paxHdrs[paxGNUSparseMap] = strings.Join(sparseMap, ",")
	}
	return paxHdrs, nil
}

// readHeader reads the next block header and assumes that the underlying reader
// is already aligned to a block boundary. It returns the raw block of the
// header in case further processing is required.
//
// The err will be set to io.EOF only when one of the following occurs:
//   - Exactly 0 bytes are read and EOF is hit.
//   - Exactly 1 block of zeros is read and EOF is hit.
//   - At least 2 blocks of zeros are read.
func (tr *Reader) readHeader() (*Header, *block, error) {
	// Two blocks of zero bytes marks the end of the archive.
	n, err := io.ReadFull(tr.r, tr.blk[:])
	if tr.RawAccounting && (err == nil || err == io.EOF) {
		tr.rawBytes.Write(tr.blk[:n])
	}
	if err != nil {
		return nil, nil, err // EOF is okay here; exactly 0 bytes read
	}

	if bytes.Equal(tr.blk[:], zeroBlock[:]) {
		n, err = io.ReadFull(tr.r, tr.blk[:])
		if tr.RawAccounting && (err == nil || err == io.EOF) {
			tr.rawBytes.Write(tr.blk[:n])
		}
		if err != nil {
			return nil, nil, err // EOF is okay here; exactly 1 block of zeros read
		}
		if bytes.Equal(tr.blk[:], zeroBlock[:]) {
			return nil, nil, io.EOF // normal EOF; exactly 2 block of zeros read
		}
		return nil, nil, ErrHeader // Zero block and then non-zero block
	}

	// Verify the header matches a known format.
	format := tr.blk.GetFormat()
	if format == FormatUnknown {
		return nil, nil, ErrHeader
	}

	var p parser
	hdr := new(Header)

	// Unpack the V7 header.
	v7 := tr.blk.V7()
	hdr.Typeflag = v7.TypeFlag()[0]
	hdr.Name = p.parseString(v7.Name())
	hdr.Linkname = p.parseString(v7.LinkName())
	hdr.Size = p.parseNumeric(v7.Size())
	hdr.Mode = p.parseNumeric(v7.Mode())
	hdr.Uid = int(p.parseNumeric(v7.UID()))
	hdr.Gid = int(p.parseNumeric(v7.GID()))
	hdr.ModTime = time.Unix(p.parseNumeric(v7.ModTime()), 0)

	// Unpack format specific fields.
	if format > formatV7 {
		ustar := tr.blk.USTAR()
		hdr.Uname = p.parseString(ustar.UserName())
		hdr.Gname = p.parseString(ustar.GroupName())
		hdr.Devmajor = p.parseNumeric(ustar.DevMajor())
		hdr.Devminor = p.parseNumeric(ustar.DevMinor())

		var prefix string
		switch {
		case format.has(FormatUSTAR | FormatPAX):
			hdr.Format = format
			ustar := tr.blk.USTAR()
			prefix = p.parseString(ustar.Prefix())

			// For Format detection, check if block is properly formatted since
			// the parser is more liberal than what USTAR actually permits.
			notASCII := func(r rune) bool { return r >= 0x80 }
			if bytes.IndexFunc(tr.blk[:], notASCII) >= 0 {
				hdr.Format = FormatUnknown // Non-ASCII characters in block.
			}
			nul := func(b []byte) bool { return int(b[len(b)-1]) == 0 }
			if !(nul(v7.Size()) && nul(v7.Mode()) && nul(v7.UID()) && nul(v7.GID()) &&
				nul(v7.ModTime()) && nul(ustar.DevMajor()) && nul(ustar.DevMinor())) {
				hdr.Format = FormatUnknown // Numeric fields must end in NUL
			}
		case format.has(formatSTAR):
			star := tr.blk.STAR()
			prefix = p.parseString(star.Prefix())
			hdr.AccessTime = time.Unix(p.parseNumeric(star.AccessTime()), 0)
			hdr.ChangeTime = time.Unix(p.parseNumeric(star.ChangeTime()), 0)
		case format.has(FormatGNU):
			hdr.Format = format
			var p2 parser
			gnu := tr.blk.GNU()
			if b := gnu.AccessTime(); b[0] != 0 {
				hdr.AccessTime = time.Unix(p2.parseNumeric(b), 0)
			}
			if b := gnu.ChangeTime(); b[0] != 0 {
				hdr.ChangeTime = time.Unix(p2.parseNumeric(b), 0)
			}

			// Prior to Go1.8, the Writer had a bug where it would output
			// an invalid tar file in certain rare situations because the logic
			// incorrectly believed that the old GNU format had a prefix field.
			// This is wrong and leads to an output file that mangles the
			// atime and ctime fields, which are often left unused.
			//
			// In order to continue reading tar files created by former, buggy
			// versions of Go, we skeptically parse the atime and ctime fields.
			// If we are unable to parse them and the prefix field looks like
			// an ASCII string, then we fallback on the pre-Go1.8 behavior
			// of treating these fields as the USTAR prefix field.
			//
			// Note that this will not use the fallback logic for all possible
			// files generated by a pre-Go1.8 toolchain. If the generated file
			// happened to have a prefix field that parses as valid
			// atime and ctime fields (e.g., when they are valid octal strings),
			// then it is impossible to distinguish between an valid GNU file
			// and an invalid pre-Go1.8 file.
			//
			// See https://golang.org/issues/12594
			// See https://golang.org/issues/21005
			if p2.err != nil {
				hdr.AccessTime, hdr.ChangeTime = time.Time{}, time.Time{}
				ustar := tr.blk.USTAR()
				if s := p.parseString(ustar.Prefix()); isASCII(s) {
					prefix = s
				}
				hdr.Format = FormatUnknown // Buggy file is not GNU
			}
		}
		if len(prefix) > 0 {
			hdr.Name = prefix + "/" + hdr.Name
		}
	}
	return hdr, &tr.blk, p.err
}

// readOldGNUSparseMap reads the sparse map from the old GNU sparse format.
// The sparse map is stored in the tar header if it's small enough.
// If it's larger than four entries, then one or more extension headers are used
// to store the rest of the sparse map.
//
// The Header.Size does not reflect the size of any extended headers used.
// Thus, this function will read from the raw io.Reader to fetch extra headers.
// This method mutates blk in the process.
func (tr *Reader) readOldGNUSparseMap(hdr *Header, blk *block) (sparseDatas, error) {
	// Make sure that the input format is GNU.
	// Unfortunately, the STAR format also has a sparse header format that uses
	// the same type flag but has a completely different layout.
	if blk.GetFormat() != FormatGNU {
		return nil, ErrHeader
	}
	hdr.Format.mayOnlyBe(FormatGNU)

	var p parser
	hdr.Size = p.parseNumeric(blk.GNU().RealSize())
	if p.err != nil {
		return nil, p.err
	}
	s := blk.GNU().Sparse()
	spd := make(sparseDatas, 0, s.MaxEntries())
	for {
		for i := 0; i < s.MaxEntries(); i++ {
			// This termination condition is identical to GNU and BSD tar.
			if s.Entry(i).Offset()[0] == 0x00 {
				break // Don't return, need to process extended headers (even if empty)
			}
			offset := p.parseNumeric(s.Entry(i).Offset())
			length := p.parseNumeric(s.Entry(i).Length())
			if p.err != nil {
				return nil, p.err
			}
			spd = append(spd, sparseEntry{Offset: offset, Length: length})
		}

		if s.IsExtended()[0] > 0 {
			// There are more entries. Read an extension header and parse its entries.
			if _, err := mustReadFull(tr.r, blk[:]); err != nil {
				return nil, err
			}
			if tr.RawAccounting {
				tr.rawBytes.Write(blk[:])
			}
			s = blk.Sparse()
			continue
		}
		return spd, nil // Done
	}
}

// readGNUSparseMap1x0 reads the sparse map as stored in GNU's PAX sparse format
// version 1.0. The format of the sparse map consists of a series of
// newline-terminated numeric fields. The first field is the number of entries
// and is always present. Following this are the entries, consisting of two
// fields (offset, length). This function must stop reading at the end
// boundary of the block containing the last newline.
//
// Note that the GNU manual says that numeric values should be encoded in octal
// format. However, the GNU tar utility itself outputs these values in decimal.
// As such, this library treats values as being encoded in decimal.
func readGNUSparseMap1x0(r io.Reader) (sparseDatas, error) {
	var (
		cntNewline int64
		buf        bytes.Buffer
		blk        block
	)

	// feedTokens copies data in blocks from r into buf until there are
	// at least cnt newlines in buf. It will not read more blocks than needed.
	feedTokens := func(n int64) error {
		for cntNewline < n {
			if _, err := mustReadFull(r, blk[:]); err != nil {
				return err
			}
			buf.Write(blk[:])
			for _, c := range blk {
				if c == '\n' {
					cntNewline++
				}
			}
		}
		return nil
	}

	// nextToken gets the next token delimited by a newline. This assumes that
	// at least one newline exists in the buffer.
	nextToken := func() string {
		cntNewline--
		tok, _ := buf.ReadString('\n')
		return strings.TrimRight(tok, "\n")
	}

	// Parse for the number of entries.
	// Use integer overflow resistant math to check this.
	if err := feedTokens(1); err != nil {
		return nil, err
	}
	numEntries, err := strconv.ParseInt(nextToken(), 10, 0) // Intentionally parse as native int
	if err != nil || numEntries < 0 || int(2*numEntries) < int(numEntries) {
		return nil, ErrHeader
	}

	// Parse for all member entries.
	// numEntries is trusted after this since a potential attacker must have
	// committed resources proportional to what this library used.
	if err := feedTokens(2 * numEntries); err != nil {
		return nil, err
	}
	spd := make(sparseDatas, 0, numEntries)
	for i := int64(0); i < numEntries; i++ {
		offset, err1 := strconv.ParseInt(nextToken(), 10, 64)
		length, err2 := strconv.ParseInt(nextToken(), 10, 64)
		if err1 != nil || err2 != nil {
			return nil, ErrHeader
		}
		spd = append(spd, sparseEntry{Offset: offset, Length: length})
	}
	return spd, nil
}

// readGNUSparseMap0x1 reads the sparse map as stored in GNU's PAX sparse format
// version 0.1. The sparse map is stored in the PAX headers.
func readGNUSparseMap0x1(paxHdrs map[string]string) (sparseDatas, error) {
	// Get number of entries.
	// Use integer overflow resistant math to check this.
	numEntriesStr := paxHdrs[paxGNUSparseNumBlocks]
	numEntries, err := strconv.ParseInt(numEntriesStr, 10, 0) // Intentionally parse as native int
	if err != nil || numEntries < 0 || int(2*numEntries) < int(numEntries) {
		return nil, ErrHeader
	}

	// There should be two numbers in sparseMap for each entry.
	sparseMap := strings.Split(paxHdrs[paxGNUSparseMap], ",")
	if len(sparseMap) == 1 && sparseMap[0] == "" {
		sparseMap = sparseMap[:0]
	}
	if int64(len(sparseMap)) != 2*numEntries {
		return nil, ErrHeader
	}

	// Loop through the entries in the sparse map.
	// numEntries is trusted now.
	spd := make(sparseDatas, 0, numEntries)
	for len(sparseMap) >= 2 {
		offset, err1 := strconv.ParseInt(sparseMap[0], 10, 64)
		length, err2 := strconv.ParseInt(sparseMap[1], 10, 64)
		if err1 != nil || err2 != nil {
			return nil, ErrHeader
		}
		spd = append(spd, sparseEntry{Offset: offset, Length: length})
		sparseMap = sparseMap[2:]
	}
	return spd, nil
}

// Read reads from the current file in the tar archive.
// It returns (0, io.EOF) when it reaches the end of that file,
// until Next is called to advance to the next file.
//
// If the current file is sparse, then the regions marked as a hole
// are read back as NUL-bytes.
//
// Calling Read on special types like TypeLink, TypeSymlink, TypeChar,
// TypeBlock, TypeDir, and TypeFifo returns (0, io.EOF) regardless of what
// the Header.Size claims.
func (tr *Reader) Read(b []byte) (int, error) {
	if tr.err != nil {
		return 0, tr.err
	}
	n, err := tr.curr.Read(b)
	if err != nil && err != io.EOF {
		tr.err = err
	}
	return n, err
}

// writeTo writes the content of the current file to w.
// The bytes written matches the number of remaining bytes in the current file.
//
// If the current file is sparse and w is an io.WriteSeeker,
// then writeTo uses Seek to skip past holes defined in Header.SparseHoles,
// assuming that skipped regions are filled with NULs.
// This always writes the last byte to ensure w is the right size.
//
// TODO(dsnet): Re-export this when adding sparse file support.
// See https://golang.org/issue/22735
func (tr *Reader) writeTo(w io.Writer) (int64, error) {
	if tr.err != nil {
		return 0, tr.err
	}
	n, err := tr.curr.WriteTo(w)
	if err != nil {
		tr.err = err
	}
	return n, err
}

// regFileReader is a fileReader for reading data from a regular file entry.
type regFileReader struct {
	r  io.Reader // Underlying Reader
	nb int64     // Number of remaining bytes to read
}

func (fr *regFileReader) Read(b []byte) (n int, err error) {
	if int64(len(b)) > fr.nb {
		b = b[:fr.nb]
	}
	if len(b) > 0 {
		n, err = fr.r.Read(b)
		fr.nb -= int64(n)
	}
	switch {
	case err == io.EOF && fr.nb > 0:
		return n, io.ErrUnexpectedEOF
	case err == nil && fr.nb == 0:
		return n, io.EOF
	default:
		return n, err
	}
}

func (fr *regFileReader) WriteTo(w io.Writer) (int64, error) {
	return io.Copy(w, struct{ io.Reader }{fr})
}

func (fr regFileReader) LogicalRemaining() int64 {
	return fr.nb
}

func (fr regFileReader) PhysicalRemaining() int64 {
	return fr.nb
}

// sparseFileReader is a fileReader for reading data from a sparse file entry.
type sparseFileReader struct {
	fr  fileReader  // Underlying fileReader
	sp  sparseHoles // Normalized list of sparse holes
	pos int64       // Current position in sparse file
}

func (sr *sparseFileReader) Read(b []byte) (n int, err error) {
	finished := int64(len(b)) >= sr.LogicalRemaining()
	if finished {
		b = b[:sr.LogicalRemaining()]
	}

	b0 := b
	endPos := sr.pos + int64(len(b))
	for endPos > sr.pos && err == nil {
		var nf int // Bytes read in fragment
		holeStart, holeEnd := sr.sp[0].Offset, sr.sp[0].endOffset()
		if sr.pos < holeStart { // In a data fragment
			bf := b[:min(int64(len(b)), holeStart-sr.pos)]
			nf, err = tryReadFull(sr.fr, bf)
		} else { // In a hole fragment
			bf := b[:min(int64(len(b)), holeEnd-sr.pos)]
			nf, err = tryReadFull(zeroReader{}, bf)
		}
		b = b[nf:]
		sr.pos += int64(nf)
		if sr.pos >= holeEnd && len(sr.sp) > 1 {
			sr.sp = sr.sp[1:] // Ensure last fragment always remains
		}
	}

	n = len(b0) - len(b)
	switch {
	case err == io.EOF:
		return n, errMissData // Less data in dense file than sparse file
	case err != nil:
		return n, err
	case sr.LogicalRemaining() == 0 && sr.PhysicalRemaining() > 0:
		return n, errUnrefData // More data in dense file than sparse file
	case finished:
		return n, io.EOF
	default:
		return n, nil
	}
}

func (sr *sparseFileReader) WriteTo(w io.Writer) (n int64, err error) {
	ws, ok := w.(io.WriteSeeker)
	if ok {
		if _, err := ws.Seek(0, io.SeekCurrent); err != nil {
			ok = false // Not all io.Seeker can really seek
		}
	}
	if !ok {
		return io.Copy(w, struct{ io.Reader }{sr})
	}

	var writeLastByte bool
	pos0 := sr.pos
	for sr.LogicalRemaining() > 0 && !writeLastByte && err == nil {
		var nf int64 // Size of fragment
		holeStart, holeEnd := sr.sp[0].Offset, sr.sp[0].endOffset()
		if sr.pos < holeStart { // In a data fragment
			nf = holeStart - sr.pos
			nf, err = io.CopyN(ws, sr.fr, nf)
		} else { // In a hole fragment
			nf = holeEnd - sr.pos
			if sr.PhysicalRemaining() == 0 {
				writeLastByte = true
				nf--
			}
			_, err = ws.Seek(nf, io.SeekCurrent)
		}
		sr.pos += nf
		if sr.pos >= holeEnd && len(sr.sp) > 1 {
			sr.sp = sr.sp[1:] // Ensure last fragment always remains
		}
	}

	// If the last fragment is a hole, then seek to 1-byte before EOF, and
	// write a single byte to ensure the file is the right size.
	if writeLastByte && err == nil {
		_, err = ws.Write([]byte{0})
		sr.pos++
	}

	n = sr.pos - pos0
	switch {
	case err == io.EOF:
		return n, errMissData // Less data in dense file than sparse file
	case err != nil:
		return n, err
	case sr.LogicalRemaining() == 0 && sr.PhysicalRemaining() > 0:
		return n, errUnrefData // More data in dense file than sparse file
	default:
		return n, nil
	}
}

func (sr sparseFileReader) LogicalRemaining() int64 {
	return sr.sp[len(sr.sp)-1].endOffset() - sr.pos
}
func (sr sparseFileReader) PhysicalRemaining() int64 {
	return sr.fr.PhysicalRemaining()
}

type zeroReader struct{}

func (zeroReader) Read(b []byte) (int, error) {
	for i := range b {
		b[i] = 0
	}
	return len(b), nil
}

// mustReadFull is like io.ReadFull except it returns
// io.ErrUnexpectedEOF when io.EOF is hit before len(b) bytes are read.
func mustReadFull(r io.Reader, b []byte) (int, error) {
	n, err := tryReadFull(r, b)
	if err == io.EOF {
		err = io.ErrUnexpectedEOF
	}
	return n, err
}

// tryReadFull is like io.ReadFull except it returns
// io.EOF when it is hit before len(b) bytes are read.
func tryReadFull(r io.Reader, b []byte) (n int, err error) {
	for len(b) > n && err == nil {
		var nn int
		nn, err = r.Read(b[n:])
		n += nn
	}
	if len(b) == n && err == io.EOF {
		err = nil
	}
	return n, err
}

// discard skips n bytes in r, reporting an error if unable to do so.
func discard(tr *Reader, n int64) error {
	var seekSkipped, copySkipped int64
	var err error
	r := tr.r
	if tr.RawAccounting {

		copySkipped, err = io.CopyN(tr.rawBytes, tr.r, n)
		goto out
	}

	// If possible, Seek to the last byte before the end of the data section.
	// Do this because Seek is often lazy about reporting errors; this will mask
	// the fact that the stream may be truncated. We can rely on the
	// io.CopyN done shortly afterwards to trigger any IO errors.
	if sr, ok := r.(io.Seeker); ok && n > 1 {
		// Not all io.Seeker can actually Seek. For example, os.Stdin implements
		// io.Seeker, but calling Seek always returns an error and performs
		// no action. Thus, we try an innocent seek to the current position
		// to see if Seek is really supported.
		pos1, err := sr.Seek(0, io.SeekCurrent)
		if pos1 >= 0 && err == nil {
			// Seek seems supported, so perform the real Seek.
			pos2, err := sr.Seek(n-1, io.SeekCurrent)
			if pos2 < 0 || err != nil {
				return err
			}
			seekSkipped = pos2 - pos1
		}
	}

	copySkipped, err = io.CopyN(ioutil.Discard, r, n-seekSkipped)
out:
	if err == io.EOF && seekSkipped+copySkipped < n {
		err = io.ErrUnexpectedEOF
	}
	return err
}
07070100000C03000081A4000000000000000000000001645E367C0000019E000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/vbatts/tar-split/archive/tar/stat_actime1.go    // Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build linux dragonfly openbsd solaris

package tar

import (
	"syscall"
	"time"
)

func statAtime(st *syscall.Stat_t) time.Time {
	return time.Unix(st.Atim.Unix())
}

func statCtime(st *syscall.Stat_t) time.Time {
	return time.Unix(st.Ctim.Unix())
}
  07070100000C04000081A4000000000000000000000001645E367C0000019E000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/vbatts/tar-split/archive/tar/stat_actime2.go    // Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build darwin freebsd netbsd

package tar

import (
	"syscall"
	"time"
)

func statAtime(st *syscall.Stat_t) time.Time {
	return time.Unix(st.Atimespec.Unix())
}

func statCtime(st *syscall.Stat_t) time.Time {
	return time.Unix(st.Ctimespec.Unix())
}
  07070100000C05000081A4000000000000000000000001645E367C00000C05000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/vbatts/tar-split/archive/tar/stat_unix.go   // Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build linux darwin dragonfly freebsd openbsd netbsd solaris

package tar

import (
	"os"
	"os/user"
	"runtime"
	"strconv"
	"sync"
	"syscall"
)

func init() {
	sysStat = statUnix
}

// userMap and groupMap caches UID and GID lookups for performance reasons.
// The downside is that renaming uname or gname by the OS never takes effect.
var userMap, groupMap sync.Map // map[int]string

func statUnix(fi os.FileInfo, h *Header) error {
	sys, ok := fi.Sys().(*syscall.Stat_t)
	if !ok {
		return nil
	}
	h.Uid = int(sys.Uid)
	h.Gid = int(sys.Gid)

	// Best effort at populating Uname and Gname.
	// The os/user functions may fail for any number of reasons
	// (not implemented on that platform, cgo not enabled, etc).
	if u, ok := userMap.Load(h.Uid); ok {
		h.Uname = u.(string)
	} else if u, err := user.LookupId(strconv.Itoa(h.Uid)); err == nil {
		h.Uname = u.Username
		userMap.Store(h.Uid, h.Uname)
	}
	if g, ok := groupMap.Load(h.Gid); ok {
		h.Gname = g.(string)
	} else if g, err := user.LookupGroupId(strconv.Itoa(h.Gid)); err == nil {
		h.Gname = g.Name
		groupMap.Store(h.Gid, h.Gname)
	}

	h.AccessTime = statAtime(sys)
	h.ChangeTime = statCtime(sys)

	// Best effort at populating Devmajor and Devminor.
	if h.Typeflag == TypeChar || h.Typeflag == TypeBlock {
		dev := uint64(sys.Rdev) // May be int32 or uint32
		switch runtime.GOOS {
		case "linux":
			// Copied from golang.org/x/sys/unix/dev_linux.go.
			major := uint32((dev & 0x00000000000fff00) >> 8)
			major |= uint32((dev & 0xfffff00000000000) >> 32)
			minor := uint32((dev & 0x00000000000000ff) >> 0)
			minor |= uint32((dev & 0x00000ffffff00000) >> 12)
			h.Devmajor, h.Devminor = int64(major), int64(minor)
		case "darwin":
			// Copied from golang.org/x/sys/unix/dev_darwin.go.
			major := uint32((dev >> 24) & 0xff)
			minor := uint32(dev & 0xffffff)
			h.Devmajor, h.Devminor = int64(major), int64(minor)
		case "dragonfly":
			// Copied from golang.org/x/sys/unix/dev_dragonfly.go.
			major := uint32((dev >> 8) & 0xff)
			minor := uint32(dev & 0xffff00ff)
			h.Devmajor, h.Devminor = int64(major), int64(minor)
		case "freebsd":
			// Copied from golang.org/x/sys/unix/dev_freebsd.go.
			major := uint32((dev >> 8) & 0xff)
			minor := uint32(dev & 0xffff00ff)
			h.Devmajor, h.Devminor = int64(major), int64(minor)
		case "netbsd":
			// Copied from golang.org/x/sys/unix/dev_netbsd.go.
			major := uint32((dev & 0x000fff00) >> 8)
			minor := uint32((dev & 0x000000ff) >> 0)
			minor |= uint32((dev & 0xfff00000) >> 12)
			h.Devmajor, h.Devminor = int64(major), int64(minor)
		case "openbsd":
			// Copied from golang.org/x/sys/unix/dev_openbsd.go.
			major := uint32((dev & 0x0000ff00) >> 8)
			minor := uint32((dev & 0x000000ff) >> 0)
			minor |= uint32((dev & 0xffff0000) >> 8)
			h.Devmajor, h.Devminor = int64(major), int64(minor)
		default:
			// TODO: Implement solaris (see https://golang.org/issue/8106)
		}
	}
	return nil
}
   07070100000C06000081A4000000000000000000000001645E367C000023D5000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/vbatts/tar-split/archive/tar/strconv.go // Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package tar

import (
	"bytes"
	"fmt"
	"strconv"
	"strings"
	"time"
)

// hasNUL reports whether the NUL character exists within s.
func hasNUL(s string) bool {
	return strings.IndexByte(s, 0) >= 0
}

// isASCII reports whether the input is an ASCII C-style string.
func isASCII(s string) bool {
	for _, c := range s {
		if c >= 0x80 || c == 0x00 {
			return false
		}
	}
	return true
}

// toASCII converts the input to an ASCII C-style string.
// This a best effort conversion, so invalid characters are dropped.
func toASCII(s string) string {
	if isASCII(s) {
		return s
	}
	b := make([]byte, 0, len(s))
	for _, c := range s {
		if c < 0x80 && c != 0x00 {
			b = append(b, byte(c))
		}
	}
	return string(b)
}

type parser struct {
	err error // Last error seen
}

type formatter struct {
	err error // Last error seen
}

// parseString parses bytes as a NUL-terminated C-style string.
// If a NUL byte is not found then the whole slice is returned as a string.
func (*parser) parseString(b []byte) string {
	if i := bytes.IndexByte(b, 0); i >= 0 {
		return string(b[:i])
	}
	return string(b)
}

// formatString copies s into b, NUL-terminating if possible.
func (f *formatter) formatString(b []byte, s string) {
	if len(s) > len(b) {
		f.err = ErrFieldTooLong
	}
	copy(b, s)
	if len(s) < len(b) {
		b[len(s)] = 0
	}

	// Some buggy readers treat regular files with a trailing slash
	// in the V7 path field as a directory even though the full path
	// recorded elsewhere (e.g., via PAX record) contains no trailing slash.
	if len(s) > len(b) && b[len(b)-1] == '/' {
		n := len(strings.TrimRight(s[:len(b)], "/"))
		b[n] = 0 // Replace trailing slash with NUL terminator
	}
}

// fitsInBase256 reports whether x can be encoded into n bytes using base-256
// encoding. Unlike octal encoding, base-256 encoding does not require that the
// string ends with a NUL character. Thus, all n bytes are available for output.
//
// If operating in binary mode, this assumes strict GNU binary mode; which means
// that the first byte can only be either 0x80 or 0xff. Thus, the first byte is
// equivalent to the sign bit in two's complement form.
func fitsInBase256(n int, x int64) bool {
	binBits := uint(n-1) * 8
	return n >= 9 || (x >= -1<<binBits && x < 1<<binBits)
}

// parseNumeric parses the input as being encoded in either base-256 or octal.
// This function may return negative numbers.
// If parsing fails or an integer overflow occurs, err will be set.
func (p *parser) parseNumeric(b []byte) int64 {
	// Check for base-256 (binary) format first.
	// If the first bit is set, then all following bits constitute a two's
	// complement encoded number in big-endian byte order.
	if len(b) > 0 && b[0]&0x80 != 0 {
		// Handling negative numbers relies on the following identity:
		//	-a-1 == ^a
		//
		// If the number is negative, we use an inversion mask to invert the
		// data bytes and treat the value as an unsigned number.
		var inv byte // 0x00 if positive or zero, 0xff if negative
		if b[0]&0x40 != 0 {
			inv = 0xff
		}

		var x uint64
		for i, c := range b {
			c ^= inv // Inverts c only if inv is 0xff, otherwise does nothing
			if i == 0 {
				c &= 0x7f // Ignore signal bit in first byte
			}
			if (x >> 56) > 0 {
				p.err = ErrHeader // Integer overflow
				return 0
			}
			x = x<<8 | uint64(c)
		}
		if (x >> 63) > 0 {
			p.err = ErrHeader // Integer overflow
			return 0
		}
		if inv == 0xff {
			return ^int64(x)
		}
		return int64(x)
	}

	// Normal case is base-8 (octal) format.
	return p.parseOctal(b)
}

// formatNumeric encodes x into b using base-8 (octal) encoding if possible.
// Otherwise it will attempt to use base-256 (binary) encoding.
func (f *formatter) formatNumeric(b []byte, x int64) {
	if fitsInOctal(len(b), x) {
		f.formatOctal(b, x)
		return
	}

	if fitsInBase256(len(b), x) {
		for i := len(b) - 1; i >= 0; i-- {
			b[i] = byte(x)
			x >>= 8
		}
		b[0] |= 0x80 // Highest bit indicates binary format
		return
	}

	f.formatOctal(b, 0) // Last resort, just write zero
	f.err = ErrFieldTooLong
}

func (p *parser) parseOctal(b []byte) int64 {
	// Because unused fields are filled with NULs, we need
	// to skip leading NULs. Fields may also be padded with
	// spaces or NULs.
	// So we remove leading and trailing NULs and spaces to
	// be sure.
	b = bytes.Trim(b, " \x00")

	if len(b) == 0 {
		return 0
	}
	x, perr := strconv.ParseUint(p.parseString(b), 8, 64)
	if perr != nil {
		p.err = ErrHeader
	}
	return int64(x)
}

func (f *formatter) formatOctal(b []byte, x int64) {
	if !fitsInOctal(len(b), x) {
		x = 0 // Last resort, just write zero
		f.err = ErrFieldTooLong
	}

	s := strconv.FormatInt(x, 8)
	// Add leading zeros, but leave room for a NUL.
	if n := len(b) - len(s) - 1; n > 0 {
		s = strings.Repeat("0", n) + s
	}
	f.formatString(b, s)
}

// fitsInOctal reports whether the integer x fits in a field n-bytes long
// using octal encoding with the appropriate NUL terminator.
func fitsInOctal(n int, x int64) bool {
	octBits := uint(n-1) * 3
	return x >= 0 && (n >= 22 || x < 1<<octBits)
}

// parsePAXTime takes a string of the form %d.%d as described in the PAX
// specification. Note that this implementation allows for negative timestamps,
// which is allowed for by the PAX specification, but not always portable.
func parsePAXTime(s string) (time.Time, error) {
	const maxNanoSecondDigits = 9

	// Split string into seconds and sub-seconds parts.
	ss, sn := s, ""
	if pos := strings.IndexByte(s, '.'); pos >= 0 {
		ss, sn = s[:pos], s[pos+1:]
	}

	// Parse the seconds.
	secs, err := strconv.ParseInt(ss, 10, 64)
	if err != nil {
		return time.Time{}, ErrHeader
	}
	if len(sn) == 0 {
		return time.Unix(secs, 0), nil // No sub-second values
	}

	// Parse the nanoseconds.
	if strings.Trim(sn, "0123456789") != "" {
		return time.Time{}, ErrHeader
	}
	if len(sn) < maxNanoSecondDigits {
		sn += strings.Repeat("0", maxNanoSecondDigits-len(sn)) // Right pad
	} else {
		sn = sn[:maxNanoSecondDigits] // Right truncate
	}
	nsecs, _ := strconv.ParseInt(sn, 10, 64) // Must succeed
	if len(ss) > 0 && ss[0] == '-' {
		return time.Unix(secs, -1*nsecs), nil // Negative correction
	}
	return time.Unix(secs, nsecs), nil
}

// formatPAXTime converts ts into a time of the form %d.%d as described in the
// PAX specification. This function is capable of negative timestamps.
func formatPAXTime(ts time.Time) (s string) {
	secs, nsecs := ts.Unix(), ts.Nanosecond()
	if nsecs == 0 {
		return strconv.FormatInt(secs, 10)
	}

	// If seconds is negative, then perform correction.
	sign := ""
	if secs < 0 {
		sign = "-"             // Remember sign
		secs = -(secs + 1)     // Add a second to secs
		nsecs = -(nsecs - 1E9) // Take that second away from nsecs
	}
	return strings.TrimRight(fmt.Sprintf("%s%d.%09d", sign, secs, nsecs), "0")
}

// parsePAXRecord parses the input PAX record string into a key-value pair.
// If parsing is successful, it will slice off the currently read record and
// return the remainder as r.
func parsePAXRecord(s string) (k, v, r string, err error) {
	// The size field ends at the first space.
	sp := strings.IndexByte(s, ' ')
	if sp == -1 {
		return "", "", s, ErrHeader
	}

	// Parse the first token as a decimal integer.
	n, perr := strconv.ParseInt(s[:sp], 10, 0) // Intentionally parse as native int
	if perr != nil || n < 5 || int64(len(s)) < n {
		return "", "", s, ErrHeader
	}

	// Extract everything between the space and the final newline.
	rec, nl, rem := s[sp+1:n-1], s[n-1:n], s[n:]
	if nl != "\n" {
		return "", "", s, ErrHeader
	}

	// The first equals separates the key from the value.
	eq := strings.IndexByte(rec, '=')
	if eq == -1 {
		return "", "", s, ErrHeader
	}
	k, v = rec[:eq], rec[eq+1:]

	if !validPAXRecord(k, v) {
		return "", "", s, ErrHeader
	}
	return k, v, rem, nil
}

// formatPAXRecord formats a single PAX record, prefixing it with the
// appropriate length.
func formatPAXRecord(k, v string) (string, error) {
	if !validPAXRecord(k, v) {
		return "", ErrHeader
	}

	const padding = 3 // Extra padding for ' ', '=', and '\n'
	size := len(k) + len(v) + padding
	size += len(strconv.Itoa(size))
	record := strconv.Itoa(size) + " " + k + "=" + v + "\n"

	// Final adjustment if adding size field increased the record size.
	if len(record) != size {
		size = len(record)
		record = strconv.Itoa(size) + " " + k + "=" + v + "\n"
	}
	return record, nil
}

// validPAXRecord reports whether the key-value pair is valid where each
// record is formatted as:
//	"%d %s=%s\n" % (size, key, value)
//
// Keys and values should be UTF-8, but the number of bad writers out there
// forces us to be a more liberal.
// Thus, we only reject all keys with NUL, and only reject NULs in values
// for the PAX version of the USTAR string fields.
// The key must not contain an '=' character.
func validPAXRecord(k, v string) bool {
	if k == "" || strings.IndexByte(k, '=') >= 0 {
		return false
	}
	switch k {
	case paxPath, paxLinkpath, paxUname, paxGname:
		return !hasNUL(v)
	default:
		return !hasNUL(k)
	}
}
   07070100000C07000081A4000000000000000000000001645E367C000049AA000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/vbatts/tar-split/archive/tar/writer.go  // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package tar

import (
	"fmt"
	"io"
	"path"
	"sort"
	"strings"
	"time"
)

// Writer provides sequential writing of a tar archive.
// Write.WriteHeader begins a new file with the provided Header,
// and then Writer can be treated as an io.Writer to supply that file's data.
type Writer struct {
	w    io.Writer
	pad  int64      // Amount of padding to write after current file entry
	curr fileWriter // Writer for current file entry
	hdr  Header     // Shallow copy of Header that is safe for mutations
	blk  block      // Buffer to use as temporary local storage

	// err is a persistent error.
	// It is only the responsibility of every exported method of Writer to
	// ensure that this error is sticky.
	err error
}

// NewWriter creates a new Writer writing to w.
func NewWriter(w io.Writer) *Writer {
	return &Writer{w: w, curr: &regFileWriter{w, 0}}
}

type fileWriter interface {
	io.Writer
	fileState

	ReadFrom(io.Reader) (int64, error)
}

// Flush finishes writing the current file's block padding.
// The current file must be fully written before Flush can be called.
//
// This is unnecessary as the next call to WriteHeader or Close
// will implicitly flush out the file's padding.
func (tw *Writer) Flush() error {
	if tw.err != nil {
		return tw.err
	}
	if nb := tw.curr.LogicalRemaining(); nb > 0 {
		return fmt.Errorf("archive/tar: missed writing %d bytes", nb)
	}
	if _, tw.err = tw.w.Write(zeroBlock[:tw.pad]); tw.err != nil {
		return tw.err
	}
	tw.pad = 0
	return nil
}

// WriteHeader writes hdr and prepares to accept the file's contents.
// The Header.Size determines how many bytes can be written for the next file.
// If the current file is not fully written, then this returns an error.
// This implicitly flushes any padding necessary before writing the header.
func (tw *Writer) WriteHeader(hdr *Header) error {
	if err := tw.Flush(); err != nil {
		return err
	}
	tw.hdr = *hdr // Shallow copy of Header

	// Avoid usage of the legacy TypeRegA flag, and automatically promote
	// it to use TypeReg or TypeDir.
	if tw.hdr.Typeflag == TypeRegA {
		if strings.HasSuffix(tw.hdr.Name, "/") {
			tw.hdr.Typeflag = TypeDir
		} else {
			tw.hdr.Typeflag = TypeReg
		}
	}

	// Round ModTime and ignore AccessTime and ChangeTime unless
	// the format is explicitly chosen.
	// This ensures nominal usage of WriteHeader (without specifying the format)
	// does not always result in the PAX format being chosen, which
	// causes a 1KiB increase to every header.
	if tw.hdr.Format == FormatUnknown {
		tw.hdr.ModTime = tw.hdr.ModTime.Round(time.Second)
		tw.hdr.AccessTime = time.Time{}
		tw.hdr.ChangeTime = time.Time{}
	}

	allowedFormats, paxHdrs, err := tw.hdr.allowedFormats()
	switch {
	case allowedFormats.has(FormatUSTAR):
		tw.err = tw.writeUSTARHeader(&tw.hdr)
		return tw.err
	case allowedFormats.has(FormatPAX):
		tw.err = tw.writePAXHeader(&tw.hdr, paxHdrs)
		return tw.err
	case allowedFormats.has(FormatGNU):
		tw.err = tw.writeGNUHeader(&tw.hdr)
		return tw.err
	default:
		return err // Non-fatal error
	}
}

func (tw *Writer) writeUSTARHeader(hdr *Header) error {
	// Check if we can use USTAR prefix/suffix splitting.
	var namePrefix string
	if prefix, suffix, ok := splitUSTARPath(hdr.Name); ok {
		namePrefix, hdr.Name = prefix, suffix
	}

	// Pack the main header.
	var f formatter
	blk := tw.templateV7Plus(hdr, f.formatString, f.formatOctal)
	f.formatString(blk.USTAR().Prefix(), namePrefix)
	blk.SetFormat(FormatUSTAR)
	if f.err != nil {
		return f.err // Should never happen since header is validated
	}
	return tw.writeRawHeader(blk, hdr.Size, hdr.Typeflag)
}

func (tw *Writer) writePAXHeader(hdr *Header, paxHdrs map[string]string) error {
	realName, realSize := hdr.Name, hdr.Size

	// TODO(dsnet): Re-enable this when adding sparse support.
	// See https://golang.org/issue/22735
	/*
		// Handle sparse files.
		var spd sparseDatas
		var spb []byte
		if len(hdr.SparseHoles) > 0 {
			sph := append([]sparseEntry{}, hdr.SparseHoles...) // Copy sparse map
			sph = alignSparseEntries(sph, hdr.Size)
			spd = invertSparseEntries(sph, hdr.Size)

			// Format the sparse map.
			hdr.Size = 0 // Replace with encoded size
			spb = append(strconv.AppendInt(spb, int64(len(spd)), 10), '\n')
			for _, s := range spd {
				hdr.Size += s.Length
				spb = append(strconv.AppendInt(spb, s.Offset, 10), '\n')
				spb = append(strconv.AppendInt(spb, s.Length, 10), '\n')
			}
			pad := blockPadding(int64(len(spb)))
			spb = append(spb, zeroBlock[:pad]...)
			hdr.Size += int64(len(spb)) // Accounts for encoded sparse map

			// Add and modify appropriate PAX records.
			dir, file := path.Split(realName)
			hdr.Name = path.Join(dir, "GNUSparseFile.0", file)
			paxHdrs[paxGNUSparseMajor] = "1"
			paxHdrs[paxGNUSparseMinor] = "0"
			paxHdrs[paxGNUSparseName] = realName
			paxHdrs[paxGNUSparseRealSize] = strconv.FormatInt(realSize, 10)
			paxHdrs[paxSize] = strconv.FormatInt(hdr.Size, 10)
			delete(paxHdrs, paxPath) // Recorded by paxGNUSparseName
		}
	*/
	_ = realSize

	// Write PAX records to the output.
	isGlobal := hdr.Typeflag == TypeXGlobalHeader
	if len(paxHdrs) > 0 || isGlobal {
		// Sort keys for deterministic ordering.
		var keys []string
		for k := range paxHdrs {
			keys = append(keys, k)
		}
		sort.Strings(keys)

		// Write each record to a buffer.
		var buf strings.Builder
		for _, k := range keys {
			rec, err := formatPAXRecord(k, paxHdrs[k])
			if err != nil {
				return err
			}
			buf.WriteString(rec)
		}

		// Write the extended header file.
		var name string
		var flag byte
		if isGlobal {
			name = realName
			if name == "" {
				name = "GlobalHead.0.0"
			}
			flag = TypeXGlobalHeader
		} else {
			dir, file := path.Split(realName)
			name = path.Join(dir, "PaxHeaders.0", file)
			flag = TypeXHeader
		}
		data := buf.String()
		if err := tw.writeRawFile(name, data, flag, FormatPAX); err != nil || isGlobal {
			return err // Global headers return here
		}
	}

	// Pack the main header.
	var f formatter // Ignore errors since they are expected
	fmtStr := func(b []byte, s string) { f.formatString(b, toASCII(s)) }
	blk := tw.templateV7Plus(hdr, fmtStr, f.formatOctal)
	blk.SetFormat(FormatPAX)
	if err := tw.writeRawHeader(blk, hdr.Size, hdr.Typeflag); err != nil {
		return err
	}

	// TODO(dsnet): Re-enable this when adding sparse support.
	// See https://golang.org/issue/22735
	/*
		// Write the sparse map and setup the sparse writer if necessary.
		if len(spd) > 0 {
			// Use tw.curr since the sparse map is accounted for in hdr.Size.
			if _, err := tw.curr.Write(spb); err != nil {
				return err
			}
			tw.curr = &sparseFileWriter{tw.curr, spd, 0}
		}
	*/
	return nil
}

func (tw *Writer) writeGNUHeader(hdr *Header) error {
	// Use long-link files if Name or Linkname exceeds the field size.
	const longName = "././@LongLink"
	if len(hdr.Name) > nameSize {
		data := hdr.Name + "\x00"
		if err := tw.writeRawFile(longName, data, TypeGNULongName, FormatGNU); err != nil {
			return err
		}
	}
	if len(hdr.Linkname) > nameSize {
		data := hdr.Linkname + "\x00"
		if err := tw.writeRawFile(longName, data, TypeGNULongLink, FormatGNU); err != nil {
			return err
		}
	}

	// Pack the main header.
	var f formatter // Ignore errors since they are expected
	var spd sparseDatas
	var spb []byte
	blk := tw.templateV7Plus(hdr, f.formatString, f.formatNumeric)
	if !hdr.AccessTime.IsZero() {
		f.formatNumeric(blk.GNU().AccessTime(), hdr.AccessTime.Unix())
	}
	if !hdr.ChangeTime.IsZero() {
		f.formatNumeric(blk.GNU().ChangeTime(), hdr.ChangeTime.Unix())
	}
	// TODO(dsnet): Re-enable this when adding sparse support.
	// See https://golang.org/issue/22735
	/*
		if hdr.Typeflag == TypeGNUSparse {
			sph := append([]sparseEntry{}, hdr.SparseHoles...) // Copy sparse map
			sph = alignSparseEntries(sph, hdr.Size)
			spd = invertSparseEntries(sph, hdr.Size)

			// Format the sparse map.
			formatSPD := func(sp sparseDatas, sa sparseArray) sparseDatas {
				for i := 0; len(sp) > 0 && i < sa.MaxEntries(); i++ {
					f.formatNumeric(sa.Entry(i).Offset(), sp[0].Offset)
					f.formatNumeric(sa.Entry(i).Length(), sp[0].Length)
					sp = sp[1:]
				}
				if len(sp) > 0 {
					sa.IsExtended()[0] = 1
				}
				return sp
			}
			sp2 := formatSPD(spd, blk.GNU().Sparse())
			for len(sp2) > 0 {
				var spHdr block
				sp2 = formatSPD(sp2, spHdr.Sparse())
				spb = append(spb, spHdr[:]...)
			}

			// Update size fields in the header block.
			realSize := hdr.Size
			hdr.Size = 0 // Encoded size; does not account for encoded sparse map
			for _, s := range spd {
				hdr.Size += s.Length
			}
			copy(blk.V7().Size(), zeroBlock[:]) // Reset field
			f.formatNumeric(blk.V7().Size(), hdr.Size)
			f.formatNumeric(blk.GNU().RealSize(), realSize)
		}
	*/
	blk.SetFormat(FormatGNU)
	if err := tw.writeRawHeader(blk, hdr.Size, hdr.Typeflag); err != nil {
		return err
	}

	// Write the extended sparse map and setup the sparse writer if necessary.
	if len(spd) > 0 {
		// Use tw.w since the sparse map is not accounted for in hdr.Size.
		if _, err := tw.w.Write(spb); err != nil {
			return err
		}
		tw.curr = &sparseFileWriter{tw.curr, spd, 0}
	}
	return nil
}

type (
	stringFormatter func([]byte, string)
	numberFormatter func([]byte, int64)
)

// templateV7Plus fills out the V7 fields of a block using values from hdr.
// It also fills out fields (uname, gname, devmajor, devminor) that are
// shared in the USTAR, PAX, and GNU formats using the provided formatters.
//
// The block returned is only valid until the next call to
// templateV7Plus or writeRawFile.
func (tw *Writer) templateV7Plus(hdr *Header, fmtStr stringFormatter, fmtNum numberFormatter) *block {
	tw.blk.Reset()

	modTime := hdr.ModTime
	if modTime.IsZero() {
		modTime = time.Unix(0, 0)
	}

	v7 := tw.blk.V7()
	v7.TypeFlag()[0] = hdr.Typeflag
	fmtStr(v7.Name(), hdr.Name)
	fmtStr(v7.LinkName(), hdr.Linkname)
	fmtNum(v7.Mode(), hdr.Mode)
	fmtNum(v7.UID(), int64(hdr.Uid))
	fmtNum(v7.GID(), int64(hdr.Gid))
	fmtNum(v7.Size(), hdr.Size)
	fmtNum(v7.ModTime(), modTime.Unix())

	ustar := tw.blk.USTAR()
	fmtStr(ustar.UserName(), hdr.Uname)
	fmtStr(ustar.GroupName(), hdr.Gname)
	fmtNum(ustar.DevMajor(), hdr.Devmajor)
	fmtNum(ustar.DevMinor(), hdr.Devminor)

	return &tw.blk
}

// writeRawFile writes a minimal file with the given name and flag type.
// It uses format to encode the header format and will write data as the body.
// It uses default values for all of the other fields (as BSD and GNU tar does).
func (tw *Writer) writeRawFile(name, data string, flag byte, format Format) error {
	tw.blk.Reset()

	// Best effort for the filename.
	name = toASCII(name)
	if len(name) > nameSize {
		name = name[:nameSize]
	}
	name = strings.TrimRight(name, "/")

	var f formatter
	v7 := tw.blk.V7()
	v7.TypeFlag()[0] = flag
	f.formatString(v7.Name(), name)
	f.formatOctal(v7.Mode(), 0)
	f.formatOctal(v7.UID(), 0)
	f.formatOctal(v7.GID(), 0)
	f.formatOctal(v7.Size(), int64(len(data))) // Must be < 8GiB
	f.formatOctal(v7.ModTime(), 0)
	tw.blk.SetFormat(format)
	if f.err != nil {
		return f.err // Only occurs if size condition is violated
	}

	// Write the header and data.
	if err := tw.writeRawHeader(&tw.blk, int64(len(data)), flag); err != nil {
		return err
	}
	_, err := io.WriteString(tw, data)
	return err
}

// writeRawHeader writes the value of blk, regardless of its value.
// It sets up the Writer such that it can accept a file of the given size.
// If the flag is a special header-only flag, then the size is treated as zero.
func (tw *Writer) writeRawHeader(blk *block, size int64, flag byte) error {
	if err := tw.Flush(); err != nil {
		return err
	}
	if _, err := tw.w.Write(blk[:]); err != nil {
		return err
	}
	if isHeaderOnlyType(flag) {
		size = 0
	}
	tw.curr = &regFileWriter{tw.w, size}
	tw.pad = blockPadding(size)
	return nil
}

// splitUSTARPath splits a path according to USTAR prefix and suffix rules.
// If the path is not splittable, then it will return ("", "", false).
func splitUSTARPath(name string) (prefix, suffix string, ok bool) {
	length := len(name)
	if length <= nameSize || !isASCII(name) {
		return "", "", false
	} else if length > prefixSize+1 {
		length = prefixSize + 1
	} else if name[length-1] == '/' {
		length--
	}

	i := strings.LastIndex(name[:length], "/")
	nlen := len(name) - i - 1 // nlen is length of suffix
	plen := i                 // plen is length of prefix
	if i <= 0 || nlen > nameSize || nlen == 0 || plen > prefixSize {
		return "", "", false
	}
	return name[:i], name[i+1:], true
}

// Write writes to the current file in the tar archive.
// Write returns the error ErrWriteTooLong if more than
// Header.Size bytes are written after WriteHeader.
//
// Calling Write on special types like TypeLink, TypeSymlink, TypeChar,
// TypeBlock, TypeDir, and TypeFifo returns (0, ErrWriteTooLong) regardless
// of what the Header.Size claims.
func (tw *Writer) Write(b []byte) (int, error) {
	if tw.err != nil {
		return 0, tw.err
	}
	n, err := tw.curr.Write(b)
	if err != nil && err != ErrWriteTooLong {
		tw.err = err
	}
	return n, err
}

// readFrom populates the content of the current file by reading from r.
// The bytes read must match the number of remaining bytes in the current file.
//
// If the current file is sparse and r is an io.ReadSeeker,
// then readFrom uses Seek to skip past holes defined in Header.SparseHoles,
// assuming that skipped regions are all NULs.
// This always reads the last byte to ensure r is the right size.
//
// TODO(dsnet): Re-export this when adding sparse file support.
// See https://golang.org/issue/22735
func (tw *Writer) readFrom(r io.Reader) (int64, error) {
	if tw.err != nil {
		return 0, tw.err
	}
	n, err := tw.curr.ReadFrom(r)
	if err != nil && err != ErrWriteTooLong {
		tw.err = err
	}
	return n, err
}

// Close closes the tar archive by flushing the padding, and writing the footer.
// If the current file (from a prior call to WriteHeader) is not fully written,
// then this returns an error.
func (tw *Writer) Close() error {
	if tw.err == ErrWriteAfterClose {
		return nil
	}
	if tw.err != nil {
		return tw.err
	}

	// Trailer: two zero blocks.
	err := tw.Flush()
	for i := 0; i < 2 && err == nil; i++ {
		_, err = tw.w.Write(zeroBlock[:])
	}

	// Ensure all future actions are invalid.
	tw.err = ErrWriteAfterClose
	return err // Report IO errors
}

// regFileWriter is a fileWriter for writing data to a regular file entry.
type regFileWriter struct {
	w  io.Writer // Underlying Writer
	nb int64     // Number of remaining bytes to write
}

func (fw *regFileWriter) Write(b []byte) (n int, err error) {
	overwrite := int64(len(b)) > fw.nb
	if overwrite {
		b = b[:fw.nb]
	}
	if len(b) > 0 {
		n, err = fw.w.Write(b)
		fw.nb -= int64(n)
	}
	switch {
	case err != nil:
		return n, err
	case overwrite:
		return n, ErrWriteTooLong
	default:
		return n, nil
	}
}

func (fw *regFileWriter) ReadFrom(r io.Reader) (int64, error) {
	return io.Copy(struct{ io.Writer }{fw}, r)
}

func (fw regFileWriter) LogicalRemaining() int64 {
	return fw.nb
}
func (fw regFileWriter) PhysicalRemaining() int64 {
	return fw.nb
}

// sparseFileWriter is a fileWriter for writing data to a sparse file entry.
type sparseFileWriter struct {
	fw  fileWriter  // Underlying fileWriter
	sp  sparseDatas // Normalized list of data fragments
	pos int64       // Current position in sparse file
}

func (sw *sparseFileWriter) Write(b []byte) (n int, err error) {
	overwrite := int64(len(b)) > sw.LogicalRemaining()
	if overwrite {
		b = b[:sw.LogicalRemaining()]
	}

	b0 := b
	endPos := sw.pos + int64(len(b))
	for endPos > sw.pos && err == nil {
		var nf int // Bytes written in fragment
		dataStart, dataEnd := sw.sp[0].Offset, sw.sp[0].endOffset()
		if sw.pos < dataStart { // In a hole fragment
			bf := b[:min(int64(len(b)), dataStart-sw.pos)]
			nf, err = zeroWriter{}.Write(bf)
		} else { // In a data fragment
			bf := b[:min(int64(len(b)), dataEnd-sw.pos)]
			nf, err = sw.fw.Write(bf)
		}
		b = b[nf:]
		sw.pos += int64(nf)
		if sw.pos >= dataEnd && len(sw.sp) > 1 {
			sw.sp = sw.sp[1:] // Ensure last fragment always remains
		}
	}

	n = len(b0) - len(b)
	switch {
	case err == ErrWriteTooLong:
		return n, errMissData // Not possible; implies bug in validation logic
	case err != nil:
		return n, err
	case sw.LogicalRemaining() == 0 && sw.PhysicalRemaining() > 0:
		return n, errUnrefData // Not possible; implies bug in validation logic
	case overwrite:
		return n, ErrWriteTooLong
	default:
		return n, nil
	}
}

func (sw *sparseFileWriter) ReadFrom(r io.Reader) (n int64, err error) {
	rs, ok := r.(io.ReadSeeker)
	if ok {
		if _, err := rs.Seek(0, io.SeekCurrent); err != nil {
			ok = false // Not all io.Seeker can really seek
		}
	}
	if !ok {
		return io.Copy(struct{ io.Writer }{sw}, r)
	}

	var readLastByte bool
	pos0 := sw.pos
	for sw.LogicalRemaining() > 0 && !readLastByte && err == nil {
		var nf int64 // Size of fragment
		dataStart, dataEnd := sw.sp[0].Offset, sw.sp[0].endOffset()
		if sw.pos < dataStart { // In a hole fragment
			nf = dataStart - sw.pos
			if sw.PhysicalRemaining() == 0 {
				readLastByte = true
				nf--
			}
			_, err = rs.Seek(nf, io.SeekCurrent)
		} else { // In a data fragment
			nf = dataEnd - sw.pos
			nf, err = io.CopyN(sw.fw, rs, nf)
		}
		sw.pos += nf
		if sw.pos >= dataEnd && len(sw.sp) > 1 {
			sw.sp = sw.sp[1:] // Ensure last fragment always remains
		}
	}

	// If the last fragment is a hole, then seek to 1-byte before EOF, and
	// read a single byte to ensure the file is the right size.
	if readLastByte && err == nil {
		_, err = mustReadFull(rs, []byte{0})
		sw.pos++
	}

	n = sw.pos - pos0
	switch {
	case err == io.EOF:
		return n, io.ErrUnexpectedEOF
	case err == ErrWriteTooLong:
		return n, errMissData // Not possible; implies bug in validation logic
	case err != nil:
		return n, err
	case sw.LogicalRemaining() == 0 && sw.PhysicalRemaining() > 0:
		return n, errUnrefData // Not possible; implies bug in validation logic
	default:
		return n, ensureEOF(rs)
	}
}

func (sw sparseFileWriter) LogicalRemaining() int64 {
	return sw.sp[len(sw.sp)-1].endOffset() - sw.pos
}
func (sw sparseFileWriter) PhysicalRemaining() int64 {
	return sw.fw.PhysicalRemaining()
}

// zeroWriter may only be written with NULs, otherwise it returns errWriteHole.
type zeroWriter struct{}

func (zeroWriter) Write(b []byte) (int, error) {
	for i, c := range b {
		if c != 0 {
			return i, errWriteHole
		}
	}
	return len(b), nil
}

// ensureEOF checks whether r is at EOF, reporting ErrWriteTooLong if not so.
func ensureEOF(r io.Reader) error {
	n, err := tryReadFull(r, []byte{0})
	switch {
	case n > 0:
		return ErrWriteTooLong
	case err == io.EOF:
		return nil
	default:
		return err
	}
}
  07070100000C08000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000003200000000elemental-cli-0.3.1/vendor/github.com/vishvananda 07070100000C09000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink 07070100000C0A000081A4000000000000000000000001645E367C00000007000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/.gitignore  .idea/
 07070100000C0B000081A4000000000000000000000001645E367C0000003B000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/CHANGELOG.md    # Changelog

## 1.0.0 (2018-03-15)

Initial release tagging 07070100000C0C000081A4000000000000000000000001645E367C00002A2C000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/LICENSE 
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   Copyright 2014 Vishvananda Ishaya.
   Copyright 2014 Docker, Inc.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
07070100000C0D000081A4000000000000000000000001645E367C000002F6000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/Makefile    DIRS := \
	. \
	nl

DEPS = \
	github.com/vishvananda/netns \
	golang.org/x/sys/unix

uniq = $(if $1,$(firstword $1) $(call uniq,$(filter-out $(firstword $1),$1)))
testdirs = $(call uniq,$(foreach d,$(1),$(dir $(wildcard $(d)/*_test.go))))
goroot = $(addprefix ../../../,$(1))
unroot = $(subst ../../../,,$(1))
fmt = $(addprefix fmt-,$(1))

all: test

$(call goroot,$(DEPS)):
	go get $(call unroot,$@)

.PHONY: $(call testdirs,$(DIRS))
$(call testdirs,$(DIRS)):
	go test -test.exec sudo -test.parallel 4 -timeout 60s -test.v github.com/vishvananda/netlink/$@

$(call fmt,$(call testdirs,$(DIRS))):
	! gofmt -l $(subst fmt-,,$@)/*.go | grep -q .

.PHONY: fmt
fmt: $(call fmt,$(call testdirs,$(DIRS)))

test: fmt $(call goroot,$(DEPS)) $(call testdirs,$(DIRS))
  07070100000C0E000081A4000000000000000000000001645E367C00000BCC000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/README.md   # netlink - netlink library for go #

![Build Status](https://github.com/vishvananda/netlink/actions/workflows/main.yml/badge.svg) [![GoDoc](https://godoc.org/github.com/vishvananda/netlink?status.svg)](https://godoc.org/github.com/vishvananda/netlink)

The netlink package provides a simple netlink library for go. Netlink
is the interface a user-space program in linux uses to communicate with
the kernel. It can be used to add and remove interfaces, set ip addresses
and routes, and configure ipsec. Netlink communication requires elevated
privileges, so in most cases this code needs to be run as root. Since
low-level netlink messages are inscrutable at best, the library attempts
to provide an api that is loosely modeled on the CLI provided by iproute2.
Actions like `ip link add` will be accomplished via a similarly named
function like AddLink(). This library began its life as a fork of the
netlink functionality in
[docker/libcontainer](https://github.com/docker/libcontainer) but was
heavily rewritten to improve testability, performance, and to add new
functionality like ipsec xfrm handling.

## Local Build and Test ##

You can use go get command:

    go get github.com/vishvananda/netlink

Testing dependencies:

    go get github.com/vishvananda/netns

Testing (requires root):

    sudo -E go test github.com/vishvananda/netlink

## Examples ##

Add a new bridge and add eth1 into it:

```go
package main

import (
    "fmt"
    "github.com/vishvananda/netlink"
)

func main() {
    la := netlink.NewLinkAttrs()
    la.Name = "foo"
    mybridge := &netlink.Bridge{LinkAttrs: la}
    err := netlink.LinkAdd(mybridge)
    if err != nil  {
        fmt.Printf("could not add %s: %v\n", la.Name, err)
    }
    eth1, _ := netlink.LinkByName("eth1")
    netlink.LinkSetMaster(eth1, mybridge)
}

```
Note `NewLinkAttrs` constructor, it sets default values in structure. For now
it sets only `TxQLen` to `-1`, so kernel will set default by itself. If you're
using simple initialization(`LinkAttrs{Name: "foo"}`) `TxQLen` will be set to
`0` unless you specify it like `LinkAttrs{Name: "foo", TxQLen: 1000}`.

Add a new ip address to loopback:

```go
package main

import (
    "github.com/vishvananda/netlink"
)

func main() {
    lo, _ := netlink.LinkByName("lo")
    addr, _ := netlink.ParseAddr("169.254.169.254/32")
    netlink.AddrAdd(lo, addr)
}

```

## Future Work ##

Many pieces of netlink are not yet fully supported in the high-level
interface. Aspects of virtually all of the high-level objects don't exist.
Many of the underlying primitives are there, so its a matter of putting
the right fields into the high-level objects and making sure that they
are serialized and deserialized correctly in the Add and List methods.

There are also a few pieces of low level netlink functionality that still
need to be implemented. Routing rules are not in place and some of the
more advanced link types. Hopefully there is decent structure and testing
in place to make these fairly straightforward to add.

07070100000C0F000081A4000000000000000000000001645E367C0000051C000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/addr.go package netlink

import (
	"fmt"
	"net"
	"strings"
)

// Addr represents an IP address from netlink. Netlink ip addresses
// include a mask, so it stores the address as a net.IPNet.
type Addr struct {
	*net.IPNet
	Label       string
	Flags       int
	Scope       int
	Peer        *net.IPNet
	Broadcast   net.IP
	PreferedLft int
	ValidLft    int
	LinkIndex   int
}

// String returns $ip/$netmask $label
func (a Addr) String() string {
	return strings.TrimSpace(fmt.Sprintf("%s %s", a.IPNet, a.Label))
}

// ParseAddr parses the string representation of an address in the
// form $ip/$netmask $label. The label portion is optional
func ParseAddr(s string) (*Addr, error) {
	label := ""
	parts := strings.Split(s, " ")
	if len(parts) > 1 {
		s = parts[0]
		label = parts[1]
	}
	m, err := ParseIPNet(s)
	if err != nil {
		return nil, err
	}
	return &Addr{IPNet: m, Label: label}, nil
}

// Equal returns true if both Addrs have the same net.IPNet value.
func (a Addr) Equal(x Addr) bool {
	sizea, _ := a.Mask.Size()
	sizeb, _ := x.Mask.Size()
	// ignore label for comparison
	return a.IP.Equal(x.IP) && sizea == sizeb
}

func (a Addr) PeerEqual(x Addr) bool {
	sizea, _ := a.Peer.Mask.Size()
	sizeb, _ := x.Peer.Mask.Size()
	// ignore label for comparison
	return a.Peer.IP.Equal(x.Peer.IP) && sizea == sizeb
}
07070100000C10000081A4000000000000000000000001645E367C00002E1E000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/addr_linux.go   package netlink

import (
	"fmt"
	"net"
	"strings"
	"syscall"

	"github.com/vishvananda/netlink/nl"
	"github.com/vishvananda/netns"
	"golang.org/x/sys/unix"
)

// AddrAdd will add an IP address to a link device.
//
// Equivalent to: `ip addr add $addr dev $link`
//
// If `addr` is an IPv4 address and the broadcast address is not given, it
// will be automatically computed based on the IP mask if /30 or larger.
func AddrAdd(link Link, addr *Addr) error {
	return pkgHandle.AddrAdd(link, addr)
}

// AddrAdd will add an IP address to a link device.
//
// Equivalent to: `ip addr add $addr dev $link`
//
// If `addr` is an IPv4 address and the broadcast address is not given, it
// will be automatically computed based on the IP mask if /30 or larger.
func (h *Handle) AddrAdd(link Link, addr *Addr) error {
	req := h.newNetlinkRequest(unix.RTM_NEWADDR, unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)
	return h.addrHandle(link, addr, req)
}

// AddrReplace will replace (or, if not present, add) an IP address on a link device.
//
// Equivalent to: `ip addr replace $addr dev $link`
//
// If `addr` is an IPv4 address and the broadcast address is not given, it
// will be automatically computed based on the IP mask if /30 or larger.
func AddrReplace(link Link, addr *Addr) error {
	return pkgHandle.AddrReplace(link, addr)
}

// AddrReplace will replace (or, if not present, add) an IP address on a link device.
//
// Equivalent to: `ip addr replace $addr dev $link`
//
// If `addr` is an IPv4 address and the broadcast address is not given, it
// will be automatically computed based on the IP mask if /30 or larger.
func (h *Handle) AddrReplace(link Link, addr *Addr) error {
	req := h.newNetlinkRequest(unix.RTM_NEWADDR, unix.NLM_F_CREATE|unix.NLM_F_REPLACE|unix.NLM_F_ACK)
	return h.addrHandle(link, addr, req)
}

// AddrDel will delete an IP address from a link device.
//
// Equivalent to: `ip addr del $addr dev $link`
//
// If `addr` is an IPv4 address and the broadcast address is not given, it
// will be automatically computed based on the IP mask if /30 or larger.
func AddrDel(link Link, addr *Addr) error {
	return pkgHandle.AddrDel(link, addr)
}

// AddrDel will delete an IP address from a link device.
// Equivalent to: `ip addr del $addr dev $link`
//
// If `addr` is an IPv4 address and the broadcast address is not given, it
// will be automatically computed based on the IP mask if /30 or larger.
func (h *Handle) AddrDel(link Link, addr *Addr) error {
	req := h.newNetlinkRequest(unix.RTM_DELADDR, unix.NLM_F_ACK)
	return h.addrHandle(link, addr, req)
}

func (h *Handle) addrHandle(link Link, addr *Addr, req *nl.NetlinkRequest) error {
	base := link.Attrs()
	if addr.Label != "" && !strings.HasPrefix(addr.Label, base.Name) {
		return fmt.Errorf("label must begin with interface name")
	}
	h.ensureIndex(base)

	family := nl.GetIPFamily(addr.IP)

	msg := nl.NewIfAddrmsg(family)
	msg.Index = uint32(base.Index)
	msg.Scope = uint8(addr.Scope)
	mask := addr.Mask
	if addr.Peer != nil {
		mask = addr.Peer.Mask
	}
	prefixlen, masklen := mask.Size()
	msg.Prefixlen = uint8(prefixlen)
	req.AddData(msg)

	var localAddrData []byte
	if family == FAMILY_V4 {
		localAddrData = addr.IP.To4()
	} else {
		localAddrData = addr.IP.To16()
	}

	localData := nl.NewRtAttr(unix.IFA_LOCAL, localAddrData)
	req.AddData(localData)
	var peerAddrData []byte
	if addr.Peer != nil {
		if family == FAMILY_V4 {
			peerAddrData = addr.Peer.IP.To4()
		} else {
			peerAddrData = addr.Peer.IP.To16()
		}
	} else {
		peerAddrData = localAddrData
	}

	addressData := nl.NewRtAttr(unix.IFA_ADDRESS, peerAddrData)
	req.AddData(addressData)

	if addr.Flags != 0 {
		if addr.Flags <= 0xff {
			msg.IfAddrmsg.Flags = uint8(addr.Flags)
		} else {
			b := make([]byte, 4)
			native.PutUint32(b, uint32(addr.Flags))
			flagsData := nl.NewRtAttr(unix.IFA_FLAGS, b)
			req.AddData(flagsData)
		}
	}

	if family == FAMILY_V4 {
		// Automatically set the broadcast address if it is unset and the
		// subnet is large enough to sensibly have one (/30 or larger).
		// See: RFC 3021
		if addr.Broadcast == nil && prefixlen < 31 {
			calcBroadcast := make(net.IP, masklen/8)
			for i := range localAddrData {
				calcBroadcast[i] = localAddrData[i] | ^mask[i]
			}
			addr.Broadcast = calcBroadcast
		}

		if addr.Broadcast != nil {
			req.AddData(nl.NewRtAttr(unix.IFA_BROADCAST, addr.Broadcast))
		}

		if addr.Label != "" {
			labelData := nl.NewRtAttr(unix.IFA_LABEL, nl.ZeroTerminated(addr.Label))
			req.AddData(labelData)
		}
	}

	// 0 is the default value for these attributes. However, 0 means "expired", while the least-surprising default
	// value should be "forever". To compensate for that, only add the attributes if at least one of the values is
	// non-zero, which means the caller has explicitly set them
	if addr.ValidLft > 0 || addr.PreferedLft > 0 {
		cachedata := nl.IfaCacheInfo{unix.IfaCacheinfo{
			Valid:    uint32(addr.ValidLft),
			Prefered: uint32(addr.PreferedLft),
		}}
		req.AddData(nl.NewRtAttr(unix.IFA_CACHEINFO, cachedata.Serialize()))
	}

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// AddrList gets a list of IP addresses in the system.
// Equivalent to: `ip addr show`.
// The list can be filtered by link and ip family.
func AddrList(link Link, family int) ([]Addr, error) {
	return pkgHandle.AddrList(link, family)
}

// AddrList gets a list of IP addresses in the system.
// Equivalent to: `ip addr show`.
// The list can be filtered by link and ip family.
func (h *Handle) AddrList(link Link, family int) ([]Addr, error) {
	req := h.newNetlinkRequest(unix.RTM_GETADDR, unix.NLM_F_DUMP)
	msg := nl.NewIfAddrmsg(family)
	req.AddData(msg)

	msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWADDR)
	if err != nil {
		return nil, err
	}

	indexFilter := 0
	if link != nil {
		base := link.Attrs()
		h.ensureIndex(base)
		indexFilter = base.Index
	}

	var res []Addr
	for _, m := range msgs {
		addr, msgFamily, err := parseAddr(m)
		if err != nil {
			return res, err
		}

		if link != nil && addr.LinkIndex != indexFilter {
			// Ignore messages from other interfaces
			continue
		}

		if family != FAMILY_ALL && msgFamily != family {
			continue
		}

		res = append(res, addr)
	}

	return res, nil
}

func parseAddr(m []byte) (addr Addr, family int, err error) {
	msg := nl.DeserializeIfAddrmsg(m)

	family = -1
	addr.LinkIndex = -1

	attrs, err1 := nl.ParseRouteAttr(m[msg.Len():])
	if err1 != nil {
		err = err1
		return
	}

	family = int(msg.Family)
	addr.LinkIndex = int(msg.Index)

	var local, dst *net.IPNet
	for _, attr := range attrs {
		switch attr.Attr.Type {
		case unix.IFA_ADDRESS:
			dst = &net.IPNet{
				IP:   attr.Value,
				Mask: net.CIDRMask(int(msg.Prefixlen), 8*len(attr.Value)),
			}
		case unix.IFA_LOCAL:
			// iproute2 manual:
			// If a peer address is specified, the local address
			// cannot have a prefix length. The network prefix is
			// associated with the peer rather than with the local
			// address.
			n := 8 * len(attr.Value)
			local = &net.IPNet{
				IP:   attr.Value,
				Mask: net.CIDRMask(n, n),
			}
		case unix.IFA_BROADCAST:
			addr.Broadcast = attr.Value
		case unix.IFA_LABEL:
			addr.Label = string(attr.Value[:len(attr.Value)-1])
		case unix.IFA_FLAGS:
			addr.Flags = int(native.Uint32(attr.Value[0:4]))
		case unix.IFA_CACHEINFO:
			ci := nl.DeserializeIfaCacheInfo(attr.Value)
			addr.PreferedLft = int(ci.Prefered)
			addr.ValidLft = int(ci.Valid)
		}
	}

	// libnl addr.c comment:
	// IPv6 sends the local address as IFA_ADDRESS with no
	// IFA_LOCAL, IPv4 sends both IFA_LOCAL and IFA_ADDRESS
	// with IFA_ADDRESS being the peer address if they differ
	//
	// But obviously, as there are IPv6 PtP addresses, too,
	// IFA_LOCAL should also be handled for IPv6.
	if local != nil {
		if family == FAMILY_V4 && dst != nil && local.IP.Equal(dst.IP) {
			addr.IPNet = dst
		} else {
			addr.IPNet = local
			addr.Peer = dst
		}
	} else {
		addr.IPNet = dst
	}

	addr.Scope = int(msg.Scope)

	return
}

type AddrUpdate struct {
	LinkAddress net.IPNet
	LinkIndex   int
	Flags       int
	Scope       int
	PreferedLft int
	ValidLft    int
	NewAddr     bool // true=added false=deleted
}

// AddrSubscribe takes a chan down which notifications will be sent
// when addresses change.  Close the 'done' chan to stop subscription.
func AddrSubscribe(ch chan<- AddrUpdate, done <-chan struct{}) error {
	return addrSubscribeAt(netns.None(), netns.None(), ch, done, nil, false, 0, nil)
}

// AddrSubscribeAt works like AddrSubscribe plus it allows the caller
// to choose the network namespace in which to subscribe (ns).
func AddrSubscribeAt(ns netns.NsHandle, ch chan<- AddrUpdate, done <-chan struct{}) error {
	return addrSubscribeAt(ns, netns.None(), ch, done, nil, false, 0, nil)
}

// AddrSubscribeOptions contains a set of options to use with
// AddrSubscribeWithOptions.
type AddrSubscribeOptions struct {
	Namespace         *netns.NsHandle
	ErrorCallback     func(error)
	ListExisting      bool
	ReceiveBufferSize int
	ReceiveTimeout    *unix.Timeval
}

// AddrSubscribeWithOptions work like AddrSubscribe but enable to
// provide additional options to modify the behavior. Currently, the
// namespace can be provided as well as an error callback.
func AddrSubscribeWithOptions(ch chan<- AddrUpdate, done <-chan struct{}, options AddrSubscribeOptions) error {
	if options.Namespace == nil {
		none := netns.None()
		options.Namespace = &none
	}
	return addrSubscribeAt(*options.Namespace, netns.None(), ch, done, options.ErrorCallback, options.ListExisting, options.ReceiveBufferSize, options.ReceiveTimeout)
}

func addrSubscribeAt(newNs, curNs netns.NsHandle, ch chan<- AddrUpdate, done <-chan struct{}, cberr func(error), listExisting bool, rcvbuf int, rcvTimeout *unix.Timeval) error {
	s, err := nl.SubscribeAt(newNs, curNs, unix.NETLINK_ROUTE, unix.RTNLGRP_IPV4_IFADDR, unix.RTNLGRP_IPV6_IFADDR)
	if err != nil {
		return err
	}
	if rcvTimeout != nil {
		if err := s.SetReceiveTimeout(rcvTimeout); err != nil {
			return err
		}
	}

	if done != nil {
		go func() {
			<-done
			s.Close()
		}()
	}
	if rcvbuf != 0 {
		err = pkgHandle.SetSocketReceiveBufferSize(rcvbuf, false)
		if err != nil {
			return err
		}
	}
	if listExisting {
		req := pkgHandle.newNetlinkRequest(unix.RTM_GETADDR,
			unix.NLM_F_DUMP)
		infmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)
		req.AddData(infmsg)
		if err := s.Send(req); err != nil {
			return err
		}
	}
	go func() {
		defer close(ch)
		for {
			msgs, from, err := s.Receive()
			if err != nil {
				if cberr != nil {
					cberr(fmt.Errorf("Receive failed: %v",
						err))
				}
				return
			}
			if from.Pid != nl.PidKernel {
				if cberr != nil {
					cberr(fmt.Errorf("Wrong sender portid %d, expected %d", from.Pid, nl.PidKernel))
				}
				continue
			}
			for _, m := range msgs {
				if m.Header.Type == unix.NLMSG_DONE {
					continue
				}
				if m.Header.Type == unix.NLMSG_ERROR {
					error := int32(native.Uint32(m.Data[0:4]))
					if error == 0 {
						continue
					}
					if cberr != nil {
						cberr(fmt.Errorf("error message: %v",
							syscall.Errno(-error)))
					}
					continue
				}
				msgType := m.Header.Type
				if msgType != unix.RTM_NEWADDR && msgType != unix.RTM_DELADDR {
					if cberr != nil {
						cberr(fmt.Errorf("bad message type: %d", msgType))
					}
					continue
				}

				addr, _, err := parseAddr(m.Data)
				if err != nil {
					if cberr != nil {
						cberr(fmt.Errorf("could not parse address: %v", err))
					}
					continue
				}

				ch <- AddrUpdate{LinkAddress: *addr.IPNet,
					LinkIndex:   addr.LinkIndex,
					NewAddr:     msgType == unix.RTM_NEWADDR,
					Flags:       addr.Flags,
					Scope:       addr.Scope,
					PreferedLft: addr.PreferedLft,
					ValidLft:    addr.ValidLft}
			}
		}
	}()

	return nil
}
  07070100000C11000081A4000000000000000000000001645E367C000006CB000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/bpf_linux.go    package netlink

import (
	"unsafe"

	"golang.org/x/sys/unix"
)

type BpfProgType uint32

const (
	BPF_PROG_TYPE_UNSPEC BpfProgType = iota
	BPF_PROG_TYPE_SOCKET_FILTER
	BPF_PROG_TYPE_KPROBE
	BPF_PROG_TYPE_SCHED_CLS
	BPF_PROG_TYPE_SCHED_ACT
	BPF_PROG_TYPE_TRACEPOINT
	BPF_PROG_TYPE_XDP
	BPF_PROG_TYPE_PERF_EVENT
	BPF_PROG_TYPE_CGROUP_SKB
	BPF_PROG_TYPE_CGROUP_SOCK
	BPF_PROG_TYPE_LWT_IN
	BPF_PROG_TYPE_LWT_OUT
	BPF_PROG_TYPE_LWT_XMIT
	BPF_PROG_TYPE_SOCK_OPS
	BPF_PROG_TYPE_SK_SKB
	BPF_PROG_TYPE_CGROUP_DEVICE
	BPF_PROG_TYPE_SK_MSG
	BPF_PROG_TYPE_RAW_TRACEPOINT
	BPF_PROG_TYPE_CGROUP_SOCK_ADDR
	BPF_PROG_TYPE_LWT_SEG6LOCAL
	BPF_PROG_TYPE_LIRC_MODE2
	BPF_PROG_TYPE_SK_REUSEPORT
	BPF_PROG_TYPE_FLOW_DISSECTOR
	BPF_PROG_TYPE_CGROUP_SYSCTL
	BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE
	BPF_PROG_TYPE_CGROUP_SOCKOPT
	BPF_PROG_TYPE_TRACING
	BPF_PROG_TYPE_STRUCT_OPS
	BPF_PROG_TYPE_EXT
	BPF_PROG_TYPE_LSM
	BPF_PROG_TYPE_SK_LOOKUP
)

type BPFAttr struct {
	ProgType    uint32
	InsnCnt     uint32
	Insns       uintptr
	License     uintptr
	LogLevel    uint32
	LogSize     uint32
	LogBuf      uintptr
	KernVersion uint32
}

// loadSimpleBpf loads a trivial bpf program for testing purposes.
func loadSimpleBpf(progType BpfProgType, ret uint32) (int, error) {
	insns := []uint64{
		0x00000000000000b7 | (uint64(ret) << 32),
		0x0000000000000095,
	}
	license := []byte{'A', 'S', 'L', '2', '\x00'}
	attr := BPFAttr{
		ProgType: uint32(progType),
		InsnCnt:  uint32(len(insns)),
		Insns:    uintptr(unsafe.Pointer(&insns[0])),
		License:  uintptr(unsafe.Pointer(&license[0])),
	}
	fd, _, errno := unix.Syscall(unix.SYS_BPF,
		5, /* bpf cmd */
		uintptr(unsafe.Pointer(&attr)),
		unsafe.Sizeof(attr))
	if errno != 0 {
		return 0, errno
	}
	return int(fd), nil
}
 07070100000C12000081A4000000000000000000000001645E367C00000E16000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/bridge_linux.go package netlink

import (
	"fmt"

	"github.com/vishvananda/netlink/nl"
	"golang.org/x/sys/unix"
)

// BridgeVlanList gets a map of device id to bridge vlan infos.
// Equivalent to: `bridge vlan show`
func BridgeVlanList() (map[int32][]*nl.BridgeVlanInfo, error) {
	return pkgHandle.BridgeVlanList()
}

// BridgeVlanList gets a map of device id to bridge vlan infos.
// Equivalent to: `bridge vlan show`
func (h *Handle) BridgeVlanList() (map[int32][]*nl.BridgeVlanInfo, error) {
	req := h.newNetlinkRequest(unix.RTM_GETLINK, unix.NLM_F_DUMP)
	msg := nl.NewIfInfomsg(unix.AF_BRIDGE)
	req.AddData(msg)
	req.AddData(nl.NewRtAttr(unix.IFLA_EXT_MASK, nl.Uint32Attr(uint32(nl.RTEXT_FILTER_BRVLAN))))

	msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWLINK)
	if err != nil {
		return nil, err
	}
	ret := make(map[int32][]*nl.BridgeVlanInfo)
	for _, m := range msgs {
		msg := nl.DeserializeIfInfomsg(m)

		attrs, err := nl.ParseRouteAttr(m[msg.Len():])
		if err != nil {
			return nil, err
		}
		for _, attr := range attrs {
			switch attr.Attr.Type {
			case unix.IFLA_AF_SPEC:
				//nested attr
				nestAttrs, err := nl.ParseRouteAttr(attr.Value)
				if err != nil {
					return nil, fmt.Errorf("failed to parse nested attr %v", err)
				}
				for _, nestAttr := range nestAttrs {
					switch nestAttr.Attr.Type {
					case nl.IFLA_BRIDGE_VLAN_INFO:
						vlanInfo := nl.DeserializeBridgeVlanInfo(nestAttr.Value)
						ret[msg.Index] = append(ret[msg.Index], vlanInfo)
					}
				}
			}
		}
	}
	return ret, nil
}

// BridgeVlanAdd adds a new vlan filter entry
// Equivalent to: `bridge vlan add dev DEV vid VID [ pvid ] [ untagged ] [ self ] [ master ]`
func BridgeVlanAdd(link Link, vid uint16, pvid, untagged, self, master bool) error {
	return pkgHandle.BridgeVlanAdd(link, vid, pvid, untagged, self, master)
}

// BridgeVlanAdd adds a new vlan filter entry
// Equivalent to: `bridge vlan add dev DEV vid VID [ pvid ] [ untagged ] [ self ] [ master ]`
func (h *Handle) BridgeVlanAdd(link Link, vid uint16, pvid, untagged, self, master bool) error {
	return h.bridgeVlanModify(unix.RTM_SETLINK, link, vid, pvid, untagged, self, master)
}

// BridgeVlanDel adds a new vlan filter entry
// Equivalent to: `bridge vlan del dev DEV vid VID [ pvid ] [ untagged ] [ self ] [ master ]`
func BridgeVlanDel(link Link, vid uint16, pvid, untagged, self, master bool) error {
	return pkgHandle.BridgeVlanDel(link, vid, pvid, untagged, self, master)
}

// BridgeVlanDel adds a new vlan filter entry
// Equivalent to: `bridge vlan del dev DEV vid VID [ pvid ] [ untagged ] [ self ] [ master ]`
func (h *Handle) BridgeVlanDel(link Link, vid uint16, pvid, untagged, self, master bool) error {
	return h.bridgeVlanModify(unix.RTM_DELLINK, link, vid, pvid, untagged, self, master)
}

func (h *Handle) bridgeVlanModify(cmd int, link Link, vid uint16, pvid, untagged, self, master bool) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(cmd, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_BRIDGE)
	msg.Index = int32(base.Index)
	req.AddData(msg)

	br := nl.NewRtAttr(unix.IFLA_AF_SPEC, nil)
	var flags uint16
	if self {
		flags |= nl.BRIDGE_FLAGS_SELF
	}
	if master {
		flags |= nl.BRIDGE_FLAGS_MASTER
	}
	if flags > 0 {
		br.AddRtAttr(nl.IFLA_BRIDGE_FLAGS, nl.Uint16Attr(flags))
	}
	vlanInfo := &nl.BridgeVlanInfo{Vid: vid}
	if pvid {
		vlanInfo.Flags |= nl.BRIDGE_VLAN_INFO_PVID
	}
	if untagged {
		vlanInfo.Flags |= nl.BRIDGE_VLAN_INFO_UNTAGGED
	}
	br.AddRtAttr(nl.IFLA_BRIDGE_VLAN_INFO, vlanInfo.Serialize())
	req.AddData(br)
	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}
  07070100000C13000081A4000000000000000000000001645E367C00001B13000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/class.go    package netlink

import (
	"fmt"
)

// Class interfaces for all classes
type Class interface {
	Attrs() *ClassAttrs
	Type() string
}

// Generic networking statistics for netlink users.
// This file contains "gnet_" prefixed structs and relevant functions.
// See Documentation/networking/getn_stats.txt in Linux source code for more details.

// GnetStatsBasic Ref: struct gnet_stats_basic { ... }
type GnetStatsBasic struct {
	Bytes   uint64 // number of seen bytes
	Packets uint32 // number of seen packets
}

// GnetStatsRateEst Ref: struct gnet_stats_rate_est { ... }
type GnetStatsRateEst struct {
	Bps uint32 // current byte rate
	Pps uint32 // current packet rate
}

// GnetStatsRateEst64 Ref: struct gnet_stats_rate_est64 { ... }
type GnetStatsRateEst64 struct {
	Bps uint64 // current byte rate
	Pps uint64 // current packet rate
}

// GnetStatsQueue Ref: struct gnet_stats_queue { ... }
type GnetStatsQueue struct {
	Qlen       uint32 // queue length
	Backlog    uint32 // backlog size of queue
	Drops      uint32 // number of dropped packets
	Requeues   uint32 // number of requues
	Overlimits uint32 // number of enqueues over the limit
}

// ClassStatistics representation based on generic networking statistics for netlink.
// See Documentation/networking/gen_stats.txt in Linux source code for more details.
type ClassStatistics struct {
	Basic   *GnetStatsBasic
	Queue   *GnetStatsQueue
	RateEst *GnetStatsRateEst
}

// NewClassStatistics Construct a ClassStatistics struct which fields are all initialized by 0.
func NewClassStatistics() *ClassStatistics {
	return &ClassStatistics{
		Basic:   &GnetStatsBasic{},
		Queue:   &GnetStatsQueue{},
		RateEst: &GnetStatsRateEst{},
	}
}

// ClassAttrs represents a netlink class. A filter is associated with a link,
// has a handle and a parent. The root filter of a device should have a
// parent == HANDLE_ROOT.
type ClassAttrs struct {
	LinkIndex  int
	Handle     uint32
	Parent     uint32
	Leaf       uint32
	Statistics *ClassStatistics
}

func (q ClassAttrs) String() string {
	return fmt.Sprintf("{LinkIndex: %d, Handle: %s, Parent: %s, Leaf: %d}", q.LinkIndex, HandleStr(q.Handle), HandleStr(q.Parent), q.Leaf)
}

// HtbClassAttrs stores the attributes of HTB class
type HtbClassAttrs struct {
	// TODO handle all attributes
	Rate    uint64
	Ceil    uint64
	Buffer  uint32
	Cbuffer uint32
	Quantum uint32
	Level   uint32
	Prio    uint32
}

func (q HtbClassAttrs) String() string {
	return fmt.Sprintf("{Rate: %d, Ceil: %d, Buffer: %d, Cbuffer: %d}", q.Rate, q.Ceil, q.Buffer, q.Cbuffer)
}

// HtbClass represents an Htb class
type HtbClass struct {
	ClassAttrs
	Rate    uint64
	Ceil    uint64
	Buffer  uint32
	Cbuffer uint32
	Quantum uint32
	Level   uint32
	Prio    uint32
}

func (q HtbClass) String() string {
	return fmt.Sprintf("{Rate: %d, Ceil: %d, Buffer: %d, Cbuffer: %d}", q.Rate, q.Ceil, q.Buffer, q.Cbuffer)
}

// Attrs returns the class attributes
func (q *HtbClass) Attrs() *ClassAttrs {
	return &q.ClassAttrs
}

// Type return the class type
func (q *HtbClass) Type() string {
	return "htb"
}

// GenericClass classes represent types that are not currently understood
// by this netlink library.
type GenericClass struct {
	ClassAttrs
	ClassType string
}

// Attrs return the class attributes
func (class *GenericClass) Attrs() *ClassAttrs {
	return &class.ClassAttrs
}

// Type return the class type
func (class *GenericClass) Type() string {
	return class.ClassType
}

// ServiceCurve is a nondecreasing function of some time unit, returning the amount of service
// (an allowed or allocated amount of bandwidth) at some specific point in time. The purpose of it
// should be subconsciously obvious: if a class was allowed to transfer not less than the amount
// specified by its service curve, then the service curve is not violated.
type ServiceCurve struct {
	m1 uint32
	d  uint32
	m2 uint32
}

// Attrs return the parameters of the service curve
func (c *ServiceCurve) Attrs() (uint32, uint32, uint32) {
	return c.m1, c.d, c.m2
}

// Burst returns the burst rate (m1) of the curve
func (c *ServiceCurve) Burst() uint32 {
	return c.m1
}

// Delay return the delay (d) of the curve
func (c *ServiceCurve) Delay() uint32 {
	return c.d
}

// Rate returns the rate (m2) of the curve
func (c *ServiceCurve) Rate() uint32 {
	return c.m2
}

// HfscClass is a representation of the HFSC class
type HfscClass struct {
	ClassAttrs
	Rsc ServiceCurve
	Fsc ServiceCurve
	Usc ServiceCurve
}

// SetUsc sets the USC curve. The bandwidth (m1 and m2) is specified in bits and the delay in
// seconds.
func (hfsc *HfscClass) SetUsc(m1 uint32, d uint32, m2 uint32) {
	hfsc.Usc = ServiceCurve{m1: m1, d: d, m2: m2}
}

// SetFsc sets the Fsc curve. The bandwidth (m1 and m2) is specified in bits and the delay in
// seconds.
func (hfsc *HfscClass) SetFsc(m1 uint32, d uint32, m2 uint32) {
	hfsc.Fsc = ServiceCurve{m1: m1, d: d, m2: m2}
}

// SetRsc sets the Rsc curve. The bandwidth (m1 and m2) is specified in bits and the delay in
// seconds.
func (hfsc *HfscClass) SetRsc(m1 uint32, d uint32, m2 uint32) {
	hfsc.Rsc = ServiceCurve{m1: m1, d: d, m2: m2}
}

// SetSC implements the SC from the `tc` CLI. This function behaves the same as if one would set the
// USC through the `tc` command-line tool. This means bandwidth (m1 and m2) is specified in bits and
// the delay in ms.
func (hfsc *HfscClass) SetSC(m1 uint32, d uint32, m2 uint32) {
	hfsc.SetRsc(m1, d, m2)
	hfsc.SetFsc(m1, d, m2)
}

// SetUL implements the UL from the `tc` CLI. This function behaves the same as if one would set the
// USC through the `tc` command-line tool. This means bandwidth (m1 and m2) is specified in bits and
// the delay in ms.
func (hfsc *HfscClass) SetUL(m1 uint32, d uint32, m2 uint32) {
	hfsc.SetUsc(m1, d, m2)
}

// SetLS implements the LS from the `tc` CLI. This function behaves the same as if one would set the
// USC through the `tc` command-line tool. This means bandwidth (m1 and m2) is specified in bits and
// the delay in ms.
func (hfsc *HfscClass) SetLS(m1 uint32, d uint32, m2 uint32) {
	hfsc.SetFsc(m1, d, m2)
}

// NewHfscClass returns a new HFSC struct with the set parameters
func NewHfscClass(attrs ClassAttrs) *HfscClass {
	return &HfscClass{
		ClassAttrs: attrs,
		Rsc:        ServiceCurve{},
		Fsc:        ServiceCurve{},
		Usc:        ServiceCurve{},
	}
}

// String() returns a string that contains the information and attributes of the HFSC class
func (hfsc *HfscClass) String() string {
	return fmt.Sprintf(
		"{%s -- {RSC: {m1=%d d=%d m2=%d}} {FSC: {m1=%d d=%d m2=%d}} {USC: {m1=%d d=%d m2=%d}}}",
		hfsc.Attrs(), hfsc.Rsc.m1*8, hfsc.Rsc.d, hfsc.Rsc.m2*8, hfsc.Fsc.m1*8, hfsc.Fsc.d, hfsc.Fsc.m2*8, hfsc.Usc.m1*8, hfsc.Usc.d, hfsc.Usc.m2*8,
	)
}

// Attrs return the Hfsc parameters
func (hfsc *HfscClass) Attrs() *ClassAttrs {
	return &hfsc.ClassAttrs
}

// Type return the type of the class
func (hfsc *HfscClass) Type() string {
	return "hfsc"
}
 07070100000C14000081A4000000000000000000000001645E367C00002B34000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/class_linux.go  package netlink

import (
	"bytes"
	"encoding/binary"
	"encoding/hex"
	"errors"
	"fmt"
	"syscall"

	"github.com/vishvananda/netlink/nl"
	"golang.org/x/sys/unix"
)

// Internal tc_stats representation in Go struct.
// This is for internal uses only to deserialize the payload of rtattr.
// After the deserialization, this should be converted into the canonical stats
// struct, ClassStatistics, in case of statistics of a class.
// Ref: struct tc_stats { ... }
type tcStats struct {
	Bytes      uint64 // Number of enqueued bytes
	Packets    uint32 // Number of enqueued packets
	Drops      uint32 // Packets dropped because of lack of resources
	Overlimits uint32 // Number of throttle events when this flow goes out of allocated bandwidth
	Bps        uint32 // Current flow byte rate
	Pps        uint32 // Current flow packet rate
	Qlen       uint32
	Backlog    uint32
}

// NewHtbClass NOTE: function is in here because it uses other linux functions
func NewHtbClass(attrs ClassAttrs, cattrs HtbClassAttrs) *HtbClass {
	mtu := 1600
	rate := cattrs.Rate / 8
	ceil := cattrs.Ceil / 8
	buffer := cattrs.Buffer
	cbuffer := cattrs.Cbuffer

	if ceil == 0 {
		ceil = rate
	}

	if buffer == 0 {
		buffer = uint32(float64(rate)/Hz() + float64(mtu))
	}
	buffer = Xmittime(rate, buffer)

	if cbuffer == 0 {
		cbuffer = uint32(float64(ceil)/Hz() + float64(mtu))
	}
	cbuffer = Xmittime(ceil, cbuffer)

	return &HtbClass{
		ClassAttrs: attrs,
		Rate:       rate,
		Ceil:       ceil,
		Buffer:     buffer,
		Cbuffer:    cbuffer,
		Level:      0,
		Prio:       cattrs.Prio,
		Quantum:    cattrs.Quantum,
	}
}

// ClassDel will delete a class from the system.
// Equivalent to: `tc class del $class`
func ClassDel(class Class) error {
	return pkgHandle.ClassDel(class)
}

// ClassDel will delete a class from the system.
// Equivalent to: `tc class del $class`
func (h *Handle) ClassDel(class Class) error {
	return h.classModify(unix.RTM_DELTCLASS, 0, class)
}

// ClassChange will change a class in place
// Equivalent to: `tc class change $class`
// The parent and handle MUST NOT be changed.
func ClassChange(class Class) error {
	return pkgHandle.ClassChange(class)
}

// ClassChange will change a class in place
// Equivalent to: `tc class change $class`
// The parent and handle MUST NOT be changed.
func (h *Handle) ClassChange(class Class) error {
	return h.classModify(unix.RTM_NEWTCLASS, 0, class)
}

// ClassReplace will replace a class to the system.
// quivalent to: `tc class replace $class`
// The handle MAY be changed.
// If a class already exist with this parent/handle pair, the class is changed.
// If a class does not already exist with this parent/handle, a new class is created.
func ClassReplace(class Class) error {
	return pkgHandle.ClassReplace(class)
}

// ClassReplace will replace a class to the system.
// quivalent to: `tc class replace $class`
// The handle MAY be changed.
// If a class already exist with this parent/handle pair, the class is changed.
// If a class does not already exist with this parent/handle, a new class is created.
func (h *Handle) ClassReplace(class Class) error {
	return h.classModify(unix.RTM_NEWTCLASS, unix.NLM_F_CREATE, class)
}

// ClassAdd will add a class to the system.
// Equivalent to: `tc class add $class`
func ClassAdd(class Class) error {
	return pkgHandle.ClassAdd(class)
}

// ClassAdd will add a class to the system.
// Equivalent to: `tc class add $class`
func (h *Handle) ClassAdd(class Class) error {
	return h.classModify(
		unix.RTM_NEWTCLASS,
		unix.NLM_F_CREATE|unix.NLM_F_EXCL,
		class,
	)
}

func (h *Handle) classModify(cmd, flags int, class Class) error {
	req := h.newNetlinkRequest(cmd, flags|unix.NLM_F_ACK)
	base := class.Attrs()
	msg := &nl.TcMsg{
		Family:  nl.FAMILY_ALL,
		Ifindex: int32(base.LinkIndex),
		Handle:  base.Handle,
		Parent:  base.Parent,
	}
	req.AddData(msg)

	if cmd != unix.RTM_DELTCLASS {
		if err := classPayload(req, class); err != nil {
			return err
		}
	}
	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

func classPayload(req *nl.NetlinkRequest, class Class) error {
	req.AddData(nl.NewRtAttr(nl.TCA_KIND, nl.ZeroTerminated(class.Type())))

	options := nl.NewRtAttr(nl.TCA_OPTIONS, nil)
	switch class.Type() {
	case "htb":
		htb := class.(*HtbClass)
		opt := nl.TcHtbCopt{}
		opt.Buffer = htb.Buffer
		opt.Cbuffer = htb.Cbuffer
		opt.Quantum = htb.Quantum
		opt.Level = htb.Level
		opt.Prio = htb.Prio
		// TODO: Handle Debug properly. For now default to 0
		/* Calculate {R,C}Tab and set Rate and Ceil */
		cellLog := -1
		ccellLog := -1
		linklayer := nl.LINKLAYER_ETHERNET
		mtu := 1600
		var rtab [256]uint32
		var ctab [256]uint32
		tcrate := nl.TcRateSpec{Rate: uint32(htb.Rate)}
		if CalcRtable(&tcrate, rtab[:], cellLog, uint32(mtu), linklayer) < 0 {
			return errors.New("HTB: failed to calculate rate table")
		}
		opt.Rate = tcrate
		tcceil := nl.TcRateSpec{Rate: uint32(htb.Ceil)}
		if CalcRtable(&tcceil, ctab[:], ccellLog, uint32(mtu), linklayer) < 0 {
			return errors.New("HTB: failed to calculate ceil rate table")
		}
		opt.Ceil = tcceil
		options.AddRtAttr(nl.TCA_HTB_PARMS, opt.Serialize())
		options.AddRtAttr(nl.TCA_HTB_RTAB, SerializeRtab(rtab))
		options.AddRtAttr(nl.TCA_HTB_CTAB, SerializeRtab(ctab))
		if htb.Rate >= uint64(1<<32) {
			options.AddRtAttr(nl.TCA_HTB_RATE64, nl.Uint64Attr(htb.Rate))
		}
		if htb.Ceil >= uint64(1<<32) {
			options.AddRtAttr(nl.TCA_HTB_CEIL64, nl.Uint64Attr(htb.Ceil))
		}
	case "hfsc":
		hfsc := class.(*HfscClass)
		opt := nl.HfscCopt{}
		rm1, rd, rm2 := hfsc.Rsc.Attrs()
		opt.Rsc.Set(rm1/8, rd, rm2/8)
		fm1, fd, fm2 := hfsc.Fsc.Attrs()
		opt.Fsc.Set(fm1/8, fd, fm2/8)
		um1, ud, um2 := hfsc.Usc.Attrs()
		opt.Usc.Set(um1/8, ud, um2/8)
		options.AddRtAttr(nl.TCA_HFSC_RSC, nl.SerializeHfscCurve(&opt.Rsc))
		options.AddRtAttr(nl.TCA_HFSC_FSC, nl.SerializeHfscCurve(&opt.Fsc))
		options.AddRtAttr(nl.TCA_HFSC_USC, nl.SerializeHfscCurve(&opt.Usc))
	}
	req.AddData(options)
	return nil
}

// ClassList gets a list of classes in the system.
// Equivalent to: `tc class show`.
// Generally returns nothing if link and parent are not specified.
func ClassList(link Link, parent uint32) ([]Class, error) {
	return pkgHandle.ClassList(link, parent)
}

// ClassList gets a list of classes in the system.
// Equivalent to: `tc class show`.
// Generally returns nothing if link and parent are not specified.
func (h *Handle) ClassList(link Link, parent uint32) ([]Class, error) {
	req := h.newNetlinkRequest(unix.RTM_GETTCLASS, unix.NLM_F_DUMP)
	msg := &nl.TcMsg{
		Family: nl.FAMILY_ALL,
		Parent: parent,
	}
	if link != nil {
		base := link.Attrs()
		h.ensureIndex(base)
		msg.Ifindex = int32(base.Index)
	}
	req.AddData(msg)

	msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWTCLASS)
	if err != nil {
		return nil, err
	}

	var res []Class
	for _, m := range msgs {
		msg := nl.DeserializeTcMsg(m)

		attrs, err := nl.ParseRouteAttr(m[msg.Len():])
		if err != nil {
			return nil, err
		}

		base := ClassAttrs{
			LinkIndex:  int(msg.Ifindex),
			Handle:     msg.Handle,
			Parent:     msg.Parent,
			Statistics: nil,
		}

		var class Class
		classType := ""
		for _, attr := range attrs {
			switch attr.Attr.Type {
			case nl.TCA_KIND:
				classType = string(attr.Value[:len(attr.Value)-1])
				switch classType {
				case "htb":
					class = &HtbClass{}
				case "hfsc":
					class = &HfscClass{}
				default:
					class = &GenericClass{ClassType: classType}
				}
			case nl.TCA_OPTIONS:
				switch classType {
				case "htb":
					data, err := nl.ParseRouteAttr(attr.Value)
					if err != nil {
						return nil, err
					}
					_, err = parseHtbClassData(class, data)
					if err != nil {
						return nil, err
					}
				case "hfsc":
					data, err := nl.ParseRouteAttr(attr.Value)
					if err != nil {
						return nil, err
					}
					_, err = parseHfscClassData(class, data)
					if err != nil {
						return nil, err
					}
				}
			// For backward compatibility.
			case nl.TCA_STATS:
				base.Statistics, err = parseTcStats(attr.Value)
				if err != nil {
					return nil, err
				}
			case nl.TCA_STATS2:
				base.Statistics, err = parseTcStats2(attr.Value)
				if err != nil {
					return nil, err
				}
			}
		}
		*class.Attrs() = base
		res = append(res, class)
	}

	return res, nil
}

func parseHtbClassData(class Class, data []syscall.NetlinkRouteAttr) (bool, error) {
	htb := class.(*HtbClass)
	detailed := false
	for _, datum := range data {
		switch datum.Attr.Type {
		case nl.TCA_HTB_PARMS:
			opt := nl.DeserializeTcHtbCopt(datum.Value)
			htb.Rate = uint64(opt.Rate.Rate)
			htb.Ceil = uint64(opt.Ceil.Rate)
			htb.Buffer = opt.Buffer
			htb.Cbuffer = opt.Cbuffer
			htb.Quantum = opt.Quantum
			htb.Level = opt.Level
			htb.Prio = opt.Prio
		case nl.TCA_HTB_RATE64:
			htb.Rate = native.Uint64(datum.Value[0:8])
		case nl.TCA_HTB_CEIL64:
			htb.Ceil = native.Uint64(datum.Value[0:8])
		}
	}
	return detailed, nil
}

func parseHfscClassData(class Class, data []syscall.NetlinkRouteAttr) (bool, error) {
	hfsc := class.(*HfscClass)
	detailed := false
	for _, datum := range data {
		m1, d, m2 := nl.DeserializeHfscCurve(datum.Value).Attrs()
		switch datum.Attr.Type {
		case nl.TCA_HFSC_RSC:
			hfsc.Rsc = ServiceCurve{m1: m1 * 8, d: d, m2: m2 * 8}
		case nl.TCA_HFSC_FSC:
			hfsc.Fsc = ServiceCurve{m1: m1 * 8, d: d, m2: m2 * 8}
		case nl.TCA_HFSC_USC:
			hfsc.Usc = ServiceCurve{m1: m1 * 8, d: d, m2: m2 * 8}
		}
	}
	return detailed, nil
}

func parseTcStats(data []byte) (*ClassStatistics, error) {
	buf := &bytes.Buffer{}
	buf.Write(data)
	tcStats := &tcStats{}
	if err := binary.Read(buf, native, tcStats); err != nil {
		return nil, err
	}

	stats := NewClassStatistics()
	stats.Basic.Bytes = tcStats.Bytes
	stats.Basic.Packets = tcStats.Packets
	stats.Queue.Qlen = tcStats.Qlen
	stats.Queue.Backlog = tcStats.Backlog
	stats.Queue.Drops = tcStats.Drops
	stats.Queue.Overlimits = tcStats.Overlimits
	stats.RateEst.Bps = tcStats.Bps
	stats.RateEst.Pps = tcStats.Pps

	return stats, nil
}

func parseGnetStats(data []byte, gnetStats interface{}) error {
	buf := &bytes.Buffer{}
	buf.Write(data)
	return binary.Read(buf, native, gnetStats)
}

func parseTcStats2(data []byte) (*ClassStatistics, error) {
	rtAttrs, err := nl.ParseRouteAttr(data)
	if err != nil {
		return nil, err
	}
	stats := NewClassStatistics()
	for _, datum := range rtAttrs {
		switch datum.Attr.Type {
		case nl.TCA_STATS_BASIC:
			if err := parseGnetStats(datum.Value, stats.Basic); err != nil {
				return nil, fmt.Errorf("Failed to parse ClassStatistics.Basic with: %v\n%s",
					err, hex.Dump(datum.Value))
			}
		case nl.TCA_STATS_QUEUE:
			if err := parseGnetStats(datum.Value, stats.Queue); err != nil {
				return nil, fmt.Errorf("Failed to parse ClassStatistics.Queue with: %v\n%s",
					err, hex.Dump(datum.Value))
			}
		case nl.TCA_STATS_RATE_EST:
			if err := parseGnetStats(datum.Value, stats.RateEst); err != nil {
				return nil, fmt.Errorf("Failed to parse ClassStatistics.RateEst with: %v\n%s",
					err, hex.Dump(datum.Value))
			}
		}
	}

	return stats, nil
}
07070100000C15000081A4000000000000000000000001645E367C000048DB000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/conntrack_linux.go  package netlink

import (
	"bytes"
	"encoding/binary"
	"errors"
	"fmt"
	"net"
	"time"

	"github.com/vishvananda/netlink/nl"
	"golang.org/x/sys/unix"
)

// ConntrackTableType Conntrack table for the netlink operation
type ConntrackTableType uint8

const (
	// ConntrackTable Conntrack table
	// https://github.com/torvalds/linux/blob/master/include/uapi/linux/netfilter/nfnetlink.h -> #define NFNL_SUBSYS_CTNETLINK		 1
	ConntrackTable = 1
	// ConntrackExpectTable Conntrack expect table
	// https://github.com/torvalds/linux/blob/master/include/uapi/linux/netfilter/nfnetlink.h -> #define NFNL_SUBSYS_CTNETLINK_EXP 2
	ConntrackExpectTable = 2
)

const (
	// backward compatibility with golang 1.6 which does not have io.SeekCurrent
	seekCurrent = 1
)

// InetFamily Family type
type InetFamily uint8

//  -L [table] [options]          List conntrack or expectation table
//  -G [table] parameters         Get conntrack or expectation

//  -I [table] parameters         Create a conntrack or expectation
//  -U [table] parameters         Update a conntrack
//  -E [table] [options]          Show events

//  -C [table]                    Show counter
//  -S                            Show statistics

// ConntrackTableList returns the flow list of a table of a specific family
// conntrack -L [table] [options]          List conntrack or expectation table
func ConntrackTableList(table ConntrackTableType, family InetFamily) ([]*ConntrackFlow, error) {
	return pkgHandle.ConntrackTableList(table, family)
}

// ConntrackTableFlush flushes all the flows of a specified table
// conntrack -F [table]            Flush table
// The flush operation applies to all the family types
func ConntrackTableFlush(table ConntrackTableType) error {
	return pkgHandle.ConntrackTableFlush(table)
}

// ConntrackDeleteFilter deletes entries on the specified table on the base of the filter
// conntrack -D [table] parameters         Delete conntrack or expectation
func ConntrackDeleteFilter(table ConntrackTableType, family InetFamily, filter CustomConntrackFilter) (uint, error) {
	return pkgHandle.ConntrackDeleteFilter(table, family, filter)
}

// ConntrackTableList returns the flow list of a table of a specific family using the netlink handle passed
// conntrack -L [table] [options]          List conntrack or expectation table
func (h *Handle) ConntrackTableList(table ConntrackTableType, family InetFamily) ([]*ConntrackFlow, error) {
	res, err := h.dumpConntrackTable(table, family)
	if err != nil {
		return nil, err
	}

	// Deserialize all the flows
	var result []*ConntrackFlow
	for _, dataRaw := range res {
		result = append(result, parseRawData(dataRaw))
	}

	return result, nil
}

// ConntrackTableFlush flushes all the flows of a specified table using the netlink handle passed
// conntrack -F [table]            Flush table
// The flush operation applies to all the family types
func (h *Handle) ConntrackTableFlush(table ConntrackTableType) error {
	req := h.newConntrackRequest(table, unix.AF_INET, nl.IPCTNL_MSG_CT_DELETE, unix.NLM_F_ACK)
	_, err := req.Execute(unix.NETLINK_NETFILTER, 0)
	return err
}

// ConntrackDeleteFilter deletes entries on the specified table on the base of the filter using the netlink handle passed
// conntrack -D [table] parameters         Delete conntrack or expectation
func (h *Handle) ConntrackDeleteFilter(table ConntrackTableType, family InetFamily, filter CustomConntrackFilter) (uint, error) {
	res, err := h.dumpConntrackTable(table, family)
	if err != nil {
		return 0, err
	}

	var matched uint
	for _, dataRaw := range res {
		flow := parseRawData(dataRaw)
		if match := filter.MatchConntrackFlow(flow); match {
			req2 := h.newConntrackRequest(table, family, nl.IPCTNL_MSG_CT_DELETE, unix.NLM_F_ACK)
			// skip the first 4 byte that are the netfilter header, the newConntrackRequest is adding it already
			req2.AddRawData(dataRaw[4:])
			req2.Execute(unix.NETLINK_NETFILTER, 0)
			matched++
		}
	}

	return matched, nil
}

func (h *Handle) newConntrackRequest(table ConntrackTableType, family InetFamily, operation, flags int) *nl.NetlinkRequest {
	// Create the Netlink request object
	req := h.newNetlinkRequest((int(table)<<8)|operation, flags)
	// Add the netfilter header
	msg := &nl.Nfgenmsg{
		NfgenFamily: uint8(family),
		Version:     nl.NFNETLINK_V0,
		ResId:       0,
	}
	req.AddData(msg)
	return req
}

func (h *Handle) dumpConntrackTable(table ConntrackTableType, family InetFamily) ([][]byte, error) {
	req := h.newConntrackRequest(table, family, nl.IPCTNL_MSG_CT_GET, unix.NLM_F_DUMP)
	return req.Execute(unix.NETLINK_NETFILTER, 0)
}

// The full conntrack flow structure is very complicated and can be found in the file:
// http://git.netfilter.org/libnetfilter_conntrack/tree/include/internal/object.h
// For the time being, the structure below allows to parse and extract the base information of a flow
type ipTuple struct {
	Bytes    uint64
	DstIP    net.IP
	DstPort  uint16
	Packets  uint64
	Protocol uint8
	SrcIP    net.IP
	SrcPort  uint16
}

type ConntrackFlow struct {
	FamilyType uint8
	Forward    ipTuple
	Reverse    ipTuple
	Mark       uint32
	TimeStart  uint64
	TimeStop   uint64
	TimeOut    uint32
}

func (s *ConntrackFlow) String() string {
	// conntrack cmd output:
	// udp      17 src=127.0.0.1 dst=127.0.0.1 sport=4001 dport=1234 packets=5 bytes=532 [UNREPLIED] src=127.0.0.1 dst=127.0.0.1 sport=1234 dport=4001 packets=10 bytes=1078 mark=0
	//             start=2019-07-26 01:26:21.557800506 +0000 UTC stop=1970-01-01 00:00:00 +0000 UTC timeout=30(sec)
	start := time.Unix(0, int64(s.TimeStart))
	stop := time.Unix(0, int64(s.TimeStop))
	timeout := int32(s.TimeOut)
	return fmt.Sprintf("%s\t%d src=%s dst=%s sport=%d dport=%d packets=%d bytes=%d\tsrc=%s dst=%s sport=%d dport=%d packets=%d bytes=%d mark=0x%x start=%v stop=%v timeout=%d(sec)",
		nl.L4ProtoMap[s.Forward.Protocol], s.Forward.Protocol,
		s.Forward.SrcIP.String(), s.Forward.DstIP.String(), s.Forward.SrcPort, s.Forward.DstPort, s.Forward.Packets, s.Forward.Bytes,
		s.Reverse.SrcIP.String(), s.Reverse.DstIP.String(), s.Reverse.SrcPort, s.Reverse.DstPort, s.Reverse.Packets, s.Reverse.Bytes,
		s.Mark, start, stop, timeout)
}

// This method parse the ip tuple structure
// The message structure is the following:
// <len, [CTA_IP_V4_SRC|CTA_IP_V6_SRC], 16 bytes for the IP>
// <len, [CTA_IP_V4_DST|CTA_IP_V6_DST], 16 bytes for the IP>
// <len, NLA_F_NESTED|nl.CTA_TUPLE_PROTO, 1 byte for the protocol, 3 bytes of padding>
// <len, CTA_PROTO_SRC_PORT, 2 bytes for the source port, 2 bytes of padding>
// <len, CTA_PROTO_DST_PORT, 2 bytes for the source port, 2 bytes of padding>
func parseIpTuple(reader *bytes.Reader, tpl *ipTuple) uint8 {
	for i := 0; i < 2; i++ {
		_, t, _, v := parseNfAttrTLV(reader)
		switch t {
		case nl.CTA_IP_V4_SRC, nl.CTA_IP_V6_SRC:
			tpl.SrcIP = v
		case nl.CTA_IP_V4_DST, nl.CTA_IP_V6_DST:
			tpl.DstIP = v
		}
	}
	// Get total length of nested protocol-specific info.
	_, _, protoInfoTotalLen := parseNfAttrTL(reader)
	_, t, l, v := parseNfAttrTLV(reader)
	// Track the number of bytes read.
	protoInfoBytesRead := uint16(nl.SizeofNfattr) + l
	if t == nl.CTA_PROTO_NUM {
		tpl.Protocol = uint8(v[0])
	}
	// We only parse TCP & UDP headers. Skip the others.
	if tpl.Protocol != 6 && tpl.Protocol != 17 {
		// skip the rest
		bytesRemaining := protoInfoTotalLen - protoInfoBytesRead
		reader.Seek(int64(bytesRemaining), seekCurrent)
		return tpl.Protocol
	}
	// Skip 3 bytes of padding
	reader.Seek(3, seekCurrent)
	protoInfoBytesRead += 3
	for i := 0; i < 2; i++ {
		_, t, _ := parseNfAttrTL(reader)
		protoInfoBytesRead += uint16(nl.SizeofNfattr)
		switch t {
		case nl.CTA_PROTO_SRC_PORT:
			parseBERaw16(reader, &tpl.SrcPort)
			protoInfoBytesRead += 2
		case nl.CTA_PROTO_DST_PORT:
			parseBERaw16(reader, &tpl.DstPort)
			protoInfoBytesRead += 2
		}
		// Skip 2 bytes of padding
		reader.Seek(2, seekCurrent)
		protoInfoBytesRead += 2
	}
	// Skip any remaining/unknown parts of the message
	bytesRemaining := protoInfoTotalLen - protoInfoBytesRead
	reader.Seek(int64(bytesRemaining), seekCurrent)

	return tpl.Protocol
}

func parseNfAttrTLV(r *bytes.Reader) (isNested bool, attrType, len uint16, value []byte) {
	isNested, attrType, len = parseNfAttrTL(r)

	value = make([]byte, len)
	binary.Read(r, binary.BigEndian, &value)
	return isNested, attrType, len, value
}

func parseNfAttrTL(r *bytes.Reader) (isNested bool, attrType, len uint16) {
	binary.Read(r, nl.NativeEndian(), &len)
	len -= nl.SizeofNfattr

	binary.Read(r, nl.NativeEndian(), &attrType)
	isNested = (attrType & nl.NLA_F_NESTED) == nl.NLA_F_NESTED
	attrType = attrType & (nl.NLA_F_NESTED - 1)
	return isNested, attrType, len
}

func skipNfAttrValue(r *bytes.Reader, len uint16) {
	len = (len + nl.NLA_ALIGNTO - 1) & ^(nl.NLA_ALIGNTO - 1)
	r.Seek(int64(len), seekCurrent)
}

func parseBERaw16(r *bytes.Reader, v *uint16) {
	binary.Read(r, binary.BigEndian, v)
}

func parseBERaw32(r *bytes.Reader, v *uint32) {
	binary.Read(r, binary.BigEndian, v)
}

func parseBERaw64(r *bytes.Reader, v *uint64) {
	binary.Read(r, binary.BigEndian, v)
}

func parseByteAndPacketCounters(r *bytes.Reader) (bytes, packets uint64) {
	for i := 0; i < 2; i++ {
		switch _, t, _ := parseNfAttrTL(r); t {
		case nl.CTA_COUNTERS_BYTES:
			parseBERaw64(r, &bytes)
		case nl.CTA_COUNTERS_PACKETS:
			parseBERaw64(r, &packets)
		default:
			return
		}
	}
	return
}

// when the flow is alive, only the timestamp_start is returned in structure
func parseTimeStamp(r *bytes.Reader, readSize uint16) (tstart, tstop uint64) {
	var numTimeStamps int
	oneItem := nl.SizeofNfattr + 8 // 4 bytes attr header + 8 bytes timestamp
	if readSize == uint16(oneItem) {
		numTimeStamps = 1
	} else if readSize == 2*uint16(oneItem) {
		numTimeStamps = 2
	} else {
		return
	}
	for i := 0; i < numTimeStamps; i++ {
		switch _, t, _ := parseNfAttrTL(r); t {
		case nl.CTA_TIMESTAMP_START:
			parseBERaw64(r, &tstart)
		case nl.CTA_TIMESTAMP_STOP:
			parseBERaw64(r, &tstop)
		default:
			return
		}
	}
	return

}

func parseTimeOut(r *bytes.Reader) (ttimeout uint32) {
	parseBERaw32(r, &ttimeout)
	return
}

func parseConnectionMark(r *bytes.Reader) (mark uint32) {
	parseBERaw32(r, &mark)
	return
}

func parseRawData(data []byte) *ConntrackFlow {
	s := &ConntrackFlow{}
	// First there is the Nfgenmsg header
	// consume only the family field
	reader := bytes.NewReader(data)
	binary.Read(reader, nl.NativeEndian(), &s.FamilyType)

	// skip rest of the Netfilter header
	reader.Seek(3, seekCurrent)
	// The message structure is the following:
	// <len, NLA_F_NESTED|CTA_TUPLE_ORIG> 4 bytes
	// <len, NLA_F_NESTED|CTA_TUPLE_IP> 4 bytes
	// flow information of the forward flow
	// <len, NLA_F_NESTED|CTA_TUPLE_REPLY> 4 bytes
	// <len, NLA_F_NESTED|CTA_TUPLE_IP> 4 bytes
	// flow information of the reverse flow
	for reader.Len() > 0 {
		if nested, t, l := parseNfAttrTL(reader); nested {
			switch t {
			case nl.CTA_TUPLE_ORIG:
				if nested, t, l = parseNfAttrTL(reader); nested && t == nl.CTA_TUPLE_IP {
					parseIpTuple(reader, &s.Forward)
				}
			case nl.CTA_TUPLE_REPLY:
				if nested, t, l = parseNfAttrTL(reader); nested && t == nl.CTA_TUPLE_IP {
					parseIpTuple(reader, &s.Reverse)
				} else {
					// Header not recognized skip it
					skipNfAttrValue(reader, l)
				}
			case nl.CTA_COUNTERS_ORIG:
				s.Forward.Bytes, s.Forward.Packets = parseByteAndPacketCounters(reader)
			case nl.CTA_COUNTERS_REPLY:
				s.Reverse.Bytes, s.Reverse.Packets = parseByteAndPacketCounters(reader)
			case nl.CTA_TIMESTAMP:
				s.TimeStart, s.TimeStop = parseTimeStamp(reader, l)
			case nl.CTA_PROTOINFO:
				skipNfAttrValue(reader, l)
			default:
				skipNfAttrValue(reader, l)
			}
		} else {
			switch t {
			case nl.CTA_MARK:
				s.Mark = parseConnectionMark(reader)
			case nl.CTA_TIMEOUT:
				s.TimeOut = parseTimeOut(reader)
			case nl.CTA_STATUS, nl.CTA_USE, nl.CTA_ID:
				skipNfAttrValue(reader, l)
			default:
				skipNfAttrValue(reader, l)
			}
		}
	}
	return s
}

// Conntrack parameters and options:
//   -n, --src-nat ip                      source NAT ip
//   -g, --dst-nat ip                      destination NAT ip
//   -j, --any-nat ip                      source or destination NAT ip
//   -m, --mark mark                       Set mark
//   -c, --secmark secmark                 Set selinux secmark
//   -e, --event-mask eventmask            Event mask, eg. NEW,DESTROY
//   -z, --zero                            Zero counters while listing
//   -o, --output type[,...]               Output format, eg. xml
//   -l, --label label[,...]               conntrack labels

// Common parameters and options:
//   -s, --src, --orig-src ip              Source address from original direction
//   -d, --dst, --orig-dst ip              Destination address from original direction
//   -r, --reply-src ip            Source address from reply direction
//   -q, --reply-dst ip            Destination address from reply direction
//   -p, --protonum proto          Layer 4 Protocol, eg. 'tcp'
//   -f, --family proto            Layer 3 Protocol, eg. 'ipv6'
//   -t, --timeout timeout         Set timeout
//   -u, --status status           Set status, eg. ASSURED
//   -w, --zone value              Set conntrack zone
//   --orig-zone value             Set zone for original direction
//   --reply-zone value            Set zone for reply direction
//   -b, --buffer-size             Netlink socket buffer size
//   --mask-src ip                 Source mask address
//   --mask-dst ip                 Destination mask address

// Layer 4 Protocol common parameters and options:
// TCP, UDP, SCTP, UDPLite and DCCP
//    --sport, --orig-port-src port    Source port in original direction
//    --dport, --orig-port-dst port    Destination port in original direction

// Filter types
type ConntrackFilterType uint8

const (
	ConntrackOrigSrcIP   = iota                // -orig-src ip    Source address from original direction
	ConntrackOrigDstIP                         // -orig-dst ip    Destination address from original direction
	ConntrackReplySrcIP                        // --reply-src ip  Reply Source IP
	ConntrackReplyDstIP                        // --reply-dst ip  Reply Destination IP
	ConntrackReplyAnyIP                        // Match source or destination reply IP
	ConntrackOrigSrcPort                       // --orig-port-src port    Source port in original direction
	ConntrackOrigDstPort                       // --orig-port-dst port    Destination port in original direction
	ConntrackNatSrcIP    = ConntrackReplySrcIP // deprecated use instead ConntrackReplySrcIP
	ConntrackNatDstIP    = ConntrackReplyDstIP // deprecated use instead ConntrackReplyDstIP
	ConntrackNatAnyIP    = ConntrackReplyAnyIP // deprecated use instead ConntrackReplyAnyIP
)

type CustomConntrackFilter interface {
	// MatchConntrackFlow applies the filter to the flow and returns true if the flow matches
	// the filter or false otherwise
	MatchConntrackFlow(flow *ConntrackFlow) bool
}

type ConntrackFilter struct {
	ipNetFilter map[ConntrackFilterType]*net.IPNet
	portFilter  map[ConntrackFilterType]uint16
	protoFilter uint8
}

// AddIPNet adds a IP subnet to the conntrack filter
func (f *ConntrackFilter) AddIPNet(tp ConntrackFilterType, ipNet *net.IPNet) error {
	if ipNet == nil {
		return fmt.Errorf("Filter attribute empty")
	}
	if f.ipNetFilter == nil {
		f.ipNetFilter = make(map[ConntrackFilterType]*net.IPNet)
	}
	if _, ok := f.ipNetFilter[tp]; ok {
		return errors.New("Filter attribute already present")
	}
	f.ipNetFilter[tp] = ipNet
	return nil
}

// AddIP adds an IP to the conntrack filter
func (f *ConntrackFilter) AddIP(tp ConntrackFilterType, ip net.IP) error {
	if ip == nil {
		return fmt.Errorf("Filter attribute empty")
	}
	return f.AddIPNet(tp, NewIPNet(ip))
}

// AddPort adds a Port to the conntrack filter if the Layer 4 protocol allows it
func (f *ConntrackFilter) AddPort(tp ConntrackFilterType, port uint16) error {
	switch f.protoFilter {
	// TCP, UDP, DCCP, SCTP, UDPLite
	case 6, 17, 33, 132, 136:
	default:
		return fmt.Errorf("Filter attribute not available without a valid Layer 4 protocol: %d", f.protoFilter)
	}

	if f.portFilter == nil {
		f.portFilter = make(map[ConntrackFilterType]uint16)
	}
	if _, ok := f.portFilter[tp]; ok {
		return errors.New("Filter attribute already present")
	}
	f.portFilter[tp] = port
	return nil
}

// AddProtocol adds the Layer 4 protocol to the conntrack filter
func (f *ConntrackFilter) AddProtocol(proto uint8) error {
	if f.protoFilter != 0 {
		return errors.New("Filter attribute already present")
	}
	f.protoFilter = proto
	return nil
}

// MatchConntrackFlow applies the filter to the flow and returns true if the flow matches the filter
// false otherwise
func (f *ConntrackFilter) MatchConntrackFlow(flow *ConntrackFlow) bool {
	if len(f.ipNetFilter) == 0 && len(f.portFilter) == 0 && f.protoFilter == 0 {
		// empty filter always not match
		return false
	}

	// -p, --protonum proto          Layer 4 Protocol, eg. 'tcp'
	if f.protoFilter != 0 && flow.Forward.Protocol != f.protoFilter {
		// different Layer 4 protocol always not match
		return false
	}

	match := true

	// IP conntrack filter
	if len(f.ipNetFilter) > 0 {
		// -orig-src ip   Source address from original direction
		if elem, found := f.ipNetFilter[ConntrackOrigSrcIP]; found {
			match = match && elem.Contains(flow.Forward.SrcIP)
		}

		// -orig-dst ip   Destination address from original direction
		if elem, found := f.ipNetFilter[ConntrackOrigDstIP]; match && found {
			match = match && elem.Contains(flow.Forward.DstIP)
		}

		// -src-nat ip    Source NAT ip
		if elem, found := f.ipNetFilter[ConntrackReplySrcIP]; match && found {
			match = match && elem.Contains(flow.Reverse.SrcIP)
		}

		// -dst-nat ip    Destination NAT ip
		if elem, found := f.ipNetFilter[ConntrackReplyDstIP]; match && found {
			match = match && elem.Contains(flow.Reverse.DstIP)
		}

		// Match source or destination reply IP
		if elem, found := f.ipNetFilter[ConntrackReplyAnyIP]; match && found {
			match = match && (elem.Contains(flow.Reverse.SrcIP) || elem.Contains(flow.Reverse.DstIP))
		}
	}

	// Layer 4 Port filter
	if len(f.portFilter) > 0 {
		// -orig-port-src port	Source port from original direction
		if elem, found := f.portFilter[ConntrackOrigSrcPort]; match && found {
			match = match && elem == flow.Forward.SrcPort
		}

		// -orig-port-dst port	Destination port from original direction
		if elem, found := f.portFilter[ConntrackOrigDstPort]; match && found {
			match = match && elem == flow.Forward.DstPort
		}
	}

	return match
}

var _ CustomConntrackFilter = (*ConntrackFilter)(nil)
 07070100000C16000081A4000000000000000000000001645E367C00000856000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/conntrack_unspecified.go    // +build !linux

package netlink

// ConntrackTableType Conntrack table for the netlink operation
type ConntrackTableType uint8

// InetFamily Family type
type InetFamily uint8

// ConntrackFlow placeholder
type ConntrackFlow struct{}

// ConntrackFilter placeholder
type ConntrackFilter struct{}

// ConntrackTableList returns the flow list of a table of a specific family
// conntrack -L [table] [options]          List conntrack or expectation table
func ConntrackTableList(table ConntrackTableType, family InetFamily) ([]*ConntrackFlow, error) {
	return nil, ErrNotImplemented
}

// ConntrackTableFlush flushes all the flows of a specified table
// conntrack -F [table]            Flush table
// The flush operation applies to all the family types
func ConntrackTableFlush(table ConntrackTableType) error {
	return ErrNotImplemented
}

// ConntrackDeleteFilter deletes entries on the specified table on the base of the filter
// conntrack -D [table] parameters         Delete conntrack or expectation
func ConntrackDeleteFilter(table ConntrackTableType, family InetFamily, filter *ConntrackFilter) (uint, error) {
	return 0, ErrNotImplemented
}

// ConntrackTableList returns the flow list of a table of a specific family using the netlink handle passed
// conntrack -L [table] [options]          List conntrack or expectation table
func (h *Handle) ConntrackTableList(table ConntrackTableType, family InetFamily) ([]*ConntrackFlow, error) {
	return nil, ErrNotImplemented
}

// ConntrackTableFlush flushes all the flows of a specified table using the netlink handle passed
// conntrack -F [table]            Flush table
// The flush operation applies to all the family types
func (h *Handle) ConntrackTableFlush(table ConntrackTableType) error {
	return ErrNotImplemented
}

// ConntrackDeleteFilter deletes entries on the specified table on the base of the filter using the netlink handle passed
// conntrack -D [table] parameters         Delete conntrack or expectation
func (h *Handle) ConntrackDeleteFilter(table ConntrackTableType, family InetFamily, filter *ConntrackFilter) (uint, error) {
	return 0, ErrNotImplemented
}
  07070100000C17000081A4000000000000000000000001645E367C00005182000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/devlink_linux.go    package netlink

import (
	"fmt"
	"net"
	"strings"
	"syscall"

	"github.com/vishvananda/netlink/nl"
	"golang.org/x/sys/unix"
)

// DevlinkDevEswitchAttr represents device's eswitch attributes
type DevlinkDevEswitchAttr struct {
	Mode       string
	InlineMode string
	EncapMode  string
}

// DevlinkDevAttrs represents device attributes
type DevlinkDevAttrs struct {
	Eswitch DevlinkDevEswitchAttr
}

// DevlinkDevice represents device and its attributes
type DevlinkDevice struct {
	BusName    string
	DeviceName string
	Attrs      DevlinkDevAttrs
}

// DevlinkPortFn represents port function and its attributes
type DevlinkPortFn struct {
	HwAddr  net.HardwareAddr
	State   uint8
	OpState uint8
}

// DevlinkPortFnSetAttrs represents attributes to set
type DevlinkPortFnSetAttrs struct {
	FnAttrs     DevlinkPortFn
	HwAddrValid bool
	StateValid  bool
}

// DevlinkPort represents port and its attributes
type DevlinkPort struct {
	BusName        string
	DeviceName     string
	PortIndex      uint32
	PortType       uint16
	NetdeviceName  string
	NetdevIfIndex  uint32
	RdmaDeviceName string
	PortFlavour    uint16
	Fn             *DevlinkPortFn
}

type DevLinkPortAddAttrs struct {
	Controller      uint32
	SfNumber        uint32
	PortIndex       uint32
	PfNumber        uint16
	SfNumberValid   bool
	PortIndexValid  bool
	ControllerValid bool
}

// DevlinkDeviceInfo represents devlink info
type DevlinkDeviceInfo struct {
	Driver         string
	SerialNumber   string
	BoardID        string
	FwApp          string
	FwAppBoundleID string
	FwAppName      string
	FwBoundleID    string
	FwMgmt         string
	FwMgmtAPI      string
	FwMgmtBuild    string
	FwNetlist      string
	FwNetlistBuild string
	FwPsidAPI      string
	FwUndi         string
}

func parseDevLinkDeviceList(msgs [][]byte) ([]*DevlinkDevice, error) {
	devices := make([]*DevlinkDevice, 0, len(msgs))
	for _, m := range msgs {
		attrs, err := nl.ParseRouteAttr(m[nl.SizeofGenlmsg:])
		if err != nil {
			return nil, err
		}
		dev := &DevlinkDevice{}
		if err = dev.parseAttributes(attrs); err != nil {
			return nil, err
		}
		devices = append(devices, dev)
	}
	return devices, nil
}

func eswitchStringToMode(modeName string) (uint16, error) {
	if modeName == "legacy" {
		return nl.DEVLINK_ESWITCH_MODE_LEGACY, nil
	} else if modeName == "switchdev" {
		return nl.DEVLINK_ESWITCH_MODE_SWITCHDEV, nil
	} else {
		return 0xffff, fmt.Errorf("invalid switchdev mode")
	}
}

func parseEswitchMode(mode uint16) string {
	var eswitchMode = map[uint16]string{
		nl.DEVLINK_ESWITCH_MODE_LEGACY:    "legacy",
		nl.DEVLINK_ESWITCH_MODE_SWITCHDEV: "switchdev",
	}
	if eswitchMode[mode] == "" {
		return "unknown"
	} else {
		return eswitchMode[mode]
	}
}

func parseEswitchInlineMode(inlinemode uint8) string {
	var eswitchInlineMode = map[uint8]string{
		nl.DEVLINK_ESWITCH_INLINE_MODE_NONE:      "none",
		nl.DEVLINK_ESWITCH_INLINE_MODE_LINK:      "link",
		nl.DEVLINK_ESWITCH_INLINE_MODE_NETWORK:   "network",
		nl.DEVLINK_ESWITCH_INLINE_MODE_TRANSPORT: "transport",
	}
	if eswitchInlineMode[inlinemode] == "" {
		return "unknown"
	} else {
		return eswitchInlineMode[inlinemode]
	}
}

func parseEswitchEncapMode(encapmode uint8) string {
	var eswitchEncapMode = map[uint8]string{
		nl.DEVLINK_ESWITCH_ENCAP_MODE_NONE:  "disable",
		nl.DEVLINK_ESWITCH_ENCAP_MODE_BASIC: "enable",
	}
	if eswitchEncapMode[encapmode] == "" {
		return "unknown"
	} else {
		return eswitchEncapMode[encapmode]
	}
}

func (d *DevlinkDevice) parseAttributes(attrs []syscall.NetlinkRouteAttr) error {
	for _, a := range attrs {
		switch a.Attr.Type {
		case nl.DEVLINK_ATTR_BUS_NAME:
			d.BusName = string(a.Value[:len(a.Value)-1])
		case nl.DEVLINK_ATTR_DEV_NAME:
			d.DeviceName = string(a.Value[:len(a.Value)-1])
		case nl.DEVLINK_ATTR_ESWITCH_MODE:
			d.Attrs.Eswitch.Mode = parseEswitchMode(native.Uint16(a.Value))
		case nl.DEVLINK_ATTR_ESWITCH_INLINE_MODE:
			d.Attrs.Eswitch.InlineMode = parseEswitchInlineMode(uint8(a.Value[0]))
		case nl.DEVLINK_ATTR_ESWITCH_ENCAP_MODE:
			d.Attrs.Eswitch.EncapMode = parseEswitchEncapMode(uint8(a.Value[0]))
		}
	}
	return nil
}

func (dev *DevlinkDevice) parseEswitchAttrs(msgs [][]byte) {
	m := msgs[0]
	attrs, err := nl.ParseRouteAttr(m[nl.SizeofGenlmsg:])
	if err != nil {
		return
	}
	dev.parseAttributes(attrs)
}

func (h *Handle) getEswitchAttrs(family *GenlFamily, dev *DevlinkDevice) {
	msg := &nl.Genlmsg{
		Command: nl.DEVLINK_CMD_ESWITCH_GET,
		Version: nl.GENL_DEVLINK_VERSION,
	}
	req := h.newNetlinkRequest(int(family.ID), unix.NLM_F_REQUEST|unix.NLM_F_ACK)
	req.AddData(msg)

	b := make([]byte, len(dev.BusName)+1)
	copy(b, dev.BusName)
	data := nl.NewRtAttr(nl.DEVLINK_ATTR_BUS_NAME, b)
	req.AddData(data)

	b = make([]byte, len(dev.DeviceName)+1)
	copy(b, dev.DeviceName)
	data = nl.NewRtAttr(nl.DEVLINK_ATTR_DEV_NAME, b)
	req.AddData(data)

	msgs, err := req.Execute(unix.NETLINK_GENERIC, 0)
	if err != nil {
		return
	}
	dev.parseEswitchAttrs(msgs)
}

// DevLinkGetDeviceList provides a pointer to devlink devices and nil error,
// otherwise returns an error code.
func (h *Handle) DevLinkGetDeviceList() ([]*DevlinkDevice, error) {
	f, err := h.GenlFamilyGet(nl.GENL_DEVLINK_NAME)
	if err != nil {
		return nil, err
	}
	msg := &nl.Genlmsg{
		Command: nl.DEVLINK_CMD_GET,
		Version: nl.GENL_DEVLINK_VERSION,
	}
	req := h.newNetlinkRequest(int(f.ID),
		unix.NLM_F_REQUEST|unix.NLM_F_ACK|unix.NLM_F_DUMP)
	req.AddData(msg)
	msgs, err := req.Execute(unix.NETLINK_GENERIC, 0)
	if err != nil {
		return nil, err
	}
	devices, err := parseDevLinkDeviceList(msgs)
	if err != nil {
		return nil, err
	}
	for _, d := range devices {
		h.getEswitchAttrs(f, d)
	}
	return devices, nil
}

// DevLinkGetDeviceList provides a pointer to devlink devices and nil error,
// otherwise returns an error code.
func DevLinkGetDeviceList() ([]*DevlinkDevice, error) {
	return pkgHandle.DevLinkGetDeviceList()
}

func parseDevlinkDevice(msgs [][]byte) (*DevlinkDevice, error) {
	m := msgs[0]
	attrs, err := nl.ParseRouteAttr(m[nl.SizeofGenlmsg:])
	if err != nil {
		return nil, err
	}
	dev := &DevlinkDevice{}
	if err = dev.parseAttributes(attrs); err != nil {
		return nil, err
	}
	return dev, nil
}

func (h *Handle) createCmdReq(cmd uint8, bus string, device string) (*GenlFamily, *nl.NetlinkRequest, error) {
	f, err := h.GenlFamilyGet(nl.GENL_DEVLINK_NAME)
	if err != nil {
		return nil, nil, err
	}

	msg := &nl.Genlmsg{
		Command: cmd,
		Version: nl.GENL_DEVLINK_VERSION,
	}
	req := h.newNetlinkRequest(int(f.ID),
		unix.NLM_F_REQUEST|unix.NLM_F_ACK)
	req.AddData(msg)

	b := make([]byte, len(bus)+1)
	copy(b, bus)
	data := nl.NewRtAttr(nl.DEVLINK_ATTR_BUS_NAME, b)
	req.AddData(data)

	b = make([]byte, len(device)+1)
	copy(b, device)
	data = nl.NewRtAttr(nl.DEVLINK_ATTR_DEV_NAME, b)
	req.AddData(data)

	return f, req, nil
}

// DevlinkGetDeviceByName provides a pointer to devlink device and nil error,
// otherwise returns an error code.
func (h *Handle) DevLinkGetDeviceByName(Bus string, Device string) (*DevlinkDevice, error) {
	f, req, err := h.createCmdReq(nl.DEVLINK_CMD_GET, Bus, Device)
	if err != nil {
		return nil, err
	}

	respmsg, err := req.Execute(unix.NETLINK_GENERIC, 0)
	if err != nil {
		return nil, err
	}
	dev, err := parseDevlinkDevice(respmsg)
	if err == nil {
		h.getEswitchAttrs(f, dev)
	}
	return dev, err
}

// DevlinkGetDeviceByName provides a pointer to devlink device and nil error,
// otherwise returns an error code.
func DevLinkGetDeviceByName(Bus string, Device string) (*DevlinkDevice, error) {
	return pkgHandle.DevLinkGetDeviceByName(Bus, Device)
}

// DevLinkSetEswitchMode sets eswitch mode if able to set successfully or
// returns an error code.
// Equivalent to: `devlink dev eswitch set $dev mode switchdev`
// Equivalent to: `devlink dev eswitch set $dev mode legacy`
func (h *Handle) DevLinkSetEswitchMode(Dev *DevlinkDevice, NewMode string) error {
	mode, err := eswitchStringToMode(NewMode)
	if err != nil {
		return err
	}

	_, req, err := h.createCmdReq(nl.DEVLINK_CMD_ESWITCH_SET, Dev.BusName, Dev.DeviceName)
	if err != nil {
		return err
	}

	req.AddData(nl.NewRtAttr(nl.DEVLINK_ATTR_ESWITCH_MODE, nl.Uint16Attr(mode)))

	_, err = req.Execute(unix.NETLINK_GENERIC, 0)
	return err
}

// DevLinkSetEswitchMode sets eswitch mode if able to set successfully or
// returns an error code.
// Equivalent to: `devlink dev eswitch set $dev mode switchdev`
// Equivalent to: `devlink dev eswitch set $dev mode legacy`
func DevLinkSetEswitchMode(Dev *DevlinkDevice, NewMode string) error {
	return pkgHandle.DevLinkSetEswitchMode(Dev, NewMode)
}

func (port *DevlinkPort) parseAttributes(attrs []syscall.NetlinkRouteAttr) error {
	for _, a := range attrs {
		switch a.Attr.Type {
		case nl.DEVLINK_ATTR_BUS_NAME:
			port.BusName = string(a.Value[:len(a.Value)-1])
		case nl.DEVLINK_ATTR_DEV_NAME:
			port.DeviceName = string(a.Value[:len(a.Value)-1])
		case nl.DEVLINK_ATTR_PORT_INDEX:
			port.PortIndex = native.Uint32(a.Value)
		case nl.DEVLINK_ATTR_PORT_TYPE:
			port.PortType = native.Uint16(a.Value)
		case nl.DEVLINK_ATTR_PORT_NETDEV_NAME:
			port.NetdeviceName = string(a.Value[:len(a.Value)-1])
		case nl.DEVLINK_ATTR_PORT_NETDEV_IFINDEX:
			port.NetdevIfIndex = native.Uint32(a.Value)
		case nl.DEVLINK_ATTR_PORT_IBDEV_NAME:
			port.RdmaDeviceName = string(a.Value[:len(a.Value)-1])
		case nl.DEVLINK_ATTR_PORT_FLAVOUR:
			port.PortFlavour = native.Uint16(a.Value)
		case nl.DEVLINK_ATTR_PORT_FUNCTION:
			port.Fn = &DevlinkPortFn{}
			for nested := range nl.ParseAttributes(a.Value) {
				switch nested.Type {
				case nl.DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR:
					port.Fn.HwAddr = nested.Value[:]
				case nl.DEVLINK_PORT_FN_ATTR_STATE:
					port.Fn.State = uint8(nested.Value[0])
				case nl.DEVLINK_PORT_FN_ATTR_OPSTATE:
					port.Fn.OpState = uint8(nested.Value[0])
				}
			}
		}
	}
	return nil
}

func parseDevLinkAllPortList(msgs [][]byte) ([]*DevlinkPort, error) {
	ports := make([]*DevlinkPort, 0, len(msgs))
	for _, m := range msgs {
		attrs, err := nl.ParseRouteAttr(m[nl.SizeofGenlmsg:])
		if err != nil {
			return nil, err
		}
		port := &DevlinkPort{}
		if err = port.parseAttributes(attrs); err != nil {
			return nil, err
		}
		ports = append(ports, port)
	}
	return ports, nil
}

// DevLinkGetPortList provides a pointer to devlink ports and nil error,
// otherwise returns an error code.
func (h *Handle) DevLinkGetAllPortList() ([]*DevlinkPort, error) {
	f, err := h.GenlFamilyGet(nl.GENL_DEVLINK_NAME)
	if err != nil {
		return nil, err
	}
	msg := &nl.Genlmsg{
		Command: nl.DEVLINK_CMD_PORT_GET,
		Version: nl.GENL_DEVLINK_VERSION,
	}
	req := h.newNetlinkRequest(int(f.ID),
		unix.NLM_F_REQUEST|unix.NLM_F_ACK|unix.NLM_F_DUMP)
	req.AddData(msg)
	msgs, err := req.Execute(unix.NETLINK_GENERIC, 0)
	if err != nil {
		return nil, err
	}
	ports, err := parseDevLinkAllPortList(msgs)
	if err != nil {
		return nil, err
	}
	return ports, nil
}

// DevLinkGetPortList provides a pointer to devlink ports and nil error,
// otherwise returns an error code.
func DevLinkGetAllPortList() ([]*DevlinkPort, error) {
	return pkgHandle.DevLinkGetAllPortList()
}

func parseDevlinkPortMsg(msgs [][]byte) (*DevlinkPort, error) {
	m := msgs[0]
	attrs, err := nl.ParseRouteAttr(m[nl.SizeofGenlmsg:])
	if err != nil {
		return nil, err
	}
	port := &DevlinkPort{}
	if err = port.parseAttributes(attrs); err != nil {
		return nil, err
	}
	return port, nil
}

// DevLinkGetPortByIndexprovides a pointer to devlink device and nil error,
// otherwise returns an error code.
func (h *Handle) DevLinkGetPortByIndex(Bus string, Device string, PortIndex uint32) (*DevlinkPort, error) {

	_, req, err := h.createCmdReq(nl.DEVLINK_CMD_PORT_GET, Bus, Device)
	if err != nil {
		return nil, err
	}

	req.AddData(nl.NewRtAttr(nl.DEVLINK_ATTR_PORT_INDEX, nl.Uint32Attr(PortIndex)))

	respmsg, err := req.Execute(unix.NETLINK_GENERIC, 0)
	if err != nil {
		return nil, err
	}
	port, err := parseDevlinkPortMsg(respmsg)
	return port, err
}

// DevLinkGetPortByIndex provides a pointer to devlink portand nil error,
// otherwise returns an error code.
func DevLinkGetPortByIndex(Bus string, Device string, PortIndex uint32) (*DevlinkPort, error) {
	return pkgHandle.DevLinkGetPortByIndex(Bus, Device, PortIndex)
}

// DevLinkPortAdd adds a devlink port and returns a port on success
// otherwise returns nil port and an error code.
func (h *Handle) DevLinkPortAdd(Bus string, Device string, Flavour uint16, Attrs DevLinkPortAddAttrs) (*DevlinkPort, error) {
	_, req, err := h.createCmdReq(nl.DEVLINK_CMD_PORT_NEW, Bus, Device)
	if err != nil {
		return nil, err
	}

	req.AddData(nl.NewRtAttr(nl.DEVLINK_ATTR_PORT_FLAVOUR, nl.Uint16Attr(Flavour)))

	req.AddData(nl.NewRtAttr(nl.DEVLINK_ATTR_PORT_PCI_PF_NUMBER, nl.Uint16Attr(Attrs.PfNumber)))
	if Flavour == nl.DEVLINK_PORT_FLAVOUR_PCI_SF && Attrs.SfNumberValid {
		req.AddData(nl.NewRtAttr(nl.DEVLINK_ATTR_PORT_PCI_SF_NUMBER, nl.Uint32Attr(Attrs.SfNumber)))
	}
	if Attrs.PortIndexValid {
		req.AddData(nl.NewRtAttr(nl.DEVLINK_ATTR_PORT_INDEX, nl.Uint32Attr(Attrs.PortIndex)))
	}
	if Attrs.ControllerValid {
		req.AddData(nl.NewRtAttr(nl.DEVLINK_ATTR_PORT_CONTROLLER_NUMBER, nl.Uint32Attr(Attrs.Controller)))
	}
	respmsg, err := req.Execute(unix.NETLINK_GENERIC, 0)
	if err != nil {
		return nil, err
	}
	port, err := parseDevlinkPortMsg(respmsg)
	return port, err
}

// DevLinkPortAdd adds a devlink port and returns a port on success
// otherwise returns nil port and an error code.
func DevLinkPortAdd(Bus string, Device string, Flavour uint16, Attrs DevLinkPortAddAttrs) (*DevlinkPort, error) {
	return pkgHandle.DevLinkPortAdd(Bus, Device, Flavour, Attrs)
}

// DevLinkPortDel deletes a devlink port and returns success or error code.
func (h *Handle) DevLinkPortDel(Bus string, Device string, PortIndex uint32) error {
	_, req, err := h.createCmdReq(nl.DEVLINK_CMD_PORT_DEL, Bus, Device)
	if err != nil {
		return err
	}

	req.AddData(nl.NewRtAttr(nl.DEVLINK_ATTR_PORT_INDEX, nl.Uint32Attr(PortIndex)))
	_, err = req.Execute(unix.NETLINK_GENERIC, 0)
	return err
}

// DevLinkPortDel deletes a devlink port and returns success or error code.
func DevLinkPortDel(Bus string, Device string, PortIndex uint32) error {
	return pkgHandle.DevLinkPortDel(Bus, Device, PortIndex)
}

// DevlinkPortFnSet sets one or more port function attributes specified by the attribute mask.
// It returns 0 on success or error code.
func (h *Handle) DevlinkPortFnSet(Bus string, Device string, PortIndex uint32, FnAttrs DevlinkPortFnSetAttrs) error {
	_, req, err := h.createCmdReq(nl.DEVLINK_CMD_PORT_SET, Bus, Device)
	if err != nil {
		return err
	}

	req.AddData(nl.NewRtAttr(nl.DEVLINK_ATTR_PORT_INDEX, nl.Uint32Attr(PortIndex)))

	fnAttr := nl.NewRtAttr(nl.DEVLINK_ATTR_PORT_FUNCTION|unix.NLA_F_NESTED, nil)

	if FnAttrs.HwAddrValid {
		fnAttr.AddRtAttr(nl.DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR, []byte(FnAttrs.FnAttrs.HwAddr))
	}

	if FnAttrs.StateValid {
		fnAttr.AddRtAttr(nl.DEVLINK_PORT_FN_ATTR_STATE, nl.Uint8Attr(FnAttrs.FnAttrs.State))
	}
	req.AddData(fnAttr)

	_, err = req.Execute(unix.NETLINK_GENERIC, 0)
	return err
}

// DevlinkPortFnSet sets one or more port function attributes specified by the attribute mask.
// It returns 0 on success or error code.
func DevlinkPortFnSet(Bus string, Device string, PortIndex uint32, FnAttrs DevlinkPortFnSetAttrs) error {
	return pkgHandle.DevlinkPortFnSet(Bus, Device, PortIndex, FnAttrs)
}

// devlinkInfoGetter is function that is responsible for getting devlink info message
// this is introduced for test purpose
type devlinkInfoGetter func(bus, device string) ([]byte, error)

// DevlinkGetDeviceInfoByName returns devlink info for selected device,
// otherwise returns an error code.
// Equivalent to: `devlink dev info $dev`
func (h *Handle) DevlinkGetDeviceInfoByName(Bus string, Device string, getInfoMsg devlinkInfoGetter) (*DevlinkDeviceInfo, error) {
	info, err := h.DevlinkGetDeviceInfoByNameAsMap(Bus, Device, getInfoMsg)
	if err != nil {
		return nil, err
	}

	return parseInfoData(info), nil
}

// DevlinkGetDeviceInfoByName returns devlink info for selected device,
// otherwise returns an error code.
// Equivalent to: `devlink dev info $dev`
func DevlinkGetDeviceInfoByName(Bus string, Device string) (*DevlinkDeviceInfo, error) {
	return pkgHandle.DevlinkGetDeviceInfoByName(Bus, Device, pkgHandle.getDevlinkInfoMsg)
}

// DevlinkGetDeviceInfoByNameAsMap returns devlink info for selected device as a map,
// otherwise returns an error code.
// Equivalent to: `devlink dev info $dev`
func (h *Handle) DevlinkGetDeviceInfoByNameAsMap(Bus string, Device string, getInfoMsg devlinkInfoGetter) (map[string]string, error) {
	response, err := getInfoMsg(Bus, Device)
	if err != nil {
		return nil, err
	}

	info, err := parseInfoMsg(response)
	if err != nil {
		return nil, err
	}

	return info, nil
}

// DevlinkGetDeviceInfoByNameAsMap returns devlink info for selected device as a map,
// otherwise returns an error code.
// Equivalent to: `devlink dev info $dev`
func DevlinkGetDeviceInfoByNameAsMap(Bus string, Device string) (map[string]string, error) {
	return pkgHandle.DevlinkGetDeviceInfoByNameAsMap(Bus, Device, pkgHandle.getDevlinkInfoMsg)
}

// GetDevlinkInfo returns devlink info for target device,
// otherwise returns an error code.
func (d *DevlinkDevice) GetDevlinkInfo() (*DevlinkDeviceInfo, error) {
	return pkgHandle.DevlinkGetDeviceInfoByName(d.BusName, d.DeviceName, pkgHandle.getDevlinkInfoMsg)
}

// GetDevlinkInfoAsMap returns devlink info for target device as a map,
// otherwise returns an error code.
func (d *DevlinkDevice) GetDevlinkInfoAsMap() (map[string]string, error) {
	return pkgHandle.DevlinkGetDeviceInfoByNameAsMap(d.BusName, d.DeviceName, pkgHandle.getDevlinkInfoMsg)
}

func (h *Handle) getDevlinkInfoMsg(bus, device string) ([]byte, error) {
	_, req, err := h.createCmdReq(nl.DEVLINK_CMD_INFO_GET, bus, device)
	if err != nil {
		return nil, err
	}

	response, err := req.Execute(unix.NETLINK_GENERIC, 0)
	if err != nil {
		return nil, err
	}

	if len(response) < 1 {
		return nil, fmt.Errorf("getDevlinkInfoMsg: message too short")
	}

	return response[0], nil
}

func parseInfoMsg(msg []byte) (map[string]string, error) {
	if len(msg) < nl.SizeofGenlmsg {
		return nil, fmt.Errorf("parseInfoMsg: message too short")
	}

	info := make(map[string]string)
	err := collectInfoData(msg[nl.SizeofGenlmsg:], info)

	if err != nil {
		return nil, err
	}

	return info, nil
}

func collectInfoData(msg []byte, data map[string]string) error {
	attrs, err := nl.ParseRouteAttr(msg)
	if err != nil {
		return err
	}

	for _, attr := range attrs {
		switch attr.Attr.Type {
		case nl.DEVLINK_ATTR_INFO_DRIVER_NAME:
			data["driver"] = parseInfoValue(attr.Value)
		case nl.DEVLINK_ATTR_INFO_SERIAL_NUMBER:
			data["serialNumber"] = parseInfoValue(attr.Value)
		case nl.DEVLINK_ATTR_INFO_VERSION_RUNNING, nl.DEVLINK_ATTR_INFO_VERSION_FIXED,
			nl.DEVLINK_ATTR_INFO_VERSION_STORED:
			key, value, err := getNestedInfoData(attr.Value)
			if err != nil {
				return err
			}
			data[key] = value
		}
	}

	if len(data) == 0 {
		return fmt.Errorf("collectInfoData: could not read attributes")
	}

	return nil
}

func getNestedInfoData(msg []byte) (string, string, error) {
	nestedAttrs, err := nl.ParseRouteAttr(msg)

	var key, value string

	if err != nil {
		return "", "", err
	}

	if len(nestedAttrs) != 2 {
		return "", "", fmt.Errorf("getNestedInfoData: too few attributes in nested structure")
	}

	for _, nestedAttr := range nestedAttrs {
		switch nestedAttr.Attr.Type {
		case nl.DEVLINK_ATTR_INFO_VERSION_NAME:
			key = parseInfoValue(nestedAttr.Value)
		case nl.DEVLINK_ATTR_INFO_VERSION_VALUE:
			value = parseInfoValue(nestedAttr.Value)
		}
	}

	if key == "" {
		return "", "", fmt.Errorf("getNestedInfoData: key not found")
	}

	if value == "" {
		return "", "", fmt.Errorf("getNestedInfoData: value not found")
	}

	return key, value, nil
}

func parseInfoData(data map[string]string) *DevlinkDeviceInfo {
	info := new(DevlinkDeviceInfo)
	for key, value := range data {
		switch key {
		case "driver":
			info.Driver = value
		case "serialNumber":
			info.SerialNumber = value
		case "board.id":
			info.BoardID = value
		case "fw.app":
			info.FwApp = value
		case "fw.app.bundle_id":
			info.FwAppBoundleID = value
		case "fw.app.name":
			info.FwAppName = value
		case "fw.bundle_id":
			info.FwBoundleID = value
		case "fw.mgmt":
			info.FwMgmt = value
		case "fw.mgmt.api":
			info.FwMgmtAPI = value
		case "fw.mgmt.build":
			info.FwMgmtBuild = value
		case "fw.netlist":
			info.FwNetlist = value
		case "fw.netlist.build":
			info.FwNetlistBuild = value
		case "fw.psid.api":
			info.FwPsidAPI = value
		case "fw.undi":
			info.FwUndi = value
		}
	}
	return info
}

func parseInfoValue(value []byte) string {
	v := strings.ReplaceAll(string(value), "\x00", "")
	return strings.TrimSpace(v)
}
  07070100000C18000081A4000000000000000000000001645E367C00001E78000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/filter.go   package netlink

import (
	"fmt"
	"net"
)

type Filter interface {
	Attrs() *FilterAttrs
	Type() string
}

// FilterAttrs represents a netlink filter. A filter is associated with a link,
// has a handle and a parent. The root filter of a device should have a
// parent == HANDLE_ROOT.
type FilterAttrs struct {
	LinkIndex int
	Handle    uint32
	Parent    uint32
	Priority  uint16 // lower is higher priority
	Protocol  uint16 // unix.ETH_P_*
}

func (q FilterAttrs) String() string {
	return fmt.Sprintf("{LinkIndex: %d, Handle: %s, Parent: %s, Priority: %d, Protocol: %d}", q.LinkIndex, HandleStr(q.Handle), HandleStr(q.Parent), q.Priority, q.Protocol)
}

type TcAct int32

const (
	TC_ACT_UNSPEC     TcAct = -1
	TC_ACT_OK         TcAct = 0
	TC_ACT_RECLASSIFY TcAct = 1
	TC_ACT_SHOT       TcAct = 2
	TC_ACT_PIPE       TcAct = 3
	TC_ACT_STOLEN     TcAct = 4
	TC_ACT_QUEUED     TcAct = 5
	TC_ACT_REPEAT     TcAct = 6
	TC_ACT_REDIRECT   TcAct = 7
	TC_ACT_JUMP       TcAct = 0x10000000
)

func (a TcAct) String() string {
	switch a {
	case TC_ACT_UNSPEC:
		return "unspec"
	case TC_ACT_OK:
		return "ok"
	case TC_ACT_RECLASSIFY:
		return "reclassify"
	case TC_ACT_SHOT:
		return "shot"
	case TC_ACT_PIPE:
		return "pipe"
	case TC_ACT_STOLEN:
		return "stolen"
	case TC_ACT_QUEUED:
		return "queued"
	case TC_ACT_REPEAT:
		return "repeat"
	case TC_ACT_REDIRECT:
		return "redirect"
	case TC_ACT_JUMP:
		return "jump"
	}
	return fmt.Sprintf("0x%x", int32(a))
}

type TcPolAct int32

const (
	TC_POLICE_UNSPEC     TcPolAct = TcPolAct(TC_ACT_UNSPEC)
	TC_POLICE_OK         TcPolAct = TcPolAct(TC_ACT_OK)
	TC_POLICE_RECLASSIFY TcPolAct = TcPolAct(TC_ACT_RECLASSIFY)
	TC_POLICE_SHOT       TcPolAct = TcPolAct(TC_ACT_SHOT)
	TC_POLICE_PIPE       TcPolAct = TcPolAct(TC_ACT_PIPE)
)

func (a TcPolAct) String() string {
	switch a {
	case TC_POLICE_UNSPEC:
		return "unspec"
	case TC_POLICE_OK:
		return "ok"
	case TC_POLICE_RECLASSIFY:
		return "reclassify"
	case TC_POLICE_SHOT:
		return "shot"
	case TC_POLICE_PIPE:
		return "pipe"
	}
	return fmt.Sprintf("0x%x", int32(a))
}

type ActionAttrs struct {
	Index   int
	Capab   int
	Action  TcAct
	Refcnt  int
	Bindcnt int
}

func (q ActionAttrs) String() string {
	return fmt.Sprintf("{Index: %d, Capab: %x, Action: %s, Refcnt: %d, Bindcnt: %d}", q.Index, q.Capab, q.Action.String(), q.Refcnt, q.Bindcnt)
}

// Action represents an action in any supported filter.
type Action interface {
	Attrs() *ActionAttrs
	Type() string
}

type GenericAction struct {
	ActionAttrs
}

func (action *GenericAction) Type() string {
	return "generic"
}

func (action *GenericAction) Attrs() *ActionAttrs {
	return &action.ActionAttrs
}

type BpfAction struct {
	ActionAttrs
	Fd   int
	Name string
}

func (action *BpfAction) Type() string {
	return "bpf"
}

func (action *BpfAction) Attrs() *ActionAttrs {
	return &action.ActionAttrs
}

type ConnmarkAction struct {
	ActionAttrs
	Zone uint16
}

func (action *ConnmarkAction) Type() string {
	return "connmark"
}

func (action *ConnmarkAction) Attrs() *ActionAttrs {
	return &action.ActionAttrs
}

func NewConnmarkAction() *ConnmarkAction {
	return &ConnmarkAction{
		ActionAttrs: ActionAttrs{
			Action: TC_ACT_PIPE,
		},
	}
}

type CsumUpdateFlags uint32

const (
	TCA_CSUM_UPDATE_FLAG_IPV4HDR CsumUpdateFlags = 1
	TCA_CSUM_UPDATE_FLAG_ICMP    CsumUpdateFlags = 2
	TCA_CSUM_UPDATE_FLAG_IGMP    CsumUpdateFlags = 4
	TCA_CSUM_UPDATE_FLAG_TCP     CsumUpdateFlags = 8
	TCA_CSUM_UPDATE_FLAG_UDP     CsumUpdateFlags = 16
	TCA_CSUM_UPDATE_FLAG_UDPLITE CsumUpdateFlags = 32
	TCA_CSUM_UPDATE_FLAG_SCTP    CsumUpdateFlags = 64
)

type CsumAction struct {
	ActionAttrs
	UpdateFlags CsumUpdateFlags
}

func (action *CsumAction) Type() string {
	return "csum"
}

func (action *CsumAction) Attrs() *ActionAttrs {
	return &action.ActionAttrs
}

func NewCsumAction() *CsumAction {
	return &CsumAction{
		ActionAttrs: ActionAttrs{
			Action: TC_ACT_PIPE,
		},
	}
}

type MirredAct uint8

func (a MirredAct) String() string {
	switch a {
	case TCA_EGRESS_REDIR:
		return "egress redir"
	case TCA_EGRESS_MIRROR:
		return "egress mirror"
	case TCA_INGRESS_REDIR:
		return "ingress redir"
	case TCA_INGRESS_MIRROR:
		return "ingress mirror"
	}
	return "unknown"
}

const (
	TCA_EGRESS_REDIR   MirredAct = 1 /* packet redirect to EGRESS*/
	TCA_EGRESS_MIRROR  MirredAct = 2 /* mirror packet to EGRESS */
	TCA_INGRESS_REDIR  MirredAct = 3 /* packet redirect to INGRESS*/
	TCA_INGRESS_MIRROR MirredAct = 4 /* mirror packet to INGRESS */
)

type MirredAction struct {
	ActionAttrs
	MirredAction MirredAct
	Ifindex      int
}

func (action *MirredAction) Type() string {
	return "mirred"
}

func (action *MirredAction) Attrs() *ActionAttrs {
	return &action.ActionAttrs
}

func NewMirredAction(redirIndex int) *MirredAction {
	return &MirredAction{
		ActionAttrs: ActionAttrs{
			Action: TC_ACT_STOLEN,
		},
		MirredAction: TCA_EGRESS_REDIR,
		Ifindex:      redirIndex,
	}
}

type TunnelKeyAct int8

const (
	TCA_TUNNEL_KEY_SET   TunnelKeyAct = 1 // set tunnel key
	TCA_TUNNEL_KEY_UNSET TunnelKeyAct = 2 // unset tunnel key
)

type TunnelKeyAction struct {
	ActionAttrs
	Action   TunnelKeyAct
	SrcAddr  net.IP
	DstAddr  net.IP
	KeyID    uint32
	DestPort uint16
}

func (action *TunnelKeyAction) Type() string {
	return "tunnel_key"
}

func (action *TunnelKeyAction) Attrs() *ActionAttrs {
	return &action.ActionAttrs
}

func NewTunnelKeyAction() *TunnelKeyAction {
	return &TunnelKeyAction{
		ActionAttrs: ActionAttrs{
			Action: TC_ACT_PIPE,
		},
	}
}

type SkbEditAction struct {
	ActionAttrs
	QueueMapping *uint16
	PType        *uint16
	Priority     *uint32
	Mark         *uint32
}

func (action *SkbEditAction) Type() string {
	return "skbedit"
}

func (action *SkbEditAction) Attrs() *ActionAttrs {
	return &action.ActionAttrs
}

func NewSkbEditAction() *SkbEditAction {
	return &SkbEditAction{
		ActionAttrs: ActionAttrs{
			Action: TC_ACT_PIPE,
		},
	}
}

type PoliceAction struct {
	ActionAttrs
	Rate            uint32 // in byte per second
	Burst           uint32 // in byte
	RCellLog        int
	Mtu             uint32
	Mpu             uint16 // in byte
	PeakRate        uint32 // in byte per second
	PCellLog        int
	AvRate          uint32 // in byte per second
	Overhead        uint16
	LinkLayer       int
	ExceedAction    TcPolAct
	NotExceedAction TcPolAct
}

func (action *PoliceAction) Type() string {
	return "police"
}

func (action *PoliceAction) Attrs() *ActionAttrs {
	return &action.ActionAttrs
}

func NewPoliceAction() *PoliceAction {
	return &PoliceAction{
		RCellLog:        -1,
		PCellLog:        -1,
		LinkLayer:       1, // ETHERNET
		ExceedAction:    TC_POLICE_RECLASSIFY,
		NotExceedAction: TC_POLICE_OK,
	}
}

// MatchAll filters match all packets
type MatchAll struct {
	FilterAttrs
	ClassId uint32
	Actions []Action
}

func (filter *MatchAll) Attrs() *FilterAttrs {
	return &filter.FilterAttrs
}

func (filter *MatchAll) Type() string {
	return "matchall"
}

type FwFilter struct {
	FilterAttrs
	ClassId uint32
	InDev   string
	Mask    uint32
	Police  *PoliceAction
}

func (filter *FwFilter) Attrs() *FilterAttrs {
	return &filter.FilterAttrs
}

func (filter *FwFilter) Type() string {
	return "fw"
}

type BpfFilter struct {
	FilterAttrs
	ClassId      uint32
	Fd           int
	Name         string
	DirectAction bool
	Id           int
	Tag          string
}

func (filter *BpfFilter) Type() string {
	return "bpf"
}

func (filter *BpfFilter) Attrs() *FilterAttrs {
	return &filter.FilterAttrs
}

// GenericFilter filters represent types that are not currently understood
// by this netlink library.
type GenericFilter struct {
	FilterAttrs
	FilterType string
}

func (filter *GenericFilter) Attrs() *FilterAttrs {
	return &filter.FilterAttrs
}

func (filter *GenericFilter) Type() string {
	return filter.FilterType
}
07070100000C19000081A4000000000000000000000001645E367C000070E1000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/filter_linux.go package netlink

import (
	"bytes"
	"encoding/binary"
	"encoding/hex"
	"errors"
	"fmt"
	"net"
	"syscall"

	"github.com/vishvananda/netlink/nl"
	"golang.org/x/sys/unix"
)

// Constants used in TcU32Sel.Flags.
const (
	TC_U32_TERMINAL  = nl.TC_U32_TERMINAL
	TC_U32_OFFSET    = nl.TC_U32_OFFSET
	TC_U32_VAROFFSET = nl.TC_U32_VAROFFSET
	TC_U32_EAT       = nl.TC_U32_EAT
)

// Sel of the U32 filters that contains multiple TcU32Key. This is the type
// alias and the frontend representation of nl.TcU32Sel. It is serialized into
// canonical nl.TcU32Sel with the appropriate endianness.
type TcU32Sel = nl.TcU32Sel

// TcU32Key contained of Sel in the U32 filters. This is the type alias and the
// frontend representation of nl.TcU32Key. It is serialized into chanonical
// nl.TcU32Sel with the appropriate endianness.
type TcU32Key = nl.TcU32Key

// U32 filters on many packet related properties
type U32 struct {
	FilterAttrs
	ClassId    uint32
	Divisor    uint32 // Divisor MUST be power of 2.
	Hash       uint32
	Link       uint32
	RedirIndex int
	Sel        *TcU32Sel
	Actions    []Action
}

func (filter *U32) Attrs() *FilterAttrs {
	return &filter.FilterAttrs
}

func (filter *U32) Type() string {
	return "u32"
}

type Flower struct {
	FilterAttrs
	DestIP        net.IP
	DestIPMask    net.IPMask
	SrcIP         net.IP
	SrcIPMask     net.IPMask
	EthType       uint16
	EncDestIP     net.IP
	EncDestIPMask net.IPMask
	EncSrcIP      net.IP
	EncSrcIPMask  net.IPMask
	EncDestPort   uint16
	EncKeyId      uint32

	Actions []Action
}

func (filter *Flower) Attrs() *FilterAttrs {
	return &filter.FilterAttrs
}

func (filter *Flower) Type() string {
	return "flower"
}

func (filter *Flower) encodeIP(parent *nl.RtAttr, ip net.IP, mask net.IPMask, v4Type, v6Type int, v4MaskType, v6MaskType int) {
	ipType := v4Type
	maskType := v4MaskType

	encodeMask := mask
	if mask == nil {
		encodeMask = net.CIDRMask(32, 32)
	}
	v4IP := ip.To4()
	if v4IP == nil {
		ipType = v6Type
		maskType = v6MaskType
		if mask == nil {
			encodeMask = net.CIDRMask(128, 128)
		}
	} else {
		ip = v4IP
	}

	parent.AddRtAttr(ipType, ip)
	parent.AddRtAttr(maskType, encodeMask)
}

func (filter *Flower) encode(parent *nl.RtAttr) error {
	if filter.EthType != 0 {
		parent.AddRtAttr(nl.TCA_FLOWER_KEY_ETH_TYPE, htons(filter.EthType))
	}
	if filter.SrcIP != nil {
		filter.encodeIP(parent, filter.SrcIP, filter.SrcIPMask,
			nl.TCA_FLOWER_KEY_IPV4_SRC, nl.TCA_FLOWER_KEY_IPV6_SRC,
			nl.TCA_FLOWER_KEY_IPV4_SRC_MASK, nl.TCA_FLOWER_KEY_IPV6_SRC_MASK)
	}
	if filter.DestIP != nil {
		filter.encodeIP(parent, filter.DestIP, filter.DestIPMask,
			nl.TCA_FLOWER_KEY_IPV4_DST, nl.TCA_FLOWER_KEY_IPV6_DST,
			nl.TCA_FLOWER_KEY_IPV4_DST_MASK, nl.TCA_FLOWER_KEY_IPV6_DST_MASK)
	}
	if filter.EncSrcIP != nil {
		filter.encodeIP(parent, filter.EncSrcIP, filter.EncSrcIPMask,
			nl.TCA_FLOWER_KEY_ENC_IPV4_SRC, nl.TCA_FLOWER_KEY_ENC_IPV6_SRC,
			nl.TCA_FLOWER_KEY_ENC_IPV4_SRC_MASK, nl.TCA_FLOWER_KEY_ENC_IPV6_SRC_MASK)
	}
	if filter.EncDestIP != nil {
		filter.encodeIP(parent, filter.EncDestIP, filter.EncSrcIPMask,
			nl.TCA_FLOWER_KEY_ENC_IPV4_DST, nl.TCA_FLOWER_KEY_ENC_IPV6_DST,
			nl.TCA_FLOWER_KEY_ENC_IPV4_DST_MASK, nl.TCA_FLOWER_KEY_ENC_IPV6_DST_MASK)
	}
	if filter.EncDestPort != 0 {
		parent.AddRtAttr(nl.TCA_FLOWER_KEY_ENC_UDP_DST_PORT, htons(filter.EncDestPort))
	}
	if filter.EncKeyId != 0 {
		parent.AddRtAttr(nl.TCA_FLOWER_KEY_ENC_KEY_ID, htonl(filter.EncKeyId))
	}

	actionsAttr := parent.AddRtAttr(nl.TCA_FLOWER_ACT, nil)
	if err := EncodeActions(actionsAttr, filter.Actions); err != nil {
		return err
	}
	return nil
}

func (filter *Flower) decode(data []syscall.NetlinkRouteAttr) error {
	for _, datum := range data {
		switch datum.Attr.Type {
		case nl.TCA_FLOWER_KEY_ETH_TYPE:
			filter.EthType = ntohs(datum.Value)
		case nl.TCA_FLOWER_KEY_IPV4_SRC, nl.TCA_FLOWER_KEY_IPV6_SRC:
			filter.SrcIP = datum.Value
		case nl.TCA_FLOWER_KEY_IPV4_SRC_MASK, nl.TCA_FLOWER_KEY_IPV6_SRC_MASK:
			filter.SrcIPMask = datum.Value
		case nl.TCA_FLOWER_KEY_IPV4_DST, nl.TCA_FLOWER_KEY_IPV6_DST:
			filter.DestIP = datum.Value
		case nl.TCA_FLOWER_KEY_IPV4_DST_MASK, nl.TCA_FLOWER_KEY_IPV6_DST_MASK:
			filter.DestIPMask = datum.Value
		case nl.TCA_FLOWER_KEY_ENC_IPV4_SRC, nl.TCA_FLOWER_KEY_ENC_IPV6_SRC:
			filter.EncSrcIP = datum.Value
		case nl.TCA_FLOWER_KEY_ENC_IPV4_SRC_MASK, nl.TCA_FLOWER_KEY_ENC_IPV6_SRC_MASK:
			filter.EncSrcIPMask = datum.Value
		case nl.TCA_FLOWER_KEY_ENC_IPV4_DST, nl.TCA_FLOWER_KEY_ENC_IPV6_DST:
			filter.EncDestIP = datum.Value
		case nl.TCA_FLOWER_KEY_ENC_IPV4_DST_MASK, nl.TCA_FLOWER_KEY_ENC_IPV6_DST_MASK:
			filter.EncDestIPMask = datum.Value
		case nl.TCA_FLOWER_KEY_ENC_UDP_DST_PORT:
			filter.EncDestPort = ntohs(datum.Value)
		case nl.TCA_FLOWER_KEY_ENC_KEY_ID:
			filter.EncKeyId = ntohl(datum.Value)
		case nl.TCA_FLOWER_ACT:
			tables, err := nl.ParseRouteAttr(datum.Value)
			if err != nil {
				return err
			}
			filter.Actions, err = parseActions(tables)
			if err != nil {
				return err
			}
		}
	}
	return nil
}

// FilterDel will delete a filter from the system.
// Equivalent to: `tc filter del $filter`
func FilterDel(filter Filter) error {
	return pkgHandle.FilterDel(filter)
}

// FilterDel will delete a filter from the system.
// Equivalent to: `tc filter del $filter`
func (h *Handle) FilterDel(filter Filter) error {
	req := h.newNetlinkRequest(unix.RTM_DELTFILTER, unix.NLM_F_ACK)
	base := filter.Attrs()
	msg := &nl.TcMsg{
		Family:  nl.FAMILY_ALL,
		Ifindex: int32(base.LinkIndex),
		Handle:  base.Handle,
		Parent:  base.Parent,
		Info:    MakeHandle(base.Priority, nl.Swap16(base.Protocol)),
	}
	req.AddData(msg)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// FilterAdd will add a filter to the system.
// Equivalent to: `tc filter add $filter`
func FilterAdd(filter Filter) error {
	return pkgHandle.FilterAdd(filter)
}

// FilterAdd will add a filter to the system.
// Equivalent to: `tc filter add $filter`
func (h *Handle) FilterAdd(filter Filter) error {
	return h.filterModify(filter, unix.NLM_F_CREATE|unix.NLM_F_EXCL)
}

// FilterReplace will replace a filter.
// Equivalent to: `tc filter replace $filter`
func FilterReplace(filter Filter) error {
	return pkgHandle.FilterReplace(filter)
}

// FilterReplace will replace a filter.
// Equivalent to: `tc filter replace $filter`
func (h *Handle) FilterReplace(filter Filter) error {
	return h.filterModify(filter, unix.NLM_F_CREATE)
}

func (h *Handle) filterModify(filter Filter, flags int) error {
	req := h.newNetlinkRequest(unix.RTM_NEWTFILTER, flags|unix.NLM_F_ACK)
	base := filter.Attrs()
	msg := &nl.TcMsg{
		Family:  nl.FAMILY_ALL,
		Ifindex: int32(base.LinkIndex),
		Handle:  base.Handle,
		Parent:  base.Parent,
		Info:    MakeHandle(base.Priority, nl.Swap16(base.Protocol)),
	}
	req.AddData(msg)
	req.AddData(nl.NewRtAttr(nl.TCA_KIND, nl.ZeroTerminated(filter.Type())))

	options := nl.NewRtAttr(nl.TCA_OPTIONS, nil)

	switch filter := filter.(type) {
	case *U32:
		sel := filter.Sel
		if sel == nil {
			// match all
			sel = &nl.TcU32Sel{
				Nkeys: 1,
				Flags: nl.TC_U32_TERMINAL,
			}
			sel.Keys = append(sel.Keys, nl.TcU32Key{})
		}

		if native != networkOrder {
			// Copy TcU32Sel.
			cSel := *sel
			keys := make([]nl.TcU32Key, cap(sel.Keys))
			copy(keys, sel.Keys)
			cSel.Keys = keys
			sel = &cSel

			// Handle the endianness of attributes
			sel.Offmask = native.Uint16(htons(sel.Offmask))
			sel.Hmask = native.Uint32(htonl(sel.Hmask))
			for i, key := range sel.Keys {
				sel.Keys[i].Mask = native.Uint32(htonl(key.Mask))
				sel.Keys[i].Val = native.Uint32(htonl(key.Val))
			}
		}
		sel.Nkeys = uint8(len(sel.Keys))
		options.AddRtAttr(nl.TCA_U32_SEL, sel.Serialize())
		if filter.ClassId != 0 {
			options.AddRtAttr(nl.TCA_U32_CLASSID, nl.Uint32Attr(filter.ClassId))
		}
		if filter.Divisor != 0 {
			if (filter.Divisor-1)&filter.Divisor != 0 {
				return fmt.Errorf("illegal divisor %d. Must be a power of 2", filter.Divisor)
			}
			options.AddRtAttr(nl.TCA_U32_DIVISOR, nl.Uint32Attr(filter.Divisor))
		}
		if filter.Hash != 0 {
			options.AddRtAttr(nl.TCA_U32_HASH, nl.Uint32Attr(filter.Hash))
		}
		if filter.Link != 0 {
			options.AddRtAttr(nl.TCA_U32_LINK, nl.Uint32Attr(filter.Link))
		}
		actionsAttr := options.AddRtAttr(nl.TCA_U32_ACT, nil)
		// backwards compatibility
		if filter.RedirIndex != 0 {
			filter.Actions = append([]Action{NewMirredAction(filter.RedirIndex)}, filter.Actions...)
		}
		if err := EncodeActions(actionsAttr, filter.Actions); err != nil {
			return err
		}
	case *FwFilter:
		if filter.Mask != 0 {
			b := make([]byte, 4)
			native.PutUint32(b, filter.Mask)
			options.AddRtAttr(nl.TCA_FW_MASK, b)
		}
		if filter.InDev != "" {
			options.AddRtAttr(nl.TCA_FW_INDEV, nl.ZeroTerminated(filter.InDev))
		}
		if filter.Police != nil {
			police := options.AddRtAttr(nl.TCA_FW_POLICE, nil)
			if err := encodePolice(police, filter.Police); err != nil {
				return err
			}
		}
		if filter.ClassId != 0 {
			b := make([]byte, 4)
			native.PutUint32(b, filter.ClassId)
			options.AddRtAttr(nl.TCA_FW_CLASSID, b)
		}
	case *BpfFilter:
		var bpfFlags uint32
		if filter.ClassId != 0 {
			options.AddRtAttr(nl.TCA_BPF_CLASSID, nl.Uint32Attr(filter.ClassId))
		}
		if filter.Fd >= 0 {
			options.AddRtAttr(nl.TCA_BPF_FD, nl.Uint32Attr((uint32(filter.Fd))))
		}
		if filter.Name != "" {
			options.AddRtAttr(nl.TCA_BPF_NAME, nl.ZeroTerminated(filter.Name))
		}
		if filter.DirectAction {
			bpfFlags |= nl.TCA_BPF_FLAG_ACT_DIRECT
		}
		options.AddRtAttr(nl.TCA_BPF_FLAGS, nl.Uint32Attr(bpfFlags))
	case *MatchAll:
		actionsAttr := options.AddRtAttr(nl.TCA_MATCHALL_ACT, nil)
		if err := EncodeActions(actionsAttr, filter.Actions); err != nil {
			return err
		}
		if filter.ClassId != 0 {
			options.AddRtAttr(nl.TCA_MATCHALL_CLASSID, nl.Uint32Attr(filter.ClassId))
		}
	case *Flower:
		if err := filter.encode(options); err != nil {
			return err
		}
	}

	req.AddData(options)
	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// FilterList gets a list of filters in the system.
// Equivalent to: `tc filter show`.
// Generally returns nothing if link and parent are not specified.
func FilterList(link Link, parent uint32) ([]Filter, error) {
	return pkgHandle.FilterList(link, parent)
}

// FilterList gets a list of filters in the system.
// Equivalent to: `tc filter show`.
// Generally returns nothing if link and parent are not specified.
func (h *Handle) FilterList(link Link, parent uint32) ([]Filter, error) {
	req := h.newNetlinkRequest(unix.RTM_GETTFILTER, unix.NLM_F_DUMP)
	msg := &nl.TcMsg{
		Family: nl.FAMILY_ALL,
		Parent: parent,
	}
	if link != nil {
		base := link.Attrs()
		h.ensureIndex(base)
		msg.Ifindex = int32(base.Index)
	}
	req.AddData(msg)

	msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWTFILTER)
	if err != nil {
		return nil, err
	}

	var res []Filter
	for _, m := range msgs {
		msg := nl.DeserializeTcMsg(m)

		attrs, err := nl.ParseRouteAttr(m[msg.Len():])
		if err != nil {
			return nil, err
		}

		base := FilterAttrs{
			LinkIndex: int(msg.Ifindex),
			Handle:    msg.Handle,
			Parent:    msg.Parent,
		}
		base.Priority, base.Protocol = MajorMinor(msg.Info)
		base.Protocol = nl.Swap16(base.Protocol)

		var filter Filter
		filterType := ""
		detailed := false
		for _, attr := range attrs {
			switch attr.Attr.Type {
			case nl.TCA_KIND:
				filterType = string(attr.Value[:len(attr.Value)-1])
				switch filterType {
				case "u32":
					filter = &U32{}
				case "fw":
					filter = &FwFilter{}
				case "bpf":
					filter = &BpfFilter{}
				case "matchall":
					filter = &MatchAll{}
				case "flower":
					filter = &Flower{}
				default:
					filter = &GenericFilter{FilterType: filterType}
				}
			case nl.TCA_OPTIONS:
				data, err := nl.ParseRouteAttr(attr.Value)
				if err != nil {
					return nil, err
				}
				switch filterType {
				case "u32":
					detailed, err = parseU32Data(filter, data)
					if err != nil {
						return nil, err
					}
				case "fw":
					detailed, err = parseFwData(filter, data)
					if err != nil {
						return nil, err
					}
				case "bpf":
					detailed, err = parseBpfData(filter, data)
					if err != nil {
						return nil, err
					}
				case "matchall":
					detailed, err = parseMatchAllData(filter, data)
					if err != nil {
						return nil, err
					}
				case "flower":
					detailed, err = parseFlowerData(filter, data)
					if err != nil {
						return nil, err
					}
				default:
					detailed = true
				}
			}
		}
		// only return the detailed version of the filter
		if detailed {
			*filter.Attrs() = base
			res = append(res, filter)
		}
	}

	return res, nil
}

func toTcGen(attrs *ActionAttrs, tcgen *nl.TcGen) {
	tcgen.Index = uint32(attrs.Index)
	tcgen.Capab = uint32(attrs.Capab)
	tcgen.Action = int32(attrs.Action)
	tcgen.Refcnt = int32(attrs.Refcnt)
	tcgen.Bindcnt = int32(attrs.Bindcnt)
}

func toAttrs(tcgen *nl.TcGen, attrs *ActionAttrs) {
	attrs.Index = int(tcgen.Index)
	attrs.Capab = int(tcgen.Capab)
	attrs.Action = TcAct(tcgen.Action)
	attrs.Refcnt = int(tcgen.Refcnt)
	attrs.Bindcnt = int(tcgen.Bindcnt)
}

func encodePolice(attr *nl.RtAttr, action *PoliceAction) error {
	var rtab [256]uint32
	var ptab [256]uint32
	police := nl.TcPolice{}
	police.Index = uint32(action.Attrs().Index)
	police.Bindcnt = int32(action.Attrs().Bindcnt)
	police.Capab = uint32(action.Attrs().Capab)
	police.Refcnt = int32(action.Attrs().Refcnt)
	police.Rate.Rate = action.Rate
	police.PeakRate.Rate = action.PeakRate
	police.Action = int32(action.ExceedAction)

	if police.Rate.Rate != 0 {
		police.Rate.Mpu = action.Mpu
		police.Rate.Overhead = action.Overhead
		if CalcRtable(&police.Rate, rtab[:], action.RCellLog, action.Mtu, action.LinkLayer) < 0 {
			return errors.New("TBF: failed to calculate rate table")
		}
		police.Burst = Xmittime(uint64(police.Rate.Rate), action.Burst)
	}

	police.Mtu = action.Mtu
	if police.PeakRate.Rate != 0 {
		police.PeakRate.Mpu = action.Mpu
		police.PeakRate.Overhead = action.Overhead
		if CalcRtable(&police.PeakRate, ptab[:], action.PCellLog, action.Mtu, action.LinkLayer) < 0 {
			return errors.New("POLICE: failed to calculate peak rate table")
		}
	}

	attr.AddRtAttr(nl.TCA_POLICE_TBF, police.Serialize())
	if police.Rate.Rate != 0 {
		attr.AddRtAttr(nl.TCA_POLICE_RATE, SerializeRtab(rtab))
	}
	if police.PeakRate.Rate != 0 {
		attr.AddRtAttr(nl.TCA_POLICE_PEAKRATE, SerializeRtab(ptab))
	}
	if action.AvRate != 0 {
		attr.AddRtAttr(nl.TCA_POLICE_AVRATE, nl.Uint32Attr(action.AvRate))
	}
	if action.NotExceedAction != 0 {
		attr.AddRtAttr(nl.TCA_POLICE_RESULT, nl.Uint32Attr(uint32(action.NotExceedAction)))
	}

	return nil
}

func EncodeActions(attr *nl.RtAttr, actions []Action) error {
	tabIndex := int(nl.TCA_ACT_TAB)

	for _, action := range actions {
		switch action := action.(type) {
		default:
			return fmt.Errorf("unknown action type %s", action.Type())
		case *PoliceAction:
			table := attr.AddRtAttr(tabIndex, nil)
			tabIndex++
			table.AddRtAttr(nl.TCA_ACT_KIND, nl.ZeroTerminated("police"))
			aopts := table.AddRtAttr(nl.TCA_ACT_OPTIONS, nil)
			if err := encodePolice(aopts, action); err != nil {
				return err
			}
		case *MirredAction:
			table := attr.AddRtAttr(tabIndex, nil)
			tabIndex++
			table.AddRtAttr(nl.TCA_ACT_KIND, nl.ZeroTerminated("mirred"))
			aopts := table.AddRtAttr(nl.TCA_ACT_OPTIONS, nil)
			mirred := nl.TcMirred{
				Eaction: int32(action.MirredAction),
				Ifindex: uint32(action.Ifindex),
			}
			toTcGen(action.Attrs(), &mirred.TcGen)
			aopts.AddRtAttr(nl.TCA_MIRRED_PARMS, mirred.Serialize())
		case *TunnelKeyAction:
			table := attr.AddRtAttr(tabIndex, nil)
			tabIndex++
			table.AddRtAttr(nl.TCA_ACT_KIND, nl.ZeroTerminated("tunnel_key"))
			aopts := table.AddRtAttr(nl.TCA_ACT_OPTIONS, nil)
			tun := nl.TcTunnelKey{
				Action: int32(action.Action),
			}
			toTcGen(action.Attrs(), &tun.TcGen)
			aopts.AddRtAttr(nl.TCA_TUNNEL_KEY_PARMS, tun.Serialize())
			if action.Action == TCA_TUNNEL_KEY_SET {
				aopts.AddRtAttr(nl.TCA_TUNNEL_KEY_ENC_KEY_ID, htonl(action.KeyID))
				if v4 := action.SrcAddr.To4(); v4 != nil {
					aopts.AddRtAttr(nl.TCA_TUNNEL_KEY_ENC_IPV4_SRC, v4[:])
				} else if v6 := action.SrcAddr.To16(); v6 != nil {
					aopts.AddRtAttr(nl.TCA_TUNNEL_KEY_ENC_IPV6_SRC, v6[:])
				} else {
					return fmt.Errorf("invalid src addr %s for tunnel_key action", action.SrcAddr)
				}
				if v4 := action.DstAddr.To4(); v4 != nil {
					aopts.AddRtAttr(nl.TCA_TUNNEL_KEY_ENC_IPV4_DST, v4[:])
				} else if v6 := action.DstAddr.To16(); v6 != nil {
					aopts.AddRtAttr(nl.TCA_TUNNEL_KEY_ENC_IPV6_DST, v6[:])
				} else {
					return fmt.Errorf("invalid dst addr %s for tunnel_key action", action.DstAddr)
				}
				if action.DestPort != 0 {
					aopts.AddRtAttr(nl.TCA_TUNNEL_KEY_ENC_DST_PORT, htons(action.DestPort))
				}
			}
		case *SkbEditAction:
			table := attr.AddRtAttr(tabIndex, nil)
			tabIndex++
			table.AddRtAttr(nl.TCA_ACT_KIND, nl.ZeroTerminated("skbedit"))
			aopts := table.AddRtAttr(nl.TCA_ACT_OPTIONS, nil)
			skbedit := nl.TcSkbEdit{}
			toTcGen(action.Attrs(), &skbedit.TcGen)
			aopts.AddRtAttr(nl.TCA_SKBEDIT_PARMS, skbedit.Serialize())
			if action.QueueMapping != nil {
				aopts.AddRtAttr(nl.TCA_SKBEDIT_QUEUE_MAPPING, nl.Uint16Attr(*action.QueueMapping))
			}
			if action.Priority != nil {
				aopts.AddRtAttr(nl.TCA_SKBEDIT_PRIORITY, nl.Uint32Attr(*action.Priority))
			}
			if action.PType != nil {
				aopts.AddRtAttr(nl.TCA_SKBEDIT_PTYPE, nl.Uint16Attr(*action.PType))
			}
			if action.Mark != nil {
				aopts.AddRtAttr(nl.TCA_SKBEDIT_MARK, nl.Uint32Attr(*action.Mark))
			}
		case *ConnmarkAction:
			table := attr.AddRtAttr(tabIndex, nil)
			tabIndex++
			table.AddRtAttr(nl.TCA_ACT_KIND, nl.ZeroTerminated("connmark"))
			aopts := table.AddRtAttr(nl.TCA_ACT_OPTIONS, nil)
			connmark := nl.TcConnmark{
				Zone: action.Zone,
			}
			toTcGen(action.Attrs(), &connmark.TcGen)
			aopts.AddRtAttr(nl.TCA_CONNMARK_PARMS, connmark.Serialize())
		case *CsumAction:
			table := attr.AddRtAttr(tabIndex, nil)
			tabIndex++
			table.AddRtAttr(nl.TCA_ACT_KIND, nl.ZeroTerminated("csum"))
			aopts := table.AddRtAttr(nl.TCA_ACT_OPTIONS, nil)
			csum := nl.TcCsum{
				UpdateFlags: uint32(action.UpdateFlags),
			}
			toTcGen(action.Attrs(), &csum.TcGen)
			aopts.AddRtAttr(nl.TCA_CSUM_PARMS, csum.Serialize())
		case *BpfAction:
			table := attr.AddRtAttr(tabIndex, nil)
			tabIndex++
			table.AddRtAttr(nl.TCA_ACT_KIND, nl.ZeroTerminated("bpf"))
			aopts := table.AddRtAttr(nl.TCA_ACT_OPTIONS, nil)
			gen := nl.TcGen{}
			toTcGen(action.Attrs(), &gen)
			aopts.AddRtAttr(nl.TCA_ACT_BPF_PARMS, gen.Serialize())
			aopts.AddRtAttr(nl.TCA_ACT_BPF_FD, nl.Uint32Attr(uint32(action.Fd)))
			aopts.AddRtAttr(nl.TCA_ACT_BPF_NAME, nl.ZeroTerminated(action.Name))
		case *GenericAction:
			table := attr.AddRtAttr(tabIndex, nil)
			tabIndex++
			table.AddRtAttr(nl.TCA_ACT_KIND, nl.ZeroTerminated("gact"))
			aopts := table.AddRtAttr(nl.TCA_ACT_OPTIONS, nil)
			gen := nl.TcGen{}
			toTcGen(action.Attrs(), &gen)
			aopts.AddRtAttr(nl.TCA_GACT_PARMS, gen.Serialize())
		}
	}
	return nil
}

func parsePolice(data syscall.NetlinkRouteAttr, police *PoliceAction) {
	switch data.Attr.Type {
	case nl.TCA_POLICE_RESULT:
		police.NotExceedAction = TcPolAct(native.Uint32(data.Value[0:4]))
	case nl.TCA_POLICE_AVRATE:
		police.AvRate = native.Uint32(data.Value[0:4])
	case nl.TCA_POLICE_TBF:
		p := *nl.DeserializeTcPolice(data.Value)
		police.ActionAttrs = ActionAttrs{}
		police.Attrs().Index = int(p.Index)
		police.Attrs().Bindcnt = int(p.Bindcnt)
		police.Attrs().Capab = int(p.Capab)
		police.Attrs().Refcnt = int(p.Refcnt)
		police.ExceedAction = TcPolAct(p.Action)
		police.Rate = p.Rate.Rate
		police.PeakRate = p.PeakRate.Rate
		police.Burst = Xmitsize(uint64(p.Rate.Rate), p.Burst)
		police.Mtu = p.Mtu
		police.LinkLayer = int(p.Rate.Linklayer) & nl.TC_LINKLAYER_MASK
		police.Overhead = p.Rate.Overhead
	}
}

func parseActions(tables []syscall.NetlinkRouteAttr) ([]Action, error) {
	var actions []Action
	for _, table := range tables {
		var action Action
		var actionType string
		aattrs, err := nl.ParseRouteAttr(table.Value)
		if err != nil {
			return nil, err
		}
	nextattr:
		for _, aattr := range aattrs {
			switch aattr.Attr.Type {
			case nl.TCA_KIND:
				actionType = string(aattr.Value[:len(aattr.Value)-1])
				// only parse if the action is mirred or bpf
				switch actionType {
				case "mirred":
					action = &MirredAction{}
				case "bpf":
					action = &BpfAction{}
				case "connmark":
					action = &ConnmarkAction{}
				case "csum":
					action = &CsumAction{}
				case "gact":
					action = &GenericAction{}
				case "tunnel_key":
					action = &TunnelKeyAction{}
				case "skbedit":
					action = &SkbEditAction{}
				case "police":
					action = &PoliceAction{}
				default:
					break nextattr
				}
			case nl.TCA_OPTIONS:
				adata, err := nl.ParseRouteAttr(aattr.Value)
				if err != nil {
					return nil, err
				}
				for _, adatum := range adata {
					switch actionType {
					case "mirred":
						switch adatum.Attr.Type {
						case nl.TCA_MIRRED_PARMS:
							mirred := *nl.DeserializeTcMirred(adatum.Value)
							action.(*MirredAction).ActionAttrs = ActionAttrs{}
							toAttrs(&mirred.TcGen, action.Attrs())
							action.(*MirredAction).Ifindex = int(mirred.Ifindex)
							action.(*MirredAction).MirredAction = MirredAct(mirred.Eaction)
						}
					case "tunnel_key":
						switch adatum.Attr.Type {
						case nl.TCA_TUNNEL_KEY_PARMS:
							tun := *nl.DeserializeTunnelKey(adatum.Value)
							action.(*TunnelKeyAction).ActionAttrs = ActionAttrs{}
							toAttrs(&tun.TcGen, action.Attrs())
							action.(*TunnelKeyAction).Action = TunnelKeyAct(tun.Action)
						case nl.TCA_TUNNEL_KEY_ENC_KEY_ID:
							action.(*TunnelKeyAction).KeyID = networkOrder.Uint32(adatum.Value[0:4])
						case nl.TCA_TUNNEL_KEY_ENC_IPV6_SRC, nl.TCA_TUNNEL_KEY_ENC_IPV4_SRC:
							action.(*TunnelKeyAction).SrcAddr = adatum.Value[:]
						case nl.TCA_TUNNEL_KEY_ENC_IPV6_DST, nl.TCA_TUNNEL_KEY_ENC_IPV4_DST:
							action.(*TunnelKeyAction).DstAddr = adatum.Value[:]
						case nl.TCA_TUNNEL_KEY_ENC_DST_PORT:
							action.(*TunnelKeyAction).DestPort = ntohs(adatum.Value)
						}
					case "skbedit":
						switch adatum.Attr.Type {
						case nl.TCA_SKBEDIT_PARMS:
							skbedit := *nl.DeserializeSkbEdit(adatum.Value)
							action.(*SkbEditAction).ActionAttrs = ActionAttrs{}
							toAttrs(&skbedit.TcGen, action.Attrs())
						case nl.TCA_SKBEDIT_MARK:
							mark := native.Uint32(adatum.Value[0:4])
							action.(*SkbEditAction).Mark = &mark
						case nl.TCA_SKBEDIT_PRIORITY:
							priority := native.Uint32(adatum.Value[0:4])
							action.(*SkbEditAction).Priority = &priority
						case nl.TCA_SKBEDIT_PTYPE:
							ptype := native.Uint16(adatum.Value[0:2])
							action.(*SkbEditAction).PType = &ptype
						case nl.TCA_SKBEDIT_QUEUE_MAPPING:
							mapping := native.Uint16(adatum.Value[0:2])
							action.(*SkbEditAction).QueueMapping = &mapping
						}
					case "bpf":
						switch adatum.Attr.Type {
						case nl.TCA_ACT_BPF_PARMS:
							gen := *nl.DeserializeTcGen(adatum.Value)
							toAttrs(&gen, action.Attrs())
						case nl.TCA_ACT_BPF_FD:
							action.(*BpfAction).Fd = int(native.Uint32(adatum.Value[0:4]))
						case nl.TCA_ACT_BPF_NAME:
							action.(*BpfAction).Name = string(adatum.Value[:len(adatum.Value)-1])
						}
					case "connmark":
						switch adatum.Attr.Type {
						case nl.TCA_CONNMARK_PARMS:
							connmark := *nl.DeserializeTcConnmark(adatum.Value)
							action.(*ConnmarkAction).ActionAttrs = ActionAttrs{}
							toAttrs(&connmark.TcGen, action.Attrs())
							action.(*ConnmarkAction).Zone = connmark.Zone
						}
					case "csum":
						switch adatum.Attr.Type {
						case nl.TCA_CSUM_PARMS:
							csum := *nl.DeserializeTcCsum(adatum.Value)
							action.(*CsumAction).ActionAttrs = ActionAttrs{}
							toAttrs(&csum.TcGen, action.Attrs())
							action.(*CsumAction).UpdateFlags = CsumUpdateFlags(csum.UpdateFlags)
						}
					case "gact":
						switch adatum.Attr.Type {
						case nl.TCA_GACT_PARMS:
							gen := *nl.DeserializeTcGen(adatum.Value)
							toAttrs(&gen, action.Attrs())
						}
					case "police":
						parsePolice(adatum, action.(*PoliceAction))
					}
				}
			}
		}
		actions = append(actions, action)
	}
	return actions, nil
}

func parseU32Data(filter Filter, data []syscall.NetlinkRouteAttr) (bool, error) {
	u32 := filter.(*U32)
	detailed := false
	for _, datum := range data {
		switch datum.Attr.Type {
		case nl.TCA_U32_SEL:
			detailed = true
			sel := nl.DeserializeTcU32Sel(datum.Value)
			u32.Sel = sel
			if native != networkOrder {
				// Handle the endianness of attributes
				u32.Sel.Offmask = native.Uint16(htons(sel.Offmask))
				u32.Sel.Hmask = native.Uint32(htonl(sel.Hmask))
				for i, key := range u32.Sel.Keys {
					u32.Sel.Keys[i].Mask = native.Uint32(htonl(key.Mask))
					u32.Sel.Keys[i].Val = native.Uint32(htonl(key.Val))
				}
			}
		case nl.TCA_U32_ACT:
			tables, err := nl.ParseRouteAttr(datum.Value)
			if err != nil {
				return detailed, err
			}
			u32.Actions, err = parseActions(tables)
			if err != nil {
				return detailed, err
			}
			for _, action := range u32.Actions {
				if action, ok := action.(*MirredAction); ok {
					u32.RedirIndex = int(action.Ifindex)
				}
			}
		case nl.TCA_U32_CLASSID:
			u32.ClassId = native.Uint32(datum.Value)
		case nl.TCA_U32_DIVISOR:
			u32.Divisor = native.Uint32(datum.Value)
		case nl.TCA_U32_HASH:
			u32.Hash = native.Uint32(datum.Value)
		case nl.TCA_U32_LINK:
			u32.Link = native.Uint32(datum.Value)
		}
	}
	return detailed, nil
}

func parseFwData(filter Filter, data []syscall.NetlinkRouteAttr) (bool, error) {
	fw := filter.(*FwFilter)
	detailed := true
	for _, datum := range data {
		switch datum.Attr.Type {
		case nl.TCA_FW_MASK:
			fw.Mask = native.Uint32(datum.Value[0:4])
		case nl.TCA_FW_CLASSID:
			fw.ClassId = native.Uint32(datum.Value[0:4])
		case nl.TCA_FW_INDEV:
			fw.InDev = string(datum.Value[:len(datum.Value)-1])
		case nl.TCA_FW_POLICE:
			var police PoliceAction
			adata, _ := nl.ParseRouteAttr(datum.Value)
			for _, aattr := range adata {
				parsePolice(aattr, &police)
			}
			fw.Police = &police
		}
	}
	return detailed, nil
}

func parseBpfData(filter Filter, data []syscall.NetlinkRouteAttr) (bool, error) {
	bpf := filter.(*BpfFilter)
	detailed := true
	for _, datum := range data {
		switch datum.Attr.Type {
		case nl.TCA_BPF_FD:
			bpf.Fd = int(native.Uint32(datum.Value[0:4]))
		case nl.TCA_BPF_NAME:
			bpf.Name = string(datum.Value[:len(datum.Value)-1])
		case nl.TCA_BPF_CLASSID:
			bpf.ClassId = native.Uint32(datum.Value[0:4])
		case nl.TCA_BPF_FLAGS:
			flags := native.Uint32(datum.Value[0:4])
			if (flags & nl.TCA_BPF_FLAG_ACT_DIRECT) != 0 {
				bpf.DirectAction = true
			}
		case nl.TCA_BPF_ID:
			bpf.Id = int(native.Uint32(datum.Value[0:4]))
		case nl.TCA_BPF_TAG:
			bpf.Tag = hex.EncodeToString(datum.Value)
		}
	}
	return detailed, nil
}

func parseMatchAllData(filter Filter, data []syscall.NetlinkRouteAttr) (bool, error) {
	matchall := filter.(*MatchAll)
	detailed := true
	for _, datum := range data {
		switch datum.Attr.Type {
		case nl.TCA_MATCHALL_CLASSID:
			matchall.ClassId = native.Uint32(datum.Value[0:4])
		case nl.TCA_MATCHALL_ACT:
			tables, err := nl.ParseRouteAttr(datum.Value)
			if err != nil {
				return detailed, err
			}
			matchall.Actions, err = parseActions(tables)
			if err != nil {
				return detailed, err
			}
		}
	}
	return detailed, nil
}

func parseFlowerData(filter Filter, data []syscall.NetlinkRouteAttr) (bool, error) {
	return true, filter.(*Flower).decode(data)
}

func AlignToAtm(size uint) uint {
	var linksize, cells int
	cells = int(size / nl.ATM_CELL_PAYLOAD)
	if (size % nl.ATM_CELL_PAYLOAD) > 0 {
		cells++
	}
	linksize = cells * nl.ATM_CELL_SIZE
	return uint(linksize)
}

func AdjustSize(sz uint, mpu uint, linklayer int) uint {
	if sz < mpu {
		sz = mpu
	}
	switch linklayer {
	case nl.LINKLAYER_ATM:
		return AlignToAtm(sz)
	default:
		return sz
	}
}

func CalcRtable(rate *nl.TcRateSpec, rtab []uint32, cellLog int, mtu uint32, linklayer int) int {
	bps := rate.Rate
	mpu := rate.Mpu
	var sz uint
	if mtu == 0 {
		mtu = 2047
	}
	if cellLog < 0 {
		cellLog = 0
		for (mtu >> uint(cellLog)) > 255 {
			cellLog++
		}
	}
	for i := 0; i < 256; i++ {
		sz = AdjustSize(uint((i+1)<<uint32(cellLog)), uint(mpu), linklayer)
		rtab[i] = Xmittime(uint64(bps), uint32(sz))
	}
	rate.CellAlign = -1
	rate.CellLog = uint8(cellLog)
	rate.Linklayer = uint8(linklayer & nl.TC_LINKLAYER_MASK)
	return cellLog
}

func DeserializeRtab(b []byte) [256]uint32 {
	var rtab [256]uint32
	r := bytes.NewReader(b)
	_ = binary.Read(r, native, &rtab)
	return rtab
}

func SerializeRtab(rtab [256]uint32) []byte {
	var w bytes.Buffer
	_ = binary.Write(&w, native, rtab)
	return w.Bytes()
}
   07070100000C1A000081A4000000000000000000000001645E367C000001B4000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/fou.go  package netlink

import (
	"errors"
)

var (
	// ErrAttrHeaderTruncated is returned when a netlink attribute's header is
	// truncated.
	ErrAttrHeaderTruncated = errors.New("attribute header truncated")
	// ErrAttrBodyTruncated is returned when a netlink attribute's body is
	// truncated.
	ErrAttrBodyTruncated = errors.New("attribute body truncated")
)

type Fou struct {
	Family    int
	Port      int
	Protocol  int
	EncapType int
}
07070100000C1B000081A4000000000000000000000001645E367C00000F3E000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/fou_linux.go    // +build linux

package netlink

import (
	"encoding/binary"
	"errors"

	"github.com/vishvananda/netlink/nl"
	"golang.org/x/sys/unix"
)

const (
	FOU_GENL_NAME = "fou"
)

const (
	FOU_CMD_UNSPEC uint8 = iota
	FOU_CMD_ADD
	FOU_CMD_DEL
	FOU_CMD_GET
	FOU_CMD_MAX = FOU_CMD_GET
)

const (
	FOU_ATTR_UNSPEC = iota
	FOU_ATTR_PORT
	FOU_ATTR_AF
	FOU_ATTR_IPPROTO
	FOU_ATTR_TYPE
	FOU_ATTR_REMCSUM_NOPARTIAL
	FOU_ATTR_MAX = FOU_ATTR_REMCSUM_NOPARTIAL
)

const (
	FOU_ENCAP_UNSPEC = iota
	FOU_ENCAP_DIRECT
	FOU_ENCAP_GUE
	FOU_ENCAP_MAX = FOU_ENCAP_GUE
)

var fouFamilyId int

func FouFamilyId() (int, error) {
	if fouFamilyId != 0 {
		return fouFamilyId, nil
	}

	fam, err := GenlFamilyGet(FOU_GENL_NAME)
	if err != nil {
		return -1, err
	}

	fouFamilyId = int(fam.ID)
	return fouFamilyId, nil
}

func FouAdd(f Fou) error {
	return pkgHandle.FouAdd(f)
}

func (h *Handle) FouAdd(f Fou) error {
	fam_id, err := FouFamilyId()
	if err != nil {
		return err
	}

	// setting ip protocol conflicts with encapsulation type GUE
	if f.EncapType == FOU_ENCAP_GUE && f.Protocol != 0 {
		return errors.New("GUE encapsulation doesn't specify an IP protocol")
	}

	req := h.newNetlinkRequest(fam_id, unix.NLM_F_ACK)

	// int to byte for port
	bp := make([]byte, 2)
	binary.BigEndian.PutUint16(bp[0:2], uint16(f.Port))

	attrs := []*nl.RtAttr{
		nl.NewRtAttr(FOU_ATTR_PORT, bp),
		nl.NewRtAttr(FOU_ATTR_TYPE, []byte{uint8(f.EncapType)}),
		nl.NewRtAttr(FOU_ATTR_AF, []byte{uint8(f.Family)}),
		nl.NewRtAttr(FOU_ATTR_IPPROTO, []byte{uint8(f.Protocol)}),
	}
	raw := []byte{FOU_CMD_ADD, 1, 0, 0}
	for _, a := range attrs {
		raw = append(raw, a.Serialize()...)
	}

	req.AddRawData(raw)

	_, err = req.Execute(unix.NETLINK_GENERIC, 0)
	return err
}

func FouDel(f Fou) error {
	return pkgHandle.FouDel(f)
}

func (h *Handle) FouDel(f Fou) error {
	fam_id, err := FouFamilyId()
	if err != nil {
		return err
	}

	req := h.newNetlinkRequest(fam_id, unix.NLM_F_ACK)

	// int to byte for port
	bp := make([]byte, 2)
	binary.BigEndian.PutUint16(bp[0:2], uint16(f.Port))

	attrs := []*nl.RtAttr{
		nl.NewRtAttr(FOU_ATTR_PORT, bp),
		nl.NewRtAttr(FOU_ATTR_AF, []byte{uint8(f.Family)}),
	}
	raw := []byte{FOU_CMD_DEL, 1, 0, 0}
	for _, a := range attrs {
		raw = append(raw, a.Serialize()...)
	}

	req.AddRawData(raw)

	_, err = req.Execute(unix.NETLINK_GENERIC, 0)
	if err != nil {
		return err
	}

	return nil
}

func FouList(fam int) ([]Fou, error) {
	return pkgHandle.FouList(fam)
}

func (h *Handle) FouList(fam int) ([]Fou, error) {
	fam_id, err := FouFamilyId()
	if err != nil {
		return nil, err
	}

	req := h.newNetlinkRequest(fam_id, unix.NLM_F_DUMP)

	attrs := []*nl.RtAttr{
		nl.NewRtAttr(FOU_ATTR_AF, []byte{uint8(fam)}),
	}
	raw := []byte{FOU_CMD_GET, 1, 0, 0}
	for _, a := range attrs {
		raw = append(raw, a.Serialize()...)
	}

	req.AddRawData(raw)

	msgs, err := req.Execute(unix.NETLINK_GENERIC, 0)
	if err != nil {
		return nil, err
	}

	fous := make([]Fou, 0, len(msgs))
	for _, m := range msgs {
		f, err := deserializeFouMsg(m)
		if err != nil {
			return fous, err
		}

		fous = append(fous, f)
	}

	return fous, nil
}

func deserializeFouMsg(msg []byte) (Fou, error) {
	// we'll skip to byte 4 to first attribute
	msg = msg[3:]
	var shift int
	fou := Fou{}

	for {
		// attribute header is at least 16 bits
		if len(msg) < 4 {
			return fou, ErrAttrHeaderTruncated
		}

		lgt := int(binary.BigEndian.Uint16(msg[0:2]))
		if len(msg) < lgt+4 {
			return fou, ErrAttrBodyTruncated
		}
		attr := binary.BigEndian.Uint16(msg[2:4])

		shift = lgt + 3
		switch attr {
		case FOU_ATTR_AF:
			fou.Family = int(msg[5])
		case FOU_ATTR_PORT:
			fou.Port = int(binary.BigEndian.Uint16(msg[5:7]))
			// port is 2 bytes
			shift = lgt + 2
		case FOU_ATTR_IPPROTO:
			fou.Protocol = int(msg[5])
		case FOU_ATTR_TYPE:
			fou.EncapType = int(msg[5])
		}

		msg = msg[shift:]

		if len(msg) < 4 {
			break
		}
	}

	return fou, nil
}
  07070100000C1C000081A4000000000000000000000001645E367C000000DB000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/fou_unspecified.go  // +build !linux

package netlink

func FouAdd(f Fou) error {
	return ErrNotImplemented
}

func FouDel(f Fou) error {
	return ErrNotImplemented
}

func FouList(fam int) ([]Fou, error) {
	return nil, ErrNotImplemented
}
 07070100000C1D000081A4000000000000000000000001645E367C00000F08000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/genetlink_linux.go  package netlink

import (
	"fmt"
	"syscall"

	"github.com/vishvananda/netlink/nl"
	"golang.org/x/sys/unix"
)

type GenlOp struct {
	ID    uint32
	Flags uint32
}

type GenlMulticastGroup struct {
	ID   uint32
	Name string
}

type GenlFamily struct {
	ID      uint16
	HdrSize uint32
	Name    string
	Version uint32
	MaxAttr uint32
	Ops     []GenlOp
	Groups  []GenlMulticastGroup
}

func parseOps(b []byte) ([]GenlOp, error) {
	attrs, err := nl.ParseRouteAttr(b)
	if err != nil {
		return nil, err
	}
	ops := make([]GenlOp, 0, len(attrs))
	for _, a := range attrs {
		nattrs, err := nl.ParseRouteAttr(a.Value)
		if err != nil {
			return nil, err
		}
		var op GenlOp
		for _, na := range nattrs {
			switch na.Attr.Type {
			case nl.GENL_CTRL_ATTR_OP_ID:
				op.ID = native.Uint32(na.Value)
			case nl.GENL_CTRL_ATTR_OP_FLAGS:
				op.Flags = native.Uint32(na.Value)
			}
		}
		ops = append(ops, op)
	}
	return ops, nil
}

func parseMulticastGroups(b []byte) ([]GenlMulticastGroup, error) {
	attrs, err := nl.ParseRouteAttr(b)
	if err != nil {
		return nil, err
	}
	groups := make([]GenlMulticastGroup, 0, len(attrs))
	for _, a := range attrs {
		nattrs, err := nl.ParseRouteAttr(a.Value)
		if err != nil {
			return nil, err
		}
		var g GenlMulticastGroup
		for _, na := range nattrs {
			switch na.Attr.Type {
			case nl.GENL_CTRL_ATTR_MCAST_GRP_NAME:
				g.Name = nl.BytesToString(na.Value)
			case nl.GENL_CTRL_ATTR_MCAST_GRP_ID:
				g.ID = native.Uint32(na.Value)
			}
		}
		groups = append(groups, g)
	}
	return groups, nil
}

func (f *GenlFamily) parseAttributes(attrs []syscall.NetlinkRouteAttr) error {
	for _, a := range attrs {
		switch a.Attr.Type {
		case nl.GENL_CTRL_ATTR_FAMILY_NAME:
			f.Name = nl.BytesToString(a.Value)
		case nl.GENL_CTRL_ATTR_FAMILY_ID:
			f.ID = native.Uint16(a.Value)
		case nl.GENL_CTRL_ATTR_VERSION:
			f.Version = native.Uint32(a.Value)
		case nl.GENL_CTRL_ATTR_HDRSIZE:
			f.HdrSize = native.Uint32(a.Value)
		case nl.GENL_CTRL_ATTR_MAXATTR:
			f.MaxAttr = native.Uint32(a.Value)
		case nl.GENL_CTRL_ATTR_OPS:
			ops, err := parseOps(a.Value)
			if err != nil {
				return err
			}
			f.Ops = ops
		case nl.GENL_CTRL_ATTR_MCAST_GROUPS:
			groups, err := parseMulticastGroups(a.Value)
			if err != nil {
				return err
			}
			f.Groups = groups
		}
	}

	return nil
}

func parseFamilies(msgs [][]byte) ([]*GenlFamily, error) {
	families := make([]*GenlFamily, 0, len(msgs))
	for _, m := range msgs {
		attrs, err := nl.ParseRouteAttr(m[nl.SizeofGenlmsg:])
		if err != nil {
			return nil, err
		}
		family := &GenlFamily{}
		if err := family.parseAttributes(attrs); err != nil {
			return nil, err
		}

		families = append(families, family)
	}
	return families, nil
}

func (h *Handle) GenlFamilyList() ([]*GenlFamily, error) {
	msg := &nl.Genlmsg{
		Command: nl.GENL_CTRL_CMD_GETFAMILY,
		Version: nl.GENL_CTRL_VERSION,
	}
	req := h.newNetlinkRequest(nl.GENL_ID_CTRL, unix.NLM_F_DUMP)
	req.AddData(msg)
	msgs, err := req.Execute(unix.NETLINK_GENERIC, 0)
	if err != nil {
		return nil, err
	}
	return parseFamilies(msgs)
}

func GenlFamilyList() ([]*GenlFamily, error) {
	return pkgHandle.GenlFamilyList()
}

func (h *Handle) GenlFamilyGet(name string) (*GenlFamily, error) {
	msg := &nl.Genlmsg{
		Command: nl.GENL_CTRL_CMD_GETFAMILY,
		Version: nl.GENL_CTRL_VERSION,
	}
	req := h.newNetlinkRequest(nl.GENL_ID_CTRL, 0)
	req.AddData(msg)
	req.AddData(nl.NewRtAttr(nl.GENL_CTRL_ATTR_FAMILY_NAME, nl.ZeroTerminated(name)))
	msgs, err := req.Execute(unix.NETLINK_GENERIC, 0)
	if err != nil {
		return nil, err
	}
	families, err := parseFamilies(msgs)
	if err != nil {
		return nil, err
	}
	if len(families) != 1 {
		return nil, fmt.Errorf("invalid response for GENL_CTRL_CMD_GETFAMILY")
	}
	return families[0], nil
}

func GenlFamilyGet(name string) (*GenlFamily, error) {
	return pkgHandle.GenlFamilyGet(name)
}
07070100000C1E000081A4000000000000000000000001645E367C000001E0000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/genetlink_unspecified.go    // +build !linux

package netlink

type GenlOp struct{}

type GenlMulticastGroup struct{}

type GenlFamily struct{}

func (h *Handle) GenlFamilyList() ([]*GenlFamily, error) {
	return nil, ErrNotImplemented
}

func GenlFamilyList() ([]*GenlFamily, error) {
	return nil, ErrNotImplemented
}

func (h *Handle) GenlFamilyGet(name string) (*GenlFamily, error) {
	return nil, ErrNotImplemented
}

func GenlFamilyGet(name string) (*GenlFamily, error) {
	return nil, ErrNotImplemented
}
07070100000C1F000081A4000000000000000000000001645E367C00001AA3000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/gtp_linux.go    package netlink

import (
	"fmt"
	"net"
	"strings"
	"syscall"

	"github.com/vishvananda/netlink/nl"
	"golang.org/x/sys/unix"
)

type PDP struct {
	Version     uint32
	TID         uint64
	PeerAddress net.IP
	MSAddress   net.IP
	Flow        uint16
	NetNSFD     uint32
	ITEI        uint32
	OTEI        uint32
}

func (pdp *PDP) String() string {
	elems := []string{}
	elems = append(elems, fmt.Sprintf("Version: %d", pdp.Version))
	if pdp.Version == 0 {
		elems = append(elems, fmt.Sprintf("TID: %d", pdp.TID))
	} else if pdp.Version == 1 {
		elems = append(elems, fmt.Sprintf("TEI: %d/%d", pdp.ITEI, pdp.OTEI))
	}
	elems = append(elems, fmt.Sprintf("MS-Address: %s", pdp.MSAddress))
	elems = append(elems, fmt.Sprintf("Peer-Address: %s", pdp.PeerAddress))
	return fmt.Sprintf("{%s}", strings.Join(elems, " "))
}

func (p *PDP) parseAttributes(attrs []syscall.NetlinkRouteAttr) error {
	for _, a := range attrs {
		switch a.Attr.Type {
		case nl.GENL_GTP_ATTR_VERSION:
			p.Version = native.Uint32(a.Value)
		case nl.GENL_GTP_ATTR_TID:
			p.TID = native.Uint64(a.Value)
		case nl.GENL_GTP_ATTR_PEER_ADDRESS:
			p.PeerAddress = net.IP(a.Value)
		case nl.GENL_GTP_ATTR_MS_ADDRESS:
			p.MSAddress = net.IP(a.Value)
		case nl.GENL_GTP_ATTR_FLOW:
			p.Flow = native.Uint16(a.Value)
		case nl.GENL_GTP_ATTR_NET_NS_FD:
			p.NetNSFD = native.Uint32(a.Value)
		case nl.GENL_GTP_ATTR_I_TEI:
			p.ITEI = native.Uint32(a.Value)
		case nl.GENL_GTP_ATTR_O_TEI:
			p.OTEI = native.Uint32(a.Value)
		}
	}
	return nil
}

func parsePDP(msgs [][]byte) ([]*PDP, error) {
	pdps := make([]*PDP, 0, len(msgs))
	for _, m := range msgs {
		attrs, err := nl.ParseRouteAttr(m[nl.SizeofGenlmsg:])
		if err != nil {
			return nil, err
		}
		pdp := &PDP{}
		if err := pdp.parseAttributes(attrs); err != nil {
			return nil, err
		}
		pdps = append(pdps, pdp)
	}
	return pdps, nil
}

func (h *Handle) GTPPDPList() ([]*PDP, error) {
	f, err := h.GenlFamilyGet(nl.GENL_GTP_NAME)
	if err != nil {
		return nil, err
	}
	msg := &nl.Genlmsg{
		Command: nl.GENL_GTP_CMD_GETPDP,
		Version: nl.GENL_GTP_VERSION,
	}
	req := h.newNetlinkRequest(int(f.ID), unix.NLM_F_DUMP)
	req.AddData(msg)
	msgs, err := req.Execute(unix.NETLINK_GENERIC, 0)
	if err != nil {
		return nil, err
	}
	return parsePDP(msgs)
}

func GTPPDPList() ([]*PDP, error) {
	return pkgHandle.GTPPDPList()
}

func gtpPDPGet(req *nl.NetlinkRequest) (*PDP, error) {
	msgs, err := req.Execute(unix.NETLINK_GENERIC, 0)
	if err != nil {
		return nil, err
	}
	pdps, err := parsePDP(msgs)
	if err != nil {
		return nil, err
	}
	if len(pdps) != 1 {
		return nil, fmt.Errorf("invalid reqponse for GENL_GTP_CMD_GETPDP")
	}
	return pdps[0], nil
}

func (h *Handle) GTPPDPByTID(link Link, tid int) (*PDP, error) {
	f, err := h.GenlFamilyGet(nl.GENL_GTP_NAME)
	if err != nil {
		return nil, err
	}
	msg := &nl.Genlmsg{
		Command: nl.GENL_GTP_CMD_GETPDP,
		Version: nl.GENL_GTP_VERSION,
	}
	req := h.newNetlinkRequest(int(f.ID), 0)
	req.AddData(msg)
	req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_VERSION, nl.Uint32Attr(0)))
	req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_LINK, nl.Uint32Attr(uint32(link.Attrs().Index))))
	req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_TID, nl.Uint64Attr(uint64(tid))))
	return gtpPDPGet(req)
}

func GTPPDPByTID(link Link, tid int) (*PDP, error) {
	return pkgHandle.GTPPDPByTID(link, tid)
}

func (h *Handle) GTPPDPByITEI(link Link, itei int) (*PDP, error) {
	f, err := h.GenlFamilyGet(nl.GENL_GTP_NAME)
	if err != nil {
		return nil, err
	}
	msg := &nl.Genlmsg{
		Command: nl.GENL_GTP_CMD_GETPDP,
		Version: nl.GENL_GTP_VERSION,
	}
	req := h.newNetlinkRequest(int(f.ID), 0)
	req.AddData(msg)
	req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_VERSION, nl.Uint32Attr(1)))
	req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_LINK, nl.Uint32Attr(uint32(link.Attrs().Index))))
	req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_I_TEI, nl.Uint32Attr(uint32(itei))))
	return gtpPDPGet(req)
}

func GTPPDPByITEI(link Link, itei int) (*PDP, error) {
	return pkgHandle.GTPPDPByITEI(link, itei)
}

func (h *Handle) GTPPDPByMSAddress(link Link, addr net.IP) (*PDP, error) {
	f, err := h.GenlFamilyGet(nl.GENL_GTP_NAME)
	if err != nil {
		return nil, err
	}
	msg := &nl.Genlmsg{
		Command: nl.GENL_GTP_CMD_GETPDP,
		Version: nl.GENL_GTP_VERSION,
	}
	req := h.newNetlinkRequest(int(f.ID), 0)
	req.AddData(msg)
	req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_VERSION, nl.Uint32Attr(0)))
	req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_LINK, nl.Uint32Attr(uint32(link.Attrs().Index))))
	req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_MS_ADDRESS, []byte(addr.To4())))
	return gtpPDPGet(req)
}

func GTPPDPByMSAddress(link Link, addr net.IP) (*PDP, error) {
	return pkgHandle.GTPPDPByMSAddress(link, addr)
}

func (h *Handle) GTPPDPAdd(link Link, pdp *PDP) error {
	f, err := h.GenlFamilyGet(nl.GENL_GTP_NAME)
	if err != nil {
		return err
	}
	msg := &nl.Genlmsg{
		Command: nl.GENL_GTP_CMD_NEWPDP,
		Version: nl.GENL_GTP_VERSION,
	}
	req := h.newNetlinkRequest(int(f.ID), unix.NLM_F_EXCL|unix.NLM_F_ACK)
	req.AddData(msg)
	req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_VERSION, nl.Uint32Attr(pdp.Version)))
	req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_LINK, nl.Uint32Attr(uint32(link.Attrs().Index))))
	req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_PEER_ADDRESS, []byte(pdp.PeerAddress.To4())))
	req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_MS_ADDRESS, []byte(pdp.MSAddress.To4())))

	switch pdp.Version {
	case 0:
		req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_TID, nl.Uint64Attr(pdp.TID)))
		req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_FLOW, nl.Uint16Attr(pdp.Flow)))
	case 1:
		req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_I_TEI, nl.Uint32Attr(pdp.ITEI)))
		req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_O_TEI, nl.Uint32Attr(pdp.OTEI)))
	default:
		return fmt.Errorf("unsupported GTP version: %d", pdp.Version)
	}
	_, err = req.Execute(unix.NETLINK_GENERIC, 0)
	return err
}

func GTPPDPAdd(link Link, pdp *PDP) error {
	return pkgHandle.GTPPDPAdd(link, pdp)
}

func (h *Handle) GTPPDPDel(link Link, pdp *PDP) error {
	f, err := h.GenlFamilyGet(nl.GENL_GTP_NAME)
	if err != nil {
		return err
	}
	msg := &nl.Genlmsg{
		Command: nl.GENL_GTP_CMD_DELPDP,
		Version: nl.GENL_GTP_VERSION,
	}
	req := h.newNetlinkRequest(int(f.ID), unix.NLM_F_EXCL|unix.NLM_F_ACK)
	req.AddData(msg)
	req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_VERSION, nl.Uint32Attr(pdp.Version)))
	req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_LINK, nl.Uint32Attr(uint32(link.Attrs().Index))))

	switch pdp.Version {
	case 0:
		req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_TID, nl.Uint64Attr(pdp.TID)))
	case 1:
		req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_I_TEI, nl.Uint32Attr(pdp.ITEI)))
	default:
		return fmt.Errorf("unsupported GTP version: %d", pdp.Version)
	}
	_, err = req.Execute(unix.NETLINK_GENERIC, 0)
	return err
}

func GTPPDPDel(link Link, pdp *PDP) error {
	return pkgHandle.GTPPDPDel(link, pdp)
}
 07070100000C20000081A4000000000000000000000001645E367C00001513000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/handle_linux.go package netlink

import (
	"fmt"
	"time"

	"github.com/vishvananda/netlink/nl"
	"github.com/vishvananda/netns"
	"golang.org/x/sys/unix"
)

// Empty handle used by the netlink package methods
var pkgHandle = &Handle{}

// Handle is an handle for the netlink requests on a
// specific network namespace. All the requests on the
// same netlink family share the same netlink socket,
// which gets released when the handle is Close'd.
type Handle struct {
	sockets      map[int]*nl.SocketHandle
	lookupByDump bool
}

// SetSocketTimeout configures timeout for default netlink sockets
func SetSocketTimeout(to time.Duration) error {
	if to < time.Microsecond {
		return fmt.Errorf("invalid timeout, minimul value is %s", time.Microsecond)
	}

	nl.SocketTimeoutTv = unix.NsecToTimeval(to.Nanoseconds())
	return nil
}

// GetSocketTimeout returns the timeout value used by default netlink sockets
func GetSocketTimeout() time.Duration {
	nsec := unix.TimevalToNsec(nl.SocketTimeoutTv)
	return time.Duration(nsec) * time.Nanosecond
}

// SupportsNetlinkFamily reports whether the passed netlink family is supported by this Handle
func (h *Handle) SupportsNetlinkFamily(nlFamily int) bool {
	_, ok := h.sockets[nlFamily]
	return ok
}

// NewHandle returns a netlink handle on the current network namespace.
// Caller may specify the netlink families the handle should support.
// If no families are specified, all the families the netlink package
// supports will be automatically added.
func NewHandle(nlFamilies ...int) (*Handle, error) {
	return newHandle(netns.None(), netns.None(), nlFamilies...)
}

// SetSocketTimeout sets the send and receive timeout for each socket in the
// netlink handle. Although the socket timeout has granularity of one
// microsecond, the effective granularity is floored by the kernel timer tick,
// which default value is four milliseconds.
func (h *Handle) SetSocketTimeout(to time.Duration) error {
	if to < time.Microsecond {
		return fmt.Errorf("invalid timeout, minimul value is %s", time.Microsecond)
	}
	tv := unix.NsecToTimeval(to.Nanoseconds())
	for _, sh := range h.sockets {
		if err := sh.Socket.SetSendTimeout(&tv); err != nil {
			return err
		}
		if err := sh.Socket.SetReceiveTimeout(&tv); err != nil {
			return err
		}
	}
	return nil
}

// SetSocketReceiveBufferSize sets the receive buffer size for each
// socket in the netlink handle. The maximum value is capped by
// /proc/sys/net/core/rmem_max.
func (h *Handle) SetSocketReceiveBufferSize(size int, force bool) error {
	opt := unix.SO_RCVBUF
	if force {
		opt = unix.SO_RCVBUFFORCE
	}
	for _, sh := range h.sockets {
		fd := sh.Socket.GetFd()
		err := unix.SetsockoptInt(fd, unix.SOL_SOCKET, opt, size)
		if err != nil {
			return err
		}
	}
	return nil
}

// GetSocketReceiveBufferSize gets the receiver buffer size for each
// socket in the netlink handle. The retrieved value should be the
// double to the one set for SetSocketReceiveBufferSize.
func (h *Handle) GetSocketReceiveBufferSize() ([]int, error) {
	results := make([]int, len(h.sockets))
	i := 0
	for _, sh := range h.sockets {
		fd := sh.Socket.GetFd()
		size, err := unix.GetsockoptInt(fd, unix.SOL_SOCKET, unix.SO_RCVBUF)
		if err != nil {
			return nil, err
		}
		results[i] = size
		i++
	}
	return results, nil
}

// SetStrictCheck sets the strict check socket option for each socket in the netlink handle. Returns early if any set operation fails
func (h *Handle) SetStrictCheck(state bool) error {
	for _, sh := range h.sockets {
		var stateInt int = 0
		if state {
			stateInt = 1
		}
		err := unix.SetsockoptInt(sh.Socket.GetFd(), unix.SOL_NETLINK, unix.NETLINK_GET_STRICT_CHK, stateInt)
		if err != nil {
			return err
		}
	}
	return nil
}

// NewHandleAt returns a netlink handle on the network namespace
// specified by ns. If ns=netns.None(), current network namespace
// will be assumed
func NewHandleAt(ns netns.NsHandle, nlFamilies ...int) (*Handle, error) {
	return newHandle(ns, netns.None(), nlFamilies...)
}

// NewHandleAtFrom works as NewHandle but allows client to specify the
// new and the origin netns Handle.
func NewHandleAtFrom(newNs, curNs netns.NsHandle) (*Handle, error) {
	return newHandle(newNs, curNs)
}

func newHandle(newNs, curNs netns.NsHandle, nlFamilies ...int) (*Handle, error) {
	h := &Handle{sockets: map[int]*nl.SocketHandle{}}
	fams := nl.SupportedNlFamilies
	if len(nlFamilies) != 0 {
		fams = nlFamilies
	}
	for _, f := range fams {
		s, err := nl.GetNetlinkSocketAt(newNs, curNs, f)
		if err != nil {
			return nil, err
		}
		h.sockets[f] = &nl.SocketHandle{Socket: s}
	}
	return h, nil
}

// Close releases the resources allocated to this handle
func (h *Handle) Close() {
	for _, sh := range h.sockets {
		sh.Close()
	}
	h.sockets = nil
}

// Delete releases the resources allocated to this handle
//
// Deprecated: use Close instead which is in line with typical resource release
// patterns for files and other resources.
func (h *Handle) Delete() {
	h.Close()
}

func (h *Handle) newNetlinkRequest(proto, flags int) *nl.NetlinkRequest {
	// Do this so that package API still use nl package variable nextSeqNr
	if h.sockets == nil {
		return nl.NewNetlinkRequest(proto, flags)
	}
	return &nl.NetlinkRequest{
		NlMsghdr: unix.NlMsghdr{
			Len:   uint32(unix.SizeofNlMsghdr),
			Type:  uint16(proto),
			Flags: unix.NLM_F_REQUEST | uint16(flags),
		},
		Sockets: h.sockets,
	}
}
 07070100000C21000081A4000000000000000000000001645E367C0000175C000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/handle_unspecified.go   // +build !linux

package netlink

import (
	"net"
	"time"

	"github.com/vishvananda/netns"
)

type Handle struct{}

func NewHandle(nlFamilies ...int) (*Handle, error) {
	return nil, ErrNotImplemented
}

func NewHandleAt(ns netns.NsHandle, nlFamilies ...int) (*Handle, error) {
	return nil, ErrNotImplemented
}

func NewHandleAtFrom(newNs, curNs netns.NsHandle) (*Handle, error) {
	return nil, ErrNotImplemented
}

func (h *Handle) Close() {}

func (h *Handle) Delete() {}

func (h *Handle) SupportsNetlinkFamily(nlFamily int) bool {
	return false
}

func (h *Handle) SetSocketTimeout(to time.Duration) error {
	return ErrNotImplemented
}

func (h *Handle) SetPromiscOn(link Link) error {
	return ErrNotImplemented
}

func (h *Handle) SetPromiscOff(link Link) error {
	return ErrNotImplemented
}

func (h *Handle) LinkSetUp(link Link) error {
	return ErrNotImplemented
}

func (h *Handle) LinkSetDown(link Link) error {
	return ErrNotImplemented
}

func (h *Handle) LinkSetMTU(link Link, mtu int) error {
	return ErrNotImplemented
}

func (h *Handle) LinkSetName(link Link, name string) error {
	return ErrNotImplemented
}

func (h *Handle) LinkSetAlias(link Link, name string) error {
	return ErrNotImplemented
}

func (h *Handle) LinkSetHardwareAddr(link Link, hwaddr net.HardwareAddr) error {
	return ErrNotImplemented
}

func (h *Handle) LinkSetVfHardwareAddr(link Link, vf int, hwaddr net.HardwareAddr) error {
	return ErrNotImplemented
}

func (h *Handle) LinkSetVfVlan(link Link, vf, vlan int) error {
	return ErrNotImplemented
}

func (h *Handle) LinkSetVfVlanQos(link Link, vf, vlan, qos int) error {
	return ErrNotImplemented
}

func (h *Handle) LinkSetVfTxRate(link Link, vf, rate int) error {
	return ErrNotImplemented
}

func (h *Handle) LinkSetVfRate(link Link, vf, minRate, maxRate int) error {
	return ErrNotImplemented
}

func (h *Handle) LinkSetMaster(link Link, master Link) error {
	return ErrNotImplemented
}

func (h *Handle) LinkSetNoMaster(link Link) error {
	return ErrNotImplemented
}

func (h *Handle) LinkSetMasterByIndex(link Link, masterIndex int) error {
	return ErrNotImplemented
}

func (h *Handle) LinkSetNsPid(link Link, nspid int) error {
	return ErrNotImplemented
}

func (h *Handle) LinkSetNsFd(link Link, fd int) error {
	return ErrNotImplemented
}

func (h *Handle) LinkAdd(link Link) error {
	return ErrNotImplemented
}

func (h *Handle) LinkDel(link Link) error {
	return ErrNotImplemented
}

func (h *Handle) LinkByName(name string) (Link, error) {
	return nil, ErrNotImplemented
}

func (h *Handle) LinkByAlias(alias string) (Link, error) {
	return nil, ErrNotImplemented
}

func (h *Handle) LinkByIndex(index int) (Link, error) {
	return nil, ErrNotImplemented
}

func (h *Handle) LinkList() ([]Link, error) {
	return nil, ErrNotImplemented
}

func (h *Handle) LinkSetHairpin(link Link, mode bool) error {
	return ErrNotImplemented
}

func (h *Handle) LinkSetGuard(link Link, mode bool) error {
	return ErrNotImplemented
}

func (h *Handle) LinkSetFastLeave(link Link, mode bool) error {
	return ErrNotImplemented
}

func (h *Handle) LinkSetLearning(link Link, mode bool) error {
	return ErrNotImplemented
}

func (h *Handle) LinkSetRootBlock(link Link, mode bool) error {
	return ErrNotImplemented
}

func (h *Handle) LinkSetFlood(link Link, mode bool) error {
	return ErrNotImplemented
}

func (h *Handle) LinkSetTxQLen(link Link, qlen int) error {
	return ErrNotImplemented
}

func (h *Handle) LinkSetGroup(link Link, group int) error {
	return ErrNotImplemented
}

func (h *Handle) setProtinfoAttr(link Link, mode bool, attr int) error {
	return ErrNotImplemented
}

func (h *Handle) AddrAdd(link Link, addr *Addr) error {
	return ErrNotImplemented
}

func (h *Handle) AddrDel(link Link, addr *Addr) error {
	return ErrNotImplemented
}

func (h *Handle) AddrList(link Link, family int) ([]Addr, error) {
	return nil, ErrNotImplemented
}

func (h *Handle) ClassDel(class Class) error {
	return ErrNotImplemented
}

func (h *Handle) ClassChange(class Class) error {
	return ErrNotImplemented
}

func (h *Handle) ClassReplace(class Class) error {
	return ErrNotImplemented
}

func (h *Handle) ClassAdd(class Class) error {
	return ErrNotImplemented
}

func (h *Handle) ClassList(link Link, parent uint32) ([]Class, error) {
	return nil, ErrNotImplemented
}

func (h *Handle) FilterDel(filter Filter) error {
	return ErrNotImplemented
}

func (h *Handle) FilterAdd(filter Filter) error {
	return ErrNotImplemented
}

func (h *Handle) FilterList(link Link, parent uint32) ([]Filter, error) {
	return nil, ErrNotImplemented
}

func (h *Handle) NeighAdd(neigh *Neigh) error {
	return ErrNotImplemented
}

func (h *Handle) NeighSet(neigh *Neigh) error {
	return ErrNotImplemented
}

func (h *Handle) NeighAppend(neigh *Neigh) error {
	return ErrNotImplemented
}

func (h *Handle) NeighDel(neigh *Neigh) error {
	return ErrNotImplemented
}

func (h *Handle) NeighList(linkIndex, family int) ([]Neigh, error) {
	return nil, ErrNotImplemented
}

func (h *Handle) NeighProxyList(linkIndex, family int) ([]Neigh, error) {
	return nil, ErrNotImplemented
}

func (h *Handle) RouteAdd(route *Route) error {
	return ErrNotImplemented
}

func (h *Handle) RouteAppend(route *Route) error {
	return ErrNotImplemented
}

func (h *Handle) RouteDel(route *Route) error {
	return ErrNotImplemented
}

func (h *Handle) RouteGet(destination net.IP) ([]Route, error) {
	return nil, ErrNotImplemented
}

func (h *Handle) RouteList(link Link, family int) ([]Route, error) {
	return nil, ErrNotImplemented
}

func (h *Handle) RouteListFiltered(family int, filter *Route, filterMask uint64) ([]Route, error) {
	return nil, ErrNotImplemented
}

func (h *Handle) RouteReplace(route *Route) error {
	return ErrNotImplemented
}

func (h *Handle) RuleAdd(rule *Rule) error {
	return ErrNotImplemented
}

func (h *Handle) RuleDel(rule *Rule) error {
	return ErrNotImplemented
}

func (h *Handle) RuleList(family int) ([]Rule, error) {
	return nil, ErrNotImplemented
}
07070100000C22000081A4000000000000000000000001645E367C0000020B000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/inet_diag.go    package netlink

// INET_DIAG constatns
const (
	INET_DIAG_NONE = iota
	INET_DIAG_MEMINFO
	INET_DIAG_INFO
	INET_DIAG_VEGASINFO
	INET_DIAG_CONG
	INET_DIAG_TOS
	INET_DIAG_TCLASS
	INET_DIAG_SKMEMINFO
	INET_DIAG_SHUTDOWN
	INET_DIAG_DCTCPINFO
	INET_DIAG_PROTOCOL
	INET_DIAG_SKV6ONLY
	INET_DIAG_LOCALS
	INET_DIAG_PEERS
	INET_DIAG_PAD
	INET_DIAG_MARK
	INET_DIAG_BBRINFO
	INET_DIAG_CLASS_ID
	INET_DIAG_MD5SIG
	INET_DIAG_MAX
)

type InetDiagTCPInfoResp struct {
	InetDiagMsg *Socket
	TCPInfo     *TCPInfo
	TCPBBRInfo  *TCPBBRInfo
}
 07070100000C23000081A4000000000000000000000001645E367C000008F7000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/ioctl_linux.go  package netlink

import (
	"syscall"
	"unsafe"

	"golang.org/x/sys/unix"
)

// ioctl for statistics.
const (
	// ETHTOOL_GSSET_INFO gets string set info
	ETHTOOL_GSSET_INFO = 0x00000037
	// SIOCETHTOOL is Ethtool interface
	SIOCETHTOOL = 0x8946
	// ETHTOOL_GSTRINGS gets specified string set
	ETHTOOL_GSTRINGS = 0x0000001b
	// ETHTOOL_GSTATS gets NIC-specific statistics
	ETHTOOL_GSTATS = 0x0000001d
)

// string set id.
const (
	// ETH_SS_TEST is self-test result names, for use with %ETHTOOL_TEST
	ETH_SS_TEST = iota
	// ETH_SS_STATS statistic names, for use with %ETHTOOL_GSTATS
	ETH_SS_STATS
	// ETH_SS_PRIV_FLAGS are driver private flag names
	ETH_SS_PRIV_FLAGS
	// _ETH_SS_NTUPLE_FILTERS is deprecated
	_ETH_SS_NTUPLE_FILTERS
	// ETH_SS_FEATURES are device feature names
	ETH_SS_FEATURES
	// ETH_SS_RSS_HASH_FUNCS is RSS hush function names
	ETH_SS_RSS_HASH_FUNCS
)

// IfreqSlave is a struct for ioctl bond manipulation syscalls.
// It is used to assign slave to bond interface with Name.
type IfreqSlave struct {
	Name  [unix.IFNAMSIZ]byte
	Slave [unix.IFNAMSIZ]byte
}

// Ifreq is a struct for ioctl ethernet manipulation syscalls.
type Ifreq struct {
	Name [unix.IFNAMSIZ]byte
	Data uintptr
}

// ethtoolSset is a string set information
type ethtoolSset struct {
	cmd      uint32
	reserved uint32
	mask     uint64
	data     [1]uint32
}

type ethtoolStats struct {
	cmd    uint32
	nStats uint32
	// Followed by nStats * []uint64.
}

// newIocltSlaveReq returns filled IfreqSlave with proper interface names
// It is used by ioctl to assign slave to bond master
func newIocltSlaveReq(slave, master string) *IfreqSlave {
	ifreq := &IfreqSlave{}
	copy(ifreq.Name[:unix.IFNAMSIZ-1], master)
	copy(ifreq.Slave[:unix.IFNAMSIZ-1], slave)
	return ifreq
}

// newIocltStringSetReq creates request to get interface string set
func newIocltStringSetReq(linkName string) (*Ifreq, *ethtoolSset) {
	e := &ethtoolSset{
		cmd:  ETHTOOL_GSSET_INFO,
		mask: 1 << ETH_SS_STATS,
	}

	ifreq := &Ifreq{Data: uintptr(unsafe.Pointer(e))}
	copy(ifreq.Name[:unix.IFNAMSIZ-1], linkName)
	return ifreq, e
}

// getSocketUDP returns file descriptor to new UDP socket
// It is used for communication with ioctl interface.
func getSocketUDP() (int, error) {
	return syscall.Socket(unix.AF_INET, unix.SOCK_DGRAM, 0)
}
 07070100000C24000081A4000000000000000000000001645E367C00003849000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/ipset_linux.go  package netlink

import (
	"encoding/binary"
	"log"
	"net"
	"syscall"

	"github.com/vishvananda/netlink/nl"
	"golang.org/x/sys/unix"
)

// IPSetEntry is used for adding, updating, retreiving and deleting entries
type IPSetEntry struct {
	Comment  string
	MAC      net.HardwareAddr
	IP       net.IP
	CIDR     uint8
	Timeout  *uint32
	Packets  *uint64
	Bytes    *uint64
	Protocol *uint8
	Port     *uint16
	IP2      net.IP
	CIDR2    uint8
	IFace    string
	Mark     *uint32

	Replace bool // replace existing entry
}

// IPSetResult is the result of a dump request for a set
type IPSetResult struct {
	Nfgenmsg           *nl.Nfgenmsg
	Protocol           uint8
	ProtocolMinVersion uint8
	Revision           uint8
	Family             uint8
	Flags              uint8
	SetName            string
	TypeName           string
	Comment            string
	MarkMask           uint32

	IPFrom   net.IP
	IPTo     net.IP
	PortFrom uint16
	PortTo   uint16

	HashSize     uint32
	NumEntries   uint32
	MaxElements  uint32
	References   uint32
	SizeInMemory uint32
	CadtFlags    uint32
	Timeout      *uint32
	LineNo       uint32

	Entries []IPSetEntry
}

// IpsetCreateOptions is the options struct for creating a new ipset
type IpsetCreateOptions struct {
	Replace  bool // replace existing ipset
	Timeout  *uint32
	Counters bool
	Comments bool
	Skbinfo  bool

	Revision uint8
	IPFrom   net.IP
	IPTo     net.IP
	PortFrom uint16
	PortTo   uint16
}

// IpsetProtocol returns the ipset protocol version from the kernel
func IpsetProtocol() (uint8, uint8, error) {
	return pkgHandle.IpsetProtocol()
}

// IpsetCreate creates a new ipset
func IpsetCreate(setname, typename string, options IpsetCreateOptions) error {
	return pkgHandle.IpsetCreate(setname, typename, options)
}

// IpsetDestroy destroys an existing ipset
func IpsetDestroy(setname string) error {
	return pkgHandle.IpsetDestroy(setname)
}

// IpsetFlush flushes an existing ipset
func IpsetFlush(setname string) error {
	return pkgHandle.IpsetFlush(setname)
}

// IpsetList dumps an specific ipset.
func IpsetList(setname string) (*IPSetResult, error) {
	return pkgHandle.IpsetList(setname)
}

// IpsetListAll dumps all ipsets.
func IpsetListAll() ([]IPSetResult, error) {
	return pkgHandle.IpsetListAll()
}

// IpsetAdd adds an entry to an existing ipset.
func IpsetAdd(setname string, entry *IPSetEntry) error {
	return pkgHandle.IpsetAdd(setname, entry)
}

// IpsetDel deletes an entry from an existing ipset.
func IpsetDel(setname string, entry *IPSetEntry) error {
	return pkgHandle.IpsetDel(setname, entry)
}

func (h *Handle) IpsetProtocol() (protocol uint8, minVersion uint8, err error) {
	req := h.newIpsetRequest(nl.IPSET_CMD_PROTOCOL)
	msgs, err := req.Execute(unix.NETLINK_NETFILTER, 0)

	if err != nil {
		return 0, 0, err
	}
	response := ipsetUnserialize(msgs)
	return response.Protocol, response.ProtocolMinVersion, nil
}

func (h *Handle) IpsetCreate(setname, typename string, options IpsetCreateOptions) error {
	req := h.newIpsetRequest(nl.IPSET_CMD_CREATE)

	if !options.Replace {
		req.Flags |= unix.NLM_F_EXCL
	}

	req.AddData(nl.NewRtAttr(nl.IPSET_ATTR_SETNAME, nl.ZeroTerminated(setname)))
	req.AddData(nl.NewRtAttr(nl.IPSET_ATTR_TYPENAME, nl.ZeroTerminated(typename)))

	revision := options.Revision
	if revision == 0 {
		revision = getIpsetDefaultWithTypeName(typename)
	}
	req.AddData(nl.NewRtAttr(nl.IPSET_ATTR_REVISION, nl.Uint8Attr(revision)))

	data := nl.NewRtAttr(nl.IPSET_ATTR_DATA|int(nl.NLA_F_NESTED), nil)

	var family uint8
	switch typename {
	case "hash:mac":
	case "bitmap:port":
		buf := make([]byte, 4)
		binary.BigEndian.PutUint16(buf, options.PortFrom)
		binary.BigEndian.PutUint16(buf[2:], options.PortTo)
		data.AddChild(nl.NewRtAttr(nl.IPSET_ATTR_PORT_FROM|int(nl.NLA_F_NET_BYTEORDER), buf[:2]))
		data.AddChild(nl.NewRtAttr(nl.IPSET_ATTR_PORT_TO|int(nl.NLA_F_NET_BYTEORDER), buf[2:]))
	default:
		family = unix.AF_INET
	}

	req.AddData(nl.NewRtAttr(nl.IPSET_ATTR_FAMILY, nl.Uint8Attr(family)))

	if timeout := options.Timeout; timeout != nil {
		data.AddChild(&nl.Uint32Attribute{Type: nl.IPSET_ATTR_TIMEOUT | nl.NLA_F_NET_BYTEORDER, Value: *timeout})
	}

	var cadtFlags uint32

	if options.Comments {
		cadtFlags |= nl.IPSET_FLAG_WITH_COMMENT
	}
	if options.Counters {
		cadtFlags |= nl.IPSET_FLAG_WITH_COUNTERS
	}
	if options.Skbinfo {
		cadtFlags |= nl.IPSET_FLAG_WITH_SKBINFO
	}

	if cadtFlags != 0 {
		data.AddChild(&nl.Uint32Attribute{Type: nl.IPSET_ATTR_CADT_FLAGS | nl.NLA_F_NET_BYTEORDER, Value: cadtFlags})
	}

	req.AddData(data)
	_, err := ipsetExecute(req)
	return err
}

func (h *Handle) IpsetDestroy(setname string) error {
	req := h.newIpsetRequest(nl.IPSET_CMD_DESTROY)
	req.AddData(nl.NewRtAttr(nl.IPSET_ATTR_SETNAME, nl.ZeroTerminated(setname)))
	_, err := ipsetExecute(req)
	return err
}

func (h *Handle) IpsetFlush(setname string) error {
	req := h.newIpsetRequest(nl.IPSET_CMD_FLUSH)
	req.AddData(nl.NewRtAttr(nl.IPSET_ATTR_SETNAME, nl.ZeroTerminated(setname)))
	_, err := ipsetExecute(req)
	return err
}

func (h *Handle) IpsetList(name string) (*IPSetResult, error) {
	req := h.newIpsetRequest(nl.IPSET_CMD_LIST)
	req.AddData(nl.NewRtAttr(nl.IPSET_ATTR_SETNAME, nl.ZeroTerminated(name)))

	msgs, err := ipsetExecute(req)
	if err != nil {
		return nil, err
	}

	result := ipsetUnserialize(msgs)
	return &result, nil
}

func (h *Handle) IpsetListAll() ([]IPSetResult, error) {
	req := h.newIpsetRequest(nl.IPSET_CMD_LIST)

	msgs, err := ipsetExecute(req)
	if err != nil {
		return nil, err
	}

	result := make([]IPSetResult, len(msgs))
	for i, msg := range msgs {
		result[i].unserialize(msg)
	}

	return result, nil
}

// IpsetAdd adds an entry to an existing ipset.
func (h *Handle) IpsetAdd(setname string, entry *IPSetEntry) error {
	return h.ipsetAddDel(nl.IPSET_CMD_ADD, setname, entry)
}

// IpsetDel deletes an entry from an existing ipset.
func (h *Handle) IpsetDel(setname string, entry *IPSetEntry) error {
	return h.ipsetAddDel(nl.IPSET_CMD_DEL, setname, entry)
}

func (h *Handle) ipsetAddDel(nlCmd int, setname string, entry *IPSetEntry) error {
	req := h.newIpsetRequest(nlCmd)
	req.AddData(nl.NewRtAttr(nl.IPSET_ATTR_SETNAME, nl.ZeroTerminated(setname)))

	if entry.Comment != "" {
		req.AddData(nl.NewRtAttr(nl.IPSET_ATTR_COMMENT, nl.ZeroTerminated(entry.Comment)))
	}

	data := nl.NewRtAttr(nl.IPSET_ATTR_DATA|int(nl.NLA_F_NESTED), nil)

	if !entry.Replace {
		req.Flags |= unix.NLM_F_EXCL
	}

	if entry.Timeout != nil {
		data.AddChild(&nl.Uint32Attribute{Type: nl.IPSET_ATTR_TIMEOUT | nl.NLA_F_NET_BYTEORDER, Value: *entry.Timeout})
	}

	if entry.IP != nil {
		nestedData := nl.NewRtAttr(nl.IPSET_ATTR_IP|int(nl.NLA_F_NET_BYTEORDER), entry.IP)
		data.AddChild(nl.NewRtAttr(nl.IPSET_ATTR_IP|int(nl.NLA_F_NESTED), nestedData.Serialize()))
	}

	if entry.MAC != nil {
		data.AddChild(nl.NewRtAttr(nl.IPSET_ATTR_ETHER, entry.MAC))
	}

	if entry.CIDR != 0 {
		data.AddChild(nl.NewRtAttr(nl.IPSET_ATTR_CIDR, nl.Uint8Attr(entry.CIDR)))
	}

	if entry.IP2 != nil {
		nestedData := nl.NewRtAttr(nl.IPSET_ATTR_IP|int(nl.NLA_F_NET_BYTEORDER), entry.IP2)
		data.AddChild(nl.NewRtAttr(nl.IPSET_ATTR_IP2|int(nl.NLA_F_NESTED), nestedData.Serialize()))
	}

	if entry.CIDR2 != 0 {
		data.AddChild(nl.NewRtAttr(nl.IPSET_ATTR_CIDR2, nl.Uint8Attr(entry.CIDR2)))
	}

	if entry.Port != nil {
		if entry.Protocol == nil {
			// use tcp protocol as default
			val := uint8(unix.IPPROTO_TCP)
			entry.Protocol = &val
		}
		data.AddChild(nl.NewRtAttr(nl.IPSET_ATTR_PROTO, nl.Uint8Attr(*entry.Protocol)))
		buf := make([]byte, 2)
		binary.BigEndian.PutUint16(buf, *entry.Port)
		data.AddChild(nl.NewRtAttr(int(nl.IPSET_ATTR_PORT|nl.NLA_F_NET_BYTEORDER), buf))
	}

	if entry.IFace != "" {
		data.AddChild(nl.NewRtAttr(nl.IPSET_ATTR_IFACE, nl.ZeroTerminated(entry.IFace)))
	}

	if entry.Mark != nil {
		data.AddChild(&nl.Uint32Attribute{Type: nl.IPSET_ATTR_MARK | nl.NLA_F_NET_BYTEORDER, Value: *entry.Mark})
	}

	data.AddChild(&nl.Uint32Attribute{Type: nl.IPSET_ATTR_LINENO | nl.NLA_F_NET_BYTEORDER, Value: 0})
	req.AddData(data)

	_, err := ipsetExecute(req)
	return err
}

func (h *Handle) newIpsetRequest(cmd int) *nl.NetlinkRequest {
	req := h.newNetlinkRequest(cmd|(unix.NFNL_SUBSYS_IPSET<<8), nl.GetIpsetFlags(cmd))

	// Add the netfilter header
	msg := &nl.Nfgenmsg{
		NfgenFamily: uint8(unix.AF_NETLINK),
		Version:     nl.NFNETLINK_V0,
		ResId:       0,
	}
	req.AddData(msg)
	req.AddData(nl.NewRtAttr(nl.IPSET_ATTR_PROTOCOL, nl.Uint8Attr(nl.IPSET_PROTOCOL)))

	return req
}

func getIpsetDefaultWithTypeName(typename string) uint8 {
	switch typename {
	case "hash:ip,port",
		"hash:ip,port,ip",
		"hash:ip,port,net",
		"hash:net,port":
		return 1
	}
	return 0
}

func ipsetExecute(req *nl.NetlinkRequest) (msgs [][]byte, err error) {
	msgs, err = req.Execute(unix.NETLINK_NETFILTER, 0)

	if err != nil {
		if errno := int(err.(syscall.Errno)); errno >= nl.IPSET_ERR_PRIVATE {
			err = nl.IPSetError(uintptr(errno))
		}
	}
	return
}

func ipsetUnserialize(msgs [][]byte) (result IPSetResult) {
	for _, msg := range msgs {
		result.unserialize(msg)
	}
	return result
}

func (result *IPSetResult) unserialize(msg []byte) {
	result.Nfgenmsg = nl.DeserializeNfgenmsg(msg)

	for attr := range nl.ParseAttributes(msg[4:]) {
		switch attr.Type {
		case nl.IPSET_ATTR_PROTOCOL:
			result.Protocol = attr.Value[0]
		case nl.IPSET_ATTR_SETNAME:
			result.SetName = nl.BytesToString(attr.Value)
		case nl.IPSET_ATTR_COMMENT:
			result.Comment = nl.BytesToString(attr.Value)
		case nl.IPSET_ATTR_TYPENAME:
			result.TypeName = nl.BytesToString(attr.Value)
		case nl.IPSET_ATTR_REVISION:
			result.Revision = attr.Value[0]
		case nl.IPSET_ATTR_FAMILY:
			result.Family = attr.Value[0]
		case nl.IPSET_ATTR_FLAGS:
			result.Flags = attr.Value[0]
		case nl.IPSET_ATTR_DATA | nl.NLA_F_NESTED:
			result.parseAttrData(attr.Value)
		case nl.IPSET_ATTR_ADT | nl.NLA_F_NESTED:
			result.parseAttrADT(attr.Value)
		case nl.IPSET_ATTR_PROTOCOL_MIN:
			result.ProtocolMinVersion = attr.Value[0]
		case nl.IPSET_ATTR_MARKMASK:
			result.MarkMask = attr.Uint32()
		default:
			log.Printf("unknown ipset attribute from kernel: %+v %v", attr, attr.Type&nl.NLA_TYPE_MASK)
		}
	}
}

func (result *IPSetResult) parseAttrData(data []byte) {
	for attr := range nl.ParseAttributes(data) {
		switch attr.Type {
		case nl.IPSET_ATTR_HASHSIZE | nl.NLA_F_NET_BYTEORDER:
			result.HashSize = attr.Uint32()
		case nl.IPSET_ATTR_MAXELEM | nl.NLA_F_NET_BYTEORDER:
			result.MaxElements = attr.Uint32()
		case nl.IPSET_ATTR_TIMEOUT | nl.NLA_F_NET_BYTEORDER:
			val := attr.Uint32()
			result.Timeout = &val
		case nl.IPSET_ATTR_ELEMENTS | nl.NLA_F_NET_BYTEORDER:
			result.NumEntries = attr.Uint32()
		case nl.IPSET_ATTR_REFERENCES | nl.NLA_F_NET_BYTEORDER:
			result.References = attr.Uint32()
		case nl.IPSET_ATTR_MEMSIZE | nl.NLA_F_NET_BYTEORDER:
			result.SizeInMemory = attr.Uint32()
		case nl.IPSET_ATTR_CADT_FLAGS | nl.NLA_F_NET_BYTEORDER:
			result.CadtFlags = attr.Uint32()
		case nl.IPSET_ATTR_IP | nl.NLA_F_NESTED:
			for nested := range nl.ParseAttributes(attr.Value) {
				switch nested.Type {
				case nl.IPSET_ATTR_IP | nl.NLA_F_NET_BYTEORDER:
					result.Entries = append(result.Entries, IPSetEntry{IP: nested.Value})
				case nl.IPSET_ATTR_IP:
					result.IPFrom = nested.Value
				default:
					log.Printf("unknown nested ipset data attribute from kernel: %+v %v", nested, nested.Type&nl.NLA_TYPE_MASK)
				}
			}
		case nl.IPSET_ATTR_IP_TO | nl.NLA_F_NESTED:
			for nested := range nl.ParseAttributes(attr.Value) {
				switch nested.Type {
				case nl.IPSET_ATTR_IP:
					result.IPTo = nested.Value
				default:
					log.Printf("unknown nested ipset data attribute from kernel: %+v %v", nested, nested.Type&nl.NLA_TYPE_MASK)
				}
			}
		case nl.IPSET_ATTR_PORT_FROM | nl.NLA_F_NET_BYTEORDER:
			result.PortFrom = networkOrder.Uint16(attr.Value)
		case nl.IPSET_ATTR_PORT_TO | nl.NLA_F_NET_BYTEORDER:
			result.PortTo = networkOrder.Uint16(attr.Value)
		case nl.IPSET_ATTR_CADT_LINENO | nl.NLA_F_NET_BYTEORDER:
			result.LineNo = attr.Uint32()
		case nl.IPSET_ATTR_COMMENT:
			result.Comment = nl.BytesToString(attr.Value)
		case nl.IPSET_ATTR_MARKMASK:
			result.MarkMask = attr.Uint32()
		default:
			log.Printf("unknown ipset data attribute from kernel: %+v %v", attr, attr.Type&nl.NLA_TYPE_MASK)
		}
	}
}

func (result *IPSetResult) parseAttrADT(data []byte) {
	for attr := range nl.ParseAttributes(data) {
		switch attr.Type {
		case nl.IPSET_ATTR_DATA | nl.NLA_F_NESTED:
			result.Entries = append(result.Entries, parseIPSetEntry(attr.Value))
		default:
			log.Printf("unknown ADT attribute from kernel: %+v %v", attr, attr.Type&nl.NLA_TYPE_MASK)
		}
	}
}

func parseIPSetEntry(data []byte) (entry IPSetEntry) {
	for attr := range nl.ParseAttributes(data) {
		switch attr.Type {
		case nl.IPSET_ATTR_TIMEOUT | nl.NLA_F_NET_BYTEORDER:
			val := attr.Uint32()
			entry.Timeout = &val
		case nl.IPSET_ATTR_BYTES | nl.NLA_F_NET_BYTEORDER:
			val := attr.Uint64()
			entry.Bytes = &val
		case nl.IPSET_ATTR_PACKETS | nl.NLA_F_NET_BYTEORDER:
			val := attr.Uint64()
			entry.Packets = &val
		case nl.IPSET_ATTR_ETHER:
			entry.MAC = net.HardwareAddr(attr.Value)
		case nl.IPSET_ATTR_IP:
			entry.IP = net.IP(attr.Value)
		case nl.IPSET_ATTR_COMMENT:
			entry.Comment = nl.BytesToString(attr.Value)
		case nl.IPSET_ATTR_IP | nl.NLA_F_NESTED:
			for attr := range nl.ParseAttributes(attr.Value) {
				switch attr.Type {
				case nl.IPSET_ATTR_IP:
					entry.IP = net.IP(attr.Value)
				default:
					log.Printf("unknown nested ADT attribute from kernel: %+v", attr)
				}
			}
		case nl.IPSET_ATTR_IP2 | nl.NLA_F_NESTED:
			for attr := range nl.ParseAttributes(attr.Value) {
				switch attr.Type {
				case nl.IPSET_ATTR_IP:
					entry.IP2 = net.IP(attr.Value)
				default:
					log.Printf("unknown nested ADT attribute from kernel: %+v", attr)
				}
			}
		case nl.IPSET_ATTR_CIDR:
			entry.CIDR = attr.Value[0]
		case nl.IPSET_ATTR_CIDR2:
			entry.CIDR2 = attr.Value[0]
		case nl.IPSET_ATTR_PORT | nl.NLA_F_NET_BYTEORDER:
			val := networkOrder.Uint16(attr.Value)
			entry.Port = &val
		case nl.IPSET_ATTR_PROTO:
			val := attr.Value[0]
			entry.Protocol = &val
		case nl.IPSET_ATTR_IFACE:
			entry.IFace = nl.BytesToString(attr.Value)
		case nl.IPSET_ATTR_MARK | nl.NLA_F_NET_BYTEORDER:
			val := attr.Uint32()
			entry.Mark = &val
		default:
			log.Printf("unknown ADT attribute from kernel: %+v", attr)
		}
	}
	return
}
   07070100000C25000081A4000000000000000000000001645E367C0000710E000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/link.go package netlink

import (
	"fmt"
	"net"
	"os"
	"strconv"
)

// Link represents a link device from netlink. Shared link attributes
// like name may be retrieved using the Attrs() method. Unique data
// can be retrieved by casting the object to the proper type.
type Link interface {
	Attrs() *LinkAttrs
	Type() string
}

type (
	NsPid int
	NsFd  int
)

// LinkAttrs represents data shared by most link types
type LinkAttrs struct {
	Index        int
	MTU          int
	TxQLen       int // Transmit Queue Length
	Name         string
	HardwareAddr net.HardwareAddr
	Flags        net.Flags
	RawFlags     uint32
	ParentIndex  int         // index of the parent link device
	MasterIndex  int         // must be the index of a bridge
	Namespace    interface{} // nil | NsPid | NsFd
	Alias        string
	Statistics   *LinkStatistics
	Promisc      int
	Allmulti     int
	Multi        int
	Xdp          *LinkXdp
	EncapType    string
	Protinfo     *Protinfo
	OperState    LinkOperState
	PhysSwitchID int
	NetNsID      int
	NumTxQueues  int
	NumRxQueues  int
	GSOMaxSize   uint32
	GSOMaxSegs   uint32
	Vfs          []VfInfo // virtual functions available on link
	Group        uint32
	Slave        LinkSlave
}

// LinkSlave represents a slave device.
type LinkSlave interface {
	SlaveType() string
}

// VfInfo represents configuration of virtual function
type VfInfo struct {
	ID        int
	Mac       net.HardwareAddr
	Vlan      int
	Qos       int
	TxRate    int // IFLA_VF_TX_RATE  Max TxRate
	Spoofchk  bool
	LinkState uint32
	MaxTxRate uint32 // IFLA_VF_RATE Max TxRate
	MinTxRate uint32 // IFLA_VF_RATE Min TxRate
	RxPackets uint64
	TxPackets uint64
	RxBytes   uint64
	TxBytes   uint64
	Multicast uint64
	Broadcast uint64
	RxDropped uint64
	TxDropped uint64

	RssQuery uint32
	Trust    uint32
}

// LinkOperState represents the values of the IFLA_OPERSTATE link
// attribute, which contains the RFC2863 state of the interface.
type LinkOperState uint8

const (
	OperUnknown        = iota // Status can't be determined.
	OperNotPresent            // Some component is missing.
	OperDown                  // Down.
	OperLowerLayerDown        // Down due to state of lower layer.
	OperTesting               // In some test mode.
	OperDormant               // Not up but pending an external event.
	OperUp                    // Up, ready to send packets.
)

func (s LinkOperState) String() string {
	switch s {
	case OperNotPresent:
		return "not-present"
	case OperDown:
		return "down"
	case OperLowerLayerDown:
		return "lower-layer-down"
	case OperTesting:
		return "testing"
	case OperDormant:
		return "dormant"
	case OperUp:
		return "up"
	default:
		return "unknown"
	}
}

// NewLinkAttrs returns LinkAttrs structure filled with default values
func NewLinkAttrs() LinkAttrs {
	return LinkAttrs{
		NetNsID: -1,
		TxQLen:  -1,
	}
}

type LinkStatistics LinkStatistics64

/*
Ref: struct rtnl_link_stats {...}
*/
type LinkStatistics32 struct {
	RxPackets         uint32
	TxPackets         uint32
	RxBytes           uint32
	TxBytes           uint32
	RxErrors          uint32
	TxErrors          uint32
	RxDropped         uint32
	TxDropped         uint32
	Multicast         uint32
	Collisions        uint32
	RxLengthErrors    uint32
	RxOverErrors      uint32
	RxCrcErrors       uint32
	RxFrameErrors     uint32
	RxFifoErrors      uint32
	RxMissedErrors    uint32
	TxAbortedErrors   uint32
	TxCarrierErrors   uint32
	TxFifoErrors      uint32
	TxHeartbeatErrors uint32
	TxWindowErrors    uint32
	RxCompressed      uint32
	TxCompressed      uint32
}

func (s32 LinkStatistics32) to64() *LinkStatistics64 {
	return &LinkStatistics64{
		RxPackets:         uint64(s32.RxPackets),
		TxPackets:         uint64(s32.TxPackets),
		RxBytes:           uint64(s32.RxBytes),
		TxBytes:           uint64(s32.TxBytes),
		RxErrors:          uint64(s32.RxErrors),
		TxErrors:          uint64(s32.TxErrors),
		RxDropped:         uint64(s32.RxDropped),
		TxDropped:         uint64(s32.TxDropped),
		Multicast:         uint64(s32.Multicast),
		Collisions:        uint64(s32.Collisions),
		RxLengthErrors:    uint64(s32.RxLengthErrors),
		RxOverErrors:      uint64(s32.RxOverErrors),
		RxCrcErrors:       uint64(s32.RxCrcErrors),
		RxFrameErrors:     uint64(s32.RxFrameErrors),
		RxFifoErrors:      uint64(s32.RxFifoErrors),
		RxMissedErrors:    uint64(s32.RxMissedErrors),
		TxAbortedErrors:   uint64(s32.TxAbortedErrors),
		TxCarrierErrors:   uint64(s32.TxCarrierErrors),
		TxFifoErrors:      uint64(s32.TxFifoErrors),
		TxHeartbeatErrors: uint64(s32.TxHeartbeatErrors),
		TxWindowErrors:    uint64(s32.TxWindowErrors),
		RxCompressed:      uint64(s32.RxCompressed),
		TxCompressed:      uint64(s32.TxCompressed),
	}
}

/*
Ref: struct rtnl_link_stats64 {...}
*/
type LinkStatistics64 struct {
	RxPackets         uint64
	TxPackets         uint64
	RxBytes           uint64
	TxBytes           uint64
	RxErrors          uint64
	TxErrors          uint64
	RxDropped         uint64
	TxDropped         uint64
	Multicast         uint64
	Collisions        uint64
	RxLengthErrors    uint64
	RxOverErrors      uint64
	RxCrcErrors       uint64
	RxFrameErrors     uint64
	RxFifoErrors      uint64
	RxMissedErrors    uint64
	TxAbortedErrors   uint64
	TxCarrierErrors   uint64
	TxFifoErrors      uint64
	TxHeartbeatErrors uint64
	TxWindowErrors    uint64
	RxCompressed      uint64
	TxCompressed      uint64
}

type LinkXdp struct {
	Fd         int
	Attached   bool
	AttachMode uint32
	Flags      uint32
	ProgId     uint32
}

// Device links cannot be created via netlink. These links
// are links created by udev like 'lo' and 'etho0'
type Device struct {
	LinkAttrs
}

func (device *Device) Attrs() *LinkAttrs {
	return &device.LinkAttrs
}

func (device *Device) Type() string {
	return "device"
}

// Dummy links are dummy ethernet devices
type Dummy struct {
	LinkAttrs
}

func (dummy *Dummy) Attrs() *LinkAttrs {
	return &dummy.LinkAttrs
}

func (dummy *Dummy) Type() string {
	return "dummy"
}

// Ifb links are advanced dummy devices for packet filtering
type Ifb struct {
	LinkAttrs
}

func (ifb *Ifb) Attrs() *LinkAttrs {
	return &ifb.LinkAttrs
}

func (ifb *Ifb) Type() string {
	return "ifb"
}

// Bridge links are simple linux bridges
type Bridge struct {
	LinkAttrs
	MulticastSnooping *bool
	AgeingTime        *uint32
	HelloTime         *uint32
	VlanFiltering     *bool
}

func (bridge *Bridge) Attrs() *LinkAttrs {
	return &bridge.LinkAttrs
}

func (bridge *Bridge) Type() string {
	return "bridge"
}

// Vlan links have ParentIndex set in their Attrs()
type Vlan struct {
	LinkAttrs
	VlanId       int
	VlanProtocol VlanProtocol
}

func (vlan *Vlan) Attrs() *LinkAttrs {
	return &vlan.LinkAttrs
}

func (vlan *Vlan) Type() string {
	return "vlan"
}

type MacvlanMode uint16

const (
	MACVLAN_MODE_DEFAULT MacvlanMode = iota
	MACVLAN_MODE_PRIVATE
	MACVLAN_MODE_VEPA
	MACVLAN_MODE_BRIDGE
	MACVLAN_MODE_PASSTHRU
	MACVLAN_MODE_SOURCE
)

// Macvlan links have ParentIndex set in their Attrs()
type Macvlan struct {
	LinkAttrs
	Mode MacvlanMode

	// MACAddrs is only populated for Macvlan SOURCE links
	MACAddrs []net.HardwareAddr
}

func (macvlan *Macvlan) Attrs() *LinkAttrs {
	return &macvlan.LinkAttrs
}

func (macvlan *Macvlan) Type() string {
	return "macvlan"
}

// Macvtap - macvtap is a virtual interfaces based on macvlan
type Macvtap struct {
	Macvlan
}

func (macvtap Macvtap) Type() string {
	return "macvtap"
}

type TuntapMode uint16
type TuntapFlag uint16

// Tuntap links created via /dev/tun/tap, but can be destroyed via netlink
type Tuntap struct {
	LinkAttrs
	Mode       TuntapMode
	Flags      TuntapFlag
	NonPersist bool
	Queues     int
	Fds        []*os.File
	Owner      uint32
	Group      uint32
}

func (tuntap *Tuntap) Attrs() *LinkAttrs {
	return &tuntap.LinkAttrs
}

func (tuntap *Tuntap) Type() string {
	return "tuntap"
}

// Veth devices must specify PeerName on create
type Veth struct {
	LinkAttrs
	PeerName         string // veth on create only
	PeerHardwareAddr net.HardwareAddr
	PeerNamespace    interface{}
}

func (veth *Veth) Attrs() *LinkAttrs {
	return &veth.LinkAttrs
}

func (veth *Veth) Type() string {
	return "veth"
}

// Wireguard represent links of type "wireguard", see https://www.wireguard.com/
type Wireguard struct {
	LinkAttrs
}

func (wg *Wireguard) Attrs() *LinkAttrs {
	return &wg.LinkAttrs
}

func (wg *Wireguard) Type() string {
	return "wireguard"
}

// GenericLink links represent types that are not currently understood
// by this netlink library.
type GenericLink struct {
	LinkAttrs
	LinkType string
}

func (generic *GenericLink) Attrs() *LinkAttrs {
	return &generic.LinkAttrs
}

func (generic *GenericLink) Type() string {
	return generic.LinkType
}

type Vxlan struct {
	LinkAttrs
	VxlanId        int
	VtepDevIndex   int
	SrcAddr        net.IP
	Group          net.IP
	TTL            int
	TOS            int
	Learning       bool
	Proxy          bool
	RSC            bool
	L2miss         bool
	L3miss         bool
	UDPCSum        bool
	UDP6ZeroCSumTx bool
	UDP6ZeroCSumRx bool
	NoAge          bool
	GBP            bool
	FlowBased      bool
	Age            int
	Limit          int
	Port           int
	PortLow        int
	PortHigh       int
}

func (vxlan *Vxlan) Attrs() *LinkAttrs {
	return &vxlan.LinkAttrs
}

func (vxlan *Vxlan) Type() string {
	return "vxlan"
}

type IPVlanMode uint16

const (
	IPVLAN_MODE_L2 IPVlanMode = iota
	IPVLAN_MODE_L3
	IPVLAN_MODE_L3S
	IPVLAN_MODE_MAX
)

type IPVlanFlag uint16

const (
	IPVLAN_FLAG_BRIDGE IPVlanFlag = iota
	IPVLAN_FLAG_PRIVATE
	IPVLAN_FLAG_VEPA
)

type IPVlan struct {
	LinkAttrs
	Mode IPVlanMode
	Flag IPVlanFlag
}

func (ipvlan *IPVlan) Attrs() *LinkAttrs {
	return &ipvlan.LinkAttrs
}

func (ipvlan *IPVlan) Type() string {
	return "ipvlan"
}

// IPVtap - IPVtap is a virtual interfaces based on ipvlan
type IPVtap struct {
	IPVlan
}

func (ipvtap *IPVtap) Attrs() *LinkAttrs {
	return &ipvtap.LinkAttrs
}

func (ipvtap IPVtap) Type() string {
	return "ipvtap"
}

// VlanProtocol type
type VlanProtocol int

func (p VlanProtocol) String() string {
	s, ok := VlanProtocolToString[p]
	if !ok {
		return fmt.Sprintf("VlanProtocol(%d)", p)
	}
	return s
}

// StringToVlanProtocol returns vlan protocol, or unknown is the s is invalid.
func StringToVlanProtocol(s string) VlanProtocol {
	mode, ok := StringToVlanProtocolMap[s]
	if !ok {
		return VLAN_PROTOCOL_UNKNOWN
	}
	return mode
}

// VlanProtocol possible values
const (
	VLAN_PROTOCOL_UNKNOWN VlanProtocol = 0
	VLAN_PROTOCOL_8021Q   VlanProtocol = 0x8100
	VLAN_PROTOCOL_8021AD  VlanProtocol = 0x88A8
)

var VlanProtocolToString = map[VlanProtocol]string{
	VLAN_PROTOCOL_8021Q:  "802.1q",
	VLAN_PROTOCOL_8021AD: "802.1ad",
}

var StringToVlanProtocolMap = map[string]VlanProtocol{
	"802.1q":  VLAN_PROTOCOL_8021Q,
	"802.1ad": VLAN_PROTOCOL_8021AD,
}

// BondMode type
type BondMode int

func (b BondMode) String() string {
	s, ok := bondModeToString[b]
	if !ok {
		return fmt.Sprintf("BondMode(%d)", b)
	}
	return s
}

// StringToBondMode returns bond mode, or unknown is the s is invalid.
func StringToBondMode(s string) BondMode {
	mode, ok := StringToBondModeMap[s]
	if !ok {
		return BOND_MODE_UNKNOWN
	}
	return mode
}

// Possible BondMode
const (
	BOND_MODE_BALANCE_RR BondMode = iota
	BOND_MODE_ACTIVE_BACKUP
	BOND_MODE_BALANCE_XOR
	BOND_MODE_BROADCAST
	BOND_MODE_802_3AD
	BOND_MODE_BALANCE_TLB
	BOND_MODE_BALANCE_ALB
	BOND_MODE_UNKNOWN
)

var bondModeToString = map[BondMode]string{
	BOND_MODE_BALANCE_RR:    "balance-rr",
	BOND_MODE_ACTIVE_BACKUP: "active-backup",
	BOND_MODE_BALANCE_XOR:   "balance-xor",
	BOND_MODE_BROADCAST:     "broadcast",
	BOND_MODE_802_3AD:       "802.3ad",
	BOND_MODE_BALANCE_TLB:   "balance-tlb",
	BOND_MODE_BALANCE_ALB:   "balance-alb",
}
var StringToBondModeMap = map[string]BondMode{
	"balance-rr":    BOND_MODE_BALANCE_RR,
	"active-backup": BOND_MODE_ACTIVE_BACKUP,
	"balance-xor":   BOND_MODE_BALANCE_XOR,
	"broadcast":     BOND_MODE_BROADCAST,
	"802.3ad":       BOND_MODE_802_3AD,
	"balance-tlb":   BOND_MODE_BALANCE_TLB,
	"balance-alb":   BOND_MODE_BALANCE_ALB,
}

// BondArpValidate type
type BondArpValidate int

// Possible BondArpValidate value
const (
	BOND_ARP_VALIDATE_NONE BondArpValidate = iota
	BOND_ARP_VALIDATE_ACTIVE
	BOND_ARP_VALIDATE_BACKUP
	BOND_ARP_VALIDATE_ALL
)

var bondArpValidateToString = map[BondArpValidate]string{
	BOND_ARP_VALIDATE_NONE:   "none",
	BOND_ARP_VALIDATE_ACTIVE: "active",
	BOND_ARP_VALIDATE_BACKUP: "backup",
	BOND_ARP_VALIDATE_ALL:    "none",
}
var StringToBondArpValidateMap = map[string]BondArpValidate{
	"none":   BOND_ARP_VALIDATE_NONE,
	"active": BOND_ARP_VALIDATE_ACTIVE,
	"backup": BOND_ARP_VALIDATE_BACKUP,
	"all":    BOND_ARP_VALIDATE_ALL,
}

func (b BondArpValidate) String() string {
	s, ok := bondArpValidateToString[b]
	if !ok {
		return fmt.Sprintf("BondArpValidate(%d)", b)
	}
	return s
}

// BondPrimaryReselect type
type BondPrimaryReselect int

// Possible BondPrimaryReselect value
const (
	BOND_PRIMARY_RESELECT_ALWAYS BondPrimaryReselect = iota
	BOND_PRIMARY_RESELECT_BETTER
	BOND_PRIMARY_RESELECT_FAILURE
)

var bondPrimaryReselectToString = map[BondPrimaryReselect]string{
	BOND_PRIMARY_RESELECT_ALWAYS:  "always",
	BOND_PRIMARY_RESELECT_BETTER:  "better",
	BOND_PRIMARY_RESELECT_FAILURE: "failure",
}
var StringToBondPrimaryReselectMap = map[string]BondPrimaryReselect{
	"always":  BOND_PRIMARY_RESELECT_ALWAYS,
	"better":  BOND_PRIMARY_RESELECT_BETTER,
	"failure": BOND_PRIMARY_RESELECT_FAILURE,
}

func (b BondPrimaryReselect) String() string {
	s, ok := bondPrimaryReselectToString[b]
	if !ok {
		return fmt.Sprintf("BondPrimaryReselect(%d)", b)
	}
	return s
}

// BondArpAllTargets type
type BondArpAllTargets int

// Possible BondArpAllTargets value
const (
	BOND_ARP_ALL_TARGETS_ANY BondArpAllTargets = iota
	BOND_ARP_ALL_TARGETS_ALL
)

var bondArpAllTargetsToString = map[BondArpAllTargets]string{
	BOND_ARP_ALL_TARGETS_ANY: "any",
	BOND_ARP_ALL_TARGETS_ALL: "all",
}
var StringToBondArpAllTargetsMap = map[string]BondArpAllTargets{
	"any": BOND_ARP_ALL_TARGETS_ANY,
	"all": BOND_ARP_ALL_TARGETS_ALL,
}

func (b BondArpAllTargets) String() string {
	s, ok := bondArpAllTargetsToString[b]
	if !ok {
		return fmt.Sprintf("BondArpAllTargets(%d)", b)
	}
	return s
}

// BondFailOverMac type
type BondFailOverMac int

// Possible BondFailOverMac value
const (
	BOND_FAIL_OVER_MAC_NONE BondFailOverMac = iota
	BOND_FAIL_OVER_MAC_ACTIVE
	BOND_FAIL_OVER_MAC_FOLLOW
)

var bondFailOverMacToString = map[BondFailOverMac]string{
	BOND_FAIL_OVER_MAC_NONE:   "none",
	BOND_FAIL_OVER_MAC_ACTIVE: "active",
	BOND_FAIL_OVER_MAC_FOLLOW: "follow",
}
var StringToBondFailOverMacMap = map[string]BondFailOverMac{
	"none":   BOND_FAIL_OVER_MAC_NONE,
	"active": BOND_FAIL_OVER_MAC_ACTIVE,
	"follow": BOND_FAIL_OVER_MAC_FOLLOW,
}

func (b BondFailOverMac) String() string {
	s, ok := bondFailOverMacToString[b]
	if !ok {
		return fmt.Sprintf("BondFailOverMac(%d)", b)
	}
	return s
}

// BondXmitHashPolicy type
type BondXmitHashPolicy int

func (b BondXmitHashPolicy) String() string {
	s, ok := bondXmitHashPolicyToString[b]
	if !ok {
		return fmt.Sprintf("XmitHashPolicy(%d)", b)
	}
	return s
}

// StringToBondXmitHashPolicy returns bond lacp arte, or unknown is the s is invalid.
func StringToBondXmitHashPolicy(s string) BondXmitHashPolicy {
	lacp, ok := StringToBondXmitHashPolicyMap[s]
	if !ok {
		return BOND_XMIT_HASH_POLICY_UNKNOWN
	}
	return lacp
}

// Possible BondXmitHashPolicy value
const (
	BOND_XMIT_HASH_POLICY_LAYER2 BondXmitHashPolicy = iota
	BOND_XMIT_HASH_POLICY_LAYER3_4
	BOND_XMIT_HASH_POLICY_LAYER2_3
	BOND_XMIT_HASH_POLICY_ENCAP2_3
	BOND_XMIT_HASH_POLICY_ENCAP3_4
	BOND_XMIT_HASH_POLICY_UNKNOWN
)

var bondXmitHashPolicyToString = map[BondXmitHashPolicy]string{
	BOND_XMIT_HASH_POLICY_LAYER2:   "layer2",
	BOND_XMIT_HASH_POLICY_LAYER3_4: "layer3+4",
	BOND_XMIT_HASH_POLICY_LAYER2_3: "layer2+3",
	BOND_XMIT_HASH_POLICY_ENCAP2_3: "encap2+3",
	BOND_XMIT_HASH_POLICY_ENCAP3_4: "encap3+4",
}
var StringToBondXmitHashPolicyMap = map[string]BondXmitHashPolicy{
	"layer2":   BOND_XMIT_HASH_POLICY_LAYER2,
	"layer3+4": BOND_XMIT_HASH_POLICY_LAYER3_4,
	"layer2+3": BOND_XMIT_HASH_POLICY_LAYER2_3,
	"encap2+3": BOND_XMIT_HASH_POLICY_ENCAP2_3,
	"encap3+4": BOND_XMIT_HASH_POLICY_ENCAP3_4,
}

// BondLacpRate type
type BondLacpRate int

func (b BondLacpRate) String() string {
	s, ok := bondLacpRateToString[b]
	if !ok {
		return fmt.Sprintf("LacpRate(%d)", b)
	}
	return s
}

// StringToBondLacpRate returns bond lacp arte, or unknown is the s is invalid.
func StringToBondLacpRate(s string) BondLacpRate {
	lacp, ok := StringToBondLacpRateMap[s]
	if !ok {
		return BOND_LACP_RATE_UNKNOWN
	}
	return lacp
}

// Possible BondLacpRate value
const (
	BOND_LACP_RATE_SLOW BondLacpRate = iota
	BOND_LACP_RATE_FAST
	BOND_LACP_RATE_UNKNOWN
)

var bondLacpRateToString = map[BondLacpRate]string{
	BOND_LACP_RATE_SLOW: "slow",
	BOND_LACP_RATE_FAST: "fast",
}
var StringToBondLacpRateMap = map[string]BondLacpRate{
	"slow": BOND_LACP_RATE_SLOW,
	"fast": BOND_LACP_RATE_FAST,
}

// BondAdSelect type
type BondAdSelect int

// Possible BondAdSelect value
const (
	BOND_AD_SELECT_STABLE BondAdSelect = iota
	BOND_AD_SELECT_BANDWIDTH
	BOND_AD_SELECT_COUNT
)

var bondAdSelectToString = map[BondAdSelect]string{
	BOND_AD_SELECT_STABLE:    "stable",
	BOND_AD_SELECT_BANDWIDTH: "bandwidth",
	BOND_AD_SELECT_COUNT:     "count",
}
var StringToBondAdSelectMap = map[string]BondAdSelect{
	"stable":    BOND_AD_SELECT_STABLE,
	"bandwidth": BOND_AD_SELECT_BANDWIDTH,
	"count":     BOND_AD_SELECT_COUNT,
}

func (b BondAdSelect) String() string {
	s, ok := bondAdSelectToString[b]
	if !ok {
		return fmt.Sprintf("BondAdSelect(%d)", b)
	}
	return s
}

// BondAdInfo represents ad info for bond
type BondAdInfo struct {
	AggregatorId int
	NumPorts     int
	ActorKey     int
	PartnerKey   int
	PartnerMac   net.HardwareAddr
}

// Bond representation
type Bond struct {
	LinkAttrs
	Mode            BondMode
	ActiveSlave     int
	Miimon          int
	UpDelay         int
	DownDelay       int
	UseCarrier      int
	ArpInterval     int
	ArpIpTargets    []net.IP
	ArpValidate     BondArpValidate
	ArpAllTargets   BondArpAllTargets
	Primary         int
	PrimaryReselect BondPrimaryReselect
	FailOverMac     BondFailOverMac
	XmitHashPolicy  BondXmitHashPolicy
	ResendIgmp      int
	NumPeerNotif    int
	AllSlavesActive int
	MinLinks        int
	LpInterval      int
	PacketsPerSlave int
	LacpRate        BondLacpRate
	AdSelect        BondAdSelect
	// looking at iproute tool AdInfo can only be retrived. It can't be set.
	AdInfo         *BondAdInfo
	AdActorSysPrio int
	AdUserPortKey  int
	AdActorSystem  net.HardwareAddr
	TlbDynamicLb   int
}

func NewLinkBond(atr LinkAttrs) *Bond {
	return &Bond{
		LinkAttrs:       atr,
		Mode:            -1,
		ActiveSlave:     -1,
		Miimon:          -1,
		UpDelay:         -1,
		DownDelay:       -1,
		UseCarrier:      -1,
		ArpInterval:     -1,
		ArpIpTargets:    nil,
		ArpValidate:     -1,
		ArpAllTargets:   -1,
		Primary:         -1,
		PrimaryReselect: -1,
		FailOverMac:     -1,
		XmitHashPolicy:  -1,
		ResendIgmp:      -1,
		NumPeerNotif:    -1,
		AllSlavesActive: -1,
		MinLinks:        -1,
		LpInterval:      -1,
		PacketsPerSlave: -1,
		LacpRate:        -1,
		AdSelect:        -1,
		AdActorSysPrio:  -1,
		AdUserPortKey:   -1,
		AdActorSystem:   nil,
		TlbDynamicLb:    -1,
	}
}

// Flag mask for bond options. Bond.Flagmask must be set to on for option to work.
const (
	BOND_MODE_MASK uint64 = 1 << (1 + iota)
	BOND_ACTIVE_SLAVE_MASK
	BOND_MIIMON_MASK
	BOND_UPDELAY_MASK
	BOND_DOWNDELAY_MASK
	BOND_USE_CARRIER_MASK
	BOND_ARP_INTERVAL_MASK
	BOND_ARP_VALIDATE_MASK
	BOND_ARP_ALL_TARGETS_MASK
	BOND_PRIMARY_MASK
	BOND_PRIMARY_RESELECT_MASK
	BOND_FAIL_OVER_MAC_MASK
	BOND_XMIT_HASH_POLICY_MASK
	BOND_RESEND_IGMP_MASK
	BOND_NUM_PEER_NOTIF_MASK
	BOND_ALL_SLAVES_ACTIVE_MASK
	BOND_MIN_LINKS_MASK
	BOND_LP_INTERVAL_MASK
	BOND_PACKETS_PER_SLAVE_MASK
	BOND_LACP_RATE_MASK
	BOND_AD_SELECT_MASK
)

// Attrs implementation.
func (bond *Bond) Attrs() *LinkAttrs {
	return &bond.LinkAttrs
}

// Type implementation fro Vxlan.
func (bond *Bond) Type() string {
	return "bond"
}

// BondSlaveState represents the values of the IFLA_BOND_SLAVE_STATE bond slave
// attribute, which contains the state of the bond slave.
type BondSlaveState uint8

const (
	//BondStateActive Link is active.
	BondStateActive BondSlaveState = iota
	//BondStateBackup Link is backup.
	BondStateBackup
)

func (s BondSlaveState) String() string {
	switch s {
	case BondStateActive:
		return "ACTIVE"
	case BondStateBackup:
		return "BACKUP"
	default:
		return strconv.Itoa(int(s))
	}
}

// BondSlaveMiiStatus represents the values of the IFLA_BOND_SLAVE_MII_STATUS bond slave
// attribute, which contains the status of MII link monitoring
type BondSlaveMiiStatus uint8

const (
	//BondLinkUp link is up and running.
	BondLinkUp BondSlaveMiiStatus = iota
	//BondLinkFail link has just gone down.
	BondLinkFail
	//BondLinkDown link has been down for too long time.
	BondLinkDown
	//BondLinkBack link is going back.
	BondLinkBack
)

func (s BondSlaveMiiStatus) String() string {
	switch s {
	case BondLinkUp:
		return "UP"
	case BondLinkFail:
		return "GOING_DOWN"
	case BondLinkDown:
		return "DOWN"
	case BondLinkBack:
		return "GOING_BACK"
	default:
		return strconv.Itoa(int(s))
	}
}

type BondSlave struct {
	State                  BondSlaveState
	MiiStatus              BondSlaveMiiStatus
	LinkFailureCount       uint32
	PermHardwareAddr       net.HardwareAddr
	QueueId                uint16
	AggregatorId           uint16
	AdActorOperPortState   uint8
	AdPartnerOperPortState uint16
}

func (b *BondSlave) SlaveType() string {
	return "bond"
}

type VrfSlave struct {
	Table uint32
}

func (v *VrfSlave) SlaveType() string {
	return "vrf"
}

// Geneve devices must specify RemoteIP and ID (VNI) on create
// https://github.com/torvalds/linux/blob/47ec5303d73ea344e84f46660fff693c57641386/drivers/net/geneve.c#L1209-L1223
type Geneve struct {
	LinkAttrs
	ID             uint32 // vni
	Remote         net.IP
	Ttl            uint8
	Tos            uint8
	Dport          uint16
	UdpCsum        uint8
	UdpZeroCsum6Tx uint8
	UdpZeroCsum6Rx uint8
	Link           uint32
	FlowBased      bool
}

func (geneve *Geneve) Attrs() *LinkAttrs {
	return &geneve.LinkAttrs
}

func (geneve *Geneve) Type() string {
	return "geneve"
}

// Gretap devices must specify LocalIP and RemoteIP on create
type Gretap struct {
	LinkAttrs
	IKey       uint32
	OKey       uint32
	EncapSport uint16
	EncapDport uint16
	Local      net.IP
	Remote     net.IP
	IFlags     uint16
	OFlags     uint16
	PMtuDisc   uint8
	Ttl        uint8
	Tos        uint8
	EncapType  uint16
	EncapFlags uint16
	Link       uint32
	FlowBased  bool
}

func (gretap *Gretap) Attrs() *LinkAttrs {
	return &gretap.LinkAttrs
}

func (gretap *Gretap) Type() string {
	if gretap.Local.To4() == nil {
		return "ip6gretap"
	}
	return "gretap"
}

type Iptun struct {
	LinkAttrs
	Ttl        uint8
	Tos        uint8
	PMtuDisc   uint8
	Link       uint32
	Local      net.IP
	Remote     net.IP
	EncapSport uint16
	EncapDport uint16
	EncapType  uint16
	EncapFlags uint16
	FlowBased  bool
	Proto      uint8
}

func (iptun *Iptun) Attrs() *LinkAttrs {
	return &iptun.LinkAttrs
}

func (iptun *Iptun) Type() string {
	return "ipip"
}

type Ip6tnl struct {
	LinkAttrs
	Link       uint32
	Local      net.IP
	Remote     net.IP
	Ttl        uint8
	Tos        uint8
	Flags      uint32
	Proto      uint8
	FlowInfo   uint32
	EncapLimit uint8
	EncapType  uint16
	EncapFlags uint16
	EncapSport uint16
	EncapDport uint16
}

func (ip6tnl *Ip6tnl) Attrs() *LinkAttrs {
	return &ip6tnl.LinkAttrs
}

func (ip6tnl *Ip6tnl) Type() string {
	return "ip6tnl"
}

// from https://elixir.bootlin.com/linux/v5.15.4/source/include/uapi/linux/if_tunnel.h#L84
type TunnelEncapType uint16

const (
	None TunnelEncapType = iota
	FOU
	GUE
)

// from https://elixir.bootlin.com/linux/v5.15.4/source/include/uapi/linux/if_tunnel.h#L91
type TunnelEncapFlag uint16

const (
	CSum    TunnelEncapFlag = 1 << 0
	CSum6                   = 1 << 1
	RemCSum                 = 1 << 2
)

// from https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/ip6_tunnel.h#L12
type IP6TunnelFlag uint16

const (
	IP6_TNL_F_IGN_ENCAP_LIMIT    IP6TunnelFlag = 1  // don't add encapsulation limit if one isn't present in inner packet
	IP6_TNL_F_USE_ORIG_TCLASS                  = 2  // copy the traffic class field from the inner packet
	IP6_TNL_F_USE_ORIG_FLOWLABEL               = 4  // copy the flowlabel from the inner packet
	IP6_TNL_F_MIP6_DEV                         = 8  // being used for Mobile IPv6
	IP6_TNL_F_RCV_DSCP_COPY                    = 10 // copy DSCP from the outer packet
	IP6_TNL_F_USE_ORIG_FWMARK                  = 20 // copy fwmark from inner packet
	IP6_TNL_F_ALLOW_LOCAL_REMOTE               = 40 // allow remote endpoint on the local node
)

type Sittun struct {
	LinkAttrs
	Link       uint32
	Ttl        uint8
	Tos        uint8
	PMtuDisc   uint8
	Proto      uint8
	Local      net.IP
	Remote     net.IP
	EncapLimit uint8
	EncapType  uint16
	EncapFlags uint16
	EncapSport uint16
	EncapDport uint16
}

func (sittun *Sittun) Attrs() *LinkAttrs {
	return &sittun.LinkAttrs
}

func (sittun *Sittun) Type() string {
	return "sit"
}

type Vti struct {
	LinkAttrs
	IKey   uint32
	OKey   uint32
	Link   uint32
	Local  net.IP
	Remote net.IP
}

func (vti *Vti) Attrs() *LinkAttrs {
	return &vti.LinkAttrs
}

func (vti *Vti) Type() string {
	if vti.Local.To4() == nil {
		return "vti6"
	}
	return "vti"
}

type Gretun struct {
	LinkAttrs
	Link       uint32
	IFlags     uint16
	OFlags     uint16
	IKey       uint32
	OKey       uint32
	Local      net.IP
	Remote     net.IP
	Ttl        uint8
	Tos        uint8
	PMtuDisc   uint8
	EncapType  uint16
	EncapFlags uint16
	EncapSport uint16
	EncapDport uint16
}

func (gretun *Gretun) Attrs() *LinkAttrs {
	return &gretun.LinkAttrs
}

func (gretun *Gretun) Type() string {
	if gretun.Local.To4() == nil {
		return "ip6gre"
	}
	return "gre"
}

type Vrf struct {
	LinkAttrs
	Table uint32
}

func (vrf *Vrf) Attrs() *LinkAttrs {
	return &vrf.LinkAttrs
}

func (vrf *Vrf) Type() string {
	return "vrf"
}

type GTP struct {
	LinkAttrs
	FD0         int
	FD1         int
	Role        int
	PDPHashsize int
}

func (gtp *GTP) Attrs() *LinkAttrs {
	return &gtp.LinkAttrs
}

func (gtp *GTP) Type() string {
	return "gtp"
}

// Virtual XFRM Interfaces
//	Named "xfrmi" to prevent confusion with XFRM objects
type Xfrmi struct {
	LinkAttrs
	Ifid uint32
}

func (xfrm *Xfrmi) Attrs() *LinkAttrs {
	return &xfrm.LinkAttrs
}

func (xfrm *Xfrmi) Type() string {
	return "xfrm"
}

// IPoIB interface

type IPoIBMode uint16

func (m *IPoIBMode) String() string {
	str, ok := iPoIBModeToString[*m]
	if !ok {
		return fmt.Sprintf("mode(%d)", *m)
	}
	return str
}

const (
	IPOIB_MODE_DATAGRAM = iota
	IPOIB_MODE_CONNECTED
)

var iPoIBModeToString = map[IPoIBMode]string{
	IPOIB_MODE_DATAGRAM:  "datagram",
	IPOIB_MODE_CONNECTED: "connected",
}

var StringToIPoIBMode = map[string]IPoIBMode{
	"datagram":  IPOIB_MODE_DATAGRAM,
	"connected": IPOIB_MODE_CONNECTED,
}

const (
	CAN_STATE_ERROR_ACTIVE = iota
	CAN_STATE_ERROR_WARNING
	CAN_STATE_ERROR_PASSIVE
	CAN_STATE_BUS_OFF
	CAN_STATE_STOPPED
	CAN_STATE_SLEEPING
)

type Can struct {
	LinkAttrs

	BitRate            uint32
	SamplePoint        uint32
	TimeQuanta         uint32
	PropagationSegment uint32
	PhaseSegment1      uint32
	PhaseSegment2      uint32
	SyncJumpWidth      uint32
	BitRatePreScaler   uint32

	Name                string
	TimeSegment1Min     uint32
	TimeSegment1Max     uint32
	TimeSegment2Min     uint32
	TimeSegment2Max     uint32
	SyncJumpWidthMax    uint32
	BitRatePreScalerMin uint32
	BitRatePreScalerMax uint32
	BitRatePreScalerInc uint32

	ClockFrequency uint32

	State uint32

	Mask  uint32
	Flags uint32

	TxError uint16
	RxError uint16

	RestartMs uint32
}

func (can *Can) Attrs() *LinkAttrs {
	return &can.LinkAttrs
}

func (can *Can) Type() string {
	return "can"
}

type IPoIB struct {
	LinkAttrs
	Pkey   uint16
	Mode   IPoIBMode
	Umcast uint16
}

func (ipoib *IPoIB) Attrs() *LinkAttrs {
	return &ipoib.LinkAttrs
}

func (ipoib *IPoIB) Type() string {
	return "ipoib"
}

type BareUDP struct {
	LinkAttrs
	Port       uint16
	EtherType  uint16
	SrcPortMin uint16
	MultiProto bool
}

func (bareudp *BareUDP) Attrs() *LinkAttrs {
	return &bareudp.LinkAttrs
}

func (bareudp *BareUDP) Type() string {
	return "bareudp"
}

// iproute2 supported devices;
// vlan | veth | vcan | dummy | ifb | macvlan | macvtap |
// bridge | bond | ipoib | ip6tnl | ipip | sit | vxlan |
// gre | gretap | ip6gre | ip6gretap | vti | vti6 | nlmon |
// bond_slave | ipvlan | xfrm | bareudp

// LinkNotFoundError wraps the various not found errors when
// getting/reading links. This is intended for better error
// handling by dependent code so that "not found error" can
// be distinguished from other errors
type LinkNotFoundError struct {
	error
}
  07070100000C26000081A4000000000000000000000001645E367C00019104000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/link_linux.go   package netlink

import (
	"bytes"
	"encoding/binary"
	"fmt"
	"io/ioutil"
	"net"
	"os"
	"strconv"
	"strings"
	"syscall"
	"unsafe"

	"github.com/vishvananda/netlink/nl"
	"github.com/vishvananda/netns"
	"golang.org/x/sys/unix"
)

const (
	SizeofLinkStats32 = 0x5c
	SizeofLinkStats64 = 0xb8
)

const (
	TUNTAP_MODE_TUN             TuntapMode = unix.IFF_TUN
	TUNTAP_MODE_TAP             TuntapMode = unix.IFF_TAP
	TUNTAP_DEFAULTS             TuntapFlag = unix.IFF_TUN_EXCL | unix.IFF_ONE_QUEUE
	TUNTAP_VNET_HDR             TuntapFlag = unix.IFF_VNET_HDR
	TUNTAP_TUN_EXCL             TuntapFlag = unix.IFF_TUN_EXCL
	TUNTAP_NO_PI                TuntapFlag = unix.IFF_NO_PI
	TUNTAP_ONE_QUEUE            TuntapFlag = unix.IFF_ONE_QUEUE
	TUNTAP_MULTI_QUEUE          TuntapFlag = unix.IFF_MULTI_QUEUE
	TUNTAP_MULTI_QUEUE_DEFAULTS TuntapFlag = TUNTAP_MULTI_QUEUE | TUNTAP_NO_PI
)

var StringToTuntapModeMap = map[string]TuntapMode{
	"tun": TUNTAP_MODE_TUN,
	"tap": TUNTAP_MODE_TAP,
}

func (ttm TuntapMode) String() string {
	switch ttm {
	case TUNTAP_MODE_TUN:
		return "tun"
	case TUNTAP_MODE_TAP:
		return "tap"
	}
	return "unknown"
}

const (
	VF_LINK_STATE_AUTO    uint32 = 0
	VF_LINK_STATE_ENABLE  uint32 = 1
	VF_LINK_STATE_DISABLE uint32 = 2
)

var macvlanModes = [...]uint32{
	0,
	nl.MACVLAN_MODE_PRIVATE,
	nl.MACVLAN_MODE_VEPA,
	nl.MACVLAN_MODE_BRIDGE,
	nl.MACVLAN_MODE_PASSTHRU,
	nl.MACVLAN_MODE_SOURCE,
}

func ensureIndex(link *LinkAttrs) {
	if link != nil && link.Index == 0 {
		newlink, _ := LinkByName(link.Name)
		if newlink != nil {
			link.Index = newlink.Attrs().Index
		}
	}
}

func (h *Handle) ensureIndex(link *LinkAttrs) {
	if link != nil && link.Index == 0 {
		newlink, _ := h.LinkByName(link.Name)
		if newlink != nil {
			link.Index = newlink.Attrs().Index
		}
	}
}

func (h *Handle) LinkSetARPOff(link Link) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Change |= unix.IFF_NOARP
	msg.Flags |= unix.IFF_NOARP
	msg.Index = int32(base.Index)
	req.AddData(msg)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

func LinkSetARPOff(link Link) error {
	return pkgHandle.LinkSetARPOff(link)
}

func (h *Handle) LinkSetARPOn(link Link) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Change |= unix.IFF_NOARP
	msg.Flags &= ^uint32(unix.IFF_NOARP)
	msg.Index = int32(base.Index)
	req.AddData(msg)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

func LinkSetARPOn(link Link) error {
	return pkgHandle.LinkSetARPOn(link)
}

func (h *Handle) SetPromiscOn(link Link) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Change = unix.IFF_PROMISC
	msg.Flags = unix.IFF_PROMISC
	msg.Index = int32(base.Index)
	req.AddData(msg)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// LinkSetAllmulticastOn enables the reception of all hardware multicast packets for the link device.
// Equivalent to: `ip link set $link allmulticast on`
func LinkSetAllmulticastOn(link Link) error {
	return pkgHandle.LinkSetAllmulticastOn(link)
}

// LinkSetAllmulticastOn enables the reception of all hardware multicast packets for the link device.
// Equivalent to: `ip link set $link allmulticast on`
func (h *Handle) LinkSetAllmulticastOn(link Link) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_NEWLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Change = unix.IFF_ALLMULTI
	msg.Flags = unix.IFF_ALLMULTI
	msg.Index = int32(base.Index)
	req.AddData(msg)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// LinkSetAllmulticastOff disables the reception of all hardware multicast packets for the link device.
// Equivalent to: `ip link set $link allmulticast off`
func LinkSetAllmulticastOff(link Link) error {
	return pkgHandle.LinkSetAllmulticastOff(link)
}

// LinkSetAllmulticastOff disables the reception of all hardware multicast packets for the link device.
// Equivalent to: `ip link set $link allmulticast off`
func (h *Handle) LinkSetAllmulticastOff(link Link) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_NEWLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Change = unix.IFF_ALLMULTI
	msg.Index = int32(base.Index)
	req.AddData(msg)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// LinkSetMulticastOn enables the reception of multicast packets for the link device.
// Equivalent to: `ip link set $link multicast on`
func LinkSetMulticastOn(link Link) error {
	return pkgHandle.LinkSetMulticastOn(link)
}

// LinkSetMulticastOn enables the reception of multicast packets for the link device.
// Equivalent to: `ip link set $link multicast on`
func (h *Handle) LinkSetMulticastOn(link Link) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_NEWLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Change = unix.IFF_MULTICAST
	msg.Flags = unix.IFF_MULTICAST
	msg.Index = int32(base.Index)
	req.AddData(msg)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// LinkSetAllmulticastOff disables the reception of multicast packets for the link device.
// Equivalent to: `ip link set $link multicast off`
func LinkSetMulticastOff(link Link) error {
	return pkgHandle.LinkSetMulticastOff(link)
}

// LinkSetAllmulticastOff disables the reception of multicast packets for the link device.
// Equivalent to: `ip link set $link multicast off`
func (h *Handle) LinkSetMulticastOff(link Link) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_NEWLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Change = unix.IFF_MULTICAST
	msg.Index = int32(base.Index)
	req.AddData(msg)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

func MacvlanMACAddrAdd(link Link, addr net.HardwareAddr) error {
	return pkgHandle.MacvlanMACAddrAdd(link, addr)
}

func (h *Handle) MacvlanMACAddrAdd(link Link, addr net.HardwareAddr) error {
	return h.macvlanMACAddrChange(link, []net.HardwareAddr{addr}, nl.MACVLAN_MACADDR_ADD)
}

func MacvlanMACAddrDel(link Link, addr net.HardwareAddr) error {
	return pkgHandle.MacvlanMACAddrDel(link, addr)
}

func (h *Handle) MacvlanMACAddrDel(link Link, addr net.HardwareAddr) error {
	return h.macvlanMACAddrChange(link, []net.HardwareAddr{addr}, nl.MACVLAN_MACADDR_DEL)
}

func MacvlanMACAddrFlush(link Link) error {
	return pkgHandle.MacvlanMACAddrFlush(link)
}

func (h *Handle) MacvlanMACAddrFlush(link Link) error {
	return h.macvlanMACAddrChange(link, nil, nl.MACVLAN_MACADDR_FLUSH)
}

func MacvlanMACAddrSet(link Link, addrs []net.HardwareAddr) error {
	return pkgHandle.MacvlanMACAddrSet(link, addrs)
}

func (h *Handle) MacvlanMACAddrSet(link Link, addrs []net.HardwareAddr) error {
	return h.macvlanMACAddrChange(link, addrs, nl.MACVLAN_MACADDR_SET)
}

func (h *Handle) macvlanMACAddrChange(link Link, addrs []net.HardwareAddr, mode uint32) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_NEWLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Index = int32(base.Index)
	req.AddData(msg)

	linkInfo := nl.NewRtAttr(unix.IFLA_LINKINFO, nil)
	linkInfo.AddRtAttr(nl.IFLA_INFO_KIND, nl.NonZeroTerminated(link.Type()))
	inner := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)

	// IFLA_MACVLAN_MACADDR_MODE = mode
	b := make([]byte, 4)
	native.PutUint32(b, mode)
	inner.AddRtAttr(nl.IFLA_MACVLAN_MACADDR_MODE, b)

	// populate message with MAC addrs, if necessary
	switch mode {
	case nl.MACVLAN_MACADDR_ADD, nl.MACVLAN_MACADDR_DEL:
		if len(addrs) == 1 {
			inner.AddRtAttr(nl.IFLA_MACVLAN_MACADDR, []byte(addrs[0]))
		}
	case nl.MACVLAN_MACADDR_SET:
		mad := inner.AddRtAttr(nl.IFLA_MACVLAN_MACADDR_DATA, nil)
		for _, addr := range addrs {
			mad.AddRtAttr(nl.IFLA_MACVLAN_MACADDR, []byte(addr))
		}
	}

	req.AddData(linkInfo)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// LinkSetMacvlanMode sets the mode of a macvlan or macvtap link device.
// Note that passthrough mode cannot be set to and from and will fail.
// Equivalent to: `ip link set $link type (macvlan|macvtap) mode $mode
func LinkSetMacvlanMode(link Link, mode MacvlanMode) error {
	return pkgHandle.LinkSetMacvlanMode(link, mode)
}

// LinkSetMacvlanMode sets the mode of the macvlan or macvtap link device.
// Note that passthrough mode cannot be set to and from and will fail.
// Equivalent to: `ip link set $link type (macvlan|macvtap) mode $mode
func (h *Handle) LinkSetMacvlanMode(link Link, mode MacvlanMode) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_NEWLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Index = int32(base.Index)
	req.AddData(msg)

	linkInfo := nl.NewRtAttr(unix.IFLA_LINKINFO, nil)
	linkInfo.AddRtAttr(nl.IFLA_INFO_KIND, nl.NonZeroTerminated(link.Type()))

	data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)
	data.AddRtAttr(nl.IFLA_MACVLAN_MODE, nl.Uint32Attr(macvlanModes[mode]))

	req.AddData(linkInfo)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

func BridgeSetMcastSnoop(link Link, on bool) error {
	return pkgHandle.BridgeSetMcastSnoop(link, on)
}

func (h *Handle) BridgeSetMcastSnoop(link Link, on bool) error {
	bridge := link.(*Bridge)
	bridge.MulticastSnooping = &on
	return h.linkModify(bridge, unix.NLM_F_ACK)
}

func BridgeSetVlanFiltering(link Link, on bool) error {
	return pkgHandle.BridgeSetVlanFiltering(link, on)
}

func (h *Handle) BridgeSetVlanFiltering(link Link, on bool) error {
	bridge := link.(*Bridge)
	bridge.VlanFiltering = &on
	return h.linkModify(bridge, unix.NLM_F_ACK)
}

func SetPromiscOn(link Link) error {
	return pkgHandle.SetPromiscOn(link)
}

func (h *Handle) SetPromiscOff(link Link) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Change = unix.IFF_PROMISC
	msg.Index = int32(base.Index)
	req.AddData(msg)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

func SetPromiscOff(link Link) error {
	return pkgHandle.SetPromiscOff(link)
}

// LinkSetUp enables the link device.
// Equivalent to: `ip link set $link up`
func LinkSetUp(link Link) error {
	return pkgHandle.LinkSetUp(link)
}

// LinkSetUp enables the link device.
// Equivalent to: `ip link set $link up`
func (h *Handle) LinkSetUp(link Link) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_NEWLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Change = unix.IFF_UP
	msg.Flags = unix.IFF_UP
	msg.Index = int32(base.Index)
	req.AddData(msg)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// LinkSetDown disables link device.
// Equivalent to: `ip link set $link down`
func LinkSetDown(link Link) error {
	return pkgHandle.LinkSetDown(link)
}

// LinkSetDown disables link device.
// Equivalent to: `ip link set $link down`
func (h *Handle) LinkSetDown(link Link) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_NEWLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Change = unix.IFF_UP
	msg.Index = int32(base.Index)
	req.AddData(msg)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// LinkSetMTU sets the mtu of the link device.
// Equivalent to: `ip link set $link mtu $mtu`
func LinkSetMTU(link Link, mtu int) error {
	return pkgHandle.LinkSetMTU(link, mtu)
}

// LinkSetMTU sets the mtu of the link device.
// Equivalent to: `ip link set $link mtu $mtu`
func (h *Handle) LinkSetMTU(link Link, mtu int) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Index = int32(base.Index)
	req.AddData(msg)

	b := make([]byte, 4)
	native.PutUint32(b, uint32(mtu))

	data := nl.NewRtAttr(unix.IFLA_MTU, b)
	req.AddData(data)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// LinkSetName sets the name of the link device.
// Equivalent to: `ip link set $link name $name`
func LinkSetName(link Link, name string) error {
	return pkgHandle.LinkSetName(link, name)
}

// LinkSetName sets the name of the link device.
// Equivalent to: `ip link set $link name $name`
func (h *Handle) LinkSetName(link Link, name string) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Index = int32(base.Index)
	req.AddData(msg)

	data := nl.NewRtAttr(unix.IFLA_IFNAME, []byte(name))
	req.AddData(data)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// LinkSetAlias sets the alias of the link device.
// Equivalent to: `ip link set dev $link alias $name`
func LinkSetAlias(link Link, name string) error {
	return pkgHandle.LinkSetAlias(link, name)
}

// LinkSetAlias sets the alias of the link device.
// Equivalent to: `ip link set dev $link alias $name`
func (h *Handle) LinkSetAlias(link Link, name string) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Index = int32(base.Index)
	req.AddData(msg)

	data := nl.NewRtAttr(unix.IFLA_IFALIAS, []byte(name))
	req.AddData(data)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// LinkSetHardwareAddr sets the hardware address of the link device.
// Equivalent to: `ip link set $link address $hwaddr`
func LinkSetHardwareAddr(link Link, hwaddr net.HardwareAddr) error {
	return pkgHandle.LinkSetHardwareAddr(link, hwaddr)
}

// LinkSetHardwareAddr sets the hardware address of the link device.
// Equivalent to: `ip link set $link address $hwaddr`
func (h *Handle) LinkSetHardwareAddr(link Link, hwaddr net.HardwareAddr) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Index = int32(base.Index)
	req.AddData(msg)

	data := nl.NewRtAttr(unix.IFLA_ADDRESS, []byte(hwaddr))
	req.AddData(data)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// LinkSetVfHardwareAddr sets the hardware address of a vf for the link.
// Equivalent to: `ip link set $link vf $vf mac $hwaddr`
func LinkSetVfHardwareAddr(link Link, vf int, hwaddr net.HardwareAddr) error {
	return pkgHandle.LinkSetVfHardwareAddr(link, vf, hwaddr)
}

// LinkSetVfHardwareAddr sets the hardware address of a vf for the link.
// Equivalent to: `ip link set $link vf $vf mac $hwaddr`
func (h *Handle) LinkSetVfHardwareAddr(link Link, vf int, hwaddr net.HardwareAddr) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Index = int32(base.Index)
	req.AddData(msg)

	data := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)
	info := data.AddRtAttr(nl.IFLA_VF_INFO, nil)
	vfmsg := nl.VfMac{
		Vf: uint32(vf),
	}
	copy(vfmsg.Mac[:], []byte(hwaddr))
	info.AddRtAttr(nl.IFLA_VF_MAC, vfmsg.Serialize())
	req.AddData(data)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// LinkSetVfVlan sets the vlan of a vf for the link.
// Equivalent to: `ip link set $link vf $vf vlan $vlan`
func LinkSetVfVlan(link Link, vf, vlan int) error {
	return pkgHandle.LinkSetVfVlan(link, vf, vlan)
}

// LinkSetVfVlan sets the vlan of a vf for the link.
// Equivalent to: `ip link set $link vf $vf vlan $vlan`
func (h *Handle) LinkSetVfVlan(link Link, vf, vlan int) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Index = int32(base.Index)
	req.AddData(msg)

	data := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)
	info := data.AddRtAttr(nl.IFLA_VF_INFO, nil)
	vfmsg := nl.VfVlan{
		Vf:   uint32(vf),
		Vlan: uint32(vlan),
	}
	info.AddRtAttr(nl.IFLA_VF_VLAN, vfmsg.Serialize())
	req.AddData(data)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// LinkSetVfVlanQos sets the vlan and qos priority of a vf for the link.
// Equivalent to: `ip link set $link vf $vf vlan $vlan qos $qos`
func LinkSetVfVlanQos(link Link, vf, vlan, qos int) error {
	return pkgHandle.LinkSetVfVlanQos(link, vf, vlan, qos)
}

// LinkSetVfVlanQos sets the vlan and qos priority of a vf for the link.
// Equivalent to: `ip link set $link vf $vf vlan $vlan qos $qos`
func (h *Handle) LinkSetVfVlanQos(link Link, vf, vlan, qos int) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Index = int32(base.Index)
	req.AddData(msg)

	data := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)
	info := data.AddRtAttr(nl.IFLA_VF_INFO, nil)
	vfmsg := nl.VfVlan{
		Vf:   uint32(vf),
		Vlan: uint32(vlan),
		Qos:  uint32(qos),
	}
	info.AddRtAttr(nl.IFLA_VF_VLAN, vfmsg.Serialize())
	req.AddData(data)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// LinkSetVfTxRate sets the tx rate of a vf for the link.
// Equivalent to: `ip link set $link vf $vf rate $rate`
func LinkSetVfTxRate(link Link, vf, rate int) error {
	return pkgHandle.LinkSetVfTxRate(link, vf, rate)
}

// LinkSetVfTxRate sets the tx rate of a vf for the link.
// Equivalent to: `ip link set $link vf $vf rate $rate`
func (h *Handle) LinkSetVfTxRate(link Link, vf, rate int) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Index = int32(base.Index)
	req.AddData(msg)

	data := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)
	info := data.AddRtAttr(nl.IFLA_VF_INFO, nil)
	vfmsg := nl.VfTxRate{
		Vf:   uint32(vf),
		Rate: uint32(rate),
	}
	info.AddRtAttr(nl.IFLA_VF_TX_RATE, vfmsg.Serialize())
	req.AddData(data)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// LinkSetVfRate sets the min and max tx rate of a vf for the link.
// Equivalent to: `ip link set $link vf $vf min_tx_rate $min_rate max_tx_rate $max_rate`
func LinkSetVfRate(link Link, vf, minRate, maxRate int) error {
	return pkgHandle.LinkSetVfRate(link, vf, minRate, maxRate)
}

// LinkSetVfRate sets the min and max tx rate of a vf for the link.
// Equivalent to: `ip link set $link vf $vf min_tx_rate $min_rate max_tx_rate $max_rate`
func (h *Handle) LinkSetVfRate(link Link, vf, minRate, maxRate int) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Index = int32(base.Index)
	req.AddData(msg)

	data := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)
	info := data.AddRtAttr(nl.IFLA_VF_INFO, nil)
	vfmsg := nl.VfRate{
		Vf:        uint32(vf),
		MinTxRate: uint32(minRate),
		MaxTxRate: uint32(maxRate),
	}
	info.AddRtAttr(nl.IFLA_VF_RATE, vfmsg.Serialize())
	req.AddData(data)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// LinkSetVfState enables/disables virtual link state on a vf.
// Equivalent to: `ip link set $link vf $vf state $state`
func LinkSetVfState(link Link, vf int, state uint32) error {
	return pkgHandle.LinkSetVfState(link, vf, state)
}

// LinkSetVfState enables/disables virtual link state on a vf.
// Equivalent to: `ip link set $link vf $vf state $state`
func (h *Handle) LinkSetVfState(link Link, vf int, state uint32) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Index = int32(base.Index)
	req.AddData(msg)

	data := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)
	info := data.AddRtAttr(nl.IFLA_VF_INFO, nil)
	vfmsg := nl.VfLinkState{
		Vf:        uint32(vf),
		LinkState: state,
	}
	info.AddRtAttr(nl.IFLA_VF_LINK_STATE, vfmsg.Serialize())
	req.AddData(data)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// LinkSetVfSpoofchk enables/disables spoof check on a vf for the link.
// Equivalent to: `ip link set $link vf $vf spoofchk $check`
func LinkSetVfSpoofchk(link Link, vf int, check bool) error {
	return pkgHandle.LinkSetVfSpoofchk(link, vf, check)
}

// LinkSetVfSpoofchk enables/disables spoof check on a vf for the link.
// Equivalent to: `ip link set $link vf $vf spoofchk $check`
func (h *Handle) LinkSetVfSpoofchk(link Link, vf int, check bool) error {
	var setting uint32
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Index = int32(base.Index)
	req.AddData(msg)

	data := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)
	info := data.AddRtAttr(nl.IFLA_VF_INFO, nil)
	if check {
		setting = 1
	}
	vfmsg := nl.VfSpoofchk{
		Vf:      uint32(vf),
		Setting: setting,
	}
	info.AddRtAttr(nl.IFLA_VF_SPOOFCHK, vfmsg.Serialize())
	req.AddData(data)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// LinkSetVfTrust enables/disables trust state on a vf for the link.
// Equivalent to: `ip link set $link vf $vf trust $state`
func LinkSetVfTrust(link Link, vf int, state bool) error {
	return pkgHandle.LinkSetVfTrust(link, vf, state)
}

// LinkSetVfTrust enables/disables trust state on a vf for the link.
// Equivalent to: `ip link set $link vf $vf trust $state`
func (h *Handle) LinkSetVfTrust(link Link, vf int, state bool) error {
	var setting uint32
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Index = int32(base.Index)
	req.AddData(msg)

	data := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)
	info := data.AddRtAttr(nl.IFLA_VF_INFO, nil)
	if state {
		setting = 1
	}
	vfmsg := nl.VfTrust{
		Vf:      uint32(vf),
		Setting: setting,
	}
	info.AddRtAttr(nl.IFLA_VF_TRUST, vfmsg.Serialize())
	req.AddData(data)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// LinkSetVfNodeGUID sets the node GUID of a vf for the link.
// Equivalent to: `ip link set dev $link vf $vf node_guid $nodeguid`
func LinkSetVfNodeGUID(link Link, vf int, nodeguid net.HardwareAddr) error {
	return pkgHandle.LinkSetVfGUID(link, vf, nodeguid, nl.IFLA_VF_IB_NODE_GUID)
}

// LinkSetVfPortGUID sets the port GUID of a vf for the link.
// Equivalent to: `ip link set dev $link vf $vf port_guid $portguid`
func LinkSetVfPortGUID(link Link, vf int, portguid net.HardwareAddr) error {
	return pkgHandle.LinkSetVfGUID(link, vf, portguid, nl.IFLA_VF_IB_PORT_GUID)
}

// LinkSetVfGUID sets the node or port GUID of a vf for the link.
func (h *Handle) LinkSetVfGUID(link Link, vf int, vfGuid net.HardwareAddr, guidType int) error {
	var err error
	var guid uint64

	buf := bytes.NewBuffer(vfGuid)
	err = binary.Read(buf, binary.BigEndian, &guid)
	if err != nil {
		return err
	}

	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Index = int32(base.Index)
	req.AddData(msg)

	data := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)
	info := data.AddRtAttr(nl.IFLA_VF_INFO, nil)
	vfmsg := nl.VfGUID{
		Vf:   uint32(vf),
		GUID: guid,
	}
	info.AddRtAttr(guidType, vfmsg.Serialize())
	req.AddData(data)

	_, err = req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// LinkSetMaster sets the master of the link device.
// Equivalent to: `ip link set $link master $master`
func LinkSetMaster(link Link, master Link) error {
	return pkgHandle.LinkSetMaster(link, master)
}

// LinkSetMaster sets the master of the link device.
// Equivalent to: `ip link set $link master $master`
func (h *Handle) LinkSetMaster(link Link, master Link) error {
	index := 0
	if master != nil {
		masterBase := master.Attrs()
		h.ensureIndex(masterBase)
		index = masterBase.Index
	}
	if index <= 0 {
		return fmt.Errorf("Device does not exist")
	}
	return h.LinkSetMasterByIndex(link, index)
}

// LinkSetNoMaster removes the master of the link device.
// Equivalent to: `ip link set $link nomaster`
func LinkSetNoMaster(link Link) error {
	return pkgHandle.LinkSetNoMaster(link)
}

// LinkSetNoMaster removes the master of the link device.
// Equivalent to: `ip link set $link nomaster`
func (h *Handle) LinkSetNoMaster(link Link) error {
	return h.LinkSetMasterByIndex(link, 0)
}

// LinkSetMasterByIndex sets the master of the link device.
// Equivalent to: `ip link set $link master $master`
func LinkSetMasterByIndex(link Link, masterIndex int) error {
	return pkgHandle.LinkSetMasterByIndex(link, masterIndex)
}

// LinkSetMasterByIndex sets the master of the link device.
// Equivalent to: `ip link set $link master $master`
func (h *Handle) LinkSetMasterByIndex(link Link, masterIndex int) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Index = int32(base.Index)
	req.AddData(msg)

	b := make([]byte, 4)
	native.PutUint32(b, uint32(masterIndex))

	data := nl.NewRtAttr(unix.IFLA_MASTER, b)
	req.AddData(data)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// LinkSetNsPid puts the device into a new network namespace. The
// pid must be a pid of a running process.
// Equivalent to: `ip link set $link netns $pid`
func LinkSetNsPid(link Link, nspid int) error {
	return pkgHandle.LinkSetNsPid(link, nspid)
}

// LinkSetNsPid puts the device into a new network namespace. The
// pid must be a pid of a running process.
// Equivalent to: `ip link set $link netns $pid`
func (h *Handle) LinkSetNsPid(link Link, nspid int) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Index = int32(base.Index)
	req.AddData(msg)

	b := make([]byte, 4)
	native.PutUint32(b, uint32(nspid))

	data := nl.NewRtAttr(unix.IFLA_NET_NS_PID, b)
	req.AddData(data)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// LinkSetNsFd puts the device into a new network namespace. The
// fd must be an open file descriptor to a network namespace.
// Similar to: `ip link set $link netns $ns`
func LinkSetNsFd(link Link, fd int) error {
	return pkgHandle.LinkSetNsFd(link, fd)
}

// LinkSetNsFd puts the device into a new network namespace. The
// fd must be an open file descriptor to a network namespace.
// Similar to: `ip link set $link netns $ns`
func (h *Handle) LinkSetNsFd(link Link, fd int) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Index = int32(base.Index)
	req.AddData(msg)

	b := make([]byte, 4)
	native.PutUint32(b, uint32(fd))

	data := nl.NewRtAttr(unix.IFLA_NET_NS_FD, b)
	req.AddData(data)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// LinkSetXdpFd adds a bpf function to the driver. The fd must be a bpf
// program loaded with bpf(type=BPF_PROG_TYPE_XDP)
func LinkSetXdpFd(link Link, fd int) error {
	return LinkSetXdpFdWithFlags(link, fd, 0)
}

// LinkSetXdpFdWithFlags adds a bpf function to the driver with the given
// options. The fd must be a bpf program loaded with bpf(type=BPF_PROG_TYPE_XDP)
func LinkSetXdpFdWithFlags(link Link, fd, flags int) error {
	base := link.Attrs()
	ensureIndex(base)
	req := nl.NewNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Index = int32(base.Index)
	req.AddData(msg)

	addXdpAttrs(&LinkXdp{Fd: fd, Flags: uint32(flags)}, req)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

func boolAttr(val bool) []byte {
	var v uint8
	if val {
		v = 1
	}
	return nl.Uint8Attr(v)
}

type vxlanPortRange struct {
	Lo, Hi uint16
}

func addVxlanAttrs(vxlan *Vxlan, linkInfo *nl.RtAttr) {
	data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)

	if vxlan.FlowBased {
		vxlan.VxlanId = 0
	}

	data.AddRtAttr(nl.IFLA_VXLAN_ID, nl.Uint32Attr(uint32(vxlan.VxlanId)))

	if vxlan.VtepDevIndex != 0 {
		data.AddRtAttr(nl.IFLA_VXLAN_LINK, nl.Uint32Attr(uint32(vxlan.VtepDevIndex)))
	}
	if vxlan.SrcAddr != nil {
		ip := vxlan.SrcAddr.To4()
		if ip != nil {
			data.AddRtAttr(nl.IFLA_VXLAN_LOCAL, []byte(ip))
		} else {
			ip = vxlan.SrcAddr.To16()
			if ip != nil {
				data.AddRtAttr(nl.IFLA_VXLAN_LOCAL6, []byte(ip))
			}
		}
	}
	if vxlan.Group != nil {
		group := vxlan.Group.To4()
		if group != nil {
			data.AddRtAttr(nl.IFLA_VXLAN_GROUP, []byte(group))
		} else {
			group = vxlan.Group.To16()
			if group != nil {
				data.AddRtAttr(nl.IFLA_VXLAN_GROUP6, []byte(group))
			}
		}
	}

	data.AddRtAttr(nl.IFLA_VXLAN_TTL, nl.Uint8Attr(uint8(vxlan.TTL)))
	data.AddRtAttr(nl.IFLA_VXLAN_TOS, nl.Uint8Attr(uint8(vxlan.TOS)))
	data.AddRtAttr(nl.IFLA_VXLAN_LEARNING, boolAttr(vxlan.Learning))
	data.AddRtAttr(nl.IFLA_VXLAN_PROXY, boolAttr(vxlan.Proxy))
	data.AddRtAttr(nl.IFLA_VXLAN_RSC, boolAttr(vxlan.RSC))
	data.AddRtAttr(nl.IFLA_VXLAN_L2MISS, boolAttr(vxlan.L2miss))
	data.AddRtAttr(nl.IFLA_VXLAN_L3MISS, boolAttr(vxlan.L3miss))
	data.AddRtAttr(nl.IFLA_VXLAN_UDP_ZERO_CSUM6_TX, boolAttr(vxlan.UDP6ZeroCSumTx))
	data.AddRtAttr(nl.IFLA_VXLAN_UDP_ZERO_CSUM6_RX, boolAttr(vxlan.UDP6ZeroCSumRx))

	if vxlan.UDPCSum {
		data.AddRtAttr(nl.IFLA_VXLAN_UDP_CSUM, boolAttr(vxlan.UDPCSum))
	}
	if vxlan.GBP {
		data.AddRtAttr(nl.IFLA_VXLAN_GBP, []byte{})
	}
	if vxlan.FlowBased {
		data.AddRtAttr(nl.IFLA_VXLAN_FLOWBASED, boolAttr(vxlan.FlowBased))
	}
	if vxlan.NoAge {
		data.AddRtAttr(nl.IFLA_VXLAN_AGEING, nl.Uint32Attr(0))
	} else if vxlan.Age > 0 {
		data.AddRtAttr(nl.IFLA_VXLAN_AGEING, nl.Uint32Attr(uint32(vxlan.Age)))
	}
	if vxlan.Limit > 0 {
		data.AddRtAttr(nl.IFLA_VXLAN_LIMIT, nl.Uint32Attr(uint32(vxlan.Limit)))
	}
	if vxlan.Port > 0 {
		data.AddRtAttr(nl.IFLA_VXLAN_PORT, htons(uint16(vxlan.Port)))
	}
	if vxlan.PortLow > 0 || vxlan.PortHigh > 0 {
		pr := vxlanPortRange{uint16(vxlan.PortLow), uint16(vxlan.PortHigh)}

		buf := new(bytes.Buffer)
		binary.Write(buf, binary.BigEndian, &pr)

		data.AddRtAttr(nl.IFLA_VXLAN_PORT_RANGE, buf.Bytes())
	}
}

func addBondAttrs(bond *Bond, linkInfo *nl.RtAttr) {
	data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)
	if bond.Mode >= 0 {
		data.AddRtAttr(nl.IFLA_BOND_MODE, nl.Uint8Attr(uint8(bond.Mode)))
	}
	if bond.ActiveSlave >= 0 {
		data.AddRtAttr(nl.IFLA_BOND_ACTIVE_SLAVE, nl.Uint32Attr(uint32(bond.ActiveSlave)))
	}
	if bond.Miimon >= 0 {
		data.AddRtAttr(nl.IFLA_BOND_MIIMON, nl.Uint32Attr(uint32(bond.Miimon)))
	}
	if bond.UpDelay >= 0 {
		data.AddRtAttr(nl.IFLA_BOND_UPDELAY, nl.Uint32Attr(uint32(bond.UpDelay)))
	}
	if bond.DownDelay >= 0 {
		data.AddRtAttr(nl.IFLA_BOND_DOWNDELAY, nl.Uint32Attr(uint32(bond.DownDelay)))
	}
	if bond.UseCarrier >= 0 {
		data.AddRtAttr(nl.IFLA_BOND_USE_CARRIER, nl.Uint8Attr(uint8(bond.UseCarrier)))
	}
	if bond.ArpInterval >= 0 {
		data.AddRtAttr(nl.IFLA_BOND_ARP_INTERVAL, nl.Uint32Attr(uint32(bond.ArpInterval)))
	}
	if bond.ArpIpTargets != nil {
		msg := data.AddRtAttr(nl.IFLA_BOND_ARP_IP_TARGET, nil)
		for i := range bond.ArpIpTargets {
			ip := bond.ArpIpTargets[i].To4()
			if ip != nil {
				msg.AddRtAttr(i, []byte(ip))
				continue
			}
			ip = bond.ArpIpTargets[i].To16()
			if ip != nil {
				msg.AddRtAttr(i, []byte(ip))
			}
		}
	}
	if bond.ArpValidate >= 0 {
		data.AddRtAttr(nl.IFLA_BOND_ARP_VALIDATE, nl.Uint32Attr(uint32(bond.ArpValidate)))
	}
	if bond.ArpAllTargets >= 0 {
		data.AddRtAttr(nl.IFLA_BOND_ARP_ALL_TARGETS, nl.Uint32Attr(uint32(bond.ArpAllTargets)))
	}
	if bond.Primary >= 0 {
		data.AddRtAttr(nl.IFLA_BOND_PRIMARY, nl.Uint32Attr(uint32(bond.Primary)))
	}
	if bond.PrimaryReselect >= 0 {
		data.AddRtAttr(nl.IFLA_BOND_PRIMARY_RESELECT, nl.Uint8Attr(uint8(bond.PrimaryReselect)))
	}
	if bond.FailOverMac >= 0 {
		data.AddRtAttr(nl.IFLA_BOND_FAIL_OVER_MAC, nl.Uint8Attr(uint8(bond.FailOverMac)))
	}
	if bond.XmitHashPolicy >= 0 {
		data.AddRtAttr(nl.IFLA_BOND_XMIT_HASH_POLICY, nl.Uint8Attr(uint8(bond.XmitHashPolicy)))
	}
	if bond.ResendIgmp >= 0 {
		data.AddRtAttr(nl.IFLA_BOND_RESEND_IGMP, nl.Uint32Attr(uint32(bond.ResendIgmp)))
	}
	if bond.NumPeerNotif >= 0 {
		data.AddRtAttr(nl.IFLA_BOND_NUM_PEER_NOTIF, nl.Uint8Attr(uint8(bond.NumPeerNotif)))
	}
	if bond.AllSlavesActive >= 0 {
		data.AddRtAttr(nl.IFLA_BOND_ALL_SLAVES_ACTIVE, nl.Uint8Attr(uint8(bond.AllSlavesActive)))
	}
	if bond.MinLinks >= 0 {
		data.AddRtAttr(nl.IFLA_BOND_MIN_LINKS, nl.Uint32Attr(uint32(bond.MinLinks)))
	}
	if bond.LpInterval >= 0 {
		data.AddRtAttr(nl.IFLA_BOND_LP_INTERVAL, nl.Uint32Attr(uint32(bond.LpInterval)))
	}
	if bond.PacketsPerSlave >= 0 {
		data.AddRtAttr(nl.IFLA_BOND_PACKETS_PER_SLAVE, nl.Uint32Attr(uint32(bond.PacketsPerSlave)))
	}
	if bond.LacpRate >= 0 {
		data.AddRtAttr(nl.IFLA_BOND_AD_LACP_RATE, nl.Uint8Attr(uint8(bond.LacpRate)))
	}
	if bond.AdSelect >= 0 {
		data.AddRtAttr(nl.IFLA_BOND_AD_SELECT, nl.Uint8Attr(uint8(bond.AdSelect)))
	}
	if bond.AdActorSysPrio >= 0 {
		data.AddRtAttr(nl.IFLA_BOND_AD_ACTOR_SYS_PRIO, nl.Uint16Attr(uint16(bond.AdActorSysPrio)))
	}
	if bond.AdUserPortKey >= 0 {
		data.AddRtAttr(nl.IFLA_BOND_AD_USER_PORT_KEY, nl.Uint16Attr(uint16(bond.AdUserPortKey)))
	}
	if bond.AdActorSystem != nil {
		data.AddRtAttr(nl.IFLA_BOND_AD_ACTOR_SYSTEM, []byte(bond.AdActorSystem))
	}
	if bond.TlbDynamicLb >= 0 {
		data.AddRtAttr(nl.IFLA_BOND_TLB_DYNAMIC_LB, nl.Uint8Attr(uint8(bond.TlbDynamicLb)))
	}
}

func cleanupFds(fds []*os.File) {
	for _, f := range fds {
		f.Close()
	}
}

// LinkAdd adds a new link device. The type and features of the device
// are taken from the parameters in the link object.
// Equivalent to: `ip link add $link`
func LinkAdd(link Link) error {
	return pkgHandle.LinkAdd(link)
}

// LinkAdd adds a new link device. The type and features of the device
// are taken from the parameters in the link object.
// Equivalent to: `ip link add $link`
func (h *Handle) LinkAdd(link Link) error {
	return h.linkModify(link, unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)
}

func LinkModify(link Link) error {
	return pkgHandle.LinkModify(link)
}

func (h *Handle) LinkModify(link Link) error {
	return h.linkModify(link, unix.NLM_F_REQUEST|unix.NLM_F_ACK)
}

func (h *Handle) linkModify(link Link, flags int) error {
	// TODO: support extra data for macvlan
	base := link.Attrs()

	// if tuntap, then the name can be empty, OS will provide a name
	tuntap, isTuntap := link.(*Tuntap)

	if base.Name == "" && !isTuntap {
		return fmt.Errorf("LinkAttrs.Name cannot be empty")
	}

	if isTuntap {
		if tuntap.Mode < unix.IFF_TUN || tuntap.Mode > unix.IFF_TAP {
			return fmt.Errorf("Tuntap.Mode %v unknown", tuntap.Mode)
		}

		queues := tuntap.Queues

		var fds []*os.File
		var req ifReq
		copy(req.Name[:15], base.Name)

		req.Flags = uint16(tuntap.Flags)

		if queues == 0 { //Legacy compatibility
			queues = 1
			if tuntap.Flags == 0 {
				req.Flags = uint16(TUNTAP_DEFAULTS)
			}
		} else {
			// For best peformance set Flags to TUNTAP_MULTI_QUEUE_DEFAULTS | TUNTAP_VNET_HDR
			// when a) KVM has support for this ABI and
			//      b) the value of the flag is queryable using the TUNGETIFF ioctl
			if tuntap.Flags == 0 {
				req.Flags = uint16(TUNTAP_MULTI_QUEUE_DEFAULTS)
			}
		}

		req.Flags |= uint16(tuntap.Mode)
		const TUN = "/dev/net/tun"
		for i := 0; i < queues; i++ {
			localReq := req
			fd, err := unix.Open(TUN, os.O_RDWR|syscall.O_CLOEXEC, 0)
			if err != nil {
				cleanupFds(fds)
				return err
			}

			_, _, errno := unix.Syscall(unix.SYS_IOCTL, uintptr(fd), uintptr(unix.TUNSETIFF), uintptr(unsafe.Pointer(&localReq)))
			if errno != 0 {
				// close the new fd
				unix.Close(fd)
				// and the already opened ones
				cleanupFds(fds)
				return fmt.Errorf("Tuntap IOCTL TUNSETIFF failed [%d], errno %v", i, errno)
			}

			_, _, errno = syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), syscall.TUNSETOWNER, uintptr(tuntap.Owner))
			if errno != 0 {
				cleanupFds(fds)
				return fmt.Errorf("Tuntap IOCTL TUNSETOWNER failed [%d], errno %v", i, errno)
			}

			_, _, errno = syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), syscall.TUNSETGROUP, uintptr(tuntap.Group))
			if errno != 0 {
				cleanupFds(fds)
				return fmt.Errorf("Tuntap IOCTL TUNSETGROUP failed [%d], errno %v", i, errno)
			}

			// Set the tun device to non-blocking before use. The below comment
			// taken from:
			//
			// https://github.com/mistsys/tuntap/commit/161418c25003bbee77d085a34af64d189df62bea
			//
			// Note there is a complication because in go, if a device node is
			// opened, go sets it to use nonblocking I/O. However a /dev/net/tun
			// doesn't work with epoll until after the TUNSETIFF ioctl has been
			// done. So we open the unix fd directly, do the ioctl, then put the
			// fd in nonblocking mode, an then finally wrap it in a os.File,
			// which will see the nonblocking mode and add the fd to the
			// pollable set, so later on when we Read() from it blocked the
			// calling thread in the kernel.
			//
			// See
			//   https://github.com/golang/go/issues/30426
			// which got exposed in go 1.13 by the fix to
			//   https://github.com/golang/go/issues/30624
			err = unix.SetNonblock(fd, true)
			if err != nil {
				cleanupFds(fds)
				return fmt.Errorf("Tuntap set to non-blocking failed [%d], err %v", i, err)
			}

			// create the file from the file descriptor and store it
			file := os.NewFile(uintptr(fd), TUN)
			fds = append(fds, file)

			// 1) we only care for the name of the first tap in the multi queue set
			// 2) if the original name was empty, the localReq has now the actual name
			//
			// In addition:
			// This ensures that the link name is always identical to what the kernel returns.
			// Not only in case of an empty name, but also when using name templates.
			// e.g. when the provided name is "tap%d", the kernel replaces %d with the next available number.
			if i == 0 {
				link.Attrs().Name = strings.Trim(string(localReq.Name[:]), "\x00")
			}

		}

		control := func(file *os.File, f func(fd uintptr)) error {
			name := file.Name()
			conn, err := file.SyscallConn()
			if err != nil {
				return fmt.Errorf("SyscallConn() failed on %s: %v", name, err)
			}
			if err := conn.Control(f); err != nil {
				return fmt.Errorf("Failed to get file descriptor for %s: %v", name, err)
			}
			return nil
		}

		// only persist interface if NonPersist is NOT set
		if !tuntap.NonPersist {
			var errno syscall.Errno
			if err := control(fds[0], func(fd uintptr) {
				_, _, errno = unix.Syscall(unix.SYS_IOCTL, fd, uintptr(unix.TUNSETPERSIST), 1)
			}); err != nil {
				return err
			}
			if errno != 0 {
				cleanupFds(fds)
				return fmt.Errorf("Tuntap IOCTL TUNSETPERSIST failed, errno %v", errno)
			}
		}

		h.ensureIndex(base)

		// can't set master during create, so set it afterwards
		if base.MasterIndex != 0 {
			// TODO: verify MasterIndex is actually a bridge?
			err := h.LinkSetMasterByIndex(link, base.MasterIndex)
			if err != nil {
				// un-persist (e.g. allow the interface to be removed) the tuntap
				// should not hurt if not set prior, condition might be not needed
				if !tuntap.NonPersist {
					// ignore error
					_ = control(fds[0], func(fd uintptr) {
						_, _, _ = unix.Syscall(unix.SYS_IOCTL, fd, uintptr(unix.TUNSETPERSIST), 0)
					})
				}
				cleanupFds(fds)
				return err
			}
		}

		if tuntap.Queues == 0 {
			cleanupFds(fds)
		} else {
			tuntap.Fds = fds
		}

		return nil
	}

	req := h.newNetlinkRequest(unix.RTM_NEWLINK, flags)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	// TODO: make it shorter
	if base.Flags&net.FlagUp != 0 {
		msg.Change = unix.IFF_UP
		msg.Flags = unix.IFF_UP
	}
	if base.Flags&net.FlagBroadcast != 0 {
		msg.Change |= unix.IFF_BROADCAST
		msg.Flags |= unix.IFF_BROADCAST
	}
	if base.Flags&net.FlagLoopback != 0 {
		msg.Change |= unix.IFF_LOOPBACK
		msg.Flags |= unix.IFF_LOOPBACK
	}
	if base.Flags&net.FlagPointToPoint != 0 {
		msg.Change |= unix.IFF_POINTOPOINT
		msg.Flags |= unix.IFF_POINTOPOINT
	}
	if base.Flags&net.FlagMulticast != 0 {
		msg.Change |= unix.IFF_MULTICAST
		msg.Flags |= unix.IFF_MULTICAST
	}
	if base.Index != 0 {
		msg.Index = int32(base.Index)
	}

	req.AddData(msg)

	if base.ParentIndex != 0 {
		b := make([]byte, 4)
		native.PutUint32(b, uint32(base.ParentIndex))
		data := nl.NewRtAttr(unix.IFLA_LINK, b)
		req.AddData(data)
	} else if link.Type() == "ipvlan" || link.Type() == "ipoib" {
		return fmt.Errorf("Can't create %s link without ParentIndex", link.Type())
	}

	nameData := nl.NewRtAttr(unix.IFLA_IFNAME, nl.ZeroTerminated(base.Name))
	req.AddData(nameData)

	if base.Alias != "" {
		alias := nl.NewRtAttr(unix.IFLA_IFALIAS, []byte(base.Alias))
		req.AddData(alias)
	}

	if base.MTU > 0 {
		mtu := nl.NewRtAttr(unix.IFLA_MTU, nl.Uint32Attr(uint32(base.MTU)))
		req.AddData(mtu)
	}

	if base.TxQLen >= 0 {
		qlen := nl.NewRtAttr(unix.IFLA_TXQLEN, nl.Uint32Attr(uint32(base.TxQLen)))
		req.AddData(qlen)
	}

	if base.HardwareAddr != nil {
		hwaddr := nl.NewRtAttr(unix.IFLA_ADDRESS, []byte(base.HardwareAddr))
		req.AddData(hwaddr)
	}

	if base.NumTxQueues > 0 {
		txqueues := nl.NewRtAttr(unix.IFLA_NUM_TX_QUEUES, nl.Uint32Attr(uint32(base.NumTxQueues)))
		req.AddData(txqueues)
	}

	if base.NumRxQueues > 0 {
		rxqueues := nl.NewRtAttr(unix.IFLA_NUM_RX_QUEUES, nl.Uint32Attr(uint32(base.NumRxQueues)))
		req.AddData(rxqueues)
	}

	if base.GSOMaxSegs > 0 {
		gsoAttr := nl.NewRtAttr(unix.IFLA_GSO_MAX_SEGS, nl.Uint32Attr(base.GSOMaxSegs))
		req.AddData(gsoAttr)
	}

	if base.GSOMaxSize > 0 {
		gsoAttr := nl.NewRtAttr(unix.IFLA_GSO_MAX_SIZE, nl.Uint32Attr(base.GSOMaxSize))
		req.AddData(gsoAttr)
	}

	if base.Group > 0 {
		groupAttr := nl.NewRtAttr(unix.IFLA_GROUP, nl.Uint32Attr(base.Group))
		req.AddData(groupAttr)
	}

	if base.Namespace != nil {
		var attr *nl.RtAttr
		switch ns := base.Namespace.(type) {
		case NsPid:
			val := nl.Uint32Attr(uint32(ns))
			attr = nl.NewRtAttr(unix.IFLA_NET_NS_PID, val)
		case NsFd:
			val := nl.Uint32Attr(uint32(ns))
			attr = nl.NewRtAttr(unix.IFLA_NET_NS_FD, val)
		}

		req.AddData(attr)
	}

	if base.Xdp != nil {
		addXdpAttrs(base.Xdp, req)
	}

	linkInfo := nl.NewRtAttr(unix.IFLA_LINKINFO, nil)
	linkInfo.AddRtAttr(nl.IFLA_INFO_KIND, nl.NonZeroTerminated(link.Type()))

	switch link := link.(type) {
	case *Vlan:
		b := make([]byte, 2)
		native.PutUint16(b, uint16(link.VlanId))
		data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)
		data.AddRtAttr(nl.IFLA_VLAN_ID, b)

		if link.VlanProtocol != VLAN_PROTOCOL_UNKNOWN {
			data.AddRtAttr(nl.IFLA_VLAN_PROTOCOL, htons(uint16(link.VlanProtocol)))
		}
	case *Veth:
		data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)
		peer := data.AddRtAttr(nl.VETH_INFO_PEER, nil)
		nl.NewIfInfomsgChild(peer, unix.AF_UNSPEC)
		peer.AddRtAttr(unix.IFLA_IFNAME, nl.ZeroTerminated(link.PeerName))
		if base.TxQLen >= 0 {
			peer.AddRtAttr(unix.IFLA_TXQLEN, nl.Uint32Attr(uint32(base.TxQLen)))
		}
		if base.NumTxQueues > 0 {
			peer.AddRtAttr(unix.IFLA_NUM_TX_QUEUES, nl.Uint32Attr(uint32(base.NumTxQueues)))
		}
		if base.NumRxQueues > 0 {
			peer.AddRtAttr(unix.IFLA_NUM_RX_QUEUES, nl.Uint32Attr(uint32(base.NumRxQueues)))
		}
		if base.MTU > 0 {
			peer.AddRtAttr(unix.IFLA_MTU, nl.Uint32Attr(uint32(base.MTU)))
		}
		if link.PeerHardwareAddr != nil {
			peer.AddRtAttr(unix.IFLA_ADDRESS, []byte(link.PeerHardwareAddr))
		}
		if link.PeerNamespace != nil {
			switch ns := link.PeerNamespace.(type) {
			case NsPid:
				val := nl.Uint32Attr(uint32(ns))
				peer.AddRtAttr(unix.IFLA_NET_NS_PID, val)
			case NsFd:
				val := nl.Uint32Attr(uint32(ns))
				peer.AddRtAttr(unix.IFLA_NET_NS_FD, val)
			}
		}
	case *Vxlan:
		addVxlanAttrs(link, linkInfo)
	case *Bond:
		addBondAttrs(link, linkInfo)
	case *IPVlan:
		data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)
		data.AddRtAttr(nl.IFLA_IPVLAN_MODE, nl.Uint16Attr(uint16(link.Mode)))
		data.AddRtAttr(nl.IFLA_IPVLAN_FLAG, nl.Uint16Attr(uint16(link.Flag)))
	case *IPVtap:
		data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)
		data.AddRtAttr(nl.IFLA_IPVLAN_MODE, nl.Uint16Attr(uint16(link.Mode)))
		data.AddRtAttr(nl.IFLA_IPVLAN_FLAG, nl.Uint16Attr(uint16(link.Flag)))
	case *Macvlan:
		if link.Mode != MACVLAN_MODE_DEFAULT {
			data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)
			data.AddRtAttr(nl.IFLA_MACVLAN_MODE, nl.Uint32Attr(macvlanModes[link.Mode]))
		}
	case *Macvtap:
		if link.Mode != MACVLAN_MODE_DEFAULT {
			data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)
			data.AddRtAttr(nl.IFLA_MACVLAN_MODE, nl.Uint32Attr(macvlanModes[link.Mode]))
		}
	case *Geneve:
		addGeneveAttrs(link, linkInfo)
	case *Gretap:
		addGretapAttrs(link, linkInfo)
	case *Iptun:
		addIptunAttrs(link, linkInfo)
	case *Ip6tnl:
		addIp6tnlAttrs(link, linkInfo)
	case *Sittun:
		addSittunAttrs(link, linkInfo)
	case *Gretun:
		addGretunAttrs(link, linkInfo)
	case *Vti:
		addVtiAttrs(link, linkInfo)
	case *Vrf:
		addVrfAttrs(link, linkInfo)
	case *Bridge:
		addBridgeAttrs(link, linkInfo)
	case *GTP:
		addGTPAttrs(link, linkInfo)
	case *Xfrmi:
		addXfrmiAttrs(link, linkInfo)
	case *IPoIB:
		addIPoIBAttrs(link, linkInfo)
	case *BareUDP:
		addBareUDPAttrs(link, linkInfo)
	}

	req.AddData(linkInfo)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	if err != nil {
		return err
	}

	h.ensureIndex(base)

	// can't set master during create, so set it afterwards
	if base.MasterIndex != 0 {
		// TODO: verify MasterIndex is actually a bridge?
		return h.LinkSetMasterByIndex(link, base.MasterIndex)
	}
	return nil
}

// LinkDel deletes link device. Either Index or Name must be set in
// the link object for it to be deleted. The other values are ignored.
// Equivalent to: `ip link del $link`
func LinkDel(link Link) error {
	return pkgHandle.LinkDel(link)
}

// LinkDel deletes link device. Either Index or Name must be set in
// the link object for it to be deleted. The other values are ignored.
// Equivalent to: `ip link del $link`
func (h *Handle) LinkDel(link Link) error {
	base := link.Attrs()

	h.ensureIndex(base)

	req := h.newNetlinkRequest(unix.RTM_DELLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Index = int32(base.Index)
	req.AddData(msg)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

func (h *Handle) linkByNameDump(name string) (Link, error) {
	links, err := h.LinkList()
	if err != nil {
		return nil, err
	}

	for _, link := range links {
		if link.Attrs().Name == name {
			return link, nil
		}
	}
	return nil, LinkNotFoundError{fmt.Errorf("Link %s not found", name)}
}

func (h *Handle) linkByAliasDump(alias string) (Link, error) {
	links, err := h.LinkList()
	if err != nil {
		return nil, err
	}

	for _, link := range links {
		if link.Attrs().Alias == alias {
			return link, nil
		}
	}
	return nil, LinkNotFoundError{fmt.Errorf("Link alias %s not found", alias)}
}

// LinkByName finds a link by name and returns a pointer to the object.
func LinkByName(name string) (Link, error) {
	return pkgHandle.LinkByName(name)
}

// LinkByName finds a link by name and returns a pointer to the object.
func (h *Handle) LinkByName(name string) (Link, error) {
	if h.lookupByDump {
		return h.linkByNameDump(name)
	}

	req := h.newNetlinkRequest(unix.RTM_GETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	req.AddData(msg)

	attr := nl.NewRtAttr(unix.IFLA_EXT_MASK, nl.Uint32Attr(nl.RTEXT_FILTER_VF))
	req.AddData(attr)

	nameData := nl.NewRtAttr(unix.IFLA_IFNAME, nl.ZeroTerminated(name))
	req.AddData(nameData)

	link, err := execGetLink(req)
	if err == unix.EINVAL {
		// older kernels don't support looking up via IFLA_IFNAME
		// so fall back to dumping all links
		h.lookupByDump = true
		return h.linkByNameDump(name)
	}

	return link, err
}

// LinkByAlias finds a link by its alias and returns a pointer to the object.
// If there are multiple links with the alias it returns the first one
func LinkByAlias(alias string) (Link, error) {
	return pkgHandle.LinkByAlias(alias)
}

// LinkByAlias finds a link by its alias and returns a pointer to the object.
// If there are multiple links with the alias it returns the first one
func (h *Handle) LinkByAlias(alias string) (Link, error) {
	if h.lookupByDump {
		return h.linkByAliasDump(alias)
	}

	req := h.newNetlinkRequest(unix.RTM_GETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	req.AddData(msg)

	attr := nl.NewRtAttr(unix.IFLA_EXT_MASK, nl.Uint32Attr(nl.RTEXT_FILTER_VF))
	req.AddData(attr)

	nameData := nl.NewRtAttr(unix.IFLA_IFALIAS, nl.ZeroTerminated(alias))
	req.AddData(nameData)

	link, err := execGetLink(req)
	if err == unix.EINVAL {
		// older kernels don't support looking up via IFLA_IFALIAS
		// so fall back to dumping all links
		h.lookupByDump = true
		return h.linkByAliasDump(alias)
	}

	return link, err
}

// LinkByIndex finds a link by index and returns a pointer to the object.
func LinkByIndex(index int) (Link, error) {
	return pkgHandle.LinkByIndex(index)
}

// LinkByIndex finds a link by index and returns a pointer to the object.
func (h *Handle) LinkByIndex(index int) (Link, error) {
	req := h.newNetlinkRequest(unix.RTM_GETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Index = int32(index)
	req.AddData(msg)
	attr := nl.NewRtAttr(unix.IFLA_EXT_MASK, nl.Uint32Attr(nl.RTEXT_FILTER_VF))
	req.AddData(attr)

	return execGetLink(req)
}

func execGetLink(req *nl.NetlinkRequest) (Link, error) {
	msgs, err := req.Execute(unix.NETLINK_ROUTE, 0)
	if err != nil {
		if errno, ok := err.(syscall.Errno); ok {
			if errno == unix.ENODEV {
				return nil, LinkNotFoundError{fmt.Errorf("Link not found")}
			}
		}
		return nil, err
	}

	switch {
	case len(msgs) == 0:
		return nil, LinkNotFoundError{fmt.Errorf("Link not found")}

	case len(msgs) == 1:
		return LinkDeserialize(nil, msgs[0])

	default:
		return nil, fmt.Errorf("More than one link found")
	}
}

// LinkDeserialize deserializes a raw message received from netlink into
// a link object.
func LinkDeserialize(hdr *unix.NlMsghdr, m []byte) (Link, error) {
	msg := nl.DeserializeIfInfomsg(m)

	attrs, err := nl.ParseRouteAttr(m[msg.Len():])
	if err != nil {
		return nil, err
	}

	base := NewLinkAttrs()
	base.Index = int(msg.Index)
	base.RawFlags = msg.Flags
	base.Flags = linkFlags(msg.Flags)
	base.EncapType = msg.EncapType()
	base.NetNsID = -1
	if msg.Flags&unix.IFF_PROMISC != 0 {
		base.Promisc = 1
	}
	if msg.Flags&unix.IFF_ALLMULTI != 0 {
		base.Allmulti = 1
	}
	if msg.Flags&unix.IFF_MULTICAST != 0 {
		base.Multi = 1
	}

	var (
		link      Link
		stats32   *LinkStatistics32
		stats64   *LinkStatistics64
		linkType  string
		linkSlave LinkSlave
		slaveType string
	)
	for _, attr := range attrs {
		switch attr.Attr.Type {
		case unix.IFLA_LINKINFO:
			infos, err := nl.ParseRouteAttr(attr.Value)
			if err != nil {
				return nil, err
			}
			for _, info := range infos {
				switch info.Attr.Type {
				case nl.IFLA_INFO_KIND:
					linkType = string(info.Value[:len(info.Value)-1])
					switch linkType {
					case "dummy":
						link = &Dummy{}
					case "ifb":
						link = &Ifb{}
					case "bridge":
						link = &Bridge{}
					case "vlan":
						link = &Vlan{}
					case "veth":
						link = &Veth{}
					case "wireguard":
						link = &Wireguard{}
					case "vxlan":
						link = &Vxlan{}
					case "bond":
						link = &Bond{}
					case "ipvlan":
						link = &IPVlan{}
					case "ipvtap":
						link = &IPVtap{}
					case "macvlan":
						link = &Macvlan{}
					case "macvtap":
						link = &Macvtap{}
					case "geneve":
						link = &Geneve{}
					case "gretap":
						link = &Gretap{}
					case "ip6gretap":
						link = &Gretap{}
					case "ipip":
						link = &Iptun{}
					case "ip6tnl":
						link = &Ip6tnl{}
					case "sit":
						link = &Sittun{}
					case "gre":
						link = &Gretun{}
					case "ip6gre":
						link = &Gretun{}
					case "vti", "vti6":
						link = &Vti{}
					case "vrf":
						link = &Vrf{}
					case "gtp":
						link = &GTP{}
					case "xfrm":
						link = &Xfrmi{}
					case "tun":
						link = &Tuntap{}
					case "ipoib":
						link = &IPoIB{}
					case "can":
						link = &Can{}
					case "bareudp":
						link = &BareUDP{}
					default:
						link = &GenericLink{LinkType: linkType}
					}
				case nl.IFLA_INFO_DATA:
					data, err := nl.ParseRouteAttr(info.Value)
					if err != nil {
						return nil, err
					}
					switch linkType {
					case "vlan":
						parseVlanData(link, data)
					case "vxlan":
						parseVxlanData(link, data)
					case "bond":
						parseBondData(link, data)
					case "ipvlan":
						parseIPVlanData(link, data)
					case "ipvtap":
						parseIPVtapData(link, data)
					case "macvlan":
						parseMacvlanData(link, data)
					case "macvtap":
						parseMacvtapData(link, data)
					case "geneve":
						parseGeneveData(link, data)
					case "gretap":
						parseGretapData(link, data)
					case "ip6gretap":
						parseGretapData(link, data)
					case "ipip":
						parseIptunData(link, data)
					case "ip6tnl":
						parseIp6tnlData(link, data)
					case "sit":
						parseSittunData(link, data)
					case "gre":
						parseGretunData(link, data)
					case "ip6gre":
						parseGretunData(link, data)
					case "vti", "vti6":
						parseVtiData(link, data)
					case "vrf":
						parseVrfData(link, data)
					case "bridge":
						parseBridgeData(link, data)
					case "gtp":
						parseGTPData(link, data)
					case "xfrm":
						parseXfrmiData(link, data)
					case "tun":
						parseTuntapData(link, data)
					case "ipoib":
						parseIPoIBData(link, data)
					case "can":
						parseCanData(link, data)
					case "bareudp":
						parseBareUDPData(link, data)
					}

				case nl.IFLA_INFO_SLAVE_KIND:
					slaveType = string(info.Value[:len(info.Value)-1])
					switch slaveType {
					case "bond":
						linkSlave = &BondSlave{}
					case "vrf":
						linkSlave = &VrfSlave{}
					}

				case nl.IFLA_INFO_SLAVE_DATA:
					switch slaveType {
					case "bond":
						data, err := nl.ParseRouteAttr(info.Value)
						if err != nil {
							return nil, err
						}
						parseBondSlaveData(linkSlave, data)
					case "vrf":
						data, err := nl.ParseRouteAttr(info.Value)
						if err != nil {
							return nil, err
						}
						parseVrfSlaveData(linkSlave, data)
					}
				}
			}
		case unix.IFLA_ADDRESS:
			var nonzero bool
			for _, b := range attr.Value {
				if b != 0 {
					nonzero = true
				}
			}
			if nonzero {
				base.HardwareAddr = attr.Value[:]
			}
		case unix.IFLA_IFNAME:
			base.Name = string(attr.Value[:len(attr.Value)-1])
		case unix.IFLA_MTU:
			base.MTU = int(native.Uint32(attr.Value[0:4]))
		case unix.IFLA_LINK:
			base.ParentIndex = int(native.Uint32(attr.Value[0:4]))
		case unix.IFLA_MASTER:
			base.MasterIndex = int(native.Uint32(attr.Value[0:4]))
		case unix.IFLA_TXQLEN:
			base.TxQLen = int(native.Uint32(attr.Value[0:4]))
		case unix.IFLA_IFALIAS:
			base.Alias = string(attr.Value[:len(attr.Value)-1])
		case unix.IFLA_STATS:
			stats32 = new(LinkStatistics32)
			if err := binary.Read(bytes.NewBuffer(attr.Value[:]), nl.NativeEndian(), stats32); err != nil {
				return nil, err
			}
		case unix.IFLA_STATS64:
			stats64 = new(LinkStatistics64)
			if err := binary.Read(bytes.NewBuffer(attr.Value[:]), nl.NativeEndian(), stats64); err != nil {
				return nil, err
			}
		case unix.IFLA_XDP:
			xdp, err := parseLinkXdp(attr.Value[:])
			if err != nil {
				return nil, err
			}
			base.Xdp = xdp
		case unix.IFLA_PROTINFO | unix.NLA_F_NESTED:
			if hdr != nil && hdr.Type == unix.RTM_NEWLINK &&
				msg.Family == unix.AF_BRIDGE {
				attrs, err := nl.ParseRouteAttr(attr.Value[:])
				if err != nil {
					return nil, err
				}
				protinfo := parseProtinfo(attrs)
				base.Protinfo = &protinfo
			}
		case unix.IFLA_OPERSTATE:
			base.OperState = LinkOperState(uint8(attr.Value[0]))
		case unix.IFLA_PHYS_SWITCH_ID:
			base.PhysSwitchID = int(native.Uint32(attr.Value[0:4]))
		case unix.IFLA_LINK_NETNSID:
			base.NetNsID = int(native.Uint32(attr.Value[0:4]))
		case unix.IFLA_GSO_MAX_SIZE:
			base.GSOMaxSize = native.Uint32(attr.Value[0:4])
		case unix.IFLA_GSO_MAX_SEGS:
			base.GSOMaxSegs = native.Uint32(attr.Value[0:4])
		case unix.IFLA_VFINFO_LIST:
			data, err := nl.ParseRouteAttr(attr.Value)
			if err != nil {
				return nil, err
			}
			vfs, err := parseVfInfoList(data)
			if err != nil {
				return nil, err
			}
			base.Vfs = vfs
		case unix.IFLA_NUM_TX_QUEUES:
			base.NumTxQueues = int(native.Uint32(attr.Value[0:4]))
		case unix.IFLA_NUM_RX_QUEUES:
			base.NumRxQueues = int(native.Uint32(attr.Value[0:4]))
		case unix.IFLA_GROUP:
			base.Group = native.Uint32(attr.Value[0:4])
		}
	}

	if stats64 != nil {
		base.Statistics = (*LinkStatistics)(stats64)
	} else if stats32 != nil {
		base.Statistics = (*LinkStatistics)(stats32.to64())
	}

	// Links that don't have IFLA_INFO_KIND are hardware devices
	if link == nil {
		link = &Device{}
	}
	*link.Attrs() = base
	link.Attrs().Slave = linkSlave

	// If the tuntap attributes are not updated by netlink due to
	// an older driver, use sysfs
	if link != nil && linkType == "tun" {
		tuntap := link.(*Tuntap)

		if tuntap.Mode == 0 {
			ifname := tuntap.Attrs().Name
			if flags, err := readSysPropAsInt64(ifname, "tun_flags"); err == nil {

				if flags&unix.IFF_TUN != 0 {
					tuntap.Mode = unix.IFF_TUN
				} else if flags&unix.IFF_TAP != 0 {
					tuntap.Mode = unix.IFF_TAP
				}

				tuntap.NonPersist = false
				if flags&unix.IFF_PERSIST == 0 {
					tuntap.NonPersist = true
				}
			}

			// The sysfs interface for owner/group returns -1 for root user, instead of returning 0.
			// So explicitly check for negative value, before assigning the owner uid/gid.
			if owner, err := readSysPropAsInt64(ifname, "owner"); err == nil && owner > 0 {
				tuntap.Owner = uint32(owner)
			}

			if group, err := readSysPropAsInt64(ifname, "group"); err == nil && group > 0 {
				tuntap.Group = uint32(group)
			}
		}
	}

	return link, nil
}

func readSysPropAsInt64(ifname, prop string) (int64, error) {
	fname := fmt.Sprintf("/sys/class/net/%s/%s", ifname, prop)
	contents, err := ioutil.ReadFile(fname)
	if err != nil {
		return 0, err
	}

	num, err := strconv.ParseInt(strings.TrimSpace(string(contents)), 0, 64)
	if err == nil {
		return num, nil
	}

	return 0, err
}

// LinkList gets a list of link devices.
// Equivalent to: `ip link show`
func LinkList() ([]Link, error) {
	return pkgHandle.LinkList()
}

// LinkList gets a list of link devices.
// Equivalent to: `ip link show`
func (h *Handle) LinkList() ([]Link, error) {
	// NOTE(vish): This duplicates functionality in net/iface_linux.go, but we need
	//             to get the message ourselves to parse link type.
	req := h.newNetlinkRequest(unix.RTM_GETLINK, unix.NLM_F_DUMP)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	req.AddData(msg)
	attr := nl.NewRtAttr(unix.IFLA_EXT_MASK, nl.Uint32Attr(nl.RTEXT_FILTER_VF))
	req.AddData(attr)

	msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWLINK)
	if err != nil {
		return nil, err
	}

	var res []Link
	for _, m := range msgs {
		link, err := LinkDeserialize(nil, m)
		if err != nil {
			return nil, err
		}
		res = append(res, link)
	}

	return res, nil
}

// LinkUpdate is used to pass information back from LinkSubscribe()
type LinkUpdate struct {
	nl.IfInfomsg
	Header unix.NlMsghdr
	Link
}

// LinkSubscribe takes a chan down which notifications will be sent
// when links change.  Close the 'done' chan to stop subscription.
func LinkSubscribe(ch chan<- LinkUpdate, done <-chan struct{}) error {
	return linkSubscribeAt(netns.None(), netns.None(), ch, done, nil, false)
}

// LinkSubscribeAt works like LinkSubscribe plus it allows the caller
// to choose the network namespace in which to subscribe (ns).
func LinkSubscribeAt(ns netns.NsHandle, ch chan<- LinkUpdate, done <-chan struct{}) error {
	return linkSubscribeAt(ns, netns.None(), ch, done, nil, false)
}

// LinkSubscribeOptions contains a set of options to use with
// LinkSubscribeWithOptions.
type LinkSubscribeOptions struct {
	Namespace     *netns.NsHandle
	ErrorCallback func(error)
	ListExisting  bool
}

// LinkSubscribeWithOptions work like LinkSubscribe but enable to
// provide additional options to modify the behavior. Currently, the
// namespace can be provided as well as an error callback.
func LinkSubscribeWithOptions(ch chan<- LinkUpdate, done <-chan struct{}, options LinkSubscribeOptions) error {
	if options.Namespace == nil {
		none := netns.None()
		options.Namespace = &none
	}
	return linkSubscribeAt(*options.Namespace, netns.None(), ch, done, options.ErrorCallback, options.ListExisting)
}

func linkSubscribeAt(newNs, curNs netns.NsHandle, ch chan<- LinkUpdate, done <-chan struct{}, cberr func(error), listExisting bool) error {
	s, err := nl.SubscribeAt(newNs, curNs, unix.NETLINK_ROUTE, unix.RTNLGRP_LINK)
	if err != nil {
		return err
	}
	if done != nil {
		go func() {
			<-done
			s.Close()
		}()
	}
	if listExisting {
		req := pkgHandle.newNetlinkRequest(unix.RTM_GETLINK,
			unix.NLM_F_DUMP)
		msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
		req.AddData(msg)
		if err := s.Send(req); err != nil {
			return err
		}
	}
	go func() {
		defer close(ch)
		for {
			msgs, from, err := s.Receive()
			if err != nil {
				if cberr != nil {
					cberr(fmt.Errorf("Receive failed: %v",
						err))
				}
				return
			}
			if from.Pid != nl.PidKernel {
				if cberr != nil {
					cberr(fmt.Errorf("Wrong sender portid %d, expected %d", from.Pid, nl.PidKernel))
				}
				continue
			}
			for _, m := range msgs {
				if m.Header.Type == unix.NLMSG_DONE {
					continue
				}
				if m.Header.Type == unix.NLMSG_ERROR {
					error := int32(native.Uint32(m.Data[0:4]))
					if error == 0 {
						continue
					}
					if cberr != nil {
						cberr(fmt.Errorf("error message: %v",
							syscall.Errno(-error)))
					}
					continue
				}
				ifmsg := nl.DeserializeIfInfomsg(m.Data)
				header := unix.NlMsghdr(m.Header)
				link, err := LinkDeserialize(&header, m.Data)
				if err != nil {
					if cberr != nil {
						cberr(err)
					}
					continue
				}
				ch <- LinkUpdate{IfInfomsg: *ifmsg, Header: header, Link: link}
			}
		}
	}()

	return nil
}

func LinkSetHairpin(link Link, mode bool) error {
	return pkgHandle.LinkSetHairpin(link, mode)
}

func (h *Handle) LinkSetHairpin(link Link, mode bool) error {
	return h.setProtinfoAttr(link, mode, nl.IFLA_BRPORT_MODE)
}

func LinkSetGuard(link Link, mode bool) error {
	return pkgHandle.LinkSetGuard(link, mode)
}

func (h *Handle) LinkSetGuard(link Link, mode bool) error {
	return h.setProtinfoAttr(link, mode, nl.IFLA_BRPORT_GUARD)
}

func LinkSetFastLeave(link Link, mode bool) error {
	return pkgHandle.LinkSetFastLeave(link, mode)
}

func (h *Handle) LinkSetFastLeave(link Link, mode bool) error {
	return h.setProtinfoAttr(link, mode, nl.IFLA_BRPORT_FAST_LEAVE)
}

func LinkSetLearning(link Link, mode bool) error {
	return pkgHandle.LinkSetLearning(link, mode)
}

func (h *Handle) LinkSetLearning(link Link, mode bool) error {
	return h.setProtinfoAttr(link, mode, nl.IFLA_BRPORT_LEARNING)
}

func LinkSetRootBlock(link Link, mode bool) error {
	return pkgHandle.LinkSetRootBlock(link, mode)
}

func (h *Handle) LinkSetRootBlock(link Link, mode bool) error {
	return h.setProtinfoAttr(link, mode, nl.IFLA_BRPORT_PROTECT)
}

func LinkSetFlood(link Link, mode bool) error {
	return pkgHandle.LinkSetFlood(link, mode)
}

func (h *Handle) LinkSetFlood(link Link, mode bool) error {
	return h.setProtinfoAttr(link, mode, nl.IFLA_BRPORT_UNICAST_FLOOD)
}

func LinkSetBrProxyArp(link Link, mode bool) error {
	return pkgHandle.LinkSetBrProxyArp(link, mode)
}

func (h *Handle) LinkSetBrProxyArp(link Link, mode bool) error {
	return h.setProtinfoAttr(link, mode, nl.IFLA_BRPORT_PROXYARP)
}

func LinkSetBrProxyArpWiFi(link Link, mode bool) error {
	return pkgHandle.LinkSetBrProxyArpWiFi(link, mode)
}

func (h *Handle) LinkSetBrProxyArpWiFi(link Link, mode bool) error {
	return h.setProtinfoAttr(link, mode, nl.IFLA_BRPORT_PROXYARP_WIFI)
}

func (h *Handle) setProtinfoAttr(link Link, mode bool, attr int) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_BRIDGE)
	msg.Index = int32(base.Index)
	req.AddData(msg)

	br := nl.NewRtAttr(unix.IFLA_PROTINFO|unix.NLA_F_NESTED, nil)
	br.AddRtAttr(attr, boolToByte(mode))
	req.AddData(br)
	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	if err != nil {
		return err
	}
	return nil
}

// LinkSetTxQLen sets the transaction queue length for the link.
// Equivalent to: `ip link set $link txqlen $qlen`
func LinkSetTxQLen(link Link, qlen int) error {
	return pkgHandle.LinkSetTxQLen(link, qlen)
}

// LinkSetTxQLen sets the transaction queue length for the link.
// Equivalent to: `ip link set $link txqlen $qlen`
func (h *Handle) LinkSetTxQLen(link Link, qlen int) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Index = int32(base.Index)
	req.AddData(msg)

	b := make([]byte, 4)
	native.PutUint32(b, uint32(qlen))

	data := nl.NewRtAttr(unix.IFLA_TXQLEN, b)
	req.AddData(data)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// LinkSetGroup sets the link group id which can be used to perform mass actions
// with iproute2 as well use it as a reference in nft filters.
// Equivalent to: `ip link set $link group $id`
func LinkSetGroup(link Link, group int) error {
	return pkgHandle.LinkSetGroup(link, group)
}

// LinkSetGroup sets the link group id which can be used to perform mass actions
// with iproute2 as well use it as a reference in nft filters.
// Equivalent to: `ip link set $link group $id`
func (h *Handle) LinkSetGroup(link Link, group int) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Index = int32(base.Index)
	req.AddData(msg)

	b := make([]byte, 4)
	native.PutUint32(b, uint32(group))

	data := nl.NewRtAttr(unix.IFLA_GROUP, b)
	req.AddData(data)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

func parseVlanData(link Link, data []syscall.NetlinkRouteAttr) {
	vlan := link.(*Vlan)
	for _, datum := range data {
		switch datum.Attr.Type {
		case nl.IFLA_VLAN_ID:
			vlan.VlanId = int(native.Uint16(datum.Value[0:2]))
		case nl.IFLA_VLAN_PROTOCOL:
			vlan.VlanProtocol = VlanProtocol(int(ntohs(datum.Value[0:2])))
		}
	}
}

func parseVxlanData(link Link, data []syscall.NetlinkRouteAttr) {
	vxlan := link.(*Vxlan)
	for _, datum := range data {
		// NOTE(vish): Apparently some messages can be sent with no value.
		//             We special case GBP here to not change existing
		//             functionality. It appears that GBP sends a datum.Value
		//             of null.
		if len(datum.Value) == 0 && datum.Attr.Type != nl.IFLA_VXLAN_GBP {
			continue
		}
		switch datum.Attr.Type {
		case nl.IFLA_VXLAN_ID:
			vxlan.VxlanId = int(native.Uint32(datum.Value[0:4]))
		case nl.IFLA_VXLAN_LINK:
			vxlan.VtepDevIndex = int(native.Uint32(datum.Value[0:4]))
		case nl.IFLA_VXLAN_LOCAL:
			vxlan.SrcAddr = net.IP(datum.Value[0:4])
		case nl.IFLA_VXLAN_LOCAL6:
			vxlan.SrcAddr = net.IP(datum.Value[0:16])
		case nl.IFLA_VXLAN_GROUP:
			vxlan.Group = net.IP(datum.Value[0:4])
		case nl.IFLA_VXLAN_GROUP6:
			vxlan.Group = net.IP(datum.Value[0:16])
		case nl.IFLA_VXLAN_TTL:
			vxlan.TTL = int(datum.Value[0])
		case nl.IFLA_VXLAN_TOS:
			vxlan.TOS = int(datum.Value[0])
		case nl.IFLA_VXLAN_LEARNING:
			vxlan.Learning = int8(datum.Value[0]) != 0
		case nl.IFLA_VXLAN_PROXY:
			vxlan.Proxy = int8(datum.Value[0]) != 0
		case nl.IFLA_VXLAN_RSC:
			vxlan.RSC = int8(datum.Value[0]) != 0
		case nl.IFLA_VXLAN_L2MISS:
			vxlan.L2miss = int8(datum.Value[0]) != 0
		case nl.IFLA_VXLAN_L3MISS:
			vxlan.L3miss = int8(datum.Value[0]) != 0
		case nl.IFLA_VXLAN_UDP_CSUM:
			vxlan.UDPCSum = int8(datum.Value[0]) != 0
		case nl.IFLA_VXLAN_UDP_ZERO_CSUM6_TX:
			vxlan.UDP6ZeroCSumTx = int8(datum.Value[0]) != 0
		case nl.IFLA_VXLAN_UDP_ZERO_CSUM6_RX:
			vxlan.UDP6ZeroCSumRx = int8(datum.Value[0]) != 0
		case nl.IFLA_VXLAN_GBP:
			vxlan.GBP = true
		case nl.IFLA_VXLAN_FLOWBASED:
			vxlan.FlowBased = int8(datum.Value[0]) != 0
		case nl.IFLA_VXLAN_AGEING:
			vxlan.Age = int(native.Uint32(datum.Value[0:4]))
			vxlan.NoAge = vxlan.Age == 0
		case nl.IFLA_VXLAN_LIMIT:
			vxlan.Limit = int(native.Uint32(datum.Value[0:4]))
		case nl.IFLA_VXLAN_PORT:
			vxlan.Port = int(ntohs(datum.Value[0:2]))
		case nl.IFLA_VXLAN_PORT_RANGE:
			buf := bytes.NewBuffer(datum.Value[0:4])
			var pr vxlanPortRange
			if binary.Read(buf, binary.BigEndian, &pr) != nil {
				vxlan.PortLow = int(pr.Lo)
				vxlan.PortHigh = int(pr.Hi)
			}
		}
	}
}

func parseBondData(link Link, data []syscall.NetlinkRouteAttr) {
	bond := link.(*Bond)
	for i := range data {
		switch data[i].Attr.Type {
		case nl.IFLA_BOND_MODE:
			bond.Mode = BondMode(data[i].Value[0])
		case nl.IFLA_BOND_ACTIVE_SLAVE:
			bond.ActiveSlave = int(native.Uint32(data[i].Value[0:4]))
		case nl.IFLA_BOND_MIIMON:
			bond.Miimon = int(native.Uint32(data[i].Value[0:4]))
		case nl.IFLA_BOND_UPDELAY:
			bond.UpDelay = int(native.Uint32(data[i].Value[0:4]))
		case nl.IFLA_BOND_DOWNDELAY:
			bond.DownDelay = int(native.Uint32(data[i].Value[0:4]))
		case nl.IFLA_BOND_USE_CARRIER:
			bond.UseCarrier = int(data[i].Value[0])
		case nl.IFLA_BOND_ARP_INTERVAL:
			bond.ArpInterval = int(native.Uint32(data[i].Value[0:4]))
		case nl.IFLA_BOND_ARP_IP_TARGET:
			bond.ArpIpTargets = parseBondArpIpTargets(data[i].Value)
		case nl.IFLA_BOND_ARP_VALIDATE:
			bond.ArpValidate = BondArpValidate(native.Uint32(data[i].Value[0:4]))
		case nl.IFLA_BOND_ARP_ALL_TARGETS:
			bond.ArpAllTargets = BondArpAllTargets(native.Uint32(data[i].Value[0:4]))
		case nl.IFLA_BOND_PRIMARY:
			bond.Primary = int(native.Uint32(data[i].Value[0:4]))
		case nl.IFLA_BOND_PRIMARY_RESELECT:
			bond.PrimaryReselect = BondPrimaryReselect(data[i].Value[0])
		case nl.IFLA_BOND_FAIL_OVER_MAC:
			bond.FailOverMac = BondFailOverMac(data[i].Value[0])
		case nl.IFLA_BOND_XMIT_HASH_POLICY:
			bond.XmitHashPolicy = BondXmitHashPolicy(data[i].Value[0])
		case nl.IFLA_BOND_RESEND_IGMP:
			bond.ResendIgmp = int(native.Uint32(data[i].Value[0:4]))
		case nl.IFLA_BOND_NUM_PEER_NOTIF:
			bond.NumPeerNotif = int(data[i].Value[0])
		case nl.IFLA_BOND_ALL_SLAVES_ACTIVE:
			bond.AllSlavesActive = int(data[i].Value[0])
		case nl.IFLA_BOND_MIN_LINKS:
			bond.MinLinks = int(native.Uint32(data[i].Value[0:4]))
		case nl.IFLA_BOND_LP_INTERVAL:
			bond.LpInterval = int(native.Uint32(data[i].Value[0:4]))
		case nl.IFLA_BOND_PACKETS_PER_SLAVE:
			bond.PacketsPerSlave = int(native.Uint32(data[i].Value[0:4]))
		case nl.IFLA_BOND_AD_LACP_RATE:
			bond.LacpRate = BondLacpRate(data[i].Value[0])
		case nl.IFLA_BOND_AD_SELECT:
			bond.AdSelect = BondAdSelect(data[i].Value[0])
		case nl.IFLA_BOND_AD_INFO:
			// TODO: implement
		case nl.IFLA_BOND_AD_ACTOR_SYS_PRIO:
			bond.AdActorSysPrio = int(native.Uint16(data[i].Value[0:2]))
		case nl.IFLA_BOND_AD_USER_PORT_KEY:
			bond.AdUserPortKey = int(native.Uint16(data[i].Value[0:2]))
		case nl.IFLA_BOND_AD_ACTOR_SYSTEM:
			bond.AdActorSystem = net.HardwareAddr(data[i].Value[0:6])
		case nl.IFLA_BOND_TLB_DYNAMIC_LB:
			bond.TlbDynamicLb = int(data[i].Value[0])
		}
	}
}

func parseBondArpIpTargets(value []byte) []net.IP {
	data, err := nl.ParseRouteAttr(value)
	if err != nil {
		return nil
	}

	targets := []net.IP{}
	for i := range data {
		target := net.IP(data[i].Value)
		if ip := target.To4(); ip != nil {
			targets = append(targets, ip)
			continue
		}
		if ip := target.To16(); ip != nil {
			targets = append(targets, ip)
		}
	}

	return targets
}

func addBondSlaveAttrs(bondSlave *BondSlave, linkInfo *nl.RtAttr) {
	data := linkInfo.AddRtAttr(nl.IFLA_INFO_SLAVE_DATA, nil)

	data.AddRtAttr(nl.IFLA_BOND_SLAVE_STATE, nl.Uint8Attr(uint8(bondSlave.State)))
	data.AddRtAttr(nl.IFLA_BOND_SLAVE_MII_STATUS, nl.Uint8Attr(uint8(bondSlave.MiiStatus)))
	data.AddRtAttr(nl.IFLA_BOND_SLAVE_LINK_FAILURE_COUNT, nl.Uint32Attr(bondSlave.LinkFailureCount))
	data.AddRtAttr(nl.IFLA_BOND_SLAVE_QUEUE_ID, nl.Uint16Attr(bondSlave.QueueId))
	data.AddRtAttr(nl.IFLA_BOND_SLAVE_AD_AGGREGATOR_ID, nl.Uint16Attr(bondSlave.AggregatorId))
	data.AddRtAttr(nl.IFLA_BOND_SLAVE_AD_ACTOR_OPER_PORT_STATE, nl.Uint8Attr(bondSlave.AdActorOperPortState))
	data.AddRtAttr(nl.IFLA_BOND_SLAVE_AD_PARTNER_OPER_PORT_STATE, nl.Uint16Attr(bondSlave.AdPartnerOperPortState))

	if mac := bondSlave.PermHardwareAddr; mac != nil {
		data.AddRtAttr(nl.IFLA_BOND_SLAVE_PERM_HWADDR, []byte(mac))
	}
}

func parseBondSlaveData(slave LinkSlave, data []syscall.NetlinkRouteAttr) {
	bondSlave := slave.(*BondSlave)
	for i := range data {
		switch data[i].Attr.Type {
		case nl.IFLA_BOND_SLAVE_STATE:
			bondSlave.State = BondSlaveState(data[i].Value[0])
		case nl.IFLA_BOND_SLAVE_MII_STATUS:
			bondSlave.MiiStatus = BondSlaveMiiStatus(data[i].Value[0])
		case nl.IFLA_BOND_SLAVE_LINK_FAILURE_COUNT:
			bondSlave.LinkFailureCount = native.Uint32(data[i].Value[0:4])
		case nl.IFLA_BOND_SLAVE_PERM_HWADDR:
			bondSlave.PermHardwareAddr = net.HardwareAddr(data[i].Value[0:6])
		case nl.IFLA_BOND_SLAVE_QUEUE_ID:
			bondSlave.QueueId = native.Uint16(data[i].Value[0:2])
		case nl.IFLA_BOND_SLAVE_AD_AGGREGATOR_ID:
			bondSlave.AggregatorId = native.Uint16(data[i].Value[0:2])
		case nl.IFLA_BOND_SLAVE_AD_ACTOR_OPER_PORT_STATE:
			bondSlave.AdActorOperPortState = uint8(data[i].Value[0])
		case nl.IFLA_BOND_SLAVE_AD_PARTNER_OPER_PORT_STATE:
			bondSlave.AdPartnerOperPortState = native.Uint16(data[i].Value[0:2])
		}
	}
}

func parseVrfSlaveData(slave LinkSlave, data []syscall.NetlinkRouteAttr) {
	vrfSlave := slave.(*VrfSlave)
	for i := range data {
		switch data[i].Attr.Type {
		case nl.IFLA_BOND_SLAVE_STATE:
			vrfSlave.Table = native.Uint32(data[i].Value[0:4])
		}
	}
}

func parseIPVlanData(link Link, data []syscall.NetlinkRouteAttr) {
	ipv := link.(*IPVlan)
	for _, datum := range data {
		switch datum.Attr.Type {
		case nl.IFLA_IPVLAN_MODE:
			ipv.Mode = IPVlanMode(native.Uint32(datum.Value[0:4]))
		case nl.IFLA_IPVLAN_FLAG:
			ipv.Flag = IPVlanFlag(native.Uint32(datum.Value[0:4]))
		}
	}
}

func parseIPVtapData(link Link, data []syscall.NetlinkRouteAttr) {
	ipv := link.(*IPVtap)
	for _, datum := range data {
		switch datum.Attr.Type {
		case nl.IFLA_IPVLAN_MODE:
			ipv.Mode = IPVlanMode(native.Uint32(datum.Value[0:4]))
		case nl.IFLA_IPVLAN_FLAG:
			ipv.Flag = IPVlanFlag(native.Uint32(datum.Value[0:4]))
		}
	}
}

func parseMacvtapData(link Link, data []syscall.NetlinkRouteAttr) {
	macv := link.(*Macvtap)
	parseMacvlanData(&macv.Macvlan, data)
}

func parseMacvlanData(link Link, data []syscall.NetlinkRouteAttr) {
	macv := link.(*Macvlan)
	for _, datum := range data {
		switch datum.Attr.Type {
		case nl.IFLA_MACVLAN_MODE:
			switch native.Uint32(datum.Value[0:4]) {
			case nl.MACVLAN_MODE_PRIVATE:
				macv.Mode = MACVLAN_MODE_PRIVATE
			case nl.MACVLAN_MODE_VEPA:
				macv.Mode = MACVLAN_MODE_VEPA
			case nl.MACVLAN_MODE_BRIDGE:
				macv.Mode = MACVLAN_MODE_BRIDGE
			case nl.MACVLAN_MODE_PASSTHRU:
				macv.Mode = MACVLAN_MODE_PASSTHRU
			case nl.MACVLAN_MODE_SOURCE:
				macv.Mode = MACVLAN_MODE_SOURCE
			}
		case nl.IFLA_MACVLAN_MACADDR_COUNT:
			macv.MACAddrs = make([]net.HardwareAddr, 0, int(native.Uint32(datum.Value[0:4])))
		case nl.IFLA_MACVLAN_MACADDR_DATA:
			macs, err := nl.ParseRouteAttr(datum.Value[:])
			if err != nil {
				panic(fmt.Sprintf("failed to ParseRouteAttr for IFLA_MACVLAN_MACADDR_DATA: %v", err))
			}
			for _, macDatum := range macs {
				macv.MACAddrs = append(macv.MACAddrs, net.HardwareAddr(macDatum.Value[0:6]))
			}
		}
	}
}

// copied from pkg/net_linux.go
func linkFlags(rawFlags uint32) net.Flags {
	var f net.Flags
	if rawFlags&unix.IFF_UP != 0 {
		f |= net.FlagUp
	}
	if rawFlags&unix.IFF_BROADCAST != 0 {
		f |= net.FlagBroadcast
	}
	if rawFlags&unix.IFF_LOOPBACK != 0 {
		f |= net.FlagLoopback
	}
	if rawFlags&unix.IFF_POINTOPOINT != 0 {
		f |= net.FlagPointToPoint
	}
	if rawFlags&unix.IFF_MULTICAST != 0 {
		f |= net.FlagMulticast
	}
	return f
}

func addGeneveAttrs(geneve *Geneve, linkInfo *nl.RtAttr) {
	data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)

	if geneve.FlowBased {
		// In flow based mode, no other attributes need to be configured
		linkInfo.AddRtAttr(nl.IFLA_GENEVE_COLLECT_METADATA, boolAttr(geneve.FlowBased))
		return
	}

	if ip := geneve.Remote; ip != nil {
		if ip4 := ip.To4(); ip4 != nil {
			data.AddRtAttr(nl.IFLA_GENEVE_REMOTE, ip.To4())
		} else {
			data.AddRtAttr(nl.IFLA_GENEVE_REMOTE6, []byte(ip))
		}
	}

	if geneve.ID != 0 {
		data.AddRtAttr(nl.IFLA_GENEVE_ID, nl.Uint32Attr(geneve.ID))
	}

	if geneve.Dport != 0 {
		data.AddRtAttr(nl.IFLA_GENEVE_PORT, htons(geneve.Dport))
	}

	if geneve.Ttl != 0 {
		data.AddRtAttr(nl.IFLA_GENEVE_TTL, nl.Uint8Attr(geneve.Ttl))
	}

	if geneve.Tos != 0 {
		data.AddRtAttr(nl.IFLA_GENEVE_TOS, nl.Uint8Attr(geneve.Tos))
	}
}

func parseGeneveData(link Link, data []syscall.NetlinkRouteAttr) {
	geneve := link.(*Geneve)
	for _, datum := range data {
		switch datum.Attr.Type {
		case nl.IFLA_GENEVE_ID:
			geneve.ID = native.Uint32(datum.Value[0:4])
		case nl.IFLA_GENEVE_REMOTE, nl.IFLA_GENEVE_REMOTE6:
			geneve.Remote = datum.Value
		case nl.IFLA_GENEVE_PORT:
			geneve.Dport = ntohs(datum.Value[0:2])
		case nl.IFLA_GENEVE_TTL:
			geneve.Ttl = uint8(datum.Value[0])
		case nl.IFLA_GENEVE_TOS:
			geneve.Tos = uint8(datum.Value[0])
		}
	}
}

func addGretapAttrs(gretap *Gretap, linkInfo *nl.RtAttr) {
	data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)

	if gretap.FlowBased {
		// In flow based mode, no other attributes need to be configured
		data.AddRtAttr(nl.IFLA_GRE_COLLECT_METADATA, boolAttr(gretap.FlowBased))
		return
	}

	if ip := gretap.Local; ip != nil {
		if ip.To4() != nil {
			ip = ip.To4()
		}
		data.AddRtAttr(nl.IFLA_GRE_LOCAL, []byte(ip))
	}

	if ip := gretap.Remote; ip != nil {
		if ip.To4() != nil {
			ip = ip.To4()
		}
		data.AddRtAttr(nl.IFLA_GRE_REMOTE, []byte(ip))
	}

	if gretap.IKey != 0 {
		data.AddRtAttr(nl.IFLA_GRE_IKEY, htonl(gretap.IKey))
		gretap.IFlags |= uint16(nl.GRE_KEY)
	}

	if gretap.OKey != 0 {
		data.AddRtAttr(nl.IFLA_GRE_OKEY, htonl(gretap.OKey))
		gretap.OFlags |= uint16(nl.GRE_KEY)
	}

	data.AddRtAttr(nl.IFLA_GRE_IFLAGS, htons(gretap.IFlags))
	data.AddRtAttr(nl.IFLA_GRE_OFLAGS, htons(gretap.OFlags))

	if gretap.Link != 0 {
		data.AddRtAttr(nl.IFLA_GRE_LINK, nl.Uint32Attr(gretap.Link))
	}

	data.AddRtAttr(nl.IFLA_GRE_PMTUDISC, nl.Uint8Attr(gretap.PMtuDisc))
	data.AddRtAttr(nl.IFLA_GRE_TTL, nl.Uint8Attr(gretap.Ttl))
	data.AddRtAttr(nl.IFLA_GRE_TOS, nl.Uint8Attr(gretap.Tos))
	data.AddRtAttr(nl.IFLA_GRE_ENCAP_TYPE, nl.Uint16Attr(gretap.EncapType))
	data.AddRtAttr(nl.IFLA_GRE_ENCAP_FLAGS, nl.Uint16Attr(gretap.EncapFlags))
	data.AddRtAttr(nl.IFLA_GRE_ENCAP_SPORT, htons(gretap.EncapSport))
	data.AddRtAttr(nl.IFLA_GRE_ENCAP_DPORT, htons(gretap.EncapDport))
}

func parseGretapData(link Link, data []syscall.NetlinkRouteAttr) {
	gre := link.(*Gretap)
	for _, datum := range data {
		switch datum.Attr.Type {
		case nl.IFLA_GRE_OKEY:
			gre.IKey = ntohl(datum.Value[0:4])
		case nl.IFLA_GRE_IKEY:
			gre.OKey = ntohl(datum.Value[0:4])
		case nl.IFLA_GRE_LOCAL:
			gre.Local = net.IP(datum.Value)
		case nl.IFLA_GRE_REMOTE:
			gre.Remote = net.IP(datum.Value)
		case nl.IFLA_GRE_ENCAP_SPORT:
			gre.EncapSport = ntohs(datum.Value[0:2])
		case nl.IFLA_GRE_ENCAP_DPORT:
			gre.EncapDport = ntohs(datum.Value[0:2])
		case nl.IFLA_GRE_IFLAGS:
			gre.IFlags = ntohs(datum.Value[0:2])
		case nl.IFLA_GRE_OFLAGS:
			gre.OFlags = ntohs(datum.Value[0:2])
		case nl.IFLA_GRE_TTL:
			gre.Ttl = uint8(datum.Value[0])
		case nl.IFLA_GRE_TOS:
			gre.Tos = uint8(datum.Value[0])
		case nl.IFLA_GRE_PMTUDISC:
			gre.PMtuDisc = uint8(datum.Value[0])
		case nl.IFLA_GRE_ENCAP_TYPE:
			gre.EncapType = native.Uint16(datum.Value[0:2])
		case nl.IFLA_GRE_ENCAP_FLAGS:
			gre.EncapFlags = native.Uint16(datum.Value[0:2])
		case nl.IFLA_GRE_COLLECT_METADATA:
			gre.FlowBased = true
		}
	}
}

func addGretunAttrs(gre *Gretun, linkInfo *nl.RtAttr) {
	data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)

	if ip := gre.Local; ip != nil {
		if ip.To4() != nil {
			ip = ip.To4()
		}
		data.AddRtAttr(nl.IFLA_GRE_LOCAL, []byte(ip))
	}

	if ip := gre.Remote; ip != nil {
		if ip.To4() != nil {
			ip = ip.To4()
		}
		data.AddRtAttr(nl.IFLA_GRE_REMOTE, []byte(ip))
	}

	if gre.IKey != 0 {
		data.AddRtAttr(nl.IFLA_GRE_IKEY, htonl(gre.IKey))
		gre.IFlags |= uint16(nl.GRE_KEY)
	}

	if gre.OKey != 0 {
		data.AddRtAttr(nl.IFLA_GRE_OKEY, htonl(gre.OKey))
		gre.OFlags |= uint16(nl.GRE_KEY)
	}

	data.AddRtAttr(nl.IFLA_GRE_IFLAGS, htons(gre.IFlags))
	data.AddRtAttr(nl.IFLA_GRE_OFLAGS, htons(gre.OFlags))

	if gre.Link != 0 {
		data.AddRtAttr(nl.IFLA_GRE_LINK, nl.Uint32Attr(gre.Link))
	}

	data.AddRtAttr(nl.IFLA_GRE_PMTUDISC, nl.Uint8Attr(gre.PMtuDisc))
	data.AddRtAttr(nl.IFLA_GRE_TTL, nl.Uint8Attr(gre.Ttl))
	data.AddRtAttr(nl.IFLA_GRE_TOS, nl.Uint8Attr(gre.Tos))
	data.AddRtAttr(nl.IFLA_GRE_ENCAP_TYPE, nl.Uint16Attr(gre.EncapType))
	data.AddRtAttr(nl.IFLA_GRE_ENCAP_FLAGS, nl.Uint16Attr(gre.EncapFlags))
	data.AddRtAttr(nl.IFLA_GRE_ENCAP_SPORT, htons(gre.EncapSport))
	data.AddRtAttr(nl.IFLA_GRE_ENCAP_DPORT, htons(gre.EncapDport))
}

func parseGretunData(link Link, data []syscall.NetlinkRouteAttr) {
	gre := link.(*Gretun)
	for _, datum := range data {
		switch datum.Attr.Type {
		case nl.IFLA_GRE_IKEY:
			gre.IKey = ntohl(datum.Value[0:4])
		case nl.IFLA_GRE_OKEY:
			gre.OKey = ntohl(datum.Value[0:4])
		case nl.IFLA_GRE_LOCAL:
			gre.Local = net.IP(datum.Value)
		case nl.IFLA_GRE_REMOTE:
			gre.Remote = net.IP(datum.Value)
		case nl.IFLA_GRE_IFLAGS:
			gre.IFlags = ntohs(datum.Value[0:2])
		case nl.IFLA_GRE_OFLAGS:
			gre.OFlags = ntohs(datum.Value[0:2])
		case nl.IFLA_GRE_TTL:
			gre.Ttl = uint8(datum.Value[0])
		case nl.IFLA_GRE_TOS:
			gre.Tos = uint8(datum.Value[0])
		case nl.IFLA_GRE_PMTUDISC:
			gre.PMtuDisc = uint8(datum.Value[0])
		case nl.IFLA_GRE_ENCAP_TYPE:
			gre.EncapType = native.Uint16(datum.Value[0:2])
		case nl.IFLA_GRE_ENCAP_FLAGS:
			gre.EncapFlags = native.Uint16(datum.Value[0:2])
		case nl.IFLA_GRE_ENCAP_SPORT:
			gre.EncapSport = ntohs(datum.Value[0:2])
		case nl.IFLA_GRE_ENCAP_DPORT:
			gre.EncapDport = ntohs(datum.Value[0:2])
		}
	}
}

func addXdpAttrs(xdp *LinkXdp, req *nl.NetlinkRequest) {
	attrs := nl.NewRtAttr(unix.IFLA_XDP|unix.NLA_F_NESTED, nil)
	b := make([]byte, 4)
	native.PutUint32(b, uint32(xdp.Fd))
	attrs.AddRtAttr(nl.IFLA_XDP_FD, b)
	if xdp.Flags != 0 {
		b := make([]byte, 4)
		native.PutUint32(b, xdp.Flags)
		attrs.AddRtAttr(nl.IFLA_XDP_FLAGS, b)
	}
	req.AddData(attrs)
}

func parseLinkXdp(data []byte) (*LinkXdp, error) {
	attrs, err := nl.ParseRouteAttr(data)
	if err != nil {
		return nil, err
	}
	xdp := &LinkXdp{}
	for _, attr := range attrs {
		switch attr.Attr.Type {
		case nl.IFLA_XDP_FD:
			xdp.Fd = int(native.Uint32(attr.Value[0:4]))
		case nl.IFLA_XDP_ATTACHED:
			xdp.AttachMode = uint32(attr.Value[0])
			xdp.Attached = xdp.AttachMode != 0
		case nl.IFLA_XDP_FLAGS:
			xdp.Flags = native.Uint32(attr.Value[0:4])
		case nl.IFLA_XDP_PROG_ID:
			xdp.ProgId = native.Uint32(attr.Value[0:4])
		}
	}
	return xdp, nil
}

func addIptunAttrs(iptun *Iptun, linkInfo *nl.RtAttr) {
	if iptun.FlowBased {
		// In flow based mode, no other attributes need to be configured
		linkInfo.AddRtAttr(nl.IFLA_IPTUN_COLLECT_METADATA, boolAttr(iptun.FlowBased))
		return
	}

	data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)

	ip := iptun.Local.To4()
	if ip != nil {
		data.AddRtAttr(nl.IFLA_IPTUN_LOCAL, []byte(ip))
	}

	ip = iptun.Remote.To4()
	if ip != nil {
		data.AddRtAttr(nl.IFLA_IPTUN_REMOTE, []byte(ip))
	}

	if iptun.Link != 0 {
		data.AddRtAttr(nl.IFLA_IPTUN_LINK, nl.Uint32Attr(iptun.Link))
	}
	data.AddRtAttr(nl.IFLA_IPTUN_PMTUDISC, nl.Uint8Attr(iptun.PMtuDisc))
	data.AddRtAttr(nl.IFLA_IPTUN_TTL, nl.Uint8Attr(iptun.Ttl))
	data.AddRtAttr(nl.IFLA_IPTUN_TOS, nl.Uint8Attr(iptun.Tos))
	data.AddRtAttr(nl.IFLA_IPTUN_ENCAP_TYPE, nl.Uint16Attr(iptun.EncapType))
	data.AddRtAttr(nl.IFLA_IPTUN_ENCAP_FLAGS, nl.Uint16Attr(iptun.EncapFlags))
	data.AddRtAttr(nl.IFLA_IPTUN_ENCAP_SPORT, htons(iptun.EncapSport))
	data.AddRtAttr(nl.IFLA_IPTUN_ENCAP_DPORT, htons(iptun.EncapDport))
	data.AddRtAttr(nl.IFLA_IPTUN_PROTO, nl.Uint8Attr(iptun.Proto))
}

func parseIptunData(link Link, data []syscall.NetlinkRouteAttr) {
	iptun := link.(*Iptun)
	for _, datum := range data {
		// NOTE: same with vxlan, ip tunnel may also has null datum.Value
		if len(datum.Value) == 0 {
			continue
		}
		switch datum.Attr.Type {
		case nl.IFLA_IPTUN_LOCAL:
			iptun.Local = net.IP(datum.Value[0:4])
		case nl.IFLA_IPTUN_REMOTE:
			iptun.Remote = net.IP(datum.Value[0:4])
		case nl.IFLA_IPTUN_TTL:
			iptun.Ttl = uint8(datum.Value[0])
		case nl.IFLA_IPTUN_TOS:
			iptun.Tos = uint8(datum.Value[0])
		case nl.IFLA_IPTUN_PMTUDISC:
			iptun.PMtuDisc = uint8(datum.Value[0])
		case nl.IFLA_IPTUN_ENCAP_SPORT:
			iptun.EncapSport = ntohs(datum.Value[0:2])
		case nl.IFLA_IPTUN_ENCAP_DPORT:
			iptun.EncapDport = ntohs(datum.Value[0:2])
		case nl.IFLA_IPTUN_ENCAP_TYPE:
			iptun.EncapType = native.Uint16(datum.Value[0:2])
		case nl.IFLA_IPTUN_ENCAP_FLAGS:
			iptun.EncapFlags = native.Uint16(datum.Value[0:2])
		case nl.IFLA_IPTUN_COLLECT_METADATA:
			iptun.FlowBased = true
		case nl.IFLA_IPTUN_PROTO:
			iptun.Proto = datum.Value[0]
		}
	}
}

func addIp6tnlAttrs(ip6tnl *Ip6tnl, linkInfo *nl.RtAttr) {
	data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)

	if ip6tnl.Link != 0 {
		data.AddRtAttr(nl.IFLA_IPTUN_LINK, nl.Uint32Attr(ip6tnl.Link))
	}

	ip := ip6tnl.Local.To16()
	if ip != nil {
		data.AddRtAttr(nl.IFLA_IPTUN_LOCAL, []byte(ip))
	}

	ip = ip6tnl.Remote.To16()
	if ip != nil {
		data.AddRtAttr(nl.IFLA_IPTUN_REMOTE, []byte(ip))
	}

	data.AddRtAttr(nl.IFLA_IPTUN_TTL, nl.Uint8Attr(ip6tnl.Ttl))
	data.AddRtAttr(nl.IFLA_IPTUN_TOS, nl.Uint8Attr(ip6tnl.Tos))
	data.AddRtAttr(nl.IFLA_IPTUN_FLAGS, nl.Uint32Attr(ip6tnl.Flags))
	data.AddRtAttr(nl.IFLA_IPTUN_PROTO, nl.Uint8Attr(ip6tnl.Proto))
	data.AddRtAttr(nl.IFLA_IPTUN_FLOWINFO, nl.Uint32Attr(ip6tnl.FlowInfo))
	data.AddRtAttr(nl.IFLA_IPTUN_ENCAP_LIMIT, nl.Uint8Attr(ip6tnl.EncapLimit))
	data.AddRtAttr(nl.IFLA_IPTUN_ENCAP_TYPE, nl.Uint16Attr(ip6tnl.EncapType))
	data.AddRtAttr(nl.IFLA_IPTUN_ENCAP_FLAGS, nl.Uint16Attr(ip6tnl.EncapFlags))
	data.AddRtAttr(nl.IFLA_IPTUN_ENCAP_SPORT, htons(ip6tnl.EncapSport))
	data.AddRtAttr(nl.IFLA_IPTUN_ENCAP_DPORT, htons(ip6tnl.EncapDport))
}

func parseIp6tnlData(link Link, data []syscall.NetlinkRouteAttr) {
	ip6tnl := link.(*Ip6tnl)
	for _, datum := range data {
		switch datum.Attr.Type {
		case nl.IFLA_IPTUN_LOCAL:
			ip6tnl.Local = net.IP(datum.Value[:16])
		case nl.IFLA_IPTUN_REMOTE:
			ip6tnl.Remote = net.IP(datum.Value[:16])
		case nl.IFLA_IPTUN_TTL:
			ip6tnl.Ttl = datum.Value[0]
		case nl.IFLA_IPTUN_TOS:
			ip6tnl.Tos = datum.Value[0]
		case nl.IFLA_IPTUN_FLAGS:
			ip6tnl.Flags = native.Uint32(datum.Value[:4])
		case nl.IFLA_IPTUN_PROTO:
			ip6tnl.Proto = datum.Value[0]
		case nl.IFLA_IPTUN_FLOWINFO:
			ip6tnl.FlowInfo = native.Uint32(datum.Value[:4])
		case nl.IFLA_IPTUN_ENCAP_LIMIT:
			ip6tnl.EncapLimit = datum.Value[0]
		case nl.IFLA_IPTUN_ENCAP_TYPE:
			ip6tnl.EncapType = native.Uint16(datum.Value[0:2])
		case nl.IFLA_IPTUN_ENCAP_FLAGS:
			ip6tnl.EncapFlags = native.Uint16(datum.Value[0:2])
		case nl.IFLA_IPTUN_ENCAP_SPORT:
			ip6tnl.EncapSport = ntohs(datum.Value[0:2])
		case nl.IFLA_IPTUN_ENCAP_DPORT:
			ip6tnl.EncapDport = ntohs(datum.Value[0:2])
		}
	}
}

func addSittunAttrs(sittun *Sittun, linkInfo *nl.RtAttr) {
	data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)

	if sittun.Link != 0 {
		data.AddRtAttr(nl.IFLA_IPTUN_LINK, nl.Uint32Attr(sittun.Link))
	}

	ip := sittun.Local.To4()
	if ip != nil {
		data.AddRtAttr(nl.IFLA_IPTUN_LOCAL, []byte(ip))
	}

	ip = sittun.Remote.To4()
	if ip != nil {
		data.AddRtAttr(nl.IFLA_IPTUN_REMOTE, []byte(ip))
	}

	if sittun.Ttl > 0 {
		// Would otherwise fail on 3.10 kernel
		data.AddRtAttr(nl.IFLA_IPTUN_TTL, nl.Uint8Attr(sittun.Ttl))
	}

	data.AddRtAttr(nl.IFLA_IPTUN_PROTO, nl.Uint8Attr(sittun.Proto))
	data.AddRtAttr(nl.IFLA_IPTUN_TOS, nl.Uint8Attr(sittun.Tos))
	data.AddRtAttr(nl.IFLA_IPTUN_PMTUDISC, nl.Uint8Attr(sittun.PMtuDisc))
	data.AddRtAttr(nl.IFLA_IPTUN_ENCAP_LIMIT, nl.Uint8Attr(sittun.EncapLimit))
	data.AddRtAttr(nl.IFLA_IPTUN_ENCAP_TYPE, nl.Uint16Attr(sittun.EncapType))
	data.AddRtAttr(nl.IFLA_IPTUN_ENCAP_FLAGS, nl.Uint16Attr(sittun.EncapFlags))
	data.AddRtAttr(nl.IFLA_IPTUN_ENCAP_SPORT, htons(sittun.EncapSport))
	data.AddRtAttr(nl.IFLA_IPTUN_ENCAP_DPORT, htons(sittun.EncapDport))
}

func parseSittunData(link Link, data []syscall.NetlinkRouteAttr) {
	sittun := link.(*Sittun)
	for _, datum := range data {
		switch datum.Attr.Type {
		case nl.IFLA_IPTUN_LOCAL:
			sittun.Local = net.IP(datum.Value[0:4])
		case nl.IFLA_IPTUN_REMOTE:
			sittun.Remote = net.IP(datum.Value[0:4])
		case nl.IFLA_IPTUN_TTL:
			sittun.Ttl = datum.Value[0]
		case nl.IFLA_IPTUN_TOS:
			sittun.Tos = datum.Value[0]
		case nl.IFLA_IPTUN_PMTUDISC:
			sittun.PMtuDisc = datum.Value[0]
		case nl.IFLA_IPTUN_PROTO:
			sittun.Proto = datum.Value[0]
		case nl.IFLA_IPTUN_ENCAP_TYPE:
			sittun.EncapType = native.Uint16(datum.Value[0:2])
		case nl.IFLA_IPTUN_ENCAP_FLAGS:
			sittun.EncapFlags = native.Uint16(datum.Value[0:2])
		case nl.IFLA_IPTUN_ENCAP_SPORT:
			sittun.EncapSport = ntohs(datum.Value[0:2])
		case nl.IFLA_IPTUN_ENCAP_DPORT:
			sittun.EncapDport = ntohs(datum.Value[0:2])
		}
	}
}

func addVtiAttrs(vti *Vti, linkInfo *nl.RtAttr) {
	data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)

	family := FAMILY_V4
	if vti.Local.To4() == nil {
		family = FAMILY_V6
	}

	var ip net.IP

	if family == FAMILY_V4 {
		ip = vti.Local.To4()
	} else {
		ip = vti.Local
	}
	if ip != nil {
		data.AddRtAttr(nl.IFLA_VTI_LOCAL, []byte(ip))
	}

	if family == FAMILY_V4 {
		ip = vti.Remote.To4()
	} else {
		ip = vti.Remote
	}
	if ip != nil {
		data.AddRtAttr(nl.IFLA_VTI_REMOTE, []byte(ip))
	}

	if vti.Link != 0 {
		data.AddRtAttr(nl.IFLA_VTI_LINK, nl.Uint32Attr(vti.Link))
	}

	data.AddRtAttr(nl.IFLA_VTI_IKEY, htonl(vti.IKey))
	data.AddRtAttr(nl.IFLA_VTI_OKEY, htonl(vti.OKey))
}

func parseVtiData(link Link, data []syscall.NetlinkRouteAttr) {
	vti := link.(*Vti)
	for _, datum := range data {
		switch datum.Attr.Type {
		case nl.IFLA_VTI_LOCAL:
			vti.Local = net.IP(datum.Value)
		case nl.IFLA_VTI_REMOTE:
			vti.Remote = net.IP(datum.Value)
		case nl.IFLA_VTI_IKEY:
			vti.IKey = ntohl(datum.Value[0:4])
		case nl.IFLA_VTI_OKEY:
			vti.OKey = ntohl(datum.Value[0:4])
		}
	}
}

func addVrfAttrs(vrf *Vrf, linkInfo *nl.RtAttr) {
	data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)
	b := make([]byte, 4)
	native.PutUint32(b, uint32(vrf.Table))
	data.AddRtAttr(nl.IFLA_VRF_TABLE, b)
}

func parseVrfData(link Link, data []syscall.NetlinkRouteAttr) {
	vrf := link.(*Vrf)
	for _, datum := range data {
		switch datum.Attr.Type {
		case nl.IFLA_VRF_TABLE:
			vrf.Table = native.Uint32(datum.Value[0:4])
		}
	}
}

func addBridgeAttrs(bridge *Bridge, linkInfo *nl.RtAttr) {
	data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)
	if bridge.MulticastSnooping != nil {
		data.AddRtAttr(nl.IFLA_BR_MCAST_SNOOPING, boolToByte(*bridge.MulticastSnooping))
	}
	if bridge.AgeingTime != nil {
		data.AddRtAttr(nl.IFLA_BR_AGEING_TIME, nl.Uint32Attr(*bridge.AgeingTime))
	}
	if bridge.HelloTime != nil {
		data.AddRtAttr(nl.IFLA_BR_HELLO_TIME, nl.Uint32Attr(*bridge.HelloTime))
	}
	if bridge.VlanFiltering != nil {
		data.AddRtAttr(nl.IFLA_BR_VLAN_FILTERING, boolToByte(*bridge.VlanFiltering))
	}
}

func parseBridgeData(bridge Link, data []syscall.NetlinkRouteAttr) {
	br := bridge.(*Bridge)
	for _, datum := range data {
		switch datum.Attr.Type {
		case nl.IFLA_BR_AGEING_TIME:
			ageingTime := native.Uint32(datum.Value[0:4])
			br.AgeingTime = &ageingTime
		case nl.IFLA_BR_HELLO_TIME:
			helloTime := native.Uint32(datum.Value[0:4])
			br.HelloTime = &helloTime
		case nl.IFLA_BR_MCAST_SNOOPING:
			mcastSnooping := datum.Value[0] == 1
			br.MulticastSnooping = &mcastSnooping
		case nl.IFLA_BR_VLAN_FILTERING:
			vlanFiltering := datum.Value[0] == 1
			br.VlanFiltering = &vlanFiltering
		}
	}
}

func addGTPAttrs(gtp *GTP, linkInfo *nl.RtAttr) {
	data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)
	data.AddRtAttr(nl.IFLA_GTP_FD0, nl.Uint32Attr(uint32(gtp.FD0)))
	data.AddRtAttr(nl.IFLA_GTP_FD1, nl.Uint32Attr(uint32(gtp.FD1)))
	data.AddRtAttr(nl.IFLA_GTP_PDP_HASHSIZE, nl.Uint32Attr(131072))
	if gtp.Role != nl.GTP_ROLE_GGSN {
		data.AddRtAttr(nl.IFLA_GTP_ROLE, nl.Uint32Attr(uint32(gtp.Role)))
	}
}

func parseGTPData(link Link, data []syscall.NetlinkRouteAttr) {
	gtp := link.(*GTP)
	for _, datum := range data {
		switch datum.Attr.Type {
		case nl.IFLA_GTP_FD0:
			gtp.FD0 = int(native.Uint32(datum.Value))
		case nl.IFLA_GTP_FD1:
			gtp.FD1 = int(native.Uint32(datum.Value))
		case nl.IFLA_GTP_PDP_HASHSIZE:
			gtp.PDPHashsize = int(native.Uint32(datum.Value))
		case nl.IFLA_GTP_ROLE:
			gtp.Role = int(native.Uint32(datum.Value))
		}
	}
}

func parseVfInfoList(data []syscall.NetlinkRouteAttr) ([]VfInfo, error) {
	var vfs []VfInfo

	for i, element := range data {
		if element.Attr.Type != nl.IFLA_VF_INFO {
			return nil, fmt.Errorf("Incorrect element type in vf info list: %d", element.Attr.Type)
		}
		vfAttrs, err := nl.ParseRouteAttr(element.Value)
		if err != nil {
			return nil, err
		}
		vfs = append(vfs, parseVfInfo(vfAttrs, i))
	}
	return vfs, nil
}

func parseVfInfo(data []syscall.NetlinkRouteAttr, id int) VfInfo {
	vf := VfInfo{ID: id}
	for _, element := range data {
		switch element.Attr.Type {
		case nl.IFLA_VF_MAC:
			mac := nl.DeserializeVfMac(element.Value[:])
			vf.Mac = mac.Mac[:6]
		case nl.IFLA_VF_VLAN:
			vl := nl.DeserializeVfVlan(element.Value[:])
			vf.Vlan = int(vl.Vlan)
			vf.Qos = int(vl.Qos)
		case nl.IFLA_VF_TX_RATE:
			txr := nl.DeserializeVfTxRate(element.Value[:])
			vf.TxRate = int(txr.Rate)
		case nl.IFLA_VF_SPOOFCHK:
			sp := nl.DeserializeVfSpoofchk(element.Value[:])
			vf.Spoofchk = sp.Setting != 0
		case nl.IFLA_VF_LINK_STATE:
			ls := nl.DeserializeVfLinkState(element.Value[:])
			vf.LinkState = ls.LinkState
		case nl.IFLA_VF_RATE:
			vfr := nl.DeserializeVfRate(element.Value[:])
			vf.MaxTxRate = vfr.MaxTxRate
			vf.MinTxRate = vfr.MinTxRate
		case nl.IFLA_VF_STATS:
			vfstats := nl.DeserializeVfStats(element.Value[:])
			vf.RxPackets = vfstats.RxPackets
			vf.TxPackets = vfstats.TxPackets
			vf.RxBytes = vfstats.RxBytes
			vf.TxBytes = vfstats.TxBytes
			vf.Multicast = vfstats.Multicast
			vf.Broadcast = vfstats.Broadcast
			vf.RxDropped = vfstats.RxDropped
			vf.TxDropped = vfstats.TxDropped

		case nl.IFLA_VF_RSS_QUERY_EN:
			result := nl.DeserializeVfRssQueryEn(element.Value)
			vf.RssQuery = result.Setting

		case nl.IFLA_VF_TRUST:
			result := nl.DeserializeVfTrust(element.Value)
			vf.Trust = result.Setting
		}
	}
	return vf
}

func addXfrmiAttrs(xfrmi *Xfrmi, linkInfo *nl.RtAttr) {
	data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)
	data.AddRtAttr(nl.IFLA_XFRM_LINK, nl.Uint32Attr(uint32(xfrmi.ParentIndex)))
	if xfrmi.Ifid != 0 {
		data.AddRtAttr(nl.IFLA_XFRM_IF_ID, nl.Uint32Attr(xfrmi.Ifid))
	}
}

func parseXfrmiData(link Link, data []syscall.NetlinkRouteAttr) {
	xfrmi := link.(*Xfrmi)
	for _, datum := range data {
		switch datum.Attr.Type {
		case nl.IFLA_XFRM_LINK:
			xfrmi.ParentIndex = int(native.Uint32(datum.Value))
		case nl.IFLA_XFRM_IF_ID:
			xfrmi.Ifid = native.Uint32(datum.Value)
		}
	}
}

// LinkSetBondSlave add slave to bond link via ioctl interface.
func LinkSetBondSlave(link Link, master *Bond) error {
	fd, err := getSocketUDP()
	if err != nil {
		return err
	}
	defer syscall.Close(fd)

	ifreq := newIocltSlaveReq(link.Attrs().Name, master.Attrs().Name)

	_, _, errno := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), unix.SIOCBONDENSLAVE, uintptr(unsafe.Pointer(ifreq)))
	if errno != 0 {
		return fmt.Errorf("Failed to enslave %q to %q, errno=%v", link.Attrs().Name, master.Attrs().Name, errno)
	}
	return nil
}

// LinkSetBondSlaveQueueId modify bond slave queue-id.
func (h *Handle) LinkSetBondSlaveQueueId(link Link, queueId uint16) error {
	base := link.Attrs()
	h.ensureIndex(base)
	req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Index = int32(base.Index)
	req.AddData(msg)

	linkInfo := nl.NewRtAttr(unix.IFLA_LINKINFO, nil)
	data := linkInfo.AddRtAttr(nl.IFLA_INFO_SLAVE_DATA, nil)
	data.AddRtAttr(nl.IFLA_BOND_SLAVE_QUEUE_ID, nl.Uint16Attr(queueId))

	req.AddData(linkInfo)
	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// LinkSetBondSlaveQueueId modify bond slave queue-id.
func LinkSetBondSlaveQueueId(link Link, queueId uint16) error {
	return pkgHandle.LinkSetBondSlaveQueueId(link, queueId)
}

func vethStatsSerialize(stats ethtoolStats) ([]byte, error) {
	statsSize := int(unsafe.Sizeof(stats)) + int(stats.nStats)*int(unsafe.Sizeof(uint64(0)))
	b := make([]byte, 0, statsSize)
	buf := bytes.NewBuffer(b)
	err := binary.Write(buf, nl.NativeEndian(), stats)
	return buf.Bytes()[:statsSize], err
}

type vethEthtoolStats struct {
	Cmd    uint32
	NStats uint32
	Peer   uint64
	// Newer kernels have XDP stats in here, but we only care
	// to extract the peer ifindex here.
}

func vethStatsDeserialize(b []byte) (vethEthtoolStats, error) {
	var stats = vethEthtoolStats{}
	err := binary.Read(bytes.NewReader(b), nl.NativeEndian(), &stats)
	return stats, err
}

// VethPeerIndex get veth peer index.
func VethPeerIndex(link *Veth) (int, error) {
	fd, err := getSocketUDP()
	if err != nil {
		return -1, err
	}
	defer syscall.Close(fd)

	ifreq, sSet := newIocltStringSetReq(link.Name)
	_, _, errno := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), SIOCETHTOOL, uintptr(unsafe.Pointer(ifreq)))
	if errno != 0 {
		return -1, fmt.Errorf("SIOCETHTOOL request for %q failed, errno=%v", link.Attrs().Name, errno)
	}

	stats := ethtoolStats{
		cmd:    ETHTOOL_GSTATS,
		nStats: sSet.data[0],
	}

	buffer, err := vethStatsSerialize(stats)
	if err != nil {
		return -1, err
	}

	ifreq.Data = uintptr(unsafe.Pointer(&buffer[0]))
	_, _, errno = syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), SIOCETHTOOL, uintptr(unsafe.Pointer(ifreq)))
	if errno != 0 {
		return -1, fmt.Errorf("SIOCETHTOOL request for %q failed, errno=%v", link.Attrs().Name, errno)
	}

	vstats, err := vethStatsDeserialize(buffer)
	if err != nil {
		return -1, err
	}

	return int(vstats.Peer), nil
}

func parseTuntapData(link Link, data []syscall.NetlinkRouteAttr) {
	tuntap := link.(*Tuntap)
	for _, datum := range data {
		switch datum.Attr.Type {
		case nl.IFLA_TUN_OWNER:
			tuntap.Owner = native.Uint32(datum.Value)
		case nl.IFLA_TUN_GROUP:
			tuntap.Group = native.Uint32(datum.Value)
		case nl.IFLA_TUN_TYPE:
			tuntap.Mode = TuntapMode(uint8(datum.Value[0]))
		case nl.IFLA_TUN_PERSIST:
			tuntap.NonPersist = false
			if uint8(datum.Value[0]) == 0 {
				tuntap.NonPersist = true
			}
		}
	}
}

func parseIPoIBData(link Link, data []syscall.NetlinkRouteAttr) {
	ipoib := link.(*IPoIB)
	for _, datum := range data {
		switch datum.Attr.Type {
		case nl.IFLA_IPOIB_PKEY:
			ipoib.Pkey = uint16(native.Uint16(datum.Value))
		case nl.IFLA_IPOIB_MODE:
			ipoib.Mode = IPoIBMode(native.Uint16(datum.Value))
		case nl.IFLA_IPOIB_UMCAST:
			ipoib.Umcast = uint16(native.Uint16(datum.Value))
		}
	}
}

func parseCanData(link Link, data []syscall.NetlinkRouteAttr) {
	can := link.(*Can)
	for _, datum := range data {

		switch datum.Attr.Type {
		case nl.IFLA_CAN_BITTIMING:
			can.BitRate = native.Uint32(datum.Value)
			can.SamplePoint = native.Uint32(datum.Value[4:])
			can.TimeQuanta = native.Uint32(datum.Value[8:])
			can.PropagationSegment = native.Uint32(datum.Value[12:])
			can.PhaseSegment1 = native.Uint32(datum.Value[16:])
			can.PhaseSegment2 = native.Uint32(datum.Value[20:])
			can.SyncJumpWidth = native.Uint32(datum.Value[24:])
			can.BitRatePreScaler = native.Uint32(datum.Value[28:])
		case nl.IFLA_CAN_BITTIMING_CONST:
			can.Name = string(datum.Value[:16])
			can.TimeSegment1Min = native.Uint32(datum.Value[16:])
			can.TimeSegment1Max = native.Uint32(datum.Value[20:])
			can.TimeSegment2Min = native.Uint32(datum.Value[24:])
			can.TimeSegment2Max = native.Uint32(datum.Value[28:])
			can.SyncJumpWidthMax = native.Uint32(datum.Value[32:])
			can.BitRatePreScalerMin = native.Uint32(datum.Value[36:])
			can.BitRatePreScalerMax = native.Uint32(datum.Value[40:])
			can.BitRatePreScalerInc = native.Uint32(datum.Value[44:])
		case nl.IFLA_CAN_CLOCK:
			can.ClockFrequency = native.Uint32(datum.Value)
		case nl.IFLA_CAN_STATE:
			can.State = native.Uint32(datum.Value)
		case nl.IFLA_CAN_CTRLMODE:
			can.Mask = native.Uint32(datum.Value)
			can.Flags = native.Uint32(datum.Value[4:])
		case nl.IFLA_CAN_BERR_COUNTER:
			can.TxError = native.Uint16(datum.Value)
			can.RxError = native.Uint16(datum.Value[2:])
		case nl.IFLA_CAN_RESTART_MS:
			can.RestartMs = native.Uint32(datum.Value)
		case nl.IFLA_CAN_DATA_BITTIMING_CONST:
		case nl.IFLA_CAN_RESTART:
		case nl.IFLA_CAN_DATA_BITTIMING:
		case nl.IFLA_CAN_TERMINATION:
		case nl.IFLA_CAN_TERMINATION_CONST:
		case nl.IFLA_CAN_BITRATE_CONST:
		case nl.IFLA_CAN_DATA_BITRATE_CONST:
		case nl.IFLA_CAN_BITRATE_MAX:
		}
	}
}

func addIPoIBAttrs(ipoib *IPoIB, linkInfo *nl.RtAttr) {
	data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)
	data.AddRtAttr(nl.IFLA_IPOIB_PKEY, nl.Uint16Attr(uint16(ipoib.Pkey)))
	data.AddRtAttr(nl.IFLA_IPOIB_MODE, nl.Uint16Attr(uint16(ipoib.Mode)))
	data.AddRtAttr(nl.IFLA_IPOIB_UMCAST, nl.Uint16Attr(uint16(ipoib.Umcast)))
}

func addBareUDPAttrs(bareudp *BareUDP, linkInfo *nl.RtAttr) {
	data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)

	data.AddRtAttr(nl.IFLA_BAREUDP_PORT, nl.Uint16Attr(nl.Swap16(bareudp.Port)))
	data.AddRtAttr(nl.IFLA_BAREUDP_ETHERTYPE, nl.Uint16Attr(nl.Swap16(bareudp.EtherType)))
	if bareudp.SrcPortMin != 0 {
		data.AddRtAttr(nl.IFLA_BAREUDP_SRCPORT_MIN, nl.Uint16Attr(bareudp.SrcPortMin))
	}
	if bareudp.MultiProto {
		data.AddRtAttr(nl.IFLA_BAREUDP_MULTIPROTO_MODE, []byte{})
	}
}

func parseBareUDPData(link Link, data []syscall.NetlinkRouteAttr) {
	bareudp := link.(*BareUDP)
	for _, attr := range data {
		switch attr.Attr.Type {
		case nl.IFLA_BAREUDP_PORT:
			bareudp.Port = binary.BigEndian.Uint16(attr.Value)
		case nl.IFLA_BAREUDP_ETHERTYPE:
			bareudp.EtherType = binary.BigEndian.Uint16(attr.Value)
		case nl.IFLA_BAREUDP_SRCPORT_MIN:
			bareudp.SrcPortMin = native.Uint16(attr.Value)
		case nl.IFLA_BAREUDP_MULTIPROTO_MODE:
			bareudp.MultiProto = true
		}
	}
}
07070100000C27000081A4000000000000000000000001645E367C0000011A000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/link_tuntap_linux.go    package netlink

// ideally golang.org/x/sys/unix would define IfReq but it only has
// IFNAMSIZ, hence this minimalistic implementation
const (
	SizeOfIfReq = 40
	IFNAMSIZ    = 16
)

type ifReq struct {
	Name  [IFNAMSIZ]byte
	Flags uint16
	pad   [SizeOfIfReq - IFNAMSIZ - 2]byte
}
  07070100000C28000081A4000000000000000000000001645E367C00000290000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/neigh.go    package netlink

import (
	"fmt"
	"net"
)

// Neigh represents a link layer neighbor from netlink.
type Neigh struct {
	LinkIndex    int
	Family       int
	State        int
	Type         int
	Flags        int
	FlagsExt     int
	IP           net.IP
	HardwareAddr net.HardwareAddr
	LLIPAddr     net.IP //Used in the case of NHRP
	Vlan         int
	VNI          int
	MasterIndex  int
}

// String returns $ip/$hwaddr $label
func (neigh *Neigh) String() string {
	return fmt.Sprintf("%s %s", neigh.IP, neigh.HardwareAddr)
}

// NeighUpdate is sent when a neighbor changes - type is RTM_NEWNEIGH or RTM_DELNEIGH.
type NeighUpdate struct {
	Type uint16
	Neigh
}
07070100000C29000081A4000000000000000000000001645E367C00002DEE000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/neigh_linux.go  package netlink

import (
	"fmt"
	"net"
	"syscall"
	"unsafe"

	"github.com/vishvananda/netlink/nl"
	"github.com/vishvananda/netns"
	"golang.org/x/sys/unix"
)

const (
	NDA_UNSPEC = iota
	NDA_DST
	NDA_LLADDR
	NDA_CACHEINFO
	NDA_PROBES
	NDA_VLAN
	NDA_PORT
	NDA_VNI
	NDA_IFINDEX
	NDA_MASTER
	NDA_LINK_NETNSID
	NDA_SRC_VNI
	NDA_PROTOCOL
	NDA_NH_ID
	NDA_FDB_EXT_ATTRS
	NDA_FLAGS_EXT
	NDA_MAX = NDA_FLAGS_EXT
)

// Neighbor Cache Entry States.
const (
	NUD_NONE       = 0x00
	NUD_INCOMPLETE = 0x01
	NUD_REACHABLE  = 0x02
	NUD_STALE      = 0x04
	NUD_DELAY      = 0x08
	NUD_PROBE      = 0x10
	NUD_FAILED     = 0x20
	NUD_NOARP      = 0x40
	NUD_PERMANENT  = 0x80
)

// Neighbor Flags
const (
	NTF_USE         = 0x01
	NTF_SELF        = 0x02
	NTF_MASTER      = 0x04
	NTF_PROXY       = 0x08
	NTF_EXT_LEARNED = 0x10
	NTF_OFFLOADED   = 0x20
	NTF_STICKY      = 0x40
	NTF_ROUTER      = 0x80
)

// Extended Neighbor Flags
const (
	NTF_EXT_MANAGED = 0x00000001
)

// Ndmsg is for adding, removing or receiving information about a neighbor table entry
type Ndmsg struct {
	Family uint8
	Index  uint32
	State  uint16
	Flags  uint8
	Type   uint8
}

func deserializeNdmsg(b []byte) *Ndmsg {
	var dummy Ndmsg
	return (*Ndmsg)(unsafe.Pointer(&b[0:unsafe.Sizeof(dummy)][0]))
}

func (msg *Ndmsg) Serialize() []byte {
	return (*(*[unsafe.Sizeof(*msg)]byte)(unsafe.Pointer(msg)))[:]
}

func (msg *Ndmsg) Len() int {
	return int(unsafe.Sizeof(*msg))
}

// NeighAdd will add an IP to MAC mapping to the ARP table
// Equivalent to: `ip neigh add ....`
func NeighAdd(neigh *Neigh) error {
	return pkgHandle.NeighAdd(neigh)
}

// NeighAdd will add an IP to MAC mapping to the ARP table
// Equivalent to: `ip neigh add ....`
func (h *Handle) NeighAdd(neigh *Neigh) error {
	return h.neighAdd(neigh, unix.NLM_F_CREATE|unix.NLM_F_EXCL)
}

// NeighSet will add or replace an IP to MAC mapping to the ARP table
// Equivalent to: `ip neigh replace....`
func NeighSet(neigh *Neigh) error {
	return pkgHandle.NeighSet(neigh)
}

// NeighSet will add or replace an IP to MAC mapping to the ARP table
// Equivalent to: `ip neigh replace....`
func (h *Handle) NeighSet(neigh *Neigh) error {
	return h.neighAdd(neigh, unix.NLM_F_CREATE|unix.NLM_F_REPLACE)
}

// NeighAppend will append an entry to FDB
// Equivalent to: `bridge fdb append...`
func NeighAppend(neigh *Neigh) error {
	return pkgHandle.NeighAppend(neigh)
}

// NeighAppend will append an entry to FDB
// Equivalent to: `bridge fdb append...`
func (h *Handle) NeighAppend(neigh *Neigh) error {
	return h.neighAdd(neigh, unix.NLM_F_CREATE|unix.NLM_F_APPEND)
}

// NeighAppend will append an entry to FDB
// Equivalent to: `bridge fdb append...`
func neighAdd(neigh *Neigh, mode int) error {
	return pkgHandle.neighAdd(neigh, mode)
}

// NeighAppend will append an entry to FDB
// Equivalent to: `bridge fdb append...`
func (h *Handle) neighAdd(neigh *Neigh, mode int) error {
	req := h.newNetlinkRequest(unix.RTM_NEWNEIGH, mode|unix.NLM_F_ACK)
	return neighHandle(neigh, req)
}

// NeighDel will delete an IP address from a link device.
// Equivalent to: `ip addr del $addr dev $link`
func NeighDel(neigh *Neigh) error {
	return pkgHandle.NeighDel(neigh)
}

// NeighDel will delete an IP address from a link device.
// Equivalent to: `ip addr del $addr dev $link`
func (h *Handle) NeighDel(neigh *Neigh) error {
	req := h.newNetlinkRequest(unix.RTM_DELNEIGH, unix.NLM_F_ACK)
	return neighHandle(neigh, req)
}

func neighHandle(neigh *Neigh, req *nl.NetlinkRequest) error {
	var family int

	if neigh.Family > 0 {
		family = neigh.Family
	} else {
		family = nl.GetIPFamily(neigh.IP)
	}

	msg := Ndmsg{
		Family: uint8(family),
		Index:  uint32(neigh.LinkIndex),
		State:  uint16(neigh.State),
		Type:   uint8(neigh.Type),
		Flags:  uint8(neigh.Flags),
	}
	req.AddData(&msg)

	ipData := neigh.IP.To4()
	if ipData == nil {
		ipData = neigh.IP.To16()
	}

	dstData := nl.NewRtAttr(NDA_DST, ipData)
	req.AddData(dstData)

	if neigh.LLIPAddr != nil {
		llIPData := nl.NewRtAttr(NDA_LLADDR, neigh.LLIPAddr.To4())
		req.AddData(llIPData)
	} else if neigh.HardwareAddr != nil {
		hwData := nl.NewRtAttr(NDA_LLADDR, []byte(neigh.HardwareAddr))
		req.AddData(hwData)
	}

	if neigh.FlagsExt != 0 {
		flagsExtData := nl.NewRtAttr(NDA_FLAGS_EXT, nl.Uint32Attr(uint32(neigh.FlagsExt)))
		req.AddData(flagsExtData)
	}

	if neigh.Vlan != 0 {
		vlanData := nl.NewRtAttr(NDA_VLAN, nl.Uint16Attr(uint16(neigh.Vlan)))
		req.AddData(vlanData)
	}

	if neigh.VNI != 0 {
		vniData := nl.NewRtAttr(NDA_VNI, nl.Uint32Attr(uint32(neigh.VNI)))
		req.AddData(vniData)
	}

	if neigh.MasterIndex != 0 {
		masterData := nl.NewRtAttr(NDA_MASTER, nl.Uint32Attr(uint32(neigh.MasterIndex)))
		req.AddData(masterData)
	}

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// NeighList returns a list of IP-MAC mappings in the system (ARP table).
// Equivalent to: `ip neighbor show`.
// The list can be filtered by link and ip family.
func NeighList(linkIndex, family int) ([]Neigh, error) {
	return pkgHandle.NeighList(linkIndex, family)
}

// NeighProxyList returns a list of neighbor proxies in the system.
// Equivalent to: `ip neighbor show proxy`.
// The list can be filtered by link and ip family.
func NeighProxyList(linkIndex, family int) ([]Neigh, error) {
	return pkgHandle.NeighProxyList(linkIndex, family)
}

// NeighList returns a list of IP-MAC mappings in the system (ARP table).
// Equivalent to: `ip neighbor show`.
// The list can be filtered by link and ip family.
func (h *Handle) NeighList(linkIndex, family int) ([]Neigh, error) {
	return h.NeighListExecute(Ndmsg{
		Family: uint8(family),
		Index:  uint32(linkIndex),
	})
}

// NeighProxyList returns a list of neighbor proxies in the system.
// Equivalent to: `ip neighbor show proxy`.
// The list can be filtered by link, ip family.
func (h *Handle) NeighProxyList(linkIndex, family int) ([]Neigh, error) {
	return h.NeighListExecute(Ndmsg{
		Family: uint8(family),
		Index:  uint32(linkIndex),
		Flags:  NTF_PROXY,
	})
}

// NeighListExecute returns a list of neighbour entries filtered by link, ip family, flag and state.
func NeighListExecute(msg Ndmsg) ([]Neigh, error) {
	return pkgHandle.NeighListExecute(msg)
}

// NeighListExecute returns a list of neighbour entries filtered by link, ip family, flag and state.
func (h *Handle) NeighListExecute(msg Ndmsg) ([]Neigh, error) {
	req := h.newNetlinkRequest(unix.RTM_GETNEIGH, unix.NLM_F_DUMP)
	req.AddData(&msg)

	msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWNEIGH)
	if err != nil {
		return nil, err
	}

	var res []Neigh
	for _, m := range msgs {
		ndm := deserializeNdmsg(m)
		if msg.Index != 0 && ndm.Index != msg.Index {
			// Ignore messages from other interfaces
			continue
		}
		if msg.Family != 0 && ndm.Family != msg.Family {
			continue
		}
		if msg.State != 0 && ndm.State != msg.State {
			continue
		}
		if msg.Type != 0 && ndm.Type != msg.Type {
			continue
		}
		if msg.Flags != 0 && ndm.Flags != msg.Flags {
			continue
		}

		neigh, err := NeighDeserialize(m)
		if err != nil {
			continue
		}

		res = append(res, *neigh)
	}

	return res, nil
}

func NeighDeserialize(m []byte) (*Neigh, error) {
	msg := deserializeNdmsg(m)

	neigh := Neigh{
		LinkIndex: int(msg.Index),
		Family:    int(msg.Family),
		State:     int(msg.State),
		Type:      int(msg.Type),
		Flags:     int(msg.Flags),
	}

	attrs, err := nl.ParseRouteAttr(m[msg.Len():])
	if err != nil {
		return nil, err
	}

	for _, attr := range attrs {
		switch attr.Attr.Type {
		case NDA_DST:
			neigh.IP = net.IP(attr.Value)
		case NDA_LLADDR:
			// BUG: Is this a bug in the netlink library?
			// #define RTA_LENGTH(len) (RTA_ALIGN(sizeof(struct rtattr)) + (len))
			// #define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0))
			attrLen := attr.Attr.Len - unix.SizeofRtAttr
			if attrLen == 4 {
				neigh.LLIPAddr = net.IP(attr.Value)
			} else if attrLen == 16 {
				// Can be IPv6 or FireWire HWAddr
				link, err := LinkByIndex(neigh.LinkIndex)
				if err == nil && link.Attrs().EncapType == "tunnel6" {
					neigh.IP = net.IP(attr.Value)
				} else {
					neigh.HardwareAddr = net.HardwareAddr(attr.Value)
				}
			} else {
				neigh.HardwareAddr = net.HardwareAddr(attr.Value)
			}
		case NDA_FLAGS_EXT:
			neigh.FlagsExt = int(native.Uint32(attr.Value[0:4]))
		case NDA_VLAN:
			neigh.Vlan = int(native.Uint16(attr.Value[0:2]))
		case NDA_VNI:
			neigh.VNI = int(native.Uint32(attr.Value[0:4]))
		case NDA_MASTER:
			neigh.MasterIndex = int(native.Uint32(attr.Value[0:4]))
		}
	}

	return &neigh, nil
}

// NeighSubscribe takes a chan down which notifications will be sent
// when neighbors are added or deleted. Close the 'done' chan to stop subscription.
func NeighSubscribe(ch chan<- NeighUpdate, done <-chan struct{}) error {
	return neighSubscribeAt(netns.None(), netns.None(), ch, done, nil, false)
}

// NeighSubscribeAt works like NeighSubscribe plus it allows the caller
// to choose the network namespace in which to subscribe (ns).
func NeighSubscribeAt(ns netns.NsHandle, ch chan<- NeighUpdate, done <-chan struct{}) error {
	return neighSubscribeAt(ns, netns.None(), ch, done, nil, false)
}

// NeighSubscribeOptions contains a set of options to use with
// NeighSubscribeWithOptions.
type NeighSubscribeOptions struct {
	Namespace     *netns.NsHandle
	ErrorCallback func(error)
	ListExisting  bool
}

// NeighSubscribeWithOptions work like NeighSubscribe but enable to
// provide additional options to modify the behavior. Currently, the
// namespace can be provided as well as an error callback.
func NeighSubscribeWithOptions(ch chan<- NeighUpdate, done <-chan struct{}, options NeighSubscribeOptions) error {
	if options.Namespace == nil {
		none := netns.None()
		options.Namespace = &none
	}
	return neighSubscribeAt(*options.Namespace, netns.None(), ch, done, options.ErrorCallback, options.ListExisting)
}

func neighSubscribeAt(newNs, curNs netns.NsHandle, ch chan<- NeighUpdate, done <-chan struct{}, cberr func(error), listExisting bool) error {
	s, err := nl.SubscribeAt(newNs, curNs, unix.NETLINK_ROUTE, unix.RTNLGRP_NEIGH)
	makeRequest := func(family int) error {
		req := pkgHandle.newNetlinkRequest(unix.RTM_GETNEIGH,
			unix.NLM_F_DUMP)
		infmsg := nl.NewIfInfomsg(family)
		req.AddData(infmsg)
		if err := s.Send(req); err != nil {
			return err
		}
		return nil
	}
	if err != nil {
		return err
	}
	if done != nil {
		go func() {
			<-done
			s.Close()
		}()
	}
	if listExisting {
		if err := makeRequest(unix.AF_UNSPEC); err != nil {
			return err
		}
		// We have to wait for NLMSG_DONE before making AF_BRIDGE request
	}
	go func() {
		defer close(ch)
		for {
			msgs, from, err := s.Receive()
			if err != nil {
				if cberr != nil {
					cberr(err)
				}
				return
			}
			if from.Pid != nl.PidKernel {
				if cberr != nil {
					cberr(fmt.Errorf("Wrong sender portid %d, expected %d", from.Pid, nl.PidKernel))
				}
				continue
			}
			for _, m := range msgs {
				if m.Header.Type == unix.NLMSG_DONE {
					if listExisting {
						// This will be called after handling AF_UNSPEC
						// list request, we have to wait for NLMSG_DONE
						// before making another request
						if err := makeRequest(unix.AF_BRIDGE); err != nil {
							if cberr != nil {
								cberr(err)
							}
							return
						}
						listExisting = false
					}
					continue
				}
				if m.Header.Type == unix.NLMSG_ERROR {
					error := int32(native.Uint32(m.Data[0:4]))
					if error == 0 {
						continue
					}
					if cberr != nil {
						cberr(syscall.Errno(-error))
					}
					return
				}
				neigh, err := NeighDeserialize(m.Data)
				if err != nil {
					if cberr != nil {
						cberr(err)
					}
					return
				}
				ch <- NeighUpdate{Type: m.Header.Type, Neigh: *neigh}
			}
		}
	}()

	return nil
}
  07070100000C2A000081A4000000000000000000000001645E367C0000055D000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/netlink.go  // Package netlink provides a simple library for netlink. Netlink is
// the interface a user-space program in linux uses to communicate with
// the kernel. It can be used to add and remove interfaces, set up ip
// addresses and routes, and confiugre ipsec. Netlink communication
// requires elevated privileges, so in most cases this code needs to
// be run as root. The low level primitives for netlink are contained
// in the nl subpackage. This package attempts to provide a high-level
// interface that is loosly modeled on the iproute2 cli.
package netlink

import (
	"errors"
	"net"
)

var (
	// ErrNotImplemented is returned when a requested feature is not implemented.
	ErrNotImplemented = errors.New("not implemented")
)

// ParseIPNet parses a string in ip/net format and returns a net.IPNet.
// This is valuable because addresses in netlink are often IPNets and
// ParseCIDR returns an IPNet with the IP part set to the base IP of the
// range.
func ParseIPNet(s string) (*net.IPNet, error) {
	ip, ipNet, err := net.ParseCIDR(s)
	if err != nil {
		return nil, err
	}
	ipNet.IP = ip
	return ipNet, nil
}

// NewIPNet generates an IPNet from an ip address using a netmask of 32 or 128.
func NewIPNet(ip net.IP) *net.IPNet {
	if ip.To4() != nil {
		return &net.IPNet{IP: ip, Mask: net.CIDRMask(32, 32)}
	}
	return &net.IPNet{IP: ip, Mask: net.CIDRMask(128, 128)}
}
   07070100000C2B000081A4000000000000000000000001645E367C000000D5000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/netlink_linux.go    package netlink

import "github.com/vishvananda/netlink/nl"

// Family type definitions
const (
	FAMILY_ALL  = nl.FAMILY_ALL
	FAMILY_V4   = nl.FAMILY_V4
	FAMILY_V6   = nl.FAMILY_V6
	FAMILY_MPLS = nl.FAMILY_MPLS
)
   07070100000C2C000081A4000000000000000000000001645E367C00001363000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/netlink_unspecified.go  // +build !linux

package netlink

import "net"

func LinkSetUp(link Link) error {
	return ErrNotImplemented
}

func LinkSetDown(link Link) error {
	return ErrNotImplemented
}

func LinkSetMTU(link Link, mtu int) error {
	return ErrNotImplemented
}

func LinkSetMaster(link Link, master Link) error {
	return ErrNotImplemented
}

func LinkSetNsPid(link Link, nspid int) error {
	return ErrNotImplemented
}

func LinkSetNsFd(link Link, fd int) error {
	return ErrNotImplemented
}

func LinkSetName(link Link, name string) error {
	return ErrNotImplemented
}

func LinkSetAlias(link Link, name string) error {
	return ErrNotImplemented
}

func LinkSetHardwareAddr(link Link, hwaddr net.HardwareAddr) error {
	return ErrNotImplemented
}

func LinkSetVfHardwareAddr(link Link, vf int, hwaddr net.HardwareAddr) error {
	return ErrNotImplemented
}

func LinkSetVfVlan(link Link, vf, vlan int) error {
	return ErrNotImplemented
}

func LinkSetVfVlanQos(link Link, vf, vlan, qos int) error {
	return ErrNotImplemented
}

func LinkSetVfTxRate(link Link, vf, rate int) error {
	return ErrNotImplemented
}

func LinkSetVfRate(link Link, vf, minRate, maxRate int) error {
	return ErrNotImplemented
}

func LinkSetNoMaster(link Link) error {
	return ErrNotImplemented
}

func LinkSetMasterByIndex(link Link, masterIndex int) error {
	return ErrNotImplemented
}

func LinkSetXdpFd(link Link, fd int) error {
	return ErrNotImplemented
}

func LinkSetXdpFdWithFlags(link Link, fd, flags int) error {
	return ErrNotImplemented
}

func LinkSetARPOff(link Link) error {
	return ErrNotImplemented
}

func LinkSetARPOn(link Link) error {
	return ErrNotImplemented
}

func LinkByName(name string) (Link, error) {
	return nil, ErrNotImplemented
}

func LinkByAlias(alias string) (Link, error) {
	return nil, ErrNotImplemented
}

func LinkByIndex(index int) (Link, error) {
	return nil, ErrNotImplemented
}

func LinkSetHairpin(link Link, mode bool) error {
	return ErrNotImplemented
}

func LinkSetGuard(link Link, mode bool) error {
	return ErrNotImplemented
}

func LinkSetFastLeave(link Link, mode bool) error {
	return ErrNotImplemented
}

func LinkSetLearning(link Link, mode bool) error {
	return ErrNotImplemented
}

func LinkSetRootBlock(link Link, mode bool) error {
	return ErrNotImplemented
}

func LinkSetFlood(link Link, mode bool) error {
	return ErrNotImplemented
}

func LinkSetTxQLen(link Link, qlen int) error {
	return ErrNotImplemented
}

func LinkAdd(link Link) error {
	return ErrNotImplemented
}

func LinkDel(link Link) error {
	return ErrNotImplemented
}

func SetHairpin(link Link, mode bool) error {
	return ErrNotImplemented
}

func SetGuard(link Link, mode bool) error {
	return ErrNotImplemented
}

func SetFastLeave(link Link, mode bool) error {
	return ErrNotImplemented
}

func SetLearning(link Link, mode bool) error {
	return ErrNotImplemented
}

func SetRootBlock(link Link, mode bool) error {
	return ErrNotImplemented
}

func SetFlood(link Link, mode bool) error {
	return ErrNotImplemented
}

func LinkList() ([]Link, error) {
	return nil, ErrNotImplemented
}

func AddrAdd(link Link, addr *Addr) error {
	return ErrNotImplemented
}

func AddrReplace(link Link, addr *Addr) error {
	return ErrNotImplemented
}

func AddrDel(link Link, addr *Addr) error {
	return ErrNotImplemented
}

func AddrList(link Link, family int) ([]Addr, error) {
	return nil, ErrNotImplemented
}

func RouteAdd(route *Route) error {
	return ErrNotImplemented
}

func RouteAppend(route *Route) error {
	return ErrNotImplemented
}

func RouteDel(route *Route) error {
	return ErrNotImplemented
}

func RouteGet(destination net.IP) ([]Route, error) {
	return nil, ErrNotImplemented
}

func RouteList(link Link, family int) ([]Route, error) {
	return nil, ErrNotImplemented
}

func RouteListFiltered(family int, filter *Route, filterMask uint64) ([]Route, error) {
	return nil, ErrNotImplemented
}

func RouteReplace(route *Route) error {
	return ErrNotImplemented
}

func XfrmPolicyAdd(policy *XfrmPolicy) error {
	return ErrNotImplemented
}

func XfrmPolicyDel(policy *XfrmPolicy) error {
	return ErrNotImplemented
}

func XfrmPolicyList(family int) ([]XfrmPolicy, error) {
	return nil, ErrNotImplemented
}

func XfrmStateAdd(policy *XfrmState) error {
	return ErrNotImplemented
}

func XfrmStateDel(policy *XfrmState) error {
	return ErrNotImplemented
}

func XfrmStateList(family int) ([]XfrmState, error) {
	return nil, ErrNotImplemented
}

func NeighAdd(neigh *Neigh) error {
	return ErrNotImplemented
}

func NeighSet(neigh *Neigh) error {
	return ErrNotImplemented
}

func NeighAppend(neigh *Neigh) error {
	return ErrNotImplemented
}

func NeighDel(neigh *Neigh) error {
	return ErrNotImplemented
}

func NeighList(linkIndex, family int) ([]Neigh, error) {
	return nil, ErrNotImplemented
}

func NeighDeserialize(m []byte) (*Neigh, error) {
	return nil, ErrNotImplemented
}

func SocketGet(local, remote net.Addr) (*Socket, error) {
	return nil, ErrNotImplemented
}
 07070100000C2D000081A4000000000000000000000001645E367C00001164000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/netns_linux.go  package netlink

// Network namespace ID functions
//
// The kernel has a weird concept called the network namespace ID.
// This is different from the file reference in proc (and any bind-mounted
// namespaces, etc.)
//
// Instead, namespaces can be assigned a numeric ID at any time. Once set,
// the ID is fixed. The ID can either be set manually by the user, or
// automatically, triggered by certain kernel actions. The most common kernel
// action that triggers namespace ID creation is moving one end of a veth pair
// in to that namespace.

import (
	"fmt"

	"github.com/vishvananda/netlink/nl"
	"golang.org/x/sys/unix"
)

// These can be replaced by the values from sys/unix when it is next released.
const (
	_ = iota
	NETNSA_NSID
	NETNSA_PID
	NETNSA_FD
)

// GetNetNsIdByPid looks up the network namespace ID for a given pid (really thread id).
// Returns -1 if the namespace does not have an ID set.
func (h *Handle) GetNetNsIdByPid(pid int) (int, error) {
	return h.getNetNsId(NETNSA_PID, uint32(pid))
}

// GetNetNsIdByPid looks up the network namespace ID for a given pid (really thread id).
// Returns -1 if the namespace does not have an ID set.
func GetNetNsIdByPid(pid int) (int, error) {
	return pkgHandle.GetNetNsIdByPid(pid)
}

// SetNetNSIdByPid sets the ID of the network namespace for a given pid (really thread id).
// The ID can only be set for namespaces without an ID already set.
func (h *Handle) SetNetNsIdByPid(pid, nsid int) error {
	return h.setNetNsId(NETNSA_PID, uint32(pid), uint32(nsid))
}

// SetNetNSIdByPid sets the ID of the network namespace for a given pid (really thread id).
// The ID can only be set for namespaces without an ID already set.
func SetNetNsIdByPid(pid, nsid int) error {
	return pkgHandle.SetNetNsIdByPid(pid, nsid)
}

// GetNetNsIdByFd looks up the network namespace ID for a given fd.
// fd must be an open file descriptor to a namespace file.
// Returns -1 if the namespace does not have an ID set.
func (h *Handle) GetNetNsIdByFd(fd int) (int, error) {
	return h.getNetNsId(NETNSA_FD, uint32(fd))
}

// GetNetNsIdByFd looks up the network namespace ID for a given fd.
// fd must be an open file descriptor to a namespace file.
// Returns -1 if the namespace does not have an ID set.
func GetNetNsIdByFd(fd int) (int, error) {
	return pkgHandle.GetNetNsIdByFd(fd)
}

// SetNetNSIdByFd sets the ID of the network namespace for a given fd.
// fd must be an open file descriptor to a namespace file.
// The ID can only be set for namespaces without an ID already set.
func (h *Handle) SetNetNsIdByFd(fd, nsid int) error {
	return h.setNetNsId(NETNSA_FD, uint32(fd), uint32(nsid))
}

// SetNetNSIdByFd sets the ID of the network namespace for a given fd.
// fd must be an open file descriptor to a namespace file.
// The ID can only be set for namespaces without an ID already set.
func SetNetNsIdByFd(fd, nsid int) error {
	return pkgHandle.SetNetNsIdByFd(fd, nsid)
}

// getNetNsId requests the netnsid for a given type-val pair
// type should be either NETNSA_PID or NETNSA_FD
func (h *Handle) getNetNsId(attrType int, val uint32) (int, error) {
	req := h.newNetlinkRequest(unix.RTM_GETNSID, unix.NLM_F_REQUEST)

	rtgen := nl.NewRtGenMsg()
	req.AddData(rtgen)

	b := make([]byte, 4)
	native.PutUint32(b, val)
	attr := nl.NewRtAttr(attrType, b)
	req.AddData(attr)

	msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWNSID)

	if err != nil {
		return 0, err
	}

	for _, m := range msgs {
		msg := nl.DeserializeRtGenMsg(m)

		attrs, err := nl.ParseRouteAttr(m[msg.Len():])
		if err != nil {
			return 0, err
		}

		for _, attr := range attrs {
			switch attr.Attr.Type {
			case NETNSA_NSID:
				return int(int32(native.Uint32(attr.Value))), nil
			}
		}
	}

	return 0, fmt.Errorf("unexpected empty result")
}

// setNetNsId sets the netnsid for a given type-val pair
// type should be either NETNSA_PID or NETNSA_FD
// The ID can only be set for namespaces without an ID already set
func (h *Handle) setNetNsId(attrType int, val uint32, newnsid uint32) error {
	req := h.newNetlinkRequest(unix.RTM_NEWNSID, unix.NLM_F_REQUEST|unix.NLM_F_ACK)

	rtgen := nl.NewRtGenMsg()
	req.AddData(rtgen)

	b := make([]byte, 4)
	native.PutUint32(b, val)
	attr := nl.NewRtAttr(attrType, b)
	req.AddData(attr)

	b1 := make([]byte, 4)
	native.PutUint32(b1, newnsid)
	attr1 := nl.NewRtAttr(NETNSA_NSID, b1)
	req.AddData(attr1)

	_, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWNSID)
	return err
}
07070100000C2E000081A4000000000000000000000001645E367C0000014A000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/netns_unspecified.go    // +build !linux

package netlink

func GetNetNsIdByPid(pid int) (int, error) {
	return 0, ErrNotImplemented
}

func SetNetNsIdByPid(pid, nsid int) error {
	return ErrNotImplemented
}

func GetNetNsIdByFd(fd int) (int, error) {
	return 0, ErrNotImplemented
}

func SetNetNsIdByFd(fd, nsid int) error {
	return ErrNotImplemented
}
  07070100000C2F000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/nl  07070100000C30000081A4000000000000000000000001645E367C000005EB000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/nl/addr_linux.go    package nl

import (
	"unsafe"

	"golang.org/x/sys/unix"
)

type IfAddrmsg struct {
	unix.IfAddrmsg
}

func NewIfAddrmsg(family int) *IfAddrmsg {
	return &IfAddrmsg{
		IfAddrmsg: unix.IfAddrmsg{
			Family: uint8(family),
		},
	}
}

// struct ifaddrmsg {
//   __u8    ifa_family;
//   __u8    ifa_prefixlen;  /* The prefix length    */
//   __u8    ifa_flags;  /* Flags      */
//   __u8    ifa_scope;  /* Address scope    */
//   __u32   ifa_index;  /* Link index     */
// };

// type IfAddrmsg struct {
// 	Family    uint8
// 	Prefixlen uint8
// 	Flags     uint8
// 	Scope     uint8
// 	Index     uint32
// }
// SizeofIfAddrmsg     = 0x8

func DeserializeIfAddrmsg(b []byte) *IfAddrmsg {
	return (*IfAddrmsg)(unsafe.Pointer(&b[0:unix.SizeofIfAddrmsg][0]))
}

func (msg *IfAddrmsg) Serialize() []byte {
	return (*(*[unix.SizeofIfAddrmsg]byte)(unsafe.Pointer(msg)))[:]
}

func (msg *IfAddrmsg) Len() int {
	return unix.SizeofIfAddrmsg
}

// struct ifa_cacheinfo {
// 	__u32	ifa_prefered;
// 	__u32	ifa_valid;
// 	__u32	cstamp; /* created timestamp, hundredths of seconds */
// 	__u32	tstamp; /* updated timestamp, hundredths of seconds */
// };

type IfaCacheInfo struct {
	unix.IfaCacheinfo
}

func (msg *IfaCacheInfo) Len() int {
	return unix.SizeofIfaCacheinfo
}

func DeserializeIfaCacheInfo(b []byte) *IfaCacheInfo {
	return (*IfaCacheInfo)(unsafe.Pointer(&b[0:unix.SizeofIfaCacheinfo][0]))
}

func (msg *IfaCacheInfo) Serialize() []byte {
	return (*(*[unix.SizeofIfaCacheinfo]byte)(unsafe.Pointer(msg)))[:]
}
 07070100000C31000081A4000000000000000000000001645E367C00000588000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/nl/bridge_linux.go  package nl

import (
	"fmt"
	"unsafe"
)

const (
	SizeofBridgeVlanInfo = 0x04
)

/* Bridge Flags */
const (
	BRIDGE_FLAGS_MASTER = iota + 1 /* Bridge command to/from master */
	BRIDGE_FLAGS_SELF              /* Bridge command to/from lowerdev */
)

/* Bridge management nested attributes
 * [IFLA_AF_SPEC] = {
 *     [IFLA_BRIDGE_FLAGS]
 *     [IFLA_BRIDGE_MODE]
 *     [IFLA_BRIDGE_VLAN_INFO]
 * }
 */
const (
	IFLA_BRIDGE_FLAGS = iota
	IFLA_BRIDGE_MODE
	IFLA_BRIDGE_VLAN_INFO
)

const (
	BRIDGE_VLAN_INFO_MASTER = 1 << iota
	BRIDGE_VLAN_INFO_PVID
	BRIDGE_VLAN_INFO_UNTAGGED
	BRIDGE_VLAN_INFO_RANGE_BEGIN
	BRIDGE_VLAN_INFO_RANGE_END
)

// struct bridge_vlan_info {
//   __u16 flags;
//   __u16 vid;
// };

type BridgeVlanInfo struct {
	Flags uint16
	Vid   uint16
}

func (b *BridgeVlanInfo) Serialize() []byte {
	return (*(*[SizeofBridgeVlanInfo]byte)(unsafe.Pointer(b)))[:]
}

func DeserializeBridgeVlanInfo(b []byte) *BridgeVlanInfo {
	return (*BridgeVlanInfo)(unsafe.Pointer(&b[0:SizeofBridgeVlanInfo][0]))
}

func (b *BridgeVlanInfo) PortVID() bool {
	return b.Flags&BRIDGE_VLAN_INFO_PVID > 0
}

func (b *BridgeVlanInfo) EngressUntag() bool {
	return b.Flags&BRIDGE_VLAN_INFO_UNTAGGED > 0
}

func (b *BridgeVlanInfo) String() string {
	return fmt.Sprintf("%+v", *b)
}

/* New extended info filters for IFLA_EXT_MASK */
const (
	RTEXT_FILTER_VF = 1 << iota
	RTEXT_FILTER_BRVLAN
	RTEXT_FILTER_BRVLAN_COMPRESSED
)
07070100000C32000081A4000000000000000000000001645E367C00001345000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/nl/conntrack_linux.go   package nl

import "unsafe"

// Track the message sizes for the correct serialization/deserialization
const (
	SizeofNfgenmsg      = 4
	SizeofNfattr        = 4
	SizeofNfConntrack   = 376
	SizeofNfctTupleHead = 52
)

var L4ProtoMap = map[uint8]string{
	6:  "tcp",
	17: "udp",
}

// All the following constants are coming from:
// https://github.com/torvalds/linux/blob/master/include/uapi/linux/netfilter/nfnetlink_conntrack.h

// enum cntl_msg_types {
// 	IPCTNL_MSG_CT_NEW,
// 	IPCTNL_MSG_CT_GET,
// 	IPCTNL_MSG_CT_DELETE,
// 	IPCTNL_MSG_CT_GET_CTRZERO,
// 	IPCTNL_MSG_CT_GET_STATS_CPU,
// 	IPCTNL_MSG_CT_GET_STATS,
// 	IPCTNL_MSG_CT_GET_DYING,
// 	IPCTNL_MSG_CT_GET_UNCONFIRMED,
//
// 	IPCTNL_MSG_MAX
// };
const (
	IPCTNL_MSG_CT_GET    = 1
	IPCTNL_MSG_CT_DELETE = 2
)

// #define NFNETLINK_V0	0
const (
	NFNETLINK_V0 = 0
)

const (
	NLA_F_NESTED        uint16 = (1 << 15) // #define NLA_F_NESTED (1 << 15)
	NLA_F_NET_BYTEORDER uint16 = (1 << 14) // #define NLA_F_NESTED (1 << 14)
	NLA_TYPE_MASK              = ^(NLA_F_NESTED | NLA_F_NET_BYTEORDER)
	NLA_ALIGNTO         uint16 = 4 // #define NLA_ALIGNTO 4
)

// enum ctattr_type {
// 	CTA_UNSPEC,
// 	CTA_TUPLE_ORIG,
// 	CTA_TUPLE_REPLY,
// 	CTA_STATUS,
// 	CTA_PROTOINFO,
// 	CTA_HELP,
// 	CTA_NAT_SRC,
// #define CTA_NAT	CTA_NAT_SRC	/* backwards compatibility */
// 	CTA_TIMEOUT,
// 	CTA_MARK,
// 	CTA_COUNTERS_ORIG,
// 	CTA_COUNTERS_REPLY,
// 	CTA_USE,
// 	CTA_ID,
// 	CTA_NAT_DST,
// 	CTA_TUPLE_MASTER,
// 	CTA_SEQ_ADJ_ORIG,
// 	CTA_NAT_SEQ_ADJ_ORIG	= CTA_SEQ_ADJ_ORIG,
// 	CTA_SEQ_ADJ_REPLY,
// 	CTA_NAT_SEQ_ADJ_REPLY	= CTA_SEQ_ADJ_REPLY,
// 	CTA_SECMARK,		/* obsolete */
// 	CTA_ZONE,
// 	CTA_SECCTX,
// 	CTA_TIMESTAMP,
// 	CTA_MARK_MASK,
// 	CTA_LABELS,
// 	CTA_LABELS_MASK,
// 	__CTA_MAX
// };
const (
	CTA_TUPLE_ORIG     = 1
	CTA_TUPLE_REPLY    = 2
	CTA_STATUS         = 3
	CTA_PROTOINFO      = 4
	CTA_TIMEOUT        = 7
	CTA_MARK           = 8
	CTA_COUNTERS_ORIG  = 9
	CTA_COUNTERS_REPLY = 10
	CTA_USE            = 11
	CTA_ID             = 12
	CTA_TIMESTAMP      = 20
)

// enum ctattr_tuple {
// 	CTA_TUPLE_UNSPEC,
// 	CTA_TUPLE_IP,
// 	CTA_TUPLE_PROTO,
// 	CTA_TUPLE_ZONE,
// 	__CTA_TUPLE_MAX
// };
// #define CTA_TUPLE_MAX (__CTA_TUPLE_MAX - 1)
const (
	CTA_TUPLE_IP    = 1
	CTA_TUPLE_PROTO = 2
)

// enum ctattr_ip {
// 	CTA_IP_UNSPEC,
// 	CTA_IP_V4_SRC,
// 	CTA_IP_V4_DST,
// 	CTA_IP_V6_SRC,
// 	CTA_IP_V6_DST,
// 	__CTA_IP_MAX
// };
// #define CTA_IP_MAX (__CTA_IP_MAX - 1)
const (
	CTA_IP_V4_SRC = 1
	CTA_IP_V4_DST = 2
	CTA_IP_V6_SRC = 3
	CTA_IP_V6_DST = 4
)

// enum ctattr_l4proto {
// 	CTA_PROTO_UNSPEC,
// 	CTA_PROTO_NUM,
// 	CTA_PROTO_SRC_PORT,
// 	CTA_PROTO_DST_PORT,
// 	CTA_PROTO_ICMP_ID,
// 	CTA_PROTO_ICMP_TYPE,
// 	CTA_PROTO_ICMP_CODE,
// 	CTA_PROTO_ICMPV6_ID,
// 	CTA_PROTO_ICMPV6_TYPE,
// 	CTA_PROTO_ICMPV6_CODE,
// 	__CTA_PROTO_MAX
// };
// #define CTA_PROTO_MAX (__CTA_PROTO_MAX - 1)
const (
	CTA_PROTO_NUM      = 1
	CTA_PROTO_SRC_PORT = 2
	CTA_PROTO_DST_PORT = 3
)

// enum ctattr_protoinfo {
// 	CTA_PROTOINFO_UNSPEC,
// 	CTA_PROTOINFO_TCP,
// 	CTA_PROTOINFO_DCCP,
// 	CTA_PROTOINFO_SCTP,
// 	__CTA_PROTOINFO_MAX
// };
// #define CTA_PROTOINFO_MAX (__CTA_PROTOINFO_MAX - 1)
const (
	CTA_PROTOINFO_TCP = 1
)

// enum ctattr_protoinfo_tcp {
// 	CTA_PROTOINFO_TCP_UNSPEC,
// 	CTA_PROTOINFO_TCP_STATE,
// 	CTA_PROTOINFO_TCP_WSCALE_ORIGINAL,
// 	CTA_PROTOINFO_TCP_WSCALE_REPLY,
// 	CTA_PROTOINFO_TCP_FLAGS_ORIGINAL,
// 	CTA_PROTOINFO_TCP_FLAGS_REPLY,
// 	__CTA_PROTOINFO_TCP_MAX
// };
// #define CTA_PROTOINFO_TCP_MAX (__CTA_PROTOINFO_TCP_MAX - 1)
const (
	CTA_PROTOINFO_TCP_STATE           = 1
	CTA_PROTOINFO_TCP_WSCALE_ORIGINAL = 2
	CTA_PROTOINFO_TCP_WSCALE_REPLY    = 3
	CTA_PROTOINFO_TCP_FLAGS_ORIGINAL  = 4
	CTA_PROTOINFO_TCP_FLAGS_REPLY     = 5
)

// enum ctattr_counters {
// 	CTA_COUNTERS_UNSPEC,
// 	CTA_COUNTERS_PACKETS,		/* 64bit counters */
// 	CTA_COUNTERS_BYTES,		/* 64bit counters */
// 	CTA_COUNTERS32_PACKETS,		/* old 32bit counters, unused */
// 	CTA_COUNTERS32_BYTES,		/* old 32bit counters, unused */
// 	CTA_COUNTERS_PAD,
// 	__CTA_COUNTERS_M
// };
// #define CTA_COUNTERS_MAX (__CTA_COUNTERS_MAX - 1)
const (
	CTA_COUNTERS_PACKETS = 1
	CTA_COUNTERS_BYTES   = 2
)

// enum CTA TIMESTAMP TLVs
// CTA_TIMESTAMP_START       /* 64bit value */
// CTA_TIMESTAMP_STOP        /* 64bit value */
const (
	CTA_TIMESTAMP_START = 1
	CTA_TIMESTAMP_STOP  = 2
)

// /* General form of address family dependent message.
//  */
// struct nfgenmsg {
// 	__u8  nfgen_family;		/* AF_xxx */
// 	__u8  version;		/* nfnetlink version */
// 	__be16    res_id;		/* resource id */
// };
type Nfgenmsg struct {
	NfgenFamily uint8
	Version     uint8
	ResId       uint16 // big endian
}

func (msg *Nfgenmsg) Len() int {
	return SizeofNfgenmsg
}

func DeserializeNfgenmsg(b []byte) *Nfgenmsg {
	return (*Nfgenmsg)(unsafe.Pointer(&b[0:SizeofNfgenmsg][0]))
}

func (msg *Nfgenmsg) Serialize() []byte {
	return (*(*[SizeofNfgenmsg]byte)(unsafe.Pointer(msg)))[:]
}
   07070100000C33000081A4000000000000000000000001645E367C000009A4000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/nl/devlink_linux.go package nl

// All the following constants are coming from:
// https://github.com/torvalds/linux/blob/master/include/uapi/linux/devlink.h

const (
	GENL_DEVLINK_VERSION = 1
	GENL_DEVLINK_NAME    = "devlink"
)

const (
	DEVLINK_CMD_GET         = 1
	DEVLINK_CMD_PORT_GET    = 5
	DEVLINK_CMD_PORT_SET    = 6
	DEVLINK_CMD_PORT_NEW    = 7
	DEVLINK_CMD_PORT_DEL    = 8
	DEVLINK_CMD_ESWITCH_GET = 29
	DEVLINK_CMD_ESWITCH_SET = 30
	DEVLINK_CMD_INFO_GET    = 51
)

const (
	DEVLINK_ATTR_BUS_NAME               = 1
	DEVLINK_ATTR_DEV_NAME               = 2
	DEVLINK_ATTR_PORT_INDEX             = 3
	DEVLINK_ATTR_PORT_TYPE              = 4
	DEVLINK_ATTR_PORT_NETDEV_IFINDEX    = 6
	DEVLINK_ATTR_PORT_NETDEV_NAME       = 7
	DEVLINK_ATTR_PORT_IBDEV_NAME        = 8
	DEVLINK_ATTR_ESWITCH_MODE           = 25
	DEVLINK_ATTR_ESWITCH_INLINE_MODE    = 26
	DEVLINK_ATTR_ESWITCH_ENCAP_MODE     = 62
	DEVLINK_ATTR_PORT_FLAVOUR           = 77
	DEVLINK_ATTR_INFO_DRIVER_NAME       = 98
	DEVLINK_ATTR_INFO_SERIAL_NUMBER     = 99
	DEVLINK_ATTR_INFO_VERSION_FIXED     = 100
	DEVLINK_ATTR_INFO_VERSION_RUNNING   = 101
	DEVLINK_ATTR_INFO_VERSION_STORED    = 102
	DEVLINK_ATTR_INFO_VERSION_NAME      = 103
	DEVLINK_ATTR_INFO_VERSION_VALUE     = 104
	DEVLINK_ATTR_PORT_PCI_PF_NUMBER     = 127
	DEVLINK_ATTR_PORT_FUNCTION          = 145
	DEVLINK_ATTR_PORT_CONTROLLER_NUMBER = 150
	DEVLINK_ATTR_PORT_PCI_SF_NUMBER     = 164
)

const (
	DEVLINK_ESWITCH_MODE_LEGACY    = 0
	DEVLINK_ESWITCH_MODE_SWITCHDEV = 1
)

const (
	DEVLINK_ESWITCH_INLINE_MODE_NONE      = 0
	DEVLINK_ESWITCH_INLINE_MODE_LINK      = 1
	DEVLINK_ESWITCH_INLINE_MODE_NETWORK   = 2
	DEVLINK_ESWITCH_INLINE_MODE_TRANSPORT = 3
)

const (
	DEVLINK_ESWITCH_ENCAP_MODE_NONE  = 0
	DEVLINK_ESWITCH_ENCAP_MODE_BASIC = 1
)

const (
	DEVLINK_PORT_FLAVOUR_PHYSICAL = 0
	DEVLINK_PORT_FLAVOUR_CPU      = 1
	DEVLINK_PORT_FLAVOUR_DSA      = 2
	DEVLINK_PORT_FLAVOUR_PCI_PF   = 3
	DEVLINK_PORT_FLAVOUR_PCI_VF   = 4
	DEVLINK_PORT_FLAVOUR_VIRTUAL  = 5
	DEVLINK_PORT_FLAVOUR_UNUSED   = 6
	DEVLINK_PORT_FLAVOUR_PCI_SF   = 7
)

const (
	DEVLINK_PORT_TYPE_NOTSET = 0
	DEVLINK_PORT_TYPE_AUTO   = 1
	DEVLINK_PORT_TYPE_ETH    = 2
	DEVLINK_PORT_TYPE_IB     = 3
)

const (
	DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR = 1
	DEVLINK_PORT_FN_ATTR_STATE         = 2
	DEVLINK_PORT_FN_ATTR_OPSTATE       = 3
)

const (
	DEVLINK_PORT_FN_STATE_INACTIVE = 0
	DEVLINK_PORT_FN_STATE_ACTIVE   = 1
)

const (
	DEVLINK_PORT_FN_OPSTATE_DETACHED = 0
	DEVLINK_PORT_FN_OPSTATE_ATTACHED = 1
)
07070100000C34000081A4000000000000000000000001645E367C00000592000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/nl/genetlink_linux.go   package nl

import (
	"unsafe"
)

const SizeofGenlmsg = 4

const (
	GENL_ID_CTRL      = 0x10
	GENL_CTRL_VERSION = 2
	GENL_CTRL_NAME    = "nlctrl"
)

const (
	GENL_CTRL_CMD_GETFAMILY = 3
)

const (
	GENL_CTRL_ATTR_UNSPEC = iota
	GENL_CTRL_ATTR_FAMILY_ID
	GENL_CTRL_ATTR_FAMILY_NAME
	GENL_CTRL_ATTR_VERSION
	GENL_CTRL_ATTR_HDRSIZE
	GENL_CTRL_ATTR_MAXATTR
	GENL_CTRL_ATTR_OPS
	GENL_CTRL_ATTR_MCAST_GROUPS
)

const (
	GENL_CTRL_ATTR_OP_UNSPEC = iota
	GENL_CTRL_ATTR_OP_ID
	GENL_CTRL_ATTR_OP_FLAGS
)

const (
	GENL_ADMIN_PERM = 1 << iota
	GENL_CMD_CAP_DO
	GENL_CMD_CAP_DUMP
	GENL_CMD_CAP_HASPOL
)

const (
	GENL_CTRL_ATTR_MCAST_GRP_UNSPEC = iota
	GENL_CTRL_ATTR_MCAST_GRP_NAME
	GENL_CTRL_ATTR_MCAST_GRP_ID
)

const (
	GENL_GTP_VERSION = 0
	GENL_GTP_NAME    = "gtp"
)

const (
	GENL_GTP_CMD_NEWPDP = iota
	GENL_GTP_CMD_DELPDP
	GENL_GTP_CMD_GETPDP
)

const (
	GENL_GTP_ATTR_UNSPEC = iota
	GENL_GTP_ATTR_LINK
	GENL_GTP_ATTR_VERSION
	GENL_GTP_ATTR_TID
	GENL_GTP_ATTR_PEER_ADDRESS
	GENL_GTP_ATTR_MS_ADDRESS
	GENL_GTP_ATTR_FLOW
	GENL_GTP_ATTR_NET_NS_FD
	GENL_GTP_ATTR_I_TEI
	GENL_GTP_ATTR_O_TEI
	GENL_GTP_ATTR_PAD
)

type Genlmsg struct {
	Command uint8
	Version uint8
}

func (msg *Genlmsg) Len() int {
	return SizeofGenlmsg
}

func DeserializeGenlmsg(b []byte) *Genlmsg {
	return (*Genlmsg)(unsafe.Pointer(&b[0:SizeofGenlmsg][0]))
}

func (msg *Genlmsg) Serialize() []byte {
	return (*(*[SizeofGenlmsg]byte)(unsafe.Pointer(msg)))[:]
}
  07070100000C35000081A4000000000000000000000001645E367C00001717000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/nl/ipset_linux.go   package nl

import (
	"strconv"

	"golang.org/x/sys/unix"
)

const (
	/* The protocol version */
	IPSET_PROTOCOL = 6

	/* The max length of strings including NUL: set and type identifiers */
	IPSET_MAXNAMELEN = 32

	/* The maximum permissible comment length we will accept over netlink */
	IPSET_MAX_COMMENT_SIZE = 255
)

const (
	_                  = iota
	IPSET_CMD_PROTOCOL /* 1: Return protocol version */
	IPSET_CMD_CREATE   /* 2: Create a new (empty) set */
	IPSET_CMD_DESTROY  /* 3: Destroy a (empty) set */
	IPSET_CMD_FLUSH    /* 4: Remove all elements from a set */
	IPSET_CMD_RENAME   /* 5: Rename a set */
	IPSET_CMD_SWAP     /* 6: Swap two sets */
	IPSET_CMD_LIST     /* 7: List sets */
	IPSET_CMD_SAVE     /* 8: Save sets */
	IPSET_CMD_ADD      /* 9: Add an element to a set */
	IPSET_CMD_DEL      /* 10: Delete an element from a set */
	IPSET_CMD_TEST     /* 11: Test an element in a set */
	IPSET_CMD_HEADER   /* 12: Get set header data only */
	IPSET_CMD_TYPE     /* 13: Get set type */
)

/* Attributes at command level */
const (
	_                       = iota
	IPSET_ATTR_PROTOCOL     /* 1: Protocol version */
	IPSET_ATTR_SETNAME      /* 2: Name of the set */
	IPSET_ATTR_TYPENAME     /* 3: Typename */
	IPSET_ATTR_REVISION     /* 4: Settype revision */
	IPSET_ATTR_FAMILY       /* 5: Settype family */
	IPSET_ATTR_FLAGS        /* 6: Flags at command level */
	IPSET_ATTR_DATA         /* 7: Nested attributes */
	IPSET_ATTR_ADT          /* 8: Multiple data containers */
	IPSET_ATTR_LINENO       /* 9: Restore lineno */
	IPSET_ATTR_PROTOCOL_MIN /* 10: Minimal supported version number */

	IPSET_ATTR_SETNAME2     = IPSET_ATTR_TYPENAME     /* Setname at rename/swap */
	IPSET_ATTR_REVISION_MIN = IPSET_ATTR_PROTOCOL_MIN /* type rev min */
)

/* CADT specific attributes */
const (
	IPSET_ATTR_IP          = 1
	IPSET_ATTR_IP_FROM     = 1
	IPSET_ATTR_IP_TO       = 2
	IPSET_ATTR_CIDR        = 3
	IPSET_ATTR_PORT        = 4
	IPSET_ATTR_PORT_FROM   = 4
	IPSET_ATTR_PORT_TO     = 5
	IPSET_ATTR_TIMEOUT     = 6
	IPSET_ATTR_PROTO       = 7
	IPSET_ATTR_CADT_FLAGS  = 8
	IPSET_ATTR_CADT_LINENO = IPSET_ATTR_LINENO /* 9 */
	IPSET_ATTR_MARK        = 10
	IPSET_ATTR_MARKMASK    = 11

	/* Reserve empty slots */
	IPSET_ATTR_CADT_MAX = 16

	/* Create-only specific attributes */
	IPSET_ATTR_GC = 3 + iota
	IPSET_ATTR_HASHSIZE
	IPSET_ATTR_MAXELEM
	IPSET_ATTR_NETMASK
	IPSET_ATTR_PROBES
	IPSET_ATTR_RESIZE
	IPSET_ATTR_SIZE

	/* Kernel-only */
	IPSET_ATTR_ELEMENTS
	IPSET_ATTR_REFERENCES
	IPSET_ATTR_MEMSIZE

	SET_ATTR_CREATE_MAX
)

/* ADT specific attributes */
const (
	IPSET_ATTR_ETHER = IPSET_ATTR_CADT_MAX + iota + 1
	IPSET_ATTR_NAME
	IPSET_ATTR_NAMEREF
	IPSET_ATTR_IP2
	IPSET_ATTR_CIDR2
	IPSET_ATTR_IP2_TO
	IPSET_ATTR_IFACE
	IPSET_ATTR_BYTES
	IPSET_ATTR_PACKETS
	IPSET_ATTR_COMMENT
	IPSET_ATTR_SKBMARK
	IPSET_ATTR_SKBPRIO
	IPSET_ATTR_SKBQUEUE
)

/* Flags at CADT attribute level, upper half of cmdattrs */
const (
	IPSET_FLAG_BIT_BEFORE        = 0
	IPSET_FLAG_BEFORE            = (1 << IPSET_FLAG_BIT_BEFORE)
	IPSET_FLAG_BIT_PHYSDEV       = 1
	IPSET_FLAG_PHYSDEV           = (1 << IPSET_FLAG_BIT_PHYSDEV)
	IPSET_FLAG_BIT_NOMATCH       = 2
	IPSET_FLAG_NOMATCH           = (1 << IPSET_FLAG_BIT_NOMATCH)
	IPSET_FLAG_BIT_WITH_COUNTERS = 3
	IPSET_FLAG_WITH_COUNTERS     = (1 << IPSET_FLAG_BIT_WITH_COUNTERS)
	IPSET_FLAG_BIT_WITH_COMMENT  = 4
	IPSET_FLAG_WITH_COMMENT      = (1 << IPSET_FLAG_BIT_WITH_COMMENT)
	IPSET_FLAG_BIT_WITH_FORCEADD = 5
	IPSET_FLAG_WITH_FORCEADD     = (1 << IPSET_FLAG_BIT_WITH_FORCEADD)
	IPSET_FLAG_BIT_WITH_SKBINFO  = 6
	IPSET_FLAG_WITH_SKBINFO      = (1 << IPSET_FLAG_BIT_WITH_SKBINFO)
	IPSET_FLAG_CADT_MAX          = 15
)

const (
	IPSET_ERR_PRIVATE = 4096 + iota
	IPSET_ERR_PROTOCOL
	IPSET_ERR_FIND_TYPE
	IPSET_ERR_MAX_SETS
	IPSET_ERR_BUSY
	IPSET_ERR_EXIST_SETNAME2
	IPSET_ERR_TYPE_MISMATCH
	IPSET_ERR_EXIST
	IPSET_ERR_INVALID_CIDR
	IPSET_ERR_INVALID_NETMASK
	IPSET_ERR_INVALID_FAMILY
	IPSET_ERR_TIMEOUT
	IPSET_ERR_REFERENCED
	IPSET_ERR_IPADDR_IPV4
	IPSET_ERR_IPADDR_IPV6
	IPSET_ERR_COUNTER
	IPSET_ERR_COMMENT
	IPSET_ERR_INVALID_MARKMASK
	IPSET_ERR_SKBINFO

	/* Type specific error codes */
	IPSET_ERR_TYPE_SPECIFIC = 4352
)

type IPSetError uintptr

func (e IPSetError) Error() string {
	switch int(e) {
	case IPSET_ERR_PRIVATE:
		return "private"
	case IPSET_ERR_PROTOCOL:
		return "invalid protocol"
	case IPSET_ERR_FIND_TYPE:
		return "invalid type"
	case IPSET_ERR_MAX_SETS:
		return "max sets reached"
	case IPSET_ERR_BUSY:
		return "busy"
	case IPSET_ERR_EXIST_SETNAME2:
		return "exist_setname2"
	case IPSET_ERR_TYPE_MISMATCH:
		return "type mismatch"
	case IPSET_ERR_EXIST:
		return "exist"
	case IPSET_ERR_INVALID_CIDR:
		return "invalid cidr"
	case IPSET_ERR_INVALID_NETMASK:
		return "invalid netmask"
	case IPSET_ERR_INVALID_FAMILY:
		return "invalid family"
	case IPSET_ERR_TIMEOUT:
		return "timeout"
	case IPSET_ERR_REFERENCED:
		return "referenced"
	case IPSET_ERR_IPADDR_IPV4:
		return "invalid ipv4 address"
	case IPSET_ERR_IPADDR_IPV6:
		return "invalid ipv6 address"
	case IPSET_ERR_COUNTER:
		return "invalid counter"
	case IPSET_ERR_COMMENT:
		return "invalid comment"
	case IPSET_ERR_INVALID_MARKMASK:
		return "invalid markmask"
	case IPSET_ERR_SKBINFO:
		return "skbinfo"
	default:
		return "errno " + strconv.Itoa(int(e))
	}
}

func GetIpsetFlags(cmd int) int {
	switch cmd {
	case IPSET_CMD_CREATE:
		return unix.NLM_F_REQUEST | unix.NLM_F_ACK | unix.NLM_F_CREATE
	case IPSET_CMD_DESTROY,
		IPSET_CMD_FLUSH,
		IPSET_CMD_RENAME,
		IPSET_CMD_SWAP,
		IPSET_CMD_TEST:
		return unix.NLM_F_REQUEST | unix.NLM_F_ACK
	case IPSET_CMD_LIST,
		IPSET_CMD_SAVE:
		return unix.NLM_F_REQUEST | unix.NLM_F_ACK | unix.NLM_F_ROOT | unix.NLM_F_MATCH | unix.NLM_F_DUMP
	case IPSET_CMD_ADD,
		IPSET_CMD_DEL:
		return unix.NLM_F_REQUEST | unix.NLM_F_ACK
	case IPSET_CMD_HEADER,
		IPSET_CMD_TYPE,
		IPSET_CMD_PROTOCOL:
		return unix.NLM_F_REQUEST
	default:
		return 0
	}
}
 07070100000C36000081A4000000000000000000000001645E367C000038A9000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/nl/link_linux.go    package nl

import (
	"bytes"
	"encoding/binary"
	"unsafe"
)

const (
	DEFAULT_CHANGE = 0xFFFFFFFF
)

const (
	IFLA_INFO_UNSPEC = iota
	IFLA_INFO_KIND
	IFLA_INFO_DATA
	IFLA_INFO_XSTATS
	IFLA_INFO_SLAVE_KIND
	IFLA_INFO_SLAVE_DATA
	IFLA_INFO_MAX = IFLA_INFO_SLAVE_DATA
)

const (
	IFLA_VLAN_UNSPEC = iota
	IFLA_VLAN_ID
	IFLA_VLAN_FLAGS
	IFLA_VLAN_EGRESS_QOS
	IFLA_VLAN_INGRESS_QOS
	IFLA_VLAN_PROTOCOL
	IFLA_VLAN_MAX = IFLA_VLAN_PROTOCOL
)

const (
	VETH_INFO_UNSPEC = iota
	VETH_INFO_PEER
	VETH_INFO_MAX = VETH_INFO_PEER
)

const (
	IFLA_VXLAN_UNSPEC = iota
	IFLA_VXLAN_ID
	IFLA_VXLAN_GROUP
	IFLA_VXLAN_LINK
	IFLA_VXLAN_LOCAL
	IFLA_VXLAN_TTL
	IFLA_VXLAN_TOS
	IFLA_VXLAN_LEARNING
	IFLA_VXLAN_AGEING
	IFLA_VXLAN_LIMIT
	IFLA_VXLAN_PORT_RANGE
	IFLA_VXLAN_PROXY
	IFLA_VXLAN_RSC
	IFLA_VXLAN_L2MISS
	IFLA_VXLAN_L3MISS
	IFLA_VXLAN_PORT
	IFLA_VXLAN_GROUP6
	IFLA_VXLAN_LOCAL6
	IFLA_VXLAN_UDP_CSUM
	IFLA_VXLAN_UDP_ZERO_CSUM6_TX
	IFLA_VXLAN_UDP_ZERO_CSUM6_RX
	IFLA_VXLAN_REMCSUM_TX
	IFLA_VXLAN_REMCSUM_RX
	IFLA_VXLAN_GBP
	IFLA_VXLAN_REMCSUM_NOPARTIAL
	IFLA_VXLAN_FLOWBASED
	IFLA_VXLAN_MAX = IFLA_VXLAN_FLOWBASED
)

const (
	BRIDGE_MODE_UNSPEC = iota
	BRIDGE_MODE_HAIRPIN
)

const (
	IFLA_BRPORT_UNSPEC = iota
	IFLA_BRPORT_STATE
	IFLA_BRPORT_PRIORITY
	IFLA_BRPORT_COST
	IFLA_BRPORT_MODE
	IFLA_BRPORT_GUARD
	IFLA_BRPORT_PROTECT
	IFLA_BRPORT_FAST_LEAVE
	IFLA_BRPORT_LEARNING
	IFLA_BRPORT_UNICAST_FLOOD
	IFLA_BRPORT_PROXYARP
	IFLA_BRPORT_LEARNING_SYNC
	IFLA_BRPORT_PROXYARP_WIFI
	IFLA_BRPORT_MAX = IFLA_BRPORT_PROXYARP_WIFI
)

const (
	IFLA_IPVLAN_UNSPEC = iota
	IFLA_IPVLAN_MODE
	IFLA_IPVLAN_FLAG
	IFLA_IPVLAN_MAX = IFLA_IPVLAN_FLAG
)

const (
	IFLA_MACVLAN_UNSPEC = iota
	IFLA_MACVLAN_MODE
	IFLA_MACVLAN_FLAGS
	IFLA_MACVLAN_MACADDR_MODE
	IFLA_MACVLAN_MACADDR
	IFLA_MACVLAN_MACADDR_DATA
	IFLA_MACVLAN_MACADDR_COUNT
	IFLA_MACVLAN_MAX = IFLA_MACVLAN_FLAGS
)

const (
	MACVLAN_MODE_PRIVATE  = 1
	MACVLAN_MODE_VEPA     = 2
	MACVLAN_MODE_BRIDGE   = 4
	MACVLAN_MODE_PASSTHRU = 8
	MACVLAN_MODE_SOURCE   = 16
)

const (
	MACVLAN_MACADDR_ADD = iota
	MACVLAN_MACADDR_DEL
	MACVLAN_MACADDR_FLUSH
	MACVLAN_MACADDR_SET
)

const (
	IFLA_BOND_UNSPEC = iota
	IFLA_BOND_MODE
	IFLA_BOND_ACTIVE_SLAVE
	IFLA_BOND_MIIMON
	IFLA_BOND_UPDELAY
	IFLA_BOND_DOWNDELAY
	IFLA_BOND_USE_CARRIER
	IFLA_BOND_ARP_INTERVAL
	IFLA_BOND_ARP_IP_TARGET
	IFLA_BOND_ARP_VALIDATE
	IFLA_BOND_ARP_ALL_TARGETS
	IFLA_BOND_PRIMARY
	IFLA_BOND_PRIMARY_RESELECT
	IFLA_BOND_FAIL_OVER_MAC
	IFLA_BOND_XMIT_HASH_POLICY
	IFLA_BOND_RESEND_IGMP
	IFLA_BOND_NUM_PEER_NOTIF
	IFLA_BOND_ALL_SLAVES_ACTIVE
	IFLA_BOND_MIN_LINKS
	IFLA_BOND_LP_INTERVAL
	IFLA_BOND_PACKETS_PER_SLAVE
	IFLA_BOND_AD_LACP_RATE
	IFLA_BOND_AD_SELECT
	IFLA_BOND_AD_INFO
	IFLA_BOND_AD_ACTOR_SYS_PRIO
	IFLA_BOND_AD_USER_PORT_KEY
	IFLA_BOND_AD_ACTOR_SYSTEM
	IFLA_BOND_TLB_DYNAMIC_LB
)

const (
	IFLA_BOND_AD_INFO_UNSPEC = iota
	IFLA_BOND_AD_INFO_AGGREGATOR
	IFLA_BOND_AD_INFO_NUM_PORTS
	IFLA_BOND_AD_INFO_ACTOR_KEY
	IFLA_BOND_AD_INFO_PARTNER_KEY
	IFLA_BOND_AD_INFO_PARTNER_MAC
)

const (
	IFLA_BOND_SLAVE_UNSPEC = iota
	IFLA_BOND_SLAVE_STATE
	IFLA_BOND_SLAVE_MII_STATUS
	IFLA_BOND_SLAVE_LINK_FAILURE_COUNT
	IFLA_BOND_SLAVE_PERM_HWADDR
	IFLA_BOND_SLAVE_QUEUE_ID
	IFLA_BOND_SLAVE_AD_AGGREGATOR_ID
	IFLA_BOND_SLAVE_AD_ACTOR_OPER_PORT_STATE
	IFLA_BOND_SLAVE_AD_PARTNER_OPER_PORT_STATE
)

const (
	IFLA_GENEVE_UNSPEC = iota
	IFLA_GENEVE_ID     // vni
	IFLA_GENEVE_REMOTE
	IFLA_GENEVE_TTL
	IFLA_GENEVE_TOS
	IFLA_GENEVE_PORT // destination port
	IFLA_GENEVE_COLLECT_METADATA
	IFLA_GENEVE_REMOTE6
	IFLA_GENEVE_UDP_CSUM
	IFLA_GENEVE_UDP_ZERO_CSUM6_TX
	IFLA_GENEVE_UDP_ZERO_CSUM6_RX
	IFLA_GENEVE_LABEL
	IFLA_GENEVE_MAX = IFLA_GENEVE_LABEL
)

const (
	IFLA_GRE_UNSPEC = iota
	IFLA_GRE_LINK
	IFLA_GRE_IFLAGS
	IFLA_GRE_OFLAGS
	IFLA_GRE_IKEY
	IFLA_GRE_OKEY
	IFLA_GRE_LOCAL
	IFLA_GRE_REMOTE
	IFLA_GRE_TTL
	IFLA_GRE_TOS
	IFLA_GRE_PMTUDISC
	IFLA_GRE_ENCAP_LIMIT
	IFLA_GRE_FLOWINFO
	IFLA_GRE_FLAGS
	IFLA_GRE_ENCAP_TYPE
	IFLA_GRE_ENCAP_FLAGS
	IFLA_GRE_ENCAP_SPORT
	IFLA_GRE_ENCAP_DPORT
	IFLA_GRE_COLLECT_METADATA
	IFLA_GRE_MAX = IFLA_GRE_COLLECT_METADATA
)

const (
	GRE_CSUM    = 0x8000
	GRE_ROUTING = 0x4000
	GRE_KEY     = 0x2000
	GRE_SEQ     = 0x1000
	GRE_STRICT  = 0x0800
	GRE_REC     = 0x0700
	GRE_FLAGS   = 0x00F8
	GRE_VERSION = 0x0007
)

const (
	IFLA_VF_INFO_UNSPEC = iota
	IFLA_VF_INFO
	IFLA_VF_INFO_MAX = IFLA_VF_INFO
)

const (
	IFLA_VF_UNSPEC = iota
	IFLA_VF_MAC    /* Hardware queue specific attributes */
	IFLA_VF_VLAN
	IFLA_VF_TX_RATE      /* Max TX Bandwidth Allocation */
	IFLA_VF_SPOOFCHK     /* Spoof Checking on/off switch */
	IFLA_VF_LINK_STATE   /* link state enable/disable/auto switch */
	IFLA_VF_RATE         /* Min and Max TX Bandwidth Allocation */
	IFLA_VF_RSS_QUERY_EN /* RSS Redirection Table and Hash Key query
	 * on/off switch
	 */
	IFLA_VF_STATS        /* network device statistics */
	IFLA_VF_TRUST        /* Trust state of VF */
	IFLA_VF_IB_NODE_GUID /* VF Infiniband node GUID */
	IFLA_VF_IB_PORT_GUID /* VF Infiniband port GUID */
	IFLA_VF_MAX          = IFLA_VF_IB_PORT_GUID
)

const (
	IFLA_VF_LINK_STATE_AUTO    = iota /* link state of the uplink */
	IFLA_VF_LINK_STATE_ENABLE         /* link always up */
	IFLA_VF_LINK_STATE_DISABLE        /* link always down */
	IFLA_VF_LINK_STATE_MAX     = IFLA_VF_LINK_STATE_DISABLE
)

const (
	IFLA_VF_STATS_RX_PACKETS = iota
	IFLA_VF_STATS_TX_PACKETS
	IFLA_VF_STATS_RX_BYTES
	IFLA_VF_STATS_TX_BYTES
	IFLA_VF_STATS_BROADCAST
	IFLA_VF_STATS_MULTICAST
	IFLA_VF_STATS_RX_DROPPED
	IFLA_VF_STATS_TX_DROPPED
	IFLA_VF_STATS_MAX = IFLA_VF_STATS_TX_DROPPED
)

const (
	SizeofVfMac        = 0x24
	SizeofVfVlan       = 0x0c
	SizeofVfTxRate     = 0x08
	SizeofVfRate       = 0x0c
	SizeofVfSpoofchk   = 0x08
	SizeofVfLinkState  = 0x08
	SizeofVfRssQueryEn = 0x08
	SizeofVfTrust      = 0x08
	SizeofVfGUID       = 0x10
)

// struct ifla_vf_mac {
//   __u32 vf;
//   __u8 mac[32]; /* MAX_ADDR_LEN */
// };

type VfMac struct {
	Vf  uint32
	Mac [32]byte
}

func (msg *VfMac) Len() int {
	return SizeofVfMac
}

func DeserializeVfMac(b []byte) *VfMac {
	return (*VfMac)(unsafe.Pointer(&b[0:SizeofVfMac][0]))
}

func (msg *VfMac) Serialize() []byte {
	return (*(*[SizeofVfMac]byte)(unsafe.Pointer(msg)))[:]
}

// struct ifla_vf_vlan {
//   __u32 vf;
//   __u32 vlan; /* 0 - 4095, 0 disables VLAN filter */
//   __u32 qos;
// };

type VfVlan struct {
	Vf   uint32
	Vlan uint32
	Qos  uint32
}

func (msg *VfVlan) Len() int {
	return SizeofVfVlan
}

func DeserializeVfVlan(b []byte) *VfVlan {
	return (*VfVlan)(unsafe.Pointer(&b[0:SizeofVfVlan][0]))
}

func (msg *VfVlan) Serialize() []byte {
	return (*(*[SizeofVfVlan]byte)(unsafe.Pointer(msg)))[:]
}

// struct ifla_vf_tx_rate {
//   __u32 vf;
//   __u32 rate; /* Max TX bandwidth in Mbps, 0 disables throttling */
// };

type VfTxRate struct {
	Vf   uint32
	Rate uint32
}

func (msg *VfTxRate) Len() int {
	return SizeofVfTxRate
}

func DeserializeVfTxRate(b []byte) *VfTxRate {
	return (*VfTxRate)(unsafe.Pointer(&b[0:SizeofVfTxRate][0]))
}

func (msg *VfTxRate) Serialize() []byte {
	return (*(*[SizeofVfTxRate]byte)(unsafe.Pointer(msg)))[:]
}

//struct ifla_vf_stats {
//	__u64 rx_packets;
//	__u64 tx_packets;
//	__u64 rx_bytes;
//	__u64 tx_bytes;
//	__u64 broadcast;
//	__u64 multicast;
//};

type VfStats struct {
	RxPackets uint64
	TxPackets uint64
	RxBytes   uint64
	TxBytes   uint64
	Multicast uint64
	Broadcast uint64
	RxDropped uint64
	TxDropped uint64
}

func DeserializeVfStats(b []byte) VfStats {
	var vfstat VfStats
	stats, err := ParseRouteAttr(b)
	if err != nil {
		return vfstat
	}
	var valueVar uint64
	for _, stat := range stats {
		if err := binary.Read(bytes.NewBuffer(stat.Value), NativeEndian(), &valueVar); err != nil {
			break
		}
		switch stat.Attr.Type {
		case IFLA_VF_STATS_RX_PACKETS:
			vfstat.RxPackets = valueVar
		case IFLA_VF_STATS_TX_PACKETS:
			vfstat.TxPackets = valueVar
		case IFLA_VF_STATS_RX_BYTES:
			vfstat.RxBytes = valueVar
		case IFLA_VF_STATS_TX_BYTES:
			vfstat.TxBytes = valueVar
		case IFLA_VF_STATS_MULTICAST:
			vfstat.Multicast = valueVar
		case IFLA_VF_STATS_BROADCAST:
			vfstat.Broadcast = valueVar
		case IFLA_VF_STATS_RX_DROPPED:
			vfstat.RxDropped = valueVar
		case IFLA_VF_STATS_TX_DROPPED:
			vfstat.TxDropped = valueVar
		}
	}
	return vfstat
}

// struct ifla_vf_rate {
//   __u32 vf;
//   __u32 min_tx_rate; /* Min Bandwidth in Mbps */
//   __u32 max_tx_rate; /* Max Bandwidth in Mbps */
// };

type VfRate struct {
	Vf        uint32
	MinTxRate uint32
	MaxTxRate uint32
}

func (msg *VfRate) Len() int {
	return SizeofVfRate
}

func DeserializeVfRate(b []byte) *VfRate {
	return (*VfRate)(unsafe.Pointer(&b[0:SizeofVfRate][0]))
}

func (msg *VfRate) Serialize() []byte {
	return (*(*[SizeofVfRate]byte)(unsafe.Pointer(msg)))[:]
}

// struct ifla_vf_spoofchk {
//   __u32 vf;
//   __u32 setting;
// };

type VfSpoofchk struct {
	Vf      uint32
	Setting uint32
}

func (msg *VfSpoofchk) Len() int {
	return SizeofVfSpoofchk
}

func DeserializeVfSpoofchk(b []byte) *VfSpoofchk {
	return (*VfSpoofchk)(unsafe.Pointer(&b[0:SizeofVfSpoofchk][0]))
}

func (msg *VfSpoofchk) Serialize() []byte {
	return (*(*[SizeofVfSpoofchk]byte)(unsafe.Pointer(msg)))[:]
}

// struct ifla_vf_link_state {
//   __u32 vf;
//   __u32 link_state;
// };

type VfLinkState struct {
	Vf        uint32
	LinkState uint32
}

func (msg *VfLinkState) Len() int {
	return SizeofVfLinkState
}

func DeserializeVfLinkState(b []byte) *VfLinkState {
	return (*VfLinkState)(unsafe.Pointer(&b[0:SizeofVfLinkState][0]))
}

func (msg *VfLinkState) Serialize() []byte {
	return (*(*[SizeofVfLinkState]byte)(unsafe.Pointer(msg)))[:]
}

// struct ifla_vf_rss_query_en {
//   __u32 vf;
//   __u32 setting;
// };

type VfRssQueryEn struct {
	Vf      uint32
	Setting uint32
}

func (msg *VfRssQueryEn) Len() int {
	return SizeofVfRssQueryEn
}

func DeserializeVfRssQueryEn(b []byte) *VfRssQueryEn {
	return (*VfRssQueryEn)(unsafe.Pointer(&b[0:SizeofVfRssQueryEn][0]))
}

func (msg *VfRssQueryEn) Serialize() []byte {
	return (*(*[SizeofVfRssQueryEn]byte)(unsafe.Pointer(msg)))[:]
}

// struct ifla_vf_trust {
//   __u32 vf;
//   __u32 setting;
// };

type VfTrust struct {
	Vf      uint32
	Setting uint32
}

func (msg *VfTrust) Len() int {
	return SizeofVfTrust
}

func DeserializeVfTrust(b []byte) *VfTrust {
	return (*VfTrust)(unsafe.Pointer(&b[0:SizeofVfTrust][0]))
}

func (msg *VfTrust) Serialize() []byte {
	return (*(*[SizeofVfTrust]byte)(unsafe.Pointer(msg)))[:]
}

// struct ifla_vf_guid {
//   __u32 vf;
//   __u32 rsvd;
//   __u64 guid;
// };

type VfGUID struct {
	Vf   uint32
	Rsvd uint32
	GUID uint64
}

func (msg *VfGUID) Len() int {
	return SizeofVfGUID
}

func DeserializeVfGUID(b []byte) *VfGUID {
	return (*VfGUID)(unsafe.Pointer(&b[0:SizeofVfGUID][0]))
}

func (msg *VfGUID) Serialize() []byte {
	return (*(*[SizeofVfGUID]byte)(unsafe.Pointer(msg)))[:]
}

const (
	XDP_FLAGS_UPDATE_IF_NOEXIST = 1 << iota
	XDP_FLAGS_SKB_MODE
	XDP_FLAGS_DRV_MODE
	XDP_FLAGS_MASK = XDP_FLAGS_UPDATE_IF_NOEXIST | XDP_FLAGS_SKB_MODE | XDP_FLAGS_DRV_MODE
)

const (
	IFLA_XDP_UNSPEC   = iota
	IFLA_XDP_FD       /* fd of xdp program to attach, or -1 to remove */
	IFLA_XDP_ATTACHED /* read-only bool indicating if prog is attached */
	IFLA_XDP_FLAGS    /* xdp prog related flags */
	IFLA_XDP_PROG_ID  /* xdp prog id */
	IFLA_XDP_MAX      = IFLA_XDP_PROG_ID
)

// XDP program attach mode (used as dump value for IFLA_XDP_ATTACHED)
const (
	XDP_ATTACHED_NONE = iota
	XDP_ATTACHED_DRV
	XDP_ATTACHED_SKB
	XDP_ATTACHED_HW
)

const (
	IFLA_IPTUN_UNSPEC = iota
	IFLA_IPTUN_LINK
	IFLA_IPTUN_LOCAL
	IFLA_IPTUN_REMOTE
	IFLA_IPTUN_TTL
	IFLA_IPTUN_TOS
	IFLA_IPTUN_ENCAP_LIMIT
	IFLA_IPTUN_FLOWINFO
	IFLA_IPTUN_FLAGS
	IFLA_IPTUN_PROTO
	IFLA_IPTUN_PMTUDISC
	IFLA_IPTUN_6RD_PREFIX
	IFLA_IPTUN_6RD_RELAY_PREFIX
	IFLA_IPTUN_6RD_PREFIXLEN
	IFLA_IPTUN_6RD_RELAY_PREFIXLEN
	IFLA_IPTUN_ENCAP_TYPE
	IFLA_IPTUN_ENCAP_FLAGS
	IFLA_IPTUN_ENCAP_SPORT
	IFLA_IPTUN_ENCAP_DPORT
	IFLA_IPTUN_COLLECT_METADATA
	IFLA_IPTUN_MAX = IFLA_IPTUN_COLLECT_METADATA
)

const (
	IFLA_VTI_UNSPEC = iota
	IFLA_VTI_LINK
	IFLA_VTI_IKEY
	IFLA_VTI_OKEY
	IFLA_VTI_LOCAL
	IFLA_VTI_REMOTE
	IFLA_VTI_MAX = IFLA_VTI_REMOTE
)

const (
	IFLA_VRF_UNSPEC = iota
	IFLA_VRF_TABLE
)

const (
	IFLA_BR_UNSPEC = iota
	IFLA_BR_FORWARD_DELAY
	IFLA_BR_HELLO_TIME
	IFLA_BR_MAX_AGE
	IFLA_BR_AGEING_TIME
	IFLA_BR_STP_STATE
	IFLA_BR_PRIORITY
	IFLA_BR_VLAN_FILTERING
	IFLA_BR_VLAN_PROTOCOL
	IFLA_BR_GROUP_FWD_MASK
	IFLA_BR_ROOT_ID
	IFLA_BR_BRIDGE_ID
	IFLA_BR_ROOT_PORT
	IFLA_BR_ROOT_PATH_COST
	IFLA_BR_TOPOLOGY_CHANGE
	IFLA_BR_TOPOLOGY_CHANGE_DETECTED
	IFLA_BR_HELLO_TIMER
	IFLA_BR_TCN_TIMER
	IFLA_BR_TOPOLOGY_CHANGE_TIMER
	IFLA_BR_GC_TIMER
	IFLA_BR_GROUP_ADDR
	IFLA_BR_FDB_FLUSH
	IFLA_BR_MCAST_ROUTER
	IFLA_BR_MCAST_SNOOPING
	IFLA_BR_MCAST_QUERY_USE_IFADDR
	IFLA_BR_MCAST_QUERIER
	IFLA_BR_MCAST_HASH_ELASTICITY
	IFLA_BR_MCAST_HASH_MAX
	IFLA_BR_MCAST_LAST_MEMBER_CNT
	IFLA_BR_MCAST_STARTUP_QUERY_CNT
	IFLA_BR_MCAST_LAST_MEMBER_INTVL
	IFLA_BR_MCAST_MEMBERSHIP_INTVL
	IFLA_BR_MCAST_QUERIER_INTVL
	IFLA_BR_MCAST_QUERY_INTVL
	IFLA_BR_MCAST_QUERY_RESPONSE_INTVL
	IFLA_BR_MCAST_STARTUP_QUERY_INTVL
	IFLA_BR_NF_CALL_IPTABLES
	IFLA_BR_NF_CALL_IP6TABLES
	IFLA_BR_NF_CALL_ARPTABLES
	IFLA_BR_VLAN_DEFAULT_PVID
	IFLA_BR_PAD
	IFLA_BR_VLAN_STATS_ENABLED
	IFLA_BR_MCAST_STATS_ENABLED
	IFLA_BR_MCAST_IGMP_VERSION
	IFLA_BR_MCAST_MLD_VERSION
	IFLA_BR_MAX = IFLA_BR_MCAST_MLD_VERSION
)

const (
	IFLA_GTP_UNSPEC = iota
	IFLA_GTP_FD0
	IFLA_GTP_FD1
	IFLA_GTP_PDP_HASHSIZE
	IFLA_GTP_ROLE
)

const (
	GTP_ROLE_GGSN = iota
	GTP_ROLE_SGSN
)

const (
	IFLA_XFRM_UNSPEC = iota
	IFLA_XFRM_LINK
	IFLA_XFRM_IF_ID

	IFLA_XFRM_MAX = iota - 1
)

const (
	IFLA_TUN_UNSPEC = iota
	IFLA_TUN_OWNER
	IFLA_TUN_GROUP
	IFLA_TUN_TYPE
	IFLA_TUN_PI
	IFLA_TUN_VNET_HDR
	IFLA_TUN_PERSIST
	IFLA_TUN_MULTI_QUEUE
	IFLA_TUN_NUM_QUEUES
	IFLA_TUN_NUM_DISABLED_QUEUES
	IFLA_TUN_MAX = IFLA_TUN_NUM_DISABLED_QUEUES
)

const (
	IFLA_IPOIB_UNSPEC = iota
	IFLA_IPOIB_PKEY
	IFLA_IPOIB_MODE
	IFLA_IPOIB_UMCAST
	IFLA_IPOIB_MAX = IFLA_IPOIB_UMCAST
)

const (
	IFLA_CAN_UNSPEC = iota
	IFLA_CAN_BITTIMING
	IFLA_CAN_BITTIMING_CONST
	IFLA_CAN_CLOCK
	IFLA_CAN_STATE
	IFLA_CAN_CTRLMODE
	IFLA_CAN_RESTART_MS
	IFLA_CAN_RESTART
	IFLA_CAN_BERR_COUNTER
	IFLA_CAN_DATA_BITTIMING
	IFLA_CAN_DATA_BITTIMING_CONST
	IFLA_CAN_TERMINATION
	IFLA_CAN_TERMINATION_CONST
	IFLA_CAN_BITRATE_CONST
	IFLA_CAN_DATA_BITRATE_CONST
	IFLA_CAN_BITRATE_MAX
	IFLA_CAN_MAX = IFLA_CAN_BITRATE_MAX
)

const (
	IFLA_BAREUDP_UNSPEC = iota
	IFLA_BAREUDP_PORT
	IFLA_BAREUDP_ETHERTYPE
	IFLA_BAREUDP_SRCPORT_MIN
	IFLA_BAREUDP_MULTIPROTO_MODE
	IFLA_BAREUDP_MAX = IFLA_BAREUDP_MULTIPROTO_MODE
)
   07070100000C37000081A4000000000000000000000001645E367C00000162000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/nl/lwt_linux.go package nl

const (
	LWT_BPF_PROG_UNSPEC = iota
	LWT_BPF_PROG_FD
	LWT_BPF_PROG_NAME
	__LWT_BPF_PROG_MAX
)

const (
	LWT_BPF_PROG_MAX = __LWT_BPF_PROG_MAX - 1
)

const (
	LWT_BPF_UNSPEC = iota
	LWT_BPF_IN
	LWT_BPF_OUT
	LWT_BPF_XMIT
	LWT_BPF_XMIT_HEADROOM
	__LWT_BPF_MAX
)

const (
	LWT_BPF_MAX = __LWT_BPF_MAX - 1
)

const (
	LWT_BPF_MAX_HEADROOM = 256
)
  07070100000C38000081A4000000000000000000000001645E367C000002B0000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/nl/mpls_linux.go    package nl

import "encoding/binary"

const (
	MPLS_LS_LABEL_SHIFT = 12
	MPLS_LS_S_SHIFT     = 8
)

func EncodeMPLSStack(labels ...int) []byte {
	b := make([]byte, 4*len(labels))
	for idx, label := range labels {
		l := label << MPLS_LS_LABEL_SHIFT
		if idx == len(labels)-1 {
			l |= 1 << MPLS_LS_S_SHIFT
		}
		binary.BigEndian.PutUint32(b[idx*4:], uint32(l))
	}
	return b
}

func DecodeMPLSStack(buf []byte) []int {
	if len(buf)%4 != 0 {
		return nil
	}
	stack := make([]int, 0, len(buf)/4)
	for len(buf) > 0 {
		l := binary.BigEndian.Uint32(buf[:4])
		buf = buf[4:]
		stack = append(stack, int(l)>>MPLS_LS_LABEL_SHIFT)
		if (l>>MPLS_LS_S_SHIFT)&1 > 0 {
			break
		}
	}
	return stack
}
07070100000C39000081A4000000000000000000000001645E367C000054FA000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/nl/nl_linux.go  // Package nl has low level primitives for making Netlink calls.
package nl

import (
	"bytes"
	"encoding/binary"
	"fmt"
	"net"
	"runtime"
	"sync"
	"sync/atomic"
	"syscall"
	"unsafe"

	"github.com/vishvananda/netns"
	"golang.org/x/sys/unix"
)

const (
	// Family type definitions
	FAMILY_ALL  = unix.AF_UNSPEC
	FAMILY_V4   = unix.AF_INET
	FAMILY_V6   = unix.AF_INET6
	FAMILY_MPLS = unix.AF_MPLS
	// Arbitrary set value (greater than default 4k) to allow receiving
	// from kernel more verbose messages e.g. for statistics,
	// tc rules or filters, or other more memory requiring data.
	RECEIVE_BUFFER_SIZE = 65536
	// Kernel netlink pid
	PidKernel     uint32 = 0
	SizeofCnMsgOp        = 0x18
)

// SupportedNlFamilies contains the list of netlink families this netlink package supports
var SupportedNlFamilies = []int{unix.NETLINK_ROUTE, unix.NETLINK_XFRM, unix.NETLINK_NETFILTER}

var nextSeqNr uint32

// Default netlink socket timeout, 60s
var SocketTimeoutTv = unix.Timeval{Sec: 60, Usec: 0}

// ErrorMessageReporting is the default error message reporting configuration for the new netlink sockets
var EnableErrorMessageReporting bool = false

// GetIPFamily returns the family type of a net.IP.
func GetIPFamily(ip net.IP) int {
	if len(ip) <= net.IPv4len {
		return FAMILY_V4
	}
	if ip.To4() != nil {
		return FAMILY_V4
	}
	return FAMILY_V6
}

var nativeEndian binary.ByteOrder

// NativeEndian gets native endianness for the system
func NativeEndian() binary.ByteOrder {
	if nativeEndian == nil {
		var x uint32 = 0x01020304
		if *(*byte)(unsafe.Pointer(&x)) == 0x01 {
			nativeEndian = binary.BigEndian
		} else {
			nativeEndian = binary.LittleEndian
		}
	}
	return nativeEndian
}

// Byte swap a 16 bit value if we aren't big endian
func Swap16(i uint16) uint16 {
	if NativeEndian() == binary.BigEndian {
		return i
	}
	return (i&0xff00)>>8 | (i&0xff)<<8
}

// Byte swap a 32 bit value if aren't big endian
func Swap32(i uint32) uint32 {
	if NativeEndian() == binary.BigEndian {
		return i
	}
	return (i&0xff000000)>>24 | (i&0xff0000)>>8 | (i&0xff00)<<8 | (i&0xff)<<24
}

const (
	NLMSGERR_ATTR_UNUSED = 0
	NLMSGERR_ATTR_MSG    = 1
	NLMSGERR_ATTR_OFFS   = 2
	NLMSGERR_ATTR_COOKIE = 3
	NLMSGERR_ATTR_POLICY = 4
)

type NetlinkRequestData interface {
	Len() int
	Serialize() []byte
}

const (
	PROC_CN_MCAST_LISTEN = 1
	PROC_CN_MCAST_IGNORE
)

type CbID struct {
	Idx uint32
	Val uint32
}

type CnMsg struct {
	ID     CbID
	Seq    uint32
	Ack    uint32
	Length uint16
	Flags  uint16
}

type CnMsgOp struct {
	CnMsg
	// here we differ from the C header
	Op uint32
}

func NewCnMsg(idx, val, op uint32) *CnMsgOp {
	var cm CnMsgOp

	cm.ID.Idx = idx
	cm.ID.Val = val

	cm.Ack = 0
	cm.Seq = 1
	cm.Length = uint16(binary.Size(op))
	cm.Op = op

	return &cm
}

func (msg *CnMsgOp) Serialize() []byte {
	return (*(*[SizeofCnMsgOp]byte)(unsafe.Pointer(msg)))[:]
}

func DeserializeCnMsgOp(b []byte) *CnMsgOp {
	return (*CnMsgOp)(unsafe.Pointer(&b[0:SizeofCnMsgOp][0]))
}

func (msg *CnMsgOp) Len() int {
	return SizeofCnMsgOp
}

// IfInfomsg is related to links, but it is used for list requests as well
type IfInfomsg struct {
	unix.IfInfomsg
}

// Create an IfInfomsg with family specified
func NewIfInfomsg(family int) *IfInfomsg {
	return &IfInfomsg{
		IfInfomsg: unix.IfInfomsg{
			Family: uint8(family),
		},
	}
}

func DeserializeIfInfomsg(b []byte) *IfInfomsg {
	return (*IfInfomsg)(unsafe.Pointer(&b[0:unix.SizeofIfInfomsg][0]))
}

func (msg *IfInfomsg) Serialize() []byte {
	return (*(*[unix.SizeofIfInfomsg]byte)(unsafe.Pointer(msg)))[:]
}

func (msg *IfInfomsg) Len() int {
	return unix.SizeofIfInfomsg
}

func (msg *IfInfomsg) EncapType() string {
	switch msg.Type {
	case 0:
		return "generic"
	case unix.ARPHRD_ETHER:
		return "ether"
	case unix.ARPHRD_EETHER:
		return "eether"
	case unix.ARPHRD_AX25:
		return "ax25"
	case unix.ARPHRD_PRONET:
		return "pronet"
	case unix.ARPHRD_CHAOS:
		return "chaos"
	case unix.ARPHRD_IEEE802:
		return "ieee802"
	case unix.ARPHRD_ARCNET:
		return "arcnet"
	case unix.ARPHRD_APPLETLK:
		return "atalk"
	case unix.ARPHRD_DLCI:
		return "dlci"
	case unix.ARPHRD_ATM:
		return "atm"
	case unix.ARPHRD_METRICOM:
		return "metricom"
	case unix.ARPHRD_IEEE1394:
		return "ieee1394"
	case unix.ARPHRD_INFINIBAND:
		return "infiniband"
	case unix.ARPHRD_SLIP:
		return "slip"
	case unix.ARPHRD_CSLIP:
		return "cslip"
	case unix.ARPHRD_SLIP6:
		return "slip6"
	case unix.ARPHRD_CSLIP6:
		return "cslip6"
	case unix.ARPHRD_RSRVD:
		return "rsrvd"
	case unix.ARPHRD_ADAPT:
		return "adapt"
	case unix.ARPHRD_ROSE:
		return "rose"
	case unix.ARPHRD_X25:
		return "x25"
	case unix.ARPHRD_HWX25:
		return "hwx25"
	case unix.ARPHRD_PPP:
		return "ppp"
	case unix.ARPHRD_HDLC:
		return "hdlc"
	case unix.ARPHRD_LAPB:
		return "lapb"
	case unix.ARPHRD_DDCMP:
		return "ddcmp"
	case unix.ARPHRD_RAWHDLC:
		return "rawhdlc"
	case unix.ARPHRD_TUNNEL:
		return "ipip"
	case unix.ARPHRD_TUNNEL6:
		return "tunnel6"
	case unix.ARPHRD_FRAD:
		return "frad"
	case unix.ARPHRD_SKIP:
		return "skip"
	case unix.ARPHRD_LOOPBACK:
		return "loopback"
	case unix.ARPHRD_LOCALTLK:
		return "ltalk"
	case unix.ARPHRD_FDDI:
		return "fddi"
	case unix.ARPHRD_BIF:
		return "bif"
	case unix.ARPHRD_SIT:
		return "sit"
	case unix.ARPHRD_IPDDP:
		return "ip/ddp"
	case unix.ARPHRD_IPGRE:
		return "gre"
	case unix.ARPHRD_PIMREG:
		return "pimreg"
	case unix.ARPHRD_HIPPI:
		return "hippi"
	case unix.ARPHRD_ASH:
		return "ash"
	case unix.ARPHRD_ECONET:
		return "econet"
	case unix.ARPHRD_IRDA:
		return "irda"
	case unix.ARPHRD_FCPP:
		return "fcpp"
	case unix.ARPHRD_FCAL:
		return "fcal"
	case unix.ARPHRD_FCPL:
		return "fcpl"
	case unix.ARPHRD_FCFABRIC:
		return "fcfb0"
	case unix.ARPHRD_FCFABRIC + 1:
		return "fcfb1"
	case unix.ARPHRD_FCFABRIC + 2:
		return "fcfb2"
	case unix.ARPHRD_FCFABRIC + 3:
		return "fcfb3"
	case unix.ARPHRD_FCFABRIC + 4:
		return "fcfb4"
	case unix.ARPHRD_FCFABRIC + 5:
		return "fcfb5"
	case unix.ARPHRD_FCFABRIC + 6:
		return "fcfb6"
	case unix.ARPHRD_FCFABRIC + 7:
		return "fcfb7"
	case unix.ARPHRD_FCFABRIC + 8:
		return "fcfb8"
	case unix.ARPHRD_FCFABRIC + 9:
		return "fcfb9"
	case unix.ARPHRD_FCFABRIC + 10:
		return "fcfb10"
	case unix.ARPHRD_FCFABRIC + 11:
		return "fcfb11"
	case unix.ARPHRD_FCFABRIC + 12:
		return "fcfb12"
	case unix.ARPHRD_IEEE802_TR:
		return "tr"
	case unix.ARPHRD_IEEE80211:
		return "ieee802.11"
	case unix.ARPHRD_IEEE80211_PRISM:
		return "ieee802.11/prism"
	case unix.ARPHRD_IEEE80211_RADIOTAP:
		return "ieee802.11/radiotap"
	case unix.ARPHRD_IEEE802154:
		return "ieee802.15.4"

	case 65534:
		return "none"
	case 65535:
		return "void"
	}
	return fmt.Sprintf("unknown%d", msg.Type)
}

// Round the length of a netlink message up to align it properly.
// Taken from syscall/netlink_linux.go by The Go Authors under BSD-style license.
func nlmAlignOf(msglen int) int {
	return (msglen + syscall.NLMSG_ALIGNTO - 1) & ^(syscall.NLMSG_ALIGNTO - 1)
}

func rtaAlignOf(attrlen int) int {
	return (attrlen + unix.RTA_ALIGNTO - 1) & ^(unix.RTA_ALIGNTO - 1)
}

func NewIfInfomsgChild(parent *RtAttr, family int) *IfInfomsg {
	msg := NewIfInfomsg(family)
	parent.children = append(parent.children, msg)
	return msg
}

type Uint32Attribute struct {
	Type  uint16
	Value uint32
}

func (a *Uint32Attribute) Serialize() []byte {
	native := NativeEndian()
	buf := make([]byte, rtaAlignOf(8))
	native.PutUint16(buf[0:2], 8)
	native.PutUint16(buf[2:4], a.Type)

	if a.Type&NLA_F_NET_BYTEORDER != 0 {
		binary.BigEndian.PutUint32(buf[4:], a.Value)
	} else {
		native.PutUint32(buf[4:], a.Value)
	}
	return buf
}

func (a *Uint32Attribute) Len() int {
	return 8
}

// Extend RtAttr to handle data and children
type RtAttr struct {
	unix.RtAttr
	Data     []byte
	children []NetlinkRequestData
}

// Create a new Extended RtAttr object
func NewRtAttr(attrType int, data []byte) *RtAttr {
	return &RtAttr{
		RtAttr: unix.RtAttr{
			Type: uint16(attrType),
		},
		children: []NetlinkRequestData{},
		Data:     data,
	}
}

// NewRtAttrChild adds an RtAttr as a child to the parent and returns the new attribute
//
// Deprecated: Use AddRtAttr() on the parent object
func NewRtAttrChild(parent *RtAttr, attrType int, data []byte) *RtAttr {
	return parent.AddRtAttr(attrType, data)
}

// AddRtAttr adds an RtAttr as a child and returns the new attribute
func (a *RtAttr) AddRtAttr(attrType int, data []byte) *RtAttr {
	attr := NewRtAttr(attrType, data)
	a.children = append(a.children, attr)
	return attr
}

// AddChild adds an existing NetlinkRequestData as a child.
func (a *RtAttr) AddChild(attr NetlinkRequestData) {
	a.children = append(a.children, attr)
}

func (a *RtAttr) Len() int {
	if len(a.children) == 0 {
		return (unix.SizeofRtAttr + len(a.Data))
	}

	l := 0
	for _, child := range a.children {
		l += rtaAlignOf(child.Len())
	}
	l += unix.SizeofRtAttr
	return rtaAlignOf(l + len(a.Data))
}

// Serialize the RtAttr into a byte array
// This can't just unsafe.cast because it must iterate through children.
func (a *RtAttr) Serialize() []byte {
	native := NativeEndian()

	length := a.Len()
	buf := make([]byte, rtaAlignOf(length))

	next := 4
	if a.Data != nil {
		copy(buf[next:], a.Data)
		next += rtaAlignOf(len(a.Data))
	}
	if len(a.children) > 0 {
		for _, child := range a.children {
			childBuf := child.Serialize()
			copy(buf[next:], childBuf)
			next += rtaAlignOf(len(childBuf))
		}
	}

	if l := uint16(length); l != 0 {
		native.PutUint16(buf[0:2], l)
	}
	native.PutUint16(buf[2:4], a.Type)
	return buf
}

type NetlinkRequest struct {
	unix.NlMsghdr
	Data    []NetlinkRequestData
	RawData []byte
	Sockets map[int]*SocketHandle
}

// Serialize the Netlink Request into a byte array
func (req *NetlinkRequest) Serialize() []byte {
	length := unix.SizeofNlMsghdr
	dataBytes := make([][]byte, len(req.Data))
	for i, data := range req.Data {
		dataBytes[i] = data.Serialize()
		length = length + len(dataBytes[i])
	}
	length += len(req.RawData)

	req.Len = uint32(length)
	b := make([]byte, length)
	hdr := (*(*[unix.SizeofNlMsghdr]byte)(unsafe.Pointer(req)))[:]
	next := unix.SizeofNlMsghdr
	copy(b[0:next], hdr)
	for _, data := range dataBytes {
		for _, dataByte := range data {
			b[next] = dataByte
			next = next + 1
		}
	}
	// Add the raw data if any
	if len(req.RawData) > 0 {
		copy(b[next:length], req.RawData)
	}
	return b
}

func (req *NetlinkRequest) AddData(data NetlinkRequestData) {
	req.Data = append(req.Data, data)
}

// AddRawData adds raw bytes to the end of the NetlinkRequest object during serialization
func (req *NetlinkRequest) AddRawData(data []byte) {
	req.RawData = append(req.RawData, data...)
}

// Execute the request against a the given sockType.
// Returns a list of netlink messages in serialized format, optionally filtered
// by resType.
func (req *NetlinkRequest) Execute(sockType int, resType uint16) ([][]byte, error) {
	var (
		s   *NetlinkSocket
		err error
	)

	if req.Sockets != nil {
		if sh, ok := req.Sockets[sockType]; ok {
			s = sh.Socket
			req.Seq = atomic.AddUint32(&sh.Seq, 1)
		}
	}
	sharedSocket := s != nil

	if s == nil {
		s, err = getNetlinkSocket(sockType)
		if err != nil {
			return nil, err
		}

		if err := s.SetSendTimeout(&SocketTimeoutTv); err != nil {
			return nil, err
		}
		if err := s.SetReceiveTimeout(&SocketTimeoutTv); err != nil {
			return nil, err
		}
		if EnableErrorMessageReporting {
			if err := s.SetExtAck(true); err != nil {
				return nil, err
			}
		}

		defer s.Close()
	} else {
		s.Lock()
		defer s.Unlock()
	}

	if err := s.Send(req); err != nil {
		return nil, err
	}

	pid, err := s.GetPid()
	if err != nil {
		return nil, err
	}

	var res [][]byte

done:
	for {
		msgs, from, err := s.Receive()
		if err != nil {
			return nil, err
		}
		if from.Pid != PidKernel {
			return nil, fmt.Errorf("Wrong sender portid %d, expected %d", from.Pid, PidKernel)
		}
		for _, m := range msgs {
			if m.Header.Seq != req.Seq {
				if sharedSocket {
					continue
				}
				return nil, fmt.Errorf("Wrong Seq nr %d, expected %d", m.Header.Seq, req.Seq)
			}
			if m.Header.Pid != pid {
				continue
			}
			if m.Header.Type == unix.NLMSG_DONE || m.Header.Type == unix.NLMSG_ERROR {
				native := NativeEndian()
				errno := int32(native.Uint32(m.Data[0:4]))
				if errno == 0 {
					break done
				}
				var err error
				err = syscall.Errno(-errno)

				unreadData := m.Data[4:]
				if m.Header.Flags|unix.NLM_F_ACK_TLVS != 0 && len(unreadData) > syscall.SizeofNlMsghdr {
					// Skip the echoed request message.
					echoReqH := (*syscall.NlMsghdr)(unsafe.Pointer(&unreadData[0]))
					unreadData = unreadData[nlmAlignOf(int(echoReqH.Len)):]

					// Annotate `err` using nlmsgerr attributes.
					for len(unreadData) >= syscall.SizeofRtAttr {
						attr := (*syscall.RtAttr)(unsafe.Pointer(&unreadData[0]))
						attrData := unreadData[syscall.SizeofRtAttr:attr.Len]

						switch attr.Type {
						case NLMSGERR_ATTR_MSG:
							err = fmt.Errorf("%w: %s", err, string(attrData))

						default:
							// TODO: handle other NLMSGERR_ATTR types
						}

						unreadData = unreadData[rtaAlignOf(int(attr.Len)):]
					}
				}

				return nil, err
			}
			if resType != 0 && m.Header.Type != resType {
				continue
			}
			res = append(res, m.Data)
			if m.Header.Flags&unix.NLM_F_MULTI == 0 {
				break done
			}
		}
	}
	return res, nil
}

// Create a new netlink request from proto and flags
// Note the Len value will be inaccurate once data is added until
// the message is serialized
func NewNetlinkRequest(proto, flags int) *NetlinkRequest {
	return &NetlinkRequest{
		NlMsghdr: unix.NlMsghdr{
			Len:   uint32(unix.SizeofNlMsghdr),
			Type:  uint16(proto),
			Flags: unix.NLM_F_REQUEST | uint16(flags),
			Seq:   atomic.AddUint32(&nextSeqNr, 1),
		},
	}
}

type NetlinkSocket struct {
	fd  int32
	lsa unix.SockaddrNetlink
	sync.Mutex
}

func getNetlinkSocket(protocol int) (*NetlinkSocket, error) {
	fd, err := unix.Socket(unix.AF_NETLINK, unix.SOCK_RAW|unix.SOCK_CLOEXEC, protocol)
	if err != nil {
		return nil, err
	}
	s := &NetlinkSocket{
		fd: int32(fd),
	}
	s.lsa.Family = unix.AF_NETLINK
	if err := unix.Bind(fd, &s.lsa); err != nil {
		unix.Close(fd)
		return nil, err
	}

	return s, nil
}

// GetNetlinkSocketAt opens a netlink socket in the network namespace newNs
// and positions the thread back into the network namespace specified by curNs,
// when done. If curNs is close, the function derives the current namespace and
// moves back into it when done. If newNs is close, the socket will be opened
// in the current network namespace.
func GetNetlinkSocketAt(newNs, curNs netns.NsHandle, protocol int) (*NetlinkSocket, error) {
	c, err := executeInNetns(newNs, curNs)
	if err != nil {
		return nil, err
	}
	defer c()
	return getNetlinkSocket(protocol)
}

// executeInNetns sets execution of the code following this call to the
// network namespace newNs, then moves the thread back to curNs if open,
// otherwise to the current netns at the time the function was invoked
// In case of success, the caller is expected to execute the returned function
// at the end of the code that needs to be executed in the network namespace.
// Example:
// func jobAt(...) error {
//      d, err := executeInNetns(...)
//      if err != nil { return err}
//      defer d()
//      < code which needs to be executed in specific netns>
//  }
// TODO: his function probably belongs to netns pkg.
func executeInNetns(newNs, curNs netns.NsHandle) (func(), error) {
	var (
		err       error
		moveBack  func(netns.NsHandle) error
		closeNs   func() error
		unlockThd func()
	)
	restore := func() {
		// order matters
		if moveBack != nil {
			moveBack(curNs)
		}
		if closeNs != nil {
			closeNs()
		}
		if unlockThd != nil {
			unlockThd()
		}
	}
	if newNs.IsOpen() {
		runtime.LockOSThread()
		unlockThd = runtime.UnlockOSThread
		if !curNs.IsOpen() {
			if curNs, err = netns.Get(); err != nil {
				restore()
				return nil, fmt.Errorf("could not get current namespace while creating netlink socket: %v", err)
			}
			closeNs = curNs.Close
		}
		if err := netns.Set(newNs); err != nil {
			restore()
			return nil, fmt.Errorf("failed to set into network namespace %d while creating netlink socket: %v", newNs, err)
		}
		moveBack = netns.Set
	}
	return restore, nil
}

// Create a netlink socket with a given protocol (e.g. NETLINK_ROUTE)
// and subscribe it to multicast groups passed in variable argument list.
// Returns the netlink socket on which Receive() method can be called
// to retrieve the messages from the kernel.
func Subscribe(protocol int, groups ...uint) (*NetlinkSocket, error) {
	fd, err := unix.Socket(unix.AF_NETLINK, unix.SOCK_RAW, protocol)
	if err != nil {
		return nil, err
	}
	s := &NetlinkSocket{
		fd: int32(fd),
	}
	s.lsa.Family = unix.AF_NETLINK

	for _, g := range groups {
		s.lsa.Groups |= (1 << (g - 1))
	}

	if err := unix.Bind(fd, &s.lsa); err != nil {
		unix.Close(fd)
		return nil, err
	}

	return s, nil
}

// SubscribeAt works like Subscribe plus let's the caller choose the network
// namespace in which the socket would be opened (newNs). Then control goes back
// to curNs if open, otherwise to the netns at the time this function was called.
func SubscribeAt(newNs, curNs netns.NsHandle, protocol int, groups ...uint) (*NetlinkSocket, error) {
	c, err := executeInNetns(newNs, curNs)
	if err != nil {
		return nil, err
	}
	defer c()
	return Subscribe(protocol, groups...)
}

func (s *NetlinkSocket) Close() {
	fd := int(atomic.SwapInt32(&s.fd, -1))
	unix.Close(fd)
}

func (s *NetlinkSocket) GetFd() int {
	return int(atomic.LoadInt32(&s.fd))
}

func (s *NetlinkSocket) Send(request *NetlinkRequest) error {
	fd := int(atomic.LoadInt32(&s.fd))
	if fd < 0 {
		return fmt.Errorf("Send called on a closed socket")
	}
	if err := unix.Sendto(fd, request.Serialize(), 0, &s.lsa); err != nil {
		return err
	}
	return nil
}

func (s *NetlinkSocket) Receive() ([]syscall.NetlinkMessage, *unix.SockaddrNetlink, error) {
	fd := int(atomic.LoadInt32(&s.fd))
	if fd < 0 {
		return nil, nil, fmt.Errorf("Receive called on a closed socket")
	}
	var fromAddr *unix.SockaddrNetlink
	var rb [RECEIVE_BUFFER_SIZE]byte
	nr, from, err := unix.Recvfrom(fd, rb[:], 0)
	if err != nil {
		return nil, nil, err
	}
	fromAddr, ok := from.(*unix.SockaddrNetlink)
	if !ok {
		return nil, nil, fmt.Errorf("Error converting to netlink sockaddr")
	}
	if nr < unix.NLMSG_HDRLEN {
		return nil, nil, fmt.Errorf("Got short response from netlink")
	}
	rb2 := make([]byte, nr)
	copy(rb2, rb[:nr])
	nl, err := syscall.ParseNetlinkMessage(rb2)
	if err != nil {
		return nil, nil, err
	}
	return nl, fromAddr, nil
}

// SetSendTimeout allows to set a send timeout on the socket
func (s *NetlinkSocket) SetSendTimeout(timeout *unix.Timeval) error {
	// Set a send timeout of SOCKET_SEND_TIMEOUT, this will allow the Send to periodically unblock and avoid that a routine
	// remains stuck on a send on a closed fd
	return unix.SetsockoptTimeval(int(s.fd), unix.SOL_SOCKET, unix.SO_SNDTIMEO, timeout)
}

// SetReceiveTimeout allows to set a receive timeout on the socket
func (s *NetlinkSocket) SetReceiveTimeout(timeout *unix.Timeval) error {
	// Set a read timeout of SOCKET_READ_TIMEOUT, this will allow the Read to periodically unblock and avoid that a routine
	// remains stuck on a recvmsg on a closed fd
	return unix.SetsockoptTimeval(int(s.fd), unix.SOL_SOCKET, unix.SO_RCVTIMEO, timeout)
}

// SetExtAck requests error messages to be reported on the socket
func (s *NetlinkSocket) SetExtAck(enable bool) error {
	var enableN int
	if enable {
		enableN = 1
	}

	return unix.SetsockoptInt(int(s.fd), unix.SOL_NETLINK, unix.NETLINK_EXT_ACK, enableN)
}

func (s *NetlinkSocket) GetPid() (uint32, error) {
	fd := int(atomic.LoadInt32(&s.fd))
	lsa, err := unix.Getsockname(fd)
	if err != nil {
		return 0, err
	}
	switch v := lsa.(type) {
	case *unix.SockaddrNetlink:
		return v.Pid, nil
	}
	return 0, fmt.Errorf("Wrong socket type")
}

func ZeroTerminated(s string) []byte {
	bytes := make([]byte, len(s)+1)
	for i := 0; i < len(s); i++ {
		bytes[i] = s[i]
	}
	bytes[len(s)] = 0
	return bytes
}

func NonZeroTerminated(s string) []byte {
	bytes := make([]byte, len(s))
	for i := 0; i < len(s); i++ {
		bytes[i] = s[i]
	}
	return bytes
}

func BytesToString(b []byte) string {
	n := bytes.Index(b, []byte{0})
	return string(b[:n])
}

func Uint8Attr(v uint8) []byte {
	return []byte{byte(v)}
}

func Uint16Attr(v uint16) []byte {
	native := NativeEndian()
	bytes := make([]byte, 2)
	native.PutUint16(bytes, v)
	return bytes
}

func Uint32Attr(v uint32) []byte {
	native := NativeEndian()
	bytes := make([]byte, 4)
	native.PutUint32(bytes, v)
	return bytes
}

func Uint64Attr(v uint64) []byte {
	native := NativeEndian()
	bytes := make([]byte, 8)
	native.PutUint64(bytes, v)
	return bytes
}

func ParseRouteAttr(b []byte) ([]syscall.NetlinkRouteAttr, error) {
	var attrs []syscall.NetlinkRouteAttr
	for len(b) >= unix.SizeofRtAttr {
		a, vbuf, alen, err := netlinkRouteAttrAndValue(b)
		if err != nil {
			return nil, err
		}
		ra := syscall.NetlinkRouteAttr{Attr: syscall.RtAttr(*a), Value: vbuf[:int(a.Len)-unix.SizeofRtAttr]}
		attrs = append(attrs, ra)
		b = b[alen:]
	}
	return attrs, nil
}

func netlinkRouteAttrAndValue(b []byte) (*unix.RtAttr, []byte, int, error) {
	a := (*unix.RtAttr)(unsafe.Pointer(&b[0]))
	if int(a.Len) < unix.SizeofRtAttr || int(a.Len) > len(b) {
		return nil, nil, 0, unix.EINVAL
	}
	return a, b[unix.SizeofRtAttr:], rtaAlignOf(int(a.Len)), nil
}

// SocketHandle contains the netlink socket and the associated
// sequence counter for a specific netlink family
type SocketHandle struct {
	Seq    uint32
	Socket *NetlinkSocket
}

// Close closes the netlink socket
func (sh *SocketHandle) Close() {
	if sh.Socket != nil {
		sh.Socket.Close()
	}
}
  07070100000C3A000081A4000000000000000000000001645E367C00000090000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/nl/nl_unspecified.go    // +build !linux

package nl

import "encoding/binary"

var SupportedNlFamilies = []int{}

func NativeEndian() binary.ByteOrder {
	return nil
}
07070100000C3B000081A4000000000000000000000001645E367C000006BD000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/nl/parse_attr_linux.go  package nl

import (
	"encoding/binary"
	"fmt"
	"log"
)

type Attribute struct {
	Type  uint16
	Value []byte
}

func ParseAttributes(data []byte) <-chan Attribute {
	native := NativeEndian()
	result := make(chan Attribute)

	go func() {
		i := 0
		for i+4 < len(data) {
			length := int(native.Uint16(data[i : i+2]))
			attrType := native.Uint16(data[i+2 : i+4])

			if length < 4 {
				log.Printf("attribute 0x%02x has invalid length of %d bytes", attrType, length)
				break
			}

			if len(data) < i+length {
				log.Printf("attribute 0x%02x of length %d is truncated, only %d bytes remaining", attrType, length, len(data)-i)
				break
			}

			result <- Attribute{
				Type:  attrType,
				Value: data[i+4 : i+length],
			}
			i += rtaAlignOf(length)
		}
		close(result)
	}()

	return result
}

func PrintAttributes(data []byte) {
	printAttributes(data, 0)
}

func printAttributes(data []byte, level int) {
	for attr := range ParseAttributes(data) {
		for i := 0; i < level; i++ {
			print("> ")
		}
		nested := attr.Type&NLA_F_NESTED != 0
		fmt.Printf("type=%d nested=%v len=%v %v\n", attr.Type&NLA_TYPE_MASK, nested, len(attr.Value), attr.Value)
		if nested {
			printAttributes(attr.Value, level+1)
		}
	}
}

// Uint32 returns the uint32 value respecting the NET_BYTEORDER flag
func (attr *Attribute) Uint32() uint32 {
	if attr.Type&NLA_F_NET_BYTEORDER != 0 {
		return binary.BigEndian.Uint32(attr.Value)
	} else {
		return NativeEndian().Uint32(attr.Value)
	}
}

// Uint64 returns the uint64 value respecting the NET_BYTEORDER flag
func (attr *Attribute) Uint64() uint64 {
	if attr.Type&NLA_F_NET_BYTEORDER != 0 {
		return binary.BigEndian.Uint64(attr.Value)
	} else {
		return NativeEndian().Uint64(attr.Value)
	}
}
   07070100000C3C000081A4000000000000000000000001645E367C000003B4000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/nl/rdma_link_linux.go   package nl

const (
	RDMA_NL_GET_CLIENT_SHIFT = 10
)

const (
	RDMA_NL_NLDEV = 5
)

const (
	RDMA_NLDEV_CMD_GET     = 1
	RDMA_NLDEV_CMD_SET     = 2
	RDMA_NLDEV_CMD_NEWLINK = 3
	RDMA_NLDEV_CMD_DELLINK = 4
	RDMA_NLDEV_CMD_SYS_GET = 6
	RDMA_NLDEV_CMD_SYS_SET = 7
)

const (
	RDMA_NLDEV_ATTR_DEV_INDEX       = 1
	RDMA_NLDEV_ATTR_DEV_NAME        = 2
	RDMA_NLDEV_ATTR_PORT_INDEX      = 3
	RDMA_NLDEV_ATTR_CAP_FLAGS       = 4
	RDMA_NLDEV_ATTR_FW_VERSION      = 5
	RDMA_NLDEV_ATTR_NODE_GUID       = 6
	RDMA_NLDEV_ATTR_SYS_IMAGE_GUID  = 7
	RDMA_NLDEV_ATTR_SUBNET_PREFIX   = 8
	RDMA_NLDEV_ATTR_LID             = 9
	RDMA_NLDEV_ATTR_SM_LID          = 10
	RDMA_NLDEV_ATTR_LMC             = 11
	RDMA_NLDEV_ATTR_PORT_STATE      = 12
	RDMA_NLDEV_ATTR_PORT_PHYS_STATE = 13
	RDMA_NLDEV_ATTR_DEV_NODE_TYPE   = 14
	RDMA_NLDEV_ATTR_NDEV_NAME       = 51
	RDMA_NLDEV_ATTR_LINK_TYPE       = 65
	RDMA_NLDEV_SYS_ATTR_NETNS_MODE  = 66
	RDMA_NLDEV_NET_NS_FD            = 68
)
07070100000C3D000081A4000000000000000000000001645E367C000007D4000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/nl/route_linux.go   package nl

import (
	"unsafe"

	"golang.org/x/sys/unix"
)

type RtMsg struct {
	unix.RtMsg
}

func NewRtMsg() *RtMsg {
	return &RtMsg{
		RtMsg: unix.RtMsg{
			Table:    unix.RT_TABLE_MAIN,
			Scope:    unix.RT_SCOPE_UNIVERSE,
			Protocol: unix.RTPROT_BOOT,
			Type:     unix.RTN_UNICAST,
		},
	}
}

func NewRtDelMsg() *RtMsg {
	return &RtMsg{
		RtMsg: unix.RtMsg{
			Table: unix.RT_TABLE_MAIN,
			Scope: unix.RT_SCOPE_NOWHERE,
		},
	}
}

func (msg *RtMsg) Len() int {
	return unix.SizeofRtMsg
}

func DeserializeRtMsg(b []byte) *RtMsg {
	return (*RtMsg)(unsafe.Pointer(&b[0:unix.SizeofRtMsg][0]))
}

func (msg *RtMsg) Serialize() []byte {
	return (*(*[unix.SizeofRtMsg]byte)(unsafe.Pointer(msg)))[:]
}

type RtNexthop struct {
	unix.RtNexthop
	Children []NetlinkRequestData
}

func DeserializeRtNexthop(b []byte) *RtNexthop {
	return (*RtNexthop)(unsafe.Pointer(&b[0:unix.SizeofRtNexthop][0]))
}

func (msg *RtNexthop) Len() int {
	if len(msg.Children) == 0 {
		return unix.SizeofRtNexthop
	}

	l := 0
	for _, child := range msg.Children {
		l += rtaAlignOf(child.Len())
	}
	l += unix.SizeofRtNexthop
	return rtaAlignOf(l)
}

func (msg *RtNexthop) Serialize() []byte {
	length := msg.Len()
	msg.RtNexthop.Len = uint16(length)
	buf := make([]byte, length)
	copy(buf, (*(*[unix.SizeofRtNexthop]byte)(unsafe.Pointer(msg)))[:])
	next := rtaAlignOf(unix.SizeofRtNexthop)
	if len(msg.Children) > 0 {
		for _, child := range msg.Children {
			childBuf := child.Serialize()
			copy(buf[next:], childBuf)
			next += rtaAlignOf(len(childBuf))
		}
	}
	return buf
}

type RtGenMsg struct {
	unix.RtGenmsg
}

func NewRtGenMsg() *RtGenMsg {
	return &RtGenMsg{
		RtGenmsg: unix.RtGenmsg{
			Family: unix.AF_UNSPEC,
		},
	}
}

func (msg *RtGenMsg) Len() int {
	return rtaAlignOf(unix.SizeofRtGenmsg)
}

func DeserializeRtGenMsg(b []byte) *RtGenMsg {
	return &RtGenMsg{RtGenmsg: unix.RtGenmsg{Family: b[0]}}
}

func (msg *RtGenMsg) Serialize() []byte {
	out := make([]byte, msg.Len())
	out[0] = msg.Family
	return out
}
07070100000C3E000081A4000000000000000000000001645E367C00001011000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/nl/seg6_linux.go    package nl

import (
	"errors"
	"fmt"
	"net"
)

type IPv6SrHdr struct {
	nextHdr      uint8
	hdrLen       uint8
	routingType  uint8
	segmentsLeft uint8
	firstSegment uint8
	flags        uint8
	reserved     uint16

	Segments []net.IP
}

func (s1 *IPv6SrHdr) Equal(s2 IPv6SrHdr) bool {
	if len(s1.Segments) != len(s2.Segments) {
		return false
	}
	for i := range s1.Segments {
		if !s1.Segments[i].Equal(s2.Segments[i]) {
			return false
		}
	}
	return s1.nextHdr == s2.nextHdr &&
		s1.hdrLen == s2.hdrLen &&
		s1.routingType == s2.routingType &&
		s1.segmentsLeft == s2.segmentsLeft &&
		s1.firstSegment == s2.firstSegment &&
		s1.flags == s2.flags
	// reserved doesn't need to be identical.
}

// seg6 encap mode
const (
	SEG6_IPTUN_MODE_INLINE = iota
	SEG6_IPTUN_MODE_ENCAP
)

// number of nested RTATTR
// from include/uapi/linux/seg6_iptunnel.h
const (
	SEG6_IPTUNNEL_UNSPEC = iota
	SEG6_IPTUNNEL_SRH
	__SEG6_IPTUNNEL_MAX
)
const (
	SEG6_IPTUNNEL_MAX = __SEG6_IPTUNNEL_MAX - 1
)

func EncodeSEG6Encap(mode int, segments []net.IP) ([]byte, error) {
	nsegs := len(segments) // nsegs: number of segments
	if nsegs == 0 {
		return nil, errors.New("EncodeSEG6Encap: No Segment in srh")
	}
	b := make([]byte, 12, 12+len(segments)*16)
	native := NativeEndian()
	native.PutUint32(b, uint32(mode))
	b[4] = 0                      // srh.nextHdr (0 when calling netlink)
	b[5] = uint8(16 * nsegs >> 3) // srh.hdrLen (in 8-octets unit)
	b[6] = IPV6_SRCRT_TYPE_4      // srh.routingType (assigned by IANA)
	b[7] = uint8(nsegs - 1)       // srh.segmentsLeft
	b[8] = uint8(nsegs - 1)       // srh.firstSegment
	b[9] = 0                      // srh.flags (SR6_FLAG1_HMAC for srh_hmac)
	// srh.reserved: Defined as "Tag" in draft-ietf-6man-segment-routing-header-07
	native.PutUint16(b[10:], 0) // srh.reserved
	for _, netIP := range segments {
		b = append(b, netIP...) // srh.Segments
	}
	return b, nil
}

func DecodeSEG6Encap(buf []byte) (int, []net.IP, error) {
	native := NativeEndian()
	mode := int(native.Uint32(buf))
	srh := IPv6SrHdr{
		nextHdr:      buf[4],
		hdrLen:       buf[5],
		routingType:  buf[6],
		segmentsLeft: buf[7],
		firstSegment: buf[8],
		flags:        buf[9],
		reserved:     native.Uint16(buf[10:12]),
	}
	buf = buf[12:]
	if len(buf)%16 != 0 {
		err := fmt.Errorf("DecodeSEG6Encap: error parsing Segment List (buf len: %d)", len(buf))
		return mode, nil, err
	}
	for len(buf) > 0 {
		srh.Segments = append(srh.Segments, net.IP(buf[:16]))
		buf = buf[16:]
	}
	return mode, srh.Segments, nil
}

func DecodeSEG6Srh(buf []byte) ([]net.IP, error) {
	native := NativeEndian()
	srh := IPv6SrHdr{
		nextHdr:      buf[0],
		hdrLen:       buf[1],
		routingType:  buf[2],
		segmentsLeft: buf[3],
		firstSegment: buf[4],
		flags:        buf[5],
		reserved:     native.Uint16(buf[6:8]),
	}
	buf = buf[8:]
	if len(buf)%16 != 0 {
		err := fmt.Errorf("DecodeSEG6Srh: error parsing Segment List (buf len: %d)", len(buf))
		return nil, err
	}
	for len(buf) > 0 {
		srh.Segments = append(srh.Segments, net.IP(buf[:16]))
		buf = buf[16:]
	}
	return srh.Segments, nil
}
func EncodeSEG6Srh(segments []net.IP) ([]byte, error) {
	nsegs := len(segments) // nsegs: number of segments
	if nsegs == 0 {
		return nil, errors.New("EncodeSEG6Srh: No Segments")
	}
	b := make([]byte, 8, 8+len(segments)*16)
	native := NativeEndian()
	b[0] = 0                      // srh.nextHdr (0 when calling netlink)
	b[1] = uint8(16 * nsegs >> 3) // srh.hdrLen (in 8-octets unit)
	b[2] = IPV6_SRCRT_TYPE_4      // srh.routingType (assigned by IANA)
	b[3] = uint8(nsegs - 1)       // srh.segmentsLeft
	b[4] = uint8(nsegs - 1)       // srh.firstSegment
	b[5] = 0                      // srh.flags (SR6_FLAG1_HMAC for srh_hmac)
	// srh.reserved: Defined as "Tag" in draft-ietf-6man-segment-routing-header-07
	native.PutUint16(b[6:], 0) // srh.reserved
	for _, netIP := range segments {
		b = append(b, netIP...) // srh.Segments
	}
	return b, nil
}

// Helper functions
func SEG6EncapModeString(mode int) string {
	switch mode {
	case SEG6_IPTUN_MODE_INLINE:
		return "inline"
	case SEG6_IPTUN_MODE_ENCAP:
		return "encap"
	}
	return "unknown"
}
   07070100000C3F000081A4000000000000000000000001645E367C00000767000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/nl/seg6local_linux.go   package nl

import ()

// seg6local parameters
const (
	SEG6_LOCAL_UNSPEC = iota
	SEG6_LOCAL_ACTION
	SEG6_LOCAL_SRH
	SEG6_LOCAL_TABLE
	SEG6_LOCAL_NH4
	SEG6_LOCAL_NH6
	SEG6_LOCAL_IIF
	SEG6_LOCAL_OIF
	__SEG6_LOCAL_MAX
)
const (
	SEG6_LOCAL_MAX = __SEG6_LOCAL_MAX
)

// seg6local actions
const (
	SEG6_LOCAL_ACTION_END           = iota + 1 // 1
	SEG6_LOCAL_ACTION_END_X                    // 2
	SEG6_LOCAL_ACTION_END_T                    // 3
	SEG6_LOCAL_ACTION_END_DX2                  // 4
	SEG6_LOCAL_ACTION_END_DX6                  // 5
	SEG6_LOCAL_ACTION_END_DX4                  // 6
	SEG6_LOCAL_ACTION_END_DT6                  // 7
	SEG6_LOCAL_ACTION_END_DT4                  // 8
	SEG6_LOCAL_ACTION_END_B6                   // 9
	SEG6_LOCAL_ACTION_END_B6_ENCAPS            // 10
	SEG6_LOCAL_ACTION_END_BM                   // 11
	SEG6_LOCAL_ACTION_END_S                    // 12
	SEG6_LOCAL_ACTION_END_AS                   // 13
	SEG6_LOCAL_ACTION_END_AM                   // 14
	__SEG6_LOCAL_ACTION_MAX
)
const (
	SEG6_LOCAL_ACTION_MAX = __SEG6_LOCAL_ACTION_MAX - 1
)

// Helper functions
func SEG6LocalActionString(action int) string {
	switch action {
	case SEG6_LOCAL_ACTION_END:
		return "End"
	case SEG6_LOCAL_ACTION_END_X:
		return "End.X"
	case SEG6_LOCAL_ACTION_END_T:
		return "End.T"
	case SEG6_LOCAL_ACTION_END_DX2:
		return "End.DX2"
	case SEG6_LOCAL_ACTION_END_DX6:
		return "End.DX6"
	case SEG6_LOCAL_ACTION_END_DX4:
		return "End.DX4"
	case SEG6_LOCAL_ACTION_END_DT6:
		return "End.DT6"
	case SEG6_LOCAL_ACTION_END_DT4:
		return "End.DT4"
	case SEG6_LOCAL_ACTION_END_B6:
		return "End.B6"
	case SEG6_LOCAL_ACTION_END_B6_ENCAPS:
		return "End.B6.Encaps"
	case SEG6_LOCAL_ACTION_END_BM:
		return "End.BM"
	case SEG6_LOCAL_ACTION_END_S:
		return "End.S"
	case SEG6_LOCAL_ACTION_END_AS:
		return "End.AS"
	case SEG6_LOCAL_ACTION_END_AM:
		return "End.AM"
	}
	return "unknown"
}
 07070100000C40000081A4000000000000000000000001645E367C0000076C000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/nl/syscall.go   package nl

// syscall package lack of rule attributes type.
// Thus there are defined below
const (
	FRA_UNSPEC  = iota
	FRA_DST     /* destination address */
	FRA_SRC     /* source address */
	FRA_IIFNAME /* interface name */
	FRA_GOTO    /* target to jump to (FR_ACT_GOTO) */
	FRA_UNUSED2
	FRA_PRIORITY /* priority/preference */
	FRA_UNUSED3
	FRA_UNUSED4
	FRA_UNUSED5
	FRA_FWMARK /* mark */
	FRA_FLOW   /* flow/class id */
	FRA_TUN_ID
	FRA_SUPPRESS_IFGROUP
	FRA_SUPPRESS_PREFIXLEN
	FRA_TABLE  /* Extended table id */
	FRA_FWMASK /* mask for netfilter mark */
	FRA_OIFNAME
	FRA_PAD
	FRA_L3MDEV      /* iif or oif is l3mdev goto its table */
	FRA_UID_RANGE   /* UID range */
	FRA_PROTOCOL    /* Originator of the rule */
	FRA_IP_PROTO    /* ip proto */
	FRA_SPORT_RANGE /* sport */
	FRA_DPORT_RANGE /* dport */
)

// ip rule netlink request types
const (
	FR_ACT_UNSPEC = iota
	FR_ACT_TO_TBL /* Pass to fixed table */
	FR_ACT_GOTO   /* Jump to another rule */
	FR_ACT_NOP    /* No operation */
	FR_ACT_RES3
	FR_ACT_RES4
	FR_ACT_BLACKHOLE   /* Drop without notification */
	FR_ACT_UNREACHABLE /* Drop with ENETUNREACH */
	FR_ACT_PROHIBIT    /* Drop with EACCES */
)

// socket diags related
const (
	SOCK_DIAG_BY_FAMILY = 20         /* linux.sock_diag.h */
	TCPDIAG_NOCOOKIE    = 0xFFFFFFFF /* TCPDIAG_NOCOOKIE in net/ipv4/tcp_diag.h*/
)

// RTA_ENCAP subtype
const (
	MPLS_IPTUNNEL_UNSPEC = iota
	MPLS_IPTUNNEL_DST
)

// light weight tunnel encap types
const (
	LWTUNNEL_ENCAP_NONE = iota
	LWTUNNEL_ENCAP_MPLS
	LWTUNNEL_ENCAP_IP
	LWTUNNEL_ENCAP_ILA
	LWTUNNEL_ENCAP_IP6
	LWTUNNEL_ENCAP_SEG6
	LWTUNNEL_ENCAP_BPF
	LWTUNNEL_ENCAP_SEG6_LOCAL
)

// routing header types
const (
	IPV6_SRCRT_STRICT = 0x01 // Deprecated; will be removed
	IPV6_SRCRT_TYPE_0 = 0    // Deprecated; will be removed
	IPV6_SRCRT_TYPE_2 = 2    // IPv6 type 2 Routing Header
	IPV6_SRCRT_TYPE_4 = 4    // Segment Routing with IPv6
)
07070100000C41000081A4000000000000000000000001645E367C00005D56000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/nl/tc_linux.go  package nl

import (
	"encoding/binary"
	"unsafe"
)

// LinkLayer
const (
	LINKLAYER_UNSPEC = iota
	LINKLAYER_ETHERNET
	LINKLAYER_ATM
)

// ATM
const (
	ATM_CELL_PAYLOAD = 48
	ATM_CELL_SIZE    = 53
)

const TC_LINKLAYER_MASK = 0x0F

// Police
const (
	TCA_POLICE_UNSPEC = iota
	TCA_POLICE_TBF
	TCA_POLICE_RATE
	TCA_POLICE_PEAKRATE
	TCA_POLICE_AVRATE
	TCA_POLICE_RESULT
	TCA_POLICE_MAX = TCA_POLICE_RESULT
)

// Message types
const (
	TCA_UNSPEC = iota
	TCA_KIND
	TCA_OPTIONS
	TCA_STATS
	TCA_XSTATS
	TCA_RATE
	TCA_FCNT
	TCA_STATS2
	TCA_STAB
	TCA_MAX = TCA_STAB
)

const (
	TCA_ACT_TAB = 1
	TCAA_MAX    = 1
)

const (
	TCA_ACT_UNSPEC = iota
	TCA_ACT_KIND
	TCA_ACT_OPTIONS
	TCA_ACT_INDEX
	TCA_ACT_STATS
	TCA_ACT_MAX
)

const (
	TCA_PRIO_UNSPEC = iota
	TCA_PRIO_MQ
	TCA_PRIO_MAX = TCA_PRIO_MQ
)

const (
	TCA_STATS_UNSPEC = iota
	TCA_STATS_BASIC
	TCA_STATS_RATE_EST
	TCA_STATS_QUEUE
	TCA_STATS_APP
	TCA_STATS_MAX = TCA_STATS_APP
)

const (
	SizeofTcMsg          = 0x14
	SizeofTcActionMsg    = 0x04
	SizeofTcPrioMap      = 0x14
	SizeofTcRateSpec     = 0x0c
	SizeofTcNetemQopt    = 0x18
	SizeofTcNetemCorr    = 0x0c
	SizeofTcNetemReorder = 0x08
	SizeofTcNetemCorrupt = 0x08
	SizeofTcTbfQopt      = 2*SizeofTcRateSpec + 0x0c
	SizeofTcHtbCopt      = 2*SizeofTcRateSpec + 0x14
	SizeofTcHtbGlob      = 0x14
	SizeofTcU32Key       = 0x10
	SizeofTcU32Sel       = 0x10 // without keys
	SizeofTcGen          = 0x14
	SizeofTcConnmark     = SizeofTcGen + 0x04
	SizeofTcCsum         = SizeofTcGen + 0x04
	SizeofTcMirred       = SizeofTcGen + 0x08
	SizeofTcTunnelKey    = SizeofTcGen + 0x04
	SizeofTcSkbEdit      = SizeofTcGen
	SizeofTcPolice       = 2*SizeofTcRateSpec + 0x20
	SizeofTcSfqQopt      = 0x0b
	SizeofTcSfqRedStats  = 0x18
	SizeofTcSfqQoptV1    = SizeofTcSfqQopt + SizeofTcSfqRedStats + 0x1c
)

// struct tcmsg {
//   unsigned char tcm_family;
//   unsigned char tcm__pad1;
//   unsigned short  tcm__pad2;
//   int   tcm_ifindex;
//   __u32   tcm_handle;
//   __u32   tcm_parent;
//   __u32   tcm_info;
// };

type TcMsg struct {
	Family  uint8
	Pad     [3]byte
	Ifindex int32
	Handle  uint32
	Parent  uint32
	Info    uint32
}

func (msg *TcMsg) Len() int {
	return SizeofTcMsg
}

func DeserializeTcMsg(b []byte) *TcMsg {
	return (*TcMsg)(unsafe.Pointer(&b[0:SizeofTcMsg][0]))
}

func (x *TcMsg) Serialize() []byte {
	return (*(*[SizeofTcMsg]byte)(unsafe.Pointer(x)))[:]
}

// struct tcamsg {
//   unsigned char tca_family;
//   unsigned char tca__pad1;
//   unsigned short  tca__pad2;
// };

type TcActionMsg struct {
	Family uint8
	Pad    [3]byte
}

func (msg *TcActionMsg) Len() int {
	return SizeofTcActionMsg
}

func DeserializeTcActionMsg(b []byte) *TcActionMsg {
	return (*TcActionMsg)(unsafe.Pointer(&b[0:SizeofTcActionMsg][0]))
}

func (x *TcActionMsg) Serialize() []byte {
	return (*(*[SizeofTcActionMsg]byte)(unsafe.Pointer(x)))[:]
}

const (
	TC_PRIO_MAX = 15
)

// struct tc_prio_qopt {
// 	int bands;      /* Number of bands */
// 	__u8  priomap[TC_PRIO_MAX+1]; /* Map: logical priority -> PRIO band */
// };

type TcPrioMap struct {
	Bands   int32
	Priomap [TC_PRIO_MAX + 1]uint8
}

func (msg *TcPrioMap) Len() int {
	return SizeofTcPrioMap
}

func DeserializeTcPrioMap(b []byte) *TcPrioMap {
	return (*TcPrioMap)(unsafe.Pointer(&b[0:SizeofTcPrioMap][0]))
}

func (x *TcPrioMap) Serialize() []byte {
	return (*(*[SizeofTcPrioMap]byte)(unsafe.Pointer(x)))[:]
}

const (
	TCA_TBF_UNSPEC = iota
	TCA_TBF_PARMS
	TCA_TBF_RTAB
	TCA_TBF_PTAB
	TCA_TBF_RATE64
	TCA_TBF_PRATE64
	TCA_TBF_BURST
	TCA_TBF_PBURST
	TCA_TBF_MAX = TCA_TBF_PBURST
)

// struct tc_ratespec {
//   unsigned char cell_log;
//   __u8    linklayer; /* lower 4 bits */
//   unsigned short  overhead;
//   short   cell_align;
//   unsigned short  mpu;
//   __u32   rate;
// };

type TcRateSpec struct {
	CellLog   uint8
	Linklayer uint8
	Overhead  uint16
	CellAlign int16
	Mpu       uint16
	Rate      uint32
}

func (msg *TcRateSpec) Len() int {
	return SizeofTcRateSpec
}

func DeserializeTcRateSpec(b []byte) *TcRateSpec {
	return (*TcRateSpec)(unsafe.Pointer(&b[0:SizeofTcRateSpec][0]))
}

func (x *TcRateSpec) Serialize() []byte {
	return (*(*[SizeofTcRateSpec]byte)(unsafe.Pointer(x)))[:]
}

/**
* NETEM
 */

const (
	TCA_NETEM_UNSPEC = iota
	TCA_NETEM_CORR
	TCA_NETEM_DELAY_DIST
	TCA_NETEM_REORDER
	TCA_NETEM_CORRUPT
	TCA_NETEM_LOSS
	TCA_NETEM_RATE
	TCA_NETEM_ECN
	TCA_NETEM_RATE64
	TCA_NETEM_MAX = TCA_NETEM_RATE64
)

// struct tc_netem_qopt {
//	__u32	latency;	/* added delay (us) */
//	__u32   limit;		/* fifo limit (packets) */
//	__u32	loss;		/* random packet loss (0=none ~0=100%) */
//	__u32	gap;		/* re-ordering gap (0 for none) */
//	__u32   duplicate;	/* random packet dup  (0=none ~0=100%) */
// 	__u32	jitter;		/* random jitter in latency (us) */
// };

type TcNetemQopt struct {
	Latency   uint32
	Limit     uint32
	Loss      uint32
	Gap       uint32
	Duplicate uint32
	Jitter    uint32
}

func (msg *TcNetemQopt) Len() int {
	return SizeofTcNetemQopt
}

func DeserializeTcNetemQopt(b []byte) *TcNetemQopt {
	return (*TcNetemQopt)(unsafe.Pointer(&b[0:SizeofTcNetemQopt][0]))
}

func (x *TcNetemQopt) Serialize() []byte {
	return (*(*[SizeofTcNetemQopt]byte)(unsafe.Pointer(x)))[:]
}

// struct tc_netem_corr {
//  __u32   delay_corr; /* delay correlation */
//  __u32   loss_corr;  /* packet loss correlation */
//  __u32   dup_corr;   /* duplicate correlation  */
// };

type TcNetemCorr struct {
	DelayCorr uint32
	LossCorr  uint32
	DupCorr   uint32
}

func (msg *TcNetemCorr) Len() int {
	return SizeofTcNetemCorr
}

func DeserializeTcNetemCorr(b []byte) *TcNetemCorr {
	return (*TcNetemCorr)(unsafe.Pointer(&b[0:SizeofTcNetemCorr][0]))
}

func (x *TcNetemCorr) Serialize() []byte {
	return (*(*[SizeofTcNetemCorr]byte)(unsafe.Pointer(x)))[:]
}

// struct tc_netem_reorder {
//  __u32   probability;
//  __u32   correlation;
// };

type TcNetemReorder struct {
	Probability uint32
	Correlation uint32
}

func (msg *TcNetemReorder) Len() int {
	return SizeofTcNetemReorder
}

func DeserializeTcNetemReorder(b []byte) *TcNetemReorder {
	return (*TcNetemReorder)(unsafe.Pointer(&b[0:SizeofTcNetemReorder][0]))
}

func (x *TcNetemReorder) Serialize() []byte {
	return (*(*[SizeofTcNetemReorder]byte)(unsafe.Pointer(x)))[:]
}

// struct tc_netem_corrupt {
//  __u32   probability;
//  __u32   correlation;
// };

type TcNetemCorrupt struct {
	Probability uint32
	Correlation uint32
}

func (msg *TcNetemCorrupt) Len() int {
	return SizeofTcNetemCorrupt
}

func DeserializeTcNetemCorrupt(b []byte) *TcNetemCorrupt {
	return (*TcNetemCorrupt)(unsafe.Pointer(&b[0:SizeofTcNetemCorrupt][0]))
}

func (x *TcNetemCorrupt) Serialize() []byte {
	return (*(*[SizeofTcNetemCorrupt]byte)(unsafe.Pointer(x)))[:]
}

// struct tc_tbf_qopt {
//   struct tc_ratespec rate;
//   struct tc_ratespec peakrate;
//   __u32   limit;
//   __u32   buffer;
//   __u32   mtu;
// };

type TcTbfQopt struct {
	Rate     TcRateSpec
	Peakrate TcRateSpec
	Limit    uint32
	Buffer   uint32
	Mtu      uint32
}

func (msg *TcTbfQopt) Len() int {
	return SizeofTcTbfQopt
}

func DeserializeTcTbfQopt(b []byte) *TcTbfQopt {
	return (*TcTbfQopt)(unsafe.Pointer(&b[0:SizeofTcTbfQopt][0]))
}

func (x *TcTbfQopt) Serialize() []byte {
	return (*(*[SizeofTcTbfQopt]byte)(unsafe.Pointer(x)))[:]
}

const (
	TCA_HTB_UNSPEC = iota
	TCA_HTB_PARMS
	TCA_HTB_INIT
	TCA_HTB_CTAB
	TCA_HTB_RTAB
	TCA_HTB_DIRECT_QLEN
	TCA_HTB_RATE64
	TCA_HTB_CEIL64
	TCA_HTB_MAX = TCA_HTB_CEIL64
)

//struct tc_htb_opt {
//	struct tc_ratespec	rate;
//	struct tc_ratespec	ceil;
//	__u32	buffer;
//	__u32	cbuffer;
//	__u32	quantum;
//	__u32	level;		/* out only */
//	__u32	prio;
//};

type TcHtbCopt struct {
	Rate    TcRateSpec
	Ceil    TcRateSpec
	Buffer  uint32
	Cbuffer uint32
	Quantum uint32
	Level   uint32
	Prio    uint32
}

func (msg *TcHtbCopt) Len() int {
	return SizeofTcHtbCopt
}

func DeserializeTcHtbCopt(b []byte) *TcHtbCopt {
	return (*TcHtbCopt)(unsafe.Pointer(&b[0:SizeofTcHtbCopt][0]))
}

func (x *TcHtbCopt) Serialize() []byte {
	return (*(*[SizeofTcHtbCopt]byte)(unsafe.Pointer(x)))[:]
}

type TcHtbGlob struct {
	Version      uint32
	Rate2Quantum uint32
	Defcls       uint32
	Debug        uint32
	DirectPkts   uint32
}

func (msg *TcHtbGlob) Len() int {
	return SizeofTcHtbGlob
}

func DeserializeTcHtbGlob(b []byte) *TcHtbGlob {
	return (*TcHtbGlob)(unsafe.Pointer(&b[0:SizeofTcHtbGlob][0]))
}

func (x *TcHtbGlob) Serialize() []byte {
	return (*(*[SizeofTcHtbGlob]byte)(unsafe.Pointer(x)))[:]
}

// HFSC

type Curve struct {
	m1 uint32
	d  uint32
	m2 uint32
}

type HfscCopt struct {
	Rsc Curve
	Fsc Curve
	Usc Curve
}

func (c *Curve) Attrs() (uint32, uint32, uint32) {
	return c.m1, c.d, c.m2
}

func (c *Curve) Set(m1 uint32, d uint32, m2 uint32) {
	c.m1 = m1
	c.d = d
	c.m2 = m2
}

func DeserializeHfscCurve(b []byte) *Curve {
	return &Curve{
		m1: binary.LittleEndian.Uint32(b[0:4]),
		d:  binary.LittleEndian.Uint32(b[4:8]),
		m2: binary.LittleEndian.Uint32(b[8:12]),
	}
}

func SerializeHfscCurve(c *Curve) (b []byte) {
	t := make([]byte, binary.MaxVarintLen32)
	binary.LittleEndian.PutUint32(t, c.m1)
	b = append(b, t[:4]...)
	binary.LittleEndian.PutUint32(t, c.d)
	b = append(b, t[:4]...)
	binary.LittleEndian.PutUint32(t, c.m2)
	b = append(b, t[:4]...)
	return b
}

type TcHfscOpt struct {
	Defcls uint16
}

func (x *TcHfscOpt) Serialize() []byte {
	return (*(*[2]byte)(unsafe.Pointer(x)))[:]
}

const (
	TCA_U32_UNSPEC = iota
	TCA_U32_CLASSID
	TCA_U32_HASH
	TCA_U32_LINK
	TCA_U32_DIVISOR
	TCA_U32_SEL
	TCA_U32_POLICE
	TCA_U32_ACT
	TCA_U32_INDEV
	TCA_U32_PCNT
	TCA_U32_MARK
	TCA_U32_MAX = TCA_U32_MARK
)

// struct tc_u32_key {
//   __be32    mask;
//   __be32    val;
//   int   off;
//   int   offmask;
// };

type TcU32Key struct {
	Mask    uint32 // big endian
	Val     uint32 // big endian
	Off     int32
	OffMask int32
}

func (msg *TcU32Key) Len() int {
	return SizeofTcU32Key
}

func DeserializeTcU32Key(b []byte) *TcU32Key {
	return (*TcU32Key)(unsafe.Pointer(&b[0:SizeofTcU32Key][0]))
}

func (x *TcU32Key) Serialize() []byte {
	return (*(*[SizeofTcU32Key]byte)(unsafe.Pointer(x)))[:]
}

// struct tc_u32_sel {
//   unsigned char   flags;
//   unsigned char   offshift;
//   unsigned char   nkeys;
//
//   __be16      offmask;
//   __u16     off;
//   short     offoff;
//
//   short     hoff;
//   __be32      hmask;
//   struct tc_u32_key keys[0];
// };

const (
	TC_U32_TERMINAL  = 1 << iota
	TC_U32_OFFSET    = 1 << iota
	TC_U32_VAROFFSET = 1 << iota
	TC_U32_EAT       = 1 << iota
)

type TcU32Sel struct {
	Flags    uint8
	Offshift uint8
	Nkeys    uint8
	Pad      uint8
	Offmask  uint16 // big endian
	Off      uint16
	Offoff   int16
	Hoff     int16
	Hmask    uint32 // big endian
	Keys     []TcU32Key
}

func (msg *TcU32Sel) Len() int {
	return SizeofTcU32Sel + int(msg.Nkeys)*SizeofTcU32Key
}

func DeserializeTcU32Sel(b []byte) *TcU32Sel {
	x := &TcU32Sel{}
	copy((*(*[SizeofTcU32Sel]byte)(unsafe.Pointer(x)))[:], b)
	next := SizeofTcU32Sel
	var i uint8
	for i = 0; i < x.Nkeys; i++ {
		x.Keys = append(x.Keys, *DeserializeTcU32Key(b[next:]))
		next += SizeofTcU32Key
	}
	return x
}

func (x *TcU32Sel) Serialize() []byte {
	// This can't just unsafe.cast because it must iterate through keys.
	buf := make([]byte, x.Len())
	copy(buf, (*(*[SizeofTcU32Sel]byte)(unsafe.Pointer(x)))[:])
	next := SizeofTcU32Sel
	for _, key := range x.Keys {
		keyBuf := key.Serialize()
		copy(buf[next:], keyBuf)
		next += SizeofTcU32Key
	}
	return buf
}

type TcGen struct {
	Index   uint32
	Capab   uint32
	Action  int32
	Refcnt  int32
	Bindcnt int32
}

func (msg *TcGen) Len() int {
	return SizeofTcGen
}

func DeserializeTcGen(b []byte) *TcGen {
	return (*TcGen)(unsafe.Pointer(&b[0:SizeofTcGen][0]))
}

func (x *TcGen) Serialize() []byte {
	return (*(*[SizeofTcGen]byte)(unsafe.Pointer(x)))[:]
}

// #define tc_gen \
//   __u32                 index; \
//   __u32                 capab; \
//   int                   action; \
//   int                   refcnt; \
//   int                   bindcnt

const (
	TCA_ACT_GACT = 5
)

const (
	TCA_GACT_UNSPEC = iota
	TCA_GACT_TM
	TCA_GACT_PARMS
	TCA_GACT_PROB
	TCA_GACT_MAX = TCA_GACT_PROB
)

type TcGact TcGen

const (
	TCA_ACT_BPF = 13
)

const (
	TCA_ACT_BPF_UNSPEC = iota
	TCA_ACT_BPF_TM
	TCA_ACT_BPF_PARMS
	TCA_ACT_BPF_OPS_LEN
	TCA_ACT_BPF_OPS
	TCA_ACT_BPF_FD
	TCA_ACT_BPF_NAME
	TCA_ACT_BPF_MAX = TCA_ACT_BPF_NAME
)

const (
	TCA_BPF_FLAG_ACT_DIRECT uint32 = 1 << iota
)

const (
	TCA_BPF_UNSPEC = iota
	TCA_BPF_ACT
	TCA_BPF_POLICE
	TCA_BPF_CLASSID
	TCA_BPF_OPS_LEN
	TCA_BPF_OPS
	TCA_BPF_FD
	TCA_BPF_NAME
	TCA_BPF_FLAGS
	TCA_BPF_FLAGS_GEN
	TCA_BPF_TAG
	TCA_BPF_ID
	TCA_BPF_MAX = TCA_BPF_ID
)

type TcBpf TcGen

const (
	TCA_ACT_CONNMARK = 14
)

const (
	TCA_CONNMARK_UNSPEC = iota
	TCA_CONNMARK_PARMS
	TCA_CONNMARK_TM
	TCA_CONNMARK_MAX = TCA_CONNMARK_TM
)

// struct tc_connmark {
//   tc_gen;
//   __u16 zone;
// };

type TcConnmark struct {
	TcGen
	Zone uint16
}

func (msg *TcConnmark) Len() int {
	return SizeofTcConnmark
}

func DeserializeTcConnmark(b []byte) *TcConnmark {
	return (*TcConnmark)(unsafe.Pointer(&b[0:SizeofTcConnmark][0]))
}

func (x *TcConnmark) Serialize() []byte {
	return (*(*[SizeofTcConnmark]byte)(unsafe.Pointer(x)))[:]
}

const (
	TCA_CSUM_UNSPEC = iota
	TCA_CSUM_PARMS
	TCA_CSUM_TM
	TCA_CSUM_PAD
	TCA_CSUM_MAX = TCA_CSUM_PAD
)

// struct tc_csum {
//   tc_gen;
//   __u32 update_flags;
// }

type TcCsum struct {
	TcGen
	UpdateFlags uint32
}

func (msg *TcCsum) Len() int {
	return SizeofTcCsum
}

func DeserializeTcCsum(b []byte) *TcCsum {
	return (*TcCsum)(unsafe.Pointer(&b[0:SizeofTcCsum][0]))
}

func (x *TcCsum) Serialize() []byte {
	return (*(*[SizeofTcCsum]byte)(unsafe.Pointer(x)))[:]
}

const (
	TCA_ACT_MIRRED = 8
)

const (
	TCA_MIRRED_UNSPEC = iota
	TCA_MIRRED_TM
	TCA_MIRRED_PARMS
	TCA_MIRRED_MAX = TCA_MIRRED_PARMS
)

// struct tc_mirred {
// 	tc_gen;
// 	int                     eaction;   /* one of IN/EGRESS_MIRROR/REDIR */
// 	__u32                   ifindex;  /* ifindex of egress port */
// };

type TcMirred struct {
	TcGen
	Eaction int32
	Ifindex uint32
}

func (msg *TcMirred) Len() int {
	return SizeofTcMirred
}

func DeserializeTcMirred(b []byte) *TcMirred {
	return (*TcMirred)(unsafe.Pointer(&b[0:SizeofTcMirred][0]))
}

func (x *TcMirred) Serialize() []byte {
	return (*(*[SizeofTcMirred]byte)(unsafe.Pointer(x)))[:]
}

const (
	TCA_TUNNEL_KEY_UNSPEC = iota
	TCA_TUNNEL_KEY_TM
	TCA_TUNNEL_KEY_PARMS
	TCA_TUNNEL_KEY_ENC_IPV4_SRC
	TCA_TUNNEL_KEY_ENC_IPV4_DST
	TCA_TUNNEL_KEY_ENC_IPV6_SRC
	TCA_TUNNEL_KEY_ENC_IPV6_DST
	TCA_TUNNEL_KEY_ENC_KEY_ID
	TCA_TUNNEL_KEY_PAD
	TCA_TUNNEL_KEY_ENC_DST_PORT
	TCA_TUNNEL_KEY_NO_CSUM
	TCA_TUNNEL_KEY_ENC_OPTS
	TCA_TUNNEL_KEY_ENC_TOS
	TCA_TUNNEL_KEY_ENC_TTL
	TCA_TUNNEL_KEY_MAX
)

type TcTunnelKey struct {
	TcGen
	Action int32
}

func (x *TcTunnelKey) Len() int {
	return SizeofTcTunnelKey
}

func DeserializeTunnelKey(b []byte) *TcTunnelKey {
	return (*TcTunnelKey)(unsafe.Pointer(&b[0:SizeofTcTunnelKey][0]))
}

func (x *TcTunnelKey) Serialize() []byte {
	return (*(*[SizeofTcTunnelKey]byte)(unsafe.Pointer(x)))[:]
}

const (
	TCA_SKBEDIT_UNSPEC = iota
	TCA_SKBEDIT_TM
	TCA_SKBEDIT_PARMS
	TCA_SKBEDIT_PRIORITY
	TCA_SKBEDIT_QUEUE_MAPPING
	TCA_SKBEDIT_MARK
	TCA_SKBEDIT_PAD
	TCA_SKBEDIT_PTYPE
	TCA_SKBEDIT_MAX = TCA_SKBEDIT_MARK
)

type TcSkbEdit struct {
	TcGen
}

func (x *TcSkbEdit) Len() int {
	return SizeofTcSkbEdit
}

func DeserializeSkbEdit(b []byte) *TcSkbEdit {
	return (*TcSkbEdit)(unsafe.Pointer(&b[0:SizeofTcSkbEdit][0]))
}

func (x *TcSkbEdit) Serialize() []byte {
	return (*(*[SizeofTcSkbEdit]byte)(unsafe.Pointer(x)))[:]
}

// struct tc_police {
// 	__u32			index;
// 	int			action;
// 	__u32			limit;
// 	__u32			burst;
// 	__u32			mtu;
// 	struct tc_ratespec	rate;
// 	struct tc_ratespec	peakrate;
// 	int				refcnt;
// 	int				bindcnt;
// 	__u32			capab;
// };

type TcPolice struct {
	Index    uint32
	Action   int32
	Limit    uint32
	Burst    uint32
	Mtu      uint32
	Rate     TcRateSpec
	PeakRate TcRateSpec
	Refcnt   int32
	Bindcnt  int32
	Capab    uint32
}

func (msg *TcPolice) Len() int {
	return SizeofTcPolice
}

func DeserializeTcPolice(b []byte) *TcPolice {
	return (*TcPolice)(unsafe.Pointer(&b[0:SizeofTcPolice][0]))
}

func (x *TcPolice) Serialize() []byte {
	return (*(*[SizeofTcPolice]byte)(unsafe.Pointer(x)))[:]
}

const (
	TCA_FW_UNSPEC = iota
	TCA_FW_CLASSID
	TCA_FW_POLICE
	TCA_FW_INDEV
	TCA_FW_ACT
	TCA_FW_MASK
	TCA_FW_MAX = TCA_FW_MASK
)

const (
	TCA_MATCHALL_UNSPEC = iota
	TCA_MATCHALL_CLASSID
	TCA_MATCHALL_ACT
	TCA_MATCHALL_FLAGS
)

const (
	TCA_FQ_UNSPEC             = iota
	TCA_FQ_PLIMIT             // limit of total number of packets in queue
	TCA_FQ_FLOW_PLIMIT        // limit of packets per flow
	TCA_FQ_QUANTUM            // RR quantum
	TCA_FQ_INITIAL_QUANTUM    // RR quantum for new flow
	TCA_FQ_RATE_ENABLE        // enable/disable rate limiting
	TCA_FQ_FLOW_DEFAULT_RATE  // obsolete do not use
	TCA_FQ_FLOW_MAX_RATE      // per flow max rate
	TCA_FQ_BUCKETS_LOG        // log2(number of buckets)
	TCA_FQ_FLOW_REFILL_DELAY  // flow credit refill delay in usec
	TCA_FQ_ORPHAN_MASK        // mask applied to orphaned skb hashes
	TCA_FQ_LOW_RATE_THRESHOLD // per packet delay under this rate
)

const (
	TCA_FQ_CODEL_UNSPEC = iota
	TCA_FQ_CODEL_TARGET
	TCA_FQ_CODEL_LIMIT
	TCA_FQ_CODEL_INTERVAL
	TCA_FQ_CODEL_ECN
	TCA_FQ_CODEL_FLOWS
	TCA_FQ_CODEL_QUANTUM
	TCA_FQ_CODEL_CE_THRESHOLD
	TCA_FQ_CODEL_DROP_BATCH_SIZE
	TCA_FQ_CODEL_MEMORY_LIMIT
)

const (
	TCA_HFSC_UNSPEC = iota
	TCA_HFSC_RSC
	TCA_HFSC_FSC
	TCA_HFSC_USC
)

const (
	TCA_FLOWER_UNSPEC = iota
	TCA_FLOWER_CLASSID
	TCA_FLOWER_INDEV
	TCA_FLOWER_ACT
	TCA_FLOWER_KEY_ETH_DST       /* ETH_ALEN */
	TCA_FLOWER_KEY_ETH_DST_MASK  /* ETH_ALEN */
	TCA_FLOWER_KEY_ETH_SRC       /* ETH_ALEN */
	TCA_FLOWER_KEY_ETH_SRC_MASK  /* ETH_ALEN */
	TCA_FLOWER_KEY_ETH_TYPE      /* be16 */
	TCA_FLOWER_KEY_IP_PROTO      /* u8 */
	TCA_FLOWER_KEY_IPV4_SRC      /* be32 */
	TCA_FLOWER_KEY_IPV4_SRC_MASK /* be32 */
	TCA_FLOWER_KEY_IPV4_DST      /* be32 */
	TCA_FLOWER_KEY_IPV4_DST_MASK /* be32 */
	TCA_FLOWER_KEY_IPV6_SRC      /* struct in6_addr */
	TCA_FLOWER_KEY_IPV6_SRC_MASK /* struct in6_addr */
	TCA_FLOWER_KEY_IPV6_DST      /* struct in6_addr */
	TCA_FLOWER_KEY_IPV6_DST_MASK /* struct in6_addr */
	TCA_FLOWER_KEY_TCP_SRC       /* be16 */
	TCA_FLOWER_KEY_TCP_DST       /* be16 */
	TCA_FLOWER_KEY_UDP_SRC       /* be16 */
	TCA_FLOWER_KEY_UDP_DST       /* be16 */

	TCA_FLOWER_FLAGS
	TCA_FLOWER_KEY_VLAN_ID       /* be16 */
	TCA_FLOWER_KEY_VLAN_PRIO     /* u8   */
	TCA_FLOWER_KEY_VLAN_ETH_TYPE /* be16 */

	TCA_FLOWER_KEY_ENC_KEY_ID        /* be32 */
	TCA_FLOWER_KEY_ENC_IPV4_SRC      /* be32 */
	TCA_FLOWER_KEY_ENC_IPV4_SRC_MASK /* be32 */
	TCA_FLOWER_KEY_ENC_IPV4_DST      /* be32 */
	TCA_FLOWER_KEY_ENC_IPV4_DST_MASK /* be32 */
	TCA_FLOWER_KEY_ENC_IPV6_SRC      /* struct in6_addr */
	TCA_FLOWER_KEY_ENC_IPV6_SRC_MASK /* struct in6_addr */
	TCA_FLOWER_KEY_ENC_IPV6_DST      /* struct in6_addr */
	TCA_FLOWER_KEY_ENC_IPV6_DST_MASK /* struct in6_addr */

	TCA_FLOWER_KEY_TCP_SRC_MASK  /* be16 */
	TCA_FLOWER_KEY_TCP_DST_MASK  /* be16 */
	TCA_FLOWER_KEY_UDP_SRC_MASK  /* be16 */
	TCA_FLOWER_KEY_UDP_DST_MASK  /* be16 */
	TCA_FLOWER_KEY_SCTP_SRC_MASK /* be16 */
	TCA_FLOWER_KEY_SCTP_DST_MASK /* be16 */

	TCA_FLOWER_KEY_SCTP_SRC /* be16 */
	TCA_FLOWER_KEY_SCTP_DST /* be16 */

	TCA_FLOWER_KEY_ENC_UDP_SRC_PORT      /* be16 */
	TCA_FLOWER_KEY_ENC_UDP_SRC_PORT_MASK /* be16 */
	TCA_FLOWER_KEY_ENC_UDP_DST_PORT      /* be16 */
	TCA_FLOWER_KEY_ENC_UDP_DST_PORT_MASK /* be16 */

	TCA_FLOWER_KEY_FLAGS      /* be32 */
	TCA_FLOWER_KEY_FLAGS_MASK /* be32 */

	TCA_FLOWER_KEY_ICMPV4_CODE      /* u8 */
	TCA_FLOWER_KEY_ICMPV4_CODE_MASK /* u8 */
	TCA_FLOWER_KEY_ICMPV4_TYPE      /* u8 */
	TCA_FLOWER_KEY_ICMPV4_TYPE_MASK /* u8 */
	TCA_FLOWER_KEY_ICMPV6_CODE      /* u8 */
	TCA_FLOWER_KEY_ICMPV6_CODE_MASK /* u8 */
	TCA_FLOWER_KEY_ICMPV6_TYPE      /* u8 */
	TCA_FLOWER_KEY_ICMPV6_TYPE_MASK /* u8 */

	TCA_FLOWER_KEY_ARP_SIP      /* be32 */
	TCA_FLOWER_KEY_ARP_SIP_MASK /* be32 */
	TCA_FLOWER_KEY_ARP_TIP      /* be32 */
	TCA_FLOWER_KEY_ARP_TIP_MASK /* be32 */
	TCA_FLOWER_KEY_ARP_OP       /* u8 */
	TCA_FLOWER_KEY_ARP_OP_MASK  /* u8 */
	TCA_FLOWER_KEY_ARP_SHA      /* ETH_ALEN */
	TCA_FLOWER_KEY_ARP_SHA_MASK /* ETH_ALEN */
	TCA_FLOWER_KEY_ARP_THA      /* ETH_ALEN */
	TCA_FLOWER_KEY_ARP_THA_MASK /* ETH_ALEN */

	TCA_FLOWER_KEY_MPLS_TTL   /* u8 - 8 bits */
	TCA_FLOWER_KEY_MPLS_BOS   /* u8 - 1 bit */
	TCA_FLOWER_KEY_MPLS_TC    /* u8 - 3 bits */
	TCA_FLOWER_KEY_MPLS_LABEL /* be32 - 20 bits */

	TCA_FLOWER_KEY_TCP_FLAGS      /* be16 */
	TCA_FLOWER_KEY_TCP_FLAGS_MASK /* be16 */

	TCA_FLOWER_KEY_IP_TOS      /* u8 */
	TCA_FLOWER_KEY_IP_TOS_MASK /* u8 */
	TCA_FLOWER_KEY_IP_TTL      /* u8 */
	TCA_FLOWER_KEY_IP_TTL_MASK /* u8 */

	TCA_FLOWER_KEY_CVLAN_ID       /* be16 */
	TCA_FLOWER_KEY_CVLAN_PRIO     /* u8   */
	TCA_FLOWER_KEY_CVLAN_ETH_TYPE /* be16 */

	TCA_FLOWER_KEY_ENC_IP_TOS      /* u8 */
	TCA_FLOWER_KEY_ENC_IP_TOS_MASK /* u8 */
	TCA_FLOWER_KEY_ENC_IP_TTL      /* u8 */
	TCA_FLOWER_KEY_ENC_IP_TTL_MASK /* u8 */

	TCA_FLOWER_KEY_ENC_OPTS
	TCA_FLOWER_KEY_ENC_OPTS_MASK

	__TCA_FLOWER_MAX
)

// struct tc_sfq_qopt {
// 	unsigned	quantum;	/* Bytes per round allocated to flow */
// 	int		perturb_period;	/* Period of hash perturbation */
// 	__u32		limit;		/* Maximal packets in queue */
// 	unsigned	divisor;	/* Hash divisor  */
// 	unsigned	flows;		/* Maximal number of flows  */
// };

type TcSfqQopt struct {
	Quantum uint8
	Perturb int32
	Limit   uint32
	Divisor uint8
	Flows   uint8
}

func (x *TcSfqQopt) Len() int {
	return SizeofTcSfqQopt
}

func DeserializeTcSfqQopt(b []byte) *TcSfqQopt {
	return (*TcSfqQopt)(unsafe.Pointer(&b[0:SizeofTcSfqQopt][0]))
}

func (x *TcSfqQopt) Serialize() []byte {
	return (*(*[SizeofTcSfqQopt]byte)(unsafe.Pointer(x)))[:]
}

// struct tc_sfqred_stats {
// 	__u32           prob_drop;      /* Early drops, below max threshold */
// 	__u32           forced_drop;	/* Early drops, after max threshold */
// 	__u32           prob_mark;      /* Marked packets, below max threshold */
// 	__u32           forced_mark;    /* Marked packets, after max threshold */
// 	__u32           prob_mark_head; /* Marked packets, below max threshold */
// 	__u32           forced_mark_head;/* Marked packets, after max threshold */
// };
type TcSfqRedStats struct {
	ProbDrop       uint32
	ForcedDrop     uint32
	ProbMark       uint32
	ForcedMark     uint32
	ProbMarkHead   uint32
	ForcedMarkHead uint32
}

func (x *TcSfqRedStats) Len() int {
	return SizeofTcSfqRedStats
}

func DeserializeTcSfqRedStats(b []byte) *TcSfqRedStats {
	return (*TcSfqRedStats)(unsafe.Pointer(&b[0:SizeofTcSfqRedStats][0]))
}

func (x *TcSfqRedStats) Serialize() []byte {
	return (*(*[SizeofTcSfqRedStats]byte)(unsafe.Pointer(x)))[:]
}

// struct tc_sfq_qopt_v1 {
// 	struct tc_sfq_qopt v0;
// 	unsigned int	depth;		/* max number of packets per flow */
// 	unsigned int	headdrop;
// /* SFQRED parameters */
// 	__u32		limit;		/* HARD maximal flow queue length (bytes) */
// 	__u32		qth_min;	/* Min average length threshold (bytes) */
// 	__u32		qth_max;	/* Max average length threshold (bytes) */
// 	unsigned char   Wlog;		/* log(W)		*/
// 	unsigned char   Plog;		/* log(P_max/(qth_max-qth_min))	*/
// 	unsigned char   Scell_log;	/* cell size for idle damping */
// 	unsigned char	flags;
// 	__u32		max_P;		/* probability, high resolution */
// /* SFQRED stats */
// 	struct tc_sfqred_stats stats;
// };
type TcSfqQoptV1 struct {
	TcSfqQopt
	Depth    uint32
	HeadDrop uint32
	Limit    uint32
	QthMin   uint32
	QthMax   uint32
	Wlog     byte
	Plog     byte
	ScellLog byte
	Flags    byte
	MaxP     uint32
	TcSfqRedStats
}

func (x *TcSfqQoptV1) Len() int {
	return SizeofTcSfqQoptV1
}

func DeserializeTcSfqQoptV1(b []byte) *TcSfqQoptV1 {
	return (*TcSfqQoptV1)(unsafe.Pointer(&b[0:SizeofTcSfqQoptV1][0]))
}

func (x *TcSfqQoptV1) Serialize() []byte {
	return (*(*[SizeofTcSfqQoptV1]byte)(unsafe.Pointer(x)))[:]
}
  07070100000C42000081A4000000000000000000000001645E367C00001D06000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/nl/xfrm_linux.go    package nl

import (
	"bytes"
	"net"
	"unsafe"
)

// Infinity for packet and byte counts
const (
	XFRM_INF = ^uint64(0)
)

type XfrmMsgType uint8

type XfrmMsg interface {
	Type() XfrmMsgType
}

// Message Types
const (
	XFRM_MSG_BASE        XfrmMsgType = 0x10
	XFRM_MSG_NEWSA                   = 0x10
	XFRM_MSG_DELSA                   = 0x11
	XFRM_MSG_GETSA                   = 0x12
	XFRM_MSG_NEWPOLICY               = 0x13
	XFRM_MSG_DELPOLICY               = 0x14
	XFRM_MSG_GETPOLICY               = 0x15
	XFRM_MSG_ALLOCSPI                = 0x16
	XFRM_MSG_ACQUIRE                 = 0x17
	XFRM_MSG_EXPIRE                  = 0x18
	XFRM_MSG_UPDPOLICY               = 0x19
	XFRM_MSG_UPDSA                   = 0x1a
	XFRM_MSG_POLEXPIRE               = 0x1b
	XFRM_MSG_FLUSHSA                 = 0x1c
	XFRM_MSG_FLUSHPOLICY             = 0x1d
	XFRM_MSG_NEWAE                   = 0x1e
	XFRM_MSG_GETAE                   = 0x1f
	XFRM_MSG_REPORT                  = 0x20
	XFRM_MSG_MIGRATE                 = 0x21
	XFRM_MSG_NEWSADINFO              = 0x22
	XFRM_MSG_GETSADINFO              = 0x23
	XFRM_MSG_NEWSPDINFO              = 0x24
	XFRM_MSG_GETSPDINFO              = 0x25
	XFRM_MSG_MAPPING                 = 0x26
	XFRM_MSG_MAX                     = 0x26
	XFRM_NR_MSGTYPES                 = 0x17
)

// Attribute types
const (
	/* Netlink message attributes.  */
	XFRMA_UNSPEC    = iota
	XFRMA_ALG_AUTH  /* struct xfrm_algo */
	XFRMA_ALG_CRYPT /* struct xfrm_algo */
	XFRMA_ALG_COMP  /* struct xfrm_algo */
	XFRMA_ENCAP     /* struct xfrm_algo + struct xfrm_encap_tmpl */
	XFRMA_TMPL      /* 1 or more struct xfrm_user_tmpl */
	XFRMA_SA        /* struct xfrm_usersa_info  */
	XFRMA_POLICY    /* struct xfrm_userpolicy_info */
	XFRMA_SEC_CTX   /* struct xfrm_sec_ctx */
	XFRMA_LTIME_VAL
	XFRMA_REPLAY_VAL
	XFRMA_REPLAY_THRESH
	XFRMA_ETIMER_THRESH
	XFRMA_SRCADDR     /* xfrm_address_t */
	XFRMA_COADDR      /* xfrm_address_t */
	XFRMA_LASTUSED    /* unsigned long  */
	XFRMA_POLICY_TYPE /* struct xfrm_userpolicy_type */
	XFRMA_MIGRATE
	XFRMA_ALG_AEAD       /* struct xfrm_algo_aead */
	XFRMA_KMADDRESS      /* struct xfrm_user_kmaddress */
	XFRMA_ALG_AUTH_TRUNC /* struct xfrm_algo_auth */
	XFRMA_MARK           /* struct xfrm_mark */
	XFRMA_TFCPAD         /* __u32 */
	XFRMA_REPLAY_ESN_VAL /* struct xfrm_replay_esn */
	XFRMA_SA_EXTRA_FLAGS /* __u32 */
	XFRMA_PROTO          /* __u8 */
	XFRMA_ADDRESS_FILTER /* struct xfrm_address_filter */
	XFRMA_PAD
	XFRMA_OFFLOAD_DEV   /* struct xfrm_state_offload */
	XFRMA_SET_MARK      /* __u32 */
	XFRMA_SET_MARK_MASK /* __u32 */
	XFRMA_IF_ID         /* __u32 */

	XFRMA_MAX = iota - 1
)

const XFRMA_OUTPUT_MARK = XFRMA_SET_MARK

const (
	SizeofXfrmAddress     = 0x10
	SizeofXfrmSelector    = 0x38
	SizeofXfrmLifetimeCfg = 0x40
	SizeofXfrmLifetimeCur = 0x20
	SizeofXfrmId          = 0x18
	SizeofXfrmMark        = 0x08
)

// Netlink groups
const (
	XFRMNLGRP_NONE    = 0x0
	XFRMNLGRP_ACQUIRE = 0x1
	XFRMNLGRP_EXPIRE  = 0x2
	XFRMNLGRP_SA      = 0x3
	XFRMNLGRP_POLICY  = 0x4
	XFRMNLGRP_AEVENTS = 0x5
	XFRMNLGRP_REPORT  = 0x6
	XFRMNLGRP_MIGRATE = 0x7
	XFRMNLGRP_MAPPING = 0x8
	__XFRMNLGRP_MAX   = 0x9
)

// typedef union {
//   __be32    a4;
//   __be32    a6[4];
// } xfrm_address_t;

type XfrmAddress [SizeofXfrmAddress]byte

func (x *XfrmAddress) ToIP() net.IP {
	var empty = [12]byte{}
	ip := make(net.IP, net.IPv6len)
	if bytes.Equal(x[4:16], empty[:]) {
		ip[10] = 0xff
		ip[11] = 0xff
		copy(ip[12:16], x[0:4])
	} else {
		copy(ip[:], x[:])
	}
	return ip
}

func (x *XfrmAddress) ToIPNet(prefixlen uint8) *net.IPNet {
	ip := x.ToIP()
	if GetIPFamily(ip) == FAMILY_V4 {
		return &net.IPNet{IP: ip, Mask: net.CIDRMask(int(prefixlen), 32)}
	}
	return &net.IPNet{IP: ip, Mask: net.CIDRMask(int(prefixlen), 128)}
}

func (x *XfrmAddress) FromIP(ip net.IP) {
	var empty = [16]byte{}
	if len(ip) < net.IPv4len {
		copy(x[4:16], empty[:])
	} else if GetIPFamily(ip) == FAMILY_V4 {
		copy(x[0:4], ip.To4()[0:4])
		copy(x[4:16], empty[:12])
	} else {
		copy(x[0:16], ip.To16()[0:16])
	}
}

func DeserializeXfrmAddress(b []byte) *XfrmAddress {
	return (*XfrmAddress)(unsafe.Pointer(&b[0:SizeofXfrmAddress][0]))
}

func (x *XfrmAddress) Serialize() []byte {
	return (*(*[SizeofXfrmAddress]byte)(unsafe.Pointer(x)))[:]
}

// struct xfrm_selector {
//   xfrm_address_t  daddr;
//   xfrm_address_t  saddr;
//   __be16  dport;
//   __be16  dport_mask;
//   __be16  sport;
//   __be16  sport_mask;
//   __u16 family;
//   __u8  prefixlen_d;
//   __u8  prefixlen_s;
//   __u8  proto;
//   int ifindex;
//   __kernel_uid32_t  user;
// };

type XfrmSelector struct {
	Daddr      XfrmAddress
	Saddr      XfrmAddress
	Dport      uint16 // big endian
	DportMask  uint16 // big endian
	Sport      uint16 // big endian
	SportMask  uint16 // big endian
	Family     uint16
	PrefixlenD uint8
	PrefixlenS uint8
	Proto      uint8
	Pad        [3]byte
	Ifindex    int32
	User       uint32
}

func (msg *XfrmSelector) Len() int {
	return SizeofXfrmSelector
}

func DeserializeXfrmSelector(b []byte) *XfrmSelector {
	return (*XfrmSelector)(unsafe.Pointer(&b[0:SizeofXfrmSelector][0]))
}

func (msg *XfrmSelector) Serialize() []byte {
	return (*(*[SizeofXfrmSelector]byte)(unsafe.Pointer(msg)))[:]
}

// struct xfrm_lifetime_cfg {
//   __u64 soft_byte_limit;
//   __u64 hard_byte_limit;
//   __u64 soft_packet_limit;
//   __u64 hard_packet_limit;
//   __u64 soft_add_expires_seconds;
//   __u64 hard_add_expires_seconds;
//   __u64 soft_use_expires_seconds;
//   __u64 hard_use_expires_seconds;
// };
//

type XfrmLifetimeCfg struct {
	SoftByteLimit         uint64
	HardByteLimit         uint64
	SoftPacketLimit       uint64
	HardPacketLimit       uint64
	SoftAddExpiresSeconds uint64
	HardAddExpiresSeconds uint64
	SoftUseExpiresSeconds uint64
	HardUseExpiresSeconds uint64
}

func (msg *XfrmLifetimeCfg) Len() int {
	return SizeofXfrmLifetimeCfg
}

func DeserializeXfrmLifetimeCfg(b []byte) *XfrmLifetimeCfg {
	return (*XfrmLifetimeCfg)(unsafe.Pointer(&b[0:SizeofXfrmLifetimeCfg][0]))
}

func (msg *XfrmLifetimeCfg) Serialize() []byte {
	return (*(*[SizeofXfrmLifetimeCfg]byte)(unsafe.Pointer(msg)))[:]
}

// struct xfrm_lifetime_cur {
//   __u64 bytes;
//   __u64 packets;
//   __u64 add_time;
//   __u64 use_time;
// };

type XfrmLifetimeCur struct {
	Bytes   uint64
	Packets uint64
	AddTime uint64
	UseTime uint64
}

func (msg *XfrmLifetimeCur) Len() int {
	return SizeofXfrmLifetimeCur
}

func DeserializeXfrmLifetimeCur(b []byte) *XfrmLifetimeCur {
	return (*XfrmLifetimeCur)(unsafe.Pointer(&b[0:SizeofXfrmLifetimeCur][0]))
}

func (msg *XfrmLifetimeCur) Serialize() []byte {
	return (*(*[SizeofXfrmLifetimeCur]byte)(unsafe.Pointer(msg)))[:]
}

// struct xfrm_id {
//   xfrm_address_t  daddr;
//   __be32    spi;
//   __u8    proto;
// };

type XfrmId struct {
	Daddr XfrmAddress
	Spi   uint32 // big endian
	Proto uint8
	Pad   [3]byte
}

func (msg *XfrmId) Len() int {
	return SizeofXfrmId
}

func DeserializeXfrmId(b []byte) *XfrmId {
	return (*XfrmId)(unsafe.Pointer(&b[0:SizeofXfrmId][0]))
}

func (msg *XfrmId) Serialize() []byte {
	return (*(*[SizeofXfrmId]byte)(unsafe.Pointer(msg)))[:]
}

type XfrmMark struct {
	Value uint32
	Mask  uint32
}

func (msg *XfrmMark) Len() int {
	return SizeofXfrmMark
}

func DeserializeXfrmMark(b []byte) *XfrmMark {
	return (*XfrmMark)(unsafe.Pointer(&b[0:SizeofXfrmMark][0]))
}

func (msg *XfrmMark) Serialize() []byte {
	return (*(*[SizeofXfrmMark]byte)(unsafe.Pointer(msg)))[:]
}
  07070100000C43000081A4000000000000000000000001645E367C00000252000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/nl/xfrm_monitor_linux.go    package nl

import (
	"unsafe"
)

const (
	SizeofXfrmUserExpire = 0xe8
)

// struct xfrm_user_expire {
// 	struct xfrm_usersa_info		state;
// 	__u8				hard;
// };

type XfrmUserExpire struct {
	XfrmUsersaInfo XfrmUsersaInfo
	Hard           uint8
	Pad            [7]byte
}

func (msg *XfrmUserExpire) Len() int {
	return SizeofXfrmUserExpire
}

func DeserializeXfrmUserExpire(b []byte) *XfrmUserExpire {
	return (*XfrmUserExpire)(unsafe.Pointer(&b[0:SizeofXfrmUserExpire][0]))
}

func (msg *XfrmUserExpire) Serialize() []byte {
	return (*(*[SizeofXfrmUserExpire]byte)(unsafe.Pointer(msg)))[:]
}
  07070100000C44000081A4000000000000000000000001645E367C00000A48000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/nl/xfrm_policy_linux.go package nl

import (
	"unsafe"
)

const (
	SizeofXfrmUserpolicyId   = 0x40
	SizeofXfrmUserpolicyInfo = 0xa8
	SizeofXfrmUserTmpl       = 0x40
)

// struct xfrm_userpolicy_id {
//   struct xfrm_selector    sel;
//   __u32       index;
//   __u8        dir;
// };
//

type XfrmUserpolicyId struct {
	Sel   XfrmSelector
	Index uint32
	Dir   uint8
	Pad   [3]byte
}

func (msg *XfrmUserpolicyId) Len() int {
	return SizeofXfrmUserpolicyId
}

func DeserializeXfrmUserpolicyId(b []byte) *XfrmUserpolicyId {
	return (*XfrmUserpolicyId)(unsafe.Pointer(&b[0:SizeofXfrmUserpolicyId][0]))
}

func (msg *XfrmUserpolicyId) Serialize() []byte {
	return (*(*[SizeofXfrmUserpolicyId]byte)(unsafe.Pointer(msg)))[:]
}

// struct xfrm_userpolicy_info {
//   struct xfrm_selector    sel;
//   struct xfrm_lifetime_cfg  lft;
//   struct xfrm_lifetime_cur  curlft;
//   __u32       priority;
//   __u32       index;
//   __u8        dir;
//   __u8        action;
// #define XFRM_POLICY_ALLOW 0
// #define XFRM_POLICY_BLOCK 1
//   __u8        flags;
// #define XFRM_POLICY_LOCALOK 1 /* Allow user to override global policy */
//   /* Automatically expand selector to include matching ICMP payloads. */
// #define XFRM_POLICY_ICMP  2
//   __u8        share;
// };

type XfrmUserpolicyInfo struct {
	Sel      XfrmSelector
	Lft      XfrmLifetimeCfg
	Curlft   XfrmLifetimeCur
	Priority uint32
	Index    uint32
	Dir      uint8
	Action   uint8
	Flags    uint8
	Share    uint8
	Pad      [4]byte
}

func (msg *XfrmUserpolicyInfo) Len() int {
	return SizeofXfrmUserpolicyInfo
}

func DeserializeXfrmUserpolicyInfo(b []byte) *XfrmUserpolicyInfo {
	return (*XfrmUserpolicyInfo)(unsafe.Pointer(&b[0:SizeofXfrmUserpolicyInfo][0]))
}

func (msg *XfrmUserpolicyInfo) Serialize() []byte {
	return (*(*[SizeofXfrmUserpolicyInfo]byte)(unsafe.Pointer(msg)))[:]
}

// struct xfrm_user_tmpl {
//   struct xfrm_id    id;
//   __u16     family;
//   xfrm_address_t    saddr;
//   __u32     reqid;
//   __u8      mode;
//   __u8      share;
//   __u8      optional;
//   __u32     aalgos;
//   __u32     ealgos;
//   __u32     calgos;
// }

type XfrmUserTmpl struct {
	XfrmId   XfrmId
	Family   uint16
	Pad1     [2]byte
	Saddr    XfrmAddress
	Reqid    uint32
	Mode     uint8
	Share    uint8
	Optional uint8
	Pad2     byte
	Aalgos   uint32
	Ealgos   uint32
	Calgos   uint32
}

func (msg *XfrmUserTmpl) Len() int {
	return SizeofXfrmUserTmpl
}

func DeserializeXfrmUserTmpl(b []byte) *XfrmUserTmpl {
	return (*XfrmUserTmpl)(unsafe.Pointer(&b[0:SizeofXfrmUserTmpl][0]))
}

func (msg *XfrmUserTmpl) Serialize() []byte {
	return (*(*[SizeofXfrmUserTmpl]byte)(unsafe.Pointer(msg)))[:]
}
07070100000C45000081A4000000000000000000000001645E367C00001EA7000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/nl/xfrm_state_linux.go  package nl

import (
	"unsafe"
)

const (
	SizeofXfrmUsersaId       = 0x18
	SizeofXfrmStats          = 0x0c
	SizeofXfrmUsersaInfo     = 0xe0
	SizeofXfrmUserSpiInfo    = 0xe8
	SizeofXfrmAlgo           = 0x44
	SizeofXfrmAlgoAuth       = 0x48
	SizeofXfrmAlgoAEAD       = 0x48
	SizeofXfrmEncapTmpl      = 0x18
	SizeofXfrmUsersaFlush    = 0x1
	SizeofXfrmReplayStateEsn = 0x18
)

const (
	XFRM_STATE_NOECN      = 1
	XFRM_STATE_DECAP_DSCP = 2
	XFRM_STATE_NOPMTUDISC = 4
	XFRM_STATE_WILDRECV   = 8
	XFRM_STATE_ICMP       = 16
	XFRM_STATE_AF_UNSPEC  = 32
	XFRM_STATE_ALIGN4     = 64
	XFRM_STATE_ESN        = 128
)

// struct xfrm_usersa_id {
//   xfrm_address_t      daddr;
//   __be32        spi;
//   __u16       family;
//   __u8        proto;
// };

type XfrmUsersaId struct {
	Daddr  XfrmAddress
	Spi    uint32 // big endian
	Family uint16
	Proto  uint8
	Pad    byte
}

func (msg *XfrmUsersaId) Len() int {
	return SizeofXfrmUsersaId
}

func DeserializeXfrmUsersaId(b []byte) *XfrmUsersaId {
	return (*XfrmUsersaId)(unsafe.Pointer(&b[0:SizeofXfrmUsersaId][0]))
}

func (msg *XfrmUsersaId) Serialize() []byte {
	return (*(*[SizeofXfrmUsersaId]byte)(unsafe.Pointer(msg)))[:]
}

// struct xfrm_stats {
//   __u32 replay_window;
//   __u32 replay;
//   __u32 integrity_failed;
// };

type XfrmStats struct {
	ReplayWindow    uint32
	Replay          uint32
	IntegrityFailed uint32
}

func (msg *XfrmStats) Len() int {
	return SizeofXfrmStats
}

func DeserializeXfrmStats(b []byte) *XfrmStats {
	return (*XfrmStats)(unsafe.Pointer(&b[0:SizeofXfrmStats][0]))
}

func (msg *XfrmStats) Serialize() []byte {
	return (*(*[SizeofXfrmStats]byte)(unsafe.Pointer(msg)))[:]
}

// struct xfrm_usersa_info {
//   struct xfrm_selector    sel;
//   struct xfrm_id      id;
//   xfrm_address_t      saddr;
//   struct xfrm_lifetime_cfg  lft;
//   struct xfrm_lifetime_cur  curlft;
//   struct xfrm_stats   stats;
//   __u32       seq;
//   __u32       reqid;
//   __u16       family;
//   __u8        mode;   /* XFRM_MODE_xxx */
//   __u8        replay_window;
//   __u8        flags;
// #define XFRM_STATE_NOECN  1
// #define XFRM_STATE_DECAP_DSCP 2
// #define XFRM_STATE_NOPMTUDISC 4
// #define XFRM_STATE_WILDRECV 8
// #define XFRM_STATE_ICMP   16
// #define XFRM_STATE_AF_UNSPEC  32
// #define XFRM_STATE_ALIGN4 64
// #define XFRM_STATE_ESN    128
// };
//
// #define XFRM_SA_XFLAG_DONT_ENCAP_DSCP 1
//

type XfrmUsersaInfo struct {
	Sel          XfrmSelector
	Id           XfrmId
	Saddr        XfrmAddress
	Lft          XfrmLifetimeCfg
	Curlft       XfrmLifetimeCur
	Stats        XfrmStats
	Seq          uint32
	Reqid        uint32
	Family       uint16
	Mode         uint8
	ReplayWindow uint8
	Flags        uint8
	Pad          [7]byte
}

func (msg *XfrmUsersaInfo) Len() int {
	return SizeofXfrmUsersaInfo
}

func DeserializeXfrmUsersaInfo(b []byte) *XfrmUsersaInfo {
	return (*XfrmUsersaInfo)(unsafe.Pointer(&b[0:SizeofXfrmUsersaInfo][0]))
}

func (msg *XfrmUsersaInfo) Serialize() []byte {
	return (*(*[SizeofXfrmUsersaInfo]byte)(unsafe.Pointer(msg)))[:]
}

// struct xfrm_userspi_info {
// 	struct xfrm_usersa_info		info;
// 	__u32				min;
// 	__u32				max;
// };

type XfrmUserSpiInfo struct {
	XfrmUsersaInfo XfrmUsersaInfo
	Min            uint32
	Max            uint32
}

func (msg *XfrmUserSpiInfo) Len() int {
	return SizeofXfrmUserSpiInfo
}

func DeserializeXfrmUserSpiInfo(b []byte) *XfrmUserSpiInfo {
	return (*XfrmUserSpiInfo)(unsafe.Pointer(&b[0:SizeofXfrmUserSpiInfo][0]))
}

func (msg *XfrmUserSpiInfo) Serialize() []byte {
	return (*(*[SizeofXfrmUserSpiInfo]byte)(unsafe.Pointer(msg)))[:]
}

// struct xfrm_algo {
//   char    alg_name[64];
//   unsigned int  alg_key_len;    /* in bits */
//   char    alg_key[0];
// };

type XfrmAlgo struct {
	AlgName   [64]byte
	AlgKeyLen uint32
	AlgKey    []byte
}

func (msg *XfrmAlgo) Len() int {
	return SizeofXfrmAlgo + int(msg.AlgKeyLen/8)
}

func DeserializeXfrmAlgo(b []byte) *XfrmAlgo {
	ret := XfrmAlgo{}
	copy(ret.AlgName[:], b[0:64])
	ret.AlgKeyLen = *(*uint32)(unsafe.Pointer(&b[64]))
	ret.AlgKey = b[68:ret.Len()]
	return &ret
}

func (msg *XfrmAlgo) Serialize() []byte {
	b := make([]byte, msg.Len())
	copy(b[0:64], msg.AlgName[:])
	copy(b[64:68], (*(*[4]byte)(unsafe.Pointer(&msg.AlgKeyLen)))[:])
	copy(b[68:msg.Len()], msg.AlgKey[:])
	return b
}

// struct xfrm_algo_auth {
//   char    alg_name[64];
//   unsigned int  alg_key_len;    /* in bits */
//   unsigned int  alg_trunc_len;  /* in bits */
//   char    alg_key[0];
// };

type XfrmAlgoAuth struct {
	AlgName     [64]byte
	AlgKeyLen   uint32
	AlgTruncLen uint32
	AlgKey      []byte
}

func (msg *XfrmAlgoAuth) Len() int {
	return SizeofXfrmAlgoAuth + int(msg.AlgKeyLen/8)
}

func DeserializeXfrmAlgoAuth(b []byte) *XfrmAlgoAuth {
	ret := XfrmAlgoAuth{}
	copy(ret.AlgName[:], b[0:64])
	ret.AlgKeyLen = *(*uint32)(unsafe.Pointer(&b[64]))
	ret.AlgTruncLen = *(*uint32)(unsafe.Pointer(&b[68]))
	ret.AlgKey = b[72:ret.Len()]
	return &ret
}

func (msg *XfrmAlgoAuth) Serialize() []byte {
	b := make([]byte, msg.Len())
	copy(b[0:64], msg.AlgName[:])
	copy(b[64:68], (*(*[4]byte)(unsafe.Pointer(&msg.AlgKeyLen)))[:])
	copy(b[68:72], (*(*[4]byte)(unsafe.Pointer(&msg.AlgTruncLen)))[:])
	copy(b[72:msg.Len()], msg.AlgKey[:])
	return b
}

// struct xfrm_algo_aead {
//   char    alg_name[64];
//   unsigned int  alg_key_len;  /* in bits */
//   unsigned int  alg_icv_len;  /* in bits */
//   char    alg_key[0];
// }

type XfrmAlgoAEAD struct {
	AlgName   [64]byte
	AlgKeyLen uint32
	AlgICVLen uint32
	AlgKey    []byte
}

func (msg *XfrmAlgoAEAD) Len() int {
	return SizeofXfrmAlgoAEAD + int(msg.AlgKeyLen/8)
}

func DeserializeXfrmAlgoAEAD(b []byte) *XfrmAlgoAEAD {
	ret := XfrmAlgoAEAD{}
	copy(ret.AlgName[:], b[0:64])
	ret.AlgKeyLen = *(*uint32)(unsafe.Pointer(&b[64]))
	ret.AlgICVLen = *(*uint32)(unsafe.Pointer(&b[68]))
	ret.AlgKey = b[72:ret.Len()]
	return &ret
}

func (msg *XfrmAlgoAEAD) Serialize() []byte {
	b := make([]byte, msg.Len())
	copy(b[0:64], msg.AlgName[:])
	copy(b[64:68], (*(*[4]byte)(unsafe.Pointer(&msg.AlgKeyLen)))[:])
	copy(b[68:72], (*(*[4]byte)(unsafe.Pointer(&msg.AlgICVLen)))[:])
	copy(b[72:msg.Len()], msg.AlgKey[:])
	return b
}

// struct xfrm_encap_tmpl {
//   __u16   encap_type;
//   __be16    encap_sport;
//   __be16    encap_dport;
//   xfrm_address_t  encap_oa;
// };

type XfrmEncapTmpl struct {
	EncapType  uint16
	EncapSport uint16 // big endian
	EncapDport uint16 // big endian
	Pad        [2]byte
	EncapOa    XfrmAddress
}

func (msg *XfrmEncapTmpl) Len() int {
	return SizeofXfrmEncapTmpl
}

func DeserializeXfrmEncapTmpl(b []byte) *XfrmEncapTmpl {
	return (*XfrmEncapTmpl)(unsafe.Pointer(&b[0:SizeofXfrmEncapTmpl][0]))
}

func (msg *XfrmEncapTmpl) Serialize() []byte {
	return (*(*[SizeofXfrmEncapTmpl]byte)(unsafe.Pointer(msg)))[:]
}

// struct xfrm_usersa_flush {
//    __u8 proto;
// };

type XfrmUsersaFlush struct {
	Proto uint8
}

func (msg *XfrmUsersaFlush) Len() int {
	return SizeofXfrmUsersaFlush
}

func DeserializeXfrmUsersaFlush(b []byte) *XfrmUsersaFlush {
	return (*XfrmUsersaFlush)(unsafe.Pointer(&b[0:SizeofXfrmUsersaFlush][0]))
}

func (msg *XfrmUsersaFlush) Serialize() []byte {
	return (*(*[SizeofXfrmUsersaFlush]byte)(unsafe.Pointer(msg)))[:]
}

// struct xfrm_replay_state_esn {
//     unsigned int    bmp_len;
//     __u32           oseq;
//     __u32           seq;
//     __u32           oseq_hi;
//     __u32           seq_hi;
//     __u32           replay_window;
//     __u32           bmp[0];
// };

type XfrmReplayStateEsn struct {
	BmpLen       uint32
	OSeq         uint32
	Seq          uint32
	OSeqHi       uint32
	SeqHi        uint32
	ReplayWindow uint32
	Bmp          []uint32
}

func (msg *XfrmReplayStateEsn) Serialize() []byte {
	// We deliberately do not pass Bmp, as it gets set by the kernel.
	return (*(*[SizeofXfrmReplayStateEsn]byte)(unsafe.Pointer(msg)))[:]
}
 07070100000C46000081A4000000000000000000000001645E367C00000217000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/order.go    package netlink

import (
	"encoding/binary"

	"github.com/vishvananda/netlink/nl"
)

var (
	native       = nl.NativeEndian()
	networkOrder = binary.BigEndian
)

func htonl(val uint32) []byte {
	bytes := make([]byte, 4)
	binary.BigEndian.PutUint32(bytes, val)
	return bytes
}

func htons(val uint16) []byte {
	bytes := make([]byte, 2)
	binary.BigEndian.PutUint16(bytes, val)
	return bytes
}

func ntohl(buf []byte) uint32 {
	return binary.BigEndian.Uint32(buf)
}

func ntohs(buf []byte) uint16 {
	return binary.BigEndian.Uint16(buf)
}
 07070100000C47000081A4000000000000000000000001645E367C00000F50000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/proc_event_linux.go package netlink

import (
	"bytes"
	"encoding/binary"
	"fmt"
	"os"
	"syscall"

	"github.com/vishvananda/netlink/nl"
	"github.com/vishvananda/netns"
	"golang.org/x/sys/unix"
)

const CN_IDX_PROC = 0x1

const (
	PROC_EVENT_NONE     = 0x00000000
	PROC_EVENT_FORK     = 0x00000001
	PROC_EVENT_EXEC     = 0x00000002
	PROC_EVENT_UID      = 0x00000004
	PROC_EVENT_GID      = 0x00000040
	PROC_EVENT_SID      = 0x00000080
	PROC_EVENT_PTRACE   = 0x00000100
	PROC_EVENT_COMM     = 0x00000200
	PROC_EVENT_COREDUMP = 0x40000000
	PROC_EVENT_EXIT     = 0x80000000
)

const (
	CN_VAL_PROC          = 0x1
	PROC_CN_MCAST_LISTEN = 0x1
)

type ProcEventMsg interface {
	Pid() uint32
	Tgid() uint32
}

type ProcEventHeader struct {
	What      uint32
	CPU       uint32
	Timestamp uint64
}

type ProcEvent struct {
	ProcEventHeader
	Msg ProcEventMsg
}

func (pe *ProcEvent) setHeader(h ProcEventHeader) {
	pe.What = h.What
	pe.CPU = h.CPU
	pe.Timestamp = h.Timestamp
}

type ExitProcEvent struct {
	ProcessPid  uint32
	ProcessTgid uint32
	ExitCode    uint32
	ExitSignal  uint32
	ParentPid   uint32
	ParentTgid  uint32
}

type ExitProcEvent2 struct {
	ProcessPid  uint32
	ProcessTgid uint32
	ExitCode    uint32
	ExitSignal  uint32
	ParentPid   uint32
	ParentTgid  uint32
}

func (e *ExitProcEvent) Pid() uint32 {
	return e.ProcessPid
}

func (e *ExitProcEvent) Tgid() uint32 {
	return e.ProcessTgid
}

type ExecProcEvent struct {
	ProcessPid  uint32
	ProcessTgid uint32
}

func (e *ExecProcEvent) Pid() uint32 {
	return e.ProcessPid
}

func (e *ExecProcEvent) Tgid() uint32 {
	return e.ProcessTgid
}

type ForkProcEvent struct {
	ParentPid  uint32
	ParentTgid uint32
	ChildPid   uint32
	ChildTgid  uint32
}

func (e *ForkProcEvent) Pid() uint32 {
	return e.ParentPid
}

func (e *ForkProcEvent) Tgid() uint32 {
	return e.ParentTgid
}

type CommProcEvent struct {
	ProcessPid  uint32
	ProcessTgid uint32
	Comm        [16]byte
}

func (e *CommProcEvent) Pid() uint32 {
	return e.ProcessPid
}

func (e *CommProcEvent) Tgid() uint32 {
	return e.ProcessTgid
}

func ProcEventMonitor(ch chan<- ProcEvent, done <-chan struct{}, errorChan chan<- error) error {
	h, err := NewHandle()
	if err != nil {
		return err
	}
	defer h.Delete()

	s, err := nl.SubscribeAt(netns.None(), netns.None(), unix.NETLINK_CONNECTOR, CN_IDX_PROC)
	if err != nil {
		return err
	}

	var nlmsg nl.NetlinkRequest

	nlmsg.Pid = uint32(os.Getpid())
	nlmsg.Type = unix.NLMSG_DONE
	nlmsg.Len = uint32(unix.SizeofNlMsghdr)

	cm := nl.NewCnMsg(CN_IDX_PROC, CN_VAL_PROC, PROC_CN_MCAST_LISTEN)
	nlmsg.AddData(cm)

	s.Send(&nlmsg)

	if done != nil {
		go func() {
			<-done
			s.Close()
		}()
	}

	go func() {
		defer close(ch)
		for {
			msgs, from, err := s.Receive()
			if err != nil {
				errorChan <- err
				return
			}
			if from.Pid != nl.PidKernel {
				errorChan <- fmt.Errorf("Wrong sender portid %d, expected %d", from.Pid, nl.PidKernel)
				return
			}

			for _, m := range msgs {
				e := parseNetlinkMessage(m)
				if e != nil {
					ch <- *e
				}
			}

		}
	}()

	return nil
}

func parseNetlinkMessage(m syscall.NetlinkMessage) *ProcEvent {
	if m.Header.Type == unix.NLMSG_DONE {
		buf := bytes.NewBuffer(m.Data)
		msg := &nl.CnMsg{}
		hdr := &ProcEventHeader{}
		binary.Read(buf, nl.NativeEndian(), msg)
		binary.Read(buf, nl.NativeEndian(), hdr)

		pe := &ProcEvent{}
		pe.setHeader(*hdr)
		switch hdr.What {
		case PROC_EVENT_EXIT:
			event := &ExitProcEvent{}
			binary.Read(buf, nl.NativeEndian(), event)
			pe.Msg = event
			return pe
		case PROC_EVENT_FORK:
			event := &ForkProcEvent{}
			binary.Read(buf, nl.NativeEndian(), event)
			pe.Msg = event
			return pe
		case PROC_EVENT_EXEC:
			event := &ExecProcEvent{}
			binary.Read(buf, nl.NativeEndian(), event)
			pe.Msg = event
			return pe
		case PROC_EVENT_COMM:
			event := &CommProcEvent{}
			binary.Read(buf, nl.NativeEndian(), event)
			pe.Msg = event
			return pe
		}
		return nil
	}

	return nil
}
07070100000C48000081A4000000000000000000000001645E367C0000048A000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/protinfo.go package netlink

import (
	"strings"
)

// Protinfo represents bridge flags from netlink.
type Protinfo struct {
	Hairpin      bool
	Guard        bool
	FastLeave    bool
	RootBlock    bool
	Learning     bool
	Flood        bool
	ProxyArp     bool
	ProxyArpWiFi bool
}

// String returns a list of enabled flags
func (prot *Protinfo) String() string {
	if prot == nil {
		return "<nil>"
	}

	var boolStrings []string
	if prot.Hairpin {
		boolStrings = append(boolStrings, "Hairpin")
	}
	if prot.Guard {
		boolStrings = append(boolStrings, "Guard")
	}
	if prot.FastLeave {
		boolStrings = append(boolStrings, "FastLeave")
	}
	if prot.RootBlock {
		boolStrings = append(boolStrings, "RootBlock")
	}
	if prot.Learning {
		boolStrings = append(boolStrings, "Learning")
	}
	if prot.Flood {
		boolStrings = append(boolStrings, "Flood")
	}
	if prot.ProxyArp {
		boolStrings = append(boolStrings, "ProxyArp")
	}
	if prot.ProxyArpWiFi {
		boolStrings = append(boolStrings, "ProxyArpWiFi")
	}
	return strings.Join(boolStrings, " ")
}

func boolToByte(x bool) []byte {
	if x {
		return []byte{1}
	}
	return []byte{0}
}

func byteToBool(x byte) bool {
	return uint8(x) != 0
}
  07070100000C49000081A4000000000000000000000001645E367C00000716000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/protinfo_linux.go   package netlink

import (
	"fmt"
	"syscall"

	"github.com/vishvananda/netlink/nl"
	"golang.org/x/sys/unix"
)

func LinkGetProtinfo(link Link) (Protinfo, error) {
	return pkgHandle.LinkGetProtinfo(link)
}

func (h *Handle) LinkGetProtinfo(link Link) (Protinfo, error) {
	base := link.Attrs()
	h.ensureIndex(base)
	var pi Protinfo
	req := h.newNetlinkRequest(unix.RTM_GETLINK, unix.NLM_F_DUMP)
	msg := nl.NewIfInfomsg(unix.AF_BRIDGE)
	req.AddData(msg)
	msgs, err := req.Execute(unix.NETLINK_ROUTE, 0)
	if err != nil {
		return pi, err
	}

	for _, m := range msgs {
		ans := nl.DeserializeIfInfomsg(m)
		if int(ans.Index) != base.Index {
			continue
		}
		attrs, err := nl.ParseRouteAttr(m[ans.Len():])
		if err != nil {
			return pi, err
		}
		for _, attr := range attrs {
			if attr.Attr.Type != unix.IFLA_PROTINFO|unix.NLA_F_NESTED {
				continue
			}
			infos, err := nl.ParseRouteAttr(attr.Value)
			if err != nil {
				return pi, err
			}
			pi = parseProtinfo(infos)

			return pi, nil
		}
	}
	return pi, fmt.Errorf("Device with index %d not found", base.Index)
}

func parseProtinfo(infos []syscall.NetlinkRouteAttr) (pi Protinfo) {
	for _, info := range infos {
		switch info.Attr.Type {
		case nl.IFLA_BRPORT_MODE:
			pi.Hairpin = byteToBool(info.Value[0])
		case nl.IFLA_BRPORT_GUARD:
			pi.Guard = byteToBool(info.Value[0])
		case nl.IFLA_BRPORT_FAST_LEAVE:
			pi.FastLeave = byteToBool(info.Value[0])
		case nl.IFLA_BRPORT_PROTECT:
			pi.RootBlock = byteToBool(info.Value[0])
		case nl.IFLA_BRPORT_LEARNING:
			pi.Learning = byteToBool(info.Value[0])
		case nl.IFLA_BRPORT_UNICAST_FLOOD:
			pi.Flood = byteToBool(info.Value[0])
		case nl.IFLA_BRPORT_PROXYARP:
			pi.ProxyArp = byteToBool(info.Value[0])
		case nl.IFLA_BRPORT_PROXYARP_WIFI:
			pi.ProxyArpWiFi = byteToBool(info.Value[0])
		}
	}
	return
}
  07070100000C4A000081A4000000000000000000000001645E367C00001EB9000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/qdisc.go    package netlink

import (
	"fmt"
	"math"
)

const (
	HANDLE_NONE      = 0
	HANDLE_INGRESS   = 0xFFFFFFF1
	HANDLE_CLSACT    = HANDLE_INGRESS
	HANDLE_ROOT      = 0xFFFFFFFF
	PRIORITY_MAP_LEN = 16
)
const (
	HANDLE_MIN_INGRESS = 0xFFFFFFF2
	HANDLE_MIN_EGRESS  = 0xFFFFFFF3
)

type Qdisc interface {
	Attrs() *QdiscAttrs
	Type() string
}

// QdiscAttrs represents a netlink qdisc. A qdisc is associated with a link,
// has a handle, a parent and a refcnt. The root qdisc of a device should
// have parent == HANDLE_ROOT.
type QdiscAttrs struct {
	LinkIndex int
	Handle    uint32
	Parent    uint32
	Refcnt    uint32 // read only
}

func (q QdiscAttrs) String() string {
	return fmt.Sprintf("{LinkIndex: %d, Handle: %s, Parent: %s, Refcnt: %d}", q.LinkIndex, HandleStr(q.Handle), HandleStr(q.Parent), q.Refcnt)
}

func MakeHandle(major, minor uint16) uint32 {
	return (uint32(major) << 16) | uint32(minor)
}

func MajorMinor(handle uint32) (uint16, uint16) {
	return uint16((handle & 0xFFFF0000) >> 16), uint16(handle & 0x0000FFFFF)
}

func HandleStr(handle uint32) string {
	switch handle {
	case HANDLE_NONE:
		return "none"
	case HANDLE_INGRESS:
		return "ingress"
	case HANDLE_ROOT:
		return "root"
	default:
		major, minor := MajorMinor(handle)
		return fmt.Sprintf("%x:%x", major, minor)
	}
}

func Percentage2u32(percentage float32) uint32 {
	// FIXME this is most likely not the best way to convert from % to uint32
	if percentage == 100 {
		return math.MaxUint32
	}
	return uint32(math.MaxUint32 * (percentage / 100))
}

// PfifoFast is the default qdisc created by the kernel if one has not
// been defined for the interface
type PfifoFast struct {
	QdiscAttrs
	Bands       uint8
	PriorityMap [PRIORITY_MAP_LEN]uint8
}

func (qdisc *PfifoFast) Attrs() *QdiscAttrs {
	return &qdisc.QdiscAttrs
}

func (qdisc *PfifoFast) Type() string {
	return "pfifo_fast"
}

// Prio is a basic qdisc that works just like PfifoFast
type Prio struct {
	QdiscAttrs
	Bands       uint8
	PriorityMap [PRIORITY_MAP_LEN]uint8
}

func NewPrio(attrs QdiscAttrs) *Prio {
	return &Prio{
		QdiscAttrs:  attrs,
		Bands:       3,
		PriorityMap: [PRIORITY_MAP_LEN]uint8{1, 2, 2, 2, 1, 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1},
	}
}

func (qdisc *Prio) Attrs() *QdiscAttrs {
	return &qdisc.QdiscAttrs
}

func (qdisc *Prio) Type() string {
	return "prio"
}

// Htb is a classful qdisc that rate limits based on tokens
type Htb struct {
	QdiscAttrs
	Version      uint32
	Rate2Quantum uint32
	Defcls       uint32
	Debug        uint32
	DirectPkts   uint32
}

func NewHtb(attrs QdiscAttrs) *Htb {
	return &Htb{
		QdiscAttrs:   attrs,
		Version:      3,
		Defcls:       0,
		Rate2Quantum: 10,
		Debug:        0,
		DirectPkts:   0,
	}
}

func (qdisc *Htb) Attrs() *QdiscAttrs {
	return &qdisc.QdiscAttrs
}

func (qdisc *Htb) Type() string {
	return "htb"
}

// Netem is a classless qdisc that rate limits based on tokens

type NetemQdiscAttrs struct {
	Latency       uint32  // in us
	DelayCorr     float32 // in %
	Limit         uint32
	Loss          float32 // in %
	LossCorr      float32 // in %
	Gap           uint32
	Duplicate     float32 // in %
	DuplicateCorr float32 // in %
	Jitter        uint32  // in us
	ReorderProb   float32 // in %
	ReorderCorr   float32 // in %
	CorruptProb   float32 // in %
	CorruptCorr   float32 // in %
}

func (q NetemQdiscAttrs) String() string {
	return fmt.Sprintf(
		"{Latency: %d, Limit: %d, Loss: %f, Gap: %d, Duplicate: %f, Jitter: %d}",
		q.Latency, q.Limit, q.Loss, q.Gap, q.Duplicate, q.Jitter,
	)
}

type Netem struct {
	QdiscAttrs
	Latency       uint32
	DelayCorr     uint32
	Limit         uint32
	Loss          uint32
	LossCorr      uint32
	Gap           uint32
	Duplicate     uint32
	DuplicateCorr uint32
	Jitter        uint32
	ReorderProb   uint32
	ReorderCorr   uint32
	CorruptProb   uint32
	CorruptCorr   uint32
}

func (netem *Netem) String() string {
	return fmt.Sprintf(
		"{Latency: %v, Limit: %v, Loss: %v, Gap: %v, Duplicate: %v, Jitter: %v}",
		netem.Latency, netem.Limit, netem.Loss, netem.Gap, netem.Duplicate, netem.Jitter,
	)
}

func (qdisc *Netem) Attrs() *QdiscAttrs {
	return &qdisc.QdiscAttrs
}

func (qdisc *Netem) Type() string {
	return "netem"
}

// Tbf is a classless qdisc that rate limits based on tokens
type Tbf struct {
	QdiscAttrs
	Rate     uint64
	Limit    uint32
	Buffer   uint32
	Peakrate uint64
	Minburst uint32
	// TODO: handle other settings
}

func (qdisc *Tbf) Attrs() *QdiscAttrs {
	return &qdisc.QdiscAttrs
}

func (qdisc *Tbf) Type() string {
	return "tbf"
}

// Ingress is a qdisc for adding ingress filters
type Ingress struct {
	QdiscAttrs
}

func (qdisc *Ingress) Attrs() *QdiscAttrs {
	return &qdisc.QdiscAttrs
}

func (qdisc *Ingress) Type() string {
	return "ingress"
}

// GenericQdisc qdiscs represent types that are not currently understood
// by this netlink library.
type GenericQdisc struct {
	QdiscAttrs
	QdiscType string
}

func (qdisc *GenericQdisc) Attrs() *QdiscAttrs {
	return &qdisc.QdiscAttrs
}

func (qdisc *GenericQdisc) Type() string {
	return qdisc.QdiscType
}

type Hfsc struct {
	QdiscAttrs
	Defcls uint16
}

func NewHfsc(attrs QdiscAttrs) *Hfsc {
	return &Hfsc{
		QdiscAttrs: attrs,
		Defcls:     1,
	}
}

func (hfsc *Hfsc) Attrs() *QdiscAttrs {
	return &hfsc.QdiscAttrs
}

func (hfsc *Hfsc) Type() string {
	return "hfsc"
}

func (hfsc *Hfsc) String() string {
	return fmt.Sprintf(
		"{%v -- default: %d}",
		hfsc.Attrs(), hfsc.Defcls,
	)
}

// Fq is a classless packet scheduler meant to be mostly used for locally generated traffic.
type Fq struct {
	QdiscAttrs
	PacketLimit     uint32
	FlowPacketLimit uint32
	// In bytes
	Quantum        uint32
	InitialQuantum uint32
	// called RateEnable under the hood
	Pacing          uint32
	FlowDefaultRate uint32
	FlowMaxRate     uint32
	// called BucketsLog under the hood
	Buckets          uint32
	FlowRefillDelay  uint32
	LowRateThreshold uint32
}

func (fq *Fq) String() string {
	return fmt.Sprintf(
		"{PacketLimit: %v, FlowPacketLimit: %v, Quantum: %v, InitialQuantum: %v, Pacing: %v, FlowDefaultRate: %v, FlowMaxRate: %v, Buckets: %v, FlowRefillDelay: %v,  LowRateThreshold: %v}",
		fq.PacketLimit, fq.FlowPacketLimit, fq.Quantum, fq.InitialQuantum, fq.Pacing, fq.FlowDefaultRate, fq.FlowMaxRate, fq.Buckets, fq.FlowRefillDelay, fq.LowRateThreshold,
	)
}

func NewFq(attrs QdiscAttrs) *Fq {
	return &Fq{
		QdiscAttrs: attrs,
		Pacing:     1,
	}
}

func (qdisc *Fq) Attrs() *QdiscAttrs {
	return &qdisc.QdiscAttrs
}

func (qdisc *Fq) Type() string {
	return "fq"
}

// FQ_Codel (Fair Queuing Controlled Delay) is queuing discipline that combines Fair Queuing with the CoDel AQM scheme.
type FqCodel struct {
	QdiscAttrs
	Target        uint32
	Limit         uint32
	Interval      uint32
	ECN           uint32
	Flows         uint32
	Quantum       uint32
	CEThreshold   uint32
	DropBatchSize uint32
	MemoryLimit   uint32
}

func (fqcodel *FqCodel) String() string {
	return fmt.Sprintf(
		"{%v -- Target: %v, Limit: %v, Interval: %v, ECM: %v, Flows: %v, Quantum: %v}",
		fqcodel.Attrs(), fqcodel.Target, fqcodel.Limit, fqcodel.Interval, fqcodel.ECN, fqcodel.Flows, fqcodel.Quantum,
	)
}

func NewFqCodel(attrs QdiscAttrs) *FqCodel {
	return &FqCodel{
		QdiscAttrs: attrs,
		ECN:        1,
	}
}

func (qdisc *FqCodel) Attrs() *QdiscAttrs {
	return &qdisc.QdiscAttrs
}

func (qdisc *FqCodel) Type() string {
	return "fq_codel"
}

type Sfq struct {
	QdiscAttrs
	// TODO: Only the simplified options for SFQ are handled here. Support for the extended one can be added later.
	Quantum uint8
	Perturb uint8
	Limit   uint32
	Divisor uint8
}

func (sfq *Sfq) String() string {
	return fmt.Sprintf(
		"{%v -- Quantum: %v, Perturb: %v, Limit: %v, Divisor: %v}",
		sfq.Attrs(), sfq.Quantum, sfq.Perturb, sfq.Limit, sfq.Divisor,
	)
}

func (qdisc *Sfq) Attrs() *QdiscAttrs {
	return &qdisc.QdiscAttrs
}

func (qdisc *Sfq) Type() string {
	return "sfq"
}
   07070100000C4B000081A4000000000000000000000001645E367C00004B0A000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/qdisc_linux.go  package netlink

import (
	"fmt"
	"io/ioutil"
	"strconv"
	"strings"
	"syscall"

	"github.com/vishvananda/netlink/nl"
	"golang.org/x/sys/unix"
)

// NOTE function is here because it uses other linux functions
func NewNetem(attrs QdiscAttrs, nattrs NetemQdiscAttrs) *Netem {
	var limit uint32 = 1000
	var lossCorr, delayCorr, duplicateCorr uint32
	var reorderProb, reorderCorr uint32
	var corruptProb, corruptCorr uint32

	latency := nattrs.Latency
	loss := Percentage2u32(nattrs.Loss)
	gap := nattrs.Gap
	duplicate := Percentage2u32(nattrs.Duplicate)
	jitter := nattrs.Jitter

	// Correlation
	if latency > 0 && jitter > 0 {
		delayCorr = Percentage2u32(nattrs.DelayCorr)
	}
	if loss > 0 {
		lossCorr = Percentage2u32(nattrs.LossCorr)
	}
	if duplicate > 0 {
		duplicateCorr = Percentage2u32(nattrs.DuplicateCorr)
	}
	// FIXME should validate values(like loss/duplicate are percentages...)
	latency = time2Tick(latency)

	if nattrs.Limit != 0 {
		limit = nattrs.Limit
	}
	// Jitter is only value if latency is > 0
	if latency > 0 {
		jitter = time2Tick(jitter)
	}

	reorderProb = Percentage2u32(nattrs.ReorderProb)
	reorderCorr = Percentage2u32(nattrs.ReorderCorr)

	if reorderProb > 0 {
		// ERROR if lantency == 0
		if gap == 0 {
			gap = 1
		}
	}

	corruptProb = Percentage2u32(nattrs.CorruptProb)
	corruptCorr = Percentage2u32(nattrs.CorruptCorr)

	return &Netem{
		QdiscAttrs:    attrs,
		Latency:       latency,
		DelayCorr:     delayCorr,
		Limit:         limit,
		Loss:          loss,
		LossCorr:      lossCorr,
		Gap:           gap,
		Duplicate:     duplicate,
		DuplicateCorr: duplicateCorr,
		Jitter:        jitter,
		ReorderProb:   reorderProb,
		ReorderCorr:   reorderCorr,
		CorruptProb:   corruptProb,
		CorruptCorr:   corruptCorr,
	}
}

// QdiscDel will delete a qdisc from the system.
// Equivalent to: `tc qdisc del $qdisc`
func QdiscDel(qdisc Qdisc) error {
	return pkgHandle.QdiscDel(qdisc)
}

// QdiscDel will delete a qdisc from the system.
// Equivalent to: `tc qdisc del $qdisc`
func (h *Handle) QdiscDel(qdisc Qdisc) error {
	return h.qdiscModify(unix.RTM_DELQDISC, 0, qdisc)
}

// QdiscChange will change a qdisc in place
// Equivalent to: `tc qdisc change $qdisc`
// The parent and handle MUST NOT be changed.
func QdiscChange(qdisc Qdisc) error {
	return pkgHandle.QdiscChange(qdisc)
}

// QdiscChange will change a qdisc in place
// Equivalent to: `tc qdisc change $qdisc`
// The parent and handle MUST NOT be changed.
func (h *Handle) QdiscChange(qdisc Qdisc) error {
	return h.qdiscModify(unix.RTM_NEWQDISC, 0, qdisc)
}

// QdiscReplace will replace a qdisc to the system.
// Equivalent to: `tc qdisc replace $qdisc`
// The handle MUST change.
func QdiscReplace(qdisc Qdisc) error {
	return pkgHandle.QdiscReplace(qdisc)
}

// QdiscReplace will replace a qdisc to the system.
// Equivalent to: `tc qdisc replace $qdisc`
// The handle MUST change.
func (h *Handle) QdiscReplace(qdisc Qdisc) error {
	return h.qdiscModify(
		unix.RTM_NEWQDISC,
		unix.NLM_F_CREATE|unix.NLM_F_REPLACE,
		qdisc)
}

// QdiscAdd will add a qdisc to the system.
// Equivalent to: `tc qdisc add $qdisc`
func QdiscAdd(qdisc Qdisc) error {
	return pkgHandle.QdiscAdd(qdisc)
}

// QdiscAdd will add a qdisc to the system.
// Equivalent to: `tc qdisc add $qdisc`
func (h *Handle) QdiscAdd(qdisc Qdisc) error {
	return h.qdiscModify(
		unix.RTM_NEWQDISC,
		unix.NLM_F_CREATE|unix.NLM_F_EXCL,
		qdisc)
}

func (h *Handle) qdiscModify(cmd, flags int, qdisc Qdisc) error {
	req := h.newNetlinkRequest(cmd, flags|unix.NLM_F_ACK)
	base := qdisc.Attrs()
	msg := &nl.TcMsg{
		Family:  nl.FAMILY_ALL,
		Ifindex: int32(base.LinkIndex),
		Handle:  base.Handle,
		Parent:  base.Parent,
	}
	req.AddData(msg)

	// When deleting don't bother building the rest of the netlink payload
	if cmd != unix.RTM_DELQDISC {
		if err := qdiscPayload(req, qdisc); err != nil {
			return err
		}
	}

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

func qdiscPayload(req *nl.NetlinkRequest, qdisc Qdisc) error {

	req.AddData(nl.NewRtAttr(nl.TCA_KIND, nl.ZeroTerminated(qdisc.Type())))

	options := nl.NewRtAttr(nl.TCA_OPTIONS, nil)

	switch qdisc := qdisc.(type) {
	case *Prio:
		tcmap := nl.TcPrioMap{
			Bands:   int32(qdisc.Bands),
			Priomap: qdisc.PriorityMap,
		}
		options = nl.NewRtAttr(nl.TCA_OPTIONS, tcmap.Serialize())
	case *Tbf:
		opt := nl.TcTbfQopt{}
		opt.Rate.Rate = uint32(qdisc.Rate)
		opt.Peakrate.Rate = uint32(qdisc.Peakrate)
		opt.Limit = qdisc.Limit
		opt.Buffer = qdisc.Buffer
		options.AddRtAttr(nl.TCA_TBF_PARMS, opt.Serialize())
		if qdisc.Rate >= uint64(1<<32) {
			options.AddRtAttr(nl.TCA_TBF_RATE64, nl.Uint64Attr(qdisc.Rate))
		}
		if qdisc.Peakrate >= uint64(1<<32) {
			options.AddRtAttr(nl.TCA_TBF_PRATE64, nl.Uint64Attr(qdisc.Peakrate))
		}
		if qdisc.Peakrate > 0 {
			options.AddRtAttr(nl.TCA_TBF_PBURST, nl.Uint32Attr(qdisc.Minburst))
		}
	case *Htb:
		opt := nl.TcHtbGlob{}
		opt.Version = qdisc.Version
		opt.Rate2Quantum = qdisc.Rate2Quantum
		opt.Defcls = qdisc.Defcls
		// TODO: Handle Debug properly. For now default to 0
		opt.Debug = qdisc.Debug
		opt.DirectPkts = qdisc.DirectPkts
		options.AddRtAttr(nl.TCA_HTB_INIT, opt.Serialize())
		// options.AddRtAttr(nl.TCA_HTB_DIRECT_QLEN, opt.Serialize())
	case *Hfsc:
		opt := nl.TcHfscOpt{}
		opt.Defcls = qdisc.Defcls
		options = nl.NewRtAttr(nl.TCA_OPTIONS, opt.Serialize())
	case *Netem:
		opt := nl.TcNetemQopt{}
		opt.Latency = qdisc.Latency
		opt.Limit = qdisc.Limit
		opt.Loss = qdisc.Loss
		opt.Gap = qdisc.Gap
		opt.Duplicate = qdisc.Duplicate
		opt.Jitter = qdisc.Jitter
		options = nl.NewRtAttr(nl.TCA_OPTIONS, opt.Serialize())
		// Correlation
		corr := nl.TcNetemCorr{}
		corr.DelayCorr = qdisc.DelayCorr
		corr.LossCorr = qdisc.LossCorr
		corr.DupCorr = qdisc.DuplicateCorr

		if corr.DelayCorr > 0 || corr.LossCorr > 0 || corr.DupCorr > 0 {
			options.AddRtAttr(nl.TCA_NETEM_CORR, corr.Serialize())
		}
		// Corruption
		corruption := nl.TcNetemCorrupt{}
		corruption.Probability = qdisc.CorruptProb
		corruption.Correlation = qdisc.CorruptCorr
		if corruption.Probability > 0 {
			options.AddRtAttr(nl.TCA_NETEM_CORRUPT, corruption.Serialize())
		}
		// Reorder
		reorder := nl.TcNetemReorder{}
		reorder.Probability = qdisc.ReorderProb
		reorder.Correlation = qdisc.ReorderCorr
		if reorder.Probability > 0 {
			options.AddRtAttr(nl.TCA_NETEM_REORDER, reorder.Serialize())
		}
	case *Ingress:
		// ingress filters must use the proper handle
		if qdisc.Attrs().Parent != HANDLE_INGRESS {
			return fmt.Errorf("Ingress filters must set Parent to HANDLE_INGRESS")
		}
	case *FqCodel:
		options.AddRtAttr(nl.TCA_FQ_CODEL_ECN, nl.Uint32Attr((uint32(qdisc.ECN))))
		if qdisc.Limit > 0 {
			options.AddRtAttr(nl.TCA_FQ_CODEL_LIMIT, nl.Uint32Attr((uint32(qdisc.Limit))))
		}
		if qdisc.Interval > 0 {
			options.AddRtAttr(nl.TCA_FQ_CODEL_INTERVAL, nl.Uint32Attr((uint32(qdisc.Interval))))
		}
		if qdisc.Flows > 0 {
			options.AddRtAttr(nl.TCA_FQ_CODEL_FLOWS, nl.Uint32Attr((uint32(qdisc.Flows))))
		}
		if qdisc.Quantum > 0 {
			options.AddRtAttr(nl.TCA_FQ_CODEL_QUANTUM, nl.Uint32Attr((uint32(qdisc.Quantum))))
		}
		if qdisc.CEThreshold > 0 {
			options.AddRtAttr(nl.TCA_FQ_CODEL_CE_THRESHOLD, nl.Uint32Attr(qdisc.CEThreshold))
		}
		if qdisc.DropBatchSize > 0 {
			options.AddRtAttr(nl.TCA_FQ_CODEL_DROP_BATCH_SIZE, nl.Uint32Attr(qdisc.DropBatchSize))
		}
		if qdisc.MemoryLimit > 0 {
			options.AddRtAttr(nl.TCA_FQ_CODEL_MEMORY_LIMIT, nl.Uint32Attr(qdisc.MemoryLimit))
		}
	case *Fq:
		options.AddRtAttr(nl.TCA_FQ_RATE_ENABLE, nl.Uint32Attr((uint32(qdisc.Pacing))))

		if qdisc.Buckets > 0 {
			options.AddRtAttr(nl.TCA_FQ_BUCKETS_LOG, nl.Uint32Attr((uint32(qdisc.Buckets))))
		}
		if qdisc.LowRateThreshold > 0 {
			options.AddRtAttr(nl.TCA_FQ_LOW_RATE_THRESHOLD, nl.Uint32Attr((uint32(qdisc.LowRateThreshold))))
		}
		if qdisc.Quantum > 0 {
			options.AddRtAttr(nl.TCA_FQ_QUANTUM, nl.Uint32Attr((uint32(qdisc.Quantum))))
		}
		if qdisc.InitialQuantum > 0 {
			options.AddRtAttr(nl.TCA_FQ_INITIAL_QUANTUM, nl.Uint32Attr((uint32(qdisc.InitialQuantum))))
		}
		if qdisc.FlowRefillDelay > 0 {
			options.AddRtAttr(nl.TCA_FQ_FLOW_REFILL_DELAY, nl.Uint32Attr((uint32(qdisc.FlowRefillDelay))))
		}
		if qdisc.FlowPacketLimit > 0 {
			options.AddRtAttr(nl.TCA_FQ_FLOW_PLIMIT, nl.Uint32Attr((uint32(qdisc.FlowPacketLimit))))
		}
		if qdisc.FlowMaxRate > 0 {
			options.AddRtAttr(nl.TCA_FQ_FLOW_MAX_RATE, nl.Uint32Attr((uint32(qdisc.FlowMaxRate))))
		}
		if qdisc.FlowDefaultRate > 0 {
			options.AddRtAttr(nl.TCA_FQ_FLOW_DEFAULT_RATE, nl.Uint32Attr((uint32(qdisc.FlowDefaultRate))))
		}
	case *Sfq:
		opt := nl.TcSfqQoptV1{}
		opt.TcSfqQopt.Quantum = qdisc.Quantum
		opt.TcSfqQopt.Perturb = int32(qdisc.Perturb)
		opt.TcSfqQopt.Limit = qdisc.Limit
		opt.TcSfqQopt.Divisor = qdisc.Divisor

		options = nl.NewRtAttr(nl.TCA_OPTIONS, opt.Serialize())
	default:
		options = nil
	}

	if options != nil {
		req.AddData(options)
	}
	return nil
}

// QdiscList gets a list of qdiscs in the system.
// Equivalent to: `tc qdisc show`.
// The list can be filtered by link.
func QdiscList(link Link) ([]Qdisc, error) {
	return pkgHandle.QdiscList(link)
}

// QdiscList gets a list of qdiscs in the system.
// Equivalent to: `tc qdisc show`.
// The list can be filtered by link.
func (h *Handle) QdiscList(link Link) ([]Qdisc, error) {
	req := h.newNetlinkRequest(unix.RTM_GETQDISC, unix.NLM_F_DUMP)
	index := int32(0)
	if link != nil {
		base := link.Attrs()
		h.ensureIndex(base)
		index = int32(base.Index)
	}
	msg := &nl.TcMsg{
		Family:  nl.FAMILY_ALL,
		Ifindex: index,
	}
	req.AddData(msg)

	msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWQDISC)
	if err != nil {
		return nil, err
	}

	var res []Qdisc
	for _, m := range msgs {
		msg := nl.DeserializeTcMsg(m)

		attrs, err := nl.ParseRouteAttr(m[msg.Len():])
		if err != nil {
			return nil, err
		}

		// skip qdiscs from other interfaces
		if link != nil && msg.Ifindex != index {
			continue
		}

		base := QdiscAttrs{
			LinkIndex: int(msg.Ifindex),
			Handle:    msg.Handle,
			Parent:    msg.Parent,
			Refcnt:    msg.Info,
		}
		var qdisc Qdisc
		qdiscType := ""
		for _, attr := range attrs {
			switch attr.Attr.Type {
			case nl.TCA_KIND:
				qdiscType = string(attr.Value[:len(attr.Value)-1])
				switch qdiscType {
				case "pfifo_fast":
					qdisc = &PfifoFast{}
				case "prio":
					qdisc = &Prio{}
				case "tbf":
					qdisc = &Tbf{}
				case "ingress":
					qdisc = &Ingress{}
				case "htb":
					qdisc = &Htb{}
				case "fq":
					qdisc = &Fq{}
				case "hfsc":
					qdisc = &Hfsc{}
				case "fq_codel":
					qdisc = &FqCodel{}
				case "netem":
					qdisc = &Netem{}
				case "sfq":
					qdisc = &Sfq{}
				default:
					qdisc = &GenericQdisc{QdiscType: qdiscType}
				}
			case nl.TCA_OPTIONS:
				switch qdiscType {
				case "pfifo_fast":
					// pfifo returns TcPrioMap directly without wrapping it in rtattr
					if err := parsePfifoFastData(qdisc, attr.Value); err != nil {
						return nil, err
					}
				case "prio":
					// prio returns TcPrioMap directly without wrapping it in rtattr
					if err := parsePrioData(qdisc, attr.Value); err != nil {
						return nil, err
					}
				case "tbf":
					data, err := nl.ParseRouteAttr(attr.Value)
					if err != nil {
						return nil, err
					}
					if err := parseTbfData(qdisc, data); err != nil {
						return nil, err
					}
				case "hfsc":
					if err := parseHfscData(qdisc, attr.Value); err != nil {
						return nil, err
					}
				case "htb":
					data, err := nl.ParseRouteAttr(attr.Value)
					if err != nil {
						return nil, err
					}
					if err := parseHtbData(qdisc, data); err != nil {
						return nil, err
					}
				case "fq":
					data, err := nl.ParseRouteAttr(attr.Value)
					if err != nil {
						return nil, err
					}
					if err := parseFqData(qdisc, data); err != nil {
						return nil, err
					}
				case "fq_codel":
					data, err := nl.ParseRouteAttr(attr.Value)
					if err != nil {
						return nil, err
					}
					if err := parseFqCodelData(qdisc, data); err != nil {
						return nil, err
					}
				case "netem":
					if err := parseNetemData(qdisc, attr.Value); err != nil {
						return nil, err
					}
				case "sfq":
					if err := parseSfqData(qdisc, attr.Value); err != nil {
						return nil, err
					}

					// no options for ingress
				}
			}
		}
		*qdisc.Attrs() = base
		res = append(res, qdisc)
	}

	return res, nil
}

func parsePfifoFastData(qdisc Qdisc, value []byte) error {
	pfifo := qdisc.(*PfifoFast)
	tcmap := nl.DeserializeTcPrioMap(value)
	pfifo.PriorityMap = tcmap.Priomap
	pfifo.Bands = uint8(tcmap.Bands)
	return nil
}

func parsePrioData(qdisc Qdisc, value []byte) error {
	prio := qdisc.(*Prio)
	tcmap := nl.DeserializeTcPrioMap(value)
	prio.PriorityMap = tcmap.Priomap
	prio.Bands = uint8(tcmap.Bands)
	return nil
}

func parseHtbData(qdisc Qdisc, data []syscall.NetlinkRouteAttr) error {
	htb := qdisc.(*Htb)
	for _, datum := range data {
		switch datum.Attr.Type {
		case nl.TCA_HTB_INIT:
			opt := nl.DeserializeTcHtbGlob(datum.Value)
			htb.Version = opt.Version
			htb.Rate2Quantum = opt.Rate2Quantum
			htb.Defcls = opt.Defcls
			htb.Debug = opt.Debug
			htb.DirectPkts = opt.DirectPkts
		case nl.TCA_HTB_DIRECT_QLEN:
			// TODO
			//htb.DirectQlen = native.uint32(datum.Value)
		}
	}
	return nil
}

func parseFqCodelData(qdisc Qdisc, data []syscall.NetlinkRouteAttr) error {
	fqCodel := qdisc.(*FqCodel)
	for _, datum := range data {

		switch datum.Attr.Type {
		case nl.TCA_FQ_CODEL_TARGET:
			fqCodel.Target = native.Uint32(datum.Value)
		case nl.TCA_FQ_CODEL_LIMIT:
			fqCodel.Limit = native.Uint32(datum.Value)
		case nl.TCA_FQ_CODEL_INTERVAL:
			fqCodel.Interval = native.Uint32(datum.Value)
		case nl.TCA_FQ_CODEL_ECN:
			fqCodel.ECN = native.Uint32(datum.Value)
		case nl.TCA_FQ_CODEL_FLOWS:
			fqCodel.Flows = native.Uint32(datum.Value)
		case nl.TCA_FQ_CODEL_QUANTUM:
			fqCodel.Quantum = native.Uint32(datum.Value)
		case nl.TCA_FQ_CODEL_CE_THRESHOLD:
			fqCodel.CEThreshold = native.Uint32(datum.Value)
		case nl.TCA_FQ_CODEL_DROP_BATCH_SIZE:
			fqCodel.DropBatchSize = native.Uint32(datum.Value)
		case nl.TCA_FQ_CODEL_MEMORY_LIMIT:
			fqCodel.MemoryLimit = native.Uint32(datum.Value)
		}
	}
	return nil
}

func parseHfscData(qdisc Qdisc, data []byte) error {
	Hfsc := qdisc.(*Hfsc)
	Hfsc.Defcls = native.Uint16(data)
	return nil
}

func parseFqData(qdisc Qdisc, data []syscall.NetlinkRouteAttr) error {
	fq := qdisc.(*Fq)
	for _, datum := range data {
		switch datum.Attr.Type {
		case nl.TCA_FQ_BUCKETS_LOG:
			fq.Buckets = native.Uint32(datum.Value)
		case nl.TCA_FQ_LOW_RATE_THRESHOLD:
			fq.LowRateThreshold = native.Uint32(datum.Value)
		case nl.TCA_FQ_QUANTUM:
			fq.Quantum = native.Uint32(datum.Value)
		case nl.TCA_FQ_RATE_ENABLE:
			fq.Pacing = native.Uint32(datum.Value)
		case nl.TCA_FQ_INITIAL_QUANTUM:
			fq.InitialQuantum = native.Uint32(datum.Value)
		case nl.TCA_FQ_ORPHAN_MASK:
			// TODO
		case nl.TCA_FQ_FLOW_REFILL_DELAY:
			fq.FlowRefillDelay = native.Uint32(datum.Value)
		case nl.TCA_FQ_FLOW_PLIMIT:
			fq.FlowPacketLimit = native.Uint32(datum.Value)
		case nl.TCA_FQ_PLIMIT:
			fq.PacketLimit = native.Uint32(datum.Value)
		case nl.TCA_FQ_FLOW_MAX_RATE:
			fq.FlowMaxRate = native.Uint32(datum.Value)
		case nl.TCA_FQ_FLOW_DEFAULT_RATE:
			fq.FlowDefaultRate = native.Uint32(datum.Value)
		}
	}
	return nil
}

func parseNetemData(qdisc Qdisc, value []byte) error {
	netem := qdisc.(*Netem)
	opt := nl.DeserializeTcNetemQopt(value)
	netem.Latency = opt.Latency
	netem.Limit = opt.Limit
	netem.Loss = opt.Loss
	netem.Gap = opt.Gap
	netem.Duplicate = opt.Duplicate
	netem.Jitter = opt.Jitter
	data, err := nl.ParseRouteAttr(value[nl.SizeofTcNetemQopt:])
	if err != nil {
		return err
	}
	for _, datum := range data {
		switch datum.Attr.Type {
		case nl.TCA_NETEM_CORR:
			opt := nl.DeserializeTcNetemCorr(datum.Value)
			netem.DelayCorr = opt.DelayCorr
			netem.LossCorr = opt.LossCorr
			netem.DuplicateCorr = opt.DupCorr
		case nl.TCA_NETEM_CORRUPT:
			opt := nl.DeserializeTcNetemCorrupt(datum.Value)
			netem.CorruptProb = opt.Probability
			netem.CorruptCorr = opt.Correlation
		case nl.TCA_NETEM_REORDER:
			opt := nl.DeserializeTcNetemReorder(datum.Value)
			netem.ReorderProb = opt.Probability
			netem.ReorderCorr = opt.Correlation
		}
	}
	return nil
}

func parseTbfData(qdisc Qdisc, data []syscall.NetlinkRouteAttr) error {
	tbf := qdisc.(*Tbf)
	for _, datum := range data {
		switch datum.Attr.Type {
		case nl.TCA_TBF_PARMS:
			opt := nl.DeserializeTcTbfQopt(datum.Value)
			tbf.Rate = uint64(opt.Rate.Rate)
			tbf.Peakrate = uint64(opt.Peakrate.Rate)
			tbf.Limit = opt.Limit
			tbf.Buffer = opt.Buffer
		case nl.TCA_TBF_RATE64:
			tbf.Rate = native.Uint64(datum.Value[0:8])
		case nl.TCA_TBF_PRATE64:
			tbf.Peakrate = native.Uint64(datum.Value[0:8])
		case nl.TCA_TBF_PBURST:
			tbf.Minburst = native.Uint32(datum.Value[0:4])
		}
	}
	return nil
}

func parseSfqData(qdisc Qdisc, value []byte) error {
	sfq := qdisc.(*Sfq)
	opt := nl.DeserializeTcSfqQoptV1(value)
	sfq.Quantum = opt.TcSfqQopt.Quantum
	sfq.Perturb = uint8(opt.TcSfqQopt.Perturb)
	sfq.Limit = opt.TcSfqQopt.Limit
	sfq.Divisor = opt.TcSfqQopt.Divisor

	return nil
}

const (
	TIME_UNITS_PER_SEC = 1000000
)

var (
	tickInUsec  float64
	clockFactor float64
	hz          float64
)

func initClock() {
	data, err := ioutil.ReadFile("/proc/net/psched")
	if err != nil {
		return
	}
	parts := strings.Split(strings.TrimSpace(string(data)), " ")
	if len(parts) < 4 {
		return
	}
	var vals [4]uint64
	for i := range vals {
		val, err := strconv.ParseUint(parts[i], 16, 32)
		if err != nil {
			return
		}
		vals[i] = val
	}
	// compatibility
	if vals[2] == 1000000000 {
		vals[0] = vals[1]
	}
	clockFactor = float64(vals[2]) / TIME_UNITS_PER_SEC
	tickInUsec = float64(vals[0]) / float64(vals[1]) * clockFactor
	if vals[2] == 1000000 {
		// ref https://git.kernel.org/pub/scm/network/iproute2/iproute2.git/tree/lib/utils.c#n963
		hz = float64(vals[3])
	} else {
		hz = 100
	}
}

func TickInUsec() float64 {
	if tickInUsec == 0.0 {
		initClock()
	}
	return tickInUsec
}

func ClockFactor() float64 {
	if clockFactor == 0.0 {
		initClock()
	}
	return clockFactor
}

func Hz() float64 {
	if hz == 0.0 {
		initClock()
	}
	return hz
}

func time2Tick(time uint32) uint32 {
	return uint32(float64(time) * TickInUsec())
}

func tick2Time(tick uint32) uint32 {
	return uint32(float64(tick) / TickInUsec())
}

func time2Ktime(time uint32) uint32 {
	return uint32(float64(time) * ClockFactor())
}

func ktime2Time(ktime uint32) uint32 {
	return uint32(float64(ktime) / ClockFactor())
}

func burst(rate uint64, buffer uint32) uint32 {
	return uint32(float64(rate) * float64(tick2Time(buffer)) / TIME_UNITS_PER_SEC)
}

func latency(rate uint64, limit, buffer uint32) float64 {
	return TIME_UNITS_PER_SEC*(float64(limit)/float64(rate)) - float64(tick2Time(buffer))
}

func Xmittime(rate uint64, size uint32) uint32 {
	// https://git.kernel.org/pub/scm/network/iproute2/iproute2.git/tree/tc/tc_core.c#n62
	return time2Tick(uint32(TIME_UNITS_PER_SEC * (float64(size) / float64(rate))))
}

func Xmitsize(rate uint64, ticks uint32) uint32 {
	return uint32((float64(rate) * float64(tick2Time(ticks))) / TIME_UNITS_PER_SEC)
}
  07070100000C4C000081A4000000000000000000000001645E367C000025AE000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/rdma_link_linux.go  package netlink

import (
	"bytes"
	"encoding/binary"
	"fmt"
	"net"

	"github.com/vishvananda/netlink/nl"
	"golang.org/x/sys/unix"
)

// LinkAttrs represents data shared by most link types
type RdmaLinkAttrs struct {
	Index           uint32
	Name            string
	FirmwareVersion string
	NodeGuid        string
	SysImageGuid    string
}

// Link represents a rdma device from netlink.
type RdmaLink struct {
	Attrs RdmaLinkAttrs
}

func getProtoField(clientType int, op int) int {
	return ((clientType << nl.RDMA_NL_GET_CLIENT_SHIFT) | op)
}

func uint64ToGuidString(guid uint64) string {
	//Convert to byte array
	sysGuidBytes := new(bytes.Buffer)
	binary.Write(sysGuidBytes, binary.LittleEndian, guid)

	//Convert to HardwareAddr
	sysGuidNet := net.HardwareAddr(sysGuidBytes.Bytes())

	//Get the String
	return sysGuidNet.String()
}

func executeOneGetRdmaLink(data []byte) (*RdmaLink, error) {

	link := RdmaLink{}

	reader := bytes.NewReader(data)
	for reader.Len() >= 4 {
		_, attrType, len, value := parseNfAttrTLV(reader)

		switch attrType {
		case nl.RDMA_NLDEV_ATTR_DEV_INDEX:
			var Index uint32
			r := bytes.NewReader(value)
			binary.Read(r, nl.NativeEndian(), &Index)
			link.Attrs.Index = Index
		case nl.RDMA_NLDEV_ATTR_DEV_NAME:
			link.Attrs.Name = string(value[0 : len-1])
		case nl.RDMA_NLDEV_ATTR_FW_VERSION:
			link.Attrs.FirmwareVersion = string(value[0 : len-1])
		case nl.RDMA_NLDEV_ATTR_NODE_GUID:
			var guid uint64
			r := bytes.NewReader(value)
			binary.Read(r, nl.NativeEndian(), &guid)
			link.Attrs.NodeGuid = uint64ToGuidString(guid)
		case nl.RDMA_NLDEV_ATTR_SYS_IMAGE_GUID:
			var sysGuid uint64
			r := bytes.NewReader(value)
			binary.Read(r, nl.NativeEndian(), &sysGuid)
			link.Attrs.SysImageGuid = uint64ToGuidString(sysGuid)
		}
		if (len % 4) != 0 {
			// Skip pad bytes
			reader.Seek(int64(4-(len%4)), seekCurrent)
		}
	}
	return &link, nil
}

func execRdmaSetLink(req *nl.NetlinkRequest) error {

	_, err := req.Execute(unix.NETLINK_RDMA, 0)
	return err
}

// RdmaLinkList gets a list of RDMA link devices.
// Equivalent to: `rdma dev show`
func RdmaLinkList() ([]*RdmaLink, error) {
	return pkgHandle.RdmaLinkList()
}

// RdmaLinkList gets a list of RDMA link devices.
// Equivalent to: `rdma dev show`
func (h *Handle) RdmaLinkList() ([]*RdmaLink, error) {
	proto := getProtoField(nl.RDMA_NL_NLDEV, nl.RDMA_NLDEV_CMD_GET)
	req := h.newNetlinkRequest(proto, unix.NLM_F_ACK|unix.NLM_F_DUMP)

	msgs, err := req.Execute(unix.NETLINK_RDMA, 0)
	if err != nil {
		return nil, err
	}

	var res []*RdmaLink
	for _, m := range msgs {
		link, err := executeOneGetRdmaLink(m)
		if err != nil {
			return nil, err
		}
		res = append(res, link)
	}

	return res, nil
}

// RdmaLinkByName finds a link by name and returns a pointer to the object if
// found and nil error, otherwise returns error code.
func RdmaLinkByName(name string) (*RdmaLink, error) {
	return pkgHandle.RdmaLinkByName(name)
}

// RdmaLinkByName finds a link by name and returns a pointer to the object if
// found and nil error, otherwise returns error code.
func (h *Handle) RdmaLinkByName(name string) (*RdmaLink, error) {
	links, err := h.RdmaLinkList()
	if err != nil {
		return nil, err
	}
	for _, link := range links {
		if link.Attrs.Name == name {
			return link, nil
		}
	}
	return nil, fmt.Errorf("Rdma device %v not found", name)
}

// RdmaLinkSetName sets the name of the rdma link device. Return nil on success
// or error otherwise.
// Equivalent to: `rdma dev set $old_devname name $name`
func RdmaLinkSetName(link *RdmaLink, name string) error {
	return pkgHandle.RdmaLinkSetName(link, name)
}

// RdmaLinkSetName sets the name of the rdma link device. Return nil on success
// or error otherwise.
// Equivalent to: `rdma dev set $old_devname name $name`
func (h *Handle) RdmaLinkSetName(link *RdmaLink, name string) error {
	proto := getProtoField(nl.RDMA_NL_NLDEV, nl.RDMA_NLDEV_CMD_SET)
	req := h.newNetlinkRequest(proto, unix.NLM_F_ACK)

	b := make([]byte, 4)
	native.PutUint32(b, uint32(link.Attrs.Index))
	data := nl.NewRtAttr(nl.RDMA_NLDEV_ATTR_DEV_INDEX, b)
	req.AddData(data)

	b = make([]byte, len(name)+1)
	copy(b, name)
	data = nl.NewRtAttr(nl.RDMA_NLDEV_ATTR_DEV_NAME, b)
	req.AddData(data)

	return execRdmaSetLink(req)
}

func netnsModeToString(mode uint8) string {
	switch mode {
	case 0:
		return "exclusive"
	case 1:
		return "shared"
	default:
		return "unknown"
	}
}

func executeOneGetRdmaNetnsMode(data []byte) (string, error) {
	reader := bytes.NewReader(data)
	for reader.Len() >= 4 {
		_, attrType, len, value := parseNfAttrTLV(reader)

		switch attrType {
		case nl.RDMA_NLDEV_SYS_ATTR_NETNS_MODE:
			var mode uint8
			r := bytes.NewReader(value)
			binary.Read(r, nl.NativeEndian(), &mode)
			return netnsModeToString(mode), nil
		}
		if (len % 4) != 0 {
			// Skip pad bytes
			reader.Seek(int64(4-(len%4)), seekCurrent)
		}
	}
	return "", fmt.Errorf("Invalid netns mode")
}

// RdmaSystemGetNetnsMode gets the net namespace mode for RDMA subsystem
// Returns mode string and error status as nil on success or returns error
// otherwise.
// Equivalent to: `rdma system show netns'
func RdmaSystemGetNetnsMode() (string, error) {
	return pkgHandle.RdmaSystemGetNetnsMode()
}

// RdmaSystemGetNetnsMode gets the net namespace mode for RDMA subsystem
// Returns mode string and error status as nil on success or returns error
// otherwise.
// Equivalent to: `rdma system show netns'
func (h *Handle) RdmaSystemGetNetnsMode() (string, error) {

	proto := getProtoField(nl.RDMA_NL_NLDEV, nl.RDMA_NLDEV_CMD_SYS_GET)
	req := h.newNetlinkRequest(proto, unix.NLM_F_ACK)

	msgs, err := req.Execute(unix.NETLINK_RDMA, 0)
	if err != nil {
		return "", err
	}
	if len(msgs) == 0 {
		return "", fmt.Errorf("No valid response from kernel")
	}
	return executeOneGetRdmaNetnsMode(msgs[0])
}

func netnsModeStringToUint8(mode string) (uint8, error) {
	switch mode {
	case "exclusive":
		return 0, nil
	case "shared":
		return 1, nil
	default:
		return 0, fmt.Errorf("Invalid mode; %q", mode)
	}
}

// RdmaSystemSetNetnsMode sets the net namespace mode for RDMA subsystem
// Returns nil on success or appropriate error code.
// Equivalent to: `rdma system set netns { shared | exclusive }'
func RdmaSystemSetNetnsMode(NewMode string) error {
	return pkgHandle.RdmaSystemSetNetnsMode(NewMode)
}

// RdmaSystemSetNetnsMode sets the net namespace mode for RDMA subsystem
// Returns nil on success or appropriate error code.
// Equivalent to: `rdma system set netns { shared | exclusive }'
func (h *Handle) RdmaSystemSetNetnsMode(NewMode string) error {
	value, err := netnsModeStringToUint8(NewMode)
	if err != nil {
		return err
	}

	proto := getProtoField(nl.RDMA_NL_NLDEV, nl.RDMA_NLDEV_CMD_SYS_SET)
	req := h.newNetlinkRequest(proto, unix.NLM_F_ACK)

	data := nl.NewRtAttr(nl.RDMA_NLDEV_SYS_ATTR_NETNS_MODE, []byte{value})
	req.AddData(data)

	_, err = req.Execute(unix.NETLINK_RDMA, 0)
	return err
}

// RdmaLinkSetNsFd puts the RDMA device into a new network namespace. The
// fd must be an open file descriptor to a network namespace.
// Similar to: `rdma dev set $dev netns $ns`
func RdmaLinkSetNsFd(link *RdmaLink, fd uint32) error {
	return pkgHandle.RdmaLinkSetNsFd(link, fd)
}

// RdmaLinkSetNsFd puts the RDMA device into a new network namespace. The
// fd must be an open file descriptor to a network namespace.
// Similar to: `rdma dev set $dev netns $ns`
func (h *Handle) RdmaLinkSetNsFd(link *RdmaLink, fd uint32) error {
	proto := getProtoField(nl.RDMA_NL_NLDEV, nl.RDMA_NLDEV_CMD_SET)
	req := h.newNetlinkRequest(proto, unix.NLM_F_ACK)

	data := nl.NewRtAttr(nl.RDMA_NLDEV_ATTR_DEV_INDEX,
		nl.Uint32Attr(link.Attrs.Index))
	req.AddData(data)

	data = nl.NewRtAttr(nl.RDMA_NLDEV_NET_NS_FD, nl.Uint32Attr(fd))
	req.AddData(data)

	return execRdmaSetLink(req)
}

// RdmaLinkDel deletes an rdma link
//
// Similar to: rdma link delete NAME
// REF: https://man7.org/linux/man-pages/man8/rdma-link.8.html
func RdmaLinkDel(name string) error {
	return pkgHandle.RdmaLinkDel(name)
}

// RdmaLinkDel deletes an rdma link.
func (h *Handle) RdmaLinkDel(name string) error {
	link, err := h.RdmaLinkByName(name)
	if err != nil {
		return err
	}

	proto := getProtoField(nl.RDMA_NL_NLDEV, nl.RDMA_NLDEV_CMD_DELLINK)
	req := h.newNetlinkRequest(proto, unix.NLM_F_ACK)

	b := make([]byte, 4)
	native.PutUint32(b, link.Attrs.Index)
	req.AddData(nl.NewRtAttr(nl.RDMA_NLDEV_ATTR_DEV_INDEX, b))

	_, err = req.Execute(unix.NETLINK_RDMA, 0)
	return err
}

// RdmaLinkAdd adds an rdma link for the specified type to the network device.
// Similar to: rdma link add NAME type TYPE netdev NETDEV
//	NAME - specifies the new name of the rdma link to add
//	TYPE - specifies which rdma type to use.  Link types:
//		rxe - Soft RoCE driver
//		siw - Soft iWARP driver
//	NETDEV - specifies the network device to which the link is bound
//
// REF: https://man7.org/linux/man-pages/man8/rdma-link.8.html
func RdmaLinkAdd(linkName, linkType, netdev string) error {
	return pkgHandle.RdmaLinkAdd(linkName, linkType, netdev)
}

// RdmaLinkAdd adds an rdma link for the specified type to the network device.
func (h *Handle) RdmaLinkAdd(linkName string, linkType string, netdev string) error {
	proto := getProtoField(nl.RDMA_NL_NLDEV, nl.RDMA_NLDEV_CMD_NEWLINK)
	req := h.newNetlinkRequest(proto, unix.NLM_F_ACK)

	req.AddData(nl.NewRtAttr(nl.RDMA_NLDEV_ATTR_DEV_NAME, nl.ZeroTerminated(linkName)))
	req.AddData(nl.NewRtAttr(nl.RDMA_NLDEV_ATTR_LINK_TYPE, nl.ZeroTerminated(linkType)))
	req.AddData(nl.NewRtAttr(nl.RDMA_NLDEV_ATTR_NDEV_NAME, nl.ZeroTerminated(netdev)))
	_, err := req.Execute(unix.NETLINK_RDMA, 0)
	return err
}
  07070100000C4D000081A4000000000000000000000001645E367C00001504000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/route.go    package netlink

import (
	"fmt"
	"net"
	"strings"
)

// Scope is an enum representing a route scope.
type Scope uint8

type NextHopFlag int

const (
	RT_FILTER_PROTOCOL uint64 = 1 << (1 + iota)
	RT_FILTER_SCOPE
	RT_FILTER_TYPE
	RT_FILTER_TOS
	RT_FILTER_IIF
	RT_FILTER_OIF
	RT_FILTER_DST
	RT_FILTER_SRC
	RT_FILTER_GW
	RT_FILTER_TABLE
	RT_FILTER_HOPLIMIT
	RT_FILTER_PRIORITY
	RT_FILTER_MARK
	RT_FILTER_MASK
	RT_FILTER_REALM
)

type Destination interface {
	Family() int
	Decode([]byte) error
	Encode() ([]byte, error)
	String() string
	Equal(Destination) bool
}

type Encap interface {
	Type() int
	Decode([]byte) error
	Encode() ([]byte, error)
	String() string
	Equal(Encap) bool
}

//Protocol describe what was the originator of the route
type RouteProtocol int

// Route represents a netlink route.
type Route struct {
	LinkIndex        int
	ILinkIndex       int
	Scope            Scope
	Dst              *net.IPNet
	Src              net.IP
	Gw               net.IP
	MultiPath        []*NexthopInfo
	Protocol         RouteProtocol
	Priority         int
	Family           int
	Table            int
	Type             int
	Tos              int
	Flags            int
	MPLSDst          *int
	NewDst           Destination
	Encap            Encap
	Via              Destination
	Realm            int
	MTU              int
	Window           int
	Rtt              int
	RttVar           int
	Ssthresh         int
	Cwnd             int
	AdvMSS           int
	Reordering       int
	Hoplimit         int
	InitCwnd         int
	Features         int
	RtoMin           int
	InitRwnd         int
	QuickACK         int
	Congctl          string
	FastOpenNoCookie int
}

func (r Route) String() string {
	elems := []string{}
	if len(r.MultiPath) == 0 {
		elems = append(elems, fmt.Sprintf("Ifindex: %d", r.LinkIndex))
	}
	if r.MPLSDst != nil {
		elems = append(elems, fmt.Sprintf("Dst: %d", r.MPLSDst))
	} else {
		elems = append(elems, fmt.Sprintf("Dst: %s", r.Dst))
	}
	if r.NewDst != nil {
		elems = append(elems, fmt.Sprintf("NewDst: %s", r.NewDst))
	}
	if r.Encap != nil {
		elems = append(elems, fmt.Sprintf("Encap: %s", r.Encap))
	}
	if r.Via != nil {
		elems = append(elems, fmt.Sprintf("Via: %s", r.Via))
	}
	elems = append(elems, fmt.Sprintf("Src: %s", r.Src))
	if len(r.MultiPath) > 0 {
		elems = append(elems, fmt.Sprintf("Gw: %s", r.MultiPath))
	} else {
		elems = append(elems, fmt.Sprintf("Gw: %s", r.Gw))
	}
	elems = append(elems, fmt.Sprintf("Flags: %s", r.ListFlags()))
	elems = append(elems, fmt.Sprintf("Table: %d", r.Table))
	elems = append(elems, fmt.Sprintf("Realm: %d", r.Realm))
	return fmt.Sprintf("{%s}", strings.Join(elems, " "))
}

func (r Route) Equal(x Route) bool {
	return r.LinkIndex == x.LinkIndex &&
		r.ILinkIndex == x.ILinkIndex &&
		r.Scope == x.Scope &&
		ipNetEqual(r.Dst, x.Dst) &&
		r.Src.Equal(x.Src) &&
		r.Gw.Equal(x.Gw) &&
		nexthopInfoSlice(r.MultiPath).Equal(x.MultiPath) &&
		r.Protocol == x.Protocol &&
		r.Priority == x.Priority &&
		r.Realm == x.Realm &&
		r.Table == x.Table &&
		r.Type == x.Type &&
		r.Tos == x.Tos &&
		r.Hoplimit == x.Hoplimit &&
		r.Flags == x.Flags &&
		(r.MPLSDst == x.MPLSDst || (r.MPLSDst != nil && x.MPLSDst != nil && *r.MPLSDst == *x.MPLSDst)) &&
		(r.NewDst == x.NewDst || (r.NewDst != nil && r.NewDst.Equal(x.NewDst))) &&
		(r.Via == x.Via || (r.Via != nil && r.Via.Equal(x.Via))) &&
		(r.Encap == x.Encap || (r.Encap != nil && r.Encap.Equal(x.Encap)))
}

func (r *Route) SetFlag(flag NextHopFlag) {
	r.Flags |= int(flag)
}

func (r *Route) ClearFlag(flag NextHopFlag) {
	r.Flags &^= int(flag)
}

type flagString struct {
	f NextHopFlag
	s string
}

// RouteUpdate is sent when a route changes - type is RTM_NEWROUTE or RTM_DELROUTE
type RouteUpdate struct {
	Type uint16
	Route
}

type NexthopInfo struct {
	LinkIndex int
	Hops      int
	Gw        net.IP
	Flags     int
	NewDst    Destination
	Encap     Encap
	Via       Destination
}

func (n *NexthopInfo) String() string {
	elems := []string{}
	elems = append(elems, fmt.Sprintf("Ifindex: %d", n.LinkIndex))
	if n.NewDst != nil {
		elems = append(elems, fmt.Sprintf("NewDst: %s", n.NewDst))
	}
	if n.Encap != nil {
		elems = append(elems, fmt.Sprintf("Encap: %s", n.Encap))
	}
	if n.Via != nil {
		elems = append(elems, fmt.Sprintf("Via: %s", n.Via))
	}
	elems = append(elems, fmt.Sprintf("Weight: %d", n.Hops+1))
	elems = append(elems, fmt.Sprintf("Gw: %s", n.Gw))
	elems = append(elems, fmt.Sprintf("Flags: %s", n.ListFlags()))
	return fmt.Sprintf("{%s}", strings.Join(elems, " "))
}

func (n NexthopInfo) Equal(x NexthopInfo) bool {
	return n.LinkIndex == x.LinkIndex &&
		n.Hops == x.Hops &&
		n.Gw.Equal(x.Gw) &&
		n.Flags == x.Flags &&
		(n.NewDst == x.NewDst || (n.NewDst != nil && n.NewDst.Equal(x.NewDst))) &&
		(n.Encap == x.Encap || (n.Encap != nil && n.Encap.Equal(x.Encap)))
}

type nexthopInfoSlice []*NexthopInfo

func (n nexthopInfoSlice) Equal(x []*NexthopInfo) bool {
	if len(n) != len(x) {
		return false
	}
	for i := range n {
		if n[i] == nil || x[i] == nil {
			return false
		}
		if !n[i].Equal(*x[i]) {
			return false
		}
	}
	return true
}

// ipNetEqual returns true iff both IPNet are equal
func ipNetEqual(ipn1 *net.IPNet, ipn2 *net.IPNet) bool {
	if ipn1 == ipn2 {
		return true
	}
	if ipn1 == nil || ipn2 == nil {
		return false
	}
	m1, _ := ipn1.Mask.Size()
	m2, _ := ipn2.Mask.Size()
	return m1 == m2 && ipn1.IP.Equal(ipn2.IP)
}
07070100000C4E000081A4000000000000000000000001645E367C0000A2D0000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/route_linux.go  package netlink

import (
	"bytes"
	"encoding/binary"
	"fmt"
	"net"
	"strconv"
	"strings"
	"syscall"

	"github.com/vishvananda/netlink/nl"
	"github.com/vishvananda/netns"
	"golang.org/x/sys/unix"
)

// RtAttr is shared so it is in netlink_linux.go

const (
	SCOPE_UNIVERSE Scope = unix.RT_SCOPE_UNIVERSE
	SCOPE_SITE     Scope = unix.RT_SCOPE_SITE
	SCOPE_LINK     Scope = unix.RT_SCOPE_LINK
	SCOPE_HOST     Scope = unix.RT_SCOPE_HOST
	SCOPE_NOWHERE  Scope = unix.RT_SCOPE_NOWHERE
)

func (s Scope) String() string {
	switch s {
	case SCOPE_UNIVERSE:
		return "universe"
	case SCOPE_SITE:
		return "site"
	case SCOPE_LINK:
		return "link"
	case SCOPE_HOST:
		return "host"
	case SCOPE_NOWHERE:
		return "nowhere"
	default:
		return "unknown"
	}
}


const (
	FLAG_ONLINK    NextHopFlag = unix.RTNH_F_ONLINK
	FLAG_PERVASIVE NextHopFlag = unix.RTNH_F_PERVASIVE
)

var testFlags = []flagString{
	{f: FLAG_ONLINK, s: "onlink"},
	{f: FLAG_PERVASIVE, s: "pervasive"},
}

func listFlags(flag int) []string {
	var flags []string
	for _, tf := range testFlags {
		if flag&int(tf.f) != 0 {
			flags = append(flags, tf.s)
		}
	}
	return flags
}

func (r *Route) ListFlags() []string {
	return listFlags(r.Flags)
}

func (n *NexthopInfo) ListFlags() []string {
	return listFlags(n.Flags)
}

type MPLSDestination struct {
	Labels []int
}

func (d *MPLSDestination) Family() int {
	return nl.FAMILY_MPLS
}

func (d *MPLSDestination) Decode(buf []byte) error {
	d.Labels = nl.DecodeMPLSStack(buf)
	return nil
}

func (d *MPLSDestination) Encode() ([]byte, error) {
	return nl.EncodeMPLSStack(d.Labels...), nil
}

func (d *MPLSDestination) String() string {
	s := make([]string, 0, len(d.Labels))
	for _, l := range d.Labels {
		s = append(s, fmt.Sprintf("%d", l))
	}
	return strings.Join(s, "/")
}

func (d *MPLSDestination) Equal(x Destination) bool {
	o, ok := x.(*MPLSDestination)
	if !ok {
		return false
	}
	if d == nil && o == nil {
		return true
	}
	if d == nil || o == nil {
		return false
	}
	if d.Labels == nil && o.Labels == nil {
		return true
	}
	if d.Labels == nil || o.Labels == nil {
		return false
	}
	if len(d.Labels) != len(o.Labels) {
		return false
	}
	for i := range d.Labels {
		if d.Labels[i] != o.Labels[i] {
			return false
		}
	}
	return true
}

type MPLSEncap struct {
	Labels []int
}

func (e *MPLSEncap) Type() int {
	return nl.LWTUNNEL_ENCAP_MPLS
}

func (e *MPLSEncap) Decode(buf []byte) error {
	if len(buf) < 4 {
		return fmt.Errorf("lack of bytes")
	}
	l := native.Uint16(buf)
	if len(buf) < int(l) {
		return fmt.Errorf("lack of bytes")
	}
	buf = buf[:l]
	typ := native.Uint16(buf[2:])
	if typ != nl.MPLS_IPTUNNEL_DST {
		return fmt.Errorf("unknown MPLS Encap Type: %d", typ)
	}
	e.Labels = nl.DecodeMPLSStack(buf[4:])
	return nil
}

func (e *MPLSEncap) Encode() ([]byte, error) {
	s := nl.EncodeMPLSStack(e.Labels...)
	hdr := make([]byte, 4)
	native.PutUint16(hdr, uint16(len(s)+4))
	native.PutUint16(hdr[2:], nl.MPLS_IPTUNNEL_DST)
	return append(hdr, s...), nil
}

func (e *MPLSEncap) String() string {
	s := make([]string, 0, len(e.Labels))
	for _, l := range e.Labels {
		s = append(s, fmt.Sprintf("%d", l))
	}
	return strings.Join(s, "/")
}

func (e *MPLSEncap) Equal(x Encap) bool {
	o, ok := x.(*MPLSEncap)
	if !ok {
		return false
	}
	if e == nil && o == nil {
		return true
	}
	if e == nil || o == nil {
		return false
	}
	if e.Labels == nil && o.Labels == nil {
		return true
	}
	if e.Labels == nil || o.Labels == nil {
		return false
	}
	if len(e.Labels) != len(o.Labels) {
		return false
	}
	for i := range e.Labels {
		if e.Labels[i] != o.Labels[i] {
			return false
		}
	}
	return true
}

// SEG6 definitions
type SEG6Encap struct {
	Mode     int
	Segments []net.IP
}

func (e *SEG6Encap) Type() int {
	return nl.LWTUNNEL_ENCAP_SEG6
}
func (e *SEG6Encap) Decode(buf []byte) error {
	if len(buf) < 4 {
		return fmt.Errorf("lack of bytes")
	}
	// Get Length(l) & Type(typ) : 2 + 2 bytes
	l := native.Uint16(buf)
	if len(buf) < int(l) {
		return fmt.Errorf("lack of bytes")
	}
	buf = buf[:l] // make sure buf size upper limit is Length
	typ := native.Uint16(buf[2:])
	// LWTUNNEL_ENCAP_SEG6 has only one attr type SEG6_IPTUNNEL_SRH
	if typ != nl.SEG6_IPTUNNEL_SRH {
		return fmt.Errorf("unknown SEG6 Type: %d", typ)
	}

	var err error
	e.Mode, e.Segments, err = nl.DecodeSEG6Encap(buf[4:])

	return err
}
func (e *SEG6Encap) Encode() ([]byte, error) {
	s, err := nl.EncodeSEG6Encap(e.Mode, e.Segments)
	hdr := make([]byte, 4)
	native.PutUint16(hdr, uint16(len(s)+4))
	native.PutUint16(hdr[2:], nl.SEG6_IPTUNNEL_SRH)
	return append(hdr, s...), err
}
func (e *SEG6Encap) String() string {
	segs := make([]string, 0, len(e.Segments))
	// append segment backwards (from n to 0) since seg#0 is the last segment.
	for i := len(e.Segments); i > 0; i-- {
		segs = append(segs, e.Segments[i-1].String())
	}
	str := fmt.Sprintf("mode %s segs %d [ %s ]", nl.SEG6EncapModeString(e.Mode),
		len(e.Segments), strings.Join(segs, " "))
	return str
}
func (e *SEG6Encap) Equal(x Encap) bool {
	o, ok := x.(*SEG6Encap)
	if !ok {
		return false
	}
	if e == o {
		return true
	}
	if e == nil || o == nil {
		return false
	}
	if e.Mode != o.Mode {
		return false
	}
	if len(e.Segments) != len(o.Segments) {
		return false
	}
	for i := range e.Segments {
		if !e.Segments[i].Equal(o.Segments[i]) {
			return false
		}
	}
	return true
}

// SEG6LocalEncap definitions
type SEG6LocalEncap struct {
	Flags    [nl.SEG6_LOCAL_MAX]bool
	Action   int
	Segments []net.IP // from SRH in seg6_local_lwt
	Table    int      // table id for End.T and End.DT6
	InAddr   net.IP
	In6Addr  net.IP
	Iif      int
	Oif      int
}

func (e *SEG6LocalEncap) Type() int {
	return nl.LWTUNNEL_ENCAP_SEG6_LOCAL
}
func (e *SEG6LocalEncap) Decode(buf []byte) error {
	attrs, err := nl.ParseRouteAttr(buf)
	if err != nil {
		return err
	}
	for _, attr := range attrs {
		switch attr.Attr.Type {
		case nl.SEG6_LOCAL_ACTION:
			e.Action = int(native.Uint32(attr.Value[0:4]))
			e.Flags[nl.SEG6_LOCAL_ACTION] = true
		case nl.SEG6_LOCAL_SRH:
			e.Segments, err = nl.DecodeSEG6Srh(attr.Value[:])
			e.Flags[nl.SEG6_LOCAL_SRH] = true
		case nl.SEG6_LOCAL_TABLE:
			e.Table = int(native.Uint32(attr.Value[0:4]))
			e.Flags[nl.SEG6_LOCAL_TABLE] = true
		case nl.SEG6_LOCAL_NH4:
			e.InAddr = net.IP(attr.Value[0:4])
			e.Flags[nl.SEG6_LOCAL_NH4] = true
		case nl.SEG6_LOCAL_NH6:
			e.In6Addr = net.IP(attr.Value[0:16])
			e.Flags[nl.SEG6_LOCAL_NH6] = true
		case nl.SEG6_LOCAL_IIF:
			e.Iif = int(native.Uint32(attr.Value[0:4]))
			e.Flags[nl.SEG6_LOCAL_IIF] = true
		case nl.SEG6_LOCAL_OIF:
			e.Oif = int(native.Uint32(attr.Value[0:4]))
			e.Flags[nl.SEG6_LOCAL_OIF] = true
		}
	}
	return err
}
func (e *SEG6LocalEncap) Encode() ([]byte, error) {
	var err error
	res := make([]byte, 8)
	native.PutUint16(res, 8) // length
	native.PutUint16(res[2:], nl.SEG6_LOCAL_ACTION)
	native.PutUint32(res[4:], uint32(e.Action))
	if e.Flags[nl.SEG6_LOCAL_SRH] {
		srh, err := nl.EncodeSEG6Srh(e.Segments)
		if err != nil {
			return nil, err
		}
		attr := make([]byte, 4)
		native.PutUint16(attr, uint16(len(srh)+4))
		native.PutUint16(attr[2:], nl.SEG6_LOCAL_SRH)
		attr = append(attr, srh...)
		res = append(res, attr...)
	}
	if e.Flags[nl.SEG6_LOCAL_TABLE] {
		attr := make([]byte, 8)
		native.PutUint16(attr, 8)
		native.PutUint16(attr[2:], nl.SEG6_LOCAL_TABLE)
		native.PutUint32(attr[4:], uint32(e.Table))
		res = append(res, attr...)
	}
	if e.Flags[nl.SEG6_LOCAL_NH4] {
		attr := make([]byte, 4)
		native.PutUint16(attr, 8)
		native.PutUint16(attr[2:], nl.SEG6_LOCAL_NH4)
		ipv4 := e.InAddr.To4()
		if ipv4 == nil {
			err = fmt.Errorf("SEG6_LOCAL_NH4 has invalid IPv4 address")
			return nil, err
		}
		attr = append(attr, ipv4...)
		res = append(res, attr...)
	}
	if e.Flags[nl.SEG6_LOCAL_NH6] {
		attr := make([]byte, 4)
		native.PutUint16(attr, 20)
		native.PutUint16(attr[2:], nl.SEG6_LOCAL_NH6)
		attr = append(attr, e.In6Addr...)
		res = append(res, attr...)
	}
	if e.Flags[nl.SEG6_LOCAL_IIF] {
		attr := make([]byte, 8)
		native.PutUint16(attr, 8)
		native.PutUint16(attr[2:], nl.SEG6_LOCAL_IIF)
		native.PutUint32(attr[4:], uint32(e.Iif))
		res = append(res, attr...)
	}
	if e.Flags[nl.SEG6_LOCAL_OIF] {
		attr := make([]byte, 8)
		native.PutUint16(attr, 8)
		native.PutUint16(attr[2:], nl.SEG6_LOCAL_OIF)
		native.PutUint32(attr[4:], uint32(e.Oif))
		res = append(res, attr...)
	}
	return res, err
}
func (e *SEG6LocalEncap) String() string {
	strs := make([]string, 0, nl.SEG6_LOCAL_MAX)
	strs = append(strs, fmt.Sprintf("action %s", nl.SEG6LocalActionString(e.Action)))

	if e.Flags[nl.SEG6_LOCAL_TABLE] {
		strs = append(strs, fmt.Sprintf("table %d", e.Table))
	}
	if e.Flags[nl.SEG6_LOCAL_NH4] {
		strs = append(strs, fmt.Sprintf("nh4 %s", e.InAddr))
	}
	if e.Flags[nl.SEG6_LOCAL_NH6] {
		strs = append(strs, fmt.Sprintf("nh6 %s", e.In6Addr))
	}
	if e.Flags[nl.SEG6_LOCAL_IIF] {
		link, err := LinkByIndex(e.Iif)
		if err != nil {
			strs = append(strs, fmt.Sprintf("iif %d", e.Iif))
		} else {
			strs = append(strs, fmt.Sprintf("iif %s", link.Attrs().Name))
		}
	}
	if e.Flags[nl.SEG6_LOCAL_OIF] {
		link, err := LinkByIndex(e.Oif)
		if err != nil {
			strs = append(strs, fmt.Sprintf("oif %d", e.Oif))
		} else {
			strs = append(strs, fmt.Sprintf("oif %s", link.Attrs().Name))
		}
	}
	if e.Flags[nl.SEG6_LOCAL_SRH] {
		segs := make([]string, 0, len(e.Segments))
		//append segment backwards (from n to 0) since seg#0 is the last segment.
		for i := len(e.Segments); i > 0; i-- {
			segs = append(segs, e.Segments[i-1].String())
		}
		strs = append(strs, fmt.Sprintf("segs %d [ %s ]", len(e.Segments), strings.Join(segs, " ")))
	}
	return strings.Join(strs, " ")
}
func (e *SEG6LocalEncap) Equal(x Encap) bool {
	o, ok := x.(*SEG6LocalEncap)
	if !ok {
		return false
	}
	if e == o {
		return true
	}
	if e == nil || o == nil {
		return false
	}
	// compare all arrays first
	for i := range e.Flags {
		if e.Flags[i] != o.Flags[i] {
			return false
		}
	}
	if len(e.Segments) != len(o.Segments) {
		return false
	}
	for i := range e.Segments {
		if !e.Segments[i].Equal(o.Segments[i]) {
			return false
		}
	}
	// compare values
	if !e.InAddr.Equal(o.InAddr) || !e.In6Addr.Equal(o.In6Addr) {
		return false
	}
	if e.Action != o.Action || e.Table != o.Table || e.Iif != o.Iif || e.Oif != o.Oif {
		return false
	}
	return true
}

// Encap BPF definitions
type bpfObj struct {
	progFd   int
	progName string
}
type BpfEncap struct {
	progs    [nl.LWT_BPF_MAX]bpfObj
	headroom int
}

// SetProg adds a bpf function to the route via netlink RTA_ENCAP. The fd must be a bpf
// program loaded with bpf(type=BPF_PROG_TYPE_LWT_*) matching the direction the program should
// be applied to (LWT_BPF_IN, LWT_BPF_OUT, LWT_BPF_XMIT).
func (e *BpfEncap) SetProg(mode, progFd int, progName string) error {
	if progFd <= 0 {
		return fmt.Errorf("lwt bpf SetProg: invalid fd")
	}
	if mode <= nl.LWT_BPF_UNSPEC || mode >= nl.LWT_BPF_XMIT_HEADROOM {
		return fmt.Errorf("lwt bpf SetProg:invalid mode")
	}
	e.progs[mode].progFd = progFd
	e.progs[mode].progName = fmt.Sprintf("%s[fd:%d]", progName, progFd)
	return nil
}

// SetXmitHeadroom sets the xmit headroom (LWT_BPF_MAX_HEADROOM) via netlink RTA_ENCAP.
// maximum headroom is LWT_BPF_MAX_HEADROOM
func (e *BpfEncap) SetXmitHeadroom(headroom int) error {
	if headroom > nl.LWT_BPF_MAX_HEADROOM || headroom < 0 {
		return fmt.Errorf("invalid headroom size. range is 0 - %d", nl.LWT_BPF_MAX_HEADROOM)
	}
	e.headroom = headroom
	return nil
}

func (e *BpfEncap) Type() int {
	return nl.LWTUNNEL_ENCAP_BPF
}
func (e *BpfEncap) Decode(buf []byte) error {
	if len(buf) < 4 {
		return fmt.Errorf("lwt bpf decode: lack of bytes")
	}
	native := nl.NativeEndian()
	attrs, err := nl.ParseRouteAttr(buf)
	if err != nil {
		return fmt.Errorf("lwt bpf decode: failed parsing attribute. err: %v", err)
	}
	for _, attr := range attrs {
		if int(attr.Attr.Type) < 1 {
			// nl.LWT_BPF_UNSPEC
			continue
		}
		if int(attr.Attr.Type) > nl.LWT_BPF_MAX {
			return fmt.Errorf("lwt bpf decode: received unknown attribute type: %d", attr.Attr.Type)
		}
		switch int(attr.Attr.Type) {
		case nl.LWT_BPF_MAX_HEADROOM:
			e.headroom = int(native.Uint32(attr.Value))
		default:
			bpfO := bpfObj{}
			parsedAttrs, err := nl.ParseRouteAttr(attr.Value)
			if err != nil {
				return fmt.Errorf("lwt bpf decode: failed parsing route attribute")
			}
			for _, parsedAttr := range parsedAttrs {
				switch int(parsedAttr.Attr.Type) {
				case nl.LWT_BPF_PROG_FD:
					bpfO.progFd = int(native.Uint32(parsedAttr.Value))
				case nl.LWT_BPF_PROG_NAME:
					bpfO.progName = string(parsedAttr.Value)
				default:
					return fmt.Errorf("lwt bpf decode: received unknown attribute: type: %d, len: %d", parsedAttr.Attr.Type, parsedAttr.Attr.Len)
				}
			}
			e.progs[attr.Attr.Type] = bpfO
		}
	}
	return nil
}

func (e *BpfEncap) Encode() ([]byte, error) {
	buf := make([]byte, 0)
	native = nl.NativeEndian()
	for index, attr := range e.progs {
		nlMsg := nl.NewRtAttr(index, []byte{})
		if attr.progFd != 0 {
			nlMsg.AddRtAttr(nl.LWT_BPF_PROG_FD, nl.Uint32Attr(uint32(attr.progFd)))
		}
		if attr.progName != "" {
			nlMsg.AddRtAttr(nl.LWT_BPF_PROG_NAME, nl.ZeroTerminated(attr.progName))
		}
		if nlMsg.Len() > 4 {
			buf = append(buf, nlMsg.Serialize()...)
		}
	}
	if len(buf) <= 4 {
		return nil, fmt.Errorf("lwt bpf encode: bpf obj definitions returned empty buffer")
	}
	if e.headroom > 0 {
		hRoom := nl.NewRtAttr(nl.LWT_BPF_XMIT_HEADROOM, nl.Uint32Attr(uint32(e.headroom)))
		buf = append(buf, hRoom.Serialize()...)
	}
	return buf, nil
}

func (e *BpfEncap) String() string {
	progs := make([]string, 0)
	for index, obj := range e.progs {
		empty := bpfObj{}
		switch index {
		case nl.LWT_BPF_IN:
			if obj != empty {
				progs = append(progs, fmt.Sprintf("in: %s", obj.progName))
			}
		case nl.LWT_BPF_OUT:
			if obj != empty {
				progs = append(progs, fmt.Sprintf("out: %s", obj.progName))
			}
		case nl.LWT_BPF_XMIT:
			if obj != empty {
				progs = append(progs, fmt.Sprintf("xmit: %s", obj.progName))
			}
		}
	}
	if e.headroom > 0 {
		progs = append(progs, fmt.Sprintf("xmit headroom: %d", e.headroom))
	}
	return strings.Join(progs, " ")
}

func (e *BpfEncap) Equal(x Encap) bool {
	o, ok := x.(*BpfEncap)
	if !ok {
		return false
	}
	if e.headroom != o.headroom {
		return false
	}
	for i := range o.progs {
		if o.progs[i] != e.progs[i] {
			return false
		}
	}
	return true
}

type Via struct {
	AddrFamily int
	Addr       net.IP
}

func (v *Via) Equal(x Destination) bool {
	o, ok := x.(*Via)
	if !ok {
		return false
	}
	if v.AddrFamily == x.Family() && v.Addr.Equal(o.Addr) {
		return true
	}
	return false
}

func (v *Via) String() string {
	return fmt.Sprintf("Family: %d, Address: %s", v.AddrFamily, v.Addr.String())
}

func (v *Via) Family() int {
	return v.AddrFamily
}

func (v *Via) Encode() ([]byte, error) {
	buf := &bytes.Buffer{}
	err := binary.Write(buf, native, uint16(v.AddrFamily))
	if err != nil {
		return nil, err
	}
	err = binary.Write(buf, native, v.Addr)
	if err != nil {
		return nil, err
	}
	return buf.Bytes(), nil
}

func (v *Via) Decode(b []byte) error {
	if len(b) < 6 {
		return fmt.Errorf("decoding failed: buffer too small (%d bytes)", len(b))
	}
	v.AddrFamily = int(native.Uint16(b[0:2]))
	if v.AddrFamily == nl.FAMILY_V4 {
		v.Addr = net.IP(b[2:6])
		return nil
	} else if v.AddrFamily == nl.FAMILY_V6 {
		if len(b) < 18 {
			return fmt.Errorf("decoding failed: buffer too small (%d bytes)", len(b))
		}
		v.Addr = net.IP(b[2:])
		return nil
	}
	return fmt.Errorf("decoding failed: address family %d unknown", v.AddrFamily)
}

// RouteAdd will add a route to the system.
// Equivalent to: `ip route add $route`
func RouteAdd(route *Route) error {
	return pkgHandle.RouteAdd(route)
}

// RouteAdd will add a route to the system.
// Equivalent to: `ip route add $route`
func (h *Handle) RouteAdd(route *Route) error {
	flags := unix.NLM_F_CREATE | unix.NLM_F_EXCL | unix.NLM_F_ACK
	req := h.newNetlinkRequest(unix.RTM_NEWROUTE, flags)
	return h.routeHandle(route, req, nl.NewRtMsg())
}

// RouteAppend will append a route to the system.
// Equivalent to: `ip route append $route`
func RouteAppend(route *Route) error {
	return pkgHandle.RouteAppend(route)
}

// RouteAppend will append a route to the system.
// Equivalent to: `ip route append $route`
func (h *Handle) RouteAppend(route *Route) error {
	flags := unix.NLM_F_CREATE | unix.NLM_F_APPEND | unix.NLM_F_ACK
	req := h.newNetlinkRequest(unix.RTM_NEWROUTE, flags)
	return h.routeHandle(route, req, nl.NewRtMsg())
}

// RouteAddEcmp will add a route to the system.
func RouteAddEcmp(route *Route) error {
	return pkgHandle.RouteAddEcmp(route)
}

// RouteAddEcmp will add a route to the system.
func (h *Handle) RouteAddEcmp(route *Route) error {
	flags := unix.NLM_F_CREATE | unix.NLM_F_ACK
	req := h.newNetlinkRequest(unix.RTM_NEWROUTE, flags)
	return h.routeHandle(route, req, nl.NewRtMsg())
}

// RouteReplace will add a route to the system.
// Equivalent to: `ip route replace $route`
func RouteReplace(route *Route) error {
	return pkgHandle.RouteReplace(route)
}

// RouteReplace will add a route to the system.
// Equivalent to: `ip route replace $route`
func (h *Handle) RouteReplace(route *Route) error {
	flags := unix.NLM_F_CREATE | unix.NLM_F_REPLACE | unix.NLM_F_ACK
	req := h.newNetlinkRequest(unix.RTM_NEWROUTE, flags)
	return h.routeHandle(route, req, nl.NewRtMsg())
}

// RouteDel will delete a route from the system.
// Equivalent to: `ip route del $route`
func RouteDel(route *Route) error {
	return pkgHandle.RouteDel(route)
}

// RouteDel will delete a route from the system.
// Equivalent to: `ip route del $route`
func (h *Handle) RouteDel(route *Route) error {
	req := h.newNetlinkRequest(unix.RTM_DELROUTE, unix.NLM_F_ACK)
	return h.routeHandle(route, req, nl.NewRtDelMsg())
}

func (h *Handle) routeHandle(route *Route, req *nl.NetlinkRequest, msg *nl.RtMsg) error {
	if (route.Dst == nil || route.Dst.IP == nil) && route.Src == nil && route.Gw == nil && route.MPLSDst == nil {
		return fmt.Errorf("one of Dst.IP, Src, or Gw must not be nil")
	}

	family := -1
	var rtAttrs []*nl.RtAttr

	if route.Dst != nil && route.Dst.IP != nil {
		dstLen, _ := route.Dst.Mask.Size()
		msg.Dst_len = uint8(dstLen)
		dstFamily := nl.GetIPFamily(route.Dst.IP)
		family = dstFamily
		var dstData []byte
		if dstFamily == FAMILY_V4 {
			dstData = route.Dst.IP.To4()
		} else {
			dstData = route.Dst.IP.To16()
		}
		rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_DST, dstData))
	} else if route.MPLSDst != nil {
		family = nl.FAMILY_MPLS
		msg.Dst_len = uint8(20)
		msg.Type = unix.RTN_UNICAST
		rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_DST, nl.EncodeMPLSStack(*route.MPLSDst)))
	}

	if route.NewDst != nil {
		if family != -1 && family != route.NewDst.Family() {
			return fmt.Errorf("new destination and destination are not the same address family")
		}
		buf, err := route.NewDst.Encode()
		if err != nil {
			return err
		}
		rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_NEWDST, buf))
	}

	if route.Encap != nil {
		buf := make([]byte, 2)
		native.PutUint16(buf, uint16(route.Encap.Type()))
		rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_ENCAP_TYPE, buf))
		buf, err := route.Encap.Encode()
		if err != nil {
			return err
		}
		switch route.Encap.Type() {
		case nl.LWTUNNEL_ENCAP_BPF:
			rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_ENCAP|unix.NLA_F_NESTED, buf))
		default:
			rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_ENCAP, buf))
		}

	}

	if route.Src != nil {
		srcFamily := nl.GetIPFamily(route.Src)
		if family != -1 && family != srcFamily {
			return fmt.Errorf("source and destination ip are not the same IP family")
		}
		family = srcFamily
		var srcData []byte
		if srcFamily == FAMILY_V4 {
			srcData = route.Src.To4()
		} else {
			srcData = route.Src.To16()
		}
		// The commonly used src ip for routes is actually PREFSRC
		rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_PREFSRC, srcData))
	}

	if route.Gw != nil {
		gwFamily := nl.GetIPFamily(route.Gw)
		if family != -1 && family != gwFamily {
			return fmt.Errorf("gateway, source, and destination ip are not the same IP family")
		}
		family = gwFamily
		var gwData []byte
		if gwFamily == FAMILY_V4 {
			gwData = route.Gw.To4()
		} else {
			gwData = route.Gw.To16()
		}
		rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_GATEWAY, gwData))
	}

	if route.Via != nil {
		buf, err := route.Via.Encode()
		if err != nil {
			return fmt.Errorf("failed to encode RTA_VIA: %v", err)
		}
		rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_VIA, buf))
	}

	if len(route.MultiPath) > 0 {
		buf := []byte{}
		for _, nh := range route.MultiPath {
			rtnh := &nl.RtNexthop{
				RtNexthop: unix.RtNexthop{
					Hops:    uint8(nh.Hops),
					Ifindex: int32(nh.LinkIndex),
					Flags:   uint8(nh.Flags),
				},
			}
			children := []nl.NetlinkRequestData{}
			if nh.Gw != nil {
				gwFamily := nl.GetIPFamily(nh.Gw)
				if family != -1 && family != gwFamily {
					return fmt.Errorf("gateway, source, and destination ip are not the same IP family")
				}
				if gwFamily == FAMILY_V4 {
					children = append(children, nl.NewRtAttr(unix.RTA_GATEWAY, []byte(nh.Gw.To4())))
				} else {
					children = append(children, nl.NewRtAttr(unix.RTA_GATEWAY, []byte(nh.Gw.To16())))
				}
			}
			if nh.NewDst != nil {
				if family != -1 && family != nh.NewDst.Family() {
					return fmt.Errorf("new destination and destination are not the same address family")
				}
				buf, err := nh.NewDst.Encode()
				if err != nil {
					return err
				}
				children = append(children, nl.NewRtAttr(unix.RTA_NEWDST, buf))
			}
			if nh.Encap != nil {
				buf := make([]byte, 2)
				native.PutUint16(buf, uint16(nh.Encap.Type()))
				children = append(children, nl.NewRtAttr(unix.RTA_ENCAP_TYPE, buf))
				buf, err := nh.Encap.Encode()
				if err != nil {
					return err
				}
				children = append(children, nl.NewRtAttr(unix.RTA_ENCAP, buf))
			}
			if nh.Via != nil {
				buf, err := nh.Via.Encode()
				if err != nil {
					return err
				}
				children = append(children, nl.NewRtAttr(unix.RTA_VIA, buf))
			}
			rtnh.Children = children
			buf = append(buf, rtnh.Serialize()...)
		}
		rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_MULTIPATH, buf))
	}

	if route.Table > 0 {
		if route.Table >= 256 {
			msg.Table = unix.RT_TABLE_UNSPEC
			b := make([]byte, 4)
			native.PutUint32(b, uint32(route.Table))
			rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_TABLE, b))
		} else {
			msg.Table = uint8(route.Table)
		}
	}

	if route.Priority > 0 {
		b := make([]byte, 4)
		native.PutUint32(b, uint32(route.Priority))
		rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_PRIORITY, b))
	}
	if route.Realm > 0 {
		b := make([]byte, 4)
		native.PutUint32(b, uint32(route.Realm))
		rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_FLOW, b))
	}
	if route.Tos > 0 {
		msg.Tos = uint8(route.Tos)
	}
	if route.Protocol > 0 {
		msg.Protocol = uint8(route.Protocol)
	}
	if route.Type > 0 {
		msg.Type = uint8(route.Type)
	}

	var metrics []*nl.RtAttr
	if route.MTU > 0 {
		b := nl.Uint32Attr(uint32(route.MTU))
		metrics = append(metrics, nl.NewRtAttr(unix.RTAX_MTU, b))
	}
	if route.Window > 0 {
		b := nl.Uint32Attr(uint32(route.Window))
		metrics = append(metrics, nl.NewRtAttr(unix.RTAX_WINDOW, b))
	}
	if route.Rtt > 0 {
		b := nl.Uint32Attr(uint32(route.Rtt))
		metrics = append(metrics, nl.NewRtAttr(unix.RTAX_RTT, b))
	}
	if route.RttVar > 0 {
		b := nl.Uint32Attr(uint32(route.RttVar))
		metrics = append(metrics, nl.NewRtAttr(unix.RTAX_RTTVAR, b))
	}
	if route.Ssthresh > 0 {
		b := nl.Uint32Attr(uint32(route.Ssthresh))
		metrics = append(metrics, nl.NewRtAttr(unix.RTAX_SSTHRESH, b))
	}
	if route.Cwnd > 0 {
		b := nl.Uint32Attr(uint32(route.Cwnd))
		metrics = append(metrics, nl.NewRtAttr(unix.RTAX_CWND, b))
	}
	if route.AdvMSS > 0 {
		b := nl.Uint32Attr(uint32(route.AdvMSS))
		metrics = append(metrics, nl.NewRtAttr(unix.RTAX_ADVMSS, b))
	}
	if route.Reordering > 0 {
		b := nl.Uint32Attr(uint32(route.Reordering))
		metrics = append(metrics, nl.NewRtAttr(unix.RTAX_REORDERING, b))
	}
	if route.Hoplimit > 0 {
		b := nl.Uint32Attr(uint32(route.Hoplimit))
		metrics = append(metrics, nl.NewRtAttr(unix.RTAX_HOPLIMIT, b))
	}
	if route.InitCwnd > 0 {
		b := nl.Uint32Attr(uint32(route.InitCwnd))
		metrics = append(metrics, nl.NewRtAttr(unix.RTAX_INITCWND, b))
	}
	if route.Features > 0 {
		b := nl.Uint32Attr(uint32(route.Features))
		metrics = append(metrics, nl.NewRtAttr(unix.RTAX_FEATURES, b))
	}
	if route.RtoMin > 0 {
		b := nl.Uint32Attr(uint32(route.RtoMin))
		metrics = append(metrics, nl.NewRtAttr(unix.RTAX_RTO_MIN, b))
	}
	if route.InitRwnd > 0 {
		b := nl.Uint32Attr(uint32(route.InitRwnd))
		metrics = append(metrics, nl.NewRtAttr(unix.RTAX_INITRWND, b))
	}
	if route.QuickACK > 0 {
		b := nl.Uint32Attr(uint32(route.QuickACK))
		metrics = append(metrics, nl.NewRtAttr(unix.RTAX_QUICKACK, b))
	}
	if route.Congctl != "" {
		b := nl.ZeroTerminated(route.Congctl)
		metrics = append(metrics, nl.NewRtAttr(unix.RTAX_CC_ALGO, b))
	}
	if route.FastOpenNoCookie > 0 {
		b := nl.Uint32Attr(uint32(route.FastOpenNoCookie))
		metrics = append(metrics, nl.NewRtAttr(unix.RTAX_FASTOPEN_NO_COOKIE, b))
	}

	if metrics != nil {
		attr := nl.NewRtAttr(unix.RTA_METRICS, nil)
		for _, metric := range metrics {
			attr.AddChild(metric)
		}
		rtAttrs = append(rtAttrs, attr)
	}

	msg.Flags = uint32(route.Flags)
	msg.Scope = uint8(route.Scope)
	msg.Family = uint8(family)
	req.AddData(msg)
	for _, attr := range rtAttrs {
		req.AddData(attr)
	}

	b := make([]byte, 4)
	native.PutUint32(b, uint32(route.LinkIndex))

	req.AddData(nl.NewRtAttr(unix.RTA_OIF, b))

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// RouteList gets a list of routes in the system.
// Equivalent to: `ip route show`.
// The list can be filtered by link and ip family.
func RouteList(link Link, family int) ([]Route, error) {
	return pkgHandle.RouteList(link, family)
}

// RouteList gets a list of routes in the system.
// Equivalent to: `ip route show`.
// The list can be filtered by link and ip family.
func (h *Handle) RouteList(link Link, family int) ([]Route, error) {
	var routeFilter *Route
	if link != nil {
		routeFilter = &Route{
			LinkIndex: link.Attrs().Index,
		}
	}
	return h.RouteListFiltered(family, routeFilter, RT_FILTER_OIF)
}

// RouteListFiltered gets a list of routes in the system filtered with specified rules.
// All rules must be defined in RouteFilter struct
func RouteListFiltered(family int, filter *Route, filterMask uint64) ([]Route, error) {
	return pkgHandle.RouteListFiltered(family, filter, filterMask)
}

// RouteListFiltered gets a list of routes in the system filtered with specified rules.
// All rules must be defined in RouteFilter struct
func (h *Handle) RouteListFiltered(family int, filter *Route, filterMask uint64) ([]Route, error) {
	req := h.newNetlinkRequest(unix.RTM_GETROUTE, unix.NLM_F_DUMP)
	rtmsg := nl.NewRtMsg()
	rtmsg.Family = uint8(family)
	req.AddData(rtmsg)

	msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWROUTE)
	if err != nil {
		return nil, err
	}

	var res []Route
	for _, m := range msgs {
		msg := nl.DeserializeRtMsg(m)
		if msg.Flags&unix.RTM_F_CLONED != 0 {
			// Ignore cloned routes
			continue
		}
		if msg.Table != unix.RT_TABLE_MAIN {
			if filter == nil || filter != nil && filterMask&RT_FILTER_TABLE == 0 {
				// Ignore non-main tables
				continue
			}
		}
		route, err := deserializeRoute(m)
		if err != nil {
			return nil, err
		}
		if filter != nil {
			switch {
			case filterMask&RT_FILTER_TABLE != 0 && filter.Table != unix.RT_TABLE_UNSPEC && route.Table != filter.Table:
				continue
			case filterMask&RT_FILTER_PROTOCOL != 0 && route.Protocol != filter.Protocol:
				continue
			case filterMask&RT_FILTER_SCOPE != 0 && route.Scope != filter.Scope:
				continue
			case filterMask&RT_FILTER_TYPE != 0 && route.Type != filter.Type:
				continue
			case filterMask&RT_FILTER_TOS != 0 && route.Tos != filter.Tos:
				continue
			case filterMask&RT_FILTER_REALM != 0 && route.Realm != filter.Realm:
				continue
			case filterMask&RT_FILTER_OIF != 0 && route.LinkIndex != filter.LinkIndex:
				continue
			case filterMask&RT_FILTER_IIF != 0 && route.ILinkIndex != filter.ILinkIndex:
				continue
			case filterMask&RT_FILTER_GW != 0 && !route.Gw.Equal(filter.Gw):
				continue
			case filterMask&RT_FILTER_SRC != 0 && !route.Src.Equal(filter.Src):
				continue
			case filterMask&RT_FILTER_DST != 0:
				if filter.MPLSDst == nil || route.MPLSDst == nil || (*filter.MPLSDst) != (*route.MPLSDst) {
					if !ipNetEqual(route.Dst, filter.Dst) {
						continue
					}
				}
			case filterMask&RT_FILTER_HOPLIMIT != 0 && route.Hoplimit != filter.Hoplimit:
				continue
			}
		}
		res = append(res, route)
	}
	return res, nil
}

// deserializeRoute decodes a binary netlink message into a Route struct
func deserializeRoute(m []byte) (Route, error) {
	msg := nl.DeserializeRtMsg(m)
	attrs, err := nl.ParseRouteAttr(m[msg.Len():])
	if err != nil {
		return Route{}, err
	}
	route := Route{
		Scope:    Scope(msg.Scope),
		Protocol: RouteProtocol(int(msg.Protocol)),
		Table:    int(msg.Table),
		Type:     int(msg.Type),
		Tos:      int(msg.Tos),
		Flags:    int(msg.Flags),
		Family:   int(msg.Family),
	}

	var encap, encapType syscall.NetlinkRouteAttr
	for _, attr := range attrs {
		switch attr.Attr.Type {
		case unix.RTA_GATEWAY:
			route.Gw = net.IP(attr.Value)
		case unix.RTA_PREFSRC:
			route.Src = net.IP(attr.Value)
		case unix.RTA_DST:
			if msg.Family == nl.FAMILY_MPLS {
				stack := nl.DecodeMPLSStack(attr.Value)
				if len(stack) == 0 || len(stack) > 1 {
					return route, fmt.Errorf("invalid MPLS RTA_DST")
				}
				route.MPLSDst = &stack[0]
			} else {
				route.Dst = &net.IPNet{
					IP:   attr.Value,
					Mask: net.CIDRMask(int(msg.Dst_len), 8*len(attr.Value)),
				}
			}
		case unix.RTA_OIF:
			route.LinkIndex = int(native.Uint32(attr.Value[0:4]))
		case unix.RTA_IIF:
			route.ILinkIndex = int(native.Uint32(attr.Value[0:4]))
		case unix.RTA_PRIORITY:
			route.Priority = int(native.Uint32(attr.Value[0:4]))
		case unix.RTA_FLOW:
			route.Realm = int(native.Uint32(attr.Value[0:4]))
		case unix.RTA_TABLE:
			route.Table = int(native.Uint32(attr.Value[0:4]))
		case unix.RTA_MULTIPATH:
			parseRtNexthop := func(value []byte) (*NexthopInfo, []byte, error) {
				if len(value) < unix.SizeofRtNexthop {
					return nil, nil, fmt.Errorf("lack of bytes")
				}
				nh := nl.DeserializeRtNexthop(value)
				if len(value) < int(nh.RtNexthop.Len) {
					return nil, nil, fmt.Errorf("lack of bytes")
				}
				info := &NexthopInfo{
					LinkIndex: int(nh.RtNexthop.Ifindex),
					Hops:      int(nh.RtNexthop.Hops),
					Flags:     int(nh.RtNexthop.Flags),
				}
				attrs, err := nl.ParseRouteAttr(value[unix.SizeofRtNexthop:int(nh.RtNexthop.Len)])
				if err != nil {
					return nil, nil, err
				}
				var encap, encapType syscall.NetlinkRouteAttr
				for _, attr := range attrs {
					switch attr.Attr.Type {
					case unix.RTA_GATEWAY:
						info.Gw = net.IP(attr.Value)
					case unix.RTA_NEWDST:
						var d Destination
						switch msg.Family {
						case nl.FAMILY_MPLS:
							d = &MPLSDestination{}
						}
						if err := d.Decode(attr.Value); err != nil {
							return nil, nil, err
						}
						info.NewDst = d
					case unix.RTA_ENCAP_TYPE:
						encapType = attr
					case unix.RTA_ENCAP:
						encap = attr
					case unix.RTA_VIA:
						d := &Via{}
						if err := d.Decode(attr.Value); err != nil {
							return nil, nil, err
						}
						info.Via = d
					}
				}

				if len(encap.Value) != 0 && len(encapType.Value) != 0 {
					typ := int(native.Uint16(encapType.Value[0:2]))
					var e Encap
					switch typ {
					case nl.LWTUNNEL_ENCAP_MPLS:
						e = &MPLSEncap{}
						if err := e.Decode(encap.Value); err != nil {
							return nil, nil, err
						}
					}
					info.Encap = e
				}

				return info, value[int(nh.RtNexthop.Len):], nil
			}
			rest := attr.Value
			for len(rest) > 0 {
				info, buf, err := parseRtNexthop(rest)
				if err != nil {
					return route, err
				}
				route.MultiPath = append(route.MultiPath, info)
				rest = buf
			}
		case unix.RTA_NEWDST:
			var d Destination
			switch msg.Family {
			case nl.FAMILY_MPLS:
				d = &MPLSDestination{}
			}
			if err := d.Decode(attr.Value); err != nil {
				return route, err
			}
			route.NewDst = d
		case unix.RTA_VIA:
			v := &Via{}
			if err := v.Decode(attr.Value); err != nil {
				return route, err
			}
			route.Via = v
		case unix.RTA_ENCAP_TYPE:
			encapType = attr
		case unix.RTA_ENCAP:
			encap = attr
		case unix.RTA_METRICS:
			metrics, err := nl.ParseRouteAttr(attr.Value)
			if err != nil {
				return route, err
			}
			for _, metric := range metrics {
				switch metric.Attr.Type {
				case unix.RTAX_MTU:
					route.MTU = int(native.Uint32(metric.Value[0:4]))
				case unix.RTAX_WINDOW:
					route.Window = int(native.Uint32(metric.Value[0:4]))
				case unix.RTAX_RTT:
					route.Rtt = int(native.Uint32(metric.Value[0:4]))
				case unix.RTAX_RTTVAR:
					route.RttVar = int(native.Uint32(metric.Value[0:4]))
				case unix.RTAX_SSTHRESH:
					route.Ssthresh = int(native.Uint32(metric.Value[0:4]))
				case unix.RTAX_CWND:
					route.Cwnd = int(native.Uint32(metric.Value[0:4]))
				case unix.RTAX_ADVMSS:
					route.AdvMSS = int(native.Uint32(metric.Value[0:4]))
				case unix.RTAX_REORDERING:
					route.Reordering = int(native.Uint32(metric.Value[0:4]))
				case unix.RTAX_HOPLIMIT:
					route.Hoplimit = int(native.Uint32(metric.Value[0:4]))
				case unix.RTAX_INITCWND:
					route.InitCwnd = int(native.Uint32(metric.Value[0:4]))
				case unix.RTAX_FEATURES:
					route.Features = int(native.Uint32(metric.Value[0:4]))
				case unix.RTAX_RTO_MIN:
					route.RtoMin = int(native.Uint32(metric.Value[0:4]))
				case unix.RTAX_INITRWND:
					route.InitRwnd = int(native.Uint32(metric.Value[0:4]))
				case unix.RTAX_QUICKACK:
					route.QuickACK = int(native.Uint32(metric.Value[0:4]))
				case unix.RTAX_CC_ALGO:
					route.Congctl = nl.BytesToString(metric.Value)
				case unix.RTAX_FASTOPEN_NO_COOKIE:
					route.FastOpenNoCookie = int(native.Uint32(metric.Value[0:4]))
				}
			}
		}
	}

	if len(encap.Value) != 0 && len(encapType.Value) != 0 {
		typ := int(native.Uint16(encapType.Value[0:2]))
		var e Encap
		switch typ {
		case nl.LWTUNNEL_ENCAP_MPLS:
			e = &MPLSEncap{}
			if err := e.Decode(encap.Value); err != nil {
				return route, err
			}
		case nl.LWTUNNEL_ENCAP_SEG6:
			e = &SEG6Encap{}
			if err := e.Decode(encap.Value); err != nil {
				return route, err
			}
		case nl.LWTUNNEL_ENCAP_SEG6_LOCAL:
			e = &SEG6LocalEncap{}
			if err := e.Decode(encap.Value); err != nil {
				return route, err
			}
		case nl.LWTUNNEL_ENCAP_BPF:
			e = &BpfEncap{}
			if err := e.Decode(encap.Value); err != nil {
				return route, err
			}
		}
		route.Encap = e
	}

	return route, nil
}

// RouteGetOptions contains a set of options to use with
// RouteGetWithOptions
type RouteGetOptions struct {
	Iif     string
	Oif     string
	VrfName string
	SrcAddr net.IP
}

// RouteGetWithOptions gets a route to a specific destination from the host system.
// Equivalent to: 'ip route get <> vrf <VrfName>'.
func RouteGetWithOptions(destination net.IP, options *RouteGetOptions) ([]Route, error) {
	return pkgHandle.RouteGetWithOptions(destination, options)
}

// RouteGet gets a route to a specific destination from the host system.
// Equivalent to: 'ip route get'.
func RouteGet(destination net.IP) ([]Route, error) {
	return pkgHandle.RouteGet(destination)
}

// RouteGetWithOptions gets a route to a specific destination from the host system.
// Equivalent to: 'ip route get <> vrf <VrfName>'.
func (h *Handle) RouteGetWithOptions(destination net.IP, options *RouteGetOptions) ([]Route, error) {
	req := h.newNetlinkRequest(unix.RTM_GETROUTE, unix.NLM_F_REQUEST)
	family := nl.GetIPFamily(destination)
	var destinationData []byte
	var bitlen uint8
	if family == FAMILY_V4 {
		destinationData = destination.To4()
		bitlen = 32
	} else {
		destinationData = destination.To16()
		bitlen = 128
	}
	msg := &nl.RtMsg{}
	msg.Family = uint8(family)
	msg.Dst_len = bitlen
	if options != nil && options.SrcAddr != nil {
		msg.Src_len = bitlen
	}
	msg.Flags = unix.RTM_F_LOOKUP_TABLE
	req.AddData(msg)

	rtaDst := nl.NewRtAttr(unix.RTA_DST, destinationData)
	req.AddData(rtaDst)

	if options != nil {
		if options.VrfName != "" {
			link, err := LinkByName(options.VrfName)
			if err != nil {
				return nil, err
			}
			b := make([]byte, 4)
			native.PutUint32(b, uint32(link.Attrs().Index))

			req.AddData(nl.NewRtAttr(unix.RTA_OIF, b))
		}

		if len(options.Iif) > 0 {
			link, err := LinkByName(options.Iif)
			if err != nil {
				return nil, err
			}

			b := make([]byte, 4)
			native.PutUint32(b, uint32(link.Attrs().Index))

			req.AddData(nl.NewRtAttr(unix.RTA_IIF, b))
		}

		if len(options.Oif) > 0 {
			link, err := LinkByName(options.Oif)
			if err != nil {
				return nil, err
			}

			b := make([]byte, 4)
			native.PutUint32(b, uint32(link.Attrs().Index))

			req.AddData(nl.NewRtAttr(unix.RTA_OIF, b))
		}

		if options.SrcAddr != nil {
			var srcAddr []byte
			if family == FAMILY_V4 {
				srcAddr = options.SrcAddr.To4()
			} else {
				srcAddr = options.SrcAddr.To16()
			}

			req.AddData(nl.NewRtAttr(unix.RTA_SRC, srcAddr))
		}
	}

	msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWROUTE)
	if err != nil {
		return nil, err
	}

	var res []Route
	for _, m := range msgs {
		route, err := deserializeRoute(m)
		if err != nil {
			return nil, err
		}
		res = append(res, route)
	}
	return res, nil
}

// RouteGet gets a route to a specific destination from the host system.
// Equivalent to: 'ip route get'.
func (h *Handle) RouteGet(destination net.IP) ([]Route, error) {
	return h.RouteGetWithOptions(destination, nil)
}

// RouteSubscribe takes a chan down which notifications will be sent
// when routes are added or deleted. Close the 'done' chan to stop subscription.
func RouteSubscribe(ch chan<- RouteUpdate, done <-chan struct{}) error {
	return routeSubscribeAt(netns.None(), netns.None(), ch, done, nil, false)
}

// RouteSubscribeAt works like RouteSubscribe plus it allows the caller
// to choose the network namespace in which to subscribe (ns).
func RouteSubscribeAt(ns netns.NsHandle, ch chan<- RouteUpdate, done <-chan struct{}) error {
	return routeSubscribeAt(ns, netns.None(), ch, done, nil, false)
}

// RouteSubscribeOptions contains a set of options to use with
// RouteSubscribeWithOptions.
type RouteSubscribeOptions struct {
	Namespace     *netns.NsHandle
	ErrorCallback func(error)
	ListExisting  bool
}

// RouteSubscribeWithOptions work like RouteSubscribe but enable to
// provide additional options to modify the behavior. Currently, the
// namespace can be provided as well as an error callback.
func RouteSubscribeWithOptions(ch chan<- RouteUpdate, done <-chan struct{}, options RouteSubscribeOptions) error {
	if options.Namespace == nil {
		none := netns.None()
		options.Namespace = &none
	}
	return routeSubscribeAt(*options.Namespace, netns.None(), ch, done, options.ErrorCallback, options.ListExisting)
}

func routeSubscribeAt(newNs, curNs netns.NsHandle, ch chan<- RouteUpdate, done <-chan struct{}, cberr func(error), listExisting bool) error {
	s, err := nl.SubscribeAt(newNs, curNs, unix.NETLINK_ROUTE, unix.RTNLGRP_IPV4_ROUTE, unix.RTNLGRP_IPV6_ROUTE)
	if err != nil {
		return err
	}
	if done != nil {
		go func() {
			<-done
			s.Close()
		}()
	}
	if listExisting {
		req := pkgHandle.newNetlinkRequest(unix.RTM_GETROUTE,
			unix.NLM_F_DUMP)
		infmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)
		req.AddData(infmsg)
		if err := s.Send(req); err != nil {
			return err
		}
	}
	go func() {
		defer close(ch)
		for {
			msgs, from, err := s.Receive()
			if err != nil {
				if cberr != nil {
					cberr(fmt.Errorf("Receive failed: %v",
						err))
				}
				return
			}
			if from.Pid != nl.PidKernel {
				if cberr != nil {
					cberr(fmt.Errorf("Wrong sender portid %d, expected %d", from.Pid, nl.PidKernel))
				}
				continue
			}
			for _, m := range msgs {
				if m.Header.Type == unix.NLMSG_DONE {
					continue
				}
				if m.Header.Type == unix.NLMSG_ERROR {
					error := int32(native.Uint32(m.Data[0:4]))
					if error == 0 {
						continue
					}
					if cberr != nil {
						cberr(fmt.Errorf("error message: %v",
							syscall.Errno(-error)))
					}
					continue
				}
				route, err := deserializeRoute(m.Data)
				if err != nil {
					if cberr != nil {
						cberr(err)
					}
					continue
				}
				ch <- RouteUpdate{Type: m.Header.Type, Route: route}
			}
		}
	}()

	return nil
}

func (p RouteProtocol) String() string {
	switch int(p) {
	case unix.RTPROT_BABEL:
		return "babel"
	case unix.RTPROT_BGP:
		return "bgp"
	case unix.RTPROT_BIRD:
		return "bird"
	case unix.RTPROT_BOOT:
		return "boot"
	case unix.RTPROT_DHCP:
		return "dhcp"
	case unix.RTPROT_DNROUTED:
		return "dnrouted"
	case unix.RTPROT_EIGRP:
		return "eigrp"
	case unix.RTPROT_GATED:
		return "gated"
	case unix.RTPROT_ISIS:
		return "isis"
	//case unix.RTPROT_KEEPALIVED:
	//	return "keepalived"
	case unix.RTPROT_KERNEL:
		return "kernel"
	case unix.RTPROT_MROUTED:
		return "mrouted"
	case unix.RTPROT_MRT:
		return "mrt"
	case unix.RTPROT_NTK:
		return "ntk"
	case unix.RTPROT_OSPF:
		return "ospf"
	case unix.RTPROT_RA:
		return "ra"
	case unix.RTPROT_REDIRECT:
		return "redirect"
	case unix.RTPROT_RIP:
		return "rip"
	case unix.RTPROT_STATIC:
		return "static"
	case unix.RTPROT_UNSPEC:
		return "unspec"
	case unix.RTPROT_XORP:
		return "xorp"
	case unix.RTPROT_ZEBRA:
		return "zebra"
	default:
		return strconv.Itoa(int(p))
	}
}
07070100000C4F000081A4000000000000000000000001645E367C00000133000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/route_unspecified.go    // +build !linux

package netlink

import "strconv"

func (r *Route) ListFlags() []string {
	return []string{}
}

func (n *NexthopInfo) ListFlags() []string {
	return []string{}
}

func (s Scope) String() string {
	return "unknown"
}

func (p RouteProtocol) String() string {
	return strconv.Itoa(int(p))
}
 07070100000C50000081A4000000000000000000000001645E367C0000057E000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/rule.go package netlink

import (
	"fmt"
	"net"
)

// Rule represents a netlink rule.
type Rule struct {
	Priority          int
	Family            int
	Table             int
	Mark              int
	Mask              int
	Tos               uint
	TunID             uint
	Goto              int
	Src               *net.IPNet
	Dst               *net.IPNet
	Flow              int
	IifName           string
	OifName           string
	SuppressIfgroup   int
	SuppressPrefixlen int
	Invert            bool
	Dport             *RulePortRange
	Sport             *RulePortRange
	IPProto           int
}

func (r Rule) String() string {
	from := "all"
	if r.Src != nil && r.Src.String() != "<nil>" {
		from = r.Src.String()
	}

	to := "all"
	if r.Dst != nil && r.Dst.String() != "<nil>" {
		to = r.Dst.String()
	}

	return fmt.Sprintf("ip rule %d: from %s to %s table %d",
		r.Priority, from, to, r.Table)
}

// NewRule return empty rules.
func NewRule() *Rule {
	return &Rule{
		SuppressIfgroup:   -1,
		SuppressPrefixlen: -1,
		Priority:          -1,
		Mark:              -1,
		Mask:              -1,
		Goto:              -1,
		Flow:              -1,
	}
}

// NewRulePortRange creates rule sport/dport range.
func NewRulePortRange(start, end uint16) *RulePortRange {
	return &RulePortRange{Start: start, End: end}
}

// RulePortRange represents rule sport/dport range.
type RulePortRange struct {
	Start uint16
	End   uint16
}
  07070100000C51000081A4000000000000000000000001645E367C000020FF000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/rule_linux.go   package netlink

import (
	"bytes"
	"fmt"
	"net"

	"github.com/vishvananda/netlink/nl"
	"golang.org/x/sys/unix"
)

const FibRuleInvert = 0x2

// RuleAdd adds a rule to the system.
// Equivalent to: ip rule add
func RuleAdd(rule *Rule) error {
	return pkgHandle.RuleAdd(rule)
}

// RuleAdd adds a rule to the system.
// Equivalent to: ip rule add
func (h *Handle) RuleAdd(rule *Rule) error {
	req := h.newNetlinkRequest(unix.RTM_NEWRULE, unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)
	return ruleHandle(rule, req)
}

// RuleDel deletes a rule from the system.
// Equivalent to: ip rule del
func RuleDel(rule *Rule) error {
	return pkgHandle.RuleDel(rule)
}

// RuleDel deletes a rule from the system.
// Equivalent to: ip rule del
func (h *Handle) RuleDel(rule *Rule) error {
	req := h.newNetlinkRequest(unix.RTM_DELRULE, unix.NLM_F_ACK)
	return ruleHandle(rule, req)
}

func ruleHandle(rule *Rule, req *nl.NetlinkRequest) error {
	msg := nl.NewRtMsg()
	msg.Family = unix.AF_INET
	msg.Protocol = unix.RTPROT_BOOT
	msg.Scope = unix.RT_SCOPE_UNIVERSE
	msg.Table = unix.RT_TABLE_UNSPEC
	msg.Type = unix.RTN_UNSPEC
	if req.NlMsghdr.Flags&unix.NLM_F_CREATE > 0 {
		msg.Type = unix.RTN_UNICAST
	}
	if rule.Invert {
		msg.Flags |= FibRuleInvert
	}
	if rule.Family != 0 {
		msg.Family = uint8(rule.Family)
	}
	if rule.Table >= 0 && rule.Table < 256 {
		msg.Table = uint8(rule.Table)
	}
	if rule.Tos != 0 {
		msg.Tos = uint8(rule.Tos)
	}

	var dstFamily uint8
	var rtAttrs []*nl.RtAttr
	if rule.Dst != nil && rule.Dst.IP != nil {
		dstLen, _ := rule.Dst.Mask.Size()
		msg.Dst_len = uint8(dstLen)
		msg.Family = uint8(nl.GetIPFamily(rule.Dst.IP))
		dstFamily = msg.Family
		var dstData []byte
		if msg.Family == unix.AF_INET {
			dstData = rule.Dst.IP.To4()
		} else {
			dstData = rule.Dst.IP.To16()
		}
		rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_DST, dstData))
	}

	if rule.Src != nil && rule.Src.IP != nil {
		msg.Family = uint8(nl.GetIPFamily(rule.Src.IP))
		if dstFamily != 0 && dstFamily != msg.Family {
			return fmt.Errorf("source and destination ip are not the same IP family")
		}
		srcLen, _ := rule.Src.Mask.Size()
		msg.Src_len = uint8(srcLen)
		var srcData []byte
		if msg.Family == unix.AF_INET {
			srcData = rule.Src.IP.To4()
		} else {
			srcData = rule.Src.IP.To16()
		}
		rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_SRC, srcData))
	}

	req.AddData(msg)
	for i := range rtAttrs {
		req.AddData(rtAttrs[i])
	}

	if rule.Priority >= 0 {
		b := make([]byte, 4)
		native.PutUint32(b, uint32(rule.Priority))
		req.AddData(nl.NewRtAttr(nl.FRA_PRIORITY, b))
	}
	if rule.Mark >= 0 {
		b := make([]byte, 4)
		native.PutUint32(b, uint32(rule.Mark))
		req.AddData(nl.NewRtAttr(nl.FRA_FWMARK, b))
	}
	if rule.Mask >= 0 {
		b := make([]byte, 4)
		native.PutUint32(b, uint32(rule.Mask))
		req.AddData(nl.NewRtAttr(nl.FRA_FWMASK, b))
	}
	if rule.Flow >= 0 {
		b := make([]byte, 4)
		native.PutUint32(b, uint32(rule.Flow))
		req.AddData(nl.NewRtAttr(nl.FRA_FLOW, b))
	}
	if rule.TunID > 0 {
		b := make([]byte, 4)
		native.PutUint32(b, uint32(rule.TunID))
		req.AddData(nl.NewRtAttr(nl.FRA_TUN_ID, b))
	}
	if rule.Table >= 256 {
		b := make([]byte, 4)
		native.PutUint32(b, uint32(rule.Table))
		req.AddData(nl.NewRtAttr(nl.FRA_TABLE, b))
	}
	if msg.Table > 0 {
		if rule.SuppressPrefixlen >= 0 {
			b := make([]byte, 4)
			native.PutUint32(b, uint32(rule.SuppressPrefixlen))
			req.AddData(nl.NewRtAttr(nl.FRA_SUPPRESS_PREFIXLEN, b))
		}
		if rule.SuppressIfgroup >= 0 {
			b := make([]byte, 4)
			native.PutUint32(b, uint32(rule.SuppressIfgroup))
			req.AddData(nl.NewRtAttr(nl.FRA_SUPPRESS_IFGROUP, b))
		}
	}
	if rule.IifName != "" {
		req.AddData(nl.NewRtAttr(nl.FRA_IIFNAME, []byte(rule.IifName+"\x00")))
	}
	if rule.OifName != "" {
		req.AddData(nl.NewRtAttr(nl.FRA_OIFNAME, []byte(rule.OifName+"\x00")))
	}
	if rule.Goto >= 0 {
		msg.Type = nl.FR_ACT_GOTO
		b := make([]byte, 4)
		native.PutUint32(b, uint32(rule.Goto))
		req.AddData(nl.NewRtAttr(nl.FRA_GOTO, b))
	}

	if rule.IPProto > 0 {
		b := make([]byte, 4)
		native.PutUint32(b, uint32(rule.IPProto))
		req.AddData(nl.NewRtAttr(nl.FRA_IP_PROTO, b))
	}

	if rule.Dport != nil {
		b := rule.Dport.toRtAttrData()
		req.AddData(nl.NewRtAttr(nl.FRA_DPORT_RANGE, b))
	}

	if rule.Sport != nil {
		b := rule.Sport.toRtAttrData()
		req.AddData(nl.NewRtAttr(nl.FRA_SPORT_RANGE, b))
	}

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

// RuleList lists rules in the system.
// Equivalent to: ip rule list
func RuleList(family int) ([]Rule, error) {
	return pkgHandle.RuleList(family)
}

// RuleList lists rules in the system.
// Equivalent to: ip rule list
func (h *Handle) RuleList(family int) ([]Rule, error) {
	return h.RuleListFiltered(family, nil, 0)
}

// RuleListFiltered gets a list of rules in the system filtered by the
// specified rule template `filter`.
// Equivalent to: ip rule list
func RuleListFiltered(family int, filter *Rule, filterMask uint64) ([]Rule, error) {
	return pkgHandle.RuleListFiltered(family, filter, filterMask)
}

// RuleListFiltered lists rules in the system.
// Equivalent to: ip rule list
func (h *Handle) RuleListFiltered(family int, filter *Rule, filterMask uint64) ([]Rule, error) {
	req := h.newNetlinkRequest(unix.RTM_GETRULE, unix.NLM_F_DUMP|unix.NLM_F_REQUEST)
	msg := nl.NewIfInfomsg(family)
	req.AddData(msg)

	msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWRULE)
	if err != nil {
		return nil, err
	}

	var res = make([]Rule, 0)
	for i := range msgs {
		msg := nl.DeserializeRtMsg(msgs[i])
		attrs, err := nl.ParseRouteAttr(msgs[i][msg.Len():])
		if err != nil {
			return nil, err
		}

		rule := NewRule()

		rule.Invert = msg.Flags&FibRuleInvert > 0
		rule.Tos = uint(msg.Tos)

		for j := range attrs {
			switch attrs[j].Attr.Type {
			case unix.RTA_TABLE:
				rule.Table = int(native.Uint32(attrs[j].Value[0:4]))
			case nl.FRA_SRC:
				rule.Src = &net.IPNet{
					IP:   attrs[j].Value,
					Mask: net.CIDRMask(int(msg.Src_len), 8*len(attrs[j].Value)),
				}
			case nl.FRA_DST:
				rule.Dst = &net.IPNet{
					IP:   attrs[j].Value,
					Mask: net.CIDRMask(int(msg.Dst_len), 8*len(attrs[j].Value)),
				}
			case nl.FRA_FWMARK:
				rule.Mark = int(native.Uint32(attrs[j].Value[0:4]))
			case nl.FRA_FWMASK:
				rule.Mask = int(native.Uint32(attrs[j].Value[0:4]))
			case nl.FRA_TUN_ID:
				rule.TunID = uint(native.Uint64(attrs[j].Value[0:8]))
			case nl.FRA_IIFNAME:
				rule.IifName = string(attrs[j].Value[:len(attrs[j].Value)-1])
			case nl.FRA_OIFNAME:
				rule.OifName = string(attrs[j].Value[:len(attrs[j].Value)-1])
			case nl.FRA_SUPPRESS_PREFIXLEN:
				i := native.Uint32(attrs[j].Value[0:4])
				if i != 0xffffffff {
					rule.SuppressPrefixlen = int(i)
				}
			case nl.FRA_SUPPRESS_IFGROUP:
				i := native.Uint32(attrs[j].Value[0:4])
				if i != 0xffffffff {
					rule.SuppressIfgroup = int(i)
				}
			case nl.FRA_FLOW:
				rule.Flow = int(native.Uint32(attrs[j].Value[0:4]))
			case nl.FRA_GOTO:
				rule.Goto = int(native.Uint32(attrs[j].Value[0:4]))
			case nl.FRA_PRIORITY:
				rule.Priority = int(native.Uint32(attrs[j].Value[0:4]))
			case nl.FRA_IP_PROTO:
				rule.IPProto = int(native.Uint32(attrs[j].Value[0:4]))
			case nl.FRA_DPORT_RANGE:
				rule.Dport = NewRulePortRange(native.Uint16(attrs[j].Value[0:2]), native.Uint16(attrs[j].Value[2:4]))
			case nl.FRA_SPORT_RANGE:
				rule.Sport = NewRulePortRange(native.Uint16(attrs[j].Value[0:2]), native.Uint16(attrs[j].Value[2:4]))
			}
		}

		if filter != nil {
			switch {
			case filterMask&RT_FILTER_SRC != 0 &&
				(rule.Src == nil || rule.Src.String() != filter.Src.String()):
				continue
			case filterMask&RT_FILTER_DST != 0 &&
				(rule.Dst == nil || rule.Dst.String() != filter.Dst.String()):
				continue
			case filterMask&RT_FILTER_TABLE != 0 &&
				filter.Table != unix.RT_TABLE_UNSPEC && rule.Table != filter.Table:
				continue
			case filterMask&RT_FILTER_TOS != 0 && rule.Tos != filter.Tos:
				continue
			case filterMask&RT_FILTER_PRIORITY != 0 && rule.Priority != filter.Priority:
				continue
			case filterMask&RT_FILTER_MARK != 0 && rule.Mark != filter.Mark:
				continue
			case filterMask&RT_FILTER_MASK != 0 && rule.Mask != filter.Mask:
				continue
			}
		}

		res = append(res, *rule)
	}

	return res, nil
}

func (pr *RulePortRange) toRtAttrData() []byte {
	b := [][]byte{make([]byte, 2), make([]byte, 2)}
	native.PutUint16(b[0], pr.Start)
	native.PutUint16(b[1], pr.End)
	return bytes.Join(b, []byte{})
}
 07070100000C52000081A4000000000000000000000001645E367C000001D0000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/socket.go   package netlink

import "net"

// SocketID identifies a single socket.
type SocketID struct {
	SourcePort      uint16
	DestinationPort uint16
	Source          net.IP
	Destination     net.IP
	Interface       uint32
	Cookie          [2]uint32
}

// Socket represents a netlink socket.
type Socket struct {
	Family  uint8
	State   uint8
	Timer   uint8
	Retrans uint8
	ID      SocketID
	Expires uint32
	RQueue  uint32
	WQueue  uint32
	UID     uint32
	INode   uint32
}
07070100000C53000081A4000000000000000000000001645E367C00001B85000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/socket_linux.go package netlink

import (
	"errors"
	"fmt"
	"net"
	"syscall"

	"github.com/vishvananda/netlink/nl"
	"golang.org/x/sys/unix"
)

const (
	sizeofSocketID      = 0x30
	sizeofSocketRequest = sizeofSocketID + 0x8
	sizeofSocket        = sizeofSocketID + 0x18
)

type socketRequest struct {
	Family   uint8
	Protocol uint8
	Ext      uint8
	pad      uint8
	States   uint32
	ID       SocketID
}

type writeBuffer struct {
	Bytes []byte
	pos   int
}

func (b *writeBuffer) Write(c byte) {
	b.Bytes[b.pos] = c
	b.pos++
}

func (b *writeBuffer) Next(n int) []byte {
	s := b.Bytes[b.pos : b.pos+n]
	b.pos += n
	return s
}

func (r *socketRequest) Serialize() []byte {
	b := writeBuffer{Bytes: make([]byte, sizeofSocketRequest)}
	b.Write(r.Family)
	b.Write(r.Protocol)
	b.Write(r.Ext)
	b.Write(r.pad)
	native.PutUint32(b.Next(4), r.States)
	networkOrder.PutUint16(b.Next(2), r.ID.SourcePort)
	networkOrder.PutUint16(b.Next(2), r.ID.DestinationPort)
	if r.Family == unix.AF_INET6 {
		copy(b.Next(16), r.ID.Source)
		copy(b.Next(16), r.ID.Destination)
	} else {
		copy(b.Next(4), r.ID.Source.To4())
		b.Next(12)
		copy(b.Next(4), r.ID.Destination.To4())
		b.Next(12)
	}
	native.PutUint32(b.Next(4), r.ID.Interface)
	native.PutUint32(b.Next(4), r.ID.Cookie[0])
	native.PutUint32(b.Next(4), r.ID.Cookie[1])
	return b.Bytes
}

func (r *socketRequest) Len() int { return sizeofSocketRequest }

type readBuffer struct {
	Bytes []byte
	pos   int
}

func (b *readBuffer) Read() byte {
	c := b.Bytes[b.pos]
	b.pos++
	return c
}

func (b *readBuffer) Next(n int) []byte {
	s := b.Bytes[b.pos : b.pos+n]
	b.pos += n
	return s
}

func (s *Socket) deserialize(b []byte) error {
	if len(b) < sizeofSocket {
		return fmt.Errorf("socket data short read (%d); want %d", len(b), sizeofSocket)
	}
	rb := readBuffer{Bytes: b}
	s.Family = rb.Read()
	s.State = rb.Read()
	s.Timer = rb.Read()
	s.Retrans = rb.Read()
	s.ID.SourcePort = networkOrder.Uint16(rb.Next(2))
	s.ID.DestinationPort = networkOrder.Uint16(rb.Next(2))
	if s.Family == unix.AF_INET6 {
		s.ID.Source = net.IP(rb.Next(16))
		s.ID.Destination = net.IP(rb.Next(16))
	} else {
		s.ID.Source = net.IPv4(rb.Read(), rb.Read(), rb.Read(), rb.Read())
		rb.Next(12)
		s.ID.Destination = net.IPv4(rb.Read(), rb.Read(), rb.Read(), rb.Read())
		rb.Next(12)
	}
	s.ID.Interface = native.Uint32(rb.Next(4))
	s.ID.Cookie[0] = native.Uint32(rb.Next(4))
	s.ID.Cookie[1] = native.Uint32(rb.Next(4))
	s.Expires = native.Uint32(rb.Next(4))
	s.RQueue = native.Uint32(rb.Next(4))
	s.WQueue = native.Uint32(rb.Next(4))
	s.UID = native.Uint32(rb.Next(4))
	s.INode = native.Uint32(rb.Next(4))
	return nil
}

// SocketGet returns the Socket identified by its local and remote addresses.
func SocketGet(local, remote net.Addr) (*Socket, error) {
	localTCP, ok := local.(*net.TCPAddr)
	if !ok {
		return nil, ErrNotImplemented
	}
	remoteTCP, ok := remote.(*net.TCPAddr)
	if !ok {
		return nil, ErrNotImplemented
	}
	localIP := localTCP.IP.To4()
	if localIP == nil {
		return nil, ErrNotImplemented
	}
	remoteIP := remoteTCP.IP.To4()
	if remoteIP == nil {
		return nil, ErrNotImplemented
	}

	s, err := nl.Subscribe(unix.NETLINK_INET_DIAG)
	if err != nil {
		return nil, err
	}
	defer s.Close()
	req := nl.NewNetlinkRequest(nl.SOCK_DIAG_BY_FAMILY, 0)
	req.AddData(&socketRequest{
		Family:   unix.AF_INET,
		Protocol: unix.IPPROTO_TCP,
		ID: SocketID{
			SourcePort:      uint16(localTCP.Port),
			DestinationPort: uint16(remoteTCP.Port),
			Source:          localIP,
			Destination:     remoteIP,
			Cookie:          [2]uint32{nl.TCPDIAG_NOCOOKIE, nl.TCPDIAG_NOCOOKIE},
		},
	})
	s.Send(req)
	msgs, from, err := s.Receive()
	if err != nil {
		return nil, err
	}
	if from.Pid != nl.PidKernel {
		return nil, fmt.Errorf("Wrong sender portid %d, expected %d", from.Pid, nl.PidKernel)
	}
	if len(msgs) == 0 {
		return nil, errors.New("no message nor error from netlink")
	}
	if len(msgs) > 2 {
		return nil, fmt.Errorf("multiple (%d) matching sockets", len(msgs))
	}
	sock := &Socket{}
	if err := sock.deserialize(msgs[0].Data); err != nil {
		return nil, err
	}
	return sock, nil
}

// SocketDiagTCPInfo requests INET_DIAG_INFO for TCP protocol for specified family type and return with extension TCP info.
func SocketDiagTCPInfo(family uint8) ([]*InetDiagTCPInfoResp, error) {
	var result []*InetDiagTCPInfoResp
	err := socketDiagTCPExecutor(family, func(m syscall.NetlinkMessage) error {
		sockInfo := &Socket{}
		if err := sockInfo.deserialize(m.Data); err != nil {
			return err
		}
		attrs, err := nl.ParseRouteAttr(m.Data[sizeofSocket:])
		if err != nil {
			return err
		}

		res, err := attrsToInetDiagTCPInfoResp(attrs, sockInfo)
		if err != nil {
			return err
		}

		result = append(result, res)
		return nil
	})
	if err != nil {
		return nil, err
	}
	return result, nil
}

// SocketDiagTCP requests INET_DIAG_INFO for TCP protocol for specified family type and return related socket.
func SocketDiagTCP(family uint8) ([]*Socket, error) {
	var result []*Socket
	err := socketDiagTCPExecutor(family, func(m syscall.NetlinkMessage) error {
		sockInfo := &Socket{}
		if err := sockInfo.deserialize(m.Data); err != nil {
			return err
		}
		result = append(result, sockInfo)
		return nil
	})
	if err != nil {
		return nil, err
	}
	return result, nil
}

// socketDiagTCPExecutor requests INET_DIAG_INFO for TCP protocol for specified family type.
func socketDiagTCPExecutor(family uint8, receiver func(syscall.NetlinkMessage) error) error {
	s, err := nl.Subscribe(unix.NETLINK_INET_DIAG)
	if err != nil {
		return err
	}
	defer s.Close()

	req := nl.NewNetlinkRequest(nl.SOCK_DIAG_BY_FAMILY, unix.NLM_F_DUMP)
	req.AddData(&socketRequest{
		Family:   family,
		Protocol: unix.IPPROTO_TCP,
		Ext:      (1 << (INET_DIAG_VEGASINFO - 1)) | (1 << (INET_DIAG_INFO - 1)),
		States:   uint32(0xfff), // All TCP states
	})
	s.Send(req)

loop:
	for {
		msgs, from, err := s.Receive()
		if err != nil {
			return err
		}
		if from.Pid != nl.PidKernel {
			return fmt.Errorf("Wrong sender portid %d, expected %d", from.Pid, nl.PidKernel)
		}
		if len(msgs) == 0 {
			return errors.New("no message nor error from netlink")
		}

		for _, m := range msgs {
			switch m.Header.Type {
			case unix.NLMSG_DONE:
				break loop
			case unix.NLMSG_ERROR:
				error := int32(native.Uint32(m.Data[0:4]))
				return syscall.Errno(-error)
			}
			if err := receiver(m); err != nil {
				return err
			}
		}
	}
	return nil
}

func attrsToInetDiagTCPInfoResp(attrs []syscall.NetlinkRouteAttr, sockInfo *Socket) (*InetDiagTCPInfoResp, error) {
	var tcpInfo *TCPInfo
	var tcpBBRInfo *TCPBBRInfo
	for _, a := range attrs {
		if a.Attr.Type == INET_DIAG_INFO {
			tcpInfo = &TCPInfo{}
			if err := tcpInfo.deserialize(a.Value); err != nil {
				return nil, err
			}
			continue
		}

		if a.Attr.Type == INET_DIAG_BBRINFO {
			tcpBBRInfo = &TCPBBRInfo{}
			if err := tcpBBRInfo.deserialize(a.Value); err != nil {
				return nil, err
			}
			continue
		}
	}

	return &InetDiagTCPInfoResp{
		InetDiagMsg: sockInfo,
		TCPInfo:     tcpInfo,
		TCPBBRInfo:  tcpBBRInfo,
	}, nil
}
   07070100000C54000081A4000000000000000000000001645E367C00000B4B000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/tcp.go  package netlink

// TCP States
const (
	TCP_ESTABLISHED = iota + 0x01
	TCP_SYN_SENT
	TCP_SYN_RECV
	TCP_FIN_WAIT1
	TCP_FIN_WAIT2
	TCP_TIME_WAIT
	TCP_CLOSE
	TCP_CLOSE_WAIT
	TCP_LAST_ACK
	TCP_LISTEN
	TCP_CLOSING
	TCP_NEW_SYN_REC
	TCP_MAX_STATES
)

type TCPInfo struct {
	State                     uint8
	Ca_state                  uint8
	Retransmits               uint8
	Probes                    uint8
	Backoff                   uint8
	Options                   uint8
	Snd_wscale                uint8 // no uint4
	Rcv_wscale                uint8
	Delivery_rate_app_limited uint8
	Fastopen_client_fail      uint8
	Rto                       uint32
	Ato                       uint32
	Snd_mss                   uint32
	Rcv_mss                   uint32
	Unacked                   uint32
	Sacked                    uint32
	Lost                      uint32
	Retrans                   uint32
	Fackets                   uint32
	Last_data_sent            uint32
	Last_ack_sent             uint32
	Last_data_recv            uint32
	Last_ack_recv             uint32
	Pmtu                      uint32
	Rcv_ssthresh              uint32
	Rtt                       uint32
	Rttvar                    uint32
	Snd_ssthresh              uint32
	Snd_cwnd                  uint32
	Advmss                    uint32
	Reordering                uint32
	Rcv_rtt                   uint32
	Rcv_space                 uint32
	Total_retrans             uint32
	Pacing_rate               uint64
	Max_pacing_rate           uint64
	Bytes_acked               uint64 /* RFC4898 tcpEStatsAppHCThruOctetsAcked */
	Bytes_received            uint64 /* RFC4898 tcpEStatsAppHCThruOctetsReceived */
	Segs_out                  uint32 /* RFC4898 tcpEStatsPerfSegsOut */
	Segs_in                   uint32 /* RFC4898 tcpEStatsPerfSegsIn */
	Notsent_bytes             uint32
	Min_rtt                   uint32
	Data_segs_in              uint32 /* RFC4898 tcpEStatsDataSegsIn */
	Data_segs_out             uint32 /* RFC4898 tcpEStatsDataSegsOut */
	Delivery_rate             uint64
	Busy_time                 uint64 /* Time (usec) busy sending data */
	Rwnd_limited              uint64 /* Time (usec) limited by receive window */
	Sndbuf_limited            uint64 /* Time (usec) limited by send buffer */
	Delivered                 uint32
	Delivered_ce              uint32
	Bytes_sent                uint64 /* RFC4898 tcpEStatsPerfHCDataOctetsOut */
	Bytes_retrans             uint64 /* RFC4898 tcpEStatsPerfOctetsRetrans */
	Dsack_dups                uint32 /* RFC4898 tcpEStatsStackDSACKDups */
	Reord_seen                uint32 /* reordering events seen */
	Rcv_ooopack               uint32 /* Out-of-order packets received */
	Snd_wnd                   uint32 /* peer's advertised receive window after * scaling (bytes) */
}

type TCPBBRInfo struct {
	BBRBW         uint64
	BBRMinRTT     uint32
	BBRPacingGain uint32
	BBRCwndGain   uint32
}
 07070100000C55000081A4000000000000000000000001645E367C00001679000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/tcp_linux.go    package netlink

import (
	"bytes"
	"errors"
	"io"
)

const (
	tcpBBRInfoLen = 20
)

func checkDeserErr(err error) error {
	if err == io.EOF {
		return nil
	}
	return err
}

func (t *TCPInfo) deserialize(b []byte) error {
	var err error
	rb := bytes.NewBuffer(b)

	t.State, err = rb.ReadByte()
	if err != nil {
		return checkDeserErr(err)
	}

	t.Ca_state, err = rb.ReadByte()
	if err != nil {
		return checkDeserErr(err)
	}

	t.Retransmits, err = rb.ReadByte()
	if err != nil {
		return checkDeserErr(err)
	}

	t.Probes, err = rb.ReadByte()
	if err != nil {
		return checkDeserErr(err)
	}

	t.Backoff, err = rb.ReadByte()
	if err != nil {
		return checkDeserErr(err)
	}
	t.Options, err = rb.ReadByte()
	if err != nil {
		return checkDeserErr(err)
	}

	scales, err := rb.ReadByte()
	if err != nil {
		return checkDeserErr(err)
	}
	t.Snd_wscale = scales >> 4  // first 4 bits
	t.Rcv_wscale = scales & 0xf // last 4 bits

	rateLimAndFastOpen, err := rb.ReadByte()
	if err != nil {
		return checkDeserErr(err)
	}
	t.Delivery_rate_app_limited = rateLimAndFastOpen >> 7 // get first bit
	t.Fastopen_client_fail = rateLimAndFastOpen >> 5 & 3  // get next two bits

	next := rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Rto = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Ato = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Snd_mss = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Rcv_mss = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Unacked = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Sacked = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Lost = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Retrans = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Fackets = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Last_data_sent = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Last_ack_sent = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Last_data_recv = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Last_ack_recv = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Pmtu = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Rcv_ssthresh = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Rtt = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Rttvar = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Snd_ssthresh = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Snd_cwnd = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Advmss = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Reordering = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Rcv_rtt = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Rcv_space = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Total_retrans = native.Uint32(next)

	next = rb.Next(8)
	if len(next) == 0 {
		return nil
	}
	t.Pacing_rate = native.Uint64(next)

	next = rb.Next(8)
	if len(next) == 0 {
		return nil
	}
	t.Max_pacing_rate = native.Uint64(next)

	next = rb.Next(8)
	if len(next) == 0 {
		return nil
	}
	t.Bytes_acked = native.Uint64(next)

	next = rb.Next(8)
	if len(next) == 0 {
		return nil
	}
	t.Bytes_received = native.Uint64(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Segs_out = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Segs_in = native.Uint32(next)
	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Notsent_bytes = native.Uint32(next)
	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Min_rtt = native.Uint32(next)
	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Data_segs_in = native.Uint32(next)
	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Data_segs_out = native.Uint32(next)

	next = rb.Next(8)
	if len(next) == 0 {
		return nil
	}
	t.Delivery_rate = native.Uint64(next)

	next = rb.Next(8)
	if len(next) == 0 {
		return nil
	}
	t.Busy_time = native.Uint64(next)

	next = rb.Next(8)
	if len(next) == 0 {
		return nil
	}
	t.Rwnd_limited = native.Uint64(next)

	next = rb.Next(8)
	if len(next) == 0 {
		return nil
	}
	t.Sndbuf_limited = native.Uint64(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Delivered = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Delivered_ce = native.Uint32(next)

	next = rb.Next(8)
	if len(next) == 0 {
		return nil
	}
	t.Bytes_sent = native.Uint64(next)

	next = rb.Next(8)
	if len(next) == 0 {
		return nil
	}
	t.Bytes_retrans = native.Uint64(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Dsack_dups = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Reord_seen = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Rcv_ooopack = native.Uint32(next)

	next = rb.Next(4)
	if len(next) == 0 {
		return nil
	}
	t.Snd_wnd = native.Uint32(next)
	return nil
}

func (t *TCPBBRInfo) deserialize(b []byte) error {
	if len(b) != tcpBBRInfoLen {
		return errors.New("Invalid length")
	}

	rb := bytes.NewBuffer(b)
	t.BBRBW = native.Uint64(rb.Next(8))
	t.BBRMinRTT = native.Uint32(rb.Next(4))
	t.BBRPacingGain = native.Uint32(rb.Next(4))
	t.BBRCwndGain = native.Uint32(rb.Next(4))

	return nil
}
   07070100000C56000081A4000000000000000000000001645E367C000005DC000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/xfrm.go package netlink

import (
	"fmt"

	"golang.org/x/sys/unix"
)

// Proto is an enum representing an ipsec protocol.
type Proto uint8

const (
	XFRM_PROTO_ROUTE2    Proto = unix.IPPROTO_ROUTING
	XFRM_PROTO_ESP       Proto = unix.IPPROTO_ESP
	XFRM_PROTO_AH        Proto = unix.IPPROTO_AH
	XFRM_PROTO_HAO       Proto = unix.IPPROTO_DSTOPTS
	XFRM_PROTO_COMP      Proto = 0x6c // NOTE not defined on darwin
	XFRM_PROTO_IPSEC_ANY Proto = unix.IPPROTO_RAW
)

func (p Proto) String() string {
	switch p {
	case XFRM_PROTO_ROUTE2:
		return "route2"
	case XFRM_PROTO_ESP:
		return "esp"
	case XFRM_PROTO_AH:
		return "ah"
	case XFRM_PROTO_HAO:
		return "hao"
	case XFRM_PROTO_COMP:
		return "comp"
	case XFRM_PROTO_IPSEC_ANY:
		return "ipsec-any"
	}
	return fmt.Sprintf("%d", p)
}

// Mode is an enum representing an ipsec transport.
type Mode uint8

const (
	XFRM_MODE_TRANSPORT Mode = iota
	XFRM_MODE_TUNNEL
	XFRM_MODE_ROUTEOPTIMIZATION
	XFRM_MODE_IN_TRIGGER
	XFRM_MODE_BEET
	XFRM_MODE_MAX
)

func (m Mode) String() string {
	switch m {
	case XFRM_MODE_TRANSPORT:
		return "transport"
	case XFRM_MODE_TUNNEL:
		return "tunnel"
	case XFRM_MODE_ROUTEOPTIMIZATION:
		return "ro"
	case XFRM_MODE_IN_TRIGGER:
		return "in_trigger"
	case XFRM_MODE_BEET:
		return "beet"
	}
	return fmt.Sprintf("%d", m)
}

// XfrmMark represents the mark associated to the state or policy
type XfrmMark struct {
	Value uint32
	Mask  uint32
}

func (m *XfrmMark) String() string {
	return fmt.Sprintf("(0x%x,0x%x)", m.Value, m.Mask)
}
07070100000C57000081A4000000000000000000000001645E367C00000738000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/xfrm_monitor_linux.go   package netlink

import (
	"fmt"

	"github.com/vishvananda/netlink/nl"
	"github.com/vishvananda/netns"
	"golang.org/x/sys/unix"
)

type XfrmMsg interface {
	Type() nl.XfrmMsgType
}

type XfrmMsgExpire struct {
	XfrmState *XfrmState
	Hard      bool
}

func (ue *XfrmMsgExpire) Type() nl.XfrmMsgType {
	return nl.XFRM_MSG_EXPIRE
}

func parseXfrmMsgExpire(b []byte) *XfrmMsgExpire {
	var e XfrmMsgExpire

	msg := nl.DeserializeXfrmUserExpire(b)
	e.XfrmState = xfrmStateFromXfrmUsersaInfo(&msg.XfrmUsersaInfo)
	e.Hard = msg.Hard == 1

	return &e
}

func XfrmMonitor(ch chan<- XfrmMsg, done <-chan struct{}, errorChan chan<- error,
	types ...nl.XfrmMsgType) error {

	groups, err := xfrmMcastGroups(types)
	if err != nil {
		return nil
	}
	s, err := nl.SubscribeAt(netns.None(), netns.None(), unix.NETLINK_XFRM, groups...)
	if err != nil {
		return err
	}

	if done != nil {
		go func() {
			<-done
			s.Close()
		}()

	}

	go func() {
		defer close(ch)
		for {
			msgs, from, err := s.Receive()
			if err != nil {
				errorChan <- err
				return
			}
			if from.Pid != nl.PidKernel {
				errorChan <- fmt.Errorf("Wrong sender portid %d, expected %d", from.Pid, nl.PidKernel)
				return
			}
			for _, m := range msgs {
				switch m.Header.Type {
				case nl.XFRM_MSG_EXPIRE:
					ch <- parseXfrmMsgExpire(m.Data)
				default:
					errorChan <- fmt.Errorf("unsupported msg type: %x", m.Header.Type)
				}
			}
		}
	}()

	return nil
}

func xfrmMcastGroups(types []nl.XfrmMsgType) ([]uint, error) {
	groups := make([]uint, 0)

	if len(types) == 0 {
		return nil, fmt.Errorf("no xfrm msg type specified")
	}

	for _, t := range types {
		var group uint

		switch t {
		case nl.XFRM_MSG_EXPIRE:
			group = nl.XFRMNLGRP_EXPIRE
		default:
			return nil, fmt.Errorf("unsupported group: %x", t)
		}

		groups = append(groups, group)
	}

	return groups, nil
}
07070100000C58000081A4000000000000000000000001645E367C0000088D000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/xfrm_policy.go  package netlink

import (
	"fmt"
	"net"
)

// Dir is an enum representing an ipsec template direction.
type Dir uint8

const (
	XFRM_DIR_IN Dir = iota
	XFRM_DIR_OUT
	XFRM_DIR_FWD
	XFRM_SOCKET_IN
	XFRM_SOCKET_OUT
	XFRM_SOCKET_FWD
)

func (d Dir) String() string {
	switch d {
	case XFRM_DIR_IN:
		return "dir in"
	case XFRM_DIR_OUT:
		return "dir out"
	case XFRM_DIR_FWD:
		return "dir fwd"
	case XFRM_SOCKET_IN:
		return "socket in"
	case XFRM_SOCKET_OUT:
		return "socket out"
	case XFRM_SOCKET_FWD:
		return "socket fwd"
	}
	return fmt.Sprintf("socket %d", d-XFRM_SOCKET_IN)
}

// PolicyAction is an enum representing an ipsec policy action.
type PolicyAction uint8

const (
	XFRM_POLICY_ALLOW PolicyAction = 0
	XFRM_POLICY_BLOCK PolicyAction = 1
)

func (a PolicyAction) String() string {
	switch a {
	case XFRM_POLICY_ALLOW:
		return "allow"
	case XFRM_POLICY_BLOCK:
		return "block"
	default:
		return fmt.Sprintf("action %d", a)
	}
}

// XfrmPolicyTmpl encapsulates a rule for the base addresses of an ipsec
// policy. These rules are matched with XfrmState to determine encryption
// and authentication algorithms.
type XfrmPolicyTmpl struct {
	Dst      net.IP
	Src      net.IP
	Proto    Proto
	Mode     Mode
	Spi      int
	Reqid    int
	Optional int
}

func (t XfrmPolicyTmpl) String() string {
	return fmt.Sprintf("{Dst: %v, Src: %v, Proto: %s, Mode: %s, Spi: 0x%x, Reqid: 0x%x}",
		t.Dst, t.Src, t.Proto, t.Mode, t.Spi, t.Reqid)
}

// XfrmPolicy represents an ipsec policy. It represents the overlay network
// and has a list of XfrmPolicyTmpls representing the base addresses of
// the policy.
type XfrmPolicy struct {
	Dst      *net.IPNet
	Src      *net.IPNet
	Proto    Proto
	DstPort  int
	SrcPort  int
	Dir      Dir
	Priority int
	Index    int
	Action   PolicyAction
	Ifindex  int
	Ifid     int
	Mark     *XfrmMark
	Tmpls    []XfrmPolicyTmpl
}

func (p XfrmPolicy) String() string {
	return fmt.Sprintf("{Dst: %v, Src: %v, Proto: %s, DstPort: %d, SrcPort: %d, Dir: %s, Priority: %d, Index: %d, Action: %s, Ifindex: %d, Ifid: %d, Mark: %s, Tmpls: %s}",
		p.Dst, p.Src, p.Proto, p.DstPort, p.SrcPort, p.Dir, p.Priority, p.Index, p.Action, p.Ifindex, p.Ifid, p.Mark, p.Tmpls)
}
   07070100000C59000081A4000000000000000000000001645E367C00002073000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/xfrm_policy_linux.go    package netlink

import (
	"github.com/vishvananda/netlink/nl"
	"golang.org/x/sys/unix"
)

func selFromPolicy(sel *nl.XfrmSelector, policy *XfrmPolicy) {
	sel.Family = uint16(nl.FAMILY_V4)
	if policy.Dst != nil {
		sel.Family = uint16(nl.GetIPFamily(policy.Dst.IP))
		sel.Daddr.FromIP(policy.Dst.IP)
		prefixlenD, _ := policy.Dst.Mask.Size()
		sel.PrefixlenD = uint8(prefixlenD)
	}
	if policy.Src != nil {
		sel.Saddr.FromIP(policy.Src.IP)
		prefixlenS, _ := policy.Src.Mask.Size()
		sel.PrefixlenS = uint8(prefixlenS)
	}
	sel.Proto = uint8(policy.Proto)
	sel.Dport = nl.Swap16(uint16(policy.DstPort))
	sel.Sport = nl.Swap16(uint16(policy.SrcPort))
	if sel.Dport != 0 {
		sel.DportMask = ^uint16(0)
	}
	if sel.Sport != 0 {
		sel.SportMask = ^uint16(0)
	}
	sel.Ifindex = int32(policy.Ifindex)
}

// XfrmPolicyAdd will add an xfrm policy to the system.
// Equivalent to: `ip xfrm policy add $policy`
func XfrmPolicyAdd(policy *XfrmPolicy) error {
	return pkgHandle.XfrmPolicyAdd(policy)
}

// XfrmPolicyAdd will add an xfrm policy to the system.
// Equivalent to: `ip xfrm policy add $policy`
func (h *Handle) XfrmPolicyAdd(policy *XfrmPolicy) error {
	return h.xfrmPolicyAddOrUpdate(policy, nl.XFRM_MSG_NEWPOLICY)
}

// XfrmPolicyUpdate will update an xfrm policy to the system.
// Equivalent to: `ip xfrm policy update $policy`
func XfrmPolicyUpdate(policy *XfrmPolicy) error {
	return pkgHandle.XfrmPolicyUpdate(policy)
}

// XfrmPolicyUpdate will update an xfrm policy to the system.
// Equivalent to: `ip xfrm policy update $policy`
func (h *Handle) XfrmPolicyUpdate(policy *XfrmPolicy) error {
	return h.xfrmPolicyAddOrUpdate(policy, nl.XFRM_MSG_UPDPOLICY)
}

func (h *Handle) xfrmPolicyAddOrUpdate(policy *XfrmPolicy, nlProto int) error {
	req := h.newNetlinkRequest(nlProto, unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)

	msg := &nl.XfrmUserpolicyInfo{}
	selFromPolicy(&msg.Sel, policy)
	msg.Priority = uint32(policy.Priority)
	msg.Index = uint32(policy.Index)
	msg.Dir = uint8(policy.Dir)
	msg.Action = uint8(policy.Action)
	msg.Lft.SoftByteLimit = nl.XFRM_INF
	msg.Lft.HardByteLimit = nl.XFRM_INF
	msg.Lft.SoftPacketLimit = nl.XFRM_INF
	msg.Lft.HardPacketLimit = nl.XFRM_INF
	req.AddData(msg)

	tmplData := make([]byte, nl.SizeofXfrmUserTmpl*len(policy.Tmpls))
	for i, tmpl := range policy.Tmpls {
		start := i * nl.SizeofXfrmUserTmpl
		userTmpl := nl.DeserializeXfrmUserTmpl(tmplData[start : start+nl.SizeofXfrmUserTmpl])
		userTmpl.XfrmId.Daddr.FromIP(tmpl.Dst)
		userTmpl.Saddr.FromIP(tmpl.Src)
		userTmpl.XfrmId.Proto = uint8(tmpl.Proto)
		userTmpl.XfrmId.Spi = nl.Swap32(uint32(tmpl.Spi))
		userTmpl.Mode = uint8(tmpl.Mode)
		userTmpl.Reqid = uint32(tmpl.Reqid)
		userTmpl.Optional = uint8(tmpl.Optional)
		userTmpl.Aalgos = ^uint32(0)
		userTmpl.Ealgos = ^uint32(0)
		userTmpl.Calgos = ^uint32(0)
	}
	if len(tmplData) > 0 {
		tmpls := nl.NewRtAttr(nl.XFRMA_TMPL, tmplData)
		req.AddData(tmpls)
	}
	if policy.Mark != nil {
		out := nl.NewRtAttr(nl.XFRMA_MARK, writeMark(policy.Mark))
		req.AddData(out)
	}

	if policy.Ifid != 0 {
		ifId := nl.NewRtAttr(nl.XFRMA_IF_ID, nl.Uint32Attr(uint32(policy.Ifid)))
		req.AddData(ifId)
	}

	_, err := req.Execute(unix.NETLINK_XFRM, 0)
	return err
}

// XfrmPolicyDel will delete an xfrm policy from the system. Note that
// the Tmpls are ignored when matching the policy to delete.
// Equivalent to: `ip xfrm policy del $policy`
func XfrmPolicyDel(policy *XfrmPolicy) error {
	return pkgHandle.XfrmPolicyDel(policy)
}

// XfrmPolicyDel will delete an xfrm policy from the system. Note that
// the Tmpls are ignored when matching the policy to delete.
// Equivalent to: `ip xfrm policy del $policy`
func (h *Handle) XfrmPolicyDel(policy *XfrmPolicy) error {
	_, err := h.xfrmPolicyGetOrDelete(policy, nl.XFRM_MSG_DELPOLICY)
	return err
}

// XfrmPolicyList gets a list of xfrm policies in the system.
// Equivalent to: `ip xfrm policy show`.
// The list can be filtered by ip family.
func XfrmPolicyList(family int) ([]XfrmPolicy, error) {
	return pkgHandle.XfrmPolicyList(family)
}

// XfrmPolicyList gets a list of xfrm policies in the system.
// Equivalent to: `ip xfrm policy show`.
// The list can be filtered by ip family.
func (h *Handle) XfrmPolicyList(family int) ([]XfrmPolicy, error) {
	req := h.newNetlinkRequest(nl.XFRM_MSG_GETPOLICY, unix.NLM_F_DUMP)

	msg := nl.NewIfInfomsg(family)
	req.AddData(msg)

	msgs, err := req.Execute(unix.NETLINK_XFRM, nl.XFRM_MSG_NEWPOLICY)
	if err != nil {
		return nil, err
	}

	var res []XfrmPolicy
	for _, m := range msgs {
		if policy, err := parseXfrmPolicy(m, family); err == nil {
			res = append(res, *policy)
		} else if err == familyError {
			continue
		} else {
			return nil, err
		}
	}
	return res, nil
}

// XfrmPolicyGet gets a the policy described by the index or selector, if found.
// Equivalent to: `ip xfrm policy get { SELECTOR | index INDEX } dir DIR [ctx CTX ] [ mark MARK [ mask MASK ] ] [ ptype PTYPE ]`.
func XfrmPolicyGet(policy *XfrmPolicy) (*XfrmPolicy, error) {
	return pkgHandle.XfrmPolicyGet(policy)
}

// XfrmPolicyGet gets a the policy described by the index or selector, if found.
// Equivalent to: `ip xfrm policy get { SELECTOR | index INDEX } dir DIR [ctx CTX ] [ mark MARK [ mask MASK ] ] [ ptype PTYPE ]`.
func (h *Handle) XfrmPolicyGet(policy *XfrmPolicy) (*XfrmPolicy, error) {
	return h.xfrmPolicyGetOrDelete(policy, nl.XFRM_MSG_GETPOLICY)
}

// XfrmPolicyFlush will flush the policies on the system.
// Equivalent to: `ip xfrm policy flush`
func XfrmPolicyFlush() error {
	return pkgHandle.XfrmPolicyFlush()
}

// XfrmPolicyFlush will flush the policies on the system.
// Equivalent to: `ip xfrm policy flush`
func (h *Handle) XfrmPolicyFlush() error {
	req := h.newNetlinkRequest(nl.XFRM_MSG_FLUSHPOLICY, unix.NLM_F_ACK)
	_, err := req.Execute(unix.NETLINK_XFRM, 0)
	return err
}

func (h *Handle) xfrmPolicyGetOrDelete(policy *XfrmPolicy, nlProto int) (*XfrmPolicy, error) {
	req := h.newNetlinkRequest(nlProto, unix.NLM_F_ACK)

	msg := &nl.XfrmUserpolicyId{}
	selFromPolicy(&msg.Sel, policy)
	msg.Index = uint32(policy.Index)
	msg.Dir = uint8(policy.Dir)
	req.AddData(msg)

	if policy.Mark != nil {
		out := nl.NewRtAttr(nl.XFRMA_MARK, writeMark(policy.Mark))
		req.AddData(out)
	}

	if policy.Ifid != 0 {
		ifId := nl.NewRtAttr(nl.XFRMA_IF_ID, nl.Uint32Attr(uint32(policy.Ifid)))
		req.AddData(ifId)
	}

	resType := nl.XFRM_MSG_NEWPOLICY
	if nlProto == nl.XFRM_MSG_DELPOLICY {
		resType = 0
	}

	msgs, err := req.Execute(unix.NETLINK_XFRM, uint16(resType))
	if err != nil {
		return nil, err
	}

	if nlProto == nl.XFRM_MSG_DELPOLICY {
		return nil, err
	}

	return parseXfrmPolicy(msgs[0], FAMILY_ALL)
}

func parseXfrmPolicy(m []byte, family int) (*XfrmPolicy, error) {
	msg := nl.DeserializeXfrmUserpolicyInfo(m)

	// This is mainly for the policy dump
	if family != FAMILY_ALL && family != int(msg.Sel.Family) {
		return nil, familyError
	}

	var policy XfrmPolicy

	policy.Dst = msg.Sel.Daddr.ToIPNet(msg.Sel.PrefixlenD)
	policy.Src = msg.Sel.Saddr.ToIPNet(msg.Sel.PrefixlenS)
	policy.Proto = Proto(msg.Sel.Proto)
	policy.DstPort = int(nl.Swap16(msg.Sel.Dport))
	policy.SrcPort = int(nl.Swap16(msg.Sel.Sport))
	policy.Ifindex = int(msg.Sel.Ifindex)
	policy.Priority = int(msg.Priority)
	policy.Index = int(msg.Index)
	policy.Dir = Dir(msg.Dir)
	policy.Action = PolicyAction(msg.Action)

	attrs, err := nl.ParseRouteAttr(m[msg.Len():])
	if err != nil {
		return nil, err
	}

	for _, attr := range attrs {
		switch attr.Attr.Type {
		case nl.XFRMA_TMPL:
			max := len(attr.Value)
			for i := 0; i < max; i += nl.SizeofXfrmUserTmpl {
				var resTmpl XfrmPolicyTmpl
				tmpl := nl.DeserializeXfrmUserTmpl(attr.Value[i : i+nl.SizeofXfrmUserTmpl])
				resTmpl.Dst = tmpl.XfrmId.Daddr.ToIP()
				resTmpl.Src = tmpl.Saddr.ToIP()
				resTmpl.Proto = Proto(tmpl.XfrmId.Proto)
				resTmpl.Mode = Mode(tmpl.Mode)
				resTmpl.Spi = int(nl.Swap32(tmpl.XfrmId.Spi))
				resTmpl.Reqid = int(tmpl.Reqid)
				resTmpl.Optional = int(tmpl.Optional)
				policy.Tmpls = append(policy.Tmpls, resTmpl)
			}
		case nl.XFRMA_MARK:
			mark := nl.DeserializeXfrmMark(attr.Value[:])
			policy.Mark = new(XfrmMark)
			policy.Mark.Value = mark.Value
			policy.Mark.Mask = mark.Mask
		case nl.XFRMA_IF_ID:
			policy.Ifid = int(native.Uint32(attr.Value))
		}
	}

	return &policy, nil
}
 07070100000C5A000081A4000000000000000000000001645E367C00000F19000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/xfrm_state.go   package netlink

import (
	"fmt"
	"net"
	"time"
)

// XfrmStateAlgo represents the algorithm to use for the ipsec encryption.
type XfrmStateAlgo struct {
	Name        string
	Key         []byte
	TruncateLen int // Auth only
	ICVLen      int // AEAD only
}

func (a XfrmStateAlgo) String() string {
	base := fmt.Sprintf("{Name: %s, Key: 0x%x", a.Name, a.Key)
	if a.TruncateLen != 0 {
		base = fmt.Sprintf("%s, Truncate length: %d", base, a.TruncateLen)
	}
	if a.ICVLen != 0 {
		base = fmt.Sprintf("%s, ICV length: %d", base, a.ICVLen)
	}
	return fmt.Sprintf("%s}", base)
}

// EncapType is an enum representing the optional packet encapsulation.
type EncapType uint8

const (
	XFRM_ENCAP_ESPINUDP_NONIKE EncapType = iota + 1
	XFRM_ENCAP_ESPINUDP
)

func (e EncapType) String() string {
	switch e {
	case XFRM_ENCAP_ESPINUDP_NONIKE:
		return "espinudp-non-ike"
	case XFRM_ENCAP_ESPINUDP:
		return "espinudp"
	}
	return "unknown"
}

// XfrmStateEncap represents the encapsulation to use for the ipsec encryption.
type XfrmStateEncap struct {
	Type            EncapType
	SrcPort         int
	DstPort         int
	OriginalAddress net.IP
}

func (e XfrmStateEncap) String() string {
	return fmt.Sprintf("{Type: %s, Srcport: %d, DstPort: %d, OriginalAddress: %v}",
		e.Type, e.SrcPort, e.DstPort, e.OriginalAddress)
}

// XfrmStateLimits represents the configured limits for the state.
type XfrmStateLimits struct {
	ByteSoft    uint64
	ByteHard    uint64
	PacketSoft  uint64
	PacketHard  uint64
	TimeSoft    uint64
	TimeHard    uint64
	TimeUseSoft uint64
	TimeUseHard uint64
}

// XfrmStateStats represents the current number of bytes/packets
// processed by this State, the State's installation and first use
// time and the replay window counters.
type XfrmStateStats struct {
	ReplayWindow uint32
	Replay       uint32
	Failed       uint32
	Bytes        uint64
	Packets      uint64
	AddTime      uint64
	UseTime      uint64
}

// XfrmState represents the state of an ipsec policy. It optionally
// contains an XfrmStateAlgo for encryption and one for authentication.
type XfrmState struct {
	Dst          net.IP
	Src          net.IP
	Proto        Proto
	Mode         Mode
	Spi          int
	Reqid        int
	ReplayWindow int
	Limits       XfrmStateLimits
	Statistics   XfrmStateStats
	Mark         *XfrmMark
	OutputMark   *XfrmMark
	Ifid         int
	Auth         *XfrmStateAlgo
	Crypt        *XfrmStateAlgo
	Aead         *XfrmStateAlgo
	Encap        *XfrmStateEncap
	ESN          bool
}

func (sa XfrmState) String() string {
	return fmt.Sprintf("Dst: %v, Src: %v, Proto: %s, Mode: %s, SPI: 0x%x, ReqID: 0x%x, ReplayWindow: %d, Mark: %v, OutputMark: %v, Ifid: %d, Auth: %v, Crypt: %v, Aead: %v, Encap: %v, ESN: %t",
		sa.Dst, sa.Src, sa.Proto, sa.Mode, sa.Spi, sa.Reqid, sa.ReplayWindow, sa.Mark, sa.OutputMark, sa.Ifid, sa.Auth, sa.Crypt, sa.Aead, sa.Encap, sa.ESN)
}
func (sa XfrmState) Print(stats bool) string {
	if !stats {
		return sa.String()
	}
	at := time.Unix(int64(sa.Statistics.AddTime), 0).Format(time.UnixDate)
	ut := "-"
	if sa.Statistics.UseTime > 0 {
		ut = time.Unix(int64(sa.Statistics.UseTime), 0).Format(time.UnixDate)
	}
	return fmt.Sprintf("%s, ByteSoft: %s, ByteHard: %s, PacketSoft: %s, PacketHard: %s, TimeSoft: %d, TimeHard: %d, TimeUseSoft: %d, TimeUseHard: %d, Bytes: %d, Packets: %d, "+
		"AddTime: %s, UseTime: %s, ReplayWindow: %d, Replay: %d, Failed: %d",
		sa.String(), printLimit(sa.Limits.ByteSoft), printLimit(sa.Limits.ByteHard), printLimit(sa.Limits.PacketSoft), printLimit(sa.Limits.PacketHard),
		sa.Limits.TimeSoft, sa.Limits.TimeHard, sa.Limits.TimeUseSoft, sa.Limits.TimeUseHard, sa.Statistics.Bytes, sa.Statistics.Packets, at, ut,
		sa.Statistics.ReplayWindow, sa.Statistics.Replay, sa.Statistics.Failed)
}

func printLimit(lmt uint64) string {
	if lmt == ^uint64(0) {
		return "(INF)"
	}
	return fmt.Sprintf("%d", lmt)
}
   07070100000C5B000081A4000000000000000000000001645E367C000035B9000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netlink/xfrm_state_linux.go package netlink

import (
	"fmt"
	"unsafe"

	"github.com/vishvananda/netlink/nl"
	"golang.org/x/sys/unix"
)

func writeStateAlgo(a *XfrmStateAlgo) []byte {
	algo := nl.XfrmAlgo{
		AlgKeyLen: uint32(len(a.Key) * 8),
		AlgKey:    a.Key,
	}
	end := len(a.Name)
	if end > 64 {
		end = 64
	}
	copy(algo.AlgName[:end], a.Name)
	return algo.Serialize()
}

func writeStateAlgoAuth(a *XfrmStateAlgo) []byte {
	algo := nl.XfrmAlgoAuth{
		AlgKeyLen:   uint32(len(a.Key) * 8),
		AlgTruncLen: uint32(a.TruncateLen),
		AlgKey:      a.Key,
	}
	end := len(a.Name)
	if end > 64 {
		end = 64
	}
	copy(algo.AlgName[:end], a.Name)
	return algo.Serialize()
}

func writeStateAlgoAead(a *XfrmStateAlgo) []byte {
	algo := nl.XfrmAlgoAEAD{
		AlgKeyLen: uint32(len(a.Key) * 8),
		AlgICVLen: uint32(a.ICVLen),
		AlgKey:    a.Key,
	}
	end := len(a.Name)
	if end > 64 {
		end = 64
	}
	copy(algo.AlgName[:end], a.Name)
	return algo.Serialize()
}

func writeMark(m *XfrmMark) []byte {
	mark := &nl.XfrmMark{
		Value: m.Value,
		Mask:  m.Mask,
	}
	if mark.Mask == 0 {
		mark.Mask = ^uint32(0)
	}
	return mark.Serialize()
}

func writeReplayEsn(replayWindow int) []byte {
	replayEsn := &nl.XfrmReplayStateEsn{
		OSeq:         0,
		Seq:          0,
		OSeqHi:       0,
		SeqHi:        0,
		ReplayWindow: uint32(replayWindow),
	}

	// Linux stores the bitmap to identify the already received sequence packets in blocks of uint32 elements.
	// Therefore bitmap length is the minimum number of uint32 elements needed. The following is a ceiling operation.
	bytesPerElem := int(unsafe.Sizeof(replayEsn.BmpLen)) // Any uint32 variable is good for this
	replayEsn.BmpLen = uint32((replayWindow + (bytesPerElem * 8) - 1) / (bytesPerElem * 8))

	return replayEsn.Serialize()
}

// XfrmStateAdd will add an xfrm state to the system.
// Equivalent to: `ip xfrm state add $state`
func XfrmStateAdd(state *XfrmState) error {
	return pkgHandle.XfrmStateAdd(state)
}

// XfrmStateAdd will add an xfrm state to the system.
// Equivalent to: `ip xfrm state add $state`
func (h *Handle) XfrmStateAdd(state *XfrmState) error {
	return h.xfrmStateAddOrUpdate(state, nl.XFRM_MSG_NEWSA)
}

// XfrmStateAllocSpi will allocate an xfrm state in the system.
// Equivalent to: `ip xfrm state allocspi`
func XfrmStateAllocSpi(state *XfrmState) (*XfrmState, error) {
	return pkgHandle.xfrmStateAllocSpi(state)
}

// XfrmStateUpdate will update an xfrm state to the system.
// Equivalent to: `ip xfrm state update $state`
func XfrmStateUpdate(state *XfrmState) error {
	return pkgHandle.XfrmStateUpdate(state)
}

// XfrmStateUpdate will update an xfrm state to the system.
// Equivalent to: `ip xfrm state update $state`
func (h *Handle) XfrmStateUpdate(state *XfrmState) error {
	return h.xfrmStateAddOrUpdate(state, nl.XFRM_MSG_UPDSA)
}

func (h *Handle) xfrmStateAddOrUpdate(state *XfrmState, nlProto int) error {

	// A state with spi 0 can't be deleted so don't allow it to be set
	if state.Spi == 0 {
		return fmt.Errorf("Spi must be set when adding xfrm state")
	}
	req := h.newNetlinkRequest(nlProto, unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)

	msg := xfrmUsersaInfoFromXfrmState(state)

	if state.ESN {
		if state.ReplayWindow == 0 {
			return fmt.Errorf("ESN flag set without ReplayWindow")
		}
		msg.Flags |= nl.XFRM_STATE_ESN
		msg.ReplayWindow = 0
	}

	limitsToLft(state.Limits, &msg.Lft)
	req.AddData(msg)

	if state.Auth != nil {
		out := nl.NewRtAttr(nl.XFRMA_ALG_AUTH_TRUNC, writeStateAlgoAuth(state.Auth))
		req.AddData(out)
	}
	if state.Crypt != nil {
		out := nl.NewRtAttr(nl.XFRMA_ALG_CRYPT, writeStateAlgo(state.Crypt))
		req.AddData(out)
	}
	if state.Aead != nil {
		out := nl.NewRtAttr(nl.XFRMA_ALG_AEAD, writeStateAlgoAead(state.Aead))
		req.AddData(out)
	}
	if state.Encap != nil {
		encapData := make([]byte, nl.SizeofXfrmEncapTmpl)
		encap := nl.DeserializeXfrmEncapTmpl(encapData)
		encap.EncapType = uint16(state.Encap.Type)
		encap.EncapSport = nl.Swap16(uint16(state.Encap.SrcPort))
		encap.EncapDport = nl.Swap16(uint16(state.Encap.DstPort))
		encap.EncapOa.FromIP(state.Encap.OriginalAddress)
		out := nl.NewRtAttr(nl.XFRMA_ENCAP, encapData)
		req.AddData(out)
	}
	if state.Mark != nil {
		out := nl.NewRtAttr(nl.XFRMA_MARK, writeMark(state.Mark))
		req.AddData(out)
	}
	if state.ESN {
		out := nl.NewRtAttr(nl.XFRMA_REPLAY_ESN_VAL, writeReplayEsn(state.ReplayWindow))
		req.AddData(out)
	}
	if state.OutputMark != nil {
		out := nl.NewRtAttr(nl.XFRMA_SET_MARK, nl.Uint32Attr(state.OutputMark.Value))
		req.AddData(out)
		if state.OutputMark.Mask != 0 {
			out = nl.NewRtAttr(nl.XFRMA_SET_MARK_MASK, nl.Uint32Attr(state.OutputMark.Mask))
			req.AddData(out)
		}
	}

	if state.Ifid != 0 {
		ifId := nl.NewRtAttr(nl.XFRMA_IF_ID, nl.Uint32Attr(uint32(state.Ifid)))
		req.AddData(ifId)
	}

	_, err := req.Execute(unix.NETLINK_XFRM, 0)
	return err
}

func (h *Handle) xfrmStateAllocSpi(state *XfrmState) (*XfrmState, error) {
	req := h.newNetlinkRequest(nl.XFRM_MSG_ALLOCSPI,
		unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)

	msg := &nl.XfrmUserSpiInfo{}
	msg.XfrmUsersaInfo = *(xfrmUsersaInfoFromXfrmState(state))
	// 1-255 is reserved by IANA for future use
	msg.Min = 0x100
	msg.Max = 0xffffffff
	req.AddData(msg)

	if state.Mark != nil {
		out := nl.NewRtAttr(nl.XFRMA_MARK, writeMark(state.Mark))
		req.AddData(out)
	}

	msgs, err := req.Execute(unix.NETLINK_XFRM, 0)
	if err != nil {
		return nil, err
	}

	return parseXfrmState(msgs[0], FAMILY_ALL)
}

// XfrmStateDel will delete an xfrm state from the system. Note that
// the Algos are ignored when matching the state to delete.
// Equivalent to: `ip xfrm state del $state`
func XfrmStateDel(state *XfrmState) error {
	return pkgHandle.XfrmStateDel(state)
}

// XfrmStateDel will delete an xfrm state from the system. Note that
// the Algos are ignored when matching the state to delete.
// Equivalent to: `ip xfrm state del $state`
func (h *Handle) XfrmStateDel(state *XfrmState) error {
	_, err := h.xfrmStateGetOrDelete(state, nl.XFRM_MSG_DELSA)
	return err
}

// XfrmStateList gets a list of xfrm states in the system.
// Equivalent to: `ip [-4|-6] xfrm state show`.
// The list can be filtered by ip family.
func XfrmStateList(family int) ([]XfrmState, error) {
	return pkgHandle.XfrmStateList(family)
}

// XfrmStateList gets a list of xfrm states in the system.
// Equivalent to: `ip xfrm state show`.
// The list can be filtered by ip family.
func (h *Handle) XfrmStateList(family int) ([]XfrmState, error) {
	req := h.newNetlinkRequest(nl.XFRM_MSG_GETSA, unix.NLM_F_DUMP)

	msgs, err := req.Execute(unix.NETLINK_XFRM, nl.XFRM_MSG_NEWSA)
	if err != nil {
		return nil, err
	}

	var res []XfrmState
	for _, m := range msgs {
		if state, err := parseXfrmState(m, family); err == nil {
			res = append(res, *state)
		} else if err == familyError {
			continue
		} else {
			return nil, err
		}
	}
	return res, nil
}

// XfrmStateGet gets the xfrm state described by the ID, if found.
// Equivalent to: `ip xfrm state get ID [ mark MARK [ mask MASK ] ]`.
// Only the fields which constitue the SA ID must be filled in:
// ID := [ src ADDR ] [ dst ADDR ] [ proto XFRM-PROTO ] [ spi SPI ]
// mark is optional
func XfrmStateGet(state *XfrmState) (*XfrmState, error) {
	return pkgHandle.XfrmStateGet(state)
}

// XfrmStateGet gets the xfrm state described by the ID, if found.
// Equivalent to: `ip xfrm state get ID [ mark MARK [ mask MASK ] ]`.
// Only the fields which constitue the SA ID must be filled in:
// ID := [ src ADDR ] [ dst ADDR ] [ proto XFRM-PROTO ] [ spi SPI ]
// mark is optional
func (h *Handle) XfrmStateGet(state *XfrmState) (*XfrmState, error) {
	return h.xfrmStateGetOrDelete(state, nl.XFRM_MSG_GETSA)
}

func (h *Handle) xfrmStateGetOrDelete(state *XfrmState, nlProto int) (*XfrmState, error) {
	req := h.newNetlinkRequest(nlProto, unix.NLM_F_ACK)

	msg := &nl.XfrmUsersaId{}
	msg.Family = uint16(nl.GetIPFamily(state.Dst))
	msg.Daddr.FromIP(state.Dst)
	msg.Proto = uint8(state.Proto)
	msg.Spi = nl.Swap32(uint32(state.Spi))
	req.AddData(msg)

	if state.Mark != nil {
		out := nl.NewRtAttr(nl.XFRMA_MARK, writeMark(state.Mark))
		req.AddData(out)
	}
	if state.Src != nil {
		out := nl.NewRtAttr(nl.XFRMA_SRCADDR, state.Src.To16())
		req.AddData(out)
	}

	if state.Ifid != 0 {
		ifId := nl.NewRtAttr(nl.XFRMA_IF_ID, nl.Uint32Attr(uint32(state.Ifid)))
		req.AddData(ifId)
	}

	resType := nl.XFRM_MSG_NEWSA
	if nlProto == nl.XFRM_MSG_DELSA {
		resType = 0
	}

	msgs, err := req.Execute(unix.NETLINK_XFRM, uint16(resType))
	if err != nil {
		return nil, err
	}

	if nlProto == nl.XFRM_MSG_DELSA {
		return nil, nil
	}

	s, err := parseXfrmState(msgs[0], FAMILY_ALL)
	if err != nil {
		return nil, err
	}

	return s, nil
}

var familyError = fmt.Errorf("family error")

func xfrmStateFromXfrmUsersaInfo(msg *nl.XfrmUsersaInfo) *XfrmState {
	var state XfrmState

	state.Dst = msg.Id.Daddr.ToIP()
	state.Src = msg.Saddr.ToIP()
	state.Proto = Proto(msg.Id.Proto)
	state.Mode = Mode(msg.Mode)
	state.Spi = int(nl.Swap32(msg.Id.Spi))
	state.Reqid = int(msg.Reqid)
	state.ReplayWindow = int(msg.ReplayWindow)
	lftToLimits(&msg.Lft, &state.Limits)
	curToStats(&msg.Curlft, &msg.Stats, &state.Statistics)

	return &state
}

func parseXfrmState(m []byte, family int) (*XfrmState, error) {
	msg := nl.DeserializeXfrmUsersaInfo(m)

	// This is mainly for the state dump
	if family != FAMILY_ALL && family != int(msg.Family) {
		return nil, familyError
	}

	state := xfrmStateFromXfrmUsersaInfo(msg)

	attrs, err := nl.ParseRouteAttr(m[nl.SizeofXfrmUsersaInfo:])
	if err != nil {
		return nil, err
	}

	for _, attr := range attrs {
		switch attr.Attr.Type {
		case nl.XFRMA_ALG_AUTH, nl.XFRMA_ALG_CRYPT:
			var resAlgo *XfrmStateAlgo
			if attr.Attr.Type == nl.XFRMA_ALG_AUTH {
				if state.Auth == nil {
					state.Auth = new(XfrmStateAlgo)
				}
				resAlgo = state.Auth
			} else {
				state.Crypt = new(XfrmStateAlgo)
				resAlgo = state.Crypt
			}
			algo := nl.DeserializeXfrmAlgo(attr.Value[:])
			(*resAlgo).Name = nl.BytesToString(algo.AlgName[:])
			(*resAlgo).Key = algo.AlgKey
		case nl.XFRMA_ALG_AUTH_TRUNC:
			if state.Auth == nil {
				state.Auth = new(XfrmStateAlgo)
			}
			algo := nl.DeserializeXfrmAlgoAuth(attr.Value[:])
			state.Auth.Name = nl.BytesToString(algo.AlgName[:])
			state.Auth.Key = algo.AlgKey
			state.Auth.TruncateLen = int(algo.AlgTruncLen)
		case nl.XFRMA_ALG_AEAD:
			state.Aead = new(XfrmStateAlgo)
			algo := nl.DeserializeXfrmAlgoAEAD(attr.Value[:])
			state.Aead.Name = nl.BytesToString(algo.AlgName[:])
			state.Aead.Key = algo.AlgKey
			state.Aead.ICVLen = int(algo.AlgICVLen)
		case nl.XFRMA_ENCAP:
			encap := nl.DeserializeXfrmEncapTmpl(attr.Value[:])
			state.Encap = new(XfrmStateEncap)
			state.Encap.Type = EncapType(encap.EncapType)
			state.Encap.SrcPort = int(nl.Swap16(encap.EncapSport))
			state.Encap.DstPort = int(nl.Swap16(encap.EncapDport))
			state.Encap.OriginalAddress = encap.EncapOa.ToIP()
		case nl.XFRMA_MARK:
			mark := nl.DeserializeXfrmMark(attr.Value[:])
			state.Mark = new(XfrmMark)
			state.Mark.Value = mark.Value
			state.Mark.Mask = mark.Mask
		case nl.XFRMA_SET_MARK:
			if state.OutputMark == nil {
				state.OutputMark = new(XfrmMark)
			}
			state.OutputMark.Value = native.Uint32(attr.Value)
		case nl.XFRMA_SET_MARK_MASK:
			if state.OutputMark == nil {
				state.OutputMark = new(XfrmMark)
			}
			state.OutputMark.Mask = native.Uint32(attr.Value)
			if state.OutputMark.Mask == 0xffffffff {
				state.OutputMark.Mask = 0
			}
		case nl.XFRMA_IF_ID:
			state.Ifid = int(native.Uint32(attr.Value))
		}
	}

	return state, nil
}

// XfrmStateFlush will flush the xfrm state on the system.
// proto = 0 means any transformation protocols
// Equivalent to: `ip xfrm state flush [ proto XFRM-PROTO ]`
func XfrmStateFlush(proto Proto) error {
	return pkgHandle.XfrmStateFlush(proto)
}

// XfrmStateFlush will flush the xfrm state on the system.
// proto = 0 means any transformation protocols
// Equivalent to: `ip xfrm state flush [ proto XFRM-PROTO ]`
func (h *Handle) XfrmStateFlush(proto Proto) error {
	req := h.newNetlinkRequest(nl.XFRM_MSG_FLUSHSA, unix.NLM_F_ACK)

	req.AddData(&nl.XfrmUsersaFlush{Proto: uint8(proto)})

	_, err := req.Execute(unix.NETLINK_XFRM, 0)
	return err
}

func limitsToLft(lmts XfrmStateLimits, lft *nl.XfrmLifetimeCfg) {
	if lmts.ByteSoft != 0 {
		lft.SoftByteLimit = lmts.ByteSoft
	} else {
		lft.SoftByteLimit = nl.XFRM_INF
	}
	if lmts.ByteHard != 0 {
		lft.HardByteLimit = lmts.ByteHard
	} else {
		lft.HardByteLimit = nl.XFRM_INF
	}
	if lmts.PacketSoft != 0 {
		lft.SoftPacketLimit = lmts.PacketSoft
	} else {
		lft.SoftPacketLimit = nl.XFRM_INF
	}
	if lmts.PacketHard != 0 {
		lft.HardPacketLimit = lmts.PacketHard
	} else {
		lft.HardPacketLimit = nl.XFRM_INF
	}
	lft.SoftAddExpiresSeconds = lmts.TimeSoft
	lft.HardAddExpiresSeconds = lmts.TimeHard
	lft.SoftUseExpiresSeconds = lmts.TimeUseSoft
	lft.HardUseExpiresSeconds = lmts.TimeUseHard
}

func lftToLimits(lft *nl.XfrmLifetimeCfg, lmts *XfrmStateLimits) {
	*lmts = *(*XfrmStateLimits)(unsafe.Pointer(lft))
}

func curToStats(cur *nl.XfrmLifetimeCur, wstats *nl.XfrmStats, stats *XfrmStateStats) {
	stats.Bytes = cur.Bytes
	stats.Packets = cur.Packets
	stats.AddTime = cur.AddTime
	stats.UseTime = cur.UseTime
	stats.ReplayWindow = wstats.ReplayWindow
	stats.Replay = wstats.Replay
	stats.Failed = wstats.IntegrityFailed
}

func xfrmUsersaInfoFromXfrmState(state *XfrmState) *nl.XfrmUsersaInfo {
	msg := &nl.XfrmUsersaInfo{}
	msg.Family = uint16(nl.GetIPFamily(state.Dst))
	msg.Id.Daddr.FromIP(state.Dst)
	msg.Saddr.FromIP(state.Src)
	msg.Id.Proto = uint8(state.Proto)
	msg.Mode = uint8(state.Mode)
	msg.Id.Spi = nl.Swap32(uint32(state.Spi))
	msg.Reqid = uint32(state.Reqid)
	msg.ReplayWindow = uint8(state.ReplayWindow)

	return msg
}
   07070100000C5C000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netns   07070100000C5D000081A4000000000000000000000001645E367C00000013000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netns/.golangci.yml run:
  timeout: 5m
 07070100000C5E000081A4000000000000000000000001645E367C00002A2C000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netns/LICENSE   
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   Copyright 2014 Vishvananda Ishaya.
   Copyright 2014 Docker, Inc.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
07070100000C5F000081A4000000000000000000000001645E367C00000421000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netns/README.md # netns - network namespaces in go #

The netns package provides an ultra-simple interface for handling
network namespaces in go. Changing namespaces requires elevated
privileges, so in most cases this code needs to be run as root.

## Local Build and Test ##

You can use go get command:

    go get github.com/vishvananda/netns

Testing (requires root):

    sudo -E go test github.com/vishvananda/netns

## Example ##

```go
package main

import (
    "fmt"
    "net"
    "runtime"

    "github.com/vishvananda/netns"
)

func main() {
    // Lock the OS Thread so we don't accidentally switch namespaces
    runtime.LockOSThread()
    defer runtime.UnlockOSThread()

    // Save the current network namespace
    origns, _ := netns.Get()
    defer origns.Close()

    // Create a new network namespace
    newns, _ := netns.New()
    defer newns.Close()

    // Do something with the network namespace
    ifaces, _ := net.Interfaces()
    fmt.Printf("Interfaces: %v\n", ifaces)

    // Switch back to the original namespace
    netns.Set(origns)
}

```
   07070100000C60000081A4000000000000000000000001645E367C00000220000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netns/doc.go    // Package netns allows ultra-simple network namespace handling. NsHandles
// can be retrieved and set. Note that the current namespace is thread
// local so actions that set and reset namespaces should use LockOSThread
// to make sure the namespace doesn't change due to a goroutine switch.
// It is best to close NsHandles when you are done with them. This can be
// accomplished via a `defer ns.Close()` on the handle. Changing namespaces
// requires elevated privileges, so in most cases this code needs to be run
// as root.
package netns
07070100000C61000081A4000000000000000000000001645E367C00002120000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netns/netns_linux.go    package netns

import (
	"fmt"
	"os"
	"path"
	"path/filepath"
	"strconv"
	"strings"

	"golang.org/x/sys/unix"
)

// Deprecated: use golang.org/x/sys/unix pkg instead.
const (
	CLONE_NEWUTS  = unix.CLONE_NEWUTS  /* New utsname group? */
	CLONE_NEWIPC  = unix.CLONE_NEWIPC  /* New ipcs */
	CLONE_NEWUSER = unix.CLONE_NEWUSER /* New user namespace */
	CLONE_NEWPID  = unix.CLONE_NEWPID  /* New pid namespace */
	CLONE_NEWNET  = unix.CLONE_NEWNET  /* New network namespace */
	CLONE_IO      = unix.CLONE_IO      /* Get io context */
)

const bindMountPath = "/run/netns" /* Bind mount path for named netns */

// Setns sets namespace using golang.org/x/sys/unix.Setns.
//
// Deprecated: Use golang.org/x/sys/unix.Setns instead.
func Setns(ns NsHandle, nstype int) (err error) {
	return unix.Setns(int(ns), nstype)
}

// Set sets the current network namespace to the namespace represented
// by NsHandle.
func Set(ns NsHandle) (err error) {
	return unix.Setns(int(ns), unix.CLONE_NEWNET)
}

// New creates a new network namespace, sets it as current and returns
// a handle to it.
func New() (ns NsHandle, err error) {
	if err := unix.Unshare(unix.CLONE_NEWNET); err != nil {
		return -1, err
	}
	return Get()
}

// NewNamed creates a new named network namespace, sets it as current,
// and returns a handle to it
func NewNamed(name string) (NsHandle, error) {
	if _, err := os.Stat(bindMountPath); os.IsNotExist(err) {
		err = os.MkdirAll(bindMountPath, 0755)
		if err != nil {
			return None(), err
		}
	}

	newNs, err := New()
	if err != nil {
		return None(), err
	}

	namedPath := path.Join(bindMountPath, name)

	f, err := os.OpenFile(namedPath, os.O_CREATE|os.O_EXCL, 0444)
	if err != nil {
		newNs.Close()
		return None(), err
	}
	f.Close()

	nsPath := fmt.Sprintf("/proc/%d/task/%d/ns/net", os.Getpid(), unix.Gettid())
	err = unix.Mount(nsPath, namedPath, "bind", unix.MS_BIND, "")
	if err != nil {
		newNs.Close()
		return None(), err
	}

	return newNs, nil
}

// DeleteNamed deletes a named network namespace
func DeleteNamed(name string) error {
	namedPath := path.Join(bindMountPath, name)

	err := unix.Unmount(namedPath, unix.MNT_DETACH)
	if err != nil {
		return err
	}

	return os.Remove(namedPath)
}

// Get gets a handle to the current threads network namespace.
func Get() (NsHandle, error) {
	return GetFromThread(os.Getpid(), unix.Gettid())
}

// GetFromPath gets a handle to a network namespace
// identified by the path
func GetFromPath(path string) (NsHandle, error) {
	fd, err := unix.Open(path, unix.O_RDONLY|unix.O_CLOEXEC, 0)
	if err != nil {
		return -1, err
	}
	return NsHandle(fd), nil
}

// GetFromName gets a handle to a named network namespace such as one
// created by `ip netns add`.
func GetFromName(name string) (NsHandle, error) {
	return GetFromPath(filepath.Join(bindMountPath, name))
}

// GetFromPid gets a handle to the network namespace of a given pid.
func GetFromPid(pid int) (NsHandle, error) {
	return GetFromPath(fmt.Sprintf("/proc/%d/ns/net", pid))
}

// GetFromThread gets a handle to the network namespace of a given pid and tid.
func GetFromThread(pid, tid int) (NsHandle, error) {
	return GetFromPath(fmt.Sprintf("/proc/%d/task/%d/ns/net", pid, tid))
}

// GetFromDocker gets a handle to the network namespace of a docker container.
// Id is prefixed matched against the running docker containers, so a short
// identifier can be used as long as it isn't ambiguous.
func GetFromDocker(id string) (NsHandle, error) {
	pid, err := getPidForContainer(id)
	if err != nil {
		return -1, err
	}
	return GetFromPid(pid)
}

// borrowed from docker/utils/utils.go
func findCgroupMountpoint(cgroupType string) (int, string, error) {
	output, err := os.ReadFile("/proc/mounts")
	if err != nil {
		return -1, "", err
	}

	// /proc/mounts has 6 fields per line, one mount per line, e.g.
	// cgroup /sys/fs/cgroup/devices cgroup rw,relatime,devices 0 0
	for _, line := range strings.Split(string(output), "\n") {
		parts := strings.Split(line, " ")
		if len(parts) == 6 {
			switch parts[2] {
			case "cgroup2":
				return 2, parts[1], nil
			case "cgroup":
				for _, opt := range strings.Split(parts[3], ",") {
					if opt == cgroupType {
						return 1, parts[1], nil
					}
				}
			}
		}
	}

	return -1, "", fmt.Errorf("cgroup mountpoint not found for %s", cgroupType)
}

// Returns the relative path to the cgroup docker is running in.
// borrowed from docker/utils/utils.go
// modified to get the docker pid instead of using /proc/self
func getDockerCgroup(cgroupVer int, cgroupType string) (string, error) {
	dockerpid, err := os.ReadFile("/var/run/docker.pid")
	if err != nil {
		return "", err
	}
	result := strings.Split(string(dockerpid), "\n")
	if len(result) == 0 || len(result[0]) == 0 {
		return "", fmt.Errorf("docker pid not found in /var/run/docker.pid")
	}
	pid, err := strconv.Atoi(result[0])
	if err != nil {
		return "", err
	}
	output, err := os.ReadFile(fmt.Sprintf("/proc/%d/cgroup", pid))
	if err != nil {
		return "", err
	}
	for _, line := range strings.Split(string(output), "\n") {
		parts := strings.Split(line, ":")
		// any type used by docker should work
		if (cgroupVer == 1 && parts[1] == cgroupType) ||
			(cgroupVer == 2 && parts[1] == "") {
			return parts[2], nil
		}
	}
	return "", fmt.Errorf("cgroup '%s' not found in /proc/%d/cgroup", cgroupType, pid)
}

// Returns the first pid in a container.
// borrowed from docker/utils/utils.go
// modified to only return the first pid
// modified to glob with id
// modified to search for newer docker containers
// modified to look for cgroups v2
func getPidForContainer(id string) (int, error) {
	pid := 0

	// memory is chosen randomly, any cgroup used by docker works
	cgroupType := "memory"

	cgroupVer, cgroupRoot, err := findCgroupMountpoint(cgroupType)
	if err != nil {
		return pid, err
	}

	cgroupDocker, err := getDockerCgroup(cgroupVer, cgroupType)
	if err != nil {
		return pid, err
	}

	id += "*"

	var pidFile string
	if cgroupVer == 1 {
		pidFile = "tasks"
	} else if cgroupVer == 2 {
		pidFile = "cgroup.procs"
	} else {
		return -1, fmt.Errorf("Invalid cgroup version '%d'", cgroupVer)
	}

	attempts := []string{
		filepath.Join(cgroupRoot, cgroupDocker, id, pidFile),
		// With more recent lxc versions use, cgroup will be in lxc/
		filepath.Join(cgroupRoot, cgroupDocker, "lxc", id, pidFile),
		// With more recent docker, cgroup will be in docker/
		filepath.Join(cgroupRoot, cgroupDocker, "docker", id, pidFile),
		// Even more recent docker versions under systemd use docker-<id>.scope/
		filepath.Join(cgroupRoot, "system.slice", "docker-"+id+".scope", pidFile),
		// Even more recent docker versions under cgroup/systemd/docker/<id>/
		filepath.Join(cgroupRoot, "..", "systemd", "docker", id, pidFile),
		// Kubernetes with docker and CNI is even more different. Works for BestEffort and Burstable QoS
		filepath.Join(cgroupRoot, "..", "systemd", "kubepods", "*", "pod*", id, pidFile),
		// Same as above but for Guaranteed QoS
		filepath.Join(cgroupRoot, "..", "systemd", "kubepods", "pod*", id, pidFile),
		// Another flavor of containers location in recent kubernetes 1.11+. Works for BestEffort and Burstable QoS
		filepath.Join(cgroupRoot, cgroupDocker, "kubepods.slice", "*.slice", "*", "docker-"+id+".scope", pidFile),
		// Same as above but for Guaranteed QoS
		filepath.Join(cgroupRoot, cgroupDocker, "kubepods.slice", "*", "docker-"+id+".scope", pidFile),
		// When runs inside of a container with recent kubernetes 1.11+. Works for BestEffort and Burstable QoS
		filepath.Join(cgroupRoot, "kubepods.slice", "*.slice", "*", "docker-"+id+".scope", pidFile),
		// Same as above but for Guaranteed QoS
		filepath.Join(cgroupRoot, "kubepods.slice", "*", "docker-"+id+".scope", pidFile),
	}

	var filename string
	for _, attempt := range attempts {
		filenames, _ := filepath.Glob(attempt)
		if len(filenames) > 1 {
			return pid, fmt.Errorf("Ambiguous id supplied: %v", filenames)
		} else if len(filenames) == 1 {
			filename = filenames[0]
			break
		}
	}

	if filename == "" {
		return pid, fmt.Errorf("Unable to find container: %v", id[:len(id)-1])
	}

	output, err := os.ReadFile(filename)
	if err != nil {
		return pid, err
	}

	result := strings.Split(string(output), "\n")
	if len(result) == 0 || len(result[0]) == 0 {
		return pid, fmt.Errorf("No pid found for container")
	}

	pid, err = strconv.Atoi(result[0])
	if err != nil {
		return pid, fmt.Errorf("Invalid pid '%s': %s", result[0], err)
	}

	return pid, nil
}
07070100000C62000081A4000000000000000000000001645E367C00000477000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netns/netns_others.go   //go:build !linux
// +build !linux

package netns

import (
	"errors"
)

var (
	ErrNotImplemented = errors.New("not implemented")
)

// Setns sets namespace using golang.org/x/sys/unix.Setns on Linux. It
// is not implemented on other platforms.
//
// Deprecated: Use golang.org/x/sys/unix.Setns instead.
func Setns(ns NsHandle, nstype int) (err error) {
	return ErrNotImplemented
}

func Set(ns NsHandle) (err error) {
	return ErrNotImplemented
}

func New() (ns NsHandle, err error) {
	return -1, ErrNotImplemented
}

func NewNamed(name string) (NsHandle, error) {
	return -1, ErrNotImplemented
}

func DeleteNamed(name string) error {
	return ErrNotImplemented
}

func Get() (NsHandle, error) {
	return -1, ErrNotImplemented
}

func GetFromPath(path string) (NsHandle, error) {
	return -1, ErrNotImplemented
}

func GetFromName(name string) (NsHandle, error) {
	return -1, ErrNotImplemented
}

func GetFromPid(pid int) (NsHandle, error) {
	return -1, ErrNotImplemented
}

func GetFromThread(pid, tid int) (NsHandle, error) {
	return -1, ErrNotImplemented
}

func GetFromDocker(id string) (NsHandle, error) {
	return -1, ErrNotImplemented
}
 07070100000C63000081A4000000000000000000000001645E367C000006DB000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netns/nshandle_linux.go package netns

import (
	"fmt"

	"golang.org/x/sys/unix"
)

// NsHandle is a handle to a network namespace. It can be cast directly
// to an int and used as a file descriptor.
type NsHandle int

// Equal determines if two network handles refer to the same network
// namespace. This is done by comparing the device and inode that the
// file descriptors point to.
func (ns NsHandle) Equal(other NsHandle) bool {
	if ns == other {
		return true
	}
	var s1, s2 unix.Stat_t
	if err := unix.Fstat(int(ns), &s1); err != nil {
		return false
	}
	if err := unix.Fstat(int(other), &s2); err != nil {
		return false
	}
	return (s1.Dev == s2.Dev) && (s1.Ino == s2.Ino)
}

// String shows the file descriptor number and its dev and inode.
func (ns NsHandle) String() string {
	if ns == -1 {
		return "NS(none)"
	}
	var s unix.Stat_t
	if err := unix.Fstat(int(ns), &s); err != nil {
		return fmt.Sprintf("NS(%d: unknown)", ns)
	}
	return fmt.Sprintf("NS(%d: %d, %d)", ns, s.Dev, s.Ino)
}

// UniqueId returns a string which uniquely identifies the namespace
// associated with the network handle.
func (ns NsHandle) UniqueId() string {
	if ns == -1 {
		return "NS(none)"
	}
	var s unix.Stat_t
	if err := unix.Fstat(int(ns), &s); err != nil {
		return "NS(unknown)"
	}
	return fmt.Sprintf("NS(%d:%d)", s.Dev, s.Ino)
}

// IsOpen returns true if Close() has not been called.
func (ns NsHandle) IsOpen() bool {
	return ns != -1
}

// Close closes the NsHandle and resets its file descriptor to -1.
// It is not safe to use an NsHandle after Close() is called.
func (ns *NsHandle) Close() error {
	if err := unix.Close(int(*ns)); err != nil {
		return err
	}
	*ns = -1
	return nil
}

// None gets an empty (closed) NsHandle.
func None() NsHandle {
	return NsHandle(-1)
}
 07070100000C64000081A4000000000000000000000001645E367C000004E9000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/vishvananda/netns/nshandle_others.go    //go:build !linux
// +build !linux

package netns

// NsHandle is a handle to a network namespace. It can only be used on Linux,
// but provides stub methods on other platforms.
type NsHandle int

// Equal determines if two network handles refer to the same network
// namespace. It is only implemented on Linux.
func (ns NsHandle) Equal(_ NsHandle) bool {
	return false
}

// String shows the file descriptor number and its dev and inode.
// It is only implemented on Linux, and returns "NS(none)" on other
// platforms.
func (ns NsHandle) String() string {
	return "NS(none)"
}

// UniqueId returns a string which uniquely identifies the namespace
// associated with the network handle. It is only implemented on Linux,
// and returns "NS(none)" on other platforms.
func (ns NsHandle) UniqueId() string {
	return "NS(none)"
}

// IsOpen returns true if Close() has not been called. It is only implemented
// on Linux and always returns false on other platforms.
func (ns NsHandle) IsOpen() bool {
	return false
}

// Close closes the NsHandle and resets its file descriptor to -1.
// It is only implemented on Linux.
func (ns *NsHandle) Close() error {
	return nil
}

// None gets an empty (closed) NsHandle.
func None() NsHandle {
	return NsHandle(-1)
}
   07070100000C65000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/vendor/github.com/vmware  07070100000C66000041ED000000000000000000000007645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/github.com/vmware/vmw-guestinfo    07070100000C67000081A4000000000000000000000001645E367C00002C64000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/vmware/vmw-guestinfo/LICENSE    
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright 2017 VMware, Inc. All rights reserved.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
07070100000C68000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/vmware/vmw-guestinfo/bdoor  07070100000C69000081A4000000000000000000000001645E367C000009DF000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/vmware/vmw-guestinfo/bdoor/bdoor.go // Copyright 2016-2017 VMware, Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

//go:generate go run asm.go -out bdoor_amd64.s -arch amd64
//go:generate go run asm.go -out bdoor_386.s -arch 386

package bdoor

const (
	BackdoorPort       = uint16(0x5658)
	BackdoorHighBWPort = uint16(0x5659)

	CommandGetVersion = uint32(10)

	CommandMessage       = uint16(0x1e)
	CommandHighBWMessage = uint16(0)
	CommandFlagCookie    = uint32(0x80000000)
)

func (p *BackdoorProto) InOut() *BackdoorProto {
	p.DX.AsUInt32().Low = BackdoorPort
	p.AX.SetValue(BackdoorMagic)

	retax, retbx, retcx, retdx, retsi, retdi, retbp := bdoor_inout(
		p.AX.Value(),
		p.BX.Value(),
		p.CX.Value(),
		p.DX.Value(),
		p.SI.Value(),
		p.DI.Value(),
		p.BP.Value(),
	)

	ret := &BackdoorProto{}
	ret.AX.SetValue(retax)
	ret.BX.SetValue(retbx)
	ret.CX.SetValue(retcx)
	ret.DX.SetValue(retdx)
	ret.SI.SetValue(retsi)
	ret.DI.SetValue(retdi)
	ret.BP.SetValue(retbp)

	return ret
}

func (p *BackdoorProto) HighBandwidthOut() *BackdoorProto {
	p.DX.AsUInt32().Low = BackdoorHighBWPort
	p.AX.SetValue(BackdoorMagic)

	retax, retbx, retcx, retdx, retsi, retdi, retbp := bdoor_hbout(
		p.AX.Value(),
		p.BX.Value(),
		p.CX.Value(),
		p.DX.Value(),
		p.SI.Value(),
		p.DI.Value(),
		p.BP.Value(),
	)

	ret := &BackdoorProto{}
	ret.AX.SetValue(retax)
	ret.BX.SetValue(retbx)
	ret.CX.SetValue(retcx)
	ret.DX.SetValue(retdx)
	ret.SI.SetValue(retsi)
	ret.DI.SetValue(retdi)
	ret.BP.SetValue(retbp)

	return ret
}

func (p *BackdoorProto) HighBandwidthIn() *BackdoorProto {
	p.DX.AsUInt32().Low = BackdoorHighBWPort
	p.AX.SetValue(BackdoorMagic)

	retax, retbx, retcx, retdx, retsi, retdi, retbp := bdoor_hbin(
		p.AX.Value(),
		p.BX.Value(),
		p.CX.Value(),
		p.DX.Value(),
		p.SI.Value(),
		p.DI.Value(),
		p.BP.Value(),
	)

	ret := &BackdoorProto{}
	ret.AX.SetValue(retax)
	ret.BX.SetValue(retbx)
	ret.CX.SetValue(retcx)
	ret.DX.SetValue(retdx)
	ret.SI.SetValue(retsi)
	ret.DI.SetValue(retdi)
	ret.BP.SetValue(retbp)

	return ret
}
 07070100000C6A000081A4000000000000000000000001645E367C000006F1000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/vmware/vmw-guestinfo/bdoor/bdoor_386.go // Copyright 2016-2017 VMware, Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package bdoor

const (
	BackdoorMagic = uint32(0x564D5868)
)

type BackdoorProto struct {
	// typedef union {
	//   struct {
	//      DECLARE_REG_NAMED_STRUCT(ax);
	//      size_t size; /* Register bx. */
	//      DECLARE_REG_NAMED_STRUCT(cx);
	//      DECLARE_REG_NAMED_STRUCT(dx);
	//      DECLARE_REG_NAMED_STRUCT(si);
	//      DECLARE_REG_NAMED_STRUCT(di);
	//   } in;
	//   struct {
	//      DECLARE_REG_NAMED_STRUCT(ax);
	//      DECLARE_REG_NAMED_STRUCT(bx);
	//      DECLARE_REG_NAMED_STRUCT(cx);
	//      DECLARE_REG_NAMED_STRUCT(dx);
	//      DECLARE_REG_NAMED_STRUCT(si);
	//      DECLARE_REG_NAMED_STRUCT(di);
	//   } out;
	// } proto;

	AX, BX, CX, DX, SI, DI, BP UInt32
	size                       uint32
}

func bdoor_inout(ax, bx, cx, dx, si, di, bp uint32) (retax, retbx, retcx, retdx, retsi, retdi, retbp uint32)
func bdoor_hbout(ax, bx, cx, dx, si, di, bp uint32) (retax, retbx, retcx, retdx, retsi, retdi, retbp uint32)
func bdoor_hbin(ax, bx, cx, dx, si, di, bp uint32) (retax, retbx, retcx, retdx, retsi, retdi, retbp uint32)
func bdoor_inout_test(ax, bx, cx, dx, si, di, bp uint32) (retax, retbx, retcx, retdx, retsi, retdi, retbp uint32)
   07070100000C6B000081A4000000000000000000000001645E367C0000094A000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/vmware/vmw-guestinfo/bdoor/bdoor_386.s  // Code generated by command: go run asm.go -out bdoor_386.s -arch 386. DO NOT EDIT.

// +build gc

#include "textflag.h"

// func bdoor_inout(ax uint32, bx uint32, cx uint32, dx uint32, si uint32, di uint32, bp uint32) (retax uint32, retbx uint32, retcx uint32, retdx uint32, retsi uint32, retdi uint32, retbp uint32)
TEXT ·bdoor_inout(SB), NOSPLIT|WRAPPER, $0-56
	MOVL ax+0(FP), AX
	MOVL bx+4(FP), BX
	MOVL cx+8(FP), CX
	MOVL dx+12(FP), DX
	MOVL si+16(FP), SI
	MOVL di+20(FP), DI
	MOVL bp+24(FP), BP

	// IN to DX from AX
	INL
	MOVL AX, retax+28(FP)
	MOVL BX, retbx+32(FP)
	MOVL CX, retcx+36(FP)
	MOVL DX, retdx+40(FP)
	MOVL SI, retsi+44(FP)
	MOVL DI, retdi+48(FP)
	MOVL BP, retbp+52(FP)
	RET

// func bdoor_hbout(ax uint32, bx uint32, cx uint32, dx uint32, si uint32, di uint32, bp uint32) (retax uint32, retbx uint32, retcx uint32, retdx uint32, retsi uint32, retdi uint32, retbp uint32)
TEXT ·bdoor_hbout(SB), NOSPLIT|WRAPPER, $0-56
	MOVL ax+0(FP), AX
	MOVL bx+4(FP), BX
	MOVL cx+8(FP), CX
	MOVL dx+12(FP), DX
	MOVL si+16(FP), SI
	MOVL di+20(FP), DI
	MOVL bp+24(FP), BP
	CLD
	REP
	OUTSB
	MOVL AX, retax+28(FP)
	MOVL BX, retbx+32(FP)
	MOVL CX, retcx+36(FP)
	MOVL DX, retdx+40(FP)
	MOVL SI, retsi+44(FP)
	MOVL DI, retdi+48(FP)
	MOVL BP, retbp+52(FP)
	RET

// func bdoor_hbin(ax uint32, bx uint32, cx uint32, dx uint32, si uint32, di uint32, bp uint32) (retax uint32, retbx uint32, retcx uint32, retdx uint32, retsi uint32, retdi uint32, retbp uint32)
TEXT ·bdoor_hbin(SB), NOSPLIT|WRAPPER, $0-56
	MOVL ax+0(FP), AX
	MOVL bx+4(FP), BX
	MOVL cx+8(FP), CX
	MOVL dx+12(FP), DX
	MOVL si+16(FP), SI
	MOVL di+20(FP), DI
	MOVL bp+24(FP), BP
	CLD
	REP
	INSB
	MOVL AX, retax+28(FP)
	MOVL BX, retbx+32(FP)
	MOVL CX, retcx+36(FP)
	MOVL DX, retdx+40(FP)
	MOVL SI, retsi+44(FP)
	MOVL DI, retdi+48(FP)
	MOVL BP, retbp+52(FP)
	RET

// func bdoor_inout_test(ax uint32, bx uint32, cx uint32, dx uint32, si uint32, di uint32, bp uint32) (retax uint32, retbx uint32, retcx uint32, retdx uint32, retsi uint32, retdi uint32, retbp uint32)
TEXT ·bdoor_inout_test(SB), NOSPLIT|WRAPPER, $0-56
	MOVL ax+0(FP), AX
	MOVL bx+4(FP), BX
	MOVL cx+8(FP), CX
	MOVL dx+12(FP), DX
	MOVL si+16(FP), SI
	MOVL di+20(FP), DI
	MOVL bp+24(FP), BP
	MOVL AX, retax+28(FP)
	MOVL BX, retbx+32(FP)
	MOVL CX, retcx+36(FP)
	MOVL DX, retdx+40(FP)
	MOVL SI, retsi+44(FP)
	MOVL DI, retdi+48(FP)
	MOVL BP, retbp+52(FP)
	RET
  07070100000C6C000081A4000000000000000000000001645E367C000006F1000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/github.com/vmware/vmw-guestinfo/bdoor/bdoor_amd64.go   // Copyright 2016-2017 VMware, Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package bdoor

const (
	BackdoorMagic = uint64(0x564D5868)
)

type BackdoorProto struct {
	// typedef union {
	//   struct {
	//      DECLARE_REG_NAMED_STRUCT(ax);
	//      size_t size; /* Register bx. */
	//      DECLARE_REG_NAMED_STRUCT(cx);
	//      DECLARE_REG_NAMED_STRUCT(dx);
	//      DECLARE_REG_NAMED_STRUCT(si);
	//      DECLARE_REG_NAMED_STRUCT(di);
	//   } in;
	//   struct {
	//      DECLARE_REG_NAMED_STRUCT(ax);
	//      DECLARE_REG_NAMED_STRUCT(bx);
	//      DECLARE_REG_NAMED_STRUCT(cx);
	//      DECLARE_REG_NAMED_STRUCT(dx);
	//      DECLARE_REG_NAMED_STRUCT(si);
	//      DECLARE_REG_NAMED_STRUCT(di);
	//   } out;
	// } proto;

	AX, BX, CX, DX, SI, DI, BP UInt64
	size                       uint32
}

func bdoor_inout(ax, bx, cx, dx, si, di, bp uint64) (retax, retbx, retcx, retdx, retsi, retdi, retbp uint64)
func bdoor_hbout(ax, bx, cx, dx, si, di, bp uint64) (retax, retbx, retcx, retdx, retsi, retdi, retbp uint64)
func bdoor_hbin(ax, bx, cx, dx, si, di, bp uint64) (retax, retbx, retcx, retdx, retsi, retdi, retbp uint64)
func bdoor_inout_test(ax, bx, cx, dx, si, di, bp uint64) (retax, retbx, retcx, retdx, retsi, retdi, retbp uint64)
   07070100000C6D000081A4000000000000000000000001645E367C0000095A000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/github.com/vmware/vmw-guestinfo/bdoor/bdoor_amd64.s    // Code generated by command: go run asm.go -out bdoor_amd64.s -arch amd64. DO NOT EDIT.

// +build gc

#include "textflag.h"

// func bdoor_inout(ax uint64, bx uint64, cx uint64, dx uint64, si uint64, di uint64, bp uint64) (retax uint64, retbx uint64, retcx uint64, retdx uint64, retsi uint64, retdi uint64, retbp uint64)
TEXT ·bdoor_inout(SB), NOSPLIT|WRAPPER, $0-112
	MOVQ ax+0(FP), AX
	MOVQ bx+8(FP), BX
	MOVQ cx+16(FP), CX
	MOVQ dx+24(FP), DX
	MOVQ si+32(FP), SI
	MOVQ di+40(FP), DI
	MOVQ bp+48(FP), BP

	// IN to DX from AX
	INL
	MOVQ AX, retax+56(FP)
	MOVQ BX, retbx+64(FP)
	MOVQ CX, retcx+72(FP)
	MOVQ DX, retdx+80(FP)
	MOVQ SI, retsi+88(FP)
	MOVQ DI, retdi+96(FP)
	MOVQ BP, retbp+104(FP)
	RET

// func bdoor_hbout(ax uint64, bx uint64, cx uint64, dx uint64, si uint64, di uint64, bp uint64) (retax uint64, retbx uint64, retcx uint64, retdx uint64, retsi uint64, retdi uint64, retbp uint64)
TEXT ·bdoor_hbout(SB), NOSPLIT|WRAPPER, $0-112
	MOVQ ax+0(FP), AX
	MOVQ bx+8(FP), BX
	MOVQ cx+16(FP), CX
	MOVQ dx+24(FP), DX
	MOVQ si+32(FP), SI
	MOVQ di+40(FP), DI
	MOVQ bp+48(FP), BP
	CLD
	REP
	OUTSB
	MOVQ AX, retax+56(FP)
	MOVQ BX, retbx+64(FP)
	MOVQ CX, retcx+72(FP)
	MOVQ DX, retdx+80(FP)
	MOVQ SI, retsi+88(FP)
	MOVQ DI, retdi+96(FP)
	MOVQ BP, retbp+104(FP)
	RET

// func bdoor_hbin(ax uint64, bx uint64, cx uint64, dx uint64, si uint64, di uint64, bp uint64) (retax uint64, retbx uint64, retcx uint64, retdx uint64, retsi uint64, retdi uint64, retbp uint64)
TEXT ·bdoor_hbin(SB), NOSPLIT|WRAPPER, $0-112
	MOVQ ax+0(FP), AX
	MOVQ bx+8(FP), BX
	MOVQ cx+16(FP), CX
	MOVQ dx+24(FP), DX
	MOVQ si+32(FP), SI
	MOVQ di+40(FP), DI
	MOVQ bp+48(FP), BP
	CLD
	REP
	INSB
	MOVQ AX, retax+56(FP)
	MOVQ BX, retbx+64(FP)
	MOVQ CX, retcx+72(FP)
	MOVQ DX, retdx+80(FP)
	MOVQ SI, retsi+88(FP)
	MOVQ DI, retdi+96(FP)
	MOVQ BP, retbp+104(FP)
	RET

// func bdoor_inout_test(ax uint64, bx uint64, cx uint64, dx uint64, si uint64, di uint64, bp uint64) (retax uint64, retbx uint64, retcx uint64, retdx uint64, retsi uint64, retdi uint64, retbp uint64)
TEXT ·bdoor_inout_test(SB), NOSPLIT|WRAPPER, $0-112
	MOVQ ax+0(FP), AX
	MOVQ bx+8(FP), BX
	MOVQ cx+16(FP), CX
	MOVQ dx+24(FP), DX
	MOVQ si+32(FP), SI
	MOVQ di+40(FP), DI
	MOVQ bp+48(FP), BP
	MOVQ AX, retax+56(FP)
	MOVQ BX, retbx+64(FP)
	MOVQ CX, retcx+72(FP)
	MOVQ DX, retdx+80(FP)
	MOVQ SI, retsi+88(FP)
	MOVQ DI, retdi+96(FP)
	MOVQ BP, retbp+104(FP)
	RET
  07070100000C6E000081A4000000000000000000000001645E367C0000063F000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/vmware/vmw-guestinfo/bdoor/word.go  // Copyright 2016-2017 VMware, Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package bdoor

import "unsafe"

type UInt32 struct {
	High uint16
	Low  uint16
}

func (u *UInt32) Word() uint32 {
	return uint32(u.High)<<16 + uint32(u.Low)
}

func (u *UInt32) SetWord(w uint32) {
	u.High = uint16(w >> 16)
	u.Low = uint16(w)
}

func (u *UInt32) AsUInt32() *UInt32 {
	return u
}

func (u *UInt32) Value() uint32 {
	return u.Word()
}

func (u *UInt32) SetValue(val uint32) {
	u.SetWord(val)
}

func (u *UInt32) SetPointer(p unsafe.Pointer) {
	u.SetWord(uint32(uintptr(p)))
}

type UInt64 struct {
	High UInt32
	Low  UInt32
}

func (u *UInt64) Quad() uint64 {
	return uint64(u.High.Word())<<32 + uint64(u.Low.Word())
}

func (u *UInt64) SetQuad(w uint64) {
	u.High.SetWord(uint32(w >> 32))
	u.Low.SetWord(uint32(w))
}

func (u *UInt64) AsUInt32() *UInt32 {
	return &u.Low
}

func (u *UInt64) Value() uint64 {
	return u.Quad()
}

func (u *UInt64) SetValue(val uint64) {
	u.SetQuad(val)
}

func (u *UInt64) SetPointer(p unsafe.Pointer) {
	u.SetQuad(uint64(uintptr(p)))
}
 07070100000C6F000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/vmware/vmw-guestinfo/message    07070100000C70000081A4000000000000000000000001645E367C000005D9000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/vmware/vmw-guestinfo/message/log.go // Copyright 2016 VMware, Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package message

import "log"

var DefaultLogger Logger

type Logger interface {
	Errorf(format string, args ...interface{})
	Debugf(format string, args ...interface{})
	Infof(format string, args ...interface{})
}

func init() {
	DefaultLogger = &logger{}
}

type logger struct {
	DebugLevel bool
}

func (l *logger) Errorf(format string, args ...interface{}) {
	log.Printf(format, args...)
}

func (l *logger) Debugf(format string, args ...interface{}) {
	if !l.DebugLevel {
		return
	}

	log.Printf(format, args...)
}

func (l *logger) Infof(format string, args ...interface{}) {
	log.Printf(format, args...)
}

func Errorf(format string, args ...interface{}) {
	DefaultLogger.Errorf(format, args...)
}

func Debugf(format string, args ...interface{}) {
	DefaultLogger.Debugf(format, args...)
}

func Infof(format string, args ...interface{}) {
	DefaultLogger.Infof(format, args...)
}
   07070100000C71000081A4000000000000000000000001645E367C000024A7000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/vmware/vmw-guestinfo/message/message.go // Copyright 2016-2017 VMware, Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package message

import (
	"bytes"
	"encoding/binary"
	"errors"
	"unsafe"

	"github.com/vmware/vmw-guestinfo/bdoor"
)

const (
	messageTypeOpen = iota
	messageTypeSendSize
	messageTypeSendPayload
	messageTypeReceiveSize
	messageTypeReceivePayload
	messageTypeReceiveStatus
	messageTypeClose

	messageStatusFail       = uint16(0x0000)
	messageStatusSuccess    = uint16(0x0001)
	messageStatusDoRecieve  = uint16(0x0002)
	messageStatusCheckPoint = uint16(0x0010)
	messageStatusHighBW     = uint16(0x0080)
)

var (
	// ErrChannelOpen represents a failure to open a channel
	ErrChannelOpen = errors.New("could not open channel")
	// ErrChannelClose represents a failure to close a channel
	ErrChannelClose = errors.New("could not close channel")
	// ErrRpciSend represents a failure to send a message
	ErrRpciSend = errors.New("unable to send RPCI command")
	// ErrRpciReceive represents a failure to receive a message
	ErrRpciReceive = errors.New("unable to receive RPCI command result")
)

type Channel struct {
	id uint16

	forceLowBW bool
	buf        []byte

	cookie bdoor.UInt64
}

// NewChannel opens a new Channel
func NewChannel(proto uint32) (*Channel, error) {
	flags := bdoor.CommandFlagCookie

retry:
	bp := &bdoor.BackdoorProto{}

	bp.BX.AsUInt32().SetWord(proto | flags)
	bp.CX.AsUInt32().High = messageTypeOpen
	bp.CX.AsUInt32().Low = bdoor.CommandMessage

	out := bp.InOut()
	if (out.CX.AsUInt32().High & messageStatusSuccess) == 0 {
		if flags != 0 {
			flags = 0
			goto retry
		}

		Errorf("Message: Unable to open communication channel")
		return nil, ErrChannelOpen
	}

	ch := &Channel{}
	ch.id = out.DX.AsUInt32().High
	ch.cookie.High.SetWord(out.SI.AsUInt32().Word())
	ch.cookie.Low.SetWord(out.DI.AsUInt32().Word())

	Debugf("Opened channel %d", ch.id)
	return ch, nil
}

func (c *Channel) Close() error {
	bp := &bdoor.BackdoorProto{}

	bp.CX.AsUInt32().High = messageTypeClose
	bp.CX.AsUInt32().Low = bdoor.CommandMessage

	bp.DX.AsUInt32().High = c.id
	bp.SI.AsUInt32().SetWord(c.cookie.High.Word())
	bp.DI.AsUInt32().SetWord(c.cookie.Low.Word())

	out := bp.InOut()
	if (out.CX.AsUInt32().High & messageStatusSuccess) == 0 {
		Errorf("Message: Unable to close communication channel %d", c.id)
		return ErrChannelClose
	}

	Debugf("Closed channel %d", c.id)
	return nil
}

func (c *Channel) Send(buf []byte) error {
retry:
	bp := &bdoor.BackdoorProto{}
	bp.CX.AsUInt32().High = messageTypeSendSize
	bp.CX.AsUInt32().Low = bdoor.CommandMessage

	bp.DX.AsUInt32().High = c.id
	bp.SI.AsUInt32().SetWord(c.cookie.High.Word())
	bp.DI.AsUInt32().SetWord(c.cookie.Low.Word())

	bp.BX.AsUInt32().SetWord(uint32(len(buf)))

	// send the size
	out := bp.InOut()
	if (out.CX.AsUInt32().High & messageStatusSuccess) == 0 {
		Errorf("Message: Unable to send a message over the communication channel %d", c.id)
		return ErrRpciSend
	}

	// size of buf 0 is fine, just return
	if len(buf) == 0 {
		return nil
	}

	if !c.forceLowBW && (out.CX.AsUInt32().High&messageStatusHighBW) == messageStatusHighBW {
		hbbp := &bdoor.BackdoorProto{}

		hbbp.BX.AsUInt32().Low = bdoor.CommandHighBWMessage
		hbbp.BX.AsUInt32().High = messageStatusSuccess
		hbbp.DX.AsUInt32().High = c.id
		hbbp.BP.AsUInt32().SetWord(c.cookie.High.Word())
		hbbp.DI.AsUInt32().SetWord(c.cookie.Low.Word())
		hbbp.CX.AsUInt32().SetWord(uint32(len(buf)))
		hbbp.SI.SetPointer(unsafe.Pointer(&buf[0]))

		out := hbbp.HighBandwidthOut()
		if (out.BX.AsUInt32().High & messageStatusSuccess) == 0 {
			if (out.BX.AsUInt32().High & messageStatusCheckPoint) != 0 {
				Debugf("A checkpoint occurred. Retrying the operation")
				goto retry
			}

			Errorf("Message: Unable to send a message over the communication channel %d", c.id)
			return ErrRpciSend
		}
	} else {
		bp.CX.AsUInt32().High = messageTypeSendPayload

		bbuf := bytes.NewBuffer(buf)
		for {
			// read 4 bytes at a time
			words := bbuf.Next(4)
			if len(words) == 0 {
				break
			}

			Debugf("sending %q over %d", string(words), c.id)
			switch len(words) {
			case 3:
				bp.BX.AsUInt32().SetWord(binary.LittleEndian.Uint32([]byte{0x0, words[2], words[1], words[0]}))
			case 2:
				bp.BX.AsUInt32().SetWord(uint32(binary.LittleEndian.Uint16(words)))
			case 1:
				bp.BX.AsUInt32().SetWord(uint32(words[0]))
			default:
				bp.BX.AsUInt32().SetWord(binary.LittleEndian.Uint32(words))
			}

			out = bp.InOut()
			if (out.CX.AsUInt32().High & messageStatusSuccess) == 0 {
				Errorf("Message: Unable to send a message over the communication channel %d", c.id)
				return ErrRpciSend
			}
		}
	}

	return nil
}

func (c *Channel) Receive() ([]byte, error) {
retry:
	var err error
	bp := &bdoor.BackdoorProto{}
	bp.CX.AsUInt32().High = messageTypeReceiveSize
	bp.CX.AsUInt32().Low = bdoor.CommandMessage

	bp.DX.AsUInt32().High = c.id
	bp.SI.AsUInt32().SetWord(c.cookie.High.Word())
	bp.DI.AsUInt32().SetWord(c.cookie.Low.Word())

	out := bp.InOut()
	if (out.CX.AsUInt32().High & messageStatusSuccess) == 0 {
		Errorf("Message: Unable to poll for messages over the communication channel %d", c.id)
		return nil, ErrRpciReceive
	}

	if (out.CX.AsUInt32().High & messageStatusDoRecieve) == 0 {
		Debugf("No message to retrieve")
		return nil, nil
	}

	// Receive the size.
	if out.DX.AsUInt32().High != messageTypeSendSize {
		Errorf("Message: Protocol error. Expected a MESSAGE_TYPE_SENDSIZE request from vmware")
		return nil, ErrRpciReceive
	}

	size := out.BX.Value()

	var buf []byte

	if size != 0 {
		if !c.forceLowBW && (out.CX.AsUInt32().High&messageStatusHighBW == messageStatusHighBW) {
			buf = make([]byte, size)

			hbbp := &bdoor.BackdoorProto{}

			hbbp.BX.AsUInt32().Low = bdoor.CommandHighBWMessage
			hbbp.BX.AsUInt32().High = messageStatusSuccess
			hbbp.DX.AsUInt32().High = c.id
			hbbp.SI.AsUInt32().SetWord(c.cookie.High.Word())
			hbbp.BP.AsUInt32().SetWord(c.cookie.Low.Word())
			hbbp.CX.AsUInt32().SetWord(uint32(len(buf)))
			hbbp.DI.SetPointer(unsafe.Pointer(&buf[0]))

			out := hbbp.HighBandwidthIn()
			if (out.BX.AsUInt32().High & messageStatusSuccess) == 0 {
				Errorf("Message: Unable to send a message over the communication channel %d", c.id)
				c.reply(messageTypeReceivePayload, messageStatusFail)
				return nil, ErrRpciReceive
			}
		} else {
			b := bytes.NewBuffer(make([]byte, 0, size))

			for {
				if size == 0 {
					break
				}

				bp.CX.AsUInt32().High = messageTypeReceivePayload
				bp.BX.AsUInt32().Low = messageStatusSuccess

				out = bp.InOut()
				if (out.CX.AsUInt32().High & messageStatusSuccess) == 0 {
					if (out.CX.AsUInt32().High & messageStatusCheckPoint) != 0 {
						Debugf("A checkpoint occurred. Retrying the operation")
						goto retry
					}

					Errorf("Message: Unable to receive a message over the communication channel %d", c.id)
					c.reply(messageTypeReceivePayload, messageStatusFail)
					return nil, ErrRpciReceive
				}

				if out.DX.AsUInt32().High != messageTypeSendPayload {
					Errorf("Message: Protocol error. Expected a MESSAGE_TYPE_SENDPAYLOAD from vmware")
					c.reply(messageTypeReceivePayload, messageStatusFail)
					return nil, ErrRpciReceive
				}

				Debugf("Received %#v", out.BX.AsUInt32().Word())

				switch size {
				case 1:
					err = binary.Write(b, binary.LittleEndian, uint8(out.BX.AsUInt32().Low))
					size = size - 1

				case 2:
					err = binary.Write(b, binary.LittleEndian, uint16(out.BX.AsUInt32().Low))
					size = size - 2

				case 3:
					err = binary.Write(b, binary.LittleEndian, uint16(out.BX.AsUInt32().Low))
					if err != nil {
						c.reply(messageTypeReceivePayload, messageStatusFail)
						return nil, ErrRpciReceive
					}
					err = binary.Write(b, binary.LittleEndian, uint8(out.BX.AsUInt32().High))
					size = size - 3

				default:
					err = binary.Write(b, binary.LittleEndian, out.BX.AsUInt32().Word())
					size = size - 4
				}

				if err != nil {
					Errorf(err.Error())
					c.reply(messageTypeReceivePayload, messageStatusFail)
					return nil, ErrRpciReceive
				}
			}

			buf = b.Bytes()
		}
	}

	c.reply(messageTypeReceiveStatus, messageStatusSuccess)

	return buf, nil
}

func (c *Channel) reply(messageType, messageStatus uint16) {
	bp := &bdoor.BackdoorProto{}

	bp.BX.AsUInt32().Low = messageStatus
	bp.CX.AsUInt32().High = messageType
	bp.CX.AsUInt32().Low = bdoor.CommandMessage
	bp.DX.AsUInt32().High = c.id
	bp.SI.AsUInt32().SetWord(c.cookie.High.Word())
	bp.DI.AsUInt32().SetWord(c.cookie.Low.Word())

	out := bp.InOut()

	/* OUT: Status */
	if (out.CX.AsUInt32().High & messageStatusSuccess) == 0 {
		if messageStatus == messageStatusSuccess {
			Errorf("reply Message: Unable to send a message over the communication channel %d", c.id)
		} else {
			Errorf("reply Message: Unable to signal an error of reception over the communication channel %d", c.id)
		}
	}
}
 07070100000C72000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/vmware/vmw-guestinfo/rpcout 07070100000C73000081A4000000000000000000000001645E367C000008C6000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/vmware/vmw-guestinfo/rpcout/rpcout.go   // Copyright 2016 VMware, Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package rpcout

import (
	"errors"
	"fmt"

	"github.com/vmware/vmw-guestinfo/message"
)

// ErrRpciFormat represents an invalid result format
var ErrRpciFormat = errors.New("invalid format for RPCI command result")

const rpciProtocolNum uint32 = 0x49435052

// SendOne is a command-oriented wrapper for SendOneRaw
func SendOne(format string, a ...interface{}) (reply []byte, ok bool, err error) {
	request := fmt.Sprintf(format, a...)
	return SendOneRaw([]byte(request))
}

// SendOneRaw uses a throw-away RPCOut to send a request
func SendOneRaw(request []byte) (reply []byte, ok bool, err error) {
	out := &RPCOut{}
	if err = out.Start(); err != nil {
		return
	}
	if reply, ok, err = out.Send(request); err != nil {
		return
	}
	if err = out.Stop(); err != nil {
		return
	}
	return
}

// RPCOut is an ougoing connection from the VM to the hypervisor
type RPCOut struct {
	channel *message.Channel
}

// Start opens the connection
func (out *RPCOut) Start() error {
	channel, err := message.NewChannel(rpciProtocolNum)
	if err != nil {
		return err
	}
	out.channel = channel
	return nil
}

// Stop closes the connection
func (out *RPCOut) Stop() error {
	err := out.channel.Close()
	out.channel = nil
	return err
}

// Send emits a request and receives a response
func (out *RPCOut) Send(request []byte) (reply []byte, ok bool, err error) {
	if err = out.channel.Send(request); err != nil {
		return
	}

	var resp []byte
	if resp, err = out.channel.Receive(); err != nil {
		return
	}

	switch string(resp[:2]) {
	case "0 ":
		reply = resp[2:]
	case "1 ":
		reply = resp[2:]
		ok = true
	default:
		err = ErrRpciFormat
	}
	return
}
  07070100000C74000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/vmware/vmw-guestinfo/rpcvmx 07070100000C75000081A4000000000000000000000001645E367C00000A5C000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/github.com/vmware/vmw-guestinfo/rpcvmx/rpcvmx.go   // Copyright 2016 VMware, Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package rpcvmx

import (
	"fmt"
	"strconv"
	"strings"

	"github.com/vmware/vmw-guestinfo/rpcout"
)

const (
	prefix = "guestinfo"
)

// Config gives access to the vmx config through the VMware backdoor
type Config struct{}

// NewConfig creates a new Config object
func NewConfig() *Config {
	return &Config{}
}

// String returns the config string in the guestinfo.* namespace
func (c *Config) String(key string, defaultValue string) (string, error) {
	// add "guestinfo." prefix if missing
	if !strings.HasPrefix(key, prefix) {
		key = fmt.Sprintf("%s.%s", prefix, key)
	}

	out, ok, err := rpcout.SendOne("info-get %s", key)
	if err != nil {
		return "", err
	} else if !ok {
		return defaultValue, nil
	}
	return string(out), nil
}

// Bool returns the config boolean in the guestinfo.* namespace
func (c *Config) Bool(key string, defaultValue bool) (bool, error) {
	val, err := c.String(key, fmt.Sprintf("%t", defaultValue))
	if err != nil {
		return false, err
	}
	res, err := strconv.ParseBool(val)
	if err != nil {
		return defaultValue, nil
	}
	return res, nil
}

// Int returns the config integer in the guestinfo.* namespace
func (c *Config) Int(key string, defaultValue int) (int, error) {
	val, err := c.String(key, "")
	if err != nil {
		return 0, err
	}
	res, err := strconv.Atoi(val)
	if err != nil {
		return defaultValue, nil
	}
	return res, nil
}

// SetString sets the guestinfo.KEY with the string VALUE
func (c *Config) SetString(key string, value string) error {
	// add "guestinfo." prefix if missing
	if !strings.HasPrefix(key, prefix) {
		key = fmt.Sprintf("%s.%s", prefix, key)
	}

	_, _, err := rpcout.SendOne("info-set %s %s", key, value)
	if err != nil {
		return err
	}
	return nil
}

// SetString sets the guestinfo.KEY with the bool VALUE
func (c *Config) SetBool(key string, value bool) error {
	return c.SetString(key, strconv.FormatBool(value))
}

// SetString sets the guestinfo.KEY with the int VALUE
func (c *Config) SetInt(key string, value int) error {
	return c.SetString(key, strconv.Itoa(value))
}
07070100000C76000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/github.com/vmware/vmw-guestinfo/vmcheck    07070100000C77000081A4000000000000000000000001645E367C00000E2F000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/github.com/vmware/vmw-guestinfo/vmcheck/vmcheck.go // Copyright 2016-2017 VMware, Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

//go:generate go run asm.go -out vmcheck_amd64.s -arch amd64
//go:generate go run asm.go -out vmcheck_386.s -arch 386

package vmcheck

import (
	"encoding/binary"

	"github.com/vmware/vmw-guestinfo/bdoor"
)

type platform struct {
	cpuid       func(uint32, uint32) (uint32, uint32, uint32, uint32)
	accessPorts func() error
	knock       func() (bool, error)
}

var defaultPlatform = &platform{
	cpuid:       cpuid_low,
	accessPorts: openPortsAccess,
	knock:       bdoorKnock,
}

// From https://github.com/intel-go/cpuid/blob/master/cpuidlow_amd64.s
// Get the CPU ID low level leaf values.
func cpuid_low(arg1, arg2 uint32) (eax, ebx, ecx, edx uint32)

func bdoorKnock() (bool, error) {
	bp := &bdoor.BackdoorProto{}

	bp.CX.AsUInt32().SetWord(bdoor.CommandGetVersion)
	out := bp.InOut()
	// if there is no device, we get back all 1s
	return (0xffffffff != out.AX.AsUInt32().Word()) && (0 != out.AX.AsUInt32().Word()), nil
}

func (p *platform) isVirtualWorld(ignoreAccessErrors bool) (bool, error) {
	// Test the HV bit is set
	if !p.isVirtualCPU() {
		return false, nil
	}

	// Test if backdoor port is available.
	return p.hypervisorPortCheck(ignoreAccessErrors)
}

func (p *platform) isVirtualCPU() bool {
	HV := uint32(1 << 31)
	_, _, c, _ := p.cpuid(0x1, 0)
	if (c & HV) != HV {
		return false
	}

	_, b, c, d := p.cpuid(0x40000000, 0)

	buf := make([]byte, 12)
	binary.LittleEndian.PutUint32(buf, b)
	binary.LittleEndian.PutUint32(buf[4:], c)
	binary.LittleEndian.PutUint32(buf[8:], d)

	if string(buf) != "VMwareVMware" {
		return false
	}

	return true
}

// hypervisorPortCheck tests the availability of the backdoor port
// to the hypervisor, opportunistically tweaking I/O access level first.
func (p *platform) hypervisorPortCheck(ignoreAccessErrors bool) (bool, error) {
	// Privilege level 3 to access all ports above 0x3ff
	if err := p.accessPorts(); err != nil && !ignoreAccessErrors {
		return false, err
	}

	return p.knock()
}

// IsVirtualCPU checks if the cpu is a virtual CPU running on ESX.  It checks for
// the HV bit in the ECX register of the CPUID leaf 0x1.  Intel and AMD CPUs
// reserve this bit to indicate if the CPU is running in a HV. See
// https://en.wikipedia.org/wiki/CPUID#EAX.3D1:_Processor_Info_and_Feature_Bits
// for details.  If this bit is set, the reserved cpuid levels are used to pass
// information from the HV to the guest.  In ESX, this is the repeating string
// "VMwareVMware".
func IsVirtualCPU() bool {
	return defaultPlatform.isVirtualCPU()
}

// isVirtualWorld returns `true` if running in a VM and the backdoor is available.
// It also tries to elevate I/O privileges for the calling thread, which in
// some cases may be forbidden by the system (e.g Linux in `kernel_lockdown` mode
// does not allow `iopl` calls); the `ignoreAccessErrors` parameter allows
// to control library behavior in order to treat such errors as non-fatal.
func IsVirtualWorld(ignoreAccessErrors bool) (bool, error) {
	return defaultPlatform.isVirtualWorld(ignoreAccessErrors)
}
 07070100000C78000081A4000000000000000000000001645E367C000001E2000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/github.com/vmware/vmw-guestinfo/vmcheck/vmcheck_386.s  // Code generated by command: go run asm.go -out vmcheck_386.s -arch 386. DO NOT EDIT.
// +build gc

#include "textflag.h"

// func cpuid_low(arg1 uint32, arg2 uint32) (eax uint32, ebx uint32, ecx uint32, edx uint32)
// Requires: CPUID
TEXT ·cpuid_low(SB), NOSPLIT, $0-24
	// From https://github.com/intel-go/cpuid/blob/master/cpuidlow_amd64.s
	MOVL arg1+0(FP), AX
	MOVL arg2+4(FP), CX
	CPUID
	MOVL AX, eax+8(FP)
	MOVL BX, ebx+12(FP)
	MOVL CX, ecx+16(FP)
	MOVL DX, edx+20(FP)
	RET
  07070100000C79000081A4000000000000000000000001645E367C000001E7000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/github.com/vmware/vmw-guestinfo/vmcheck/vmcheck_amd64.s    // Code generated by command: go run asm.go -out vmcheck_amd64.s -arch amd64. DO NOT EDIT.

// +build gc

#include "textflag.h"

// func cpuid_low(arg1 uint32, arg2 uint32) (eax uint32, ebx uint32, ecx uint32, edx uint32)
// Requires: CPUID
TEXT ·cpuid_low(SB), NOSPLIT, $0-24
	// From https://github.com/intel-go/cpuid/blob/master/cpuidlow_amd64.s
	MOVL arg1+0(FP), AX
	MOVL arg2+4(FP), CX
	CPUID
	MOVL AX, eax+8(FP)
	MOVL BX, ebx+12(FP)
	MOVL CX, ecx+16(FP)
	MOVL DX, edx+20(FP)
	RET
 07070100000C7A000081A4000000000000000000000001645E367C00000330000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/github.com/vmware/vmw-guestinfo/vmcheck/vmcheck_general.go // Copyright 2016-2017 VMware, Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// +build !linux

package vmcheck

// probably not gonna work. Instead, implement a platform-specific variant, and
// add the platform to above build flags
func openPortsAccess() error {
	return nil
}
07070100000C7B000081A4000000000000000000000001645E367C000002F9000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/github.com/vmware/vmw-guestinfo/vmcheck/vmcheck_linux.go   // Copyright 2016-2017 VMware, Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package vmcheck

import "syscall"

func openPortsAccess() error {
	// Privilege level 3 to access all ports above 0x3ff
	return syscall.Iopl(3)
}
   07070100000C7C000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003300000000elemental-cli-0.3.1/vendor/github.com/willdonnelly    07070100000C7D000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/github.com/willdonnelly/passwd 07070100000C7E000081A4000000000000000000000001645E367C000001BC000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/willdonnelly/passwd/README  > godoc github.com/willdonnelly/passwd

PACKAGE

package passwd
    import "github.com/willdonnelly/passwd"


FUNCTIONS

func Parse() (map[string]Entry, error)
    Parse opens the '/etc/passwd' file and parses it into a map from
    usernames to Entries


TYPES

type Entry struct {
    Pass  string
    Uid   string
    Gid   string
    Gecos string
    Home  string
    Shell string
}
    An Entry contains all the fields for a specific user
07070100000C7F000081A4000000000000000000000001645E367C000005DE000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/github.com/willdonnelly/passwd/passwd.go   // Package passwd parsed content and files in form of /etc/passwd
package passwd

import (
	"bufio"
	"errors"
	"io"
	"os"
	"strings"
)

// An Entry contains all the fields for a specific user
type Entry struct {
	Pass  string
	Uid   string
	Gid   string
	Gecos string
	Home  string
	Shell string
}

// Parse opens the '/etc/passwd' file and parses it into a map from usernames
// to Entries
func Parse() (map[string]Entry, error) {
	return ParseFile("/etc/passwd")
}

// ParseFile opens the file and parses it into a map from usernames to Entries
func ParseFile(path string) (map[string]Entry, error) {
	file, err := os.Open(path)
	if err != nil {
		return nil, err
	}

	defer file.Close()

	return ParseReader(file)
}

// ParseReader consumes the contents of r and parses it into a map from
// usernames to Entries
func ParseReader(r io.Reader) (map[string]Entry, error) {
	lines := bufio.NewReader(r)
	entries := make(map[string]Entry)
	for {
		line, _, err := lines.ReadLine()
		if err != nil {
			break
		}
		name, entry, err := parseLine(string(copyBytes(line)))
		if err != nil {
			return nil, err
		}
		entries[name] = entry
	}
	return entries, nil
}

func parseLine(line string) (string, Entry, error) {
	fs := strings.Split(line, ":")
	if len(fs) != 7 {
		return "", Entry{}, errors.New("Unexpected number of fields in /etc/passwd")
	}
	return fs[0], Entry{fs[1], fs[2], fs[3], fs[4], fs[5], fs[6]}, nil
}

func copyBytes(x []byte) []byte {
	y := make([]byte, len(x))
	copy(y, x)
	return y
}
  07070100000C80000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002C00000000elemental-cli-0.3.1/vendor/github.com/xanzy   07070100000C81000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/github.com/xanzy/ssh-agent 07070100000C82000081A4000000000000000000000001645E367C0000010A000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/xanzy/ssh-agent/.gitignore  # Compiled Object files, Static and Dynamic libs (Shared Objects)
*.o
*.a
*.so

# Folders
_obj
_test

# Architecture specific extensions/prefixes
*.[568vq]
[568vq].out

*.cgo1.go
*.cgo2.c
_cgo_defun.c
_cgo_gotypes.go
_cgo_export.*

_testmain.go

*.exe
*.test
*.prof
  07070100000C83000081A4000000000000000000000001645E367C00002C5E000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/xanzy/ssh-agent/LICENSE                                  Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "{}"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright {yyyy} {name of copyright owner}

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

  07070100000C84000081A4000000000000000000000001645E367C0000042E000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/xanzy/ssh-agent/README.md   # ssh-agent

Create a new [agent.Agent](https://godoc.org/golang.org/x/crypto/ssh/agent#Agent) on any type of OS (so including Windows) from any [Go](https://golang.org) application.

## Limitations

When compiled for Windows, it will only support [Pageant](http://the.earth.li/~sgtatham/putty/0.66/htmldoc/Chapter9.html#pageant) as the SSH authentication agent.

## Credits

Big thanks to [Давид Мзареулян (David Mzareulyan)](https://github.com/davidmz) for creating the [go-pageant](https://github.com/davidmz/go-pageant) package!

## Issues

If you have an issue: report it on the [issue tracker](https://github.com/xanzy/ssh-agent/issues)

## Author

Sander van Harmelen (<sander@vanharmelen.nl>)

## License

The files `pageant_windows.go` and `sshagent_windows.go` have their own license (see file headers). The rest of this package is licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at <http://www.apache.org/licenses/LICENSE-2.0>
  07070100000C85000081A4000000000000000000000001645E367C00001035000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/xanzy/ssh-agent/pageant_windows.go  //
// Copyright (c) 2014 David Mzareulyan
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software
// and associated documentation files (the "Software"), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge, publish, distribute,
// sublicense, and/or sell copies of the Software, and to permit persons to whom the Software
// is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or substantial
// portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//

// +build windows

package sshagent

// see https://github.com/Yasushi/putty/blob/master/windows/winpgntc.c#L155
// see https://github.com/paramiko/paramiko/blob/master/paramiko/win_pageant.py

import (
	"encoding/binary"
	"errors"
	"fmt"
	"sync"
	"syscall"
	"unsafe"
)

// Maximum size of message can be sent to pageant
const MaxMessageLen = 8192

var (
	ErrPageantNotFound = errors.New("pageant process not found")
	ErrSendMessage     = errors.New("error sending message")

	ErrMessageTooLong       = errors.New("message too long")
	ErrInvalidMessageFormat = errors.New("invalid message format")
	ErrResponseTooLong      = errors.New("response too long")
)

const (
	agentCopydataID = 0x804e50ba
	wmCopydata      = 74
)

type copyData struct {
	dwData uintptr
	cbData uint32
	lpData unsafe.Pointer
}

var (
	lock sync.Mutex

	winFindWindow         = winAPI("user32.dll", "FindWindowW")
	winGetCurrentThreadID = winAPI("kernel32.dll", "GetCurrentThreadId")
	winSendMessage        = winAPI("user32.dll", "SendMessageW")
)

func winAPI(dllName, funcName string) func(...uintptr) (uintptr, uintptr, error) {
	proc := syscall.MustLoadDLL(dllName).MustFindProc(funcName)
	return func(a ...uintptr) (uintptr, uintptr, error) { return proc.Call(a...) }
}

// Query sends message msg to Pageant and returns response or error.
// 'msg' is raw agent request with length prefix
// Response is raw agent response with length prefix
func query(msg []byte) ([]byte, error) {
	if len(msg) > MaxMessageLen {
		return nil, ErrMessageTooLong
	}

	msgLen := binary.BigEndian.Uint32(msg[:4])
	if len(msg) != int(msgLen)+4 {
		return nil, ErrInvalidMessageFormat
	}

	lock.Lock()
	defer lock.Unlock()

	paWin := pageantWindow()

	if paWin == 0 {
		return nil, ErrPageantNotFound
	}

	thID, _, _ := winGetCurrentThreadID()
	mapName := fmt.Sprintf("PageantRequest%08x", thID)
	pMapName, _ := syscall.UTF16PtrFromString(mapName)

	mmap, err := syscall.CreateFileMapping(syscall.InvalidHandle, nil, syscall.PAGE_READWRITE, 0, MaxMessageLen+4, pMapName)
	if err != nil {
		return nil, err
	}
	defer syscall.CloseHandle(mmap)

	ptr, err := syscall.MapViewOfFile(mmap, syscall.FILE_MAP_WRITE, 0, 0, 0)
	if err != nil {
		return nil, err
	}
	defer syscall.UnmapViewOfFile(ptr)

	mmSlice := (*(*[MaxMessageLen]byte)(unsafe.Pointer(ptr)))[:]

	copy(mmSlice, msg)

	mapNameBytesZ := append([]byte(mapName), 0)

	cds := copyData{
		dwData: agentCopydataID,
		cbData: uint32(len(mapNameBytesZ)),
		lpData: unsafe.Pointer(&(mapNameBytesZ[0])),
	}

	resp, _, _ := winSendMessage(paWin, wmCopydata, 0, uintptr(unsafe.Pointer(&cds)))

	if resp == 0 {
		return nil, ErrSendMessage
	}

	respLen := binary.BigEndian.Uint32(mmSlice[:4])
	if respLen > MaxMessageLen-4 {
		return nil, ErrResponseTooLong
	}

	respData := make([]byte, respLen+4)
	copy(respData, mmSlice)

	return respData, nil
}

func pageantWindow() uintptr {
	nameP, _ := syscall.UTF16PtrFromString("Pageant")
	h, _, _ := winFindWindow(uintptr(unsafe.Pointer(nameP)), uintptr(unsafe.Pointer(nameP)))
	return h
}
   07070100000C86000081A4000000000000000000000001645E367C000004FD000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/xanzy/ssh-agent/sshagent.go //
// Copyright 2015, Sander van Harmelen
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

// +build !windows

package sshagent

import (
	"errors"
	"fmt"
	"net"
	"os"

	"golang.org/x/crypto/ssh/agent"
)

// New returns a new agent.Agent that uses a unix socket
func New() (agent.Agent, net.Conn, error) {
	if !Available() {
		return nil, nil, errors.New("SSH agent requested but SSH_AUTH_SOCK not-specified")
	}

	sshAuthSock := os.Getenv("SSH_AUTH_SOCK")

	conn, err := net.Dial("unix", sshAuthSock)
	if err != nil {
		return nil, nil, fmt.Errorf("Error connecting to SSH_AUTH_SOCK: %v", err)
	}

	return agent.NewClient(conn), conn, nil
}

// Available returns true is a auth socket is defined
func Available() bool {
	return os.Getenv("SSH_AUTH_SOCK") != ""
}
   07070100000C87000081A4000000000000000000000001645E367C000009D1000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/github.com/xanzy/ssh-agent/sshagent_windows.go //
// Copyright (c) 2014 David Mzareulyan
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software
// and associated documentation files (the "Software"), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge, publish, distribute,
// sublicense, and/or sell copies of the Software, and to permit persons to whom the Software
// is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or substantial
// portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//

// +build windows

package sshagent

import (
	"errors"
	"io"
	"net"
	"sync"

	"github.com/Microsoft/go-winio"
	"golang.org/x/crypto/ssh/agent"
)

const (
	sshAgentPipe = `\\.\pipe\openssh-ssh-agent`
)

// Available returns true if Pageant is running
func Available() bool {
	if pageantWindow() != 0 {
		return true
	}
	conn, err := winio.DialPipe(sshAgentPipe, nil)
	if err != nil {
		return false
	}
	conn.Close()
	return true
}

// New returns a new agent.Agent and the (custom) connection it uses
// to communicate with a running pagent.exe instance (see README.md)
func New() (agent.Agent, net.Conn, error) {
	if pageantWindow() != 0 {
		return agent.NewClient(&conn{}), nil, nil
	}
	conn, err := winio.DialPipe(sshAgentPipe, nil)
	if err != nil {
		return nil, nil, errors.New(
			"SSH agent requested, but could not detect Pageant or Windows native SSH agent",
		)
	}
	return agent.NewClient(conn), nil, nil
}

type conn struct {
	sync.Mutex
	buf []byte
}

func (c *conn) Close() {
	c.Lock()
	defer c.Unlock()
	c.buf = nil
}

func (c *conn) Write(p []byte) (int, error) {
	c.Lock()
	defer c.Unlock()

	resp, err := query(p)
	if err != nil {
		return 0, err
	}

	c.buf = append(c.buf, resp...)

	return len(p), nil
}

func (c *conn) Read(p []byte) (int, error) {
	c.Lock()
	defer c.Unlock()

	if len(c.buf) == 0 {
		return 0, io.EOF
	}

	n := copy(p, c.buf)
	c.buf = c.buf[n:]

	return n, nil
}
   07070100000C88000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002F00000000elemental-cli-0.3.1/vendor/github.com/zcalusic    07070100000C89000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/github.com/zcalusic/sysinfo    07070100000C8A000081A4000000000000000000000001645E367C0000043B000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/zcalusic/sysinfo/LICENSE    The MIT License (MIT)

Copyright © 2016 Zlatko Čalušić

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
 07070100000C8B000081A4000000000000000000000001645E367C000016E6000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/zcalusic/sysinfo/README.md  # Sysinfo

[![Build Status](https://travis-ci.org/zcalusic/sysinfo.svg?branch=master)](https://travis-ci.org/zcalusic/sysinfo)
[![Go Report Card](https://goreportcard.com/badge/github.com/zcalusic/sysinfo)](https://goreportcard.com/report/github.com/zcalusic/sysinfo)
[![GoDoc](https://godoc.org/github.com/zcalusic/sysinfo?status.svg)](https://godoc.org/github.com/zcalusic/sysinfo)
[![License](https://img.shields.io/badge/license-MIT-a31f34.svg?maxAge=2592000)](https://github.com/zcalusic/sysinfo/blob/master/LICENSE)
[![Powered by](https://img.shields.io/badge/powered_by-Go-5272b4.svg?maxAge=2592000)](https://golang.org/)
[![Platform](https://img.shields.io/badge/platform-Linux-009bde.svg?maxAge=2592000)](https://www.linuxfoundation.org/)

Package sysinfo is a Go library providing Linux OS / kernel / hardware system information. It's completely standalone,
has no dependencies on the host system, doesn't execute external programs, doesn't even import other Go libraries. It
collects only "inventory type" information, things that don't change often.

## Code Example

```go
package main

import (
	"encoding/json"
	"fmt"
	"log"
	"os/user"

	"github.com/zcalusic/sysinfo"
)

func main() {
	current, err := user.Current()
	if err != nil {
		log.Fatal(err)
	}

	if current.Uid != "0" {
		log.Fatal("requires superuser privilege")
	}

	var si sysinfo.SysInfo

	si.GetSysInfo()

	data, err := json.MarshalIndent(&si, "", "  ")
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println(string(data))
}
```

## Motivation

I couldn't find any self-contained library that would provide set of data/features I needed. So another sysinfo was
born.

The purpose of the library is to collect only inventory info. No metrics like CPU usage or load average will be added.
The rule of thumb is, if it's changing during the day, every day, it doesn't belong in the library.

The library should work well on any modern/supported Linux distribution. There are no plans to add support for older
unsupported Linux distributions/kernels, to keep the code clean and robust and reduce the maintenance burden.

## Requirements

Sysinfo requires:

- Linux kernel 4.2 or later
- access to /sys & /proc Linux virtual file systems
- access to various files in /etc, /var, /run FS hierarchy
- superuser privileges (to access SMBIOS/DMI table and detect RAM size and properties)

Sysinfo doesn't require ANY other external utility on the target system, which is its primary strength, IMHO.

It depends on Linux internals heavily, so there are no plans to support other operating systems.

## Installation

Just use go get.

```
go get github.com/zcalusic/sysinfo
```

There's also a very simple utility demonstrating sysinfo library capabilities. Start it (as superuser) to get pretty
formatted JSON output of all the info that sysinfo library provides. Due to its simplicity, the source code of the
utility also doubles down as an example of how to use the library.

```
go get github.com/zcalusic/sysinfo/cmd/sysinfo
```

--

Build demo utility in Docker container:  https://github.com/mattscilipoti/compile_sysinfo

## Sample output

```json
{
  "sysinfo": {
    "version": "0.9.1",
    "timestamp": "2016-09-24T13:30:28.369498856+02:00"
  },
  "node": {
    "hostname": "web12",
    "machineid": "04aa55927ebd390829367c1757b98cac",
    "timezone": "Europe/Zagreb"
  },
  "os": {
    "name": "CentOS Linux 7 (Core)",
    "vendor": "centos",
    "version": "7",
    "release": "7.2.1511",
    "architecture": "amd64"
  },
  "kernel": {
    "release": "3.10.0-327.13.1.el7.x86_64",
    "version": "#1 SMP Thu Mar 31 16:04:38 UTC 2016",
    "architecture": "x86_64"
  },
  "product": {
    "name": "RH2288H V3",
    "vendor": "Huawei",
    "version": "V100R003",
    "serial": "2103711GEL10F3430658"
  },
  "board": {
    "name": "BC11HGSA0",
    "vendor": "Huawei",
    "version": "V100R003",
    "serial": "033HXVCNG3107624"
  },
  "chassis": {
    "type": 17,
    "vendor": "Huawei"
  },
  "bios": {
    "vendor": "Insyde Corp.",
    "version": "3.16",
    "date": "03/16/2016"
  },
  "cpu": {
    "vendor": "GenuineIntel",
    "model": "Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz",
    "speed": 2400,
    "cache": 20480,
    "cpus": 1,
    "cores": 8,
    "threads": 16
  },
  "memory": {
    "type": "DRAM",
    "speed": 2133,
    "size": 65536
  },
  "storage": [
    {
      "name": "sda",
      "driver": "sd",
      "vendor": "ATA",
      "model": "ST9500620NS",
      "serial": "9XF2HZ9K",
      "size": 500
    }
  ],
  "network": [
    {
      "name": "enp3s0f1",
      "driver": "ixgbe",
      "macaddress": "84:ad:5a:e3:79:71",
      "port": "fibre",
      "speed": 10000
    }
  ]
}
```

## Contributors

Contributors are welcome, just open a new issue / pull request.

## License

```
The MIT License (MIT)

Copyright © 2016 Zlatko Čalušić

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
  07070100000C8C000081A4000000000000000000000001645E367C00000224000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/zcalusic/sysinfo/bios.go    // Copyright © 2016 Zlatko Čalušić
//
// Use of this source code is governed by an MIT-style license that can be found in the LICENSE file.

package sysinfo

// BIOS information.
type BIOS struct {
	Vendor  string `json:"vendor,omitempty"`
	Version string `json:"version,omitempty"`
	Date    string `json:"date,omitempty"`
}

func (si *SysInfo) getBIOSInfo() {
	si.BIOS.Vendor = slurpFile("/sys/class/dmi/id/bios_vendor")
	si.BIOS.Version = slurpFile("/sys/class/dmi/id/bios_version")
	si.BIOS.Date = slurpFile("/sys/class/dmi/id/bios_date")
}
07070100000C8D000081A4000000000000000000000001645E367C0000030B000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/zcalusic/sysinfo/board.go   // Copyright © 2016 Zlatko Čalušić
//
// Use of this source code is governed by an MIT-style license that can be found in the LICENSE file.

package sysinfo

// Board information.
type Board struct {
	Name     string `json:"name,omitempty"`
	Vendor   string `json:"vendor,omitempty"`
	Version  string `json:"version,omitempty"`
	Serial   string `json:"serial,omitempty"`
	AssetTag string `json:"assettag,omitempty"`
}

func (si *SysInfo) getBoardInfo() {
	si.Board.Name = slurpFile("/sys/class/dmi/id/board_name")
	si.Board.Vendor = slurpFile("/sys/class/dmi/id/board_vendor")
	si.Board.Version = slurpFile("/sys/class/dmi/id/board_version")
	si.Board.Serial = slurpFile("/sys/class/dmi/id/board_serial")
	si.Board.AssetTag = slurpFile("/sys/class/dmi/id/board_asset_tag")
}
 07070100000C8E000081A4000000000000000000000001645E367C00000384000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/zcalusic/sysinfo/chassis.go // Copyright © 2016 Zlatko Čalušić
//
// Use of this source code is governed by an MIT-style license that can be found in the LICENSE file.

package sysinfo

import "strconv"

// Chassis information.
type Chassis struct {
	Type     uint   `json:"type,omitempty"`
	Vendor   string `json:"vendor,omitempty"`
	Version  string `json:"version,omitempty"`
	Serial   string `json:"serial,omitempty"`
	AssetTag string `json:"assettag,omitempty"`
}

func (si *SysInfo) getChassisInfo() {
	if chtype, err := strconv.ParseUint(slurpFile("/sys/class/dmi/id/chassis_type"), 10, 64); err == nil {
		si.Chassis.Type = uint(chtype)
	}
	si.Chassis.Vendor = slurpFile("/sys/class/dmi/id/chassis_vendor")
	si.Chassis.Version = slurpFile("/sys/class/dmi/id/chassis_version")
	si.Chassis.Serial = slurpFile("/sys/class/dmi/id/chassis_serial")
	si.Chassis.AssetTag = slurpFile("/sys/class/dmi/id/chassis_asset_tag")
}
07070100000C8F000081A4000000000000000000000001645E367C0000092D000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/zcalusic/sysinfo/cpu.go // Copyright © 2016 Zlatko Čalušić
//
// Use of this source code is governed by an MIT-style license that can be found in the LICENSE file.

package sysinfo

import (
	"bufio"
	"fmt"
	"os"
	"regexp"
	"runtime"
	"strconv"
	"strings"
)

// CPU information.
type CPU struct {
	Vendor  string `json:"vendor,omitempty"`
	Model   string `json:"model,omitempty"`
	Speed   uint   `json:"speed,omitempty"`   // CPU clock rate in MHz
	Cache   uint   `json:"cache,omitempty"`   // CPU cache size in KB
	Cpus    uint   `json:"cpus,omitempty"`    // number of physical CPUs
	Cores   uint   `json:"cores,omitempty"`   // number of physical CPU cores
	Threads uint   `json:"threads,omitempty"` // number of logical (HT) CPU cores
}

var (
	reTwoColumns = regexp.MustCompile("\t+: ")
	reExtraSpace = regexp.MustCompile(" +")
	reCacheSize  = regexp.MustCompile(`^(\d+) KB$`)
)

func (si *SysInfo) getCPUInfo() {
	si.CPU.Threads = uint(runtime.NumCPU())

	f, err := os.Open("/proc/cpuinfo")
	if err != nil {
		return
	}
	defer f.Close()

	cpu := make(map[string]bool)
	core := make(map[string]bool)

	var cpuID string

	s := bufio.NewScanner(f)
	for s.Scan() {
		if sl := reTwoColumns.Split(s.Text(), 2); sl != nil {
			switch sl[0] {
			case "physical id":
				cpuID = sl[1]
				cpu[cpuID] = true
			case "core id":
				coreID := fmt.Sprintf("%s/%s", cpuID, sl[1])
				core[coreID] = true
			case "vendor_id":
				if si.CPU.Vendor == "" {
					si.CPU.Vendor = sl[1]
				}
			case "model name":
				if si.CPU.Model == "" {
					// CPU model, as reported by /proc/cpuinfo, can be a bit ugly. Clean up...
					model := reExtraSpace.ReplaceAllLiteralString(sl[1], " ")
					si.CPU.Model = strings.Replace(model, "- ", "-", 1)
				}
			case "cache size":
				if si.CPU.Cache == 0 {
					if m := reCacheSize.FindStringSubmatch(sl[1]); m != nil {
						if cache, err := strconv.ParseUint(m[1], 10, 64); err == nil {
							si.CPU.Cache = uint(cache)
						}
					}
				}
			}
		}
	}
	if s.Err() != nil {
		return
	}

	// getNodeInfo() must have run first, to detect if we're dealing with a virtualized CPU! Detecting number of
	// physical processors and/or cores is totally unreliable in virtualized environments, so let's not do it.
	if si.Node.Hostname == "" || si.Node.Hypervisor != "" {
		return
	}

	si.CPU.Cpus = uint(len(cpu))
	si.CPU.Cores = uint(len(core))
}
   07070100000C90000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/zcalusic/sysinfo/cpuid  07070100000C91000081A4000000000000000000000001645E367C000005C7000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/zcalusic/sysinfo/cpuid/LICENSE  Copyright (c) 2009 The Go Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 07070100000C92000081A4000000000000000000000001645E367C00000144000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/github.com/zcalusic/sysinfo/cpuid/cpuid.go // Copyright © 2018 Zlatko Čalušić
//
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.

// Package cpuid gives Go programs access to CPUID opcode.
package cpuid

// CPUID returns processor identification and feature information.
func CPUID(info *[4]uint32, ax uint32)
07070100000C93000081A4000000000000000000000001645E367C0000013E000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/github.com/zcalusic/sysinfo/cpuid/cpuid_386.s  // Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build !gccgo

TEXT ·CPUID(SB),$0-8
	MOVL ax+4(FP), AX
	CPUID
	MOVL info+0(FP), DI
	MOVL AX, 0(DI)
	MOVL BX, 4(DI)
	MOVL CX, 8(DI)
	MOVL DX, 12(DI)
	RET

  07070100000C94000081A4000000000000000000000001645E367C0000013F000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/github.com/zcalusic/sysinfo/cpuid/cpuid_amd64.s    // Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build !gccgo

TEXT ·CPUID(SB),$0-12
	MOVL ax+8(FP), AX
	CPUID
	MOVQ info+0(FP), DI
	MOVL AX, 0(DI)
	MOVL BX, 4(DI)
	MOVL CX, 8(DI)
	MOVL DX, 12(DI)
	RET

 07070100000C95000081A4000000000000000000000001645E367C000000F8000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/github.com/zcalusic/sysinfo/cpuid/cpuid_default.s  // Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build !386,!amd64,!gccgo

#include "textflag.h"

TEXT ·CPUID(SB),NOSPLIT,$0-0
	RET
07070100000C96000081A4000000000000000000000001645E367C00000604000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/github.com/zcalusic/sysinfo/hypervisor.go  // Copyright © 2016 Zlatko Čalušić
//
// Use of this source code is governed by an MIT-style license that can be found in the LICENSE file.

package sysinfo

import (
	"strings"
	"unsafe"

	"github.com/zcalusic/sysinfo/cpuid"
)

// https://en.wikipedia.org/wiki/CPUID#EAX.3D0:_Get_vendor_ID
var hvmap = map[string]string{
	"bhyve bhyve ": "bhyve",
	"KVMKVMKVM":    "kvm",
	"Microsoft Hv": "hyperv",
	" lrpepyh vr":  "parallels",
	"VMwareVMware": "vmware",
	"XenVMMXenVMM": "xenhvm",
}

func isHypervisorActive() bool {
	var info [4]uint32
	cpuid.CPUID(&info, 0x1)
	return info[2]&(1<<31) != 0
}

func getHypervisorCpuid(ax uint32) string {
	var info [4]uint32
	cpuid.CPUID(&info, ax)
	return hvmap[strings.TrimRight(string((*[12]byte)(unsafe.Pointer(&info[1]))[:]), "\000")]
}

func (si *SysInfo) getHypervisor() {
	if !isHypervisorActive() {
		if hypervisorType := slurpFile("/sys/hypervisor/type"); hypervisorType != "" {
			if hypervisorType == "xen" {
				si.Node.Hypervisor = "xenpv"
			}
		}
		return
	}

	// KVM has been caught to move its real signature to this leaf, and put something completely different in the
	// standard location. So this leaf must be checked first.
	if hv := getHypervisorCpuid(0x40000100); hv != "" {
		si.Node.Hypervisor = hv
		return
	}

	if hv := getHypervisorCpuid(0x40000000); hv != "" {
		si.Node.Hypervisor = hv
		return
	}

	// getBIOSInfo() must have run first, to detect BIOS vendor
	if si.BIOS.Vendor == "Bochs" {
		si.Node.Hypervisor = "bochs"
		return
	}

	si.Node.Hypervisor = "unknown"
}
07070100000C97000081A4000000000000000000000001645E367C000002F5000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/zcalusic/sysinfo/kernel.go  // Copyright © 2016 Zlatko Čalušić
//
// Use of this source code is governed by an MIT-style license that can be found in the LICENSE file.

package sysinfo

import (
	"strings"
	"syscall"
	"unsafe"
)

// Kernel information.
type Kernel struct {
	Release      string `json:"release,omitempty"`
	Version      string `json:"version,omitempty"`
	Architecture string `json:"architecture,omitempty"`
}

func (si *SysInfo) getKernelInfo() {
	si.Kernel.Release = slurpFile("/proc/sys/kernel/osrelease")
	si.Kernel.Version = slurpFile("/proc/sys/kernel/version")

	var uname syscall.Utsname
	if err := syscall.Uname(&uname); err != nil {
		return
	}

	si.Kernel.Architecture = strings.TrimRight(string((*[65]byte)(unsafe.Pointer(&uname.Machine))[:]), "\000")
}
   07070100000C98000081A4000000000000000000000001645E367C00000BCA000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/zcalusic/sysinfo/memory.go  // Copyright © 2016 Zlatko Čalušić
//
// Use of this source code is governed by an MIT-style license that can be found in the LICENSE file.

package sysinfo

import (
	"bytes"
	"encoding/binary"
	"io/ioutil"
	"strconv"
)

// Memory information.
type Memory struct {
	Type  string `json:"type,omitempty"`
	Speed uint   `json:"speed,omitempty"` // RAM data rate in MT/s
	Size  uint   `json:"size,omitempty"`  // RAM size in MB
}

func word(data []byte, index int) uint16 {
	return binary.LittleEndian.Uint16(data[index : index+2])
}

func dword(data []byte, index int) uint32 {
	return binary.LittleEndian.Uint32(data[index : index+4])
}

func qword(data []byte, index int) uint64 {
	return binary.LittleEndian.Uint64(data[index : index+8])
}

func (si *SysInfo) getMemoryInfo() {
	dmi, err := ioutil.ReadFile("/sys/firmware/dmi/tables/DMI")
	if err != nil {
		// Xen hypervisor
		if targetKB := slurpFile("/sys/devices/system/xen_memory/xen_memory0/target_kb"); targetKB != "" {
			si.Memory.Type = "DRAM"
			size, _ := strconv.ParseUint(targetKB, 10, 64)
			si.Memory.Size = uint(size) / 1024
		}
		return
	}

	si.Memory.Size = 0
	var memSizeAlt uint
loop:
	for p := 0; p < len(dmi)-1; {
		recType := dmi[p]
		recLen := dmi[p+1]

		switch recType {
		case 4:
			if si.CPU.Speed == 0 {
				si.CPU.Speed = uint(word(dmi, p+0x16))
			}
		case 17:
			size := uint(word(dmi, p+0x0c))
			if size == 0 || size == 0xffff || size&0x8000 == 0x8000 {
				break
			}
			if size == 0x7fff {
				if recLen >= 0x20 {
					size = uint(dword(dmi, p+0x1c))
				} else {
					break
				}
			}

			si.Memory.Size += size

			if si.Memory.Type == "" {
				// SMBIOS Reference Specification Version 3.0.0, page 92
				memTypes := [...]string{
					"Other", "Unknown", "DRAM", "EDRAM", "VRAM", "SRAM", "RAM", "ROM", "FLASH",
					"EEPROM", "FEPROM", "EPROM", "CDRAM", "3DRAM", "SDRAM", "SGRAM", "RDRAM",
					"DDR", "DDR2", "DDR2 FB-DIMM", "Reserved", "Reserved", "Reserved", "DDR3",
					"FBD2", "DDR4", "LPDDR", "LPDDR2", "LPDDR3", "LPDDR4",
				}

				if index := int(dmi[p+0x12]); index >= 1 && index <= len(memTypes) {
					si.Memory.Type = memTypes[index-1]
				}
			}

			if si.Memory.Speed == 0 && recLen >= 0x17 {
				if speed := uint(word(dmi, p+0x15)); speed != 0 {
					si.Memory.Speed = speed
				}
			}
		case 19:
			start := uint(dword(dmi, p+0x04))
			end := uint(dword(dmi, p+0x08))
			if start == 0xffffffff && end == 0xffffffff {
				if recLen >= 0x1f {
					start64 := qword(dmi, p+0x0f)
					end64 := qword(dmi, p+0x17)
					memSizeAlt += uint((end64 - start64 + 1) / 1048576)
				}
			} else {
				memSizeAlt += (end - start + 1) / 1024
			}
		case 127:
			break loop
		}

		for p += int(recLen); p < len(dmi)-1; {
			if bytes.Equal(dmi[p:p+2], []byte{0, 0}) {
				p += 2
				break
			}
			p++
		}
	}

	// Sometimes DMI type 17 has no information, so we fall back to DMI type 19, to at least get the RAM size.
	if si.Memory.Size == 0 && memSizeAlt > 0 {
		si.Memory.Type = "DRAM"
		si.Memory.Size = memSizeAlt
	}
}
  07070100000C99000081A4000000000000000000000001645E367C0000018A000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/zcalusic/sysinfo/meta.go    // Copyright © 2016 Zlatko Čalušić
//
// Use of this source code is governed by an MIT-style license that can be found in the LICENSE file.

package sysinfo

import "time"

// Meta information.
type Meta struct {
	Version   string    `json:"version"`
	Timestamp time.Time `json:"timestamp"`
}

func (si *SysInfo) getMetaInfo() {
	si.Meta.Version = Version
	si.Meta.Timestamp = time.Now()
}
  07070100000C9A000081A4000000000000000000000001645E367C00000C74000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/zcalusic/sysinfo/network.go // Copyright © 2016 Zlatko Čalušić
//
// Use of this source code is governed by an MIT-style license that can be found in the LICENSE file.

package sysinfo

import (
	"io/ioutil"
	"os"
	"path"
	"strings"
	"syscall"
	"unsafe"
)

// NetworkDevice information.
type NetworkDevice struct {
	Name       string `json:"name,omitempty"`
	Driver     string `json:"driver,omitempty"`
	MACAddress string `json:"macaddress,omitempty"`
	Port       string `json:"port,omitempty"`
	Speed      uint   `json:"speed,omitempty"` // device max supported speed in Mbps
}

func getPortType(supp uint32) (port string) {
	for i, p := range [...]string{"tp", "aui", "mii", "fibre", "bnc"} {
		if supp&(1<<uint(i+7)) > 0 {
			port += p + "/"
		}
	}

	port = strings.TrimRight(port, "/")
	return
}

func getMaxSpeed(supp uint32) (speed uint) {
	// Fancy, right?
	switch {
	case supp&0x78000000 > 0:
		speed = 56000
	case supp&0x07800000 > 0:
		speed = 40000
	case supp&0x00600000 > 0:
		speed = 20000
	case supp&0x001c1000 > 0:
		speed = 10000
	case supp&0x00008000 > 0:
		speed = 2500
	case supp&0x00020030 > 0:
		speed = 1000
	case supp&0x0000000c > 0:
		speed = 100
	case supp&0x00000003 > 0:
		speed = 10
	}

	return
}

func getSupported(name string) uint32 {
	fd, err := syscall.Socket(syscall.AF_INET, syscall.SOCK_DGRAM, syscall.IPPROTO_IP)
	if err != nil {
		return 0
	}
	defer syscall.Close(fd)

	// struct ethtool_cmd from /usr/include/linux/ethtool.h
	var ethtool struct {
		Cmd           uint32
		Supported     uint32
		Advertising   uint32
		Speed         uint16
		Duplex        uint8
		Port          uint8
		PhyAddress    uint8
		Transceiver   uint8
		Autoneg       uint8
		MdioSupport   uint8
		Maxtxpkt      uint32
		Maxrxpkt      uint32
		SpeedHi       uint16
		EthTpMdix     uint8
		Reserved2     uint8
		LpAdvertising uint32
		Reserved      [2]uint32
	}

	// ETHTOOL_GSET from /usr/include/linux/ethtool.h
	const GSET = 0x1

	ethtool.Cmd = GSET

	// struct ifreq from /usr/include/linux/if.h
	var ifr struct {
		Name [16]byte
		Data uintptr
	}

	copy(ifr.Name[:], name+"\000")
	ifr.Data = uintptr(unsafe.Pointer(&ethtool))

	// SIOCETHTOOL from /usr/include/linux/sockios.h
	const SIOCETHTOOL = 0x8946

	_, _, errno := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), uintptr(SIOCETHTOOL), uintptr(unsafe.Pointer(&ifr)))
	if errno == 0 {
		return ethtool.Supported
	}

	return 0
}

func (si *SysInfo) getNetworkInfo() {
	sysClassNet := "/sys/class/net"
	devices, err := ioutil.ReadDir(sysClassNet)
	if err != nil {
		return
	}

	si.Network = make([]NetworkDevice, 0)
	for _, link := range devices {
		fullpath := path.Join(sysClassNet, link.Name())
		dev, err := os.Readlink(fullpath)
		if err != nil {
			continue
		}

		if strings.HasPrefix(dev, "../../devices/virtual/") {
			continue
		}

		supp := getSupported(link.Name())

		device := NetworkDevice{
			Name:       link.Name(),
			MACAddress: slurpFile(path.Join(fullpath, "address")),
			Port:       getPortType(supp),
			Speed:      getMaxSpeed(supp),
		}

		if driver, err := os.Readlink(path.Join(fullpath, "device", "driver")); err == nil {
			device.Driver = path.Base(driver)
		}

		si.Network = append(si.Network, device)
	}
}
07070100000C9B000081A4000000000000000000000001645E367C00000B8C000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/zcalusic/sysinfo/node.go    // Copyright © 2016 Zlatko Čalušić
//
// Use of this source code is governed by an MIT-style license that can be found in the LICENSE file.

package sysinfo

import (
	"bufio"
	"crypto/rand"
	"fmt"
	"os"
	"strings"
	"time"
)

// Node information.
type Node struct {
	Hostname   string `json:"hostname,omitempty"`
	MachineID  string `json:"machineid,omitempty"`
	Hypervisor string `json:"hypervisor,omitempty"`
	Timezone   string `json:"timezone,omitempty"`
}

func (si *SysInfo) getHostname() {
	si.Node.Hostname = slurpFile("/proc/sys/kernel/hostname")
}

func (si *SysInfo) getSetMachineID() {
	const pathSystemdMachineID = "/etc/machine-id"
	const pathDbusMachineID = "/var/lib/dbus/machine-id"

	systemdMachineID := slurpFile(pathSystemdMachineID)
	dbusMachineID := slurpFile(pathDbusMachineID)

	if systemdMachineID != "" && dbusMachineID != "" {
		// All OK, just return the machine id.
		if systemdMachineID == dbusMachineID {
			si.Node.MachineID = systemdMachineID
			return
		}

		// They both exist, but they don't match! Copy systemd machine id to DBUS machine id.
		spewFile(pathDbusMachineID, systemdMachineID, 0444)
		si.Node.MachineID = systemdMachineID
		return
	}

	// Copy DBUS machine id to non-existent systemd machine id.
	if systemdMachineID == "" && dbusMachineID != "" {
		spewFile(pathSystemdMachineID, dbusMachineID, 0444)
		si.Node.MachineID = dbusMachineID
		return
	}

	// Copy systemd machine id to non-existent DBUS machine id.
	if systemdMachineID != "" && dbusMachineID == "" {
		spewFile(pathDbusMachineID, systemdMachineID, 0444)
		si.Node.MachineID = systemdMachineID
		return
	}

	// Generate and write fresh new machine ID to both locations, conforming to the DBUS specification:
	// https://dbus.freedesktop.org/doc/dbus-specification.html#uuids

	random := make([]byte, 12)
	if _, err := rand.Read(random); err != nil {
		return
	}
	newMachineID := fmt.Sprintf("%x%x", random, time.Now().Unix())

	spewFile(pathSystemdMachineID, newMachineID, 0444)
	spewFile(pathDbusMachineID, newMachineID, 0444)
	si.Node.MachineID = newMachineID
}

func (si *SysInfo) getTimezone() {
	if fi, err := os.Lstat("/etc/localtime"); err == nil {
		if fi.Mode()&os.ModeSymlink == os.ModeSymlink {
			if tzfile, err := os.Readlink("/etc/localtime"); err == nil {
				if strings.HasPrefix(tzfile, "/usr/share/zoneinfo/") {
					si.Node.Timezone = strings.TrimPrefix(tzfile, "/usr/share/zoneinfo/")
					return
				}
			}
		}
	}

	if timezone := slurpFile("/etc/timezone"); timezone != "" {
		si.Node.Timezone = timezone
		return
	}

	if f, err := os.Open("/etc/sysconfig/clock"); err == nil {
		defer f.Close()
		s := bufio.NewScanner(f)
		for s.Scan() {
			if sl := strings.Split(s.Text(), "="); len(sl) == 2 {
				if sl[0] == "ZONE" {
					si.Node.Timezone = strings.Trim(sl[1], `"`)
					return
				}
			}
		}
	}
}

func (si *SysInfo) getNodeInfo() {
	si.getHostname()
	si.getSetMachineID()
	si.getHypervisor()
	si.getTimezone()
}
07070100000C9C000081A4000000000000000000000001645E367C000008F6000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/zcalusic/sysinfo/os.go  // Copyright © 2016 Zlatko Čalušić
//
// Use of this source code is governed by an MIT-style license that can be found in the LICENSE file.

package sysinfo

import (
	"bufio"
	"os"
	"regexp"
	"strings"
)

// OS information.
type OS struct {
	Name         string `json:"name,omitempty"`
	Vendor       string `json:"vendor,omitempty"`
	Version      string `json:"version,omitempty"`
	Release      string `json:"release,omitempty"`
	Architecture string `json:"architecture,omitempty"`
}

var (
	rePrettyName = regexp.MustCompile(`^PRETTY_NAME=(.*)$`)
	reID         = regexp.MustCompile(`^ID=(.*)$`)
	reVersionID  = regexp.MustCompile(`^VERSION_ID=(.*)$`)
	reUbuntu     = regexp.MustCompile(`[\( ]([\d\.]+)`)
	reCentOS     = regexp.MustCompile(`^CentOS( Linux)? release ([\d\.]+) `)
	reRedHat     = regexp.MustCompile(`[\( ]([\d\.]+)`)
)

func (si *SysInfo) getOSInfo() {
	// This seems to be the best and most portable way to detect OS architecture (NOT kernel!)
	if _, err := os.Stat("/lib64/ld-linux-x86-64.so.2"); err == nil {
		si.OS.Architecture = "amd64"
	} else if _, err := os.Stat("/lib/ld-linux.so.2"); err == nil {
		si.OS.Architecture = "i386"
	}

	f, err := os.Open("/etc/os-release")
	if err != nil {
		return
	}
	defer f.Close()

	s := bufio.NewScanner(f)
	for s.Scan() {
		if m := rePrettyName.FindStringSubmatch(s.Text()); m != nil {
			si.OS.Name = strings.Trim(m[1], `"`)
		} else if m := reID.FindStringSubmatch(s.Text()); m != nil {
			si.OS.Vendor = strings.Trim(m[1], `"`)
		} else if m := reVersionID.FindStringSubmatch(s.Text()); m != nil {
			si.OS.Version = strings.Trim(m[1], `"`)
		}
	}

	switch si.OS.Vendor {
	case "debian":
		si.OS.Release = slurpFile("/etc/debian_version")
	case "ubuntu":
		if m := reUbuntu.FindStringSubmatch(si.OS.Name); m != nil {
			si.OS.Release = m[1]
		}
	case "centos":
		if release := slurpFile("/etc/centos-release"); release != "" {
			if m := reCentOS.FindStringSubmatch(release); m != nil {
				si.OS.Release = m[2]
			}
		}
	case "rhel":
		if release := slurpFile("/etc/redhat-release"); release != "" {
			if m := reRedHat.FindStringSubmatch(release); m != nil {
				si.OS.Release = m[1]
			}
		}
		if si.OS.Release == "" {
			if m := reRedHat.FindStringSubmatch(si.OS.Name); m != nil {
				si.OS.Release = m[1]
			}
		}
	}
}
  07070100000C9D000081A4000000000000000000000001645E367C000002A8000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/zcalusic/sysinfo/product.go // Copyright © 2016 Zlatko Čalušić
//
// Use of this source code is governed by an MIT-style license that can be found in the LICENSE file.

package sysinfo

// Product information.
type Product struct {
	Name    string `json:"name,omitempty"`
	Vendor  string `json:"vendor,omitempty"`
	Version string `json:"version,omitempty"`
	Serial  string `json:"serial,omitempty"`
}

func (si *SysInfo) getProductInfo() {
	si.Product.Name = slurpFile("/sys/class/dmi/id/product_name")
	si.Product.Vendor = slurpFile("/sys/class/dmi/id/sys_vendor")
	si.Product.Version = slurpFile("/sys/class/dmi/id/product_version")
	si.Product.Serial = slurpFile("/sys/class/dmi/id/product_serial")
}
07070100000C9E000081A4000000000000000000000001645E367C00000A07000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/zcalusic/sysinfo/storage.go // Copyright © 2016 Zlatko Čalušić
//
// Use of this source code is governed by an MIT-style license that can be found in the LICENSE file.

package sysinfo

import (
	"bufio"
	"io/ioutil"
	"os"
	"path"
	"strconv"
	"strings"
)

// StorageDevice information.
type StorageDevice struct {
	Name   string `json:"name,omitempty"`
	Driver string `json:"driver,omitempty"`
	Vendor string `json:"vendor,omitempty"`
	Model  string `json:"model,omitempty"`
	Serial string `json:"serial,omitempty"`
	Size   uint   `json:"size,omitempty"` // device size in GB
}

func getSerial(name, fullpath string) (serial string) {
	var f *os.File
	var err error

	// Modern location/format of the udev database.
	if dev := slurpFile(path.Join(fullpath, "dev")); dev != "" {
		if f, err = os.Open(path.Join("/run/udev/data", "b"+dev)); err == nil {
			goto scan
		}
	}

	// Legacy location/format of the udev database.
	if f, err = os.Open(path.Join("/dev/.udev/db", "block:"+name)); err == nil {
		goto scan
	}

	// No serial :(
	return

scan:
	defer f.Close()

	s := bufio.NewScanner(f)
	for s.Scan() {
		if sl := strings.Split(s.Text(), "="); len(sl) == 2 {
			if sl[0] == "E:ID_SERIAL_SHORT" {
				serial = sl[1]
				break
			}
		}
	}

	return
}

func (si *SysInfo) getStorageInfo() {
	sysBlock := "/sys/block"
	devices, err := ioutil.ReadDir(sysBlock)
	if err != nil {
		return
	}

	si.Storage = make([]StorageDevice, 0)
	for _, link := range devices {
		fullpath := path.Join(sysBlock, link.Name())
		dev, err := os.Readlink(fullpath)
		if err != nil {
			continue
		}

		if strings.HasPrefix(dev, "../devices/virtual/") {
			continue
		}

		// We could filter all removable devices here, but some systems boot from USB flash disks, and then we
		// would filter them, too. So, let's filter only floppies and CD/DVD devices, and see how it pans out.
		if strings.HasPrefix(dev, "../devices/platform/floppy") || slurpFile(path.Join(fullpath, "device", "type")) == "5" {
			continue
		}

		device := StorageDevice{
			Name:   link.Name(),
			Model:  slurpFile(path.Join(fullpath, "device", "model")),
			Serial: getSerial(link.Name(), fullpath),
		}

		if driver, err := os.Readlink(path.Join(fullpath, "device", "driver")); err == nil {
			device.Driver = path.Base(driver)
		}

		if vendor := slurpFile(path.Join(fullpath, "device", "vendor")); !strings.HasPrefix(vendor, "0x") {
			device.Vendor = vendor
		}

		size, _ := strconv.ParseUint(slurpFile(path.Join(fullpath, "size")), 10, 64)
		device.Size = uint(size) / 1953125 // GiB

		si.Storage = append(si.Storage, device)
	}
}
 07070100000C9F000081A4000000000000000000000001645E367C00000524000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/zcalusic/sysinfo/sysinfo.go // Copyright © 2016 Zlatko Čalušić
//
// Use of this source code is governed by an MIT-style license that can be found in the LICENSE file.

// Package sysinfo is a Go library providing Linux OS / kernel / hardware system information.
package sysinfo

// SysInfo struct encapsulates all other information structs.
type SysInfo struct {
	Meta    Meta            `json:"sysinfo"`
	Node    Node            `json:"node"`
	OS      OS              `json:"os"`
	Kernel  Kernel          `json:"kernel"`
	Product Product         `json:"product"`
	Board   Board           `json:"board"`
	Chassis Chassis         `json:"chassis"`
	BIOS    BIOS            `json:"bios"`
	CPU     CPU             `json:"cpu"`
	Memory  Memory          `json:"memory"`
	Storage []StorageDevice `json:"storage,omitempty"`
	Network []NetworkDevice `json:"network,omitempty"`
}

// GetSysInfo gathers all available system information.
func (si *SysInfo) GetSysInfo() {
	// Meta info
	si.getMetaInfo()

	// DMI info
	si.getProductInfo()
	si.getBoardInfo()
	si.getChassisInfo()
	si.getBIOSInfo()

	// SMBIOS info
	si.getMemoryInfo()

	// Node info
	si.getNodeInfo() // depends on BIOS info

	// Hardware info
	si.getCPUInfo() // depends on Node info
	si.getStorageInfo()
	si.getNetworkInfo()

	// Software info
	si.getOSInfo()
	si.getKernelInfo()
}
07070100000CA0000081A4000000000000000000000001645E367C0000024A000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/zcalusic/sysinfo/util.go    // Copyright © 2016 Zlatko Čalušić
//
// Use of this source code is governed by an MIT-style license that can be found in the LICENSE file.

package sysinfo

import (
	"io/ioutil"
	"os"
	"strings"
)

// Read one-liner text files, strip newline.
func slurpFile(path string) string {
	data, err := ioutil.ReadFile(path)
	if err != nil {
		return ""
	}

	return strings.TrimSpace(string(data))
}

// Write one-liner text files, add newline, ignore errors (best effort).
func spewFile(path string, data string, perm os.FileMode) {
	_ = ioutil.WriteFile(path, []byte(data+"\n"), perm)
}
  07070100000CA1000081A4000000000000000000000001645E367C000000DD000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/github.com/zcalusic/sysinfo/version.go // Copyright © 2016 Zlatko Čalušić
//
// Use of this source code is governed by an MIT-style license that can be found in the LICENSE file.

package sysinfo

// Version of the sysinfo library.
const Version = "0.9.5"
   07070100000CA2000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002E00000000elemental-cli-0.3.1/vendor/github.com/zloylos 07070100000CA3000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/github.com/zloylos/grsync  07070100000CA4000081A4000000000000000000000001645E367C000000C8000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/zloylos/grsync/.travis.yml  language: go

sudo: false

go:
  - "1.15"
  - "1.16"
  - "1.17"
  - tip

before_install:
  - go get -t -v ./...

script:
  - sh coverage.sh

after_success:
  - bash <(curl -s https://codecov.io/bash)
07070100000CA5000081A4000000000000000000000001645E367C00000439000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/zloylos/grsync/LICENSE  The MIT License (MIT)

Copyright (c) 2018 Denis Hananein

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
   07070100000CA6000081A4000000000000000000000001645E367C0000049D000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/github.com/zloylos/grsync/README.md    # grsync — golang rsync wrapper

[![codecov](https://codecov.io/gh/zloylos/grsync/branch/master/graph/badge.svg)](https://codecov.io/gh/zloylos/grsync)
[![GoDoc](https://godoc.org/github.com/zloylos/grsync?status.svg)](https://godoc.org/github.com/zloylos/grsync)

Repository contains some helpful tools:
- raw rsync wrapper
- rsync task — wrapper which provide important information about rsync task: progress, remain items, total items and speed

## Task wrapper usage

```golang
package main

import (
    "fmt"
    "grsync"
    "time"
)

func main() {
    task := grsync.NewTask(
        "username@server.com:/source/folder",
        "/home/user/destination",
        grsync.RsyncOptions{},
    )

    go func() {
        for {
            state := task.State()
            fmt.Printf(
                "progress: %.2f / rem. %d / tot. %d / sp. %s \n",
                state.Progress,
                state.Remain,
                state.Total,
                state.Speed,
            )
            <- time.After(time.Second)
        }
    }()

    if err := task.Run(); err != nil {
        panic(err)
    }

    fmt.Println("well done")
    fmt.Println(task.Log())
}
```
   07070100000CA7000081A4000000000000000000000001645E367C0000012D000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/github.com/zloylos/grsync/coverage.sh  #!/usr/bin/env bash

set -e

echo "mode: count" > coverage.out

for d in $(go list ./... | grep -v 'examples'); do
    go test -v -covermode=count -coverprofile=profile.out $d
    if [ -f profile.out ]; then
        cat profile.out | grep -v "mode:" >> coverage.out
        rm profile.out
    fi
done
   07070100000CA8000081A4000000000000000000000001645E367C00000292000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/github.com/zloylos/grsync/matcher.go   package grsync

import (
	"regexp"
)

type matcher struct {
	regExp *regexp.Regexp
}

func (m matcher) Match(data string) bool {
	return m.regExp.Match([]byte(data))
}

func (m matcher) Extract(data string) string {
	const submatchCount = 1
	matches := m.regExp.FindAllStringSubmatch(data, submatchCount)
	if len(matches) == 0 || len(matches[0]) < 2 {
		return ""
	}

	return matches[0][1]
}

func (m matcher) ExtractAllStringSubmatch(data string, submatchCount int) [][]string {
	return m.regExp.FindAllStringSubmatch(data, submatchCount)
}

func newMatcher(regExpString string) *matcher {
	return &matcher{
		regExp: regexp.MustCompile(regExpString),
	}
}
  07070100000CA9000081A4000000000000000000000001645E367C0000393D000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/github.com/zloylos/grsync/rsync.go package grsync

import (
	"fmt"
	"io"
	"os"
	"os/exec"
	"strconv"
	"strings"
)

// Rsync is wrapper under rsync
type Rsync struct {
	Source      string
	Destination string

	cmd *exec.Cmd
}

// RsyncOptions for rsync
type RsyncOptions struct {
	// RsyncBinaryPath is a path to the rsync binary; by default just `rsync`
	RsyncBinaryPath string
	// RsyncPath specify the rsync to run on remote machine, e.g `--rsync-path="cd /a/b && rsync"`
	RsyncPath string
	// Verbose increase verbosity
	Verbose bool
	// Quet suppress non-error messages
	Quiet bool
	// Checksum skip based on checksum, not mod-time & size
	Checksum bool
	// Archve is archive mode; equals -rlptgoD (no -H,-A,-X)
	Archive bool
	// Recurse into directories
	Recursive bool
	// Relative option to use relative path names
	Relative bool
	// NoImliedDirs don't send implied dirs with --relative
	NoImpliedDirs bool
	// Update skip files that are newer on the receiver
	Update bool
	// Inplace update destination files in-place
	Inplace bool
	// Append data onto shorter files
	Append bool
	// AppendVerify --append w/old data in file checksum
	AppendVerify bool
	// Dirs transfer directories without recursing
	Dirs bool
	// Links copy symlinks as symlinks
	Links bool
	// CopyLinks transform symlink into referent file/dir
	CopyLinks bool
	// CopyUnsafeLinks only "unsafe" symlinks are transformed
	CopyUnsafeLinks bool
	// SafeLinks ignore symlinks that point outside the tree
	SafeLinks bool
	// CopyDirLinks transform symlink to dir into referent dir
	CopyDirLinks bool
	// KeepDirLinks treat symlinked dir on receiver as dir
	KeepDirLinks bool
	// HardLinks preserve hard links
	HardLinks bool
	// Perms preserve permissions
	Perms bool
	// Executability preserve executability
	Executability bool
	// CHMOD affect file and/or directory permissions
	CHMOD os.FileMode
	// Acls preserve ACLs (implies -p)
	ACLs bool
	// XAttrs preserve extended attributes
	XAttrs bool
	// Owner preserve owner (super-user only)
	Owner bool
	// Group preserve group
	Group bool
	// Devices preserve device files (super-user only)
	Devices bool
	// Specials preserve special files
	Specials bool
	// Times preserve modification times
	Times bool
	// omit directories from --times
	OmitDirTimes bool
	// Super receiver attempts super-user activities
	Super bool
	// FakeSuper store/recover privileged attrs using xattrs
	FakeSuper bool
	// Sparce handle sparse files efficiently
	Sparse bool
	// DryRun perform a trial run with no changes made
	DryRun bool
	// WholeFile copy files whole (w/o delta-xfer algorithm)
	WholeFile bool
	// OneFileSystem don't cross filesystem boundaries
	OneFileSystem bool
	// BlockSize block-size=SIZE force a fixed checksum block-size
	BlockSize int
	// Rsh -rsh=COMMAND specify the remote shell to use
	Rsh string
	// Existing skip creating new files on receiver
	Existing bool
	// IgnoreExisting skip updating files that exist on receiver
	IgnoreExisting bool
	// RemoveSourceFiles sender removes synchronized files (non-dir)
	RemoveSourceFiles bool
	// Delete delete extraneous files from dest dirs
	Delete bool
	// DeleteBefore receiver deletes before transfer, not during
	DeleteBefore bool
	// DeleteDuring receiver deletes during the transfer
	DeleteDuring bool
	// DeleteDelay find deletions during, delete after
	DeleteDelay bool
	// DeleteAfter receiver deletes after transfer, not during
	DeleteAfter bool
	// DeleteExcluded also delete excluded files from dest dirs
	DeleteExcluded bool
	// IgnoreErrors delete even if there are I/O errors
	IgnoreErrors bool
	// Force deletion of dirs even if not empty
	Force bool
	// MaxDelete max-delete=NUM don't delete more than NUM files
	MaxDelete int
	// MaxSize max-size=SIZE don't transfer any file larger than SIZE
	MaxSize int
	// MinSize don't transfer any file smaller than SIZE
	MinSize int
	// Partial keep partially transferred files
	Partial bool
	// PartialDir partial-dir=DIR
	PartialDir string
	// DelayUpdates put all updated files into place at end
	DelayUpdates bool
	// PruneEmptyDirs prune empty directory chains from file-list
	PruneEmptyDirs bool
	// NumericIDs don't map uid/gid values by user/group name
	NumericIDs bool
	// Timeout timeout=SECONDS set I/O timeout in seconds
	Timeout int
	// Contimeout contimeout=SECONDS set daemon connection timeout in seconds
	Contimeout int
	// IgnoreTimes don't skip files that match size and time
	IgnoreTimes bool
	// SizeOnly skip files that match in size
	SizeOnly bool
	// ModifyWindow modify-window=NUM compare mod-times with reduced accuracy
	ModifyWindow bool
	// TempDir temp-dir=DIR create temporary files in directory DIR
	TempDir string
	// Fuzzy find similar file for basis if no dest file
	Fuzzy bool
	// CompareDest compare-dest=DIR also compare received files relative to DIR
	CompareDest string
	// CopyDest copy-dest=DIR ... and include copies of unchanged files
	CopyDest string
	// LinkDest link-dest=DIR hardlink to files in DIR when unchanged
	LinkDest string
	// Compress file data during the transfer
	Compress bool
	// CompressLevel explicitly set compression level
	CompressLevel int
	// SkipCompress skip-compress=LIST skip compressing files with suffix in LIST
	SkipCompress []string
	// CVSExclude auto-ignore files in the same way CVS does
	CVSExclude bool
	// Stats give some file-transfer stats
	Stats bool
	// HumanReadable output numbers in a human-readable format
	HumanReadable bool
	// Progress show progress during transfer
	Progress bool
	// Read daemon-access password from FILE
	PasswordFile string
	// limit socket I/O bandwidth
	BandwidthLimit int
	// Info
	Info string
	// Exclude --exclude="", exclude remote paths.
	Exclude []string
	// Include --include="", include remote paths.
	Include []string
	// Filter --filter="", include filter rule.
	Filter string
	// Chown --chown="", chown on receipt.
	Chown string

	// ipv4
	IPv4 bool
	// ipv6
	IPv6 bool

	//out-format
	OutFormat bool
}

// StdoutPipe returns a pipe that will be connected to the command's
// standard output when the command starts.
func (r Rsync) StdoutPipe() (io.ReadCloser, error) {
	return r.cmd.StdoutPipe()
}

// StderrPipe returns a pipe that will be connected to the command's
// standard error when the command starts.
func (r Rsync) StderrPipe() (io.ReadCloser, error) {
	return r.cmd.StderrPipe()
}

// Start starts an rsync command
func (r Rsync) Start() error {
	if !isExist(r.Destination) {
		if err := createDir(r.Destination); err != nil {
			return err
		}
	}

	return r.cmd.Start()
}

// Wait waits for rsync command to finnish
func (r Rsync) Wait() error {
	return r.cmd.Wait()
}

// Run start rsync task. The method is kept here for backward compatibility
func (r Rsync) Run() error {
	if err := r.Start(); err != nil {
		return err
	}

	return r.Wait()
}

// NewRsync returns task with described options
func NewRsync(source, destination string, options RsyncOptions) *Rsync {
	arguments := append(getArguments(options), source, destination)

	binaryPath := "rsync"
	if options.RsyncBinaryPath != "" {
		binaryPath = options.RsyncBinaryPath
	}

	return &Rsync{
		Source:      source,
		Destination: destination,
		cmd:         exec.Command(binaryPath, arguments...),
	}
}

func getArguments(options RsyncOptions) []string {
	arguments := []string{}

	if options.RsyncPath != "" {
		arguments = append(arguments, "--rsync-path", options.RsyncPath)
	}

	if options.Verbose {
		arguments = append(arguments, "--verbose")
	}

	if options.Checksum {
		arguments = append(arguments, "--checksum")
	}

	if options.Quiet {
		arguments = append(arguments, "--quiet")
	}

	if options.Archive {
		arguments = append(arguments, "--archive")
	}

	if options.Recursive {
		arguments = append(arguments, "--recursive")
	}

	if options.Relative {
		arguments = append(arguments, "--relative")
	}

	if options.NoImpliedDirs {
		arguments = append(arguments, "--no-implied-dirs")
	}

	if options.Update {
		arguments = append(arguments, "--update")
	}

	if options.Inplace {
		arguments = append(arguments, "--inplace")
	}

	if options.Append {
		arguments = append(arguments, "--append")
	}

	if options.AppendVerify {
		arguments = append(arguments, "--append-verify")
	}

	if options.Dirs {
		arguments = append(arguments, "--dirs")
	}

	if options.Links {
		arguments = append(arguments, "--links")
	}

	if options.CopyLinks {
		arguments = append(arguments, "--copy-links")
	}

	if options.CopyUnsafeLinks {
		arguments = append(arguments, "--copy-unsafe-links")
	}

	if options.SafeLinks {
		arguments = append(arguments, "--safe-links")
	}

	if options.CopyDirLinks {
		arguments = append(arguments, "--copy-dir-links")
	}

	if options.KeepDirLinks {
		arguments = append(arguments, "--keep-dir-links")
	}

	if options.HardLinks {
		arguments = append(arguments, "--hard-links")
	}

	if options.Perms {
		arguments = append(arguments, "--perms")
	}

	if options.Executability {
		arguments = append(arguments, "--executability")
	}

	if options.ACLs {
		arguments = append(arguments, "--acls")
	}

	if options.XAttrs {
		arguments = append(arguments, "--xattrs")
	}

	if options.Owner {
		arguments = append(arguments, "--owner")
	}

	if options.Group {
		arguments = append(arguments, "--group")
	}

	if options.Devices {
		arguments = append(arguments, "--devices")
	}

	if options.Specials {
		arguments = append(arguments, "--specials")
	}

	if options.Times {
		arguments = append(arguments, "--times")
	}

	if options.OmitDirTimes {
		arguments = append(arguments, "--omit-dir-times")
	}

	if options.Super {
		arguments = append(arguments, "--super")
	}

	if options.FakeSuper {
		arguments = append(arguments, "--fake-super")
	}

	if options.Sparse {
		arguments = append(arguments, "--sparse")
	}

	if options.DryRun {
		arguments = append(arguments, "--dry-run")
	}

	if options.WholeFile {
		arguments = append(arguments, "--whole-file")
	}

	if options.OneFileSystem {
		arguments = append(arguments, "--one-file-system")
	}

	if options.BlockSize > 0 {
		arguments = append(arguments, "--block-size", strconv.Itoa(options.BlockSize))
	}

	if options.Rsh != "" {
		arguments = append(arguments, "--rsh", options.Rsh)
	}

	if options.Existing {
		arguments = append(arguments, "--existing")
	}

	if options.IgnoreExisting {
		arguments = append(arguments, "--ignore-existing")
	}

	if options.RemoveSourceFiles {
		arguments = append(arguments, "--remove-source-files")
	}

	if options.Delete {
		arguments = append(arguments, "--delete")
	}

	if options.DeleteBefore {
		arguments = append(arguments, "--delete-before")
	}

	if options.DeleteDuring {
		arguments = append(arguments, "--delete-during")
	}

	if options.DeleteDelay {
		arguments = append(arguments, "--delete-delay")
	}

	if options.DeleteAfter {
		arguments = append(arguments, "--delete-after")
	}

	if options.DeleteExcluded {
		arguments = append(arguments, "--delete-excluded")
	}

	if options.IgnoreErrors {
		arguments = append(arguments, "--ignore-errors")
	}

	if options.Force {
		arguments = append(arguments, "--force")
	}

	if options.MaxDelete > 0 {
		arguments = append(arguments, "--max-delete", strconv.Itoa(options.MaxDelete))
	}

	if options.MaxSize > 0 {
		arguments = append(arguments, "--max-size", strconv.Itoa(options.MaxSize))
	}

	if options.MinSize > 0 {
		arguments = append(arguments, "--min-size", strconv.Itoa(options.MinSize))
	}

	if options.Partial {
		arguments = append(arguments, "--partial")
	}

	if options.PartialDir != "" {
		arguments = append(arguments, "--partial-dir", options.PartialDir)
	}

	if options.DelayUpdates {
		arguments = append(arguments, "--delay-updates")
	}

	if options.PruneEmptyDirs {
		arguments = append(arguments, "--prune-empty-dirs")
	}

	if options.NumericIDs {
		arguments = append(arguments, "--numeric-ids")
	}

	if options.Timeout > 0 {
		arguments = append(arguments, "--timeout", strconv.Itoa(options.Timeout))
	}

	if options.Contimeout > 0 {
		arguments = append(arguments, "--contimeout", strconv.Itoa(options.Contimeout))
	}

	if options.IgnoreTimes {
		arguments = append(arguments, "--ignore-times")
	}

	if options.SizeOnly {
		arguments = append(arguments, "--size-only")
	}

	if options.ModifyWindow {
		arguments = append(arguments, "--modify-window")
	}

	if options.TempDir != "" {
		arguments = append(arguments, "--temp-dir", options.TempDir)
	}

	if options.Fuzzy {
		arguments = append(arguments, "--fuzzy")
	}

	if options.CompareDest != "" {
		arguments = append(arguments, "--compare-dest", options.CompareDest)
	}

	if options.CopyDest != "" {
		arguments = append(arguments, "--copy-dest", options.CopyDest)
	}

	if options.LinkDest != "" {
		arguments = append(arguments, "--link-dest", options.LinkDest)
	}

	if options.Compress {
		arguments = append(arguments, "--compress")
	}

	if options.CompressLevel > 0 {
		arguments = append(arguments, "--compress-level", strconv.Itoa(options.CompressLevel))
	}

	if len(options.SkipCompress) > 0 {
		arguments = append(arguments, "--skip-compress", strings.Join(options.SkipCompress, ","))
	}

	if options.CVSExclude {
		arguments = append(arguments, "--cvs-exclude")
	}

	if options.Stats {
		arguments = append(arguments, "--stats")
	}

	if options.HumanReadable {
		arguments = append(arguments, "--human-readable")
	}

	if options.Progress {
		arguments = append(arguments, "--progress")
	}

	if options.PasswordFile != "" {
		arguments = append(arguments, "--password-file", options.PasswordFile)
	}

	if options.BandwidthLimit > 0 {
		arguments = append(arguments, "--bwlimit", strconv.Itoa(options.BandwidthLimit))
	}

	if options.IPv4 {
		arguments = append(arguments, "--ipv4")
	}

	if options.IPv6 {
		arguments = append(arguments, "--ipv6")
	}

	if options.Info != "" {
		arguments = append(arguments, "--info", options.Info)
	}

	if options.OutFormat {
		arguments = append(arguments, "--out-format=\"%n\"")
	}

	if len(options.Include) > 0 {
		for _, pattern := range options.Include {
			arguments = append(arguments, fmt.Sprintf("--include=%s", pattern))
		}
	}

	if len(options.Exclude) > 0 {
		for _, pattern := range options.Exclude {
			arguments = append(arguments, fmt.Sprintf("--exclude=%s", pattern))
		}
	}

	if options.Filter != "" {
		arguments = append(arguments, fmt.Sprintf("--filter=%s", options.Filter))
	}

	if options.Chown != "" {
		arguments = append(arguments, fmt.Sprintf("--chown=%s", options.Chown))
	}

	return arguments
}

func createDir(dir string) error {
	cmd := exec.Command("mkdir", "-p", dir)
	if err := cmd.Start(); err != nil {
		return err
	}
	return cmd.Wait()
}

func isExist(p string) bool {
	stat, err := os.Stat(p)
	return os.IsExist(err) && stat.IsDir()
}
   07070100000CAA000081A4000000000000000000000001645E367C00000DD6000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/github.com/zloylos/grsync/task.go  package grsync

import (
	"bufio"
	"io"
	"math"
	"strconv"
	"strings"
	"sync"
)

// Task is high-level API under rsync
type Task struct {
	rsync *Rsync

	state *State
	log   *Log
	mutex sync.Mutex
}

// State contains information about rsync process
type State struct {
	Remain   int     `json:"remain"`
	Total    int     `json:"total"`
	Speed    string  `json:"speed"`
	Progress float64 `json:"progress"`
}

// Log contains raw stderr and stdout outputs
type Log struct {
	Stderr string `json:"stderr"`
	Stdout string `json:"stdout"`
}

// State returns information about rsync processing task
// lock mutex to avoid accessing it while ProcessStdout is writing to it
func (t *Task) State() State {
	t.mutex.Lock()
	c := *t.state
	t.mutex.Unlock()
	return c
}

// Log return structure which contains raw stderr and stdout outputs
func (t *Task) Log() Log {
	t.mutex.Lock()
	l := Log{
		Stderr: t.log.Stderr,
		Stdout: t.log.Stdout,
	}
	t.mutex.Unlock()
	return l
}

// Run starts rsync process with options
func (t *Task) Run() error {
	stderr, err := t.rsync.StderrPipe()
	if err != nil {
		return err
	}

	stdout, err := t.rsync.StdoutPipe()
	if err != nil {
		stderr.Close()
		return err
	}

	var wg sync.WaitGroup
	go processStdout(&wg, t, stdout)
	go processStderr(&wg, t, stderr)
	wg.Add(2)

	if err = t.rsync.Start(); err != nil {
		// Close pipes to unblock goroutines
		stdout.Close()
		stderr.Close()
		wg.Wait()
		return err
	}

	wg.Wait()

	return t.rsync.Wait()
}

// NewTask returns new rsync task
func NewTask(source, destination string, rsyncOptions RsyncOptions) *Task {
	// Force set required options
	rsyncOptions.HumanReadable = true
	rsyncOptions.Partial = true
	rsyncOptions.Progress = true
	rsyncOptions.Archive = true

	return &Task{
		rsync: NewRsync(source, destination, rsyncOptions),
		state: &State{},
		log:   &Log{},
	}
}

func processStdout(wg *sync.WaitGroup, task *Task, stdout io.Reader) {
	const maxPercents = float64(100)
	const minDivider = 1

	defer wg.Done()

	progressMatcher := newMatcher(`\(.+-chk=(\d+.\d+)`)
	speedMatcher := newMatcher(`(\d+\.\d+.{2}\/s)`)

	// Extract data from strings:
	//         999,999 99%  999.99kB/s    0:00:59 (xfr#9, to-chk=999/9999)
	scanner := bufio.NewScanner(stdout)
	for scanner.Scan() {
		logStr := scanner.Text()
		task.mutex.Lock()
		if progressMatcher.Match(logStr) {
			task.state.Remain, task.state.Total = getTaskProgress(progressMatcher.Extract(logStr))

			copiedCount := float64(task.state.Total - task.state.Remain)
			task.state.Progress = copiedCount / math.Max(float64(task.state.Total), float64(minDivider)) * maxPercents
		}

		if speedMatcher.Match(logStr) {
			task.state.Speed = getTaskSpeed(speedMatcher.ExtractAllStringSubmatch(logStr, 2))
		}

		task.log.Stdout += logStr + "\n"
		task.mutex.Unlock()
	}
}

func processStderr(wg *sync.WaitGroup, task *Task, stderr io.Reader) {
	defer wg.Done()

	scanner := bufio.NewScanner(stderr)
	for scanner.Scan() {
		task.mutex.Lock()
		task.log.Stderr += scanner.Text() + "\n"
		task.mutex.Unlock()
	}
}

func getTaskProgress(remTotalString string) (int, int) {
	const remTotalSeparator = "/"
	const numbersCount = 2
	const (
		indexRem = iota
		indexTotal
	)

	info := strings.Split(remTotalString, remTotalSeparator)
	if len(info) < numbersCount {
		return 0, 0
	}

	remain, _ := strconv.Atoi(info[indexRem])
	total, _ := strconv.Atoi(info[indexTotal])

	return remain, total
}

func getTaskSpeed(data [][]string) string {
	if len(data) < 2 || len(data[1]) < 2 {
		return ""
	}

	return data[1][1]
}
  07070100000CAB000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000002C00000000elemental-cli-0.3.1/vendor/go.opencensus.io   07070100000CAC000081A4000000000000000000000001645E367C000000AD000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/go.opencensus.io/.gitignore    /.idea/

# go.opencensus.io/exporter/aws
/exporter/aws/

# Exclude vendor, use dep ensure after checkout:
/vendor/github.com/
/vendor/golang.org/
/vendor/google.golang.org/
   07070100000CAD000081A4000000000000000000000001645E367C0000000C000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/go.opencensus.io/AUTHORS   Google Inc.
07070100000CAE000081A4000000000000000000000001645E367C000006DF000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/go.opencensus.io/CONTRIBUTING.md   # How to contribute

We'd love to accept your patches and contributions to this project. There are
just a few small guidelines you need to follow.

## Contributor License Agreement

Contributions to this project must be accompanied by a Contributor License
Agreement. You (or your employer) retain the copyright to your contribution,
this simply gives us permission to use and redistribute your contributions as
part of the project. Head over to <https://cla.developers.google.com/> to see
your current agreements on file or to sign a new one.

You generally only need to submit a CLA once, so if you've already submitted one
(even if it was for a different project), you probably don't need to do it
again.

## Code reviews

All submissions, including submissions by project members, require review. We
use GitHub pull requests for this purpose. Consult [GitHub Help] for more
information on using pull requests.

[GitHub Help]: https://help.github.com/articles/about-pull-requests/

## Instructions

Fork the repo, checkout the upstream repo to your GOPATH by:

```
$ go get -d go.opencensus.io
```

Add your fork as an origin:

```
cd $(go env GOPATH)/src/go.opencensus.io
git remote add fork git@github.com:YOUR_GITHUB_USERNAME/opencensus-go.git
```

Run tests:

```
$ make install-tools  # Only first time.
$ make
```

Checkout a new branch, make modifications and push the branch to your fork:

```
$ git checkout -b feature
# edit files
$ git commit
$ git push fork feature
```

Open a pull request against the main opencensus-go repo.

## General Notes
This project uses Appveyor and Travis for CI.

The dependencies are managed with `go mod` if you work with the sources under your
`$GOPATH` you need to set the environment variable `GO111MODULE=on`. 07070100000CAF000081A4000000000000000000000001645E367C00002C5D000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/go.opencensus.io/LICENSE   
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.   07070100000CB0000081A4000000000000000000000001645E367C00000AAF000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/go.opencensus.io/Makefile  # TODO: Fix this on windows.
ALL_SRC := $(shell find . -name '*.go' \
								-not -path './vendor/*' \
								-not -path '*/gen-go/*' \
								-type f | sort)
ALL_PKGS := $(shell go list $(sort $(dir $(ALL_SRC))))

GOTEST_OPT?=-v -race -timeout 30s
GOTEST_OPT_WITH_COVERAGE = $(GOTEST_OPT) -coverprofile=coverage.txt -covermode=atomic
GOTEST=go test
GOIMPORTS=goimports
GOLINT=golint
GOVET=go vet
EMBEDMD=embedmd
# TODO decide if we need to change these names.
TRACE_ID_LINT_EXCEPTION="type name will be used as trace.TraceID by other packages"
TRACE_OPTION_LINT_EXCEPTION="type name will be used as trace.TraceOptions by other packages"
README_FILES := $(shell find . -name '*README.md' | sort | tr '\n' ' ')

.DEFAULT_GOAL := imports-lint-vet-embedmd-test

.PHONY: imports-lint-vet-embedmd-test
imports-lint-vet-embedmd-test: imports lint vet embedmd test

# TODO enable test-with-coverage in tavis
.PHONY: travis-ci
travis-ci: imports lint vet embedmd test test-386

all-pkgs:
	@echo $(ALL_PKGS) | tr ' ' '\n' | sort

all-srcs:
	@echo $(ALL_SRC) | tr ' ' '\n' | sort

.PHONY: test
test:
	$(GOTEST) $(GOTEST_OPT) $(ALL_PKGS)

.PHONY: test-386
test-386:
	GOARCH=386 $(GOTEST) -v -timeout 30s $(ALL_PKGS)

.PHONY: test-with-coverage
test-with-coverage:
	$(GOTEST) $(GOTEST_OPT_WITH_COVERAGE) $(ALL_PKGS)

.PHONY: imports
imports:
	@IMPORTSOUT=`$(GOIMPORTS) -l $(ALL_SRC) 2>&1`; \
	if [ "$$IMPORTSOUT" ]; then \
		echo "$(GOIMPORTS) FAILED => goimports the following files:\n"; \
		echo "$$IMPORTSOUT\n"; \
		exit 1; \
	else \
	    echo "Imports finished successfully"; \
	fi

.PHONY: lint
lint:
	@LINTOUT=`$(GOLINT) $(ALL_PKGS) | grep -v $(TRACE_ID_LINT_EXCEPTION) | grep -v $(TRACE_OPTION_LINT_EXCEPTION) 2>&1`; \
	if [ "$$LINTOUT" ]; then \
		echo "$(GOLINT) FAILED => clean the following lint errors:\n"; \
		echo "$$LINTOUT\n"; \
		exit 1; \
	else \
	    echo "Lint finished successfully"; \
	fi

.PHONY: vet
vet:
    # TODO: Understand why go vet downloads "github.com/google/go-cmp v0.2.0"
	@VETOUT=`$(GOVET) ./... | grep -v "go: downloading" 2>&1`; \
	if [ "$$VETOUT" ]; then \
		echo "$(GOVET) FAILED => go vet the following files:\n"; \
		echo "$$VETOUT\n"; \
		exit 1; \
	else \
	    echo "Vet finished successfully"; \
	fi
	
.PHONY: embedmd
embedmd:
	@EMBEDMDOUT=`$(EMBEDMD) -d $(README_FILES) 2>&1`; \
	if [ "$$EMBEDMDOUT" ]; then \
		echo "$(EMBEDMD) FAILED => embedmd the following files:\n"; \
		echo "$$EMBEDMDOUT\n"; \
		exit 1; \
	else \
	    echo "Embedmd finished successfully"; \
	fi

.PHONY: install-tools
install-tools:
	go install golang.org/x/lint/golint@latest
	go install golang.org/x/tools/cmd/cover@latest
	go install golang.org/x/tools/cmd/goimports@latest
	go install github.com/rakyll/embedmd@latest
 07070100000CB1000081A4000000000000000000000001645E367C00002836000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/go.opencensus.io/README.md # OpenCensus Libraries for Go

[![Build Status][travis-image]][travis-url]
[![Windows Build Status][appveyor-image]][appveyor-url]
[![GoDoc][godoc-image]][godoc-url]
[![Gitter chat][gitter-image]][gitter-url]

OpenCensus Go is a Go implementation of OpenCensus, a toolkit for
collecting application performance and behavior monitoring data.
Currently it consists of three major components: tags, stats and tracing.

#### OpenCensus and OpenTracing have merged to form OpenTelemetry, which serves as the next major version of OpenCensus and OpenTracing. OpenTelemetry will offer backwards compatibility with existing OpenCensus integrations, and we will continue to make security patches to existing OpenCensus libraries for two years. Read more about the merger [here](https://medium.com/opentracing/a-roadmap-to-convergence-b074e5815289).

## Installation

```
$ go get -u go.opencensus.io
```

The API of this project is still evolving, see: [Deprecation Policy](#deprecation-policy).
The use of vendoring or a dependency management tool is recommended.

## Prerequisites

OpenCensus Go libraries require Go 1.8 or later.

## Getting Started

The easiest way to get started using OpenCensus in your application is to use an existing
integration with your RPC framework:

* [net/http](https://godoc.org/go.opencensus.io/plugin/ochttp)
* [gRPC](https://godoc.org/go.opencensus.io/plugin/ocgrpc)
* [database/sql](https://godoc.org/github.com/opencensus-integrations/ocsql)
* [Go kit](https://godoc.org/github.com/go-kit/kit/tracing/opencensus)
* [Groupcache](https://godoc.org/github.com/orijtech/groupcache)
* [Caddy webserver](https://godoc.org/github.com/orijtech/caddy)
* [MongoDB](https://godoc.org/github.com/orijtech/mongo-go-driver)
* [Redis gomodule/redigo](https://godoc.org/github.com/orijtech/redigo)
* [Redis goredis/redis](https://godoc.org/github.com/orijtech/redis)
* [Memcache](https://godoc.org/github.com/orijtech/gomemcache)

If you're using a framework not listed here, you could either implement your own middleware for your
framework or use [custom stats](#stats) and [spans](#spans) directly in your application.

## Exporters

OpenCensus can export instrumentation data to various backends.
OpenCensus has exporter implementations for the following, users
can implement their own exporters by implementing the exporter interfaces
([stats](https://godoc.org/go.opencensus.io/stats/view#Exporter),
[trace](https://godoc.org/go.opencensus.io/trace#Exporter)):

* [Prometheus][exporter-prom] for stats
* [OpenZipkin][exporter-zipkin] for traces
* [Stackdriver][exporter-stackdriver] Monitoring for stats and Trace for traces
* [Jaeger][exporter-jaeger] for traces
* [AWS X-Ray][exporter-xray] for traces
* [Datadog][exporter-datadog] for stats and traces
* [Graphite][exporter-graphite] for stats
* [Honeycomb][exporter-honeycomb] for traces
* [New Relic][exporter-newrelic] for stats and traces

## Overview

![OpenCensus Overview](https://i.imgur.com/cf4ElHE.jpg)

In a microservices environment, a user request may go through
multiple services until there is a response. OpenCensus allows
you to instrument your services and collect diagnostics data all
through your services end-to-end.

## Tags

Tags represent propagated key-value pairs. They are propagated using `context.Context`
in the same process or can be encoded to be transmitted on the wire. Usually, this will
be handled by an integration plugin, e.g. `ocgrpc.ServerHandler` and `ocgrpc.ClientHandler`
for gRPC.

Package `tag` allows adding or modifying tags in the current context.

[embedmd]:# (internal/readme/tags.go new)
```go
ctx, err := tag.New(ctx,
	tag.Insert(osKey, "macOS-10.12.5"),
	tag.Upsert(userIDKey, "cde36753ed"),
)
if err != nil {
	log.Fatal(err)
}
```

## Stats

OpenCensus is a low-overhead framework even if instrumentation is always enabled.
In order to be so, it is optimized to make recording of data points fast
and separate from the data aggregation.

OpenCensus stats collection happens in two stages:

* Definition of measures and recording of data points
* Definition of views and aggregation of the recorded data

### Recording

Measurements are data points associated with a measure.
Recording implicitly tags the set of Measurements with the tags from the
provided context:

[embedmd]:# (internal/readme/stats.go record)
```go
stats.Record(ctx, videoSize.M(102478))
```

### Views

Views are how Measures are aggregated. You can think of them as queries over the
set of recorded data points (measurements).

Views have two parts: the tags to group by and the aggregation type used.

Currently three types of aggregations are supported:
* CountAggregation is used to count the number of times a sample was recorded.
* DistributionAggregation is used to provide a histogram of the values of the samples.
* SumAggregation is used to sum up all sample values.

[embedmd]:# (internal/readme/stats.go aggs)
```go
distAgg := view.Distribution(1<<32, 2<<32, 3<<32)
countAgg := view.Count()
sumAgg := view.Sum()
```

Here we create a view with the DistributionAggregation over our measure.

[embedmd]:# (internal/readme/stats.go view)
```go
if err := view.Register(&view.View{
	Name:        "example.com/video_size_distribution",
	Description: "distribution of processed video size over time",
	Measure:     videoSize,
	Aggregation: view.Distribution(1<<32, 2<<32, 3<<32),
}); err != nil {
	log.Fatalf("Failed to register view: %v", err)
}
```

Register begins collecting data for the view. Registered views' data will be
exported via the registered exporters.

## Traces

A distributed trace tracks the progression of a single user request as
it is handled by the services and processes that make up an application.
Each step is called a span in the trace. Spans include metadata about the step,
including especially the time spent in the step, called the span’s latency.

Below you see a trace and several spans underneath it.

![Traces and spans](https://i.imgur.com/7hZwRVj.png)

### Spans

Span is the unit step in a trace. Each span has a name, latency, status and
additional metadata.

Below we are starting a span for a cache read and ending it
when we are done:

[embedmd]:# (internal/readme/trace.go startend)
```go
ctx, span := trace.StartSpan(ctx, "cache.Get")
defer span.End()

// Do work to get from cache.
```

### Propagation

Spans can have parents or can be root spans if they don't have any parents.
The current span is propagated in-process and across the network to allow associating
new child spans with the parent.

In the same process, `context.Context` is used to propagate spans.
`trace.StartSpan` creates a new span as a root if the current context
doesn't contain a span. Or, it creates a child of the span that is
already in current context. The returned context can be used to keep
propagating the newly created span in the current context.

[embedmd]:# (internal/readme/trace.go startend)
```go
ctx, span := trace.StartSpan(ctx, "cache.Get")
defer span.End()

// Do work to get from cache.
```

Across the network, OpenCensus provides different propagation
methods for different protocols.

* gRPC integrations use the OpenCensus' [binary propagation format](https://godoc.org/go.opencensus.io/trace/propagation).
* HTTP integrations use Zipkin's [B3](https://github.com/openzipkin/b3-propagation)
  by default but can be configured to use a custom propagation method by setting another
  [propagation.HTTPFormat](https://godoc.org/go.opencensus.io/trace/propagation#HTTPFormat).

## Execution Tracer

With Go 1.11, OpenCensus Go will support integration with the Go execution tracer.
See [Debugging Latency in Go](https://medium.com/observability/debugging-latency-in-go-1-11-9f97a7910d68)
for an example of their mutual use.

## Profiles

OpenCensus tags can be applied as profiler labels
for users who are on Go 1.9 and above.

[embedmd]:# (internal/readme/tags.go profiler)
```go
ctx, err = tag.New(ctx,
	tag.Insert(osKey, "macOS-10.12.5"),
	tag.Insert(userIDKey, "fff0989878"),
)
if err != nil {
	log.Fatal(err)
}
tag.Do(ctx, func(ctx context.Context) {
	// Do work.
	// When profiling is on, samples will be
	// recorded with the key/values from the tag map.
})
```

A screenshot of the CPU profile from the program above:

![CPU profile](https://i.imgur.com/jBKjlkw.png)

## Deprecation Policy

Before version 1.0.0, the following deprecation policy will be observed:

No backwards-incompatible changes will be made except for the removal of symbols that have
been marked as *Deprecated* for at least one minor release (e.g. 0.9.0 to 0.10.0). A release
removing the *Deprecated* functionality will be made no sooner than 28 days after the first
release in which the functionality was marked *Deprecated*.

[travis-image]: https://travis-ci.org/census-instrumentation/opencensus-go.svg?branch=master
[travis-url]: https://travis-ci.org/census-instrumentation/opencensus-go
[appveyor-image]: https://ci.appveyor.com/api/projects/status/vgtt29ps1783ig38?svg=true
[appveyor-url]: https://ci.appveyor.com/project/opencensusgoteam/opencensus-go/branch/master
[godoc-image]: https://godoc.org/go.opencensus.io?status.svg
[godoc-url]: https://godoc.org/go.opencensus.io
[gitter-image]: https://badges.gitter.im/census-instrumentation/lobby.svg
[gitter-url]: https://gitter.im/census-instrumentation/lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge


[new-ex]: https://godoc.org/go.opencensus.io/tag#example-NewMap
[new-replace-ex]: https://godoc.org/go.opencensus.io/tag#example-NewMap--Replace

[exporter-prom]: https://godoc.org/contrib.go.opencensus.io/exporter/prometheus
[exporter-stackdriver]: https://godoc.org/contrib.go.opencensus.io/exporter/stackdriver
[exporter-zipkin]: https://godoc.org/contrib.go.opencensus.io/exporter/zipkin
[exporter-jaeger]: https://godoc.org/contrib.go.opencensus.io/exporter/jaeger
[exporter-xray]: https://github.com/census-ecosystem/opencensus-go-exporter-aws
[exporter-datadog]: https://github.com/DataDog/opencensus-go-exporter-datadog
[exporter-graphite]: https://github.com/census-ecosystem/opencensus-go-exporter-graphite
[exporter-honeycomb]: https://github.com/honeycombio/opencensus-exporter
[exporter-newrelic]: https://github.com/newrelic/newrelic-opencensus-exporter-go
  07070100000CB2000081A4000000000000000000000001645E367C0000019C000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/go.opencensus.io/appveyor.yml  version: "{build}"

platform: x64

clone_folder: c:\gopath\src\go.opencensus.io

environment:
  GOPATH: 'c:\gopath'
  GO111MODULE: 'on'
  CGO_ENABLED: '0' # See: https://github.com/appveyor/ci/issues/2613

stack: go 1.11

before_test:
  - go version
  - go env

build: false
deploy: false

test_script:
  - cd %APPVEYOR_BUILD_FOLDER%
  - go build -v .\...
  - go test -v .\... # No -race because cgo is disabled
07070100000CB3000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/go.opencensus.io/internal  07070100000CB4000081A4000000000000000000000001645E367C000004E4000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/go.opencensus.io/internal/internal.go  // Copyright 2017, OpenCensus Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package internal // import "go.opencensus.io/internal"

import (
	"fmt"
	"time"

	opencensus "go.opencensus.io"
)

// UserAgent is the user agent to be added to the outgoing
// requests from the exporters.
var UserAgent = fmt.Sprintf("opencensus-go/%s", opencensus.Version())

// MonotonicEndTime returns the end time at present
// but offset from start, monotonically.
//
// The monotonic clock is used in subtractions hence
// the duration since start added back to start gives
// end as a monotonic time.
// See https://golang.org/pkg/time/#hdr-Monotonic_Clocks
func MonotonicEndTime(start time.Time) time.Time {
	return start.Add(time.Since(start))
}
07070100000CB5000081A4000000000000000000000001645E367C00000521000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/go.opencensus.io/internal/sanitize.go  // Copyright 2017, OpenCensus Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package internal

import (
	"strings"
	"unicode"
)

const labelKeySizeLimit = 100

// Sanitize returns a string that is trunacated to 100 characters if it's too
// long, and replaces non-alphanumeric characters to underscores.
func Sanitize(s string) string {
	if len(s) == 0 {
		return s
	}
	if len(s) > labelKeySizeLimit {
		s = s[:labelKeySizeLimit]
	}
	s = strings.Map(sanitizeRune, s)
	if unicode.IsDigit(rune(s[0])) {
		s = "key_" + s
	}
	if s[0] == '_' {
		s = "key" + s
	}
	return s
}

// converts anything that is not a letter or digit to an underscore
func sanitizeRune(r rune) rune {
	if unicode.IsLetter(r) || unicode.IsDigit(r) {
		return r
	}
	// Everything else turns into an underscore
	return '_'
}
   07070100000CB6000081A4000000000000000000000001645E367C0000063A000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/go.opencensus.io/internal/traceinternals.go    // Copyright 2017, OpenCensus Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package internal

import (
	"time"
)

// Trace allows internal access to some trace functionality.
// TODO(#412): remove this
var Trace interface{}

// LocalSpanStoreEnabled true if the local span store is enabled.
var LocalSpanStoreEnabled bool

// BucketConfiguration stores the number of samples to store for span buckets
// for successful and failed spans for a particular span name.
type BucketConfiguration struct {
	Name                 string
	MaxRequestsSucceeded int
	MaxRequestsErrors    int
}

// PerMethodSummary is a summary of the spans stored for a single span name.
type PerMethodSummary struct {
	Active         int
	LatencyBuckets []LatencyBucketSummary
	ErrorBuckets   []ErrorBucketSummary
}

// LatencyBucketSummary is a summary of a latency bucket.
type LatencyBucketSummary struct {
	MinLatency, MaxLatency time.Duration
	Size                   int
}

// ErrorBucketSummary is a summary of an error bucket.
type ErrorBucketSummary struct {
	ErrorCode int32
	Size      int
}
  07070100000CB7000081A4000000000000000000000001645E367C0000032B000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/go.opencensus.io/opencensus.go // Copyright 2017, OpenCensus Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package opencensus contains Go support for OpenCensus.
package opencensus // import "go.opencensus.io"

// Version is the current release version of OpenCensus in use.
func Version() string {
	return "0.24.0"
}
 07070100000CB8000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000003200000000elemental-cli-0.3.1/vendor/go.opencensus.io/trace 07070100000CB9000081A4000000000000000000000001645E367C00000EA5000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/go.opencensus.io/trace/basetypes.go    // Copyright 2017, OpenCensus Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package trace

import (
	"fmt"
	"time"
)

type (
	// TraceID is a 16-byte identifier for a set of spans.
	TraceID [16]byte

	// SpanID is an 8-byte identifier for a single span.
	SpanID [8]byte
)

func (t TraceID) String() string {
	return fmt.Sprintf("%02x", t[:])
}

func (s SpanID) String() string {
	return fmt.Sprintf("%02x", s[:])
}

// Annotation represents a text annotation with a set of attributes and a timestamp.
type Annotation struct {
	Time       time.Time
	Message    string
	Attributes map[string]interface{}
}

// Attribute represents a key-value pair on a span, link or annotation.
// Construct with one of: BoolAttribute, Int64Attribute, or StringAttribute.
type Attribute struct {
	key   string
	value interface{}
}

// Key returns the attribute's key
func (a *Attribute) Key() string {
	return a.key
}

// Value returns the attribute's value
func (a *Attribute) Value() interface{} {
	return a.value
}

// BoolAttribute returns a bool-valued attribute.
func BoolAttribute(key string, value bool) Attribute {
	return Attribute{key: key, value: value}
}

// Int64Attribute returns an int64-valued attribute.
func Int64Attribute(key string, value int64) Attribute {
	return Attribute{key: key, value: value}
}

// Float64Attribute returns a float64-valued attribute.
func Float64Attribute(key string, value float64) Attribute {
	return Attribute{key: key, value: value}
}

// StringAttribute returns a string-valued attribute.
func StringAttribute(key string, value string) Attribute {
	return Attribute{key: key, value: value}
}

// LinkType specifies the relationship between the span that had the link
// added, and the linked span.
type LinkType int32

// LinkType values.
const (
	LinkTypeUnspecified LinkType = iota // The relationship of the two spans is unknown.
	LinkTypeChild                       // The linked span is a child of the current span.
	LinkTypeParent                      // The linked span is the parent of the current span.
)

// Link represents a reference from one span to another span.
type Link struct {
	TraceID TraceID
	SpanID  SpanID
	Type    LinkType
	// Attributes is a set of attributes on the link.
	Attributes map[string]interface{}
}

// MessageEventType specifies the type of message event.
type MessageEventType int32

// MessageEventType values.
const (
	MessageEventTypeUnspecified MessageEventType = iota // Unknown event type.
	MessageEventTypeSent                                // Indicates a sent RPC message.
	MessageEventTypeRecv                                // Indicates a received RPC message.
)

// MessageEvent represents an event describing a message sent or received on the network.
type MessageEvent struct {
	Time                 time.Time
	EventType            MessageEventType
	MessageID            int64
	UncompressedByteSize int64
	CompressedByteSize   int64
}

// Status is the status of a Span.
type Status struct {
	// Code is a status code.  Zero indicates success.
	//
	// If Code will be propagated to Google APIs, it ideally should be a value from
	// https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto .
	Code    int32
	Message string
}
   07070100000CBA000081A4000000000000000000000001645E367C00000A1B000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/go.opencensus.io/trace/config.go   // Copyright 2018, OpenCensus Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package trace

import (
	"sync"

	"go.opencensus.io/trace/internal"
)

// Config represents the global tracing configuration.
type Config struct {
	// DefaultSampler is the default sampler used when creating new spans.
	DefaultSampler Sampler

	// IDGenerator is for internal use only.
	IDGenerator internal.IDGenerator

	// MaxAnnotationEventsPerSpan is max number of annotation events per span
	MaxAnnotationEventsPerSpan int

	// MaxMessageEventsPerSpan is max number of message events per span
	MaxMessageEventsPerSpan int

	// MaxAnnotationEventsPerSpan is max number of attributes per span
	MaxAttributesPerSpan int

	// MaxLinksPerSpan is max number of links per span
	MaxLinksPerSpan int
}

var configWriteMu sync.Mutex

const (
	// DefaultMaxAnnotationEventsPerSpan is default max number of annotation events per span
	DefaultMaxAnnotationEventsPerSpan = 32

	// DefaultMaxMessageEventsPerSpan is default max number of message events per span
	DefaultMaxMessageEventsPerSpan = 128

	// DefaultMaxAttributesPerSpan is default max number of attributes per span
	DefaultMaxAttributesPerSpan = 32

	// DefaultMaxLinksPerSpan is default max number of links per span
	DefaultMaxLinksPerSpan = 32
)

// ApplyConfig applies changes to the global tracing configuration.
//
// Fields not provided in the given config are going to be preserved.
func ApplyConfig(cfg Config) {
	configWriteMu.Lock()
	defer configWriteMu.Unlock()
	c := *config.Load().(*Config)
	if cfg.DefaultSampler != nil {
		c.DefaultSampler = cfg.DefaultSampler
	}
	if cfg.IDGenerator != nil {
		c.IDGenerator = cfg.IDGenerator
	}
	if cfg.MaxAnnotationEventsPerSpan > 0 {
		c.MaxAnnotationEventsPerSpan = cfg.MaxAnnotationEventsPerSpan
	}
	if cfg.MaxMessageEventsPerSpan > 0 {
		c.MaxMessageEventsPerSpan = cfg.MaxMessageEventsPerSpan
	}
	if cfg.MaxAttributesPerSpan > 0 {
		c.MaxAttributesPerSpan = cfg.MaxAttributesPerSpan
	}
	if cfg.MaxLinksPerSpan > 0 {
		c.MaxLinksPerSpan = cfg.MaxLinksPerSpan
	}
	config.Store(&c)
}
 07070100000CBB000081A4000000000000000000000001645E367C000007C6000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/go.opencensus.io/trace/doc.go  // Copyright 2017, OpenCensus Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

/*
Package trace contains support for OpenCensus distributed tracing.

The following assumes a basic familiarity with OpenCensus concepts.
See http://opencensus.io

# Exporting Traces

To export collected tracing data, register at least one exporter. You can use
one of the provided exporters or write your own.

	trace.RegisterExporter(exporter)

By default, traces will be sampled relatively rarely. To change the sampling
frequency for your entire program, call ApplyConfig. Use a ProbabilitySampler
to sample a subset of traces, or use AlwaysSample to collect a trace on every run:

	trace.ApplyConfig(trace.Config{DefaultSampler: trace.AlwaysSample()})

Be careful about using trace.AlwaysSample in a production application with
significant traffic: a new trace will be started and exported for every request.

# Adding Spans to a Trace

A trace consists of a tree of spans. In Go, the current span is carried in a
context.Context.

It is common to want to capture all the activity of a function call in a span. For
this to work, the function must take a context.Context as a parameter. Add these two
lines to the top of the function:

	ctx, span := trace.StartSpan(ctx, "example.com/Run")
	defer span.End()

StartSpan will create a new top-level span if the context
doesn't contain another span, otherwise it will create a child span.
*/
package trace // import "go.opencensus.io/trace"
  07070100000CBC000081A4000000000000000000000001645E367C00000402000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/go.opencensus.io/trace/evictedqueue.go // Copyright 2019, OpenCensus Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package trace

type evictedQueue struct {
	queue        []interface{}
	capacity     int
	droppedCount int
}

func newEvictedQueue(capacity int) *evictedQueue {
	eq := &evictedQueue{
		capacity: capacity,
		queue:    make([]interface{}, 0),
	}

	return eq
}

func (eq *evictedQueue) add(value interface{}) {
	if len(eq.queue) == eq.capacity {
		eq.queue = eq.queue[1:]
		eq.droppedCount++
	}
	eq.queue = append(eq.queue, value)
}
  07070100000CBD000081A4000000000000000000000001645E367C00000AA1000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/go.opencensus.io/trace/export.go   // Copyright 2017, OpenCensus Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package trace

import (
	"sync"
	"sync/atomic"
	"time"
)

// Exporter is a type for functions that receive sampled trace spans.
//
// The ExportSpan method should be safe for concurrent use and should return
// quickly; if an Exporter takes a significant amount of time to process a
// SpanData, that work should be done on another goroutine.
//
// The SpanData should not be modified, but a pointer to it can be kept.
type Exporter interface {
	ExportSpan(s *SpanData)
}

type exportersMap map[Exporter]struct{}

var (
	exporterMu sync.Mutex
	exporters  atomic.Value
)

// RegisterExporter adds to the list of Exporters that will receive sampled
// trace spans.
//
// Binaries can register exporters, libraries shouldn't register exporters.
func RegisterExporter(e Exporter) {
	exporterMu.Lock()
	new := make(exportersMap)
	if old, ok := exporters.Load().(exportersMap); ok {
		for k, v := range old {
			new[k] = v
		}
	}
	new[e] = struct{}{}
	exporters.Store(new)
	exporterMu.Unlock()
}

// UnregisterExporter removes from the list of Exporters the Exporter that was
// registered with the given name.
func UnregisterExporter(e Exporter) {
	exporterMu.Lock()
	new := make(exportersMap)
	if old, ok := exporters.Load().(exportersMap); ok {
		for k, v := range old {
			new[k] = v
		}
	}
	delete(new, e)
	exporters.Store(new)
	exporterMu.Unlock()
}

// SpanData contains all the information collected by a Span.
type SpanData struct {
	SpanContext
	ParentSpanID SpanID
	SpanKind     int
	Name         string
	StartTime    time.Time
	// The wall clock time of EndTime will be adjusted to always be offset
	// from StartTime by the duration of the span.
	EndTime time.Time
	// The values of Attributes each have type string, bool, or int64.
	Attributes    map[string]interface{}
	Annotations   []Annotation
	MessageEvents []MessageEvent
	Status
	Links                    []Link
	HasRemoteParent          bool
	DroppedAttributeCount    int
	DroppedAnnotationCount   int
	DroppedMessageEventCount int
	DroppedLinkCount         int

	// ChildSpanCount holds the number of child span created for this span.
	ChildSpanCount int
}
   07070100000CBE000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/go.opencensus.io/trace/internal    07070100000CBF000081A4000000000000000000000001645E367C00000320000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/go.opencensus.io/trace/internal/internal.go    // Copyright 2018, OpenCensus Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package internal provides trace internals.
package internal

// IDGenerator allows custom generators for TraceId and SpanId.
type IDGenerator interface {
	NewTraceID() [16]byte
	NewSpanID() [8]byte
}
07070100000CC0000081A4000000000000000000000001645E367C0000062D000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/go.opencensus.io/trace/lrumap.go   // Copyright 2019, OpenCensus Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package trace

import (
	"github.com/golang/groupcache/lru"
)

// A simple lru.Cache wrapper that tracks the keys of the current contents and
// the cumulative number of evicted items.
type lruMap struct {
	cacheKeys    map[lru.Key]bool
	cache        *lru.Cache
	droppedCount int
}

func newLruMap(size int) *lruMap {
	lm := &lruMap{
		cacheKeys:    make(map[lru.Key]bool),
		cache:        lru.New(size),
		droppedCount: 0,
	}
	lm.cache.OnEvicted = func(key lru.Key, value interface{}) {
		delete(lm.cacheKeys, key)
		lm.droppedCount++
	}
	return lm
}

func (lm lruMap) len() int {
	return lm.cache.Len()
}

func (lm lruMap) keys() []interface{} {
	keys := make([]interface{}, 0, len(lm.cacheKeys))
	for k := range lm.cacheKeys {
		keys = append(keys, k)
	}
	return keys
}

func (lm *lruMap) add(key, value interface{}) {
	lm.cacheKeys[lru.Key(key)] = true
	lm.cache.Add(lru.Key(key), value)
}

func (lm *lruMap) get(key interface{}) (interface{}, bool) {
	return lm.cache.Get(key)
}
   07070100000CC1000081A4000000000000000000000001645E367C000008D2000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/go.opencensus.io/trace/sampling.go // Copyright 2017, OpenCensus Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package trace

import (
	"encoding/binary"
)

const defaultSamplingProbability = 1e-4

// Sampler decides whether a trace should be sampled and exported.
type Sampler func(SamplingParameters) SamplingDecision

// SamplingParameters contains the values passed to a Sampler.
type SamplingParameters struct {
	ParentContext   SpanContext
	TraceID         TraceID
	SpanID          SpanID
	Name            string
	HasRemoteParent bool
}

// SamplingDecision is the value returned by a Sampler.
type SamplingDecision struct {
	Sample bool
}

// ProbabilitySampler returns a Sampler that samples a given fraction of traces.
//
// It also samples spans whose parents are sampled.
func ProbabilitySampler(fraction float64) Sampler {
	if !(fraction >= 0) {
		fraction = 0
	} else if fraction >= 1 {
		return AlwaysSample()
	}

	traceIDUpperBound := uint64(fraction * (1 << 63))
	return Sampler(func(p SamplingParameters) SamplingDecision {
		if p.ParentContext.IsSampled() {
			return SamplingDecision{Sample: true}
		}
		x := binary.BigEndian.Uint64(p.TraceID[0:8]) >> 1
		return SamplingDecision{Sample: x < traceIDUpperBound}
	})
}

// AlwaysSample returns a Sampler that samples every trace.
// Be careful about using this sampler in a production application with
// significant traffic: a new trace will be started and exported for every
// request.
func AlwaysSample() Sampler {
	return func(p SamplingParameters) SamplingDecision {
		return SamplingDecision{Sample: true}
	}
}

// NeverSample returns a Sampler that samples no traces.
func NeverSample() Sampler {
	return func(p SamplingParameters) SamplingDecision {
		return SamplingDecision{Sample: false}
	}
}
  07070100000CC2000081A4000000000000000000000001645E367C00000D5A000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/go.opencensus.io/trace/spanbucket.go   // Copyright 2017, OpenCensus Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package trace

import (
	"time"
)

// samplePeriod is the minimum time between accepting spans in a single bucket.
const samplePeriod = time.Second

// defaultLatencies contains the default latency bucket bounds.
// TODO: consider defaults, make configurable
var defaultLatencies = [...]time.Duration{
	10 * time.Microsecond,
	100 * time.Microsecond,
	time.Millisecond,
	10 * time.Millisecond,
	100 * time.Millisecond,
	time.Second,
	10 * time.Second,
	time.Minute,
}

// bucket is a container for a set of spans for a particular error code or latency range.
type bucket struct {
	nextTime  time.Time   // next time we can accept a span
	buffer    []*SpanData // circular buffer of spans
	nextIndex int         // location next SpanData should be placed in buffer
	overflow  bool        // whether the circular buffer has wrapped around
}

func makeBucket(bufferSize int) bucket {
	return bucket{
		buffer: make([]*SpanData, bufferSize),
	}
}

// add adds a span to the bucket, if nextTime has been reached.
func (b *bucket) add(s *SpanData) {
	if s.EndTime.Before(b.nextTime) {
		return
	}
	if len(b.buffer) == 0 {
		return
	}
	b.nextTime = s.EndTime.Add(samplePeriod)
	b.buffer[b.nextIndex] = s
	b.nextIndex++
	if b.nextIndex == len(b.buffer) {
		b.nextIndex = 0
		b.overflow = true
	}
}

// size returns the number of spans in the bucket.
func (b *bucket) size() int {
	if b.overflow {
		return len(b.buffer)
	}
	return b.nextIndex
}

// span returns the ith span in the bucket.
func (b *bucket) span(i int) *SpanData {
	if !b.overflow {
		return b.buffer[i]
	}
	if i < len(b.buffer)-b.nextIndex {
		return b.buffer[b.nextIndex+i]
	}
	return b.buffer[b.nextIndex+i-len(b.buffer)]
}

// resize changes the size of the bucket to n, keeping up to n existing spans.
func (b *bucket) resize(n int) {
	cur := b.size()
	newBuffer := make([]*SpanData, n)
	if cur < n {
		for i := 0; i < cur; i++ {
			newBuffer[i] = b.span(i)
		}
		b.buffer = newBuffer
		b.nextIndex = cur
		b.overflow = false
		return
	}
	for i := 0; i < n; i++ {
		newBuffer[i] = b.span(i + cur - n)
	}
	b.buffer = newBuffer
	b.nextIndex = 0
	b.overflow = true
}

// latencyBucket returns the appropriate bucket number for a given latency.
func latencyBucket(latency time.Duration) int {
	i := 0
	for i < len(defaultLatencies) && latency >= defaultLatencies[i] {
		i++
	}
	return i
}

// latencyBucketBounds returns the lower and upper bounds for a latency bucket
// number.
//
// The lower bound is inclusive, the upper bound is exclusive (except for the
// last bucket.)
func latencyBucketBounds(index int) (lower time.Duration, upper time.Duration) {
	if index == 0 {
		return 0, defaultLatencies[index]
	}
	if index == len(defaultLatencies) {
		return defaultLatencies[index-1], 1<<63 - 1
	}
	return defaultLatencies[index-1], defaultLatencies[index]
}
  07070100000CC3000081A4000000000000000000000001645E367C00001DA4000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/go.opencensus.io/trace/spanstore.go    // Copyright 2017, OpenCensus Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package trace

import (
	"sync"
	"time"

	"go.opencensus.io/internal"
)

const (
	maxBucketSize     = 100000
	defaultBucketSize = 10
)

var (
	ssmu       sync.RWMutex // protects spanStores
	spanStores = make(map[string]*spanStore)
)

// This exists purely to avoid exposing internal methods used by z-Pages externally.
type internalOnly struct{}

func init() {
	//TODO(#412): remove
	internal.Trace = &internalOnly{}
}

// ReportActiveSpans returns the active spans for the given name.
func (i internalOnly) ReportActiveSpans(name string) []*SpanData {
	s := spanStoreForName(name)
	if s == nil {
		return nil
	}
	var out []*SpanData
	s.mu.Lock()
	defer s.mu.Unlock()
	for activeSpan := range s.active {
		if s, ok := activeSpan.(*span); ok {
			out = append(out, s.makeSpanData())
		}
	}
	return out
}

// ReportSpansByError returns a sample of error spans.
//
// If code is nonzero, only spans with that status code are returned.
func (i internalOnly) ReportSpansByError(name string, code int32) []*SpanData {
	s := spanStoreForName(name)
	if s == nil {
		return nil
	}
	var out []*SpanData
	s.mu.Lock()
	defer s.mu.Unlock()
	if code != 0 {
		if b, ok := s.errors[code]; ok {
			for _, sd := range b.buffer {
				if sd == nil {
					break
				}
				out = append(out, sd)
			}
		}
	} else {
		for _, b := range s.errors {
			for _, sd := range b.buffer {
				if sd == nil {
					break
				}
				out = append(out, sd)
			}
		}
	}
	return out
}

// ConfigureBucketSizes sets the number of spans to keep per latency and error
// bucket for different span names.
func (i internalOnly) ConfigureBucketSizes(bcs []internal.BucketConfiguration) {
	for _, bc := range bcs {
		latencyBucketSize := bc.MaxRequestsSucceeded
		if latencyBucketSize < 0 {
			latencyBucketSize = 0
		}
		if latencyBucketSize > maxBucketSize {
			latencyBucketSize = maxBucketSize
		}
		errorBucketSize := bc.MaxRequestsErrors
		if errorBucketSize < 0 {
			errorBucketSize = 0
		}
		if errorBucketSize > maxBucketSize {
			errorBucketSize = maxBucketSize
		}
		spanStoreSetSize(bc.Name, latencyBucketSize, errorBucketSize)
	}
}

// ReportSpansPerMethod returns a summary of what spans are being stored for each span name.
func (i internalOnly) ReportSpansPerMethod() map[string]internal.PerMethodSummary {
	out := make(map[string]internal.PerMethodSummary)
	ssmu.RLock()
	defer ssmu.RUnlock()
	for name, s := range spanStores {
		s.mu.Lock()
		p := internal.PerMethodSummary{
			Active: len(s.active),
		}
		for code, b := range s.errors {
			p.ErrorBuckets = append(p.ErrorBuckets, internal.ErrorBucketSummary{
				ErrorCode: code,
				Size:      b.size(),
			})
		}
		for i, b := range s.latency {
			min, max := latencyBucketBounds(i)
			p.LatencyBuckets = append(p.LatencyBuckets, internal.LatencyBucketSummary{
				MinLatency: min,
				MaxLatency: max,
				Size:       b.size(),
			})
		}
		s.mu.Unlock()
		out[name] = p
	}
	return out
}

// ReportSpansByLatency returns a sample of successful spans.
//
// minLatency is the minimum latency of spans to be returned.
// maxLatency, if nonzero, is the maximum latency of spans to be returned.
func (i internalOnly) ReportSpansByLatency(name string, minLatency, maxLatency time.Duration) []*SpanData {
	s := spanStoreForName(name)
	if s == nil {
		return nil
	}
	var out []*SpanData
	s.mu.Lock()
	defer s.mu.Unlock()
	for i, b := range s.latency {
		min, max := latencyBucketBounds(i)
		if i+1 != len(s.latency) && max <= minLatency {
			continue
		}
		if maxLatency != 0 && maxLatency < min {
			continue
		}
		for _, sd := range b.buffer {
			if sd == nil {
				break
			}
			if minLatency != 0 || maxLatency != 0 {
				d := sd.EndTime.Sub(sd.StartTime)
				if d < minLatency {
					continue
				}
				if maxLatency != 0 && d > maxLatency {
					continue
				}
			}
			out = append(out, sd)
		}
	}
	return out
}

// spanStore keeps track of spans stored for a particular span name.
//
// It contains all active spans; a sample of spans for failed requests,
// categorized by error code; and a sample of spans for successful requests,
// bucketed by latency.
type spanStore struct {
	mu                     sync.Mutex // protects everything below.
	active                 map[SpanInterface]struct{}
	errors                 map[int32]*bucket
	latency                []bucket
	maxSpansPerErrorBucket int
}

// newSpanStore creates a span store.
func newSpanStore(name string, latencyBucketSize int, errorBucketSize int) *spanStore {
	s := &spanStore{
		active:                 make(map[SpanInterface]struct{}),
		latency:                make([]bucket, len(defaultLatencies)+1),
		maxSpansPerErrorBucket: errorBucketSize,
	}
	for i := range s.latency {
		s.latency[i] = makeBucket(latencyBucketSize)
	}
	return s
}

// spanStoreForName returns the spanStore for the given name.
//
// It returns nil if it doesn't exist.
func spanStoreForName(name string) *spanStore {
	var s *spanStore
	ssmu.RLock()
	s, _ = spanStores[name]
	ssmu.RUnlock()
	return s
}

// spanStoreForNameCreateIfNew returns the spanStore for the given name.
//
// It creates it if it didn't exist.
func spanStoreForNameCreateIfNew(name string) *spanStore {
	ssmu.RLock()
	s, ok := spanStores[name]
	ssmu.RUnlock()
	if ok {
		return s
	}
	ssmu.Lock()
	defer ssmu.Unlock()
	s, ok = spanStores[name]
	if ok {
		return s
	}
	s = newSpanStore(name, defaultBucketSize, defaultBucketSize)
	spanStores[name] = s
	return s
}

// spanStoreSetSize resizes the spanStore for the given name.
//
// It creates it if it didn't exist.
func spanStoreSetSize(name string, latencyBucketSize int, errorBucketSize int) {
	ssmu.RLock()
	s, ok := spanStores[name]
	ssmu.RUnlock()
	if ok {
		s.resize(latencyBucketSize, errorBucketSize)
		return
	}
	ssmu.Lock()
	defer ssmu.Unlock()
	s, ok = spanStores[name]
	if ok {
		s.resize(latencyBucketSize, errorBucketSize)
		return
	}
	s = newSpanStore(name, latencyBucketSize, errorBucketSize)
	spanStores[name] = s
}

func (s *spanStore) resize(latencyBucketSize int, errorBucketSize int) {
	s.mu.Lock()
	for i := range s.latency {
		s.latency[i].resize(latencyBucketSize)
	}
	for _, b := range s.errors {
		b.resize(errorBucketSize)
	}
	s.maxSpansPerErrorBucket = errorBucketSize
	s.mu.Unlock()
}

// add adds a span to the active bucket of the spanStore.
func (s *spanStore) add(span SpanInterface) {
	s.mu.Lock()
	s.active[span] = struct{}{}
	s.mu.Unlock()
}

// finished removes a span from the active set, and adds a corresponding
// SpanData to a latency or error bucket.
func (s *spanStore) finished(span SpanInterface, sd *SpanData) {
	latency := sd.EndTime.Sub(sd.StartTime)
	if latency < 0 {
		latency = 0
	}
	code := sd.Status.Code

	s.mu.Lock()
	delete(s.active, span)
	if code == 0 {
		s.latency[latencyBucket(latency)].add(sd)
	} else {
		if s.errors == nil {
			s.errors = make(map[int32]*bucket)
		}
		if b := s.errors[code]; b != nil {
			b.add(sd)
		} else {
			b := makeBucket(s.maxSpansPerErrorBucket)
			s.errors[code] = &b
			b.add(sd)
		}
	}
	s.mu.Unlock()
}
07070100000CC4000081A4000000000000000000000001645E367C00000572000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/go.opencensus.io/trace/status_codes.go // Copyright 2018, OpenCensus Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package trace

// Status codes for use with Span.SetStatus. These correspond to the status
// codes used by gRPC defined here: https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto
const (
	StatusCodeOK                 = 0
	StatusCodeCancelled          = 1
	StatusCodeUnknown            = 2
	StatusCodeInvalidArgument    = 3
	StatusCodeDeadlineExceeded   = 4
	StatusCodeNotFound           = 5
	StatusCodeAlreadyExists      = 6
	StatusCodePermissionDenied   = 7
	StatusCodeResourceExhausted  = 8
	StatusCodeFailedPrecondition = 9
	StatusCodeAborted            = 10
	StatusCodeOutOfRange         = 11
	StatusCodeUnimplemented      = 12
	StatusCodeInternal           = 13
	StatusCodeUnavailable        = 14
	StatusCodeDataLoss           = 15
	StatusCodeUnauthenticated    = 16
)
  07070100000CC5000081A4000000000000000000000001645E367C00004308000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/go.opencensus.io/trace/trace.go    // Copyright 2017, OpenCensus Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package trace

import (
	"context"
	crand "crypto/rand"
	"encoding/binary"
	"fmt"
	"math/rand"
	"sync"
	"sync/atomic"
	"time"

	"go.opencensus.io/internal"
	"go.opencensus.io/trace/tracestate"
)

type tracer struct{}

var _ Tracer = &tracer{}

// Span represents a span of a trace.  It has an associated SpanContext, and
// stores data accumulated while the span is active.
//
// Ideally users should interact with Spans by calling the functions in this
// package that take a Context parameter.
type span struct {
	// data contains information recorded about the span.
	//
	// It will be non-nil if we are exporting the span or recording events for it.
	// Otherwise, data is nil, and the Span is simply a carrier for the
	// SpanContext, so that the trace ID is propagated.
	data        *SpanData
	mu          sync.Mutex // protects the contents of *data (but not the pointer value.)
	spanContext SpanContext

	// lruAttributes are capped at configured limit. When the capacity is reached an oldest entry
	// is removed to create room for a new entry.
	lruAttributes *lruMap

	// annotations are stored in FIFO queue capped by configured limit.
	annotations *evictedQueue

	// messageEvents are stored in FIFO queue capped by configured limit.
	messageEvents *evictedQueue

	// links are stored in FIFO queue capped by configured limit.
	links *evictedQueue

	// spanStore is the spanStore this span belongs to, if any, otherwise it is nil.
	*spanStore
	endOnce sync.Once

	executionTracerTaskEnd func() // ends the execution tracer span
}

// IsRecordingEvents returns true if events are being recorded for this span.
// Use this check to avoid computing expensive annotations when they will never
// be used.
func (s *span) IsRecordingEvents() bool {
	if s == nil {
		return false
	}
	return s.data != nil
}

// TraceOptions contains options associated with a trace span.
type TraceOptions uint32

// IsSampled returns true if the span will be exported.
func (sc SpanContext) IsSampled() bool {
	return sc.TraceOptions.IsSampled()
}

// setIsSampled sets the TraceOptions bit that determines whether the span will be exported.
func (sc *SpanContext) setIsSampled(sampled bool) {
	if sampled {
		sc.TraceOptions |= 1
	} else {
		sc.TraceOptions &= ^TraceOptions(1)
	}
}

// IsSampled returns true if the span will be exported.
func (t TraceOptions) IsSampled() bool {
	return t&1 == 1
}

// SpanContext contains the state that must propagate across process boundaries.
//
// SpanContext is not an implementation of context.Context.
// TODO: add reference to external Census docs for SpanContext.
type SpanContext struct {
	TraceID      TraceID
	SpanID       SpanID
	TraceOptions TraceOptions
	Tracestate   *tracestate.Tracestate
}

type contextKey struct{}

// FromContext returns the Span stored in a context, or nil if there isn't one.
func (t *tracer) FromContext(ctx context.Context) *Span {
	s, _ := ctx.Value(contextKey{}).(*Span)
	return s
}

// NewContext returns a new context with the given Span attached.
func (t *tracer) NewContext(parent context.Context, s *Span) context.Context {
	return context.WithValue(parent, contextKey{}, s)
}

// All available span kinds. Span kind must be either one of these values.
const (
	SpanKindUnspecified = iota
	SpanKindServer
	SpanKindClient
)

// StartOptions contains options concerning how a span is started.
type StartOptions struct {
	// Sampler to consult for this Span. If provided, it is always consulted.
	//
	// If not provided, then the behavior differs based on whether
	// the parent of this Span is remote, local, or there is no parent.
	// In the case of a remote parent or no parent, the
	// default sampler (see Config) will be consulted. Otherwise,
	// when there is a non-remote parent, no new sampling decision will be made:
	// we will preserve the sampling of the parent.
	Sampler Sampler

	// SpanKind represents the kind of a span. If none is set,
	// SpanKindUnspecified is used.
	SpanKind int
}

// StartOption apply changes to StartOptions.
type StartOption func(*StartOptions)

// WithSpanKind makes new spans to be created with the given kind.
func WithSpanKind(spanKind int) StartOption {
	return func(o *StartOptions) {
		o.SpanKind = spanKind
	}
}

// WithSampler makes new spans to be be created with a custom sampler.
// Otherwise, the global sampler is used.
func WithSampler(sampler Sampler) StartOption {
	return func(o *StartOptions) {
		o.Sampler = sampler
	}
}

// StartSpan starts a new child span of the current span in the context. If
// there is no span in the context, creates a new trace and span.
//
// Returned context contains the newly created span. You can use it to
// propagate the returned span in process.
func (t *tracer) StartSpan(ctx context.Context, name string, o ...StartOption) (context.Context, *Span) {
	var opts StartOptions
	var parent SpanContext
	if p := t.FromContext(ctx); p != nil {
		if ps, ok := p.internal.(*span); ok {
			ps.addChild()
		}
		parent = p.SpanContext()
	}
	for _, op := range o {
		op(&opts)
	}
	span := startSpanInternal(name, parent != SpanContext{}, parent, false, opts)

	ctx, end := startExecutionTracerTask(ctx, name)
	span.executionTracerTaskEnd = end
	extSpan := NewSpan(span)
	return t.NewContext(ctx, extSpan), extSpan
}

// StartSpanWithRemoteParent starts a new child span of the span from the given parent.
//
// If the incoming context contains a parent, it ignores. StartSpanWithRemoteParent is
// preferred for cases where the parent is propagated via an incoming request.
//
// Returned context contains the newly created span. You can use it to
// propagate the returned span in process.
func (t *tracer) StartSpanWithRemoteParent(ctx context.Context, name string, parent SpanContext, o ...StartOption) (context.Context, *Span) {
	var opts StartOptions
	for _, op := range o {
		op(&opts)
	}
	span := startSpanInternal(name, parent != SpanContext{}, parent, true, opts)
	ctx, end := startExecutionTracerTask(ctx, name)
	span.executionTracerTaskEnd = end
	extSpan := NewSpan(span)
	return t.NewContext(ctx, extSpan), extSpan
}

func startSpanInternal(name string, hasParent bool, parent SpanContext, remoteParent bool, o StartOptions) *span {
	s := &span{}
	s.spanContext = parent

	cfg := config.Load().(*Config)
	if gen, ok := cfg.IDGenerator.(*defaultIDGenerator); ok {
		// lazy initialization
		gen.init()
	}

	if !hasParent {
		s.spanContext.TraceID = cfg.IDGenerator.NewTraceID()
	}
	s.spanContext.SpanID = cfg.IDGenerator.NewSpanID()
	sampler := cfg.DefaultSampler

	if !hasParent || remoteParent || o.Sampler != nil {
		// If this span is the child of a local span and no Sampler is set in the
		// options, keep the parent's TraceOptions.
		//
		// Otherwise, consult the Sampler in the options if it is non-nil, otherwise
		// the default sampler.
		if o.Sampler != nil {
			sampler = o.Sampler
		}
		s.spanContext.setIsSampled(sampler(SamplingParameters{
			ParentContext:   parent,
			TraceID:         s.spanContext.TraceID,
			SpanID:          s.spanContext.SpanID,
			Name:            name,
			HasRemoteParent: remoteParent}).Sample)
	}

	if !internal.LocalSpanStoreEnabled && !s.spanContext.IsSampled() {
		return s
	}

	s.data = &SpanData{
		SpanContext:     s.spanContext,
		StartTime:       time.Now(),
		SpanKind:        o.SpanKind,
		Name:            name,
		HasRemoteParent: remoteParent,
	}
	s.lruAttributes = newLruMap(cfg.MaxAttributesPerSpan)
	s.annotations = newEvictedQueue(cfg.MaxAnnotationEventsPerSpan)
	s.messageEvents = newEvictedQueue(cfg.MaxMessageEventsPerSpan)
	s.links = newEvictedQueue(cfg.MaxLinksPerSpan)

	if hasParent {
		s.data.ParentSpanID = parent.SpanID
	}
	if internal.LocalSpanStoreEnabled {
		var ss *spanStore
		ss = spanStoreForNameCreateIfNew(name)
		if ss != nil {
			s.spanStore = ss
			ss.add(s)
		}
	}

	return s
}

// End ends the span.
func (s *span) End() {
	if s == nil {
		return
	}
	if s.executionTracerTaskEnd != nil {
		s.executionTracerTaskEnd()
	}
	if !s.IsRecordingEvents() {
		return
	}
	s.endOnce.Do(func() {
		exp, _ := exporters.Load().(exportersMap)
		mustExport := s.spanContext.IsSampled() && len(exp) > 0
		if s.spanStore != nil || mustExport {
			sd := s.makeSpanData()
			sd.EndTime = internal.MonotonicEndTime(sd.StartTime)
			if s.spanStore != nil {
				s.spanStore.finished(s, sd)
			}
			if mustExport {
				for e := range exp {
					e.ExportSpan(sd)
				}
			}
		}
	})
}

// makeSpanData produces a SpanData representing the current state of the Span.
// It requires that s.data is non-nil.
func (s *span) makeSpanData() *SpanData {
	var sd SpanData
	s.mu.Lock()
	sd = *s.data
	if s.lruAttributes.len() > 0 {
		sd.Attributes = s.lruAttributesToAttributeMap()
		sd.DroppedAttributeCount = s.lruAttributes.droppedCount
	}
	if len(s.annotations.queue) > 0 {
		sd.Annotations = s.interfaceArrayToAnnotationArray()
		sd.DroppedAnnotationCount = s.annotations.droppedCount
	}
	if len(s.messageEvents.queue) > 0 {
		sd.MessageEvents = s.interfaceArrayToMessageEventArray()
		sd.DroppedMessageEventCount = s.messageEvents.droppedCount
	}
	if len(s.links.queue) > 0 {
		sd.Links = s.interfaceArrayToLinksArray()
		sd.DroppedLinkCount = s.links.droppedCount
	}
	s.mu.Unlock()
	return &sd
}

// SpanContext returns the SpanContext of the span.
func (s *span) SpanContext() SpanContext {
	if s == nil {
		return SpanContext{}
	}
	return s.spanContext
}

// SetName sets the name of the span, if it is recording events.
func (s *span) SetName(name string) {
	if !s.IsRecordingEvents() {
		return
	}
	s.mu.Lock()
	s.data.Name = name
	s.mu.Unlock()
}

// SetStatus sets the status of the span, if it is recording events.
func (s *span) SetStatus(status Status) {
	if !s.IsRecordingEvents() {
		return
	}
	s.mu.Lock()
	s.data.Status = status
	s.mu.Unlock()
}

func (s *span) interfaceArrayToLinksArray() []Link {
	linksArr := make([]Link, 0, len(s.links.queue))
	for _, value := range s.links.queue {
		linksArr = append(linksArr, value.(Link))
	}
	return linksArr
}

func (s *span) interfaceArrayToMessageEventArray() []MessageEvent {
	messageEventArr := make([]MessageEvent, 0, len(s.messageEvents.queue))
	for _, value := range s.messageEvents.queue {
		messageEventArr = append(messageEventArr, value.(MessageEvent))
	}
	return messageEventArr
}

func (s *span) interfaceArrayToAnnotationArray() []Annotation {
	annotationArr := make([]Annotation, 0, len(s.annotations.queue))
	for _, value := range s.annotations.queue {
		annotationArr = append(annotationArr, value.(Annotation))
	}
	return annotationArr
}

func (s *span) lruAttributesToAttributeMap() map[string]interface{} {
	attributes := make(map[string]interface{}, s.lruAttributes.len())
	for _, key := range s.lruAttributes.keys() {
		value, ok := s.lruAttributes.get(key)
		if ok {
			keyStr := key.(string)
			attributes[keyStr] = value
		}
	}
	return attributes
}

func (s *span) copyToCappedAttributes(attributes []Attribute) {
	for _, a := range attributes {
		s.lruAttributes.add(a.key, a.value)
	}
}

func (s *span) addChild() {
	if !s.IsRecordingEvents() {
		return
	}
	s.mu.Lock()
	s.data.ChildSpanCount++
	s.mu.Unlock()
}

// AddAttributes sets attributes in the span.
//
// Existing attributes whose keys appear in the attributes parameter are overwritten.
func (s *span) AddAttributes(attributes ...Attribute) {
	if !s.IsRecordingEvents() {
		return
	}
	s.mu.Lock()
	s.copyToCappedAttributes(attributes)
	s.mu.Unlock()
}

func (s *span) printStringInternal(attributes []Attribute, str string) {
	now := time.Now()
	var am map[string]interface{}
	if len(attributes) != 0 {
		am = make(map[string]interface{}, len(attributes))
		for _, attr := range attributes {
			am[attr.key] = attr.value
		}
	}
	s.mu.Lock()
	s.annotations.add(Annotation{
		Time:       now,
		Message:    str,
		Attributes: am,
	})
	s.mu.Unlock()
}

// Annotate adds an annotation with attributes.
// Attributes can be nil.
func (s *span) Annotate(attributes []Attribute, str string) {
	if !s.IsRecordingEvents() {
		return
	}
	s.printStringInternal(attributes, str)
}

// Annotatef adds an annotation with attributes.
func (s *span) Annotatef(attributes []Attribute, format string, a ...interface{}) {
	if !s.IsRecordingEvents() {
		return
	}
	s.printStringInternal(attributes, fmt.Sprintf(format, a...))
}

// AddMessageSendEvent adds a message send event to the span.
//
// messageID is an identifier for the message, which is recommended to be
// unique in this span and the same between the send event and the receive
// event (this allows to identify a message between the sender and receiver).
// For example, this could be a sequence id.
func (s *span) AddMessageSendEvent(messageID, uncompressedByteSize, compressedByteSize int64) {
	if !s.IsRecordingEvents() {
		return
	}
	now := time.Now()
	s.mu.Lock()
	s.messageEvents.add(MessageEvent{
		Time:                 now,
		EventType:            MessageEventTypeSent,
		MessageID:            messageID,
		UncompressedByteSize: uncompressedByteSize,
		CompressedByteSize:   compressedByteSize,
	})
	s.mu.Unlock()
}

// AddMessageReceiveEvent adds a message receive event to the span.
//
// messageID is an identifier for the message, which is recommended to be
// unique in this span and the same between the send event and the receive
// event (this allows to identify a message between the sender and receiver).
// For example, this could be a sequence id.
func (s *span) AddMessageReceiveEvent(messageID, uncompressedByteSize, compressedByteSize int64) {
	if !s.IsRecordingEvents() {
		return
	}
	now := time.Now()
	s.mu.Lock()
	s.messageEvents.add(MessageEvent{
		Time:                 now,
		EventType:            MessageEventTypeRecv,
		MessageID:            messageID,
		UncompressedByteSize: uncompressedByteSize,
		CompressedByteSize:   compressedByteSize,
	})
	s.mu.Unlock()
}

// AddLink adds a link to the span.
func (s *span) AddLink(l Link) {
	if !s.IsRecordingEvents() {
		return
	}
	s.mu.Lock()
	s.links.add(l)
	s.mu.Unlock()
}

func (s *span) String() string {
	if s == nil {
		return "<nil>"
	}
	if s.data == nil {
		return fmt.Sprintf("span %s", s.spanContext.SpanID)
	}
	s.mu.Lock()
	str := fmt.Sprintf("span %s %q", s.spanContext.SpanID, s.data.Name)
	s.mu.Unlock()
	return str
}

var config atomic.Value // access atomically

func init() {
	config.Store(&Config{
		DefaultSampler:             ProbabilitySampler(defaultSamplingProbability),
		IDGenerator:                &defaultIDGenerator{},
		MaxAttributesPerSpan:       DefaultMaxAttributesPerSpan,
		MaxAnnotationEventsPerSpan: DefaultMaxAnnotationEventsPerSpan,
		MaxMessageEventsPerSpan:    DefaultMaxMessageEventsPerSpan,
		MaxLinksPerSpan:            DefaultMaxLinksPerSpan,
	})
}

type defaultIDGenerator struct {
	sync.Mutex

	// Please keep these as the first fields
	// so that these 8 byte fields will be aligned on addresses
	// divisible by 8, on both 32-bit and 64-bit machines when
	// performing atomic increments and accesses.
	// See:
	// * https://github.com/census-instrumentation/opencensus-go/issues/587
	// * https://github.com/census-instrumentation/opencensus-go/issues/865
	// * https://golang.org/pkg/sync/atomic/#pkg-note-BUG
	nextSpanID uint64
	spanIDInc  uint64

	traceIDAdd  [2]uint64
	traceIDRand *rand.Rand

	initOnce sync.Once
}

// init initializes the generator on the first call to avoid consuming entropy
// unnecessarily.
func (gen *defaultIDGenerator) init() {
	gen.initOnce.Do(func() {
		// initialize traceID and spanID generators.
		var rngSeed int64
		for _, p := range []interface{}{
			&rngSeed, &gen.traceIDAdd, &gen.nextSpanID, &gen.spanIDInc,
		} {
			binary.Read(crand.Reader, binary.LittleEndian, p)
		}
		gen.traceIDRand = rand.New(rand.NewSource(rngSeed))
		gen.spanIDInc |= 1
	})
}

// NewSpanID returns a non-zero span ID from a randomly-chosen sequence.
func (gen *defaultIDGenerator) NewSpanID() [8]byte {
	var id uint64
	for id == 0 {
		id = atomic.AddUint64(&gen.nextSpanID, gen.spanIDInc)
	}
	var sid [8]byte
	binary.LittleEndian.PutUint64(sid[:], id)
	return sid
}

// NewTraceID returns a non-zero trace ID from a randomly-chosen sequence.
// mu should be held while this function is called.
func (gen *defaultIDGenerator) NewTraceID() [16]byte {
	var tid [16]byte
	// Construct the trace ID from two outputs of traceIDRand, with a constant
	// added to each half for additional entropy.
	gen.Lock()
	binary.LittleEndian.PutUint64(tid[0:8], gen.traceIDRand.Uint64()+gen.traceIDAdd[0])
	binary.LittleEndian.PutUint64(tid[8:16], gen.traceIDRand.Uint64()+gen.traceIDAdd[1])
	gen.Unlock()
	return tid
}
07070100000CC6000081A4000000000000000000000001645E367C00002362000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/go.opencensus.io/trace/trace_api.go    // Copyright 2020, OpenCensus Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package trace

import (
	"context"
)

// DefaultTracer is the tracer used when package-level exported functions are invoked.
var DefaultTracer Tracer = &tracer{}

// Tracer can start spans and access context functions.
type Tracer interface {

	// StartSpan starts a new child span of the current span in the context. If
	// there is no span in the context, creates a new trace and span.
	//
	// Returned context contains the newly created span. You can use it to
	// propagate the returned span in process.
	StartSpan(ctx context.Context, name string, o ...StartOption) (context.Context, *Span)

	// StartSpanWithRemoteParent starts a new child span of the span from the given parent.
	//
	// If the incoming context contains a parent, it ignores. StartSpanWithRemoteParent is
	// preferred for cases where the parent is propagated via an incoming request.
	//
	// Returned context contains the newly created span. You can use it to
	// propagate the returned span in process.
	StartSpanWithRemoteParent(ctx context.Context, name string, parent SpanContext, o ...StartOption) (context.Context, *Span)

	// FromContext returns the Span stored in a context, or nil if there isn't one.
	FromContext(ctx context.Context) *Span

	// NewContext returns a new context with the given Span attached.
	NewContext(parent context.Context, s *Span) context.Context
}

// StartSpan starts a new child span of the current span in the context. If
// there is no span in the context, creates a new trace and span.
//
// Returned context contains the newly created span. You can use it to
// propagate the returned span in process.
func StartSpan(ctx context.Context, name string, o ...StartOption) (context.Context, *Span) {
	return DefaultTracer.StartSpan(ctx, name, o...)
}

// StartSpanWithRemoteParent starts a new child span of the span from the given parent.
//
// If the incoming context contains a parent, it ignores. StartSpanWithRemoteParent is
// preferred for cases where the parent is propagated via an incoming request.
//
// Returned context contains the newly created span. You can use it to
// propagate the returned span in process.
func StartSpanWithRemoteParent(ctx context.Context, name string, parent SpanContext, o ...StartOption) (context.Context, *Span) {
	return DefaultTracer.StartSpanWithRemoteParent(ctx, name, parent, o...)
}

// FromContext returns the Span stored in a context, or a Span that is not
// recording events if there isn't one.
func FromContext(ctx context.Context) *Span {
	return DefaultTracer.FromContext(ctx)
}

// NewContext returns a new context with the given Span attached.
func NewContext(parent context.Context, s *Span) context.Context {
	return DefaultTracer.NewContext(parent, s)
}

// SpanInterface represents a span of a trace.  It has an associated SpanContext, and
// stores data accumulated while the span is active.
//
// Ideally users should interact with Spans by calling the functions in this
// package that take a Context parameter.
type SpanInterface interface {

	// IsRecordingEvents returns true if events are being recorded for this span.
	// Use this check to avoid computing expensive annotations when they will never
	// be used.
	IsRecordingEvents() bool

	// End ends the span.
	End()

	// SpanContext returns the SpanContext of the span.
	SpanContext() SpanContext

	// SetName sets the name of the span, if it is recording events.
	SetName(name string)

	// SetStatus sets the status of the span, if it is recording events.
	SetStatus(status Status)

	// AddAttributes sets attributes in the span.
	//
	// Existing attributes whose keys appear in the attributes parameter are overwritten.
	AddAttributes(attributes ...Attribute)

	// Annotate adds an annotation with attributes.
	// Attributes can be nil.
	Annotate(attributes []Attribute, str string)

	// Annotatef adds an annotation with attributes.
	Annotatef(attributes []Attribute, format string, a ...interface{})

	// AddMessageSendEvent adds a message send event to the span.
	//
	// messageID is an identifier for the message, which is recommended to be
	// unique in this span and the same between the send event and the receive
	// event (this allows to identify a message between the sender and receiver).
	// For example, this could be a sequence id.
	AddMessageSendEvent(messageID, uncompressedByteSize, compressedByteSize int64)

	// AddMessageReceiveEvent adds a message receive event to the span.
	//
	// messageID is an identifier for the message, which is recommended to be
	// unique in this span and the same between the send event and the receive
	// event (this allows to identify a message between the sender and receiver).
	// For example, this could be a sequence id.
	AddMessageReceiveEvent(messageID, uncompressedByteSize, compressedByteSize int64)

	// AddLink adds a link to the span.
	AddLink(l Link)

	// String prints a string representation of a span.
	String() string
}

// NewSpan is a convenience function for creating a *Span out of a *span
func NewSpan(s SpanInterface) *Span {
	return &Span{internal: s}
}

// Span is a struct wrapper around the SpanInt interface, which allows correctly handling
// nil spans, while also allowing the SpanInterface implementation to be swapped out.
type Span struct {
	internal SpanInterface
}

// Internal returns the underlying implementation of the Span
func (s *Span) Internal() SpanInterface {
	return s.internal
}

// IsRecordingEvents returns true if events are being recorded for this span.
// Use this check to avoid computing expensive annotations when they will never
// be used.
func (s *Span) IsRecordingEvents() bool {
	if s == nil {
		return false
	}
	return s.internal.IsRecordingEvents()
}

// End ends the span.
func (s *Span) End() {
	if s == nil {
		return
	}
	s.internal.End()
}

// SpanContext returns the SpanContext of the span.
func (s *Span) SpanContext() SpanContext {
	if s == nil {
		return SpanContext{}
	}
	return s.internal.SpanContext()
}

// SetName sets the name of the span, if it is recording events.
func (s *Span) SetName(name string) {
	if !s.IsRecordingEvents() {
		return
	}
	s.internal.SetName(name)
}

// SetStatus sets the status of the span, if it is recording events.
func (s *Span) SetStatus(status Status) {
	if !s.IsRecordingEvents() {
		return
	}
	s.internal.SetStatus(status)
}

// AddAttributes sets attributes in the span.
//
// Existing attributes whose keys appear in the attributes parameter are overwritten.
func (s *Span) AddAttributes(attributes ...Attribute) {
	if !s.IsRecordingEvents() {
		return
	}
	s.internal.AddAttributes(attributes...)
}

// Annotate adds an annotation with attributes.
// Attributes can be nil.
func (s *Span) Annotate(attributes []Attribute, str string) {
	if !s.IsRecordingEvents() {
		return
	}
	s.internal.Annotate(attributes, str)
}

// Annotatef adds an annotation with attributes.
func (s *Span) Annotatef(attributes []Attribute, format string, a ...interface{}) {
	if !s.IsRecordingEvents() {
		return
	}
	s.internal.Annotatef(attributes, format, a...)
}

// AddMessageSendEvent adds a message send event to the span.
//
// messageID is an identifier for the message, which is recommended to be
// unique in this span and the same between the send event and the receive
// event (this allows to identify a message between the sender and receiver).
// For example, this could be a sequence id.
func (s *Span) AddMessageSendEvent(messageID, uncompressedByteSize, compressedByteSize int64) {
	if !s.IsRecordingEvents() {
		return
	}
	s.internal.AddMessageSendEvent(messageID, uncompressedByteSize, compressedByteSize)
}

// AddMessageReceiveEvent adds a message receive event to the span.
//
// messageID is an identifier for the message, which is recommended to be
// unique in this span and the same between the send event and the receive
// event (this allows to identify a message between the sender and receiver).
// For example, this could be a sequence id.
func (s *Span) AddMessageReceiveEvent(messageID, uncompressedByteSize, compressedByteSize int64) {
	if !s.IsRecordingEvents() {
		return
	}
	s.internal.AddMessageReceiveEvent(messageID, uncompressedByteSize, compressedByteSize)
}

// AddLink adds a link to the span.
func (s *Span) AddLink(l Link) {
	if !s.IsRecordingEvents() {
		return
	}
	s.internal.AddLink(l)
}

// String prints a string representation of a span.
func (s *Span) String() string {
	if s == nil {
		return "<nil>"
	}
	return s.internal.String()
}
  07070100000CC7000081A4000000000000000000000001645E367C000003C0000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/go.opencensus.io/trace/trace_go11.go   // Copyright 2018, OpenCensus Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

//go:build go1.11
// +build go1.11

package trace

import (
	"context"
	t "runtime/trace"
)

func startExecutionTracerTask(ctx context.Context, name string) (context.Context, func()) {
	if !t.IsEnabled() {
		// Avoid additional overhead if
		// runtime/trace is not enabled.
		return ctx, func() {}
	}
	nctx, task := t.NewTask(ctx, name)
	return nctx, task.End
}
07070100000CC8000081A4000000000000000000000001645E367C00000316000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/go.opencensus.io/trace/trace_nongo11.go    // Copyright 2018, OpenCensus Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

//go:build !go1.11
// +build !go1.11

package trace

import (
	"context"
)

func startExecutionTracerTask(ctx context.Context, name string) (context.Context, func()) {
	return ctx, func() {}
}
  07070100000CC9000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/go.opencensus.io/trace/tracestate  07070100000CCA000081A4000000000000000000000001645E367C00001250000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/go.opencensus.io/trace/tracestate/tracestate.go    // Copyright 2018, OpenCensus Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package tracestate implements support for the Tracestate header of the
// W3C TraceContext propagation format.
package tracestate

import (
	"fmt"
	"regexp"
)

const (
	keyMaxSize       = 256
	valueMaxSize     = 256
	maxKeyValuePairs = 32
)

const (
	keyWithoutVendorFormat = `[a-z][_0-9a-z\-\*\/]{0,255}`
	keyWithVendorFormat    = `[a-z][_0-9a-z\-\*\/]{0,240}@[a-z][_0-9a-z\-\*\/]{0,13}`
	keyFormat              = `(` + keyWithoutVendorFormat + `)|(` + keyWithVendorFormat + `)`
	valueFormat            = `[\x20-\x2b\x2d-\x3c\x3e-\x7e]{0,255}[\x21-\x2b\x2d-\x3c\x3e-\x7e]`
)

var keyValidationRegExp = regexp.MustCompile(`^(` + keyFormat + `)$`)
var valueValidationRegExp = regexp.MustCompile(`^(` + valueFormat + `)$`)

// Tracestate represents tracing-system specific context in a list of key-value pairs. Tracestate allows different
// vendors propagate additional information and inter-operate with their legacy Id formats.
type Tracestate struct {
	entries []Entry
}

// Entry represents one key-value pair in a list of key-value pair of Tracestate.
type Entry struct {
	// Key is an opaque string up to 256 characters printable. It MUST begin with a lowercase letter,
	// and can only contain lowercase letters a-z, digits 0-9, underscores _, dashes -, asterisks *, and
	// forward slashes /.
	Key string

	// Value is an opaque string up to 256 characters printable ASCII RFC0020 characters (i.e., the
	// range 0x20 to 0x7E) except comma , and =.
	Value string
}

// Entries returns a slice of Entry.
func (ts *Tracestate) Entries() []Entry {
	if ts == nil {
		return nil
	}
	return ts.entries
}

func (ts *Tracestate) remove(key string) *Entry {
	for index, entry := range ts.entries {
		if entry.Key == key {
			ts.entries = append(ts.entries[:index], ts.entries[index+1:]...)
			return &entry
		}
	}
	return nil
}

func (ts *Tracestate) add(entries []Entry) error {
	for _, entry := range entries {
		ts.remove(entry.Key)
	}
	if len(ts.entries)+len(entries) > maxKeyValuePairs {
		return fmt.Errorf("adding %d key-value pairs to current %d pairs exceeds the limit of %d",
			len(entries), len(ts.entries), maxKeyValuePairs)
	}
	ts.entries = append(entries, ts.entries...)
	return nil
}

func isValid(entry Entry) bool {
	return keyValidationRegExp.MatchString(entry.Key) &&
		valueValidationRegExp.MatchString(entry.Value)
}

func containsDuplicateKey(entries ...Entry) (string, bool) {
	keyMap := make(map[string]int)
	for _, entry := range entries {
		if _, ok := keyMap[entry.Key]; ok {
			return entry.Key, true
		}
		keyMap[entry.Key] = 1
	}
	return "", false
}

func areEntriesValid(entries ...Entry) (*Entry, bool) {
	for _, entry := range entries {
		if !isValid(entry) {
			return &entry, false
		}
	}
	return nil, true
}

// New creates a Tracestate object from a parent and/or entries (key-value pair).
// Entries from the parent are copied if present. The entries passed to this function
// are inserted in front of those copied from the parent. If an entry copied from the
// parent contains the same key as one of the entry in entries then the entry copied
// from the parent is removed. See add func.
//
// An error is returned with nil Tracestate if
//  1. one or more entry in entries is invalid.
//  2. two or more entries in the input entries have the same key.
//  3. the number of entries combined from the parent and the input entries exceeds maxKeyValuePairs.
//     (duplicate entry is counted only once).
func New(parent *Tracestate, entries ...Entry) (*Tracestate, error) {
	if parent == nil && len(entries) == 0 {
		return nil, nil
	}
	if entry, ok := areEntriesValid(entries...); !ok {
		return nil, fmt.Errorf("key-value pair {%s, %s} is invalid", entry.Key, entry.Value)
	}

	if key, duplicate := containsDuplicateKey(entries...); duplicate {
		return nil, fmt.Errorf("contains duplicate keys (%s)", key)
	}

	tracestate := Tracestate{}

	if parent != nil && len(parent.entries) > 0 {
		tracestate.entries = append([]Entry{}, parent.entries...)
	}

	err := tracestate.add(entries)
	if err != nil {
		return nil, err
	}
	return &tracestate, nil
}
07070100000CCB000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002600000000elemental-cli-0.3.1/vendor/golang.org 07070100000CCC000041ED00000000000000000000000B645E367C00000000000000000000000000000000000000000000002800000000elemental-cli-0.3.1/vendor/golang.org/x   07070100000CCD000041ED00000000000000000000000C645E367C00000000000000000000000000000000000000000000002F00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto    07070100000CCE000081A4000000000000000000000001645E367C000005C7000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/LICENSE    Copyright (c) 2009 The Go Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 07070100000CCF000081A4000000000000000000000001645E367C00000517000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/PATENTS    Additional IP Rights Grant (Patents)

"This implementation" means the copyrightable works distributed by
Google as part of the Go project.

Google hereby grants to You a perpetual, worldwide, non-exclusive,
no-charge, royalty-free, irrevocable (except as stated in this section)
patent license to make, have made, use, offer to sell, sell, import,
transfer and otherwise run, modify and propagate the contents of this
implementation of Go, where such license applies only to those patent
claims, both currently owned or controlled by Google and acquired in
the future, licensable by Google that are necessarily infringed by this
implementation of Go.  This grant does not include claims that would be
infringed only as a consequence of further modification of this
implementation.  If you or your agent or exclusive licensee institute or
order or agree to the institution of patent litigation against any
entity (including a cross-claim or counterclaim in a lawsuit) alleging
that this implementation of Go or any code incorporated within this
implementation of Go constitutes direct or contributory patent
infringement, or inducement of patent infringement, then any patent
rights granted to you under this License for this implementation of Go
shall terminate as of the date such litigation is filed.
 07070100000CD0000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/bcrypt 07070100000CD1000081A4000000000000000000000001645E367C00000331000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/bcrypt/base64.go   // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package bcrypt

import "encoding/base64"

const alphabet = "./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"

var bcEncoding = base64.NewEncoding(alphabet)

func base64Encode(src []byte) []byte {
	n := bcEncoding.EncodedLen(len(src))
	dst := make([]byte, n)
	bcEncoding.Encode(dst, src)
	for dst[n-1] == '=' {
		n--
	}
	return dst[:n]
}

func base64Decode(src []byte) ([]byte, error) {
	numOfEquals := 4 - (len(src) % 4)
	for i := 0; i < numOfEquals; i++ {
		src = append(src, '=')
	}

	dst := make([]byte, bcEncoding.DecodedLen(len(src)))
	n, err := bcEncoding.Decode(dst, src)
	if err != nil {
		return nil, err
	}
	return dst[:n], nil
}
   07070100000CD2000081A4000000000000000000000001645E367C0000208E000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/bcrypt/bcrypt.go   // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package bcrypt implements Provos and Mazières's bcrypt adaptive hashing
// algorithm. See http://www.usenix.org/event/usenix99/provos/provos.pdf
package bcrypt // import "golang.org/x/crypto/bcrypt"

// The code is a port of Provos and Mazières's C implementation.
import (
	"crypto/rand"
	"crypto/subtle"
	"errors"
	"fmt"
	"io"
	"strconv"

	"golang.org/x/crypto/blowfish"
)

const (
	MinCost     int = 4  // the minimum allowable cost as passed in to GenerateFromPassword
	MaxCost     int = 31 // the maximum allowable cost as passed in to GenerateFromPassword
	DefaultCost int = 10 // the cost that will actually be set if a cost below MinCost is passed into GenerateFromPassword
)

// The error returned from CompareHashAndPassword when a password and hash do
// not match.
var ErrMismatchedHashAndPassword = errors.New("crypto/bcrypt: hashedPassword is not the hash of the given password")

// The error returned from CompareHashAndPassword when a hash is too short to
// be a bcrypt hash.
var ErrHashTooShort = errors.New("crypto/bcrypt: hashedSecret too short to be a bcrypted password")

// The error returned from CompareHashAndPassword when a hash was created with
// a bcrypt algorithm newer than this implementation.
type HashVersionTooNewError byte

func (hv HashVersionTooNewError) Error() string {
	return fmt.Sprintf("crypto/bcrypt: bcrypt algorithm version '%c' requested is newer than current version '%c'", byte(hv), majorVersion)
}

// The error returned from CompareHashAndPassword when a hash starts with something other than '$'
type InvalidHashPrefixError byte

func (ih InvalidHashPrefixError) Error() string {
	return fmt.Sprintf("crypto/bcrypt: bcrypt hashes must start with '$', but hashedSecret started with '%c'", byte(ih))
}

type InvalidCostError int

func (ic InvalidCostError) Error() string {
	return fmt.Sprintf("crypto/bcrypt: cost %d is outside allowed range (%d,%d)", int(ic), MinCost, MaxCost)
}

const (
	majorVersion       = '2'
	minorVersion       = 'a'
	maxSaltSize        = 16
	maxCryptedHashSize = 23
	encodedSaltSize    = 22
	encodedHashSize    = 31
	minHashSize        = 59
)

// magicCipherData is an IV for the 64 Blowfish encryption calls in
// bcrypt(). It's the string "OrpheanBeholderScryDoubt" in big-endian bytes.
var magicCipherData = []byte{
	0x4f, 0x72, 0x70, 0x68,
	0x65, 0x61, 0x6e, 0x42,
	0x65, 0x68, 0x6f, 0x6c,
	0x64, 0x65, 0x72, 0x53,
	0x63, 0x72, 0x79, 0x44,
	0x6f, 0x75, 0x62, 0x74,
}

type hashed struct {
	hash  []byte
	salt  []byte
	cost  int // allowed range is MinCost to MaxCost
	major byte
	minor byte
}

// ErrPasswordTooLong is returned when the password passed to
// GenerateFromPassword is too long (i.e. > 72 bytes).
var ErrPasswordTooLong = errors.New("bcrypt: password length exceeds 72 bytes")

// GenerateFromPassword returns the bcrypt hash of the password at the given
// cost. If the cost given is less than MinCost, the cost will be set to
// DefaultCost, instead. Use CompareHashAndPassword, as defined in this package,
// to compare the returned hashed password with its cleartext version.
// GenerateFromPassword does not accept passwords longer than 72 bytes, which
// is the longest password bcrypt will operate on.
func GenerateFromPassword(password []byte, cost int) ([]byte, error) {
	if len(password) > 72 {
		return nil, ErrPasswordTooLong
	}
	p, err := newFromPassword(password, cost)
	if err != nil {
		return nil, err
	}
	return p.Hash(), nil
}

// CompareHashAndPassword compares a bcrypt hashed password with its possible
// plaintext equivalent. Returns nil on success, or an error on failure.
func CompareHashAndPassword(hashedPassword, password []byte) error {
	p, err := newFromHash(hashedPassword)
	if err != nil {
		return err
	}

	otherHash, err := bcrypt(password, p.cost, p.salt)
	if err != nil {
		return err
	}

	otherP := &hashed{otherHash, p.salt, p.cost, p.major, p.minor}
	if subtle.ConstantTimeCompare(p.Hash(), otherP.Hash()) == 1 {
		return nil
	}

	return ErrMismatchedHashAndPassword
}

// Cost returns the hashing cost used to create the given hashed
// password. When, in the future, the hashing cost of a password system needs
// to be increased in order to adjust for greater computational power, this
// function allows one to establish which passwords need to be updated.
func Cost(hashedPassword []byte) (int, error) {
	p, err := newFromHash(hashedPassword)
	if err != nil {
		return 0, err
	}
	return p.cost, nil
}

func newFromPassword(password []byte, cost int) (*hashed, error) {
	if cost < MinCost {
		cost = DefaultCost
	}
	p := new(hashed)
	p.major = majorVersion
	p.minor = minorVersion

	err := checkCost(cost)
	if err != nil {
		return nil, err
	}
	p.cost = cost

	unencodedSalt := make([]byte, maxSaltSize)
	_, err = io.ReadFull(rand.Reader, unencodedSalt)
	if err != nil {
		return nil, err
	}

	p.salt = base64Encode(unencodedSalt)
	hash, err := bcrypt(password, p.cost, p.salt)
	if err != nil {
		return nil, err
	}
	p.hash = hash
	return p, err
}

func newFromHash(hashedSecret []byte) (*hashed, error) {
	if len(hashedSecret) < minHashSize {
		return nil, ErrHashTooShort
	}
	p := new(hashed)
	n, err := p.decodeVersion(hashedSecret)
	if err != nil {
		return nil, err
	}
	hashedSecret = hashedSecret[n:]
	n, err = p.decodeCost(hashedSecret)
	if err != nil {
		return nil, err
	}
	hashedSecret = hashedSecret[n:]

	// The "+2" is here because we'll have to append at most 2 '=' to the salt
	// when base64 decoding it in expensiveBlowfishSetup().
	p.salt = make([]byte, encodedSaltSize, encodedSaltSize+2)
	copy(p.salt, hashedSecret[:encodedSaltSize])

	hashedSecret = hashedSecret[encodedSaltSize:]
	p.hash = make([]byte, len(hashedSecret))
	copy(p.hash, hashedSecret)

	return p, nil
}

func bcrypt(password []byte, cost int, salt []byte) ([]byte, error) {
	cipherData := make([]byte, len(magicCipherData))
	copy(cipherData, magicCipherData)

	c, err := expensiveBlowfishSetup(password, uint32(cost), salt)
	if err != nil {
		return nil, err
	}

	for i := 0; i < 24; i += 8 {
		for j := 0; j < 64; j++ {
			c.Encrypt(cipherData[i:i+8], cipherData[i:i+8])
		}
	}

	// Bug compatibility with C bcrypt implementations. We only encode 23 of
	// the 24 bytes encrypted.
	hsh := base64Encode(cipherData[:maxCryptedHashSize])
	return hsh, nil
}

func expensiveBlowfishSetup(key []byte, cost uint32, salt []byte) (*blowfish.Cipher, error) {
	csalt, err := base64Decode(salt)
	if err != nil {
		return nil, err
	}

	// Bug compatibility with C bcrypt implementations. They use the trailing
	// NULL in the key string during expansion.
	// We copy the key to prevent changing the underlying array.
	ckey := append(key[:len(key):len(key)], 0)

	c, err := blowfish.NewSaltedCipher(ckey, csalt)
	if err != nil {
		return nil, err
	}

	var i, rounds uint64
	rounds = 1 << cost
	for i = 0; i < rounds; i++ {
		blowfish.ExpandKey(ckey, c)
		blowfish.ExpandKey(csalt, c)
	}

	return c, nil
}

func (p *hashed) Hash() []byte {
	arr := make([]byte, 60)
	arr[0] = '$'
	arr[1] = p.major
	n := 2
	if p.minor != 0 {
		arr[2] = p.minor
		n = 3
	}
	arr[n] = '$'
	n++
	copy(arr[n:], []byte(fmt.Sprintf("%02d", p.cost)))
	n += 2
	arr[n] = '$'
	n++
	copy(arr[n:], p.salt)
	n += encodedSaltSize
	copy(arr[n:], p.hash)
	n += encodedHashSize
	return arr[:n]
}

func (p *hashed) decodeVersion(sbytes []byte) (int, error) {
	if sbytes[0] != '$' {
		return -1, InvalidHashPrefixError(sbytes[0])
	}
	if sbytes[1] > majorVersion {
		return -1, HashVersionTooNewError(sbytes[1])
	}
	p.major = sbytes[1]
	n := 3
	if sbytes[2] != '$' {
		p.minor = sbytes[2]
		n++
	}
	return n, nil
}

// sbytes should begin where decodeVersion left off.
func (p *hashed) decodeCost(sbytes []byte) (int, error) {
	cost, err := strconv.Atoi(string(sbytes[0:2]))
	if err != nil {
		return -1, err
	}
	err = checkCost(cost)
	if err != nil {
		return -1, err
	}
	p.cost = cost
	return 3, nil
}

func (p *hashed) String() string {
	return fmt.Sprintf("&{hash: %#v, salt: %#v, cost: %d, major: %c, minor: %c}", string(p.hash), p.salt, p.cost, p.major, p.minor)
}

func checkCost(cost int) error {
	if cost < MinCost || cost > MaxCost {
		return InvalidCostError(cost)
	}
	return nil
}
  07070100000CD3000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/blowfish   07070100000CD4000081A4000000000000000000000001645E367C00001811000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/blowfish/block.go  // Copyright 2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package blowfish

// getNextWord returns the next big-endian uint32 value from the byte slice
// at the given position in a circular manner, updating the position.
func getNextWord(b []byte, pos *int) uint32 {
	var w uint32
	j := *pos
	for i := 0; i < 4; i++ {
		w = w<<8 | uint32(b[j])
		j++
		if j >= len(b) {
			j = 0
		}
	}
	*pos = j
	return w
}

// ExpandKey performs a key expansion on the given *Cipher. Specifically, it
// performs the Blowfish algorithm's key schedule which sets up the *Cipher's
// pi and substitution tables for calls to Encrypt. This is used, primarily,
// by the bcrypt package to reuse the Blowfish key schedule during its
// set up. It's unlikely that you need to use this directly.
func ExpandKey(key []byte, c *Cipher) {
	j := 0
	for i := 0; i < 18; i++ {
		// Using inlined getNextWord for performance.
		var d uint32
		for k := 0; k < 4; k++ {
			d = d<<8 | uint32(key[j])
			j++
			if j >= len(key) {
				j = 0
			}
		}
		c.p[i] ^= d
	}

	var l, r uint32
	for i := 0; i < 18; i += 2 {
		l, r = encryptBlock(l, r, c)
		c.p[i], c.p[i+1] = l, r
	}

	for i := 0; i < 256; i += 2 {
		l, r = encryptBlock(l, r, c)
		c.s0[i], c.s0[i+1] = l, r
	}
	for i := 0; i < 256; i += 2 {
		l, r = encryptBlock(l, r, c)
		c.s1[i], c.s1[i+1] = l, r
	}
	for i := 0; i < 256; i += 2 {
		l, r = encryptBlock(l, r, c)
		c.s2[i], c.s2[i+1] = l, r
	}
	for i := 0; i < 256; i += 2 {
		l, r = encryptBlock(l, r, c)
		c.s3[i], c.s3[i+1] = l, r
	}
}

// This is similar to ExpandKey, but folds the salt during the key
// schedule. While ExpandKey is essentially expandKeyWithSalt with an all-zero
// salt passed in, reusing ExpandKey turns out to be a place of inefficiency
// and specializing it here is useful.
func expandKeyWithSalt(key []byte, salt []byte, c *Cipher) {
	j := 0
	for i := 0; i < 18; i++ {
		c.p[i] ^= getNextWord(key, &j)
	}

	j = 0
	var l, r uint32
	for i := 0; i < 18; i += 2 {
		l ^= getNextWord(salt, &j)
		r ^= getNextWord(salt, &j)
		l, r = encryptBlock(l, r, c)
		c.p[i], c.p[i+1] = l, r
	}

	for i := 0; i < 256; i += 2 {
		l ^= getNextWord(salt, &j)
		r ^= getNextWord(salt, &j)
		l, r = encryptBlock(l, r, c)
		c.s0[i], c.s0[i+1] = l, r
	}

	for i := 0; i < 256; i += 2 {
		l ^= getNextWord(salt, &j)
		r ^= getNextWord(salt, &j)
		l, r = encryptBlock(l, r, c)
		c.s1[i], c.s1[i+1] = l, r
	}

	for i := 0; i < 256; i += 2 {
		l ^= getNextWord(salt, &j)
		r ^= getNextWord(salt, &j)
		l, r = encryptBlock(l, r, c)
		c.s2[i], c.s2[i+1] = l, r
	}

	for i := 0; i < 256; i += 2 {
		l ^= getNextWord(salt, &j)
		r ^= getNextWord(salt, &j)
		l, r = encryptBlock(l, r, c)
		c.s3[i], c.s3[i+1] = l, r
	}
}

func encryptBlock(l, r uint32, c *Cipher) (uint32, uint32) {
	xl, xr := l, r
	xl ^= c.p[0]
	xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[1]
	xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[2]
	xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[3]
	xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[4]
	xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[5]
	xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[6]
	xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[7]
	xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[8]
	xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[9]
	xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[10]
	xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[11]
	xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[12]
	xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[13]
	xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[14]
	xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[15]
	xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[16]
	xr ^= c.p[17]
	return xr, xl
}

func decryptBlock(l, r uint32, c *Cipher) (uint32, uint32) {
	xl, xr := l, r
	xl ^= c.p[17]
	xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[16]
	xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[15]
	xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[14]
	xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[13]
	xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[12]
	xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[11]
	xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[10]
	xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[9]
	xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[8]
	xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[7]
	xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[6]
	xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[5]
	xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[4]
	xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[3]
	xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[2]
	xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[1]
	xr ^= c.p[0]
	return xr, xl
}
   07070100000CD5000081A4000000000000000000000001645E367C00000DD0000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/blowfish/cipher.go // Copyright 2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package blowfish implements Bruce Schneier's Blowfish encryption algorithm.
//
// Blowfish is a legacy cipher and its short block size makes it vulnerable to
// birthday bound attacks (see https://sweet32.info). It should only be used
// where compatibility with legacy systems, not security, is the goal.
//
// Deprecated: any new system should use AES (from crypto/aes, if necessary in
// an AEAD mode like crypto/cipher.NewGCM) or XChaCha20-Poly1305 (from
// golang.org/x/crypto/chacha20poly1305).
package blowfish // import "golang.org/x/crypto/blowfish"

// The code is a port of Bruce Schneier's C implementation.
// See https://www.schneier.com/blowfish.html.

import "strconv"

// The Blowfish block size in bytes.
const BlockSize = 8

// A Cipher is an instance of Blowfish encryption using a particular key.
type Cipher struct {
	p              [18]uint32
	s0, s1, s2, s3 [256]uint32
}

type KeySizeError int

func (k KeySizeError) Error() string {
	return "crypto/blowfish: invalid key size " + strconv.Itoa(int(k))
}

// NewCipher creates and returns a Cipher.
// The key argument should be the Blowfish key, from 1 to 56 bytes.
func NewCipher(key []byte) (*Cipher, error) {
	var result Cipher
	if k := len(key); k < 1 || k > 56 {
		return nil, KeySizeError(k)
	}
	initCipher(&result)
	ExpandKey(key, &result)
	return &result, nil
}

// NewSaltedCipher creates a returns a Cipher that folds a salt into its key
// schedule. For most purposes, NewCipher, instead of NewSaltedCipher, is
// sufficient and desirable. For bcrypt compatibility, the key can be over 56
// bytes.
func NewSaltedCipher(key, salt []byte) (*Cipher, error) {
	if len(salt) == 0 {
		return NewCipher(key)
	}
	var result Cipher
	if k := len(key); k < 1 {
		return nil, KeySizeError(k)
	}
	initCipher(&result)
	expandKeyWithSalt(key, salt, &result)
	return &result, nil
}

// BlockSize returns the Blowfish block size, 8 bytes.
// It is necessary to satisfy the Block interface in the
// package "crypto/cipher".
func (c *Cipher) BlockSize() int { return BlockSize }

// Encrypt encrypts the 8-byte buffer src using the key k
// and stores the result in dst.
// Note that for amounts of data larger than a block,
// it is not safe to just call Encrypt on successive blocks;
// instead, use an encryption mode like CBC (see crypto/cipher/cbc.go).
func (c *Cipher) Encrypt(dst, src []byte) {
	l := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3])
	r := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7])
	l, r = encryptBlock(l, r, c)
	dst[0], dst[1], dst[2], dst[3] = byte(l>>24), byte(l>>16), byte(l>>8), byte(l)
	dst[4], dst[5], dst[6], dst[7] = byte(r>>24), byte(r>>16), byte(r>>8), byte(r)
}

// Decrypt decrypts the 8-byte buffer src using the key k
// and stores the result in dst.
func (c *Cipher) Decrypt(dst, src []byte) {
	l := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3])
	r := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7])
	l, r = decryptBlock(l, r, c)
	dst[0], dst[1], dst[2], dst[3] = byte(l>>24), byte(l>>16), byte(l>>8), byte(l)
	dst[4], dst[5], dst[6], dst[7] = byte(r>>24), byte(r>>16), byte(r>>8), byte(r)
}

func initCipher(c *Cipher) {
	copy(c.p[0:], p[0:])
	copy(c.s0[0:], s0[0:])
	copy(c.s1[0:], s1[0:])
	copy(c.s2[0:], s2[0:])
	copy(c.s3[0:], s3[0:])
}
07070100000CD6000081A4000000000000000000000001645E367C0000334C000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/blowfish/const.go  // Copyright 2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// The startup permutation array and substitution boxes.
// They are the hexadecimal digits of PI; see:
// https://www.schneier.com/code/constants.txt.

package blowfish

var s0 = [256]uint32{
	0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96,
	0xba7c9045, 0xf12c7f99, 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16,
	0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, 0x0d95748f, 0x728eb658,
	0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,
	0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e,
	0x6c9e0e8b, 0xb01e8a3e, 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60,
	0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, 0x55ca396a, 0x2aab10b6,
	0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,
	0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c,
	0x7a325381, 0x28958677, 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,
	0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, 0xef845d5d, 0xe98575b1,
	0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,
	0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a,
	0x670c9c61, 0xabd388f0, 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3,
	0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, 0xa1f1651d, 0x39af0176,
	0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,
	0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706,
	0x1bfedf72, 0x429b023d, 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b,
	0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, 0xe3fe501a, 0xb6794c3b,
	0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
	0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c,
	0xcc814544, 0xaf5ebd09, 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3,
	0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, 0x5579c0bd, 0x1a60320a,
	0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,
	0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760,
	0x53317b48, 0x3e00df82, 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db,
	0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, 0x695b27b0, 0xbbca58c8,
	0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,
	0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33,
	0x62fb1341, 0xcee4c6e8, 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,
	0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, 0xd08ed1d0, 0xafc725e0,
	0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,
	0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777,
	0xea752dfe, 0x8b021fa1, 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299,
	0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, 0x165fa266, 0x80957705,
	0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,
	0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e,
	0x226800bb, 0x57b8e0af, 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa,
	0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, 0x83260376, 0x6295cfa9,
	0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
	0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f,
	0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664,
	0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a,
}

var s1 = [256]uint32{
	0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d,
	0x9cee60b8, 0x8fedb266, 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1,
	0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65,
	0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
	0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9,
	0x3c971814, 0x6b6a70a1, 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737,
	0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, 0xb03ada37, 0xf0500c0d,
	0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,
	0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc,
	0xc8b57634, 0x9af3dda7, 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41,
	0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, 0x4e548b38, 0x4f6db908,
	0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,
	0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124,
	0x501adde6, 0x9f84cd87, 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,
	0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, 0xef1c1847, 0x3215d908,
	0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,
	0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b,
	0x3c11183b, 0x5924a509, 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e,
	0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa,
	0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,
	0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d,
	0x1939260f, 0x19c27960, 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66,
	0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, 0xc332ddef, 0xbe6c5aa5,
	0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,
	0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96,
	0x0334fe1e, 0xaa0363cf, 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14,
	0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, 0x648b1eaf, 0x19bdf0ca,
	0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,
	0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77,
	0x11ed935f, 0x16681281, 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99,
	0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, 0xcdb30aeb, 0x532e3054,
	0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,
	0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea,
	0xdb6c4f15, 0xfacb4fd0, 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,
	0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, 0xcf62a1f2, 0x5b8d2646,
	0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,
	0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea,
	0x1dadf43e, 0x233f7061, 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb,
	0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, 0xa6078084, 0x19f8509e,
	0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,
	0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd,
	0x675fda79, 0xe3674340, 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20,
	0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7,
}

var s2 = [256]uint32{
	0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7,
	0xbcf46b2e, 0xd4a20068, 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af,
	0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, 0x4d95fc1d, 0x96b591af,
	0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,
	0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4,
	0x0a2c86da, 0xe9b66dfb, 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee,
	0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, 0xaace1e7c, 0xd3375fec,
	0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
	0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332,
	0x6841e7f7, 0xca7820fb, 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527,
	0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, 0x55a867bc, 0xa1159a58,
	0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,
	0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22,
	0x48c1133f, 0xc70f86dc, 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17,
	0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, 0x257b7834, 0x602a9c60,
	0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,
	0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99,
	0xde720c8c, 0x2da2f728, 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,
	0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, 0x0a476341, 0x992eff74,
	0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,
	0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3,
	0xb5390f92, 0x690fed0b, 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3,
	0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, 0x37392eb3, 0xcc115979,
	0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,
	0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa,
	0x3d25bdd8, 0xe2e1c3c9, 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a,
	0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, 0x9dbc8057, 0xf0f7c086,
	0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,
	0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24,
	0x55464299, 0xbf582e61, 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2,
	0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, 0x7aeb2661, 0x8b1ddf84,
	0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,
	0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09,
	0x662d09a1, 0xc4324633, 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10,
	0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, 0xdcb7da83, 0x573906fe,
	0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,
	0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0,
	0x006058aa, 0x30dc7d62, 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,
	0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, 0x6f05e409, 0x4b7c0188,
	0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,
	0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8,
	0xa28514d9, 0x6c51133c, 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837,
	0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0,
}

var s3 = [256]uint32{
	0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742,
	0xd3822740, 0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,
	0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, 0x5748ab2f, 0xbc946e79,
	0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,
	0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a,
	0x63ef8ce2, 0x9a86ee22, 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4,
	0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, 0x2826a2f9, 0xa73a3ae1,
	0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,
	0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797,
	0x2cf0b7d9, 0x022b8b51, 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28,
	0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, 0xe029ac71, 0xe019a5e6,
	0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,
	0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba,
	0x03a16125, 0x0564f0bd, 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a,
	0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, 0x7533d928, 0xb155fdf5,
	0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,
	0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce,
	0x5121ce64, 0x774fbe32, 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680,
	0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, 0xb39a460a, 0x6445c0dd,
	0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,
	0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb,
	0x8d6612ae, 0xbf3c6f47, 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,
	0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 0x4040cb08, 0x4eb4e2cc,
	0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,
	0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc,
	0xbb3a792b, 0x344525bd, 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9,
	0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 0x1a908749, 0xd44fbd9a,
	0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,
	0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a,
	0x0f91fc71, 0x9b941525, 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1,
	0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, 0xe0ec6e0e, 0x1698db3b,
	0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,
	0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e,
	0xe60b6f47, 0x0fe3f11d, 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f,
	0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, 0xf523f357, 0xa6327623,
	0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,
	0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a,
	0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6,
	0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, 0x53113ec0, 0x1640e3d3,
	0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,
	0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c,
	0x01c36ae4, 0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,
	0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6,
}

var p = [18]uint32{
	0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0,
	0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,
	0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 0x9216d5d9, 0x8979fb1b,
}
07070100000CD7000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/cast5  07070100000CD8000081A4000000000000000000000001645E367C000080B6000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/cast5/cast5.go // Copyright 2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package cast5 implements CAST5, as defined in RFC 2144.
//
// CAST5 is a legacy cipher and its short block size makes it vulnerable to
// birthday bound attacks (see https://sweet32.info). It should only be used
// where compatibility with legacy systems, not security, is the goal.
//
// Deprecated: any new system should use AES (from crypto/aes, if necessary in
// an AEAD mode like crypto/cipher.NewGCM) or XChaCha20-Poly1305 (from
// golang.org/x/crypto/chacha20poly1305).
package cast5 // import "golang.org/x/crypto/cast5"

import (
	"errors"
	"math/bits"
)

const BlockSize = 8
const KeySize = 16

type Cipher struct {
	masking [16]uint32
	rotate  [16]uint8
}

func NewCipher(key []byte) (c *Cipher, err error) {
	if len(key) != KeySize {
		return nil, errors.New("CAST5: keys must be 16 bytes")
	}

	c = new(Cipher)
	c.keySchedule(key)
	return
}

func (c *Cipher) BlockSize() int {
	return BlockSize
}

func (c *Cipher) Encrypt(dst, src []byte) {
	l := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3])
	r := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7])

	l, r = r, l^f1(r, c.masking[0], c.rotate[0])
	l, r = r, l^f2(r, c.masking[1], c.rotate[1])
	l, r = r, l^f3(r, c.masking[2], c.rotate[2])
	l, r = r, l^f1(r, c.masking[3], c.rotate[3])

	l, r = r, l^f2(r, c.masking[4], c.rotate[4])
	l, r = r, l^f3(r, c.masking[5], c.rotate[5])
	l, r = r, l^f1(r, c.masking[6], c.rotate[6])
	l, r = r, l^f2(r, c.masking[7], c.rotate[7])

	l, r = r, l^f3(r, c.masking[8], c.rotate[8])
	l, r = r, l^f1(r, c.masking[9], c.rotate[9])
	l, r = r, l^f2(r, c.masking[10], c.rotate[10])
	l, r = r, l^f3(r, c.masking[11], c.rotate[11])

	l, r = r, l^f1(r, c.masking[12], c.rotate[12])
	l, r = r, l^f2(r, c.masking[13], c.rotate[13])
	l, r = r, l^f3(r, c.masking[14], c.rotate[14])
	l, r = r, l^f1(r, c.masking[15], c.rotate[15])

	dst[0] = uint8(r >> 24)
	dst[1] = uint8(r >> 16)
	dst[2] = uint8(r >> 8)
	dst[3] = uint8(r)
	dst[4] = uint8(l >> 24)
	dst[5] = uint8(l >> 16)
	dst[6] = uint8(l >> 8)
	dst[7] = uint8(l)
}

func (c *Cipher) Decrypt(dst, src []byte) {
	l := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3])
	r := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7])

	l, r = r, l^f1(r, c.masking[15], c.rotate[15])
	l, r = r, l^f3(r, c.masking[14], c.rotate[14])
	l, r = r, l^f2(r, c.masking[13], c.rotate[13])
	l, r = r, l^f1(r, c.masking[12], c.rotate[12])

	l, r = r, l^f3(r, c.masking[11], c.rotate[11])
	l, r = r, l^f2(r, c.masking[10], c.rotate[10])
	l, r = r, l^f1(r, c.masking[9], c.rotate[9])
	l, r = r, l^f3(r, c.masking[8], c.rotate[8])

	l, r = r, l^f2(r, c.masking[7], c.rotate[7])
	l, r = r, l^f1(r, c.masking[6], c.rotate[6])
	l, r = r, l^f3(r, c.masking[5], c.rotate[5])
	l, r = r, l^f2(r, c.masking[4], c.rotate[4])

	l, r = r, l^f1(r, c.masking[3], c.rotate[3])
	l, r = r, l^f3(r, c.masking[2], c.rotate[2])
	l, r = r, l^f2(r, c.masking[1], c.rotate[1])
	l, r = r, l^f1(r, c.masking[0], c.rotate[0])

	dst[0] = uint8(r >> 24)
	dst[1] = uint8(r >> 16)
	dst[2] = uint8(r >> 8)
	dst[3] = uint8(r)
	dst[4] = uint8(l >> 24)
	dst[5] = uint8(l >> 16)
	dst[6] = uint8(l >> 8)
	dst[7] = uint8(l)
}

type keyScheduleA [4][7]uint8
type keyScheduleB [4][5]uint8

// keyScheduleRound contains the magic values for a round of the key schedule.
// The keyScheduleA deals with the lines like:
//   z0z1z2z3 = x0x1x2x3 ^ S5[xD] ^ S6[xF] ^ S7[xC] ^ S8[xE] ^ S7[x8]
// Conceptually, both x and z are in the same array, x first. The first
// element describes which word of this array gets written to and the
// second, which word gets read. So, for the line above, it's "4, 0", because
// it's writing to the first word of z, which, being after x, is word 4, and
// reading from the first word of x: word 0.
//
// Next are the indexes into the S-boxes. Now the array is treated as bytes. So
// "xD" is 0xd. The first byte of z is written as "16 + 0", just to be clear
// that it's z that we're indexing.
//
// keyScheduleB deals with lines like:
//   K1 = S5[z8] ^ S6[z9] ^ S7[z7] ^ S8[z6] ^ S5[z2]
// "K1" is ignored because key words are always written in order. So the five
// elements are the S-box indexes. They use the same form as in keyScheduleA,
// above.

type keyScheduleRound struct{}
type keySchedule []keyScheduleRound

var schedule = []struct {
	a keyScheduleA
	b keyScheduleB
}{
	{
		keyScheduleA{
			{4, 0, 0xd, 0xf, 0xc, 0xe, 0x8},
			{5, 2, 16 + 0, 16 + 2, 16 + 1, 16 + 3, 0xa},
			{6, 3, 16 + 7, 16 + 6, 16 + 5, 16 + 4, 9},
			{7, 1, 16 + 0xa, 16 + 9, 16 + 0xb, 16 + 8, 0xb},
		},
		keyScheduleB{
			{16 + 8, 16 + 9, 16 + 7, 16 + 6, 16 + 2},
			{16 + 0xa, 16 + 0xb, 16 + 5, 16 + 4, 16 + 6},
			{16 + 0xc, 16 + 0xd, 16 + 3, 16 + 2, 16 + 9},
			{16 + 0xe, 16 + 0xf, 16 + 1, 16 + 0, 16 + 0xc},
		},
	},
	{
		keyScheduleA{
			{0, 6, 16 + 5, 16 + 7, 16 + 4, 16 + 6, 16 + 0},
			{1, 4, 0, 2, 1, 3, 16 + 2},
			{2, 5, 7, 6, 5, 4, 16 + 1},
			{3, 7, 0xa, 9, 0xb, 8, 16 + 3},
		},
		keyScheduleB{
			{3, 2, 0xc, 0xd, 8},
			{1, 0, 0xe, 0xf, 0xd},
			{7, 6, 8, 9, 3},
			{5, 4, 0xa, 0xb, 7},
		},
	},
	{
		keyScheduleA{
			{4, 0, 0xd, 0xf, 0xc, 0xe, 8},
			{5, 2, 16 + 0, 16 + 2, 16 + 1, 16 + 3, 0xa},
			{6, 3, 16 + 7, 16 + 6, 16 + 5, 16 + 4, 9},
			{7, 1, 16 + 0xa, 16 + 9, 16 + 0xb, 16 + 8, 0xb},
		},
		keyScheduleB{
			{16 + 3, 16 + 2, 16 + 0xc, 16 + 0xd, 16 + 9},
			{16 + 1, 16 + 0, 16 + 0xe, 16 + 0xf, 16 + 0xc},
			{16 + 7, 16 + 6, 16 + 8, 16 + 9, 16 + 2},
			{16 + 5, 16 + 4, 16 + 0xa, 16 + 0xb, 16 + 6},
		},
	},
	{
		keyScheduleA{
			{0, 6, 16 + 5, 16 + 7, 16 + 4, 16 + 6, 16 + 0},
			{1, 4, 0, 2, 1, 3, 16 + 2},
			{2, 5, 7, 6, 5, 4, 16 + 1},
			{3, 7, 0xa, 9, 0xb, 8, 16 + 3},
		},
		keyScheduleB{
			{8, 9, 7, 6, 3},
			{0xa, 0xb, 5, 4, 7},
			{0xc, 0xd, 3, 2, 8},
			{0xe, 0xf, 1, 0, 0xd},
		},
	},
}

func (c *Cipher) keySchedule(in []byte) {
	var t [8]uint32
	var k [32]uint32

	for i := 0; i < 4; i++ {
		j := i * 4
		t[i] = uint32(in[j])<<24 | uint32(in[j+1])<<16 | uint32(in[j+2])<<8 | uint32(in[j+3])
	}

	x := []byte{6, 7, 4, 5}
	ki := 0

	for half := 0; half < 2; half++ {
		for _, round := range schedule {
			for j := 0; j < 4; j++ {
				var a [7]uint8
				copy(a[:], round.a[j][:])
				w := t[a[1]]
				w ^= sBox[4][(t[a[2]>>2]>>(24-8*(a[2]&3)))&0xff]
				w ^= sBox[5][(t[a[3]>>2]>>(24-8*(a[3]&3)))&0xff]
				w ^= sBox[6][(t[a[4]>>2]>>(24-8*(a[4]&3)))&0xff]
				w ^= sBox[7][(t[a[5]>>2]>>(24-8*(a[5]&3)))&0xff]
				w ^= sBox[x[j]][(t[a[6]>>2]>>(24-8*(a[6]&3)))&0xff]
				t[a[0]] = w
			}

			for j := 0; j < 4; j++ {
				var b [5]uint8
				copy(b[:], round.b[j][:])
				w := sBox[4][(t[b[0]>>2]>>(24-8*(b[0]&3)))&0xff]
				w ^= sBox[5][(t[b[1]>>2]>>(24-8*(b[1]&3)))&0xff]
				w ^= sBox[6][(t[b[2]>>2]>>(24-8*(b[2]&3)))&0xff]
				w ^= sBox[7][(t[b[3]>>2]>>(24-8*(b[3]&3)))&0xff]
				w ^= sBox[4+j][(t[b[4]>>2]>>(24-8*(b[4]&3)))&0xff]
				k[ki] = w
				ki++
			}
		}
	}

	for i := 0; i < 16; i++ {
		c.masking[i] = k[i]
		c.rotate[i] = uint8(k[16+i] & 0x1f)
	}
}

// These are the three 'f' functions. See RFC 2144, section 2.2.
func f1(d, m uint32, r uint8) uint32 {
	t := m + d
	I := bits.RotateLeft32(t, int(r))
	return ((sBox[0][I>>24] ^ sBox[1][(I>>16)&0xff]) - sBox[2][(I>>8)&0xff]) + sBox[3][I&0xff]
}

func f2(d, m uint32, r uint8) uint32 {
	t := m ^ d
	I := bits.RotateLeft32(t, int(r))
	return ((sBox[0][I>>24] - sBox[1][(I>>16)&0xff]) + sBox[2][(I>>8)&0xff]) ^ sBox[3][I&0xff]
}

func f3(d, m uint32, r uint8) uint32 {
	t := m - d
	I := bits.RotateLeft32(t, int(r))
	return ((sBox[0][I>>24] + sBox[1][(I>>16)&0xff]) ^ sBox[2][(I>>8)&0xff]) - sBox[3][I&0xff]
}

var sBox = [8][256]uint32{
	{
		0x30fb40d4, 0x9fa0ff0b, 0x6beccd2f, 0x3f258c7a, 0x1e213f2f, 0x9c004dd3, 0x6003e540, 0xcf9fc949,
		0xbfd4af27, 0x88bbbdb5, 0xe2034090, 0x98d09675, 0x6e63a0e0, 0x15c361d2, 0xc2e7661d, 0x22d4ff8e,
		0x28683b6f, 0xc07fd059, 0xff2379c8, 0x775f50e2, 0x43c340d3, 0xdf2f8656, 0x887ca41a, 0xa2d2bd2d,
		0xa1c9e0d6, 0x346c4819, 0x61b76d87, 0x22540f2f, 0x2abe32e1, 0xaa54166b, 0x22568e3a, 0xa2d341d0,
		0x66db40c8, 0xa784392f, 0x004dff2f, 0x2db9d2de, 0x97943fac, 0x4a97c1d8, 0x527644b7, 0xb5f437a7,
		0xb82cbaef, 0xd751d159, 0x6ff7f0ed, 0x5a097a1f, 0x827b68d0, 0x90ecf52e, 0x22b0c054, 0xbc8e5935,
		0x4b6d2f7f, 0x50bb64a2, 0xd2664910, 0xbee5812d, 0xb7332290, 0xe93b159f, 0xb48ee411, 0x4bff345d,
		0xfd45c240, 0xad31973f, 0xc4f6d02e, 0x55fc8165, 0xd5b1caad, 0xa1ac2dae, 0xa2d4b76d, 0xc19b0c50,
		0x882240f2, 0x0c6e4f38, 0xa4e4bfd7, 0x4f5ba272, 0x564c1d2f, 0xc59c5319, 0xb949e354, 0xb04669fe,
		0xb1b6ab8a, 0xc71358dd, 0x6385c545, 0x110f935d, 0x57538ad5, 0x6a390493, 0xe63d37e0, 0x2a54f6b3,
		0x3a787d5f, 0x6276a0b5, 0x19a6fcdf, 0x7a42206a, 0x29f9d4d5, 0xf61b1891, 0xbb72275e, 0xaa508167,
		0x38901091, 0xc6b505eb, 0x84c7cb8c, 0x2ad75a0f, 0x874a1427, 0xa2d1936b, 0x2ad286af, 0xaa56d291,
		0xd7894360, 0x425c750d, 0x93b39e26, 0x187184c9, 0x6c00b32d, 0x73e2bb14, 0xa0bebc3c, 0x54623779,
		0x64459eab, 0x3f328b82, 0x7718cf82, 0x59a2cea6, 0x04ee002e, 0x89fe78e6, 0x3fab0950, 0x325ff6c2,
		0x81383f05, 0x6963c5c8, 0x76cb5ad6, 0xd49974c9, 0xca180dcf, 0x380782d5, 0xc7fa5cf6, 0x8ac31511,
		0x35e79e13, 0x47da91d0, 0xf40f9086, 0xa7e2419e, 0x31366241, 0x051ef495, 0xaa573b04, 0x4a805d8d,
		0x548300d0, 0x00322a3c, 0xbf64cddf, 0xba57a68e, 0x75c6372b, 0x50afd341, 0xa7c13275, 0x915a0bf5,
		0x6b54bfab, 0x2b0b1426, 0xab4cc9d7, 0x449ccd82, 0xf7fbf265, 0xab85c5f3, 0x1b55db94, 0xaad4e324,
		0xcfa4bd3f, 0x2deaa3e2, 0x9e204d02, 0xc8bd25ac, 0xeadf55b3, 0xd5bd9e98, 0xe31231b2, 0x2ad5ad6c,
		0x954329de, 0xadbe4528, 0xd8710f69, 0xaa51c90f, 0xaa786bf6, 0x22513f1e, 0xaa51a79b, 0x2ad344cc,
		0x7b5a41f0, 0xd37cfbad, 0x1b069505, 0x41ece491, 0xb4c332e6, 0x032268d4, 0xc9600acc, 0xce387e6d,
		0xbf6bb16c, 0x6a70fb78, 0x0d03d9c9, 0xd4df39de, 0xe01063da, 0x4736f464, 0x5ad328d8, 0xb347cc96,
		0x75bb0fc3, 0x98511bfb, 0x4ffbcc35, 0xb58bcf6a, 0xe11f0abc, 0xbfc5fe4a, 0xa70aec10, 0xac39570a,
		0x3f04442f, 0x6188b153, 0xe0397a2e, 0x5727cb79, 0x9ceb418f, 0x1cacd68d, 0x2ad37c96, 0x0175cb9d,
		0xc69dff09, 0xc75b65f0, 0xd9db40d8, 0xec0e7779, 0x4744ead4, 0xb11c3274, 0xdd24cb9e, 0x7e1c54bd,
		0xf01144f9, 0xd2240eb1, 0x9675b3fd, 0xa3ac3755, 0xd47c27af, 0x51c85f4d, 0x56907596, 0xa5bb15e6,
		0x580304f0, 0xca042cf1, 0x011a37ea, 0x8dbfaadb, 0x35ba3e4a, 0x3526ffa0, 0xc37b4d09, 0xbc306ed9,
		0x98a52666, 0x5648f725, 0xff5e569d, 0x0ced63d0, 0x7c63b2cf, 0x700b45e1, 0xd5ea50f1, 0x85a92872,
		0xaf1fbda7, 0xd4234870, 0xa7870bf3, 0x2d3b4d79, 0x42e04198, 0x0cd0ede7, 0x26470db8, 0xf881814c,
		0x474d6ad7, 0x7c0c5e5c, 0xd1231959, 0x381b7298, 0xf5d2f4db, 0xab838653, 0x6e2f1e23, 0x83719c9e,
		0xbd91e046, 0x9a56456e, 0xdc39200c, 0x20c8c571, 0x962bda1c, 0xe1e696ff, 0xb141ab08, 0x7cca89b9,
		0x1a69e783, 0x02cc4843, 0xa2f7c579, 0x429ef47d, 0x427b169c, 0x5ac9f049, 0xdd8f0f00, 0x5c8165bf,
	},
	{
		0x1f201094, 0xef0ba75b, 0x69e3cf7e, 0x393f4380, 0xfe61cf7a, 0xeec5207a, 0x55889c94, 0x72fc0651,
		0xada7ef79, 0x4e1d7235, 0xd55a63ce, 0xde0436ba, 0x99c430ef, 0x5f0c0794, 0x18dcdb7d, 0xa1d6eff3,
		0xa0b52f7b, 0x59e83605, 0xee15b094, 0xe9ffd909, 0xdc440086, 0xef944459, 0xba83ccb3, 0xe0c3cdfb,
		0xd1da4181, 0x3b092ab1, 0xf997f1c1, 0xa5e6cf7b, 0x01420ddb, 0xe4e7ef5b, 0x25a1ff41, 0xe180f806,
		0x1fc41080, 0x179bee7a, 0xd37ac6a9, 0xfe5830a4, 0x98de8b7f, 0x77e83f4e, 0x79929269, 0x24fa9f7b,
		0xe113c85b, 0xacc40083, 0xd7503525, 0xf7ea615f, 0x62143154, 0x0d554b63, 0x5d681121, 0xc866c359,
		0x3d63cf73, 0xcee234c0, 0xd4d87e87, 0x5c672b21, 0x071f6181, 0x39f7627f, 0x361e3084, 0xe4eb573b,
		0x602f64a4, 0xd63acd9c, 0x1bbc4635, 0x9e81032d, 0x2701f50c, 0x99847ab4, 0xa0e3df79, 0xba6cf38c,
		0x10843094, 0x2537a95e, 0xf46f6ffe, 0xa1ff3b1f, 0x208cfb6a, 0x8f458c74, 0xd9e0a227, 0x4ec73a34,
		0xfc884f69, 0x3e4de8df, 0xef0e0088, 0x3559648d, 0x8a45388c, 0x1d804366, 0x721d9bfd, 0xa58684bb,
		0xe8256333, 0x844e8212, 0x128d8098, 0xfed33fb4, 0xce280ae1, 0x27e19ba5, 0xd5a6c252, 0xe49754bd,
		0xc5d655dd, 0xeb667064, 0x77840b4d, 0xa1b6a801, 0x84db26a9, 0xe0b56714, 0x21f043b7, 0xe5d05860,
		0x54f03084, 0x066ff472, 0xa31aa153, 0xdadc4755, 0xb5625dbf, 0x68561be6, 0x83ca6b94, 0x2d6ed23b,
		0xeccf01db, 0xa6d3d0ba, 0xb6803d5c, 0xaf77a709, 0x33b4a34c, 0x397bc8d6, 0x5ee22b95, 0x5f0e5304,
		0x81ed6f61, 0x20e74364, 0xb45e1378, 0xde18639b, 0x881ca122, 0xb96726d1, 0x8049a7e8, 0x22b7da7b,
		0x5e552d25, 0x5272d237, 0x79d2951c, 0xc60d894c, 0x488cb402, 0x1ba4fe5b, 0xa4b09f6b, 0x1ca815cf,
		0xa20c3005, 0x8871df63, 0xb9de2fcb, 0x0cc6c9e9, 0x0beeff53, 0xe3214517, 0xb4542835, 0x9f63293c,
		0xee41e729, 0x6e1d2d7c, 0x50045286, 0x1e6685f3, 0xf33401c6, 0x30a22c95, 0x31a70850, 0x60930f13,
		0x73f98417, 0xa1269859, 0xec645c44, 0x52c877a9, 0xcdff33a6, 0xa02b1741, 0x7cbad9a2, 0x2180036f,
		0x50d99c08, 0xcb3f4861, 0xc26bd765, 0x64a3f6ab, 0x80342676, 0x25a75e7b, 0xe4e6d1fc, 0x20c710e6,
		0xcdf0b680, 0x17844d3b, 0x31eef84d, 0x7e0824e4, 0x2ccb49eb, 0x846a3bae, 0x8ff77888, 0xee5d60f6,
		0x7af75673, 0x2fdd5cdb, 0xa11631c1, 0x30f66f43, 0xb3faec54, 0x157fd7fa, 0xef8579cc, 0xd152de58,
		0xdb2ffd5e, 0x8f32ce19, 0x306af97a, 0x02f03ef8, 0x99319ad5, 0xc242fa0f, 0xa7e3ebb0, 0xc68e4906,
		0xb8da230c, 0x80823028, 0xdcdef3c8, 0xd35fb171, 0x088a1bc8, 0xbec0c560, 0x61a3c9e8, 0xbca8f54d,
		0xc72feffa, 0x22822e99, 0x82c570b4, 0xd8d94e89, 0x8b1c34bc, 0x301e16e6, 0x273be979, 0xb0ffeaa6,
		0x61d9b8c6, 0x00b24869, 0xb7ffce3f, 0x08dc283b, 0x43daf65a, 0xf7e19798, 0x7619b72f, 0x8f1c9ba4,
		0xdc8637a0, 0x16a7d3b1, 0x9fc393b7, 0xa7136eeb, 0xc6bcc63e, 0x1a513742, 0xef6828bc, 0x520365d6,
		0x2d6a77ab, 0x3527ed4b, 0x821fd216, 0x095c6e2e, 0xdb92f2fb, 0x5eea29cb, 0x145892f5, 0x91584f7f,
		0x5483697b, 0x2667a8cc, 0x85196048, 0x8c4bacea, 0x833860d4, 0x0d23e0f9, 0x6c387e8a, 0x0ae6d249,
		0xb284600c, 0xd835731d, 0xdcb1c647, 0xac4c56ea, 0x3ebd81b3, 0x230eabb0, 0x6438bc87, 0xf0b5b1fa,
		0x8f5ea2b3, 0xfc184642, 0x0a036b7a, 0x4fb089bd, 0x649da589, 0xa345415e, 0x5c038323, 0x3e5d3bb9,
		0x43d79572, 0x7e6dd07c, 0x06dfdf1e, 0x6c6cc4ef, 0x7160a539, 0x73bfbe70, 0x83877605, 0x4523ecf1,
	},
	{
		0x8defc240, 0x25fa5d9f, 0xeb903dbf, 0xe810c907, 0x47607fff, 0x369fe44b, 0x8c1fc644, 0xaececa90,
		0xbeb1f9bf, 0xeefbcaea, 0xe8cf1950, 0x51df07ae, 0x920e8806, 0xf0ad0548, 0xe13c8d83, 0x927010d5,
		0x11107d9f, 0x07647db9, 0xb2e3e4d4, 0x3d4f285e, 0xb9afa820, 0xfade82e0, 0xa067268b, 0x8272792e,
		0x553fb2c0, 0x489ae22b, 0xd4ef9794, 0x125e3fbc, 0x21fffcee, 0x825b1bfd, 0x9255c5ed, 0x1257a240,
		0x4e1a8302, 0xbae07fff, 0x528246e7, 0x8e57140e, 0x3373f7bf, 0x8c9f8188, 0xa6fc4ee8, 0xc982b5a5,
		0xa8c01db7, 0x579fc264, 0x67094f31, 0xf2bd3f5f, 0x40fff7c1, 0x1fb78dfc, 0x8e6bd2c1, 0x437be59b,
		0x99b03dbf, 0xb5dbc64b, 0x638dc0e6, 0x55819d99, 0xa197c81c, 0x4a012d6e, 0xc5884a28, 0xccc36f71,
		0xb843c213, 0x6c0743f1, 0x8309893c, 0x0feddd5f, 0x2f7fe850, 0xd7c07f7e, 0x02507fbf, 0x5afb9a04,
		0xa747d2d0, 0x1651192e, 0xaf70bf3e, 0x58c31380, 0x5f98302e, 0x727cc3c4, 0x0a0fb402, 0x0f7fef82,
		0x8c96fdad, 0x5d2c2aae, 0x8ee99a49, 0x50da88b8, 0x8427f4a0, 0x1eac5790, 0x796fb449, 0x8252dc15,
		0xefbd7d9b, 0xa672597d, 0xada840d8, 0x45f54504, 0xfa5d7403, 0xe83ec305, 0x4f91751a, 0x925669c2,
		0x23efe941, 0xa903f12e, 0x60270df2, 0x0276e4b6, 0x94fd6574, 0x927985b2, 0x8276dbcb, 0x02778176,
		0xf8af918d, 0x4e48f79e, 0x8f616ddf, 0xe29d840e, 0x842f7d83, 0x340ce5c8, 0x96bbb682, 0x93b4b148,
		0xef303cab, 0x984faf28, 0x779faf9b, 0x92dc560d, 0x224d1e20, 0x8437aa88, 0x7d29dc96, 0x2756d3dc,
		0x8b907cee, 0xb51fd240, 0xe7c07ce3, 0xe566b4a1, 0xc3e9615e, 0x3cf8209d, 0x6094d1e3, 0xcd9ca341,
		0x5c76460e, 0x00ea983b, 0xd4d67881, 0xfd47572c, 0xf76cedd9, 0xbda8229c, 0x127dadaa, 0x438a074e,
		0x1f97c090, 0x081bdb8a, 0x93a07ebe, 0xb938ca15, 0x97b03cff, 0x3dc2c0f8, 0x8d1ab2ec, 0x64380e51,
		0x68cc7bfb, 0xd90f2788, 0x12490181, 0x5de5ffd4, 0xdd7ef86a, 0x76a2e214, 0xb9a40368, 0x925d958f,
		0x4b39fffa, 0xba39aee9, 0xa4ffd30b, 0xfaf7933b, 0x6d498623, 0x193cbcfa, 0x27627545, 0x825cf47a,
		0x61bd8ba0, 0xd11e42d1, 0xcead04f4, 0x127ea392, 0x10428db7, 0x8272a972, 0x9270c4a8, 0x127de50b,
		0x285ba1c8, 0x3c62f44f, 0x35c0eaa5, 0xe805d231, 0x428929fb, 0xb4fcdf82, 0x4fb66a53, 0x0e7dc15b,
		0x1f081fab, 0x108618ae, 0xfcfd086d, 0xf9ff2889, 0x694bcc11, 0x236a5cae, 0x12deca4d, 0x2c3f8cc5,
		0xd2d02dfe, 0xf8ef5896, 0xe4cf52da, 0x95155b67, 0x494a488c, 0xb9b6a80c, 0x5c8f82bc, 0x89d36b45,
		0x3a609437, 0xec00c9a9, 0x44715253, 0x0a874b49, 0xd773bc40, 0x7c34671c, 0x02717ef6, 0x4feb5536,
		0xa2d02fff, 0xd2bf60c4, 0xd43f03c0, 0x50b4ef6d, 0x07478cd1, 0x006e1888, 0xa2e53f55, 0xb9e6d4bc,
		0xa2048016, 0x97573833, 0xd7207d67, 0xde0f8f3d, 0x72f87b33, 0xabcc4f33, 0x7688c55d, 0x7b00a6b0,
		0x947b0001, 0x570075d2, 0xf9bb88f8, 0x8942019e, 0x4264a5ff, 0x856302e0, 0x72dbd92b, 0xee971b69,
		0x6ea22fde, 0x5f08ae2b, 0xaf7a616d, 0xe5c98767, 0xcf1febd2, 0x61efc8c2, 0xf1ac2571, 0xcc8239c2,
		0x67214cb8, 0xb1e583d1, 0xb7dc3e62, 0x7f10bdce, 0xf90a5c38, 0x0ff0443d, 0x606e6dc6, 0x60543a49,
		0x5727c148, 0x2be98a1d, 0x8ab41738, 0x20e1be24, 0xaf96da0f, 0x68458425, 0x99833be5, 0x600d457d,
		0x282f9350, 0x8334b362, 0xd91d1120, 0x2b6d8da0, 0x642b1e31, 0x9c305a00, 0x52bce688, 0x1b03588a,
		0xf7baefd5, 0x4142ed9c, 0xa4315c11, 0x83323ec5, 0xdfef4636, 0xa133c501, 0xe9d3531c, 0xee353783,
	},
	{
		0x9db30420, 0x1fb6e9de, 0xa7be7bef, 0xd273a298, 0x4a4f7bdb, 0x64ad8c57, 0x85510443, 0xfa020ed1,
		0x7e287aff, 0xe60fb663, 0x095f35a1, 0x79ebf120, 0xfd059d43, 0x6497b7b1, 0xf3641f63, 0x241e4adf,
		0x28147f5f, 0x4fa2b8cd, 0xc9430040, 0x0cc32220, 0xfdd30b30, 0xc0a5374f, 0x1d2d00d9, 0x24147b15,
		0xee4d111a, 0x0fca5167, 0x71ff904c, 0x2d195ffe, 0x1a05645f, 0x0c13fefe, 0x081b08ca, 0x05170121,
		0x80530100, 0xe83e5efe, 0xac9af4f8, 0x7fe72701, 0xd2b8ee5f, 0x06df4261, 0xbb9e9b8a, 0x7293ea25,
		0xce84ffdf, 0xf5718801, 0x3dd64b04, 0xa26f263b, 0x7ed48400, 0x547eebe6, 0x446d4ca0, 0x6cf3d6f5,
		0x2649abdf, 0xaea0c7f5, 0x36338cc1, 0x503f7e93, 0xd3772061, 0x11b638e1, 0x72500e03, 0xf80eb2bb,
		0xabe0502e, 0xec8d77de, 0x57971e81, 0xe14f6746, 0xc9335400, 0x6920318f, 0x081dbb99, 0xffc304a5,
		0x4d351805, 0x7f3d5ce3, 0xa6c866c6, 0x5d5bcca9, 0xdaec6fea, 0x9f926f91, 0x9f46222f, 0x3991467d,
		0xa5bf6d8e, 0x1143c44f, 0x43958302, 0xd0214eeb, 0x022083b8, 0x3fb6180c, 0x18f8931e, 0x281658e6,
		0x26486e3e, 0x8bd78a70, 0x7477e4c1, 0xb506e07c, 0xf32d0a25, 0x79098b02, 0xe4eabb81, 0x28123b23,
		0x69dead38, 0x1574ca16, 0xdf871b62, 0x211c40b7, 0xa51a9ef9, 0x0014377b, 0x041e8ac8, 0x09114003,
		0xbd59e4d2, 0xe3d156d5, 0x4fe876d5, 0x2f91a340, 0x557be8de, 0x00eae4a7, 0x0ce5c2ec, 0x4db4bba6,
		0xe756bdff, 0xdd3369ac, 0xec17b035, 0x06572327, 0x99afc8b0, 0x56c8c391, 0x6b65811c, 0x5e146119,
		0x6e85cb75, 0xbe07c002, 0xc2325577, 0x893ff4ec, 0x5bbfc92d, 0xd0ec3b25, 0xb7801ab7, 0x8d6d3b24,
		0x20c763ef, 0xc366a5fc, 0x9c382880, 0x0ace3205, 0xaac9548a, 0xeca1d7c7, 0x041afa32, 0x1d16625a,
		0x6701902c, 0x9b757a54, 0x31d477f7, 0x9126b031, 0x36cc6fdb, 0xc70b8b46, 0xd9e66a48, 0x56e55a79,
		0x026a4ceb, 0x52437eff, 0x2f8f76b4, 0x0df980a5, 0x8674cde3, 0xedda04eb, 0x17a9be04, 0x2c18f4df,
		0xb7747f9d, 0xab2af7b4, 0xefc34d20, 0x2e096b7c, 0x1741a254, 0xe5b6a035, 0x213d42f6, 0x2c1c7c26,
		0x61c2f50f, 0x6552daf9, 0xd2c231f8, 0x25130f69, 0xd8167fa2, 0x0418f2c8, 0x001a96a6, 0x0d1526ab,
		0x63315c21, 0x5e0a72ec, 0x49bafefd, 0x187908d9, 0x8d0dbd86, 0x311170a7, 0x3e9b640c, 0xcc3e10d7,
		0xd5cad3b6, 0x0caec388, 0xf73001e1, 0x6c728aff, 0x71eae2a1, 0x1f9af36e, 0xcfcbd12f, 0xc1de8417,
		0xac07be6b, 0xcb44a1d8, 0x8b9b0f56, 0x013988c3, 0xb1c52fca, 0xb4be31cd, 0xd8782806, 0x12a3a4e2,
		0x6f7de532, 0x58fd7eb6, 0xd01ee900, 0x24adffc2, 0xf4990fc5, 0x9711aac5, 0x001d7b95, 0x82e5e7d2,
		0x109873f6, 0x00613096, 0xc32d9521, 0xada121ff, 0x29908415, 0x7fbb977f, 0xaf9eb3db, 0x29c9ed2a,
		0x5ce2a465, 0xa730f32c, 0xd0aa3fe8, 0x8a5cc091, 0xd49e2ce7, 0x0ce454a9, 0xd60acd86, 0x015f1919,
		0x77079103, 0xdea03af6, 0x78a8565e, 0xdee356df, 0x21f05cbe, 0x8b75e387, 0xb3c50651, 0xb8a5c3ef,
		0xd8eeb6d2, 0xe523be77, 0xc2154529, 0x2f69efdf, 0xafe67afb, 0xf470c4b2, 0xf3e0eb5b, 0xd6cc9876,
		0x39e4460c, 0x1fda8538, 0x1987832f, 0xca007367, 0xa99144f8, 0x296b299e, 0x492fc295, 0x9266beab,
		0xb5676e69, 0x9bd3ddda, 0xdf7e052f, 0xdb25701c, 0x1b5e51ee, 0xf65324e6, 0x6afce36c, 0x0316cc04,
		0x8644213e, 0xb7dc59d0, 0x7965291f, 0xccd6fd43, 0x41823979, 0x932bcdf6, 0xb657c34d, 0x4edfd282,
		0x7ae5290c, 0x3cb9536b, 0x851e20fe, 0x9833557e, 0x13ecf0b0, 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2,
	},
	{
		0x7ec90c04, 0x2c6e74b9, 0x9b0e66df, 0xa6337911, 0xb86a7fff, 0x1dd358f5, 0x44dd9d44, 0x1731167f,
		0x08fbf1fa, 0xe7f511cc, 0xd2051b00, 0x735aba00, 0x2ab722d8, 0x386381cb, 0xacf6243a, 0x69befd7a,
		0xe6a2e77f, 0xf0c720cd, 0xc4494816, 0xccf5c180, 0x38851640, 0x15b0a848, 0xe68b18cb, 0x4caadeff,
		0x5f480a01, 0x0412b2aa, 0x259814fc, 0x41d0efe2, 0x4e40b48d, 0x248eb6fb, 0x8dba1cfe, 0x41a99b02,
		0x1a550a04, 0xba8f65cb, 0x7251f4e7, 0x95a51725, 0xc106ecd7, 0x97a5980a, 0xc539b9aa, 0x4d79fe6a,
		0xf2f3f763, 0x68af8040, 0xed0c9e56, 0x11b4958b, 0xe1eb5a88, 0x8709e6b0, 0xd7e07156, 0x4e29fea7,
		0x6366e52d, 0x02d1c000, 0xc4ac8e05, 0x9377f571, 0x0c05372a, 0x578535f2, 0x2261be02, 0xd642a0c9,
		0xdf13a280, 0x74b55bd2, 0x682199c0, 0xd421e5ec, 0x53fb3ce8, 0xc8adedb3, 0x28a87fc9, 0x3d959981,
		0x5c1ff900, 0xfe38d399, 0x0c4eff0b, 0x062407ea, 0xaa2f4fb1, 0x4fb96976, 0x90c79505, 0xb0a8a774,
		0xef55a1ff, 0xe59ca2c2, 0xa6b62d27, 0xe66a4263, 0xdf65001f, 0x0ec50966, 0xdfdd55bc, 0x29de0655,
		0x911e739a, 0x17af8975, 0x32c7911c, 0x89f89468, 0x0d01e980, 0x524755f4, 0x03b63cc9, 0x0cc844b2,
		0xbcf3f0aa, 0x87ac36e9, 0xe53a7426, 0x01b3d82b, 0x1a9e7449, 0x64ee2d7e, 0xcddbb1da, 0x01c94910,
		0xb868bf80, 0x0d26f3fd, 0x9342ede7, 0x04a5c284, 0x636737b6, 0x50f5b616, 0xf24766e3, 0x8eca36c1,
		0x136e05db, 0xfef18391, 0xfb887a37, 0xd6e7f7d4, 0xc7fb7dc9, 0x3063fcdf, 0xb6f589de, 0xec2941da,
		0x26e46695, 0xb7566419, 0xf654efc5, 0xd08d58b7, 0x48925401, 0xc1bacb7f, 0xe5ff550f, 0xb6083049,
		0x5bb5d0e8, 0x87d72e5a, 0xab6a6ee1, 0x223a66ce, 0xc62bf3cd, 0x9e0885f9, 0x68cb3e47, 0x086c010f,
		0xa21de820, 0xd18b69de, 0xf3f65777, 0xfa02c3f6, 0x407edac3, 0xcbb3d550, 0x1793084d, 0xb0d70eba,
		0x0ab378d5, 0xd951fb0c, 0xded7da56, 0x4124bbe4, 0x94ca0b56, 0x0f5755d1, 0xe0e1e56e, 0x6184b5be,
		0x580a249f, 0x94f74bc0, 0xe327888e, 0x9f7b5561, 0xc3dc0280, 0x05687715, 0x646c6bd7, 0x44904db3,
		0x66b4f0a3, 0xc0f1648a, 0x697ed5af, 0x49e92ff6, 0x309e374f, 0x2cb6356a, 0x85808573, 0x4991f840,
		0x76f0ae02, 0x083be84d, 0x28421c9a, 0x44489406, 0x736e4cb8, 0xc1092910, 0x8bc95fc6, 0x7d869cf4,
		0x134f616f, 0x2e77118d, 0xb31b2be1, 0xaa90b472, 0x3ca5d717, 0x7d161bba, 0x9cad9010, 0xaf462ba2,
		0x9fe459d2, 0x45d34559, 0xd9f2da13, 0xdbc65487, 0xf3e4f94e, 0x176d486f, 0x097c13ea, 0x631da5c7,
		0x445f7382, 0x175683f4, 0xcdc66a97, 0x70be0288, 0xb3cdcf72, 0x6e5dd2f3, 0x20936079, 0x459b80a5,
		0xbe60e2db, 0xa9c23101, 0xeba5315c, 0x224e42f2, 0x1c5c1572, 0xf6721b2c, 0x1ad2fff3, 0x8c25404e,
		0x324ed72f, 0x4067b7fd, 0x0523138e, 0x5ca3bc78, 0xdc0fd66e, 0x75922283, 0x784d6b17, 0x58ebb16e,
		0x44094f85, 0x3f481d87, 0xfcfeae7b, 0x77b5ff76, 0x8c2302bf, 0xaaf47556, 0x5f46b02a, 0x2b092801,
		0x3d38f5f7, 0x0ca81f36, 0x52af4a8a, 0x66d5e7c0, 0xdf3b0874, 0x95055110, 0x1b5ad7a8, 0xf61ed5ad,
		0x6cf6e479, 0x20758184, 0xd0cefa65, 0x88f7be58, 0x4a046826, 0x0ff6f8f3, 0xa09c7f70, 0x5346aba0,
		0x5ce96c28, 0xe176eda3, 0x6bac307f, 0x376829d2, 0x85360fa9, 0x17e3fe2a, 0x24b79767, 0xf5a96b20,
		0xd6cd2595, 0x68ff1ebf, 0x7555442c, 0xf19f06be, 0xf9e0659a, 0xeeb9491d, 0x34010718, 0xbb30cab8,
		0xe822fe15, 0x88570983, 0x750e6249, 0xda627e55, 0x5e76ffa8, 0xb1534546, 0x6d47de08, 0xefe9e7d4,
	},
	{
		0xf6fa8f9d, 0x2cac6ce1, 0x4ca34867, 0xe2337f7c, 0x95db08e7, 0x016843b4, 0xeced5cbc, 0x325553ac,
		0xbf9f0960, 0xdfa1e2ed, 0x83f0579d, 0x63ed86b9, 0x1ab6a6b8, 0xde5ebe39, 0xf38ff732, 0x8989b138,
		0x33f14961, 0xc01937bd, 0xf506c6da, 0xe4625e7e, 0xa308ea99, 0x4e23e33c, 0x79cbd7cc, 0x48a14367,
		0xa3149619, 0xfec94bd5, 0xa114174a, 0xeaa01866, 0xa084db2d, 0x09a8486f, 0xa888614a, 0x2900af98,
		0x01665991, 0xe1992863, 0xc8f30c60, 0x2e78ef3c, 0xd0d51932, 0xcf0fec14, 0xf7ca07d2, 0xd0a82072,
		0xfd41197e, 0x9305a6b0, 0xe86be3da, 0x74bed3cd, 0x372da53c, 0x4c7f4448, 0xdab5d440, 0x6dba0ec3,
		0x083919a7, 0x9fbaeed9, 0x49dbcfb0, 0x4e670c53, 0x5c3d9c01, 0x64bdb941, 0x2c0e636a, 0xba7dd9cd,
		0xea6f7388, 0xe70bc762, 0x35f29adb, 0x5c4cdd8d, 0xf0d48d8c, 0xb88153e2, 0x08a19866, 0x1ae2eac8,
		0x284caf89, 0xaa928223, 0x9334be53, 0x3b3a21bf, 0x16434be3, 0x9aea3906, 0xefe8c36e, 0xf890cdd9,
		0x80226dae, 0xc340a4a3, 0xdf7e9c09, 0xa694a807, 0x5b7c5ecc, 0x221db3a6, 0x9a69a02f, 0x68818a54,
		0xceb2296f, 0x53c0843a, 0xfe893655, 0x25bfe68a, 0xb4628abc, 0xcf222ebf, 0x25ac6f48, 0xa9a99387,
		0x53bddb65, 0xe76ffbe7, 0xe967fd78, 0x0ba93563, 0x8e342bc1, 0xe8a11be9, 0x4980740d, 0xc8087dfc,
		0x8de4bf99, 0xa11101a0, 0x7fd37975, 0xda5a26c0, 0xe81f994f, 0x9528cd89, 0xfd339fed, 0xb87834bf,
		0x5f04456d, 0x22258698, 0xc9c4c83b, 0x2dc156be, 0x4f628daa, 0x57f55ec5, 0xe2220abe, 0xd2916ebf,
		0x4ec75b95, 0x24f2c3c0, 0x42d15d99, 0xcd0d7fa0, 0x7b6e27ff, 0xa8dc8af0, 0x7345c106, 0xf41e232f,
		0x35162386, 0xe6ea8926, 0x3333b094, 0x157ec6f2, 0x372b74af, 0x692573e4, 0xe9a9d848, 0xf3160289,
		0x3a62ef1d, 0xa787e238, 0xf3a5f676, 0x74364853, 0x20951063, 0x4576698d, 0xb6fad407, 0x592af950,
		0x36f73523, 0x4cfb6e87, 0x7da4cec0, 0x6c152daa, 0xcb0396a8, 0xc50dfe5d, 0xfcd707ab, 0x0921c42f,
		0x89dff0bb, 0x5fe2be78, 0x448f4f33, 0x754613c9, 0x2b05d08d, 0x48b9d585, 0xdc049441, 0xc8098f9b,
		0x7dede786, 0xc39a3373, 0x42410005, 0x6a091751, 0x0ef3c8a6, 0x890072d6, 0x28207682, 0xa9a9f7be,
		0xbf32679d, 0xd45b5b75, 0xb353fd00, 0xcbb0e358, 0x830f220a, 0x1f8fb214, 0xd372cf08, 0xcc3c4a13,
		0x8cf63166, 0x061c87be, 0x88c98f88, 0x6062e397, 0x47cf8e7a, 0xb6c85283, 0x3cc2acfb, 0x3fc06976,
		0x4e8f0252, 0x64d8314d, 0xda3870e3, 0x1e665459, 0xc10908f0, 0x513021a5, 0x6c5b68b7, 0x822f8aa0,
		0x3007cd3e, 0x74719eef, 0xdc872681, 0x073340d4, 0x7e432fd9, 0x0c5ec241, 0x8809286c, 0xf592d891,
		0x08a930f6, 0x957ef305, 0xb7fbffbd, 0xc266e96f, 0x6fe4ac98, 0xb173ecc0, 0xbc60b42a, 0x953498da,
		0xfba1ae12, 0x2d4bd736, 0x0f25faab, 0xa4f3fceb, 0xe2969123, 0x257f0c3d, 0x9348af49, 0x361400bc,
		0xe8816f4a, 0x3814f200, 0xa3f94043, 0x9c7a54c2, 0xbc704f57, 0xda41e7f9, 0xc25ad33a, 0x54f4a084,
		0xb17f5505, 0x59357cbe, 0xedbd15c8, 0x7f97c5ab, 0xba5ac7b5, 0xb6f6deaf, 0x3a479c3a, 0x5302da25,
		0x653d7e6a, 0x54268d49, 0x51a477ea, 0x5017d55b, 0xd7d25d88, 0x44136c76, 0x0404a8c8, 0xb8e5a121,
		0xb81a928a, 0x60ed5869, 0x97c55b96, 0xeaec991b, 0x29935913, 0x01fdb7f1, 0x088e8dfa, 0x9ab6f6f5,
		0x3b4cbf9f, 0x4a5de3ab, 0xe6051d35, 0xa0e1d855, 0xd36b4cf1, 0xf544edeb, 0xb0e93524, 0xbebb8fbd,
		0xa2d762cf, 0x49c92f54, 0x38b5f331, 0x7128a454, 0x48392905, 0xa65b1db8, 0x851c97bd, 0xd675cf2f,
	},
	{
		0x85e04019, 0x332bf567, 0x662dbfff, 0xcfc65693, 0x2a8d7f6f, 0xab9bc912, 0xde6008a1, 0x2028da1f,
		0x0227bce7, 0x4d642916, 0x18fac300, 0x50f18b82, 0x2cb2cb11, 0xb232e75c, 0x4b3695f2, 0xb28707de,
		0xa05fbcf6, 0xcd4181e9, 0xe150210c, 0xe24ef1bd, 0xb168c381, 0xfde4e789, 0x5c79b0d8, 0x1e8bfd43,
		0x4d495001, 0x38be4341, 0x913cee1d, 0x92a79c3f, 0x089766be, 0xbaeeadf4, 0x1286becf, 0xb6eacb19,
		0x2660c200, 0x7565bde4, 0x64241f7a, 0x8248dca9, 0xc3b3ad66, 0x28136086, 0x0bd8dfa8, 0x356d1cf2,
		0x107789be, 0xb3b2e9ce, 0x0502aa8f, 0x0bc0351e, 0x166bf52a, 0xeb12ff82, 0xe3486911, 0xd34d7516,
		0x4e7b3aff, 0x5f43671b, 0x9cf6e037, 0x4981ac83, 0x334266ce, 0x8c9341b7, 0xd0d854c0, 0xcb3a6c88,
		0x47bc2829, 0x4725ba37, 0xa66ad22b, 0x7ad61f1e, 0x0c5cbafa, 0x4437f107, 0xb6e79962, 0x42d2d816,
		0x0a961288, 0xe1a5c06e, 0x13749e67, 0x72fc081a, 0xb1d139f7, 0xf9583745, 0xcf19df58, 0xbec3f756,
		0xc06eba30, 0x07211b24, 0x45c28829, 0xc95e317f, 0xbc8ec511, 0x38bc46e9, 0xc6e6fa14, 0xbae8584a,
		0xad4ebc46, 0x468f508b, 0x7829435f, 0xf124183b, 0x821dba9f, 0xaff60ff4, 0xea2c4e6d, 0x16e39264,
		0x92544a8b, 0x009b4fc3, 0xaba68ced, 0x9ac96f78, 0x06a5b79a, 0xb2856e6e, 0x1aec3ca9, 0xbe838688,
		0x0e0804e9, 0x55f1be56, 0xe7e5363b, 0xb3a1f25d, 0xf7debb85, 0x61fe033c, 0x16746233, 0x3c034c28,
		0xda6d0c74, 0x79aac56c, 0x3ce4e1ad, 0x51f0c802, 0x98f8f35a, 0x1626a49f, 0xeed82b29, 0x1d382fe3,
		0x0c4fb99a, 0xbb325778, 0x3ec6d97b, 0x6e77a6a9, 0xcb658b5c, 0xd45230c7, 0x2bd1408b, 0x60c03eb7,
		0xb9068d78, 0xa33754f4, 0xf430c87d, 0xc8a71302, 0xb96d8c32, 0xebd4e7be, 0xbe8b9d2d, 0x7979fb06,
		0xe7225308, 0x8b75cf77, 0x11ef8da4, 0xe083c858, 0x8d6b786f, 0x5a6317a6, 0xfa5cf7a0, 0x5dda0033,
		0xf28ebfb0, 0xf5b9c310, 0xa0eac280, 0x08b9767a, 0xa3d9d2b0, 0x79d34217, 0x021a718d, 0x9ac6336a,
		0x2711fd60, 0x438050e3, 0x069908a8, 0x3d7fedc4, 0x826d2bef, 0x4eeb8476, 0x488dcf25, 0x36c9d566,
		0x28e74e41, 0xc2610aca, 0x3d49a9cf, 0xbae3b9df, 0xb65f8de6, 0x92aeaf64, 0x3ac7d5e6, 0x9ea80509,
		0xf22b017d, 0xa4173f70, 0xdd1e16c3, 0x15e0d7f9, 0x50b1b887, 0x2b9f4fd5, 0x625aba82, 0x6a017962,
		0x2ec01b9c, 0x15488aa9, 0xd716e740, 0x40055a2c, 0x93d29a22, 0xe32dbf9a, 0x058745b9, 0x3453dc1e,
		0xd699296e, 0x496cff6f, 0x1c9f4986, 0xdfe2ed07, 0xb87242d1, 0x19de7eae, 0x053e561a, 0x15ad6f8c,
		0x66626c1c, 0x7154c24c, 0xea082b2a, 0x93eb2939, 0x17dcb0f0, 0x58d4f2ae, 0x9ea294fb, 0x52cf564c,
		0x9883fe66, 0x2ec40581, 0x763953c3, 0x01d6692e, 0xd3a0c108, 0xa1e7160e, 0xe4f2dfa6, 0x693ed285,
		0x74904698, 0x4c2b0edd, 0x4f757656, 0x5d393378, 0xa132234f, 0x3d321c5d, 0xc3f5e194, 0x4b269301,
		0xc79f022f, 0x3c997e7e, 0x5e4f9504, 0x3ffafbbd, 0x76f7ad0e, 0x296693f4, 0x3d1fce6f, 0xc61e45be,
		0xd3b5ab34, 0xf72bf9b7, 0x1b0434c0, 0x4e72b567, 0x5592a33d, 0xb5229301, 0xcfd2a87f, 0x60aeb767,
		0x1814386b, 0x30bcc33d, 0x38a0c07d, 0xfd1606f2, 0xc363519b, 0x589dd390, 0x5479f8e6, 0x1cb8d647,
		0x97fd61a9, 0xea7759f4, 0x2d57539d, 0x569a58cf, 0xe84e63ad, 0x462e1b78, 0x6580f87e, 0xf3817914,
		0x91da55f4, 0x40a230f3, 0xd1988f35, 0xb6e318d2, 0x3ffa50bc, 0x3d40f021, 0xc3c0bdae, 0x4958c24c,
		0x518f36b2, 0x84b1d370, 0x0fedce83, 0x878ddada, 0xf2a279c7, 0x94e01be8, 0x90716f4b, 0x954b8aa3,
	},
	{
		0xe216300d, 0xbbddfffc, 0xa7ebdabd, 0x35648095, 0x7789f8b7, 0xe6c1121b, 0x0e241600, 0x052ce8b5,
		0x11a9cfb0, 0xe5952f11, 0xece7990a, 0x9386d174, 0x2a42931c, 0x76e38111, 0xb12def3a, 0x37ddddfc,
		0xde9adeb1, 0x0a0cc32c, 0xbe197029, 0x84a00940, 0xbb243a0f, 0xb4d137cf, 0xb44e79f0, 0x049eedfd,
		0x0b15a15d, 0x480d3168, 0x8bbbde5a, 0x669ded42, 0xc7ece831, 0x3f8f95e7, 0x72df191b, 0x7580330d,
		0x94074251, 0x5c7dcdfa, 0xabbe6d63, 0xaa402164, 0xb301d40a, 0x02e7d1ca, 0x53571dae, 0x7a3182a2,
		0x12a8ddec, 0xfdaa335d, 0x176f43e8, 0x71fb46d4, 0x38129022, 0xce949ad4, 0xb84769ad, 0x965bd862,
		0x82f3d055, 0x66fb9767, 0x15b80b4e, 0x1d5b47a0, 0x4cfde06f, 0xc28ec4b8, 0x57e8726e, 0x647a78fc,
		0x99865d44, 0x608bd593, 0x6c200e03, 0x39dc5ff6, 0x5d0b00a3, 0xae63aff2, 0x7e8bd632, 0x70108c0c,
		0xbbd35049, 0x2998df04, 0x980cf42a, 0x9b6df491, 0x9e7edd53, 0x06918548, 0x58cb7e07, 0x3b74ef2e,
		0x522fffb1, 0xd24708cc, 0x1c7e27cd, 0xa4eb215b, 0x3cf1d2e2, 0x19b47a38, 0x424f7618, 0x35856039,
		0x9d17dee7, 0x27eb35e6, 0xc9aff67b, 0x36baf5b8, 0x09c467cd, 0xc18910b1, 0xe11dbf7b, 0x06cd1af8,
		0x7170c608, 0x2d5e3354, 0xd4de495a, 0x64c6d006, 0xbcc0c62c, 0x3dd00db3, 0x708f8f34, 0x77d51b42,
		0x264f620f, 0x24b8d2bf, 0x15c1b79e, 0x46a52564, 0xf8d7e54e, 0x3e378160, 0x7895cda5, 0x859c15a5,
		0xe6459788, 0xc37bc75f, 0xdb07ba0c, 0x0676a3ab, 0x7f229b1e, 0x31842e7b, 0x24259fd7, 0xf8bef472,
		0x835ffcb8, 0x6df4c1f2, 0x96f5b195, 0xfd0af0fc, 0xb0fe134c, 0xe2506d3d, 0x4f9b12ea, 0xf215f225,
		0xa223736f, 0x9fb4c428, 0x25d04979, 0x34c713f8, 0xc4618187, 0xea7a6e98, 0x7cd16efc, 0x1436876c,
		0xf1544107, 0xbedeee14, 0x56e9af27, 0xa04aa441, 0x3cf7c899, 0x92ecbae6, 0xdd67016d, 0x151682eb,
		0xa842eedf, 0xfdba60b4, 0xf1907b75, 0x20e3030f, 0x24d8c29e, 0xe139673b, 0xefa63fb8, 0x71873054,
		0xb6f2cf3b, 0x9f326442, 0xcb15a4cc, 0xb01a4504, 0xf1e47d8d, 0x844a1be5, 0xbae7dfdc, 0x42cbda70,
		0xcd7dae0a, 0x57e85b7a, 0xd53f5af6, 0x20cf4d8c, 0xcea4d428, 0x79d130a4, 0x3486ebfb, 0x33d3cddc,
		0x77853b53, 0x37effcb5, 0xc5068778, 0xe580b3e6, 0x4e68b8f4, 0xc5c8b37e, 0x0d809ea2, 0x398feb7c,
		0x132a4f94, 0x43b7950e, 0x2fee7d1c, 0x223613bd, 0xdd06caa2, 0x37df932b, 0xc4248289, 0xacf3ebc3,
		0x5715f6b7, 0xef3478dd, 0xf267616f, 0xc148cbe4, 0x9052815e, 0x5e410fab, 0xb48a2465, 0x2eda7fa4,
		0xe87b40e4, 0xe98ea084, 0x5889e9e1, 0xefd390fc, 0xdd07d35b, 0xdb485694, 0x38d7e5b2, 0x57720101,
		0x730edebc, 0x5b643113, 0x94917e4f, 0x503c2fba, 0x646f1282, 0x7523d24a, 0xe0779695, 0xf9c17a8f,
		0x7a5b2121, 0xd187b896, 0x29263a4d, 0xba510cdf, 0x81f47c9f, 0xad1163ed, 0xea7b5965, 0x1a00726e,
		0x11403092, 0x00da6d77, 0x4a0cdd61, 0xad1f4603, 0x605bdfb0, 0x9eedc364, 0x22ebe6a8, 0xcee7d28a,
		0xa0e736a0, 0x5564a6b9, 0x10853209, 0xc7eb8f37, 0x2de705ca, 0x8951570f, 0xdf09822b, 0xbd691a6c,
		0xaa12e4f2, 0x87451c0f, 0xe0f6a27a, 0x3ada4819, 0x4cf1764f, 0x0d771c2b, 0x67cdb156, 0x350d8384,
		0x5938fa0f, 0x42399ef3, 0x36997b07, 0x0e84093d, 0x4aa93e61, 0x8360d87b, 0x1fa98b0c, 0x1149382c,
		0xe97625a5, 0x0614d1b7, 0x0e25244b, 0x0c768347, 0x589e8d82, 0x0d2059d1, 0xa466bb1e, 0xf8da0a82,
		0x04f19130, 0xba6e4ec0, 0x99265164, 0x1ee7230d, 0x50b2ad80, 0xeaee6801, 0x8db2a283, 0xea8bf59e,
	},
}
  07070100000CD9000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/chacha20   07070100000CDA000081A4000000000000000000000001645E367C000001DF000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/chacha20/chacha_arm64.go   // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build go1.11 && gc && !purego
// +build go1.11,gc,!purego

package chacha20

const bufSize = 256

//go:noescape
func xorKeyStreamVX(dst, src []byte, key *[8]uint32, nonce *[3]uint32, counter *uint32)

func (c *Cipher) xorKeyStreamBlocks(dst, src []byte) {
	xorKeyStreamVX(dst, src, &c.key, &c.nonce, &c.counter)
}
 07070100000CDB000081A4000000000000000000000001645E367C00001FF9000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/chacha20/chacha_arm64.s    // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build go1.11 && gc && !purego
// +build go1.11,gc,!purego

#include "textflag.h"

#define NUM_ROUNDS 10

// func xorKeyStreamVX(dst, src []byte, key *[8]uint32, nonce *[3]uint32, counter *uint32)
TEXT ·xorKeyStreamVX(SB), NOSPLIT, $0
	MOVD	dst+0(FP), R1
	MOVD	src+24(FP), R2
	MOVD	src_len+32(FP), R3
	MOVD	key+48(FP), R4
	MOVD	nonce+56(FP), R6
	MOVD	counter+64(FP), R7

	MOVD	$·constants(SB), R10
	MOVD	$·incRotMatrix(SB), R11

	MOVW	(R7), R20

	AND	$~255, R3, R13
	ADD	R2, R13, R12 // R12 for block end
	AND	$255, R3, R13
loop:
	MOVD	$NUM_ROUNDS, R21
	VLD1	(R11), [V30.S4, V31.S4]

	// load contants
	// VLD4R (R10), [V0.S4, V1.S4, V2.S4, V3.S4]
	WORD	$0x4D60E940

	// load keys
	// VLD4R 16(R4), [V4.S4, V5.S4, V6.S4, V7.S4]
	WORD	$0x4DFFE884
	// VLD4R 16(R4), [V8.S4, V9.S4, V10.S4, V11.S4]
	WORD	$0x4DFFE888
	SUB	$32, R4

	// load counter + nonce
	// VLD1R (R7), [V12.S4]
	WORD	$0x4D40C8EC

	// VLD3R (R6), [V13.S4, V14.S4, V15.S4]
	WORD	$0x4D40E8CD

	// update counter
	VADD	V30.S4, V12.S4, V12.S4

chacha:
	// V0..V3 += V4..V7
	// V12..V15 <<<= ((V12..V15 XOR V0..V3), 16)
	VADD	V0.S4, V4.S4, V0.S4
	VADD	V1.S4, V5.S4, V1.S4
	VADD	V2.S4, V6.S4, V2.S4
	VADD	V3.S4, V7.S4, V3.S4
	VEOR	V12.B16, V0.B16, V12.B16
	VEOR	V13.B16, V1.B16, V13.B16
	VEOR	V14.B16, V2.B16, V14.B16
	VEOR	V15.B16, V3.B16, V15.B16
	VREV32	V12.H8, V12.H8
	VREV32	V13.H8, V13.H8
	VREV32	V14.H8, V14.H8
	VREV32	V15.H8, V15.H8
	// V8..V11 += V12..V15
	// V4..V7 <<<= ((V4..V7 XOR V8..V11), 12)
	VADD	V8.S4, V12.S4, V8.S4
	VADD	V9.S4, V13.S4, V9.S4
	VADD	V10.S4, V14.S4, V10.S4
	VADD	V11.S4, V15.S4, V11.S4
	VEOR	V8.B16, V4.B16, V16.B16
	VEOR	V9.B16, V5.B16, V17.B16
	VEOR	V10.B16, V6.B16, V18.B16
	VEOR	V11.B16, V7.B16, V19.B16
	VSHL	$12, V16.S4, V4.S4
	VSHL	$12, V17.S4, V5.S4
	VSHL	$12, V18.S4, V6.S4
	VSHL	$12, V19.S4, V7.S4
	VSRI	$20, V16.S4, V4.S4
	VSRI	$20, V17.S4, V5.S4
	VSRI	$20, V18.S4, V6.S4
	VSRI	$20, V19.S4, V7.S4

	// V0..V3 += V4..V7
	// V12..V15 <<<= ((V12..V15 XOR V0..V3), 8)
	VADD	V0.S4, V4.S4, V0.S4
	VADD	V1.S4, V5.S4, V1.S4
	VADD	V2.S4, V6.S4, V2.S4
	VADD	V3.S4, V7.S4, V3.S4
	VEOR	V12.B16, V0.B16, V12.B16
	VEOR	V13.B16, V1.B16, V13.B16
	VEOR	V14.B16, V2.B16, V14.B16
	VEOR	V15.B16, V3.B16, V15.B16
	VTBL	V31.B16, [V12.B16], V12.B16
	VTBL	V31.B16, [V13.B16], V13.B16
	VTBL	V31.B16, [V14.B16], V14.B16
	VTBL	V31.B16, [V15.B16], V15.B16

	// V8..V11 += V12..V15
	// V4..V7 <<<= ((V4..V7 XOR V8..V11), 7)
	VADD	V12.S4, V8.S4, V8.S4
	VADD	V13.S4, V9.S4, V9.S4
	VADD	V14.S4, V10.S4, V10.S4
	VADD	V15.S4, V11.S4, V11.S4
	VEOR	V8.B16, V4.B16, V16.B16
	VEOR	V9.B16, V5.B16, V17.B16
	VEOR	V10.B16, V6.B16, V18.B16
	VEOR	V11.B16, V7.B16, V19.B16
	VSHL	$7, V16.S4, V4.S4
	VSHL	$7, V17.S4, V5.S4
	VSHL	$7, V18.S4, V6.S4
	VSHL	$7, V19.S4, V7.S4
	VSRI	$25, V16.S4, V4.S4
	VSRI	$25, V17.S4, V5.S4
	VSRI	$25, V18.S4, V6.S4
	VSRI	$25, V19.S4, V7.S4

	// V0..V3 += V5..V7, V4
	// V15,V12-V14 <<<= ((V15,V12-V14 XOR V0..V3), 16)
	VADD	V0.S4, V5.S4, V0.S4
	VADD	V1.S4, V6.S4, V1.S4
	VADD	V2.S4, V7.S4, V2.S4
	VADD	V3.S4, V4.S4, V3.S4
	VEOR	V15.B16, V0.B16, V15.B16
	VEOR	V12.B16, V1.B16, V12.B16
	VEOR	V13.B16, V2.B16, V13.B16
	VEOR	V14.B16, V3.B16, V14.B16
	VREV32	V12.H8, V12.H8
	VREV32	V13.H8, V13.H8
	VREV32	V14.H8, V14.H8
	VREV32	V15.H8, V15.H8

	// V10 += V15; V5 <<<= ((V10 XOR V5), 12)
	// ...
	VADD	V15.S4, V10.S4, V10.S4
	VADD	V12.S4, V11.S4, V11.S4
	VADD	V13.S4, V8.S4, V8.S4
	VADD	V14.S4, V9.S4, V9.S4
	VEOR	V10.B16, V5.B16, V16.B16
	VEOR	V11.B16, V6.B16, V17.B16
	VEOR	V8.B16, V7.B16, V18.B16
	VEOR	V9.B16, V4.B16, V19.B16
	VSHL	$12, V16.S4, V5.S4
	VSHL	$12, V17.S4, V6.S4
	VSHL	$12, V18.S4, V7.S4
	VSHL	$12, V19.S4, V4.S4
	VSRI	$20, V16.S4, V5.S4
	VSRI	$20, V17.S4, V6.S4
	VSRI	$20, V18.S4, V7.S4
	VSRI	$20, V19.S4, V4.S4

	// V0 += V5; V15 <<<= ((V0 XOR V15), 8)
	// ...
	VADD	V5.S4, V0.S4, V0.S4
	VADD	V6.S4, V1.S4, V1.S4
	VADD	V7.S4, V2.S4, V2.S4
	VADD	V4.S4, V3.S4, V3.S4
	VEOR	V0.B16, V15.B16, V15.B16
	VEOR	V1.B16, V12.B16, V12.B16
	VEOR	V2.B16, V13.B16, V13.B16
	VEOR	V3.B16, V14.B16, V14.B16
	VTBL	V31.B16, [V12.B16], V12.B16
	VTBL	V31.B16, [V13.B16], V13.B16
	VTBL	V31.B16, [V14.B16], V14.B16
	VTBL	V31.B16, [V15.B16], V15.B16

	// V10 += V15; V5 <<<= ((V10 XOR V5), 7)
	// ...
	VADD	V15.S4, V10.S4, V10.S4
	VADD	V12.S4, V11.S4, V11.S4
	VADD	V13.S4, V8.S4, V8.S4
	VADD	V14.S4, V9.S4, V9.S4
	VEOR	V10.B16, V5.B16, V16.B16
	VEOR	V11.B16, V6.B16, V17.B16
	VEOR	V8.B16, V7.B16, V18.B16
	VEOR	V9.B16, V4.B16, V19.B16
	VSHL	$7, V16.S4, V5.S4
	VSHL	$7, V17.S4, V6.S4
	VSHL	$7, V18.S4, V7.S4
	VSHL	$7, V19.S4, V4.S4
	VSRI	$25, V16.S4, V5.S4
	VSRI	$25, V17.S4, V6.S4
	VSRI	$25, V18.S4, V7.S4
	VSRI	$25, V19.S4, V4.S4

	SUB	$1, R21
	CBNZ	R21, chacha

	// VLD4R (R10), [V16.S4, V17.S4, V18.S4, V19.S4]
	WORD	$0x4D60E950

	// VLD4R 16(R4), [V20.S4, V21.S4, V22.S4, V23.S4]
	WORD	$0x4DFFE894
	VADD	V30.S4, V12.S4, V12.S4
	VADD	V16.S4, V0.S4, V0.S4
	VADD	V17.S4, V1.S4, V1.S4
	VADD	V18.S4, V2.S4, V2.S4
	VADD	V19.S4, V3.S4, V3.S4
	// VLD4R 16(R4), [V24.S4, V25.S4, V26.S4, V27.S4]
	WORD	$0x4DFFE898
	// restore R4
	SUB	$32, R4

	// load counter + nonce
	// VLD1R (R7), [V28.S4]
	WORD	$0x4D40C8FC
	// VLD3R (R6), [V29.S4, V30.S4, V31.S4]
	WORD	$0x4D40E8DD

	VADD	V20.S4, V4.S4, V4.S4
	VADD	V21.S4, V5.S4, V5.S4
	VADD	V22.S4, V6.S4, V6.S4
	VADD	V23.S4, V7.S4, V7.S4
	VADD	V24.S4, V8.S4, V8.S4
	VADD	V25.S4, V9.S4, V9.S4
	VADD	V26.S4, V10.S4, V10.S4
	VADD	V27.S4, V11.S4, V11.S4
	VADD	V28.S4, V12.S4, V12.S4
	VADD	V29.S4, V13.S4, V13.S4
	VADD	V30.S4, V14.S4, V14.S4
	VADD	V31.S4, V15.S4, V15.S4

	VZIP1	V1.S4, V0.S4, V16.S4
	VZIP2	V1.S4, V0.S4, V17.S4
	VZIP1	V3.S4, V2.S4, V18.S4
	VZIP2	V3.S4, V2.S4, V19.S4
	VZIP1	V5.S4, V4.S4, V20.S4
	VZIP2	V5.S4, V4.S4, V21.S4
	VZIP1	V7.S4, V6.S4, V22.S4
	VZIP2	V7.S4, V6.S4, V23.S4
	VZIP1	V9.S4, V8.S4, V24.S4
	VZIP2	V9.S4, V8.S4, V25.S4
	VZIP1	V11.S4, V10.S4, V26.S4
	VZIP2	V11.S4, V10.S4, V27.S4
	VZIP1	V13.S4, V12.S4, V28.S4
	VZIP2	V13.S4, V12.S4, V29.S4
	VZIP1	V15.S4, V14.S4, V30.S4
	VZIP2	V15.S4, V14.S4, V31.S4
	VZIP1	V18.D2, V16.D2, V0.D2
	VZIP2	V18.D2, V16.D2, V4.D2
	VZIP1	V19.D2, V17.D2, V8.D2
	VZIP2	V19.D2, V17.D2, V12.D2
	VLD1.P	64(R2), [V16.B16, V17.B16, V18.B16, V19.B16]

	VZIP1	V22.D2, V20.D2, V1.D2
	VZIP2	V22.D2, V20.D2, V5.D2
	VZIP1	V23.D2, V21.D2, V9.D2
	VZIP2	V23.D2, V21.D2, V13.D2
	VLD1.P	64(R2), [V20.B16, V21.B16, V22.B16, V23.B16]
	VZIP1	V26.D2, V24.D2, V2.D2
	VZIP2	V26.D2, V24.D2, V6.D2
	VZIP1	V27.D2, V25.D2, V10.D2
	VZIP2	V27.D2, V25.D2, V14.D2
	VLD1.P	64(R2), [V24.B16, V25.B16, V26.B16, V27.B16]
	VZIP1	V30.D2, V28.D2, V3.D2
	VZIP2	V30.D2, V28.D2, V7.D2
	VZIP1	V31.D2, V29.D2, V11.D2
	VZIP2	V31.D2, V29.D2, V15.D2
	VLD1.P	64(R2), [V28.B16, V29.B16, V30.B16, V31.B16]
	VEOR	V0.B16, V16.B16, V16.B16
	VEOR	V1.B16, V17.B16, V17.B16
	VEOR	V2.B16, V18.B16, V18.B16
	VEOR	V3.B16, V19.B16, V19.B16
	VST1.P	[V16.B16, V17.B16, V18.B16, V19.B16], 64(R1)
	VEOR	V4.B16, V20.B16, V20.B16
	VEOR	V5.B16, V21.B16, V21.B16
	VEOR	V6.B16, V22.B16, V22.B16
	VEOR	V7.B16, V23.B16, V23.B16
	VST1.P	[V20.B16, V21.B16, V22.B16, V23.B16], 64(R1)
	VEOR	V8.B16, V24.B16, V24.B16
	VEOR	V9.B16, V25.B16, V25.B16
	VEOR	V10.B16, V26.B16, V26.B16
	VEOR	V11.B16, V27.B16, V27.B16
	VST1.P	[V24.B16, V25.B16, V26.B16, V27.B16], 64(R1)
	VEOR	V12.B16, V28.B16, V28.B16
	VEOR	V13.B16, V29.B16, V29.B16
	VEOR	V14.B16, V30.B16, V30.B16
	VEOR	V15.B16, V31.B16, V31.B16
	VST1.P	[V28.B16, V29.B16, V30.B16, V31.B16], 64(R1)

	ADD	$4, R20
	MOVW	R20, (R7) // update counter

	CMP	R2, R12
	BGT	loop

	RET


DATA	·constants+0x00(SB)/4, $0x61707865
DATA	·constants+0x04(SB)/4, $0x3320646e
DATA	·constants+0x08(SB)/4, $0x79622d32
DATA	·constants+0x0c(SB)/4, $0x6b206574
GLOBL	·constants(SB), NOPTR|RODATA, $32

DATA	·incRotMatrix+0x00(SB)/4, $0x00000000
DATA	·incRotMatrix+0x04(SB)/4, $0x00000001
DATA	·incRotMatrix+0x08(SB)/4, $0x00000002
DATA	·incRotMatrix+0x0c(SB)/4, $0x00000003
DATA	·incRotMatrix+0x10(SB)/4, $0x02010003
DATA	·incRotMatrix+0x14(SB)/4, $0x06050407
DATA	·incRotMatrix+0x18(SB)/4, $0x0A09080B
DATA	·incRotMatrix+0x1c(SB)/4, $0x0E0D0C0F
GLOBL	·incRotMatrix(SB), NOPTR|RODATA, $32
   07070100000CDC000081A4000000000000000000000001645E367C00003768000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/chacha20/chacha_generic.go // Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package chacha20 implements the ChaCha20 and XChaCha20 encryption algorithms
// as specified in RFC 8439 and draft-irtf-cfrg-xchacha-01.
package chacha20

import (
	"crypto/cipher"
	"encoding/binary"
	"errors"
	"math/bits"

	"golang.org/x/crypto/internal/alias"
)

const (
	// KeySize is the size of the key used by this cipher, in bytes.
	KeySize = 32

	// NonceSize is the size of the nonce used with the standard variant of this
	// cipher, in bytes.
	//
	// Note that this is too short to be safely generated at random if the same
	// key is reused more than 2³² times.
	NonceSize = 12

	// NonceSizeX is the size of the nonce used with the XChaCha20 variant of
	// this cipher, in bytes.
	NonceSizeX = 24
)

// Cipher is a stateful instance of ChaCha20 or XChaCha20 using a particular key
// and nonce. A *Cipher implements the cipher.Stream interface.
type Cipher struct {
	// The ChaCha20 state is 16 words: 4 constant, 8 of key, 1 of counter
	// (incremented after each block), and 3 of nonce.
	key     [8]uint32
	counter uint32
	nonce   [3]uint32

	// The last len bytes of buf are leftover key stream bytes from the previous
	// XORKeyStream invocation. The size of buf depends on how many blocks are
	// computed at a time by xorKeyStreamBlocks.
	buf [bufSize]byte
	len int

	// overflow is set when the counter overflowed, no more blocks can be
	// generated, and the next XORKeyStream call should panic.
	overflow bool

	// The counter-independent results of the first round are cached after they
	// are computed the first time.
	precompDone      bool
	p1, p5, p9, p13  uint32
	p2, p6, p10, p14 uint32
	p3, p7, p11, p15 uint32
}

var _ cipher.Stream = (*Cipher)(nil)

// NewUnauthenticatedCipher creates a new ChaCha20 stream cipher with the given
// 32 bytes key and a 12 or 24 bytes nonce. If a nonce of 24 bytes is provided,
// the XChaCha20 construction will be used. It returns an error if key or nonce
// have any other length.
//
// Note that ChaCha20, like all stream ciphers, is not authenticated and allows
// attackers to silently tamper with the plaintext. For this reason, it is more
// appropriate as a building block than as a standalone encryption mechanism.
// Instead, consider using package golang.org/x/crypto/chacha20poly1305.
func NewUnauthenticatedCipher(key, nonce []byte) (*Cipher, error) {
	// This function is split into a wrapper so that the Cipher allocation will
	// be inlined, and depending on how the caller uses the return value, won't
	// escape to the heap.
	c := &Cipher{}
	return newUnauthenticatedCipher(c, key, nonce)
}

func newUnauthenticatedCipher(c *Cipher, key, nonce []byte) (*Cipher, error) {
	if len(key) != KeySize {
		return nil, errors.New("chacha20: wrong key size")
	}
	if len(nonce) == NonceSizeX {
		// XChaCha20 uses the ChaCha20 core to mix 16 bytes of the nonce into a
		// derived key, allowing it to operate on a nonce of 24 bytes. See
		// draft-irtf-cfrg-xchacha-01, Section 2.3.
		key, _ = HChaCha20(key, nonce[0:16])
		cNonce := make([]byte, NonceSize)
		copy(cNonce[4:12], nonce[16:24])
		nonce = cNonce
	} else if len(nonce) != NonceSize {
		return nil, errors.New("chacha20: wrong nonce size")
	}

	key, nonce = key[:KeySize], nonce[:NonceSize] // bounds check elimination hint
	c.key = [8]uint32{
		binary.LittleEndian.Uint32(key[0:4]),
		binary.LittleEndian.Uint32(key[4:8]),
		binary.LittleEndian.Uint32(key[8:12]),
		binary.LittleEndian.Uint32(key[12:16]),
		binary.LittleEndian.Uint32(key[16:20]),
		binary.LittleEndian.Uint32(key[20:24]),
		binary.LittleEndian.Uint32(key[24:28]),
		binary.LittleEndian.Uint32(key[28:32]),
	}
	c.nonce = [3]uint32{
		binary.LittleEndian.Uint32(nonce[0:4]),
		binary.LittleEndian.Uint32(nonce[4:8]),
		binary.LittleEndian.Uint32(nonce[8:12]),
	}
	return c, nil
}

// The constant first 4 words of the ChaCha20 state.
const (
	j0 uint32 = 0x61707865 // expa
	j1 uint32 = 0x3320646e // nd 3
	j2 uint32 = 0x79622d32 // 2-by
	j3 uint32 = 0x6b206574 // te k
)

const blockSize = 64

// quarterRound is the core of ChaCha20. It shuffles the bits of 4 state words.
// It's executed 4 times for each of the 20 ChaCha20 rounds, operating on all 16
// words each round, in columnar or diagonal groups of 4 at a time.
func quarterRound(a, b, c, d uint32) (uint32, uint32, uint32, uint32) {
	a += b
	d ^= a
	d = bits.RotateLeft32(d, 16)
	c += d
	b ^= c
	b = bits.RotateLeft32(b, 12)
	a += b
	d ^= a
	d = bits.RotateLeft32(d, 8)
	c += d
	b ^= c
	b = bits.RotateLeft32(b, 7)
	return a, b, c, d
}

// SetCounter sets the Cipher counter. The next invocation of XORKeyStream will
// behave as if (64 * counter) bytes had been encrypted so far.
//
// To prevent accidental counter reuse, SetCounter panics if counter is less
// than the current value.
//
// Note that the execution time of XORKeyStream is not independent of the
// counter value.
func (s *Cipher) SetCounter(counter uint32) {
	// Internally, s may buffer multiple blocks, which complicates this
	// implementation slightly. When checking whether the counter has rolled
	// back, we must use both s.counter and s.len to determine how many blocks
	// we have already output.
	outputCounter := s.counter - uint32(s.len)/blockSize
	if s.overflow || counter < outputCounter {
		panic("chacha20: SetCounter attempted to rollback counter")
	}

	// In the general case, we set the new counter value and reset s.len to 0,
	// causing the next call to XORKeyStream to refill the buffer. However, if
	// we're advancing within the existing buffer, we can save work by simply
	// setting s.len.
	if counter < s.counter {
		s.len = int(s.counter-counter) * blockSize
	} else {
		s.counter = counter
		s.len = 0
	}
}

// XORKeyStream XORs each byte in the given slice with a byte from the
// cipher's key stream. Dst and src must overlap entirely or not at all.
//
// If len(dst) < len(src), XORKeyStream will panic. It is acceptable
// to pass a dst bigger than src, and in that case, XORKeyStream will
// only update dst[:len(src)] and will not touch the rest of dst.
//
// Multiple calls to XORKeyStream behave as if the concatenation of
// the src buffers was passed in a single run. That is, Cipher
// maintains state and does not reset at each XORKeyStream call.
func (s *Cipher) XORKeyStream(dst, src []byte) {
	if len(src) == 0 {
		return
	}
	if len(dst) < len(src) {
		panic("chacha20: output smaller than input")
	}
	dst = dst[:len(src)]
	if alias.InexactOverlap(dst, src) {
		panic("chacha20: invalid buffer overlap")
	}

	// First, drain any remaining key stream from a previous XORKeyStream.
	if s.len != 0 {
		keyStream := s.buf[bufSize-s.len:]
		if len(src) < len(keyStream) {
			keyStream = keyStream[:len(src)]
		}
		_ = src[len(keyStream)-1] // bounds check elimination hint
		for i, b := range keyStream {
			dst[i] = src[i] ^ b
		}
		s.len -= len(keyStream)
		dst, src = dst[len(keyStream):], src[len(keyStream):]
	}
	if len(src) == 0 {
		return
	}

	// If we'd need to let the counter overflow and keep generating output,
	// panic immediately. If instead we'd only reach the last block, remember
	// not to generate any more output after the buffer is drained.
	numBlocks := (uint64(len(src)) + blockSize - 1) / blockSize
	if s.overflow || uint64(s.counter)+numBlocks > 1<<32 {
		panic("chacha20: counter overflow")
	} else if uint64(s.counter)+numBlocks == 1<<32 {
		s.overflow = true
	}

	// xorKeyStreamBlocks implementations expect input lengths that are a
	// multiple of bufSize. Platform-specific ones process multiple blocks at a
	// time, so have bufSizes that are a multiple of blockSize.

	full := len(src) - len(src)%bufSize
	if full > 0 {
		s.xorKeyStreamBlocks(dst[:full], src[:full])
	}
	dst, src = dst[full:], src[full:]

	// If using a multi-block xorKeyStreamBlocks would overflow, use the generic
	// one that does one block at a time.
	const blocksPerBuf = bufSize / blockSize
	if uint64(s.counter)+blocksPerBuf > 1<<32 {
		s.buf = [bufSize]byte{}
		numBlocks := (len(src) + blockSize - 1) / blockSize
		buf := s.buf[bufSize-numBlocks*blockSize:]
		copy(buf, src)
		s.xorKeyStreamBlocksGeneric(buf, buf)
		s.len = len(buf) - copy(dst, buf)
		return
	}

	// If we have a partial (multi-)block, pad it for xorKeyStreamBlocks, and
	// keep the leftover keystream for the next XORKeyStream invocation.
	if len(src) > 0 {
		s.buf = [bufSize]byte{}
		copy(s.buf[:], src)
		s.xorKeyStreamBlocks(s.buf[:], s.buf[:])
		s.len = bufSize - copy(dst, s.buf[:])
	}
}

func (s *Cipher) xorKeyStreamBlocksGeneric(dst, src []byte) {
	if len(dst) != len(src) || len(dst)%blockSize != 0 {
		panic("chacha20: internal error: wrong dst and/or src length")
	}

	// To generate each block of key stream, the initial cipher state
	// (represented below) is passed through 20 rounds of shuffling,
	// alternatively applying quarterRounds by columns (like 1, 5, 9, 13)
	// or by diagonals (like 1, 6, 11, 12).
	//
	//      0:cccccccc   1:cccccccc   2:cccccccc   3:cccccccc
	//      4:kkkkkkkk   5:kkkkkkkk   6:kkkkkkkk   7:kkkkkkkk
	//      8:kkkkkkkk   9:kkkkkkkk  10:kkkkkkkk  11:kkkkkkkk
	//     12:bbbbbbbb  13:nnnnnnnn  14:nnnnnnnn  15:nnnnnnnn
	//
	//            c=constant k=key b=blockcount n=nonce
	var (
		c0, c1, c2, c3   = j0, j1, j2, j3
		c4, c5, c6, c7   = s.key[0], s.key[1], s.key[2], s.key[3]
		c8, c9, c10, c11 = s.key[4], s.key[5], s.key[6], s.key[7]
		_, c13, c14, c15 = s.counter, s.nonce[0], s.nonce[1], s.nonce[2]
	)

	// Three quarters of the first round don't depend on the counter, so we can
	// calculate them here, and reuse them for multiple blocks in the loop, and
	// for future XORKeyStream invocations.
	if !s.precompDone {
		s.p1, s.p5, s.p9, s.p13 = quarterRound(c1, c5, c9, c13)
		s.p2, s.p6, s.p10, s.p14 = quarterRound(c2, c6, c10, c14)
		s.p3, s.p7, s.p11, s.p15 = quarterRound(c3, c7, c11, c15)
		s.precompDone = true
	}

	// A condition of len(src) > 0 would be sufficient, but this also
	// acts as a bounds check elimination hint.
	for len(src) >= 64 && len(dst) >= 64 {
		// The remainder of the first column round.
		fcr0, fcr4, fcr8, fcr12 := quarterRound(c0, c4, c8, s.counter)

		// The second diagonal round.
		x0, x5, x10, x15 := quarterRound(fcr0, s.p5, s.p10, s.p15)
		x1, x6, x11, x12 := quarterRound(s.p1, s.p6, s.p11, fcr12)
		x2, x7, x8, x13 := quarterRound(s.p2, s.p7, fcr8, s.p13)
		x3, x4, x9, x14 := quarterRound(s.p3, fcr4, s.p9, s.p14)

		// The remaining 18 rounds.
		for i := 0; i < 9; i++ {
			// Column round.
			x0, x4, x8, x12 = quarterRound(x0, x4, x8, x12)
			x1, x5, x9, x13 = quarterRound(x1, x5, x9, x13)
			x2, x6, x10, x14 = quarterRound(x2, x6, x10, x14)
			x3, x7, x11, x15 = quarterRound(x3, x7, x11, x15)

			// Diagonal round.
			x0, x5, x10, x15 = quarterRound(x0, x5, x10, x15)
			x1, x6, x11, x12 = quarterRound(x1, x6, x11, x12)
			x2, x7, x8, x13 = quarterRound(x2, x7, x8, x13)
			x3, x4, x9, x14 = quarterRound(x3, x4, x9, x14)
		}

		// Add back the initial state to generate the key stream, then
		// XOR the key stream with the source and write out the result.
		addXor(dst[0:4], src[0:4], x0, c0)
		addXor(dst[4:8], src[4:8], x1, c1)
		addXor(dst[8:12], src[8:12], x2, c2)
		addXor(dst[12:16], src[12:16], x3, c3)
		addXor(dst[16:20], src[16:20], x4, c4)
		addXor(dst[20:24], src[20:24], x5, c5)
		addXor(dst[24:28], src[24:28], x6, c6)
		addXor(dst[28:32], src[28:32], x7, c7)
		addXor(dst[32:36], src[32:36], x8, c8)
		addXor(dst[36:40], src[36:40], x9, c9)
		addXor(dst[40:44], src[40:44], x10, c10)
		addXor(dst[44:48], src[44:48], x11, c11)
		addXor(dst[48:52], src[48:52], x12, s.counter)
		addXor(dst[52:56], src[52:56], x13, c13)
		addXor(dst[56:60], src[56:60], x14, c14)
		addXor(dst[60:64], src[60:64], x15, c15)

		s.counter += 1

		src, dst = src[blockSize:], dst[blockSize:]
	}
}

// HChaCha20 uses the ChaCha20 core to generate a derived key from a 32 bytes
// key and a 16 bytes nonce. It returns an error if key or nonce have any other
// length. It is used as part of the XChaCha20 construction.
func HChaCha20(key, nonce []byte) ([]byte, error) {
	// This function is split into a wrapper so that the slice allocation will
	// be inlined, and depending on how the caller uses the return value, won't
	// escape to the heap.
	out := make([]byte, 32)
	return hChaCha20(out, key, nonce)
}

func hChaCha20(out, key, nonce []byte) ([]byte, error) {
	if len(key) != KeySize {
		return nil, errors.New("chacha20: wrong HChaCha20 key size")
	}
	if len(nonce) != 16 {
		return nil, errors.New("chacha20: wrong HChaCha20 nonce size")
	}

	x0, x1, x2, x3 := j0, j1, j2, j3
	x4 := binary.LittleEndian.Uint32(key[0:4])
	x5 := binary.LittleEndian.Uint32(key[4:8])
	x6 := binary.LittleEndian.Uint32(key[8:12])
	x7 := binary.LittleEndian.Uint32(key[12:16])
	x8 := binary.LittleEndian.Uint32(key[16:20])
	x9 := binary.LittleEndian.Uint32(key[20:24])
	x10 := binary.LittleEndian.Uint32(key[24:28])
	x11 := binary.LittleEndian.Uint32(key[28:32])
	x12 := binary.LittleEndian.Uint32(nonce[0:4])
	x13 := binary.LittleEndian.Uint32(nonce[4:8])
	x14 := binary.LittleEndian.Uint32(nonce[8:12])
	x15 := binary.LittleEndian.Uint32(nonce[12:16])

	for i := 0; i < 10; i++ {
		// Diagonal round.
		x0, x4, x8, x12 = quarterRound(x0, x4, x8, x12)
		x1, x5, x9, x13 = quarterRound(x1, x5, x9, x13)
		x2, x6, x10, x14 = quarterRound(x2, x6, x10, x14)
		x3, x7, x11, x15 = quarterRound(x3, x7, x11, x15)

		// Column round.
		x0, x5, x10, x15 = quarterRound(x0, x5, x10, x15)
		x1, x6, x11, x12 = quarterRound(x1, x6, x11, x12)
		x2, x7, x8, x13 = quarterRound(x2, x7, x8, x13)
		x3, x4, x9, x14 = quarterRound(x3, x4, x9, x14)
	}

	_ = out[31] // bounds check elimination hint
	binary.LittleEndian.PutUint32(out[0:4], x0)
	binary.LittleEndian.PutUint32(out[4:8], x1)
	binary.LittleEndian.PutUint32(out[8:12], x2)
	binary.LittleEndian.PutUint32(out[12:16], x3)
	binary.LittleEndian.PutUint32(out[16:20], x12)
	binary.LittleEndian.PutUint32(out[20:24], x13)
	binary.LittleEndian.PutUint32(out[24:28], x14)
	binary.LittleEndian.PutUint32(out[28:32], x15)
	return out, nil
}
07070100000CDD000081A4000000000000000000000001645E367C000001B9000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/chacha20/chacha_noasm.go   // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build (!arm64 && !s390x && !ppc64le) || (arm64 && !go1.11) || !gc || purego
// +build !arm64,!s390x,!ppc64le arm64,!go1.11 !gc purego

package chacha20

const bufSize = blockSize

func (s *Cipher) xorKeyStreamBlocks(dst, src []byte) {
	s.xorKeyStreamBlocksGeneric(dst, src)
}
   07070100000CDE000081A4000000000000000000000001645E367C000001D4000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/chacha20/chacha_ppc64le.go // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build gc && !purego
// +build gc,!purego

package chacha20

const bufSize = 256

//go:noescape
func chaCha20_ctr32_vsx(out, inp *byte, len int, key *[8]uint32, counter *uint32)

func (c *Cipher) xorKeyStreamBlocks(dst, src []byte) {
	chaCha20_ctr32_vsx(&dst[0], &src[0], len(src), &c.key, &c.counter)
}
07070100000CDF000081A4000000000000000000000001645E367C00002479000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/chacha20/chacha_ppc64le.s  // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Based on CRYPTOGAMS code with the following comment:
// # ====================================================================
// # Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
// # project. The module is, however, dual licensed under OpenSSL and
// # CRYPTOGAMS licenses depending on where you obtain it. For further
// # details see http://www.openssl.org/~appro/cryptogams/.
// # ====================================================================

// Code for the perl script that generates the ppc64 assembler
// can be found in the cryptogams repository at the link below. It is based on
// the original from openssl.

// https://github.com/dot-asm/cryptogams/commit/a60f5b50ed908e91

// The differences in this and the original implementation are
// due to the calling conventions and initialization of constants.

//go:build gc && !purego
// +build gc,!purego

#include "textflag.h"

#define OUT  R3
#define INP  R4
#define LEN  R5
#define KEY  R6
#define CNT  R7
#define TMP  R15

#define CONSTBASE  R16
#define BLOCKS R17

DATA consts<>+0x00(SB)/8, $0x3320646e61707865
DATA consts<>+0x08(SB)/8, $0x6b20657479622d32
DATA consts<>+0x10(SB)/8, $0x0000000000000001
DATA consts<>+0x18(SB)/8, $0x0000000000000000
DATA consts<>+0x20(SB)/8, $0x0000000000000004
DATA consts<>+0x28(SB)/8, $0x0000000000000000
DATA consts<>+0x30(SB)/8, $0x0a0b08090e0f0c0d
DATA consts<>+0x38(SB)/8, $0x0203000106070405
DATA consts<>+0x40(SB)/8, $0x090a0b080d0e0f0c
DATA consts<>+0x48(SB)/8, $0x0102030005060704
DATA consts<>+0x50(SB)/8, $0x6170786561707865
DATA consts<>+0x58(SB)/8, $0x6170786561707865
DATA consts<>+0x60(SB)/8, $0x3320646e3320646e
DATA consts<>+0x68(SB)/8, $0x3320646e3320646e
DATA consts<>+0x70(SB)/8, $0x79622d3279622d32
DATA consts<>+0x78(SB)/8, $0x79622d3279622d32
DATA consts<>+0x80(SB)/8, $0x6b2065746b206574
DATA consts<>+0x88(SB)/8, $0x6b2065746b206574
DATA consts<>+0x90(SB)/8, $0x0000000100000000
DATA consts<>+0x98(SB)/8, $0x0000000300000002
GLOBL consts<>(SB), RODATA, $0xa0

//func chaCha20_ctr32_vsx(out, inp *byte, len int, key *[8]uint32, counter *uint32)
TEXT ·chaCha20_ctr32_vsx(SB),NOSPLIT,$64-40
	MOVD out+0(FP), OUT
	MOVD inp+8(FP), INP
	MOVD len+16(FP), LEN
	MOVD key+24(FP), KEY
	MOVD counter+32(FP), CNT

	// Addressing for constants
	MOVD $consts<>+0x00(SB), CONSTBASE
	MOVD $16, R8
	MOVD $32, R9
	MOVD $48, R10
	MOVD $64, R11
	SRD $6, LEN, BLOCKS
	// V16
	LXVW4X (CONSTBASE)(R0), VS48
	ADD $80,CONSTBASE

	// Load key into V17,V18
	LXVW4X (KEY)(R0), VS49
	LXVW4X (KEY)(R8), VS50

	// Load CNT, NONCE into V19
	LXVW4X (CNT)(R0), VS51

	// Clear V27
	VXOR V27, V27, V27

	// V28
	LXVW4X (CONSTBASE)(R11), VS60

	// splat slot from V19 -> V26
	VSPLTW $0, V19, V26

	VSLDOI $4, V19, V27, V19
	VSLDOI $12, V27, V19, V19

	VADDUWM V26, V28, V26

	MOVD $10, R14
	MOVD R14, CTR

loop_outer_vsx:
	// V0, V1, V2, V3
	LXVW4X (R0)(CONSTBASE), VS32
	LXVW4X (R8)(CONSTBASE), VS33
	LXVW4X (R9)(CONSTBASE), VS34
	LXVW4X (R10)(CONSTBASE), VS35

	// splat values from V17, V18 into V4-V11
	VSPLTW $0, V17, V4
	VSPLTW $1, V17, V5
	VSPLTW $2, V17, V6
	VSPLTW $3, V17, V7
	VSPLTW $0, V18, V8
	VSPLTW $1, V18, V9
	VSPLTW $2, V18, V10
	VSPLTW $3, V18, V11

	// VOR
	VOR V26, V26, V12

	// splat values from V19 -> V13, V14, V15
	VSPLTW $1, V19, V13
	VSPLTW $2, V19, V14
	VSPLTW $3, V19, V15

	// splat   const values
	VSPLTISW $-16, V27
	VSPLTISW $12, V28
	VSPLTISW $8, V29
	VSPLTISW $7, V30

loop_vsx:
	VADDUWM V0, V4, V0
	VADDUWM V1, V5, V1
	VADDUWM V2, V6, V2
	VADDUWM V3, V7, V3

	VXOR V12, V0, V12
	VXOR V13, V1, V13
	VXOR V14, V2, V14
	VXOR V15, V3, V15

	VRLW V12, V27, V12
	VRLW V13, V27, V13
	VRLW V14, V27, V14
	VRLW V15, V27, V15

	VADDUWM V8, V12, V8
	VADDUWM V9, V13, V9
	VADDUWM V10, V14, V10
	VADDUWM V11, V15, V11

	VXOR V4, V8, V4
	VXOR V5, V9, V5
	VXOR V6, V10, V6
	VXOR V7, V11, V7

	VRLW V4, V28, V4
	VRLW V5, V28, V5
	VRLW V6, V28, V6
	VRLW V7, V28, V7

	VADDUWM V0, V4, V0
	VADDUWM V1, V5, V1
	VADDUWM V2, V6, V2
	VADDUWM V3, V7, V3

	VXOR V12, V0, V12
	VXOR V13, V1, V13
	VXOR V14, V2, V14
	VXOR V15, V3, V15

	VRLW V12, V29, V12
	VRLW V13, V29, V13
	VRLW V14, V29, V14
	VRLW V15, V29, V15

	VADDUWM V8, V12, V8
	VADDUWM V9, V13, V9
	VADDUWM V10, V14, V10
	VADDUWM V11, V15, V11

	VXOR V4, V8, V4
	VXOR V5, V9, V5
	VXOR V6, V10, V6
	VXOR V7, V11, V7

	VRLW V4, V30, V4
	VRLW V5, V30, V5
	VRLW V6, V30, V6
	VRLW V7, V30, V7

	VADDUWM V0, V5, V0
	VADDUWM V1, V6, V1
	VADDUWM V2, V7, V2
	VADDUWM V3, V4, V3

	VXOR V15, V0, V15
	VXOR V12, V1, V12
	VXOR V13, V2, V13
	VXOR V14, V3, V14

	VRLW V15, V27, V15
	VRLW V12, V27, V12
	VRLW V13, V27, V13
	VRLW V14, V27, V14

	VADDUWM V10, V15, V10
	VADDUWM V11, V12, V11
	VADDUWM V8, V13, V8
	VADDUWM V9, V14, V9

	VXOR V5, V10, V5
	VXOR V6, V11, V6
	VXOR V7, V8, V7
	VXOR V4, V9, V4

	VRLW V5, V28, V5
	VRLW V6, V28, V6
	VRLW V7, V28, V7
	VRLW V4, V28, V4

	VADDUWM V0, V5, V0
	VADDUWM V1, V6, V1
	VADDUWM V2, V7, V2
	VADDUWM V3, V4, V3

	VXOR V15, V0, V15
	VXOR V12, V1, V12
	VXOR V13, V2, V13
	VXOR V14, V3, V14

	VRLW V15, V29, V15
	VRLW V12, V29, V12
	VRLW V13, V29, V13
	VRLW V14, V29, V14

	VADDUWM V10, V15, V10
	VADDUWM V11, V12, V11
	VADDUWM V8, V13, V8
	VADDUWM V9, V14, V9

	VXOR V5, V10, V5
	VXOR V6, V11, V6
	VXOR V7, V8, V7
	VXOR V4, V9, V4

	VRLW V5, V30, V5
	VRLW V6, V30, V6
	VRLW V7, V30, V7
	VRLW V4, V30, V4
	BC   16, LT, loop_vsx

	VADDUWM V12, V26, V12

	WORD $0x13600F8C		// VMRGEW V0, V1, V27
	WORD $0x13821F8C		// VMRGEW V2, V3, V28

	WORD $0x10000E8C		// VMRGOW V0, V1, V0
	WORD $0x10421E8C		// VMRGOW V2, V3, V2

	WORD $0x13A42F8C		// VMRGEW V4, V5, V29
	WORD $0x13C63F8C		// VMRGEW V6, V7, V30

	XXPERMDI VS32, VS34, $0, VS33
	XXPERMDI VS32, VS34, $3, VS35
	XXPERMDI VS59, VS60, $0, VS32
	XXPERMDI VS59, VS60, $3, VS34

	WORD $0x10842E8C		// VMRGOW V4, V5, V4
	WORD $0x10C63E8C		// VMRGOW V6, V7, V6

	WORD $0x13684F8C		// VMRGEW V8, V9, V27
	WORD $0x138A5F8C		// VMRGEW V10, V11, V28

	XXPERMDI VS36, VS38, $0, VS37
	XXPERMDI VS36, VS38, $3, VS39
	XXPERMDI VS61, VS62, $0, VS36
	XXPERMDI VS61, VS62, $3, VS38

	WORD $0x11084E8C		// VMRGOW V8, V9, V8
	WORD $0x114A5E8C		// VMRGOW V10, V11, V10

	WORD $0x13AC6F8C		// VMRGEW V12, V13, V29
	WORD $0x13CE7F8C		// VMRGEW V14, V15, V30

	XXPERMDI VS40, VS42, $0, VS41
	XXPERMDI VS40, VS42, $3, VS43
	XXPERMDI VS59, VS60, $0, VS40
	XXPERMDI VS59, VS60, $3, VS42

	WORD $0x118C6E8C		// VMRGOW V12, V13, V12
	WORD $0x11CE7E8C		// VMRGOW V14, V15, V14

	VSPLTISW $4, V27
	VADDUWM V26, V27, V26

	XXPERMDI VS44, VS46, $0, VS45
	XXPERMDI VS44, VS46, $3, VS47
	XXPERMDI VS61, VS62, $0, VS44
	XXPERMDI VS61, VS62, $3, VS46

	VADDUWM V0, V16, V0
	VADDUWM V4, V17, V4
	VADDUWM V8, V18, V8
	VADDUWM V12, V19, V12

	CMPU LEN, $64
	BLT tail_vsx

	// Bottom of loop
	LXVW4X (INP)(R0), VS59
	LXVW4X (INP)(R8), VS60
	LXVW4X (INP)(R9), VS61
	LXVW4X (INP)(R10), VS62

	VXOR V27, V0, V27
	VXOR V28, V4, V28
	VXOR V29, V8, V29
	VXOR V30, V12, V30

	STXVW4X VS59, (OUT)(R0)
	STXVW4X VS60, (OUT)(R8)
	ADD     $64, INP
	STXVW4X VS61, (OUT)(R9)
	ADD     $-64, LEN
	STXVW4X VS62, (OUT)(R10)
	ADD     $64, OUT
	BEQ     done_vsx

	VADDUWM V1, V16, V0
	VADDUWM V5, V17, V4
	VADDUWM V9, V18, V8
	VADDUWM V13, V19, V12

	CMPU  LEN, $64
	BLT   tail_vsx

	LXVW4X (INP)(R0), VS59
	LXVW4X (INP)(R8), VS60
	LXVW4X (INP)(R9), VS61
	LXVW4X (INP)(R10), VS62
	VXOR   V27, V0, V27

	VXOR V28, V4, V28
	VXOR V29, V8, V29
	VXOR V30, V12, V30

	STXVW4X VS59, (OUT)(R0)
	STXVW4X VS60, (OUT)(R8)
	ADD     $64, INP
	STXVW4X VS61, (OUT)(R9)
	ADD     $-64, LEN
	STXVW4X VS62, (OUT)(V10)
	ADD     $64, OUT
	BEQ     done_vsx

	VADDUWM V2, V16, V0
	VADDUWM V6, V17, V4
	VADDUWM V10, V18, V8
	VADDUWM V14, V19, V12

	CMPU LEN, $64
	BLT  tail_vsx

	LXVW4X (INP)(R0), VS59
	LXVW4X (INP)(R8), VS60
	LXVW4X (INP)(R9), VS61
	LXVW4X (INP)(R10), VS62

	VXOR V27, V0, V27
	VXOR V28, V4, V28
	VXOR V29, V8, V29
	VXOR V30, V12, V30

	STXVW4X VS59, (OUT)(R0)
	STXVW4X VS60, (OUT)(R8)
	ADD     $64, INP
	STXVW4X VS61, (OUT)(R9)
	ADD     $-64, LEN
	STXVW4X VS62, (OUT)(R10)
	ADD     $64, OUT
	BEQ     done_vsx

	VADDUWM V3, V16, V0
	VADDUWM V7, V17, V4
	VADDUWM V11, V18, V8
	VADDUWM V15, V19, V12

	CMPU  LEN, $64
	BLT   tail_vsx

	LXVW4X (INP)(R0), VS59
	LXVW4X (INP)(R8), VS60
	LXVW4X (INP)(R9), VS61
	LXVW4X (INP)(R10), VS62

	VXOR V27, V0, V27
	VXOR V28, V4, V28
	VXOR V29, V8, V29
	VXOR V30, V12, V30

	STXVW4X VS59, (OUT)(R0)
	STXVW4X VS60, (OUT)(R8)
	ADD     $64, INP
	STXVW4X VS61, (OUT)(R9)
	ADD     $-64, LEN
	STXVW4X VS62, (OUT)(R10)
	ADD     $64, OUT

	MOVD $10, R14
	MOVD R14, CTR
	BNE  loop_outer_vsx

done_vsx:
	// Increment counter by number of 64 byte blocks
	MOVD (CNT), R14
	ADD  BLOCKS, R14
	MOVD R14, (CNT)
	RET

tail_vsx:
	ADD  $32, R1, R11
	MOVD LEN, CTR

	// Save values on stack to copy from
	STXVW4X VS32, (R11)(R0)
	STXVW4X VS36, (R11)(R8)
	STXVW4X VS40, (R11)(R9)
	STXVW4X VS44, (R11)(R10)
	ADD $-1, R11, R12
	ADD $-1, INP
	ADD $-1, OUT

looptail_vsx:
	// Copying the result to OUT
	// in bytes.
	MOVBZU 1(R12), KEY
	MOVBZU 1(INP), TMP
	XOR    KEY, TMP, KEY
	MOVBU  KEY, 1(OUT)
	BC     16, LT, looptail_vsx

	// Clear the stack values
	STXVW4X VS48, (R11)(R0)
	STXVW4X VS48, (R11)(R8)
	STXVW4X VS48, (R11)(R9)
	STXVW4X VS48, (R11)(R10)
	BR      done_vsx
   07070100000CE0000081A4000000000000000000000001645E367C000002FC000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/chacha20/chacha_s390x.go   // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build gc && !purego
// +build gc,!purego

package chacha20

import "golang.org/x/sys/cpu"

var haveAsm = cpu.S390X.HasVX

const bufSize = 256

// xorKeyStreamVX is an assembly implementation of XORKeyStream. It must only
// be called when the vector facility is available. Implementation in asm_s390x.s.
//
//go:noescape
func xorKeyStreamVX(dst, src []byte, key *[8]uint32, nonce *[3]uint32, counter *uint32)

func (c *Cipher) xorKeyStreamBlocks(dst, src []byte) {
	if cpu.S390X.HasVX {
		xorKeyStreamVX(dst, src, &c.key, &c.nonce, &c.counter)
	} else {
		c.xorKeyStreamBlocksGeneric(dst, src)
	}
}
07070100000CE1000081A4000000000000000000000001645E367C00001574000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/chacha20/chacha_s390x.s    // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build gc && !purego
// +build gc,!purego

#include "go_asm.h"
#include "textflag.h"

// This is an implementation of the ChaCha20 encryption algorithm as
// specified in RFC 7539. It uses vector instructions to compute
// 4 keystream blocks in parallel (256 bytes) which are then XORed
// with the bytes in the input slice.

GLOBL ·constants<>(SB), RODATA|NOPTR, $32
// BSWAP: swap bytes in each 4-byte element
DATA ·constants<>+0x00(SB)/4, $0x03020100
DATA ·constants<>+0x04(SB)/4, $0x07060504
DATA ·constants<>+0x08(SB)/4, $0x0b0a0908
DATA ·constants<>+0x0c(SB)/4, $0x0f0e0d0c
// J0: [j0, j1, j2, j3]
DATA ·constants<>+0x10(SB)/4, $0x61707865
DATA ·constants<>+0x14(SB)/4, $0x3320646e
DATA ·constants<>+0x18(SB)/4, $0x79622d32
DATA ·constants<>+0x1c(SB)/4, $0x6b206574

#define BSWAP V5
#define J0    V6
#define KEY0  V7
#define KEY1  V8
#define NONCE V9
#define CTR   V10
#define M0    V11
#define M1    V12
#define M2    V13
#define M3    V14
#define INC   V15
#define X0    V16
#define X1    V17
#define X2    V18
#define X3    V19
#define X4    V20
#define X5    V21
#define X6    V22
#define X7    V23
#define X8    V24
#define X9    V25
#define X10   V26
#define X11   V27
#define X12   V28
#define X13   V29
#define X14   V30
#define X15   V31

#define NUM_ROUNDS 20

#define ROUND4(a0, a1, a2, a3, b0, b1, b2, b3, c0, c1, c2, c3, d0, d1, d2, d3) \
	VAF    a1, a0, a0  \
	VAF    b1, b0, b0  \
	VAF    c1, c0, c0  \
	VAF    d1, d0, d0  \
	VX     a0, a2, a2  \
	VX     b0, b2, b2  \
	VX     c0, c2, c2  \
	VX     d0, d2, d2  \
	VERLLF $16, a2, a2 \
	VERLLF $16, b2, b2 \
	VERLLF $16, c2, c2 \
	VERLLF $16, d2, d2 \
	VAF    a2, a3, a3  \
	VAF    b2, b3, b3  \
	VAF    c2, c3, c3  \
	VAF    d2, d3, d3  \
	VX     a3, a1, a1  \
	VX     b3, b1, b1  \
	VX     c3, c1, c1  \
	VX     d3, d1, d1  \
	VERLLF $12, a1, a1 \
	VERLLF $12, b1, b1 \
	VERLLF $12, c1, c1 \
	VERLLF $12, d1, d1 \
	VAF    a1, a0, a0  \
	VAF    b1, b0, b0  \
	VAF    c1, c0, c0  \
	VAF    d1, d0, d0  \
	VX     a0, a2, a2  \
	VX     b0, b2, b2  \
	VX     c0, c2, c2  \
	VX     d0, d2, d2  \
	VERLLF $8, a2, a2  \
	VERLLF $8, b2, b2  \
	VERLLF $8, c2, c2  \
	VERLLF $8, d2, d2  \
	VAF    a2, a3, a3  \
	VAF    b2, b3, b3  \
	VAF    c2, c3, c3  \
	VAF    d2, d3, d3  \
	VX     a3, a1, a1  \
	VX     b3, b1, b1  \
	VX     c3, c1, c1  \
	VX     d3, d1, d1  \
	VERLLF $7, a1, a1  \
	VERLLF $7, b1, b1  \
	VERLLF $7, c1, c1  \
	VERLLF $7, d1, d1

#define PERMUTE(mask, v0, v1, v2, v3) \
	VPERM v0, v0, mask, v0 \
	VPERM v1, v1, mask, v1 \
	VPERM v2, v2, mask, v2 \
	VPERM v3, v3, mask, v3

#define ADDV(x, v0, v1, v2, v3) \
	VAF x, v0, v0 \
	VAF x, v1, v1 \
	VAF x, v2, v2 \
	VAF x, v3, v3

#define XORV(off, dst, src, v0, v1, v2, v3) \
	VLM  off(src), M0, M3          \
	PERMUTE(BSWAP, v0, v1, v2, v3) \
	VX   v0, M0, M0                \
	VX   v1, M1, M1                \
	VX   v2, M2, M2                \
	VX   v3, M3, M3                \
	VSTM M0, M3, off(dst)

#define SHUFFLE(a, b, c, d, t, u, v, w) \
	VMRHF a, c, t \ // t = {a[0], c[0], a[1], c[1]}
	VMRHF b, d, u \ // u = {b[0], d[0], b[1], d[1]}
	VMRLF a, c, v \ // v = {a[2], c[2], a[3], c[3]}
	VMRLF b, d, w \ // w = {b[2], d[2], b[3], d[3]}
	VMRHF t, u, a \ // a = {a[0], b[0], c[0], d[0]}
	VMRLF t, u, b \ // b = {a[1], b[1], c[1], d[1]}
	VMRHF v, w, c \ // c = {a[2], b[2], c[2], d[2]}
	VMRLF v, w, d // d = {a[3], b[3], c[3], d[3]}

// func xorKeyStreamVX(dst, src []byte, key *[8]uint32, nonce *[3]uint32, counter *uint32)
TEXT ·xorKeyStreamVX(SB), NOSPLIT, $0
	MOVD $·constants<>(SB), R1
	MOVD dst+0(FP), R2         // R2=&dst[0]
	LMG  src+24(FP), R3, R4    // R3=&src[0] R4=len(src)
	MOVD key+48(FP), R5        // R5=key
	MOVD nonce+56(FP), R6      // R6=nonce
	MOVD counter+64(FP), R7    // R7=counter

	// load BSWAP and J0
	VLM (R1), BSWAP, J0

	// setup
	MOVD  $95, R0
	VLM   (R5), KEY0, KEY1
	VLL   R0, (R6), NONCE
	VZERO M0
	VLEIB $7, $32, M0
	VSRLB M0, NONCE, NONCE

	// initialize counter values
	VLREPF (R7), CTR
	VZERO  INC
	VLEIF  $1, $1, INC
	VLEIF  $2, $2, INC
	VLEIF  $3, $3, INC
	VAF    INC, CTR, CTR
	VREPIF $4, INC

chacha:
	VREPF $0, J0, X0
	VREPF $1, J0, X1
	VREPF $2, J0, X2
	VREPF $3, J0, X3
	VREPF $0, KEY0, X4
	VREPF $1, KEY0, X5
	VREPF $2, KEY0, X6
	VREPF $3, KEY0, X7
	VREPF $0, KEY1, X8
	VREPF $1, KEY1, X9
	VREPF $2, KEY1, X10
	VREPF $3, KEY1, X11
	VLR   CTR, X12
	VREPF $1, NONCE, X13
	VREPF $2, NONCE, X14
	VREPF $3, NONCE, X15

	MOVD $(NUM_ROUNDS/2), R1

loop:
	ROUND4(X0, X4, X12,  X8, X1, X5, X13,  X9, X2, X6, X14, X10, X3, X7, X15, X11)
	ROUND4(X0, X5, X15, X10, X1, X6, X12, X11, X2, X7, X13, X8,  X3, X4, X14, X9)

	ADD $-1, R1
	BNE loop

	// decrement length
	ADD $-256, R4

	// rearrange vectors
	SHUFFLE(X0, X1, X2, X3, M0, M1, M2, M3)
	ADDV(J0, X0, X1, X2, X3)
	SHUFFLE(X4, X5, X6, X7, M0, M1, M2, M3)
	ADDV(KEY0, X4, X5, X6, X7)
	SHUFFLE(X8, X9, X10, X11, M0, M1, M2, M3)
	ADDV(KEY1, X8, X9, X10, X11)
	VAF CTR, X12, X12
	SHUFFLE(X12, X13, X14, X15, M0, M1, M2, M3)
	ADDV(NONCE, X12, X13, X14, X15)

	// increment counters
	VAF INC, CTR, CTR

	// xor keystream with plaintext
	XORV(0*64, R2, R3, X0, X4,  X8, X12)
	XORV(1*64, R2, R3, X1, X5,  X9, X13)
	XORV(2*64, R2, R3, X2, X6, X10, X14)
	XORV(3*64, R2, R3, X3, X7, X11, X15)

	// increment pointers
	MOVD $256(R2), R2
	MOVD $256(R3), R3

	CMPBNE  R4, $0, chacha

	VSTEF $0, CTR, (R7)
	RET
07070100000CE2000081A4000000000000000000000001645E367C000004FA000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/chacha20/xor.go    // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found src the LICENSE file.

package chacha20

import "runtime"

// Platforms that have fast unaligned 32-bit little endian accesses.
const unaligned = runtime.GOARCH == "386" ||
	runtime.GOARCH == "amd64" ||
	runtime.GOARCH == "arm64" ||
	runtime.GOARCH == "ppc64le" ||
	runtime.GOARCH == "s390x"

// addXor reads a little endian uint32 from src, XORs it with (a + b) and
// places the result in little endian byte order in dst.
func addXor(dst, src []byte, a, b uint32) {
	_, _ = src[3], dst[3] // bounds check elimination hint
	if unaligned {
		// The compiler should optimize this code into
		// 32-bit unaligned little endian loads and stores.
		// TODO: delete once the compiler does a reliably
		// good job with the generic code below.
		// See issue #25111 for more details.
		v := uint32(src[0])
		v |= uint32(src[1]) << 8
		v |= uint32(src[2]) << 16
		v |= uint32(src[3]) << 24
		v ^= a + b
		dst[0] = byte(v)
		dst[1] = byte(v >> 8)
		dst[2] = byte(v >> 16)
		dst[3] = byte(v >> 24)
	} else {
		a += b
		dst[0] = src[0] ^ byte(a)
		dst[1] = src[1] ^ byte(a>>8)
		dst[2] = src[2] ^ byte(a>>16)
		dst[3] = src[3] ^ byte(a>>24)
	}
}
  07070100000CE3000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/curve25519 07070100000CE4000081A4000000000000000000000001645E367C0000086C000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/curve25519/curve25519.go   // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package curve25519 provides an implementation of the X25519 function, which
// performs scalar multiplication on the elliptic curve known as Curve25519.
// See RFC 7748.
//
// Starting in Go 1.20, this package is a wrapper for the X25519 implementation
// in the crypto/ecdh package.
package curve25519 // import "golang.org/x/crypto/curve25519"

// ScalarMult sets dst to the product scalar * point.
//
// Deprecated: when provided a low-order point, ScalarMult will set dst to all
// zeroes, irrespective of the scalar. Instead, use the X25519 function, which
// will return an error.
func ScalarMult(dst, scalar, point *[32]byte) {
	scalarMult(dst, scalar, point)
}

// ScalarBaseMult sets dst to the product scalar * base where base is the
// standard generator.
//
// It is recommended to use the X25519 function with Basepoint instead, as
// copying into fixed size arrays can lead to unexpected bugs.
func ScalarBaseMult(dst, scalar *[32]byte) {
	scalarBaseMult(dst, scalar)
}

const (
	// ScalarSize is the size of the scalar input to X25519.
	ScalarSize = 32
	// PointSize is the size of the point input to X25519.
	PointSize = 32
)

// Basepoint is the canonical Curve25519 generator.
var Basepoint []byte

var basePoint = [32]byte{9}

func init() { Basepoint = basePoint[:] }

// X25519 returns the result of the scalar multiplication (scalar * point),
// according to RFC 7748, Section 5. scalar, point and the return value are
// slices of 32 bytes.
//
// scalar can be generated at random, for example with crypto/rand. point should
// be either Basepoint or the output of another X25519 call.
//
// If point is Basepoint (but not if it's a different slice with the same
// contents) a precomputed implementation might be used for performance.
func X25519(scalar, point []byte) ([]byte, error) {
	// Outline the body of function, to let the allocation be inlined in the
	// caller, and possibly avoid escaping to the heap.
	var dst [32]byte
	return x25519(&dst, scalar, point)
}
07070100000CE5000081A4000000000000000000000001645E367C00000911000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/curve25519/curve25519_compat.go    // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build !go1.20

package curve25519

import (
	"crypto/subtle"
	"errors"
	"strconv"

	"golang.org/x/crypto/curve25519/internal/field"
)

func scalarMult(dst, scalar, point *[32]byte) {
	var e [32]byte

	copy(e[:], scalar[:])
	e[0] &= 248
	e[31] &= 127
	e[31] |= 64

	var x1, x2, z2, x3, z3, tmp0, tmp1 field.Element
	x1.SetBytes(point[:])
	x2.One()
	x3.Set(&x1)
	z3.One()

	swap := 0
	for pos := 254; pos >= 0; pos-- {
		b := e[pos/8] >> uint(pos&7)
		b &= 1
		swap ^= int(b)
		x2.Swap(&x3, swap)
		z2.Swap(&z3, swap)
		swap = int(b)

		tmp0.Subtract(&x3, &z3)
		tmp1.Subtract(&x2, &z2)
		x2.Add(&x2, &z2)
		z2.Add(&x3, &z3)
		z3.Multiply(&tmp0, &x2)
		z2.Multiply(&z2, &tmp1)
		tmp0.Square(&tmp1)
		tmp1.Square(&x2)
		x3.Add(&z3, &z2)
		z2.Subtract(&z3, &z2)
		x2.Multiply(&tmp1, &tmp0)
		tmp1.Subtract(&tmp1, &tmp0)
		z2.Square(&z2)

		z3.Mult32(&tmp1, 121666)
		x3.Square(&x3)
		tmp0.Add(&tmp0, &z3)
		z3.Multiply(&x1, &z2)
		z2.Multiply(&tmp1, &tmp0)
	}

	x2.Swap(&x3, swap)
	z2.Swap(&z3, swap)

	z2.Invert(&z2)
	x2.Multiply(&x2, &z2)
	copy(dst[:], x2.Bytes())
}

func scalarBaseMult(dst, scalar *[32]byte) {
	checkBasepoint()
	scalarMult(dst, scalar, &basePoint)
}

func x25519(dst *[32]byte, scalar, point []byte) ([]byte, error) {
	var in [32]byte
	if l := len(scalar); l != 32 {
		return nil, errors.New("bad scalar length: " + strconv.Itoa(l) + ", expected 32")
	}
	if l := len(point); l != 32 {
		return nil, errors.New("bad point length: " + strconv.Itoa(l) + ", expected 32")
	}
	copy(in[:], scalar)
	if &point[0] == &Basepoint[0] {
		scalarBaseMult(dst, &in)
	} else {
		var base, zero [32]byte
		copy(base[:], point)
		scalarMult(dst, &in, &base)
		if subtle.ConstantTimeCompare(dst[:], zero[:]) == 1 {
			return nil, errors.New("bad input point: low order point")
		}
	}
	return dst[:], nil
}

func checkBasepoint() {
	if subtle.ConstantTimeCompare(Basepoint, []byte{
		0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	}) != 1 {
		panic("curve25519: global Basepoint value was modified")
	}
}
   07070100000CE6000081A4000000000000000000000001645E367C00000459000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/curve25519/curve25519_go120.go // Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build go1.20

package curve25519

import "crypto/ecdh"

func x25519(dst *[32]byte, scalar, point []byte) ([]byte, error) {
	curve := ecdh.X25519()
	pub, err := curve.NewPublicKey(point)
	if err != nil {
		return nil, err
	}
	priv, err := curve.NewPrivateKey(scalar)
	if err != nil {
		return nil, err
	}
	out, err := priv.ECDH(pub)
	if err != nil {
		return nil, err
	}
	copy(dst[:], out)
	return dst[:], nil
}

func scalarMult(dst, scalar, point *[32]byte) {
	if _, err := x25519(dst, scalar[:], point[:]); err != nil {
		// The only error condition for x25519 when the inputs are 32 bytes long
		// is if the output would have been the all-zero value.
		for i := range dst {
			dst[i] = 0
		}
	}
}

func scalarBaseMult(dst, scalar *[32]byte) {
	curve := ecdh.X25519()
	priv, err := curve.NewPrivateKey(scalar[:])
	if err != nil {
		panic("curve25519: internal error: scalarBaseMult was not 32 bytes")
	}
	copy(dst[:], priv.PublicKey().Bytes())
}
   07070100000CE7000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/curve25519/internal    07070100000CE8000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/curve25519/internal/field  07070100000CE9000081A4000000000000000000000001645E367C00000172000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/curve25519/internal/field/README   This package is kept in sync with crypto/ed25519/internal/edwards25519/field in
the standard library.

If there are any changes in the standard library that need to be synced to this
package, run sync.sh. It will not overwrite any local changes made since the
previous sync, so it's ok to land changes in this package first, and then sync
to the standard library later.
  07070100000CEA000081A4000000000000000000000001645E367C00002E39000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/curve25519/internal/field/fe.go    // Copyright (c) 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package field implements fast arithmetic modulo 2^255-19.
package field

import (
	"crypto/subtle"
	"encoding/binary"
	"math/bits"
)

// Element represents an element of the field GF(2^255-19). Note that this
// is not a cryptographically secure group, and should only be used to interact
// with edwards25519.Point coordinates.
//
// This type works similarly to math/big.Int, and all arguments and receivers
// are allowed to alias.
//
// The zero value is a valid zero element.
type Element struct {
	// An element t represents the integer
	//     t.l0 + t.l1*2^51 + t.l2*2^102 + t.l3*2^153 + t.l4*2^204
	//
	// Between operations, all limbs are expected to be lower than 2^52.
	l0 uint64
	l1 uint64
	l2 uint64
	l3 uint64
	l4 uint64
}

const maskLow51Bits uint64 = (1 << 51) - 1

var feZero = &Element{0, 0, 0, 0, 0}

// Zero sets v = 0, and returns v.
func (v *Element) Zero() *Element {
	*v = *feZero
	return v
}

var feOne = &Element{1, 0, 0, 0, 0}

// One sets v = 1, and returns v.
func (v *Element) One() *Element {
	*v = *feOne
	return v
}

// reduce reduces v modulo 2^255 - 19 and returns it.
func (v *Element) reduce() *Element {
	v.carryPropagate()

	// After the light reduction we now have a field element representation
	// v < 2^255 + 2^13 * 19, but need v < 2^255 - 19.

	// If v >= 2^255 - 19, then v + 19 >= 2^255, which would overflow 2^255 - 1,
	// generating a carry. That is, c will be 0 if v < 2^255 - 19, and 1 otherwise.
	c := (v.l0 + 19) >> 51
	c = (v.l1 + c) >> 51
	c = (v.l2 + c) >> 51
	c = (v.l3 + c) >> 51
	c = (v.l4 + c) >> 51

	// If v < 2^255 - 19 and c = 0, this will be a no-op. Otherwise, it's
	// effectively applying the reduction identity to the carry.
	v.l0 += 19 * c

	v.l1 += v.l0 >> 51
	v.l0 = v.l0 & maskLow51Bits
	v.l2 += v.l1 >> 51
	v.l1 = v.l1 & maskLow51Bits
	v.l3 += v.l2 >> 51
	v.l2 = v.l2 & maskLow51Bits
	v.l4 += v.l3 >> 51
	v.l3 = v.l3 & maskLow51Bits
	// no additional carry
	v.l4 = v.l4 & maskLow51Bits

	return v
}

// Add sets v = a + b, and returns v.
func (v *Element) Add(a, b *Element) *Element {
	v.l0 = a.l0 + b.l0
	v.l1 = a.l1 + b.l1
	v.l2 = a.l2 + b.l2
	v.l3 = a.l3 + b.l3
	v.l4 = a.l4 + b.l4
	// Using the generic implementation here is actually faster than the
	// assembly. Probably because the body of this function is so simple that
	// the compiler can figure out better optimizations by inlining the carry
	// propagation. TODO
	return v.carryPropagateGeneric()
}

// Subtract sets v = a - b, and returns v.
func (v *Element) Subtract(a, b *Element) *Element {
	// We first add 2 * p, to guarantee the subtraction won't underflow, and
	// then subtract b (which can be up to 2^255 + 2^13 * 19).
	v.l0 = (a.l0 + 0xFFFFFFFFFFFDA) - b.l0
	v.l1 = (a.l1 + 0xFFFFFFFFFFFFE) - b.l1
	v.l2 = (a.l2 + 0xFFFFFFFFFFFFE) - b.l2
	v.l3 = (a.l3 + 0xFFFFFFFFFFFFE) - b.l3
	v.l4 = (a.l4 + 0xFFFFFFFFFFFFE) - b.l4
	return v.carryPropagate()
}

// Negate sets v = -a, and returns v.
func (v *Element) Negate(a *Element) *Element {
	return v.Subtract(feZero, a)
}

// Invert sets v = 1/z mod p, and returns v.
//
// If z == 0, Invert returns v = 0.
func (v *Element) Invert(z *Element) *Element {
	// Inversion is implemented as exponentiation with exponent p − 2. It uses the
	// same sequence of 255 squarings and 11 multiplications as [Curve25519].
	var z2, z9, z11, z2_5_0, z2_10_0, z2_20_0, z2_50_0, z2_100_0, t Element

	z2.Square(z)             // 2
	t.Square(&z2)            // 4
	t.Square(&t)             // 8
	z9.Multiply(&t, z)       // 9
	z11.Multiply(&z9, &z2)   // 11
	t.Square(&z11)           // 22
	z2_5_0.Multiply(&t, &z9) // 31 = 2^5 - 2^0

	t.Square(&z2_5_0) // 2^6 - 2^1
	for i := 0; i < 4; i++ {
		t.Square(&t) // 2^10 - 2^5
	}
	z2_10_0.Multiply(&t, &z2_5_0) // 2^10 - 2^0

	t.Square(&z2_10_0) // 2^11 - 2^1
	for i := 0; i < 9; i++ {
		t.Square(&t) // 2^20 - 2^10
	}
	z2_20_0.Multiply(&t, &z2_10_0) // 2^20 - 2^0

	t.Square(&z2_20_0) // 2^21 - 2^1
	for i := 0; i < 19; i++ {
		t.Square(&t) // 2^40 - 2^20
	}
	t.Multiply(&t, &z2_20_0) // 2^40 - 2^0

	t.Square(&t) // 2^41 - 2^1
	for i := 0; i < 9; i++ {
		t.Square(&t) // 2^50 - 2^10
	}
	z2_50_0.Multiply(&t, &z2_10_0) // 2^50 - 2^0

	t.Square(&z2_50_0) // 2^51 - 2^1
	for i := 0; i < 49; i++ {
		t.Square(&t) // 2^100 - 2^50
	}
	z2_100_0.Multiply(&t, &z2_50_0) // 2^100 - 2^0

	t.Square(&z2_100_0) // 2^101 - 2^1
	for i := 0; i < 99; i++ {
		t.Square(&t) // 2^200 - 2^100
	}
	t.Multiply(&t, &z2_100_0) // 2^200 - 2^0

	t.Square(&t) // 2^201 - 2^1
	for i := 0; i < 49; i++ {
		t.Square(&t) // 2^250 - 2^50
	}
	t.Multiply(&t, &z2_50_0) // 2^250 - 2^0

	t.Square(&t) // 2^251 - 2^1
	t.Square(&t) // 2^252 - 2^2
	t.Square(&t) // 2^253 - 2^3
	t.Square(&t) // 2^254 - 2^4
	t.Square(&t) // 2^255 - 2^5

	return v.Multiply(&t, &z11) // 2^255 - 21
}

// Set sets v = a, and returns v.
func (v *Element) Set(a *Element) *Element {
	*v = *a
	return v
}

// SetBytes sets v to x, which must be a 32-byte little-endian encoding.
//
// Consistent with RFC 7748, the most significant bit (the high bit of the
// last byte) is ignored, and non-canonical values (2^255-19 through 2^255-1)
// are accepted. Note that this is laxer than specified by RFC 8032.
func (v *Element) SetBytes(x []byte) *Element {
	if len(x) != 32 {
		panic("edwards25519: invalid field element input size")
	}

	// Bits 0:51 (bytes 0:8, bits 0:64, shift 0, mask 51).
	v.l0 = binary.LittleEndian.Uint64(x[0:8])
	v.l0 &= maskLow51Bits
	// Bits 51:102 (bytes 6:14, bits 48:112, shift 3, mask 51).
	v.l1 = binary.LittleEndian.Uint64(x[6:14]) >> 3
	v.l1 &= maskLow51Bits
	// Bits 102:153 (bytes 12:20, bits 96:160, shift 6, mask 51).
	v.l2 = binary.LittleEndian.Uint64(x[12:20]) >> 6
	v.l2 &= maskLow51Bits
	// Bits 153:204 (bytes 19:27, bits 152:216, shift 1, mask 51).
	v.l3 = binary.LittleEndian.Uint64(x[19:27]) >> 1
	v.l3 &= maskLow51Bits
	// Bits 204:251 (bytes 24:32, bits 192:256, shift 12, mask 51).
	// Note: not bytes 25:33, shift 4, to avoid overread.
	v.l4 = binary.LittleEndian.Uint64(x[24:32]) >> 12
	v.l4 &= maskLow51Bits

	return v
}

// Bytes returns the canonical 32-byte little-endian encoding of v.
func (v *Element) Bytes() []byte {
	// This function is outlined to make the allocations inline in the caller
	// rather than happen on the heap.
	var out [32]byte
	return v.bytes(&out)
}

func (v *Element) bytes(out *[32]byte) []byte {
	t := *v
	t.reduce()

	var buf [8]byte
	for i, l := range [5]uint64{t.l0, t.l1, t.l2, t.l3, t.l4} {
		bitsOffset := i * 51
		binary.LittleEndian.PutUint64(buf[:], l<<uint(bitsOffset%8))
		for i, bb := range buf {
			off := bitsOffset/8 + i
			if off >= len(out) {
				break
			}
			out[off] |= bb
		}
	}

	return out[:]
}

// Equal returns 1 if v and u are equal, and 0 otherwise.
func (v *Element) Equal(u *Element) int {
	sa, sv := u.Bytes(), v.Bytes()
	return subtle.ConstantTimeCompare(sa, sv)
}

// mask64Bits returns 0xffffffff if cond is 1, and 0 otherwise.
func mask64Bits(cond int) uint64 { return ^(uint64(cond) - 1) }

// Select sets v to a if cond == 1, and to b if cond == 0.
func (v *Element) Select(a, b *Element, cond int) *Element {
	m := mask64Bits(cond)
	v.l0 = (m & a.l0) | (^m & b.l0)
	v.l1 = (m & a.l1) | (^m & b.l1)
	v.l2 = (m & a.l2) | (^m & b.l2)
	v.l3 = (m & a.l3) | (^m & b.l3)
	v.l4 = (m & a.l4) | (^m & b.l4)
	return v
}

// Swap swaps v and u if cond == 1 or leaves them unchanged if cond == 0, and returns v.
func (v *Element) Swap(u *Element, cond int) {
	m := mask64Bits(cond)
	t := m & (v.l0 ^ u.l0)
	v.l0 ^= t
	u.l0 ^= t
	t = m & (v.l1 ^ u.l1)
	v.l1 ^= t
	u.l1 ^= t
	t = m & (v.l2 ^ u.l2)
	v.l2 ^= t
	u.l2 ^= t
	t = m & (v.l3 ^ u.l3)
	v.l3 ^= t
	u.l3 ^= t
	t = m & (v.l4 ^ u.l4)
	v.l4 ^= t
	u.l4 ^= t
}

// IsNegative returns 1 if v is negative, and 0 otherwise.
func (v *Element) IsNegative() int {
	return int(v.Bytes()[0] & 1)
}

// Absolute sets v to |u|, and returns v.
func (v *Element) Absolute(u *Element) *Element {
	return v.Select(new(Element).Negate(u), u, u.IsNegative())
}

// Multiply sets v = x * y, and returns v.
func (v *Element) Multiply(x, y *Element) *Element {
	feMul(v, x, y)
	return v
}

// Square sets v = x * x, and returns v.
func (v *Element) Square(x *Element) *Element {
	feSquare(v, x)
	return v
}

// Mult32 sets v = x * y, and returns v.
func (v *Element) Mult32(x *Element, y uint32) *Element {
	x0lo, x0hi := mul51(x.l0, y)
	x1lo, x1hi := mul51(x.l1, y)
	x2lo, x2hi := mul51(x.l2, y)
	x3lo, x3hi := mul51(x.l3, y)
	x4lo, x4hi := mul51(x.l4, y)
	v.l0 = x0lo + 19*x4hi // carried over per the reduction identity
	v.l1 = x1lo + x0hi
	v.l2 = x2lo + x1hi
	v.l3 = x3lo + x2hi
	v.l4 = x4lo + x3hi
	// The hi portions are going to be only 32 bits, plus any previous excess,
	// so we can skip the carry propagation.
	return v
}

// mul51 returns lo + hi * 2⁵¹ = a * b.
func mul51(a uint64, b uint32) (lo uint64, hi uint64) {
	mh, ml := bits.Mul64(a, uint64(b))
	lo = ml & maskLow51Bits
	hi = (mh << 13) | (ml >> 51)
	return
}

// Pow22523 set v = x^((p-5)/8), and returns v. (p-5)/8 is 2^252-3.
func (v *Element) Pow22523(x *Element) *Element {
	var t0, t1, t2 Element

	t0.Square(x)             // x^2
	t1.Square(&t0)           // x^4
	t1.Square(&t1)           // x^8
	t1.Multiply(x, &t1)      // x^9
	t0.Multiply(&t0, &t1)    // x^11
	t0.Square(&t0)           // x^22
	t0.Multiply(&t1, &t0)    // x^31
	t1.Square(&t0)           // x^62
	for i := 1; i < 5; i++ { // x^992
		t1.Square(&t1)
	}
	t0.Multiply(&t1, &t0)     // x^1023 -> 1023 = 2^10 - 1
	t1.Square(&t0)            // 2^11 - 2
	for i := 1; i < 10; i++ { // 2^20 - 2^10
		t1.Square(&t1)
	}
	t1.Multiply(&t1, &t0)     // 2^20 - 1
	t2.Square(&t1)            // 2^21 - 2
	for i := 1; i < 20; i++ { // 2^40 - 2^20
		t2.Square(&t2)
	}
	t1.Multiply(&t2, &t1)     // 2^40 - 1
	t1.Square(&t1)            // 2^41 - 2
	for i := 1; i < 10; i++ { // 2^50 - 2^10
		t1.Square(&t1)
	}
	t0.Multiply(&t1, &t0)     // 2^50 - 1
	t1.Square(&t0)            // 2^51 - 2
	for i := 1; i < 50; i++ { // 2^100 - 2^50
		t1.Square(&t1)
	}
	t1.Multiply(&t1, &t0)      // 2^100 - 1
	t2.Square(&t1)             // 2^101 - 2
	for i := 1; i < 100; i++ { // 2^200 - 2^100
		t2.Square(&t2)
	}
	t1.Multiply(&t2, &t1)     // 2^200 - 1
	t1.Square(&t1)            // 2^201 - 2
	for i := 1; i < 50; i++ { // 2^250 - 2^50
		t1.Square(&t1)
	}
	t0.Multiply(&t1, &t0)     // 2^250 - 1
	t0.Square(&t0)            // 2^251 - 2
	t0.Square(&t0)            // 2^252 - 4
	return v.Multiply(&t0, x) // 2^252 - 3 -> x^(2^252-3)
}

// sqrtM1 is 2^((p-1)/4), which squared is equal to -1 by Euler's Criterion.
var sqrtM1 = &Element{1718705420411056, 234908883556509,
	2233514472574048, 2117202627021982, 765476049583133}

// SqrtRatio sets r to the non-negative square root of the ratio of u and v.
//
// If u/v is square, SqrtRatio returns r and 1. If u/v is not square, SqrtRatio
// sets r according to Section 4.3 of draft-irtf-cfrg-ristretto255-decaf448-00,
// and returns r and 0.
func (r *Element) SqrtRatio(u, v *Element) (rr *Element, wasSquare int) {
	var a, b Element

	// r = (u * v3) * (u * v7)^((p-5)/8)
	v2 := a.Square(v)
	uv3 := b.Multiply(u, b.Multiply(v2, v))
	uv7 := a.Multiply(uv3, a.Square(v2))
	r.Multiply(uv3, r.Pow22523(uv7))

	check := a.Multiply(v, a.Square(r)) // check = v * r^2

	uNeg := b.Negate(u)
	correctSignSqrt := check.Equal(u)
	flippedSignSqrt := check.Equal(uNeg)
	flippedSignSqrtI := check.Equal(uNeg.Multiply(uNeg, sqrtM1))

	rPrime := b.Multiply(r, sqrtM1) // r_prime = SQRT_M1 * r
	// r = CT_SELECT(r_prime IF flipped_sign_sqrt | flipped_sign_sqrt_i ELSE r)
	r.Select(rPrime, r, flippedSignSqrt|flippedSignSqrtI)

	r.Absolute(r) // Choose the nonnegative square root.
	return r, correctSignSqrt | flippedSignSqrt
}
   07070100000CEB000081A4000000000000000000000001645E367C000001B5000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/curve25519/internal/field/fe_amd64.go  // Code generated by command: go run fe_amd64_asm.go -out ../fe_amd64.s -stubs ../fe_amd64.go -pkg field. DO NOT EDIT.

//go:build amd64 && gc && !purego
// +build amd64,gc,!purego

package field

// feMul sets out = a * b. It works like feMulGeneric.
//
//go:noescape
func feMul(out *Element, a *Element, b *Element)

// feSquare sets out = a * a. It works like feSquareGeneric.
//
//go:noescape
func feSquare(out *Element, a *Element)
   07070100000CEC000081A4000000000000000000000001645E367C000016C5000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/curve25519/internal/field/fe_amd64.s   // Code generated by command: go run fe_amd64_asm.go -out ../fe_amd64.s -stubs ../fe_amd64.go -pkg field. DO NOT EDIT.

//go:build amd64 && gc && !purego
// +build amd64,gc,!purego

#include "textflag.h"

// func feMul(out *Element, a *Element, b *Element)
TEXT ·feMul(SB), NOSPLIT, $0-24
	MOVQ a+8(FP), CX
	MOVQ b+16(FP), BX

	// r0 = a0×b0
	MOVQ (CX), AX
	MULQ (BX)
	MOVQ AX, DI
	MOVQ DX, SI

	// r0 += 19×a1×b4
	MOVQ   8(CX), AX
	IMUL3Q $0x13, AX, AX
	MULQ   32(BX)
	ADDQ   AX, DI
	ADCQ   DX, SI

	// r0 += 19×a2×b3
	MOVQ   16(CX), AX
	IMUL3Q $0x13, AX, AX
	MULQ   24(BX)
	ADDQ   AX, DI
	ADCQ   DX, SI

	// r0 += 19×a3×b2
	MOVQ   24(CX), AX
	IMUL3Q $0x13, AX, AX
	MULQ   16(BX)
	ADDQ   AX, DI
	ADCQ   DX, SI

	// r0 += 19×a4×b1
	MOVQ   32(CX), AX
	IMUL3Q $0x13, AX, AX
	MULQ   8(BX)
	ADDQ   AX, DI
	ADCQ   DX, SI

	// r1 = a0×b1
	MOVQ (CX), AX
	MULQ 8(BX)
	MOVQ AX, R9
	MOVQ DX, R8

	// r1 += a1×b0
	MOVQ 8(CX), AX
	MULQ (BX)
	ADDQ AX, R9
	ADCQ DX, R8

	// r1 += 19×a2×b4
	MOVQ   16(CX), AX
	IMUL3Q $0x13, AX, AX
	MULQ   32(BX)
	ADDQ   AX, R9
	ADCQ   DX, R8

	// r1 += 19×a3×b3
	MOVQ   24(CX), AX
	IMUL3Q $0x13, AX, AX
	MULQ   24(BX)
	ADDQ   AX, R9
	ADCQ   DX, R8

	// r1 += 19×a4×b2
	MOVQ   32(CX), AX
	IMUL3Q $0x13, AX, AX
	MULQ   16(BX)
	ADDQ   AX, R9
	ADCQ   DX, R8

	// r2 = a0×b2
	MOVQ (CX), AX
	MULQ 16(BX)
	MOVQ AX, R11
	MOVQ DX, R10

	// r2 += a1×b1
	MOVQ 8(CX), AX
	MULQ 8(BX)
	ADDQ AX, R11
	ADCQ DX, R10

	// r2 += a2×b0
	MOVQ 16(CX), AX
	MULQ (BX)
	ADDQ AX, R11
	ADCQ DX, R10

	// r2 += 19×a3×b4
	MOVQ   24(CX), AX
	IMUL3Q $0x13, AX, AX
	MULQ   32(BX)
	ADDQ   AX, R11
	ADCQ   DX, R10

	// r2 += 19×a4×b3
	MOVQ   32(CX), AX
	IMUL3Q $0x13, AX, AX
	MULQ   24(BX)
	ADDQ   AX, R11
	ADCQ   DX, R10

	// r3 = a0×b3
	MOVQ (CX), AX
	MULQ 24(BX)
	MOVQ AX, R13
	MOVQ DX, R12

	// r3 += a1×b2
	MOVQ 8(CX), AX
	MULQ 16(BX)
	ADDQ AX, R13
	ADCQ DX, R12

	// r3 += a2×b1
	MOVQ 16(CX), AX
	MULQ 8(BX)
	ADDQ AX, R13
	ADCQ DX, R12

	// r3 += a3×b0
	MOVQ 24(CX), AX
	MULQ (BX)
	ADDQ AX, R13
	ADCQ DX, R12

	// r3 += 19×a4×b4
	MOVQ   32(CX), AX
	IMUL3Q $0x13, AX, AX
	MULQ   32(BX)
	ADDQ   AX, R13
	ADCQ   DX, R12

	// r4 = a0×b4
	MOVQ (CX), AX
	MULQ 32(BX)
	MOVQ AX, R15
	MOVQ DX, R14

	// r4 += a1×b3
	MOVQ 8(CX), AX
	MULQ 24(BX)
	ADDQ AX, R15
	ADCQ DX, R14

	// r4 += a2×b2
	MOVQ 16(CX), AX
	MULQ 16(BX)
	ADDQ AX, R15
	ADCQ DX, R14

	// r4 += a3×b1
	MOVQ 24(CX), AX
	MULQ 8(BX)
	ADDQ AX, R15
	ADCQ DX, R14

	// r4 += a4×b0
	MOVQ 32(CX), AX
	MULQ (BX)
	ADDQ AX, R15
	ADCQ DX, R14

	// First reduction chain
	MOVQ   $0x0007ffffffffffff, AX
	SHLQ   $0x0d, DI, SI
	SHLQ   $0x0d, R9, R8
	SHLQ   $0x0d, R11, R10
	SHLQ   $0x0d, R13, R12
	SHLQ   $0x0d, R15, R14
	ANDQ   AX, DI
	IMUL3Q $0x13, R14, R14
	ADDQ   R14, DI
	ANDQ   AX, R9
	ADDQ   SI, R9
	ANDQ   AX, R11
	ADDQ   R8, R11
	ANDQ   AX, R13
	ADDQ   R10, R13
	ANDQ   AX, R15
	ADDQ   R12, R15

	// Second reduction chain (carryPropagate)
	MOVQ   DI, SI
	SHRQ   $0x33, SI
	MOVQ   R9, R8
	SHRQ   $0x33, R8
	MOVQ   R11, R10
	SHRQ   $0x33, R10
	MOVQ   R13, R12
	SHRQ   $0x33, R12
	MOVQ   R15, R14
	SHRQ   $0x33, R14
	ANDQ   AX, DI
	IMUL3Q $0x13, R14, R14
	ADDQ   R14, DI
	ANDQ   AX, R9
	ADDQ   SI, R9
	ANDQ   AX, R11
	ADDQ   R8, R11
	ANDQ   AX, R13
	ADDQ   R10, R13
	ANDQ   AX, R15
	ADDQ   R12, R15

	// Store output
	MOVQ out+0(FP), AX
	MOVQ DI, (AX)
	MOVQ R9, 8(AX)
	MOVQ R11, 16(AX)
	MOVQ R13, 24(AX)
	MOVQ R15, 32(AX)
	RET

// func feSquare(out *Element, a *Element)
TEXT ·feSquare(SB), NOSPLIT, $0-16
	MOVQ a+8(FP), CX

	// r0 = l0×l0
	MOVQ (CX), AX
	MULQ (CX)
	MOVQ AX, SI
	MOVQ DX, BX

	// r0 += 38×l1×l4
	MOVQ   8(CX), AX
	IMUL3Q $0x26, AX, AX
	MULQ   32(CX)
	ADDQ   AX, SI
	ADCQ   DX, BX

	// r0 += 38×l2×l3
	MOVQ   16(CX), AX
	IMUL3Q $0x26, AX, AX
	MULQ   24(CX)
	ADDQ   AX, SI
	ADCQ   DX, BX

	// r1 = 2×l0×l1
	MOVQ (CX), AX
	SHLQ $0x01, AX
	MULQ 8(CX)
	MOVQ AX, R8
	MOVQ DX, DI

	// r1 += 38×l2×l4
	MOVQ   16(CX), AX
	IMUL3Q $0x26, AX, AX
	MULQ   32(CX)
	ADDQ   AX, R8
	ADCQ   DX, DI

	// r1 += 19×l3×l3
	MOVQ   24(CX), AX
	IMUL3Q $0x13, AX, AX
	MULQ   24(CX)
	ADDQ   AX, R8
	ADCQ   DX, DI

	// r2 = 2×l0×l2
	MOVQ (CX), AX
	SHLQ $0x01, AX
	MULQ 16(CX)
	MOVQ AX, R10
	MOVQ DX, R9

	// r2 += l1×l1
	MOVQ 8(CX), AX
	MULQ 8(CX)
	ADDQ AX, R10
	ADCQ DX, R9

	// r2 += 38×l3×l4
	MOVQ   24(CX), AX
	IMUL3Q $0x26, AX, AX
	MULQ   32(CX)
	ADDQ   AX, R10
	ADCQ   DX, R9

	// r3 = 2×l0×l3
	MOVQ (CX), AX
	SHLQ $0x01, AX
	MULQ 24(CX)
	MOVQ AX, R12
	MOVQ DX, R11

	// r3 += 2×l1×l2
	MOVQ   8(CX), AX
	IMUL3Q $0x02, AX, AX
	MULQ   16(CX)
	ADDQ   AX, R12
	ADCQ   DX, R11

	// r3 += 19×l4×l4
	MOVQ   32(CX), AX
	IMUL3Q $0x13, AX, AX
	MULQ   32(CX)
	ADDQ   AX, R12
	ADCQ   DX, R11

	// r4 = 2×l0×l4
	MOVQ (CX), AX
	SHLQ $0x01, AX
	MULQ 32(CX)
	MOVQ AX, R14
	MOVQ DX, R13

	// r4 += 2×l1×l3
	MOVQ   8(CX), AX
	IMUL3Q $0x02, AX, AX
	MULQ   24(CX)
	ADDQ   AX, R14
	ADCQ   DX, R13

	// r4 += l2×l2
	MOVQ 16(CX), AX
	MULQ 16(CX)
	ADDQ AX, R14
	ADCQ DX, R13

	// First reduction chain
	MOVQ   $0x0007ffffffffffff, AX
	SHLQ   $0x0d, SI, BX
	SHLQ   $0x0d, R8, DI
	SHLQ   $0x0d, R10, R9
	SHLQ   $0x0d, R12, R11
	SHLQ   $0x0d, R14, R13
	ANDQ   AX, SI
	IMUL3Q $0x13, R13, R13
	ADDQ   R13, SI
	ANDQ   AX, R8
	ADDQ   BX, R8
	ANDQ   AX, R10
	ADDQ   DI, R10
	ANDQ   AX, R12
	ADDQ   R9, R12
	ANDQ   AX, R14
	ADDQ   R11, R14

	// Second reduction chain (carryPropagate)
	MOVQ   SI, BX
	SHRQ   $0x33, BX
	MOVQ   R8, DI
	SHRQ   $0x33, DI
	MOVQ   R10, R9
	SHRQ   $0x33, R9
	MOVQ   R12, R11
	SHRQ   $0x33, R11
	MOVQ   R14, R13
	SHRQ   $0x33, R13
	ANDQ   AX, SI
	IMUL3Q $0x13, R13, R13
	ADDQ   R13, SI
	ANDQ   AX, R8
	ADDQ   BX, R8
	ANDQ   AX, R10
	ADDQ   DI, R10
	ANDQ   AX, R12
	ADDQ   R9, R12
	ANDQ   AX, R14
	ADDQ   R11, R14

	// Store output
	MOVQ out+0(FP), AX
	MOVQ SI, (AX)
	MOVQ R8, 8(AX)
	MOVQ R10, 16(AX)
	MOVQ R12, 24(AX)
	MOVQ R14, 32(AX)
	RET
   07070100000CED000081A4000000000000000000000001645E367C00000162000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/curve25519/internal/field/fe_amd64_noasm.go    // Copyright (c) 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build !amd64 || !gc || purego
// +build !amd64 !gc purego

package field

func feMul(v, x, y *Element) { feMulGeneric(v, x, y) }

func feSquare(v, x *Element) { feSquareGeneric(v, x) }
  07070100000CEE000081A4000000000000000000000001645E367C0000016D000000000000000000000000000000000000005500000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/curve25519/internal/field/fe_arm64.go  // Copyright (c) 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build arm64 && gc && !purego
// +build arm64,gc,!purego

package field

//go:noescape
func carryPropagate(v *Element)

func (v *Element) carryPropagate() *Element {
	carryPropagate(v)
	return v
}
   07070100000CEF000081A4000000000000000000000001645E367C00000444000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/curve25519/internal/field/fe_arm64.s   // Copyright (c) 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build arm64 && gc && !purego
// +build arm64,gc,!purego

#include "textflag.h"

// carryPropagate works exactly like carryPropagateGeneric and uses the
// same AND, ADD, and LSR+MADD instructions emitted by the compiler, but
// avoids loading R0-R4 twice and uses LDP and STP.
//
// See https://golang.org/issues/43145 for the main compiler issue.
//
// func carryPropagate(v *Element)
TEXT ·carryPropagate(SB),NOFRAME|NOSPLIT,$0-8
	MOVD v+0(FP), R20

	LDP 0(R20), (R0, R1)
	LDP 16(R20), (R2, R3)
	MOVD 32(R20), R4

	AND $0x7ffffffffffff, R0, R10
	AND $0x7ffffffffffff, R1, R11
	AND $0x7ffffffffffff, R2, R12
	AND $0x7ffffffffffff, R3, R13
	AND $0x7ffffffffffff, R4, R14

	ADD R0>>51, R11, R11
	ADD R1>>51, R12, R12
	ADD R2>>51, R13, R13
	ADD R3>>51, R14, R14
	// R4>>51 * 19 + R10 -> R10
	LSR $51, R4, R21
	MOVD $19, R22
	MADD R22, R10, R21, R10

	STP (R10, R11), 0(R20)
	STP (R12, R13), 16(R20)
	MOVD R14, 32(R20)

	RET
07070100000CF0000081A4000000000000000000000001645E367C00000145000000000000000000000000000000000000005B00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/curve25519/internal/field/fe_arm64_noasm.go    // Copyright (c) 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build !arm64 || !gc || purego
// +build !arm64 !gc purego

package field

func (v *Element) carryPropagate() *Element {
	return v.carryPropagateGeneric()
}
   07070100000CF1000081A4000000000000000000000001645E367C0000219F000000000000000000000000000000000000005700000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/curve25519/internal/field/fe_generic.go    // Copyright (c) 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package field

import "math/bits"

// uint128 holds a 128-bit number as two 64-bit limbs, for use with the
// bits.Mul64 and bits.Add64 intrinsics.
type uint128 struct {
	lo, hi uint64
}

// mul64 returns a * b.
func mul64(a, b uint64) uint128 {
	hi, lo := bits.Mul64(a, b)
	return uint128{lo, hi}
}

// addMul64 returns v + a * b.
func addMul64(v uint128, a, b uint64) uint128 {
	hi, lo := bits.Mul64(a, b)
	lo, c := bits.Add64(lo, v.lo, 0)
	hi, _ = bits.Add64(hi, v.hi, c)
	return uint128{lo, hi}
}

// shiftRightBy51 returns a >> 51. a is assumed to be at most 115 bits.
func shiftRightBy51(a uint128) uint64 {
	return (a.hi << (64 - 51)) | (a.lo >> 51)
}

func feMulGeneric(v, a, b *Element) {
	a0 := a.l0
	a1 := a.l1
	a2 := a.l2
	a3 := a.l3
	a4 := a.l4

	b0 := b.l0
	b1 := b.l1
	b2 := b.l2
	b3 := b.l3
	b4 := b.l4

	// Limb multiplication works like pen-and-paper columnar multiplication, but
	// with 51-bit limbs instead of digits.
	//
	//                          a4   a3   a2   a1   a0  x
	//                          b4   b3   b2   b1   b0  =
	//                         ------------------------
	//                        a4b0 a3b0 a2b0 a1b0 a0b0  +
	//                   a4b1 a3b1 a2b1 a1b1 a0b1       +
	//              a4b2 a3b2 a2b2 a1b2 a0b2            +
	//         a4b3 a3b3 a2b3 a1b3 a0b3                 +
	//    a4b4 a3b4 a2b4 a1b4 a0b4                      =
	//   ----------------------------------------------
	//      r8   r7   r6   r5   r4   r3   r2   r1   r0
	//
	// We can then use the reduction identity (a * 2²⁵⁵ + b = a * 19 + b) to
	// reduce the limbs that would overflow 255 bits. r5 * 2²⁵⁵ becomes 19 * r5,
	// r6 * 2³⁰⁶ becomes 19 * r6 * 2⁵¹, etc.
	//
	// Reduction can be carried out simultaneously to multiplication. For
	// example, we do not compute r5: whenever the result of a multiplication
	// belongs to r5, like a1b4, we multiply it by 19 and add the result to r0.
	//
	//            a4b0    a3b0    a2b0    a1b0    a0b0  +
	//            a3b1    a2b1    a1b1    a0b1 19×a4b1  +
	//            a2b2    a1b2    a0b2 19×a4b2 19×a3b2  +
	//            a1b3    a0b3 19×a4b3 19×a3b3 19×a2b3  +
	//            a0b4 19×a4b4 19×a3b4 19×a2b4 19×a1b4  =
	//           --------------------------------------
	//              r4      r3      r2      r1      r0
	//
	// Finally we add up the columns into wide, overlapping limbs.

	a1_19 := a1 * 19
	a2_19 := a2 * 19
	a3_19 := a3 * 19
	a4_19 := a4 * 19

	// r0 = a0×b0 + 19×(a1×b4 + a2×b3 + a3×b2 + a4×b1)
	r0 := mul64(a0, b0)
	r0 = addMul64(r0, a1_19, b4)
	r0 = addMul64(r0, a2_19, b3)
	r0 = addMul64(r0, a3_19, b2)
	r0 = addMul64(r0, a4_19, b1)

	// r1 = a0×b1 + a1×b0 + 19×(a2×b4 + a3×b3 + a4×b2)
	r1 := mul64(a0, b1)
	r1 = addMul64(r1, a1, b0)
	r1 = addMul64(r1, a2_19, b4)
	r1 = addMul64(r1, a3_19, b3)
	r1 = addMul64(r1, a4_19, b2)

	// r2 = a0×b2 + a1×b1 + a2×b0 + 19×(a3×b4 + a4×b3)
	r2 := mul64(a0, b2)
	r2 = addMul64(r2, a1, b1)
	r2 = addMul64(r2, a2, b0)
	r2 = addMul64(r2, a3_19, b4)
	r2 = addMul64(r2, a4_19, b3)

	// r3 = a0×b3 + a1×b2 + a2×b1 + a3×b0 + 19×a4×b4
	r3 := mul64(a0, b3)
	r3 = addMul64(r3, a1, b2)
	r3 = addMul64(r3, a2, b1)
	r3 = addMul64(r3, a3, b0)
	r3 = addMul64(r3, a4_19, b4)

	// r4 = a0×b4 + a1×b3 + a2×b2 + a3×b1 + a4×b0
	r4 := mul64(a0, b4)
	r4 = addMul64(r4, a1, b3)
	r4 = addMul64(r4, a2, b2)
	r4 = addMul64(r4, a3, b1)
	r4 = addMul64(r4, a4, b0)

	// After the multiplication, we need to reduce (carry) the five coefficients
	// to obtain a result with limbs that are at most slightly larger than 2⁵¹,
	// to respect the Element invariant.
	//
	// Overall, the reduction works the same as carryPropagate, except with
	// wider inputs: we take the carry for each coefficient by shifting it right
	// by 51, and add it to the limb above it. The top carry is multiplied by 19
	// according to the reduction identity and added to the lowest limb.
	//
	// The largest coefficient (r0) will be at most 111 bits, which guarantees
	// that all carries are at most 111 - 51 = 60 bits, which fits in a uint64.
	//
	//     r0 = a0×b0 + 19×(a1×b4 + a2×b3 + a3×b2 + a4×b1)
	//     r0 < 2⁵²×2⁵² + 19×(2⁵²×2⁵² + 2⁵²×2⁵² + 2⁵²×2⁵² + 2⁵²×2⁵²)
	//     r0 < (1 + 19 × 4) × 2⁵² × 2⁵²
	//     r0 < 2⁷ × 2⁵² × 2⁵²
	//     r0 < 2¹¹¹
	//
	// Moreover, the top coefficient (r4) is at most 107 bits, so c4 is at most
	// 56 bits, and c4 * 19 is at most 61 bits, which again fits in a uint64 and
	// allows us to easily apply the reduction identity.
	//
	//     r4 = a0×b4 + a1×b3 + a2×b2 + a3×b1 + a4×b0
	//     r4 < 5 × 2⁵² × 2⁵²
	//     r4 < 2¹⁰⁷
	//

	c0 := shiftRightBy51(r0)
	c1 := shiftRightBy51(r1)
	c2 := shiftRightBy51(r2)
	c3 := shiftRightBy51(r3)
	c4 := shiftRightBy51(r4)

	rr0 := r0.lo&maskLow51Bits + c4*19
	rr1 := r1.lo&maskLow51Bits + c0
	rr2 := r2.lo&maskLow51Bits + c1
	rr3 := r3.lo&maskLow51Bits + c2
	rr4 := r4.lo&maskLow51Bits + c3

	// Now all coefficients fit into 64-bit registers but are still too large to
	// be passed around as a Element. We therefore do one last carry chain,
	// where the carries will be small enough to fit in the wiggle room above 2⁵¹.
	*v = Element{rr0, rr1, rr2, rr3, rr4}
	v.carryPropagate()
}

func feSquareGeneric(v, a *Element) {
	l0 := a.l0
	l1 := a.l1
	l2 := a.l2
	l3 := a.l3
	l4 := a.l4

	// Squaring works precisely like multiplication above, but thanks to its
	// symmetry we get to group a few terms together.
	//
	//                          l4   l3   l2   l1   l0  x
	//                          l4   l3   l2   l1   l0  =
	//                         ------------------------
	//                        l4l0 l3l0 l2l0 l1l0 l0l0  +
	//                   l4l1 l3l1 l2l1 l1l1 l0l1       +
	//              l4l2 l3l2 l2l2 l1l2 l0l2            +
	//         l4l3 l3l3 l2l3 l1l3 l0l3                 +
	//    l4l4 l3l4 l2l4 l1l4 l0l4                      =
	//   ----------------------------------------------
	//      r8   r7   r6   r5   r4   r3   r2   r1   r0
	//
	//            l4l0    l3l0    l2l0    l1l0    l0l0  +
	//            l3l1    l2l1    l1l1    l0l1 19×l4l1  +
	//            l2l2    l1l2    l0l2 19×l4l2 19×l3l2  +
	//            l1l3    l0l3 19×l4l3 19×l3l3 19×l2l3  +
	//            l0l4 19×l4l4 19×l3l4 19×l2l4 19×l1l4  =
	//           --------------------------------------
	//              r4      r3      r2      r1      r0
	//
	// With precomputed 2×, 19×, and 2×19× terms, we can compute each limb with
	// only three Mul64 and four Add64, instead of five and eight.

	l0_2 := l0 * 2
	l1_2 := l1 * 2

	l1_38 := l1 * 38
	l2_38 := l2 * 38
	l3_38 := l3 * 38

	l3_19 := l3 * 19
	l4_19 := l4 * 19

	// r0 = l0×l0 + 19×(l1×l4 + l2×l3 + l3×l2 + l4×l1) = l0×l0 + 19×2×(l1×l4 + l2×l3)
	r0 := mul64(l0, l0)
	r0 = addMul64(r0, l1_38, l4)
	r0 = addMul64(r0, l2_38, l3)

	// r1 = l0×l1 + l1×l0 + 19×(l2×l4 + l3×l3 + l4×l2) = 2×l0×l1 + 19×2×l2×l4 + 19×l3×l3
	r1 := mul64(l0_2, l1)
	r1 = addMul64(r1, l2_38, l4)
	r1 = addMul64(r1, l3_19, l3)

	// r2 = l0×l2 + l1×l1 + l2×l0 + 19×(l3×l4 + l4×l3) = 2×l0×l2 + l1×l1 + 19×2×l3×l4
	r2 := mul64(l0_2, l2)
	r2 = addMul64(r2, l1, l1)
	r2 = addMul64(r2, l3_38, l4)

	// r3 = l0×l3 + l1×l2 + l2×l1 + l3×l0 + 19×l4×l4 = 2×l0×l3 + 2×l1×l2 + 19×l4×l4
	r3 := mul64(l0_2, l3)
	r3 = addMul64(r3, l1_2, l2)
	r3 = addMul64(r3, l4_19, l4)

	// r4 = l0×l4 + l1×l3 + l2×l2 + l3×l1 + l4×l0 = 2×l0×l4 + 2×l1×l3 + l2×l2
	r4 := mul64(l0_2, l4)
	r4 = addMul64(r4, l1_2, l3)
	r4 = addMul64(r4, l2, l2)

	c0 := shiftRightBy51(r0)
	c1 := shiftRightBy51(r1)
	c2 := shiftRightBy51(r2)
	c3 := shiftRightBy51(r3)
	c4 := shiftRightBy51(r4)

	rr0 := r0.lo&maskLow51Bits + c4*19
	rr1 := r1.lo&maskLow51Bits + c0
	rr2 := r2.lo&maskLow51Bits + c1
	rr3 := r3.lo&maskLow51Bits + c2
	rr4 := r4.lo&maskLow51Bits + c3

	*v = Element{rr0, rr1, rr2, rr3, rr4}
	v.carryPropagate()
}

// carryPropagateGeneric brings the limbs below 52 bits by applying the reduction
// identity (a * 2²⁵⁵ + b = a * 19 + b) to the l4 carry. TODO inline
func (v *Element) carryPropagateGeneric() *Element {
	c0 := v.l0 >> 51
	c1 := v.l1 >> 51
	c2 := v.l2 >> 51
	c3 := v.l3 >> 51
	c4 := v.l4 >> 51

	v.l0 = v.l0&maskLow51Bits + c4*19
	v.l1 = v.l1&maskLow51Bits + c0
	v.l2 = v.l2&maskLow51Bits + c1
	v.l3 = v.l3&maskLow51Bits + c2
	v.l4 = v.l4&maskLow51Bits + c3

	return v
}
 07070100000CF2000081A4000000000000000000000001645E367C00000029000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/curve25519/internal/field/sync.checkpoint  b0c49ae9f59d233526f8934262c5bbbe14d4358d
   07070100000CF3000081A4000000000000000000000001645E367C00000263000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/curve25519/internal/field/sync.sh  #! /bin/bash
set -euo pipefail

cd "$(git rev-parse --show-toplevel)"

STD_PATH=src/crypto/ed25519/internal/edwards25519/field
LOCAL_PATH=curve25519/internal/field
LAST_SYNC_REF=$(cat $LOCAL_PATH/sync.checkpoint)

git fetch https://go.googlesource.com/go master

if git diff --quiet $LAST_SYNC_REF:$STD_PATH FETCH_HEAD:$STD_PATH; then
    echo "No changes."
else
    NEW_REF=$(git rev-parse FETCH_HEAD | tee $LOCAL_PATH/sync.checkpoint)
    echo "Applying changes from $LAST_SYNC_REF to $NEW_REF..."
    git diff $LAST_SYNC_REF:$STD_PATH FETCH_HEAD:$STD_PATH | \
        git apply -3 --directory=$LOCAL_PATH
fi
 07070100000CF4000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ed25519    07070100000CF5000081A4000000000000000000000001645E367C00000AE3000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ed25519/ed25519.go // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package ed25519 implements the Ed25519 signature algorithm. See
// https://ed25519.cr.yp.to/.
//
// These functions are also compatible with the “Ed25519” function defined in
// RFC 8032. However, unlike RFC 8032's formulation, this package's private key
// representation includes a public key suffix to make multiple signing
// operations with the same key more efficient. This package refers to the RFC
// 8032 private key as the “seed”.
//
// Beginning with Go 1.13, the functionality of this package was moved to the
// standard library as crypto/ed25519. This package only acts as a compatibility
// wrapper.
package ed25519

import (
	"crypto/ed25519"
	"io"
)

const (
	// PublicKeySize is the size, in bytes, of public keys as used in this package.
	PublicKeySize = 32
	// PrivateKeySize is the size, in bytes, of private keys as used in this package.
	PrivateKeySize = 64
	// SignatureSize is the size, in bytes, of signatures generated and verified by this package.
	SignatureSize = 64
	// SeedSize is the size, in bytes, of private key seeds. These are the private key representations used by RFC 8032.
	SeedSize = 32
)

// PublicKey is the type of Ed25519 public keys.
//
// This type is an alias for crypto/ed25519's PublicKey type.
// See the crypto/ed25519 package for the methods on this type.
type PublicKey = ed25519.PublicKey

// PrivateKey is the type of Ed25519 private keys. It implements crypto.Signer.
//
// This type is an alias for crypto/ed25519's PrivateKey type.
// See the crypto/ed25519 package for the methods on this type.
type PrivateKey = ed25519.PrivateKey

// GenerateKey generates a public/private key pair using entropy from rand.
// If rand is nil, crypto/rand.Reader will be used.
func GenerateKey(rand io.Reader) (PublicKey, PrivateKey, error) {
	return ed25519.GenerateKey(rand)
}

// NewKeyFromSeed calculates a private key from a seed. It will panic if
// len(seed) is not SeedSize. This function is provided for interoperability
// with RFC 8032. RFC 8032's private keys correspond to seeds in this
// package.
func NewKeyFromSeed(seed []byte) PrivateKey {
	return ed25519.NewKeyFromSeed(seed)
}

// Sign signs the message with privateKey and returns a signature. It will
// panic if len(privateKey) is not PrivateKeySize.
func Sign(privateKey PrivateKey, message []byte) []byte {
	return ed25519.Sign(privateKey, message)
}

// Verify reports whether sig is a valid signature of message by publicKey. It
// will panic if len(publicKey) is not PublicKeySize.
func Verify(publicKey PublicKey, message, sig []byte) bool {
	return ed25519.Verify(publicKey, message, sig)
}
 07070100000CF6000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/internal   07070100000CF7000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/internal/alias 07070100000CF8000081A4000000000000000000000001645E367C0000047C000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/internal/alias/alias.go    // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build !purego
// +build !purego

// Package alias implements memory aliasing tests.
package alias

import "unsafe"

// AnyOverlap reports whether x and y share memory at any (not necessarily
// corresponding) index. The memory beyond the slice length is ignored.
func AnyOverlap(x, y []byte) bool {
	return len(x) > 0 && len(y) > 0 &&
		uintptr(unsafe.Pointer(&x[0])) <= uintptr(unsafe.Pointer(&y[len(y)-1])) &&
		uintptr(unsafe.Pointer(&y[0])) <= uintptr(unsafe.Pointer(&x[len(x)-1]))
}

// InexactOverlap reports whether x and y share memory at any non-corresponding
// index. The memory beyond the slice length is ignored. Note that x and y can
// have different lengths and still not have any inexact overlap.
//
// InexactOverlap can be used to implement the requirements of the crypto/cipher
// AEAD, Block, BlockMode and Stream interfaces.
func InexactOverlap(x, y []byte) bool {
	if len(x) == 0 || len(y) == 0 || &x[0] == &y[0] {
		return false
	}
	return AnyOverlap(x, y)
}
07070100000CF9000081A4000000000000000000000001645E367C000004FD000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/internal/alias/alias_purego.go // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build purego
// +build purego

// Package alias implements memory aliasing tests.
package alias

// This is the Google App Engine standard variant based on reflect
// because the unsafe package and cgo are disallowed.

import "reflect"

// AnyOverlap reports whether x and y share memory at any (not necessarily
// corresponding) index. The memory beyond the slice length is ignored.
func AnyOverlap(x, y []byte) bool {
	return len(x) > 0 && len(y) > 0 &&
		reflect.ValueOf(&x[0]).Pointer() <= reflect.ValueOf(&y[len(y)-1]).Pointer() &&
		reflect.ValueOf(&y[0]).Pointer() <= reflect.ValueOf(&x[len(x)-1]).Pointer()
}

// InexactOverlap reports whether x and y share memory at any non-corresponding
// index. The memory beyond the slice length is ignored. Note that x and y can
// have different lengths and still not have any inexact overlap.
//
// InexactOverlap can be used to implement the requirements of the crypto/cipher
// AEAD, Block, BlockMode and Stream interfaces.
func InexactOverlap(x, y []byte) bool {
	if len(x) == 0 || len(y) == 0 || &x[0] == &y[0] {
		return false
	}
	return AnyOverlap(x, y)
}
   07070100000CFA000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/internal/poly1305  07070100000CFB000081A4000000000000000000000001645E367C000003BC000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/internal/poly1305/bits_compat.go   // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build !go1.13
// +build !go1.13

package poly1305

// Generic fallbacks for the math/bits intrinsics, copied from
// src/math/bits/bits.go. They were added in Go 1.12, but Add64 and Sum64 had
// variable time fallbacks until Go 1.13.

func bitsAdd64(x, y, carry uint64) (sum, carryOut uint64) {
	sum = x + y + carry
	carryOut = ((x & y) | ((x | y) &^ sum)) >> 63
	return
}

func bitsSub64(x, y, borrow uint64) (diff, borrowOut uint64) {
	diff = x - y - borrow
	borrowOut = ((^x & y) | (^(x ^ y) & diff)) >> 63
	return
}

func bitsMul64(x, y uint64) (hi, lo uint64) {
	const mask32 = 1<<32 - 1
	x0 := x & mask32
	x1 := x >> 32
	y0 := y & mask32
	y1 := y >> 32
	w0 := x0 * y0
	t := x1*y0 + w0>>32
	w1 := t & mask32
	w2 := t >> 32
	w1 += x0 * y1
	hi = x1*y1 + w2 + w1>>32
	lo = x * y
	return
}
07070100000CFC000081A4000000000000000000000001645E367C000001F5000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/internal/poly1305/bits_go1.13.go   // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build go1.13
// +build go1.13

package poly1305

import "math/bits"

func bitsAdd64(x, y, carry uint64) (sum, carryOut uint64) {
	return bits.Add64(x, y, carry)
}

func bitsSub64(x, y, borrow uint64) (diff, borrowOut uint64) {
	return bits.Sub64(x, y, borrow)
}

func bitsMul64(x, y uint64) (hi, lo uint64) {
	return bits.Mul64(x, y)
}
   07070100000CFD000081A4000000000000000000000001645E367C00000138000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/internal/poly1305/mac_noasm.go // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build (!amd64 && !ppc64le && !s390x) || !gc || purego
// +build !amd64,!ppc64le,!s390x !gc purego

package poly1305

type mac struct{ macGeneric }
07070100000CFE000081A4000000000000000000000001645E367C00000D3A000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/internal/poly1305/poly1305.go  // Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package poly1305 implements Poly1305 one-time message authentication code as
// specified in https://cr.yp.to/mac/poly1305-20050329.pdf.
//
// Poly1305 is a fast, one-time authentication function. It is infeasible for an
// attacker to generate an authenticator for a message without the key. However, a
// key must only be used for a single message. Authenticating two different
// messages with the same key allows an attacker to forge authenticators for other
// messages with the same key.
//
// Poly1305 was originally coupled with AES in order to make Poly1305-AES. AES was
// used with a fixed key in order to generate one-time keys from an nonce.
// However, in this package AES isn't used and the one-time key is specified
// directly.
package poly1305

import "crypto/subtle"

// TagSize is the size, in bytes, of a poly1305 authenticator.
const TagSize = 16

// Sum generates an authenticator for msg using a one-time key and puts the
// 16-byte result into out. Authenticating two different messages with the same
// key allows an attacker to forge messages at will.
func Sum(out *[16]byte, m []byte, key *[32]byte) {
	h := New(key)
	h.Write(m)
	h.Sum(out[:0])
}

// Verify returns true if mac is a valid authenticator for m with the given key.
func Verify(mac *[16]byte, m []byte, key *[32]byte) bool {
	var tmp [16]byte
	Sum(&tmp, m, key)
	return subtle.ConstantTimeCompare(tmp[:], mac[:]) == 1
}

// New returns a new MAC computing an authentication
// tag of all data written to it with the given key.
// This allows writing the message progressively instead
// of passing it as a single slice. Common users should use
// the Sum function instead.
//
// The key must be unique for each message, as authenticating
// two different messages with the same key allows an attacker
// to forge messages at will.
func New(key *[32]byte) *MAC {
	m := &MAC{}
	initialize(key, &m.macState)
	return m
}

// MAC is an io.Writer computing an authentication tag
// of the data written to it.
//
// MAC cannot be used like common hash.Hash implementations,
// because using a poly1305 key twice breaks its security.
// Therefore writing data to a running MAC after calling
// Sum or Verify causes it to panic.
type MAC struct {
	mac // platform-dependent implementation

	finalized bool
}

// Size returns the number of bytes Sum will return.
func (h *MAC) Size() int { return TagSize }

// Write adds more data to the running message authentication code.
// It never returns an error.
//
// It must not be called after the first call of Sum or Verify.
func (h *MAC) Write(p []byte) (n int, err error) {
	if h.finalized {
		panic("poly1305: write to MAC after Sum or Verify")
	}
	return h.mac.Write(p)
}

// Sum computes the authenticator of all data written to the
// message authentication code.
func (h *MAC) Sum(b []byte) []byte {
	var mac [TagSize]byte
	h.mac.Sum(&mac)
	h.finalized = true
	return append(b, mac[:]...)
}

// Verify returns whether the authenticator of all data written to
// the message authentication code matches the expected value.
func (h *MAC) Verify(expected []byte) bool {
	var mac [TagSize]byte
	h.mac.Sum(&mac)
	h.finalized = true
	return subtle.ConstantTimeCompare(expected, mac[:]) == 1
}
  07070100000CFF000081A4000000000000000000000001645E367C00000474000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/internal/poly1305/sum_amd64.go // Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build gc && !purego
// +build gc,!purego

package poly1305

//go:noescape
func update(state *macState, msg []byte)

// mac is a wrapper for macGeneric that redirects calls that would have gone to
// updateGeneric to update.
//
// Its Write and Sum methods are otherwise identical to the macGeneric ones, but
// using function pointers would carry a major performance cost.
type mac struct{ macGeneric }

func (h *mac) Write(p []byte) (int, error) {
	nn := len(p)
	if h.offset > 0 {
		n := copy(h.buffer[h.offset:], p)
		if h.offset+n < TagSize {
			h.offset += n
			return nn, nil
		}
		p = p[n:]
		h.offset = 0
		update(&h.macState, h.buffer[:])
	}
	if n := len(p) - (len(p) % TagSize); n > 0 {
		update(&h.macState, p[:n])
		p = p[n:]
	}
	if len(p) > 0 {
		h.offset += copy(h.buffer[h.offset:], p)
	}
	return nn, nil
}

func (h *mac) Sum(out *[16]byte) {
	state := h.macState
	if h.offset > 0 {
		update(&state, h.buffer[:h.offset])
	}
	finalize(out, &state.h, &state.s)
}
07070100000D00000081A4000000000000000000000001645E367C00000A07000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/internal/poly1305/sum_amd64.s  // Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build gc && !purego
// +build gc,!purego

#include "textflag.h"

#define POLY1305_ADD(msg, h0, h1, h2) \
	ADDQ 0(msg), h0;  \
	ADCQ 8(msg), h1;  \
	ADCQ $1, h2;      \
	LEAQ 16(msg), msg

#define POLY1305_MUL(h0, h1, h2, r0, r1, t0, t1, t2, t3) \
	MOVQ  r0, AX;                  \
	MULQ  h0;                      \
	MOVQ  AX, t0;                  \
	MOVQ  DX, t1;                  \
	MOVQ  r0, AX;                  \
	MULQ  h1;                      \
	ADDQ  AX, t1;                  \
	ADCQ  $0, DX;                  \
	MOVQ  r0, t2;                  \
	IMULQ h2, t2;                  \
	ADDQ  DX, t2;                  \
	                               \
	MOVQ  r1, AX;                  \
	MULQ  h0;                      \
	ADDQ  AX, t1;                  \
	ADCQ  $0, DX;                  \
	MOVQ  DX, h0;                  \
	MOVQ  r1, t3;                  \
	IMULQ h2, t3;                  \
	MOVQ  r1, AX;                  \
	MULQ  h1;                      \
	ADDQ  AX, t2;                  \
	ADCQ  DX, t3;                  \
	ADDQ  h0, t2;                  \
	ADCQ  $0, t3;                  \
	                               \
	MOVQ  t0, h0;                  \
	MOVQ  t1, h1;                  \
	MOVQ  t2, h2;                  \
	ANDQ  $3, h2;                  \
	MOVQ  t2, t0;                  \
	ANDQ  $0xFFFFFFFFFFFFFFFC, t0; \
	ADDQ  t0, h0;                  \
	ADCQ  t3, h1;                  \
	ADCQ  $0, h2;                  \
	SHRQ  $2, t3, t2;              \
	SHRQ  $2, t3;                  \
	ADDQ  t2, h0;                  \
	ADCQ  t3, h1;                  \
	ADCQ  $0, h2

// func update(state *[7]uint64, msg []byte)
TEXT ·update(SB), $0-32
	MOVQ state+0(FP), DI
	MOVQ msg_base+8(FP), SI
	MOVQ msg_len+16(FP), R15

	MOVQ 0(DI), R8   // h0
	MOVQ 8(DI), R9   // h1
	MOVQ 16(DI), R10 // h2
	MOVQ 24(DI), R11 // r0
	MOVQ 32(DI), R12 // r1

	CMPQ R15, $16
	JB   bytes_between_0_and_15

loop:
	POLY1305_ADD(SI, R8, R9, R10)

multiply:
	POLY1305_MUL(R8, R9, R10, R11, R12, BX, CX, R13, R14)
	SUBQ $16, R15
	CMPQ R15, $16
	JAE  loop

bytes_between_0_and_15:
	TESTQ R15, R15
	JZ    done
	MOVQ  $1, BX
	XORQ  CX, CX
	XORQ  R13, R13
	ADDQ  R15, SI

flush_buffer:
	SHLQ $8, BX, CX
	SHLQ $8, BX
	MOVB -1(SI), R13
	XORQ R13, BX
	DECQ SI
	DECQ R15
	JNZ  flush_buffer

	ADDQ BX, R8
	ADCQ CX, R9
	ADCQ $0, R10
	MOVQ $16, R15
	JMP  multiply

done:
	MOVQ R8, 0(DI)
	MOVQ R9, 8(DI)
	MOVQ R10, 16(DI)
	RET
 07070100000D01000081A4000000000000000000000001645E367C00002617000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/internal/poly1305/sum_generic.go   // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// This file provides the generic implementation of Sum and MAC. Other files
// might provide optimized assembly implementations of some of this code.

package poly1305

import "encoding/binary"

// Poly1305 [RFC 7539] is a relatively simple algorithm: the authentication tag
// for a 64 bytes message is approximately
//
//     s + m[0:16] * r⁴ + m[16:32] * r³ + m[32:48] * r² + m[48:64] * r  mod  2¹³⁰ - 5
//
// for some secret r and s. It can be computed sequentially like
//
//     for len(msg) > 0:
//         h += read(msg, 16)
//         h *= r
//         h %= 2¹³⁰ - 5
//     return h + s
//
// All the complexity is about doing performant constant-time math on numbers
// larger than any available numeric type.

func sumGeneric(out *[TagSize]byte, msg []byte, key *[32]byte) {
	h := newMACGeneric(key)
	h.Write(msg)
	h.Sum(out)
}

func newMACGeneric(key *[32]byte) macGeneric {
	m := macGeneric{}
	initialize(key, &m.macState)
	return m
}

// macState holds numbers in saturated 64-bit little-endian limbs. That is,
// the value of [x0, x1, x2] is x[0] + x[1] * 2⁶⁴ + x[2] * 2¹²⁸.
type macState struct {
	// h is the main accumulator. It is to be interpreted modulo 2¹³⁰ - 5, but
	// can grow larger during and after rounds. It must, however, remain below
	// 2 * (2¹³⁰ - 5).
	h [3]uint64
	// r and s are the private key components.
	r [2]uint64
	s [2]uint64
}

type macGeneric struct {
	macState

	buffer [TagSize]byte
	offset int
}

// Write splits the incoming message into TagSize chunks, and passes them to
// update. It buffers incomplete chunks.
func (h *macGeneric) Write(p []byte) (int, error) {
	nn := len(p)
	if h.offset > 0 {
		n := copy(h.buffer[h.offset:], p)
		if h.offset+n < TagSize {
			h.offset += n
			return nn, nil
		}
		p = p[n:]
		h.offset = 0
		updateGeneric(&h.macState, h.buffer[:])
	}
	if n := len(p) - (len(p) % TagSize); n > 0 {
		updateGeneric(&h.macState, p[:n])
		p = p[n:]
	}
	if len(p) > 0 {
		h.offset += copy(h.buffer[h.offset:], p)
	}
	return nn, nil
}

// Sum flushes the last incomplete chunk from the buffer, if any, and generates
// the MAC output. It does not modify its state, in order to allow for multiple
// calls to Sum, even if no Write is allowed after Sum.
func (h *macGeneric) Sum(out *[TagSize]byte) {
	state := h.macState
	if h.offset > 0 {
		updateGeneric(&state, h.buffer[:h.offset])
	}
	finalize(out, &state.h, &state.s)
}

// [rMask0, rMask1] is the specified Poly1305 clamping mask in little-endian. It
// clears some bits of the secret coefficient to make it possible to implement
// multiplication more efficiently.
const (
	rMask0 = 0x0FFFFFFC0FFFFFFF
	rMask1 = 0x0FFFFFFC0FFFFFFC
)

// initialize loads the 256-bit key into the two 128-bit secret values r and s.
func initialize(key *[32]byte, m *macState) {
	m.r[0] = binary.LittleEndian.Uint64(key[0:8]) & rMask0
	m.r[1] = binary.LittleEndian.Uint64(key[8:16]) & rMask1
	m.s[0] = binary.LittleEndian.Uint64(key[16:24])
	m.s[1] = binary.LittleEndian.Uint64(key[24:32])
}

// uint128 holds a 128-bit number as two 64-bit limbs, for use with the
// bits.Mul64 and bits.Add64 intrinsics.
type uint128 struct {
	lo, hi uint64
}

func mul64(a, b uint64) uint128 {
	hi, lo := bitsMul64(a, b)
	return uint128{lo, hi}
}

func add128(a, b uint128) uint128 {
	lo, c := bitsAdd64(a.lo, b.lo, 0)
	hi, c := bitsAdd64(a.hi, b.hi, c)
	if c != 0 {
		panic("poly1305: unexpected overflow")
	}
	return uint128{lo, hi}
}

func shiftRightBy2(a uint128) uint128 {
	a.lo = a.lo>>2 | (a.hi&3)<<62
	a.hi = a.hi >> 2
	return a
}

// updateGeneric absorbs msg into the state.h accumulator. For each chunk m of
// 128 bits of message, it computes
//
//	h₊ = (h + m) * r  mod  2¹³⁰ - 5
//
// If the msg length is not a multiple of TagSize, it assumes the last
// incomplete chunk is the final one.
func updateGeneric(state *macState, msg []byte) {
	h0, h1, h2 := state.h[0], state.h[1], state.h[2]
	r0, r1 := state.r[0], state.r[1]

	for len(msg) > 0 {
		var c uint64

		// For the first step, h + m, we use a chain of bits.Add64 intrinsics.
		// The resulting value of h might exceed 2¹³⁰ - 5, but will be partially
		// reduced at the end of the multiplication below.
		//
		// The spec requires us to set a bit just above the message size, not to
		// hide leading zeroes. For full chunks, that's 1 << 128, so we can just
		// add 1 to the most significant (2¹²⁸) limb, h2.
		if len(msg) >= TagSize {
			h0, c = bitsAdd64(h0, binary.LittleEndian.Uint64(msg[0:8]), 0)
			h1, c = bitsAdd64(h1, binary.LittleEndian.Uint64(msg[8:16]), c)
			h2 += c + 1

			msg = msg[TagSize:]
		} else {
			var buf [TagSize]byte
			copy(buf[:], msg)
			buf[len(msg)] = 1

			h0, c = bitsAdd64(h0, binary.LittleEndian.Uint64(buf[0:8]), 0)
			h1, c = bitsAdd64(h1, binary.LittleEndian.Uint64(buf[8:16]), c)
			h2 += c

			msg = nil
		}

		// Multiplication of big number limbs is similar to elementary school
		// columnar multiplication. Instead of digits, there are 64-bit limbs.
		//
		// We are multiplying a 3 limbs number, h, by a 2 limbs number, r.
		//
		//                        h2    h1    h0  x
		//                              r1    r0  =
		//                       ----------------
		//                      h2r0  h1r0  h0r0     <-- individual 128-bit products
		//            +   h2r1  h1r1  h0r1
		//               ------------------------
		//                 m3    m2    m1    m0      <-- result in 128-bit overlapping limbs
		//               ------------------------
		//         m3.hi m2.hi m1.hi m0.hi           <-- carry propagation
		//     +         m3.lo m2.lo m1.lo m0.lo
		//        -------------------------------
		//           t4    t3    t2    t1    t0      <-- final result in 64-bit limbs
		//
		// The main difference from pen-and-paper multiplication is that we do
		// carry propagation in a separate step, as if we wrote two digit sums
		// at first (the 128-bit limbs), and then carried the tens all at once.

		h0r0 := mul64(h0, r0)
		h1r0 := mul64(h1, r0)
		h2r0 := mul64(h2, r0)
		h0r1 := mul64(h0, r1)
		h1r1 := mul64(h1, r1)
		h2r1 := mul64(h2, r1)

		// Since h2 is known to be at most 7 (5 + 1 + 1), and r0 and r1 have their
		// top 4 bits cleared by rMask{0,1}, we know that their product is not going
		// to overflow 64 bits, so we can ignore the high part of the products.
		//
		// This also means that the product doesn't have a fifth limb (t4).
		if h2r0.hi != 0 {
			panic("poly1305: unexpected overflow")
		}
		if h2r1.hi != 0 {
			panic("poly1305: unexpected overflow")
		}

		m0 := h0r0
		m1 := add128(h1r0, h0r1) // These two additions don't overflow thanks again
		m2 := add128(h2r0, h1r1) // to the 4 masked bits at the top of r0 and r1.
		m3 := h2r1

		t0 := m0.lo
		t1, c := bitsAdd64(m1.lo, m0.hi, 0)
		t2, c := bitsAdd64(m2.lo, m1.hi, c)
		t3, _ := bitsAdd64(m3.lo, m2.hi, c)

		// Now we have the result as 4 64-bit limbs, and we need to reduce it
		// modulo 2¹³⁰ - 5. The special shape of this Crandall prime lets us do
		// a cheap partial reduction according to the reduction identity
		//
		//     c * 2¹³⁰ + n  =  c * 5 + n  mod  2¹³⁰ - 5
		//
		// because 2¹³⁰ = 5 mod 2¹³⁰ - 5. Partial reduction since the result is
		// likely to be larger than 2¹³⁰ - 5, but still small enough to fit the
		// assumptions we make about h in the rest of the code.
		//
		// See also https://speakerdeck.com/gtank/engineering-prime-numbers?slide=23

		// We split the final result at the 2¹³⁰ mark into h and cc, the carry.
		// Note that the carry bits are effectively shifted left by 2, in other
		// words, cc = c * 4 for the c in the reduction identity.
		h0, h1, h2 = t0, t1, t2&maskLow2Bits
		cc := uint128{t2 & maskNotLow2Bits, t3}

		// To add c * 5 to h, we first add cc = c * 4, and then add (cc >> 2) = c.

		h0, c = bitsAdd64(h0, cc.lo, 0)
		h1, c = bitsAdd64(h1, cc.hi, c)
		h2 += c

		cc = shiftRightBy2(cc)

		h0, c = bitsAdd64(h0, cc.lo, 0)
		h1, c = bitsAdd64(h1, cc.hi, c)
		h2 += c

		// h2 is at most 3 + 1 + 1 = 5, making the whole of h at most
		//
		//     5 * 2¹²⁸ + (2¹²⁸ - 1) = 6 * 2¹²⁸ - 1
	}

	state.h[0], state.h[1], state.h[2] = h0, h1, h2
}

const (
	maskLow2Bits    uint64 = 0x0000000000000003
	maskNotLow2Bits uint64 = ^maskLow2Bits
)

// select64 returns x if v == 1 and y if v == 0, in constant time.
func select64(v, x, y uint64) uint64 { return ^(v-1)&x | (v-1)&y }

// [p0, p1, p2] is 2¹³⁰ - 5 in little endian order.
const (
	p0 = 0xFFFFFFFFFFFFFFFB
	p1 = 0xFFFFFFFFFFFFFFFF
	p2 = 0x0000000000000003
)

// finalize completes the modular reduction of h and computes
//
//	out = h + s  mod  2¹²⁸
func finalize(out *[TagSize]byte, h *[3]uint64, s *[2]uint64) {
	h0, h1, h2 := h[0], h[1], h[2]

	// After the partial reduction in updateGeneric, h might be more than
	// 2¹³⁰ - 5, but will be less than 2 * (2¹³⁰ - 5). To complete the reduction
	// in constant time, we compute t = h - (2¹³⁰ - 5), and select h as the
	// result if the subtraction underflows, and t otherwise.

	hMinusP0, b := bitsSub64(h0, p0, 0)
	hMinusP1, b := bitsSub64(h1, p1, b)
	_, b = bitsSub64(h2, p2, b)

	// h = h if h < p else h - p
	h0 = select64(b, h0, hMinusP0)
	h1 = select64(b, h1, hMinusP1)

	// Finally, we compute the last Poly1305 step
	//
	//     tag = h + s  mod  2¹²⁸
	//
	// by just doing a wide addition with the 128 low bits of h and discarding
	// the overflow.
	h0, c := bitsAdd64(h0, s[0], 0)
	h1, _ = bitsAdd64(h1, s[1], c)

	binary.LittleEndian.PutUint64(out[0:8], h0)
	binary.LittleEndian.PutUint64(out[8:16], h1)
}
 07070100000D02000081A4000000000000000000000001645E367C00000474000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.go   // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build gc && !purego
// +build gc,!purego

package poly1305

//go:noescape
func update(state *macState, msg []byte)

// mac is a wrapper for macGeneric that redirects calls that would have gone to
// updateGeneric to update.
//
// Its Write and Sum methods are otherwise identical to the macGeneric ones, but
// using function pointers would carry a major performance cost.
type mac struct{ macGeneric }

func (h *mac) Write(p []byte) (int, error) {
	nn := len(p)
	if h.offset > 0 {
		n := copy(h.buffer[h.offset:], p)
		if h.offset+n < TagSize {
			h.offset += n
			return nn, nil
		}
		p = p[n:]
		h.offset = 0
		update(&h.macState, h.buffer[:])
	}
	if n := len(p) - (len(p) % TagSize); n > 0 {
		update(&h.macState, p[:n])
		p = p[n:]
	}
	if len(p) > 0 {
		h.offset += copy(h.buffer[h.offset:], p)
	}
	return nn, nil
}

func (h *mac) Sum(out *[16]byte) {
	state := h.macState
	if h.offset > 0 {
		update(&state, h.buffer[:h.offset])
	}
	finalize(out, &state.h, &state.s)
}
07070100000D03000081A4000000000000000000000001645E367C00000D2F000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.s    // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build gc && !purego
// +build gc,!purego

#include "textflag.h"

// This was ported from the amd64 implementation.

#define POLY1305_ADD(msg, h0, h1, h2, t0, t1, t2) \
	MOVD (msg), t0;  \
	MOVD 8(msg), t1; \
	MOVD $1, t2;     \
	ADDC t0, h0, h0; \
	ADDE t1, h1, h1; \
	ADDE t2, h2;     \
	ADD  $16, msg

#define POLY1305_MUL(h0, h1, h2, r0, r1, t0, t1, t2, t3, t4, t5) \
	MULLD  r0, h0, t0;  \
	MULLD  r0, h1, t4;  \
	MULHDU r0, h0, t1;  \
	MULHDU r0, h1, t5;  \
	ADDC   t4, t1, t1;  \
	MULLD  r0, h2, t2;  \
	ADDZE  t5;          \
	MULHDU r1, h0, t4;  \
	MULLD  r1, h0, h0;  \
	ADD    t5, t2, t2;  \
	ADDC   h0, t1, t1;  \
	MULLD  h2, r1, t3;  \
	ADDZE  t4, h0;      \
	MULHDU r1, h1, t5;  \
	MULLD  r1, h1, t4;  \
	ADDC   t4, t2, t2;  \
	ADDE   t5, t3, t3;  \
	ADDC   h0, t2, t2;  \
	MOVD   $-4, t4;     \
	MOVD   t0, h0;      \
	MOVD   t1, h1;      \
	ADDZE  t3;          \
	ANDCC  $3, t2, h2;  \
	AND    t2, t4, t0;  \
	ADDC   t0, h0, h0;  \
	ADDE   t3, h1, h1;  \
	SLD    $62, t3, t4; \
	SRD    $2, t2;      \
	ADDZE  h2;          \
	OR     t4, t2, t2;  \
	SRD    $2, t3;      \
	ADDC   t2, h0, h0;  \
	ADDE   t3, h1, h1;  \
	ADDZE  h2

DATA ·poly1305Mask<>+0x00(SB)/8, $0x0FFFFFFC0FFFFFFF
DATA ·poly1305Mask<>+0x08(SB)/8, $0x0FFFFFFC0FFFFFFC
GLOBL ·poly1305Mask<>(SB), RODATA, $16

// func update(state *[7]uint64, msg []byte)
TEXT ·update(SB), $0-32
	MOVD state+0(FP), R3
	MOVD msg_base+8(FP), R4
	MOVD msg_len+16(FP), R5

	MOVD 0(R3), R8   // h0
	MOVD 8(R3), R9   // h1
	MOVD 16(R3), R10 // h2
	MOVD 24(R3), R11 // r0
	MOVD 32(R3), R12 // r1

	CMP R5, $16
	BLT bytes_between_0_and_15

loop:
	POLY1305_ADD(R4, R8, R9, R10, R20, R21, R22)

multiply:
	POLY1305_MUL(R8, R9, R10, R11, R12, R16, R17, R18, R14, R20, R21)
	ADD $-16, R5
	CMP R5, $16
	BGE loop

bytes_between_0_and_15:
	CMP  R5, $0
	BEQ  done
	MOVD $0, R16 // h0
	MOVD $0, R17 // h1

flush_buffer:
	CMP R5, $8
	BLE just1

	MOVD $8, R21
	SUB  R21, R5, R21

	// Greater than 8 -- load the rightmost remaining bytes in msg
	// and put into R17 (h1)
	MOVD (R4)(R21), R17
	MOVD $16, R22

	// Find the offset to those bytes
	SUB R5, R22, R22
	SLD $3, R22

	// Shift to get only the bytes in msg
	SRD R22, R17, R17

	// Put 1 at high end
	MOVD $1, R23
	SLD  $3, R21
	SLD  R21, R23, R23
	OR   R23, R17, R17

	// Remainder is 8
	MOVD $8, R5

just1:
	CMP R5, $8
	BLT less8

	// Exactly 8
	MOVD (R4), R16

	CMP R17, $0

	// Check if we've already set R17; if not
	// set 1 to indicate end of msg.
	BNE  carry
	MOVD $1, R17
	BR   carry

less8:
	MOVD  $0, R16   // h0
	MOVD  $0, R22   // shift count
	CMP   R5, $4
	BLT   less4
	MOVWZ (R4), R16
	ADD   $4, R4
	ADD   $-4, R5
	MOVD  $32, R22

less4:
	CMP   R5, $2
	BLT   less2
	MOVHZ (R4), R21
	SLD   R22, R21, R21
	OR    R16, R21, R16
	ADD   $16, R22
	ADD   $-2, R5
	ADD   $2, R4

less2:
	CMP   R5, $0
	BEQ   insert1
	MOVBZ (R4), R21
	SLD   R22, R21, R21
	OR    R16, R21, R16
	ADD   $8, R22

insert1:
	// Insert 1 at end of msg
	MOVD $1, R21
	SLD  R22, R21, R21
	OR   R16, R21, R16

carry:
	// Add new values to h0, h1, h2
	ADDC  R16, R8
	ADDE  R17, R9
	ADDZE R10, R10
	MOVD  $16, R5
	ADD   R5, R4
	BR    multiply

done:
	// Save h0, h1, h2 in state
	MOVD R8, 0(R3)
	MOVD R9, 8(R3)
	MOVD R10, 16(R3)
	RET
 07070100000D04000081A4000000000000000000000001645E367C000007FF000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/internal/poly1305/sum_s390x.go // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build gc && !purego
// +build gc,!purego

package poly1305

import (
	"golang.org/x/sys/cpu"
)

// updateVX is an assembly implementation of Poly1305 that uses vector
// instructions. It must only be called if the vector facility (vx) is
// available.
//
//go:noescape
func updateVX(state *macState, msg []byte)

// mac is a replacement for macGeneric that uses a larger buffer and redirects
// calls that would have gone to updateGeneric to updateVX if the vector
// facility is installed.
//
// A larger buffer is required for good performance because the vector
// implementation has a higher fixed cost per call than the generic
// implementation.
type mac struct {
	macState

	buffer [16 * TagSize]byte // size must be a multiple of block size (16)
	offset int
}

func (h *mac) Write(p []byte) (int, error) {
	nn := len(p)
	if h.offset > 0 {
		n := copy(h.buffer[h.offset:], p)
		if h.offset+n < len(h.buffer) {
			h.offset += n
			return nn, nil
		}
		p = p[n:]
		h.offset = 0
		if cpu.S390X.HasVX {
			updateVX(&h.macState, h.buffer[:])
		} else {
			updateGeneric(&h.macState, h.buffer[:])
		}
	}

	tail := len(p) % len(h.buffer) // number of bytes to copy into buffer
	body := len(p) - tail          // number of bytes to process now
	if body > 0 {
		if cpu.S390X.HasVX {
			updateVX(&h.macState, p[:body])
		} else {
			updateGeneric(&h.macState, p[:body])
		}
	}
	h.offset = copy(h.buffer[:], p[body:]) // copy tail bytes - can be 0
	return nn, nil
}

func (h *mac) Sum(out *[TagSize]byte) {
	state := h.macState
	remainder := h.buffer[:h.offset]

	// Use the generic implementation if we have 2 or fewer blocks left
	// to sum. The vector implementation has a higher startup time.
	if cpu.S390X.HasVX && len(remainder) > 2*TagSize {
		updateVX(&state, remainder)
	} else if len(remainder) > 0 {
		updateGeneric(&state, remainder)
	}
	finalize(out, &state.h, &state.s)
}
 07070100000D05000081A4000000000000000000000001645E367C000045E4000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/internal/poly1305/sum_s390x.s  // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build gc && !purego
// +build gc,!purego

#include "textflag.h"

// This implementation of Poly1305 uses the vector facility (vx)
// to process up to 2 blocks (32 bytes) per iteration using an
// algorithm based on the one described in:
//
// NEON crypto, Daniel J. Bernstein & Peter Schwabe
// https://cryptojedi.org/papers/neoncrypto-20120320.pdf
//
// This algorithm uses 5 26-bit limbs to represent a 130-bit
// value. These limbs are, for the most part, zero extended and
// placed into 64-bit vector register elements. Each vector
// register is 128-bits wide and so holds 2 of these elements.
// Using 26-bit limbs allows us plenty of headroom to accommodate
// accumulations before and after multiplication without
// overflowing either 32-bits (before multiplication) or 64-bits
// (after multiplication).
//
// In order to parallelise the operations required to calculate
// the sum we use two separate accumulators and then sum those
// in an extra final step. For compatibility with the generic
// implementation we perform this summation at the end of every
// updateVX call.
//
// To use two accumulators we must multiply the message blocks
// by r² rather than r. Only the final message block should be
// multiplied by r.
//
// Example:
//
// We want to calculate the sum (h) for a 64 byte message (m):
//
//   h = m[0:16]r⁴ + m[16:32]r³ + m[32:48]r² + m[48:64]r
//
// To do this we split the calculation into the even indices
// and odd indices of the message. These form our SIMD 'lanes':
//
//   h = m[ 0:16]r⁴ + m[32:48]r² +   <- lane 0
//       m[16:32]r³ + m[48:64]r      <- lane 1
//
// To calculate this iteratively we refactor so that both lanes
// are written in terms of r² and r:
//
//   h = (m[ 0:16]r² + m[32:48])r² + <- lane 0
//       (m[16:32]r² + m[48:64])r    <- lane 1
//                ^             ^
//                |             coefficients for second iteration
//                coefficients for first iteration
//
// So in this case we would have two iterations. In the first
// both lanes are multiplied by r². In the second only the
// first lane is multiplied by r² and the second lane is
// instead multiplied by r. This gives use the odd and even
// powers of r that we need from the original equation.
//
// Notation:
//
//   h - accumulator
//   r - key
//   m - message
//
//   [a, b]       - SIMD register holding two 64-bit values
//   [a, b, c, d] - SIMD register holding four 32-bit values
//   xᵢ[n]        - limb n of variable x with bit width i
//
// Limbs are expressed in little endian order, so for 26-bit
// limbs x₂₆[4] will be the most significant limb and x₂₆[0]
// will be the least significant limb.

// masking constants
#define MOD24 V0 // [0x0000000000ffffff, 0x0000000000ffffff] - mask low 24-bits
#define MOD26 V1 // [0x0000000003ffffff, 0x0000000003ffffff] - mask low 26-bits

// expansion constants (see EXPAND macro)
#define EX0 V2
#define EX1 V3
#define EX2 V4

// key (r², r or 1 depending on context)
#define R_0 V5
#define R_1 V6
#define R_2 V7
#define R_3 V8
#define R_4 V9

// precalculated coefficients (5r², 5r or 0 depending on context)
#define R5_1 V10
#define R5_2 V11
#define R5_3 V12
#define R5_4 V13

// message block (m)
#define M_0 V14
#define M_1 V15
#define M_2 V16
#define M_3 V17
#define M_4 V18

// accumulator (h)
#define H_0 V19
#define H_1 V20
#define H_2 V21
#define H_3 V22
#define H_4 V23

// temporary registers (for short-lived values)
#define T_0 V24
#define T_1 V25
#define T_2 V26
#define T_3 V27
#define T_4 V28

GLOBL ·constants<>(SB), RODATA, $0x30
// EX0
DATA ·constants<>+0x00(SB)/8, $0x0006050403020100
DATA ·constants<>+0x08(SB)/8, $0x1016151413121110
// EX1
DATA ·constants<>+0x10(SB)/8, $0x060c0b0a09080706
DATA ·constants<>+0x18(SB)/8, $0x161c1b1a19181716
// EX2
DATA ·constants<>+0x20(SB)/8, $0x0d0d0d0d0d0f0e0d
DATA ·constants<>+0x28(SB)/8, $0x1d1d1d1d1d1f1e1d

// MULTIPLY multiplies each lane of f and g, partially reduced
// modulo 2¹³⁰ - 5. The result, h, consists of partial products
// in each lane that need to be reduced further to produce the
// final result.
//
//   h₁₃₀ = (f₁₃₀g₁₃₀) % 2¹³⁰ + (5f₁₃₀g₁₃₀) / 2¹³⁰
//
// Note that the multiplication by 5 of the high bits is
// achieved by precalculating the multiplication of four of the
// g coefficients by 5. These are g51-g54.
#define MULTIPLY(f0, f1, f2, f3, f4, g0, g1, g2, g3, g4, g51, g52, g53, g54, h0, h1, h2, h3, h4) \
	VMLOF  f0, g0, h0        \
	VMLOF  f0, g3, h3        \
	VMLOF  f0, g1, h1        \
	VMLOF  f0, g4, h4        \
	VMLOF  f0, g2, h2        \
	VMLOF  f1, g54, T_0      \
	VMLOF  f1, g2, T_3       \
	VMLOF  f1, g0, T_1       \
	VMLOF  f1, g3, T_4       \
	VMLOF  f1, g1, T_2       \
	VMALOF f2, g53, h0, h0   \
	VMALOF f2, g1, h3, h3    \
	VMALOF f2, g54, h1, h1   \
	VMALOF f2, g2, h4, h4    \
	VMALOF f2, g0, h2, h2    \
	VMALOF f3, g52, T_0, T_0 \
	VMALOF f3, g0, T_3, T_3  \
	VMALOF f3, g53, T_1, T_1 \
	VMALOF f3, g1, T_4, T_4  \
	VMALOF f3, g54, T_2, T_2 \
	VMALOF f4, g51, h0, h0   \
	VMALOF f4, g54, h3, h3   \
	VMALOF f4, g52, h1, h1   \
	VMALOF f4, g0, h4, h4    \
	VMALOF f4, g53, h2, h2   \
	VAG    T_0, h0, h0       \
	VAG    T_3, h3, h3       \
	VAG    T_1, h1, h1       \
	VAG    T_4, h4, h4       \
	VAG    T_2, h2, h2

// REDUCE performs the following carry operations in four
// stages, as specified in Bernstein & Schwabe:
//
//   1: h₂₆[0]->h₂₆[1] h₂₆[3]->h₂₆[4]
//   2: h₂₆[1]->h₂₆[2] h₂₆[4]->h₂₆[0]
//   3: h₂₆[0]->h₂₆[1] h₂₆[2]->h₂₆[3]
//   4: h₂₆[3]->h₂₆[4]
//
// The result is that all of the limbs are limited to 26-bits
// except for h₂₆[1] and h₂₆[4] which are limited to 27-bits.
//
// Note that although each limb is aligned at 26-bit intervals
// they may contain values that exceed 2²⁶ - 1, hence the need
// to carry the excess bits in each limb.
#define REDUCE(h0, h1, h2, h3, h4) \
	VESRLG $26, h0, T_0  \
	VESRLG $26, h3, T_1  \
	VN     MOD26, h0, h0 \
	VN     MOD26, h3, h3 \
	VAG    T_0, h1, h1   \
	VAG    T_1, h4, h4   \
	VESRLG $26, h1, T_2  \
	VESRLG $26, h4, T_3  \
	VN     MOD26, h1, h1 \
	VN     MOD26, h4, h4 \
	VESLG  $2, T_3, T_4  \
	VAG    T_3, T_4, T_4 \
	VAG    T_2, h2, h2   \
	VAG    T_4, h0, h0   \
	VESRLG $26, h2, T_0  \
	VESRLG $26, h0, T_1  \
	VN     MOD26, h2, h2 \
	VN     MOD26, h0, h0 \
	VAG    T_0, h3, h3   \
	VAG    T_1, h1, h1   \
	VESRLG $26, h3, T_2  \
	VN     MOD26, h3, h3 \
	VAG    T_2, h4, h4

// EXPAND splits the 128-bit little-endian values in0 and in1
// into 26-bit big-endian limbs and places the results into
// the first and second lane of d₂₆[0:4] respectively.
//
// The EX0, EX1 and EX2 constants are arrays of byte indices
// for permutation. The permutation both reverses the bytes
// in the input and ensures the bytes are copied into the
// destination limb ready to be shifted into their final
// position.
#define EXPAND(in0, in1, d0, d1, d2, d3, d4) \
	VPERM  in0, in1, EX0, d0 \
	VPERM  in0, in1, EX1, d2 \
	VPERM  in0, in1, EX2, d4 \
	VESRLG $26, d0, d1       \
	VESRLG $30, d2, d3       \
	VESRLG $4, d2, d2        \
	VN     MOD26, d0, d0     \ // [in0₂₆[0], in1₂₆[0]]
	VN     MOD26, d3, d3     \ // [in0₂₆[3], in1₂₆[3]]
	VN     MOD26, d1, d1     \ // [in0₂₆[1], in1₂₆[1]]
	VN     MOD24, d4, d4     \ // [in0₂₆[4], in1₂₆[4]]
	VN     MOD26, d2, d2     // [in0₂₆[2], in1₂₆[2]]

// func updateVX(state *macState, msg []byte)
TEXT ·updateVX(SB), NOSPLIT, $0
	MOVD state+0(FP), R1
	LMG  msg+8(FP), R2, R3 // R2=msg_base, R3=msg_len

	// load EX0, EX1 and EX2
	MOVD $·constants<>(SB), R5
	VLM  (R5), EX0, EX2

	// generate masks
	VGMG $(64-24), $63, MOD24 // [0x00ffffff, 0x00ffffff]
	VGMG $(64-26), $63, MOD26 // [0x03ffffff, 0x03ffffff]

	// load h (accumulator) and r (key) from state
	VZERO T_1               // [0, 0]
	VL    0(R1), T_0        // [h₆₄[0], h₆₄[1]]
	VLEG  $0, 16(R1), T_1   // [h₆₄[2], 0]
	VL    24(R1), T_2       // [r₆₄[0], r₆₄[1]]
	VPDI  $0, T_0, T_2, T_3 // [h₆₄[0], r₆₄[0]]
	VPDI  $5, T_0, T_2, T_4 // [h₆₄[1], r₆₄[1]]

	// unpack h and r into 26-bit limbs
	// note: h₆₄[2] may have the low 3 bits set, so h₂₆[4] is a 27-bit value
	VN     MOD26, T_3, H_0            // [h₂₆[0], r₂₆[0]]
	VZERO  H_1                        // [0, 0]
	VZERO  H_3                        // [0, 0]
	VGMG   $(64-12-14), $(63-12), T_0 // [0x03fff000, 0x03fff000] - 26-bit mask with low 12 bits masked out
	VESLG  $24, T_1, T_1              // [h₆₄[2]<<24, 0]
	VERIMG $-26&63, T_3, MOD26, H_1   // [h₂₆[1], r₂₆[1]]
	VESRLG $+52&63, T_3, H_2          // [h₂₆[2], r₂₆[2]] - low 12 bits only
	VERIMG $-14&63, T_4, MOD26, H_3   // [h₂₆[1], r₂₆[1]]
	VESRLG $40, T_4, H_4              // [h₂₆[4], r₂₆[4]] - low 24 bits only
	VERIMG $+12&63, T_4, T_0, H_2     // [h₂₆[2], r₂₆[2]] - complete
	VO     T_1, H_4, H_4              // [h₂₆[4], r₂₆[4]] - complete

	// replicate r across all 4 vector elements
	VREPF $3, H_0, R_0 // [r₂₆[0], r₂₆[0], r₂₆[0], r₂₆[0]]
	VREPF $3, H_1, R_1 // [r₂₆[1], r₂₆[1], r₂₆[1], r₂₆[1]]
	VREPF $3, H_2, R_2 // [r₂₆[2], r₂₆[2], r₂₆[2], r₂₆[2]]
	VREPF $3, H_3, R_3 // [r₂₆[3], r₂₆[3], r₂₆[3], r₂₆[3]]
	VREPF $3, H_4, R_4 // [r₂₆[4], r₂₆[4], r₂₆[4], r₂₆[4]]

	// zero out lane 1 of h
	VLEIG $1, $0, H_0 // [h₂₆[0], 0]
	VLEIG $1, $0, H_1 // [h₂₆[1], 0]
	VLEIG $1, $0, H_2 // [h₂₆[2], 0]
	VLEIG $1, $0, H_3 // [h₂₆[3], 0]
	VLEIG $1, $0, H_4 // [h₂₆[4], 0]

	// calculate 5r (ignore least significant limb)
	VREPIF $5, T_0
	VMLF   T_0, R_1, R5_1 // [5r₂₆[1], 5r₂₆[1], 5r₂₆[1], 5r₂₆[1]]
	VMLF   T_0, R_2, R5_2 // [5r₂₆[2], 5r₂₆[2], 5r₂₆[2], 5r₂₆[2]]
	VMLF   T_0, R_3, R5_3 // [5r₂₆[3], 5r₂₆[3], 5r₂₆[3], 5r₂₆[3]]
	VMLF   T_0, R_4, R5_4 // [5r₂₆[4], 5r₂₆[4], 5r₂₆[4], 5r₂₆[4]]

	// skip r² calculation if we are only calculating one block
	CMPBLE R3, $16, skip

	// calculate r²
	MULTIPLY(R_0, R_1, R_2, R_3, R_4, R_0, R_1, R_2, R_3, R_4, R5_1, R5_2, R5_3, R5_4, M_0, M_1, M_2, M_3, M_4)
	REDUCE(M_0, M_1, M_2, M_3, M_4)
	VGBM   $0x0f0f, T_0
	VERIMG $0, M_0, T_0, R_0 // [r₂₆[0], r²₂₆[0], r₂₆[0], r²₂₆[0]]
	VERIMG $0, M_1, T_0, R_1 // [r₂₆[1], r²₂₆[1], r₂₆[1], r²₂₆[1]]
	VERIMG $0, M_2, T_0, R_2 // [r₂₆[2], r²₂₆[2], r₂₆[2], r²₂₆[2]]
	VERIMG $0, M_3, T_0, R_3 // [r₂₆[3], r²₂₆[3], r₂₆[3], r²₂₆[3]]
	VERIMG $0, M_4, T_0, R_4 // [r₂₆[4], r²₂₆[4], r₂₆[4], r²₂₆[4]]

	// calculate 5r² (ignore least significant limb)
	VREPIF $5, T_0
	VMLF   T_0, R_1, R5_1 // [5r₂₆[1], 5r²₂₆[1], 5r₂₆[1], 5r²₂₆[1]]
	VMLF   T_0, R_2, R5_2 // [5r₂₆[2], 5r²₂₆[2], 5r₂₆[2], 5r²₂₆[2]]
	VMLF   T_0, R_3, R5_3 // [5r₂₆[3], 5r²₂₆[3], 5r₂₆[3], 5r²₂₆[3]]
	VMLF   T_0, R_4, R5_4 // [5r₂₆[4], 5r²₂₆[4], 5r₂₆[4], 5r²₂₆[4]]

loop:
	CMPBLE R3, $32, b2 // 2 or fewer blocks remaining, need to change key coefficients

	// load next 2 blocks from message
	VLM (R2), T_0, T_1

	// update message slice
	SUB  $32, R3
	MOVD $32(R2), R2

	// unpack message blocks into 26-bit big-endian limbs
	EXPAND(T_0, T_1, M_0, M_1, M_2, M_3, M_4)

	// add 2¹²⁸ to each message block value
	VLEIB $4, $1, M_4
	VLEIB $12, $1, M_4

multiply:
	// accumulate the incoming message
	VAG H_0, M_0, M_0
	VAG H_3, M_3, M_3
	VAG H_1, M_1, M_1
	VAG H_4, M_4, M_4
	VAG H_2, M_2, M_2

	// multiply the accumulator by the key coefficient
	MULTIPLY(M_0, M_1, M_2, M_3, M_4, R_0, R_1, R_2, R_3, R_4, R5_1, R5_2, R5_3, R5_4, H_0, H_1, H_2, H_3, H_4)

	// carry and partially reduce the partial products
	REDUCE(H_0, H_1, H_2, H_3, H_4)

	CMPBNE R3, $0, loop

finish:
	// sum lane 0 and lane 1 and put the result in lane 1
	VZERO  T_0
	VSUMQG H_0, T_0, H_0
	VSUMQG H_3, T_0, H_3
	VSUMQG H_1, T_0, H_1
	VSUMQG H_4, T_0, H_4
	VSUMQG H_2, T_0, H_2

	// reduce again after summation
	// TODO(mundaym): there might be a more efficient way to do this
	// now that we only have 1 active lane. For example, we could
	// simultaneously pack the values as we reduce them.
	REDUCE(H_0, H_1, H_2, H_3, H_4)

	// carry h[1] through to h[4] so that only h[4] can exceed 2²⁶ - 1
	// TODO(mundaym): in testing this final carry was unnecessary.
	// Needs a proof before it can be removed though.
	VESRLG $26, H_1, T_1
	VN     MOD26, H_1, H_1
	VAQ    T_1, H_2, H_2
	VESRLG $26, H_2, T_2
	VN     MOD26, H_2, H_2
	VAQ    T_2, H_3, H_3
	VESRLG $26, H_3, T_3
	VN     MOD26, H_3, H_3
	VAQ    T_3, H_4, H_4

	// h is now < 2(2¹³⁰ - 5)
	// Pack each lane in h₂₆[0:4] into h₁₂₈[0:1].
	VESLG $26, H_1, H_1
	VESLG $26, H_3, H_3
	VO    H_0, H_1, H_0
	VO    H_2, H_3, H_2
	VESLG $4, H_2, H_2
	VLEIB $7, $48, H_1
	VSLB  H_1, H_2, H_2
	VO    H_0, H_2, H_0
	VLEIB $7, $104, H_1
	VSLB  H_1, H_4, H_3
	VO    H_3, H_0, H_0
	VLEIB $7, $24, H_1
	VSRLB H_1, H_4, H_1

	// update state
	VSTEG $1, H_0, 0(R1)
	VSTEG $0, H_0, 8(R1)
	VSTEG $1, H_1, 16(R1)
	RET

b2:  // 2 or fewer blocks remaining
	CMPBLE R3, $16, b1

	// Load the 2 remaining blocks (17-32 bytes remaining).
	MOVD $-17(R3), R0    // index of final byte to load modulo 16
	VL   (R2), T_0       // load full 16 byte block
	VLL  R0, 16(R2), T_1 // load final (possibly partial) block and pad with zeros to 16 bytes

	// The Poly1305 algorithm requires that a 1 bit be appended to
	// each message block. If the final block is less than 16 bytes
	// long then it is easiest to insert the 1 before the message
	// block is split into 26-bit limbs. If, on the other hand, the
	// final message block is 16 bytes long then we append the 1 bit
	// after expansion as normal.
	MOVBZ  $1, R0
	MOVD   $-16(R3), R3   // index of byte in last block to insert 1 at (could be 16)
	CMPBEQ R3, $16, 2(PC) // skip the insertion if the final block is 16 bytes long
	VLVGB  R3, R0, T_1    // insert 1 into the byte at index R3

	// Split both blocks into 26-bit limbs in the appropriate lanes.
	EXPAND(T_0, T_1, M_0, M_1, M_2, M_3, M_4)

	// Append a 1 byte to the end of the second to last block.
	VLEIB $4, $1, M_4

	// Append a 1 byte to the end of the last block only if it is a
	// full 16 byte block.
	CMPBNE R3, $16, 2(PC)
	VLEIB  $12, $1, M_4

	// Finally, set up the coefficients for the final multiplication.
	// We have previously saved r and 5r in the 32-bit even indexes
	// of the R_[0-4] and R5_[1-4] coefficient registers.
	//
	// We want lane 0 to be multiplied by r² so that can be kept the
	// same. We want lane 1 to be multiplied by r so we need to move
	// the saved r value into the 32-bit odd index in lane 1 by
	// rotating the 64-bit lane by 32.
	VGBM   $0x00ff, T_0         // [0, 0xffffffffffffffff] - mask lane 1 only
	VERIMG $32, R_0, T_0, R_0   // [_,  r²₂₆[0], _,  r₂₆[0]]
	VERIMG $32, R_1, T_0, R_1   // [_,  r²₂₆[1], _,  r₂₆[1]]
	VERIMG $32, R_2, T_0, R_2   // [_,  r²₂₆[2], _,  r₂₆[2]]
	VERIMG $32, R_3, T_0, R_3   // [_,  r²₂₆[3], _,  r₂₆[3]]
	VERIMG $32, R_4, T_0, R_4   // [_,  r²₂₆[4], _,  r₂₆[4]]
	VERIMG $32, R5_1, T_0, R5_1 // [_, 5r²₂₆[1], _, 5r₂₆[1]]
	VERIMG $32, R5_2, T_0, R5_2 // [_, 5r²₂₆[2], _, 5r₂₆[2]]
	VERIMG $32, R5_3, T_0, R5_3 // [_, 5r²₂₆[3], _, 5r₂₆[3]]
	VERIMG $32, R5_4, T_0, R5_4 // [_, 5r²₂₆[4], _, 5r₂₆[4]]

	MOVD $0, R3
	BR   multiply

skip:
	CMPBEQ R3, $0, finish

b1:  // 1 block remaining

	// Load the final block (1-16 bytes). This will be placed into
	// lane 0.
	MOVD $-1(R3), R0
	VLL  R0, (R2), T_0 // pad to 16 bytes with zeros

	// The Poly1305 algorithm requires that a 1 bit be appended to
	// each message block. If the final block is less than 16 bytes
	// long then it is easiest to insert the 1 before the message
	// block is split into 26-bit limbs. If, on the other hand, the
	// final message block is 16 bytes long then we append the 1 bit
	// after expansion as normal.
	MOVBZ  $1, R0
	CMPBEQ R3, $16, 2(PC)
	VLVGB  R3, R0, T_0

	// Set the message block in lane 1 to the value 0 so that it
	// can be accumulated without affecting the final result.
	VZERO T_1

	// Split the final message block into 26-bit limbs in lane 0.
	// Lane 1 will be contain 0.
	EXPAND(T_0, T_1, M_0, M_1, M_2, M_3, M_4)

	// Append a 1 byte to the end of the last block only if it is a
	// full 16 byte block.
	CMPBNE R3, $16, 2(PC)
	VLEIB  $4, $1, M_4

	// We have previously saved r and 5r in the 32-bit even indexes
	// of the R_[0-4] and R5_[1-4] coefficient registers.
	//
	// We want lane 0 to be multiplied by r so we need to move the
	// saved r value into the 32-bit odd index in lane 0. We want
	// lane 1 to be set to the value 1. This makes multiplication
	// a no-op. We do this by setting lane 1 in every register to 0
	// and then just setting the 32-bit index 3 in R_0 to 1.
	VZERO T_0
	MOVD  $0, R0
	MOVD  $0x10111213, R12
	VLVGP R12, R0, T_1         // [_, 0x10111213, _, 0x00000000]
	VPERM T_0, R_0, T_1, R_0   // [_,  r₂₆[0], _, 0]
	VPERM T_0, R_1, T_1, R_1   // [_,  r₂₆[1], _, 0]
	VPERM T_0, R_2, T_1, R_2   // [_,  r₂₆[2], _, 0]
	VPERM T_0, R_3, T_1, R_3   // [_,  r₂₆[3], _, 0]
	VPERM T_0, R_4, T_1, R_4   // [_,  r₂₆[4], _, 0]
	VPERM T_0, R5_1, T_1, R5_1 // [_, 5r₂₆[1], _, 0]
	VPERM T_0, R5_2, T_1, R5_2 // [_, 5r₂₆[2], _, 0]
	VPERM T_0, R5_3, T_1, R5_3 // [_, 5r₂₆[3], _, 0]
	VPERM T_0, R5_4, T_1, R5_4 // [_, 5r₂₆[4], _, 0]

	// Set the value of lane 1 to be 1.
	VLEIF $3, $1, R_0 // [_,  r₂₆[0], _, 1]

	MOVD $0, R3
	BR   multiply
07070100000D06000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/pbkdf2 07070100000D07000081A4000000000000000000000001645E367C000009B3000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go   // Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

/*
Package pbkdf2 implements the key derivation function PBKDF2 as defined in RFC
2898 / PKCS #5 v2.0.

A key derivation function is useful when encrypting data based on a password
or any other not-fully-random data. It uses a pseudorandom function to derive
a secure encryption key based on the password.

While v2.0 of the standard defines only one pseudorandom function to use,
HMAC-SHA1, the drafted v2.1 specification allows use of all five FIPS Approved
Hash Functions SHA-1, SHA-224, SHA-256, SHA-384 and SHA-512 for HMAC. To
choose, you can pass the `New` functions from the different SHA packages to
pbkdf2.Key.
*/
package pbkdf2 // import "golang.org/x/crypto/pbkdf2"

import (
	"crypto/hmac"
	"hash"
)

// Key derives a key from the password, salt and iteration count, returning a
// []byte of length keylen that can be used as cryptographic key. The key is
// derived based on the method described as PBKDF2 with the HMAC variant using
// the supplied hash function.
//
// For example, to use a HMAC-SHA-1 based PBKDF2 key derivation function, you
// can get a derived key for e.g. AES-256 (which needs a 32-byte key) by
// doing:
//
//	dk := pbkdf2.Key([]byte("some password"), salt, 4096, 32, sha1.New)
//
// Remember to get a good random salt. At least 8 bytes is recommended by the
// RFC.
//
// Using a higher iteration count will increase the cost of an exhaustive
// search but will also make derivation proportionally slower.
func Key(password, salt []byte, iter, keyLen int, h func() hash.Hash) []byte {
	prf := hmac.New(h, password)
	hashLen := prf.Size()
	numBlocks := (keyLen + hashLen - 1) / hashLen

	var buf [4]byte
	dk := make([]byte, 0, numBlocks*hashLen)
	U := make([]byte, hashLen)
	for block := 1; block <= numBlocks; block++ {
		// N.B.: || means concatenation, ^ means XOR
		// for each block T_i = U_1 ^ U_2 ^ ... ^ U_iter
		// U_1 = PRF(password, salt || uint(i))
		prf.Reset()
		prf.Write(salt)
		buf[0] = byte(block >> 24)
		buf[1] = byte(block >> 16)
		buf[2] = byte(block >> 8)
		buf[3] = byte(block)
		prf.Write(buf[:4])
		dk = prf.Sum(dk)
		T := dk[len(dk)-hashLen:]
		copy(U, T)

		// U_n = PRF(password, U_(n-1))
		for n := 2; n <= iter; n++ {
			prf.Reset()
			prf.Write(U)
			U = U[:0]
			U = prf.Sum(U)
			for x := range U {
				T[x] ^= U[x]
			}
		}
	}
	return dk[:keyLen]
}
 07070100000D08000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/scrypt 07070100000D09000081A4000000000000000000000001645E367C00001689000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/scrypt/scrypt.go   // Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package scrypt implements the scrypt key derivation function as defined in
// Colin Percival's paper "Stronger Key Derivation via Sequential Memory-Hard
// Functions" (https://www.tarsnap.com/scrypt/scrypt.pdf).
package scrypt // import "golang.org/x/crypto/scrypt"

import (
	"crypto/sha256"
	"encoding/binary"
	"errors"
	"math/bits"

	"golang.org/x/crypto/pbkdf2"
)

const maxInt = int(^uint(0) >> 1)

// blockCopy copies n numbers from src into dst.
func blockCopy(dst, src []uint32, n int) {
	copy(dst, src[:n])
}

// blockXOR XORs numbers from dst with n numbers from src.
func blockXOR(dst, src []uint32, n int) {
	for i, v := range src[:n] {
		dst[i] ^= v
	}
}

// salsaXOR applies Salsa20/8 to the XOR of 16 numbers from tmp and in,
// and puts the result into both tmp and out.
func salsaXOR(tmp *[16]uint32, in, out []uint32) {
	w0 := tmp[0] ^ in[0]
	w1 := tmp[1] ^ in[1]
	w2 := tmp[2] ^ in[2]
	w3 := tmp[3] ^ in[3]
	w4 := tmp[4] ^ in[4]
	w5 := tmp[5] ^ in[5]
	w6 := tmp[6] ^ in[6]
	w7 := tmp[7] ^ in[7]
	w8 := tmp[8] ^ in[8]
	w9 := tmp[9] ^ in[9]
	w10 := tmp[10] ^ in[10]
	w11 := tmp[11] ^ in[11]
	w12 := tmp[12] ^ in[12]
	w13 := tmp[13] ^ in[13]
	w14 := tmp[14] ^ in[14]
	w15 := tmp[15] ^ in[15]

	x0, x1, x2, x3, x4, x5, x6, x7, x8 := w0, w1, w2, w3, w4, w5, w6, w7, w8
	x9, x10, x11, x12, x13, x14, x15 := w9, w10, w11, w12, w13, w14, w15

	for i := 0; i < 8; i += 2 {
		x4 ^= bits.RotateLeft32(x0+x12, 7)
		x8 ^= bits.RotateLeft32(x4+x0, 9)
		x12 ^= bits.RotateLeft32(x8+x4, 13)
		x0 ^= bits.RotateLeft32(x12+x8, 18)

		x9 ^= bits.RotateLeft32(x5+x1, 7)
		x13 ^= bits.RotateLeft32(x9+x5, 9)
		x1 ^= bits.RotateLeft32(x13+x9, 13)
		x5 ^= bits.RotateLeft32(x1+x13, 18)

		x14 ^= bits.RotateLeft32(x10+x6, 7)
		x2 ^= bits.RotateLeft32(x14+x10, 9)
		x6 ^= bits.RotateLeft32(x2+x14, 13)
		x10 ^= bits.RotateLeft32(x6+x2, 18)

		x3 ^= bits.RotateLeft32(x15+x11, 7)
		x7 ^= bits.RotateLeft32(x3+x15, 9)
		x11 ^= bits.RotateLeft32(x7+x3, 13)
		x15 ^= bits.RotateLeft32(x11+x7, 18)

		x1 ^= bits.RotateLeft32(x0+x3, 7)
		x2 ^= bits.RotateLeft32(x1+x0, 9)
		x3 ^= bits.RotateLeft32(x2+x1, 13)
		x0 ^= bits.RotateLeft32(x3+x2, 18)

		x6 ^= bits.RotateLeft32(x5+x4, 7)
		x7 ^= bits.RotateLeft32(x6+x5, 9)
		x4 ^= bits.RotateLeft32(x7+x6, 13)
		x5 ^= bits.RotateLeft32(x4+x7, 18)

		x11 ^= bits.RotateLeft32(x10+x9, 7)
		x8 ^= bits.RotateLeft32(x11+x10, 9)
		x9 ^= bits.RotateLeft32(x8+x11, 13)
		x10 ^= bits.RotateLeft32(x9+x8, 18)

		x12 ^= bits.RotateLeft32(x15+x14, 7)
		x13 ^= bits.RotateLeft32(x12+x15, 9)
		x14 ^= bits.RotateLeft32(x13+x12, 13)
		x15 ^= bits.RotateLeft32(x14+x13, 18)
	}
	x0 += w0
	x1 += w1
	x2 += w2
	x3 += w3
	x4 += w4
	x5 += w5
	x6 += w6
	x7 += w7
	x8 += w8
	x9 += w9
	x10 += w10
	x11 += w11
	x12 += w12
	x13 += w13
	x14 += w14
	x15 += w15

	out[0], tmp[0] = x0, x0
	out[1], tmp[1] = x1, x1
	out[2], tmp[2] = x2, x2
	out[3], tmp[3] = x3, x3
	out[4], tmp[4] = x4, x4
	out[5], tmp[5] = x5, x5
	out[6], tmp[6] = x6, x6
	out[7], tmp[7] = x7, x7
	out[8], tmp[8] = x8, x8
	out[9], tmp[9] = x9, x9
	out[10], tmp[10] = x10, x10
	out[11], tmp[11] = x11, x11
	out[12], tmp[12] = x12, x12
	out[13], tmp[13] = x13, x13
	out[14], tmp[14] = x14, x14
	out[15], tmp[15] = x15, x15
}

func blockMix(tmp *[16]uint32, in, out []uint32, r int) {
	blockCopy(tmp[:], in[(2*r-1)*16:], 16)
	for i := 0; i < 2*r; i += 2 {
		salsaXOR(tmp, in[i*16:], out[i*8:])
		salsaXOR(tmp, in[i*16+16:], out[i*8+r*16:])
	}
}

func integer(b []uint32, r int) uint64 {
	j := (2*r - 1) * 16
	return uint64(b[j]) | uint64(b[j+1])<<32
}

func smix(b []byte, r, N int, v, xy []uint32) {
	var tmp [16]uint32
	R := 32 * r
	x := xy
	y := xy[R:]

	j := 0
	for i := 0; i < R; i++ {
		x[i] = binary.LittleEndian.Uint32(b[j:])
		j += 4
	}
	for i := 0; i < N; i += 2 {
		blockCopy(v[i*R:], x, R)
		blockMix(&tmp, x, y, r)

		blockCopy(v[(i+1)*R:], y, R)
		blockMix(&tmp, y, x, r)
	}
	for i := 0; i < N; i += 2 {
		j := int(integer(x, r) & uint64(N-1))
		blockXOR(x, v[j*R:], R)
		blockMix(&tmp, x, y, r)

		j = int(integer(y, r) & uint64(N-1))
		blockXOR(y, v[j*R:], R)
		blockMix(&tmp, y, x, r)
	}
	j = 0
	for _, v := range x[:R] {
		binary.LittleEndian.PutUint32(b[j:], v)
		j += 4
	}
}

// Key derives a key from the password, salt, and cost parameters, returning
// a byte slice of length keyLen that can be used as cryptographic key.
//
// N is a CPU/memory cost parameter, which must be a power of two greater than 1.
// r and p must satisfy r * p < 2³⁰. If the parameters do not satisfy the
// limits, the function returns a nil byte slice and an error.
//
// For example, you can get a derived key for e.g. AES-256 (which needs a
// 32-byte key) by doing:
//
//	dk, err := scrypt.Key([]byte("some password"), salt, 32768, 8, 1, 32)
//
// The recommended parameters for interactive logins as of 2017 are N=32768, r=8
// and p=1. The parameters N, r, and p should be increased as memory latency and
// CPU parallelism increases; consider setting N to the highest power of 2 you
// can derive within 100 milliseconds. Remember to get a good random salt.
func Key(password, salt []byte, N, r, p, keyLen int) ([]byte, error) {
	if N <= 1 || N&(N-1) != 0 {
		return nil, errors.New("scrypt: N must be > 1 and a power of 2")
	}
	if uint64(r)*uint64(p) >= 1<<30 || r > maxInt/128/p || r > maxInt/256 || N > maxInt/128/r {
		return nil, errors.New("scrypt: parameters are too large")
	}

	xy := make([]uint32, 64*r)
	v := make([]uint32, 32*N*r)
	b := pbkdf2.Key(password, salt, 1, p*128*r, sha256.New)

	for i := 0; i < p; i++ {
		smix(b[i*128*r:], r, N, v, xy)
	}

	return pbkdf2.Key(password, b, 1, keyLen, sha256.New), nil
}
   07070100000D0A000041ED000000000000000000000005645E367C00000000000000000000000000000000000000000000003300000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh    07070100000D0B000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/agent  07070100000D0C000081A4000000000000000000000001645E367C00005BBF000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/agent/client.go    // Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package agent implements the ssh-agent protocol, and provides both
// a client and a server. The client can talk to a standard ssh-agent
// that uses UNIX sockets, and one could implement an alternative
// ssh-agent process using the sample server.
//
// References:
//
//	[PROTOCOL.agent]: https://tools.ietf.org/html/draft-miller-ssh-agent-00
package agent // import "golang.org/x/crypto/ssh/agent"

import (
	"bytes"
	"crypto/dsa"
	"crypto/ecdsa"
	"crypto/elliptic"
	"crypto/rsa"
	"encoding/base64"
	"encoding/binary"
	"errors"
	"fmt"
	"io"
	"math/big"
	"sync"

	"golang.org/x/crypto/ed25519"
	"golang.org/x/crypto/ssh"
)

// SignatureFlags represent additional flags that can be passed to the signature
// requests an defined in [PROTOCOL.agent] section 4.5.1.
type SignatureFlags uint32

// SignatureFlag values as defined in [PROTOCOL.agent] section 5.3.
const (
	SignatureFlagReserved SignatureFlags = 1 << iota
	SignatureFlagRsaSha256
	SignatureFlagRsaSha512
)

// Agent represents the capabilities of an ssh-agent.
type Agent interface {
	// List returns the identities known to the agent.
	List() ([]*Key, error)

	// Sign has the agent sign the data using a protocol 2 key as defined
	// in [PROTOCOL.agent] section 2.6.2.
	Sign(key ssh.PublicKey, data []byte) (*ssh.Signature, error)

	// Add adds a private key to the agent.
	Add(key AddedKey) error

	// Remove removes all identities with the given public key.
	Remove(key ssh.PublicKey) error

	// RemoveAll removes all identities.
	RemoveAll() error

	// Lock locks the agent. Sign and Remove will fail, and List will empty an empty list.
	Lock(passphrase []byte) error

	// Unlock undoes the effect of Lock
	Unlock(passphrase []byte) error

	// Signers returns signers for all the known keys.
	Signers() ([]ssh.Signer, error)
}

type ExtendedAgent interface {
	Agent

	// SignWithFlags signs like Sign, but allows for additional flags to be sent/received
	SignWithFlags(key ssh.PublicKey, data []byte, flags SignatureFlags) (*ssh.Signature, error)

	// Extension processes a custom extension request. Standard-compliant agents are not
	// required to support any extensions, but this method allows agents to implement
	// vendor-specific methods or add experimental features. See [PROTOCOL.agent] section 4.7.
	// If agent extensions are unsupported entirely this method MUST return an
	// ErrExtensionUnsupported error. Similarly, if just the specific extensionType in
	// the request is unsupported by the agent then ErrExtensionUnsupported MUST be
	// returned.
	//
	// In the case of success, since [PROTOCOL.agent] section 4.7 specifies that the contents
	// of the response are unspecified (including the type of the message), the complete
	// response will be returned as a []byte slice, including the "type" byte of the message.
	Extension(extensionType string, contents []byte) ([]byte, error)
}

// ConstraintExtension describes an optional constraint defined by users.
type ConstraintExtension struct {
	// ExtensionName consist of a UTF-8 string suffixed by the
	// implementation domain following the naming scheme defined
	// in Section 4.2 of RFC 4251, e.g.  "foo@example.com".
	ExtensionName string
	// ExtensionDetails contains the actual content of the extended
	// constraint.
	ExtensionDetails []byte
}

// AddedKey describes an SSH key to be added to an Agent.
type AddedKey struct {
	// PrivateKey must be a *rsa.PrivateKey, *dsa.PrivateKey,
	// ed25519.PrivateKey or *ecdsa.PrivateKey, which will be inserted into the
	// agent.
	PrivateKey interface{}
	// Certificate, if not nil, is communicated to the agent and will be
	// stored with the key.
	Certificate *ssh.Certificate
	// Comment is an optional, free-form string.
	Comment string
	// LifetimeSecs, if not zero, is the number of seconds that the
	// agent will store the key for.
	LifetimeSecs uint32
	// ConfirmBeforeUse, if true, requests that the agent confirm with the
	// user before each use of this key.
	ConfirmBeforeUse bool
	// ConstraintExtensions are the experimental or private-use constraints
	// defined by users.
	ConstraintExtensions []ConstraintExtension
}

// See [PROTOCOL.agent], section 3.
const (
	agentRequestV1Identities   = 1
	agentRemoveAllV1Identities = 9

	// 3.2 Requests from client to agent for protocol 2 key operations
	agentAddIdentity         = 17
	agentRemoveIdentity      = 18
	agentRemoveAllIdentities = 19
	agentAddIDConstrained    = 25

	// 3.3 Key-type independent requests from client to agent
	agentAddSmartcardKey            = 20
	agentRemoveSmartcardKey         = 21
	agentLock                       = 22
	agentUnlock                     = 23
	agentAddSmartcardKeyConstrained = 26

	// 3.7 Key constraint identifiers
	agentConstrainLifetime  = 1
	agentConstrainConfirm   = 2
	agentConstrainExtension = 3
)

// maxAgentResponseBytes is the maximum agent reply size that is accepted. This
// is a sanity check, not a limit in the spec.
const maxAgentResponseBytes = 16 << 20

// Agent messages:
// These structures mirror the wire format of the corresponding ssh agent
// messages found in [PROTOCOL.agent].

// 3.4 Generic replies from agent to client
const agentFailure = 5

type failureAgentMsg struct{}

const agentSuccess = 6

type successAgentMsg struct{}

// See [PROTOCOL.agent], section 2.5.2.
const agentRequestIdentities = 11

type requestIdentitiesAgentMsg struct{}

// See [PROTOCOL.agent], section 2.5.2.
const agentIdentitiesAnswer = 12

type identitiesAnswerAgentMsg struct {
	NumKeys uint32 `sshtype:"12"`
	Keys    []byte `ssh:"rest"`
}

// See [PROTOCOL.agent], section 2.6.2.
const agentSignRequest = 13

type signRequestAgentMsg struct {
	KeyBlob []byte `sshtype:"13"`
	Data    []byte
	Flags   uint32
}

// See [PROTOCOL.agent], section 2.6.2.

// 3.6 Replies from agent to client for protocol 2 key operations
const agentSignResponse = 14

type signResponseAgentMsg struct {
	SigBlob []byte `sshtype:"14"`
}

type publicKey struct {
	Format string
	Rest   []byte `ssh:"rest"`
}

// 3.7 Key constraint identifiers
type constrainLifetimeAgentMsg struct {
	LifetimeSecs uint32 `sshtype:"1"`
}

type constrainExtensionAgentMsg struct {
	ExtensionName    string `sshtype:"3"`
	ExtensionDetails []byte

	// Rest is a field used for parsing, not part of message
	Rest []byte `ssh:"rest"`
}

// See [PROTOCOL.agent], section 4.7
const agentExtension = 27
const agentExtensionFailure = 28

// ErrExtensionUnsupported indicates that an extension defined in
// [PROTOCOL.agent] section 4.7 is unsupported by the agent. Specifically this
// error indicates that the agent returned a standard SSH_AGENT_FAILURE message
// as the result of a SSH_AGENTC_EXTENSION request. Note that the protocol
// specification (and therefore this error) does not distinguish between a
// specific extension being unsupported and extensions being unsupported entirely.
var ErrExtensionUnsupported = errors.New("agent: extension unsupported")

type extensionAgentMsg struct {
	ExtensionType string `sshtype:"27"`
	// NOTE: this matches OpenSSH's PROTOCOL.agent, not the IETF draft [PROTOCOL.agent],
	// so that it matches what OpenSSH actually implements in the wild.
	Contents []byte `ssh:"rest"`
}

// Key represents a protocol 2 public key as defined in
// [PROTOCOL.agent], section 2.5.2.
type Key struct {
	Format  string
	Blob    []byte
	Comment string
}

func clientErr(err error) error {
	return fmt.Errorf("agent: client error: %v", err)
}

// String returns the storage form of an agent key with the format, base64
// encoded serialized key, and the comment if it is not empty.
func (k *Key) String() string {
	s := string(k.Format) + " " + base64.StdEncoding.EncodeToString(k.Blob)

	if k.Comment != "" {
		s += " " + k.Comment
	}

	return s
}

// Type returns the public key type.
func (k *Key) Type() string {
	return k.Format
}

// Marshal returns key blob to satisfy the ssh.PublicKey interface.
func (k *Key) Marshal() []byte {
	return k.Blob
}

// Verify satisfies the ssh.PublicKey interface.
func (k *Key) Verify(data []byte, sig *ssh.Signature) error {
	pubKey, err := ssh.ParsePublicKey(k.Blob)
	if err != nil {
		return fmt.Errorf("agent: bad public key: %v", err)
	}
	return pubKey.Verify(data, sig)
}

type wireKey struct {
	Format string
	Rest   []byte `ssh:"rest"`
}

func parseKey(in []byte) (out *Key, rest []byte, err error) {
	var record struct {
		Blob    []byte
		Comment string
		Rest    []byte `ssh:"rest"`
	}

	if err := ssh.Unmarshal(in, &record); err != nil {
		return nil, nil, err
	}

	var wk wireKey
	if err := ssh.Unmarshal(record.Blob, &wk); err != nil {
		return nil, nil, err
	}

	return &Key{
		Format:  wk.Format,
		Blob:    record.Blob,
		Comment: record.Comment,
	}, record.Rest, nil
}

// client is a client for an ssh-agent process.
type client struct {
	// conn is typically a *net.UnixConn
	conn io.ReadWriter
	// mu is used to prevent concurrent access to the agent
	mu sync.Mutex
}

// NewClient returns an Agent that talks to an ssh-agent process over
// the given connection.
func NewClient(rw io.ReadWriter) ExtendedAgent {
	return &client{conn: rw}
}

// call sends an RPC to the agent. On success, the reply is
// unmarshaled into reply and replyType is set to the first byte of
// the reply, which contains the type of the message.
func (c *client) call(req []byte) (reply interface{}, err error) {
	buf, err := c.callRaw(req)
	if err != nil {
		return nil, err
	}
	reply, err = unmarshal(buf)
	if err != nil {
		return nil, clientErr(err)
	}
	return reply, nil
}

// callRaw sends an RPC to the agent. On success, the raw
// bytes of the response are returned; no unmarshalling is
// performed on the response.
func (c *client) callRaw(req []byte) (reply []byte, err error) {
	c.mu.Lock()
	defer c.mu.Unlock()

	msg := make([]byte, 4+len(req))
	binary.BigEndian.PutUint32(msg, uint32(len(req)))
	copy(msg[4:], req)
	if _, err = c.conn.Write(msg); err != nil {
		return nil, clientErr(err)
	}

	var respSizeBuf [4]byte
	if _, err = io.ReadFull(c.conn, respSizeBuf[:]); err != nil {
		return nil, clientErr(err)
	}
	respSize := binary.BigEndian.Uint32(respSizeBuf[:])
	if respSize > maxAgentResponseBytes {
		return nil, clientErr(errors.New("response too large"))
	}

	buf := make([]byte, respSize)
	if _, err = io.ReadFull(c.conn, buf); err != nil {
		return nil, clientErr(err)
	}
	return buf, nil
}

func (c *client) simpleCall(req []byte) error {
	resp, err := c.call(req)
	if err != nil {
		return err
	}
	if _, ok := resp.(*successAgentMsg); ok {
		return nil
	}
	return errors.New("agent: failure")
}

func (c *client) RemoveAll() error {
	return c.simpleCall([]byte{agentRemoveAllIdentities})
}

func (c *client) Remove(key ssh.PublicKey) error {
	req := ssh.Marshal(&agentRemoveIdentityMsg{
		KeyBlob: key.Marshal(),
	})
	return c.simpleCall(req)
}

func (c *client) Lock(passphrase []byte) error {
	req := ssh.Marshal(&agentLockMsg{
		Passphrase: passphrase,
	})
	return c.simpleCall(req)
}

func (c *client) Unlock(passphrase []byte) error {
	req := ssh.Marshal(&agentUnlockMsg{
		Passphrase: passphrase,
	})
	return c.simpleCall(req)
}

// List returns the identities known to the agent.
func (c *client) List() ([]*Key, error) {
	// see [PROTOCOL.agent] section 2.5.2.
	req := []byte{agentRequestIdentities}

	msg, err := c.call(req)
	if err != nil {
		return nil, err
	}

	switch msg := msg.(type) {
	case *identitiesAnswerAgentMsg:
		if msg.NumKeys > maxAgentResponseBytes/8 {
			return nil, errors.New("agent: too many keys in agent reply")
		}
		keys := make([]*Key, msg.NumKeys)
		data := msg.Keys
		for i := uint32(0); i < msg.NumKeys; i++ {
			var key *Key
			var err error
			if key, data, err = parseKey(data); err != nil {
				return nil, err
			}
			keys[i] = key
		}
		return keys, nil
	case *failureAgentMsg:
		return nil, errors.New("agent: failed to list keys")
	}
	panic("unreachable")
}

// Sign has the agent sign the data using a protocol 2 key as defined
// in [PROTOCOL.agent] section 2.6.2.
func (c *client) Sign(key ssh.PublicKey, data []byte) (*ssh.Signature, error) {
	return c.SignWithFlags(key, data, 0)
}

func (c *client) SignWithFlags(key ssh.PublicKey, data []byte, flags SignatureFlags) (*ssh.Signature, error) {
	req := ssh.Marshal(signRequestAgentMsg{
		KeyBlob: key.Marshal(),
		Data:    data,
		Flags:   uint32(flags),
	})

	msg, err := c.call(req)
	if err != nil {
		return nil, err
	}

	switch msg := msg.(type) {
	case *signResponseAgentMsg:
		var sig ssh.Signature
		if err := ssh.Unmarshal(msg.SigBlob, &sig); err != nil {
			return nil, err
		}

		return &sig, nil
	case *failureAgentMsg:
		return nil, errors.New("agent: failed to sign challenge")
	}
	panic("unreachable")
}

// unmarshal parses an agent message in packet, returning the parsed
// form and the message type of packet.
func unmarshal(packet []byte) (interface{}, error) {
	if len(packet) < 1 {
		return nil, errors.New("agent: empty packet")
	}
	var msg interface{}
	switch packet[0] {
	case agentFailure:
		return new(failureAgentMsg), nil
	case agentSuccess:
		return new(successAgentMsg), nil
	case agentIdentitiesAnswer:
		msg = new(identitiesAnswerAgentMsg)
	case agentSignResponse:
		msg = new(signResponseAgentMsg)
	case agentV1IdentitiesAnswer:
		msg = new(agentV1IdentityMsg)
	default:
		return nil, fmt.Errorf("agent: unknown type tag %d", packet[0])
	}
	if err := ssh.Unmarshal(packet, msg); err != nil {
		return nil, err
	}
	return msg, nil
}

type rsaKeyMsg struct {
	Type        string `sshtype:"17|25"`
	N           *big.Int
	E           *big.Int
	D           *big.Int
	Iqmp        *big.Int // IQMP = Inverse Q Mod P
	P           *big.Int
	Q           *big.Int
	Comments    string
	Constraints []byte `ssh:"rest"`
}

type dsaKeyMsg struct {
	Type        string `sshtype:"17|25"`
	P           *big.Int
	Q           *big.Int
	G           *big.Int
	Y           *big.Int
	X           *big.Int
	Comments    string
	Constraints []byte `ssh:"rest"`
}

type ecdsaKeyMsg struct {
	Type        string `sshtype:"17|25"`
	Curve       string
	KeyBytes    []byte
	D           *big.Int
	Comments    string
	Constraints []byte `ssh:"rest"`
}

type ed25519KeyMsg struct {
	Type        string `sshtype:"17|25"`
	Pub         []byte
	Priv        []byte
	Comments    string
	Constraints []byte `ssh:"rest"`
}

// Insert adds a private key to the agent.
func (c *client) insertKey(s interface{}, comment string, constraints []byte) error {
	var req []byte
	switch k := s.(type) {
	case *rsa.PrivateKey:
		if len(k.Primes) != 2 {
			return fmt.Errorf("agent: unsupported RSA key with %d primes", len(k.Primes))
		}
		k.Precompute()
		req = ssh.Marshal(rsaKeyMsg{
			Type:        ssh.KeyAlgoRSA,
			N:           k.N,
			E:           big.NewInt(int64(k.E)),
			D:           k.D,
			Iqmp:        k.Precomputed.Qinv,
			P:           k.Primes[0],
			Q:           k.Primes[1],
			Comments:    comment,
			Constraints: constraints,
		})
	case *dsa.PrivateKey:
		req = ssh.Marshal(dsaKeyMsg{
			Type:        ssh.KeyAlgoDSA,
			P:           k.P,
			Q:           k.Q,
			G:           k.G,
			Y:           k.Y,
			X:           k.X,
			Comments:    comment,
			Constraints: constraints,
		})
	case *ecdsa.PrivateKey:
		nistID := fmt.Sprintf("nistp%d", k.Params().BitSize)
		req = ssh.Marshal(ecdsaKeyMsg{
			Type:        "ecdsa-sha2-" + nistID,
			Curve:       nistID,
			KeyBytes:    elliptic.Marshal(k.Curve, k.X, k.Y),
			D:           k.D,
			Comments:    comment,
			Constraints: constraints,
		})
	case ed25519.PrivateKey:
		req = ssh.Marshal(ed25519KeyMsg{
			Type:        ssh.KeyAlgoED25519,
			Pub:         []byte(k)[32:],
			Priv:        []byte(k),
			Comments:    comment,
			Constraints: constraints,
		})
	// This function originally supported only *ed25519.PrivateKey, however the
	// general idiom is to pass ed25519.PrivateKey by value, not by pointer.
	// We still support the pointer variant for backwards compatibility.
	case *ed25519.PrivateKey:
		req = ssh.Marshal(ed25519KeyMsg{
			Type:        ssh.KeyAlgoED25519,
			Pub:         []byte(*k)[32:],
			Priv:        []byte(*k),
			Comments:    comment,
			Constraints: constraints,
		})
	default:
		return fmt.Errorf("agent: unsupported key type %T", s)
	}

	// if constraints are present then the message type needs to be changed.
	if len(constraints) != 0 {
		req[0] = agentAddIDConstrained
	}

	resp, err := c.call(req)
	if err != nil {
		return err
	}
	if _, ok := resp.(*successAgentMsg); ok {
		return nil
	}
	return errors.New("agent: failure")
}

type rsaCertMsg struct {
	Type        string `sshtype:"17|25"`
	CertBytes   []byte
	D           *big.Int
	Iqmp        *big.Int // IQMP = Inverse Q Mod P
	P           *big.Int
	Q           *big.Int
	Comments    string
	Constraints []byte `ssh:"rest"`
}

type dsaCertMsg struct {
	Type        string `sshtype:"17|25"`
	CertBytes   []byte
	X           *big.Int
	Comments    string
	Constraints []byte `ssh:"rest"`
}

type ecdsaCertMsg struct {
	Type        string `sshtype:"17|25"`
	CertBytes   []byte
	D           *big.Int
	Comments    string
	Constraints []byte `ssh:"rest"`
}

type ed25519CertMsg struct {
	Type        string `sshtype:"17|25"`
	CertBytes   []byte
	Pub         []byte
	Priv        []byte
	Comments    string
	Constraints []byte `ssh:"rest"`
}

// Add adds a private key to the agent. If a certificate is given,
// that certificate is added instead as public key.
func (c *client) Add(key AddedKey) error {
	var constraints []byte

	if secs := key.LifetimeSecs; secs != 0 {
		constraints = append(constraints, ssh.Marshal(constrainLifetimeAgentMsg{secs})...)
	}

	if key.ConfirmBeforeUse {
		constraints = append(constraints, agentConstrainConfirm)
	}

	cert := key.Certificate
	if cert == nil {
		return c.insertKey(key.PrivateKey, key.Comment, constraints)
	}
	return c.insertCert(key.PrivateKey, cert, key.Comment, constraints)
}

func (c *client) insertCert(s interface{}, cert *ssh.Certificate, comment string, constraints []byte) error {
	var req []byte
	switch k := s.(type) {
	case *rsa.PrivateKey:
		if len(k.Primes) != 2 {
			return fmt.Errorf("agent: unsupported RSA key with %d primes", len(k.Primes))
		}
		k.Precompute()
		req = ssh.Marshal(rsaCertMsg{
			Type:        cert.Type(),
			CertBytes:   cert.Marshal(),
			D:           k.D,
			Iqmp:        k.Precomputed.Qinv,
			P:           k.Primes[0],
			Q:           k.Primes[1],
			Comments:    comment,
			Constraints: constraints,
		})
	case *dsa.PrivateKey:
		req = ssh.Marshal(dsaCertMsg{
			Type:        cert.Type(),
			CertBytes:   cert.Marshal(),
			X:           k.X,
			Comments:    comment,
			Constraints: constraints,
		})
	case *ecdsa.PrivateKey:
		req = ssh.Marshal(ecdsaCertMsg{
			Type:        cert.Type(),
			CertBytes:   cert.Marshal(),
			D:           k.D,
			Comments:    comment,
			Constraints: constraints,
		})
	case ed25519.PrivateKey:
		req = ssh.Marshal(ed25519CertMsg{
			Type:        cert.Type(),
			CertBytes:   cert.Marshal(),
			Pub:         []byte(k)[32:],
			Priv:        []byte(k),
			Comments:    comment,
			Constraints: constraints,
		})
	// This function originally supported only *ed25519.PrivateKey, however the
	// general idiom is to pass ed25519.PrivateKey by value, not by pointer.
	// We still support the pointer variant for backwards compatibility.
	case *ed25519.PrivateKey:
		req = ssh.Marshal(ed25519CertMsg{
			Type:        cert.Type(),
			CertBytes:   cert.Marshal(),
			Pub:         []byte(*k)[32:],
			Priv:        []byte(*k),
			Comments:    comment,
			Constraints: constraints,
		})
	default:
		return fmt.Errorf("agent: unsupported key type %T", s)
	}

	// if constraints are present then the message type needs to be changed.
	if len(constraints) != 0 {
		req[0] = agentAddIDConstrained
	}

	signer, err := ssh.NewSignerFromKey(s)
	if err != nil {
		return err
	}
	if !bytes.Equal(cert.Key.Marshal(), signer.PublicKey().Marshal()) {
		return errors.New("agent: signer and cert have different public key")
	}

	resp, err := c.call(req)
	if err != nil {
		return err
	}
	if _, ok := resp.(*successAgentMsg); ok {
		return nil
	}
	return errors.New("agent: failure")
}

// Signers provides a callback for client authentication.
func (c *client) Signers() ([]ssh.Signer, error) {
	keys, err := c.List()
	if err != nil {
		return nil, err
	}

	var result []ssh.Signer
	for _, k := range keys {
		result = append(result, &agentKeyringSigner{c, k})
	}
	return result, nil
}

type agentKeyringSigner struct {
	agent *client
	pub   ssh.PublicKey
}

func (s *agentKeyringSigner) PublicKey() ssh.PublicKey {
	return s.pub
}

func (s *agentKeyringSigner) Sign(rand io.Reader, data []byte) (*ssh.Signature, error) {
	// The agent has its own entropy source, so the rand argument is ignored.
	return s.agent.Sign(s.pub, data)
}

func (s *agentKeyringSigner) SignWithAlgorithm(rand io.Reader, data []byte, algorithm string) (*ssh.Signature, error) {
	if algorithm == "" || algorithm == underlyingAlgo(s.pub.Type()) {
		return s.Sign(rand, data)
	}

	var flags SignatureFlags
	switch algorithm {
	case ssh.KeyAlgoRSASHA256:
		flags = SignatureFlagRsaSha256
	case ssh.KeyAlgoRSASHA512:
		flags = SignatureFlagRsaSha512
	default:
		return nil, fmt.Errorf("agent: unsupported algorithm %q", algorithm)
	}

	return s.agent.SignWithFlags(s.pub, data, flags)
}

var _ ssh.AlgorithmSigner = &agentKeyringSigner{}

// certKeyAlgoNames is a mapping from known certificate algorithm names to the
// corresponding public key signature algorithm.
//
// This map must be kept in sync with the one in certs.go.
var certKeyAlgoNames = map[string]string{
	ssh.CertAlgoRSAv01:        ssh.KeyAlgoRSA,
	ssh.CertAlgoRSASHA256v01:  ssh.KeyAlgoRSASHA256,
	ssh.CertAlgoRSASHA512v01:  ssh.KeyAlgoRSASHA512,
	ssh.CertAlgoDSAv01:        ssh.KeyAlgoDSA,
	ssh.CertAlgoECDSA256v01:   ssh.KeyAlgoECDSA256,
	ssh.CertAlgoECDSA384v01:   ssh.KeyAlgoECDSA384,
	ssh.CertAlgoECDSA521v01:   ssh.KeyAlgoECDSA521,
	ssh.CertAlgoSKECDSA256v01: ssh.KeyAlgoSKECDSA256,
	ssh.CertAlgoED25519v01:    ssh.KeyAlgoED25519,
	ssh.CertAlgoSKED25519v01:  ssh.KeyAlgoSKED25519,
}

// underlyingAlgo returns the signature algorithm associated with algo (which is
// an advertised or negotiated public key or host key algorithm). These are
// usually the same, except for certificate algorithms.
func underlyingAlgo(algo string) string {
	if a, ok := certKeyAlgoNames[algo]; ok {
		return a
	}
	return algo
}

// Calls an extension method. It is up to the agent implementation as to whether or not
// any particular extension is supported and may always return an error. Because the
// type of the response is up to the implementation, this returns the bytes of the
// response and does not attempt any type of unmarshalling.
func (c *client) Extension(extensionType string, contents []byte) ([]byte, error) {
	req := ssh.Marshal(extensionAgentMsg{
		ExtensionType: extensionType,
		Contents:      contents,
	})
	buf, err := c.callRaw(req)
	if err != nil {
		return nil, err
	}
	if len(buf) == 0 {
		return nil, errors.New("agent: failure; empty response")
	}
	// [PROTOCOL.agent] section 4.7 indicates that an SSH_AGENT_FAILURE message
	// represents an agent that does not support the extension
	if buf[0] == agentFailure {
		return nil, ErrExtensionUnsupported
	}
	if buf[0] == agentExtensionFailure {
		return nil, errors.New("agent: generic extension failure")
	}

	return buf, nil
}
 07070100000D0D000081A4000000000000000000000001645E367C000008A6000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/agent/forward.go   // Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package agent

import (
	"errors"
	"io"
	"net"
	"sync"

	"golang.org/x/crypto/ssh"
)

// RequestAgentForwarding sets up agent forwarding for the session.
// ForwardToAgent or ForwardToRemote should be called to route
// the authentication requests.
func RequestAgentForwarding(session *ssh.Session) error {
	ok, err := session.SendRequest("auth-agent-req@openssh.com", true, nil)
	if err != nil {
		return err
	}
	if !ok {
		return errors.New("forwarding request denied")
	}
	return nil
}

// ForwardToAgent routes authentication requests to the given keyring.
func ForwardToAgent(client *ssh.Client, keyring Agent) error {
	channels := client.HandleChannelOpen(channelType)
	if channels == nil {
		return errors.New("agent: already have handler for " + channelType)
	}

	go func() {
		for ch := range channels {
			channel, reqs, err := ch.Accept()
			if err != nil {
				continue
			}
			go ssh.DiscardRequests(reqs)
			go func() {
				ServeAgent(keyring, channel)
				channel.Close()
			}()
		}
	}()
	return nil
}

const channelType = "auth-agent@openssh.com"

// ForwardToRemote routes authentication requests to the ssh-agent
// process serving on the given unix socket.
func ForwardToRemote(client *ssh.Client, addr string) error {
	channels := client.HandleChannelOpen(channelType)
	if channels == nil {
		return errors.New("agent: already have handler for " + channelType)
	}
	conn, err := net.Dial("unix", addr)
	if err != nil {
		return err
	}
	conn.Close()

	go func() {
		for ch := range channels {
			channel, reqs, err := ch.Accept()
			if err != nil {
				continue
			}
			go ssh.DiscardRequests(reqs)
			go forwardUnixSocket(channel, addr)
		}
	}()
	return nil
}

func forwardUnixSocket(channel ssh.Channel, addr string) {
	conn, err := net.Dial("unix", addr)
	if err != nil {
		return
	}

	var wg sync.WaitGroup
	wg.Add(2)
	go func() {
		io.Copy(conn, channel)
		conn.(*net.UnixConn).CloseWrite()
		wg.Done()
	}()
	go func() {
		io.Copy(channel, conn)
		channel.CloseWrite()
		wg.Done()
	}()

	wg.Wait()
	conn.Close()
	channel.Close()
}
  07070100000D0E000081A4000000000000000000000001645E367C00001511000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/agent/keyring.go   // Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package agent

import (
	"bytes"
	"crypto/rand"
	"crypto/subtle"
	"errors"
	"fmt"
	"sync"
	"time"

	"golang.org/x/crypto/ssh"
)

type privKey struct {
	signer  ssh.Signer
	comment string
	expire  *time.Time
}

type keyring struct {
	mu   sync.Mutex
	keys []privKey

	locked     bool
	passphrase []byte
}

var errLocked = errors.New("agent: locked")

// NewKeyring returns an Agent that holds keys in memory.  It is safe
// for concurrent use by multiple goroutines.
func NewKeyring() Agent {
	return &keyring{}
}

// RemoveAll removes all identities.
func (r *keyring) RemoveAll() error {
	r.mu.Lock()
	defer r.mu.Unlock()
	if r.locked {
		return errLocked
	}

	r.keys = nil
	return nil
}

// removeLocked does the actual key removal. The caller must already be holding the
// keyring mutex.
func (r *keyring) removeLocked(want []byte) error {
	found := false
	for i := 0; i < len(r.keys); {
		if bytes.Equal(r.keys[i].signer.PublicKey().Marshal(), want) {
			found = true
			r.keys[i] = r.keys[len(r.keys)-1]
			r.keys = r.keys[:len(r.keys)-1]
			continue
		} else {
			i++
		}
	}

	if !found {
		return errors.New("agent: key not found")
	}
	return nil
}

// Remove removes all identities with the given public key.
func (r *keyring) Remove(key ssh.PublicKey) error {
	r.mu.Lock()
	defer r.mu.Unlock()
	if r.locked {
		return errLocked
	}

	return r.removeLocked(key.Marshal())
}

// Lock locks the agent. Sign and Remove will fail, and List will return an empty list.
func (r *keyring) Lock(passphrase []byte) error {
	r.mu.Lock()
	defer r.mu.Unlock()
	if r.locked {
		return errLocked
	}

	r.locked = true
	r.passphrase = passphrase
	return nil
}

// Unlock undoes the effect of Lock
func (r *keyring) Unlock(passphrase []byte) error {
	r.mu.Lock()
	defer r.mu.Unlock()
	if !r.locked {
		return errors.New("agent: not locked")
	}
	if 1 != subtle.ConstantTimeCompare(passphrase, r.passphrase) {
		return fmt.Errorf("agent: incorrect passphrase")
	}

	r.locked = false
	r.passphrase = nil
	return nil
}

// expireKeysLocked removes expired keys from the keyring. If a key was added
// with a lifetimesecs contraint and seconds >= lifetimesecs seconds have
// elapsed, it is removed. The caller *must* be holding the keyring mutex.
func (r *keyring) expireKeysLocked() {
	for _, k := range r.keys {
		if k.expire != nil && time.Now().After(*k.expire) {
			r.removeLocked(k.signer.PublicKey().Marshal())
		}
	}
}

// List returns the identities known to the agent.
func (r *keyring) List() ([]*Key, error) {
	r.mu.Lock()
	defer r.mu.Unlock()
	if r.locked {
		// section 2.7: locked agents return empty.
		return nil, nil
	}

	r.expireKeysLocked()
	var ids []*Key
	for _, k := range r.keys {
		pub := k.signer.PublicKey()
		ids = append(ids, &Key{
			Format:  pub.Type(),
			Blob:    pub.Marshal(),
			Comment: k.comment})
	}
	return ids, nil
}

// Insert adds a private key to the keyring. If a certificate
// is given, that certificate is added as public key. Note that
// any constraints given are ignored.
func (r *keyring) Add(key AddedKey) error {
	r.mu.Lock()
	defer r.mu.Unlock()
	if r.locked {
		return errLocked
	}
	signer, err := ssh.NewSignerFromKey(key.PrivateKey)

	if err != nil {
		return err
	}

	if cert := key.Certificate; cert != nil {
		signer, err = ssh.NewCertSigner(cert, signer)
		if err != nil {
			return err
		}
	}

	p := privKey{
		signer:  signer,
		comment: key.Comment,
	}

	if key.LifetimeSecs > 0 {
		t := time.Now().Add(time.Duration(key.LifetimeSecs) * time.Second)
		p.expire = &t
	}

	r.keys = append(r.keys, p)

	return nil
}

// Sign returns a signature for the data.
func (r *keyring) Sign(key ssh.PublicKey, data []byte) (*ssh.Signature, error) {
	return r.SignWithFlags(key, data, 0)
}

func (r *keyring) SignWithFlags(key ssh.PublicKey, data []byte, flags SignatureFlags) (*ssh.Signature, error) {
	r.mu.Lock()
	defer r.mu.Unlock()
	if r.locked {
		return nil, errLocked
	}

	r.expireKeysLocked()
	wanted := key.Marshal()
	for _, k := range r.keys {
		if bytes.Equal(k.signer.PublicKey().Marshal(), wanted) {
			if flags == 0 {
				return k.signer.Sign(rand.Reader, data)
			} else {
				if algorithmSigner, ok := k.signer.(ssh.AlgorithmSigner); !ok {
					return nil, fmt.Errorf("agent: signature does not support non-default signature algorithm: %T", k.signer)
				} else {
					var algorithm string
					switch flags {
					case SignatureFlagRsaSha256:
						algorithm = ssh.KeyAlgoRSASHA256
					case SignatureFlagRsaSha512:
						algorithm = ssh.KeyAlgoRSASHA512
					default:
						return nil, fmt.Errorf("agent: unsupported signature flags: %d", flags)
					}
					return algorithmSigner.SignWithAlgorithm(rand.Reader, data, algorithm)
				}
			}
		}
	}
	return nil, errors.New("not found")
}

// Signers returns signers for all the known keys.
func (r *keyring) Signers() ([]ssh.Signer, error) {
	r.mu.Lock()
	defer r.mu.Unlock()
	if r.locked {
		return nil, errLocked
	}

	r.expireKeysLocked()
	s := make([]ssh.Signer, 0, len(r.keys))
	for _, k := range r.keys {
		s = append(s, k.signer)
	}
	return s, nil
}

// The keyring does not support any extensions
func (r *keyring) Extension(extensionType string, contents []byte) ([]byte, error) {
	return nil, ErrExtensionUnsupported
}
   07070100000D0F000081A4000000000000000000000001645E367C00003531000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/agent/server.go    // Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package agent

import (
	"crypto/dsa"
	"crypto/ecdsa"
	"crypto/elliptic"
	"crypto/rsa"
	"encoding/binary"
	"errors"
	"fmt"
	"io"
	"log"
	"math/big"

	"golang.org/x/crypto/ed25519"
	"golang.org/x/crypto/ssh"
)

// server wraps an Agent and uses it to implement the agent side of
// the SSH-agent, wire protocol.
type server struct {
	agent Agent
}

func (s *server) processRequestBytes(reqData []byte) []byte {
	rep, err := s.processRequest(reqData)
	if err != nil {
		if err != errLocked {
			// TODO(hanwen): provide better logging interface?
			log.Printf("agent %d: %v", reqData[0], err)
		}
		return []byte{agentFailure}
	}

	if err == nil && rep == nil {
		return []byte{agentSuccess}
	}

	return ssh.Marshal(rep)
}

func marshalKey(k *Key) []byte {
	var record struct {
		Blob    []byte
		Comment string
	}
	record.Blob = k.Marshal()
	record.Comment = k.Comment

	return ssh.Marshal(&record)
}

// See [PROTOCOL.agent], section 2.5.1.
const agentV1IdentitiesAnswer = 2

type agentV1IdentityMsg struct {
	Numkeys uint32 `sshtype:"2"`
}

type agentRemoveIdentityMsg struct {
	KeyBlob []byte `sshtype:"18"`
}

type agentLockMsg struct {
	Passphrase []byte `sshtype:"22"`
}

type agentUnlockMsg struct {
	Passphrase []byte `sshtype:"23"`
}

func (s *server) processRequest(data []byte) (interface{}, error) {
	switch data[0] {
	case agentRequestV1Identities:
		return &agentV1IdentityMsg{0}, nil

	case agentRemoveAllV1Identities:
		return nil, nil

	case agentRemoveIdentity:
		var req agentRemoveIdentityMsg
		if err := ssh.Unmarshal(data, &req); err != nil {
			return nil, err
		}

		var wk wireKey
		if err := ssh.Unmarshal(req.KeyBlob, &wk); err != nil {
			return nil, err
		}

		return nil, s.agent.Remove(&Key{Format: wk.Format, Blob: req.KeyBlob})

	case agentRemoveAllIdentities:
		return nil, s.agent.RemoveAll()

	case agentLock:
		var req agentLockMsg
		if err := ssh.Unmarshal(data, &req); err != nil {
			return nil, err
		}

		return nil, s.agent.Lock(req.Passphrase)

	case agentUnlock:
		var req agentUnlockMsg
		if err := ssh.Unmarshal(data, &req); err != nil {
			return nil, err
		}
		return nil, s.agent.Unlock(req.Passphrase)

	case agentSignRequest:
		var req signRequestAgentMsg
		if err := ssh.Unmarshal(data, &req); err != nil {
			return nil, err
		}

		var wk wireKey
		if err := ssh.Unmarshal(req.KeyBlob, &wk); err != nil {
			return nil, err
		}

		k := &Key{
			Format: wk.Format,
			Blob:   req.KeyBlob,
		}

		var sig *ssh.Signature
		var err error
		if extendedAgent, ok := s.agent.(ExtendedAgent); ok {
			sig, err = extendedAgent.SignWithFlags(k, req.Data, SignatureFlags(req.Flags))
		} else {
			sig, err = s.agent.Sign(k, req.Data)
		}

		if err != nil {
			return nil, err
		}
		return &signResponseAgentMsg{SigBlob: ssh.Marshal(sig)}, nil

	case agentRequestIdentities:
		keys, err := s.agent.List()
		if err != nil {
			return nil, err
		}

		rep := identitiesAnswerAgentMsg{
			NumKeys: uint32(len(keys)),
		}
		for _, k := range keys {
			rep.Keys = append(rep.Keys, marshalKey(k)...)
		}
		return rep, nil

	case agentAddIDConstrained, agentAddIdentity:
		return nil, s.insertIdentity(data)

	case agentExtension:
		// Return a stub object where the whole contents of the response gets marshaled.
		var responseStub struct {
			Rest []byte `ssh:"rest"`
		}

		if extendedAgent, ok := s.agent.(ExtendedAgent); !ok {
			// If this agent doesn't implement extensions, [PROTOCOL.agent] section 4.7
			// requires that we return a standard SSH_AGENT_FAILURE message.
			responseStub.Rest = []byte{agentFailure}
		} else {
			var req extensionAgentMsg
			if err := ssh.Unmarshal(data, &req); err != nil {
				return nil, err
			}
			res, err := extendedAgent.Extension(req.ExtensionType, req.Contents)
			if err != nil {
				// If agent extensions are unsupported, return a standard SSH_AGENT_FAILURE
				// message as required by [PROTOCOL.agent] section 4.7.
				if err == ErrExtensionUnsupported {
					responseStub.Rest = []byte{agentFailure}
				} else {
					// As the result of any other error processing an extension request,
					// [PROTOCOL.agent] section 4.7 requires that we return a
					// SSH_AGENT_EXTENSION_FAILURE code.
					responseStub.Rest = []byte{agentExtensionFailure}
				}
			} else {
				if len(res) == 0 {
					return nil, nil
				}
				responseStub.Rest = res
			}
		}

		return responseStub, nil
	}

	return nil, fmt.Errorf("unknown opcode %d", data[0])
}

func parseConstraints(constraints []byte) (lifetimeSecs uint32, confirmBeforeUse bool, extensions []ConstraintExtension, err error) {
	for len(constraints) != 0 {
		switch constraints[0] {
		case agentConstrainLifetime:
			lifetimeSecs = binary.BigEndian.Uint32(constraints[1:5])
			constraints = constraints[5:]
		case agentConstrainConfirm:
			confirmBeforeUse = true
			constraints = constraints[1:]
		case agentConstrainExtension:
			var msg constrainExtensionAgentMsg
			if err = ssh.Unmarshal(constraints, &msg); err != nil {
				return 0, false, nil, err
			}
			extensions = append(extensions, ConstraintExtension{
				ExtensionName:    msg.ExtensionName,
				ExtensionDetails: msg.ExtensionDetails,
			})
			constraints = msg.Rest
		default:
			return 0, false, nil, fmt.Errorf("unknown constraint type: %d", constraints[0])
		}
	}
	return
}

func setConstraints(key *AddedKey, constraintBytes []byte) error {
	lifetimeSecs, confirmBeforeUse, constraintExtensions, err := parseConstraints(constraintBytes)
	if err != nil {
		return err
	}

	key.LifetimeSecs = lifetimeSecs
	key.ConfirmBeforeUse = confirmBeforeUse
	key.ConstraintExtensions = constraintExtensions
	return nil
}

func parseRSAKey(req []byte) (*AddedKey, error) {
	var k rsaKeyMsg
	if err := ssh.Unmarshal(req, &k); err != nil {
		return nil, err
	}
	if k.E.BitLen() > 30 {
		return nil, errors.New("agent: RSA public exponent too large")
	}
	priv := &rsa.PrivateKey{
		PublicKey: rsa.PublicKey{
			E: int(k.E.Int64()),
			N: k.N,
		},
		D:      k.D,
		Primes: []*big.Int{k.P, k.Q},
	}
	priv.Precompute()

	addedKey := &AddedKey{PrivateKey: priv, Comment: k.Comments}
	if err := setConstraints(addedKey, k.Constraints); err != nil {
		return nil, err
	}
	return addedKey, nil
}

func parseEd25519Key(req []byte) (*AddedKey, error) {
	var k ed25519KeyMsg
	if err := ssh.Unmarshal(req, &k); err != nil {
		return nil, err
	}
	priv := ed25519.PrivateKey(k.Priv)

	addedKey := &AddedKey{PrivateKey: &priv, Comment: k.Comments}
	if err := setConstraints(addedKey, k.Constraints); err != nil {
		return nil, err
	}
	return addedKey, nil
}

func parseDSAKey(req []byte) (*AddedKey, error) {
	var k dsaKeyMsg
	if err := ssh.Unmarshal(req, &k); err != nil {
		return nil, err
	}
	priv := &dsa.PrivateKey{
		PublicKey: dsa.PublicKey{
			Parameters: dsa.Parameters{
				P: k.P,
				Q: k.Q,
				G: k.G,
			},
			Y: k.Y,
		},
		X: k.X,
	}

	addedKey := &AddedKey{PrivateKey: priv, Comment: k.Comments}
	if err := setConstraints(addedKey, k.Constraints); err != nil {
		return nil, err
	}
	return addedKey, nil
}

func unmarshalECDSA(curveName string, keyBytes []byte, privScalar *big.Int) (priv *ecdsa.PrivateKey, err error) {
	priv = &ecdsa.PrivateKey{
		D: privScalar,
	}

	switch curveName {
	case "nistp256":
		priv.Curve = elliptic.P256()
	case "nistp384":
		priv.Curve = elliptic.P384()
	case "nistp521":
		priv.Curve = elliptic.P521()
	default:
		return nil, fmt.Errorf("agent: unknown curve %q", curveName)
	}

	priv.X, priv.Y = elliptic.Unmarshal(priv.Curve, keyBytes)
	if priv.X == nil || priv.Y == nil {
		return nil, errors.New("agent: point not on curve")
	}

	return priv, nil
}

func parseEd25519Cert(req []byte) (*AddedKey, error) {
	var k ed25519CertMsg
	if err := ssh.Unmarshal(req, &k); err != nil {
		return nil, err
	}
	pubKey, err := ssh.ParsePublicKey(k.CertBytes)
	if err != nil {
		return nil, err
	}
	priv := ed25519.PrivateKey(k.Priv)
	cert, ok := pubKey.(*ssh.Certificate)
	if !ok {
		return nil, errors.New("agent: bad ED25519 certificate")
	}

	addedKey := &AddedKey{PrivateKey: &priv, Certificate: cert, Comment: k.Comments}
	if err := setConstraints(addedKey, k.Constraints); err != nil {
		return nil, err
	}
	return addedKey, nil
}

func parseECDSAKey(req []byte) (*AddedKey, error) {
	var k ecdsaKeyMsg
	if err := ssh.Unmarshal(req, &k); err != nil {
		return nil, err
	}

	priv, err := unmarshalECDSA(k.Curve, k.KeyBytes, k.D)
	if err != nil {
		return nil, err
	}

	addedKey := &AddedKey{PrivateKey: priv, Comment: k.Comments}
	if err := setConstraints(addedKey, k.Constraints); err != nil {
		return nil, err
	}
	return addedKey, nil
}

func parseRSACert(req []byte) (*AddedKey, error) {
	var k rsaCertMsg
	if err := ssh.Unmarshal(req, &k); err != nil {
		return nil, err
	}

	pubKey, err := ssh.ParsePublicKey(k.CertBytes)
	if err != nil {
		return nil, err
	}

	cert, ok := pubKey.(*ssh.Certificate)
	if !ok {
		return nil, errors.New("agent: bad RSA certificate")
	}

	// An RSA publickey as marshaled by rsaPublicKey.Marshal() in keys.go
	var rsaPub struct {
		Name string
		E    *big.Int
		N    *big.Int
	}
	if err := ssh.Unmarshal(cert.Key.Marshal(), &rsaPub); err != nil {
		return nil, fmt.Errorf("agent: Unmarshal failed to parse public key: %v", err)
	}

	if rsaPub.E.BitLen() > 30 {
		return nil, errors.New("agent: RSA public exponent too large")
	}

	priv := rsa.PrivateKey{
		PublicKey: rsa.PublicKey{
			E: int(rsaPub.E.Int64()),
			N: rsaPub.N,
		},
		D:      k.D,
		Primes: []*big.Int{k.Q, k.P},
	}
	priv.Precompute()

	addedKey := &AddedKey{PrivateKey: &priv, Certificate: cert, Comment: k.Comments}
	if err := setConstraints(addedKey, k.Constraints); err != nil {
		return nil, err
	}
	return addedKey, nil
}

func parseDSACert(req []byte) (*AddedKey, error) {
	var k dsaCertMsg
	if err := ssh.Unmarshal(req, &k); err != nil {
		return nil, err
	}
	pubKey, err := ssh.ParsePublicKey(k.CertBytes)
	if err != nil {
		return nil, err
	}
	cert, ok := pubKey.(*ssh.Certificate)
	if !ok {
		return nil, errors.New("agent: bad DSA certificate")
	}

	// A DSA publickey as marshaled by dsaPublicKey.Marshal() in keys.go
	var w struct {
		Name       string
		P, Q, G, Y *big.Int
	}
	if err := ssh.Unmarshal(cert.Key.Marshal(), &w); err != nil {
		return nil, fmt.Errorf("agent: Unmarshal failed to parse public key: %v", err)
	}

	priv := &dsa.PrivateKey{
		PublicKey: dsa.PublicKey{
			Parameters: dsa.Parameters{
				P: w.P,
				Q: w.Q,
				G: w.G,
			},
			Y: w.Y,
		},
		X: k.X,
	}

	addedKey := &AddedKey{PrivateKey: priv, Certificate: cert, Comment: k.Comments}
	if err := setConstraints(addedKey, k.Constraints); err != nil {
		return nil, err
	}
	return addedKey, nil
}

func parseECDSACert(req []byte) (*AddedKey, error) {
	var k ecdsaCertMsg
	if err := ssh.Unmarshal(req, &k); err != nil {
		return nil, err
	}

	pubKey, err := ssh.ParsePublicKey(k.CertBytes)
	if err != nil {
		return nil, err
	}
	cert, ok := pubKey.(*ssh.Certificate)
	if !ok {
		return nil, errors.New("agent: bad ECDSA certificate")
	}

	// An ECDSA publickey as marshaled by ecdsaPublicKey.Marshal() in keys.go
	var ecdsaPub struct {
		Name string
		ID   string
		Key  []byte
	}
	if err := ssh.Unmarshal(cert.Key.Marshal(), &ecdsaPub); err != nil {
		return nil, err
	}

	priv, err := unmarshalECDSA(ecdsaPub.ID, ecdsaPub.Key, k.D)
	if err != nil {
		return nil, err
	}

	addedKey := &AddedKey{PrivateKey: priv, Certificate: cert, Comment: k.Comments}
	if err := setConstraints(addedKey, k.Constraints); err != nil {
		return nil, err
	}
	return addedKey, nil
}

func (s *server) insertIdentity(req []byte) error {
	var record struct {
		Type string `sshtype:"17|25"`
		Rest []byte `ssh:"rest"`
	}

	if err := ssh.Unmarshal(req, &record); err != nil {
		return err
	}

	var addedKey *AddedKey
	var err error

	switch record.Type {
	case ssh.KeyAlgoRSA:
		addedKey, err = parseRSAKey(req)
	case ssh.KeyAlgoDSA:
		addedKey, err = parseDSAKey(req)
	case ssh.KeyAlgoECDSA256, ssh.KeyAlgoECDSA384, ssh.KeyAlgoECDSA521:
		addedKey, err = parseECDSAKey(req)
	case ssh.KeyAlgoED25519:
		addedKey, err = parseEd25519Key(req)
	case ssh.CertAlgoRSAv01:
		addedKey, err = parseRSACert(req)
	case ssh.CertAlgoDSAv01:
		addedKey, err = parseDSACert(req)
	case ssh.CertAlgoECDSA256v01, ssh.CertAlgoECDSA384v01, ssh.CertAlgoECDSA521v01:
		addedKey, err = parseECDSACert(req)
	case ssh.CertAlgoED25519v01:
		addedKey, err = parseEd25519Cert(req)
	default:
		return fmt.Errorf("agent: not implemented: %q", record.Type)
	}

	if err != nil {
		return err
	}
	return s.agent.Add(*addedKey)
}

// ServeAgent serves the agent protocol on the given connection. It
// returns when an I/O error occurs.
func ServeAgent(agent Agent, c io.ReadWriter) error {
	s := &server{agent}

	var length [4]byte
	for {
		if _, err := io.ReadFull(c, length[:]); err != nil {
			return err
		}
		l := binary.BigEndian.Uint32(length[:])
		if l == 0 {
			return fmt.Errorf("agent: request size is 0")
		}
		if l > maxAgentResponseBytes {
			// We also cap requests.
			return fmt.Errorf("agent: request too large: %d", l)
		}

		req := make([]byte, l)
		if _, err := io.ReadFull(c, req); err != nil {
			return err
		}

		repData := s.processRequestBytes(req)
		if len(repData) > maxAgentResponseBytes {
			return fmt.Errorf("agent: reply too large: %d bytes", len(repData))
		}

		binary.BigEndian.PutUint32(length[:], uint32(len(repData)))
		if _, err := c.Write(length[:]); err != nil {
			return err
		}
		if _, err := c.Write(repData); err != nil {
			return err
		}
	}
}
   07070100000D10000081A4000000000000000000000001645E367C00000884000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/buffer.go  // Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package ssh

import (
	"io"
	"sync"
)

// buffer provides a linked list buffer for data exchange
// between producer and consumer. Theoretically the buffer is
// of unlimited capacity as it does no allocation of its own.
type buffer struct {
	// protects concurrent access to head, tail and closed
	*sync.Cond

	head *element // the buffer that will be read first
	tail *element // the buffer that will be read last

	closed bool
}

// An element represents a single link in a linked list.
type element struct {
	buf  []byte
	next *element
}

// newBuffer returns an empty buffer that is not closed.
func newBuffer() *buffer {
	e := new(element)
	b := &buffer{
		Cond: newCond(),
		head: e,
		tail: e,
	}
	return b
}

// write makes buf available for Read to receive.
// buf must not be modified after the call to write.
func (b *buffer) write(buf []byte) {
	b.Cond.L.Lock()
	e := &element{buf: buf}
	b.tail.next = e
	b.tail = e
	b.Cond.Signal()
	b.Cond.L.Unlock()
}

// eof closes the buffer. Reads from the buffer once all
// the data has been consumed will receive io.EOF.
func (b *buffer) eof() {
	b.Cond.L.Lock()
	b.closed = true
	b.Cond.Signal()
	b.Cond.L.Unlock()
}

// Read reads data from the internal buffer in buf.  Reads will block
// if no data is available, or until the buffer is closed.
func (b *buffer) Read(buf []byte) (n int, err error) {
	b.Cond.L.Lock()
	defer b.Cond.L.Unlock()

	for len(buf) > 0 {
		// if there is data in b.head, copy it
		if len(b.head.buf) > 0 {
			r := copy(buf, b.head.buf)
			buf, b.head.buf = buf[r:], b.head.buf[r:]
			n += r
			continue
		}
		// if there is a next buffer, make it the head
		if len(b.head.buf) == 0 && b.head != b.tail {
			b.head = b.head.next
			continue
		}

		// if at least one byte has been copied, return
		if n > 0 {
			break
		}

		// if nothing was read, and there is nothing outstanding
		// check to see if the buffer is closed.
		if b.closed {
			err = io.EOF
			break
		}
		// out of buffers, wait for producer
		b.Cond.Wait()
	}
	return
}
07070100000D11000081A4000000000000000000000001645E367C000042D8000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/certs.go   // Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package ssh

import (
	"bytes"
	"errors"
	"fmt"
	"io"
	"net"
	"sort"
	"time"
)

// Certificate algorithm names from [PROTOCOL.certkeys]. These values can appear
// in Certificate.Type, PublicKey.Type, and ClientConfig.HostKeyAlgorithms.
// Unlike key algorithm names, these are not passed to AlgorithmSigner and don't
// appear in the Signature.Format field.
const (
	CertAlgoRSAv01        = "ssh-rsa-cert-v01@openssh.com"
	CertAlgoDSAv01        = "ssh-dss-cert-v01@openssh.com"
	CertAlgoECDSA256v01   = "ecdsa-sha2-nistp256-cert-v01@openssh.com"
	CertAlgoECDSA384v01   = "ecdsa-sha2-nistp384-cert-v01@openssh.com"
	CertAlgoECDSA521v01   = "ecdsa-sha2-nistp521-cert-v01@openssh.com"
	CertAlgoSKECDSA256v01 = "sk-ecdsa-sha2-nistp256-cert-v01@openssh.com"
	CertAlgoED25519v01    = "ssh-ed25519-cert-v01@openssh.com"
	CertAlgoSKED25519v01  = "sk-ssh-ed25519-cert-v01@openssh.com"

	// CertAlgoRSASHA256v01 and CertAlgoRSASHA512v01 can't appear as a
	// Certificate.Type (or PublicKey.Type), but only in
	// ClientConfig.HostKeyAlgorithms.
	CertAlgoRSASHA256v01 = "rsa-sha2-256-cert-v01@openssh.com"
	CertAlgoRSASHA512v01 = "rsa-sha2-512-cert-v01@openssh.com"
)

const (
	// Deprecated: use CertAlgoRSAv01.
	CertSigAlgoRSAv01 = CertAlgoRSAv01
	// Deprecated: use CertAlgoRSASHA256v01.
	CertSigAlgoRSASHA2256v01 = CertAlgoRSASHA256v01
	// Deprecated: use CertAlgoRSASHA512v01.
	CertSigAlgoRSASHA2512v01 = CertAlgoRSASHA512v01
)

// Certificate types distinguish between host and user
// certificates. The values can be set in the CertType field of
// Certificate.
const (
	UserCert = 1
	HostCert = 2
)

// Signature represents a cryptographic signature.
type Signature struct {
	Format string
	Blob   []byte
	Rest   []byte `ssh:"rest"`
}

// CertTimeInfinity can be used for OpenSSHCertV01.ValidBefore to indicate that
// a certificate does not expire.
const CertTimeInfinity = 1<<64 - 1

// An Certificate represents an OpenSSH certificate as defined in
// [PROTOCOL.certkeys]?rev=1.8. The Certificate type implements the
// PublicKey interface, so it can be unmarshaled using
// ParsePublicKey.
type Certificate struct {
	Nonce           []byte
	Key             PublicKey
	Serial          uint64
	CertType        uint32
	KeyId           string
	ValidPrincipals []string
	ValidAfter      uint64
	ValidBefore     uint64
	Permissions
	Reserved     []byte
	SignatureKey PublicKey
	Signature    *Signature
}

// genericCertData holds the key-independent part of the certificate data.
// Overall, certificates contain an nonce, public key fields and
// key-independent fields.
type genericCertData struct {
	Serial          uint64
	CertType        uint32
	KeyId           string
	ValidPrincipals []byte
	ValidAfter      uint64
	ValidBefore     uint64
	CriticalOptions []byte
	Extensions      []byte
	Reserved        []byte
	SignatureKey    []byte
	Signature       []byte
}

func marshalStringList(namelist []string) []byte {
	var to []byte
	for _, name := range namelist {
		s := struct{ N string }{name}
		to = append(to, Marshal(&s)...)
	}
	return to
}

type optionsTuple struct {
	Key   string
	Value []byte
}

type optionsTupleValue struct {
	Value string
}

// serialize a map of critical options or extensions
// issue #10569 - per [PROTOCOL.certkeys] and SSH implementation,
// we need two length prefixes for a non-empty string value
func marshalTuples(tups map[string]string) []byte {
	keys := make([]string, 0, len(tups))
	for key := range tups {
		keys = append(keys, key)
	}
	sort.Strings(keys)

	var ret []byte
	for _, key := range keys {
		s := optionsTuple{Key: key}
		if value := tups[key]; len(value) > 0 {
			s.Value = Marshal(&optionsTupleValue{value})
		}
		ret = append(ret, Marshal(&s)...)
	}
	return ret
}

// issue #10569 - per [PROTOCOL.certkeys] and SSH implementation,
// we need two length prefixes for a non-empty option value
func parseTuples(in []byte) (map[string]string, error) {
	tups := map[string]string{}
	var lastKey string
	var haveLastKey bool

	for len(in) > 0 {
		var key, val, extra []byte
		var ok bool

		if key, in, ok = parseString(in); !ok {
			return nil, errShortRead
		}
		keyStr := string(key)
		// according to [PROTOCOL.certkeys], the names must be in
		// lexical order.
		if haveLastKey && keyStr <= lastKey {
			return nil, fmt.Errorf("ssh: certificate options are not in lexical order")
		}
		lastKey, haveLastKey = keyStr, true
		// the next field is a data field, which if non-empty has a string embedded
		if val, in, ok = parseString(in); !ok {
			return nil, errShortRead
		}
		if len(val) > 0 {
			val, extra, ok = parseString(val)
			if !ok {
				return nil, errShortRead
			}
			if len(extra) > 0 {
				return nil, fmt.Errorf("ssh: unexpected trailing data after certificate option value")
			}
			tups[keyStr] = string(val)
		} else {
			tups[keyStr] = ""
		}
	}
	return tups, nil
}

func parseCert(in []byte, privAlgo string) (*Certificate, error) {
	nonce, rest, ok := parseString(in)
	if !ok {
		return nil, errShortRead
	}

	key, rest, err := parsePubKey(rest, privAlgo)
	if err != nil {
		return nil, err
	}

	var g genericCertData
	if err := Unmarshal(rest, &g); err != nil {
		return nil, err
	}

	c := &Certificate{
		Nonce:       nonce,
		Key:         key,
		Serial:      g.Serial,
		CertType:    g.CertType,
		KeyId:       g.KeyId,
		ValidAfter:  g.ValidAfter,
		ValidBefore: g.ValidBefore,
	}

	for principals := g.ValidPrincipals; len(principals) > 0; {
		principal, rest, ok := parseString(principals)
		if !ok {
			return nil, errShortRead
		}
		c.ValidPrincipals = append(c.ValidPrincipals, string(principal))
		principals = rest
	}

	c.CriticalOptions, err = parseTuples(g.CriticalOptions)
	if err != nil {
		return nil, err
	}
	c.Extensions, err = parseTuples(g.Extensions)
	if err != nil {
		return nil, err
	}
	c.Reserved = g.Reserved
	k, err := ParsePublicKey(g.SignatureKey)
	if err != nil {
		return nil, err
	}

	c.SignatureKey = k
	c.Signature, rest, ok = parseSignatureBody(g.Signature)
	if !ok || len(rest) > 0 {
		return nil, errors.New("ssh: signature parse error")
	}

	return c, nil
}

type openSSHCertSigner struct {
	pub    *Certificate
	signer Signer
}

type algorithmOpenSSHCertSigner struct {
	*openSSHCertSigner
	algorithmSigner AlgorithmSigner
}

// NewCertSigner returns a Signer that signs with the given Certificate, whose
// private key is held by signer. It returns an error if the public key in cert
// doesn't match the key used by signer.
func NewCertSigner(cert *Certificate, signer Signer) (Signer, error) {
	if !bytes.Equal(cert.Key.Marshal(), signer.PublicKey().Marshal()) {
		return nil, errors.New("ssh: signer and cert have different public key")
	}

	if algorithmSigner, ok := signer.(AlgorithmSigner); ok {
		return &algorithmOpenSSHCertSigner{
			&openSSHCertSigner{cert, signer}, algorithmSigner}, nil
	} else {
		return &openSSHCertSigner{cert, signer}, nil
	}
}

func (s *openSSHCertSigner) Sign(rand io.Reader, data []byte) (*Signature, error) {
	return s.signer.Sign(rand, data)
}

func (s *openSSHCertSigner) PublicKey() PublicKey {
	return s.pub
}

func (s *algorithmOpenSSHCertSigner) SignWithAlgorithm(rand io.Reader, data []byte, algorithm string) (*Signature, error) {
	return s.algorithmSigner.SignWithAlgorithm(rand, data, algorithm)
}

const sourceAddressCriticalOption = "source-address"

// CertChecker does the work of verifying a certificate. Its methods
// can be plugged into ClientConfig.HostKeyCallback and
// ServerConfig.PublicKeyCallback. For the CertChecker to work,
// minimally, the IsAuthority callback should be set.
type CertChecker struct {
	// SupportedCriticalOptions lists the CriticalOptions that the
	// server application layer understands. These are only used
	// for user certificates.
	SupportedCriticalOptions []string

	// IsUserAuthority should return true if the key is recognized as an
	// authority for the given user certificate. This allows for
	// certificates to be signed by other certificates. This must be set
	// if this CertChecker will be checking user certificates.
	IsUserAuthority func(auth PublicKey) bool

	// IsHostAuthority should report whether the key is recognized as
	// an authority for this host. This allows for certificates to be
	// signed by other keys, and for those other keys to only be valid
	// signers for particular hostnames. This must be set if this
	// CertChecker will be checking host certificates.
	IsHostAuthority func(auth PublicKey, address string) bool

	// Clock is used for verifying time stamps. If nil, time.Now
	// is used.
	Clock func() time.Time

	// UserKeyFallback is called when CertChecker.Authenticate encounters a
	// public key that is not a certificate. It must implement validation
	// of user keys or else, if nil, all such keys are rejected.
	UserKeyFallback func(conn ConnMetadata, key PublicKey) (*Permissions, error)

	// HostKeyFallback is called when CertChecker.CheckHostKey encounters a
	// public key that is not a certificate. It must implement host key
	// validation or else, if nil, all such keys are rejected.
	HostKeyFallback HostKeyCallback

	// IsRevoked is called for each certificate so that revocation checking
	// can be implemented. It should return true if the given certificate
	// is revoked and false otherwise. If nil, no certificates are
	// considered to have been revoked.
	IsRevoked func(cert *Certificate) bool
}

// CheckHostKey checks a host key certificate. This method can be
// plugged into ClientConfig.HostKeyCallback.
func (c *CertChecker) CheckHostKey(addr string, remote net.Addr, key PublicKey) error {
	cert, ok := key.(*Certificate)
	if !ok {
		if c.HostKeyFallback != nil {
			return c.HostKeyFallback(addr, remote, key)
		}
		return errors.New("ssh: non-certificate host key")
	}
	if cert.CertType != HostCert {
		return fmt.Errorf("ssh: certificate presented as a host key has type %d", cert.CertType)
	}
	if !c.IsHostAuthority(cert.SignatureKey, addr) {
		return fmt.Errorf("ssh: no authorities for hostname: %v", addr)
	}

	hostname, _, err := net.SplitHostPort(addr)
	if err != nil {
		return err
	}

	// Pass hostname only as principal for host certificates (consistent with OpenSSH)
	return c.CheckCert(hostname, cert)
}

// Authenticate checks a user certificate. Authenticate can be used as
// a value for ServerConfig.PublicKeyCallback.
func (c *CertChecker) Authenticate(conn ConnMetadata, pubKey PublicKey) (*Permissions, error) {
	cert, ok := pubKey.(*Certificate)
	if !ok {
		if c.UserKeyFallback != nil {
			return c.UserKeyFallback(conn, pubKey)
		}
		return nil, errors.New("ssh: normal key pairs not accepted")
	}

	if cert.CertType != UserCert {
		return nil, fmt.Errorf("ssh: cert has type %d", cert.CertType)
	}
	if !c.IsUserAuthority(cert.SignatureKey) {
		return nil, fmt.Errorf("ssh: certificate signed by unrecognized authority")
	}

	if err := c.CheckCert(conn.User(), cert); err != nil {
		return nil, err
	}

	return &cert.Permissions, nil
}

// CheckCert checks CriticalOptions, ValidPrincipals, revocation, timestamp and
// the signature of the certificate.
func (c *CertChecker) CheckCert(principal string, cert *Certificate) error {
	if c.IsRevoked != nil && c.IsRevoked(cert) {
		return fmt.Errorf("ssh: certificate serial %d revoked", cert.Serial)
	}

	for opt := range cert.CriticalOptions {
		// sourceAddressCriticalOption will be enforced by
		// serverAuthenticate
		if opt == sourceAddressCriticalOption {
			continue
		}

		found := false
		for _, supp := range c.SupportedCriticalOptions {
			if supp == opt {
				found = true
				break
			}
		}
		if !found {
			return fmt.Errorf("ssh: unsupported critical option %q in certificate", opt)
		}
	}

	if len(cert.ValidPrincipals) > 0 {
		// By default, certs are valid for all users/hosts.
		found := false
		for _, p := range cert.ValidPrincipals {
			if p == principal {
				found = true
				break
			}
		}
		if !found {
			return fmt.Errorf("ssh: principal %q not in the set of valid principals for given certificate: %q", principal, cert.ValidPrincipals)
		}
	}

	clock := c.Clock
	if clock == nil {
		clock = time.Now
	}

	unixNow := clock().Unix()
	if after := int64(cert.ValidAfter); after < 0 || unixNow < int64(cert.ValidAfter) {
		return fmt.Errorf("ssh: cert is not yet valid")
	}
	if before := int64(cert.ValidBefore); cert.ValidBefore != uint64(CertTimeInfinity) && (unixNow >= before || before < 0) {
		return fmt.Errorf("ssh: cert has expired")
	}
	if err := cert.SignatureKey.Verify(cert.bytesForSigning(), cert.Signature); err != nil {
		return fmt.Errorf("ssh: certificate signature does not verify")
	}

	return nil
}

// SignCert signs the certificate with an authority, setting the Nonce,
// SignatureKey, and Signature fields.
func (c *Certificate) SignCert(rand io.Reader, authority Signer) error {
	c.Nonce = make([]byte, 32)
	if _, err := io.ReadFull(rand, c.Nonce); err != nil {
		return err
	}
	c.SignatureKey = authority.PublicKey()

	// Default to KeyAlgoRSASHA512 for ssh-rsa signers.
	if v, ok := authority.(AlgorithmSigner); ok && v.PublicKey().Type() == KeyAlgoRSA {
		sig, err := v.SignWithAlgorithm(rand, c.bytesForSigning(), KeyAlgoRSASHA512)
		if err != nil {
			return err
		}
		c.Signature = sig
		return nil
	}

	sig, err := authority.Sign(rand, c.bytesForSigning())
	if err != nil {
		return err
	}
	c.Signature = sig
	return nil
}

// certKeyAlgoNames is a mapping from known certificate algorithm names to the
// corresponding public key signature algorithm.
//
// This map must be kept in sync with the one in agent/client.go.
var certKeyAlgoNames = map[string]string{
	CertAlgoRSAv01:        KeyAlgoRSA,
	CertAlgoRSASHA256v01:  KeyAlgoRSASHA256,
	CertAlgoRSASHA512v01:  KeyAlgoRSASHA512,
	CertAlgoDSAv01:        KeyAlgoDSA,
	CertAlgoECDSA256v01:   KeyAlgoECDSA256,
	CertAlgoECDSA384v01:   KeyAlgoECDSA384,
	CertAlgoECDSA521v01:   KeyAlgoECDSA521,
	CertAlgoSKECDSA256v01: KeyAlgoSKECDSA256,
	CertAlgoED25519v01:    KeyAlgoED25519,
	CertAlgoSKED25519v01:  KeyAlgoSKED25519,
}

// underlyingAlgo returns the signature algorithm associated with algo (which is
// an advertised or negotiated public key or host key algorithm). These are
// usually the same, except for certificate algorithms.
func underlyingAlgo(algo string) string {
	if a, ok := certKeyAlgoNames[algo]; ok {
		return a
	}
	return algo
}

// certificateAlgo returns the certificate algorithms that uses the provided
// underlying signature algorithm.
func certificateAlgo(algo string) (certAlgo string, ok bool) {
	for certName, algoName := range certKeyAlgoNames {
		if algoName == algo {
			return certName, true
		}
	}
	return "", false
}

func (cert *Certificate) bytesForSigning() []byte {
	c2 := *cert
	c2.Signature = nil
	out := c2.Marshal()
	// Drop trailing signature length.
	return out[:len(out)-4]
}

// Marshal serializes c into OpenSSH's wire format. It is part of the
// PublicKey interface.
func (c *Certificate) Marshal() []byte {
	generic := genericCertData{
		Serial:          c.Serial,
		CertType:        c.CertType,
		KeyId:           c.KeyId,
		ValidPrincipals: marshalStringList(c.ValidPrincipals),
		ValidAfter:      uint64(c.ValidAfter),
		ValidBefore:     uint64(c.ValidBefore),
		CriticalOptions: marshalTuples(c.CriticalOptions),
		Extensions:      marshalTuples(c.Extensions),
		Reserved:        c.Reserved,
		SignatureKey:    c.SignatureKey.Marshal(),
	}
	if c.Signature != nil {
		generic.Signature = Marshal(c.Signature)
	}
	genericBytes := Marshal(&generic)
	keyBytes := c.Key.Marshal()
	_, keyBytes, _ = parseString(keyBytes)
	prefix := Marshal(&struct {
		Name  string
		Nonce []byte
		Key   []byte `ssh:"rest"`
	}{c.Type(), c.Nonce, keyBytes})

	result := make([]byte, 0, len(prefix)+len(genericBytes))
	result = append(result, prefix...)
	result = append(result, genericBytes...)
	return result
}

// Type returns the certificate algorithm name. It is part of the PublicKey interface.
func (c *Certificate) Type() string {
	certName, ok := certificateAlgo(c.Key.Type())
	if !ok {
		panic("unknown certificate type for key type " + c.Key.Type())
	}
	return certName
}

// Verify verifies a signature against the certificate's public
// key. It is part of the PublicKey interface.
func (c *Certificate) Verify(data []byte, sig *Signature) error {
	return c.Key.Verify(data, sig)
}

func parseSignatureBody(in []byte) (out *Signature, rest []byte, ok bool) {
	format, in, ok := parseString(in)
	if !ok {
		return
	}

	out = &Signature{
		Format: string(format),
	}

	if out.Blob, in, ok = parseString(in); !ok {
		return
	}

	switch out.Format {
	case KeyAlgoSKECDSA256, CertAlgoSKECDSA256v01, KeyAlgoSKED25519, CertAlgoSKED25519v01:
		out.Rest = in
		return out, nil, ok
	}

	return out, in, ok
}

func parseSignature(in []byte) (out *Signature, rest []byte, ok bool) {
	sigBytes, rest, ok := parseString(in)
	if !ok {
		return
	}

	out, trailing, ok := parseSignatureBody(sigBytes)
	if !ok || len(trailing) > 0 {
		return nil, nil, false
	}
	return
}
07070100000D12000081A4000000000000000000000001645E367C00003F26000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/channel.go // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package ssh

import (
	"encoding/binary"
	"errors"
	"fmt"
	"io"
	"log"
	"sync"
)

const (
	minPacketLength = 9
	// channelMaxPacket contains the maximum number of bytes that will be
	// sent in a single packet. As per RFC 4253, section 6.1, 32k is also
	// the minimum.
	channelMaxPacket = 1 << 15
	// We follow OpenSSH here.
	channelWindowSize = 64 * channelMaxPacket
)

// NewChannel represents an incoming request to a channel. It must either be
// accepted for use by calling Accept, or rejected by calling Reject.
type NewChannel interface {
	// Accept accepts the channel creation request. It returns the Channel
	// and a Go channel containing SSH requests. The Go channel must be
	// serviced otherwise the Channel will hang.
	Accept() (Channel, <-chan *Request, error)

	// Reject rejects the channel creation request. After calling
	// this, no other methods on the Channel may be called.
	Reject(reason RejectionReason, message string) error

	// ChannelType returns the type of the channel, as supplied by the
	// client.
	ChannelType() string

	// ExtraData returns the arbitrary payload for this channel, as supplied
	// by the client. This data is specific to the channel type.
	ExtraData() []byte
}

// A Channel is an ordered, reliable, flow-controlled, duplex stream
// that is multiplexed over an SSH connection.
type Channel interface {
	// Read reads up to len(data) bytes from the channel.
	Read(data []byte) (int, error)

	// Write writes len(data) bytes to the channel.
	Write(data []byte) (int, error)

	// Close signals end of channel use. No data may be sent after this
	// call.
	Close() error

	// CloseWrite signals the end of sending in-band
	// data. Requests may still be sent, and the other side may
	// still send data
	CloseWrite() error

	// SendRequest sends a channel request.  If wantReply is true,
	// it will wait for a reply and return the result as a
	// boolean, otherwise the return value will be false. Channel
	// requests are out-of-band messages so they may be sent even
	// if the data stream is closed or blocked by flow control.
	// If the channel is closed before a reply is returned, io.EOF
	// is returned.
	SendRequest(name string, wantReply bool, payload []byte) (bool, error)

	// Stderr returns an io.ReadWriter that writes to this channel
	// with the extended data type set to stderr. Stderr may
	// safely be read and written from a different goroutine than
	// Read and Write respectively.
	Stderr() io.ReadWriter
}

// Request is a request sent outside of the normal stream of
// data. Requests can either be specific to an SSH channel, or they
// can be global.
type Request struct {
	Type      string
	WantReply bool
	Payload   []byte

	ch  *channel
	mux *mux
}

// Reply sends a response to a request. It must be called for all requests
// where WantReply is true and is a no-op otherwise. The payload argument is
// ignored for replies to channel-specific requests.
func (r *Request) Reply(ok bool, payload []byte) error {
	if !r.WantReply {
		return nil
	}

	if r.ch == nil {
		return r.mux.ackRequest(ok, payload)
	}

	return r.ch.ackRequest(ok)
}

// RejectionReason is an enumeration used when rejecting channel creation
// requests. See RFC 4254, section 5.1.
type RejectionReason uint32

const (
	Prohibited RejectionReason = iota + 1
	ConnectionFailed
	UnknownChannelType
	ResourceShortage
)

// String converts the rejection reason to human readable form.
func (r RejectionReason) String() string {
	switch r {
	case Prohibited:
		return "administratively prohibited"
	case ConnectionFailed:
		return "connect failed"
	case UnknownChannelType:
		return "unknown channel type"
	case ResourceShortage:
		return "resource shortage"
	}
	return fmt.Sprintf("unknown reason %d", int(r))
}

func min(a uint32, b int) uint32 {
	if a < uint32(b) {
		return a
	}
	return uint32(b)
}

type channelDirection uint8

const (
	channelInbound channelDirection = iota
	channelOutbound
)

// channel is an implementation of the Channel interface that works
// with the mux class.
type channel struct {
	// R/O after creation
	chanType          string
	extraData         []byte
	localId, remoteId uint32

	// maxIncomingPayload and maxRemotePayload are the maximum
	// payload sizes of normal and extended data packets for
	// receiving and sending, respectively. The wire packet will
	// be 9 or 13 bytes larger (excluding encryption overhead).
	maxIncomingPayload uint32
	maxRemotePayload   uint32

	mux *mux

	// decided is set to true if an accept or reject message has been sent
	// (for outbound channels) or received (for inbound channels).
	decided bool

	// direction contains either channelOutbound, for channels created
	// locally, or channelInbound, for channels created by the peer.
	direction channelDirection

	// Pending internal channel messages.
	msg chan interface{}

	// Since requests have no ID, there can be only one request
	// with WantReply=true outstanding.  This lock is held by a
	// goroutine that has such an outgoing request pending.
	sentRequestMu sync.Mutex

	incomingRequests chan *Request

	sentEOF bool

	// thread-safe data
	remoteWin  window
	pending    *buffer
	extPending *buffer

	// windowMu protects myWindow, the flow-control window.
	windowMu sync.Mutex
	myWindow uint32

	// writeMu serializes calls to mux.conn.writePacket() and
	// protects sentClose and packetPool. This mutex must be
	// different from windowMu, as writePacket can block if there
	// is a key exchange pending.
	writeMu   sync.Mutex
	sentClose bool

	// packetPool has a buffer for each extended channel ID to
	// save allocations during writes.
	packetPool map[uint32][]byte
}

// writePacket sends a packet. If the packet is a channel close, it updates
// sentClose. This method takes the lock c.writeMu.
func (ch *channel) writePacket(packet []byte) error {
	ch.writeMu.Lock()
	if ch.sentClose {
		ch.writeMu.Unlock()
		return io.EOF
	}
	ch.sentClose = (packet[0] == msgChannelClose)
	err := ch.mux.conn.writePacket(packet)
	ch.writeMu.Unlock()
	return err
}

func (ch *channel) sendMessage(msg interface{}) error {
	if debugMux {
		log.Printf("send(%d): %#v", ch.mux.chanList.offset, msg)
	}

	p := Marshal(msg)
	binary.BigEndian.PutUint32(p[1:], ch.remoteId)
	return ch.writePacket(p)
}

// WriteExtended writes data to a specific extended stream. These streams are
// used, for example, for stderr.
func (ch *channel) WriteExtended(data []byte, extendedCode uint32) (n int, err error) {
	if ch.sentEOF {
		return 0, io.EOF
	}
	// 1 byte message type, 4 bytes remoteId, 4 bytes data length
	opCode := byte(msgChannelData)
	headerLength := uint32(9)
	if extendedCode > 0 {
		headerLength += 4
		opCode = msgChannelExtendedData
	}

	ch.writeMu.Lock()
	packet := ch.packetPool[extendedCode]
	// We don't remove the buffer from packetPool, so
	// WriteExtended calls from different goroutines will be
	// flagged as errors by the race detector.
	ch.writeMu.Unlock()

	for len(data) > 0 {
		space := min(ch.maxRemotePayload, len(data))
		if space, err = ch.remoteWin.reserve(space); err != nil {
			return n, err
		}
		if want := headerLength + space; uint32(cap(packet)) < want {
			packet = make([]byte, want)
		} else {
			packet = packet[:want]
		}

		todo := data[:space]

		packet[0] = opCode
		binary.BigEndian.PutUint32(packet[1:], ch.remoteId)
		if extendedCode > 0 {
			binary.BigEndian.PutUint32(packet[5:], uint32(extendedCode))
		}
		binary.BigEndian.PutUint32(packet[headerLength-4:], uint32(len(todo)))
		copy(packet[headerLength:], todo)
		if err = ch.writePacket(packet); err != nil {
			return n, err
		}

		n += len(todo)
		data = data[len(todo):]
	}

	ch.writeMu.Lock()
	ch.packetPool[extendedCode] = packet
	ch.writeMu.Unlock()

	return n, err
}

func (ch *channel) handleData(packet []byte) error {
	headerLen := 9
	isExtendedData := packet[0] == msgChannelExtendedData
	if isExtendedData {
		headerLen = 13
	}
	if len(packet) < headerLen {
		// malformed data packet
		return parseError(packet[0])
	}

	var extended uint32
	if isExtendedData {
		extended = binary.BigEndian.Uint32(packet[5:])
	}

	length := binary.BigEndian.Uint32(packet[headerLen-4 : headerLen])
	if length == 0 {
		return nil
	}
	if length > ch.maxIncomingPayload {
		// TODO(hanwen): should send Disconnect?
		return errors.New("ssh: incoming packet exceeds maximum payload size")
	}

	data := packet[headerLen:]
	if length != uint32(len(data)) {
		return errors.New("ssh: wrong packet length")
	}

	ch.windowMu.Lock()
	if ch.myWindow < length {
		ch.windowMu.Unlock()
		// TODO(hanwen): should send Disconnect with reason?
		return errors.New("ssh: remote side wrote too much")
	}
	ch.myWindow -= length
	ch.windowMu.Unlock()

	if extended == 1 {
		ch.extPending.write(data)
	} else if extended > 0 {
		// discard other extended data.
	} else {
		ch.pending.write(data)
	}
	return nil
}

func (c *channel) adjustWindow(n uint32) error {
	c.windowMu.Lock()
	// Since myWindow is managed on our side, and can never exceed
	// the initial window setting, we don't worry about overflow.
	c.myWindow += uint32(n)
	c.windowMu.Unlock()
	return c.sendMessage(windowAdjustMsg{
		AdditionalBytes: uint32(n),
	})
}

func (c *channel) ReadExtended(data []byte, extended uint32) (n int, err error) {
	switch extended {
	case 1:
		n, err = c.extPending.Read(data)
	case 0:
		n, err = c.pending.Read(data)
	default:
		return 0, fmt.Errorf("ssh: extended code %d unimplemented", extended)
	}

	if n > 0 {
		err = c.adjustWindow(uint32(n))
		// sendWindowAdjust can return io.EOF if the remote
		// peer has closed the connection, however we want to
		// defer forwarding io.EOF to the caller of Read until
		// the buffer has been drained.
		if n > 0 && err == io.EOF {
			err = nil
		}
	}

	return n, err
}

func (c *channel) close() {
	c.pending.eof()
	c.extPending.eof()
	close(c.msg)
	close(c.incomingRequests)
	c.writeMu.Lock()
	// This is not necessary for a normal channel teardown, but if
	// there was another error, it is.
	c.sentClose = true
	c.writeMu.Unlock()
	// Unblock writers.
	c.remoteWin.close()
}

// responseMessageReceived is called when a success or failure message is
// received on a channel to check that such a message is reasonable for the
// given channel.
func (ch *channel) responseMessageReceived() error {
	if ch.direction == channelInbound {
		return errors.New("ssh: channel response message received on inbound channel")
	}
	if ch.decided {
		return errors.New("ssh: duplicate response received for channel")
	}
	ch.decided = true
	return nil
}

func (ch *channel) handlePacket(packet []byte) error {
	switch packet[0] {
	case msgChannelData, msgChannelExtendedData:
		return ch.handleData(packet)
	case msgChannelClose:
		ch.sendMessage(channelCloseMsg{PeersID: ch.remoteId})
		ch.mux.chanList.remove(ch.localId)
		ch.close()
		return nil
	case msgChannelEOF:
		// RFC 4254 is mute on how EOF affects dataExt messages but
		// it is logical to signal EOF at the same time.
		ch.extPending.eof()
		ch.pending.eof()
		return nil
	}

	decoded, err := decode(packet)
	if err != nil {
		return err
	}

	switch msg := decoded.(type) {
	case *channelOpenFailureMsg:
		if err := ch.responseMessageReceived(); err != nil {
			return err
		}
		ch.mux.chanList.remove(msg.PeersID)
		ch.msg <- msg
	case *channelOpenConfirmMsg:
		if err := ch.responseMessageReceived(); err != nil {
			return err
		}
		if msg.MaxPacketSize < minPacketLength || msg.MaxPacketSize > 1<<31 {
			return fmt.Errorf("ssh: invalid MaxPacketSize %d from peer", msg.MaxPacketSize)
		}
		ch.remoteId = msg.MyID
		ch.maxRemotePayload = msg.MaxPacketSize
		ch.remoteWin.add(msg.MyWindow)
		ch.msg <- msg
	case *windowAdjustMsg:
		if !ch.remoteWin.add(msg.AdditionalBytes) {
			return fmt.Errorf("ssh: invalid window update for %d bytes", msg.AdditionalBytes)
		}
	case *channelRequestMsg:
		req := Request{
			Type:      msg.Request,
			WantReply: msg.WantReply,
			Payload:   msg.RequestSpecificData,
			ch:        ch,
		}

		ch.incomingRequests <- &req
	default:
		ch.msg <- msg
	}
	return nil
}

func (m *mux) newChannel(chanType string, direction channelDirection, extraData []byte) *channel {
	ch := &channel{
		remoteWin:        window{Cond: newCond()},
		myWindow:         channelWindowSize,
		pending:          newBuffer(),
		extPending:       newBuffer(),
		direction:        direction,
		incomingRequests: make(chan *Request, chanSize),
		msg:              make(chan interface{}, chanSize),
		chanType:         chanType,
		extraData:        extraData,
		mux:              m,
		packetPool:       make(map[uint32][]byte),
	}
	ch.localId = m.chanList.add(ch)
	return ch
}

var errUndecided = errors.New("ssh: must Accept or Reject channel")
var errDecidedAlready = errors.New("ssh: can call Accept or Reject only once")

type extChannel struct {
	code uint32
	ch   *channel
}

func (e *extChannel) Write(data []byte) (n int, err error) {
	return e.ch.WriteExtended(data, e.code)
}

func (e *extChannel) Read(data []byte) (n int, err error) {
	return e.ch.ReadExtended(data, e.code)
}

func (ch *channel) Accept() (Channel, <-chan *Request, error) {
	if ch.decided {
		return nil, nil, errDecidedAlready
	}
	ch.maxIncomingPayload = channelMaxPacket
	confirm := channelOpenConfirmMsg{
		PeersID:       ch.remoteId,
		MyID:          ch.localId,
		MyWindow:      ch.myWindow,
		MaxPacketSize: ch.maxIncomingPayload,
	}
	ch.decided = true
	if err := ch.sendMessage(confirm); err != nil {
		return nil, nil, err
	}

	return ch, ch.incomingRequests, nil
}

func (ch *channel) Reject(reason RejectionReason, message string) error {
	if ch.decided {
		return errDecidedAlready
	}
	reject := channelOpenFailureMsg{
		PeersID:  ch.remoteId,
		Reason:   reason,
		Message:  message,
		Language: "en",
	}
	ch.decided = true
	return ch.sendMessage(reject)
}

func (ch *channel) Read(data []byte) (int, error) {
	if !ch.decided {
		return 0, errUndecided
	}
	return ch.ReadExtended(data, 0)
}

func (ch *channel) Write(data []byte) (int, error) {
	if !ch.decided {
		return 0, errUndecided
	}
	return ch.WriteExtended(data, 0)
}

func (ch *channel) CloseWrite() error {
	if !ch.decided {
		return errUndecided
	}
	ch.sentEOF = true
	return ch.sendMessage(channelEOFMsg{
		PeersID: ch.remoteId})
}

func (ch *channel) Close() error {
	if !ch.decided {
		return errUndecided
	}

	return ch.sendMessage(channelCloseMsg{
		PeersID: ch.remoteId})
}

// Extended returns an io.ReadWriter that sends and receives data on the given,
// SSH extended stream. Such streams are used, for example, for stderr.
func (ch *channel) Extended(code uint32) io.ReadWriter {
	if !ch.decided {
		return nil
	}
	return &extChannel{code, ch}
}

func (ch *channel) Stderr() io.ReadWriter {
	return ch.Extended(1)
}

func (ch *channel) SendRequest(name string, wantReply bool, payload []byte) (bool, error) {
	if !ch.decided {
		return false, errUndecided
	}

	if wantReply {
		ch.sentRequestMu.Lock()
		defer ch.sentRequestMu.Unlock()
	}

	msg := channelRequestMsg{
		PeersID:             ch.remoteId,
		Request:             name,
		WantReply:           wantReply,
		RequestSpecificData: payload,
	}

	if err := ch.sendMessage(msg); err != nil {
		return false, err
	}

	if wantReply {
		m, ok := (<-ch.msg)
		if !ok {
			return false, io.EOF
		}
		switch m.(type) {
		case *channelRequestFailureMsg:
			return false, nil
		case *channelRequestSuccessMsg:
			return true, nil
		default:
			return false, fmt.Errorf("ssh: unexpected response to channel request: %#v", m)
		}
	}

	return false, nil
}

// ackRequest either sends an ack or nack to the channel request.
func (ch *channel) ackRequest(ok bool) error {
	if !ch.decided {
		return errUndecided
	}

	var msg interface{}
	if !ok {
		msg = channelRequestFailureMsg{
			PeersID: ch.remoteId,
		}
	} else {
		msg = channelRequestSuccessMsg{
			PeersID: ch.remoteId,
		}
	}
	return ch.sendMessage(msg)
}

func (ch *channel) ChannelType() string {
	return ch.chanType
}

func (ch *channel) ExtraData() []byte {
	return ch.extraData
}
  07070100000D13000081A4000000000000000000000001645E367C000054FE000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/cipher.go  // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package ssh

import (
	"crypto/aes"
	"crypto/cipher"
	"crypto/des"
	"crypto/rc4"
	"crypto/subtle"
	"encoding/binary"
	"errors"
	"fmt"
	"hash"
	"io"

	"golang.org/x/crypto/chacha20"
	"golang.org/x/crypto/internal/poly1305"
)

const (
	packetSizeMultiple = 16 // TODO(huin) this should be determined by the cipher.

	// RFC 4253 section 6.1 defines a minimum packet size of 32768 that implementations
	// MUST be able to process (plus a few more kilobytes for padding and mac). The RFC
	// indicates implementations SHOULD be able to handle larger packet sizes, but then
	// waffles on about reasonable limits.
	//
	// OpenSSH caps their maxPacket at 256kB so we choose to do
	// the same. maxPacket is also used to ensure that uint32
	// length fields do not overflow, so it should remain well
	// below 4G.
	maxPacket = 256 * 1024
)

// noneCipher implements cipher.Stream and provides no encryption. It is used
// by the transport before the first key-exchange.
type noneCipher struct{}

func (c noneCipher) XORKeyStream(dst, src []byte) {
	copy(dst, src)
}

func newAESCTR(key, iv []byte) (cipher.Stream, error) {
	c, err := aes.NewCipher(key)
	if err != nil {
		return nil, err
	}
	return cipher.NewCTR(c, iv), nil
}

func newRC4(key, iv []byte) (cipher.Stream, error) {
	return rc4.NewCipher(key)
}

type cipherMode struct {
	keySize int
	ivSize  int
	create  func(key, iv []byte, macKey []byte, algs directionAlgorithms) (packetCipher, error)
}

func streamCipherMode(skip int, createFunc func(key, iv []byte) (cipher.Stream, error)) func(key, iv []byte, macKey []byte, algs directionAlgorithms) (packetCipher, error) {
	return func(key, iv, macKey []byte, algs directionAlgorithms) (packetCipher, error) {
		stream, err := createFunc(key, iv)
		if err != nil {
			return nil, err
		}

		var streamDump []byte
		if skip > 0 {
			streamDump = make([]byte, 512)
		}

		for remainingToDump := skip; remainingToDump > 0; {
			dumpThisTime := remainingToDump
			if dumpThisTime > len(streamDump) {
				dumpThisTime = len(streamDump)
			}
			stream.XORKeyStream(streamDump[:dumpThisTime], streamDump[:dumpThisTime])
			remainingToDump -= dumpThisTime
		}

		mac := macModes[algs.MAC].new(macKey)
		return &streamPacketCipher{
			mac:       mac,
			etm:       macModes[algs.MAC].etm,
			macResult: make([]byte, mac.Size()),
			cipher:    stream,
		}, nil
	}
}

// cipherModes documents properties of supported ciphers. Ciphers not included
// are not supported and will not be negotiated, even if explicitly requested in
// ClientConfig.Crypto.Ciphers.
var cipherModes = map[string]*cipherMode{
	// Ciphers from RFC 4344, which introduced many CTR-based ciphers. Algorithms
	// are defined in the order specified in the RFC.
	"aes128-ctr": {16, aes.BlockSize, streamCipherMode(0, newAESCTR)},
	"aes192-ctr": {24, aes.BlockSize, streamCipherMode(0, newAESCTR)},
	"aes256-ctr": {32, aes.BlockSize, streamCipherMode(0, newAESCTR)},

	// Ciphers from RFC 4345, which introduces security-improved arcfour ciphers.
	// They are defined in the order specified in the RFC.
	"arcfour128": {16, 0, streamCipherMode(1536, newRC4)},
	"arcfour256": {32, 0, streamCipherMode(1536, newRC4)},

	// Cipher defined in RFC 4253, which describes SSH Transport Layer Protocol.
	// Note that this cipher is not safe, as stated in RFC 4253: "Arcfour (and
	// RC4) has problems with weak keys, and should be used with caution."
	// RFC 4345 introduces improved versions of Arcfour.
	"arcfour": {16, 0, streamCipherMode(0, newRC4)},

	// AEAD ciphers
	gcm128CipherID:     {16, 12, newGCMCipher},
	gcm256CipherID:     {32, 12, newGCMCipher},
	chacha20Poly1305ID: {64, 0, newChaCha20Cipher},

	// CBC mode is insecure and so is not included in the default config.
	// (See https://www.ieee-security.org/TC/SP2013/papers/4977a526.pdf). If absolutely
	// needed, it's possible to specify a custom Config to enable it.
	// You should expect that an active attacker can recover plaintext if
	// you do.
	aes128cbcID: {16, aes.BlockSize, newAESCBCCipher},

	// 3des-cbc is insecure and is not included in the default
	// config.
	tripledescbcID: {24, des.BlockSize, newTripleDESCBCCipher},
}

// prefixLen is the length of the packet prefix that contains the packet length
// and number of padding bytes.
const prefixLen = 5

// streamPacketCipher is a packetCipher using a stream cipher.
type streamPacketCipher struct {
	mac    hash.Hash
	cipher cipher.Stream
	etm    bool

	// The following members are to avoid per-packet allocations.
	prefix      [prefixLen]byte
	seqNumBytes [4]byte
	padding     [2 * packetSizeMultiple]byte
	packetData  []byte
	macResult   []byte
}

// readCipherPacket reads and decrypt a single packet from the reader argument.
func (s *streamPacketCipher) readCipherPacket(seqNum uint32, r io.Reader) ([]byte, error) {
	if _, err := io.ReadFull(r, s.prefix[:]); err != nil {
		return nil, err
	}

	var encryptedPaddingLength [1]byte
	if s.mac != nil && s.etm {
		copy(encryptedPaddingLength[:], s.prefix[4:5])
		s.cipher.XORKeyStream(s.prefix[4:5], s.prefix[4:5])
	} else {
		s.cipher.XORKeyStream(s.prefix[:], s.prefix[:])
	}

	length := binary.BigEndian.Uint32(s.prefix[0:4])
	paddingLength := uint32(s.prefix[4])

	var macSize uint32
	if s.mac != nil {
		s.mac.Reset()
		binary.BigEndian.PutUint32(s.seqNumBytes[:], seqNum)
		s.mac.Write(s.seqNumBytes[:])
		if s.etm {
			s.mac.Write(s.prefix[:4])
			s.mac.Write(encryptedPaddingLength[:])
		} else {
			s.mac.Write(s.prefix[:])
		}
		macSize = uint32(s.mac.Size())
	}

	if length <= paddingLength+1 {
		return nil, errors.New("ssh: invalid packet length, packet too small")
	}

	if length > maxPacket {
		return nil, errors.New("ssh: invalid packet length, packet too large")
	}

	// the maxPacket check above ensures that length-1+macSize
	// does not overflow.
	if uint32(cap(s.packetData)) < length-1+macSize {
		s.packetData = make([]byte, length-1+macSize)
	} else {
		s.packetData = s.packetData[:length-1+macSize]
	}

	if _, err := io.ReadFull(r, s.packetData); err != nil {
		return nil, err
	}
	mac := s.packetData[length-1:]
	data := s.packetData[:length-1]

	if s.mac != nil && s.etm {
		s.mac.Write(data)
	}

	s.cipher.XORKeyStream(data, data)

	if s.mac != nil {
		if !s.etm {
			s.mac.Write(data)
		}
		s.macResult = s.mac.Sum(s.macResult[:0])
		if subtle.ConstantTimeCompare(s.macResult, mac) != 1 {
			return nil, errors.New("ssh: MAC failure")
		}
	}

	return s.packetData[:length-paddingLength-1], nil
}

// writeCipherPacket encrypts and sends a packet of data to the writer argument
func (s *streamPacketCipher) writeCipherPacket(seqNum uint32, w io.Writer, rand io.Reader, packet []byte) error {
	if len(packet) > maxPacket {
		return errors.New("ssh: packet too large")
	}

	aadlen := 0
	if s.mac != nil && s.etm {
		// packet length is not encrypted for EtM modes
		aadlen = 4
	}

	paddingLength := packetSizeMultiple - (prefixLen+len(packet)-aadlen)%packetSizeMultiple
	if paddingLength < 4 {
		paddingLength += packetSizeMultiple
	}

	length := len(packet) + 1 + paddingLength
	binary.BigEndian.PutUint32(s.prefix[:], uint32(length))
	s.prefix[4] = byte(paddingLength)
	padding := s.padding[:paddingLength]
	if _, err := io.ReadFull(rand, padding); err != nil {
		return err
	}

	if s.mac != nil {
		s.mac.Reset()
		binary.BigEndian.PutUint32(s.seqNumBytes[:], seqNum)
		s.mac.Write(s.seqNumBytes[:])

		if s.etm {
			// For EtM algorithms, the packet length must stay unencrypted,
			// but the following data (padding length) must be encrypted
			s.cipher.XORKeyStream(s.prefix[4:5], s.prefix[4:5])
		}

		s.mac.Write(s.prefix[:])

		if !s.etm {
			// For non-EtM algorithms, the algorithm is applied on unencrypted data
			s.mac.Write(packet)
			s.mac.Write(padding)
		}
	}

	if !(s.mac != nil && s.etm) {
		// For EtM algorithms, the padding length has already been encrypted
		// and the packet length must remain unencrypted
		s.cipher.XORKeyStream(s.prefix[:], s.prefix[:])
	}

	s.cipher.XORKeyStream(packet, packet)
	s.cipher.XORKeyStream(padding, padding)

	if s.mac != nil && s.etm {
		// For EtM algorithms, packet and padding must be encrypted
		s.mac.Write(packet)
		s.mac.Write(padding)
	}

	if _, err := w.Write(s.prefix[:]); err != nil {
		return err
	}
	if _, err := w.Write(packet); err != nil {
		return err
	}
	if _, err := w.Write(padding); err != nil {
		return err
	}

	if s.mac != nil {
		s.macResult = s.mac.Sum(s.macResult[:0])
		if _, err := w.Write(s.macResult); err != nil {
			return err
		}
	}

	return nil
}

type gcmCipher struct {
	aead   cipher.AEAD
	prefix [4]byte
	iv     []byte
	buf    []byte
}

func newGCMCipher(key, iv, unusedMacKey []byte, unusedAlgs directionAlgorithms) (packetCipher, error) {
	c, err := aes.NewCipher(key)
	if err != nil {
		return nil, err
	}

	aead, err := cipher.NewGCM(c)
	if err != nil {
		return nil, err
	}

	return &gcmCipher{
		aead: aead,
		iv:   iv,
	}, nil
}

const gcmTagSize = 16

func (c *gcmCipher) writeCipherPacket(seqNum uint32, w io.Writer, rand io.Reader, packet []byte) error {
	// Pad out to multiple of 16 bytes. This is different from the
	// stream cipher because that encrypts the length too.
	padding := byte(packetSizeMultiple - (1+len(packet))%packetSizeMultiple)
	if padding < 4 {
		padding += packetSizeMultiple
	}

	length := uint32(len(packet) + int(padding) + 1)
	binary.BigEndian.PutUint32(c.prefix[:], length)
	if _, err := w.Write(c.prefix[:]); err != nil {
		return err
	}

	if cap(c.buf) < int(length) {
		c.buf = make([]byte, length)
	} else {
		c.buf = c.buf[:length]
	}

	c.buf[0] = padding
	copy(c.buf[1:], packet)
	if _, err := io.ReadFull(rand, c.buf[1+len(packet):]); err != nil {
		return err
	}
	c.buf = c.aead.Seal(c.buf[:0], c.iv, c.buf, c.prefix[:])
	if _, err := w.Write(c.buf); err != nil {
		return err
	}
	c.incIV()

	return nil
}

func (c *gcmCipher) incIV() {
	for i := 4 + 7; i >= 4; i-- {
		c.iv[i]++
		if c.iv[i] != 0 {
			break
		}
	}
}

func (c *gcmCipher) readCipherPacket(seqNum uint32, r io.Reader) ([]byte, error) {
	if _, err := io.ReadFull(r, c.prefix[:]); err != nil {
		return nil, err
	}
	length := binary.BigEndian.Uint32(c.prefix[:])
	if length > maxPacket {
		return nil, errors.New("ssh: max packet length exceeded")
	}

	if cap(c.buf) < int(length+gcmTagSize) {
		c.buf = make([]byte, length+gcmTagSize)
	} else {
		c.buf = c.buf[:length+gcmTagSize]
	}

	if _, err := io.ReadFull(r, c.buf); err != nil {
		return nil, err
	}

	plain, err := c.aead.Open(c.buf[:0], c.iv, c.buf, c.prefix[:])
	if err != nil {
		return nil, err
	}
	c.incIV()

	if len(plain) == 0 {
		return nil, errors.New("ssh: empty packet")
	}

	padding := plain[0]
	if padding < 4 {
		// padding is a byte, so it automatically satisfies
		// the maximum size, which is 255.
		return nil, fmt.Errorf("ssh: illegal padding %d", padding)
	}

	if int(padding+1) >= len(plain) {
		return nil, fmt.Errorf("ssh: padding %d too large", padding)
	}
	plain = plain[1 : length-uint32(padding)]
	return plain, nil
}

// cbcCipher implements aes128-cbc cipher defined in RFC 4253 section 6.1
type cbcCipher struct {
	mac       hash.Hash
	macSize   uint32
	decrypter cipher.BlockMode
	encrypter cipher.BlockMode

	// The following members are to avoid per-packet allocations.
	seqNumBytes [4]byte
	packetData  []byte
	macResult   []byte

	// Amount of data we should still read to hide which
	// verification error triggered.
	oracleCamouflage uint32
}

func newCBCCipher(c cipher.Block, key, iv, macKey []byte, algs directionAlgorithms) (packetCipher, error) {
	cbc := &cbcCipher{
		mac:        macModes[algs.MAC].new(macKey),
		decrypter:  cipher.NewCBCDecrypter(c, iv),
		encrypter:  cipher.NewCBCEncrypter(c, iv),
		packetData: make([]byte, 1024),
	}
	if cbc.mac != nil {
		cbc.macSize = uint32(cbc.mac.Size())
	}

	return cbc, nil
}

func newAESCBCCipher(key, iv, macKey []byte, algs directionAlgorithms) (packetCipher, error) {
	c, err := aes.NewCipher(key)
	if err != nil {
		return nil, err
	}

	cbc, err := newCBCCipher(c, key, iv, macKey, algs)
	if err != nil {
		return nil, err
	}

	return cbc, nil
}

func newTripleDESCBCCipher(key, iv, macKey []byte, algs directionAlgorithms) (packetCipher, error) {
	c, err := des.NewTripleDESCipher(key)
	if err != nil {
		return nil, err
	}

	cbc, err := newCBCCipher(c, key, iv, macKey, algs)
	if err != nil {
		return nil, err
	}

	return cbc, nil
}

func maxUInt32(a, b int) uint32 {
	if a > b {
		return uint32(a)
	}
	return uint32(b)
}

const (
	cbcMinPacketSizeMultiple = 8
	cbcMinPacketSize         = 16
	cbcMinPaddingSize        = 4
)

// cbcError represents a verification error that may leak information.
type cbcError string

func (e cbcError) Error() string { return string(e) }

func (c *cbcCipher) readCipherPacket(seqNum uint32, r io.Reader) ([]byte, error) {
	p, err := c.readCipherPacketLeaky(seqNum, r)
	if err != nil {
		if _, ok := err.(cbcError); ok {
			// Verification error: read a fixed amount of
			// data, to make distinguishing between
			// failing MAC and failing length check more
			// difficult.
			io.CopyN(io.Discard, r, int64(c.oracleCamouflage))
		}
	}
	return p, err
}

func (c *cbcCipher) readCipherPacketLeaky(seqNum uint32, r io.Reader) ([]byte, error) {
	blockSize := c.decrypter.BlockSize()

	// Read the header, which will include some of the subsequent data in the
	// case of block ciphers - this is copied back to the payload later.
	// How many bytes of payload/padding will be read with this first read.
	firstBlockLength := uint32((prefixLen + blockSize - 1) / blockSize * blockSize)
	firstBlock := c.packetData[:firstBlockLength]
	if _, err := io.ReadFull(r, firstBlock); err != nil {
		return nil, err
	}

	c.oracleCamouflage = maxPacket + 4 + c.macSize - firstBlockLength

	c.decrypter.CryptBlocks(firstBlock, firstBlock)
	length := binary.BigEndian.Uint32(firstBlock[:4])
	if length > maxPacket {
		return nil, cbcError("ssh: packet too large")
	}
	if length+4 < maxUInt32(cbcMinPacketSize, blockSize) {
		// The minimum size of a packet is 16 (or the cipher block size, whichever
		// is larger) bytes.
		return nil, cbcError("ssh: packet too small")
	}
	// The length of the packet (including the length field but not the MAC) must
	// be a multiple of the block size or 8, whichever is larger.
	if (length+4)%maxUInt32(cbcMinPacketSizeMultiple, blockSize) != 0 {
		return nil, cbcError("ssh: invalid packet length multiple")
	}

	paddingLength := uint32(firstBlock[4])
	if paddingLength < cbcMinPaddingSize || length <= paddingLength+1 {
		return nil, cbcError("ssh: invalid packet length")
	}

	// Positions within the c.packetData buffer:
	macStart := 4 + length
	paddingStart := macStart - paddingLength

	// Entire packet size, starting before length, ending at end of mac.
	entirePacketSize := macStart + c.macSize

	// Ensure c.packetData is large enough for the entire packet data.
	if uint32(cap(c.packetData)) < entirePacketSize {
		// Still need to upsize and copy, but this should be rare at runtime, only
		// on upsizing the packetData buffer.
		c.packetData = make([]byte, entirePacketSize)
		copy(c.packetData, firstBlock)
	} else {
		c.packetData = c.packetData[:entirePacketSize]
	}

	n, err := io.ReadFull(r, c.packetData[firstBlockLength:])
	if err != nil {
		return nil, err
	}
	c.oracleCamouflage -= uint32(n)

	remainingCrypted := c.packetData[firstBlockLength:macStart]
	c.decrypter.CryptBlocks(remainingCrypted, remainingCrypted)

	mac := c.packetData[macStart:]
	if c.mac != nil {
		c.mac.Reset()
		binary.BigEndian.PutUint32(c.seqNumBytes[:], seqNum)
		c.mac.Write(c.seqNumBytes[:])
		c.mac.Write(c.packetData[:macStart])
		c.macResult = c.mac.Sum(c.macResult[:0])
		if subtle.ConstantTimeCompare(c.macResult, mac) != 1 {
			return nil, cbcError("ssh: MAC failure")
		}
	}

	return c.packetData[prefixLen:paddingStart], nil
}

func (c *cbcCipher) writeCipherPacket(seqNum uint32, w io.Writer, rand io.Reader, packet []byte) error {
	effectiveBlockSize := maxUInt32(cbcMinPacketSizeMultiple, c.encrypter.BlockSize())

	// Length of encrypted portion of the packet (header, payload, padding).
	// Enforce minimum padding and packet size.
	encLength := maxUInt32(prefixLen+len(packet)+cbcMinPaddingSize, cbcMinPaddingSize)
	// Enforce block size.
	encLength = (encLength + effectiveBlockSize - 1) / effectiveBlockSize * effectiveBlockSize

	length := encLength - 4
	paddingLength := int(length) - (1 + len(packet))

	// Overall buffer contains: header, payload, padding, mac.
	// Space for the MAC is reserved in the capacity but not the slice length.
	bufferSize := encLength + c.macSize
	if uint32(cap(c.packetData)) < bufferSize {
		c.packetData = make([]byte, encLength, bufferSize)
	} else {
		c.packetData = c.packetData[:encLength]
	}

	p := c.packetData

	// Packet header.
	binary.BigEndian.PutUint32(p, length)
	p = p[4:]
	p[0] = byte(paddingLength)

	// Payload.
	p = p[1:]
	copy(p, packet)

	// Padding.
	p = p[len(packet):]
	if _, err := io.ReadFull(rand, p); err != nil {
		return err
	}

	if c.mac != nil {
		c.mac.Reset()
		binary.BigEndian.PutUint32(c.seqNumBytes[:], seqNum)
		c.mac.Write(c.seqNumBytes[:])
		c.mac.Write(c.packetData)
		// The MAC is now appended into the capacity reserved for it earlier.
		c.packetData = c.mac.Sum(c.packetData)
	}

	c.encrypter.CryptBlocks(c.packetData[:encLength], c.packetData[:encLength])

	if _, err := w.Write(c.packetData); err != nil {
		return err
	}

	return nil
}

const chacha20Poly1305ID = "chacha20-poly1305@openssh.com"

// chacha20Poly1305Cipher implements the chacha20-poly1305@openssh.com
// AEAD, which is described here:
//
//	https://tools.ietf.org/html/draft-josefsson-ssh-chacha20-poly1305-openssh-00
//
// the methods here also implement padding, which RFC 4253 Section 6
// also requires of stream ciphers.
type chacha20Poly1305Cipher struct {
	lengthKey  [32]byte
	contentKey [32]byte
	buf        []byte
}

func newChaCha20Cipher(key, unusedIV, unusedMACKey []byte, unusedAlgs directionAlgorithms) (packetCipher, error) {
	if len(key) != 64 {
		panic(len(key))
	}

	c := &chacha20Poly1305Cipher{
		buf: make([]byte, 256),
	}

	copy(c.contentKey[:], key[:32])
	copy(c.lengthKey[:], key[32:])
	return c, nil
}

func (c *chacha20Poly1305Cipher) readCipherPacket(seqNum uint32, r io.Reader) ([]byte, error) {
	nonce := make([]byte, 12)
	binary.BigEndian.PutUint32(nonce[8:], seqNum)
	s, err := chacha20.NewUnauthenticatedCipher(c.contentKey[:], nonce)
	if err != nil {
		return nil, err
	}
	var polyKey, discardBuf [32]byte
	s.XORKeyStream(polyKey[:], polyKey[:])
	s.XORKeyStream(discardBuf[:], discardBuf[:]) // skip the next 32 bytes

	encryptedLength := c.buf[:4]
	if _, err := io.ReadFull(r, encryptedLength); err != nil {
		return nil, err
	}

	var lenBytes [4]byte
	ls, err := chacha20.NewUnauthenticatedCipher(c.lengthKey[:], nonce)
	if err != nil {
		return nil, err
	}
	ls.XORKeyStream(lenBytes[:], encryptedLength)

	length := binary.BigEndian.Uint32(lenBytes[:])
	if length > maxPacket {
		return nil, errors.New("ssh: invalid packet length, packet too large")
	}

	contentEnd := 4 + length
	packetEnd := contentEnd + poly1305.TagSize
	if uint32(cap(c.buf)) < packetEnd {
		c.buf = make([]byte, packetEnd)
		copy(c.buf[:], encryptedLength)
	} else {
		c.buf = c.buf[:packetEnd]
	}

	if _, err := io.ReadFull(r, c.buf[4:packetEnd]); err != nil {
		return nil, err
	}

	var mac [poly1305.TagSize]byte
	copy(mac[:], c.buf[contentEnd:packetEnd])
	if !poly1305.Verify(&mac, c.buf[:contentEnd], &polyKey) {
		return nil, errors.New("ssh: MAC failure")
	}

	plain := c.buf[4:contentEnd]
	s.XORKeyStream(plain, plain)

	if len(plain) == 0 {
		return nil, errors.New("ssh: empty packet")
	}

	padding := plain[0]
	if padding < 4 {
		// padding is a byte, so it automatically satisfies
		// the maximum size, which is 255.
		return nil, fmt.Errorf("ssh: illegal padding %d", padding)
	}

	if int(padding)+1 >= len(plain) {
		return nil, fmt.Errorf("ssh: padding %d too large", padding)
	}

	plain = plain[1 : len(plain)-int(padding)]

	return plain, nil
}

func (c *chacha20Poly1305Cipher) writeCipherPacket(seqNum uint32, w io.Writer, rand io.Reader, payload []byte) error {
	nonce := make([]byte, 12)
	binary.BigEndian.PutUint32(nonce[8:], seqNum)
	s, err := chacha20.NewUnauthenticatedCipher(c.contentKey[:], nonce)
	if err != nil {
		return err
	}
	var polyKey, discardBuf [32]byte
	s.XORKeyStream(polyKey[:], polyKey[:])
	s.XORKeyStream(discardBuf[:], discardBuf[:]) // skip the next 32 bytes

	// There is no blocksize, so fall back to multiple of 8 byte
	// padding, as described in RFC 4253, Sec 6.
	const packetSizeMultiple = 8

	padding := packetSizeMultiple - (1+len(payload))%packetSizeMultiple
	if padding < 4 {
		padding += packetSizeMultiple
	}

	// size (4 bytes), padding (1), payload, padding, tag.
	totalLength := 4 + 1 + len(payload) + padding + poly1305.TagSize
	if cap(c.buf) < totalLength {
		c.buf = make([]byte, totalLength)
	} else {
		c.buf = c.buf[:totalLength]
	}

	binary.BigEndian.PutUint32(c.buf, uint32(1+len(payload)+padding))
	ls, err := chacha20.NewUnauthenticatedCipher(c.lengthKey[:], nonce)
	if err != nil {
		return err
	}
	ls.XORKeyStream(c.buf, c.buf[:4])
	c.buf[4] = byte(padding)
	copy(c.buf[5:], payload)
	packetEnd := 5 + len(payload) + padding
	if _, err := io.ReadFull(rand, c.buf[5+len(payload):packetEnd]); err != nil {
		return err
	}

	s.XORKeyStream(c.buf[4:], c.buf[4:packetEnd])

	var mac [poly1305.TagSize]byte
	poly1305.Sum(&mac, c.buf[:packetEnd], &polyKey)

	copy(c.buf[packetEnd:], mac[:])

	if _, err := w.Write(c.buf); err != nil {
		return err
	}
	return nil
}
  07070100000D14000081A4000000000000000000000001645E367C00002255000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/client.go  // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package ssh

import (
	"bytes"
	"errors"
	"fmt"
	"net"
	"os"
	"sync"
	"time"
)

// Client implements a traditional SSH client that supports shells,
// subprocesses, TCP port/streamlocal forwarding and tunneled dialing.
type Client struct {
	Conn

	handleForwardsOnce sync.Once // guards calling (*Client).handleForwards

	forwards        forwardList // forwarded tcpip connections from the remote side
	mu              sync.Mutex
	channelHandlers map[string]chan NewChannel
}

// HandleChannelOpen returns a channel on which NewChannel requests
// for the given type are sent. If the type already is being handled,
// nil is returned. The channel is closed when the connection is closed.
func (c *Client) HandleChannelOpen(channelType string) <-chan NewChannel {
	c.mu.Lock()
	defer c.mu.Unlock()
	if c.channelHandlers == nil {
		// The SSH channel has been closed.
		c := make(chan NewChannel)
		close(c)
		return c
	}

	ch := c.channelHandlers[channelType]
	if ch != nil {
		return nil
	}

	ch = make(chan NewChannel, chanSize)
	c.channelHandlers[channelType] = ch
	return ch
}

// NewClient creates a Client on top of the given connection.
func NewClient(c Conn, chans <-chan NewChannel, reqs <-chan *Request) *Client {
	conn := &Client{
		Conn:            c,
		channelHandlers: make(map[string]chan NewChannel, 1),
	}

	go conn.handleGlobalRequests(reqs)
	go conn.handleChannelOpens(chans)
	go func() {
		conn.Wait()
		conn.forwards.closeAll()
	}()
	return conn
}

// NewClientConn establishes an authenticated SSH connection using c
// as the underlying transport.  The Request and NewChannel channels
// must be serviced or the connection will hang.
func NewClientConn(c net.Conn, addr string, config *ClientConfig) (Conn, <-chan NewChannel, <-chan *Request, error) {
	fullConf := *config
	fullConf.SetDefaults()
	if fullConf.HostKeyCallback == nil {
		c.Close()
		return nil, nil, nil, errors.New("ssh: must specify HostKeyCallback")
	}

	conn := &connection{
		sshConn: sshConn{conn: c, user: fullConf.User},
	}

	if err := conn.clientHandshake(addr, &fullConf); err != nil {
		c.Close()
		return nil, nil, nil, fmt.Errorf("ssh: handshake failed: %v", err)
	}
	conn.mux = newMux(conn.transport)
	return conn, conn.mux.incomingChannels, conn.mux.incomingRequests, nil
}

// clientHandshake performs the client side key exchange. See RFC 4253 Section
// 7.
func (c *connection) clientHandshake(dialAddress string, config *ClientConfig) error {
	if config.ClientVersion != "" {
		c.clientVersion = []byte(config.ClientVersion)
	} else {
		c.clientVersion = []byte(packageVersion)
	}
	var err error
	c.serverVersion, err = exchangeVersions(c.sshConn.conn, c.clientVersion)
	if err != nil {
		return err
	}

	c.transport = newClientTransport(
		newTransport(c.sshConn.conn, config.Rand, true /* is client */),
		c.clientVersion, c.serverVersion, config, dialAddress, c.sshConn.RemoteAddr())
	if err := c.transport.waitSession(); err != nil {
		return err
	}

	c.sessionID = c.transport.getSessionID()
	return c.clientAuthenticate(config)
}

// verifyHostKeySignature verifies the host key obtained in the key exchange.
// algo is the negotiated algorithm, and may be a certificate type.
func verifyHostKeySignature(hostKey PublicKey, algo string, result *kexResult) error {
	sig, rest, ok := parseSignatureBody(result.Signature)
	if len(rest) > 0 || !ok {
		return errors.New("ssh: signature parse error")
	}

	if a := underlyingAlgo(algo); sig.Format != a {
		return fmt.Errorf("ssh: invalid signature algorithm %q, expected %q", sig.Format, a)
	}

	return hostKey.Verify(result.H, sig)
}

// NewSession opens a new Session for this client. (A session is a remote
// execution of a program.)
func (c *Client) NewSession() (*Session, error) {
	ch, in, err := c.OpenChannel("session", nil)
	if err != nil {
		return nil, err
	}
	return newSession(ch, in)
}

func (c *Client) handleGlobalRequests(incoming <-chan *Request) {
	for r := range incoming {
		// This handles keepalive messages and matches
		// the behaviour of OpenSSH.
		r.Reply(false, nil)
	}
}

// handleChannelOpens channel open messages from the remote side.
func (c *Client) handleChannelOpens(in <-chan NewChannel) {
	for ch := range in {
		c.mu.Lock()
		handler := c.channelHandlers[ch.ChannelType()]
		c.mu.Unlock()

		if handler != nil {
			handler <- ch
		} else {
			ch.Reject(UnknownChannelType, fmt.Sprintf("unknown channel type: %v", ch.ChannelType()))
		}
	}

	c.mu.Lock()
	for _, ch := range c.channelHandlers {
		close(ch)
	}
	c.channelHandlers = nil
	c.mu.Unlock()
}

// Dial starts a client connection to the given SSH server. It is a
// convenience function that connects to the given network address,
// initiates the SSH handshake, and then sets up a Client.  For access
// to incoming channels and requests, use net.Dial with NewClientConn
// instead.
func Dial(network, addr string, config *ClientConfig) (*Client, error) {
	conn, err := net.DialTimeout(network, addr, config.Timeout)
	if err != nil {
		return nil, err
	}
	c, chans, reqs, err := NewClientConn(conn, addr, config)
	if err != nil {
		return nil, err
	}
	return NewClient(c, chans, reqs), nil
}

// HostKeyCallback is the function type used for verifying server
// keys.  A HostKeyCallback must return nil if the host key is OK, or
// an error to reject it. It receives the hostname as passed to Dial
// or NewClientConn. The remote address is the RemoteAddr of the
// net.Conn underlying the SSH connection.
type HostKeyCallback func(hostname string, remote net.Addr, key PublicKey) error

// BannerCallback is the function type used for treat the banner sent by
// the server. A BannerCallback receives the message sent by the remote server.
type BannerCallback func(message string) error

// A ClientConfig structure is used to configure a Client. It must not be
// modified after having been passed to an SSH function.
type ClientConfig struct {
	// Config contains configuration that is shared between clients and
	// servers.
	Config

	// User contains the username to authenticate as.
	User string

	// Auth contains possible authentication methods to use with the
	// server. Only the first instance of a particular RFC 4252 method will
	// be used during authentication.
	Auth []AuthMethod

	// HostKeyCallback is called during the cryptographic
	// handshake to validate the server's host key. The client
	// configuration must supply this callback for the connection
	// to succeed. The functions InsecureIgnoreHostKey or
	// FixedHostKey can be used for simplistic host key checks.
	HostKeyCallback HostKeyCallback

	// BannerCallback is called during the SSH dance to display a custom
	// server's message. The client configuration can supply this callback to
	// handle it as wished. The function BannerDisplayStderr can be used for
	// simplistic display on Stderr.
	BannerCallback BannerCallback

	// ClientVersion contains the version identification string that will
	// be used for the connection. If empty, a reasonable default is used.
	ClientVersion string

	// HostKeyAlgorithms lists the public key algorithms that the client will
	// accept from the server for host key authentication, in order of
	// preference. If empty, a reasonable default is used. Any
	// string returned from a PublicKey.Type method may be used, or
	// any of the CertAlgo and KeyAlgo constants.
	HostKeyAlgorithms []string

	// Timeout is the maximum amount of time for the TCP connection to establish.
	//
	// A Timeout of zero means no timeout.
	Timeout time.Duration
}

// InsecureIgnoreHostKey returns a function that can be used for
// ClientConfig.HostKeyCallback to accept any host key. It should
// not be used for production code.
func InsecureIgnoreHostKey() HostKeyCallback {
	return func(hostname string, remote net.Addr, key PublicKey) error {
		return nil
	}
}

type fixedHostKey struct {
	key PublicKey
}

func (f *fixedHostKey) check(hostname string, remote net.Addr, key PublicKey) error {
	if f.key == nil {
		return fmt.Errorf("ssh: required host key was nil")
	}
	if !bytes.Equal(key.Marshal(), f.key.Marshal()) {
		return fmt.Errorf("ssh: host key mismatch")
	}
	return nil
}

// FixedHostKey returns a function for use in
// ClientConfig.HostKeyCallback to accept only a specific host key.
func FixedHostKey(key PublicKey) HostKeyCallback {
	hk := &fixedHostKey{key}
	return hk.check
}

// BannerDisplayStderr returns a function that can be used for
// ClientConfig.BannerCallback to display banners on os.Stderr.
func BannerDisplayStderr() BannerCallback {
	return func(banner string) error {
		_, err := os.Stderr.WriteString(banner)

		return err
	}
}
   07070100000D15000081A4000000000000000000000001645E367C0000540D000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/client_auth.go // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package ssh

import (
	"bytes"
	"errors"
	"fmt"
	"io"
	"strings"
)

type authResult int

const (
	authFailure authResult = iota
	authPartialSuccess
	authSuccess
)

// clientAuthenticate authenticates with the remote server. See RFC 4252.
func (c *connection) clientAuthenticate(config *ClientConfig) error {
	// initiate user auth session
	if err := c.transport.writePacket(Marshal(&serviceRequestMsg{serviceUserAuth})); err != nil {
		return err
	}
	packet, err := c.transport.readPacket()
	if err != nil {
		return err
	}
	// The server may choose to send a SSH_MSG_EXT_INFO at this point (if we
	// advertised willingness to receive one, which we always do) or not. See
	// RFC 8308, Section 2.4.
	extensions := make(map[string][]byte)
	if len(packet) > 0 && packet[0] == msgExtInfo {
		var extInfo extInfoMsg
		if err := Unmarshal(packet, &extInfo); err != nil {
			return err
		}
		payload := extInfo.Payload
		for i := uint32(0); i < extInfo.NumExtensions; i++ {
			name, rest, ok := parseString(payload)
			if !ok {
				return parseError(msgExtInfo)
			}
			value, rest, ok := parseString(rest)
			if !ok {
				return parseError(msgExtInfo)
			}
			extensions[string(name)] = value
			payload = rest
		}
		packet, err = c.transport.readPacket()
		if err != nil {
			return err
		}
	}
	var serviceAccept serviceAcceptMsg
	if err := Unmarshal(packet, &serviceAccept); err != nil {
		return err
	}

	// during the authentication phase the client first attempts the "none" method
	// then any untried methods suggested by the server.
	var tried []string
	var lastMethods []string

	sessionID := c.transport.getSessionID()
	for auth := AuthMethod(new(noneAuth)); auth != nil; {
		ok, methods, err := auth.auth(sessionID, config.User, c.transport, config.Rand, extensions)
		if err != nil {
			return err
		}
		if ok == authSuccess {
			// success
			return nil
		} else if ok == authFailure {
			if m := auth.method(); !contains(tried, m) {
				tried = append(tried, m)
			}
		}
		if methods == nil {
			methods = lastMethods
		}
		lastMethods = methods

		auth = nil

	findNext:
		for _, a := range config.Auth {
			candidateMethod := a.method()
			if contains(tried, candidateMethod) {
				continue
			}
			for _, meth := range methods {
				if meth == candidateMethod {
					auth = a
					break findNext
				}
			}
		}
	}
	return fmt.Errorf("ssh: unable to authenticate, attempted methods %v, no supported methods remain", tried)
}

func contains(list []string, e string) bool {
	for _, s := range list {
		if s == e {
			return true
		}
	}
	return false
}

// An AuthMethod represents an instance of an RFC 4252 authentication method.
type AuthMethod interface {
	// auth authenticates user over transport t.
	// Returns true if authentication is successful.
	// If authentication is not successful, a []string of alternative
	// method names is returned. If the slice is nil, it will be ignored
	// and the previous set of possible methods will be reused.
	auth(session []byte, user string, p packetConn, rand io.Reader, extensions map[string][]byte) (authResult, []string, error)

	// method returns the RFC 4252 method name.
	method() string
}

// "none" authentication, RFC 4252 section 5.2.
type noneAuth int

func (n *noneAuth) auth(session []byte, user string, c packetConn, rand io.Reader, _ map[string][]byte) (authResult, []string, error) {
	if err := c.writePacket(Marshal(&userAuthRequestMsg{
		User:    user,
		Service: serviceSSH,
		Method:  "none",
	})); err != nil {
		return authFailure, nil, err
	}

	return handleAuthResponse(c)
}

func (n *noneAuth) method() string {
	return "none"
}

// passwordCallback is an AuthMethod that fetches the password through
// a function call, e.g. by prompting the user.
type passwordCallback func() (password string, err error)

func (cb passwordCallback) auth(session []byte, user string, c packetConn, rand io.Reader, _ map[string][]byte) (authResult, []string, error) {
	type passwordAuthMsg struct {
		User     string `sshtype:"50"`
		Service  string
		Method   string
		Reply    bool
		Password string
	}

	pw, err := cb()
	// REVIEW NOTE: is there a need to support skipping a password attempt?
	// The program may only find out that the user doesn't have a password
	// when prompting.
	if err != nil {
		return authFailure, nil, err
	}

	if err := c.writePacket(Marshal(&passwordAuthMsg{
		User:     user,
		Service:  serviceSSH,
		Method:   cb.method(),
		Reply:    false,
		Password: pw,
	})); err != nil {
		return authFailure, nil, err
	}

	return handleAuthResponse(c)
}

func (cb passwordCallback) method() string {
	return "password"
}

// Password returns an AuthMethod using the given password.
func Password(secret string) AuthMethod {
	return passwordCallback(func() (string, error) { return secret, nil })
}

// PasswordCallback returns an AuthMethod that uses a callback for
// fetching a password.
func PasswordCallback(prompt func() (secret string, err error)) AuthMethod {
	return passwordCallback(prompt)
}

type publickeyAuthMsg struct {
	User    string `sshtype:"50"`
	Service string
	Method  string
	// HasSig indicates to the receiver packet that the auth request is signed and
	// should be used for authentication of the request.
	HasSig   bool
	Algoname string
	PubKey   []byte
	// Sig is tagged with "rest" so Marshal will exclude it during
	// validateKey
	Sig []byte `ssh:"rest"`
}

// publicKeyCallback is an AuthMethod that uses a set of key
// pairs for authentication.
type publicKeyCallback func() ([]Signer, error)

func (cb publicKeyCallback) method() string {
	return "publickey"
}

func pickSignatureAlgorithm(signer Signer, extensions map[string][]byte) (as AlgorithmSigner, algo string) {
	keyFormat := signer.PublicKey().Type()

	// Like in sendKexInit, if the public key implements AlgorithmSigner we
	// assume it supports all algorithms, otherwise only the key format one.
	as, ok := signer.(AlgorithmSigner)
	if !ok {
		return algorithmSignerWrapper{signer}, keyFormat
	}

	extPayload, ok := extensions["server-sig-algs"]
	if !ok {
		// If there is no "server-sig-algs" extension, fall back to the key
		// format algorithm.
		return as, keyFormat
	}

	// The server-sig-algs extension only carries underlying signature
	// algorithm, but we are trying to select a protocol-level public key
	// algorithm, which might be a certificate type. Extend the list of server
	// supported algorithms to include the corresponding certificate algorithms.
	serverAlgos := strings.Split(string(extPayload), ",")
	for _, algo := range serverAlgos {
		if certAlgo, ok := certificateAlgo(algo); ok {
			serverAlgos = append(serverAlgos, certAlgo)
		}
	}

	keyAlgos := algorithmsForKeyFormat(keyFormat)
	algo, err := findCommon("public key signature algorithm", keyAlgos, serverAlgos)
	if err != nil {
		// If there is no overlap, try the key anyway with the key format
		// algorithm, to support servers that fail to list all supported
		// algorithms.
		return as, keyFormat
	}
	return as, algo
}

func (cb publicKeyCallback) auth(session []byte, user string, c packetConn, rand io.Reader, extensions map[string][]byte) (authResult, []string, error) {
	// Authentication is performed by sending an enquiry to test if a key is
	// acceptable to the remote. If the key is acceptable, the client will
	// attempt to authenticate with the valid key.  If not the client will repeat
	// the process with the remaining keys.

	signers, err := cb()
	if err != nil {
		return authFailure, nil, err
	}
	var methods []string
	for _, signer := range signers {
		pub := signer.PublicKey()
		as, algo := pickSignatureAlgorithm(signer, extensions)

		ok, err := validateKey(pub, algo, user, c)
		if err != nil {
			return authFailure, nil, err
		}
		if !ok {
			continue
		}

		pubKey := pub.Marshal()
		data := buildDataSignedForAuth(session, userAuthRequestMsg{
			User:    user,
			Service: serviceSSH,
			Method:  cb.method(),
		}, algo, pubKey)
		sign, err := as.SignWithAlgorithm(rand, data, underlyingAlgo(algo))
		if err != nil {
			return authFailure, nil, err
		}

		// manually wrap the serialized signature in a string
		s := Marshal(sign)
		sig := make([]byte, stringLength(len(s)))
		marshalString(sig, s)
		msg := publickeyAuthMsg{
			User:     user,
			Service:  serviceSSH,
			Method:   cb.method(),
			HasSig:   true,
			Algoname: algo,
			PubKey:   pubKey,
			Sig:      sig,
		}
		p := Marshal(&msg)
		if err := c.writePacket(p); err != nil {
			return authFailure, nil, err
		}
		var success authResult
		success, methods, err = handleAuthResponse(c)
		if err != nil {
			return authFailure, nil, err
		}

		// If authentication succeeds or the list of available methods does not
		// contain the "publickey" method, do not attempt to authenticate with any
		// other keys.  According to RFC 4252 Section 7, the latter can occur when
		// additional authentication methods are required.
		if success == authSuccess || !containsMethod(methods, cb.method()) {
			return success, methods, err
		}
	}

	return authFailure, methods, nil
}

func containsMethod(methods []string, method string) bool {
	for _, m := range methods {
		if m == method {
			return true
		}
	}

	return false
}

// validateKey validates the key provided is acceptable to the server.
func validateKey(key PublicKey, algo string, user string, c packetConn) (bool, error) {
	pubKey := key.Marshal()
	msg := publickeyAuthMsg{
		User:     user,
		Service:  serviceSSH,
		Method:   "publickey",
		HasSig:   false,
		Algoname: algo,
		PubKey:   pubKey,
	}
	if err := c.writePacket(Marshal(&msg)); err != nil {
		return false, err
	}

	return confirmKeyAck(key, algo, c)
}

func confirmKeyAck(key PublicKey, algo string, c packetConn) (bool, error) {
	pubKey := key.Marshal()

	for {
		packet, err := c.readPacket()
		if err != nil {
			return false, err
		}
		switch packet[0] {
		case msgUserAuthBanner:
			if err := handleBannerResponse(c, packet); err != nil {
				return false, err
			}
		case msgUserAuthPubKeyOk:
			var msg userAuthPubKeyOkMsg
			if err := Unmarshal(packet, &msg); err != nil {
				return false, err
			}
			if msg.Algo != algo || !bytes.Equal(msg.PubKey, pubKey) {
				return false, nil
			}
			return true, nil
		case msgUserAuthFailure:
			return false, nil
		default:
			return false, unexpectedMessageError(msgUserAuthPubKeyOk, packet[0])
		}
	}
}

// PublicKeys returns an AuthMethod that uses the given key
// pairs.
func PublicKeys(signers ...Signer) AuthMethod {
	return publicKeyCallback(func() ([]Signer, error) { return signers, nil })
}

// PublicKeysCallback returns an AuthMethod that runs the given
// function to obtain a list of key pairs.
func PublicKeysCallback(getSigners func() (signers []Signer, err error)) AuthMethod {
	return publicKeyCallback(getSigners)
}

// handleAuthResponse returns whether the preceding authentication request succeeded
// along with a list of remaining authentication methods to try next and
// an error if an unexpected response was received.
func handleAuthResponse(c packetConn) (authResult, []string, error) {
	gotMsgExtInfo := false
	for {
		packet, err := c.readPacket()
		if err != nil {
			return authFailure, nil, err
		}

		switch packet[0] {
		case msgUserAuthBanner:
			if err := handleBannerResponse(c, packet); err != nil {
				return authFailure, nil, err
			}
		case msgExtInfo:
			// Ignore post-authentication RFC 8308 extensions, once.
			if gotMsgExtInfo {
				return authFailure, nil, unexpectedMessageError(msgUserAuthSuccess, packet[0])
			}
			gotMsgExtInfo = true
		case msgUserAuthFailure:
			var msg userAuthFailureMsg
			if err := Unmarshal(packet, &msg); err != nil {
				return authFailure, nil, err
			}
			if msg.PartialSuccess {
				return authPartialSuccess, msg.Methods, nil
			}
			return authFailure, msg.Methods, nil
		case msgUserAuthSuccess:
			return authSuccess, nil, nil
		default:
			return authFailure, nil, unexpectedMessageError(msgUserAuthSuccess, packet[0])
		}
	}
}

func handleBannerResponse(c packetConn, packet []byte) error {
	var msg userAuthBannerMsg
	if err := Unmarshal(packet, &msg); err != nil {
		return err
	}

	transport, ok := c.(*handshakeTransport)
	if !ok {
		return nil
	}

	if transport.bannerCallback != nil {
		return transport.bannerCallback(msg.Message)
	}

	return nil
}

// KeyboardInteractiveChallenge should print questions, optionally
// disabling echoing (e.g. for passwords), and return all the answers.
// Challenge may be called multiple times in a single session. After
// successful authentication, the server may send a challenge with no
// questions, for which the name and instruction messages should be
// printed.  RFC 4256 section 3.3 details how the UI should behave for
// both CLI and GUI environments.
type KeyboardInteractiveChallenge func(name, instruction string, questions []string, echos []bool) (answers []string, err error)

// KeyboardInteractive returns an AuthMethod using a prompt/response
// sequence controlled by the server.
func KeyboardInteractive(challenge KeyboardInteractiveChallenge) AuthMethod {
	return challenge
}

func (cb KeyboardInteractiveChallenge) method() string {
	return "keyboard-interactive"
}

func (cb KeyboardInteractiveChallenge) auth(session []byte, user string, c packetConn, rand io.Reader, _ map[string][]byte) (authResult, []string, error) {
	type initiateMsg struct {
		User       string `sshtype:"50"`
		Service    string
		Method     string
		Language   string
		Submethods string
	}

	if err := c.writePacket(Marshal(&initiateMsg{
		User:    user,
		Service: serviceSSH,
		Method:  "keyboard-interactive",
	})); err != nil {
		return authFailure, nil, err
	}

	gotMsgExtInfo := false
	for {
		packet, err := c.readPacket()
		if err != nil {
			return authFailure, nil, err
		}

		// like handleAuthResponse, but with less options.
		switch packet[0] {
		case msgUserAuthBanner:
			if err := handleBannerResponse(c, packet); err != nil {
				return authFailure, nil, err
			}
			continue
		case msgExtInfo:
			// Ignore post-authentication RFC 8308 extensions, once.
			if gotMsgExtInfo {
				return authFailure, nil, unexpectedMessageError(msgUserAuthInfoRequest, packet[0])
			}
			gotMsgExtInfo = true
			continue
		case msgUserAuthInfoRequest:
			// OK
		case msgUserAuthFailure:
			var msg userAuthFailureMsg
			if err := Unmarshal(packet, &msg); err != nil {
				return authFailure, nil, err
			}
			if msg.PartialSuccess {
				return authPartialSuccess, msg.Methods, nil
			}
			return authFailure, msg.Methods, nil
		case msgUserAuthSuccess:
			return authSuccess, nil, nil
		default:
			return authFailure, nil, unexpectedMessageError(msgUserAuthInfoRequest, packet[0])
		}

		var msg userAuthInfoRequestMsg
		if err := Unmarshal(packet, &msg); err != nil {
			return authFailure, nil, err
		}

		// Manually unpack the prompt/echo pairs.
		rest := msg.Prompts
		var prompts []string
		var echos []bool
		for i := 0; i < int(msg.NumPrompts); i++ {
			prompt, r, ok := parseString(rest)
			if !ok || len(r) == 0 {
				return authFailure, nil, errors.New("ssh: prompt format error")
			}
			prompts = append(prompts, string(prompt))
			echos = append(echos, r[0] != 0)
			rest = r[1:]
		}

		if len(rest) != 0 {
			return authFailure, nil, errors.New("ssh: extra data following keyboard-interactive pairs")
		}

		answers, err := cb(msg.Name, msg.Instruction, prompts, echos)
		if err != nil {
			return authFailure, nil, err
		}

		if len(answers) != len(prompts) {
			return authFailure, nil, fmt.Errorf("ssh: incorrect number of answers from keyboard-interactive callback %d (expected %d)", len(answers), len(prompts))
		}
		responseLength := 1 + 4
		for _, a := range answers {
			responseLength += stringLength(len(a))
		}
		serialized := make([]byte, responseLength)
		p := serialized
		p[0] = msgUserAuthInfoResponse
		p = p[1:]
		p = marshalUint32(p, uint32(len(answers)))
		for _, a := range answers {
			p = marshalString(p, []byte(a))
		}

		if err := c.writePacket(serialized); err != nil {
			return authFailure, nil, err
		}
	}
}

type retryableAuthMethod struct {
	authMethod AuthMethod
	maxTries   int
}

func (r *retryableAuthMethod) auth(session []byte, user string, c packetConn, rand io.Reader, extensions map[string][]byte) (ok authResult, methods []string, err error) {
	for i := 0; r.maxTries <= 0 || i < r.maxTries; i++ {
		ok, methods, err = r.authMethod.auth(session, user, c, rand, extensions)
		if ok != authFailure || err != nil { // either success, partial success or error terminate
			return ok, methods, err
		}
	}
	return ok, methods, err
}

func (r *retryableAuthMethod) method() string {
	return r.authMethod.method()
}

// RetryableAuthMethod is a decorator for other auth methods enabling them to
// be retried up to maxTries before considering that AuthMethod itself failed.
// If maxTries is <= 0, will retry indefinitely
//
// This is useful for interactive clients using challenge/response type
// authentication (e.g. Keyboard-Interactive, Password, etc) where the user
// could mistype their response resulting in the server issuing a
// SSH_MSG_USERAUTH_FAILURE (rfc4252 #8 [password] and rfc4256 #3.4
// [keyboard-interactive]); Without this decorator, the non-retryable
// AuthMethod would be removed from future consideration, and never tried again
// (and so the user would never be able to retry their entry).
func RetryableAuthMethod(auth AuthMethod, maxTries int) AuthMethod {
	return &retryableAuthMethod{authMethod: auth, maxTries: maxTries}
}

// GSSAPIWithMICAuthMethod is an AuthMethod with "gssapi-with-mic" authentication.
// See RFC 4462 section 3
// gssAPIClient is implementation of the GSSAPIClient interface, see the definition of the interface for details.
// target is the server host you want to log in to.
func GSSAPIWithMICAuthMethod(gssAPIClient GSSAPIClient, target string) AuthMethod {
	if gssAPIClient == nil {
		panic("gss-api client must be not nil with enable gssapi-with-mic")
	}
	return &gssAPIWithMICCallback{gssAPIClient: gssAPIClient, target: target}
}

type gssAPIWithMICCallback struct {
	gssAPIClient GSSAPIClient
	target       string
}

func (g *gssAPIWithMICCallback) auth(session []byte, user string, c packetConn, rand io.Reader, _ map[string][]byte) (authResult, []string, error) {
	m := &userAuthRequestMsg{
		User:    user,
		Service: serviceSSH,
		Method:  g.method(),
	}
	// The GSS-API authentication method is initiated when the client sends an SSH_MSG_USERAUTH_REQUEST.
	// See RFC 4462 section 3.2.
	m.Payload = appendU32(m.Payload, 1)
	m.Payload = appendString(m.Payload, string(krb5OID))
	if err := c.writePacket(Marshal(m)); err != nil {
		return authFailure, nil, err
	}
	// The server responds to the SSH_MSG_USERAUTH_REQUEST with either an
	// SSH_MSG_USERAUTH_FAILURE if none of the mechanisms are supported or
	// with an SSH_MSG_USERAUTH_GSSAPI_RESPONSE.
	// See RFC 4462 section 3.3.
	// OpenSSH supports Kerberos V5 mechanism only for GSS-API authentication,so I don't want to check
	// selected mech if it is valid.
	packet, err := c.readPacket()
	if err != nil {
		return authFailure, nil, err
	}
	userAuthGSSAPIResp := &userAuthGSSAPIResponse{}
	if err := Unmarshal(packet, userAuthGSSAPIResp); err != nil {
		return authFailure, nil, err
	}
	// Start the loop into the exchange token.
	// See RFC 4462 section 3.4.
	var token []byte
	defer g.gssAPIClient.DeleteSecContext()
	for {
		// Initiates the establishment of a security context between the application and a remote peer.
		nextToken, needContinue, err := g.gssAPIClient.InitSecContext("host@"+g.target, token, false)
		if err != nil {
			return authFailure, nil, err
		}
		if len(nextToken) > 0 {
			if err := c.writePacket(Marshal(&userAuthGSSAPIToken{
				Token: nextToken,
			})); err != nil {
				return authFailure, nil, err
			}
		}
		if !needContinue {
			break
		}
		packet, err = c.readPacket()
		if err != nil {
			return authFailure, nil, err
		}
		switch packet[0] {
		case msgUserAuthFailure:
			var msg userAuthFailureMsg
			if err := Unmarshal(packet, &msg); err != nil {
				return authFailure, nil, err
			}
			if msg.PartialSuccess {
				return authPartialSuccess, msg.Methods, nil
			}
			return authFailure, msg.Methods, nil
		case msgUserAuthGSSAPIError:
			userAuthGSSAPIErrorResp := &userAuthGSSAPIError{}
			if err := Unmarshal(packet, userAuthGSSAPIErrorResp); err != nil {
				return authFailure, nil, err
			}
			return authFailure, nil, fmt.Errorf("GSS-API Error:\n"+
				"Major Status: %d\n"+
				"Minor Status: %d\n"+
				"Error Message: %s\n", userAuthGSSAPIErrorResp.MajorStatus, userAuthGSSAPIErrorResp.MinorStatus,
				userAuthGSSAPIErrorResp.Message)
		case msgUserAuthGSSAPIToken:
			userAuthGSSAPITokenReq := &userAuthGSSAPIToken{}
			if err := Unmarshal(packet, userAuthGSSAPITokenReq); err != nil {
				return authFailure, nil, err
			}
			token = userAuthGSSAPITokenReq.Token
		}
	}
	// Binding Encryption Keys.
	// See RFC 4462 section 3.5.
	micField := buildMIC(string(session), user, "ssh-connection", "gssapi-with-mic")
	micToken, err := g.gssAPIClient.GetMIC(micField)
	if err != nil {
		return authFailure, nil, err
	}
	if err := c.writePacket(Marshal(&userAuthGSSAPIMIC{
		MIC: micToken,
	})); err != nil {
		return authFailure, nil, err
	}
	return handleAuthResponse(c)
}

func (g *gssAPIWithMICCallback) method() string {
	return "gssapi-with-mic"
}
   07070100000D16000081A4000000000000000000000001645E367C00003125000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/common.go  // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package ssh

import (
	"crypto"
	"crypto/rand"
	"fmt"
	"io"
	"math"
	"strings"
	"sync"

	_ "crypto/sha1"
	_ "crypto/sha256"
	_ "crypto/sha512"
)

// These are string constants in the SSH protocol.
const (
	compressionNone = "none"
	serviceUserAuth = "ssh-userauth"
	serviceSSH      = "ssh-connection"
)

// supportedCiphers lists ciphers we support but might not recommend.
var supportedCiphers = []string{
	"aes128-ctr", "aes192-ctr", "aes256-ctr",
	"aes128-gcm@openssh.com", gcm256CipherID,
	chacha20Poly1305ID,
	"arcfour256", "arcfour128", "arcfour",
	aes128cbcID,
	tripledescbcID,
}

// preferredCiphers specifies the default preference for ciphers.
var preferredCiphers = []string{
	"aes128-gcm@openssh.com", gcm256CipherID,
	chacha20Poly1305ID,
	"aes128-ctr", "aes192-ctr", "aes256-ctr",
}

// supportedKexAlgos specifies the supported key-exchange algorithms in
// preference order.
var supportedKexAlgos = []string{
	kexAlgoCurve25519SHA256, kexAlgoCurve25519SHA256LibSSH,
	// P384 and P521 are not constant-time yet, but since we don't
	// reuse ephemeral keys, using them for ECDH should be OK.
	kexAlgoECDH256, kexAlgoECDH384, kexAlgoECDH521,
	kexAlgoDH14SHA256, kexAlgoDH14SHA1, kexAlgoDH1SHA1,
}

// serverForbiddenKexAlgos contains key exchange algorithms, that are forbidden
// for the server half.
var serverForbiddenKexAlgos = map[string]struct{}{
	kexAlgoDHGEXSHA1:   {}, // server half implementation is only minimal to satisfy the automated tests
	kexAlgoDHGEXSHA256: {}, // server half implementation is only minimal to satisfy the automated tests
}

// preferredKexAlgos specifies the default preference for key-exchange algorithms
// in preference order.
var preferredKexAlgos = []string{
	kexAlgoCurve25519SHA256, kexAlgoCurve25519SHA256LibSSH,
	kexAlgoECDH256, kexAlgoECDH384, kexAlgoECDH521,
	kexAlgoDH14SHA256, kexAlgoDH14SHA1,
}

// supportedHostKeyAlgos specifies the supported host-key algorithms (i.e. methods
// of authenticating servers) in preference order.
var supportedHostKeyAlgos = []string{
	CertAlgoRSASHA512v01, CertAlgoRSASHA256v01,
	CertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01,
	CertAlgoECDSA384v01, CertAlgoECDSA521v01, CertAlgoED25519v01,

	KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521,
	KeyAlgoRSASHA512, KeyAlgoRSASHA256,
	KeyAlgoRSA, KeyAlgoDSA,

	KeyAlgoED25519,
}

// supportedMACs specifies a default set of MAC algorithms in preference order.
// This is based on RFC 4253, section 6.4, but with hmac-md5 variants removed
// because they have reached the end of their useful life.
var supportedMACs = []string{
	"hmac-sha2-256-etm@openssh.com", "hmac-sha2-256", "hmac-sha1", "hmac-sha1-96",
}

var supportedCompressions = []string{compressionNone}

// hashFuncs keeps the mapping of supported signature algorithms to their
// respective hashes needed for signing and verification.
var hashFuncs = map[string]crypto.Hash{
	KeyAlgoRSA:       crypto.SHA1,
	KeyAlgoRSASHA256: crypto.SHA256,
	KeyAlgoRSASHA512: crypto.SHA512,
	KeyAlgoDSA:       crypto.SHA1,
	KeyAlgoECDSA256:  crypto.SHA256,
	KeyAlgoECDSA384:  crypto.SHA384,
	KeyAlgoECDSA521:  crypto.SHA512,
	// KeyAlgoED25519 doesn't pre-hash.
	KeyAlgoSKECDSA256: crypto.SHA256,
	KeyAlgoSKED25519:  crypto.SHA256,
}

// algorithmsForKeyFormat returns the supported signature algorithms for a given
// public key format (PublicKey.Type), in order of preference. See RFC 8332,
// Section 2. See also the note in sendKexInit on backwards compatibility.
func algorithmsForKeyFormat(keyFormat string) []string {
	switch keyFormat {
	case KeyAlgoRSA:
		return []string{KeyAlgoRSASHA256, KeyAlgoRSASHA512, KeyAlgoRSA}
	case CertAlgoRSAv01:
		return []string{CertAlgoRSASHA256v01, CertAlgoRSASHA512v01, CertAlgoRSAv01}
	default:
		return []string{keyFormat}
	}
}

// supportedPubKeyAuthAlgos specifies the supported client public key
// authentication algorithms. Note that this doesn't include certificate types
// since those use the underlying algorithm. This list is sent to the client if
// it supports the server-sig-algs extension. Order is irrelevant.
var supportedPubKeyAuthAlgos = []string{
	KeyAlgoED25519,
	KeyAlgoSKED25519, KeyAlgoSKECDSA256,
	KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521,
	KeyAlgoRSASHA256, KeyAlgoRSASHA512, KeyAlgoRSA,
	KeyAlgoDSA,
}

var supportedPubKeyAuthAlgosList = strings.Join(supportedPubKeyAuthAlgos, ",")

// unexpectedMessageError results when the SSH message that we received didn't
// match what we wanted.
func unexpectedMessageError(expected, got uint8) error {
	return fmt.Errorf("ssh: unexpected message type %d (expected %d)", got, expected)
}

// parseError results from a malformed SSH message.
func parseError(tag uint8) error {
	return fmt.Errorf("ssh: parse error in message type %d", tag)
}

func findCommon(what string, client []string, server []string) (common string, err error) {
	for _, c := range client {
		for _, s := range server {
			if c == s {
				return c, nil
			}
		}
	}
	return "", fmt.Errorf("ssh: no common algorithm for %s; client offered: %v, server offered: %v", what, client, server)
}

// directionAlgorithms records algorithm choices in one direction (either read or write)
type directionAlgorithms struct {
	Cipher      string
	MAC         string
	Compression string
}

// rekeyBytes returns a rekeying intervals in bytes.
func (a *directionAlgorithms) rekeyBytes() int64 {
	// According to RFC 4344 block ciphers should rekey after
	// 2^(BLOCKSIZE/4) blocks. For all AES flavors BLOCKSIZE is
	// 128.
	switch a.Cipher {
	case "aes128-ctr", "aes192-ctr", "aes256-ctr", gcm128CipherID, gcm256CipherID, aes128cbcID:
		return 16 * (1 << 32)

	}

	// For others, stick with RFC 4253 recommendation to rekey after 1 Gb of data.
	return 1 << 30
}

var aeadCiphers = map[string]bool{
	gcm128CipherID:     true,
	gcm256CipherID:     true,
	chacha20Poly1305ID: true,
}

type algorithms struct {
	kex     string
	hostKey string
	w       directionAlgorithms
	r       directionAlgorithms
}

func findAgreedAlgorithms(isClient bool, clientKexInit, serverKexInit *kexInitMsg) (algs *algorithms, err error) {
	result := &algorithms{}

	result.kex, err = findCommon("key exchange", clientKexInit.KexAlgos, serverKexInit.KexAlgos)
	if err != nil {
		return
	}

	result.hostKey, err = findCommon("host key", clientKexInit.ServerHostKeyAlgos, serverKexInit.ServerHostKeyAlgos)
	if err != nil {
		return
	}

	stoc, ctos := &result.w, &result.r
	if isClient {
		ctos, stoc = stoc, ctos
	}

	ctos.Cipher, err = findCommon("client to server cipher", clientKexInit.CiphersClientServer, serverKexInit.CiphersClientServer)
	if err != nil {
		return
	}

	stoc.Cipher, err = findCommon("server to client cipher", clientKexInit.CiphersServerClient, serverKexInit.CiphersServerClient)
	if err != nil {
		return
	}

	if !aeadCiphers[ctos.Cipher] {
		ctos.MAC, err = findCommon("client to server MAC", clientKexInit.MACsClientServer, serverKexInit.MACsClientServer)
		if err != nil {
			return
		}
	}

	if !aeadCiphers[stoc.Cipher] {
		stoc.MAC, err = findCommon("server to client MAC", clientKexInit.MACsServerClient, serverKexInit.MACsServerClient)
		if err != nil {
			return
		}
	}

	ctos.Compression, err = findCommon("client to server compression", clientKexInit.CompressionClientServer, serverKexInit.CompressionClientServer)
	if err != nil {
		return
	}

	stoc.Compression, err = findCommon("server to client compression", clientKexInit.CompressionServerClient, serverKexInit.CompressionServerClient)
	if err != nil {
		return
	}

	return result, nil
}

// If rekeythreshold is too small, we can't make any progress sending
// stuff.
const minRekeyThreshold uint64 = 256

// Config contains configuration data common to both ServerConfig and
// ClientConfig.
type Config struct {
	// Rand provides the source of entropy for cryptographic
	// primitives. If Rand is nil, the cryptographic random reader
	// in package crypto/rand will be used.
	Rand io.Reader

	// The maximum number of bytes sent or received after which a
	// new key is negotiated. It must be at least 256. If
	// unspecified, a size suitable for the chosen cipher is used.
	RekeyThreshold uint64

	// The allowed key exchanges algorithms. If unspecified then a
	// default set of algorithms is used.
	KeyExchanges []string

	// The allowed cipher algorithms. If unspecified then a sensible
	// default is used.
	Ciphers []string

	// The allowed MAC algorithms. If unspecified then a sensible default
	// is used.
	MACs []string
}

// SetDefaults sets sensible values for unset fields in config. This is
// exported for testing: Configs passed to SSH functions are copied and have
// default values set automatically.
func (c *Config) SetDefaults() {
	if c.Rand == nil {
		c.Rand = rand.Reader
	}
	if c.Ciphers == nil {
		c.Ciphers = preferredCiphers
	}
	var ciphers []string
	for _, c := range c.Ciphers {
		if cipherModes[c] != nil {
			// reject the cipher if we have no cipherModes definition
			ciphers = append(ciphers, c)
		}
	}
	c.Ciphers = ciphers

	if c.KeyExchanges == nil {
		c.KeyExchanges = preferredKexAlgos
	}

	if c.MACs == nil {
		c.MACs = supportedMACs
	}

	if c.RekeyThreshold == 0 {
		// cipher specific default
	} else if c.RekeyThreshold < minRekeyThreshold {
		c.RekeyThreshold = minRekeyThreshold
	} else if c.RekeyThreshold >= math.MaxInt64 {
		// Avoid weirdness if somebody uses -1 as a threshold.
		c.RekeyThreshold = math.MaxInt64
	}
}

// buildDataSignedForAuth returns the data that is signed in order to prove
// possession of a private key. See RFC 4252, section 7. algo is the advertised
// algorithm, and may be a certificate type.
func buildDataSignedForAuth(sessionID []byte, req userAuthRequestMsg, algo string, pubKey []byte) []byte {
	data := struct {
		Session []byte
		Type    byte
		User    string
		Service string
		Method  string
		Sign    bool
		Algo    string
		PubKey  []byte
	}{
		sessionID,
		msgUserAuthRequest,
		req.User,
		req.Service,
		req.Method,
		true,
		algo,
		pubKey,
	}
	return Marshal(data)
}

func appendU16(buf []byte, n uint16) []byte {
	return append(buf, byte(n>>8), byte(n))
}

func appendU32(buf []byte, n uint32) []byte {
	return append(buf, byte(n>>24), byte(n>>16), byte(n>>8), byte(n))
}

func appendU64(buf []byte, n uint64) []byte {
	return append(buf,
		byte(n>>56), byte(n>>48), byte(n>>40), byte(n>>32),
		byte(n>>24), byte(n>>16), byte(n>>8), byte(n))
}

func appendInt(buf []byte, n int) []byte {
	return appendU32(buf, uint32(n))
}

func appendString(buf []byte, s string) []byte {
	buf = appendU32(buf, uint32(len(s)))
	buf = append(buf, s...)
	return buf
}

func appendBool(buf []byte, b bool) []byte {
	if b {
		return append(buf, 1)
	}
	return append(buf, 0)
}

// newCond is a helper to hide the fact that there is no usable zero
// value for sync.Cond.
func newCond() *sync.Cond { return sync.NewCond(new(sync.Mutex)) }

// window represents the buffer available to clients
// wishing to write to a channel.
type window struct {
	*sync.Cond
	win          uint32 // RFC 4254 5.2 says the window size can grow to 2^32-1
	writeWaiters int
	closed       bool
}

// add adds win to the amount of window available
// for consumers.
func (w *window) add(win uint32) bool {
	// a zero sized window adjust is a noop.
	if win == 0 {
		return true
	}
	w.L.Lock()
	if w.win+win < win {
		w.L.Unlock()
		return false
	}
	w.win += win
	// It is unusual that multiple goroutines would be attempting to reserve
	// window space, but not guaranteed. Use broadcast to notify all waiters
	// that additional window is available.
	w.Broadcast()
	w.L.Unlock()
	return true
}

// close sets the window to closed, so all reservations fail
// immediately.
func (w *window) close() {
	w.L.Lock()
	w.closed = true
	w.Broadcast()
	w.L.Unlock()
}

// reserve reserves win from the available window capacity.
// If no capacity remains, reserve will block. reserve may
// return less than requested.
func (w *window) reserve(win uint32) (uint32, error) {
	var err error
	w.L.Lock()
	w.writeWaiters++
	w.Broadcast()
	for w.win == 0 && !w.closed {
		w.Wait()
	}
	w.writeWaiters--
	if w.win < win {
		win = w.win
	}
	w.win -= win
	if w.closed {
		err = io.EOF
	}
	w.L.Unlock()
	return win, err
}

// waitWriterBlocked waits until some goroutine is blocked for further
// writes. It is used in tests only.
func (w *window) waitWriterBlocked() {
	w.Cond.L.Lock()
	for w.writeWaiters == 0 {
		w.Cond.Wait()
	}
	w.Cond.L.Unlock()
}
   07070100000D17000081A4000000000000000000000001645E367C00000D55000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/connection.go  // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package ssh

import (
	"fmt"
	"net"
)

// OpenChannelError is returned if the other side rejects an
// OpenChannel request.
type OpenChannelError struct {
	Reason  RejectionReason
	Message string
}

func (e *OpenChannelError) Error() string {
	return fmt.Sprintf("ssh: rejected: %s (%s)", e.Reason, e.Message)
}

// ConnMetadata holds metadata for the connection.
type ConnMetadata interface {
	// User returns the user ID for this connection.
	User() string

	// SessionID returns the session hash, also denoted by H.
	SessionID() []byte

	// ClientVersion returns the client's version string as hashed
	// into the session ID.
	ClientVersion() []byte

	// ServerVersion returns the server's version string as hashed
	// into the session ID.
	ServerVersion() []byte

	// RemoteAddr returns the remote address for this connection.
	RemoteAddr() net.Addr

	// LocalAddr returns the local address for this connection.
	LocalAddr() net.Addr
}

// Conn represents an SSH connection for both server and client roles.
// Conn is the basis for implementing an application layer, such
// as ClientConn, which implements the traditional shell access for
// clients.
type Conn interface {
	ConnMetadata

	// SendRequest sends a global request, and returns the
	// reply. If wantReply is true, it returns the response status
	// and payload. See also RFC 4254, section 4.
	SendRequest(name string, wantReply bool, payload []byte) (bool, []byte, error)

	// OpenChannel tries to open an channel. If the request is
	// rejected, it returns *OpenChannelError. On success it returns
	// the SSH Channel and a Go channel for incoming, out-of-band
	// requests. The Go channel must be serviced, or the
	// connection will hang.
	OpenChannel(name string, data []byte) (Channel, <-chan *Request, error)

	// Close closes the underlying network connection
	Close() error

	// Wait blocks until the connection has shut down, and returns the
	// error causing the shutdown.
	Wait() error

	// TODO(hanwen): consider exposing:
	//   RequestKeyChange
	//   Disconnect
}

// DiscardRequests consumes and rejects all requests from the
// passed-in channel.
func DiscardRequests(in <-chan *Request) {
	for req := range in {
		if req.WantReply {
			req.Reply(false, nil)
		}
	}
}

// A connection represents an incoming connection.
type connection struct {
	transport *handshakeTransport
	sshConn

	// The connection protocol.
	*mux
}

func (c *connection) Close() error {
	return c.sshConn.conn.Close()
}

// sshConn provides net.Conn metadata, but disallows direct reads and
// writes.
type sshConn struct {
	conn net.Conn

	user          string
	sessionID     []byte
	clientVersion []byte
	serverVersion []byte
}

func dup(src []byte) []byte {
	dst := make([]byte, len(src))
	copy(dst, src)
	return dst
}

func (c *sshConn) User() string {
	return c.user
}

func (c *sshConn) RemoteAddr() net.Addr {
	return c.conn.RemoteAddr()
}

func (c *sshConn) Close() error {
	return c.conn.Close()
}

func (c *sshConn) LocalAddr() net.Addr {
	return c.conn.LocalAddr()
}

func (c *sshConn) SessionID() []byte {
	return dup(c.sessionID)
}

func (c *sshConn) ClientVersion() []byte {
	return dup(c.clientVersion)
}

func (c *sshConn) ServerVersion() []byte {
	return dup(c.serverVersion)
}
   07070100000D18000081A4000000000000000000000001645E367C00000396000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/doc.go // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

/*
Package ssh implements an SSH client and server.

SSH is a transport security protocol, an authentication protocol and a
family of application protocols. The most typical application level
protocol is a remote shell and this is specifically implemented.  However,
the multiplexed nature of SSH is exposed to users that wish to support
others.

References:

	[PROTOCOL.certkeys]: http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/PROTOCOL.certkeys?rev=HEAD
	[SSH-PARAMETERS]:    http://www.iana.org/assignments/ssh-parameters/ssh-parameters.xml#ssh-parameters-1

This package does not fall under the stability promise of the Go language itself,
so its API may be changed when pressing needs arise.
*/
package ssh // import "golang.org/x/crypto/ssh"
  07070100000D19000081A4000000000000000000000001645E367C00004D29000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/handshake.go   // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package ssh

import (
	"crypto/rand"
	"errors"
	"fmt"
	"io"
	"log"
	"net"
	"sync"
)

// debugHandshake, if set, prints messages sent and received.  Key
// exchange messages are printed as if DH were used, so the debug
// messages are wrong when using ECDH.
const debugHandshake = false

// chanSize sets the amount of buffering SSH connections. This is
// primarily for testing: setting chanSize=0 uncovers deadlocks more
// quickly.
const chanSize = 16

// keyingTransport is a packet based transport that supports key
// changes. It need not be thread-safe. It should pass through
// msgNewKeys in both directions.
type keyingTransport interface {
	packetConn

	// prepareKeyChange sets up a key change. The key change for a
	// direction will be effected if a msgNewKeys message is sent
	// or received.
	prepareKeyChange(*algorithms, *kexResult) error
}

// handshakeTransport implements rekeying on top of a keyingTransport
// and offers a thread-safe writePacket() interface.
type handshakeTransport struct {
	conn   keyingTransport
	config *Config

	serverVersion []byte
	clientVersion []byte

	// hostKeys is non-empty if we are the server. In that case,
	// it contains all host keys that can be used to sign the
	// connection.
	hostKeys []Signer

	// hostKeyAlgorithms is non-empty if we are the client. In that case,
	// we accept these key types from the server as host key.
	hostKeyAlgorithms []string

	// On read error, incoming is closed, and readError is set.
	incoming  chan []byte
	readError error

	mu               sync.Mutex
	writeError       error
	sentInitPacket   []byte
	sentInitMsg      *kexInitMsg
	pendingPackets   [][]byte // Used when a key exchange is in progress.
	writePacketsLeft uint32
	writeBytesLeft   int64

	// If the read loop wants to schedule a kex, it pings this
	// channel, and the write loop will send out a kex
	// message.
	requestKex chan struct{}

	// If the other side requests or confirms a kex, its kexInit
	// packet is sent here for the write loop to find it.
	startKex    chan *pendingKex
	kexLoopDone chan struct{} // closed (with writeError non-nil) when kexLoop exits

	// data for host key checking
	hostKeyCallback HostKeyCallback
	dialAddress     string
	remoteAddr      net.Addr

	// bannerCallback is non-empty if we are the client and it has been set in
	// ClientConfig. In that case it is called during the user authentication
	// dance to handle a custom server's message.
	bannerCallback BannerCallback

	// Algorithms agreed in the last key exchange.
	algorithms *algorithms

	// Counters exclusively owned by readLoop.
	readPacketsLeft uint32
	readBytesLeft   int64

	// The session ID or nil if first kex did not complete yet.
	sessionID []byte
}

type pendingKex struct {
	otherInit []byte
	done      chan error
}

func newHandshakeTransport(conn keyingTransport, config *Config, clientVersion, serverVersion []byte) *handshakeTransport {
	t := &handshakeTransport{
		conn:          conn,
		serverVersion: serverVersion,
		clientVersion: clientVersion,
		incoming:      make(chan []byte, chanSize),
		requestKex:    make(chan struct{}, 1),
		startKex:      make(chan *pendingKex),
		kexLoopDone:   make(chan struct{}),

		config: config,
	}
	t.resetReadThresholds()
	t.resetWriteThresholds()

	// We always start with a mandatory key exchange.
	t.requestKex <- struct{}{}
	return t
}

func newClientTransport(conn keyingTransport, clientVersion, serverVersion []byte, config *ClientConfig, dialAddr string, addr net.Addr) *handshakeTransport {
	t := newHandshakeTransport(conn, &config.Config, clientVersion, serverVersion)
	t.dialAddress = dialAddr
	t.remoteAddr = addr
	t.hostKeyCallback = config.HostKeyCallback
	t.bannerCallback = config.BannerCallback
	if config.HostKeyAlgorithms != nil {
		t.hostKeyAlgorithms = config.HostKeyAlgorithms
	} else {
		t.hostKeyAlgorithms = supportedHostKeyAlgos
	}
	go t.readLoop()
	go t.kexLoop()
	return t
}

func newServerTransport(conn keyingTransport, clientVersion, serverVersion []byte, config *ServerConfig) *handshakeTransport {
	t := newHandshakeTransport(conn, &config.Config, clientVersion, serverVersion)
	t.hostKeys = config.hostKeys
	go t.readLoop()
	go t.kexLoop()
	return t
}

func (t *handshakeTransport) getSessionID() []byte {
	return t.sessionID
}

// waitSession waits for the session to be established. This should be
// the first thing to call after instantiating handshakeTransport.
func (t *handshakeTransport) waitSession() error {
	p, err := t.readPacket()
	if err != nil {
		return err
	}
	if p[0] != msgNewKeys {
		return fmt.Errorf("ssh: first packet should be msgNewKeys")
	}

	return nil
}

func (t *handshakeTransport) id() string {
	if len(t.hostKeys) > 0 {
		return "server"
	}
	return "client"
}

func (t *handshakeTransport) printPacket(p []byte, write bool) {
	action := "got"
	if write {
		action = "sent"
	}

	if p[0] == msgChannelData || p[0] == msgChannelExtendedData {
		log.Printf("%s %s data (packet %d bytes)", t.id(), action, len(p))
	} else {
		msg, err := decode(p)
		log.Printf("%s %s %T %v (%v)", t.id(), action, msg, msg, err)
	}
}

func (t *handshakeTransport) readPacket() ([]byte, error) {
	p, ok := <-t.incoming
	if !ok {
		return nil, t.readError
	}
	return p, nil
}

func (t *handshakeTransport) readLoop() {
	first := true
	for {
		p, err := t.readOnePacket(first)
		first = false
		if err != nil {
			t.readError = err
			close(t.incoming)
			break
		}
		if p[0] == msgIgnore || p[0] == msgDebug {
			continue
		}
		t.incoming <- p
	}

	// Stop writers too.
	t.recordWriteError(t.readError)

	// Unblock the writer should it wait for this.
	close(t.startKex)

	// Don't close t.requestKex; it's also written to from writePacket.
}

func (t *handshakeTransport) pushPacket(p []byte) error {
	if debugHandshake {
		t.printPacket(p, true)
	}
	return t.conn.writePacket(p)
}

func (t *handshakeTransport) getWriteError() error {
	t.mu.Lock()
	defer t.mu.Unlock()
	return t.writeError
}

func (t *handshakeTransport) recordWriteError(err error) {
	t.mu.Lock()
	defer t.mu.Unlock()
	if t.writeError == nil && err != nil {
		t.writeError = err
	}
}

func (t *handshakeTransport) requestKeyExchange() {
	select {
	case t.requestKex <- struct{}{}:
	default:
		// something already requested a kex, so do nothing.
	}
}

func (t *handshakeTransport) resetWriteThresholds() {
	t.writePacketsLeft = packetRekeyThreshold
	if t.config.RekeyThreshold > 0 {
		t.writeBytesLeft = int64(t.config.RekeyThreshold)
	} else if t.algorithms != nil {
		t.writeBytesLeft = t.algorithms.w.rekeyBytes()
	} else {
		t.writeBytesLeft = 1 << 30
	}
}

func (t *handshakeTransport) kexLoop() {

write:
	for t.getWriteError() == nil {
		var request *pendingKex
		var sent bool

		for request == nil || !sent {
			var ok bool
			select {
			case request, ok = <-t.startKex:
				if !ok {
					break write
				}
			case <-t.requestKex:
				break
			}

			if !sent {
				if err := t.sendKexInit(); err != nil {
					t.recordWriteError(err)
					break
				}
				sent = true
			}
		}

		if err := t.getWriteError(); err != nil {
			if request != nil {
				request.done <- err
			}
			break
		}

		// We're not servicing t.requestKex, but that is OK:
		// we never block on sending to t.requestKex.

		// We're not servicing t.startKex, but the remote end
		// has just sent us a kexInitMsg, so it can't send
		// another key change request, until we close the done
		// channel on the pendingKex request.

		err := t.enterKeyExchange(request.otherInit)

		t.mu.Lock()
		t.writeError = err
		t.sentInitPacket = nil
		t.sentInitMsg = nil

		t.resetWriteThresholds()

		// we have completed the key exchange. Since the
		// reader is still blocked, it is safe to clear out
		// the requestKex channel. This avoids the situation
		// where: 1) we consumed our own request for the
		// initial kex, and 2) the kex from the remote side
		// caused another send on the requestKex channel,
	clear:
		for {
			select {
			case <-t.requestKex:
				//
			default:
				break clear
			}
		}

		request.done <- t.writeError

		// kex finished. Push packets that we received while
		// the kex was in progress. Don't look at t.startKex
		// and don't increment writtenSinceKex: if we trigger
		// another kex while we are still busy with the last
		// one, things will become very confusing.
		for _, p := range t.pendingPackets {
			t.writeError = t.pushPacket(p)
			if t.writeError != nil {
				break
			}
		}
		t.pendingPackets = t.pendingPackets[:0]
		t.mu.Unlock()
	}

	// Unblock reader.
	t.conn.Close()

	// drain startKex channel. We don't service t.requestKex
	// because nobody does blocking sends there.
	for request := range t.startKex {
		request.done <- t.getWriteError()
	}

	// Mark that the loop is done so that Close can return.
	close(t.kexLoopDone)
}

// The protocol uses uint32 for packet counters, so we can't let them
// reach 1<<32.  We will actually read and write more packets than
// this, though: the other side may send more packets, and after we
// hit this limit on writing we will send a few more packets for the
// key exchange itself.
const packetRekeyThreshold = (1 << 31)

func (t *handshakeTransport) resetReadThresholds() {
	t.readPacketsLeft = packetRekeyThreshold
	if t.config.RekeyThreshold > 0 {
		t.readBytesLeft = int64(t.config.RekeyThreshold)
	} else if t.algorithms != nil {
		t.readBytesLeft = t.algorithms.r.rekeyBytes()
	} else {
		t.readBytesLeft = 1 << 30
	}
}

func (t *handshakeTransport) readOnePacket(first bool) ([]byte, error) {
	p, err := t.conn.readPacket()
	if err != nil {
		return nil, err
	}

	if t.readPacketsLeft > 0 {
		t.readPacketsLeft--
	} else {
		t.requestKeyExchange()
	}

	if t.readBytesLeft > 0 {
		t.readBytesLeft -= int64(len(p))
	} else {
		t.requestKeyExchange()
	}

	if debugHandshake {
		t.printPacket(p, false)
	}

	if first && p[0] != msgKexInit {
		return nil, fmt.Errorf("ssh: first packet should be msgKexInit")
	}

	if p[0] != msgKexInit {
		return p, nil
	}

	firstKex := t.sessionID == nil

	kex := pendingKex{
		done:      make(chan error, 1),
		otherInit: p,
	}
	t.startKex <- &kex
	err = <-kex.done

	if debugHandshake {
		log.Printf("%s exited key exchange (first %v), err %v", t.id(), firstKex, err)
	}

	if err != nil {
		return nil, err
	}

	t.resetReadThresholds()

	// By default, a key exchange is hidden from higher layers by
	// translating it into msgIgnore.
	successPacket := []byte{msgIgnore}
	if firstKex {
		// sendKexInit() for the first kex waits for
		// msgNewKeys so the authentication process is
		// guaranteed to happen over an encrypted transport.
		successPacket = []byte{msgNewKeys}
	}

	return successPacket, nil
}

// sendKexInit sends a key change message.
func (t *handshakeTransport) sendKexInit() error {
	t.mu.Lock()
	defer t.mu.Unlock()
	if t.sentInitMsg != nil {
		// kexInits may be sent either in response to the other side,
		// or because our side wants to initiate a key change, so we
		// may have already sent a kexInit. In that case, don't send a
		// second kexInit.
		return nil
	}

	msg := &kexInitMsg{
		KexAlgos:                t.config.KeyExchanges,
		CiphersClientServer:     t.config.Ciphers,
		CiphersServerClient:     t.config.Ciphers,
		MACsClientServer:        t.config.MACs,
		MACsServerClient:        t.config.MACs,
		CompressionClientServer: supportedCompressions,
		CompressionServerClient: supportedCompressions,
	}
	io.ReadFull(rand.Reader, msg.Cookie[:])

	isServer := len(t.hostKeys) > 0
	if isServer {
		for _, k := range t.hostKeys {
			// If k is an AlgorithmSigner, presume it supports all signature algorithms
			// associated with the key format. (Ideally AlgorithmSigner would have a
			// method to advertise supported algorithms, but it doesn't. This means that
			// adding support for a new algorithm is a breaking change, as we will
			// immediately negotiate it even if existing implementations don't support
			// it. If that ever happens, we'll have to figure something out.)
			// If k is not an AlgorithmSigner, we can only assume it only supports the
			// algorithms that matches the key format. (This means that Sign can't pick
			// a different default.)
			keyFormat := k.PublicKey().Type()
			if _, ok := k.(AlgorithmSigner); ok {
				msg.ServerHostKeyAlgos = append(msg.ServerHostKeyAlgos, algorithmsForKeyFormat(keyFormat)...)
			} else {
				msg.ServerHostKeyAlgos = append(msg.ServerHostKeyAlgos, keyFormat)
			}
		}
	} else {
		msg.ServerHostKeyAlgos = t.hostKeyAlgorithms

		// As a client we opt in to receiving SSH_MSG_EXT_INFO so we know what
		// algorithms the server supports for public key authentication. See RFC
		// 8308, Section 2.1.
		if firstKeyExchange := t.sessionID == nil; firstKeyExchange {
			msg.KexAlgos = make([]string, 0, len(t.config.KeyExchanges)+1)
			msg.KexAlgos = append(msg.KexAlgos, t.config.KeyExchanges...)
			msg.KexAlgos = append(msg.KexAlgos, "ext-info-c")
		}
	}

	packet := Marshal(msg)

	// writePacket destroys the contents, so save a copy.
	packetCopy := make([]byte, len(packet))
	copy(packetCopy, packet)

	if err := t.pushPacket(packetCopy); err != nil {
		return err
	}

	t.sentInitMsg = msg
	t.sentInitPacket = packet

	return nil
}

func (t *handshakeTransport) writePacket(p []byte) error {
	switch p[0] {
	case msgKexInit:
		return errors.New("ssh: only handshakeTransport can send kexInit")
	case msgNewKeys:
		return errors.New("ssh: only handshakeTransport can send newKeys")
	}

	t.mu.Lock()
	defer t.mu.Unlock()
	if t.writeError != nil {
		return t.writeError
	}

	if t.sentInitMsg != nil {
		// Copy the packet so the writer can reuse the buffer.
		cp := make([]byte, len(p))
		copy(cp, p)
		t.pendingPackets = append(t.pendingPackets, cp)
		return nil
	}

	if t.writeBytesLeft > 0 {
		t.writeBytesLeft -= int64(len(p))
	} else {
		t.requestKeyExchange()
	}

	if t.writePacketsLeft > 0 {
		t.writePacketsLeft--
	} else {
		t.requestKeyExchange()
	}

	if err := t.pushPacket(p); err != nil {
		t.writeError = err
	}

	return nil
}

func (t *handshakeTransport) Close() error {
	// Close the connection. This should cause the readLoop goroutine to wake up
	// and close t.startKex, which will shut down kexLoop if running.
	err := t.conn.Close()

	// Wait for the kexLoop goroutine to complete.
	// At that point we know that the readLoop goroutine is complete too,
	// because kexLoop itself waits for readLoop to close the startKex channel.
	<-t.kexLoopDone

	return err
}

func (t *handshakeTransport) enterKeyExchange(otherInitPacket []byte) error {
	if debugHandshake {
		log.Printf("%s entered key exchange", t.id())
	}

	otherInit := &kexInitMsg{}
	if err := Unmarshal(otherInitPacket, otherInit); err != nil {
		return err
	}

	magics := handshakeMagics{
		clientVersion: t.clientVersion,
		serverVersion: t.serverVersion,
		clientKexInit: otherInitPacket,
		serverKexInit: t.sentInitPacket,
	}

	clientInit := otherInit
	serverInit := t.sentInitMsg
	isClient := len(t.hostKeys) == 0
	if isClient {
		clientInit, serverInit = serverInit, clientInit

		magics.clientKexInit = t.sentInitPacket
		magics.serverKexInit = otherInitPacket
	}

	var err error
	t.algorithms, err = findAgreedAlgorithms(isClient, clientInit, serverInit)
	if err != nil {
		return err
	}

	// We don't send FirstKexFollows, but we handle receiving it.
	//
	// RFC 4253 section 7 defines the kex and the agreement method for
	// first_kex_packet_follows. It states that the guessed packet
	// should be ignored if the "kex algorithm and/or the host
	// key algorithm is guessed wrong (server and client have
	// different preferred algorithm), or if any of the other
	// algorithms cannot be agreed upon". The other algorithms have
	// already been checked above so the kex algorithm and host key
	// algorithm are checked here.
	if otherInit.FirstKexFollows && (clientInit.KexAlgos[0] != serverInit.KexAlgos[0] || clientInit.ServerHostKeyAlgos[0] != serverInit.ServerHostKeyAlgos[0]) {
		// other side sent a kex message for the wrong algorithm,
		// which we have to ignore.
		if _, err := t.conn.readPacket(); err != nil {
			return err
		}
	}

	kex, ok := kexAlgoMap[t.algorithms.kex]
	if !ok {
		return fmt.Errorf("ssh: unexpected key exchange algorithm %v", t.algorithms.kex)
	}

	var result *kexResult
	if len(t.hostKeys) > 0 {
		result, err = t.server(kex, &magics)
	} else {
		result, err = t.client(kex, &magics)
	}

	if err != nil {
		return err
	}

	firstKeyExchange := t.sessionID == nil
	if firstKeyExchange {
		t.sessionID = result.H
	}
	result.SessionID = t.sessionID

	if err := t.conn.prepareKeyChange(t.algorithms, result); err != nil {
		return err
	}
	if err = t.conn.writePacket([]byte{msgNewKeys}); err != nil {
		return err
	}

	// On the server side, after the first SSH_MSG_NEWKEYS, send a SSH_MSG_EXT_INFO
	// message with the server-sig-algs extension if the client supports it. See
	// RFC 8308, Sections 2.4 and 3.1.
	if !isClient && firstKeyExchange && contains(clientInit.KexAlgos, "ext-info-c") {
		extInfo := &extInfoMsg{
			NumExtensions: 1,
			Payload:       make([]byte, 0, 4+15+4+len(supportedPubKeyAuthAlgosList)),
		}
		extInfo.Payload = appendInt(extInfo.Payload, len("server-sig-algs"))
		extInfo.Payload = append(extInfo.Payload, "server-sig-algs"...)
		extInfo.Payload = appendInt(extInfo.Payload, len(supportedPubKeyAuthAlgosList))
		extInfo.Payload = append(extInfo.Payload, supportedPubKeyAuthAlgosList...)
		if err := t.conn.writePacket(Marshal(extInfo)); err != nil {
			return err
		}
	}

	if packet, err := t.conn.readPacket(); err != nil {
		return err
	} else if packet[0] != msgNewKeys {
		return unexpectedMessageError(msgNewKeys, packet[0])
	}

	return nil
}

// algorithmSignerWrapper is an AlgorithmSigner that only supports the default
// key format algorithm.
//
// This is technically a violation of the AlgorithmSigner interface, but it
// should be unreachable given where we use this. Anyway, at least it returns an
// error instead of panicing or producing an incorrect signature.
type algorithmSignerWrapper struct {
	Signer
}

func (a algorithmSignerWrapper) SignWithAlgorithm(rand io.Reader, data []byte, algorithm string) (*Signature, error) {
	if algorithm != underlyingAlgo(a.PublicKey().Type()) {
		return nil, errors.New("ssh: internal error: algorithmSignerWrapper invoked with non-default algorithm")
	}
	return a.Sign(rand, data)
}

func pickHostKey(hostKeys []Signer, algo string) AlgorithmSigner {
	for _, k := range hostKeys {
		if algo == k.PublicKey().Type() {
			return algorithmSignerWrapper{k}
		}
		k, ok := k.(AlgorithmSigner)
		if !ok {
			continue
		}
		for _, a := range algorithmsForKeyFormat(k.PublicKey().Type()) {
			if algo == a {
				return k
			}
		}
	}
	return nil
}

func (t *handshakeTransport) server(kex kexAlgorithm, magics *handshakeMagics) (*kexResult, error) {
	hostKey := pickHostKey(t.hostKeys, t.algorithms.hostKey)
	if hostKey == nil {
		return nil, errors.New("ssh: internal error: negotiated unsupported signature type")
	}

	r, err := kex.Server(t.conn, t.config.Rand, magics, hostKey, t.algorithms.hostKey)
	return r, err
}

func (t *handshakeTransport) client(kex kexAlgorithm, magics *handshakeMagics) (*kexResult, error) {
	result, err := kex.Client(t.conn, t.config.Rand, magics)
	if err != nil {
		return nil, err
	}

	hostKey, err := ParsePublicKey(result.HostKey)
	if err != nil {
		return nil, err
	}

	if err := verifyHostKeySignature(hostKey, t.algorithms.hostKey, result); err != nil {
		return nil, err
	}

	err = t.hostKeyCallback(t.dialAddress, t.remoteAddr, hostKey)
	if err != nil {
		return nil, err
	}

	return result, nil
}
   07070100000D1A000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/internal   07070100000D1B000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/internal/bcrypt_pbkdf  07070100000D1C000081A4000000000000000000000001645E367C0000097E000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/internal/bcrypt_pbkdf/bcrypt_pbkdf.go  // Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package bcrypt_pbkdf implements bcrypt_pbkdf(3) from OpenBSD.
//
// See https://flak.tedunangst.com/post/bcrypt-pbkdf and
// https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libutil/bcrypt_pbkdf.c.
package bcrypt_pbkdf

import (
	"crypto/sha512"
	"errors"
	"golang.org/x/crypto/blowfish"
)

const blockSize = 32

// Key derives a key from the password, salt and rounds count, returning a
// []byte of length keyLen that can be used as cryptographic key.
func Key(password, salt []byte, rounds, keyLen int) ([]byte, error) {
	if rounds < 1 {
		return nil, errors.New("bcrypt_pbkdf: number of rounds is too small")
	}
	if len(password) == 0 {
		return nil, errors.New("bcrypt_pbkdf: empty password")
	}
	if len(salt) == 0 || len(salt) > 1<<20 {
		return nil, errors.New("bcrypt_pbkdf: bad salt length")
	}
	if keyLen > 1024 {
		return nil, errors.New("bcrypt_pbkdf: keyLen is too large")
	}

	numBlocks := (keyLen + blockSize - 1) / blockSize
	key := make([]byte, numBlocks*blockSize)

	h := sha512.New()
	h.Write(password)
	shapass := h.Sum(nil)

	shasalt := make([]byte, 0, sha512.Size)
	cnt, tmp := make([]byte, 4), make([]byte, blockSize)
	for block := 1; block <= numBlocks; block++ {
		h.Reset()
		h.Write(salt)
		cnt[0] = byte(block >> 24)
		cnt[1] = byte(block >> 16)
		cnt[2] = byte(block >> 8)
		cnt[3] = byte(block)
		h.Write(cnt)
		bcryptHash(tmp, shapass, h.Sum(shasalt))

		out := make([]byte, blockSize)
		copy(out, tmp)
		for i := 2; i <= rounds; i++ {
			h.Reset()
			h.Write(tmp)
			bcryptHash(tmp, shapass, h.Sum(shasalt))
			for j := 0; j < len(out); j++ {
				out[j] ^= tmp[j]
			}
		}

		for i, v := range out {
			key[i*numBlocks+(block-1)] = v
		}
	}
	return key[:keyLen], nil
}

var magic = []byte("OxychromaticBlowfishSwatDynamite")

func bcryptHash(out, shapass, shasalt []byte) {
	c, err := blowfish.NewSaltedCipher(shapass, shasalt)
	if err != nil {
		panic(err)
	}
	for i := 0; i < 64; i++ {
		blowfish.ExpandKey(shasalt, c)
		blowfish.ExpandKey(shapass, c)
	}
	copy(out, magic)
	for i := 0; i < 32; i += 8 {
		for j := 0; j < 64; j++ {
			c.Encrypt(out[i:i+8], out[i:i+8])
		}
	}
	// Swap bytes due to different endianness.
	for i := 0; i < 32; i += 4 {
		out[i+3], out[i+2], out[i+1], out[i] = out[i], out[i+1], out[i+2], out[i+3]
	}
}
  07070100000D1D000081A4000000000000000000000001645E367C00005340000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/kex.go // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package ssh

import (
	"crypto"
	"crypto/ecdsa"
	"crypto/elliptic"
	"crypto/rand"
	"crypto/subtle"
	"encoding/binary"
	"errors"
	"fmt"
	"io"
	"math/big"

	"golang.org/x/crypto/curve25519"
)

const (
	kexAlgoDH1SHA1                = "diffie-hellman-group1-sha1"
	kexAlgoDH14SHA1               = "diffie-hellman-group14-sha1"
	kexAlgoDH14SHA256             = "diffie-hellman-group14-sha256"
	kexAlgoECDH256                = "ecdh-sha2-nistp256"
	kexAlgoECDH384                = "ecdh-sha2-nistp384"
	kexAlgoECDH521                = "ecdh-sha2-nistp521"
	kexAlgoCurve25519SHA256LibSSH = "curve25519-sha256@libssh.org"
	kexAlgoCurve25519SHA256       = "curve25519-sha256"

	// For the following kex only the client half contains a production
	// ready implementation. The server half only consists of a minimal
	// implementation to satisfy the automated tests.
	kexAlgoDHGEXSHA1   = "diffie-hellman-group-exchange-sha1"
	kexAlgoDHGEXSHA256 = "diffie-hellman-group-exchange-sha256"
)

// kexResult captures the outcome of a key exchange.
type kexResult struct {
	// Session hash. See also RFC 4253, section 8.
	H []byte

	// Shared secret. See also RFC 4253, section 8.
	K []byte

	// Host key as hashed into H.
	HostKey []byte

	// Signature of H.
	Signature []byte

	// A cryptographic hash function that matches the security
	// level of the key exchange algorithm. It is used for
	// calculating H, and for deriving keys from H and K.
	Hash crypto.Hash

	// The session ID, which is the first H computed. This is used
	// to derive key material inside the transport.
	SessionID []byte
}

// handshakeMagics contains data that is always included in the
// session hash.
type handshakeMagics struct {
	clientVersion, serverVersion []byte
	clientKexInit, serverKexInit []byte
}

func (m *handshakeMagics) write(w io.Writer) {
	writeString(w, m.clientVersion)
	writeString(w, m.serverVersion)
	writeString(w, m.clientKexInit)
	writeString(w, m.serverKexInit)
}

// kexAlgorithm abstracts different key exchange algorithms.
type kexAlgorithm interface {
	// Server runs server-side key agreement, signing the result
	// with a hostkey. algo is the negotiated algorithm, and may
	// be a certificate type.
	Server(p packetConn, rand io.Reader, magics *handshakeMagics, s AlgorithmSigner, algo string) (*kexResult, error)

	// Client runs the client-side key agreement. Caller is
	// responsible for verifying the host key signature.
	Client(p packetConn, rand io.Reader, magics *handshakeMagics) (*kexResult, error)
}

// dhGroup is a multiplicative group suitable for implementing Diffie-Hellman key agreement.
type dhGroup struct {
	g, p, pMinus1 *big.Int
	hashFunc      crypto.Hash
}

func (group *dhGroup) diffieHellman(theirPublic, myPrivate *big.Int) (*big.Int, error) {
	if theirPublic.Cmp(bigOne) <= 0 || theirPublic.Cmp(group.pMinus1) >= 0 {
		return nil, errors.New("ssh: DH parameter out of bounds")
	}
	return new(big.Int).Exp(theirPublic, myPrivate, group.p), nil
}

func (group *dhGroup) Client(c packetConn, randSource io.Reader, magics *handshakeMagics) (*kexResult, error) {
	var x *big.Int
	for {
		var err error
		if x, err = rand.Int(randSource, group.pMinus1); err != nil {
			return nil, err
		}
		if x.Sign() > 0 {
			break
		}
	}

	X := new(big.Int).Exp(group.g, x, group.p)
	kexDHInit := kexDHInitMsg{
		X: X,
	}
	if err := c.writePacket(Marshal(&kexDHInit)); err != nil {
		return nil, err
	}

	packet, err := c.readPacket()
	if err != nil {
		return nil, err
	}

	var kexDHReply kexDHReplyMsg
	if err = Unmarshal(packet, &kexDHReply); err != nil {
		return nil, err
	}

	ki, err := group.diffieHellman(kexDHReply.Y, x)
	if err != nil {
		return nil, err
	}

	h := group.hashFunc.New()
	magics.write(h)
	writeString(h, kexDHReply.HostKey)
	writeInt(h, X)
	writeInt(h, kexDHReply.Y)
	K := make([]byte, intLength(ki))
	marshalInt(K, ki)
	h.Write(K)

	return &kexResult{
		H:         h.Sum(nil),
		K:         K,
		HostKey:   kexDHReply.HostKey,
		Signature: kexDHReply.Signature,
		Hash:      group.hashFunc,
	}, nil
}

func (group *dhGroup) Server(c packetConn, randSource io.Reader, magics *handshakeMagics, priv AlgorithmSigner, algo string) (result *kexResult, err error) {
	packet, err := c.readPacket()
	if err != nil {
		return
	}
	var kexDHInit kexDHInitMsg
	if err = Unmarshal(packet, &kexDHInit); err != nil {
		return
	}

	var y *big.Int
	for {
		if y, err = rand.Int(randSource, group.pMinus1); err != nil {
			return
		}
		if y.Sign() > 0 {
			break
		}
	}

	Y := new(big.Int).Exp(group.g, y, group.p)
	ki, err := group.diffieHellman(kexDHInit.X, y)
	if err != nil {
		return nil, err
	}

	hostKeyBytes := priv.PublicKey().Marshal()

	h := group.hashFunc.New()
	magics.write(h)
	writeString(h, hostKeyBytes)
	writeInt(h, kexDHInit.X)
	writeInt(h, Y)

	K := make([]byte, intLength(ki))
	marshalInt(K, ki)
	h.Write(K)

	H := h.Sum(nil)

	// H is already a hash, but the hostkey signing will apply its
	// own key-specific hash algorithm.
	sig, err := signAndMarshal(priv, randSource, H, algo)
	if err != nil {
		return nil, err
	}

	kexDHReply := kexDHReplyMsg{
		HostKey:   hostKeyBytes,
		Y:         Y,
		Signature: sig,
	}
	packet = Marshal(&kexDHReply)

	err = c.writePacket(packet)
	return &kexResult{
		H:         H,
		K:         K,
		HostKey:   hostKeyBytes,
		Signature: sig,
		Hash:      group.hashFunc,
	}, err
}

// ecdh performs Elliptic Curve Diffie-Hellman key exchange as
// described in RFC 5656, section 4.
type ecdh struct {
	curve elliptic.Curve
}

func (kex *ecdh) Client(c packetConn, rand io.Reader, magics *handshakeMagics) (*kexResult, error) {
	ephKey, err := ecdsa.GenerateKey(kex.curve, rand)
	if err != nil {
		return nil, err
	}

	kexInit := kexECDHInitMsg{
		ClientPubKey: elliptic.Marshal(kex.curve, ephKey.PublicKey.X, ephKey.PublicKey.Y),
	}

	serialized := Marshal(&kexInit)
	if err := c.writePacket(serialized); err != nil {
		return nil, err
	}

	packet, err := c.readPacket()
	if err != nil {
		return nil, err
	}

	var reply kexECDHReplyMsg
	if err = Unmarshal(packet, &reply); err != nil {
		return nil, err
	}

	x, y, err := unmarshalECKey(kex.curve, reply.EphemeralPubKey)
	if err != nil {
		return nil, err
	}

	// generate shared secret
	secret, _ := kex.curve.ScalarMult(x, y, ephKey.D.Bytes())

	h := ecHash(kex.curve).New()
	magics.write(h)
	writeString(h, reply.HostKey)
	writeString(h, kexInit.ClientPubKey)
	writeString(h, reply.EphemeralPubKey)
	K := make([]byte, intLength(secret))
	marshalInt(K, secret)
	h.Write(K)

	return &kexResult{
		H:         h.Sum(nil),
		K:         K,
		HostKey:   reply.HostKey,
		Signature: reply.Signature,
		Hash:      ecHash(kex.curve),
	}, nil
}

// unmarshalECKey parses and checks an EC key.
func unmarshalECKey(curve elliptic.Curve, pubkey []byte) (x, y *big.Int, err error) {
	x, y = elliptic.Unmarshal(curve, pubkey)
	if x == nil {
		return nil, nil, errors.New("ssh: elliptic.Unmarshal failure")
	}
	if !validateECPublicKey(curve, x, y) {
		return nil, nil, errors.New("ssh: public key not on curve")
	}
	return x, y, nil
}

// validateECPublicKey checks that the point is a valid public key for
// the given curve. See [SEC1], 3.2.2
func validateECPublicKey(curve elliptic.Curve, x, y *big.Int) bool {
	if x.Sign() == 0 && y.Sign() == 0 {
		return false
	}

	if x.Cmp(curve.Params().P) >= 0 {
		return false
	}

	if y.Cmp(curve.Params().P) >= 0 {
		return false
	}

	if !curve.IsOnCurve(x, y) {
		return false
	}

	// We don't check if N * PubKey == 0, since
	//
	// - the NIST curves have cofactor = 1, so this is implicit.
	// (We don't foresee an implementation that supports non NIST
	// curves)
	//
	// - for ephemeral keys, we don't need to worry about small
	// subgroup attacks.
	return true
}

func (kex *ecdh) Server(c packetConn, rand io.Reader, magics *handshakeMagics, priv AlgorithmSigner, algo string) (result *kexResult, err error) {
	packet, err := c.readPacket()
	if err != nil {
		return nil, err
	}

	var kexECDHInit kexECDHInitMsg
	if err = Unmarshal(packet, &kexECDHInit); err != nil {
		return nil, err
	}

	clientX, clientY, err := unmarshalECKey(kex.curve, kexECDHInit.ClientPubKey)
	if err != nil {
		return nil, err
	}

	// We could cache this key across multiple users/multiple
	// connection attempts, but the benefit is small. OpenSSH
	// generates a new key for each incoming connection.
	ephKey, err := ecdsa.GenerateKey(kex.curve, rand)
	if err != nil {
		return nil, err
	}

	hostKeyBytes := priv.PublicKey().Marshal()

	serializedEphKey := elliptic.Marshal(kex.curve, ephKey.PublicKey.X, ephKey.PublicKey.Y)

	// generate shared secret
	secret, _ := kex.curve.ScalarMult(clientX, clientY, ephKey.D.Bytes())

	h := ecHash(kex.curve).New()
	magics.write(h)
	writeString(h, hostKeyBytes)
	writeString(h, kexECDHInit.ClientPubKey)
	writeString(h, serializedEphKey)

	K := make([]byte, intLength(secret))
	marshalInt(K, secret)
	h.Write(K)

	H := h.Sum(nil)

	// H is already a hash, but the hostkey signing will apply its
	// own key-specific hash algorithm.
	sig, err := signAndMarshal(priv, rand, H, algo)
	if err != nil {
		return nil, err
	}

	reply := kexECDHReplyMsg{
		EphemeralPubKey: serializedEphKey,
		HostKey:         hostKeyBytes,
		Signature:       sig,
	}

	serialized := Marshal(&reply)
	if err := c.writePacket(serialized); err != nil {
		return nil, err
	}

	return &kexResult{
		H:         H,
		K:         K,
		HostKey:   reply.HostKey,
		Signature: sig,
		Hash:      ecHash(kex.curve),
	}, nil
}

// ecHash returns the hash to match the given elliptic curve, see RFC
// 5656, section 6.2.1
func ecHash(curve elliptic.Curve) crypto.Hash {
	bitSize := curve.Params().BitSize
	switch {
	case bitSize <= 256:
		return crypto.SHA256
	case bitSize <= 384:
		return crypto.SHA384
	}
	return crypto.SHA512
}

var kexAlgoMap = map[string]kexAlgorithm{}

func init() {
	// This is the group called diffie-hellman-group1-sha1 in
	// RFC 4253 and Oakley Group 2 in RFC 2409.
	p, _ := new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF", 16)
	kexAlgoMap[kexAlgoDH1SHA1] = &dhGroup{
		g:        new(big.Int).SetInt64(2),
		p:        p,
		pMinus1:  new(big.Int).Sub(p, bigOne),
		hashFunc: crypto.SHA1,
	}

	// This are the groups called diffie-hellman-group14-sha1 and
	// diffie-hellman-group14-sha256 in RFC 4253 and RFC 8268,
	// and Oakley Group 14 in RFC 3526.
	p, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF", 16)
	group14 := &dhGroup{
		g:       new(big.Int).SetInt64(2),
		p:       p,
		pMinus1: new(big.Int).Sub(p, bigOne),
	}

	kexAlgoMap[kexAlgoDH14SHA1] = &dhGroup{
		g: group14.g, p: group14.p, pMinus1: group14.pMinus1,
		hashFunc: crypto.SHA1,
	}
	kexAlgoMap[kexAlgoDH14SHA256] = &dhGroup{
		g: group14.g, p: group14.p, pMinus1: group14.pMinus1,
		hashFunc: crypto.SHA256,
	}

	kexAlgoMap[kexAlgoECDH521] = &ecdh{elliptic.P521()}
	kexAlgoMap[kexAlgoECDH384] = &ecdh{elliptic.P384()}
	kexAlgoMap[kexAlgoECDH256] = &ecdh{elliptic.P256()}
	kexAlgoMap[kexAlgoCurve25519SHA256] = &curve25519sha256{}
	kexAlgoMap[kexAlgoCurve25519SHA256LibSSH] = &curve25519sha256{}
	kexAlgoMap[kexAlgoDHGEXSHA1] = &dhGEXSHA{hashFunc: crypto.SHA1}
	kexAlgoMap[kexAlgoDHGEXSHA256] = &dhGEXSHA{hashFunc: crypto.SHA256}
}

// curve25519sha256 implements the curve25519-sha256 (formerly known as
// curve25519-sha256@libssh.org) key exchange method, as described in RFC 8731.
type curve25519sha256 struct{}

type curve25519KeyPair struct {
	priv [32]byte
	pub  [32]byte
}

func (kp *curve25519KeyPair) generate(rand io.Reader) error {
	if _, err := io.ReadFull(rand, kp.priv[:]); err != nil {
		return err
	}
	curve25519.ScalarBaseMult(&kp.pub, &kp.priv)
	return nil
}

// curve25519Zeros is just an array of 32 zero bytes so that we have something
// convenient to compare against in order to reject curve25519 points with the
// wrong order.
var curve25519Zeros [32]byte

func (kex *curve25519sha256) Client(c packetConn, rand io.Reader, magics *handshakeMagics) (*kexResult, error) {
	var kp curve25519KeyPair
	if err := kp.generate(rand); err != nil {
		return nil, err
	}
	if err := c.writePacket(Marshal(&kexECDHInitMsg{kp.pub[:]})); err != nil {
		return nil, err
	}

	packet, err := c.readPacket()
	if err != nil {
		return nil, err
	}

	var reply kexECDHReplyMsg
	if err = Unmarshal(packet, &reply); err != nil {
		return nil, err
	}
	if len(reply.EphemeralPubKey) != 32 {
		return nil, errors.New("ssh: peer's curve25519 public value has wrong length")
	}

	var servPub, secret [32]byte
	copy(servPub[:], reply.EphemeralPubKey)
	curve25519.ScalarMult(&secret, &kp.priv, &servPub)
	if subtle.ConstantTimeCompare(secret[:], curve25519Zeros[:]) == 1 {
		return nil, errors.New("ssh: peer's curve25519 public value has wrong order")
	}

	h := crypto.SHA256.New()
	magics.write(h)
	writeString(h, reply.HostKey)
	writeString(h, kp.pub[:])
	writeString(h, reply.EphemeralPubKey)

	ki := new(big.Int).SetBytes(secret[:])
	K := make([]byte, intLength(ki))
	marshalInt(K, ki)
	h.Write(K)

	return &kexResult{
		H:         h.Sum(nil),
		K:         K,
		HostKey:   reply.HostKey,
		Signature: reply.Signature,
		Hash:      crypto.SHA256,
	}, nil
}

func (kex *curve25519sha256) Server(c packetConn, rand io.Reader, magics *handshakeMagics, priv AlgorithmSigner, algo string) (result *kexResult, err error) {
	packet, err := c.readPacket()
	if err != nil {
		return
	}
	var kexInit kexECDHInitMsg
	if err = Unmarshal(packet, &kexInit); err != nil {
		return
	}

	if len(kexInit.ClientPubKey) != 32 {
		return nil, errors.New("ssh: peer's curve25519 public value has wrong length")
	}

	var kp curve25519KeyPair
	if err := kp.generate(rand); err != nil {
		return nil, err
	}

	var clientPub, secret [32]byte
	copy(clientPub[:], kexInit.ClientPubKey)
	curve25519.ScalarMult(&secret, &kp.priv, &clientPub)
	if subtle.ConstantTimeCompare(secret[:], curve25519Zeros[:]) == 1 {
		return nil, errors.New("ssh: peer's curve25519 public value has wrong order")
	}

	hostKeyBytes := priv.PublicKey().Marshal()

	h := crypto.SHA256.New()
	magics.write(h)
	writeString(h, hostKeyBytes)
	writeString(h, kexInit.ClientPubKey)
	writeString(h, kp.pub[:])

	ki := new(big.Int).SetBytes(secret[:])
	K := make([]byte, intLength(ki))
	marshalInt(K, ki)
	h.Write(K)

	H := h.Sum(nil)

	sig, err := signAndMarshal(priv, rand, H, algo)
	if err != nil {
		return nil, err
	}

	reply := kexECDHReplyMsg{
		EphemeralPubKey: kp.pub[:],
		HostKey:         hostKeyBytes,
		Signature:       sig,
	}
	if err := c.writePacket(Marshal(&reply)); err != nil {
		return nil, err
	}
	return &kexResult{
		H:         H,
		K:         K,
		HostKey:   hostKeyBytes,
		Signature: sig,
		Hash:      crypto.SHA256,
	}, nil
}

// dhGEXSHA implements the diffie-hellman-group-exchange-sha1 and
// diffie-hellman-group-exchange-sha256 key agreement protocols,
// as described in RFC 4419
type dhGEXSHA struct {
	hashFunc crypto.Hash
}

const (
	dhGroupExchangeMinimumBits   = 2048
	dhGroupExchangePreferredBits = 2048
	dhGroupExchangeMaximumBits   = 8192
)

func (gex *dhGEXSHA) Client(c packetConn, randSource io.Reader, magics *handshakeMagics) (*kexResult, error) {
	// Send GexRequest
	kexDHGexRequest := kexDHGexRequestMsg{
		MinBits:      dhGroupExchangeMinimumBits,
		PreferedBits: dhGroupExchangePreferredBits,
		MaxBits:      dhGroupExchangeMaximumBits,
	}
	if err := c.writePacket(Marshal(&kexDHGexRequest)); err != nil {
		return nil, err
	}

	// Receive GexGroup
	packet, err := c.readPacket()
	if err != nil {
		return nil, err
	}

	var msg kexDHGexGroupMsg
	if err = Unmarshal(packet, &msg); err != nil {
		return nil, err
	}

	// reject if p's bit length < dhGroupExchangeMinimumBits or > dhGroupExchangeMaximumBits
	if msg.P.BitLen() < dhGroupExchangeMinimumBits || msg.P.BitLen() > dhGroupExchangeMaximumBits {
		return nil, fmt.Errorf("ssh: server-generated gex p is out of range (%d bits)", msg.P.BitLen())
	}

	// Check if g is safe by verifying that 1 < g < p-1
	pMinusOne := new(big.Int).Sub(msg.P, bigOne)
	if msg.G.Cmp(bigOne) <= 0 || msg.G.Cmp(pMinusOne) >= 0 {
		return nil, fmt.Errorf("ssh: server provided gex g is not safe")
	}

	// Send GexInit
	pHalf := new(big.Int).Rsh(msg.P, 1)
	x, err := rand.Int(randSource, pHalf)
	if err != nil {
		return nil, err
	}
	X := new(big.Int).Exp(msg.G, x, msg.P)
	kexDHGexInit := kexDHGexInitMsg{
		X: X,
	}
	if err := c.writePacket(Marshal(&kexDHGexInit)); err != nil {
		return nil, err
	}

	// Receive GexReply
	packet, err = c.readPacket()
	if err != nil {
		return nil, err
	}

	var kexDHGexReply kexDHGexReplyMsg
	if err = Unmarshal(packet, &kexDHGexReply); err != nil {
		return nil, err
	}

	if kexDHGexReply.Y.Cmp(bigOne) <= 0 || kexDHGexReply.Y.Cmp(pMinusOne) >= 0 {
		return nil, errors.New("ssh: DH parameter out of bounds")
	}
	kInt := new(big.Int).Exp(kexDHGexReply.Y, x, msg.P)

	// Check if k is safe by verifying that k > 1 and k < p - 1
	if kInt.Cmp(bigOne) <= 0 || kInt.Cmp(pMinusOne) >= 0 {
		return nil, fmt.Errorf("ssh: derived k is not safe")
	}

	h := gex.hashFunc.New()
	magics.write(h)
	writeString(h, kexDHGexReply.HostKey)
	binary.Write(h, binary.BigEndian, uint32(dhGroupExchangeMinimumBits))
	binary.Write(h, binary.BigEndian, uint32(dhGroupExchangePreferredBits))
	binary.Write(h, binary.BigEndian, uint32(dhGroupExchangeMaximumBits))
	writeInt(h, msg.P)
	writeInt(h, msg.G)
	writeInt(h, X)
	writeInt(h, kexDHGexReply.Y)
	K := make([]byte, intLength(kInt))
	marshalInt(K, kInt)
	h.Write(K)

	return &kexResult{
		H:         h.Sum(nil),
		K:         K,
		HostKey:   kexDHGexReply.HostKey,
		Signature: kexDHGexReply.Signature,
		Hash:      gex.hashFunc,
	}, nil
}

// Server half implementation of the Diffie Hellman Key Exchange with SHA1 and SHA256.
//
// This is a minimal implementation to satisfy the automated tests.
func (gex dhGEXSHA) Server(c packetConn, randSource io.Reader, magics *handshakeMagics, priv AlgorithmSigner, algo string) (result *kexResult, err error) {
	// Receive GexRequest
	packet, err := c.readPacket()
	if err != nil {
		return
	}
	var kexDHGexRequest kexDHGexRequestMsg
	if err = Unmarshal(packet, &kexDHGexRequest); err != nil {
		return
	}

	// Send GexGroup
	// This is the group called diffie-hellman-group14-sha1 in RFC
	// 4253 and Oakley Group 14 in RFC 3526.
	p, _ := new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF", 16)
	g := big.NewInt(2)

	msg := &kexDHGexGroupMsg{
		P: p,
		G: g,
	}
	if err := c.writePacket(Marshal(msg)); err != nil {
		return nil, err
	}

	// Receive GexInit
	packet, err = c.readPacket()
	if err != nil {
		return
	}
	var kexDHGexInit kexDHGexInitMsg
	if err = Unmarshal(packet, &kexDHGexInit); err != nil {
		return
	}

	pHalf := new(big.Int).Rsh(p, 1)

	y, err := rand.Int(randSource, pHalf)
	if err != nil {
		return
	}
	Y := new(big.Int).Exp(g, y, p)

	pMinusOne := new(big.Int).Sub(p, bigOne)
	if kexDHGexInit.X.Cmp(bigOne) <= 0 || kexDHGexInit.X.Cmp(pMinusOne) >= 0 {
		return nil, errors.New("ssh: DH parameter out of bounds")
	}
	kInt := new(big.Int).Exp(kexDHGexInit.X, y, p)

	hostKeyBytes := priv.PublicKey().Marshal()

	h := gex.hashFunc.New()
	magics.write(h)
	writeString(h, hostKeyBytes)
	binary.Write(h, binary.BigEndian, uint32(dhGroupExchangeMinimumBits))
	binary.Write(h, binary.BigEndian, uint32(dhGroupExchangePreferredBits))
	binary.Write(h, binary.BigEndian, uint32(dhGroupExchangeMaximumBits))
	writeInt(h, p)
	writeInt(h, g)
	writeInt(h, kexDHGexInit.X)
	writeInt(h, Y)

	K := make([]byte, intLength(kInt))
	marshalInt(K, kInt)
	h.Write(K)

	H := h.Sum(nil)

	// H is already a hash, but the hostkey signing will apply its
	// own key-specific hash algorithm.
	sig, err := signAndMarshal(priv, randSource, H, algo)
	if err != nil {
		return nil, err
	}

	kexDHGexReply := kexDHGexReplyMsg{
		HostKey:   hostKeyBytes,
		Y:         Y,
		Signature: sig,
	}
	packet = Marshal(&kexDHGexReply)

	err = c.writePacket(packet)

	return &kexResult{
		H:         H,
		K:         K,
		HostKey:   hostKeyBytes,
		Signature: sig,
		Hash:      gex.hashFunc,
	}, err
}
07070100000D1E000081A4000000000000000000000001645E367C000093C0000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/keys.go    // Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package ssh

import (
	"bytes"
	"crypto"
	"crypto/aes"
	"crypto/cipher"
	"crypto/dsa"
	"crypto/ecdsa"
	"crypto/elliptic"
	"crypto/md5"
	"crypto/rsa"
	"crypto/sha256"
	"crypto/x509"
	"encoding/asn1"
	"encoding/base64"
	"encoding/hex"
	"encoding/pem"
	"errors"
	"fmt"
	"io"
	"math/big"
	"strings"

	"golang.org/x/crypto/ed25519"
	"golang.org/x/crypto/ssh/internal/bcrypt_pbkdf"
)

// Public key algorithms names. These values can appear in PublicKey.Type,
// ClientConfig.HostKeyAlgorithms, Signature.Format, or as AlgorithmSigner
// arguments.
const (
	KeyAlgoRSA        = "ssh-rsa"
	KeyAlgoDSA        = "ssh-dss"
	KeyAlgoECDSA256   = "ecdsa-sha2-nistp256"
	KeyAlgoSKECDSA256 = "sk-ecdsa-sha2-nistp256@openssh.com"
	KeyAlgoECDSA384   = "ecdsa-sha2-nistp384"
	KeyAlgoECDSA521   = "ecdsa-sha2-nistp521"
	KeyAlgoED25519    = "ssh-ed25519"
	KeyAlgoSKED25519  = "sk-ssh-ed25519@openssh.com"

	// KeyAlgoRSASHA256 and KeyAlgoRSASHA512 are only public key algorithms, not
	// public key formats, so they can't appear as a PublicKey.Type. The
	// corresponding PublicKey.Type is KeyAlgoRSA. See RFC 8332, Section 2.
	KeyAlgoRSASHA256 = "rsa-sha2-256"
	KeyAlgoRSASHA512 = "rsa-sha2-512"
)

const (
	// Deprecated: use KeyAlgoRSA.
	SigAlgoRSA = KeyAlgoRSA
	// Deprecated: use KeyAlgoRSASHA256.
	SigAlgoRSASHA2256 = KeyAlgoRSASHA256
	// Deprecated: use KeyAlgoRSASHA512.
	SigAlgoRSASHA2512 = KeyAlgoRSASHA512
)

// parsePubKey parses a public key of the given algorithm.
// Use ParsePublicKey for keys with prepended algorithm.
func parsePubKey(in []byte, algo string) (pubKey PublicKey, rest []byte, err error) {
	switch algo {
	case KeyAlgoRSA:
		return parseRSA(in)
	case KeyAlgoDSA:
		return parseDSA(in)
	case KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521:
		return parseECDSA(in)
	case KeyAlgoSKECDSA256:
		return parseSKECDSA(in)
	case KeyAlgoED25519:
		return parseED25519(in)
	case KeyAlgoSKED25519:
		return parseSKEd25519(in)
	case CertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01, CertAlgoECDSA384v01, CertAlgoECDSA521v01, CertAlgoSKECDSA256v01, CertAlgoED25519v01, CertAlgoSKED25519v01:
		cert, err := parseCert(in, certKeyAlgoNames[algo])
		if err != nil {
			return nil, nil, err
		}
		return cert, nil, nil
	}
	return nil, nil, fmt.Errorf("ssh: unknown key algorithm: %v", algo)
}

// parseAuthorizedKey parses a public key in OpenSSH authorized_keys format
// (see sshd(8) manual page) once the options and key type fields have been
// removed.
func parseAuthorizedKey(in []byte) (out PublicKey, comment string, err error) {
	in = bytes.TrimSpace(in)

	i := bytes.IndexAny(in, " \t")
	if i == -1 {
		i = len(in)
	}
	base64Key := in[:i]

	key := make([]byte, base64.StdEncoding.DecodedLen(len(base64Key)))
	n, err := base64.StdEncoding.Decode(key, base64Key)
	if err != nil {
		return nil, "", err
	}
	key = key[:n]
	out, err = ParsePublicKey(key)
	if err != nil {
		return nil, "", err
	}
	comment = string(bytes.TrimSpace(in[i:]))
	return out, comment, nil
}

// ParseKnownHosts parses an entry in the format of the known_hosts file.
//
// The known_hosts format is documented in the sshd(8) manual page. This
// function will parse a single entry from in. On successful return, marker
// will contain the optional marker value (i.e. "cert-authority" or "revoked")
// or else be empty, hosts will contain the hosts that this entry matches,
// pubKey will contain the public key and comment will contain any trailing
// comment at the end of the line. See the sshd(8) manual page for the various
// forms that a host string can take.
//
// The unparsed remainder of the input will be returned in rest. This function
// can be called repeatedly to parse multiple entries.
//
// If no entries were found in the input then err will be io.EOF. Otherwise a
// non-nil err value indicates a parse error.
func ParseKnownHosts(in []byte) (marker string, hosts []string, pubKey PublicKey, comment string, rest []byte, err error) {
	for len(in) > 0 {
		end := bytes.IndexByte(in, '\n')
		if end != -1 {
			rest = in[end+1:]
			in = in[:end]
		} else {
			rest = nil
		}

		end = bytes.IndexByte(in, '\r')
		if end != -1 {
			in = in[:end]
		}

		in = bytes.TrimSpace(in)
		if len(in) == 0 || in[0] == '#' {
			in = rest
			continue
		}

		i := bytes.IndexAny(in, " \t")
		if i == -1 {
			in = rest
			continue
		}

		// Strip out the beginning of the known_host key.
		// This is either an optional marker or a (set of) hostname(s).
		keyFields := bytes.Fields(in)
		if len(keyFields) < 3 || len(keyFields) > 5 {
			return "", nil, nil, "", nil, errors.New("ssh: invalid entry in known_hosts data")
		}

		// keyFields[0] is either "@cert-authority", "@revoked" or a comma separated
		// list of hosts
		marker := ""
		if keyFields[0][0] == '@' {
			marker = string(keyFields[0][1:])
			keyFields = keyFields[1:]
		}

		hosts := string(keyFields[0])
		// keyFields[1] contains the key type (e.g. “ssh-rsa”).
		// However, that information is duplicated inside the
		// base64-encoded key and so is ignored here.

		key := bytes.Join(keyFields[2:], []byte(" "))
		if pubKey, comment, err = parseAuthorizedKey(key); err != nil {
			return "", nil, nil, "", nil, err
		}

		return marker, strings.Split(hosts, ","), pubKey, comment, rest, nil
	}

	return "", nil, nil, "", nil, io.EOF
}

// ParseAuthorizedKey parses a public key from an authorized_keys
// file used in OpenSSH according to the sshd(8) manual page.
func ParseAuthorizedKey(in []byte) (out PublicKey, comment string, options []string, rest []byte, err error) {
	for len(in) > 0 {
		end := bytes.IndexByte(in, '\n')
		if end != -1 {
			rest = in[end+1:]
			in = in[:end]
		} else {
			rest = nil
		}

		end = bytes.IndexByte(in, '\r')
		if end != -1 {
			in = in[:end]
		}

		in = bytes.TrimSpace(in)
		if len(in) == 0 || in[0] == '#' {
			in = rest
			continue
		}

		i := bytes.IndexAny(in, " \t")
		if i == -1 {
			in = rest
			continue
		}

		if out, comment, err = parseAuthorizedKey(in[i:]); err == nil {
			return out, comment, options, rest, nil
		}

		// No key type recognised. Maybe there's an options field at
		// the beginning.
		var b byte
		inQuote := false
		var candidateOptions []string
		optionStart := 0
		for i, b = range in {
			isEnd := !inQuote && (b == ' ' || b == '\t')
			if (b == ',' && !inQuote) || isEnd {
				if i-optionStart > 0 {
					candidateOptions = append(candidateOptions, string(in[optionStart:i]))
				}
				optionStart = i + 1
			}
			if isEnd {
				break
			}
			if b == '"' && (i == 0 || (i > 0 && in[i-1] != '\\')) {
				inQuote = !inQuote
			}
		}
		for i < len(in) && (in[i] == ' ' || in[i] == '\t') {
			i++
		}
		if i == len(in) {
			// Invalid line: unmatched quote
			in = rest
			continue
		}

		in = in[i:]
		i = bytes.IndexAny(in, " \t")
		if i == -1 {
			in = rest
			continue
		}

		if out, comment, err = parseAuthorizedKey(in[i:]); err == nil {
			options = candidateOptions
			return out, comment, options, rest, nil
		}

		in = rest
		continue
	}

	return nil, "", nil, nil, errors.New("ssh: no key found")
}

// ParsePublicKey parses an SSH public key formatted for use in
// the SSH wire protocol according to RFC 4253, section 6.6.
func ParsePublicKey(in []byte) (out PublicKey, err error) {
	algo, in, ok := parseString(in)
	if !ok {
		return nil, errShortRead
	}
	var rest []byte
	out, rest, err = parsePubKey(in, string(algo))
	if len(rest) > 0 {
		return nil, errors.New("ssh: trailing junk in public key")
	}

	return out, err
}

// MarshalAuthorizedKey serializes key for inclusion in an OpenSSH
// authorized_keys file. The return value ends with newline.
func MarshalAuthorizedKey(key PublicKey) []byte {
	b := &bytes.Buffer{}
	b.WriteString(key.Type())
	b.WriteByte(' ')
	e := base64.NewEncoder(base64.StdEncoding, b)
	e.Write(key.Marshal())
	e.Close()
	b.WriteByte('\n')
	return b.Bytes()
}

// PublicKey represents a public key using an unspecified algorithm.
//
// Some PublicKeys provided by this package also implement CryptoPublicKey.
type PublicKey interface {
	// Type returns the key format name, e.g. "ssh-rsa".
	Type() string

	// Marshal returns the serialized key data in SSH wire format, with the name
	// prefix. To unmarshal the returned data, use the ParsePublicKey function.
	Marshal() []byte

	// Verify that sig is a signature on the given data using this key. This
	// method will hash the data appropriately first. sig.Format is allowed to
	// be any signature algorithm compatible with the key type, the caller
	// should check if it has more stringent requirements.
	Verify(data []byte, sig *Signature) error
}

// CryptoPublicKey, if implemented by a PublicKey,
// returns the underlying crypto.PublicKey form of the key.
type CryptoPublicKey interface {
	CryptoPublicKey() crypto.PublicKey
}

// A Signer can create signatures that verify against a public key.
//
// Some Signers provided by this package also implement AlgorithmSigner.
type Signer interface {
	// PublicKey returns the associated PublicKey.
	PublicKey() PublicKey

	// Sign returns a signature for the given data. This method will hash the
	// data appropriately first. The signature algorithm is expected to match
	// the key format returned by the PublicKey.Type method (and not to be any
	// alternative algorithm supported by the key format).
	Sign(rand io.Reader, data []byte) (*Signature, error)
}

// An AlgorithmSigner is a Signer that also supports specifying an algorithm to
// use for signing.
//
// An AlgorithmSigner can't advertise the algorithms it supports, so it should
// be prepared to be invoked with every algorithm supported by the public key
// format.
type AlgorithmSigner interface {
	Signer

	// SignWithAlgorithm is like Signer.Sign, but allows specifying a desired
	// signing algorithm. Callers may pass an empty string for the algorithm in
	// which case the AlgorithmSigner will use a default algorithm. This default
	// doesn't currently control any behavior in this package.
	SignWithAlgorithm(rand io.Reader, data []byte, algorithm string) (*Signature, error)
}

type rsaPublicKey rsa.PublicKey

func (r *rsaPublicKey) Type() string {
	return "ssh-rsa"
}

// parseRSA parses an RSA key according to RFC 4253, section 6.6.
func parseRSA(in []byte) (out PublicKey, rest []byte, err error) {
	var w struct {
		E    *big.Int
		N    *big.Int
		Rest []byte `ssh:"rest"`
	}
	if err := Unmarshal(in, &w); err != nil {
		return nil, nil, err
	}

	if w.E.BitLen() > 24 {
		return nil, nil, errors.New("ssh: exponent too large")
	}
	e := w.E.Int64()
	if e < 3 || e&1 == 0 {
		return nil, nil, errors.New("ssh: incorrect exponent")
	}

	var key rsa.PublicKey
	key.E = int(e)
	key.N = w.N
	return (*rsaPublicKey)(&key), w.Rest, nil
}

func (r *rsaPublicKey) Marshal() []byte {
	e := new(big.Int).SetInt64(int64(r.E))
	// RSA publickey struct layout should match the struct used by
	// parseRSACert in the x/crypto/ssh/agent package.
	wirekey := struct {
		Name string
		E    *big.Int
		N    *big.Int
	}{
		KeyAlgoRSA,
		e,
		r.N,
	}
	return Marshal(&wirekey)
}

func (r *rsaPublicKey) Verify(data []byte, sig *Signature) error {
	supportedAlgos := algorithmsForKeyFormat(r.Type())
	if !contains(supportedAlgos, sig.Format) {
		return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, r.Type())
	}
	hash := hashFuncs[sig.Format]
	h := hash.New()
	h.Write(data)
	digest := h.Sum(nil)
	return rsa.VerifyPKCS1v15((*rsa.PublicKey)(r), hash, digest, sig.Blob)
}

func (r *rsaPublicKey) CryptoPublicKey() crypto.PublicKey {
	return (*rsa.PublicKey)(r)
}

type dsaPublicKey dsa.PublicKey

func (k *dsaPublicKey) Type() string {
	return "ssh-dss"
}

func checkDSAParams(param *dsa.Parameters) error {
	// SSH specifies FIPS 186-2, which only provided a single size
	// (1024 bits) DSA key. FIPS 186-3 allows for larger key
	// sizes, which would confuse SSH.
	if l := param.P.BitLen(); l != 1024 {
		return fmt.Errorf("ssh: unsupported DSA key size %d", l)
	}

	return nil
}

// parseDSA parses an DSA key according to RFC 4253, section 6.6.
func parseDSA(in []byte) (out PublicKey, rest []byte, err error) {
	var w struct {
		P, Q, G, Y *big.Int
		Rest       []byte `ssh:"rest"`
	}
	if err := Unmarshal(in, &w); err != nil {
		return nil, nil, err
	}

	param := dsa.Parameters{
		P: w.P,
		Q: w.Q,
		G: w.G,
	}
	if err := checkDSAParams(&param); err != nil {
		return nil, nil, err
	}

	key := &dsaPublicKey{
		Parameters: param,
		Y:          w.Y,
	}
	return key, w.Rest, nil
}

func (k *dsaPublicKey) Marshal() []byte {
	// DSA publickey struct layout should match the struct used by
	// parseDSACert in the x/crypto/ssh/agent package.
	w := struct {
		Name       string
		P, Q, G, Y *big.Int
	}{
		k.Type(),
		k.P,
		k.Q,
		k.G,
		k.Y,
	}

	return Marshal(&w)
}

func (k *dsaPublicKey) Verify(data []byte, sig *Signature) error {
	if sig.Format != k.Type() {
		return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, k.Type())
	}
	h := hashFuncs[sig.Format].New()
	h.Write(data)
	digest := h.Sum(nil)

	// Per RFC 4253, section 6.6,
	// The value for 'dss_signature_blob' is encoded as a string containing
	// r, followed by s (which are 160-bit integers, without lengths or
	// padding, unsigned, and in network byte order).
	// For DSS purposes, sig.Blob should be exactly 40 bytes in length.
	if len(sig.Blob) != 40 {
		return errors.New("ssh: DSA signature parse error")
	}
	r := new(big.Int).SetBytes(sig.Blob[:20])
	s := new(big.Int).SetBytes(sig.Blob[20:])
	if dsa.Verify((*dsa.PublicKey)(k), digest, r, s) {
		return nil
	}
	return errors.New("ssh: signature did not verify")
}

func (k *dsaPublicKey) CryptoPublicKey() crypto.PublicKey {
	return (*dsa.PublicKey)(k)
}

type dsaPrivateKey struct {
	*dsa.PrivateKey
}

func (k *dsaPrivateKey) PublicKey() PublicKey {
	return (*dsaPublicKey)(&k.PrivateKey.PublicKey)
}

func (k *dsaPrivateKey) Sign(rand io.Reader, data []byte) (*Signature, error) {
	return k.SignWithAlgorithm(rand, data, k.PublicKey().Type())
}

func (k *dsaPrivateKey) SignWithAlgorithm(rand io.Reader, data []byte, algorithm string) (*Signature, error) {
	if algorithm != "" && algorithm != k.PublicKey().Type() {
		return nil, fmt.Errorf("ssh: unsupported signature algorithm %s", algorithm)
	}

	h := hashFuncs[k.PublicKey().Type()].New()
	h.Write(data)
	digest := h.Sum(nil)
	r, s, err := dsa.Sign(rand, k.PrivateKey, digest)
	if err != nil {
		return nil, err
	}

	sig := make([]byte, 40)
	rb := r.Bytes()
	sb := s.Bytes()

	copy(sig[20-len(rb):20], rb)
	copy(sig[40-len(sb):], sb)

	return &Signature{
		Format: k.PublicKey().Type(),
		Blob:   sig,
	}, nil
}

type ecdsaPublicKey ecdsa.PublicKey

func (k *ecdsaPublicKey) Type() string {
	return "ecdsa-sha2-" + k.nistID()
}

func (k *ecdsaPublicKey) nistID() string {
	switch k.Params().BitSize {
	case 256:
		return "nistp256"
	case 384:
		return "nistp384"
	case 521:
		return "nistp521"
	}
	panic("ssh: unsupported ecdsa key size")
}

type ed25519PublicKey ed25519.PublicKey

func (k ed25519PublicKey) Type() string {
	return KeyAlgoED25519
}

func parseED25519(in []byte) (out PublicKey, rest []byte, err error) {
	var w struct {
		KeyBytes []byte
		Rest     []byte `ssh:"rest"`
	}

	if err := Unmarshal(in, &w); err != nil {
		return nil, nil, err
	}

	if l := len(w.KeyBytes); l != ed25519.PublicKeySize {
		return nil, nil, fmt.Errorf("invalid size %d for Ed25519 public key", l)
	}

	return ed25519PublicKey(w.KeyBytes), w.Rest, nil
}

func (k ed25519PublicKey) Marshal() []byte {
	w := struct {
		Name     string
		KeyBytes []byte
	}{
		KeyAlgoED25519,
		[]byte(k),
	}
	return Marshal(&w)
}

func (k ed25519PublicKey) Verify(b []byte, sig *Signature) error {
	if sig.Format != k.Type() {
		return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, k.Type())
	}
	if l := len(k); l != ed25519.PublicKeySize {
		return fmt.Errorf("ssh: invalid size %d for Ed25519 public key", l)
	}

	if ok := ed25519.Verify(ed25519.PublicKey(k), b, sig.Blob); !ok {
		return errors.New("ssh: signature did not verify")
	}

	return nil
}

func (k ed25519PublicKey) CryptoPublicKey() crypto.PublicKey {
	return ed25519.PublicKey(k)
}

func supportedEllipticCurve(curve elliptic.Curve) bool {
	return curve == elliptic.P256() || curve == elliptic.P384() || curve == elliptic.P521()
}

// parseECDSA parses an ECDSA key according to RFC 5656, section 3.1.
func parseECDSA(in []byte) (out PublicKey, rest []byte, err error) {
	var w struct {
		Curve    string
		KeyBytes []byte
		Rest     []byte `ssh:"rest"`
	}

	if err := Unmarshal(in, &w); err != nil {
		return nil, nil, err
	}

	key := new(ecdsa.PublicKey)

	switch w.Curve {
	case "nistp256":
		key.Curve = elliptic.P256()
	case "nistp384":
		key.Curve = elliptic.P384()
	case "nistp521":
		key.Curve = elliptic.P521()
	default:
		return nil, nil, errors.New("ssh: unsupported curve")
	}

	key.X, key.Y = elliptic.Unmarshal(key.Curve, w.KeyBytes)
	if key.X == nil || key.Y == nil {
		return nil, nil, errors.New("ssh: invalid curve point")
	}
	return (*ecdsaPublicKey)(key), w.Rest, nil
}

func (k *ecdsaPublicKey) Marshal() []byte {
	// See RFC 5656, section 3.1.
	keyBytes := elliptic.Marshal(k.Curve, k.X, k.Y)
	// ECDSA publickey struct layout should match the struct used by
	// parseECDSACert in the x/crypto/ssh/agent package.
	w := struct {
		Name string
		ID   string
		Key  []byte
	}{
		k.Type(),
		k.nistID(),
		keyBytes,
	}

	return Marshal(&w)
}

func (k *ecdsaPublicKey) Verify(data []byte, sig *Signature) error {
	if sig.Format != k.Type() {
		return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, k.Type())
	}

	h := hashFuncs[sig.Format].New()
	h.Write(data)
	digest := h.Sum(nil)

	// Per RFC 5656, section 3.1.2,
	// The ecdsa_signature_blob value has the following specific encoding:
	//    mpint    r
	//    mpint    s
	var ecSig struct {
		R *big.Int
		S *big.Int
	}

	if err := Unmarshal(sig.Blob, &ecSig); err != nil {
		return err
	}

	if ecdsa.Verify((*ecdsa.PublicKey)(k), digest, ecSig.R, ecSig.S) {
		return nil
	}
	return errors.New("ssh: signature did not verify")
}

func (k *ecdsaPublicKey) CryptoPublicKey() crypto.PublicKey {
	return (*ecdsa.PublicKey)(k)
}

// skFields holds the additional fields present in U2F/FIDO2 signatures.
// See openssh/PROTOCOL.u2f 'SSH U2F Signatures' for details.
type skFields struct {
	// Flags contains U2F/FIDO2 flags such as 'user present'
	Flags byte
	// Counter is a monotonic signature counter which can be
	// used to detect concurrent use of a private key, should
	// it be extracted from hardware.
	Counter uint32
}

type skECDSAPublicKey struct {
	// application is a URL-like string, typically "ssh:" for SSH.
	// see openssh/PROTOCOL.u2f for details.
	application string
	ecdsa.PublicKey
}

func (k *skECDSAPublicKey) Type() string {
	return KeyAlgoSKECDSA256
}

func (k *skECDSAPublicKey) nistID() string {
	return "nistp256"
}

func parseSKECDSA(in []byte) (out PublicKey, rest []byte, err error) {
	var w struct {
		Curve       string
		KeyBytes    []byte
		Application string
		Rest        []byte `ssh:"rest"`
	}

	if err := Unmarshal(in, &w); err != nil {
		return nil, nil, err
	}

	key := new(skECDSAPublicKey)
	key.application = w.Application

	if w.Curve != "nistp256" {
		return nil, nil, errors.New("ssh: unsupported curve")
	}
	key.Curve = elliptic.P256()

	key.X, key.Y = elliptic.Unmarshal(key.Curve, w.KeyBytes)
	if key.X == nil || key.Y == nil {
		return nil, nil, errors.New("ssh: invalid curve point")
	}

	return key, w.Rest, nil
}

func (k *skECDSAPublicKey) Marshal() []byte {
	// See RFC 5656, section 3.1.
	keyBytes := elliptic.Marshal(k.Curve, k.X, k.Y)
	w := struct {
		Name        string
		ID          string
		Key         []byte
		Application string
	}{
		k.Type(),
		k.nistID(),
		keyBytes,
		k.application,
	}

	return Marshal(&w)
}

func (k *skECDSAPublicKey) Verify(data []byte, sig *Signature) error {
	if sig.Format != k.Type() {
		return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, k.Type())
	}

	h := hashFuncs[sig.Format].New()
	h.Write([]byte(k.application))
	appDigest := h.Sum(nil)

	h.Reset()
	h.Write(data)
	dataDigest := h.Sum(nil)

	var ecSig struct {
		R *big.Int
		S *big.Int
	}
	if err := Unmarshal(sig.Blob, &ecSig); err != nil {
		return err
	}

	var skf skFields
	if err := Unmarshal(sig.Rest, &skf); err != nil {
		return err
	}

	blob := struct {
		ApplicationDigest []byte `ssh:"rest"`
		Flags             byte
		Counter           uint32
		MessageDigest     []byte `ssh:"rest"`
	}{
		appDigest,
		skf.Flags,
		skf.Counter,
		dataDigest,
	}

	original := Marshal(blob)

	h.Reset()
	h.Write(original)
	digest := h.Sum(nil)

	if ecdsa.Verify((*ecdsa.PublicKey)(&k.PublicKey), digest, ecSig.R, ecSig.S) {
		return nil
	}
	return errors.New("ssh: signature did not verify")
}

type skEd25519PublicKey struct {
	// application is a URL-like string, typically "ssh:" for SSH.
	// see openssh/PROTOCOL.u2f for details.
	application string
	ed25519.PublicKey
}

func (k *skEd25519PublicKey) Type() string {
	return KeyAlgoSKED25519
}

func parseSKEd25519(in []byte) (out PublicKey, rest []byte, err error) {
	var w struct {
		KeyBytes    []byte
		Application string
		Rest        []byte `ssh:"rest"`
	}

	if err := Unmarshal(in, &w); err != nil {
		return nil, nil, err
	}

	if l := len(w.KeyBytes); l != ed25519.PublicKeySize {
		return nil, nil, fmt.Errorf("invalid size %d for Ed25519 public key", l)
	}

	key := new(skEd25519PublicKey)
	key.application = w.Application
	key.PublicKey = ed25519.PublicKey(w.KeyBytes)

	return key, w.Rest, nil
}

func (k *skEd25519PublicKey) Marshal() []byte {
	w := struct {
		Name        string
		KeyBytes    []byte
		Application string
	}{
		KeyAlgoSKED25519,
		[]byte(k.PublicKey),
		k.application,
	}
	return Marshal(&w)
}

func (k *skEd25519PublicKey) Verify(data []byte, sig *Signature) error {
	if sig.Format != k.Type() {
		return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, k.Type())
	}
	if l := len(k.PublicKey); l != ed25519.PublicKeySize {
		return fmt.Errorf("invalid size %d for Ed25519 public key", l)
	}

	h := hashFuncs[sig.Format].New()
	h.Write([]byte(k.application))
	appDigest := h.Sum(nil)

	h.Reset()
	h.Write(data)
	dataDigest := h.Sum(nil)

	var edSig struct {
		Signature []byte `ssh:"rest"`
	}

	if err := Unmarshal(sig.Blob, &edSig); err != nil {
		return err
	}

	var skf skFields
	if err := Unmarshal(sig.Rest, &skf); err != nil {
		return err
	}

	blob := struct {
		ApplicationDigest []byte `ssh:"rest"`
		Flags             byte
		Counter           uint32
		MessageDigest     []byte `ssh:"rest"`
	}{
		appDigest,
		skf.Flags,
		skf.Counter,
		dataDigest,
	}

	original := Marshal(blob)

	if ok := ed25519.Verify(k.PublicKey, original, edSig.Signature); !ok {
		return errors.New("ssh: signature did not verify")
	}

	return nil
}

// NewSignerFromKey takes an *rsa.PrivateKey, *dsa.PrivateKey,
// *ecdsa.PrivateKey or any other crypto.Signer and returns a
// corresponding Signer instance. ECDSA keys must use P-256, P-384 or
// P-521. DSA keys must use parameter size L1024N160.
func NewSignerFromKey(key interface{}) (Signer, error) {
	switch key := key.(type) {
	case crypto.Signer:
		return NewSignerFromSigner(key)
	case *dsa.PrivateKey:
		return newDSAPrivateKey(key)
	default:
		return nil, fmt.Errorf("ssh: unsupported key type %T", key)
	}
}

func newDSAPrivateKey(key *dsa.PrivateKey) (Signer, error) {
	if err := checkDSAParams(&key.PublicKey.Parameters); err != nil {
		return nil, err
	}

	return &dsaPrivateKey{key}, nil
}

type wrappedSigner struct {
	signer crypto.Signer
	pubKey PublicKey
}

// NewSignerFromSigner takes any crypto.Signer implementation and
// returns a corresponding Signer interface. This can be used, for
// example, with keys kept in hardware modules.
func NewSignerFromSigner(signer crypto.Signer) (Signer, error) {
	pubKey, err := NewPublicKey(signer.Public())
	if err != nil {
		return nil, err
	}

	return &wrappedSigner{signer, pubKey}, nil
}

func (s *wrappedSigner) PublicKey() PublicKey {
	return s.pubKey
}

func (s *wrappedSigner) Sign(rand io.Reader, data []byte) (*Signature, error) {
	return s.SignWithAlgorithm(rand, data, s.pubKey.Type())
}

func (s *wrappedSigner) SignWithAlgorithm(rand io.Reader, data []byte, algorithm string) (*Signature, error) {
	if algorithm == "" {
		algorithm = s.pubKey.Type()
	}

	supportedAlgos := algorithmsForKeyFormat(s.pubKey.Type())
	if !contains(supportedAlgos, algorithm) {
		return nil, fmt.Errorf("ssh: unsupported signature algorithm %q for key format %q", algorithm, s.pubKey.Type())
	}

	hashFunc := hashFuncs[algorithm]
	var digest []byte
	if hashFunc != 0 {
		h := hashFunc.New()
		h.Write(data)
		digest = h.Sum(nil)
	} else {
		digest = data
	}

	signature, err := s.signer.Sign(rand, digest, hashFunc)
	if err != nil {
		return nil, err
	}

	// crypto.Signer.Sign is expected to return an ASN.1-encoded signature
	// for ECDSA and DSA, but that's not the encoding expected by SSH, so
	// re-encode.
	switch s.pubKey.(type) {
	case *ecdsaPublicKey, *dsaPublicKey:
		type asn1Signature struct {
			R, S *big.Int
		}
		asn1Sig := new(asn1Signature)
		_, err := asn1.Unmarshal(signature, asn1Sig)
		if err != nil {
			return nil, err
		}

		switch s.pubKey.(type) {
		case *ecdsaPublicKey:
			signature = Marshal(asn1Sig)

		case *dsaPublicKey:
			signature = make([]byte, 40)
			r := asn1Sig.R.Bytes()
			s := asn1Sig.S.Bytes()
			copy(signature[20-len(r):20], r)
			copy(signature[40-len(s):40], s)
		}
	}

	return &Signature{
		Format: algorithm,
		Blob:   signature,
	}, nil
}

// NewPublicKey takes an *rsa.PublicKey, *dsa.PublicKey, *ecdsa.PublicKey,
// or ed25519.PublicKey returns a corresponding PublicKey instance.
// ECDSA keys must use P-256, P-384 or P-521.
func NewPublicKey(key interface{}) (PublicKey, error) {
	switch key := key.(type) {
	case *rsa.PublicKey:
		return (*rsaPublicKey)(key), nil
	case *ecdsa.PublicKey:
		if !supportedEllipticCurve(key.Curve) {
			return nil, errors.New("ssh: only P-256, P-384 and P-521 EC keys are supported")
		}
		return (*ecdsaPublicKey)(key), nil
	case *dsa.PublicKey:
		return (*dsaPublicKey)(key), nil
	case ed25519.PublicKey:
		if l := len(key); l != ed25519.PublicKeySize {
			return nil, fmt.Errorf("ssh: invalid size %d for Ed25519 public key", l)
		}
		return ed25519PublicKey(key), nil
	default:
		return nil, fmt.Errorf("ssh: unsupported key type %T", key)
	}
}

// ParsePrivateKey returns a Signer from a PEM encoded private key. It supports
// the same keys as ParseRawPrivateKey. If the private key is encrypted, it
// will return a PassphraseMissingError.
func ParsePrivateKey(pemBytes []byte) (Signer, error) {
	key, err := ParseRawPrivateKey(pemBytes)
	if err != nil {
		return nil, err
	}

	return NewSignerFromKey(key)
}

// ParsePrivateKeyWithPassphrase returns a Signer from a PEM encoded private
// key and passphrase. It supports the same keys as
// ParseRawPrivateKeyWithPassphrase.
func ParsePrivateKeyWithPassphrase(pemBytes, passphrase []byte) (Signer, error) {
	key, err := ParseRawPrivateKeyWithPassphrase(pemBytes, passphrase)
	if err != nil {
		return nil, err
	}

	return NewSignerFromKey(key)
}

// encryptedBlock tells whether a private key is
// encrypted by examining its Proc-Type header
// for a mention of ENCRYPTED
// according to RFC 1421 Section 4.6.1.1.
func encryptedBlock(block *pem.Block) bool {
	return strings.Contains(block.Headers["Proc-Type"], "ENCRYPTED")
}

// A PassphraseMissingError indicates that parsing this private key requires a
// passphrase. Use ParsePrivateKeyWithPassphrase.
type PassphraseMissingError struct {
	// PublicKey will be set if the private key format includes an unencrypted
	// public key along with the encrypted private key.
	PublicKey PublicKey
}

func (*PassphraseMissingError) Error() string {
	return "ssh: this private key is passphrase protected"
}

// ParseRawPrivateKey returns a private key from a PEM encoded private key. It supports
// RSA, DSA, ECDSA, and Ed25519 private keys in PKCS#1, PKCS#8, OpenSSL, and OpenSSH
// formats. If the private key is encrypted, it will return a PassphraseMissingError.
func ParseRawPrivateKey(pemBytes []byte) (interface{}, error) {
	block, _ := pem.Decode(pemBytes)
	if block == nil {
		return nil, errors.New("ssh: no key found")
	}

	if encryptedBlock(block) {
		return nil, &PassphraseMissingError{}
	}

	switch block.Type {
	case "RSA PRIVATE KEY":
		return x509.ParsePKCS1PrivateKey(block.Bytes)
	// RFC5208 - https://tools.ietf.org/html/rfc5208
	case "PRIVATE KEY":
		return x509.ParsePKCS8PrivateKey(block.Bytes)
	case "EC PRIVATE KEY":
		return x509.ParseECPrivateKey(block.Bytes)
	case "DSA PRIVATE KEY":
		return ParseDSAPrivateKey(block.Bytes)
	case "OPENSSH PRIVATE KEY":
		return parseOpenSSHPrivateKey(block.Bytes, unencryptedOpenSSHKey)
	default:
		return nil, fmt.Errorf("ssh: unsupported key type %q", block.Type)
	}
}

// ParseRawPrivateKeyWithPassphrase returns a private key decrypted with
// passphrase from a PEM encoded private key. If the passphrase is wrong, it
// will return x509.IncorrectPasswordError.
func ParseRawPrivateKeyWithPassphrase(pemBytes, passphrase []byte) (interface{}, error) {
	block, _ := pem.Decode(pemBytes)
	if block == nil {
		return nil, errors.New("ssh: no key found")
	}

	if block.Type == "OPENSSH PRIVATE KEY" {
		return parseOpenSSHPrivateKey(block.Bytes, passphraseProtectedOpenSSHKey(passphrase))
	}

	if !encryptedBlock(block) || !x509.IsEncryptedPEMBlock(block) {
		return nil, errors.New("ssh: not an encrypted key")
	}

	buf, err := x509.DecryptPEMBlock(block, passphrase)
	if err != nil {
		if err == x509.IncorrectPasswordError {
			return nil, err
		}
		return nil, fmt.Errorf("ssh: cannot decode encrypted private keys: %v", err)
	}

	switch block.Type {
	case "RSA PRIVATE KEY":
		return x509.ParsePKCS1PrivateKey(buf)
	case "EC PRIVATE KEY":
		return x509.ParseECPrivateKey(buf)
	case "DSA PRIVATE KEY":
		return ParseDSAPrivateKey(buf)
	default:
		return nil, fmt.Errorf("ssh: unsupported key type %q", block.Type)
	}
}

// ParseDSAPrivateKey returns a DSA private key from its ASN.1 DER encoding, as
// specified by the OpenSSL DSA man page.
func ParseDSAPrivateKey(der []byte) (*dsa.PrivateKey, error) {
	var k struct {
		Version int
		P       *big.Int
		Q       *big.Int
		G       *big.Int
		Pub     *big.Int
		Priv    *big.Int
	}
	rest, err := asn1.Unmarshal(der, &k)
	if err != nil {
		return nil, errors.New("ssh: failed to parse DSA key: " + err.Error())
	}
	if len(rest) > 0 {
		return nil, errors.New("ssh: garbage after DSA key")
	}

	return &dsa.PrivateKey{
		PublicKey: dsa.PublicKey{
			Parameters: dsa.Parameters{
				P: k.P,
				Q: k.Q,
				G: k.G,
			},
			Y: k.Pub,
		},
		X: k.Priv,
	}, nil
}

func unencryptedOpenSSHKey(cipherName, kdfName, kdfOpts string, privKeyBlock []byte) ([]byte, error) {
	if kdfName != "none" || cipherName != "none" {
		return nil, &PassphraseMissingError{}
	}
	if kdfOpts != "" {
		return nil, errors.New("ssh: invalid openssh private key")
	}
	return privKeyBlock, nil
}

func passphraseProtectedOpenSSHKey(passphrase []byte) openSSHDecryptFunc {
	return func(cipherName, kdfName, kdfOpts string, privKeyBlock []byte) ([]byte, error) {
		if kdfName == "none" || cipherName == "none" {
			return nil, errors.New("ssh: key is not password protected")
		}
		if kdfName != "bcrypt" {
			return nil, fmt.Errorf("ssh: unknown KDF %q, only supports %q", kdfName, "bcrypt")
		}

		var opts struct {
			Salt   string
			Rounds uint32
		}
		if err := Unmarshal([]byte(kdfOpts), &opts); err != nil {
			return nil, err
		}

		k, err := bcrypt_pbkdf.Key(passphrase, []byte(opts.Salt), int(opts.Rounds), 32+16)
		if err != nil {
			return nil, err
		}
		key, iv := k[:32], k[32:]

		c, err := aes.NewCipher(key)
		if err != nil {
			return nil, err
		}
		switch cipherName {
		case "aes256-ctr":
			ctr := cipher.NewCTR(c, iv)
			ctr.XORKeyStream(privKeyBlock, privKeyBlock)
		case "aes256-cbc":
			if len(privKeyBlock)%c.BlockSize() != 0 {
				return nil, fmt.Errorf("ssh: invalid encrypted private key length, not a multiple of the block size")
			}
			cbc := cipher.NewCBCDecrypter(c, iv)
			cbc.CryptBlocks(privKeyBlock, privKeyBlock)
		default:
			return nil, fmt.Errorf("ssh: unknown cipher %q, only supports %q or %q", cipherName, "aes256-ctr", "aes256-cbc")
		}

		return privKeyBlock, nil
	}
}

type openSSHDecryptFunc func(CipherName, KdfName, KdfOpts string, PrivKeyBlock []byte) ([]byte, error)

// parseOpenSSHPrivateKey parses an OpenSSH private key, using the decrypt
// function to unwrap the encrypted portion. unencryptedOpenSSHKey can be used
// as the decrypt function to parse an unencrypted private key. See
// https://github.com/openssh/openssh-portable/blob/master/PROTOCOL.key.
func parseOpenSSHPrivateKey(key []byte, decrypt openSSHDecryptFunc) (crypto.PrivateKey, error) {
	const magic = "openssh-key-v1\x00"
	if len(key) < len(magic) || string(key[:len(magic)]) != magic {
		return nil, errors.New("ssh: invalid openssh private key format")
	}
	remaining := key[len(magic):]

	var w struct {
		CipherName   string
		KdfName      string
		KdfOpts      string
		NumKeys      uint32
		PubKey       []byte
		PrivKeyBlock []byte
	}

	if err := Unmarshal(remaining, &w); err != nil {
		return nil, err
	}
	if w.NumKeys != 1 {
		// We only support single key files, and so does OpenSSH.
		// https://github.com/openssh/openssh-portable/blob/4103a3ec7/sshkey.c#L4171
		return nil, errors.New("ssh: multi-key files are not supported")
	}

	privKeyBlock, err := decrypt(w.CipherName, w.KdfName, w.KdfOpts, w.PrivKeyBlock)
	if err != nil {
		if err, ok := err.(*PassphraseMissingError); ok {
			pub, errPub := ParsePublicKey(w.PubKey)
			if errPub != nil {
				return nil, fmt.Errorf("ssh: failed to parse embedded public key: %v", errPub)
			}
			err.PublicKey = pub
		}
		return nil, err
	}

	pk1 := struct {
		Check1  uint32
		Check2  uint32
		Keytype string
		Rest    []byte `ssh:"rest"`
	}{}

	if err := Unmarshal(privKeyBlock, &pk1); err != nil || pk1.Check1 != pk1.Check2 {
		if w.CipherName != "none" {
			return nil, x509.IncorrectPasswordError
		}
		return nil, errors.New("ssh: malformed OpenSSH key")
	}

	switch pk1.Keytype {
	case KeyAlgoRSA:
		// https://github.com/openssh/openssh-portable/blob/master/sshkey.c#L2760-L2773
		key := struct {
			N       *big.Int
			E       *big.Int
			D       *big.Int
			Iqmp    *big.Int
			P       *big.Int
			Q       *big.Int
			Comment string
			Pad     []byte `ssh:"rest"`
		}{}

		if err := Unmarshal(pk1.Rest, &key); err != nil {
			return nil, err
		}

		if err := checkOpenSSHKeyPadding(key.Pad); err != nil {
			return nil, err
		}

		pk := &rsa.PrivateKey{
			PublicKey: rsa.PublicKey{
				N: key.N,
				E: int(key.E.Int64()),
			},
			D:      key.D,
			Primes: []*big.Int{key.P, key.Q},
		}

		if err := pk.Validate(); err != nil {
			return nil, err
		}

		pk.Precompute()

		return pk, nil
	case KeyAlgoED25519:
		key := struct {
			Pub     []byte
			Priv    []byte
			Comment string
			Pad     []byte `ssh:"rest"`
		}{}

		if err := Unmarshal(pk1.Rest, &key); err != nil {
			return nil, err
		}

		if len(key.Priv) != ed25519.PrivateKeySize {
			return nil, errors.New("ssh: private key unexpected length")
		}

		if err := checkOpenSSHKeyPadding(key.Pad); err != nil {
			return nil, err
		}

		pk := ed25519.PrivateKey(make([]byte, ed25519.PrivateKeySize))
		copy(pk, key.Priv)
		return &pk, nil
	case KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521:
		key := struct {
			Curve   string
			Pub     []byte
			D       *big.Int
			Comment string
			Pad     []byte `ssh:"rest"`
		}{}

		if err := Unmarshal(pk1.Rest, &key); err != nil {
			return nil, err
		}

		if err := checkOpenSSHKeyPadding(key.Pad); err != nil {
			return nil, err
		}

		var curve elliptic.Curve
		switch key.Curve {
		case "nistp256":
			curve = elliptic.P256()
		case "nistp384":
			curve = elliptic.P384()
		case "nistp521":
			curve = elliptic.P521()
		default:
			return nil, errors.New("ssh: unhandled elliptic curve: " + key.Curve)
		}

		X, Y := elliptic.Unmarshal(curve, key.Pub)
		if X == nil || Y == nil {
			return nil, errors.New("ssh: failed to unmarshal public key")
		}

		if key.D.Cmp(curve.Params().N) >= 0 {
			return nil, errors.New("ssh: scalar is out of range")
		}

		x, y := curve.ScalarBaseMult(key.D.Bytes())
		if x.Cmp(X) != 0 || y.Cmp(Y) != 0 {
			return nil, errors.New("ssh: public key does not match private key")
		}

		return &ecdsa.PrivateKey{
			PublicKey: ecdsa.PublicKey{
				Curve: curve,
				X:     X,
				Y:     Y,
			},
			D: key.D,
		}, nil
	default:
		return nil, errors.New("ssh: unhandled key type")
	}
}

func checkOpenSSHKeyPadding(pad []byte) error {
	for i, b := range pad {
		if int(b) != i+1 {
			return errors.New("ssh: padding not as expected")
		}
	}
	return nil
}

// FingerprintLegacyMD5 returns the user presentation of the key's
// fingerprint as described by RFC 4716 section 4.
func FingerprintLegacyMD5(pubKey PublicKey) string {
	md5sum := md5.Sum(pubKey.Marshal())
	hexarray := make([]string, len(md5sum))
	for i, c := range md5sum {
		hexarray[i] = hex.EncodeToString([]byte{c})
	}
	return strings.Join(hexarray, ":")
}

// FingerprintSHA256 returns the user presentation of the key's
// fingerprint as unpadded base64 encoded sha256 hash.
// This format was introduced from OpenSSH 6.8.
// https://www.openssh.com/txt/release-6.8
// https://tools.ietf.org/html/rfc4648#section-3.2 (unpadded base64 encoding)
func FingerprintSHA256(pubKey PublicKey) string {
	sha256sum := sha256.Sum256(pubKey.Marshal())
	hash := base64.RawStdEncoding.EncodeToString(sha256sum[:])
	return "SHA256:" + hash
}
07070100000D1F000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/knownhosts 07070100000D20000081A4000000000000000000000001645E367C0000311C000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/knownhosts/knownhosts.go   // Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package knownhosts implements a parser for the OpenSSH known_hosts
// host key database, and provides utility functions for writing
// OpenSSH compliant known_hosts files.
package knownhosts

import (
	"bufio"
	"bytes"
	"crypto/hmac"
	"crypto/rand"
	"crypto/sha1"
	"encoding/base64"
	"errors"
	"fmt"
	"io"
	"net"
	"os"
	"strings"

	"golang.org/x/crypto/ssh"
)

// See the sshd manpage
// (http://man.openbsd.org/sshd#SSH_KNOWN_HOSTS_FILE_FORMAT) for
// background.

type addr struct{ host, port string }

func (a *addr) String() string {
	h := a.host
	if strings.Contains(h, ":") {
		h = "[" + h + "]"
	}
	return h + ":" + a.port
}

type matcher interface {
	match(addr) bool
}

type hostPattern struct {
	negate bool
	addr   addr
}

func (p *hostPattern) String() string {
	n := ""
	if p.negate {
		n = "!"
	}

	return n + p.addr.String()
}

type hostPatterns []hostPattern

func (ps hostPatterns) match(a addr) bool {
	matched := false
	for _, p := range ps {
		if !p.match(a) {
			continue
		}
		if p.negate {
			return false
		}
		matched = true
	}
	return matched
}

// See
// https://android.googlesource.com/platform/external/openssh/+/ab28f5495c85297e7a597c1ba62e996416da7c7e/addrmatch.c
// The matching of * has no regard for separators, unlike filesystem globs
func wildcardMatch(pat []byte, str []byte) bool {
	for {
		if len(pat) == 0 {
			return len(str) == 0
		}
		if len(str) == 0 {
			return false
		}

		if pat[0] == '*' {
			if len(pat) == 1 {
				return true
			}

			for j := range str {
				if wildcardMatch(pat[1:], str[j:]) {
					return true
				}
			}
			return false
		}

		if pat[0] == '?' || pat[0] == str[0] {
			pat = pat[1:]
			str = str[1:]
		} else {
			return false
		}
	}
}

func (p *hostPattern) match(a addr) bool {
	return wildcardMatch([]byte(p.addr.host), []byte(a.host)) && p.addr.port == a.port
}

type keyDBLine struct {
	cert     bool
	matcher  matcher
	knownKey KnownKey
}

func serialize(k ssh.PublicKey) string {
	return k.Type() + " " + base64.StdEncoding.EncodeToString(k.Marshal())
}

func (l *keyDBLine) match(a addr) bool {
	return l.matcher.match(a)
}

type hostKeyDB struct {
	// Serialized version of revoked keys
	revoked map[string]*KnownKey
	lines   []keyDBLine
}

func newHostKeyDB() *hostKeyDB {
	db := &hostKeyDB{
		revoked: make(map[string]*KnownKey),
	}

	return db
}

func keyEq(a, b ssh.PublicKey) bool {
	return bytes.Equal(a.Marshal(), b.Marshal())
}

// IsHostAuthority can be used as a callback in ssh.CertChecker
func (db *hostKeyDB) IsHostAuthority(remote ssh.PublicKey, address string) bool {
	h, p, err := net.SplitHostPort(address)
	if err != nil {
		return false
	}
	a := addr{host: h, port: p}

	for _, l := range db.lines {
		if l.cert && keyEq(l.knownKey.Key, remote) && l.match(a) {
			return true
		}
	}
	return false
}

// IsRevoked can be used as a callback in ssh.CertChecker
func (db *hostKeyDB) IsRevoked(key *ssh.Certificate) bool {
	_, ok := db.revoked[string(key.Marshal())]
	return ok
}

const markerCert = "@cert-authority"
const markerRevoked = "@revoked"

func nextWord(line []byte) (string, []byte) {
	i := bytes.IndexAny(line, "\t ")
	if i == -1 {
		return string(line), nil
	}

	return string(line[:i]), bytes.TrimSpace(line[i:])
}

func parseLine(line []byte) (marker, host string, key ssh.PublicKey, err error) {
	if w, next := nextWord(line); w == markerCert || w == markerRevoked {
		marker = w
		line = next
	}

	host, line = nextWord(line)
	if len(line) == 0 {
		return "", "", nil, errors.New("knownhosts: missing host pattern")
	}

	// ignore the keytype as it's in the key blob anyway.
	_, line = nextWord(line)
	if len(line) == 0 {
		return "", "", nil, errors.New("knownhosts: missing key type pattern")
	}

	keyBlob, _ := nextWord(line)

	keyBytes, err := base64.StdEncoding.DecodeString(keyBlob)
	if err != nil {
		return "", "", nil, err
	}
	key, err = ssh.ParsePublicKey(keyBytes)
	if err != nil {
		return "", "", nil, err
	}

	return marker, host, key, nil
}

func (db *hostKeyDB) parseLine(line []byte, filename string, linenum int) error {
	marker, pattern, key, err := parseLine(line)
	if err != nil {
		return err
	}

	if marker == markerRevoked {
		db.revoked[string(key.Marshal())] = &KnownKey{
			Key:      key,
			Filename: filename,
			Line:     linenum,
		}

		return nil
	}

	entry := keyDBLine{
		cert: marker == markerCert,
		knownKey: KnownKey{
			Filename: filename,
			Line:     linenum,
			Key:      key,
		},
	}

	if pattern[0] == '|' {
		entry.matcher, err = newHashedHost(pattern)
	} else {
		entry.matcher, err = newHostnameMatcher(pattern)
	}

	if err != nil {
		return err
	}

	db.lines = append(db.lines, entry)
	return nil
}

func newHostnameMatcher(pattern string) (matcher, error) {
	var hps hostPatterns
	for _, p := range strings.Split(pattern, ",") {
		if len(p) == 0 {
			continue
		}

		var a addr
		var negate bool
		if p[0] == '!' {
			negate = true
			p = p[1:]
		}

		if len(p) == 0 {
			return nil, errors.New("knownhosts: negation without following hostname")
		}

		var err error
		if p[0] == '[' {
			a.host, a.port, err = net.SplitHostPort(p)
			if err != nil {
				return nil, err
			}
		} else {
			a.host, a.port, err = net.SplitHostPort(p)
			if err != nil {
				a.host = p
				a.port = "22"
			}
		}
		hps = append(hps, hostPattern{
			negate: negate,
			addr:   a,
		})
	}
	return hps, nil
}

// KnownKey represents a key declared in a known_hosts file.
type KnownKey struct {
	Key      ssh.PublicKey
	Filename string
	Line     int
}

func (k *KnownKey) String() string {
	return fmt.Sprintf("%s:%d: %s", k.Filename, k.Line, serialize(k.Key))
}

// KeyError is returned if we did not find the key in the host key
// database, or there was a mismatch.  Typically, in batch
// applications, this should be interpreted as failure. Interactive
// applications can offer an interactive prompt to the user.
type KeyError struct {
	// Want holds the accepted host keys. For each key algorithm,
	// there can be one hostkey.  If Want is empty, the host is
	// unknown. If Want is non-empty, there was a mismatch, which
	// can signify a MITM attack.
	Want []KnownKey
}

func (u *KeyError) Error() string {
	if len(u.Want) == 0 {
		return "knownhosts: key is unknown"
	}
	return "knownhosts: key mismatch"
}

// RevokedError is returned if we found a key that was revoked.
type RevokedError struct {
	Revoked KnownKey
}

func (r *RevokedError) Error() string {
	return "knownhosts: key is revoked"
}

// check checks a key against the host database. This should not be
// used for verifying certificates.
func (db *hostKeyDB) check(address string, remote net.Addr, remoteKey ssh.PublicKey) error {
	if revoked := db.revoked[string(remoteKey.Marshal())]; revoked != nil {
		return &RevokedError{Revoked: *revoked}
	}

	host, port, err := net.SplitHostPort(remote.String())
	if err != nil {
		return fmt.Errorf("knownhosts: SplitHostPort(%s): %v", remote, err)
	}

	hostToCheck := addr{host, port}
	if address != "" {
		// Give preference to the hostname if available.
		host, port, err := net.SplitHostPort(address)
		if err != nil {
			return fmt.Errorf("knownhosts: SplitHostPort(%s): %v", address, err)
		}

		hostToCheck = addr{host, port}
	}

	return db.checkAddr(hostToCheck, remoteKey)
}

// checkAddr checks if we can find the given public key for the
// given address.  If we only find an entry for the IP address,
// or only the hostname, then this still succeeds.
func (db *hostKeyDB) checkAddr(a addr, remoteKey ssh.PublicKey) error {
	// TODO(hanwen): are these the right semantics? What if there
	// is just a key for the IP address, but not for the
	// hostname?

	// Algorithm => key.
	knownKeys := map[string]KnownKey{}
	for _, l := range db.lines {
		if l.match(a) {
			typ := l.knownKey.Key.Type()
			if _, ok := knownKeys[typ]; !ok {
				knownKeys[typ] = l.knownKey
			}
		}
	}

	keyErr := &KeyError{}
	for _, v := range knownKeys {
		keyErr.Want = append(keyErr.Want, v)
	}

	// Unknown remote host.
	if len(knownKeys) == 0 {
		return keyErr
	}

	// If the remote host starts using a different, unknown key type, we
	// also interpret that as a mismatch.
	if known, ok := knownKeys[remoteKey.Type()]; !ok || !keyEq(known.Key, remoteKey) {
		return keyErr
	}

	return nil
}

// The Read function parses file contents.
func (db *hostKeyDB) Read(r io.Reader, filename string) error {
	scanner := bufio.NewScanner(r)

	lineNum := 0
	for scanner.Scan() {
		lineNum++
		line := scanner.Bytes()
		line = bytes.TrimSpace(line)
		if len(line) == 0 || line[0] == '#' {
			continue
		}

		if err := db.parseLine(line, filename, lineNum); err != nil {
			return fmt.Errorf("knownhosts: %s:%d: %v", filename, lineNum, err)
		}
	}
	return scanner.Err()
}

// New creates a host key callback from the given OpenSSH host key
// files. The returned callback is for use in
// ssh.ClientConfig.HostKeyCallback. By preference, the key check
// operates on the hostname if available, i.e. if a server changes its
// IP address, the host key check will still succeed, even though a
// record of the new IP address is not available.
func New(files ...string) (ssh.HostKeyCallback, error) {
	db := newHostKeyDB()
	for _, fn := range files {
		f, err := os.Open(fn)
		if err != nil {
			return nil, err
		}
		defer f.Close()
		if err := db.Read(f, fn); err != nil {
			return nil, err
		}
	}

	var certChecker ssh.CertChecker
	certChecker.IsHostAuthority = db.IsHostAuthority
	certChecker.IsRevoked = db.IsRevoked
	certChecker.HostKeyFallback = db.check

	return certChecker.CheckHostKey, nil
}

// Normalize normalizes an address into the form used in known_hosts
func Normalize(address string) string {
	host, port, err := net.SplitHostPort(address)
	if err != nil {
		host = address
		port = "22"
	}
	entry := host
	if port != "22" {
		entry = "[" + entry + "]:" + port
	} else if strings.Contains(host, ":") && !strings.HasPrefix(host, "[") {
		entry = "[" + entry + "]"
	}
	return entry
}

// Line returns a line to add append to the known_hosts files.
func Line(addresses []string, key ssh.PublicKey) string {
	var trimmed []string
	for _, a := range addresses {
		trimmed = append(trimmed, Normalize(a))
	}

	return strings.Join(trimmed, ",") + " " + serialize(key)
}

// HashHostname hashes the given hostname. The hostname is not
// normalized before hashing.
func HashHostname(hostname string) string {
	// TODO(hanwen): check if we can safely normalize this always.
	salt := make([]byte, sha1.Size)

	_, err := rand.Read(salt)
	if err != nil {
		panic(fmt.Sprintf("crypto/rand failure %v", err))
	}

	hash := hashHost(hostname, salt)
	return encodeHash(sha1HashType, salt, hash)
}

func decodeHash(encoded string) (hashType string, salt, hash []byte, err error) {
	if len(encoded) == 0 || encoded[0] != '|' {
		err = errors.New("knownhosts: hashed host must start with '|'")
		return
	}
	components := strings.Split(encoded, "|")
	if len(components) != 4 {
		err = fmt.Errorf("knownhosts: got %d components, want 3", len(components))
		return
	}

	hashType = components[1]
	if salt, err = base64.StdEncoding.DecodeString(components[2]); err != nil {
		return
	}
	if hash, err = base64.StdEncoding.DecodeString(components[3]); err != nil {
		return
	}
	return
}

func encodeHash(typ string, salt []byte, hash []byte) string {
	return strings.Join([]string{"",
		typ,
		base64.StdEncoding.EncodeToString(salt),
		base64.StdEncoding.EncodeToString(hash),
	}, "|")
}

// See https://android.googlesource.com/platform/external/openssh/+/ab28f5495c85297e7a597c1ba62e996416da7c7e/hostfile.c#120
func hashHost(hostname string, salt []byte) []byte {
	mac := hmac.New(sha1.New, salt)
	mac.Write([]byte(hostname))
	return mac.Sum(nil)
}

type hashedHost struct {
	salt []byte
	hash []byte
}

const sha1HashType = "1"

func newHashedHost(encoded string) (*hashedHost, error) {
	typ, salt, hash, err := decodeHash(encoded)
	if err != nil {
		return nil, err
	}

	// The type field seems for future algorithm agility, but it's
	// actually hardcoded in openssh currently, see
	// https://android.googlesource.com/platform/external/openssh/+/ab28f5495c85297e7a597c1ba62e996416da7c7e/hostfile.c#120
	if typ != sha1HashType {
		return nil, fmt.Errorf("knownhosts: got hash type %s, must be '1'", typ)
	}

	return &hashedHost{salt: salt, hash: hash}, nil
}

func (h *hashedHost) match(a addr) bool {
	return bytes.Equal(hashHost(Normalize(a.String()), h.salt), h.hash)
}
07070100000D21000081A4000000000000000000000001645E367C00000542000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/mac.go // Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package ssh

// Message authentication support

import (
	"crypto/hmac"
	"crypto/sha1"
	"crypto/sha256"
	"hash"
)

type macMode struct {
	keySize int
	etm     bool
	new     func(key []byte) hash.Hash
}

// truncatingMAC wraps around a hash.Hash and truncates the output digest to
// a given size.
type truncatingMAC struct {
	length int
	hmac   hash.Hash
}

func (t truncatingMAC) Write(data []byte) (int, error) {
	return t.hmac.Write(data)
}

func (t truncatingMAC) Sum(in []byte) []byte {
	out := t.hmac.Sum(in)
	return out[:len(in)+t.length]
}

func (t truncatingMAC) Reset() {
	t.hmac.Reset()
}

func (t truncatingMAC) Size() int {
	return t.length
}

func (t truncatingMAC) BlockSize() int { return t.hmac.BlockSize() }

var macModes = map[string]*macMode{
	"hmac-sha2-256-etm@openssh.com": {32, true, func(key []byte) hash.Hash {
		return hmac.New(sha256.New, key)
	}},
	"hmac-sha2-256": {32, false, func(key []byte) hash.Hash {
		return hmac.New(sha256.New, key)
	}},
	"hmac-sha1": {20, false, func(key []byte) hash.Hash {
		return hmac.New(sha1.New, key)
	}},
	"hmac-sha1-96": {20, false, func(key []byte) hash.Hash {
		return truncatingMAC{12, hmac.New(sha1.New, key)}
	}},
}
  07070100000D22000081A4000000000000000000000001645E367C00005001000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/messages.go    // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package ssh

import (
	"bytes"
	"encoding/binary"
	"errors"
	"fmt"
	"io"
	"math/big"
	"reflect"
	"strconv"
	"strings"
)

// These are SSH message type numbers. They are scattered around several
// documents but many were taken from [SSH-PARAMETERS].
const (
	msgIgnore        = 2
	msgUnimplemented = 3
	msgDebug         = 4
	msgNewKeys       = 21
)

// SSH messages:
//
// These structures mirror the wire format of the corresponding SSH messages.
// They are marshaled using reflection with the marshal and unmarshal functions
// in this file. The only wrinkle is that a final member of type []byte with a
// ssh tag of "rest" receives the remainder of a packet when unmarshaling.

// See RFC 4253, section 11.1.
const msgDisconnect = 1

// disconnectMsg is the message that signals a disconnect. It is also
// the error type returned from mux.Wait()
type disconnectMsg struct {
	Reason   uint32 `sshtype:"1"`
	Message  string
	Language string
}

func (d *disconnectMsg) Error() string {
	return fmt.Sprintf("ssh: disconnect, reason %d: %s", d.Reason, d.Message)
}

// See RFC 4253, section 7.1.
const msgKexInit = 20

type kexInitMsg struct {
	Cookie                  [16]byte `sshtype:"20"`
	KexAlgos                []string
	ServerHostKeyAlgos      []string
	CiphersClientServer     []string
	CiphersServerClient     []string
	MACsClientServer        []string
	MACsServerClient        []string
	CompressionClientServer []string
	CompressionServerClient []string
	LanguagesClientServer   []string
	LanguagesServerClient   []string
	FirstKexFollows         bool
	Reserved                uint32
}

// See RFC 4253, section 8.

// Diffie-Hellman
const msgKexDHInit = 30

type kexDHInitMsg struct {
	X *big.Int `sshtype:"30"`
}

const msgKexECDHInit = 30

type kexECDHInitMsg struct {
	ClientPubKey []byte `sshtype:"30"`
}

const msgKexECDHReply = 31

type kexECDHReplyMsg struct {
	HostKey         []byte `sshtype:"31"`
	EphemeralPubKey []byte
	Signature       []byte
}

const msgKexDHReply = 31

type kexDHReplyMsg struct {
	HostKey   []byte `sshtype:"31"`
	Y         *big.Int
	Signature []byte
}

// See RFC 4419, section 5.
const msgKexDHGexGroup = 31

type kexDHGexGroupMsg struct {
	P *big.Int `sshtype:"31"`
	G *big.Int
}

const msgKexDHGexInit = 32

type kexDHGexInitMsg struct {
	X *big.Int `sshtype:"32"`
}

const msgKexDHGexReply = 33

type kexDHGexReplyMsg struct {
	HostKey   []byte `sshtype:"33"`
	Y         *big.Int
	Signature []byte
}

const msgKexDHGexRequest = 34

type kexDHGexRequestMsg struct {
	MinBits      uint32 `sshtype:"34"`
	PreferedBits uint32
	MaxBits      uint32
}

// See RFC 4253, section 10.
const msgServiceRequest = 5

type serviceRequestMsg struct {
	Service string `sshtype:"5"`
}

// See RFC 4253, section 10.
const msgServiceAccept = 6

type serviceAcceptMsg struct {
	Service string `sshtype:"6"`
}

// See RFC 8308, section 2.3
const msgExtInfo = 7

type extInfoMsg struct {
	NumExtensions uint32 `sshtype:"7"`
	Payload       []byte `ssh:"rest"`
}

// See RFC 4252, section 5.
const msgUserAuthRequest = 50

type userAuthRequestMsg struct {
	User    string `sshtype:"50"`
	Service string
	Method  string
	Payload []byte `ssh:"rest"`
}

// Used for debug printouts of packets.
type userAuthSuccessMsg struct {
}

// See RFC 4252, section 5.1
const msgUserAuthFailure = 51

type userAuthFailureMsg struct {
	Methods        []string `sshtype:"51"`
	PartialSuccess bool
}

// See RFC 4252, section 5.1
const msgUserAuthSuccess = 52

// See RFC 4252, section 5.4
const msgUserAuthBanner = 53

type userAuthBannerMsg struct {
	Message string `sshtype:"53"`
	// unused, but required to allow message parsing
	Language string
}

// See RFC 4256, section 3.2
const msgUserAuthInfoRequest = 60
const msgUserAuthInfoResponse = 61

type userAuthInfoRequestMsg struct {
	Name        string `sshtype:"60"`
	Instruction string
	Language    string
	NumPrompts  uint32
	Prompts     []byte `ssh:"rest"`
}

// See RFC 4254, section 5.1.
const msgChannelOpen = 90

type channelOpenMsg struct {
	ChanType         string `sshtype:"90"`
	PeersID          uint32
	PeersWindow      uint32
	MaxPacketSize    uint32
	TypeSpecificData []byte `ssh:"rest"`
}

const msgChannelExtendedData = 95
const msgChannelData = 94

// Used for debug print outs of packets.
type channelDataMsg struct {
	PeersID uint32 `sshtype:"94"`
	Length  uint32
	Rest    []byte `ssh:"rest"`
}

// See RFC 4254, section 5.1.
const msgChannelOpenConfirm = 91

type channelOpenConfirmMsg struct {
	PeersID          uint32 `sshtype:"91"`
	MyID             uint32
	MyWindow         uint32
	MaxPacketSize    uint32
	TypeSpecificData []byte `ssh:"rest"`
}

// See RFC 4254, section 5.1.
const msgChannelOpenFailure = 92

type channelOpenFailureMsg struct {
	PeersID  uint32 `sshtype:"92"`
	Reason   RejectionReason
	Message  string
	Language string
}

const msgChannelRequest = 98

type channelRequestMsg struct {
	PeersID             uint32 `sshtype:"98"`
	Request             string
	WantReply           bool
	RequestSpecificData []byte `ssh:"rest"`
}

// See RFC 4254, section 5.4.
const msgChannelSuccess = 99

type channelRequestSuccessMsg struct {
	PeersID uint32 `sshtype:"99"`
}

// See RFC 4254, section 5.4.
const msgChannelFailure = 100

type channelRequestFailureMsg struct {
	PeersID uint32 `sshtype:"100"`
}

// See RFC 4254, section 5.3
const msgChannelClose = 97

type channelCloseMsg struct {
	PeersID uint32 `sshtype:"97"`
}

// See RFC 4254, section 5.3
const msgChannelEOF = 96

type channelEOFMsg struct {
	PeersID uint32 `sshtype:"96"`
}

// See RFC 4254, section 4
const msgGlobalRequest = 80

type globalRequestMsg struct {
	Type      string `sshtype:"80"`
	WantReply bool
	Data      []byte `ssh:"rest"`
}

// See RFC 4254, section 4
const msgRequestSuccess = 81

type globalRequestSuccessMsg struct {
	Data []byte `ssh:"rest" sshtype:"81"`
}

// See RFC 4254, section 4
const msgRequestFailure = 82

type globalRequestFailureMsg struct {
	Data []byte `ssh:"rest" sshtype:"82"`
}

// See RFC 4254, section 5.2
const msgChannelWindowAdjust = 93

type windowAdjustMsg struct {
	PeersID         uint32 `sshtype:"93"`
	AdditionalBytes uint32
}

// See RFC 4252, section 7
const msgUserAuthPubKeyOk = 60

type userAuthPubKeyOkMsg struct {
	Algo   string `sshtype:"60"`
	PubKey []byte
}

// See RFC 4462, section 3
const msgUserAuthGSSAPIResponse = 60

type userAuthGSSAPIResponse struct {
	SupportMech []byte `sshtype:"60"`
}

const msgUserAuthGSSAPIToken = 61

type userAuthGSSAPIToken struct {
	Token []byte `sshtype:"61"`
}

const msgUserAuthGSSAPIMIC = 66

type userAuthGSSAPIMIC struct {
	MIC []byte `sshtype:"66"`
}

// See RFC 4462, section 3.9
const msgUserAuthGSSAPIErrTok = 64

type userAuthGSSAPIErrTok struct {
	ErrorToken []byte `sshtype:"64"`
}

// See RFC 4462, section 3.8
const msgUserAuthGSSAPIError = 65

type userAuthGSSAPIError struct {
	MajorStatus uint32 `sshtype:"65"`
	MinorStatus uint32
	Message     string
	LanguageTag string
}

// typeTags returns the possible type bytes for the given reflect.Type, which
// should be a struct. The possible values are separated by a '|' character.
func typeTags(structType reflect.Type) (tags []byte) {
	tagStr := structType.Field(0).Tag.Get("sshtype")

	for _, tag := range strings.Split(tagStr, "|") {
		i, err := strconv.Atoi(tag)
		if err == nil {
			tags = append(tags, byte(i))
		}
	}

	return tags
}

func fieldError(t reflect.Type, field int, problem string) error {
	if problem != "" {
		problem = ": " + problem
	}
	return fmt.Errorf("ssh: unmarshal error for field %s of type %s%s", t.Field(field).Name, t.Name(), problem)
}

var errShortRead = errors.New("ssh: short read")

// Unmarshal parses data in SSH wire format into a structure. The out
// argument should be a pointer to struct. If the first member of the
// struct has the "sshtype" tag set to a '|'-separated set of numbers
// in decimal, the packet must start with one of those numbers. In
// case of error, Unmarshal returns a ParseError or
// UnexpectedMessageError.
func Unmarshal(data []byte, out interface{}) error {
	v := reflect.ValueOf(out).Elem()
	structType := v.Type()
	expectedTypes := typeTags(structType)

	var expectedType byte
	if len(expectedTypes) > 0 {
		expectedType = expectedTypes[0]
	}

	if len(data) == 0 {
		return parseError(expectedType)
	}

	if len(expectedTypes) > 0 {
		goodType := false
		for _, e := range expectedTypes {
			if e > 0 && data[0] == e {
				goodType = true
				break
			}
		}
		if !goodType {
			return fmt.Errorf("ssh: unexpected message type %d (expected one of %v)", data[0], expectedTypes)
		}
		data = data[1:]
	}

	var ok bool
	for i := 0; i < v.NumField(); i++ {
		field := v.Field(i)
		t := field.Type()
		switch t.Kind() {
		case reflect.Bool:
			if len(data) < 1 {
				return errShortRead
			}
			field.SetBool(data[0] != 0)
			data = data[1:]
		case reflect.Array:
			if t.Elem().Kind() != reflect.Uint8 {
				return fieldError(structType, i, "array of unsupported type")
			}
			if len(data) < t.Len() {
				return errShortRead
			}
			for j, n := 0, t.Len(); j < n; j++ {
				field.Index(j).Set(reflect.ValueOf(data[j]))
			}
			data = data[t.Len():]
		case reflect.Uint64:
			var u64 uint64
			if u64, data, ok = parseUint64(data); !ok {
				return errShortRead
			}
			field.SetUint(u64)
		case reflect.Uint32:
			var u32 uint32
			if u32, data, ok = parseUint32(data); !ok {
				return errShortRead
			}
			field.SetUint(uint64(u32))
		case reflect.Uint8:
			if len(data) < 1 {
				return errShortRead
			}
			field.SetUint(uint64(data[0]))
			data = data[1:]
		case reflect.String:
			var s []byte
			if s, data, ok = parseString(data); !ok {
				return fieldError(structType, i, "")
			}
			field.SetString(string(s))
		case reflect.Slice:
			switch t.Elem().Kind() {
			case reflect.Uint8:
				if structType.Field(i).Tag.Get("ssh") == "rest" {
					field.Set(reflect.ValueOf(data))
					data = nil
				} else {
					var s []byte
					if s, data, ok = parseString(data); !ok {
						return errShortRead
					}
					field.Set(reflect.ValueOf(s))
				}
			case reflect.String:
				var nl []string
				if nl, data, ok = parseNameList(data); !ok {
					return errShortRead
				}
				field.Set(reflect.ValueOf(nl))
			default:
				return fieldError(structType, i, "slice of unsupported type")
			}
		case reflect.Ptr:
			if t == bigIntType {
				var n *big.Int
				if n, data, ok = parseInt(data); !ok {
					return errShortRead
				}
				field.Set(reflect.ValueOf(n))
			} else {
				return fieldError(structType, i, "pointer to unsupported type")
			}
		default:
			return fieldError(structType, i, fmt.Sprintf("unsupported type: %v", t))
		}
	}

	if len(data) != 0 {
		return parseError(expectedType)
	}

	return nil
}

// Marshal serializes the message in msg to SSH wire format.  The msg
// argument should be a struct or pointer to struct. If the first
// member has the "sshtype" tag set to a number in decimal, that
// number is prepended to the result. If the last of member has the
// "ssh" tag set to "rest", its contents are appended to the output.
func Marshal(msg interface{}) []byte {
	out := make([]byte, 0, 64)
	return marshalStruct(out, msg)
}

func marshalStruct(out []byte, msg interface{}) []byte {
	v := reflect.Indirect(reflect.ValueOf(msg))
	msgTypes := typeTags(v.Type())
	if len(msgTypes) > 0 {
		out = append(out, msgTypes[0])
	}

	for i, n := 0, v.NumField(); i < n; i++ {
		field := v.Field(i)
		switch t := field.Type(); t.Kind() {
		case reflect.Bool:
			var v uint8
			if field.Bool() {
				v = 1
			}
			out = append(out, v)
		case reflect.Array:
			if t.Elem().Kind() != reflect.Uint8 {
				panic(fmt.Sprintf("array of non-uint8 in field %d: %T", i, field.Interface()))
			}
			for j, l := 0, t.Len(); j < l; j++ {
				out = append(out, uint8(field.Index(j).Uint()))
			}
		case reflect.Uint32:
			out = appendU32(out, uint32(field.Uint()))
		case reflect.Uint64:
			out = appendU64(out, uint64(field.Uint()))
		case reflect.Uint8:
			out = append(out, uint8(field.Uint()))
		case reflect.String:
			s := field.String()
			out = appendInt(out, len(s))
			out = append(out, s...)
		case reflect.Slice:
			switch t.Elem().Kind() {
			case reflect.Uint8:
				if v.Type().Field(i).Tag.Get("ssh") != "rest" {
					out = appendInt(out, field.Len())
				}
				out = append(out, field.Bytes()...)
			case reflect.String:
				offset := len(out)
				out = appendU32(out, 0)
				if n := field.Len(); n > 0 {
					for j := 0; j < n; j++ {
						f := field.Index(j)
						if j != 0 {
							out = append(out, ',')
						}
						out = append(out, f.String()...)
					}
					// overwrite length value
					binary.BigEndian.PutUint32(out[offset:], uint32(len(out)-offset-4))
				}
			default:
				panic(fmt.Sprintf("slice of unknown type in field %d: %T", i, field.Interface()))
			}
		case reflect.Ptr:
			if t == bigIntType {
				var n *big.Int
				nValue := reflect.ValueOf(&n)
				nValue.Elem().Set(field)
				needed := intLength(n)
				oldLength := len(out)

				if cap(out)-len(out) < needed {
					newOut := make([]byte, len(out), 2*(len(out)+needed))
					copy(newOut, out)
					out = newOut
				}
				out = out[:oldLength+needed]
				marshalInt(out[oldLength:], n)
			} else {
				panic(fmt.Sprintf("pointer to unknown type in field %d: %T", i, field.Interface()))
			}
		}
	}

	return out
}

var bigOne = big.NewInt(1)

func parseString(in []byte) (out, rest []byte, ok bool) {
	if len(in) < 4 {
		return
	}
	length := binary.BigEndian.Uint32(in)
	in = in[4:]
	if uint32(len(in)) < length {
		return
	}
	out = in[:length]
	rest = in[length:]
	ok = true
	return
}

var (
	comma         = []byte{','}
	emptyNameList = []string{}
)

func parseNameList(in []byte) (out []string, rest []byte, ok bool) {
	contents, rest, ok := parseString(in)
	if !ok {
		return
	}
	if len(contents) == 0 {
		out = emptyNameList
		return
	}
	parts := bytes.Split(contents, comma)
	out = make([]string, len(parts))
	for i, part := range parts {
		out[i] = string(part)
	}
	return
}

func parseInt(in []byte) (out *big.Int, rest []byte, ok bool) {
	contents, rest, ok := parseString(in)
	if !ok {
		return
	}
	out = new(big.Int)

	if len(contents) > 0 && contents[0]&0x80 == 0x80 {
		// This is a negative number
		notBytes := make([]byte, len(contents))
		for i := range notBytes {
			notBytes[i] = ^contents[i]
		}
		out.SetBytes(notBytes)
		out.Add(out, bigOne)
		out.Neg(out)
	} else {
		// Positive number
		out.SetBytes(contents)
	}
	ok = true
	return
}

func parseUint32(in []byte) (uint32, []byte, bool) {
	if len(in) < 4 {
		return 0, nil, false
	}
	return binary.BigEndian.Uint32(in), in[4:], true
}

func parseUint64(in []byte) (uint64, []byte, bool) {
	if len(in) < 8 {
		return 0, nil, false
	}
	return binary.BigEndian.Uint64(in), in[8:], true
}

func intLength(n *big.Int) int {
	length := 4 /* length bytes */
	if n.Sign() < 0 {
		nMinus1 := new(big.Int).Neg(n)
		nMinus1.Sub(nMinus1, bigOne)
		bitLen := nMinus1.BitLen()
		if bitLen%8 == 0 {
			// The number will need 0xff padding
			length++
		}
		length += (bitLen + 7) / 8
	} else if n.Sign() == 0 {
		// A zero is the zero length string
	} else {
		bitLen := n.BitLen()
		if bitLen%8 == 0 {
			// The number will need 0x00 padding
			length++
		}
		length += (bitLen + 7) / 8
	}

	return length
}

func marshalUint32(to []byte, n uint32) []byte {
	binary.BigEndian.PutUint32(to, n)
	return to[4:]
}

func marshalUint64(to []byte, n uint64) []byte {
	binary.BigEndian.PutUint64(to, n)
	return to[8:]
}

func marshalInt(to []byte, n *big.Int) []byte {
	lengthBytes := to
	to = to[4:]
	length := 0

	if n.Sign() < 0 {
		// A negative number has to be converted to two's-complement
		// form. So we'll subtract 1 and invert. If the
		// most-significant-bit isn't set then we'll need to pad the
		// beginning with 0xff in order to keep the number negative.
		nMinus1 := new(big.Int).Neg(n)
		nMinus1.Sub(nMinus1, bigOne)
		bytes := nMinus1.Bytes()
		for i := range bytes {
			bytes[i] ^= 0xff
		}
		if len(bytes) == 0 || bytes[0]&0x80 == 0 {
			to[0] = 0xff
			to = to[1:]
			length++
		}
		nBytes := copy(to, bytes)
		to = to[nBytes:]
		length += nBytes
	} else if n.Sign() == 0 {
		// A zero is the zero length string
	} else {
		bytes := n.Bytes()
		if len(bytes) > 0 && bytes[0]&0x80 != 0 {
			// We'll have to pad this with a 0x00 in order to
			// stop it looking like a negative number.
			to[0] = 0
			to = to[1:]
			length++
		}
		nBytes := copy(to, bytes)
		to = to[nBytes:]
		length += nBytes
	}

	lengthBytes[0] = byte(length >> 24)
	lengthBytes[1] = byte(length >> 16)
	lengthBytes[2] = byte(length >> 8)
	lengthBytes[3] = byte(length)
	return to
}

func writeInt(w io.Writer, n *big.Int) {
	length := intLength(n)
	buf := make([]byte, length)
	marshalInt(buf, n)
	w.Write(buf)
}

func writeString(w io.Writer, s []byte) {
	var lengthBytes [4]byte
	lengthBytes[0] = byte(len(s) >> 24)
	lengthBytes[1] = byte(len(s) >> 16)
	lengthBytes[2] = byte(len(s) >> 8)
	lengthBytes[3] = byte(len(s))
	w.Write(lengthBytes[:])
	w.Write(s)
}

func stringLength(n int) int {
	return 4 + n
}

func marshalString(to []byte, s []byte) []byte {
	to[0] = byte(len(s) >> 24)
	to[1] = byte(len(s) >> 16)
	to[2] = byte(len(s) >> 8)
	to[3] = byte(len(s))
	to = to[4:]
	copy(to, s)
	return to[len(s):]
}

var bigIntType = reflect.TypeOf((*big.Int)(nil))

// Decode a packet into its corresponding message.
func decode(packet []byte) (interface{}, error) {
	var msg interface{}
	switch packet[0] {
	case msgDisconnect:
		msg = new(disconnectMsg)
	case msgServiceRequest:
		msg = new(serviceRequestMsg)
	case msgServiceAccept:
		msg = new(serviceAcceptMsg)
	case msgExtInfo:
		msg = new(extInfoMsg)
	case msgKexInit:
		msg = new(kexInitMsg)
	case msgKexDHInit:
		msg = new(kexDHInitMsg)
	case msgKexDHReply:
		msg = new(kexDHReplyMsg)
	case msgUserAuthRequest:
		msg = new(userAuthRequestMsg)
	case msgUserAuthSuccess:
		return new(userAuthSuccessMsg), nil
	case msgUserAuthFailure:
		msg = new(userAuthFailureMsg)
	case msgUserAuthPubKeyOk:
		msg = new(userAuthPubKeyOkMsg)
	case msgGlobalRequest:
		msg = new(globalRequestMsg)
	case msgRequestSuccess:
		msg = new(globalRequestSuccessMsg)
	case msgRequestFailure:
		msg = new(globalRequestFailureMsg)
	case msgChannelOpen:
		msg = new(channelOpenMsg)
	case msgChannelData:
		msg = new(channelDataMsg)
	case msgChannelOpenConfirm:
		msg = new(channelOpenConfirmMsg)
	case msgChannelOpenFailure:
		msg = new(channelOpenFailureMsg)
	case msgChannelWindowAdjust:
		msg = new(windowAdjustMsg)
	case msgChannelEOF:
		msg = new(channelEOFMsg)
	case msgChannelClose:
		msg = new(channelCloseMsg)
	case msgChannelRequest:
		msg = new(channelRequestMsg)
	case msgChannelSuccess:
		msg = new(channelRequestSuccessMsg)
	case msgChannelFailure:
		msg = new(channelRequestFailureMsg)
	case msgUserAuthGSSAPIToken:
		msg = new(userAuthGSSAPIToken)
	case msgUserAuthGSSAPIMIC:
		msg = new(userAuthGSSAPIMIC)
	case msgUserAuthGSSAPIErrTok:
		msg = new(userAuthGSSAPIErrTok)
	case msgUserAuthGSSAPIError:
		msg = new(userAuthGSSAPIError)
	default:
		return nil, unexpectedMessageError(0, packet[0])
	}
	if err := Unmarshal(packet, msg); err != nil {
		return nil, err
	}
	return msg, nil
}

var packetTypeNames = map[byte]string{
	msgDisconnect:          "disconnectMsg",
	msgServiceRequest:      "serviceRequestMsg",
	msgServiceAccept:       "serviceAcceptMsg",
	msgExtInfo:             "extInfoMsg",
	msgKexInit:             "kexInitMsg",
	msgKexDHInit:           "kexDHInitMsg",
	msgKexDHReply:          "kexDHReplyMsg",
	msgUserAuthRequest:     "userAuthRequestMsg",
	msgUserAuthSuccess:     "userAuthSuccessMsg",
	msgUserAuthFailure:     "userAuthFailureMsg",
	msgUserAuthPubKeyOk:    "userAuthPubKeyOkMsg",
	msgGlobalRequest:       "globalRequestMsg",
	msgRequestSuccess:      "globalRequestSuccessMsg",
	msgRequestFailure:      "globalRequestFailureMsg",
	msgChannelOpen:         "channelOpenMsg",
	msgChannelData:         "channelDataMsg",
	msgChannelOpenConfirm:  "channelOpenConfirmMsg",
	msgChannelOpenFailure:  "channelOpenFailureMsg",
	msgChannelWindowAdjust: "windowAdjustMsg",
	msgChannelEOF:          "channelEOFMsg",
	msgChannelClose:        "channelCloseMsg",
	msgChannelRequest:      "channelRequestMsg",
	msgChannelSuccess:      "channelRequestSuccessMsg",
	msgChannelFailure:      "channelRequestFailureMsg",
}
   07070100000D23000081A4000000000000000000000001645E367C00001EBE000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/mux.go // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package ssh

import (
	"encoding/binary"
	"fmt"
	"io"
	"log"
	"sync"
	"sync/atomic"
)

// debugMux, if set, causes messages in the connection protocol to be
// logged.
const debugMux = false

// chanList is a thread safe channel list.
type chanList struct {
	// protects concurrent access to chans
	sync.Mutex

	// chans are indexed by the local id of the channel, which the
	// other side should send in the PeersId field.
	chans []*channel

	// This is a debugging aid: it offsets all IDs by this
	// amount. This helps distinguish otherwise identical
	// server/client muxes
	offset uint32
}

// Assigns a channel ID to the given channel.
func (c *chanList) add(ch *channel) uint32 {
	c.Lock()
	defer c.Unlock()
	for i := range c.chans {
		if c.chans[i] == nil {
			c.chans[i] = ch
			return uint32(i) + c.offset
		}
	}
	c.chans = append(c.chans, ch)
	return uint32(len(c.chans)-1) + c.offset
}

// getChan returns the channel for the given ID.
func (c *chanList) getChan(id uint32) *channel {
	id -= c.offset

	c.Lock()
	defer c.Unlock()
	if id < uint32(len(c.chans)) {
		return c.chans[id]
	}
	return nil
}

func (c *chanList) remove(id uint32) {
	id -= c.offset
	c.Lock()
	if id < uint32(len(c.chans)) {
		c.chans[id] = nil
	}
	c.Unlock()
}

// dropAll forgets all channels it knows, returning them in a slice.
func (c *chanList) dropAll() []*channel {
	c.Lock()
	defer c.Unlock()
	var r []*channel

	for _, ch := range c.chans {
		if ch == nil {
			continue
		}
		r = append(r, ch)
	}
	c.chans = nil
	return r
}

// mux represents the state for the SSH connection protocol, which
// multiplexes many channels onto a single packet transport.
type mux struct {
	conn     packetConn
	chanList chanList

	incomingChannels chan NewChannel

	globalSentMu     sync.Mutex
	globalResponses  chan interface{}
	incomingRequests chan *Request

	errCond *sync.Cond
	err     error
}

// When debugging, each new chanList instantiation has a different
// offset.
var globalOff uint32

func (m *mux) Wait() error {
	m.errCond.L.Lock()
	defer m.errCond.L.Unlock()
	for m.err == nil {
		m.errCond.Wait()
	}
	return m.err
}

// newMux returns a mux that runs over the given connection.
func newMux(p packetConn) *mux {
	m := &mux{
		conn:             p,
		incomingChannels: make(chan NewChannel, chanSize),
		globalResponses:  make(chan interface{}, 1),
		incomingRequests: make(chan *Request, chanSize),
		errCond:          newCond(),
	}
	if debugMux {
		m.chanList.offset = atomic.AddUint32(&globalOff, 1)
	}

	go m.loop()
	return m
}

func (m *mux) sendMessage(msg interface{}) error {
	p := Marshal(msg)
	if debugMux {
		log.Printf("send global(%d): %#v", m.chanList.offset, msg)
	}
	return m.conn.writePacket(p)
}

func (m *mux) SendRequest(name string, wantReply bool, payload []byte) (bool, []byte, error) {
	if wantReply {
		m.globalSentMu.Lock()
		defer m.globalSentMu.Unlock()
	}

	if err := m.sendMessage(globalRequestMsg{
		Type:      name,
		WantReply: wantReply,
		Data:      payload,
	}); err != nil {
		return false, nil, err
	}

	if !wantReply {
		return false, nil, nil
	}

	msg, ok := <-m.globalResponses
	if !ok {
		return false, nil, io.EOF
	}
	switch msg := msg.(type) {
	case *globalRequestFailureMsg:
		return false, msg.Data, nil
	case *globalRequestSuccessMsg:
		return true, msg.Data, nil
	default:
		return false, nil, fmt.Errorf("ssh: unexpected response to request: %#v", msg)
	}
}

// ackRequest must be called after processing a global request that
// has WantReply set.
func (m *mux) ackRequest(ok bool, data []byte) error {
	if ok {
		return m.sendMessage(globalRequestSuccessMsg{Data: data})
	}
	return m.sendMessage(globalRequestFailureMsg{Data: data})
}

func (m *mux) Close() error {
	return m.conn.Close()
}

// loop runs the connection machine. It will process packets until an
// error is encountered. To synchronize on loop exit, use mux.Wait.
func (m *mux) loop() {
	var err error
	for err == nil {
		err = m.onePacket()
	}

	for _, ch := range m.chanList.dropAll() {
		ch.close()
	}

	close(m.incomingChannels)
	close(m.incomingRequests)
	close(m.globalResponses)

	m.conn.Close()

	m.errCond.L.Lock()
	m.err = err
	m.errCond.Broadcast()
	m.errCond.L.Unlock()

	if debugMux {
		log.Println("loop exit", err)
	}
}

// onePacket reads and processes one packet.
func (m *mux) onePacket() error {
	packet, err := m.conn.readPacket()
	if err != nil {
		return err
	}

	if debugMux {
		if packet[0] == msgChannelData || packet[0] == msgChannelExtendedData {
			log.Printf("decoding(%d): data packet - %d bytes", m.chanList.offset, len(packet))
		} else {
			p, _ := decode(packet)
			log.Printf("decoding(%d): %d %#v - %d bytes", m.chanList.offset, packet[0], p, len(packet))
		}
	}

	switch packet[0] {
	case msgChannelOpen:
		return m.handleChannelOpen(packet)
	case msgGlobalRequest, msgRequestSuccess, msgRequestFailure:
		return m.handleGlobalPacket(packet)
	}

	// assume a channel packet.
	if len(packet) < 5 {
		return parseError(packet[0])
	}
	id := binary.BigEndian.Uint32(packet[1:])
	ch := m.chanList.getChan(id)
	if ch == nil {
		return m.handleUnknownChannelPacket(id, packet)
	}

	return ch.handlePacket(packet)
}

func (m *mux) handleGlobalPacket(packet []byte) error {
	msg, err := decode(packet)
	if err != nil {
		return err
	}

	switch msg := msg.(type) {
	case *globalRequestMsg:
		m.incomingRequests <- &Request{
			Type:      msg.Type,
			WantReply: msg.WantReply,
			Payload:   msg.Data,
			mux:       m,
		}
	case *globalRequestSuccessMsg, *globalRequestFailureMsg:
		m.globalResponses <- msg
	default:
		panic(fmt.Sprintf("not a global message %#v", msg))
	}

	return nil
}

// handleChannelOpen schedules a channel to be Accept()ed.
func (m *mux) handleChannelOpen(packet []byte) error {
	var msg channelOpenMsg
	if err := Unmarshal(packet, &msg); err != nil {
		return err
	}

	if msg.MaxPacketSize < minPacketLength || msg.MaxPacketSize > 1<<31 {
		failMsg := channelOpenFailureMsg{
			PeersID:  msg.PeersID,
			Reason:   ConnectionFailed,
			Message:  "invalid request",
			Language: "en_US.UTF-8",
		}
		return m.sendMessage(failMsg)
	}

	c := m.newChannel(msg.ChanType, channelInbound, msg.TypeSpecificData)
	c.remoteId = msg.PeersID
	c.maxRemotePayload = msg.MaxPacketSize
	c.remoteWin.add(msg.PeersWindow)
	m.incomingChannels <- c
	return nil
}

func (m *mux) OpenChannel(chanType string, extra []byte) (Channel, <-chan *Request, error) {
	ch, err := m.openChannel(chanType, extra)
	if err != nil {
		return nil, nil, err
	}

	return ch, ch.incomingRequests, nil
}

func (m *mux) openChannel(chanType string, extra []byte) (*channel, error) {
	ch := m.newChannel(chanType, channelOutbound, extra)

	ch.maxIncomingPayload = channelMaxPacket

	open := channelOpenMsg{
		ChanType:         chanType,
		PeersWindow:      ch.myWindow,
		MaxPacketSize:    ch.maxIncomingPayload,
		TypeSpecificData: extra,
		PeersID:          ch.localId,
	}
	if err := m.sendMessage(open); err != nil {
		return nil, err
	}

	switch msg := (<-ch.msg).(type) {
	case *channelOpenConfirmMsg:
		return ch, nil
	case *channelOpenFailureMsg:
		return nil, &OpenChannelError{msg.Reason, msg.Message}
	default:
		return nil, fmt.Errorf("ssh: unexpected packet in response to channel open: %T", msg)
	}
}

func (m *mux) handleUnknownChannelPacket(id uint32, packet []byte) error {
	msg, err := decode(packet)
	if err != nil {
		return err
	}

	switch msg := msg.(type) {
	// RFC 4254 section 5.4 says unrecognized channel requests should
	// receive a failure response.
	case *channelRequestMsg:
		if msg.WantReply {
			return m.sendMessage(channelRequestFailureMsg{
				PeersID: msg.PeersID,
			})
		}
		return nil
	default:
		return fmt.Errorf("ssh: invalid channel %d", id)
	}
}
  07070100000D24000081A4000000000000000000000001645E367C00005FBE000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/server.go  // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package ssh

import (
	"bytes"
	"errors"
	"fmt"
	"io"
	"net"
	"strings"
)

// The Permissions type holds fine-grained permissions that are
// specific to a user or a specific authentication method for a user.
// The Permissions value for a successful authentication attempt is
// available in ServerConn, so it can be used to pass information from
// the user-authentication phase to the application layer.
type Permissions struct {
	// CriticalOptions indicate restrictions to the default
	// permissions, and are typically used in conjunction with
	// user certificates. The standard for SSH certificates
	// defines "force-command" (only allow the given command to
	// execute) and "source-address" (only allow connections from
	// the given address). The SSH package currently only enforces
	// the "source-address" critical option. It is up to server
	// implementations to enforce other critical options, such as
	// "force-command", by checking them after the SSH handshake
	// is successful. In general, SSH servers should reject
	// connections that specify critical options that are unknown
	// or not supported.
	CriticalOptions map[string]string

	// Extensions are extra functionality that the server may
	// offer on authenticated connections. Lack of support for an
	// extension does not preclude authenticating a user. Common
	// extensions are "permit-agent-forwarding",
	// "permit-X11-forwarding". The Go SSH library currently does
	// not act on any extension, and it is up to server
	// implementations to honor them. Extensions can be used to
	// pass data from the authentication callbacks to the server
	// application layer.
	Extensions map[string]string
}

type GSSAPIWithMICConfig struct {
	// AllowLogin, must be set, is called when gssapi-with-mic
	// authentication is selected (RFC 4462 section 3). The srcName is from the
	// results of the GSS-API authentication. The format is username@DOMAIN.
	// GSSAPI just guarantees to the server who the user is, but not if they can log in, and with what permissions.
	// This callback is called after the user identity is established with GSSAPI to decide if the user can login with
	// which permissions. If the user is allowed to login, it should return a nil error.
	AllowLogin func(conn ConnMetadata, srcName string) (*Permissions, error)

	// Server must be set. It's the implementation
	// of the GSSAPIServer interface. See GSSAPIServer interface for details.
	Server GSSAPIServer
}

// ServerConfig holds server specific configuration data.
type ServerConfig struct {
	// Config contains configuration shared between client and server.
	Config

	hostKeys []Signer

	// NoClientAuth is true if clients are allowed to connect without
	// authenticating.
	// To determine NoClientAuth at runtime, set NoClientAuth to true
	// and the optional NoClientAuthCallback to a non-nil value.
	NoClientAuth bool

	// NoClientAuthCallback, if non-nil, is called when a user
	// attempts to authenticate with auth method "none".
	// NoClientAuth must also be set to true for this be used, or
	// this func is unused.
	NoClientAuthCallback func(ConnMetadata) (*Permissions, error)

	// MaxAuthTries specifies the maximum number of authentication attempts
	// permitted per connection. If set to a negative number, the number of
	// attempts are unlimited. If set to zero, the number of attempts are limited
	// to 6.
	MaxAuthTries int

	// PasswordCallback, if non-nil, is called when a user
	// attempts to authenticate using a password.
	PasswordCallback func(conn ConnMetadata, password []byte) (*Permissions, error)

	// PublicKeyCallback, if non-nil, is called when a client
	// offers a public key for authentication. It must return a nil error
	// if the given public key can be used to authenticate the
	// given user. For example, see CertChecker.Authenticate. A
	// call to this function does not guarantee that the key
	// offered is in fact used to authenticate. To record any data
	// depending on the public key, store it inside a
	// Permissions.Extensions entry.
	PublicKeyCallback func(conn ConnMetadata, key PublicKey) (*Permissions, error)

	// KeyboardInteractiveCallback, if non-nil, is called when
	// keyboard-interactive authentication is selected (RFC
	// 4256). The client object's Challenge function should be
	// used to query the user. The callback may offer multiple
	// Challenge rounds. To avoid information leaks, the client
	// should be presented a challenge even if the user is
	// unknown.
	KeyboardInteractiveCallback func(conn ConnMetadata, client KeyboardInteractiveChallenge) (*Permissions, error)

	// AuthLogCallback, if non-nil, is called to log all authentication
	// attempts.
	AuthLogCallback func(conn ConnMetadata, method string, err error)

	// ServerVersion is the version identification string to announce in
	// the public handshake.
	// If empty, a reasonable default is used.
	// Note that RFC 4253 section 4.2 requires that this string start with
	// "SSH-2.0-".
	ServerVersion string

	// BannerCallback, if present, is called and the return string is sent to
	// the client after key exchange completed but before authentication.
	BannerCallback func(conn ConnMetadata) string

	// GSSAPIWithMICConfig includes gssapi server and callback, which if both non-nil, is used
	// when gssapi-with-mic authentication is selected (RFC 4462 section 3).
	GSSAPIWithMICConfig *GSSAPIWithMICConfig
}

// AddHostKey adds a private key as a host key. If an existing host
// key exists with the same public key format, it is replaced. Each server
// config must have at least one host key.
func (s *ServerConfig) AddHostKey(key Signer) {
	for i, k := range s.hostKeys {
		if k.PublicKey().Type() == key.PublicKey().Type() {
			s.hostKeys[i] = key
			return
		}
	}

	s.hostKeys = append(s.hostKeys, key)
}

// cachedPubKey contains the results of querying whether a public key is
// acceptable for a user.
type cachedPubKey struct {
	user       string
	pubKeyData []byte
	result     error
	perms      *Permissions
}

const maxCachedPubKeys = 16

// pubKeyCache caches tests for public keys.  Since SSH clients
// will query whether a public key is acceptable before attempting to
// authenticate with it, we end up with duplicate queries for public
// key validity.  The cache only applies to a single ServerConn.
type pubKeyCache struct {
	keys []cachedPubKey
}

// get returns the result for a given user/algo/key tuple.
func (c *pubKeyCache) get(user string, pubKeyData []byte) (cachedPubKey, bool) {
	for _, k := range c.keys {
		if k.user == user && bytes.Equal(k.pubKeyData, pubKeyData) {
			return k, true
		}
	}
	return cachedPubKey{}, false
}

// add adds the given tuple to the cache.
func (c *pubKeyCache) add(candidate cachedPubKey) {
	if len(c.keys) < maxCachedPubKeys {
		c.keys = append(c.keys, candidate)
	}
}

// ServerConn is an authenticated SSH connection, as seen from the
// server
type ServerConn struct {
	Conn

	// If the succeeding authentication callback returned a
	// non-nil Permissions pointer, it is stored here.
	Permissions *Permissions
}

// NewServerConn starts a new SSH server with c as the underlying
// transport.  It starts with a handshake and, if the handshake is
// unsuccessful, it closes the connection and returns an error.  The
// Request and NewChannel channels must be serviced, or the connection
// will hang.
//
// The returned error may be of type *ServerAuthError for
// authentication errors.
func NewServerConn(c net.Conn, config *ServerConfig) (*ServerConn, <-chan NewChannel, <-chan *Request, error) {
	fullConf := *config
	fullConf.SetDefaults()
	if fullConf.MaxAuthTries == 0 {
		fullConf.MaxAuthTries = 6
	}
	// Check if the config contains any unsupported key exchanges
	for _, kex := range fullConf.KeyExchanges {
		if _, ok := serverForbiddenKexAlgos[kex]; ok {
			return nil, nil, nil, fmt.Errorf("ssh: unsupported key exchange %s for server", kex)
		}
	}

	s := &connection{
		sshConn: sshConn{conn: c},
	}
	perms, err := s.serverHandshake(&fullConf)
	if err != nil {
		c.Close()
		return nil, nil, nil, err
	}
	return &ServerConn{s, perms}, s.mux.incomingChannels, s.mux.incomingRequests, nil
}

// signAndMarshal signs the data with the appropriate algorithm,
// and serializes the result in SSH wire format. algo is the negotiate
// algorithm and may be a certificate type.
func signAndMarshal(k AlgorithmSigner, rand io.Reader, data []byte, algo string) ([]byte, error) {
	sig, err := k.SignWithAlgorithm(rand, data, underlyingAlgo(algo))
	if err != nil {
		return nil, err
	}

	return Marshal(sig), nil
}

// handshake performs key exchange and user authentication.
func (s *connection) serverHandshake(config *ServerConfig) (*Permissions, error) {
	if len(config.hostKeys) == 0 {
		return nil, errors.New("ssh: server has no host keys")
	}

	if !config.NoClientAuth && config.PasswordCallback == nil && config.PublicKeyCallback == nil &&
		config.KeyboardInteractiveCallback == nil && (config.GSSAPIWithMICConfig == nil ||
		config.GSSAPIWithMICConfig.AllowLogin == nil || config.GSSAPIWithMICConfig.Server == nil) {
		return nil, errors.New("ssh: no authentication methods configured but NoClientAuth is also false")
	}

	if config.ServerVersion != "" {
		s.serverVersion = []byte(config.ServerVersion)
	} else {
		s.serverVersion = []byte(packageVersion)
	}
	var err error
	s.clientVersion, err = exchangeVersions(s.sshConn.conn, s.serverVersion)
	if err != nil {
		return nil, err
	}

	tr := newTransport(s.sshConn.conn, config.Rand, false /* not client */)
	s.transport = newServerTransport(tr, s.clientVersion, s.serverVersion, config)

	if err := s.transport.waitSession(); err != nil {
		return nil, err
	}

	// We just did the key change, so the session ID is established.
	s.sessionID = s.transport.getSessionID()

	var packet []byte
	if packet, err = s.transport.readPacket(); err != nil {
		return nil, err
	}

	var serviceRequest serviceRequestMsg
	if err = Unmarshal(packet, &serviceRequest); err != nil {
		return nil, err
	}
	if serviceRequest.Service != serviceUserAuth {
		return nil, errors.New("ssh: requested service '" + serviceRequest.Service + "' before authenticating")
	}
	serviceAccept := serviceAcceptMsg{
		Service: serviceUserAuth,
	}
	if err := s.transport.writePacket(Marshal(&serviceAccept)); err != nil {
		return nil, err
	}

	perms, err := s.serverAuthenticate(config)
	if err != nil {
		return nil, err
	}
	s.mux = newMux(s.transport)
	return perms, err
}

func checkSourceAddress(addr net.Addr, sourceAddrs string) error {
	if addr == nil {
		return errors.New("ssh: no address known for client, but source-address match required")
	}

	tcpAddr, ok := addr.(*net.TCPAddr)
	if !ok {
		return fmt.Errorf("ssh: remote address %v is not an TCP address when checking source-address match", addr)
	}

	for _, sourceAddr := range strings.Split(sourceAddrs, ",") {
		if allowedIP := net.ParseIP(sourceAddr); allowedIP != nil {
			if allowedIP.Equal(tcpAddr.IP) {
				return nil
			}
		} else {
			_, ipNet, err := net.ParseCIDR(sourceAddr)
			if err != nil {
				return fmt.Errorf("ssh: error parsing source-address restriction %q: %v", sourceAddr, err)
			}

			if ipNet.Contains(tcpAddr.IP) {
				return nil
			}
		}
	}

	return fmt.Errorf("ssh: remote address %v is not allowed because of source-address restriction", addr)
}

func gssExchangeToken(gssapiConfig *GSSAPIWithMICConfig, firstToken []byte, s *connection,
	sessionID []byte, userAuthReq userAuthRequestMsg) (authErr error, perms *Permissions, err error) {
	gssAPIServer := gssapiConfig.Server
	defer gssAPIServer.DeleteSecContext()
	var srcName string
	for {
		var (
			outToken     []byte
			needContinue bool
		)
		outToken, srcName, needContinue, err = gssAPIServer.AcceptSecContext(firstToken)
		if err != nil {
			return err, nil, nil
		}
		if len(outToken) != 0 {
			if err := s.transport.writePacket(Marshal(&userAuthGSSAPIToken{
				Token: outToken,
			})); err != nil {
				return nil, nil, err
			}
		}
		if !needContinue {
			break
		}
		packet, err := s.transport.readPacket()
		if err != nil {
			return nil, nil, err
		}
		userAuthGSSAPITokenReq := &userAuthGSSAPIToken{}
		if err := Unmarshal(packet, userAuthGSSAPITokenReq); err != nil {
			return nil, nil, err
		}
	}
	packet, err := s.transport.readPacket()
	if err != nil {
		return nil, nil, err
	}
	userAuthGSSAPIMICReq := &userAuthGSSAPIMIC{}
	if err := Unmarshal(packet, userAuthGSSAPIMICReq); err != nil {
		return nil, nil, err
	}
	mic := buildMIC(string(sessionID), userAuthReq.User, userAuthReq.Service, userAuthReq.Method)
	if err := gssAPIServer.VerifyMIC(mic, userAuthGSSAPIMICReq.MIC); err != nil {
		return err, nil, nil
	}
	perms, authErr = gssapiConfig.AllowLogin(s, srcName)
	return authErr, perms, nil
}

// ServerAuthError represents server authentication errors and is
// sometimes returned by NewServerConn. It appends any authentication
// errors that may occur, and is returned if all of the authentication
// methods provided by the user failed to authenticate.
type ServerAuthError struct {
	// Errors contains authentication errors returned by the authentication
	// callback methods. The first entry is typically ErrNoAuth.
	Errors []error
}

func (l ServerAuthError) Error() string {
	var errs []string
	for _, err := range l.Errors {
		errs = append(errs, err.Error())
	}
	return "[" + strings.Join(errs, ", ") + "]"
}

// ErrNoAuth is the error value returned if no
// authentication method has been passed yet. This happens as a normal
// part of the authentication loop, since the client first tries
// 'none' authentication to discover available methods.
// It is returned in ServerAuthError.Errors from NewServerConn.
var ErrNoAuth = errors.New("ssh: no auth passed yet")

func (s *connection) serverAuthenticate(config *ServerConfig) (*Permissions, error) {
	sessionID := s.transport.getSessionID()
	var cache pubKeyCache
	var perms *Permissions

	authFailures := 0
	var authErrs []error
	var displayedBanner bool

userAuthLoop:
	for {
		if authFailures >= config.MaxAuthTries && config.MaxAuthTries > 0 {
			discMsg := &disconnectMsg{
				Reason:  2,
				Message: "too many authentication failures",
			}

			if err := s.transport.writePacket(Marshal(discMsg)); err != nil {
				return nil, err
			}

			return nil, discMsg
		}

		var userAuthReq userAuthRequestMsg
		if packet, err := s.transport.readPacket(); err != nil {
			if err == io.EOF {
				return nil, &ServerAuthError{Errors: authErrs}
			}
			return nil, err
		} else if err = Unmarshal(packet, &userAuthReq); err != nil {
			return nil, err
		}

		if userAuthReq.Service != serviceSSH {
			return nil, errors.New("ssh: client attempted to negotiate for unknown service: " + userAuthReq.Service)
		}

		s.user = userAuthReq.User

		if !displayedBanner && config.BannerCallback != nil {
			displayedBanner = true
			msg := config.BannerCallback(s)
			if msg != "" {
				bannerMsg := &userAuthBannerMsg{
					Message: msg,
				}
				if err := s.transport.writePacket(Marshal(bannerMsg)); err != nil {
					return nil, err
				}
			}
		}

		perms = nil
		authErr := ErrNoAuth

		switch userAuthReq.Method {
		case "none":
			if config.NoClientAuth {
				if config.NoClientAuthCallback != nil {
					perms, authErr = config.NoClientAuthCallback(s)
				} else {
					authErr = nil
				}
			}

			// allow initial attempt of 'none' without penalty
			if authFailures == 0 {
				authFailures--
			}
		case "password":
			if config.PasswordCallback == nil {
				authErr = errors.New("ssh: password auth not configured")
				break
			}
			payload := userAuthReq.Payload
			if len(payload) < 1 || payload[0] != 0 {
				return nil, parseError(msgUserAuthRequest)
			}
			payload = payload[1:]
			password, payload, ok := parseString(payload)
			if !ok || len(payload) > 0 {
				return nil, parseError(msgUserAuthRequest)
			}

			perms, authErr = config.PasswordCallback(s, password)
		case "keyboard-interactive":
			if config.KeyboardInteractiveCallback == nil {
				authErr = errors.New("ssh: keyboard-interactive auth not configured")
				break
			}

			prompter := &sshClientKeyboardInteractive{s}
			perms, authErr = config.KeyboardInteractiveCallback(s, prompter.Challenge)
		case "publickey":
			if config.PublicKeyCallback == nil {
				authErr = errors.New("ssh: publickey auth not configured")
				break
			}
			payload := userAuthReq.Payload
			if len(payload) < 1 {
				return nil, parseError(msgUserAuthRequest)
			}
			isQuery := payload[0] == 0
			payload = payload[1:]
			algoBytes, payload, ok := parseString(payload)
			if !ok {
				return nil, parseError(msgUserAuthRequest)
			}
			algo := string(algoBytes)
			if !contains(supportedPubKeyAuthAlgos, underlyingAlgo(algo)) {
				authErr = fmt.Errorf("ssh: algorithm %q not accepted", algo)
				break
			}

			pubKeyData, payload, ok := parseString(payload)
			if !ok {
				return nil, parseError(msgUserAuthRequest)
			}

			pubKey, err := ParsePublicKey(pubKeyData)
			if err != nil {
				return nil, err
			}

			candidate, ok := cache.get(s.user, pubKeyData)
			if !ok {
				candidate.user = s.user
				candidate.pubKeyData = pubKeyData
				candidate.perms, candidate.result = config.PublicKeyCallback(s, pubKey)
				if candidate.result == nil && candidate.perms != nil && candidate.perms.CriticalOptions != nil && candidate.perms.CriticalOptions[sourceAddressCriticalOption] != "" {
					candidate.result = checkSourceAddress(
						s.RemoteAddr(),
						candidate.perms.CriticalOptions[sourceAddressCriticalOption])
				}
				cache.add(candidate)
			}

			if isQuery {
				// The client can query if the given public key
				// would be okay.

				if len(payload) > 0 {
					return nil, parseError(msgUserAuthRequest)
				}

				if candidate.result == nil {
					okMsg := userAuthPubKeyOkMsg{
						Algo:   algo,
						PubKey: pubKeyData,
					}
					if err = s.transport.writePacket(Marshal(&okMsg)); err != nil {
						return nil, err
					}
					continue userAuthLoop
				}
				authErr = candidate.result
			} else {
				sig, payload, ok := parseSignature(payload)
				if !ok || len(payload) > 0 {
					return nil, parseError(msgUserAuthRequest)
				}

				// Ensure the public key algo and signature algo
				// are supported.  Compare the private key
				// algorithm name that corresponds to algo with
				// sig.Format.  This is usually the same, but
				// for certs, the names differ.
				if !contains(supportedPubKeyAuthAlgos, sig.Format) {
					authErr = fmt.Errorf("ssh: algorithm %q not accepted", sig.Format)
					break
				}
				if underlyingAlgo(algo) != sig.Format {
					authErr = fmt.Errorf("ssh: signature %q not compatible with selected algorithm %q", sig.Format, algo)
					break
				}

				signedData := buildDataSignedForAuth(sessionID, userAuthReq, algo, pubKeyData)

				if err := pubKey.Verify(signedData, sig); err != nil {
					return nil, err
				}

				authErr = candidate.result
				perms = candidate.perms
			}
		case "gssapi-with-mic":
			if config.GSSAPIWithMICConfig == nil {
				authErr = errors.New("ssh: gssapi-with-mic auth not configured")
				break
			}
			gssapiConfig := config.GSSAPIWithMICConfig
			userAuthRequestGSSAPI, err := parseGSSAPIPayload(userAuthReq.Payload)
			if err != nil {
				return nil, parseError(msgUserAuthRequest)
			}
			// OpenSSH supports Kerberos V5 mechanism only for GSS-API authentication.
			if userAuthRequestGSSAPI.N == 0 {
				authErr = fmt.Errorf("ssh: Mechanism negotiation is not supported")
				break
			}
			var i uint32
			present := false
			for i = 0; i < userAuthRequestGSSAPI.N; i++ {
				if userAuthRequestGSSAPI.OIDS[i].Equal(krb5Mesh) {
					present = true
					break
				}
			}
			if !present {
				authErr = fmt.Errorf("ssh: GSSAPI authentication must use the Kerberos V5 mechanism")
				break
			}
			// Initial server response, see RFC 4462 section 3.3.
			if err := s.transport.writePacket(Marshal(&userAuthGSSAPIResponse{
				SupportMech: krb5OID,
			})); err != nil {
				return nil, err
			}
			// Exchange token, see RFC 4462 section 3.4.
			packet, err := s.transport.readPacket()
			if err != nil {
				return nil, err
			}
			userAuthGSSAPITokenReq := &userAuthGSSAPIToken{}
			if err := Unmarshal(packet, userAuthGSSAPITokenReq); err != nil {
				return nil, err
			}
			authErr, perms, err = gssExchangeToken(gssapiConfig, userAuthGSSAPITokenReq.Token, s, sessionID,
				userAuthReq)
			if err != nil {
				return nil, err
			}
		default:
			authErr = fmt.Errorf("ssh: unknown method %q", userAuthReq.Method)
		}

		authErrs = append(authErrs, authErr)

		if config.AuthLogCallback != nil {
			config.AuthLogCallback(s, userAuthReq.Method, authErr)
		}

		if authErr == nil {
			break userAuthLoop
		}

		authFailures++
		if config.MaxAuthTries > 0 && authFailures >= config.MaxAuthTries {
			// If we have hit the max attempts, don't bother sending the
			// final SSH_MSG_USERAUTH_FAILURE message, since there are
			// no more authentication methods which can be attempted,
			// and this message may cause the client to re-attempt
			// authentication while we send the disconnect message.
			// Continue, and trigger the disconnect at the start of
			// the loop.
			//
			// The SSH specification is somewhat confusing about this,
			// RFC 4252 Section 5.1 requires each authentication failure
			// be responded to with a respective SSH_MSG_USERAUTH_FAILURE
			// message, but Section 4 says the server should disconnect
			// after some number of attempts, but it isn't explicit which
			// message should take precedence (i.e. should there be a failure
			// message than a disconnect message, or if we are going to
			// disconnect, should we only send that message.)
			//
			// Either way, OpenSSH disconnects immediately after the last
			// failed authnetication attempt, and given they are typically
			// considered the golden implementation it seems reasonable
			// to match that behavior.
			continue
		}

		var failureMsg userAuthFailureMsg
		if config.PasswordCallback != nil {
			failureMsg.Methods = append(failureMsg.Methods, "password")
		}
		if config.PublicKeyCallback != nil {
			failureMsg.Methods = append(failureMsg.Methods, "publickey")
		}
		if config.KeyboardInteractiveCallback != nil {
			failureMsg.Methods = append(failureMsg.Methods, "keyboard-interactive")
		}
		if config.GSSAPIWithMICConfig != nil && config.GSSAPIWithMICConfig.Server != nil &&
			config.GSSAPIWithMICConfig.AllowLogin != nil {
			failureMsg.Methods = append(failureMsg.Methods, "gssapi-with-mic")
		}

		if len(failureMsg.Methods) == 0 {
			return nil, errors.New("ssh: no authentication methods configured but NoClientAuth is also false")
		}

		if err := s.transport.writePacket(Marshal(&failureMsg)); err != nil {
			return nil, err
		}
	}

	if err := s.transport.writePacket([]byte{msgUserAuthSuccess}); err != nil {
		return nil, err
	}
	return perms, nil
}

// sshClientKeyboardInteractive implements a ClientKeyboardInteractive by
// asking the client on the other side of a ServerConn.
type sshClientKeyboardInteractive struct {
	*connection
}

func (c *sshClientKeyboardInteractive) Challenge(name, instruction string, questions []string, echos []bool) (answers []string, err error) {
	if len(questions) != len(echos) {
		return nil, errors.New("ssh: echos and questions must have equal length")
	}

	var prompts []byte
	for i := range questions {
		prompts = appendString(prompts, questions[i])
		prompts = appendBool(prompts, echos[i])
	}

	if err := c.transport.writePacket(Marshal(&userAuthInfoRequestMsg{
		Name:        name,
		Instruction: instruction,
		NumPrompts:  uint32(len(questions)),
		Prompts:     prompts,
	})); err != nil {
		return nil, err
	}

	packet, err := c.transport.readPacket()
	if err != nil {
		return nil, err
	}
	if packet[0] != msgUserAuthInfoResponse {
		return nil, unexpectedMessageError(msgUserAuthInfoResponse, packet[0])
	}
	packet = packet[1:]

	n, packet, ok := parseUint32(packet)
	if !ok || int(n) != len(questions) {
		return nil, parseError(msgUserAuthInfoResponse)
	}

	for i := uint32(0); i < n; i++ {
		ans, rest, ok := parseString(packet)
		if !ok {
			return nil, parseError(msgUserAuthInfoResponse)
		}

		answers = append(answers, string(ans))
		packet = rest
	}
	if len(packet) != 0 {
		return nil, errors.New("ssh: junk at end of message")
	}

	return answers, nil
}
  07070100000D25000081A4000000000000000000000001645E367C00003C4D000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/session.go // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package ssh

// Session implements an interactive session described in
// "RFC 4254, section 6".

import (
	"bytes"
	"encoding/binary"
	"errors"
	"fmt"
	"io"
	"sync"
)

type Signal string

// POSIX signals as listed in RFC 4254 Section 6.10.
const (
	SIGABRT Signal = "ABRT"
	SIGALRM Signal = "ALRM"
	SIGFPE  Signal = "FPE"
	SIGHUP  Signal = "HUP"
	SIGILL  Signal = "ILL"
	SIGINT  Signal = "INT"
	SIGKILL Signal = "KILL"
	SIGPIPE Signal = "PIPE"
	SIGQUIT Signal = "QUIT"
	SIGSEGV Signal = "SEGV"
	SIGTERM Signal = "TERM"
	SIGUSR1 Signal = "USR1"
	SIGUSR2 Signal = "USR2"
)

var signals = map[Signal]int{
	SIGABRT: 6,
	SIGALRM: 14,
	SIGFPE:  8,
	SIGHUP:  1,
	SIGILL:  4,
	SIGINT:  2,
	SIGKILL: 9,
	SIGPIPE: 13,
	SIGQUIT: 3,
	SIGSEGV: 11,
	SIGTERM: 15,
}

type TerminalModes map[uint8]uint32

// POSIX terminal mode flags as listed in RFC 4254 Section 8.
const (
	tty_OP_END    = 0
	VINTR         = 1
	VQUIT         = 2
	VERASE        = 3
	VKILL         = 4
	VEOF          = 5
	VEOL          = 6
	VEOL2         = 7
	VSTART        = 8
	VSTOP         = 9
	VSUSP         = 10
	VDSUSP        = 11
	VREPRINT      = 12
	VWERASE       = 13
	VLNEXT        = 14
	VFLUSH        = 15
	VSWTCH        = 16
	VSTATUS       = 17
	VDISCARD      = 18
	IGNPAR        = 30
	PARMRK        = 31
	INPCK         = 32
	ISTRIP        = 33
	INLCR         = 34
	IGNCR         = 35
	ICRNL         = 36
	IUCLC         = 37
	IXON          = 38
	IXANY         = 39
	IXOFF         = 40
	IMAXBEL       = 41
	IUTF8         = 42 // RFC 8160
	ISIG          = 50
	ICANON        = 51
	XCASE         = 52
	ECHO          = 53
	ECHOE         = 54
	ECHOK         = 55
	ECHONL        = 56
	NOFLSH        = 57
	TOSTOP        = 58
	IEXTEN        = 59
	ECHOCTL       = 60
	ECHOKE        = 61
	PENDIN        = 62
	OPOST         = 70
	OLCUC         = 71
	ONLCR         = 72
	OCRNL         = 73
	ONOCR         = 74
	ONLRET        = 75
	CS7           = 90
	CS8           = 91
	PARENB        = 92
	PARODD        = 93
	TTY_OP_ISPEED = 128
	TTY_OP_OSPEED = 129
)

// A Session represents a connection to a remote command or shell.
type Session struct {
	// Stdin specifies the remote process's standard input.
	// If Stdin is nil, the remote process reads from an empty
	// bytes.Buffer.
	Stdin io.Reader

	// Stdout and Stderr specify the remote process's standard
	// output and error.
	//
	// If either is nil, Run connects the corresponding file
	// descriptor to an instance of io.Discard. There is a
	// fixed amount of buffering that is shared for the two streams.
	// If either blocks it may eventually cause the remote
	// command to block.
	Stdout io.Writer
	Stderr io.Writer

	ch        Channel // the channel backing this session
	started   bool    // true once Start, Run or Shell is invoked.
	copyFuncs []func() error
	errors    chan error // one send per copyFunc

	// true if pipe method is active
	stdinpipe, stdoutpipe, stderrpipe bool

	// stdinPipeWriter is non-nil if StdinPipe has not been called
	// and Stdin was specified by the user; it is the write end of
	// a pipe connecting Session.Stdin to the stdin channel.
	stdinPipeWriter io.WriteCloser

	exitStatus chan error
}

// SendRequest sends an out-of-band channel request on the SSH channel
// underlying the session.
func (s *Session) SendRequest(name string, wantReply bool, payload []byte) (bool, error) {
	return s.ch.SendRequest(name, wantReply, payload)
}

func (s *Session) Close() error {
	return s.ch.Close()
}

// RFC 4254 Section 6.4.
type setenvRequest struct {
	Name  string
	Value string
}

// Setenv sets an environment variable that will be applied to any
// command executed by Shell or Run.
func (s *Session) Setenv(name, value string) error {
	msg := setenvRequest{
		Name:  name,
		Value: value,
	}
	ok, err := s.ch.SendRequest("env", true, Marshal(&msg))
	if err == nil && !ok {
		err = errors.New("ssh: setenv failed")
	}
	return err
}

// RFC 4254 Section 6.2.
type ptyRequestMsg struct {
	Term     string
	Columns  uint32
	Rows     uint32
	Width    uint32
	Height   uint32
	Modelist string
}

// RequestPty requests the association of a pty with the session on the remote host.
func (s *Session) RequestPty(term string, h, w int, termmodes TerminalModes) error {
	var tm []byte
	for k, v := range termmodes {
		kv := struct {
			Key byte
			Val uint32
		}{k, v}

		tm = append(tm, Marshal(&kv)...)
	}
	tm = append(tm, tty_OP_END)
	req := ptyRequestMsg{
		Term:     term,
		Columns:  uint32(w),
		Rows:     uint32(h),
		Width:    uint32(w * 8),
		Height:   uint32(h * 8),
		Modelist: string(tm),
	}
	ok, err := s.ch.SendRequest("pty-req", true, Marshal(&req))
	if err == nil && !ok {
		err = errors.New("ssh: pty-req failed")
	}
	return err
}

// RFC 4254 Section 6.5.
type subsystemRequestMsg struct {
	Subsystem string
}

// RequestSubsystem requests the association of a subsystem with the session on the remote host.
// A subsystem is a predefined command that runs in the background when the ssh session is initiated
func (s *Session) RequestSubsystem(subsystem string) error {
	msg := subsystemRequestMsg{
		Subsystem: subsystem,
	}
	ok, err := s.ch.SendRequest("subsystem", true, Marshal(&msg))
	if err == nil && !ok {
		err = errors.New("ssh: subsystem request failed")
	}
	return err
}

// RFC 4254 Section 6.7.
type ptyWindowChangeMsg struct {
	Columns uint32
	Rows    uint32
	Width   uint32
	Height  uint32
}

// WindowChange informs the remote host about a terminal window dimension change to h rows and w columns.
func (s *Session) WindowChange(h, w int) error {
	req := ptyWindowChangeMsg{
		Columns: uint32(w),
		Rows:    uint32(h),
		Width:   uint32(w * 8),
		Height:  uint32(h * 8),
	}
	_, err := s.ch.SendRequest("window-change", false, Marshal(&req))
	return err
}

// RFC 4254 Section 6.9.
type signalMsg struct {
	Signal string
}

// Signal sends the given signal to the remote process.
// sig is one of the SIG* constants.
func (s *Session) Signal(sig Signal) error {
	msg := signalMsg{
		Signal: string(sig),
	}

	_, err := s.ch.SendRequest("signal", false, Marshal(&msg))
	return err
}

// RFC 4254 Section 6.5.
type execMsg struct {
	Command string
}

// Start runs cmd on the remote host. Typically, the remote
// server passes cmd to the shell for interpretation.
// A Session only accepts one call to Run, Start or Shell.
func (s *Session) Start(cmd string) error {
	if s.started {
		return errors.New("ssh: session already started")
	}
	req := execMsg{
		Command: cmd,
	}

	ok, err := s.ch.SendRequest("exec", true, Marshal(&req))
	if err == nil && !ok {
		err = fmt.Errorf("ssh: command %v failed", cmd)
	}
	if err != nil {
		return err
	}
	return s.start()
}

// Run runs cmd on the remote host. Typically, the remote
// server passes cmd to the shell for interpretation.
// A Session only accepts one call to Run, Start, Shell, Output,
// or CombinedOutput.
//
// The returned error is nil if the command runs, has no problems
// copying stdin, stdout, and stderr, and exits with a zero exit
// status.
//
// If the remote server does not send an exit status, an error of type
// *ExitMissingError is returned. If the command completes
// unsuccessfully or is interrupted by a signal, the error is of type
// *ExitError. Other error types may be returned for I/O problems.
func (s *Session) Run(cmd string) error {
	err := s.Start(cmd)
	if err != nil {
		return err
	}
	return s.Wait()
}

// Output runs cmd on the remote host and returns its standard output.
func (s *Session) Output(cmd string) ([]byte, error) {
	if s.Stdout != nil {
		return nil, errors.New("ssh: Stdout already set")
	}
	var b bytes.Buffer
	s.Stdout = &b
	err := s.Run(cmd)
	return b.Bytes(), err
}

type singleWriter struct {
	b  bytes.Buffer
	mu sync.Mutex
}

func (w *singleWriter) Write(p []byte) (int, error) {
	w.mu.Lock()
	defer w.mu.Unlock()
	return w.b.Write(p)
}

// CombinedOutput runs cmd on the remote host and returns its combined
// standard output and standard error.
func (s *Session) CombinedOutput(cmd string) ([]byte, error) {
	if s.Stdout != nil {
		return nil, errors.New("ssh: Stdout already set")
	}
	if s.Stderr != nil {
		return nil, errors.New("ssh: Stderr already set")
	}
	var b singleWriter
	s.Stdout = &b
	s.Stderr = &b
	err := s.Run(cmd)
	return b.b.Bytes(), err
}

// Shell starts a login shell on the remote host. A Session only
// accepts one call to Run, Start, Shell, Output, or CombinedOutput.
func (s *Session) Shell() error {
	if s.started {
		return errors.New("ssh: session already started")
	}

	ok, err := s.ch.SendRequest("shell", true, nil)
	if err == nil && !ok {
		return errors.New("ssh: could not start shell")
	}
	if err != nil {
		return err
	}
	return s.start()
}

func (s *Session) start() error {
	s.started = true

	type F func(*Session)
	for _, setupFd := range []F{(*Session).stdin, (*Session).stdout, (*Session).stderr} {
		setupFd(s)
	}

	s.errors = make(chan error, len(s.copyFuncs))
	for _, fn := range s.copyFuncs {
		go func(fn func() error) {
			s.errors <- fn()
		}(fn)
	}
	return nil
}

// Wait waits for the remote command to exit.
//
// The returned error is nil if the command runs, has no problems
// copying stdin, stdout, and stderr, and exits with a zero exit
// status.
//
// If the remote server does not send an exit status, an error of type
// *ExitMissingError is returned. If the command completes
// unsuccessfully or is interrupted by a signal, the error is of type
// *ExitError. Other error types may be returned for I/O problems.
func (s *Session) Wait() error {
	if !s.started {
		return errors.New("ssh: session not started")
	}
	waitErr := <-s.exitStatus

	if s.stdinPipeWriter != nil {
		s.stdinPipeWriter.Close()
	}
	var copyError error
	for range s.copyFuncs {
		if err := <-s.errors; err != nil && copyError == nil {
			copyError = err
		}
	}
	if waitErr != nil {
		return waitErr
	}
	return copyError
}

func (s *Session) wait(reqs <-chan *Request) error {
	wm := Waitmsg{status: -1}
	// Wait for msg channel to be closed before returning.
	for msg := range reqs {
		switch msg.Type {
		case "exit-status":
			wm.status = int(binary.BigEndian.Uint32(msg.Payload))
		case "exit-signal":
			var sigval struct {
				Signal     string
				CoreDumped bool
				Error      string
				Lang       string
			}
			if err := Unmarshal(msg.Payload, &sigval); err != nil {
				return err
			}

			// Must sanitize strings?
			wm.signal = sigval.Signal
			wm.msg = sigval.Error
			wm.lang = sigval.Lang
		default:
			// This handles keepalives and matches
			// OpenSSH's behaviour.
			if msg.WantReply {
				msg.Reply(false, nil)
			}
		}
	}
	if wm.status == 0 {
		return nil
	}
	if wm.status == -1 {
		// exit-status was never sent from server
		if wm.signal == "" {
			// signal was not sent either.  RFC 4254
			// section 6.10 recommends against this
			// behavior, but it is allowed, so we let
			// clients handle it.
			return &ExitMissingError{}
		}
		wm.status = 128
		if _, ok := signals[Signal(wm.signal)]; ok {
			wm.status += signals[Signal(wm.signal)]
		}
	}

	return &ExitError{wm}
}

// ExitMissingError is returned if a session is torn down cleanly, but
// the server sends no confirmation of the exit status.
type ExitMissingError struct{}

func (e *ExitMissingError) Error() string {
	return "wait: remote command exited without exit status or exit signal"
}

func (s *Session) stdin() {
	if s.stdinpipe {
		return
	}
	var stdin io.Reader
	if s.Stdin == nil {
		stdin = new(bytes.Buffer)
	} else {
		r, w := io.Pipe()
		go func() {
			_, err := io.Copy(w, s.Stdin)
			w.CloseWithError(err)
		}()
		stdin, s.stdinPipeWriter = r, w
	}
	s.copyFuncs = append(s.copyFuncs, func() error {
		_, err := io.Copy(s.ch, stdin)
		if err1 := s.ch.CloseWrite(); err == nil && err1 != io.EOF {
			err = err1
		}
		return err
	})
}

func (s *Session) stdout() {
	if s.stdoutpipe {
		return
	}
	if s.Stdout == nil {
		s.Stdout = io.Discard
	}
	s.copyFuncs = append(s.copyFuncs, func() error {
		_, err := io.Copy(s.Stdout, s.ch)
		return err
	})
}

func (s *Session) stderr() {
	if s.stderrpipe {
		return
	}
	if s.Stderr == nil {
		s.Stderr = io.Discard
	}
	s.copyFuncs = append(s.copyFuncs, func() error {
		_, err := io.Copy(s.Stderr, s.ch.Stderr())
		return err
	})
}

// sessionStdin reroutes Close to CloseWrite.
type sessionStdin struct {
	io.Writer
	ch Channel
}

func (s *sessionStdin) Close() error {
	return s.ch.CloseWrite()
}

// StdinPipe returns a pipe that will be connected to the
// remote command's standard input when the command starts.
func (s *Session) StdinPipe() (io.WriteCloser, error) {
	if s.Stdin != nil {
		return nil, errors.New("ssh: Stdin already set")
	}
	if s.started {
		return nil, errors.New("ssh: StdinPipe after process started")
	}
	s.stdinpipe = true
	return &sessionStdin{s.ch, s.ch}, nil
}

// StdoutPipe returns a pipe that will be connected to the
// remote command's standard output when the command starts.
// There is a fixed amount of buffering that is shared between
// stdout and stderr streams. If the StdoutPipe reader is
// not serviced fast enough it may eventually cause the
// remote command to block.
func (s *Session) StdoutPipe() (io.Reader, error) {
	if s.Stdout != nil {
		return nil, errors.New("ssh: Stdout already set")
	}
	if s.started {
		return nil, errors.New("ssh: StdoutPipe after process started")
	}
	s.stdoutpipe = true
	return s.ch, nil
}

// StderrPipe returns a pipe that will be connected to the
// remote command's standard error when the command starts.
// There is a fixed amount of buffering that is shared between
// stdout and stderr streams. If the StderrPipe reader is
// not serviced fast enough it may eventually cause the
// remote command to block.
func (s *Session) StderrPipe() (io.Reader, error) {
	if s.Stderr != nil {
		return nil, errors.New("ssh: Stderr already set")
	}
	if s.started {
		return nil, errors.New("ssh: StderrPipe after process started")
	}
	s.stderrpipe = true
	return s.ch.Stderr(), nil
}

// newSession returns a new interactive session on the remote host.
func newSession(ch Channel, reqs <-chan *Request) (*Session, error) {
	s := &Session{
		ch: ch,
	}
	s.exitStatus = make(chan error, 1)
	go func() {
		s.exitStatus <- s.wait(reqs)
	}()

	return s, nil
}

// An ExitError reports unsuccessful completion of a remote command.
type ExitError struct {
	Waitmsg
}

func (e *ExitError) Error() string {
	return e.Waitmsg.String()
}

// Waitmsg stores the information about an exited remote command
// as reported by Wait.
type Waitmsg struct {
	status int
	signal string
	msg    string
	lang   string
}

// ExitStatus returns the exit status of the remote command.
func (w Waitmsg) ExitStatus() int {
	return w.status
}

// Signal returns the exit signal of the remote command if
// it was terminated violently.
func (w Waitmsg) Signal() string {
	return w.signal
}

// Msg returns the exit message given by the remote command
func (w Waitmsg) Msg() string {
	return w.msg
}

// Lang returns the language tag. See RFC 3066
func (w Waitmsg) Lang() string {
	return w.lang
}

func (w Waitmsg) String() string {
	str := fmt.Sprintf("Process exited with status %v", w.status)
	if w.signal != "" {
		str += fmt.Sprintf(" from signal %v", w.signal)
	}
	if w.msg != "" {
		str += fmt.Sprintf(". Reason was: %v", w.msg)
	}
	return str
}
   07070100000D26000081A4000000000000000000000001645E367C000015C2000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/ssh_gss.go // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package ssh

import (
	"encoding/asn1"
	"errors"
)

var krb5OID []byte

func init() {
	krb5OID, _ = asn1.Marshal(krb5Mesh)
}

// GSSAPIClient provides the API to plug-in GSSAPI authentication for client logins.
type GSSAPIClient interface {
	// InitSecContext initiates the establishment of a security context for GSS-API between the
	// ssh client and ssh server. Initially the token parameter should be specified as nil.
	// The routine may return a outputToken which should be transferred to
	// the ssh server, where the ssh server will present it to
	// AcceptSecContext. If no token need be sent, InitSecContext will indicate this by setting
	// needContinue to false. To complete the context
	// establishment, one or more reply tokens may be required from the ssh
	// server;if so, InitSecContext will return a needContinue which is true.
	// In this case, InitSecContext should be called again when the
	// reply token is received from the ssh server, passing the reply
	// token to InitSecContext via the token parameters.
	// See RFC 2743 section 2.2.1 and RFC 4462 section 3.4.
	InitSecContext(target string, token []byte, isGSSDelegCreds bool) (outputToken []byte, needContinue bool, err error)
	// GetMIC generates a cryptographic MIC for the SSH2 message, and places
	// the MIC in a token for transfer to the ssh server.
	// The contents of the MIC field are obtained by calling GSS_GetMIC()
	// over the following, using the GSS-API context that was just
	// established:
	//  string    session identifier
	//  byte      SSH_MSG_USERAUTH_REQUEST
	//  string    user name
	//  string    service
	//  string    "gssapi-with-mic"
	// See RFC 2743 section 2.3.1 and RFC 4462 3.5.
	GetMIC(micFiled []byte) ([]byte, error)
	// Whenever possible, it should be possible for
	// DeleteSecContext() calls to be successfully processed even
	// if other calls cannot succeed, thereby enabling context-related
	// resources to be released.
	// In addition to deleting established security contexts,
	// gss_delete_sec_context must also be able to delete "half-built"
	// security contexts resulting from an incomplete sequence of
	// InitSecContext()/AcceptSecContext() calls.
	// See RFC 2743 section 2.2.3.
	DeleteSecContext() error
}

// GSSAPIServer provides the API to plug in GSSAPI authentication for server logins.
type GSSAPIServer interface {
	// AcceptSecContext allows a remotely initiated security context between the application
	// and a remote peer to be established by the ssh client. The routine may return a
	// outputToken which should be transferred to the ssh client,
	// where the ssh client will present it to InitSecContext.
	// If no token need be sent, AcceptSecContext will indicate this
	// by setting the needContinue to false. To
	// complete the context establishment, one or more reply tokens may be
	// required from the ssh client. if so, AcceptSecContext
	// will return a needContinue which is true, in which case it
	// should be called again when the reply token is received from the ssh
	// client, passing the token to AcceptSecContext via the
	// token parameters.
	// The srcName return value is the authenticated username.
	// See RFC 2743 section 2.2.2 and RFC 4462 section 3.4.
	AcceptSecContext(token []byte) (outputToken []byte, srcName string, needContinue bool, err error)
	// VerifyMIC verifies that a cryptographic MIC, contained in the token parameter,
	// fits the supplied message is received from the ssh client.
	// See RFC 2743 section 2.3.2.
	VerifyMIC(micField []byte, micToken []byte) error
	// Whenever possible, it should be possible for
	// DeleteSecContext() calls to be successfully processed even
	// if other calls cannot succeed, thereby enabling context-related
	// resources to be released.
	// In addition to deleting established security contexts,
	// gss_delete_sec_context must also be able to delete "half-built"
	// security contexts resulting from an incomplete sequence of
	// InitSecContext()/AcceptSecContext() calls.
	// See RFC 2743 section 2.2.3.
	DeleteSecContext() error
}

var (
	// OpenSSH supports Kerberos V5 mechanism only for GSS-API authentication,
	// so we also support the krb5 mechanism only.
	// See RFC 1964 section 1.
	krb5Mesh = asn1.ObjectIdentifier{1, 2, 840, 113554, 1, 2, 2}
)

// The GSS-API authentication method is initiated when the client sends an SSH_MSG_USERAUTH_REQUEST
// See RFC 4462 section 3.2.
type userAuthRequestGSSAPI struct {
	N    uint32
	OIDS []asn1.ObjectIdentifier
}

func parseGSSAPIPayload(payload []byte) (*userAuthRequestGSSAPI, error) {
	n, rest, ok := parseUint32(payload)
	if !ok {
		return nil, errors.New("parse uint32 failed")
	}
	s := &userAuthRequestGSSAPI{
		N:    n,
		OIDS: make([]asn1.ObjectIdentifier, n),
	}
	for i := 0; i < int(n); i++ {
		var (
			desiredMech []byte
			err         error
		)
		desiredMech, rest, ok = parseString(rest)
		if !ok {
			return nil, errors.New("parse string failed")
		}
		if rest, err = asn1.Unmarshal(desiredMech, &s.OIDS[i]); err != nil {
			return nil, err
		}

	}
	return s, nil
}

// See RFC 4462 section 3.6.
func buildMIC(sessionID string, username string, service string, authMethod string) []byte {
	out := make([]byte, 0, 0)
	out = appendString(out, sessionID)
	out = append(out, msgUserAuthRequest)
	out = appendString(out, username)
	out = appendString(out, service)
	out = appendString(out, authMethod)
	return out
}
  07070100000D27000081A4000000000000000000000001645E367C00000B7B000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/streamlocal.go package ssh

import (
	"errors"
	"io"
	"net"
)

// streamLocalChannelOpenDirectMsg is a struct used for SSH_MSG_CHANNEL_OPEN message
// with "direct-streamlocal@openssh.com" string.
//
// See openssh-portable/PROTOCOL, section 2.4. connection: Unix domain socket forwarding
// https://github.com/openssh/openssh-portable/blob/master/PROTOCOL#L235
type streamLocalChannelOpenDirectMsg struct {
	socketPath string
	reserved0  string
	reserved1  uint32
}

// forwardedStreamLocalPayload is a struct used for SSH_MSG_CHANNEL_OPEN message
// with "forwarded-streamlocal@openssh.com" string.
type forwardedStreamLocalPayload struct {
	SocketPath string
	Reserved0  string
}

// streamLocalChannelForwardMsg is a struct used for SSH2_MSG_GLOBAL_REQUEST message
// with "streamlocal-forward@openssh.com"/"cancel-streamlocal-forward@openssh.com" string.
type streamLocalChannelForwardMsg struct {
	socketPath string
}

// ListenUnix is similar to ListenTCP but uses a Unix domain socket.
func (c *Client) ListenUnix(socketPath string) (net.Listener, error) {
	c.handleForwardsOnce.Do(c.handleForwards)
	m := streamLocalChannelForwardMsg{
		socketPath,
	}
	// send message
	ok, _, err := c.SendRequest("streamlocal-forward@openssh.com", true, Marshal(&m))
	if err != nil {
		return nil, err
	}
	if !ok {
		return nil, errors.New("ssh: streamlocal-forward@openssh.com request denied by peer")
	}
	ch := c.forwards.add(&net.UnixAddr{Name: socketPath, Net: "unix"})

	return &unixListener{socketPath, c, ch}, nil
}

func (c *Client) dialStreamLocal(socketPath string) (Channel, error) {
	msg := streamLocalChannelOpenDirectMsg{
		socketPath: socketPath,
	}
	ch, in, err := c.OpenChannel("direct-streamlocal@openssh.com", Marshal(&msg))
	if err != nil {
		return nil, err
	}
	go DiscardRequests(in)
	return ch, err
}

type unixListener struct {
	socketPath string

	conn *Client
	in   <-chan forward
}

// Accept waits for and returns the next connection to the listener.
func (l *unixListener) Accept() (net.Conn, error) {
	s, ok := <-l.in
	if !ok {
		return nil, io.EOF
	}
	ch, incoming, err := s.newCh.Accept()
	if err != nil {
		return nil, err
	}
	go DiscardRequests(incoming)

	return &chanConn{
		Channel: ch,
		laddr: &net.UnixAddr{
			Name: l.socketPath,
			Net:  "unix",
		},
		raddr: &net.UnixAddr{
			Name: "@",
			Net:  "unix",
		},
	}, nil
}

// Close closes the listener.
func (l *unixListener) Close() error {
	// this also closes the listener.
	l.conn.forwards.remove(&net.UnixAddr{Name: l.socketPath, Net: "unix"})
	m := streamLocalChannelForwardMsg{
		l.socketPath,
	}
	ok, _, err := l.conn.SendRequest("cancel-streamlocal-forward@openssh.com", true, Marshal(&m))
	if err == nil && !ok {
		err = errors.New("ssh: cancel-streamlocal-forward@openssh.com failed")
	}
	return err
}

// Addr returns the listener's network address.
func (l *unixListener) Addr() net.Addr {
	return &net.UnixAddr{
		Name: l.socketPath,
		Net:  "unix",
	}
}
 07070100000D28000081A4000000000000000000000001645E367C00003017000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/tcpip.go   // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package ssh

import (
	"errors"
	"fmt"
	"io"
	"math/rand"
	"net"
	"strconv"
	"strings"
	"sync"
	"time"
)

// Listen requests the remote peer open a listening socket on
// addr. Incoming connections will be available by calling Accept on
// the returned net.Listener. The listener must be serviced, or the
// SSH connection may hang.
// N must be "tcp", "tcp4", "tcp6", or "unix".
func (c *Client) Listen(n, addr string) (net.Listener, error) {
	switch n {
	case "tcp", "tcp4", "tcp6":
		laddr, err := net.ResolveTCPAddr(n, addr)
		if err != nil {
			return nil, err
		}
		return c.ListenTCP(laddr)
	case "unix":
		return c.ListenUnix(addr)
	default:
		return nil, fmt.Errorf("ssh: unsupported protocol: %s", n)
	}
}

// Automatic port allocation is broken with OpenSSH before 6.0. See
// also https://bugzilla.mindrot.org/show_bug.cgi?id=2017.  In
// particular, OpenSSH 5.9 sends a channelOpenMsg with port number 0,
// rather than the actual port number. This means you can never open
// two different listeners with auto allocated ports. We work around
// this by trying explicit ports until we succeed.

const openSSHPrefix = "OpenSSH_"

var portRandomizer = rand.New(rand.NewSource(time.Now().UnixNano()))

// isBrokenOpenSSHVersion returns true if the given version string
// specifies a version of OpenSSH that is known to have a bug in port
// forwarding.
func isBrokenOpenSSHVersion(versionStr string) bool {
	i := strings.Index(versionStr, openSSHPrefix)
	if i < 0 {
		return false
	}
	i += len(openSSHPrefix)
	j := i
	for ; j < len(versionStr); j++ {
		if versionStr[j] < '0' || versionStr[j] > '9' {
			break
		}
	}
	version, _ := strconv.Atoi(versionStr[i:j])
	return version < 6
}

// autoPortListenWorkaround simulates automatic port allocation by
// trying random ports repeatedly.
func (c *Client) autoPortListenWorkaround(laddr *net.TCPAddr) (net.Listener, error) {
	var sshListener net.Listener
	var err error
	const tries = 10
	for i := 0; i < tries; i++ {
		addr := *laddr
		addr.Port = 1024 + portRandomizer.Intn(60000)
		sshListener, err = c.ListenTCP(&addr)
		if err == nil {
			laddr.Port = addr.Port
			return sshListener, err
		}
	}
	return nil, fmt.Errorf("ssh: listen on random port failed after %d tries: %v", tries, err)
}

// RFC 4254 7.1
type channelForwardMsg struct {
	addr  string
	rport uint32
}

// handleForwards starts goroutines handling forwarded connections.
// It's called on first use by (*Client).ListenTCP to not launch
// goroutines until needed.
func (c *Client) handleForwards() {
	go c.forwards.handleChannels(c.HandleChannelOpen("forwarded-tcpip"))
	go c.forwards.handleChannels(c.HandleChannelOpen("forwarded-streamlocal@openssh.com"))
}

// ListenTCP requests the remote peer open a listening socket
// on laddr. Incoming connections will be available by calling
// Accept on the returned net.Listener.
func (c *Client) ListenTCP(laddr *net.TCPAddr) (net.Listener, error) {
	c.handleForwardsOnce.Do(c.handleForwards)
	if laddr.Port == 0 && isBrokenOpenSSHVersion(string(c.ServerVersion())) {
		return c.autoPortListenWorkaround(laddr)
	}

	m := channelForwardMsg{
		laddr.IP.String(),
		uint32(laddr.Port),
	}
	// send message
	ok, resp, err := c.SendRequest("tcpip-forward", true, Marshal(&m))
	if err != nil {
		return nil, err
	}
	if !ok {
		return nil, errors.New("ssh: tcpip-forward request denied by peer")
	}

	// If the original port was 0, then the remote side will
	// supply a real port number in the response.
	if laddr.Port == 0 {
		var p struct {
			Port uint32
		}
		if err := Unmarshal(resp, &p); err != nil {
			return nil, err
		}
		laddr.Port = int(p.Port)
	}

	// Register this forward, using the port number we obtained.
	ch := c.forwards.add(laddr)

	return &tcpListener{laddr, c, ch}, nil
}

// forwardList stores a mapping between remote
// forward requests and the tcpListeners.
type forwardList struct {
	sync.Mutex
	entries []forwardEntry
}

// forwardEntry represents an established mapping of a laddr on a
// remote ssh server to a channel connected to a tcpListener.
type forwardEntry struct {
	laddr net.Addr
	c     chan forward
}

// forward represents an incoming forwarded tcpip connection. The
// arguments to add/remove/lookup should be address as specified in
// the original forward-request.
type forward struct {
	newCh NewChannel // the ssh client channel underlying this forward
	raddr net.Addr   // the raddr of the incoming connection
}

func (l *forwardList) add(addr net.Addr) chan forward {
	l.Lock()
	defer l.Unlock()
	f := forwardEntry{
		laddr: addr,
		c:     make(chan forward, 1),
	}
	l.entries = append(l.entries, f)
	return f.c
}

// See RFC 4254, section 7.2
type forwardedTCPPayload struct {
	Addr       string
	Port       uint32
	OriginAddr string
	OriginPort uint32
}

// parseTCPAddr parses the originating address from the remote into a *net.TCPAddr.
func parseTCPAddr(addr string, port uint32) (*net.TCPAddr, error) {
	if port == 0 || port > 65535 {
		return nil, fmt.Errorf("ssh: port number out of range: %d", port)
	}
	ip := net.ParseIP(string(addr))
	if ip == nil {
		return nil, fmt.Errorf("ssh: cannot parse IP address %q", addr)
	}
	return &net.TCPAddr{IP: ip, Port: int(port)}, nil
}

func (l *forwardList) handleChannels(in <-chan NewChannel) {
	for ch := range in {
		var (
			laddr net.Addr
			raddr net.Addr
			err   error
		)
		switch channelType := ch.ChannelType(); channelType {
		case "forwarded-tcpip":
			var payload forwardedTCPPayload
			if err = Unmarshal(ch.ExtraData(), &payload); err != nil {
				ch.Reject(ConnectionFailed, "could not parse forwarded-tcpip payload: "+err.Error())
				continue
			}

			// RFC 4254 section 7.2 specifies that incoming
			// addresses should list the address, in string
			// format. It is implied that this should be an IP
			// address, as it would be impossible to connect to it
			// otherwise.
			laddr, err = parseTCPAddr(payload.Addr, payload.Port)
			if err != nil {
				ch.Reject(ConnectionFailed, err.Error())
				continue
			}
			raddr, err = parseTCPAddr(payload.OriginAddr, payload.OriginPort)
			if err != nil {
				ch.Reject(ConnectionFailed, err.Error())
				continue
			}

		case "forwarded-streamlocal@openssh.com":
			var payload forwardedStreamLocalPayload
			if err = Unmarshal(ch.ExtraData(), &payload); err != nil {
				ch.Reject(ConnectionFailed, "could not parse forwarded-streamlocal@openssh.com payload: "+err.Error())
				continue
			}
			laddr = &net.UnixAddr{
				Name: payload.SocketPath,
				Net:  "unix",
			}
			raddr = &net.UnixAddr{
				Name: "@",
				Net:  "unix",
			}
		default:
			panic(fmt.Errorf("ssh: unknown channel type %s", channelType))
		}
		if ok := l.forward(laddr, raddr, ch); !ok {
			// Section 7.2, implementations MUST reject spurious incoming
			// connections.
			ch.Reject(Prohibited, "no forward for address")
			continue
		}

	}
}

// remove removes the forward entry, and the channel feeding its
// listener.
func (l *forwardList) remove(addr net.Addr) {
	l.Lock()
	defer l.Unlock()
	for i, f := range l.entries {
		if addr.Network() == f.laddr.Network() && addr.String() == f.laddr.String() {
			l.entries = append(l.entries[:i], l.entries[i+1:]...)
			close(f.c)
			return
		}
	}
}

// closeAll closes and clears all forwards.
func (l *forwardList) closeAll() {
	l.Lock()
	defer l.Unlock()
	for _, f := range l.entries {
		close(f.c)
	}
	l.entries = nil
}

func (l *forwardList) forward(laddr, raddr net.Addr, ch NewChannel) bool {
	l.Lock()
	defer l.Unlock()
	for _, f := range l.entries {
		if laddr.Network() == f.laddr.Network() && laddr.String() == f.laddr.String() {
			f.c <- forward{newCh: ch, raddr: raddr}
			return true
		}
	}
	return false
}

type tcpListener struct {
	laddr *net.TCPAddr

	conn *Client
	in   <-chan forward
}

// Accept waits for and returns the next connection to the listener.
func (l *tcpListener) Accept() (net.Conn, error) {
	s, ok := <-l.in
	if !ok {
		return nil, io.EOF
	}
	ch, incoming, err := s.newCh.Accept()
	if err != nil {
		return nil, err
	}
	go DiscardRequests(incoming)

	return &chanConn{
		Channel: ch,
		laddr:   l.laddr,
		raddr:   s.raddr,
	}, nil
}

// Close closes the listener.
func (l *tcpListener) Close() error {
	m := channelForwardMsg{
		l.laddr.IP.String(),
		uint32(l.laddr.Port),
	}

	// this also closes the listener.
	l.conn.forwards.remove(l.laddr)
	ok, _, err := l.conn.SendRequest("cancel-tcpip-forward", true, Marshal(&m))
	if err == nil && !ok {
		err = errors.New("ssh: cancel-tcpip-forward failed")
	}
	return err
}

// Addr returns the listener's network address.
func (l *tcpListener) Addr() net.Addr {
	return l.laddr
}

// Dial initiates a connection to the addr from the remote host.
// The resulting connection has a zero LocalAddr() and RemoteAddr().
func (c *Client) Dial(n, addr string) (net.Conn, error) {
	var ch Channel
	switch n {
	case "tcp", "tcp4", "tcp6":
		// Parse the address into host and numeric port.
		host, portString, err := net.SplitHostPort(addr)
		if err != nil {
			return nil, err
		}
		port, err := strconv.ParseUint(portString, 10, 16)
		if err != nil {
			return nil, err
		}
		ch, err = c.dial(net.IPv4zero.String(), 0, host, int(port))
		if err != nil {
			return nil, err
		}
		// Use a zero address for local and remote address.
		zeroAddr := &net.TCPAddr{
			IP:   net.IPv4zero,
			Port: 0,
		}
		return &chanConn{
			Channel: ch,
			laddr:   zeroAddr,
			raddr:   zeroAddr,
		}, nil
	case "unix":
		var err error
		ch, err = c.dialStreamLocal(addr)
		if err != nil {
			return nil, err
		}
		return &chanConn{
			Channel: ch,
			laddr: &net.UnixAddr{
				Name: "@",
				Net:  "unix",
			},
			raddr: &net.UnixAddr{
				Name: addr,
				Net:  "unix",
			},
		}, nil
	default:
		return nil, fmt.Errorf("ssh: unsupported protocol: %s", n)
	}
}

// DialTCP connects to the remote address raddr on the network net,
// which must be "tcp", "tcp4", or "tcp6".  If laddr is not nil, it is used
// as the local address for the connection.
func (c *Client) DialTCP(n string, laddr, raddr *net.TCPAddr) (net.Conn, error) {
	if laddr == nil {
		laddr = &net.TCPAddr{
			IP:   net.IPv4zero,
			Port: 0,
		}
	}
	ch, err := c.dial(laddr.IP.String(), laddr.Port, raddr.IP.String(), raddr.Port)
	if err != nil {
		return nil, err
	}
	return &chanConn{
		Channel: ch,
		laddr:   laddr,
		raddr:   raddr,
	}, nil
}

// RFC 4254 7.2
type channelOpenDirectMsg struct {
	raddr string
	rport uint32
	laddr string
	lport uint32
}

func (c *Client) dial(laddr string, lport int, raddr string, rport int) (Channel, error) {
	msg := channelOpenDirectMsg{
		raddr: raddr,
		rport: uint32(rport),
		laddr: laddr,
		lport: uint32(lport),
	}
	ch, in, err := c.OpenChannel("direct-tcpip", Marshal(&msg))
	if err != nil {
		return nil, err
	}
	go DiscardRequests(in)
	return ch, err
}

type tcpChan struct {
	Channel // the backing channel
}

// chanConn fulfills the net.Conn interface without
// the tcpChan having to hold laddr or raddr directly.
type chanConn struct {
	Channel
	laddr, raddr net.Addr
}

// LocalAddr returns the local network address.
func (t *chanConn) LocalAddr() net.Addr {
	return t.laddr
}

// RemoteAddr returns the remote network address.
func (t *chanConn) RemoteAddr() net.Addr {
	return t.raddr
}

// SetDeadline sets the read and write deadlines associated
// with the connection.
func (t *chanConn) SetDeadline(deadline time.Time) error {
	if err := t.SetReadDeadline(deadline); err != nil {
		return err
	}
	return t.SetWriteDeadline(deadline)
}

// SetReadDeadline sets the read deadline.
// A zero value for t means Read will not time out.
// After the deadline, the error from Read will implement net.Error
// with Timeout() == true.
func (t *chanConn) SetReadDeadline(deadline time.Time) error {
	// for compatibility with previous version,
	// the error message contains "tcpChan"
	return errors.New("ssh: tcpChan: deadline not supported")
}

// SetWriteDeadline exists to satisfy the net.Conn interface
// but is not implemented by this type.  It always returns an error.
func (t *chanConn) SetWriteDeadline(deadline time.Time) error {
	return errors.New("ssh: tcpChan: deadline not supported")
}
 07070100000D29000081A4000000000000000000000001645E367C000024CA000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/golang.org/x/crypto/ssh/transport.go   // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package ssh

import (
	"bufio"
	"bytes"
	"errors"
	"io"
	"log"
)

// debugTransport if set, will print packet types as they go over the
// wire. No message decoding is done, to minimize the impact on timing.
const debugTransport = false

const (
	gcm128CipherID = "aes128-gcm@openssh.com"
	gcm256CipherID = "aes256-gcm@openssh.com"
	aes128cbcID    = "aes128-cbc"
	tripledescbcID = "3des-cbc"
)

// packetConn represents a transport that implements packet based
// operations.
type packetConn interface {
	// Encrypt and send a packet of data to the remote peer.
	writePacket(packet []byte) error

	// Read a packet from the connection. The read is blocking,
	// i.e. if error is nil, then the returned byte slice is
	// always non-empty.
	readPacket() ([]byte, error)

	// Close closes the write-side of the connection.
	Close() error
}

// transport is the keyingTransport that implements the SSH packet
// protocol.
type transport struct {
	reader connectionState
	writer connectionState

	bufReader *bufio.Reader
	bufWriter *bufio.Writer
	rand      io.Reader
	isClient  bool
	io.Closer
}

// packetCipher represents a combination of SSH encryption/MAC
// protocol.  A single instance should be used for one direction only.
type packetCipher interface {
	// writeCipherPacket encrypts the packet and writes it to w. The
	// contents of the packet are generally scrambled.
	writeCipherPacket(seqnum uint32, w io.Writer, rand io.Reader, packet []byte) error

	// readCipherPacket reads and decrypts a packet of data. The
	// returned packet may be overwritten by future calls of
	// readPacket.
	readCipherPacket(seqnum uint32, r io.Reader) ([]byte, error)
}

// connectionState represents one side (read or write) of the
// connection. This is necessary because each direction has its own
// keys, and can even have its own algorithms
type connectionState struct {
	packetCipher
	seqNum           uint32
	dir              direction
	pendingKeyChange chan packetCipher
}

// prepareKeyChange sets up key material for a keychange. The key changes in
// both directions are triggered by reading and writing a msgNewKey packet
// respectively.
func (t *transport) prepareKeyChange(algs *algorithms, kexResult *kexResult) error {
	ciph, err := newPacketCipher(t.reader.dir, algs.r, kexResult)
	if err != nil {
		return err
	}
	t.reader.pendingKeyChange <- ciph

	ciph, err = newPacketCipher(t.writer.dir, algs.w, kexResult)
	if err != nil {
		return err
	}
	t.writer.pendingKeyChange <- ciph

	return nil
}

func (t *transport) printPacket(p []byte, write bool) {
	if len(p) == 0 {
		return
	}
	who := "server"
	if t.isClient {
		who = "client"
	}
	what := "read"
	if write {
		what = "write"
	}

	log.Println(what, who, p[0])
}

// Read and decrypt next packet.
func (t *transport) readPacket() (p []byte, err error) {
	for {
		p, err = t.reader.readPacket(t.bufReader)
		if err != nil {
			break
		}
		if len(p) == 0 || (p[0] != msgIgnore && p[0] != msgDebug) {
			break
		}
	}
	if debugTransport {
		t.printPacket(p, false)
	}

	return p, err
}

func (s *connectionState) readPacket(r *bufio.Reader) ([]byte, error) {
	packet, err := s.packetCipher.readCipherPacket(s.seqNum, r)
	s.seqNum++
	if err == nil && len(packet) == 0 {
		err = errors.New("ssh: zero length packet")
	}

	if len(packet) > 0 {
		switch packet[0] {
		case msgNewKeys:
			select {
			case cipher := <-s.pendingKeyChange:
				s.packetCipher = cipher
			default:
				return nil, errors.New("ssh: got bogus newkeys message")
			}

		case msgDisconnect:
			// Transform a disconnect message into an
			// error. Since this is lowest level at which
			// we interpret message types, doing it here
			// ensures that we don't have to handle it
			// elsewhere.
			var msg disconnectMsg
			if err := Unmarshal(packet, &msg); err != nil {
				return nil, err
			}
			return nil, &msg
		}
	}

	// The packet may point to an internal buffer, so copy the
	// packet out here.
	fresh := make([]byte, len(packet))
	copy(fresh, packet)

	return fresh, err
}

func (t *transport) writePacket(packet []byte) error {
	if debugTransport {
		t.printPacket(packet, true)
	}
	return t.writer.writePacket(t.bufWriter, t.rand, packet)
}

func (s *connectionState) writePacket(w *bufio.Writer, rand io.Reader, packet []byte) error {
	changeKeys := len(packet) > 0 && packet[0] == msgNewKeys

	err := s.packetCipher.writeCipherPacket(s.seqNum, w, rand, packet)
	if err != nil {
		return err
	}
	if err = w.Flush(); err != nil {
		return err
	}
	s.seqNum++
	if changeKeys {
		select {
		case cipher := <-s.pendingKeyChange:
			s.packetCipher = cipher
		default:
			panic("ssh: no key material for msgNewKeys")
		}
	}
	return err
}

func newTransport(rwc io.ReadWriteCloser, rand io.Reader, isClient bool) *transport {
	t := &transport{
		bufReader: bufio.NewReader(rwc),
		bufWriter: bufio.NewWriter(rwc),
		rand:      rand,
		reader: connectionState{
			packetCipher:     &streamPacketCipher{cipher: noneCipher{}},
			pendingKeyChange: make(chan packetCipher, 1),
		},
		writer: connectionState{
			packetCipher:     &streamPacketCipher{cipher: noneCipher{}},
			pendingKeyChange: make(chan packetCipher, 1),
		},
		Closer: rwc,
	}
	t.isClient = isClient

	if isClient {
		t.reader.dir = serverKeys
		t.writer.dir = clientKeys
	} else {
		t.reader.dir = clientKeys
		t.writer.dir = serverKeys
	}

	return t
}

type direction struct {
	ivTag     []byte
	keyTag    []byte
	macKeyTag []byte
}

var (
	serverKeys = direction{[]byte{'B'}, []byte{'D'}, []byte{'F'}}
	clientKeys = direction{[]byte{'A'}, []byte{'C'}, []byte{'E'}}
)

// setupKeys sets the cipher and MAC keys from kex.K, kex.H and sessionId, as
// described in RFC 4253, section 6.4. direction should either be serverKeys
// (to setup server->client keys) or clientKeys (for client->server keys).
func newPacketCipher(d direction, algs directionAlgorithms, kex *kexResult) (packetCipher, error) {
	cipherMode := cipherModes[algs.Cipher]

	iv := make([]byte, cipherMode.ivSize)
	key := make([]byte, cipherMode.keySize)

	generateKeyMaterial(iv, d.ivTag, kex)
	generateKeyMaterial(key, d.keyTag, kex)

	var macKey []byte
	if !aeadCiphers[algs.Cipher] {
		macMode := macModes[algs.MAC]
		macKey = make([]byte, macMode.keySize)
		generateKeyMaterial(macKey, d.macKeyTag, kex)
	}

	return cipherModes[algs.Cipher].create(key, iv, macKey, algs)
}

// generateKeyMaterial fills out with key material generated from tag, K, H
// and sessionId, as specified in RFC 4253, section 7.2.
func generateKeyMaterial(out, tag []byte, r *kexResult) {
	var digestsSoFar []byte

	h := r.Hash.New()
	for len(out) > 0 {
		h.Reset()
		h.Write(r.K)
		h.Write(r.H)

		if len(digestsSoFar) == 0 {
			h.Write(tag)
			h.Write(r.SessionID)
		} else {
			h.Write(digestsSoFar)
		}

		digest := h.Sum(nil)
		n := copy(out, digest)
		out = out[n:]
		if len(out) > 0 {
			digestsSoFar = append(digestsSoFar, digest...)
		}
	}
}

const packageVersion = "SSH-2.0-Go"

// Sends and receives a version line.  The versionLine string should
// be US ASCII, start with "SSH-2.0-", and should not include a
// newline. exchangeVersions returns the other side's version line.
func exchangeVersions(rw io.ReadWriter, versionLine []byte) (them []byte, err error) {
	// Contrary to the RFC, we do not ignore lines that don't
	// start with "SSH-2.0-" to make the library usable with
	// nonconforming servers.
	for _, c := range versionLine {
		// The spec disallows non US-ASCII chars, and
		// specifically forbids null chars.
		if c < 32 {
			return nil, errors.New("ssh: junk character in version line")
		}
	}
	if _, err = rw.Write(append(versionLine, '\r', '\n')); err != nil {
		return
	}

	them, err = readVersion(rw)
	return them, err
}

// maxVersionStringBytes is the maximum number of bytes that we'll
// accept as a version string. RFC 4253 section 4.2 limits this at 255
// chars
const maxVersionStringBytes = 255

// Read version string as specified by RFC 4253, section 4.2.
func readVersion(r io.Reader) ([]byte, error) {
	versionString := make([]byte, 0, 64)
	var ok bool
	var buf [1]byte

	for length := 0; length < maxVersionStringBytes; length++ {
		_, err := io.ReadFull(r, buf[:])
		if err != nil {
			return nil, err
		}
		// The RFC says that the version should be terminated with \r\n
		// but several SSH servers actually only send a \n.
		if buf[0] == '\n' {
			if !bytes.HasPrefix(versionString, []byte("SSH-")) {
				// RFC 4253 says we need to ignore all version string lines
				// except the one containing the SSH version (provided that
				// all the lines do not exceed 255 bytes in total).
				versionString = versionString[:0]
				continue
			}
			ok = true
			break
		}

		// non ASCII chars are disallowed, but we are lenient,
		// since Go doesn't use null-terminated strings.

		// The RFC allows a comment after a space, however,
		// all of it (version and comments) goes into the
		// session hash.
		versionString = append(versionString, buf[0])
	}

	if !ok {
		return nil, errors.New("ssh: overflow reading version string")
	}

	// There might be a '\r' on the end which we should remove.
	if len(versionString) > 0 && versionString[len(versionString)-1] == '\r' {
		versionString = versionString[:len(versionString)-1]
	}
	return versionString, nil
}
  07070100000D2A000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002C00000000elemental-cli-0.3.1/vendor/golang.org/x/exp   07070100000D2B000081A4000000000000000000000001645E367C000005C7000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/golang.org/x/exp/LICENSE   Copyright (c) 2009 The Go Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 07070100000D2C000081A4000000000000000000000001645E367C00000517000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/golang.org/x/exp/PATENTS   Additional IP Rights Grant (Patents)

"This implementation" means the copyrightable works distributed by
Google as part of the Go project.

Google hereby grants to You a perpetual, worldwide, non-exclusive,
no-charge, royalty-free, irrevocable (except as stated in this section)
patent license to make, have made, use, offer to sell, sell, import,
transfer and otherwise run, modify and propagate the contents of this
implementation of Go, where such license applies only to those patent
claims, both currently owned or controlled by Google and acquired in
the future, licensable by Google that are necessarily infringed by this
implementation of Go.  This grant does not include claims that would be
infringed only as a consequence of further modification of this
implementation.  If you or your agent or exclusive licensee institute or
order or agree to the institution of patent litigation against any
entity (including a cross-claim or counterclaim in a lawsuit) alleging
that this implementation of Go or any code incorporated within this
implementation of Go constitutes direct or contributory patent
infringement, or inducement of patent infringement, then any patent
rights granted to you under this License for this implementation of Go
shall terminate as of the date such litigation is filed.
 07070100000D2D000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/golang.org/x/exp/constraints   07070100000D2E000081A4000000000000000000000001645E367C000006EF000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/exp/constraints/constraints.go    // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package constraints defines a set of useful constraints to be used
// with type parameters.
package constraints

// Signed is a constraint that permits any signed integer type.
// If future releases of Go add new predeclared signed integer types,
// this constraint will be modified to include them.
type Signed interface {
	~int | ~int8 | ~int16 | ~int32 | ~int64
}

// Unsigned is a constraint that permits any unsigned integer type.
// If future releases of Go add new predeclared unsigned integer types,
// this constraint will be modified to include them.
type Unsigned interface {
	~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 | ~uintptr
}

// Integer is a constraint that permits any integer type.
// If future releases of Go add new predeclared integer types,
// this constraint will be modified to include them.
type Integer interface {
	Signed | Unsigned
}

// Float is a constraint that permits any floating-point type.
// If future releases of Go add new predeclared floating-point types,
// this constraint will be modified to include them.
type Float interface {
	~float32 | ~float64
}

// Complex is a constraint that permits any complex numeric type.
// If future releases of Go add new predeclared complex numeric types,
// this constraint will be modified to include them.
type Complex interface {
	~complex64 | ~complex128
}

// Ordered is a constraint that permits any ordered type: any type
// that supports the operators < <= >= >.
// If future releases of Go add new ordered types,
// this constraint will be modified to include them.
type Ordered interface {
	Integer | Float | ~string
}
 07070100000D2F000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002C00000000elemental-cli-0.3.1/vendor/golang.org/x/mod   07070100000D30000081A4000000000000000000000001645E367C000005C7000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/golang.org/x/mod/LICENSE   Copyright (c) 2009 The Go Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 07070100000D31000081A4000000000000000000000001645E367C00000517000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/golang.org/x/mod/PATENTS   Additional IP Rights Grant (Patents)

"This implementation" means the copyrightable works distributed by
Google as part of the Go project.

Google hereby grants to You a perpetual, worldwide, non-exclusive,
no-charge, royalty-free, irrevocable (except as stated in this section)
patent license to make, have made, use, offer to sell, sell, import,
transfer and otherwise run, modify and propagate the contents of this
implementation of Go, where such license applies only to those patent
claims, both currently owned or controlled by Google and acquired in
the future, licensable by Google that are necessarily infringed by this
implementation of Go.  This grant does not include claims that would be
infringed only as a consequence of further modification of this
implementation.  If you or your agent or exclusive licensee institute or
order or agree to the institution of patent litigation against any
entity (including a cross-claim or counterclaim in a lawsuit) alleging
that this implementation of Go or any code incorporated within this
implementation of Go constitutes direct or contributory patent
infringement, or inducement of patent infringement, then any patent
rights granted to you under this License for this implementation of Go
shall terminate as of the date such litigation is filed.
 07070100000D32000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003300000000elemental-cli-0.3.1/vendor/golang.org/x/mod/semver    07070100000D33000081A4000000000000000000000001645E367C00002362000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/golang.org/x/mod/semver/semver.go  // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package semver implements comparison of semantic version strings.
// In this package, semantic version strings must begin with a leading "v",
// as in "v1.0.0".
//
// The general form of a semantic version string accepted by this package is
//
//	vMAJOR[.MINOR[.PATCH[-PRERELEASE][+BUILD]]]
//
// where square brackets indicate optional parts of the syntax;
// MAJOR, MINOR, and PATCH are decimal integers without extra leading zeros;
// PRERELEASE and BUILD are each a series of non-empty dot-separated identifiers
// using only alphanumeric characters and hyphens; and
// all-numeric PRERELEASE identifiers must not have leading zeros.
//
// This package follows Semantic Versioning 2.0.0 (see semver.org)
// with two exceptions. First, it requires the "v" prefix. Second, it recognizes
// vMAJOR and vMAJOR.MINOR (with no prerelease or build suffixes)
// as shorthands for vMAJOR.0.0 and vMAJOR.MINOR.0.
package semver

import "sort"

// parsed returns the parsed form of a semantic version string.
type parsed struct {
	major      string
	minor      string
	patch      string
	short      string
	prerelease string
	build      string
}

// IsValid reports whether v is a valid semantic version string.
func IsValid(v string) bool {
	_, ok := parse(v)
	return ok
}

// Canonical returns the canonical formatting of the semantic version v.
// It fills in any missing .MINOR or .PATCH and discards build metadata.
// Two semantic versions compare equal only if their canonical formattings
// are identical strings.
// The canonical invalid semantic version is the empty string.
func Canonical(v string) string {
	p, ok := parse(v)
	if !ok {
		return ""
	}
	if p.build != "" {
		return v[:len(v)-len(p.build)]
	}
	if p.short != "" {
		return v + p.short
	}
	return v
}

// Major returns the major version prefix of the semantic version v.
// For example, Major("v2.1.0") == "v2".
// If v is an invalid semantic version string, Major returns the empty string.
func Major(v string) string {
	pv, ok := parse(v)
	if !ok {
		return ""
	}
	return v[:1+len(pv.major)]
}

// MajorMinor returns the major.minor version prefix of the semantic version v.
// For example, MajorMinor("v2.1.0") == "v2.1".
// If v is an invalid semantic version string, MajorMinor returns the empty string.
func MajorMinor(v string) string {
	pv, ok := parse(v)
	if !ok {
		return ""
	}
	i := 1 + len(pv.major)
	if j := i + 1 + len(pv.minor); j <= len(v) && v[i] == '.' && v[i+1:j] == pv.minor {
		return v[:j]
	}
	return v[:i] + "." + pv.minor
}

// Prerelease returns the prerelease suffix of the semantic version v.
// For example, Prerelease("v2.1.0-pre+meta") == "-pre".
// If v is an invalid semantic version string, Prerelease returns the empty string.
func Prerelease(v string) string {
	pv, ok := parse(v)
	if !ok {
		return ""
	}
	return pv.prerelease
}

// Build returns the build suffix of the semantic version v.
// For example, Build("v2.1.0+meta") == "+meta".
// If v is an invalid semantic version string, Build returns the empty string.
func Build(v string) string {
	pv, ok := parse(v)
	if !ok {
		return ""
	}
	return pv.build
}

// Compare returns an integer comparing two versions according to
// semantic version precedence.
// The result will be 0 if v == w, -1 if v < w, or +1 if v > w.
//
// An invalid semantic version string is considered less than a valid one.
// All invalid semantic version strings compare equal to each other.
func Compare(v, w string) int {
	pv, ok1 := parse(v)
	pw, ok2 := parse(w)
	if !ok1 && !ok2 {
		return 0
	}
	if !ok1 {
		return -1
	}
	if !ok2 {
		return +1
	}
	if c := compareInt(pv.major, pw.major); c != 0 {
		return c
	}
	if c := compareInt(pv.minor, pw.minor); c != 0 {
		return c
	}
	if c := compareInt(pv.patch, pw.patch); c != 0 {
		return c
	}
	return comparePrerelease(pv.prerelease, pw.prerelease)
}

// Max canonicalizes its arguments and then returns the version string
// that compares greater.
//
// Deprecated: use Compare instead. In most cases, returning a canonicalized
// version is not expected or desired.
func Max(v, w string) string {
	v = Canonical(v)
	w = Canonical(w)
	if Compare(v, w) > 0 {
		return v
	}
	return w
}

// ByVersion implements sort.Interface for sorting semantic version strings.
type ByVersion []string

func (vs ByVersion) Len() int      { return len(vs) }
func (vs ByVersion) Swap(i, j int) { vs[i], vs[j] = vs[j], vs[i] }
func (vs ByVersion) Less(i, j int) bool {
	cmp := Compare(vs[i], vs[j])
	if cmp != 0 {
		return cmp < 0
	}
	return vs[i] < vs[j]
}

// Sort sorts a list of semantic version strings using ByVersion.
func Sort(list []string) {
	sort.Sort(ByVersion(list))
}

func parse(v string) (p parsed, ok bool) {
	if v == "" || v[0] != 'v' {
		return
	}
	p.major, v, ok = parseInt(v[1:])
	if !ok {
		return
	}
	if v == "" {
		p.minor = "0"
		p.patch = "0"
		p.short = ".0.0"
		return
	}
	if v[0] != '.' {
		ok = false
		return
	}
	p.minor, v, ok = parseInt(v[1:])
	if !ok {
		return
	}
	if v == "" {
		p.patch = "0"
		p.short = ".0"
		return
	}
	if v[0] != '.' {
		ok = false
		return
	}
	p.patch, v, ok = parseInt(v[1:])
	if !ok {
		return
	}
	if len(v) > 0 && v[0] == '-' {
		p.prerelease, v, ok = parsePrerelease(v)
		if !ok {
			return
		}
	}
	if len(v) > 0 && v[0] == '+' {
		p.build, v, ok = parseBuild(v)
		if !ok {
			return
		}
	}
	if v != "" {
		ok = false
		return
	}
	ok = true
	return
}

func parseInt(v string) (t, rest string, ok bool) {
	if v == "" {
		return
	}
	if v[0] < '0' || '9' < v[0] {
		return
	}
	i := 1
	for i < len(v) && '0' <= v[i] && v[i] <= '9' {
		i++
	}
	if v[0] == '0' && i != 1 {
		return
	}
	return v[:i], v[i:], true
}

func parsePrerelease(v string) (t, rest string, ok bool) {
	// "A pre-release version MAY be denoted by appending a hyphen and
	// a series of dot separated identifiers immediately following the patch version.
	// Identifiers MUST comprise only ASCII alphanumerics and hyphen [0-9A-Za-z-].
	// Identifiers MUST NOT be empty. Numeric identifiers MUST NOT include leading zeroes."
	if v == "" || v[0] != '-' {
		return
	}
	i := 1
	start := 1
	for i < len(v) && v[i] != '+' {
		if !isIdentChar(v[i]) && v[i] != '.' {
			return
		}
		if v[i] == '.' {
			if start == i || isBadNum(v[start:i]) {
				return
			}
			start = i + 1
		}
		i++
	}
	if start == i || isBadNum(v[start:i]) {
		return
	}
	return v[:i], v[i:], true
}

func parseBuild(v string) (t, rest string, ok bool) {
	if v == "" || v[0] != '+' {
		return
	}
	i := 1
	start := 1
	for i < len(v) {
		if !isIdentChar(v[i]) && v[i] != '.' {
			return
		}
		if v[i] == '.' {
			if start == i {
				return
			}
			start = i + 1
		}
		i++
	}
	if start == i {
		return
	}
	return v[:i], v[i:], true
}

func isIdentChar(c byte) bool {
	return 'A' <= c && c <= 'Z' || 'a' <= c && c <= 'z' || '0' <= c && c <= '9' || c == '-'
}

func isBadNum(v string) bool {
	i := 0
	for i < len(v) && '0' <= v[i] && v[i] <= '9' {
		i++
	}
	return i == len(v) && i > 1 && v[0] == '0'
}

func isNum(v string) bool {
	i := 0
	for i < len(v) && '0' <= v[i] && v[i] <= '9' {
		i++
	}
	return i == len(v)
}

func compareInt(x, y string) int {
	if x == y {
		return 0
	}
	if len(x) < len(y) {
		return -1
	}
	if len(x) > len(y) {
		return +1
	}
	if x < y {
		return -1
	} else {
		return +1
	}
}

func comparePrerelease(x, y string) int {
	// "When major, minor, and patch are equal, a pre-release version has
	// lower precedence than a normal version.
	// Example: 1.0.0-alpha < 1.0.0.
	// Precedence for two pre-release versions with the same major, minor,
	// and patch version MUST be determined by comparing each dot separated
	// identifier from left to right until a difference is found as follows:
	// identifiers consisting of only digits are compared numerically and
	// identifiers with letters or hyphens are compared lexically in ASCII
	// sort order. Numeric identifiers always have lower precedence than
	// non-numeric identifiers. A larger set of pre-release fields has a
	// higher precedence than a smaller set, if all of the preceding
	// identifiers are equal.
	// Example: 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta <
	// 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0."
	if x == y {
		return 0
	}
	if x == "" {
		return +1
	}
	if y == "" {
		return -1
	}
	for x != "" && y != "" {
		x = x[1:] // skip - or .
		y = y[1:] // skip - or .
		var dx, dy string
		dx, x = nextIdent(x)
		dy, y = nextIdent(y)
		if dx != dy {
			ix := isNum(dx)
			iy := isNum(dy)
			if ix != iy {
				if ix {
					return -1
				} else {
					return +1
				}
			}
			if ix {
				if len(dx) < len(dy) {
					return -1
				}
				if len(dx) > len(dy) {
					return +1
				}
			}
			if dx < dy {
				return -1
			} else {
				return +1
			}
		}
	}
	if x == "" {
		return -1
	} else {
		return +1
	}
}

func nextIdent(x string) (dx, rest string) {
	i := 0
	for i < len(x) && x[i] != '.' {
		i++
	}
	return x[:i], x[i:]
}
  07070100000D34000041ED000000000000000000000006645E367C00000000000000000000000000000000000000000000002C00000000elemental-cli-0.3.1/vendor/golang.org/x/net   07070100000D35000081A4000000000000000000000001645E367C000005C7000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/golang.org/x/net/LICENSE   Copyright (c) 2009 The Go Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 07070100000D36000081A4000000000000000000000001645E367C00000517000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/golang.org/x/net/PATENTS   Additional IP Rights Grant (Patents)

"This implementation" means the copyrightable works distributed by
Google as part of the Go project.

Google hereby grants to You a perpetual, worldwide, non-exclusive,
no-charge, royalty-free, irrevocable (except as stated in this section)
patent license to make, have made, use, offer to sell, sell, import,
transfer and otherwise run, modify and propagate the contents of this
implementation of Go, where such license applies only to those patent
claims, both currently owned or controlled by Google and acquired in
the future, licensable by Google that are necessarily infringed by this
implementation of Go.  This grant does not include claims that would be
infringed only as a consequence of further modification of this
implementation.  If you or your agent or exclusive licensee institute or
order or agree to the institution of patent litigation against any
entity (including a cross-claim or counterclaim in a lawsuit) alleging
that this implementation of Go or any code incorporated within this
implementation of Go constitutes direct or contributory patent
infringement, or inducement of patent infringement, then any patent
rights granted to you under this License for this implementation of Go
shall terminate as of the date such litigation is filed.
 07070100000D37000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/golang.org/x/net/context   07070100000D38000081A4000000000000000000000001645E367C0000099D000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/golang.org/x/net/context/context.go    // Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package context defines the Context type, which carries deadlines,
// cancelation signals, and other request-scoped values across API boundaries
// and between processes.
// As of Go 1.7 this package is available in the standard library under the
// name context.  https://golang.org/pkg/context.
//
// Incoming requests to a server should create a Context, and outgoing calls to
// servers should accept a Context. The chain of function calls between must
// propagate the Context, optionally replacing it with a modified copy created
// using WithDeadline, WithTimeout, WithCancel, or WithValue.
//
// Programs that use Contexts should follow these rules to keep interfaces
// consistent across packages and enable static analysis tools to check context
// propagation:
//
// Do not store Contexts inside a struct type; instead, pass a Context
// explicitly to each function that needs it. The Context should be the first
// parameter, typically named ctx:
//
//	func DoSomething(ctx context.Context, arg Arg) error {
//		// ... use ctx ...
//	}
//
// Do not pass a nil Context, even if a function permits it. Pass context.TODO
// if you are unsure about which Context to use.
//
// Use context Values only for request-scoped data that transits processes and
// APIs, not for passing optional parameters to functions.
//
// The same Context may be passed to functions running in different goroutines;
// Contexts are safe for simultaneous use by multiple goroutines.
//
// See http://blog.golang.org/context for example code for a server that uses
// Contexts.
package context // import "golang.org/x/net/context"

// Background returns a non-nil, empty Context. It is never canceled, has no
// values, and has no deadline. It is typically used by the main function,
// initialization, and tests, and as the top-level Context for incoming
// requests.
func Background() Context {
	return background
}

// TODO returns a non-nil, empty Context. Code should use context.TODO when
// it's unclear which Context to use or it is not yet available (because the
// surrounding function has not yet been extended to accept a Context
// parameter).  TODO is recognized by static analysis tools that determine
// whether Contexts are propagated correctly in a program.
func TODO() Context {
	return todo
}
   07070100000D39000081A4000000000000000000000001645E367C00000B22000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/golang.org/x/net/context/go17.go   // Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build go1.7
// +build go1.7

package context

import (
	"context" // standard library's context, as of Go 1.7
	"time"
)

var (
	todo       = context.TODO()
	background = context.Background()
)

// Canceled is the error returned by Context.Err when the context is canceled.
var Canceled = context.Canceled

// DeadlineExceeded is the error returned by Context.Err when the context's
// deadline passes.
var DeadlineExceeded = context.DeadlineExceeded

// WithCancel returns a copy of parent with a new Done channel. The returned
// context's Done channel is closed when the returned cancel function is called
// or when the parent context's Done channel is closed, whichever happens first.
//
// Canceling this context releases resources associated with it, so code should
// call cancel as soon as the operations running in this Context complete.
func WithCancel(parent Context) (ctx Context, cancel CancelFunc) {
	ctx, f := context.WithCancel(parent)
	return ctx, f
}

// WithDeadline returns a copy of the parent context with the deadline adjusted
// to be no later than d. If the parent's deadline is already earlier than d,
// WithDeadline(parent, d) is semantically equivalent to parent. The returned
// context's Done channel is closed when the deadline expires, when the returned
// cancel function is called, or when the parent context's Done channel is
// closed, whichever happens first.
//
// Canceling this context releases resources associated with it, so code should
// call cancel as soon as the operations running in this Context complete.
func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) {
	ctx, f := context.WithDeadline(parent, deadline)
	return ctx, f
}

// WithTimeout returns WithDeadline(parent, time.Now().Add(timeout)).
//
// Canceling this context releases resources associated with it, so code should
// call cancel as soon as the operations running in this Context complete:
//
//	func slowOperationWithTimeout(ctx context.Context) (Result, error) {
//		ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond)
//		defer cancel()  // releases resources if slowOperation completes before timeout elapses
//		return slowOperation(ctx)
//	}
func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) {
	return WithDeadline(parent, time.Now().Add(timeout))
}

// WithValue returns a copy of parent in which the value associated with key is
// val.
//
// Use context Values only for request-scoped data that transits processes and
// APIs, not for passing optional parameters to functions.
func WithValue(parent Context, key interface{}, val interface{}) Context {
	return context.WithValue(parent, key, val)
}
  07070100000D3A000081A4000000000000000000000001645E367C000002B7000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/golang.org/x/net/context/go19.go   // Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build go1.9
// +build go1.9

package context

import "context" // standard library's context, as of Go 1.7

// A Context carries a deadline, a cancelation signal, and other values across
// API boundaries.
//
// Context's methods may be called by multiple goroutines simultaneously.
type Context = context.Context

// A CancelFunc tells an operation to abandon its work.
// A CancelFunc does not wait for the work to stop.
// After the first call, subsequent calls to a CancelFunc do nothing.
type CancelFunc = context.CancelFunc
 07070100000D3B000081A4000000000000000000000001645E367C00001FC8000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/golang.org/x/net/context/pre_go17.go   // Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build !go1.7
// +build !go1.7

package context

import (
	"errors"
	"fmt"
	"sync"
	"time"
)

// An emptyCtx is never canceled, has no values, and has no deadline. It is not
// struct{}, since vars of this type must have distinct addresses.
type emptyCtx int

func (*emptyCtx) Deadline() (deadline time.Time, ok bool) {
	return
}

func (*emptyCtx) Done() <-chan struct{} {
	return nil
}

func (*emptyCtx) Err() error {
	return nil
}

func (*emptyCtx) Value(key interface{}) interface{} {
	return nil
}

func (e *emptyCtx) String() string {
	switch e {
	case background:
		return "context.Background"
	case todo:
		return "context.TODO"
	}
	return "unknown empty Context"
}

var (
	background = new(emptyCtx)
	todo       = new(emptyCtx)
)

// Canceled is the error returned by Context.Err when the context is canceled.
var Canceled = errors.New("context canceled")

// DeadlineExceeded is the error returned by Context.Err when the context's
// deadline passes.
var DeadlineExceeded = errors.New("context deadline exceeded")

// WithCancel returns a copy of parent with a new Done channel. The returned
// context's Done channel is closed when the returned cancel function is called
// or when the parent context's Done channel is closed, whichever happens first.
//
// Canceling this context releases resources associated with it, so code should
// call cancel as soon as the operations running in this Context complete.
func WithCancel(parent Context) (ctx Context, cancel CancelFunc) {
	c := newCancelCtx(parent)
	propagateCancel(parent, c)
	return c, func() { c.cancel(true, Canceled) }
}

// newCancelCtx returns an initialized cancelCtx.
func newCancelCtx(parent Context) *cancelCtx {
	return &cancelCtx{
		Context: parent,
		done:    make(chan struct{}),
	}
}

// propagateCancel arranges for child to be canceled when parent is.
func propagateCancel(parent Context, child canceler) {
	if parent.Done() == nil {
		return // parent is never canceled
	}
	if p, ok := parentCancelCtx(parent); ok {
		p.mu.Lock()
		if p.err != nil {
			// parent has already been canceled
			child.cancel(false, p.err)
		} else {
			if p.children == nil {
				p.children = make(map[canceler]bool)
			}
			p.children[child] = true
		}
		p.mu.Unlock()
	} else {
		go func() {
			select {
			case <-parent.Done():
				child.cancel(false, parent.Err())
			case <-child.Done():
			}
		}()
	}
}

// parentCancelCtx follows a chain of parent references until it finds a
// *cancelCtx. This function understands how each of the concrete types in this
// package represents its parent.
func parentCancelCtx(parent Context) (*cancelCtx, bool) {
	for {
		switch c := parent.(type) {
		case *cancelCtx:
			return c, true
		case *timerCtx:
			return c.cancelCtx, true
		case *valueCtx:
			parent = c.Context
		default:
			return nil, false
		}
	}
}

// removeChild removes a context from its parent.
func removeChild(parent Context, child canceler) {
	p, ok := parentCancelCtx(parent)
	if !ok {
		return
	}
	p.mu.Lock()
	if p.children != nil {
		delete(p.children, child)
	}
	p.mu.Unlock()
}

// A canceler is a context type that can be canceled directly. The
// implementations are *cancelCtx and *timerCtx.
type canceler interface {
	cancel(removeFromParent bool, err error)
	Done() <-chan struct{}
}

// A cancelCtx can be canceled. When canceled, it also cancels any children
// that implement canceler.
type cancelCtx struct {
	Context

	done chan struct{} // closed by the first cancel call.

	mu       sync.Mutex
	children map[canceler]bool // set to nil by the first cancel call
	err      error             // set to non-nil by the first cancel call
}

func (c *cancelCtx) Done() <-chan struct{} {
	return c.done
}

func (c *cancelCtx) Err() error {
	c.mu.Lock()
	defer c.mu.Unlock()
	return c.err
}

func (c *cancelCtx) String() string {
	return fmt.Sprintf("%v.WithCancel", c.Context)
}

// cancel closes c.done, cancels each of c's children, and, if
// removeFromParent is true, removes c from its parent's children.
func (c *cancelCtx) cancel(removeFromParent bool, err error) {
	if err == nil {
		panic("context: internal error: missing cancel error")
	}
	c.mu.Lock()
	if c.err != nil {
		c.mu.Unlock()
		return // already canceled
	}
	c.err = err
	close(c.done)
	for child := range c.children {
		// NOTE: acquiring the child's lock while holding parent's lock.
		child.cancel(false, err)
	}
	c.children = nil
	c.mu.Unlock()

	if removeFromParent {
		removeChild(c.Context, c)
	}
}

// WithDeadline returns a copy of the parent context with the deadline adjusted
// to be no later than d. If the parent's deadline is already earlier than d,
// WithDeadline(parent, d) is semantically equivalent to parent. The returned
// context's Done channel is closed when the deadline expires, when the returned
// cancel function is called, or when the parent context's Done channel is
// closed, whichever happens first.
//
// Canceling this context releases resources associated with it, so code should
// call cancel as soon as the operations running in this Context complete.
func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) {
	if cur, ok := parent.Deadline(); ok && cur.Before(deadline) {
		// The current deadline is already sooner than the new one.
		return WithCancel(parent)
	}
	c := &timerCtx{
		cancelCtx: newCancelCtx(parent),
		deadline:  deadline,
	}
	propagateCancel(parent, c)
	d := deadline.Sub(time.Now())
	if d <= 0 {
		c.cancel(true, DeadlineExceeded) // deadline has already passed
		return c, func() { c.cancel(true, Canceled) }
	}
	c.mu.Lock()
	defer c.mu.Unlock()
	if c.err == nil {
		c.timer = time.AfterFunc(d, func() {
			c.cancel(true, DeadlineExceeded)
		})
	}
	return c, func() { c.cancel(true, Canceled) }
}

// A timerCtx carries a timer and a deadline. It embeds a cancelCtx to
// implement Done and Err. It implements cancel by stopping its timer then
// delegating to cancelCtx.cancel.
type timerCtx struct {
	*cancelCtx
	timer *time.Timer // Under cancelCtx.mu.

	deadline time.Time
}

func (c *timerCtx) Deadline() (deadline time.Time, ok bool) {
	return c.deadline, true
}

func (c *timerCtx) String() string {
	return fmt.Sprintf("%v.WithDeadline(%s [%s])", c.cancelCtx.Context, c.deadline, c.deadline.Sub(time.Now()))
}

func (c *timerCtx) cancel(removeFromParent bool, err error) {
	c.cancelCtx.cancel(false, err)
	if removeFromParent {
		// Remove this timerCtx from its parent cancelCtx's children.
		removeChild(c.cancelCtx.Context, c)
	}
	c.mu.Lock()
	if c.timer != nil {
		c.timer.Stop()
		c.timer = nil
	}
	c.mu.Unlock()
}

// WithTimeout returns WithDeadline(parent, time.Now().Add(timeout)).
//
// Canceling this context releases resources associated with it, so code should
// call cancel as soon as the operations running in this Context complete:
//
//	func slowOperationWithTimeout(ctx context.Context) (Result, error) {
//		ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond)
//		defer cancel()  // releases resources if slowOperation completes before timeout elapses
//		return slowOperation(ctx)
//	}
func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) {
	return WithDeadline(parent, time.Now().Add(timeout))
}

// WithValue returns a copy of parent in which the value associated with key is
// val.
//
// Use context Values only for request-scoped data that transits processes and
// APIs, not for passing optional parameters to functions.
func WithValue(parent Context, key interface{}, val interface{}) Context {
	return &valueCtx{parent, key, val}
}

// A valueCtx carries a key-value pair. It implements Value for that key and
// delegates all other calls to the embedded Context.
type valueCtx struct {
	Context
	key, val interface{}
}

func (c *valueCtx) String() string {
	return fmt.Sprintf("%v.WithValue(%#v, %#v)", c.Context, c.key, c.val)
}

func (c *valueCtx) Value(key interface{}) interface{} {
	if c.key == key {
		return c.val
	}
	return c.Context.Value(key)
}
07070100000D3C000081A4000000000000000000000001645E367C00000FE1000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/golang.org/x/net/context/pre_go19.go   // Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build !go1.9
// +build !go1.9

package context

import "time"

// A Context carries a deadline, a cancelation signal, and other values across
// API boundaries.
//
// Context's methods may be called by multiple goroutines simultaneously.
type Context interface {
	// Deadline returns the time when work done on behalf of this context
	// should be canceled. Deadline returns ok==false when no deadline is
	// set. Successive calls to Deadline return the same results.
	Deadline() (deadline time.Time, ok bool)

	// Done returns a channel that's closed when work done on behalf of this
	// context should be canceled. Done may return nil if this context can
	// never be canceled. Successive calls to Done return the same value.
	//
	// WithCancel arranges for Done to be closed when cancel is called;
	// WithDeadline arranges for Done to be closed when the deadline
	// expires; WithTimeout arranges for Done to be closed when the timeout
	// elapses.
	//
	// Done is provided for use in select statements:
	//
	//  // Stream generates values with DoSomething and sends them to out
	//  // until DoSomething returns an error or ctx.Done is closed.
	//  func Stream(ctx context.Context, out chan<- Value) error {
	//  	for {
	//  		v, err := DoSomething(ctx)
	//  		if err != nil {
	//  			return err
	//  		}
	//  		select {
	//  		case <-ctx.Done():
	//  			return ctx.Err()
	//  		case out <- v:
	//  		}
	//  	}
	//  }
	//
	// See http://blog.golang.org/pipelines for more examples of how to use
	// a Done channel for cancelation.
	Done() <-chan struct{}

	// Err returns a non-nil error value after Done is closed. Err returns
	// Canceled if the context was canceled or DeadlineExceeded if the
	// context's deadline passed. No other values for Err are defined.
	// After Done is closed, successive calls to Err return the same value.
	Err() error

	// Value returns the value associated with this context for key, or nil
	// if no value is associated with key. Successive calls to Value with
	// the same key returns the same result.
	//
	// Use context values only for request-scoped data that transits
	// processes and API boundaries, not for passing optional parameters to
	// functions.
	//
	// A key identifies a specific value in a Context. Functions that wish
	// to store values in Context typically allocate a key in a global
	// variable then use that key as the argument to context.WithValue and
	// Context.Value. A key can be any type that supports equality;
	// packages should define keys as an unexported type to avoid
	// collisions.
	//
	// Packages that define a Context key should provide type-safe accessors
	// for the values stores using that key:
	//
	// 	// Package user defines a User type that's stored in Contexts.
	// 	package user
	//
	// 	import "golang.org/x/net/context"
	//
	// 	// User is the type of value stored in the Contexts.
	// 	type User struct {...}
	//
	// 	// key is an unexported type for keys defined in this package.
	// 	// This prevents collisions with keys defined in other packages.
	// 	type key int
	//
	// 	// userKey is the key for user.User values in Contexts. It is
	// 	// unexported; clients use user.NewContext and user.FromContext
	// 	// instead of using this key directly.
	// 	var userKey key = 0
	//
	// 	// NewContext returns a new Context that carries value u.
	// 	func NewContext(ctx context.Context, u *User) context.Context {
	// 		return context.WithValue(ctx, userKey, u)
	// 	}
	//
	// 	// FromContext returns the User value stored in ctx, if any.
	// 	func FromContext(ctx context.Context) (*User, bool) {
	// 		u, ok := ctx.Value(userKey).(*User)
	// 		return u, ok
	// 	}
	Value(key interface{}) interface{}
}

// A CancelFunc tells an operation to abandon its work.
// A CancelFunc does not wait for the work to stop.
// After the first call, subsequent calls to a CancelFunc do nothing.
type CancelFunc func()
   07070100000D3D000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000003100000000elemental-cli-0.3.1/vendor/golang.org/x/net/html  07070100000D3E000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/golang.org/x/net/html/atom 07070100000D3F000081A4000000000000000000000001645E367C00000911000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/golang.org/x/net/html/atom/atom.go // Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package atom provides integer codes (also known as atoms) for a fixed set of
// frequently occurring HTML strings: tag names and attribute keys such as "p"
// and "id".
//
// Sharing an atom's name between all elements with the same tag can result in
// fewer string allocations when tokenizing and parsing HTML. Integer
// comparisons are also generally faster than string comparisons.
//
// The value of an atom's particular code is not guaranteed to stay the same
// between versions of this package. Neither is any ordering guaranteed:
// whether atom.H1 < atom.H2 may also change. The codes are not guaranteed to
// be dense. The only guarantees are that e.g. looking up "div" will yield
// atom.Div, calling atom.Div.String will return "div", and atom.Div != 0.
package atom // import "golang.org/x/net/html/atom"

// Atom is an integer code for a string. The zero value maps to "".
type Atom uint32

// String returns the atom's name.
func (a Atom) String() string {
	start := uint32(a >> 8)
	n := uint32(a & 0xff)
	if start+n > uint32(len(atomText)) {
		return ""
	}
	return atomText[start : start+n]
}

func (a Atom) string() string {
	return atomText[a>>8 : a>>8+a&0xff]
}

// fnv computes the FNV hash with an arbitrary starting value h.
func fnv(h uint32, s []byte) uint32 {
	for i := range s {
		h ^= uint32(s[i])
		h *= 16777619
	}
	return h
}

func match(s string, t []byte) bool {
	for i, c := range t {
		if s[i] != c {
			return false
		}
	}
	return true
}

// Lookup returns the atom whose name is s. It returns zero if there is no
// such atom. The lookup is case sensitive.
func Lookup(s []byte) Atom {
	if len(s) == 0 || len(s) > maxAtomLen {
		return 0
	}
	h := fnv(hash0, s)
	if a := table[h&uint32(len(table)-1)]; int(a&0xff) == len(s) && match(a.string(), s) {
		return a
	}
	if a := table[(h>>16)&uint32(len(table)-1)]; int(a&0xff) == len(s) && match(a.string(), s) {
		return a
	}
	return 0
}

// String returns a string whose contents are equal to s. In that sense, it is
// equivalent to string(s) but may be more efficient.
func String(s []byte) string {
	if a := Lookup(s); a != 0 {
		return a.String()
	}
	return string(s)
}
   07070100000D40000081A4000000000000000000000001645E367C00006CAE000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/golang.org/x/net/html/atom/table.go    // Code generated by go generate gen.go; DO NOT EDIT.

//go:generate go run gen.go

package atom

const (
	A                         Atom = 0x1
	Abbr                      Atom = 0x4
	Accept                    Atom = 0x1a06
	AcceptCharset             Atom = 0x1a0e
	Accesskey                 Atom = 0x2c09
	Acronym                   Atom = 0xaa07
	Action                    Atom = 0x27206
	Address                   Atom = 0x6f307
	Align                     Atom = 0xb105
	Allowfullscreen           Atom = 0x2080f
	Allowpaymentrequest       Atom = 0xc113
	Allowusermedia            Atom = 0xdd0e
	Alt                       Atom = 0xf303
	Annotation                Atom = 0x1c90a
	AnnotationXml             Atom = 0x1c90e
	Applet                    Atom = 0x31906
	Area                      Atom = 0x35604
	Article                   Atom = 0x3fc07
	As                        Atom = 0x3c02
	Aside                     Atom = 0x10705
	Async                     Atom = 0xff05
	Audio                     Atom = 0x11505
	Autocomplete              Atom = 0x2780c
	Autofocus                 Atom = 0x12109
	Autoplay                  Atom = 0x13c08
	B                         Atom = 0x101
	Base                      Atom = 0x3b04
	Basefont                  Atom = 0x3b08
	Bdi                       Atom = 0xba03
	Bdo                       Atom = 0x14b03
	Bgsound                   Atom = 0x15e07
	Big                       Atom = 0x17003
	Blink                     Atom = 0x17305
	Blockquote                Atom = 0x1870a
	Body                      Atom = 0x2804
	Br                        Atom = 0x202
	Button                    Atom = 0x19106
	Canvas                    Atom = 0x10306
	Caption                   Atom = 0x23107
	Center                    Atom = 0x22006
	Challenge                 Atom = 0x29b09
	Charset                   Atom = 0x2107
	Checked                   Atom = 0x47907
	Cite                      Atom = 0x19c04
	Class                     Atom = 0x56405
	Code                      Atom = 0x5c504
	Col                       Atom = 0x1ab03
	Colgroup                  Atom = 0x1ab08
	Color                     Atom = 0x1bf05
	Cols                      Atom = 0x1c404
	Colspan                   Atom = 0x1c407
	Command                   Atom = 0x1d707
	Content                   Atom = 0x58b07
	Contenteditable           Atom = 0x58b0f
	Contextmenu               Atom = 0x3800b
	Controls                  Atom = 0x1de08
	Coords                    Atom = 0x1ea06
	Crossorigin               Atom = 0x1fb0b
	Data                      Atom = 0x4a504
	Datalist                  Atom = 0x4a508
	Datetime                  Atom = 0x2b808
	Dd                        Atom = 0x2d702
	Default                   Atom = 0x10a07
	Defer                     Atom = 0x5c705
	Del                       Atom = 0x45203
	Desc                      Atom = 0x56104
	Details                   Atom = 0x7207
	Dfn                       Atom = 0x8703
	Dialog                    Atom = 0xbb06
	Dir                       Atom = 0x9303
	Dirname                   Atom = 0x9307
	Disabled                  Atom = 0x16408
	Div                       Atom = 0x16b03
	Dl                        Atom = 0x5e602
	Download                  Atom = 0x46308
	Draggable                 Atom = 0x17a09
	Dropzone                  Atom = 0x40508
	Dt                        Atom = 0x64b02
	Em                        Atom = 0x6e02
	Embed                     Atom = 0x6e05
	Enctype                   Atom = 0x28d07
	Face                      Atom = 0x21e04
	Fieldset                  Atom = 0x22608
	Figcaption                Atom = 0x22e0a
	Figure                    Atom = 0x24806
	Font                      Atom = 0x3f04
	Footer                    Atom = 0xf606
	For                       Atom = 0x25403
	ForeignObject             Atom = 0x2540d
	Foreignobject             Atom = 0x2610d
	Form                      Atom = 0x26e04
	Formaction                Atom = 0x26e0a
	Formenctype               Atom = 0x2890b
	Formmethod                Atom = 0x2a40a
	Formnovalidate            Atom = 0x2ae0e
	Formtarget                Atom = 0x2c00a
	Frame                     Atom = 0x8b05
	Frameset                  Atom = 0x8b08
	H1                        Atom = 0x15c02
	H2                        Atom = 0x2de02
	H3                        Atom = 0x30d02
	H4                        Atom = 0x34502
	H5                        Atom = 0x34f02
	H6                        Atom = 0x64d02
	Head                      Atom = 0x33104
	Header                    Atom = 0x33106
	Headers                   Atom = 0x33107
	Height                    Atom = 0x5206
	Hgroup                    Atom = 0x2ca06
	Hidden                    Atom = 0x2d506
	High                      Atom = 0x2db04
	Hr                        Atom = 0x15702
	Href                      Atom = 0x2e004
	Hreflang                  Atom = 0x2e008
	Html                      Atom = 0x5604
	HttpEquiv                 Atom = 0x2e80a
	I                         Atom = 0x601
	Icon                      Atom = 0x58a04
	Id                        Atom = 0x10902
	Iframe                    Atom = 0x2fc06
	Image                     Atom = 0x30205
	Img                       Atom = 0x30703
	Input                     Atom = 0x44b05
	Inputmode                 Atom = 0x44b09
	Ins                       Atom = 0x20403
	Integrity                 Atom = 0x23f09
	Is                        Atom = 0x16502
	Isindex                   Atom = 0x30f07
	Ismap                     Atom = 0x31605
	Itemid                    Atom = 0x38b06
	Itemprop                  Atom = 0x19d08
	Itemref                   Atom = 0x3cd07
	Itemscope                 Atom = 0x67109
	Itemtype                  Atom = 0x31f08
	Kbd                       Atom = 0xb903
	Keygen                    Atom = 0x3206
	Keytype                   Atom = 0xd607
	Kind                      Atom = 0x17704
	Label                     Atom = 0x5905
	Lang                      Atom = 0x2e404
	Legend                    Atom = 0x18106
	Li                        Atom = 0xb202
	Link                      Atom = 0x17404
	List                      Atom = 0x4a904
	Listing                   Atom = 0x4a907
	Loop                      Atom = 0x5d04
	Low                       Atom = 0xc303
	Main                      Atom = 0x1004
	Malignmark                Atom = 0xb00a
	Manifest                  Atom = 0x6d708
	Map                       Atom = 0x31803
	Mark                      Atom = 0xb604
	Marquee                   Atom = 0x32707
	Math                      Atom = 0x32e04
	Max                       Atom = 0x33d03
	Maxlength                 Atom = 0x33d09
	Media                     Atom = 0xe605
	Mediagroup                Atom = 0xe60a
	Menu                      Atom = 0x38704
	Menuitem                  Atom = 0x38708
	Meta                      Atom = 0x4b804
	Meter                     Atom = 0x9805
	Method                    Atom = 0x2a806
	Mglyph                    Atom = 0x30806
	Mi                        Atom = 0x34702
	Min                       Atom = 0x34703
	Minlength                 Atom = 0x34709
	Mn                        Atom = 0x2b102
	Mo                        Atom = 0xa402
	Ms                        Atom = 0x67402
	Mtext                     Atom = 0x35105
	Multiple                  Atom = 0x35f08
	Muted                     Atom = 0x36705
	Name                      Atom = 0x9604
	Nav                       Atom = 0x1303
	Nobr                      Atom = 0x3704
	Noembed                   Atom = 0x6c07
	Noframes                  Atom = 0x8908
	Nomodule                  Atom = 0xa208
	Nonce                     Atom = 0x1a605
	Noscript                  Atom = 0x21608
	Novalidate                Atom = 0x2b20a
	Object                    Atom = 0x26806
	Ol                        Atom = 0x13702
	Onabort                   Atom = 0x19507
	Onafterprint              Atom = 0x2360c
	Onautocomplete            Atom = 0x2760e
	Onautocompleteerror       Atom = 0x27613
	Onauxclick                Atom = 0x61f0a
	Onbeforeprint             Atom = 0x69e0d
	Onbeforeunload            Atom = 0x6e70e
	Onblur                    Atom = 0x56d06
	Oncancel                  Atom = 0x11908
	Oncanplay                 Atom = 0x14d09
	Oncanplaythrough          Atom = 0x14d10
	Onchange                  Atom = 0x41b08
	Onclick                   Atom = 0x2f507
	Onclose                   Atom = 0x36c07
	Oncontextmenu             Atom = 0x37e0d
	Oncopy                    Atom = 0x39106
	Oncuechange               Atom = 0x3970b
	Oncut                     Atom = 0x3a205
	Ondblclick                Atom = 0x3a70a
	Ondrag                    Atom = 0x3b106
	Ondragend                 Atom = 0x3b109
	Ondragenter               Atom = 0x3ba0b
	Ondragexit                Atom = 0x3c50a
	Ondragleave               Atom = 0x3df0b
	Ondragover                Atom = 0x3ea0a
	Ondragstart               Atom = 0x3f40b
	Ondrop                    Atom = 0x40306
	Ondurationchange          Atom = 0x41310
	Onemptied                 Atom = 0x40a09
	Onended                   Atom = 0x42307
	Onerror                   Atom = 0x42a07
	Onfocus                   Atom = 0x43107
	Onhashchange              Atom = 0x43d0c
	Oninput                   Atom = 0x44907
	Oninvalid                 Atom = 0x45509
	Onkeydown                 Atom = 0x45e09
	Onkeypress                Atom = 0x46b0a
	Onkeyup                   Atom = 0x48007
	Onlanguagechange          Atom = 0x48d10
	Onload                    Atom = 0x49d06
	Onloadeddata              Atom = 0x49d0c
	Onloadedmetadata          Atom = 0x4b010
	Onloadend                 Atom = 0x4c609
	Onloadstart               Atom = 0x4cf0b
	Onmessage                 Atom = 0x4da09
	Onmessageerror            Atom = 0x4da0e
	Onmousedown               Atom = 0x4e80b
	Onmouseenter              Atom = 0x4f30c
	Onmouseleave              Atom = 0x4ff0c
	Onmousemove               Atom = 0x50b0b
	Onmouseout                Atom = 0x5160a
	Onmouseover               Atom = 0x5230b
	Onmouseup                 Atom = 0x52e09
	Onmousewheel              Atom = 0x53c0c
	Onoffline                 Atom = 0x54809
	Ononline                  Atom = 0x55108
	Onpagehide                Atom = 0x5590a
	Onpageshow                Atom = 0x5730a
	Onpaste                   Atom = 0x57f07
	Onpause                   Atom = 0x59a07
	Onplay                    Atom = 0x5a406
	Onplaying                 Atom = 0x5a409
	Onpopstate                Atom = 0x5ad0a
	Onprogress                Atom = 0x5b70a
	Onratechange              Atom = 0x5cc0c
	Onrejectionhandled        Atom = 0x5d812
	Onreset                   Atom = 0x5ea07
	Onresize                  Atom = 0x5f108
	Onscroll                  Atom = 0x60008
	Onsecuritypolicyviolation Atom = 0x60819
	Onseeked                  Atom = 0x62908
	Onseeking                 Atom = 0x63109
	Onselect                  Atom = 0x63a08
	Onshow                    Atom = 0x64406
	Onsort                    Atom = 0x64f06
	Onstalled                 Atom = 0x65909
	Onstorage                 Atom = 0x66209
	Onsubmit                  Atom = 0x66b08
	Onsuspend                 Atom = 0x67b09
	Ontimeupdate              Atom = 0x400c
	Ontoggle                  Atom = 0x68408
	Onunhandledrejection      Atom = 0x68c14
	Onunload                  Atom = 0x6ab08
	Onvolumechange            Atom = 0x6b30e
	Onwaiting                 Atom = 0x6c109
	Onwheel                   Atom = 0x6ca07
	Open                      Atom = 0x1a304
	Optgroup                  Atom = 0x5f08
	Optimum                   Atom = 0x6d107
	Option                    Atom = 0x6e306
	Output                    Atom = 0x51d06
	P                         Atom = 0xc01
	Param                     Atom = 0xc05
	Pattern                   Atom = 0x6607
	Picture                   Atom = 0x7b07
	Ping                      Atom = 0xef04
	Placeholder               Atom = 0x1310b
	Plaintext                 Atom = 0x1b209
	Playsinline               Atom = 0x1400b
	Poster                    Atom = 0x2cf06
	Pre                       Atom = 0x47003
	Preload                   Atom = 0x48607
	Progress                  Atom = 0x5b908
	Prompt                    Atom = 0x53606
	Public                    Atom = 0x58606
	Q                         Atom = 0xcf01
	Radiogroup                Atom = 0x30a
	Rb                        Atom = 0x3a02
	Readonly                  Atom = 0x35708
	Referrerpolicy            Atom = 0x3d10e
	Rel                       Atom = 0x48703
	Required                  Atom = 0x24c08
	Reversed                  Atom = 0x8008
	Rows                      Atom = 0x9c04
	Rowspan                   Atom = 0x9c07
	Rp                        Atom = 0x23c02
	Rt                        Atom = 0x19a02
	Rtc                       Atom = 0x19a03
	Ruby                      Atom = 0xfb04
	S                         Atom = 0x2501
	Samp                      Atom = 0x7804
	Sandbox                   Atom = 0x12907
	Scope                     Atom = 0x67505
	Scoped                    Atom = 0x67506
	Script                    Atom = 0x21806
	Seamless                  Atom = 0x37108
	Section                   Atom = 0x56807
	Select                    Atom = 0x63c06
	Selected                  Atom = 0x63c08
	Shape                     Atom = 0x1e505
	Size                      Atom = 0x5f504
	Sizes                     Atom = 0x5f505
	Slot                      Atom = 0x1ef04
	Small                     Atom = 0x20605
	Sortable                  Atom = 0x65108
	Sorted                    Atom = 0x33706
	Source                    Atom = 0x37806
	Spacer                    Atom = 0x43706
	Span                      Atom = 0x9f04
	Spellcheck                Atom = 0x4740a
	Src                       Atom = 0x5c003
	Srcdoc                    Atom = 0x5c006
	Srclang                   Atom = 0x5f907
	Srcset                    Atom = 0x6f906
	Start                     Atom = 0x3fa05
	Step                      Atom = 0x58304
	Strike                    Atom = 0xd206
	Strong                    Atom = 0x6dd06
	Style                     Atom = 0x6ff05
	Sub                       Atom = 0x66d03
	Summary                   Atom = 0x70407
	Sup                       Atom = 0x70b03
	Svg                       Atom = 0x70e03
	System                    Atom = 0x71106
	Tabindex                  Atom = 0x4be08
	Table                     Atom = 0x59505
	Target                    Atom = 0x2c406
	Tbody                     Atom = 0x2705
	Td                        Atom = 0x9202
	Template                  Atom = 0x71408
	Textarea                  Atom = 0x35208
	Tfoot                     Atom = 0xf505
	Th                        Atom = 0x15602
	Thead                     Atom = 0x33005
	Time                      Atom = 0x4204
	Title                     Atom = 0x11005
	Tr                        Atom = 0xcc02
	Track                     Atom = 0x1ba05
	Translate                 Atom = 0x1f209
	Tt                        Atom = 0x6802
	Type                      Atom = 0xd904
	Typemustmatch             Atom = 0x2900d
	U                         Atom = 0xb01
	Ul                        Atom = 0xa702
	Updateviacache            Atom = 0x460e
	Usemap                    Atom = 0x59e06
	Value                     Atom = 0x1505
	Var                       Atom = 0x16d03
	Video                     Atom = 0x2f105
	Wbr                       Atom = 0x57c03
	Width                     Atom = 0x64905
	Workertype                Atom = 0x71c0a
	Wrap                      Atom = 0x72604
	Xmp                       Atom = 0x12f03
)

const hash0 = 0x81cdf10e

const maxAtomLen = 25

var table = [1 << 9]Atom{
	0x1:   0xe60a,  // mediagroup
	0x2:   0x2e404, // lang
	0x4:   0x2c09,  // accesskey
	0x5:   0x8b08,  // frameset
	0x7:   0x63a08, // onselect
	0x8:   0x71106, // system
	0xa:   0x64905, // width
	0xc:   0x2890b, // formenctype
	0xd:   0x13702, // ol
	0xe:   0x3970b, // oncuechange
	0x10:  0x14b03, // bdo
	0x11:  0x11505, // audio
	0x12:  0x17a09, // draggable
	0x14:  0x2f105, // video
	0x15:  0x2b102, // mn
	0x16:  0x38704, // menu
	0x17:  0x2cf06, // poster
	0x19:  0xf606,  // footer
	0x1a:  0x2a806, // method
	0x1b:  0x2b808, // datetime
	0x1c:  0x19507, // onabort
	0x1d:  0x460e,  // updateviacache
	0x1e:  0xff05,  // async
	0x1f:  0x49d06, // onload
	0x21:  0x11908, // oncancel
	0x22:  0x62908, // onseeked
	0x23:  0x30205, // image
	0x24:  0x5d812, // onrejectionhandled
	0x26:  0x17404, // link
	0x27:  0x51d06, // output
	0x28:  0x33104, // head
	0x29:  0x4ff0c, // onmouseleave
	0x2a:  0x57f07, // onpaste
	0x2b:  0x5a409, // onplaying
	0x2c:  0x1c407, // colspan
	0x2f:  0x1bf05, // color
	0x30:  0x5f504, // size
	0x31:  0x2e80a, // http-equiv
	0x33:  0x601,   // i
	0x34:  0x5590a, // onpagehide
	0x35:  0x68c14, // onunhandledrejection
	0x37:  0x42a07, // onerror
	0x3a:  0x3b08,  // basefont
	0x3f:  0x1303,  // nav
	0x40:  0x17704, // kind
	0x41:  0x35708, // readonly
	0x42:  0x30806, // mglyph
	0x44:  0xb202,  // li
	0x46:  0x2d506, // hidden
	0x47:  0x70e03, // svg
	0x48:  0x58304, // step
	0x49:  0x23f09, // integrity
	0x4a:  0x58606, // public
	0x4c:  0x1ab03, // col
	0x4d:  0x1870a, // blockquote
	0x4e:  0x34f02, // h5
	0x50:  0x5b908, // progress
	0x51:  0x5f505, // sizes
	0x52:  0x34502, // h4
	0x56:  0x33005, // thead
	0x57:  0xd607,  // keytype
	0x58:  0x5b70a, // onprogress
	0x59:  0x44b09, // inputmode
	0x5a:  0x3b109, // ondragend
	0x5d:  0x3a205, // oncut
	0x5e:  0x43706, // spacer
	0x5f:  0x1ab08, // colgroup
	0x62:  0x16502, // is
	0x65:  0x3c02,  // as
	0x66:  0x54809, // onoffline
	0x67:  0x33706, // sorted
	0x69:  0x48d10, // onlanguagechange
	0x6c:  0x43d0c, // onhashchange
	0x6d:  0x9604,  // name
	0x6e:  0xf505,  // tfoot
	0x6f:  0x56104, // desc
	0x70:  0x33d03, // max
	0x72:  0x1ea06, // coords
	0x73:  0x30d02, // h3
	0x74:  0x6e70e, // onbeforeunload
	0x75:  0x9c04,  // rows
	0x76:  0x63c06, // select
	0x77:  0x9805,  // meter
	0x78:  0x38b06, // itemid
	0x79:  0x53c0c, // onmousewheel
	0x7a:  0x5c006, // srcdoc
	0x7d:  0x1ba05, // track
	0x7f:  0x31f08, // itemtype
	0x82:  0xa402,  // mo
	0x83:  0x41b08, // onchange
	0x84:  0x33107, // headers
	0x85:  0x5cc0c, // onratechange
	0x86:  0x60819, // onsecuritypolicyviolation
	0x88:  0x4a508, // datalist
	0x89:  0x4e80b, // onmousedown
	0x8a:  0x1ef04, // slot
	0x8b:  0x4b010, // onloadedmetadata
	0x8c:  0x1a06,  // accept
	0x8d:  0x26806, // object
	0x91:  0x6b30e, // onvolumechange
	0x92:  0x2107,  // charset
	0x93:  0x27613, // onautocompleteerror
	0x94:  0xc113,  // allowpaymentrequest
	0x95:  0x2804,  // body
	0x96:  0x10a07, // default
	0x97:  0x63c08, // selected
	0x98:  0x21e04, // face
	0x99:  0x1e505, // shape
	0x9b:  0x68408, // ontoggle
	0x9e:  0x64b02, // dt
	0x9f:  0xb604,  // mark
	0xa1:  0xb01,   // u
	0xa4:  0x6ab08, // onunload
	0xa5:  0x5d04,  // loop
	0xa6:  0x16408, // disabled
	0xaa:  0x42307, // onended
	0xab:  0xb00a,  // malignmark
	0xad:  0x67b09, // onsuspend
	0xae:  0x35105, // mtext
	0xaf:  0x64f06, // onsort
	0xb0:  0x19d08, // itemprop
	0xb3:  0x67109, // itemscope
	0xb4:  0x17305, // blink
	0xb6:  0x3b106, // ondrag
	0xb7:  0xa702,  // ul
	0xb8:  0x26e04, // form
	0xb9:  0x12907, // sandbox
	0xba:  0x8b05,  // frame
	0xbb:  0x1505,  // value
	0xbc:  0x66209, // onstorage
	0xbf:  0xaa07,  // acronym
	0xc0:  0x19a02, // rt
	0xc2:  0x202,   // br
	0xc3:  0x22608, // fieldset
	0xc4:  0x2900d, // typemustmatch
	0xc5:  0xa208,  // nomodule
	0xc6:  0x6c07,  // noembed
	0xc7:  0x69e0d, // onbeforeprint
	0xc8:  0x19106, // button
	0xc9:  0x2f507, // onclick
	0xca:  0x70407, // summary
	0xcd:  0xfb04,  // ruby
	0xce:  0x56405, // class
	0xcf:  0x3f40b, // ondragstart
	0xd0:  0x23107, // caption
	0xd4:  0xdd0e,  // allowusermedia
	0xd5:  0x4cf0b, // onloadstart
	0xd9:  0x16b03, // div
	0xda:  0x4a904, // list
	0xdb:  0x32e04, // math
	0xdc:  0x44b05, // input
	0xdf:  0x3ea0a, // ondragover
	0xe0:  0x2de02, // h2
	0xe2:  0x1b209, // plaintext
	0xe4:  0x4f30c, // onmouseenter
	0xe7:  0x47907, // checked
	0xe8:  0x47003, // pre
	0xea:  0x35f08, // multiple
	0xeb:  0xba03,  // bdi
	0xec:  0x33d09, // maxlength
	0xed:  0xcf01,  // q
	0xee:  0x61f0a, // onauxclick
	0xf0:  0x57c03, // wbr
	0xf2:  0x3b04,  // base
	0xf3:  0x6e306, // option
	0xf5:  0x41310, // ondurationchange
	0xf7:  0x8908,  // noframes
	0xf9:  0x40508, // dropzone
	0xfb:  0x67505, // scope
	0xfc:  0x8008,  // reversed
	0xfd:  0x3ba0b, // ondragenter
	0xfe:  0x3fa05, // start
	0xff:  0x12f03, // xmp
	0x100: 0x5f907, // srclang
	0x101: 0x30703, // img
	0x104: 0x101,   // b
	0x105: 0x25403, // for
	0x106: 0x10705, // aside
	0x107: 0x44907, // oninput
	0x108: 0x35604, // area
	0x109: 0x2a40a, // formmethod
	0x10a: 0x72604, // wrap
	0x10c: 0x23c02, // rp
	0x10d: 0x46b0a, // onkeypress
	0x10e: 0x6802,  // tt
	0x110: 0x34702, // mi
	0x111: 0x36705, // muted
	0x112: 0xf303,  // alt
	0x113: 0x5c504, // code
	0x114: 0x6e02,  // em
	0x115: 0x3c50a, // ondragexit
	0x117: 0x9f04,  // span
	0x119: 0x6d708, // manifest
	0x11a: 0x38708, // menuitem
	0x11b: 0x58b07, // content
	0x11d: 0x6c109, // onwaiting
	0x11f: 0x4c609, // onloadend
	0x121: 0x37e0d, // oncontextmenu
	0x123: 0x56d06, // onblur
	0x124: 0x3fc07, // article
	0x125: 0x9303,  // dir
	0x126: 0xef04,  // ping
	0x127: 0x24c08, // required
	0x128: 0x45509, // oninvalid
	0x129: 0xb105,  // align
	0x12b: 0x58a04, // icon
	0x12c: 0x64d02, // h6
	0x12d: 0x1c404, // cols
	0x12e: 0x22e0a, // figcaption
	0x12f: 0x45e09, // onkeydown
	0x130: 0x66b08, // onsubmit
	0x131: 0x14d09, // oncanplay
	0x132: 0x70b03, // sup
	0x133: 0xc01,   // p
	0x135: 0x40a09, // onemptied
	0x136: 0x39106, // oncopy
	0x137: 0x19c04, // cite
	0x138: 0x3a70a, // ondblclick
	0x13a: 0x50b0b, // onmousemove
	0x13c: 0x66d03, // sub
	0x13d: 0x48703, // rel
	0x13e: 0x5f08,  // optgroup
	0x142: 0x9c07,  // rowspan
	0x143: 0x37806, // source
	0x144: 0x21608, // noscript
	0x145: 0x1a304, // open
	0x146: 0x20403, // ins
	0x147: 0x2540d, // foreignObject
	0x148: 0x5ad0a, // onpopstate
	0x14a: 0x28d07, // enctype
	0x14b: 0x2760e, // onautocomplete
	0x14c: 0x35208, // textarea
	0x14e: 0x2780c, // autocomplete
	0x14f: 0x15702, // hr
	0x150: 0x1de08, // controls
	0x151: 0x10902, // id
	0x153: 0x2360c, // onafterprint
	0x155: 0x2610d, // foreignobject
	0x156: 0x32707, // marquee
	0x157: 0x59a07, // onpause
	0x158: 0x5e602, // dl
	0x159: 0x5206,  // height
	0x15a: 0x34703, // min
	0x15b: 0x9307,  // dirname
	0x15c: 0x1f209, // translate
	0x15d: 0x5604,  // html
	0x15e: 0x34709, // minlength
	0x15f: 0x48607, // preload
	0x160: 0x71408, // template
	0x161: 0x3df0b, // ondragleave
	0x162: 0x3a02,  // rb
	0x164: 0x5c003, // src
	0x165: 0x6dd06, // strong
	0x167: 0x7804,  // samp
	0x168: 0x6f307, // address
	0x169: 0x55108, // ononline
	0x16b: 0x1310b, // placeholder
	0x16c: 0x2c406, // target
	0x16d: 0x20605, // small
	0x16e: 0x6ca07, // onwheel
	0x16f: 0x1c90a, // annotation
	0x170: 0x4740a, // spellcheck
	0x171: 0x7207,  // details
	0x172: 0x10306, // canvas
	0x173: 0x12109, // autofocus
	0x174: 0xc05,   // param
	0x176: 0x46308, // download
	0x177: 0x45203, // del
	0x178: 0x36c07, // onclose
	0x179: 0xb903,  // kbd
	0x17a: 0x31906, // applet
	0x17b: 0x2e004, // href
	0x17c: 0x5f108, // onresize
	0x17e: 0x49d0c, // onloadeddata
	0x180: 0xcc02,  // tr
	0x181: 0x2c00a, // formtarget
	0x182: 0x11005, // title
	0x183: 0x6ff05, // style
	0x184: 0xd206,  // strike
	0x185: 0x59e06, // usemap
	0x186: 0x2fc06, // iframe
	0x187: 0x1004,  // main
	0x189: 0x7b07,  // picture
	0x18c: 0x31605, // ismap
	0x18e: 0x4a504, // data
	0x18f: 0x5905,  // label
	0x191: 0x3d10e, // referrerpolicy
	0x192: 0x15602, // th
	0x194: 0x53606, // prompt
	0x195: 0x56807, // section
	0x197: 0x6d107, // optimum
	0x198: 0x2db04, // high
	0x199: 0x15c02, // h1
	0x19a: 0x65909, // onstalled
	0x19b: 0x16d03, // var
	0x19c: 0x4204,  // time
	0x19e: 0x67402, // ms
	0x19f: 0x33106, // header
	0x1a0: 0x4da09, // onmessage
	0x1a1: 0x1a605, // nonce
	0x1a2: 0x26e0a, // formaction
	0x1a3: 0x22006, // center
	0x1a4: 0x3704,  // nobr
	0x1a5: 0x59505, // table
	0x1a6: 0x4a907, // listing
	0x1a7: 0x18106, // legend
	0x1a9: 0x29b09, // challenge
	0x1aa: 0x24806, // figure
	0x1ab: 0xe605,  // media
	0x1ae: 0xd904,  // type
	0x1af: 0x3f04,  // font
	0x1b0: 0x4da0e, // onmessageerror
	0x1b1: 0x37108, // seamless
	0x1b2: 0x8703,  // dfn
	0x1b3: 0x5c705, // defer
	0x1b4: 0xc303,  // low
	0x1b5: 0x19a03, // rtc
	0x1b6: 0x5230b, // onmouseover
	0x1b7: 0x2b20a, // novalidate
	0x1b8: 0x71c0a, // workertype
	0x1ba: 0x3cd07, // itemref
	0x1bd: 0x1,     // a
	0x1be: 0x31803, // map
	0x1bf: 0x400c,  // ontimeupdate
	0x1c0: 0x15e07, // bgsound
	0x1c1: 0x3206,  // keygen
	0x1c2: 0x2705,  // tbody
	0x1c5: 0x64406, // onshow
	0x1c7: 0x2501,  // s
	0x1c8: 0x6607,  // pattern
	0x1cc: 0x14d10, // oncanplaythrough
	0x1ce: 0x2d702, // dd
	0x1cf: 0x6f906, // srcset
	0x1d0: 0x17003, // big
	0x1d2: 0x65108, // sortable
	0x1d3: 0x48007, // onkeyup
	0x1d5: 0x5a406, // onplay
	0x1d7: 0x4b804, // meta
	0x1d8: 0x40306, // ondrop
	0x1da: 0x60008, // onscroll
	0x1db: 0x1fb0b, // crossorigin
	0x1dc: 0x5730a, // onpageshow
	0x1dd: 0x4,     // abbr
	0x1de: 0x9202,  // td
	0x1df: 0x58b0f, // contenteditable
	0x1e0: 0x27206, // action
	0x1e1: 0x1400b, // playsinline
	0x1e2: 0x43107, // onfocus
	0x1e3: 0x2e008, // hreflang
	0x1e5: 0x5160a, // onmouseout
	0x1e6: 0x5ea07, // onreset
	0x1e7: 0x13c08, // autoplay
	0x1e8: 0x63109, // onseeking
	0x1ea: 0x67506, // scoped
	0x1ec: 0x30a,   // radiogroup
	0x1ee: 0x3800b, // contextmenu
	0x1ef: 0x52e09, // onmouseup
	0x1f1: 0x2ca06, // hgroup
	0x1f2: 0x2080f, // allowfullscreen
	0x1f3: 0x4be08, // tabindex
	0x1f6: 0x30f07, // isindex
	0x1f7: 0x1a0e,  // accept-charset
	0x1f8: 0x2ae0e, // formnovalidate
	0x1fb: 0x1c90e, // annotation-xml
	0x1fc: 0x6e05,  // embed
	0x1fd: 0x21806, // script
	0x1fe: 0xbb06,  // dialog
	0x1ff: 0x1d707, // command
}

const atomText = "abbradiogrouparamainavalueaccept-charsetbodyaccesskeygenobrb" +
	"asefontimeupdateviacacheightmlabelooptgroupatternoembedetail" +
	"sampictureversedfnoframesetdirnameterowspanomoduleacronymali" +
	"gnmarkbdialogallowpaymentrequestrikeytypeallowusermediagroup" +
	"ingaltfooterubyasyncanvasidefaultitleaudioncancelautofocusan" +
	"dboxmplaceholderautoplaysinlinebdoncanplaythrough1bgsoundisa" +
	"bledivarbigblinkindraggablegendblockquotebuttonabortcitempro" +
	"penoncecolgrouplaintextrackcolorcolspannotation-xmlcommandco" +
	"ntrolshapecoordslotranslatecrossoriginsmallowfullscreenoscri" +
	"ptfacenterfieldsetfigcaptionafterprintegrityfigurequiredfore" +
	"ignObjectforeignobjectformactionautocompleteerrorformenctype" +
	"mustmatchallengeformmethodformnovalidatetimeformtargethgroup" +
	"osterhiddenhigh2hreflanghttp-equivideonclickiframeimageimgly" +
	"ph3isindexismappletitemtypemarqueematheadersortedmaxlength4m" +
	"inlength5mtextareadonlymultiplemutedoncloseamlessourceoncont" +
	"extmenuitemidoncopyoncuechangeoncutondblclickondragendondrag" +
	"enterondragexitemreferrerpolicyondragleaveondragoverondragst" +
	"articleondropzonemptiedondurationchangeonendedonerroronfocus" +
	"paceronhashchangeoninputmodeloninvalidonkeydownloadonkeypres" +
	"spellcheckedonkeyupreloadonlanguagechangeonloadeddatalisting" +
	"onloadedmetadatabindexonloadendonloadstartonmessageerroronmo" +
	"usedownonmouseenteronmouseleaveonmousemoveonmouseoutputonmou" +
	"seoveronmouseupromptonmousewheelonofflineononlineonpagehides" +
	"classectionbluronpageshowbronpastepublicontenteditableonpaus" +
	"emaponplayingonpopstateonprogressrcdocodeferonratechangeonre" +
	"jectionhandledonresetonresizesrclangonscrollonsecuritypolicy" +
	"violationauxclickonseekedonseekingonselectedonshowidth6onsor" +
	"tableonstalledonstorageonsubmitemscopedonsuspendontoggleonun" +
	"handledrejectionbeforeprintonunloadonvolumechangeonwaitingon" +
	"wheeloptimumanifestrongoptionbeforeunloaddressrcsetstylesumm" +
	"arysupsvgsystemplateworkertypewrap"
  07070100000D41000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/golang.org/x/net/html/charset  07070100000D42000081A4000000000000000000000001645E367C0000183B000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/golang.org/x/net/html/charset/charset.go   // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package charset provides common text encodings for HTML documents.
//
// The mapping from encoding labels to encodings is defined at
// https://encoding.spec.whatwg.org/.
package charset // import "golang.org/x/net/html/charset"

import (
	"bytes"
	"fmt"
	"io"
	"mime"
	"strings"
	"unicode/utf8"

	"golang.org/x/net/html"
	"golang.org/x/text/encoding"
	"golang.org/x/text/encoding/charmap"
	"golang.org/x/text/encoding/htmlindex"
	"golang.org/x/text/transform"
)

// Lookup returns the encoding with the specified label, and its canonical
// name. It returns nil and the empty string if label is not one of the
// standard encodings for HTML. Matching is case-insensitive and ignores
// leading and trailing whitespace. Encoders will use HTML escape sequences for
// runes that are not supported by the character set.
func Lookup(label string) (e encoding.Encoding, name string) {
	e, err := htmlindex.Get(label)
	if err != nil {
		return nil, ""
	}
	name, _ = htmlindex.Name(e)
	return &htmlEncoding{e}, name
}

type htmlEncoding struct{ encoding.Encoding }

func (h *htmlEncoding) NewEncoder() *encoding.Encoder {
	// HTML requires a non-terminating legacy encoder. We use HTML escapes to
	// substitute unsupported code points.
	return encoding.HTMLEscapeUnsupported(h.Encoding.NewEncoder())
}

// DetermineEncoding determines the encoding of an HTML document by examining
// up to the first 1024 bytes of content and the declared Content-Type.
//
// See http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#determining-the-character-encoding
func DetermineEncoding(content []byte, contentType string) (e encoding.Encoding, name string, certain bool) {
	if len(content) > 1024 {
		content = content[:1024]
	}

	for _, b := range boms {
		if bytes.HasPrefix(content, b.bom) {
			e, name = Lookup(b.enc)
			return e, name, true
		}
	}

	if _, params, err := mime.ParseMediaType(contentType); err == nil {
		if cs, ok := params["charset"]; ok {
			if e, name = Lookup(cs); e != nil {
				return e, name, true
			}
		}
	}

	if len(content) > 0 {
		e, name = prescan(content)
		if e != nil {
			return e, name, false
		}
	}

	// Try to detect UTF-8.
	// First eliminate any partial rune at the end.
	for i := len(content) - 1; i >= 0 && i > len(content)-4; i-- {
		b := content[i]
		if b < 0x80 {
			break
		}
		if utf8.RuneStart(b) {
			content = content[:i]
			break
		}
	}
	hasHighBit := false
	for _, c := range content {
		if c >= 0x80 {
			hasHighBit = true
			break
		}
	}
	if hasHighBit && utf8.Valid(content) {
		return encoding.Nop, "utf-8", false
	}

	// TODO: change default depending on user's locale?
	return charmap.Windows1252, "windows-1252", false
}

// NewReader returns an io.Reader that converts the content of r to UTF-8.
// It calls DetermineEncoding to find out what r's encoding is.
func NewReader(r io.Reader, contentType string) (io.Reader, error) {
	preview := make([]byte, 1024)
	n, err := io.ReadFull(r, preview)
	switch {
	case err == io.ErrUnexpectedEOF:
		preview = preview[:n]
		r = bytes.NewReader(preview)
	case err != nil:
		return nil, err
	default:
		r = io.MultiReader(bytes.NewReader(preview), r)
	}

	if e, _, _ := DetermineEncoding(preview, contentType); e != encoding.Nop {
		r = transform.NewReader(r, e.NewDecoder())
	}
	return r, nil
}

// NewReaderLabel returns a reader that converts from the specified charset to
// UTF-8. It uses Lookup to find the encoding that corresponds to label, and
// returns an error if Lookup returns nil. It is suitable for use as
// encoding/xml.Decoder's CharsetReader function.
func NewReaderLabel(label string, input io.Reader) (io.Reader, error) {
	e, _ := Lookup(label)
	if e == nil {
		return nil, fmt.Errorf("unsupported charset: %q", label)
	}
	return transform.NewReader(input, e.NewDecoder()), nil
}

func prescan(content []byte) (e encoding.Encoding, name string) {
	z := html.NewTokenizer(bytes.NewReader(content))
	for {
		switch z.Next() {
		case html.ErrorToken:
			return nil, ""

		case html.StartTagToken, html.SelfClosingTagToken:
			tagName, hasAttr := z.TagName()
			if !bytes.Equal(tagName, []byte("meta")) {
				continue
			}
			attrList := make(map[string]bool)
			gotPragma := false

			const (
				dontKnow = iota
				doNeedPragma
				doNotNeedPragma
			)
			needPragma := dontKnow

			name = ""
			e = nil
			for hasAttr {
				var key, val []byte
				key, val, hasAttr = z.TagAttr()
				ks := string(key)
				if attrList[ks] {
					continue
				}
				attrList[ks] = true
				for i, c := range val {
					if 'A' <= c && c <= 'Z' {
						val[i] = c + 0x20
					}
				}

				switch ks {
				case "http-equiv":
					if bytes.Equal(val, []byte("content-type")) {
						gotPragma = true
					}

				case "content":
					if e == nil {
						name = fromMetaElement(string(val))
						if name != "" {
							e, name = Lookup(name)
							if e != nil {
								needPragma = doNeedPragma
							}
						}
					}

				case "charset":
					e, name = Lookup(string(val))
					needPragma = doNotNeedPragma
				}
			}

			if needPragma == dontKnow || needPragma == doNeedPragma && !gotPragma {
				continue
			}

			if strings.HasPrefix(name, "utf-16") {
				name = "utf-8"
				e = encoding.Nop
			}

			if e != nil {
				return e, name
			}
		}
	}
}

func fromMetaElement(s string) string {
	for s != "" {
		csLoc := strings.Index(s, "charset")
		if csLoc == -1 {
			return ""
		}
		s = s[csLoc+len("charset"):]
		s = strings.TrimLeft(s, " \t\n\f\r")
		if !strings.HasPrefix(s, "=") {
			continue
		}
		s = s[1:]
		s = strings.TrimLeft(s, " \t\n\f\r")
		if s == "" {
			return ""
		}
		if q := s[0]; q == '"' || q == '\'' {
			s = s[1:]
			closeQuote := strings.IndexRune(s, rune(q))
			if closeQuote == -1 {
				return ""
			}
			return s[:closeQuote]
		}

		end := strings.IndexAny(s, "; \t\n\f\r")
		if end == -1 {
			end = len(s)
		}
		return s[:end]
	}
	return ""
}

var boms = []struct {
	bom []byte
	enc string
}{
	{[]byte{0xfe, 0xff}, "utf-16be"},
	{[]byte{0xff, 0xfe}, "utf-16le"},
	{[]byte{0xef, 0xbb, 0xbf}, "utf-8"},
}
 07070100000D43000081A4000000000000000000000001645E367C00000A2C000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/golang.org/x/net/html/const.go // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package html

// Section 12.2.4.2 of the HTML5 specification says "The following elements
// have varying levels of special parsing rules".
// https://html.spec.whatwg.org/multipage/syntax.html#the-stack-of-open-elements
var isSpecialElementMap = map[string]bool{
	"address":    true,
	"applet":     true,
	"area":       true,
	"article":    true,
	"aside":      true,
	"base":       true,
	"basefont":   true,
	"bgsound":    true,
	"blockquote": true,
	"body":       true,
	"br":         true,
	"button":     true,
	"caption":    true,
	"center":     true,
	"col":        true,
	"colgroup":   true,
	"dd":         true,
	"details":    true,
	"dir":        true,
	"div":        true,
	"dl":         true,
	"dt":         true,
	"embed":      true,
	"fieldset":   true,
	"figcaption": true,
	"figure":     true,
	"footer":     true,
	"form":       true,
	"frame":      true,
	"frameset":   true,
	"h1":         true,
	"h2":         true,
	"h3":         true,
	"h4":         true,
	"h5":         true,
	"h6":         true,
	"head":       true,
	"header":     true,
	"hgroup":     true,
	"hr":         true,
	"html":       true,
	"iframe":     true,
	"img":        true,
	"input":      true,
	"keygen":     true, // "keygen" has been removed from the spec, but are kept here for backwards compatibility.
	"li":         true,
	"link":       true,
	"listing":    true,
	"main":       true,
	"marquee":    true,
	"menu":       true,
	"meta":       true,
	"nav":        true,
	"noembed":    true,
	"noframes":   true,
	"noscript":   true,
	"object":     true,
	"ol":         true,
	"p":          true,
	"param":      true,
	"plaintext":  true,
	"pre":        true,
	"script":     true,
	"section":    true,
	"select":     true,
	"source":     true,
	"style":      true,
	"summary":    true,
	"table":      true,
	"tbody":      true,
	"td":         true,
	"template":   true,
	"textarea":   true,
	"tfoot":      true,
	"th":         true,
	"thead":      true,
	"title":      true,
	"tr":         true,
	"track":      true,
	"ul":         true,
	"wbr":        true,
	"xmp":        true,
}

func isSpecialElement(element *Node) bool {
	switch element.Namespace {
	case "", "html":
		return isSpecialElementMap[element.Data]
	case "math":
		switch element.Data {
		case "mi", "mo", "mn", "ms", "mtext", "annotation-xml":
			return true
		}
	case "svg":
		switch element.Data {
		case "foreignObject", "desc", "title":
			return true
		}
	}
	return false
}
07070100000D44000081A4000000000000000000000001645E367C0000102E000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/golang.org/x/net/html/doc.go   // Copyright 2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

/*
Package html implements an HTML5-compliant tokenizer and parser.

Tokenization is done by creating a Tokenizer for an io.Reader r. It is the
caller's responsibility to ensure that r provides UTF-8 encoded HTML.

	z := html.NewTokenizer(r)

Given a Tokenizer z, the HTML is tokenized by repeatedly calling z.Next(),
which parses the next token and returns its type, or an error:

	for {
		tt := z.Next()
		if tt == html.ErrorToken {
			// ...
			return ...
		}
		// Process the current token.
	}

There are two APIs for retrieving the current token. The high-level API is to
call Token; the low-level API is to call Text or TagName / TagAttr. Both APIs
allow optionally calling Raw after Next but before Token, Text, TagName, or
TagAttr. In EBNF notation, the valid call sequence per token is:

	Next {Raw} [ Token | Text | TagName {TagAttr} ]

Token returns an independent data structure that completely describes a token.
Entities (such as "&lt;") are unescaped, tag names and attribute keys are
lower-cased, and attributes are collected into a []Attribute. For example:

	for {
		if z.Next() == html.ErrorToken {
			// Returning io.EOF indicates success.
			return z.Err()
		}
		emitToken(z.Token())
	}

The low-level API performs fewer allocations and copies, but the contents of
the []byte values returned by Text, TagName and TagAttr may change on the next
call to Next. For example, to extract an HTML page's anchor text:

	depth := 0
	for {
		tt := z.Next()
		switch tt {
		case html.ErrorToken:
			return z.Err()
		case html.TextToken:
			if depth > 0 {
				// emitBytes should copy the []byte it receives,
				// if it doesn't process it immediately.
				emitBytes(z.Text())
			}
		case html.StartTagToken, html.EndTagToken:
			tn, _ := z.TagName()
			if len(tn) == 1 && tn[0] == 'a' {
				if tt == html.StartTagToken {
					depth++
				} else {
					depth--
				}
			}
		}
	}

Parsing is done by calling Parse with an io.Reader, which returns the root of
the parse tree (the document element) as a *Node. It is the caller's
responsibility to ensure that the Reader provides UTF-8 encoded HTML. For
example, to process each anchor node in depth-first order:

	doc, err := html.Parse(r)
	if err != nil {
		// ...
	}
	var f func(*html.Node)
	f = func(n *html.Node) {
		if n.Type == html.ElementNode && n.Data == "a" {
			// Do something with n...
		}
		for c := n.FirstChild; c != nil; c = c.NextSibling {
			f(c)
		}
	}
	f(doc)

The relevant specifications include:
https://html.spec.whatwg.org/multipage/syntax.html and
https://html.spec.whatwg.org/multipage/syntax.html#tokenization

# Security Considerations

Care should be taken when parsing and interpreting HTML, whether full documents
or fragments, within the framework of the HTML specification, especially with
regard to untrusted inputs.

This package provides both a tokenizer and a parser. Only the parser constructs
a DOM according to the HTML specification, resolving malformed and misplaced
tags where appropriate. The tokenizer simply tokenizes the HTML presented to it,
and as such does not resolve issues that may exist in the processed HTML,
producing a literal interpretation of the input.

If your use case requires semantically well-formed HTML, as defined by the
WHATWG specification, the parser should be used rather than the tokenizer.
*/
package html // import "golang.org/x/net/html"

// The tokenization algorithm implemented by this package is not a line-by-line
// transliteration of the relatively verbose state-machine in the WHATWG
// specification. A more direct approach is used instead, where the program
// counter implies the state, such as whether it is tokenizing a tag or a text
// node. Specification compliance is verified by checking expected and actual
// outputs over a test suite rather than aiming for algorithmic fidelity.

// TODO(nigeltao): Does a DOM API belong in this package or a separate one?
// TODO(nigeltao): How does parsing interact with a JavaScript engine?
  07070100000D45000081A4000000000000000000000001645E367C0000133D000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/golang.org/x/net/html/doctype.go   // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package html

import (
	"strings"
)

// parseDoctype parses the data from a DoctypeToken into a name,
// public identifier, and system identifier. It returns a Node whose Type
// is DoctypeNode, whose Data is the name, and which has attributes
// named "system" and "public" for the two identifiers if they were present.
// quirks is whether the document should be parsed in "quirks mode".
func parseDoctype(s string) (n *Node, quirks bool) {
	n = &Node{Type: DoctypeNode}

	// Find the name.
	space := strings.IndexAny(s, whitespace)
	if space == -1 {
		space = len(s)
	}
	n.Data = s[:space]
	// The comparison to "html" is case-sensitive.
	if n.Data != "html" {
		quirks = true
	}
	n.Data = strings.ToLower(n.Data)
	s = strings.TrimLeft(s[space:], whitespace)

	if len(s) < 6 {
		// It can't start with "PUBLIC" or "SYSTEM".
		// Ignore the rest of the string.
		return n, quirks || s != ""
	}

	key := strings.ToLower(s[:6])
	s = s[6:]
	for key == "public" || key == "system" {
		s = strings.TrimLeft(s, whitespace)
		if s == "" {
			break
		}
		quote := s[0]
		if quote != '"' && quote != '\'' {
			break
		}
		s = s[1:]
		q := strings.IndexRune(s, rune(quote))
		var id string
		if q == -1 {
			id = s
			s = ""
		} else {
			id = s[:q]
			s = s[q+1:]
		}
		n.Attr = append(n.Attr, Attribute{Key: key, Val: id})
		if key == "public" {
			key = "system"
		} else {
			key = ""
		}
	}

	if key != "" || s != "" {
		quirks = true
	} else if len(n.Attr) > 0 {
		if n.Attr[0].Key == "public" {
			public := strings.ToLower(n.Attr[0].Val)
			switch public {
			case "-//w3o//dtd w3 html strict 3.0//en//", "-/w3d/dtd html 4.0 transitional/en", "html":
				quirks = true
			default:
				for _, q := range quirkyIDs {
					if strings.HasPrefix(public, q) {
						quirks = true
						break
					}
				}
			}
			// The following two public IDs only cause quirks mode if there is no system ID.
			if len(n.Attr) == 1 && (strings.HasPrefix(public, "-//w3c//dtd html 4.01 frameset//") ||
				strings.HasPrefix(public, "-//w3c//dtd html 4.01 transitional//")) {
				quirks = true
			}
		}
		if lastAttr := n.Attr[len(n.Attr)-1]; lastAttr.Key == "system" &&
			strings.ToLower(lastAttr.Val) == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd" {
			quirks = true
		}
	}

	return n, quirks
}

// quirkyIDs is a list of public doctype identifiers that cause a document
// to be interpreted in quirks mode. The identifiers should be in lower case.
var quirkyIDs = []string{
	"+//silmaril//dtd html pro v0r11 19970101//",
	"-//advasoft ltd//dtd html 3.0 aswedit + extensions//",
	"-//as//dtd html 3.0 aswedit + extensions//",
	"-//ietf//dtd html 2.0 level 1//",
	"-//ietf//dtd html 2.0 level 2//",
	"-//ietf//dtd html 2.0 strict level 1//",
	"-//ietf//dtd html 2.0 strict level 2//",
	"-//ietf//dtd html 2.0 strict//",
	"-//ietf//dtd html 2.0//",
	"-//ietf//dtd html 2.1e//",
	"-//ietf//dtd html 3.0//",
	"-//ietf//dtd html 3.2 final//",
	"-//ietf//dtd html 3.2//",
	"-//ietf//dtd html 3//",
	"-//ietf//dtd html level 0//",
	"-//ietf//dtd html level 1//",
	"-//ietf//dtd html level 2//",
	"-//ietf//dtd html level 3//",
	"-//ietf//dtd html strict level 0//",
	"-//ietf//dtd html strict level 1//",
	"-//ietf//dtd html strict level 2//",
	"-//ietf//dtd html strict level 3//",
	"-//ietf//dtd html strict//",
	"-//ietf//dtd html//",
	"-//metrius//dtd metrius presentational//",
	"-//microsoft//dtd internet explorer 2.0 html strict//",
	"-//microsoft//dtd internet explorer 2.0 html//",
	"-//microsoft//dtd internet explorer 2.0 tables//",
	"-//microsoft//dtd internet explorer 3.0 html strict//",
	"-//microsoft//dtd internet explorer 3.0 html//",
	"-//microsoft//dtd internet explorer 3.0 tables//",
	"-//netscape comm. corp.//dtd html//",
	"-//netscape comm. corp.//dtd strict html//",
	"-//o'reilly and associates//dtd html 2.0//",
	"-//o'reilly and associates//dtd html extended 1.0//",
	"-//o'reilly and associates//dtd html extended relaxed 1.0//",
	"-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//",
	"-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//",
	"-//spyglass//dtd html 2.0 extended//",
	"-//sq//dtd html 2.0 hotmetal + extensions//",
	"-//sun microsystems corp.//dtd hotjava html//",
	"-//sun microsystems corp.//dtd hotjava strict html//",
	"-//w3c//dtd html 3 1995-03-24//",
	"-//w3c//dtd html 3.2 draft//",
	"-//w3c//dtd html 3.2 final//",
	"-//w3c//dtd html 3.2//",
	"-//w3c//dtd html 3.2s draft//",
	"-//w3c//dtd html 4.0 frameset//",
	"-//w3c//dtd html 4.0 transitional//",
	"-//w3c//dtd html experimental 19960712//",
	"-//w3c//dtd html experimental 970421//",
	"-//w3c//dtd w3 html//",
	"-//w3o//dtd w3 html 3.0//",
	"-//webtechs//dtd mozilla html 2.0//",
	"-//webtechs//dtd mozilla html//",
}
   07070100000D46000081A4000000000000000000000001645E367C0001BFA2000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/golang.org/x/net/html/entity.go    // Copyright 2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package html

// All entities that do not end with ';' are 6 or fewer bytes long.
const longestEntityWithoutSemicolon = 6

// entity is a map from HTML entity names to their values. The semicolon matters:
// https://html.spec.whatwg.org/multipage/syntax.html#named-character-references
// lists both "amp" and "amp;" as two separate entries.
//
// Note that the HTML5 list is larger than the HTML4 list at
// http://www.w3.org/TR/html4/sgml/entities.html
var entity = map[string]rune{
	"AElig;":                           '\U000000C6',
	"AMP;":                             '\U00000026',
	"Aacute;":                          '\U000000C1',
	"Abreve;":                          '\U00000102',
	"Acirc;":                           '\U000000C2',
	"Acy;":                             '\U00000410',
	"Afr;":                             '\U0001D504',
	"Agrave;":                          '\U000000C0',
	"Alpha;":                           '\U00000391',
	"Amacr;":                           '\U00000100',
	"And;":                             '\U00002A53',
	"Aogon;":                           '\U00000104',
	"Aopf;":                            '\U0001D538',
	"ApplyFunction;":                   '\U00002061',
	"Aring;":                           '\U000000C5',
	"Ascr;":                            '\U0001D49C',
	"Assign;":                          '\U00002254',
	"Atilde;":                          '\U000000C3',
	"Auml;":                            '\U000000C4',
	"Backslash;":                       '\U00002216',
	"Barv;":                            '\U00002AE7',
	"Barwed;":                          '\U00002306',
	"Bcy;":                             '\U00000411',
	"Because;":                         '\U00002235',
	"Bernoullis;":                      '\U0000212C',
	"Beta;":                            '\U00000392',
	"Bfr;":                             '\U0001D505',
	"Bopf;":                            '\U0001D539',
	"Breve;":                           '\U000002D8',
	"Bscr;":                            '\U0000212C',
	"Bumpeq;":                          '\U0000224E',
	"CHcy;":                            '\U00000427',
	"COPY;":                            '\U000000A9',
	"Cacute;":                          '\U00000106',
	"Cap;":                             '\U000022D2',
	"CapitalDifferentialD;":            '\U00002145',
	"Cayleys;":                         '\U0000212D',
	"Ccaron;":                          '\U0000010C',
	"Ccedil;":                          '\U000000C7',
	"Ccirc;":                           '\U00000108',
	"Cconint;":                         '\U00002230',
	"Cdot;":                            '\U0000010A',
	"Cedilla;":                         '\U000000B8',
	"CenterDot;":                       '\U000000B7',
	"Cfr;":                             '\U0000212D',
	"Chi;":                             '\U000003A7',
	"CircleDot;":                       '\U00002299',
	"CircleMinus;":                     '\U00002296',
	"CirclePlus;":                      '\U00002295',
	"CircleTimes;":                     '\U00002297',
	"ClockwiseContourIntegral;":        '\U00002232',
	"CloseCurlyDoubleQuote;":           '\U0000201D',
	"CloseCurlyQuote;":                 '\U00002019',
	"Colon;":                           '\U00002237',
	"Colone;":                          '\U00002A74',
	"Congruent;":                       '\U00002261',
	"Conint;":                          '\U0000222F',
	"ContourIntegral;":                 '\U0000222E',
	"Copf;":                            '\U00002102',
	"Coproduct;":                       '\U00002210',
	"CounterClockwiseContourIntegral;": '\U00002233',
	"Cross;":                           '\U00002A2F',
	"Cscr;":                            '\U0001D49E',
	"Cup;":                             '\U000022D3',
	"CupCap;":                          '\U0000224D',
	"DD;":                              '\U00002145',
	"DDotrahd;":                        '\U00002911',
	"DJcy;":                            '\U00000402',
	"DScy;":                            '\U00000405',
	"DZcy;":                            '\U0000040F',
	"Dagger;":                          '\U00002021',
	"Darr;":                            '\U000021A1',
	"Dashv;":                           '\U00002AE4',
	"Dcaron;":                          '\U0000010E',
	"Dcy;":                             '\U00000414',
	"Del;":                             '\U00002207',
	"Delta;":                           '\U00000394',
	"Dfr;":                             '\U0001D507',
	"DiacriticalAcute;":                '\U000000B4',
	"DiacriticalDot;":                  '\U000002D9',
	"DiacriticalDoubleAcute;":          '\U000002DD',
	"DiacriticalGrave;":                '\U00000060',
	"DiacriticalTilde;":                '\U000002DC',
	"Diamond;":                         '\U000022C4',
	"DifferentialD;":                   '\U00002146',
	"Dopf;":                            '\U0001D53B',
	"Dot;":                             '\U000000A8',
	"DotDot;":                          '\U000020DC',
	"DotEqual;":                        '\U00002250',
	"DoubleContourIntegral;":           '\U0000222F',
	"DoubleDot;":                       '\U000000A8',
	"DoubleDownArrow;":                 '\U000021D3',
	"DoubleLeftArrow;":                 '\U000021D0',
	"DoubleLeftRightArrow;":            '\U000021D4',
	"DoubleLeftTee;":                   '\U00002AE4',
	"DoubleLongLeftArrow;":             '\U000027F8',
	"DoubleLongLeftRightArrow;":        '\U000027FA',
	"DoubleLongRightArrow;":            '\U000027F9',
	"DoubleRightArrow;":                '\U000021D2',
	"DoubleRightTee;":                  '\U000022A8',
	"DoubleUpArrow;":                   '\U000021D1',
	"DoubleUpDownArrow;":               '\U000021D5',
	"DoubleVerticalBar;":               '\U00002225',
	"DownArrow;":                       '\U00002193',
	"DownArrowBar;":                    '\U00002913',
	"DownArrowUpArrow;":                '\U000021F5',
	"DownBreve;":                       '\U00000311',
	"DownLeftRightVector;":             '\U00002950',
	"DownLeftTeeVector;":               '\U0000295E',
	"DownLeftVector;":                  '\U000021BD',
	"DownLeftVectorBar;":               '\U00002956',
	"DownRightTeeVector;":              '\U0000295F',
	"DownRightVector;":                 '\U000021C1',
	"DownRightVectorBar;":              '\U00002957',
	"DownTee;":                         '\U000022A4',
	"DownTeeArrow;":                    '\U000021A7',
	"Downarrow;":                       '\U000021D3',
	"Dscr;":                            '\U0001D49F',
	"Dstrok;":                          '\U00000110',
	"ENG;":                             '\U0000014A',
	"ETH;":                             '\U000000D0',
	"Eacute;":                          '\U000000C9',
	"Ecaron;":                          '\U0000011A',
	"Ecirc;":                           '\U000000CA',
	"Ecy;":                             '\U0000042D',
	"Edot;":                            '\U00000116',
	"Efr;":                             '\U0001D508',
	"Egrave;":                          '\U000000C8',
	"Element;":                         '\U00002208',
	"Emacr;":                           '\U00000112',
	"EmptySmallSquare;":                '\U000025FB',
	"EmptyVerySmallSquare;":            '\U000025AB',
	"Eogon;":                           '\U00000118',
	"Eopf;":                            '\U0001D53C',
	"Epsilon;":                         '\U00000395',
	"Equal;":                           '\U00002A75',
	"EqualTilde;":                      '\U00002242',
	"Equilibrium;":                     '\U000021CC',
	"Escr;":                            '\U00002130',
	"Esim;":                            '\U00002A73',
	"Eta;":                             '\U00000397',
	"Euml;":                            '\U000000CB',
	"Exists;":                          '\U00002203',
	"ExponentialE;":                    '\U00002147',
	"Fcy;":                             '\U00000424',
	"Ffr;":                             '\U0001D509',
	"FilledSmallSquare;":               '\U000025FC',
	"FilledVerySmallSquare;":           '\U000025AA',
	"Fopf;":                            '\U0001D53D',
	"ForAll;":                          '\U00002200',
	"Fouriertrf;":                      '\U00002131',
	"Fscr;":                            '\U00002131',
	"GJcy;":                            '\U00000403',
	"GT;":                              '\U0000003E',
	"Gamma;":                           '\U00000393',
	"Gammad;":                          '\U000003DC',
	"Gbreve;":                          '\U0000011E',
	"Gcedil;":                          '\U00000122',
	"Gcirc;":                           '\U0000011C',
	"Gcy;":                             '\U00000413',
	"Gdot;":                            '\U00000120',
	"Gfr;":                             '\U0001D50A',
	"Gg;":                              '\U000022D9',
	"Gopf;":                            '\U0001D53E',
	"GreaterEqual;":                    '\U00002265',
	"GreaterEqualLess;":                '\U000022DB',
	"GreaterFullEqual;":                '\U00002267',
	"GreaterGreater;":                  '\U00002AA2',
	"GreaterLess;":                     '\U00002277',
	"GreaterSlantEqual;":               '\U00002A7E',
	"GreaterTilde;":                    '\U00002273',
	"Gscr;":                            '\U0001D4A2',
	"Gt;":                              '\U0000226B',
	"HARDcy;":                          '\U0000042A',
	"Hacek;":                           '\U000002C7',
	"Hat;":                             '\U0000005E',
	"Hcirc;":                           '\U00000124',
	"Hfr;":                             '\U0000210C',
	"HilbertSpace;":                    '\U0000210B',
	"Hopf;":                            '\U0000210D',
	"HorizontalLine;":                  '\U00002500',
	"Hscr;":                            '\U0000210B',
	"Hstrok;":                          '\U00000126',
	"HumpDownHump;":                    '\U0000224E',
	"HumpEqual;":                       '\U0000224F',
	"IEcy;":                            '\U00000415',
	"IJlig;":                           '\U00000132',
	"IOcy;":                            '\U00000401',
	"Iacute;":                          '\U000000CD',
	"Icirc;":                           '\U000000CE',
	"Icy;":                             '\U00000418',
	"Idot;":                            '\U00000130',
	"Ifr;":                             '\U00002111',
	"Igrave;":                          '\U000000CC',
	"Im;":                              '\U00002111',
	"Imacr;":                           '\U0000012A',
	"ImaginaryI;":                      '\U00002148',
	"Implies;":                         '\U000021D2',
	"Int;":                             '\U0000222C',
	"Integral;":                        '\U0000222B',
	"Intersection;":                    '\U000022C2',
	"InvisibleComma;":                  '\U00002063',
	"InvisibleTimes;":                  '\U00002062',
	"Iogon;":                           '\U0000012E',
	"Iopf;":                            '\U0001D540',
	"Iota;":                            '\U00000399',
	"Iscr;":                            '\U00002110',
	"Itilde;":                          '\U00000128',
	"Iukcy;":                           '\U00000406',
	"Iuml;":                            '\U000000CF',
	"Jcirc;":                           '\U00000134',
	"Jcy;":                             '\U00000419',
	"Jfr;":                             '\U0001D50D',
	"Jopf;":                            '\U0001D541',
	"Jscr;":                            '\U0001D4A5',
	"Jsercy;":                          '\U00000408',
	"Jukcy;":                           '\U00000404',
	"KHcy;":                            '\U00000425',
	"KJcy;":                            '\U0000040C',
	"Kappa;":                           '\U0000039A',
	"Kcedil;":                          '\U00000136',
	"Kcy;":                             '\U0000041A',
	"Kfr;":                             '\U0001D50E',
	"Kopf;":                            '\U0001D542',
	"Kscr;":                            '\U0001D4A6',
	"LJcy;":                            '\U00000409',
	"LT;":                              '\U0000003C',
	"Lacute;":                          '\U00000139',
	"Lambda;":                          '\U0000039B',
	"Lang;":                            '\U000027EA',
	"Laplacetrf;":                      '\U00002112',
	"Larr;":                            '\U0000219E',
	"Lcaron;":                          '\U0000013D',
	"Lcedil;":                          '\U0000013B',
	"Lcy;":                             '\U0000041B',
	"LeftAngleBracket;":                '\U000027E8',
	"LeftArrow;":                       '\U00002190',
	"LeftArrowBar;":                    '\U000021E4',
	"LeftArrowRightArrow;":             '\U000021C6',
	"LeftCeiling;":                     '\U00002308',
	"LeftDoubleBracket;":               '\U000027E6',
	"LeftDownTeeVector;":               '\U00002961',
	"LeftDownVector;":                  '\U000021C3',
	"LeftDownVectorBar;":               '\U00002959',
	"LeftFloor;":                       '\U0000230A',
	"LeftRightArrow;":                  '\U00002194',
	"LeftRightVector;":                 '\U0000294E',
	"LeftTee;":                         '\U000022A3',
	"LeftTeeArrow;":                    '\U000021A4',
	"LeftTeeVector;":                   '\U0000295A',
	"LeftTriangle;":                    '\U000022B2',
	"LeftTriangleBar;":                 '\U000029CF',
	"LeftTriangleEqual;":               '\U000022B4',
	"LeftUpDownVector;":                '\U00002951',
	"LeftUpTeeVector;":                 '\U00002960',
	"LeftUpVector;":                    '\U000021BF',
	"LeftUpVectorBar;":                 '\U00002958',
	"LeftVector;":                      '\U000021BC',
	"LeftVectorBar;":                   '\U00002952',
	"Leftarrow;":                       '\U000021D0',
	"Leftrightarrow;":                  '\U000021D4',
	"LessEqualGreater;":                '\U000022DA',
	"LessFullEqual;":                   '\U00002266',
	"LessGreater;":                     '\U00002276',
	"LessLess;":                        '\U00002AA1',
	"LessSlantEqual;":                  '\U00002A7D',
	"LessTilde;":                       '\U00002272',
	"Lfr;":                             '\U0001D50F',
	"Ll;":                              '\U000022D8',
	"Lleftarrow;":                      '\U000021DA',
	"Lmidot;":                          '\U0000013F',
	"LongLeftArrow;":                   '\U000027F5',
	"LongLeftRightArrow;":              '\U000027F7',
	"LongRightArrow;":                  '\U000027F6',
	"Longleftarrow;":                   '\U000027F8',
	"Longleftrightarrow;":              '\U000027FA',
	"Longrightarrow;":                  '\U000027F9',
	"Lopf;":                            '\U0001D543',
	"LowerLeftArrow;":                  '\U00002199',
	"LowerRightArrow;":                 '\U00002198',
	"Lscr;":                            '\U00002112',
	"Lsh;":                             '\U000021B0',
	"Lstrok;":                          '\U00000141',
	"Lt;":                              '\U0000226A',
	"Map;":                             '\U00002905',
	"Mcy;":                             '\U0000041C',
	"MediumSpace;":                     '\U0000205F',
	"Mellintrf;":                       '\U00002133',
	"Mfr;":                             '\U0001D510',
	"MinusPlus;":                       '\U00002213',
	"Mopf;":                            '\U0001D544',
	"Mscr;":                            '\U00002133',
	"Mu;":                              '\U0000039C',
	"NJcy;":                            '\U0000040A',
	"Nacute;":                          '\U00000143',
	"Ncaron;":                          '\U00000147',
	"Ncedil;":                          '\U00000145',
	"Ncy;":                             '\U0000041D',
	"NegativeMediumSpace;":             '\U0000200B',
	"NegativeThickSpace;":              '\U0000200B',
	"NegativeThinSpace;":               '\U0000200B',
	"NegativeVeryThinSpace;":           '\U0000200B',
	"NestedGreaterGreater;":            '\U0000226B',
	"NestedLessLess;":                  '\U0000226A',
	"NewLine;":                         '\U0000000A',
	"Nfr;":                             '\U0001D511',
	"NoBreak;":                         '\U00002060',
	"NonBreakingSpace;":                '\U000000A0',
	"Nopf;":                            '\U00002115',
	"Not;":                             '\U00002AEC',
	"NotCongruent;":                    '\U00002262',
	"NotCupCap;":                       '\U0000226D',
	"NotDoubleVerticalBar;":            '\U00002226',
	"NotElement;":                      '\U00002209',
	"NotEqual;":                        '\U00002260',
	"NotExists;":                       '\U00002204',
	"NotGreater;":                      '\U0000226F',
	"NotGreaterEqual;":                 '\U00002271',
	"NotGreaterLess;":                  '\U00002279',
	"NotGreaterTilde;":                 '\U00002275',
	"NotLeftTriangle;":                 '\U000022EA',
	"NotLeftTriangleEqual;":            '\U000022EC',
	"NotLess;":                         '\U0000226E',
	"NotLessEqual;":                    '\U00002270',
	"NotLessGreater;":                  '\U00002278',
	"NotLessTilde;":                    '\U00002274',
	"NotPrecedes;":                     '\U00002280',
	"NotPrecedesSlantEqual;":           '\U000022E0',
	"NotReverseElement;":               '\U0000220C',
	"NotRightTriangle;":                '\U000022EB',
	"NotRightTriangleEqual;":           '\U000022ED',
	"NotSquareSubsetEqual;":            '\U000022E2',
	"NotSquareSupersetEqual;":          '\U000022E3',
	"NotSubsetEqual;":                  '\U00002288',
	"NotSucceeds;":                     '\U00002281',
	"NotSucceedsSlantEqual;":           '\U000022E1',
	"NotSupersetEqual;":                '\U00002289',
	"NotTilde;":                        '\U00002241',
	"NotTildeEqual;":                   '\U00002244',
	"NotTildeFullEqual;":               '\U00002247',
	"NotTildeTilde;":                   '\U00002249',
	"NotVerticalBar;":                  '\U00002224',
	"Nscr;":                            '\U0001D4A9',
	"Ntilde;":                          '\U000000D1',
	"Nu;":                              '\U0000039D',
	"OElig;":                           '\U00000152',
	"Oacute;":                          '\U000000D3',
	"Ocirc;":                           '\U000000D4',
	"Ocy;":                             '\U0000041E',
	"Odblac;":                          '\U00000150',
	"Ofr;":                             '\U0001D512',
	"Ograve;":                          '\U000000D2',
	"Omacr;":                           '\U0000014C',
	"Omega;":                           '\U000003A9',
	"Omicron;":                         '\U0000039F',
	"Oopf;":                            '\U0001D546',
	"OpenCurlyDoubleQuote;":            '\U0000201C',
	"OpenCurlyQuote;":                  '\U00002018',
	"Or;":                              '\U00002A54',
	"Oscr;":                            '\U0001D4AA',
	"Oslash;":                          '\U000000D8',
	"Otilde;":                          '\U000000D5',
	"Otimes;":                          '\U00002A37',
	"Ouml;":                            '\U000000D6',
	"OverBar;":                         '\U0000203E',
	"OverBrace;":                       '\U000023DE',
	"OverBracket;":                     '\U000023B4',
	"OverParenthesis;":                 '\U000023DC',
	"PartialD;":                        '\U00002202',
	"Pcy;":                             '\U0000041F',
	"Pfr;":                             '\U0001D513',
	"Phi;":                             '\U000003A6',
	"Pi;":                              '\U000003A0',
	"PlusMinus;":                       '\U000000B1',
	"Poincareplane;":                   '\U0000210C',
	"Popf;":                            '\U00002119',
	"Pr;":                              '\U00002ABB',
	"Precedes;":                        '\U0000227A',
	"PrecedesEqual;":                   '\U00002AAF',
	"PrecedesSlantEqual;":              '\U0000227C',
	"PrecedesTilde;":                   '\U0000227E',
	"Prime;":                           '\U00002033',
	"Product;":                         '\U0000220F',
	"Proportion;":                      '\U00002237',
	"Proportional;":                    '\U0000221D',
	"Pscr;":                            '\U0001D4AB',
	"Psi;":                             '\U000003A8',
	"QUOT;":                            '\U00000022',
	"Qfr;":                             '\U0001D514',
	"Qopf;":                            '\U0000211A',
	"Qscr;":                            '\U0001D4AC',
	"RBarr;":                           '\U00002910',
	"REG;":                             '\U000000AE',
	"Racute;":                          '\U00000154',
	"Rang;":                            '\U000027EB',
	"Rarr;":                            '\U000021A0',
	"Rarrtl;":                          '\U00002916',
	"Rcaron;":                          '\U00000158',
	"Rcedil;":                          '\U00000156',
	"Rcy;":                             '\U00000420',
	"Re;":                              '\U0000211C',
	"ReverseElement;":                  '\U0000220B',
	"ReverseEquilibrium;":              '\U000021CB',
	"ReverseUpEquilibrium;":            '\U0000296F',
	"Rfr;":                             '\U0000211C',
	"Rho;":                             '\U000003A1',
	"RightAngleBracket;":               '\U000027E9',
	"RightArrow;":                      '\U00002192',
	"RightArrowBar;":                   '\U000021E5',
	"RightArrowLeftArrow;":             '\U000021C4',
	"RightCeiling;":                    '\U00002309',
	"RightDoubleBracket;":              '\U000027E7',
	"RightDownTeeVector;":              '\U0000295D',
	"RightDownVector;":                 '\U000021C2',
	"RightDownVectorBar;":              '\U00002955',
	"RightFloor;":                      '\U0000230B',
	"RightTee;":                        '\U000022A2',
	"RightTeeArrow;":                   '\U000021A6',
	"RightTeeVector;":                  '\U0000295B',
	"RightTriangle;":                   '\U000022B3',
	"RightTriangleBar;":                '\U000029D0',
	"RightTriangleEqual;":              '\U000022B5',
	"RightUpDownVector;":               '\U0000294F',
	"RightUpTeeVector;":                '\U0000295C',
	"RightUpVector;":                   '\U000021BE',
	"RightUpVectorBar;":                '\U00002954',
	"RightVector;":                     '\U000021C0',
	"RightVectorBar;":                  '\U00002953',
	"Rightarrow;":                      '\U000021D2',
	"Ropf;":                            '\U0000211D',
	"RoundImplies;":                    '\U00002970',
	"Rrightarrow;":                     '\U000021DB',
	"Rscr;":                            '\U0000211B',
	"Rsh;":                             '\U000021B1',
	"RuleDelayed;":                     '\U000029F4',
	"SHCHcy;":                          '\U00000429',
	"SHcy;":                            '\U00000428',
	"SOFTcy;":                          '\U0000042C',
	"Sacute;":                          '\U0000015A',
	"Sc;":                              '\U00002ABC',
	"Scaron;":                          '\U00000160',
	"Scedil;":                          '\U0000015E',
	"Scirc;":                           '\U0000015C',
	"Scy;":                             '\U00000421',
	"Sfr;":                             '\U0001D516',
	"ShortDownArrow;":                  '\U00002193',
	"ShortLeftArrow;":                  '\U00002190',
	"ShortRightArrow;":                 '\U00002192',
	"ShortUpArrow;":                    '\U00002191',
	"Sigma;":                           '\U000003A3',
	"SmallCircle;":                     '\U00002218',
	"Sopf;":                            '\U0001D54A',
	"Sqrt;":                            '\U0000221A',
	"Square;":                          '\U000025A1',
	"SquareIntersection;":              '\U00002293',
	"SquareSubset;":                    '\U0000228F',
	"SquareSubsetEqual;":               '\U00002291',
	"SquareSuperset;":                  '\U00002290',
	"SquareSupersetEqual;":             '\U00002292',
	"SquareUnion;":                     '\U00002294',
	"Sscr;":                            '\U0001D4AE',
	"Star;":                            '\U000022C6',
	"Sub;":                             '\U000022D0',
	"Subset;":                          '\U000022D0',
	"SubsetEqual;":                     '\U00002286',
	"Succeeds;":                        '\U0000227B',
	"SucceedsEqual;":                   '\U00002AB0',
	"SucceedsSlantEqual;":              '\U0000227D',
	"SucceedsTilde;":                   '\U0000227F',
	"SuchThat;":                        '\U0000220B',
	"Sum;":                             '\U00002211',
	"Sup;":                             '\U000022D1',
	"Superset;":                        '\U00002283',
	"SupersetEqual;":                   '\U00002287',
	"Supset;":                          '\U000022D1',
	"THORN;":                           '\U000000DE',
	"TRADE;":                           '\U00002122',
	"TSHcy;":                           '\U0000040B',
	"TScy;":                            '\U00000426',
	"Tab;":                             '\U00000009',
	"Tau;":                             '\U000003A4',
	"Tcaron;":                          '\U00000164',
	"Tcedil;":                          '\U00000162',
	"Tcy;":                             '\U00000422',
	"Tfr;":                             '\U0001D517',
	"Therefore;":                       '\U00002234',
	"Theta;":                           '\U00000398',
	"ThinSpace;":                       '\U00002009',
	"Tilde;":                           '\U0000223C',
	"TildeEqual;":                      '\U00002243',
	"TildeFullEqual;":                  '\U00002245',
	"TildeTilde;":                      '\U00002248',
	"Topf;":                            '\U0001D54B',
	"TripleDot;":                       '\U000020DB',
	"Tscr;":                            '\U0001D4AF',
	"Tstrok;":                          '\U00000166',
	"Uacute;":                          '\U000000DA',
	"Uarr;":                            '\U0000219F',
	"Uarrocir;":                        '\U00002949',
	"Ubrcy;":                           '\U0000040E',
	"Ubreve;":                          '\U0000016C',
	"Ucirc;":                           '\U000000DB',
	"Ucy;":                             '\U00000423',
	"Udblac;":                          '\U00000170',
	"Ufr;":                             '\U0001D518',
	"Ugrave;":                          '\U000000D9',
	"Umacr;":                           '\U0000016A',
	"UnderBar;":                        '\U0000005F',
	"UnderBrace;":                      '\U000023DF',
	"UnderBracket;":                    '\U000023B5',
	"UnderParenthesis;":                '\U000023DD',
	"Union;":                           '\U000022C3',
	"UnionPlus;":                       '\U0000228E',
	"Uogon;":                           '\U00000172',
	"Uopf;":                            '\U0001D54C',
	"UpArrow;":                         '\U00002191',
	"UpArrowBar;":                      '\U00002912',
	"UpArrowDownArrow;":                '\U000021C5',
	"UpDownArrow;":                     '\U00002195',
	"UpEquilibrium;":                   '\U0000296E',
	"UpTee;":                           '\U000022A5',
	"UpTeeArrow;":                      '\U000021A5',
	"Uparrow;":                         '\U000021D1',
	"Updownarrow;":                     '\U000021D5',
	"UpperLeftArrow;":                  '\U00002196',
	"UpperRightArrow;":                 '\U00002197',
	"Upsi;":                            '\U000003D2',
	"Upsilon;":                         '\U000003A5',
	"Uring;":                           '\U0000016E',
	"Uscr;":                            '\U0001D4B0',
	"Utilde;":                          '\U00000168',
	"Uuml;":                            '\U000000DC',
	"VDash;":                           '\U000022AB',
	"Vbar;":                            '\U00002AEB',
	"Vcy;":                             '\U00000412',
	"Vdash;":                           '\U000022A9',
	"Vdashl;":                          '\U00002AE6',
	"Vee;":                             '\U000022C1',
	"Verbar;":                          '\U00002016',
	"Vert;":                            '\U00002016',
	"VerticalBar;":                     '\U00002223',
	"VerticalLine;":                    '\U0000007C',
	"VerticalSeparator;":               '\U00002758',
	"VerticalTilde;":                   '\U00002240',
	"VeryThinSpace;":                   '\U0000200A',
	"Vfr;":                             '\U0001D519',
	"Vopf;":                            '\U0001D54D',
	"Vscr;":                            '\U0001D4B1',
	"Vvdash;":                          '\U000022AA',
	"Wcirc;":                           '\U00000174',
	"Wedge;":                           '\U000022C0',
	"Wfr;":                             '\U0001D51A',
	"Wopf;":                            '\U0001D54E',
	"Wscr;":                            '\U0001D4B2',
	"Xfr;":                             '\U0001D51B',
	"Xi;":                              '\U0000039E',
	"Xopf;":                            '\U0001D54F',
	"Xscr;":                            '\U0001D4B3',
	"YAcy;":                            '\U0000042F',
	"YIcy;":                            '\U00000407',
	"YUcy;":                            '\U0000042E',
	"Yacute;":                          '\U000000DD',
	"Ycirc;":                           '\U00000176',
	"Ycy;":                             '\U0000042B',
	"Yfr;":                             '\U0001D51C',
	"Yopf;":                            '\U0001D550',
	"Yscr;":                            '\U0001D4B4',
	"Yuml;":                            '\U00000178',
	"ZHcy;":                            '\U00000416',
	"Zacute;":                          '\U00000179',
	"Zcaron;":                          '\U0000017D',
	"Zcy;":                             '\U00000417',
	"Zdot;":                            '\U0000017B',
	"ZeroWidthSpace;":                  '\U0000200B',
	"Zeta;":                            '\U00000396',
	"Zfr;":                             '\U00002128',
	"Zopf;":                            '\U00002124',
	"Zscr;":                            '\U0001D4B5',
	"aacute;":                          '\U000000E1',
	"abreve;":                          '\U00000103',
	"ac;":                              '\U0000223E',
	"acd;":                             '\U0000223F',
	"acirc;":                           '\U000000E2',
	"acute;":                           '\U000000B4',
	"acy;":                             '\U00000430',
	"aelig;":                           '\U000000E6',
	"af;":                              '\U00002061',
	"afr;":                             '\U0001D51E',
	"agrave;":                          '\U000000E0',
	"alefsym;":                         '\U00002135',
	"aleph;":                           '\U00002135',
	"alpha;":                           '\U000003B1',
	"amacr;":                           '\U00000101',
	"amalg;":                           '\U00002A3F',
	"amp;":                             '\U00000026',
	"and;":                             '\U00002227',
	"andand;":                          '\U00002A55',
	"andd;":                            '\U00002A5C',
	"andslope;":                        '\U00002A58',
	"andv;":                            '\U00002A5A',
	"ang;":                             '\U00002220',
	"ange;":                            '\U000029A4',
	"angle;":                           '\U00002220',
	"angmsd;":                          '\U00002221',
	"angmsdaa;":                        '\U000029A8',
	"angmsdab;":                        '\U000029A9',
	"angmsdac;":                        '\U000029AA',
	"angmsdad;":                        '\U000029AB',
	"angmsdae;":                        '\U000029AC',
	"angmsdaf;":                        '\U000029AD',
	"angmsdag;":                        '\U000029AE',
	"angmsdah;":                        '\U000029AF',
	"angrt;":                           '\U0000221F',
	"angrtvb;":                         '\U000022BE',
	"angrtvbd;":                        '\U0000299D',
	"angsph;":                          '\U00002222',
	"angst;":                           '\U000000C5',
	"angzarr;":                         '\U0000237C',
	"aogon;":                           '\U00000105',
	"aopf;":                            '\U0001D552',
	"ap;":                              '\U00002248',
	"apE;":                             '\U00002A70',
	"apacir;":                          '\U00002A6F',
	"ape;":                             '\U0000224A',
	"apid;":                            '\U0000224B',
	"apos;":                            '\U00000027',
	"approx;":                          '\U00002248',
	"approxeq;":                        '\U0000224A',
	"aring;":                           '\U000000E5',
	"ascr;":                            '\U0001D4B6',
	"ast;":                             '\U0000002A',
	"asymp;":                           '\U00002248',
	"asympeq;":                         '\U0000224D',
	"atilde;":                          '\U000000E3',
	"auml;":                            '\U000000E4',
	"awconint;":                        '\U00002233',
	"awint;":                           '\U00002A11',
	"bNot;":                            '\U00002AED',
	"backcong;":                        '\U0000224C',
	"backepsilon;":                     '\U000003F6',
	"backprime;":                       '\U00002035',
	"backsim;":                         '\U0000223D',
	"backsimeq;":                       '\U000022CD',
	"barvee;":                          '\U000022BD',
	"barwed;":                          '\U00002305',
	"barwedge;":                        '\U00002305',
	"bbrk;":                            '\U000023B5',
	"bbrktbrk;":                        '\U000023B6',
	"bcong;":                           '\U0000224C',
	"bcy;":                             '\U00000431',
	"bdquo;":                           '\U0000201E',
	"becaus;":                          '\U00002235',
	"because;":                         '\U00002235',
	"bemptyv;":                         '\U000029B0',
	"bepsi;":                           '\U000003F6',
	"bernou;":                          '\U0000212C',
	"beta;":                            '\U000003B2',
	"beth;":                            '\U00002136',
	"between;":                         '\U0000226C',
	"bfr;":                             '\U0001D51F',
	"bigcap;":                          '\U000022C2',
	"bigcirc;":                         '\U000025EF',
	"bigcup;":                          '\U000022C3',
	"bigodot;":                         '\U00002A00',
	"bigoplus;":                        '\U00002A01',
	"bigotimes;":                       '\U00002A02',
	"bigsqcup;":                        '\U00002A06',
	"bigstar;":                         '\U00002605',
	"bigtriangledown;":                 '\U000025BD',
	"bigtriangleup;":                   '\U000025B3',
	"biguplus;":                        '\U00002A04',
	"bigvee;":                          '\U000022C1',
	"bigwedge;":                        '\U000022C0',
	"bkarow;":                          '\U0000290D',
	"blacklozenge;":                    '\U000029EB',
	"blacksquare;":                     '\U000025AA',
	"blacktriangle;":                   '\U000025B4',
	"blacktriangledown;":               '\U000025BE',
	"blacktriangleleft;":               '\U000025C2',
	"blacktriangleright;":              '\U000025B8',
	"blank;":                           '\U00002423',
	"blk12;":                           '\U00002592',
	"blk14;":                           '\U00002591',
	"blk34;":                           '\U00002593',
	"block;":                           '\U00002588',
	"bnot;":                            '\U00002310',
	"bopf;":                            '\U0001D553',
	"bot;":                             '\U000022A5',
	"bottom;":                          '\U000022A5',
	"bowtie;":                          '\U000022C8',
	"boxDL;":                           '\U00002557',
	"boxDR;":                           '\U00002554',
	"boxDl;":                           '\U00002556',
	"boxDr;":                           '\U00002553',
	"boxH;":                            '\U00002550',
	"boxHD;":                           '\U00002566',
	"boxHU;":                           '\U00002569',
	"boxHd;":                           '\U00002564',
	"boxHu;":                           '\U00002567',
	"boxUL;":                           '\U0000255D',
	"boxUR;":                           '\U0000255A',
	"boxUl;":                           '\U0000255C',
	"boxUr;":                           '\U00002559',
	"boxV;":                            '\U00002551',
	"boxVH;":                           '\U0000256C',
	"boxVL;":                           '\U00002563',
	"boxVR;":                           '\U00002560',
	"boxVh;":                           '\U0000256B',
	"boxVl;":                           '\U00002562',
	"boxVr;":                           '\U0000255F',
	"boxbox;":                          '\U000029C9',
	"boxdL;":                           '\U00002555',
	"boxdR;":                           '\U00002552',
	"boxdl;":                           '\U00002510',
	"boxdr;":                           '\U0000250C',
	"boxh;":                            '\U00002500',
	"boxhD;":                           '\U00002565',
	"boxhU;":                           '\U00002568',
	"boxhd;":                           '\U0000252C',
	"boxhu;":                           '\U00002534',
	"boxminus;":                        '\U0000229F',
	"boxplus;":                         '\U0000229E',
	"boxtimes;":                        '\U000022A0',
	"boxuL;":                           '\U0000255B',
	"boxuR;":                           '\U00002558',
	"boxul;":                           '\U00002518',
	"boxur;":                           '\U00002514',
	"boxv;":                            '\U00002502',
	"boxvH;":                           '\U0000256A',
	"boxvL;":                           '\U00002561',
	"boxvR;":                           '\U0000255E',
	"boxvh;":                           '\U0000253C',
	"boxvl;":                           '\U00002524',
	"boxvr;":                           '\U0000251C',
	"bprime;":                          '\U00002035',
	"breve;":                           '\U000002D8',
	"brvbar;":                          '\U000000A6',
	"bscr;":                            '\U0001D4B7',
	"bsemi;":                           '\U0000204F',
	"bsim;":                            '\U0000223D',
	"bsime;":                           '\U000022CD',
	"bsol;":                            '\U0000005C',
	"bsolb;":                           '\U000029C5',
	"bsolhsub;":                        '\U000027C8',
	"bull;":                            '\U00002022',
	"bullet;":                          '\U00002022',
	"bump;":                            '\U0000224E',
	"bumpE;":                           '\U00002AAE',
	"bumpe;":                           '\U0000224F',
	"bumpeq;":                          '\U0000224F',
	"cacute;":                          '\U00000107',
	"cap;":                             '\U00002229',
	"capand;":                          '\U00002A44',
	"capbrcup;":                        '\U00002A49',
	"capcap;":                          '\U00002A4B',
	"capcup;":                          '\U00002A47',
	"capdot;":                          '\U00002A40',
	"caret;":                           '\U00002041',
	"caron;":                           '\U000002C7',
	"ccaps;":                           '\U00002A4D',
	"ccaron;":                          '\U0000010D',
	"ccedil;":                          '\U000000E7',
	"ccirc;":                           '\U00000109',
	"ccups;":                           '\U00002A4C',
	"ccupssm;":                         '\U00002A50',
	"cdot;":                            '\U0000010B',
	"cedil;":                           '\U000000B8',
	"cemptyv;":                         '\U000029B2',
	"cent;":                            '\U000000A2',
	"centerdot;":                       '\U000000B7',
	"cfr;":                             '\U0001D520',
	"chcy;":                            '\U00000447',
	"check;":                           '\U00002713',
	"checkmark;":                       '\U00002713',
	"chi;":                             '\U000003C7',
	"cir;":                             '\U000025CB',
	"cirE;":                            '\U000029C3',
	"circ;":                            '\U000002C6',
	"circeq;":                          '\U00002257',
	"circlearrowleft;":                 '\U000021BA',
	"circlearrowright;":                '\U000021BB',
	"circledR;":                        '\U000000AE',
	"circledS;":                        '\U000024C8',
	"circledast;":                      '\U0000229B',
	"circledcirc;":                     '\U0000229A',
	"circleddash;":                     '\U0000229D',
	"cire;":                            '\U00002257',
	"cirfnint;":                        '\U00002A10',
	"cirmid;":                          '\U00002AEF',
	"cirscir;":                         '\U000029C2',
	"clubs;":                           '\U00002663',
	"clubsuit;":                        '\U00002663',
	"colon;":                           '\U0000003A',
	"colone;":                          '\U00002254',
	"coloneq;":                         '\U00002254',
	"comma;":                           '\U0000002C',
	"commat;":                          '\U00000040',
	"comp;":                            '\U00002201',
	"compfn;":                          '\U00002218',
	"complement;":                      '\U00002201',
	"complexes;":                       '\U00002102',
	"cong;":                            '\U00002245',
	"congdot;":                         '\U00002A6D',
	"conint;":                          '\U0000222E',
	"copf;":                            '\U0001D554',
	"coprod;":                          '\U00002210',
	"copy;":                            '\U000000A9',
	"copysr;":                          '\U00002117',
	"crarr;":                           '\U000021B5',
	"cross;":                           '\U00002717',
	"cscr;":                            '\U0001D4B8',
	"csub;":                            '\U00002ACF',
	"csube;":                           '\U00002AD1',
	"csup;":                            '\U00002AD0',
	"csupe;":                           '\U00002AD2',
	"ctdot;":                           '\U000022EF',
	"cudarrl;":                         '\U00002938',
	"cudarrr;":                         '\U00002935',
	"cuepr;":                           '\U000022DE',
	"cuesc;":                           '\U000022DF',
	"cularr;":                          '\U000021B6',
	"cularrp;":                         '\U0000293D',
	"cup;":                             '\U0000222A',
	"cupbrcap;":                        '\U00002A48',
	"cupcap;":                          '\U00002A46',
	"cupcup;":                          '\U00002A4A',
	"cupdot;":                          '\U0000228D',
	"cupor;":                           '\U00002A45',
	"curarr;":                          '\U000021B7',
	"curarrm;":                         '\U0000293C',
	"curlyeqprec;":                     '\U000022DE',
	"curlyeqsucc;":                     '\U000022DF',
	"curlyvee;":                        '\U000022CE',
	"curlywedge;":                      '\U000022CF',
	"curren;":                          '\U000000A4',
	"curvearrowleft;":                  '\U000021B6',
	"curvearrowright;":                 '\U000021B7',
	"cuvee;":                           '\U000022CE',
	"cuwed;":                           '\U000022CF',
	"cwconint;":                        '\U00002232',
	"cwint;":                           '\U00002231',
	"cylcty;":                          '\U0000232D',
	"dArr;":                            '\U000021D3',
	"dHar;":                            '\U00002965',
	"dagger;":                          '\U00002020',
	"daleth;":                          '\U00002138',
	"darr;":                            '\U00002193',
	"dash;":                            '\U00002010',
	"dashv;":                           '\U000022A3',
	"dbkarow;":                         '\U0000290F',
	"dblac;":                           '\U000002DD',
	"dcaron;":                          '\U0000010F',
	"dcy;":                             '\U00000434',
	"dd;":                              '\U00002146',
	"ddagger;":                         '\U00002021',
	"ddarr;":                           '\U000021CA',
	"ddotseq;":                         '\U00002A77',
	"deg;":                             '\U000000B0',
	"delta;":                           '\U000003B4',
	"demptyv;":                         '\U000029B1',
	"dfisht;":                          '\U0000297F',
	"dfr;":                             '\U0001D521',
	"dharl;":                           '\U000021C3',
	"dharr;":                           '\U000021C2',
	"diam;":                            '\U000022C4',
	"diamond;":                         '\U000022C4',
	"diamondsuit;":                     '\U00002666',
	"diams;":                           '\U00002666',
	"die;":                             '\U000000A8',
	"digamma;":                         '\U000003DD',
	"disin;":                           '\U000022F2',
	"div;":                             '\U000000F7',
	"divide;":                          '\U000000F7',
	"divideontimes;":                   '\U000022C7',
	"divonx;":                          '\U000022C7',
	"djcy;":                            '\U00000452',
	"dlcorn;":                          '\U0000231E',
	"dlcrop;":                          '\U0000230D',
	"dollar;":                          '\U00000024',
	"dopf;":                            '\U0001D555',
	"dot;":                             '\U000002D9',
	"doteq;":                           '\U00002250',
	"doteqdot;":                        '\U00002251',
	"dotminus;":                        '\U00002238',
	"dotplus;":                         '\U00002214',
	"dotsquare;":                       '\U000022A1',
	"doublebarwedge;":                  '\U00002306',
	"downarrow;":                       '\U00002193',
	"downdownarrows;":                  '\U000021CA',
	"downharpoonleft;":                 '\U000021C3',
	"downharpoonright;":                '\U000021C2',
	"drbkarow;":                        '\U00002910',
	"drcorn;":                          '\U0000231F',
	"drcrop;":                          '\U0000230C',
	"dscr;":                            '\U0001D4B9',
	"dscy;":                            '\U00000455',
	"dsol;":                            '\U000029F6',
	"dstrok;":                          '\U00000111',
	"dtdot;":                           '\U000022F1',
	"dtri;":                            '\U000025BF',
	"dtrif;":                           '\U000025BE',
	"duarr;":                           '\U000021F5',
	"duhar;":                           '\U0000296F',
	"dwangle;":                         '\U000029A6',
	"dzcy;":                            '\U0000045F',
	"dzigrarr;":                        '\U000027FF',
	"eDDot;":                           '\U00002A77',
	"eDot;":                            '\U00002251',
	"eacute;":                          '\U000000E9',
	"easter;":                          '\U00002A6E',
	"ecaron;":                          '\U0000011B',
	"ecir;":                            '\U00002256',
	"ecirc;":                           '\U000000EA',
	"ecolon;":                          '\U00002255',
	"ecy;":                             '\U0000044D',
	"edot;":                            '\U00000117',
	"ee;":                              '\U00002147',
	"efDot;":                           '\U00002252',
	"efr;":                             '\U0001D522',
	"eg;":                              '\U00002A9A',
	"egrave;":                          '\U000000E8',
	"egs;":                             '\U00002A96',
	"egsdot;":                          '\U00002A98',
	"el;":                              '\U00002A99',
	"elinters;":                        '\U000023E7',
	"ell;":                             '\U00002113',
	"els;":                             '\U00002A95',
	"elsdot;":                          '\U00002A97',
	"emacr;":                           '\U00000113',
	"empty;":                           '\U00002205',
	"emptyset;":                        '\U00002205',
	"emptyv;":                          '\U00002205',
	"emsp;":                            '\U00002003',
	"emsp13;":                          '\U00002004',
	"emsp14;":                          '\U00002005',
	"eng;":                             '\U0000014B',
	"ensp;":                            '\U00002002',
	"eogon;":                           '\U00000119',
	"eopf;":                            '\U0001D556',
	"epar;":                            '\U000022D5',
	"eparsl;":                          '\U000029E3',
	"eplus;":                           '\U00002A71',
	"epsi;":                            '\U000003B5',
	"epsilon;":                         '\U000003B5',
	"epsiv;":                           '\U000003F5',
	"eqcirc;":                          '\U00002256',
	"eqcolon;":                         '\U00002255',
	"eqsim;":                           '\U00002242',
	"eqslantgtr;":                      '\U00002A96',
	"eqslantless;":                     '\U00002A95',
	"equals;":                          '\U0000003D',
	"equest;":                          '\U0000225F',
	"equiv;":                           '\U00002261',
	"equivDD;":                         '\U00002A78',
	"eqvparsl;":                        '\U000029E5',
	"erDot;":                           '\U00002253',
	"erarr;":                           '\U00002971',
	"escr;":                            '\U0000212F',
	"esdot;":                           '\U00002250',
	"esim;":                            '\U00002242',
	"eta;":                             '\U000003B7',
	"eth;":                             '\U000000F0',
	"euml;":                            '\U000000EB',
	"euro;":                            '\U000020AC',
	"excl;":                            '\U00000021',
	"exist;":                           '\U00002203',
	"expectation;":                     '\U00002130',
	"exponentiale;":                    '\U00002147',
	"fallingdotseq;":                   '\U00002252',
	"fcy;":                             '\U00000444',
	"female;":                          '\U00002640',
	"ffilig;":                          '\U0000FB03',
	"fflig;":                           '\U0000FB00',
	"ffllig;":                          '\U0000FB04',
	"ffr;":                             '\U0001D523',
	"filig;":                           '\U0000FB01',
	"flat;":                            '\U0000266D',
	"fllig;":                           '\U0000FB02',
	"fltns;":                           '\U000025B1',
	"fnof;":                            '\U00000192',
	"fopf;":                            '\U0001D557',
	"forall;":                          '\U00002200',
	"fork;":                            '\U000022D4',
	"forkv;":                           '\U00002AD9',
	"fpartint;":                        '\U00002A0D',
	"frac12;":                          '\U000000BD',
	"frac13;":                          '\U00002153',
	"frac14;":                          '\U000000BC',
	"frac15;":                          '\U00002155',
	"frac16;":                          '\U00002159',
	"frac18;":                          '\U0000215B',
	"frac23;":                          '\U00002154',
	"frac25;":                          '\U00002156',
	"frac34;":                          '\U000000BE',
	"frac35;":                          '\U00002157',
	"frac38;":                          '\U0000215C',
	"frac45;":                          '\U00002158',
	"frac56;":                          '\U0000215A',
	"frac58;":                          '\U0000215D',
	"frac78;":                          '\U0000215E',
	"frasl;":                           '\U00002044',
	"frown;":                           '\U00002322',
	"fscr;":                            '\U0001D4BB',
	"gE;":                              '\U00002267',
	"gEl;":                             '\U00002A8C',
	"gacute;":                          '\U000001F5',
	"gamma;":                           '\U000003B3',
	"gammad;":                          '\U000003DD',
	"gap;":                             '\U00002A86',
	"gbreve;":                          '\U0000011F',
	"gcirc;":                           '\U0000011D',
	"gcy;":                             '\U00000433',
	"gdot;":                            '\U00000121',
	"ge;":                              '\U00002265',
	"gel;":                             '\U000022DB',
	"geq;":                             '\U00002265',
	"geqq;":                            '\U00002267',
	"geqslant;":                        '\U00002A7E',
	"ges;":                             '\U00002A7E',
	"gescc;":                           '\U00002AA9',
	"gesdot;":                          '\U00002A80',
	"gesdoto;":                         '\U00002A82',
	"gesdotol;":                        '\U00002A84',
	"gesles;":                          '\U00002A94',
	"gfr;":                             '\U0001D524',
	"gg;":                              '\U0000226B',
	"ggg;":                             '\U000022D9',
	"gimel;":                           '\U00002137',
	"gjcy;":                            '\U00000453',
	"gl;":                              '\U00002277',
	"glE;":                             '\U00002A92',
	"gla;":                             '\U00002AA5',
	"glj;":                             '\U00002AA4',
	"gnE;":                             '\U00002269',
	"gnap;":                            '\U00002A8A',
	"gnapprox;":                        '\U00002A8A',
	"gne;":                             '\U00002A88',
	"gneq;":                            '\U00002A88',
	"gneqq;":                           '\U00002269',
	"gnsim;":                           '\U000022E7',
	"gopf;":                            '\U0001D558',
	"grave;":                           '\U00000060',
	"gscr;":                            '\U0000210A',
	"gsim;":                            '\U00002273',
	"gsime;":                           '\U00002A8E',
	"gsiml;":                           '\U00002A90',
	"gt;":                              '\U0000003E',
	"gtcc;":                            '\U00002AA7',
	"gtcir;":                           '\U00002A7A',
	"gtdot;":                           '\U000022D7',
	"gtlPar;":                          '\U00002995',
	"gtquest;":                         '\U00002A7C',
	"gtrapprox;":                       '\U00002A86',
	"gtrarr;":                          '\U00002978',
	"gtrdot;":                          '\U000022D7',
	"gtreqless;":                       '\U000022DB',
	"gtreqqless;":                      '\U00002A8C',
	"gtrless;":                         '\U00002277',
	"gtrsim;":                          '\U00002273',
	"hArr;":                            '\U000021D4',
	"hairsp;":                          '\U0000200A',
	"half;":                            '\U000000BD',
	"hamilt;":                          '\U0000210B',
	"hardcy;":                          '\U0000044A',
	"harr;":                            '\U00002194',
	"harrcir;":                         '\U00002948',
	"harrw;":                           '\U000021AD',
	"hbar;":                            '\U0000210F',
	"hcirc;":                           '\U00000125',
	"hearts;":                          '\U00002665',
	"heartsuit;":                       '\U00002665',
	"hellip;":                          '\U00002026',
	"hercon;":                          '\U000022B9',
	"hfr;":                             '\U0001D525',
	"hksearow;":                        '\U00002925',
	"hkswarow;":                        '\U00002926',
	"hoarr;":                           '\U000021FF',
	"homtht;":                          '\U0000223B',
	"hookleftarrow;":                   '\U000021A9',
	"hookrightarrow;":                  '\U000021AA',
	"hopf;":                            '\U0001D559',
	"horbar;":                          '\U00002015',
	"hscr;":                            '\U0001D4BD',
	"hslash;":                          '\U0000210F',
	"hstrok;":                          '\U00000127',
	"hybull;":                          '\U00002043',
	"hyphen;":                          '\U00002010',
	"iacute;":                          '\U000000ED',
	"ic;":                              '\U00002063',
	"icirc;":                           '\U000000EE',
	"icy;":                             '\U00000438',
	"iecy;":                            '\U00000435',
	"iexcl;":                           '\U000000A1',
	"iff;":                             '\U000021D4',
	"ifr;":                             '\U0001D526',
	"igrave;":                          '\U000000EC',
	"ii;":                              '\U00002148',
	"iiiint;":                          '\U00002A0C',
	"iiint;":                           '\U0000222D',
	"iinfin;":                          '\U000029DC',
	"iiota;":                           '\U00002129',
	"ijlig;":                           '\U00000133',
	"imacr;":                           '\U0000012B',
	"image;":                           '\U00002111',
	"imagline;":                        '\U00002110',
	"imagpart;":                        '\U00002111',
	"imath;":                           '\U00000131',
	"imof;":                            '\U000022B7',
	"imped;":                           '\U000001B5',
	"in;":                              '\U00002208',
	"incare;":                          '\U00002105',
	"infin;":                           '\U0000221E',
	"infintie;":                        '\U000029DD',
	"inodot;":                          '\U00000131',
	"int;":                             '\U0000222B',
	"intcal;":                          '\U000022BA',
	"integers;":                        '\U00002124',
	"intercal;":                        '\U000022BA',
	"intlarhk;":                        '\U00002A17',
	"intprod;":                         '\U00002A3C',
	"iocy;":                            '\U00000451',
	"iogon;":                           '\U0000012F',
	"iopf;":                            '\U0001D55A',
	"iota;":                            '\U000003B9',
	"iprod;":                           '\U00002A3C',
	"iquest;":                          '\U000000BF',
	"iscr;":                            '\U0001D4BE',
	"isin;":                            '\U00002208',
	"isinE;":                           '\U000022F9',
	"isindot;":                         '\U000022F5',
	"isins;":                           '\U000022F4',
	"isinsv;":                          '\U000022F3',
	"isinv;":                           '\U00002208',
	"it;":                              '\U00002062',
	"itilde;":                          '\U00000129',
	"iukcy;":                           '\U00000456',
	"iuml;":                            '\U000000EF',
	"jcirc;":                           '\U00000135',
	"jcy;":                             '\U00000439',
	"jfr;":                             '\U0001D527',
	"jmath;":                           '\U00000237',
	"jopf;":                            '\U0001D55B',
	"jscr;":                            '\U0001D4BF',
	"jsercy;":                          '\U00000458',
	"jukcy;":                           '\U00000454',
	"kappa;":                           '\U000003BA',
	"kappav;":                          '\U000003F0',
	"kcedil;":                          '\U00000137',
	"kcy;":                             '\U0000043A',
	"kfr;":                             '\U0001D528',
	"kgreen;":                          '\U00000138',
	"khcy;":                            '\U00000445',
	"kjcy;":                            '\U0000045C',
	"kopf;":                            '\U0001D55C',
	"kscr;":                            '\U0001D4C0',
	"lAarr;":                           '\U000021DA',
	"lArr;":                            '\U000021D0',
	"lAtail;":                          '\U0000291B',
	"lBarr;":                           '\U0000290E',
	"lE;":                              '\U00002266',
	"lEg;":                             '\U00002A8B',
	"lHar;":                            '\U00002962',
	"lacute;":                          '\U0000013A',
	"laemptyv;":                        '\U000029B4',
	"lagran;":                          '\U00002112',
	"lambda;":                          '\U000003BB',
	"lang;":                            '\U000027E8',
	"langd;":                           '\U00002991',
	"langle;":                          '\U000027E8',
	"lap;":                             '\U00002A85',
	"laquo;":                           '\U000000AB',
	"larr;":                            '\U00002190',
	"larrb;":                           '\U000021E4',
	"larrbfs;":                         '\U0000291F',
	"larrfs;":                          '\U0000291D',
	"larrhk;":                          '\U000021A9',
	"larrlp;":                          '\U000021AB',
	"larrpl;":                          '\U00002939',
	"larrsim;":                         '\U00002973',
	"larrtl;":                          '\U000021A2',
	"lat;":                             '\U00002AAB',
	"latail;":                          '\U00002919',
	"late;":                            '\U00002AAD',
	"lbarr;":                           '\U0000290C',
	"lbbrk;":                           '\U00002772',
	"lbrace;":                          '\U0000007B',
	"lbrack;":                          '\U0000005B',
	"lbrke;":                           '\U0000298B',
	"lbrksld;":                         '\U0000298F',
	"lbrkslu;":                         '\U0000298D',
	"lcaron;":                          '\U0000013E',
	"lcedil;":                          '\U0000013C',
	"lceil;":                           '\U00002308',
	"lcub;":                            '\U0000007B',
	"lcy;":                             '\U0000043B',
	"ldca;":                            '\U00002936',
	"ldquo;":                           '\U0000201C',
	"ldquor;":                          '\U0000201E',
	"ldrdhar;":                         '\U00002967',
	"ldrushar;":                        '\U0000294B',
	"ldsh;":                            '\U000021B2',
	"le;":                              '\U00002264',
	"leftarrow;":                       '\U00002190',
	"leftarrowtail;":                   '\U000021A2',
	"leftharpoondown;":                 '\U000021BD',
	"leftharpoonup;":                   '\U000021BC',
	"leftleftarrows;":                  '\U000021C7',
	"leftrightarrow;":                  '\U00002194',
	"leftrightarrows;":                 '\U000021C6',
	"leftrightharpoons;":               '\U000021CB',
	"leftrightsquigarrow;":             '\U000021AD',
	"leftthreetimes;":                  '\U000022CB',
	"leg;":                             '\U000022DA',
	"leq;":                             '\U00002264',
	"leqq;":                            '\U00002266',
	"leqslant;":                        '\U00002A7D',
	"les;":                             '\U00002A7D',
	"lescc;":                           '\U00002AA8',
	"lesdot;":                          '\U00002A7F',
	"lesdoto;":                         '\U00002A81',
	"lesdotor;":                        '\U00002A83',
	"lesges;":                          '\U00002A93',
	"lessapprox;":                      '\U00002A85',
	"lessdot;":                         '\U000022D6',
	"lesseqgtr;":                       '\U000022DA',
	"lesseqqgtr;":                      '\U00002A8B',
	"lessgtr;":                         '\U00002276',
	"lesssim;":                         '\U00002272',
	"lfisht;":                          '\U0000297C',
	"lfloor;":                          '\U0000230A',
	"lfr;":                             '\U0001D529',
	"lg;":                              '\U00002276',
	"lgE;":                             '\U00002A91',
	"lhard;":                           '\U000021BD',
	"lharu;":                           '\U000021BC',
	"lharul;":                          '\U0000296A',
	"lhblk;":                           '\U00002584',
	"ljcy;":                            '\U00000459',
	"ll;":                              '\U0000226A',
	"llarr;":                           '\U000021C7',
	"llcorner;":                        '\U0000231E',
	"llhard;":                          '\U0000296B',
	"lltri;":                           '\U000025FA',
	"lmidot;":                          '\U00000140',
	"lmoust;":                          '\U000023B0',
	"lmoustache;":                      '\U000023B0',
	"lnE;":                             '\U00002268',
	"lnap;":                            '\U00002A89',
	"lnapprox;":                        '\U00002A89',
	"lne;":                             '\U00002A87',
	"lneq;":                            '\U00002A87',
	"lneqq;":                           '\U00002268',
	"lnsim;":                           '\U000022E6',
	"loang;":                           '\U000027EC',
	"loarr;":                           '\U000021FD',
	"lobrk;":                           '\U000027E6',
	"longleftarrow;":                   '\U000027F5',
	"longleftrightarrow;":              '\U000027F7',
	"longmapsto;":                      '\U000027FC',
	"longrightarrow;":                  '\U000027F6',
	"looparrowleft;":                   '\U000021AB',
	"looparrowright;":                  '\U000021AC',
	"lopar;":                           '\U00002985',
	"lopf;":                            '\U0001D55D',
	"loplus;":                          '\U00002A2D',
	"lotimes;":                         '\U00002A34',
	"lowast;":                          '\U00002217',
	"lowbar;":                          '\U0000005F',
	"loz;":                             '\U000025CA',
	"lozenge;":                         '\U000025CA',
	"lozf;":                            '\U000029EB',
	"lpar;":                            '\U00000028',
	"lparlt;":                          '\U00002993',
	"lrarr;":                           '\U000021C6',
	"lrcorner;":                        '\U0000231F',
	"lrhar;":                           '\U000021CB',
	"lrhard;":                          '\U0000296D',
	"lrm;":                             '\U0000200E',
	"lrtri;":                           '\U000022BF',
	"lsaquo;":                          '\U00002039',
	"lscr;":                            '\U0001D4C1',
	"lsh;":                             '\U000021B0',
	"lsim;":                            '\U00002272',
	"lsime;":                           '\U00002A8D',
	"lsimg;":                           '\U00002A8F',
	"lsqb;":                            '\U0000005B',
	"lsquo;":                           '\U00002018',
	"lsquor;":                          '\U0000201A',
	"lstrok;":                          '\U00000142',
	"lt;":                              '\U0000003C',
	"ltcc;":                            '\U00002AA6',
	"ltcir;":                           '\U00002A79',
	"ltdot;":                           '\U000022D6',
	"lthree;":                          '\U000022CB',
	"ltimes;":                          '\U000022C9',
	"ltlarr;":                          '\U00002976',
	"ltquest;":                         '\U00002A7B',
	"ltrPar;":                          '\U00002996',
	"ltri;":                            '\U000025C3',
	"ltrie;":                           '\U000022B4',
	"ltrif;":                           '\U000025C2',
	"lurdshar;":                        '\U0000294A',
	"luruhar;":                         '\U00002966',
	"mDDot;":                           '\U0000223A',
	"macr;":                            '\U000000AF',
	"male;":                            '\U00002642',
	"malt;":                            '\U00002720',
	"maltese;":                         '\U00002720',
	"map;":                             '\U000021A6',
	"mapsto;":                          '\U000021A6',
	"mapstodown;":                      '\U000021A7',
	"mapstoleft;":                      '\U000021A4',
	"mapstoup;":                        '\U000021A5',
	"marker;":                          '\U000025AE',
	"mcomma;":                          '\U00002A29',
	"mcy;":                             '\U0000043C',
	"mdash;":                           '\U00002014',
	"measuredangle;":                   '\U00002221',
	"mfr;":                             '\U0001D52A',
	"mho;":                             '\U00002127',
	"micro;":                           '\U000000B5',
	"mid;":                             '\U00002223',
	"midast;":                          '\U0000002A',
	"midcir;":                          '\U00002AF0',
	"middot;":                          '\U000000B7',
	"minus;":                           '\U00002212',
	"minusb;":                          '\U0000229F',
	"minusd;":                          '\U00002238',
	"minusdu;":                         '\U00002A2A',
	"mlcp;":                            '\U00002ADB',
	"mldr;":                            '\U00002026',
	"mnplus;":                          '\U00002213',
	"models;":                          '\U000022A7',
	"mopf;":                            '\U0001D55E',
	"mp;":                              '\U00002213',
	"mscr;":                            '\U0001D4C2',
	"mstpos;":                          '\U0000223E',
	"mu;":                              '\U000003BC',
	"multimap;":                        '\U000022B8',
	"mumap;":                           '\U000022B8',
	"nLeftarrow;":                      '\U000021CD',
	"nLeftrightarrow;":                 '\U000021CE',
	"nRightarrow;":                     '\U000021CF',
	"nVDash;":                          '\U000022AF',
	"nVdash;":                          '\U000022AE',
	"nabla;":                           '\U00002207',
	"nacute;":                          '\U00000144',
	"nap;":                             '\U00002249',
	"napos;":                           '\U00000149',
	"napprox;":                         '\U00002249',
	"natur;":                           '\U0000266E',
	"natural;":                         '\U0000266E',
	"naturals;":                        '\U00002115',
	"nbsp;":                            '\U000000A0',
	"ncap;":                            '\U00002A43',
	"ncaron;":                          '\U00000148',
	"ncedil;":                          '\U00000146',
	"ncong;":                           '\U00002247',
	"ncup;":                            '\U00002A42',
	"ncy;":                             '\U0000043D',
	"ndash;":                           '\U00002013',
	"ne;":                              '\U00002260',
	"neArr;":                           '\U000021D7',
	"nearhk;":                          '\U00002924',
	"nearr;":                           '\U00002197',
	"nearrow;":                         '\U00002197',
	"nequiv;":                          '\U00002262',
	"nesear;":                          '\U00002928',
	"nexist;":                          '\U00002204',
	"nexists;":                         '\U00002204',
	"nfr;":                             '\U0001D52B',
	"nge;":                             '\U00002271',
	"ngeq;":                            '\U00002271',
	"ngsim;":                           '\U00002275',
	"ngt;":                             '\U0000226F',
	"ngtr;":                            '\U0000226F',
	"nhArr;":                           '\U000021CE',
	"nharr;":                           '\U000021AE',
	"nhpar;":                           '\U00002AF2',
	"ni;":                              '\U0000220B',
	"nis;":                             '\U000022FC',
	"nisd;":                            '\U000022FA',
	"niv;":                             '\U0000220B',
	"njcy;":                            '\U0000045A',
	"nlArr;":                           '\U000021CD',
	"nlarr;":                           '\U0000219A',
	"nldr;":                            '\U00002025',
	"nle;":                             '\U00002270',
	"nleftarrow;":                      '\U0000219A',
	"nleftrightarrow;":                 '\U000021AE',
	"nleq;":                            '\U00002270',
	"nless;":                           '\U0000226E',
	"nlsim;":                           '\U00002274',
	"nlt;":                             '\U0000226E',
	"nltri;":                           '\U000022EA',
	"nltrie;":                          '\U000022EC',
	"nmid;":                            '\U00002224',
	"nopf;":                            '\U0001D55F',
	"not;":                             '\U000000AC',
	"notin;":                           '\U00002209',
	"notinva;":                         '\U00002209',
	"notinvb;":                         '\U000022F7',
	"notinvc;":                         '\U000022F6',
	"notni;":                           '\U0000220C',
	"notniva;":                         '\U0000220C',
	"notnivb;":                         '\U000022FE',
	"notnivc;":                         '\U000022FD',
	"npar;":                            '\U00002226',
	"nparallel;":                       '\U00002226',
	"npolint;":                         '\U00002A14',
	"npr;":                             '\U00002280',
	"nprcue;":                          '\U000022E0',
	"nprec;":                           '\U00002280',
	"nrArr;":                           '\U000021CF',
	"nrarr;":                           '\U0000219B',
	"nrightarrow;":                     '\U0000219B',
	"nrtri;":                           '\U000022EB',
	"nrtrie;":                          '\U000022ED',
	"nsc;":                             '\U00002281',
	"nsccue;":                          '\U000022E1',
	"nscr;":                            '\U0001D4C3',
	"nshortmid;":                       '\U00002224',
	"nshortparallel;":                  '\U00002226',
	"nsim;":                            '\U00002241',
	"nsime;":                           '\U00002244',
	"nsimeq;":                          '\U00002244',
	"nsmid;":                           '\U00002224',
	"nspar;":                           '\U00002226',
	"nsqsube;":                         '\U000022E2',
	"nsqsupe;":                         '\U000022E3',
	"nsub;":                            '\U00002284',
	"nsube;":                           '\U00002288',
	"nsubseteq;":                       '\U00002288',
	"nsucc;":                           '\U00002281',
	"nsup;":                            '\U00002285',
	"nsupe;":                           '\U00002289',
	"nsupseteq;":                       '\U00002289',
	"ntgl;":                            '\U00002279',
	"ntilde;":                          '\U000000F1',
	"ntlg;":                            '\U00002278',
	"ntriangleleft;":                   '\U000022EA',
	"ntrianglelefteq;":                 '\U000022EC',
	"ntriangleright;":                  '\U000022EB',
	"ntrianglerighteq;":                '\U000022ED',
	"nu;":                              '\U000003BD',
	"num;":                             '\U00000023',
	"numero;":                          '\U00002116',
	"numsp;":                           '\U00002007',
	"nvDash;":                          '\U000022AD',
	"nvHarr;":                          '\U00002904',
	"nvdash;":                          '\U000022AC',
	"nvinfin;":                         '\U000029DE',
	"nvlArr;":                          '\U00002902',
	"nvrArr;":                          '\U00002903',
	"nwArr;":                           '\U000021D6',
	"nwarhk;":                          '\U00002923',
	"nwarr;":                           '\U00002196',
	"nwarrow;":                         '\U00002196',
	"nwnear;":                          '\U00002927',
	"oS;":                              '\U000024C8',
	"oacute;":                          '\U000000F3',
	"oast;":                            '\U0000229B',
	"ocir;":                            '\U0000229A',
	"ocirc;":                           '\U000000F4',
	"ocy;":                             '\U0000043E',
	"odash;":                           '\U0000229D',
	"odblac;":                          '\U00000151',
	"odiv;":                            '\U00002A38',
	"odot;":                            '\U00002299',
	"odsold;":                          '\U000029BC',
	"oelig;":                           '\U00000153',
	"ofcir;":                           '\U000029BF',
	"ofr;":                             '\U0001D52C',
	"ogon;":                            '\U000002DB',
	"ograve;":                          '\U000000F2',
	"ogt;":                             '\U000029C1',
	"ohbar;":                           '\U000029B5',
	"ohm;":                             '\U000003A9',
	"oint;":                            '\U0000222E',
	"olarr;":                           '\U000021BA',
	"olcir;":                           '\U000029BE',
	"olcross;":                         '\U000029BB',
	"oline;":                           '\U0000203E',
	"olt;":                             '\U000029C0',
	"omacr;":                           '\U0000014D',
	"omega;":                           '\U000003C9',
	"omicron;":                         '\U000003BF',
	"omid;":                            '\U000029B6',
	"ominus;":                          '\U00002296',
	"oopf;":                            '\U0001D560',
	"opar;":                            '\U000029B7',
	"operp;":                           '\U000029B9',
	"oplus;":                           '\U00002295',
	"or;":                              '\U00002228',
	"orarr;":                           '\U000021BB',
	"ord;":                             '\U00002A5D',
	"order;":                           '\U00002134',
	"orderof;":                         '\U00002134',
	"ordf;":                            '\U000000AA',
	"ordm;":                            '\U000000BA',
	"origof;":                          '\U000022B6',
	"oror;":                            '\U00002A56',
	"orslope;":                         '\U00002A57',
	"orv;":                             '\U00002A5B',
	"oscr;":                            '\U00002134',
	"oslash;":                          '\U000000F8',
	"osol;":                            '\U00002298',
	"otilde;":                          '\U000000F5',
	"otimes;":                          '\U00002297',
	"otimesas;":                        '\U00002A36',
	"ouml;":                            '\U000000F6',
	"ovbar;":                           '\U0000233D',
	"par;":                             '\U00002225',
	"para;":                            '\U000000B6',
	"parallel;":                        '\U00002225',
	"parsim;":                          '\U00002AF3',
	"parsl;":                           '\U00002AFD',
	"part;":                            '\U00002202',
	"pcy;":                             '\U0000043F',
	"percnt;":                          '\U00000025',
	"period;":                          '\U0000002E',
	"permil;":                          '\U00002030',
	"perp;":                            '\U000022A5',
	"pertenk;":                         '\U00002031',
	"pfr;":                             '\U0001D52D',
	"phi;":                             '\U000003C6',
	"phiv;":                            '\U000003D5',
	"phmmat;":                          '\U00002133',
	"phone;":                           '\U0000260E',
	"pi;":                              '\U000003C0',
	"pitchfork;":                       '\U000022D4',
	"piv;":                             '\U000003D6',
	"planck;":                          '\U0000210F',
	"planckh;":                         '\U0000210E',
	"plankv;":                          '\U0000210F',
	"plus;":                            '\U0000002B',
	"plusacir;":                        '\U00002A23',
	"plusb;":                           '\U0000229E',
	"pluscir;":                         '\U00002A22',
	"plusdo;":                          '\U00002214',
	"plusdu;":                          '\U00002A25',
	"pluse;":                           '\U00002A72',
	"plusmn;":                          '\U000000B1',
	"plussim;":                         '\U00002A26',
	"plustwo;":                         '\U00002A27',
	"pm;":                              '\U000000B1',
	"pointint;":                        '\U00002A15',
	"popf;":                            '\U0001D561',
	"pound;":                           '\U000000A3',
	"pr;":                              '\U0000227A',
	"prE;":                             '\U00002AB3',
	"prap;":                            '\U00002AB7',
	"prcue;":                           '\U0000227C',
	"pre;":                             '\U00002AAF',
	"prec;":                            '\U0000227A',
	"precapprox;":                      '\U00002AB7',
	"preccurlyeq;":                     '\U0000227C',
	"preceq;":                          '\U00002AAF',
	"precnapprox;":                     '\U00002AB9',
	"precneqq;":                        '\U00002AB5',
	"precnsim;":                        '\U000022E8',
	"precsim;":                         '\U0000227E',
	"prime;":                           '\U00002032',
	"primes;":                          '\U00002119',
	"prnE;":                            '\U00002AB5',
	"prnap;":                           '\U00002AB9',
	"prnsim;":                          '\U000022E8',
	"prod;":                            '\U0000220F',
	"profalar;":                        '\U0000232E',
	"profline;":                        '\U00002312',
	"profsurf;":                        '\U00002313',
	"prop;":                            '\U0000221D',
	"propto;":                          '\U0000221D',
	"prsim;":                           '\U0000227E',
	"prurel;":                          '\U000022B0',
	"pscr;":                            '\U0001D4C5',
	"psi;":                             '\U000003C8',
	"puncsp;":                          '\U00002008',
	"qfr;":                             '\U0001D52E',
	"qint;":                            '\U00002A0C',
	"qopf;":                            '\U0001D562',
	"qprime;":                          '\U00002057',
	"qscr;":                            '\U0001D4C6',
	"quaternions;":                     '\U0000210D',
	"quatint;":                         '\U00002A16',
	"quest;":                           '\U0000003F',
	"questeq;":                         '\U0000225F',
	"quot;":                            '\U00000022',
	"rAarr;":                           '\U000021DB',
	"rArr;":                            '\U000021D2',
	"rAtail;":                          '\U0000291C',
	"rBarr;":                           '\U0000290F',
	"rHar;":                            '\U00002964',
	"racute;":                          '\U00000155',
	"radic;":                           '\U0000221A',
	"raemptyv;":                        '\U000029B3',
	"rang;":                            '\U000027E9',
	"rangd;":                           '\U00002992',
	"range;":                           '\U000029A5',
	"rangle;":                          '\U000027E9',
	"raquo;":                           '\U000000BB',
	"rarr;":                            '\U00002192',
	"rarrap;":                          '\U00002975',
	"rarrb;":                           '\U000021E5',
	"rarrbfs;":                         '\U00002920',
	"rarrc;":                           '\U00002933',
	"rarrfs;":                          '\U0000291E',
	"rarrhk;":                          '\U000021AA',
	"rarrlp;":                          '\U000021AC',
	"rarrpl;":                          '\U00002945',
	"rarrsim;":                         '\U00002974',
	"rarrtl;":                          '\U000021A3',
	"rarrw;":                           '\U0000219D',
	"ratail;":                          '\U0000291A',
	"ratio;":                           '\U00002236',
	"rationals;":                       '\U0000211A',
	"rbarr;":                           '\U0000290D',
	"rbbrk;":                           '\U00002773',
	"rbrace;":                          '\U0000007D',
	"rbrack;":                          '\U0000005D',
	"rbrke;":                           '\U0000298C',
	"rbrksld;":                         '\U0000298E',
	"rbrkslu;":                         '\U00002990',
	"rcaron;":                          '\U00000159',
	"rcedil;":                          '\U00000157',
	"rceil;":                           '\U00002309',
	"rcub;":                            '\U0000007D',
	"rcy;":                             '\U00000440',
	"rdca;":                            '\U00002937',
	"rdldhar;":                         '\U00002969',
	"rdquo;":                           '\U0000201D',
	"rdquor;":                          '\U0000201D',
	"rdsh;":                            '\U000021B3',
	"real;":                            '\U0000211C',
	"realine;":                         '\U0000211B',
	"realpart;":                        '\U0000211C',
	"reals;":                           '\U0000211D',
	"rect;":                            '\U000025AD',
	"reg;":                             '\U000000AE',
	"rfisht;":                          '\U0000297D',
	"rfloor;":                          '\U0000230B',
	"rfr;":                             '\U0001D52F',
	"rhard;":                           '\U000021C1',
	"rharu;":                           '\U000021C0',
	"rharul;":                          '\U0000296C',
	"rho;":                             '\U000003C1',
	"rhov;":                            '\U000003F1',
	"rightarrow;":                      '\U00002192',
	"rightarrowtail;":                  '\U000021A3',
	"rightharpoondown;":                '\U000021C1',
	"rightharpoonup;":                  '\U000021C0',
	"rightleftarrows;":                 '\U000021C4',
	"rightleftharpoons;":               '\U000021CC',
	"rightrightarrows;":                '\U000021C9',
	"rightsquigarrow;":                 '\U0000219D',
	"rightthreetimes;":                 '\U000022CC',
	"ring;":                            '\U000002DA',
	"risingdotseq;":                    '\U00002253',
	"rlarr;":                           '\U000021C4',
	"rlhar;":                           '\U000021CC',
	"rlm;":                             '\U0000200F',
	"rmoust;":                          '\U000023B1',
	"rmoustache;":                      '\U000023B1',
	"rnmid;":                           '\U00002AEE',
	"roang;":                           '\U000027ED',
	"roarr;":                           '\U000021FE',
	"robrk;":                           '\U000027E7',
	"ropar;":                           '\U00002986',
	"ropf;":                            '\U0001D563',
	"roplus;":                          '\U00002A2E',
	"rotimes;":                         '\U00002A35',
	"rpar;":                            '\U00000029',
	"rpargt;":                          '\U00002994',
	"rppolint;":                        '\U00002A12',
	"rrarr;":                           '\U000021C9',
	"rsaquo;":                          '\U0000203A',
	"rscr;":                            '\U0001D4C7',
	"rsh;":                             '\U000021B1',
	"rsqb;":                            '\U0000005D',
	"rsquo;":                           '\U00002019',
	"rsquor;":                          '\U00002019',
	"rthree;":                          '\U000022CC',
	"rtimes;":                          '\U000022CA',
	"rtri;":                            '\U000025B9',
	"rtrie;":                           '\U000022B5',
	"rtrif;":                           '\U000025B8',
	"rtriltri;":                        '\U000029CE',
	"ruluhar;":                         '\U00002968',
	"rx;":                              '\U0000211E',
	"sacute;":                          '\U0000015B',
	"sbquo;":                           '\U0000201A',
	"sc;":                              '\U0000227B',
	"scE;":                             '\U00002AB4',
	"scap;":                            '\U00002AB8',
	"scaron;":                          '\U00000161',
	"sccue;":                           '\U0000227D',
	"sce;":                             '\U00002AB0',
	"scedil;":                          '\U0000015F',
	"scirc;":                           '\U0000015D',
	"scnE;":                            '\U00002AB6',
	"scnap;":                           '\U00002ABA',
	"scnsim;":                          '\U000022E9',
	"scpolint;":                        '\U00002A13',
	"scsim;":                           '\U0000227F',
	"scy;":                             '\U00000441',
	"sdot;":                            '\U000022C5',
	"sdotb;":                           '\U000022A1',
	"sdote;":                           '\U00002A66',
	"seArr;":                           '\U000021D8',
	"searhk;":                          '\U00002925',
	"searr;":                           '\U00002198',
	"searrow;":                         '\U00002198',
	"sect;":                            '\U000000A7',
	"semi;":                            '\U0000003B',
	"seswar;":                          '\U00002929',
	"setminus;":                        '\U00002216',
	"setmn;":                           '\U00002216',
	"sext;":                            '\U00002736',
	"sfr;":                             '\U0001D530',
	"sfrown;":                          '\U00002322',
	"sharp;":                           '\U0000266F',
	"shchcy;":                          '\U00000449',
	"shcy;":                            '\U00000448',
	"shortmid;":                        '\U00002223',
	"shortparallel;":                   '\U00002225',
	"shy;":                             '\U000000AD',
	"sigma;":                           '\U000003C3',
	"sigmaf;":                          '\U000003C2',
	"sigmav;":                          '\U000003C2',
	"sim;":                             '\U0000223C',
	"simdot;":                          '\U00002A6A',
	"sime;":                            '\U00002243',
	"simeq;":                           '\U00002243',
	"simg;":                            '\U00002A9E',
	"simgE;":                           '\U00002AA0',
	"siml;":                            '\U00002A9D',
	"simlE;":                           '\U00002A9F',
	"simne;":                           '\U00002246',
	"simplus;":                         '\U00002A24',
	"simrarr;":                         '\U00002972',
	"slarr;":                           '\U00002190',
	"smallsetminus;":                   '\U00002216',
	"smashp;":                          '\U00002A33',
	"smeparsl;":                        '\U000029E4',
	"smid;":                            '\U00002223',
	"smile;":                           '\U00002323',
	"smt;":                             '\U00002AAA',
	"smte;":                            '\U00002AAC',
	"softcy;":                          '\U0000044C',
	"sol;":                             '\U0000002F',
	"solb;":                            '\U000029C4',
	"solbar;":                          '\U0000233F',
	"sopf;":                            '\U0001D564',
	"spades;":                          '\U00002660',
	"spadesuit;":                       '\U00002660',
	"spar;":                            '\U00002225',
	"sqcap;":                           '\U00002293',
	"sqcup;":                           '\U00002294',
	"sqsub;":                           '\U0000228F',
	"sqsube;":                          '\U00002291',
	"sqsubset;":                        '\U0000228F',
	"sqsubseteq;":                      '\U00002291',
	"sqsup;":                           '\U00002290',
	"sqsupe;":                          '\U00002292',
	"sqsupset;":                        '\U00002290',
	"sqsupseteq;":                      '\U00002292',
	"squ;":                             '\U000025A1',
	"square;":                          '\U000025A1',
	"squarf;":                          '\U000025AA',
	"squf;":                            '\U000025AA',
	"srarr;":                           '\U00002192',
	"sscr;":                            '\U0001D4C8',
	"ssetmn;":                          '\U00002216',
	"ssmile;":                          '\U00002323',
	"sstarf;":                          '\U000022C6',
	"star;":                            '\U00002606',
	"starf;":                           '\U00002605',
	"straightepsilon;":                 '\U000003F5',
	"straightphi;":                     '\U000003D5',
	"strns;":                           '\U000000AF',
	"sub;":                             '\U00002282',
	"subE;":                            '\U00002AC5',
	"subdot;":                          '\U00002ABD',
	"sube;":                            '\U00002286',
	"subedot;":                         '\U00002AC3',
	"submult;":                         '\U00002AC1',
	"subnE;":                           '\U00002ACB',
	"subne;":                           '\U0000228A',
	"subplus;":                         '\U00002ABF',
	"subrarr;":                         '\U00002979',
	"subset;":                          '\U00002282',
	"subseteq;":                        '\U00002286',
	"subseteqq;":                       '\U00002AC5',
	"subsetneq;":                       '\U0000228A',
	"subsetneqq;":                      '\U00002ACB',
	"subsim;":                          '\U00002AC7',
	"subsub;":                          '\U00002AD5',
	"subsup;":                          '\U00002AD3',
	"succ;":                            '\U0000227B',
	"succapprox;":                      '\U00002AB8',
	"succcurlyeq;":                     '\U0000227D',
	"succeq;":                          '\U00002AB0',
	"succnapprox;":                     '\U00002ABA',
	"succneqq;":                        '\U00002AB6',
	"succnsim;":                        '\U000022E9',
	"succsim;":                         '\U0000227F',
	"sum;":                             '\U00002211',
	"sung;":                            '\U0000266A',
	"sup;":                             '\U00002283',
	"sup1;":                            '\U000000B9',
	"sup2;":                            '\U000000B2',
	"sup3;":                            '\U000000B3',
	"supE;":                            '\U00002AC6',
	"supdot;":                          '\U00002ABE',
	"supdsub;":                         '\U00002AD8',
	"supe;":                            '\U00002287',
	"supedot;":                         '\U00002AC4',
	"suphsol;":                         '\U000027C9',
	"suphsub;":                         '\U00002AD7',
	"suplarr;":                         '\U0000297B',
	"supmult;":                         '\U00002AC2',
	"supnE;":                           '\U00002ACC',
	"supne;":                           '\U0000228B',
	"supplus;":                         '\U00002AC0',
	"supset;":                          '\U00002283',
	"supseteq;":                        '\U00002287',
	"supseteqq;":                       '\U00002AC6',
	"supsetneq;":                       '\U0000228B',
	"supsetneqq;":                      '\U00002ACC',
	"supsim;":                          '\U00002AC8',
	"supsub;":                          '\U00002AD4',
	"supsup;":                          '\U00002AD6',
	"swArr;":                           '\U000021D9',
	"swarhk;":                          '\U00002926',
	"swarr;":                           '\U00002199',
	"swarrow;":                         '\U00002199',
	"swnwar;":                          '\U0000292A',
	"szlig;":                           '\U000000DF',
	"target;":                          '\U00002316',
	"tau;":                             '\U000003C4',
	"tbrk;":                            '\U000023B4',
	"tcaron;":                          '\U00000165',
	"tcedil;":                          '\U00000163',
	"tcy;":                             '\U00000442',
	"tdot;":                            '\U000020DB',
	"telrec;":                          '\U00002315',
	"tfr;":                             '\U0001D531',
	"there4;":                          '\U00002234',
	"therefore;":                       '\U00002234',
	"theta;":                           '\U000003B8',
	"thetasym;":                        '\U000003D1',
	"thetav;":                          '\U000003D1',
	"thickapprox;":                     '\U00002248',
	"thicksim;":                        '\U0000223C',
	"thinsp;":                          '\U00002009',
	"thkap;":                           '\U00002248',
	"thksim;":                          '\U0000223C',
	"thorn;":                           '\U000000FE',
	"tilde;":                           '\U000002DC',
	"times;":                           '\U000000D7',
	"timesb;":                          '\U000022A0',
	"timesbar;":                        '\U00002A31',
	"timesd;":                          '\U00002A30',
	"tint;":                            '\U0000222D',
	"toea;":                            '\U00002928',
	"top;":                             '\U000022A4',
	"topbot;":                          '\U00002336',
	"topcir;":                          '\U00002AF1',
	"topf;":                            '\U0001D565',
	"topfork;":                         '\U00002ADA',
	"tosa;":                            '\U00002929',
	"tprime;":                          '\U00002034',
	"trade;":                           '\U00002122',
	"triangle;":                        '\U000025B5',
	"triangledown;":                    '\U000025BF',
	"triangleleft;":                    '\U000025C3',
	"trianglelefteq;":                  '\U000022B4',
	"triangleq;":                       '\U0000225C',
	"triangleright;":                   '\U000025B9',
	"trianglerighteq;":                 '\U000022B5',
	"tridot;":                          '\U000025EC',
	"trie;":                            '\U0000225C',
	"triminus;":                        '\U00002A3A',
	"triplus;":                         '\U00002A39',
	"trisb;":                           '\U000029CD',
	"tritime;":                         '\U00002A3B',
	"trpezium;":                        '\U000023E2',
	"tscr;":                            '\U0001D4C9',
	"tscy;":                            '\U00000446',
	"tshcy;":                           '\U0000045B',
	"tstrok;":                          '\U00000167',
	"twixt;":                           '\U0000226C',
	"twoheadleftarrow;":                '\U0000219E',
	"twoheadrightarrow;":               '\U000021A0',
	"uArr;":                            '\U000021D1',
	"uHar;":                            '\U00002963',
	"uacute;":                          '\U000000FA',
	"uarr;":                            '\U00002191',
	"ubrcy;":                           '\U0000045E',
	"ubreve;":                          '\U0000016D',
	"ucirc;":                           '\U000000FB',
	"ucy;":                             '\U00000443',
	"udarr;":                           '\U000021C5',
	"udblac;":                          '\U00000171',
	"udhar;":                           '\U0000296E',
	"ufisht;":                          '\U0000297E',
	"ufr;":                             '\U0001D532',
	"ugrave;":                          '\U000000F9',
	"uharl;":                           '\U000021BF',
	"uharr;":                           '\U000021BE',
	"uhblk;":                           '\U00002580',
	"ulcorn;":                          '\U0000231C',
	"ulcorner;":                        '\U0000231C',
	"ulcrop;":                          '\U0000230F',
	"ultri;":                           '\U000025F8',
	"umacr;":                           '\U0000016B',
	"uml;":                             '\U000000A8',
	"uogon;":                           '\U00000173',
	"uopf;":                            '\U0001D566',
	"uparrow;":                         '\U00002191',
	"updownarrow;":                     '\U00002195',
	"upharpoonleft;":                   '\U000021BF',
	"upharpoonright;":                  '\U000021BE',
	"uplus;":                           '\U0000228E',
	"upsi;":                            '\U000003C5',
	"upsih;":                           '\U000003D2',
	"upsilon;":                         '\U000003C5',
	"upuparrows;":                      '\U000021C8',
	"urcorn;":                          '\U0000231D',
	"urcorner;":                        '\U0000231D',
	"urcrop;":                          '\U0000230E',
	"uring;":                           '\U0000016F',
	"urtri;":                           '\U000025F9',
	"uscr;":                            '\U0001D4CA',
	"utdot;":                           '\U000022F0',
	"utilde;":                          '\U00000169',
	"utri;":                            '\U000025B5',
	"utrif;":                           '\U000025B4',
	"uuarr;":                           '\U000021C8',
	"uuml;":                            '\U000000FC',
	"uwangle;":                         '\U000029A7',
	"vArr;":                            '\U000021D5',
	"vBar;":                            '\U00002AE8',
	"vBarv;":                           '\U00002AE9',
	"vDash;":                           '\U000022A8',
	"vangrt;":                          '\U0000299C',
	"varepsilon;":                      '\U000003F5',
	"varkappa;":                        '\U000003F0',
	"varnothing;":                      '\U00002205',
	"varphi;":                          '\U000003D5',
	"varpi;":                           '\U000003D6',
	"varpropto;":                       '\U0000221D',
	"varr;":                            '\U00002195',
	"varrho;":                          '\U000003F1',
	"varsigma;":                        '\U000003C2',
	"vartheta;":                        '\U000003D1',
	"vartriangleleft;":                 '\U000022B2',
	"vartriangleright;":                '\U000022B3',
	"vcy;":                             '\U00000432',
	"vdash;":                           '\U000022A2',
	"vee;":                             '\U00002228',
	"veebar;":                          '\U000022BB',
	"veeeq;":                           '\U0000225A',
	"vellip;":                          '\U000022EE',
	"verbar;":                          '\U0000007C',
	"vert;":                            '\U0000007C',
	"vfr;":                             '\U0001D533',
	"vltri;":                           '\U000022B2',
	"vopf;":                            '\U0001D567',
	"vprop;":                           '\U0000221D',
	"vrtri;":                           '\U000022B3',
	"vscr;":                            '\U0001D4CB',
	"vzigzag;":                         '\U0000299A',
	"wcirc;":                           '\U00000175',
	"wedbar;":                          '\U00002A5F',
	"wedge;":                           '\U00002227',
	"wedgeq;":                          '\U00002259',
	"weierp;":                          '\U00002118',
	"wfr;":                             '\U0001D534',
	"wopf;":                            '\U0001D568',
	"wp;":                              '\U00002118',
	"wr;":                              '\U00002240',
	"wreath;":                          '\U00002240',
	"wscr;":                            '\U0001D4CC',
	"xcap;":                            '\U000022C2',
	"xcirc;":                           '\U000025EF',
	"xcup;":                            '\U000022C3',
	"xdtri;":                           '\U000025BD',
	"xfr;":                             '\U0001D535',
	"xhArr;":                           '\U000027FA',
	"xharr;":                           '\U000027F7',
	"xi;":                              '\U000003BE',
	"xlArr;":                           '\U000027F8',
	"xlarr;":                           '\U000027F5',
	"xmap;":                            '\U000027FC',
	"xnis;":                            '\U000022FB',
	"xodot;":                           '\U00002A00',
	"xopf;":                            '\U0001D569',
	"xoplus;":                          '\U00002A01',
	"xotime;":                          '\U00002A02',
	"xrArr;":                           '\U000027F9',
	"xrarr;":                           '\U000027F6',
	"xscr;":                            '\U0001D4CD',
	"xsqcup;":                          '\U00002A06',
	"xuplus;":                          '\U00002A04',
	"xutri;":                           '\U000025B3',
	"xvee;":                            '\U000022C1',
	"xwedge;":                          '\U000022C0',
	"yacute;":                          '\U000000FD',
	"yacy;":                            '\U0000044F',
	"ycirc;":                           '\U00000177',
	"ycy;":                             '\U0000044B',
	"yen;":                             '\U000000A5',
	"yfr;":                             '\U0001D536',
	"yicy;":                            '\U00000457',
	"yopf;":                            '\U0001D56A',
	"yscr;":                            '\U0001D4CE',
	"yucy;":                            '\U0000044E',
	"yuml;":                            '\U000000FF',
	"zacute;":                          '\U0000017A',
	"zcaron;":                          '\U0000017E',
	"zcy;":                             '\U00000437',
	"zdot;":                            '\U0000017C',
	"zeetrf;":                          '\U00002128',
	"zeta;":                            '\U000003B6',
	"zfr;":                             '\U0001D537',
	"zhcy;":                            '\U00000436',
	"zigrarr;":                         '\U000021DD',
	"zopf;":                            '\U0001D56B',
	"zscr;":                            '\U0001D4CF',
	"zwj;":                             '\U0000200D',
	"zwnj;":                            '\U0000200C',
	"AElig":                            '\U000000C6',
	"AMP":                              '\U00000026',
	"Aacute":                           '\U000000C1',
	"Acirc":                            '\U000000C2',
	"Agrave":                           '\U000000C0',
	"Aring":                            '\U000000C5',
	"Atilde":                           '\U000000C3',
	"Auml":                             '\U000000C4',
	"COPY":                             '\U000000A9',
	"Ccedil":                           '\U000000C7',
	"ETH":                              '\U000000D0',
	"Eacute":                           '\U000000C9',
	"Ecirc":                            '\U000000CA',
	"Egrave":                           '\U000000C8',
	"Euml":                             '\U000000CB',
	"GT":                               '\U0000003E',
	"Iacute":                           '\U000000CD',
	"Icirc":                            '\U000000CE',
	"Igrave":                           '\U000000CC',
	"Iuml":                             '\U000000CF',
	"LT":                               '\U0000003C',
	"Ntilde":                           '\U000000D1',
	"Oacute":                           '\U000000D3',
	"Ocirc":                            '\U000000D4',
	"Ograve":                           '\U000000D2',
	"Oslash":                           '\U000000D8',
	"Otilde":                           '\U000000D5',
	"Ouml":                             '\U000000D6',
	"QUOT":                             '\U00000022',
	"REG":                              '\U000000AE',
	"THORN":                            '\U000000DE',
	"Uacute":                           '\U000000DA',
	"Ucirc":                            '\U000000DB',
	"Ugrave":                           '\U000000D9',
	"Uuml":                             '\U000000DC',
	"Yacute":                           '\U000000DD',
	"aacute":                           '\U000000E1',
	"acirc":                            '\U000000E2',
	"acute":                            '\U000000B4',
	"aelig":                            '\U000000E6',
	"agrave":                           '\U000000E0',
	"amp":                              '\U00000026',
	"aring":                            '\U000000E5',
	"atilde":                           '\U000000E3',
	"auml":                             '\U000000E4',
	"brvbar":                           '\U000000A6',
	"ccedil":                           '\U000000E7',
	"cedil":                            '\U000000B8',
	"cent":                             '\U000000A2',
	"copy":                             '\U000000A9',
	"curren":                           '\U000000A4',
	"deg":                              '\U000000B0',
	"divide":                           '\U000000F7',
	"eacute":                           '\U000000E9',
	"ecirc":                            '\U000000EA',
	"egrave":                           '\U000000E8',
	"eth":                              '\U000000F0',
	"euml":                             '\U000000EB',
	"frac12":                           '\U000000BD',
	"frac14":                           '\U000000BC',
	"frac34":                           '\U000000BE',
	"gt":                               '\U0000003E',
	"iacute":                           '\U000000ED',
	"icirc":                            '\U000000EE',
	"iexcl":                            '\U000000A1',
	"igrave":                           '\U000000EC',
	"iquest":                           '\U000000BF',
	"iuml":                             '\U000000EF',
	"laquo":                            '\U000000AB',
	"lt":                               '\U0000003C',
	"macr":                             '\U000000AF',
	"micro":                            '\U000000B5',
	"middot":                           '\U000000B7',
	"nbsp":                             '\U000000A0',
	"not":                              '\U000000AC',
	"ntilde":                           '\U000000F1',
	"oacute":                           '\U000000F3',
	"ocirc":                            '\U000000F4',
	"ograve":                           '\U000000F2',
	"ordf":                             '\U000000AA',
	"ordm":                             '\U000000BA',
	"oslash":                           '\U000000F8',
	"otilde":                           '\U000000F5',
	"ouml":                             '\U000000F6',
	"para":                             '\U000000B6',
	"plusmn":                           '\U000000B1',
	"pound":                            '\U000000A3',
	"quot":                             '\U00000022',
	"raquo":                            '\U000000BB',
	"reg":                              '\U000000AE',
	"sect":                             '\U000000A7',
	"shy":                              '\U000000AD',
	"sup1":                             '\U000000B9',
	"sup2":                             '\U000000B2',
	"sup3":                             '\U000000B3',
	"szlig":                            '\U000000DF',
	"thorn":                            '\U000000FE',
	"times":                            '\U000000D7',
	"uacute":                           '\U000000FA',
	"ucirc":                            '\U000000FB',
	"ugrave":                           '\U000000F9',
	"uml":                              '\U000000A8',
	"uuml":                             '\U000000FC',
	"yacute":                           '\U000000FD',
	"yen":                              '\U000000A5',
	"yuml":                             '\U000000FF',
}

// HTML entities that are two unicode codepoints.
var entity2 = map[string][2]rune{
	// TODO(nigeltao): Handle replacements that are wider than their names.
	// "nLt;":                     {'\u226A', '\u20D2'},
	// "nGt;":                     {'\u226B', '\u20D2'},
	"NotEqualTilde;":           {'\u2242', '\u0338'},
	"NotGreaterFullEqual;":     {'\u2267', '\u0338'},
	"NotGreaterGreater;":       {'\u226B', '\u0338'},
	"NotGreaterSlantEqual;":    {'\u2A7E', '\u0338'},
	"NotHumpDownHump;":         {'\u224E', '\u0338'},
	"NotHumpEqual;":            {'\u224F', '\u0338'},
	"NotLeftTriangleBar;":      {'\u29CF', '\u0338'},
	"NotLessLess;":             {'\u226A', '\u0338'},
	"NotLessSlantEqual;":       {'\u2A7D', '\u0338'},
	"NotNestedGreaterGreater;": {'\u2AA2', '\u0338'},
	"NotNestedLessLess;":       {'\u2AA1', '\u0338'},
	"NotPrecedesEqual;":        {'\u2AAF', '\u0338'},
	"NotRightTriangleBar;":     {'\u29D0', '\u0338'},
	"NotSquareSubset;":         {'\u228F', '\u0338'},
	"NotSquareSuperset;":       {'\u2290', '\u0338'},
	"NotSubset;":               {'\u2282', '\u20D2'},
	"NotSucceedsEqual;":        {'\u2AB0', '\u0338'},
	"NotSucceedsTilde;":        {'\u227F', '\u0338'},
	"NotSuperset;":             {'\u2283', '\u20D2'},
	"ThickSpace;":              {'\u205F', '\u200A'},
	"acE;":                     {'\u223E', '\u0333'},
	"bne;":                     {'\u003D', '\u20E5'},
	"bnequiv;":                 {'\u2261', '\u20E5'},
	"caps;":                    {'\u2229', '\uFE00'},
	"cups;":                    {'\u222A', '\uFE00'},
	"fjlig;":                   {'\u0066', '\u006A'},
	"gesl;":                    {'\u22DB', '\uFE00'},
	"gvertneqq;":               {'\u2269', '\uFE00'},
	"gvnE;":                    {'\u2269', '\uFE00'},
	"lates;":                   {'\u2AAD', '\uFE00'},
	"lesg;":                    {'\u22DA', '\uFE00'},
	"lvertneqq;":               {'\u2268', '\uFE00'},
	"lvnE;":                    {'\u2268', '\uFE00'},
	"nGg;":                     {'\u22D9', '\u0338'},
	"nGtv;":                    {'\u226B', '\u0338'},
	"nLl;":                     {'\u22D8', '\u0338'},
	"nLtv;":                    {'\u226A', '\u0338'},
	"nang;":                    {'\u2220', '\u20D2'},
	"napE;":                    {'\u2A70', '\u0338'},
	"napid;":                   {'\u224B', '\u0338'},
	"nbump;":                   {'\u224E', '\u0338'},
	"nbumpe;":                  {'\u224F', '\u0338'},
	"ncongdot;":                {'\u2A6D', '\u0338'},
	"nedot;":                   {'\u2250', '\u0338'},
	"nesim;":                   {'\u2242', '\u0338'},
	"ngE;":                     {'\u2267', '\u0338'},
	"ngeqq;":                   {'\u2267', '\u0338'},
	"ngeqslant;":               {'\u2A7E', '\u0338'},
	"nges;":                    {'\u2A7E', '\u0338'},
	"nlE;":                     {'\u2266', '\u0338'},
	"nleqq;":                   {'\u2266', '\u0338'},
	"nleqslant;":               {'\u2A7D', '\u0338'},
	"nles;":                    {'\u2A7D', '\u0338'},
	"notinE;":                  {'\u22F9', '\u0338'},
	"notindot;":                {'\u22F5', '\u0338'},
	"nparsl;":                  {'\u2AFD', '\u20E5'},
	"npart;":                   {'\u2202', '\u0338'},
	"npre;":                    {'\u2AAF', '\u0338'},
	"npreceq;":                 {'\u2AAF', '\u0338'},
	"nrarrc;":                  {'\u2933', '\u0338'},
	"nrarrw;":                  {'\u219D', '\u0338'},
	"nsce;":                    {'\u2AB0', '\u0338'},
	"nsubE;":                   {'\u2AC5', '\u0338'},
	"nsubset;":                 {'\u2282', '\u20D2'},
	"nsubseteqq;":              {'\u2AC5', '\u0338'},
	"nsucceq;":                 {'\u2AB0', '\u0338'},
	"nsupE;":                   {'\u2AC6', '\u0338'},
	"nsupset;":                 {'\u2283', '\u20D2'},
	"nsupseteqq;":              {'\u2AC6', '\u0338'},
	"nvap;":                    {'\u224D', '\u20D2'},
	"nvge;":                    {'\u2265', '\u20D2'},
	"nvgt;":                    {'\u003E', '\u20D2'},
	"nvle;":                    {'\u2264', '\u20D2'},
	"nvlt;":                    {'\u003C', '\u20D2'},
	"nvltrie;":                 {'\u22B4', '\u20D2'},
	"nvrtrie;":                 {'\u22B5', '\u20D2'},
	"nvsim;":                   {'\u223C', '\u20D2'},
	"race;":                    {'\u223D', '\u0331'},
	"smtes;":                   {'\u2AAC', '\uFE00'},
	"sqcaps;":                  {'\u2293', '\uFE00'},
	"sqcups;":                  {'\u2294', '\uFE00'},
	"varsubsetneq;":            {'\u228A', '\uFE00'},
	"varsubsetneqq;":           {'\u2ACB', '\uFE00'},
	"varsupsetneq;":            {'\u228B', '\uFE00'},
	"varsupsetneqq;":           {'\u2ACC', '\uFE00'},
	"vnsub;":                   {'\u2282', '\u20D2'},
	"vnsup;":                   {'\u2283', '\u20D2'},
	"vsubnE;":                  {'\u2ACB', '\uFE00'},
	"vsubne;":                  {'\u228A', '\uFE00'},
	"vsupnE;":                  {'\u2ACC', '\uFE00'},
	"vsupne;":                  {'\u228B', '\uFE00'},
}
  07070100000D47000081A4000000000000000000000001645E367C000020DB000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/golang.org/x/net/html/escape.go    // Copyright 2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package html

import (
	"bytes"
	"strings"
	"unicode/utf8"
)

// These replacements permit compatibility with old numeric entities that
// assumed Windows-1252 encoding.
// https://html.spec.whatwg.org/multipage/syntax.html#consume-a-character-reference
var replacementTable = [...]rune{
	'\u20AC', // First entry is what 0x80 should be replaced with.
	'\u0081',
	'\u201A',
	'\u0192',
	'\u201E',
	'\u2026',
	'\u2020',
	'\u2021',
	'\u02C6',
	'\u2030',
	'\u0160',
	'\u2039',
	'\u0152',
	'\u008D',
	'\u017D',
	'\u008F',
	'\u0090',
	'\u2018',
	'\u2019',
	'\u201C',
	'\u201D',
	'\u2022',
	'\u2013',
	'\u2014',
	'\u02DC',
	'\u2122',
	'\u0161',
	'\u203A',
	'\u0153',
	'\u009D',
	'\u017E',
	'\u0178', // Last entry is 0x9F.
	// 0x00->'\uFFFD' is handled programmatically.
	// 0x0D->'\u000D' is a no-op.
}

// unescapeEntity reads an entity like "&lt;" from b[src:] and writes the
// corresponding "<" to b[dst:], returning the incremented dst and src cursors.
// Precondition: b[src] == '&' && dst <= src.
// attribute should be true if parsing an attribute value.
func unescapeEntity(b []byte, dst, src int, attribute bool) (dst1, src1 int) {
	// https://html.spec.whatwg.org/multipage/syntax.html#consume-a-character-reference

	// i starts at 1 because we already know that s[0] == '&'.
	i, s := 1, b[src:]

	if len(s) <= 1 {
		b[dst] = b[src]
		return dst + 1, src + 1
	}

	if s[i] == '#' {
		if len(s) <= 3 { // We need to have at least "&#.".
			b[dst] = b[src]
			return dst + 1, src + 1
		}
		i++
		c := s[i]
		hex := false
		if c == 'x' || c == 'X' {
			hex = true
			i++
		}

		x := '\x00'
		for i < len(s) {
			c = s[i]
			i++
			if hex {
				if '0' <= c && c <= '9' {
					x = 16*x + rune(c) - '0'
					continue
				} else if 'a' <= c && c <= 'f' {
					x = 16*x + rune(c) - 'a' + 10
					continue
				} else if 'A' <= c && c <= 'F' {
					x = 16*x + rune(c) - 'A' + 10
					continue
				}
			} else if '0' <= c && c <= '9' {
				x = 10*x + rune(c) - '0'
				continue
			}
			if c != ';' {
				i--
			}
			break
		}

		if i <= 3 { // No characters matched.
			b[dst] = b[src]
			return dst + 1, src + 1
		}

		if 0x80 <= x && x <= 0x9F {
			// Replace characters from Windows-1252 with UTF-8 equivalents.
			x = replacementTable[x-0x80]
		} else if x == 0 || (0xD800 <= x && x <= 0xDFFF) || x > 0x10FFFF {
			// Replace invalid characters with the replacement character.
			x = '\uFFFD'
		}

		return dst + utf8.EncodeRune(b[dst:], x), src + i
	}

	// Consume the maximum number of characters possible, with the
	// consumed characters matching one of the named references.

	for i < len(s) {
		c := s[i]
		i++
		// Lower-cased characters are more common in entities, so we check for them first.
		if 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || '0' <= c && c <= '9' {
			continue
		}
		if c != ';' {
			i--
		}
		break
	}

	entityName := string(s[1:i])
	if entityName == "" {
		// No-op.
	} else if attribute && entityName[len(entityName)-1] != ';' && len(s) > i && s[i] == '=' {
		// No-op.
	} else if x := entity[entityName]; x != 0 {
		return dst + utf8.EncodeRune(b[dst:], x), src + i
	} else if x := entity2[entityName]; x[0] != 0 {
		dst1 := dst + utf8.EncodeRune(b[dst:], x[0])
		return dst1 + utf8.EncodeRune(b[dst1:], x[1]), src + i
	} else if !attribute {
		maxLen := len(entityName) - 1
		if maxLen > longestEntityWithoutSemicolon {
			maxLen = longestEntityWithoutSemicolon
		}
		for j := maxLen; j > 1; j-- {
			if x := entity[entityName[:j]]; x != 0 {
				return dst + utf8.EncodeRune(b[dst:], x), src + j + 1
			}
		}
	}

	dst1, src1 = dst+i, src+i
	copy(b[dst:dst1], b[src:src1])
	return dst1, src1
}

// unescape unescapes b's entities in-place, so that "a&lt;b" becomes "a<b".
// attribute should be true if parsing an attribute value.
func unescape(b []byte, attribute bool) []byte {
	for i, c := range b {
		if c == '&' {
			dst, src := unescapeEntity(b, i, i, attribute)
			for src < len(b) {
				c := b[src]
				if c == '&' {
					dst, src = unescapeEntity(b, dst, src, attribute)
				} else {
					b[dst] = c
					dst, src = dst+1, src+1
				}
			}
			return b[0:dst]
		}
	}
	return b
}

// lower lower-cases the A-Z bytes in b in-place, so that "aBc" becomes "abc".
func lower(b []byte) []byte {
	for i, c := range b {
		if 'A' <= c && c <= 'Z' {
			b[i] = c + 'a' - 'A'
		}
	}
	return b
}

// escapeComment is like func escape but escapes its input bytes less often.
// Per https://github.com/golang/go/issues/58246 some HTML comments are (1)
// meaningful and (2) contain angle brackets that we'd like to avoid escaping
// unless we have to.
//
// "We have to" includes the '&' byte, since that introduces other escapes.
//
// It also includes those bytes (not including EOF) that would otherwise end
// the comment. Per the summary table at the bottom of comment_test.go, this is
// the '>' byte that, per above, we'd like to avoid escaping unless we have to.
//
// Studying the summary table (and T actions in its '>' column) closely, we
// only need to escape in states 43, 44, 49, 51 and 52. State 43 is at the
// start of the comment data. State 52 is after a '!'. The other three states
// are after a '-'.
//
// Our algorithm is thus to escape every '&' and to escape '>' if and only if:
//   - The '>' is after a '!' or '-' (in the unescaped data) or
//   - The '>' is at the start of the comment data (after the opening "<!--").
func escapeComment(w writer, s string) error {
	// When modifying this function, consider manually increasing the
	// maxSuffixLen constant in func TestComments, from 6 to e.g. 9 or more.
	// That increase should only be temporary, not committed, as it
	// exponentially affects the test running time.

	if len(s) == 0 {
		return nil
	}

	// Loop:
	//   - Grow j such that s[i:j] does not need escaping.
	//   - If s[j] does need escaping, output s[i:j] and an escaped s[j],
	//     resetting i and j to point past that s[j] byte.
	i := 0
	for j := 0; j < len(s); j++ {
		escaped := ""
		switch s[j] {
		case '&':
			escaped = "&amp;"

		case '>':
			if j > 0 {
				if prev := s[j-1]; (prev != '!') && (prev != '-') {
					continue
				}
			}
			escaped = "&gt;"

		default:
			continue
		}

		if i < j {
			if _, err := w.WriteString(s[i:j]); err != nil {
				return err
			}
		}
		if _, err := w.WriteString(escaped); err != nil {
			return err
		}
		i = j + 1
	}

	if i < len(s) {
		if _, err := w.WriteString(s[i:]); err != nil {
			return err
		}
	}
	return nil
}

// escapeCommentString is to EscapeString as escapeComment is to escape.
func escapeCommentString(s string) string {
	if strings.IndexAny(s, "&>") == -1 {
		return s
	}
	var buf bytes.Buffer
	escapeComment(&buf, s)
	return buf.String()
}

const escapedChars = "&'<>\"\r"

func escape(w writer, s string) error {
	i := strings.IndexAny(s, escapedChars)
	for i != -1 {
		if _, err := w.WriteString(s[:i]); err != nil {
			return err
		}
		var esc string
		switch s[i] {
		case '&':
			esc = "&amp;"
		case '\'':
			// "&#39;" is shorter than "&apos;" and apos was not in HTML until HTML5.
			esc = "&#39;"
		case '<':
			esc = "&lt;"
		case '>':
			esc = "&gt;"
		case '"':
			// "&#34;" is shorter than "&quot;".
			esc = "&#34;"
		case '\r':
			esc = "&#13;"
		default:
			panic("unrecognized escape character")
		}
		s = s[i+1:]
		if _, err := w.WriteString(esc); err != nil {
			return err
		}
		i = strings.IndexAny(s, escapedChars)
	}
	_, err := w.WriteString(s)
	return err
}

// EscapeString escapes special characters like "<" to become "&lt;". It
// escapes only five such characters: <, >, &, ' and ".
// UnescapeString(EscapeString(s)) == s always holds, but the converse isn't
// always true.
func EscapeString(s string) string {
	if strings.IndexAny(s, escapedChars) == -1 {
		return s
	}
	var buf bytes.Buffer
	escape(&buf, s)
	return buf.String()
}

// UnescapeString unescapes entities like "&lt;" to become "<". It unescapes a
// larger range of entities than EscapeString escapes. For example, "&aacute;"
// unescapes to "á", as does "&#225;" and "&xE1;".
// UnescapeString(EscapeString(s)) == s always holds, but the converse isn't
// always true.
func UnescapeString(s string) string {
	for _, c := range s {
		if c == '&' {
			return string(unescape([]byte(s), false))
		}
	}
	return s
}
 07070100000D48000081A4000000000000000000000001645E367C000018DA000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/golang.org/x/net/html/foreign.go   // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package html

import (
	"strings"
)

func adjustAttributeNames(aa []Attribute, nameMap map[string]string) {
	for i := range aa {
		if newName, ok := nameMap[aa[i].Key]; ok {
			aa[i].Key = newName
		}
	}
}

func adjustForeignAttributes(aa []Attribute) {
	for i, a := range aa {
		if a.Key == "" || a.Key[0] != 'x' {
			continue
		}
		switch a.Key {
		case "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show",
			"xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space", "xmlns:xlink":
			j := strings.Index(a.Key, ":")
			aa[i].Namespace = a.Key[:j]
			aa[i].Key = a.Key[j+1:]
		}
	}
}

func htmlIntegrationPoint(n *Node) bool {
	if n.Type != ElementNode {
		return false
	}
	switch n.Namespace {
	case "math":
		if n.Data == "annotation-xml" {
			for _, a := range n.Attr {
				if a.Key == "encoding" {
					val := strings.ToLower(a.Val)
					if val == "text/html" || val == "application/xhtml+xml" {
						return true
					}
				}
			}
		}
	case "svg":
		switch n.Data {
		case "desc", "foreignObject", "title":
			return true
		}
	}
	return false
}

func mathMLTextIntegrationPoint(n *Node) bool {
	if n.Namespace != "math" {
		return false
	}
	switch n.Data {
	case "mi", "mo", "mn", "ms", "mtext":
		return true
	}
	return false
}

// Section 12.2.6.5.
var breakout = map[string]bool{
	"b":          true,
	"big":        true,
	"blockquote": true,
	"body":       true,
	"br":         true,
	"center":     true,
	"code":       true,
	"dd":         true,
	"div":        true,
	"dl":         true,
	"dt":         true,
	"em":         true,
	"embed":      true,
	"h1":         true,
	"h2":         true,
	"h3":         true,
	"h4":         true,
	"h5":         true,
	"h6":         true,
	"head":       true,
	"hr":         true,
	"i":          true,
	"img":        true,
	"li":         true,
	"listing":    true,
	"menu":       true,
	"meta":       true,
	"nobr":       true,
	"ol":         true,
	"p":          true,
	"pre":        true,
	"ruby":       true,
	"s":          true,
	"small":      true,
	"span":       true,
	"strong":     true,
	"strike":     true,
	"sub":        true,
	"sup":        true,
	"table":      true,
	"tt":         true,
	"u":          true,
	"ul":         true,
	"var":        true,
}

// Section 12.2.6.5.
var svgTagNameAdjustments = map[string]string{
	"altglyph":            "altGlyph",
	"altglyphdef":         "altGlyphDef",
	"altglyphitem":        "altGlyphItem",
	"animatecolor":        "animateColor",
	"animatemotion":       "animateMotion",
	"animatetransform":    "animateTransform",
	"clippath":            "clipPath",
	"feblend":             "feBlend",
	"fecolormatrix":       "feColorMatrix",
	"fecomponenttransfer": "feComponentTransfer",
	"fecomposite":         "feComposite",
	"feconvolvematrix":    "feConvolveMatrix",
	"fediffuselighting":   "feDiffuseLighting",
	"fedisplacementmap":   "feDisplacementMap",
	"fedistantlight":      "feDistantLight",
	"feflood":             "feFlood",
	"fefunca":             "feFuncA",
	"fefuncb":             "feFuncB",
	"fefuncg":             "feFuncG",
	"fefuncr":             "feFuncR",
	"fegaussianblur":      "feGaussianBlur",
	"feimage":             "feImage",
	"femerge":             "feMerge",
	"femergenode":         "feMergeNode",
	"femorphology":        "feMorphology",
	"feoffset":            "feOffset",
	"fepointlight":        "fePointLight",
	"fespecularlighting":  "feSpecularLighting",
	"fespotlight":         "feSpotLight",
	"fetile":              "feTile",
	"feturbulence":        "feTurbulence",
	"foreignobject":       "foreignObject",
	"glyphref":            "glyphRef",
	"lineargradient":      "linearGradient",
	"radialgradient":      "radialGradient",
	"textpath":            "textPath",
}

// Section 12.2.6.1
var mathMLAttributeAdjustments = map[string]string{
	"definitionurl": "definitionURL",
}

var svgAttributeAdjustments = map[string]string{
	"attributename":       "attributeName",
	"attributetype":       "attributeType",
	"basefrequency":       "baseFrequency",
	"baseprofile":         "baseProfile",
	"calcmode":            "calcMode",
	"clippathunits":       "clipPathUnits",
	"diffuseconstant":     "diffuseConstant",
	"edgemode":            "edgeMode",
	"filterunits":         "filterUnits",
	"glyphref":            "glyphRef",
	"gradienttransform":   "gradientTransform",
	"gradientunits":       "gradientUnits",
	"kernelmatrix":        "kernelMatrix",
	"kernelunitlength":    "kernelUnitLength",
	"keypoints":           "keyPoints",
	"keysplines":          "keySplines",
	"keytimes":            "keyTimes",
	"lengthadjust":        "lengthAdjust",
	"limitingconeangle":   "limitingConeAngle",
	"markerheight":        "markerHeight",
	"markerunits":         "markerUnits",
	"markerwidth":         "markerWidth",
	"maskcontentunits":    "maskContentUnits",
	"maskunits":           "maskUnits",
	"numoctaves":          "numOctaves",
	"pathlength":          "pathLength",
	"patterncontentunits": "patternContentUnits",
	"patterntransform":    "patternTransform",
	"patternunits":        "patternUnits",
	"pointsatx":           "pointsAtX",
	"pointsaty":           "pointsAtY",
	"pointsatz":           "pointsAtZ",
	"preservealpha":       "preserveAlpha",
	"preserveaspectratio": "preserveAspectRatio",
	"primitiveunits":      "primitiveUnits",
	"refx":                "refX",
	"refy":                "refY",
	"repeatcount":         "repeatCount",
	"repeatdur":           "repeatDur",
	"requiredextensions":  "requiredExtensions",
	"requiredfeatures":    "requiredFeatures",
	"specularconstant":    "specularConstant",
	"specularexponent":    "specularExponent",
	"spreadmethod":        "spreadMethod",
	"startoffset":         "startOffset",
	"stddeviation":        "stdDeviation",
	"stitchtiles":         "stitchTiles",
	"surfacescale":        "surfaceScale",
	"systemlanguage":      "systemLanguage",
	"tablevalues":         "tableValues",
	"targetx":             "targetX",
	"targety":             "targetY",
	"textlength":          "textLength",
	"viewbox":             "viewBox",
	"viewtarget":          "viewTarget",
	"xchannelselector":    "xChannelSelector",
	"ychannelselector":    "yChannelSelector",
	"zoomandpan":          "zoomAndPan",
}
  07070100000D49000081A4000000000000000000000001645E367C00001611000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/golang.org/x/net/html/node.go  // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package html

import (
	"golang.org/x/net/html/atom"
)

// A NodeType is the type of a Node.
type NodeType uint32

const (
	ErrorNode NodeType = iota
	TextNode
	DocumentNode
	ElementNode
	CommentNode
	DoctypeNode
	// RawNode nodes are not returned by the parser, but can be part of the
	// Node tree passed to func Render to insert raw HTML (without escaping).
	// If so, this package makes no guarantee that the rendered HTML is secure
	// (from e.g. Cross Site Scripting attacks) or well-formed.
	RawNode
	scopeMarkerNode
)

// Section 12.2.4.3 says "The markers are inserted when entering applet,
// object, marquee, template, td, th, and caption elements, and are used
// to prevent formatting from "leaking" into applet, object, marquee,
// template, td, th, and caption elements".
var scopeMarker = Node{Type: scopeMarkerNode}

// A Node consists of a NodeType and some Data (tag name for element nodes,
// content for text) and are part of a tree of Nodes. Element nodes may also
// have a Namespace and contain a slice of Attributes. Data is unescaped, so
// that it looks like "a<b" rather than "a&lt;b". For element nodes, DataAtom
// is the atom for Data, or zero if Data is not a known tag name.
//
// An empty Namespace implies a "http://www.w3.org/1999/xhtml" namespace.
// Similarly, "math" is short for "http://www.w3.org/1998/Math/MathML", and
// "svg" is short for "http://www.w3.org/2000/svg".
type Node struct {
	Parent, FirstChild, LastChild, PrevSibling, NextSibling *Node

	Type      NodeType
	DataAtom  atom.Atom
	Data      string
	Namespace string
	Attr      []Attribute
}

// InsertBefore inserts newChild as a child of n, immediately before oldChild
// in the sequence of n's children. oldChild may be nil, in which case newChild
// is appended to the end of n's children.
//
// It will panic if newChild already has a parent or siblings.
func (n *Node) InsertBefore(newChild, oldChild *Node) {
	if newChild.Parent != nil || newChild.PrevSibling != nil || newChild.NextSibling != nil {
		panic("html: InsertBefore called for an attached child Node")
	}
	var prev, next *Node
	if oldChild != nil {
		prev, next = oldChild.PrevSibling, oldChild
	} else {
		prev = n.LastChild
	}
	if prev != nil {
		prev.NextSibling = newChild
	} else {
		n.FirstChild = newChild
	}
	if next != nil {
		next.PrevSibling = newChild
	} else {
		n.LastChild = newChild
	}
	newChild.Parent = n
	newChild.PrevSibling = prev
	newChild.NextSibling = next
}

// AppendChild adds a node c as a child of n.
//
// It will panic if c already has a parent or siblings.
func (n *Node) AppendChild(c *Node) {
	if c.Parent != nil || c.PrevSibling != nil || c.NextSibling != nil {
		panic("html: AppendChild called for an attached child Node")
	}
	last := n.LastChild
	if last != nil {
		last.NextSibling = c
	} else {
		n.FirstChild = c
	}
	n.LastChild = c
	c.Parent = n
	c.PrevSibling = last
}

// RemoveChild removes a node c that is a child of n. Afterwards, c will have
// no parent and no siblings.
//
// It will panic if c's parent is not n.
func (n *Node) RemoveChild(c *Node) {
	if c.Parent != n {
		panic("html: RemoveChild called for a non-child Node")
	}
	if n.FirstChild == c {
		n.FirstChild = c.NextSibling
	}
	if c.NextSibling != nil {
		c.NextSibling.PrevSibling = c.PrevSibling
	}
	if n.LastChild == c {
		n.LastChild = c.PrevSibling
	}
	if c.PrevSibling != nil {
		c.PrevSibling.NextSibling = c.NextSibling
	}
	c.Parent = nil
	c.PrevSibling = nil
	c.NextSibling = nil
}

// reparentChildren reparents all of src's child nodes to dst.
func reparentChildren(dst, src *Node) {
	for {
		child := src.FirstChild
		if child == nil {
			break
		}
		src.RemoveChild(child)
		dst.AppendChild(child)
	}
}

// clone returns a new node with the same type, data and attributes.
// The clone has no parent, no siblings and no children.
func (n *Node) clone() *Node {
	m := &Node{
		Type:     n.Type,
		DataAtom: n.DataAtom,
		Data:     n.Data,
		Attr:     make([]Attribute, len(n.Attr)),
	}
	copy(m.Attr, n.Attr)
	return m
}

// nodeStack is a stack of nodes.
type nodeStack []*Node

// pop pops the stack. It will panic if s is empty.
func (s *nodeStack) pop() *Node {
	i := len(*s)
	n := (*s)[i-1]
	*s = (*s)[:i-1]
	return n
}

// top returns the most recently pushed node, or nil if s is empty.
func (s *nodeStack) top() *Node {
	if i := len(*s); i > 0 {
		return (*s)[i-1]
	}
	return nil
}

// index returns the index of the top-most occurrence of n in the stack, or -1
// if n is not present.
func (s *nodeStack) index(n *Node) int {
	for i := len(*s) - 1; i >= 0; i-- {
		if (*s)[i] == n {
			return i
		}
	}
	return -1
}

// contains returns whether a is within s.
func (s *nodeStack) contains(a atom.Atom) bool {
	for _, n := range *s {
		if n.DataAtom == a && n.Namespace == "" {
			return true
		}
	}
	return false
}

// insert inserts a node at the given index.
func (s *nodeStack) insert(i int, n *Node) {
	(*s) = append(*s, nil)
	copy((*s)[i+1:], (*s)[i:])
	(*s)[i] = n
}

// remove removes a node from the stack. It is a no-op if n is not present.
func (s *nodeStack) remove(n *Node) {
	i := s.index(n)
	if i == -1 {
		return
	}
	copy((*s)[i:], (*s)[i+1:])
	j := len(*s) - 1
	(*s)[j] = nil
	*s = (*s)[:j]
}

type insertionModeStack []insertionMode

func (s *insertionModeStack) pop() (im insertionMode) {
	i := len(*s)
	im = (*s)[i-1]
	*s = (*s)[:i-1]
	return im
}

func (s *insertionModeStack) top() insertionMode {
	if i := len(*s); i > 0 {
		return (*s)[i-1]
	}
	return nil
}
   07070100000D4A000081A4000000000000000000000001645E367C0000EAA5000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/golang.org/x/net/html/parse.go // Copyright 2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package html

import (
	"errors"
	"fmt"
	"io"
	"strings"

	a "golang.org/x/net/html/atom"
)

// A parser implements the HTML5 parsing algorithm:
// https://html.spec.whatwg.org/multipage/syntax.html#tree-construction
type parser struct {
	// tokenizer provides the tokens for the parser.
	tokenizer *Tokenizer
	// tok is the most recently read token.
	tok Token
	// Self-closing tags like <hr/> are treated as start tags, except that
	// hasSelfClosingToken is set while they are being processed.
	hasSelfClosingToken bool
	// doc is the document root element.
	doc *Node
	// The stack of open elements (section 12.2.4.2) and active formatting
	// elements (section 12.2.4.3).
	oe, afe nodeStack
	// Element pointers (section 12.2.4.4).
	head, form *Node
	// Other parsing state flags (section 12.2.4.5).
	scripting, framesetOK bool
	// The stack of template insertion modes
	templateStack insertionModeStack
	// im is the current insertion mode.
	im insertionMode
	// originalIM is the insertion mode to go back to after completing a text
	// or inTableText insertion mode.
	originalIM insertionMode
	// fosterParenting is whether new elements should be inserted according to
	// the foster parenting rules (section 12.2.6.1).
	fosterParenting bool
	// quirks is whether the parser is operating in "quirks mode."
	quirks bool
	// fragment is whether the parser is parsing an HTML fragment.
	fragment bool
	// context is the context element when parsing an HTML fragment
	// (section 12.4).
	context *Node
}

func (p *parser) top() *Node {
	if n := p.oe.top(); n != nil {
		return n
	}
	return p.doc
}

// Stop tags for use in popUntil. These come from section 12.2.4.2.
var (
	defaultScopeStopTags = map[string][]a.Atom{
		"":     {a.Applet, a.Caption, a.Html, a.Table, a.Td, a.Th, a.Marquee, a.Object, a.Template},
		"math": {a.AnnotationXml, a.Mi, a.Mn, a.Mo, a.Ms, a.Mtext},
		"svg":  {a.Desc, a.ForeignObject, a.Title},
	}
)

type scope int

const (
	defaultScope scope = iota
	listItemScope
	buttonScope
	tableScope
	tableRowScope
	tableBodyScope
	selectScope
)

// popUntil pops the stack of open elements at the highest element whose tag
// is in matchTags, provided there is no higher element in the scope's stop
// tags (as defined in section 12.2.4.2). It returns whether or not there was
// such an element. If there was not, popUntil leaves the stack unchanged.
//
// For example, the set of stop tags for table scope is: "html", "table". If
// the stack was:
// ["html", "body", "font", "table", "b", "i", "u"]
// then popUntil(tableScope, "font") would return false, but
// popUntil(tableScope, "i") would return true and the stack would become:
// ["html", "body", "font", "table", "b"]
//
// If an element's tag is in both the stop tags and matchTags, then the stack
// will be popped and the function returns true (provided, of course, there was
// no higher element in the stack that was also in the stop tags). For example,
// popUntil(tableScope, "table") returns true and leaves:
// ["html", "body", "font"]
func (p *parser) popUntil(s scope, matchTags ...a.Atom) bool {
	if i := p.indexOfElementInScope(s, matchTags...); i != -1 {
		p.oe = p.oe[:i]
		return true
	}
	return false
}

// indexOfElementInScope returns the index in p.oe of the highest element whose
// tag is in matchTags that is in scope. If no matching element is in scope, it
// returns -1.
func (p *parser) indexOfElementInScope(s scope, matchTags ...a.Atom) int {
	for i := len(p.oe) - 1; i >= 0; i-- {
		tagAtom := p.oe[i].DataAtom
		if p.oe[i].Namespace == "" {
			for _, t := range matchTags {
				if t == tagAtom {
					return i
				}
			}
			switch s {
			case defaultScope:
				// No-op.
			case listItemScope:
				if tagAtom == a.Ol || tagAtom == a.Ul {
					return -1
				}
			case buttonScope:
				if tagAtom == a.Button {
					return -1
				}
			case tableScope:
				if tagAtom == a.Html || tagAtom == a.Table || tagAtom == a.Template {
					return -1
				}
			case selectScope:
				if tagAtom != a.Optgroup && tagAtom != a.Option {
					return -1
				}
			default:
				panic("unreachable")
			}
		}
		switch s {
		case defaultScope, listItemScope, buttonScope:
			for _, t := range defaultScopeStopTags[p.oe[i].Namespace] {
				if t == tagAtom {
					return -1
				}
			}
		}
	}
	return -1
}

// elementInScope is like popUntil, except that it doesn't modify the stack of
// open elements.
func (p *parser) elementInScope(s scope, matchTags ...a.Atom) bool {
	return p.indexOfElementInScope(s, matchTags...) != -1
}

// clearStackToContext pops elements off the stack of open elements until a
// scope-defined element is found.
func (p *parser) clearStackToContext(s scope) {
	for i := len(p.oe) - 1; i >= 0; i-- {
		tagAtom := p.oe[i].DataAtom
		switch s {
		case tableScope:
			if tagAtom == a.Html || tagAtom == a.Table || tagAtom == a.Template {
				p.oe = p.oe[:i+1]
				return
			}
		case tableRowScope:
			if tagAtom == a.Html || tagAtom == a.Tr || tagAtom == a.Template {
				p.oe = p.oe[:i+1]
				return
			}
		case tableBodyScope:
			if tagAtom == a.Html || tagAtom == a.Tbody || tagAtom == a.Tfoot || tagAtom == a.Thead || tagAtom == a.Template {
				p.oe = p.oe[:i+1]
				return
			}
		default:
			panic("unreachable")
		}
	}
}

// parseGenericRawTextElement implements the generic raw text element parsing
// algorithm defined in 12.2.6.2.
// https://html.spec.whatwg.org/multipage/parsing.html#parsing-elements-that-contain-only-text
// TODO: Since both RAWTEXT and RCDATA states are treated as tokenizer's part
// officially, need to make tokenizer consider both states.
func (p *parser) parseGenericRawTextElement() {
	p.addElement()
	p.originalIM = p.im
	p.im = textIM
}

// generateImpliedEndTags pops nodes off the stack of open elements as long as
// the top node has a tag name of dd, dt, li, optgroup, option, p, rb, rp, rt or rtc.
// If exceptions are specified, nodes with that name will not be popped off.
func (p *parser) generateImpliedEndTags(exceptions ...string) {
	var i int
loop:
	for i = len(p.oe) - 1; i >= 0; i-- {
		n := p.oe[i]
		if n.Type != ElementNode {
			break
		}
		switch n.DataAtom {
		case a.Dd, a.Dt, a.Li, a.Optgroup, a.Option, a.P, a.Rb, a.Rp, a.Rt, a.Rtc:
			for _, except := range exceptions {
				if n.Data == except {
					break loop
				}
			}
			continue
		}
		break
	}

	p.oe = p.oe[:i+1]
}

// addChild adds a child node n to the top element, and pushes n onto the stack
// of open elements if it is an element node.
func (p *parser) addChild(n *Node) {
	if p.shouldFosterParent() {
		p.fosterParent(n)
	} else {
		p.top().AppendChild(n)
	}

	if n.Type == ElementNode {
		p.oe = append(p.oe, n)
	}
}

// shouldFosterParent returns whether the next node to be added should be
// foster parented.
func (p *parser) shouldFosterParent() bool {
	if p.fosterParenting {
		switch p.top().DataAtom {
		case a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr:
			return true
		}
	}
	return false
}

// fosterParent adds a child node according to the foster parenting rules.
// Section 12.2.6.1, "foster parenting".
func (p *parser) fosterParent(n *Node) {
	var table, parent, prev, template *Node
	var i int
	for i = len(p.oe) - 1; i >= 0; i-- {
		if p.oe[i].DataAtom == a.Table {
			table = p.oe[i]
			break
		}
	}

	var j int
	for j = len(p.oe) - 1; j >= 0; j-- {
		if p.oe[j].DataAtom == a.Template {
			template = p.oe[j]
			break
		}
	}

	if template != nil && (table == nil || j > i) {
		template.AppendChild(n)
		return
	}

	if table == nil {
		// The foster parent is the html element.
		parent = p.oe[0]
	} else {
		parent = table.Parent
	}
	if parent == nil {
		parent = p.oe[i-1]
	}

	if table != nil {
		prev = table.PrevSibling
	} else {
		prev = parent.LastChild
	}
	if prev != nil && prev.Type == TextNode && n.Type == TextNode {
		prev.Data += n.Data
		return
	}

	parent.InsertBefore(n, table)
}

// addText adds text to the preceding node if it is a text node, or else it
// calls addChild with a new text node.
func (p *parser) addText(text string) {
	if text == "" {
		return
	}

	if p.shouldFosterParent() {
		p.fosterParent(&Node{
			Type: TextNode,
			Data: text,
		})
		return
	}

	t := p.top()
	if n := t.LastChild; n != nil && n.Type == TextNode {
		n.Data += text
		return
	}
	p.addChild(&Node{
		Type: TextNode,
		Data: text,
	})
}

// addElement adds a child element based on the current token.
func (p *parser) addElement() {
	p.addChild(&Node{
		Type:     ElementNode,
		DataAtom: p.tok.DataAtom,
		Data:     p.tok.Data,
		Attr:     p.tok.Attr,
	})
}

// Section 12.2.4.3.
func (p *parser) addFormattingElement() {
	tagAtom, attr := p.tok.DataAtom, p.tok.Attr
	p.addElement()

	// Implement the Noah's Ark clause, but with three per family instead of two.
	identicalElements := 0
findIdenticalElements:
	for i := len(p.afe) - 1; i >= 0; i-- {
		n := p.afe[i]
		if n.Type == scopeMarkerNode {
			break
		}
		if n.Type != ElementNode {
			continue
		}
		if n.Namespace != "" {
			continue
		}
		if n.DataAtom != tagAtom {
			continue
		}
		if len(n.Attr) != len(attr) {
			continue
		}
	compareAttributes:
		for _, t0 := range n.Attr {
			for _, t1 := range attr {
				if t0.Key == t1.Key && t0.Namespace == t1.Namespace && t0.Val == t1.Val {
					// Found a match for this attribute, continue with the next attribute.
					continue compareAttributes
				}
			}
			// If we get here, there is no attribute that matches a.
			// Therefore the element is not identical to the new one.
			continue findIdenticalElements
		}

		identicalElements++
		if identicalElements >= 3 {
			p.afe.remove(n)
		}
	}

	p.afe = append(p.afe, p.top())
}

// Section 12.2.4.3.
func (p *parser) clearActiveFormattingElements() {
	for {
		if n := p.afe.pop(); len(p.afe) == 0 || n.Type == scopeMarkerNode {
			return
		}
	}
}

// Section 12.2.4.3.
func (p *parser) reconstructActiveFormattingElements() {
	n := p.afe.top()
	if n == nil {
		return
	}
	if n.Type == scopeMarkerNode || p.oe.index(n) != -1 {
		return
	}
	i := len(p.afe) - 1
	for n.Type != scopeMarkerNode && p.oe.index(n) == -1 {
		if i == 0 {
			i = -1
			break
		}
		i--
		n = p.afe[i]
	}
	for {
		i++
		clone := p.afe[i].clone()
		p.addChild(clone)
		p.afe[i] = clone
		if i == len(p.afe)-1 {
			break
		}
	}
}

// Section 12.2.5.
func (p *parser) acknowledgeSelfClosingTag() {
	p.hasSelfClosingToken = false
}

// An insertion mode (section 12.2.4.1) is the state transition function from
// a particular state in the HTML5 parser's state machine. It updates the
// parser's fields depending on parser.tok (where ErrorToken means EOF).
// It returns whether the token was consumed.
type insertionMode func(*parser) bool

// setOriginalIM sets the insertion mode to return to after completing a text or
// inTableText insertion mode.
// Section 12.2.4.1, "using the rules for".
func (p *parser) setOriginalIM() {
	if p.originalIM != nil {
		panic("html: bad parser state: originalIM was set twice")
	}
	p.originalIM = p.im
}

// Section 12.2.4.1, "reset the insertion mode".
func (p *parser) resetInsertionMode() {
	for i := len(p.oe) - 1; i >= 0; i-- {
		n := p.oe[i]
		last := i == 0
		if last && p.context != nil {
			n = p.context
		}

		switch n.DataAtom {
		case a.Select:
			if !last {
				for ancestor, first := n, p.oe[0]; ancestor != first; {
					ancestor = p.oe[p.oe.index(ancestor)-1]
					switch ancestor.DataAtom {
					case a.Template:
						p.im = inSelectIM
						return
					case a.Table:
						p.im = inSelectInTableIM
						return
					}
				}
			}
			p.im = inSelectIM
		case a.Td, a.Th:
			// TODO: remove this divergence from the HTML5 spec.
			//
			// See https://bugs.chromium.org/p/chromium/issues/detail?id=829668
			p.im = inCellIM
		case a.Tr:
			p.im = inRowIM
		case a.Tbody, a.Thead, a.Tfoot:
			p.im = inTableBodyIM
		case a.Caption:
			p.im = inCaptionIM
		case a.Colgroup:
			p.im = inColumnGroupIM
		case a.Table:
			p.im = inTableIM
		case a.Template:
			// TODO: remove this divergence from the HTML5 spec.
			if n.Namespace != "" {
				continue
			}
			p.im = p.templateStack.top()
		case a.Head:
			// TODO: remove this divergence from the HTML5 spec.
			//
			// See https://bugs.chromium.org/p/chromium/issues/detail?id=829668
			p.im = inHeadIM
		case a.Body:
			p.im = inBodyIM
		case a.Frameset:
			p.im = inFramesetIM
		case a.Html:
			if p.head == nil {
				p.im = beforeHeadIM
			} else {
				p.im = afterHeadIM
			}
		default:
			if last {
				p.im = inBodyIM
				return
			}
			continue
		}
		return
	}
}

const whitespace = " \t\r\n\f"

// Section 12.2.6.4.1.
func initialIM(p *parser) bool {
	switch p.tok.Type {
	case TextToken:
		p.tok.Data = strings.TrimLeft(p.tok.Data, whitespace)
		if len(p.tok.Data) == 0 {
			// It was all whitespace, so ignore it.
			return true
		}
	case CommentToken:
		p.doc.AppendChild(&Node{
			Type: CommentNode,
			Data: p.tok.Data,
		})
		return true
	case DoctypeToken:
		n, quirks := parseDoctype(p.tok.Data)
		p.doc.AppendChild(n)
		p.quirks = quirks
		p.im = beforeHTMLIM
		return true
	}
	p.quirks = true
	p.im = beforeHTMLIM
	return false
}

// Section 12.2.6.4.2.
func beforeHTMLIM(p *parser) bool {
	switch p.tok.Type {
	case DoctypeToken:
		// Ignore the token.
		return true
	case TextToken:
		p.tok.Data = strings.TrimLeft(p.tok.Data, whitespace)
		if len(p.tok.Data) == 0 {
			// It was all whitespace, so ignore it.
			return true
		}
	case StartTagToken:
		if p.tok.DataAtom == a.Html {
			p.addElement()
			p.im = beforeHeadIM
			return true
		}
	case EndTagToken:
		switch p.tok.DataAtom {
		case a.Head, a.Body, a.Html, a.Br:
			p.parseImpliedToken(StartTagToken, a.Html, a.Html.String())
			return false
		default:
			// Ignore the token.
			return true
		}
	case CommentToken:
		p.doc.AppendChild(&Node{
			Type: CommentNode,
			Data: p.tok.Data,
		})
		return true
	}
	p.parseImpliedToken(StartTagToken, a.Html, a.Html.String())
	return false
}

// Section 12.2.6.4.3.
func beforeHeadIM(p *parser) bool {
	switch p.tok.Type {
	case TextToken:
		p.tok.Data = strings.TrimLeft(p.tok.Data, whitespace)
		if len(p.tok.Data) == 0 {
			// It was all whitespace, so ignore it.
			return true
		}
	case StartTagToken:
		switch p.tok.DataAtom {
		case a.Head:
			p.addElement()
			p.head = p.top()
			p.im = inHeadIM
			return true
		case a.Html:
			return inBodyIM(p)
		}
	case EndTagToken:
		switch p.tok.DataAtom {
		case a.Head, a.Body, a.Html, a.Br:
			p.parseImpliedToken(StartTagToken, a.Head, a.Head.String())
			return false
		default:
			// Ignore the token.
			return true
		}
	case CommentToken:
		p.addChild(&Node{
			Type: CommentNode,
			Data: p.tok.Data,
		})
		return true
	case DoctypeToken:
		// Ignore the token.
		return true
	}

	p.parseImpliedToken(StartTagToken, a.Head, a.Head.String())
	return false
}

// Section 12.2.6.4.4.
func inHeadIM(p *parser) bool {
	switch p.tok.Type {
	case TextToken:
		s := strings.TrimLeft(p.tok.Data, whitespace)
		if len(s) < len(p.tok.Data) {
			// Add the initial whitespace to the current node.
			p.addText(p.tok.Data[:len(p.tok.Data)-len(s)])
			if s == "" {
				return true
			}
			p.tok.Data = s
		}
	case StartTagToken:
		switch p.tok.DataAtom {
		case a.Html:
			return inBodyIM(p)
		case a.Base, a.Basefont, a.Bgsound, a.Link, a.Meta:
			p.addElement()
			p.oe.pop()
			p.acknowledgeSelfClosingTag()
			return true
		case a.Noscript:
			if p.scripting {
				p.parseGenericRawTextElement()
				return true
			}
			p.addElement()
			p.im = inHeadNoscriptIM
			// Don't let the tokenizer go into raw text mode when scripting is disabled.
			p.tokenizer.NextIsNotRawText()
			return true
		case a.Script, a.Title:
			p.addElement()
			p.setOriginalIM()
			p.im = textIM
			return true
		case a.Noframes, a.Style:
			p.parseGenericRawTextElement()
			return true
		case a.Head:
			// Ignore the token.
			return true
		case a.Template:
			// TODO: remove this divergence from the HTML5 spec.
			//
			// We don't handle all of the corner cases when mixing foreign
			// content (i.e. <math> or <svg>) with <template>. Without this
			// early return, we can get into an infinite loop, possibly because
			// of the "TODO... further divergence" a little below.
			//
			// As a workaround, if we are mixing foreign content and templates,
			// just ignore the rest of the HTML. Foreign content is rare and a
			// relatively old HTML feature. Templates are also rare and a
			// relatively new HTML feature. Their combination is very rare.
			for _, e := range p.oe {
				if e.Namespace != "" {
					p.im = ignoreTheRemainingTokens
					return true
				}
			}

			p.addElement()
			p.afe = append(p.afe, &scopeMarker)
			p.framesetOK = false
			p.im = inTemplateIM
			p.templateStack = append(p.templateStack, inTemplateIM)
			return true
		}
	case EndTagToken:
		switch p.tok.DataAtom {
		case a.Head:
			p.oe.pop()
			p.im = afterHeadIM
			return true
		case a.Body, a.Html, a.Br:
			p.parseImpliedToken(EndTagToken, a.Head, a.Head.String())
			return false
		case a.Template:
			if !p.oe.contains(a.Template) {
				return true
			}
			// TODO: remove this further divergence from the HTML5 spec.
			//
			// See https://bugs.chromium.org/p/chromium/issues/detail?id=829668
			p.generateImpliedEndTags()
			for i := len(p.oe) - 1; i >= 0; i-- {
				if n := p.oe[i]; n.Namespace == "" && n.DataAtom == a.Template {
					p.oe = p.oe[:i]
					break
				}
			}
			p.clearActiveFormattingElements()
			p.templateStack.pop()
			p.resetInsertionMode()
			return true
		default:
			// Ignore the token.
			return true
		}
	case CommentToken:
		p.addChild(&Node{
			Type: CommentNode,
			Data: p.tok.Data,
		})
		return true
	case DoctypeToken:
		// Ignore the token.
		return true
	}

	p.parseImpliedToken(EndTagToken, a.Head, a.Head.String())
	return false
}

// Section 12.2.6.4.5.
func inHeadNoscriptIM(p *parser) bool {
	switch p.tok.Type {
	case DoctypeToken:
		// Ignore the token.
		return true
	case StartTagToken:
		switch p.tok.DataAtom {
		case a.Html:
			return inBodyIM(p)
		case a.Basefont, a.Bgsound, a.Link, a.Meta, a.Noframes, a.Style:
			return inHeadIM(p)
		case a.Head:
			// Ignore the token.
			return true
		case a.Noscript:
			// Don't let the tokenizer go into raw text mode even when a <noscript>
			// tag is in "in head noscript" insertion mode.
			p.tokenizer.NextIsNotRawText()
			// Ignore the token.
			return true
		}
	case EndTagToken:
		switch p.tok.DataAtom {
		case a.Noscript, a.Br:
		default:
			// Ignore the token.
			return true
		}
	case TextToken:
		s := strings.TrimLeft(p.tok.Data, whitespace)
		if len(s) == 0 {
			// It was all whitespace.
			return inHeadIM(p)
		}
	case CommentToken:
		return inHeadIM(p)
	}
	p.oe.pop()
	if p.top().DataAtom != a.Head {
		panic("html: the new current node will be a head element.")
	}
	p.im = inHeadIM
	if p.tok.DataAtom == a.Noscript {
		return true
	}
	return false
}

// Section 12.2.6.4.6.
func afterHeadIM(p *parser) bool {
	switch p.tok.Type {
	case TextToken:
		s := strings.TrimLeft(p.tok.Data, whitespace)
		if len(s) < len(p.tok.Data) {
			// Add the initial whitespace to the current node.
			p.addText(p.tok.Data[:len(p.tok.Data)-len(s)])
			if s == "" {
				return true
			}
			p.tok.Data = s
		}
	case StartTagToken:
		switch p.tok.DataAtom {
		case a.Html:
			return inBodyIM(p)
		case a.Body:
			p.addElement()
			p.framesetOK = false
			p.im = inBodyIM
			return true
		case a.Frameset:
			p.addElement()
			p.im = inFramesetIM
			return true
		case a.Base, a.Basefont, a.Bgsound, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Template, a.Title:
			p.oe = append(p.oe, p.head)
			defer p.oe.remove(p.head)
			return inHeadIM(p)
		case a.Head:
			// Ignore the token.
			return true
		}
	case EndTagToken:
		switch p.tok.DataAtom {
		case a.Body, a.Html, a.Br:
			// Drop down to creating an implied <body> tag.
		case a.Template:
			return inHeadIM(p)
		default:
			// Ignore the token.
			return true
		}
	case CommentToken:
		p.addChild(&Node{
			Type: CommentNode,
			Data: p.tok.Data,
		})
		return true
	case DoctypeToken:
		// Ignore the token.
		return true
	}

	p.parseImpliedToken(StartTagToken, a.Body, a.Body.String())
	p.framesetOK = true
	return false
}

// copyAttributes copies attributes of src not found on dst to dst.
func copyAttributes(dst *Node, src Token) {
	if len(src.Attr) == 0 {
		return
	}
	attr := map[string]string{}
	for _, t := range dst.Attr {
		attr[t.Key] = t.Val
	}
	for _, t := range src.Attr {
		if _, ok := attr[t.Key]; !ok {
			dst.Attr = append(dst.Attr, t)
			attr[t.Key] = t.Val
		}
	}
}

// Section 12.2.6.4.7.
func inBodyIM(p *parser) bool {
	switch p.tok.Type {
	case TextToken:
		d := p.tok.Data
		switch n := p.oe.top(); n.DataAtom {
		case a.Pre, a.Listing:
			if n.FirstChild == nil {
				// Ignore a newline at the start of a <pre> block.
				if d != "" && d[0] == '\r' {
					d = d[1:]
				}
				if d != "" && d[0] == '\n' {
					d = d[1:]
				}
			}
		}
		d = strings.Replace(d, "\x00", "", -1)
		if d == "" {
			return true
		}
		p.reconstructActiveFormattingElements()
		p.addText(d)
		if p.framesetOK && strings.TrimLeft(d, whitespace) != "" {
			// There were non-whitespace characters inserted.
			p.framesetOK = false
		}
	case StartTagToken:
		switch p.tok.DataAtom {
		case a.Html:
			if p.oe.contains(a.Template) {
				return true
			}
			copyAttributes(p.oe[0], p.tok)
		case a.Base, a.Basefont, a.Bgsound, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Template, a.Title:
			return inHeadIM(p)
		case a.Body:
			if p.oe.contains(a.Template) {
				return true
			}
			if len(p.oe) >= 2 {
				body := p.oe[1]
				if body.Type == ElementNode && body.DataAtom == a.Body {
					p.framesetOK = false
					copyAttributes(body, p.tok)
				}
			}
		case a.Frameset:
			if !p.framesetOK || len(p.oe) < 2 || p.oe[1].DataAtom != a.Body {
				// Ignore the token.
				return true
			}
			body := p.oe[1]
			if body.Parent != nil {
				body.Parent.RemoveChild(body)
			}
			p.oe = p.oe[:1]
			p.addElement()
			p.im = inFramesetIM
			return true
		case a.Address, a.Article, a.Aside, a.Blockquote, a.Center, a.Details, a.Dialog, a.Dir, a.Div, a.Dl, a.Fieldset, a.Figcaption, a.Figure, a.Footer, a.Header, a.Hgroup, a.Main, a.Menu, a.Nav, a.Ol, a.P, a.Section, a.Summary, a.Ul:
			p.popUntil(buttonScope, a.P)
			p.addElement()
		case a.H1, a.H2, a.H3, a.H4, a.H5, a.H6:
			p.popUntil(buttonScope, a.P)
			switch n := p.top(); n.DataAtom {
			case a.H1, a.H2, a.H3, a.H4, a.H5, a.H6:
				p.oe.pop()
			}
			p.addElement()
		case a.Pre, a.Listing:
			p.popUntil(buttonScope, a.P)
			p.addElement()
			// The newline, if any, will be dealt with by the TextToken case.
			p.framesetOK = false
		case a.Form:
			if p.form != nil && !p.oe.contains(a.Template) {
				// Ignore the token
				return true
			}
			p.popUntil(buttonScope, a.P)
			p.addElement()
			if !p.oe.contains(a.Template) {
				p.form = p.top()
			}
		case a.Li:
			p.framesetOK = false
			for i := len(p.oe) - 1; i >= 0; i-- {
				node := p.oe[i]
				switch node.DataAtom {
				case a.Li:
					p.oe = p.oe[:i]
				case a.Address, a.Div, a.P:
					continue
				default:
					if !isSpecialElement(node) {
						continue
					}
				}
				break
			}
			p.popUntil(buttonScope, a.P)
			p.addElement()
		case a.Dd, a.Dt:
			p.framesetOK = false
			for i := len(p.oe) - 1; i >= 0; i-- {
				node := p.oe[i]
				switch node.DataAtom {
				case a.Dd, a.Dt:
					p.oe = p.oe[:i]
				case a.Address, a.Div, a.P:
					continue
				default:
					if !isSpecialElement(node) {
						continue
					}
				}
				break
			}
			p.popUntil(buttonScope, a.P)
			p.addElement()
		case a.Plaintext:
			p.popUntil(buttonScope, a.P)
			p.addElement()
		case a.Button:
			p.popUntil(defaultScope, a.Button)
			p.reconstructActiveFormattingElements()
			p.addElement()
			p.framesetOK = false
		case a.A:
			for i := len(p.afe) - 1; i >= 0 && p.afe[i].Type != scopeMarkerNode; i-- {
				if n := p.afe[i]; n.Type == ElementNode && n.DataAtom == a.A {
					p.inBodyEndTagFormatting(a.A, "a")
					p.oe.remove(n)
					p.afe.remove(n)
					break
				}
			}
			p.reconstructActiveFormattingElements()
			p.addFormattingElement()
		case a.B, a.Big, a.Code, a.Em, a.Font, a.I, a.S, a.Small, a.Strike, a.Strong, a.Tt, a.U:
			p.reconstructActiveFormattingElements()
			p.addFormattingElement()
		case a.Nobr:
			p.reconstructActiveFormattingElements()
			if p.elementInScope(defaultScope, a.Nobr) {
				p.inBodyEndTagFormatting(a.Nobr, "nobr")
				p.reconstructActiveFormattingElements()
			}
			p.addFormattingElement()
		case a.Applet, a.Marquee, a.Object:
			p.reconstructActiveFormattingElements()
			p.addElement()
			p.afe = append(p.afe, &scopeMarker)
			p.framesetOK = false
		case a.Table:
			if !p.quirks {
				p.popUntil(buttonScope, a.P)
			}
			p.addElement()
			p.framesetOK = false
			p.im = inTableIM
			return true
		case a.Area, a.Br, a.Embed, a.Img, a.Input, a.Keygen, a.Wbr:
			p.reconstructActiveFormattingElements()
			p.addElement()
			p.oe.pop()
			p.acknowledgeSelfClosingTag()
			if p.tok.DataAtom == a.Input {
				for _, t := range p.tok.Attr {
					if t.Key == "type" {
						if strings.ToLower(t.Val) == "hidden" {
							// Skip setting framesetOK = false
							return true
						}
					}
				}
			}
			p.framesetOK = false
		case a.Param, a.Source, a.Track:
			p.addElement()
			p.oe.pop()
			p.acknowledgeSelfClosingTag()
		case a.Hr:
			p.popUntil(buttonScope, a.P)
			p.addElement()
			p.oe.pop()
			p.acknowledgeSelfClosingTag()
			p.framesetOK = false
		case a.Image:
			p.tok.DataAtom = a.Img
			p.tok.Data = a.Img.String()
			return false
		case a.Textarea:
			p.addElement()
			p.setOriginalIM()
			p.framesetOK = false
			p.im = textIM
		case a.Xmp:
			p.popUntil(buttonScope, a.P)
			p.reconstructActiveFormattingElements()
			p.framesetOK = false
			p.parseGenericRawTextElement()
		case a.Iframe:
			p.framesetOK = false
			p.parseGenericRawTextElement()
		case a.Noembed:
			p.parseGenericRawTextElement()
		case a.Noscript:
			if p.scripting {
				p.parseGenericRawTextElement()
				return true
			}
			p.reconstructActiveFormattingElements()
			p.addElement()
			// Don't let the tokenizer go into raw text mode when scripting is disabled.
			p.tokenizer.NextIsNotRawText()
		case a.Select:
			p.reconstructActiveFormattingElements()
			p.addElement()
			p.framesetOK = false
			p.im = inSelectIM
			return true
		case a.Optgroup, a.Option:
			if p.top().DataAtom == a.Option {
				p.oe.pop()
			}
			p.reconstructActiveFormattingElements()
			p.addElement()
		case a.Rb, a.Rtc:
			if p.elementInScope(defaultScope, a.Ruby) {
				p.generateImpliedEndTags()
			}
			p.addElement()
		case a.Rp, a.Rt:
			if p.elementInScope(defaultScope, a.Ruby) {
				p.generateImpliedEndTags("rtc")
			}
			p.addElement()
		case a.Math, a.Svg:
			p.reconstructActiveFormattingElements()
			if p.tok.DataAtom == a.Math {
				adjustAttributeNames(p.tok.Attr, mathMLAttributeAdjustments)
			} else {
				adjustAttributeNames(p.tok.Attr, svgAttributeAdjustments)
			}
			adjustForeignAttributes(p.tok.Attr)
			p.addElement()
			p.top().Namespace = p.tok.Data
			if p.hasSelfClosingToken {
				p.oe.pop()
				p.acknowledgeSelfClosingTag()
			}
			return true
		case a.Caption, a.Col, a.Colgroup, a.Frame, a.Head, a.Tbody, a.Td, a.Tfoot, a.Th, a.Thead, a.Tr:
			// Ignore the token.
		default:
			p.reconstructActiveFormattingElements()
			p.addElement()
		}
	case EndTagToken:
		switch p.tok.DataAtom {
		case a.Body:
			if p.elementInScope(defaultScope, a.Body) {
				p.im = afterBodyIM
			}
		case a.Html:
			if p.elementInScope(defaultScope, a.Body) {
				p.parseImpliedToken(EndTagToken, a.Body, a.Body.String())
				return false
			}
			return true
		case a.Address, a.Article, a.Aside, a.Blockquote, a.Button, a.Center, a.Details, a.Dialog, a.Dir, a.Div, a.Dl, a.Fieldset, a.Figcaption, a.Figure, a.Footer, a.Header, a.Hgroup, a.Listing, a.Main, a.Menu, a.Nav, a.Ol, a.Pre, a.Section, a.Summary, a.Ul:
			p.popUntil(defaultScope, p.tok.DataAtom)
		case a.Form:
			if p.oe.contains(a.Template) {
				i := p.indexOfElementInScope(defaultScope, a.Form)
				if i == -1 {
					// Ignore the token.
					return true
				}
				p.generateImpliedEndTags()
				if p.oe[i].DataAtom != a.Form {
					// Ignore the token.
					return true
				}
				p.popUntil(defaultScope, a.Form)
			} else {
				node := p.form
				p.form = nil
				i := p.indexOfElementInScope(defaultScope, a.Form)
				if node == nil || i == -1 || p.oe[i] != node {
					// Ignore the token.
					return true
				}
				p.generateImpliedEndTags()
				p.oe.remove(node)
			}
		case a.P:
			if !p.elementInScope(buttonScope, a.P) {
				p.parseImpliedToken(StartTagToken, a.P, a.P.String())
			}
			p.popUntil(buttonScope, a.P)
		case a.Li:
			p.popUntil(listItemScope, a.Li)
		case a.Dd, a.Dt:
			p.popUntil(defaultScope, p.tok.DataAtom)
		case a.H1, a.H2, a.H3, a.H4, a.H5, a.H6:
			p.popUntil(defaultScope, a.H1, a.H2, a.H3, a.H4, a.H5, a.H6)
		case a.A, a.B, a.Big, a.Code, a.Em, a.Font, a.I, a.Nobr, a.S, a.Small, a.Strike, a.Strong, a.Tt, a.U:
			p.inBodyEndTagFormatting(p.tok.DataAtom, p.tok.Data)
		case a.Applet, a.Marquee, a.Object:
			if p.popUntil(defaultScope, p.tok.DataAtom) {
				p.clearActiveFormattingElements()
			}
		case a.Br:
			p.tok.Type = StartTagToken
			return false
		case a.Template:
			return inHeadIM(p)
		default:
			p.inBodyEndTagOther(p.tok.DataAtom, p.tok.Data)
		}
	case CommentToken:
		p.addChild(&Node{
			Type: CommentNode,
			Data: p.tok.Data,
		})
	case ErrorToken:
		// TODO: remove this divergence from the HTML5 spec.
		if len(p.templateStack) > 0 {
			p.im = inTemplateIM
			return false
		}
		for _, e := range p.oe {
			switch e.DataAtom {
			case a.Dd, a.Dt, a.Li, a.Optgroup, a.Option, a.P, a.Rb, a.Rp, a.Rt, a.Rtc, a.Tbody, a.Td, a.Tfoot, a.Th,
				a.Thead, a.Tr, a.Body, a.Html:
			default:
				return true
			}
		}
	}

	return true
}

func (p *parser) inBodyEndTagFormatting(tagAtom a.Atom, tagName string) {
	// This is the "adoption agency" algorithm, described at
	// https://html.spec.whatwg.org/multipage/syntax.html#adoptionAgency

	// TODO: this is a fairly literal line-by-line translation of that algorithm.
	// Once the code successfully parses the comprehensive test suite, we should
	// refactor this code to be more idiomatic.

	// Steps 1-2
	if current := p.oe.top(); current.Data == tagName && p.afe.index(current) == -1 {
		p.oe.pop()
		return
	}

	// Steps 3-5. The outer loop.
	for i := 0; i < 8; i++ {
		// Step 6. Find the formatting element.
		var formattingElement *Node
		for j := len(p.afe) - 1; j >= 0; j-- {
			if p.afe[j].Type == scopeMarkerNode {
				break
			}
			if p.afe[j].DataAtom == tagAtom {
				formattingElement = p.afe[j]
				break
			}
		}
		if formattingElement == nil {
			p.inBodyEndTagOther(tagAtom, tagName)
			return
		}

		// Step 7. Ignore the tag if formatting element is not in the stack of open elements.
		feIndex := p.oe.index(formattingElement)
		if feIndex == -1 {
			p.afe.remove(formattingElement)
			return
		}
		// Step 8. Ignore the tag if formatting element is not in the scope.
		if !p.elementInScope(defaultScope, tagAtom) {
			// Ignore the tag.
			return
		}

		// Step 9. This step is omitted because it's just a parse error but no need to return.

		// Steps 10-11. Find the furthest block.
		var furthestBlock *Node
		for _, e := range p.oe[feIndex:] {
			if isSpecialElement(e) {
				furthestBlock = e
				break
			}
		}
		if furthestBlock == nil {
			e := p.oe.pop()
			for e != formattingElement {
				e = p.oe.pop()
			}
			p.afe.remove(e)
			return
		}

		// Steps 12-13. Find the common ancestor and bookmark node.
		commonAncestor := p.oe[feIndex-1]
		bookmark := p.afe.index(formattingElement)

		// Step 14. The inner loop. Find the lastNode to reparent.
		lastNode := furthestBlock
		node := furthestBlock
		x := p.oe.index(node)
		// Step 14.1.
		j := 0
		for {
			// Step 14.2.
			j++
			// Step. 14.3.
			x--
			node = p.oe[x]
			// Step 14.4. Go to the next step if node is formatting element.
			if node == formattingElement {
				break
			}
			// Step 14.5. Remove node from the list of active formatting elements if
			// inner loop counter is greater than three and node is in the list of
			// active formatting elements.
			if ni := p.afe.index(node); j > 3 && ni > -1 {
				p.afe.remove(node)
				// If any element of the list of active formatting elements is removed,
				// we need to take care whether bookmark should be decremented or not.
				// This is because the value of bookmark may exceed the size of the
				// list by removing elements from the list.
				if ni <= bookmark {
					bookmark--
				}
				continue
			}
			// Step 14.6. Continue the next inner loop if node is not in the list of
			// active formatting elements.
			if p.afe.index(node) == -1 {
				p.oe.remove(node)
				continue
			}
			// Step 14.7.
			clone := node.clone()
			p.afe[p.afe.index(node)] = clone
			p.oe[p.oe.index(node)] = clone
			node = clone
			// Step 14.8.
			if lastNode == furthestBlock {
				bookmark = p.afe.index(node) + 1
			}
			// Step 14.9.
			if lastNode.Parent != nil {
				lastNode.Parent.RemoveChild(lastNode)
			}
			node.AppendChild(lastNode)
			// Step 14.10.
			lastNode = node
		}

		// Step 15. Reparent lastNode to the common ancestor,
		// or for misnested table nodes, to the foster parent.
		if lastNode.Parent != nil {
			lastNode.Parent.RemoveChild(lastNode)
		}
		switch commonAncestor.DataAtom {
		case a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr:
			p.fosterParent(lastNode)
		default:
			commonAncestor.AppendChild(lastNode)
		}

		// Steps 16-18. Reparent nodes from the furthest block's children
		// to a clone of the formatting element.
		clone := formattingElement.clone()
		reparentChildren(clone, furthestBlock)
		furthestBlock.AppendChild(clone)

		// Step 19. Fix up the list of active formatting elements.
		if oldLoc := p.afe.index(formattingElement); oldLoc != -1 && oldLoc < bookmark {
			// Move the bookmark with the rest of the list.
			bookmark--
		}
		p.afe.remove(formattingElement)
		p.afe.insert(bookmark, clone)

		// Step 20. Fix up the stack of open elements.
		p.oe.remove(formattingElement)
		p.oe.insert(p.oe.index(furthestBlock)+1, clone)
	}
}

// inBodyEndTagOther performs the "any other end tag" algorithm for inBodyIM.
// "Any other end tag" handling from 12.2.6.5 The rules for parsing tokens in foreign content
// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inforeign
func (p *parser) inBodyEndTagOther(tagAtom a.Atom, tagName string) {
	for i := len(p.oe) - 1; i >= 0; i-- {
		// Two element nodes have the same tag if they have the same Data (a
		// string-typed field). As an optimization, for common HTML tags, each
		// Data string is assigned a unique, non-zero DataAtom (a uint32-typed
		// field), since integer comparison is faster than string comparison.
		// Uncommon (custom) tags get a zero DataAtom.
		//
		// The if condition here is equivalent to (p.oe[i].Data == tagName).
		if (p.oe[i].DataAtom == tagAtom) &&
			((tagAtom != 0) || (p.oe[i].Data == tagName)) {
			p.oe = p.oe[:i]
			break
		}
		if isSpecialElement(p.oe[i]) {
			break
		}
	}
}

// Section 12.2.6.4.8.
func textIM(p *parser) bool {
	switch p.tok.Type {
	case ErrorToken:
		p.oe.pop()
	case TextToken:
		d := p.tok.Data
		if n := p.oe.top(); n.DataAtom == a.Textarea && n.FirstChild == nil {
			// Ignore a newline at the start of a <textarea> block.
			if d != "" && d[0] == '\r' {
				d = d[1:]
			}
			if d != "" && d[0] == '\n' {
				d = d[1:]
			}
		}
		if d == "" {
			return true
		}
		p.addText(d)
		return true
	case EndTagToken:
		p.oe.pop()
	}
	p.im = p.originalIM
	p.originalIM = nil
	return p.tok.Type == EndTagToken
}

// Section 12.2.6.4.9.
func inTableIM(p *parser) bool {
	switch p.tok.Type {
	case TextToken:
		p.tok.Data = strings.Replace(p.tok.Data, "\x00", "", -1)
		switch p.oe.top().DataAtom {
		case a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr:
			if strings.Trim(p.tok.Data, whitespace) == "" {
				p.addText(p.tok.Data)
				return true
			}
		}
	case StartTagToken:
		switch p.tok.DataAtom {
		case a.Caption:
			p.clearStackToContext(tableScope)
			p.afe = append(p.afe, &scopeMarker)
			p.addElement()
			p.im = inCaptionIM
			return true
		case a.Colgroup:
			p.clearStackToContext(tableScope)
			p.addElement()
			p.im = inColumnGroupIM
			return true
		case a.Col:
			p.parseImpliedToken(StartTagToken, a.Colgroup, a.Colgroup.String())
			return false
		case a.Tbody, a.Tfoot, a.Thead:
			p.clearStackToContext(tableScope)
			p.addElement()
			p.im = inTableBodyIM
			return true
		case a.Td, a.Th, a.Tr:
			p.parseImpliedToken(StartTagToken, a.Tbody, a.Tbody.String())
			return false
		case a.Table:
			if p.popUntil(tableScope, a.Table) {
				p.resetInsertionMode()
				return false
			}
			// Ignore the token.
			return true
		case a.Style, a.Script, a.Template:
			return inHeadIM(p)
		case a.Input:
			for _, t := range p.tok.Attr {
				if t.Key == "type" && strings.ToLower(t.Val) == "hidden" {
					p.addElement()
					p.oe.pop()
					return true
				}
			}
			// Otherwise drop down to the default action.
		case a.Form:
			if p.oe.contains(a.Template) || p.form != nil {
				// Ignore the token.
				return true
			}
			p.addElement()
			p.form = p.oe.pop()
		case a.Select:
			p.reconstructActiveFormattingElements()
			switch p.top().DataAtom {
			case a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr:
				p.fosterParenting = true
			}
			p.addElement()
			p.fosterParenting = false
			p.framesetOK = false
			p.im = inSelectInTableIM
			return true
		}
	case EndTagToken:
		switch p.tok.DataAtom {
		case a.Table:
			if p.popUntil(tableScope, a.Table) {
				p.resetInsertionMode()
				return true
			}
			// Ignore the token.
			return true
		case a.Body, a.Caption, a.Col, a.Colgroup, a.Html, a.Tbody, a.Td, a.Tfoot, a.Th, a.Thead, a.Tr:
			// Ignore the token.
			return true
		case a.Template:
			return inHeadIM(p)
		}
	case CommentToken:
		p.addChild(&Node{
			Type: CommentNode,
			Data: p.tok.Data,
		})
		return true
	case DoctypeToken:
		// Ignore the token.
		return true
	case ErrorToken:
		return inBodyIM(p)
	}

	p.fosterParenting = true
	defer func() { p.fosterParenting = false }()

	return inBodyIM(p)
}

// Section 12.2.6.4.11.
func inCaptionIM(p *parser) bool {
	switch p.tok.Type {
	case StartTagToken:
		switch p.tok.DataAtom {
		case a.Caption, a.Col, a.Colgroup, a.Tbody, a.Td, a.Tfoot, a.Thead, a.Tr:
			if !p.popUntil(tableScope, a.Caption) {
				// Ignore the token.
				return true
			}
			p.clearActiveFormattingElements()
			p.im = inTableIM
			return false
		case a.Select:
			p.reconstructActiveFormattingElements()
			p.addElement()
			p.framesetOK = false
			p.im = inSelectInTableIM
			return true
		}
	case EndTagToken:
		switch p.tok.DataAtom {
		case a.Caption:
			if p.popUntil(tableScope, a.Caption) {
				p.clearActiveFormattingElements()
				p.im = inTableIM
			}
			return true
		case a.Table:
			if !p.popUntil(tableScope, a.Caption) {
				// Ignore the token.
				return true
			}
			p.clearActiveFormattingElements()
			p.im = inTableIM
			return false
		case a.Body, a.Col, a.Colgroup, a.Html, a.Tbody, a.Td, a.Tfoot, a.Th, a.Thead, a.Tr:
			// Ignore the token.
			return true
		}
	}
	return inBodyIM(p)
}

// Section 12.2.6.4.12.
func inColumnGroupIM(p *parser) bool {
	switch p.tok.Type {
	case TextToken:
		s := strings.TrimLeft(p.tok.Data, whitespace)
		if len(s) < len(p.tok.Data) {
			// Add the initial whitespace to the current node.
			p.addText(p.tok.Data[:len(p.tok.Data)-len(s)])
			if s == "" {
				return true
			}
			p.tok.Data = s
		}
	case CommentToken:
		p.addChild(&Node{
			Type: CommentNode,
			Data: p.tok.Data,
		})
		return true
	case DoctypeToken:
		// Ignore the token.
		return true
	case StartTagToken:
		switch p.tok.DataAtom {
		case a.Html:
			return inBodyIM(p)
		case a.Col:
			p.addElement()
			p.oe.pop()
			p.acknowledgeSelfClosingTag()
			return true
		case a.Template:
			return inHeadIM(p)
		}
	case EndTagToken:
		switch p.tok.DataAtom {
		case a.Colgroup:
			if p.oe.top().DataAtom == a.Colgroup {
				p.oe.pop()
				p.im = inTableIM
			}
			return true
		case a.Col:
			// Ignore the token.
			return true
		case a.Template:
			return inHeadIM(p)
		}
	case ErrorToken:
		return inBodyIM(p)
	}
	if p.oe.top().DataAtom != a.Colgroup {
		return true
	}
	p.oe.pop()
	p.im = inTableIM
	return false
}

// Section 12.2.6.4.13.
func inTableBodyIM(p *parser) bool {
	switch p.tok.Type {
	case StartTagToken:
		switch p.tok.DataAtom {
		case a.Tr:
			p.clearStackToContext(tableBodyScope)
			p.addElement()
			p.im = inRowIM
			return true
		case a.Td, a.Th:
			p.parseImpliedToken(StartTagToken, a.Tr, a.Tr.String())
			return false
		case a.Caption, a.Col, a.Colgroup, a.Tbody, a.Tfoot, a.Thead:
			if p.popUntil(tableScope, a.Tbody, a.Thead, a.Tfoot) {
				p.im = inTableIM
				return false
			}
			// Ignore the token.
			return true
		}
	case EndTagToken:
		switch p.tok.DataAtom {
		case a.Tbody, a.Tfoot, a.Thead:
			if p.elementInScope(tableScope, p.tok.DataAtom) {
				p.clearStackToContext(tableBodyScope)
				p.oe.pop()
				p.im = inTableIM
			}
			return true
		case a.Table:
			if p.popUntil(tableScope, a.Tbody, a.Thead, a.Tfoot) {
				p.im = inTableIM
				return false
			}
			// Ignore the token.
			return true
		case a.Body, a.Caption, a.Col, a.Colgroup, a.Html, a.Td, a.Th, a.Tr:
			// Ignore the token.
			return true
		}
	case CommentToken:
		p.addChild(&Node{
			Type: CommentNode,
			Data: p.tok.Data,
		})
		return true
	}

	return inTableIM(p)
}

// Section 12.2.6.4.14.
func inRowIM(p *parser) bool {
	switch p.tok.Type {
	case StartTagToken:
		switch p.tok.DataAtom {
		case a.Td, a.Th:
			p.clearStackToContext(tableRowScope)
			p.addElement()
			p.afe = append(p.afe, &scopeMarker)
			p.im = inCellIM
			return true
		case a.Caption, a.Col, a.Colgroup, a.Tbody, a.Tfoot, a.Thead, a.Tr:
			if p.popUntil(tableScope, a.Tr) {
				p.im = inTableBodyIM
				return false
			}
			// Ignore the token.
			return true
		}
	case EndTagToken:
		switch p.tok.DataAtom {
		case a.Tr:
			if p.popUntil(tableScope, a.Tr) {
				p.im = inTableBodyIM
				return true
			}
			// Ignore the token.
			return true
		case a.Table:
			if p.popUntil(tableScope, a.Tr) {
				p.im = inTableBodyIM
				return false
			}
			// Ignore the token.
			return true
		case a.Tbody, a.Tfoot, a.Thead:
			if p.elementInScope(tableScope, p.tok.DataAtom) {
				p.parseImpliedToken(EndTagToken, a.Tr, a.Tr.String())
				return false
			}
			// Ignore the token.
			return true
		case a.Body, a.Caption, a.Col, a.Colgroup, a.Html, a.Td, a.Th:
			// Ignore the token.
			return true
		}
	}

	return inTableIM(p)
}

// Section 12.2.6.4.15.
func inCellIM(p *parser) bool {
	switch p.tok.Type {
	case StartTagToken:
		switch p.tok.DataAtom {
		case a.Caption, a.Col, a.Colgroup, a.Tbody, a.Td, a.Tfoot, a.Th, a.Thead, a.Tr:
			if p.popUntil(tableScope, a.Td, a.Th) {
				// Close the cell and reprocess.
				p.clearActiveFormattingElements()
				p.im = inRowIM
				return false
			}
			// Ignore the token.
			return true
		case a.Select:
			p.reconstructActiveFormattingElements()
			p.addElement()
			p.framesetOK = false
			p.im = inSelectInTableIM
			return true
		}
	case EndTagToken:
		switch p.tok.DataAtom {
		case a.Td, a.Th:
			if !p.popUntil(tableScope, p.tok.DataAtom) {
				// Ignore the token.
				return true
			}
			p.clearActiveFormattingElements()
			p.im = inRowIM
			return true
		case a.Body, a.Caption, a.Col, a.Colgroup, a.Html:
			// Ignore the token.
			return true
		case a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr:
			if !p.elementInScope(tableScope, p.tok.DataAtom) {
				// Ignore the token.
				return true
			}
			// Close the cell and reprocess.
			if p.popUntil(tableScope, a.Td, a.Th) {
				p.clearActiveFormattingElements()
			}
			p.im = inRowIM
			return false
		}
	}
	return inBodyIM(p)
}

// Section 12.2.6.4.16.
func inSelectIM(p *parser) bool {
	switch p.tok.Type {
	case TextToken:
		p.addText(strings.Replace(p.tok.Data, "\x00", "", -1))
	case StartTagToken:
		switch p.tok.DataAtom {
		case a.Html:
			return inBodyIM(p)
		case a.Option:
			if p.top().DataAtom == a.Option {
				p.oe.pop()
			}
			p.addElement()
		case a.Optgroup:
			if p.top().DataAtom == a.Option {
				p.oe.pop()
			}
			if p.top().DataAtom == a.Optgroup {
				p.oe.pop()
			}
			p.addElement()
		case a.Select:
			if !p.popUntil(selectScope, a.Select) {
				// Ignore the token.
				return true
			}
			p.resetInsertionMode()
		case a.Input, a.Keygen, a.Textarea:
			if p.elementInScope(selectScope, a.Select) {
				p.parseImpliedToken(EndTagToken, a.Select, a.Select.String())
				return false
			}
			// In order to properly ignore <textarea>, we need to change the tokenizer mode.
			p.tokenizer.NextIsNotRawText()
			// Ignore the token.
			return true
		case a.Script, a.Template:
			return inHeadIM(p)
		case a.Iframe, a.Noembed, a.Noframes, a.Noscript, a.Plaintext, a.Style, a.Title, a.Xmp:
			// Don't let the tokenizer go into raw text mode when there are raw tags
			// to be ignored. These tags should be ignored from the tokenizer
			// properly.
			p.tokenizer.NextIsNotRawText()
			// Ignore the token.
			return true
		}
	case EndTagToken:
		switch p.tok.DataAtom {
		case a.Option:
			if p.top().DataAtom == a.Option {
				p.oe.pop()
			}
		case a.Optgroup:
			i := len(p.oe) - 1
			if p.oe[i].DataAtom == a.Option {
				i--
			}
			if p.oe[i].DataAtom == a.Optgroup {
				p.oe = p.oe[:i]
			}
		case a.Select:
			if !p.popUntil(selectScope, a.Select) {
				// Ignore the token.
				return true
			}
			p.resetInsertionMode()
		case a.Template:
			return inHeadIM(p)
		}
	case CommentToken:
		p.addChild(&Node{
			Type: CommentNode,
			Data: p.tok.Data,
		})
	case DoctypeToken:
		// Ignore the token.
		return true
	case ErrorToken:
		return inBodyIM(p)
	}

	return true
}

// Section 12.2.6.4.17.
func inSelectInTableIM(p *parser) bool {
	switch p.tok.Type {
	case StartTagToken, EndTagToken:
		switch p.tok.DataAtom {
		case a.Caption, a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr, a.Td, a.Th:
			if p.tok.Type == EndTagToken && !p.elementInScope(tableScope, p.tok.DataAtom) {
				// Ignore the token.
				return true
			}
			// This is like p.popUntil(selectScope, a.Select), but it also
			// matches <math select>, not just <select>. Matching the MathML
			// tag is arguably incorrect (conceptually), but it mimics what
			// Chromium does.
			for i := len(p.oe) - 1; i >= 0; i-- {
				if n := p.oe[i]; n.DataAtom == a.Select {
					p.oe = p.oe[:i]
					break
				}
			}
			p.resetInsertionMode()
			return false
		}
	}
	return inSelectIM(p)
}

// Section 12.2.6.4.18.
func inTemplateIM(p *parser) bool {
	switch p.tok.Type {
	case TextToken, CommentToken, DoctypeToken:
		return inBodyIM(p)
	case StartTagToken:
		switch p.tok.DataAtom {
		case a.Base, a.Basefont, a.Bgsound, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Template, a.Title:
			return inHeadIM(p)
		case a.Caption, a.Colgroup, a.Tbody, a.Tfoot, a.Thead:
			p.templateStack.pop()
			p.templateStack = append(p.templateStack, inTableIM)
			p.im = inTableIM
			return false
		case a.Col:
			p.templateStack.pop()
			p.templateStack = append(p.templateStack, inColumnGroupIM)
			p.im = inColumnGroupIM
			return false
		case a.Tr:
			p.templateStack.pop()
			p.templateStack = append(p.templateStack, inTableBodyIM)
			p.im = inTableBodyIM
			return false
		case a.Td, a.Th:
			p.templateStack.pop()
			p.templateStack = append(p.templateStack, inRowIM)
			p.im = inRowIM
			return false
		default:
			p.templateStack.pop()
			p.templateStack = append(p.templateStack, inBodyIM)
			p.im = inBodyIM
			return false
		}
	case EndTagToken:
		switch p.tok.DataAtom {
		case a.Template:
			return inHeadIM(p)
		default:
			// Ignore the token.
			return true
		}
	case ErrorToken:
		if !p.oe.contains(a.Template) {
			// Ignore the token.
			return true
		}
		// TODO: remove this divergence from the HTML5 spec.
		//
		// See https://bugs.chromium.org/p/chromium/issues/detail?id=829668
		p.generateImpliedEndTags()
		for i := len(p.oe) - 1; i >= 0; i-- {
			if n := p.oe[i]; n.Namespace == "" && n.DataAtom == a.Template {
				p.oe = p.oe[:i]
				break
			}
		}
		p.clearActiveFormattingElements()
		p.templateStack.pop()
		p.resetInsertionMode()
		return false
	}
	return false
}

// Section 12.2.6.4.19.
func afterBodyIM(p *parser) bool {
	switch p.tok.Type {
	case ErrorToken:
		// Stop parsing.
		return true
	case TextToken:
		s := strings.TrimLeft(p.tok.Data, whitespace)
		if len(s) == 0 {
			// It was all whitespace.
			return inBodyIM(p)
		}
	case StartTagToken:
		if p.tok.DataAtom == a.Html {
			return inBodyIM(p)
		}
	case EndTagToken:
		if p.tok.DataAtom == a.Html {
			if !p.fragment {
				p.im = afterAfterBodyIM
			}
			return true
		}
	case CommentToken:
		// The comment is attached to the <html> element.
		if len(p.oe) < 1 || p.oe[0].DataAtom != a.Html {
			panic("html: bad parser state: <html> element not found, in the after-body insertion mode")
		}
		p.oe[0].AppendChild(&Node{
			Type: CommentNode,
			Data: p.tok.Data,
		})
		return true
	}
	p.im = inBodyIM
	return false
}

// Section 12.2.6.4.20.
func inFramesetIM(p *parser) bool {
	switch p.tok.Type {
	case CommentToken:
		p.addChild(&Node{
			Type: CommentNode,
			Data: p.tok.Data,
		})
	case TextToken:
		// Ignore all text but whitespace.
		s := strings.Map(func(c rune) rune {
			switch c {
			case ' ', '\t', '\n', '\f', '\r':
				return c
			}
			return -1
		}, p.tok.Data)
		if s != "" {
			p.addText(s)
		}
	case StartTagToken:
		switch p.tok.DataAtom {
		case a.Html:
			return inBodyIM(p)
		case a.Frameset:
			p.addElement()
		case a.Frame:
			p.addElement()
			p.oe.pop()
			p.acknowledgeSelfClosingTag()
		case a.Noframes:
			return inHeadIM(p)
		}
	case EndTagToken:
		switch p.tok.DataAtom {
		case a.Frameset:
			if p.oe.top().DataAtom != a.Html {
				p.oe.pop()
				if p.oe.top().DataAtom != a.Frameset {
					p.im = afterFramesetIM
					return true
				}
			}
		}
	default:
		// Ignore the token.
	}
	return true
}

// Section 12.2.6.4.21.
func afterFramesetIM(p *parser) bool {
	switch p.tok.Type {
	case CommentToken:
		p.addChild(&Node{
			Type: CommentNode,
			Data: p.tok.Data,
		})
	case TextToken:
		// Ignore all text but whitespace.
		s := strings.Map(func(c rune) rune {
			switch c {
			case ' ', '\t', '\n', '\f', '\r':
				return c
			}
			return -1
		}, p.tok.Data)
		if s != "" {
			p.addText(s)
		}
	case StartTagToken:
		switch p.tok.DataAtom {
		case a.Html:
			return inBodyIM(p)
		case a.Noframes:
			return inHeadIM(p)
		}
	case EndTagToken:
		switch p.tok.DataAtom {
		case a.Html:
			p.im = afterAfterFramesetIM
			return true
		}
	default:
		// Ignore the token.
	}
	return true
}

// Section 12.2.6.4.22.
func afterAfterBodyIM(p *parser) bool {
	switch p.tok.Type {
	case ErrorToken:
		// Stop parsing.
		return true
	case TextToken:
		s := strings.TrimLeft(p.tok.Data, whitespace)
		if len(s) == 0 {
			// It was all whitespace.
			return inBodyIM(p)
		}
	case StartTagToken:
		if p.tok.DataAtom == a.Html {
			return inBodyIM(p)
		}
	case CommentToken:
		p.doc.AppendChild(&Node{
			Type: CommentNode,
			Data: p.tok.Data,
		})
		return true
	case DoctypeToken:
		return inBodyIM(p)
	}
	p.im = inBodyIM
	return false
}

// Section 12.2.6.4.23.
func afterAfterFramesetIM(p *parser) bool {
	switch p.tok.Type {
	case CommentToken:
		p.doc.AppendChild(&Node{
			Type: CommentNode,
			Data: p.tok.Data,
		})
	case TextToken:
		// Ignore all text but whitespace.
		s := strings.Map(func(c rune) rune {
			switch c {
			case ' ', '\t', '\n', '\f', '\r':
				return c
			}
			return -1
		}, p.tok.Data)
		if s != "" {
			p.tok.Data = s
			return inBodyIM(p)
		}
	case StartTagToken:
		switch p.tok.DataAtom {
		case a.Html:
			return inBodyIM(p)
		case a.Noframes:
			return inHeadIM(p)
		}
	case DoctypeToken:
		return inBodyIM(p)
	default:
		// Ignore the token.
	}
	return true
}

func ignoreTheRemainingTokens(p *parser) bool {
	return true
}

const whitespaceOrNUL = whitespace + "\x00"

// Section 12.2.6.5
func parseForeignContent(p *parser) bool {
	switch p.tok.Type {
	case TextToken:
		if p.framesetOK {
			p.framesetOK = strings.TrimLeft(p.tok.Data, whitespaceOrNUL) == ""
		}
		p.tok.Data = strings.Replace(p.tok.Data, "\x00", "\ufffd", -1)
		p.addText(p.tok.Data)
	case CommentToken:
		p.addChild(&Node{
			Type: CommentNode,
			Data: p.tok.Data,
		})
	case StartTagToken:
		if !p.fragment {
			b := breakout[p.tok.Data]
			if p.tok.DataAtom == a.Font {
			loop:
				for _, attr := range p.tok.Attr {
					switch attr.Key {
					case "color", "face", "size":
						b = true
						break loop
					}
				}
			}
			if b {
				for i := len(p.oe) - 1; i >= 0; i-- {
					n := p.oe[i]
					if n.Namespace == "" || htmlIntegrationPoint(n) || mathMLTextIntegrationPoint(n) {
						p.oe = p.oe[:i+1]
						break
					}
				}
				return false
			}
		}
		current := p.adjustedCurrentNode()
		switch current.Namespace {
		case "math":
			adjustAttributeNames(p.tok.Attr, mathMLAttributeAdjustments)
		case "svg":
			// Adjust SVG tag names. The tokenizer lower-cases tag names, but
			// SVG wants e.g. "foreignObject" with a capital second "O".
			if x := svgTagNameAdjustments[p.tok.Data]; x != "" {
				p.tok.DataAtom = a.Lookup([]byte(x))
				p.tok.Data = x
			}
			adjustAttributeNames(p.tok.Attr, svgAttributeAdjustments)
		default:
			panic("html: bad parser state: unexpected namespace")
		}
		adjustForeignAttributes(p.tok.Attr)
		namespace := current.Namespace
		p.addElement()
		p.top().Namespace = namespace
		if namespace != "" {
			// Don't let the tokenizer go into raw text mode in foreign content
			// (e.g. in an SVG <title> tag).
			p.tokenizer.NextIsNotRawText()
		}
		if p.hasSelfClosingToken {
			p.oe.pop()
			p.acknowledgeSelfClosingTag()
		}
	case EndTagToken:
		for i := len(p.oe) - 1; i >= 0; i-- {
			if p.oe[i].Namespace == "" {
				return p.im(p)
			}
			if strings.EqualFold(p.oe[i].Data, p.tok.Data) {
				p.oe = p.oe[:i]
				break
			}
		}
		return true
	default:
		// Ignore the token.
	}
	return true
}

// Section 12.2.4.2.
func (p *parser) adjustedCurrentNode() *Node {
	if len(p.oe) == 1 && p.fragment && p.context != nil {
		return p.context
	}
	return p.oe.top()
}

// Section 12.2.6.
func (p *parser) inForeignContent() bool {
	if len(p.oe) == 0 {
		return false
	}
	n := p.adjustedCurrentNode()
	if n.Namespace == "" {
		return false
	}
	if mathMLTextIntegrationPoint(n) {
		if p.tok.Type == StartTagToken && p.tok.DataAtom != a.Mglyph && p.tok.DataAtom != a.Malignmark {
			return false
		}
		if p.tok.Type == TextToken {
			return false
		}
	}
	if n.Namespace == "math" && n.DataAtom == a.AnnotationXml && p.tok.Type == StartTagToken && p.tok.DataAtom == a.Svg {
		return false
	}
	if htmlIntegrationPoint(n) && (p.tok.Type == StartTagToken || p.tok.Type == TextToken) {
		return false
	}
	if p.tok.Type == ErrorToken {
		return false
	}
	return true
}

// parseImpliedToken parses a token as though it had appeared in the parser's
// input.
func (p *parser) parseImpliedToken(t TokenType, dataAtom a.Atom, data string) {
	realToken, selfClosing := p.tok, p.hasSelfClosingToken
	p.tok = Token{
		Type:     t,
		DataAtom: dataAtom,
		Data:     data,
	}
	p.hasSelfClosingToken = false
	p.parseCurrentToken()
	p.tok, p.hasSelfClosingToken = realToken, selfClosing
}

// parseCurrentToken runs the current token through the parsing routines
// until it is consumed.
func (p *parser) parseCurrentToken() {
	if p.tok.Type == SelfClosingTagToken {
		p.hasSelfClosingToken = true
		p.tok.Type = StartTagToken
	}

	consumed := false
	for !consumed {
		if p.inForeignContent() {
			consumed = parseForeignContent(p)
		} else {
			consumed = p.im(p)
		}
	}

	if p.hasSelfClosingToken {
		// This is a parse error, but ignore it.
		p.hasSelfClosingToken = false
	}
}

func (p *parser) parse() error {
	// Iterate until EOF. Any other error will cause an early return.
	var err error
	for err != io.EOF {
		// CDATA sections are allowed only in foreign content.
		n := p.oe.top()
		p.tokenizer.AllowCDATA(n != nil && n.Namespace != "")
		// Read and parse the next token.
		p.tokenizer.Next()
		p.tok = p.tokenizer.Token()
		if p.tok.Type == ErrorToken {
			err = p.tokenizer.Err()
			if err != nil && err != io.EOF {
				return err
			}
		}
		p.parseCurrentToken()
	}
	return nil
}

// Parse returns the parse tree for the HTML from the given Reader.
//
// It implements the HTML5 parsing algorithm
// (https://html.spec.whatwg.org/multipage/syntax.html#tree-construction),
// which is very complicated. The resultant tree can contain implicitly created
// nodes that have no explicit <tag> listed in r's data, and nodes' parents can
// differ from the nesting implied by a naive processing of start and end
// <tag>s. Conversely, explicit <tag>s in r's data can be silently dropped,
// with no corresponding node in the resulting tree.
//
// The input is assumed to be UTF-8 encoded.
func Parse(r io.Reader) (*Node, error) {
	return ParseWithOptions(r)
}

// ParseFragment parses a fragment of HTML and returns the nodes that were
// found. If the fragment is the InnerHTML for an existing element, pass that
// element in context.
//
// It has the same intricacies as Parse.
func ParseFragment(r io.Reader, context *Node) ([]*Node, error) {
	return ParseFragmentWithOptions(r, context)
}

// ParseOption configures a parser.
type ParseOption func(p *parser)

// ParseOptionEnableScripting configures the scripting flag.
// https://html.spec.whatwg.org/multipage/webappapis.html#enabling-and-disabling-scripting
//
// By default, scripting is enabled.
func ParseOptionEnableScripting(enable bool) ParseOption {
	return func(p *parser) {
		p.scripting = enable
	}
}

// ParseWithOptions is like Parse, with options.
func ParseWithOptions(r io.Reader, opts ...ParseOption) (*Node, error) {
	p := &parser{
		tokenizer: NewTokenizer(r),
		doc: &Node{
			Type: DocumentNode,
		},
		scripting:  true,
		framesetOK: true,
		im:         initialIM,
	}

	for _, f := range opts {
		f(p)
	}

	if err := p.parse(); err != nil {
		return nil, err
	}
	return p.doc, nil
}

// ParseFragmentWithOptions is like ParseFragment, with options.
func ParseFragmentWithOptions(r io.Reader, context *Node, opts ...ParseOption) ([]*Node, error) {
	contextTag := ""
	if context != nil {
		if context.Type != ElementNode {
			return nil, errors.New("html: ParseFragment of non-element Node")
		}
		// The next check isn't just context.DataAtom.String() == context.Data because
		// it is valid to pass an element whose tag isn't a known atom. For example,
		// DataAtom == 0 and Data = "tagfromthefuture" is perfectly consistent.
		if context.DataAtom != a.Lookup([]byte(context.Data)) {
			return nil, fmt.Errorf("html: inconsistent Node: DataAtom=%q, Data=%q", context.DataAtom, context.Data)
		}
		contextTag = context.DataAtom.String()
	}
	p := &parser{
		doc: &Node{
			Type: DocumentNode,
		},
		scripting: true,
		fragment:  true,
		context:   context,
	}
	if context != nil && context.Namespace != "" {
		p.tokenizer = NewTokenizer(r)
	} else {
		p.tokenizer = NewTokenizerFragment(r, contextTag)
	}

	for _, f := range opts {
		f(p)
	}

	root := &Node{
		Type:     ElementNode,
		DataAtom: a.Html,
		Data:     a.Html.String(),
	}
	p.doc.AppendChild(root)
	p.oe = nodeStack{root}
	if context != nil && context.DataAtom == a.Template {
		p.templateStack = append(p.templateStack, inTemplateIM)
	}
	p.resetInsertionMode()

	for n := context; n != nil; n = n.Parent {
		if n.Type == ElementNode && n.DataAtom == a.Form {
			p.form = n
			break
		}
	}

	if err := p.parse(); err != nil {
		return nil, err
	}

	parent := p.doc
	if context != nil {
		parent = root
	}

	var result []*Node
	for c := parent.FirstChild; c != nil; {
		next := c.NextSibling
		parent.RemoveChild(c)
		result = append(result, c)
		c = next
	}
	return result, nil
}
   07070100000D4B000081A4000000000000000000000001645E367C00001C07000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/golang.org/x/net/html/render.go    // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package html

import (
	"bufio"
	"errors"
	"fmt"
	"io"
	"strings"
)

type writer interface {
	io.Writer
	io.ByteWriter
	WriteString(string) (int, error)
}

// Render renders the parse tree n to the given writer.
//
// Rendering is done on a 'best effort' basis: calling Parse on the output of
// Render will always result in something similar to the original tree, but it
// is not necessarily an exact clone unless the original tree was 'well-formed'.
// 'Well-formed' is not easily specified; the HTML5 specification is
// complicated.
//
// Calling Parse on arbitrary input typically results in a 'well-formed' parse
// tree. However, it is possible for Parse to yield a 'badly-formed' parse tree.
// For example, in a 'well-formed' parse tree, no <a> element is a child of
// another <a> element: parsing "<a><a>" results in two sibling elements.
// Similarly, in a 'well-formed' parse tree, no <a> element is a child of a
// <table> element: parsing "<p><table><a>" results in a <p> with two sibling
// children; the <a> is reparented to the <table>'s parent. However, calling
// Parse on "<a><table><a>" does not return an error, but the result has an <a>
// element with an <a> child, and is therefore not 'well-formed'.
//
// Programmatically constructed trees are typically also 'well-formed', but it
// is possible to construct a tree that looks innocuous but, when rendered and
// re-parsed, results in a different tree. A simple example is that a solitary
// text node would become a tree containing <html>, <head> and <body> elements.
// Another example is that the programmatic equivalent of "a<head>b</head>c"
// becomes "<html><head><head/><body>abc</body></html>".
func Render(w io.Writer, n *Node) error {
	if x, ok := w.(writer); ok {
		return render(x, n)
	}
	buf := bufio.NewWriter(w)
	if err := render(buf, n); err != nil {
		return err
	}
	return buf.Flush()
}

// plaintextAbort is returned from render1 when a <plaintext> element
// has been rendered. No more end tags should be rendered after that.
var plaintextAbort = errors.New("html: internal error (plaintext abort)")

func render(w writer, n *Node) error {
	err := render1(w, n)
	if err == plaintextAbort {
		err = nil
	}
	return err
}

func render1(w writer, n *Node) error {
	// Render non-element nodes; these are the easy cases.
	switch n.Type {
	case ErrorNode:
		return errors.New("html: cannot render an ErrorNode node")
	case TextNode:
		return escape(w, n.Data)
	case DocumentNode:
		for c := n.FirstChild; c != nil; c = c.NextSibling {
			if err := render1(w, c); err != nil {
				return err
			}
		}
		return nil
	case ElementNode:
		// No-op.
	case CommentNode:
		if _, err := w.WriteString("<!--"); err != nil {
			return err
		}
		if err := escapeComment(w, n.Data); err != nil {
			return err
		}
		if _, err := w.WriteString("-->"); err != nil {
			return err
		}
		return nil
	case DoctypeNode:
		if _, err := w.WriteString("<!DOCTYPE "); err != nil {
			return err
		}
		if err := escape(w, n.Data); err != nil {
			return err
		}
		if n.Attr != nil {
			var p, s string
			for _, a := range n.Attr {
				switch a.Key {
				case "public":
					p = a.Val
				case "system":
					s = a.Val
				}
			}
			if p != "" {
				if _, err := w.WriteString(" PUBLIC "); err != nil {
					return err
				}
				if err := writeQuoted(w, p); err != nil {
					return err
				}
				if s != "" {
					if err := w.WriteByte(' '); err != nil {
						return err
					}
					if err := writeQuoted(w, s); err != nil {
						return err
					}
				}
			} else if s != "" {
				if _, err := w.WriteString(" SYSTEM "); err != nil {
					return err
				}
				if err := writeQuoted(w, s); err != nil {
					return err
				}
			}
		}
		return w.WriteByte('>')
	case RawNode:
		_, err := w.WriteString(n.Data)
		return err
	default:
		return errors.New("html: unknown node type")
	}

	// Render the <xxx> opening tag.
	if err := w.WriteByte('<'); err != nil {
		return err
	}
	if _, err := w.WriteString(n.Data); err != nil {
		return err
	}
	for _, a := range n.Attr {
		if err := w.WriteByte(' '); err != nil {
			return err
		}
		if a.Namespace != "" {
			if _, err := w.WriteString(a.Namespace); err != nil {
				return err
			}
			if err := w.WriteByte(':'); err != nil {
				return err
			}
		}
		if _, err := w.WriteString(a.Key); err != nil {
			return err
		}
		if _, err := w.WriteString(`="`); err != nil {
			return err
		}
		if err := escape(w, a.Val); err != nil {
			return err
		}
		if err := w.WriteByte('"'); err != nil {
			return err
		}
	}
	if voidElements[n.Data] {
		if n.FirstChild != nil {
			return fmt.Errorf("html: void element <%s> has child nodes", n.Data)
		}
		_, err := w.WriteString("/>")
		return err
	}
	if err := w.WriteByte('>'); err != nil {
		return err
	}

	// Add initial newline where there is danger of a newline beging ignored.
	if c := n.FirstChild; c != nil && c.Type == TextNode && strings.HasPrefix(c.Data, "\n") {
		switch n.Data {
		case "pre", "listing", "textarea":
			if err := w.WriteByte('\n'); err != nil {
				return err
			}
		}
	}

	// Render any child nodes.
	switch n.Data {
	case "iframe", "noembed", "noframes", "noscript", "plaintext", "script", "style", "xmp":
		for c := n.FirstChild; c != nil; c = c.NextSibling {
			if c.Type == TextNode {
				if _, err := w.WriteString(c.Data); err != nil {
					return err
				}
			} else {
				if err := render1(w, c); err != nil {
					return err
				}
			}
		}
		if n.Data == "plaintext" {
			// Don't render anything else. <plaintext> must be the
			// last element in the file, with no closing tag.
			return plaintextAbort
		}
	default:
		for c := n.FirstChild; c != nil; c = c.NextSibling {
			if err := render1(w, c); err != nil {
				return err
			}
		}
	}

	// Render the </xxx> closing tag.
	if _, err := w.WriteString("</"); err != nil {
		return err
	}
	if _, err := w.WriteString(n.Data); err != nil {
		return err
	}
	return w.WriteByte('>')
}

// writeQuoted writes s to w surrounded by quotes. Normally it will use double
// quotes, but if s contains a double quote, it will use single quotes.
// It is used for writing the identifiers in a doctype declaration.
// In valid HTML, they can't contain both types of quotes.
func writeQuoted(w writer, s string) error {
	var q byte = '"'
	if strings.Contains(s, `"`) {
		q = '\''
	}
	if err := w.WriteByte(q); err != nil {
		return err
	}
	if _, err := w.WriteString(s); err != nil {
		return err
	}
	if err := w.WriteByte(q); err != nil {
		return err
	}
	return nil
}

// Section 12.1.2, "Elements", gives this list of void elements. Void elements
// are those that can't have any contents.
var voidElements = map[string]bool{
	"area":   true,
	"base":   true,
	"br":     true,
	"col":    true,
	"embed":  true,
	"hr":     true,
	"img":    true,
	"input":  true,
	"keygen": true, // "keygen" has been removed from the spec, but are kept here for backwards compatibility.
	"link":   true,
	"meta":   true,
	"param":  true,
	"source": true,
	"track":  true,
	"wbr":    true,
}
 07070100000D4C000081A4000000000000000000000001645E367C00007B08000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/golang.org/x/net/html/token.go // Copyright 2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package html

import (
	"bytes"
	"errors"
	"io"
	"strconv"
	"strings"

	"golang.org/x/net/html/atom"
)

// A TokenType is the type of a Token.
type TokenType uint32

const (
	// ErrorToken means that an error occurred during tokenization.
	ErrorToken TokenType = iota
	// TextToken means a text node.
	TextToken
	// A StartTagToken looks like <a>.
	StartTagToken
	// An EndTagToken looks like </a>.
	EndTagToken
	// A SelfClosingTagToken tag looks like <br/>.
	SelfClosingTagToken
	// A CommentToken looks like <!--x-->.
	CommentToken
	// A DoctypeToken looks like <!DOCTYPE x>
	DoctypeToken
)

// ErrBufferExceeded means that the buffering limit was exceeded.
var ErrBufferExceeded = errors.New("max buffer exceeded")

// String returns a string representation of the TokenType.
func (t TokenType) String() string {
	switch t {
	case ErrorToken:
		return "Error"
	case TextToken:
		return "Text"
	case StartTagToken:
		return "StartTag"
	case EndTagToken:
		return "EndTag"
	case SelfClosingTagToken:
		return "SelfClosingTag"
	case CommentToken:
		return "Comment"
	case DoctypeToken:
		return "Doctype"
	}
	return "Invalid(" + strconv.Itoa(int(t)) + ")"
}

// An Attribute is an attribute namespace-key-value triple. Namespace is
// non-empty for foreign attributes like xlink, Key is alphabetic (and hence
// does not contain escapable characters like '&', '<' or '>'), and Val is
// unescaped (it looks like "a<b" rather than "a&lt;b").
//
// Namespace is only used by the parser, not the tokenizer.
type Attribute struct {
	Namespace, Key, Val string
}

// A Token consists of a TokenType and some Data (tag name for start and end
// tags, content for text, comments and doctypes). A tag Token may also contain
// a slice of Attributes. Data is unescaped for all Tokens (it looks like "a<b"
// rather than "a&lt;b"). For tag Tokens, DataAtom is the atom for Data, or
// zero if Data is not a known tag name.
type Token struct {
	Type     TokenType
	DataAtom atom.Atom
	Data     string
	Attr     []Attribute
}

// tagString returns a string representation of a tag Token's Data and Attr.
func (t Token) tagString() string {
	if len(t.Attr) == 0 {
		return t.Data
	}
	buf := bytes.NewBufferString(t.Data)
	for _, a := range t.Attr {
		buf.WriteByte(' ')
		buf.WriteString(a.Key)
		buf.WriteString(`="`)
		escape(buf, a.Val)
		buf.WriteByte('"')
	}
	return buf.String()
}

// String returns a string representation of the Token.
func (t Token) String() string {
	switch t.Type {
	case ErrorToken:
		return ""
	case TextToken:
		return EscapeString(t.Data)
	case StartTagToken:
		return "<" + t.tagString() + ">"
	case EndTagToken:
		return "</" + t.tagString() + ">"
	case SelfClosingTagToken:
		return "<" + t.tagString() + "/>"
	case CommentToken:
		return "<!--" + escapeCommentString(t.Data) + "-->"
	case DoctypeToken:
		return "<!DOCTYPE " + EscapeString(t.Data) + ">"
	}
	return "Invalid(" + strconv.Itoa(int(t.Type)) + ")"
}

// span is a range of bytes in a Tokenizer's buffer. The start is inclusive,
// the end is exclusive.
type span struct {
	start, end int
}

// A Tokenizer returns a stream of HTML Tokens.
type Tokenizer struct {
	// r is the source of the HTML text.
	r io.Reader
	// tt is the TokenType of the current token.
	tt TokenType
	// err is the first error encountered during tokenization. It is possible
	// for tt != Error && err != nil to hold: this means that Next returned a
	// valid token but the subsequent Next call will return an error token.
	// For example, if the HTML text input was just "plain", then the first
	// Next call would set z.err to io.EOF but return a TextToken, and all
	// subsequent Next calls would return an ErrorToken.
	// err is never reset. Once it becomes non-nil, it stays non-nil.
	err error
	// readErr is the error returned by the io.Reader r. It is separate from
	// err because it is valid for an io.Reader to return (n int, err1 error)
	// such that n > 0 && err1 != nil, and callers should always process the
	// n > 0 bytes before considering the error err1.
	readErr error
	// buf[raw.start:raw.end] holds the raw bytes of the current token.
	// buf[raw.end:] is buffered input that will yield future tokens.
	raw span
	buf []byte
	// maxBuf limits the data buffered in buf. A value of 0 means unlimited.
	maxBuf int
	// buf[data.start:data.end] holds the raw bytes of the current token's data:
	// a text token's text, a tag token's tag name, etc.
	data span
	// pendingAttr is the attribute key and value currently being tokenized.
	// When complete, pendingAttr is pushed onto attr. nAttrReturned is
	// incremented on each call to TagAttr.
	pendingAttr   [2]span
	attr          [][2]span
	nAttrReturned int
	// rawTag is the "script" in "</script>" that closes the next token. If
	// non-empty, the subsequent call to Next will return a raw or RCDATA text
	// token: one that treats "<p>" as text instead of an element.
	// rawTag's contents are lower-cased.
	rawTag string
	// textIsRaw is whether the current text token's data is not escaped.
	textIsRaw bool
	// convertNUL is whether NUL bytes in the current token's data should
	// be converted into \ufffd replacement characters.
	convertNUL bool
	// allowCDATA is whether CDATA sections are allowed in the current context.
	allowCDATA bool
}

// AllowCDATA sets whether or not the tokenizer recognizes <![CDATA[foo]]> as
// the text "foo". The default value is false, which means to recognize it as
// a bogus comment "<!-- [CDATA[foo]] -->" instead.
//
// Strictly speaking, an HTML5 compliant tokenizer should allow CDATA if and
// only if tokenizing foreign content, such as MathML and SVG. However,
// tracking foreign-contentness is difficult to do purely in the tokenizer,
// as opposed to the parser, due to HTML integration points: an <svg> element
// can contain a <foreignObject> that is foreign-to-SVG but not foreign-to-
// HTML. For strict compliance with the HTML5 tokenization algorithm, it is the
// responsibility of the user of a tokenizer to call AllowCDATA as appropriate.
// In practice, if using the tokenizer without caring whether MathML or SVG
// CDATA is text or comments, such as tokenizing HTML to find all the anchor
// text, it is acceptable to ignore this responsibility.
func (z *Tokenizer) AllowCDATA(allowCDATA bool) {
	z.allowCDATA = allowCDATA
}

// NextIsNotRawText instructs the tokenizer that the next token should not be
// considered as 'raw text'. Some elements, such as script and title elements,
// normally require the next token after the opening tag to be 'raw text' that
// has no child elements. For example, tokenizing "<title>a<b>c</b>d</title>"
// yields a start tag token for "<title>", a text token for "a<b>c</b>d", and
// an end tag token for "</title>". There are no distinct start tag or end tag
// tokens for the "<b>" and "</b>".
//
// This tokenizer implementation will generally look for raw text at the right
// times. Strictly speaking, an HTML5 compliant tokenizer should not look for
// raw text if in foreign content: <title> generally needs raw text, but a
// <title> inside an <svg> does not. Another example is that a <textarea>
// generally needs raw text, but a <textarea> is not allowed as an immediate
// child of a <select>; in normal parsing, a <textarea> implies </select>, but
// one cannot close the implicit element when parsing a <select>'s InnerHTML.
// Similarly to AllowCDATA, tracking the correct moment to override raw-text-
// ness is difficult to do purely in the tokenizer, as opposed to the parser.
// For strict compliance with the HTML5 tokenization algorithm, it is the
// responsibility of the user of a tokenizer to call NextIsNotRawText as
// appropriate. In practice, like AllowCDATA, it is acceptable to ignore this
// responsibility for basic usage.
//
// Note that this 'raw text' concept is different from the one offered by the
// Tokenizer.Raw method.
func (z *Tokenizer) NextIsNotRawText() {
	z.rawTag = ""
}

// Err returns the error associated with the most recent ErrorToken token.
// This is typically io.EOF, meaning the end of tokenization.
func (z *Tokenizer) Err() error {
	if z.tt != ErrorToken {
		return nil
	}
	return z.err
}

// readByte returns the next byte from the input stream, doing a buffered read
// from z.r into z.buf if necessary. z.buf[z.raw.start:z.raw.end] remains a contiguous byte
// slice that holds all the bytes read so far for the current token.
// It sets z.err if the underlying reader returns an error.
// Pre-condition: z.err == nil.
func (z *Tokenizer) readByte() byte {
	if z.raw.end >= len(z.buf) {
		// Our buffer is exhausted and we have to read from z.r. Check if the
		// previous read resulted in an error.
		if z.readErr != nil {
			z.err = z.readErr
			return 0
		}
		// We copy z.buf[z.raw.start:z.raw.end] to the beginning of z.buf. If the length
		// z.raw.end - z.raw.start is more than half the capacity of z.buf, then we
		// allocate a new buffer before the copy.
		c := cap(z.buf)
		d := z.raw.end - z.raw.start
		var buf1 []byte
		if 2*d > c {
			buf1 = make([]byte, d, 2*c)
		} else {
			buf1 = z.buf[:d]
		}
		copy(buf1, z.buf[z.raw.start:z.raw.end])
		if x := z.raw.start; x != 0 {
			// Adjust the data/attr spans to refer to the same contents after the copy.
			z.data.start -= x
			z.data.end -= x
			z.pendingAttr[0].start -= x
			z.pendingAttr[0].end -= x
			z.pendingAttr[1].start -= x
			z.pendingAttr[1].end -= x
			for i := range z.attr {
				z.attr[i][0].start -= x
				z.attr[i][0].end -= x
				z.attr[i][1].start -= x
				z.attr[i][1].end -= x
			}
		}
		z.raw.start, z.raw.end, z.buf = 0, d, buf1[:d]
		// Now that we have copied the live bytes to the start of the buffer,
		// we read from z.r into the remainder.
		var n int
		n, z.readErr = readAtLeastOneByte(z.r, buf1[d:cap(buf1)])
		if n == 0 {
			z.err = z.readErr
			return 0
		}
		z.buf = buf1[:d+n]
	}
	x := z.buf[z.raw.end]
	z.raw.end++
	if z.maxBuf > 0 && z.raw.end-z.raw.start >= z.maxBuf {
		z.err = ErrBufferExceeded
		return 0
	}
	return x
}

// Buffered returns a slice containing data buffered but not yet tokenized.
func (z *Tokenizer) Buffered() []byte {
	return z.buf[z.raw.end:]
}

// readAtLeastOneByte wraps an io.Reader so that reading cannot return (0, nil).
// It returns io.ErrNoProgress if the underlying r.Read method returns (0, nil)
// too many times in succession.
func readAtLeastOneByte(r io.Reader, b []byte) (int, error) {
	for i := 0; i < 100; i++ {
		if n, err := r.Read(b); n != 0 || err != nil {
			return n, err
		}
	}
	return 0, io.ErrNoProgress
}

// skipWhiteSpace skips past any white space.
func (z *Tokenizer) skipWhiteSpace() {
	if z.err != nil {
		return
	}
	for {
		c := z.readByte()
		if z.err != nil {
			return
		}
		switch c {
		case ' ', '\n', '\r', '\t', '\f':
			// No-op.
		default:
			z.raw.end--
			return
		}
	}
}

// readRawOrRCDATA reads until the next "</foo>", where "foo" is z.rawTag and
// is typically something like "script" or "textarea".
func (z *Tokenizer) readRawOrRCDATA() {
	if z.rawTag == "script" {
		z.readScript()
		z.textIsRaw = true
		z.rawTag = ""
		return
	}
loop:
	for {
		c := z.readByte()
		if z.err != nil {
			break loop
		}
		if c != '<' {
			continue loop
		}
		c = z.readByte()
		if z.err != nil {
			break loop
		}
		if c != '/' {
			z.raw.end--
			continue loop
		}
		if z.readRawEndTag() || z.err != nil {
			break loop
		}
	}
	z.data.end = z.raw.end
	// A textarea's or title's RCDATA can contain escaped entities.
	z.textIsRaw = z.rawTag != "textarea" && z.rawTag != "title"
	z.rawTag = ""
}

// readRawEndTag attempts to read a tag like "</foo>", where "foo" is z.rawTag.
// If it succeeds, it backs up the input position to reconsume the tag and
// returns true. Otherwise it returns false. The opening "</" has already been
// consumed.
func (z *Tokenizer) readRawEndTag() bool {
	for i := 0; i < len(z.rawTag); i++ {
		c := z.readByte()
		if z.err != nil {
			return false
		}
		if c != z.rawTag[i] && c != z.rawTag[i]-('a'-'A') {
			z.raw.end--
			return false
		}
	}
	c := z.readByte()
	if z.err != nil {
		return false
	}
	switch c {
	case ' ', '\n', '\r', '\t', '\f', '/', '>':
		// The 3 is 2 for the leading "</" plus 1 for the trailing character c.
		z.raw.end -= 3 + len(z.rawTag)
		return true
	}
	z.raw.end--
	return false
}

// readScript reads until the next </script> tag, following the byzantine
// rules for escaping/hiding the closing tag.
func (z *Tokenizer) readScript() {
	defer func() {
		z.data.end = z.raw.end
	}()
	var c byte

scriptData:
	c = z.readByte()
	if z.err != nil {
		return
	}
	if c == '<' {
		goto scriptDataLessThanSign
	}
	goto scriptData

scriptDataLessThanSign:
	c = z.readByte()
	if z.err != nil {
		return
	}
	switch c {
	case '/':
		goto scriptDataEndTagOpen
	case '!':
		goto scriptDataEscapeStart
	}
	z.raw.end--
	goto scriptData

scriptDataEndTagOpen:
	if z.readRawEndTag() || z.err != nil {
		return
	}
	goto scriptData

scriptDataEscapeStart:
	c = z.readByte()
	if z.err != nil {
		return
	}
	if c == '-' {
		goto scriptDataEscapeStartDash
	}
	z.raw.end--
	goto scriptData

scriptDataEscapeStartDash:
	c = z.readByte()
	if z.err != nil {
		return
	}
	if c == '-' {
		goto scriptDataEscapedDashDash
	}
	z.raw.end--
	goto scriptData

scriptDataEscaped:
	c = z.readByte()
	if z.err != nil {
		return
	}
	switch c {
	case '-':
		goto scriptDataEscapedDash
	case '<':
		goto scriptDataEscapedLessThanSign
	}
	goto scriptDataEscaped

scriptDataEscapedDash:
	c = z.readByte()
	if z.err != nil {
		return
	}
	switch c {
	case '-':
		goto scriptDataEscapedDashDash
	case '<':
		goto scriptDataEscapedLessThanSign
	}
	goto scriptDataEscaped

scriptDataEscapedDashDash:
	c = z.readByte()
	if z.err != nil {
		return
	}
	switch c {
	case '-':
		goto scriptDataEscapedDashDash
	case '<':
		goto scriptDataEscapedLessThanSign
	case '>':
		goto scriptData
	}
	goto scriptDataEscaped

scriptDataEscapedLessThanSign:
	c = z.readByte()
	if z.err != nil {
		return
	}
	if c == '/' {
		goto scriptDataEscapedEndTagOpen
	}
	if 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' {
		goto scriptDataDoubleEscapeStart
	}
	z.raw.end--
	goto scriptData

scriptDataEscapedEndTagOpen:
	if z.readRawEndTag() || z.err != nil {
		return
	}
	goto scriptDataEscaped

scriptDataDoubleEscapeStart:
	z.raw.end--
	for i := 0; i < len("script"); i++ {
		c = z.readByte()
		if z.err != nil {
			return
		}
		if c != "script"[i] && c != "SCRIPT"[i] {
			z.raw.end--
			goto scriptDataEscaped
		}
	}
	c = z.readByte()
	if z.err != nil {
		return
	}
	switch c {
	case ' ', '\n', '\r', '\t', '\f', '/', '>':
		goto scriptDataDoubleEscaped
	}
	z.raw.end--
	goto scriptDataEscaped

scriptDataDoubleEscaped:
	c = z.readByte()
	if z.err != nil {
		return
	}
	switch c {
	case '-':
		goto scriptDataDoubleEscapedDash
	case '<':
		goto scriptDataDoubleEscapedLessThanSign
	}
	goto scriptDataDoubleEscaped

scriptDataDoubleEscapedDash:
	c = z.readByte()
	if z.err != nil {
		return
	}
	switch c {
	case '-':
		goto scriptDataDoubleEscapedDashDash
	case '<':
		goto scriptDataDoubleEscapedLessThanSign
	}
	goto scriptDataDoubleEscaped

scriptDataDoubleEscapedDashDash:
	c = z.readByte()
	if z.err != nil {
		return
	}
	switch c {
	case '-':
		goto scriptDataDoubleEscapedDashDash
	case '<':
		goto scriptDataDoubleEscapedLessThanSign
	case '>':
		goto scriptData
	}
	goto scriptDataDoubleEscaped

scriptDataDoubleEscapedLessThanSign:
	c = z.readByte()
	if z.err != nil {
		return
	}
	if c == '/' {
		goto scriptDataDoubleEscapeEnd
	}
	z.raw.end--
	goto scriptDataDoubleEscaped

scriptDataDoubleEscapeEnd:
	if z.readRawEndTag() {
		z.raw.end += len("</script>")
		goto scriptDataEscaped
	}
	if z.err != nil {
		return
	}
	goto scriptDataDoubleEscaped
}

// readComment reads the next comment token starting with "<!--". The opening
// "<!--" has already been consumed.
func (z *Tokenizer) readComment() {
	// When modifying this function, consider manually increasing the
	// maxSuffixLen constant in func TestComments, from 6 to e.g. 9 or more.
	// That increase should only be temporary, not committed, as it
	// exponentially affects the test running time.

	z.data.start = z.raw.end
	defer func() {
		if z.data.end < z.data.start {
			// It's a comment with no data, like <!-->.
			z.data.end = z.data.start
		}
	}()

	var dashCount int
	beginning := true
	for {
		c := z.readByte()
		if z.err != nil {
			z.data.end = z.calculateAbruptCommentDataEnd()
			return
		}
		switch c {
		case '-':
			dashCount++
			continue
		case '>':
			if dashCount >= 2 || beginning {
				z.data.end = z.raw.end - len("-->")
				return
			}
		case '!':
			if dashCount >= 2 {
				c = z.readByte()
				if z.err != nil {
					z.data.end = z.calculateAbruptCommentDataEnd()
					return
				} else if c == '>' {
					z.data.end = z.raw.end - len("--!>")
					return
				} else if c == '-' {
					dashCount = 1
					beginning = false
					continue
				}
			}
		}
		dashCount = 0
		beginning = false
	}
}

func (z *Tokenizer) calculateAbruptCommentDataEnd() int {
	raw := z.Raw()
	const prefixLen = len("<!--")
	if len(raw) >= prefixLen {
		raw = raw[prefixLen:]
		if hasSuffix(raw, "--!") {
			return z.raw.end - 3
		} else if hasSuffix(raw, "--") {
			return z.raw.end - 2
		} else if hasSuffix(raw, "-") {
			return z.raw.end - 1
		}
	}
	return z.raw.end
}

func hasSuffix(b []byte, suffix string) bool {
	if len(b) < len(suffix) {
		return false
	}
	b = b[len(b)-len(suffix):]
	for i := range b {
		if b[i] != suffix[i] {
			return false
		}
	}
	return true
}

// readUntilCloseAngle reads until the next ">".
func (z *Tokenizer) readUntilCloseAngle() {
	z.data.start = z.raw.end
	for {
		c := z.readByte()
		if z.err != nil {
			z.data.end = z.raw.end
			return
		}
		if c == '>' {
			z.data.end = z.raw.end - len(">")
			return
		}
	}
}

// readMarkupDeclaration reads the next token starting with "<!". It might be
// a "<!--comment-->", a "<!DOCTYPE foo>", a "<![CDATA[section]]>" or
// "<!a bogus comment". The opening "<!" has already been consumed.
func (z *Tokenizer) readMarkupDeclaration() TokenType {
	z.data.start = z.raw.end
	var c [2]byte
	for i := 0; i < 2; i++ {
		c[i] = z.readByte()
		if z.err != nil {
			z.data.end = z.raw.end
			return CommentToken
		}
	}
	if c[0] == '-' && c[1] == '-' {
		z.readComment()
		return CommentToken
	}
	z.raw.end -= 2
	if z.readDoctype() {
		return DoctypeToken
	}
	if z.allowCDATA && z.readCDATA() {
		z.convertNUL = true
		return TextToken
	}
	// It's a bogus comment.
	z.readUntilCloseAngle()
	return CommentToken
}

// readDoctype attempts to read a doctype declaration and returns true if
// successful. The opening "<!" has already been consumed.
func (z *Tokenizer) readDoctype() bool {
	const s = "DOCTYPE"
	for i := 0; i < len(s); i++ {
		c := z.readByte()
		if z.err != nil {
			z.data.end = z.raw.end
			return false
		}
		if c != s[i] && c != s[i]+('a'-'A') {
			// Back up to read the fragment of "DOCTYPE" again.
			z.raw.end = z.data.start
			return false
		}
	}
	if z.skipWhiteSpace(); z.err != nil {
		z.data.start = z.raw.end
		z.data.end = z.raw.end
		return true
	}
	z.readUntilCloseAngle()
	return true
}

// readCDATA attempts to read a CDATA section and returns true if
// successful. The opening "<!" has already been consumed.
func (z *Tokenizer) readCDATA() bool {
	const s = "[CDATA["
	for i := 0; i < len(s); i++ {
		c := z.readByte()
		if z.err != nil {
			z.data.end = z.raw.end
			return false
		}
		if c != s[i] {
			// Back up to read the fragment of "[CDATA[" again.
			z.raw.end = z.data.start
			return false
		}
	}
	z.data.start = z.raw.end
	brackets := 0
	for {
		c := z.readByte()
		if z.err != nil {
			z.data.end = z.raw.end
			return true
		}
		switch c {
		case ']':
			brackets++
		case '>':
			if brackets >= 2 {
				z.data.end = z.raw.end - len("]]>")
				return true
			}
			brackets = 0
		default:
			brackets = 0
		}
	}
}

// startTagIn returns whether the start tag in z.buf[z.data.start:z.data.end]
// case-insensitively matches any element of ss.
func (z *Tokenizer) startTagIn(ss ...string) bool {
loop:
	for _, s := range ss {
		if z.data.end-z.data.start != len(s) {
			continue loop
		}
		for i := 0; i < len(s); i++ {
			c := z.buf[z.data.start+i]
			if 'A' <= c && c <= 'Z' {
				c += 'a' - 'A'
			}
			if c != s[i] {
				continue loop
			}
		}
		return true
	}
	return false
}

// readStartTag reads the next start tag token. The opening "<a" has already
// been consumed, where 'a' means anything in [A-Za-z].
func (z *Tokenizer) readStartTag() TokenType {
	z.readTag(true)
	if z.err != nil {
		return ErrorToken
	}
	// Several tags flag the tokenizer's next token as raw.
	c, raw := z.buf[z.data.start], false
	if 'A' <= c && c <= 'Z' {
		c += 'a' - 'A'
	}
	switch c {
	case 'i':
		raw = z.startTagIn("iframe")
	case 'n':
		raw = z.startTagIn("noembed", "noframes", "noscript")
	case 'p':
		raw = z.startTagIn("plaintext")
	case 's':
		raw = z.startTagIn("script", "style")
	case 't':
		raw = z.startTagIn("textarea", "title")
	case 'x':
		raw = z.startTagIn("xmp")
	}
	if raw {
		z.rawTag = strings.ToLower(string(z.buf[z.data.start:z.data.end]))
	}
	// Look for a self-closing token like "<br/>".
	if z.err == nil && z.buf[z.raw.end-2] == '/' {
		return SelfClosingTagToken
	}
	return StartTagToken
}

// readTag reads the next tag token and its attributes. If saveAttr, those
// attributes are saved in z.attr, otherwise z.attr is set to an empty slice.
// The opening "<a" or "</a" has already been consumed, where 'a' means anything
// in [A-Za-z].
func (z *Tokenizer) readTag(saveAttr bool) {
	z.attr = z.attr[:0]
	z.nAttrReturned = 0
	// Read the tag name and attribute key/value pairs.
	z.readTagName()
	if z.skipWhiteSpace(); z.err != nil {
		return
	}
	for {
		c := z.readByte()
		if z.err != nil || c == '>' {
			break
		}
		z.raw.end--
		z.readTagAttrKey()
		z.readTagAttrVal()
		// Save pendingAttr if saveAttr and that attribute has a non-empty key.
		if saveAttr && z.pendingAttr[0].start != z.pendingAttr[0].end {
			z.attr = append(z.attr, z.pendingAttr)
		}
		if z.skipWhiteSpace(); z.err != nil {
			break
		}
	}
}

// readTagName sets z.data to the "div" in "<div k=v>". The reader (z.raw.end)
// is positioned such that the first byte of the tag name (the "d" in "<div")
// has already been consumed.
func (z *Tokenizer) readTagName() {
	z.data.start = z.raw.end - 1
	for {
		c := z.readByte()
		if z.err != nil {
			z.data.end = z.raw.end
			return
		}
		switch c {
		case ' ', '\n', '\r', '\t', '\f':
			z.data.end = z.raw.end - 1
			return
		case '/', '>':
			z.raw.end--
			z.data.end = z.raw.end
			return
		}
	}
}

// readTagAttrKey sets z.pendingAttr[0] to the "k" in "<div k=v>".
// Precondition: z.err == nil.
func (z *Tokenizer) readTagAttrKey() {
	z.pendingAttr[0].start = z.raw.end
	for {
		c := z.readByte()
		if z.err != nil {
			z.pendingAttr[0].end = z.raw.end
			return
		}
		switch c {
		case ' ', '\n', '\r', '\t', '\f', '/':
			z.pendingAttr[0].end = z.raw.end - 1
			return
		case '=', '>':
			z.raw.end--
			z.pendingAttr[0].end = z.raw.end
			return
		}
	}
}

// readTagAttrVal sets z.pendingAttr[1] to the "v" in "<div k=v>".
func (z *Tokenizer) readTagAttrVal() {
	z.pendingAttr[1].start = z.raw.end
	z.pendingAttr[1].end = z.raw.end
	if z.skipWhiteSpace(); z.err != nil {
		return
	}
	c := z.readByte()
	if z.err != nil {
		return
	}
	if c != '=' {
		z.raw.end--
		return
	}
	if z.skipWhiteSpace(); z.err != nil {
		return
	}
	quote := z.readByte()
	if z.err != nil {
		return
	}
	switch quote {
	case '>':
		z.raw.end--
		return

	case '\'', '"':
		z.pendingAttr[1].start = z.raw.end
		for {
			c := z.readByte()
			if z.err != nil {
				z.pendingAttr[1].end = z.raw.end
				return
			}
			if c == quote {
				z.pendingAttr[1].end = z.raw.end - 1
				return
			}
		}

	default:
		z.pendingAttr[1].start = z.raw.end - 1
		for {
			c := z.readByte()
			if z.err != nil {
				z.pendingAttr[1].end = z.raw.end
				return
			}
			switch c {
			case ' ', '\n', '\r', '\t', '\f':
				z.pendingAttr[1].end = z.raw.end - 1
				return
			case '>':
				z.raw.end--
				z.pendingAttr[1].end = z.raw.end
				return
			}
		}
	}
}

// Next scans the next token and returns its type.
func (z *Tokenizer) Next() TokenType {
	z.raw.start = z.raw.end
	z.data.start = z.raw.end
	z.data.end = z.raw.end
	if z.err != nil {
		z.tt = ErrorToken
		return z.tt
	}
	if z.rawTag != "" {
		if z.rawTag == "plaintext" {
			// Read everything up to EOF.
			for z.err == nil {
				z.readByte()
			}
			z.data.end = z.raw.end
			z.textIsRaw = true
		} else {
			z.readRawOrRCDATA()
		}
		if z.data.end > z.data.start {
			z.tt = TextToken
			z.convertNUL = true
			return z.tt
		}
	}
	z.textIsRaw = false
	z.convertNUL = false

loop:
	for {
		c := z.readByte()
		if z.err != nil {
			break loop
		}
		if c != '<' {
			continue loop
		}

		// Check if the '<' we have just read is part of a tag, comment
		// or doctype. If not, it's part of the accumulated text token.
		c = z.readByte()
		if z.err != nil {
			break loop
		}
		var tokenType TokenType
		switch {
		case 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z':
			tokenType = StartTagToken
		case c == '/':
			tokenType = EndTagToken
		case c == '!' || c == '?':
			// We use CommentToken to mean any of "<!--actual comments-->",
			// "<!DOCTYPE declarations>" and "<?xml processing instructions?>".
			tokenType = CommentToken
		default:
			// Reconsume the current character.
			z.raw.end--
			continue
		}

		// We have a non-text token, but we might have accumulated some text
		// before that. If so, we return the text first, and return the non-
		// text token on the subsequent call to Next.
		if x := z.raw.end - len("<a"); z.raw.start < x {
			z.raw.end = x
			z.data.end = x
			z.tt = TextToken
			return z.tt
		}
		switch tokenType {
		case StartTagToken:
			z.tt = z.readStartTag()
			return z.tt
		case EndTagToken:
			c = z.readByte()
			if z.err != nil {
				break loop
			}
			if c == '>' {
				// "</>" does not generate a token at all. Generate an empty comment
				// to allow passthrough clients to pick up the data using Raw.
				// Reset the tokenizer state and start again.
				z.tt = CommentToken
				return z.tt
			}
			if 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' {
				z.readTag(false)
				if z.err != nil {
					z.tt = ErrorToken
				} else {
					z.tt = EndTagToken
				}
				return z.tt
			}
			z.raw.end--
			z.readUntilCloseAngle()
			z.tt = CommentToken
			return z.tt
		case CommentToken:
			if c == '!' {
				z.tt = z.readMarkupDeclaration()
				return z.tt
			}
			z.raw.end--
			z.readUntilCloseAngle()
			z.tt = CommentToken
			return z.tt
		}
	}
	if z.raw.start < z.raw.end {
		z.data.end = z.raw.end
		z.tt = TextToken
		return z.tt
	}
	z.tt = ErrorToken
	return z.tt
}

// Raw returns the unmodified text of the current token. Calling Next, Token,
// Text, TagName or TagAttr may change the contents of the returned slice.
//
// The token stream's raw bytes partition the byte stream (up until an
// ErrorToken). There are no overlaps or gaps between two consecutive token's
// raw bytes. One implication is that the byte offset of the current token is
// the sum of the lengths of all previous tokens' raw bytes.
func (z *Tokenizer) Raw() []byte {
	return z.buf[z.raw.start:z.raw.end]
}

// convertNewlines converts "\r" and "\r\n" in s to "\n".
// The conversion happens in place, but the resulting slice may be shorter.
func convertNewlines(s []byte) []byte {
	for i, c := range s {
		if c != '\r' {
			continue
		}

		src := i + 1
		if src >= len(s) || s[src] != '\n' {
			s[i] = '\n'
			continue
		}

		dst := i
		for src < len(s) {
			if s[src] == '\r' {
				if src+1 < len(s) && s[src+1] == '\n' {
					src++
				}
				s[dst] = '\n'
			} else {
				s[dst] = s[src]
			}
			src++
			dst++
		}
		return s[:dst]
	}
	return s
}

var (
	nul         = []byte("\x00")
	replacement = []byte("\ufffd")
)

// Text returns the unescaped text of a text, comment or doctype token. The
// contents of the returned slice may change on the next call to Next.
func (z *Tokenizer) Text() []byte {
	switch z.tt {
	case TextToken, CommentToken, DoctypeToken:
		s := z.buf[z.data.start:z.data.end]
		z.data.start = z.raw.end
		z.data.end = z.raw.end
		s = convertNewlines(s)
		if (z.convertNUL || z.tt == CommentToken) && bytes.Contains(s, nul) {
			s = bytes.Replace(s, nul, replacement, -1)
		}
		if !z.textIsRaw {
			s = unescape(s, false)
		}
		return s
	}
	return nil
}

// TagName returns the lower-cased name of a tag token (the `img` out of
// `<IMG SRC="foo">`) and whether the tag has attributes.
// The contents of the returned slice may change on the next call to Next.
func (z *Tokenizer) TagName() (name []byte, hasAttr bool) {
	if z.data.start < z.data.end {
		switch z.tt {
		case StartTagToken, EndTagToken, SelfClosingTagToken:
			s := z.buf[z.data.start:z.data.end]
			z.data.start = z.raw.end
			z.data.end = z.raw.end
			return lower(s), z.nAttrReturned < len(z.attr)
		}
	}
	return nil, false
}

// TagAttr returns the lower-cased key and unescaped value of the next unparsed
// attribute for the current tag token and whether there are more attributes.
// The contents of the returned slices may change on the next call to Next.
func (z *Tokenizer) TagAttr() (key, val []byte, moreAttr bool) {
	if z.nAttrReturned < len(z.attr) {
		switch z.tt {
		case StartTagToken, SelfClosingTagToken:
			x := z.attr[z.nAttrReturned]
			z.nAttrReturned++
			key = z.buf[x[0].start:x[0].end]
			val = z.buf[x[1].start:x[1].end]
			return lower(key), unescape(convertNewlines(val), true), z.nAttrReturned < len(z.attr)
		}
	}
	return nil, nil, false
}

// Token returns the current Token. The result's Data and Attr values remain
// valid after subsequent Next calls.
func (z *Tokenizer) Token() Token {
	t := Token{Type: z.tt}
	switch z.tt {
	case TextToken, CommentToken, DoctypeToken:
		t.Data = string(z.Text())
	case StartTagToken, SelfClosingTagToken, EndTagToken:
		name, moreAttr := z.TagName()
		for moreAttr {
			var key, val []byte
			key, val, moreAttr = z.TagAttr()
			t.Attr = append(t.Attr, Attribute{"", atom.String(key), string(val)})
		}
		if a := atom.Lookup(name); a != 0 {
			t.DataAtom, t.Data = a, a.String()
		} else {
			t.DataAtom, t.Data = 0, string(name)
		}
	}
	return t
}

// SetMaxBuf sets a limit on the amount of data buffered during tokenization.
// A value of 0 means unlimited.
func (z *Tokenizer) SetMaxBuf(n int) {
	z.maxBuf = n
}

// NewTokenizer returns a new HTML Tokenizer for the given Reader.
// The input is assumed to be UTF-8 encoded.
func NewTokenizer(r io.Reader) *Tokenizer {
	return NewTokenizerFragment(r, "")
}

// NewTokenizerFragment returns a new HTML Tokenizer for the given Reader, for
// tokenizing an existing element's InnerHTML fragment. contextTag is that
// element's tag, such as "div" or "iframe".
//
// For example, how the InnerHTML "a<b" is tokenized depends on whether it is
// for a <p> tag or a <script> tag.
//
// The input is assumed to be UTF-8 encoded.
func NewTokenizerFragment(r io.Reader, contextTag string) *Tokenizer {
	z := &Tokenizer{
		r:   r,
		buf: make([]byte, 0, 4096),
	}
	if contextTag != "" {
		switch s := strings.ToLower(contextTag); s {
		case "iframe", "noembed", "noframes", "noscript", "plaintext", "script", "style", "title", "textarea", "xmp":
			z.rawTag = s
		}
	}
	return z
}
07070100000D4D000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/golang.org/x/net/internal  07070100000D4E000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/golang.org/x/net/internal/socks    07070100000D4F000081A4000000000000000000000001645E367C00000EF6000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/golang.org/x/net/internal/socks/client.go  // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package socks

import (
	"context"
	"errors"
	"io"
	"net"
	"strconv"
	"time"
)

var (
	noDeadline   = time.Time{}
	aLongTimeAgo = time.Unix(1, 0)
)

func (d *Dialer) connect(ctx context.Context, c net.Conn, address string) (_ net.Addr, ctxErr error) {
	host, port, err := splitHostPort(address)
	if err != nil {
		return nil, err
	}
	if deadline, ok := ctx.Deadline(); ok && !deadline.IsZero() {
		c.SetDeadline(deadline)
		defer c.SetDeadline(noDeadline)
	}
	if ctx != context.Background() {
		errCh := make(chan error, 1)
		done := make(chan struct{})
		defer func() {
			close(done)
			if ctxErr == nil {
				ctxErr = <-errCh
			}
		}()
		go func() {
			select {
			case <-ctx.Done():
				c.SetDeadline(aLongTimeAgo)
				errCh <- ctx.Err()
			case <-done:
				errCh <- nil
			}
		}()
	}

	b := make([]byte, 0, 6+len(host)) // the size here is just an estimate
	b = append(b, Version5)
	if len(d.AuthMethods) == 0 || d.Authenticate == nil {
		b = append(b, 1, byte(AuthMethodNotRequired))
	} else {
		ams := d.AuthMethods
		if len(ams) > 255 {
			return nil, errors.New("too many authentication methods")
		}
		b = append(b, byte(len(ams)))
		for _, am := range ams {
			b = append(b, byte(am))
		}
	}
	if _, ctxErr = c.Write(b); ctxErr != nil {
		return
	}

	if _, ctxErr = io.ReadFull(c, b[:2]); ctxErr != nil {
		return
	}
	if b[0] != Version5 {
		return nil, errors.New("unexpected protocol version " + strconv.Itoa(int(b[0])))
	}
	am := AuthMethod(b[1])
	if am == AuthMethodNoAcceptableMethods {
		return nil, errors.New("no acceptable authentication methods")
	}
	if d.Authenticate != nil {
		if ctxErr = d.Authenticate(ctx, c, am); ctxErr != nil {
			return
		}
	}

	b = b[:0]
	b = append(b, Version5, byte(d.cmd), 0)
	if ip := net.ParseIP(host); ip != nil {
		if ip4 := ip.To4(); ip4 != nil {
			b = append(b, AddrTypeIPv4)
			b = append(b, ip4...)
		} else if ip6 := ip.To16(); ip6 != nil {
			b = append(b, AddrTypeIPv6)
			b = append(b, ip6...)
		} else {
			return nil, errors.New("unknown address type")
		}
	} else {
		if len(host) > 255 {
			return nil, errors.New("FQDN too long")
		}
		b = append(b, AddrTypeFQDN)
		b = append(b, byte(len(host)))
		b = append(b, host...)
	}
	b = append(b, byte(port>>8), byte(port))
	if _, ctxErr = c.Write(b); ctxErr != nil {
		return
	}

	if _, ctxErr = io.ReadFull(c, b[:4]); ctxErr != nil {
		return
	}
	if b[0] != Version5 {
		return nil, errors.New("unexpected protocol version " + strconv.Itoa(int(b[0])))
	}
	if cmdErr := Reply(b[1]); cmdErr != StatusSucceeded {
		return nil, errors.New("unknown error " + cmdErr.String())
	}
	if b[2] != 0 {
		return nil, errors.New("non-zero reserved field")
	}
	l := 2
	var a Addr
	switch b[3] {
	case AddrTypeIPv4:
		l += net.IPv4len
		a.IP = make(net.IP, net.IPv4len)
	case AddrTypeIPv6:
		l += net.IPv6len
		a.IP = make(net.IP, net.IPv6len)
	case AddrTypeFQDN:
		if _, err := io.ReadFull(c, b[:1]); err != nil {
			return nil, err
		}
		l += int(b[0])
	default:
		return nil, errors.New("unknown address type " + strconv.Itoa(int(b[3])))
	}
	if cap(b) < l {
		b = make([]byte, l)
	} else {
		b = b[:l]
	}
	if _, ctxErr = io.ReadFull(c, b); ctxErr != nil {
		return
	}
	if a.IP != nil {
		copy(a.IP, b)
	} else {
		a.Name = string(b[:len(b)-2])
	}
	a.Port = int(b[len(b)-2])<<8 | int(b[len(b)-1])
	return &a, nil
}

func splitHostPort(address string) (string, int, error) {
	host, port, err := net.SplitHostPort(address)
	if err != nil {
		return "", 0, err
	}
	portnum, err := strconv.Atoi(port)
	if err != nil {
		return "", 0, err
	}
	if 1 > portnum || portnum > 0xffff {
		return "", 0, errors.New("port number out of range " + port)
	}
	return host, portnum, nil
}
  07070100000D50000081A4000000000000000000000001645E367C00002411000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/golang.org/x/net/internal/socks/socks.go   // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package socks provides a SOCKS version 5 client implementation.
//
// SOCKS protocol version 5 is defined in RFC 1928.
// Username/Password authentication for SOCKS version 5 is defined in
// RFC 1929.
package socks

import (
	"context"
	"errors"
	"io"
	"net"
	"strconv"
)

// A Command represents a SOCKS command.
type Command int

func (cmd Command) String() string {
	switch cmd {
	case CmdConnect:
		return "socks connect"
	case cmdBind:
		return "socks bind"
	default:
		return "socks " + strconv.Itoa(int(cmd))
	}
}

// An AuthMethod represents a SOCKS authentication method.
type AuthMethod int

// A Reply represents a SOCKS command reply code.
type Reply int

func (code Reply) String() string {
	switch code {
	case StatusSucceeded:
		return "succeeded"
	case 0x01:
		return "general SOCKS server failure"
	case 0x02:
		return "connection not allowed by ruleset"
	case 0x03:
		return "network unreachable"
	case 0x04:
		return "host unreachable"
	case 0x05:
		return "connection refused"
	case 0x06:
		return "TTL expired"
	case 0x07:
		return "command not supported"
	case 0x08:
		return "address type not supported"
	default:
		return "unknown code: " + strconv.Itoa(int(code))
	}
}

// Wire protocol constants.
const (
	Version5 = 0x05

	AddrTypeIPv4 = 0x01
	AddrTypeFQDN = 0x03
	AddrTypeIPv6 = 0x04

	CmdConnect Command = 0x01 // establishes an active-open forward proxy connection
	cmdBind    Command = 0x02 // establishes a passive-open forward proxy connection

	AuthMethodNotRequired         AuthMethod = 0x00 // no authentication required
	AuthMethodUsernamePassword    AuthMethod = 0x02 // use username/password
	AuthMethodNoAcceptableMethods AuthMethod = 0xff // no acceptable authentication methods

	StatusSucceeded Reply = 0x00
)

// An Addr represents a SOCKS-specific address.
// Either Name or IP is used exclusively.
type Addr struct {
	Name string // fully-qualified domain name
	IP   net.IP
	Port int
}

func (a *Addr) Network() string { return "socks" }

func (a *Addr) String() string {
	if a == nil {
		return "<nil>"
	}
	port := strconv.Itoa(a.Port)
	if a.IP == nil {
		return net.JoinHostPort(a.Name, port)
	}
	return net.JoinHostPort(a.IP.String(), port)
}

// A Conn represents a forward proxy connection.
type Conn struct {
	net.Conn

	boundAddr net.Addr
}

// BoundAddr returns the address assigned by the proxy server for
// connecting to the command target address from the proxy server.
func (c *Conn) BoundAddr() net.Addr {
	if c == nil {
		return nil
	}
	return c.boundAddr
}

// A Dialer holds SOCKS-specific options.
type Dialer struct {
	cmd          Command // either CmdConnect or cmdBind
	proxyNetwork string  // network between a proxy server and a client
	proxyAddress string  // proxy server address

	// ProxyDial specifies the optional dial function for
	// establishing the transport connection.
	ProxyDial func(context.Context, string, string) (net.Conn, error)

	// AuthMethods specifies the list of request authentication
	// methods.
	// If empty, SOCKS client requests only AuthMethodNotRequired.
	AuthMethods []AuthMethod

	// Authenticate specifies the optional authentication
	// function. It must be non-nil when AuthMethods is not empty.
	// It must return an error when the authentication is failed.
	Authenticate func(context.Context, io.ReadWriter, AuthMethod) error
}

// DialContext connects to the provided address on the provided
// network.
//
// The returned error value may be a net.OpError. When the Op field of
// net.OpError contains "socks", the Source field contains a proxy
// server address and the Addr field contains a command target
// address.
//
// See func Dial of the net package of standard library for a
// description of the network and address parameters.
func (d *Dialer) DialContext(ctx context.Context, network, address string) (net.Conn, error) {
	if err := d.validateTarget(network, address); err != nil {
		proxy, dst, _ := d.pathAddrs(address)
		return nil, &net.OpError{Op: d.cmd.String(), Net: network, Source: proxy, Addr: dst, Err: err}
	}
	if ctx == nil {
		proxy, dst, _ := d.pathAddrs(address)
		return nil, &net.OpError{Op: d.cmd.String(), Net: network, Source: proxy, Addr: dst, Err: errors.New("nil context")}
	}
	var err error
	var c net.Conn
	if d.ProxyDial != nil {
		c, err = d.ProxyDial(ctx, d.proxyNetwork, d.proxyAddress)
	} else {
		var dd net.Dialer
		c, err = dd.DialContext(ctx, d.proxyNetwork, d.proxyAddress)
	}
	if err != nil {
		proxy, dst, _ := d.pathAddrs(address)
		return nil, &net.OpError{Op: d.cmd.String(), Net: network, Source: proxy, Addr: dst, Err: err}
	}
	a, err := d.connect(ctx, c, address)
	if err != nil {
		c.Close()
		proxy, dst, _ := d.pathAddrs(address)
		return nil, &net.OpError{Op: d.cmd.String(), Net: network, Source: proxy, Addr: dst, Err: err}
	}
	return &Conn{Conn: c, boundAddr: a}, nil
}

// DialWithConn initiates a connection from SOCKS server to the target
// network and address using the connection c that is already
// connected to the SOCKS server.
//
// It returns the connection's local address assigned by the SOCKS
// server.
func (d *Dialer) DialWithConn(ctx context.Context, c net.Conn, network, address string) (net.Addr, error) {
	if err := d.validateTarget(network, address); err != nil {
		proxy, dst, _ := d.pathAddrs(address)
		return nil, &net.OpError{Op: d.cmd.String(), Net: network, Source: proxy, Addr: dst, Err: err}
	}
	if ctx == nil {
		proxy, dst, _ := d.pathAddrs(address)
		return nil, &net.OpError{Op: d.cmd.String(), Net: network, Source: proxy, Addr: dst, Err: errors.New("nil context")}
	}
	a, err := d.connect(ctx, c, address)
	if err != nil {
		proxy, dst, _ := d.pathAddrs(address)
		return nil, &net.OpError{Op: d.cmd.String(), Net: network, Source: proxy, Addr: dst, Err: err}
	}
	return a, nil
}

// Dial connects to the provided address on the provided network.
//
// Unlike DialContext, it returns a raw transport connection instead
// of a forward proxy connection.
//
// Deprecated: Use DialContext or DialWithConn instead.
func (d *Dialer) Dial(network, address string) (net.Conn, error) {
	if err := d.validateTarget(network, address); err != nil {
		proxy, dst, _ := d.pathAddrs(address)
		return nil, &net.OpError{Op: d.cmd.String(), Net: network, Source: proxy, Addr: dst, Err: err}
	}
	var err error
	var c net.Conn
	if d.ProxyDial != nil {
		c, err = d.ProxyDial(context.Background(), d.proxyNetwork, d.proxyAddress)
	} else {
		c, err = net.Dial(d.proxyNetwork, d.proxyAddress)
	}
	if err != nil {
		proxy, dst, _ := d.pathAddrs(address)
		return nil, &net.OpError{Op: d.cmd.String(), Net: network, Source: proxy, Addr: dst, Err: err}
	}
	if _, err := d.DialWithConn(context.Background(), c, network, address); err != nil {
		c.Close()
		return nil, err
	}
	return c, nil
}

func (d *Dialer) validateTarget(network, address string) error {
	switch network {
	case "tcp", "tcp6", "tcp4":
	default:
		return errors.New("network not implemented")
	}
	switch d.cmd {
	case CmdConnect, cmdBind:
	default:
		return errors.New("command not implemented")
	}
	return nil
}

func (d *Dialer) pathAddrs(address string) (proxy, dst net.Addr, err error) {
	for i, s := range []string{d.proxyAddress, address} {
		host, port, err := splitHostPort(s)
		if err != nil {
			return nil, nil, err
		}
		a := &Addr{Port: port}
		a.IP = net.ParseIP(host)
		if a.IP == nil {
			a.Name = host
		}
		if i == 0 {
			proxy = a
		} else {
			dst = a
		}
	}
	return
}

// NewDialer returns a new Dialer that dials through the provided
// proxy server's network and address.
func NewDialer(network, address string) *Dialer {
	return &Dialer{proxyNetwork: network, proxyAddress: address, cmd: CmdConnect}
}

const (
	authUsernamePasswordVersion = 0x01
	authStatusSucceeded         = 0x00
)

// UsernamePassword are the credentials for the username/password
// authentication method.
type UsernamePassword struct {
	Username string
	Password string
}

// Authenticate authenticates a pair of username and password with the
// proxy server.
func (up *UsernamePassword) Authenticate(ctx context.Context, rw io.ReadWriter, auth AuthMethod) error {
	switch auth {
	case AuthMethodNotRequired:
		return nil
	case AuthMethodUsernamePassword:
		if len(up.Username) == 0 || len(up.Username) > 255 || len(up.Password) == 0 || len(up.Password) > 255 {
			return errors.New("invalid username/password")
		}
		b := []byte{authUsernamePasswordVersion}
		b = append(b, byte(len(up.Username)))
		b = append(b, up.Username...)
		b = append(b, byte(len(up.Password)))
		b = append(b, up.Password...)
		// TODO(mikio): handle IO deadlines and cancelation if
		// necessary
		if _, err := rw.Write(b); err != nil {
			return err
		}
		if _, err := io.ReadFull(rw, b[:2]); err != nil {
			return err
		}
		if b[0] != authUsernamePasswordVersion {
			return errors.New("invalid username/password version")
		}
		if b[1] != authStatusSucceeded {
			return errors.New("username/password authentication failed")
		}
		return nil
	}
	return errors.New("unsupported authentication method " + strconv.Itoa(int(auth)))
}
   07070100000D51000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003200000000elemental-cli-0.3.1/vendor/golang.org/x/net/proxy 07070100000D52000081A4000000000000000000000001645E367C00000685000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/golang.org/x/net/proxy/dial.go // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package proxy

import (
	"context"
	"net"
)

// A ContextDialer dials using a context.
type ContextDialer interface {
	DialContext(ctx context.Context, network, address string) (net.Conn, error)
}

// Dial works like DialContext on net.Dialer but using a dialer returned by FromEnvironment.
//
// The passed ctx is only used for returning the Conn, not the lifetime of the Conn.
//
// Custom dialers (registered via RegisterDialerType) that do not implement ContextDialer
// can leak a goroutine for as long as it takes the underlying Dialer implementation to timeout.
//
// A Conn returned from a successful Dial after the context has been cancelled will be immediately closed.
func Dial(ctx context.Context, network, address string) (net.Conn, error) {
	d := FromEnvironment()
	if xd, ok := d.(ContextDialer); ok {
		return xd.DialContext(ctx, network, address)
	}
	return dialContext(ctx, d, network, address)
}

// WARNING: this can leak a goroutine for as long as the underlying Dialer implementation takes to timeout
// A Conn returned from a successful Dial after the context has been cancelled will be immediately closed.
func dialContext(ctx context.Context, d Dialer, network, address string) (net.Conn, error) {
	var (
		conn net.Conn
		done = make(chan struct{}, 1)
		err  error
	)
	go func() {
		conn, err = d.Dial(network, address)
		close(done)
		if conn != nil && ctx.Err() != nil {
			conn.Close()
		}
	}()
	select {
	case <-ctx.Done():
		err = ctx.Err()
	case <-done:
	}
	return conn, err
}
   07070100000D53000081A4000000000000000000000001645E367C00000340000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/golang.org/x/net/proxy/direct.go   // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package proxy

import (
	"context"
	"net"
)

type direct struct{}

// Direct implements Dialer by making network connections directly using net.Dial or net.DialContext.
var Direct = direct{}

var (
	_ Dialer        = Direct
	_ ContextDialer = Direct
)

// Dial directly invokes net.Dial with the supplied parameters.
func (direct) Dial(network, addr string) (net.Conn, error) {
	return net.Dial(network, addr)
}

// DialContext instantiates a net.Dialer and invokes its DialContext receiver with the supplied parameters.
func (direct) DialContext(ctx context.Context, network, addr string) (net.Conn, error) {
	var d net.Dialer
	return d.DialContext(ctx, network, addr)
}
07070100000D54000081A4000000000000000000000001645E367C00001049000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/golang.org/x/net/proxy/per_host.go // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package proxy

import (
	"context"
	"net"
	"strings"
)

// A PerHost directs connections to a default Dialer unless the host name
// requested matches one of a number of exceptions.
type PerHost struct {
	def, bypass Dialer

	bypassNetworks []*net.IPNet
	bypassIPs      []net.IP
	bypassZones    []string
	bypassHosts    []string
}

// NewPerHost returns a PerHost Dialer that directs connections to either
// defaultDialer or bypass, depending on whether the connection matches one of
// the configured rules.
func NewPerHost(defaultDialer, bypass Dialer) *PerHost {
	return &PerHost{
		def:    defaultDialer,
		bypass: bypass,
	}
}

// Dial connects to the address addr on the given network through either
// defaultDialer or bypass.
func (p *PerHost) Dial(network, addr string) (c net.Conn, err error) {
	host, _, err := net.SplitHostPort(addr)
	if err != nil {
		return nil, err
	}

	return p.dialerForRequest(host).Dial(network, addr)
}

// DialContext connects to the address addr on the given network through either
// defaultDialer or bypass.
func (p *PerHost) DialContext(ctx context.Context, network, addr string) (c net.Conn, err error) {
	host, _, err := net.SplitHostPort(addr)
	if err != nil {
		return nil, err
	}
	d := p.dialerForRequest(host)
	if x, ok := d.(ContextDialer); ok {
		return x.DialContext(ctx, network, addr)
	}
	return dialContext(ctx, d, network, addr)
}

func (p *PerHost) dialerForRequest(host string) Dialer {
	if ip := net.ParseIP(host); ip != nil {
		for _, net := range p.bypassNetworks {
			if net.Contains(ip) {
				return p.bypass
			}
		}
		for _, bypassIP := range p.bypassIPs {
			if bypassIP.Equal(ip) {
				return p.bypass
			}
		}
		return p.def
	}

	for _, zone := range p.bypassZones {
		if strings.HasSuffix(host, zone) {
			return p.bypass
		}
		if host == zone[1:] {
			// For a zone ".example.com", we match "example.com"
			// too.
			return p.bypass
		}
	}
	for _, bypassHost := range p.bypassHosts {
		if bypassHost == host {
			return p.bypass
		}
	}
	return p.def
}

// AddFromString parses a string that contains comma-separated values
// specifying hosts that should use the bypass proxy. Each value is either an
// IP address, a CIDR range, a zone (*.example.com) or a host name
// (localhost). A best effort is made to parse the string and errors are
// ignored.
func (p *PerHost) AddFromString(s string) {
	hosts := strings.Split(s, ",")
	for _, host := range hosts {
		host = strings.TrimSpace(host)
		if len(host) == 0 {
			continue
		}
		if strings.Contains(host, "/") {
			// We assume that it's a CIDR address like 127.0.0.0/8
			if _, net, err := net.ParseCIDR(host); err == nil {
				p.AddNetwork(net)
			}
			continue
		}
		if ip := net.ParseIP(host); ip != nil {
			p.AddIP(ip)
			continue
		}
		if strings.HasPrefix(host, "*.") {
			p.AddZone(host[1:])
			continue
		}
		p.AddHost(host)
	}
}

// AddIP specifies an IP address that will use the bypass proxy. Note that
// this will only take effect if a literal IP address is dialed. A connection
// to a named host will never match an IP.
func (p *PerHost) AddIP(ip net.IP) {
	p.bypassIPs = append(p.bypassIPs, ip)
}

// AddNetwork specifies an IP range that will use the bypass proxy. Note that
// this will only take effect if a literal IP address is dialed. A connection
// to a named host will never match.
func (p *PerHost) AddNetwork(net *net.IPNet) {
	p.bypassNetworks = append(p.bypassNetworks, net)
}

// AddZone specifies a DNS suffix that will use the bypass proxy. A zone of
// "example.com" matches "example.com" and all of its subdomains.
func (p *PerHost) AddZone(zone string) {
	if strings.HasSuffix(zone, ".") {
		zone = zone[:len(zone)-1]
	}
	if !strings.HasPrefix(zone, ".") {
		zone = "." + zone
	}
	p.bypassZones = append(p.bypassZones, zone)
}

// AddHost specifies a host name that will use the bypass proxy.
func (p *PerHost) AddHost(host string) {
	if strings.HasSuffix(host, ".") {
		host = host[:len(host)-1]
	}
	p.bypassHosts = append(p.bypassHosts, host)
}
   07070100000D55000081A4000000000000000000000001645E367C00000E60000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/golang.org/x/net/proxy/proxy.go    // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package proxy provides support for a variety of protocols to proxy network
// data.
package proxy // import "golang.org/x/net/proxy"

import (
	"errors"
	"net"
	"net/url"
	"os"
	"sync"
)

// A Dialer is a means to establish a connection.
// Custom dialers should also implement ContextDialer.
type Dialer interface {
	// Dial connects to the given address via the proxy.
	Dial(network, addr string) (c net.Conn, err error)
}

// Auth contains authentication parameters that specific Dialers may require.
type Auth struct {
	User, Password string
}

// FromEnvironment returns the dialer specified by the proxy-related
// variables in the environment and makes underlying connections
// directly.
func FromEnvironment() Dialer {
	return FromEnvironmentUsing(Direct)
}

// FromEnvironmentUsing returns the dialer specify by the proxy-related
// variables in the environment and makes underlying connections
// using the provided forwarding Dialer (for instance, a *net.Dialer
// with desired configuration).
func FromEnvironmentUsing(forward Dialer) Dialer {
	allProxy := allProxyEnv.Get()
	if len(allProxy) == 0 {
		return forward
	}

	proxyURL, err := url.Parse(allProxy)
	if err != nil {
		return forward
	}
	proxy, err := FromURL(proxyURL, forward)
	if err != nil {
		return forward
	}

	noProxy := noProxyEnv.Get()
	if len(noProxy) == 0 {
		return proxy
	}

	perHost := NewPerHost(proxy, forward)
	perHost.AddFromString(noProxy)
	return perHost
}

// proxySchemes is a map from URL schemes to a function that creates a Dialer
// from a URL with such a scheme.
var proxySchemes map[string]func(*url.URL, Dialer) (Dialer, error)

// RegisterDialerType takes a URL scheme and a function to generate Dialers from
// a URL with that scheme and a forwarding Dialer. Registered schemes are used
// by FromURL.
func RegisterDialerType(scheme string, f func(*url.URL, Dialer) (Dialer, error)) {
	if proxySchemes == nil {
		proxySchemes = make(map[string]func(*url.URL, Dialer) (Dialer, error))
	}
	proxySchemes[scheme] = f
}

// FromURL returns a Dialer given a URL specification and an underlying
// Dialer for it to make network requests.
func FromURL(u *url.URL, forward Dialer) (Dialer, error) {
	var auth *Auth
	if u.User != nil {
		auth = new(Auth)
		auth.User = u.User.Username()
		if p, ok := u.User.Password(); ok {
			auth.Password = p
		}
	}

	switch u.Scheme {
	case "socks5", "socks5h":
		addr := u.Hostname()
		port := u.Port()
		if port == "" {
			port = "1080"
		}
		return SOCKS5("tcp", net.JoinHostPort(addr, port), auth, forward)
	}

	// If the scheme doesn't match any of the built-in schemes, see if it
	// was registered by another package.
	if proxySchemes != nil {
		if f, ok := proxySchemes[u.Scheme]; ok {
			return f(u, forward)
		}
	}

	return nil, errors.New("proxy: unknown scheme: " + u.Scheme)
}

var (
	allProxyEnv = &envOnce{
		names: []string{"ALL_PROXY", "all_proxy"},
	}
	noProxyEnv = &envOnce{
		names: []string{"NO_PROXY", "no_proxy"},
	}
)

// envOnce looks up an environment variable (optionally by multiple
// names) once. It mitigates expensive lookups on some platforms
// (e.g. Windows).
// (Borrowed from net/http/transport.go)
type envOnce struct {
	names []string
	once  sync.Once
	val   string
}

func (e *envOnce) Get() string {
	e.once.Do(e.init)
	return e.val
}

func (e *envOnce) init() {
	for _, n := range e.names {
		e.val = os.Getenv(n)
		if e.val != "" {
			return
		}
	}
}

// reset is used by tests
func (e *envOnce) reset() {
	e.once = sync.Once{}
	e.val = ""
}
07070100000D56000081A4000000000000000000000001645E367C00000496000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/golang.org/x/net/proxy/socks5.go   // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package proxy

import (
	"context"
	"net"

	"golang.org/x/net/internal/socks"
)

// SOCKS5 returns a Dialer that makes SOCKSv5 connections to the given
// address with an optional username and password.
// See RFC 1928 and RFC 1929.
func SOCKS5(network, address string, auth *Auth, forward Dialer) (Dialer, error) {
	d := socks.NewDialer(network, address)
	if forward != nil {
		if f, ok := forward.(ContextDialer); ok {
			d.ProxyDial = func(ctx context.Context, network string, address string) (net.Conn, error) {
				return f.DialContext(ctx, network, address)
			}
		} else {
			d.ProxyDial = func(ctx context.Context, network string, address string) (net.Conn, error) {
				return dialContext(ctx, forward, network, address)
			}
		}
	}
	if auth != nil {
		up := socks.UsernamePassword{
			Username: auth.User,
			Password: auth.Password,
		}
		d.AuthMethods = []socks.AuthMethod{
			socks.AuthMethodNotRequired,
			socks.AuthMethodUsernamePassword,
		}
		d.Authenticate = up.Authenticate
	}
	return d, nil
}
  07070100000D57000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/vendor/golang.org/x/sync  07070100000D58000081A4000000000000000000000001645E367C000005C7000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/golang.org/x/sync/LICENSE  Copyright (c) 2009 The Go Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 07070100000D59000081A4000000000000000000000001645E367C00000517000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/golang.org/x/sync/PATENTS  Additional IP Rights Grant (Patents)

"This implementation" means the copyrightable works distributed by
Google as part of the Go project.

Google hereby grants to You a perpetual, worldwide, non-exclusive,
no-charge, royalty-free, irrevocable (except as stated in this section)
patent license to make, have made, use, offer to sell, sell, import,
transfer and otherwise run, modify and propagate the contents of this
implementation of Go, where such license applies only to those patent
claims, both currently owned or controlled by Google and acquired in
the future, licensable by Google that are necessarily infringed by this
implementation of Go.  This grant does not include claims that would be
infringed only as a consequence of further modification of this
implementation.  If you or your agent or exclusive licensee institute or
order or agree to the institution of patent litigation against any
entity (including a cross-claim or counterclaim in a lawsuit) alleging
that this implementation of Go or any code incorporated within this
implementation of Go constitutes direct or contributory patent
infringement, or inducement of patent infringement, then any patent
rights granted to you under this License for this implementation of Go
shall terminate as of the date such litigation is filed.
 07070100000D5A000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/golang.org/x/sync/errgroup 07070100000D5B000081A4000000000000000000000001645E367C00000C89000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/golang.org/x/sync/errgroup/errgroup.go // Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package errgroup provides synchronization, error propagation, and Context
// cancelation for groups of goroutines working on subtasks of a common task.
package errgroup

import (
	"context"
	"fmt"
	"sync"
)

type token struct{}

// A Group is a collection of goroutines working on subtasks that are part of
// the same overall task.
//
// A zero Group is valid, has no limit on the number of active goroutines,
// and does not cancel on error.
type Group struct {
	cancel func()

	wg sync.WaitGroup

	sem chan token

	errOnce sync.Once
	err     error
}

func (g *Group) done() {
	if g.sem != nil {
		<-g.sem
	}
	g.wg.Done()
}

// WithContext returns a new Group and an associated Context derived from ctx.
//
// The derived Context is canceled the first time a function passed to Go
// returns a non-nil error or the first time Wait returns, whichever occurs
// first.
func WithContext(ctx context.Context) (*Group, context.Context) {
	ctx, cancel := context.WithCancel(ctx)
	return &Group{cancel: cancel}, ctx
}

// Wait blocks until all function calls from the Go method have returned, then
// returns the first non-nil error (if any) from them.
func (g *Group) Wait() error {
	g.wg.Wait()
	if g.cancel != nil {
		g.cancel()
	}
	return g.err
}

// Go calls the given function in a new goroutine.
// It blocks until the new goroutine can be added without the number of
// active goroutines in the group exceeding the configured limit.
//
// The first call to return a non-nil error cancels the group's context, if the
// group was created by calling WithContext. The error will be returned by Wait.
func (g *Group) Go(f func() error) {
	if g.sem != nil {
		g.sem <- token{}
	}

	g.wg.Add(1)
	go func() {
		defer g.done()

		if err := f(); err != nil {
			g.errOnce.Do(func() {
				g.err = err
				if g.cancel != nil {
					g.cancel()
				}
			})
		}
	}()
}

// TryGo calls the given function in a new goroutine only if the number of
// active goroutines in the group is currently below the configured limit.
//
// The return value reports whether the goroutine was started.
func (g *Group) TryGo(f func() error) bool {
	if g.sem != nil {
		select {
		case g.sem <- token{}:
			// Note: this allows barging iff channels in general allow barging.
		default:
			return false
		}
	}

	g.wg.Add(1)
	go func() {
		defer g.done()

		if err := f(); err != nil {
			g.errOnce.Do(func() {
				g.err = err
				if g.cancel != nil {
					g.cancel()
				}
			})
		}
	}()
	return true
}

// SetLimit limits the number of active goroutines in this group to at most n.
// A negative value indicates no limit.
//
// Any subsequent call to the Go method will block until it can add an active
// goroutine without exceeding the configured limit.
//
// The limit must not be modified while any goroutines in the group are active.
func (g *Group) SetLimit(n int) {
	if n < 0 {
		g.sem = nil
		return
	}
	if len(g.sem) != 0 {
		panic(fmt.Errorf("errgroup: modify limit while %v goroutines in the group are still active", len(g.sem)))
	}
	g.sem = make(chan token, n)
}
   07070100000D5C000041ED000000000000000000000007645E367C00000000000000000000000000000000000000000000002C00000000elemental-cli-0.3.1/vendor/golang.org/x/sys   07070100000D5D000081A4000000000000000000000001645E367C000005C7000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/golang.org/x/sys/LICENSE   Copyright (c) 2009 The Go Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 07070100000D5E000081A4000000000000000000000001645E367C00000517000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/golang.org/x/sys/PATENTS   Additional IP Rights Grant (Patents)

"This implementation" means the copyrightable works distributed by
Google as part of the Go project.

Google hereby grants to You a perpetual, worldwide, non-exclusive,
no-charge, royalty-free, irrevocable (except as stated in this section)
patent license to make, have made, use, offer to sell, sell, import,
transfer and otherwise run, modify and propagate the contents of this
implementation of Go, where such license applies only to those patent
claims, both currently owned or controlled by Google and acquired in
the future, licensable by Google that are necessarily infringed by this
implementation of Go.  This grant does not include claims that would be
infringed only as a consequence of further modification of this
implementation.  If you or your agent or exclusive licensee institute or
order or agree to the institution of patent litigation against any
entity (including a cross-claim or counterclaim in a lawsuit) alleging
that this implementation of Go or any code incorporated within this
implementation of Go constitutes direct or contributory patent
infringement, or inducement of patent infringement, then any patent
rights granted to you under this License for this implementation of Go
shall terminate as of the date such litigation is filed.
 07070100000D5F000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003000000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu   07070100000D60000081A4000000000000000000000001645E367C000001A4000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/asm_aix_ppc64.s   // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build gc
// +build gc

#include "textflag.h"

//
// System calls for ppc64, AIX are implemented in runtime/syscall_aix.go
//

TEXT ·syscall6(SB),NOSPLIT,$0-88
	JMP	syscall·syscall6(SB)

TEXT ·rawSyscall6(SB),NOSPLIT,$0-88
	JMP	syscall·rawSyscall6(SB)
07070100000D61000081A4000000000000000000000001645E367C0000074C000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/byteorder.go  // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package cpu

import (
	"runtime"
)

// byteOrder is a subset of encoding/binary.ByteOrder.
type byteOrder interface {
	Uint32([]byte) uint32
	Uint64([]byte) uint64
}

type littleEndian struct{}
type bigEndian struct{}

func (littleEndian) Uint32(b []byte) uint32 {
	_ = b[3] // bounds check hint to compiler; see golang.org/issue/14808
	return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
}

func (littleEndian) Uint64(b []byte) uint64 {
	_ = b[7] // bounds check hint to compiler; see golang.org/issue/14808
	return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 |
		uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
}

func (bigEndian) Uint32(b []byte) uint32 {
	_ = b[3] // bounds check hint to compiler; see golang.org/issue/14808
	return uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24
}

func (bigEndian) Uint64(b []byte) uint64 {
	_ = b[7] // bounds check hint to compiler; see golang.org/issue/14808
	return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 |
		uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56
}

// hostByteOrder returns littleEndian on little-endian machines and
// bigEndian on big-endian machines.
func hostByteOrder() byteOrder {
	switch runtime.GOARCH {
	case "386", "amd64", "amd64p32",
		"alpha",
		"arm", "arm64",
		"loong64",
		"mipsle", "mips64le", "mips64p32le",
		"nios2",
		"ppc64le",
		"riscv", "riscv64",
		"sh":
		return littleEndian{}
	case "armbe", "arm64be",
		"m68k",
		"mips", "mips64", "mips64p32",
		"ppc", "ppc64",
		"s390", "s390x",
		"shbe",
		"sparc", "sparc64":
		return bigEndian{}
	}
	panic("unknown architecture")
}
07070100000D62000081A4000000000000000000000001645E367C00002F7A000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu.go    // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package cpu implements processor feature detection for
// various CPU architectures.
package cpu

import (
	"os"
	"strings"
)

// Initialized reports whether the CPU features were initialized.
//
// For some GOOS/GOARCH combinations initialization of the CPU features depends
// on reading an operating specific file, e.g. /proc/self/auxv on linux/arm
// Initialized will report false if reading the file fails.
var Initialized bool

// CacheLinePad is used to pad structs to avoid false sharing.
type CacheLinePad struct{ _ [cacheLineSize]byte }

// X86 contains the supported CPU features of the
// current X86/AMD64 platform. If the current platform
// is not X86/AMD64 then all feature flags are false.
//
// X86 is padded to avoid false sharing. Further the HasAVX
// and HasAVX2 are only set if the OS supports XMM and YMM
// registers in addition to the CPUID feature bit being set.
var X86 struct {
	_                   CacheLinePad
	HasAES              bool // AES hardware implementation (AES NI)
	HasADX              bool // Multi-precision add-carry instruction extensions
	HasAVX              bool // Advanced vector extension
	HasAVX2             bool // Advanced vector extension 2
	HasAVX512           bool // Advanced vector extension 512
	HasAVX512F          bool // Advanced vector extension 512 Foundation Instructions
	HasAVX512CD         bool // Advanced vector extension 512 Conflict Detection Instructions
	HasAVX512ER         bool // Advanced vector extension 512 Exponential and Reciprocal Instructions
	HasAVX512PF         bool // Advanced vector extension 512 Prefetch Instructions Instructions
	HasAVX512VL         bool // Advanced vector extension 512 Vector Length Extensions
	HasAVX512BW         bool // Advanced vector extension 512 Byte and Word Instructions
	HasAVX512DQ         bool // Advanced vector extension 512 Doubleword and Quadword Instructions
	HasAVX512IFMA       bool // Advanced vector extension 512 Integer Fused Multiply Add
	HasAVX512VBMI       bool // Advanced vector extension 512 Vector Byte Manipulation Instructions
	HasAVX5124VNNIW     bool // Advanced vector extension 512 Vector Neural Network Instructions Word variable precision
	HasAVX5124FMAPS     bool // Advanced vector extension 512 Fused Multiply Accumulation Packed Single precision
	HasAVX512VPOPCNTDQ  bool // Advanced vector extension 512 Double and quad word population count instructions
	HasAVX512VPCLMULQDQ bool // Advanced vector extension 512 Vector carry-less multiply operations
	HasAVX512VNNI       bool // Advanced vector extension 512 Vector Neural Network Instructions
	HasAVX512GFNI       bool // Advanced vector extension 512 Galois field New Instructions
	HasAVX512VAES       bool // Advanced vector extension 512 Vector AES instructions
	HasAVX512VBMI2      bool // Advanced vector extension 512 Vector Byte Manipulation Instructions 2
	HasAVX512BITALG     bool // Advanced vector extension 512 Bit Algorithms
	HasAVX512BF16       bool // Advanced vector extension 512 BFloat16 Instructions
	HasBMI1             bool // Bit manipulation instruction set 1
	HasBMI2             bool // Bit manipulation instruction set 2
	HasCX16             bool // Compare and exchange 16 Bytes
	HasERMS             bool // Enhanced REP for MOVSB and STOSB
	HasFMA              bool // Fused-multiply-add instructions
	HasOSXSAVE          bool // OS supports XSAVE/XRESTOR for saving/restoring XMM registers.
	HasPCLMULQDQ        bool // PCLMULQDQ instruction - most often used for AES-GCM
	HasPOPCNT           bool // Hamming weight instruction POPCNT.
	HasRDRAND           bool // RDRAND instruction (on-chip random number generator)
	HasRDSEED           bool // RDSEED instruction (on-chip random number generator)
	HasSSE2             bool // Streaming SIMD extension 2 (always available on amd64)
	HasSSE3             bool // Streaming SIMD extension 3
	HasSSSE3            bool // Supplemental streaming SIMD extension 3
	HasSSE41            bool // Streaming SIMD extension 4 and 4.1
	HasSSE42            bool // Streaming SIMD extension 4 and 4.2
	_                   CacheLinePad
}

// ARM64 contains the supported CPU features of the
// current ARMv8(aarch64) platform. If the current platform
// is not arm64 then all feature flags are false.
var ARM64 struct {
	_           CacheLinePad
	HasFP       bool // Floating-point instruction set (always available)
	HasASIMD    bool // Advanced SIMD (always available)
	HasEVTSTRM  bool // Event stream support
	HasAES      bool // AES hardware implementation
	HasPMULL    bool // Polynomial multiplication instruction set
	HasSHA1     bool // SHA1 hardware implementation
	HasSHA2     bool // SHA2 hardware implementation
	HasCRC32    bool // CRC32 hardware implementation
	HasATOMICS  bool // Atomic memory operation instruction set
	HasFPHP     bool // Half precision floating-point instruction set
	HasASIMDHP  bool // Advanced SIMD half precision instruction set
	HasCPUID    bool // CPUID identification scheme registers
	HasASIMDRDM bool // Rounding double multiply add/subtract instruction set
	HasJSCVT    bool // Javascript conversion from floating-point to integer
	HasFCMA     bool // Floating-point multiplication and addition of complex numbers
	HasLRCPC    bool // Release Consistent processor consistent support
	HasDCPOP    bool // Persistent memory support
	HasSHA3     bool // SHA3 hardware implementation
	HasSM3      bool // SM3 hardware implementation
	HasSM4      bool // SM4 hardware implementation
	HasASIMDDP  bool // Advanced SIMD double precision instruction set
	HasSHA512   bool // SHA512 hardware implementation
	HasSVE      bool // Scalable Vector Extensions
	HasASIMDFHM bool // Advanced SIMD multiplication FP16 to FP32
	_           CacheLinePad
}

// ARM contains the supported CPU features of the current ARM (32-bit) platform.
// All feature flags are false if:
//  1. the current platform is not arm, or
//  2. the current operating system is not Linux.
var ARM struct {
	_           CacheLinePad
	HasSWP      bool // SWP instruction support
	HasHALF     bool // Half-word load and store support
	HasTHUMB    bool // ARM Thumb instruction set
	Has26BIT    bool // Address space limited to 26-bits
	HasFASTMUL  bool // 32-bit operand, 64-bit result multiplication support
	HasFPA      bool // Floating point arithmetic support
	HasVFP      bool // Vector floating point support
	HasEDSP     bool // DSP Extensions support
	HasJAVA     bool // Java instruction set
	HasIWMMXT   bool // Intel Wireless MMX technology support
	HasCRUNCH   bool // MaverickCrunch context switching and handling
	HasTHUMBEE  bool // Thumb EE instruction set
	HasNEON     bool // NEON instruction set
	HasVFPv3    bool // Vector floating point version 3 support
	HasVFPv3D16 bool // Vector floating point version 3 D8-D15
	HasTLS      bool // Thread local storage support
	HasVFPv4    bool // Vector floating point version 4 support
	HasIDIVA    bool // Integer divide instruction support in ARM mode
	HasIDIVT    bool // Integer divide instruction support in Thumb mode
	HasVFPD32   bool // Vector floating point version 3 D15-D31
	HasLPAE     bool // Large Physical Address Extensions
	HasEVTSTRM  bool // Event stream support
	HasAES      bool // AES hardware implementation
	HasPMULL    bool // Polynomial multiplication instruction set
	HasSHA1     bool // SHA1 hardware implementation
	HasSHA2     bool // SHA2 hardware implementation
	HasCRC32    bool // CRC32 hardware implementation
	_           CacheLinePad
}

// MIPS64X contains the supported CPU features of the current mips64/mips64le
// platforms. If the current platform is not mips64/mips64le or the current
// operating system is not Linux then all feature flags are false.
var MIPS64X struct {
	_      CacheLinePad
	HasMSA bool // MIPS SIMD architecture
	_      CacheLinePad
}

// PPC64 contains the supported CPU features of the current ppc64/ppc64le platforms.
// If the current platform is not ppc64/ppc64le then all feature flags are false.
//
// For ppc64/ppc64le, it is safe to check only for ISA level starting on ISA v3.00,
// since there are no optional categories. There are some exceptions that also
// require kernel support to work (DARN, SCV), so there are feature bits for
// those as well. The struct is padded to avoid false sharing.
var PPC64 struct {
	_        CacheLinePad
	HasDARN  bool // Hardware random number generator (requires kernel enablement)
	HasSCV   bool // Syscall vectored (requires kernel enablement)
	IsPOWER8 bool // ISA v2.07 (POWER8)
	IsPOWER9 bool // ISA v3.00 (POWER9), implies IsPOWER8
	_        CacheLinePad
}

// S390X contains the supported CPU features of the current IBM Z
// (s390x) platform. If the current platform is not IBM Z then all
// feature flags are false.
//
// S390X is padded to avoid false sharing. Further HasVX is only set
// if the OS supports vector registers in addition to the STFLE
// feature bit being set.
var S390X struct {
	_         CacheLinePad
	HasZARCH  bool // z/Architecture mode is active [mandatory]
	HasSTFLE  bool // store facility list extended
	HasLDISP  bool // long (20-bit) displacements
	HasEIMM   bool // 32-bit immediates
	HasDFP    bool // decimal floating point
	HasETF3EH bool // ETF-3 enhanced
	HasMSA    bool // message security assist (CPACF)
	HasAES    bool // KM-AES{128,192,256} functions
	HasAESCBC bool // KMC-AES{128,192,256} functions
	HasAESCTR bool // KMCTR-AES{128,192,256} functions
	HasAESGCM bool // KMA-GCM-AES{128,192,256} functions
	HasGHASH  bool // KIMD-GHASH function
	HasSHA1   bool // K{I,L}MD-SHA-1 functions
	HasSHA256 bool // K{I,L}MD-SHA-256 functions
	HasSHA512 bool // K{I,L}MD-SHA-512 functions
	HasSHA3   bool // K{I,L}MD-SHA3-{224,256,384,512} and K{I,L}MD-SHAKE-{128,256} functions
	HasVX     bool // vector facility
	HasVXE    bool // vector-enhancements facility 1
	_         CacheLinePad
}

func init() {
	archInit()
	initOptions()
	processOptions()
}

// options contains the cpu debug options that can be used in GODEBUG.
// Options are arch dependent and are added by the arch specific initOptions functions.
// Features that are mandatory for the specific GOARCH should have the Required field set
// (e.g. SSE2 on amd64).
var options []option

// Option names should be lower case. e.g. avx instead of AVX.
type option struct {
	Name      string
	Feature   *bool
	Specified bool // whether feature value was specified in GODEBUG
	Enable    bool // whether feature should be enabled
	Required  bool // whether feature is mandatory and can not be disabled
}

func processOptions() {
	env := os.Getenv("GODEBUG")
field:
	for env != "" {
		field := ""
		i := strings.IndexByte(env, ',')
		if i < 0 {
			field, env = env, ""
		} else {
			field, env = env[:i], env[i+1:]
		}
		if len(field) < 4 || field[:4] != "cpu." {
			continue
		}
		i = strings.IndexByte(field, '=')
		if i < 0 {
			print("GODEBUG sys/cpu: no value specified for \"", field, "\"\n")
			continue
		}
		key, value := field[4:i], field[i+1:] // e.g. "SSE2", "on"

		var enable bool
		switch value {
		case "on":
			enable = true
		case "off":
			enable = false
		default:
			print("GODEBUG sys/cpu: value \"", value, "\" not supported for cpu option \"", key, "\"\n")
			continue field
		}

		if key == "all" {
			for i := range options {
				options[i].Specified = true
				options[i].Enable = enable || options[i].Required
			}
			continue field
		}

		for i := range options {
			if options[i].Name == key {
				options[i].Specified = true
				options[i].Enable = enable
				continue field
			}
		}

		print("GODEBUG sys/cpu: unknown cpu feature \"", key, "\"\n")
	}

	for _, o := range options {
		if !o.Specified {
			continue
		}

		if o.Enable && !*o.Feature {
			print("GODEBUG sys/cpu: can not enable \"", o.Name, "\", missing CPU support\n")
			continue
		}

		if !o.Enable && o.Required {
			print("GODEBUG sys/cpu: can not disable \"", o.Name, "\", required CPU feature\n")
			continue
		}

		*o.Feature = o.Enable
	}
}
  07070100000D63000081A4000000000000000000000001645E367C0000026B000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_aix.go    // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build aix
// +build aix

package cpu

const (
	// getsystemcfg constants
	_SC_IMPL     = 2
	_IMPL_POWER8 = 0x10000
	_IMPL_POWER9 = 0x20000
)

func archInit() {
	impl := getsystemcfg(_SC_IMPL)
	if impl&_IMPL_POWER8 != 0 {
		PPC64.IsPOWER8 = true
	}
	if impl&_IMPL_POWER9 != 0 {
		PPC64.IsPOWER8 = true
		PPC64.IsPOWER9 = true
	}

	Initialized = true
}

func getsystemcfg(label int) (n uint64) {
	r0, _ := callgetsystemcfg(label)
	n = uint64(r0)
	return
}
 07070100000D64000081A4000000000000000000000001645E367C00000873000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_arm.go    // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package cpu

const cacheLineSize = 32

// HWCAP/HWCAP2 bits.
// These are specific to Linux.
const (
	hwcap_SWP       = 1 << 0
	hwcap_HALF      = 1 << 1
	hwcap_THUMB     = 1 << 2
	hwcap_26BIT     = 1 << 3
	hwcap_FAST_MULT = 1 << 4
	hwcap_FPA       = 1 << 5
	hwcap_VFP       = 1 << 6
	hwcap_EDSP      = 1 << 7
	hwcap_JAVA      = 1 << 8
	hwcap_IWMMXT    = 1 << 9
	hwcap_CRUNCH    = 1 << 10
	hwcap_THUMBEE   = 1 << 11
	hwcap_NEON      = 1 << 12
	hwcap_VFPv3     = 1 << 13
	hwcap_VFPv3D16  = 1 << 14
	hwcap_TLS       = 1 << 15
	hwcap_VFPv4     = 1 << 16
	hwcap_IDIVA     = 1 << 17
	hwcap_IDIVT     = 1 << 18
	hwcap_VFPD32    = 1 << 19
	hwcap_LPAE      = 1 << 20
	hwcap_EVTSTRM   = 1 << 21

	hwcap2_AES   = 1 << 0
	hwcap2_PMULL = 1 << 1
	hwcap2_SHA1  = 1 << 2
	hwcap2_SHA2  = 1 << 3
	hwcap2_CRC32 = 1 << 4
)

func initOptions() {
	options = []option{
		{Name: "pmull", Feature: &ARM.HasPMULL},
		{Name: "sha1", Feature: &ARM.HasSHA1},
		{Name: "sha2", Feature: &ARM.HasSHA2},
		{Name: "swp", Feature: &ARM.HasSWP},
		{Name: "thumb", Feature: &ARM.HasTHUMB},
		{Name: "thumbee", Feature: &ARM.HasTHUMBEE},
		{Name: "tls", Feature: &ARM.HasTLS},
		{Name: "vfp", Feature: &ARM.HasVFP},
		{Name: "vfpd32", Feature: &ARM.HasVFPD32},
		{Name: "vfpv3", Feature: &ARM.HasVFPv3},
		{Name: "vfpv3d16", Feature: &ARM.HasVFPv3D16},
		{Name: "vfpv4", Feature: &ARM.HasVFPv4},
		{Name: "half", Feature: &ARM.HasHALF},
		{Name: "26bit", Feature: &ARM.Has26BIT},
		{Name: "fastmul", Feature: &ARM.HasFASTMUL},
		{Name: "fpa", Feature: &ARM.HasFPA},
		{Name: "edsp", Feature: &ARM.HasEDSP},
		{Name: "java", Feature: &ARM.HasJAVA},
		{Name: "iwmmxt", Feature: &ARM.HasIWMMXT},
		{Name: "crunch", Feature: &ARM.HasCRUNCH},
		{Name: "neon", Feature: &ARM.HasNEON},
		{Name: "idivt", Feature: &ARM.HasIDIVT},
		{Name: "idiva", Feature: &ARM.HasIDIVA},
		{Name: "lpae", Feature: &ARM.HasLPAE},
		{Name: "evtstrm", Feature: &ARM.HasEVTSTRM},
		{Name: "aes", Feature: &ARM.HasAES},
		{Name: "crc32", Feature: &ARM.HasCRC32},
	}

}
 07070100000D65000081A4000000000000000000000001645E367C00000EB7000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_arm64.go  // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package cpu

import "runtime"

// cacheLineSize is used to prevent false sharing of cache lines.
// We choose 128 because Apple Silicon, a.k.a. M1, has 128-byte cache line size.
// It doesn't cost much and is much more future-proof.
const cacheLineSize = 128

func initOptions() {
	options = []option{
		{Name: "fp", Feature: &ARM64.HasFP},
		{Name: "asimd", Feature: &ARM64.HasASIMD},
		{Name: "evstrm", Feature: &ARM64.HasEVTSTRM},
		{Name: "aes", Feature: &ARM64.HasAES},
		{Name: "fphp", Feature: &ARM64.HasFPHP},
		{Name: "jscvt", Feature: &ARM64.HasJSCVT},
		{Name: "lrcpc", Feature: &ARM64.HasLRCPC},
		{Name: "pmull", Feature: &ARM64.HasPMULL},
		{Name: "sha1", Feature: &ARM64.HasSHA1},
		{Name: "sha2", Feature: &ARM64.HasSHA2},
		{Name: "sha3", Feature: &ARM64.HasSHA3},
		{Name: "sha512", Feature: &ARM64.HasSHA512},
		{Name: "sm3", Feature: &ARM64.HasSM3},
		{Name: "sm4", Feature: &ARM64.HasSM4},
		{Name: "sve", Feature: &ARM64.HasSVE},
		{Name: "crc32", Feature: &ARM64.HasCRC32},
		{Name: "atomics", Feature: &ARM64.HasATOMICS},
		{Name: "asimdhp", Feature: &ARM64.HasASIMDHP},
		{Name: "cpuid", Feature: &ARM64.HasCPUID},
		{Name: "asimrdm", Feature: &ARM64.HasASIMDRDM},
		{Name: "fcma", Feature: &ARM64.HasFCMA},
		{Name: "dcpop", Feature: &ARM64.HasDCPOP},
		{Name: "asimddp", Feature: &ARM64.HasASIMDDP},
		{Name: "asimdfhm", Feature: &ARM64.HasASIMDFHM},
	}
}

func archInit() {
	switch runtime.GOOS {
	case "freebsd":
		readARM64Registers()
	case "linux", "netbsd", "openbsd":
		doinit()
	default:
		// Many platforms don't seem to allow reading these registers.
		setMinimalFeatures()
	}
}

// setMinimalFeatures fakes the minimal ARM64 features expected by
// TestARM64minimalFeatures.
func setMinimalFeatures() {
	ARM64.HasASIMD = true
	ARM64.HasFP = true
}

func readARM64Registers() {
	Initialized = true

	parseARM64SystemRegisters(getisar0(), getisar1(), getpfr0())
}

func parseARM64SystemRegisters(isar0, isar1, pfr0 uint64) {
	// ID_AA64ISAR0_EL1
	switch extractBits(isar0, 4, 7) {
	case 1:
		ARM64.HasAES = true
	case 2:
		ARM64.HasAES = true
		ARM64.HasPMULL = true
	}

	switch extractBits(isar0, 8, 11) {
	case 1:
		ARM64.HasSHA1 = true
	}

	switch extractBits(isar0, 12, 15) {
	case 1:
		ARM64.HasSHA2 = true
	case 2:
		ARM64.HasSHA2 = true
		ARM64.HasSHA512 = true
	}

	switch extractBits(isar0, 16, 19) {
	case 1:
		ARM64.HasCRC32 = true
	}

	switch extractBits(isar0, 20, 23) {
	case 2:
		ARM64.HasATOMICS = true
	}

	switch extractBits(isar0, 28, 31) {
	case 1:
		ARM64.HasASIMDRDM = true
	}

	switch extractBits(isar0, 32, 35) {
	case 1:
		ARM64.HasSHA3 = true
	}

	switch extractBits(isar0, 36, 39) {
	case 1:
		ARM64.HasSM3 = true
	}

	switch extractBits(isar0, 40, 43) {
	case 1:
		ARM64.HasSM4 = true
	}

	switch extractBits(isar0, 44, 47) {
	case 1:
		ARM64.HasASIMDDP = true
	}

	// ID_AA64ISAR1_EL1
	switch extractBits(isar1, 0, 3) {
	case 1:
		ARM64.HasDCPOP = true
	}

	switch extractBits(isar1, 12, 15) {
	case 1:
		ARM64.HasJSCVT = true
	}

	switch extractBits(isar1, 16, 19) {
	case 1:
		ARM64.HasFCMA = true
	}

	switch extractBits(isar1, 20, 23) {
	case 1:
		ARM64.HasLRCPC = true
	}

	// ID_AA64PFR0_EL1
	switch extractBits(pfr0, 16, 19) {
	case 0:
		ARM64.HasFP = true
	case 1:
		ARM64.HasFP = true
		ARM64.HasFPHP = true
	}

	switch extractBits(pfr0, 20, 23) {
	case 0:
		ARM64.HasASIMD = true
	case 1:
		ARM64.HasASIMD = true
		ARM64.HasASIMDHP = true
	}

	switch extractBits(pfr0, 32, 35) {
	case 1:
		ARM64.HasSVE = true
	}
}

func extractBits(data uint64, start, end uint) uint {
	return (uint)(data>>start) & ((1 << (end - start + 1)) - 1)
}
 07070100000D66000081A4000000000000000000000001645E367C00000303000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_arm64.s   // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build gc
// +build gc

#include "textflag.h"

// func getisar0() uint64
TEXT ·getisar0(SB),NOSPLIT,$0-8
	// get Instruction Set Attributes 0 into x0
	// mrs x0, ID_AA64ISAR0_EL1 = d5380600
	WORD	$0xd5380600
	MOVD	R0, ret+0(FP)
	RET

// func getisar1() uint64
TEXT ·getisar1(SB),NOSPLIT,$0-8
	// get Instruction Set Attributes 1 into x0
	// mrs x0, ID_AA64ISAR1_EL1 = d5380620
	WORD	$0xd5380620
	MOVD	R0, ret+0(FP)
	RET

// func getpfr0() uint64
TEXT ·getpfr0(SB),NOSPLIT,$0-8
	// get Processor Feature Register 0 into x0
	// mrs x0, ID_AA64PFR0_EL1 = d5380400
	WORD	$0xd5380400
	MOVD	R0, ret+0(FP)
	RET
 07070100000D67000081A4000000000000000000000001645E367C0000010D000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go   // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build gc
// +build gc

package cpu

func getisar0() uint64
func getisar1() uint64
func getpfr0() uint64
   07070100000D68000081A4000000000000000000000001645E367C000002AF000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_gc_s390x.go   // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build gc
// +build gc

package cpu

// haveAsmFunctions reports whether the other functions in this file can
// be safely called.
func haveAsmFunctions() bool { return true }

// The following feature detection functions are defined in cpu_s390x.s.
// They are likely to be expensive to call so the results should be cached.
func stfle() facilityList
func kmQuery() queryResult
func kmcQuery() queryResult
func kmctrQuery() queryResult
func kmaQuery() queryResult
func kimdQuery() queryResult
func klmdQuery() queryResult
 07070100000D69000081A4000000000000000000000001645E367C0000021D000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build (386 || amd64 || amd64p32) && gc
// +build 386 amd64 amd64p32
// +build gc

package cpu

// cpuid is implemented in cpu_x86.s for gc compiler
// and in cpu_gccgo.c for gccgo.
func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32)

// xgetbv with ecx = 0 is implemented in cpu_x86.s for gc compiler
// and in cpu_gccgo.c for gccgo.
func xgetbv() (eax, edx uint32)
   07070100000D6A000081A4000000000000000000000001645E367C0000013B000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go    // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build gccgo
// +build gccgo

package cpu

func getisar0() uint64 { return 0 }
func getisar1() uint64 { return 0 }
func getpfr0() uint64  { return 0 }
 07070100000D6B000081A4000000000000000000000001645E367C00000415000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_gccgo_s390x.go    // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build gccgo
// +build gccgo

package cpu

// haveAsmFunctions reports whether the other functions in this file can
// be safely called.
func haveAsmFunctions() bool { return false }

// TODO(mundaym): the following feature detection functions are currently
// stubs. See https://golang.org/cl/162887 for how to fix this.
// They are likely to be expensive to call so the results should be cached.
func stfle() facilityList     { panic("not implemented for gccgo") }
func kmQuery() queryResult    { panic("not implemented for gccgo") }
func kmcQuery() queryResult   { panic("not implemented for gccgo") }
func kmctrQuery() queryResult { panic("not implemented for gccgo") }
func kmaQuery() queryResult   { panic("not implemented for gccgo") }
func kimdQuery() queryResult  { panic("not implemented for gccgo") }
func klmdQuery() queryResult  { panic("not implemented for gccgo") }
   07070100000D6C000081A4000000000000000000000001645E367C00000474000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.c   // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build (386 || amd64 || amd64p32) && gccgo
// +build 386 amd64 amd64p32
// +build gccgo

#include <cpuid.h>
#include <stdint.h>
#include <x86intrin.h>

// Need to wrap __get_cpuid_count because it's declared as static.
int
gccgoGetCpuidCount(uint32_t leaf, uint32_t subleaf,
                   uint32_t *eax, uint32_t *ebx,
                   uint32_t *ecx, uint32_t *edx)
{
	return __get_cpuid_count(leaf, subleaf, eax, ebx, ecx, edx);
}

#pragma GCC diagnostic ignored "-Wunknown-pragmas"
#pragma GCC push_options
#pragma GCC target("xsave")
#pragma clang attribute push (__attribute__((target("xsave"))), apply_to=function)

// xgetbv reads the contents of an XCR (Extended Control Register)
// specified in the ECX register into registers EDX:EAX.
// Currently, the only supported value for XCR is 0.
void
gccgoXgetbv(uint32_t *eax, uint32_t *edx)
{
	uint64_t v = _xgetbv(0);
	*eax = v & 0xffffffff;
	*edx = v >> 32;
}

#pragma clang attribute pop
#pragma GCC pop_options
07070100000D6D000081A4000000000000000000000001645E367C00000348000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go  // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build (386 || amd64 || amd64p32) && gccgo
// +build 386 amd64 amd64p32
// +build gccgo

package cpu

//extern gccgoGetCpuidCount
func gccgoGetCpuidCount(eaxArg, ecxArg uint32, eax, ebx, ecx, edx *uint32)

func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32) {
	var a, b, c, d uint32
	gccgoGetCpuidCount(eaxArg, ecxArg, &a, &b, &c, &d)
	return a, b, c, d
}

//extern gccgoXgetbv
func gccgoXgetbv(eax, edx *uint32)

func xgetbv() (eax, edx uint32) {
	var a, d uint32
	gccgoXgetbv(&a, &d)
	return a, d
}

// gccgo doesn't build on Darwin, per:
// https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/gcc.rb#L76
func darwinSupportsAVX512() bool {
	return false
}
07070100000D6E000081A4000000000000000000000001645E367C00000169000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_linux.go  // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build !386 && !amd64 && !amd64p32 && !arm64
// +build !386,!amd64,!amd64p32,!arm64

package cpu

func archInit() {
	if err := readHWCAP(); err != nil {
		return
	}
	doinit()
	Initialized = true
}
   07070100000D6F000081A4000000000000000000000001645E367C00000571000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_linux_arm.go  // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package cpu

func doinit() {
	ARM.HasSWP = isSet(hwCap, hwcap_SWP)
	ARM.HasHALF = isSet(hwCap, hwcap_HALF)
	ARM.HasTHUMB = isSet(hwCap, hwcap_THUMB)
	ARM.Has26BIT = isSet(hwCap, hwcap_26BIT)
	ARM.HasFASTMUL = isSet(hwCap, hwcap_FAST_MULT)
	ARM.HasFPA = isSet(hwCap, hwcap_FPA)
	ARM.HasVFP = isSet(hwCap, hwcap_VFP)
	ARM.HasEDSP = isSet(hwCap, hwcap_EDSP)
	ARM.HasJAVA = isSet(hwCap, hwcap_JAVA)
	ARM.HasIWMMXT = isSet(hwCap, hwcap_IWMMXT)
	ARM.HasCRUNCH = isSet(hwCap, hwcap_CRUNCH)
	ARM.HasTHUMBEE = isSet(hwCap, hwcap_THUMBEE)
	ARM.HasNEON = isSet(hwCap, hwcap_NEON)
	ARM.HasVFPv3 = isSet(hwCap, hwcap_VFPv3)
	ARM.HasVFPv3D16 = isSet(hwCap, hwcap_VFPv3D16)
	ARM.HasTLS = isSet(hwCap, hwcap_TLS)
	ARM.HasVFPv4 = isSet(hwCap, hwcap_VFPv4)
	ARM.HasIDIVA = isSet(hwCap, hwcap_IDIVA)
	ARM.HasIDIVT = isSet(hwCap, hwcap_IDIVT)
	ARM.HasVFPD32 = isSet(hwCap, hwcap_VFPD32)
	ARM.HasLPAE = isSet(hwCap, hwcap_LPAE)
	ARM.HasEVTSTRM = isSet(hwCap, hwcap_EVTSTRM)
	ARM.HasAES = isSet(hwCap2, hwcap2_AES)
	ARM.HasPMULL = isSet(hwCap2, hwcap2_PMULL)
	ARM.HasSHA1 = isSet(hwCap2, hwcap2_SHA1)
	ARM.HasSHA2 = isSet(hwCap2, hwcap2_SHA2)
	ARM.HasCRC32 = isSet(hwCap2, hwcap2_CRC32)
}

func isSet(hwc uint, value uint) bool {
	return hwc&value != 0
}
   07070100000D70000081A4000000000000000000000001645E367C00000D6D000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go    // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package cpu

import (
	"strings"
	"syscall"
)

// HWCAP/HWCAP2 bits. These are exposed by Linux.
const (
	hwcap_FP       = 1 << 0
	hwcap_ASIMD    = 1 << 1
	hwcap_EVTSTRM  = 1 << 2
	hwcap_AES      = 1 << 3
	hwcap_PMULL    = 1 << 4
	hwcap_SHA1     = 1 << 5
	hwcap_SHA2     = 1 << 6
	hwcap_CRC32    = 1 << 7
	hwcap_ATOMICS  = 1 << 8
	hwcap_FPHP     = 1 << 9
	hwcap_ASIMDHP  = 1 << 10
	hwcap_CPUID    = 1 << 11
	hwcap_ASIMDRDM = 1 << 12
	hwcap_JSCVT    = 1 << 13
	hwcap_FCMA     = 1 << 14
	hwcap_LRCPC    = 1 << 15
	hwcap_DCPOP    = 1 << 16
	hwcap_SHA3     = 1 << 17
	hwcap_SM3      = 1 << 18
	hwcap_SM4      = 1 << 19
	hwcap_ASIMDDP  = 1 << 20
	hwcap_SHA512   = 1 << 21
	hwcap_SVE      = 1 << 22
	hwcap_ASIMDFHM = 1 << 23
)

// linuxKernelCanEmulateCPUID reports whether we're running
// on Linux 4.11+. Ideally we'd like to ask the question about
// whether the current kernel contains
// https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=77c97b4ee21290f5f083173d957843b615abbff2
// but the version number will have to do.
func linuxKernelCanEmulateCPUID() bool {
	var un syscall.Utsname
	syscall.Uname(&un)
	var sb strings.Builder
	for _, b := range un.Release[:] {
		if b == 0 {
			break
		}
		sb.WriteByte(byte(b))
	}
	major, minor, _, ok := parseRelease(sb.String())
	return ok && (major > 4 || major == 4 && minor >= 11)
}

func doinit() {
	if err := readHWCAP(); err != nil {
		// We failed to read /proc/self/auxv. This can happen if the binary has
		// been given extra capabilities(7) with /bin/setcap.
		//
		// When this happens, we have two options. If the Linux kernel is new
		// enough (4.11+), we can read the arm64 registers directly which'll
		// trap into the kernel and then return back to userspace.
		//
		// But on older kernels, such as Linux 4.4.180 as used on many Synology
		// devices, calling readARM64Registers (specifically getisar0) will
		// cause a SIGILL and we'll die. So for older kernels, parse /proc/cpuinfo
		// instead.
		//
		// See golang/go#57336.
		if linuxKernelCanEmulateCPUID() {
			readARM64Registers()
		} else {
			readLinuxProcCPUInfo()
		}
		return
	}

	// HWCAP feature bits
	ARM64.HasFP = isSet(hwCap, hwcap_FP)
	ARM64.HasASIMD = isSet(hwCap, hwcap_ASIMD)
	ARM64.HasEVTSTRM = isSet(hwCap, hwcap_EVTSTRM)
	ARM64.HasAES = isSet(hwCap, hwcap_AES)
	ARM64.HasPMULL = isSet(hwCap, hwcap_PMULL)
	ARM64.HasSHA1 = isSet(hwCap, hwcap_SHA1)
	ARM64.HasSHA2 = isSet(hwCap, hwcap_SHA2)
	ARM64.HasCRC32 = isSet(hwCap, hwcap_CRC32)
	ARM64.HasATOMICS = isSet(hwCap, hwcap_ATOMICS)
	ARM64.HasFPHP = isSet(hwCap, hwcap_FPHP)
	ARM64.HasASIMDHP = isSet(hwCap, hwcap_ASIMDHP)
	ARM64.HasCPUID = isSet(hwCap, hwcap_CPUID)
	ARM64.HasASIMDRDM = isSet(hwCap, hwcap_ASIMDRDM)
	ARM64.HasJSCVT = isSet(hwCap, hwcap_JSCVT)
	ARM64.HasFCMA = isSet(hwCap, hwcap_FCMA)
	ARM64.HasLRCPC = isSet(hwCap, hwcap_LRCPC)
	ARM64.HasDCPOP = isSet(hwCap, hwcap_DCPOP)
	ARM64.HasSHA3 = isSet(hwCap, hwcap_SHA3)
	ARM64.HasSM3 = isSet(hwCap, hwcap_SM3)
	ARM64.HasSM4 = isSet(hwCap, hwcap_SM4)
	ARM64.HasASIMDDP = isSet(hwCap, hwcap_ASIMDDP)
	ARM64.HasSHA512 = isSet(hwCap, hwcap_SHA512)
	ARM64.HasSVE = isSet(hwCap, hwcap_SVE)
	ARM64.HasASIMDFHM = isSet(hwCap, hwcap_ASIMDFHM)
}

func isSet(hwc uint, value uint) bool {
	return hwc&value != 0
}
   07070100000D71000081A4000000000000000000000001645E367C0000020A000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_linux_mips64x.go  // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build linux && (mips64 || mips64le)
// +build linux
// +build mips64 mips64le

package cpu

// HWCAP bits. These are exposed by the Linux kernel 5.4.
const (
	// CPU features
	hwcap_MIPS_MSA = 1 << 1
)

func doinit() {
	// HWCAP feature bits
	MIPS64X.HasMSA = isSet(hwCap, hwcap_MIPS_MSA)
}

func isSet(hwc uint, value uint) bool {
	return hwc&value != 0
}
  07070100000D72000081A4000000000000000000000001645E367C0000015F000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_linux_noinit.go   // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build linux && !arm && !arm64 && !mips64 && !mips64le && !ppc64 && !ppc64le && !s390x
// +build linux,!arm,!arm64,!mips64,!mips64le,!ppc64,!ppc64le,!s390x

package cpu

func doinit() {}
 07070100000D73000081A4000000000000000000000001645E367C0000032F000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_linux_ppc64x.go   // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build linux && (ppc64 || ppc64le)
// +build linux
// +build ppc64 ppc64le

package cpu

// HWCAP/HWCAP2 bits. These are exposed by the kernel.
const (
	// ISA Level
	_PPC_FEATURE2_ARCH_2_07 = 0x80000000
	_PPC_FEATURE2_ARCH_3_00 = 0x00800000

	// CPU features
	_PPC_FEATURE2_DARN = 0x00200000
	_PPC_FEATURE2_SCV  = 0x00100000
)

func doinit() {
	// HWCAP2 feature bits
	PPC64.IsPOWER8 = isSet(hwCap2, _PPC_FEATURE2_ARCH_2_07)
	PPC64.IsPOWER9 = isSet(hwCap2, _PPC_FEATURE2_ARCH_3_00)
	PPC64.HasDARN = isSet(hwCap2, _PPC_FEATURE2_DARN)
	PPC64.HasSCV = isSet(hwCap2, _PPC_FEATURE2_SCV)
}

func isSet(hwc uint, value uint) bool {
	return hwc&value != 0
}
 07070100000D74000081A4000000000000000000000001645E367C0000037A000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_linux_s390x.go    // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package cpu

const (
	// bit mask values from /usr/include/bits/hwcap.h
	hwcap_ZARCH  = 2
	hwcap_STFLE  = 4
	hwcap_MSA    = 8
	hwcap_LDISP  = 16
	hwcap_EIMM   = 32
	hwcap_DFP    = 64
	hwcap_ETF3EH = 256
	hwcap_VX     = 2048
	hwcap_VXE    = 8192
)

func initS390Xbase() {
	// test HWCAP bit vector
	has := func(featureMask uint) bool {
		return hwCap&featureMask == featureMask
	}

	// mandatory
	S390X.HasZARCH = has(hwcap_ZARCH)

	// optional
	S390X.HasSTFLE = has(hwcap_STFLE)
	S390X.HasLDISP = has(hwcap_LDISP)
	S390X.HasEIMM = has(hwcap_EIMM)
	S390X.HasETF3EH = has(hwcap_ETF3EH)
	S390X.HasDFP = has(hwcap_DFP)
	S390X.HasMSA = has(hwcap_MSA)
	S390X.HasVX = has(hwcap_VX)
	if S390X.HasVX {
		S390X.HasVXE = has(hwcap_VXE)
	}
}
  07070100000D75000081A4000000000000000000000001645E367C00000104000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_loong64.go    // Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build loong64
// +build loong64

package cpu

const cacheLineSize = 64

func initOptions() {
}
07070100000D76000081A4000000000000000000000001645E367C0000015A000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_mips64x.go    // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build mips64 || mips64le
// +build mips64 mips64le

package cpu

const cacheLineSize = 32

func initOptions() {
	options = []option{
		{Name: "msa", Feature: &MIPS64X.HasMSA},
	}
}
  07070100000D77000081A4000000000000000000000001645E367C0000010E000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_mipsx.go  // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build mips || mipsle
// +build mips mipsle

package cpu

const cacheLineSize = 32

func initOptions() {}
  07070100000D78000081A4000000000000000000000001645E367C00001107000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_netbsd_arm64.go   // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package cpu

import (
	"syscall"
	"unsafe"
)

// Minimal copy of functionality from x/sys/unix so the cpu package can call
// sysctl without depending on x/sys/unix.

const (
	_CTL_QUERY = -2

	_SYSCTL_VERS_1 = 0x1000000
)

var _zero uintptr

func sysctl(mib []int32, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
	var _p0 unsafe.Pointer
	if len(mib) > 0 {
		_p0 = unsafe.Pointer(&mib[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, errno := syscall.Syscall6(
		syscall.SYS___SYSCTL,
		uintptr(_p0),
		uintptr(len(mib)),
		uintptr(unsafe.Pointer(old)),
		uintptr(unsafe.Pointer(oldlen)),
		uintptr(unsafe.Pointer(new)),
		uintptr(newlen))
	if errno != 0 {
		return errno
	}
	return nil
}

type sysctlNode struct {
	Flags          uint32
	Num            int32
	Name           [32]int8
	Ver            uint32
	__rsvd         uint32
	Un             [16]byte
	_sysctl_size   [8]byte
	_sysctl_func   [8]byte
	_sysctl_parent [8]byte
	_sysctl_desc   [8]byte
}

func sysctlNodes(mib []int32) ([]sysctlNode, error) {
	var olen uintptr

	// Get a list of all sysctl nodes below the given MIB by performing
	// a sysctl for the given MIB with CTL_QUERY appended.
	mib = append(mib, _CTL_QUERY)
	qnode := sysctlNode{Flags: _SYSCTL_VERS_1}
	qp := (*byte)(unsafe.Pointer(&qnode))
	sz := unsafe.Sizeof(qnode)
	if err := sysctl(mib, nil, &olen, qp, sz); err != nil {
		return nil, err
	}

	// Now that we know the size, get the actual nodes.
	nodes := make([]sysctlNode, olen/sz)
	np := (*byte)(unsafe.Pointer(&nodes[0]))
	if err := sysctl(mib, np, &olen, qp, sz); err != nil {
		return nil, err
	}

	return nodes, nil
}

func nametomib(name string) ([]int32, error) {
	// Split name into components.
	var parts []string
	last := 0
	for i := 0; i < len(name); i++ {
		if name[i] == '.' {
			parts = append(parts, name[last:i])
			last = i + 1
		}
	}
	parts = append(parts, name[last:])

	mib := []int32{}
	// Discover the nodes and construct the MIB OID.
	for partno, part := range parts {
		nodes, err := sysctlNodes(mib)
		if err != nil {
			return nil, err
		}
		for _, node := range nodes {
			n := make([]byte, 0)
			for i := range node.Name {
				if node.Name[i] != 0 {
					n = append(n, byte(node.Name[i]))
				}
			}
			if string(n) == part {
				mib = append(mib, int32(node.Num))
				break
			}
		}
		if len(mib) != partno+1 {
			return nil, err
		}
	}

	return mib, nil
}

// aarch64SysctlCPUID is struct aarch64_sysctl_cpu_id from NetBSD's <aarch64/armreg.h>
type aarch64SysctlCPUID struct {
	midr      uint64 /* Main ID Register */
	revidr    uint64 /* Revision ID Register */
	mpidr     uint64 /* Multiprocessor Affinity Register */
	aa64dfr0  uint64 /* A64 Debug Feature Register 0 */
	aa64dfr1  uint64 /* A64 Debug Feature Register 1 */
	aa64isar0 uint64 /* A64 Instruction Set Attribute Register 0 */
	aa64isar1 uint64 /* A64 Instruction Set Attribute Register 1 */
	aa64mmfr0 uint64 /* A64 Memory Model Feature Register 0 */
	aa64mmfr1 uint64 /* A64 Memory Model Feature Register 1 */
	aa64mmfr2 uint64 /* A64 Memory Model Feature Register 2 */
	aa64pfr0  uint64 /* A64 Processor Feature Register 0 */
	aa64pfr1  uint64 /* A64 Processor Feature Register 1 */
	aa64zfr0  uint64 /* A64 SVE Feature ID Register 0 */
	mvfr0     uint32 /* Media and VFP Feature Register 0 */
	mvfr1     uint32 /* Media and VFP Feature Register 1 */
	mvfr2     uint32 /* Media and VFP Feature Register 2 */
	pad       uint32
	clidr     uint64 /* Cache Level ID Register */
	ctr       uint64 /* Cache Type Register */
}

func sysctlCPUID(name string) (*aarch64SysctlCPUID, error) {
	mib, err := nametomib(name)
	if err != nil {
		return nil, err
	}

	out := aarch64SysctlCPUID{}
	n := unsafe.Sizeof(out)
	_, _, errno := syscall.Syscall6(
		syscall.SYS___SYSCTL,
		uintptr(unsafe.Pointer(&mib[0])),
		uintptr(len(mib)),
		uintptr(unsafe.Pointer(&out)),
		uintptr(unsafe.Pointer(&n)),
		uintptr(0),
		uintptr(0))
	if errno != 0 {
		return nil, errno
	}
	return &out, nil
}

func doinit() {
	cpuid, err := sysctlCPUID("machdep.cpu0.cpu_id")
	if err != nil {
		setMinimalFeatures()
		return
	}
	parseARM64SystemRegisters(cpuid.aa64isar0, cpuid.aa64isar1, cpuid.aa64pfr0)

	Initialized = true
}
 07070100000D79000081A4000000000000000000000001645E367C000006A6000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.go  // Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package cpu

import (
	"syscall"
	"unsafe"
)

// Minimal copy of functionality from x/sys/unix so the cpu package can call
// sysctl without depending on x/sys/unix.

const (
	// From OpenBSD's sys/sysctl.h.
	_CTL_MACHDEP = 7

	// From OpenBSD's machine/cpu.h.
	_CPU_ID_AA64ISAR0 = 2
	_CPU_ID_AA64ISAR1 = 3
)

// Implemented in the runtime package (runtime/sys_openbsd3.go)
func syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)

//go:linkname syscall_syscall6 syscall.syscall6

func sysctl(mib []uint32, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
	_, _, errno := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(unsafe.Pointer(&mib[0])), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
	if errno != 0 {
		return errno
	}
	return nil
}

var libc_sysctl_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sysctl sysctl "libc.so"

func sysctlUint64(mib []uint32) (uint64, bool) {
	var out uint64
	nout := unsafe.Sizeof(out)
	if err := sysctl(mib, (*byte)(unsafe.Pointer(&out)), &nout, nil, 0); err != nil {
		return 0, false
	}
	return out, true
}

func doinit() {
	setMinimalFeatures()

	// Get ID_AA64ISAR0 and ID_AA64ISAR1 from sysctl.
	isar0, ok := sysctlUint64([]uint32{_CTL_MACHDEP, _CPU_ID_AA64ISAR0})
	if !ok {
		return
	}
	isar1, ok := sysctlUint64([]uint32{_CTL_MACHDEP, _CPU_ID_AA64ISAR1})
	if !ok {
		return
	}
	parseARM64SystemRegisters(isar0, isar1, 0)

	Initialized = true
}
  07070100000D7A000081A4000000000000000000000001645E367C00000178000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.s   // Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

#include "textflag.h"

TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sysctl(SB)

GLOBL	·libc_sysctl_trampoline_addr(SB), RODATA, $8
DATA	·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)
07070100000D7B000081A4000000000000000000000001645E367C000000EF000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_other_arm.go  // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build !linux && arm
// +build !linux,arm

package cpu

func archInit() {}
 07070100000D7C000081A4000000000000000000000001645E367C00000119000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go    // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build !linux && !netbsd && !openbsd && arm64
// +build !linux,!netbsd,!openbsd,arm64

package cpu

func doinit() {}
   07070100000D7D000081A4000000000000000000000001645E367C0000012B000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_other_mips64x.go  // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build !linux && (mips64 || mips64le)
// +build !linux
// +build mips64 mips64le

package cpu

func archInit() {
	Initialized = true
}
 07070100000D7E000081A4000000000000000000000001645E367C00000155000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_other_ppc64x.go   // Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build !aix && !linux && (ppc64 || ppc64le)
// +build !aix
// +build !linux
// +build ppc64 ppc64le

package cpu

func archInit() {
	PPC64.IsPOWER8 = true
	Initialized = true
}
   07070100000D7F000081A4000000000000000000000001645E367C0000010C000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_other_riscv64.go  // Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build !linux && riscv64
// +build !linux,riscv64

package cpu

func archInit() {
	Initialized = true
}
07070100000D80000081A4000000000000000000000001645E367C00000180000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_ppc64x.go // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build ppc64 || ppc64le
// +build ppc64 ppc64le

package cpu

const cacheLineSize = 128

func initOptions() {
	options = []option{
		{Name: "darn", Feature: &PPC64.HasDARN},
		{Name: "scv", Feature: &PPC64.HasSCV},
	}
}
07070100000D81000081A4000000000000000000000001645E367C00000103000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_riscv64.go    // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build riscv64
// +build riscv64

package cpu

const cacheLineSize = 32

func initOptions() {}
 07070100000D82000081A4000000000000000000000001645E367C00001381000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_s390x.go  // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package cpu

const cacheLineSize = 256

func initOptions() {
	options = []option{
		{Name: "zarch", Feature: &S390X.HasZARCH, Required: true},
		{Name: "stfle", Feature: &S390X.HasSTFLE, Required: true},
		{Name: "ldisp", Feature: &S390X.HasLDISP, Required: true},
		{Name: "eimm", Feature: &S390X.HasEIMM, Required: true},
		{Name: "dfp", Feature: &S390X.HasDFP},
		{Name: "etf3eh", Feature: &S390X.HasETF3EH},
		{Name: "msa", Feature: &S390X.HasMSA},
		{Name: "aes", Feature: &S390X.HasAES},
		{Name: "aescbc", Feature: &S390X.HasAESCBC},
		{Name: "aesctr", Feature: &S390X.HasAESCTR},
		{Name: "aesgcm", Feature: &S390X.HasAESGCM},
		{Name: "ghash", Feature: &S390X.HasGHASH},
		{Name: "sha1", Feature: &S390X.HasSHA1},
		{Name: "sha256", Feature: &S390X.HasSHA256},
		{Name: "sha3", Feature: &S390X.HasSHA3},
		{Name: "sha512", Feature: &S390X.HasSHA512},
		{Name: "vx", Feature: &S390X.HasVX},
		{Name: "vxe", Feature: &S390X.HasVXE},
	}
}

// bitIsSet reports whether the bit at index is set. The bit index
// is in big endian order, so bit index 0 is the leftmost bit.
func bitIsSet(bits []uint64, index uint) bool {
	return bits[index/64]&((1<<63)>>(index%64)) != 0
}

// facility is a bit index for the named facility.
type facility uint8

const (
	// mandatory facilities
	zarch  facility = 1  // z architecture mode is active
	stflef facility = 7  // store-facility-list-extended
	ldisp  facility = 18 // long-displacement
	eimm   facility = 21 // extended-immediate

	// miscellaneous facilities
	dfp    facility = 42 // decimal-floating-point
	etf3eh facility = 30 // extended-translation 3 enhancement

	// cryptography facilities
	msa  facility = 17  // message-security-assist
	msa3 facility = 76  // message-security-assist extension 3
	msa4 facility = 77  // message-security-assist extension 4
	msa5 facility = 57  // message-security-assist extension 5
	msa8 facility = 146 // message-security-assist extension 8
	msa9 facility = 155 // message-security-assist extension 9

	// vector facilities
	vx   facility = 129 // vector facility
	vxe  facility = 135 // vector-enhancements 1
	vxe2 facility = 148 // vector-enhancements 2
)

// facilityList contains the result of an STFLE call.
// Bits are numbered in big endian order so the
// leftmost bit (the MSB) is at index 0.
type facilityList struct {
	bits [4]uint64
}

// Has reports whether the given facilities are present.
func (s *facilityList) Has(fs ...facility) bool {
	if len(fs) == 0 {
		panic("no facility bits provided")
	}
	for _, f := range fs {
		if !bitIsSet(s.bits[:], uint(f)) {
			return false
		}
	}
	return true
}

// function is the code for the named cryptographic function.
type function uint8

const (
	// KM{,A,C,CTR} function codes
	aes128 function = 18 // AES-128
	aes192 function = 19 // AES-192
	aes256 function = 20 // AES-256

	// K{I,L}MD function codes
	sha1     function = 1  // SHA-1
	sha256   function = 2  // SHA-256
	sha512   function = 3  // SHA-512
	sha3_224 function = 32 // SHA3-224
	sha3_256 function = 33 // SHA3-256
	sha3_384 function = 34 // SHA3-384
	sha3_512 function = 35 // SHA3-512
	shake128 function = 36 // SHAKE-128
	shake256 function = 37 // SHAKE-256

	// KLMD function codes
	ghash function = 65 // GHASH
)

// queryResult contains the result of a Query function
// call. Bits are numbered in big endian order so the
// leftmost bit (the MSB) is at index 0.
type queryResult struct {
	bits [2]uint64
}

// Has reports whether the given functions are present.
func (q *queryResult) Has(fns ...function) bool {
	if len(fns) == 0 {
		panic("no function codes provided")
	}
	for _, f := range fns {
		if !bitIsSet(q.bits[:], uint(f)) {
			return false
		}
	}
	return true
}

func doinit() {
	initS390Xbase()

	// We need implementations of stfle, km and so on
	// to detect cryptographic features.
	if !haveAsmFunctions() {
		return
	}

	// optional cryptographic functions
	if S390X.HasMSA {
		aes := []function{aes128, aes192, aes256}

		// cipher message
		km, kmc := kmQuery(), kmcQuery()
		S390X.HasAES = km.Has(aes...)
		S390X.HasAESCBC = kmc.Has(aes...)
		if S390X.HasSTFLE {
			facilities := stfle()
			if facilities.Has(msa4) {
				kmctr := kmctrQuery()
				S390X.HasAESCTR = kmctr.Has(aes...)
			}
			if facilities.Has(msa8) {
				kma := kmaQuery()
				S390X.HasAESGCM = kma.Has(aes...)
			}
		}

		// compute message digest
		kimd := kimdQuery() // intermediate (no padding)
		klmd := klmdQuery() // last (padding)
		S390X.HasSHA1 = kimd.Has(sha1) && klmd.Has(sha1)
		S390X.HasSHA256 = kimd.Has(sha256) && klmd.Has(sha256)
		S390X.HasSHA512 = kimd.Has(sha512) && klmd.Has(sha512)
		S390X.HasGHASH = kimd.Has(ghash) // KLMD-GHASH does not exist
		sha3 := []function{
			sha3_224, sha3_256, sha3_384, sha3_512,
			shake128, shake256,
		}
		S390X.HasSHA3 = kimd.Has(sha3...) && klmd.Has(sha3...)
	}
}
   07070100000D83000081A4000000000000000000000001645E367C000007E4000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_s390x.s   // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build gc
// +build gc

#include "textflag.h"

// func stfle() facilityList
TEXT ·stfle(SB), NOSPLIT|NOFRAME, $0-32
	MOVD $ret+0(FP), R1
	MOVD $3, R0          // last doubleword index to store
	XC   $32, (R1), (R1) // clear 4 doublewords (32 bytes)
	WORD $0xb2b01000     // store facility list extended (STFLE)
	RET

// func kmQuery() queryResult
TEXT ·kmQuery(SB), NOSPLIT|NOFRAME, $0-16
	MOVD $0, R0         // set function code to 0 (KM-Query)
	MOVD $ret+0(FP), R1 // address of 16-byte return value
	WORD $0xB92E0024    // cipher message (KM)
	RET

// func kmcQuery() queryResult
TEXT ·kmcQuery(SB), NOSPLIT|NOFRAME, $0-16
	MOVD $0, R0         // set function code to 0 (KMC-Query)
	MOVD $ret+0(FP), R1 // address of 16-byte return value
	WORD $0xB92F0024    // cipher message with chaining (KMC)
	RET

// func kmctrQuery() queryResult
TEXT ·kmctrQuery(SB), NOSPLIT|NOFRAME, $0-16
	MOVD $0, R0         // set function code to 0 (KMCTR-Query)
	MOVD $ret+0(FP), R1 // address of 16-byte return value
	WORD $0xB92D4024    // cipher message with counter (KMCTR)
	RET

// func kmaQuery() queryResult
TEXT ·kmaQuery(SB), NOSPLIT|NOFRAME, $0-16
	MOVD $0, R0         // set function code to 0 (KMA-Query)
	MOVD $ret+0(FP), R1 // address of 16-byte return value
	WORD $0xb9296024    // cipher message with authentication (KMA)
	RET

// func kimdQuery() queryResult
TEXT ·kimdQuery(SB), NOSPLIT|NOFRAME, $0-16
	MOVD $0, R0         // set function code to 0 (KIMD-Query)
	MOVD $ret+0(FP), R1 // address of 16-byte return value
	WORD $0xB93E0024    // compute intermediate message digest (KIMD)
	RET

// func klmdQuery() queryResult
TEXT ·klmdQuery(SB), NOSPLIT|NOFRAME, $0-16
	MOVD $0, R0         // set function code to 0 (KLMD-Query)
	MOVD $ret+0(FP), R1 // address of 16-byte return value
	WORD $0xB93F0024    // compute last message digest (KLMD)
	RET
07070100000D84000081A4000000000000000000000001645E367C000001C6000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_wasm.go   // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build wasm
// +build wasm

package cpu

// We're compiling the cpu package for an unknown (software-abstracted) CPU.
// Make CacheLinePad an empty struct and hope that the usual struct alignment
// rules are good enough.

const cacheLineSize = 0

func initOptions() {}

func archInit() {}
  07070100000D85000081A4000000000000000000000001645E367C00001292000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_x86.go    // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build 386 || amd64 || amd64p32
// +build 386 amd64 amd64p32

package cpu

import "runtime"

const cacheLineSize = 64

func initOptions() {
	options = []option{
		{Name: "adx", Feature: &X86.HasADX},
		{Name: "aes", Feature: &X86.HasAES},
		{Name: "avx", Feature: &X86.HasAVX},
		{Name: "avx2", Feature: &X86.HasAVX2},
		{Name: "avx512", Feature: &X86.HasAVX512},
		{Name: "avx512f", Feature: &X86.HasAVX512F},
		{Name: "avx512cd", Feature: &X86.HasAVX512CD},
		{Name: "avx512er", Feature: &X86.HasAVX512ER},
		{Name: "avx512pf", Feature: &X86.HasAVX512PF},
		{Name: "avx512vl", Feature: &X86.HasAVX512VL},
		{Name: "avx512bw", Feature: &X86.HasAVX512BW},
		{Name: "avx512dq", Feature: &X86.HasAVX512DQ},
		{Name: "avx512ifma", Feature: &X86.HasAVX512IFMA},
		{Name: "avx512vbmi", Feature: &X86.HasAVX512VBMI},
		{Name: "avx512vnniw", Feature: &X86.HasAVX5124VNNIW},
		{Name: "avx5124fmaps", Feature: &X86.HasAVX5124FMAPS},
		{Name: "avx512vpopcntdq", Feature: &X86.HasAVX512VPOPCNTDQ},
		{Name: "avx512vpclmulqdq", Feature: &X86.HasAVX512VPCLMULQDQ},
		{Name: "avx512vnni", Feature: &X86.HasAVX512VNNI},
		{Name: "avx512gfni", Feature: &X86.HasAVX512GFNI},
		{Name: "avx512vaes", Feature: &X86.HasAVX512VAES},
		{Name: "avx512vbmi2", Feature: &X86.HasAVX512VBMI2},
		{Name: "avx512bitalg", Feature: &X86.HasAVX512BITALG},
		{Name: "avx512bf16", Feature: &X86.HasAVX512BF16},
		{Name: "bmi1", Feature: &X86.HasBMI1},
		{Name: "bmi2", Feature: &X86.HasBMI2},
		{Name: "cx16", Feature: &X86.HasCX16},
		{Name: "erms", Feature: &X86.HasERMS},
		{Name: "fma", Feature: &X86.HasFMA},
		{Name: "osxsave", Feature: &X86.HasOSXSAVE},
		{Name: "pclmulqdq", Feature: &X86.HasPCLMULQDQ},
		{Name: "popcnt", Feature: &X86.HasPOPCNT},
		{Name: "rdrand", Feature: &X86.HasRDRAND},
		{Name: "rdseed", Feature: &X86.HasRDSEED},
		{Name: "sse3", Feature: &X86.HasSSE3},
		{Name: "sse41", Feature: &X86.HasSSE41},
		{Name: "sse42", Feature: &X86.HasSSE42},
		{Name: "ssse3", Feature: &X86.HasSSSE3},

		// These capabilities should always be enabled on amd64:
		{Name: "sse2", Feature: &X86.HasSSE2, Required: runtime.GOARCH == "amd64"},
	}
}

func archInit() {

	Initialized = true

	maxID, _, _, _ := cpuid(0, 0)

	if maxID < 1 {
		return
	}

	_, _, ecx1, edx1 := cpuid(1, 0)
	X86.HasSSE2 = isSet(26, edx1)

	X86.HasSSE3 = isSet(0, ecx1)
	X86.HasPCLMULQDQ = isSet(1, ecx1)
	X86.HasSSSE3 = isSet(9, ecx1)
	X86.HasFMA = isSet(12, ecx1)
	X86.HasCX16 = isSet(13, ecx1)
	X86.HasSSE41 = isSet(19, ecx1)
	X86.HasSSE42 = isSet(20, ecx1)
	X86.HasPOPCNT = isSet(23, ecx1)
	X86.HasAES = isSet(25, ecx1)
	X86.HasOSXSAVE = isSet(27, ecx1)
	X86.HasRDRAND = isSet(30, ecx1)

	var osSupportsAVX, osSupportsAVX512 bool
	// For XGETBV, OSXSAVE bit is required and sufficient.
	if X86.HasOSXSAVE {
		eax, _ := xgetbv()
		// Check if XMM and YMM registers have OS support.
		osSupportsAVX = isSet(1, eax) && isSet(2, eax)

		if runtime.GOOS == "darwin" {
			// Darwin doesn't save/restore AVX-512 mask registers correctly across signal handlers.
			// Since users can't rely on mask register contents, let's not advertise AVX-512 support.
			// See issue 49233.
			osSupportsAVX512 = false
		} else {
			// Check if OPMASK and ZMM registers have OS support.
			osSupportsAVX512 = osSupportsAVX && isSet(5, eax) && isSet(6, eax) && isSet(7, eax)
		}
	}

	X86.HasAVX = isSet(28, ecx1) && osSupportsAVX

	if maxID < 7 {
		return
	}

	_, ebx7, ecx7, edx7 := cpuid(7, 0)
	X86.HasBMI1 = isSet(3, ebx7)
	X86.HasAVX2 = isSet(5, ebx7) && osSupportsAVX
	X86.HasBMI2 = isSet(8, ebx7)
	X86.HasERMS = isSet(9, ebx7)
	X86.HasRDSEED = isSet(18, ebx7)
	X86.HasADX = isSet(19, ebx7)

	X86.HasAVX512 = isSet(16, ebx7) && osSupportsAVX512 // Because avx-512 foundation is the core required extension
	if X86.HasAVX512 {
		X86.HasAVX512F = true
		X86.HasAVX512CD = isSet(28, ebx7)
		X86.HasAVX512ER = isSet(27, ebx7)
		X86.HasAVX512PF = isSet(26, ebx7)
		X86.HasAVX512VL = isSet(31, ebx7)
		X86.HasAVX512BW = isSet(30, ebx7)
		X86.HasAVX512DQ = isSet(17, ebx7)
		X86.HasAVX512IFMA = isSet(21, ebx7)
		X86.HasAVX512VBMI = isSet(1, ecx7)
		X86.HasAVX5124VNNIW = isSet(2, edx7)
		X86.HasAVX5124FMAPS = isSet(3, edx7)
		X86.HasAVX512VPOPCNTDQ = isSet(14, ecx7)
		X86.HasAVX512VPCLMULQDQ = isSet(10, ecx7)
		X86.HasAVX512VNNI = isSet(11, ecx7)
		X86.HasAVX512GFNI = isSet(8, ecx7)
		X86.HasAVX512VAES = isSet(9, ecx7)
		X86.HasAVX512VBMI2 = isSet(6, ecx7)
		X86.HasAVX512BITALG = isSet(12, ecx7)

		eax71, _, _, _ := cpuid(7, 1)
		X86.HasAVX512BF16 = isSet(5, eax71)
	}
}

func isSet(bitpos uint, value uint32) bool {
	return value&(1<<bitpos) != 0
}
  07070100000D86000081A4000000000000000000000001645E367C00000282000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_x86.s // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build (386 || amd64 || amd64p32) && gc
// +build 386 amd64 amd64p32
// +build gc

#include "textflag.h"

// func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32)
TEXT ·cpuid(SB), NOSPLIT, $0-24
	MOVL eaxArg+0(FP), AX
	MOVL ecxArg+4(FP), CX
	CPUID
	MOVL AX, eax+8(FP)
	MOVL BX, ebx+12(FP)
	MOVL CX, ecx+16(FP)
	MOVL DX, edx+20(FP)
	RET

// func xgetbv() (eax, edx uint32)
TEXT ·xgetbv(SB),NOSPLIT,$0-8
	MOVL $0, CX
	XGETBV
	MOVL AX, eax+0(FP)
	MOVL DX, edx+4(FP)
	RET
  07070100000D87000081A4000000000000000000000001645E367C000000DF000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_zos.go    // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package cpu

func archInit() {
	doinit()
	Initialized = true
}
 07070100000D88000081A4000000000000000000000001645E367C00000283000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/cpu_zos_s390x.go  // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package cpu

func initS390Xbase() {
	// get the facilities list
	facilities := stfle()

	// mandatory
	S390X.HasZARCH = facilities.Has(zarch)
	S390X.HasSTFLE = facilities.Has(stflef)
	S390X.HasLDISP = facilities.Has(ldisp)
	S390X.HasEIMM = facilities.Has(eimm)

	// optional
	S390X.HasETF3EH = facilities.Has(etf3eh)
	S390X.HasDFP = facilities.Has(dfp)
	S390X.HasMSA = facilities.Has(msa)
	S390X.HasVX = facilities.Has(vx)
	if S390X.HasVX {
		S390X.HasVXE = facilities.Has(vxe)
	}
}
 07070100000D89000081A4000000000000000000000001645E367C000001E8000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/endian_big.go // Copyright 2023 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build armbe || arm64be || m68k || mips || mips64 || mips64p32 || ppc || ppc64 || s390 || s390x || shbe || sparc || sparc64
// +build armbe arm64be m68k mips mips64 mips64p32 ppc ppc64 s390 s390x shbe sparc sparc64

package cpu

// IsBigEndian records whether the GOARCH's byte order is big endian.
const IsBigEndian = true
07070100000D8A000081A4000000000000000000000001645E367C00000219000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/endian_little.go  // Copyright 2023 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build 386 || amd64 || amd64p32 || alpha || arm || arm64 || loong64 || mipsle || mips64le || mips64p32le || nios2 || ppc64le || riscv || riscv64 || sh
// +build 386 amd64 amd64p32 alpha arm arm64 loong64 mipsle mips64le mips64p32le nios2 ppc64le riscv riscv64 sh

package cpu

// IsBigEndian records whether the GOARCH's byte order is big endian.
const IsBigEndian = false
   07070100000D8B000081A4000000000000000000000001645E367C000005F1000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/hwcap_linux.go    // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package cpu

import (
	"io/ioutil"
)

const (
	_AT_HWCAP  = 16
	_AT_HWCAP2 = 26

	procAuxv = "/proc/self/auxv"

	uintSize = int(32 << (^uint(0) >> 63))
)

// For those platforms don't have a 'cpuid' equivalent we use HWCAP/HWCAP2
// These are initialized in cpu_$GOARCH.go
// and should not be changed after they are initialized.
var hwCap uint
var hwCap2 uint

func readHWCAP() error {
	// For Go 1.21+, get auxv from the Go runtime.
	if a := getAuxv(); len(a) > 0 {
		for len(a) >= 2 {
			tag, val := a[0], uint(a[1])
			a = a[2:]
			switch tag {
			case _AT_HWCAP:
				hwCap = val
			case _AT_HWCAP2:
				hwCap2 = val
			}
		}
		return nil
	}

	buf, err := ioutil.ReadFile(procAuxv)
	if err != nil {
		// e.g. on android /proc/self/auxv is not accessible, so silently
		// ignore the error and leave Initialized = false. On some
		// architectures (e.g. arm64) doinit() implements a fallback
		// readout and will set Initialized = true again.
		return err
	}
	bo := hostByteOrder()
	for len(buf) >= 2*(uintSize/8) {
		var tag, val uint
		switch uintSize {
		case 32:
			tag = uint(bo.Uint32(buf[0:]))
			val = uint(bo.Uint32(buf[4:]))
			buf = buf[8:]
		case 64:
			tag = uint(bo.Uint64(buf[0:]))
			val = uint(bo.Uint64(buf[8:]))
			buf = buf[16:]
		}
		switch tag {
		case _AT_HWCAP:
			hwCap = val
		case _AT_HWCAP2:
			hwCap2 = val
		}
	}
	return nil
}
   07070100000D8C000081A4000000000000000000000001645E367C00000405000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/parse.go  // Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package cpu

import "strconv"

// parseRelease parses a dot-separated version number. It follows the semver
// syntax, but allows the minor and patch versions to be elided.
//
// This is a copy of the Go runtime's parseRelease from
// https://golang.org/cl/209597.
func parseRelease(rel string) (major, minor, patch int, ok bool) {
	// Strip anything after a dash or plus.
	for i := 0; i < len(rel); i++ {
		if rel[i] == '-' || rel[i] == '+' {
			rel = rel[:i]
			break
		}
	}

	next := func() (int, bool) {
		for i := 0; i < len(rel); i++ {
			if rel[i] == '.' {
				ver, err := strconv.Atoi(rel[:i])
				rel = rel[i+1:]
				return ver, err == nil
			}
		}
		ver, err := strconv.Atoi(rel)
		rel = ""
		return ver, err == nil
	}
	if major, ok = next(); !ok || rel == "" {
		return
	}
	if minor, ok = next(); !ok || rel == "" {
		return
	}
	patch, ok = next()
	return
}
   07070100000D8D000081A4000000000000000000000001645E367C0000046F000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/proc_cpuinfo_linux.go // Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build linux && arm64
// +build linux,arm64

package cpu

import (
	"errors"
	"io"
	"os"
	"strings"
)

func readLinuxProcCPUInfo() error {
	f, err := os.Open("/proc/cpuinfo")
	if err != nil {
		return err
	}
	defer f.Close()

	var buf [1 << 10]byte // enough for first CPU
	n, err := io.ReadFull(f, buf[:])
	if err != nil && err != io.ErrUnexpectedEOF {
		return err
	}
	in := string(buf[:n])
	const features = "\nFeatures	: "
	i := strings.Index(in, features)
	if i == -1 {
		return errors.New("no CPU features found")
	}
	in = in[i+len(features):]
	if i := strings.Index(in, "\n"); i != -1 {
		in = in[:i]
	}
	m := map[string]*bool{}

	initOptions() // need it early here; it's harmless to call twice
	for _, o := range options {
		m[o.Name] = o.Feature
	}
	// The EVTSTRM field has alias "evstrm" in Go, but Linux calls it "evtstrm".
	m["evtstrm"] = &ARM64.HasEVTSTRM

	for _, f := range strings.Fields(in) {
		if p, ok := m[f]; ok {
			*p = true
		}
	}
	return nil
}
 07070100000D8E000081A4000000000000000000000001645E367C00000189000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/runtime_auxv.go   // Copyright 2023 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package cpu

// getAuxvFn is non-nil on Go 1.21+ (via runtime_auxv_go121.go init)
// on platforms that use auxv.
var getAuxvFn func() []uintptr

func getAuxv() []uintptr {
	if getAuxvFn == nil {
		return nil
	}
	return getAuxvFn()
}
   07070100000D8F000081A4000000000000000000000001645E367C00000176000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/runtime_auxv_go121.go // Copyright 2023 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build go1.21
// +build go1.21

package cpu

import (
	_ "unsafe" // for linkname
)

//go:linkname runtime_getAuxv runtime.getAuxv
func runtime_getAuxv() []uintptr

func init() {
	getAuxvFn = runtime_getAuxv
}
  07070100000D90000081A4000000000000000000000001645E367C000002EA000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/syscall_aix_gccgo.go  // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Recreate a getsystemcfg syscall handler instead of
// using the one provided by x/sys/unix to avoid having
// the dependency between them. (See golang.org/issue/32102)
// Moreover, this file will be used during the building of
// gccgo's libgo and thus must not used a CGo method.

//go:build aix && gccgo
// +build aix,gccgo

package cpu

import (
	"syscall"
)

//extern getsystemcfg
func gccgoGetsystemcfg(label uint32) (r uint64)

func callgetsystemcfg(label int) (r1 uintptr, e1 syscall.Errno) {
	r1 = uintptr(gccgoGetsystemcfg(uint32(label)))
	e1 = syscall.GetErrno()
	return
}
  07070100000D91000081A4000000000000000000000001645E367C000003F3000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/cpu/syscall_aix_ppc64_gc.go   // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Minimal copy of x/sys/unix so the cpu package can make a
// system call on AIX without depending on x/sys/unix.
// (See golang.org/issue/32102)

//go:build aix && ppc64 && gc
// +build aix,ppc64,gc

package cpu

import (
	"syscall"
	"unsafe"
)

//go:cgo_import_dynamic libc_getsystemcfg getsystemcfg "libc.a/shr_64.o"

//go:linkname libc_getsystemcfg libc_getsystemcfg

type syscallFunc uintptr

var libc_getsystemcfg syscallFunc

type errno = syscall.Errno

// Implemented in runtime/syscall_aix.go.
func rawSyscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err errno)
func syscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err errno)

func callgetsystemcfg(label int) (r1 uintptr, e1 errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getsystemcfg)), 1, uintptr(label), 0, 0, 0, 0, 0)
	return
}
 07070100000D92000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/golang.org/x/sys/execabs   07070100000D93000081A4000000000000000000000001645E367C00000E59000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/execabs/execabs.go    // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package execabs is a drop-in replacement for os/exec
// that requires PATH lookups to find absolute paths.
// That is, execabs.Command("cmd") runs the same PATH lookup
// as exec.Command("cmd"), but if the result is a path
// which is relative, the Run and Start methods will report
// an error instead of running the executable.
//
// See https://blog.golang.org/path-security for more information
// about when it may be necessary or appropriate to use this package.
package execabs

import (
	"context"
	"fmt"
	"os/exec"
	"path/filepath"
	"reflect"
	"unsafe"
)

// ErrNotFound is the error resulting if a path search failed to find an executable file.
// It is an alias for exec.ErrNotFound.
var ErrNotFound = exec.ErrNotFound

// Cmd represents an external command being prepared or run.
// It is an alias for exec.Cmd.
type Cmd = exec.Cmd

// Error is returned by LookPath when it fails to classify a file as an executable.
// It is an alias for exec.Error.
type Error = exec.Error

// An ExitError reports an unsuccessful exit by a command.
// It is an alias for exec.ExitError.
type ExitError = exec.ExitError

func relError(file, path string) error {
	return fmt.Errorf("%s resolves to executable in current directory (.%c%s)", file, filepath.Separator, path)
}

// LookPath searches for an executable named file in the directories
// named by the PATH environment variable. If file contains a slash,
// it is tried directly and the PATH is not consulted. The result will be
// an absolute path.
//
// LookPath differs from exec.LookPath in its handling of PATH lookups,
// which are used for file names without slashes. If exec.LookPath's
// PATH lookup would have returned an executable from the current directory,
// LookPath instead returns an error.
func LookPath(file string) (string, error) {
	path, err := exec.LookPath(file)
	if err != nil && !isGo119ErrDot(err) {
		return "", err
	}
	if filepath.Base(file) == file && !filepath.IsAbs(path) {
		return "", relError(file, path)
	}
	return path, nil
}

func fixCmd(name string, cmd *exec.Cmd) {
	if filepath.Base(name) == name && !filepath.IsAbs(cmd.Path) && !isGo119ErrFieldSet(cmd) {
		// exec.Command was called with a bare binary name and
		// exec.LookPath returned a path which is not absolute.
		// Set cmd.lookPathErr and clear cmd.Path so that it
		// cannot be run.
		lookPathErr := (*error)(unsafe.Pointer(reflect.ValueOf(cmd).Elem().FieldByName("lookPathErr").Addr().Pointer()))
		if *lookPathErr == nil {
			*lookPathErr = relError(name, cmd.Path)
		}
		cmd.Path = ""
	}
}

// CommandContext is like Command but includes a context.
//
// The provided context is used to kill the process (by calling os.Process.Kill)
// if the context becomes done before the command completes on its own.
func CommandContext(ctx context.Context, name string, arg ...string) *exec.Cmd {
	cmd := exec.CommandContext(ctx, name, arg...)
	fixCmd(name, cmd)
	return cmd

}

// Command returns the Cmd struct to execute the named program with the given arguments.
// See exec.Command for most details.
//
// Command differs from exec.Command in its handling of PATH lookups,
// which are used when the program name contains no slashes.
// If exec.Command would have returned an exec.Cmd configured to run an
// executable from the current directory, Command instead
// returns an exec.Cmd that will return an error from Start or Run.
func Command(name string, arg ...string) *exec.Cmd {
	cmd := exec.Command(name, arg...)
	fixCmd(name, cmd)
	return cmd
}
   07070100000D94000081A4000000000000000000000001645E367C0000015D000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/golang.org/x/sys/execabs/execabs_go118.go  // Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build !go1.19
// +build !go1.19

package execabs

import "os/exec"

func isGo119ErrDot(err error) bool {
	return false
}

func isGo119ErrFieldSet(cmd *exec.Cmd) bool {
	return false
}
   07070100000D95000081A4000000000000000000000001645E367C00000189000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/golang.org/x/sys/execabs/execabs_go119.go  // Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build go1.19
// +build go1.19

package execabs

import (
	"errors"
	"os/exec"
)

func isGo119ErrDot(err error) bool {
	return errors.Is(err, exec.ErrDot)
}

func isGo119ErrFieldSet(cmd *exec.Cmd) bool {
	return cmd.Err != nil
}
   07070100000D96000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/golang.org/x/sys/internal  07070100000D97000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/golang.org/x/sys/internal/unsafeheader 07070100000D98000081A4000000000000000000000001645E367C00000391000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/golang.org/x/sys/internal/unsafeheader/unsafeheader.go // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package unsafeheader contains header declarations for the Go runtime's
// slice and string implementations.
//
// This package allows x/sys to use types equivalent to
// reflect.SliceHeader and reflect.StringHeader without introducing
// a dependency on the (relatively heavy) "reflect" package.
package unsafeheader

import (
	"unsafe"
)

// Slice is the runtime representation of a slice.
// It cannot be used safely or portably and its representation may change in a later release.
type Slice struct {
	Data unsafe.Pointer
	Len  int
	Cap  int
}

// String is the runtime representation of a string.
// It cannot be used safely or portably and its representation may change in a later release.
type String struct {
	Data unsafe.Pointer
	Len  int
}
   07070100000D99000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003100000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix  07070100000D9A000081A4000000000000000000000001645E367C00000010000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/.gitignore   _obj/
unix.test
07070100000D9B000081A4000000000000000000000001645E367C000021ED000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/README.md    # Building `sys/unix`

The sys/unix package provides access to the raw system call interface of the
underlying operating system. See: https://godoc.org/golang.org/x/sys/unix

Porting Go to a new architecture/OS combination or adding syscalls, types, or
constants to an existing architecture/OS pair requires some manual effort;
however, there are tools that automate much of the process.

## Build Systems

There are currently two ways we generate the necessary files. We are currently
migrating the build system to use containers so the builds are reproducible.
This is being done on an OS-by-OS basis. Please update this documentation as
components of the build system change.

### Old Build System (currently for `GOOS != "linux"`)

The old build system generates the Go files based on the C header files
present on your system. This means that files
for a given GOOS/GOARCH pair must be generated on a system with that OS and
architecture. This also means that the generated code can differ from system
to system, based on differences in the header files.

To avoid this, if you are using the old build system, only generate the Go
files on an installation with unmodified header files. It is also important to
keep track of which version of the OS the files were generated from (ex.
Darwin 14 vs Darwin 15). This makes it easier to track the progress of changes
and have each OS upgrade correspond to a single change.

To build the files for your current OS and architecture, make sure GOOS and
GOARCH are set correctly and run `mkall.sh`. This will generate the files for
your specific system. Running `mkall.sh -n` shows the commands that will be run.

Requirements: bash, go

### New Build System (currently for `GOOS == "linux"`)

The new build system uses a Docker container to generate the go files directly
from source checkouts of the kernel and various system libraries. This means
that on any platform that supports Docker, all the files using the new build
system can be generated at once, and generated files will not change based on
what the person running the scripts has installed on their computer.

The OS specific files for the new build system are located in the `${GOOS}`
directory, and the build is coordinated by the `${GOOS}/mkall.go` program. When
the kernel or system library updates, modify the Dockerfile at
`${GOOS}/Dockerfile` to checkout the new release of the source.

To build all the files under the new build system, you must be on an amd64/Linux
system and have your GOOS and GOARCH set accordingly. Running `mkall.sh` will
then generate all of the files for all of the GOOS/GOARCH pairs in the new build
system. Running `mkall.sh -n` shows the commands that will be run.

Requirements: bash, go, docker

## Component files

This section describes the various files used in the code generation process.
It also contains instructions on how to modify these files to add a new
architecture/OS or to add additional syscalls, types, or constants. Note that
if you are using the new build system, the scripts/programs cannot be called normally.
They must be called from within the docker container.

### asm files

The hand-written assembly file at `asm_${GOOS}_${GOARCH}.s` implements system
call dispatch. There are three entry points:
```
  func Syscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr)
  func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)
  func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr)
```
The first and second are the standard ones; they differ only in how many
arguments can be passed to the kernel. The third is for low-level use by the
ForkExec wrapper. Unlike the first two, it does not call into the scheduler to
let it know that a system call is running.

When porting Go to a new architecture/OS, this file must be implemented for
each GOOS/GOARCH pair.

### mksysnum

Mksysnum is a Go program located at `${GOOS}/mksysnum.go` (or `mksysnum_${GOOS}.go`
for the old system). This program takes in a list of header files containing the
syscall number declarations and parses them to produce the corresponding list of
Go numeric constants. See `zsysnum_${GOOS}_${GOARCH}.go` for the generated
constants.

Adding new syscall numbers is mostly done by running the build on a sufficiently
new installation of the target OS (or updating the source checkouts for the
new build system). However, depending on the OS, you may need to update the
parsing in mksysnum.

### mksyscall.go

The `syscall.go`, `syscall_${GOOS}.go`, `syscall_${GOOS}_${GOARCH}.go` are
hand-written Go files which implement system calls (for unix, the specific OS,
or the specific OS/Architecture pair respectively) that need special handling
and list `//sys` comments giving prototypes for ones that can be generated.

The mksyscall.go program takes the `//sys` and `//sysnb` comments and converts
them into syscalls. This requires the name of the prototype in the comment to
match a syscall number in the `zsysnum_${GOOS}_${GOARCH}.go` file. The function
prototype can be exported (capitalized) or not.

Adding a new syscall often just requires adding a new `//sys` function prototype
with the desired arguments and a capitalized name so it is exported. However, if
you want the interface to the syscall to be different, often one will make an
unexported `//sys` prototype, and then write a custom wrapper in
`syscall_${GOOS}.go`.

### types files

For each OS, there is a hand-written Go file at `${GOOS}/types.go` (or
`types_${GOOS}.go` on the old system). This file includes standard C headers and
creates Go type aliases to the corresponding C types. The file is then fed
through godef to get the Go compatible definitions. Finally, the generated code
is fed though mkpost.go to format the code correctly and remove any hidden or
private identifiers. This cleaned-up code is written to
`ztypes_${GOOS}_${GOARCH}.go`.

The hardest part about preparing this file is figuring out which headers to
include and which symbols need to be `#define`d to get the actual data
structures that pass through to the kernel system calls. Some C libraries
preset alternate versions for binary compatibility and translate them on the
way in and out of system calls, but there is almost always a `#define` that can
get the real ones.
See `types_darwin.go` and `linux/types.go` for examples.

To add a new type, add in the necessary include statement at the top of the
file (if it is not already there) and add in a type alias line. Note that if
your type is significantly different on different architectures, you may need
some `#if/#elif` macros in your include statements.

### mkerrors.sh

This script is used to generate the system's various constants. This doesn't
just include the error numbers and error strings, but also the signal numbers
and a wide variety of miscellaneous constants. The constants come from the list
of include files in the `includes_${uname}` variable. A regex then picks out
the desired `#define` statements, and generates the corresponding Go constants.
The error numbers and strings are generated from `#include <errno.h>`, and the
signal numbers and strings are generated from `#include <signal.h>`. All of
these constants are written to `zerrors_${GOOS}_${GOARCH}.go` via a C program,
`_errors.c`, which prints out all the constants.

To add a constant, add the header that includes it to the appropriate variable.
Then, edit the regex (if necessary) to match the desired constant. Avoid making
the regex too broad to avoid matching unintended constants.

### internal/mkmerge

This program is used to extract duplicate const, func, and type declarations
from the generated architecture-specific files listed below, and merge these
into a common file for each OS.

The merge is performed in the following steps:
1. Construct the set of common code that is idential in all architecture-specific files.
2. Write this common code to the merged file.
3. Remove the common code from all architecture-specific files.


## Generated files

### `zerrors_${GOOS}_${GOARCH}.go`

A file containing all of the system's generated error numbers, error strings,
signal numbers, and constants. Generated by `mkerrors.sh` (see above).

### `zsyscall_${GOOS}_${GOARCH}.go`

A file containing all the generated syscalls for a specific GOOS and GOARCH.
Generated by `mksyscall.go` (see above).

### `zsysnum_${GOOS}_${GOARCH}.go`

A list of numeric constants for all the syscall number of the specific GOOS
and GOARCH. Generated by mksysnum (see above).

### `ztypes_${GOOS}_${GOARCH}.go`

A file containing Go types for passing into (or returning from) syscalls.
Generated by godefs and the types file (see above).
   07070100000D9C000081A4000000000000000000000001645E367C00000787000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/affinity_linux.go    // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// CPU affinity functions

package unix

import (
	"math/bits"
	"unsafe"
)

const cpuSetSize = _CPU_SETSIZE / _NCPUBITS

// CPUSet represents a CPU affinity mask.
type CPUSet [cpuSetSize]cpuMask

func schedAffinity(trap uintptr, pid int, set *CPUSet) error {
	_, _, e := RawSyscall(trap, uintptr(pid), uintptr(unsafe.Sizeof(*set)), uintptr(unsafe.Pointer(set)))
	if e != 0 {
		return errnoErr(e)
	}
	return nil
}

// SchedGetaffinity gets the CPU affinity mask of the thread specified by pid.
// If pid is 0 the calling thread is used.
func SchedGetaffinity(pid int, set *CPUSet) error {
	return schedAffinity(SYS_SCHED_GETAFFINITY, pid, set)
}

// SchedSetaffinity sets the CPU affinity mask of the thread specified by pid.
// If pid is 0 the calling thread is used.
func SchedSetaffinity(pid int, set *CPUSet) error {
	return schedAffinity(SYS_SCHED_SETAFFINITY, pid, set)
}

// Zero clears the set s, so that it contains no CPUs.
func (s *CPUSet) Zero() {
	for i := range s {
		s[i] = 0
	}
}

func cpuBitsIndex(cpu int) int {
	return cpu / _NCPUBITS
}

func cpuBitsMask(cpu int) cpuMask {
	return cpuMask(1 << (uint(cpu) % _NCPUBITS))
}

// Set adds cpu to the set s.
func (s *CPUSet) Set(cpu int) {
	i := cpuBitsIndex(cpu)
	if i < len(s) {
		s[i] |= cpuBitsMask(cpu)
	}
}

// Clear removes cpu from the set s.
func (s *CPUSet) Clear(cpu int) {
	i := cpuBitsIndex(cpu)
	if i < len(s) {
		s[i] &^= cpuBitsMask(cpu)
	}
}

// IsSet reports whether cpu is in the set s.
func (s *CPUSet) IsSet(cpu int) bool {
	i := cpuBitsIndex(cpu)
	if i < len(s) {
		return s[i]&cpuBitsMask(cpu) != 0
	}
	return false
}

// Count returns the number of CPUs in the set s.
func (s *CPUSet) Count() int {
	c := 0
	for _, b := range s {
		c += bits.OnesCount64(uint64(b))
	}
	return c
}
 07070100000D9D000081A4000000000000000000000001645E367C000001E4000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/aliases.go   // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build (aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos) && go1.9
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos
// +build go1.9

package unix

import "syscall"

type Signal = syscall.Signal
type Errno = syscall.Errno
type SysProcAttr = syscall.SysProcAttr
07070100000D9E000081A4000000000000000000000001645E367C000001A4000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/asm_aix_ppc64.s  // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build gc
// +build gc

#include "textflag.h"

//
// System calls for ppc64, AIX are implemented in runtime/syscall_aix.go
//

TEXT ·syscall6(SB),NOSPLIT,$0-88
	JMP	syscall·syscall6(SB)

TEXT ·rawSyscall6(SB),NOSPLIT,$0-88
	JMP	syscall·rawSyscall6(SB)
07070100000D9F000081A4000000000000000000000001645E367C000002E6000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/asm_bsd_386.s    // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build (freebsd || netbsd || openbsd) && gc
// +build freebsd netbsd openbsd
// +build gc

#include "textflag.h"

// System call support for 386 BSD

// Just jump to package syscall's implementation for all these functions.
// The runtime may know about them.

TEXT	·Syscall(SB),NOSPLIT,$0-28
	JMP	syscall·Syscall(SB)

TEXT	·Syscall6(SB),NOSPLIT,$0-40
	JMP	syscall·Syscall6(SB)

TEXT	·Syscall9(SB),NOSPLIT,$0-52
	JMP	syscall·Syscall9(SB)

TEXT	·RawSyscall(SB),NOSPLIT,$0-28
	JMP	syscall·RawSyscall(SB)

TEXT	·RawSyscall6(SB),NOSPLIT,$0-40
	JMP	syscall·RawSyscall6(SB)
  07070100000DA0000081A4000000000000000000000001645E367C00000311000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/asm_bsd_amd64.s  // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build (darwin || dragonfly || freebsd || netbsd || openbsd) && gc
// +build darwin dragonfly freebsd netbsd openbsd
// +build gc

#include "textflag.h"

// System call support for AMD64 BSD

// Just jump to package syscall's implementation for all these functions.
// The runtime may know about them.

TEXT	·Syscall(SB),NOSPLIT,$0-56
	JMP	syscall·Syscall(SB)

TEXT	·Syscall6(SB),NOSPLIT,$0-80
	JMP	syscall·Syscall6(SB)

TEXT	·Syscall9(SB),NOSPLIT,$0-104
	JMP	syscall·Syscall9(SB)

TEXT	·RawSyscall(SB),NOSPLIT,$0-56
	JMP	syscall·RawSyscall(SB)

TEXT	·RawSyscall6(SB),NOSPLIT,$0-80
	JMP	syscall·RawSyscall6(SB)
   07070100000DA1000081A4000000000000000000000001645E367C000002DC000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/asm_bsd_arm.s    // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build (freebsd || netbsd || openbsd) && gc
// +build freebsd netbsd openbsd
// +build gc

#include "textflag.h"

// System call support for ARM BSD

// Just jump to package syscall's implementation for all these functions.
// The runtime may know about them.

TEXT	·Syscall(SB),NOSPLIT,$0-28
	B	syscall·Syscall(SB)

TEXT	·Syscall6(SB),NOSPLIT,$0-40
	B	syscall·Syscall6(SB)

TEXT	·Syscall9(SB),NOSPLIT,$0-52
	B	syscall·Syscall9(SB)

TEXT	·RawSyscall(SB),NOSPLIT,$0-28
	B	syscall·RawSyscall(SB)

TEXT	·RawSyscall6(SB),NOSPLIT,$0-40
	B	syscall·RawSyscall6(SB)
07070100000DA2000081A4000000000000000000000001645E367C000002FA000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/asm_bsd_arm64.s  // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build (darwin || freebsd || netbsd || openbsd) && gc
// +build darwin freebsd netbsd openbsd
// +build gc

#include "textflag.h"

// System call support for ARM64 BSD

// Just jump to package syscall's implementation for all these functions.
// The runtime may know about them.

TEXT	·Syscall(SB),NOSPLIT,$0-56
	JMP	syscall·Syscall(SB)

TEXT	·Syscall6(SB),NOSPLIT,$0-80
	JMP	syscall·Syscall6(SB)

TEXT	·Syscall9(SB),NOSPLIT,$0-104
	JMP	syscall·Syscall9(SB)

TEXT	·RawSyscall(SB),NOSPLIT,$0-56
	JMP	syscall·RawSyscall(SB)

TEXT	·RawSyscall6(SB),NOSPLIT,$0-80
	JMP	syscall·RawSyscall6(SB)
  07070100000DA3000081A4000000000000000000000001645E367C00000301000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/asm_bsd_ppc64.s  // Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build (darwin || freebsd || netbsd || openbsd) && gc
// +build darwin freebsd netbsd openbsd
// +build gc

#include "textflag.h"

//
// System call support for ppc64, BSD
//

// Just jump to package syscall's implementation for all these functions.
// The runtime may know about them.

TEXT	·Syscall(SB),NOSPLIT,$0-56
	JMP	syscall·Syscall(SB)

TEXT	·Syscall6(SB),NOSPLIT,$0-80
	JMP	syscall·Syscall6(SB)

TEXT	·Syscall9(SB),NOSPLIT,$0-104
	JMP	syscall·Syscall9(SB)

TEXT	·RawSyscall(SB),NOSPLIT,$0-56
	JMP	syscall·RawSyscall(SB)

TEXT	·RawSyscall6(SB),NOSPLIT,$0-80
	JMP	syscall·RawSyscall6(SB)
   07070100000DA4000081A4000000000000000000000001645E367C000002FC000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/asm_bsd_riscv64.s    // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build (darwin || freebsd || netbsd || openbsd) && gc
// +build darwin freebsd netbsd openbsd
// +build gc

#include "textflag.h"

// System call support for RISCV64 BSD

// Just jump to package syscall's implementation for all these functions.
// The runtime may know about them.

TEXT	·Syscall(SB),NOSPLIT,$0-56
	JMP	syscall·Syscall(SB)

TEXT	·Syscall6(SB),NOSPLIT,$0-80
	JMP	syscall·Syscall6(SB)

TEXT	·Syscall9(SB),NOSPLIT,$0-104
	JMP	syscall·Syscall9(SB)

TEXT	·RawSyscall(SB),NOSPLIT,$0-56
	JMP	syscall·RawSyscall(SB)

TEXT	·RawSyscall6(SB),NOSPLIT,$0-80
	JMP	syscall·RawSyscall6(SB)
07070100000DA5000081A4000000000000000000000001645E367C000005CB000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/asm_linux_386.s  // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build gc
// +build gc

#include "textflag.h"

//
// System calls for 386, Linux
//

// See ../runtime/sys_linux_386.s for the reason why we always use int 0x80
// instead of the glibc-specific "CALL 0x10(GS)".
#define INVOKE_SYSCALL	INT	$0x80

// Just jump to package syscall's implementation for all these functions.
// The runtime may know about them.

TEXT ·Syscall(SB),NOSPLIT,$0-28
	JMP	syscall·Syscall(SB)

TEXT ·Syscall6(SB),NOSPLIT,$0-40
	JMP	syscall·Syscall6(SB)

TEXT ·SyscallNoError(SB),NOSPLIT,$0-24
	CALL	runtime·entersyscall(SB)
	MOVL	trap+0(FP), AX  // syscall entry
	MOVL	a1+4(FP), BX
	MOVL	a2+8(FP), CX
	MOVL	a3+12(FP), DX
	MOVL	$0, SI
	MOVL	$0, DI
	INVOKE_SYSCALL
	MOVL	AX, r1+16(FP)
	MOVL	DX, r2+20(FP)
	CALL	runtime·exitsyscall(SB)
	RET

TEXT ·RawSyscall(SB),NOSPLIT,$0-28
	JMP	syscall·RawSyscall(SB)

TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
	JMP	syscall·RawSyscall6(SB)

TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24
	MOVL	trap+0(FP), AX  // syscall entry
	MOVL	a1+4(FP), BX
	MOVL	a2+8(FP), CX
	MOVL	a3+12(FP), DX
	MOVL	$0, SI
	MOVL	$0, DI
	INVOKE_SYSCALL
	MOVL	AX, r1+16(FP)
	MOVL	DX, r2+20(FP)
	RET

TEXT ·socketcall(SB),NOSPLIT,$0-36
	JMP	syscall·socketcall(SB)

TEXT ·rawsocketcall(SB),NOSPLIT,$0-36
	JMP	syscall·rawsocketcall(SB)

TEXT ·seek(SB),NOSPLIT,$0-28
	JMP	syscall·seek(SB)
 07070100000DA6000081A4000000000000000000000001645E367C000004C1000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/asm_linux_amd64.s    // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build gc
// +build gc

#include "textflag.h"

//
// System calls for AMD64, Linux
//

// Just jump to package syscall's implementation for all these functions.
// The runtime may know about them.

TEXT ·Syscall(SB),NOSPLIT,$0-56
	JMP	syscall·Syscall(SB)

TEXT ·Syscall6(SB),NOSPLIT,$0-80
	JMP	syscall·Syscall6(SB)

TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
	CALL	runtime·entersyscall(SB)
	MOVQ	a1+8(FP), DI
	MOVQ	a2+16(FP), SI
	MOVQ	a3+24(FP), DX
	MOVQ	$0, R10
	MOVQ	$0, R8
	MOVQ	$0, R9
	MOVQ	trap+0(FP), AX	// syscall entry
	SYSCALL
	MOVQ	AX, r1+32(FP)
	MOVQ	DX, r2+40(FP)
	CALL	runtime·exitsyscall(SB)
	RET

TEXT ·RawSyscall(SB),NOSPLIT,$0-56
	JMP	syscall·RawSyscall(SB)

TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
	JMP	syscall·RawSyscall6(SB)

TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
	MOVQ	a1+8(FP), DI
	MOVQ	a2+16(FP), SI
	MOVQ	a3+24(FP), DX
	MOVQ	$0, R10
	MOVQ	$0, R8
	MOVQ	$0, R9
	MOVQ	trap+0(FP), AX	// syscall entry
	SYSCALL
	MOVQ	AX, r1+32(FP)
	MOVQ	DX, r2+40(FP)
	RET

TEXT ·gettimeofday(SB),NOSPLIT,$0-16
	JMP	syscall·gettimeofday(SB)
   07070100000DA7000081A4000000000000000000000001645E367C0000047D000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/asm_linux_arm.s  // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build gc
// +build gc

#include "textflag.h"

//
// System calls for arm, Linux
//

// Just jump to package syscall's implementation for all these functions.
// The runtime may know about them.

TEXT ·Syscall(SB),NOSPLIT,$0-28
	B	syscall·Syscall(SB)

TEXT ·Syscall6(SB),NOSPLIT,$0-40
	B	syscall·Syscall6(SB)

TEXT ·SyscallNoError(SB),NOSPLIT,$0-24
	BL	runtime·entersyscall(SB)
	MOVW	trap+0(FP), R7
	MOVW	a1+4(FP), R0
	MOVW	a2+8(FP), R1
	MOVW	a3+12(FP), R2
	MOVW	$0, R3
	MOVW	$0, R4
	MOVW	$0, R5
	SWI	$0
	MOVW	R0, r1+16(FP)
	MOVW	$0, R0
	MOVW	R0, r2+20(FP)
	BL	runtime·exitsyscall(SB)
	RET

TEXT ·RawSyscall(SB),NOSPLIT,$0-28
	B	syscall·RawSyscall(SB)

TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
	B	syscall·RawSyscall6(SB)

TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24
	MOVW	trap+0(FP), R7	// syscall entry
	MOVW	a1+4(FP), R0
	MOVW	a2+8(FP), R1
	MOVW	a3+12(FP), R2
	SWI	$0
	MOVW	R0, r1+16(FP)
	MOVW	$0, R0
	MOVW	R0, r2+20(FP)
	RET

TEXT ·seek(SB),NOSPLIT,$0-28
	B	syscall·seek(SB)
   07070100000DA8000081A4000000000000000000000001645E367C0000047B000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/asm_linux_arm64.s    // Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build linux && arm64 && gc
// +build linux
// +build arm64
// +build gc

#include "textflag.h"

// Just jump to package syscall's implementation for all these functions.
// The runtime may know about them.

TEXT ·Syscall(SB),NOSPLIT,$0-56
	B	syscall·Syscall(SB)

TEXT ·Syscall6(SB),NOSPLIT,$0-80
	B	syscall·Syscall6(SB)

TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
	BL	runtime·entersyscall(SB)
	MOVD	a1+8(FP), R0
	MOVD	a2+16(FP), R1
	MOVD	a3+24(FP), R2
	MOVD	$0, R3
	MOVD	$0, R4
	MOVD	$0, R5
	MOVD	trap+0(FP), R8	// syscall entry
	SVC
	MOVD	R0, r1+32(FP)	// r1
	MOVD	R1, r2+40(FP)	// r2
	BL	runtime·exitsyscall(SB)
	RET

TEXT ·RawSyscall(SB),NOSPLIT,$0-56
	B	syscall·RawSyscall(SB)

TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
	B	syscall·RawSyscall6(SB)

TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
	MOVD	a1+8(FP), R0
	MOVD	a2+16(FP), R1
	MOVD	a3+24(FP), R2
	MOVD	$0, R3
	MOVD	$0, R4
	MOVD	$0, R5
	MOVD	trap+0(FP), R8	// syscall entry
	SVC
	MOVD	R0, r1+32(FP)
	MOVD	R1, r2+40(FP)
	RET
 07070100000DA9000081A4000000000000000000000001645E367C000004CE000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/asm_linux_loong64.s  // Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build linux && loong64 && gc
// +build linux
// +build loong64
// +build gc

#include "textflag.h"


// Just jump to package syscall's implementation for all these functions.
// The runtime may know about them.

TEXT ·Syscall(SB),NOSPLIT,$0-56
	JMP	syscall·Syscall(SB)

TEXT ·Syscall6(SB),NOSPLIT,$0-80
	JMP	syscall·Syscall6(SB)

TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
	JAL	runtime·entersyscall(SB)
	MOVV	a1+8(FP), R4
	MOVV	a2+16(FP), R5
	MOVV	a3+24(FP), R6
	MOVV	R0, R7
	MOVV	R0, R8
	MOVV	R0, R9
	MOVV	trap+0(FP), R11	// syscall entry
	SYSCALL
	MOVV	R4, r1+32(FP)
	MOVV	R0, r2+40(FP)	// r2 is not used. Always set to 0
	JAL	runtime·exitsyscall(SB)
	RET

TEXT ·RawSyscall(SB),NOSPLIT,$0-56
	JMP	syscall·RawSyscall(SB)

TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
	JMP	syscall·RawSyscall6(SB)

TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
	MOVV	a1+8(FP), R4
	MOVV	a2+16(FP), R5
	MOVV	a3+24(FP), R6
	MOVV	R0, R7
	MOVV	R0, R8
	MOVV	R0, R9
	MOVV	trap+0(FP), R11	// syscall entry
	SYSCALL
	MOVV	R4, r1+32(FP)
	MOVV	R0, r2+40(FP)	// r2 is not used. Always set to 0
	RET
  07070100000DAA000081A4000000000000000000000001645E367C000004C3000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s  // Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build linux && (mips64 || mips64le) && gc
// +build linux
// +build mips64 mips64le
// +build gc

#include "textflag.h"

//
// System calls for mips64, Linux
//

// Just jump to package syscall's implementation for all these functions.
// The runtime may know about them.

TEXT ·Syscall(SB),NOSPLIT,$0-56
	JMP	syscall·Syscall(SB)

TEXT ·Syscall6(SB),NOSPLIT,$0-80
	JMP	syscall·Syscall6(SB)

TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
	JAL	runtime·entersyscall(SB)
	MOVV	a1+8(FP), R4
	MOVV	a2+16(FP), R5
	MOVV	a3+24(FP), R6
	MOVV	R0, R7
	MOVV	R0, R8
	MOVV	R0, R9
	MOVV	trap+0(FP), R2	// syscall entry
	SYSCALL
	MOVV	R2, r1+32(FP)
	MOVV	R3, r2+40(FP)
	JAL	runtime·exitsyscall(SB)
	RET

TEXT ·RawSyscall(SB),NOSPLIT,$0-56
	JMP	syscall·RawSyscall(SB)

TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
	JMP	syscall·RawSyscall6(SB)

TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
	MOVV	a1+8(FP), R4
	MOVV	a2+16(FP), R5
	MOVV	a3+24(FP), R6
	MOVV	R0, R7
	MOVV	R0, R8
	MOVV	R0, R9
	MOVV	trap+0(FP), R2	// syscall entry
	SYSCALL
	MOVV	R2, r1+32(FP)
	MOVV	R3, r2+40(FP)
	RET
 07070100000DAB000081A4000000000000000000000001645E367C000004C0000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s    // Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build linux && (mips || mipsle) && gc
// +build linux
// +build mips mipsle
// +build gc

#include "textflag.h"

//
// System calls for mips, Linux
//

// Just jump to package syscall's implementation for all these functions.
// The runtime may know about them.

TEXT ·Syscall(SB),NOSPLIT,$0-28
	JMP syscall·Syscall(SB)

TEXT ·Syscall6(SB),NOSPLIT,$0-40
	JMP syscall·Syscall6(SB)

TEXT ·Syscall9(SB),NOSPLIT,$0-52
	JMP syscall·Syscall9(SB)

TEXT ·SyscallNoError(SB),NOSPLIT,$0-24
	JAL	runtime·entersyscall(SB)
	MOVW	a1+4(FP), R4
	MOVW	a2+8(FP), R5
	MOVW	a3+12(FP), R6
	MOVW	R0, R7
	MOVW	trap+0(FP), R2	// syscall entry
	SYSCALL
	MOVW	R2, r1+16(FP)	// r1
	MOVW	R3, r2+20(FP)	// r2
	JAL	runtime·exitsyscall(SB)
	RET

TEXT ·RawSyscall(SB),NOSPLIT,$0-28
	JMP syscall·RawSyscall(SB)

TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
	JMP syscall·RawSyscall6(SB)

TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24
	MOVW	a1+4(FP), R4
	MOVW	a2+8(FP), R5
	MOVW	a3+12(FP), R6
	MOVW	trap+0(FP), R2	// syscall entry
	SYSCALL
	MOVW	R2, r1+16(FP)
	MOVW	R3, r2+20(FP)
	RET
07070100000DAC000081A4000000000000000000000001645E367C000003C2000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s   // Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build linux && (ppc64 || ppc64le) && gc
// +build linux
// +build ppc64 ppc64le
// +build gc

#include "textflag.h"

//
// System calls for ppc64, Linux
//

// Just jump to package syscall's implementation for all these functions.
// The runtime may know about them.

TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
	BL	runtime·entersyscall(SB)
	MOVD	a1+8(FP), R3
	MOVD	a2+16(FP), R4
	MOVD	a3+24(FP), R5
	MOVD	R0, R6
	MOVD	R0, R7
	MOVD	R0, R8
	MOVD	trap+0(FP), R9	// syscall entry
	SYSCALL R9
	MOVD	R3, r1+32(FP)
	MOVD	R4, r2+40(FP)
	BL	runtime·exitsyscall(SB)
	RET

TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
	MOVD	a1+8(FP), R3
	MOVD	a2+16(FP), R4
	MOVD	a3+24(FP), R5
	MOVD	R0, R6
	MOVD	R0, R7
	MOVD	R0, R8
	MOVD	trap+0(FP), R9	// syscall entry
	SYSCALL R9
	MOVD	R3, r1+32(FP)
	MOVD	R4, r2+40(FP)
	RET
  07070100000DAD000081A4000000000000000000000001645E367C00000430000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/asm_linux_riscv64.s  // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build riscv64 && gc
// +build riscv64
// +build gc

#include "textflag.h"

//
// System calls for linux/riscv64.
//
// Where available, just jump to package syscall's implementation of
// these functions.

TEXT ·Syscall(SB),NOSPLIT,$0-56
	JMP	syscall·Syscall(SB)

TEXT ·Syscall6(SB),NOSPLIT,$0-80
	JMP	syscall·Syscall6(SB)

TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
	CALL	runtime·entersyscall(SB)
	MOV	a1+8(FP), A0
	MOV	a2+16(FP), A1
	MOV	a3+24(FP), A2
	MOV	trap+0(FP), A7	// syscall entry
	ECALL
	MOV	A0, r1+32(FP)	// r1
	MOV	A1, r2+40(FP)	// r2
	CALL	runtime·exitsyscall(SB)
	RET

TEXT ·RawSyscall(SB),NOSPLIT,$0-56
	JMP	syscall·RawSyscall(SB)

TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
	JMP	syscall·RawSyscall6(SB)

TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
	MOV	a1+8(FP), A0
	MOV	a2+16(FP), A1
	MOV	a3+24(FP), A2
	MOV	trap+0(FP), A7	// syscall entry
	ECALL
	MOV	A0, r1+32(FP)
	MOV	A1, r2+40(FP)
	RET
07070100000DAE000081A4000000000000000000000001645E367C000004A3000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/asm_linux_s390x.s    // Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build linux && s390x && gc
// +build linux
// +build s390x
// +build gc

#include "textflag.h"

//
// System calls for s390x, Linux
//

// Just jump to package syscall's implementation for all these functions.
// The runtime may know about them.

TEXT ·Syscall(SB),NOSPLIT,$0-56
	BR	syscall·Syscall(SB)

TEXT ·Syscall6(SB),NOSPLIT,$0-80
	BR	syscall·Syscall6(SB)

TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
	BL	runtime·entersyscall(SB)
	MOVD	a1+8(FP), R2
	MOVD	a2+16(FP), R3
	MOVD	a3+24(FP), R4
	MOVD	$0, R5
	MOVD	$0, R6
	MOVD	$0, R7
	MOVD	trap+0(FP), R1	// syscall entry
	SYSCALL
	MOVD	R2, r1+32(FP)
	MOVD	R3, r2+40(FP)
	BL	runtime·exitsyscall(SB)
	RET

TEXT ·RawSyscall(SB),NOSPLIT,$0-56
	BR	syscall·RawSyscall(SB)

TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
	BR	syscall·RawSyscall6(SB)

TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
	MOVD	a1+8(FP), R2
	MOVD	a2+16(FP), R3
	MOVD	a3+24(FP), R4
	MOVD	$0, R5
	MOVD	$0, R6
	MOVD	$0, R7
	MOVD	trap+0(FP), R1	// syscall entry
	SYSCALL
	MOVD	R2, r1+32(FP)
	MOVD	R3, r2+40(FP)
	RET
 07070100000DAF000081A4000000000000000000000001645E367C000002B2000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/asm_openbsd_mips64.s // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build gc
// +build gc

#include "textflag.h"

//
// System call support for mips64, OpenBSD
//

// Just jump to package syscall's implementation for all these functions.
// The runtime may know about them.

TEXT	·Syscall(SB),NOSPLIT,$0-56
	JMP	syscall·Syscall(SB)

TEXT	·Syscall6(SB),NOSPLIT,$0-80
	JMP	syscall·Syscall6(SB)

TEXT	·Syscall9(SB),NOSPLIT,$0-104
	JMP	syscall·Syscall9(SB)

TEXT	·RawSyscall(SB),NOSPLIT,$0-56
	JMP	syscall·RawSyscall(SB)

TEXT	·RawSyscall6(SB),NOSPLIT,$0-80
	JMP	syscall·RawSyscall6(SB)
  07070100000DB0000081A4000000000000000000000001645E367C000001B4000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/asm_solaris_amd64.s  // Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build gc
// +build gc

#include "textflag.h"

//
// System calls for amd64, Solaris are implemented in runtime/syscall_solaris.go
//

TEXT ·sysvicall6(SB),NOSPLIT,$0-88
	JMP	syscall·sysvicall6(SB)

TEXT ·rawSysvicall6(SB),NOSPLIT,$0-88
	JMP	syscall·rawSysvicall6(SB)
07070100000DB1000081A4000000000000000000000001645E367C000021C6000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/asm_zos_s390x.s  // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build zos && s390x && gc
// +build zos
// +build s390x
// +build gc

#include "textflag.h"

#define PSALAA            1208(R0)
#define GTAB64(x)           80(x)
#define LCA64(x)            88(x)
#define CAA(x)               8(x)
#define EDCHPXV(x)        1016(x)       // in the CAA
#define SAVSTACK_ASYNC(x)  336(x)       // in the LCA

// SS_*, where x=SAVSTACK_ASYNC
#define SS_LE(x)             0(x)
#define SS_GO(x)             8(x)
#define SS_ERRNO(x)         16(x)
#define SS_ERRNOJR(x)       20(x)

#define LE_CALL BYTE $0x0D; BYTE $0x76; // BL R7, R6

TEXT ·clearErrno(SB),NOSPLIT,$0-0
	BL	addrerrno<>(SB)
	MOVD	$0, 0(R3)
	RET

// Returns the address of errno in R3.
TEXT addrerrno<>(SB),NOSPLIT|NOFRAME,$0-0
	// Get library control area (LCA).
	MOVW	PSALAA, R8
	MOVD	LCA64(R8), R8

	// Get __errno FuncDesc.
	MOVD	CAA(R8), R9
	MOVD	EDCHPXV(R9), R9
	ADD	$(0x156*16), R9
	LMG	0(R9), R5, R6

	// Switch to saved LE stack.
	MOVD	SAVSTACK_ASYNC(R8), R9
	MOVD	0(R9), R4
	MOVD	$0, 0(R9)

	// Call __errno function.
	LE_CALL
	NOPH

	// Switch back to Go stack.
	XOR	R0, R0      // Restore R0 to $0.
	MOVD	R4, 0(R9)   // Save stack pointer.
	RET

TEXT ·syscall_syscall(SB),NOSPLIT,$0-56
	BL	runtime·entersyscall(SB)
	MOVD	a1+8(FP), R1
	MOVD	a2+16(FP), R2
	MOVD	a3+24(FP), R3

	// Get library control area (LCA).
	MOVW	PSALAA, R8
	MOVD	LCA64(R8), R8

	// Get function.
	MOVD	CAA(R8), R9
	MOVD	EDCHPXV(R9), R9
	MOVD	trap+0(FP), R5
	SLD	$4, R5
	ADD	R5, R9
	LMG	0(R9), R5, R6

	// Restore LE stack.
	MOVD	SAVSTACK_ASYNC(R8), R9
	MOVD	0(R9), R4
	MOVD	$0, 0(R9)

	// Call function.
	LE_CALL
	NOPH
	XOR	R0, R0      // Restore R0 to $0.
	MOVD	R4, 0(R9)   // Save stack pointer.

	MOVD	R3, r1+32(FP)
	MOVD	R0, r2+40(FP)
	MOVD	R0, err+48(FP)
	MOVW	R3, R4
	CMP	R4, $-1
	BNE	done
	BL	addrerrno<>(SB)
	MOVWZ	0(R3), R3
	MOVD	R3, err+48(FP)
done:
	BL	runtime·exitsyscall(SB)
	RET

TEXT ·syscall_rawsyscall(SB),NOSPLIT,$0-56
	MOVD	a1+8(FP), R1
	MOVD	a2+16(FP), R2
	MOVD	a3+24(FP), R3

	// Get library control area (LCA).
	MOVW	PSALAA, R8
	MOVD	LCA64(R8), R8

	// Get function.
	MOVD	CAA(R8), R9
	MOVD	EDCHPXV(R9), R9
	MOVD	trap+0(FP), R5
	SLD	$4, R5
	ADD	R5, R9
	LMG	0(R9), R5, R6

	// Restore LE stack.
	MOVD	SAVSTACK_ASYNC(R8), R9
	MOVD	0(R9), R4
	MOVD	$0, 0(R9)

	// Call function.
	LE_CALL
	NOPH
	XOR	R0, R0      // Restore R0 to $0.
	MOVD	R4, 0(R9)   // Save stack pointer.

	MOVD	R3, r1+32(FP)
	MOVD	R0, r2+40(FP)
	MOVD	R0, err+48(FP)
	MOVW	R3, R4
	CMP	R4, $-1
	BNE	done
	BL	addrerrno<>(SB)
	MOVWZ	0(R3), R3
	MOVD	R3, err+48(FP)
done:
	RET

TEXT ·syscall_syscall6(SB),NOSPLIT,$0-80
	BL	runtime·entersyscall(SB)
	MOVD	a1+8(FP), R1
	MOVD	a2+16(FP), R2
	MOVD	a3+24(FP), R3

	// Get library control area (LCA).
	MOVW	PSALAA, R8
	MOVD	LCA64(R8), R8

	// Get function.
	MOVD	CAA(R8), R9
	MOVD	EDCHPXV(R9), R9
	MOVD	trap+0(FP), R5
	SLD	$4, R5
	ADD	R5, R9
	LMG	0(R9), R5, R6

	// Restore LE stack.
	MOVD	SAVSTACK_ASYNC(R8), R9
	MOVD	0(R9), R4
	MOVD	$0, 0(R9)

	// Fill in parameter list.
	MOVD	a4+32(FP), R12
	MOVD	R12, (2176+24)(R4)
	MOVD	a5+40(FP), R12
	MOVD	R12, (2176+32)(R4)
	MOVD	a6+48(FP), R12
	MOVD	R12, (2176+40)(R4)

	// Call function.
	LE_CALL
	NOPH
	XOR	R0, R0      // Restore R0 to $0.
	MOVD	R4, 0(R9)   // Save stack pointer.

	MOVD	R3, r1+56(FP)
	MOVD	R0, r2+64(FP)
	MOVD	R0, err+72(FP)
	MOVW	R3, R4
	CMP	R4, $-1
	BNE	done
	BL	addrerrno<>(SB)
	MOVWZ	0(R3), R3
	MOVD	R3, err+72(FP)
done:
	BL	runtime·exitsyscall(SB)
	RET

TEXT ·syscall_rawsyscall6(SB),NOSPLIT,$0-80
	MOVD	a1+8(FP), R1
	MOVD	a2+16(FP), R2
	MOVD	a3+24(FP), R3

	// Get library control area (LCA).
	MOVW	PSALAA, R8
	MOVD	LCA64(R8), R8

	// Get function.
	MOVD	CAA(R8), R9
	MOVD	EDCHPXV(R9), R9
	MOVD	trap+0(FP), R5
	SLD	$4, R5
	ADD	R5, R9
	LMG	0(R9), R5, R6

	// Restore LE stack.
	MOVD	SAVSTACK_ASYNC(R8), R9
	MOVD	0(R9), R4
	MOVD	$0, 0(R9)

	// Fill in parameter list.
	MOVD	a4+32(FP), R12
	MOVD	R12, (2176+24)(R4)
	MOVD	a5+40(FP), R12
	MOVD	R12, (2176+32)(R4)
	MOVD	a6+48(FP), R12
	MOVD	R12, (2176+40)(R4)

	// Call function.
	LE_CALL
	NOPH
	XOR	R0, R0      // Restore R0 to $0.
	MOVD	R4, 0(R9)   // Save stack pointer.

	MOVD	R3, r1+56(FP)
	MOVD	R0, r2+64(FP)
	MOVD	R0, err+72(FP)
	MOVW	R3, R4
	CMP	R4, $-1
	BNE	done
	BL	·rrno<>(SB)
	MOVWZ	0(R3), R3
	MOVD	R3, err+72(FP)
done:
	RET

TEXT ·syscall_syscall9(SB),NOSPLIT,$0
	BL	runtime·entersyscall(SB)
	MOVD	a1+8(FP), R1
	MOVD	a2+16(FP), R2
	MOVD	a3+24(FP), R3

	// Get library control area (LCA).
	MOVW	PSALAA, R8
	MOVD	LCA64(R8), R8

	// Get function.
	MOVD	CAA(R8), R9
	MOVD	EDCHPXV(R9), R9
	MOVD	trap+0(FP), R5
	SLD	$4, R5
	ADD	R5, R9
	LMG	0(R9), R5, R6

	// Restore LE stack.
	MOVD	SAVSTACK_ASYNC(R8), R9
	MOVD	0(R9), R4
	MOVD	$0, 0(R9)

	// Fill in parameter list.
	MOVD	a4+32(FP), R12
	MOVD	R12, (2176+24)(R4)
	MOVD	a5+40(FP), R12
	MOVD	R12, (2176+32)(R4)
	MOVD	a6+48(FP), R12
	MOVD	R12, (2176+40)(R4)
	MOVD	a7+56(FP), R12
	MOVD	R12, (2176+48)(R4)
	MOVD	a8+64(FP), R12
	MOVD	R12, (2176+56)(R4)
	MOVD	a9+72(FP), R12
	MOVD	R12, (2176+64)(R4)

	// Call function.
	LE_CALL
	NOPH
	XOR	R0, R0      // Restore R0 to $0.
	MOVD	R4, 0(R9)   // Save stack pointer.

	MOVD	R3, r1+80(FP)
	MOVD	R0, r2+88(FP)
	MOVD	R0, err+96(FP)
	MOVW	R3, R4
	CMP	R4, $-1
	BNE	done
	BL	addrerrno<>(SB)
	MOVWZ	0(R3), R3
	MOVD	R3, err+96(FP)
done:
        BL	runtime·exitsyscall(SB)
        RET

TEXT ·syscall_rawsyscall9(SB),NOSPLIT,$0
	MOVD	a1+8(FP), R1
	MOVD	a2+16(FP), R2
	MOVD	a3+24(FP), R3

	// Get library control area (LCA).
	MOVW	PSALAA, R8
	MOVD	LCA64(R8), R8

	// Get function.
	MOVD	CAA(R8), R9
	MOVD	EDCHPXV(R9), R9
	MOVD	trap+0(FP), R5
	SLD	$4, R5
	ADD	R5, R9
	LMG	0(R9), R5, R6

	// Restore LE stack.
	MOVD	SAVSTACK_ASYNC(R8), R9
	MOVD	0(R9), R4
	MOVD	$0, 0(R9)

	// Fill in parameter list.
	MOVD	a4+32(FP), R12
	MOVD	R12, (2176+24)(R4)
	MOVD	a5+40(FP), R12
	MOVD	R12, (2176+32)(R4)
	MOVD	a6+48(FP), R12
	MOVD	R12, (2176+40)(R4)
	MOVD	a7+56(FP), R12
	MOVD	R12, (2176+48)(R4)
	MOVD	a8+64(FP), R12
	MOVD	R12, (2176+56)(R4)
	MOVD	a9+72(FP), R12
	MOVD	R12, (2176+64)(R4)

	// Call function.
	LE_CALL
	NOPH
	XOR	R0, R0      // Restore R0 to $0.
	MOVD	R4, 0(R9)   // Save stack pointer.

	MOVD	R3, r1+80(FP)
	MOVD	R0, r2+88(FP)
	MOVD	R0, err+96(FP)
	MOVW	R3, R4
	CMP	R4, $-1
	BNE	done
	BL	addrerrno<>(SB)
	MOVWZ	0(R3), R3
	MOVD	R3, err+96(FP)
done:
	RET

// func svcCall(fnptr unsafe.Pointer, argv *unsafe.Pointer, dsa *uint64)
TEXT ·svcCall(SB),NOSPLIT,$0
	BL	runtime·save_g(SB)   // Save g and stack pointer
	MOVW	PSALAA, R8
	MOVD	LCA64(R8), R8
	MOVD	SAVSTACK_ASYNC(R8), R9
	MOVD	R15, 0(R9)

	MOVD	argv+8(FP), R1       // Move function arguments into registers
	MOVD	dsa+16(FP), g
	MOVD	fnptr+0(FP), R15

	BYTE	$0x0D                // Branch to function
	BYTE	$0xEF

	BL	runtime·load_g(SB)   // Restore g and stack pointer
	MOVW	PSALAA, R8
	MOVD	LCA64(R8), R8
	MOVD	SAVSTACK_ASYNC(R8), R9
	MOVD	0(R9), R15

	RET

// func svcLoad(name *byte) unsafe.Pointer
TEXT ·svcLoad(SB),NOSPLIT,$0
	MOVD	R15, R2          // Save go stack pointer
	MOVD	name+0(FP), R0   // Move SVC args into registers
	MOVD	$0x80000000, R1
	MOVD	$0, R15
	BYTE	$0x0A            // SVC 08 LOAD
	BYTE	$0x08
	MOVW	R15, R3          // Save return code from SVC
	MOVD	R2, R15          // Restore go stack pointer
	CMP	R3, $0           // Check SVC return code
	BNE	error

	MOVD	$-2, R3          // Reset last bit of entry point to zero
	AND	R0, R3
	MOVD	R3, addr+8(FP)   // Return entry point returned by SVC
	CMP	R0, R3           // Check if last bit of entry point was set
	BNE	done

	MOVD	R15, R2          // Save go stack pointer
	MOVD	$0, R15          // Move SVC args into registers (entry point still in r0 from SVC 08)
	BYTE	$0x0A            // SVC 09 DELETE
	BYTE	$0x09
	MOVD	R2, R15          // Restore go stack pointer

error:
	MOVD	$0, addr+8(FP)   // Return 0 on failure
done:
	XOR	R0, R0           // Reset r0 to 0
	RET

// func svcUnload(name *byte, fnptr unsafe.Pointer) int64
TEXT ·svcUnload(SB),NOSPLIT,$0
	MOVD	R15, R2          // Save go stack pointer
	MOVD	name+0(FP), R0   // Move SVC args into registers
	MOVD	addr+8(FP), R15
	BYTE	$0x0A            // SVC 09
	BYTE	$0x09
	XOR	R0, R0           // Reset r0 to 0
	MOVD	R15, R1          // Save SVC return code
	MOVD	R2, R15          // Restore go stack pointer
	MOVD	R1, rc+0(FP)     // Return SVC return code
	RET

// func gettid() uint64
TEXT ·gettid(SB), NOSPLIT, $0
	// Get library control area (LCA).
	MOVW PSALAA, R8
	MOVD LCA64(R8), R8

	// Get CEECAATHDID
	MOVD CAA(R8), R9
	MOVD 0x3D0(R9), R9
	MOVD R9, ret+0(FP)

	RET
  07070100000DB2000081A4000000000000000000000001645E367C000002A8000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/bluetooth_linux.go   // Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Bluetooth sockets and messages

package unix

// Bluetooth Protocols
const (
	BTPROTO_L2CAP  = 0
	BTPROTO_HCI    = 1
	BTPROTO_SCO    = 2
	BTPROTO_RFCOMM = 3
	BTPROTO_BNEP   = 4
	BTPROTO_CMTP   = 5
	BTPROTO_HIDP   = 6
	BTPROTO_AVDTP  = 7
)

const (
	HCI_CHANNEL_RAW     = 0
	HCI_CHANNEL_USER    = 1
	HCI_CHANNEL_MONITOR = 2
	HCI_CHANNEL_CONTROL = 3
	HCI_CHANNEL_LOGGING = 4
)

// Socketoption Level
const (
	SOL_BLUETOOTH = 0x112
	SOL_HCI       = 0x0
	SOL_L2CAP     = 0x6
	SOL_RFCOMM    = 0x12
	SOL_SCO       = 0x11
)
07070100000DB3000081A4000000000000000000000001645E367C0000141D000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/cap_freebsd.go   // Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build freebsd
// +build freebsd

package unix

import (
	"errors"
	"fmt"
)

// Go implementation of C mostly found in /usr/src/sys/kern/subr_capability.c

const (
	// This is the version of CapRights this package understands. See C implementation for parallels.
	capRightsGoVersion = CAP_RIGHTS_VERSION_00
	capArSizeMin       = CAP_RIGHTS_VERSION_00 + 2
	capArSizeMax       = capRightsGoVersion + 2
)

var (
	bit2idx = []int{
		-1, 0, 1, -1, 2, -1, -1, -1, 3, -1, -1, -1, -1, -1, -1, -1,
		4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
	}
)

func capidxbit(right uint64) int {
	return int((right >> 57) & 0x1f)
}

func rightToIndex(right uint64) (int, error) {
	idx := capidxbit(right)
	if idx < 0 || idx >= len(bit2idx) {
		return -2, fmt.Errorf("index for right 0x%x out of range", right)
	}
	return bit2idx[idx], nil
}

func caprver(right uint64) int {
	return int(right >> 62)
}

func capver(rights *CapRights) int {
	return caprver(rights.Rights[0])
}

func caparsize(rights *CapRights) int {
	return capver(rights) + 2
}

// CapRightsSet sets the permissions in setrights in rights.
func CapRightsSet(rights *CapRights, setrights []uint64) error {
	// This is essentially a copy of cap_rights_vset()
	if capver(rights) != CAP_RIGHTS_VERSION_00 {
		return fmt.Errorf("bad rights version %d", capver(rights))
	}

	n := caparsize(rights)
	if n < capArSizeMin || n > capArSizeMax {
		return errors.New("bad rights size")
	}

	for _, right := range setrights {
		if caprver(right) != CAP_RIGHTS_VERSION_00 {
			return errors.New("bad right version")
		}
		i, err := rightToIndex(right)
		if err != nil {
			return err
		}
		if i >= n {
			return errors.New("index overflow")
		}
		if capidxbit(rights.Rights[i]) != capidxbit(right) {
			return errors.New("index mismatch")
		}
		rights.Rights[i] |= right
		if capidxbit(rights.Rights[i]) != capidxbit(right) {
			return errors.New("index mismatch (after assign)")
		}
	}

	return nil
}

// CapRightsClear clears the permissions in clearrights from rights.
func CapRightsClear(rights *CapRights, clearrights []uint64) error {
	// This is essentially a copy of cap_rights_vclear()
	if capver(rights) != CAP_RIGHTS_VERSION_00 {
		return fmt.Errorf("bad rights version %d", capver(rights))
	}

	n := caparsize(rights)
	if n < capArSizeMin || n > capArSizeMax {
		return errors.New("bad rights size")
	}

	for _, right := range clearrights {
		if caprver(right) != CAP_RIGHTS_VERSION_00 {
			return errors.New("bad right version")
		}
		i, err := rightToIndex(right)
		if err != nil {
			return err
		}
		if i >= n {
			return errors.New("index overflow")
		}
		if capidxbit(rights.Rights[i]) != capidxbit(right) {
			return errors.New("index mismatch")
		}
		rights.Rights[i] &= ^(right & 0x01FFFFFFFFFFFFFF)
		if capidxbit(rights.Rights[i]) != capidxbit(right) {
			return errors.New("index mismatch (after assign)")
		}
	}

	return nil
}

// CapRightsIsSet checks whether all the permissions in setrights are present in rights.
func CapRightsIsSet(rights *CapRights, setrights []uint64) (bool, error) {
	// This is essentially a copy of cap_rights_is_vset()
	if capver(rights) != CAP_RIGHTS_VERSION_00 {
		return false, fmt.Errorf("bad rights version %d", capver(rights))
	}

	n := caparsize(rights)
	if n < capArSizeMin || n > capArSizeMax {
		return false, errors.New("bad rights size")
	}

	for _, right := range setrights {
		if caprver(right) != CAP_RIGHTS_VERSION_00 {
			return false, errors.New("bad right version")
		}
		i, err := rightToIndex(right)
		if err != nil {
			return false, err
		}
		if i >= n {
			return false, errors.New("index overflow")
		}
		if capidxbit(rights.Rights[i]) != capidxbit(right) {
			return false, errors.New("index mismatch")
		}
		if (rights.Rights[i] & right) != right {
			return false, nil
		}
	}

	return true, nil
}

func capright(idx uint64, bit uint64) uint64 {
	return ((1 << (57 + idx)) | bit)
}

// CapRightsInit returns a pointer to an initialised CapRights structure filled with rights.
// See man cap_rights_init(3) and rights(4).
func CapRightsInit(rights []uint64) (*CapRights, error) {
	var r CapRights
	r.Rights[0] = (capRightsGoVersion << 62) | capright(0, 0)
	r.Rights[1] = capright(1, 0)

	err := CapRightsSet(&r, rights)
	if err != nil {
		return nil, err
	}
	return &r, nil
}

// CapRightsLimit reduces the operations permitted on fd to at most those contained in rights.
// The capability rights on fd can never be increased by CapRightsLimit.
// See man cap_rights_limit(2) and rights(4).
func CapRightsLimit(fd uintptr, rights *CapRights) error {
	return capRightsLimit(int(fd), rights)
}

// CapRightsGet returns a CapRights structure containing the operations permitted on fd.
// See man cap_rights_get(3) and rights(4).
func CapRightsGet(fd uintptr) (*CapRights, error) {
	r, err := CapRightsInit(nil)
	if err != nil {
		return nil, err
	}
	err = capRightsGet(capRightsGoVersion, int(fd), r)
	if err != nil {
		return nil, err
	}
	return r, nil
}
   07070100000DB4000081A4000000000000000000000001645E367C00000186000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/constants.go // Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos

package unix

const (
	R_OK = 0x4
	W_OK = 0x2
	X_OK = 0x1
)
  07070100000DB5000081A4000000000000000000000001645E367C000002F5000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/dev_aix_ppc.go   // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build aix && ppc
// +build aix,ppc

// Functions to access/create device major and minor numbers matching the
// encoding used by AIX.

package unix

// Major returns the major component of a Linux device number.
func Major(dev uint64) uint32 {
	return uint32((dev >> 16) & 0xffff)
}

// Minor returns the minor component of a Linux device number.
func Minor(dev uint64) uint32 {
	return uint32(dev & 0xffff)
}

// Mkdev returns a Linux device number generated from the given major and minor
// components.
func Mkdev(major, minor uint32) uint64 {
	return uint64(((major) << 16) | (minor))
}
   07070100000DB6000081A4000000000000000000000001645E367C0000036E000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/dev_aix_ppc64.go // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build aix && ppc64
// +build aix,ppc64

// Functions to access/create device major and minor numbers matching the
// encoding used AIX.

package unix

// Major returns the major component of a Linux device number.
func Major(dev uint64) uint32 {
	return uint32((dev & 0x3fffffff00000000) >> 32)
}

// Minor returns the minor component of a Linux device number.
func Minor(dev uint64) uint32 {
	return uint32((dev & 0x00000000ffffffff) >> 0)
}

// Mkdev returns a Linux device number generated from the given major and minor
// components.
func Mkdev(major, minor uint32) uint64 {
	var DEVNO64 uint64
	DEVNO64 = 0x8000000000000000
	return ((uint64(major) << 32) | (uint64(minor) & 0x00000000FFFFFFFF) | DEVNO64)
}
  07070100000DB7000081A4000000000000000000000001645E367C000002EB000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/dev_darwin.go    // Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Functions to access/create device major and minor numbers matching the
// encoding used in Darwin's sys/types.h header.

package unix

// Major returns the major component of a Darwin device number.
func Major(dev uint64) uint32 {
	return uint32((dev >> 24) & 0xff)
}

// Minor returns the minor component of a Darwin device number.
func Minor(dev uint64) uint32 {
	return uint32(dev & 0xffffff)
}

// Mkdev returns a Darwin device number generated from the given major and minor
// components.
func Mkdev(major, minor uint32) uint64 {
	return (uint64(major) << 24) | uint64(minor)
}
 07070100000DB8000081A4000000000000000000000001645E367C00000406000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/dev_dragonfly.go // Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Functions to access/create device major and minor numbers matching the
// encoding used in Dragonfly's sys/types.h header.
//
// The information below is extracted and adapted from sys/types.h:
//
// Minor gives a cookie instead of an index since in order to avoid changing the
// meanings of bits 0-15 or wasting time and space shifting bits 16-31 for
// devices that don't use them.

package unix

// Major returns the major component of a DragonFlyBSD device number.
func Major(dev uint64) uint32 {
	return uint32((dev >> 8) & 0xff)
}

// Minor returns the minor component of a DragonFlyBSD device number.
func Minor(dev uint64) uint32 {
	return uint32(dev & 0xffff00ff)
}

// Mkdev returns a DragonFlyBSD device number generated from the given major and
// minor components.
func Mkdev(major, minor uint32) uint64 {
	return (uint64(major) << 8) | uint64(minor)
}
  07070100000DB9000081A4000000000000000000000001645E367C000003F5000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/dev_freebsd.go   // Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Functions to access/create device major and minor numbers matching the
// encoding used in FreeBSD's sys/types.h header.
//
// The information below is extracted and adapted from sys/types.h:
//
// Minor gives a cookie instead of an index since in order to avoid changing the
// meanings of bits 0-15 or wasting time and space shifting bits 16-31 for
// devices that don't use them.

package unix

// Major returns the major component of a FreeBSD device number.
func Major(dev uint64) uint32 {
	return uint32((dev >> 8) & 0xff)
}

// Minor returns the minor component of a FreeBSD device number.
func Minor(dev uint64) uint32 {
	return uint32(dev & 0xffff00ff)
}

// Mkdev returns a FreeBSD device number generated from the given major and
// minor components.
func Mkdev(major, minor uint32) uint64 {
	return (uint64(major) << 8) | uint64(minor)
}
   07070100000DBA000081A4000000000000000000000001645E367C0000062B000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/dev_linux.go // Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Functions to access/create device major and minor numbers matching the
// encoding used by the Linux kernel and glibc.
//
// The information below is extracted and adapted from bits/sysmacros.h in the
// glibc sources:
//
// dev_t in glibc is 64-bit, with 32-bit major and minor numbers. glibc's
// default encoding is MMMM Mmmm mmmM MMmm, where M is a hex digit of the major
// number and m is a hex digit of the minor number. This is backward compatible
// with legacy systems where dev_t is 16 bits wide, encoded as MMmm. It is also
// backward compatible with the Linux kernel, which for some architectures uses
// 32-bit dev_t, encoded as mmmM MMmm.

package unix

// Major returns the major component of a Linux device number.
func Major(dev uint64) uint32 {
	major := uint32((dev & 0x00000000000fff00) >> 8)
	major |= uint32((dev & 0xfffff00000000000) >> 32)
	return major
}

// Minor returns the minor component of a Linux device number.
func Minor(dev uint64) uint32 {
	minor := uint32((dev & 0x00000000000000ff) >> 0)
	minor |= uint32((dev & 0x00000ffffff00000) >> 12)
	return minor
}

// Mkdev returns a Linux device number generated from the given major and minor
// components.
func Mkdev(major, minor uint32) uint64 {
	dev := (uint64(major) & 0x00000fff) << 8
	dev |= (uint64(major) & 0xfffff000) << 32
	dev |= (uint64(minor) & 0x000000ff) << 0
	dev |= (uint64(minor) & 0xffffff00) << 12
	return dev
}
 07070100000DBB000081A4000000000000000000000001645E367C00000391000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/dev_netbsd.go    // Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Functions to access/create device major and minor numbers matching the
// encoding used in NetBSD's sys/types.h header.

package unix

// Major returns the major component of a NetBSD device number.
func Major(dev uint64) uint32 {
	return uint32((dev & 0x000fff00) >> 8)
}

// Minor returns the minor component of a NetBSD device number.
func Minor(dev uint64) uint32 {
	minor := uint32((dev & 0x000000ff) >> 0)
	minor |= uint32((dev & 0xfff00000) >> 12)
	return minor
}

// Mkdev returns a NetBSD device number generated from the given major and minor
// components.
func Mkdev(major, minor uint32) uint64 {
	dev := (uint64(major) << 8) & 0x000fff00
	dev |= (uint64(minor) << 12) & 0xfff00000
	dev |= (uint64(minor) << 0) & 0x000000ff
	return dev
}
   07070100000DBC000081A4000000000000000000000001645E367C00000396000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/dev_openbsd.go   // Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Functions to access/create device major and minor numbers matching the
// encoding used in OpenBSD's sys/types.h header.

package unix

// Major returns the major component of an OpenBSD device number.
func Major(dev uint64) uint32 {
	return uint32((dev & 0x0000ff00) >> 8)
}

// Minor returns the minor component of an OpenBSD device number.
func Minor(dev uint64) uint32 {
	minor := uint32((dev & 0x000000ff) >> 0)
	minor |= uint32((dev & 0xffff0000) >> 8)
	return minor
}

// Mkdev returns an OpenBSD device number generated from the given major and minor
// components.
func Mkdev(major, minor uint32) uint64 {
	dev := (uint64(major) << 8) & 0x0000ff00
	dev |= (uint64(minor) << 8) & 0xffff0000
	dev |= (uint64(minor) << 0) & 0x000000ff
	return dev
}
  07070100000DBD000081A4000000000000000000000001645E367C00000352000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/dev_zos.go   // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build zos && s390x
// +build zos,s390x

// Functions to access/create device major and minor numbers matching the
// encoding used by z/OS.
//
// The information below is extracted and adapted from <sys/stat.h> macros.

package unix

// Major returns the major component of a z/OS device number.
func Major(dev uint64) uint32 {
	return uint32((dev >> 16) & 0x0000FFFF)
}

// Minor returns the minor component of a z/OS device number.
func Minor(dev uint64) uint32 {
	return uint32(dev & 0x0000FFFF)
}

// Mkdev returns a z/OS device number generated from the given major and minor
// components.
func Mkdev(major, minor uint32) uint64 {
	return (uint64(major) << 16) | uint64(minor)
}
  07070100000DBE000081A4000000000000000000000001645E367C00000C55000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/dirent.go    // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos

package unix

import "unsafe"

// readInt returns the size-bytes unsigned integer in native byte order at offset off.
func readInt(b []byte, off, size uintptr) (u uint64, ok bool) {
	if len(b) < int(off+size) {
		return 0, false
	}
	if isBigEndian {
		return readIntBE(b[off:], size), true
	}
	return readIntLE(b[off:], size), true
}

func readIntBE(b []byte, size uintptr) uint64 {
	switch size {
	case 1:
		return uint64(b[0])
	case 2:
		_ = b[1] // bounds check hint to compiler; see golang.org/issue/14808
		return uint64(b[1]) | uint64(b[0])<<8
	case 4:
		_ = b[3] // bounds check hint to compiler; see golang.org/issue/14808
		return uint64(b[3]) | uint64(b[2])<<8 | uint64(b[1])<<16 | uint64(b[0])<<24
	case 8:
		_ = b[7] // bounds check hint to compiler; see golang.org/issue/14808
		return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 |
			uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56
	default:
		panic("syscall: readInt with unsupported size")
	}
}

func readIntLE(b []byte, size uintptr) uint64 {
	switch size {
	case 1:
		return uint64(b[0])
	case 2:
		_ = b[1] // bounds check hint to compiler; see golang.org/issue/14808
		return uint64(b[0]) | uint64(b[1])<<8
	case 4:
		_ = b[3] // bounds check hint to compiler; see golang.org/issue/14808
		return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24
	case 8:
		_ = b[7] // bounds check hint to compiler; see golang.org/issue/14808
		return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 |
			uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
	default:
		panic("syscall: readInt with unsupported size")
	}
}

// ParseDirent parses up to max directory entries in buf,
// appending the names to names. It returns the number of
// bytes consumed from buf, the number of entries added
// to names, and the new names slice.
func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) {
	origlen := len(buf)
	count = 0
	for max != 0 && len(buf) > 0 {
		reclen, ok := direntReclen(buf)
		if !ok || reclen > uint64(len(buf)) {
			return origlen, count, names
		}
		rec := buf[:reclen]
		buf = buf[reclen:]
		ino, ok := direntIno(rec)
		if !ok {
			break
		}
		if ino == 0 { // File absent in directory.
			continue
		}
		const namoff = uint64(unsafe.Offsetof(Dirent{}.Name))
		namlen, ok := direntNamlen(rec)
		if !ok || namoff+namlen > uint64(len(rec)) {
			break
		}
		name := rec[namoff : namoff+namlen]
		for i, c := range name {
			if c == 0 {
				name = name[:i]
				break
			}
		}
		// Check for useless names before allocating a string.
		if string(name) == "." || string(name) == ".." {
			continue
		}
		max--
		count++
		names = append(names, string(name))
	}
	return origlen - len(buf), count, names
}
   07070100000DBF000081A4000000000000000000000001645E367C000001A5000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/endian_big.go    // Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//
//go:build armbe || arm64be || m68k || mips || mips64 || mips64p32 || ppc || ppc64 || s390 || s390x || shbe || sparc || sparc64
// +build armbe arm64be m68k mips mips64 mips64p32 ppc ppc64 s390 s390x shbe sparc sparc64

package unix

const isBigEndian = true
   07070100000DC0000081A4000000000000000000000001645E367C000001D6000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/endian_little.go // Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//
//go:build 386 || amd64 || amd64p32 || alpha || arm || arm64 || loong64 || mipsle || mips64le || mips64p32le || nios2 || ppc64le || riscv || riscv64 || sh
// +build 386 amd64 amd64p32 alpha arm arm64 loong64 mipsle mips64le mips64p32le nios2 ppc64le riscv riscv64 sh

package unix

const isBigEndian = false
  07070100000DC1000081A4000000000000000000000001645E367C000002CD000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/env_unix.go  // Copyright 2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos

// Unix environment variables.

package unix

import "syscall"

func Getenv(key string) (value string, found bool) {
	return syscall.Getenv(key)
}

func Setenv(key, value string) error {
	return syscall.Setenv(key, value)
}

func Clearenv() {
	syscall.Clearenv()
}

func Environ() []string {
	return syscall.Environ()
}

func Unsetenv(key string) error {
	return syscall.Unsetenv(key)
}
   07070100000DC2000081A4000000000000000000000001645E367C00001426000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/epoll_zos.go // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build zos && s390x
// +build zos,s390x

package unix

import (
	"sync"
)

// This file simulates epoll on z/OS using poll.

// Analogous to epoll_event on Linux.
// TODO(neeilan): Pad is because the Linux kernel expects a 96-bit struct. We never pass this to the kernel; remove?
type EpollEvent struct {
	Events uint32
	Fd     int32
	Pad    int32
}

const (
	EPOLLERR      = 0x8
	EPOLLHUP      = 0x10
	EPOLLIN       = 0x1
	EPOLLMSG      = 0x400
	EPOLLOUT      = 0x4
	EPOLLPRI      = 0x2
	EPOLLRDBAND   = 0x80
	EPOLLRDNORM   = 0x40
	EPOLLWRBAND   = 0x200
	EPOLLWRNORM   = 0x100
	EPOLL_CTL_ADD = 0x1
	EPOLL_CTL_DEL = 0x2
	EPOLL_CTL_MOD = 0x3
	// The following constants are part of the epoll API, but represent
	// currently unsupported functionality on z/OS.
	// EPOLL_CLOEXEC  = 0x80000
	// EPOLLET        = 0x80000000
	// EPOLLONESHOT   = 0x40000000
	// EPOLLRDHUP     = 0x2000     // Typically used with edge-triggered notis
	// EPOLLEXCLUSIVE = 0x10000000 // Exclusive wake-up mode
	// EPOLLWAKEUP    = 0x20000000 // Relies on Linux's BLOCK_SUSPEND capability
)

// TODO(neeilan): We can eliminate these epToPoll / pToEpoll calls by using identical mask values for POLL/EPOLL
// constants where possible The lower 16 bits of epoll events (uint32) can fit any system poll event (int16).

// epToPollEvt converts epoll event field to poll equivalent.
// In epoll, Events is a 32-bit field, while poll uses 16 bits.
func epToPollEvt(events uint32) int16 {
	var ep2p = map[uint32]int16{
		EPOLLIN:  POLLIN,
		EPOLLOUT: POLLOUT,
		EPOLLHUP: POLLHUP,
		EPOLLPRI: POLLPRI,
		EPOLLERR: POLLERR,
	}

	var pollEvts int16 = 0
	for epEvt, pEvt := range ep2p {
		if (events & epEvt) != 0 {
			pollEvts |= pEvt
		}
	}

	return pollEvts
}

// pToEpollEvt converts 16 bit poll event bitfields to 32-bit epoll event fields.
func pToEpollEvt(revents int16) uint32 {
	var p2ep = map[int16]uint32{
		POLLIN:  EPOLLIN,
		POLLOUT: EPOLLOUT,
		POLLHUP: EPOLLHUP,
		POLLPRI: EPOLLPRI,
		POLLERR: EPOLLERR,
	}

	var epollEvts uint32 = 0
	for pEvt, epEvt := range p2ep {
		if (revents & pEvt) != 0 {
			epollEvts |= epEvt
		}
	}

	return epollEvts
}

// Per-process epoll implementation.
type epollImpl struct {
	mu       sync.Mutex
	epfd2ep  map[int]*eventPoll
	nextEpfd int
}

// eventPoll holds a set of file descriptors being watched by the process. A process can have multiple epoll instances.
// On Linux, this is an in-kernel data structure accessed through a fd.
type eventPoll struct {
	mu  sync.Mutex
	fds map[int]*EpollEvent
}

// epoll impl for this process.
var impl epollImpl = epollImpl{
	epfd2ep:  make(map[int]*eventPoll),
	nextEpfd: 0,
}

func (e *epollImpl) epollcreate(size int) (epfd int, err error) {
	e.mu.Lock()
	defer e.mu.Unlock()
	epfd = e.nextEpfd
	e.nextEpfd++

	e.epfd2ep[epfd] = &eventPoll{
		fds: make(map[int]*EpollEvent),
	}
	return epfd, nil
}

func (e *epollImpl) epollcreate1(flag int) (fd int, err error) {
	return e.epollcreate(4)
}

func (e *epollImpl) epollctl(epfd int, op int, fd int, event *EpollEvent) (err error) {
	e.mu.Lock()
	defer e.mu.Unlock()

	ep, ok := e.epfd2ep[epfd]
	if !ok {

		return EBADF
	}

	switch op {
	case EPOLL_CTL_ADD:
		// TODO(neeilan): When we make epfds and fds disjoint, detect epoll
		// loops here (instances watching each other) and return ELOOP.
		if _, ok := ep.fds[fd]; ok {
			return EEXIST
		}
		ep.fds[fd] = event
	case EPOLL_CTL_MOD:
		if _, ok := ep.fds[fd]; !ok {
			return ENOENT
		}
		ep.fds[fd] = event
	case EPOLL_CTL_DEL:
		if _, ok := ep.fds[fd]; !ok {
			return ENOENT
		}
		delete(ep.fds, fd)

	}
	return nil
}

// Must be called while holding ep.mu
func (ep *eventPoll) getFds() []int {
	fds := make([]int, len(ep.fds))
	for fd := range ep.fds {
		fds = append(fds, fd)
	}
	return fds
}

func (e *epollImpl) epollwait(epfd int, events []EpollEvent, msec int) (n int, err error) {
	e.mu.Lock() // in [rare] case of concurrent epollcreate + epollwait
	ep, ok := e.epfd2ep[epfd]

	if !ok {
		e.mu.Unlock()
		return 0, EBADF
	}

	pollfds := make([]PollFd, 4)
	for fd, epollevt := range ep.fds {
		pollfds = append(pollfds, PollFd{Fd: int32(fd), Events: epToPollEvt(epollevt.Events)})
	}
	e.mu.Unlock()

	n, err = Poll(pollfds, msec)
	if err != nil {
		return n, err
	}

	i := 0
	for _, pFd := range pollfds {
		if pFd.Revents != 0 {
			events[i] = EpollEvent{Fd: pFd.Fd, Events: pToEpollEvt(pFd.Revents)}
			i++
		}

		if i == n {
			break
		}
	}

	return n, nil
}

func EpollCreate(size int) (fd int, err error) {
	return impl.epollcreate(size)
}

func EpollCreate1(flag int) (fd int, err error) {
	return impl.epollcreate1(flag)
}

func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {
	return impl.epollctl(epfd, op, fd, event)
}

// Because EpollWait mutates events, the caller is expected to coordinate
// concurrent access if calling with the same epfd from multiple goroutines.
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
	return impl.epollwait(epfd, events, msec)
}
  07070100000DC3000081A4000000000000000000000001645E367C0000046F000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/fcntl.go // Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build dragonfly || freebsd || linux || netbsd || openbsd
// +build dragonfly freebsd linux netbsd openbsd

package unix

import "unsafe"

// fcntl64Syscall is usually SYS_FCNTL, but is overridden on 32-bit Linux
// systems by fcntl_linux_32bit.go to be SYS_FCNTL64.
var fcntl64Syscall uintptr = SYS_FCNTL

func fcntl(fd int, cmd, arg int) (int, error) {
	valptr, _, errno := Syscall(fcntl64Syscall, uintptr(fd), uintptr(cmd), uintptr(arg))
	var err error
	if errno != 0 {
		err = errno
	}
	return int(valptr), err
}

// FcntlInt performs a fcntl syscall on fd with the provided command and argument.
func FcntlInt(fd uintptr, cmd, arg int) (int, error) {
	return fcntl(int(fd), cmd, arg)
}

// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.
func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {
	_, _, errno := Syscall(fcntl64Syscall, fd, uintptr(cmd), uintptr(unsafe.Pointer(lk)))
	if errno == 0 {
		return nil
	}
	return errno
}
 07070100000DC4000081A4000000000000000000000001645E367C00000326000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/fcntl_darwin.go  // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package unix

import "unsafe"

// FcntlInt performs a fcntl syscall on fd with the provided command and argument.
func FcntlInt(fd uintptr, cmd, arg int) (int, error) {
	return fcntl(int(fd), cmd, arg)
}

// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.
func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {
	_, err := fcntl(int(fd), cmd, int(uintptr(unsafe.Pointer(lk))))
	return err
}

// FcntlFstore performs a fcntl syscall for the F_PREALLOCATE command.
func FcntlFstore(fd uintptr, cmd int, fstore *Fstore_t) error {
	_, err := fcntl(int(fd), cmd, int(uintptr(unsafe.Pointer(fstore))))
	return err
}
  07070100000DC5000081A4000000000000000000000001645E367C000001F4000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go // Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build (linux && 386) || (linux && arm) || (linux && mips) || (linux && mipsle) || (linux && ppc)
// +build linux,386 linux,arm linux,mips linux,mipsle linux,ppc

package unix

func init() {
	// On 32-bit Linux systems, the fcntl syscall that matches Go's
	// Flock_t type is SYS_FCNTL64, not SYS_FCNTL.
	fcntl64Syscall = SYS_FCNTL64
}
07070100000DC6000081A4000000000000000000000001645E367C00000355000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/fdset.go // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos

package unix

// Set adds fd to the set fds.
func (fds *FdSet) Set(fd int) {
	fds.Bits[fd/NFDBITS] |= (1 << (uintptr(fd) % NFDBITS))
}

// Clear removes fd from the set fds.
func (fds *FdSet) Clear(fd int) {
	fds.Bits[fd/NFDBITS] &^= (1 << (uintptr(fd) % NFDBITS))
}

// IsSet returns whether fd is in the set fds.
func (fds *FdSet) IsSet(fd int) bool {
	return fds.Bits[fd/NFDBITS]&(1<<(uintptr(fd)%NFDBITS)) != 0
}

// Zero clears the set fds.
func (fds *FdSet) Zero() {
	for i := range fds.Bits {
		fds.Bits[i] = 0
	}
}
   07070100000DC7000081A4000000000000000000000001645E367C0000105E000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/fstatfs_zos.go   // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build zos && s390x
// +build zos,s390x

package unix

import (
	"unsafe"
)

// This file simulates fstatfs on z/OS using fstatvfs and w_getmntent.

func Fstatfs(fd int, stat *Statfs_t) (err error) {
	var stat_v Statvfs_t
	err = Fstatvfs(fd, &stat_v)
	if err == nil {
		// populate stat
		stat.Type = 0
		stat.Bsize = stat_v.Bsize
		stat.Blocks = stat_v.Blocks
		stat.Bfree = stat_v.Bfree
		stat.Bavail = stat_v.Bavail
		stat.Files = stat_v.Files
		stat.Ffree = stat_v.Ffree
		stat.Fsid = stat_v.Fsid
		stat.Namelen = stat_v.Namemax
		stat.Frsize = stat_v.Frsize
		stat.Flags = stat_v.Flag
		for passn := 0; passn < 5; passn++ {
			switch passn {
			case 0:
				err = tryGetmntent64(stat)
				break
			case 1:
				err = tryGetmntent128(stat)
				break
			case 2:
				err = tryGetmntent256(stat)
				break
			case 3:
				err = tryGetmntent512(stat)
				break
			case 4:
				err = tryGetmntent1024(stat)
				break
			default:
				break
			}
			//proceed to return if: err is nil (found), err is nonnil but not ERANGE (another error occurred)
			if err == nil || err != nil && err != ERANGE {
				break
			}
		}
	}
	return err
}

func tryGetmntent64(stat *Statfs_t) (err error) {
	var mnt_ent_buffer struct {
		header       W_Mnth
		filesys_info [64]W_Mntent
	}
	var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer))
	fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size)
	if err != nil {
		return err
	}
	err = ERANGE //return ERANGE if no match is found in this batch
	for i := 0; i < fs_count; i++ {
		if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) {
			stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0])
			err = nil
			break
		}
	}
	return err
}

func tryGetmntent128(stat *Statfs_t) (err error) {
	var mnt_ent_buffer struct {
		header       W_Mnth
		filesys_info [128]W_Mntent
	}
	var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer))
	fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size)
	if err != nil {
		return err
	}
	err = ERANGE //return ERANGE if no match is found in this batch
	for i := 0; i < fs_count; i++ {
		if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) {
			stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0])
			err = nil
			break
		}
	}
	return err
}

func tryGetmntent256(stat *Statfs_t) (err error) {
	var mnt_ent_buffer struct {
		header       W_Mnth
		filesys_info [256]W_Mntent
	}
	var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer))
	fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size)
	if err != nil {
		return err
	}
	err = ERANGE //return ERANGE if no match is found in this batch
	for i := 0; i < fs_count; i++ {
		if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) {
			stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0])
			err = nil
			break
		}
	}
	return err
}

func tryGetmntent512(stat *Statfs_t) (err error) {
	var mnt_ent_buffer struct {
		header       W_Mnth
		filesys_info [512]W_Mntent
	}
	var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer))
	fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size)
	if err != nil {
		return err
	}
	err = ERANGE //return ERANGE if no match is found in this batch
	for i := 0; i < fs_count; i++ {
		if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) {
			stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0])
			err = nil
			break
		}
	}
	return err
}

func tryGetmntent1024(stat *Statfs_t) (err error) {
	var mnt_ent_buffer struct {
		header       W_Mnth
		filesys_info [1024]W_Mntent
	}
	var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer))
	fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size)
	if err != nil {
		return err
	}
	err = ERANGE //return ERANGE if no match is found in this batch
	for i := 0; i < fs_count; i++ {
		if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) {
			stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0])
			err = nil
			break
		}
	}
	return err
}
  07070100000DC8000081A4000000000000000000000001645E367C000007BB000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/gccgo.go // Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build gccgo && !aix && !hurd
// +build gccgo,!aix,!hurd

package unix

import "syscall"

// We can't use the gc-syntax .s files for gccgo. On the plus side
// much of the functionality can be written directly in Go.

func realSyscallNoError(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r uintptr)

func realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r, errno uintptr)

func SyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) {
	syscall.Entersyscall()
	r := realSyscallNoError(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)
	syscall.Exitsyscall()
	return r, 0
}

func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {
	syscall.Entersyscall()
	r, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)
	syscall.Exitsyscall()
	return r, 0, syscall.Errno(errno)
}

func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {
	syscall.Entersyscall()
	r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, 0, 0, 0)
	syscall.Exitsyscall()
	return r, 0, syscall.Errno(errno)
}

func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) {
	syscall.Entersyscall()
	r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9)
	syscall.Exitsyscall()
	return r, 0, syscall.Errno(errno)
}

func RawSyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) {
	r := realSyscallNoError(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)
	return r, 0
}

func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {
	r, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)
	return r, 0, syscall.Errno(errno)
}

func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {
	r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, 0, 0, 0)
	return r, 0, syscall.Errno(errno)
}
 07070100000DC9000081A4000000000000000000000001645E367C00000611000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/gccgo_c.c    // Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build gccgo && !aix && !hurd
// +build gccgo,!aix,!hurd

#include <errno.h>
#include <stdint.h>
#include <unistd.h>

#define _STRINGIFY2_(x) #x
#define _STRINGIFY_(x) _STRINGIFY2_(x)
#define GOSYM_PREFIX _STRINGIFY_(__USER_LABEL_PREFIX__)

// Call syscall from C code because the gccgo support for calling from
// Go to C does not support varargs functions.

struct ret {
	uintptr_t r;
	uintptr_t err;
};

struct ret gccgoRealSyscall(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9)
  __asm__(GOSYM_PREFIX GOPKGPATH ".realSyscall");

struct ret
gccgoRealSyscall(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9)
{
	struct ret r;

	errno = 0;
	r.r = syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9);
	r.err = errno;
	return r;
}

uintptr_t gccgoRealSyscallNoError(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9)
  __asm__(GOSYM_PREFIX GOPKGPATH ".realSyscallNoError");

uintptr_t
gccgoRealSyscallNoError(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9)
{
	return syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9);
}
   07070100000DCA000081A4000000000000000000000001645E367C000001D0000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go // Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build gccgo && linux && amd64
// +build gccgo,linux,amd64

package unix

import "syscall"

//extern gettimeofday
func realGettimeofday(*Timeval, *byte) int32

func gettimeofday(tv *Timeval) (err syscall.Errno) {
	r := realGettimeofday(tv, nil)
	if r < 0 {
		return syscall.GetErrno()
	}
	return 0
}
07070100000DCB000081A4000000000000000000000001645E367C00001123000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ifreq_linux.go   // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build linux
// +build linux

package unix

import (
	"unsafe"
)

// Helpers for dealing with ifreq since it contains a union and thus requires a
// lot of unsafe.Pointer casts to use properly.

// An Ifreq is a type-safe wrapper around the raw ifreq struct. An Ifreq
// contains an interface name and a union of arbitrary data which can be
// accessed using the Ifreq's methods. To create an Ifreq, use the NewIfreq
// function.
//
// Use the Name method to access the stored interface name. The union data
// fields can be get and set using the following methods:
//   - Uint16/SetUint16: flags
//   - Uint32/SetUint32: ifindex, metric, mtu
type Ifreq struct{ raw ifreq }

// NewIfreq creates an Ifreq with the input network interface name after
// validating the name does not exceed IFNAMSIZ-1 (trailing NULL required)
// bytes.
func NewIfreq(name string) (*Ifreq, error) {
	// Leave room for terminating NULL byte.
	if len(name) >= IFNAMSIZ {
		return nil, EINVAL
	}

	var ifr ifreq
	copy(ifr.Ifrn[:], name)

	return &Ifreq{raw: ifr}, nil
}

// TODO(mdlayher): get/set methods for hardware address sockaddr, char array, etc.

// Name returns the interface name associated with the Ifreq.
func (ifr *Ifreq) Name() string {
	return ByteSliceToString(ifr.raw.Ifrn[:])
}

// According to netdevice(7), only AF_INET addresses are returned for numerous
// sockaddr ioctls. For convenience, we expose these as Inet4Addr since the Port
// field and other data is always empty.

// Inet4Addr returns the Ifreq union data from an embedded sockaddr as a C
// in_addr/Go []byte (4-byte IPv4 address) value. If the sockaddr family is not
// AF_INET, an error is returned.
func (ifr *Ifreq) Inet4Addr() ([]byte, error) {
	raw := *(*RawSockaddrInet4)(unsafe.Pointer(&ifr.raw.Ifru[:SizeofSockaddrInet4][0]))
	if raw.Family != AF_INET {
		// Cannot safely interpret raw.Addr bytes as an IPv4 address.
		return nil, EINVAL
	}

	return raw.Addr[:], nil
}

// SetInet4Addr sets a C in_addr/Go []byte (4-byte IPv4 address) value in an
// embedded sockaddr within the Ifreq's union data. v must be 4 bytes in length
// or an error will be returned.
func (ifr *Ifreq) SetInet4Addr(v []byte) error {
	if len(v) != 4 {
		return EINVAL
	}

	var addr [4]byte
	copy(addr[:], v)

	ifr.clear()
	*(*RawSockaddrInet4)(
		unsafe.Pointer(&ifr.raw.Ifru[:SizeofSockaddrInet4][0]),
	) = RawSockaddrInet4{
		// Always set IP family as ioctls would require it anyway.
		Family: AF_INET,
		Addr:   addr,
	}

	return nil
}

// Uint16 returns the Ifreq union data as a C short/Go uint16 value.
func (ifr *Ifreq) Uint16() uint16 {
	return *(*uint16)(unsafe.Pointer(&ifr.raw.Ifru[:2][0]))
}

// SetUint16 sets a C short/Go uint16 value as the Ifreq's union data.
func (ifr *Ifreq) SetUint16(v uint16) {
	ifr.clear()
	*(*uint16)(unsafe.Pointer(&ifr.raw.Ifru[:2][0])) = v
}

// Uint32 returns the Ifreq union data as a C int/Go uint32 value.
func (ifr *Ifreq) Uint32() uint32 {
	return *(*uint32)(unsafe.Pointer(&ifr.raw.Ifru[:4][0]))
}

// SetUint32 sets a C int/Go uint32 value as the Ifreq's union data.
func (ifr *Ifreq) SetUint32(v uint32) {
	ifr.clear()
	*(*uint32)(unsafe.Pointer(&ifr.raw.Ifru[:4][0])) = v
}

// clear zeroes the ifreq's union field to prevent trailing garbage data from
// being sent to the kernel if an ifreq is reused.
func (ifr *Ifreq) clear() {
	for i := range ifr.raw.Ifru {
		ifr.raw.Ifru[i] = 0
	}
}

// TODO(mdlayher): export as IfreqData? For now we can provide helpers such as
// IoctlGetEthtoolDrvinfo which use these APIs under the hood.

// An ifreqData is an Ifreq which carries pointer data. To produce an ifreqData,
// use the Ifreq.withData method.
type ifreqData struct {
	name [IFNAMSIZ]byte
	// A type separate from ifreq is required in order to comply with the
	// unsafe.Pointer rules since the "pointer-ness" of data would not be
	// preserved if it were cast into the byte array of a raw ifreq.
	data unsafe.Pointer
	// Pad to the same size as ifreq.
	_ [len(ifreq{}.Ifru) - SizeofPtr]byte
}

// withData produces an ifreqData with the pointer p set for ioctls which require
// arbitrary pointer data.
func (ifr Ifreq) withData(p unsafe.Pointer) ifreqData {
	return ifreqData{
		name: ifr.raw.Ifrn,
		data: p,
	}
}
 07070100000DCC000081A4000000000000000000000001645E367C00001F80000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ioctl_linux.go   // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package unix

import "unsafe"

// IoctlRetInt performs an ioctl operation specified by req on a device
// associated with opened file descriptor fd, and returns a non-negative
// integer that is returned by the ioctl syscall.
func IoctlRetInt(fd int, req uint) (int, error) {
	ret, _, err := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), 0)
	if err != 0 {
		return 0, err
	}
	return int(ret), nil
}

func IoctlGetUint32(fd int, req uint) (uint32, error) {
	var value uint32
	err := ioctlPtr(fd, req, unsafe.Pointer(&value))
	return value, err
}

func IoctlGetRTCTime(fd int) (*RTCTime, error) {
	var value RTCTime
	err := ioctlPtr(fd, RTC_RD_TIME, unsafe.Pointer(&value))
	return &value, err
}

func IoctlSetRTCTime(fd int, value *RTCTime) error {
	return ioctlPtr(fd, RTC_SET_TIME, unsafe.Pointer(value))
}

func IoctlGetRTCWkAlrm(fd int) (*RTCWkAlrm, error) {
	var value RTCWkAlrm
	err := ioctlPtr(fd, RTC_WKALM_RD, unsafe.Pointer(&value))
	return &value, err
}

func IoctlSetRTCWkAlrm(fd int, value *RTCWkAlrm) error {
	return ioctlPtr(fd, RTC_WKALM_SET, unsafe.Pointer(value))
}

// IoctlGetEthtoolDrvinfo fetches ethtool driver information for the network
// device specified by ifname.
func IoctlGetEthtoolDrvinfo(fd int, ifname string) (*EthtoolDrvinfo, error) {
	ifr, err := NewIfreq(ifname)
	if err != nil {
		return nil, err
	}

	value := EthtoolDrvinfo{Cmd: ETHTOOL_GDRVINFO}
	ifrd := ifr.withData(unsafe.Pointer(&value))

	err = ioctlIfreqData(fd, SIOCETHTOOL, &ifrd)
	return &value, err
}

// IoctlGetWatchdogInfo fetches information about a watchdog device from the
// Linux watchdog API. For more information, see:
// https://www.kernel.org/doc/html/latest/watchdog/watchdog-api.html.
func IoctlGetWatchdogInfo(fd int) (*WatchdogInfo, error) {
	var value WatchdogInfo
	err := ioctlPtr(fd, WDIOC_GETSUPPORT, unsafe.Pointer(&value))
	return &value, err
}

// IoctlWatchdogKeepalive issues a keepalive ioctl to a watchdog device. For
// more information, see:
// https://www.kernel.org/doc/html/latest/watchdog/watchdog-api.html.
func IoctlWatchdogKeepalive(fd int) error {
	// arg is ignored and not a pointer, so ioctl is fine instead of ioctlPtr.
	return ioctl(fd, WDIOC_KEEPALIVE, 0)
}

// IoctlFileCloneRange performs an FICLONERANGE ioctl operation to clone the
// range of data conveyed in value to the file associated with the file
// descriptor destFd. See the ioctl_ficlonerange(2) man page for details.
func IoctlFileCloneRange(destFd int, value *FileCloneRange) error {
	return ioctlPtr(destFd, FICLONERANGE, unsafe.Pointer(value))
}

// IoctlFileClone performs an FICLONE ioctl operation to clone the entire file
// associated with the file description srcFd to the file associated with the
// file descriptor destFd. See the ioctl_ficlone(2) man page for details.
func IoctlFileClone(destFd, srcFd int) error {
	return ioctl(destFd, FICLONE, uintptr(srcFd))
}

type FileDedupeRange struct {
	Src_offset uint64
	Src_length uint64
	Reserved1  uint16
	Reserved2  uint32
	Info       []FileDedupeRangeInfo
}

type FileDedupeRangeInfo struct {
	Dest_fd       int64
	Dest_offset   uint64
	Bytes_deduped uint64
	Status        int32
	Reserved      uint32
}

// IoctlFileDedupeRange performs an FIDEDUPERANGE ioctl operation to share the
// range of data conveyed in value from the file associated with the file
// descriptor srcFd to the value.Info destinations. See the
// ioctl_fideduperange(2) man page for details.
func IoctlFileDedupeRange(srcFd int, value *FileDedupeRange) error {
	buf := make([]byte, SizeofRawFileDedupeRange+
		len(value.Info)*SizeofRawFileDedupeRangeInfo)
	rawrange := (*RawFileDedupeRange)(unsafe.Pointer(&buf[0]))
	rawrange.Src_offset = value.Src_offset
	rawrange.Src_length = value.Src_length
	rawrange.Dest_count = uint16(len(value.Info))
	rawrange.Reserved1 = value.Reserved1
	rawrange.Reserved2 = value.Reserved2

	for i := range value.Info {
		rawinfo := (*RawFileDedupeRangeInfo)(unsafe.Pointer(
			uintptr(unsafe.Pointer(&buf[0])) + uintptr(SizeofRawFileDedupeRange) +
				uintptr(i*SizeofRawFileDedupeRangeInfo)))
		rawinfo.Dest_fd = value.Info[i].Dest_fd
		rawinfo.Dest_offset = value.Info[i].Dest_offset
		rawinfo.Bytes_deduped = value.Info[i].Bytes_deduped
		rawinfo.Status = value.Info[i].Status
		rawinfo.Reserved = value.Info[i].Reserved
	}

	err := ioctlPtr(srcFd, FIDEDUPERANGE, unsafe.Pointer(&buf[0]))

	// Output
	for i := range value.Info {
		rawinfo := (*RawFileDedupeRangeInfo)(unsafe.Pointer(
			uintptr(unsafe.Pointer(&buf[0])) + uintptr(SizeofRawFileDedupeRange) +
				uintptr(i*SizeofRawFileDedupeRangeInfo)))
		value.Info[i].Dest_fd = rawinfo.Dest_fd
		value.Info[i].Dest_offset = rawinfo.Dest_offset
		value.Info[i].Bytes_deduped = rawinfo.Bytes_deduped
		value.Info[i].Status = rawinfo.Status
		value.Info[i].Reserved = rawinfo.Reserved
	}

	return err
}

func IoctlHIDGetDesc(fd int, value *HIDRawReportDescriptor) error {
	return ioctlPtr(fd, HIDIOCGRDESC, unsafe.Pointer(value))
}

func IoctlHIDGetRawInfo(fd int) (*HIDRawDevInfo, error) {
	var value HIDRawDevInfo
	err := ioctlPtr(fd, HIDIOCGRAWINFO, unsafe.Pointer(&value))
	return &value, err
}

func IoctlHIDGetRawName(fd int) (string, error) {
	var value [_HIDIOCGRAWNAME_LEN]byte
	err := ioctlPtr(fd, _HIDIOCGRAWNAME, unsafe.Pointer(&value[0]))
	return ByteSliceToString(value[:]), err
}

func IoctlHIDGetRawPhys(fd int) (string, error) {
	var value [_HIDIOCGRAWPHYS_LEN]byte
	err := ioctlPtr(fd, _HIDIOCGRAWPHYS, unsafe.Pointer(&value[0]))
	return ByteSliceToString(value[:]), err
}

func IoctlHIDGetRawUniq(fd int) (string, error) {
	var value [_HIDIOCGRAWUNIQ_LEN]byte
	err := ioctlPtr(fd, _HIDIOCGRAWUNIQ, unsafe.Pointer(&value[0]))
	return ByteSliceToString(value[:]), err
}

// IoctlIfreq performs an ioctl using an Ifreq structure for input and/or
// output. See the netdevice(7) man page for details.
func IoctlIfreq(fd int, req uint, value *Ifreq) error {
	// It is possible we will add more fields to *Ifreq itself later to prevent
	// misuse, so pass the raw *ifreq directly.
	return ioctlPtr(fd, req, unsafe.Pointer(&value.raw))
}

// TODO(mdlayher): export if and when IfreqData is exported.

// ioctlIfreqData performs an ioctl using an ifreqData structure for input
// and/or output. See the netdevice(7) man page for details.
func ioctlIfreqData(fd int, req uint, value *ifreqData) error {
	// The memory layout of IfreqData (type-safe) and ifreq (not type-safe) are
	// identical so pass *IfreqData directly.
	return ioctlPtr(fd, req, unsafe.Pointer(value))
}

// IoctlKCMClone attaches a new file descriptor to a multiplexor by cloning an
// existing KCM socket, returning a structure containing the file descriptor of
// the new socket.
func IoctlKCMClone(fd int) (*KCMClone, error) {
	var info KCMClone
	if err := ioctlPtr(fd, SIOCKCMCLONE, unsafe.Pointer(&info)); err != nil {
		return nil, err
	}

	return &info, nil
}

// IoctlKCMAttach attaches a TCP socket and associated BPF program file
// descriptor to a multiplexor.
func IoctlKCMAttach(fd int, info KCMAttach) error {
	return ioctlPtr(fd, SIOCKCMATTACH, unsafe.Pointer(&info))
}

// IoctlKCMUnattach unattaches a TCP socket file descriptor from a multiplexor.
func IoctlKCMUnattach(fd int, info KCMUnattach) error {
	return ioctlPtr(fd, SIOCKCMUNATTACH, unsafe.Pointer(&info))
}

// IoctlLoopGetStatus64 gets the status of the loop device associated with the
// file descriptor fd using the LOOP_GET_STATUS64 operation.
func IoctlLoopGetStatus64(fd int) (*LoopInfo64, error) {
	var value LoopInfo64
	if err := ioctlPtr(fd, LOOP_GET_STATUS64, unsafe.Pointer(&value)); err != nil {
		return nil, err
	}
	return &value, nil
}

// IoctlLoopSetStatus64 sets the status of the loop device associated with the
// file descriptor fd using the LOOP_SET_STATUS64 operation.
func IoctlLoopSetStatus64(fd int, value *LoopInfo64) error {
	return ioctlPtr(fd, LOOP_SET_STATUS64, unsafe.Pointer(value))
}
07070100000DCD000081A4000000000000000000000001645E367C000008E1000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ioctl_signed.go  // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build aix || solaris
// +build aix solaris

package unix

import (
	"unsafe"
)

// ioctl itself should not be exposed directly, but additional get/set
// functions for specific types are permissible.

// IoctlSetInt performs an ioctl operation which sets an integer value
// on fd, using the specified request number.
func IoctlSetInt(fd int, req int, value int) error {
	return ioctl(fd, req, uintptr(value))
}

// IoctlSetPointerInt performs an ioctl operation which sets an
// integer value on fd, using the specified request number. The ioctl
// argument is called with a pointer to the integer value, rather than
// passing the integer value directly.
func IoctlSetPointerInt(fd int, req int, value int) error {
	v := int32(value)
	return ioctlPtr(fd, req, unsafe.Pointer(&v))
}

// IoctlSetWinsize performs an ioctl on fd with a *Winsize argument.
//
// To change fd's window size, the req argument should be TIOCSWINSZ.
func IoctlSetWinsize(fd int, req int, value *Winsize) error {
	// TODO: if we get the chance, remove the req parameter and
	// hardcode TIOCSWINSZ.
	return ioctlPtr(fd, req, unsafe.Pointer(value))
}

// IoctlSetTermios performs an ioctl on fd with a *Termios.
//
// The req value will usually be TCSETA or TIOCSETA.
func IoctlSetTermios(fd int, req int, value *Termios) error {
	// TODO: if we get the chance, remove the req parameter.
	return ioctlPtr(fd, req, unsafe.Pointer(value))
}

// IoctlGetInt performs an ioctl operation which gets an integer value
// from fd, using the specified request number.
//
// A few ioctl requests use the return value as an output parameter;
// for those, IoctlRetInt should be used instead of this function.
func IoctlGetInt(fd int, req int) (int, error) {
	var value int
	err := ioctlPtr(fd, req, unsafe.Pointer(&value))
	return value, err
}

func IoctlGetWinsize(fd int, req int) (*Winsize, error) {
	var value Winsize
	err := ioctlPtr(fd, req, unsafe.Pointer(&value))
	return &value, err
}

func IoctlGetTermios(fd int, req int) (*Termios, error) {
	var value Termios
	err := ioctlPtr(fd, req, unsafe.Pointer(&value))
	return &value, err
}
   07070100000DCE000081A4000000000000000000000001645E367C00000945000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ioctl_unsigned.go    // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build darwin || dragonfly || freebsd || hurd || linux || netbsd || openbsd
// +build darwin dragonfly freebsd hurd linux netbsd openbsd

package unix

import (
	"unsafe"
)

// ioctl itself should not be exposed directly, but additional get/set
// functions for specific types are permissible.

// IoctlSetInt performs an ioctl operation which sets an integer value
// on fd, using the specified request number.
func IoctlSetInt(fd int, req uint, value int) error {
	return ioctl(fd, req, uintptr(value))
}

// IoctlSetPointerInt performs an ioctl operation which sets an
// integer value on fd, using the specified request number. The ioctl
// argument is called with a pointer to the integer value, rather than
// passing the integer value directly.
func IoctlSetPointerInt(fd int, req uint, value int) error {
	v := int32(value)
	return ioctlPtr(fd, req, unsafe.Pointer(&v))
}

// IoctlSetWinsize performs an ioctl on fd with a *Winsize argument.
//
// To change fd's window size, the req argument should be TIOCSWINSZ.
func IoctlSetWinsize(fd int, req uint, value *Winsize) error {
	// TODO: if we get the chance, remove the req parameter and
	// hardcode TIOCSWINSZ.
	return ioctlPtr(fd, req, unsafe.Pointer(value))
}

// IoctlSetTermios performs an ioctl on fd with a *Termios.
//
// The req value will usually be TCSETA or TIOCSETA.
func IoctlSetTermios(fd int, req uint, value *Termios) error {
	// TODO: if we get the chance, remove the req parameter.
	return ioctlPtr(fd, req, unsafe.Pointer(value))
}

// IoctlGetInt performs an ioctl operation which gets an integer value
// from fd, using the specified request number.
//
// A few ioctl requests use the return value as an output parameter;
// for those, IoctlRetInt should be used instead of this function.
func IoctlGetInt(fd int, req uint) (int, error) {
	var value int
	err := ioctlPtr(fd, req, unsafe.Pointer(&value))
	return value, err
}

func IoctlGetWinsize(fd int, req uint) (*Winsize, error) {
	var value Winsize
	err := ioctlPtr(fd, req, unsafe.Pointer(&value))
	return &value, err
}

func IoctlGetTermios(fd int, req uint) (*Termios, error) {
	var value Termios
	err := ioctlPtr(fd, req, unsafe.Pointer(&value))
	return &value, err
}
   07070100000DCF000081A4000000000000000000000001645E367C00000835000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ioctl_zos.go // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build zos && s390x
// +build zos,s390x

package unix

import (
	"runtime"
	"unsafe"
)

// ioctl itself should not be exposed directly, but additional get/set
// functions for specific types are permissible.

// IoctlSetInt performs an ioctl operation which sets an integer value
// on fd, using the specified request number.
func IoctlSetInt(fd int, req int, value int) error {
	return ioctl(fd, req, uintptr(value))
}

// IoctlSetWinsize performs an ioctl on fd with a *Winsize argument.
//
// To change fd's window size, the req argument should be TIOCSWINSZ.
func IoctlSetWinsize(fd int, req int, value *Winsize) error {
	// TODO: if we get the chance, remove the req parameter and
	// hardcode TIOCSWINSZ.
	return ioctlPtr(fd, req, unsafe.Pointer(value))
}

// IoctlSetTermios performs an ioctl on fd with a *Termios.
//
// The req value is expected to be TCSETS, TCSETSW, or TCSETSF
func IoctlSetTermios(fd int, req int, value *Termios) error {
	if (req != TCSETS) && (req != TCSETSW) && (req != TCSETSF) {
		return ENOSYS
	}
	err := Tcsetattr(fd, int(req), value)
	runtime.KeepAlive(value)
	return err
}

// IoctlGetInt performs an ioctl operation which gets an integer value
// from fd, using the specified request number.
//
// A few ioctl requests use the return value as an output parameter;
// for those, IoctlRetInt should be used instead of this function.
func IoctlGetInt(fd int, req int) (int, error) {
	var value int
	err := ioctlPtr(fd, req, unsafe.Pointer(&value))
	return value, err
}

func IoctlGetWinsize(fd int, req int) (*Winsize, error) {
	var value Winsize
	err := ioctlPtr(fd, req, unsafe.Pointer(&value))
	return &value, err
}

// IoctlGetTermios performs an ioctl on fd with a *Termios.
//
// The req value is expected to be TCGETS
func IoctlGetTermios(fd int, req int) (*Termios, error) {
	var value Termios
	if req != TCGETS {
		return &value, ENOSYS
	}
	err := Tcgetattr(fd, &value)
	return &value, err
}
   07070100000DD0000081A4000000000000000000000001645E367C00002075000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/mkall.sh #!/usr/bin/env bash
# Copyright 2009 The Go Authors. All rights reserved.
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.

# This script runs or (given -n) prints suggested commands to generate files for
# the Architecture/OS specified by the GOARCH and GOOS environment variables.
# See README.md for more information about how the build system works.

GOOSARCH="${GOOS}_${GOARCH}"

# defaults
mksyscall="go run mksyscall.go"
mkerrors="./mkerrors.sh"
zerrors="zerrors_$GOOSARCH.go"
mksysctl=""
zsysctl="zsysctl_$GOOSARCH.go"
mksysnum=
mktypes=
mkasm=
run="sh"
cmd=""

case "$1" in
-syscalls)
	for i in zsyscall*go
	do
		# Run the command line that appears in the first line
		# of the generated file to regenerate it.
		sed 1q $i | sed 's;^// ;;' | sh > _$i && gofmt < _$i > $i
		rm _$i
	done
	exit 0
	;;
-n)
	run="cat"
	cmd="echo"
	shift
esac

case "$#" in
0)
	;;
*)
	echo 'usage: mkall.sh [-n]' 1>&2
	exit 2
esac

if [[ "$GOOS" = "linux" ]]; then
	# Use the Docker-based build system
	# Files generated through docker (use $cmd so you can Ctl-C the build or run)
	$cmd docker build --tag generate:$GOOS $GOOS
	$cmd docker run --interactive --tty --volume $(cd -- "$(dirname -- "$0")/.." && /bin/pwd):/build generate:$GOOS
	exit
fi

GOOSARCH_in=syscall_$GOOSARCH.go
case "$GOOSARCH" in
_* | *_ | _)
	echo 'undefined $GOOS_$GOARCH:' "$GOOSARCH" 1>&2
	exit 1
	;;
aix_ppc)
	mkerrors="$mkerrors -maix32"
	mksyscall="go run mksyscall_aix_ppc.go -aix"
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
	;;
aix_ppc64)
	mkerrors="$mkerrors -maix64"
	mksyscall="go run mksyscall_aix_ppc64.go -aix"
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
	;;
darwin_amd64)
	mkerrors="$mkerrors -m64"
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
	mkasm="go run mkasm.go"
	;;
darwin_arm64)
	mkerrors="$mkerrors -m64"
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
	mkasm="go run mkasm.go"
	;;
dragonfly_amd64)
	mkerrors="$mkerrors -m64"
	mksyscall="go run mksyscall.go -dragonfly"
	mksysnum="go run mksysnum.go 'https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/sys/kern/syscalls.master'"
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
	;;
freebsd_386)
	mkerrors="$mkerrors -m32"
	mksyscall="go run mksyscall.go -l32"
	mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'"
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
	;;
freebsd_amd64)
	mkerrors="$mkerrors -m64"
	mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'"
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
	;;
freebsd_arm)
	mkerrors="$mkerrors"
	mksyscall="go run mksyscall.go -l32 -arm"
	mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'"
	# Let the type of C char be signed for making the bare syscall
	# API consistent across platforms.
	mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
	;;
freebsd_arm64)
	mkerrors="$mkerrors -m64"
	mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'"
	mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
	;;
freebsd_riscv64)
	mkerrors="$mkerrors -m64"
	mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'"
	mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
	;;
netbsd_386)
	mkerrors="$mkerrors -m32"
	mksyscall="go run mksyscall.go -l32 -netbsd"
	mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'"
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
	;;
netbsd_amd64)
	mkerrors="$mkerrors -m64"
	mksyscall="go run mksyscall.go -netbsd"
	mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'"
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
	;;
netbsd_arm)
	mkerrors="$mkerrors"
	mksyscall="go run mksyscall.go -l32 -netbsd -arm"
	mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'"
	# Let the type of C char be signed for making the bare syscall
	# API consistent across platforms.
	mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
	;;
netbsd_arm64)
	mkerrors="$mkerrors -m64"
	mksyscall="go run mksyscall.go -netbsd"
	mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'"
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
	;;
openbsd_386)
	mkasm="go run mkasm.go"
	mkerrors="$mkerrors -m32"
	mksyscall="go run mksyscall.go -l32 -openbsd -libc"
	mksysctl="go run mksysctl_openbsd.go"
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
	;;
openbsd_amd64)
	mkasm="go run mkasm.go"
	mkerrors="$mkerrors -m64"
	mksyscall="go run mksyscall.go -openbsd -libc"
	mksysctl="go run mksysctl_openbsd.go"
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
	;;
openbsd_arm)
	mkasm="go run mkasm.go"
	mkerrors="$mkerrors"
	mksyscall="go run mksyscall.go -l32 -openbsd -arm -libc"
	mksysctl="go run mksysctl_openbsd.go"
	# Let the type of C char be signed for making the bare syscall
	# API consistent across platforms.
	mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
	;;
openbsd_arm64)
	mkasm="go run mkasm.go"
	mkerrors="$mkerrors -m64"
	mksyscall="go run mksyscall.go -openbsd -libc"
	mksysctl="go run mksysctl_openbsd.go"
	# Let the type of C char be signed for making the bare syscall
	# API consistent across platforms.
	mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
	;;
openbsd_mips64)
	mkasm="go run mkasm.go"
	mkerrors="$mkerrors -m64"
	mksyscall="go run mksyscall.go -openbsd -libc"
	mksysctl="go run mksysctl_openbsd.go"
	# Let the type of C char be signed for making the bare syscall
	# API consistent across platforms.
	mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
	;;
openbsd_ppc64)
	mkasm="go run mkasm.go"
	mkerrors="$mkerrors -m64"
	mksyscall="go run mksyscall.go -openbsd -libc"
	mksysctl="go run mksysctl_openbsd.go"
	# Let the type of C char be signed for making the bare syscall
	# API consistent across platforms.
	mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
	;;
openbsd_riscv64)
	mkasm="go run mkasm.go"
	mkerrors="$mkerrors -m64"
	mksyscall="go run mksyscall.go -openbsd -libc"
	mksysctl="go run mksysctl_openbsd.go"
	# Let the type of C char be signed for making the bare syscall
	# API consistent across platforms.
	mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
	;;
solaris_amd64)
	mksyscall="go run mksyscall_solaris.go"
	mkerrors="$mkerrors -m64"
	mksysnum=
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
	;;
illumos_amd64)
        mksyscall="go run mksyscall_solaris.go"
	mkerrors=
	mksysnum=
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
	;;
*)
	echo 'unrecognized $GOOS_$GOARCH: ' "$GOOSARCH" 1>&2
	exit 1
	;;
esac

(
	if [ -n "$mkerrors" ]; then echo "$mkerrors |gofmt >$zerrors"; fi
	case "$GOOS" in
	*)
		syscall_goos="syscall_$GOOS.go"
		case "$GOOS" in
		darwin | dragonfly | freebsd | netbsd | openbsd)
			syscall_goos="syscall_bsd.go $syscall_goos"
			;;
		esac
		if [ -n "$mksyscall" ]; then
			if [ "$GOOSARCH" == "aix_ppc64" ]; then
				# aix/ppc64 script generates files instead of writing to stdin.
				echo "$mksyscall -tags $GOOS,$GOARCH $syscall_goos $GOOSARCH_in && gofmt -w zsyscall_$GOOSARCH.go && gofmt -w zsyscall_"$GOOSARCH"_gccgo.go && gofmt -w zsyscall_"$GOOSARCH"_gc.go " ;
			elif [ "$GOOS" == "illumos" ]; then
			        # illumos code generation requires a --illumos switch
			        echo "$mksyscall -illumos -tags illumos,$GOARCH syscall_illumos.go |gofmt > zsyscall_illumos_$GOARCH.go";
			        # illumos implies solaris, so solaris code generation is also required
				echo "$mksyscall -tags solaris,$GOARCH syscall_solaris.go syscall_solaris_$GOARCH.go |gofmt >zsyscall_solaris_$GOARCH.go";
			else
				echo "$mksyscall -tags $GOOS,$GOARCH $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.go";
			fi
		fi
	esac
	if [ -n "$mksysctl" ]; then echo "$mksysctl |gofmt >$zsysctl"; fi
	if [ -n "$mksysnum" ]; then echo "$mksysnum |gofmt >zsysnum_$GOOSARCH.go"; fi
	if [ -n "$mktypes" ]; then echo "$mktypes types_$GOOS.go | go run mkpost.go > ztypes_$GOOSARCH.go"; fi
	if [ -n "$mkasm" ]; then echo "$mkasm $GOOS $GOARCH"; fi
) | $run
   07070100000DD1000081A4000000000000000000000001645E367C00004D78000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/mkerrors.sh  #!/usr/bin/env bash
# Copyright 2009 The Go Authors. All rights reserved.
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.

# Generate Go code listing errors and other #defined constant
# values (ENAMETOOLONG etc.), by asking the preprocessor
# about the definitions.

unset LANG
export LC_ALL=C
export LC_CTYPE=C

if test -z "$GOARCH" -o -z "$GOOS"; then
	echo 1>&2 "GOARCH or GOOS not defined in environment"
	exit 1
fi

# Check that we are using the new build system if we should
if [[ "$GOOS" = "linux" ]] && [[ "$GOLANG_SYS_BUILD" != "docker" ]]; then
	echo 1>&2 "In the Docker based build system, mkerrors should not be called directly."
	echo 1>&2 "See README.md"
	exit 1
fi

if [[ "$GOOS" = "aix" ]]; then
	CC=${CC:-gcc}
else
	CC=${CC:-cc}
fi

if [[ "$GOOS" = "solaris" ]]; then
	# Assumes GNU versions of utilities in PATH.
	export PATH=/usr/gnu/bin:$PATH
fi

uname=$(uname)

includes_AIX='
#include <net/if.h>
#include <net/netopt.h>
#include <netinet/ip_mroute.h>
#include <sys/protosw.h>
#include <sys/stropts.h>
#include <sys/mman.h>
#include <sys/poll.h>
#include <sys/select.h>
#include <sys/termio.h>
#include <termios.h>
#include <fcntl.h>

#define AF_LOCAL AF_UNIX
'

includes_Darwin='
#define _DARWIN_C_SOURCE
#define KERNEL 1
#define _DARWIN_USE_64_BIT_INODE
#define __APPLE_USE_RFC_3542
#include <stdint.h>
#include <sys/attr.h>
#include <sys/clonefile.h>
#include <sys/kern_control.h>
#include <sys/types.h>
#include <sys/event.h>
#include <sys/ptrace.h>
#include <sys/select.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/un.h>
#include <sys/sockio.h>
#include <sys/sys_domain.h>
#include <sys/sysctl.h>
#include <sys/mman.h>
#include <sys/mount.h>
#include <sys/utsname.h>
#include <sys/wait.h>
#include <sys/xattr.h>
#include <sys/vsock.h>
#include <net/bpf.h>
#include <net/if.h>
#include <net/if_types.h>
#include <net/route.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <termios.h>

// for backwards compatibility because moved TIOCREMOTE to Kernel.framework after MacOSX12.0.sdk.
#define TIOCREMOTE 0x80047469
'

includes_DragonFly='
#include <sys/types.h>
#include <sys/event.h>
#include <sys/select.h>
#include <sys/socket.h>
#include <sys/sockio.h>
#include <sys/stat.h>
#include <sys/sysctl.h>
#include <sys/mman.h>
#include <sys/mount.h>
#include <sys/wait.h>
#include <sys/ioctl.h>
#include <net/bpf.h>
#include <net/if.h>
#include <net/if_clone.h>
#include <net/if_types.h>
#include <net/route.h>
#include <netinet/in.h>
#include <termios.h>
#include <netinet/ip.h>
#include <net/ip_mroute/ip_mroute.h>
'

includes_FreeBSD='
#include <sys/capsicum.h>
#include <sys/param.h>
#include <sys/types.h>
#include <sys/disk.h>
#include <sys/event.h>
#include <sys/sched.h>
#include <sys/select.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <sys/sockio.h>
#include <sys/stat.h>
#include <sys/sysctl.h>
#include <sys/mman.h>
#include <sys/mount.h>
#include <sys/wait.h>
#include <sys/ioctl.h>
#include <sys/ptrace.h>
#include <net/bpf.h>
#include <net/if.h>
#include <net/if_types.h>
#include <net/route.h>
#include <netinet/in.h>
#include <termios.h>
#include <netinet/ip.h>
#include <netinet/ip_mroute.h>
#include <sys/extattr.h>

#if __FreeBSD__ >= 10
#define IFT_CARP	0xf8	// IFT_CARP is deprecated in FreeBSD 10
#undef SIOCAIFADDR
#define SIOCAIFADDR	_IOW(105, 26, struct oifaliasreq)	// ifaliasreq contains if_data
#undef SIOCSIFPHYADDR
#define SIOCSIFPHYADDR	_IOW(105, 70, struct oifaliasreq)	// ifaliasreq contains if_data
#endif
'

includes_Linux='
#define _LARGEFILE_SOURCE
#define _LARGEFILE64_SOURCE
#ifndef __LP64__
#define _FILE_OFFSET_BITS 64
#endif
#define _GNU_SOURCE

// <sys/ioctl.h> is broken on powerpc64, as it fails to include definitions of
// these structures. We just include them copied from <bits/termios.h>.
#if defined(__powerpc__)
struct sgttyb {
        char    sg_ispeed;
        char    sg_ospeed;
        char    sg_erase;
        char    sg_kill;
        short   sg_flags;
};

struct tchars {
        char    t_intrc;
        char    t_quitc;
        char    t_startc;
        char    t_stopc;
        char    t_eofc;
        char    t_brkc;
};

struct ltchars {
        char    t_suspc;
        char    t_dsuspc;
        char    t_rprntc;
        char    t_flushc;
        char    t_werasc;
        char    t_lnextc;
};
#endif

#include <bits/sockaddr.h>
#include <sys/epoll.h>
#include <sys/eventfd.h>
#include <sys/inotify.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <sys/mount.h>
#include <sys/prctl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/select.h>
#include <sys/signalfd.h>
#include <sys/socket.h>
#include <sys/timerfd.h>
#include <sys/uio.h>
#include <sys/xattr.h>
#include <netinet/udp.h>
#include <linux/audit.h>
#include <linux/bpf.h>
#include <linux/can.h>
#include <linux/can/error.h>
#include <linux/can/netlink.h>
#include <linux/can/raw.h>
#include <linux/capability.h>
#include <linux/cryptouser.h>
#include <linux/devlink.h>
#include <linux/dm-ioctl.h>
#include <linux/errqueue.h>
#include <linux/ethtool_netlink.h>
#include <linux/falloc.h>
#include <linux/fanotify.h>
#include <linux/fib_rules.h>
#include <linux/filter.h>
#include <linux/fs.h>
#include <linux/fscrypt.h>
#include <linux/fsverity.h>
#include <linux/genetlink.h>
#include <linux/hdreg.h>
#include <linux/hidraw.h>
#include <linux/if.h>
#include <linux/if_addr.h>
#include <linux/if_alg.h>
#include <linux/if_arp.h>
#include <linux/if_ether.h>
#include <linux/if_ppp.h>
#include <linux/if_tun.h>
#include <linux/if_packet.h>
#include <linux/if_xdp.h>
#include <linux/input.h>
#include <linux/kcm.h>
#include <linux/kexec.h>
#include <linux/keyctl.h>
#include <linux/landlock.h>
#include <linux/loop.h>
#include <linux/lwtunnel.h>
#include <linux/magic.h>
#include <linux/memfd.h>
#include <linux/module.h>
#include <linux/mount.h>
#include <linux/netfilter/nfnetlink.h>
#include <linux/netlink.h>
#include <linux/net_namespace.h>
#include <linux/nfc.h>
#include <linux/nsfs.h>
#include <linux/perf_event.h>
#include <linux/pps.h>
#include <linux/ptrace.h>
#include <linux/random.h>
#include <linux/reboot.h>
#include <linux/rtc.h>
#include <linux/rtnetlink.h>
#include <linux/sched.h>
#include <linux/seccomp.h>
#include <linux/serial.h>
#include <linux/sockios.h>
#include <linux/taskstats.h>
#include <linux/tipc.h>
#include <linux/vm_sockets.h>
#include <linux/wait.h>
#include <linux/watchdog.h>
#include <linux/wireguard.h>

#include <mtd/ubi-user.h>
#include <mtd/mtd-user.h>
#include <net/route.h>

#if defined(__sparc__)
// On sparc{,64}, the kernel defines struct termios2 itself which clashes with the
// definition in glibc. As only the error constants are needed here, include the
// generic termibits.h (which is included by termbits.h on sparc).
#include <asm-generic/termbits.h>
#else
#include <asm/termbits.h>
#endif

#ifndef MSG_FASTOPEN
#define MSG_FASTOPEN    0x20000000
#endif

#ifndef PTRACE_GETREGS
#define PTRACE_GETREGS	0xc
#endif

#ifndef PTRACE_SETREGS
#define PTRACE_SETREGS	0xd
#endif

#ifndef SOL_NETLINK
#define SOL_NETLINK	270
#endif

#ifndef SOL_SMC
#define SOL_SMC 286
#endif

#ifdef SOL_BLUETOOTH
// SPARC includes this in /usr/include/sparc64-linux-gnu/bits/socket.h
// but it is already in bluetooth_linux.go
#undef SOL_BLUETOOTH
#endif

// Certain constants are missing from the fs/crypto UAPI
#define FS_KEY_DESC_PREFIX              "fscrypt:"
#define FS_KEY_DESC_PREFIX_SIZE         8
#define FS_MAX_KEY_SIZE                 64

// The code generator produces -0x1 for (~0), but an unsigned value is necessary
// for the tipc_subscr timeout __u32 field.
#undef TIPC_WAIT_FOREVER
#define TIPC_WAIT_FOREVER 0xffffffff

// Copied from linux/l2tp.h
// Including linux/l2tp.h here causes conflicts between linux/in.h
// and netinet/in.h included via net/route.h above.
#define IPPROTO_L2TP		115

// Copied from linux/hid.h.
// Keep in sync with the size of the referenced fields.
#define _HIDIOCGRAWNAME_LEN	128 // sizeof_field(struct hid_device, name)
#define _HIDIOCGRAWPHYS_LEN	64  // sizeof_field(struct hid_device, phys)
#define _HIDIOCGRAWUNIQ_LEN	64  // sizeof_field(struct hid_device, uniq)

#define _HIDIOCGRAWNAME		HIDIOCGRAWNAME(_HIDIOCGRAWNAME_LEN)
#define _HIDIOCGRAWPHYS		HIDIOCGRAWPHYS(_HIDIOCGRAWPHYS_LEN)
#define _HIDIOCGRAWUNIQ		HIDIOCGRAWUNIQ(_HIDIOCGRAWUNIQ_LEN)

'

includes_NetBSD='
#include <sys/types.h>
#include <sys/param.h>
#include <sys/event.h>
#include <sys/extattr.h>
#include <sys/mman.h>
#include <sys/mount.h>
#include <sys/sched.h>
#include <sys/select.h>
#include <sys/socket.h>
#include <sys/sockio.h>
#include <sys/sysctl.h>
#include <sys/termios.h>
#include <sys/ttycom.h>
#include <sys/wait.h>
#include <net/bpf.h>
#include <net/if.h>
#include <net/if_types.h>
#include <net/route.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <netinet/ip_mroute.h>
#include <netinet/if_ether.h>

// Needed since <sys/param.h> refers to it...
#define schedppq 1
'

includes_OpenBSD='
#include <sys/types.h>
#include <sys/param.h>
#include <sys/event.h>
#include <sys/mman.h>
#include <sys/mount.h>
#include <sys/select.h>
#include <sys/sched.h>
#include <sys/socket.h>
#include <sys/sockio.h>
#include <sys/stat.h>
#include <sys/sysctl.h>
#include <sys/termios.h>
#include <sys/ttycom.h>
#include <sys/unistd.h>
#include <sys/wait.h>
#include <net/bpf.h>
#include <net/if.h>
#include <net/if_types.h>
#include <net/if_var.h>
#include <net/route.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <netinet/ip_mroute.h>
#include <netinet/if_ether.h>
#include <net/if_bridge.h>

// We keep some constants not supported in OpenBSD 5.5 and beyond for
// the promise of compatibility.
#define EMUL_ENABLED		0x1
#define EMUL_NATIVE		0x2
#define IPV6_FAITH		0x1d
#define IPV6_OPTIONS		0x1
#define IPV6_RTHDR_STRICT	0x1
#define IPV6_SOCKOPT_RESERVED1	0x3
#define SIOCGIFGENERIC		0xc020693a
#define SIOCSIFGENERIC		0x80206939
#define WALTSIG			0x4
'

includes_SunOS='
#include <limits.h>
#include <sys/types.h>
#include <sys/select.h>
#include <sys/socket.h>
#include <sys/sockio.h>
#include <sys/stat.h>
#include <sys/stream.h>
#include <sys/mman.h>
#include <sys/wait.h>
#include <sys/ioctl.h>
#include <sys/mkdev.h>
#include <net/bpf.h>
#include <net/if.h>
#include <net/if_arp.h>
#include <net/if_types.h>
#include <net/route.h>
#include <netinet/icmp6.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/ip_mroute.h>
#include <termios.h>
'


includes='
#include <sys/types.h>
#include <sys/file.h>
#include <fcntl.h>
#include <dirent.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/ip6.h>
#include <netinet/tcp.h>
#include <errno.h>
#include <sys/signal.h>
#include <signal.h>
#include <sys/resource.h>
#include <time.h>
'
ccflags="$@"

# Write go tool cgo -godefs input.
(
	echo package unix
	echo
	echo '/*'
	indirect="includes_$(uname)"
	echo "${!indirect} $includes"
	echo '*/'
	echo 'import "C"'
	echo 'import "syscall"'
	echo
	echo 'const ('

	# The gcc command line prints all the #defines
	# it encounters while processing the input
	echo "${!indirect} $includes" | $CC -x c - -E -dM $ccflags |
	awk '
		$1 != "#define" || $2 ~ /\(/ || $3 == "" {next}

		$2 ~ /^E([ABCD]X|[BIS]P|[SD]I|S|FL)$/ {next}  # 386 registers
		$2 ~ /^(SIGEV_|SIGSTKSZ|SIGRT(MIN|MAX))/ {next}
		$2 ~ /^(SCM_SRCRT)$/ {next}
		$2 ~ /^(MAP_FAILED)$/ {next}
		$2 ~ /^ELF_.*$/ {next}# <asm/elf.h> contains ELF_ARCH, etc.

		$2 ~ /^EXTATTR_NAMESPACE_NAMES/ ||
		$2 ~ /^EXTATTR_NAMESPACE_[A-Z]+_STRING/ {next}

		$2 !~ /^ECCAPBITS/ &&
		$2 !~ /^ETH_/ &&
		$2 !~ /^EPROC_/ &&
		$2 !~ /^EQUIV_/ &&
		$2 !~ /^EXPR_/ &&
		$2 !~ /^EVIOC/ &&
		$2 ~ /^E[A-Z0-9_]+$/ ||
		$2 ~ /^B[0-9_]+$/ ||
		$2 ~ /^(OLD|NEW)DEV$/ ||
		$2 == "BOTHER" ||
		$2 ~ /^CI?BAUD(EX)?$/ ||
		$2 == "IBSHIFT" ||
		$2 ~ /^V[A-Z0-9]+$/ ||
		$2 ~ /^CS[A-Z0-9]/ ||
		$2 ~ /^I(SIG|CANON|CRNL|UCLC|EXTEN|MAXBEL|STRIP|UTF8)$/ ||
		$2 ~ /^IGN/ ||
		$2 ~ /^IX(ON|ANY|OFF)$/ ||
		$2 ~ /^IN(LCR|PCK)$/ ||
		$2 !~ "X86_CR3_PCID_NOFLUSH" &&
		$2 ~ /(^FLU?SH)|(FLU?SH$)/ ||
		$2 ~ /^C(LOCAL|READ|MSPAR|RTSCTS)$/ ||
		$2 == "BRKINT" ||
		$2 == "HUPCL" ||
		$2 == "PENDIN" ||
		$2 == "TOSTOP" ||
		$2 == "XCASE" ||
		$2 == "ALTWERASE" ||
		$2 == "NOKERNINFO" ||
		$2 == "NFDBITS" ||
		$2 ~ /^PAR/ ||
		$2 ~ /^SIG[^_]/ ||
		$2 ~ /^O[CNPFPL][A-Z]+[^_][A-Z]+$/ ||
		$2 ~ /^(NL|CR|TAB|BS|VT|FF)DLY$/ ||
		$2 ~ /^(NL|CR|TAB|BS|VT|FF)[0-9]$/ ||
		$2 ~ /^O?XTABS$/ ||
		$2 ~ /^TC[IO](ON|OFF)$/ ||
		$2 ~ /^IN_/ ||
		$2 ~ /^KCM/ ||
		$2 ~ /^LANDLOCK_/ ||
		$2 ~ /^LOCK_(SH|EX|NB|UN)$/ ||
		$2 ~ /^LO_(KEY|NAME)_SIZE$/ ||
		$2 ~ /^LOOP_(CLR|CTL|GET|SET)_/ ||
		$2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT|UDP)_/ ||
		$2 ~ /^NFC_(GENL|PROTO|COMM|RF|SE|DIRECTION|LLCP|SOCKPROTO)_/ ||
		$2 ~ /^NFC_.*_(MAX)?SIZE$/ ||
		$2 ~ /^RAW_PAYLOAD_/ ||
		$2 ~ /^[US]F_/ ||
		$2 ~ /^TP_STATUS_/ ||
		$2 ~ /^FALLOC_/ ||
		$2 ~ /^ICMPV?6?_(FILTER|SEC)/ ||
		$2 == "SOMAXCONN" ||
		$2 == "NAME_MAX" ||
		$2 == "IFNAMSIZ" ||
		$2 ~ /^CTL_(HW|KERN|MAXNAME|NET|QUERY)$/ ||
		$2 ~ /^KERN_(HOSTNAME|OS(RELEASE|TYPE)|VERSION)$/ ||
		$2 ~ /^HW_MACHINE$/ ||
		$2 ~ /^SYSCTL_VERS/ ||
		$2 !~ "MNT_BITS" &&
		$2 ~ /^(MS|MNT|MOUNT|UMOUNT)_/ ||
		$2 ~ /^NS_GET_/ ||
		$2 ~ /^TUN(SET|GET|ATTACH|DETACH)/ ||
		$2 ~ /^(O|F|[ES]?FD|NAME|S|PTRACE|PT|PIOD|TFD)_/ ||
		$2 ~ /^KEXEC_/ ||
		$2 ~ /^LINUX_REBOOT_CMD_/ ||
		$2 ~ /^LINUX_REBOOT_MAGIC[12]$/ ||
		$2 ~ /^MODULE_INIT_/ ||
		$2 !~ "NLA_TYPE_MASK" &&
		$2 !~ /^RTC_VL_(ACCURACY|BACKUP|DATA)/ &&
		$2 ~ /^(NETLINK|NLM|NLMSG|NLA|IFA|IFAN|RT|RTC|RTCF|RTN|RTPROT|RTNH|ARPHRD|ETH_P|NETNSA)_/ ||
		$2 ~ /^FIORDCHK$/ ||
		$2 ~ /^SIOC/ ||
		$2 ~ /^TIOC/ ||
		$2 ~ /^TCGET/ ||
		$2 ~ /^TCSET/ ||
		$2 ~ /^TC(FLSH|SBRKP?|XONC)$/ ||
		$2 !~ "RTF_BITS" &&
		$2 ~ /^(IFF|IFT|NET_RT|RTM(GRP)?|RTF|RTV|RTA|RTAX)_/ ||
		$2 ~ /^BIOC/ ||
		$2 ~ /^DIOC/ ||
		$2 ~ /^RUSAGE_(SELF|CHILDREN|THREAD)/ ||
		$2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|LOCKS|MEMLOCK|MSGQUEUE|NICE|NOFILE|NPROC|RSS|RTPRIO|RTTIME|SIGPENDING|STACK)|RLIM_INFINITY/ ||
		$2 ~ /^PRIO_(PROCESS|PGRP|USER)/ ||
		$2 ~ /^CLONE_[A-Z_]+/ ||
		$2 !~ /^(BPF_TIMEVAL|BPF_FIB_LOOKUP_[A-Z]+)$/ &&
		$2 ~ /^(BPF|DLT)_/ ||
		$2 ~ /^AUDIT_/ ||
		$2 ~ /^(CLOCK|TIMER)_/ ||
		$2 ~ /^CAN_/ ||
		$2 ~ /^CAP_/ ||
		$2 ~ /^CP_/ ||
		$2 ~ /^CPUSTATES$/ ||
		$2 ~ /^CTLIOCGINFO$/ ||
		$2 ~ /^ALG_/ ||
		$2 ~ /^FI(CLONE|DEDUPERANGE)/ ||
		$2 ~ /^FS_(POLICY_FLAGS|KEY_DESC|ENCRYPTION_MODE|[A-Z0-9_]+_KEY_SIZE)/ ||
		$2 ~ /^FS_IOC_.*(ENCRYPTION|VERITY|[GS]ETFLAGS)/ ||
		$2 ~ /^FS_VERITY_/ ||
		$2 ~ /^FSCRYPT_/ ||
		$2 ~ /^DM_/ ||
		$2 ~ /^GRND_/ ||
		$2 ~ /^RND/ ||
		$2 ~ /^KEY_(SPEC|REQKEY_DEFL)_/ ||
		$2 ~ /^KEYCTL_/ ||
		$2 ~ /^PERF_/ ||
		$2 ~ /^SECCOMP_MODE_/ ||
		$2 ~ /^SEEK_/ ||
		$2 ~ /^SPLICE_/ ||
		$2 ~ /^SYNC_FILE_RANGE_/ ||
		$2 !~ /IOC_MAGIC/ &&
		$2 ~ /^[A-Z][A-Z0-9_]+_MAGIC2?$/ ||
		$2 ~ /^(VM|VMADDR)_/ ||
		$2 ~ /^IOCTL_VM_SOCKETS_/ ||
		$2 ~ /^(TASKSTATS|TS)_/ ||
		$2 ~ /^CGROUPSTATS_/ ||
		$2 ~ /^GENL_/ ||
		$2 ~ /^STATX_/ ||
		$2 ~ /^RENAME/ ||
		$2 ~ /^UBI_IOC[A-Z]/ ||
		$2 ~ /^UTIME_/ ||
		$2 ~ /^XATTR_(CREATE|REPLACE|NO(DEFAULT|FOLLOW|SECURITY)|SHOWCOMPRESSION)/ ||
		$2 ~ /^ATTR_(BIT_MAP_COUNT|(CMN|VOL|FILE)_)/ ||
		$2 ~ /^FSOPT_/ ||
		$2 ~ /^WDIO[CFS]_/ ||
		$2 ~ /^NFN/ ||
		$2 ~ /^XDP_/ ||
		$2 ~ /^RWF_/ ||
		$2 ~ /^(HDIO|WIN|SMART)_/ ||
		$2 ~ /^CRYPTO_/ ||
		$2 ~ /^TIPC_/ ||
		$2 !~  "DEVLINK_RELOAD_LIMITS_VALID_MASK" &&
		$2 ~ /^DEVLINK_/ ||
		$2 ~ /^ETHTOOL_/ ||
		$2 ~ /^LWTUNNEL_IP/ ||
		$2 ~ /^ITIMER_/ ||
		$2 !~ "WMESGLEN" &&
		$2 ~ /^W[A-Z0-9]+$/ ||
		$2 ~ /^P_/ ||
		$2 ~/^PPPIOC/ ||
		$2 ~ /^FAN_|FANOTIFY_/ ||
		$2 == "HID_MAX_DESCRIPTOR_SIZE" ||
		$2 ~ /^_?HIDIOC/ ||
		$2 ~ /^BUS_(USB|HIL|BLUETOOTH|VIRTUAL)$/ ||
		$2 ~ /^MTD/ ||
		$2 ~ /^OTP/ ||
		$2 ~ /^MEM/ ||
		$2 ~ /^WG/ ||
		$2 ~ /^FIB_RULE_/ ||
		$2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE)/ {printf("\t%s = C.%s\n", $2, $2)}
		$2 ~ /^__WCOREFLAG$/ {next}
		$2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)}

		{next}
	' | sort

	echo ')'
) >_const.go

# Pull out the error names for later.
errors=$(
	echo '#include <errno.h>' | $CC -x c - -E -dM $ccflags |
	awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print $2 }' |
	sort
)

# Pull out the signal names for later.
signals=$(
	echo '#include <signal.h>' | $CC -x c - -E -dM $ccflags |
	awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print $2 }' |
	grep -v 'SIGSTKSIZE\|SIGSTKSZ\|SIGRT\|SIGMAX64' |
	sort
)

# Again, writing regexps to a file.
echo '#include <errno.h>' | $CC -x c - -E -dM $ccflags |
	awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print "^\t" $2 "[ \t]*=" }' |
	sort >_error.grep
echo '#include <signal.h>' | $CC -x c - -E -dM $ccflags |
	awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print "^\t" $2 "[ \t]*=" }' |
	grep -v 'SIGSTKSIZE\|SIGSTKSZ\|SIGRT\|SIGMAX64' |
	sort >_signal.grep

echo '// mkerrors.sh' "$@"
echo '// Code generated by the command above; see README.md. DO NOT EDIT.'
echo
echo "//go:build ${GOARCH} && ${GOOS}"
echo "// +build ${GOARCH},${GOOS}"
echo
go tool cgo -godefs -- "$@" _const.go >_error.out
cat _error.out | grep -vf _error.grep | grep -vf _signal.grep
echo
echo '// Errors'
echo 'const ('
cat _error.out | grep -f _error.grep | sed 's/=\(.*\)/= syscall.Errno(\1)/'
echo ')'

echo
echo '// Signals'
echo 'const ('
cat _error.out | grep -f _signal.grep | sed 's/=\(.*\)/= syscall.Signal(\1)/'
echo ')'

# Run C program to print error and syscall strings.
(
	echo -E "
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <ctype.h>
#include <string.h>
#include <signal.h>

#define nelem(x) (sizeof(x)/sizeof((x)[0]))

enum { A = 'A', Z = 'Z', a = 'a', z = 'z' }; // avoid need for single quotes below

struct tuple {
	int num;
	const char *name;
};

struct tuple errors[] = {
"
	for i in $errors
	do
		echo -E '	{'$i', "'$i'" },'
	done

	echo -E "
};

struct tuple signals[] = {
"
	for i in $signals
	do
		echo -E '	{'$i', "'$i'" },'
	done

	# Use -E because on some systems bash builtin interprets \n itself.
	echo -E '
};

static int
tuplecmp(const void *a, const void *b)
{
	return ((struct tuple *)a)->num - ((struct tuple *)b)->num;
}

int
main(void)
{
	int i, e;
	char buf[1024], *p;

	printf("\n\n// Error table\n");
	printf("var errorList = [...]struct {\n");
	printf("\tnum  syscall.Errno\n");
	printf("\tname string\n");
	printf("\tdesc string\n");
	printf("} {\n");
	qsort(errors, nelem(errors), sizeof errors[0], tuplecmp);
	for(i=0; i<nelem(errors); i++) {
		e = errors[i].num;
		if(i > 0 && errors[i-1].num == e)
			continue;
		strcpy(buf, strerror(e));
		// lowercase first letter: Bad -> bad, but STREAM -> STREAM.
		if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z)
			buf[0] += a - A;
		printf("\t{ %d, \"%s\", \"%s\" },\n", e, errors[i].name, buf);
	}
	printf("}\n\n");

	printf("\n\n// Signal table\n");
	printf("var signalList = [...]struct {\n");
	printf("\tnum  syscall.Signal\n");
	printf("\tname string\n");
	printf("\tdesc string\n");
	printf("} {\n");
	qsort(signals, nelem(signals), sizeof signals[0], tuplecmp);
	for(i=0; i<nelem(signals); i++) {
		e = signals[i].num;
		if(i > 0 && signals[i-1].num == e)
			continue;
		strcpy(buf, strsignal(e));
		// lowercase first letter: Bad -> bad, but STREAM -> STREAM.
		if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z)
			buf[0] += a - A;
		// cut trailing : number.
		p = strrchr(buf, ":"[0]);
		if(p)
			*p = '\0';
		printf("\t{ %d, \"%s\", \"%s\" },\n", e, signals[i].name, buf);
	}
	printf("}\n\n");

	return 0;
}

'
) >_errors.c

$CC $ccflags -o _errors _errors.c && $GORUN ./_errors && rm -f _errors.c _errors _const.go _error.grep _signal.grep _error.out
07070100000DD2000081A4000000000000000000000001645E367C000001C9000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/pagesize_unix.go // Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris

// For Unix, get the pagesize from the runtime.

package unix

import "syscall"

func Getpagesize() int {
	return syscall.Getpagesize()
}
   07070100000DD3000081A4000000000000000000000001645E367C00000EA2000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/pledge_openbsd.go    // Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package unix

import (
	"errors"
	"fmt"
	"strconv"
	"syscall"
	"unsafe"
)

// Pledge implements the pledge syscall.
//
// The pledge syscall does not accept execpromises on OpenBSD releases
// before 6.3.
//
// execpromises must be empty when Pledge is called on OpenBSD
// releases predating 6.3, otherwise an error will be returned.
//
// For more information see pledge(2).
func Pledge(promises, execpromises string) error {
	maj, min, err := majmin()
	if err != nil {
		return err
	}

	err = pledgeAvailable(maj, min, execpromises)
	if err != nil {
		return err
	}

	pptr, err := syscall.BytePtrFromString(promises)
	if err != nil {
		return err
	}

	// This variable will hold either a nil unsafe.Pointer or
	// an unsafe.Pointer to a string (execpromises).
	var expr unsafe.Pointer

	// If we're running on OpenBSD > 6.2, pass execpromises to the syscall.
	if maj > 6 || (maj == 6 && min > 2) {
		exptr, err := syscall.BytePtrFromString(execpromises)
		if err != nil {
			return err
		}
		expr = unsafe.Pointer(exptr)
	}

	_, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(unsafe.Pointer(pptr)), uintptr(expr), 0)
	if e != 0 {
		return e
	}

	return nil
}

// PledgePromises implements the pledge syscall.
//
// This changes the promises and leaves the execpromises untouched.
//
// For more information see pledge(2).
func PledgePromises(promises string) error {
	maj, min, err := majmin()
	if err != nil {
		return err
	}

	err = pledgeAvailable(maj, min, "")
	if err != nil {
		return err
	}

	// This variable holds the execpromises and is always nil.
	var expr unsafe.Pointer

	pptr, err := syscall.BytePtrFromString(promises)
	if err != nil {
		return err
	}

	_, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(unsafe.Pointer(pptr)), uintptr(expr), 0)
	if e != 0 {
		return e
	}

	return nil
}

// PledgeExecpromises implements the pledge syscall.
//
// This changes the execpromises and leaves the promises untouched.
//
// For more information see pledge(2).
func PledgeExecpromises(execpromises string) error {
	maj, min, err := majmin()
	if err != nil {
		return err
	}

	err = pledgeAvailable(maj, min, execpromises)
	if err != nil {
		return err
	}

	// This variable holds the promises and is always nil.
	var pptr unsafe.Pointer

	exptr, err := syscall.BytePtrFromString(execpromises)
	if err != nil {
		return err
	}

	_, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(pptr), uintptr(unsafe.Pointer(exptr)), 0)
	if e != 0 {
		return e
	}

	return nil
}

// majmin returns major and minor version number for an OpenBSD system.
func majmin() (major int, minor int, err error) {
	var v Utsname
	err = Uname(&v)
	if err != nil {
		return
	}

	major, err = strconv.Atoi(string(v.Release[0]))
	if err != nil {
		err = errors.New("cannot parse major version number returned by uname")
		return
	}

	minor, err = strconv.Atoi(string(v.Release[2]))
	if err != nil {
		err = errors.New("cannot parse minor version number returned by uname")
		return
	}

	return
}

// pledgeAvailable checks for availability of the pledge(2) syscall
// based on the running OpenBSD version.
func pledgeAvailable(maj, min int, execpromises string) error {
	// If OpenBSD <= 5.9, pledge is not available.
	if (maj == 5 && min != 9) || maj < 5 {
		return fmt.Errorf("pledge syscall is not available on OpenBSD %d.%d", maj, min)
	}

	// If OpenBSD <= 6.2 and execpromises is not empty,
	// return an error - execpromises is not available before 6.3
	if (maj < 6 || (maj == 6 && min <= 2)) && execpromises != "" {
		return fmt.Errorf("cannot use execpromises on OpenBSD %d.%d", maj, min)
	}

	return nil
}
  07070100000DD4000081A4000000000000000000000001645E367C000001E2000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ptrace_darwin.go // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build darwin && !ios
// +build darwin,!ios

package unix

import "unsafe"

func ptrace(request int, pid int, addr uintptr, data uintptr) error {
	return ptrace1(request, pid, addr, data)
}

func ptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) error {
	return ptrace1Ptr(request, pid, addr, data)
}
  07070100000DD5000081A4000000000000000000000001645E367C000001A4000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ptrace_ios.go    // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build ios
// +build ios

package unix

import "unsafe"

func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
	return ENOTSUP
}

func ptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) {
	return ENOTSUP
}
07070100000DD6000081A4000000000000000000000001645E367C000002A3000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/race.go  // Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build (darwin && race) || (linux && race) || (freebsd && race)
// +build darwin,race linux,race freebsd,race

package unix

import (
	"runtime"
	"unsafe"
)

const raceenabled = true

func raceAcquire(addr unsafe.Pointer) {
	runtime.RaceAcquire(addr)
}

func raceReleaseMerge(addr unsafe.Pointer) {
	runtime.RaceReleaseMerge(addr)
}

func raceReadRange(addr unsafe.Pointer, len int) {
	runtime.RaceReadRange(addr, len)
}

func raceWriteRange(addr unsafe.Pointer, len int) {
	runtime.RaceWriteRange(addr, len)
}
 07070100000DD7000081A4000000000000000000000001645E367C00000283000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/race0.go // Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build aix || (darwin && !race) || (linux && !race) || (freebsd && !race) || netbsd || openbsd || solaris || dragonfly || zos
// +build aix darwin,!race linux,!race freebsd,!race netbsd openbsd solaris dragonfly zos

package unix

import (
	"unsafe"
)

const raceenabled = false

func raceAcquire(addr unsafe.Pointer) {
}

func raceReleaseMerge(addr unsafe.Pointer) {
}

func raceReadRange(addr unsafe.Pointer, len int) {
}

func raceWriteRange(addr unsafe.Pointer, len int) {
}
 07070100000DD8000081A4000000000000000000000001645E367C000001C6000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/readdirent_getdents.go   // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build aix || dragonfly || freebsd || linux || netbsd || openbsd
// +build aix dragonfly freebsd linux netbsd openbsd

package unix

// ReadDirent reads directory entries from fd and writes them into buf.
func ReadDirent(fd int, buf []byte) (n int, err error) {
	return Getdents(fd, buf)
}
  07070100000DD9000081A4000000000000000000000001645E367C000002CB000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/readdirent_getdirentries.go  // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build darwin
// +build darwin

package unix

import "unsafe"

// ReadDirent reads directory entries from fd and writes them into buf.
func ReadDirent(fd int, buf []byte) (n int, err error) {
	// Final argument is (basep *uintptr) and the syscall doesn't take nil.
	// 64 bits should be enough. (32 bits isn't even on 386). Since the
	// actual system call is getdirentries64, 64 is a good guess.
	// TODO(rsc): Can we use a single global basep for all calls?
	var base = (*uintptr)(unsafe.Pointer(new(uint64)))
	return Getdirentries(fd, buf, base)
}
 07070100000DDA000081A4000000000000000000000001645E367C00000220000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go    // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package unix

// Round the length of a raw sockaddr up to align it properly.
func cmsgAlignOf(salen int) int {
	salign := SizeofPtr
	if SizeofPtr == 8 && !supportsABI(_dragonflyABIChangeVersion) {
		// 64-bit Dragonfly before the September 2019 ABI changes still requires
		// 32-bit aligned access to network subsystem.
		salign = 4
	}
	return (salen + salign - 1) & ^(salign - 1)
}
07070100000DDB000081A4000000000000000000000001645E367C00000A62000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/sockcmsg_linux.go    // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Socket control messages

package unix

import "unsafe"

// UnixCredentials encodes credentials into a socket control message
// for sending to another process. This can be used for
// authentication.
func UnixCredentials(ucred *Ucred) []byte {
	b := make([]byte, CmsgSpace(SizeofUcred))
	h := (*Cmsghdr)(unsafe.Pointer(&b[0]))
	h.Level = SOL_SOCKET
	h.Type = SCM_CREDENTIALS
	h.SetLen(CmsgLen(SizeofUcred))
	*(*Ucred)(h.data(0)) = *ucred
	return b
}

// ParseUnixCredentials decodes a socket control message that contains
// credentials in a Ucred structure. To receive such a message, the
// SO_PASSCRED option must be enabled on the socket.
func ParseUnixCredentials(m *SocketControlMessage) (*Ucred, error) {
	if m.Header.Level != SOL_SOCKET {
		return nil, EINVAL
	}
	if m.Header.Type != SCM_CREDENTIALS {
		return nil, EINVAL
	}
	ucred := *(*Ucred)(unsafe.Pointer(&m.Data[0]))
	return &ucred, nil
}

// PktInfo4 encodes Inet4Pktinfo into a socket control message of type IP_PKTINFO.
func PktInfo4(info *Inet4Pktinfo) []byte {
	b := make([]byte, CmsgSpace(SizeofInet4Pktinfo))
	h := (*Cmsghdr)(unsafe.Pointer(&b[0]))
	h.Level = SOL_IP
	h.Type = IP_PKTINFO
	h.SetLen(CmsgLen(SizeofInet4Pktinfo))
	*(*Inet4Pktinfo)(h.data(0)) = *info
	return b
}

// PktInfo6 encodes Inet6Pktinfo into a socket control message of type IPV6_PKTINFO.
func PktInfo6(info *Inet6Pktinfo) []byte {
	b := make([]byte, CmsgSpace(SizeofInet6Pktinfo))
	h := (*Cmsghdr)(unsafe.Pointer(&b[0]))
	h.Level = SOL_IPV6
	h.Type = IPV6_PKTINFO
	h.SetLen(CmsgLen(SizeofInet6Pktinfo))
	*(*Inet6Pktinfo)(h.data(0)) = *info
	return b
}

// ParseOrigDstAddr decodes a socket control message containing the original
// destination address. To receive such a message the IP_RECVORIGDSTADDR or
// IPV6_RECVORIGDSTADDR option must be enabled on the socket.
func ParseOrigDstAddr(m *SocketControlMessage) (Sockaddr, error) {
	switch {
	case m.Header.Level == SOL_IP && m.Header.Type == IP_ORIGDSTADDR:
		pp := (*RawSockaddrInet4)(unsafe.Pointer(&m.Data[0]))
		sa := new(SockaddrInet4)
		p := (*[2]byte)(unsafe.Pointer(&pp.Port))
		sa.Port = int(p[0])<<8 + int(p[1])
		sa.Addr = pp.Addr
		return sa, nil

	case m.Header.Level == SOL_IPV6 && m.Header.Type == IPV6_ORIGDSTADDR:
		pp := (*RawSockaddrInet6)(unsafe.Pointer(&m.Data[0]))
		sa := new(SockaddrInet6)
		p := (*[2]byte)(unsafe.Pointer(&pp.Port))
		sa.Port = int(p[0])<<8 + int(p[1])
		sa.ZoneId = pp.Scope_id
		sa.Addr = pp.Addr
		return sa, nil

	default:
		return nil, EINVAL
	}
}
  07070100000DDC000081A4000000000000000000000001645E367C00000CD6000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/sockcmsg_unix.go // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos

// Socket control messages

package unix

import (
	"unsafe"
)

// CmsgLen returns the value to store in the Len field of the Cmsghdr
// structure, taking into account any necessary alignment.
func CmsgLen(datalen int) int {
	return cmsgAlignOf(SizeofCmsghdr) + datalen
}

// CmsgSpace returns the number of bytes an ancillary element with
// payload of the passed data length occupies.
func CmsgSpace(datalen int) int {
	return cmsgAlignOf(SizeofCmsghdr) + cmsgAlignOf(datalen)
}

func (h *Cmsghdr) data(offset uintptr) unsafe.Pointer {
	return unsafe.Pointer(uintptr(unsafe.Pointer(h)) + uintptr(cmsgAlignOf(SizeofCmsghdr)) + offset)
}

// SocketControlMessage represents a socket control message.
type SocketControlMessage struct {
	Header Cmsghdr
	Data   []byte
}

// ParseSocketControlMessage parses b as an array of socket control
// messages.
func ParseSocketControlMessage(b []byte) ([]SocketControlMessage, error) {
	var msgs []SocketControlMessage
	i := 0
	for i+CmsgLen(0) <= len(b) {
		h, dbuf, err := socketControlMessageHeaderAndData(b[i:])
		if err != nil {
			return nil, err
		}
		m := SocketControlMessage{Header: *h, Data: dbuf}
		msgs = append(msgs, m)
		i += cmsgAlignOf(int(h.Len))
	}
	return msgs, nil
}

// ParseOneSocketControlMessage parses a single socket control message from b, returning the message header,
// message data (a slice of b), and the remainder of b after that single message.
// When there are no remaining messages, len(remainder) == 0.
func ParseOneSocketControlMessage(b []byte) (hdr Cmsghdr, data []byte, remainder []byte, err error) {
	h, dbuf, err := socketControlMessageHeaderAndData(b)
	if err != nil {
		return Cmsghdr{}, nil, nil, err
	}
	if i := cmsgAlignOf(int(h.Len)); i < len(b) {
		remainder = b[i:]
	}
	return *h, dbuf, remainder, nil
}

func socketControlMessageHeaderAndData(b []byte) (*Cmsghdr, []byte, error) {
	h := (*Cmsghdr)(unsafe.Pointer(&b[0]))
	if h.Len < SizeofCmsghdr || uint64(h.Len) > uint64(len(b)) {
		return nil, nil, EINVAL
	}
	return h, b[cmsgAlignOf(SizeofCmsghdr):h.Len], nil
}

// UnixRights encodes a set of open file descriptors into a socket
// control message for sending to another process.
func UnixRights(fds ...int) []byte {
	datalen := len(fds) * 4
	b := make([]byte, CmsgSpace(datalen))
	h := (*Cmsghdr)(unsafe.Pointer(&b[0]))
	h.Level = SOL_SOCKET
	h.Type = SCM_RIGHTS
	h.SetLen(CmsgLen(datalen))
	for i, fd := range fds {
		*(*int32)(h.data(4 * uintptr(i))) = int32(fd)
	}
	return b
}

// ParseUnixRights decodes a socket control message that contains an
// integer array of open file descriptors from another process.
func ParseUnixRights(m *SocketControlMessage) ([]int, error) {
	if m.Header.Level != SOL_SOCKET {
		return nil, EINVAL
	}
	if m.Header.Type != SCM_RIGHTS {
		return nil, EINVAL
	}
	fds := make([]int, len(m.Data)>>2)
	for i, j := 0, 0; i < len(m.Data); i += 4 {
		fds[j] = int(*(*int32)(unsafe.Pointer(&m.Data[i])))
		j++
	}
	return fds, nil
}
  07070100000DDD000081A4000000000000000000000001645E367C0000050F000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/sockcmsg_unix_other.go   // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build aix || darwin || freebsd || linux || netbsd || openbsd || solaris || zos
// +build aix darwin freebsd linux netbsd openbsd solaris zos

package unix

import (
	"runtime"
)

// Round the length of a raw sockaddr up to align it properly.
func cmsgAlignOf(salen int) int {
	salign := SizeofPtr

	// dragonfly needs to check ABI version at runtime, see cmsgAlignOf in
	// sockcmsg_dragonfly.go
	switch runtime.GOOS {
	case "aix":
		// There is no alignment on AIX.
		salign = 1
	case "darwin", "ios", "illumos", "solaris":
		// NOTE: It seems like 64-bit Darwin, Illumos and Solaris
		// kernels still require 32-bit aligned access to network
		// subsystem.
		if SizeofPtr == 8 {
			salign = 4
		}
	case "netbsd", "openbsd":
		// NetBSD and OpenBSD armv7 require 64-bit alignment.
		if runtime.GOARCH == "arm" {
			salign = 8
		}
		// NetBSD aarch64 requires 128-bit alignment.
		if runtime.GOOS == "netbsd" && runtime.GOARCH == "arm64" {
			salign = 16
		}
	case "zos":
		// z/OS socket macros use [32-bit] sizeof(int) alignment,
		// not pointer width.
		salign = SizeofInt
	}

	return (salen + salign - 1) & ^(salign - 1)
}
 07070100000DDE000081A4000000000000000000000001645E367C00000B8A000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall.go   // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos

// Package unix contains an interface to the low-level operating system
// primitives. OS details vary depending on the underlying system, and
// by default, godoc will display OS-specific documentation for the current
// system. If you want godoc to display OS documentation for another
// system, set $GOOS and $GOARCH to the desired system. For example, if
// you want to view documentation for freebsd/arm on linux/amd64, set $GOOS
// to freebsd and $GOARCH to arm.
//
// The primary use of this package is inside other packages that provide a more
// portable interface to the system, such as "os", "time" and "net".  Use
// those packages rather than this one if you can.
//
// For details of the functions and data types in this package consult
// the manuals for the appropriate operating system.
//
// These calls return err == nil to indicate success; otherwise
// err represents an operating system error describing the failure and
// holds a value of type syscall.Errno.
package unix // import "golang.org/x/sys/unix"

import (
	"bytes"
	"strings"
	"unsafe"
)

// ByteSliceFromString returns a NUL-terminated slice of bytes
// containing the text of s. If s contains a NUL byte at any
// location, it returns (nil, EINVAL).
func ByteSliceFromString(s string) ([]byte, error) {
	if strings.IndexByte(s, 0) != -1 {
		return nil, EINVAL
	}
	a := make([]byte, len(s)+1)
	copy(a, s)
	return a, nil
}

// BytePtrFromString returns a pointer to a NUL-terminated array of
// bytes containing the text of s. If s contains a NUL byte at any
// location, it returns (nil, EINVAL).
func BytePtrFromString(s string) (*byte, error) {
	a, err := ByteSliceFromString(s)
	if err != nil {
		return nil, err
	}
	return &a[0], nil
}

// ByteSliceToString returns a string form of the text represented by the slice s, with a terminating NUL and any
// bytes after the NUL removed.
func ByteSliceToString(s []byte) string {
	if i := bytes.IndexByte(s, 0); i != -1 {
		s = s[:i]
	}
	return string(s)
}

// BytePtrToString takes a pointer to a sequence of text and returns the corresponding string.
// If the pointer is nil, it returns the empty string. It assumes that the text sequence is terminated
// at a zero byte; if the zero byte is not present, the program may crash.
func BytePtrToString(p *byte) string {
	if p == nil {
		return ""
	}
	if *p == 0 {
		return ""
	}

	// Find NUL terminator.
	n := 0
	for ptr := unsafe.Pointer(p); *(*byte)(ptr) != 0; n++ {
		ptr = unsafe.Pointer(uintptr(ptr) + 1)
	}

	return string(unsafe.Slice(p, n))
}

// Single-word zero for use when we need a valid pointer to 0 bytes.
var _zero uintptr
  07070100000DDF000081A4000000000000000000000001645E367C000041C3000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_aix.go   // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build aix
// +build aix

// Aix system calls.
// This file is compiled as ordinary Go code,
// but it is also input to mksyscall,
// which parses the //sys lines and generates system call stubs.
// Note that sometimes we use a lowercase //sys name and
// wrap it in our own nicer implementation.

package unix

import "unsafe"

/*
 * Wrapped
 */

func Access(path string, mode uint32) (err error) {
	return Faccessat(AT_FDCWD, path, mode, 0)
}

func Chmod(path string, mode uint32) (err error) {
	return Fchmodat(AT_FDCWD, path, mode, 0)
}

func Chown(path string, uid int, gid int) (err error) {
	return Fchownat(AT_FDCWD, path, uid, gid, 0)
}

func Creat(path string, mode uint32) (fd int, err error) {
	return Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode)
}

//sys	utimes(path string, times *[2]Timeval) (err error)

func Utimes(path string, tv []Timeval) error {
	if len(tv) != 2 {
		return EINVAL
	}
	return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
}

//sys	utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error)

func UtimesNano(path string, ts []Timespec) error {
	if len(ts) != 2 {
		return EINVAL
	}
	return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
}

func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {
	if ts == nil {
		return utimensat(dirfd, path, nil, flags)
	}
	if len(ts) != 2 {
		return EINVAL
	}
	return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)
}

func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {
	if sa.Port < 0 || sa.Port > 0xFFFF {
		return nil, 0, EINVAL
	}
	sa.raw.Family = AF_INET
	p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
	p[0] = byte(sa.Port >> 8)
	p[1] = byte(sa.Port)
	sa.raw.Addr = sa.Addr
	return unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil
}

func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {
	if sa.Port < 0 || sa.Port > 0xFFFF {
		return nil, 0, EINVAL
	}
	sa.raw.Family = AF_INET6
	p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
	p[0] = byte(sa.Port >> 8)
	p[1] = byte(sa.Port)
	sa.raw.Scope_id = sa.ZoneId
	sa.raw.Addr = sa.Addr
	return unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil
}

func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {
	name := sa.Name
	n := len(name)
	if n > len(sa.raw.Path) {
		return nil, 0, EINVAL
	}
	if n == len(sa.raw.Path) && name[0] != '@' {
		return nil, 0, EINVAL
	}
	sa.raw.Family = AF_UNIX
	for i := 0; i < n; i++ {
		sa.raw.Path[i] = uint8(name[i])
	}
	// length is family (uint16), name, NUL.
	sl := _Socklen(2)
	if n > 0 {
		sl += _Socklen(n) + 1
	}
	if sa.raw.Path[0] == '@' {
		sa.raw.Path[0] = 0
		// Don't count trailing NUL for abstract address.
		sl--
	}

	return unsafe.Pointer(&sa.raw), sl, nil
}

func Getsockname(fd int) (sa Sockaddr, err error) {
	var rsa RawSockaddrAny
	var len _Socklen = SizeofSockaddrAny
	if err = getsockname(fd, &rsa, &len); err != nil {
		return
	}
	return anyToSockaddr(fd, &rsa)
}

//sys	getcwd(buf []byte) (err error)

const ImplementsGetwd = true

func Getwd() (ret string, err error) {
	for len := uint64(4096); ; len *= 2 {
		b := make([]byte, len)
		err := getcwd(b)
		if err == nil {
			i := 0
			for b[i] != 0 {
				i++
			}
			return string(b[0:i]), nil
		}
		if err != ERANGE {
			return "", err
		}
	}
}

func Getcwd(buf []byte) (n int, err error) {
	err = getcwd(buf)
	if err == nil {
		i := 0
		for buf[i] != 0 {
			i++
		}
		n = i + 1
	}
	return
}

func Getgroups() (gids []int, err error) {
	n, err := getgroups(0, nil)
	if err != nil {
		return nil, err
	}
	if n == 0 {
		return nil, nil
	}

	// Sanity check group count. Max is 16 on BSD.
	if n < 0 || n > 1000 {
		return nil, EINVAL
	}

	a := make([]_Gid_t, n)
	n, err = getgroups(n, &a[0])
	if err != nil {
		return nil, err
	}
	gids = make([]int, n)
	for i, v := range a[0:n] {
		gids[i] = int(v)
	}
	return
}

func Setgroups(gids []int) (err error) {
	if len(gids) == 0 {
		return setgroups(0, nil)
	}

	a := make([]_Gid_t, len(gids))
	for i, v := range gids {
		a[i] = _Gid_t(v)
	}
	return setgroups(len(a), &a[0])
}

/*
 * Socket
 */

//sys	accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)

func Accept(fd int) (nfd int, sa Sockaddr, err error) {
	var rsa RawSockaddrAny
	var len _Socklen = SizeofSockaddrAny
	nfd, err = accept(fd, &rsa, &len)
	if nfd == -1 {
		return
	}
	sa, err = anyToSockaddr(fd, &rsa)
	if err != nil {
		Close(nfd)
		nfd = 0
	}
	return
}

func recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) {
	var msg Msghdr
	msg.Name = (*byte)(unsafe.Pointer(rsa))
	msg.Namelen = uint32(SizeofSockaddrAny)
	var dummy byte
	if len(oob) > 0 {
		// receive at least one normal byte
		if emptyIovecs(iov) {
			var iova [1]Iovec
			iova[0].Base = &dummy
			iova[0].SetLen(1)
			iov = iova[:]
		}
		msg.Control = (*byte)(unsafe.Pointer(&oob[0]))
		msg.SetControllen(len(oob))
	}
	if len(iov) > 0 {
		msg.Iov = &iov[0]
		msg.SetIovlen(len(iov))
	}
	if n, err = recvmsg(fd, &msg, flags); n == -1 {
		return
	}
	oobn = int(msg.Controllen)
	recvflags = int(msg.Flags)
	return
}

func sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) {
	var msg Msghdr
	msg.Name = (*byte)(unsafe.Pointer(ptr))
	msg.Namelen = uint32(salen)
	var dummy byte
	var empty bool
	if len(oob) > 0 {
		// send at least one normal byte
		empty = emptyIovecs(iov)
		if empty {
			var iova [1]Iovec
			iova[0].Base = &dummy
			iova[0].SetLen(1)
			iov = iova[:]
		}
		msg.Control = (*byte)(unsafe.Pointer(&oob[0]))
		msg.SetControllen(len(oob))
	}
	if len(iov) > 0 {
		msg.Iov = &iov[0]
		msg.SetIovlen(len(iov))
	}
	if n, err = sendmsg(fd, &msg, flags); err != nil {
		return 0, err
	}
	if len(oob) > 0 && empty {
		n = 0
	}
	return n, nil
}

func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
	switch rsa.Addr.Family {

	case AF_UNIX:
		pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))
		sa := new(SockaddrUnix)

		// Some versions of AIX have a bug in getsockname (see IV78655).
		// We can't rely on sa.Len being set correctly.
		n := SizeofSockaddrUnix - 3 // subtract leading Family, Len, terminating NUL.
		for i := 0; i < n; i++ {
			if pp.Path[i] == 0 {
				n = i
				break
			}
		}
		sa.Name = string(unsafe.Slice((*byte)(unsafe.Pointer(&pp.Path[0])), n))
		return sa, nil

	case AF_INET:
		pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))
		sa := new(SockaddrInet4)
		p := (*[2]byte)(unsafe.Pointer(&pp.Port))
		sa.Port = int(p[0])<<8 + int(p[1])
		sa.Addr = pp.Addr
		return sa, nil

	case AF_INET6:
		pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))
		sa := new(SockaddrInet6)
		p := (*[2]byte)(unsafe.Pointer(&pp.Port))
		sa.Port = int(p[0])<<8 + int(p[1])
		sa.ZoneId = pp.Scope_id
		sa.Addr = pp.Addr
		return sa, nil
	}
	return nil, EAFNOSUPPORT
}

func Gettimeofday(tv *Timeval) (err error) {
	err = gettimeofday(tv, nil)
	return
}

func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	if raceenabled {
		raceReleaseMerge(unsafe.Pointer(&ioSync))
	}
	return sendfile(outfd, infd, offset, count)
}

// TODO
func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	return -1, ENOSYS
}

func direntIno(buf []byte) (uint64, bool) {
	return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))
}

func direntReclen(buf []byte) (uint64, bool) {
	return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
}

func direntNamlen(buf []byte) (uint64, bool) {
	reclen, ok := direntReclen(buf)
	if !ok {
		return 0, false
	}
	return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true
}

//sys	getdirent(fd int, buf []byte) (n int, err error)

func Getdents(fd int, buf []byte) (n int, err error) {
	return getdirent(fd, buf)
}

//sys	wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error)

func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {
	var status _C_int
	var r Pid_t
	err = ERESTART
	// AIX wait4 may return with ERESTART errno, while the processus is still
	// active.
	for err == ERESTART {
		r, err = wait4(Pid_t(pid), &status, options, rusage)
	}
	wpid = int(r)
	if wstatus != nil {
		*wstatus = WaitStatus(status)
	}
	return
}

/*
 * Wait
 */

type WaitStatus uint32

func (w WaitStatus) Stopped() bool { return w&0x40 != 0 }
func (w WaitStatus) StopSignal() Signal {
	if !w.Stopped() {
		return -1
	}
	return Signal(w>>8) & 0xFF
}

func (w WaitStatus) Exited() bool { return w&0xFF == 0 }
func (w WaitStatus) ExitStatus() int {
	if !w.Exited() {
		return -1
	}
	return int((w >> 8) & 0xFF)
}

func (w WaitStatus) Signaled() bool { return w&0x40 == 0 && w&0xFF != 0 }
func (w WaitStatus) Signal() Signal {
	if !w.Signaled() {
		return -1
	}
	return Signal(w>>16) & 0xFF
}

func (w WaitStatus) Continued() bool { return w&0x01000000 != 0 }

func (w WaitStatus) CoreDump() bool { return w&0x80 == 0x80 }

func (w WaitStatus) TrapCause() int { return -1 }

//sys	ioctl(fd int, req int, arg uintptr) (err error)
//sys	ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) = ioctl

// fcntl must never be called with cmd=F_DUP2FD because it doesn't work on AIX
// There is no way to create a custom fcntl and to keep //sys fcntl easily,
// Therefore, the programmer must call dup2 instead of fcntl in this case.

// FcntlInt performs a fcntl syscall on fd with the provided command and argument.
//sys	FcntlInt(fd uintptr, cmd int, arg int) (r int,err error) = fcntl

// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.
//sys	FcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) = fcntl

//sys	fcntl(fd int, cmd int, arg int) (val int, err error)

//sys	fsyncRange(fd int, how int, start int64, length int64) (err error) = fsync_range

func Fsync(fd int) error {
	return fsyncRange(fd, O_SYNC, 0, 0)
}

/*
 * Direct access
 */

//sys	Acct(path string) (err error)
//sys	Chdir(path string) (err error)
//sys	Chroot(path string) (err error)
//sys	Close(fd int) (err error)
//sys	Dup(oldfd int) (fd int, err error)
//sys	Exit(code int)
//sys	Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
//sys	Fchdir(fd int) (err error)
//sys	Fchmod(fd int, mode uint32) (err error)
//sys	Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
//sys	Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
//sys	Fdatasync(fd int) (err error)
// readdir_r
//sysnb	Getpgid(pid int) (pgid int, err error)

//sys	Getpgrp() (pid int)

//sysnb	Getpid() (pid int)
//sysnb	Getppid() (ppid int)
//sys	Getpriority(which int, who int) (prio int, err error)
//sysnb	Getrusage(who int, rusage *Rusage) (err error)
//sysnb	Getsid(pid int) (sid int, err error)
//sysnb	Kill(pid int, sig Signal) (err error)
//sys	Klogctl(typ int, buf []byte) (n int, err error) = syslog
//sys	Mkdir(dirfd int, path string, mode uint32) (err error)
//sys	Mkdirat(dirfd int, path string, mode uint32) (err error)
//sys	Mkfifo(path string, mode uint32) (err error)
//sys	Mknod(path string, mode uint32, dev int) (err error)
//sys	Mknodat(dirfd int, path string, mode uint32, dev int) (err error)
//sys	Nanosleep(time *Timespec, leftover *Timespec) (err error)
//sys	Open(path string, mode int, perm uint32) (fd int, err error) = open64
//sys	Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
//sys	read(fd int, p []byte) (n int, err error)
//sys	Readlink(path string, buf []byte) (n int, err error)
//sys	Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
//sys	Setdomainname(p []byte) (err error)
//sys	Sethostname(p []byte) (err error)
//sysnb	Setpgid(pid int, pgid int) (err error)
//sysnb	Setsid() (pid int, err error)
//sysnb	Settimeofday(tv *Timeval) (err error)

//sys	Setuid(uid int) (err error)
//sys	Setgid(uid int) (err error)

//sys	Setpriority(which int, who int, prio int) (err error)
//sys	Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error)
//sys	Sync()
//sysnb	Times(tms *Tms) (ticks uintptr, err error)
//sysnb	Umask(mask int) (oldmask int)
//sysnb	Uname(buf *Utsname) (err error)
//sys	Unlink(path string) (err error)
//sys	Unlinkat(dirfd int, path string, flags int) (err error)
//sys	Ustat(dev int, ubuf *Ustat_t) (err error)
//sys	write(fd int, p []byte) (n int, err error)
//sys	readlen(fd int, p *byte, np int) (n int, err error) = read
//sys	writelen(fd int, p *byte, np int) (n int, err error) = write

//sys	Dup2(oldfd int, newfd int) (err error)
//sys	Fadvise(fd int, offset int64, length int64, advice int) (err error) = posix_fadvise64
//sys	Fchown(fd int, uid int, gid int) (err error)
//sys	fstat(fd int, stat *Stat_t) (err error)
//sys	fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = fstatat
//sys	Fstatfs(fd int, buf *Statfs_t) (err error)
//sys	Ftruncate(fd int, length int64) (err error)
//sysnb	Getegid() (egid int)
//sysnb	Geteuid() (euid int)
//sysnb	Getgid() (gid int)
//sysnb	Getuid() (uid int)
//sys	Lchown(path string, uid int, gid int) (err error)
//sys	Listen(s int, n int) (err error)
//sys	lstat(path string, stat *Stat_t) (err error)
//sys	Pause() (err error)
//sys	pread(fd int, p []byte, offset int64) (n int, err error) = pread64
//sys	pwrite(fd int, p []byte, offset int64) (n int, err error) = pwrite64
//sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
//sys	Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error)
//sysnb	Setregid(rgid int, egid int) (err error)
//sysnb	Setreuid(ruid int, euid int) (err error)
//sys	Shutdown(fd int, how int) (err error)
//sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
//sys	stat(path string, statptr *Stat_t) (err error)
//sys	Statfs(path string, buf *Statfs_t) (err error)
//sys	Truncate(path string, length int64) (err error)

//sys	bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
//sys	connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
//sysnb	getgroups(n int, list *_Gid_t) (nn int, err error)
//sysnb	setgroups(n int, list *_Gid_t) (err error)
//sys	getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
//sys	setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
//sysnb	socket(domain int, typ int, proto int) (fd int, err error)
//sysnb	socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
//sysnb	getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
//sysnb	getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
//sys	recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
//sys	sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)

// In order to use msghdr structure with Control, Controllen, nrecvmsg and nsendmsg must be used.
//sys	recvmsg(s int, msg *Msghdr, flags int) (n int, err error) = nrecvmsg
//sys	sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = nsendmsg

//sys	munmap(addr uintptr, length uintptr) (err error)

var mapper = &mmapper{
	active: make(map[*byte][]byte),
	mmap:   mmap,
	munmap: munmap,
}

func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {
	return mapper.Mmap(fd, offset, length, prot, flags)
}

func Munmap(b []byte) (err error) {
	return mapper.Munmap(b)
}

//sys	Madvise(b []byte, advice int) (err error)
//sys	Mprotect(b []byte, prot int) (err error)
//sys	Mlock(b []byte) (err error)
//sys	Mlockall(flags int) (err error)
//sys	Msync(b []byte, flags int) (err error)
//sys	Munlock(b []byte) (err error)
//sys	Munlockall() (err error)

//sysnb	pipe(p *[2]_C_int) (err error)

func Pipe(p []int) (err error) {
	if len(p) != 2 {
		return EINVAL
	}
	var pp [2]_C_int
	err = pipe(&pp)
	if err == nil {
		p[0] = int(pp[0])
		p[1] = int(pp[1])
	}
	return
}

//sys	poll(fds *PollFd, nfds int, timeout int) (n int, err error)

func Poll(fds []PollFd, timeout int) (n int, err error) {
	if len(fds) == 0 {
		return poll(nil, 0, timeout)
	}
	return poll(&fds[0], len(fds), timeout)
}

//sys	gettimeofday(tv *Timeval, tzp *Timezone) (err error)
//sysnb	Time(t *Time_t) (tt Time_t, err error)
//sys	Utime(path string, buf *Utimbuf) (err error)

//sys	Getsystemcfg(label int) (n uint64)

//sys	umount(target string) (err error)

func Unmount(target string, flags int) (err error) {
	if flags != 0 {
		// AIX doesn't have any flags for umount.
		return ENOSYS
	}
	return umount(target)
}
 07070100000DE0000081A4000000000000000000000001645E367C0000052A000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go   // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build aix && ppc
// +build aix,ppc

package unix

//sysnb	Getrlimit(resource int, rlim *Rlimit) (err error) = getrlimit64
//sys	Seek(fd int, offset int64, whence int) (off int64, err error) = lseek64

//sys	mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: int32(sec), Usec: int32(usec)}
}

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint32(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint32(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = int32(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint32(length)
}

func Fstat(fd int, stat *Stat_t) error {
	return fstat(fd, stat)
}

func Fstatat(dirfd int, path string, stat *Stat_t, flags int) error {
	return fstatat(dirfd, path, stat, flags)
}

func Lstat(path string, stat *Stat_t) error {
	return lstat(path, stat)
}

func Stat(path string, statptr *Stat_t) error {
	return stat(path, statptr)
}
  07070100000DE1000081A4000000000000000000000001645E367C000007B2000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build aix && ppc64
// +build aix,ppc64

package unix

//sysnb	Getrlimit(resource int, rlim *Rlimit) (err error)
//sys	Seek(fd int, offset int64, whence int) (off int64, err error) = lseek

//sys	mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) = mmap64

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: nsec}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: int64(sec), Usec: int32(usec)}
}

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint64(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint32(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = int32(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint32(length)
}

// In order to only have Timespec structure, type of Stat_t's fields
// Atim, Mtim and Ctim is changed from StTimespec to Timespec during
// ztypes generation.
// On ppc64, Timespec.Nsec is an int64 while StTimespec.Nsec is an
// int32, so the fields' value must be modified.
func fixStatTimFields(stat *Stat_t) {
	stat.Atim.Nsec >>= 32
	stat.Mtim.Nsec >>= 32
	stat.Ctim.Nsec >>= 32
}

func Fstat(fd int, stat *Stat_t) error {
	err := fstat(fd, stat)
	if err != nil {
		return err
	}
	fixStatTimFields(stat)
	return nil
}

func Fstatat(dirfd int, path string, stat *Stat_t, flags int) error {
	err := fstatat(dirfd, path, stat, flags)
	if err != nil {
		return err
	}
	fixStatTimFields(stat)
	return nil
}

func Lstat(path string, stat *Stat_t) error {
	err := lstat(path, stat)
	if err != nil {
		return err
	}
	fixStatTimFields(stat)
	return nil
}

func Stat(path string, statptr *Stat_t) error {
	err := stat(path, statptr)
	if err != nil {
		return err
	}
	fixStatTimFields(statptr)
	return nil
}
  07070100000DE2000081A4000000000000000000000001645E367C00003D31000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_bsd.go   // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build darwin || dragonfly || freebsd || netbsd || openbsd
// +build darwin dragonfly freebsd netbsd openbsd

// BSD system call wrappers shared by *BSD based systems
// including OS X (Darwin) and FreeBSD.  Like the other
// syscall_*.go files it is compiled as Go code but also
// used as input to mksyscall which parses the //sys
// lines and generates system call stubs.

package unix

import (
	"runtime"
	"syscall"
	"unsafe"
)

const ImplementsGetwd = true

func Getwd() (string, error) {
	var buf [PathMax]byte
	_, err := Getcwd(buf[0:])
	if err != nil {
		return "", err
	}
	n := clen(buf[:])
	if n < 1 {
		return "", EINVAL
	}
	return string(buf[:n]), nil
}

/*
 * Wrapped
 */

//sysnb	getgroups(ngid int, gid *_Gid_t) (n int, err error)
//sysnb	setgroups(ngid int, gid *_Gid_t) (err error)

func Getgroups() (gids []int, err error) {
	n, err := getgroups(0, nil)
	if err != nil {
		return nil, err
	}
	if n == 0 {
		return nil, nil
	}

	// Sanity check group count. Max is 16 on BSD.
	if n < 0 || n > 1000 {
		return nil, EINVAL
	}

	a := make([]_Gid_t, n)
	n, err = getgroups(n, &a[0])
	if err != nil {
		return nil, err
	}
	gids = make([]int, n)
	for i, v := range a[0:n] {
		gids[i] = int(v)
	}
	return
}

func Setgroups(gids []int) (err error) {
	if len(gids) == 0 {
		return setgroups(0, nil)
	}

	a := make([]_Gid_t, len(gids))
	for i, v := range gids {
		a[i] = _Gid_t(v)
	}
	return setgroups(len(a), &a[0])
}

// Wait status is 7 bits at bottom, either 0 (exited),
// 0x7F (stopped), or a signal number that caused an exit.
// The 0x80 bit is whether there was a core dump.
// An extra number (exit code, signal causing a stop)
// is in the high bits.

type WaitStatus uint32

const (
	mask  = 0x7F
	core  = 0x80
	shift = 8

	exited  = 0
	killed  = 9
	stopped = 0x7F
)

func (w WaitStatus) Exited() bool { return w&mask == exited }

func (w WaitStatus) ExitStatus() int {
	if w&mask != exited {
		return -1
	}
	return int(w >> shift)
}

func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != 0 }

func (w WaitStatus) Signal() syscall.Signal {
	sig := syscall.Signal(w & mask)
	if sig == stopped || sig == 0 {
		return -1
	}
	return sig
}

func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 }

func (w WaitStatus) Stopped() bool { return w&mask == stopped && syscall.Signal(w>>shift) != SIGSTOP }

func (w WaitStatus) Killed() bool { return w&mask == killed && syscall.Signal(w>>shift) != SIGKILL }

func (w WaitStatus) Continued() bool { return w&mask == stopped && syscall.Signal(w>>shift) == SIGSTOP }

func (w WaitStatus) StopSignal() syscall.Signal {
	if !w.Stopped() {
		return -1
	}
	return syscall.Signal(w>>shift) & 0xFF
}

func (w WaitStatus) TrapCause() int { return -1 }

//sys	wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error)

func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {
	var status _C_int
	wpid, err = wait4(pid, &status, options, rusage)
	if wstatus != nil {
		*wstatus = WaitStatus(status)
	}
	return
}

//sys	accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
//sys	bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
//sys	connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
//sysnb	socket(domain int, typ int, proto int) (fd int, err error)
//sys	getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
//sys	setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
//sysnb	getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
//sysnb	getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
//sys	Shutdown(s int, how int) (err error)

func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {
	if sa.Port < 0 || sa.Port > 0xFFFF {
		return nil, 0, EINVAL
	}
	sa.raw.Len = SizeofSockaddrInet4
	sa.raw.Family = AF_INET
	p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
	p[0] = byte(sa.Port >> 8)
	p[1] = byte(sa.Port)
	sa.raw.Addr = sa.Addr
	return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil
}

func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {
	if sa.Port < 0 || sa.Port > 0xFFFF {
		return nil, 0, EINVAL
	}
	sa.raw.Len = SizeofSockaddrInet6
	sa.raw.Family = AF_INET6
	p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
	p[0] = byte(sa.Port >> 8)
	p[1] = byte(sa.Port)
	sa.raw.Scope_id = sa.ZoneId
	sa.raw.Addr = sa.Addr
	return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil
}

func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {
	name := sa.Name
	n := len(name)
	if n >= len(sa.raw.Path) || n == 0 {
		return nil, 0, EINVAL
	}
	sa.raw.Len = byte(3 + n) // 2 for Family, Len; 1 for NUL
	sa.raw.Family = AF_UNIX
	for i := 0; i < n; i++ {
		sa.raw.Path[i] = int8(name[i])
	}
	return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil
}

func (sa *SockaddrDatalink) sockaddr() (unsafe.Pointer, _Socklen, error) {
	if sa.Index == 0 {
		return nil, 0, EINVAL
	}
	sa.raw.Len = sa.Len
	sa.raw.Family = AF_LINK
	sa.raw.Index = sa.Index
	sa.raw.Type = sa.Type
	sa.raw.Nlen = sa.Nlen
	sa.raw.Alen = sa.Alen
	sa.raw.Slen = sa.Slen
	sa.raw.Data = sa.Data
	return unsafe.Pointer(&sa.raw), SizeofSockaddrDatalink, nil
}

func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
	switch rsa.Addr.Family {
	case AF_LINK:
		pp := (*RawSockaddrDatalink)(unsafe.Pointer(rsa))
		sa := new(SockaddrDatalink)
		sa.Len = pp.Len
		sa.Family = pp.Family
		sa.Index = pp.Index
		sa.Type = pp.Type
		sa.Nlen = pp.Nlen
		sa.Alen = pp.Alen
		sa.Slen = pp.Slen
		sa.Data = pp.Data
		return sa, nil

	case AF_UNIX:
		pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))
		if pp.Len < 2 || pp.Len > SizeofSockaddrUnix {
			return nil, EINVAL
		}
		sa := new(SockaddrUnix)

		// Some BSDs include the trailing NUL in the length, whereas
		// others do not. Work around this by subtracting the leading
		// family and len. The path is then scanned to see if a NUL
		// terminator still exists within the length.
		n := int(pp.Len) - 2 // subtract leading Family, Len
		for i := 0; i < n; i++ {
			if pp.Path[i] == 0 {
				// found early NUL; assume Len included the NUL
				// or was overestimating.
				n = i
				break
			}
		}
		sa.Name = string(unsafe.Slice((*byte)(unsafe.Pointer(&pp.Path[0])), n))
		return sa, nil

	case AF_INET:
		pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))
		sa := new(SockaddrInet4)
		p := (*[2]byte)(unsafe.Pointer(&pp.Port))
		sa.Port = int(p[0])<<8 + int(p[1])
		sa.Addr = pp.Addr
		return sa, nil

	case AF_INET6:
		pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))
		sa := new(SockaddrInet6)
		p := (*[2]byte)(unsafe.Pointer(&pp.Port))
		sa.Port = int(p[0])<<8 + int(p[1])
		sa.ZoneId = pp.Scope_id
		sa.Addr = pp.Addr
		return sa, nil
	}
	return anyToSockaddrGOOS(fd, rsa)
}

func Accept(fd int) (nfd int, sa Sockaddr, err error) {
	var rsa RawSockaddrAny
	var len _Socklen = SizeofSockaddrAny
	nfd, err = accept(fd, &rsa, &len)
	if err != nil {
		return
	}
	if (runtime.GOOS == "darwin" || runtime.GOOS == "ios") && len == 0 {
		// Accepted socket has no address.
		// This is likely due to a bug in xnu kernels,
		// where instead of ECONNABORTED error socket
		// is accepted, but has no address.
		Close(nfd)
		return 0, nil, ECONNABORTED
	}
	sa, err = anyToSockaddr(fd, &rsa)
	if err != nil {
		Close(nfd)
		nfd = 0
	}
	return
}

func Getsockname(fd int) (sa Sockaddr, err error) {
	var rsa RawSockaddrAny
	var len _Socklen = SizeofSockaddrAny
	if err = getsockname(fd, &rsa, &len); err != nil {
		return
	}
	// TODO(jsing): DragonFly has a "bug" (see issue 3349), which should be
	// reported upstream.
	if runtime.GOOS == "dragonfly" && rsa.Addr.Family == AF_UNSPEC && rsa.Addr.Len == 0 {
		rsa.Addr.Family = AF_UNIX
		rsa.Addr.Len = SizeofSockaddrUnix
	}
	return anyToSockaddr(fd, &rsa)
}

//sysnb	socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)

// GetsockoptString returns the string value of the socket option opt for the
// socket associated with fd at the given socket level.
func GetsockoptString(fd, level, opt int) (string, error) {
	buf := make([]byte, 256)
	vallen := _Socklen(len(buf))
	err := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)
	if err != nil {
		return "", err
	}
	return string(buf[:vallen-1]), nil
}

//sys	recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
//sys	sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
//sys	recvmsg(s int, msg *Msghdr, flags int) (n int, err error)

func recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) {
	var msg Msghdr
	msg.Name = (*byte)(unsafe.Pointer(rsa))
	msg.Namelen = uint32(SizeofSockaddrAny)
	var dummy byte
	if len(oob) > 0 {
		// receive at least one normal byte
		if emptyIovecs(iov) {
			var iova [1]Iovec
			iova[0].Base = &dummy
			iova[0].SetLen(1)
			iov = iova[:]
		}
		msg.Control = (*byte)(unsafe.Pointer(&oob[0]))
		msg.SetControllen(len(oob))
	}
	if len(iov) > 0 {
		msg.Iov = &iov[0]
		msg.SetIovlen(len(iov))
	}
	if n, err = recvmsg(fd, &msg, flags); err != nil {
		return
	}
	oobn = int(msg.Controllen)
	recvflags = int(msg.Flags)
	return
}

//sys	sendmsg(s int, msg *Msghdr, flags int) (n int, err error)

func sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) {
	var msg Msghdr
	msg.Name = (*byte)(unsafe.Pointer(ptr))
	msg.Namelen = uint32(salen)
	var dummy byte
	var empty bool
	if len(oob) > 0 {
		// send at least one normal byte
		empty = emptyIovecs(iov)
		if empty {
			var iova [1]Iovec
			iova[0].Base = &dummy
			iova[0].SetLen(1)
			iov = iova[:]
		}
		msg.Control = (*byte)(unsafe.Pointer(&oob[0]))
		msg.SetControllen(len(oob))
	}
	if len(iov) > 0 {
		msg.Iov = &iov[0]
		msg.SetIovlen(len(iov))
	}
	if n, err = sendmsg(fd, &msg, flags); err != nil {
		return 0, err
	}
	if len(oob) > 0 && empty {
		n = 0
	}
	return n, nil
}

//sys	kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error)

func Kevent(kq int, changes, events []Kevent_t, timeout *Timespec) (n int, err error) {
	var change, event unsafe.Pointer
	if len(changes) > 0 {
		change = unsafe.Pointer(&changes[0])
	}
	if len(events) > 0 {
		event = unsafe.Pointer(&events[0])
	}
	return kevent(kq, change, len(changes), event, len(events), timeout)
}

// sysctlmib translates name to mib number and appends any additional args.
func sysctlmib(name string, args ...int) ([]_C_int, error) {
	// Translate name to mib number.
	mib, err := nametomib(name)
	if err != nil {
		return nil, err
	}

	for _, a := range args {
		mib = append(mib, _C_int(a))
	}

	return mib, nil
}

func Sysctl(name string) (string, error) {
	return SysctlArgs(name)
}

func SysctlArgs(name string, args ...int) (string, error) {
	buf, err := SysctlRaw(name, args...)
	if err != nil {
		return "", err
	}
	n := len(buf)

	// Throw away terminating NUL.
	if n > 0 && buf[n-1] == '\x00' {
		n--
	}
	return string(buf[0:n]), nil
}

func SysctlUint32(name string) (uint32, error) {
	return SysctlUint32Args(name)
}

func SysctlUint32Args(name string, args ...int) (uint32, error) {
	mib, err := sysctlmib(name, args...)
	if err != nil {
		return 0, err
	}

	n := uintptr(4)
	buf := make([]byte, 4)
	if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {
		return 0, err
	}
	if n != 4 {
		return 0, EIO
	}
	return *(*uint32)(unsafe.Pointer(&buf[0])), nil
}

func SysctlUint64(name string, args ...int) (uint64, error) {
	mib, err := sysctlmib(name, args...)
	if err != nil {
		return 0, err
	}

	n := uintptr(8)
	buf := make([]byte, 8)
	if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {
		return 0, err
	}
	if n != 8 {
		return 0, EIO
	}
	return *(*uint64)(unsafe.Pointer(&buf[0])), nil
}

func SysctlRaw(name string, args ...int) ([]byte, error) {
	mib, err := sysctlmib(name, args...)
	if err != nil {
		return nil, err
	}

	// Find size.
	n := uintptr(0)
	if err := sysctl(mib, nil, &n, nil, 0); err != nil {
		return nil, err
	}
	if n == 0 {
		return nil, nil
	}

	// Read into buffer of that size.
	buf := make([]byte, n)
	if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {
		return nil, err
	}

	// The actual call may return less than the original reported required
	// size so ensure we deal with that.
	return buf[:n], nil
}

func SysctlClockinfo(name string) (*Clockinfo, error) {
	mib, err := sysctlmib(name)
	if err != nil {
		return nil, err
	}

	n := uintptr(SizeofClockinfo)
	var ci Clockinfo
	if err := sysctl(mib, (*byte)(unsafe.Pointer(&ci)), &n, nil, 0); err != nil {
		return nil, err
	}
	if n != SizeofClockinfo {
		return nil, EIO
	}
	return &ci, nil
}

func SysctlTimeval(name string) (*Timeval, error) {
	mib, err := sysctlmib(name)
	if err != nil {
		return nil, err
	}

	var tv Timeval
	n := uintptr(unsafe.Sizeof(tv))
	if err := sysctl(mib, (*byte)(unsafe.Pointer(&tv)), &n, nil, 0); err != nil {
		return nil, err
	}
	if n != unsafe.Sizeof(tv) {
		return nil, EIO
	}
	return &tv, nil
}

//sys	utimes(path string, timeval *[2]Timeval) (err error)

func Utimes(path string, tv []Timeval) error {
	if tv == nil {
		return utimes(path, nil)
	}
	if len(tv) != 2 {
		return EINVAL
	}
	return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
}

func UtimesNano(path string, ts []Timespec) error {
	if ts == nil {
		err := utimensat(AT_FDCWD, path, nil, 0)
		if err != ENOSYS {
			return err
		}
		return utimes(path, nil)
	}
	if len(ts) != 2 {
		return EINVAL
	}
	err := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
	if err != ENOSYS {
		return err
	}
	// Not as efficient as it could be because Timespec and
	// Timeval have different types in the different OSes
	tv := [2]Timeval{
		NsecToTimeval(TimespecToNsec(ts[0])),
		NsecToTimeval(TimespecToNsec(ts[1])),
	}
	return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
}

func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {
	if ts == nil {
		return utimensat(dirfd, path, nil, flags)
	}
	if len(ts) != 2 {
		return EINVAL
	}
	return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)
}

//sys	futimes(fd int, timeval *[2]Timeval) (err error)

func Futimes(fd int, tv []Timeval) error {
	if tv == nil {
		return futimes(fd, nil)
	}
	if len(tv) != 2 {
		return EINVAL
	}
	return futimes(fd, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
}

//sys	poll(fds *PollFd, nfds int, timeout int) (n int, err error)

func Poll(fds []PollFd, timeout int) (n int, err error) {
	if len(fds) == 0 {
		return poll(nil, 0, timeout)
	}
	return poll(&fds[0], len(fds), timeout)
}

// TODO: wrap
//	Acct(name nil-string) (err error)
//	Gethostuuid(uuid *byte, timeout *Timespec) (err error)
//	Ptrace(req int, pid int, addr uintptr, data int) (ret uintptr, err error)

var mapper = &mmapper{
	active: make(map[*byte][]byte),
	mmap:   mmap,
	munmap: munmap,
}

func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {
	return mapper.Mmap(fd, offset, length, prot, flags)
}

func Munmap(b []byte) (err error) {
	return mapper.Munmap(b)
}

//sys	Madvise(b []byte, behav int) (err error)
//sys	Mlock(b []byte) (err error)
//sys	Mlockall(flags int) (err error)
//sys	Mprotect(b []byte, prot int) (err error)
//sys	Msync(b []byte, flags int) (err error)
//sys	Munlock(b []byte) (err error)
//sys	Munlockall() (err error)
   07070100000DE3000081A4000000000000000000000001645E367C00005E58000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_darwin.go    // Copyright 2009,2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Darwin system calls.
// This file is compiled as ordinary Go code,
// but it is also input to mksyscall,
// which parses the //sys lines and generates system call stubs.
// Note that sometimes we use a lowercase //sys name and wrap
// it in our own nicer implementation, either here or in
// syscall_bsd.go or syscall_unix.go.

package unix

import (
	"fmt"
	"syscall"
	"unsafe"
)

//sys	closedir(dir uintptr) (err error)
//sys	readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno)

func fdopendir(fd int) (dir uintptr, err error) {
	r0, _, e1 := syscall_syscallPtr(libc_fdopendir_trampoline_addr, uintptr(fd), 0, 0)
	dir = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fdopendir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fdopendir fdopendir "/usr/lib/libSystem.B.dylib"

func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
	// Simulate Getdirentries using fdopendir/readdir_r/closedir.
	// We store the number of entries to skip in the seek
	// offset of fd. See issue #31368.
	// It's not the full required semantics, but should handle the case
	// of calling Getdirentries or ReadDirent repeatedly.
	// It won't handle assigning the results of lseek to *basep, or handle
	// the directory being edited underfoot.
	skip, err := Seek(fd, 0, 1 /* SEEK_CUR */)
	if err != nil {
		return 0, err
	}

	// We need to duplicate the incoming file descriptor
	// because the caller expects to retain control of it, but
	// fdopendir expects to take control of its argument.
	// Just Dup'ing the file descriptor is not enough, as the
	// result shares underlying state. Use Openat to make a really
	// new file descriptor referring to the same directory.
	fd2, err := Openat(fd, ".", O_RDONLY, 0)
	if err != nil {
		return 0, err
	}
	d, err := fdopendir(fd2)
	if err != nil {
		Close(fd2)
		return 0, err
	}
	defer closedir(d)

	var cnt int64
	for {
		var entry Dirent
		var entryp *Dirent
		e := readdir_r(d, &entry, &entryp)
		if e != 0 {
			return n, errnoErr(e)
		}
		if entryp == nil {
			break
		}
		if skip > 0 {
			skip--
			cnt++
			continue
		}

		reclen := int(entry.Reclen)
		if reclen > len(buf) {
			// Not enough room. Return for now.
			// The counter will let us know where we should start up again.
			// Note: this strategy for suspending in the middle and
			// restarting is O(n^2) in the length of the directory. Oh well.
			break
		}

		// Copy entry into return buffer.
		s := unsafe.Slice((*byte)(unsafe.Pointer(&entry)), reclen)
		copy(buf, s)

		buf = buf[reclen:]
		n += reclen
		cnt++
	}
	// Set the seek offset of the input fd to record
	// how many files we've already returned.
	_, err = Seek(fd, cnt, 0 /* SEEK_SET */)
	if err != nil {
		return n, err
	}

	return n, nil
}

// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.
type SockaddrDatalink struct {
	Len    uint8
	Family uint8
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [12]int8
	raw    RawSockaddrDatalink
}

// SockaddrCtl implements the Sockaddr interface for AF_SYSTEM type sockets.
type SockaddrCtl struct {
	ID   uint32
	Unit uint32
	raw  RawSockaddrCtl
}

func (sa *SockaddrCtl) sockaddr() (unsafe.Pointer, _Socklen, error) {
	sa.raw.Sc_len = SizeofSockaddrCtl
	sa.raw.Sc_family = AF_SYSTEM
	sa.raw.Ss_sysaddr = AF_SYS_CONTROL
	sa.raw.Sc_id = sa.ID
	sa.raw.Sc_unit = sa.Unit
	return unsafe.Pointer(&sa.raw), SizeofSockaddrCtl, nil
}

// SockaddrVM implements the Sockaddr interface for AF_VSOCK type sockets.
// SockaddrVM provides access to Darwin VM sockets: a mechanism that enables
// bidirectional communication between a hypervisor and its guest virtual
// machines.
type SockaddrVM struct {
	// CID and Port specify a context ID and port address for a VM socket.
	// Guests have a unique CID, and hosts may have a well-known CID of:
	//  - VMADDR_CID_HYPERVISOR: refers to the hypervisor process.
	//  - VMADDR_CID_LOCAL: refers to local communication (loopback).
	//  - VMADDR_CID_HOST: refers to other processes on the host.
	CID  uint32
	Port uint32
	raw  RawSockaddrVM
}

func (sa *SockaddrVM) sockaddr() (unsafe.Pointer, _Socklen, error) {
	sa.raw.Len = SizeofSockaddrVM
	sa.raw.Family = AF_VSOCK
	sa.raw.Port = sa.Port
	sa.raw.Cid = sa.CID

	return unsafe.Pointer(&sa.raw), SizeofSockaddrVM, nil
}

func anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
	switch rsa.Addr.Family {
	case AF_SYSTEM:
		pp := (*RawSockaddrCtl)(unsafe.Pointer(rsa))
		if pp.Ss_sysaddr == AF_SYS_CONTROL {
			sa := new(SockaddrCtl)
			sa.ID = pp.Sc_id
			sa.Unit = pp.Sc_unit
			return sa, nil
		}
	case AF_VSOCK:
		pp := (*RawSockaddrVM)(unsafe.Pointer(rsa))
		sa := &SockaddrVM{
			CID:  pp.Cid,
			Port: pp.Port,
		}
		return sa, nil
	}
	return nil, EAFNOSUPPORT
}

// Some external packages rely on SYS___SYSCTL being defined to implement their
// own sysctl wrappers. Provide it here, even though direct syscalls are no
// longer supported on darwin.
const SYS___SYSCTL = SYS_SYSCTL

// Translate "kern.hostname" to []_C_int{0,1,2,3}.
func nametomib(name string) (mib []_C_int, err error) {
	const siz = unsafe.Sizeof(mib[0])

	// NOTE(rsc): It seems strange to set the buffer to have
	// size CTL_MAXNAME+2 but use only CTL_MAXNAME
	// as the size. I don't know why the +2 is here, but the
	// kernel uses +2 for its own implementation of this function.
	// I am scared that if we don't include the +2 here, the kernel
	// will silently write 2 words farther than we specify
	// and we'll get memory corruption.
	var buf [CTL_MAXNAME + 2]_C_int
	n := uintptr(CTL_MAXNAME) * siz

	p := (*byte)(unsafe.Pointer(&buf[0]))
	bytes, err := ByteSliceFromString(name)
	if err != nil {
		return nil, err
	}

	// Magic sysctl: "setting" 0.3 to a string name
	// lets you read back the array of integers form.
	if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil {
		return nil, err
	}
	return buf[0 : n/siz], nil
}

func direntIno(buf []byte) (uint64, bool) {
	return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))
}

func direntReclen(buf []byte) (uint64, bool) {
	return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
}

func direntNamlen(buf []byte) (uint64, bool) {
	return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
}

func PtraceAttach(pid int) (err error) { return ptrace(PT_ATTACH, pid, 0, 0) }
func PtraceDetach(pid int) (err error) { return ptrace(PT_DETACH, pid, 0, 0) }
func PtraceDenyAttach() (err error)    { return ptrace(PT_DENY_ATTACH, 0, 0, 0) }

//sysnb	pipe(p *[2]int32) (err error)

func Pipe(p []int) (err error) {
	if len(p) != 2 {
		return EINVAL
	}
	var x [2]int32
	err = pipe(&x)
	if err == nil {
		p[0] = int(x[0])
		p[1] = int(x[1])
	}
	return
}

func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
	var _p0 unsafe.Pointer
	var bufsize uintptr
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
		bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))
	}
	return getfsstat(_p0, bufsize, flags)
}

func xattrPointer(dest []byte) *byte {
	// It's only when dest is set to NULL that the OS X implementations of
	// getxattr() and listxattr() return the current sizes of the named attributes.
	// An empty byte array is not sufficient. To maintain the same behaviour as the
	// linux implementation, we wrap around the system calls and pass in NULL when
	// dest is empty.
	var destp *byte
	if len(dest) > 0 {
		destp = &dest[0]
	}
	return destp
}

//sys	getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error)

func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
	return getxattr(path, attr, xattrPointer(dest), len(dest), 0, 0)
}

func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {
	return getxattr(link, attr, xattrPointer(dest), len(dest), 0, XATTR_NOFOLLOW)
}

//sys	fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error)

func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
	return fgetxattr(fd, attr, xattrPointer(dest), len(dest), 0, 0)
}

//sys	setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error)

func Setxattr(path string, attr string, data []byte, flags int) (err error) {
	// The parameters for the OS X implementation vary slightly compared to the
	// linux system call, specifically the position parameter:
	//
	//  linux:
	//      int setxattr(
	//          const char *path,
	//          const char *name,
	//          const void *value,
	//          size_t size,
	//          int flags
	//      );
	//
	//  darwin:
	//      int setxattr(
	//          const char *path,
	//          const char *name,
	//          void *value,
	//          size_t size,
	//          u_int32_t position,
	//          int options
	//      );
	//
	// position specifies the offset within the extended attribute. In the
	// current implementation, only the resource fork extended attribute makes
	// use of this argument. For all others, position is reserved. We simply
	// default to setting it to zero.
	return setxattr(path, attr, xattrPointer(data), len(data), 0, flags)
}

func Lsetxattr(link string, attr string, data []byte, flags int) (err error) {
	return setxattr(link, attr, xattrPointer(data), len(data), 0, flags|XATTR_NOFOLLOW)
}

//sys	fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error)

func Fsetxattr(fd int, attr string, data []byte, flags int) (err error) {
	return fsetxattr(fd, attr, xattrPointer(data), len(data), 0, 0)
}

//sys	removexattr(path string, attr string, options int) (err error)

func Removexattr(path string, attr string) (err error) {
	// We wrap around and explicitly zero out the options provided to the OS X
	// implementation of removexattr, we do so for interoperability with the
	// linux variant.
	return removexattr(path, attr, 0)
}

func Lremovexattr(link string, attr string) (err error) {
	return removexattr(link, attr, XATTR_NOFOLLOW)
}

//sys	fremovexattr(fd int, attr string, options int) (err error)

func Fremovexattr(fd int, attr string) (err error) {
	return fremovexattr(fd, attr, 0)
}

//sys	listxattr(path string, dest *byte, size int, options int) (sz int, err error)

func Listxattr(path string, dest []byte) (sz int, err error) {
	return listxattr(path, xattrPointer(dest), len(dest), 0)
}

func Llistxattr(link string, dest []byte) (sz int, err error) {
	return listxattr(link, xattrPointer(dest), len(dest), XATTR_NOFOLLOW)
}

//sys	flistxattr(fd int, dest *byte, size int, options int) (sz int, err error)

func Flistxattr(fd int, dest []byte) (sz int, err error) {
	return flistxattr(fd, xattrPointer(dest), len(dest), 0)
}

//sys	utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)

/*
 * Wrapped
 */

//sys	fcntl(fd int, cmd int, arg int) (val int, err error)

//sys	kill(pid int, signum int, posix int) (err error)

func Kill(pid int, signum syscall.Signal) (err error) { return kill(pid, int(signum), 1) }

//sys	ioctl(fd int, req uint, arg uintptr) (err error)
//sys	ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL

func IoctlCtlInfo(fd int, ctlInfo *CtlInfo) error {
	return ioctlPtr(fd, CTLIOCGINFO, unsafe.Pointer(ctlInfo))
}

// IfreqMTU is struct ifreq used to get or set a network device's MTU.
type IfreqMTU struct {
	Name [IFNAMSIZ]byte
	MTU  int32
}

// IoctlGetIfreqMTU performs the SIOCGIFMTU ioctl operation on fd to get the MTU
// of the network device specified by ifname.
func IoctlGetIfreqMTU(fd int, ifname string) (*IfreqMTU, error) {
	var ifreq IfreqMTU
	copy(ifreq.Name[:], ifname)
	err := ioctlPtr(fd, SIOCGIFMTU, unsafe.Pointer(&ifreq))
	return &ifreq, err
}

// IoctlSetIfreqMTU performs the SIOCSIFMTU ioctl operation on fd to set the MTU
// of the network device specified by ifreq.Name.
func IoctlSetIfreqMTU(fd int, ifreq *IfreqMTU) error {
	return ioctlPtr(fd, SIOCSIFMTU, unsafe.Pointer(ifreq))
}

//sys	sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS_SYSCTL

func Uname(uname *Utsname) error {
	mib := []_C_int{CTL_KERN, KERN_OSTYPE}
	n := unsafe.Sizeof(uname.Sysname)
	if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil {
		return err
	}

	mib = []_C_int{CTL_KERN, KERN_HOSTNAME}
	n = unsafe.Sizeof(uname.Nodename)
	if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil {
		return err
	}

	mib = []_C_int{CTL_KERN, KERN_OSRELEASE}
	n = unsafe.Sizeof(uname.Release)
	if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil {
		return err
	}

	mib = []_C_int{CTL_KERN, KERN_VERSION}
	n = unsafe.Sizeof(uname.Version)
	if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil {
		return err
	}

	// The version might have newlines or tabs in it, convert them to
	// spaces.
	for i, b := range uname.Version {
		if b == '\n' || b == '\t' {
			if i == len(uname.Version)-1 {
				uname.Version[i] = 0
			} else {
				uname.Version[i] = ' '
			}
		}
	}

	mib = []_C_int{CTL_HW, HW_MACHINE}
	n = unsafe.Sizeof(uname.Machine)
	if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil {
		return err
	}

	return nil
}

func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	if raceenabled {
		raceReleaseMerge(unsafe.Pointer(&ioSync))
	}
	var length = int64(count)
	err = sendfile(infd, outfd, *offset, &length, nil, 0)
	written = int(length)
	return
}

func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) {
	var value IPMreqn
	vallen := _Socklen(SizeofIPMreqn)
	errno := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
	return &value, errno
}

func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) {
	return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq))
}

// GetsockoptXucred is a getsockopt wrapper that returns an Xucred struct.
// The usual level and opt are SOL_LOCAL and LOCAL_PEERCRED, respectively.
func GetsockoptXucred(fd, level, opt int) (*Xucred, error) {
	x := new(Xucred)
	vallen := _Socklen(SizeofXucred)
	err := getsockopt(fd, level, opt, unsafe.Pointer(x), &vallen)
	return x, err
}

func GetsockoptTCPConnectionInfo(fd, level, opt int) (*TCPConnectionInfo, error) {
	var value TCPConnectionInfo
	vallen := _Socklen(SizeofTCPConnectionInfo)
	err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
	return &value, err
}

func SysctlKinfoProc(name string, args ...int) (*KinfoProc, error) {
	mib, err := sysctlmib(name, args...)
	if err != nil {
		return nil, err
	}

	var kinfo KinfoProc
	n := uintptr(SizeofKinfoProc)
	if err := sysctl(mib, (*byte)(unsafe.Pointer(&kinfo)), &n, nil, 0); err != nil {
		return nil, err
	}
	if n != SizeofKinfoProc {
		return nil, EIO
	}
	return &kinfo, nil
}

func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) {
	mib, err := sysctlmib(name, args...)
	if err != nil {
		return nil, err
	}

	// Find size.
	n := uintptr(0)
	if err := sysctl(mib, nil, &n, nil, 0); err != nil {
		return nil, err
	}
	if n == 0 {
		return nil, nil
	}
	if n%SizeofKinfoProc != 0 {
		return nil, fmt.Errorf("sysctl() returned a size of %d, which is not a multiple of %d", n, SizeofKinfoProc)
	}

	// Read into buffer of that size.
	buf := make([]KinfoProc, n/SizeofKinfoProc)
	if err := sysctl(mib, (*byte)(unsafe.Pointer(&buf[0])), &n, nil, 0); err != nil {
		return nil, err
	}
	if n%SizeofKinfoProc != 0 {
		return nil, fmt.Errorf("sysctl() returned a size of %d, which is not a multiple of %d", n, SizeofKinfoProc)
	}

	// The actual call may return less than the original reported required
	// size so ensure we deal with that.
	return buf[:n/SizeofKinfoProc], nil
}

//sys	sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error)

//sys	shmat(id int, addr uintptr, flag int) (ret uintptr, err error)
//sys	shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error)
//sys	shmdt(addr uintptr) (err error)
//sys	shmget(key int, size int, flag int) (id int, err error)

/*
 * Exposed directly
 */
//sys	Access(path string, mode uint32) (err error)
//sys	Adjtime(delta *Timeval, olddelta *Timeval) (err error)
//sys	Chdir(path string) (err error)
//sys	Chflags(path string, flags int) (err error)
//sys	Chmod(path string, mode uint32) (err error)
//sys	Chown(path string, uid int, gid int) (err error)
//sys	Chroot(path string) (err error)
//sys	ClockGettime(clockid int32, time *Timespec) (err error)
//sys	Close(fd int) (err error)
//sys	Clonefile(src string, dst string, flags int) (err error)
//sys	Clonefileat(srcDirfd int, src string, dstDirfd int, dst string, flags int) (err error)
//sys	Dup(fd int) (nfd int, err error)
//sys	Dup2(from int, to int) (err error)
//sys	Exchangedata(path1 string, path2 string, options int) (err error)
//sys	Exit(code int)
//sys	Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
//sys	Fchdir(fd int) (err error)
//sys	Fchflags(fd int, flags int) (err error)
//sys	Fchmod(fd int, mode uint32) (err error)
//sys	Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
//sys	Fchown(fd int, uid int, gid int) (err error)
//sys	Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
//sys	Fclonefileat(srcDirfd int, dstDirfd int, dst string, flags int) (err error)
//sys	Flock(fd int, how int) (err error)
//sys	Fpathconf(fd int, name int) (val int, err error)
//sys	Fsync(fd int) (err error)
//sys	Ftruncate(fd int, length int64) (err error)
//sys	Getcwd(buf []byte) (n int, err error)
//sys	Getdtablesize() (size int)
//sysnb	Getegid() (egid int)
//sysnb	Geteuid() (uid int)
//sysnb	Getgid() (gid int)
//sysnb	Getpgid(pid int) (pgid int, err error)
//sysnb	Getpgrp() (pgrp int)
//sysnb	Getpid() (pid int)
//sysnb	Getppid() (ppid int)
//sys	Getpriority(which int, who int) (prio int, err error)
//sysnb	Getrlimit(which int, lim *Rlimit) (err error)
//sysnb	Getrusage(who int, rusage *Rusage) (err error)
//sysnb	Getsid(pid int) (sid int, err error)
//sysnb	Gettimeofday(tp *Timeval) (err error)
//sysnb	Getuid() (uid int)
//sysnb	Issetugid() (tainted bool)
//sys	Kqueue() (fd int, err error)
//sys	Lchown(path string, uid int, gid int) (err error)
//sys	Link(path string, link string) (err error)
//sys	Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error)
//sys	Listen(s int, backlog int) (err error)
//sys	Mkdir(path string, mode uint32) (err error)
//sys	Mkdirat(dirfd int, path string, mode uint32) (err error)
//sys	Mkfifo(path string, mode uint32) (err error)
//sys	Mknod(path string, mode uint32, dev int) (err error)
//sys	Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error)
//sys	Open(path string, mode int, perm uint32) (fd int, err error)
//sys	Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error)
//sys	Pathconf(path string, name int) (val int, err error)
//sys	pread(fd int, p []byte, offset int64) (n int, err error)
//sys	pwrite(fd int, p []byte, offset int64) (n int, err error)
//sys	read(fd int, p []byte) (n int, err error)
//sys	Readlink(path string, buf []byte) (n int, err error)
//sys	Readlinkat(dirfd int, path string, buf []byte) (n int, err error)
//sys	Rename(from string, to string) (err error)
//sys	Renameat(fromfd int, from string, tofd int, to string) (err error)
//sys	Revoke(path string) (err error)
//sys	Rmdir(path string) (err error)
//sys	Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
//sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
//sys	Setattrlist(path string, attrlist *Attrlist, attrBuf []byte, options int) (err error)
//sys	Setegid(egid int) (err error)
//sysnb	Seteuid(euid int) (err error)
//sysnb	Setgid(gid int) (err error)
//sys	Setlogin(name string) (err error)
//sysnb	Setpgid(pid int, pgid int) (err error)
//sys	Setpriority(which int, who int, prio int) (err error)
//sys	Setprivexec(flag int) (err error)
//sysnb	Setregid(rgid int, egid int) (err error)
//sysnb	Setreuid(ruid int, euid int) (err error)
//sysnb	Setsid() (pid int, err error)
//sysnb	Settimeofday(tp *Timeval) (err error)
//sysnb	Setuid(uid int) (err error)
//sys	Symlink(path string, link string) (err error)
//sys	Symlinkat(oldpath string, newdirfd int, newpath string) (err error)
//sys	Sync() (err error)
//sys	Truncate(path string, length int64) (err error)
//sys	Umask(newmask int) (oldmask int)
//sys	Undelete(path string) (err error)
//sys	Unlink(path string) (err error)
//sys	Unlinkat(dirfd int, path string, flags int) (err error)
//sys	Unmount(path string, flags int) (err error)
//sys	write(fd int, p []byte) (n int, err error)
//sys	mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
//sys	munmap(addr uintptr, length uintptr) (err error)
//sys	readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ
//sys	writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE

/*
 * Unimplemented
 */
// Profil
// Sigaction
// Sigprocmask
// Getlogin
// Sigpending
// Sigaltstack
// Ioctl
// Reboot
// Execve
// Vfork
// Sbrk
// Sstk
// Ovadvise
// Mincore
// Setitimer
// Swapon
// Select
// Sigsuspend
// Readv
// Writev
// Nfssvc
// Getfh
// Quotactl
// Csops
// Waitid
// Add_profil
// Kdebug_trace
// Sigreturn
// Atsocket
// Kqueue_from_portset_np
// Kqueue_portset
// Getattrlist
// Getdirentriesattr
// Searchfs
// Delete
// Copyfile
// Watchevent
// Waitevent
// Modwatch
// Fsctl
// Initgroups
// Posix_spawn
// Nfsclnt
// Fhopen
// Minherit
// Semsys
// Msgsys
// Shmsys
// Semctl
// Semget
// Semop
// Msgctl
// Msgget
// Msgsnd
// Msgrcv
// Shm_open
// Shm_unlink
// Sem_open
// Sem_close
// Sem_unlink
// Sem_wait
// Sem_trywait
// Sem_post
// Sem_getvalue
// Sem_init
// Sem_destroy
// Open_extended
// Umask_extended
// Stat_extended
// Lstat_extended
// Fstat_extended
// Chmod_extended
// Fchmod_extended
// Access_extended
// Settid
// Gettid
// Setsgroups
// Getsgroups
// Setwgroups
// Getwgroups
// Mkfifo_extended
// Mkdir_extended
// Identitysvc
// Shared_region_check_np
// Shared_region_map_np
// __pthread_mutex_destroy
// __pthread_mutex_init
// __pthread_mutex_lock
// __pthread_mutex_trylock
// __pthread_mutex_unlock
// __pthread_cond_init
// __pthread_cond_destroy
// __pthread_cond_broadcast
// __pthread_cond_signal
// Setsid_with_pid
// __pthread_cond_timedwait
// Aio_fsync
// Aio_return
// Aio_suspend
// Aio_cancel
// Aio_error
// Aio_read
// Aio_write
// Lio_listio
// __pthread_cond_wait
// Iopolicysys
// __pthread_kill
// __pthread_sigmask
// __sigwait
// __disable_threadsignal
// __pthread_markcancel
// __pthread_canceled
// __semwait_signal
// Proc_info
// sendfile
// Stat64_extended
// Lstat64_extended
// Fstat64_extended
// __pthread_chdir
// __pthread_fchdir
// Audit
// Auditon
// Getauid
// Setauid
// Getaudit
// Setaudit
// Getaudit_addr
// Setaudit_addr
// Auditctl
// Bsdthread_create
// Bsdthread_terminate
// Stack_snapshot
// Bsdthread_register
// Workq_open
// Workq_ops
// __mac_execve
// __mac_syscall
// __mac_get_file
// __mac_set_file
// __mac_get_link
// __mac_set_link
// __mac_get_proc
// __mac_set_proc
// __mac_get_fd
// __mac_set_fd
// __mac_get_pid
// __mac_get_lcid
// __mac_get_lctx
// __mac_set_lctx
// Setlcid
// Read_nocancel
// Write_nocancel
// Open_nocancel
// Close_nocancel
// Wait4_nocancel
// Recvmsg_nocancel
// Sendmsg_nocancel
// Recvfrom_nocancel
// Accept_nocancel
// Fcntl_nocancel
// Select_nocancel
// Fsync_nocancel
// Connect_nocancel
// Sigsuspend_nocancel
// Readv_nocancel
// Writev_nocancel
// Sendto_nocancel
// Pread_nocancel
// Pwrite_nocancel
// Waitid_nocancel
// Poll_nocancel
// Msgsnd_nocancel
// Msgrcv_nocancel
// Sem_wait_nocancel
// Aio_suspend_nocancel
// __sigwait_nocancel
// __semwait_signal_nocancel
// __mac_mount
// __mac_get_mount
// __mac_getfsstat
07070100000DE4000081A4000000000000000000000001645E367C00000674000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go  // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build amd64 && darwin
// +build amd64,darwin

package unix

import "syscall"

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: nsec}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: int32(usec)}
}

func SetKevent(k *Kevent_t, fd, mode, flags int) {
	k.Ident = uint64(fd)
	k.Filter = int16(mode)
	k.Flags = uint16(flags)
}

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint64(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint32(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = int32(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint32(length)
}

func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)

//sys	Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
//sys	Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
//sys	Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64
//sys	getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT64
//sys	Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
//sys	ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) = SYS_ptrace
//sys	ptrace1Ptr(request int, pid int, addr unsafe.Pointer, data uintptr) (err error) = SYS_ptrace
//sys	Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
//sys	Statfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64
07070100000DE5000081A4000000000000000000000001645E367C00000621000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go  // Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build arm64 && darwin
// +build arm64,darwin

package unix

import "syscall"

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: nsec}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: int32(usec)}
}

func SetKevent(k *Kevent_t, fd, mode, flags int) {
	k.Ident = uint64(fd)
	k.Filter = int16(mode)
	k.Flags = uint16(flags)
}

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint64(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint32(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = int32(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint32(length)
}

func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) // sic

//sys	Fstat(fd int, stat *Stat_t) (err error)
//sys	Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
//sys	Fstatfs(fd int, stat *Statfs_t) (err error)
//sys	getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT
//sys	Lstat(path string, stat *Stat_t) (err error)
//sys	ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) = SYS_ptrace
//sys	ptrace1Ptr(request int, pid int, addr unsafe.Pointer, data uintptr) (err error) = SYS_ptrace
//sys	Stat(path string, stat *Stat_t) (err error)
//sys	Statfs(path string, stat *Statfs_t) (err error)
   07070100000DE6000081A4000000000000000000000001645E367C000004EB000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go  // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build darwin && go1.12
// +build darwin,go1.12

package unix

import _ "unsafe"

// Implemented in the runtime package (runtime/sys_darwin.go)
func syscall_syscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
func syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
func syscall_syscall6X(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
func syscall_syscall9(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) // 32-bit only
func syscall_rawSyscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
func syscall_rawSyscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
func syscall_syscallPtr(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)

//go:linkname syscall_syscall syscall.syscall
//go:linkname syscall_syscall6 syscall.syscall6
//go:linkname syscall_syscall6X syscall.syscall6X
//go:linkname syscall_syscall9 syscall.syscall9
//go:linkname syscall_rawSyscall syscall.rawSyscall
//go:linkname syscall_rawSyscall6 syscall.rawSyscall6
//go:linkname syscall_syscallPtr syscall.syscallPtr
 07070100000DE7000081A4000000000000000000000001645E367C00003952000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_dragonfly.go // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// DragonFly BSD system calls.
// This file is compiled as ordinary Go code,
// but it is also input to mksyscall,
// which parses the //sys lines and generates system call stubs.
// Note that sometimes we use a lowercase //sys name and wrap
// it in our own nicer implementation, either here or in
// syscall_bsd.go or syscall_unix.go.

package unix

import (
	"sync"
	"unsafe"
)

// See version list in https://github.com/DragonFlyBSD/DragonFlyBSD/blob/master/sys/sys/param.h
var (
	osreldateOnce sync.Once
	osreldate     uint32
)

// First __DragonFly_version after September 2019 ABI changes
// http://lists.dragonflybsd.org/pipermail/users/2019-September/358280.html
const _dragonflyABIChangeVersion = 500705

func supportsABI(ver uint32) bool {
	osreldateOnce.Do(func() { osreldate, _ = SysctlUint32("kern.osreldate") })
	return osreldate >= ver
}

// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.
type SockaddrDatalink struct {
	Len    uint8
	Family uint8
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [12]int8
	Rcf    uint16
	Route  [16]uint16
	raw    RawSockaddrDatalink
}

func anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
	return nil, EAFNOSUPPORT
}

// Translate "kern.hostname" to []_C_int{0,1,2,3}.
func nametomib(name string) (mib []_C_int, err error) {
	const siz = unsafe.Sizeof(mib[0])

	// NOTE(rsc): It seems strange to set the buffer to have
	// size CTL_MAXNAME+2 but use only CTL_MAXNAME
	// as the size. I don't know why the +2 is here, but the
	// kernel uses +2 for its own implementation of this function.
	// I am scared that if we don't include the +2 here, the kernel
	// will silently write 2 words farther than we specify
	// and we'll get memory corruption.
	var buf [CTL_MAXNAME + 2]_C_int
	n := uintptr(CTL_MAXNAME) * siz

	p := (*byte)(unsafe.Pointer(&buf[0]))
	bytes, err := ByteSliceFromString(name)
	if err != nil {
		return nil, err
	}

	// Magic sysctl: "setting" 0.3 to a string name
	// lets you read back the array of integers form.
	if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil {
		return nil, err
	}
	return buf[0 : n/siz], nil
}

func direntIno(buf []byte) (uint64, bool) {
	return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))
}

func direntReclen(buf []byte) (uint64, bool) {
	namlen, ok := direntNamlen(buf)
	if !ok {
		return 0, false
	}
	return (16 + namlen + 1 + 7) &^ 7, true
}

func direntNamlen(buf []byte) (uint64, bool) {
	return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
}

//sysnb	pipe() (r int, w int, err error)

func Pipe(p []int) (err error) {
	if len(p) != 2 {
		return EINVAL
	}
	r, w, err := pipe()
	if err == nil {
		p[0], p[1] = r, w
	}
	return
}

//sysnb	pipe2(p *[2]_C_int, flags int) (r int, w int, err error)

func Pipe2(p []int, flags int) (err error) {
	if len(p) != 2 {
		return EINVAL
	}
	var pp [2]_C_int
	// pipe2 on dragonfly takes an fds array as an argument, but still
	// returns the file descriptors.
	r, w, err := pipe2(&pp, flags)
	if err == nil {
		p[0], p[1] = r, w
	}
	return err
}

//sys	extpread(fd int, p []byte, flags int, offset int64) (n int, err error)

func pread(fd int, p []byte, offset int64) (n int, err error) {
	return extpread(fd, p, 0, offset)
}

//sys	extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error)

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	return extpwrite(fd, p, 0, offset)
}

func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) {
	var rsa RawSockaddrAny
	var len _Socklen = SizeofSockaddrAny
	nfd, err = accept4(fd, &rsa, &len, flags)
	if err != nil {
		return
	}
	if len > SizeofSockaddrAny {
		panic("RawSockaddrAny too small")
	}
	sa, err = anyToSockaddr(fd, &rsa)
	if err != nil {
		Close(nfd)
		nfd = 0
	}
	return
}

//sys	Getcwd(buf []byte) (n int, err error) = SYS___GETCWD

func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
	var _p0 unsafe.Pointer
	var bufsize uintptr
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
		bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))
	}
	r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

//sys	ioctl(fd int, req uint, arg uintptr) (err error)
//sys	ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL

//sys	sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL

func sysctlUname(mib []_C_int, old *byte, oldlen *uintptr) error {
	err := sysctl(mib, old, oldlen, nil, 0)
	if err != nil {
		// Utsname members on Dragonfly are only 32 bytes and
		// the syscall returns ENOMEM in case the actual value
		// is longer.
		if err == ENOMEM {
			err = nil
		}
	}
	return err
}

func Uname(uname *Utsname) error {
	mib := []_C_int{CTL_KERN, KERN_OSTYPE}
	n := unsafe.Sizeof(uname.Sysname)
	if err := sysctlUname(mib, &uname.Sysname[0], &n); err != nil {
		return err
	}
	uname.Sysname[unsafe.Sizeof(uname.Sysname)-1] = 0

	mib = []_C_int{CTL_KERN, KERN_HOSTNAME}
	n = unsafe.Sizeof(uname.Nodename)
	if err := sysctlUname(mib, &uname.Nodename[0], &n); err != nil {
		return err
	}
	uname.Nodename[unsafe.Sizeof(uname.Nodename)-1] = 0

	mib = []_C_int{CTL_KERN, KERN_OSRELEASE}
	n = unsafe.Sizeof(uname.Release)
	if err := sysctlUname(mib, &uname.Release[0], &n); err != nil {
		return err
	}
	uname.Release[unsafe.Sizeof(uname.Release)-1] = 0

	mib = []_C_int{CTL_KERN, KERN_VERSION}
	n = unsafe.Sizeof(uname.Version)
	if err := sysctlUname(mib, &uname.Version[0], &n); err != nil {
		return err
	}

	// The version might have newlines or tabs in it, convert them to
	// spaces.
	for i, b := range uname.Version {
		if b == '\n' || b == '\t' {
			if i == len(uname.Version)-1 {
				uname.Version[i] = 0
			} else {
				uname.Version[i] = ' '
			}
		}
	}

	mib = []_C_int{CTL_HW, HW_MACHINE}
	n = unsafe.Sizeof(uname.Machine)
	if err := sysctlUname(mib, &uname.Machine[0], &n); err != nil {
		return err
	}
	uname.Machine[unsafe.Sizeof(uname.Machine)-1] = 0

	return nil
}

func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	if raceenabled {
		raceReleaseMerge(unsafe.Pointer(&ioSync))
	}
	return sendfile(outfd, infd, offset, count)
}

/*
 * Exposed directly
 */
//sys	Access(path string, mode uint32) (err error)
//sys	Adjtime(delta *Timeval, olddelta *Timeval) (err error)
//sys	Chdir(path string) (err error)
//sys	Chflags(path string, flags int) (err error)
//sys	Chmod(path string, mode uint32) (err error)
//sys	Chown(path string, uid int, gid int) (err error)
//sys	Chroot(path string) (err error)
//sys	ClockGettime(clockid int32, time *Timespec) (err error)
//sys	Close(fd int) (err error)
//sys	Dup(fd int) (nfd int, err error)
//sys	Dup2(from int, to int) (err error)
//sys	Exit(code int)
//sys	Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
//sys	Fchdir(fd int) (err error)
//sys	Fchflags(fd int, flags int) (err error)
//sys	Fchmod(fd int, mode uint32) (err error)
//sys	Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
//sys	Fchown(fd int, uid int, gid int) (err error)
//sys	Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
//sys	Flock(fd int, how int) (err error)
//sys	Fpathconf(fd int, name int) (val int, err error)
//sys	Fstat(fd int, stat *Stat_t) (err error)
//sys	Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
//sys	Fstatfs(fd int, stat *Statfs_t) (err error)
//sys	Fsync(fd int) (err error)
//sys	Ftruncate(fd int, length int64) (err error)
//sys	Getdents(fd int, buf []byte) (n int, err error)
//sys	Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error)
//sys	Getdtablesize() (size int)
//sysnb	Getegid() (egid int)
//sysnb	Geteuid() (uid int)
//sysnb	Getgid() (gid int)
//sysnb	Getpgid(pid int) (pgid int, err error)
//sysnb	Getpgrp() (pgrp int)
//sysnb	Getpid() (pid int)
//sysnb	Getppid() (ppid int)
//sys	Getpriority(which int, who int) (prio int, err error)
//sysnb	Getrlimit(which int, lim *Rlimit) (err error)
//sysnb	Getrusage(who int, rusage *Rusage) (err error)
//sysnb	Getsid(pid int) (sid int, err error)
//sysnb	Gettimeofday(tv *Timeval) (err error)
//sysnb	Getuid() (uid int)
//sys	Issetugid() (tainted bool)
//sys	Kill(pid int, signum syscall.Signal) (err error)
//sys	Kqueue() (fd int, err error)
//sys	Lchown(path string, uid int, gid int) (err error)
//sys	Link(path string, link string) (err error)
//sys	Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error)
//sys	Listen(s int, backlog int) (err error)
//sys	Lstat(path string, stat *Stat_t) (err error)
//sys	Mkdir(path string, mode uint32) (err error)
//sys	Mkdirat(dirfd int, path string, mode uint32) (err error)
//sys	Mkfifo(path string, mode uint32) (err error)
//sys	Mknod(path string, mode uint32, dev int) (err error)
//sys	Mknodat(fd int, path string, mode uint32, dev int) (err error)
//sys	Nanosleep(time *Timespec, leftover *Timespec) (err error)
//sys	Open(path string, mode int, perm uint32) (fd int, err error)
//sys	Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error)
//sys	Pathconf(path string, name int) (val int, err error)
//sys	read(fd int, p []byte) (n int, err error)
//sys	Readlink(path string, buf []byte) (n int, err error)
//sys	Rename(from string, to string) (err error)
//sys	Renameat(fromfd int, from string, tofd int, to string) (err error)
//sys	Revoke(path string) (err error)
//sys	Rmdir(path string) (err error)
//sys	Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
//sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
//sysnb	Setegid(egid int) (err error)
//sysnb	Seteuid(euid int) (err error)
//sysnb	Setgid(gid int) (err error)
//sys	Setlogin(name string) (err error)
//sysnb	Setpgid(pid int, pgid int) (err error)
//sys	Setpriority(which int, who int, prio int) (err error)
//sysnb	Setregid(rgid int, egid int) (err error)
//sysnb	Setreuid(ruid int, euid int) (err error)
//sysnb	Setresgid(rgid int, egid int, sgid int) (err error)
//sysnb	Setresuid(ruid int, euid int, suid int) (err error)
//sysnb	Setsid() (pid int, err error)
//sysnb	Settimeofday(tp *Timeval) (err error)
//sysnb	Setuid(uid int) (err error)
//sys	Stat(path string, stat *Stat_t) (err error)
//sys	Statfs(path string, stat *Statfs_t) (err error)
//sys	Symlink(path string, link string) (err error)
//sys	Symlinkat(oldpath string, newdirfd int, newpath string) (err error)
//sys	Sync() (err error)
//sys	Truncate(path string, length int64) (err error)
//sys	Umask(newmask int) (oldmask int)
//sys	Undelete(path string) (err error)
//sys	Unlink(path string) (err error)
//sys	Unlinkat(dirfd int, path string, flags int) (err error)
//sys	Unmount(path string, flags int) (err error)
//sys	write(fd int, p []byte) (n int, err error)
//sys	mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
//sys	munmap(addr uintptr, length uintptr) (err error)
//sys	readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ
//sys	writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE
//sys	accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error)
//sys	utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)

/*
 * Unimplemented
 * TODO(jsing): Update this list for DragonFly.
 */
// Profil
// Sigaction
// Sigprocmask
// Getlogin
// Sigpending
// Sigaltstack
// Reboot
// Execve
// Vfork
// Sbrk
// Sstk
// Ovadvise
// Mincore
// Setitimer
// Swapon
// Select
// Sigsuspend
// Readv
// Writev
// Nfssvc
// Getfh
// Quotactl
// Mount
// Csops
// Waitid
// Add_profil
// Kdebug_trace
// Sigreturn
// Atsocket
// Kqueue_from_portset_np
// Kqueue_portset
// Getattrlist
// Setattrlist
// Getdirentriesattr
// Searchfs
// Delete
// Copyfile
// Watchevent
// Waitevent
// Modwatch
// Getxattr
// Fgetxattr
// Setxattr
// Fsetxattr
// Removexattr
// Fremovexattr
// Listxattr
// Flistxattr
// Fsctl
// Initgroups
// Posix_spawn
// Nfsclnt
// Fhopen
// Minherit
// Semsys
// Msgsys
// Shmsys
// Semctl
// Semget
// Semop
// Msgctl
// Msgget
// Msgsnd
// Msgrcv
// Shmat
// Shmctl
// Shmdt
// Shmget
// Shm_open
// Shm_unlink
// Sem_open
// Sem_close
// Sem_unlink
// Sem_wait
// Sem_trywait
// Sem_post
// Sem_getvalue
// Sem_init
// Sem_destroy
// Open_extended
// Umask_extended
// Stat_extended
// Lstat_extended
// Fstat_extended
// Chmod_extended
// Fchmod_extended
// Access_extended
// Settid
// Gettid
// Setsgroups
// Getsgroups
// Setwgroups
// Getwgroups
// Mkfifo_extended
// Mkdir_extended
// Identitysvc
// Shared_region_check_np
// Shared_region_map_np
// __pthread_mutex_destroy
// __pthread_mutex_init
// __pthread_mutex_lock
// __pthread_mutex_trylock
// __pthread_mutex_unlock
// __pthread_cond_init
// __pthread_cond_destroy
// __pthread_cond_broadcast
// __pthread_cond_signal
// Setsid_with_pid
// __pthread_cond_timedwait
// Aio_fsync
// Aio_return
// Aio_suspend
// Aio_cancel
// Aio_error
// Aio_read
// Aio_write
// Lio_listio
// __pthread_cond_wait
// Iopolicysys
// __pthread_kill
// __pthread_sigmask
// __sigwait
// __disable_threadsignal
// __pthread_markcancel
// __pthread_canceled
// __semwait_signal
// Proc_info
// Stat64_extended
// Lstat64_extended
// Fstat64_extended
// __pthread_chdir
// __pthread_fchdir
// Audit
// Auditon
// Getauid
// Setauid
// Getaudit
// Setaudit
// Getaudit_addr
// Setaudit_addr
// Auditctl
// Bsdthread_create
// Bsdthread_terminate
// Stack_snapshot
// Bsdthread_register
// Workq_open
// Workq_ops
// __mac_execve
// __mac_syscall
// __mac_get_file
// __mac_set_file
// __mac_get_link
// __mac_set_link
// __mac_get_proc
// __mac_set_proc
// __mac_get_fd
// __mac_set_fd
// __mac_get_pid
// __mac_get_lcid
// __mac_get_lctx
// __mac_set_lctx
// Setlcid
// Read_nocancel
// Write_nocancel
// Open_nocancel
// Close_nocancel
// Wait4_nocancel
// Recvmsg_nocancel
// Sendmsg_nocancel
// Recvfrom_nocancel
// Accept_nocancel
// Fcntl_nocancel
// Select_nocancel
// Fsync_nocancel
// Connect_nocancel
// Sigsuspend_nocancel
// Readv_nocancel
// Writev_nocancel
// Sendto_nocancel
// Pread_nocancel
// Pwrite_nocancel
// Waitid_nocancel
// Msgsnd_nocancel
// Msgrcv_nocancel
// Sem_wait_nocancel
// Aio_suspend_nocancel
// __sigwait_nocancel
// __semwait_signal_nocancel
// __mac_mount
// __mac_get_mount
// __mac_getfsstat
  07070100000DE8000081A4000000000000000000000001645E367C00000516000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go   // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build amd64 && dragonfly
// +build amd64,dragonfly

package unix

import (
	"syscall"
	"unsafe"
)

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: nsec}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: usec}
}

func SetKevent(k *Kevent_t, fd, mode, flags int) {
	k.Ident = uint64(fd)
	k.Filter = int16(mode)
	k.Flags = uint16(flags)
}

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint64(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint32(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = int32(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint32(length)
}

func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	var writtenOut uint64 = 0
	_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0)

	written = int(writtenOut)

	if e1 != 0 {
		err = e1
	}
	return
}

func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
  07070100000DE9000081A4000000000000000000000001645E367C0000497B000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_freebsd.go   // Copyright 2009,2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// FreeBSD system calls.
// This file is compiled as ordinary Go code,
// but it is also input to mksyscall,
// which parses the //sys lines and generates system call stubs.
// Note that sometimes we use a lowercase //sys name and wrap
// it in our own nicer implementation, either here or in
// syscall_bsd.go or syscall_unix.go.

package unix

import (
	"sync"
	"unsafe"
)

// See https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/versions.html.
var (
	osreldateOnce sync.Once
	osreldate     uint32
)

func supportsABI(ver uint32) bool {
	osreldateOnce.Do(func() { osreldate, _ = SysctlUint32("kern.osreldate") })
	return osreldate >= ver
}

// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.
type SockaddrDatalink struct {
	Len    uint8
	Family uint8
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [46]int8
	raw    RawSockaddrDatalink
}

func anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
	return nil, EAFNOSUPPORT
}

// Translate "kern.hostname" to []_C_int{0,1,2,3}.
func nametomib(name string) (mib []_C_int, err error) {
	const siz = unsafe.Sizeof(mib[0])

	// NOTE(rsc): It seems strange to set the buffer to have
	// size CTL_MAXNAME+2 but use only CTL_MAXNAME
	// as the size. I don't know why the +2 is here, but the
	// kernel uses +2 for its own implementation of this function.
	// I am scared that if we don't include the +2 here, the kernel
	// will silently write 2 words farther than we specify
	// and we'll get memory corruption.
	var buf [CTL_MAXNAME + 2]_C_int
	n := uintptr(CTL_MAXNAME) * siz

	p := (*byte)(unsafe.Pointer(&buf[0]))
	bytes, err := ByteSliceFromString(name)
	if err != nil {
		return nil, err
	}

	// Magic sysctl: "setting" 0.3 to a string name
	// lets you read back the array of integers form.
	if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil {
		return nil, err
	}
	return buf[0 : n/siz], nil
}

func direntIno(buf []byte) (uint64, bool) {
	return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))
}

func direntReclen(buf []byte) (uint64, bool) {
	return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
}

func direntNamlen(buf []byte) (uint64, bool) {
	return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
}

func Pipe(p []int) (err error) {
	return Pipe2(p, 0)
}

//sysnb	pipe2(p *[2]_C_int, flags int) (err error)

func Pipe2(p []int, flags int) error {
	if len(p) != 2 {
		return EINVAL
	}
	var pp [2]_C_int
	err := pipe2(&pp, flags)
	if err == nil {
		p[0] = int(pp[0])
		p[1] = int(pp[1])
	}
	return err
}

func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) {
	var value IPMreqn
	vallen := _Socklen(SizeofIPMreqn)
	errno := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
	return &value, errno
}

func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) {
	return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq))
}

// GetsockoptXucred is a getsockopt wrapper that returns an Xucred struct.
// The usual level and opt are SOL_LOCAL and LOCAL_PEERCRED, respectively.
func GetsockoptXucred(fd, level, opt int) (*Xucred, error) {
	x := new(Xucred)
	vallen := _Socklen(SizeofXucred)
	err := getsockopt(fd, level, opt, unsafe.Pointer(x), &vallen)
	return x, err
}

func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) {
	var rsa RawSockaddrAny
	var len _Socklen = SizeofSockaddrAny
	nfd, err = accept4(fd, &rsa, &len, flags)
	if err != nil {
		return
	}
	if len > SizeofSockaddrAny {
		panic("RawSockaddrAny too small")
	}
	sa, err = anyToSockaddr(fd, &rsa)
	if err != nil {
		Close(nfd)
		nfd = 0
	}
	return
}

//sys	Getcwd(buf []byte) (n int, err error) = SYS___GETCWD

func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
	var (
		_p0     unsafe.Pointer
		bufsize uintptr
	)
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
		bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))
	}
	r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

//sys	ioctl(fd int, req uint, arg uintptr) (err error) = SYS_IOCTL
//sys	ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL

//sys	sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL

func Uname(uname *Utsname) error {
	mib := []_C_int{CTL_KERN, KERN_OSTYPE}
	n := unsafe.Sizeof(uname.Sysname)
	if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil {
		return err
	}

	mib = []_C_int{CTL_KERN, KERN_HOSTNAME}
	n = unsafe.Sizeof(uname.Nodename)
	if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil {
		return err
	}

	mib = []_C_int{CTL_KERN, KERN_OSRELEASE}
	n = unsafe.Sizeof(uname.Release)
	if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil {
		return err
	}

	mib = []_C_int{CTL_KERN, KERN_VERSION}
	n = unsafe.Sizeof(uname.Version)
	if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil {
		return err
	}

	// The version might have newlines or tabs in it, convert them to
	// spaces.
	for i, b := range uname.Version {
		if b == '\n' || b == '\t' {
			if i == len(uname.Version)-1 {
				uname.Version[i] = 0
			} else {
				uname.Version[i] = ' '
			}
		}
	}

	mib = []_C_int{CTL_HW, HW_MACHINE}
	n = unsafe.Sizeof(uname.Machine)
	if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil {
		return err
	}

	return nil
}

func Stat(path string, st *Stat_t) (err error) {
	return Fstatat(AT_FDCWD, path, st, 0)
}

func Lstat(path string, st *Stat_t) (err error) {
	return Fstatat(AT_FDCWD, path, st, AT_SYMLINK_NOFOLLOW)
}

func Getdents(fd int, buf []byte) (n int, err error) {
	return Getdirentries(fd, buf, nil)
}

func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
	if basep == nil || unsafe.Sizeof(*basep) == 8 {
		return getdirentries(fd, buf, (*uint64)(unsafe.Pointer(basep)))
	}
	// The syscall needs a 64-bit base. On 32-bit machines
	// we can't just use the basep passed in. See #32498.
	var base uint64 = uint64(*basep)
	n, err = getdirentries(fd, buf, &base)
	*basep = uintptr(base)
	if base>>32 != 0 {
		// We can't stuff the base back into a uintptr, so any
		// future calls would be suspect. Generate an error.
		// EIO is allowed by getdirentries.
		err = EIO
	}
	return
}

func Mknod(path string, mode uint32, dev uint64) (err error) {
	return Mknodat(AT_FDCWD, path, mode, dev)
}

func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	if raceenabled {
		raceReleaseMerge(unsafe.Pointer(&ioSync))
	}
	return sendfile(outfd, infd, offset, count)
}

//sys	ptrace(request int, pid int, addr uintptr, data int) (err error)
//sys	ptracePtr(request int, pid int, addr unsafe.Pointer, data int) (err error) = SYS_PTRACE

func PtraceAttach(pid int) (err error) {
	return ptrace(PT_ATTACH, pid, 0, 0)
}

func PtraceCont(pid int, signal int) (err error) {
	return ptrace(PT_CONTINUE, pid, 1, signal)
}

func PtraceDetach(pid int) (err error) {
	return ptrace(PT_DETACH, pid, 1, 0)
}

func PtraceGetFpRegs(pid int, fpregsout *FpReg) (err error) {
	return ptracePtr(PT_GETFPREGS, pid, unsafe.Pointer(fpregsout), 0)
}

func PtraceGetRegs(pid int, regsout *Reg) (err error) {
	return ptracePtr(PT_GETREGS, pid, unsafe.Pointer(regsout), 0)
}

func PtraceIO(req int, pid int, offs uintptr, out []byte, countin int) (count int, err error) {
	ioDesc := PtraceIoDesc{
		Op:   int32(req),
		Offs: offs,
	}
	if countin > 0 {
		_ = out[:countin] // check bounds
		ioDesc.Addr = &out[0]
	} else if out != nil {
		ioDesc.Addr = (*byte)(unsafe.Pointer(&_zero))
	}
	ioDesc.SetLen(countin)

	err = ptracePtr(PT_IO, pid, unsafe.Pointer(&ioDesc), 0)
	return int(ioDesc.Len), err
}

func PtraceLwpEvents(pid int, enable int) (err error) {
	return ptrace(PT_LWP_EVENTS, pid, 0, enable)
}

func PtraceLwpInfo(pid int, info *PtraceLwpInfoStruct) (err error) {
	return ptracePtr(PT_LWPINFO, pid, unsafe.Pointer(info), int(unsafe.Sizeof(*info)))
}

func PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) {
	return PtraceIO(PIOD_READ_D, pid, addr, out, SizeofLong)
}

func PtracePeekText(pid int, addr uintptr, out []byte) (count int, err error) {
	return PtraceIO(PIOD_READ_I, pid, addr, out, SizeofLong)
}

func PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) {
	return PtraceIO(PIOD_WRITE_D, pid, addr, data, SizeofLong)
}

func PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) {
	return PtraceIO(PIOD_WRITE_I, pid, addr, data, SizeofLong)
}

func PtraceSetRegs(pid int, regs *Reg) (err error) {
	return ptracePtr(PT_SETREGS, pid, unsafe.Pointer(regs), 0)
}

func PtraceSingleStep(pid int) (err error) {
	return ptrace(PT_STEP, pid, 1, 0)
}

func Dup3(oldfd, newfd, flags int) error {
	if oldfd == newfd || flags&^O_CLOEXEC != 0 {
		return EINVAL
	}
	how := F_DUP2FD
	if flags&O_CLOEXEC != 0 {
		how = F_DUP2FD_CLOEXEC
	}
	_, err := fcntl(oldfd, how, newfd)
	return err
}

/*
 * Exposed directly
 */
//sys	Access(path string, mode uint32) (err error)
//sys	Adjtime(delta *Timeval, olddelta *Timeval) (err error)
//sys	CapEnter() (err error)
//sys	capRightsGet(version int, fd int, rightsp *CapRights) (err error) = SYS___CAP_RIGHTS_GET
//sys	capRightsLimit(fd int, rightsp *CapRights) (err error)
//sys	Chdir(path string) (err error)
//sys	Chflags(path string, flags int) (err error)
//sys	Chmod(path string, mode uint32) (err error)
//sys	Chown(path string, uid int, gid int) (err error)
//sys	Chroot(path string) (err error)
//sys	ClockGettime(clockid int32, time *Timespec) (err error)
//sys	Close(fd int) (err error)
//sys	Dup(fd int) (nfd int, err error)
//sys	Dup2(from int, to int) (err error)
//sys	Exit(code int)
//sys	ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
//sys	ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
//sys	ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error)
//sys	ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
//sys	ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
//sys	ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
//sys	ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error)
//sys	ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
//sys	ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
//sys	ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
//sys	ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error)
//sys	ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
//sys	Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE
//sys	Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
//sys	Fchdir(fd int) (err error)
//sys	Fchflags(fd int, flags int) (err error)
//sys	Fchmod(fd int, mode uint32) (err error)
//sys	Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
//sys	Fchown(fd int, uid int, gid int) (err error)
//sys	Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
//sys	Flock(fd int, how int) (err error)
//sys	Fpathconf(fd int, name int) (val int, err error)
//sys	Fstat(fd int, stat *Stat_t) (err error)
//sys	Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
//sys	Fstatfs(fd int, stat *Statfs_t) (err error)
//sys	Fsync(fd int) (err error)
//sys	Ftruncate(fd int, length int64) (err error)
//sys	getdirentries(fd int, buf []byte, basep *uint64) (n int, err error)
//sys	Getdtablesize() (size int)
//sysnb	Getegid() (egid int)
//sysnb	Geteuid() (uid int)
//sysnb	Getgid() (gid int)
//sysnb	Getpgid(pid int) (pgid int, err error)
//sysnb	Getpgrp() (pgrp int)
//sysnb	Getpid() (pid int)
//sysnb	Getppid() (ppid int)
//sys	Getpriority(which int, who int) (prio int, err error)
//sysnb	Getrlimit(which int, lim *Rlimit) (err error)
//sysnb	Getrusage(who int, rusage *Rusage) (err error)
//sysnb	Getsid(pid int) (sid int, err error)
//sysnb	Gettimeofday(tv *Timeval) (err error)
//sysnb	Getuid() (uid int)
//sys	Issetugid() (tainted bool)
//sys	Kill(pid int, signum syscall.Signal) (err error)
//sys	Kqueue() (fd int, err error)
//sys	Lchown(path string, uid int, gid int) (err error)
//sys	Link(path string, link string) (err error)
//sys	Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error)
//sys	Listen(s int, backlog int) (err error)
//sys	Mkdir(path string, mode uint32) (err error)
//sys	Mkdirat(dirfd int, path string, mode uint32) (err error)
//sys	Mkfifo(path string, mode uint32) (err error)
//sys	Mknodat(fd int, path string, mode uint32, dev uint64) (err error)
//sys	Nanosleep(time *Timespec, leftover *Timespec) (err error)
//sys	Open(path string, mode int, perm uint32) (fd int, err error)
//sys	Openat(fdat int, path string, mode int, perm uint32) (fd int, err error)
//sys	Pathconf(path string, name int) (val int, err error)
//sys	pread(fd int, p []byte, offset int64) (n int, err error)
//sys	pwrite(fd int, p []byte, offset int64) (n int, err error)
//sys	read(fd int, p []byte) (n int, err error)
//sys	Readlink(path string, buf []byte) (n int, err error)
//sys	Readlinkat(dirfd int, path string, buf []byte) (n int, err error)
//sys	Rename(from string, to string) (err error)
//sys	Renameat(fromfd int, from string, tofd int, to string) (err error)
//sys	Revoke(path string) (err error)
//sys	Rmdir(path string) (err error)
//sys	Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
//sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
//sysnb	Setegid(egid int) (err error)
//sysnb	Seteuid(euid int) (err error)
//sysnb	Setgid(gid int) (err error)
//sys	Setlogin(name string) (err error)
//sysnb	Setpgid(pid int, pgid int) (err error)
//sys	Setpriority(which int, who int, prio int) (err error)
//sysnb	Setregid(rgid int, egid int) (err error)
//sysnb	Setreuid(ruid int, euid int) (err error)
//sysnb	Setresgid(rgid int, egid int, sgid int) (err error)
//sysnb	Setresuid(ruid int, euid int, suid int) (err error)
//sysnb	Setsid() (pid int, err error)
//sysnb	Settimeofday(tp *Timeval) (err error)
//sysnb	Setuid(uid int) (err error)
//sys	Statfs(path string, stat *Statfs_t) (err error)
//sys	Symlink(path string, link string) (err error)
//sys	Symlinkat(oldpath string, newdirfd int, newpath string) (err error)
//sys	Sync() (err error)
//sys	Truncate(path string, length int64) (err error)
//sys	Umask(newmask int) (oldmask int)
//sys	Undelete(path string) (err error)
//sys	Unlink(path string) (err error)
//sys	Unlinkat(dirfd int, path string, flags int) (err error)
//sys	Unmount(path string, flags int) (err error)
//sys	write(fd int, p []byte) (n int, err error)
//sys	mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
//sys	munmap(addr uintptr, length uintptr) (err error)
//sys	readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ
//sys	writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE
//sys	accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error)
//sys	utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)

/*
 * Unimplemented
 */
// Profil
// Sigaction
// Sigprocmask
// Getlogin
// Sigpending
// Sigaltstack
// Ioctl
// Reboot
// Execve
// Vfork
// Sbrk
// Sstk
// Ovadvise
// Mincore
// Setitimer
// Swapon
// Select
// Sigsuspend
// Readv
// Writev
// Nfssvc
// Getfh
// Quotactl
// Mount
// Csops
// Waitid
// Add_profil
// Kdebug_trace
// Sigreturn
// Atsocket
// Kqueue_from_portset_np
// Kqueue_portset
// Getattrlist
// Setattrlist
// Getdents
// Getdirentriesattr
// Searchfs
// Delete
// Copyfile
// Watchevent
// Waitevent
// Modwatch
// Fsctl
// Initgroups
// Posix_spawn
// Nfsclnt
// Fhopen
// Minherit
// Semsys
// Msgsys
// Shmsys
// Semctl
// Semget
// Semop
// Msgctl
// Msgget
// Msgsnd
// Msgrcv
// Shmat
// Shmctl
// Shmdt
// Shmget
// Shm_open
// Shm_unlink
// Sem_open
// Sem_close
// Sem_unlink
// Sem_wait
// Sem_trywait
// Sem_post
// Sem_getvalue
// Sem_init
// Sem_destroy
// Open_extended
// Umask_extended
// Stat_extended
// Lstat_extended
// Fstat_extended
// Chmod_extended
// Fchmod_extended
// Access_extended
// Settid
// Gettid
// Setsgroups
// Getsgroups
// Setwgroups
// Getwgroups
// Mkfifo_extended
// Mkdir_extended
// Identitysvc
// Shared_region_check_np
// Shared_region_map_np
// __pthread_mutex_destroy
// __pthread_mutex_init
// __pthread_mutex_lock
// __pthread_mutex_trylock
// __pthread_mutex_unlock
// __pthread_cond_init
// __pthread_cond_destroy
// __pthread_cond_broadcast
// __pthread_cond_signal
// Setsid_with_pid
// __pthread_cond_timedwait
// Aio_fsync
// Aio_return
// Aio_suspend
// Aio_cancel
// Aio_error
// Aio_read
// Aio_write
// Lio_listio
// __pthread_cond_wait
// Iopolicysys
// __pthread_kill
// __pthread_sigmask
// __sigwait
// __disable_threadsignal
// __pthread_markcancel
// __pthread_canceled
// __semwait_signal
// Proc_info
// Stat64_extended
// Lstat64_extended
// Fstat64_extended
// __pthread_chdir
// __pthread_fchdir
// Audit
// Auditon
// Getauid
// Setauid
// Getaudit
// Setaudit
// Getaudit_addr
// Setaudit_addr
// Auditctl
// Bsdthread_create
// Bsdthread_terminate
// Stack_snapshot
// Bsdthread_register
// Workq_open
// Workq_ops
// __mac_execve
// __mac_syscall
// __mac_get_file
// __mac_set_file
// __mac_get_link
// __mac_set_link
// __mac_get_proc
// __mac_set_proc
// __mac_get_fd
// __mac_set_fd
// __mac_get_pid
// __mac_get_lcid
// __mac_get_lctx
// __mac_set_lctx
// Setlcid
// Read_nocancel
// Write_nocancel
// Open_nocancel
// Close_nocancel
// Wait4_nocancel
// Recvmsg_nocancel
// Sendmsg_nocancel
// Recvfrom_nocancel
// Accept_nocancel
// Fcntl_nocancel
// Select_nocancel
// Fsync_nocancel
// Connect_nocancel
// Sigsuspend_nocancel
// Readv_nocancel
// Writev_nocancel
// Sendto_nocancel
// Pread_nocancel
// Pwrite_nocancel
// Waitid_nocancel
// Poll_nocancel
// Msgsnd_nocancel
// Msgrcv_nocancel
// Sem_wait_nocancel
// Aio_suspend_nocancel
// __sigwait_nocancel
// __semwait_signal_nocancel
// __mac_mount
// __mac_get_mount
// __mac_getfsstat
 07070100000DEA000081A4000000000000000000000001645E367C00000604000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go   // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build 386 && freebsd
// +build 386,freebsd

package unix

import (
	"syscall"
	"unsafe"
)

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: int32(sec), Usec: int32(usec)}
}

func SetKevent(k *Kevent_t, fd, mode, flags int) {
	k.Ident = uint32(fd)
	k.Filter = int16(mode)
	k.Flags = uint16(flags)
}

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint32(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint32(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = int32(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint32(length)
}

func (d *PtraceIoDesc) SetLen(length int) {
	d.Len = uint32(length)
}

func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	var writtenOut uint64 = 0
	_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0)

	written = int(writtenOut)

	if e1 != 0 {
		err = e1
	}
	return
}

func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)

func PtraceGetFsBase(pid int, fsbase *int64) (err error) {
	return ptracePtr(PT_GETFSBASE, pid, unsafe.Pointer(fsbase), 0)
}
07070100000DEB000081A4000000000000000000000001645E367C000005D7000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build amd64 && freebsd
// +build amd64,freebsd

package unix

import (
	"syscall"
	"unsafe"
)

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: nsec}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: usec}
}

func SetKevent(k *Kevent_t, fd, mode, flags int) {
	k.Ident = uint64(fd)
	k.Filter = int16(mode)
	k.Flags = uint16(flags)
}

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint64(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint32(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = int32(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint32(length)
}

func (d *PtraceIoDesc) SetLen(length int) {
	d.Len = uint64(length)
}

func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	var writtenOut uint64 = 0
	_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0)

	written = int(writtenOut)

	if e1 != 0 {
		err = e1
	}
	return
}

func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)

func PtraceGetFsBase(pid int, fsbase *int64) (err error) {
	return ptracePtr(PT_GETFSBASE, pid, unsafe.Pointer(fsbase), 0)
}
 07070100000DEC000081A4000000000000000000000001645E367C00000578000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go   // Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build arm && freebsd
// +build arm,freebsd

package unix

import (
	"syscall"
	"unsafe"
)

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: int32(nsec)}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: int32(usec)}
}

func SetKevent(k *Kevent_t, fd, mode, flags int) {
	k.Ident = uint32(fd)
	k.Filter = int16(mode)
	k.Flags = uint16(flags)
}

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint32(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint32(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = int32(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint32(length)
}

func (d *PtraceIoDesc) SetLen(length int) {
	d.Len = uint32(length)
}

func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	var writtenOut uint64 = 0
	_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0)

	written = int(writtenOut)

	if e1 != 0 {
		err = e1
	}
	return
}

func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
07070100000DED000081A4000000000000000000000001645E367C00000559000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build arm64 && freebsd
// +build arm64,freebsd

package unix

import (
	"syscall"
	"unsafe"
)

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: nsec}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: usec}
}

func SetKevent(k *Kevent_t, fd, mode, flags int) {
	k.Ident = uint64(fd)
	k.Filter = int16(mode)
	k.Flags = uint16(flags)
}

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint64(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint32(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = int32(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint32(length)
}

func (d *PtraceIoDesc) SetLen(length int) {
	d.Len = uint64(length)
}

func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	var writtenOut uint64 = 0
	_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0)

	written = int(writtenOut)

	if e1 != 0 {
		err = e1
	}
	return
}

func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
   07070100000DEE000081A4000000000000000000000001645E367C0000055D000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go   // Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build riscv64 && freebsd
// +build riscv64,freebsd

package unix

import (
	"syscall"
	"unsafe"
)

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: nsec}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: usec}
}

func SetKevent(k *Kevent_t, fd, mode, flags int) {
	k.Ident = uint64(fd)
	k.Filter = int16(mode)
	k.Flags = uint16(flags)
}

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint64(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint32(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = int32(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint32(length)
}

func (d *PtraceIoDesc) SetLen(length int) {
	d.Len = uint64(length)
}

func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	var writtenOut uint64 = 0
	_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0)

	written = int(writtenOut)

	if e1 != 0 {
		err = e1
	}
	return
}

func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
   07070100000DEF000081A4000000000000000000000001645E367C0000028A000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_hurd.go  // Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build hurd
// +build hurd

package unix

/*
#include <stdint.h>
int ioctl(int, unsigned long int, uintptr_t);
*/
import "C"

func ioctl(fd int, req uint, arg uintptr) (err error) {
	r0, er := C.ioctl(C.int(fd), C.ulong(req), C.uintptr_t(arg))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {
	r0, er := C.ioctl(C.int(fd), C.ulong(req), C.uintptr_t(uintptr(arg)))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}
  07070100000DF0000081A4000000000000000000000001645E367C000001D2000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_hurd_386.go  // Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build 386 && hurd
// +build 386,hurd

package unix

const (
	TIOCGETA = 0x62251713
)

type Winsize struct {
	Row    uint16
	Col    uint16
	Xpixel uint16
	Ypixel uint16
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Cc     [20]uint8
	Ispeed int32
	Ospeed int32
}
  07070100000DF1000081A4000000000000000000000001645E367C00000725000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_illumos.go   // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// illumos system calls not present on Solaris.

//go:build amd64 && illumos
// +build amd64,illumos

package unix

import (
	"unsafe"
)

func bytes2iovec(bs [][]byte) []Iovec {
	iovecs := make([]Iovec, len(bs))
	for i, b := range bs {
		iovecs[i].SetLen(len(b))
		if len(b) > 0 {
			iovecs[i].Base = &b[0]
		} else {
			iovecs[i].Base = (*byte)(unsafe.Pointer(&_zero))
		}
	}
	return iovecs
}

//sys	readv(fd int, iovs []Iovec) (n int, err error)

func Readv(fd int, iovs [][]byte) (n int, err error) {
	iovecs := bytes2iovec(iovs)
	n, err = readv(fd, iovecs)
	return n, err
}

//sys	preadv(fd int, iovs []Iovec, off int64) (n int, err error)

func Preadv(fd int, iovs [][]byte, off int64) (n int, err error) {
	iovecs := bytes2iovec(iovs)
	n, err = preadv(fd, iovecs, off)
	return n, err
}

//sys	writev(fd int, iovs []Iovec) (n int, err error)

func Writev(fd int, iovs [][]byte) (n int, err error) {
	iovecs := bytes2iovec(iovs)
	n, err = writev(fd, iovecs)
	return n, err
}

//sys	pwritev(fd int, iovs []Iovec, off int64) (n int, err error)

func Pwritev(fd int, iovs [][]byte, off int64) (n int, err error) {
	iovecs := bytes2iovec(iovs)
	n, err = pwritev(fd, iovecs, off)
	return n, err
}

//sys	accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) = libsocket.accept4

func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) {
	var rsa RawSockaddrAny
	var len _Socklen = SizeofSockaddrAny
	nfd, err = accept4(fd, &rsa, &len, flags)
	if err != nil {
		return
	}
	if len > SizeofSockaddrAny {
		panic("RawSockaddrAny too small")
	}
	sa, err = anyToSockaddr(fd, &rsa)
	if err != nil {
		Close(nfd)
		nfd = 0
	}
	return
}
   07070100000DF2000081A4000000000000000000000001645E367C00012368000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_linux.go // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Linux system calls.
// This file is compiled as ordinary Go code,
// but it is also input to mksyscall,
// which parses the //sys lines and generates system call stubs.
// Note that sometimes we use a lowercase //sys name and
// wrap it in our own nicer implementation.

package unix

import (
	"encoding/binary"
	"strconv"
	"syscall"
	"time"
	"unsafe"
)

/*
 * Wrapped
 */

func Access(path string, mode uint32) (err error) {
	return Faccessat(AT_FDCWD, path, mode, 0)
}

func Chmod(path string, mode uint32) (err error) {
	return Fchmodat(AT_FDCWD, path, mode, 0)
}

func Chown(path string, uid int, gid int) (err error) {
	return Fchownat(AT_FDCWD, path, uid, gid, 0)
}

func Creat(path string, mode uint32) (fd int, err error) {
	return Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode)
}

func EpollCreate(size int) (fd int, err error) {
	if size <= 0 {
		return -1, EINVAL
	}
	return EpollCreate1(0)
}

//sys	FanotifyInit(flags uint, event_f_flags uint) (fd int, err error)
//sys	fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error)

func FanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname string) (err error) {
	if pathname == "" {
		return fanotifyMark(fd, flags, mask, dirFd, nil)
	}
	p, err := BytePtrFromString(pathname)
	if err != nil {
		return err
	}
	return fanotifyMark(fd, flags, mask, dirFd, p)
}

//sys	fchmodat(dirfd int, path string, mode uint32) (err error)

func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
	// Linux fchmodat doesn't support the flags parameter. Mimick glibc's behavior
	// and check the flags. Otherwise the mode would be applied to the symlink
	// destination which is not what the user expects.
	if flags&^AT_SYMLINK_NOFOLLOW != 0 {
		return EINVAL
	} else if flags&AT_SYMLINK_NOFOLLOW != 0 {
		return EOPNOTSUPP
	}
	return fchmodat(dirfd, path, mode)
}

func InotifyInit() (fd int, err error) {
	return InotifyInit1(0)
}

//sys	ioctl(fd int, req uint, arg uintptr) (err error) = SYS_IOCTL
//sys	ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL

// ioctl itself should not be exposed directly, but additional get/set functions
// for specific types are permissible. These are defined in ioctl.go and
// ioctl_linux.go.
//
// The third argument to ioctl is often a pointer but sometimes an integer.
// Callers should use ioctlPtr when the third argument is a pointer and ioctl
// when the third argument is an integer.
//
// TODO: some existing code incorrectly uses ioctl when it should use ioctlPtr.

//sys	Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error)

func Link(oldpath string, newpath string) (err error) {
	return Linkat(AT_FDCWD, oldpath, AT_FDCWD, newpath, 0)
}

func Mkdir(path string, mode uint32) (err error) {
	return Mkdirat(AT_FDCWD, path, mode)
}

func Mknod(path string, mode uint32, dev int) (err error) {
	return Mknodat(AT_FDCWD, path, mode, dev)
}

func Open(path string, mode int, perm uint32) (fd int, err error) {
	return openat(AT_FDCWD, path, mode|O_LARGEFILE, perm)
}

//sys	openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)

func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {
	return openat(dirfd, path, flags|O_LARGEFILE, mode)
}

//sys	openat2(dirfd int, path string, open_how *OpenHow, size int) (fd int, err error)

func Openat2(dirfd int, path string, how *OpenHow) (fd int, err error) {
	return openat2(dirfd, path, how, SizeofOpenHow)
}

func Pipe(p []int) error {
	return Pipe2(p, 0)
}

//sysnb	pipe2(p *[2]_C_int, flags int) (err error)

func Pipe2(p []int, flags int) error {
	if len(p) != 2 {
		return EINVAL
	}
	var pp [2]_C_int
	err := pipe2(&pp, flags)
	if err == nil {
		p[0] = int(pp[0])
		p[1] = int(pp[1])
	}
	return err
}

//sys	ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error)

func Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
	if len(fds) == 0 {
		return ppoll(nil, 0, timeout, sigmask)
	}
	return ppoll(&fds[0], len(fds), timeout, sigmask)
}

func Poll(fds []PollFd, timeout int) (n int, err error) {
	var ts *Timespec
	if timeout >= 0 {
		ts = new(Timespec)
		*ts = NsecToTimespec(int64(timeout) * 1e6)
	}
	return Ppoll(fds, ts, nil)
}

//sys	Readlinkat(dirfd int, path string, buf []byte) (n int, err error)

func Readlink(path string, buf []byte) (n int, err error) {
	return Readlinkat(AT_FDCWD, path, buf)
}

func Rename(oldpath string, newpath string) (err error) {
	return Renameat(AT_FDCWD, oldpath, AT_FDCWD, newpath)
}

func Rmdir(path string) error {
	return Unlinkat(AT_FDCWD, path, AT_REMOVEDIR)
}

//sys	Symlinkat(oldpath string, newdirfd int, newpath string) (err error)

func Symlink(oldpath string, newpath string) (err error) {
	return Symlinkat(oldpath, AT_FDCWD, newpath)
}

func Unlink(path string) error {
	return Unlinkat(AT_FDCWD, path, 0)
}

//sys	Unlinkat(dirfd int, path string, flags int) (err error)

func Utimes(path string, tv []Timeval) error {
	if tv == nil {
		err := utimensat(AT_FDCWD, path, nil, 0)
		if err != ENOSYS {
			return err
		}
		return utimes(path, nil)
	}
	if len(tv) != 2 {
		return EINVAL
	}
	var ts [2]Timespec
	ts[0] = NsecToTimespec(TimevalToNsec(tv[0]))
	ts[1] = NsecToTimespec(TimevalToNsec(tv[1]))
	err := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
	if err != ENOSYS {
		return err
	}
	return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
}

//sys	utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)

func UtimesNano(path string, ts []Timespec) error {
	return UtimesNanoAt(AT_FDCWD, path, ts, 0)
}

func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {
	if ts == nil {
		return utimensat(dirfd, path, nil, flags)
	}
	if len(ts) != 2 {
		return EINVAL
	}
	return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)
}

func Futimesat(dirfd int, path string, tv []Timeval) error {
	if tv == nil {
		return futimesat(dirfd, path, nil)
	}
	if len(tv) != 2 {
		return EINVAL
	}
	return futimesat(dirfd, path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
}

func Futimes(fd int, tv []Timeval) (err error) {
	// Believe it or not, this is the best we can do on Linux
	// (and is what glibc does).
	return Utimes("/proc/self/fd/"+strconv.Itoa(fd), tv)
}

const ImplementsGetwd = true

//sys	Getcwd(buf []byte) (n int, err error)

func Getwd() (wd string, err error) {
	var buf [PathMax]byte
	n, err := Getcwd(buf[0:])
	if err != nil {
		return "", err
	}
	// Getcwd returns the number of bytes written to buf, including the NUL.
	if n < 1 || n > len(buf) || buf[n-1] != 0 {
		return "", EINVAL
	}
	// In some cases, Linux can return a path that starts with the
	// "(unreachable)" prefix, which can potentially be a valid relative
	// path. To work around that, return ENOENT if path is not absolute.
	if buf[0] != '/' {
		return "", ENOENT
	}

	return string(buf[0 : n-1]), nil
}

func Getgroups() (gids []int, err error) {
	n, err := getgroups(0, nil)
	if err != nil {
		return nil, err
	}
	if n == 0 {
		return nil, nil
	}

	// Sanity check group count. Max is 1<<16 on Linux.
	if n < 0 || n > 1<<20 {
		return nil, EINVAL
	}

	a := make([]_Gid_t, n)
	n, err = getgroups(n, &a[0])
	if err != nil {
		return nil, err
	}
	gids = make([]int, n)
	for i, v := range a[0:n] {
		gids[i] = int(v)
	}
	return
}

func Setgroups(gids []int) (err error) {
	if len(gids) == 0 {
		return setgroups(0, nil)
	}

	a := make([]_Gid_t, len(gids))
	for i, v := range gids {
		a[i] = _Gid_t(v)
	}
	return setgroups(len(a), &a[0])
}

type WaitStatus uint32

// Wait status is 7 bits at bottom, either 0 (exited),
// 0x7F (stopped), or a signal number that caused an exit.
// The 0x80 bit is whether there was a core dump.
// An extra number (exit code, signal causing a stop)
// is in the high bits. At least that's the idea.
// There are various irregularities. For example, the
// "continued" status is 0xFFFF, distinguishing itself
// from stopped via the core dump bit.

const (
	mask    = 0x7F
	core    = 0x80
	exited  = 0x00
	stopped = 0x7F
	shift   = 8
)

func (w WaitStatus) Exited() bool { return w&mask == exited }

func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != exited }

func (w WaitStatus) Stopped() bool { return w&0xFF == stopped }

func (w WaitStatus) Continued() bool { return w == 0xFFFF }

func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 }

func (w WaitStatus) ExitStatus() int {
	if !w.Exited() {
		return -1
	}
	return int(w>>shift) & 0xFF
}

func (w WaitStatus) Signal() syscall.Signal {
	if !w.Signaled() {
		return -1
	}
	return syscall.Signal(w & mask)
}

func (w WaitStatus) StopSignal() syscall.Signal {
	if !w.Stopped() {
		return -1
	}
	return syscall.Signal(w>>shift) & 0xFF
}

func (w WaitStatus) TrapCause() int {
	if w.StopSignal() != SIGTRAP {
		return -1
	}
	return int(w>>shift) >> 8
}

//sys	wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error)

func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {
	var status _C_int
	wpid, err = wait4(pid, &status, options, rusage)
	if wstatus != nil {
		*wstatus = WaitStatus(status)
	}
	return
}

//sys	Waitid(idType int, id int, info *Siginfo, options int, rusage *Rusage) (err error)

func Mkfifo(path string, mode uint32) error {
	return Mknod(path, mode|S_IFIFO, 0)
}

func Mkfifoat(dirfd int, path string, mode uint32) error {
	return Mknodat(dirfd, path, mode|S_IFIFO, 0)
}

func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {
	if sa.Port < 0 || sa.Port > 0xFFFF {
		return nil, 0, EINVAL
	}
	sa.raw.Family = AF_INET
	p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
	p[0] = byte(sa.Port >> 8)
	p[1] = byte(sa.Port)
	sa.raw.Addr = sa.Addr
	return unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil
}

func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {
	if sa.Port < 0 || sa.Port > 0xFFFF {
		return nil, 0, EINVAL
	}
	sa.raw.Family = AF_INET6
	p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
	p[0] = byte(sa.Port >> 8)
	p[1] = byte(sa.Port)
	sa.raw.Scope_id = sa.ZoneId
	sa.raw.Addr = sa.Addr
	return unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil
}

func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {
	name := sa.Name
	n := len(name)
	if n >= len(sa.raw.Path) {
		return nil, 0, EINVAL
	}
	sa.raw.Family = AF_UNIX
	for i := 0; i < n; i++ {
		sa.raw.Path[i] = int8(name[i])
	}
	// length is family (uint16), name, NUL.
	sl := _Socklen(2)
	if n > 0 {
		sl += _Socklen(n) + 1
	}
	if sa.raw.Path[0] == '@' {
		sa.raw.Path[0] = 0
		// Don't count trailing NUL for abstract address.
		sl--
	}

	return unsafe.Pointer(&sa.raw), sl, nil
}

// SockaddrLinklayer implements the Sockaddr interface for AF_PACKET type sockets.
type SockaddrLinklayer struct {
	Protocol uint16
	Ifindex  int
	Hatype   uint16
	Pkttype  uint8
	Halen    uint8
	Addr     [8]byte
	raw      RawSockaddrLinklayer
}

func (sa *SockaddrLinklayer) sockaddr() (unsafe.Pointer, _Socklen, error) {
	if sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff {
		return nil, 0, EINVAL
	}
	sa.raw.Family = AF_PACKET
	sa.raw.Protocol = sa.Protocol
	sa.raw.Ifindex = int32(sa.Ifindex)
	sa.raw.Hatype = sa.Hatype
	sa.raw.Pkttype = sa.Pkttype
	sa.raw.Halen = sa.Halen
	sa.raw.Addr = sa.Addr
	return unsafe.Pointer(&sa.raw), SizeofSockaddrLinklayer, nil
}

// SockaddrNetlink implements the Sockaddr interface for AF_NETLINK type sockets.
type SockaddrNetlink struct {
	Family uint16
	Pad    uint16
	Pid    uint32
	Groups uint32
	raw    RawSockaddrNetlink
}

func (sa *SockaddrNetlink) sockaddr() (unsafe.Pointer, _Socklen, error) {
	sa.raw.Family = AF_NETLINK
	sa.raw.Pad = sa.Pad
	sa.raw.Pid = sa.Pid
	sa.raw.Groups = sa.Groups
	return unsafe.Pointer(&sa.raw), SizeofSockaddrNetlink, nil
}

// SockaddrHCI implements the Sockaddr interface for AF_BLUETOOTH type sockets
// using the HCI protocol.
type SockaddrHCI struct {
	Dev     uint16
	Channel uint16
	raw     RawSockaddrHCI
}

func (sa *SockaddrHCI) sockaddr() (unsafe.Pointer, _Socklen, error) {
	sa.raw.Family = AF_BLUETOOTH
	sa.raw.Dev = sa.Dev
	sa.raw.Channel = sa.Channel
	return unsafe.Pointer(&sa.raw), SizeofSockaddrHCI, nil
}

// SockaddrL2 implements the Sockaddr interface for AF_BLUETOOTH type sockets
// using the L2CAP protocol.
type SockaddrL2 struct {
	PSM      uint16
	CID      uint16
	Addr     [6]uint8
	AddrType uint8
	raw      RawSockaddrL2
}

func (sa *SockaddrL2) sockaddr() (unsafe.Pointer, _Socklen, error) {
	sa.raw.Family = AF_BLUETOOTH
	psm := (*[2]byte)(unsafe.Pointer(&sa.raw.Psm))
	psm[0] = byte(sa.PSM)
	psm[1] = byte(sa.PSM >> 8)
	for i := 0; i < len(sa.Addr); i++ {
		sa.raw.Bdaddr[i] = sa.Addr[len(sa.Addr)-1-i]
	}
	cid := (*[2]byte)(unsafe.Pointer(&sa.raw.Cid))
	cid[0] = byte(sa.CID)
	cid[1] = byte(sa.CID >> 8)
	sa.raw.Bdaddr_type = sa.AddrType
	return unsafe.Pointer(&sa.raw), SizeofSockaddrL2, nil
}

// SockaddrRFCOMM implements the Sockaddr interface for AF_BLUETOOTH type sockets
// using the RFCOMM protocol.
//
// Server example:
//
//	fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM)
//	_ = unix.Bind(fd, &unix.SockaddrRFCOMM{
//		Channel: 1,
//		Addr:    [6]uint8{0, 0, 0, 0, 0, 0}, // BDADDR_ANY or 00:00:00:00:00:00
//	})
//	_ = Listen(fd, 1)
//	nfd, sa, _ := Accept(fd)
//	fmt.Printf("conn addr=%v fd=%d", sa.(*unix.SockaddrRFCOMM).Addr, nfd)
//	Read(nfd, buf)
//
// Client example:
//
//	fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM)
//	_ = Connect(fd, &SockaddrRFCOMM{
//		Channel: 1,
//		Addr:    [6]byte{0x11, 0x22, 0x33, 0xaa, 0xbb, 0xcc}, // CC:BB:AA:33:22:11
//	})
//	Write(fd, []byte(`hello`))
type SockaddrRFCOMM struct {
	// Addr represents a bluetooth address, byte ordering is little-endian.
	Addr [6]uint8

	// Channel is a designated bluetooth channel, only 1-30 are available for use.
	// Since Linux 2.6.7 and further zero value is the first available channel.
	Channel uint8

	raw RawSockaddrRFCOMM
}

func (sa *SockaddrRFCOMM) sockaddr() (unsafe.Pointer, _Socklen, error) {
	sa.raw.Family = AF_BLUETOOTH
	sa.raw.Channel = sa.Channel
	sa.raw.Bdaddr = sa.Addr
	return unsafe.Pointer(&sa.raw), SizeofSockaddrRFCOMM, nil
}

// SockaddrCAN implements the Sockaddr interface for AF_CAN type sockets.
// The RxID and TxID fields are used for transport protocol addressing in
// (CAN_TP16, CAN_TP20, CAN_MCNET, and CAN_ISOTP), they can be left with
// zero values for CAN_RAW and CAN_BCM sockets as they have no meaning.
//
// The SockaddrCAN struct must be bound to the socket file descriptor
// using Bind before the CAN socket can be used.
//
//	// Read one raw CAN frame
//	fd, _ := Socket(AF_CAN, SOCK_RAW, CAN_RAW)
//	addr := &SockaddrCAN{Ifindex: index}
//	Bind(fd, addr)
//	frame := make([]byte, 16)
//	Read(fd, frame)
//
// The full SocketCAN documentation can be found in the linux kernel
// archives at: https://www.kernel.org/doc/Documentation/networking/can.txt
type SockaddrCAN struct {
	Ifindex int
	RxID    uint32
	TxID    uint32
	raw     RawSockaddrCAN
}

func (sa *SockaddrCAN) sockaddr() (unsafe.Pointer, _Socklen, error) {
	if sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff {
		return nil, 0, EINVAL
	}
	sa.raw.Family = AF_CAN
	sa.raw.Ifindex = int32(sa.Ifindex)
	rx := (*[4]byte)(unsafe.Pointer(&sa.RxID))
	for i := 0; i < 4; i++ {
		sa.raw.Addr[i] = rx[i]
	}
	tx := (*[4]byte)(unsafe.Pointer(&sa.TxID))
	for i := 0; i < 4; i++ {
		sa.raw.Addr[i+4] = tx[i]
	}
	return unsafe.Pointer(&sa.raw), SizeofSockaddrCAN, nil
}

// SockaddrCANJ1939 implements the Sockaddr interface for AF_CAN using J1939
// protocol (https://en.wikipedia.org/wiki/SAE_J1939). For more information
// on the purposes of the fields, check the official linux kernel documentation
// available here: https://www.kernel.org/doc/Documentation/networking/j1939.rst
type SockaddrCANJ1939 struct {
	Ifindex int
	Name    uint64
	PGN     uint32
	Addr    uint8
	raw     RawSockaddrCAN
}

func (sa *SockaddrCANJ1939) sockaddr() (unsafe.Pointer, _Socklen, error) {
	if sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff {
		return nil, 0, EINVAL
	}
	sa.raw.Family = AF_CAN
	sa.raw.Ifindex = int32(sa.Ifindex)
	n := (*[8]byte)(unsafe.Pointer(&sa.Name))
	for i := 0; i < 8; i++ {
		sa.raw.Addr[i] = n[i]
	}
	p := (*[4]byte)(unsafe.Pointer(&sa.PGN))
	for i := 0; i < 4; i++ {
		sa.raw.Addr[i+8] = p[i]
	}
	sa.raw.Addr[12] = sa.Addr
	return unsafe.Pointer(&sa.raw), SizeofSockaddrCAN, nil
}

// SockaddrALG implements the Sockaddr interface for AF_ALG type sockets.
// SockaddrALG enables userspace access to the Linux kernel's cryptography
// subsystem. The Type and Name fields specify which type of hash or cipher
// should be used with a given socket.
//
// To create a file descriptor that provides access to a hash or cipher, both
// Bind and Accept must be used. Once the setup process is complete, input
// data can be written to the socket, processed by the kernel, and then read
// back as hash output or ciphertext.
//
// Here is an example of using an AF_ALG socket with SHA1 hashing.
// The initial socket setup process is as follows:
//
//	// Open a socket to perform SHA1 hashing.
//	fd, _ := unix.Socket(unix.AF_ALG, unix.SOCK_SEQPACKET, 0)
//	addr := &unix.SockaddrALG{Type: "hash", Name: "sha1"}
//	unix.Bind(fd, addr)
//	// Note: unix.Accept does not work at this time; must invoke accept()
//	// manually using unix.Syscall.
//	hashfd, _, _ := unix.Syscall(unix.SYS_ACCEPT, uintptr(fd), 0, 0)
//
// Once a file descriptor has been returned from Accept, it may be used to
// perform SHA1 hashing. The descriptor is not safe for concurrent use, but
// may be re-used repeatedly with subsequent Write and Read operations.
//
// When hashing a small byte slice or string, a single Write and Read may
// be used:
//
//	// Assume hashfd is already configured using the setup process.
//	hash := os.NewFile(hashfd, "sha1")
//	// Hash an input string and read the results. Each Write discards
//	// previous hash state. Read always reads the current state.
//	b := make([]byte, 20)
//	for i := 0; i < 2; i++ {
//	    io.WriteString(hash, "Hello, world.")
//	    hash.Read(b)
//	    fmt.Println(hex.EncodeToString(b))
//	}
//	// Output:
//	// 2ae01472317d1935a84797ec1983ae243fc6aa28
//	// 2ae01472317d1935a84797ec1983ae243fc6aa28
//
// For hashing larger byte slices, or byte streams such as those read from
// a file or socket, use Sendto with MSG_MORE to instruct the kernel to update
// the hash digest instead of creating a new one for a given chunk and finalizing it.
//
//	// Assume hashfd and addr are already configured using the setup process.
//	hash := os.NewFile(hashfd, "sha1")
//	// Hash the contents of a file.
//	f, _ := os.Open("/tmp/linux-4.10-rc7.tar.xz")
//	b := make([]byte, 4096)
//	for {
//	    n, err := f.Read(b)
//	    if err == io.EOF {
//	        break
//	    }
//	    unix.Sendto(hashfd, b[:n], unix.MSG_MORE, addr)
//	}
//	hash.Read(b)
//	fmt.Println(hex.EncodeToString(b))
//	// Output: 85cdcad0c06eef66f805ecce353bec9accbeecc5
//
// For more information, see: http://www.chronox.de/crypto-API/crypto/userspace-if.html.
type SockaddrALG struct {
	Type    string
	Name    string
	Feature uint32
	Mask    uint32
	raw     RawSockaddrALG
}

func (sa *SockaddrALG) sockaddr() (unsafe.Pointer, _Socklen, error) {
	// Leave room for NUL byte terminator.
	if len(sa.Type) > 13 {
		return nil, 0, EINVAL
	}
	if len(sa.Name) > 63 {
		return nil, 0, EINVAL
	}

	sa.raw.Family = AF_ALG
	sa.raw.Feat = sa.Feature
	sa.raw.Mask = sa.Mask

	typ, err := ByteSliceFromString(sa.Type)
	if err != nil {
		return nil, 0, err
	}
	name, err := ByteSliceFromString(sa.Name)
	if err != nil {
		return nil, 0, err
	}

	copy(sa.raw.Type[:], typ)
	copy(sa.raw.Name[:], name)

	return unsafe.Pointer(&sa.raw), SizeofSockaddrALG, nil
}

// SockaddrVM implements the Sockaddr interface for AF_VSOCK type sockets.
// SockaddrVM provides access to Linux VM sockets: a mechanism that enables
// bidirectional communication between a hypervisor and its guest virtual
// machines.
type SockaddrVM struct {
	// CID and Port specify a context ID and port address for a VM socket.
	// Guests have a unique CID, and hosts may have a well-known CID of:
	//  - VMADDR_CID_HYPERVISOR: refers to the hypervisor process.
	//  - VMADDR_CID_LOCAL: refers to local communication (loopback).
	//  - VMADDR_CID_HOST: refers to other processes on the host.
	CID   uint32
	Port  uint32
	Flags uint8
	raw   RawSockaddrVM
}

func (sa *SockaddrVM) sockaddr() (unsafe.Pointer, _Socklen, error) {
	sa.raw.Family = AF_VSOCK
	sa.raw.Port = sa.Port
	sa.raw.Cid = sa.CID
	sa.raw.Flags = sa.Flags

	return unsafe.Pointer(&sa.raw), SizeofSockaddrVM, nil
}

type SockaddrXDP struct {
	Flags        uint16
	Ifindex      uint32
	QueueID      uint32
	SharedUmemFD uint32
	raw          RawSockaddrXDP
}

func (sa *SockaddrXDP) sockaddr() (unsafe.Pointer, _Socklen, error) {
	sa.raw.Family = AF_XDP
	sa.raw.Flags = sa.Flags
	sa.raw.Ifindex = sa.Ifindex
	sa.raw.Queue_id = sa.QueueID
	sa.raw.Shared_umem_fd = sa.SharedUmemFD

	return unsafe.Pointer(&sa.raw), SizeofSockaddrXDP, nil
}

// This constant mirrors the #define of PX_PROTO_OE in
// linux/if_pppox.h. We're defining this by hand here instead of
// autogenerating through mkerrors.sh because including
// linux/if_pppox.h causes some declaration conflicts with other
// includes (linux/if_pppox.h includes linux/in.h, which conflicts
// with netinet/in.h). Given that we only need a single zero constant
// out of that file, it's cleaner to just define it by hand here.
const px_proto_oe = 0

type SockaddrPPPoE struct {
	SID    uint16
	Remote []byte
	Dev    string
	raw    RawSockaddrPPPoX
}

func (sa *SockaddrPPPoE) sockaddr() (unsafe.Pointer, _Socklen, error) {
	if len(sa.Remote) != 6 {
		return nil, 0, EINVAL
	}
	if len(sa.Dev) > IFNAMSIZ-1 {
		return nil, 0, EINVAL
	}

	*(*uint16)(unsafe.Pointer(&sa.raw[0])) = AF_PPPOX
	// This next field is in host-endian byte order. We can't use the
	// same unsafe pointer cast as above, because this value is not
	// 32-bit aligned and some architectures don't allow unaligned
	// access.
	//
	// However, the value of px_proto_oe is 0, so we can use
	// encoding/binary helpers to write the bytes without worrying
	// about the ordering.
	binary.BigEndian.PutUint32(sa.raw[2:6], px_proto_oe)
	// This field is deliberately big-endian, unlike the previous
	// one. The kernel expects SID to be in network byte order.
	binary.BigEndian.PutUint16(sa.raw[6:8], sa.SID)
	copy(sa.raw[8:14], sa.Remote)
	for i := 14; i < 14+IFNAMSIZ; i++ {
		sa.raw[i] = 0
	}
	copy(sa.raw[14:], sa.Dev)
	return unsafe.Pointer(&sa.raw), SizeofSockaddrPPPoX, nil
}

// SockaddrTIPC implements the Sockaddr interface for AF_TIPC type sockets.
// For more information on TIPC, see: http://tipc.sourceforge.net/.
type SockaddrTIPC struct {
	// Scope is the publication scopes when binding service/service range.
	// Should be set to TIPC_CLUSTER_SCOPE or TIPC_NODE_SCOPE.
	Scope int

	// Addr is the type of address used to manipulate a socket. Addr must be
	// one of:
	//  - *TIPCSocketAddr: "id" variant in the C addr union
	//  - *TIPCServiceRange: "nameseq" variant in the C addr union
	//  - *TIPCServiceName: "name" variant in the C addr union
	//
	// If nil, EINVAL will be returned when the structure is used.
	Addr TIPCAddr

	raw RawSockaddrTIPC
}

// TIPCAddr is implemented by types that can be used as an address for
// SockaddrTIPC. It is only implemented by *TIPCSocketAddr, *TIPCServiceRange,
// and *TIPCServiceName.
type TIPCAddr interface {
	tipcAddrtype() uint8
	tipcAddr() [12]byte
}

func (sa *TIPCSocketAddr) tipcAddr() [12]byte {
	var out [12]byte
	copy(out[:], (*(*[unsafe.Sizeof(TIPCSocketAddr{})]byte)(unsafe.Pointer(sa)))[:])
	return out
}

func (sa *TIPCSocketAddr) tipcAddrtype() uint8 { return TIPC_SOCKET_ADDR }

func (sa *TIPCServiceRange) tipcAddr() [12]byte {
	var out [12]byte
	copy(out[:], (*(*[unsafe.Sizeof(TIPCServiceRange{})]byte)(unsafe.Pointer(sa)))[:])
	return out
}

func (sa *TIPCServiceRange) tipcAddrtype() uint8 { return TIPC_SERVICE_RANGE }

func (sa *TIPCServiceName) tipcAddr() [12]byte {
	var out [12]byte
	copy(out[:], (*(*[unsafe.Sizeof(TIPCServiceName{})]byte)(unsafe.Pointer(sa)))[:])
	return out
}

func (sa *TIPCServiceName) tipcAddrtype() uint8 { return TIPC_SERVICE_ADDR }

func (sa *SockaddrTIPC) sockaddr() (unsafe.Pointer, _Socklen, error) {
	if sa.Addr == nil {
		return nil, 0, EINVAL
	}
	sa.raw.Family = AF_TIPC
	sa.raw.Scope = int8(sa.Scope)
	sa.raw.Addrtype = sa.Addr.tipcAddrtype()
	sa.raw.Addr = sa.Addr.tipcAddr()
	return unsafe.Pointer(&sa.raw), SizeofSockaddrTIPC, nil
}

// SockaddrL2TPIP implements the Sockaddr interface for IPPROTO_L2TP/AF_INET sockets.
type SockaddrL2TPIP struct {
	Addr   [4]byte
	ConnId uint32
	raw    RawSockaddrL2TPIP
}

func (sa *SockaddrL2TPIP) sockaddr() (unsafe.Pointer, _Socklen, error) {
	sa.raw.Family = AF_INET
	sa.raw.Conn_id = sa.ConnId
	sa.raw.Addr = sa.Addr
	return unsafe.Pointer(&sa.raw), SizeofSockaddrL2TPIP, nil
}

// SockaddrL2TPIP6 implements the Sockaddr interface for IPPROTO_L2TP/AF_INET6 sockets.
type SockaddrL2TPIP6 struct {
	Addr   [16]byte
	ZoneId uint32
	ConnId uint32
	raw    RawSockaddrL2TPIP6
}

func (sa *SockaddrL2TPIP6) sockaddr() (unsafe.Pointer, _Socklen, error) {
	sa.raw.Family = AF_INET6
	sa.raw.Conn_id = sa.ConnId
	sa.raw.Scope_id = sa.ZoneId
	sa.raw.Addr = sa.Addr
	return unsafe.Pointer(&sa.raw), SizeofSockaddrL2TPIP6, nil
}

// SockaddrIUCV implements the Sockaddr interface for AF_IUCV sockets.
type SockaddrIUCV struct {
	UserID string
	Name   string
	raw    RawSockaddrIUCV
}

func (sa *SockaddrIUCV) sockaddr() (unsafe.Pointer, _Socklen, error) {
	sa.raw.Family = AF_IUCV
	// These are EBCDIC encoded by the kernel, but we still need to pad them
	// with blanks. Initializing with blanks allows the caller to feed in either
	// a padded or an unpadded string.
	for i := 0; i < 8; i++ {
		sa.raw.Nodeid[i] = ' '
		sa.raw.User_id[i] = ' '
		sa.raw.Name[i] = ' '
	}
	if len(sa.UserID) > 8 || len(sa.Name) > 8 {
		return nil, 0, EINVAL
	}
	for i, b := range []byte(sa.UserID[:]) {
		sa.raw.User_id[i] = int8(b)
	}
	for i, b := range []byte(sa.Name[:]) {
		sa.raw.Name[i] = int8(b)
	}
	return unsafe.Pointer(&sa.raw), SizeofSockaddrIUCV, nil
}

type SockaddrNFC struct {
	DeviceIdx   uint32
	TargetIdx   uint32
	NFCProtocol uint32
	raw         RawSockaddrNFC
}

func (sa *SockaddrNFC) sockaddr() (unsafe.Pointer, _Socklen, error) {
	sa.raw.Sa_family = AF_NFC
	sa.raw.Dev_idx = sa.DeviceIdx
	sa.raw.Target_idx = sa.TargetIdx
	sa.raw.Nfc_protocol = sa.NFCProtocol
	return unsafe.Pointer(&sa.raw), SizeofSockaddrNFC, nil
}

type SockaddrNFCLLCP struct {
	DeviceIdx      uint32
	TargetIdx      uint32
	NFCProtocol    uint32
	DestinationSAP uint8
	SourceSAP      uint8
	ServiceName    string
	raw            RawSockaddrNFCLLCP
}

func (sa *SockaddrNFCLLCP) sockaddr() (unsafe.Pointer, _Socklen, error) {
	sa.raw.Sa_family = AF_NFC
	sa.raw.Dev_idx = sa.DeviceIdx
	sa.raw.Target_idx = sa.TargetIdx
	sa.raw.Nfc_protocol = sa.NFCProtocol
	sa.raw.Dsap = sa.DestinationSAP
	sa.raw.Ssap = sa.SourceSAP
	if len(sa.ServiceName) > len(sa.raw.Service_name) {
		return nil, 0, EINVAL
	}
	copy(sa.raw.Service_name[:], sa.ServiceName)
	sa.raw.SetServiceNameLen(len(sa.ServiceName))
	return unsafe.Pointer(&sa.raw), SizeofSockaddrNFCLLCP, nil
}

var socketProtocol = func(fd int) (int, error) {
	return GetsockoptInt(fd, SOL_SOCKET, SO_PROTOCOL)
}

func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
	switch rsa.Addr.Family {
	case AF_NETLINK:
		pp := (*RawSockaddrNetlink)(unsafe.Pointer(rsa))
		sa := new(SockaddrNetlink)
		sa.Family = pp.Family
		sa.Pad = pp.Pad
		sa.Pid = pp.Pid
		sa.Groups = pp.Groups
		return sa, nil

	case AF_PACKET:
		pp := (*RawSockaddrLinklayer)(unsafe.Pointer(rsa))
		sa := new(SockaddrLinklayer)
		sa.Protocol = pp.Protocol
		sa.Ifindex = int(pp.Ifindex)
		sa.Hatype = pp.Hatype
		sa.Pkttype = pp.Pkttype
		sa.Halen = pp.Halen
		sa.Addr = pp.Addr
		return sa, nil

	case AF_UNIX:
		pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))
		sa := new(SockaddrUnix)
		if pp.Path[0] == 0 {
			// "Abstract" Unix domain socket.
			// Rewrite leading NUL as @ for textual display.
			// (This is the standard convention.)
			// Not friendly to overwrite in place,
			// but the callers below don't care.
			pp.Path[0] = '@'
		}

		// Assume path ends at NUL.
		// This is not technically the Linux semantics for
		// abstract Unix domain sockets--they are supposed
		// to be uninterpreted fixed-size binary blobs--but
		// everyone uses this convention.
		n := 0
		for n < len(pp.Path) && pp.Path[n] != 0 {
			n++
		}
		sa.Name = string(unsafe.Slice((*byte)(unsafe.Pointer(&pp.Path[0])), n))
		return sa, nil

	case AF_INET:
		proto, err := socketProtocol(fd)
		if err != nil {
			return nil, err
		}

		switch proto {
		case IPPROTO_L2TP:
			pp := (*RawSockaddrL2TPIP)(unsafe.Pointer(rsa))
			sa := new(SockaddrL2TPIP)
			sa.ConnId = pp.Conn_id
			sa.Addr = pp.Addr
			return sa, nil
		default:
			pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))
			sa := new(SockaddrInet4)
			p := (*[2]byte)(unsafe.Pointer(&pp.Port))
			sa.Port = int(p[0])<<8 + int(p[1])
			sa.Addr = pp.Addr
			return sa, nil
		}

	case AF_INET6:
		proto, err := socketProtocol(fd)
		if err != nil {
			return nil, err
		}

		switch proto {
		case IPPROTO_L2TP:
			pp := (*RawSockaddrL2TPIP6)(unsafe.Pointer(rsa))
			sa := new(SockaddrL2TPIP6)
			sa.ConnId = pp.Conn_id
			sa.ZoneId = pp.Scope_id
			sa.Addr = pp.Addr
			return sa, nil
		default:
			pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))
			sa := new(SockaddrInet6)
			p := (*[2]byte)(unsafe.Pointer(&pp.Port))
			sa.Port = int(p[0])<<8 + int(p[1])
			sa.ZoneId = pp.Scope_id
			sa.Addr = pp.Addr
			return sa, nil
		}

	case AF_VSOCK:
		pp := (*RawSockaddrVM)(unsafe.Pointer(rsa))
		sa := &SockaddrVM{
			CID:   pp.Cid,
			Port:  pp.Port,
			Flags: pp.Flags,
		}
		return sa, nil
	case AF_BLUETOOTH:
		proto, err := socketProtocol(fd)
		if err != nil {
			return nil, err
		}
		// only BTPROTO_L2CAP and BTPROTO_RFCOMM can accept connections
		switch proto {
		case BTPROTO_L2CAP:
			pp := (*RawSockaddrL2)(unsafe.Pointer(rsa))
			sa := &SockaddrL2{
				PSM:      pp.Psm,
				CID:      pp.Cid,
				Addr:     pp.Bdaddr,
				AddrType: pp.Bdaddr_type,
			}
			return sa, nil
		case BTPROTO_RFCOMM:
			pp := (*RawSockaddrRFCOMM)(unsafe.Pointer(rsa))
			sa := &SockaddrRFCOMM{
				Channel: pp.Channel,
				Addr:    pp.Bdaddr,
			}
			return sa, nil
		}
	case AF_XDP:
		pp := (*RawSockaddrXDP)(unsafe.Pointer(rsa))
		sa := &SockaddrXDP{
			Flags:        pp.Flags,
			Ifindex:      pp.Ifindex,
			QueueID:      pp.Queue_id,
			SharedUmemFD: pp.Shared_umem_fd,
		}
		return sa, nil
	case AF_PPPOX:
		pp := (*RawSockaddrPPPoX)(unsafe.Pointer(rsa))
		if binary.BigEndian.Uint32(pp[2:6]) != px_proto_oe {
			return nil, EINVAL
		}
		sa := &SockaddrPPPoE{
			SID:    binary.BigEndian.Uint16(pp[6:8]),
			Remote: pp[8:14],
		}
		for i := 14; i < 14+IFNAMSIZ; i++ {
			if pp[i] == 0 {
				sa.Dev = string(pp[14:i])
				break
			}
		}
		return sa, nil
	case AF_TIPC:
		pp := (*RawSockaddrTIPC)(unsafe.Pointer(rsa))

		sa := &SockaddrTIPC{
			Scope: int(pp.Scope),
		}

		// Determine which union variant is present in pp.Addr by checking
		// pp.Addrtype.
		switch pp.Addrtype {
		case TIPC_SERVICE_RANGE:
			sa.Addr = (*TIPCServiceRange)(unsafe.Pointer(&pp.Addr))
		case TIPC_SERVICE_ADDR:
			sa.Addr = (*TIPCServiceName)(unsafe.Pointer(&pp.Addr))
		case TIPC_SOCKET_ADDR:
			sa.Addr = (*TIPCSocketAddr)(unsafe.Pointer(&pp.Addr))
		default:
			return nil, EINVAL
		}

		return sa, nil
	case AF_IUCV:
		pp := (*RawSockaddrIUCV)(unsafe.Pointer(rsa))

		var user [8]byte
		var name [8]byte

		for i := 0; i < 8; i++ {
			user[i] = byte(pp.User_id[i])
			name[i] = byte(pp.Name[i])
		}

		sa := &SockaddrIUCV{
			UserID: string(user[:]),
			Name:   string(name[:]),
		}
		return sa, nil

	case AF_CAN:
		proto, err := socketProtocol(fd)
		if err != nil {
			return nil, err
		}

		pp := (*RawSockaddrCAN)(unsafe.Pointer(rsa))

		switch proto {
		case CAN_J1939:
			sa := &SockaddrCANJ1939{
				Ifindex: int(pp.Ifindex),
			}
			name := (*[8]byte)(unsafe.Pointer(&sa.Name))
			for i := 0; i < 8; i++ {
				name[i] = pp.Addr[i]
			}
			pgn := (*[4]byte)(unsafe.Pointer(&sa.PGN))
			for i := 0; i < 4; i++ {
				pgn[i] = pp.Addr[i+8]
			}
			addr := (*[1]byte)(unsafe.Pointer(&sa.Addr))
			addr[0] = pp.Addr[12]
			return sa, nil
		default:
			sa := &SockaddrCAN{
				Ifindex: int(pp.Ifindex),
			}
			rx := (*[4]byte)(unsafe.Pointer(&sa.RxID))
			for i := 0; i < 4; i++ {
				rx[i] = pp.Addr[i]
			}
			tx := (*[4]byte)(unsafe.Pointer(&sa.TxID))
			for i := 0; i < 4; i++ {
				tx[i] = pp.Addr[i+4]
			}
			return sa, nil
		}
	case AF_NFC:
		proto, err := socketProtocol(fd)
		if err != nil {
			return nil, err
		}
		switch proto {
		case NFC_SOCKPROTO_RAW:
			pp := (*RawSockaddrNFC)(unsafe.Pointer(rsa))
			sa := &SockaddrNFC{
				DeviceIdx:   pp.Dev_idx,
				TargetIdx:   pp.Target_idx,
				NFCProtocol: pp.Nfc_protocol,
			}
			return sa, nil
		case NFC_SOCKPROTO_LLCP:
			pp := (*RawSockaddrNFCLLCP)(unsafe.Pointer(rsa))
			if uint64(pp.Service_name_len) > uint64(len(pp.Service_name)) {
				return nil, EINVAL
			}
			sa := &SockaddrNFCLLCP{
				DeviceIdx:      pp.Dev_idx,
				TargetIdx:      pp.Target_idx,
				NFCProtocol:    pp.Nfc_protocol,
				DestinationSAP: pp.Dsap,
				SourceSAP:      pp.Ssap,
				ServiceName:    string(pp.Service_name[:pp.Service_name_len]),
			}
			return sa, nil
		default:
			return nil, EINVAL
		}
	}
	return nil, EAFNOSUPPORT
}

func Accept(fd int) (nfd int, sa Sockaddr, err error) {
	var rsa RawSockaddrAny
	var len _Socklen = SizeofSockaddrAny
	nfd, err = accept4(fd, &rsa, &len, 0)
	if err != nil {
		return
	}
	sa, err = anyToSockaddr(fd, &rsa)
	if err != nil {
		Close(nfd)
		nfd = 0
	}
	return
}

func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) {
	var rsa RawSockaddrAny
	var len _Socklen = SizeofSockaddrAny
	nfd, err = accept4(fd, &rsa, &len, flags)
	if err != nil {
		return
	}
	if len > SizeofSockaddrAny {
		panic("RawSockaddrAny too small")
	}
	sa, err = anyToSockaddr(fd, &rsa)
	if err != nil {
		Close(nfd)
		nfd = 0
	}
	return
}

func Getsockname(fd int) (sa Sockaddr, err error) {
	var rsa RawSockaddrAny
	var len _Socklen = SizeofSockaddrAny
	if err = getsockname(fd, &rsa, &len); err != nil {
		return
	}
	return anyToSockaddr(fd, &rsa)
}

func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) {
	var value IPMreqn
	vallen := _Socklen(SizeofIPMreqn)
	err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
	return &value, err
}

func GetsockoptUcred(fd, level, opt int) (*Ucred, error) {
	var value Ucred
	vallen := _Socklen(SizeofUcred)
	err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
	return &value, err
}

func GetsockoptTCPInfo(fd, level, opt int) (*TCPInfo, error) {
	var value TCPInfo
	vallen := _Socklen(SizeofTCPInfo)
	err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
	return &value, err
}

// GetsockoptString returns the string value of the socket option opt for the
// socket associated with fd at the given socket level.
func GetsockoptString(fd, level, opt int) (string, error) {
	buf := make([]byte, 256)
	vallen := _Socklen(len(buf))
	err := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)
	if err != nil {
		if err == ERANGE {
			buf = make([]byte, vallen)
			err = getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)
		}
		if err != nil {
			return "", err
		}
	}
	return string(buf[:vallen-1]), nil
}

func GetsockoptTpacketStats(fd, level, opt int) (*TpacketStats, error) {
	var value TpacketStats
	vallen := _Socklen(SizeofTpacketStats)
	err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
	return &value, err
}

func GetsockoptTpacketStatsV3(fd, level, opt int) (*TpacketStatsV3, error) {
	var value TpacketStatsV3
	vallen := _Socklen(SizeofTpacketStatsV3)
	err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
	return &value, err
}

func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) {
	return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq))
}

func SetsockoptPacketMreq(fd, level, opt int, mreq *PacketMreq) error {
	return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq))
}

// SetsockoptSockFprog attaches a classic BPF or an extended BPF program to a
// socket to filter incoming packets.  See 'man 7 socket' for usage information.
func SetsockoptSockFprog(fd, level, opt int, fprog *SockFprog) error {
	return setsockopt(fd, level, opt, unsafe.Pointer(fprog), unsafe.Sizeof(*fprog))
}

func SetsockoptCanRawFilter(fd, level, opt int, filter []CanFilter) error {
	var p unsafe.Pointer
	if len(filter) > 0 {
		p = unsafe.Pointer(&filter[0])
	}
	return setsockopt(fd, level, opt, p, uintptr(len(filter)*SizeofCanFilter))
}

func SetsockoptTpacketReq(fd, level, opt int, tp *TpacketReq) error {
	return setsockopt(fd, level, opt, unsafe.Pointer(tp), unsafe.Sizeof(*tp))
}

func SetsockoptTpacketReq3(fd, level, opt int, tp *TpacketReq3) error {
	return setsockopt(fd, level, opt, unsafe.Pointer(tp), unsafe.Sizeof(*tp))
}

func SetsockoptTCPRepairOpt(fd, level, opt int, o []TCPRepairOpt) (err error) {
	if len(o) == 0 {
		return EINVAL
	}
	return setsockopt(fd, level, opt, unsafe.Pointer(&o[0]), uintptr(SizeofTCPRepairOpt*len(o)))
}

func SetsockoptTCPMD5Sig(fd, level, opt int, s *TCPMD5Sig) error {
	return setsockopt(fd, level, opt, unsafe.Pointer(s), unsafe.Sizeof(*s))
}

// Keyctl Commands (http://man7.org/linux/man-pages/man2/keyctl.2.html)

// KeyctlInt calls keyctl commands in which each argument is an int.
// These commands are KEYCTL_REVOKE, KEYCTL_CHOWN, KEYCTL_CLEAR, KEYCTL_LINK,
// KEYCTL_UNLINK, KEYCTL_NEGATE, KEYCTL_SET_REQKEY_KEYRING, KEYCTL_SET_TIMEOUT,
// KEYCTL_ASSUME_AUTHORITY, KEYCTL_SESSION_TO_PARENT, KEYCTL_REJECT,
// KEYCTL_INVALIDATE, and KEYCTL_GET_PERSISTENT.
//sys	KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) = SYS_KEYCTL

// KeyctlBuffer calls keyctl commands in which the third and fourth
// arguments are a buffer and its length, respectively.
// These commands are KEYCTL_UPDATE, KEYCTL_READ, and KEYCTL_INSTANTIATE.
//sys	KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) = SYS_KEYCTL

// KeyctlString calls keyctl commands which return a string.
// These commands are KEYCTL_DESCRIBE and KEYCTL_GET_SECURITY.
func KeyctlString(cmd int, id int) (string, error) {
	// We must loop as the string data may change in between the syscalls.
	// We could allocate a large buffer here to reduce the chance that the
	// syscall needs to be called twice; however, this is unnecessary as
	// the performance loss is negligible.
	var buffer []byte
	for {
		// Try to fill the buffer with data
		length, err := KeyctlBuffer(cmd, id, buffer, 0)
		if err != nil {
			return "", err
		}

		// Check if the data was written
		if length <= len(buffer) {
			// Exclude the null terminator
			return string(buffer[:length-1]), nil
		}

		// Make a bigger buffer if needed
		buffer = make([]byte, length)
	}
}

// Keyctl commands with special signatures.

// KeyctlGetKeyringID implements the KEYCTL_GET_KEYRING_ID command.
// See the full documentation at:
// http://man7.org/linux/man-pages/man3/keyctl_get_keyring_ID.3.html
func KeyctlGetKeyringID(id int, create bool) (ringid int, err error) {
	createInt := 0
	if create {
		createInt = 1
	}
	return KeyctlInt(KEYCTL_GET_KEYRING_ID, id, createInt, 0, 0)
}

// KeyctlSetperm implements the KEYCTL_SETPERM command. The perm value is the
// key handle permission mask as described in the "keyctl setperm" section of
// http://man7.org/linux/man-pages/man1/keyctl.1.html.
// See the full documentation at:
// http://man7.org/linux/man-pages/man3/keyctl_setperm.3.html
func KeyctlSetperm(id int, perm uint32) error {
	_, err := KeyctlInt(KEYCTL_SETPERM, id, int(perm), 0, 0)
	return err
}

//sys	keyctlJoin(cmd int, arg2 string) (ret int, err error) = SYS_KEYCTL

// KeyctlJoinSessionKeyring implements the KEYCTL_JOIN_SESSION_KEYRING command.
// See the full documentation at:
// http://man7.org/linux/man-pages/man3/keyctl_join_session_keyring.3.html
func KeyctlJoinSessionKeyring(name string) (ringid int, err error) {
	return keyctlJoin(KEYCTL_JOIN_SESSION_KEYRING, name)
}

//sys	keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) = SYS_KEYCTL

// KeyctlSearch implements the KEYCTL_SEARCH command.
// See the full documentation at:
// http://man7.org/linux/man-pages/man3/keyctl_search.3.html
func KeyctlSearch(ringid int, keyType, description string, destRingid int) (id int, err error) {
	return keyctlSearch(KEYCTL_SEARCH, ringid, keyType, description, destRingid)
}

//sys	keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) = SYS_KEYCTL

// KeyctlInstantiateIOV implements the KEYCTL_INSTANTIATE_IOV command. This
// command is similar to KEYCTL_INSTANTIATE, except that the payload is a slice
// of Iovec (each of which represents a buffer) instead of a single buffer.
// See the full documentation at:
// http://man7.org/linux/man-pages/man3/keyctl_instantiate_iov.3.html
func KeyctlInstantiateIOV(id int, payload []Iovec, ringid int) error {
	return keyctlIOV(KEYCTL_INSTANTIATE_IOV, id, payload, ringid)
}

//sys	keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) = SYS_KEYCTL

// KeyctlDHCompute implements the KEYCTL_DH_COMPUTE command. This command
// computes a Diffie-Hellman shared secret based on the provide params. The
// secret is written to the provided buffer and the returned size is the number
// of bytes written (returning an error if there is insufficient space in the
// buffer). If a nil buffer is passed in, this function returns the minimum
// buffer length needed to store the appropriate data. Note that this differs
// from KEYCTL_READ's behavior which always returns the requested payload size.
// See the full documentation at:
// http://man7.org/linux/man-pages/man3/keyctl_dh_compute.3.html
func KeyctlDHCompute(params *KeyctlDHParams, buffer []byte) (size int, err error) {
	return keyctlDH(KEYCTL_DH_COMPUTE, params, buffer)
}

// KeyctlRestrictKeyring implements the KEYCTL_RESTRICT_KEYRING command. This
// command limits the set of keys that can be linked to the keyring, regardless
// of keyring permissions. The command requires the "setattr" permission.
//
// When called with an empty keyType the command locks the keyring, preventing
// any further keys from being linked to the keyring.
//
// The "asymmetric" keyType defines restrictions requiring key payloads to be
// DER encoded X.509 certificates signed by keys in another keyring. Restrictions
// for "asymmetric" include "builtin_trusted", "builtin_and_secondary_trusted",
// "key_or_keyring:<key>", and "key_or_keyring:<key>:chain".
//
// As of Linux 4.12, only the "asymmetric" keyType defines type-specific
// restrictions.
//
// See the full documentation at:
// http://man7.org/linux/man-pages/man3/keyctl_restrict_keyring.3.html
// http://man7.org/linux/man-pages/man2/keyctl.2.html
func KeyctlRestrictKeyring(ringid int, keyType string, restriction string) error {
	if keyType == "" {
		return keyctlRestrictKeyring(KEYCTL_RESTRICT_KEYRING, ringid)
	}
	return keyctlRestrictKeyringByType(KEYCTL_RESTRICT_KEYRING, ringid, keyType, restriction)
}

//sys	keyctlRestrictKeyringByType(cmd int, arg2 int, keyType string, restriction string) (err error) = SYS_KEYCTL
//sys	keyctlRestrictKeyring(cmd int, arg2 int) (err error) = SYS_KEYCTL

func recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) {
	var msg Msghdr
	msg.Name = (*byte)(unsafe.Pointer(rsa))
	msg.Namelen = uint32(SizeofSockaddrAny)
	var dummy byte
	if len(oob) > 0 {
		if emptyIovecs(iov) {
			var sockType int
			sockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE)
			if err != nil {
				return
			}
			// receive at least one normal byte
			if sockType != SOCK_DGRAM {
				var iova [1]Iovec
				iova[0].Base = &dummy
				iova[0].SetLen(1)
				iov = iova[:]
			}
		}
		msg.Control = &oob[0]
		msg.SetControllen(len(oob))
	}
	if len(iov) > 0 {
		msg.Iov = &iov[0]
		msg.SetIovlen(len(iov))
	}
	if n, err = recvmsg(fd, &msg, flags); err != nil {
		return
	}
	oobn = int(msg.Controllen)
	recvflags = int(msg.Flags)
	return
}

func sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) {
	var msg Msghdr
	msg.Name = (*byte)(ptr)
	msg.Namelen = uint32(salen)
	var dummy byte
	var empty bool
	if len(oob) > 0 {
		empty = emptyIovecs(iov)
		if empty {
			var sockType int
			sockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE)
			if err != nil {
				return 0, err
			}
			// send at least one normal byte
			if sockType != SOCK_DGRAM {
				var iova [1]Iovec
				iova[0].Base = &dummy
				iova[0].SetLen(1)
				iov = iova[:]
			}
		}
		msg.Control = &oob[0]
		msg.SetControllen(len(oob))
	}
	if len(iov) > 0 {
		msg.Iov = &iov[0]
		msg.SetIovlen(len(iov))
	}
	if n, err = sendmsg(fd, &msg, flags); err != nil {
		return 0, err
	}
	if len(oob) > 0 && empty {
		n = 0
	}
	return n, nil
}

// BindToDevice binds the socket associated with fd to device.
func BindToDevice(fd int, device string) (err error) {
	return SetsockoptString(fd, SOL_SOCKET, SO_BINDTODEVICE, device)
}

//sys	ptrace(request int, pid int, addr uintptr, data uintptr) (err error)
//sys	ptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) = SYS_PTRACE

func ptracePeek(req int, pid int, addr uintptr, out []byte) (count int, err error) {
	// The peek requests are machine-size oriented, so we wrap it
	// to retrieve arbitrary-length data.

	// The ptrace syscall differs from glibc's ptrace.
	// Peeks returns the word in *data, not as the return value.

	var buf [SizeofPtr]byte

	// Leading edge. PEEKTEXT/PEEKDATA don't require aligned
	// access (PEEKUSER warns that it might), but if we don't
	// align our reads, we might straddle an unmapped page
	// boundary and not get the bytes leading up to the page
	// boundary.
	n := 0
	if addr%SizeofPtr != 0 {
		err = ptracePtr(req, pid, addr-addr%SizeofPtr, unsafe.Pointer(&buf[0]))
		if err != nil {
			return 0, err
		}
		n += copy(out, buf[addr%SizeofPtr:])
		out = out[n:]
	}

	// Remainder.
	for len(out) > 0 {
		// We use an internal buffer to guarantee alignment.
		// It's not documented if this is necessary, but we're paranoid.
		err = ptracePtr(req, pid, addr+uintptr(n), unsafe.Pointer(&buf[0]))
		if err != nil {
			return n, err
		}
		copied := copy(out, buf[0:])
		n += copied
		out = out[copied:]
	}

	return n, nil
}

func PtracePeekText(pid int, addr uintptr, out []byte) (count int, err error) {
	return ptracePeek(PTRACE_PEEKTEXT, pid, addr, out)
}

func PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) {
	return ptracePeek(PTRACE_PEEKDATA, pid, addr, out)
}

func PtracePeekUser(pid int, addr uintptr, out []byte) (count int, err error) {
	return ptracePeek(PTRACE_PEEKUSR, pid, addr, out)
}

func ptracePoke(pokeReq int, peekReq int, pid int, addr uintptr, data []byte) (count int, err error) {
	// As for ptracePeek, we need to align our accesses to deal
	// with the possibility of straddling an invalid page.

	// Leading edge.
	n := 0
	if addr%SizeofPtr != 0 {
		var buf [SizeofPtr]byte
		err = ptracePtr(peekReq, pid, addr-addr%SizeofPtr, unsafe.Pointer(&buf[0]))
		if err != nil {
			return 0, err
		}
		n += copy(buf[addr%SizeofPtr:], data)
		word := *((*uintptr)(unsafe.Pointer(&buf[0])))
		err = ptrace(pokeReq, pid, addr-addr%SizeofPtr, word)
		if err != nil {
			return 0, err
		}
		data = data[n:]
	}

	// Interior.
	for len(data) > SizeofPtr {
		word := *((*uintptr)(unsafe.Pointer(&data[0])))
		err = ptrace(pokeReq, pid, addr+uintptr(n), word)
		if err != nil {
			return n, err
		}
		n += SizeofPtr
		data = data[SizeofPtr:]
	}

	// Trailing edge.
	if len(data) > 0 {
		var buf [SizeofPtr]byte
		err = ptracePtr(peekReq, pid, addr+uintptr(n), unsafe.Pointer(&buf[0]))
		if err != nil {
			return n, err
		}
		copy(buf[0:], data)
		word := *((*uintptr)(unsafe.Pointer(&buf[0])))
		err = ptrace(pokeReq, pid, addr+uintptr(n), word)
		if err != nil {
			return n, err
		}
		n += len(data)
	}

	return n, nil
}

func PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) {
	return ptracePoke(PTRACE_POKETEXT, PTRACE_PEEKTEXT, pid, addr, data)
}

func PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) {
	return ptracePoke(PTRACE_POKEDATA, PTRACE_PEEKDATA, pid, addr, data)
}

func PtracePokeUser(pid int, addr uintptr, data []byte) (count int, err error) {
	return ptracePoke(PTRACE_POKEUSR, PTRACE_PEEKUSR, pid, addr, data)
}

func PtraceGetRegs(pid int, regsout *PtraceRegs) (err error) {
	return ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout))
}

func PtraceSetRegs(pid int, regs *PtraceRegs) (err error) {
	return ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs))
}

func PtraceSetOptions(pid int, options int) (err error) {
	return ptrace(PTRACE_SETOPTIONS, pid, 0, uintptr(options))
}

func PtraceGetEventMsg(pid int) (msg uint, err error) {
	var data _C_long
	err = ptracePtr(PTRACE_GETEVENTMSG, pid, 0, unsafe.Pointer(&data))
	msg = uint(data)
	return
}

func PtraceCont(pid int, signal int) (err error) {
	return ptrace(PTRACE_CONT, pid, 0, uintptr(signal))
}

func PtraceSyscall(pid int, signal int) (err error) {
	return ptrace(PTRACE_SYSCALL, pid, 0, uintptr(signal))
}

func PtraceSingleStep(pid int) (err error) { return ptrace(PTRACE_SINGLESTEP, pid, 0, 0) }

func PtraceInterrupt(pid int) (err error) { return ptrace(PTRACE_INTERRUPT, pid, 0, 0) }

func PtraceAttach(pid int) (err error) { return ptrace(PTRACE_ATTACH, pid, 0, 0) }

func PtraceSeize(pid int) (err error) { return ptrace(PTRACE_SEIZE, pid, 0, 0) }

func PtraceDetach(pid int) (err error) { return ptrace(PTRACE_DETACH, pid, 0, 0) }

//sys	reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error)

func Reboot(cmd int) (err error) {
	return reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, cmd, "")
}

func direntIno(buf []byte) (uint64, bool) {
	return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))
}

func direntReclen(buf []byte) (uint64, bool) {
	return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
}

func direntNamlen(buf []byte) (uint64, bool) {
	reclen, ok := direntReclen(buf)
	if !ok {
		return 0, false
	}
	return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true
}

//sys	mount(source string, target string, fstype string, flags uintptr, data *byte) (err error)

func Mount(source string, target string, fstype string, flags uintptr, data string) (err error) {
	// Certain file systems get rather angry and EINVAL if you give
	// them an empty string of data, rather than NULL.
	if data == "" {
		return mount(source, target, fstype, flags, nil)
	}
	datap, err := BytePtrFromString(data)
	if err != nil {
		return err
	}
	return mount(source, target, fstype, flags, datap)
}

//sys	mountSetattr(dirfd int, pathname string, flags uint, attr *MountAttr, size uintptr) (err error) = SYS_MOUNT_SETATTR

// MountSetattr is a wrapper for mount_setattr(2).
// https://man7.org/linux/man-pages/man2/mount_setattr.2.html
//
// Requires kernel >= 5.12.
func MountSetattr(dirfd int, pathname string, flags uint, attr *MountAttr) error {
	return mountSetattr(dirfd, pathname, flags, attr, unsafe.Sizeof(*attr))
}

func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	if raceenabled {
		raceReleaseMerge(unsafe.Pointer(&ioSync))
	}
	return sendfile(outfd, infd, offset, count)
}

// Sendto
// Recvfrom
// Socketpair

/*
 * Direct access
 */
//sys	Acct(path string) (err error)
//sys	AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error)
//sys	Adjtimex(buf *Timex) (state int, err error)
//sysnb	Capget(hdr *CapUserHeader, data *CapUserData) (err error)
//sysnb	Capset(hdr *CapUserHeader, data *CapUserData) (err error)
//sys	Chdir(path string) (err error)
//sys	Chroot(path string) (err error)
//sys	ClockAdjtime(clockid int32, buf *Timex) (state int, err error)
//sys	ClockGetres(clockid int32, res *Timespec) (err error)
//sys	ClockGettime(clockid int32, time *Timespec) (err error)
//sys	ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error)
//sys	Close(fd int) (err error)
//sys	CloseRange(first uint, last uint, flags uint) (err error)
//sys	CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
//sys	DeleteModule(name string, flags int) (err error)
//sys	Dup(oldfd int) (fd int, err error)

func Dup2(oldfd, newfd int) error {
	return Dup3(oldfd, newfd, 0)
}

//sys	Dup3(oldfd int, newfd int, flags int) (err error)
//sysnb	EpollCreate1(flag int) (fd int, err error)
//sysnb	EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error)
//sys	Eventfd(initval uint, flags int) (fd int, err error) = SYS_EVENTFD2
//sys	Exit(code int) = SYS_EXIT_GROUP
//sys	Fallocate(fd int, mode uint32, off int64, len int64) (err error)
//sys	Fchdir(fd int) (err error)
//sys	Fchmod(fd int, mode uint32) (err error)
//sys	Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
//sys	Fdatasync(fd int) (err error)
//sys	Fgetxattr(fd int, attr string, dest []byte) (sz int, err error)
//sys	FinitModule(fd int, params string, flags int) (err error)
//sys	Flistxattr(fd int, dest []byte) (sz int, err error)
//sys	Flock(fd int, how int) (err error)
//sys	Fremovexattr(fd int, attr string) (err error)
//sys	Fsetxattr(fd int, attr string, dest []byte, flags int) (err error)
//sys	Fsync(fd int) (err error)
//sys	Fsmount(fd int, flags int, mountAttrs int) (fsfd int, err error)
//sys	Fsopen(fsName string, flags int) (fd int, err error)
//sys	Fspick(dirfd int, pathName string, flags int) (fd int, err error)
//sys	Getdents(fd int, buf []byte) (n int, err error) = SYS_GETDENTS64
//sysnb	Getpgid(pid int) (pgid int, err error)

func Getpgrp() (pid int) {
	pid, _ = Getpgid(0)
	return
}

//sysnb	Getpid() (pid int)
//sysnb	Getppid() (ppid int)
//sys	Getpriority(which int, who int) (prio int, err error)
//sys	Getrandom(buf []byte, flags int) (n int, err error)
//sysnb	Getrusage(who int, rusage *Rusage) (err error)
//sysnb	Getsid(pid int) (sid int, err error)
//sysnb	Gettid() (tid int)
//sys	Getxattr(path string, attr string, dest []byte) (sz int, err error)
//sys	InitModule(moduleImage []byte, params string) (err error)
//sys	InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error)
//sysnb	InotifyInit1(flags int) (fd int, err error)
//sysnb	InotifyRmWatch(fd int, watchdesc uint32) (success int, err error)
//sysnb	Kill(pid int, sig syscall.Signal) (err error)
//sys	Klogctl(typ int, buf []byte) (n int, err error) = SYS_SYSLOG
//sys	Lgetxattr(path string, attr string, dest []byte) (sz int, err error)
//sys	Listxattr(path string, dest []byte) (sz int, err error)
//sys	Llistxattr(path string, dest []byte) (sz int, err error)
//sys	Lremovexattr(path string, attr string) (err error)
//sys	Lsetxattr(path string, attr string, data []byte, flags int) (err error)
//sys	MemfdCreate(name string, flags int) (fd int, err error)
//sys	Mkdirat(dirfd int, path string, mode uint32) (err error)
//sys	Mknodat(dirfd int, path string, mode uint32, dev int) (err error)
//sys	MoveMount(fromDirfd int, fromPathName string, toDirfd int, toPathName string, flags int) (err error)
//sys	Nanosleep(time *Timespec, leftover *Timespec) (err error)
//sys	OpenTree(dfd int, fileName string, flags uint) (r int, err error)
//sys	PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error)
//sys	PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT
//sys	Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error)
//sys	Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) = SYS_PSELECT6
//sys	read(fd int, p []byte) (n int, err error)
//sys	Removexattr(path string, attr string) (err error)
//sys	Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error)
//sys	RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error)
//sys	Setdomainname(p []byte) (err error)
//sys	Sethostname(p []byte) (err error)
//sysnb	Setpgid(pid int, pgid int) (err error)
//sysnb	Setsid() (pid int, err error)
//sysnb	Settimeofday(tv *Timeval) (err error)
//sys	Setns(fd int, nstype int) (err error)

//go:linkname syscall_prlimit syscall.prlimit
func syscall_prlimit(pid, resource int, newlimit, old *syscall.Rlimit) error

func Prlimit(pid, resource int, newlimit, old *Rlimit) error {
	// Just call the syscall version, because as of Go 1.21
	// it will affect starting a new process.
	return syscall_prlimit(pid, resource, (*syscall.Rlimit)(newlimit), (*syscall.Rlimit)(old))
}

// PrctlRetInt performs a prctl operation specified by option and further
// optional arguments arg2 through arg5 depending on option. It returns a
// non-negative integer that is returned by the prctl syscall.
func PrctlRetInt(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (int, error) {
	ret, _, err := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
	if err != 0 {
		return 0, err
	}
	return int(ret), nil
}

func Setuid(uid int) (err error) {
	return syscall.Setuid(uid)
}

func Setgid(gid int) (err error) {
	return syscall.Setgid(gid)
}

func Setreuid(ruid, euid int) (err error) {
	return syscall.Setreuid(ruid, euid)
}

func Setregid(rgid, egid int) (err error) {
	return syscall.Setregid(rgid, egid)
}

func Setresuid(ruid, euid, suid int) (err error) {
	return syscall.Setresuid(ruid, euid, suid)
}

func Setresgid(rgid, egid, sgid int) (err error) {
	return syscall.Setresgid(rgid, egid, sgid)
}

// SetfsgidRetGid sets fsgid for current thread and returns previous fsgid set.
// setfsgid(2) will return a non-nil error only if its caller lacks CAP_SETUID capability.
// If the call fails due to other reasons, current fsgid will be returned.
func SetfsgidRetGid(gid int) (int, error) {
	return setfsgid(gid)
}

// SetfsuidRetUid sets fsuid for current thread and returns previous fsuid set.
// setfsgid(2) will return a non-nil error only if its caller lacks CAP_SETUID capability
// If the call fails due to other reasons, current fsuid will be returned.
func SetfsuidRetUid(uid int) (int, error) {
	return setfsuid(uid)
}

func Setfsgid(gid int) error {
	_, err := setfsgid(gid)
	return err
}

func Setfsuid(uid int) error {
	_, err := setfsuid(uid)
	return err
}

func Signalfd(fd int, sigmask *Sigset_t, flags int) (newfd int, err error) {
	return signalfd(fd, sigmask, _C__NSIG/8, flags)
}

//sys	Setpriority(which int, who int, prio int) (err error)
//sys	Setxattr(path string, attr string, data []byte, flags int) (err error)
//sys	signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) = SYS_SIGNALFD4
//sys	Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error)
//sys	Sync()
//sys	Syncfs(fd int) (err error)
//sysnb	Sysinfo(info *Sysinfo_t) (err error)
//sys	Tee(rfd int, wfd int, len int, flags int) (n int64, err error)
//sysnb	TimerfdCreate(clockid int, flags int) (fd int, err error)
//sysnb	TimerfdGettime(fd int, currValue *ItimerSpec) (err error)
//sysnb	TimerfdSettime(fd int, flags int, newValue *ItimerSpec, oldValue *ItimerSpec) (err error)
//sysnb	Tgkill(tgid int, tid int, sig syscall.Signal) (err error)
//sysnb	Times(tms *Tms) (ticks uintptr, err error)
//sysnb	Umask(mask int) (oldmask int)
//sysnb	Uname(buf *Utsname) (err error)
//sys	Unmount(target string, flags int) (err error) = SYS_UMOUNT2
//sys	Unshare(flags int) (err error)
//sys	write(fd int, p []byte) (n int, err error)
//sys	exitThread(code int) (err error) = SYS_EXIT
//sys	readlen(fd int, p *byte, np int) (n int, err error) = SYS_READ
//sys	writelen(fd int, p *byte, np int) (n int, err error) = SYS_WRITE
//sys	readv(fd int, iovs []Iovec) (n int, err error) = SYS_READV
//sys	writev(fd int, iovs []Iovec) (n int, err error) = SYS_WRITEV
//sys	preadv(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) = SYS_PREADV
//sys	pwritev(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) = SYS_PWRITEV
//sys	preadv2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) = SYS_PREADV2
//sys	pwritev2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) = SYS_PWRITEV2

// minIovec is the size of the small initial allocation used by
// Readv, Writev, etc.
//
// This small allocation gets stack allocated, which lets the
// common use case of len(iovs) <= minIovs avoid more expensive
// heap allocations.
const minIovec = 8

// appendBytes converts bs to Iovecs and appends them to vecs.
func appendBytes(vecs []Iovec, bs [][]byte) []Iovec {
	for _, b := range bs {
		var v Iovec
		v.SetLen(len(b))
		if len(b) > 0 {
			v.Base = &b[0]
		} else {
			v.Base = (*byte)(unsafe.Pointer(&_zero))
		}
		vecs = append(vecs, v)
	}
	return vecs
}

// offs2lohi splits offs into its low and high order bits.
func offs2lohi(offs int64) (lo, hi uintptr) {
	const longBits = SizeofLong * 8
	return uintptr(offs), uintptr(uint64(offs) >> (longBits - 1) >> 1) // two shifts to avoid false positive in vet
}

func Readv(fd int, iovs [][]byte) (n int, err error) {
	iovecs := make([]Iovec, 0, minIovec)
	iovecs = appendBytes(iovecs, iovs)
	n, err = readv(fd, iovecs)
	readvRacedetect(iovecs, n, err)
	return n, err
}

func Preadv(fd int, iovs [][]byte, offset int64) (n int, err error) {
	iovecs := make([]Iovec, 0, minIovec)
	iovecs = appendBytes(iovecs, iovs)
	lo, hi := offs2lohi(offset)
	n, err = preadv(fd, iovecs, lo, hi)
	readvRacedetect(iovecs, n, err)
	return n, err
}

func Preadv2(fd int, iovs [][]byte, offset int64, flags int) (n int, err error) {
	iovecs := make([]Iovec, 0, minIovec)
	iovecs = appendBytes(iovecs, iovs)
	lo, hi := offs2lohi(offset)
	n, err = preadv2(fd, iovecs, lo, hi, flags)
	readvRacedetect(iovecs, n, err)
	return n, err
}

func readvRacedetect(iovecs []Iovec, n int, err error) {
	if !raceenabled {
		return
	}
	for i := 0; n > 0 && i < len(iovecs); i++ {
		m := int(iovecs[i].Len)
		if m > n {
			m = n
		}
		n -= m
		if m > 0 {
			raceWriteRange(unsafe.Pointer(iovecs[i].Base), m)
		}
	}
	if err == nil {
		raceAcquire(unsafe.Pointer(&ioSync))
	}
}

func Writev(fd int, iovs [][]byte) (n int, err error) {
	iovecs := make([]Iovec, 0, minIovec)
	iovecs = appendBytes(iovecs, iovs)
	if raceenabled {
		raceReleaseMerge(unsafe.Pointer(&ioSync))
	}
	n, err = writev(fd, iovecs)
	writevRacedetect(iovecs, n)
	return n, err
}

func Pwritev(fd int, iovs [][]byte, offset int64) (n int, err error) {
	iovecs := make([]Iovec, 0, minIovec)
	iovecs = appendBytes(iovecs, iovs)
	if raceenabled {
		raceReleaseMerge(unsafe.Pointer(&ioSync))
	}
	lo, hi := offs2lohi(offset)
	n, err = pwritev(fd, iovecs, lo, hi)
	writevRacedetect(iovecs, n)
	return n, err
}

func Pwritev2(fd int, iovs [][]byte, offset int64, flags int) (n int, err error) {
	iovecs := make([]Iovec, 0, minIovec)
	iovecs = appendBytes(iovecs, iovs)
	if raceenabled {
		raceReleaseMerge(unsafe.Pointer(&ioSync))
	}
	lo, hi := offs2lohi(offset)
	n, err = pwritev2(fd, iovecs, lo, hi, flags)
	writevRacedetect(iovecs, n)
	return n, err
}

func writevRacedetect(iovecs []Iovec, n int) {
	if !raceenabled {
		return
	}
	for i := 0; n > 0 && i < len(iovecs); i++ {
		m := int(iovecs[i].Len)
		if m > n {
			m = n
		}
		n -= m
		if m > 0 {
			raceReadRange(unsafe.Pointer(iovecs[i].Base), m)
		}
	}
}

// mmap varies by architecture; see syscall_linux_*.go.
//sys	munmap(addr uintptr, length uintptr) (err error)

var mapper = &mmapper{
	active: make(map[*byte][]byte),
	mmap:   mmap,
	munmap: munmap,
}

func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {
	return mapper.Mmap(fd, offset, length, prot, flags)
}

func Munmap(b []byte) (err error) {
	return mapper.Munmap(b)
}

//sys	Madvise(b []byte, advice int) (err error)
//sys	Mprotect(b []byte, prot int) (err error)
//sys	Mlock(b []byte) (err error)
//sys	Mlockall(flags int) (err error)
//sys	Msync(b []byte, flags int) (err error)
//sys	Munlock(b []byte) (err error)
//sys	Munlockall() (err error)

// Vmsplice splices user pages from a slice of Iovecs into a pipe specified by fd,
// using the specified flags.
func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) {
	var p unsafe.Pointer
	if len(iovs) > 0 {
		p = unsafe.Pointer(&iovs[0])
	}

	n, _, errno := Syscall6(SYS_VMSPLICE, uintptr(fd), uintptr(p), uintptr(len(iovs)), uintptr(flags), 0, 0)
	if errno != 0 {
		return 0, syscall.Errno(errno)
	}

	return int(n), nil
}

func isGroupMember(gid int) bool {
	groups, err := Getgroups()
	if err != nil {
		return false
	}

	for _, g := range groups {
		if g == gid {
			return true
		}
	}
	return false
}

func isCapDacOverrideSet() bool {
	hdr := CapUserHeader{Version: LINUX_CAPABILITY_VERSION_3}
	data := [2]CapUserData{}
	err := Capget(&hdr, &data[0])

	return err == nil && data[0].Effective&(1<<CAP_DAC_OVERRIDE) != 0
}

//sys	faccessat(dirfd int, path string, mode uint32) (err error)
//sys	Faccessat2(dirfd int, path string, mode uint32, flags int) (err error)

func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
	if flags == 0 {
		return faccessat(dirfd, path, mode)
	}

	if err := Faccessat2(dirfd, path, mode, flags); err != ENOSYS && err != EPERM {
		return err
	}

	// The Linux kernel faccessat system call does not take any flags.
	// The glibc faccessat implements the flags itself; see
	// https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/faccessat.c;hb=HEAD
	// Because people naturally expect syscall.Faccessat to act
	// like C faccessat, we do the same.

	if flags & ^(AT_SYMLINK_NOFOLLOW|AT_EACCESS) != 0 {
		return EINVAL
	}

	var st Stat_t
	if err := Fstatat(dirfd, path, &st, flags&AT_SYMLINK_NOFOLLOW); err != nil {
		return err
	}

	mode &= 7
	if mode == 0 {
		return nil
	}

	var uid int
	if flags&AT_EACCESS != 0 {
		uid = Geteuid()
		if uid != 0 && isCapDacOverrideSet() {
			// If CAP_DAC_OVERRIDE is set, file access check is
			// done by the kernel in the same way as for root
			// (see generic_permission() in the Linux sources).
			uid = 0
		}
	} else {
		uid = Getuid()
	}

	if uid == 0 {
		if mode&1 == 0 {
			// Root can read and write any file.
			return nil
		}
		if st.Mode&0111 != 0 {
			// Root can execute any file that anybody can execute.
			return nil
		}
		return EACCES
	}

	var fmode uint32
	if uint32(uid) == st.Uid {
		fmode = (st.Mode >> 6) & 7
	} else {
		var gid int
		if flags&AT_EACCESS != 0 {
			gid = Getegid()
		} else {
			gid = Getgid()
		}

		if uint32(gid) == st.Gid || isGroupMember(int(st.Gid)) {
			fmode = (st.Mode >> 3) & 7
		} else {
			fmode = st.Mode & 7
		}
	}

	if fmode&mode == mode {
		return nil
	}

	return EACCES
}

//sys	nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) = SYS_NAME_TO_HANDLE_AT
//sys	openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) = SYS_OPEN_BY_HANDLE_AT

// fileHandle is the argument to nameToHandleAt and openByHandleAt. We
// originally tried to generate it via unix/linux/types.go with "type
// fileHandle C.struct_file_handle" but that generated empty structs
// for mips64 and mips64le. Instead, hard code it for now (it's the
// same everywhere else) until the mips64 generator issue is fixed.
type fileHandle struct {
	Bytes uint32
	Type  int32
}

// FileHandle represents the C struct file_handle used by
// name_to_handle_at (see NameToHandleAt) and open_by_handle_at (see
// OpenByHandleAt).
type FileHandle struct {
	*fileHandle
}

// NewFileHandle constructs a FileHandle.
func NewFileHandle(handleType int32, handle []byte) FileHandle {
	const hdrSize = unsafe.Sizeof(fileHandle{})
	buf := make([]byte, hdrSize+uintptr(len(handle)))
	copy(buf[hdrSize:], handle)
	fh := (*fileHandle)(unsafe.Pointer(&buf[0]))
	fh.Type = handleType
	fh.Bytes = uint32(len(handle))
	return FileHandle{fh}
}

func (fh *FileHandle) Size() int   { return int(fh.fileHandle.Bytes) }
func (fh *FileHandle) Type() int32 { return fh.fileHandle.Type }
func (fh *FileHandle) Bytes() []byte {
	n := fh.Size()
	if n == 0 {
		return nil
	}
	return unsafe.Slice((*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(&fh.fileHandle.Type))+4)), n)
}

// NameToHandleAt wraps the name_to_handle_at system call; it obtains
// a handle for a path name.
func NameToHandleAt(dirfd int, path string, flags int) (handle FileHandle, mountID int, err error) {
	var mid _C_int
	// Try first with a small buffer, assuming the handle will
	// only be 32 bytes.
	size := uint32(32 + unsafe.Sizeof(fileHandle{}))
	didResize := false
	for {
		buf := make([]byte, size)
		fh := (*fileHandle)(unsafe.Pointer(&buf[0]))
		fh.Bytes = size - uint32(unsafe.Sizeof(fileHandle{}))
		err = nameToHandleAt(dirfd, path, fh, &mid, flags)
		if err == EOVERFLOW {
			if didResize {
				// We shouldn't need to resize more than once
				return
			}
			didResize = true
			size = fh.Bytes + uint32(unsafe.Sizeof(fileHandle{}))
			continue
		}
		if err != nil {
			return
		}
		return FileHandle{fh}, int(mid), nil
	}
}

// OpenByHandleAt wraps the open_by_handle_at system call; it opens a
// file via a handle as previously returned by NameToHandleAt.
func OpenByHandleAt(mountFD int, handle FileHandle, flags int) (fd int, err error) {
	return openByHandleAt(mountFD, handle.fileHandle, flags)
}

// Klogset wraps the sys_syslog system call; it sets console_loglevel to
// the value specified by arg and passes a dummy pointer to bufp.
func Klogset(typ int, arg int) (err error) {
	var p unsafe.Pointer
	_, _, errno := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(p), uintptr(arg))
	if errno != 0 {
		return errnoErr(errno)
	}
	return nil
}

// RemoteIovec is Iovec with the pointer replaced with an integer.
// It is used for ProcessVMReadv and ProcessVMWritev, where the pointer
// refers to a location in a different process' address space, which
// would confuse the Go garbage collector.
type RemoteIovec struct {
	Base uintptr
	Len  int
}

//sys	ProcessVMReadv(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags uint) (n int, err error) = SYS_PROCESS_VM_READV
//sys	ProcessVMWritev(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags uint) (n int, err error) = SYS_PROCESS_VM_WRITEV

//sys	PidfdOpen(pid int, flags int) (fd int, err error) = SYS_PIDFD_OPEN
//sys	PidfdGetfd(pidfd int, targetfd int, flags int) (fd int, err error) = SYS_PIDFD_GETFD
//sys	PidfdSendSignal(pidfd int, sig Signal, info *Siginfo, flags int) (err error) = SYS_PIDFD_SEND_SIGNAL

//sys	shmat(id int, addr uintptr, flag int) (ret uintptr, err error)
//sys	shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error)
//sys	shmdt(addr uintptr) (err error)
//sys	shmget(key int, size int, flag int) (id int, err error)

//sys	getitimer(which int, currValue *Itimerval) (err error)
//sys	setitimer(which int, newValue *Itimerval, oldValue *Itimerval) (err error)

// MakeItimerval creates an Itimerval from interval and value durations.
func MakeItimerval(interval, value time.Duration) Itimerval {
	return Itimerval{
		Interval: NsecToTimeval(interval.Nanoseconds()),
		Value:    NsecToTimeval(value.Nanoseconds()),
	}
}

// A value which may be passed to the which parameter for Getitimer and
// Setitimer.
type ItimerWhich int

// Possible which values for Getitimer and Setitimer.
const (
	ItimerReal    ItimerWhich = ITIMER_REAL
	ItimerVirtual ItimerWhich = ITIMER_VIRTUAL
	ItimerProf    ItimerWhich = ITIMER_PROF
)

// Getitimer wraps getitimer(2) to return the current value of the timer
// specified by which.
func Getitimer(which ItimerWhich) (Itimerval, error) {
	var it Itimerval
	if err := getitimer(int(which), &it); err != nil {
		return Itimerval{}, err
	}

	return it, nil
}

// Setitimer wraps setitimer(2) to arm or disarm the timer specified by which.
// It returns the previous value of the timer.
//
// If the Itimerval argument is the zero value, the timer will be disarmed.
func Setitimer(which ItimerWhich, it Itimerval) (Itimerval, error) {
	var prev Itimerval
	if err := setitimer(int(which), &it, &prev); err != nil {
		return Itimerval{}, err
	}

	return prev, nil
}

//sysnb	rtSigprocmask(how int, set *Sigset_t, oldset *Sigset_t, sigsetsize uintptr) (err error) = SYS_RT_SIGPROCMASK

func PthreadSigmask(how int, set, oldset *Sigset_t) error {
	if oldset != nil {
		// Explicitly clear in case Sigset_t is larger than _C__NSIG.
		*oldset = Sigset_t{}
	}
	return rtSigprocmask(how, set, oldset, _C__NSIG/8)
}

/*
 * Unimplemented
 */
// AfsSyscall
// ArchPrctl
// Brk
// ClockNanosleep
// ClockSettime
// Clone
// EpollCtlOld
// EpollPwait
// EpollWaitOld
// Execve
// Fork
// Futex
// GetKernelSyms
// GetMempolicy
// GetRobustList
// GetThreadArea
// Getpmsg
// IoCancel
// IoDestroy
// IoGetevents
// IoSetup
// IoSubmit
// IoprioGet
// IoprioSet
// KexecLoad
// LookupDcookie
// Mbind
// MigratePages
// Mincore
// ModifyLdt
// Mount
// MovePages
// MqGetsetattr
// MqNotify
// MqOpen
// MqTimedreceive
// MqTimedsend
// MqUnlink
// Mremap
// Msgctl
// Msgget
// Msgrcv
// Msgsnd
// Nfsservctl
// Personality
// Pselect6
// Ptrace
// Putpmsg
// Quotactl
// Readahead
// Readv
// RemapFilePages
// RestartSyscall
// RtSigaction
// RtSigpending
// RtSigqueueinfo
// RtSigreturn
// RtSigsuspend
// RtSigtimedwait
// SchedGetPriorityMax
// SchedGetPriorityMin
// SchedGetparam
// SchedGetscheduler
// SchedRrGetInterval
// SchedSetparam
// SchedYield
// Security
// Semctl
// Semget
// Semop
// Semtimedop
// SetMempolicy
// SetRobustList
// SetThreadArea
// SetTidAddress
// Sigaltstack
// Swapoff
// Swapon
// Sysfs
// TimerCreate
// TimerDelete
// TimerGetoverrun
// TimerGettime
// TimerSettime
// Tkill (obsolete)
// Tuxcall
// Umount2
// Uselib
// Utimensat
// Vfork
// Vhangup
// Vserver
// _Sysctl
07070100000DF3000081A4000000000000000000000001645E367C0000239E000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_linux_386.go // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build 386 && linux
// +build 386,linux

package unix

import (
	"unsafe"
)

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: int32(sec), Usec: int32(usec)}
}

// 64-bit file system and 32-bit uid calls
// (386 default is 32-bit file system and 16-bit uid).
//sys	EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys	Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64_64
//sys	Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32
//sys	Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
//sys	Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
//sys	Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64
//sysnb	Getegid() (egid int) = SYS_GETEGID32
//sysnb	Geteuid() (euid int) = SYS_GETEUID32
//sysnb	Getgid() (gid int) = SYS_GETGID32
//sysnb	Getuid() (uid int) = SYS_GETUID32
//sys	Ioperm(from int, num int, on int) (err error)
//sys	Iopl(level int) (err error)
//sys	Lchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32
//sys	Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
//sys	pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
//sys	pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
//sys	Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
//sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
//sys	setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32
//sys	setfsuid(uid int) (prev int, err error) = SYS_SETFSUID32
//sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
//sys	Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
//sys	SyncFileRange(fd int, off int64, n int64, flags int) (err error)
//sys	Truncate(path string, length int64) (err error) = SYS_TRUNCATE64
//sys	Ustat(dev int, ubuf *Ustat_t) (err error)
//sysnb	getgroups(n int, list *_Gid_t) (nn int, err error) = SYS_GETGROUPS32
//sysnb	setgroups(n int, list *_Gid_t) (err error) = SYS_SETGROUPS32
//sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT

//sys	mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error)
//sys	Pause() (err error)

func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
	page := uintptr(offset / 4096)
	if offset != int64(page)*4096 {
		return 0, EINVAL
	}
	return mmap2(addr, length, prot, flags, fd, page)
}

type rlimit32 struct {
	Cur uint32
	Max uint32
}

//sysnb	getrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT

const rlimInf32 = ^uint32(0)
const rlimInf64 = ^uint64(0)

func Getrlimit(resource int, rlim *Rlimit) (err error) {
	err = Prlimit(0, resource, nil, rlim)
	if err != ENOSYS {
		return err
	}

	rl := rlimit32{}
	err = getrlimit(resource, &rl)
	if err != nil {
		return
	}

	if rl.Cur == rlimInf32 {
		rlim.Cur = rlimInf64
	} else {
		rlim.Cur = uint64(rl.Cur)
	}

	if rl.Max == rlimInf32 {
		rlim.Max = rlimInf64
	} else {
		rlim.Max = uint64(rl.Max)
	}
	return
}

func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
	newoffset, errno := seek(fd, offset, whence)
	if errno != 0 {
		return 0, errno
	}
	return newoffset, nil
}

//sys	futimesat(dirfd int, path string, times *[2]Timeval) (err error)
//sysnb	Gettimeofday(tv *Timeval) (err error)
//sysnb	Time(t *Time_t) (tt Time_t, err error)
//sys	Utime(path string, buf *Utimbuf) (err error)
//sys	utimes(path string, times *[2]Timeval) (err error)

// On x86 Linux, all the socket calls go through an extra indirection,
// I think because the 5-register system call interface can't handle
// the 6-argument calls like sendto and recvfrom. Instead the
// arguments to the underlying system call are the number below
// and a pointer to an array of uintptr. We hide the pointer in the
// socketcall assembly to avoid allocation on every system call.

const (
	// see linux/net.h
	_SOCKET      = 1
	_BIND        = 2
	_CONNECT     = 3
	_LISTEN      = 4
	_ACCEPT      = 5
	_GETSOCKNAME = 6
	_GETPEERNAME = 7
	_SOCKETPAIR  = 8
	_SEND        = 9
	_RECV        = 10
	_SENDTO      = 11
	_RECVFROM    = 12
	_SHUTDOWN    = 13
	_SETSOCKOPT  = 14
	_GETSOCKOPT  = 15
	_SENDMSG     = 16
	_RECVMSG     = 17
	_ACCEPT4     = 18
	_RECVMMSG    = 19
	_SENDMMSG    = 20
)

func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
	fd, e := socketcall(_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
	if e != 0 {
		err = e
	}
	return
}

func getsockname(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, e := rawsocketcall(_GETSOCKNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
	if e != 0 {
		err = e
	}
	return
}

func getpeername(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, e := rawsocketcall(_GETPEERNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
	if e != 0 {
		err = e
	}
	return
}

func socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) {
	_, e := rawsocketcall(_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e != 0 {
		err = e
	}
	return
}

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, e := socketcall(_BIND, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)
	if e != 0 {
		err = e
	}
	return
}

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, e := socketcall(_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)
	if e != 0 {
		err = e
	}
	return
}

func socket(domain int, typ int, proto int) (fd int, err error) {
	fd, e := rawsocketcall(_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0)
	if e != 0 {
		err = e
	}
	return
}

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, e := socketcall(_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e != 0 {
		err = e
	}
	return
}

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, e := socketcall(_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), vallen, 0)
	if e != 0 {
		err = e
	}
	return
}

func recvfrom(s int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var base uintptr
	if len(p) > 0 {
		base = uintptr(unsafe.Pointer(&p[0]))
	}
	n, e := socketcall(_RECVFROM, uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	if e != 0 {
		err = e
	}
	return
}

func sendto(s int, p []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var base uintptr
	if len(p) > 0 {
		base = uintptr(unsafe.Pointer(&p[0]))
	}
	_, e := socketcall(_SENDTO, uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e != 0 {
		err = e
	}
	return
}

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	n, e := socketcall(_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)
	if e != 0 {
		err = e
	}
	return
}

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	n, e := socketcall(_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)
	if e != 0 {
		err = e
	}
	return
}

func Listen(s int, n int) (err error) {
	_, e := socketcall(_LISTEN, uintptr(s), uintptr(n), 0, 0, 0, 0)
	if e != 0 {
		err = e
	}
	return
}

func Shutdown(s, how int) (err error) {
	_, e := socketcall(_SHUTDOWN, uintptr(s), uintptr(how), 0, 0, 0, 0)
	if e != 0 {
		err = e
	}
	return
}

func Fstatfs(fd int, buf *Statfs_t) (err error) {
	_, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))
	if e != 0 {
		err = e
	}
	return
}

func Statfs(path string, buf *Statfs_t) (err error) {
	pathp, err := BytePtrFromString(path)
	if err != nil {
		return err
	}
	_, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))
	if e != 0 {
		err = e
	}
	return
}

func (r *PtraceRegs) PC() uint64 { return uint64(uint32(r.Eip)) }

func (r *PtraceRegs) SetPC(pc uint64) { r.Eip = int32(pc) }

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint32(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint32(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = uint32(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint32(length)
}

func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
	rsa.Service_name_len = uint32(length)
}
  07070100000DF4000081A4000000000000000000000001645E367C00000216000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_linux_alarm.go   // Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build linux && (386 || amd64 || mips || mipsle || mips64 || mipsle || ppc64 || ppc64le || ppc || s390x || sparc64)
// +build linux
// +build 386 amd64 mips mipsle mips64 mipsle ppc64 ppc64le ppc s390x sparc64

package unix

// SYS_ALARM is not defined on arm or riscv, but is available for other GOARCH
// values.

//sys	Alarm(seconds uint) (remaining uint, err error)
  07070100000DF5000081A4000000000000000000000001645E367C00001538000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go   // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build amd64 && linux
// +build amd64,linux

package unix

//sys	EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys	Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
//sys	Fchown(fd int, uid int, gid int) (err error)
//sys	Fstat(fd int, stat *Stat_t) (err error)
//sys	Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT
//sys	Fstatfs(fd int, buf *Statfs_t) (err error)
//sys	Ftruncate(fd int, length int64) (err error)
//sysnb	Getegid() (egid int)
//sysnb	Geteuid() (euid int)
//sysnb	Getgid() (gid int)
//sysnb	Getrlimit(resource int, rlim *Rlimit) (err error)
//sysnb	Getuid() (uid int)
//sys	Ioperm(from int, num int, on int) (err error)
//sys	Iopl(level int) (err error)
//sys	Lchown(path string, uid int, gid int) (err error)
//sys	Listen(s int, n int) (err error)

func Lstat(path string, stat *Stat_t) (err error) {
	return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW)
}

//sys	MemfdSecret(flags int) (fd int, err error)
//sys	Pause() (err error)
//sys	pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
//sys	pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
//sys	Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
//sys	Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	var ts *Timespec
	if timeout != nil {
		ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}
	}
	return Pselect(nfd, r, w, e, ts, nil)
}

//sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
//sys	setfsgid(gid int) (prev int, err error)
//sys	setfsuid(uid int) (prev int, err error)
//sys	Shutdown(fd int, how int) (err error)
//sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)

func Stat(path string, stat *Stat_t) (err error) {
	// Use fstatat, because Android's seccomp policy blocks stat.
	return Fstatat(AT_FDCWD, path, stat, 0)
}

//sys	Statfs(path string, buf *Statfs_t) (err error)
//sys	SyncFileRange(fd int, off int64, n int64, flags int) (err error)
//sys	Truncate(path string, length int64) (err error)
//sys	Ustat(dev int, ubuf *Ustat_t) (err error)
//sys	accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
//sys	bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
//sys	connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
//sysnb	getgroups(n int, list *_Gid_t) (nn int, err error)
//sysnb	setgroups(n int, list *_Gid_t) (err error)
//sys	getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
//sys	setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
//sysnb	socket(domain int, typ int, proto int) (fd int, err error)
//sysnb	socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
//sysnb	getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
//sysnb	getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
//sys	recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
//sys	sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
//sys	recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
//sys	sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
//sys	mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)

//sys	futimesat(dirfd int, path string, times *[2]Timeval) (err error)

func Gettimeofday(tv *Timeval) (err error) {
	errno := gettimeofday(tv)
	if errno != 0 {
		return errno
	}
	return nil
}

func Time(t *Time_t) (tt Time_t, err error) {
	var tv Timeval
	errno := gettimeofday(&tv)
	if errno != 0 {
		return 0, errno
	}
	if t != nil {
		*t = Time_t(tv.Sec)
	}
	return Time_t(tv.Sec), nil
}

//sys	Utime(path string, buf *Utimbuf) (err error)
//sys	utimes(path string, times *[2]Timeval) (err error)

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: nsec}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: usec}
}

func (r *PtraceRegs) PC() uint64 { return r.Rip }

func (r *PtraceRegs) SetPC(pc uint64) { r.Rip = pc }

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint64(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint64(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = uint64(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint64(length)
}

func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
	rsa.Service_name_len = uint64(length)
}

//sys	kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)

func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {
	cmdlineLen := len(cmdline)
	if cmdlineLen > 0 {
		// Account for the additional NULL byte added by
		// BytePtrFromString in kexecFileLoad. The kexec_file_load
		// syscall expects a NULL-terminated string.
		cmdlineLen++
	}
	return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)
}
07070100000DF6000081A4000000000000000000000001645E367C0000013B000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go    // Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build amd64 && linux && gc
// +build amd64,linux,gc

package unix

import "syscall"

//go:noescape
func gettimeofday(tv *Timeval) (err syscall.Errno)
 07070100000DF7000081A4000000000000000000000001645E367C00001BD5000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_linux_arm.go // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build arm && linux
// +build arm,linux

package unix

import (
	"unsafe"
)

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: int32(sec), Usec: int32(usec)}
}

func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
	newoffset, errno := seek(fd, offset, whence)
	if errno != 0 {
		return 0, errno
	}
	return newoffset, nil
}

//sys	accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
//sys	bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
//sys	connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
//sysnb	getgroups(n int, list *_Gid_t) (nn int, err error) = SYS_GETGROUPS32
//sysnb	setgroups(n int, list *_Gid_t) (err error) = SYS_SETGROUPS32
//sys	getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
//sys	setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
//sysnb	socket(domain int, typ int, proto int) (fd int, err error)
//sysnb	getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
//sysnb	getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
//sys	recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
//sys	sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
//sysnb	socketpair(domain int, typ int, flags int, fd *[2]int32) (err error)
//sys	recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
//sys	sendmsg(s int, msg *Msghdr, flags int) (n int, err error)

// 64-bit file system and 32-bit uid calls
// (16-bit uid calls are not always supported in newer kernels)
//sys	EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys	Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32
//sys	Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
//sys	Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
//sysnb	Getegid() (egid int) = SYS_GETEGID32
//sysnb	Geteuid() (euid int) = SYS_GETEUID32
//sysnb	Getgid() (gid int) = SYS_GETGID32
//sysnb	Getuid() (uid int) = SYS_GETUID32
//sys	Lchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32
//sys	Listen(s int, n int) (err error)
//sys	Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
//sys	Pause() (err error)
//sys	Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
//sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
//sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
//sys	setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32
//sys	setfsuid(uid int) (prev int, err error) = SYS_SETFSUID32
//sys	Shutdown(fd int, how int) (err error)
//sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
//sys	Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
//sys	Ustat(dev int, ubuf *Ustat_t) (err error)

//sys	futimesat(dirfd int, path string, times *[2]Timeval) (err error)
//sysnb	Gettimeofday(tv *Timeval) (err error)

func Time(t *Time_t) (Time_t, error) {
	var tv Timeval
	err := Gettimeofday(&tv)
	if err != nil {
		return 0, err
	}
	if t != nil {
		*t = Time_t(tv.Sec)
	}
	return Time_t(tv.Sec), nil
}

func Utime(path string, buf *Utimbuf) error {
	tv := []Timeval{
		{Sec: buf.Actime},
		{Sec: buf.Modtime},
	}
	return Utimes(path, tv)
}

//sys	utimes(path string, times *[2]Timeval) (err error)

//sys	pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
//sys	pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
//sys	Truncate(path string, length int64) (err error) = SYS_TRUNCATE64
//sys	Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64

func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
	_, _, e1 := Syscall6(SYS_ARM_FADVISE64_64, uintptr(fd), uintptr(advice), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

//sys	mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error)

func Fstatfs(fd int, buf *Statfs_t) (err error) {
	_, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))
	if e != 0 {
		err = e
	}
	return
}

func Statfs(path string, buf *Statfs_t) (err error) {
	pathp, err := BytePtrFromString(path)
	if err != nil {
		return err
	}
	_, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))
	if e != 0 {
		err = e
	}
	return
}

func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
	page := uintptr(offset / 4096)
	if offset != int64(page)*4096 {
		return 0, EINVAL
	}
	return mmap2(addr, length, prot, flags, fd, page)
}

type rlimit32 struct {
	Cur uint32
	Max uint32
}

//sysnb	getrlimit(resource int, rlim *rlimit32) (err error) = SYS_UGETRLIMIT

const rlimInf32 = ^uint32(0)
const rlimInf64 = ^uint64(0)

func Getrlimit(resource int, rlim *Rlimit) (err error) {
	err = Prlimit(0, resource, nil, rlim)
	if err != ENOSYS {
		return err
	}

	rl := rlimit32{}
	err = getrlimit(resource, &rl)
	if err != nil {
		return
	}

	if rl.Cur == rlimInf32 {
		rlim.Cur = rlimInf64
	} else {
		rlim.Cur = uint64(rl.Cur)
	}

	if rl.Max == rlimInf32 {
		rlim.Max = rlimInf64
	} else {
		rlim.Max = uint64(rl.Max)
	}
	return
}

func (r *PtraceRegs) PC() uint64 { return uint64(r.Uregs[15]) }

func (r *PtraceRegs) SetPC(pc uint64) { r.Uregs[15] = uint32(pc) }

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint32(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint32(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = uint32(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint32(length)
}

func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
	rsa.Service_name_len = uint32(length)
}

//sys	armSyncFileRange(fd int, flags int, off int64, n int64) (err error) = SYS_ARM_SYNC_FILE_RANGE

func SyncFileRange(fd int, off int64, n int64, flags int) error {
	// The sync_file_range and arm_sync_file_range syscalls differ only in the
	// order of their arguments.
	return armSyncFileRange(fd, flags, off, n)
}

//sys	kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)

func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {
	cmdlineLen := len(cmdline)
	if cmdlineLen > 0 {
		// Account for the additional NULL byte added by
		// BytePtrFromString in kexecFileLoad. The kexec_file_load
		// syscall expects a NULL-terminated string.
		cmdlineLen++
	}
	return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)
}
   07070100000DF8000081A4000000000000000000000001645E367C000017F8000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go   // Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build arm64 && linux
// +build arm64,linux

package unix

import "unsafe"

//sys	EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
//sys	Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
//sys	Fchown(fd int, uid int, gid int) (err error)
//sys	Fstat(fd int, stat *Stat_t) (err error)
//sys	Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
//sys	Fstatfs(fd int, buf *Statfs_t) (err error)
//sys	Ftruncate(fd int, length int64) (err error)
//sysnb	Getegid() (egid int)
//sysnb	Geteuid() (euid int)
//sysnb	Getgid() (gid int)
//sysnb	getrlimit(resource int, rlim *Rlimit) (err error)
//sysnb	Getuid() (uid int)
//sys	Listen(s int, n int) (err error)
//sys	MemfdSecret(flags int) (fd int, err error)
//sys	pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
//sys	pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
//sys	Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
//sys	Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	var ts *Timespec
	if timeout != nil {
		ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}
	}
	return Pselect(nfd, r, w, e, ts, nil)
}

//sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
//sys	setfsgid(gid int) (prev int, err error)
//sys	setfsuid(uid int) (prev int, err error)
//sys	Shutdown(fd int, how int) (err error)
//sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)

func Stat(path string, stat *Stat_t) (err error) {
	return Fstatat(AT_FDCWD, path, stat, 0)
}

func Lchown(path string, uid int, gid int) (err error) {
	return Fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW)
}

func Lstat(path string, stat *Stat_t) (err error) {
	return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW)
}

//sys	Statfs(path string, buf *Statfs_t) (err error)
//sys	SyncFileRange(fd int, off int64, n int64, flags int) (err error)
//sys	Truncate(path string, length int64) (err error)

func Ustat(dev int, ubuf *Ustat_t) (err error) {
	return ENOSYS
}

//sys	accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
//sys	bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
//sys	connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
//sysnb	getgroups(n int, list *_Gid_t) (nn int, err error)
//sysnb	setgroups(n int, list *_Gid_t) (err error)
//sys	getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
//sys	setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
//sysnb	socket(domain int, typ int, proto int) (fd int, err error)
//sysnb	socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
//sysnb	getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
//sysnb	getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
//sys	recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
//sys	sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
//sys	recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
//sys	sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
//sys	mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)

//sysnb	Gettimeofday(tv *Timeval) (err error)

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: nsec}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: usec}
}

func futimesat(dirfd int, path string, tv *[2]Timeval) (err error) {
	if tv == nil {
		return utimensat(dirfd, path, nil, 0)
	}

	ts := []Timespec{
		NsecToTimespec(TimevalToNsec(tv[0])),
		NsecToTimespec(TimevalToNsec(tv[1])),
	}
	return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
}

func Time(t *Time_t) (Time_t, error) {
	var tv Timeval
	err := Gettimeofday(&tv)
	if err != nil {
		return 0, err
	}
	if t != nil {
		*t = Time_t(tv.Sec)
	}
	return Time_t(tv.Sec), nil
}

func Utime(path string, buf *Utimbuf) error {
	tv := []Timeval{
		{Sec: buf.Actime},
		{Sec: buf.Modtime},
	}
	return Utimes(path, tv)
}

func utimes(path string, tv *[2]Timeval) (err error) {
	if tv == nil {
		return utimensat(AT_FDCWD, path, nil, 0)
	}

	ts := []Timespec{
		NsecToTimespec(TimevalToNsec(tv[0])),
		NsecToTimespec(TimevalToNsec(tv[1])),
	}
	return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
}

// Getrlimit prefers the prlimit64 system call. See issue 38604.
func Getrlimit(resource int, rlim *Rlimit) error {
	err := Prlimit(0, resource, nil, rlim)
	if err != ENOSYS {
		return err
	}
	return getrlimit(resource, rlim)
}

func (r *PtraceRegs) PC() uint64 { return r.Pc }

func (r *PtraceRegs) SetPC(pc uint64) { r.Pc = pc }

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint64(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint64(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = uint64(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint64(length)
}

func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
	rsa.Service_name_len = uint64(length)
}

func Pause() error {
	_, err := ppoll(nil, 0, nil, nil)
	return err
}

//sys	kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)

func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {
	cmdlineLen := len(cmdline)
	if cmdlineLen > 0 {
		// Account for the additional NULL byte added by
		// BytePtrFromString in kexecFileLoad. The kexec_file_load
		// syscall expects a NULL-terminated string.
		cmdlineLen++
	}
	return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)
}
07070100000DF9000081A4000000000000000000000001645E367C00000202000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_linux_gc.go  // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build linux && gc
// +build linux,gc

package unix

// SyscallNoError may be used instead of Syscall for syscalls that don't fail.
func SyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr)

// RawSyscallNoError may be used instead of RawSyscall for syscalls that don't
// fail.
func RawSyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr)
  07070100000DFA000081A4000000000000000000000001645E367C00000260000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go  // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build linux && gc && 386
// +build linux,gc,386

package unix

import "syscall"

// Underlying system call writes to newoffset via pointer.
// Implemented in assembly to avoid allocation.
func seek(fd int, offset int64, whence int) (newoffset int64, err syscall.Errno)

func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err syscall.Errno)
func rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err syscall.Errno)
07070100000DFB000081A4000000000000000000000001645E367C000001B2000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go  // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build arm && gc && linux
// +build arm,gc,linux

package unix

import "syscall"

// Underlying system call writes to newoffset via pointer.
// Implemented in assembly to avoid allocation.
func seek(fd int, offset int64, whence int) (newoffset int64, err syscall.Errno)
  07070100000DFC000081A4000000000000000000000001645E367C000003F4000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go   // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build linux && gccgo && 386
// +build linux,gccgo,386

package unix

import (
	"syscall"
	"unsafe"
)

func seek(fd int, offset int64, whence int) (int64, syscall.Errno) {
	var newoffset int64
	offsetLow := uint32(offset & 0xffffffff)
	offsetHigh := uint32((offset >> 32) & 0xffffffff)
	_, _, err := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offsetHigh), uintptr(offsetLow), uintptr(unsafe.Pointer(&newoffset)), uintptr(whence), 0)
	return newoffset, err
}

func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, syscall.Errno) {
	fd, _, err := Syscall(SYS_SOCKETCALL, uintptr(call), uintptr(unsafe.Pointer(&a0)), 0)
	return int(fd), err
}

func rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, syscall.Errno) {
	fd, _, err := RawSyscall(SYS_SOCKETCALL, uintptr(call), uintptr(unsafe.Pointer(&a0)), 0)
	return int(fd), err
}
07070100000DFD000081A4000000000000000000000001645E367C0000026E000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go   // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build linux && gccgo && arm
// +build linux,gccgo,arm

package unix

import (
	"syscall"
	"unsafe"
)

func seek(fd int, offset int64, whence int) (int64, syscall.Errno) {
	var newoffset int64
	offsetLow := uint32(offset & 0xffffffff)
	offsetHigh := uint32((offset >> 32) & 0xffffffff)
	_, _, err := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offsetHigh), uintptr(offsetLow), uintptr(unsafe.Pointer(&newoffset)), uintptr(whence), 0)
	return newoffset, err
}
  07070100000DFE000081A4000000000000000000000001645E367C00001ABC000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go // Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build loong64 && linux
// +build loong64,linux

package unix

import "unsafe"

//sys	EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
//sys	Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
//sys	Fchown(fd int, uid int, gid int) (err error)
//sys	Fstatfs(fd int, buf *Statfs_t) (err error)
//sys	Ftruncate(fd int, length int64) (err error)
//sysnb	Getegid() (egid int)
//sysnb	Geteuid() (euid int)
//sysnb	Getgid() (gid int)
//sysnb	Getuid() (uid int)
//sys	Listen(s int, n int) (err error)
//sys	pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
//sys	pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
//sys	Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	var ts *Timespec
	if timeout != nil {
		ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}
	}
	return Pselect(nfd, r, w, e, ts, nil)
}

//sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
//sys	setfsgid(gid int) (prev int, err error)
//sys	setfsuid(uid int) (prev int, err error)
//sys	Shutdown(fd int, how int) (err error)
//sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)

func timespecFromStatxTimestamp(x StatxTimestamp) Timespec {
	return Timespec{
		Sec:  x.Sec,
		Nsec: int64(x.Nsec),
	}
}

func Fstatat(fd int, path string, stat *Stat_t, flags int) error {
	var r Statx_t
	// Do it the glibc way, add AT_NO_AUTOMOUNT.
	if err := Statx(fd, path, AT_NO_AUTOMOUNT|flags, STATX_BASIC_STATS, &r); err != nil {
		return err
	}

	stat.Dev = Mkdev(r.Dev_major, r.Dev_minor)
	stat.Ino = r.Ino
	stat.Mode = uint32(r.Mode)
	stat.Nlink = r.Nlink
	stat.Uid = r.Uid
	stat.Gid = r.Gid
	stat.Rdev = Mkdev(r.Rdev_major, r.Rdev_minor)
	// hope we don't get to process files so large to overflow these size
	// fields...
	stat.Size = int64(r.Size)
	stat.Blksize = int32(r.Blksize)
	stat.Blocks = int64(r.Blocks)
	stat.Atim = timespecFromStatxTimestamp(r.Atime)
	stat.Mtim = timespecFromStatxTimestamp(r.Mtime)
	stat.Ctim = timespecFromStatxTimestamp(r.Ctime)

	return nil
}

func Fstat(fd int, stat *Stat_t) (err error) {
	return Fstatat(fd, "", stat, AT_EMPTY_PATH)
}

func Stat(path string, stat *Stat_t) (err error) {
	return Fstatat(AT_FDCWD, path, stat, 0)
}

func Lchown(path string, uid int, gid int) (err error) {
	return Fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW)
}

func Lstat(path string, stat *Stat_t) (err error) {
	return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW)
}

//sys	Statfs(path string, buf *Statfs_t) (err error)
//sys	SyncFileRange(fd int, off int64, n int64, flags int) (err error)
//sys	Truncate(path string, length int64) (err error)

func Ustat(dev int, ubuf *Ustat_t) (err error) {
	return ENOSYS
}

//sys	accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
//sys	bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
//sys	connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
//sysnb	getgroups(n int, list *_Gid_t) (nn int, err error)
//sysnb	setgroups(n int, list *_Gid_t) (err error)
//sys	getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
//sys	setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
//sysnb	socket(domain int, typ int, proto int) (fd int, err error)
//sysnb	socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
//sysnb	getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
//sysnb	getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
//sys	recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
//sys	sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
//sys	recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
//sys	sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
//sys	mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)

//sysnb	Gettimeofday(tv *Timeval) (err error)

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: nsec}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: usec}
}

func Getrlimit(resource int, rlim *Rlimit) (err error) {
	err = Prlimit(0, resource, nil, rlim)
	return
}

func futimesat(dirfd int, path string, tv *[2]Timeval) (err error) {
	if tv == nil {
		return utimensat(dirfd, path, nil, 0)
	}

	ts := []Timespec{
		NsecToTimespec(TimevalToNsec(tv[0])),
		NsecToTimespec(TimevalToNsec(tv[1])),
	}
	return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
}

func Time(t *Time_t) (Time_t, error) {
	var tv Timeval
	err := Gettimeofday(&tv)
	if err != nil {
		return 0, err
	}
	if t != nil {
		*t = Time_t(tv.Sec)
	}
	return Time_t(tv.Sec), nil
}

func Utime(path string, buf *Utimbuf) error {
	tv := []Timeval{
		{Sec: buf.Actime},
		{Sec: buf.Modtime},
	}
	return Utimes(path, tv)
}

func utimes(path string, tv *[2]Timeval) (err error) {
	if tv == nil {
		return utimensat(AT_FDCWD, path, nil, 0)
	}

	ts := []Timespec{
		NsecToTimespec(TimevalToNsec(tv[0])),
		NsecToTimespec(TimevalToNsec(tv[1])),
	}
	return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
}

func (r *PtraceRegs) PC() uint64 { return r.Era }

func (r *PtraceRegs) SetPC(era uint64) { r.Era = era }

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint64(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint64(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = uint64(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint64(length)
}

func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
	rsa.Service_name_len = uint64(length)
}

func Pause() error {
	_, err := ppoll(nil, 0, nil, nil)
	return err
}

func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
	return Renameat2(olddirfd, oldpath, newdirfd, newpath, 0)
}

//sys	kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)

func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {
	cmdlineLen := len(cmdline)
	if cmdlineLen > 0 {
		// Account for the additional NULL byte added by
		// BytePtrFromString in kexecFileLoad. The kexec_file_load
		// syscall expects a NULL-terminated string.
		cmdlineLen++
	}
	return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)
}
07070100000DFF000081A4000000000000000000000001645E367C00001777000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go // Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build linux && (mips64 || mips64le)
// +build linux
// +build mips64 mips64le

package unix

//sys	EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys	Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
//sys	Fchown(fd int, uid int, gid int) (err error)
//sys	Fstatfs(fd int, buf *Statfs_t) (err error)
//sys	Ftruncate(fd int, length int64) (err error)
//sysnb	Getegid() (egid int)
//sysnb	Geteuid() (euid int)
//sysnb	Getgid() (gid int)
//sysnb	Getrlimit(resource int, rlim *Rlimit) (err error)
//sysnb	Getuid() (uid int)
//sys	Lchown(path string, uid int, gid int) (err error)
//sys	Listen(s int, n int) (err error)
//sys	Pause() (err error)
//sys	pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
//sys	pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
//sys	Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
//sys	Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	var ts *Timespec
	if timeout != nil {
		ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}
	}
	return Pselect(nfd, r, w, e, ts, nil)
}

//sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
//sys	setfsgid(gid int) (prev int, err error)
//sys	setfsuid(uid int) (prev int, err error)
//sys	Shutdown(fd int, how int) (err error)
//sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
//sys	Statfs(path string, buf *Statfs_t) (err error)
//sys	SyncFileRange(fd int, off int64, n int64, flags int) (err error)
//sys	Truncate(path string, length int64) (err error)
//sys	Ustat(dev int, ubuf *Ustat_t) (err error)
//sys	accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
//sys	bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
//sys	connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
//sysnb	getgroups(n int, list *_Gid_t) (nn int, err error)
//sysnb	setgroups(n int, list *_Gid_t) (err error)
//sys	getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
//sys	setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
//sysnb	socket(domain int, typ int, proto int) (fd int, err error)
//sysnb	socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
//sysnb	getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
//sysnb	getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
//sys	recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
//sys	sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
//sys	recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
//sys	sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
//sys	mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)

//sys	futimesat(dirfd int, path string, times *[2]Timeval) (err error)
//sysnb	Gettimeofday(tv *Timeval) (err error)

func Time(t *Time_t) (tt Time_t, err error) {
	var tv Timeval
	err = Gettimeofday(&tv)
	if err != nil {
		return 0, err
	}
	if t != nil {
		*t = Time_t(tv.Sec)
	}
	return Time_t(tv.Sec), nil
}

//sys	Utime(path string, buf *Utimbuf) (err error)
//sys	utimes(path string, times *[2]Timeval) (err error)

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: nsec}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: usec}
}

func Ioperm(from int, num int, on int) (err error) {
	return ENOSYS
}

func Iopl(level int) (err error) {
	return ENOSYS
}

type stat_t struct {
	Dev        uint32
	Pad0       [3]int32
	Ino        uint64
	Mode       uint32
	Nlink      uint32
	Uid        uint32
	Gid        uint32
	Rdev       uint32
	Pad1       [3]uint32
	Size       int64
	Atime      uint32
	Atime_nsec uint32
	Mtime      uint32
	Mtime_nsec uint32
	Ctime      uint32
	Ctime_nsec uint32
	Blksize    uint32
	Pad2       uint32
	Blocks     int64
}

//sys	fstat(fd int, st *stat_t) (err error)
//sys	fstatat(dirfd int, path string, st *stat_t, flags int) (err error) = SYS_NEWFSTATAT
//sys	lstat(path string, st *stat_t) (err error)
//sys	stat(path string, st *stat_t) (err error)

func Fstat(fd int, s *Stat_t) (err error) {
	st := &stat_t{}
	err = fstat(fd, st)
	fillStat_t(s, st)
	return
}

func Fstatat(dirfd int, path string, s *Stat_t, flags int) (err error) {
	st := &stat_t{}
	err = fstatat(dirfd, path, st, flags)
	fillStat_t(s, st)
	return
}

func Lstat(path string, s *Stat_t) (err error) {
	st := &stat_t{}
	err = lstat(path, st)
	fillStat_t(s, st)
	return
}

func Stat(path string, s *Stat_t) (err error) {
	st := &stat_t{}
	err = stat(path, st)
	fillStat_t(s, st)
	return
}

func fillStat_t(s *Stat_t, st *stat_t) {
	s.Dev = st.Dev
	s.Ino = st.Ino
	s.Mode = st.Mode
	s.Nlink = st.Nlink
	s.Uid = st.Uid
	s.Gid = st.Gid
	s.Rdev = st.Rdev
	s.Size = st.Size
	s.Atim = Timespec{int64(st.Atime), int64(st.Atime_nsec)}
	s.Mtim = Timespec{int64(st.Mtime), int64(st.Mtime_nsec)}
	s.Ctim = Timespec{int64(st.Ctime), int64(st.Ctime_nsec)}
	s.Blksize = st.Blksize
	s.Blocks = st.Blocks
}

func (r *PtraceRegs) PC() uint64 { return r.Epc }

func (r *PtraceRegs) SetPC(pc uint64) { r.Epc = pc }

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint64(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint64(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = uint64(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint64(length)
}

func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
	rsa.Service_name_len = uint64(length)
}
 07070100000E00000081A4000000000000000000000001645E367C00001765000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go   // Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build linux && (mips || mipsle)
// +build linux
// +build mips mipsle

package unix

import (
	"syscall"
	"unsafe"
)

func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)

//sys	EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys	Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
//sys	Fchown(fd int, uid int, gid int) (err error)
//sys	Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64
//sysnb	Getegid() (egid int)
//sysnb	Geteuid() (euid int)
//sysnb	Getgid() (gid int)
//sysnb	Getuid() (uid int)
//sys	Lchown(path string, uid int, gid int) (err error)
//sys	Listen(s int, n int) (err error)
//sys	pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
//sys	pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
//sys	Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
//sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
//sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
//sys	setfsgid(gid int) (prev int, err error)
//sys	setfsuid(uid int) (prev int, err error)
//sys	Shutdown(fd int, how int) (err error)
//sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
//sys	SyncFileRange(fd int, off int64, n int64, flags int) (err error)
//sys	Truncate(path string, length int64) (err error) = SYS_TRUNCATE64
//sys	Ustat(dev int, ubuf *Ustat_t) (err error)
//sys	accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
//sys	bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
//sys	connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
//sysnb	getgroups(n int, list *_Gid_t) (nn int, err error)
//sysnb	setgroups(n int, list *_Gid_t) (err error)
//sys	getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
//sys	setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
//sysnb	socket(domain int, typ int, proto int) (fd int, err error)
//sysnb	socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
//sysnb	getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
//sysnb	getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
//sys	recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
//sys	sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
//sys	recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
//sys	sendmsg(s int, msg *Msghdr, flags int) (n int, err error)

//sys	Ioperm(from int, num int, on int) (err error)
//sys	Iopl(level int) (err error)

//sys	futimesat(dirfd int, path string, times *[2]Timeval) (err error)
//sysnb	Gettimeofday(tv *Timeval) (err error)
//sysnb	Time(t *Time_t) (tt Time_t, err error)
//sys	Utime(path string, buf *Utimbuf) (err error)
//sys	utimes(path string, times *[2]Timeval) (err error)

//sys	Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
//sys	Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
//sys	Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
//sys	Stat(path string, stat *Stat_t) (err error) = SYS_STAT64

//sys	Pause() (err error)

func Fstatfs(fd int, buf *Statfs_t) (err error) {
	_, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))
	if e != 0 {
		err = errnoErr(e)
	}
	return
}

func Statfs(path string, buf *Statfs_t) (err error) {
	p, err := BytePtrFromString(path)
	if err != nil {
		return err
	}
	_, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(p)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))
	if e != 0 {
		err = errnoErr(e)
	}
	return
}

func Seek(fd int, offset int64, whence int) (off int64, err error) {
	_, _, e := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offset>>32), uintptr(offset), uintptr(unsafe.Pointer(&off)), uintptr(whence), 0)
	if e != 0 {
		err = errnoErr(e)
	}
	return
}

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: int32(sec), Usec: int32(usec)}
}

//sys	mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error)

func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
	page := uintptr(offset / 4096)
	if offset != int64(page)*4096 {
		return 0, EINVAL
	}
	return mmap2(addr, length, prot, flags, fd, page)
}

const rlimInf32 = ^uint32(0)
const rlimInf64 = ^uint64(0)

type rlimit32 struct {
	Cur uint32
	Max uint32
}

//sysnb	getrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT

func Getrlimit(resource int, rlim *Rlimit) (err error) {
	err = Prlimit(0, resource, nil, rlim)
	if err != ENOSYS {
		return err
	}

	rl := rlimit32{}
	err = getrlimit(resource, &rl)
	if err != nil {
		return
	}

	if rl.Cur == rlimInf32 {
		rlim.Cur = rlimInf64
	} else {
		rlim.Cur = uint64(rl.Cur)
	}

	if rl.Max == rlimInf32 {
		rlim.Max = rlimInf64
	} else {
		rlim.Max = uint64(rl.Max)
	}
	return
}

func (r *PtraceRegs) PC() uint64 { return r.Epc }

func (r *PtraceRegs) SetPC(pc uint64) { r.Epc = pc }

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint32(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint32(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = uint32(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint32(length)
}

func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
	rsa.Service_name_len = uint32(length)
}
   07070100000E01000081A4000000000000000000000001645E367C00001B7C000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build linux && ppc
// +build linux,ppc

package unix

import (
	"syscall"
	"unsafe"
)

//sys	EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys	Fchown(fd int, uid int, gid int) (err error)
//sys	Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
//sys	Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
//sys	Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64
//sysnb	Getegid() (egid int)
//sysnb	Geteuid() (euid int)
//sysnb	Getgid() (gid int)
//sysnb	Getuid() (uid int)
//sys	Ioperm(from int, num int, on int) (err error)
//sys	Iopl(level int) (err error)
//sys	Lchown(path string, uid int, gid int) (err error)
//sys	Listen(s int, n int) (err error)
//sys	Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
//sys	Pause() (err error)
//sys	pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
//sys	pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
//sys	Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
//sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
//sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
//sys	setfsgid(gid int) (prev int, err error)
//sys	setfsuid(uid int) (prev int, err error)
//sys	Shutdown(fd int, how int) (err error)
//sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
//sys	Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
//sys	Truncate(path string, length int64) (err error) = SYS_TRUNCATE64
//sys	Ustat(dev int, ubuf *Ustat_t) (err error)
//sys	accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
//sys	bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
//sys	connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
//sysnb	getgroups(n int, list *_Gid_t) (nn int, err error)
//sysnb	setgroups(n int, list *_Gid_t) (err error)
//sys	getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
//sys	setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
//sysnb	socket(domain int, typ int, proto int) (fd int, err error)
//sysnb	socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
//sysnb	getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
//sysnb	getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
//sys	recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
//sys	sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
//sys	recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
//sys	sendmsg(s int, msg *Msghdr, flags int) (n int, err error)

//sys	futimesat(dirfd int, path string, times *[2]Timeval) (err error)
//sysnb	Gettimeofday(tv *Timeval) (err error)
//sysnb	Time(t *Time_t) (tt Time_t, err error)
//sys	Utime(path string, buf *Utimbuf) (err error)
//sys	utimes(path string, times *[2]Timeval) (err error)

func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
	_, _, e1 := Syscall6(SYS_FADVISE64_64, uintptr(fd), uintptr(advice), uintptr(offset>>32), uintptr(offset), uintptr(length>>32), uintptr(length))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

func seek(fd int, offset int64, whence int) (int64, syscall.Errno) {
	var newoffset int64
	offsetLow := uint32(offset & 0xffffffff)
	offsetHigh := uint32((offset >> 32) & 0xffffffff)
	_, _, err := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offsetHigh), uintptr(offsetLow), uintptr(unsafe.Pointer(&newoffset)), uintptr(whence), 0)
	return newoffset, err
}

func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
	newoffset, errno := seek(fd, offset, whence)
	if errno != 0 {
		return 0, errno
	}
	return newoffset, nil
}

func Fstatfs(fd int, buf *Statfs_t) (err error) {
	_, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))
	if e != 0 {
		err = e
	}
	return
}

func Statfs(path string, buf *Statfs_t) (err error) {
	pathp, err := BytePtrFromString(path)
	if err != nil {
		return err
	}
	_, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))
	if e != 0 {
		err = e
	}
	return
}

//sys	mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error)

func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
	page := uintptr(offset / 4096)
	if offset != int64(page)*4096 {
		return 0, EINVAL
	}
	return mmap2(addr, length, prot, flags, fd, page)
}

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: int32(sec), Usec: int32(usec)}
}

type rlimit32 struct {
	Cur uint32
	Max uint32
}

//sysnb	getrlimit(resource int, rlim *rlimit32) (err error) = SYS_UGETRLIMIT

const rlimInf32 = ^uint32(0)
const rlimInf64 = ^uint64(0)

func Getrlimit(resource int, rlim *Rlimit) (err error) {
	err = Prlimit(0, resource, nil, rlim)
	if err != ENOSYS {
		return err
	}

	rl := rlimit32{}
	err = getrlimit(resource, &rl)
	if err != nil {
		return
	}

	if rl.Cur == rlimInf32 {
		rlim.Cur = rlimInf64
	} else {
		rlim.Cur = uint64(rl.Cur)
	}

	if rl.Max == rlimInf32 {
		rlim.Max = rlimInf64
	} else {
		rlim.Max = uint64(rl.Max)
	}
	return
}

func (r *PtraceRegs) PC() uint32 { return r.Nip }

func (r *PtraceRegs) SetPC(pc uint32) { r.Nip = pc }

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint32(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint32(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = uint32(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint32(length)
}

func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
	rsa.Service_name_len = uint32(length)
}

//sys	syncFileRange2(fd int, flags int, off int64, n int64) (err error) = SYS_SYNC_FILE_RANGE2

func SyncFileRange(fd int, off int64, n int64, flags int) error {
	// The sync_file_range and sync_file_range2 syscalls differ only in the
	// order of their arguments.
	return syncFileRange2(fd, flags, off, n)
}

//sys	kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)

func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {
	cmdlineLen := len(cmdline)
	if cmdlineLen > 0 {
		// Account for the additional NULL byte added by
		// BytePtrFromString in kexecFileLoad. The kexec_file_load
		// syscall expects a NULL-terminated string.
		cmdlineLen++
	}
	return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)
}
07070100000E02000081A4000000000000000000000001645E367C00001411000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go  // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build linux && (ppc64 || ppc64le)
// +build linux
// +build ppc64 ppc64le

package unix

//sys	EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys	Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
//sys	Fchown(fd int, uid int, gid int) (err error)
//sys	Fstat(fd int, stat *Stat_t) (err error)
//sys	Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT
//sys	Fstatfs(fd int, buf *Statfs_t) (err error)
//sys	Ftruncate(fd int, length int64) (err error)
//sysnb	Getegid() (egid int)
//sysnb	Geteuid() (euid int)
//sysnb	Getgid() (gid int)
//sysnb	Getrlimit(resource int, rlim *Rlimit) (err error) = SYS_UGETRLIMIT
//sysnb	Getuid() (uid int)
//sys	Ioperm(from int, num int, on int) (err error)
//sys	Iopl(level int) (err error)
//sys	Lchown(path string, uid int, gid int) (err error)
//sys	Listen(s int, n int) (err error)
//sys	Lstat(path string, stat *Stat_t) (err error)
//sys	Pause() (err error)
//sys	pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
//sys	pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
//sys	Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
//sys	Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
//sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
//sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
//sys	setfsgid(gid int) (prev int, err error)
//sys	setfsuid(uid int) (prev int, err error)
//sys	Shutdown(fd int, how int) (err error)
//sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
//sys	Stat(path string, stat *Stat_t) (err error)
//sys	Statfs(path string, buf *Statfs_t) (err error)
//sys	Truncate(path string, length int64) (err error)
//sys	Ustat(dev int, ubuf *Ustat_t) (err error)
//sys	accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
//sys	bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
//sys	connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
//sysnb	getgroups(n int, list *_Gid_t) (nn int, err error)
//sysnb	setgroups(n int, list *_Gid_t) (err error)
//sys	getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
//sys	setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
//sysnb	socket(domain int, typ int, proto int) (fd int, err error)
//sysnb	socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
//sysnb	getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
//sysnb	getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
//sys	recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
//sys	sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
//sys	recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
//sys	sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
//sys	mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)

//sys	futimesat(dirfd int, path string, times *[2]Timeval) (err error)
//sysnb	Gettimeofday(tv *Timeval) (err error)
//sysnb	Time(t *Time_t) (tt Time_t, err error)
//sys	Utime(path string, buf *Utimbuf) (err error)
//sys	utimes(path string, times *[2]Timeval) (err error)

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: nsec}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: usec}
}

func (r *PtraceRegs) PC() uint64 { return r.Nip }

func (r *PtraceRegs) SetPC(pc uint64) { r.Nip = pc }

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint64(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint64(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = uint64(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint64(length)
}

func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
	rsa.Service_name_len = uint64(length)
}

//sys	syncFileRange2(fd int, flags int, off int64, n int64) (err error) = SYS_SYNC_FILE_RANGE2

func SyncFileRange(fd int, off int64, n int64, flags int) error {
	// The sync_file_range and sync_file_range2 syscalls differ only in the
	// order of their arguments.
	return syncFileRange2(fd, flags, off, n)
}

//sys	kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)

func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {
	cmdlineLen := len(cmdline)
	if cmdlineLen > 0 {
		// Account for the additional NULL byte added by
		// BytePtrFromString in kexecFileLoad. The kexec_file_load
		// syscall expects a NULL-terminated string.
		cmdlineLen++
	}
	return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)
}
   07070100000E03000081A4000000000000000000000001645E367C00001756000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build riscv64 && linux
// +build riscv64,linux

package unix

import "unsafe"

//sys	EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
//sys	Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
//sys	Fchown(fd int, uid int, gid int) (err error)
//sys	Fstat(fd int, stat *Stat_t) (err error)
//sys	Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
//sys	Fstatfs(fd int, buf *Statfs_t) (err error)
//sys	Ftruncate(fd int, length int64) (err error)
//sysnb	Getegid() (egid int)
//sysnb	Geteuid() (euid int)
//sysnb	Getgid() (gid int)
//sysnb	Getrlimit(resource int, rlim *Rlimit) (err error)
//sysnb	Getuid() (uid int)
//sys	Listen(s int, n int) (err error)
//sys	MemfdSecret(flags int) (fd int, err error)
//sys	pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
//sys	pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
//sys	Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	var ts *Timespec
	if timeout != nil {
		ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}
	}
	return Pselect(nfd, r, w, e, ts, nil)
}

//sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
//sys	setfsgid(gid int) (prev int, err error)
//sys	setfsuid(uid int) (prev int, err error)
//sys	Shutdown(fd int, how int) (err error)
//sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)

func Stat(path string, stat *Stat_t) (err error) {
	return Fstatat(AT_FDCWD, path, stat, 0)
}

func Lchown(path string, uid int, gid int) (err error) {
	return Fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW)
}

func Lstat(path string, stat *Stat_t) (err error) {
	return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW)
}

//sys	Statfs(path string, buf *Statfs_t) (err error)
//sys	SyncFileRange(fd int, off int64, n int64, flags int) (err error)
//sys	Truncate(path string, length int64) (err error)

func Ustat(dev int, ubuf *Ustat_t) (err error) {
	return ENOSYS
}

//sys	accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
//sys	bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
//sys	connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
//sysnb	getgroups(n int, list *_Gid_t) (nn int, err error)
//sysnb	setgroups(n int, list *_Gid_t) (err error)
//sys	getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
//sys	setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
//sysnb	socket(domain int, typ int, proto int) (fd int, err error)
//sysnb	socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
//sysnb	getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
//sysnb	getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
//sys	recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
//sys	sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
//sys	recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
//sys	sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
//sys	mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)

//sysnb	Gettimeofday(tv *Timeval) (err error)

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: nsec}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: usec}
}

func futimesat(dirfd int, path string, tv *[2]Timeval) (err error) {
	if tv == nil {
		return utimensat(dirfd, path, nil, 0)
	}

	ts := []Timespec{
		NsecToTimespec(TimevalToNsec(tv[0])),
		NsecToTimespec(TimevalToNsec(tv[1])),
	}
	return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
}

func Time(t *Time_t) (Time_t, error) {
	var tv Timeval
	err := Gettimeofday(&tv)
	if err != nil {
		return 0, err
	}
	if t != nil {
		*t = Time_t(tv.Sec)
	}
	return Time_t(tv.Sec), nil
}

func Utime(path string, buf *Utimbuf) error {
	tv := []Timeval{
		{Sec: buf.Actime},
		{Sec: buf.Modtime},
	}
	return Utimes(path, tv)
}

func utimes(path string, tv *[2]Timeval) (err error) {
	if tv == nil {
		return utimensat(AT_FDCWD, path, nil, 0)
	}

	ts := []Timespec{
		NsecToTimespec(TimevalToNsec(tv[0])),
		NsecToTimespec(TimevalToNsec(tv[1])),
	}
	return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
}

func (r *PtraceRegs) PC() uint64 { return r.Pc }

func (r *PtraceRegs) SetPC(pc uint64) { r.Pc = pc }

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint64(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint64(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = uint64(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint64(length)
}

func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
	rsa.Service_name_len = uint64(length)
}

func Pause() error {
	_, err := ppoll(nil, 0, nil, nil)
	return err
}

func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
	return Renameat2(olddirfd, oldpath, newdirfd, newpath, 0)
}

//sys	kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)

func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {
	cmdlineLen := len(cmdline)
	if cmdlineLen > 0 {
		// Account for the additional NULL byte added by
		// BytePtrFromString in kexecFileLoad. The kexec_file_load
		// syscall expects a NULL-terminated string.
		cmdlineLen++
	}
	return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)
}
  07070100000E04000081A4000000000000000000000001645E367C0000253B000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go   // Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build s390x && linux
// +build s390x,linux

package unix

import (
	"unsafe"
)

//sys	EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys	Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
//sys	Fchown(fd int, uid int, gid int) (err error)
//sys	Fstat(fd int, stat *Stat_t) (err error)
//sys	Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT
//sys	Fstatfs(fd int, buf *Statfs_t) (err error)
//sys	Ftruncate(fd int, length int64) (err error)
//sysnb	Getegid() (egid int)
//sysnb	Geteuid() (euid int)
//sysnb	Getgid() (gid int)
//sysnb	Getrlimit(resource int, rlim *Rlimit) (err error)
//sysnb	Getuid() (uid int)
//sys	Lchown(path string, uid int, gid int) (err error)
//sys	Lstat(path string, stat *Stat_t) (err error)
//sys	Pause() (err error)
//sys	pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
//sys	pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
//sys	Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
//sys	Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
//sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
//sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
//sys	setfsgid(gid int) (prev int, err error)
//sys	setfsuid(uid int) (prev int, err error)
//sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
//sys	Stat(path string, stat *Stat_t) (err error)
//sys	Statfs(path string, buf *Statfs_t) (err error)
//sys	SyncFileRange(fd int, off int64, n int64, flags int) (err error)
//sys	Truncate(path string, length int64) (err error)
//sys	Ustat(dev int, ubuf *Ustat_t) (err error)
//sysnb	getgroups(n int, list *_Gid_t) (nn int, err error)
//sysnb	setgroups(n int, list *_Gid_t) (err error)

//sys	futimesat(dirfd int, path string, times *[2]Timeval) (err error)
//sysnb	Gettimeofday(tv *Timeval) (err error)

func Time(t *Time_t) (tt Time_t, err error) {
	var tv Timeval
	err = Gettimeofday(&tv)
	if err != nil {
		return 0, err
	}
	if t != nil {
		*t = Time_t(tv.Sec)
	}
	return Time_t(tv.Sec), nil
}

//sys	Utime(path string, buf *Utimbuf) (err error)
//sys	utimes(path string, times *[2]Timeval) (err error)

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: nsec}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: usec}
}

func Ioperm(from int, num int, on int) (err error) {
	return ENOSYS
}

func Iopl(level int) (err error) {
	return ENOSYS
}

func (r *PtraceRegs) PC() uint64 { return r.Psw.Addr }

func (r *PtraceRegs) SetPC(pc uint64) { r.Psw.Addr = pc }

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint64(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint64(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = uint64(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint64(length)
}

func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
	rsa.Service_name_len = uint64(length)
}

// Linux on s390x uses the old mmap interface, which requires arguments to be passed in a struct.
// mmap2 also requires arguments to be passed in a struct; it is currently not exposed in <asm/unistd.h>.
func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
	mmap_args := [6]uintptr{addr, length, uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)}
	r0, _, e1 := Syscall(SYS_MMAP, uintptr(unsafe.Pointer(&mmap_args[0])), 0, 0)
	xaddr = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// On s390x Linux, all the socket calls go through an extra indirection.
// The arguments to the underlying system call (SYS_SOCKETCALL) are the
// number below and a pointer to an array of uintptr.
const (
	// see linux/net.h
	netSocket      = 1
	netBind        = 2
	netConnect     = 3
	netListen      = 4
	netAccept      = 5
	netGetSockName = 6
	netGetPeerName = 7
	netSocketPair  = 8
	netSend        = 9
	netRecv        = 10
	netSendTo      = 11
	netRecvFrom    = 12
	netShutdown    = 13
	netSetSockOpt  = 14
	netGetSockOpt  = 15
	netSendMsg     = 16
	netRecvMsg     = 17
	netAccept4     = 18
	netRecvMMsg    = 19
	netSendMMsg    = 20
)

func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (int, error) {
	args := [4]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags)}
	fd, _, err := Syscall(SYS_SOCKETCALL, netAccept4, uintptr(unsafe.Pointer(&args)), 0)
	if err != 0 {
		return 0, err
	}
	return int(fd), nil
}

func getsockname(s int, rsa *RawSockaddrAny, addrlen *_Socklen) error {
	args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))}
	_, _, err := RawSyscall(SYS_SOCKETCALL, netGetSockName, uintptr(unsafe.Pointer(&args)), 0)
	if err != 0 {
		return err
	}
	return nil
}

func getpeername(s int, rsa *RawSockaddrAny, addrlen *_Socklen) error {
	args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))}
	_, _, err := RawSyscall(SYS_SOCKETCALL, netGetPeerName, uintptr(unsafe.Pointer(&args)), 0)
	if err != 0 {
		return err
	}
	return nil
}

func socketpair(domain int, typ int, flags int, fd *[2]int32) error {
	args := [4]uintptr{uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd))}
	_, _, err := RawSyscall(SYS_SOCKETCALL, netSocketPair, uintptr(unsafe.Pointer(&args)), 0)
	if err != 0 {
		return err
	}
	return nil
}

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) error {
	args := [3]uintptr{uintptr(s), uintptr(addr), uintptr(addrlen)}
	_, _, err := Syscall(SYS_SOCKETCALL, netBind, uintptr(unsafe.Pointer(&args)), 0)
	if err != 0 {
		return err
	}
	return nil
}

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) error {
	args := [3]uintptr{uintptr(s), uintptr(addr), uintptr(addrlen)}
	_, _, err := Syscall(SYS_SOCKETCALL, netConnect, uintptr(unsafe.Pointer(&args)), 0)
	if err != 0 {
		return err
	}
	return nil
}

func socket(domain int, typ int, proto int) (int, error) {
	args := [3]uintptr{uintptr(domain), uintptr(typ), uintptr(proto)}
	fd, _, err := RawSyscall(SYS_SOCKETCALL, netSocket, uintptr(unsafe.Pointer(&args)), 0)
	if err != 0 {
		return 0, err
	}
	return int(fd), nil
}

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) error {
	args := [5]uintptr{uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen))}
	_, _, err := Syscall(SYS_SOCKETCALL, netGetSockOpt, uintptr(unsafe.Pointer(&args)), 0)
	if err != 0 {
		return err
	}
	return nil
}

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) error {
	args := [5]uintptr{uintptr(s), uintptr(level), uintptr(name), uintptr(val), vallen}
	_, _, err := Syscall(SYS_SOCKETCALL, netSetSockOpt, uintptr(unsafe.Pointer(&args)), 0)
	if err != 0 {
		return err
	}
	return nil
}

func recvfrom(s int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (int, error) {
	var base uintptr
	if len(p) > 0 {
		base = uintptr(unsafe.Pointer(&p[0]))
	}
	args := [6]uintptr{uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))}
	n, _, err := Syscall(SYS_SOCKETCALL, netRecvFrom, uintptr(unsafe.Pointer(&args)), 0)
	if err != 0 {
		return 0, err
	}
	return int(n), nil
}

func sendto(s int, p []byte, flags int, to unsafe.Pointer, addrlen _Socklen) error {
	var base uintptr
	if len(p) > 0 {
		base = uintptr(unsafe.Pointer(&p[0]))
	}
	args := [6]uintptr{uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(to), uintptr(addrlen)}
	_, _, err := Syscall(SYS_SOCKETCALL, netSendTo, uintptr(unsafe.Pointer(&args)), 0)
	if err != 0 {
		return err
	}
	return nil
}

func recvmsg(s int, msg *Msghdr, flags int) (int, error) {
	args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)}
	n, _, err := Syscall(SYS_SOCKETCALL, netRecvMsg, uintptr(unsafe.Pointer(&args)), 0)
	if err != 0 {
		return 0, err
	}
	return int(n), nil
}

func sendmsg(s int, msg *Msghdr, flags int) (int, error) {
	args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)}
	n, _, err := Syscall(SYS_SOCKETCALL, netSendMsg, uintptr(unsafe.Pointer(&args)), 0)
	if err != 0 {
		return 0, err
	}
	return int(n), nil
}

func Listen(s int, n int) error {
	args := [2]uintptr{uintptr(s), uintptr(n)}
	_, _, err := Syscall(SYS_SOCKETCALL, netListen, uintptr(unsafe.Pointer(&args)), 0)
	if err != 0 {
		return err
	}
	return nil
}

func Shutdown(s, how int) error {
	args := [2]uintptr{uintptr(s), uintptr(how)}
	_, _, err := Syscall(SYS_SOCKETCALL, netShutdown, uintptr(unsafe.Pointer(&args)), 0)
	if err != 0 {
		return err
	}
	return nil
}

//sys	kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)

func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {
	cmdlineLen := len(cmdline)
	if cmdlineLen > 0 {
		// Account for the additional NULL byte added by
		// BytePtrFromString in kexecFileLoad. The kexec_file_load
		// syscall expects a NULL-terminated string.
		cmdlineLen++
	}
	return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)
}
 07070100000E05000081A4000000000000000000000001645E367C00001190000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build sparc64 && linux
// +build sparc64,linux

package unix

//sys	EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys	Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
//sys	Fchown(fd int, uid int, gid int) (err error)
//sys	Fstat(fd int, stat *Stat_t) (err error)
//sys	Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
//sys	Fstatfs(fd int, buf *Statfs_t) (err error)
//sys	Ftruncate(fd int, length int64) (err error)
//sysnb	Getegid() (egid int)
//sysnb	Geteuid() (euid int)
//sysnb	Getgid() (gid int)
//sysnb	Getrlimit(resource int, rlim *Rlimit) (err error)
//sysnb	Getuid() (uid int)
//sys	Lchown(path string, uid int, gid int) (err error)
//sys	Listen(s int, n int) (err error)
//sys	Lstat(path string, stat *Stat_t) (err error)
//sys	Pause() (err error)
//sys	pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
//sys	pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
//sys	Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
//sys	Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
//sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
//sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
//sys	setfsgid(gid int) (prev int, err error)
//sys	setfsuid(uid int) (prev int, err error)
//sys	Shutdown(fd int, how int) (err error)
//sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
//sys	Stat(path string, stat *Stat_t) (err error)
//sys	Statfs(path string, buf *Statfs_t) (err error)
//sys	SyncFileRange(fd int, off int64, n int64, flags int) (err error)
//sys	Truncate(path string, length int64) (err error)
//sys	accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
//sys	bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
//sys	connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
//sysnb	getgroups(n int, list *_Gid_t) (nn int, err error)
//sysnb	setgroups(n int, list *_Gid_t) (err error)
//sys	getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
//sys	setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
//sysnb	socket(domain int, typ int, proto int) (fd int, err error)
//sysnb	socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
//sysnb	getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
//sysnb	getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
//sys	recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
//sys	sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
//sys	recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
//sys	sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
//sys	mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)

func Ioperm(from int, num int, on int) (err error) {
	return ENOSYS
}

func Iopl(level int) (err error) {
	return ENOSYS
}

//sys	futimesat(dirfd int, path string, times *[2]Timeval) (err error)
//sysnb	Gettimeofday(tv *Timeval) (err error)

func Time(t *Time_t) (tt Time_t, err error) {
	var tv Timeval
	err = Gettimeofday(&tv)
	if err != nil {
		return 0, err
	}
	if t != nil {
		*t = Time_t(tv.Sec)
	}
	return Time_t(tv.Sec), nil
}

//sys	Utime(path string, buf *Utimbuf) (err error)
//sys	utimes(path string, times *[2]Timeval) (err error)

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: nsec}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: int32(usec)}
}

func (r *PtraceRegs) PC() uint64 { return r.Tpc }

func (r *PtraceRegs) SetPC(pc uint64) { r.Tpc = pc }

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint64(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint64(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = uint64(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint64(length)
}

func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
	rsa.Service_name_len = uint64(length)
}
07070100000E06000081A4000000000000000000000001645E367C0000410E000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_netbsd.go    // Copyright 2009,2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// NetBSD system calls.
// This file is compiled as ordinary Go code,
// but it is also input to mksyscall,
// which parses the //sys lines and generates system call stubs.
// Note that sometimes we use a lowercase //sys name and wrap
// it in our own nicer implementation, either here or in
// syscall_bsd.go or syscall_unix.go.

package unix

import (
	"syscall"
	"unsafe"
)

// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.
type SockaddrDatalink struct {
	Len    uint8
	Family uint8
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [12]int8
	raw    RawSockaddrDatalink
}

func anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
	return nil, EAFNOSUPPORT
}

func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)

func sysctlNodes(mib []_C_int) (nodes []Sysctlnode, err error) {
	var olen uintptr

	// Get a list of all sysctl nodes below the given MIB by performing
	// a sysctl for the given MIB with CTL_QUERY appended.
	mib = append(mib, CTL_QUERY)
	qnode := Sysctlnode{Flags: SYSCTL_VERS_1}
	qp := (*byte)(unsafe.Pointer(&qnode))
	sz := unsafe.Sizeof(qnode)
	if err = sysctl(mib, nil, &olen, qp, sz); err != nil {
		return nil, err
	}

	// Now that we know the size, get the actual nodes.
	nodes = make([]Sysctlnode, olen/sz)
	np := (*byte)(unsafe.Pointer(&nodes[0]))
	if err = sysctl(mib, np, &olen, qp, sz); err != nil {
		return nil, err
	}

	return nodes, nil
}

func nametomib(name string) (mib []_C_int, err error) {
	// Split name into components.
	var parts []string
	last := 0
	for i := 0; i < len(name); i++ {
		if name[i] == '.' {
			parts = append(parts, name[last:i])
			last = i + 1
		}
	}
	parts = append(parts, name[last:])

	// Discover the nodes and construct the MIB OID.
	for partno, part := range parts {
		nodes, err := sysctlNodes(mib)
		if err != nil {
			return nil, err
		}
		for _, node := range nodes {
			n := make([]byte, 0)
			for i := range node.Name {
				if node.Name[i] != 0 {
					n = append(n, byte(node.Name[i]))
				}
			}
			if string(n) == part {
				mib = append(mib, _C_int(node.Num))
				break
			}
		}
		if len(mib) != partno+1 {
			return nil, EINVAL
		}
	}

	return mib, nil
}

func direntIno(buf []byte) (uint64, bool) {
	return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))
}

func direntReclen(buf []byte) (uint64, bool) {
	return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
}

func direntNamlen(buf []byte) (uint64, bool) {
	return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
}

func SysctlUvmexp(name string) (*Uvmexp, error) {
	mib, err := sysctlmib(name)
	if err != nil {
		return nil, err
	}

	n := uintptr(SizeofUvmexp)
	var u Uvmexp
	if err := sysctl(mib, (*byte)(unsafe.Pointer(&u)), &n, nil, 0); err != nil {
		return nil, err
	}
	return &u, nil
}

func Pipe(p []int) (err error) {
	return Pipe2(p, 0)
}

//sysnb	pipe2(p *[2]_C_int, flags int) (err error)

func Pipe2(p []int, flags int) error {
	if len(p) != 2 {
		return EINVAL
	}
	var pp [2]_C_int
	err := pipe2(&pp, flags)
	if err == nil {
		p[0] = int(pp[0])
		p[1] = int(pp[1])
	}
	return err
}

//sys	Getdents(fd int, buf []byte) (n int, err error)

func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
	n, err = Getdents(fd, buf)
	if err != nil || basep == nil {
		return
	}

	var off int64
	off, err = Seek(fd, 0, 1 /* SEEK_CUR */)
	if err != nil {
		*basep = ^uintptr(0)
		return
	}
	*basep = uintptr(off)
	if unsafe.Sizeof(*basep) == 8 {
		return
	}
	if off>>32 != 0 {
		// We can't stuff the offset back into a uintptr, so any
		// future calls would be suspect. Generate an error.
		// EIO is allowed by getdirentries.
		err = EIO
	}
	return
}

//sys	Getcwd(buf []byte) (n int, err error) = SYS___GETCWD

// TODO
func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	return -1, ENOSYS
}

//sys	ioctl(fd int, req uint, arg uintptr) (err error)
//sys	ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL

//sys	sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL

func IoctlGetPtmget(fd int, req uint) (*Ptmget, error) {
	var value Ptmget
	err := ioctlPtr(fd, req, unsafe.Pointer(&value))
	return &value, err
}

func Uname(uname *Utsname) error {
	mib := []_C_int{CTL_KERN, KERN_OSTYPE}
	n := unsafe.Sizeof(uname.Sysname)
	if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil {
		return err
	}

	mib = []_C_int{CTL_KERN, KERN_HOSTNAME}
	n = unsafe.Sizeof(uname.Nodename)
	if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil {
		return err
	}

	mib = []_C_int{CTL_KERN, KERN_OSRELEASE}
	n = unsafe.Sizeof(uname.Release)
	if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil {
		return err
	}

	mib = []_C_int{CTL_KERN, KERN_VERSION}
	n = unsafe.Sizeof(uname.Version)
	if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil {
		return err
	}

	// The version might have newlines or tabs in it, convert them to
	// spaces.
	for i, b := range uname.Version {
		if b == '\n' || b == '\t' {
			if i == len(uname.Version)-1 {
				uname.Version[i] = 0
			} else {
				uname.Version[i] = ' '
			}
		}
	}

	mib = []_C_int{CTL_HW, HW_MACHINE}
	n = unsafe.Sizeof(uname.Machine)
	if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil {
		return err
	}

	return nil
}

func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	if raceenabled {
		raceReleaseMerge(unsafe.Pointer(&ioSync))
	}
	return sendfile(outfd, infd, offset, count)
}

func Fstatvfs(fd int, buf *Statvfs_t) (err error) {
	return Fstatvfs1(fd, buf, ST_WAIT)
}

func Statvfs(path string, buf *Statvfs_t) (err error) {
	return Statvfs1(path, buf, ST_WAIT)
}

/*
 * Exposed directly
 */
//sys	Access(path string, mode uint32) (err error)
//sys	Adjtime(delta *Timeval, olddelta *Timeval) (err error)
//sys	Chdir(path string) (err error)
//sys	Chflags(path string, flags int) (err error)
//sys	Chmod(path string, mode uint32) (err error)
//sys	Chown(path string, uid int, gid int) (err error)
//sys	Chroot(path string) (err error)
//sys	ClockGettime(clockid int32, time *Timespec) (err error)
//sys	Close(fd int) (err error)
//sys	Dup(fd int) (nfd int, err error)
//sys	Dup2(from int, to int) (err error)
//sys	Dup3(from int, to int, flags int) (err error)
//sys	Exit(code int)
//sys	ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
//sys	ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
//sys	ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error)
//sys	ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
//sys	ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
//sys	ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
//sys	ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error)
//sys	ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
//sys	ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
//sys	ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
//sys	ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error)
//sys	ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
//sys	Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
//sys	Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE
//sys	Fchdir(fd int) (err error)
//sys	Fchflags(fd int, flags int) (err error)
//sys	Fchmod(fd int, mode uint32) (err error)
//sys	Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
//sys	Fchown(fd int, uid int, gid int) (err error)
//sys	Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
//sys	Flock(fd int, how int) (err error)
//sys	Fpathconf(fd int, name int) (val int, err error)
//sys	Fstat(fd int, stat *Stat_t) (err error)
//sys	Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
//sys	Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) = SYS_FSTATVFS1
//sys	Fsync(fd int) (err error)
//sys	Ftruncate(fd int, length int64) (err error)
//sysnb	Getegid() (egid int)
//sysnb	Geteuid() (uid int)
//sysnb	Getgid() (gid int)
//sysnb	Getpgid(pid int) (pgid int, err error)
//sysnb	Getpgrp() (pgrp int)
//sysnb	Getpid() (pid int)
//sysnb	Getppid() (ppid int)
//sys	Getpriority(which int, who int) (prio int, err error)
//sysnb	Getrlimit(which int, lim *Rlimit) (err error)
//sysnb	Getrusage(who int, rusage *Rusage) (err error)
//sysnb	Getsid(pid int) (sid int, err error)
//sysnb	Gettimeofday(tv *Timeval) (err error)
//sysnb	Getuid() (uid int)
//sys	Issetugid() (tainted bool)
//sys	Kill(pid int, signum syscall.Signal) (err error)
//sys	Kqueue() (fd int, err error)
//sys	Lchown(path string, uid int, gid int) (err error)
//sys	Link(path string, link string) (err error)
//sys	Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error)
//sys	Listen(s int, backlog int) (err error)
//sys	Lstat(path string, stat *Stat_t) (err error)
//sys	Mkdir(path string, mode uint32) (err error)
//sys	Mkdirat(dirfd int, path string, mode uint32) (err error)
//sys	Mkfifo(path string, mode uint32) (err error)
//sys	Mkfifoat(dirfd int, path string, mode uint32) (err error)
//sys	Mknod(path string, mode uint32, dev int) (err error)
//sys	Mknodat(dirfd int, path string, mode uint32, dev int) (err error)
//sys	Nanosleep(time *Timespec, leftover *Timespec) (err error)
//sys	Open(path string, mode int, perm uint32) (fd int, err error)
//sys	Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error)
//sys	Pathconf(path string, name int) (val int, err error)
//sys	pread(fd int, p []byte, offset int64) (n int, err error)
//sys	pwrite(fd int, p []byte, offset int64) (n int, err error)
//sys	read(fd int, p []byte) (n int, err error)
//sys	Readlink(path string, buf []byte) (n int, err error)
//sys	Readlinkat(dirfd int, path string, buf []byte) (n int, err error)
//sys	Rename(from string, to string) (err error)
//sys	Renameat(fromfd int, from string, tofd int, to string) (err error)
//sys	Revoke(path string) (err error)
//sys	Rmdir(path string) (err error)
//sys	Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
//sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
//sysnb	Setegid(egid int) (err error)
//sysnb	Seteuid(euid int) (err error)
//sysnb	Setgid(gid int) (err error)
//sysnb	Setpgid(pid int, pgid int) (err error)
//sys	Setpriority(which int, who int, prio int) (err error)
//sysnb	Setregid(rgid int, egid int) (err error)
//sysnb	Setreuid(ruid int, euid int) (err error)
//sysnb	Setsid() (pid int, err error)
//sysnb	Settimeofday(tp *Timeval) (err error)
//sysnb	Setuid(uid int) (err error)
//sys	Stat(path string, stat *Stat_t) (err error)
//sys	Statvfs1(path string, buf *Statvfs_t, flags int) (err error) = SYS_STATVFS1
//sys	Symlink(path string, link string) (err error)
//sys	Symlinkat(oldpath string, newdirfd int, newpath string) (err error)
//sys	Sync() (err error)
//sys	Truncate(path string, length int64) (err error)
//sys	Umask(newmask int) (oldmask int)
//sys	Unlink(path string) (err error)
//sys	Unlinkat(dirfd int, path string, flags int) (err error)
//sys	Unmount(path string, flags int) (err error)
//sys	write(fd int, p []byte) (n int, err error)
//sys	mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
//sys	munmap(addr uintptr, length uintptr) (err error)
//sys	readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ
//sys	writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE
//sys	utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)

/*
 * Unimplemented
 */
// ____semctl13
// __clone
// __fhopen40
// __fhstat40
// __fhstatvfs140
// __fstat30
// __getcwd
// __getfh30
// __getlogin
// __lstat30
// __mount50
// __msgctl13
// __msync13
// __ntp_gettime30
// __posix_chown
// __posix_fchown
// __posix_lchown
// __posix_rename
// __setlogin
// __shmctl13
// __sigaction_sigtramp
// __sigaltstack14
// __sigpending14
// __sigprocmask14
// __sigsuspend14
// __sigtimedwait
// __stat30
// __syscall
// __vfork14
// _ksem_close
// _ksem_destroy
// _ksem_getvalue
// _ksem_init
// _ksem_open
// _ksem_post
// _ksem_trywait
// _ksem_unlink
// _ksem_wait
// _lwp_continue
// _lwp_create
// _lwp_ctl
// _lwp_detach
// _lwp_exit
// _lwp_getname
// _lwp_getprivate
// _lwp_kill
// _lwp_park
// _lwp_self
// _lwp_setname
// _lwp_setprivate
// _lwp_suspend
// _lwp_unpark
// _lwp_unpark_all
// _lwp_wait
// _lwp_wakeup
// _pset_bind
// _sched_getaffinity
// _sched_getparam
// _sched_setaffinity
// _sched_setparam
// acct
// aio_cancel
// aio_error
// aio_fsync
// aio_read
// aio_return
// aio_suspend
// aio_write
// break
// clock_getres
// clock_gettime
// clock_settime
// compat_09_ogetdomainname
// compat_09_osetdomainname
// compat_09_ouname
// compat_10_omsgsys
// compat_10_osemsys
// compat_10_oshmsys
// compat_12_fstat12
// compat_12_getdirentries
// compat_12_lstat12
// compat_12_msync
// compat_12_oreboot
// compat_12_oswapon
// compat_12_stat12
// compat_13_sigaction13
// compat_13_sigaltstack13
// compat_13_sigpending13
// compat_13_sigprocmask13
// compat_13_sigreturn13
// compat_13_sigsuspend13
// compat_14___semctl
// compat_14_msgctl
// compat_14_shmctl
// compat_16___sigaction14
// compat_16___sigreturn14
// compat_20_fhstatfs
// compat_20_fstatfs
// compat_20_getfsstat
// compat_20_statfs
// compat_30___fhstat30
// compat_30___fstat13
// compat_30___lstat13
// compat_30___stat13
// compat_30_fhopen
// compat_30_fhstat
// compat_30_fhstatvfs1
// compat_30_getdents
// compat_30_getfh
// compat_30_ntp_gettime
// compat_30_socket
// compat_40_mount
// compat_43_fstat43
// compat_43_lstat43
// compat_43_oaccept
// compat_43_ocreat
// compat_43_oftruncate
// compat_43_ogetdirentries
// compat_43_ogetdtablesize
// compat_43_ogethostid
// compat_43_ogethostname
// compat_43_ogetkerninfo
// compat_43_ogetpagesize
// compat_43_ogetpeername
// compat_43_ogetrlimit
// compat_43_ogetsockname
// compat_43_okillpg
// compat_43_olseek
// compat_43_ommap
// compat_43_oquota
// compat_43_orecv
// compat_43_orecvfrom
// compat_43_orecvmsg
// compat_43_osend
// compat_43_osendmsg
// compat_43_osethostid
// compat_43_osethostname
// compat_43_osigblock
// compat_43_osigsetmask
// compat_43_osigstack
// compat_43_osigvec
// compat_43_otruncate
// compat_43_owait
// compat_43_stat43
// execve
// extattr_delete_fd
// extattr_delete_file
// extattr_delete_link
// extattr_get_fd
// extattr_get_file
// extattr_get_link
// extattr_list_fd
// extattr_list_file
// extattr_list_link
// extattr_set_fd
// extattr_set_file
// extattr_set_link
// extattrctl
// fchroot
// fdatasync
// fgetxattr
// fktrace
// flistxattr
// fork
// fremovexattr
// fsetxattr
// fstatvfs1
// fsync_range
// getcontext
// getitimer
// getvfsstat
// getxattr
// ktrace
// lchflags
// lchmod
// lfs_bmapv
// lfs_markv
// lfs_segclean
// lfs_segwait
// lgetxattr
// lio_listio
// listxattr
// llistxattr
// lremovexattr
// lseek
// lsetxattr
// lutimes
// madvise
// mincore
// minherit
// modctl
// mq_close
// mq_getattr
// mq_notify
// mq_open
// mq_receive
// mq_send
// mq_setattr
// mq_timedreceive
// mq_timedsend
// mq_unlink
// mremap
// msgget
// msgrcv
// msgsnd
// nfssvc
// ntp_adjtime
// pmc_control
// pmc_get_info
// pollts
// preadv
// profil
// pselect
// pset_assign
// pset_create
// pset_destroy
// ptrace
// pwritev
// quotactl
// rasctl
// readv
// reboot
// removexattr
// sa_enable
// sa_preempt
// sa_register
// sa_setconcurrency
// sa_stacks
// sa_yield
// sbrk
// sched_yield
// semconfig
// semget
// semop
// setcontext
// setitimer
// setxattr
// shmat
// shmdt
// shmget
// sstk
// statvfs1
// swapctl
// sysarch
// syscall
// timer_create
// timer_delete
// timer_getoverrun
// timer_gettime
// timer_settime
// undelete
// utrace
// uuidgen
// vadvise
// vfork
// writev
  07070100000E07000081A4000000000000000000000001645E367C00000348000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go    // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build 386 && netbsd
// +build 386,netbsd

package unix

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: int32(nsec)}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: int32(usec)}
}

func SetKevent(k *Kevent_t, fd, mode, flags int) {
	k.Ident = uint32(fd)
	k.Filter = uint32(mode)
	k.Flags = uint32(flags)
}

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint32(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint32(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = int32(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint32(length)
}
07070100000E08000081A4000000000000000000000001645E367C00000345000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go  // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build amd64 && netbsd
// +build amd64,netbsd

package unix

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: nsec}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: int32(usec)}
}

func SetKevent(k *Kevent_t, fd, mode, flags int) {
	k.Ident = uint64(fd)
	k.Filter = uint32(mode)
	k.Flags = uint32(flags)
}

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint64(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint32(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = int32(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint32(length)
}
   07070100000E09000081A4000000000000000000000001645E367C00000348000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go    // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build arm && netbsd
// +build arm,netbsd

package unix

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: int32(nsec)}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: int32(usec)}
}

func SetKevent(k *Kevent_t, fd, mode, flags int) {
	k.Ident = uint32(fd)
	k.Filter = uint32(mode)
	k.Flags = uint32(flags)
}

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint32(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint32(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = int32(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint32(length)
}
07070100000E0A000081A4000000000000000000000001645E367C00000345000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_netbsd_arm64.go  // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build arm64 && netbsd
// +build arm64,netbsd

package unix

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: nsec}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: int32(usec)}
}

func SetKevent(k *Kevent_t, fd, mode, flags int) {
	k.Ident = uint64(fd)
	k.Filter = uint32(mode)
	k.Flags = uint32(flags)
}

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint64(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint32(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = int32(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint32(length)
}
   07070100000E0B000081A4000000000000000000000001645E367C00002C36000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_openbsd.go   // Copyright 2009,2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// OpenBSD system calls.
// This file is compiled as ordinary Go code,
// but it is also input to mksyscall,
// which parses the //sys lines and generates system call stubs.
// Note that sometimes we use a lowercase //sys name and wrap
// it in our own nicer implementation, either here or in
// syscall_bsd.go or syscall_unix.go.

package unix

import (
	"sort"
	"syscall"
	"unsafe"
)

// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.
type SockaddrDatalink struct {
	Len    uint8
	Family uint8
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [24]int8
	raw    RawSockaddrDatalink
}

func anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
	return nil, EAFNOSUPPORT
}

func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)

func nametomib(name string) (mib []_C_int, err error) {
	i := sort.Search(len(sysctlMib), func(i int) bool {
		return sysctlMib[i].ctlname >= name
	})
	if i < len(sysctlMib) && sysctlMib[i].ctlname == name {
		return sysctlMib[i].ctloid, nil
	}
	return nil, EINVAL
}

func direntIno(buf []byte) (uint64, bool) {
	return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))
}

func direntReclen(buf []byte) (uint64, bool) {
	return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
}

func direntNamlen(buf []byte) (uint64, bool) {
	return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
}

func SysctlUvmexp(name string) (*Uvmexp, error) {
	mib, err := sysctlmib(name)
	if err != nil {
		return nil, err
	}

	n := uintptr(SizeofUvmexp)
	var u Uvmexp
	if err := sysctl(mib, (*byte)(unsafe.Pointer(&u)), &n, nil, 0); err != nil {
		return nil, err
	}
	if n != SizeofUvmexp {
		return nil, EIO
	}
	return &u, nil
}

func Pipe(p []int) (err error) {
	return Pipe2(p, 0)
}

//sysnb	pipe2(p *[2]_C_int, flags int) (err error)

func Pipe2(p []int, flags int) error {
	if len(p) != 2 {
		return EINVAL
	}
	var pp [2]_C_int
	err := pipe2(&pp, flags)
	if err == nil {
		p[0] = int(pp[0])
		p[1] = int(pp[1])
	}
	return err
}

//sys	Getdents(fd int, buf []byte) (n int, err error)

func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
	n, err = Getdents(fd, buf)
	if err != nil || basep == nil {
		return
	}

	var off int64
	off, err = Seek(fd, 0, 1 /* SEEK_CUR */)
	if err != nil {
		*basep = ^uintptr(0)
		return
	}
	*basep = uintptr(off)
	if unsafe.Sizeof(*basep) == 8 {
		return
	}
	if off>>32 != 0 {
		// We can't stuff the offset back into a uintptr, so any
		// future calls would be suspect. Generate an error.
		// EIO was allowed by getdirentries.
		err = EIO
	}
	return
}

//sys	Getcwd(buf []byte) (n int, err error) = SYS___GETCWD

func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	if raceenabled {
		raceReleaseMerge(unsafe.Pointer(&ioSync))
	}
	return sendfile(outfd, infd, offset, count)
}

// TODO
func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	return -1, ENOSYS
}

func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
	var _p0 unsafe.Pointer
	var bufsize uintptr
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
		bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))
	}
	r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

//sys	ioctl(fd int, req uint, arg uintptr) (err error)
//sys	ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL

//sys	sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL

//sys	ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error)

func Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
	if len(fds) == 0 {
		return ppoll(nil, 0, timeout, sigmask)
	}
	return ppoll(&fds[0], len(fds), timeout, sigmask)
}

func Uname(uname *Utsname) error {
	mib := []_C_int{CTL_KERN, KERN_OSTYPE}
	n := unsafe.Sizeof(uname.Sysname)
	if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil {
		return err
	}

	mib = []_C_int{CTL_KERN, KERN_HOSTNAME}
	n = unsafe.Sizeof(uname.Nodename)
	if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil {
		return err
	}

	mib = []_C_int{CTL_KERN, KERN_OSRELEASE}
	n = unsafe.Sizeof(uname.Release)
	if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil {
		return err
	}

	mib = []_C_int{CTL_KERN, KERN_VERSION}
	n = unsafe.Sizeof(uname.Version)
	if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil {
		return err
	}

	// The version might have newlines or tabs in it, convert them to
	// spaces.
	for i, b := range uname.Version {
		if b == '\n' || b == '\t' {
			if i == len(uname.Version)-1 {
				uname.Version[i] = 0
			} else {
				uname.Version[i] = ' '
			}
		}
	}

	mib = []_C_int{CTL_HW, HW_MACHINE}
	n = unsafe.Sizeof(uname.Machine)
	if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil {
		return err
	}

	return nil
}

/*
 * Exposed directly
 */
//sys	Access(path string, mode uint32) (err error)
//sys	Adjtime(delta *Timeval, olddelta *Timeval) (err error)
//sys	Chdir(path string) (err error)
//sys	Chflags(path string, flags int) (err error)
//sys	Chmod(path string, mode uint32) (err error)
//sys	Chown(path string, uid int, gid int) (err error)
//sys	Chroot(path string) (err error)
//sys	ClockGettime(clockid int32, time *Timespec) (err error)
//sys	Close(fd int) (err error)
//sys	Dup(fd int) (nfd int, err error)
//sys	Dup2(from int, to int) (err error)
//sys	Dup3(from int, to int, flags int) (err error)
//sys	Exit(code int)
//sys	Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
//sys	Fchdir(fd int) (err error)
//sys	Fchflags(fd int, flags int) (err error)
//sys	Fchmod(fd int, mode uint32) (err error)
//sys	Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
//sys	Fchown(fd int, uid int, gid int) (err error)
//sys	Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
//sys	Flock(fd int, how int) (err error)
//sys	Fpathconf(fd int, name int) (val int, err error)
//sys	Fstat(fd int, stat *Stat_t) (err error)
//sys	Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
//sys	Fstatfs(fd int, stat *Statfs_t) (err error)
//sys	Fsync(fd int) (err error)
//sys	Ftruncate(fd int, length int64) (err error)
//sysnb	Getegid() (egid int)
//sysnb	Geteuid() (uid int)
//sysnb	Getgid() (gid int)
//sysnb	Getpgid(pid int) (pgid int, err error)
//sysnb	Getpgrp() (pgrp int)
//sysnb	Getpid() (pid int)
//sysnb	Getppid() (ppid int)
//sys	Getpriority(which int, who int) (prio int, err error)
//sysnb	Getrlimit(which int, lim *Rlimit) (err error)
//sysnb	Getrtable() (rtable int, err error)
//sysnb	Getrusage(who int, rusage *Rusage) (err error)
//sysnb	Getsid(pid int) (sid int, err error)
//sysnb	Gettimeofday(tv *Timeval) (err error)
//sysnb	Getuid() (uid int)
//sys	Issetugid() (tainted bool)
//sys	Kill(pid int, signum syscall.Signal) (err error)
//sys	Kqueue() (fd int, err error)
//sys	Lchown(path string, uid int, gid int) (err error)
//sys	Link(path string, link string) (err error)
//sys	Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error)
//sys	Listen(s int, backlog int) (err error)
//sys	Lstat(path string, stat *Stat_t) (err error)
//sys	Mkdir(path string, mode uint32) (err error)
//sys	Mkdirat(dirfd int, path string, mode uint32) (err error)
//sys	Mkfifo(path string, mode uint32) (err error)
//sys	Mkfifoat(dirfd int, path string, mode uint32) (err error)
//sys	Mknod(path string, mode uint32, dev int) (err error)
//sys	Mknodat(dirfd int, path string, mode uint32, dev int) (err error)
//sys	Nanosleep(time *Timespec, leftover *Timespec) (err error)
//sys	Open(path string, mode int, perm uint32) (fd int, err error)
//sys	Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error)
//sys	Pathconf(path string, name int) (val int, err error)
//sys	pread(fd int, p []byte, offset int64) (n int, err error)
//sys	pwrite(fd int, p []byte, offset int64) (n int, err error)
//sys	read(fd int, p []byte) (n int, err error)
//sys	Readlink(path string, buf []byte) (n int, err error)
//sys	Readlinkat(dirfd int, path string, buf []byte) (n int, err error)
//sys	Rename(from string, to string) (err error)
//sys	Renameat(fromfd int, from string, tofd int, to string) (err error)
//sys	Revoke(path string) (err error)
//sys	Rmdir(path string) (err error)
//sys	Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
//sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
//sysnb	Setegid(egid int) (err error)
//sysnb	Seteuid(euid int) (err error)
//sysnb	Setgid(gid int) (err error)
//sys	Setlogin(name string) (err error)
//sysnb	Setpgid(pid int, pgid int) (err error)
//sys	Setpriority(which int, who int, prio int) (err error)
//sysnb	Setregid(rgid int, egid int) (err error)
//sysnb	Setreuid(ruid int, euid int) (err error)
//sysnb	Setresgid(rgid int, egid int, sgid int) (err error)
//sysnb	Setresuid(ruid int, euid int, suid int) (err error)
//sysnb	Setrtable(rtable int) (err error)
//sysnb	Setsid() (pid int, err error)
//sysnb	Settimeofday(tp *Timeval) (err error)
//sysnb	Setuid(uid int) (err error)
//sys	Stat(path string, stat *Stat_t) (err error)
//sys	Statfs(path string, stat *Statfs_t) (err error)
//sys	Symlink(path string, link string) (err error)
//sys	Symlinkat(oldpath string, newdirfd int, newpath string) (err error)
//sys	Sync() (err error)
//sys	Truncate(path string, length int64) (err error)
//sys	Umask(newmask int) (oldmask int)
//sys	Unlink(path string) (err error)
//sys	Unlinkat(dirfd int, path string, flags int) (err error)
//sys	Unmount(path string, flags int) (err error)
//sys	write(fd int, p []byte) (n int, err error)
//sys	mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
//sys	munmap(addr uintptr, length uintptr) (err error)
//sys	readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ
//sys	writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE
//sys	utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)

/*
 * Unimplemented
 */
// __getcwd
// __semctl
// __syscall
// __sysctl
// adjfreq
// break
// clock_getres
// clock_gettime
// clock_settime
// closefrom
// execve
// fhopen
// fhstat
// fhstatfs
// fork
// futimens
// getfh
// getgid
// getitimer
// getlogin
// getresgid
// getresuid
// getthrid
// ktrace
// lfs_bmapv
// lfs_markv
// lfs_segclean
// lfs_segwait
// mincore
// minherit
// mount
// mquery
// msgctl
// msgget
// msgrcv
// msgsnd
// nfssvc
// nnpfspioctl
// preadv
// profil
// pwritev
// quotactl
// readv
// reboot
// renameat
// rfork
// sched_yield
// semget
// semop
// setgroups
// setitimer
// setsockopt
// shmat
// shmctl
// shmdt
// shmget
// sigaction
// sigaltstack
// sigpending
// sigprocmask
// sigreturn
// sigsuspend
// sysarch
// syscall
// threxit
// thrsigdivert
// thrsleep
// thrwakeup
// vfork
// writev
  07070100000E0C000081A4000000000000000000000001645E367C000003FE000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go   // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build 386 && openbsd
// +build 386,openbsd

package unix

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: int32(nsec)}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: int32(usec)}
}

func SetKevent(k *Kevent_t, fd, mode, flags int) {
	k.Ident = uint32(fd)
	k.Filter = int16(mode)
	k.Flags = uint16(flags)
}

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint32(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint32(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = uint32(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint32(length)
}

// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
// of openbsd/386 the syscall is called sysctl instead of __sysctl.
const SYS___SYSCTL = SYS_SYSCTL
  07070100000E0D000081A4000000000000000000000001645E367C000003F6000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build amd64 && openbsd
// +build amd64,openbsd

package unix

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: nsec}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: usec}
}

func SetKevent(k *Kevent_t, fd, mode, flags int) {
	k.Ident = uint64(fd)
	k.Filter = int16(mode)
	k.Flags = uint16(flags)
}

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint64(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint32(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = uint32(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint32(length)
}

// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
// of openbsd/amd64 the syscall is called sysctl instead of __sysctl.
const SYS___SYSCTL = SYS_SYSCTL
  07070100000E0E000081A4000000000000000000000001645E367C000003FE000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go   // Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build arm && openbsd
// +build arm,openbsd

package unix

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: int32(nsec)}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: int32(usec)}
}

func SetKevent(k *Kevent_t, fd, mode, flags int) {
	k.Ident = uint32(fd)
	k.Filter = int16(mode)
	k.Flags = uint16(flags)
}

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint32(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint32(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = uint32(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint32(length)
}

// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
// of openbsd/arm the syscall is called sysctl instead of __sysctl.
const SYS___SYSCTL = SYS_SYSCTL
  07070100000E0F000081A4000000000000000000000001645E367C000003F6000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build arm64 && openbsd
// +build arm64,openbsd

package unix

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: nsec}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: usec}
}

func SetKevent(k *Kevent_t, fd, mode, flags int) {
	k.Ident = uint64(fd)
	k.Filter = int16(mode)
	k.Flags = uint16(flags)
}

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint64(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint32(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = uint32(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint32(length)
}

// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
// of openbsd/amd64 the syscall is called sysctl instead of __sysctl.
const SYS___SYSCTL = SYS_SYSCTL
  07070100000E10000081A4000000000000000000000001645E367C0000047A000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_openbsd_libc.go  // Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build openbsd
// +build openbsd

package unix

import _ "unsafe"

// Implemented in the runtime package (runtime/sys_openbsd3.go)
func syscall_syscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
func syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
func syscall_syscall10(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 uintptr) (r1, r2 uintptr, err Errno)
func syscall_rawSyscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
func syscall_rawSyscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)

//go:linkname syscall_syscall syscall.syscall
//go:linkname syscall_syscall6 syscall.syscall6
//go:linkname syscall_syscall10 syscall.syscall10
//go:linkname syscall_rawSyscall syscall.rawSyscall
//go:linkname syscall_rawSyscall6 syscall.rawSyscall6

func syscall_syscall9(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) {
	return syscall_syscall10(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, 0)
}
  07070100000E11000081A4000000000000000000000001645E367C000003BB000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go    // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package unix

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: nsec}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: usec}
}

func SetKevent(k *Kevent_t, fd, mode, flags int) {
	k.Ident = uint64(fd)
	k.Filter = int16(mode)
	k.Flags = uint16(flags)
}

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint64(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint32(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = uint32(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint32(length)
}

// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
// of OpenBSD the syscall is called sysctl instead of __sysctl.
const SYS___SYSCTL = SYS_SYSCTL
 07070100000E12000081A4000000000000000000000001645E367C000003F6000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_openbsd_ppc64.go // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build ppc64 && openbsd
// +build ppc64,openbsd

package unix

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: nsec}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: usec}
}

func SetKevent(k *Kevent_t, fd, mode, flags int) {
	k.Ident = uint64(fd)
	k.Filter = int16(mode)
	k.Flags = uint16(flags)
}

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint64(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint32(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = uint32(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint32(length)
}

// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
// of openbsd/ppc64 the syscall is called sysctl instead of __sysctl.
const SYS___SYSCTL = SYS_SYSCTL
  07070100000E13000081A4000000000000000000000001645E367C000003FC000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_openbsd_riscv64.go   // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build riscv64 && openbsd
// +build riscv64,openbsd

package unix

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: nsec}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: usec}
}

func SetKevent(k *Kevent_t, fd, mode, flags int) {
	k.Ident = uint64(fd)
	k.Filter = int16(mode)
	k.Flags = uint16(flags)
}

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint64(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint32(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = uint32(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint32(length)
}

// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
// of openbsd/riscv64 the syscall is called sysctl instead of __sysctl.
const SYS___SYSCTL = SYS_SYSCTL
07070100000E14000081A4000000000000000000000001645E367C00007F1F000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_solaris.go   // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Solaris system calls.
// This file is compiled as ordinary Go code,
// but it is also input to mksyscall,
// which parses the //sys lines and generates system call stubs.
// Note that sometimes we use a lowercase //sys name and wrap
// it in our own nicer implementation, either here or in
// syscall_solaris.go or syscall_unix.go.

package unix

import (
	"fmt"
	"os"
	"runtime"
	"sync"
	"syscall"
	"unsafe"
)

// Implemented in runtime/syscall_solaris.go.
type syscallFunc uintptr

func rawSysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)
func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)

// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.
type SockaddrDatalink struct {
	Family uint16
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [244]int8
	raw    RawSockaddrDatalink
}

func direntIno(buf []byte) (uint64, bool) {
	return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))
}

func direntReclen(buf []byte) (uint64, bool) {
	return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
}

func direntNamlen(buf []byte) (uint64, bool) {
	reclen, ok := direntReclen(buf)
	if !ok {
		return 0, false
	}
	return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true
}

//sysnb	pipe(p *[2]_C_int) (n int, err error)

func Pipe(p []int) (err error) {
	if len(p) != 2 {
		return EINVAL
	}
	var pp [2]_C_int
	n, err := pipe(&pp)
	if n != 0 {
		return err
	}
	if err == nil {
		p[0] = int(pp[0])
		p[1] = int(pp[1])
	}
	return nil
}

//sysnb	pipe2(p *[2]_C_int, flags int) (err error)

func Pipe2(p []int, flags int) error {
	if len(p) != 2 {
		return EINVAL
	}
	var pp [2]_C_int
	err := pipe2(&pp, flags)
	if err == nil {
		p[0] = int(pp[0])
		p[1] = int(pp[1])
	}
	return err
}

func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {
	if sa.Port < 0 || sa.Port > 0xFFFF {
		return nil, 0, EINVAL
	}
	sa.raw.Family = AF_INET
	p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
	p[0] = byte(sa.Port >> 8)
	p[1] = byte(sa.Port)
	sa.raw.Addr = sa.Addr
	return unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil
}

func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {
	if sa.Port < 0 || sa.Port > 0xFFFF {
		return nil, 0, EINVAL
	}
	sa.raw.Family = AF_INET6
	p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
	p[0] = byte(sa.Port >> 8)
	p[1] = byte(sa.Port)
	sa.raw.Scope_id = sa.ZoneId
	sa.raw.Addr = sa.Addr
	return unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil
}

func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {
	name := sa.Name
	n := len(name)
	if n >= len(sa.raw.Path) {
		return nil, 0, EINVAL
	}
	sa.raw.Family = AF_UNIX
	for i := 0; i < n; i++ {
		sa.raw.Path[i] = int8(name[i])
	}
	// length is family (uint16), name, NUL.
	sl := _Socklen(2)
	if n > 0 {
		sl += _Socklen(n) + 1
	}
	if sa.raw.Path[0] == '@' {
		sa.raw.Path[0] = 0
		// Don't count trailing NUL for abstract address.
		sl--
	}

	return unsafe.Pointer(&sa.raw), sl, nil
}

//sys	getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = libsocket.getsockname

func Getsockname(fd int) (sa Sockaddr, err error) {
	var rsa RawSockaddrAny
	var len _Socklen = SizeofSockaddrAny
	if err = getsockname(fd, &rsa, &len); err != nil {
		return
	}
	return anyToSockaddr(fd, &rsa)
}

// GetsockoptString returns the string value of the socket option opt for the
// socket associated with fd at the given socket level.
func GetsockoptString(fd, level, opt int) (string, error) {
	buf := make([]byte, 256)
	vallen := _Socklen(len(buf))
	err := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)
	if err != nil {
		return "", err
	}
	return string(buf[:vallen-1]), nil
}

const ImplementsGetwd = true

//sys	Getcwd(buf []byte) (n int, err error)

func Getwd() (wd string, err error) {
	var buf [PathMax]byte
	// Getcwd will return an error if it failed for any reason.
	_, err = Getcwd(buf[0:])
	if err != nil {
		return "", err
	}
	n := clen(buf[:])
	if n < 1 {
		return "", EINVAL
	}
	return string(buf[:n]), nil
}

/*
 * Wrapped
 */

//sysnb	getgroups(ngid int, gid *_Gid_t) (n int, err error)
//sysnb	setgroups(ngid int, gid *_Gid_t) (err error)

func Getgroups() (gids []int, err error) {
	n, err := getgroups(0, nil)
	// Check for error and sanity check group count. Newer versions of
	// Solaris allow up to 1024 (NGROUPS_MAX).
	if n < 0 || n > 1024 {
		if err != nil {
			return nil, err
		}
		return nil, EINVAL
	} else if n == 0 {
		return nil, nil
	}

	a := make([]_Gid_t, n)
	n, err = getgroups(n, &a[0])
	if n == -1 {
		return nil, err
	}
	gids = make([]int, n)
	for i, v := range a[0:n] {
		gids[i] = int(v)
	}
	return
}

func Setgroups(gids []int) (err error) {
	if len(gids) == 0 {
		return setgroups(0, nil)
	}

	a := make([]_Gid_t, len(gids))
	for i, v := range gids {
		a[i] = _Gid_t(v)
	}
	return setgroups(len(a), &a[0])
}

// ReadDirent reads directory entries from fd and writes them into buf.
func ReadDirent(fd int, buf []byte) (n int, err error) {
	// Final argument is (basep *uintptr) and the syscall doesn't take nil.
	// TODO(rsc): Can we use a single global basep for all calls?
	return Getdents(fd, buf, new(uintptr))
}

// Wait status is 7 bits at bottom, either 0 (exited),
// 0x7F (stopped), or a signal number that caused an exit.
// The 0x80 bit is whether there was a core dump.
// An extra number (exit code, signal causing a stop)
// is in the high bits.

type WaitStatus uint32

const (
	mask  = 0x7F
	core  = 0x80
	shift = 8

	exited  = 0
	stopped = 0x7F
)

func (w WaitStatus) Exited() bool { return w&mask == exited }

func (w WaitStatus) ExitStatus() int {
	if w&mask != exited {
		return -1
	}
	return int(w >> shift)
}

func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != 0 }

func (w WaitStatus) Signal() syscall.Signal {
	sig := syscall.Signal(w & mask)
	if sig == stopped || sig == 0 {
		return -1
	}
	return sig
}

func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 }

func (w WaitStatus) Stopped() bool { return w&mask == stopped && syscall.Signal(w>>shift) != SIGSTOP }

func (w WaitStatus) Continued() bool { return w&mask == stopped && syscall.Signal(w>>shift) == SIGSTOP }

func (w WaitStatus) StopSignal() syscall.Signal {
	if !w.Stopped() {
		return -1
	}
	return syscall.Signal(w>>shift) & 0xFF
}

func (w WaitStatus) TrapCause() int { return -1 }

//sys	wait4(pid int32, statusp *_C_int, options int, rusage *Rusage) (wpid int32, err error)

func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (int, error) {
	var status _C_int
	rpid, err := wait4(int32(pid), &status, options, rusage)
	wpid := int(rpid)
	if wpid == -1 {
		return wpid, err
	}
	if wstatus != nil {
		*wstatus = WaitStatus(status)
	}
	return wpid, nil
}

//sys	gethostname(buf []byte) (n int, err error)

func Gethostname() (name string, err error) {
	var buf [MaxHostNameLen]byte
	n, err := gethostname(buf[:])
	if n != 0 {
		return "", err
	}
	n = clen(buf[:])
	if n < 1 {
		return "", EFAULT
	}
	return string(buf[:n]), nil
}

//sys	utimes(path string, times *[2]Timeval) (err error)

func Utimes(path string, tv []Timeval) (err error) {
	if tv == nil {
		return utimes(path, nil)
	}
	if len(tv) != 2 {
		return EINVAL
	}
	return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
}

//sys	utimensat(fd int, path string, times *[2]Timespec, flag int) (err error)

func UtimesNano(path string, ts []Timespec) error {
	if ts == nil {
		return utimensat(AT_FDCWD, path, nil, 0)
	}
	if len(ts) != 2 {
		return EINVAL
	}
	return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
}

func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {
	if ts == nil {
		return utimensat(dirfd, path, nil, flags)
	}
	if len(ts) != 2 {
		return EINVAL
	}
	return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)
}

//sys	fcntl(fd int, cmd int, arg int) (val int, err error)

// FcntlInt performs a fcntl syscall on fd with the provided command and argument.
func FcntlInt(fd uintptr, cmd, arg int) (int, error) {
	valptr, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(arg), 0, 0, 0)
	var err error
	if errno != 0 {
		err = errno
	}
	return int(valptr), err
}

// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.
func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(unsafe.Pointer(lk)), 0, 0, 0)
	if e1 != 0 {
		return e1
	}
	return nil
}

//sys	futimesat(fildes int, path *byte, times *[2]Timeval) (err error)

func Futimesat(dirfd int, path string, tv []Timeval) error {
	pathp, err := BytePtrFromString(path)
	if err != nil {
		return err
	}
	if tv == nil {
		return futimesat(dirfd, pathp, nil)
	}
	if len(tv) != 2 {
		return EINVAL
	}
	return futimesat(dirfd, pathp, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
}

// Solaris doesn't have an futimes function because it allows NULL to be
// specified as the path for futimesat. However, Go doesn't like
// NULL-style string interfaces, so this simple wrapper is provided.
func Futimes(fd int, tv []Timeval) error {
	if tv == nil {
		return futimesat(fd, nil, nil)
	}
	if len(tv) != 2 {
		return EINVAL
	}
	return futimesat(fd, nil, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
}

func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
	switch rsa.Addr.Family {
	case AF_UNIX:
		pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))
		sa := new(SockaddrUnix)
		// Assume path ends at NUL.
		// This is not technically the Solaris semantics for
		// abstract Unix domain sockets -- they are supposed
		// to be uninterpreted fixed-size binary blobs -- but
		// everyone uses this convention.
		n := 0
		for n < len(pp.Path) && pp.Path[n] != 0 {
			n++
		}
		sa.Name = string(unsafe.Slice((*byte)(unsafe.Pointer(&pp.Path[0])), n))
		return sa, nil

	case AF_INET:
		pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))
		sa := new(SockaddrInet4)
		p := (*[2]byte)(unsafe.Pointer(&pp.Port))
		sa.Port = int(p[0])<<8 + int(p[1])
		sa.Addr = pp.Addr
		return sa, nil

	case AF_INET6:
		pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))
		sa := new(SockaddrInet6)
		p := (*[2]byte)(unsafe.Pointer(&pp.Port))
		sa.Port = int(p[0])<<8 + int(p[1])
		sa.ZoneId = pp.Scope_id
		sa.Addr = pp.Addr
		return sa, nil
	}
	return nil, EAFNOSUPPORT
}

//sys	accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) = libsocket.accept

func Accept(fd int) (nfd int, sa Sockaddr, err error) {
	var rsa RawSockaddrAny
	var len _Socklen = SizeofSockaddrAny
	nfd, err = accept(fd, &rsa, &len)
	if nfd == -1 {
		return
	}
	sa, err = anyToSockaddr(fd, &rsa)
	if err != nil {
		Close(nfd)
		nfd = 0
	}
	return
}

//sys	recvmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_recvmsg

func recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) {
	var msg Msghdr
	msg.Name = (*byte)(unsafe.Pointer(rsa))
	msg.Namelen = uint32(SizeofSockaddrAny)
	var dummy byte
	if len(oob) > 0 {
		// receive at least one normal byte
		if emptyIovecs(iov) {
			var iova [1]Iovec
			iova[0].Base = &dummy
			iova[0].SetLen(1)
			iov = iova[:]
		}
		msg.Accrightslen = int32(len(oob))
	}
	if len(iov) > 0 {
		msg.Iov = &iov[0]
		msg.SetIovlen(len(iov))
	}
	if n, err = recvmsg(fd, &msg, flags); n == -1 {
		return
	}
	oobn = int(msg.Accrightslen)
	return
}

//sys	sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_sendmsg

func sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) {
	var msg Msghdr
	msg.Name = (*byte)(unsafe.Pointer(ptr))
	msg.Namelen = uint32(salen)
	var dummy byte
	var empty bool
	if len(oob) > 0 {
		// send at least one normal byte
		empty = emptyIovecs(iov)
		if empty {
			var iova [1]Iovec
			iova[0].Base = &dummy
			iova[0].SetLen(1)
			iov = iova[:]
		}
		msg.Accrightslen = int32(len(oob))
	}
	if len(iov) > 0 {
		msg.Iov = &iov[0]
		msg.SetIovlen(len(iov))
	}
	if n, err = sendmsg(fd, &msg, flags); err != nil {
		return 0, err
	}
	if len(oob) > 0 && empty {
		n = 0
	}
	return n, nil
}

//sys	acct(path *byte) (err error)

func Acct(path string) (err error) {
	if len(path) == 0 {
		// Assume caller wants to disable accounting.
		return acct(nil)
	}

	pathp, err := BytePtrFromString(path)
	if err != nil {
		return err
	}
	return acct(pathp)
}

//sys	__makedev(version int, major uint, minor uint) (val uint64)

func Mkdev(major, minor uint32) uint64 {
	return __makedev(NEWDEV, uint(major), uint(minor))
}

//sys	__major(version int, dev uint64) (val uint)

func Major(dev uint64) uint32 {
	return uint32(__major(NEWDEV, dev))
}

//sys	__minor(version int, dev uint64) (val uint)

func Minor(dev uint64) uint32 {
	return uint32(__minor(NEWDEV, dev))
}

/*
 * Expose the ioctl function
 */

//sys	ioctlRet(fd int, req int, arg uintptr) (ret int, err error) = libc.ioctl
//sys	ioctlPtrRet(fd int, req int, arg unsafe.Pointer) (ret int, err error) = libc.ioctl

func ioctl(fd int, req int, arg uintptr) (err error) {
	_, err = ioctlRet(fd, req, arg)
	return err
}

func ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) {
	_, err = ioctlPtrRet(fd, req, arg)
	return err
}

func IoctlSetTermio(fd int, req int, value *Termio) error {
	return ioctlPtr(fd, req, unsafe.Pointer(value))
}

func IoctlGetTermio(fd int, req int) (*Termio, error) {
	var value Termio
	err := ioctlPtr(fd, req, unsafe.Pointer(&value))
	return &value, err
}

//sys	poll(fds *PollFd, nfds int, timeout int) (n int, err error)

func Poll(fds []PollFd, timeout int) (n int, err error) {
	if len(fds) == 0 {
		return poll(nil, 0, timeout)
	}
	return poll(&fds[0], len(fds), timeout)
}

func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	if raceenabled {
		raceReleaseMerge(unsafe.Pointer(&ioSync))
	}
	return sendfile(outfd, infd, offset, count)
}

/*
 * Exposed directly
 */
//sys	Access(path string, mode uint32) (err error)
//sys	Adjtime(delta *Timeval, olddelta *Timeval) (err error)
//sys	Chdir(path string) (err error)
//sys	Chmod(path string, mode uint32) (err error)
//sys	Chown(path string, uid int, gid int) (err error)
//sys	Chroot(path string) (err error)
//sys	ClockGettime(clockid int32, time *Timespec) (err error)
//sys	Close(fd int) (err error)
//sys	Creat(path string, mode uint32) (fd int, err error)
//sys	Dup(fd int) (nfd int, err error)
//sys	Dup2(oldfd int, newfd int) (err error)
//sys	Exit(code int)
//sys	Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
//sys	Fchdir(fd int) (err error)
//sys	Fchmod(fd int, mode uint32) (err error)
//sys	Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
//sys	Fchown(fd int, uid int, gid int) (err error)
//sys	Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
//sys	Fdatasync(fd int) (err error)
//sys	Flock(fd int, how int) (err error)
//sys	Fpathconf(fd int, name int) (val int, err error)
//sys	Fstat(fd int, stat *Stat_t) (err error)
//sys	Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
//sys	Fstatvfs(fd int, vfsstat *Statvfs_t) (err error)
//sys	Getdents(fd int, buf []byte, basep *uintptr) (n int, err error)
//sysnb	Getgid() (gid int)
//sysnb	Getpid() (pid int)
//sysnb	Getpgid(pid int) (pgid int, err error)
//sysnb	Getpgrp() (pgid int, err error)
//sys	Geteuid() (euid int)
//sys	Getegid() (egid int)
//sys	Getppid() (ppid int)
//sys	Getpriority(which int, who int) (n int, err error)
//sysnb	Getrlimit(which int, lim *Rlimit) (err error)
//sysnb	Getrusage(who int, rusage *Rusage) (err error)
//sysnb	Getsid(pid int) (sid int, err error)
//sysnb	Gettimeofday(tv *Timeval) (err error)
//sysnb	Getuid() (uid int)
//sys	Kill(pid int, signum syscall.Signal) (err error)
//sys	Lchown(path string, uid int, gid int) (err error)
//sys	Link(path string, link string) (err error)
//sys	Listen(s int, backlog int) (err error) = libsocket.__xnet_llisten
//sys	Lstat(path string, stat *Stat_t) (err error)
//sys	Madvise(b []byte, advice int) (err error)
//sys	Mkdir(path string, mode uint32) (err error)
//sys	Mkdirat(dirfd int, path string, mode uint32) (err error)
//sys	Mkfifo(path string, mode uint32) (err error)
//sys	Mkfifoat(dirfd int, path string, mode uint32) (err error)
//sys	Mknod(path string, mode uint32, dev int) (err error)
//sys	Mknodat(dirfd int, path string, mode uint32, dev int) (err error)
//sys	Mlock(b []byte) (err error)
//sys	Mlockall(flags int) (err error)
//sys	Mprotect(b []byte, prot int) (err error)
//sys	Msync(b []byte, flags int) (err error)
//sys	Munlock(b []byte) (err error)
//sys	Munlockall() (err error)
//sys	Nanosleep(time *Timespec, leftover *Timespec) (err error)
//sys	Open(path string, mode int, perm uint32) (fd int, err error)
//sys	Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
//sys	Pathconf(path string, name int) (val int, err error)
//sys	Pause() (err error)
//sys	pread(fd int, p []byte, offset int64) (n int, err error)
//sys	pwrite(fd int, p []byte, offset int64) (n int, err error)
//sys	read(fd int, p []byte) (n int, err error)
//sys	Readlink(path string, buf []byte) (n int, err error)
//sys	Rename(from string, to string) (err error)
//sys	Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
//sys	Rmdir(path string) (err error)
//sys	Seek(fd int, offset int64, whence int) (newoffset int64, err error) = lseek
//sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
//sysnb	Setegid(egid int) (err error)
//sysnb	Seteuid(euid int) (err error)
//sysnb	Setgid(gid int) (err error)
//sys	Sethostname(p []byte) (err error)
//sysnb	Setpgid(pid int, pgid int) (err error)
//sys	Setpriority(which int, who int, prio int) (err error)
//sysnb	Setregid(rgid int, egid int) (err error)
//sysnb	Setreuid(ruid int, euid int) (err error)
//sysnb	Setsid() (pid int, err error)
//sysnb	Setuid(uid int) (err error)
//sys	Shutdown(s int, how int) (err error) = libsocket.shutdown
//sys	Stat(path string, stat *Stat_t) (err error)
//sys	Statvfs(path string, vfsstat *Statvfs_t) (err error)
//sys	Symlink(path string, link string) (err error)
//sys	Sync() (err error)
//sys	Sysconf(which int) (n int64, err error)
//sysnb	Times(tms *Tms) (ticks uintptr, err error)
//sys	Truncate(path string, length int64) (err error)
//sys	Fsync(fd int) (err error)
//sys	Ftruncate(fd int, length int64) (err error)
//sys	Umask(mask int) (oldmask int)
//sysnb	Uname(buf *Utsname) (err error)
//sys	Unmount(target string, flags int) (err error) = libc.umount
//sys	Unlink(path string) (err error)
//sys	Unlinkat(dirfd int, path string, flags int) (err error)
//sys	Ustat(dev int, ubuf *Ustat_t) (err error)
//sys	Utime(path string, buf *Utimbuf) (err error)
//sys	bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_bind
//sys	connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_connect
//sys	mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
//sys	munmap(addr uintptr, length uintptr) (err error)
//sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = libsendfile.sendfile
//sys	sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_sendto
//sys	socket(domain int, typ int, proto int) (fd int, err error) = libsocket.__xnet_socket
//sysnb	socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) = libsocket.__xnet_socketpair
//sys	write(fd int, p []byte) (n int, err error)
//sys	getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) = libsocket.__xnet_getsockopt
//sysnb	getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = libsocket.getpeername
//sys	setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) = libsocket.setsockopt
//sys	recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) = libsocket.recvfrom

func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procread)), 3, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf), 0, 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwrite)), 3, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf), 0, 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

var mapper = &mmapper{
	active: make(map[*byte][]byte),
	mmap:   mmap,
	munmap: munmap,
}

func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {
	return mapper.Mmap(fd, offset, length, prot, flags)
}

func Munmap(b []byte) (err error) {
	return mapper.Munmap(b)
}

// Event Ports

type fileObjCookie struct {
	fobj   *fileObj
	cookie interface{}
}

// EventPort provides a safe abstraction on top of Solaris/illumos Event Ports.
type EventPort struct {
	port  int
	mu    sync.Mutex
	fds   map[uintptr]*fileObjCookie
	paths map[string]*fileObjCookie
	// The user cookie presents an interesting challenge from a memory management perspective.
	// There are two paths by which we can discover that it is no longer in use:
	// 1. The user calls port_dissociate before any events fire
	// 2. An event fires and we return it to the user
	// The tricky situation is if the event has fired in the kernel but
	// the user hasn't requested/received it yet.
	// If the user wants to port_dissociate before the event has been processed,
	// we should handle things gracefully. To do so, we need to keep an extra
	// reference to the cookie around until the event is processed
	// thus the otherwise seemingly extraneous "cookies" map
	// The key of this map is a pointer to the corresponding fCookie
	cookies map[*fileObjCookie]struct{}
}

// PortEvent is an abstraction of the port_event C struct.
// Compare Source against PORT_SOURCE_FILE or PORT_SOURCE_FD
// to see if Path or Fd was the event source. The other will be
// uninitialized.
type PortEvent struct {
	Cookie interface{}
	Events int32
	Fd     uintptr
	Path   string
	Source uint16
	fobj   *fileObj
}

// NewEventPort creates a new EventPort including the
// underlying call to port_create(3c).
func NewEventPort() (*EventPort, error) {
	port, err := port_create()
	if err != nil {
		return nil, err
	}
	e := &EventPort{
		port:    port,
		fds:     make(map[uintptr]*fileObjCookie),
		paths:   make(map[string]*fileObjCookie),
		cookies: make(map[*fileObjCookie]struct{}),
	}
	return e, nil
}

//sys	port_create() (n int, err error)
//sys	port_associate(port int, source int, object uintptr, events int, user *byte) (n int, err error)
//sys	port_dissociate(port int, source int, object uintptr) (n int, err error)
//sys	port_get(port int, pe *portEvent, timeout *Timespec) (n int, err error)
//sys	port_getn(port int, pe *portEvent, max uint32, nget *uint32, timeout *Timespec) (n int, err error)

// Close closes the event port.
func (e *EventPort) Close() error {
	e.mu.Lock()
	defer e.mu.Unlock()
	err := Close(e.port)
	if err != nil {
		return err
	}
	e.fds = nil
	e.paths = nil
	e.cookies = nil
	return nil
}

// PathIsWatched checks to see if path is associated with this EventPort.
func (e *EventPort) PathIsWatched(path string) bool {
	e.mu.Lock()
	defer e.mu.Unlock()
	_, found := e.paths[path]
	return found
}

// FdIsWatched checks to see if fd is associated with this EventPort.
func (e *EventPort) FdIsWatched(fd uintptr) bool {
	e.mu.Lock()
	defer e.mu.Unlock()
	_, found := e.fds[fd]
	return found
}

// AssociatePath wraps port_associate(3c) for a filesystem path including
// creating the necessary file_obj from the provided stat information.
func (e *EventPort) AssociatePath(path string, stat os.FileInfo, events int, cookie interface{}) error {
	e.mu.Lock()
	defer e.mu.Unlock()
	if _, found := e.paths[path]; found {
		return fmt.Errorf("%v is already associated with this Event Port", path)
	}
	fCookie, err := createFileObjCookie(path, stat, cookie)
	if err != nil {
		return err
	}
	_, err = port_associate(e.port, PORT_SOURCE_FILE, uintptr(unsafe.Pointer(fCookie.fobj)), events, (*byte)(unsafe.Pointer(fCookie)))
	if err != nil {
		return err
	}
	e.paths[path] = fCookie
	e.cookies[fCookie] = struct{}{}
	return nil
}

// DissociatePath wraps port_dissociate(3c) for a filesystem path.
func (e *EventPort) DissociatePath(path string) error {
	e.mu.Lock()
	defer e.mu.Unlock()
	f, ok := e.paths[path]
	if !ok {
		return fmt.Errorf("%v is not associated with this Event Port", path)
	}
	_, err := port_dissociate(e.port, PORT_SOURCE_FILE, uintptr(unsafe.Pointer(f.fobj)))
	// If the path is no longer associated with this event port (ENOENT)
	// we should delete it from our map. We can still return ENOENT to the caller.
	// But we need to save the cookie
	if err != nil && err != ENOENT {
		return err
	}
	if err == nil {
		// dissociate was successful, safe to delete the cookie
		fCookie := e.paths[path]
		delete(e.cookies, fCookie)
	}
	delete(e.paths, path)
	return err
}

// AssociateFd wraps calls to port_associate(3c) on file descriptors.
func (e *EventPort) AssociateFd(fd uintptr, events int, cookie interface{}) error {
	e.mu.Lock()
	defer e.mu.Unlock()
	if _, found := e.fds[fd]; found {
		return fmt.Errorf("%v is already associated with this Event Port", fd)
	}
	fCookie, err := createFileObjCookie("", nil, cookie)
	if err != nil {
		return err
	}
	_, err = port_associate(e.port, PORT_SOURCE_FD, fd, events, (*byte)(unsafe.Pointer(fCookie)))
	if err != nil {
		return err
	}
	e.fds[fd] = fCookie
	e.cookies[fCookie] = struct{}{}
	return nil
}

// DissociateFd wraps calls to port_dissociate(3c) on file descriptors.
func (e *EventPort) DissociateFd(fd uintptr) error {
	e.mu.Lock()
	defer e.mu.Unlock()
	_, ok := e.fds[fd]
	if !ok {
		return fmt.Errorf("%v is not associated with this Event Port", fd)
	}
	_, err := port_dissociate(e.port, PORT_SOURCE_FD, fd)
	if err != nil && err != ENOENT {
		return err
	}
	if err == nil {
		// dissociate was successful, safe to delete the cookie
		fCookie := e.fds[fd]
		delete(e.cookies, fCookie)
	}
	delete(e.fds, fd)
	return err
}

func createFileObjCookie(name string, stat os.FileInfo, cookie interface{}) (*fileObjCookie, error) {
	fCookie := new(fileObjCookie)
	fCookie.cookie = cookie
	if name != "" && stat != nil {
		fCookie.fobj = new(fileObj)
		bs, err := ByteSliceFromString(name)
		if err != nil {
			return nil, err
		}
		fCookie.fobj.Name = (*int8)(unsafe.Pointer(&bs[0]))
		s := stat.Sys().(*syscall.Stat_t)
		fCookie.fobj.Atim.Sec = s.Atim.Sec
		fCookie.fobj.Atim.Nsec = s.Atim.Nsec
		fCookie.fobj.Mtim.Sec = s.Mtim.Sec
		fCookie.fobj.Mtim.Nsec = s.Mtim.Nsec
		fCookie.fobj.Ctim.Sec = s.Ctim.Sec
		fCookie.fobj.Ctim.Nsec = s.Ctim.Nsec
	}
	return fCookie, nil
}

// GetOne wraps port_get(3c) and returns a single PortEvent.
func (e *EventPort) GetOne(t *Timespec) (*PortEvent, error) {
	pe := new(portEvent)
	_, err := port_get(e.port, pe, t)
	if err != nil {
		return nil, err
	}
	p := new(PortEvent)
	e.mu.Lock()
	defer e.mu.Unlock()
	err = e.peIntToExt(pe, p)
	if err != nil {
		return nil, err
	}
	return p, nil
}

// peIntToExt converts a cgo portEvent struct into the friendlier PortEvent
// NOTE: Always call this function while holding the e.mu mutex
func (e *EventPort) peIntToExt(peInt *portEvent, peExt *PortEvent) error {
	if e.cookies == nil {
		return fmt.Errorf("this EventPort is already closed")
	}
	peExt.Events = peInt.Events
	peExt.Source = peInt.Source
	fCookie := (*fileObjCookie)(unsafe.Pointer(peInt.User))
	_, found := e.cookies[fCookie]

	if !found {
		panic("unexpected event port address; may be due to kernel bug; see https://go.dev/issue/54254")
	}
	peExt.Cookie = fCookie.cookie
	delete(e.cookies, fCookie)

	switch peInt.Source {
	case PORT_SOURCE_FD:
		peExt.Fd = uintptr(peInt.Object)
		// Only remove the fds entry if it exists and this cookie matches
		if fobj, ok := e.fds[peExt.Fd]; ok {
			if fobj == fCookie {
				delete(e.fds, peExt.Fd)
			}
		}
	case PORT_SOURCE_FILE:
		peExt.fobj = fCookie.fobj
		peExt.Path = BytePtrToString((*byte)(unsafe.Pointer(peExt.fobj.Name)))
		// Only remove the paths entry if it exists and this cookie matches
		if fobj, ok := e.paths[peExt.Path]; ok {
			if fobj == fCookie {
				delete(e.paths, peExt.Path)
			}
		}
	}
	return nil
}

// Pending wraps port_getn(3c) and returns how many events are pending.
func (e *EventPort) Pending() (int, error) {
	var n uint32 = 0
	_, err := port_getn(e.port, nil, 0, &n, nil)
	return int(n), err
}

// Get wraps port_getn(3c) and fills a slice of PortEvent.
// It will block until either min events have been received
// or the timeout has been exceeded. It will return how many
// events were actually received along with any error information.
func (e *EventPort) Get(s []PortEvent, min int, timeout *Timespec) (int, error) {
	if min == 0 {
		return 0, fmt.Errorf("need to request at least one event or use Pending() instead")
	}
	if len(s) < min {
		return 0, fmt.Errorf("len(s) (%d) is less than min events requested (%d)", len(s), min)
	}
	got := uint32(min)
	max := uint32(len(s))
	var err error
	ps := make([]portEvent, max)
	_, err = port_getn(e.port, &ps[0], max, &got, timeout)
	// got will be trustworthy with ETIME, but not any other error.
	if err != nil && err != ETIME {
		return 0, err
	}
	e.mu.Lock()
	defer e.mu.Unlock()
	valid := 0
	for i := 0; i < int(got); i++ {
		err2 := e.peIntToExt(&ps[i], &s[i])
		if err2 != nil {
			if valid == 0 && err == nil {
				// If err2 is the only error and there are no valid events
				// to return, return it to the caller.
				err = err2
			}
			break
		}
		valid = i + 1
	}
	return valid, err
}

//sys	putmsg(fd int, clptr *strbuf, dataptr *strbuf, flags int) (err error)

func Putmsg(fd int, cl []byte, data []byte, flags int) (err error) {
	var clp, datap *strbuf
	if len(cl) > 0 {
		clp = &strbuf{
			Len: int32(len(cl)),
			Buf: (*int8)(unsafe.Pointer(&cl[0])),
		}
	}
	if len(data) > 0 {
		datap = &strbuf{
			Len: int32(len(data)),
			Buf: (*int8)(unsafe.Pointer(&data[0])),
		}
	}
	return putmsg(fd, clp, datap, flags)
}

//sys	getmsg(fd int, clptr *strbuf, dataptr *strbuf, flags *int) (err error)

func Getmsg(fd int, cl []byte, data []byte) (retCl []byte, retData []byte, flags int, err error) {
	var clp, datap *strbuf
	if len(cl) > 0 {
		clp = &strbuf{
			Maxlen: int32(len(cl)),
			Buf:    (*int8)(unsafe.Pointer(&cl[0])),
		}
	}
	if len(data) > 0 {
		datap = &strbuf{
			Maxlen: int32(len(data)),
			Buf:    (*int8)(unsafe.Pointer(&data[0])),
		}
	}

	if err = getmsg(fd, clp, datap, &flags); err != nil {
		return nil, nil, 0, err
	}

	if len(cl) > 0 {
		retCl = cl[:clp.Len]
	}
	if len(data) > 0 {
		retData = data[:datap.Len]
	}
	return retCl, retData, flags, nil
}

func IoctlSetIntRetInt(fd int, req int, arg int) (int, error) {
	return ioctlRet(fd, req, uintptr(arg))
}

func IoctlSetString(fd int, req int, val string) error {
	bs := make([]byte, len(val)+1)
	copy(bs[:len(bs)-1], val)
	err := ioctlPtr(fd, req, unsafe.Pointer(&bs[0]))
	runtime.KeepAlive(&bs[0])
	return err
}

// Lifreq Helpers

func (l *Lifreq) SetName(name string) error {
	if len(name) >= len(l.Name) {
		return fmt.Errorf("name cannot be more than %d characters", len(l.Name)-1)
	}
	for i := range name {
		l.Name[i] = int8(name[i])
	}
	return nil
}

func (l *Lifreq) SetLifruInt(d int) {
	*(*int)(unsafe.Pointer(&l.Lifru[0])) = d
}

func (l *Lifreq) GetLifruInt() int {
	return *(*int)(unsafe.Pointer(&l.Lifru[0]))
}

func (l *Lifreq) SetLifruUint(d uint) {
	*(*uint)(unsafe.Pointer(&l.Lifru[0])) = d
}

func (l *Lifreq) GetLifruUint() uint {
	return *(*uint)(unsafe.Pointer(&l.Lifru[0]))
}

func IoctlLifreq(fd int, req int, l *Lifreq) error {
	return ioctlPtr(fd, req, unsafe.Pointer(l))
}

// Strioctl Helpers

func (s *Strioctl) SetInt(i int) {
	s.Len = int32(unsafe.Sizeof(i))
	s.Dp = (*int8)(unsafe.Pointer(&i))
}

func IoctlSetStrioctlRetInt(fd int, req int, s *Strioctl) (int, error) {
	return ioctlPtrRet(fd, req, unsafe.Pointer(s))
}
 07070100000E15000081A4000000000000000000000001645E367C00000269000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build amd64 && solaris
// +build amd64,solaris

package unix

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: nsec}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: usec}
}

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint64(length)
}

func (msghdr *Msghdr) SetIovlen(length int) {
	msghdr.Iovlen = int32(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint32(length)
}
   07070100000E16000081A4000000000000000000000001645E367C00004102000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_unix.go  // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris

package unix

import (
	"bytes"
	"sort"
	"sync"
	"syscall"
	"unsafe"
)

var (
	Stdin  = 0
	Stdout = 1
	Stderr = 2
)

// Do the interface allocations only once for common
// Errno values.
var (
	errEAGAIN error = syscall.EAGAIN
	errEINVAL error = syscall.EINVAL
	errENOENT error = syscall.ENOENT
)

var (
	signalNameMapOnce sync.Once
	signalNameMap     map[string]syscall.Signal
)

// errnoErr returns common boxed Errno values, to prevent
// allocations at runtime.
func errnoErr(e syscall.Errno) error {
	switch e {
	case 0:
		return nil
	case EAGAIN:
		return errEAGAIN
	case EINVAL:
		return errEINVAL
	case ENOENT:
		return errENOENT
	}
	return e
}

// ErrnoName returns the error name for error number e.
func ErrnoName(e syscall.Errno) string {
	i := sort.Search(len(errorList), func(i int) bool {
		return errorList[i].num >= e
	})
	if i < len(errorList) && errorList[i].num == e {
		return errorList[i].name
	}
	return ""
}

// SignalName returns the signal name for signal number s.
func SignalName(s syscall.Signal) string {
	i := sort.Search(len(signalList), func(i int) bool {
		return signalList[i].num >= s
	})
	if i < len(signalList) && signalList[i].num == s {
		return signalList[i].name
	}
	return ""
}

// SignalNum returns the syscall.Signal for signal named s,
// or 0 if a signal with such name is not found.
// The signal name should start with "SIG".
func SignalNum(s string) syscall.Signal {
	signalNameMapOnce.Do(func() {
		signalNameMap = make(map[string]syscall.Signal, len(signalList))
		for _, signal := range signalList {
			signalNameMap[signal.name] = signal.num
		}
	})
	return signalNameMap[s]
}

// clen returns the index of the first NULL byte in n or len(n) if n contains no NULL byte.
func clen(n []byte) int {
	i := bytes.IndexByte(n, 0)
	if i == -1 {
		i = len(n)
	}
	return i
}

// Mmap manager, for use by operating system-specific implementations.

type mmapper struct {
	sync.Mutex
	active map[*byte][]byte // active mappings; key is last byte in mapping
	mmap   func(addr, length uintptr, prot, flags, fd int, offset int64) (uintptr, error)
	munmap func(addr uintptr, length uintptr) error
}

func (m *mmapper) Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {
	if length <= 0 {
		return nil, EINVAL
	}

	// Map the requested memory.
	addr, errno := m.mmap(0, uintptr(length), prot, flags, fd, offset)
	if errno != nil {
		return nil, errno
	}

	// Use unsafe to convert addr into a []byte.
	b := unsafe.Slice((*byte)(unsafe.Pointer(addr)), length)

	// Register mapping in m and return it.
	p := &b[cap(b)-1]
	m.Lock()
	defer m.Unlock()
	m.active[p] = b
	return b, nil
}

func (m *mmapper) Munmap(data []byte) (err error) {
	if len(data) == 0 || len(data) != cap(data) {
		return EINVAL
	}

	// Find the base of the mapping.
	p := &data[cap(data)-1]
	m.Lock()
	defer m.Unlock()
	b := m.active[p]
	if b == nil || &b[0] != &data[0] {
		return EINVAL
	}

	// Unmap the memory and update m.
	if errno := m.munmap(uintptr(unsafe.Pointer(&b[0])), uintptr(len(b))); errno != nil {
		return errno
	}
	delete(m.active, p)
	return nil
}

func Read(fd int, p []byte) (n int, err error) {
	n, err = read(fd, p)
	if raceenabled {
		if n > 0 {
			raceWriteRange(unsafe.Pointer(&p[0]), n)
		}
		if err == nil {
			raceAcquire(unsafe.Pointer(&ioSync))
		}
	}
	return
}

func Write(fd int, p []byte) (n int, err error) {
	if raceenabled {
		raceReleaseMerge(unsafe.Pointer(&ioSync))
	}
	n, err = write(fd, p)
	if raceenabled && n > 0 {
		raceReadRange(unsafe.Pointer(&p[0]), n)
	}
	return
}

func Pread(fd int, p []byte, offset int64) (n int, err error) {
	n, err = pread(fd, p, offset)
	if raceenabled {
		if n > 0 {
			raceWriteRange(unsafe.Pointer(&p[0]), n)
		}
		if err == nil {
			raceAcquire(unsafe.Pointer(&ioSync))
		}
	}
	return
}

func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
	if raceenabled {
		raceReleaseMerge(unsafe.Pointer(&ioSync))
	}
	n, err = pwrite(fd, p, offset)
	if raceenabled && n > 0 {
		raceReadRange(unsafe.Pointer(&p[0]), n)
	}
	return
}

// For testing: clients can set this flag to force
// creation of IPv6 sockets to return EAFNOSUPPORT.
var SocketDisableIPv6 bool

// Sockaddr represents a socket address.
type Sockaddr interface {
	sockaddr() (ptr unsafe.Pointer, len _Socklen, err error) // lowercase; only we can define Sockaddrs
}

// SockaddrInet4 implements the Sockaddr interface for AF_INET type sockets.
type SockaddrInet4 struct {
	Port int
	Addr [4]byte
	raw  RawSockaddrInet4
}

// SockaddrInet6 implements the Sockaddr interface for AF_INET6 type sockets.
type SockaddrInet6 struct {
	Port   int
	ZoneId uint32
	Addr   [16]byte
	raw    RawSockaddrInet6
}

// SockaddrUnix implements the Sockaddr interface for AF_UNIX type sockets.
type SockaddrUnix struct {
	Name string
	raw  RawSockaddrUnix
}

func Bind(fd int, sa Sockaddr) (err error) {
	ptr, n, err := sa.sockaddr()
	if err != nil {
		return err
	}
	return bind(fd, ptr, n)
}

func Connect(fd int, sa Sockaddr) (err error) {
	ptr, n, err := sa.sockaddr()
	if err != nil {
		return err
	}
	return connect(fd, ptr, n)
}

func Getpeername(fd int) (sa Sockaddr, err error) {
	var rsa RawSockaddrAny
	var len _Socklen = SizeofSockaddrAny
	if err = getpeername(fd, &rsa, &len); err != nil {
		return
	}
	return anyToSockaddr(fd, &rsa)
}

func GetsockoptByte(fd, level, opt int) (value byte, err error) {
	var n byte
	vallen := _Socklen(1)
	err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen)
	return n, err
}

func GetsockoptInt(fd, level, opt int) (value int, err error) {
	var n int32
	vallen := _Socklen(4)
	err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen)
	return int(n), err
}

func GetsockoptInet4Addr(fd, level, opt int) (value [4]byte, err error) {
	vallen := _Socklen(4)
	err = getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen)
	return value, err
}

func GetsockoptIPMreq(fd, level, opt int) (*IPMreq, error) {
	var value IPMreq
	vallen := _Socklen(SizeofIPMreq)
	err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
	return &value, err
}

func GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, error) {
	var value IPv6Mreq
	vallen := _Socklen(SizeofIPv6Mreq)
	err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
	return &value, err
}

func GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) {
	var value IPv6MTUInfo
	vallen := _Socklen(SizeofIPv6MTUInfo)
	err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
	return &value, err
}

func GetsockoptICMPv6Filter(fd, level, opt int) (*ICMPv6Filter, error) {
	var value ICMPv6Filter
	vallen := _Socklen(SizeofICMPv6Filter)
	err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
	return &value, err
}

func GetsockoptLinger(fd, level, opt int) (*Linger, error) {
	var linger Linger
	vallen := _Socklen(SizeofLinger)
	err := getsockopt(fd, level, opt, unsafe.Pointer(&linger), &vallen)
	return &linger, err
}

func GetsockoptTimeval(fd, level, opt int) (*Timeval, error) {
	var tv Timeval
	vallen := _Socklen(unsafe.Sizeof(tv))
	err := getsockopt(fd, level, opt, unsafe.Pointer(&tv), &vallen)
	return &tv, err
}

func GetsockoptUint64(fd, level, opt int) (value uint64, err error) {
	var n uint64
	vallen := _Socklen(8)
	err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen)
	return n, err
}

func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) {
	var rsa RawSockaddrAny
	var len _Socklen = SizeofSockaddrAny
	if n, err = recvfrom(fd, p, flags, &rsa, &len); err != nil {
		return
	}
	if rsa.Addr.Family != AF_UNSPEC {
		from, err = anyToSockaddr(fd, &rsa)
	}
	return
}

// Recvmsg receives a message from a socket using the recvmsg system call. The
// received non-control data will be written to p, and any "out of band"
// control data will be written to oob. The flags are passed to recvmsg.
//
// The results are:
//   - n is the number of non-control data bytes read into p
//   - oobn is the number of control data bytes read into oob; this may be interpreted using [ParseSocketControlMessage]
//   - recvflags is flags returned by recvmsg
//   - from is the address of the sender
//
// If the underlying socket type is not SOCK_DGRAM, a received message
// containing oob data and a single '\0' of non-control data is treated as if
// the message contained only control data, i.e. n will be zero on return.
func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {
	var iov [1]Iovec
	if len(p) > 0 {
		iov[0].Base = &p[0]
		iov[0].SetLen(len(p))
	}
	var rsa RawSockaddrAny
	n, oobn, recvflags, err = recvmsgRaw(fd, iov[:], oob, flags, &rsa)
	// source address is only specified if the socket is unconnected
	if rsa.Addr.Family != AF_UNSPEC {
		from, err = anyToSockaddr(fd, &rsa)
	}
	return
}

// RecvmsgBuffers receives a message from a socket using the recvmsg system
// call. This function is equivalent to Recvmsg, but non-control data read is
// scattered into the buffers slices.
func RecvmsgBuffers(fd int, buffers [][]byte, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {
	iov := make([]Iovec, len(buffers))
	for i := range buffers {
		if len(buffers[i]) > 0 {
			iov[i].Base = &buffers[i][0]
			iov[i].SetLen(len(buffers[i]))
		} else {
			iov[i].Base = (*byte)(unsafe.Pointer(&_zero))
		}
	}
	var rsa RawSockaddrAny
	n, oobn, recvflags, err = recvmsgRaw(fd, iov, oob, flags, &rsa)
	if err == nil && rsa.Addr.Family != AF_UNSPEC {
		from, err = anyToSockaddr(fd, &rsa)
	}
	return
}

// Sendmsg sends a message on a socket to an address using the sendmsg system
// call. This function is equivalent to SendmsgN, but does not return the
// number of bytes actually sent.
func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) {
	_, err = SendmsgN(fd, p, oob, to, flags)
	return
}

// SendmsgN sends a message on a socket to an address using the sendmsg system
// call. p contains the non-control data to send, and oob contains the "out of
// band" control data. The flags are passed to sendmsg. The number of
// non-control bytes actually written to the socket is returned.
//
// Some socket types do not support sending control data without accompanying
// non-control data. If p is empty, and oob contains control data, and the
// underlying socket type is not SOCK_DGRAM, p will be treated as containing a
// single '\0' and the return value will indicate zero bytes sent.
//
// The Go function Recvmsg, if called with an empty p and a non-empty oob,
// will read and ignore this additional '\0'.  If the message is received by
// code that does not use Recvmsg, or that does not use Go at all, that code
// will need to be written to expect and ignore the additional '\0'.
//
// If you need to send non-empty oob with p actually empty, and if the
// underlying socket type supports it, you can do so via a raw system call as
// follows:
//
//	msg := &unix.Msghdr{
//	    Control: &oob[0],
//	}
//	msg.SetControllen(len(oob))
//	n, _, errno := unix.Syscall(unix.SYS_SENDMSG, uintptr(fd), uintptr(unsafe.Pointer(msg)), flags)
func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) {
	var iov [1]Iovec
	if len(p) > 0 {
		iov[0].Base = &p[0]
		iov[0].SetLen(len(p))
	}
	var ptr unsafe.Pointer
	var salen _Socklen
	if to != nil {
		ptr, salen, err = to.sockaddr()
		if err != nil {
			return 0, err
		}
	}
	return sendmsgN(fd, iov[:], oob, ptr, salen, flags)
}

// SendmsgBuffers sends a message on a socket to an address using the sendmsg
// system call. This function is equivalent to SendmsgN, but the non-control
// data is gathered from buffers.
func SendmsgBuffers(fd int, buffers [][]byte, oob []byte, to Sockaddr, flags int) (n int, err error) {
	iov := make([]Iovec, len(buffers))
	for i := range buffers {
		if len(buffers[i]) > 0 {
			iov[i].Base = &buffers[i][0]
			iov[i].SetLen(len(buffers[i]))
		} else {
			iov[i].Base = (*byte)(unsafe.Pointer(&_zero))
		}
	}
	var ptr unsafe.Pointer
	var salen _Socklen
	if to != nil {
		ptr, salen, err = to.sockaddr()
		if err != nil {
			return 0, err
		}
	}
	return sendmsgN(fd, iov, oob, ptr, salen, flags)
}

func Send(s int, buf []byte, flags int) (err error) {
	return sendto(s, buf, flags, nil, 0)
}

func Sendto(fd int, p []byte, flags int, to Sockaddr) (err error) {
	var ptr unsafe.Pointer
	var salen _Socklen
	if to != nil {
		ptr, salen, err = to.sockaddr()
		if err != nil {
			return err
		}
	}
	return sendto(fd, p, flags, ptr, salen)
}

func SetsockoptByte(fd, level, opt int, value byte) (err error) {
	return setsockopt(fd, level, opt, unsafe.Pointer(&value), 1)
}

func SetsockoptInt(fd, level, opt int, value int) (err error) {
	var n = int32(value)
	return setsockopt(fd, level, opt, unsafe.Pointer(&n), 4)
}

func SetsockoptInet4Addr(fd, level, opt int, value [4]byte) (err error) {
	return setsockopt(fd, level, opt, unsafe.Pointer(&value[0]), 4)
}

func SetsockoptIPMreq(fd, level, opt int, mreq *IPMreq) (err error) {
	return setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPMreq)
}

func SetsockoptIPv6Mreq(fd, level, opt int, mreq *IPv6Mreq) (err error) {
	return setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPv6Mreq)
}

func SetsockoptICMPv6Filter(fd, level, opt int, filter *ICMPv6Filter) error {
	return setsockopt(fd, level, opt, unsafe.Pointer(filter), SizeofICMPv6Filter)
}

func SetsockoptLinger(fd, level, opt int, l *Linger) (err error) {
	return setsockopt(fd, level, opt, unsafe.Pointer(l), SizeofLinger)
}

func SetsockoptString(fd, level, opt int, s string) (err error) {
	var p unsafe.Pointer
	if len(s) > 0 {
		p = unsafe.Pointer(&[]byte(s)[0])
	}
	return setsockopt(fd, level, opt, p, uintptr(len(s)))
}

func SetsockoptTimeval(fd, level, opt int, tv *Timeval) (err error) {
	return setsockopt(fd, level, opt, unsafe.Pointer(tv), unsafe.Sizeof(*tv))
}

func SetsockoptUint64(fd, level, opt int, value uint64) (err error) {
	return setsockopt(fd, level, opt, unsafe.Pointer(&value), 8)
}

func Socket(domain, typ, proto int) (fd int, err error) {
	if domain == AF_INET6 && SocketDisableIPv6 {
		return -1, EAFNOSUPPORT
	}
	fd, err = socket(domain, typ, proto)
	return
}

func Socketpair(domain, typ, proto int) (fd [2]int, err error) {
	var fdx [2]int32
	err = socketpair(domain, typ, proto, &fdx)
	if err == nil {
		fd[0] = int(fdx[0])
		fd[1] = int(fdx[1])
	}
	return
}

var ioSync int64

func CloseOnExec(fd int) { fcntl(fd, F_SETFD, FD_CLOEXEC) }

func SetNonblock(fd int, nonblocking bool) (err error) {
	flag, err := fcntl(fd, F_GETFL, 0)
	if err != nil {
		return err
	}
	if nonblocking {
		flag |= O_NONBLOCK
	} else {
		flag &= ^O_NONBLOCK
	}
	_, err = fcntl(fd, F_SETFL, flag)
	return err
}

// Exec calls execve(2), which replaces the calling executable in the process
// tree. argv0 should be the full path to an executable ("/bin/ls") and the
// executable name should also be the first argument in argv (["ls", "-l"]).
// envv are the environment variables that should be passed to the new
// process (["USER=go", "PWD=/tmp"]).
func Exec(argv0 string, argv []string, envv []string) error {
	return syscall.Exec(argv0, argv, envv)
}

// Lutimes sets the access and modification times tv on path. If path refers to
// a symlink, it is not dereferenced and the timestamps are set on the symlink.
// If tv is nil, the access and modification times are set to the current time.
// Otherwise tv must contain exactly 2 elements, with access time as the first
// element and modification time as the second element.
func Lutimes(path string, tv []Timeval) error {
	if tv == nil {
		return UtimesNanoAt(AT_FDCWD, path, nil, AT_SYMLINK_NOFOLLOW)
	}
	if len(tv) != 2 {
		return EINVAL
	}
	ts := []Timespec{
		NsecToTimespec(TimevalToNsec(tv[0])),
		NsecToTimespec(TimevalToNsec(tv[1])),
	}
	return UtimesNanoAt(AT_FDCWD, path, ts, AT_SYMLINK_NOFOLLOW)
}

// emptyIovecs reports whether there are no bytes in the slice of Iovec.
func emptyIovecs(iov []Iovec) bool {
	for i := range iov {
		if iov[i].Len > 0 {
			return false
		}
	}
	return true
}

// Setrlimit sets a resource limit.
func Setrlimit(resource int, rlim *Rlimit) error {
	// Just call the syscall version, because as of Go 1.21
	// it will affect starting a new process.
	return syscall.Setrlimit(resource, (*syscall.Rlimit)(rlim))
}
  07070100000E17000081A4000000000000000000000001645E367C000002DD000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_unix_gc.go   // Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build (darwin || dragonfly || freebsd || (linux && !ppc64 && !ppc64le) || netbsd || openbsd || solaris) && gc
// +build darwin dragonfly freebsd linux,!ppc64,!ppc64le netbsd openbsd solaris
// +build gc

package unix

import "syscall"

func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno)
func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)
func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno)
func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)
   07070100000E18000081A4000000000000000000000001645E367C00000347000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go    // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build linux && (ppc64le || ppc64) && gc
// +build linux
// +build ppc64le ppc64
// +build gc

package unix

import "syscall"

func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {
	return syscall.Syscall(trap, a1, a2, a3)
}
func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {
	return syscall.Syscall6(trap, a1, a2, a3, a4, a5, a6)
}
func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {
	return syscall.RawSyscall(trap, a1, a2, a3)
}
func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {
	return syscall.RawSyscall6(trap, a1, a2, a3, a4, a5, a6)
}
 07070100000E19000081A4000000000000000000000001645E367C0000D50E000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build zos && s390x
// +build zos,s390x

package unix

import (
	"bytes"
	"fmt"
	"runtime"
	"sort"
	"strings"
	"sync"
	"syscall"
	"unsafe"
)

const (
	O_CLOEXEC = 0       // Dummy value (not supported).
	AF_LOCAL  = AF_UNIX // AF_LOCAL is an alias for AF_UNIX
)

func syscall_syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
func syscall_rawsyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
func syscall_syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
func syscall_rawsyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
func syscall_syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno)
func syscall_rawsyscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno)

func copyStat(stat *Stat_t, statLE *Stat_LE_t) {
	stat.Dev = uint64(statLE.Dev)
	stat.Ino = uint64(statLE.Ino)
	stat.Nlink = uint64(statLE.Nlink)
	stat.Mode = uint32(statLE.Mode)
	stat.Uid = uint32(statLE.Uid)
	stat.Gid = uint32(statLE.Gid)
	stat.Rdev = uint64(statLE.Rdev)
	stat.Size = statLE.Size
	stat.Atim.Sec = int64(statLE.Atim)
	stat.Atim.Nsec = 0 //zos doesn't return nanoseconds
	stat.Mtim.Sec = int64(statLE.Mtim)
	stat.Mtim.Nsec = 0 //zos doesn't return nanoseconds
	stat.Ctim.Sec = int64(statLE.Ctim)
	stat.Ctim.Nsec = 0 //zos doesn't return nanoseconds
	stat.Blksize = int64(statLE.Blksize)
	stat.Blocks = statLE.Blocks
}

func svcCall(fnptr unsafe.Pointer, argv *unsafe.Pointer, dsa *uint64)
func svcLoad(name *byte) unsafe.Pointer
func svcUnload(name *byte, fnptr unsafe.Pointer) int64

func (d *Dirent) NameString() string {
	if d == nil {
		return ""
	}
	s := string(d.Name[:])
	idx := strings.IndexByte(s, 0)
	if idx == -1 {
		return s
	} else {
		return s[:idx]
	}
}

func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {
	if sa.Port < 0 || sa.Port > 0xFFFF {
		return nil, 0, EINVAL
	}
	sa.raw.Len = SizeofSockaddrInet4
	sa.raw.Family = AF_INET
	p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
	p[0] = byte(sa.Port >> 8)
	p[1] = byte(sa.Port)
	sa.raw.Addr = sa.Addr
	return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil
}

func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {
	if sa.Port < 0 || sa.Port > 0xFFFF {
		return nil, 0, EINVAL
	}
	sa.raw.Len = SizeofSockaddrInet6
	sa.raw.Family = AF_INET6
	p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
	p[0] = byte(sa.Port >> 8)
	p[1] = byte(sa.Port)
	sa.raw.Scope_id = sa.ZoneId
	sa.raw.Addr = sa.Addr
	return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil
}

func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {
	name := sa.Name
	n := len(name)
	if n >= len(sa.raw.Path) || n == 0 {
		return nil, 0, EINVAL
	}
	sa.raw.Len = byte(3 + n) // 2 for Family, Len; 1 for NUL
	sa.raw.Family = AF_UNIX
	for i := 0; i < n; i++ {
		sa.raw.Path[i] = int8(name[i])
	}
	return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil
}

func anyToSockaddr(_ int, rsa *RawSockaddrAny) (Sockaddr, error) {
	// TODO(neeilan): Implement use of first param (fd)
	switch rsa.Addr.Family {
	case AF_UNIX:
		pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))
		sa := new(SockaddrUnix)
		// For z/OS, only replace NUL with @ when the
		// length is not zero.
		if pp.Len != 0 && pp.Path[0] == 0 {
			// "Abstract" Unix domain socket.
			// Rewrite leading NUL as @ for textual display.
			// (This is the standard convention.)
			// Not friendly to overwrite in place,
			// but the callers below don't care.
			pp.Path[0] = '@'
		}

		// Assume path ends at NUL.
		//
		// For z/OS, the length of the name is a field
		// in the structure. To be on the safe side, we
		// will still scan the name for a NUL but only
		// to the length provided in the structure.
		//
		// This is not technically the Linux semantics for
		// abstract Unix domain sockets--they are supposed
		// to be uninterpreted fixed-size binary blobs--but
		// everyone uses this convention.
		n := 0
		for n < int(pp.Len) && pp.Path[n] != 0 {
			n++
		}
		sa.Name = string(unsafe.Slice((*byte)(unsafe.Pointer(&pp.Path[0])), n))
		return sa, nil

	case AF_INET:
		pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))
		sa := new(SockaddrInet4)
		p := (*[2]byte)(unsafe.Pointer(&pp.Port))
		sa.Port = int(p[0])<<8 + int(p[1])
		sa.Addr = pp.Addr
		return sa, nil

	case AF_INET6:
		pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))
		sa := new(SockaddrInet6)
		p := (*[2]byte)(unsafe.Pointer(&pp.Port))
		sa.Port = int(p[0])<<8 + int(p[1])
		sa.ZoneId = pp.Scope_id
		sa.Addr = pp.Addr
		return sa, nil
	}
	return nil, EAFNOSUPPORT
}

func Accept(fd int) (nfd int, sa Sockaddr, err error) {
	var rsa RawSockaddrAny
	var len _Socklen = SizeofSockaddrAny
	nfd, err = accept(fd, &rsa, &len)
	if err != nil {
		return
	}
	// TODO(neeilan): Remove 0 in call
	sa, err = anyToSockaddr(0, &rsa)
	if err != nil {
		Close(nfd)
		nfd = 0
	}
	return
}

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint64(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = int32(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = int32(length)
}

//sys   fcntl(fd int, cmd int, arg int) (val int, err error)
//sys	read(fd int, p []byte) (n int, err error)
//sys   readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ
//sys	write(fd int, p []byte) (n int, err error)

//sys	accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) = SYS___ACCEPT_A
//sys	bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = SYS___BIND_A
//sys	connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = SYS___CONNECT_A
//sysnb	getgroups(n int, list *_Gid_t) (nn int, err error)
//sysnb	setgroups(n int, list *_Gid_t) (err error)
//sys	getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
//sys	setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
//sysnb	socket(domain int, typ int, proto int) (fd int, err error)
//sysnb	socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
//sysnb	getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = SYS___GETPEERNAME_A
//sysnb	getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = SYS___GETSOCKNAME_A
//sys	recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) = SYS___RECVFROM_A
//sys	sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) = SYS___SENDTO_A
//sys	recvmsg(s int, msg *Msghdr, flags int) (n int, err error) = SYS___RECVMSG_A
//sys	sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = SYS___SENDMSG_A
//sys   mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) = SYS_MMAP
//sys   munmap(addr uintptr, length uintptr) (err error) = SYS_MUNMAP
//sys   ioctl(fd int, req int, arg uintptr) (err error) = SYS_IOCTL
//sys   ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) = SYS_IOCTL

//sys   Access(path string, mode uint32) (err error) = SYS___ACCESS_A
//sys   Chdir(path string) (err error) = SYS___CHDIR_A
//sys	Chown(path string, uid int, gid int) (err error) = SYS___CHOWN_A
//sys	Chmod(path string, mode uint32) (err error) = SYS___CHMOD_A
//sys   Creat(path string, mode uint32) (fd int, err error) = SYS___CREAT_A
//sys	Dup(oldfd int) (fd int, err error)
//sys	Dup2(oldfd int, newfd int) (err error)
//sys	Errno2() (er2 int) = SYS___ERRNO2
//sys	Err2ad() (eadd *int) = SYS___ERR2AD
//sys	Exit(code int)
//sys	Fchdir(fd int) (err error)
//sys	Fchmod(fd int, mode uint32) (err error)
//sys	Fchown(fd int, uid int, gid int) (err error)
//sys	FcntlInt(fd uintptr, cmd int, arg int) (retval int, err error) = SYS_FCNTL
//sys	fstat(fd int, stat *Stat_LE_t) (err error)

func Fstat(fd int, stat *Stat_t) (err error) {
	var statLE Stat_LE_t
	err = fstat(fd, &statLE)
	copyStat(stat, &statLE)
	return
}

//sys	Fstatvfs(fd int, stat *Statvfs_t) (err error) = SYS_FSTATVFS
//sys	Fsync(fd int) (err error)
//sys	Ftruncate(fd int, length int64) (err error)
//sys   Getpagesize() (pgsize int) = SYS_GETPAGESIZE
//sys   Mprotect(b []byte, prot int) (err error) = SYS_MPROTECT
//sys   Msync(b []byte, flags int) (err error) = SYS_MSYNC
//sys   Poll(fds []PollFd, timeout int) (n int, err error) = SYS_POLL
//sys   Times(tms *Tms) (ticks uintptr, err error) = SYS_TIMES
//sys   W_Getmntent(buff *byte, size int) (lastsys int, err error) = SYS_W_GETMNTENT
//sys   W_Getmntent_A(buff *byte, size int) (lastsys int, err error) = SYS___W_GETMNTENT_A

//sys   mount_LE(path string, filesystem string, fstype string, mtm uint32, parmlen int32, parm string) (err error) = SYS___MOUNT_A
//sys   unmount(filesystem string, mtm int) (err error) = SYS___UMOUNT_A
//sys   Chroot(path string) (err error) = SYS___CHROOT_A
//sys   Select(nmsgsfds int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (ret int, err error) = SYS_SELECT
//sysnb Uname(buf *Utsname) (err error) = SYS___UNAME_A

func Ptsname(fd int) (name string, err error) {
	r0, _, e1 := syscall_syscall(SYS___PTSNAME_A, uintptr(fd), 0, 0)
	name = u2s(unsafe.Pointer(r0))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

func u2s(cstr unsafe.Pointer) string {
	str := (*[1024]uint8)(cstr)
	i := 0
	for str[i] != 0 {
		i++
	}
	return string(str[:i])
}

func Close(fd int) (err error) {
	_, _, e1 := syscall_syscall(SYS_CLOSE, uintptr(fd), 0, 0)
	for i := 0; e1 == EAGAIN && i < 10; i++ {
		_, _, _ = syscall_syscall(SYS_USLEEP, uintptr(10), 0, 0)
		_, _, e1 = syscall_syscall(SYS_CLOSE, uintptr(fd), 0, 0)
	}
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var mapper = &mmapper{
	active: make(map[*byte][]byte),
	mmap:   mmap,
	munmap: munmap,
}

// Dummy function: there are no semantics for Madvise on z/OS
func Madvise(b []byte, advice int) (err error) {
	return
}

func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {
	return mapper.Mmap(fd, offset, length, prot, flags)
}

func Munmap(b []byte) (err error) {
	return mapper.Munmap(b)
}

//sys   Gethostname(buf []byte) (err error) = SYS___GETHOSTNAME_A
//sysnb	Getegid() (egid int)
//sysnb	Geteuid() (uid int)
//sysnb	Getgid() (gid int)
//sysnb	Getpid() (pid int)
//sysnb	Getpgid(pid int) (pgid int, err error) = SYS_GETPGID

func Getpgrp() (pid int) {
	pid, _ = Getpgid(0)
	return
}

//sysnb	Getppid() (pid int)
//sys	Getpriority(which int, who int) (prio int, err error)
//sysnb	Getrlimit(resource int, rlim *Rlimit) (err error) = SYS_GETRLIMIT

//sysnb getrusage(who int, rusage *rusage_zos) (err error) = SYS_GETRUSAGE

func Getrusage(who int, rusage *Rusage) (err error) {
	var ruz rusage_zos
	err = getrusage(who, &ruz)
	//Only the first two fields of Rusage are set
	rusage.Utime.Sec = ruz.Utime.Sec
	rusage.Utime.Usec = int64(ruz.Utime.Usec)
	rusage.Stime.Sec = ruz.Stime.Sec
	rusage.Stime.Usec = int64(ruz.Stime.Usec)
	return
}

//sysnb Getsid(pid int) (sid int, err error) = SYS_GETSID
//sysnb	Getuid() (uid int)
//sysnb	Kill(pid int, sig Signal) (err error)
//sys	Lchown(path string, uid int, gid int) (err error) = SYS___LCHOWN_A
//sys	Link(path string, link string) (err error) = SYS___LINK_A
//sys	Listen(s int, n int) (err error)
//sys	lstat(path string, stat *Stat_LE_t) (err error) = SYS___LSTAT_A

func Lstat(path string, stat *Stat_t) (err error) {
	var statLE Stat_LE_t
	err = lstat(path, &statLE)
	copyStat(stat, &statLE)
	return
}

//sys	Mkdir(path string, mode uint32) (err error) = SYS___MKDIR_A
//sys   Mkfifo(path string, mode uint32) (err error) = SYS___MKFIFO_A
//sys	Mknod(path string, mode uint32, dev int) (err error) = SYS___MKNOD_A
//sys	Pread(fd int, p []byte, offset int64) (n int, err error)
//sys	Pwrite(fd int, p []byte, offset int64) (n int, err error)
//sys	Readlink(path string, buf []byte) (n int, err error) = SYS___READLINK_A
//sys	Rename(from string, to string) (err error) = SYS___RENAME_A
//sys	Rmdir(path string) (err error) = SYS___RMDIR_A
//sys   Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
//sys	Setpriority(which int, who int, prio int) (err error)
//sysnb	Setpgid(pid int, pgid int) (err error) = SYS_SETPGID
//sysnb	Setrlimit(resource int, lim *Rlimit) (err error)
//sysnb	Setregid(rgid int, egid int) (err error) = SYS_SETREGID
//sysnb	Setreuid(ruid int, euid int) (err error) = SYS_SETREUID
//sysnb	Setsid() (pid int, err error) = SYS_SETSID
//sys	Setuid(uid int) (err error) = SYS_SETUID
//sys	Setgid(uid int) (err error) = SYS_SETGID
//sys	Shutdown(fd int, how int) (err error)
//sys	stat(path string, statLE *Stat_LE_t) (err error) = SYS___STAT_A

func Stat(path string, sta *Stat_t) (err error) {
	var statLE Stat_LE_t
	err = stat(path, &statLE)
	copyStat(sta, &statLE)
	return
}

//sys	Symlink(path string, link string) (err error) = SYS___SYMLINK_A
//sys	Sync() = SYS_SYNC
//sys	Truncate(path string, length int64) (err error) = SYS___TRUNCATE_A
//sys	Tcgetattr(fildes int, termptr *Termios) (err error) = SYS_TCGETATTR
//sys	Tcsetattr(fildes int, when int, termptr *Termios) (err error) = SYS_TCSETATTR
//sys	Umask(mask int) (oldmask int)
//sys	Unlink(path string) (err error) = SYS___UNLINK_A
//sys	Utime(path string, utim *Utimbuf) (err error) = SYS___UTIME_A

//sys	open(path string, mode int, perm uint32) (fd int, err error) = SYS___OPEN_A

func Open(path string, mode int, perm uint32) (fd int, err error) {
	return open(path, mode, perm)
}

func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
	wd, err := Getwd()
	if err != nil {
		return err
	}

	if err := Fchdir(dirfd); err != nil {
		return err
	}
	defer Chdir(wd)

	return Mkfifo(path, mode)
}

//sys	remove(path string) (err error)

func Remove(path string) error {
	return remove(path)
}

const ImplementsGetwd = true

func Getcwd(buf []byte) (n int, err error) {
	var p unsafe.Pointer
	if len(buf) > 0 {
		p = unsafe.Pointer(&buf[0])
	} else {
		p = unsafe.Pointer(&_zero)
	}
	_, _, e := syscall_syscall(SYS___GETCWD_A, uintptr(p), uintptr(len(buf)), 0)
	n = clen(buf) + 1
	if e != 0 {
		err = errnoErr(e)
	}
	return
}

func Getwd() (wd string, err error) {
	var buf [PathMax]byte
	n, err := Getcwd(buf[0:])
	if err != nil {
		return "", err
	}
	// Getcwd returns the number of bytes written to buf, including the NUL.
	if n < 1 || n > len(buf) || buf[n-1] != 0 {
		return "", EINVAL
	}
	return string(buf[0 : n-1]), nil
}

func Getgroups() (gids []int, err error) {
	n, err := getgroups(0, nil)
	if err != nil {
		return nil, err
	}
	if n == 0 {
		return nil, nil
	}

	// Sanity check group count.  Max is 1<<16 on Linux.
	if n < 0 || n > 1<<20 {
		return nil, EINVAL
	}

	a := make([]_Gid_t, n)
	n, err = getgroups(n, &a[0])
	if err != nil {
		return nil, err
	}
	gids = make([]int, n)
	for i, v := range a[0:n] {
		gids[i] = int(v)
	}
	return
}

func Setgroups(gids []int) (err error) {
	if len(gids) == 0 {
		return setgroups(0, nil)
	}

	a := make([]_Gid_t, len(gids))
	for i, v := range gids {
		a[i] = _Gid_t(v)
	}
	return setgroups(len(a), &a[0])
}

func gettid() uint64

func Gettid() (tid int) {
	return int(gettid())
}

type WaitStatus uint32

// Wait status is 7 bits at bottom, either 0 (exited),
// 0x7F (stopped), or a signal number that caused an exit.
// The 0x80 bit is whether there was a core dump.
// An extra number (exit code, signal causing a stop)
// is in the high bits.  At least that's the idea.
// There are various irregularities.  For example, the
// "continued" status is 0xFFFF, distinguishing itself
// from stopped via the core dump bit.

const (
	mask    = 0x7F
	core    = 0x80
	exited  = 0x00
	stopped = 0x7F
	shift   = 8
)

func (w WaitStatus) Exited() bool { return w&mask == exited }

func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != exited }

func (w WaitStatus) Stopped() bool { return w&0xFF == stopped }

func (w WaitStatus) Continued() bool { return w == 0xFFFF }

func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 }

func (w WaitStatus) ExitStatus() int {
	if !w.Exited() {
		return -1
	}
	return int(w>>shift) & 0xFF
}

func (w WaitStatus) Signal() Signal {
	if !w.Signaled() {
		return -1
	}
	return Signal(w & mask)
}

func (w WaitStatus) StopSignal() Signal {
	if !w.Stopped() {
		return -1
	}
	return Signal(w>>shift) & 0xFF
}

func (w WaitStatus) TrapCause() int { return -1 }

//sys	waitpid(pid int, wstatus *_C_int, options int) (wpid int, err error)

func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {
	// TODO(mundaym): z/OS doesn't have wait4. I don't think getrusage does what we want.
	// At the moment rusage will not be touched.
	var status _C_int
	wpid, err = waitpid(pid, &status, options)
	if wstatus != nil {
		*wstatus = WaitStatus(status)
	}
	return
}

//sysnb	gettimeofday(tv *timeval_zos) (err error)

func Gettimeofday(tv *Timeval) (err error) {
	var tvz timeval_zos
	err = gettimeofday(&tvz)
	tv.Sec = tvz.Sec
	tv.Usec = int64(tvz.Usec)
	return
}

func Time(t *Time_t) (tt Time_t, err error) {
	var tv Timeval
	err = Gettimeofday(&tv)
	if err != nil {
		return 0, err
	}
	if t != nil {
		*t = Time_t(tv.Sec)
	}
	return Time_t(tv.Sec), nil
}

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: nsec}
}

func setTimeval(sec, usec int64) Timeval { //fix
	return Timeval{Sec: sec, Usec: usec}
}

//sysnb pipe(p *[2]_C_int) (err error)

func Pipe(p []int) (err error) {
	if len(p) != 2 {
		return EINVAL
	}
	var pp [2]_C_int
	err = pipe(&pp)
	if err == nil {
		p[0] = int(pp[0])
		p[1] = int(pp[1])
	}
	return
}

//sys	utimes(path string, timeval *[2]Timeval) (err error) = SYS___UTIMES_A

func Utimes(path string, tv []Timeval) (err error) {
	if len(tv) != 2 {
		return EINVAL
	}
	return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
}

func UtimesNano(path string, ts []Timespec) error {
	if len(ts) != 2 {
		return EINVAL
	}
	// Not as efficient as it could be because Timespec and
	// Timeval have different types in the different OSes
	tv := [2]Timeval{
		NsecToTimeval(TimespecToNsec(ts[0])),
		NsecToTimeval(TimespecToNsec(ts[1])),
	}
	return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
}

func Getsockname(fd int) (sa Sockaddr, err error) {
	var rsa RawSockaddrAny
	var len _Socklen = SizeofSockaddrAny
	if err = getsockname(fd, &rsa, &len); err != nil {
		return
	}
	// TODO(neeilan) : Remove this 0 ( added to get sys/unix compiling on z/OS )
	return anyToSockaddr(0, &rsa)
}

const (
	// identifier constants
	nwmHeaderIdentifier    = 0xd5e6d4c8
	nwmFilterIdentifier    = 0xd5e6d4c6
	nwmTCPConnIdentifier   = 0xd5e6d4c3
	nwmRecHeaderIdentifier = 0xd5e6d4d9
	nwmIPStatsIdentifier   = 0xd5e6d4c9d7e2e340
	nwmIPGStatsIdentifier  = 0xd5e6d4c9d7c7e2e3
	nwmTCPStatsIdentifier  = 0xd5e6d4e3c3d7e2e3
	nwmUDPStatsIdentifier  = 0xd5e6d4e4c4d7e2e3
	nwmICMPGStatsEntry     = 0xd5e6d4c9c3d4d7c7
	nwmICMPTStatsEntry     = 0xd5e6d4c9c3d4d7e3

	// nwmHeader constants
	nwmVersion1   = 1
	nwmVersion2   = 2
	nwmCurrentVer = 2

	nwmTCPConnType     = 1
	nwmGlobalStatsType = 14

	// nwmFilter constants
	nwmFilterLclAddrMask = 0x20000000 // Local address
	nwmFilterSrcAddrMask = 0x20000000 // Source address
	nwmFilterLclPortMask = 0x10000000 // Local port
	nwmFilterSrcPortMask = 0x10000000 // Source port

	// nwmConnEntry constants
	nwmTCPStateClosed   = 1
	nwmTCPStateListen   = 2
	nwmTCPStateSynSent  = 3
	nwmTCPStateSynRcvd  = 4
	nwmTCPStateEstab    = 5
	nwmTCPStateFinWait1 = 6
	nwmTCPStateFinWait2 = 7
	nwmTCPStateClosWait = 8
	nwmTCPStateLastAck  = 9
	nwmTCPStateClosing  = 10
	nwmTCPStateTimeWait = 11
	nwmTCPStateDeletTCB = 12

	// Existing constants on linux
	BPF_TCP_CLOSE        = 1
	BPF_TCP_LISTEN       = 2
	BPF_TCP_SYN_SENT     = 3
	BPF_TCP_SYN_RECV     = 4
	BPF_TCP_ESTABLISHED  = 5
	BPF_TCP_FIN_WAIT1    = 6
	BPF_TCP_FIN_WAIT2    = 7
	BPF_TCP_CLOSE_WAIT   = 8
	BPF_TCP_LAST_ACK     = 9
	BPF_TCP_CLOSING      = 10
	BPF_TCP_TIME_WAIT    = 11
	BPF_TCP_NEW_SYN_RECV = -1
	BPF_TCP_MAX_STATES   = -2
)

type nwmTriplet struct {
	offset uint32
	length uint32
	number uint32
}

type nwmQuadruplet struct {
	offset uint32
	length uint32
	number uint32
	match  uint32
}

type nwmHeader struct {
	ident       uint32
	length      uint32
	version     uint16
	nwmType     uint16
	bytesNeeded uint32
	options     uint32
	_           [16]byte
	inputDesc   nwmTriplet
	outputDesc  nwmQuadruplet
}

type nwmFilter struct {
	ident         uint32
	flags         uint32
	resourceName  [8]byte
	resourceId    uint32
	listenerId    uint32
	local         [28]byte // union of sockaddr4 and sockaddr6
	remote        [28]byte // union of sockaddr4 and sockaddr6
	_             uint16
	_             uint16
	asid          uint16
	_             [2]byte
	tnLuName      [8]byte
	tnMonGrp      uint32
	tnAppl        [8]byte
	applData      [40]byte
	nInterface    [16]byte
	dVipa         [16]byte
	dVipaPfx      uint16
	dVipaPort     uint16
	dVipaFamily   byte
	_             [3]byte
	destXCF       [16]byte
	destXCFPfx    uint16
	destXCFFamily byte
	_             [1]byte
	targIP        [16]byte
	targIPPfx     uint16
	targIPFamily  byte
	_             [1]byte
	_             [20]byte
}

type nwmRecHeader struct {
	ident  uint32
	length uint32
	number byte
	_      [3]byte
}

type nwmTCPStatsEntry struct {
	ident             uint64
	currEstab         uint32
	activeOpened      uint32
	passiveOpened     uint32
	connClosed        uint32
	estabResets       uint32
	attemptFails      uint32
	passiveDrops      uint32
	timeWaitReused    uint32
	inSegs            uint64
	predictAck        uint32
	predictData       uint32
	inDupAck          uint32
	inBadSum          uint32
	inBadLen          uint32
	inShort           uint32
	inDiscOldTime     uint32
	inAllBeforeWin    uint32
	inSomeBeforeWin   uint32
	inAllAfterWin     uint32
	inSomeAfterWin    uint32
	inOutOfOrder      uint32
	inAfterClose      uint32
	inWinProbes       uint32
	inWinUpdates      uint32
	outWinUpdates     uint32
	outSegs           uint64
	outDelayAcks      uint32
	outRsts           uint32
	retransSegs       uint32
	retransTimeouts   uint32
	retransDrops      uint32
	pmtuRetrans       uint32
	pmtuErrors        uint32
	outWinProbes      uint32
	probeDrops        uint32
	keepAliveProbes   uint32
	keepAliveDrops    uint32
	finwait2Drops     uint32
	acceptCount       uint64
	inBulkQSegs       uint64
	inDiscards        uint64
	connFloods        uint32
	connStalls        uint32
	cfgEphemDef       uint16
	ephemInUse        uint16
	ephemHiWater      uint16
	flags             byte
	_                 [1]byte
	ephemExhaust      uint32
	smcRCurrEstabLnks uint32
	smcRLnkActTimeOut uint32
	smcRActLnkOpened  uint32
	smcRPasLnkOpened  uint32
	smcRLnksClosed    uint32
	smcRCurrEstab     uint32
	smcRActiveOpened  uint32
	smcRPassiveOpened uint32
	smcRConnClosed    uint32
	smcRInSegs        uint64
	smcROutSegs       uint64
	smcRInRsts        uint32
	smcROutRsts       uint32
	smcDCurrEstabLnks uint32
	smcDActLnkOpened  uint32
	smcDPasLnkOpened  uint32
	smcDLnksClosed    uint32
	smcDCurrEstab     uint32
	smcDActiveOpened  uint32
	smcDPassiveOpened uint32
	smcDConnClosed    uint32
	smcDInSegs        uint64
	smcDOutSegs       uint64
	smcDInRsts        uint32
	smcDOutRsts       uint32
}

type nwmConnEntry struct {
	ident             uint32
	local             [28]byte // union of sockaddr4 and sockaddr6
	remote            [28]byte // union of sockaddr4 and sockaddr6
	startTime         [8]byte  // uint64, changed to prevent padding from being inserted
	lastActivity      [8]byte  // uint64
	bytesIn           [8]byte  // uint64
	bytesOut          [8]byte  // uint64
	inSegs            [8]byte  // uint64
	outSegs           [8]byte  // uint64
	state             uint16
	activeOpen        byte
	flag01            byte
	outBuffered       uint32
	inBuffered        uint32
	maxSndWnd         uint32
	reXmtCount        uint32
	congestionWnd     uint32
	ssThresh          uint32
	roundTripTime     uint32
	roundTripVar      uint32
	sendMSS           uint32
	sndWnd            uint32
	rcvBufSize        uint32
	sndBufSize        uint32
	outOfOrderCount   uint32
	lcl0WindowCount   uint32
	rmt0WindowCount   uint32
	dupacks           uint32
	flag02            byte
	sockOpt6Cont      byte
	asid              uint16
	resourceName      [8]byte
	resourceId        uint32
	subtask           uint32
	sockOpt           byte
	sockOpt6          byte
	clusterConnFlag   byte
	proto             byte
	targetAppl        [8]byte
	luName            [8]byte
	clientUserId      [8]byte
	logMode           [8]byte
	timeStamp         uint32
	timeStampAge      uint32
	serverResourceId  uint32
	intfName          [16]byte
	ttlsStatPol       byte
	ttlsStatConn      byte
	ttlsSSLProt       uint16
	ttlsNegCiph       [2]byte
	ttlsSecType       byte
	ttlsFIPS140Mode   byte
	ttlsUserID        [8]byte
	applData          [40]byte
	inOldestTime      [8]byte // uint64
	outOldestTime     [8]byte // uint64
	tcpTrustedPartner byte
	_                 [3]byte
	bulkDataIntfName  [16]byte
	ttlsNegCiph4      [4]byte
	smcReason         uint32
	lclSMCLinkId      uint32
	rmtSMCLinkId      uint32
	smcStatus         byte
	smcFlags          byte
	_                 [2]byte
	rcvWnd            uint32
	lclSMCBufSz       uint32
	rmtSMCBufSz       uint32
	ttlsSessID        [32]byte
	ttlsSessIDLen     int16
	_                 [1]byte
	smcDStatus        byte
	smcDReason        uint32
}

var svcNameTable [][]byte = [][]byte{
	[]byte("\xc5\xe9\xc2\xd5\xd4\xc9\xc6\xf4"), // svc_EZBNMIF4
}

const (
	svc_EZBNMIF4 = 0
)

func GetsockoptTCPInfo(fd, level, opt int) (*TCPInfo, error) {
	jobname := []byte("\x5c\x40\x40\x40\x40\x40\x40\x40") // "*"
	responseBuffer := [4096]byte{0}
	var bufferAlet, reasonCode uint32 = 0, 0
	var bufferLen, returnValue, returnCode int32 = 4096, 0, 0

	dsa := [18]uint64{0}
	var argv [7]unsafe.Pointer
	argv[0] = unsafe.Pointer(&jobname[0])
	argv[1] = unsafe.Pointer(&responseBuffer[0])
	argv[2] = unsafe.Pointer(&bufferAlet)
	argv[3] = unsafe.Pointer(&bufferLen)
	argv[4] = unsafe.Pointer(&returnValue)
	argv[5] = unsafe.Pointer(&returnCode)
	argv[6] = unsafe.Pointer(&reasonCode)

	request := (*struct {
		header nwmHeader
		filter nwmFilter
	})(unsafe.Pointer(&responseBuffer[0]))

	EZBNMIF4 := svcLoad(&svcNameTable[svc_EZBNMIF4][0])
	if EZBNMIF4 == nil {
		return nil, errnoErr(EINVAL)
	}

	// GetGlobalStats EZBNMIF4 call
	request.header.ident = nwmHeaderIdentifier
	request.header.length = uint32(unsafe.Sizeof(request.header))
	request.header.version = nwmCurrentVer
	request.header.nwmType = nwmGlobalStatsType
	request.header.options = 0x80000000

	svcCall(EZBNMIF4, &argv[0], &dsa[0])

	// outputDesc field is filled by EZBNMIF4 on success
	if returnCode != 0 || request.header.outputDesc.offset == 0 {
		return nil, errnoErr(EINVAL)
	}

	// Check that EZBNMIF4 returned a nwmRecHeader
	recHeader := (*nwmRecHeader)(unsafe.Pointer(&responseBuffer[request.header.outputDesc.offset]))
	if recHeader.ident != nwmRecHeaderIdentifier {
		return nil, errnoErr(EINVAL)
	}

	// Parse nwmTriplets to get offsets of returned entries
	var sections []*uint64
	var sectionDesc *nwmTriplet = (*nwmTriplet)(unsafe.Pointer(&responseBuffer[0]))
	for i := uint32(0); i < uint32(recHeader.number); i++ {
		offset := request.header.outputDesc.offset + uint32(unsafe.Sizeof(*recHeader)) + i*uint32(unsafe.Sizeof(*sectionDesc))
		sectionDesc = (*nwmTriplet)(unsafe.Pointer(&responseBuffer[offset]))
		for j := uint32(0); j < sectionDesc.number; j++ {
			offset = request.header.outputDesc.offset + sectionDesc.offset + j*sectionDesc.length
			sections = append(sections, (*uint64)(unsafe.Pointer(&responseBuffer[offset])))
		}
	}

	// Find nwmTCPStatsEntry in returned entries
	var tcpStats *nwmTCPStatsEntry = nil
	for _, ptr := range sections {
		switch *ptr {
		case nwmTCPStatsIdentifier:
			if tcpStats != nil {
				return nil, errnoErr(EINVAL)
			}
			tcpStats = (*nwmTCPStatsEntry)(unsafe.Pointer(ptr))
		case nwmIPStatsIdentifier:
		case nwmIPGStatsIdentifier:
		case nwmUDPStatsIdentifier:
		case nwmICMPGStatsEntry:
		case nwmICMPTStatsEntry:
		default:
			return nil, errnoErr(EINVAL)
		}
	}
	if tcpStats == nil {
		return nil, errnoErr(EINVAL)
	}

	// GetConnectionDetail EZBNMIF4 call
	responseBuffer = [4096]byte{0}
	dsa = [18]uint64{0}
	bufferAlet, reasonCode = 0, 0
	bufferLen, returnValue, returnCode = 4096, 0, 0
	nameptr := (*uint32)(unsafe.Pointer(uintptr(0x21c))) // Get jobname of current process
	nameptr = (*uint32)(unsafe.Pointer(uintptr(*nameptr + 12)))
	argv[0] = unsafe.Pointer(uintptr(*nameptr))

	request.header.ident = nwmHeaderIdentifier
	request.header.length = uint32(unsafe.Sizeof(request.header))
	request.header.version = nwmCurrentVer
	request.header.nwmType = nwmTCPConnType
	request.header.options = 0x80000000

	request.filter.ident = nwmFilterIdentifier

	var localSockaddr RawSockaddrAny
	socklen := _Socklen(SizeofSockaddrAny)
	err := getsockname(fd, &localSockaddr, &socklen)
	if err != nil {
		return nil, errnoErr(EINVAL)
	}
	if localSockaddr.Addr.Family == AF_INET {
		localSockaddr := (*RawSockaddrInet4)(unsafe.Pointer(&localSockaddr.Addr))
		localSockFilter := (*RawSockaddrInet4)(unsafe.Pointer(&request.filter.local[0]))
		localSockFilter.Family = AF_INET
		var i int
		for i = 0; i < 4; i++ {
			if localSockaddr.Addr[i] != 0 {
				break
			}
		}
		if i != 4 {
			request.filter.flags |= nwmFilterLclAddrMask
			for i = 0; i < 4; i++ {
				localSockFilter.Addr[i] = localSockaddr.Addr[i]
			}
		}
		if localSockaddr.Port != 0 {
			request.filter.flags |= nwmFilterLclPortMask
			localSockFilter.Port = localSockaddr.Port
		}
	} else if localSockaddr.Addr.Family == AF_INET6 {
		localSockaddr := (*RawSockaddrInet6)(unsafe.Pointer(&localSockaddr.Addr))
		localSockFilter := (*RawSockaddrInet6)(unsafe.Pointer(&request.filter.local[0]))
		localSockFilter.Family = AF_INET6
		var i int
		for i = 0; i < 16; i++ {
			if localSockaddr.Addr[i] != 0 {
				break
			}
		}
		if i != 16 {
			request.filter.flags |= nwmFilterLclAddrMask
			for i = 0; i < 16; i++ {
				localSockFilter.Addr[i] = localSockaddr.Addr[i]
			}
		}
		if localSockaddr.Port != 0 {
			request.filter.flags |= nwmFilterLclPortMask
			localSockFilter.Port = localSockaddr.Port
		}
	}

	svcCall(EZBNMIF4, &argv[0], &dsa[0])

	// outputDesc field is filled by EZBNMIF4 on success
	if returnCode != 0 || request.header.outputDesc.offset == 0 {
		return nil, errnoErr(EINVAL)
	}

	// Check that EZBNMIF4 returned a nwmConnEntry
	conn := (*nwmConnEntry)(unsafe.Pointer(&responseBuffer[request.header.outputDesc.offset]))
	if conn.ident != nwmTCPConnIdentifier {
		return nil, errnoErr(EINVAL)
	}

	// Copy data from the returned data structures into tcpInfo
	// Stats from nwmConnEntry are specific to that connection.
	// Stats from nwmTCPStatsEntry are global (to the interface?)
	// Fields may not be an exact match. Some fields have no equivalent.
	var tcpinfo TCPInfo
	tcpinfo.State = uint8(conn.state)
	tcpinfo.Ca_state = 0 // dummy
	tcpinfo.Retransmits = uint8(tcpStats.retransSegs)
	tcpinfo.Probes = uint8(tcpStats.outWinProbes)
	tcpinfo.Backoff = 0 // dummy
	tcpinfo.Options = 0 // dummy
	tcpinfo.Rto = tcpStats.retransTimeouts
	tcpinfo.Ato = tcpStats.outDelayAcks
	tcpinfo.Snd_mss = conn.sendMSS
	tcpinfo.Rcv_mss = conn.sendMSS // dummy
	tcpinfo.Unacked = 0            // dummy
	tcpinfo.Sacked = 0             // dummy
	tcpinfo.Lost = 0               // dummy
	tcpinfo.Retrans = conn.reXmtCount
	tcpinfo.Fackets = 0 // dummy
	tcpinfo.Last_data_sent = uint32(*(*uint64)(unsafe.Pointer(&conn.lastActivity[0])))
	tcpinfo.Last_ack_sent = uint32(*(*uint64)(unsafe.Pointer(&conn.outOldestTime[0])))
	tcpinfo.Last_data_recv = uint32(*(*uint64)(unsafe.Pointer(&conn.inOldestTime[0])))
	tcpinfo.Last_ack_recv = uint32(*(*uint64)(unsafe.Pointer(&conn.inOldestTime[0])))
	tcpinfo.Pmtu = conn.sendMSS // dummy, NWMIfRouteMtu is a candidate
	tcpinfo.Rcv_ssthresh = conn.ssThresh
	tcpinfo.Rtt = conn.roundTripTime
	tcpinfo.Rttvar = conn.roundTripVar
	tcpinfo.Snd_ssthresh = conn.ssThresh // dummy
	tcpinfo.Snd_cwnd = conn.congestionWnd
	tcpinfo.Advmss = conn.sendMSS        // dummy
	tcpinfo.Reordering = 0               // dummy
	tcpinfo.Rcv_rtt = conn.roundTripTime // dummy
	tcpinfo.Rcv_space = conn.sendMSS     // dummy
	tcpinfo.Total_retrans = conn.reXmtCount

	svcUnload(&svcNameTable[svc_EZBNMIF4][0], EZBNMIF4)

	return &tcpinfo, nil
}

// GetsockoptString returns the string value of the socket option opt for the
// socket associated with fd at the given socket level.
func GetsockoptString(fd, level, opt int) (string, error) {
	buf := make([]byte, 256)
	vallen := _Socklen(len(buf))
	err := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)
	if err != nil {
		return "", err
	}

	return string(buf[:vallen-1]), nil
}

func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {
	var msg Msghdr
	var rsa RawSockaddrAny
	msg.Name = (*byte)(unsafe.Pointer(&rsa))
	msg.Namelen = SizeofSockaddrAny
	var iov Iovec
	if len(p) > 0 {
		iov.Base = (*byte)(unsafe.Pointer(&p[0]))
		iov.SetLen(len(p))
	}
	var dummy byte
	if len(oob) > 0 {
		// receive at least one normal byte
		if len(p) == 0 {
			iov.Base = &dummy
			iov.SetLen(1)
		}
		msg.Control = (*byte)(unsafe.Pointer(&oob[0]))
		msg.SetControllen(len(oob))
	}
	msg.Iov = &iov
	msg.Iovlen = 1
	if n, err = recvmsg(fd, &msg, flags); err != nil {
		return
	}
	oobn = int(msg.Controllen)
	recvflags = int(msg.Flags)
	// source address is only specified if the socket is unconnected
	if rsa.Addr.Family != AF_UNSPEC {
		// TODO(neeilan): Remove 0 arg added to get this compiling on z/OS
		from, err = anyToSockaddr(0, &rsa)
	}
	return
}

func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) {
	_, err = SendmsgN(fd, p, oob, to, flags)
	return
}

func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) {
	var ptr unsafe.Pointer
	var salen _Socklen
	if to != nil {
		var err error
		ptr, salen, err = to.sockaddr()
		if err != nil {
			return 0, err
		}
	}
	var msg Msghdr
	msg.Name = (*byte)(unsafe.Pointer(ptr))
	msg.Namelen = int32(salen)
	var iov Iovec
	if len(p) > 0 {
		iov.Base = (*byte)(unsafe.Pointer(&p[0]))
		iov.SetLen(len(p))
	}
	var dummy byte
	if len(oob) > 0 {
		// send at least one normal byte
		if len(p) == 0 {
			iov.Base = &dummy
			iov.SetLen(1)
		}
		msg.Control = (*byte)(unsafe.Pointer(&oob[0]))
		msg.SetControllen(len(oob))
	}
	msg.Iov = &iov
	msg.Iovlen = 1
	if n, err = sendmsg(fd, &msg, flags); err != nil {
		return 0, err
	}
	if len(oob) > 0 && len(p) == 0 {
		n = 0
	}
	return n, nil
}

func Opendir(name string) (uintptr, error) {
	p, err := BytePtrFromString(name)
	if err != nil {
		return 0, err
	}
	dir, _, e := syscall_syscall(SYS___OPENDIR_A, uintptr(unsafe.Pointer(p)), 0, 0)
	runtime.KeepAlive(unsafe.Pointer(p))
	if e != 0 {
		err = errnoErr(e)
	}
	return dir, err
}

// clearsyscall.Errno resets the errno value to 0.
func clearErrno()

func Readdir(dir uintptr) (*Dirent, error) {
	var ent Dirent
	var res uintptr
	// __readdir_r_a returns errno at the end of the directory stream, rather than 0.
	// Therefore to avoid false positives we clear errno before calling it.

	// TODO(neeilan): Commented this out to get sys/unix compiling on z/OS. Uncomment and fix. Error: "undefined: clearsyscall"
	//clearsyscall.Errno() // TODO(mundaym): check pre-emption rules.

	e, _, _ := syscall_syscall(SYS___READDIR_R_A, dir, uintptr(unsafe.Pointer(&ent)), uintptr(unsafe.Pointer(&res)))
	var err error
	if e != 0 {
		err = errnoErr(Errno(e))
	}
	if res == 0 {
		return nil, err
	}
	return &ent, err
}

func readdir_r(dirp uintptr, entry *direntLE, result **direntLE) (err error) {
	r0, _, e1 := syscall_syscall(SYS___READDIR_R_A, dirp, uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result)))
	if int64(r0) == -1 {
		err = errnoErr(Errno(e1))
	}
	return
}

func Closedir(dir uintptr) error {
	_, _, e := syscall_syscall(SYS_CLOSEDIR, dir, 0, 0)
	if e != 0 {
		return errnoErr(e)
	}
	return nil
}

func Seekdir(dir uintptr, pos int) {
	_, _, _ = syscall_syscall(SYS_SEEKDIR, dir, uintptr(pos), 0)
}

func Telldir(dir uintptr) (int, error) {
	p, _, e := syscall_syscall(SYS_TELLDIR, dir, 0, 0)
	pos := int(p)
	if pos == -1 {
		return pos, errnoErr(e)
	}
	return pos, nil
}

// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.
func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {
	// struct flock is packed on z/OS. We can't emulate that in Go so
	// instead we pack it here.
	var flock [24]byte
	*(*int16)(unsafe.Pointer(&flock[0])) = lk.Type
	*(*int16)(unsafe.Pointer(&flock[2])) = lk.Whence
	*(*int64)(unsafe.Pointer(&flock[4])) = lk.Start
	*(*int64)(unsafe.Pointer(&flock[12])) = lk.Len
	*(*int32)(unsafe.Pointer(&flock[20])) = lk.Pid
	_, _, errno := syscall_syscall(SYS_FCNTL, fd, uintptr(cmd), uintptr(unsafe.Pointer(&flock)))
	lk.Type = *(*int16)(unsafe.Pointer(&flock[0]))
	lk.Whence = *(*int16)(unsafe.Pointer(&flock[2]))
	lk.Start = *(*int64)(unsafe.Pointer(&flock[4]))
	lk.Len = *(*int64)(unsafe.Pointer(&flock[12]))
	lk.Pid = *(*int32)(unsafe.Pointer(&flock[20]))
	if errno == 0 {
		return nil
	}
	return errno
}

func Flock(fd int, how int) error {

	var flock_type int16
	var fcntl_cmd int

	switch how {
	case LOCK_SH | LOCK_NB:
		flock_type = F_RDLCK
		fcntl_cmd = F_SETLK
	case LOCK_EX | LOCK_NB:
		flock_type = F_WRLCK
		fcntl_cmd = F_SETLK
	case LOCK_EX:
		flock_type = F_WRLCK
		fcntl_cmd = F_SETLKW
	case LOCK_UN:
		flock_type = F_UNLCK
		fcntl_cmd = F_SETLKW
	default:
	}

	flock := Flock_t{
		Type:   int16(flock_type),
		Whence: int16(0),
		Start:  int64(0),
		Len:    int64(0),
		Pid:    int32(Getppid()),
	}

	err := FcntlFlock(uintptr(fd), fcntl_cmd, &flock)
	return err
}

func Mlock(b []byte) (err error) {
	_, _, e1 := syscall_syscall(SYS___MLOCKALL, _BPX_NONSWAP, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

func Mlock2(b []byte, flags int) (err error) {
	_, _, e1 := syscall_syscall(SYS___MLOCKALL, _BPX_NONSWAP, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

func Mlockall(flags int) (err error) {
	_, _, e1 := syscall_syscall(SYS___MLOCKALL, _BPX_NONSWAP, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

func Munlock(b []byte) (err error) {
	_, _, e1 := syscall_syscall(SYS___MLOCKALL, _BPX_SWAP, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

func Munlockall() (err error) {
	_, _, e1 := syscall_syscall(SYS___MLOCKALL, _BPX_SWAP, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

func ClockGettime(clockid int32, ts *Timespec) error {

	var ticks_per_sec uint32 = 100 //TODO(kenan): value is currently hardcoded; need sysconf() call otherwise
	var nsec_per_sec int64 = 1000000000

	if ts == nil {
		return EFAULT
	}
	if clockid == CLOCK_REALTIME || clockid == CLOCK_MONOTONIC {
		var nanotime int64 = runtime.Nanotime1()
		ts.Sec = nanotime / nsec_per_sec
		ts.Nsec = nanotime % nsec_per_sec
	} else if clockid == CLOCK_PROCESS_CPUTIME_ID || clockid == CLOCK_THREAD_CPUTIME_ID {
		var tm Tms
		_, err := Times(&tm)
		if err != nil {
			return EFAULT
		}
		ts.Sec = int64(tm.Utime / ticks_per_sec)
		ts.Nsec = int64(tm.Utime) * nsec_per_sec / int64(ticks_per_sec)
	} else {
		return EINVAL
	}
	return nil
}

func Statfs(path string, stat *Statfs_t) (err error) {
	fd, err := open(path, O_RDONLY, 0)
	defer Close(fd)
	if err != nil {
		return err
	}
	return Fstatfs(fd, stat)
}

var (
	Stdin  = 0
	Stdout = 1
	Stderr = 2
)

// Do the interface allocations only once for common
// Errno values.
var (
	errEAGAIN error = syscall.EAGAIN
	errEINVAL error = syscall.EINVAL
	errENOENT error = syscall.ENOENT
)

var (
	signalNameMapOnce sync.Once
	signalNameMap     map[string]syscall.Signal
)

// errnoErr returns common boxed Errno values, to prevent
// allocations at runtime.
func errnoErr(e Errno) error {
	switch e {
	case 0:
		return nil
	case EAGAIN:
		return errEAGAIN
	case EINVAL:
		return errEINVAL
	case ENOENT:
		return errENOENT
	}
	return e
}

// ErrnoName returns the error name for error number e.
func ErrnoName(e Errno) string {
	i := sort.Search(len(errorList), func(i int) bool {
		return errorList[i].num >= e
	})
	if i < len(errorList) && errorList[i].num == e {
		return errorList[i].name
	}
	return ""
}

// SignalName returns the signal name for signal number s.
func SignalName(s syscall.Signal) string {
	i := sort.Search(len(signalList), func(i int) bool {
		return signalList[i].num >= s
	})
	if i < len(signalList) && signalList[i].num == s {
		return signalList[i].name
	}
	return ""
}

// SignalNum returns the syscall.Signal for signal named s,
// or 0 if a signal with such name is not found.
// The signal name should start with "SIG".
func SignalNum(s string) syscall.Signal {
	signalNameMapOnce.Do(func() {
		signalNameMap = make(map[string]syscall.Signal, len(signalList))
		for _, signal := range signalList {
			signalNameMap[signal.name] = signal.num
		}
	})
	return signalNameMap[s]
}

// clen returns the index of the first NULL byte in n or len(n) if n contains no NULL byte.
func clen(n []byte) int {
	i := bytes.IndexByte(n, 0)
	if i == -1 {
		i = len(n)
	}
	return i
}

// Mmap manager, for use by operating system-specific implementations.

type mmapper struct {
	sync.Mutex
	active map[*byte][]byte // active mappings; key is last byte in mapping
	mmap   func(addr, length uintptr, prot, flags, fd int, offset int64) (uintptr, error)
	munmap func(addr uintptr, length uintptr) error
}

func (m *mmapper) Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {
	if length <= 0 {
		return nil, EINVAL
	}

	// Map the requested memory.
	addr, errno := m.mmap(0, uintptr(length), prot, flags, fd, offset)
	if errno != nil {
		return nil, errno
	}

	// Slice memory layout
	var sl = struct {
		addr uintptr
		len  int
		cap  int
	}{addr, length, length}

	// Use unsafe to turn sl into a []byte.
	b := *(*[]byte)(unsafe.Pointer(&sl))

	// Register mapping in m and return it.
	p := &b[cap(b)-1]
	m.Lock()
	defer m.Unlock()
	m.active[p] = b
	return b, nil
}

func (m *mmapper) Munmap(data []byte) (err error) {
	if len(data) == 0 || len(data) != cap(data) {
		return EINVAL
	}

	// Find the base of the mapping.
	p := &data[cap(data)-1]
	m.Lock()
	defer m.Unlock()
	b := m.active[p]
	if b == nil || &b[0] != &data[0] {
		return EINVAL
	}

	// Unmap the memory and update m.
	if errno := m.munmap(uintptr(unsafe.Pointer(&b[0])), uintptr(len(b))); errno != nil {
		return errno
	}
	delete(m.active, p)
	return nil
}

func Read(fd int, p []byte) (n int, err error) {
	n, err = read(fd, p)
	if raceenabled {
		if n > 0 {
			raceWriteRange(unsafe.Pointer(&p[0]), n)
		}
		if err == nil {
			raceAcquire(unsafe.Pointer(&ioSync))
		}
	}
	return
}

func Write(fd int, p []byte) (n int, err error) {
	if raceenabled {
		raceReleaseMerge(unsafe.Pointer(&ioSync))
	}
	n, err = write(fd, p)
	if raceenabled && n > 0 {
		raceReadRange(unsafe.Pointer(&p[0]), n)
	}
	return
}

// For testing: clients can set this flag to force
// creation of IPv6 sockets to return EAFNOSUPPORT.
var SocketDisableIPv6 bool

// Sockaddr represents a socket address.
type Sockaddr interface {
	sockaddr() (ptr unsafe.Pointer, len _Socklen, err error) // lowercase; only we can define Sockaddrs
}

// SockaddrInet4 implements the Sockaddr interface for AF_INET type sockets.
type SockaddrInet4 struct {
	Port int
	Addr [4]byte
	raw  RawSockaddrInet4
}

// SockaddrInet6 implements the Sockaddr interface for AF_INET6 type sockets.
type SockaddrInet6 struct {
	Port   int
	ZoneId uint32
	Addr   [16]byte
	raw    RawSockaddrInet6
}

// SockaddrUnix implements the Sockaddr interface for AF_UNIX type sockets.
type SockaddrUnix struct {
	Name string
	raw  RawSockaddrUnix
}

func Bind(fd int, sa Sockaddr) (err error) {
	ptr, n, err := sa.sockaddr()
	if err != nil {
		return err
	}
	return bind(fd, ptr, n)
}

func Connect(fd int, sa Sockaddr) (err error) {
	ptr, n, err := sa.sockaddr()
	if err != nil {
		return err
	}
	return connect(fd, ptr, n)
}

func Getpeername(fd int) (sa Sockaddr, err error) {
	var rsa RawSockaddrAny
	var len _Socklen = SizeofSockaddrAny
	if err = getpeername(fd, &rsa, &len); err != nil {
		return
	}
	return anyToSockaddr(fd, &rsa)
}

func GetsockoptByte(fd, level, opt int) (value byte, err error) {
	var n byte
	vallen := _Socklen(1)
	err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen)
	return n, err
}

func GetsockoptInt(fd, level, opt int) (value int, err error) {
	var n int32
	vallen := _Socklen(4)
	err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen)
	return int(n), err
}

func GetsockoptInet4Addr(fd, level, opt int) (value [4]byte, err error) {
	vallen := _Socklen(4)
	err = getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen)
	return value, err
}

func GetsockoptIPMreq(fd, level, opt int) (*IPMreq, error) {
	var value IPMreq
	vallen := _Socklen(SizeofIPMreq)
	err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
	return &value, err
}

func GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, error) {
	var value IPv6Mreq
	vallen := _Socklen(SizeofIPv6Mreq)
	err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
	return &value, err
}

func GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) {
	var value IPv6MTUInfo
	vallen := _Socklen(SizeofIPv6MTUInfo)
	err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
	return &value, err
}

func GetsockoptICMPv6Filter(fd, level, opt int) (*ICMPv6Filter, error) {
	var value ICMPv6Filter
	vallen := _Socklen(SizeofICMPv6Filter)
	err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
	return &value, err
}

func GetsockoptLinger(fd, level, opt int) (*Linger, error) {
	var linger Linger
	vallen := _Socklen(SizeofLinger)
	err := getsockopt(fd, level, opt, unsafe.Pointer(&linger), &vallen)
	return &linger, err
}

func GetsockoptTimeval(fd, level, opt int) (*Timeval, error) {
	var tv Timeval
	vallen := _Socklen(unsafe.Sizeof(tv))
	err := getsockopt(fd, level, opt, unsafe.Pointer(&tv), &vallen)
	return &tv, err
}

func GetsockoptUint64(fd, level, opt int) (value uint64, err error) {
	var n uint64
	vallen := _Socklen(8)
	err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen)
	return n, err
}

func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) {
	var rsa RawSockaddrAny
	var len _Socklen = SizeofSockaddrAny
	if n, err = recvfrom(fd, p, flags, &rsa, &len); err != nil {
		return
	}
	if rsa.Addr.Family != AF_UNSPEC {
		from, err = anyToSockaddr(fd, &rsa)
	}
	return
}

func Sendto(fd int, p []byte, flags int, to Sockaddr) (err error) {
	ptr, n, err := to.sockaddr()
	if err != nil {
		return err
	}
	return sendto(fd, p, flags, ptr, n)
}

func SetsockoptByte(fd, level, opt int, value byte) (err error) {
	return setsockopt(fd, level, opt, unsafe.Pointer(&value), 1)
}

func SetsockoptInt(fd, level, opt int, value int) (err error) {
	var n = int32(value)
	return setsockopt(fd, level, opt, unsafe.Pointer(&n), 4)
}

func SetsockoptInet4Addr(fd, level, opt int, value [4]byte) (err error) {
	return setsockopt(fd, level, opt, unsafe.Pointer(&value[0]), 4)
}

func SetsockoptIPMreq(fd, level, opt int, mreq *IPMreq) (err error) {
	return setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPMreq)
}

func SetsockoptIPv6Mreq(fd, level, opt int, mreq *IPv6Mreq) (err error) {
	return setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPv6Mreq)
}

func SetsockoptICMPv6Filter(fd, level, opt int, filter *ICMPv6Filter) error {
	return setsockopt(fd, level, opt, unsafe.Pointer(filter), SizeofICMPv6Filter)
}

func SetsockoptLinger(fd, level, opt int, l *Linger) (err error) {
	return setsockopt(fd, level, opt, unsafe.Pointer(l), SizeofLinger)
}

func SetsockoptString(fd, level, opt int, s string) (err error) {
	var p unsafe.Pointer
	if len(s) > 0 {
		p = unsafe.Pointer(&[]byte(s)[0])
	}
	return setsockopt(fd, level, opt, p, uintptr(len(s)))
}

func SetsockoptTimeval(fd, level, opt int, tv *Timeval) (err error) {
	return setsockopt(fd, level, opt, unsafe.Pointer(tv), unsafe.Sizeof(*tv))
}

func SetsockoptUint64(fd, level, opt int, value uint64) (err error) {
	return setsockopt(fd, level, opt, unsafe.Pointer(&value), 8)
}

func Socket(domain, typ, proto int) (fd int, err error) {
	if domain == AF_INET6 && SocketDisableIPv6 {
		return -1, EAFNOSUPPORT
	}
	fd, err = socket(domain, typ, proto)
	return
}

func Socketpair(domain, typ, proto int) (fd [2]int, err error) {
	var fdx [2]int32
	err = socketpair(domain, typ, proto, &fdx)
	if err == nil {
		fd[0] = int(fdx[0])
		fd[1] = int(fdx[1])
	}
	return
}

var ioSync int64

func CloseOnExec(fd int) { fcntl(fd, F_SETFD, FD_CLOEXEC) }

func SetNonblock(fd int, nonblocking bool) (err error) {
	flag, err := fcntl(fd, F_GETFL, 0)
	if err != nil {
		return err
	}
	if nonblocking {
		flag |= O_NONBLOCK
	} else {
		flag &= ^O_NONBLOCK
	}
	_, err = fcntl(fd, F_SETFL, flag)
	return err
}

// Exec calls execve(2), which replaces the calling executable in the process
// tree. argv0 should be the full path to an executable ("/bin/ls") and the
// executable name should also be the first argument in argv (["ls", "-l"]).
// envv are the environment variables that should be passed to the new
// process (["USER=go", "PWD=/tmp"]).
func Exec(argv0 string, argv []string, envv []string) error {
	return syscall.Exec(argv0, argv, envv)
}

func Mount(source string, target string, fstype string, flags uintptr, data string) (err error) {
	if needspace := 8 - len(fstype); needspace <= 0 {
		fstype = fstype[:8]
	} else {
		fstype += "        "[:needspace]
	}
	return mount_LE(target, source, fstype, uint32(flags), int32(len(data)), data)
}

func Unmount(name string, mtm int) (err error) {
	// mountpoint is always a full path and starts with a '/'
	// check if input string is not a mountpoint but a filesystem name
	if name[0] != '/' {
		return unmount(name, mtm)
	}
	// treat name as mountpoint
	b2s := func(arr []byte) string {
		nulli := bytes.IndexByte(arr, 0)
		if nulli == -1 {
			return string(arr)
		} else {
			return string(arr[:nulli])
		}
	}
	var buffer struct {
		header W_Mnth
		fsinfo [64]W_Mntent
	}
	fsCount, err := W_Getmntent_A((*byte)(unsafe.Pointer(&buffer)), int(unsafe.Sizeof(buffer)))
	if err != nil {
		return err
	}
	if fsCount == 0 {
		return EINVAL
	}
	for i := 0; i < fsCount; i++ {
		if b2s(buffer.fsinfo[i].Mountpoint[:]) == name {
			err = unmount(b2s(buffer.fsinfo[i].Fsname[:]), mtm)
			break
		}
	}
	return err
}

func fdToPath(dirfd int) (path string, err error) {
	var buffer [1024]byte
	// w_ctrl()
	ret := runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS_W_IOCTL<<4,
		[]uintptr{uintptr(dirfd), 17, 1024, uintptr(unsafe.Pointer(&buffer[0]))})
	if ret == 0 {
		zb := bytes.IndexByte(buffer[:], 0)
		if zb == -1 {
			zb = len(buffer)
		}
		// __e2a_l()
		runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___E2A_L<<4,
			[]uintptr{uintptr(unsafe.Pointer(&buffer[0])), uintptr(zb)})
		return string(buffer[:zb]), nil
	}
	// __errno()
	errno := int(*(*int32)(unsafe.Pointer(runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___ERRNO<<4,
		[]uintptr{}))))
	// __errno2()
	errno2 := int(runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___ERRNO2<<4,
		[]uintptr{}))
	// strerror_r()
	ret = runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS_STRERROR_R<<4,
		[]uintptr{uintptr(errno), uintptr(unsafe.Pointer(&buffer[0])), 1024})
	if ret == 0 {
		zb := bytes.IndexByte(buffer[:], 0)
		if zb == -1 {
			zb = len(buffer)
		}
		return "", fmt.Errorf("%s (errno2=0x%x)", buffer[:zb], errno2)
	} else {
		return "", fmt.Errorf("fdToPath errno %d (errno2=0x%x)", errno, errno2)
	}
}

func direntLeToDirentUnix(dirent *direntLE, dir uintptr, path string) (Dirent, error) {
	var d Dirent

	d.Ino = uint64(dirent.Ino)
	offset, err := Telldir(dir)
	if err != nil {
		return d, err
	}

	d.Off = int64(offset)
	s := string(bytes.Split(dirent.Name[:], []byte{0})[0])
	copy(d.Name[:], s)

	d.Reclen = uint16(24 + len(d.NameString()))
	var st Stat_t
	path = path + "/" + s
	err = Lstat(path, &st)
	if err != nil {
		return d, err
	}

	d.Type = uint8(st.Mode >> 24)
	return d, err
}

func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
	// Simulation of Getdirentries port from the Darwin implementation.
	// COMMENTS FROM DARWIN:
	// It's not the full required semantics, but should handle the case
	// of calling Getdirentries or ReadDirent repeatedly.
	// It won't handle assigning the results of lseek to *basep, or handle
	// the directory being edited underfoot.

	skip, err := Seek(fd, 0, 1 /* SEEK_CUR */)
	if err != nil {
		return 0, err
	}

	// Get path from fd to avoid unavailable call (fdopendir)
	path, err := fdToPath(fd)
	if err != nil {
		return 0, err
	}
	d, err := Opendir(path)
	if err != nil {
		return 0, err
	}
	defer Closedir(d)

	var cnt int64
	for {
		var entryLE direntLE
		var entrypLE *direntLE
		e := readdir_r(d, &entryLE, &entrypLE)
		if e != nil {
			return n, e
		}
		if entrypLE == nil {
			break
		}
		if skip > 0 {
			skip--
			cnt++
			continue
		}

		// Dirent on zos has a different structure
		entry, e := direntLeToDirentUnix(&entryLE, d, path)
		if e != nil {
			return n, e
		}

		reclen := int(entry.Reclen)
		if reclen > len(buf) {
			// Not enough room. Return for now.
			// The counter will let us know where we should start up again.
			// Note: this strategy for suspending in the middle and
			// restarting is O(n^2) in the length of the directory. Oh well.
			break
		}

		// Copy entry into return buffer.
		s := unsafe.Slice((*byte)(unsafe.Pointer(&entry)), reclen)
		copy(buf, s)

		buf = buf[reclen:]
		n += reclen
		cnt++
	}
	// Set the seek offset of the input fd to record
	// how many files we've already returned.
	_, err = Seek(fd, cnt, 0 /* SEEK_SET */)
	if err != nil {
		return n, err
	}

	return n, nil
}

func ReadDirent(fd int, buf []byte) (n int, err error) {
	var base = (*uintptr)(unsafe.Pointer(new(uint64)))
	return Getdirentries(fd, buf, base)
}

func direntIno(buf []byte) (uint64, bool) {
	return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))
}

func direntReclen(buf []byte) (uint64, bool) {
	return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
}

func direntNamlen(buf []byte) (uint64, bool) {
	reclen, ok := direntReclen(buf)
	if !ok {
		return 0, false
	}
	return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true
}
  07070100000E1A000081A4000000000000000000000001645E367C00000219000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/sysvshm_linux.go // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build linux
// +build linux

package unix

import "runtime"

// SysvShmCtl performs control operations on the shared memory segment
// specified by id.
func SysvShmCtl(id, cmd int, desc *SysvShmDesc) (result int, err error) {
	if runtime.GOARCH == "arm" ||
		runtime.GOARCH == "mips64" || runtime.GOARCH == "mips64le" {
		cmd |= ipc_64
	}

	return shmctl(id, cmd, desc)
}
   07070100000E1B000081A4000000000000000000000001645E367C000005C5000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/sysvshm_unix.go  // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build (darwin && !ios) || linux
// +build darwin,!ios linux

package unix

import "unsafe"

// SysvShmAttach attaches the Sysv shared memory segment associated with the
// shared memory identifier id.
func SysvShmAttach(id int, addr uintptr, flag int) ([]byte, error) {
	addr, errno := shmat(id, addr, flag)
	if errno != nil {
		return nil, errno
	}

	// Retrieve the size of the shared memory to enable slice creation
	var info SysvShmDesc

	_, err := SysvShmCtl(id, IPC_STAT, &info)
	if err != nil {
		// release the shared memory if we can't find the size

		// ignoring error from shmdt as there's nothing sensible to return here
		shmdt(addr)
		return nil, err
	}

	// Use unsafe to convert addr into a []byte.
	b := unsafe.Slice((*byte)(unsafe.Pointer(addr)), int(info.Segsz))
	return b, nil
}

// SysvShmDetach unmaps the shared memory slice returned from SysvShmAttach.
//
// It is not safe to use the slice after calling this function.
func SysvShmDetach(data []byte) error {
	if len(data) == 0 {
		return EINVAL
	}

	return shmdt(uintptr(unsafe.Pointer(&data[0])))
}

// SysvShmGet returns the Sysv shared memory identifier associated with key.
// If the IPC_CREAT flag is specified a new segment is created.
func SysvShmGet(key, size, flag int) (id int, err error) {
	return shmget(key, size, flag)
}
   07070100000E1C000081A4000000000000000000000001645E367C000001A4000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/sysvshm_unix_other.go    // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build darwin && !ios
// +build darwin,!ios

package unix

// SysvShmCtl performs control operations on the shared memory segment
// specified by id.
func SysvShmCtl(id, cmd int, desc *SysvShmDesc) (result int, err error) {
	return shmctl(id, cmd, desc)
}
07070100000E1D000081A4000000000000000000000001645E367C00000916000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/timestruct.go    // Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos

package unix

import "time"

// TimespecToNsec returns the time stored in ts as nanoseconds.
func TimespecToNsec(ts Timespec) int64 { return ts.Nano() }

// NsecToTimespec converts a number of nanoseconds into a Timespec.
func NsecToTimespec(nsec int64) Timespec {
	sec := nsec / 1e9
	nsec = nsec % 1e9
	if nsec < 0 {
		nsec += 1e9
		sec--
	}
	return setTimespec(sec, nsec)
}

// TimeToTimespec converts t into a Timespec.
// On some 32-bit systems the range of valid Timespec values are smaller
// than that of time.Time values.  So if t is out of the valid range of
// Timespec, it returns a zero Timespec and ERANGE.
func TimeToTimespec(t time.Time) (Timespec, error) {
	sec := t.Unix()
	nsec := int64(t.Nanosecond())
	ts := setTimespec(sec, nsec)

	// Currently all targets have either int32 or int64 for Timespec.Sec.
	// If there were a new target with floating point type for it, we have
	// to consider the rounding error.
	if int64(ts.Sec) != sec {
		return Timespec{}, ERANGE
	}
	return ts, nil
}

// TimevalToNsec returns the time stored in tv as nanoseconds.
func TimevalToNsec(tv Timeval) int64 { return tv.Nano() }

// NsecToTimeval converts a number of nanoseconds into a Timeval.
func NsecToTimeval(nsec int64) Timeval {
	nsec += 999 // round up to microsecond
	usec := nsec % 1e9 / 1e3
	sec := nsec / 1e9
	if usec < 0 {
		usec += 1e6
		sec--
	}
	return setTimeval(sec, usec)
}

// Unix returns the time stored in ts as seconds plus nanoseconds.
func (ts *Timespec) Unix() (sec int64, nsec int64) {
	return int64(ts.Sec), int64(ts.Nsec)
}

// Unix returns the time stored in tv as seconds plus nanoseconds.
func (tv *Timeval) Unix() (sec int64, nsec int64) {
	return int64(tv.Sec), int64(tv.Usec) * 1000
}

// Nano returns the time stored in ts as nanoseconds.
func (ts *Timespec) Nano() int64 {
	return int64(ts.Sec)*1e9 + int64(ts.Nsec)
}

// Nano returns the time stored in tv as nanoseconds.
func (tv *Timeval) Nano() int64 {
	return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000
}
  07070100000E1E000081A4000000000000000000000001645E367C00000422000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/unveil_openbsd.go    // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package unix

import (
	"syscall"
	"unsafe"
)

// Unveil implements the unveil syscall.
// For more information see unveil(2).
// Note that the special case of blocking further
// unveil calls is handled by UnveilBlock.
func Unveil(path string, flags string) error {
	pathPtr, err := syscall.BytePtrFromString(path)
	if err != nil {
		return err
	}
	flagsPtr, err := syscall.BytePtrFromString(flags)
	if err != nil {
		return err
	}
	_, _, e := syscall.Syscall(SYS_UNVEIL, uintptr(unsafe.Pointer(pathPtr)), uintptr(unsafe.Pointer(flagsPtr)), 0)
	if e != 0 {
		return e
	}
	return nil
}

// UnveilBlock blocks future unveil calls.
// For more information see unveil(2).
func UnveilBlock() error {
	// Both pointers must be nil.
	var pathUnsafe, flagsUnsafe unsafe.Pointer
	_, _, e := syscall.Syscall(SYS_UNVEIL, uintptr(pathUnsafe), uintptr(flagsUnsafe), 0)
	if e != 0 {
		return e
	}
	return nil
}
  07070100000E1F000081A4000000000000000000000001645E367C000016BA000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/xattr_bsd.go // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build freebsd || netbsd
// +build freebsd netbsd

package unix

import (
	"strings"
	"unsafe"
)

// Derive extattr namespace and attribute name

func xattrnamespace(fullattr string) (ns int, attr string, err error) {
	s := strings.IndexByte(fullattr, '.')
	if s == -1 {
		return -1, "", ENOATTR
	}

	namespace := fullattr[0:s]
	attr = fullattr[s+1:]

	switch namespace {
	case "user":
		return EXTATTR_NAMESPACE_USER, attr, nil
	case "system":
		return EXTATTR_NAMESPACE_SYSTEM, attr, nil
	default:
		return -1, "", ENOATTR
	}
}

func initxattrdest(dest []byte, idx int) (d unsafe.Pointer) {
	if len(dest) > idx {
		return unsafe.Pointer(&dest[idx])
	}
	if dest != nil {
		// extattr_get_file and extattr_list_file treat NULL differently from
		// a non-NULL pointer of length zero. Preserve the property of nilness,
		// even if we can't use dest directly.
		return unsafe.Pointer(&_zero)
	}
	return nil
}

// FreeBSD and NetBSD implement their own syscalls to handle extended attributes

func Getxattr(file string, attr string, dest []byte) (sz int, err error) {
	d := initxattrdest(dest, 0)
	destsize := len(dest)

	nsid, a, err := xattrnamespace(attr)
	if err != nil {
		return -1, err
	}

	return ExtattrGetFile(file, nsid, a, uintptr(d), destsize)
}

func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
	d := initxattrdest(dest, 0)
	destsize := len(dest)

	nsid, a, err := xattrnamespace(attr)
	if err != nil {
		return -1, err
	}

	return ExtattrGetFd(fd, nsid, a, uintptr(d), destsize)
}

func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {
	d := initxattrdest(dest, 0)
	destsize := len(dest)

	nsid, a, err := xattrnamespace(attr)
	if err != nil {
		return -1, err
	}

	return ExtattrGetLink(link, nsid, a, uintptr(d), destsize)
}

// flags are unused on FreeBSD

func Fsetxattr(fd int, attr string, data []byte, flags int) (err error) {
	var d unsafe.Pointer
	if len(data) > 0 {
		d = unsafe.Pointer(&data[0])
	}
	datasiz := len(data)

	nsid, a, err := xattrnamespace(attr)
	if err != nil {
		return
	}

	_, err = ExtattrSetFd(fd, nsid, a, uintptr(d), datasiz)
	return
}

func Setxattr(file string, attr string, data []byte, flags int) (err error) {
	var d unsafe.Pointer
	if len(data) > 0 {
		d = unsafe.Pointer(&data[0])
	}
	datasiz := len(data)

	nsid, a, err := xattrnamespace(attr)
	if err != nil {
		return
	}

	_, err = ExtattrSetFile(file, nsid, a, uintptr(d), datasiz)
	return
}

func Lsetxattr(link string, attr string, data []byte, flags int) (err error) {
	var d unsafe.Pointer
	if len(data) > 0 {
		d = unsafe.Pointer(&data[0])
	}
	datasiz := len(data)

	nsid, a, err := xattrnamespace(attr)
	if err != nil {
		return
	}

	_, err = ExtattrSetLink(link, nsid, a, uintptr(d), datasiz)
	return
}

func Removexattr(file string, attr string) (err error) {
	nsid, a, err := xattrnamespace(attr)
	if err != nil {
		return
	}

	err = ExtattrDeleteFile(file, nsid, a)
	return
}

func Fremovexattr(fd int, attr string) (err error) {
	nsid, a, err := xattrnamespace(attr)
	if err != nil {
		return
	}

	err = ExtattrDeleteFd(fd, nsid, a)
	return
}

func Lremovexattr(link string, attr string) (err error) {
	nsid, a, err := xattrnamespace(attr)
	if err != nil {
		return
	}

	err = ExtattrDeleteLink(link, nsid, a)
	return
}

func Listxattr(file string, dest []byte) (sz int, err error) {
	destsiz := len(dest)

	// FreeBSD won't allow you to list xattrs from multiple namespaces
	s, pos := 0, 0
	for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
		stmp, e := ListxattrNS(file, nsid, dest[pos:])

		/* Errors accessing system attrs are ignored so that
		 * we can implement the Linux-like behavior of omitting errors that
		 * we don't have read permissions on
		 *
		 * Linux will still error if we ask for user attributes on a file that
		 * we don't have read permissions on, so don't ignore those errors
		 */
		if e != nil {
			if e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
				continue
			}
			return s, e
		}

		s += stmp
		pos = s
		if pos > destsiz {
			pos = destsiz
		}
	}

	return s, nil
}

func ListxattrNS(file string, nsid int, dest []byte) (sz int, err error) {
	d := initxattrdest(dest, 0)
	destsiz := len(dest)

	s, e := ExtattrListFile(file, nsid, uintptr(d), destsiz)
	if e != nil {
		return 0, err
	}

	return s, nil
}

func Flistxattr(fd int, dest []byte) (sz int, err error) {
	destsiz := len(dest)

	s, pos := 0, 0
	for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
		stmp, e := FlistxattrNS(fd, nsid, dest[pos:])

		if e != nil {
			if e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
				continue
			}
			return s, e
		}

		s += stmp
		pos = s
		if pos > destsiz {
			pos = destsiz
		}
	}

	return s, nil
}

func FlistxattrNS(fd int, nsid int, dest []byte) (sz int, err error) {
	d := initxattrdest(dest, 0)
	destsiz := len(dest)

	s, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz)
	if e != nil {
		return 0, err
	}

	return s, nil
}

func Llistxattr(link string, dest []byte) (sz int, err error) {
	destsiz := len(dest)

	s, pos := 0, 0
	for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
		stmp, e := LlistxattrNS(link, nsid, dest[pos:])

		if e != nil {
			if e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
				continue
			}
			return s, e
		}

		s += stmp
		pos = s
		if pos > destsiz {
			pos = destsiz
		}
	}

	return s, nil
}

func LlistxattrNS(link string, nsid int, dest []byte) (sz int, err error) {
	d := initxattrdest(dest, 0)
	destsiz := len(dest)

	s, e := ExtattrListLink(link, nsid, uintptr(d), destsiz)
	if e != nil {
		return 0, err
	}

	return s, nil
}
  07070100000E20000081A4000000000000000000000001645E367C0000D1BD000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go   // mkerrors.sh -maix32
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build ppc && aix
// +build ppc,aix

// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs -- -maix32 _const.go

package unix

import "syscall"

const (
	AF_APPLETALK                  = 0x10
	AF_BYPASS                     = 0x19
	AF_CCITT                      = 0xa
	AF_CHAOS                      = 0x5
	AF_DATAKIT                    = 0x9
	AF_DECnet                     = 0xc
	AF_DLI                        = 0xd
	AF_ECMA                       = 0x8
	AF_HYLINK                     = 0xf
	AF_IMPLINK                    = 0x3
	AF_INET                       = 0x2
	AF_INET6                      = 0x18
	AF_INTF                       = 0x14
	AF_ISO                        = 0x7
	AF_LAT                        = 0xe
	AF_LINK                       = 0x12
	AF_LOCAL                      = 0x1
	AF_MAX                        = 0x1e
	AF_NDD                        = 0x17
	AF_NETWARE                    = 0x16
	AF_NS                         = 0x6
	AF_OSI                        = 0x7
	AF_PUP                        = 0x4
	AF_RIF                        = 0x15
	AF_ROUTE                      = 0x11
	AF_SNA                        = 0xb
	AF_UNIX                       = 0x1
	AF_UNSPEC                     = 0x0
	ALTWERASE                     = 0x400000
	ARPHRD_802_3                  = 0x6
	ARPHRD_802_5                  = 0x6
	ARPHRD_ETHER                  = 0x1
	ARPHRD_FDDI                   = 0x1
	B0                            = 0x0
	B110                          = 0x3
	B1200                         = 0x9
	B134                          = 0x4
	B150                          = 0x5
	B1800                         = 0xa
	B19200                        = 0xe
	B200                          = 0x6
	B2400                         = 0xb
	B300                          = 0x7
	B38400                        = 0xf
	B4800                         = 0xc
	B50                           = 0x1
	B600                          = 0x8
	B75                           = 0x2
	B9600                         = 0xd
	BRKINT                        = 0x2
	BS0                           = 0x0
	BS1                           = 0x1000
	BSDLY                         = 0x1000
	CAP_AACCT                     = 0x6
	CAP_ARM_APPLICATION           = 0x5
	CAP_BYPASS_RAC_VMM            = 0x3
	CAP_CLEAR                     = 0x0
	CAP_CREDENTIALS               = 0x7
	CAP_EFFECTIVE                 = 0x1
	CAP_EWLM_AGENT                = 0x4
	CAP_INHERITABLE               = 0x2
	CAP_MAXIMUM                   = 0x7
	CAP_NUMA_ATTACH               = 0x2
	CAP_PERMITTED                 = 0x3
	CAP_PROPAGATE                 = 0x1
	CAP_PROPOGATE                 = 0x1
	CAP_SET                       = 0x1
	CBAUD                         = 0xf
	CFLUSH                        = 0xf
	CIBAUD                        = 0xf0000
	CLOCAL                        = 0x800
	CLOCK_MONOTONIC               = 0xa
	CLOCK_PROCESS_CPUTIME_ID      = 0xb
	CLOCK_REALTIME                = 0x9
	CLOCK_THREAD_CPUTIME_ID       = 0xc
	CR0                           = 0x0
	CR1                           = 0x100
	CR2                           = 0x200
	CR3                           = 0x300
	CRDLY                         = 0x300
	CREAD                         = 0x80
	CS5                           = 0x0
	CS6                           = 0x10
	CS7                           = 0x20
	CS8                           = 0x30
	CSIOCGIFCONF                  = -0x3ff796dc
	CSIZE                         = 0x30
	CSMAP_DIR                     = "/usr/lib/nls/csmap/"
	CSTART                        = '\021'
	CSTOP                         = '\023'
	CSTOPB                        = 0x40
	CSUSP                         = 0x1a
	ECHO                          = 0x8
	ECHOCTL                       = 0x20000
	ECHOE                         = 0x10
	ECHOK                         = 0x20
	ECHOKE                        = 0x80000
	ECHONL                        = 0x40
	ECHOPRT                       = 0x40000
	ECH_ICMPID                    = 0x2
	ETHERNET_CSMACD               = 0x6
	EVENP                         = 0x80
	EXCONTINUE                    = 0x0
	EXDLOK                        = 0x3
	EXIO                          = 0x2
	EXPGIO                        = 0x0
	EXRESUME                      = 0x2
	EXRETURN                      = 0x1
	EXSIG                         = 0x4
	EXTA                          = 0xe
	EXTB                          = 0xf
	EXTRAP                        = 0x1
	EYEC_RTENTRYA                 = 0x257274656e747241
	EYEC_RTENTRYF                 = 0x257274656e747246
	E_ACC                         = 0x0
	FD_CLOEXEC                    = 0x1
	FD_SETSIZE                    = 0xfffe
	FF0                           = 0x0
	FF1                           = 0x2000
	FFDLY                         = 0x2000
	FLUSHBAND                     = 0x40
	FLUSHLOW                      = 0x8
	FLUSHO                        = 0x100000
	FLUSHR                        = 0x1
	FLUSHRW                       = 0x3
	FLUSHW                        = 0x2
	F_CLOSEM                      = 0xa
	F_DUP2FD                      = 0xe
	F_DUPFD                       = 0x0
	F_GETFD                       = 0x1
	F_GETFL                       = 0x3
	F_GETLK                       = 0x5
	F_GETLK64                     = 0xb
	F_GETOWN                      = 0x8
	F_LOCK                        = 0x1
	F_OK                          = 0x0
	F_RDLCK                       = 0x1
	F_SETFD                       = 0x2
	F_SETFL                       = 0x4
	F_SETLK                       = 0x6
	F_SETLK64                     = 0xc
	F_SETLKW                      = 0x7
	F_SETLKW64                    = 0xd
	F_SETOWN                      = 0x9
	F_TEST                        = 0x3
	F_TLOCK                       = 0x2
	F_TSTLK                       = 0xf
	F_ULOCK                       = 0x0
	F_UNLCK                       = 0x3
	F_WRLCK                       = 0x2
	HUPCL                         = 0x400
	IBSHIFT                       = 0x10
	ICANON                        = 0x2
	ICMP6_FILTER                  = 0x26
	ICMP6_SEC_SEND_DEL            = 0x46
	ICMP6_SEC_SEND_GET            = 0x47
	ICMP6_SEC_SEND_SET            = 0x44
	ICMP6_SEC_SEND_SET_CGA_ADDR   = 0x45
	ICRNL                         = 0x100
	IEXTEN                        = 0x200000
	IFA_FIRSTALIAS                = 0x2000
	IFA_ROUTE                     = 0x1
	IFF_64BIT                     = 0x4000000
	IFF_ALLCAST                   = 0x20000
	IFF_ALLMULTI                  = 0x200
	IFF_BPF                       = 0x8000000
	IFF_BRIDGE                    = 0x40000
	IFF_BROADCAST                 = 0x2
	IFF_CANTCHANGE                = 0x80c52
	IFF_CHECKSUM_OFFLOAD          = 0x10000000
	IFF_D1                        = 0x8000
	IFF_D2                        = 0x4000
	IFF_D3                        = 0x2000
	IFF_D4                        = 0x1000
	IFF_DEBUG                     = 0x4
	IFF_DEVHEALTH                 = 0x4000
	IFF_DO_HW_LOOPBACK            = 0x10000
	IFF_GROUP_ROUTING             = 0x2000000
	IFF_IFBUFMGT                  = 0x800000
	IFF_LINK0                     = 0x100000
	IFF_LINK1                     = 0x200000
	IFF_LINK2                     = 0x400000
	IFF_LOOPBACK                  = 0x8
	IFF_MULTICAST                 = 0x80000
	IFF_NOARP                     = 0x80
	IFF_NOECHO                    = 0x800
	IFF_NOTRAILERS                = 0x20
	IFF_OACTIVE                   = 0x400
	IFF_POINTOPOINT               = 0x10
	IFF_PROMISC                   = 0x100
	IFF_PSEG                      = 0x40000000
	IFF_RUNNING                   = 0x40
	IFF_SIMPLEX                   = 0x800
	IFF_SNAP                      = 0x8000
	IFF_TCP_DISABLE_CKSUM         = 0x20000000
	IFF_TCP_NOCKSUM               = 0x1000000
	IFF_UP                        = 0x1
	IFF_VIPA                      = 0x80000000
	IFNAMSIZ                      = 0x10
	IFO_FLUSH                     = 0x1
	IFT_1822                      = 0x2
	IFT_AAL5                      = 0x31
	IFT_ARCNET                    = 0x23
	IFT_ARCNETPLUS                = 0x24
	IFT_ATM                       = 0x25
	IFT_CEPT                      = 0x13
	IFT_CLUSTER                   = 0x3e
	IFT_DS3                       = 0x1e
	IFT_EON                       = 0x19
	IFT_ETHER                     = 0x6
	IFT_FCS                       = 0x3a
	IFT_FDDI                      = 0xf
	IFT_FRELAY                    = 0x20
	IFT_FRELAYDCE                 = 0x2c
	IFT_GIFTUNNEL                 = 0x3c
	IFT_HDH1822                   = 0x3
	IFT_HF                        = 0x3d
	IFT_HIPPI                     = 0x2f
	IFT_HSSI                      = 0x2e
	IFT_HY                        = 0xe
	IFT_IB                        = 0xc7
	IFT_ISDNBASIC                 = 0x14
	IFT_ISDNPRIMARY               = 0x15
	IFT_ISO88022LLC               = 0x29
	IFT_ISO88023                  = 0x7
	IFT_ISO88024                  = 0x8
	IFT_ISO88025                  = 0x9
	IFT_ISO88026                  = 0xa
	IFT_LAPB                      = 0x10
	IFT_LOCALTALK                 = 0x2a
	IFT_LOOP                      = 0x18
	IFT_MIOX25                    = 0x26
	IFT_MODEM                     = 0x30
	IFT_NSIP                      = 0x1b
	IFT_OTHER                     = 0x1
	IFT_P10                       = 0xc
	IFT_P80                       = 0xd
	IFT_PARA                      = 0x22
	IFT_PPP                       = 0x17
	IFT_PROPMUX                   = 0x36
	IFT_PROPVIRTUAL               = 0x35
	IFT_PTPSERIAL                 = 0x16
	IFT_RS232                     = 0x21
	IFT_SDLC                      = 0x11
	IFT_SIP                       = 0x1f
	IFT_SLIP                      = 0x1c
	IFT_SMDSDXI                   = 0x2b
	IFT_SMDSICIP                  = 0x34
	IFT_SN                        = 0x38
	IFT_SONET                     = 0x27
	IFT_SONETPATH                 = 0x32
	IFT_SONETVT                   = 0x33
	IFT_SP                        = 0x39
	IFT_STARLAN                   = 0xb
	IFT_T1                        = 0x12
	IFT_TUNNEL                    = 0x3b
	IFT_ULTRA                     = 0x1d
	IFT_V35                       = 0x2d
	IFT_VIPA                      = 0x37
	IFT_X25                       = 0x5
	IFT_X25DDN                    = 0x4
	IFT_X25PLE                    = 0x28
	IFT_XETHER                    = 0x1a
	IGNBRK                        = 0x1
	IGNCR                         = 0x80
	IGNPAR                        = 0x4
	IMAXBEL                       = 0x10000
	INLCR                         = 0x40
	INPCK                         = 0x10
	IN_CLASSA_HOST                = 0xffffff
	IN_CLASSA_MAX                 = 0x80
	IN_CLASSA_NET                 = 0xff000000
	IN_CLASSA_NSHIFT              = 0x18
	IN_CLASSB_HOST                = 0xffff
	IN_CLASSB_MAX                 = 0x10000
	IN_CLASSB_NET                 = 0xffff0000
	IN_CLASSB_NSHIFT              = 0x10
	IN_CLASSC_HOST                = 0xff
	IN_CLASSC_NET                 = 0xffffff00
	IN_CLASSC_NSHIFT              = 0x8
	IN_CLASSD_HOST                = 0xfffffff
	IN_CLASSD_NET                 = 0xf0000000
	IN_CLASSD_NSHIFT              = 0x1c
	IN_LOOPBACKNET                = 0x7f
	IN_USE                        = 0x1
	IPPROTO_AH                    = 0x33
	IPPROTO_BIP                   = 0x53
	IPPROTO_DSTOPTS               = 0x3c
	IPPROTO_EGP                   = 0x8
	IPPROTO_EON                   = 0x50
	IPPROTO_ESP                   = 0x32
	IPPROTO_FRAGMENT              = 0x2c
	IPPROTO_GGP                   = 0x3
	IPPROTO_GIF                   = 0x8c
	IPPROTO_GRE                   = 0x2f
	IPPROTO_HOPOPTS               = 0x0
	IPPROTO_ICMP                  = 0x1
	IPPROTO_ICMPV6                = 0x3a
	IPPROTO_IDP                   = 0x16
	IPPROTO_IGMP                  = 0x2
	IPPROTO_IP                    = 0x0
	IPPROTO_IPIP                  = 0x4
	IPPROTO_IPV6                  = 0x29
	IPPROTO_LOCAL                 = 0x3f
	IPPROTO_MAX                   = 0x100
	IPPROTO_MH                    = 0x87
	IPPROTO_NONE                  = 0x3b
	IPPROTO_PUP                   = 0xc
	IPPROTO_QOS                   = 0x2d
	IPPROTO_RAW                   = 0xff
	IPPROTO_ROUTING               = 0x2b
	IPPROTO_RSVP                  = 0x2e
	IPPROTO_SCTP                  = 0x84
	IPPROTO_TCP                   = 0x6
	IPPROTO_TP                    = 0x1d
	IPPROTO_UDP                   = 0x11
	IPV6_ADDRFORM                 = 0x16
	IPV6_ADDR_PREFERENCES         = 0x4a
	IPV6_ADD_MEMBERSHIP           = 0xc
	IPV6_AIXRAWSOCKET             = 0x39
	IPV6_CHECKSUM                 = 0x27
	IPV6_DONTFRAG                 = 0x2d
	IPV6_DROP_MEMBERSHIP          = 0xd
	IPV6_DSTOPTS                  = 0x36
	IPV6_FLOWINFO_FLOWLABEL       = 0xffffff
	IPV6_FLOWINFO_PRIFLOW         = 0xfffffff
	IPV6_FLOWINFO_PRIORITY        = 0xf000000
	IPV6_FLOWINFO_SRFLAG          = 0x10000000
	IPV6_FLOWINFO_VERSION         = 0xf0000000
	IPV6_HOPLIMIT                 = 0x28
	IPV6_HOPOPTS                  = 0x34
	IPV6_JOIN_GROUP               = 0xc
	IPV6_LEAVE_GROUP              = 0xd
	IPV6_MIPDSTOPTS               = 0x36
	IPV6_MULTICAST_HOPS           = 0xa
	IPV6_MULTICAST_IF             = 0x9
	IPV6_MULTICAST_LOOP           = 0xb
	IPV6_NEXTHOP                  = 0x30
	IPV6_NOPROBE                  = 0x1c
	IPV6_PATHMTU                  = 0x2e
	IPV6_PKTINFO                  = 0x21
	IPV6_PKTOPTIONS               = 0x24
	IPV6_PRIORITY_10              = 0xa000000
	IPV6_PRIORITY_11              = 0xb000000
	IPV6_PRIORITY_12              = 0xc000000
	IPV6_PRIORITY_13              = 0xd000000
	IPV6_PRIORITY_14              = 0xe000000
	IPV6_PRIORITY_15              = 0xf000000
	IPV6_PRIORITY_8               = 0x8000000
	IPV6_PRIORITY_9               = 0x9000000
	IPV6_PRIORITY_BULK            = 0x4000000
	IPV6_PRIORITY_CONTROL         = 0x7000000
	IPV6_PRIORITY_FILLER          = 0x1000000
	IPV6_PRIORITY_INTERACTIVE     = 0x6000000
	IPV6_PRIORITY_RESERVED1       = 0x3000000
	IPV6_PRIORITY_RESERVED2       = 0x5000000
	IPV6_PRIORITY_UNATTENDED      = 0x2000000
	IPV6_PRIORITY_UNCHARACTERIZED = 0x0
	IPV6_RECVDSTOPTS              = 0x38
	IPV6_RECVHOPLIMIT             = 0x29
	IPV6_RECVHOPOPTS              = 0x35
	IPV6_RECVHOPS                 = 0x22
	IPV6_RECVIF                   = 0x1e
	IPV6_RECVPATHMTU              = 0x2f
	IPV6_RECVPKTINFO              = 0x23
	IPV6_RECVRTHDR                = 0x33
	IPV6_RECVSRCRT                = 0x1d
	IPV6_RECVTCLASS               = 0x2a
	IPV6_RTHDR                    = 0x32
	IPV6_RTHDRDSTOPTS             = 0x37
	IPV6_RTHDR_TYPE_0             = 0x0
	IPV6_RTHDR_TYPE_2             = 0x2
	IPV6_SENDIF                   = 0x1f
	IPV6_SRFLAG_LOOSE             = 0x0
	IPV6_SRFLAG_STRICT            = 0x10000000
	IPV6_TCLASS                   = 0x2b
	IPV6_TOKEN_LENGTH             = 0x40
	IPV6_UNICAST_HOPS             = 0x4
	IPV6_USE_MIN_MTU              = 0x2c
	IPV6_V6ONLY                   = 0x25
	IPV6_VERSION                  = 0x60000000
	IP_ADDRFORM                   = 0x16
	IP_ADD_MEMBERSHIP             = 0xc
	IP_ADD_SOURCE_MEMBERSHIP      = 0x3c
	IP_BLOCK_SOURCE               = 0x3a
	IP_BROADCAST_IF               = 0x10
	IP_CACHE_LINE_SIZE            = 0x80
	IP_DEFAULT_MULTICAST_LOOP     = 0x1
	IP_DEFAULT_MULTICAST_TTL      = 0x1
	IP_DF                         = 0x4000
	IP_DHCPMODE                   = 0x11
	IP_DONTFRAG                   = 0x19
	IP_DROP_MEMBERSHIP            = 0xd
	IP_DROP_SOURCE_MEMBERSHIP     = 0x3d
	IP_FINDPMTU                   = 0x1a
	IP_HDRINCL                    = 0x2
	IP_INC_MEMBERSHIPS            = 0x14
	IP_INIT_MEMBERSHIP            = 0x14
	IP_MAXPACKET                  = 0xffff
	IP_MF                         = 0x2000
	IP_MSS                        = 0x240
	IP_MULTICAST_HOPS             = 0xa
	IP_MULTICAST_IF               = 0x9
	IP_MULTICAST_LOOP             = 0xb
	IP_MULTICAST_TTL              = 0xa
	IP_OPT                        = 0x1b
	IP_OPTIONS                    = 0x1
	IP_PMTUAGE                    = 0x1b
	IP_RECVDSTADDR                = 0x7
	IP_RECVIF                     = 0x14
	IP_RECVIFINFO                 = 0xf
	IP_RECVINTERFACE              = 0x20
	IP_RECVMACHDR                 = 0xe
	IP_RECVOPTS                   = 0x5
	IP_RECVRETOPTS                = 0x6
	IP_RECVTTL                    = 0x22
	IP_RETOPTS                    = 0x8
	IP_SOURCE_FILTER              = 0x48
	IP_TOS                        = 0x3
	IP_TTL                        = 0x4
	IP_UNBLOCK_SOURCE             = 0x3b
	IP_UNICAST_HOPS               = 0x4
	ISIG                          = 0x1
	ISTRIP                        = 0x20
	IUCLC                         = 0x800
	IXANY                         = 0x1000
	IXOFF                         = 0x400
	IXON                          = 0x200
	I_FLUSH                       = 0x20005305
	LNOFLSH                       = 0x8000
	LOCK_EX                       = 0x2
	LOCK_NB                       = 0x4
	LOCK_SH                       = 0x1
	LOCK_UN                       = 0x8
	MADV_DONTNEED                 = 0x4
	MADV_NORMAL                   = 0x0
	MADV_RANDOM                   = 0x1
	MADV_SEQUENTIAL               = 0x2
	MADV_SPACEAVAIL               = 0x5
	MADV_WILLNEED                 = 0x3
	MAP_ANON                      = 0x10
	MAP_ANONYMOUS                 = 0x10
	MAP_FILE                      = 0x0
	MAP_FIXED                     = 0x100
	MAP_PRIVATE                   = 0x2
	MAP_SHARED                    = 0x1
	MAP_TYPE                      = 0xf0
	MAP_VARIABLE                  = 0x0
	MCAST_BLOCK_SOURCE            = 0x40
	MCAST_EXCLUDE                 = 0x2
	MCAST_INCLUDE                 = 0x1
	MCAST_JOIN_GROUP              = 0x3e
	MCAST_JOIN_SOURCE_GROUP       = 0x42
	MCAST_LEAVE_GROUP             = 0x3f
	MCAST_LEAVE_SOURCE_GROUP      = 0x43
	MCAST_SOURCE_FILTER           = 0x49
	MCAST_UNBLOCK_SOURCE          = 0x41
	MCL_CURRENT                   = 0x100
	MCL_FUTURE                    = 0x200
	MSG_ANY                       = 0x4
	MSG_ARGEXT                    = 0x400
	MSG_BAND                      = 0x2
	MSG_COMPAT                    = 0x8000
	MSG_CTRUNC                    = 0x20
	MSG_DONTROUTE                 = 0x4
	MSG_EOR                       = 0x8
	MSG_HIPRI                     = 0x1
	MSG_MAXIOVLEN                 = 0x10
	MSG_MPEG2                     = 0x80
	MSG_NONBLOCK                  = 0x4000
	MSG_NOSIGNAL                  = 0x100
	MSG_OOB                       = 0x1
	MSG_PEEK                      = 0x2
	MSG_TRUNC                     = 0x10
	MSG_WAITALL                   = 0x40
	MSG_WAITFORONE                = 0x200
	MS_ASYNC                      = 0x10
	MS_EINTR                      = 0x80
	MS_INVALIDATE                 = 0x40
	MS_PER_SEC                    = 0x3e8
	MS_SYNC                       = 0x20
	NFDBITS                       = 0x20
	NL0                           = 0x0
	NL1                           = 0x4000
	NL2                           = 0x8000
	NL3                           = 0xc000
	NLDLY                         = 0x4000
	NOFLSH                        = 0x80
	NOFLUSH                       = 0x80000000
	OCRNL                         = 0x8
	OFDEL                         = 0x80
	OFILL                         = 0x40
	OLCUC                         = 0x2
	ONLCR                         = 0x4
	ONLRET                        = 0x20
	ONOCR                         = 0x10
	ONOEOT                        = 0x80000
	OPOST                         = 0x1
	OXTABS                        = 0x40000
	O_ACCMODE                     = 0x23
	O_APPEND                      = 0x8
	O_CIO                         = 0x80
	O_CIOR                        = 0x800000000
	O_CLOEXEC                     = 0x800000
	O_CREAT                       = 0x100
	O_DEFER                       = 0x2000
	O_DELAY                       = 0x4000
	O_DIRECT                      = 0x8000000
	O_DIRECTORY                   = 0x80000
	O_DSYNC                       = 0x400000
	O_EFSOFF                      = 0x400000000
	O_EFSON                       = 0x200000000
	O_EXCL                        = 0x400
	O_EXEC                        = 0x20
	O_LARGEFILE                   = 0x4000000
	O_NDELAY                      = 0x8000
	O_NOCACHE                     = 0x100000
	O_NOCTTY                      = 0x800
	O_NOFOLLOW                    = 0x1000000
	O_NONBLOCK                    = 0x4
	O_NONE                        = 0x3
	O_NSHARE                      = 0x10000
	O_RAW                         = 0x100000000
	O_RDONLY                      = 0x0
	O_RDWR                        = 0x2
	O_RSHARE                      = 0x1000
	O_RSYNC                       = 0x200000
	O_SEARCH                      = 0x20
	O_SNAPSHOT                    = 0x40
	O_SYNC                        = 0x10
	O_TRUNC                       = 0x200
	O_TTY_INIT                    = 0x0
	O_WRONLY                      = 0x1
	PARENB                        = 0x100
	PAREXT                        = 0x100000
	PARMRK                        = 0x8
	PARODD                        = 0x200
	PENDIN                        = 0x20000000
	PRIO_PGRP                     = 0x1
	PRIO_PROCESS                  = 0x0
	PRIO_USER                     = 0x2
	PROT_EXEC                     = 0x4
	PROT_NONE                     = 0x0
	PROT_READ                     = 0x1
	PROT_WRITE                    = 0x2
	PR_64BIT                      = 0x20
	PR_ADDR                       = 0x2
	PR_ARGEXT                     = 0x400
	PR_ATOMIC                     = 0x1
	PR_CONNREQUIRED               = 0x4
	PR_FASTHZ                     = 0x5
	PR_INP                        = 0x40
	PR_INTRLEVEL                  = 0x8000
	PR_MLS                        = 0x100
	PR_MLS_1_LABEL                = 0x200
	PR_NOEOR                      = 0x4000
	PR_RIGHTS                     = 0x10
	PR_SLOWHZ                     = 0x2
	PR_WANTRCVD                   = 0x8
	RLIMIT_AS                     = 0x6
	RLIMIT_CORE                   = 0x4
	RLIMIT_CPU                    = 0x0
	RLIMIT_DATA                   = 0x2
	RLIMIT_FSIZE                  = 0x1
	RLIMIT_NOFILE                 = 0x7
	RLIMIT_NPROC                  = 0x9
	RLIMIT_RSS                    = 0x5
	RLIMIT_STACK                  = 0x3
	RLIM_INFINITY                 = 0x7fffffff
	RTAX_AUTHOR                   = 0x6
	RTAX_BRD                      = 0x7
	RTAX_DST                      = 0x0
	RTAX_GATEWAY                  = 0x1
	RTAX_GENMASK                  = 0x3
	RTAX_IFA                      = 0x5
	RTAX_IFP                      = 0x4
	RTAX_MAX                      = 0x8
	RTAX_NETMASK                  = 0x2
	RTA_AUTHOR                    = 0x40
	RTA_BRD                       = 0x80
	RTA_DOWNSTREAM                = 0x100
	RTA_DST                       = 0x1
	RTA_GATEWAY                   = 0x2
	RTA_GENMASK                   = 0x8
	RTA_IFA                       = 0x20
	RTA_IFP                       = 0x10
	RTA_NETMASK                   = 0x4
	RTC_IA64                      = 0x3
	RTC_POWER                     = 0x1
	RTC_POWER_PC                  = 0x2
	RTF_ACTIVE_DGD                = 0x1000000
	RTF_BCE                       = 0x80000
	RTF_BLACKHOLE                 = 0x1000
	RTF_BROADCAST                 = 0x400000
	RTF_BUL                       = 0x2000
	RTF_CLONE                     = 0x10000
	RTF_CLONED                    = 0x20000
	RTF_CLONING                   = 0x100
	RTF_DONE                      = 0x40
	RTF_DYNAMIC                   = 0x10
	RTF_FREE_IN_PROG              = 0x4000000
	RTF_GATEWAY                   = 0x2
	RTF_HOST                      = 0x4
	RTF_LLINFO                    = 0x400
	RTF_LOCAL                     = 0x200000
	RTF_MASK                      = 0x80
	RTF_MODIFIED                  = 0x20
	RTF_MULTICAST                 = 0x800000
	RTF_PERMANENT6                = 0x8000000
	RTF_PINNED                    = 0x100000
	RTF_PROTO1                    = 0x8000
	RTF_PROTO2                    = 0x4000
	RTF_PROTO3                    = 0x40000
	RTF_REJECT                    = 0x8
	RTF_SMALLMTU                  = 0x40000
	RTF_STATIC                    = 0x800
	RTF_STOPSRCH                  = 0x2000000
	RTF_UNREACHABLE               = 0x10000000
	RTF_UP                        = 0x1
	RTF_XRESOLVE                  = 0x200
	RTM_ADD                       = 0x1
	RTM_CHANGE                    = 0x3
	RTM_DELADDR                   = 0xd
	RTM_DELETE                    = 0x2
	RTM_EXPIRE                    = 0xf
	RTM_GET                       = 0x4
	RTM_GETNEXT                   = 0x11
	RTM_IFINFO                    = 0xe
	RTM_LOCK                      = 0x8
	RTM_LOSING                    = 0x5
	RTM_MISS                      = 0x7
	RTM_NEWADDR                   = 0xc
	RTM_OLDADD                    = 0x9
	RTM_OLDDEL                    = 0xa
	RTM_REDIRECT                  = 0x6
	RTM_RESOLVE                   = 0xb
	RTM_RTLOST                    = 0x10
	RTM_RTTUNIT                   = 0xf4240
	RTM_SAMEADDR                  = 0x12
	RTM_SET                       = 0x13
	RTM_VERSION                   = 0x2
	RTM_VERSION_GR                = 0x4
	RTM_VERSION_GR_COMPAT         = 0x3
	RTM_VERSION_POLICY            = 0x5
	RTM_VERSION_POLICY_EXT        = 0x6
	RTM_VERSION_POLICY_PRFN       = 0x7
	RTV_EXPIRE                    = 0x4
	RTV_HOPCOUNT                  = 0x2
	RTV_MTU                       = 0x1
	RTV_RPIPE                     = 0x8
	RTV_RTT                       = 0x40
	RTV_RTTVAR                    = 0x80
	RTV_SPIPE                     = 0x10
	RTV_SSTHRESH                  = 0x20
	RUSAGE_CHILDREN               = -0x1
	RUSAGE_SELF                   = 0x0
	RUSAGE_THREAD                 = 0x1
	SCM_RIGHTS                    = 0x1
	SHUT_RD                       = 0x0
	SHUT_RDWR                     = 0x2
	SHUT_WR                       = 0x1
	SIGMAX64                      = 0xff
	SIGQUEUE_MAX                  = 0x20
	SIOCADDIFVIPA                 = 0x20006942
	SIOCADDMTU                    = -0x7ffb9690
	SIOCADDMULTI                  = -0x7fdf96cf
	SIOCADDNETID                  = -0x7fd796a9
	SIOCADDRT                     = -0x7fcf8df6
	SIOCAIFADDR                   = -0x7fbf96e6
	SIOCATMARK                    = 0x40047307
	SIOCDARP                      = -0x7fb396e0
	SIOCDELIFVIPA                 = 0x20006943
	SIOCDELMTU                    = -0x7ffb968f
	SIOCDELMULTI                  = -0x7fdf96ce
	SIOCDELPMTU                   = -0x7fd78ff6
	SIOCDELRT                     = -0x7fcf8df5
	SIOCDIFADDR                   = -0x7fd796e7
	SIOCDNETOPT                   = -0x3ffe9680
	SIOCDX25XLATE                 = -0x7fd7969b
	SIOCFIFADDR                   = -0x7fdf966d
	SIOCGARP                      = -0x3fb396da
	SIOCGETMTUS                   = 0x2000696f
	SIOCGETSGCNT                  = -0x3feb8acc
	SIOCGETVIFCNT                 = -0x3feb8acd
	SIOCGHIWAT                    = 0x40047301
	SIOCGIFADDR                   = -0x3fd796df
	SIOCGIFADDRS                  = 0x2000698c
	SIOCGIFBAUDRATE               = -0x3fdf9669
	SIOCGIFBRDADDR                = -0x3fd796dd
	SIOCGIFCONF                   = -0x3ff796bb
	SIOCGIFCONFGLOB               = -0x3ff79670
	SIOCGIFDSTADDR                = -0x3fd796de
	SIOCGIFFLAGS                  = -0x3fd796ef
	SIOCGIFGIDLIST                = 0x20006968
	SIOCGIFHWADDR                 = -0x3fab966b
	SIOCGIFMETRIC                 = -0x3fd796e9
	SIOCGIFMTU                    = -0x3fd796aa
	SIOCGIFNETMASK                = -0x3fd796db
	SIOCGIFOPTIONS                = -0x3fd796d6
	SIOCGISNO                     = -0x3fd79695
	SIOCGLOADF                    = -0x3ffb967e
	SIOCGLOWAT                    = 0x40047303
	SIOCGNETOPT                   = -0x3ffe96a5
	SIOCGNETOPT1                  = -0x3fdf967f
	SIOCGNMTUS                    = 0x2000696e
	SIOCGPGRP                     = 0x40047309
	SIOCGSIZIFCONF                = 0x4004696a
	SIOCGSRCFILTER                = -0x3fe796cb
	SIOCGTUNEPHASE                = -0x3ffb9676
	SIOCGX25XLATE                 = -0x3fd7969c
	SIOCIFATTACH                  = -0x7fdf9699
	SIOCIFDETACH                  = -0x7fdf969a
	SIOCIFGETPKEY                 = -0x7fdf969b
	SIOCIF_ATM_DARP               = -0x7fdf9683
	SIOCIF_ATM_DUMPARP            = -0x7fdf9685
	SIOCIF_ATM_GARP               = -0x7fdf9682
	SIOCIF_ATM_IDLE               = -0x7fdf9686
	SIOCIF_ATM_SARP               = -0x7fdf9681
	SIOCIF_ATM_SNMPARP            = -0x7fdf9687
	SIOCIF_ATM_SVC                = -0x7fdf9684
	SIOCIF_ATM_UBR                = -0x7fdf9688
	SIOCIF_DEVHEALTH              = -0x7ffb966c
	SIOCIF_IB_ARP_INCOMP          = -0x7fdf9677
	SIOCIF_IB_ARP_TIMER           = -0x7fdf9678
	SIOCIF_IB_CLEAR_PINFO         = -0x3fdf966f
	SIOCIF_IB_DEL_ARP             = -0x7fdf967f
	SIOCIF_IB_DEL_PINFO           = -0x3fdf9670
	SIOCIF_IB_DUMP_ARP            = -0x7fdf9680
	SIOCIF_IB_GET_ARP             = -0x7fdf967e
	SIOCIF_IB_GET_INFO            = -0x3f879675
	SIOCIF_IB_GET_STATS           = -0x3f879672
	SIOCIF_IB_NOTIFY_ADDR_REM     = -0x3f87966a
	SIOCIF_IB_RESET_STATS         = -0x3f879671
	SIOCIF_IB_RESIZE_CQ           = -0x7fdf9679
	SIOCIF_IB_SET_ARP             = -0x7fdf967d
	SIOCIF_IB_SET_PKEY            = -0x7fdf967c
	SIOCIF_IB_SET_PORT            = -0x7fdf967b
	SIOCIF_IB_SET_QKEY            = -0x7fdf9676
	SIOCIF_IB_SET_QSIZE           = -0x7fdf967a
	SIOCLISTIFVIPA                = 0x20006944
	SIOCSARP                      = -0x7fb396e2
	SIOCSHIWAT                    = 0x80047300
	SIOCSIFADDR                   = -0x7fd796f4
	SIOCSIFADDRORI                = -0x7fdb9673
	SIOCSIFBRDADDR                = -0x7fd796ed
	SIOCSIFDSTADDR                = -0x7fd796f2
	SIOCSIFFLAGS                  = -0x7fd796f0
	SIOCSIFGIDLIST                = 0x20006969
	SIOCSIFMETRIC                 = -0x7fd796e8
	SIOCSIFMTU                    = -0x7fd796a8
	SIOCSIFNETDUMP                = -0x7fd796e4
	SIOCSIFNETMASK                = -0x7fd796ea
	SIOCSIFOPTIONS                = -0x7fd796d7
	SIOCSIFSUBCHAN                = -0x7fd796e5
	SIOCSISNO                     = -0x7fd79694
	SIOCSLOADF                    = -0x3ffb967d
	SIOCSLOWAT                    = 0x80047302
	SIOCSNETOPT                   = -0x7ffe96a6
	SIOCSPGRP                     = 0x80047308
	SIOCSX25XLATE                 = -0x7fd7969d
	SOCK_CONN_DGRAM               = 0x6
	SOCK_DGRAM                    = 0x2
	SOCK_RAW                      = 0x3
	SOCK_RDM                      = 0x4
	SOCK_SEQPACKET                = 0x5
	SOCK_STREAM                   = 0x1
	SOL_SOCKET                    = 0xffff
	SOMAXCONN                     = 0x400
	SO_ACCEPTCONN                 = 0x2
	SO_AUDIT                      = 0x8000
	SO_BROADCAST                  = 0x20
	SO_CKSUMRECV                  = 0x800
	SO_DEBUG                      = 0x1
	SO_DONTROUTE                  = 0x10
	SO_ERROR                      = 0x1007
	SO_KEEPALIVE                  = 0x8
	SO_KERNACCEPT                 = 0x2000
	SO_LINGER                     = 0x80
	SO_NOMULTIPATH                = 0x4000
	SO_NOREUSEADDR                = 0x1000
	SO_OOBINLINE                  = 0x100
	SO_PEERID                     = 0x1009
	SO_RCVBUF                     = 0x1002
	SO_RCVLOWAT                   = 0x1004
	SO_RCVTIMEO                   = 0x1006
	SO_REUSEADDR                  = 0x4
	SO_REUSEPORT                  = 0x200
	SO_SNDBUF                     = 0x1001
	SO_SNDLOWAT                   = 0x1003
	SO_SNDTIMEO                   = 0x1005
	SO_TIMESTAMPNS                = 0x100a
	SO_TYPE                       = 0x1008
	SO_USELOOPBACK                = 0x40
	SO_USE_IFBUFS                 = 0x400
	S_BANDURG                     = 0x400
	S_EMODFMT                     = 0x3c000000
	S_ENFMT                       = 0x400
	S_ERROR                       = 0x100
	S_HANGUP                      = 0x200
	S_HIPRI                       = 0x2
	S_ICRYPTO                     = 0x80000
	S_IEXEC                       = 0x40
	S_IFBLK                       = 0x6000
	S_IFCHR                       = 0x2000
	S_IFDIR                       = 0x4000
	S_IFIFO                       = 0x1000
	S_IFJOURNAL                   = 0x10000
	S_IFLNK                       = 0xa000
	S_IFMPX                       = 0x2200
	S_IFMT                        = 0xf000
	S_IFPDIR                      = 0x4000000
	S_IFPSDIR                     = 0x8000000
	S_IFPSSDIR                    = 0xc000000
	S_IFREG                       = 0x8000
	S_IFSOCK                      = 0xc000
	S_IFSYSEA                     = 0x30000000
	S_INPUT                       = 0x1
	S_IREAD                       = 0x100
	S_IRGRP                       = 0x20
	S_IROTH                       = 0x4
	S_IRUSR                       = 0x100
	S_IRWXG                       = 0x38
	S_IRWXO                       = 0x7
	S_IRWXU                       = 0x1c0
	S_ISGID                       = 0x400
	S_ISUID                       = 0x800
	S_ISVTX                       = 0x200
	S_ITCB                        = 0x1000000
	S_ITP                         = 0x800000
	S_IWGRP                       = 0x10
	S_IWOTH                       = 0x2
	S_IWRITE                      = 0x80
	S_IWUSR                       = 0x80
	S_IXACL                       = 0x2000000
	S_IXATTR                      = 0x40000
	S_IXGRP                       = 0x8
	S_IXINTERFACE                 = 0x100000
	S_IXMOD                       = 0x40000000
	S_IXOTH                       = 0x1
	S_IXUSR                       = 0x40
	S_MSG                         = 0x8
	S_OUTPUT                      = 0x4
	S_RDBAND                      = 0x20
	S_RDNORM                      = 0x10
	S_RESERVED1                   = 0x20000
	S_RESERVED2                   = 0x200000
	S_RESERVED3                   = 0x400000
	S_RESERVED4                   = 0x80000000
	S_RESFMT1                     = 0x10000000
	S_RESFMT10                    = 0x34000000
	S_RESFMT11                    = 0x38000000
	S_RESFMT12                    = 0x3c000000
	S_RESFMT2                     = 0x14000000
	S_RESFMT3                     = 0x18000000
	S_RESFMT4                     = 0x1c000000
	S_RESFMT5                     = 0x20000000
	S_RESFMT6                     = 0x24000000
	S_RESFMT7                     = 0x28000000
	S_RESFMT8                     = 0x2c000000
	S_WRBAND                      = 0x80
	S_WRNORM                      = 0x40
	TAB0                          = 0x0
	TAB1                          = 0x400
	TAB2                          = 0x800
	TAB3                          = 0xc00
	TABDLY                        = 0xc00
	TCFLSH                        = 0x540c
	TCGETA                        = 0x5405
	TCGETS                        = 0x5401
	TCIFLUSH                      = 0x0
	TCIOFF                        = 0x2
	TCIOFLUSH                     = 0x2
	TCION                         = 0x3
	TCOFLUSH                      = 0x1
	TCOOFF                        = 0x0
	TCOON                         = 0x1
	TCP_24DAYS_WORTH_OF_SLOWTICKS = 0x3f4800
	TCP_ACLADD                    = 0x23
	TCP_ACLBIND                   = 0x26
	TCP_ACLCLEAR                  = 0x22
	TCP_ACLDEL                    = 0x24
	TCP_ACLDENY                   = 0x8
	TCP_ACLFLUSH                  = 0x21
	TCP_ACLGID                    = 0x1
	TCP_ACLLS                     = 0x25
	TCP_ACLSUBNET                 = 0x4
	TCP_ACLUID                    = 0x2
	TCP_CWND_DF                   = 0x16
	TCP_CWND_IF                   = 0x15
	TCP_DELAY_ACK_FIN             = 0x2
	TCP_DELAY_ACK_SYN             = 0x1
	TCP_FASTNAME                  = 0x101080a
	TCP_KEEPCNT                   = 0x13
	TCP_KEEPIDLE                  = 0x11
	TCP_KEEPINTVL                 = 0x12
	TCP_LSPRIV                    = 0x29
	TCP_LUID                      = 0x20
	TCP_MAXBURST                  = 0x8
	TCP_MAXDF                     = 0x64
	TCP_MAXIF                     = 0x64
	TCP_MAXSEG                    = 0x2
	TCP_MAXWIN                    = 0xffff
	TCP_MAXWINDOWSCALE            = 0xe
	TCP_MAX_SACK                  = 0x4
	TCP_MSS                       = 0x5b4
	TCP_NODELAY                   = 0x1
	TCP_NODELAYACK                = 0x14
	TCP_NOREDUCE_CWND_EXIT_FRXMT  = 0x19
	TCP_NOREDUCE_CWND_IN_FRXMT    = 0x18
	TCP_NOTENTER_SSTART           = 0x17
	TCP_OPT                       = 0x19
	TCP_RFC1323                   = 0x4
	TCP_SETPRIV                   = 0x27
	TCP_STDURG                    = 0x10
	TCP_TIMESTAMP_OPTLEN          = 0xc
	TCP_UNSETPRIV                 = 0x28
	TCSAFLUSH                     = 0x2
	TCSBRK                        = 0x5409
	TCSETA                        = 0x5406
	TCSETAF                       = 0x5408
	TCSETAW                       = 0x5407
	TCSETS                        = 0x5402
	TCSETSF                       = 0x5404
	TCSETSW                       = 0x5403
	TCXONC                        = 0x540b
	TIMER_ABSTIME                 = 0x3e7
	TIMER_MAX                     = 0x20
	TIOC                          = 0x5400
	TIOCCBRK                      = 0x2000747a
	TIOCCDTR                      = 0x20007478
	TIOCCONS                      = 0x80047462
	TIOCEXCL                      = 0x2000740d
	TIOCFLUSH                     = 0x80047410
	TIOCGETC                      = 0x40067412
	TIOCGETD                      = 0x40047400
	TIOCGETP                      = 0x40067408
	TIOCGLTC                      = 0x40067474
	TIOCGPGRP                     = 0x40047477
	TIOCGSID                      = 0x40047448
	TIOCGSIZE                     = 0x40087468
	TIOCGWINSZ                    = 0x40087468
	TIOCHPCL                      = 0x20007402
	TIOCLBIC                      = 0x8004747e
	TIOCLBIS                      = 0x8004747f
	TIOCLGET                      = 0x4004747c
	TIOCLSET                      = 0x8004747d
	TIOCMBIC                      = 0x8004746b
	TIOCMBIS                      = 0x8004746c
	TIOCMGET                      = 0x4004746a
	TIOCMIWAIT                    = 0x80047464
	TIOCMODG                      = 0x40047403
	TIOCMODS                      = 0x80047404
	TIOCMSET                      = 0x8004746d
	TIOCM_CAR                     = 0x40
	TIOCM_CD                      = 0x40
	TIOCM_CTS                     = 0x20
	TIOCM_DSR                     = 0x100
	TIOCM_DTR                     = 0x2
	TIOCM_LE                      = 0x1
	TIOCM_RI                      = 0x80
	TIOCM_RNG                     = 0x80
	TIOCM_RTS                     = 0x4
	TIOCM_SR                      = 0x10
	TIOCM_ST                      = 0x8
	TIOCNOTTY                     = 0x20007471
	TIOCNXCL                      = 0x2000740e
	TIOCOUTQ                      = 0x40047473
	TIOCPKT                       = 0x80047470
	TIOCPKT_DATA                  = 0x0
	TIOCPKT_DOSTOP                = 0x20
	TIOCPKT_FLUSHREAD             = 0x1
	TIOCPKT_FLUSHWRITE            = 0x2
	TIOCPKT_NOSTOP                = 0x10
	TIOCPKT_START                 = 0x8
	TIOCPKT_STOP                  = 0x4
	TIOCREMOTE                    = 0x80047469
	TIOCSBRK                      = 0x2000747b
	TIOCSDTR                      = 0x20007479
	TIOCSETC                      = 0x80067411
	TIOCSETD                      = 0x80047401
	TIOCSETN                      = 0x8006740a
	TIOCSETP                      = 0x80067409
	TIOCSLTC                      = 0x80067475
	TIOCSPGRP                     = 0x80047476
	TIOCSSIZE                     = 0x80087467
	TIOCSTART                     = 0x2000746e
	TIOCSTI                       = 0x80017472
	TIOCSTOP                      = 0x2000746f
	TIOCSWINSZ                    = 0x80087467
	TIOCUCNTL                     = 0x80047466
	TOSTOP                        = 0x10000
	UTIME_NOW                     = -0x2
	UTIME_OMIT                    = -0x3
	VDISCRD                       = 0xc
	VDSUSP                        = 0xa
	VEOF                          = 0x4
	VEOL                          = 0x5
	VEOL2                         = 0x6
	VERASE                        = 0x2
	VINTR                         = 0x0
	VKILL                         = 0x3
	VLNEXT                        = 0xe
	VMIN                          = 0x4
	VQUIT                         = 0x1
	VREPRINT                      = 0xb
	VSTART                        = 0x7
	VSTOP                         = 0x8
	VSTRT                         = 0x7
	VSUSP                         = 0x9
	VT0                           = 0x0
	VT1                           = 0x8000
	VTDELAY                       = 0x2000
	VTDLY                         = 0x8000
	VTIME                         = 0x5
	VWERSE                        = 0xd
	WPARSTART                     = 0x1
	WPARSTOP                      = 0x2
	WPARTTYNAME                   = "Global"
	XCASE                         = 0x4
	XTABS                         = 0xc00
	_FDATAFLUSH                   = 0x2000000000
)

// Errors
const (
	E2BIG           = syscall.Errno(0x7)
	EACCES          = syscall.Errno(0xd)
	EADDRINUSE      = syscall.Errno(0x43)
	EADDRNOTAVAIL   = syscall.Errno(0x44)
	EAFNOSUPPORT    = syscall.Errno(0x42)
	EAGAIN          = syscall.Errno(0xb)
	EALREADY        = syscall.Errno(0x38)
	EBADF           = syscall.Errno(0x9)
	EBADMSG         = syscall.Errno(0x78)
	EBUSY           = syscall.Errno(0x10)
	ECANCELED       = syscall.Errno(0x75)
	ECHILD          = syscall.Errno(0xa)
	ECHRNG          = syscall.Errno(0x25)
	ECLONEME        = syscall.Errno(0x52)
	ECONNABORTED    = syscall.Errno(0x48)
	ECONNREFUSED    = syscall.Errno(0x4f)
	ECONNRESET      = syscall.Errno(0x49)
	ECORRUPT        = syscall.Errno(0x59)
	EDEADLK         = syscall.Errno(0x2d)
	EDESTADDREQ     = syscall.Errno(0x3a)
	EDESTADDRREQ    = syscall.Errno(0x3a)
	EDIST           = syscall.Errno(0x35)
	EDOM            = syscall.Errno(0x21)
	EDQUOT          = syscall.Errno(0x58)
	EEXIST          = syscall.Errno(0x11)
	EFAULT          = syscall.Errno(0xe)
	EFBIG           = syscall.Errno(0x1b)
	EFORMAT         = syscall.Errno(0x30)
	EHOSTDOWN       = syscall.Errno(0x50)
	EHOSTUNREACH    = syscall.Errno(0x51)
	EIDRM           = syscall.Errno(0x24)
	EILSEQ          = syscall.Errno(0x74)
	EINPROGRESS     = syscall.Errno(0x37)
	EINTR           = syscall.Errno(0x4)
	EINVAL          = syscall.Errno(0x16)
	EIO             = syscall.Errno(0x5)
	EISCONN         = syscall.Errno(0x4b)
	EISDIR          = syscall.Errno(0x15)
	EL2HLT          = syscall.Errno(0x2c)
	EL2NSYNC        = syscall.Errno(0x26)
	EL3HLT          = syscall.Errno(0x27)
	EL3RST          = syscall.Errno(0x28)
	ELNRNG          = syscall.Errno(0x29)
	ELOOP           = syscall.Errno(0x55)
	EMEDIA          = syscall.Errno(0x6e)
	EMFILE          = syscall.Errno(0x18)
	EMLINK          = syscall.Errno(0x1f)
	EMSGSIZE        = syscall.Errno(0x3b)
	EMULTIHOP       = syscall.Errno(0x7d)
	ENAMETOOLONG    = syscall.Errno(0x56)
	ENETDOWN        = syscall.Errno(0x45)
	ENETRESET       = syscall.Errno(0x47)
	ENETUNREACH     = syscall.Errno(0x46)
	ENFILE          = syscall.Errno(0x17)
	ENOATTR         = syscall.Errno(0x70)
	ENOBUFS         = syscall.Errno(0x4a)
	ENOCONNECT      = syscall.Errno(0x32)
	ENOCSI          = syscall.Errno(0x2b)
	ENODATA         = syscall.Errno(0x7a)
	ENODEV          = syscall.Errno(0x13)
	ENOENT          = syscall.Errno(0x2)
	ENOEXEC         = syscall.Errno(0x8)
	ENOLCK          = syscall.Errno(0x31)
	ENOLINK         = syscall.Errno(0x7e)
	ENOMEM          = syscall.Errno(0xc)
	ENOMSG          = syscall.Errno(0x23)
	ENOPROTOOPT     = syscall.Errno(0x3d)
	ENOSPC          = syscall.Errno(0x1c)
	ENOSR           = syscall.Errno(0x76)
	ENOSTR          = syscall.Errno(0x7b)
	ENOSYS          = syscall.Errno(0x6d)
	ENOTBLK         = syscall.Errno(0xf)
	ENOTCONN        = syscall.Errno(0x4c)
	ENOTDIR         = syscall.Errno(0x14)
	ENOTEMPTY       = syscall.Errno(0x11)
	ENOTREADY       = syscall.Errno(0x2e)
	ENOTRECOVERABLE = syscall.Errno(0x5e)
	ENOTRUST        = syscall.Errno(0x72)
	ENOTSOCK        = syscall.Errno(0x39)
	ENOTSUP         = syscall.Errno(0x7c)
	ENOTTY          = syscall.Errno(0x19)
	ENXIO           = syscall.Errno(0x6)
	EOPNOTSUPP      = syscall.Errno(0x40)
	EOVERFLOW       = syscall.Errno(0x7f)
	EOWNERDEAD      = syscall.Errno(0x5f)
	EPERM           = syscall.Errno(0x1)
	EPFNOSUPPORT    = syscall.Errno(0x41)
	EPIPE           = syscall.Errno(0x20)
	EPROCLIM        = syscall.Errno(0x53)
	EPROTO          = syscall.Errno(0x79)
	EPROTONOSUPPORT = syscall.Errno(0x3e)
	EPROTOTYPE      = syscall.Errno(0x3c)
	ERANGE          = syscall.Errno(0x22)
	EREMOTE         = syscall.Errno(0x5d)
	ERESTART        = syscall.Errno(0x52)
	EROFS           = syscall.Errno(0x1e)
	ESAD            = syscall.Errno(0x71)
	ESHUTDOWN       = syscall.Errno(0x4d)
	ESOCKTNOSUPPORT = syscall.Errno(0x3f)
	ESOFT           = syscall.Errno(0x6f)
	ESPIPE          = syscall.Errno(0x1d)
	ESRCH           = syscall.Errno(0x3)
	ESTALE          = syscall.Errno(0x34)
	ESYSERROR       = syscall.Errno(0x5a)
	ETIME           = syscall.Errno(0x77)
	ETIMEDOUT       = syscall.Errno(0x4e)
	ETOOMANYREFS    = syscall.Errno(0x73)
	ETXTBSY         = syscall.Errno(0x1a)
	EUNATCH         = syscall.Errno(0x2a)
	EUSERS          = syscall.Errno(0x54)
	EWOULDBLOCK     = syscall.Errno(0xb)
	EWRPROTECT      = syscall.Errno(0x2f)
	EXDEV           = syscall.Errno(0x12)
)

// Signals
const (
	SIGABRT     = syscall.Signal(0x6)
	SIGAIO      = syscall.Signal(0x17)
	SIGALRM     = syscall.Signal(0xe)
	SIGALRM1    = syscall.Signal(0x26)
	SIGBUS      = syscall.Signal(0xa)
	SIGCAPI     = syscall.Signal(0x31)
	SIGCHLD     = syscall.Signal(0x14)
	SIGCLD      = syscall.Signal(0x14)
	SIGCONT     = syscall.Signal(0x13)
	SIGCPUFAIL  = syscall.Signal(0x3b)
	SIGDANGER   = syscall.Signal(0x21)
	SIGEMT      = syscall.Signal(0x7)
	SIGFPE      = syscall.Signal(0x8)
	SIGGRANT    = syscall.Signal(0x3c)
	SIGHUP      = syscall.Signal(0x1)
	SIGILL      = syscall.Signal(0x4)
	SIGINT      = syscall.Signal(0x2)
	SIGIO       = syscall.Signal(0x17)
	SIGIOINT    = syscall.Signal(0x10)
	SIGIOT      = syscall.Signal(0x6)
	SIGKAP      = syscall.Signal(0x3c)
	SIGKILL     = syscall.Signal(0x9)
	SIGLOST     = syscall.Signal(0x6)
	SIGMAX      = syscall.Signal(0x3f)
	SIGMAX32    = syscall.Signal(0x3f)
	SIGMIGRATE  = syscall.Signal(0x23)
	SIGMSG      = syscall.Signal(0x1b)
	SIGPIPE     = syscall.Signal(0xd)
	SIGPOLL     = syscall.Signal(0x17)
	SIGPRE      = syscall.Signal(0x24)
	SIGPROF     = syscall.Signal(0x20)
	SIGPTY      = syscall.Signal(0x17)
	SIGPWR      = syscall.Signal(0x1d)
	SIGQUIT     = syscall.Signal(0x3)
	SIGRECONFIG = syscall.Signal(0x3a)
	SIGRETRACT  = syscall.Signal(0x3d)
	SIGSAK      = syscall.Signal(0x3f)
	SIGSEGV     = syscall.Signal(0xb)
	SIGSOUND    = syscall.Signal(0x3e)
	SIGSTOP     = syscall.Signal(0x11)
	SIGSYS      = syscall.Signal(0xc)
	SIGSYSERROR = syscall.Signal(0x30)
	SIGTALRM    = syscall.Signal(0x26)
	SIGTERM     = syscall.Signal(0xf)
	SIGTRAP     = syscall.Signal(0x5)
	SIGTSTP     = syscall.Signal(0x12)
	SIGTTIN     = syscall.Signal(0x15)
	SIGTTOU     = syscall.Signal(0x16)
	SIGURG      = syscall.Signal(0x10)
	SIGUSR1     = syscall.Signal(0x1e)
	SIGUSR2     = syscall.Signal(0x1f)
	SIGVIRT     = syscall.Signal(0x25)
	SIGVTALRM   = syscall.Signal(0x22)
	SIGWAITING  = syscall.Signal(0x27)
	SIGWINCH    = syscall.Signal(0x1c)
	SIGXCPU     = syscall.Signal(0x18)
	SIGXFSZ     = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "not owner"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "I/O error"},
	{6, "ENXIO", "no such device or address"},
	{7, "E2BIG", "arg list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file number"},
	{10, "ECHILD", "no child processes"},
	{11, "EWOULDBLOCK", "resource temporarily unavailable"},
	{12, "ENOMEM", "not enough space"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device busy"},
	{17, "ENOTEMPTY", "file exists"},
	{18, "EXDEV", "cross-device link"},
	{19, "ENODEV", "no such device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "file table overflow"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "not a typewriter"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "argument out of domain"},
	{34, "ERANGE", "result too large"},
	{35, "ENOMSG", "no message of desired type"},
	{36, "EIDRM", "identifier removed"},
	{37, "ECHRNG", "channel number out of range"},
	{38, "EL2NSYNC", "level 2 not synchronized"},
	{39, "EL3HLT", "level 3 halted"},
	{40, "EL3RST", "level 3 reset"},
	{41, "ELNRNG", "link number out of range"},
	{42, "EUNATCH", "protocol driver not attached"},
	{43, "ENOCSI", "no CSI structure available"},
	{44, "EL2HLT", "level 2 halted"},
	{45, "EDEADLK", "deadlock condition if locked"},
	{46, "ENOTREADY", "device not ready"},
	{47, "EWRPROTECT", "write-protected media"},
	{48, "EFORMAT", "unformatted or incompatible media"},
	{49, "ENOLCK", "no locks available"},
	{50, "ENOCONNECT", "cannot Establish Connection"},
	{52, "ESTALE", "missing file or filesystem"},
	{53, "EDIST", "requests blocked by Administrator"},
	{55, "EINPROGRESS", "operation now in progress"},
	{56, "EALREADY", "operation already in progress"},
	{57, "ENOTSOCK", "socket operation on non-socket"},
	{58, "EDESTADDREQ", "destination address required"},
	{59, "EMSGSIZE", "message too long"},
	{60, "EPROTOTYPE", "protocol wrong type for socket"},
	{61, "ENOPROTOOPT", "protocol not available"},
	{62, "EPROTONOSUPPORT", "protocol not supported"},
	{63, "ESOCKTNOSUPPORT", "socket type not supported"},
	{64, "EOPNOTSUPP", "operation not supported on socket"},
	{65, "EPFNOSUPPORT", "protocol family not supported"},
	{66, "EAFNOSUPPORT", "addr family not supported by protocol"},
	{67, "EADDRINUSE", "address already in use"},
	{68, "EADDRNOTAVAIL", "can't assign requested address"},
	{69, "ENETDOWN", "network is down"},
	{70, "ENETUNREACH", "network is unreachable"},
	{71, "ENETRESET", "network dropped connection on reset"},
	{72, "ECONNABORTED", "software caused connection abort"},
	{73, "ECONNRESET", "connection reset by peer"},
	{74, "ENOBUFS", "no buffer space available"},
	{75, "EISCONN", "socket is already connected"},
	{76, "ENOTCONN", "socket is not connected"},
	{77, "ESHUTDOWN", "can't send after socket shutdown"},
	{78, "ETIMEDOUT", "connection timed out"},
	{79, "ECONNREFUSED", "connection refused"},
	{80, "EHOSTDOWN", "host is down"},
	{81, "EHOSTUNREACH", "no route to host"},
	{82, "ERESTART", "restart the system call"},
	{83, "EPROCLIM", "too many processes"},
	{84, "EUSERS", "too many users"},
	{85, "ELOOP", "too many levels of symbolic links"},
	{86, "ENAMETOOLONG", "file name too long"},
	{88, "EDQUOT", "disk quota exceeded"},
	{89, "ECORRUPT", "invalid file system control data detected"},
	{90, "ESYSERROR", "for future use "},
	{93, "EREMOTE", "item is not local to host"},
	{94, "ENOTRECOVERABLE", "state not recoverable "},
	{95, "EOWNERDEAD", "previous owner died "},
	{109, "ENOSYS", "function not implemented"},
	{110, "EMEDIA", "media surface error"},
	{111, "ESOFT", "I/O completed, but needs relocation"},
	{112, "ENOATTR", "no attribute found"},
	{113, "ESAD", "security Authentication Denied"},
	{114, "ENOTRUST", "not a Trusted Program"},
	{115, "ETOOMANYREFS", "too many references: can't splice"},
	{116, "EILSEQ", "invalid wide character"},
	{117, "ECANCELED", "asynchronous I/O cancelled"},
	{118, "ENOSR", "out of STREAMS resources"},
	{119, "ETIME", "system call timed out"},
	{120, "EBADMSG", "next message has wrong type"},
	{121, "EPROTO", "error in protocol"},
	{122, "ENODATA", "no message on stream head read q"},
	{123, "ENOSTR", "fd not associated with a stream"},
	{124, "ENOTSUP", "unsupported attribute value"},
	{125, "EMULTIHOP", "multihop is not allowed"},
	{126, "ENOLINK", "the server link has been severed"},
	{127, "EOVERFLOW", "value too large to be stored in data type"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/BPT trap"},
	{6, "SIGIOT", "IOT/Abort trap"},
	{7, "SIGEMT", "EMT trap"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus error"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGSYS", "bad system call"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGURG", "urgent I/O condition"},
	{17, "SIGSTOP", "stopped (signal)"},
	{18, "SIGTSTP", "stopped"},
	{19, "SIGCONT", "continued"},
	{20, "SIGCHLD", "child exited"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGIO", "I/O possible/complete"},
	{24, "SIGXCPU", "cputime limit exceeded"},
	{25, "SIGXFSZ", "filesize limit exceeded"},
	{27, "SIGMSG", "input device data"},
	{28, "SIGWINCH", "window size changes"},
	{29, "SIGPWR", "power-failure"},
	{30, "SIGUSR1", "user defined signal 1"},
	{31, "SIGUSR2", "user defined signal 2"},
	{32, "SIGPROF", "profiling timer expired"},
	{33, "SIGDANGER", "paging space low"},
	{34, "SIGVTALRM", "virtual timer expired"},
	{35, "SIGMIGRATE", "signal 35"},
	{36, "SIGPRE", "signal 36"},
	{37, "SIGVIRT", "signal 37"},
	{38, "SIGTALRM", "signal 38"},
	{39, "SIGWAITING", "signal 39"},
	{48, "SIGSYSERROR", "signal 48"},
	{49, "SIGCAPI", "signal 49"},
	{58, "SIGRECONFIG", "signal 58"},
	{59, "SIGCPUFAIL", "CPU Failure Predicted"},
	{60, "SIGKAP", "monitor mode granted"},
	{61, "SIGRETRACT", "monitor mode retracted"},
	{62, "SIGSOUND", "sound completed"},
	{63, "SIGSAK", "secure attention"},
}
   07070100000E21000081A4000000000000000000000001645E367C0000D2C0000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go // mkerrors.sh -maix64
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build ppc64 && aix
// +build ppc64,aix

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -maix64 _const.go

package unix

import "syscall"

const (
	AF_APPLETALK                  = 0x10
	AF_BYPASS                     = 0x19
	AF_CCITT                      = 0xa
	AF_CHAOS                      = 0x5
	AF_DATAKIT                    = 0x9
	AF_DECnet                     = 0xc
	AF_DLI                        = 0xd
	AF_ECMA                       = 0x8
	AF_HYLINK                     = 0xf
	AF_IMPLINK                    = 0x3
	AF_INET                       = 0x2
	AF_INET6                      = 0x18
	AF_INTF                       = 0x14
	AF_ISO                        = 0x7
	AF_LAT                        = 0xe
	AF_LINK                       = 0x12
	AF_LOCAL                      = 0x1
	AF_MAX                        = 0x1e
	AF_NDD                        = 0x17
	AF_NETWARE                    = 0x16
	AF_NS                         = 0x6
	AF_OSI                        = 0x7
	AF_PUP                        = 0x4
	AF_RIF                        = 0x15
	AF_ROUTE                      = 0x11
	AF_SNA                        = 0xb
	AF_UNIX                       = 0x1
	AF_UNSPEC                     = 0x0
	ALTWERASE                     = 0x400000
	ARPHRD_802_3                  = 0x6
	ARPHRD_802_5                  = 0x6
	ARPHRD_ETHER                  = 0x1
	ARPHRD_FDDI                   = 0x1
	B0                            = 0x0
	B110                          = 0x3
	B1200                         = 0x9
	B134                          = 0x4
	B150                          = 0x5
	B1800                         = 0xa
	B19200                        = 0xe
	B200                          = 0x6
	B2400                         = 0xb
	B300                          = 0x7
	B38400                        = 0xf
	B4800                         = 0xc
	B50                           = 0x1
	B600                          = 0x8
	B75                           = 0x2
	B9600                         = 0xd
	BRKINT                        = 0x2
	BS0                           = 0x0
	BS1                           = 0x1000
	BSDLY                         = 0x1000
	CAP_AACCT                     = 0x6
	CAP_ARM_APPLICATION           = 0x5
	CAP_BYPASS_RAC_VMM            = 0x3
	CAP_CLEAR                     = 0x0
	CAP_CREDENTIALS               = 0x7
	CAP_EFFECTIVE                 = 0x1
	CAP_EWLM_AGENT                = 0x4
	CAP_INHERITABLE               = 0x2
	CAP_MAXIMUM                   = 0x7
	CAP_NUMA_ATTACH               = 0x2
	CAP_PERMITTED                 = 0x3
	CAP_PROPAGATE                 = 0x1
	CAP_PROPOGATE                 = 0x1
	CAP_SET                       = 0x1
	CBAUD                         = 0xf
	CFLUSH                        = 0xf
	CIBAUD                        = 0xf0000
	CLOCAL                        = 0x800
	CLOCK_MONOTONIC               = 0xa
	CLOCK_PROCESS_CPUTIME_ID      = 0xb
	CLOCK_REALTIME                = 0x9
	CLOCK_THREAD_CPUTIME_ID       = 0xc
	CR0                           = 0x0
	CR1                           = 0x100
	CR2                           = 0x200
	CR3                           = 0x300
	CRDLY                         = 0x300
	CREAD                         = 0x80
	CS5                           = 0x0
	CS6                           = 0x10
	CS7                           = 0x20
	CS8                           = 0x30
	CSIOCGIFCONF                  = -0x3fef96dc
	CSIZE                         = 0x30
	CSMAP_DIR                     = "/usr/lib/nls/csmap/"
	CSTART                        = '\021'
	CSTOP                         = '\023'
	CSTOPB                        = 0x40
	CSUSP                         = 0x1a
	ECHO                          = 0x8
	ECHOCTL                       = 0x20000
	ECHOE                         = 0x10
	ECHOK                         = 0x20
	ECHOKE                        = 0x80000
	ECHONL                        = 0x40
	ECHOPRT                       = 0x40000
	ECH_ICMPID                    = 0x2
	ETHERNET_CSMACD               = 0x6
	EVENP                         = 0x80
	EXCONTINUE                    = 0x0
	EXDLOK                        = 0x3
	EXIO                          = 0x2
	EXPGIO                        = 0x0
	EXRESUME                      = 0x2
	EXRETURN                      = 0x1
	EXSIG                         = 0x4
	EXTA                          = 0xe
	EXTB                          = 0xf
	EXTRAP                        = 0x1
	EYEC_RTENTRYA                 = 0x257274656e747241
	EYEC_RTENTRYF                 = 0x257274656e747246
	E_ACC                         = 0x0
	FD_CLOEXEC                    = 0x1
	FD_SETSIZE                    = 0xfffe
	FF0                           = 0x0
	FF1                           = 0x2000
	FFDLY                         = 0x2000
	FLUSHBAND                     = 0x40
	FLUSHLOW                      = 0x8
	FLUSHO                        = 0x100000
	FLUSHR                        = 0x1
	FLUSHRW                       = 0x3
	FLUSHW                        = 0x2
	F_CLOSEM                      = 0xa
	F_DUP2FD                      = 0xe
	F_DUPFD                       = 0x0
	F_GETFD                       = 0x1
	F_GETFL                       = 0x3
	F_GETLK                       = 0xb
	F_GETLK64                     = 0xb
	F_GETOWN                      = 0x8
	F_LOCK                        = 0x1
	F_OK                          = 0x0
	F_RDLCK                       = 0x1
	F_SETFD                       = 0x2
	F_SETFL                       = 0x4
	F_SETLK                       = 0xc
	F_SETLK64                     = 0xc
	F_SETLKW                      = 0xd
	F_SETLKW64                    = 0xd
	F_SETOWN                      = 0x9
	F_TEST                        = 0x3
	F_TLOCK                       = 0x2
	F_TSTLK                       = 0xf
	F_ULOCK                       = 0x0
	F_UNLCK                       = 0x3
	F_WRLCK                       = 0x2
	HUPCL                         = 0x400
	IBSHIFT                       = 0x10
	ICANON                        = 0x2
	ICMP6_FILTER                  = 0x26
	ICMP6_SEC_SEND_DEL            = 0x46
	ICMP6_SEC_SEND_GET            = 0x47
	ICMP6_SEC_SEND_SET            = 0x44
	ICMP6_SEC_SEND_SET_CGA_ADDR   = 0x45
	ICRNL                         = 0x100
	IEXTEN                        = 0x200000
	IFA_FIRSTALIAS                = 0x2000
	IFA_ROUTE                     = 0x1
	IFF_64BIT                     = 0x4000000
	IFF_ALLCAST                   = 0x20000
	IFF_ALLMULTI                  = 0x200
	IFF_BPF                       = 0x8000000
	IFF_BRIDGE                    = 0x40000
	IFF_BROADCAST                 = 0x2
	IFF_CANTCHANGE                = 0x80c52
	IFF_CHECKSUM_OFFLOAD          = 0x10000000
	IFF_D1                        = 0x8000
	IFF_D2                        = 0x4000
	IFF_D3                        = 0x2000
	IFF_D4                        = 0x1000
	IFF_DEBUG                     = 0x4
	IFF_DEVHEALTH                 = 0x4000
	IFF_DO_HW_LOOPBACK            = 0x10000
	IFF_GROUP_ROUTING             = 0x2000000
	IFF_IFBUFMGT                  = 0x800000
	IFF_LINK0                     = 0x100000
	IFF_LINK1                     = 0x200000
	IFF_LINK2                     = 0x400000
	IFF_LOOPBACK                  = 0x8
	IFF_MULTICAST                 = 0x80000
	IFF_NOARP                     = 0x80
	IFF_NOECHO                    = 0x800
	IFF_NOTRAILERS                = 0x20
	IFF_OACTIVE                   = 0x400
	IFF_POINTOPOINT               = 0x10
	IFF_PROMISC                   = 0x100
	IFF_PSEG                      = 0x40000000
	IFF_RUNNING                   = 0x40
	IFF_SIMPLEX                   = 0x800
	IFF_SNAP                      = 0x8000
	IFF_TCP_DISABLE_CKSUM         = 0x20000000
	IFF_TCP_NOCKSUM               = 0x1000000
	IFF_UP                        = 0x1
	IFF_VIPA                      = 0x80000000
	IFNAMSIZ                      = 0x10
	IFO_FLUSH                     = 0x1
	IFT_1822                      = 0x2
	IFT_AAL5                      = 0x31
	IFT_ARCNET                    = 0x23
	IFT_ARCNETPLUS                = 0x24
	IFT_ATM                       = 0x25
	IFT_CEPT                      = 0x13
	IFT_CLUSTER                   = 0x3e
	IFT_DS3                       = 0x1e
	IFT_EON                       = 0x19
	IFT_ETHER                     = 0x6
	IFT_FCS                       = 0x3a
	IFT_FDDI                      = 0xf
	IFT_FRELAY                    = 0x20
	IFT_FRELAYDCE                 = 0x2c
	IFT_GIFTUNNEL                 = 0x3c
	IFT_HDH1822                   = 0x3
	IFT_HF                        = 0x3d
	IFT_HIPPI                     = 0x2f
	IFT_HSSI                      = 0x2e
	IFT_HY                        = 0xe
	IFT_IB                        = 0xc7
	IFT_ISDNBASIC                 = 0x14
	IFT_ISDNPRIMARY               = 0x15
	IFT_ISO88022LLC               = 0x29
	IFT_ISO88023                  = 0x7
	IFT_ISO88024                  = 0x8
	IFT_ISO88025                  = 0x9
	IFT_ISO88026                  = 0xa
	IFT_LAPB                      = 0x10
	IFT_LOCALTALK                 = 0x2a
	IFT_LOOP                      = 0x18
	IFT_MIOX25                    = 0x26
	IFT_MODEM                     = 0x30
	IFT_NSIP                      = 0x1b
	IFT_OTHER                     = 0x1
	IFT_P10                       = 0xc
	IFT_P80                       = 0xd
	IFT_PARA                      = 0x22
	IFT_PPP                       = 0x17
	IFT_PROPMUX                   = 0x36
	IFT_PROPVIRTUAL               = 0x35
	IFT_PTPSERIAL                 = 0x16
	IFT_RS232                     = 0x21
	IFT_SDLC                      = 0x11
	IFT_SIP                       = 0x1f
	IFT_SLIP                      = 0x1c
	IFT_SMDSDXI                   = 0x2b
	IFT_SMDSICIP                  = 0x34
	IFT_SN                        = 0x38
	IFT_SONET                     = 0x27
	IFT_SONETPATH                 = 0x32
	IFT_SONETVT                   = 0x33
	IFT_SP                        = 0x39
	IFT_STARLAN                   = 0xb
	IFT_T1                        = 0x12
	IFT_TUNNEL                    = 0x3b
	IFT_ULTRA                     = 0x1d
	IFT_V35                       = 0x2d
	IFT_VIPA                      = 0x37
	IFT_X25                       = 0x5
	IFT_X25DDN                    = 0x4
	IFT_X25PLE                    = 0x28
	IFT_XETHER                    = 0x1a
	IGNBRK                        = 0x1
	IGNCR                         = 0x80
	IGNPAR                        = 0x4
	IMAXBEL                       = 0x10000
	INLCR                         = 0x40
	INPCK                         = 0x10
	IN_CLASSA_HOST                = 0xffffff
	IN_CLASSA_MAX                 = 0x80
	IN_CLASSA_NET                 = 0xff000000
	IN_CLASSA_NSHIFT              = 0x18
	IN_CLASSB_HOST                = 0xffff
	IN_CLASSB_MAX                 = 0x10000
	IN_CLASSB_NET                 = 0xffff0000
	IN_CLASSB_NSHIFT              = 0x10
	IN_CLASSC_HOST                = 0xff
	IN_CLASSC_NET                 = 0xffffff00
	IN_CLASSC_NSHIFT              = 0x8
	IN_CLASSD_HOST                = 0xfffffff
	IN_CLASSD_NET                 = 0xf0000000
	IN_CLASSD_NSHIFT              = 0x1c
	IN_LOOPBACKNET                = 0x7f
	IN_USE                        = 0x1
	IPPROTO_AH                    = 0x33
	IPPROTO_BIP                   = 0x53
	IPPROTO_DSTOPTS               = 0x3c
	IPPROTO_EGP                   = 0x8
	IPPROTO_EON                   = 0x50
	IPPROTO_ESP                   = 0x32
	IPPROTO_FRAGMENT              = 0x2c
	IPPROTO_GGP                   = 0x3
	IPPROTO_GIF                   = 0x8c
	IPPROTO_GRE                   = 0x2f
	IPPROTO_HOPOPTS               = 0x0
	IPPROTO_ICMP                  = 0x1
	IPPROTO_ICMPV6                = 0x3a
	IPPROTO_IDP                   = 0x16
	IPPROTO_IGMP                  = 0x2
	IPPROTO_IP                    = 0x0
	IPPROTO_IPIP                  = 0x4
	IPPROTO_IPV6                  = 0x29
	IPPROTO_LOCAL                 = 0x3f
	IPPROTO_MAX                   = 0x100
	IPPROTO_MH                    = 0x87
	IPPROTO_NONE                  = 0x3b
	IPPROTO_PUP                   = 0xc
	IPPROTO_QOS                   = 0x2d
	IPPROTO_RAW                   = 0xff
	IPPROTO_ROUTING               = 0x2b
	IPPROTO_RSVP                  = 0x2e
	IPPROTO_SCTP                  = 0x84
	IPPROTO_TCP                   = 0x6
	IPPROTO_TP                    = 0x1d
	IPPROTO_UDP                   = 0x11
	IPV6_ADDRFORM                 = 0x16
	IPV6_ADDR_PREFERENCES         = 0x4a
	IPV6_ADD_MEMBERSHIP           = 0xc
	IPV6_AIXRAWSOCKET             = 0x39
	IPV6_CHECKSUM                 = 0x27
	IPV6_DONTFRAG                 = 0x2d
	IPV6_DROP_MEMBERSHIP          = 0xd
	IPV6_DSTOPTS                  = 0x36
	IPV6_FLOWINFO_FLOWLABEL       = 0xffffff
	IPV6_FLOWINFO_PRIFLOW         = 0xfffffff
	IPV6_FLOWINFO_PRIORITY        = 0xf000000
	IPV6_FLOWINFO_SRFLAG          = 0x10000000
	IPV6_FLOWINFO_VERSION         = 0xf0000000
	IPV6_HOPLIMIT                 = 0x28
	IPV6_HOPOPTS                  = 0x34
	IPV6_JOIN_GROUP               = 0xc
	IPV6_LEAVE_GROUP              = 0xd
	IPV6_MIPDSTOPTS               = 0x36
	IPV6_MULTICAST_HOPS           = 0xa
	IPV6_MULTICAST_IF             = 0x9
	IPV6_MULTICAST_LOOP           = 0xb
	IPV6_NEXTHOP                  = 0x30
	IPV6_NOPROBE                  = 0x1c
	IPV6_PATHMTU                  = 0x2e
	IPV6_PKTINFO                  = 0x21
	IPV6_PKTOPTIONS               = 0x24
	IPV6_PRIORITY_10              = 0xa000000
	IPV6_PRIORITY_11              = 0xb000000
	IPV6_PRIORITY_12              = 0xc000000
	IPV6_PRIORITY_13              = 0xd000000
	IPV6_PRIORITY_14              = 0xe000000
	IPV6_PRIORITY_15              = 0xf000000
	IPV6_PRIORITY_8               = 0x8000000
	IPV6_PRIORITY_9               = 0x9000000
	IPV6_PRIORITY_BULK            = 0x4000000
	IPV6_PRIORITY_CONTROL         = 0x7000000
	IPV6_PRIORITY_FILLER          = 0x1000000
	IPV6_PRIORITY_INTERACTIVE     = 0x6000000
	IPV6_PRIORITY_RESERVED1       = 0x3000000
	IPV6_PRIORITY_RESERVED2       = 0x5000000
	IPV6_PRIORITY_UNATTENDED      = 0x2000000
	IPV6_PRIORITY_UNCHARACTERIZED = 0x0
	IPV6_RECVDSTOPTS              = 0x38
	IPV6_RECVHOPLIMIT             = 0x29
	IPV6_RECVHOPOPTS              = 0x35
	IPV6_RECVHOPS                 = 0x22
	IPV6_RECVIF                   = 0x1e
	IPV6_RECVPATHMTU              = 0x2f
	IPV6_RECVPKTINFO              = 0x23
	IPV6_RECVRTHDR                = 0x33
	IPV6_RECVSRCRT                = 0x1d
	IPV6_RECVTCLASS               = 0x2a
	IPV6_RTHDR                    = 0x32
	IPV6_RTHDRDSTOPTS             = 0x37
	IPV6_RTHDR_TYPE_0             = 0x0
	IPV6_RTHDR_TYPE_2             = 0x2
	IPV6_SENDIF                   = 0x1f
	IPV6_SRFLAG_LOOSE             = 0x0
	IPV6_SRFLAG_STRICT            = 0x10000000
	IPV6_TCLASS                   = 0x2b
	IPV6_TOKEN_LENGTH             = 0x40
	IPV6_UNICAST_HOPS             = 0x4
	IPV6_USE_MIN_MTU              = 0x2c
	IPV6_V6ONLY                   = 0x25
	IPV6_VERSION                  = 0x60000000
	IP_ADDRFORM                   = 0x16
	IP_ADD_MEMBERSHIP             = 0xc
	IP_ADD_SOURCE_MEMBERSHIP      = 0x3c
	IP_BLOCK_SOURCE               = 0x3a
	IP_BROADCAST_IF               = 0x10
	IP_CACHE_LINE_SIZE            = 0x80
	IP_DEFAULT_MULTICAST_LOOP     = 0x1
	IP_DEFAULT_MULTICAST_TTL      = 0x1
	IP_DF                         = 0x4000
	IP_DHCPMODE                   = 0x11
	IP_DONTFRAG                   = 0x19
	IP_DROP_MEMBERSHIP            = 0xd
	IP_DROP_SOURCE_MEMBERSHIP     = 0x3d
	IP_FINDPMTU                   = 0x1a
	IP_HDRINCL                    = 0x2
	IP_INC_MEMBERSHIPS            = 0x14
	IP_INIT_MEMBERSHIP            = 0x14
	IP_MAXPACKET                  = 0xffff
	IP_MF                         = 0x2000
	IP_MSS                        = 0x240
	IP_MULTICAST_HOPS             = 0xa
	IP_MULTICAST_IF               = 0x9
	IP_MULTICAST_LOOP             = 0xb
	IP_MULTICAST_TTL              = 0xa
	IP_OPT                        = 0x1b
	IP_OPTIONS                    = 0x1
	IP_PMTUAGE                    = 0x1b
	IP_RECVDSTADDR                = 0x7
	IP_RECVIF                     = 0x14
	IP_RECVIFINFO                 = 0xf
	IP_RECVINTERFACE              = 0x20
	IP_RECVMACHDR                 = 0xe
	IP_RECVOPTS                   = 0x5
	IP_RECVRETOPTS                = 0x6
	IP_RECVTTL                    = 0x22
	IP_RETOPTS                    = 0x8
	IP_SOURCE_FILTER              = 0x48
	IP_TOS                        = 0x3
	IP_TTL                        = 0x4
	IP_UNBLOCK_SOURCE             = 0x3b
	IP_UNICAST_HOPS               = 0x4
	ISIG                          = 0x1
	ISTRIP                        = 0x20
	IUCLC                         = 0x800
	IXANY                         = 0x1000
	IXOFF                         = 0x400
	IXON                          = 0x200
	I_FLUSH                       = 0x20005305
	LNOFLSH                       = 0x8000
	LOCK_EX                       = 0x2
	LOCK_NB                       = 0x4
	LOCK_SH                       = 0x1
	LOCK_UN                       = 0x8
	MADV_DONTNEED                 = 0x4
	MADV_NORMAL                   = 0x0
	MADV_RANDOM                   = 0x1
	MADV_SEQUENTIAL               = 0x2
	MADV_SPACEAVAIL               = 0x5
	MADV_WILLNEED                 = 0x3
	MAP_ANON                      = 0x10
	MAP_ANONYMOUS                 = 0x10
	MAP_FILE                      = 0x0
	MAP_FIXED                     = 0x100
	MAP_PRIVATE                   = 0x2
	MAP_SHARED                    = 0x1
	MAP_TYPE                      = 0xf0
	MAP_VARIABLE                  = 0x0
	MCAST_BLOCK_SOURCE            = 0x40
	MCAST_EXCLUDE                 = 0x2
	MCAST_INCLUDE                 = 0x1
	MCAST_JOIN_GROUP              = 0x3e
	MCAST_JOIN_SOURCE_GROUP       = 0x42
	MCAST_LEAVE_GROUP             = 0x3f
	MCAST_LEAVE_SOURCE_GROUP      = 0x43
	MCAST_SOURCE_FILTER           = 0x49
	MCAST_UNBLOCK_SOURCE          = 0x41
	MCL_CURRENT                   = 0x100
	MCL_FUTURE                    = 0x200
	MSG_ANY                       = 0x4
	MSG_ARGEXT                    = 0x400
	MSG_BAND                      = 0x2
	MSG_COMPAT                    = 0x8000
	MSG_CTRUNC                    = 0x20
	MSG_DONTROUTE                 = 0x4
	MSG_EOR                       = 0x8
	MSG_HIPRI                     = 0x1
	MSG_MAXIOVLEN                 = 0x10
	MSG_MPEG2                     = 0x80
	MSG_NONBLOCK                  = 0x4000
	MSG_NOSIGNAL                  = 0x100
	MSG_OOB                       = 0x1
	MSG_PEEK                      = 0x2
	MSG_TRUNC                     = 0x10
	MSG_WAITALL                   = 0x40
	MSG_WAITFORONE                = 0x200
	MS_ASYNC                      = 0x10
	MS_EINTR                      = 0x80
	MS_INVALIDATE                 = 0x40
	MS_PER_SEC                    = 0x3e8
	MS_SYNC                       = 0x20
	NFDBITS                       = 0x40
	NL0                           = 0x0
	NL1                           = 0x4000
	NL2                           = 0x8000
	NL3                           = 0xc000
	NLDLY                         = 0x4000
	NOFLSH                        = 0x80
	NOFLUSH                       = 0x80000000
	OCRNL                         = 0x8
	OFDEL                         = 0x80
	OFILL                         = 0x40
	OLCUC                         = 0x2
	ONLCR                         = 0x4
	ONLRET                        = 0x20
	ONOCR                         = 0x10
	ONOEOT                        = 0x80000
	OPOST                         = 0x1
	OXTABS                        = 0x40000
	O_ACCMODE                     = 0x23
	O_APPEND                      = 0x8
	O_CIO                         = 0x80
	O_CIOR                        = 0x800000000
	O_CLOEXEC                     = 0x800000
	O_CREAT                       = 0x100
	O_DEFER                       = 0x2000
	O_DELAY                       = 0x4000
	O_DIRECT                      = 0x8000000
	O_DIRECTORY                   = 0x80000
	O_DSYNC                       = 0x400000
	O_EFSOFF                      = 0x400000000
	O_EFSON                       = 0x200000000
	O_EXCL                        = 0x400
	O_EXEC                        = 0x20
	O_LARGEFILE                   = 0x4000000
	O_NDELAY                      = 0x8000
	O_NOCACHE                     = 0x100000
	O_NOCTTY                      = 0x800
	O_NOFOLLOW                    = 0x1000000
	O_NONBLOCK                    = 0x4
	O_NONE                        = 0x3
	O_NSHARE                      = 0x10000
	O_RAW                         = 0x100000000
	O_RDONLY                      = 0x0
	O_RDWR                        = 0x2
	O_RSHARE                      = 0x1000
	O_RSYNC                       = 0x200000
	O_SEARCH                      = 0x20
	O_SNAPSHOT                    = 0x40
	O_SYNC                        = 0x10
	O_TRUNC                       = 0x200
	O_TTY_INIT                    = 0x0
	O_WRONLY                      = 0x1
	PARENB                        = 0x100
	PAREXT                        = 0x100000
	PARMRK                        = 0x8
	PARODD                        = 0x200
	PENDIN                        = 0x20000000
	PRIO_PGRP                     = 0x1
	PRIO_PROCESS                  = 0x0
	PRIO_USER                     = 0x2
	PROT_EXEC                     = 0x4
	PROT_NONE                     = 0x0
	PROT_READ                     = 0x1
	PROT_WRITE                    = 0x2
	PR_64BIT                      = 0x20
	PR_ADDR                       = 0x2
	PR_ARGEXT                     = 0x400
	PR_ATOMIC                     = 0x1
	PR_CONNREQUIRED               = 0x4
	PR_FASTHZ                     = 0x5
	PR_INP                        = 0x40
	PR_INTRLEVEL                  = 0x8000
	PR_MLS                        = 0x100
	PR_MLS_1_LABEL                = 0x200
	PR_NOEOR                      = 0x4000
	PR_RIGHTS                     = 0x10
	PR_SLOWHZ                     = 0x2
	PR_WANTRCVD                   = 0x8
	RLIMIT_AS                     = 0x6
	RLIMIT_CORE                   = 0x4
	RLIMIT_CPU                    = 0x0
	RLIMIT_DATA                   = 0x2
	RLIMIT_FSIZE                  = 0x1
	RLIMIT_NOFILE                 = 0x7
	RLIMIT_NPROC                  = 0x9
	RLIMIT_RSS                    = 0x5
	RLIMIT_STACK                  = 0x3
	RLIM_INFINITY                 = 0x7fffffffffffffff
	RTAX_AUTHOR                   = 0x6
	RTAX_BRD                      = 0x7
	RTAX_DST                      = 0x0
	RTAX_GATEWAY                  = 0x1
	RTAX_GENMASK                  = 0x3
	RTAX_IFA                      = 0x5
	RTAX_IFP                      = 0x4
	RTAX_MAX                      = 0x8
	RTAX_NETMASK                  = 0x2
	RTA_AUTHOR                    = 0x40
	RTA_BRD                       = 0x80
	RTA_DOWNSTREAM                = 0x100
	RTA_DST                       = 0x1
	RTA_GATEWAY                   = 0x2
	RTA_GENMASK                   = 0x8
	RTA_IFA                       = 0x20
	RTA_IFP                       = 0x10
	RTA_NETMASK                   = 0x4
	RTC_IA64                      = 0x3
	RTC_POWER                     = 0x1
	RTC_POWER_PC                  = 0x2
	RTF_ACTIVE_DGD                = 0x1000000
	RTF_BCE                       = 0x80000
	RTF_BLACKHOLE                 = 0x1000
	RTF_BROADCAST                 = 0x400000
	RTF_BUL                       = 0x2000
	RTF_CLONE                     = 0x10000
	RTF_CLONED                    = 0x20000
	RTF_CLONING                   = 0x100
	RTF_DONE                      = 0x40
	RTF_DYNAMIC                   = 0x10
	RTF_FREE_IN_PROG              = 0x4000000
	RTF_GATEWAY                   = 0x2
	RTF_HOST                      = 0x4
	RTF_LLINFO                    = 0x400
	RTF_LOCAL                     = 0x200000
	RTF_MASK                      = 0x80
	RTF_MODIFIED                  = 0x20
	RTF_MULTICAST                 = 0x800000
	RTF_PERMANENT6                = 0x8000000
	RTF_PINNED                    = 0x100000
	RTF_PROTO1                    = 0x8000
	RTF_PROTO2                    = 0x4000
	RTF_PROTO3                    = 0x40000
	RTF_REJECT                    = 0x8
	RTF_SMALLMTU                  = 0x40000
	RTF_STATIC                    = 0x800
	RTF_STOPSRCH                  = 0x2000000
	RTF_UNREACHABLE               = 0x10000000
	RTF_UP                        = 0x1
	RTF_XRESOLVE                  = 0x200
	RTM_ADD                       = 0x1
	RTM_CHANGE                    = 0x3
	RTM_DELADDR                   = 0xd
	RTM_DELETE                    = 0x2
	RTM_EXPIRE                    = 0xf
	RTM_GET                       = 0x4
	RTM_GETNEXT                   = 0x11
	RTM_IFINFO                    = 0xe
	RTM_LOCK                      = 0x8
	RTM_LOSING                    = 0x5
	RTM_MISS                      = 0x7
	RTM_NEWADDR                   = 0xc
	RTM_OLDADD                    = 0x9
	RTM_OLDDEL                    = 0xa
	RTM_REDIRECT                  = 0x6
	RTM_RESOLVE                   = 0xb
	RTM_RTLOST                    = 0x10
	RTM_RTTUNIT                   = 0xf4240
	RTM_SAMEADDR                  = 0x12
	RTM_SET                       = 0x13
	RTM_VERSION                   = 0x2
	RTM_VERSION_GR                = 0x4
	RTM_VERSION_GR_COMPAT         = 0x3
	RTM_VERSION_POLICY            = 0x5
	RTM_VERSION_POLICY_EXT        = 0x6
	RTM_VERSION_POLICY_PRFN       = 0x7
	RTV_EXPIRE                    = 0x4
	RTV_HOPCOUNT                  = 0x2
	RTV_MTU                       = 0x1
	RTV_RPIPE                     = 0x8
	RTV_RTT                       = 0x40
	RTV_RTTVAR                    = 0x80
	RTV_SPIPE                     = 0x10
	RTV_SSTHRESH                  = 0x20
	RUSAGE_CHILDREN               = -0x1
	RUSAGE_SELF                   = 0x0
	RUSAGE_THREAD                 = 0x1
	SCM_RIGHTS                    = 0x1
	SHUT_RD                       = 0x0
	SHUT_RDWR                     = 0x2
	SHUT_WR                       = 0x1
	SIGMAX64                      = 0xff
	SIGQUEUE_MAX                  = 0x20
	SIOCADDIFVIPA                 = 0x20006942
	SIOCADDMTU                    = -0x7ffb9690
	SIOCADDMULTI                  = -0x7fdf96cf
	SIOCADDNETID                  = -0x7fd796a9
	SIOCADDRT                     = -0x7fc78df6
	SIOCAIFADDR                   = -0x7fbf96e6
	SIOCATMARK                    = 0x40047307
	SIOCDARP                      = -0x7fb396e0
	SIOCDELIFVIPA                 = 0x20006943
	SIOCDELMTU                    = -0x7ffb968f
	SIOCDELMULTI                  = -0x7fdf96ce
	SIOCDELPMTU                   = -0x7fd78ff6
	SIOCDELRT                     = -0x7fc78df5
	SIOCDIFADDR                   = -0x7fd796e7
	SIOCDNETOPT                   = -0x3ffe9680
	SIOCDX25XLATE                 = -0x7fd7969b
	SIOCFIFADDR                   = -0x7fdf966d
	SIOCGARP                      = -0x3fb396da
	SIOCGETMTUS                   = 0x2000696f
	SIOCGETSGCNT                  = -0x3feb8acc
	SIOCGETVIFCNT                 = -0x3feb8acd
	SIOCGHIWAT                    = 0x40047301
	SIOCGIFADDR                   = -0x3fd796df
	SIOCGIFADDRS                  = 0x2000698c
	SIOCGIFBAUDRATE               = -0x3fdf9669
	SIOCGIFBRDADDR                = -0x3fd796dd
	SIOCGIFCONF                   = -0x3fef96bb
	SIOCGIFCONFGLOB               = -0x3fef9670
	SIOCGIFDSTADDR                = -0x3fd796de
	SIOCGIFFLAGS                  = -0x3fd796ef
	SIOCGIFGIDLIST                = 0x20006968
	SIOCGIFHWADDR                 = -0x3fab966b
	SIOCGIFMETRIC                 = -0x3fd796e9
	SIOCGIFMTU                    = -0x3fd796aa
	SIOCGIFNETMASK                = -0x3fd796db
	SIOCGIFOPTIONS                = -0x3fd796d6
	SIOCGISNO                     = -0x3fd79695
	SIOCGLOADF                    = -0x3ffb967e
	SIOCGLOWAT                    = 0x40047303
	SIOCGNETOPT                   = -0x3ffe96a5
	SIOCGNETOPT1                  = -0x3fdf967f
	SIOCGNMTUS                    = 0x2000696e
	SIOCGPGRP                     = 0x40047309
	SIOCGSIZIFCONF                = 0x4004696a
	SIOCGSRCFILTER                = -0x3fe796cb
	SIOCGTUNEPHASE                = -0x3ffb9676
	SIOCGX25XLATE                 = -0x3fd7969c
	SIOCIFATTACH                  = -0x7fdf9699
	SIOCIFDETACH                  = -0x7fdf969a
	SIOCIFGETPKEY                 = -0x7fdf969b
	SIOCIF_ATM_DARP               = -0x7fdf9683
	SIOCIF_ATM_DUMPARP            = -0x7fdf9685
	SIOCIF_ATM_GARP               = -0x7fdf9682
	SIOCIF_ATM_IDLE               = -0x7fdf9686
	SIOCIF_ATM_SARP               = -0x7fdf9681
	SIOCIF_ATM_SNMPARP            = -0x7fdf9687
	SIOCIF_ATM_SVC                = -0x7fdf9684
	SIOCIF_ATM_UBR                = -0x7fdf9688
	SIOCIF_DEVHEALTH              = -0x7ffb966c
	SIOCIF_IB_ARP_INCOMP          = -0x7fdf9677
	SIOCIF_IB_ARP_TIMER           = -0x7fdf9678
	SIOCIF_IB_CLEAR_PINFO         = -0x3fdf966f
	SIOCIF_IB_DEL_ARP             = -0x7fdf967f
	SIOCIF_IB_DEL_PINFO           = -0x3fdf9670
	SIOCIF_IB_DUMP_ARP            = -0x7fdf9680
	SIOCIF_IB_GET_ARP             = -0x7fdf967e
	SIOCIF_IB_GET_INFO            = -0x3f879675
	SIOCIF_IB_GET_STATS           = -0x3f879672
	SIOCIF_IB_NOTIFY_ADDR_REM     = -0x3f87966a
	SIOCIF_IB_RESET_STATS         = -0x3f879671
	SIOCIF_IB_RESIZE_CQ           = -0x7fdf9679
	SIOCIF_IB_SET_ARP             = -0x7fdf967d
	SIOCIF_IB_SET_PKEY            = -0x7fdf967c
	SIOCIF_IB_SET_PORT            = -0x7fdf967b
	SIOCIF_IB_SET_QKEY            = -0x7fdf9676
	SIOCIF_IB_SET_QSIZE           = -0x7fdf967a
	SIOCLISTIFVIPA                = 0x20006944
	SIOCSARP                      = -0x7fb396e2
	SIOCSHIWAT                    = 0xffffffff80047300
	SIOCSIFADDR                   = -0x7fd796f4
	SIOCSIFADDRORI                = -0x7fdb9673
	SIOCSIFBRDADDR                = -0x7fd796ed
	SIOCSIFDSTADDR                = -0x7fd796f2
	SIOCSIFFLAGS                  = -0x7fd796f0
	SIOCSIFGIDLIST                = 0x20006969
	SIOCSIFMETRIC                 = -0x7fd796e8
	SIOCSIFMTU                    = -0x7fd796a8
	SIOCSIFNETDUMP                = -0x7fd796e4
	SIOCSIFNETMASK                = -0x7fd796ea
	SIOCSIFOPTIONS                = -0x7fd796d7
	SIOCSIFSUBCHAN                = -0x7fd796e5
	SIOCSISNO                     = -0x7fd79694
	SIOCSLOADF                    = -0x3ffb967d
	SIOCSLOWAT                    = 0xffffffff80047302
	SIOCSNETOPT                   = -0x7ffe96a6
	SIOCSPGRP                     = 0xffffffff80047308
	SIOCSX25XLATE                 = -0x7fd7969d
	SOCK_CONN_DGRAM               = 0x6
	SOCK_DGRAM                    = 0x2
	SOCK_RAW                      = 0x3
	SOCK_RDM                      = 0x4
	SOCK_SEQPACKET                = 0x5
	SOCK_STREAM                   = 0x1
	SOL_SOCKET                    = 0xffff
	SOMAXCONN                     = 0x400
	SO_ACCEPTCONN                 = 0x2
	SO_AUDIT                      = 0x8000
	SO_BROADCAST                  = 0x20
	SO_CKSUMRECV                  = 0x800
	SO_DEBUG                      = 0x1
	SO_DONTROUTE                  = 0x10
	SO_ERROR                      = 0x1007
	SO_KEEPALIVE                  = 0x8
	SO_KERNACCEPT                 = 0x2000
	SO_LINGER                     = 0x80
	SO_NOMULTIPATH                = 0x4000
	SO_NOREUSEADDR                = 0x1000
	SO_OOBINLINE                  = 0x100
	SO_PEERID                     = 0x1009
	SO_RCVBUF                     = 0x1002
	SO_RCVLOWAT                   = 0x1004
	SO_RCVTIMEO                   = 0x1006
	SO_REUSEADDR                  = 0x4
	SO_REUSEPORT                  = 0x200
	SO_SNDBUF                     = 0x1001
	SO_SNDLOWAT                   = 0x1003
	SO_SNDTIMEO                   = 0x1005
	SO_TIMESTAMPNS                = 0x100a
	SO_TYPE                       = 0x1008
	SO_USELOOPBACK                = 0x40
	SO_USE_IFBUFS                 = 0x400
	S_BANDURG                     = 0x400
	S_EMODFMT                     = 0x3c000000
	S_ENFMT                       = 0x400
	S_ERROR                       = 0x100
	S_HANGUP                      = 0x200
	S_HIPRI                       = 0x2
	S_ICRYPTO                     = 0x80000
	S_IEXEC                       = 0x40
	S_IFBLK                       = 0x6000
	S_IFCHR                       = 0x2000
	S_IFDIR                       = 0x4000
	S_IFIFO                       = 0x1000
	S_IFJOURNAL                   = 0x10000
	S_IFLNK                       = 0xa000
	S_IFMPX                       = 0x2200
	S_IFMT                        = 0xf000
	S_IFPDIR                      = 0x4000000
	S_IFPSDIR                     = 0x8000000
	S_IFPSSDIR                    = 0xc000000
	S_IFREG                       = 0x8000
	S_IFSOCK                      = 0xc000
	S_IFSYSEA                     = 0x30000000
	S_INPUT                       = 0x1
	S_IREAD                       = 0x100
	S_IRGRP                       = 0x20
	S_IROTH                       = 0x4
	S_IRUSR                       = 0x100
	S_IRWXG                       = 0x38
	S_IRWXO                       = 0x7
	S_IRWXU                       = 0x1c0
	S_ISGID                       = 0x400
	S_ISUID                       = 0x800
	S_ISVTX                       = 0x200
	S_ITCB                        = 0x1000000
	S_ITP                         = 0x800000
	S_IWGRP                       = 0x10
	S_IWOTH                       = 0x2
	S_IWRITE                      = 0x80
	S_IWUSR                       = 0x80
	S_IXACL                       = 0x2000000
	S_IXATTR                      = 0x40000
	S_IXGRP                       = 0x8
	S_IXINTERFACE                 = 0x100000
	S_IXMOD                       = 0x40000000
	S_IXOTH                       = 0x1
	S_IXUSR                       = 0x40
	S_MSG                         = 0x8
	S_OUTPUT                      = 0x4
	S_RDBAND                      = 0x20
	S_RDNORM                      = 0x10
	S_RESERVED1                   = 0x20000
	S_RESERVED2                   = 0x200000
	S_RESERVED3                   = 0x400000
	S_RESERVED4                   = 0x80000000
	S_RESFMT1                     = 0x10000000
	S_RESFMT10                    = 0x34000000
	S_RESFMT11                    = 0x38000000
	S_RESFMT12                    = 0x3c000000
	S_RESFMT2                     = 0x14000000
	S_RESFMT3                     = 0x18000000
	S_RESFMT4                     = 0x1c000000
	S_RESFMT5                     = 0x20000000
	S_RESFMT6                     = 0x24000000
	S_RESFMT7                     = 0x28000000
	S_RESFMT8                     = 0x2c000000
	S_WRBAND                      = 0x80
	S_WRNORM                      = 0x40
	TAB0                          = 0x0
	TAB1                          = 0x400
	TAB2                          = 0x800
	TAB3                          = 0xc00
	TABDLY                        = 0xc00
	TCFLSH                        = 0x540c
	TCGETA                        = 0x5405
	TCGETS                        = 0x5401
	TCIFLUSH                      = 0x0
	TCIOFF                        = 0x2
	TCIOFLUSH                     = 0x2
	TCION                         = 0x3
	TCOFLUSH                      = 0x1
	TCOOFF                        = 0x0
	TCOON                         = 0x1
	TCP_24DAYS_WORTH_OF_SLOWTICKS = 0x3f4800
	TCP_ACLADD                    = 0x23
	TCP_ACLBIND                   = 0x26
	TCP_ACLCLEAR                  = 0x22
	TCP_ACLDEL                    = 0x24
	TCP_ACLDENY                   = 0x8
	TCP_ACLFLUSH                  = 0x21
	TCP_ACLGID                    = 0x1
	TCP_ACLLS                     = 0x25
	TCP_ACLSUBNET                 = 0x4
	TCP_ACLUID                    = 0x2
	TCP_CWND_DF                   = 0x16
	TCP_CWND_IF                   = 0x15
	TCP_DELAY_ACK_FIN             = 0x2
	TCP_DELAY_ACK_SYN             = 0x1
	TCP_FASTNAME                  = 0x101080a
	TCP_KEEPCNT                   = 0x13
	TCP_KEEPIDLE                  = 0x11
	TCP_KEEPINTVL                 = 0x12
	TCP_LSPRIV                    = 0x29
	TCP_LUID                      = 0x20
	TCP_MAXBURST                  = 0x8
	TCP_MAXDF                     = 0x64
	TCP_MAXIF                     = 0x64
	TCP_MAXSEG                    = 0x2
	TCP_MAXWIN                    = 0xffff
	TCP_MAXWINDOWSCALE            = 0xe
	TCP_MAX_SACK                  = 0x4
	TCP_MSS                       = 0x5b4
	TCP_NODELAY                   = 0x1
	TCP_NODELAYACK                = 0x14
	TCP_NOREDUCE_CWND_EXIT_FRXMT  = 0x19
	TCP_NOREDUCE_CWND_IN_FRXMT    = 0x18
	TCP_NOTENTER_SSTART           = 0x17
	TCP_OPT                       = 0x19
	TCP_RFC1323                   = 0x4
	TCP_SETPRIV                   = 0x27
	TCP_STDURG                    = 0x10
	TCP_TIMESTAMP_OPTLEN          = 0xc
	TCP_UNSETPRIV                 = 0x28
	TCSAFLUSH                     = 0x2
	TCSBRK                        = 0x5409
	TCSETA                        = 0x5406
	TCSETAF                       = 0x5408
	TCSETAW                       = 0x5407
	TCSETS                        = 0x5402
	TCSETSF                       = 0x5404
	TCSETSW                       = 0x5403
	TCXONC                        = 0x540b
	TIMER_ABSTIME                 = 0x3e7
	TIMER_MAX                     = 0x20
	TIOC                          = 0x5400
	TIOCCBRK                      = 0x2000747a
	TIOCCDTR                      = 0x20007478
	TIOCCONS                      = 0xffffffff80047462
	TIOCEXCL                      = 0x2000740d
	TIOCFLUSH                     = 0xffffffff80047410
	TIOCGETC                      = 0x40067412
	TIOCGETD                      = 0x40047400
	TIOCGETP                      = 0x40067408
	TIOCGLTC                      = 0x40067474
	TIOCGPGRP                     = 0x40047477
	TIOCGSID                      = 0x40047448
	TIOCGSIZE                     = 0x40087468
	TIOCGWINSZ                    = 0x40087468
	TIOCHPCL                      = 0x20007402
	TIOCLBIC                      = 0xffffffff8004747e
	TIOCLBIS                      = 0xffffffff8004747f
	TIOCLGET                      = 0x4004747c
	TIOCLSET                      = 0xffffffff8004747d
	TIOCMBIC                      = 0xffffffff8004746b
	TIOCMBIS                      = 0xffffffff8004746c
	TIOCMGET                      = 0x4004746a
	TIOCMIWAIT                    = 0xffffffff80047464
	TIOCMODG                      = 0x40047403
	TIOCMODS                      = 0xffffffff80047404
	TIOCMSET                      = 0xffffffff8004746d
	TIOCM_CAR                     = 0x40
	TIOCM_CD                      = 0x40
	TIOCM_CTS                     = 0x20
	TIOCM_DSR                     = 0x100
	TIOCM_DTR                     = 0x2
	TIOCM_LE                      = 0x1
	TIOCM_RI                      = 0x80
	TIOCM_RNG                     = 0x80
	TIOCM_RTS                     = 0x4
	TIOCM_SR                      = 0x10
	TIOCM_ST                      = 0x8
	TIOCNOTTY                     = 0x20007471
	TIOCNXCL                      = 0x2000740e
	TIOCOUTQ                      = 0x40047473
	TIOCPKT                       = 0xffffffff80047470
	TIOCPKT_DATA                  = 0x0
	TIOCPKT_DOSTOP                = 0x20
	TIOCPKT_FLUSHREAD             = 0x1
	TIOCPKT_FLUSHWRITE            = 0x2
	TIOCPKT_NOSTOP                = 0x10
	TIOCPKT_START                 = 0x8
	TIOCPKT_STOP                  = 0x4
	TIOCREMOTE                    = 0xffffffff80047469
	TIOCSBRK                      = 0x2000747b
	TIOCSDTR                      = 0x20007479
	TIOCSETC                      = 0xffffffff80067411
	TIOCSETD                      = 0xffffffff80047401
	TIOCSETN                      = 0xffffffff8006740a
	TIOCSETP                      = 0xffffffff80067409
	TIOCSLTC                      = 0xffffffff80067475
	TIOCSPGRP                     = 0xffffffff80047476
	TIOCSSIZE                     = 0xffffffff80087467
	TIOCSTART                     = 0x2000746e
	TIOCSTI                       = 0xffffffff80017472
	TIOCSTOP                      = 0x2000746f
	TIOCSWINSZ                    = 0xffffffff80087467
	TIOCUCNTL                     = 0xffffffff80047466
	TOSTOP                        = 0x10000
	UTIME_NOW                     = -0x2
	UTIME_OMIT                    = -0x3
	VDISCRD                       = 0xc
	VDSUSP                        = 0xa
	VEOF                          = 0x4
	VEOL                          = 0x5
	VEOL2                         = 0x6
	VERASE                        = 0x2
	VINTR                         = 0x0
	VKILL                         = 0x3
	VLNEXT                        = 0xe
	VMIN                          = 0x4
	VQUIT                         = 0x1
	VREPRINT                      = 0xb
	VSTART                        = 0x7
	VSTOP                         = 0x8
	VSTRT                         = 0x7
	VSUSP                         = 0x9
	VT0                           = 0x0
	VT1                           = 0x8000
	VTDELAY                       = 0x2000
	VTDLY                         = 0x8000
	VTIME                         = 0x5
	VWERSE                        = 0xd
	WPARSTART                     = 0x1
	WPARSTOP                      = 0x2
	WPARTTYNAME                   = "Global"
	XCASE                         = 0x4
	XTABS                         = 0xc00
	_FDATAFLUSH                   = 0x2000000000
)

// Errors
const (
	E2BIG           = syscall.Errno(0x7)
	EACCES          = syscall.Errno(0xd)
	EADDRINUSE      = syscall.Errno(0x43)
	EADDRNOTAVAIL   = syscall.Errno(0x44)
	EAFNOSUPPORT    = syscall.Errno(0x42)
	EAGAIN          = syscall.Errno(0xb)
	EALREADY        = syscall.Errno(0x38)
	EBADF           = syscall.Errno(0x9)
	EBADMSG         = syscall.Errno(0x78)
	EBUSY           = syscall.Errno(0x10)
	ECANCELED       = syscall.Errno(0x75)
	ECHILD          = syscall.Errno(0xa)
	ECHRNG          = syscall.Errno(0x25)
	ECLONEME        = syscall.Errno(0x52)
	ECONNABORTED    = syscall.Errno(0x48)
	ECONNREFUSED    = syscall.Errno(0x4f)
	ECONNRESET      = syscall.Errno(0x49)
	ECORRUPT        = syscall.Errno(0x59)
	EDEADLK         = syscall.Errno(0x2d)
	EDESTADDREQ     = syscall.Errno(0x3a)
	EDESTADDRREQ    = syscall.Errno(0x3a)
	EDIST           = syscall.Errno(0x35)
	EDOM            = syscall.Errno(0x21)
	EDQUOT          = syscall.Errno(0x58)
	EEXIST          = syscall.Errno(0x11)
	EFAULT          = syscall.Errno(0xe)
	EFBIG           = syscall.Errno(0x1b)
	EFORMAT         = syscall.Errno(0x30)
	EHOSTDOWN       = syscall.Errno(0x50)
	EHOSTUNREACH    = syscall.Errno(0x51)
	EIDRM           = syscall.Errno(0x24)
	EILSEQ          = syscall.Errno(0x74)
	EINPROGRESS     = syscall.Errno(0x37)
	EINTR           = syscall.Errno(0x4)
	EINVAL          = syscall.Errno(0x16)
	EIO             = syscall.Errno(0x5)
	EISCONN         = syscall.Errno(0x4b)
	EISDIR          = syscall.Errno(0x15)
	EL2HLT          = syscall.Errno(0x2c)
	EL2NSYNC        = syscall.Errno(0x26)
	EL3HLT          = syscall.Errno(0x27)
	EL3RST          = syscall.Errno(0x28)
	ELNRNG          = syscall.Errno(0x29)
	ELOOP           = syscall.Errno(0x55)
	EMEDIA          = syscall.Errno(0x6e)
	EMFILE          = syscall.Errno(0x18)
	EMLINK          = syscall.Errno(0x1f)
	EMSGSIZE        = syscall.Errno(0x3b)
	EMULTIHOP       = syscall.Errno(0x7d)
	ENAMETOOLONG    = syscall.Errno(0x56)
	ENETDOWN        = syscall.Errno(0x45)
	ENETRESET       = syscall.Errno(0x47)
	ENETUNREACH     = syscall.Errno(0x46)
	ENFILE          = syscall.Errno(0x17)
	ENOATTR         = syscall.Errno(0x70)
	ENOBUFS         = syscall.Errno(0x4a)
	ENOCONNECT      = syscall.Errno(0x32)
	ENOCSI          = syscall.Errno(0x2b)
	ENODATA         = syscall.Errno(0x7a)
	ENODEV          = syscall.Errno(0x13)
	ENOENT          = syscall.Errno(0x2)
	ENOEXEC         = syscall.Errno(0x8)
	ENOLCK          = syscall.Errno(0x31)
	ENOLINK         = syscall.Errno(0x7e)
	ENOMEM          = syscall.Errno(0xc)
	ENOMSG          = syscall.Errno(0x23)
	ENOPROTOOPT     = syscall.Errno(0x3d)
	ENOSPC          = syscall.Errno(0x1c)
	ENOSR           = syscall.Errno(0x76)
	ENOSTR          = syscall.Errno(0x7b)
	ENOSYS          = syscall.Errno(0x6d)
	ENOTBLK         = syscall.Errno(0xf)
	ENOTCONN        = syscall.Errno(0x4c)
	ENOTDIR         = syscall.Errno(0x14)
	ENOTEMPTY       = syscall.Errno(0x11)
	ENOTREADY       = syscall.Errno(0x2e)
	ENOTRECOVERABLE = syscall.Errno(0x5e)
	ENOTRUST        = syscall.Errno(0x72)
	ENOTSOCK        = syscall.Errno(0x39)
	ENOTSUP         = syscall.Errno(0x7c)
	ENOTTY          = syscall.Errno(0x19)
	ENXIO           = syscall.Errno(0x6)
	EOPNOTSUPP      = syscall.Errno(0x40)
	EOVERFLOW       = syscall.Errno(0x7f)
	EOWNERDEAD      = syscall.Errno(0x5f)
	EPERM           = syscall.Errno(0x1)
	EPFNOSUPPORT    = syscall.Errno(0x41)
	EPIPE           = syscall.Errno(0x20)
	EPROCLIM        = syscall.Errno(0x53)
	EPROTO          = syscall.Errno(0x79)
	EPROTONOSUPPORT = syscall.Errno(0x3e)
	EPROTOTYPE      = syscall.Errno(0x3c)
	ERANGE          = syscall.Errno(0x22)
	EREMOTE         = syscall.Errno(0x5d)
	ERESTART        = syscall.Errno(0x52)
	EROFS           = syscall.Errno(0x1e)
	ESAD            = syscall.Errno(0x71)
	ESHUTDOWN       = syscall.Errno(0x4d)
	ESOCKTNOSUPPORT = syscall.Errno(0x3f)
	ESOFT           = syscall.Errno(0x6f)
	ESPIPE          = syscall.Errno(0x1d)
	ESRCH           = syscall.Errno(0x3)
	ESTALE          = syscall.Errno(0x34)
	ESYSERROR       = syscall.Errno(0x5a)
	ETIME           = syscall.Errno(0x77)
	ETIMEDOUT       = syscall.Errno(0x4e)
	ETOOMANYREFS    = syscall.Errno(0x73)
	ETXTBSY         = syscall.Errno(0x1a)
	EUNATCH         = syscall.Errno(0x2a)
	EUSERS          = syscall.Errno(0x54)
	EWOULDBLOCK     = syscall.Errno(0xb)
	EWRPROTECT      = syscall.Errno(0x2f)
	EXDEV           = syscall.Errno(0x12)
)

// Signals
const (
	SIGABRT     = syscall.Signal(0x6)
	SIGAIO      = syscall.Signal(0x17)
	SIGALRM     = syscall.Signal(0xe)
	SIGALRM1    = syscall.Signal(0x26)
	SIGBUS      = syscall.Signal(0xa)
	SIGCAPI     = syscall.Signal(0x31)
	SIGCHLD     = syscall.Signal(0x14)
	SIGCLD      = syscall.Signal(0x14)
	SIGCONT     = syscall.Signal(0x13)
	SIGCPUFAIL  = syscall.Signal(0x3b)
	SIGDANGER   = syscall.Signal(0x21)
	SIGEMT      = syscall.Signal(0x7)
	SIGFPE      = syscall.Signal(0x8)
	SIGGRANT    = syscall.Signal(0x3c)
	SIGHUP      = syscall.Signal(0x1)
	SIGILL      = syscall.Signal(0x4)
	SIGINT      = syscall.Signal(0x2)
	SIGIO       = syscall.Signal(0x17)
	SIGIOINT    = syscall.Signal(0x10)
	SIGIOT      = syscall.Signal(0x6)
	SIGKAP      = syscall.Signal(0x3c)
	SIGKILL     = syscall.Signal(0x9)
	SIGLOST     = syscall.Signal(0x6)
	SIGMAX      = syscall.Signal(0xff)
	SIGMAX32    = syscall.Signal(0x3f)
	SIGMIGRATE  = syscall.Signal(0x23)
	SIGMSG      = syscall.Signal(0x1b)
	SIGPIPE     = syscall.Signal(0xd)
	SIGPOLL     = syscall.Signal(0x17)
	SIGPRE      = syscall.Signal(0x24)
	SIGPROF     = syscall.Signal(0x20)
	SIGPTY      = syscall.Signal(0x17)
	SIGPWR      = syscall.Signal(0x1d)
	SIGQUIT     = syscall.Signal(0x3)
	SIGRECONFIG = syscall.Signal(0x3a)
	SIGRETRACT  = syscall.Signal(0x3d)
	SIGSAK      = syscall.Signal(0x3f)
	SIGSEGV     = syscall.Signal(0xb)
	SIGSOUND    = syscall.Signal(0x3e)
	SIGSTOP     = syscall.Signal(0x11)
	SIGSYS      = syscall.Signal(0xc)
	SIGSYSERROR = syscall.Signal(0x30)
	SIGTALRM    = syscall.Signal(0x26)
	SIGTERM     = syscall.Signal(0xf)
	SIGTRAP     = syscall.Signal(0x5)
	SIGTSTP     = syscall.Signal(0x12)
	SIGTTIN     = syscall.Signal(0x15)
	SIGTTOU     = syscall.Signal(0x16)
	SIGURG      = syscall.Signal(0x10)
	SIGUSR1     = syscall.Signal(0x1e)
	SIGUSR2     = syscall.Signal(0x1f)
	SIGVIRT     = syscall.Signal(0x25)
	SIGVTALRM   = syscall.Signal(0x22)
	SIGWAITING  = syscall.Signal(0x27)
	SIGWINCH    = syscall.Signal(0x1c)
	SIGXCPU     = syscall.Signal(0x18)
	SIGXFSZ     = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "not owner"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "I/O error"},
	{6, "ENXIO", "no such device or address"},
	{7, "E2BIG", "arg list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file number"},
	{10, "ECHILD", "no child processes"},
	{11, "EWOULDBLOCK", "resource temporarily unavailable"},
	{12, "ENOMEM", "not enough space"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device busy"},
	{17, "ENOTEMPTY", "file exists"},
	{18, "EXDEV", "cross-device link"},
	{19, "ENODEV", "no such device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "file table overflow"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "not a typewriter"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "argument out of domain"},
	{34, "ERANGE", "result too large"},
	{35, "ENOMSG", "no message of desired type"},
	{36, "EIDRM", "identifier removed"},
	{37, "ECHRNG", "channel number out of range"},
	{38, "EL2NSYNC", "level 2 not synchronized"},
	{39, "EL3HLT", "level 3 halted"},
	{40, "EL3RST", "level 3 reset"},
	{41, "ELNRNG", "link number out of range"},
	{42, "EUNATCH", "protocol driver not attached"},
	{43, "ENOCSI", "no CSI structure available"},
	{44, "EL2HLT", "level 2 halted"},
	{45, "EDEADLK", "deadlock condition if locked"},
	{46, "ENOTREADY", "device not ready"},
	{47, "EWRPROTECT", "write-protected media"},
	{48, "EFORMAT", "unformatted or incompatible media"},
	{49, "ENOLCK", "no locks available"},
	{50, "ENOCONNECT", "cannot Establish Connection"},
	{52, "ESTALE", "missing file or filesystem"},
	{53, "EDIST", "requests blocked by Administrator"},
	{55, "EINPROGRESS", "operation now in progress"},
	{56, "EALREADY", "operation already in progress"},
	{57, "ENOTSOCK", "socket operation on non-socket"},
	{58, "EDESTADDREQ", "destination address required"},
	{59, "EMSGSIZE", "message too long"},
	{60, "EPROTOTYPE", "protocol wrong type for socket"},
	{61, "ENOPROTOOPT", "protocol not available"},
	{62, "EPROTONOSUPPORT", "protocol not supported"},
	{63, "ESOCKTNOSUPPORT", "socket type not supported"},
	{64, "EOPNOTSUPP", "operation not supported on socket"},
	{65, "EPFNOSUPPORT", "protocol family not supported"},
	{66, "EAFNOSUPPORT", "addr family not supported by protocol"},
	{67, "EADDRINUSE", "address already in use"},
	{68, "EADDRNOTAVAIL", "can't assign requested address"},
	{69, "ENETDOWN", "network is down"},
	{70, "ENETUNREACH", "network is unreachable"},
	{71, "ENETRESET", "network dropped connection on reset"},
	{72, "ECONNABORTED", "software caused connection abort"},
	{73, "ECONNRESET", "connection reset by peer"},
	{74, "ENOBUFS", "no buffer space available"},
	{75, "EISCONN", "socket is already connected"},
	{76, "ENOTCONN", "socket is not connected"},
	{77, "ESHUTDOWN", "can't send after socket shutdown"},
	{78, "ETIMEDOUT", "connection timed out"},
	{79, "ECONNREFUSED", "connection refused"},
	{80, "EHOSTDOWN", "host is down"},
	{81, "EHOSTUNREACH", "no route to host"},
	{82, "ERESTART", "restart the system call"},
	{83, "EPROCLIM", "too many processes"},
	{84, "EUSERS", "too many users"},
	{85, "ELOOP", "too many levels of symbolic links"},
	{86, "ENAMETOOLONG", "file name too long"},
	{88, "EDQUOT", "disk quota exceeded"},
	{89, "ECORRUPT", "invalid file system control data detected"},
	{90, "ESYSERROR", "for future use "},
	{93, "EREMOTE", "item is not local to host"},
	{94, "ENOTRECOVERABLE", "state not recoverable "},
	{95, "EOWNERDEAD", "previous owner died "},
	{109, "ENOSYS", "function not implemented"},
	{110, "EMEDIA", "media surface error"},
	{111, "ESOFT", "I/O completed, but needs relocation"},
	{112, "ENOATTR", "no attribute found"},
	{113, "ESAD", "security Authentication Denied"},
	{114, "ENOTRUST", "not a Trusted Program"},
	{115, "ETOOMANYREFS", "too many references: can't splice"},
	{116, "EILSEQ", "invalid wide character"},
	{117, "ECANCELED", "asynchronous I/O cancelled"},
	{118, "ENOSR", "out of STREAMS resources"},
	{119, "ETIME", "system call timed out"},
	{120, "EBADMSG", "next message has wrong type"},
	{121, "EPROTO", "error in protocol"},
	{122, "ENODATA", "no message on stream head read q"},
	{123, "ENOSTR", "fd not associated with a stream"},
	{124, "ENOTSUP", "unsupported attribute value"},
	{125, "EMULTIHOP", "multihop is not allowed"},
	{126, "ENOLINK", "the server link has been severed"},
	{127, "EOVERFLOW", "value too large to be stored in data type"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/BPT trap"},
	{6, "SIGIOT", "IOT/Abort trap"},
	{7, "SIGEMT", "EMT trap"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus error"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGSYS", "bad system call"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGURG", "urgent I/O condition"},
	{17, "SIGSTOP", "stopped (signal)"},
	{18, "SIGTSTP", "stopped"},
	{19, "SIGCONT", "continued"},
	{20, "SIGCHLD", "child exited"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGIO", "I/O possible/complete"},
	{24, "SIGXCPU", "cputime limit exceeded"},
	{25, "SIGXFSZ", "filesize limit exceeded"},
	{27, "SIGMSG", "input device data"},
	{28, "SIGWINCH", "window size changes"},
	{29, "SIGPWR", "power-failure"},
	{30, "SIGUSR1", "user defined signal 1"},
	{31, "SIGUSR2", "user defined signal 2"},
	{32, "SIGPROF", "profiling timer expired"},
	{33, "SIGDANGER", "paging space low"},
	{34, "SIGVTALRM", "virtual timer expired"},
	{35, "SIGMIGRATE", "signal 35"},
	{36, "SIGPRE", "signal 36"},
	{37, "SIGVIRT", "signal 37"},
	{38, "SIGTALRM", "signal 38"},
	{39, "SIGWAITING", "signal 39"},
	{48, "SIGSYSERROR", "signal 48"},
	{49, "SIGCAPI", "signal 49"},
	{58, "SIGRECONFIG", "signal 58"},
	{59, "SIGCPUFAIL", "CPU Failure Predicted"},
	{60, "SIGGRANT", "monitor mode granted"},
	{61, "SIGRETRACT", "monitor mode retracted"},
	{62, "SIGSOUND", "sound completed"},
	{63, "SIGMAX32", "secure attention"},
	{255, "SIGMAX", "signal 255"},
}
07070100000E22000081A4000000000000000000000001645E367C00015DE8000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go  // mkerrors.sh -m64
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build amd64 && darwin
// +build amd64,darwin

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -m64 _const.go

package unix

import "syscall"

const (
	AF_APPLETALK                            = 0x10
	AF_CCITT                                = 0xa
	AF_CHAOS                                = 0x5
	AF_CNT                                  = 0x15
	AF_COIP                                 = 0x14
	AF_DATAKIT                              = 0x9
	AF_DECnet                               = 0xc
	AF_DLI                                  = 0xd
	AF_E164                                 = 0x1c
	AF_ECMA                                 = 0x8
	AF_HYLINK                               = 0xf
	AF_IEEE80211                            = 0x25
	AF_IMPLINK                              = 0x3
	AF_INET                                 = 0x2
	AF_INET6                                = 0x1e
	AF_IPX                                  = 0x17
	AF_ISDN                                 = 0x1c
	AF_ISO                                  = 0x7
	AF_LAT                                  = 0xe
	AF_LINK                                 = 0x12
	AF_LOCAL                                = 0x1
	AF_MAX                                  = 0x29
	AF_NATM                                 = 0x1f
	AF_NDRV                                 = 0x1b
	AF_NETBIOS                              = 0x21
	AF_NS                                   = 0x6
	AF_OSI                                  = 0x7
	AF_PPP                                  = 0x22
	AF_PUP                                  = 0x4
	AF_RESERVED_36                          = 0x24
	AF_ROUTE                                = 0x11
	AF_SIP                                  = 0x18
	AF_SNA                                  = 0xb
	AF_SYSTEM                               = 0x20
	AF_SYS_CONTROL                          = 0x2
	AF_UNIX                                 = 0x1
	AF_UNSPEC                               = 0x0
	AF_UTUN                                 = 0x26
	AF_VSOCK                                = 0x28
	ALTWERASE                               = 0x200
	ATTR_BIT_MAP_COUNT                      = 0x5
	ATTR_CMN_ACCESSMASK                     = 0x20000
	ATTR_CMN_ACCTIME                        = 0x1000
	ATTR_CMN_ADDEDTIME                      = 0x10000000
	ATTR_CMN_BKUPTIME                       = 0x2000
	ATTR_CMN_CHGTIME                        = 0x800
	ATTR_CMN_CRTIME                         = 0x200
	ATTR_CMN_DATA_PROTECT_FLAGS             = 0x40000000
	ATTR_CMN_DEVID                          = 0x2
	ATTR_CMN_DOCUMENT_ID                    = 0x100000
	ATTR_CMN_ERROR                          = 0x20000000
	ATTR_CMN_EXTENDED_SECURITY              = 0x400000
	ATTR_CMN_FILEID                         = 0x2000000
	ATTR_CMN_FLAGS                          = 0x40000
	ATTR_CMN_FNDRINFO                       = 0x4000
	ATTR_CMN_FSID                           = 0x4
	ATTR_CMN_FULLPATH                       = 0x8000000
	ATTR_CMN_GEN_COUNT                      = 0x80000
	ATTR_CMN_GRPID                          = 0x10000
	ATTR_CMN_GRPUUID                        = 0x1000000
	ATTR_CMN_MODTIME                        = 0x400
	ATTR_CMN_NAME                           = 0x1
	ATTR_CMN_NAMEDATTRCOUNT                 = 0x80000
	ATTR_CMN_NAMEDATTRLIST                  = 0x100000
	ATTR_CMN_OBJID                          = 0x20
	ATTR_CMN_OBJPERMANENTID                 = 0x40
	ATTR_CMN_OBJTAG                         = 0x10
	ATTR_CMN_OBJTYPE                        = 0x8
	ATTR_CMN_OWNERID                        = 0x8000
	ATTR_CMN_PARENTID                       = 0x4000000
	ATTR_CMN_PAROBJID                       = 0x80
	ATTR_CMN_RETURNED_ATTRS                 = 0x80000000
	ATTR_CMN_SCRIPT                         = 0x100
	ATTR_CMN_SETMASK                        = 0x51c7ff00
	ATTR_CMN_USERACCESS                     = 0x200000
	ATTR_CMN_UUID                           = 0x800000
	ATTR_CMN_VALIDMASK                      = 0xffffffff
	ATTR_CMN_VOLSETMASK                     = 0x6700
	ATTR_FILE_ALLOCSIZE                     = 0x4
	ATTR_FILE_CLUMPSIZE                     = 0x10
	ATTR_FILE_DATAALLOCSIZE                 = 0x400
	ATTR_FILE_DATAEXTENTS                   = 0x800
	ATTR_FILE_DATALENGTH                    = 0x200
	ATTR_FILE_DEVTYPE                       = 0x20
	ATTR_FILE_FILETYPE                      = 0x40
	ATTR_FILE_FORKCOUNT                     = 0x80
	ATTR_FILE_FORKLIST                      = 0x100
	ATTR_FILE_IOBLOCKSIZE                   = 0x8
	ATTR_FILE_LINKCOUNT                     = 0x1
	ATTR_FILE_RSRCALLOCSIZE                 = 0x2000
	ATTR_FILE_RSRCEXTENTS                   = 0x4000
	ATTR_FILE_RSRCLENGTH                    = 0x1000
	ATTR_FILE_SETMASK                       = 0x20
	ATTR_FILE_TOTALSIZE                     = 0x2
	ATTR_FILE_VALIDMASK                     = 0x37ff
	ATTR_VOL_ALLOCATIONCLUMP                = 0x40
	ATTR_VOL_ATTRIBUTES                     = 0x40000000
	ATTR_VOL_CAPABILITIES                   = 0x20000
	ATTR_VOL_DIRCOUNT                       = 0x400
	ATTR_VOL_ENCODINGSUSED                  = 0x10000
	ATTR_VOL_FILECOUNT                      = 0x200
	ATTR_VOL_FSTYPE                         = 0x1
	ATTR_VOL_INFO                           = 0x80000000
	ATTR_VOL_IOBLOCKSIZE                    = 0x80
	ATTR_VOL_MAXOBJCOUNT                    = 0x800
	ATTR_VOL_MINALLOCATION                  = 0x20
	ATTR_VOL_MOUNTEDDEVICE                  = 0x8000
	ATTR_VOL_MOUNTFLAGS                     = 0x4000
	ATTR_VOL_MOUNTPOINT                     = 0x1000
	ATTR_VOL_NAME                           = 0x2000
	ATTR_VOL_OBJCOUNT                       = 0x100
	ATTR_VOL_QUOTA_SIZE                     = 0x10000000
	ATTR_VOL_RESERVED_SIZE                  = 0x20000000
	ATTR_VOL_SETMASK                        = 0x80002000
	ATTR_VOL_SIGNATURE                      = 0x2
	ATTR_VOL_SIZE                           = 0x4
	ATTR_VOL_SPACEAVAIL                     = 0x10
	ATTR_VOL_SPACEFREE                      = 0x8
	ATTR_VOL_SPACEUSED                      = 0x800000
	ATTR_VOL_UUID                           = 0x40000
	ATTR_VOL_VALIDMASK                      = 0xf087ffff
	B0                                      = 0x0
	B110                                    = 0x6e
	B115200                                 = 0x1c200
	B1200                                   = 0x4b0
	B134                                    = 0x86
	B14400                                  = 0x3840
	B150                                    = 0x96
	B1800                                   = 0x708
	B19200                                  = 0x4b00
	B200                                    = 0xc8
	B230400                                 = 0x38400
	B2400                                   = 0x960
	B28800                                  = 0x7080
	B300                                    = 0x12c
	B38400                                  = 0x9600
	B4800                                   = 0x12c0
	B50                                     = 0x32
	B57600                                  = 0xe100
	B600                                    = 0x258
	B7200                                   = 0x1c20
	B75                                     = 0x4b
	B76800                                  = 0x12c00
	B9600                                   = 0x2580
	BIOCFLUSH                               = 0x20004268
	BIOCGBLEN                               = 0x40044266
	BIOCGDLT                                = 0x4004426a
	BIOCGDLTLIST                            = 0xc00c4279
	BIOCGETIF                               = 0x4020426b
	BIOCGHDRCMPLT                           = 0x40044274
	BIOCGRSIG                               = 0x40044272
	BIOCGRTIMEOUT                           = 0x4010426e
	BIOCGSEESENT                            = 0x40044276
	BIOCGSTATS                              = 0x4008426f
	BIOCIMMEDIATE                           = 0x80044270
	BIOCPROMISC                             = 0x20004269
	BIOCSBLEN                               = 0xc0044266
	BIOCSDLT                                = 0x80044278
	BIOCSETF                                = 0x80104267
	BIOCSETFNR                              = 0x8010427e
	BIOCSETIF                               = 0x8020426c
	BIOCSHDRCMPLT                           = 0x80044275
	BIOCSRSIG                               = 0x80044273
	BIOCSRTIMEOUT                           = 0x8010426d
	BIOCSSEESENT                            = 0x80044277
	BIOCVERSION                             = 0x40044271
	BPF_A                                   = 0x10
	BPF_ABS                                 = 0x20
	BPF_ADD                                 = 0x0
	BPF_ALIGNMENT                           = 0x4
	BPF_ALU                                 = 0x4
	BPF_AND                                 = 0x50
	BPF_B                                   = 0x10
	BPF_DIV                                 = 0x30
	BPF_H                                   = 0x8
	BPF_IMM                                 = 0x0
	BPF_IND                                 = 0x40
	BPF_JA                                  = 0x0
	BPF_JEQ                                 = 0x10
	BPF_JGE                                 = 0x30
	BPF_JGT                                 = 0x20
	BPF_JMP                                 = 0x5
	BPF_JSET                                = 0x40
	BPF_K                                   = 0x0
	BPF_LD                                  = 0x0
	BPF_LDX                                 = 0x1
	BPF_LEN                                 = 0x80
	BPF_LSH                                 = 0x60
	BPF_MAJOR_VERSION                       = 0x1
	BPF_MAXBUFSIZE                          = 0x80000
	BPF_MAXINSNS                            = 0x200
	BPF_MEM                                 = 0x60
	BPF_MEMWORDS                            = 0x10
	BPF_MINBUFSIZE                          = 0x20
	BPF_MINOR_VERSION                       = 0x1
	BPF_MISC                                = 0x7
	BPF_MSH                                 = 0xa0
	BPF_MUL                                 = 0x20
	BPF_NEG                                 = 0x80
	BPF_OR                                  = 0x40
	BPF_RELEASE                             = 0x30bb6
	BPF_RET                                 = 0x6
	BPF_RSH                                 = 0x70
	BPF_ST                                  = 0x2
	BPF_STX                                 = 0x3
	BPF_SUB                                 = 0x10
	BPF_TAX                                 = 0x0
	BPF_TXA                                 = 0x80
	BPF_W                                   = 0x0
	BPF_X                                   = 0x8
	BRKINT                                  = 0x2
	BS0                                     = 0x0
	BS1                                     = 0x8000
	BSDLY                                   = 0x8000
	CFLUSH                                  = 0xf
	CLOCAL                                  = 0x8000
	CLOCK_MONOTONIC                         = 0x6
	CLOCK_MONOTONIC_RAW                     = 0x4
	CLOCK_MONOTONIC_RAW_APPROX              = 0x5
	CLOCK_PROCESS_CPUTIME_ID                = 0xc
	CLOCK_REALTIME                          = 0x0
	CLOCK_THREAD_CPUTIME_ID                 = 0x10
	CLOCK_UPTIME_RAW                        = 0x8
	CLOCK_UPTIME_RAW_APPROX                 = 0x9
	CLONE_NOFOLLOW                          = 0x1
	CLONE_NOOWNERCOPY                       = 0x2
	CR0                                     = 0x0
	CR1                                     = 0x1000
	CR2                                     = 0x2000
	CR3                                     = 0x3000
	CRDLY                                   = 0x3000
	CREAD                                   = 0x800
	CRTSCTS                                 = 0x30000
	CS5                                     = 0x0
	CS6                                     = 0x100
	CS7                                     = 0x200
	CS8                                     = 0x300
	CSIZE                                   = 0x300
	CSTART                                  = 0x11
	CSTATUS                                 = 0x14
	CSTOP                                   = 0x13
	CSTOPB                                  = 0x400
	CSUSP                                   = 0x1a
	CTLIOCGINFO                             = 0xc0644e03
	CTL_HW                                  = 0x6
	CTL_KERN                                = 0x1
	CTL_MAXNAME                             = 0xc
	CTL_NET                                 = 0x4
	DLT_A429                                = 0xb8
	DLT_A653_ICM                            = 0xb9
	DLT_AIRONET_HEADER                      = 0x78
	DLT_AOS                                 = 0xde
	DLT_APPLE_IP_OVER_IEEE1394              = 0x8a
	DLT_ARCNET                              = 0x7
	DLT_ARCNET_LINUX                        = 0x81
	DLT_ATM_CLIP                            = 0x13
	DLT_ATM_RFC1483                         = 0xb
	DLT_AURORA                              = 0x7e
	DLT_AX25                                = 0x3
	DLT_AX25_KISS                           = 0xca
	DLT_BACNET_MS_TP                        = 0xa5
	DLT_BLUETOOTH_HCI_H4                    = 0xbb
	DLT_BLUETOOTH_HCI_H4_WITH_PHDR          = 0xc9
	DLT_CAN20B                              = 0xbe
	DLT_CAN_SOCKETCAN                       = 0xe3
	DLT_CHAOS                               = 0x5
	DLT_CHDLC                               = 0x68
	DLT_CISCO_IOS                           = 0x76
	DLT_C_HDLC                              = 0x68
	DLT_C_HDLC_WITH_DIR                     = 0xcd
	DLT_DBUS                                = 0xe7
	DLT_DECT                                = 0xdd
	DLT_DOCSIS                              = 0x8f
	DLT_DVB_CI                              = 0xeb
	DLT_ECONET                              = 0x73
	DLT_EN10MB                              = 0x1
	DLT_EN3MB                               = 0x2
	DLT_ENC                                 = 0x6d
	DLT_ERF                                 = 0xc5
	DLT_ERF_ETH                             = 0xaf
	DLT_ERF_POS                             = 0xb0
	DLT_FC_2                                = 0xe0
	DLT_FC_2_WITH_FRAME_DELIMS              = 0xe1
	DLT_FDDI                                = 0xa
	DLT_FLEXRAY                             = 0xd2
	DLT_FRELAY                              = 0x6b
	DLT_FRELAY_WITH_DIR                     = 0xce
	DLT_GCOM_SERIAL                         = 0xad
	DLT_GCOM_T1E1                           = 0xac
	DLT_GPF_F                               = 0xab
	DLT_GPF_T                               = 0xaa
	DLT_GPRS_LLC                            = 0xa9
	DLT_GSMTAP_ABIS                         = 0xda
	DLT_GSMTAP_UM                           = 0xd9
	DLT_HHDLC                               = 0x79
	DLT_IBM_SN                              = 0x92
	DLT_IBM_SP                              = 0x91
	DLT_IEEE802                             = 0x6
	DLT_IEEE802_11                          = 0x69
	DLT_IEEE802_11_RADIO                    = 0x7f
	DLT_IEEE802_11_RADIO_AVS                = 0xa3
	DLT_IEEE802_15_4                        = 0xc3
	DLT_IEEE802_15_4_LINUX                  = 0xbf
	DLT_IEEE802_15_4_NOFCS                  = 0xe6
	DLT_IEEE802_15_4_NONASK_PHY             = 0xd7
	DLT_IEEE802_16_MAC_CPS                  = 0xbc
	DLT_IEEE802_16_MAC_CPS_RADIO            = 0xc1
	DLT_IPFILTER                            = 0x74
	DLT_IPMB                                = 0xc7
	DLT_IPMB_LINUX                          = 0xd1
	DLT_IPNET                               = 0xe2
	DLT_IPOIB                               = 0xf2
	DLT_IPV4                                = 0xe4
	DLT_IPV6                                = 0xe5
	DLT_IP_OVER_FC                          = 0x7a
	DLT_JUNIPER_ATM1                        = 0x89
	DLT_JUNIPER_ATM2                        = 0x87
	DLT_JUNIPER_ATM_CEMIC                   = 0xee
	DLT_JUNIPER_CHDLC                       = 0xb5
	DLT_JUNIPER_ES                          = 0x84
	DLT_JUNIPER_ETHER                       = 0xb2
	DLT_JUNIPER_FIBRECHANNEL                = 0xea
	DLT_JUNIPER_FRELAY                      = 0xb4
	DLT_JUNIPER_GGSN                        = 0x85
	DLT_JUNIPER_ISM                         = 0xc2
	DLT_JUNIPER_MFR                         = 0x86
	DLT_JUNIPER_MLFR                        = 0x83
	DLT_JUNIPER_MLPPP                       = 0x82
	DLT_JUNIPER_MONITOR                     = 0xa4
	DLT_JUNIPER_PIC_PEER                    = 0xae
	DLT_JUNIPER_PPP                         = 0xb3
	DLT_JUNIPER_PPPOE                       = 0xa7
	DLT_JUNIPER_PPPOE_ATM                   = 0xa8
	DLT_JUNIPER_SERVICES                    = 0x88
	DLT_JUNIPER_SRX_E2E                     = 0xe9
	DLT_JUNIPER_ST                          = 0xc8
	DLT_JUNIPER_VP                          = 0xb7
	DLT_JUNIPER_VS                          = 0xe8
	DLT_LAPB_WITH_DIR                       = 0xcf
	DLT_LAPD                                = 0xcb
	DLT_LIN                                 = 0xd4
	DLT_LINUX_EVDEV                         = 0xd8
	DLT_LINUX_IRDA                          = 0x90
	DLT_LINUX_LAPD                          = 0xb1
	DLT_LINUX_PPP_WITHDIRECTION             = 0xa6
	DLT_LINUX_SLL                           = 0x71
	DLT_LOOP                                = 0x6c
	DLT_LTALK                               = 0x72
	DLT_MATCHING_MAX                        = 0x10a
	DLT_MATCHING_MIN                        = 0x68
	DLT_MFR                                 = 0xb6
	DLT_MOST                                = 0xd3
	DLT_MPEG_2_TS                           = 0xf3
	DLT_MPLS                                = 0xdb
	DLT_MTP2                                = 0x8c
	DLT_MTP2_WITH_PHDR                      = 0x8b
	DLT_MTP3                                = 0x8d
	DLT_MUX27010                            = 0xec
	DLT_NETANALYZER                         = 0xf0
	DLT_NETANALYZER_TRANSPARENT             = 0xf1
	DLT_NFC_LLCP                            = 0xf5
	DLT_NFLOG                               = 0xef
	DLT_NG40                                = 0xf4
	DLT_NULL                                = 0x0
	DLT_PCI_EXP                             = 0x7d
	DLT_PFLOG                               = 0x75
	DLT_PFSYNC                              = 0x12
	DLT_PPI                                 = 0xc0
	DLT_PPP                                 = 0x9
	DLT_PPP_BSDOS                           = 0x10
	DLT_PPP_ETHER                           = 0x33
	DLT_PPP_PPPD                            = 0xa6
	DLT_PPP_SERIAL                          = 0x32
	DLT_PPP_WITH_DIR                        = 0xcc
	DLT_PPP_WITH_DIRECTION                  = 0xa6
	DLT_PRISM_HEADER                        = 0x77
	DLT_PRONET                              = 0x4
	DLT_RAIF1                               = 0xc6
	DLT_RAW                                 = 0xc
	DLT_RIO                                 = 0x7c
	DLT_SCCP                                = 0x8e
	DLT_SITA                                = 0xc4
	DLT_SLIP                                = 0x8
	DLT_SLIP_BSDOS                          = 0xf
	DLT_STANAG_5066_D_PDU                   = 0xed
	DLT_SUNATM                              = 0x7b
	DLT_SYMANTEC_FIREWALL                   = 0x63
	DLT_TZSP                                = 0x80
	DLT_USB                                 = 0xba
	DLT_USB_DARWIN                          = 0x10a
	DLT_USB_LINUX                           = 0xbd
	DLT_USB_LINUX_MMAPPED                   = 0xdc
	DLT_USER0                               = 0x93
	DLT_USER1                               = 0x94
	DLT_USER10                              = 0x9d
	DLT_USER11                              = 0x9e
	DLT_USER12                              = 0x9f
	DLT_USER13                              = 0xa0
	DLT_USER14                              = 0xa1
	DLT_USER15                              = 0xa2
	DLT_USER2                               = 0x95
	DLT_USER3                               = 0x96
	DLT_USER4                               = 0x97
	DLT_USER5                               = 0x98
	DLT_USER6                               = 0x99
	DLT_USER7                               = 0x9a
	DLT_USER8                               = 0x9b
	DLT_USER9                               = 0x9c
	DLT_WIHART                              = 0xdf
	DLT_X2E_SERIAL                          = 0xd5
	DLT_X2E_XORAYA                          = 0xd6
	DT_BLK                                  = 0x6
	DT_CHR                                  = 0x2
	DT_DIR                                  = 0x4
	DT_FIFO                                 = 0x1
	DT_LNK                                  = 0xa
	DT_REG                                  = 0x8
	DT_SOCK                                 = 0xc
	DT_UNKNOWN                              = 0x0
	DT_WHT                                  = 0xe
	ECHO                                    = 0x8
	ECHOCTL                                 = 0x40
	ECHOE                                   = 0x2
	ECHOK                                   = 0x4
	ECHOKE                                  = 0x1
	ECHONL                                  = 0x10
	ECHOPRT                                 = 0x20
	EVFILT_AIO                              = -0x3
	EVFILT_EXCEPT                           = -0xf
	EVFILT_FS                               = -0x9
	EVFILT_MACHPORT                         = -0x8
	EVFILT_PROC                             = -0x5
	EVFILT_READ                             = -0x1
	EVFILT_SIGNAL                           = -0x6
	EVFILT_SYSCOUNT                         = 0x11
	EVFILT_THREADMARKER                     = 0x11
	EVFILT_TIMER                            = -0x7
	EVFILT_USER                             = -0xa
	EVFILT_VM                               = -0xc
	EVFILT_VNODE                            = -0x4
	EVFILT_WRITE                            = -0x2
	EV_ADD                                  = 0x1
	EV_CLEAR                                = 0x20
	EV_DELETE                               = 0x2
	EV_DISABLE                              = 0x8
	EV_DISPATCH                             = 0x80
	EV_DISPATCH2                            = 0x180
	EV_ENABLE                               = 0x4
	EV_EOF                                  = 0x8000
	EV_ERROR                                = 0x4000
	EV_FLAG0                                = 0x1000
	EV_FLAG1                                = 0x2000
	EV_ONESHOT                              = 0x10
	EV_OOBAND                               = 0x2000
	EV_POLL                                 = 0x1000
	EV_RECEIPT                              = 0x40
	EV_SYSFLAGS                             = 0xf000
	EV_UDATA_SPECIFIC                       = 0x100
	EV_VANISHED                             = 0x200
	EXTA                                    = 0x4b00
	EXTB                                    = 0x9600
	EXTPROC                                 = 0x800
	FD_CLOEXEC                              = 0x1
	FD_SETSIZE                              = 0x400
	FF0                                     = 0x0
	FF1                                     = 0x4000
	FFDLY                                   = 0x4000
	FLUSHO                                  = 0x800000
	FSOPT_ATTR_CMN_EXTENDED                 = 0x20
	FSOPT_NOFOLLOW                          = 0x1
	FSOPT_NOINMEMUPDATE                     = 0x2
	FSOPT_PACK_INVAL_ATTRS                  = 0x8
	FSOPT_REPORT_FULLSIZE                   = 0x4
	FSOPT_RETURN_REALDEV                    = 0x200
	F_ADDFILESIGS                           = 0x3d
	F_ADDFILESIGS_FOR_DYLD_SIM              = 0x53
	F_ADDFILESIGS_INFO                      = 0x67
	F_ADDFILESIGS_RETURN                    = 0x61
	F_ADDFILESUPPL                          = 0x68
	F_ADDSIGS                               = 0x3b
	F_ALLOCATEALL                           = 0x4
	F_ALLOCATECONTIG                        = 0x2
	F_BARRIERFSYNC                          = 0x55
	F_CHECK_LV                              = 0x62
	F_CHKCLEAN                              = 0x29
	F_DUPFD                                 = 0x0
	F_DUPFD_CLOEXEC                         = 0x43
	F_FINDSIGS                              = 0x4e
	F_FLUSH_DATA                            = 0x28
	F_FREEZE_FS                             = 0x35
	F_FULLFSYNC                             = 0x33
	F_GETCODEDIR                            = 0x48
	F_GETFD                                 = 0x1
	F_GETFL                                 = 0x3
	F_GETLK                                 = 0x7
	F_GETLKPID                              = 0x42
	F_GETNOSIGPIPE                          = 0x4a
	F_GETOWN                                = 0x5
	F_GETPATH                               = 0x32
	F_GETPATH_MTMINFO                       = 0x47
	F_GETPATH_NOFIRMLINK                    = 0x66
	F_GETPROTECTIONCLASS                    = 0x3f
	F_GETPROTECTIONLEVEL                    = 0x4d
	F_GETSIGSINFO                           = 0x69
	F_GLOBAL_NOCACHE                        = 0x37
	F_LOG2PHYS                              = 0x31
	F_LOG2PHYS_EXT                          = 0x41
	F_NOCACHE                               = 0x30
	F_NODIRECT                              = 0x3e
	F_OK                                    = 0x0
	F_PATHPKG_CHECK                         = 0x34
	F_PEOFPOSMODE                           = 0x3
	F_PREALLOCATE                           = 0x2a
	F_PUNCHHOLE                             = 0x63
	F_RDADVISE                              = 0x2c
	F_RDAHEAD                               = 0x2d
	F_RDLCK                                 = 0x1
	F_SETBACKINGSTORE                       = 0x46
	F_SETFD                                 = 0x2
	F_SETFL                                 = 0x4
	F_SETLK                                 = 0x8
	F_SETLKW                                = 0x9
	F_SETLKWTIMEOUT                         = 0xa
	F_SETNOSIGPIPE                          = 0x49
	F_SETOWN                                = 0x6
	F_SETPROTECTIONCLASS                    = 0x40
	F_SETSIZE                               = 0x2b
	F_SINGLE_WRITER                         = 0x4c
	F_SPECULATIVE_READ                      = 0x65
	F_THAW_FS                               = 0x36
	F_TRANSCODEKEY                          = 0x4b
	F_TRIM_ACTIVE_FILE                      = 0x64
	F_UNLCK                                 = 0x2
	F_VOLPOSMODE                            = 0x4
	F_WRLCK                                 = 0x3
	HUPCL                                   = 0x4000
	HW_MACHINE                              = 0x1
	ICANON                                  = 0x100
	ICMP6_FILTER                            = 0x12
	ICRNL                                   = 0x100
	IEXTEN                                  = 0x400
	IFF_ALLMULTI                            = 0x200
	IFF_ALTPHYS                             = 0x4000
	IFF_BROADCAST                           = 0x2
	IFF_DEBUG                               = 0x4
	IFF_LINK0                               = 0x1000
	IFF_LINK1                               = 0x2000
	IFF_LINK2                               = 0x4000
	IFF_LOOPBACK                            = 0x8
	IFF_MULTICAST                           = 0x8000
	IFF_NOARP                               = 0x80
	IFF_NOTRAILERS                          = 0x20
	IFF_OACTIVE                             = 0x400
	IFF_POINTOPOINT                         = 0x10
	IFF_PROMISC                             = 0x100
	IFF_RUNNING                             = 0x40
	IFF_SIMPLEX                             = 0x800
	IFF_UP                                  = 0x1
	IFNAMSIZ                                = 0x10
	IFT_1822                                = 0x2
	IFT_6LOWPAN                             = 0x40
	IFT_AAL5                                = 0x31
	IFT_ARCNET                              = 0x23
	IFT_ARCNETPLUS                          = 0x24
	IFT_ATM                                 = 0x25
	IFT_BRIDGE                              = 0xd1
	IFT_CARP                                = 0xf8
	IFT_CELLULAR                            = 0xff
	IFT_CEPT                                = 0x13
	IFT_DS3                                 = 0x1e
	IFT_ENC                                 = 0xf4
	IFT_EON                                 = 0x19
	IFT_ETHER                               = 0x6
	IFT_FAITH                               = 0x38
	IFT_FDDI                                = 0xf
	IFT_FRELAY                              = 0x20
	IFT_FRELAYDCE                           = 0x2c
	IFT_GIF                                 = 0x37
	IFT_HDH1822                             = 0x3
	IFT_HIPPI                               = 0x2f
	IFT_HSSI                                = 0x2e
	IFT_HY                                  = 0xe
	IFT_IEEE1394                            = 0x90
	IFT_IEEE8023ADLAG                       = 0x88
	IFT_ISDNBASIC                           = 0x14
	IFT_ISDNPRIMARY                         = 0x15
	IFT_ISO88022LLC                         = 0x29
	IFT_ISO88023                            = 0x7
	IFT_ISO88024                            = 0x8
	IFT_ISO88025                            = 0x9
	IFT_ISO88026                            = 0xa
	IFT_L2VLAN                              = 0x87
	IFT_LAPB                                = 0x10
	IFT_LOCALTALK                           = 0x2a
	IFT_LOOP                                = 0x18
	IFT_MIOX25                              = 0x26
	IFT_MODEM                               = 0x30
	IFT_NSIP                                = 0x1b
	IFT_OTHER                               = 0x1
	IFT_P10                                 = 0xc
	IFT_P80                                 = 0xd
	IFT_PARA                                = 0x22
	IFT_PDP                                 = 0xff
	IFT_PFLOG                               = 0xf5
	IFT_PFSYNC                              = 0xf6
	IFT_PKTAP                               = 0xfe
	IFT_PPP                                 = 0x17
	IFT_PROPMUX                             = 0x36
	IFT_PROPVIRTUAL                         = 0x35
	IFT_PTPSERIAL                           = 0x16
	IFT_RS232                               = 0x21
	IFT_SDLC                                = 0x11
	IFT_SIP                                 = 0x1f
	IFT_SLIP                                = 0x1c
	IFT_SMDSDXI                             = 0x2b
	IFT_SMDSICIP                            = 0x34
	IFT_SONET                               = 0x27
	IFT_SONETPATH                           = 0x32
	IFT_SONETVT                             = 0x33
	IFT_STARLAN                             = 0xb
	IFT_STF                                 = 0x39
	IFT_T1                                  = 0x12
	IFT_ULTRA                               = 0x1d
	IFT_V35                                 = 0x2d
	IFT_X25                                 = 0x5
	IFT_X25DDN                              = 0x4
	IFT_X25PLE                              = 0x28
	IFT_XETHER                              = 0x1a
	IGNBRK                                  = 0x1
	IGNCR                                   = 0x80
	IGNPAR                                  = 0x4
	IMAXBEL                                 = 0x2000
	INLCR                                   = 0x40
	INPCK                                   = 0x10
	IN_CLASSA_HOST                          = 0xffffff
	IN_CLASSA_MAX                           = 0x80
	IN_CLASSA_NET                           = 0xff000000
	IN_CLASSA_NSHIFT                        = 0x18
	IN_CLASSB_HOST                          = 0xffff
	IN_CLASSB_MAX                           = 0x10000
	IN_CLASSB_NET                           = 0xffff0000
	IN_CLASSB_NSHIFT                        = 0x10
	IN_CLASSC_HOST                          = 0xff
	IN_CLASSC_NET                           = 0xffffff00
	IN_CLASSC_NSHIFT                        = 0x8
	IN_CLASSD_HOST                          = 0xfffffff
	IN_CLASSD_NET                           = 0xf0000000
	IN_CLASSD_NSHIFT                        = 0x1c
	IN_LINKLOCALNETNUM                      = 0xa9fe0000
	IN_LOOPBACKNET                          = 0x7f
	IOCTL_VM_SOCKETS_GET_LOCAL_CID          = 0x400473d1
	IPPROTO_3PC                             = 0x22
	IPPROTO_ADFS                            = 0x44
	IPPROTO_AH                              = 0x33
	IPPROTO_AHIP                            = 0x3d
	IPPROTO_APES                            = 0x63
	IPPROTO_ARGUS                           = 0xd
	IPPROTO_AX25                            = 0x5d
	IPPROTO_BHA                             = 0x31
	IPPROTO_BLT                             = 0x1e
	IPPROTO_BRSATMON                        = 0x4c
	IPPROTO_CFTP                            = 0x3e
	IPPROTO_CHAOS                           = 0x10
	IPPROTO_CMTP                            = 0x26
	IPPROTO_CPHB                            = 0x49
	IPPROTO_CPNX                            = 0x48
	IPPROTO_DDP                             = 0x25
	IPPROTO_DGP                             = 0x56
	IPPROTO_DIVERT                          = 0xfe
	IPPROTO_DONE                            = 0x101
	IPPROTO_DSTOPTS                         = 0x3c
	IPPROTO_EGP                             = 0x8
	IPPROTO_EMCON                           = 0xe
	IPPROTO_ENCAP                           = 0x62
	IPPROTO_EON                             = 0x50
	IPPROTO_ESP                             = 0x32
	IPPROTO_ETHERIP                         = 0x61
	IPPROTO_FRAGMENT                        = 0x2c
	IPPROTO_GGP                             = 0x3
	IPPROTO_GMTP                            = 0x64
	IPPROTO_GRE                             = 0x2f
	IPPROTO_HELLO                           = 0x3f
	IPPROTO_HMP                             = 0x14
	IPPROTO_HOPOPTS                         = 0x0
	IPPROTO_ICMP                            = 0x1
	IPPROTO_ICMPV6                          = 0x3a
	IPPROTO_IDP                             = 0x16
	IPPROTO_IDPR                            = 0x23
	IPPROTO_IDRP                            = 0x2d
	IPPROTO_IGMP                            = 0x2
	IPPROTO_IGP                             = 0x55
	IPPROTO_IGRP                            = 0x58
	IPPROTO_IL                              = 0x28
	IPPROTO_INLSP                           = 0x34
	IPPROTO_INP                             = 0x20
	IPPROTO_IP                              = 0x0
	IPPROTO_IPCOMP                          = 0x6c
	IPPROTO_IPCV                            = 0x47
	IPPROTO_IPEIP                           = 0x5e
	IPPROTO_IPIP                            = 0x4
	IPPROTO_IPPC                            = 0x43
	IPPROTO_IPV4                            = 0x4
	IPPROTO_IPV6                            = 0x29
	IPPROTO_IRTP                            = 0x1c
	IPPROTO_KRYPTOLAN                       = 0x41
	IPPROTO_LARP                            = 0x5b
	IPPROTO_LEAF1                           = 0x19
	IPPROTO_LEAF2                           = 0x1a
	IPPROTO_MAX                             = 0x100
	IPPROTO_MAXID                           = 0x34
	IPPROTO_MEAS                            = 0x13
	IPPROTO_MHRP                            = 0x30
	IPPROTO_MICP                            = 0x5f
	IPPROTO_MTP                             = 0x5c
	IPPROTO_MUX                             = 0x12
	IPPROTO_ND                              = 0x4d
	IPPROTO_NHRP                            = 0x36
	IPPROTO_NONE                            = 0x3b
	IPPROTO_NSP                             = 0x1f
	IPPROTO_NVPII                           = 0xb
	IPPROTO_OSPFIGP                         = 0x59
	IPPROTO_PGM                             = 0x71
	IPPROTO_PIGP                            = 0x9
	IPPROTO_PIM                             = 0x67
	IPPROTO_PRM                             = 0x15
	IPPROTO_PUP                             = 0xc
	IPPROTO_PVP                             = 0x4b
	IPPROTO_RAW                             = 0xff
	IPPROTO_RCCMON                          = 0xa
	IPPROTO_RDP                             = 0x1b
	IPPROTO_ROUTING                         = 0x2b
	IPPROTO_RSVP                            = 0x2e
	IPPROTO_RVD                             = 0x42
	IPPROTO_SATEXPAK                        = 0x40
	IPPROTO_SATMON                          = 0x45
	IPPROTO_SCCSP                           = 0x60
	IPPROTO_SCTP                            = 0x84
	IPPROTO_SDRP                            = 0x2a
	IPPROTO_SEP                             = 0x21
	IPPROTO_SRPC                            = 0x5a
	IPPROTO_ST                              = 0x7
	IPPROTO_SVMTP                           = 0x52
	IPPROTO_SWIPE                           = 0x35
	IPPROTO_TCF                             = 0x57
	IPPROTO_TCP                             = 0x6
	IPPROTO_TP                              = 0x1d
	IPPROTO_TPXX                            = 0x27
	IPPROTO_TRUNK1                          = 0x17
	IPPROTO_TRUNK2                          = 0x18
	IPPROTO_TTP                             = 0x54
	IPPROTO_UDP                             = 0x11
	IPPROTO_VINES                           = 0x53
	IPPROTO_VISA                            = 0x46
	IPPROTO_VMTP                            = 0x51
	IPPROTO_WBEXPAK                         = 0x4f
	IPPROTO_WBMON                           = 0x4e
	IPPROTO_WSN                             = 0x4a
	IPPROTO_XNET                            = 0xf
	IPPROTO_XTP                             = 0x24
	IPV6_2292DSTOPTS                        = 0x17
	IPV6_2292HOPLIMIT                       = 0x14
	IPV6_2292HOPOPTS                        = 0x16
	IPV6_2292NEXTHOP                        = 0x15
	IPV6_2292PKTINFO                        = 0x13
	IPV6_2292PKTOPTIONS                     = 0x19
	IPV6_2292RTHDR                          = 0x18
	IPV6_3542DSTOPTS                        = 0x32
	IPV6_3542HOPLIMIT                       = 0x2f
	IPV6_3542HOPOPTS                        = 0x31
	IPV6_3542NEXTHOP                        = 0x30
	IPV6_3542PKTINFO                        = 0x2e
	IPV6_3542RTHDR                          = 0x33
	IPV6_ADDR_MC_FLAGS_PREFIX               = 0x20
	IPV6_ADDR_MC_FLAGS_TRANSIENT            = 0x10
	IPV6_ADDR_MC_FLAGS_UNICAST_BASED        = 0x30
	IPV6_AUTOFLOWLABEL                      = 0x3b
	IPV6_BINDV6ONLY                         = 0x1b
	IPV6_BOUND_IF                           = 0x7d
	IPV6_CHECKSUM                           = 0x1a
	IPV6_DEFAULT_MULTICAST_HOPS             = 0x1
	IPV6_DEFAULT_MULTICAST_LOOP             = 0x1
	IPV6_DEFHLIM                            = 0x40
	IPV6_DONTFRAG                           = 0x3e
	IPV6_DSTOPTS                            = 0x32
	IPV6_FAITH                              = 0x1d
	IPV6_FLOWINFO_MASK                      = 0xffffff0f
	IPV6_FLOWLABEL_MASK                     = 0xffff0f00
	IPV6_FLOW_ECN_MASK                      = 0x3000
	IPV6_FRAGTTL                            = 0x3c
	IPV6_FW_ADD                             = 0x1e
	IPV6_FW_DEL                             = 0x1f
	IPV6_FW_FLUSH                           = 0x20
	IPV6_FW_GET                             = 0x22
	IPV6_FW_ZERO                            = 0x21
	IPV6_HLIMDEC                            = 0x1
	IPV6_HOPLIMIT                           = 0x2f
	IPV6_HOPOPTS                            = 0x31
	IPV6_IPSEC_POLICY                       = 0x1c
	IPV6_JOIN_GROUP                         = 0xc
	IPV6_LEAVE_GROUP                        = 0xd
	IPV6_MAXHLIM                            = 0xff
	IPV6_MAXOPTHDR                          = 0x800
	IPV6_MAXPACKET                          = 0xffff
	IPV6_MAX_GROUP_SRC_FILTER               = 0x200
	IPV6_MAX_MEMBERSHIPS                    = 0xfff
	IPV6_MAX_SOCK_SRC_FILTER                = 0x80
	IPV6_MIN_MEMBERSHIPS                    = 0x1f
	IPV6_MMTU                               = 0x500
	IPV6_MSFILTER                           = 0x4a
	IPV6_MULTICAST_HOPS                     = 0xa
	IPV6_MULTICAST_IF                       = 0x9
	IPV6_MULTICAST_LOOP                     = 0xb
	IPV6_NEXTHOP                            = 0x30
	IPV6_PATHMTU                            = 0x2c
	IPV6_PKTINFO                            = 0x2e
	IPV6_PORTRANGE                          = 0xe
	IPV6_PORTRANGE_DEFAULT                  = 0x0
	IPV6_PORTRANGE_HIGH                     = 0x1
	IPV6_PORTRANGE_LOW                      = 0x2
	IPV6_PREFER_TEMPADDR                    = 0x3f
	IPV6_RECVDSTOPTS                        = 0x28
	IPV6_RECVHOPLIMIT                       = 0x25
	IPV6_RECVHOPOPTS                        = 0x27
	IPV6_RECVPATHMTU                        = 0x2b
	IPV6_RECVPKTINFO                        = 0x3d
	IPV6_RECVRTHDR                          = 0x26
	IPV6_RECVTCLASS                         = 0x23
	IPV6_RTHDR                              = 0x33
	IPV6_RTHDRDSTOPTS                       = 0x39
	IPV6_RTHDR_LOOSE                        = 0x0
	IPV6_RTHDR_STRICT                       = 0x1
	IPV6_RTHDR_TYPE_0                       = 0x0
	IPV6_SOCKOPT_RESERVED1                  = 0x3
	IPV6_TCLASS                             = 0x24
	IPV6_UNICAST_HOPS                       = 0x4
	IPV6_USE_MIN_MTU                        = 0x2a
	IPV6_V6ONLY                             = 0x1b
	IPV6_VERSION                            = 0x60
	IPV6_VERSION_MASK                       = 0xf0
	IP_ADD_MEMBERSHIP                       = 0xc
	IP_ADD_SOURCE_MEMBERSHIP                = 0x46
	IP_BLOCK_SOURCE                         = 0x48
	IP_BOUND_IF                             = 0x19
	IP_DEFAULT_MULTICAST_LOOP               = 0x1
	IP_DEFAULT_MULTICAST_TTL                = 0x1
	IP_DF                                   = 0x4000
	IP_DONTFRAG                             = 0x1c
	IP_DROP_MEMBERSHIP                      = 0xd
	IP_DROP_SOURCE_MEMBERSHIP               = 0x47
	IP_DUMMYNET_CONFIGURE                   = 0x3c
	IP_DUMMYNET_DEL                         = 0x3d
	IP_DUMMYNET_FLUSH                       = 0x3e
	IP_DUMMYNET_GET                         = 0x40
	IP_FAITH                                = 0x16
	IP_FW_ADD                               = 0x28
	IP_FW_DEL                               = 0x29
	IP_FW_FLUSH                             = 0x2a
	IP_FW_GET                               = 0x2c
	IP_FW_RESETLOG                          = 0x2d
	IP_FW_ZERO                              = 0x2b
	IP_HDRINCL                              = 0x2
	IP_IPSEC_POLICY                         = 0x15
	IP_MAXPACKET                            = 0xffff
	IP_MAX_GROUP_SRC_FILTER                 = 0x200
	IP_MAX_MEMBERSHIPS                      = 0xfff
	IP_MAX_SOCK_MUTE_FILTER                 = 0x80
	IP_MAX_SOCK_SRC_FILTER                  = 0x80
	IP_MF                                   = 0x2000
	IP_MIN_MEMBERSHIPS                      = 0x1f
	IP_MSFILTER                             = 0x4a
	IP_MSS                                  = 0x240
	IP_MULTICAST_IF                         = 0x9
	IP_MULTICAST_IFINDEX                    = 0x42
	IP_MULTICAST_LOOP                       = 0xb
	IP_MULTICAST_TTL                        = 0xa
	IP_MULTICAST_VIF                        = 0xe
	IP_NAT__XXX                             = 0x37
	IP_OFFMASK                              = 0x1fff
	IP_OLD_FW_ADD                           = 0x32
	IP_OLD_FW_DEL                           = 0x33
	IP_OLD_FW_FLUSH                         = 0x34
	IP_OLD_FW_GET                           = 0x36
	IP_OLD_FW_RESETLOG                      = 0x38
	IP_OLD_FW_ZERO                          = 0x35
	IP_OPTIONS                              = 0x1
	IP_PKTINFO                              = 0x1a
	IP_PORTRANGE                            = 0x13
	IP_PORTRANGE_DEFAULT                    = 0x0
	IP_PORTRANGE_HIGH                       = 0x1
	IP_PORTRANGE_LOW                        = 0x2
	IP_RECVDSTADDR                          = 0x7
	IP_RECVIF                               = 0x14
	IP_RECVOPTS                             = 0x5
	IP_RECVPKTINFO                          = 0x1a
	IP_RECVRETOPTS                          = 0x6
	IP_RECVTOS                              = 0x1b
	IP_RECVTTL                              = 0x18
	IP_RETOPTS                              = 0x8
	IP_RF                                   = 0x8000
	IP_RSVP_OFF                             = 0x10
	IP_RSVP_ON                              = 0xf
	IP_RSVP_VIF_OFF                         = 0x12
	IP_RSVP_VIF_ON                          = 0x11
	IP_STRIPHDR                             = 0x17
	IP_TOS                                  = 0x3
	IP_TRAFFIC_MGT_BACKGROUND               = 0x41
	IP_TTL                                  = 0x4
	IP_UNBLOCK_SOURCE                       = 0x49
	ISIG                                    = 0x80
	ISTRIP                                  = 0x20
	IUTF8                                   = 0x4000
	IXANY                                   = 0x800
	IXOFF                                   = 0x400
	IXON                                    = 0x200
	KERN_HOSTNAME                           = 0xa
	KERN_OSRELEASE                          = 0x2
	KERN_OSTYPE                             = 0x1
	KERN_VERSION                            = 0x4
	LOCAL_PEERCRED                          = 0x1
	LOCAL_PEEREPID                          = 0x3
	LOCAL_PEEREUUID                         = 0x5
	LOCAL_PEERPID                           = 0x2
	LOCAL_PEERTOKEN                         = 0x6
	LOCAL_PEERUUID                          = 0x4
	LOCK_EX                                 = 0x2
	LOCK_NB                                 = 0x4
	LOCK_SH                                 = 0x1
	LOCK_UN                                 = 0x8
	MADV_CAN_REUSE                          = 0x9
	MADV_DONTNEED                           = 0x4
	MADV_FREE                               = 0x5
	MADV_FREE_REUSABLE                      = 0x7
	MADV_FREE_REUSE                         = 0x8
	MADV_NORMAL                             = 0x0
	MADV_PAGEOUT                            = 0xa
	MADV_RANDOM                             = 0x1
	MADV_SEQUENTIAL                         = 0x2
	MADV_WILLNEED                           = 0x3
	MADV_ZERO_WIRED_PAGES                   = 0x6
	MAP_32BIT                               = 0x8000
	MAP_ANON                                = 0x1000
	MAP_ANONYMOUS                           = 0x1000
	MAP_COPY                                = 0x2
	MAP_FILE                                = 0x0
	MAP_FIXED                               = 0x10
	MAP_HASSEMAPHORE                        = 0x200
	MAP_JIT                                 = 0x800
	MAP_NOCACHE                             = 0x400
	MAP_NOEXTEND                            = 0x100
	MAP_NORESERVE                           = 0x40
	MAP_PRIVATE                             = 0x2
	MAP_RENAME                              = 0x20
	MAP_RESERVED0080                        = 0x80
	MAP_RESILIENT_CODESIGN                  = 0x2000
	MAP_RESILIENT_MEDIA                     = 0x4000
	MAP_SHARED                              = 0x1
	MAP_TRANSLATED_ALLOW_EXECUTE            = 0x20000
	MAP_UNIX03                              = 0x40000
	MCAST_BLOCK_SOURCE                      = 0x54
	MCAST_EXCLUDE                           = 0x2
	MCAST_INCLUDE                           = 0x1
	MCAST_JOIN_GROUP                        = 0x50
	MCAST_JOIN_SOURCE_GROUP                 = 0x52
	MCAST_LEAVE_GROUP                       = 0x51
	MCAST_LEAVE_SOURCE_GROUP                = 0x53
	MCAST_UNBLOCK_SOURCE                    = 0x55
	MCAST_UNDEFINED                         = 0x0
	MCL_CURRENT                             = 0x1
	MCL_FUTURE                              = 0x2
	MNT_ASYNC                               = 0x40
	MNT_AUTOMOUNTED                         = 0x400000
	MNT_CMDFLAGS                            = 0xf0000
	MNT_CPROTECT                            = 0x80
	MNT_DEFWRITE                            = 0x2000000
	MNT_DONTBROWSE                          = 0x100000
	MNT_DOVOLFS                             = 0x8000
	MNT_DWAIT                               = 0x4
	MNT_EXPORTED                            = 0x100
	MNT_EXT_ROOT_DATA_VOL                   = 0x1
	MNT_FORCE                               = 0x80000
	MNT_IGNORE_OWNERSHIP                    = 0x200000
	MNT_JOURNALED                           = 0x800000
	MNT_LOCAL                               = 0x1000
	MNT_MULTILABEL                          = 0x4000000
	MNT_NOATIME                             = 0x10000000
	MNT_NOBLOCK                             = 0x20000
	MNT_NODEV                               = 0x10
	MNT_NOEXEC                              = 0x4
	MNT_NOSUID                              = 0x8
	MNT_NOUSERXATTR                         = 0x1000000
	MNT_NOWAIT                              = 0x2
	MNT_QUARANTINE                          = 0x400
	MNT_QUOTA                               = 0x2000
	MNT_RDONLY                              = 0x1
	MNT_RELOAD                              = 0x40000
	MNT_REMOVABLE                           = 0x200
	MNT_ROOTFS                              = 0x4000
	MNT_SNAPSHOT                            = 0x40000000
	MNT_STRICTATIME                         = 0x80000000
	MNT_SYNCHRONOUS                         = 0x2
	MNT_UNION                               = 0x20
	MNT_UNKNOWNPERMISSIONS                  = 0x200000
	MNT_UPDATE                              = 0x10000
	MNT_VISFLAGMASK                         = 0xd7f0f7ff
	MNT_WAIT                                = 0x1
	MSG_CTRUNC                              = 0x20
	MSG_DONTROUTE                           = 0x4
	MSG_DONTWAIT                            = 0x80
	MSG_EOF                                 = 0x100
	MSG_EOR                                 = 0x8
	MSG_FLUSH                               = 0x400
	MSG_HAVEMORE                            = 0x2000
	MSG_HOLD                                = 0x800
	MSG_NEEDSA                              = 0x10000
	MSG_NOSIGNAL                            = 0x80000
	MSG_OOB                                 = 0x1
	MSG_PEEK                                = 0x2
	MSG_RCVMORE                             = 0x4000
	MSG_SEND                                = 0x1000
	MSG_TRUNC                               = 0x10
	MSG_WAITALL                             = 0x40
	MSG_WAITSTREAM                          = 0x200
	MS_ASYNC                                = 0x1
	MS_DEACTIVATE                           = 0x8
	MS_INVALIDATE                           = 0x2
	MS_KILLPAGES                            = 0x4
	MS_SYNC                                 = 0x10
	NAME_MAX                                = 0xff
	NET_RT_DUMP                             = 0x1
	NET_RT_DUMP2                            = 0x7
	NET_RT_FLAGS                            = 0x2
	NET_RT_FLAGS_PRIV                       = 0xa
	NET_RT_IFLIST                           = 0x3
	NET_RT_IFLIST2                          = 0x6
	NET_RT_MAXID                            = 0xb
	NET_RT_STAT                             = 0x4
	NET_RT_TRASH                            = 0x5
	NFDBITS                                 = 0x20
	NL0                                     = 0x0
	NL1                                     = 0x100
	NL2                                     = 0x200
	NL3                                     = 0x300
	NLDLY                                   = 0x300
	NOFLSH                                  = 0x80000000
	NOKERNINFO                              = 0x2000000
	NOTE_ABSOLUTE                           = 0x8
	NOTE_ATTRIB                             = 0x8
	NOTE_BACKGROUND                         = 0x40
	NOTE_CHILD                              = 0x4
	NOTE_CRITICAL                           = 0x20
	NOTE_DELETE                             = 0x1
	NOTE_EXEC                               = 0x20000000
	NOTE_EXIT                               = 0x80000000
	NOTE_EXITSTATUS                         = 0x4000000
	NOTE_EXIT_CSERROR                       = 0x40000
	NOTE_EXIT_DECRYPTFAIL                   = 0x10000
	NOTE_EXIT_DETAIL                        = 0x2000000
	NOTE_EXIT_DETAIL_MASK                   = 0x70000
	NOTE_EXIT_MEMORY                        = 0x20000
	NOTE_EXIT_REPARENTED                    = 0x80000
	NOTE_EXTEND                             = 0x4
	NOTE_FFAND                              = 0x40000000
	NOTE_FFCOPY                             = 0xc0000000
	NOTE_FFCTRLMASK                         = 0xc0000000
	NOTE_FFLAGSMASK                         = 0xffffff
	NOTE_FFNOP                              = 0x0
	NOTE_FFOR                               = 0x80000000
	NOTE_FORK                               = 0x40000000
	NOTE_FUNLOCK                            = 0x100
	NOTE_LEEWAY                             = 0x10
	NOTE_LINK                               = 0x10
	NOTE_LOWAT                              = 0x1
	NOTE_MACHTIME                           = 0x100
	NOTE_MACH_CONTINUOUS_TIME               = 0x80
	NOTE_NONE                               = 0x80
	NOTE_NSECONDS                           = 0x4
	NOTE_OOB                                = 0x2
	NOTE_PCTRLMASK                          = -0x100000
	NOTE_PDATAMASK                          = 0xfffff
	NOTE_REAP                               = 0x10000000
	NOTE_RENAME                             = 0x20
	NOTE_REVOKE                             = 0x40
	NOTE_SECONDS                            = 0x1
	NOTE_SIGNAL                             = 0x8000000
	NOTE_TRACK                              = 0x1
	NOTE_TRACKERR                           = 0x2
	NOTE_TRIGGER                            = 0x1000000
	NOTE_USECONDS                           = 0x2
	NOTE_VM_ERROR                           = 0x10000000
	NOTE_VM_PRESSURE                        = 0x80000000
	NOTE_VM_PRESSURE_SUDDEN_TERMINATE       = 0x20000000
	NOTE_VM_PRESSURE_TERMINATE              = 0x40000000
	NOTE_WRITE                              = 0x2
	OCRNL                                   = 0x10
	OFDEL                                   = 0x20000
	OFILL                                   = 0x80
	ONLCR                                   = 0x2
	ONLRET                                  = 0x40
	ONOCR                                   = 0x20
	ONOEOT                                  = 0x8
	OPOST                                   = 0x1
	OXTABS                                  = 0x4
	O_ACCMODE                               = 0x3
	O_ALERT                                 = 0x20000000
	O_APPEND                                = 0x8
	O_ASYNC                                 = 0x40
	O_CLOEXEC                               = 0x1000000
	O_CREAT                                 = 0x200
	O_DIRECTORY                             = 0x100000
	O_DP_GETRAWENCRYPTED                    = 0x1
	O_DP_GETRAWUNENCRYPTED                  = 0x2
	O_DSYNC                                 = 0x400000
	O_EVTONLY                               = 0x8000
	O_EXCL                                  = 0x800
	O_EXLOCK                                = 0x20
	O_FSYNC                                 = 0x80
	O_NDELAY                                = 0x4
	O_NOCTTY                                = 0x20000
	O_NOFOLLOW                              = 0x100
	O_NOFOLLOW_ANY                          = 0x20000000
	O_NONBLOCK                              = 0x4
	O_POPUP                                 = 0x80000000
	O_RDONLY                                = 0x0
	O_RDWR                                  = 0x2
	O_SHLOCK                                = 0x10
	O_SYMLINK                               = 0x200000
	O_SYNC                                  = 0x80
	O_TRUNC                                 = 0x400
	O_WRONLY                                = 0x1
	PARENB                                  = 0x1000
	PARMRK                                  = 0x8
	PARODD                                  = 0x2000
	PENDIN                                  = 0x20000000
	PRIO_PGRP                               = 0x1
	PRIO_PROCESS                            = 0x0
	PRIO_USER                               = 0x2
	PROT_EXEC                               = 0x4
	PROT_NONE                               = 0x0
	PROT_READ                               = 0x1
	PROT_WRITE                              = 0x2
	PT_ATTACH                               = 0xa
	PT_ATTACHEXC                            = 0xe
	PT_CONTINUE                             = 0x7
	PT_DENY_ATTACH                          = 0x1f
	PT_DETACH                               = 0xb
	PT_FIRSTMACH                            = 0x20
	PT_FORCEQUOTA                           = 0x1e
	PT_KILL                                 = 0x8
	PT_READ_D                               = 0x2
	PT_READ_I                               = 0x1
	PT_READ_U                               = 0x3
	PT_SIGEXC                               = 0xc
	PT_STEP                                 = 0x9
	PT_THUPDATE                             = 0xd
	PT_TRACE_ME                             = 0x0
	PT_WRITE_D                              = 0x5
	PT_WRITE_I                              = 0x4
	PT_WRITE_U                              = 0x6
	RLIMIT_AS                               = 0x5
	RLIMIT_CORE                             = 0x4
	RLIMIT_CPU                              = 0x0
	RLIMIT_CPU_USAGE_MONITOR                = 0x2
	RLIMIT_DATA                             = 0x2
	RLIMIT_FSIZE                            = 0x1
	RLIMIT_MEMLOCK                          = 0x6
	RLIMIT_NOFILE                           = 0x8
	RLIMIT_NPROC                            = 0x7
	RLIMIT_RSS                              = 0x5
	RLIMIT_STACK                            = 0x3
	RLIM_INFINITY                           = 0x7fffffffffffffff
	RTAX_AUTHOR                             = 0x6
	RTAX_BRD                                = 0x7
	RTAX_DST                                = 0x0
	RTAX_GATEWAY                            = 0x1
	RTAX_GENMASK                            = 0x3
	RTAX_IFA                                = 0x5
	RTAX_IFP                                = 0x4
	RTAX_MAX                                = 0x8
	RTAX_NETMASK                            = 0x2
	RTA_AUTHOR                              = 0x40
	RTA_BRD                                 = 0x80
	RTA_DST                                 = 0x1
	RTA_GATEWAY                             = 0x2
	RTA_GENMASK                             = 0x8
	RTA_IFA                                 = 0x20
	RTA_IFP                                 = 0x10
	RTA_NETMASK                             = 0x4
	RTF_BLACKHOLE                           = 0x1000
	RTF_BROADCAST                           = 0x400000
	RTF_CLONING                             = 0x100
	RTF_CONDEMNED                           = 0x2000000
	RTF_DEAD                                = 0x20000000
	RTF_DELCLONE                            = 0x80
	RTF_DONE                                = 0x40
	RTF_DYNAMIC                             = 0x10
	RTF_GATEWAY                             = 0x2
	RTF_GLOBAL                              = 0x40000000
	RTF_HOST                                = 0x4
	RTF_IFREF                               = 0x4000000
	RTF_IFSCOPE                             = 0x1000000
	RTF_LLDATA                              = 0x400
	RTF_LLINFO                              = 0x400
	RTF_LOCAL                               = 0x200000
	RTF_MODIFIED                            = 0x20
	RTF_MULTICAST                           = 0x800000
	RTF_NOIFREF                             = 0x2000
	RTF_PINNED                              = 0x100000
	RTF_PRCLONING                           = 0x10000
	RTF_PROTO1                              = 0x8000
	RTF_PROTO2                              = 0x4000
	RTF_PROTO3                              = 0x40000
	RTF_PROXY                               = 0x8000000
	RTF_REJECT                              = 0x8
	RTF_ROUTER                              = 0x10000000
	RTF_STATIC                              = 0x800
	RTF_UP                                  = 0x1
	RTF_WASCLONED                           = 0x20000
	RTF_XRESOLVE                            = 0x200
	RTM_ADD                                 = 0x1
	RTM_CHANGE                              = 0x3
	RTM_DELADDR                             = 0xd
	RTM_DELETE                              = 0x2
	RTM_DELMADDR                            = 0x10
	RTM_GET                                 = 0x4
	RTM_GET2                                = 0x14
	RTM_IFINFO                              = 0xe
	RTM_IFINFO2                             = 0x12
	RTM_LOCK                                = 0x8
	RTM_LOSING                              = 0x5
	RTM_MISS                                = 0x7
	RTM_NEWADDR                             = 0xc
	RTM_NEWMADDR                            = 0xf
	RTM_NEWMADDR2                           = 0x13
	RTM_OLDADD                              = 0x9
	RTM_OLDDEL                              = 0xa
	RTM_REDIRECT                            = 0x6
	RTM_RESOLVE                             = 0xb
	RTM_RTTUNIT                             = 0xf4240
	RTM_VERSION                             = 0x5
	RTV_EXPIRE                              = 0x4
	RTV_HOPCOUNT                            = 0x2
	RTV_MTU                                 = 0x1
	RTV_RPIPE                               = 0x8
	RTV_RTT                                 = 0x40
	RTV_RTTVAR                              = 0x80
	RTV_SPIPE                               = 0x10
	RTV_SSTHRESH                            = 0x20
	RUSAGE_CHILDREN                         = -0x1
	RUSAGE_SELF                             = 0x0
	SCM_CREDS                               = 0x3
	SCM_RIGHTS                              = 0x1
	SCM_TIMESTAMP                           = 0x2
	SCM_TIMESTAMP_MONOTONIC                 = 0x4
	SEEK_CUR                                = 0x1
	SEEK_DATA                               = 0x4
	SEEK_END                                = 0x2
	SEEK_HOLE                               = 0x3
	SEEK_SET                                = 0x0
	SF_APPEND                               = 0x40000
	SF_ARCHIVED                             = 0x10000
	SF_DATALESS                             = 0x40000000
	SF_FIRMLINK                             = 0x800000
	SF_IMMUTABLE                            = 0x20000
	SF_NOUNLINK                             = 0x100000
	SF_RESTRICTED                           = 0x80000
	SF_SETTABLE                             = 0x3fff0000
	SF_SUPPORTED                            = 0x9f0000
	SF_SYNTHETIC                            = 0xc0000000
	SHUT_RD                                 = 0x0
	SHUT_RDWR                               = 0x2
	SHUT_WR                                 = 0x1
	SIOCADDMULTI                            = 0x80206931
	SIOCAIFADDR                             = 0x8040691a
	SIOCARPIPLL                             = 0xc0206928
	SIOCATMARK                              = 0x40047307
	SIOCAUTOADDR                            = 0xc0206926
	SIOCAUTONETMASK                         = 0x80206927
	SIOCDELMULTI                            = 0x80206932
	SIOCDIFADDR                             = 0x80206919
	SIOCDIFPHYADDR                          = 0x80206941
	SIOCGDRVSPEC                            = 0xc028697b
	SIOCGETVLAN                             = 0xc020697f
	SIOCGHIWAT                              = 0x40047301
	SIOCGIF6LOWPAN                          = 0xc02069c5
	SIOCGIFADDR                             = 0xc0206921
	SIOCGIFALTMTU                           = 0xc0206948
	SIOCGIFASYNCMAP                         = 0xc020697c
	SIOCGIFBOND                             = 0xc0206947
	SIOCGIFBRDADDR                          = 0xc0206923
	SIOCGIFCAP                              = 0xc020695b
	SIOCGIFCONF                             = 0xc00c6924
	SIOCGIFDEVMTU                           = 0xc0206944
	SIOCGIFDSTADDR                          = 0xc0206922
	SIOCGIFFLAGS                            = 0xc0206911
	SIOCGIFFUNCTIONALTYPE                   = 0xc02069ad
	SIOCGIFGENERIC                          = 0xc020693a
	SIOCGIFKPI                              = 0xc0206987
	SIOCGIFMAC                              = 0xc0206982
	SIOCGIFMEDIA                            = 0xc02c6938
	SIOCGIFMETRIC                           = 0xc0206917
	SIOCGIFMTU                              = 0xc0206933
	SIOCGIFNETMASK                          = 0xc0206925
	SIOCGIFPDSTADDR                         = 0xc0206940
	SIOCGIFPHYS                             = 0xc0206935
	SIOCGIFPSRCADDR                         = 0xc020693f
	SIOCGIFSTATUS                           = 0xc331693d
	SIOCGIFVLAN                             = 0xc020697f
	SIOCGIFWAKEFLAGS                        = 0xc0206988
	SIOCGIFXMEDIA                           = 0xc02c6948
	SIOCGLOWAT                              = 0x40047303
	SIOCGPGRP                               = 0x40047309
	SIOCIFCREATE                            = 0xc0206978
	SIOCIFCREATE2                           = 0xc020697a
	SIOCIFDESTROY                           = 0x80206979
	SIOCIFGCLONERS                          = 0xc0106981
	SIOCRSLVMULTI                           = 0xc010693b
	SIOCSDRVSPEC                            = 0x8028697b
	SIOCSETVLAN                             = 0x8020697e
	SIOCSHIWAT                              = 0x80047300
	SIOCSIF6LOWPAN                          = 0x802069c4
	SIOCSIFADDR                             = 0x8020690c
	SIOCSIFALTMTU                           = 0x80206945
	SIOCSIFASYNCMAP                         = 0x8020697d
	SIOCSIFBOND                             = 0x80206946
	SIOCSIFBRDADDR                          = 0x80206913
	SIOCSIFCAP                              = 0x8020695a
	SIOCSIFDSTADDR                          = 0x8020690e
	SIOCSIFFLAGS                            = 0x80206910
	SIOCSIFGENERIC                          = 0x80206939
	SIOCSIFKPI                              = 0x80206986
	SIOCSIFLLADDR                           = 0x8020693c
	SIOCSIFMAC                              = 0x80206983
	SIOCSIFMEDIA                            = 0xc0206937
	SIOCSIFMETRIC                           = 0x80206918
	SIOCSIFMTU                              = 0x80206934
	SIOCSIFNETMASK                          = 0x80206916
	SIOCSIFPHYADDR                          = 0x8040693e
	SIOCSIFPHYS                             = 0x80206936
	SIOCSIFVLAN                             = 0x8020697e
	SIOCSLOWAT                              = 0x80047302
	SIOCSPGRP                               = 0x80047308
	SOCK_DGRAM                              = 0x2
	SOCK_MAXADDRLEN                         = 0xff
	SOCK_RAW                                = 0x3
	SOCK_RDM                                = 0x4
	SOCK_SEQPACKET                          = 0x5
	SOCK_STREAM                             = 0x1
	SOL_LOCAL                               = 0x0
	SOL_SOCKET                              = 0xffff
	SOMAXCONN                               = 0x80
	SO_ACCEPTCONN                           = 0x2
	SO_BROADCAST                            = 0x20
	SO_DEBUG                                = 0x1
	SO_DONTROUTE                            = 0x10
	SO_DONTTRUNC                            = 0x2000
	SO_ERROR                                = 0x1007
	SO_KEEPALIVE                            = 0x8
	SO_LABEL                                = 0x1010
	SO_LINGER                               = 0x80
	SO_LINGER_SEC                           = 0x1080
	SO_NETSVC_MARKING_LEVEL                 = 0x1119
	SO_NET_SERVICE_TYPE                     = 0x1116
	SO_NKE                                  = 0x1021
	SO_NOADDRERR                            = 0x1023
	SO_NOSIGPIPE                            = 0x1022
	SO_NOTIFYCONFLICT                       = 0x1026
	SO_NP_EXTENSIONS                        = 0x1083
	SO_NREAD                                = 0x1020
	SO_NUMRCVPKT                            = 0x1112
	SO_NWRITE                               = 0x1024
	SO_OOBINLINE                            = 0x100
	SO_PEERLABEL                            = 0x1011
	SO_RANDOMPORT                           = 0x1082
	SO_RCVBUF                               = 0x1002
	SO_RCVLOWAT                             = 0x1004
	SO_RCVTIMEO                             = 0x1006
	SO_REUSEADDR                            = 0x4
	SO_REUSEPORT                            = 0x200
	SO_REUSESHAREUID                        = 0x1025
	SO_SNDBUF                               = 0x1001
	SO_SNDLOWAT                             = 0x1003
	SO_SNDTIMEO                             = 0x1005
	SO_TIMESTAMP                            = 0x400
	SO_TIMESTAMP_MONOTONIC                  = 0x800
	SO_TRACKER_ATTRIBUTE_FLAGS_APP_APPROVED = 0x1
	SO_TRACKER_ATTRIBUTE_FLAGS_DOMAIN_SHORT = 0x4
	SO_TRACKER_ATTRIBUTE_FLAGS_TRACKER      = 0x2
	SO_TRACKER_TRANSPARENCY_VERSION         = 0x3
	SO_TYPE                                 = 0x1008
	SO_UPCALLCLOSEWAIT                      = 0x1027
	SO_USELOOPBACK                          = 0x40
	SO_WANTMORE                             = 0x4000
	SO_WANTOOBFLAG                          = 0x8000
	S_IEXEC                                 = 0x40
	S_IFBLK                                 = 0x6000
	S_IFCHR                                 = 0x2000
	S_IFDIR                                 = 0x4000
	S_IFIFO                                 = 0x1000
	S_IFLNK                                 = 0xa000
	S_IFMT                                  = 0xf000
	S_IFREG                                 = 0x8000
	S_IFSOCK                                = 0xc000
	S_IFWHT                                 = 0xe000
	S_IREAD                                 = 0x100
	S_IRGRP                                 = 0x20
	S_IROTH                                 = 0x4
	S_IRUSR                                 = 0x100
	S_IRWXG                                 = 0x38
	S_IRWXO                                 = 0x7
	S_IRWXU                                 = 0x1c0
	S_ISGID                                 = 0x400
	S_ISTXT                                 = 0x200
	S_ISUID                                 = 0x800
	S_ISVTX                                 = 0x200
	S_IWGRP                                 = 0x10
	S_IWOTH                                 = 0x2
	S_IWRITE                                = 0x80
	S_IWUSR                                 = 0x80
	S_IXGRP                                 = 0x8
	S_IXOTH                                 = 0x1
	S_IXUSR                                 = 0x40
	TAB0                                    = 0x0
	TAB1                                    = 0x400
	TAB2                                    = 0x800
	TAB3                                    = 0x4
	TABDLY                                  = 0xc04
	TCIFLUSH                                = 0x1
	TCIOFF                                  = 0x3
	TCIOFLUSH                               = 0x3
	TCION                                   = 0x4
	TCOFLUSH                                = 0x2
	TCOOFF                                  = 0x1
	TCOON                                   = 0x2
	TCPOPT_CC                               = 0xb
	TCPOPT_CCECHO                           = 0xd
	TCPOPT_CCNEW                            = 0xc
	TCPOPT_EOL                              = 0x0
	TCPOPT_FASTOPEN                         = 0x22
	TCPOPT_MAXSEG                           = 0x2
	TCPOPT_NOP                              = 0x1
	TCPOPT_SACK                             = 0x5
	TCPOPT_SACK_HDR                         = 0x1010500
	TCPOPT_SACK_PERMITTED                   = 0x4
	TCPOPT_SACK_PERMIT_HDR                  = 0x1010402
	TCPOPT_SIGNATURE                        = 0x13
	TCPOPT_TIMESTAMP                        = 0x8
	TCPOPT_TSTAMP_HDR                       = 0x101080a
	TCPOPT_WINDOW                           = 0x3
	TCP_CONNECTIONTIMEOUT                   = 0x20
	TCP_CONNECTION_INFO                     = 0x106
	TCP_ENABLE_ECN                          = 0x104
	TCP_FASTOPEN                            = 0x105
	TCP_KEEPALIVE                           = 0x10
	TCP_KEEPCNT                             = 0x102
	TCP_KEEPINTVL                           = 0x101
	TCP_MAXHLEN                             = 0x3c
	TCP_MAXOLEN                             = 0x28
	TCP_MAXSEG                              = 0x2
	TCP_MAXWIN                              = 0xffff
	TCP_MAX_SACK                            = 0x4
	TCP_MAX_WINSHIFT                        = 0xe
	TCP_MINMSS                              = 0xd8
	TCP_MSS                                 = 0x200
	TCP_NODELAY                             = 0x1
	TCP_NOOPT                               = 0x8
	TCP_NOPUSH                              = 0x4
	TCP_NOTSENT_LOWAT                       = 0x201
	TCP_RXT_CONNDROPTIME                    = 0x80
	TCP_RXT_FINDROP                         = 0x100
	TCP_SENDMOREACKS                        = 0x103
	TCSAFLUSH                               = 0x2
	TIOCCBRK                                = 0x2000747a
	TIOCCDTR                                = 0x20007478
	TIOCCONS                                = 0x80047462
	TIOCDCDTIMESTAMP                        = 0x40107458
	TIOCDRAIN                               = 0x2000745e
	TIOCDSIMICROCODE                        = 0x20007455
	TIOCEXCL                                = 0x2000740d
	TIOCEXT                                 = 0x80047460
	TIOCFLUSH                               = 0x80047410
	TIOCGDRAINWAIT                          = 0x40047456
	TIOCGETA                                = 0x40487413
	TIOCGETD                                = 0x4004741a
	TIOCGPGRP                               = 0x40047477
	TIOCGWINSZ                              = 0x40087468
	TIOCIXOFF                               = 0x20007480
	TIOCIXON                                = 0x20007481
	TIOCMBIC                                = 0x8004746b
	TIOCMBIS                                = 0x8004746c
	TIOCMGDTRWAIT                           = 0x4004745a
	TIOCMGET                                = 0x4004746a
	TIOCMODG                                = 0x40047403
	TIOCMODS                                = 0x80047404
	TIOCMSDTRWAIT                           = 0x8004745b
	TIOCMSET                                = 0x8004746d
	TIOCM_CAR                               = 0x40
	TIOCM_CD                                = 0x40
	TIOCM_CTS                               = 0x20
	TIOCM_DSR                               = 0x100
	TIOCM_DTR                               = 0x2
	TIOCM_LE                                = 0x1
	TIOCM_RI                                = 0x80
	TIOCM_RNG                               = 0x80
	TIOCM_RTS                               = 0x4
	TIOCM_SR                                = 0x10
	TIOCM_ST                                = 0x8
	TIOCNOTTY                               = 0x20007471
	TIOCNXCL                                = 0x2000740e
	TIOCOUTQ                                = 0x40047473
	TIOCPKT                                 = 0x80047470
	TIOCPKT_DATA                            = 0x0
	TIOCPKT_DOSTOP                          = 0x20
	TIOCPKT_FLUSHREAD                       = 0x1
	TIOCPKT_FLUSHWRITE                      = 0x2
	TIOCPKT_IOCTL                           = 0x40
	TIOCPKT_NOSTOP                          = 0x10
	TIOCPKT_START                           = 0x8
	TIOCPKT_STOP                            = 0x4
	TIOCPTYGNAME                            = 0x40807453
	TIOCPTYGRANT                            = 0x20007454
	TIOCPTYUNLK                             = 0x20007452
	TIOCREMOTE                              = 0x80047469
	TIOCSBRK                                = 0x2000747b
	TIOCSCONS                               = 0x20007463
	TIOCSCTTY                               = 0x20007461
	TIOCSDRAINWAIT                          = 0x80047457
	TIOCSDTR                                = 0x20007479
	TIOCSETA                                = 0x80487414
	TIOCSETAF                               = 0x80487416
	TIOCSETAW                               = 0x80487415
	TIOCSETD                                = 0x8004741b
	TIOCSIG                                 = 0x2000745f
	TIOCSPGRP                               = 0x80047476
	TIOCSTART                               = 0x2000746e
	TIOCSTAT                                = 0x20007465
	TIOCSTI                                 = 0x80017472
	TIOCSTOP                                = 0x2000746f
	TIOCSWINSZ                              = 0x80087467
	TIOCTIMESTAMP                           = 0x40107459
	TIOCUCNTL                               = 0x80047466
	TOSTOP                                  = 0x400000
	UF_APPEND                               = 0x4
	UF_COMPRESSED                           = 0x20
	UF_DATAVAULT                            = 0x80
	UF_HIDDEN                               = 0x8000
	UF_IMMUTABLE                            = 0x2
	UF_NODUMP                               = 0x1
	UF_OPAQUE                               = 0x8
	UF_SETTABLE                             = 0xffff
	UF_TRACKED                              = 0x40
	VDISCARD                                = 0xf
	VDSUSP                                  = 0xb
	VEOF                                    = 0x0
	VEOL                                    = 0x1
	VEOL2                                   = 0x2
	VERASE                                  = 0x3
	VINTR                                   = 0x8
	VKILL                                   = 0x5
	VLNEXT                                  = 0xe
	VMADDR_CID_ANY                          = 0xffffffff
	VMADDR_CID_HOST                         = 0x2
	VMADDR_CID_HYPERVISOR                   = 0x0
	VMADDR_CID_RESERVED                     = 0x1
	VMADDR_PORT_ANY                         = 0xffffffff
	VMIN                                    = 0x10
	VM_LOADAVG                              = 0x2
	VM_MACHFACTOR                           = 0x4
	VM_MAXID                                = 0x6
	VM_METER                                = 0x1
	VM_SWAPUSAGE                            = 0x5
	VQUIT                                   = 0x9
	VREPRINT                                = 0x6
	VSTART                                  = 0xc
	VSTATUS                                 = 0x12
	VSTOP                                   = 0xd
	VSUSP                                   = 0xa
	VT0                                     = 0x0
	VT1                                     = 0x10000
	VTDLY                                   = 0x10000
	VTIME                                   = 0x11
	VWERASE                                 = 0x4
	WCONTINUED                              = 0x10
	WCOREFLAG                               = 0x80
	WEXITED                                 = 0x4
	WNOHANG                                 = 0x1
	WNOWAIT                                 = 0x20
	WORDSIZE                                = 0x40
	WSTOPPED                                = 0x8
	WUNTRACED                               = 0x2
	XATTR_CREATE                            = 0x2
	XATTR_NODEFAULT                         = 0x10
	XATTR_NOFOLLOW                          = 0x1
	XATTR_NOSECURITY                        = 0x8
	XATTR_REPLACE                           = 0x4
	XATTR_SHOWCOMPRESSION                   = 0x20
)

// Errors
const (
	E2BIG           = syscall.Errno(0x7)
	EACCES          = syscall.Errno(0xd)
	EADDRINUSE      = syscall.Errno(0x30)
	EADDRNOTAVAIL   = syscall.Errno(0x31)
	EAFNOSUPPORT    = syscall.Errno(0x2f)
	EAGAIN          = syscall.Errno(0x23)
	EALREADY        = syscall.Errno(0x25)
	EAUTH           = syscall.Errno(0x50)
	EBADARCH        = syscall.Errno(0x56)
	EBADEXEC        = syscall.Errno(0x55)
	EBADF           = syscall.Errno(0x9)
	EBADMACHO       = syscall.Errno(0x58)
	EBADMSG         = syscall.Errno(0x5e)
	EBADRPC         = syscall.Errno(0x48)
	EBUSY           = syscall.Errno(0x10)
	ECANCELED       = syscall.Errno(0x59)
	ECHILD          = syscall.Errno(0xa)
	ECONNABORTED    = syscall.Errno(0x35)
	ECONNREFUSED    = syscall.Errno(0x3d)
	ECONNRESET      = syscall.Errno(0x36)
	EDEADLK         = syscall.Errno(0xb)
	EDESTADDRREQ    = syscall.Errno(0x27)
	EDEVERR         = syscall.Errno(0x53)
	EDOM            = syscall.Errno(0x21)
	EDQUOT          = syscall.Errno(0x45)
	EEXIST          = syscall.Errno(0x11)
	EFAULT          = syscall.Errno(0xe)
	EFBIG           = syscall.Errno(0x1b)
	EFTYPE          = syscall.Errno(0x4f)
	EHOSTDOWN       = syscall.Errno(0x40)
	EHOSTUNREACH    = syscall.Errno(0x41)
	EIDRM           = syscall.Errno(0x5a)
	EILSEQ          = syscall.Errno(0x5c)
	EINPROGRESS     = syscall.Errno(0x24)
	EINTR           = syscall.Errno(0x4)
	EINVAL          = syscall.Errno(0x16)
	EIO             = syscall.Errno(0x5)
	EISCONN         = syscall.Errno(0x38)
	EISDIR          = syscall.Errno(0x15)
	ELAST           = syscall.Errno(0x6a)
	ELOOP           = syscall.Errno(0x3e)
	EMFILE          = syscall.Errno(0x18)
	EMLINK          = syscall.Errno(0x1f)
	EMSGSIZE        = syscall.Errno(0x28)
	EMULTIHOP       = syscall.Errno(0x5f)
	ENAMETOOLONG    = syscall.Errno(0x3f)
	ENEEDAUTH       = syscall.Errno(0x51)
	ENETDOWN        = syscall.Errno(0x32)
	ENETRESET       = syscall.Errno(0x34)
	ENETUNREACH     = syscall.Errno(0x33)
	ENFILE          = syscall.Errno(0x17)
	ENOATTR         = syscall.Errno(0x5d)
	ENOBUFS         = syscall.Errno(0x37)
	ENODATA         = syscall.Errno(0x60)
	ENODEV          = syscall.Errno(0x13)
	ENOENT          = syscall.Errno(0x2)
	ENOEXEC         = syscall.Errno(0x8)
	ENOLCK          = syscall.Errno(0x4d)
	ENOLINK         = syscall.Errno(0x61)
	ENOMEM          = syscall.Errno(0xc)
	ENOMSG          = syscall.Errno(0x5b)
	ENOPOLICY       = syscall.Errno(0x67)
	ENOPROTOOPT     = syscall.Errno(0x2a)
	ENOSPC          = syscall.Errno(0x1c)
	ENOSR           = syscall.Errno(0x62)
	ENOSTR          = syscall.Errno(0x63)
	ENOSYS          = syscall.Errno(0x4e)
	ENOTBLK         = syscall.Errno(0xf)
	ENOTCONN        = syscall.Errno(0x39)
	ENOTDIR         = syscall.Errno(0x14)
	ENOTEMPTY       = syscall.Errno(0x42)
	ENOTRECOVERABLE = syscall.Errno(0x68)
	ENOTSOCK        = syscall.Errno(0x26)
	ENOTSUP         = syscall.Errno(0x2d)
	ENOTTY          = syscall.Errno(0x19)
	ENXIO           = syscall.Errno(0x6)
	EOPNOTSUPP      = syscall.Errno(0x66)
	EOVERFLOW       = syscall.Errno(0x54)
	EOWNERDEAD      = syscall.Errno(0x69)
	EPERM           = syscall.Errno(0x1)
	EPFNOSUPPORT    = syscall.Errno(0x2e)
	EPIPE           = syscall.Errno(0x20)
	EPROCLIM        = syscall.Errno(0x43)
	EPROCUNAVAIL    = syscall.Errno(0x4c)
	EPROGMISMATCH   = syscall.Errno(0x4b)
	EPROGUNAVAIL    = syscall.Errno(0x4a)
	EPROTO          = syscall.Errno(0x64)
	EPROTONOSUPPORT = syscall.Errno(0x2b)
	EPROTOTYPE      = syscall.Errno(0x29)
	EPWROFF         = syscall.Errno(0x52)
	EQFULL          = syscall.Errno(0x6a)
	ERANGE          = syscall.Errno(0x22)
	EREMOTE         = syscall.Errno(0x47)
	EROFS           = syscall.Errno(0x1e)
	ERPCMISMATCH    = syscall.Errno(0x49)
	ESHLIBVERS      = syscall.Errno(0x57)
	ESHUTDOWN       = syscall.Errno(0x3a)
	ESOCKTNOSUPPORT = syscall.Errno(0x2c)
	ESPIPE          = syscall.Errno(0x1d)
	ESRCH           = syscall.Errno(0x3)
	ESTALE          = syscall.Errno(0x46)
	ETIME           = syscall.Errno(0x65)
	ETIMEDOUT       = syscall.Errno(0x3c)
	ETOOMANYREFS    = syscall.Errno(0x3b)
	ETXTBSY         = syscall.Errno(0x1a)
	EUSERS          = syscall.Errno(0x44)
	EWOULDBLOCK     = syscall.Errno(0x23)
	EXDEV           = syscall.Errno(0x12)
)

// Signals
const (
	SIGABRT   = syscall.Signal(0x6)
	SIGALRM   = syscall.Signal(0xe)
	SIGBUS    = syscall.Signal(0xa)
	SIGCHLD   = syscall.Signal(0x14)
	SIGCONT   = syscall.Signal(0x13)
	SIGEMT    = syscall.Signal(0x7)
	SIGFPE    = syscall.Signal(0x8)
	SIGHUP    = syscall.Signal(0x1)
	SIGILL    = syscall.Signal(0x4)
	SIGINFO   = syscall.Signal(0x1d)
	SIGINT    = syscall.Signal(0x2)
	SIGIO     = syscall.Signal(0x17)
	SIGIOT    = syscall.Signal(0x6)
	SIGKILL   = syscall.Signal(0x9)
	SIGPIPE   = syscall.Signal(0xd)
	SIGPROF   = syscall.Signal(0x1b)
	SIGQUIT   = syscall.Signal(0x3)
	SIGSEGV   = syscall.Signal(0xb)
	SIGSTOP   = syscall.Signal(0x11)
	SIGSYS    = syscall.Signal(0xc)
	SIGTERM   = syscall.Signal(0xf)
	SIGTRAP   = syscall.Signal(0x5)
	SIGTSTP   = syscall.Signal(0x12)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x10)
	SIGUSR1   = syscall.Signal(0x1e)
	SIGUSR2   = syscall.Signal(0x1f)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "device not configured"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EDEADLK", "resource deadlock avoided"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "resource busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "cross-device link"},
	{19, "ENODEV", "operation not supported by device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "result too large"},
	{35, "EAGAIN", "resource temporarily unavailable"},
	{36, "EINPROGRESS", "operation now in progress"},
	{37, "EALREADY", "operation already in progress"},
	{38, "ENOTSOCK", "socket operation on non-socket"},
	{39, "EDESTADDRREQ", "destination address required"},
	{40, "EMSGSIZE", "message too long"},
	{41, "EPROTOTYPE", "protocol wrong type for socket"},
	{42, "ENOPROTOOPT", "protocol not available"},
	{43, "EPROTONOSUPPORT", "protocol not supported"},
	{44, "ESOCKTNOSUPPORT", "socket type not supported"},
	{45, "ENOTSUP", "operation not supported"},
	{46, "EPFNOSUPPORT", "protocol family not supported"},
	{47, "EAFNOSUPPORT", "address family not supported by protocol family"},
	{48, "EADDRINUSE", "address already in use"},
	{49, "EADDRNOTAVAIL", "can't assign requested address"},
	{50, "ENETDOWN", "network is down"},
	{51, "ENETUNREACH", "network is unreachable"},
	{52, "ENETRESET", "network dropped connection on reset"},
	{53, "ECONNABORTED", "software caused connection abort"},
	{54, "ECONNRESET", "connection reset by peer"},
	{55, "ENOBUFS", "no buffer space available"},
	{56, "EISCONN", "socket is already connected"},
	{57, "ENOTCONN", "socket is not connected"},
	{58, "ESHUTDOWN", "can't send after socket shutdown"},
	{59, "ETOOMANYREFS", "too many references: can't splice"},
	{60, "ETIMEDOUT", "operation timed out"},
	{61, "ECONNREFUSED", "connection refused"},
	{62, "ELOOP", "too many levels of symbolic links"},
	{63, "ENAMETOOLONG", "file name too long"},
	{64, "EHOSTDOWN", "host is down"},
	{65, "EHOSTUNREACH", "no route to host"},
	{66, "ENOTEMPTY", "directory not empty"},
	{67, "EPROCLIM", "too many processes"},
	{68, "EUSERS", "too many users"},
	{69, "EDQUOT", "disc quota exceeded"},
	{70, "ESTALE", "stale NFS file handle"},
	{71, "EREMOTE", "too many levels of remote in path"},
	{72, "EBADRPC", "RPC struct is bad"},
	{73, "ERPCMISMATCH", "RPC version wrong"},
	{74, "EPROGUNAVAIL", "RPC prog. not avail"},
	{75, "EPROGMISMATCH", "program version wrong"},
	{76, "EPROCUNAVAIL", "bad procedure for program"},
	{77, "ENOLCK", "no locks available"},
	{78, "ENOSYS", "function not implemented"},
	{79, "EFTYPE", "inappropriate file type or format"},
	{80, "EAUTH", "authentication error"},
	{81, "ENEEDAUTH", "need authenticator"},
	{82, "EPWROFF", "device power is off"},
	{83, "EDEVERR", "device error"},
	{84, "EOVERFLOW", "value too large to be stored in data type"},
	{85, "EBADEXEC", "bad executable (or shared library)"},
	{86, "EBADARCH", "bad CPU type in executable"},
	{87, "ESHLIBVERS", "shared library version mismatch"},
	{88, "EBADMACHO", "malformed Mach-o file"},
	{89, "ECANCELED", "operation canceled"},
	{90, "EIDRM", "identifier removed"},
	{91, "ENOMSG", "no message of desired type"},
	{92, "EILSEQ", "illegal byte sequence"},
	{93, "ENOATTR", "attribute not found"},
	{94, "EBADMSG", "bad message"},
	{95, "EMULTIHOP", "EMULTIHOP (Reserved)"},
	{96, "ENODATA", "no message available on STREAM"},
	{97, "ENOLINK", "ENOLINK (Reserved)"},
	{98, "ENOSR", "no STREAM resources"},
	{99, "ENOSTR", "not a STREAM"},
	{100, "EPROTO", "protocol error"},
	{101, "ETIME", "STREAM ioctl timeout"},
	{102, "EOPNOTSUPP", "operation not supported on socket"},
	{103, "ENOPOLICY", "policy not found"},
	{104, "ENOTRECOVERABLE", "state not recoverable"},
	{105, "EOWNERDEAD", "previous owner died"},
	{106, "EQFULL", "interface output queue is full"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/BPT trap"},
	{6, "SIGABRT", "abort trap"},
	{7, "SIGEMT", "EMT trap"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus error"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGSYS", "bad system call"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGURG", "urgent I/O condition"},
	{17, "SIGSTOP", "suspended (signal)"},
	{18, "SIGTSTP", "suspended"},
	{19, "SIGCONT", "continued"},
	{20, "SIGCHLD", "child exited"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGIO", "I/O possible"},
	{24, "SIGXCPU", "cputime limit exceeded"},
	{25, "SIGXFSZ", "filesize limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window size changes"},
	{29, "SIGINFO", "information request"},
	{30, "SIGUSR1", "user defined signal 1"},
	{31, "SIGUSR2", "user defined signal 2"},
}
07070100000E23000081A4000000000000000000000001645E367C00015DE8000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go  // mkerrors.sh -m64
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build arm64 && darwin
// +build arm64,darwin

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -m64 _const.go

package unix

import "syscall"

const (
	AF_APPLETALK                            = 0x10
	AF_CCITT                                = 0xa
	AF_CHAOS                                = 0x5
	AF_CNT                                  = 0x15
	AF_COIP                                 = 0x14
	AF_DATAKIT                              = 0x9
	AF_DECnet                               = 0xc
	AF_DLI                                  = 0xd
	AF_E164                                 = 0x1c
	AF_ECMA                                 = 0x8
	AF_HYLINK                               = 0xf
	AF_IEEE80211                            = 0x25
	AF_IMPLINK                              = 0x3
	AF_INET                                 = 0x2
	AF_INET6                                = 0x1e
	AF_IPX                                  = 0x17
	AF_ISDN                                 = 0x1c
	AF_ISO                                  = 0x7
	AF_LAT                                  = 0xe
	AF_LINK                                 = 0x12
	AF_LOCAL                                = 0x1
	AF_MAX                                  = 0x29
	AF_NATM                                 = 0x1f
	AF_NDRV                                 = 0x1b
	AF_NETBIOS                              = 0x21
	AF_NS                                   = 0x6
	AF_OSI                                  = 0x7
	AF_PPP                                  = 0x22
	AF_PUP                                  = 0x4
	AF_RESERVED_36                          = 0x24
	AF_ROUTE                                = 0x11
	AF_SIP                                  = 0x18
	AF_SNA                                  = 0xb
	AF_SYSTEM                               = 0x20
	AF_SYS_CONTROL                          = 0x2
	AF_UNIX                                 = 0x1
	AF_UNSPEC                               = 0x0
	AF_UTUN                                 = 0x26
	AF_VSOCK                                = 0x28
	ALTWERASE                               = 0x200
	ATTR_BIT_MAP_COUNT                      = 0x5
	ATTR_CMN_ACCESSMASK                     = 0x20000
	ATTR_CMN_ACCTIME                        = 0x1000
	ATTR_CMN_ADDEDTIME                      = 0x10000000
	ATTR_CMN_BKUPTIME                       = 0x2000
	ATTR_CMN_CHGTIME                        = 0x800
	ATTR_CMN_CRTIME                         = 0x200
	ATTR_CMN_DATA_PROTECT_FLAGS             = 0x40000000
	ATTR_CMN_DEVID                          = 0x2
	ATTR_CMN_DOCUMENT_ID                    = 0x100000
	ATTR_CMN_ERROR                          = 0x20000000
	ATTR_CMN_EXTENDED_SECURITY              = 0x400000
	ATTR_CMN_FILEID                         = 0x2000000
	ATTR_CMN_FLAGS                          = 0x40000
	ATTR_CMN_FNDRINFO                       = 0x4000
	ATTR_CMN_FSID                           = 0x4
	ATTR_CMN_FULLPATH                       = 0x8000000
	ATTR_CMN_GEN_COUNT                      = 0x80000
	ATTR_CMN_GRPID                          = 0x10000
	ATTR_CMN_GRPUUID                        = 0x1000000
	ATTR_CMN_MODTIME                        = 0x400
	ATTR_CMN_NAME                           = 0x1
	ATTR_CMN_NAMEDATTRCOUNT                 = 0x80000
	ATTR_CMN_NAMEDATTRLIST                  = 0x100000
	ATTR_CMN_OBJID                          = 0x20
	ATTR_CMN_OBJPERMANENTID                 = 0x40
	ATTR_CMN_OBJTAG                         = 0x10
	ATTR_CMN_OBJTYPE                        = 0x8
	ATTR_CMN_OWNERID                        = 0x8000
	ATTR_CMN_PARENTID                       = 0x4000000
	ATTR_CMN_PAROBJID                       = 0x80
	ATTR_CMN_RETURNED_ATTRS                 = 0x80000000
	ATTR_CMN_SCRIPT                         = 0x100
	ATTR_CMN_SETMASK                        = 0x51c7ff00
	ATTR_CMN_USERACCESS                     = 0x200000
	ATTR_CMN_UUID                           = 0x800000
	ATTR_CMN_VALIDMASK                      = 0xffffffff
	ATTR_CMN_VOLSETMASK                     = 0x6700
	ATTR_FILE_ALLOCSIZE                     = 0x4
	ATTR_FILE_CLUMPSIZE                     = 0x10
	ATTR_FILE_DATAALLOCSIZE                 = 0x400
	ATTR_FILE_DATAEXTENTS                   = 0x800
	ATTR_FILE_DATALENGTH                    = 0x200
	ATTR_FILE_DEVTYPE                       = 0x20
	ATTR_FILE_FILETYPE                      = 0x40
	ATTR_FILE_FORKCOUNT                     = 0x80
	ATTR_FILE_FORKLIST                      = 0x100
	ATTR_FILE_IOBLOCKSIZE                   = 0x8
	ATTR_FILE_LINKCOUNT                     = 0x1
	ATTR_FILE_RSRCALLOCSIZE                 = 0x2000
	ATTR_FILE_RSRCEXTENTS                   = 0x4000
	ATTR_FILE_RSRCLENGTH                    = 0x1000
	ATTR_FILE_SETMASK                       = 0x20
	ATTR_FILE_TOTALSIZE                     = 0x2
	ATTR_FILE_VALIDMASK                     = 0x37ff
	ATTR_VOL_ALLOCATIONCLUMP                = 0x40
	ATTR_VOL_ATTRIBUTES                     = 0x40000000
	ATTR_VOL_CAPABILITIES                   = 0x20000
	ATTR_VOL_DIRCOUNT                       = 0x400
	ATTR_VOL_ENCODINGSUSED                  = 0x10000
	ATTR_VOL_FILECOUNT                      = 0x200
	ATTR_VOL_FSTYPE                         = 0x1
	ATTR_VOL_INFO                           = 0x80000000
	ATTR_VOL_IOBLOCKSIZE                    = 0x80
	ATTR_VOL_MAXOBJCOUNT                    = 0x800
	ATTR_VOL_MINALLOCATION                  = 0x20
	ATTR_VOL_MOUNTEDDEVICE                  = 0x8000
	ATTR_VOL_MOUNTFLAGS                     = 0x4000
	ATTR_VOL_MOUNTPOINT                     = 0x1000
	ATTR_VOL_NAME                           = 0x2000
	ATTR_VOL_OBJCOUNT                       = 0x100
	ATTR_VOL_QUOTA_SIZE                     = 0x10000000
	ATTR_VOL_RESERVED_SIZE                  = 0x20000000
	ATTR_VOL_SETMASK                        = 0x80002000
	ATTR_VOL_SIGNATURE                      = 0x2
	ATTR_VOL_SIZE                           = 0x4
	ATTR_VOL_SPACEAVAIL                     = 0x10
	ATTR_VOL_SPACEFREE                      = 0x8
	ATTR_VOL_SPACEUSED                      = 0x800000
	ATTR_VOL_UUID                           = 0x40000
	ATTR_VOL_VALIDMASK                      = 0xf087ffff
	B0                                      = 0x0
	B110                                    = 0x6e
	B115200                                 = 0x1c200
	B1200                                   = 0x4b0
	B134                                    = 0x86
	B14400                                  = 0x3840
	B150                                    = 0x96
	B1800                                   = 0x708
	B19200                                  = 0x4b00
	B200                                    = 0xc8
	B230400                                 = 0x38400
	B2400                                   = 0x960
	B28800                                  = 0x7080
	B300                                    = 0x12c
	B38400                                  = 0x9600
	B4800                                   = 0x12c0
	B50                                     = 0x32
	B57600                                  = 0xe100
	B600                                    = 0x258
	B7200                                   = 0x1c20
	B75                                     = 0x4b
	B76800                                  = 0x12c00
	B9600                                   = 0x2580
	BIOCFLUSH                               = 0x20004268
	BIOCGBLEN                               = 0x40044266
	BIOCGDLT                                = 0x4004426a
	BIOCGDLTLIST                            = 0xc00c4279
	BIOCGETIF                               = 0x4020426b
	BIOCGHDRCMPLT                           = 0x40044274
	BIOCGRSIG                               = 0x40044272
	BIOCGRTIMEOUT                           = 0x4010426e
	BIOCGSEESENT                            = 0x40044276
	BIOCGSTATS                              = 0x4008426f
	BIOCIMMEDIATE                           = 0x80044270
	BIOCPROMISC                             = 0x20004269
	BIOCSBLEN                               = 0xc0044266
	BIOCSDLT                                = 0x80044278
	BIOCSETF                                = 0x80104267
	BIOCSETFNR                              = 0x8010427e
	BIOCSETIF                               = 0x8020426c
	BIOCSHDRCMPLT                           = 0x80044275
	BIOCSRSIG                               = 0x80044273
	BIOCSRTIMEOUT                           = 0x8010426d
	BIOCSSEESENT                            = 0x80044277
	BIOCVERSION                             = 0x40044271
	BPF_A                                   = 0x10
	BPF_ABS                                 = 0x20
	BPF_ADD                                 = 0x0
	BPF_ALIGNMENT                           = 0x4
	BPF_ALU                                 = 0x4
	BPF_AND                                 = 0x50
	BPF_B                                   = 0x10
	BPF_DIV                                 = 0x30
	BPF_H                                   = 0x8
	BPF_IMM                                 = 0x0
	BPF_IND                                 = 0x40
	BPF_JA                                  = 0x0
	BPF_JEQ                                 = 0x10
	BPF_JGE                                 = 0x30
	BPF_JGT                                 = 0x20
	BPF_JMP                                 = 0x5
	BPF_JSET                                = 0x40
	BPF_K                                   = 0x0
	BPF_LD                                  = 0x0
	BPF_LDX                                 = 0x1
	BPF_LEN                                 = 0x80
	BPF_LSH                                 = 0x60
	BPF_MAJOR_VERSION                       = 0x1
	BPF_MAXBUFSIZE                          = 0x80000
	BPF_MAXINSNS                            = 0x200
	BPF_MEM                                 = 0x60
	BPF_MEMWORDS                            = 0x10
	BPF_MINBUFSIZE                          = 0x20
	BPF_MINOR_VERSION                       = 0x1
	BPF_MISC                                = 0x7
	BPF_MSH                                 = 0xa0
	BPF_MUL                                 = 0x20
	BPF_NEG                                 = 0x80
	BPF_OR                                  = 0x40
	BPF_RELEASE                             = 0x30bb6
	BPF_RET                                 = 0x6
	BPF_RSH                                 = 0x70
	BPF_ST                                  = 0x2
	BPF_STX                                 = 0x3
	BPF_SUB                                 = 0x10
	BPF_TAX                                 = 0x0
	BPF_TXA                                 = 0x80
	BPF_W                                   = 0x0
	BPF_X                                   = 0x8
	BRKINT                                  = 0x2
	BS0                                     = 0x0
	BS1                                     = 0x8000
	BSDLY                                   = 0x8000
	CFLUSH                                  = 0xf
	CLOCAL                                  = 0x8000
	CLOCK_MONOTONIC                         = 0x6
	CLOCK_MONOTONIC_RAW                     = 0x4
	CLOCK_MONOTONIC_RAW_APPROX              = 0x5
	CLOCK_PROCESS_CPUTIME_ID                = 0xc
	CLOCK_REALTIME                          = 0x0
	CLOCK_THREAD_CPUTIME_ID                 = 0x10
	CLOCK_UPTIME_RAW                        = 0x8
	CLOCK_UPTIME_RAW_APPROX                 = 0x9
	CLONE_NOFOLLOW                          = 0x1
	CLONE_NOOWNERCOPY                       = 0x2
	CR0                                     = 0x0
	CR1                                     = 0x1000
	CR2                                     = 0x2000
	CR3                                     = 0x3000
	CRDLY                                   = 0x3000
	CREAD                                   = 0x800
	CRTSCTS                                 = 0x30000
	CS5                                     = 0x0
	CS6                                     = 0x100
	CS7                                     = 0x200
	CS8                                     = 0x300
	CSIZE                                   = 0x300
	CSTART                                  = 0x11
	CSTATUS                                 = 0x14
	CSTOP                                   = 0x13
	CSTOPB                                  = 0x400
	CSUSP                                   = 0x1a
	CTLIOCGINFO                             = 0xc0644e03
	CTL_HW                                  = 0x6
	CTL_KERN                                = 0x1
	CTL_MAXNAME                             = 0xc
	CTL_NET                                 = 0x4
	DLT_A429                                = 0xb8
	DLT_A653_ICM                            = 0xb9
	DLT_AIRONET_HEADER                      = 0x78
	DLT_AOS                                 = 0xde
	DLT_APPLE_IP_OVER_IEEE1394              = 0x8a
	DLT_ARCNET                              = 0x7
	DLT_ARCNET_LINUX                        = 0x81
	DLT_ATM_CLIP                            = 0x13
	DLT_ATM_RFC1483                         = 0xb
	DLT_AURORA                              = 0x7e
	DLT_AX25                                = 0x3
	DLT_AX25_KISS                           = 0xca
	DLT_BACNET_MS_TP                        = 0xa5
	DLT_BLUETOOTH_HCI_H4                    = 0xbb
	DLT_BLUETOOTH_HCI_H4_WITH_PHDR          = 0xc9
	DLT_CAN20B                              = 0xbe
	DLT_CAN_SOCKETCAN                       = 0xe3
	DLT_CHAOS                               = 0x5
	DLT_CHDLC                               = 0x68
	DLT_CISCO_IOS                           = 0x76
	DLT_C_HDLC                              = 0x68
	DLT_C_HDLC_WITH_DIR                     = 0xcd
	DLT_DBUS                                = 0xe7
	DLT_DECT                                = 0xdd
	DLT_DOCSIS                              = 0x8f
	DLT_DVB_CI                              = 0xeb
	DLT_ECONET                              = 0x73
	DLT_EN10MB                              = 0x1
	DLT_EN3MB                               = 0x2
	DLT_ENC                                 = 0x6d
	DLT_ERF                                 = 0xc5
	DLT_ERF_ETH                             = 0xaf
	DLT_ERF_POS                             = 0xb0
	DLT_FC_2                                = 0xe0
	DLT_FC_2_WITH_FRAME_DELIMS              = 0xe1
	DLT_FDDI                                = 0xa
	DLT_FLEXRAY                             = 0xd2
	DLT_FRELAY                              = 0x6b
	DLT_FRELAY_WITH_DIR                     = 0xce
	DLT_GCOM_SERIAL                         = 0xad
	DLT_GCOM_T1E1                           = 0xac
	DLT_GPF_F                               = 0xab
	DLT_GPF_T                               = 0xaa
	DLT_GPRS_LLC                            = 0xa9
	DLT_GSMTAP_ABIS                         = 0xda
	DLT_GSMTAP_UM                           = 0xd9
	DLT_HHDLC                               = 0x79
	DLT_IBM_SN                              = 0x92
	DLT_IBM_SP                              = 0x91
	DLT_IEEE802                             = 0x6
	DLT_IEEE802_11                          = 0x69
	DLT_IEEE802_11_RADIO                    = 0x7f
	DLT_IEEE802_11_RADIO_AVS                = 0xa3
	DLT_IEEE802_15_4                        = 0xc3
	DLT_IEEE802_15_4_LINUX                  = 0xbf
	DLT_IEEE802_15_4_NOFCS                  = 0xe6
	DLT_IEEE802_15_4_NONASK_PHY             = 0xd7
	DLT_IEEE802_16_MAC_CPS                  = 0xbc
	DLT_IEEE802_16_MAC_CPS_RADIO            = 0xc1
	DLT_IPFILTER                            = 0x74
	DLT_IPMB                                = 0xc7
	DLT_IPMB_LINUX                          = 0xd1
	DLT_IPNET                               = 0xe2
	DLT_IPOIB                               = 0xf2
	DLT_IPV4                                = 0xe4
	DLT_IPV6                                = 0xe5
	DLT_IP_OVER_FC                          = 0x7a
	DLT_JUNIPER_ATM1                        = 0x89
	DLT_JUNIPER_ATM2                        = 0x87
	DLT_JUNIPER_ATM_CEMIC                   = 0xee
	DLT_JUNIPER_CHDLC                       = 0xb5
	DLT_JUNIPER_ES                          = 0x84
	DLT_JUNIPER_ETHER                       = 0xb2
	DLT_JUNIPER_FIBRECHANNEL                = 0xea
	DLT_JUNIPER_FRELAY                      = 0xb4
	DLT_JUNIPER_GGSN                        = 0x85
	DLT_JUNIPER_ISM                         = 0xc2
	DLT_JUNIPER_MFR                         = 0x86
	DLT_JUNIPER_MLFR                        = 0x83
	DLT_JUNIPER_MLPPP                       = 0x82
	DLT_JUNIPER_MONITOR                     = 0xa4
	DLT_JUNIPER_PIC_PEER                    = 0xae
	DLT_JUNIPER_PPP                         = 0xb3
	DLT_JUNIPER_PPPOE                       = 0xa7
	DLT_JUNIPER_PPPOE_ATM                   = 0xa8
	DLT_JUNIPER_SERVICES                    = 0x88
	DLT_JUNIPER_SRX_E2E                     = 0xe9
	DLT_JUNIPER_ST                          = 0xc8
	DLT_JUNIPER_VP                          = 0xb7
	DLT_JUNIPER_VS                          = 0xe8
	DLT_LAPB_WITH_DIR                       = 0xcf
	DLT_LAPD                                = 0xcb
	DLT_LIN                                 = 0xd4
	DLT_LINUX_EVDEV                         = 0xd8
	DLT_LINUX_IRDA                          = 0x90
	DLT_LINUX_LAPD                          = 0xb1
	DLT_LINUX_PPP_WITHDIRECTION             = 0xa6
	DLT_LINUX_SLL                           = 0x71
	DLT_LOOP                                = 0x6c
	DLT_LTALK                               = 0x72
	DLT_MATCHING_MAX                        = 0x10a
	DLT_MATCHING_MIN                        = 0x68
	DLT_MFR                                 = 0xb6
	DLT_MOST                                = 0xd3
	DLT_MPEG_2_TS                           = 0xf3
	DLT_MPLS                                = 0xdb
	DLT_MTP2                                = 0x8c
	DLT_MTP2_WITH_PHDR                      = 0x8b
	DLT_MTP3                                = 0x8d
	DLT_MUX27010                            = 0xec
	DLT_NETANALYZER                         = 0xf0
	DLT_NETANALYZER_TRANSPARENT             = 0xf1
	DLT_NFC_LLCP                            = 0xf5
	DLT_NFLOG                               = 0xef
	DLT_NG40                                = 0xf4
	DLT_NULL                                = 0x0
	DLT_PCI_EXP                             = 0x7d
	DLT_PFLOG                               = 0x75
	DLT_PFSYNC                              = 0x12
	DLT_PPI                                 = 0xc0
	DLT_PPP                                 = 0x9
	DLT_PPP_BSDOS                           = 0x10
	DLT_PPP_ETHER                           = 0x33
	DLT_PPP_PPPD                            = 0xa6
	DLT_PPP_SERIAL                          = 0x32
	DLT_PPP_WITH_DIR                        = 0xcc
	DLT_PPP_WITH_DIRECTION                  = 0xa6
	DLT_PRISM_HEADER                        = 0x77
	DLT_PRONET                              = 0x4
	DLT_RAIF1                               = 0xc6
	DLT_RAW                                 = 0xc
	DLT_RIO                                 = 0x7c
	DLT_SCCP                                = 0x8e
	DLT_SITA                                = 0xc4
	DLT_SLIP                                = 0x8
	DLT_SLIP_BSDOS                          = 0xf
	DLT_STANAG_5066_D_PDU                   = 0xed
	DLT_SUNATM                              = 0x7b
	DLT_SYMANTEC_FIREWALL                   = 0x63
	DLT_TZSP                                = 0x80
	DLT_USB                                 = 0xba
	DLT_USB_DARWIN                          = 0x10a
	DLT_USB_LINUX                           = 0xbd
	DLT_USB_LINUX_MMAPPED                   = 0xdc
	DLT_USER0                               = 0x93
	DLT_USER1                               = 0x94
	DLT_USER10                              = 0x9d
	DLT_USER11                              = 0x9e
	DLT_USER12                              = 0x9f
	DLT_USER13                              = 0xa0
	DLT_USER14                              = 0xa1
	DLT_USER15                              = 0xa2
	DLT_USER2                               = 0x95
	DLT_USER3                               = 0x96
	DLT_USER4                               = 0x97
	DLT_USER5                               = 0x98
	DLT_USER6                               = 0x99
	DLT_USER7                               = 0x9a
	DLT_USER8                               = 0x9b
	DLT_USER9                               = 0x9c
	DLT_WIHART                              = 0xdf
	DLT_X2E_SERIAL                          = 0xd5
	DLT_X2E_XORAYA                          = 0xd6
	DT_BLK                                  = 0x6
	DT_CHR                                  = 0x2
	DT_DIR                                  = 0x4
	DT_FIFO                                 = 0x1
	DT_LNK                                  = 0xa
	DT_REG                                  = 0x8
	DT_SOCK                                 = 0xc
	DT_UNKNOWN                              = 0x0
	DT_WHT                                  = 0xe
	ECHO                                    = 0x8
	ECHOCTL                                 = 0x40
	ECHOE                                   = 0x2
	ECHOK                                   = 0x4
	ECHOKE                                  = 0x1
	ECHONL                                  = 0x10
	ECHOPRT                                 = 0x20
	EVFILT_AIO                              = -0x3
	EVFILT_EXCEPT                           = -0xf
	EVFILT_FS                               = -0x9
	EVFILT_MACHPORT                         = -0x8
	EVFILT_PROC                             = -0x5
	EVFILT_READ                             = -0x1
	EVFILT_SIGNAL                           = -0x6
	EVFILT_SYSCOUNT                         = 0x11
	EVFILT_THREADMARKER                     = 0x11
	EVFILT_TIMER                            = -0x7
	EVFILT_USER                             = -0xa
	EVFILT_VM                               = -0xc
	EVFILT_VNODE                            = -0x4
	EVFILT_WRITE                            = -0x2
	EV_ADD                                  = 0x1
	EV_CLEAR                                = 0x20
	EV_DELETE                               = 0x2
	EV_DISABLE                              = 0x8
	EV_DISPATCH                             = 0x80
	EV_DISPATCH2                            = 0x180
	EV_ENABLE                               = 0x4
	EV_EOF                                  = 0x8000
	EV_ERROR                                = 0x4000
	EV_FLAG0                                = 0x1000
	EV_FLAG1                                = 0x2000
	EV_ONESHOT                              = 0x10
	EV_OOBAND                               = 0x2000
	EV_POLL                                 = 0x1000
	EV_RECEIPT                              = 0x40
	EV_SYSFLAGS                             = 0xf000
	EV_UDATA_SPECIFIC                       = 0x100
	EV_VANISHED                             = 0x200
	EXTA                                    = 0x4b00
	EXTB                                    = 0x9600
	EXTPROC                                 = 0x800
	FD_CLOEXEC                              = 0x1
	FD_SETSIZE                              = 0x400
	FF0                                     = 0x0
	FF1                                     = 0x4000
	FFDLY                                   = 0x4000
	FLUSHO                                  = 0x800000
	FSOPT_ATTR_CMN_EXTENDED                 = 0x20
	FSOPT_NOFOLLOW                          = 0x1
	FSOPT_NOINMEMUPDATE                     = 0x2
	FSOPT_PACK_INVAL_ATTRS                  = 0x8
	FSOPT_REPORT_FULLSIZE                   = 0x4
	FSOPT_RETURN_REALDEV                    = 0x200
	F_ADDFILESIGS                           = 0x3d
	F_ADDFILESIGS_FOR_DYLD_SIM              = 0x53
	F_ADDFILESIGS_INFO                      = 0x67
	F_ADDFILESIGS_RETURN                    = 0x61
	F_ADDFILESUPPL                          = 0x68
	F_ADDSIGS                               = 0x3b
	F_ALLOCATEALL                           = 0x4
	F_ALLOCATECONTIG                        = 0x2
	F_BARRIERFSYNC                          = 0x55
	F_CHECK_LV                              = 0x62
	F_CHKCLEAN                              = 0x29
	F_DUPFD                                 = 0x0
	F_DUPFD_CLOEXEC                         = 0x43
	F_FINDSIGS                              = 0x4e
	F_FLUSH_DATA                            = 0x28
	F_FREEZE_FS                             = 0x35
	F_FULLFSYNC                             = 0x33
	F_GETCODEDIR                            = 0x48
	F_GETFD                                 = 0x1
	F_GETFL                                 = 0x3
	F_GETLK                                 = 0x7
	F_GETLKPID                              = 0x42
	F_GETNOSIGPIPE                          = 0x4a
	F_GETOWN                                = 0x5
	F_GETPATH                               = 0x32
	F_GETPATH_MTMINFO                       = 0x47
	F_GETPATH_NOFIRMLINK                    = 0x66
	F_GETPROTECTIONCLASS                    = 0x3f
	F_GETPROTECTIONLEVEL                    = 0x4d
	F_GETSIGSINFO                           = 0x69
	F_GLOBAL_NOCACHE                        = 0x37
	F_LOG2PHYS                              = 0x31
	F_LOG2PHYS_EXT                          = 0x41
	F_NOCACHE                               = 0x30
	F_NODIRECT                              = 0x3e
	F_OK                                    = 0x0
	F_PATHPKG_CHECK                         = 0x34
	F_PEOFPOSMODE                           = 0x3
	F_PREALLOCATE                           = 0x2a
	F_PUNCHHOLE                             = 0x63
	F_RDADVISE                              = 0x2c
	F_RDAHEAD                               = 0x2d
	F_RDLCK                                 = 0x1
	F_SETBACKINGSTORE                       = 0x46
	F_SETFD                                 = 0x2
	F_SETFL                                 = 0x4
	F_SETLK                                 = 0x8
	F_SETLKW                                = 0x9
	F_SETLKWTIMEOUT                         = 0xa
	F_SETNOSIGPIPE                          = 0x49
	F_SETOWN                                = 0x6
	F_SETPROTECTIONCLASS                    = 0x40
	F_SETSIZE                               = 0x2b
	F_SINGLE_WRITER                         = 0x4c
	F_SPECULATIVE_READ                      = 0x65
	F_THAW_FS                               = 0x36
	F_TRANSCODEKEY                          = 0x4b
	F_TRIM_ACTIVE_FILE                      = 0x64
	F_UNLCK                                 = 0x2
	F_VOLPOSMODE                            = 0x4
	F_WRLCK                                 = 0x3
	HUPCL                                   = 0x4000
	HW_MACHINE                              = 0x1
	ICANON                                  = 0x100
	ICMP6_FILTER                            = 0x12
	ICRNL                                   = 0x100
	IEXTEN                                  = 0x400
	IFF_ALLMULTI                            = 0x200
	IFF_ALTPHYS                             = 0x4000
	IFF_BROADCAST                           = 0x2
	IFF_DEBUG                               = 0x4
	IFF_LINK0                               = 0x1000
	IFF_LINK1                               = 0x2000
	IFF_LINK2                               = 0x4000
	IFF_LOOPBACK                            = 0x8
	IFF_MULTICAST                           = 0x8000
	IFF_NOARP                               = 0x80
	IFF_NOTRAILERS                          = 0x20
	IFF_OACTIVE                             = 0x400
	IFF_POINTOPOINT                         = 0x10
	IFF_PROMISC                             = 0x100
	IFF_RUNNING                             = 0x40
	IFF_SIMPLEX                             = 0x800
	IFF_UP                                  = 0x1
	IFNAMSIZ                                = 0x10
	IFT_1822                                = 0x2
	IFT_6LOWPAN                             = 0x40
	IFT_AAL5                                = 0x31
	IFT_ARCNET                              = 0x23
	IFT_ARCNETPLUS                          = 0x24
	IFT_ATM                                 = 0x25
	IFT_BRIDGE                              = 0xd1
	IFT_CARP                                = 0xf8
	IFT_CELLULAR                            = 0xff
	IFT_CEPT                                = 0x13
	IFT_DS3                                 = 0x1e
	IFT_ENC                                 = 0xf4
	IFT_EON                                 = 0x19
	IFT_ETHER                               = 0x6
	IFT_FAITH                               = 0x38
	IFT_FDDI                                = 0xf
	IFT_FRELAY                              = 0x20
	IFT_FRELAYDCE                           = 0x2c
	IFT_GIF                                 = 0x37
	IFT_HDH1822                             = 0x3
	IFT_HIPPI                               = 0x2f
	IFT_HSSI                                = 0x2e
	IFT_HY                                  = 0xe
	IFT_IEEE1394                            = 0x90
	IFT_IEEE8023ADLAG                       = 0x88
	IFT_ISDNBASIC                           = 0x14
	IFT_ISDNPRIMARY                         = 0x15
	IFT_ISO88022LLC                         = 0x29
	IFT_ISO88023                            = 0x7
	IFT_ISO88024                            = 0x8
	IFT_ISO88025                            = 0x9
	IFT_ISO88026                            = 0xa
	IFT_L2VLAN                              = 0x87
	IFT_LAPB                                = 0x10
	IFT_LOCALTALK                           = 0x2a
	IFT_LOOP                                = 0x18
	IFT_MIOX25                              = 0x26
	IFT_MODEM                               = 0x30
	IFT_NSIP                                = 0x1b
	IFT_OTHER                               = 0x1
	IFT_P10                                 = 0xc
	IFT_P80                                 = 0xd
	IFT_PARA                                = 0x22
	IFT_PDP                                 = 0xff
	IFT_PFLOG                               = 0xf5
	IFT_PFSYNC                              = 0xf6
	IFT_PKTAP                               = 0xfe
	IFT_PPP                                 = 0x17
	IFT_PROPMUX                             = 0x36
	IFT_PROPVIRTUAL                         = 0x35
	IFT_PTPSERIAL                           = 0x16
	IFT_RS232                               = 0x21
	IFT_SDLC                                = 0x11
	IFT_SIP                                 = 0x1f
	IFT_SLIP                                = 0x1c
	IFT_SMDSDXI                             = 0x2b
	IFT_SMDSICIP                            = 0x34
	IFT_SONET                               = 0x27
	IFT_SONETPATH                           = 0x32
	IFT_SONETVT                             = 0x33
	IFT_STARLAN                             = 0xb
	IFT_STF                                 = 0x39
	IFT_T1                                  = 0x12
	IFT_ULTRA                               = 0x1d
	IFT_V35                                 = 0x2d
	IFT_X25                                 = 0x5
	IFT_X25DDN                              = 0x4
	IFT_X25PLE                              = 0x28
	IFT_XETHER                              = 0x1a
	IGNBRK                                  = 0x1
	IGNCR                                   = 0x80
	IGNPAR                                  = 0x4
	IMAXBEL                                 = 0x2000
	INLCR                                   = 0x40
	INPCK                                   = 0x10
	IN_CLASSA_HOST                          = 0xffffff
	IN_CLASSA_MAX                           = 0x80
	IN_CLASSA_NET                           = 0xff000000
	IN_CLASSA_NSHIFT                        = 0x18
	IN_CLASSB_HOST                          = 0xffff
	IN_CLASSB_MAX                           = 0x10000
	IN_CLASSB_NET                           = 0xffff0000
	IN_CLASSB_NSHIFT                        = 0x10
	IN_CLASSC_HOST                          = 0xff
	IN_CLASSC_NET                           = 0xffffff00
	IN_CLASSC_NSHIFT                        = 0x8
	IN_CLASSD_HOST                          = 0xfffffff
	IN_CLASSD_NET                           = 0xf0000000
	IN_CLASSD_NSHIFT                        = 0x1c
	IN_LINKLOCALNETNUM                      = 0xa9fe0000
	IN_LOOPBACKNET                          = 0x7f
	IOCTL_VM_SOCKETS_GET_LOCAL_CID          = 0x400473d1
	IPPROTO_3PC                             = 0x22
	IPPROTO_ADFS                            = 0x44
	IPPROTO_AH                              = 0x33
	IPPROTO_AHIP                            = 0x3d
	IPPROTO_APES                            = 0x63
	IPPROTO_ARGUS                           = 0xd
	IPPROTO_AX25                            = 0x5d
	IPPROTO_BHA                             = 0x31
	IPPROTO_BLT                             = 0x1e
	IPPROTO_BRSATMON                        = 0x4c
	IPPROTO_CFTP                            = 0x3e
	IPPROTO_CHAOS                           = 0x10
	IPPROTO_CMTP                            = 0x26
	IPPROTO_CPHB                            = 0x49
	IPPROTO_CPNX                            = 0x48
	IPPROTO_DDP                             = 0x25
	IPPROTO_DGP                             = 0x56
	IPPROTO_DIVERT                          = 0xfe
	IPPROTO_DONE                            = 0x101
	IPPROTO_DSTOPTS                         = 0x3c
	IPPROTO_EGP                             = 0x8
	IPPROTO_EMCON                           = 0xe
	IPPROTO_ENCAP                           = 0x62
	IPPROTO_EON                             = 0x50
	IPPROTO_ESP                             = 0x32
	IPPROTO_ETHERIP                         = 0x61
	IPPROTO_FRAGMENT                        = 0x2c
	IPPROTO_GGP                             = 0x3
	IPPROTO_GMTP                            = 0x64
	IPPROTO_GRE                             = 0x2f
	IPPROTO_HELLO                           = 0x3f
	IPPROTO_HMP                             = 0x14
	IPPROTO_HOPOPTS                         = 0x0
	IPPROTO_ICMP                            = 0x1
	IPPROTO_ICMPV6                          = 0x3a
	IPPROTO_IDP                             = 0x16
	IPPROTO_IDPR                            = 0x23
	IPPROTO_IDRP                            = 0x2d
	IPPROTO_IGMP                            = 0x2
	IPPROTO_IGP                             = 0x55
	IPPROTO_IGRP                            = 0x58
	IPPROTO_IL                              = 0x28
	IPPROTO_INLSP                           = 0x34
	IPPROTO_INP                             = 0x20
	IPPROTO_IP                              = 0x0
	IPPROTO_IPCOMP                          = 0x6c
	IPPROTO_IPCV                            = 0x47
	IPPROTO_IPEIP                           = 0x5e
	IPPROTO_IPIP                            = 0x4
	IPPROTO_IPPC                            = 0x43
	IPPROTO_IPV4                            = 0x4
	IPPROTO_IPV6                            = 0x29
	IPPROTO_IRTP                            = 0x1c
	IPPROTO_KRYPTOLAN                       = 0x41
	IPPROTO_LARP                            = 0x5b
	IPPROTO_LEAF1                           = 0x19
	IPPROTO_LEAF2                           = 0x1a
	IPPROTO_MAX                             = 0x100
	IPPROTO_MAXID                           = 0x34
	IPPROTO_MEAS                            = 0x13
	IPPROTO_MHRP                            = 0x30
	IPPROTO_MICP                            = 0x5f
	IPPROTO_MTP                             = 0x5c
	IPPROTO_MUX                             = 0x12
	IPPROTO_ND                              = 0x4d
	IPPROTO_NHRP                            = 0x36
	IPPROTO_NONE                            = 0x3b
	IPPROTO_NSP                             = 0x1f
	IPPROTO_NVPII                           = 0xb
	IPPROTO_OSPFIGP                         = 0x59
	IPPROTO_PGM                             = 0x71
	IPPROTO_PIGP                            = 0x9
	IPPROTO_PIM                             = 0x67
	IPPROTO_PRM                             = 0x15
	IPPROTO_PUP                             = 0xc
	IPPROTO_PVP                             = 0x4b
	IPPROTO_RAW                             = 0xff
	IPPROTO_RCCMON                          = 0xa
	IPPROTO_RDP                             = 0x1b
	IPPROTO_ROUTING                         = 0x2b
	IPPROTO_RSVP                            = 0x2e
	IPPROTO_RVD                             = 0x42
	IPPROTO_SATEXPAK                        = 0x40
	IPPROTO_SATMON                          = 0x45
	IPPROTO_SCCSP                           = 0x60
	IPPROTO_SCTP                            = 0x84
	IPPROTO_SDRP                            = 0x2a
	IPPROTO_SEP                             = 0x21
	IPPROTO_SRPC                            = 0x5a
	IPPROTO_ST                              = 0x7
	IPPROTO_SVMTP                           = 0x52
	IPPROTO_SWIPE                           = 0x35
	IPPROTO_TCF                             = 0x57
	IPPROTO_TCP                             = 0x6
	IPPROTO_TP                              = 0x1d
	IPPROTO_TPXX                            = 0x27
	IPPROTO_TRUNK1                          = 0x17
	IPPROTO_TRUNK2                          = 0x18
	IPPROTO_TTP                             = 0x54
	IPPROTO_UDP                             = 0x11
	IPPROTO_VINES                           = 0x53
	IPPROTO_VISA                            = 0x46
	IPPROTO_VMTP                            = 0x51
	IPPROTO_WBEXPAK                         = 0x4f
	IPPROTO_WBMON                           = 0x4e
	IPPROTO_WSN                             = 0x4a
	IPPROTO_XNET                            = 0xf
	IPPROTO_XTP                             = 0x24
	IPV6_2292DSTOPTS                        = 0x17
	IPV6_2292HOPLIMIT                       = 0x14
	IPV6_2292HOPOPTS                        = 0x16
	IPV6_2292NEXTHOP                        = 0x15
	IPV6_2292PKTINFO                        = 0x13
	IPV6_2292PKTOPTIONS                     = 0x19
	IPV6_2292RTHDR                          = 0x18
	IPV6_3542DSTOPTS                        = 0x32
	IPV6_3542HOPLIMIT                       = 0x2f
	IPV6_3542HOPOPTS                        = 0x31
	IPV6_3542NEXTHOP                        = 0x30
	IPV6_3542PKTINFO                        = 0x2e
	IPV6_3542RTHDR                          = 0x33
	IPV6_ADDR_MC_FLAGS_PREFIX               = 0x20
	IPV6_ADDR_MC_FLAGS_TRANSIENT            = 0x10
	IPV6_ADDR_MC_FLAGS_UNICAST_BASED        = 0x30
	IPV6_AUTOFLOWLABEL                      = 0x3b
	IPV6_BINDV6ONLY                         = 0x1b
	IPV6_BOUND_IF                           = 0x7d
	IPV6_CHECKSUM                           = 0x1a
	IPV6_DEFAULT_MULTICAST_HOPS             = 0x1
	IPV6_DEFAULT_MULTICAST_LOOP             = 0x1
	IPV6_DEFHLIM                            = 0x40
	IPV6_DONTFRAG                           = 0x3e
	IPV6_DSTOPTS                            = 0x32
	IPV6_FAITH                              = 0x1d
	IPV6_FLOWINFO_MASK                      = 0xffffff0f
	IPV6_FLOWLABEL_MASK                     = 0xffff0f00
	IPV6_FLOW_ECN_MASK                      = 0x3000
	IPV6_FRAGTTL                            = 0x3c
	IPV6_FW_ADD                             = 0x1e
	IPV6_FW_DEL                             = 0x1f
	IPV6_FW_FLUSH                           = 0x20
	IPV6_FW_GET                             = 0x22
	IPV6_FW_ZERO                            = 0x21
	IPV6_HLIMDEC                            = 0x1
	IPV6_HOPLIMIT                           = 0x2f
	IPV6_HOPOPTS                            = 0x31
	IPV6_IPSEC_POLICY                       = 0x1c
	IPV6_JOIN_GROUP                         = 0xc
	IPV6_LEAVE_GROUP                        = 0xd
	IPV6_MAXHLIM                            = 0xff
	IPV6_MAXOPTHDR                          = 0x800
	IPV6_MAXPACKET                          = 0xffff
	IPV6_MAX_GROUP_SRC_FILTER               = 0x200
	IPV6_MAX_MEMBERSHIPS                    = 0xfff
	IPV6_MAX_SOCK_SRC_FILTER                = 0x80
	IPV6_MIN_MEMBERSHIPS                    = 0x1f
	IPV6_MMTU                               = 0x500
	IPV6_MSFILTER                           = 0x4a
	IPV6_MULTICAST_HOPS                     = 0xa
	IPV6_MULTICAST_IF                       = 0x9
	IPV6_MULTICAST_LOOP                     = 0xb
	IPV6_NEXTHOP                            = 0x30
	IPV6_PATHMTU                            = 0x2c
	IPV6_PKTINFO                            = 0x2e
	IPV6_PORTRANGE                          = 0xe
	IPV6_PORTRANGE_DEFAULT                  = 0x0
	IPV6_PORTRANGE_HIGH                     = 0x1
	IPV6_PORTRANGE_LOW                      = 0x2
	IPV6_PREFER_TEMPADDR                    = 0x3f
	IPV6_RECVDSTOPTS                        = 0x28
	IPV6_RECVHOPLIMIT                       = 0x25
	IPV6_RECVHOPOPTS                        = 0x27
	IPV6_RECVPATHMTU                        = 0x2b
	IPV6_RECVPKTINFO                        = 0x3d
	IPV6_RECVRTHDR                          = 0x26
	IPV6_RECVTCLASS                         = 0x23
	IPV6_RTHDR                              = 0x33
	IPV6_RTHDRDSTOPTS                       = 0x39
	IPV6_RTHDR_LOOSE                        = 0x0
	IPV6_RTHDR_STRICT                       = 0x1
	IPV6_RTHDR_TYPE_0                       = 0x0
	IPV6_SOCKOPT_RESERVED1                  = 0x3
	IPV6_TCLASS                             = 0x24
	IPV6_UNICAST_HOPS                       = 0x4
	IPV6_USE_MIN_MTU                        = 0x2a
	IPV6_V6ONLY                             = 0x1b
	IPV6_VERSION                            = 0x60
	IPV6_VERSION_MASK                       = 0xf0
	IP_ADD_MEMBERSHIP                       = 0xc
	IP_ADD_SOURCE_MEMBERSHIP                = 0x46
	IP_BLOCK_SOURCE                         = 0x48
	IP_BOUND_IF                             = 0x19
	IP_DEFAULT_MULTICAST_LOOP               = 0x1
	IP_DEFAULT_MULTICAST_TTL                = 0x1
	IP_DF                                   = 0x4000
	IP_DONTFRAG                             = 0x1c
	IP_DROP_MEMBERSHIP                      = 0xd
	IP_DROP_SOURCE_MEMBERSHIP               = 0x47
	IP_DUMMYNET_CONFIGURE                   = 0x3c
	IP_DUMMYNET_DEL                         = 0x3d
	IP_DUMMYNET_FLUSH                       = 0x3e
	IP_DUMMYNET_GET                         = 0x40
	IP_FAITH                                = 0x16
	IP_FW_ADD                               = 0x28
	IP_FW_DEL                               = 0x29
	IP_FW_FLUSH                             = 0x2a
	IP_FW_GET                               = 0x2c
	IP_FW_RESETLOG                          = 0x2d
	IP_FW_ZERO                              = 0x2b
	IP_HDRINCL                              = 0x2
	IP_IPSEC_POLICY                         = 0x15
	IP_MAXPACKET                            = 0xffff
	IP_MAX_GROUP_SRC_FILTER                 = 0x200
	IP_MAX_MEMBERSHIPS                      = 0xfff
	IP_MAX_SOCK_MUTE_FILTER                 = 0x80
	IP_MAX_SOCK_SRC_FILTER                  = 0x80
	IP_MF                                   = 0x2000
	IP_MIN_MEMBERSHIPS                      = 0x1f
	IP_MSFILTER                             = 0x4a
	IP_MSS                                  = 0x240
	IP_MULTICAST_IF                         = 0x9
	IP_MULTICAST_IFINDEX                    = 0x42
	IP_MULTICAST_LOOP                       = 0xb
	IP_MULTICAST_TTL                        = 0xa
	IP_MULTICAST_VIF                        = 0xe
	IP_NAT__XXX                             = 0x37
	IP_OFFMASK                              = 0x1fff
	IP_OLD_FW_ADD                           = 0x32
	IP_OLD_FW_DEL                           = 0x33
	IP_OLD_FW_FLUSH                         = 0x34
	IP_OLD_FW_GET                           = 0x36
	IP_OLD_FW_RESETLOG                      = 0x38
	IP_OLD_FW_ZERO                          = 0x35
	IP_OPTIONS                              = 0x1
	IP_PKTINFO                              = 0x1a
	IP_PORTRANGE                            = 0x13
	IP_PORTRANGE_DEFAULT                    = 0x0
	IP_PORTRANGE_HIGH                       = 0x1
	IP_PORTRANGE_LOW                        = 0x2
	IP_RECVDSTADDR                          = 0x7
	IP_RECVIF                               = 0x14
	IP_RECVOPTS                             = 0x5
	IP_RECVPKTINFO                          = 0x1a
	IP_RECVRETOPTS                          = 0x6
	IP_RECVTOS                              = 0x1b
	IP_RECVTTL                              = 0x18
	IP_RETOPTS                              = 0x8
	IP_RF                                   = 0x8000
	IP_RSVP_OFF                             = 0x10
	IP_RSVP_ON                              = 0xf
	IP_RSVP_VIF_OFF                         = 0x12
	IP_RSVP_VIF_ON                          = 0x11
	IP_STRIPHDR                             = 0x17
	IP_TOS                                  = 0x3
	IP_TRAFFIC_MGT_BACKGROUND               = 0x41
	IP_TTL                                  = 0x4
	IP_UNBLOCK_SOURCE                       = 0x49
	ISIG                                    = 0x80
	ISTRIP                                  = 0x20
	IUTF8                                   = 0x4000
	IXANY                                   = 0x800
	IXOFF                                   = 0x400
	IXON                                    = 0x200
	KERN_HOSTNAME                           = 0xa
	KERN_OSRELEASE                          = 0x2
	KERN_OSTYPE                             = 0x1
	KERN_VERSION                            = 0x4
	LOCAL_PEERCRED                          = 0x1
	LOCAL_PEEREPID                          = 0x3
	LOCAL_PEEREUUID                         = 0x5
	LOCAL_PEERPID                           = 0x2
	LOCAL_PEERTOKEN                         = 0x6
	LOCAL_PEERUUID                          = 0x4
	LOCK_EX                                 = 0x2
	LOCK_NB                                 = 0x4
	LOCK_SH                                 = 0x1
	LOCK_UN                                 = 0x8
	MADV_CAN_REUSE                          = 0x9
	MADV_DONTNEED                           = 0x4
	MADV_FREE                               = 0x5
	MADV_FREE_REUSABLE                      = 0x7
	MADV_FREE_REUSE                         = 0x8
	MADV_NORMAL                             = 0x0
	MADV_PAGEOUT                            = 0xa
	MADV_RANDOM                             = 0x1
	MADV_SEQUENTIAL                         = 0x2
	MADV_WILLNEED                           = 0x3
	MADV_ZERO_WIRED_PAGES                   = 0x6
	MAP_32BIT                               = 0x8000
	MAP_ANON                                = 0x1000
	MAP_ANONYMOUS                           = 0x1000
	MAP_COPY                                = 0x2
	MAP_FILE                                = 0x0
	MAP_FIXED                               = 0x10
	MAP_HASSEMAPHORE                        = 0x200
	MAP_JIT                                 = 0x800
	MAP_NOCACHE                             = 0x400
	MAP_NOEXTEND                            = 0x100
	MAP_NORESERVE                           = 0x40
	MAP_PRIVATE                             = 0x2
	MAP_RENAME                              = 0x20
	MAP_RESERVED0080                        = 0x80
	MAP_RESILIENT_CODESIGN                  = 0x2000
	MAP_RESILIENT_MEDIA                     = 0x4000
	MAP_SHARED                              = 0x1
	MAP_TRANSLATED_ALLOW_EXECUTE            = 0x20000
	MAP_UNIX03                              = 0x40000
	MCAST_BLOCK_SOURCE                      = 0x54
	MCAST_EXCLUDE                           = 0x2
	MCAST_INCLUDE                           = 0x1
	MCAST_JOIN_GROUP                        = 0x50
	MCAST_JOIN_SOURCE_GROUP                 = 0x52
	MCAST_LEAVE_GROUP                       = 0x51
	MCAST_LEAVE_SOURCE_GROUP                = 0x53
	MCAST_UNBLOCK_SOURCE                    = 0x55
	MCAST_UNDEFINED                         = 0x0
	MCL_CURRENT                             = 0x1
	MCL_FUTURE                              = 0x2
	MNT_ASYNC                               = 0x40
	MNT_AUTOMOUNTED                         = 0x400000
	MNT_CMDFLAGS                            = 0xf0000
	MNT_CPROTECT                            = 0x80
	MNT_DEFWRITE                            = 0x2000000
	MNT_DONTBROWSE                          = 0x100000
	MNT_DOVOLFS                             = 0x8000
	MNT_DWAIT                               = 0x4
	MNT_EXPORTED                            = 0x100
	MNT_EXT_ROOT_DATA_VOL                   = 0x1
	MNT_FORCE                               = 0x80000
	MNT_IGNORE_OWNERSHIP                    = 0x200000
	MNT_JOURNALED                           = 0x800000
	MNT_LOCAL                               = 0x1000
	MNT_MULTILABEL                          = 0x4000000
	MNT_NOATIME                             = 0x10000000
	MNT_NOBLOCK                             = 0x20000
	MNT_NODEV                               = 0x10
	MNT_NOEXEC                              = 0x4
	MNT_NOSUID                              = 0x8
	MNT_NOUSERXATTR                         = 0x1000000
	MNT_NOWAIT                              = 0x2
	MNT_QUARANTINE                          = 0x400
	MNT_QUOTA                               = 0x2000
	MNT_RDONLY                              = 0x1
	MNT_RELOAD                              = 0x40000
	MNT_REMOVABLE                           = 0x200
	MNT_ROOTFS                              = 0x4000
	MNT_SNAPSHOT                            = 0x40000000
	MNT_STRICTATIME                         = 0x80000000
	MNT_SYNCHRONOUS                         = 0x2
	MNT_UNION                               = 0x20
	MNT_UNKNOWNPERMISSIONS                  = 0x200000
	MNT_UPDATE                              = 0x10000
	MNT_VISFLAGMASK                         = 0xd7f0f7ff
	MNT_WAIT                                = 0x1
	MSG_CTRUNC                              = 0x20
	MSG_DONTROUTE                           = 0x4
	MSG_DONTWAIT                            = 0x80
	MSG_EOF                                 = 0x100
	MSG_EOR                                 = 0x8
	MSG_FLUSH                               = 0x400
	MSG_HAVEMORE                            = 0x2000
	MSG_HOLD                                = 0x800
	MSG_NEEDSA                              = 0x10000
	MSG_NOSIGNAL                            = 0x80000
	MSG_OOB                                 = 0x1
	MSG_PEEK                                = 0x2
	MSG_RCVMORE                             = 0x4000
	MSG_SEND                                = 0x1000
	MSG_TRUNC                               = 0x10
	MSG_WAITALL                             = 0x40
	MSG_WAITSTREAM                          = 0x200
	MS_ASYNC                                = 0x1
	MS_DEACTIVATE                           = 0x8
	MS_INVALIDATE                           = 0x2
	MS_KILLPAGES                            = 0x4
	MS_SYNC                                 = 0x10
	NAME_MAX                                = 0xff
	NET_RT_DUMP                             = 0x1
	NET_RT_DUMP2                            = 0x7
	NET_RT_FLAGS                            = 0x2
	NET_RT_FLAGS_PRIV                       = 0xa
	NET_RT_IFLIST                           = 0x3
	NET_RT_IFLIST2                          = 0x6
	NET_RT_MAXID                            = 0xb
	NET_RT_STAT                             = 0x4
	NET_RT_TRASH                            = 0x5
	NFDBITS                                 = 0x20
	NL0                                     = 0x0
	NL1                                     = 0x100
	NL2                                     = 0x200
	NL3                                     = 0x300
	NLDLY                                   = 0x300
	NOFLSH                                  = 0x80000000
	NOKERNINFO                              = 0x2000000
	NOTE_ABSOLUTE                           = 0x8
	NOTE_ATTRIB                             = 0x8
	NOTE_BACKGROUND                         = 0x40
	NOTE_CHILD                              = 0x4
	NOTE_CRITICAL                           = 0x20
	NOTE_DELETE                             = 0x1
	NOTE_EXEC                               = 0x20000000
	NOTE_EXIT                               = 0x80000000
	NOTE_EXITSTATUS                         = 0x4000000
	NOTE_EXIT_CSERROR                       = 0x40000
	NOTE_EXIT_DECRYPTFAIL                   = 0x10000
	NOTE_EXIT_DETAIL                        = 0x2000000
	NOTE_EXIT_DETAIL_MASK                   = 0x70000
	NOTE_EXIT_MEMORY                        = 0x20000
	NOTE_EXIT_REPARENTED                    = 0x80000
	NOTE_EXTEND                             = 0x4
	NOTE_FFAND                              = 0x40000000
	NOTE_FFCOPY                             = 0xc0000000
	NOTE_FFCTRLMASK                         = 0xc0000000
	NOTE_FFLAGSMASK                         = 0xffffff
	NOTE_FFNOP                              = 0x0
	NOTE_FFOR                               = 0x80000000
	NOTE_FORK                               = 0x40000000
	NOTE_FUNLOCK                            = 0x100
	NOTE_LEEWAY                             = 0x10
	NOTE_LINK                               = 0x10
	NOTE_LOWAT                              = 0x1
	NOTE_MACHTIME                           = 0x100
	NOTE_MACH_CONTINUOUS_TIME               = 0x80
	NOTE_NONE                               = 0x80
	NOTE_NSECONDS                           = 0x4
	NOTE_OOB                                = 0x2
	NOTE_PCTRLMASK                          = -0x100000
	NOTE_PDATAMASK                          = 0xfffff
	NOTE_REAP                               = 0x10000000
	NOTE_RENAME                             = 0x20
	NOTE_REVOKE                             = 0x40
	NOTE_SECONDS                            = 0x1
	NOTE_SIGNAL                             = 0x8000000
	NOTE_TRACK                              = 0x1
	NOTE_TRACKERR                           = 0x2
	NOTE_TRIGGER                            = 0x1000000
	NOTE_USECONDS                           = 0x2
	NOTE_VM_ERROR                           = 0x10000000
	NOTE_VM_PRESSURE                        = 0x80000000
	NOTE_VM_PRESSURE_SUDDEN_TERMINATE       = 0x20000000
	NOTE_VM_PRESSURE_TERMINATE              = 0x40000000
	NOTE_WRITE                              = 0x2
	OCRNL                                   = 0x10
	OFDEL                                   = 0x20000
	OFILL                                   = 0x80
	ONLCR                                   = 0x2
	ONLRET                                  = 0x40
	ONOCR                                   = 0x20
	ONOEOT                                  = 0x8
	OPOST                                   = 0x1
	OXTABS                                  = 0x4
	O_ACCMODE                               = 0x3
	O_ALERT                                 = 0x20000000
	O_APPEND                                = 0x8
	O_ASYNC                                 = 0x40
	O_CLOEXEC                               = 0x1000000
	O_CREAT                                 = 0x200
	O_DIRECTORY                             = 0x100000
	O_DP_GETRAWENCRYPTED                    = 0x1
	O_DP_GETRAWUNENCRYPTED                  = 0x2
	O_DSYNC                                 = 0x400000
	O_EVTONLY                               = 0x8000
	O_EXCL                                  = 0x800
	O_EXLOCK                                = 0x20
	O_FSYNC                                 = 0x80
	O_NDELAY                                = 0x4
	O_NOCTTY                                = 0x20000
	O_NOFOLLOW                              = 0x100
	O_NOFOLLOW_ANY                          = 0x20000000
	O_NONBLOCK                              = 0x4
	O_POPUP                                 = 0x80000000
	O_RDONLY                                = 0x0
	O_RDWR                                  = 0x2
	O_SHLOCK                                = 0x10
	O_SYMLINK                               = 0x200000
	O_SYNC                                  = 0x80
	O_TRUNC                                 = 0x400
	O_WRONLY                                = 0x1
	PARENB                                  = 0x1000
	PARMRK                                  = 0x8
	PARODD                                  = 0x2000
	PENDIN                                  = 0x20000000
	PRIO_PGRP                               = 0x1
	PRIO_PROCESS                            = 0x0
	PRIO_USER                               = 0x2
	PROT_EXEC                               = 0x4
	PROT_NONE                               = 0x0
	PROT_READ                               = 0x1
	PROT_WRITE                              = 0x2
	PT_ATTACH                               = 0xa
	PT_ATTACHEXC                            = 0xe
	PT_CONTINUE                             = 0x7
	PT_DENY_ATTACH                          = 0x1f
	PT_DETACH                               = 0xb
	PT_FIRSTMACH                            = 0x20
	PT_FORCEQUOTA                           = 0x1e
	PT_KILL                                 = 0x8
	PT_READ_D                               = 0x2
	PT_READ_I                               = 0x1
	PT_READ_U                               = 0x3
	PT_SIGEXC                               = 0xc
	PT_STEP                                 = 0x9
	PT_THUPDATE                             = 0xd
	PT_TRACE_ME                             = 0x0
	PT_WRITE_D                              = 0x5
	PT_WRITE_I                              = 0x4
	PT_WRITE_U                              = 0x6
	RLIMIT_AS                               = 0x5
	RLIMIT_CORE                             = 0x4
	RLIMIT_CPU                              = 0x0
	RLIMIT_CPU_USAGE_MONITOR                = 0x2
	RLIMIT_DATA                             = 0x2
	RLIMIT_FSIZE                            = 0x1
	RLIMIT_MEMLOCK                          = 0x6
	RLIMIT_NOFILE                           = 0x8
	RLIMIT_NPROC                            = 0x7
	RLIMIT_RSS                              = 0x5
	RLIMIT_STACK                            = 0x3
	RLIM_INFINITY                           = 0x7fffffffffffffff
	RTAX_AUTHOR                             = 0x6
	RTAX_BRD                                = 0x7
	RTAX_DST                                = 0x0
	RTAX_GATEWAY                            = 0x1
	RTAX_GENMASK                            = 0x3
	RTAX_IFA                                = 0x5
	RTAX_IFP                                = 0x4
	RTAX_MAX                                = 0x8
	RTAX_NETMASK                            = 0x2
	RTA_AUTHOR                              = 0x40
	RTA_BRD                                 = 0x80
	RTA_DST                                 = 0x1
	RTA_GATEWAY                             = 0x2
	RTA_GENMASK                             = 0x8
	RTA_IFA                                 = 0x20
	RTA_IFP                                 = 0x10
	RTA_NETMASK                             = 0x4
	RTF_BLACKHOLE                           = 0x1000
	RTF_BROADCAST                           = 0x400000
	RTF_CLONING                             = 0x100
	RTF_CONDEMNED                           = 0x2000000
	RTF_DEAD                                = 0x20000000
	RTF_DELCLONE                            = 0x80
	RTF_DONE                                = 0x40
	RTF_DYNAMIC                             = 0x10
	RTF_GATEWAY                             = 0x2
	RTF_GLOBAL                              = 0x40000000
	RTF_HOST                                = 0x4
	RTF_IFREF                               = 0x4000000
	RTF_IFSCOPE                             = 0x1000000
	RTF_LLDATA                              = 0x400
	RTF_LLINFO                              = 0x400
	RTF_LOCAL                               = 0x200000
	RTF_MODIFIED                            = 0x20
	RTF_MULTICAST                           = 0x800000
	RTF_NOIFREF                             = 0x2000
	RTF_PINNED                              = 0x100000
	RTF_PRCLONING                           = 0x10000
	RTF_PROTO1                              = 0x8000
	RTF_PROTO2                              = 0x4000
	RTF_PROTO3                              = 0x40000
	RTF_PROXY                               = 0x8000000
	RTF_REJECT                              = 0x8
	RTF_ROUTER                              = 0x10000000
	RTF_STATIC                              = 0x800
	RTF_UP                                  = 0x1
	RTF_WASCLONED                           = 0x20000
	RTF_XRESOLVE                            = 0x200
	RTM_ADD                                 = 0x1
	RTM_CHANGE                              = 0x3
	RTM_DELADDR                             = 0xd
	RTM_DELETE                              = 0x2
	RTM_DELMADDR                            = 0x10
	RTM_GET                                 = 0x4
	RTM_GET2                                = 0x14
	RTM_IFINFO                              = 0xe
	RTM_IFINFO2                             = 0x12
	RTM_LOCK                                = 0x8
	RTM_LOSING                              = 0x5
	RTM_MISS                                = 0x7
	RTM_NEWADDR                             = 0xc
	RTM_NEWMADDR                            = 0xf
	RTM_NEWMADDR2                           = 0x13
	RTM_OLDADD                              = 0x9
	RTM_OLDDEL                              = 0xa
	RTM_REDIRECT                            = 0x6
	RTM_RESOLVE                             = 0xb
	RTM_RTTUNIT                             = 0xf4240
	RTM_VERSION                             = 0x5
	RTV_EXPIRE                              = 0x4
	RTV_HOPCOUNT                            = 0x2
	RTV_MTU                                 = 0x1
	RTV_RPIPE                               = 0x8
	RTV_RTT                                 = 0x40
	RTV_RTTVAR                              = 0x80
	RTV_SPIPE                               = 0x10
	RTV_SSTHRESH                            = 0x20
	RUSAGE_CHILDREN                         = -0x1
	RUSAGE_SELF                             = 0x0
	SCM_CREDS                               = 0x3
	SCM_RIGHTS                              = 0x1
	SCM_TIMESTAMP                           = 0x2
	SCM_TIMESTAMP_MONOTONIC                 = 0x4
	SEEK_CUR                                = 0x1
	SEEK_DATA                               = 0x4
	SEEK_END                                = 0x2
	SEEK_HOLE                               = 0x3
	SEEK_SET                                = 0x0
	SF_APPEND                               = 0x40000
	SF_ARCHIVED                             = 0x10000
	SF_DATALESS                             = 0x40000000
	SF_FIRMLINK                             = 0x800000
	SF_IMMUTABLE                            = 0x20000
	SF_NOUNLINK                             = 0x100000
	SF_RESTRICTED                           = 0x80000
	SF_SETTABLE                             = 0x3fff0000
	SF_SUPPORTED                            = 0x9f0000
	SF_SYNTHETIC                            = 0xc0000000
	SHUT_RD                                 = 0x0
	SHUT_RDWR                               = 0x2
	SHUT_WR                                 = 0x1
	SIOCADDMULTI                            = 0x80206931
	SIOCAIFADDR                             = 0x8040691a
	SIOCARPIPLL                             = 0xc0206928
	SIOCATMARK                              = 0x40047307
	SIOCAUTOADDR                            = 0xc0206926
	SIOCAUTONETMASK                         = 0x80206927
	SIOCDELMULTI                            = 0x80206932
	SIOCDIFADDR                             = 0x80206919
	SIOCDIFPHYADDR                          = 0x80206941
	SIOCGDRVSPEC                            = 0xc028697b
	SIOCGETVLAN                             = 0xc020697f
	SIOCGHIWAT                              = 0x40047301
	SIOCGIF6LOWPAN                          = 0xc02069c5
	SIOCGIFADDR                             = 0xc0206921
	SIOCGIFALTMTU                           = 0xc0206948
	SIOCGIFASYNCMAP                         = 0xc020697c
	SIOCGIFBOND                             = 0xc0206947
	SIOCGIFBRDADDR                          = 0xc0206923
	SIOCGIFCAP                              = 0xc020695b
	SIOCGIFCONF                             = 0xc00c6924
	SIOCGIFDEVMTU                           = 0xc0206944
	SIOCGIFDSTADDR                          = 0xc0206922
	SIOCGIFFLAGS                            = 0xc0206911
	SIOCGIFFUNCTIONALTYPE                   = 0xc02069ad
	SIOCGIFGENERIC                          = 0xc020693a
	SIOCGIFKPI                              = 0xc0206987
	SIOCGIFMAC                              = 0xc0206982
	SIOCGIFMEDIA                            = 0xc02c6938
	SIOCGIFMETRIC                           = 0xc0206917
	SIOCGIFMTU                              = 0xc0206933
	SIOCGIFNETMASK                          = 0xc0206925
	SIOCGIFPDSTADDR                         = 0xc0206940
	SIOCGIFPHYS                             = 0xc0206935
	SIOCGIFPSRCADDR                         = 0xc020693f
	SIOCGIFSTATUS                           = 0xc331693d
	SIOCGIFVLAN                             = 0xc020697f
	SIOCGIFWAKEFLAGS                        = 0xc0206988
	SIOCGIFXMEDIA                           = 0xc02c6948
	SIOCGLOWAT                              = 0x40047303
	SIOCGPGRP                               = 0x40047309
	SIOCIFCREATE                            = 0xc0206978
	SIOCIFCREATE2                           = 0xc020697a
	SIOCIFDESTROY                           = 0x80206979
	SIOCIFGCLONERS                          = 0xc0106981
	SIOCRSLVMULTI                           = 0xc010693b
	SIOCSDRVSPEC                            = 0x8028697b
	SIOCSETVLAN                             = 0x8020697e
	SIOCSHIWAT                              = 0x80047300
	SIOCSIF6LOWPAN                          = 0x802069c4
	SIOCSIFADDR                             = 0x8020690c
	SIOCSIFALTMTU                           = 0x80206945
	SIOCSIFASYNCMAP                         = 0x8020697d
	SIOCSIFBOND                             = 0x80206946
	SIOCSIFBRDADDR                          = 0x80206913
	SIOCSIFCAP                              = 0x8020695a
	SIOCSIFDSTADDR                          = 0x8020690e
	SIOCSIFFLAGS                            = 0x80206910
	SIOCSIFGENERIC                          = 0x80206939
	SIOCSIFKPI                              = 0x80206986
	SIOCSIFLLADDR                           = 0x8020693c
	SIOCSIFMAC                              = 0x80206983
	SIOCSIFMEDIA                            = 0xc0206937
	SIOCSIFMETRIC                           = 0x80206918
	SIOCSIFMTU                              = 0x80206934
	SIOCSIFNETMASK                          = 0x80206916
	SIOCSIFPHYADDR                          = 0x8040693e
	SIOCSIFPHYS                             = 0x80206936
	SIOCSIFVLAN                             = 0x8020697e
	SIOCSLOWAT                              = 0x80047302
	SIOCSPGRP                               = 0x80047308
	SOCK_DGRAM                              = 0x2
	SOCK_MAXADDRLEN                         = 0xff
	SOCK_RAW                                = 0x3
	SOCK_RDM                                = 0x4
	SOCK_SEQPACKET                          = 0x5
	SOCK_STREAM                             = 0x1
	SOL_LOCAL                               = 0x0
	SOL_SOCKET                              = 0xffff
	SOMAXCONN                               = 0x80
	SO_ACCEPTCONN                           = 0x2
	SO_BROADCAST                            = 0x20
	SO_DEBUG                                = 0x1
	SO_DONTROUTE                            = 0x10
	SO_DONTTRUNC                            = 0x2000
	SO_ERROR                                = 0x1007
	SO_KEEPALIVE                            = 0x8
	SO_LABEL                                = 0x1010
	SO_LINGER                               = 0x80
	SO_LINGER_SEC                           = 0x1080
	SO_NETSVC_MARKING_LEVEL                 = 0x1119
	SO_NET_SERVICE_TYPE                     = 0x1116
	SO_NKE                                  = 0x1021
	SO_NOADDRERR                            = 0x1023
	SO_NOSIGPIPE                            = 0x1022
	SO_NOTIFYCONFLICT                       = 0x1026
	SO_NP_EXTENSIONS                        = 0x1083
	SO_NREAD                                = 0x1020
	SO_NUMRCVPKT                            = 0x1112
	SO_NWRITE                               = 0x1024
	SO_OOBINLINE                            = 0x100
	SO_PEERLABEL                            = 0x1011
	SO_RANDOMPORT                           = 0x1082
	SO_RCVBUF                               = 0x1002
	SO_RCVLOWAT                             = 0x1004
	SO_RCVTIMEO                             = 0x1006
	SO_REUSEADDR                            = 0x4
	SO_REUSEPORT                            = 0x200
	SO_REUSESHAREUID                        = 0x1025
	SO_SNDBUF                               = 0x1001
	SO_SNDLOWAT                             = 0x1003
	SO_SNDTIMEO                             = 0x1005
	SO_TIMESTAMP                            = 0x400
	SO_TIMESTAMP_MONOTONIC                  = 0x800
	SO_TRACKER_ATTRIBUTE_FLAGS_APP_APPROVED = 0x1
	SO_TRACKER_ATTRIBUTE_FLAGS_DOMAIN_SHORT = 0x4
	SO_TRACKER_ATTRIBUTE_FLAGS_TRACKER      = 0x2
	SO_TRACKER_TRANSPARENCY_VERSION         = 0x3
	SO_TYPE                                 = 0x1008
	SO_UPCALLCLOSEWAIT                      = 0x1027
	SO_USELOOPBACK                          = 0x40
	SO_WANTMORE                             = 0x4000
	SO_WANTOOBFLAG                          = 0x8000
	S_IEXEC                                 = 0x40
	S_IFBLK                                 = 0x6000
	S_IFCHR                                 = 0x2000
	S_IFDIR                                 = 0x4000
	S_IFIFO                                 = 0x1000
	S_IFLNK                                 = 0xa000
	S_IFMT                                  = 0xf000
	S_IFREG                                 = 0x8000
	S_IFSOCK                                = 0xc000
	S_IFWHT                                 = 0xe000
	S_IREAD                                 = 0x100
	S_IRGRP                                 = 0x20
	S_IROTH                                 = 0x4
	S_IRUSR                                 = 0x100
	S_IRWXG                                 = 0x38
	S_IRWXO                                 = 0x7
	S_IRWXU                                 = 0x1c0
	S_ISGID                                 = 0x400
	S_ISTXT                                 = 0x200
	S_ISUID                                 = 0x800
	S_ISVTX                                 = 0x200
	S_IWGRP                                 = 0x10
	S_IWOTH                                 = 0x2
	S_IWRITE                                = 0x80
	S_IWUSR                                 = 0x80
	S_IXGRP                                 = 0x8
	S_IXOTH                                 = 0x1
	S_IXUSR                                 = 0x40
	TAB0                                    = 0x0
	TAB1                                    = 0x400
	TAB2                                    = 0x800
	TAB3                                    = 0x4
	TABDLY                                  = 0xc04
	TCIFLUSH                                = 0x1
	TCIOFF                                  = 0x3
	TCIOFLUSH                               = 0x3
	TCION                                   = 0x4
	TCOFLUSH                                = 0x2
	TCOOFF                                  = 0x1
	TCOON                                   = 0x2
	TCPOPT_CC                               = 0xb
	TCPOPT_CCECHO                           = 0xd
	TCPOPT_CCNEW                            = 0xc
	TCPOPT_EOL                              = 0x0
	TCPOPT_FASTOPEN                         = 0x22
	TCPOPT_MAXSEG                           = 0x2
	TCPOPT_NOP                              = 0x1
	TCPOPT_SACK                             = 0x5
	TCPOPT_SACK_HDR                         = 0x1010500
	TCPOPT_SACK_PERMITTED                   = 0x4
	TCPOPT_SACK_PERMIT_HDR                  = 0x1010402
	TCPOPT_SIGNATURE                        = 0x13
	TCPOPT_TIMESTAMP                        = 0x8
	TCPOPT_TSTAMP_HDR                       = 0x101080a
	TCPOPT_WINDOW                           = 0x3
	TCP_CONNECTIONTIMEOUT                   = 0x20
	TCP_CONNECTION_INFO                     = 0x106
	TCP_ENABLE_ECN                          = 0x104
	TCP_FASTOPEN                            = 0x105
	TCP_KEEPALIVE                           = 0x10
	TCP_KEEPCNT                             = 0x102
	TCP_KEEPINTVL                           = 0x101
	TCP_MAXHLEN                             = 0x3c
	TCP_MAXOLEN                             = 0x28
	TCP_MAXSEG                              = 0x2
	TCP_MAXWIN                              = 0xffff
	TCP_MAX_SACK                            = 0x4
	TCP_MAX_WINSHIFT                        = 0xe
	TCP_MINMSS                              = 0xd8
	TCP_MSS                                 = 0x200
	TCP_NODELAY                             = 0x1
	TCP_NOOPT                               = 0x8
	TCP_NOPUSH                              = 0x4
	TCP_NOTSENT_LOWAT                       = 0x201
	TCP_RXT_CONNDROPTIME                    = 0x80
	TCP_RXT_FINDROP                         = 0x100
	TCP_SENDMOREACKS                        = 0x103
	TCSAFLUSH                               = 0x2
	TIOCCBRK                                = 0x2000747a
	TIOCCDTR                                = 0x20007478
	TIOCCONS                                = 0x80047462
	TIOCDCDTIMESTAMP                        = 0x40107458
	TIOCDRAIN                               = 0x2000745e
	TIOCDSIMICROCODE                        = 0x20007455
	TIOCEXCL                                = 0x2000740d
	TIOCEXT                                 = 0x80047460
	TIOCFLUSH                               = 0x80047410
	TIOCGDRAINWAIT                          = 0x40047456
	TIOCGETA                                = 0x40487413
	TIOCGETD                                = 0x4004741a
	TIOCGPGRP                               = 0x40047477
	TIOCGWINSZ                              = 0x40087468
	TIOCIXOFF                               = 0x20007480
	TIOCIXON                                = 0x20007481
	TIOCMBIC                                = 0x8004746b
	TIOCMBIS                                = 0x8004746c
	TIOCMGDTRWAIT                           = 0x4004745a
	TIOCMGET                                = 0x4004746a
	TIOCMODG                                = 0x40047403
	TIOCMODS                                = 0x80047404
	TIOCMSDTRWAIT                           = 0x8004745b
	TIOCMSET                                = 0x8004746d
	TIOCM_CAR                               = 0x40
	TIOCM_CD                                = 0x40
	TIOCM_CTS                               = 0x20
	TIOCM_DSR                               = 0x100
	TIOCM_DTR                               = 0x2
	TIOCM_LE                                = 0x1
	TIOCM_RI                                = 0x80
	TIOCM_RNG                               = 0x80
	TIOCM_RTS                               = 0x4
	TIOCM_SR                                = 0x10
	TIOCM_ST                                = 0x8
	TIOCNOTTY                               = 0x20007471
	TIOCNXCL                                = 0x2000740e
	TIOCOUTQ                                = 0x40047473
	TIOCPKT                                 = 0x80047470
	TIOCPKT_DATA                            = 0x0
	TIOCPKT_DOSTOP                          = 0x20
	TIOCPKT_FLUSHREAD                       = 0x1
	TIOCPKT_FLUSHWRITE                      = 0x2
	TIOCPKT_IOCTL                           = 0x40
	TIOCPKT_NOSTOP                          = 0x10
	TIOCPKT_START                           = 0x8
	TIOCPKT_STOP                            = 0x4
	TIOCPTYGNAME                            = 0x40807453
	TIOCPTYGRANT                            = 0x20007454
	TIOCPTYUNLK                             = 0x20007452
	TIOCREMOTE                              = 0x80047469
	TIOCSBRK                                = 0x2000747b
	TIOCSCONS                               = 0x20007463
	TIOCSCTTY                               = 0x20007461
	TIOCSDRAINWAIT                          = 0x80047457
	TIOCSDTR                                = 0x20007479
	TIOCSETA                                = 0x80487414
	TIOCSETAF                               = 0x80487416
	TIOCSETAW                               = 0x80487415
	TIOCSETD                                = 0x8004741b
	TIOCSIG                                 = 0x2000745f
	TIOCSPGRP                               = 0x80047476
	TIOCSTART                               = 0x2000746e
	TIOCSTAT                                = 0x20007465
	TIOCSTI                                 = 0x80017472
	TIOCSTOP                                = 0x2000746f
	TIOCSWINSZ                              = 0x80087467
	TIOCTIMESTAMP                           = 0x40107459
	TIOCUCNTL                               = 0x80047466
	TOSTOP                                  = 0x400000
	UF_APPEND                               = 0x4
	UF_COMPRESSED                           = 0x20
	UF_DATAVAULT                            = 0x80
	UF_HIDDEN                               = 0x8000
	UF_IMMUTABLE                            = 0x2
	UF_NODUMP                               = 0x1
	UF_OPAQUE                               = 0x8
	UF_SETTABLE                             = 0xffff
	UF_TRACKED                              = 0x40
	VDISCARD                                = 0xf
	VDSUSP                                  = 0xb
	VEOF                                    = 0x0
	VEOL                                    = 0x1
	VEOL2                                   = 0x2
	VERASE                                  = 0x3
	VINTR                                   = 0x8
	VKILL                                   = 0x5
	VLNEXT                                  = 0xe
	VMADDR_CID_ANY                          = 0xffffffff
	VMADDR_CID_HOST                         = 0x2
	VMADDR_CID_HYPERVISOR                   = 0x0
	VMADDR_CID_RESERVED                     = 0x1
	VMADDR_PORT_ANY                         = 0xffffffff
	VMIN                                    = 0x10
	VM_LOADAVG                              = 0x2
	VM_MACHFACTOR                           = 0x4
	VM_MAXID                                = 0x6
	VM_METER                                = 0x1
	VM_SWAPUSAGE                            = 0x5
	VQUIT                                   = 0x9
	VREPRINT                                = 0x6
	VSTART                                  = 0xc
	VSTATUS                                 = 0x12
	VSTOP                                   = 0xd
	VSUSP                                   = 0xa
	VT0                                     = 0x0
	VT1                                     = 0x10000
	VTDLY                                   = 0x10000
	VTIME                                   = 0x11
	VWERASE                                 = 0x4
	WCONTINUED                              = 0x10
	WCOREFLAG                               = 0x80
	WEXITED                                 = 0x4
	WNOHANG                                 = 0x1
	WNOWAIT                                 = 0x20
	WORDSIZE                                = 0x40
	WSTOPPED                                = 0x8
	WUNTRACED                               = 0x2
	XATTR_CREATE                            = 0x2
	XATTR_NODEFAULT                         = 0x10
	XATTR_NOFOLLOW                          = 0x1
	XATTR_NOSECURITY                        = 0x8
	XATTR_REPLACE                           = 0x4
	XATTR_SHOWCOMPRESSION                   = 0x20
)

// Errors
const (
	E2BIG           = syscall.Errno(0x7)
	EACCES          = syscall.Errno(0xd)
	EADDRINUSE      = syscall.Errno(0x30)
	EADDRNOTAVAIL   = syscall.Errno(0x31)
	EAFNOSUPPORT    = syscall.Errno(0x2f)
	EAGAIN          = syscall.Errno(0x23)
	EALREADY        = syscall.Errno(0x25)
	EAUTH           = syscall.Errno(0x50)
	EBADARCH        = syscall.Errno(0x56)
	EBADEXEC        = syscall.Errno(0x55)
	EBADF           = syscall.Errno(0x9)
	EBADMACHO       = syscall.Errno(0x58)
	EBADMSG         = syscall.Errno(0x5e)
	EBADRPC         = syscall.Errno(0x48)
	EBUSY           = syscall.Errno(0x10)
	ECANCELED       = syscall.Errno(0x59)
	ECHILD          = syscall.Errno(0xa)
	ECONNABORTED    = syscall.Errno(0x35)
	ECONNREFUSED    = syscall.Errno(0x3d)
	ECONNRESET      = syscall.Errno(0x36)
	EDEADLK         = syscall.Errno(0xb)
	EDESTADDRREQ    = syscall.Errno(0x27)
	EDEVERR         = syscall.Errno(0x53)
	EDOM            = syscall.Errno(0x21)
	EDQUOT          = syscall.Errno(0x45)
	EEXIST          = syscall.Errno(0x11)
	EFAULT          = syscall.Errno(0xe)
	EFBIG           = syscall.Errno(0x1b)
	EFTYPE          = syscall.Errno(0x4f)
	EHOSTDOWN       = syscall.Errno(0x40)
	EHOSTUNREACH    = syscall.Errno(0x41)
	EIDRM           = syscall.Errno(0x5a)
	EILSEQ          = syscall.Errno(0x5c)
	EINPROGRESS     = syscall.Errno(0x24)
	EINTR           = syscall.Errno(0x4)
	EINVAL          = syscall.Errno(0x16)
	EIO             = syscall.Errno(0x5)
	EISCONN         = syscall.Errno(0x38)
	EISDIR          = syscall.Errno(0x15)
	ELAST           = syscall.Errno(0x6a)
	ELOOP           = syscall.Errno(0x3e)
	EMFILE          = syscall.Errno(0x18)
	EMLINK          = syscall.Errno(0x1f)
	EMSGSIZE        = syscall.Errno(0x28)
	EMULTIHOP       = syscall.Errno(0x5f)
	ENAMETOOLONG    = syscall.Errno(0x3f)
	ENEEDAUTH       = syscall.Errno(0x51)
	ENETDOWN        = syscall.Errno(0x32)
	ENETRESET       = syscall.Errno(0x34)
	ENETUNREACH     = syscall.Errno(0x33)
	ENFILE          = syscall.Errno(0x17)
	ENOATTR         = syscall.Errno(0x5d)
	ENOBUFS         = syscall.Errno(0x37)
	ENODATA         = syscall.Errno(0x60)
	ENODEV          = syscall.Errno(0x13)
	ENOENT          = syscall.Errno(0x2)
	ENOEXEC         = syscall.Errno(0x8)
	ENOLCK          = syscall.Errno(0x4d)
	ENOLINK         = syscall.Errno(0x61)
	ENOMEM          = syscall.Errno(0xc)
	ENOMSG          = syscall.Errno(0x5b)
	ENOPOLICY       = syscall.Errno(0x67)
	ENOPROTOOPT     = syscall.Errno(0x2a)
	ENOSPC          = syscall.Errno(0x1c)
	ENOSR           = syscall.Errno(0x62)
	ENOSTR          = syscall.Errno(0x63)
	ENOSYS          = syscall.Errno(0x4e)
	ENOTBLK         = syscall.Errno(0xf)
	ENOTCONN        = syscall.Errno(0x39)
	ENOTDIR         = syscall.Errno(0x14)
	ENOTEMPTY       = syscall.Errno(0x42)
	ENOTRECOVERABLE = syscall.Errno(0x68)
	ENOTSOCK        = syscall.Errno(0x26)
	ENOTSUP         = syscall.Errno(0x2d)
	ENOTTY          = syscall.Errno(0x19)
	ENXIO           = syscall.Errno(0x6)
	EOPNOTSUPP      = syscall.Errno(0x66)
	EOVERFLOW       = syscall.Errno(0x54)
	EOWNERDEAD      = syscall.Errno(0x69)
	EPERM           = syscall.Errno(0x1)
	EPFNOSUPPORT    = syscall.Errno(0x2e)
	EPIPE           = syscall.Errno(0x20)
	EPROCLIM        = syscall.Errno(0x43)
	EPROCUNAVAIL    = syscall.Errno(0x4c)
	EPROGMISMATCH   = syscall.Errno(0x4b)
	EPROGUNAVAIL    = syscall.Errno(0x4a)
	EPROTO          = syscall.Errno(0x64)
	EPROTONOSUPPORT = syscall.Errno(0x2b)
	EPROTOTYPE      = syscall.Errno(0x29)
	EPWROFF         = syscall.Errno(0x52)
	EQFULL          = syscall.Errno(0x6a)
	ERANGE          = syscall.Errno(0x22)
	EREMOTE         = syscall.Errno(0x47)
	EROFS           = syscall.Errno(0x1e)
	ERPCMISMATCH    = syscall.Errno(0x49)
	ESHLIBVERS      = syscall.Errno(0x57)
	ESHUTDOWN       = syscall.Errno(0x3a)
	ESOCKTNOSUPPORT = syscall.Errno(0x2c)
	ESPIPE          = syscall.Errno(0x1d)
	ESRCH           = syscall.Errno(0x3)
	ESTALE          = syscall.Errno(0x46)
	ETIME           = syscall.Errno(0x65)
	ETIMEDOUT       = syscall.Errno(0x3c)
	ETOOMANYREFS    = syscall.Errno(0x3b)
	ETXTBSY         = syscall.Errno(0x1a)
	EUSERS          = syscall.Errno(0x44)
	EWOULDBLOCK     = syscall.Errno(0x23)
	EXDEV           = syscall.Errno(0x12)
)

// Signals
const (
	SIGABRT   = syscall.Signal(0x6)
	SIGALRM   = syscall.Signal(0xe)
	SIGBUS    = syscall.Signal(0xa)
	SIGCHLD   = syscall.Signal(0x14)
	SIGCONT   = syscall.Signal(0x13)
	SIGEMT    = syscall.Signal(0x7)
	SIGFPE    = syscall.Signal(0x8)
	SIGHUP    = syscall.Signal(0x1)
	SIGILL    = syscall.Signal(0x4)
	SIGINFO   = syscall.Signal(0x1d)
	SIGINT    = syscall.Signal(0x2)
	SIGIO     = syscall.Signal(0x17)
	SIGIOT    = syscall.Signal(0x6)
	SIGKILL   = syscall.Signal(0x9)
	SIGPIPE   = syscall.Signal(0xd)
	SIGPROF   = syscall.Signal(0x1b)
	SIGQUIT   = syscall.Signal(0x3)
	SIGSEGV   = syscall.Signal(0xb)
	SIGSTOP   = syscall.Signal(0x11)
	SIGSYS    = syscall.Signal(0xc)
	SIGTERM   = syscall.Signal(0xf)
	SIGTRAP   = syscall.Signal(0x5)
	SIGTSTP   = syscall.Signal(0x12)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x10)
	SIGUSR1   = syscall.Signal(0x1e)
	SIGUSR2   = syscall.Signal(0x1f)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "device not configured"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EDEADLK", "resource deadlock avoided"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "resource busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "cross-device link"},
	{19, "ENODEV", "operation not supported by device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "result too large"},
	{35, "EAGAIN", "resource temporarily unavailable"},
	{36, "EINPROGRESS", "operation now in progress"},
	{37, "EALREADY", "operation already in progress"},
	{38, "ENOTSOCK", "socket operation on non-socket"},
	{39, "EDESTADDRREQ", "destination address required"},
	{40, "EMSGSIZE", "message too long"},
	{41, "EPROTOTYPE", "protocol wrong type for socket"},
	{42, "ENOPROTOOPT", "protocol not available"},
	{43, "EPROTONOSUPPORT", "protocol not supported"},
	{44, "ESOCKTNOSUPPORT", "socket type not supported"},
	{45, "ENOTSUP", "operation not supported"},
	{46, "EPFNOSUPPORT", "protocol family not supported"},
	{47, "EAFNOSUPPORT", "address family not supported by protocol family"},
	{48, "EADDRINUSE", "address already in use"},
	{49, "EADDRNOTAVAIL", "can't assign requested address"},
	{50, "ENETDOWN", "network is down"},
	{51, "ENETUNREACH", "network is unreachable"},
	{52, "ENETRESET", "network dropped connection on reset"},
	{53, "ECONNABORTED", "software caused connection abort"},
	{54, "ECONNRESET", "connection reset by peer"},
	{55, "ENOBUFS", "no buffer space available"},
	{56, "EISCONN", "socket is already connected"},
	{57, "ENOTCONN", "socket is not connected"},
	{58, "ESHUTDOWN", "can't send after socket shutdown"},
	{59, "ETOOMANYREFS", "too many references: can't splice"},
	{60, "ETIMEDOUT", "operation timed out"},
	{61, "ECONNREFUSED", "connection refused"},
	{62, "ELOOP", "too many levels of symbolic links"},
	{63, "ENAMETOOLONG", "file name too long"},
	{64, "EHOSTDOWN", "host is down"},
	{65, "EHOSTUNREACH", "no route to host"},
	{66, "ENOTEMPTY", "directory not empty"},
	{67, "EPROCLIM", "too many processes"},
	{68, "EUSERS", "too many users"},
	{69, "EDQUOT", "disc quota exceeded"},
	{70, "ESTALE", "stale NFS file handle"},
	{71, "EREMOTE", "too many levels of remote in path"},
	{72, "EBADRPC", "RPC struct is bad"},
	{73, "ERPCMISMATCH", "RPC version wrong"},
	{74, "EPROGUNAVAIL", "RPC prog. not avail"},
	{75, "EPROGMISMATCH", "program version wrong"},
	{76, "EPROCUNAVAIL", "bad procedure for program"},
	{77, "ENOLCK", "no locks available"},
	{78, "ENOSYS", "function not implemented"},
	{79, "EFTYPE", "inappropriate file type or format"},
	{80, "EAUTH", "authentication error"},
	{81, "ENEEDAUTH", "need authenticator"},
	{82, "EPWROFF", "device power is off"},
	{83, "EDEVERR", "device error"},
	{84, "EOVERFLOW", "value too large to be stored in data type"},
	{85, "EBADEXEC", "bad executable (or shared library)"},
	{86, "EBADARCH", "bad CPU type in executable"},
	{87, "ESHLIBVERS", "shared library version mismatch"},
	{88, "EBADMACHO", "malformed Mach-o file"},
	{89, "ECANCELED", "operation canceled"},
	{90, "EIDRM", "identifier removed"},
	{91, "ENOMSG", "no message of desired type"},
	{92, "EILSEQ", "illegal byte sequence"},
	{93, "ENOATTR", "attribute not found"},
	{94, "EBADMSG", "bad message"},
	{95, "EMULTIHOP", "EMULTIHOP (Reserved)"},
	{96, "ENODATA", "no message available on STREAM"},
	{97, "ENOLINK", "ENOLINK (Reserved)"},
	{98, "ENOSR", "no STREAM resources"},
	{99, "ENOSTR", "not a STREAM"},
	{100, "EPROTO", "protocol error"},
	{101, "ETIME", "STREAM ioctl timeout"},
	{102, "EOPNOTSUPP", "operation not supported on socket"},
	{103, "ENOPOLICY", "policy not found"},
	{104, "ENOTRECOVERABLE", "state not recoverable"},
	{105, "EOWNERDEAD", "previous owner died"},
	{106, "EQFULL", "interface output queue is full"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/BPT trap"},
	{6, "SIGABRT", "abort trap"},
	{7, "SIGEMT", "EMT trap"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus error"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGSYS", "bad system call"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGURG", "urgent I/O condition"},
	{17, "SIGSTOP", "suspended (signal)"},
	{18, "SIGTSTP", "suspended"},
	{19, "SIGCONT", "continued"},
	{20, "SIGCHLD", "child exited"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGIO", "I/O possible"},
	{24, "SIGXCPU", "cputime limit exceeded"},
	{25, "SIGXFSZ", "filesize limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window size changes"},
	{29, "SIGINFO", "information request"},
	{30, "SIGUSR1", "user defined signal 1"},
	{31, "SIGUSR2", "user defined signal 2"},
}
07070100000E24000081A4000000000000000000000001645E367C00011AE4000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go   // mkerrors.sh -m64
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build amd64 && dragonfly
// +build amd64,dragonfly

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -m64 _const.go

package unix

import "syscall"

const (
	AF_APPLETALK                      = 0x10
	AF_ATM                            = 0x1e
	AF_BLUETOOTH                      = 0x21
	AF_CCITT                          = 0xa
	AF_CHAOS                          = 0x5
	AF_CNT                            = 0x15
	AF_COIP                           = 0x14
	AF_DATAKIT                        = 0x9
	AF_DECnet                         = 0xc
	AF_DLI                            = 0xd
	AF_E164                           = 0x1a
	AF_ECMA                           = 0x8
	AF_HYLINK                         = 0xf
	AF_IEEE80211                      = 0x23
	AF_IMPLINK                        = 0x3
	AF_INET                           = 0x2
	AF_INET6                          = 0x1c
	AF_IPX                            = 0x17
	AF_ISDN                           = 0x1a
	AF_ISO                            = 0x7
	AF_LAT                            = 0xe
	AF_LINK                           = 0x12
	AF_LOCAL                          = 0x1
	AF_MAX                            = 0x24
	AF_MPLS                           = 0x22
	AF_NATM                           = 0x1d
	AF_NETBIOS                        = 0x6
	AF_NETGRAPH                       = 0x20
	AF_OSI                            = 0x7
	AF_PUP                            = 0x4
	AF_ROUTE                          = 0x11
	AF_SIP                            = 0x18
	AF_SNA                            = 0xb
	AF_UNIX                           = 0x1
	AF_UNSPEC                         = 0x0
	ALTWERASE                         = 0x200
	B0                                = 0x0
	B110                              = 0x6e
	B115200                           = 0x1c200
	B1200                             = 0x4b0
	B134                              = 0x86
	B14400                            = 0x3840
	B150                              = 0x96
	B1800                             = 0x708
	B19200                            = 0x4b00
	B200                              = 0xc8
	B230400                           = 0x38400
	B2400                             = 0x960
	B28800                            = 0x7080
	B300                              = 0x12c
	B38400                            = 0x9600
	B460800                           = 0x70800
	B4800                             = 0x12c0
	B50                               = 0x32
	B57600                            = 0xe100
	B600                              = 0x258
	B7200                             = 0x1c20
	B75                               = 0x4b
	B76800                            = 0x12c00
	B921600                           = 0xe1000
	B9600                             = 0x2580
	BIOCFEEDBACK                      = 0x8004427d
	BIOCFLUSH                         = 0x20004268
	BIOCGBLEN                         = 0x40044266
	BIOCGDLT                          = 0x4004426a
	BIOCGDLTLIST                      = 0xc0104279
	BIOCGETIF                         = 0x4020426b
	BIOCGFEEDBACK                     = 0x4004427c
	BIOCGHDRCMPLT                     = 0x40044274
	BIOCGRSIG                         = 0x40044272
	BIOCGRTIMEOUT                     = 0x4010426e
	BIOCGSEESENT                      = 0x40044276
	BIOCGSTATS                        = 0x4008426f
	BIOCIMMEDIATE                     = 0x80044270
	BIOCLOCK                          = 0x2000427a
	BIOCPROMISC                       = 0x20004269
	BIOCSBLEN                         = 0xc0044266
	BIOCSDLT                          = 0x80044278
	BIOCSETF                          = 0x80104267
	BIOCSETIF                         = 0x8020426c
	BIOCSETWF                         = 0x8010427b
	BIOCSFEEDBACK                     = 0x8004427d
	BIOCSHDRCMPLT                     = 0x80044275
	BIOCSRSIG                         = 0x80044273
	BIOCSRTIMEOUT                     = 0x8010426d
	BIOCSSEESENT                      = 0x80044277
	BIOCVERSION                       = 0x40044271
	BPF_A                             = 0x10
	BPF_ABS                           = 0x20
	BPF_ADD                           = 0x0
	BPF_ALIGNMENT                     = 0x8
	BPF_ALU                           = 0x4
	BPF_AND                           = 0x50
	BPF_B                             = 0x10
	BPF_DEFAULTBUFSIZE                = 0x1000
	BPF_DIV                           = 0x30
	BPF_H                             = 0x8
	BPF_IMM                           = 0x0
	BPF_IND                           = 0x40
	BPF_JA                            = 0x0
	BPF_JEQ                           = 0x10
	BPF_JGE                           = 0x30
	BPF_JGT                           = 0x20
	BPF_JMP                           = 0x5
	BPF_JSET                          = 0x40
	BPF_K                             = 0x0
	BPF_LD                            = 0x0
	BPF_LDX                           = 0x1
	BPF_LEN                           = 0x80
	BPF_LSH                           = 0x60
	BPF_MAJOR_VERSION                 = 0x1
	BPF_MAXBUFSIZE                    = 0x80000
	BPF_MAXINSNS                      = 0x200
	BPF_MAX_CLONES                    = 0x80
	BPF_MEM                           = 0x60
	BPF_MEMWORDS                      = 0x10
	BPF_MINBUFSIZE                    = 0x20
	BPF_MINOR_VERSION                 = 0x1
	BPF_MISC                          = 0x7
	BPF_MOD                           = 0x90
	BPF_MSH                           = 0xa0
	BPF_MUL                           = 0x20
	BPF_NEG                           = 0x80
	BPF_OR                            = 0x40
	BPF_RELEASE                       = 0x30bb6
	BPF_RET                           = 0x6
	BPF_RSH                           = 0x70
	BPF_ST                            = 0x2
	BPF_STX                           = 0x3
	BPF_SUB                           = 0x10
	BPF_TAX                           = 0x0
	BPF_TXA                           = 0x80
	BPF_W                             = 0x0
	BPF_X                             = 0x8
	BPF_XOR                           = 0xa0
	BRKINT                            = 0x2
	CFLUSH                            = 0xf
	CLOCAL                            = 0x8000
	CLOCK_MONOTONIC                   = 0x4
	CLOCK_MONOTONIC_FAST              = 0xc
	CLOCK_MONOTONIC_PRECISE           = 0xb
	CLOCK_PROCESS_CPUTIME_ID          = 0xf
	CLOCK_PROF                        = 0x2
	CLOCK_REALTIME                    = 0x0
	CLOCK_REALTIME_FAST               = 0xa
	CLOCK_REALTIME_PRECISE            = 0x9
	CLOCK_SECOND                      = 0xd
	CLOCK_THREAD_CPUTIME_ID           = 0xe
	CLOCK_UPTIME                      = 0x5
	CLOCK_UPTIME_FAST                 = 0x8
	CLOCK_UPTIME_PRECISE              = 0x7
	CLOCK_VIRTUAL                     = 0x1
	CPUSTATES                         = 0x5
	CP_IDLE                           = 0x4
	CP_INTR                           = 0x3
	CP_NICE                           = 0x1
	CP_SYS                            = 0x2
	CP_USER                           = 0x0
	CREAD                             = 0x800
	CRTSCTS                           = 0x30000
	CS5                               = 0x0
	CS6                               = 0x100
	CS7                               = 0x200
	CS8                               = 0x300
	CSIZE                             = 0x300
	CSTART                            = 0x11
	CSTATUS                           = 0x14
	CSTOP                             = 0x13
	CSTOPB                            = 0x400
	CSUSP                             = 0x1a
	CTL_HW                            = 0x6
	CTL_KERN                          = 0x1
	CTL_MAXNAME                       = 0xc
	CTL_NET                           = 0x4
	DLT_A429                          = 0xb8
	DLT_A653_ICM                      = 0xb9
	DLT_AIRONET_HEADER                = 0x78
	DLT_AOS                           = 0xde
	DLT_APPLE_IP_OVER_IEEE1394        = 0x8a
	DLT_ARCNET                        = 0x7
	DLT_ARCNET_LINUX                  = 0x81
	DLT_ATM_CLIP                      = 0x13
	DLT_ATM_RFC1483                   = 0xb
	DLT_AURORA                        = 0x7e
	DLT_AX25                          = 0x3
	DLT_AX25_KISS                     = 0xca
	DLT_BACNET_MS_TP                  = 0xa5
	DLT_BLUETOOTH_BREDR_BB            = 0xff
	DLT_BLUETOOTH_HCI_H4              = 0xbb
	DLT_BLUETOOTH_HCI_H4_WITH_PHDR    = 0xc9
	DLT_BLUETOOTH_LE_LL               = 0xfb
	DLT_BLUETOOTH_LE_LL_WITH_PHDR     = 0x100
	DLT_BLUETOOTH_LINUX_MONITOR       = 0xfe
	DLT_CAN20B                        = 0xbe
	DLT_CAN_SOCKETCAN                 = 0xe3
	DLT_CHAOS                         = 0x5
	DLT_CHDLC                         = 0x68
	DLT_CISCO_IOS                     = 0x76
	DLT_C_HDLC                        = 0x68
	DLT_C_HDLC_WITH_DIR               = 0xcd
	DLT_DBUS                          = 0xe7
	DLT_DECT                          = 0xdd
	DLT_DOCSIS                        = 0x8f
	DLT_DVB_CI                        = 0xeb
	DLT_ECONET                        = 0x73
	DLT_EN10MB                        = 0x1
	DLT_EN3MB                         = 0x2
	DLT_ENC                           = 0x6d
	DLT_EPON                          = 0x103
	DLT_ERF                           = 0xc5
	DLT_ERF_ETH                       = 0xaf
	DLT_ERF_POS                       = 0xb0
	DLT_FC_2                          = 0xe0
	DLT_FC_2_WITH_FRAME_DELIMS        = 0xe1
	DLT_FDDI                          = 0xa
	DLT_FLEXRAY                       = 0xd2
	DLT_FRELAY                        = 0x6b
	DLT_FRELAY_WITH_DIR               = 0xce
	DLT_GCOM_SERIAL                   = 0xad
	DLT_GCOM_T1E1                     = 0xac
	DLT_GPF_F                         = 0xab
	DLT_GPF_T                         = 0xaa
	DLT_GPRS_LLC                      = 0xa9
	DLT_GSMTAP_ABIS                   = 0xda
	DLT_GSMTAP_UM                     = 0xd9
	DLT_HHDLC                         = 0x79
	DLT_IBM_SN                        = 0x92
	DLT_IBM_SP                        = 0x91
	DLT_IEEE802                       = 0x6
	DLT_IEEE802_11                    = 0x69
	DLT_IEEE802_11_RADIO              = 0x7f
	DLT_IEEE802_11_RADIO_AVS          = 0xa3
	DLT_IEEE802_15_4                  = 0xc3
	DLT_IEEE802_15_4_LINUX            = 0xbf
	DLT_IEEE802_15_4_NOFCS            = 0xe6
	DLT_IEEE802_15_4_NONASK_PHY       = 0xd7
	DLT_IEEE802_16_MAC_CPS            = 0xbc
	DLT_IEEE802_16_MAC_CPS_RADIO      = 0xc1
	DLT_INFINIBAND                    = 0xf7
	DLT_IPFILTER                      = 0x74
	DLT_IPMB                          = 0xc7
	DLT_IPMB_LINUX                    = 0xd1
	DLT_IPMI_HPM_2                    = 0x104
	DLT_IPNET                         = 0xe2
	DLT_IPOIB                         = 0xf2
	DLT_IPV4                          = 0xe4
	DLT_IPV6                          = 0xe5
	DLT_IP_OVER_FC                    = 0x7a
	DLT_ISO_14443                     = 0x108
	DLT_JUNIPER_ATM1                  = 0x89
	DLT_JUNIPER_ATM2                  = 0x87
	DLT_JUNIPER_ATM_CEMIC             = 0xee
	DLT_JUNIPER_CHDLC                 = 0xb5
	DLT_JUNIPER_ES                    = 0x84
	DLT_JUNIPER_ETHER                 = 0xb2
	DLT_JUNIPER_FIBRECHANNEL          = 0xea
	DLT_JUNIPER_FRELAY                = 0xb4
	DLT_JUNIPER_GGSN                  = 0x85
	DLT_JUNIPER_ISM                   = 0xc2
	DLT_JUNIPER_MFR                   = 0x86
	DLT_JUNIPER_MLFR                  = 0x83
	DLT_JUNIPER_MLPPP                 = 0x82
	DLT_JUNIPER_MONITOR               = 0xa4
	DLT_JUNIPER_PIC_PEER              = 0xae
	DLT_JUNIPER_PPP                   = 0xb3
	DLT_JUNIPER_PPPOE                 = 0xa7
	DLT_JUNIPER_PPPOE_ATM             = 0xa8
	DLT_JUNIPER_SERVICES              = 0x88
	DLT_JUNIPER_SRX_E2E               = 0xe9
	DLT_JUNIPER_ST                    = 0xc8
	DLT_JUNIPER_VP                    = 0xb7
	DLT_JUNIPER_VS                    = 0xe8
	DLT_LAPB_WITH_DIR                 = 0xcf
	DLT_LAPD                          = 0xcb
	DLT_LIN                           = 0xd4
	DLT_LINUX_EVDEV                   = 0xd8
	DLT_LINUX_IRDA                    = 0x90
	DLT_LINUX_LAPD                    = 0xb1
	DLT_LINUX_SLL                     = 0x71
	DLT_LOOP                          = 0x6c
	DLT_LTALK                         = 0x72
	DLT_MATCHING_MAX                  = 0x109
	DLT_MATCHING_MIN                  = 0x68
	DLT_MFR                           = 0xb6
	DLT_MOST                          = 0xd3
	DLT_MPEG_2_TS                     = 0xf3
	DLT_MPLS                          = 0xdb
	DLT_MTP2                          = 0x8c
	DLT_MTP2_WITH_PHDR                = 0x8b
	DLT_MTP3                          = 0x8d
	DLT_MUX27010                      = 0xec
	DLT_NETANALYZER                   = 0xf0
	DLT_NETANALYZER_TRANSPARENT       = 0xf1
	DLT_NETLINK                       = 0xfd
	DLT_NFC_LLCP                      = 0xf5
	DLT_NFLOG                         = 0xef
	DLT_NG40                          = 0xf4
	DLT_NULL                          = 0x0
	DLT_PCI_EXP                       = 0x7d
	DLT_PFLOG                         = 0x75
	DLT_PFSYNC                        = 0x12
	DLT_PKTAP                         = 0x102
	DLT_PPI                           = 0xc0
	DLT_PPP                           = 0x9
	DLT_PPP_BSDOS                     = 0x10
	DLT_PPP_ETHER                     = 0x33
	DLT_PPP_PPPD                      = 0xa6
	DLT_PPP_SERIAL                    = 0x32
	DLT_PPP_WITH_DIR                  = 0xcc
	DLT_PRISM_HEADER                  = 0x77
	DLT_PROFIBUS_DL                   = 0x101
	DLT_PRONET                        = 0x4
	DLT_RAIF1                         = 0xc6
	DLT_RAW                           = 0xc
	DLT_RDS                           = 0x109
	DLT_REDBACK_SMARTEDGE             = 0x20
	DLT_RIO                           = 0x7c
	DLT_RTAC_SERIAL                   = 0xfa
	DLT_SCCP                          = 0x8e
	DLT_SCTP                          = 0xf8
	DLT_SITA                          = 0xc4
	DLT_SLIP                          = 0x8
	DLT_SLIP_BSDOS                    = 0xf
	DLT_STANAG_5066_D_PDU             = 0xed
	DLT_SUNATM                        = 0x7b
	DLT_SYMANTEC_FIREWALL             = 0x63
	DLT_TZSP                          = 0x80
	DLT_USB                           = 0xba
	DLT_USBPCAP                       = 0xf9
	DLT_USB_FREEBSD                   = 0xba
	DLT_USB_LINUX                     = 0xbd
	DLT_USB_LINUX_MMAPPED             = 0xdc
	DLT_USER0                         = 0x93
	DLT_USER1                         = 0x94
	DLT_USER10                        = 0x9d
	DLT_USER11                        = 0x9e
	DLT_USER12                        = 0x9f
	DLT_USER13                        = 0xa0
	DLT_USER14                        = 0xa1
	DLT_USER15                        = 0xa2
	DLT_USER2                         = 0x95
	DLT_USER3                         = 0x96
	DLT_USER4                         = 0x97
	DLT_USER5                         = 0x98
	DLT_USER6                         = 0x99
	DLT_USER7                         = 0x9a
	DLT_USER8                         = 0x9b
	DLT_USER9                         = 0x9c
	DLT_WATTSTOPPER_DLM               = 0x107
	DLT_WIHART                        = 0xdf
	DLT_WIRESHARK_UPPER_PDU           = 0xfc
	DLT_X2E_SERIAL                    = 0xd5
	DLT_X2E_XORAYA                    = 0xd6
	DLT_ZWAVE_R1_R2                   = 0x105
	DLT_ZWAVE_R3                      = 0x106
	DT_BLK                            = 0x6
	DT_CHR                            = 0x2
	DT_DBF                            = 0xf
	DT_DIR                            = 0x4
	DT_FIFO                           = 0x1
	DT_LNK                            = 0xa
	DT_REG                            = 0x8
	DT_SOCK                           = 0xc
	DT_UNKNOWN                        = 0x0
	DT_WHT                            = 0xe
	ECHO                              = 0x8
	ECHOCTL                           = 0x40
	ECHOE                             = 0x2
	ECHOK                             = 0x4
	ECHOKE                            = 0x1
	ECHONL                            = 0x10
	ECHOPRT                           = 0x20
	EVFILT_AIO                        = -0x3
	EVFILT_EXCEPT                     = -0x8
	EVFILT_FS                         = -0xa
	EVFILT_MARKER                     = 0xf
	EVFILT_PROC                       = -0x5
	EVFILT_READ                       = -0x1
	EVFILT_SIGNAL                     = -0x6
	EVFILT_SYSCOUNT                   = 0xa
	EVFILT_TIMER                      = -0x7
	EVFILT_USER                       = -0x9
	EVFILT_VNODE                      = -0x4
	EVFILT_WRITE                      = -0x2
	EV_ADD                            = 0x1
	EV_CLEAR                          = 0x20
	EV_DELETE                         = 0x2
	EV_DISABLE                        = 0x8
	EV_DISPATCH                       = 0x80
	EV_ENABLE                         = 0x4
	EV_EOF                            = 0x8000
	EV_ERROR                          = 0x4000
	EV_FLAG1                          = 0x2000
	EV_HUP                            = 0x800
	EV_NODATA                         = 0x1000
	EV_ONESHOT                        = 0x10
	EV_RECEIPT                        = 0x40
	EV_SYSFLAGS                       = 0xf800
	EXTA                              = 0x4b00
	EXTB                              = 0x9600
	EXTEXIT_LWP                       = 0x10000
	EXTEXIT_PROC                      = 0x0
	EXTEXIT_SETINT                    = 0x1
	EXTEXIT_SIMPLE                    = 0x0
	EXTPROC                           = 0x800
	FD_CLOEXEC                        = 0x1
	FD_SETSIZE                        = 0x400
	FLUSHO                            = 0x800000
	F_DUP2FD                          = 0xa
	F_DUP2FD_CLOEXEC                  = 0x12
	F_DUPFD                           = 0x0
	F_DUPFD_CLOEXEC                   = 0x11
	F_GETFD                           = 0x1
	F_GETFL                           = 0x3
	F_GETLK                           = 0x7
	F_GETOWN                          = 0x5
	F_OK                              = 0x0
	F_RDLCK                           = 0x1
	F_SETFD                           = 0x2
	F_SETFL                           = 0x4
	F_SETLK                           = 0x8
	F_SETLKW                          = 0x9
	F_SETOWN                          = 0x6
	F_UNLCK                           = 0x2
	F_WRLCK                           = 0x3
	HUPCL                             = 0x4000
	HW_MACHINE                        = 0x1
	ICANON                            = 0x100
	ICMP6_FILTER                      = 0x12
	ICRNL                             = 0x100
	IEXTEN                            = 0x400
	IFAN_ARRIVAL                      = 0x0
	IFAN_DEPARTURE                    = 0x1
	IFF_ALLMULTI                      = 0x200
	IFF_ALTPHYS                       = 0x4000
	IFF_BROADCAST                     = 0x2
	IFF_CANTCHANGE                    = 0x318e72
	IFF_DEBUG                         = 0x4
	IFF_IDIRECT                       = 0x200000
	IFF_LINK0                         = 0x1000
	IFF_LINK1                         = 0x2000
	IFF_LINK2                         = 0x4000
	IFF_LOOPBACK                      = 0x8
	IFF_MONITOR                       = 0x40000
	IFF_MULTICAST                     = 0x8000
	IFF_NOARP                         = 0x80
	IFF_NPOLLING                      = 0x100000
	IFF_OACTIVE                       = 0x400
	IFF_OACTIVE_COMPAT                = 0x400
	IFF_POINTOPOINT                   = 0x10
	IFF_POLLING                       = 0x10000
	IFF_POLLING_COMPAT                = 0x10000
	IFF_PPROMISC                      = 0x20000
	IFF_PROMISC                       = 0x100
	IFF_RUNNING                       = 0x40
	IFF_SIMPLEX                       = 0x800
	IFF_SMART                         = 0x20
	IFF_STATICARP                     = 0x80000
	IFF_UP                            = 0x1
	IFNAMSIZ                          = 0x10
	IFT_1822                          = 0x2
	IFT_A12MPPSWITCH                  = 0x82
	IFT_AAL2                          = 0xbb
	IFT_AAL5                          = 0x31
	IFT_ADSL                          = 0x5e
	IFT_AFLANE8023                    = 0x3b
	IFT_AFLANE8025                    = 0x3c
	IFT_ARAP                          = 0x58
	IFT_ARCNET                        = 0x23
	IFT_ARCNETPLUS                    = 0x24
	IFT_ASYNC                         = 0x54
	IFT_ATM                           = 0x25
	IFT_ATMDXI                        = 0x69
	IFT_ATMFUNI                       = 0x6a
	IFT_ATMIMA                        = 0x6b
	IFT_ATMLOGICAL                    = 0x50
	IFT_ATMRADIO                      = 0xbd
	IFT_ATMSUBINTERFACE               = 0x86
	IFT_ATMVCIENDPT                   = 0xc2
	IFT_ATMVIRTUAL                    = 0x95
	IFT_BGPPOLICYACCOUNTING           = 0xa2
	IFT_BRIDGE                        = 0xd1
	IFT_BSC                           = 0x53
	IFT_CARP                          = 0xf8
	IFT_CCTEMUL                       = 0x3d
	IFT_CEPT                          = 0x13
	IFT_CES                           = 0x85
	IFT_CHANNEL                       = 0x46
	IFT_CNR                           = 0x55
	IFT_COFFEE                        = 0x84
	IFT_COMPOSITELINK                 = 0x9b
	IFT_DCN                           = 0x8d
	IFT_DIGITALPOWERLINE              = 0x8a
	IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba
	IFT_DLSW                          = 0x4a
	IFT_DOCSCABLEDOWNSTREAM           = 0x80
	IFT_DOCSCABLEMACLAYER             = 0x7f
	IFT_DOCSCABLEUPSTREAM             = 0x81
	IFT_DS0                           = 0x51
	IFT_DS0BUNDLE                     = 0x52
	IFT_DS1FDL                        = 0xaa
	IFT_DS3                           = 0x1e
	IFT_DTM                           = 0x8c
	IFT_DVBASILN                      = 0xac
	IFT_DVBASIOUT                     = 0xad
	IFT_DVBRCCDOWNSTREAM              = 0x93
	IFT_DVBRCCMACLAYER                = 0x92
	IFT_DVBRCCUPSTREAM                = 0x94
	IFT_ENC                           = 0xf4
	IFT_EON                           = 0x19
	IFT_EPLRS                         = 0x57
	IFT_ESCON                         = 0x49
	IFT_ETHER                         = 0x6
	IFT_FAST                          = 0x7d
	IFT_FASTETHER                     = 0x3e
	IFT_FASTETHERFX                   = 0x45
	IFT_FDDI                          = 0xf
	IFT_FIBRECHANNEL                  = 0x38
	IFT_FRAMERELAYINTERCONNECT        = 0x3a
	IFT_FRAMERELAYMPI                 = 0x5c
	IFT_FRDLCIENDPT                   = 0xc1
	IFT_FRELAY                        = 0x20
	IFT_FRELAYDCE                     = 0x2c
	IFT_FRF16MFRBUNDLE                = 0xa3
	IFT_FRFORWARD                     = 0x9e
	IFT_G703AT2MB                     = 0x43
	IFT_G703AT64K                     = 0x42
	IFT_GIF                           = 0xf0
	IFT_GIGABITETHERNET               = 0x75
	IFT_GR303IDT                      = 0xb2
	IFT_GR303RDT                      = 0xb1
	IFT_H323GATEKEEPER                = 0xa4
	IFT_H323PROXY                     = 0xa5
	IFT_HDH1822                       = 0x3
	IFT_HDLC                          = 0x76
	IFT_HDSL2                         = 0xa8
	IFT_HIPERLAN2                     = 0xb7
	IFT_HIPPI                         = 0x2f
	IFT_HIPPIINTERFACE                = 0x39
	IFT_HOSTPAD                       = 0x5a
	IFT_HSSI                          = 0x2e
	IFT_HY                            = 0xe
	IFT_IBM370PARCHAN                 = 0x48
	IFT_IDSL                          = 0x9a
	IFT_IEEE1394                      = 0x90
	IFT_IEEE80211                     = 0x47
	IFT_IEEE80212                     = 0x37
	IFT_IEEE8023ADLAG                 = 0xa1
	IFT_IFGSN                         = 0x91
	IFT_IMT                           = 0xbe
	IFT_INTERLEAVE                    = 0x7c
	IFT_IP                            = 0x7e
	IFT_IPFORWARD                     = 0x8e
	IFT_IPOVERATM                     = 0x72
	IFT_IPOVERCDLC                    = 0x6d
	IFT_IPOVERCLAW                    = 0x6e
	IFT_IPSWITCH                      = 0x4e
	IFT_ISDN                          = 0x3f
	IFT_ISDNBASIC                     = 0x14
	IFT_ISDNPRIMARY                   = 0x15
	IFT_ISDNS                         = 0x4b
	IFT_ISDNU                         = 0x4c
	IFT_ISO88022LLC                   = 0x29
	IFT_ISO88023                      = 0x7
	IFT_ISO88024                      = 0x8
	IFT_ISO88025                      = 0x9
	IFT_ISO88025CRFPINT               = 0x62
	IFT_ISO88025DTR                   = 0x56
	IFT_ISO88025FIBER                 = 0x73
	IFT_ISO88026                      = 0xa
	IFT_ISUP                          = 0xb3
	IFT_L2VLAN                        = 0x87
	IFT_L3IPVLAN                      = 0x88
	IFT_L3IPXVLAN                     = 0x89
	IFT_LAPB                          = 0x10
	IFT_LAPD                          = 0x4d
	IFT_LAPF                          = 0x77
	IFT_LOCALTALK                     = 0x2a
	IFT_LOOP                          = 0x18
	IFT_MEDIAMAILOVERIP               = 0x8b
	IFT_MFSIGLINK                     = 0xa7
	IFT_MIOX25                        = 0x26
	IFT_MODEM                         = 0x30
	IFT_MPC                           = 0x71
	IFT_MPLS                          = 0xa6
	IFT_MPLSTUNNEL                    = 0x96
	IFT_MSDSL                         = 0x8f
	IFT_MVL                           = 0xbf
	IFT_MYRINET                       = 0x63
	IFT_NFAS                          = 0xaf
	IFT_NSIP                          = 0x1b
	IFT_OPTICALCHANNEL                = 0xc3
	IFT_OPTICALTRANSPORT              = 0xc4
	IFT_OTHER                         = 0x1
	IFT_P10                           = 0xc
	IFT_P80                           = 0xd
	IFT_PARA                          = 0x22
	IFT_PFLOG                         = 0xf5
	IFT_PFSYNC                        = 0xf6
	IFT_PLC                           = 0xae
	IFT_POS                           = 0xab
	IFT_PPP                           = 0x17
	IFT_PPPMULTILINKBUNDLE            = 0x6c
	IFT_PROPBWAP2MP                   = 0xb8
	IFT_PROPCNLS                      = 0x59
	IFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5
	IFT_PROPDOCSWIRELESSMACLAYER      = 0xb4
	IFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6
	IFT_PROPMUX                       = 0x36
	IFT_PROPVIRTUAL                   = 0x35
	IFT_PROPWIRELESSP2P               = 0x9d
	IFT_PTPSERIAL                     = 0x16
	IFT_PVC                           = 0xf1
	IFT_QLLC                          = 0x44
	IFT_RADIOMAC                      = 0xbc
	IFT_RADSL                         = 0x5f
	IFT_REACHDSL                      = 0xc0
	IFT_RFC1483                       = 0x9f
	IFT_RS232                         = 0x21
	IFT_RSRB                          = 0x4f
	IFT_SDLC                          = 0x11
	IFT_SDSL                          = 0x60
	IFT_SHDSL                         = 0xa9
	IFT_SIP                           = 0x1f
	IFT_SLIP                          = 0x1c
	IFT_SMDSDXI                       = 0x2b
	IFT_SMDSICIP                      = 0x34
	IFT_SONET                         = 0x27
	IFT_SONETOVERHEADCHANNEL          = 0xb9
	IFT_SONETPATH                     = 0x32
	IFT_SONETVT                       = 0x33
	IFT_SRP                           = 0x97
	IFT_SS7SIGLINK                    = 0x9c
	IFT_STACKTOSTACK                  = 0x6f
	IFT_STARLAN                       = 0xb
	IFT_STF                           = 0xf3
	IFT_T1                            = 0x12
	IFT_TDLC                          = 0x74
	IFT_TERMPAD                       = 0x5b
	IFT_TR008                         = 0xb0
	IFT_TRANSPHDLC                    = 0x7b
	IFT_TUNNEL                        = 0x83
	IFT_ULTRA                         = 0x1d
	IFT_USB                           = 0xa0
	IFT_V11                           = 0x40
	IFT_V35                           = 0x2d
	IFT_V36                           = 0x41
	IFT_V37                           = 0x78
	IFT_VDSL                          = 0x61
	IFT_VIRTUALIPADDRESS              = 0x70
	IFT_VOICEEM                       = 0x64
	IFT_VOICEENCAP                    = 0x67
	IFT_VOICEFXO                      = 0x65
	IFT_VOICEFXS                      = 0x66
	IFT_VOICEOVERATM                  = 0x98
	IFT_VOICEOVERFRAMERELAY           = 0x99
	IFT_VOICEOVERIP                   = 0x68
	IFT_X213                          = 0x5d
	IFT_X25                           = 0x5
	IFT_X25DDN                        = 0x4
	IFT_X25HUNTGROUP                  = 0x7a
	IFT_X25MLP                        = 0x79
	IFT_X25PLE                        = 0x28
	IFT_XETHER                        = 0x1a
	IGNBRK                            = 0x1
	IGNCR                             = 0x80
	IGNPAR                            = 0x4
	IMAXBEL                           = 0x2000
	INLCR                             = 0x40
	INPCK                             = 0x10
	IN_CLASSA_HOST                    = 0xffffff
	IN_CLASSA_MAX                     = 0x80
	IN_CLASSA_NET                     = 0xff000000
	IN_CLASSA_NSHIFT                  = 0x18
	IN_CLASSB_HOST                    = 0xffff
	IN_CLASSB_MAX                     = 0x10000
	IN_CLASSB_NET                     = 0xffff0000
	IN_CLASSB_NSHIFT                  = 0x10
	IN_CLASSC_HOST                    = 0xff
	IN_CLASSC_NET                     = 0xffffff00
	IN_CLASSC_NSHIFT                  = 0x8
	IN_CLASSD_HOST                    = 0xfffffff
	IN_CLASSD_NET                     = 0xf0000000
	IN_CLASSD_NSHIFT                  = 0x1c
	IN_LOOPBACKNET                    = 0x7f
	IN_RFC3021_MASK                   = 0xfffffffe
	IPPROTO_3PC                       = 0x22
	IPPROTO_ADFS                      = 0x44
	IPPROTO_AH                        = 0x33
	IPPROTO_AHIP                      = 0x3d
	IPPROTO_APES                      = 0x63
	IPPROTO_ARGUS                     = 0xd
	IPPROTO_AX25                      = 0x5d
	IPPROTO_BHA                       = 0x31
	IPPROTO_BLT                       = 0x1e
	IPPROTO_BRSATMON                  = 0x4c
	IPPROTO_CARP                      = 0x70
	IPPROTO_CFTP                      = 0x3e
	IPPROTO_CHAOS                     = 0x10
	IPPROTO_CMTP                      = 0x26
	IPPROTO_CPHB                      = 0x49
	IPPROTO_CPNX                      = 0x48
	IPPROTO_DDP                       = 0x25
	IPPROTO_DGP                       = 0x56
	IPPROTO_DIVERT                    = 0xfe
	IPPROTO_DONE                      = 0x101
	IPPROTO_DSTOPTS                   = 0x3c
	IPPROTO_EGP                       = 0x8
	IPPROTO_EMCON                     = 0xe
	IPPROTO_ENCAP                     = 0x62
	IPPROTO_EON                       = 0x50
	IPPROTO_ESP                       = 0x32
	IPPROTO_ETHERIP                   = 0x61
	IPPROTO_FRAGMENT                  = 0x2c
	IPPROTO_GGP                       = 0x3
	IPPROTO_GMTP                      = 0x64
	IPPROTO_GRE                       = 0x2f
	IPPROTO_HELLO                     = 0x3f
	IPPROTO_HMP                       = 0x14
	IPPROTO_HOPOPTS                   = 0x0
	IPPROTO_ICMP                      = 0x1
	IPPROTO_ICMPV6                    = 0x3a
	IPPROTO_IDP                       = 0x16
	IPPROTO_IDPR                      = 0x23
	IPPROTO_IDRP                      = 0x2d
	IPPROTO_IGMP                      = 0x2
	IPPROTO_IGP                       = 0x55
	IPPROTO_IGRP                      = 0x58
	IPPROTO_IL                        = 0x28
	IPPROTO_INLSP                     = 0x34
	IPPROTO_INP                       = 0x20
	IPPROTO_IP                        = 0x0
	IPPROTO_IPCOMP                    = 0x6c
	IPPROTO_IPCV                      = 0x47
	IPPROTO_IPEIP                     = 0x5e
	IPPROTO_IPIP                      = 0x4
	IPPROTO_IPPC                      = 0x43
	IPPROTO_IPV4                      = 0x4
	IPPROTO_IPV6                      = 0x29
	IPPROTO_IRTP                      = 0x1c
	IPPROTO_KRYPTOLAN                 = 0x41
	IPPROTO_LARP                      = 0x5b
	IPPROTO_LEAF1                     = 0x19
	IPPROTO_LEAF2                     = 0x1a
	IPPROTO_MAX                       = 0x100
	IPPROTO_MAXID                     = 0x34
	IPPROTO_MEAS                      = 0x13
	IPPROTO_MHRP                      = 0x30
	IPPROTO_MICP                      = 0x5f
	IPPROTO_MOBILE                    = 0x37
	IPPROTO_MTP                       = 0x5c
	IPPROTO_MUX                       = 0x12
	IPPROTO_ND                        = 0x4d
	IPPROTO_NHRP                      = 0x36
	IPPROTO_NONE                      = 0x3b
	IPPROTO_NSP                       = 0x1f
	IPPROTO_NVPII                     = 0xb
	IPPROTO_OSPFIGP                   = 0x59
	IPPROTO_PFSYNC                    = 0xf0
	IPPROTO_PGM                       = 0x71
	IPPROTO_PIGP                      = 0x9
	IPPROTO_PIM                       = 0x67
	IPPROTO_PRM                       = 0x15
	IPPROTO_PUP                       = 0xc
	IPPROTO_PVP                       = 0x4b
	IPPROTO_RAW                       = 0xff
	IPPROTO_RCCMON                    = 0xa
	IPPROTO_RDP                       = 0x1b
	IPPROTO_ROUTING                   = 0x2b
	IPPROTO_RSVP                      = 0x2e
	IPPROTO_RVD                       = 0x42
	IPPROTO_SATEXPAK                  = 0x40
	IPPROTO_SATMON                    = 0x45
	IPPROTO_SCCSP                     = 0x60
	IPPROTO_SDRP                      = 0x2a
	IPPROTO_SEP                       = 0x21
	IPPROTO_SKIP                      = 0x39
	IPPROTO_SRPC                      = 0x5a
	IPPROTO_ST                        = 0x7
	IPPROTO_SVMTP                     = 0x52
	IPPROTO_SWIPE                     = 0x35
	IPPROTO_TCF                       = 0x57
	IPPROTO_TCP                       = 0x6
	IPPROTO_TLSP                      = 0x38
	IPPROTO_TP                        = 0x1d
	IPPROTO_TPXX                      = 0x27
	IPPROTO_TRUNK1                    = 0x17
	IPPROTO_TRUNK2                    = 0x18
	IPPROTO_TTP                       = 0x54
	IPPROTO_UDP                       = 0x11
	IPPROTO_UNKNOWN                   = 0x102
	IPPROTO_VINES                     = 0x53
	IPPROTO_VISA                      = 0x46
	IPPROTO_VMTP                      = 0x51
	IPPROTO_WBEXPAK                   = 0x4f
	IPPROTO_WBMON                     = 0x4e
	IPPROTO_WSN                       = 0x4a
	IPPROTO_XNET                      = 0xf
	IPPROTO_XTP                       = 0x24
	IPV6_AUTOFLOWLABEL                = 0x3b
	IPV6_BINDV6ONLY                   = 0x1b
	IPV6_CHECKSUM                     = 0x1a
	IPV6_DEFAULT_MULTICAST_HOPS       = 0x1
	IPV6_DEFAULT_MULTICAST_LOOP       = 0x1
	IPV6_DEFHLIM                      = 0x40
	IPV6_DONTFRAG                     = 0x3e
	IPV6_DSTOPTS                      = 0x32
	IPV6_FLOWINFO_MASK                = 0xffffff0f
	IPV6_FLOWLABEL_MASK               = 0xffff0f00
	IPV6_FRAGTTL                      = 0x78
	IPV6_FW_ADD                       = 0x1e
	IPV6_FW_DEL                       = 0x1f
	IPV6_FW_FLUSH                     = 0x20
	IPV6_FW_GET                       = 0x22
	IPV6_FW_ZERO                      = 0x21
	IPV6_HLIMDEC                      = 0x1
	IPV6_HOPLIMIT                     = 0x2f
	IPV6_HOPOPTS                      = 0x31
	IPV6_JOIN_GROUP                   = 0xc
	IPV6_LEAVE_GROUP                  = 0xd
	IPV6_MAXHLIM                      = 0xff
	IPV6_MAXPACKET                    = 0xffff
	IPV6_MINHLIM                      = 0x28
	IPV6_MMTU                         = 0x500
	IPV6_MSFILTER                     = 0x4a
	IPV6_MULTICAST_HOPS               = 0xa
	IPV6_MULTICAST_IF                 = 0x9
	IPV6_MULTICAST_LOOP               = 0xb
	IPV6_NEXTHOP                      = 0x30
	IPV6_PATHMTU                      = 0x2c
	IPV6_PKTINFO                      = 0x2e
	IPV6_PKTOPTIONS                   = 0x34
	IPV6_PORTRANGE                    = 0xe
	IPV6_PORTRANGE_DEFAULT            = 0x0
	IPV6_PORTRANGE_HIGH               = 0x1
	IPV6_PORTRANGE_LOW                = 0x2
	IPV6_PREFER_TEMPADDR              = 0x3f
	IPV6_RECVDSTOPTS                  = 0x28
	IPV6_RECVHOPLIMIT                 = 0x25
	IPV6_RECVHOPOPTS                  = 0x27
	IPV6_RECVPATHMTU                  = 0x2b
	IPV6_RECVPKTINFO                  = 0x24
	IPV6_RECVRTHDR                    = 0x26
	IPV6_RECVTCLASS                   = 0x39
	IPV6_RTHDR                        = 0x33
	IPV6_RTHDRDSTOPTS                 = 0x23
	IPV6_RTHDR_LOOSE                  = 0x0
	IPV6_RTHDR_STRICT                 = 0x1
	IPV6_RTHDR_TYPE_0                 = 0x0
	IPV6_SOCKOPT_RESERVED1            = 0x3
	IPV6_TCLASS                       = 0x3d
	IPV6_UNICAST_HOPS                 = 0x4
	IPV6_USE_MIN_MTU                  = 0x2a
	IPV6_V6ONLY                       = 0x1b
	IPV6_VERSION                      = 0x60
	IPV6_VERSION_MASK                 = 0xf0
	IP_ADD_MEMBERSHIP                 = 0xc
	IP_DEFAULT_MULTICAST_LOOP         = 0x1
	IP_DEFAULT_MULTICAST_TTL          = 0x1
	IP_DF                             = 0x4000
	IP_DROP_MEMBERSHIP                = 0xd
	IP_DUMMYNET_CONFIGURE             = 0x3c
	IP_DUMMYNET_DEL                   = 0x3d
	IP_DUMMYNET_FLUSH                 = 0x3e
	IP_DUMMYNET_GET                   = 0x40
	IP_FW_ADD                         = 0x32
	IP_FW_DEL                         = 0x33
	IP_FW_FLUSH                       = 0x34
	IP_FW_GET                         = 0x36
	IP_FW_RESETLOG                    = 0x37
	IP_FW_TBL_ADD                     = 0x2a
	IP_FW_TBL_CREATE                  = 0x28
	IP_FW_TBL_DEL                     = 0x2b
	IP_FW_TBL_DESTROY                 = 0x29
	IP_FW_TBL_EXPIRE                  = 0x2f
	IP_FW_TBL_FLUSH                   = 0x2c
	IP_FW_TBL_GET                     = 0x2d
	IP_FW_TBL_ZERO                    = 0x2e
	IP_FW_X                           = 0x31
	IP_FW_ZERO                        = 0x35
	IP_HDRINCL                        = 0x2
	IP_MAXPACKET                      = 0xffff
	IP_MAX_MEMBERSHIPS                = 0x14
	IP_MF                             = 0x2000
	IP_MINTTL                         = 0x42
	IP_MSS                            = 0x240
	IP_MULTICAST_IF                   = 0x9
	IP_MULTICAST_LOOP                 = 0xb
	IP_MULTICAST_TTL                  = 0xa
	IP_MULTICAST_VIF                  = 0xe
	IP_OFFMASK                        = 0x1fff
	IP_OPTIONS                        = 0x1
	IP_PORTRANGE                      = 0x13
	IP_PORTRANGE_DEFAULT              = 0x0
	IP_PORTRANGE_HIGH                 = 0x1
	IP_PORTRANGE_LOW                  = 0x2
	IP_RECVDSTADDR                    = 0x7
	IP_RECVIF                         = 0x14
	IP_RECVOPTS                       = 0x5
	IP_RECVRETOPTS                    = 0x6
	IP_RECVTTL                        = 0x41
	IP_RETOPTS                        = 0x8
	IP_RF                             = 0x8000
	IP_RSVP_OFF                       = 0x10
	IP_RSVP_ON                        = 0xf
	IP_RSVP_VIF_OFF                   = 0x12
	IP_RSVP_VIF_ON                    = 0x11
	IP_TOS                            = 0x3
	IP_TTL                            = 0x4
	ISIG                              = 0x80
	ISTRIP                            = 0x20
	IXANY                             = 0x800
	IXOFF                             = 0x400
	IXON                              = 0x200
	KERN_HOSTNAME                     = 0xa
	KERN_OSRELEASE                    = 0x2
	KERN_OSTYPE                       = 0x1
	KERN_VERSION                      = 0x4
	LOCK_EX                           = 0x2
	LOCK_NB                           = 0x4
	LOCK_SH                           = 0x1
	LOCK_UN                           = 0x8
	MADV_AUTOSYNC                     = 0x7
	MADV_CONTROL_END                  = 0xb
	MADV_CONTROL_START                = 0xa
	MADV_CORE                         = 0x9
	MADV_DONTNEED                     = 0x4
	MADV_FREE                         = 0x5
	MADV_INVAL                        = 0xa
	MADV_NOCORE                       = 0x8
	MADV_NORMAL                       = 0x0
	MADV_NOSYNC                       = 0x6
	MADV_RANDOM                       = 0x1
	MADV_SEQUENTIAL                   = 0x2
	MADV_SETMAP                       = 0xb
	MADV_WILLNEED                     = 0x3
	MAP_ANON                          = 0x1000
	MAP_ANONYMOUS                     = 0x1000
	MAP_COPY                          = 0x2
	MAP_FILE                          = 0x0
	MAP_FIXED                         = 0x10
	MAP_HASSEMAPHORE                  = 0x200
	MAP_INHERIT                       = 0x80
	MAP_NOCORE                        = 0x20000
	MAP_NOEXTEND                      = 0x100
	MAP_NORESERVE                     = 0x40
	MAP_NOSYNC                        = 0x800
	MAP_PRIVATE                       = 0x2
	MAP_RENAME                        = 0x20
	MAP_SHARED                        = 0x1
	MAP_SIZEALIGN                     = 0x40000
	MAP_STACK                         = 0x400
	MAP_TRYFIXED                      = 0x10000
	MAP_VPAGETABLE                    = 0x2000
	MCL_CURRENT                       = 0x1
	MCL_FUTURE                        = 0x2
	MNT_ASYNC                         = 0x40
	MNT_AUTOMOUNTED                   = 0x20
	MNT_CMDFLAGS                      = 0xf0000
	MNT_DEFEXPORTED                   = 0x200
	MNT_DELEXPORT                     = 0x20000
	MNT_EXKERB                        = 0x800
	MNT_EXPORTANON                    = 0x400
	MNT_EXPORTED                      = 0x100
	MNT_EXPUBLIC                      = 0x20000000
	MNT_EXRDONLY                      = 0x80
	MNT_FORCE                         = 0x80000
	MNT_IGNORE                        = 0x800000
	MNT_LAZY                          = 0x4
	MNT_LOCAL                         = 0x1000
	MNT_NOATIME                       = 0x10000000
	MNT_NOCLUSTERR                    = 0x40000000
	MNT_NOCLUSTERW                    = 0x80000000
	MNT_NODEV                         = 0x10
	MNT_NOEXEC                        = 0x4
	MNT_NOSUID                        = 0x8
	MNT_NOSYMFOLLOW                   = 0x400000
	MNT_NOWAIT                        = 0x2
	MNT_QUOTA                         = 0x2000
	MNT_RDONLY                        = 0x1
	MNT_RELOAD                        = 0x40000
	MNT_ROOTFS                        = 0x4000
	MNT_SOFTDEP                       = 0x200000
	MNT_SUIDDIR                       = 0x100000
	MNT_SYNCHRONOUS                   = 0x2
	MNT_TRIM                          = 0x1000000
	MNT_UPDATE                        = 0x10000
	MNT_USER                          = 0x8000
	MNT_VISFLAGMASK                   = 0xf1f0ffff
	MNT_WAIT                          = 0x1
	MSG_CMSG_CLOEXEC                  = 0x1000
	MSG_CTRUNC                        = 0x20
	MSG_DONTROUTE                     = 0x4
	MSG_DONTWAIT                      = 0x80
	MSG_EOF                           = 0x100
	MSG_EOR                           = 0x8
	MSG_FBLOCKING                     = 0x10000
	MSG_FMASK                         = 0xffff0000
	MSG_FNONBLOCKING                  = 0x20000
	MSG_NOSIGNAL                      = 0x400
	MSG_OOB                           = 0x1
	MSG_PEEK                          = 0x2
	MSG_SYNC                          = 0x800
	MSG_TRUNC                         = 0x10
	MSG_UNUSED09                      = 0x200
	MSG_WAITALL                       = 0x40
	MS_ASYNC                          = 0x1
	MS_INVALIDATE                     = 0x2
	MS_SYNC                           = 0x0
	NAME_MAX                          = 0xff
	NET_RT_DUMP                       = 0x1
	NET_RT_FLAGS                      = 0x2
	NET_RT_IFLIST                     = 0x3
	NET_RT_MAXID                      = 0x4
	NFDBITS                           = 0x40
	NOFLSH                            = 0x80000000
	NOKERNINFO                        = 0x2000000
	NOTE_ATTRIB                       = 0x8
	NOTE_CHILD                        = 0x4
	NOTE_DELETE                       = 0x1
	NOTE_EXEC                         = 0x20000000
	NOTE_EXIT                         = 0x80000000
	NOTE_EXTEND                       = 0x4
	NOTE_FFAND                        = 0x40000000
	NOTE_FFCOPY                       = 0xc0000000
	NOTE_FFCTRLMASK                   = 0xc0000000
	NOTE_FFLAGSMASK                   = 0xffffff
	NOTE_FFNOP                        = 0x0
	NOTE_FFOR                         = 0x80000000
	NOTE_FORK                         = 0x40000000
	NOTE_LINK                         = 0x10
	NOTE_LOWAT                        = 0x1
	NOTE_OOB                          = 0x2
	NOTE_PCTRLMASK                    = 0xf0000000
	NOTE_PDATAMASK                    = 0xfffff
	NOTE_RENAME                       = 0x20
	NOTE_REVOKE                       = 0x40
	NOTE_TRACK                        = 0x1
	NOTE_TRACKERR                     = 0x2
	NOTE_TRIGGER                      = 0x1000000
	NOTE_WRITE                        = 0x2
	OCRNL                             = 0x10
	ONLCR                             = 0x2
	ONLRET                            = 0x40
	ONOCR                             = 0x20
	ONOEOT                            = 0x8
	OPOST                             = 0x1
	OXTABS                            = 0x4
	O_ACCMODE                         = 0x3
	O_APPEND                          = 0x8
	O_ASYNC                           = 0x40
	O_CLOEXEC                         = 0x20000
	O_CREAT                           = 0x200
	O_DIRECT                          = 0x10000
	O_DIRECTORY                       = 0x8000000
	O_EXCL                            = 0x800
	O_EXLOCK                          = 0x20
	O_FAPPEND                         = 0x100000
	O_FASYNCWRITE                     = 0x800000
	O_FBLOCKING                       = 0x40000
	O_FMASK                           = 0xfc0000
	O_FNONBLOCKING                    = 0x80000
	O_FOFFSET                         = 0x200000
	O_FSYNC                           = 0x80
	O_FSYNCWRITE                      = 0x400000
	O_NDELAY                          = 0x4
	O_NOCTTY                          = 0x8000
	O_NOFOLLOW                        = 0x100
	O_NONBLOCK                        = 0x4
	O_RDONLY                          = 0x0
	O_RDWR                            = 0x2
	O_SHLOCK                          = 0x10
	O_SYNC                            = 0x80
	O_TRUNC                           = 0x400
	O_WRONLY                          = 0x1
	PARENB                            = 0x1000
	PARMRK                            = 0x8
	PARODD                            = 0x2000
	PENDIN                            = 0x20000000
	PRIO_PGRP                         = 0x1
	PRIO_PROCESS                      = 0x0
	PRIO_USER                         = 0x2
	PROT_EXEC                         = 0x4
	PROT_NONE                         = 0x0
	PROT_READ                         = 0x1
	PROT_WRITE                        = 0x2
	RLIMIT_AS                         = 0xa
	RLIMIT_CORE                       = 0x4
	RLIMIT_CPU                        = 0x0
	RLIMIT_DATA                       = 0x2
	RLIMIT_FSIZE                      = 0x1
	RLIMIT_MEMLOCK                    = 0x6
	RLIMIT_NOFILE                     = 0x8
	RLIMIT_NPROC                      = 0x7
	RLIMIT_RSS                        = 0x5
	RLIMIT_STACK                      = 0x3
	RLIM_INFINITY                     = 0x7fffffffffffffff
	RTAX_AUTHOR                       = 0x6
	RTAX_BRD                          = 0x7
	RTAX_DST                          = 0x0
	RTAX_GATEWAY                      = 0x1
	RTAX_GENMASK                      = 0x3
	RTAX_IFA                          = 0x5
	RTAX_IFP                          = 0x4
	RTAX_MAX                          = 0xb
	RTAX_MPLS1                        = 0x8
	RTAX_MPLS2                        = 0x9
	RTAX_MPLS3                        = 0xa
	RTAX_NETMASK                      = 0x2
	RTA_AUTHOR                        = 0x40
	RTA_BRD                           = 0x80
	RTA_DST                           = 0x1
	RTA_GATEWAY                       = 0x2
	RTA_GENMASK                       = 0x8
	RTA_IFA                           = 0x20
	RTA_IFP                           = 0x10
	RTA_MPLS1                         = 0x100
	RTA_MPLS2                         = 0x200
	RTA_MPLS3                         = 0x400
	RTA_NETMASK                       = 0x4
	RTF_BLACKHOLE                     = 0x1000
	RTF_BROADCAST                     = 0x400000
	RTF_CLONING                       = 0x100
	RTF_DONE                          = 0x40
	RTF_DYNAMIC                       = 0x10
	RTF_GATEWAY                       = 0x2
	RTF_HOST                          = 0x4
	RTF_LLINFO                        = 0x400
	RTF_LOCAL                         = 0x200000
	RTF_MODIFIED                      = 0x20
	RTF_MPLSOPS                       = 0x1000000
	RTF_MULTICAST                     = 0x800000
	RTF_PINNED                        = 0x100000
	RTF_PRCLONING                     = 0x10000
	RTF_PROTO1                        = 0x8000
	RTF_PROTO2                        = 0x4000
	RTF_PROTO3                        = 0x40000
	RTF_REJECT                        = 0x8
	RTF_STATIC                        = 0x800
	RTF_UP                            = 0x1
	RTF_WASCLONED                     = 0x20000
	RTF_XRESOLVE                      = 0x200
	RTM_ADD                           = 0x1
	RTM_CHANGE                        = 0x3
	RTM_DELADDR                       = 0xd
	RTM_DELETE                        = 0x2
	RTM_DELMADDR                      = 0x10
	RTM_GET                           = 0x4
	RTM_IEEE80211                     = 0x12
	RTM_IFANNOUNCE                    = 0x11
	RTM_IFINFO                        = 0xe
	RTM_LOCK                          = 0x8
	RTM_LOSING                        = 0x5
	RTM_MISS                          = 0x7
	RTM_NEWADDR                       = 0xc
	RTM_NEWMADDR                      = 0xf
	RTM_REDIRECT                      = 0x6
	RTM_RESOLVE                       = 0xb
	RTM_RTTUNIT                       = 0xf4240
	RTM_VERSION                       = 0x7
	RTV_EXPIRE                        = 0x4
	RTV_HOPCOUNT                      = 0x2
	RTV_IWCAPSEGS                     = 0x400
	RTV_IWMAXSEGS                     = 0x200
	RTV_MSL                           = 0x100
	RTV_MTU                           = 0x1
	RTV_RPIPE                         = 0x8
	RTV_RTT                           = 0x40
	RTV_RTTVAR                        = 0x80
	RTV_SPIPE                         = 0x10
	RTV_SSTHRESH                      = 0x20
	RUSAGE_CHILDREN                   = -0x1
	RUSAGE_SELF                       = 0x0
	SCM_CREDS                         = 0x3
	SCM_RIGHTS                        = 0x1
	SCM_TIMESTAMP                     = 0x2
	SHUT_RD                           = 0x0
	SHUT_RDWR                         = 0x2
	SHUT_WR                           = 0x1
	SIOCADDMULTI                      = 0x80206931
	SIOCAIFADDR                       = 0x8040691a
	SIOCAIFGROUP                      = 0x80286987
	SIOCALIFADDR                      = 0x8118691b
	SIOCATMARK                        = 0x40047307
	SIOCDELMULTI                      = 0x80206932
	SIOCDIFADDR                       = 0x80206919
	SIOCDIFGROUP                      = 0x80286989
	SIOCDIFPHYADDR                    = 0x80206949
	SIOCDLIFADDR                      = 0x8118691d
	SIOCGDRVSPEC                      = 0xc028697b
	SIOCGETSGCNT                      = 0xc0207210
	SIOCGETVIFCNT                     = 0xc028720f
	SIOCGHIWAT                        = 0x40047301
	SIOCGIFADDR                       = 0xc0206921
	SIOCGIFALIAS                      = 0xc0406929
	SIOCGIFBRDADDR                    = 0xc0206923
	SIOCGIFCAP                        = 0xc020691f
	SIOCGIFCONF                       = 0xc0106924
	SIOCGIFDATA                       = 0xc0206926
	SIOCGIFDSTADDR                    = 0xc0206922
	SIOCGIFFLAGS                      = 0xc0206911
	SIOCGIFGENERIC                    = 0xc020693a
	SIOCGIFGMEMB                      = 0xc028698a
	SIOCGIFGROUP                      = 0xc0286988
	SIOCGIFINDEX                      = 0xc0206920
	SIOCGIFMEDIA                      = 0xc0306938
	SIOCGIFMETRIC                     = 0xc0206917
	SIOCGIFMTU                        = 0xc0206933
	SIOCGIFNETMASK                    = 0xc0206925
	SIOCGIFPDSTADDR                   = 0xc0206948
	SIOCGIFPHYS                       = 0xc0206935
	SIOCGIFPOLLCPU                    = 0xc020697e
	SIOCGIFPSRCADDR                   = 0xc0206947
	SIOCGIFSTATUS                     = 0xc331693b
	SIOCGIFTSOLEN                     = 0xc0206980
	SIOCGLIFADDR                      = 0xc118691c
	SIOCGLIFPHYADDR                   = 0xc118694b
	SIOCGLOWAT                        = 0x40047303
	SIOCGPGRP                         = 0x40047309
	SIOCGPRIVATE_0                    = 0xc0206950
	SIOCGPRIVATE_1                    = 0xc0206951
	SIOCIFCREATE                      = 0xc020697a
	SIOCIFCREATE2                     = 0xc020697c
	SIOCIFDESTROY                     = 0x80206979
	SIOCIFGCLONERS                    = 0xc0106978
	SIOCSDRVSPEC                      = 0x8028697b
	SIOCSHIWAT                        = 0x80047300
	SIOCSIFADDR                       = 0x8020690c
	SIOCSIFBRDADDR                    = 0x80206913
	SIOCSIFCAP                        = 0x8020691e
	SIOCSIFDSTADDR                    = 0x8020690e
	SIOCSIFFLAGS                      = 0x80206910
	SIOCSIFGENERIC                    = 0x80206939
	SIOCSIFLLADDR                     = 0x8020693c
	SIOCSIFMEDIA                      = 0xc0206937
	SIOCSIFMETRIC                     = 0x80206918
	SIOCSIFMTU                        = 0x80206934
	SIOCSIFNAME                       = 0x80206928
	SIOCSIFNETMASK                    = 0x80206916
	SIOCSIFPHYADDR                    = 0x80406946
	SIOCSIFPHYS                       = 0x80206936
	SIOCSIFPOLLCPU                    = 0x8020697d
	SIOCSIFTSOLEN                     = 0x8020697f
	SIOCSLIFPHYADDR                   = 0x8118694a
	SIOCSLOWAT                        = 0x80047302
	SIOCSPGRP                         = 0x80047308
	SOCK_CLOEXEC                      = 0x10000000
	SOCK_DGRAM                        = 0x2
	SOCK_MAXADDRLEN                   = 0xff
	SOCK_NONBLOCK                     = 0x20000000
	SOCK_RAW                          = 0x3
	SOCK_RDM                          = 0x4
	SOCK_SEQPACKET                    = 0x5
	SOCK_STREAM                       = 0x1
	SOL_SOCKET                        = 0xffff
	SOMAXCONN                         = 0x80
	SO_ACCEPTCONN                     = 0x2
	SO_ACCEPTFILTER                   = 0x1000
	SO_BROADCAST                      = 0x20
	SO_CPUHINT                        = 0x1030
	SO_DEBUG                          = 0x1
	SO_DONTROUTE                      = 0x10
	SO_ERROR                          = 0x1007
	SO_KEEPALIVE                      = 0x8
	SO_LINGER                         = 0x80
	SO_NOSIGPIPE                      = 0x800
	SO_OOBINLINE                      = 0x100
	SO_RCVBUF                         = 0x1002
	SO_RCVLOWAT                       = 0x1004
	SO_RCVTIMEO                       = 0x1006
	SO_RERROR                         = 0x2000
	SO_REUSEADDR                      = 0x4
	SO_REUSEPORT                      = 0x200
	SO_SNDBUF                         = 0x1001
	SO_SNDLOWAT                       = 0x1003
	SO_SNDSPACE                       = 0x100a
	SO_SNDTIMEO                       = 0x1005
	SO_TIMESTAMP                      = 0x400
	SO_TYPE                           = 0x1008
	SO_USELOOPBACK                    = 0x40
	S_BLKSIZE                         = 0x200
	S_IEXEC                           = 0x40
	S_IFBLK                           = 0x6000
	S_IFCHR                           = 0x2000
	S_IFDB                            = 0x9000
	S_IFDIR                           = 0x4000
	S_IFIFO                           = 0x1000
	S_IFLNK                           = 0xa000
	S_IFMT                            = 0xf000
	S_IFREG                           = 0x8000
	S_IFSOCK                          = 0xc000
	S_IFWHT                           = 0xe000
	S_IREAD                           = 0x100
	S_IRGRP                           = 0x20
	S_IROTH                           = 0x4
	S_IRUSR                           = 0x100
	S_IRWXG                           = 0x38
	S_IRWXO                           = 0x7
	S_IRWXU                           = 0x1c0
	S_ISGID                           = 0x400
	S_ISTXT                           = 0x200
	S_ISUID                           = 0x800
	S_ISVTX                           = 0x200
	S_IWGRP                           = 0x10
	S_IWOTH                           = 0x2
	S_IWRITE                          = 0x80
	S_IWUSR                           = 0x80
	S_IXGRP                           = 0x8
	S_IXOTH                           = 0x1
	S_IXUSR                           = 0x40
	TAB0                              = 0x0
	TAB3                              = 0x4
	TABDLY                            = 0x4
	TCIFLUSH                          = 0x1
	TCIOFF                            = 0x3
	TCIOFLUSH                         = 0x3
	TCION                             = 0x4
	TCOFLUSH                          = 0x2
	TCOOFF                            = 0x1
	TCOON                             = 0x2
	TCP_FASTKEEP                      = 0x80
	TCP_KEEPCNT                       = 0x400
	TCP_KEEPIDLE                      = 0x100
	TCP_KEEPINIT                      = 0x20
	TCP_KEEPINTVL                     = 0x200
	TCP_MAXBURST                      = 0x4
	TCP_MAXHLEN                       = 0x3c
	TCP_MAXOLEN                       = 0x28
	TCP_MAXSEG                        = 0x2
	TCP_MAXWIN                        = 0xffff
	TCP_MAX_WINSHIFT                  = 0xe
	TCP_MINMSS                        = 0x100
	TCP_MIN_WINSHIFT                  = 0x5
	TCP_MSS                           = 0x200
	TCP_NODELAY                       = 0x1
	TCP_NOOPT                         = 0x8
	TCP_NOPUSH                        = 0x4
	TCP_SIGNATURE_ENABLE              = 0x10
	TCSAFLUSH                         = 0x2
	TIMER_ABSTIME                     = 0x1
	TIMER_RELTIME                     = 0x0
	TIOCCBRK                          = 0x2000747a
	TIOCCDTR                          = 0x20007478
	TIOCCONS                          = 0x80047462
	TIOCDCDTIMESTAMP                  = 0x40107458
	TIOCDRAIN                         = 0x2000745e
	TIOCEXCL                          = 0x2000740d
	TIOCEXT                           = 0x80047460
	TIOCFLUSH                         = 0x80047410
	TIOCGDRAINWAIT                    = 0x40047456
	TIOCGETA                          = 0x402c7413
	TIOCGETD                          = 0x4004741a
	TIOCGPGRP                         = 0x40047477
	TIOCGSID                          = 0x40047463
	TIOCGWINSZ                        = 0x40087468
	TIOCISPTMASTER                    = 0x20007455
	TIOCMBIC                          = 0x8004746b
	TIOCMBIS                          = 0x8004746c
	TIOCMGDTRWAIT                     = 0x4004745a
	TIOCMGET                          = 0x4004746a
	TIOCMODG                          = 0x40047403
	TIOCMODS                          = 0x80047404
	TIOCMSDTRWAIT                     = 0x8004745b
	TIOCMSET                          = 0x8004746d
	TIOCM_CAR                         = 0x40
	TIOCM_CD                          = 0x40
	TIOCM_CTS                         = 0x20
	TIOCM_DSR                         = 0x100
	TIOCM_DTR                         = 0x2
	TIOCM_LE                          = 0x1
	TIOCM_RI                          = 0x80
	TIOCM_RNG                         = 0x80
	TIOCM_RTS                         = 0x4
	TIOCM_SR                          = 0x10
	TIOCM_ST                          = 0x8
	TIOCNOTTY                         = 0x20007471
	TIOCNXCL                          = 0x2000740e
	TIOCOUTQ                          = 0x40047473
	TIOCPKT                           = 0x80047470
	TIOCPKT_DATA                      = 0x0
	TIOCPKT_DOSTOP                    = 0x20
	TIOCPKT_FLUSHREAD                 = 0x1
	TIOCPKT_FLUSHWRITE                = 0x2
	TIOCPKT_IOCTL                     = 0x40
	TIOCPKT_NOSTOP                    = 0x10
	TIOCPKT_START                     = 0x8
	TIOCPKT_STOP                      = 0x4
	TIOCREMOTE                        = 0x80047469
	TIOCSBRK                          = 0x2000747b
	TIOCSCTTY                         = 0x20007461
	TIOCSDRAINWAIT                    = 0x80047457
	TIOCSDTR                          = 0x20007479
	TIOCSETA                          = 0x802c7414
	TIOCSETAF                         = 0x802c7416
	TIOCSETAW                         = 0x802c7415
	TIOCSETD                          = 0x8004741b
	TIOCSIG                           = 0x2000745f
	TIOCSPGRP                         = 0x80047476
	TIOCSTART                         = 0x2000746e
	TIOCSTAT                          = 0x20007465
	TIOCSTI                           = 0x80017472
	TIOCSTOP                          = 0x2000746f
	TIOCSWINSZ                        = 0x80087467
	TIOCTIMESTAMP                     = 0x40107459
	TIOCUCNTL                         = 0x80047466
	TOSTOP                            = 0x400000
	UTIME_NOW                         = -0x1
	UTIME_OMIT                        = -0x2
	VCHECKPT                          = 0x13
	VDISCARD                          = 0xf
	VDSUSP                            = 0xb
	VEOF                              = 0x0
	VEOL                              = 0x1
	VEOL2                             = 0x2
	VERASE                            = 0x3
	VERASE2                           = 0x7
	VINTR                             = 0x8
	VKILL                             = 0x5
	VLNEXT                            = 0xe
	VMIN                              = 0x10
	VM_BCACHE_SIZE_MAX                = 0x0
	VM_SWZONE_SIZE_MAX                = 0x4000000000
	VQUIT                             = 0x9
	VREPRINT                          = 0x6
	VSTART                            = 0xc
	VSTATUS                           = 0x12
	VSTOP                             = 0xd
	VSUSP                             = 0xa
	VTIME                             = 0x11
	VWERASE                           = 0x4
	WCONTINUED                        = 0x4
	WCOREFLAG                         = 0x80
	WEXITED                           = 0x10
	WLINUXCLONE                       = 0x80000000
	WNOHANG                           = 0x1
	WNOWAIT                           = 0x8
	WSTOPPED                          = 0x2
	WTRAPPED                          = 0x20
	WUNTRACED                         = 0x2
)

// Errors
const (
	E2BIG           = syscall.Errno(0x7)
	EACCES          = syscall.Errno(0xd)
	EADDRINUSE      = syscall.Errno(0x30)
	EADDRNOTAVAIL   = syscall.Errno(0x31)
	EAFNOSUPPORT    = syscall.Errno(0x2f)
	EAGAIN          = syscall.Errno(0x23)
	EALREADY        = syscall.Errno(0x25)
	EASYNC          = syscall.Errno(0x63)
	EAUTH           = syscall.Errno(0x50)
	EBADF           = syscall.Errno(0x9)
	EBADMSG         = syscall.Errno(0x59)
	EBADRPC         = syscall.Errno(0x48)
	EBUSY           = syscall.Errno(0x10)
	ECANCELED       = syscall.Errno(0x55)
	ECHILD          = syscall.Errno(0xa)
	ECONNABORTED    = syscall.Errno(0x35)
	ECONNREFUSED    = syscall.Errno(0x3d)
	ECONNRESET      = syscall.Errno(0x36)
	EDEADLK         = syscall.Errno(0xb)
	EDESTADDRREQ    = syscall.Errno(0x27)
	EDOM            = syscall.Errno(0x21)
	EDOOFUS         = syscall.Errno(0x58)
	EDQUOT          = syscall.Errno(0x45)
	EEXIST          = syscall.Errno(0x11)
	EFAULT          = syscall.Errno(0xe)
	EFBIG           = syscall.Errno(0x1b)
	EFTYPE          = syscall.Errno(0x4f)
	EHOSTDOWN       = syscall.Errno(0x40)
	EHOSTUNREACH    = syscall.Errno(0x41)
	EIDRM           = syscall.Errno(0x52)
	EILSEQ          = syscall.Errno(0x56)
	EINPROGRESS     = syscall.Errno(0x24)
	EINTR           = syscall.Errno(0x4)
	EINVAL          = syscall.Errno(0x16)
	EIO             = syscall.Errno(0x5)
	EISCONN         = syscall.Errno(0x38)
	EISDIR          = syscall.Errno(0x15)
	ELAST           = syscall.Errno(0x63)
	ELOOP           = syscall.Errno(0x3e)
	EMFILE          = syscall.Errno(0x18)
	EMLINK          = syscall.Errno(0x1f)
	EMSGSIZE        = syscall.Errno(0x28)
	EMULTIHOP       = syscall.Errno(0x5a)
	ENAMETOOLONG    = syscall.Errno(0x3f)
	ENEEDAUTH       = syscall.Errno(0x51)
	ENETDOWN        = syscall.Errno(0x32)
	ENETRESET       = syscall.Errno(0x34)
	ENETUNREACH     = syscall.Errno(0x33)
	ENFILE          = syscall.Errno(0x17)
	ENOATTR         = syscall.Errno(0x57)
	ENOBUFS         = syscall.Errno(0x37)
	ENODEV          = syscall.Errno(0x13)
	ENOENT          = syscall.Errno(0x2)
	ENOEXEC         = syscall.Errno(0x8)
	ENOLCK          = syscall.Errno(0x4d)
	ENOLINK         = syscall.Errno(0x5b)
	ENOMEDIUM       = syscall.Errno(0x5d)
	ENOMEM          = syscall.Errno(0xc)
	ENOMSG          = syscall.Errno(0x53)
	ENOPROTOOPT     = syscall.Errno(0x2a)
	ENOSPC          = syscall.Errno(0x1c)
	ENOSYS          = syscall.Errno(0x4e)
	ENOTBLK         = syscall.Errno(0xf)
	ENOTCONN        = syscall.Errno(0x39)
	ENOTDIR         = syscall.Errno(0x14)
	ENOTEMPTY       = syscall.Errno(0x42)
	ENOTSOCK        = syscall.Errno(0x26)
	ENOTSUP         = syscall.Errno(0x2d)
	ENOTTY          = syscall.Errno(0x19)
	ENXIO           = syscall.Errno(0x6)
	EOPNOTSUPP      = syscall.Errno(0x2d)
	EOVERFLOW       = syscall.Errno(0x54)
	EPERM           = syscall.Errno(0x1)
	EPFNOSUPPORT    = syscall.Errno(0x2e)
	EPIPE           = syscall.Errno(0x20)
	EPROCLIM        = syscall.Errno(0x43)
	EPROCUNAVAIL    = syscall.Errno(0x4c)
	EPROGMISMATCH   = syscall.Errno(0x4b)
	EPROGUNAVAIL    = syscall.Errno(0x4a)
	EPROTO          = syscall.Errno(0x5c)
	EPROTONOSUPPORT = syscall.Errno(0x2b)
	EPROTOTYPE      = syscall.Errno(0x29)
	ERANGE          = syscall.Errno(0x22)
	EREMOTE         = syscall.Errno(0x47)
	EROFS           = syscall.Errno(0x1e)
	ERPCMISMATCH    = syscall.Errno(0x49)
	ESHUTDOWN       = syscall.Errno(0x3a)
	ESOCKTNOSUPPORT = syscall.Errno(0x2c)
	ESPIPE          = syscall.Errno(0x1d)
	ESRCH           = syscall.Errno(0x3)
	ESTALE          = syscall.Errno(0x46)
	ETIMEDOUT       = syscall.Errno(0x3c)
	ETOOMANYREFS    = syscall.Errno(0x3b)
	ETXTBSY         = syscall.Errno(0x1a)
	EUSERS          = syscall.Errno(0x44)
	EWOULDBLOCK     = syscall.Errno(0x23)
	EXDEV           = syscall.Errno(0x12)
)

// Signals
const (
	SIGABRT     = syscall.Signal(0x6)
	SIGALRM     = syscall.Signal(0xe)
	SIGBUS      = syscall.Signal(0xa)
	SIGCHLD     = syscall.Signal(0x14)
	SIGCKPT     = syscall.Signal(0x21)
	SIGCKPTEXIT = syscall.Signal(0x22)
	SIGCONT     = syscall.Signal(0x13)
	SIGEMT      = syscall.Signal(0x7)
	SIGFPE      = syscall.Signal(0x8)
	SIGHUP      = syscall.Signal(0x1)
	SIGILL      = syscall.Signal(0x4)
	SIGINFO     = syscall.Signal(0x1d)
	SIGINT      = syscall.Signal(0x2)
	SIGIO       = syscall.Signal(0x17)
	SIGIOT      = syscall.Signal(0x6)
	SIGKILL     = syscall.Signal(0x9)
	SIGPIPE     = syscall.Signal(0xd)
	SIGPROF     = syscall.Signal(0x1b)
	SIGQUIT     = syscall.Signal(0x3)
	SIGSEGV     = syscall.Signal(0xb)
	SIGSTOP     = syscall.Signal(0x11)
	SIGSYS      = syscall.Signal(0xc)
	SIGTERM     = syscall.Signal(0xf)
	SIGTHR      = syscall.Signal(0x20)
	SIGTRAP     = syscall.Signal(0x5)
	SIGTSTP     = syscall.Signal(0x12)
	SIGTTIN     = syscall.Signal(0x15)
	SIGTTOU     = syscall.Signal(0x16)
	SIGURG      = syscall.Signal(0x10)
	SIGUSR1     = syscall.Signal(0x1e)
	SIGUSR2     = syscall.Signal(0x1f)
	SIGVTALRM   = syscall.Signal(0x1a)
	SIGWINCH    = syscall.Signal(0x1c)
	SIGXCPU     = syscall.Signal(0x18)
	SIGXFSZ     = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "device not configured"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EDEADLK", "resource deadlock avoided"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "cross-device link"},
	{19, "ENODEV", "operation not supported by device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "result too large"},
	{35, "EWOULDBLOCK", "resource temporarily unavailable"},
	{36, "EINPROGRESS", "operation now in progress"},
	{37, "EALREADY", "operation already in progress"},
	{38, "ENOTSOCK", "socket operation on non-socket"},
	{39, "EDESTADDRREQ", "destination address required"},
	{40, "EMSGSIZE", "message too long"},
	{41, "EPROTOTYPE", "protocol wrong type for socket"},
	{42, "ENOPROTOOPT", "protocol not available"},
	{43, "EPROTONOSUPPORT", "protocol not supported"},
	{44, "ESOCKTNOSUPPORT", "socket type not supported"},
	{45, "EOPNOTSUPP", "operation not supported"},
	{46, "EPFNOSUPPORT", "protocol family not supported"},
	{47, "EAFNOSUPPORT", "address family not supported by protocol family"},
	{48, "EADDRINUSE", "address already in use"},
	{49, "EADDRNOTAVAIL", "can't assign requested address"},
	{50, "ENETDOWN", "network is down"},
	{51, "ENETUNREACH", "network is unreachable"},
	{52, "ENETRESET", "network dropped connection on reset"},
	{53, "ECONNABORTED", "software caused connection abort"},
	{54, "ECONNRESET", "connection reset by peer"},
	{55, "ENOBUFS", "no buffer space available"},
	{56, "EISCONN", "socket is already connected"},
	{57, "ENOTCONN", "socket is not connected"},
	{58, "ESHUTDOWN", "can't send after socket shutdown"},
	{59, "ETOOMANYREFS", "too many references: can't splice"},
	{60, "ETIMEDOUT", "operation timed out"},
	{61, "ECONNREFUSED", "connection refused"},
	{62, "ELOOP", "too many levels of symbolic links"},
	{63, "ENAMETOOLONG", "file name too long"},
	{64, "EHOSTDOWN", "host is down"},
	{65, "EHOSTUNREACH", "no route to host"},
	{66, "ENOTEMPTY", "directory not empty"},
	{67, "EPROCLIM", "too many processes"},
	{68, "EUSERS", "too many users"},
	{69, "EDQUOT", "disc quota exceeded"},
	{70, "ESTALE", "stale NFS file handle"},
	{71, "EREMOTE", "too many levels of remote in path"},
	{72, "EBADRPC", "RPC struct is bad"},
	{73, "ERPCMISMATCH", "RPC version wrong"},
	{74, "EPROGUNAVAIL", "RPC prog. not avail"},
	{75, "EPROGMISMATCH", "program version wrong"},
	{76, "EPROCUNAVAIL", "bad procedure for program"},
	{77, "ENOLCK", "no locks available"},
	{78, "ENOSYS", "function not implemented"},
	{79, "EFTYPE", "inappropriate file type or format"},
	{80, "EAUTH", "authentication error"},
	{81, "ENEEDAUTH", "need authenticator"},
	{82, "EIDRM", "identifier removed"},
	{83, "ENOMSG", "no message of desired type"},
	{84, "EOVERFLOW", "value too large to be stored in data type"},
	{85, "ECANCELED", "operation canceled"},
	{86, "EILSEQ", "illegal byte sequence"},
	{87, "ENOATTR", "attribute not found"},
	{88, "EDOOFUS", "programming error"},
	{89, "EBADMSG", "bad message"},
	{90, "EMULTIHOP", "multihop attempted"},
	{91, "ENOLINK", "link has been severed"},
	{92, "EPROTO", "protocol error"},
	{93, "ENOMEDIUM", "no medium found"},
	{99, "EASYNC", "unknown error: 99"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/BPT trap"},
	{6, "SIGIOT", "abort trap"},
	{7, "SIGEMT", "EMT trap"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus error"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGSYS", "bad system call"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGURG", "urgent I/O condition"},
	{17, "SIGSTOP", "suspended (signal)"},
	{18, "SIGTSTP", "suspended"},
	{19, "SIGCONT", "continued"},
	{20, "SIGCHLD", "child exited"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGIO", "I/O possible"},
	{24, "SIGXCPU", "cputime limit exceeded"},
	{25, "SIGXFSZ", "filesize limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window size changes"},
	{29, "SIGINFO", "information request"},
	{30, "SIGUSR1", "user defined signal 1"},
	{31, "SIGUSR2", "user defined signal 2"},
	{32, "SIGTHR", "thread Scheduler"},
	{33, "SIGCKPT", "checkPoint"},
	{34, "SIGCKPTEXIT", "checkPointExit"},
}
07070100000E25000081A4000000000000000000000001645E367C00013E4B000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go   // mkerrors.sh -m32
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build 386 && freebsd
// +build 386,freebsd

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -m32 _const.go

package unix

import "syscall"

const (
	AF_APPLETALK                   = 0x10
	AF_ARP                         = 0x23
	AF_ATM                         = 0x1e
	AF_BLUETOOTH                   = 0x24
	AF_CCITT                       = 0xa
	AF_CHAOS                       = 0x5
	AF_CNT                         = 0x15
	AF_COIP                        = 0x14
	AF_DATAKIT                     = 0x9
	AF_DECnet                      = 0xc
	AF_DLI                         = 0xd
	AF_E164                        = 0x1a
	AF_ECMA                        = 0x8
	AF_HYLINK                      = 0xf
	AF_IEEE80211                   = 0x25
	AF_IMPLINK                     = 0x3
	AF_INET                        = 0x2
	AF_INET6                       = 0x1c
	AF_INET6_SDP                   = 0x2a
	AF_INET_SDP                    = 0x28
	AF_IPX                         = 0x17
	AF_ISDN                        = 0x1a
	AF_ISO                         = 0x7
	AF_LAT                         = 0xe
	AF_LINK                        = 0x12
	AF_LOCAL                       = 0x1
	AF_MAX                         = 0x2a
	AF_NATM                        = 0x1d
	AF_NETBIOS                     = 0x6
	AF_NETGRAPH                    = 0x20
	AF_OSI                         = 0x7
	AF_PUP                         = 0x4
	AF_ROUTE                       = 0x11
	AF_SCLUSTER                    = 0x22
	AF_SIP                         = 0x18
	AF_SLOW                        = 0x21
	AF_SNA                         = 0xb
	AF_UNIX                        = 0x1
	AF_UNSPEC                      = 0x0
	AF_VENDOR00                    = 0x27
	AF_VENDOR01                    = 0x29
	AF_VENDOR02                    = 0x2b
	AF_VENDOR03                    = 0x2d
	AF_VENDOR04                    = 0x2f
	AF_VENDOR05                    = 0x31
	AF_VENDOR06                    = 0x33
	AF_VENDOR07                    = 0x35
	AF_VENDOR08                    = 0x37
	AF_VENDOR09                    = 0x39
	AF_VENDOR10                    = 0x3b
	AF_VENDOR11                    = 0x3d
	AF_VENDOR12                    = 0x3f
	AF_VENDOR13                    = 0x41
	AF_VENDOR14                    = 0x43
	AF_VENDOR15                    = 0x45
	AF_VENDOR16                    = 0x47
	AF_VENDOR17                    = 0x49
	AF_VENDOR18                    = 0x4b
	AF_VENDOR19                    = 0x4d
	AF_VENDOR20                    = 0x4f
	AF_VENDOR21                    = 0x51
	AF_VENDOR22                    = 0x53
	AF_VENDOR23                    = 0x55
	AF_VENDOR24                    = 0x57
	AF_VENDOR25                    = 0x59
	AF_VENDOR26                    = 0x5b
	AF_VENDOR27                    = 0x5d
	AF_VENDOR28                    = 0x5f
	AF_VENDOR29                    = 0x61
	AF_VENDOR30                    = 0x63
	AF_VENDOR31                    = 0x65
	AF_VENDOR32                    = 0x67
	AF_VENDOR33                    = 0x69
	AF_VENDOR34                    = 0x6b
	AF_VENDOR35                    = 0x6d
	AF_VENDOR36                    = 0x6f
	AF_VENDOR37                    = 0x71
	AF_VENDOR38                    = 0x73
	AF_VENDOR39                    = 0x75
	AF_VENDOR40                    = 0x77
	AF_VENDOR41                    = 0x79
	AF_VENDOR42                    = 0x7b
	AF_VENDOR43                    = 0x7d
	AF_VENDOR44                    = 0x7f
	AF_VENDOR45                    = 0x81
	AF_VENDOR46                    = 0x83
	AF_VENDOR47                    = 0x85
	ALTWERASE                      = 0x200
	B0                             = 0x0
	B110                           = 0x6e
	B115200                        = 0x1c200
	B1200                          = 0x4b0
	B134                           = 0x86
	B14400                         = 0x3840
	B150                           = 0x96
	B1800                          = 0x708
	B19200                         = 0x4b00
	B200                           = 0xc8
	B230400                        = 0x38400
	B2400                          = 0x960
	B28800                         = 0x7080
	B300                           = 0x12c
	B38400                         = 0x9600
	B460800                        = 0x70800
	B4800                          = 0x12c0
	B50                            = 0x32
	B57600                         = 0xe100
	B600                           = 0x258
	B7200                          = 0x1c20
	B75                            = 0x4b
	B76800                         = 0x12c00
	B921600                        = 0xe1000
	B9600                          = 0x2580
	BIOCFEEDBACK                   = 0x8004427c
	BIOCFLUSH                      = 0x20004268
	BIOCGBLEN                      = 0x40044266
	BIOCGDIRECTION                 = 0x40044276
	BIOCGDLT                       = 0x4004426a
	BIOCGDLTLIST                   = 0xc0084279
	BIOCGETBUFMODE                 = 0x4004427d
	BIOCGETIF                      = 0x4020426b
	BIOCGETZMAX                    = 0x4004427f
	BIOCGHDRCMPLT                  = 0x40044274
	BIOCGRSIG                      = 0x40044272
	BIOCGRTIMEOUT                  = 0x4008426e
	BIOCGSEESENT                   = 0x40044276
	BIOCGSTATS                     = 0x4008426f
	BIOCGTSTAMP                    = 0x40044283
	BIOCIMMEDIATE                  = 0x80044270
	BIOCLOCK                       = 0x2000427a
	BIOCPROMISC                    = 0x20004269
	BIOCROTZBUF                    = 0x400c4280
	BIOCSBLEN                      = 0xc0044266
	BIOCSDIRECTION                 = 0x80044277
	BIOCSDLT                       = 0x80044278
	BIOCSETBUFMODE                 = 0x8004427e
	BIOCSETF                       = 0x80084267
	BIOCSETFNR                     = 0x80084282
	BIOCSETIF                      = 0x8020426c
	BIOCSETVLANPCP                 = 0x80044285
	BIOCSETWF                      = 0x8008427b
	BIOCSETZBUF                    = 0x800c4281
	BIOCSHDRCMPLT                  = 0x80044275
	BIOCSRSIG                      = 0x80044273
	BIOCSRTIMEOUT                  = 0x8008426d
	BIOCSSEESENT                   = 0x80044277
	BIOCSTSTAMP                    = 0x80044284
	BIOCVERSION                    = 0x40044271
	BPF_A                          = 0x10
	BPF_ABS                        = 0x20
	BPF_ADD                        = 0x0
	BPF_ALIGNMENT                  = 0x4
	BPF_ALU                        = 0x4
	BPF_AND                        = 0x50
	BPF_B                          = 0x10
	BPF_BUFMODE_BUFFER             = 0x1
	BPF_BUFMODE_ZBUF               = 0x2
	BPF_DIV                        = 0x30
	BPF_H                          = 0x8
	BPF_IMM                        = 0x0
	BPF_IND                        = 0x40
	BPF_JA                         = 0x0
	BPF_JEQ                        = 0x10
	BPF_JGE                        = 0x30
	BPF_JGT                        = 0x20
	BPF_JMP                        = 0x5
	BPF_JSET                       = 0x40
	BPF_K                          = 0x0
	BPF_LD                         = 0x0
	BPF_LDX                        = 0x1
	BPF_LEN                        = 0x80
	BPF_LSH                        = 0x60
	BPF_MAJOR_VERSION              = 0x1
	BPF_MAXBUFSIZE                 = 0x80000
	BPF_MAXINSNS                   = 0x200
	BPF_MEM                        = 0x60
	BPF_MEMWORDS                   = 0x10
	BPF_MINBUFSIZE                 = 0x20
	BPF_MINOR_VERSION              = 0x1
	BPF_MISC                       = 0x7
	BPF_MOD                        = 0x90
	BPF_MSH                        = 0xa0
	BPF_MUL                        = 0x20
	BPF_NEG                        = 0x80
	BPF_OR                         = 0x40
	BPF_RELEASE                    = 0x30bb6
	BPF_RET                        = 0x6
	BPF_RSH                        = 0x70
	BPF_ST                         = 0x2
	BPF_STX                        = 0x3
	BPF_SUB                        = 0x10
	BPF_TAX                        = 0x0
	BPF_TXA                        = 0x80
	BPF_T_BINTIME                  = 0x2
	BPF_T_BINTIME_FAST             = 0x102
	BPF_T_BINTIME_MONOTONIC        = 0x202
	BPF_T_BINTIME_MONOTONIC_FAST   = 0x302
	BPF_T_FAST                     = 0x100
	BPF_T_FLAG_MASK                = 0x300
	BPF_T_FORMAT_MASK              = 0x3
	BPF_T_MICROTIME                = 0x0
	BPF_T_MICROTIME_FAST           = 0x100
	BPF_T_MICROTIME_MONOTONIC      = 0x200
	BPF_T_MICROTIME_MONOTONIC_FAST = 0x300
	BPF_T_MONOTONIC                = 0x200
	BPF_T_MONOTONIC_FAST           = 0x300
	BPF_T_NANOTIME                 = 0x1
	BPF_T_NANOTIME_FAST            = 0x101
	BPF_T_NANOTIME_MONOTONIC       = 0x201
	BPF_T_NANOTIME_MONOTONIC_FAST  = 0x301
	BPF_T_NONE                     = 0x3
	BPF_T_NORMAL                   = 0x0
	BPF_W                          = 0x0
	BPF_X                          = 0x8
	BPF_XOR                        = 0xa0
	BRKINT                         = 0x2
	CAP_ACCEPT                     = 0x200000020000000
	CAP_ACL_CHECK                  = 0x400000000010000
	CAP_ACL_DELETE                 = 0x400000000020000
	CAP_ACL_GET                    = 0x400000000040000
	CAP_ACL_SET                    = 0x400000000080000
	CAP_ALL0                       = 0x20007ffffffffff
	CAP_ALL1                       = 0x4000000001fffff
	CAP_BIND                       = 0x200000040000000
	CAP_BINDAT                     = 0x200008000000400
	CAP_CHFLAGSAT                  = 0x200000000001400
	CAP_CONNECT                    = 0x200000080000000
	CAP_CONNECTAT                  = 0x200010000000400
	CAP_CREATE                     = 0x200000000000040
	CAP_EVENT                      = 0x400000000000020
	CAP_EXTATTR_DELETE             = 0x400000000001000
	CAP_EXTATTR_GET                = 0x400000000002000
	CAP_EXTATTR_LIST               = 0x400000000004000
	CAP_EXTATTR_SET                = 0x400000000008000
	CAP_FCHDIR                     = 0x200000000000800
	CAP_FCHFLAGS                   = 0x200000000001000
	CAP_FCHMOD                     = 0x200000000002000
	CAP_FCHMODAT                   = 0x200000000002400
	CAP_FCHOWN                     = 0x200000000004000
	CAP_FCHOWNAT                   = 0x200000000004400
	CAP_FCNTL                      = 0x200000000008000
	CAP_FCNTL_ALL                  = 0x78
	CAP_FCNTL_GETFL                = 0x8
	CAP_FCNTL_GETOWN               = 0x20
	CAP_FCNTL_SETFL                = 0x10
	CAP_FCNTL_SETOWN               = 0x40
	CAP_FEXECVE                    = 0x200000000000080
	CAP_FLOCK                      = 0x200000000010000
	CAP_FPATHCONF                  = 0x200000000020000
	CAP_FSCK                       = 0x200000000040000
	CAP_FSTAT                      = 0x200000000080000
	CAP_FSTATAT                    = 0x200000000080400
	CAP_FSTATFS                    = 0x200000000100000
	CAP_FSYNC                      = 0x200000000000100
	CAP_FTRUNCATE                  = 0x200000000000200
	CAP_FUTIMES                    = 0x200000000200000
	CAP_FUTIMESAT                  = 0x200000000200400
	CAP_GETPEERNAME                = 0x200000100000000
	CAP_GETSOCKNAME                = 0x200000200000000
	CAP_GETSOCKOPT                 = 0x200000400000000
	CAP_IOCTL                      = 0x400000000000080
	CAP_IOCTLS_ALL                 = 0x7fffffff
	CAP_KQUEUE                     = 0x400000000100040
	CAP_KQUEUE_CHANGE              = 0x400000000100000
	CAP_KQUEUE_EVENT               = 0x400000000000040
	CAP_LINKAT_SOURCE              = 0x200020000000400
	CAP_LINKAT_TARGET              = 0x200000000400400
	CAP_LISTEN                     = 0x200000800000000
	CAP_LOOKUP                     = 0x200000000000400
	CAP_MAC_GET                    = 0x400000000000001
	CAP_MAC_SET                    = 0x400000000000002
	CAP_MKDIRAT                    = 0x200000000800400
	CAP_MKFIFOAT                   = 0x200000001000400
	CAP_MKNODAT                    = 0x200000002000400
	CAP_MMAP                       = 0x200000000000010
	CAP_MMAP_R                     = 0x20000000000001d
	CAP_MMAP_RW                    = 0x20000000000001f
	CAP_MMAP_RWX                   = 0x20000000000003f
	CAP_MMAP_RX                    = 0x20000000000003d
	CAP_MMAP_W                     = 0x20000000000001e
	CAP_MMAP_WX                    = 0x20000000000003e
	CAP_MMAP_X                     = 0x20000000000003c
	CAP_PDGETPID                   = 0x400000000000200
	CAP_PDKILL                     = 0x400000000000800
	CAP_PDWAIT                     = 0x400000000000400
	CAP_PEELOFF                    = 0x200001000000000
	CAP_POLL_EVENT                 = 0x400000000000020
	CAP_PREAD                      = 0x20000000000000d
	CAP_PWRITE                     = 0x20000000000000e
	CAP_READ                       = 0x200000000000001
	CAP_RECV                       = 0x200000000000001
	CAP_RENAMEAT_SOURCE            = 0x200000004000400
	CAP_RENAMEAT_TARGET            = 0x200040000000400
	CAP_RIGHTS_VERSION             = 0x0
	CAP_RIGHTS_VERSION_00          = 0x0
	CAP_SEEK                       = 0x20000000000000c
	CAP_SEEK_TELL                  = 0x200000000000004
	CAP_SEM_GETVALUE               = 0x400000000000004
	CAP_SEM_POST                   = 0x400000000000008
	CAP_SEM_WAIT                   = 0x400000000000010
	CAP_SEND                       = 0x200000000000002
	CAP_SETSOCKOPT                 = 0x200002000000000
	CAP_SHUTDOWN                   = 0x200004000000000
	CAP_SOCK_CLIENT                = 0x200007780000003
	CAP_SOCK_SERVER                = 0x200007f60000003
	CAP_SYMLINKAT                  = 0x200000008000400
	CAP_TTYHOOK                    = 0x400000000000100
	CAP_UNLINKAT                   = 0x200000010000400
	CAP_UNUSED0_44                 = 0x200080000000000
	CAP_UNUSED0_57                 = 0x300000000000000
	CAP_UNUSED1_22                 = 0x400000000200000
	CAP_UNUSED1_57                 = 0x500000000000000
	CAP_WRITE                      = 0x200000000000002
	CFLUSH                         = 0xf
	CLOCAL                         = 0x8000
	CLOCK_MONOTONIC                = 0x4
	CLOCK_MONOTONIC_FAST           = 0xc
	CLOCK_MONOTONIC_PRECISE        = 0xb
	CLOCK_PROCESS_CPUTIME_ID       = 0xf
	CLOCK_PROF                     = 0x2
	CLOCK_REALTIME                 = 0x0
	CLOCK_REALTIME_FAST            = 0xa
	CLOCK_REALTIME_PRECISE         = 0x9
	CLOCK_SECOND                   = 0xd
	CLOCK_THREAD_CPUTIME_ID        = 0xe
	CLOCK_UPTIME                   = 0x5
	CLOCK_UPTIME_FAST              = 0x8
	CLOCK_UPTIME_PRECISE           = 0x7
	CLOCK_VIRTUAL                  = 0x1
	CPUSTATES                      = 0x5
	CP_IDLE                        = 0x4
	CP_INTR                        = 0x3
	CP_NICE                        = 0x1
	CP_SYS                         = 0x2
	CP_USER                        = 0x0
	CREAD                          = 0x800
	CRTSCTS                        = 0x30000
	CS5                            = 0x0
	CS6                            = 0x100
	CS7                            = 0x200
	CS8                            = 0x300
	CSIZE                          = 0x300
	CSTART                         = 0x11
	CSTATUS                        = 0x14
	CSTOP                          = 0x13
	CSTOPB                         = 0x400
	CSUSP                          = 0x1a
	CTL_HW                         = 0x6
	CTL_KERN                       = 0x1
	CTL_MAXNAME                    = 0x18
	CTL_NET                        = 0x4
	DIOCGATTR                      = 0xc144648e
	DIOCGDELETE                    = 0x80106488
	DIOCGFLUSH                     = 0x20006487
	DIOCGFRONTSTUFF                = 0x40086486
	DIOCGFWHEADS                   = 0x40046483
	DIOCGFWSECTORS                 = 0x40046482
	DIOCGIDENT                     = 0x41006489
	DIOCGMEDIASIZE                 = 0x40086481
	DIOCGPHYSPATH                  = 0x4400648d
	DIOCGPROVIDERNAME              = 0x4400648a
	DIOCGSECTORSIZE                = 0x40046480
	DIOCGSTRIPEOFFSET              = 0x4008648c
	DIOCGSTRIPESIZE                = 0x4008648b
	DIOCSKERNELDUMP                = 0x804c6490
	DIOCSKERNELDUMP_FREEBSD11      = 0x80046485
	DIOCZONECMD                    = 0xc06c648f
	DLT_A429                       = 0xb8
	DLT_A653_ICM                   = 0xb9
	DLT_AIRONET_HEADER             = 0x78
	DLT_AOS                        = 0xde
	DLT_APPLE_IP_OVER_IEEE1394     = 0x8a
	DLT_ARCNET                     = 0x7
	DLT_ARCNET_LINUX               = 0x81
	DLT_ATM_CLIP                   = 0x13
	DLT_ATM_RFC1483                = 0xb
	DLT_AURORA                     = 0x7e
	DLT_AX25                       = 0x3
	DLT_AX25_KISS                  = 0xca
	DLT_BACNET_MS_TP               = 0xa5
	DLT_BLUETOOTH_BREDR_BB         = 0xff
	DLT_BLUETOOTH_HCI_H4           = 0xbb
	DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9
	DLT_BLUETOOTH_LE_LL            = 0xfb
	DLT_BLUETOOTH_LE_LL_WITH_PHDR  = 0x100
	DLT_BLUETOOTH_LINUX_MONITOR    = 0xfe
	DLT_CAN20B                     = 0xbe
	DLT_CAN_SOCKETCAN              = 0xe3
	DLT_CHAOS                      = 0x5
	DLT_CHDLC                      = 0x68
	DLT_CISCO_IOS                  = 0x76
	DLT_CLASS_NETBSD_RAWAF         = 0x2240000
	DLT_C_HDLC                     = 0x68
	DLT_C_HDLC_WITH_DIR            = 0xcd
	DLT_DBUS                       = 0xe7
	DLT_DECT                       = 0xdd
	DLT_DISPLAYPORT_AUX            = 0x113
	DLT_DOCSIS                     = 0x8f
	DLT_DOCSIS31_XRA31             = 0x111
	DLT_DVB_CI                     = 0xeb
	DLT_ECONET                     = 0x73
	DLT_EN10MB                     = 0x1
	DLT_EN3MB                      = 0x2
	DLT_ENC                        = 0x6d
	DLT_EPON                       = 0x103
	DLT_ERF                        = 0xc5
	DLT_ERF_ETH                    = 0xaf
	DLT_ERF_POS                    = 0xb0
	DLT_ETHERNET_MPACKET           = 0x112
	DLT_FC_2                       = 0xe0
	DLT_FC_2_WITH_FRAME_DELIMS     = 0xe1
	DLT_FDDI                       = 0xa
	DLT_FLEXRAY                    = 0xd2
	DLT_FRELAY                     = 0x6b
	DLT_FRELAY_WITH_DIR            = 0xce
	DLT_GCOM_SERIAL                = 0xad
	DLT_GCOM_T1E1                  = 0xac
	DLT_GPF_F                      = 0xab
	DLT_GPF_T                      = 0xaa
	DLT_GPRS_LLC                   = 0xa9
	DLT_GSMTAP_ABIS                = 0xda
	DLT_GSMTAP_UM                  = 0xd9
	DLT_IBM_SN                     = 0x92
	DLT_IBM_SP                     = 0x91
	DLT_IEEE802                    = 0x6
	DLT_IEEE802_11                 = 0x69
	DLT_IEEE802_11_RADIO           = 0x7f
	DLT_IEEE802_11_RADIO_AVS       = 0xa3
	DLT_IEEE802_15_4               = 0xc3
	DLT_IEEE802_15_4_LINUX         = 0xbf
	DLT_IEEE802_15_4_NOFCS         = 0xe6
	DLT_IEEE802_15_4_NONASK_PHY    = 0xd7
	DLT_IEEE802_16_MAC_CPS         = 0xbc
	DLT_IEEE802_16_MAC_CPS_RADIO   = 0xc1
	DLT_INFINIBAND                 = 0xf7
	DLT_IPFILTER                   = 0x74
	DLT_IPMB_KONTRON               = 0xc7
	DLT_IPMB_LINUX                 = 0xd1
	DLT_IPMI_HPM_2                 = 0x104
	DLT_IPNET                      = 0xe2
	DLT_IPOIB                      = 0xf2
	DLT_IPV4                       = 0xe4
	DLT_IPV6                       = 0xe5
	DLT_IP_OVER_FC                 = 0x7a
	DLT_ISO_14443                  = 0x108
	DLT_JUNIPER_ATM1               = 0x89
	DLT_JUNIPER_ATM2               = 0x87
	DLT_JUNIPER_ATM_CEMIC          = 0xee
	DLT_JUNIPER_CHDLC              = 0xb5
	DLT_JUNIPER_ES                 = 0x84
	DLT_JUNIPER_ETHER              = 0xb2
	DLT_JUNIPER_FIBRECHANNEL       = 0xea
	DLT_JUNIPER_FRELAY             = 0xb4
	DLT_JUNIPER_GGSN               = 0x85
	DLT_JUNIPER_ISM                = 0xc2
	DLT_JUNIPER_MFR                = 0x86
	DLT_JUNIPER_MLFR               = 0x83
	DLT_JUNIPER_MLPPP              = 0x82
	DLT_JUNIPER_MONITOR            = 0xa4
	DLT_JUNIPER_PIC_PEER           = 0xae
	DLT_JUNIPER_PPP                = 0xb3
	DLT_JUNIPER_PPPOE              = 0xa7
	DLT_JUNIPER_PPPOE_ATM          = 0xa8
	DLT_JUNIPER_SERVICES           = 0x88
	DLT_JUNIPER_SRX_E2E            = 0xe9
	DLT_JUNIPER_ST                 = 0xc8
	DLT_JUNIPER_VP                 = 0xb7
	DLT_JUNIPER_VS                 = 0xe8
	DLT_LAPB_WITH_DIR              = 0xcf
	DLT_LAPD                       = 0xcb
	DLT_LIN                        = 0xd4
	DLT_LINUX_EVDEV                = 0xd8
	DLT_LINUX_IRDA                 = 0x90
	DLT_LINUX_LAPD                 = 0xb1
	DLT_LINUX_PPP_WITHDIRECTION    = 0xa6
	DLT_LINUX_SLL                  = 0x71
	DLT_LINUX_SLL2                 = 0x114
	DLT_LOOP                       = 0x6c
	DLT_LORATAP                    = 0x10e
	DLT_LTALK                      = 0x72
	DLT_MATCHING_MAX               = 0x114
	DLT_MATCHING_MIN               = 0x68
	DLT_MFR                        = 0xb6
	DLT_MOST                       = 0xd3
	DLT_MPEG_2_TS                  = 0xf3
	DLT_MPLS                       = 0xdb
	DLT_MTP2                       = 0x8c
	DLT_MTP2_WITH_PHDR             = 0x8b
	DLT_MTP3                       = 0x8d
	DLT_MUX27010                   = 0xec
	DLT_NETANALYZER                = 0xf0
	DLT_NETANALYZER_TRANSPARENT    = 0xf1
	DLT_NETLINK                    = 0xfd
	DLT_NFC_LLCP                   = 0xf5
	DLT_NFLOG                      = 0xef
	DLT_NG40                       = 0xf4
	DLT_NORDIC_BLE                 = 0x110
	DLT_NULL                       = 0x0
	DLT_OPENFLOW                   = 0x10b
	DLT_PCI_EXP                    = 0x7d
	DLT_PFLOG                      = 0x75
	DLT_PFSYNC                     = 0x79
	DLT_PKTAP                      = 0x102
	DLT_PPI                        = 0xc0
	DLT_PPP                        = 0x9
	DLT_PPP_BSDOS                  = 0xe
	DLT_PPP_ETHER                  = 0x33
	DLT_PPP_PPPD                   = 0xa6
	DLT_PPP_SERIAL                 = 0x32
	DLT_PPP_WITH_DIR               = 0xcc
	DLT_PPP_WITH_DIRECTION         = 0xa6
	DLT_PRISM_HEADER               = 0x77
	DLT_PROFIBUS_DL                = 0x101
	DLT_PRONET                     = 0x4
	DLT_RAIF1                      = 0xc6
	DLT_RAW                        = 0xc
	DLT_RDS                        = 0x109
	DLT_REDBACK_SMARTEDGE          = 0x20
	DLT_RIO                        = 0x7c
	DLT_RTAC_SERIAL                = 0xfa
	DLT_SCCP                       = 0x8e
	DLT_SCTP                       = 0xf8
	DLT_SDLC                       = 0x10c
	DLT_SITA                       = 0xc4
	DLT_SLIP                       = 0x8
	DLT_SLIP_BSDOS                 = 0xd
	DLT_STANAG_5066_D_PDU          = 0xed
	DLT_SUNATM                     = 0x7b
	DLT_SYMANTEC_FIREWALL          = 0x63
	DLT_TI_LLN_SNIFFER             = 0x10d
	DLT_TZSP                       = 0x80
	DLT_USB                        = 0xba
	DLT_USBPCAP                    = 0xf9
	DLT_USB_DARWIN                 = 0x10a
	DLT_USB_FREEBSD                = 0xba
	DLT_USB_LINUX                  = 0xbd
	DLT_USB_LINUX_MMAPPED          = 0xdc
	DLT_USER0                      = 0x93
	DLT_USER1                      = 0x94
	DLT_USER10                     = 0x9d
	DLT_USER11                     = 0x9e
	DLT_USER12                     = 0x9f
	DLT_USER13                     = 0xa0
	DLT_USER14                     = 0xa1
	DLT_USER15                     = 0xa2
	DLT_USER2                      = 0x95
	DLT_USER3                      = 0x96
	DLT_USER4                      = 0x97
	DLT_USER5                      = 0x98
	DLT_USER6                      = 0x99
	DLT_USER7                      = 0x9a
	DLT_USER8                      = 0x9b
	DLT_USER9                      = 0x9c
	DLT_VSOCK                      = 0x10f
	DLT_WATTSTOPPER_DLM            = 0x107
	DLT_WIHART                     = 0xdf
	DLT_WIRESHARK_UPPER_PDU        = 0xfc
	DLT_X2E_SERIAL                 = 0xd5
	DLT_X2E_XORAYA                 = 0xd6
	DLT_ZWAVE_R1_R2                = 0x105
	DLT_ZWAVE_R3                   = 0x106
	DT_BLK                         = 0x6
	DT_CHR                         = 0x2
	DT_DIR                         = 0x4
	DT_FIFO                        = 0x1
	DT_LNK                         = 0xa
	DT_REG                         = 0x8
	DT_SOCK                        = 0xc
	DT_UNKNOWN                     = 0x0
	DT_WHT                         = 0xe
	ECHO                           = 0x8
	ECHOCTL                        = 0x40
	ECHOE                          = 0x2
	ECHOK                          = 0x4
	ECHOKE                         = 0x1
	ECHONL                         = 0x10
	ECHOPRT                        = 0x20
	EVFILT_AIO                     = -0x3
	EVFILT_EMPTY                   = -0xd
	EVFILT_FS                      = -0x9
	EVFILT_LIO                     = -0xa
	EVFILT_PROC                    = -0x5
	EVFILT_PROCDESC                = -0x8
	EVFILT_READ                    = -0x1
	EVFILT_SENDFILE                = -0xc
	EVFILT_SIGNAL                  = -0x6
	EVFILT_SYSCOUNT                = 0xd
	EVFILT_TIMER                   = -0x7
	EVFILT_USER                    = -0xb
	EVFILT_VNODE                   = -0x4
	EVFILT_WRITE                   = -0x2
	EVNAMEMAP_NAME_SIZE            = 0x40
	EV_ADD                         = 0x1
	EV_CLEAR                       = 0x20
	EV_DELETE                      = 0x2
	EV_DISABLE                     = 0x8
	EV_DISPATCH                    = 0x80
	EV_DROP                        = 0x1000
	EV_ENABLE                      = 0x4
	EV_EOF                         = 0x8000
	EV_ERROR                       = 0x4000
	EV_FLAG1                       = 0x2000
	EV_FLAG2                       = 0x4000
	EV_FORCEONESHOT                = 0x100
	EV_ONESHOT                     = 0x10
	EV_RECEIPT                     = 0x40
	EV_SYSFLAGS                    = 0xf000
	EXTA                           = 0x4b00
	EXTATTR_MAXNAMELEN             = 0xff
	EXTATTR_NAMESPACE_EMPTY        = 0x0
	EXTATTR_NAMESPACE_SYSTEM       = 0x2
	EXTATTR_NAMESPACE_USER         = 0x1
	EXTB                           = 0x9600
	EXTPROC                        = 0x800
	FD_CLOEXEC                     = 0x1
	FD_SETSIZE                     = 0x400
	FLUSHO                         = 0x800000
	F_CANCEL                       = 0x5
	F_DUP2FD                       = 0xa
	F_DUP2FD_CLOEXEC               = 0x12
	F_DUPFD                        = 0x0
	F_DUPFD_CLOEXEC                = 0x11
	F_GETFD                        = 0x1
	F_GETFL                        = 0x3
	F_GETLK                        = 0xb
	F_GETOWN                       = 0x5
	F_OGETLK                       = 0x7
	F_OK                           = 0x0
	F_OSETLK                       = 0x8
	F_OSETLKW                      = 0x9
	F_RDAHEAD                      = 0x10
	F_RDLCK                        = 0x1
	F_READAHEAD                    = 0xf
	F_SETFD                        = 0x2
	F_SETFL                        = 0x4
	F_SETLK                        = 0xc
	F_SETLKW                       = 0xd
	F_SETLK_REMOTE                 = 0xe
	F_SETOWN                       = 0x6
	F_UNLCK                        = 0x2
	F_UNLCKSYS                     = 0x4
	F_WRLCK                        = 0x3
	HUPCL                          = 0x4000
	HW_MACHINE                     = 0x1
	ICANON                         = 0x100
	ICMP6_FILTER                   = 0x12
	ICRNL                          = 0x100
	IEXTEN                         = 0x400
	IFAN_ARRIVAL                   = 0x0
	IFAN_DEPARTURE                 = 0x1
	IFCAP_WOL_MAGIC                = 0x2000
	IFF_ALLMULTI                   = 0x200
	IFF_ALTPHYS                    = 0x4000
	IFF_BROADCAST                  = 0x2
	IFF_CANTCHANGE                 = 0x218f52
	IFF_CANTCONFIG                 = 0x10000
	IFF_DEBUG                      = 0x4
	IFF_DRV_OACTIVE                = 0x400
	IFF_DRV_RUNNING                = 0x40
	IFF_DYING                      = 0x200000
	IFF_LINK0                      = 0x1000
	IFF_LINK1                      = 0x2000
	IFF_LINK2                      = 0x4000
	IFF_LOOPBACK                   = 0x8
	IFF_MONITOR                    = 0x40000
	IFF_MULTICAST                  = 0x8000
	IFF_NOARP                      = 0x80
	IFF_NOGROUP                    = 0x800000
	IFF_OACTIVE                    = 0x400
	IFF_POINTOPOINT                = 0x10
	IFF_PPROMISC                   = 0x20000
	IFF_PROMISC                    = 0x100
	IFF_RENAMING                   = 0x400000
	IFF_RUNNING                    = 0x40
	IFF_SIMPLEX                    = 0x800
	IFF_STATICARP                  = 0x80000
	IFF_UP                         = 0x1
	IFNAMSIZ                       = 0x10
	IFT_BRIDGE                     = 0xd1
	IFT_CARP                       = 0xf8
	IFT_IEEE1394                   = 0x90
	IFT_INFINIBAND                 = 0xc7
	IFT_L2VLAN                     = 0x87
	IFT_L3IPVLAN                   = 0x88
	IFT_PPP                        = 0x17
	IFT_PROPVIRTUAL                = 0x35
	IGNBRK                         = 0x1
	IGNCR                          = 0x80
	IGNPAR                         = 0x4
	IMAXBEL                        = 0x2000
	INLCR                          = 0x40
	INPCK                          = 0x10
	IN_CLASSA_HOST                 = 0xffffff
	IN_CLASSA_MAX                  = 0x80
	IN_CLASSA_NET                  = 0xff000000
	IN_CLASSA_NSHIFT               = 0x18
	IN_CLASSB_HOST                 = 0xffff
	IN_CLASSB_MAX                  = 0x10000
	IN_CLASSB_NET                  = 0xffff0000
	IN_CLASSB_NSHIFT               = 0x10
	IN_CLASSC_HOST                 = 0xff
	IN_CLASSC_NET                  = 0xffffff00
	IN_CLASSC_NSHIFT               = 0x8
	IN_CLASSD_HOST                 = 0xfffffff
	IN_CLASSD_NET                  = 0xf0000000
	IN_CLASSD_NSHIFT               = 0x1c
	IN_LOOPBACKNET                 = 0x7f
	IN_RFC3021_MASK                = 0xfffffffe
	IPPROTO_3PC                    = 0x22
	IPPROTO_ADFS                   = 0x44
	IPPROTO_AH                     = 0x33
	IPPROTO_AHIP                   = 0x3d
	IPPROTO_APES                   = 0x63
	IPPROTO_ARGUS                  = 0xd
	IPPROTO_AX25                   = 0x5d
	IPPROTO_BHA                    = 0x31
	IPPROTO_BLT                    = 0x1e
	IPPROTO_BRSATMON               = 0x4c
	IPPROTO_CARP                   = 0x70
	IPPROTO_CFTP                   = 0x3e
	IPPROTO_CHAOS                  = 0x10
	IPPROTO_CMTP                   = 0x26
	IPPROTO_CPHB                   = 0x49
	IPPROTO_CPNX                   = 0x48
	IPPROTO_DCCP                   = 0x21
	IPPROTO_DDP                    = 0x25
	IPPROTO_DGP                    = 0x56
	IPPROTO_DIVERT                 = 0x102
	IPPROTO_DONE                   = 0x101
	IPPROTO_DSTOPTS                = 0x3c
	IPPROTO_EGP                    = 0x8
	IPPROTO_EMCON                  = 0xe
	IPPROTO_ENCAP                  = 0x62
	IPPROTO_EON                    = 0x50
	IPPROTO_ESP                    = 0x32
	IPPROTO_ETHERIP                = 0x61
	IPPROTO_FRAGMENT               = 0x2c
	IPPROTO_GGP                    = 0x3
	IPPROTO_GMTP                   = 0x64
	IPPROTO_GRE                    = 0x2f
	IPPROTO_HELLO                  = 0x3f
	IPPROTO_HIP                    = 0x8b
	IPPROTO_HMP                    = 0x14
	IPPROTO_HOPOPTS                = 0x0
	IPPROTO_ICMP                   = 0x1
	IPPROTO_ICMPV6                 = 0x3a
	IPPROTO_IDP                    = 0x16
	IPPROTO_IDPR                   = 0x23
	IPPROTO_IDRP                   = 0x2d
	IPPROTO_IGMP                   = 0x2
	IPPROTO_IGP                    = 0x55
	IPPROTO_IGRP                   = 0x58
	IPPROTO_IL                     = 0x28
	IPPROTO_INLSP                  = 0x34
	IPPROTO_INP                    = 0x20
	IPPROTO_IP                     = 0x0
	IPPROTO_IPCOMP                 = 0x6c
	IPPROTO_IPCV                   = 0x47
	IPPROTO_IPEIP                  = 0x5e
	IPPROTO_IPIP                   = 0x4
	IPPROTO_IPPC                   = 0x43
	IPPROTO_IPV4                   = 0x4
	IPPROTO_IPV6                   = 0x29
	IPPROTO_IRTP                   = 0x1c
	IPPROTO_KRYPTOLAN              = 0x41
	IPPROTO_LARP                   = 0x5b
	IPPROTO_LEAF1                  = 0x19
	IPPROTO_LEAF2                  = 0x1a
	IPPROTO_MAX                    = 0x100
	IPPROTO_MEAS                   = 0x13
	IPPROTO_MH                     = 0x87
	IPPROTO_MHRP                   = 0x30
	IPPROTO_MICP                   = 0x5f
	IPPROTO_MOBILE                 = 0x37
	IPPROTO_MPLS                   = 0x89
	IPPROTO_MTP                    = 0x5c
	IPPROTO_MUX                    = 0x12
	IPPROTO_ND                     = 0x4d
	IPPROTO_NHRP                   = 0x36
	IPPROTO_NONE                   = 0x3b
	IPPROTO_NSP                    = 0x1f
	IPPROTO_NVPII                  = 0xb
	IPPROTO_OLD_DIVERT             = 0xfe
	IPPROTO_OSPFIGP                = 0x59
	IPPROTO_PFSYNC                 = 0xf0
	IPPROTO_PGM                    = 0x71
	IPPROTO_PIGP                   = 0x9
	IPPROTO_PIM                    = 0x67
	IPPROTO_PRM                    = 0x15
	IPPROTO_PUP                    = 0xc
	IPPROTO_PVP                    = 0x4b
	IPPROTO_RAW                    = 0xff
	IPPROTO_RCCMON                 = 0xa
	IPPROTO_RDP                    = 0x1b
	IPPROTO_RESERVED_253           = 0xfd
	IPPROTO_RESERVED_254           = 0xfe
	IPPROTO_ROUTING                = 0x2b
	IPPROTO_RSVP                   = 0x2e
	IPPROTO_RVD                    = 0x42
	IPPROTO_SATEXPAK               = 0x40
	IPPROTO_SATMON                 = 0x45
	IPPROTO_SCCSP                  = 0x60
	IPPROTO_SCTP                   = 0x84
	IPPROTO_SDRP                   = 0x2a
	IPPROTO_SEND                   = 0x103
	IPPROTO_SHIM6                  = 0x8c
	IPPROTO_SKIP                   = 0x39
	IPPROTO_SPACER                 = 0x7fff
	IPPROTO_SRPC                   = 0x5a
	IPPROTO_ST                     = 0x7
	IPPROTO_SVMTP                  = 0x52
	IPPROTO_SWIPE                  = 0x35
	IPPROTO_TCF                    = 0x57
	IPPROTO_TCP                    = 0x6
	IPPROTO_TLSP                   = 0x38
	IPPROTO_TP                     = 0x1d
	IPPROTO_TPXX                   = 0x27
	IPPROTO_TRUNK1                 = 0x17
	IPPROTO_TRUNK2                 = 0x18
	IPPROTO_TTP                    = 0x54
	IPPROTO_UDP                    = 0x11
	IPPROTO_UDPLITE                = 0x88
	IPPROTO_VINES                  = 0x53
	IPPROTO_VISA                   = 0x46
	IPPROTO_VMTP                   = 0x51
	IPPROTO_WBEXPAK                = 0x4f
	IPPROTO_WBMON                  = 0x4e
	IPPROTO_WSN                    = 0x4a
	IPPROTO_XNET                   = 0xf
	IPPROTO_XTP                    = 0x24
	IPV6_AUTOFLOWLABEL             = 0x3b
	IPV6_BINDANY                   = 0x40
	IPV6_BINDMULTI                 = 0x41
	IPV6_BINDV6ONLY                = 0x1b
	IPV6_CHECKSUM                  = 0x1a
	IPV6_DEFAULT_MULTICAST_HOPS    = 0x1
	IPV6_DEFAULT_MULTICAST_LOOP    = 0x1
	IPV6_DEFHLIM                   = 0x40
	IPV6_DONTFRAG                  = 0x3e
	IPV6_DSTOPTS                   = 0x32
	IPV6_FLOWID                    = 0x43
	IPV6_FLOWINFO_MASK             = 0xffffff0f
	IPV6_FLOWLABEL_LEN             = 0x14
	IPV6_FLOWLABEL_MASK            = 0xffff0f00
	IPV6_FLOWTYPE                  = 0x44
	IPV6_FRAGTTL                   = 0x78
	IPV6_FW_ADD                    = 0x1e
	IPV6_FW_DEL                    = 0x1f
	IPV6_FW_FLUSH                  = 0x20
	IPV6_FW_GET                    = 0x22
	IPV6_FW_ZERO                   = 0x21
	IPV6_HLIMDEC                   = 0x1
	IPV6_HOPLIMIT                  = 0x2f
	IPV6_HOPOPTS                   = 0x31
	IPV6_IPSEC_POLICY              = 0x1c
	IPV6_JOIN_GROUP                = 0xc
	IPV6_LEAVE_GROUP               = 0xd
	IPV6_MAXHLIM                   = 0xff
	IPV6_MAXOPTHDR                 = 0x800
	IPV6_MAXPACKET                 = 0xffff
	IPV6_MAX_GROUP_SRC_FILTER      = 0x200
	IPV6_MAX_MEMBERSHIPS           = 0xfff
	IPV6_MAX_SOCK_SRC_FILTER       = 0x80
	IPV6_MMTU                      = 0x500
	IPV6_MSFILTER                  = 0x4a
	IPV6_MULTICAST_HOPS            = 0xa
	IPV6_MULTICAST_IF              = 0x9
	IPV6_MULTICAST_LOOP            = 0xb
	IPV6_NEXTHOP                   = 0x30
	IPV6_ORIGDSTADDR               = 0x48
	IPV6_PATHMTU                   = 0x2c
	IPV6_PKTINFO                   = 0x2e
	IPV6_PORTRANGE                 = 0xe
	IPV6_PORTRANGE_DEFAULT         = 0x0
	IPV6_PORTRANGE_HIGH            = 0x1
	IPV6_PORTRANGE_LOW             = 0x2
	IPV6_PREFER_TEMPADDR           = 0x3f
	IPV6_RECVDSTOPTS               = 0x28
	IPV6_RECVFLOWID                = 0x46
	IPV6_RECVHOPLIMIT              = 0x25
	IPV6_RECVHOPOPTS               = 0x27
	IPV6_RECVORIGDSTADDR           = 0x48
	IPV6_RECVPATHMTU               = 0x2b
	IPV6_RECVPKTINFO               = 0x24
	IPV6_RECVRSSBUCKETID           = 0x47
	IPV6_RECVRTHDR                 = 0x26
	IPV6_RECVTCLASS                = 0x39
	IPV6_RSSBUCKETID               = 0x45
	IPV6_RSS_LISTEN_BUCKET         = 0x42
	IPV6_RTHDR                     = 0x33
	IPV6_RTHDRDSTOPTS              = 0x23
	IPV6_RTHDR_LOOSE               = 0x0
	IPV6_RTHDR_STRICT              = 0x1
	IPV6_RTHDR_TYPE_0              = 0x0
	IPV6_SOCKOPT_RESERVED1         = 0x3
	IPV6_TCLASS                    = 0x3d
	IPV6_UNICAST_HOPS              = 0x4
	IPV6_USE_MIN_MTU               = 0x2a
	IPV6_V6ONLY                    = 0x1b
	IPV6_VERSION                   = 0x60
	IPV6_VERSION_MASK              = 0xf0
	IPV6_VLAN_PCP                  = 0x4b
	IP_ADD_MEMBERSHIP              = 0xc
	IP_ADD_SOURCE_MEMBERSHIP       = 0x46
	IP_BINDANY                     = 0x18
	IP_BINDMULTI                   = 0x19
	IP_BLOCK_SOURCE                = 0x48
	IP_DEFAULT_MULTICAST_LOOP      = 0x1
	IP_DEFAULT_MULTICAST_TTL       = 0x1
	IP_DF                          = 0x4000
	IP_DONTFRAG                    = 0x43
	IP_DROP_MEMBERSHIP             = 0xd
	IP_DROP_SOURCE_MEMBERSHIP      = 0x47
	IP_DUMMYNET3                   = 0x31
	IP_DUMMYNET_CONFIGURE          = 0x3c
	IP_DUMMYNET_DEL                = 0x3d
	IP_DUMMYNET_FLUSH              = 0x3e
	IP_DUMMYNET_GET                = 0x40
	IP_FLOWID                      = 0x5a
	IP_FLOWTYPE                    = 0x5b
	IP_FW3                         = 0x30
	IP_FW_ADD                      = 0x32
	IP_FW_DEL                      = 0x33
	IP_FW_FLUSH                    = 0x34
	IP_FW_GET                      = 0x36
	IP_FW_NAT_CFG                  = 0x38
	IP_FW_NAT_DEL                  = 0x39
	IP_FW_NAT_GET_CONFIG           = 0x3a
	IP_FW_NAT_GET_LOG              = 0x3b
	IP_FW_RESETLOG                 = 0x37
	IP_FW_TABLE_ADD                = 0x28
	IP_FW_TABLE_DEL                = 0x29
	IP_FW_TABLE_FLUSH              = 0x2a
	IP_FW_TABLE_GETSIZE            = 0x2b
	IP_FW_TABLE_LIST               = 0x2c
	IP_FW_ZERO                     = 0x35
	IP_HDRINCL                     = 0x2
	IP_IPSEC_POLICY                = 0x15
	IP_MAXPACKET                   = 0xffff
	IP_MAX_GROUP_SRC_FILTER        = 0x200
	IP_MAX_MEMBERSHIPS             = 0xfff
	IP_MAX_SOCK_MUTE_FILTER        = 0x80
	IP_MAX_SOCK_SRC_FILTER         = 0x80
	IP_MF                          = 0x2000
	IP_MINTTL                      = 0x42
	IP_MSFILTER                    = 0x4a
	IP_MSS                         = 0x240
	IP_MULTICAST_IF                = 0x9
	IP_MULTICAST_LOOP              = 0xb
	IP_MULTICAST_TTL               = 0xa
	IP_MULTICAST_VIF               = 0xe
	IP_OFFMASK                     = 0x1fff
	IP_ONESBCAST                   = 0x17
	IP_OPTIONS                     = 0x1
	IP_ORIGDSTADDR                 = 0x1b
	IP_PORTRANGE                   = 0x13
	IP_PORTRANGE_DEFAULT           = 0x0
	IP_PORTRANGE_HIGH              = 0x1
	IP_PORTRANGE_LOW               = 0x2
	IP_RECVDSTADDR                 = 0x7
	IP_RECVFLOWID                  = 0x5d
	IP_RECVIF                      = 0x14
	IP_RECVOPTS                    = 0x5
	IP_RECVORIGDSTADDR             = 0x1b
	IP_RECVRETOPTS                 = 0x6
	IP_RECVRSSBUCKETID             = 0x5e
	IP_RECVTOS                     = 0x44
	IP_RECVTTL                     = 0x41
	IP_RETOPTS                     = 0x8
	IP_RF                          = 0x8000
	IP_RSSBUCKETID                 = 0x5c
	IP_RSS_LISTEN_BUCKET           = 0x1a
	IP_RSVP_OFF                    = 0x10
	IP_RSVP_ON                     = 0xf
	IP_RSVP_VIF_OFF                = 0x12
	IP_RSVP_VIF_ON                 = 0x11
	IP_SENDSRCADDR                 = 0x7
	IP_TOS                         = 0x3
	IP_TTL                         = 0x4
	IP_UNBLOCK_SOURCE              = 0x49
	IP_VLAN_PCP                    = 0x4b
	ISIG                           = 0x80
	ISTRIP                         = 0x20
	ITIMER_PROF                    = 0x2
	ITIMER_REAL                    = 0x0
	ITIMER_VIRTUAL                 = 0x1
	IXANY                          = 0x800
	IXOFF                          = 0x400
	IXON                           = 0x200
	KERN_HOSTNAME                  = 0xa
	KERN_OSRELEASE                 = 0x2
	KERN_OSTYPE                    = 0x1
	KERN_VERSION                   = 0x4
	LOCAL_CONNWAIT                 = 0x4
	LOCAL_CREDS                    = 0x2
	LOCAL_PEERCRED                 = 0x1
	LOCAL_VENDOR                   = 0x80000000
	LOCK_EX                        = 0x2
	LOCK_NB                        = 0x4
	LOCK_SH                        = 0x1
	LOCK_UN                        = 0x8
	MADV_AUTOSYNC                  = 0x7
	MADV_CORE                      = 0x9
	MADV_DONTNEED                  = 0x4
	MADV_FREE                      = 0x5
	MADV_NOCORE                    = 0x8
	MADV_NORMAL                    = 0x0
	MADV_NOSYNC                    = 0x6
	MADV_PROTECT                   = 0xa
	MADV_RANDOM                    = 0x1
	MADV_SEQUENTIAL                = 0x2
	MADV_WILLNEED                  = 0x3
	MAP_ALIGNED_SUPER              = 0x1000000
	MAP_ALIGNMENT_MASK             = -0x1000000
	MAP_ALIGNMENT_SHIFT            = 0x18
	MAP_ANON                       = 0x1000
	MAP_ANONYMOUS                  = 0x1000
	MAP_COPY                       = 0x2
	MAP_EXCL                       = 0x4000
	MAP_FILE                       = 0x0
	MAP_FIXED                      = 0x10
	MAP_GUARD                      = 0x2000
	MAP_HASSEMAPHORE               = 0x200
	MAP_NOCORE                     = 0x20000
	MAP_NOSYNC                     = 0x800
	MAP_PREFAULT_READ              = 0x40000
	MAP_PRIVATE                    = 0x2
	MAP_RESERVED0020               = 0x20
	MAP_RESERVED0040               = 0x40
	MAP_RESERVED0080               = 0x80
	MAP_RESERVED0100               = 0x100
	MAP_SHARED                     = 0x1
	MAP_STACK                      = 0x400
	MCAST_BLOCK_SOURCE             = 0x54
	MCAST_EXCLUDE                  = 0x2
	MCAST_INCLUDE                  = 0x1
	MCAST_JOIN_GROUP               = 0x50
	MCAST_JOIN_SOURCE_GROUP        = 0x52
	MCAST_LEAVE_GROUP              = 0x51
	MCAST_LEAVE_SOURCE_GROUP       = 0x53
	MCAST_UNBLOCK_SOURCE           = 0x55
	MCAST_UNDEFINED                = 0x0
	MCL_CURRENT                    = 0x1
	MCL_FUTURE                     = 0x2
	MNT_ACLS                       = 0x8000000
	MNT_ASYNC                      = 0x40
	MNT_AUTOMOUNTED                = 0x200000000
	MNT_BYFSID                     = 0x8000000
	MNT_CMDFLAGS                   = 0xd0f0000
	MNT_DEFEXPORTED                = 0x200
	MNT_DELEXPORT                  = 0x20000
	MNT_EXKERB                     = 0x800
	MNT_EXPORTANON                 = 0x400
	MNT_EXPORTED                   = 0x100
	MNT_EXPUBLIC                   = 0x20000000
	MNT_EXRDONLY                   = 0x80
	MNT_FORCE                      = 0x80000
	MNT_GJOURNAL                   = 0x2000000
	MNT_IGNORE                     = 0x800000
	MNT_LAZY                       = 0x3
	MNT_LOCAL                      = 0x1000
	MNT_MULTILABEL                 = 0x4000000
	MNT_NFS4ACLS                   = 0x10
	MNT_NOATIME                    = 0x10000000
	MNT_NOCLUSTERR                 = 0x40000000
	MNT_NOCLUSTERW                 = 0x80000000
	MNT_NOEXEC                     = 0x4
	MNT_NONBUSY                    = 0x4000000
	MNT_NOSUID                     = 0x8
	MNT_NOSYMFOLLOW                = 0x400000
	MNT_NOWAIT                     = 0x2
	MNT_QUOTA                      = 0x2000
	MNT_RDONLY                     = 0x1
	MNT_RELOAD                     = 0x40000
	MNT_ROOTFS                     = 0x4000
	MNT_SNAPSHOT                   = 0x1000000
	MNT_SOFTDEP                    = 0x200000
	MNT_SUIDDIR                    = 0x100000
	MNT_SUJ                        = 0x100000000
	MNT_SUSPEND                    = 0x4
	MNT_SYNCHRONOUS                = 0x2
	MNT_UNION                      = 0x20
	MNT_UNTRUSTED                  = 0x800000000
	MNT_UPDATE                     = 0x10000
	MNT_UPDATEMASK                 = 0xad8d0807e
	MNT_USER                       = 0x8000
	MNT_VERIFIED                   = 0x400000000
	MNT_VISFLAGMASK                = 0xffef0ffff
	MNT_WAIT                       = 0x1
	MSG_CMSG_CLOEXEC               = 0x40000
	MSG_COMPAT                     = 0x8000
	MSG_CTRUNC                     = 0x20
	MSG_DONTROUTE                  = 0x4
	MSG_DONTWAIT                   = 0x80
	MSG_EOF                        = 0x100
	MSG_EOR                        = 0x8
	MSG_NBIO                       = 0x4000
	MSG_NOSIGNAL                   = 0x20000
	MSG_NOTIFICATION               = 0x2000
	MSG_OOB                        = 0x1
	MSG_PEEK                       = 0x2
	MSG_TRUNC                      = 0x10
	MSG_WAITALL                    = 0x40
	MSG_WAITFORONE                 = 0x80000
	MS_ASYNC                       = 0x1
	MS_INVALIDATE                  = 0x2
	MS_SYNC                        = 0x0
	NAME_MAX                       = 0xff
	NET_RT_DUMP                    = 0x1
	NET_RT_FLAGS                   = 0x2
	NET_RT_IFLIST                  = 0x3
	NET_RT_IFLISTL                 = 0x5
	NET_RT_IFMALIST                = 0x4
	NFDBITS                        = 0x20
	NOFLSH                         = 0x80000000
	NOKERNINFO                     = 0x2000000
	NOTE_ABSTIME                   = 0x10
	NOTE_ATTRIB                    = 0x8
	NOTE_CHILD                     = 0x4
	NOTE_CLOSE                     = 0x100
	NOTE_CLOSE_WRITE               = 0x200
	NOTE_DELETE                    = 0x1
	NOTE_EXEC                      = 0x20000000
	NOTE_EXIT                      = 0x80000000
	NOTE_EXTEND                    = 0x4
	NOTE_FFAND                     = 0x40000000
	NOTE_FFCOPY                    = 0xc0000000
	NOTE_FFCTRLMASK                = 0xc0000000
	NOTE_FFLAGSMASK                = 0xffffff
	NOTE_FFNOP                     = 0x0
	NOTE_FFOR                      = 0x80000000
	NOTE_FILE_POLL                 = 0x2
	NOTE_FORK                      = 0x40000000
	NOTE_LINK                      = 0x10
	NOTE_LOWAT                     = 0x1
	NOTE_MSECONDS                  = 0x2
	NOTE_NSECONDS                  = 0x8
	NOTE_OPEN                      = 0x80
	NOTE_PCTRLMASK                 = 0xf0000000
	NOTE_PDATAMASK                 = 0xfffff
	NOTE_READ                      = 0x400
	NOTE_RENAME                    = 0x20
	NOTE_REVOKE                    = 0x40
	NOTE_SECONDS                   = 0x1
	NOTE_TRACK                     = 0x1
	NOTE_TRACKERR                  = 0x2
	NOTE_TRIGGER                   = 0x1000000
	NOTE_USECONDS                  = 0x4
	NOTE_WRITE                     = 0x2
	OCRNL                          = 0x10
	ONLCR                          = 0x2
	ONLRET                         = 0x40
	ONOCR                          = 0x20
	ONOEOT                         = 0x8
	OPOST                          = 0x1
	OXTABS                         = 0x4
	O_ACCMODE                      = 0x3
	O_APPEND                       = 0x8
	O_ASYNC                        = 0x40
	O_CLOEXEC                      = 0x100000
	O_CREAT                        = 0x200
	O_DIRECT                       = 0x10000
	O_DIRECTORY                    = 0x20000
	O_EXCL                         = 0x800
	O_EXEC                         = 0x40000
	O_EXLOCK                       = 0x20
	O_FSYNC                        = 0x80
	O_NDELAY                       = 0x4
	O_NOCTTY                       = 0x8000
	O_NOFOLLOW                     = 0x100
	O_NONBLOCK                     = 0x4
	O_RDONLY                       = 0x0
	O_RDWR                         = 0x2
	O_RESOLVE_BENEATH              = 0x800000
	O_SEARCH                       = 0x40000
	O_SHLOCK                       = 0x10
	O_SYNC                         = 0x80
	O_TRUNC                        = 0x400
	O_TTY_INIT                     = 0x80000
	O_VERIFY                       = 0x200000
	O_WRONLY                       = 0x1
	PARENB                         = 0x1000
	PARMRK                         = 0x8
	PARODD                         = 0x2000
	PENDIN                         = 0x20000000
	PIOD_READ_D                    = 0x1
	PIOD_READ_I                    = 0x3
	PIOD_WRITE_D                   = 0x2
	PIOD_WRITE_I                   = 0x4
	PRIO_PGRP                      = 0x1
	PRIO_PROCESS                   = 0x0
	PRIO_USER                      = 0x2
	PROT_EXEC                      = 0x4
	PROT_NONE                      = 0x0
	PROT_READ                      = 0x1
	PROT_WRITE                     = 0x2
	PTRACE_DEFAULT                 = 0x1
	PTRACE_EXEC                    = 0x1
	PTRACE_FORK                    = 0x8
	PTRACE_LWP                     = 0x10
	PTRACE_SCE                     = 0x2
	PTRACE_SCX                     = 0x4
	PTRACE_SYSCALL                 = 0x6
	PTRACE_VFORK                   = 0x20
	PT_ATTACH                      = 0xa
	PT_CLEARSTEP                   = 0x10
	PT_CONTINUE                    = 0x7
	PT_DETACH                      = 0xb
	PT_FIRSTMACH                   = 0x40
	PT_FOLLOW_FORK                 = 0x17
	PT_GETDBREGS                   = 0x25
	PT_GETFPREGS                   = 0x23
	PT_GETFSBASE                   = 0x47
	PT_GETGSBASE                   = 0x49
	PT_GETLWPLIST                  = 0xf
	PT_GETNUMLWPS                  = 0xe
	PT_GETREGS                     = 0x21
	PT_GETXMMREGS                  = 0x40
	PT_GETXSTATE                   = 0x45
	PT_GETXSTATE_INFO              = 0x44
	PT_GET_EVENT_MASK              = 0x19
	PT_GET_SC_ARGS                 = 0x1b
	PT_GET_SC_RET                  = 0x1c
	PT_IO                          = 0xc
	PT_KILL                        = 0x8
	PT_LWPINFO                     = 0xd
	PT_LWP_EVENTS                  = 0x18
	PT_READ_D                      = 0x2
	PT_READ_I                      = 0x1
	PT_RESUME                      = 0x13
	PT_SETDBREGS                   = 0x26
	PT_SETFPREGS                   = 0x24
	PT_SETFSBASE                   = 0x48
	PT_SETGSBASE                   = 0x4a
	PT_SETREGS                     = 0x22
	PT_SETSTEP                     = 0x11
	PT_SETXMMREGS                  = 0x41
	PT_SETXSTATE                   = 0x46
	PT_SET_EVENT_MASK              = 0x1a
	PT_STEP                        = 0x9
	PT_SUSPEND                     = 0x12
	PT_SYSCALL                     = 0x16
	PT_TO_SCE                      = 0x14
	PT_TO_SCX                      = 0x15
	PT_TRACE_ME                    = 0x0
	PT_VM_ENTRY                    = 0x29
	PT_VM_TIMESTAMP                = 0x28
	PT_WRITE_D                     = 0x5
	PT_WRITE_I                     = 0x4
	P_ZONEID                       = 0xc
	RLIMIT_AS                      = 0xa
	RLIMIT_CORE                    = 0x4
	RLIMIT_CPU                     = 0x0
	RLIMIT_DATA                    = 0x2
	RLIMIT_FSIZE                   = 0x1
	RLIMIT_MEMLOCK                 = 0x6
	RLIMIT_NOFILE                  = 0x8
	RLIMIT_NPROC                   = 0x7
	RLIMIT_RSS                     = 0x5
	RLIMIT_STACK                   = 0x3
	RLIM_INFINITY                  = 0x7fffffffffffffff
	RTAX_AUTHOR                    = 0x6
	RTAX_BRD                       = 0x7
	RTAX_DST                       = 0x0
	RTAX_GATEWAY                   = 0x1
	RTAX_GENMASK                   = 0x3
	RTAX_IFA                       = 0x5
	RTAX_IFP                       = 0x4
	RTAX_MAX                       = 0x8
	RTAX_NETMASK                   = 0x2
	RTA_AUTHOR                     = 0x40
	RTA_BRD                        = 0x80
	RTA_DST                        = 0x1
	RTA_GATEWAY                    = 0x2
	RTA_GENMASK                    = 0x8
	RTA_IFA                        = 0x20
	RTA_IFP                        = 0x10
	RTA_NETMASK                    = 0x4
	RTF_BLACKHOLE                  = 0x1000
	RTF_BROADCAST                  = 0x400000
	RTF_DONE                       = 0x40
	RTF_DYNAMIC                    = 0x10
	RTF_FIXEDMTU                   = 0x80000
	RTF_FMASK                      = 0x1004d808
	RTF_GATEWAY                    = 0x2
	RTF_GWFLAG_COMPAT              = 0x80000000
	RTF_HOST                       = 0x4
	RTF_LLDATA                     = 0x400
	RTF_LLINFO                     = 0x400
	RTF_LOCAL                      = 0x200000
	RTF_MODIFIED                   = 0x20
	RTF_MULTICAST                  = 0x800000
	RTF_PINNED                     = 0x100000
	RTF_PROTO1                     = 0x8000
	RTF_PROTO2                     = 0x4000
	RTF_PROTO3                     = 0x40000
	RTF_REJECT                     = 0x8
	RTF_RNH_LOCKED                 = 0x40000000
	RTF_STATIC                     = 0x800
	RTF_STICKY                     = 0x10000000
	RTF_UP                         = 0x1
	RTF_XRESOLVE                   = 0x200
	RTM_ADD                        = 0x1
	RTM_CHANGE                     = 0x3
	RTM_DELADDR                    = 0xd
	RTM_DELETE                     = 0x2
	RTM_DELMADDR                   = 0x10
	RTM_GET                        = 0x4
	RTM_IEEE80211                  = 0x12
	RTM_IFANNOUNCE                 = 0x11
	RTM_IFINFO                     = 0xe
	RTM_LOCK                       = 0x8
	RTM_LOSING                     = 0x5
	RTM_MISS                       = 0x7
	RTM_NEWADDR                    = 0xc
	RTM_NEWMADDR                   = 0xf
	RTM_REDIRECT                   = 0x6
	RTM_RESOLVE                    = 0xb
	RTM_RTTUNIT                    = 0xf4240
	RTM_VERSION                    = 0x5
	RTV_EXPIRE                     = 0x4
	RTV_HOPCOUNT                   = 0x2
	RTV_MTU                        = 0x1
	RTV_RPIPE                      = 0x8
	RTV_RTT                        = 0x40
	RTV_RTTVAR                     = 0x80
	RTV_SPIPE                      = 0x10
	RTV_SSTHRESH                   = 0x20
	RTV_WEIGHT                     = 0x100
	RT_ALL_FIBS                    = -0x1
	RT_BLACKHOLE                   = 0x40
	RT_DEFAULT_FIB                 = 0x0
	RT_HAS_GW                      = 0x80
	RT_HAS_HEADER                  = 0x10
	RT_HAS_HEADER_BIT              = 0x4
	RT_L2_ME                       = 0x4
	RT_L2_ME_BIT                   = 0x2
	RT_LLE_CACHE                   = 0x100
	RT_MAY_LOOP                    = 0x8
	RT_MAY_LOOP_BIT                = 0x3
	RT_REJECT                      = 0x20
	RUSAGE_CHILDREN                = -0x1
	RUSAGE_SELF                    = 0x0
	RUSAGE_THREAD                  = 0x1
	SCM_BINTIME                    = 0x4
	SCM_CREDS                      = 0x3
	SCM_MONOTONIC                  = 0x6
	SCM_REALTIME                   = 0x5
	SCM_RIGHTS                     = 0x1
	SCM_TIMESTAMP                  = 0x2
	SCM_TIME_INFO                  = 0x7
	SEEK_CUR                       = 0x1
	SEEK_DATA                      = 0x3
	SEEK_END                       = 0x2
	SEEK_HOLE                      = 0x4
	SEEK_SET                       = 0x0
	SHUT_RD                        = 0x0
	SHUT_RDWR                      = 0x2
	SHUT_WR                        = 0x1
	SIOCADDMULTI                   = 0x80206931
	SIOCAIFADDR                    = 0x8040691a
	SIOCAIFGROUP                   = 0x80246987
	SIOCATMARK                     = 0x40047307
	SIOCDELMULTI                   = 0x80206932
	SIOCDIFADDR                    = 0x80206919
	SIOCDIFGROUP                   = 0x80246989
	SIOCDIFPHYADDR                 = 0x80206949
	SIOCGDRVSPEC                   = 0xc01c697b
	SIOCGETSGCNT                   = 0xc0147210
	SIOCGETVIFCNT                  = 0xc014720f
	SIOCGHIWAT                     = 0x40047301
	SIOCGHWADDR                    = 0xc020693e
	SIOCGI2C                       = 0xc020693d
	SIOCGIFADDR                    = 0xc0206921
	SIOCGIFALIAS                   = 0xc044692d
	SIOCGIFBRDADDR                 = 0xc0206923
	SIOCGIFCAP                     = 0xc020691f
	SIOCGIFCONF                    = 0xc0086924
	SIOCGIFDESCR                   = 0xc020692a
	SIOCGIFDOWNREASON              = 0xc058699a
	SIOCGIFDSTADDR                 = 0xc0206922
	SIOCGIFFIB                     = 0xc020695c
	SIOCGIFFLAGS                   = 0xc0206911
	SIOCGIFGENERIC                 = 0xc020693a
	SIOCGIFGMEMB                   = 0xc024698a
	SIOCGIFGROUP                   = 0xc0246988
	SIOCGIFINDEX                   = 0xc0206920
	SIOCGIFMAC                     = 0xc0206926
	SIOCGIFMEDIA                   = 0xc0286938
	SIOCGIFMETRIC                  = 0xc0206917
	SIOCGIFMTU                     = 0xc0206933
	SIOCGIFNETMASK                 = 0xc0206925
	SIOCGIFPDSTADDR                = 0xc0206948
	SIOCGIFPHYS                    = 0xc0206935
	SIOCGIFPSRCADDR                = 0xc0206947
	SIOCGIFRSSHASH                 = 0xc0186997
	SIOCGIFRSSKEY                  = 0xc0946996
	SIOCGIFSTATUS                  = 0xc331693b
	SIOCGIFXMEDIA                  = 0xc028698b
	SIOCGLANPCP                    = 0xc0206998
	SIOCGLOWAT                     = 0x40047303
	SIOCGPGRP                      = 0x40047309
	SIOCGPRIVATE_0                 = 0xc0206950
	SIOCGPRIVATE_1                 = 0xc0206951
	SIOCGTUNFIB                    = 0xc020695e
	SIOCIFCREATE                   = 0xc020697a
	SIOCIFCREATE2                  = 0xc020697c
	SIOCIFDESTROY                  = 0x80206979
	SIOCIFGCLONERS                 = 0xc00c6978
	SIOCSDRVSPEC                   = 0x801c697b
	SIOCSHIWAT                     = 0x80047300
	SIOCSIFADDR                    = 0x8020690c
	SIOCSIFBRDADDR                 = 0x80206913
	SIOCSIFCAP                     = 0x8020691e
	SIOCSIFDESCR                   = 0x80206929
	SIOCSIFDSTADDR                 = 0x8020690e
	SIOCSIFFIB                     = 0x8020695d
	SIOCSIFFLAGS                   = 0x80206910
	SIOCSIFGENERIC                 = 0x80206939
	SIOCSIFLLADDR                  = 0x8020693c
	SIOCSIFMAC                     = 0x80206927
	SIOCSIFMEDIA                   = 0xc0206937
	SIOCSIFMETRIC                  = 0x80206918
	SIOCSIFMTU                     = 0x80206934
	SIOCSIFNAME                    = 0x80206928
	SIOCSIFNETMASK                 = 0x80206916
	SIOCSIFPHYADDR                 = 0x80406946
	SIOCSIFPHYS                    = 0x80206936
	SIOCSIFRVNET                   = 0xc020695b
	SIOCSIFVNET                    = 0xc020695a
	SIOCSLANPCP                    = 0x80206999
	SIOCSLOWAT                     = 0x80047302
	SIOCSPGRP                      = 0x80047308
	SIOCSTUNFIB                    = 0x8020695f
	SOCK_CLOEXEC                   = 0x10000000
	SOCK_DGRAM                     = 0x2
	SOCK_MAXADDRLEN                = 0xff
	SOCK_NONBLOCK                  = 0x20000000
	SOCK_RAW                       = 0x3
	SOCK_RDM                       = 0x4
	SOCK_SEQPACKET                 = 0x5
	SOCK_STREAM                    = 0x1
	SOL_LOCAL                      = 0x0
	SOL_SOCKET                     = 0xffff
	SOMAXCONN                      = 0x80
	SO_ACCEPTCONN                  = 0x2
	SO_ACCEPTFILTER                = 0x1000
	SO_BINTIME                     = 0x2000
	SO_BROADCAST                   = 0x20
	SO_DEBUG                       = 0x1
	SO_DOMAIN                      = 0x1019
	SO_DONTROUTE                   = 0x10
	SO_ERROR                       = 0x1007
	SO_KEEPALIVE                   = 0x8
	SO_LABEL                       = 0x1009
	SO_LINGER                      = 0x80
	SO_LISTENINCQLEN               = 0x1013
	SO_LISTENQLEN                  = 0x1012
	SO_LISTENQLIMIT                = 0x1011
	SO_MAX_PACING_RATE             = 0x1018
	SO_NOSIGPIPE                   = 0x800
	SO_NO_DDP                      = 0x8000
	SO_NO_OFFLOAD                  = 0x4000
	SO_OOBINLINE                   = 0x100
	SO_PEERLABEL                   = 0x1010
	SO_PROTOCOL                    = 0x1016
	SO_PROTOTYPE                   = 0x1016
	SO_RCVBUF                      = 0x1002
	SO_RCVLOWAT                    = 0x1004
	SO_RCVTIMEO                    = 0x1006
	SO_RERROR                      = 0x20000
	SO_REUSEADDR                   = 0x4
	SO_REUSEPORT                   = 0x200
	SO_REUSEPORT_LB                = 0x10000
	SO_SETFIB                      = 0x1014
	SO_SNDBUF                      = 0x1001
	SO_SNDLOWAT                    = 0x1003
	SO_SNDTIMEO                    = 0x1005
	SO_TIMESTAMP                   = 0x400
	SO_TS_BINTIME                  = 0x1
	SO_TS_CLOCK                    = 0x1017
	SO_TS_CLOCK_MAX                = 0x3
	SO_TS_DEFAULT                  = 0x0
	SO_TS_MONOTONIC                = 0x3
	SO_TS_REALTIME                 = 0x2
	SO_TS_REALTIME_MICRO           = 0x0
	SO_TYPE                        = 0x1008
	SO_USELOOPBACK                 = 0x40
	SO_USER_COOKIE                 = 0x1015
	SO_VENDOR                      = 0x80000000
	S_BLKSIZE                      = 0x200
	S_IEXEC                        = 0x40
	S_IFBLK                        = 0x6000
	S_IFCHR                        = 0x2000
	S_IFDIR                        = 0x4000
	S_IFIFO                        = 0x1000
	S_IFLNK                        = 0xa000
	S_IFMT                         = 0xf000
	S_IFREG                        = 0x8000
	S_IFSOCK                       = 0xc000
	S_IFWHT                        = 0xe000
	S_IREAD                        = 0x100
	S_IRGRP                        = 0x20
	S_IROTH                        = 0x4
	S_IRUSR                        = 0x100
	S_IRWXG                        = 0x38
	S_IRWXO                        = 0x7
	S_IRWXU                        = 0x1c0
	S_ISGID                        = 0x400
	S_ISTXT                        = 0x200
	S_ISUID                        = 0x800
	S_ISVTX                        = 0x200
	S_IWGRP                        = 0x10
	S_IWOTH                        = 0x2
	S_IWRITE                       = 0x80
	S_IWUSR                        = 0x80
	S_IXGRP                        = 0x8
	S_IXOTH                        = 0x1
	S_IXUSR                        = 0x40
	TAB0                           = 0x0
	TAB3                           = 0x4
	TABDLY                         = 0x4
	TCIFLUSH                       = 0x1
	TCIOFF                         = 0x3
	TCIOFLUSH                      = 0x3
	TCION                          = 0x4
	TCOFLUSH                       = 0x2
	TCOOFF                         = 0x1
	TCOON                          = 0x2
	TCPOPT_EOL                     = 0x0
	TCPOPT_FAST_OPEN               = 0x22
	TCPOPT_MAXSEG                  = 0x2
	TCPOPT_NOP                     = 0x1
	TCPOPT_PAD                     = 0x0
	TCPOPT_SACK                    = 0x5
	TCPOPT_SACK_PERMITTED          = 0x4
	TCPOPT_SIGNATURE               = 0x13
	TCPOPT_TIMESTAMP               = 0x8
	TCPOPT_WINDOW                  = 0x3
	TCP_BBR_ACK_COMP_ALG           = 0x448
	TCP_BBR_ALGORITHM              = 0x43b
	TCP_BBR_DRAIN_INC_EXTRA        = 0x43c
	TCP_BBR_DRAIN_PG               = 0x42e
	TCP_BBR_EXTRA_GAIN             = 0x449
	TCP_BBR_EXTRA_STATE            = 0x453
	TCP_BBR_FLOOR_MIN_TSO          = 0x454
	TCP_BBR_HDWR_PACE              = 0x451
	TCP_BBR_HOLD_TARGET            = 0x436
	TCP_BBR_IWINTSO                = 0x42b
	TCP_BBR_LOWGAIN_FD             = 0x436
	TCP_BBR_LOWGAIN_HALF           = 0x435
	TCP_BBR_LOWGAIN_THRESH         = 0x434
	TCP_BBR_MAX_RTO                = 0x439
	TCP_BBR_MIN_RTO                = 0x438
	TCP_BBR_MIN_TOPACEOUT          = 0x455
	TCP_BBR_ONE_RETRAN             = 0x431
	TCP_BBR_PACE_CROSS             = 0x442
	TCP_BBR_PACE_DEL_TAR           = 0x43f
	TCP_BBR_PACE_OH                = 0x435
	TCP_BBR_PACE_PER_SEC           = 0x43e
	TCP_BBR_PACE_SEG_MAX           = 0x440
	TCP_BBR_PACE_SEG_MIN           = 0x441
	TCP_BBR_POLICER_DETECT         = 0x457
	TCP_BBR_PROBE_RTT_GAIN         = 0x44d
	TCP_BBR_PROBE_RTT_INT          = 0x430
	TCP_BBR_PROBE_RTT_LEN          = 0x44e
	TCP_BBR_RACK_RTT_USE           = 0x44a
	TCP_BBR_RECFORCE               = 0x42c
	TCP_BBR_REC_OVER_HPTS          = 0x43a
	TCP_BBR_RETRAN_WTSO            = 0x44b
	TCP_BBR_RWND_IS_APP            = 0x42f
	TCP_BBR_SEND_IWND_IN_TSO       = 0x44f
	TCP_BBR_STARTUP_EXIT_EPOCH     = 0x43d
	TCP_BBR_STARTUP_LOSS_EXIT      = 0x432
	TCP_BBR_STARTUP_PG             = 0x42d
	TCP_BBR_TMR_PACE_OH            = 0x448
	TCP_BBR_TSLIMITS               = 0x434
	TCP_BBR_TSTMP_RAISES           = 0x456
	TCP_BBR_UNLIMITED              = 0x43b
	TCP_BBR_USEDEL_RATE            = 0x437
	TCP_BBR_USE_LOWGAIN            = 0x433
	TCP_BBR_USE_RACK_CHEAT         = 0x450
	TCP_BBR_UTTER_MAX_TSO          = 0x452
	TCP_CA_NAME_MAX                = 0x10
	TCP_CCALGOOPT                  = 0x41
	TCP_CONGESTION                 = 0x40
	TCP_DATA_AFTER_CLOSE           = 0x44c
	TCP_DELACK                     = 0x48
	TCP_FASTOPEN                   = 0x401
	TCP_FASTOPEN_MAX_COOKIE_LEN    = 0x10
	TCP_FASTOPEN_MIN_COOKIE_LEN    = 0x4
	TCP_FASTOPEN_PSK_LEN           = 0x10
	TCP_FUNCTION_BLK               = 0x2000
	TCP_FUNCTION_NAME_LEN_MAX      = 0x20
	TCP_INFO                       = 0x20
	TCP_KEEPCNT                    = 0x400
	TCP_KEEPIDLE                   = 0x100
	TCP_KEEPINIT                   = 0x80
	TCP_KEEPINTVL                  = 0x200
	TCP_LOG                        = 0x22
	TCP_LOGBUF                     = 0x23
	TCP_LOGDUMP                    = 0x25
	TCP_LOGDUMPID                  = 0x26
	TCP_LOGID                      = 0x24
	TCP_LOG_ID_LEN                 = 0x40
	TCP_MAXBURST                   = 0x4
	TCP_MAXHLEN                    = 0x3c
	TCP_MAXOLEN                    = 0x28
	TCP_MAXSEG                     = 0x2
	TCP_MAXWIN                     = 0xffff
	TCP_MAX_SACK                   = 0x4
	TCP_MAX_WINSHIFT               = 0xe
	TCP_MD5SIG                     = 0x10
	TCP_MINMSS                     = 0xd8
	TCP_MSS                        = 0x218
	TCP_NODELAY                    = 0x1
	TCP_NOOPT                      = 0x8
	TCP_NOPUSH                     = 0x4
	TCP_PCAP_IN                    = 0x1000
	TCP_PCAP_OUT                   = 0x800
	TCP_RACK_EARLY_RECOV           = 0x423
	TCP_RACK_EARLY_SEG             = 0x424
	TCP_RACK_GP_INCREASE           = 0x446
	TCP_RACK_IDLE_REDUCE_HIGH      = 0x444
	TCP_RACK_MIN_PACE              = 0x445
	TCP_RACK_MIN_PACE_SEG          = 0x446
	TCP_RACK_MIN_TO                = 0x422
	TCP_RACK_PACE_ALWAYS           = 0x41f
	TCP_RACK_PACE_MAX_SEG          = 0x41e
	TCP_RACK_PACE_REDUCE           = 0x41d
	TCP_RACK_PKT_DELAY             = 0x428
	TCP_RACK_PROP                  = 0x41b
	TCP_RACK_PROP_RATE             = 0x420
	TCP_RACK_PRR_SENDALOT          = 0x421
	TCP_RACK_REORD_FADE            = 0x426
	TCP_RACK_REORD_THRESH          = 0x425
	TCP_RACK_TLP_INC_VAR           = 0x429
	TCP_RACK_TLP_REDUCE            = 0x41c
	TCP_RACK_TLP_THRESH            = 0x427
	TCP_RACK_TLP_USE               = 0x447
	TCP_VENDOR                     = 0x80000000
	TCSAFLUSH                      = 0x2
	TIMER_ABSTIME                  = 0x1
	TIMER_RELTIME                  = 0x0
	TIOCCBRK                       = 0x2000747a
	TIOCCDTR                       = 0x20007478
	TIOCCONS                       = 0x80047462
	TIOCDRAIN                      = 0x2000745e
	TIOCEXCL                       = 0x2000740d
	TIOCEXT                        = 0x80047460
	TIOCFLUSH                      = 0x80047410
	TIOCGDRAINWAIT                 = 0x40047456
	TIOCGETA                       = 0x402c7413
	TIOCGETD                       = 0x4004741a
	TIOCGPGRP                      = 0x40047477
	TIOCGPTN                       = 0x4004740f
	TIOCGSID                       = 0x40047463
	TIOCGWINSZ                     = 0x40087468
	TIOCMBIC                       = 0x8004746b
	TIOCMBIS                       = 0x8004746c
	TIOCMGDTRWAIT                  = 0x4004745a
	TIOCMGET                       = 0x4004746a
	TIOCMSDTRWAIT                  = 0x8004745b
	TIOCMSET                       = 0x8004746d
	TIOCM_CAR                      = 0x40
	TIOCM_CD                       = 0x40
	TIOCM_CTS                      = 0x20
	TIOCM_DCD                      = 0x40
	TIOCM_DSR                      = 0x100
	TIOCM_DTR                      = 0x2
	TIOCM_LE                       = 0x1
	TIOCM_RI                       = 0x80
	TIOCM_RNG                      = 0x80
	TIOCM_RTS                      = 0x4
	TIOCM_SR                       = 0x10
	TIOCM_ST                       = 0x8
	TIOCNOTTY                      = 0x20007471
	TIOCNXCL                       = 0x2000740e
	TIOCOUTQ                       = 0x40047473
	TIOCPKT                        = 0x80047470
	TIOCPKT_DATA                   = 0x0
	TIOCPKT_DOSTOP                 = 0x20
	TIOCPKT_FLUSHREAD              = 0x1
	TIOCPKT_FLUSHWRITE             = 0x2
	TIOCPKT_IOCTL                  = 0x40
	TIOCPKT_NOSTOP                 = 0x10
	TIOCPKT_START                  = 0x8
	TIOCPKT_STOP                   = 0x4
	TIOCPTMASTER                   = 0x2000741c
	TIOCSBRK                       = 0x2000747b
	TIOCSCTTY                      = 0x20007461
	TIOCSDRAINWAIT                 = 0x80047457
	TIOCSDTR                       = 0x20007479
	TIOCSETA                       = 0x802c7414
	TIOCSETAF                      = 0x802c7416
	TIOCSETAW                      = 0x802c7415
	TIOCSETD                       = 0x8004741b
	TIOCSIG                        = 0x2004745f
	TIOCSPGRP                      = 0x80047476
	TIOCSTART                      = 0x2000746e
	TIOCSTAT                       = 0x20007465
	TIOCSTI                        = 0x80017472
	TIOCSTOP                       = 0x2000746f
	TIOCSWINSZ                     = 0x80087467
	TIOCTIMESTAMP                  = 0x40087459
	TIOCUCNTL                      = 0x80047466
	TOSTOP                         = 0x400000
	UTIME_NOW                      = -0x1
	UTIME_OMIT                     = -0x2
	VDISCARD                       = 0xf
	VDSUSP                         = 0xb
	VEOF                           = 0x0
	VEOL                           = 0x1
	VEOL2                          = 0x2
	VERASE                         = 0x3
	VERASE2                        = 0x7
	VINTR                          = 0x8
	VKILL                          = 0x5
	VLNEXT                         = 0xe
	VMIN                           = 0x10
	VM_BCACHE_SIZE_MAX             = 0x70e0000
	VM_SWZONE_SIZE_MAX             = 0x2280000
	VQUIT                          = 0x9
	VREPRINT                       = 0x6
	VSTART                         = 0xc
	VSTATUS                        = 0x12
	VSTOP                          = 0xd
	VSUSP                          = 0xa
	VTIME                          = 0x11
	VWERASE                        = 0x4
	WCONTINUED                     = 0x4
	WCOREFLAG                      = 0x80
	WEXITED                        = 0x10
	WLINUXCLONE                    = 0x80000000
	WNOHANG                        = 0x1
	WNOWAIT                        = 0x8
	WSTOPPED                       = 0x2
	WTRAPPED                       = 0x20
	WUNTRACED                      = 0x2
)

// Errors
const (
	E2BIG           = syscall.Errno(0x7)
	EACCES          = syscall.Errno(0xd)
	EADDRINUSE      = syscall.Errno(0x30)
	EADDRNOTAVAIL   = syscall.Errno(0x31)
	EAFNOSUPPORT    = syscall.Errno(0x2f)
	EAGAIN          = syscall.Errno(0x23)
	EALREADY        = syscall.Errno(0x25)
	EAUTH           = syscall.Errno(0x50)
	EBADF           = syscall.Errno(0x9)
	EBADMSG         = syscall.Errno(0x59)
	EBADRPC         = syscall.Errno(0x48)
	EBUSY           = syscall.Errno(0x10)
	ECANCELED       = syscall.Errno(0x55)
	ECAPMODE        = syscall.Errno(0x5e)
	ECHILD          = syscall.Errno(0xa)
	ECONNABORTED    = syscall.Errno(0x35)
	ECONNREFUSED    = syscall.Errno(0x3d)
	ECONNRESET      = syscall.Errno(0x36)
	EDEADLK         = syscall.Errno(0xb)
	EDESTADDRREQ    = syscall.Errno(0x27)
	EDOM            = syscall.Errno(0x21)
	EDOOFUS         = syscall.Errno(0x58)
	EDQUOT          = syscall.Errno(0x45)
	EEXIST          = syscall.Errno(0x11)
	EFAULT          = syscall.Errno(0xe)
	EFBIG           = syscall.Errno(0x1b)
	EFTYPE          = syscall.Errno(0x4f)
	EHOSTDOWN       = syscall.Errno(0x40)
	EHOSTUNREACH    = syscall.Errno(0x41)
	EIDRM           = syscall.Errno(0x52)
	EILSEQ          = syscall.Errno(0x56)
	EINPROGRESS     = syscall.Errno(0x24)
	EINTEGRITY      = syscall.Errno(0x61)
	EINTR           = syscall.Errno(0x4)
	EINVAL          = syscall.Errno(0x16)
	EIO             = syscall.Errno(0x5)
	EISCONN         = syscall.Errno(0x38)
	EISDIR          = syscall.Errno(0x15)
	ELAST           = syscall.Errno(0x61)
	ELOOP           = syscall.Errno(0x3e)
	EMFILE          = syscall.Errno(0x18)
	EMLINK          = syscall.Errno(0x1f)
	EMSGSIZE        = syscall.Errno(0x28)
	EMULTIHOP       = syscall.Errno(0x5a)
	ENAMETOOLONG    = syscall.Errno(0x3f)
	ENEEDAUTH       = syscall.Errno(0x51)
	ENETDOWN        = syscall.Errno(0x32)
	ENETRESET       = syscall.Errno(0x34)
	ENETUNREACH     = syscall.Errno(0x33)
	ENFILE          = syscall.Errno(0x17)
	ENOATTR         = syscall.Errno(0x57)
	ENOBUFS         = syscall.Errno(0x37)
	ENODEV          = syscall.Errno(0x13)
	ENOENT          = syscall.Errno(0x2)
	ENOEXEC         = syscall.Errno(0x8)
	ENOLCK          = syscall.Errno(0x4d)
	ENOLINK         = syscall.Errno(0x5b)
	ENOMEM          = syscall.Errno(0xc)
	ENOMSG          = syscall.Errno(0x53)
	ENOPROTOOPT     = syscall.Errno(0x2a)
	ENOSPC          = syscall.Errno(0x1c)
	ENOSYS          = syscall.Errno(0x4e)
	ENOTBLK         = syscall.Errno(0xf)
	ENOTCAPABLE     = syscall.Errno(0x5d)
	ENOTCONN        = syscall.Errno(0x39)
	ENOTDIR         = syscall.Errno(0x14)
	ENOTEMPTY       = syscall.Errno(0x42)
	ENOTRECOVERABLE = syscall.Errno(0x5f)
	ENOTSOCK        = syscall.Errno(0x26)
	ENOTSUP         = syscall.Errno(0x2d)
	ENOTTY          = syscall.Errno(0x19)
	ENXIO           = syscall.Errno(0x6)
	EOPNOTSUPP      = syscall.Errno(0x2d)
	EOVERFLOW       = syscall.Errno(0x54)
	EOWNERDEAD      = syscall.Errno(0x60)
	EPERM           = syscall.Errno(0x1)
	EPFNOSUPPORT    = syscall.Errno(0x2e)
	EPIPE           = syscall.Errno(0x20)
	EPROCLIM        = syscall.Errno(0x43)
	EPROCUNAVAIL    = syscall.Errno(0x4c)
	EPROGMISMATCH   = syscall.Errno(0x4b)
	EPROGUNAVAIL    = syscall.Errno(0x4a)
	EPROTO          = syscall.Errno(0x5c)
	EPROTONOSUPPORT = syscall.Errno(0x2b)
	EPROTOTYPE      = syscall.Errno(0x29)
	ERANGE          = syscall.Errno(0x22)
	EREMOTE         = syscall.Errno(0x47)
	EROFS           = syscall.Errno(0x1e)
	ERPCMISMATCH    = syscall.Errno(0x49)
	ESHUTDOWN       = syscall.Errno(0x3a)
	ESOCKTNOSUPPORT = syscall.Errno(0x2c)
	ESPIPE          = syscall.Errno(0x1d)
	ESRCH           = syscall.Errno(0x3)
	ESTALE          = syscall.Errno(0x46)
	ETIMEDOUT       = syscall.Errno(0x3c)
	ETOOMANYREFS    = syscall.Errno(0x3b)
	ETXTBSY         = syscall.Errno(0x1a)
	EUSERS          = syscall.Errno(0x44)
	EWOULDBLOCK     = syscall.Errno(0x23)
	EXDEV           = syscall.Errno(0x12)
)

// Signals
const (
	SIGABRT   = syscall.Signal(0x6)
	SIGALRM   = syscall.Signal(0xe)
	SIGBUS    = syscall.Signal(0xa)
	SIGCHLD   = syscall.Signal(0x14)
	SIGCONT   = syscall.Signal(0x13)
	SIGEMT    = syscall.Signal(0x7)
	SIGFPE    = syscall.Signal(0x8)
	SIGHUP    = syscall.Signal(0x1)
	SIGILL    = syscall.Signal(0x4)
	SIGINFO   = syscall.Signal(0x1d)
	SIGINT    = syscall.Signal(0x2)
	SIGIO     = syscall.Signal(0x17)
	SIGIOT    = syscall.Signal(0x6)
	SIGKILL   = syscall.Signal(0x9)
	SIGLIBRT  = syscall.Signal(0x21)
	SIGLWP    = syscall.Signal(0x20)
	SIGPIPE   = syscall.Signal(0xd)
	SIGPROF   = syscall.Signal(0x1b)
	SIGQUIT   = syscall.Signal(0x3)
	SIGSEGV   = syscall.Signal(0xb)
	SIGSTOP   = syscall.Signal(0x11)
	SIGSYS    = syscall.Signal(0xc)
	SIGTERM   = syscall.Signal(0xf)
	SIGTHR    = syscall.Signal(0x20)
	SIGTRAP   = syscall.Signal(0x5)
	SIGTSTP   = syscall.Signal(0x12)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x10)
	SIGUSR1   = syscall.Signal(0x1e)
	SIGUSR2   = syscall.Signal(0x1f)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "device not configured"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EDEADLK", "resource deadlock avoided"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "cross-device link"},
	{19, "ENODEV", "operation not supported by device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "result too large"},
	{35, "EWOULDBLOCK", "resource temporarily unavailable"},
	{36, "EINPROGRESS", "operation now in progress"},
	{37, "EALREADY", "operation already in progress"},
	{38, "ENOTSOCK", "socket operation on non-socket"},
	{39, "EDESTADDRREQ", "destination address required"},
	{40, "EMSGSIZE", "message too long"},
	{41, "EPROTOTYPE", "protocol wrong type for socket"},
	{42, "ENOPROTOOPT", "protocol not available"},
	{43, "EPROTONOSUPPORT", "protocol not supported"},
	{44, "ESOCKTNOSUPPORT", "socket type not supported"},
	{45, "EOPNOTSUPP", "operation not supported"},
	{46, "EPFNOSUPPORT", "protocol family not supported"},
	{47, "EAFNOSUPPORT", "address family not supported by protocol family"},
	{48, "EADDRINUSE", "address already in use"},
	{49, "EADDRNOTAVAIL", "can't assign requested address"},
	{50, "ENETDOWN", "network is down"},
	{51, "ENETUNREACH", "network is unreachable"},
	{52, "ENETRESET", "network dropped connection on reset"},
	{53, "ECONNABORTED", "software caused connection abort"},
	{54, "ECONNRESET", "connection reset by peer"},
	{55, "ENOBUFS", "no buffer space available"},
	{56, "EISCONN", "socket is already connected"},
	{57, "ENOTCONN", "socket is not connected"},
	{58, "ESHUTDOWN", "can't send after socket shutdown"},
	{59, "ETOOMANYREFS", "too many references: can't splice"},
	{60, "ETIMEDOUT", "operation timed out"},
	{61, "ECONNREFUSED", "connection refused"},
	{62, "ELOOP", "too many levels of symbolic links"},
	{63, "ENAMETOOLONG", "file name too long"},
	{64, "EHOSTDOWN", "host is down"},
	{65, "EHOSTUNREACH", "no route to host"},
	{66, "ENOTEMPTY", "directory not empty"},
	{67, "EPROCLIM", "too many processes"},
	{68, "EUSERS", "too many users"},
	{69, "EDQUOT", "disc quota exceeded"},
	{70, "ESTALE", "stale NFS file handle"},
	{71, "EREMOTE", "too many levels of remote in path"},
	{72, "EBADRPC", "RPC struct is bad"},
	{73, "ERPCMISMATCH", "RPC version wrong"},
	{74, "EPROGUNAVAIL", "RPC prog. not avail"},
	{75, "EPROGMISMATCH", "program version wrong"},
	{76, "EPROCUNAVAIL", "bad procedure for program"},
	{77, "ENOLCK", "no locks available"},
	{78, "ENOSYS", "function not implemented"},
	{79, "EFTYPE", "inappropriate file type or format"},
	{80, "EAUTH", "authentication error"},
	{81, "ENEEDAUTH", "need authenticator"},
	{82, "EIDRM", "identifier removed"},
	{83, "ENOMSG", "no message of desired type"},
	{84, "EOVERFLOW", "value too large to be stored in data type"},
	{85, "ECANCELED", "operation canceled"},
	{86, "EILSEQ", "illegal byte sequence"},
	{87, "ENOATTR", "attribute not found"},
	{88, "EDOOFUS", "programming error"},
	{89, "EBADMSG", "bad message"},
	{90, "EMULTIHOP", "multihop attempted"},
	{91, "ENOLINK", "link has been severed"},
	{92, "EPROTO", "protocol error"},
	{93, "ENOTCAPABLE", "capabilities insufficient"},
	{94, "ECAPMODE", "not permitted in capability mode"},
	{95, "ENOTRECOVERABLE", "state not recoverable"},
	{96, "EOWNERDEAD", "previous owner died"},
	{97, "EINTEGRITY", "integrity check failed"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/BPT trap"},
	{6, "SIGIOT", "abort trap"},
	{7, "SIGEMT", "EMT trap"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus error"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGSYS", "bad system call"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGURG", "urgent I/O condition"},
	{17, "SIGSTOP", "suspended (signal)"},
	{18, "SIGTSTP", "suspended"},
	{19, "SIGCONT", "continued"},
	{20, "SIGCHLD", "child exited"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGIO", "I/O possible"},
	{24, "SIGXCPU", "cputime limit exceeded"},
	{25, "SIGXFSZ", "filesize limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window size changes"},
	{29, "SIGINFO", "information request"},
	{30, "SIGUSR1", "user defined signal 1"},
	{31, "SIGUSR2", "user defined signal 2"},
	{32, "SIGTHR", "unknown signal"},
	{33, "SIGLIBRT", "unknown signal"},
}
 07070100000E26000081A4000000000000000000000001645E367C00013DDB000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go // mkerrors.sh -m64
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build amd64 && freebsd
// +build amd64,freebsd

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -m64 _const.go

package unix

import "syscall"

const (
	AF_APPLETALK                   = 0x10
	AF_ARP                         = 0x23
	AF_ATM                         = 0x1e
	AF_BLUETOOTH                   = 0x24
	AF_CCITT                       = 0xa
	AF_CHAOS                       = 0x5
	AF_CNT                         = 0x15
	AF_COIP                        = 0x14
	AF_DATAKIT                     = 0x9
	AF_DECnet                      = 0xc
	AF_DLI                         = 0xd
	AF_E164                        = 0x1a
	AF_ECMA                        = 0x8
	AF_HYLINK                      = 0xf
	AF_IEEE80211                   = 0x25
	AF_IMPLINK                     = 0x3
	AF_INET                        = 0x2
	AF_INET6                       = 0x1c
	AF_INET6_SDP                   = 0x2a
	AF_INET_SDP                    = 0x28
	AF_IPX                         = 0x17
	AF_ISDN                        = 0x1a
	AF_ISO                         = 0x7
	AF_LAT                         = 0xe
	AF_LINK                        = 0x12
	AF_LOCAL                       = 0x1
	AF_MAX                         = 0x2a
	AF_NATM                        = 0x1d
	AF_NETBIOS                     = 0x6
	AF_NETGRAPH                    = 0x20
	AF_OSI                         = 0x7
	AF_PUP                         = 0x4
	AF_ROUTE                       = 0x11
	AF_SCLUSTER                    = 0x22
	AF_SIP                         = 0x18
	AF_SLOW                        = 0x21
	AF_SNA                         = 0xb
	AF_UNIX                        = 0x1
	AF_UNSPEC                      = 0x0
	AF_VENDOR00                    = 0x27
	AF_VENDOR01                    = 0x29
	AF_VENDOR02                    = 0x2b
	AF_VENDOR03                    = 0x2d
	AF_VENDOR04                    = 0x2f
	AF_VENDOR05                    = 0x31
	AF_VENDOR06                    = 0x33
	AF_VENDOR07                    = 0x35
	AF_VENDOR08                    = 0x37
	AF_VENDOR09                    = 0x39
	AF_VENDOR10                    = 0x3b
	AF_VENDOR11                    = 0x3d
	AF_VENDOR12                    = 0x3f
	AF_VENDOR13                    = 0x41
	AF_VENDOR14                    = 0x43
	AF_VENDOR15                    = 0x45
	AF_VENDOR16                    = 0x47
	AF_VENDOR17                    = 0x49
	AF_VENDOR18                    = 0x4b
	AF_VENDOR19                    = 0x4d
	AF_VENDOR20                    = 0x4f
	AF_VENDOR21                    = 0x51
	AF_VENDOR22                    = 0x53
	AF_VENDOR23                    = 0x55
	AF_VENDOR24                    = 0x57
	AF_VENDOR25                    = 0x59
	AF_VENDOR26                    = 0x5b
	AF_VENDOR27                    = 0x5d
	AF_VENDOR28                    = 0x5f
	AF_VENDOR29                    = 0x61
	AF_VENDOR30                    = 0x63
	AF_VENDOR31                    = 0x65
	AF_VENDOR32                    = 0x67
	AF_VENDOR33                    = 0x69
	AF_VENDOR34                    = 0x6b
	AF_VENDOR35                    = 0x6d
	AF_VENDOR36                    = 0x6f
	AF_VENDOR37                    = 0x71
	AF_VENDOR38                    = 0x73
	AF_VENDOR39                    = 0x75
	AF_VENDOR40                    = 0x77
	AF_VENDOR41                    = 0x79
	AF_VENDOR42                    = 0x7b
	AF_VENDOR43                    = 0x7d
	AF_VENDOR44                    = 0x7f
	AF_VENDOR45                    = 0x81
	AF_VENDOR46                    = 0x83
	AF_VENDOR47                    = 0x85
	ALTWERASE                      = 0x200
	B0                             = 0x0
	B110                           = 0x6e
	B115200                        = 0x1c200
	B1200                          = 0x4b0
	B134                           = 0x86
	B14400                         = 0x3840
	B150                           = 0x96
	B1800                          = 0x708
	B19200                         = 0x4b00
	B200                           = 0xc8
	B230400                        = 0x38400
	B2400                          = 0x960
	B28800                         = 0x7080
	B300                           = 0x12c
	B38400                         = 0x9600
	B460800                        = 0x70800
	B4800                          = 0x12c0
	B50                            = 0x32
	B57600                         = 0xe100
	B600                           = 0x258
	B7200                          = 0x1c20
	B75                            = 0x4b
	B76800                         = 0x12c00
	B921600                        = 0xe1000
	B9600                          = 0x2580
	BIOCFEEDBACK                   = 0x8004427c
	BIOCFLUSH                      = 0x20004268
	BIOCGBLEN                      = 0x40044266
	BIOCGDIRECTION                 = 0x40044276
	BIOCGDLT                       = 0x4004426a
	BIOCGDLTLIST                   = 0xc0104279
	BIOCGETBUFMODE                 = 0x4004427d
	BIOCGETIF                      = 0x4020426b
	BIOCGETZMAX                    = 0x4008427f
	BIOCGHDRCMPLT                  = 0x40044274
	BIOCGRSIG                      = 0x40044272
	BIOCGRTIMEOUT                  = 0x4010426e
	BIOCGSEESENT                   = 0x40044276
	BIOCGSTATS                     = 0x4008426f
	BIOCGTSTAMP                    = 0x40044283
	BIOCIMMEDIATE                  = 0x80044270
	BIOCLOCK                       = 0x2000427a
	BIOCPROMISC                    = 0x20004269
	BIOCROTZBUF                    = 0x40184280
	BIOCSBLEN                      = 0xc0044266
	BIOCSDIRECTION                 = 0x80044277
	BIOCSDLT                       = 0x80044278
	BIOCSETBUFMODE                 = 0x8004427e
	BIOCSETF                       = 0x80104267
	BIOCSETFNR                     = 0x80104282
	BIOCSETIF                      = 0x8020426c
	BIOCSETVLANPCP                 = 0x80044285
	BIOCSETWF                      = 0x8010427b
	BIOCSETZBUF                    = 0x80184281
	BIOCSHDRCMPLT                  = 0x80044275
	BIOCSRSIG                      = 0x80044273
	BIOCSRTIMEOUT                  = 0x8010426d
	BIOCSSEESENT                   = 0x80044277
	BIOCSTSTAMP                    = 0x80044284
	BIOCVERSION                    = 0x40044271
	BPF_A                          = 0x10
	BPF_ABS                        = 0x20
	BPF_ADD                        = 0x0
	BPF_ALIGNMENT                  = 0x8
	BPF_ALU                        = 0x4
	BPF_AND                        = 0x50
	BPF_B                          = 0x10
	BPF_BUFMODE_BUFFER             = 0x1
	BPF_BUFMODE_ZBUF               = 0x2
	BPF_DIV                        = 0x30
	BPF_H                          = 0x8
	BPF_IMM                        = 0x0
	BPF_IND                        = 0x40
	BPF_JA                         = 0x0
	BPF_JEQ                        = 0x10
	BPF_JGE                        = 0x30
	BPF_JGT                        = 0x20
	BPF_JMP                        = 0x5
	BPF_JSET                       = 0x40
	BPF_K                          = 0x0
	BPF_LD                         = 0x0
	BPF_LDX                        = 0x1
	BPF_LEN                        = 0x80
	BPF_LSH                        = 0x60
	BPF_MAJOR_VERSION              = 0x1
	BPF_MAXBUFSIZE                 = 0x80000
	BPF_MAXINSNS                   = 0x200
	BPF_MEM                        = 0x60
	BPF_MEMWORDS                   = 0x10
	BPF_MINBUFSIZE                 = 0x20
	BPF_MINOR_VERSION              = 0x1
	BPF_MISC                       = 0x7
	BPF_MOD                        = 0x90
	BPF_MSH                        = 0xa0
	BPF_MUL                        = 0x20
	BPF_NEG                        = 0x80
	BPF_OR                         = 0x40
	BPF_RELEASE                    = 0x30bb6
	BPF_RET                        = 0x6
	BPF_RSH                        = 0x70
	BPF_ST                         = 0x2
	BPF_STX                        = 0x3
	BPF_SUB                        = 0x10
	BPF_TAX                        = 0x0
	BPF_TXA                        = 0x80
	BPF_T_BINTIME                  = 0x2
	BPF_T_BINTIME_FAST             = 0x102
	BPF_T_BINTIME_MONOTONIC        = 0x202
	BPF_T_BINTIME_MONOTONIC_FAST   = 0x302
	BPF_T_FAST                     = 0x100
	BPF_T_FLAG_MASK                = 0x300
	BPF_T_FORMAT_MASK              = 0x3
	BPF_T_MICROTIME                = 0x0
	BPF_T_MICROTIME_FAST           = 0x100
	BPF_T_MICROTIME_MONOTONIC      = 0x200
	BPF_T_MICROTIME_MONOTONIC_FAST = 0x300
	BPF_T_MONOTONIC                = 0x200
	BPF_T_MONOTONIC_FAST           = 0x300
	BPF_T_NANOTIME                 = 0x1
	BPF_T_NANOTIME_FAST            = 0x101
	BPF_T_NANOTIME_MONOTONIC       = 0x201
	BPF_T_NANOTIME_MONOTONIC_FAST  = 0x301
	BPF_T_NONE                     = 0x3
	BPF_T_NORMAL                   = 0x0
	BPF_W                          = 0x0
	BPF_X                          = 0x8
	BPF_XOR                        = 0xa0
	BRKINT                         = 0x2
	CAP_ACCEPT                     = 0x200000020000000
	CAP_ACL_CHECK                  = 0x400000000010000
	CAP_ACL_DELETE                 = 0x400000000020000
	CAP_ACL_GET                    = 0x400000000040000
	CAP_ACL_SET                    = 0x400000000080000
	CAP_ALL0                       = 0x20007ffffffffff
	CAP_ALL1                       = 0x4000000001fffff
	CAP_BIND                       = 0x200000040000000
	CAP_BINDAT                     = 0x200008000000400
	CAP_CHFLAGSAT                  = 0x200000000001400
	CAP_CONNECT                    = 0x200000080000000
	CAP_CONNECTAT                  = 0x200010000000400
	CAP_CREATE                     = 0x200000000000040
	CAP_EVENT                      = 0x400000000000020
	CAP_EXTATTR_DELETE             = 0x400000000001000
	CAP_EXTATTR_GET                = 0x400000000002000
	CAP_EXTATTR_LIST               = 0x400000000004000
	CAP_EXTATTR_SET                = 0x400000000008000
	CAP_FCHDIR                     = 0x200000000000800
	CAP_FCHFLAGS                   = 0x200000000001000
	CAP_FCHMOD                     = 0x200000000002000
	CAP_FCHMODAT                   = 0x200000000002400
	CAP_FCHOWN                     = 0x200000000004000
	CAP_FCHOWNAT                   = 0x200000000004400
	CAP_FCNTL                      = 0x200000000008000
	CAP_FCNTL_ALL                  = 0x78
	CAP_FCNTL_GETFL                = 0x8
	CAP_FCNTL_GETOWN               = 0x20
	CAP_FCNTL_SETFL                = 0x10
	CAP_FCNTL_SETOWN               = 0x40
	CAP_FEXECVE                    = 0x200000000000080
	CAP_FLOCK                      = 0x200000000010000
	CAP_FPATHCONF                  = 0x200000000020000
	CAP_FSCK                       = 0x200000000040000
	CAP_FSTAT                      = 0x200000000080000
	CAP_FSTATAT                    = 0x200000000080400
	CAP_FSTATFS                    = 0x200000000100000
	CAP_FSYNC                      = 0x200000000000100
	CAP_FTRUNCATE                  = 0x200000000000200
	CAP_FUTIMES                    = 0x200000000200000
	CAP_FUTIMESAT                  = 0x200000000200400
	CAP_GETPEERNAME                = 0x200000100000000
	CAP_GETSOCKNAME                = 0x200000200000000
	CAP_GETSOCKOPT                 = 0x200000400000000
	CAP_IOCTL                      = 0x400000000000080
	CAP_IOCTLS_ALL                 = 0x7fffffffffffffff
	CAP_KQUEUE                     = 0x400000000100040
	CAP_KQUEUE_CHANGE              = 0x400000000100000
	CAP_KQUEUE_EVENT               = 0x400000000000040
	CAP_LINKAT_SOURCE              = 0x200020000000400
	CAP_LINKAT_TARGET              = 0x200000000400400
	CAP_LISTEN                     = 0x200000800000000
	CAP_LOOKUP                     = 0x200000000000400
	CAP_MAC_GET                    = 0x400000000000001
	CAP_MAC_SET                    = 0x400000000000002
	CAP_MKDIRAT                    = 0x200000000800400
	CAP_MKFIFOAT                   = 0x200000001000400
	CAP_MKNODAT                    = 0x200000002000400
	CAP_MMAP                       = 0x200000000000010
	CAP_MMAP_R                     = 0x20000000000001d
	CAP_MMAP_RW                    = 0x20000000000001f
	CAP_MMAP_RWX                   = 0x20000000000003f
	CAP_MMAP_RX                    = 0x20000000000003d
	CAP_MMAP_W                     = 0x20000000000001e
	CAP_MMAP_WX                    = 0x20000000000003e
	CAP_MMAP_X                     = 0x20000000000003c
	CAP_PDGETPID                   = 0x400000000000200
	CAP_PDKILL                     = 0x400000000000800
	CAP_PDWAIT                     = 0x400000000000400
	CAP_PEELOFF                    = 0x200001000000000
	CAP_POLL_EVENT                 = 0x400000000000020
	CAP_PREAD                      = 0x20000000000000d
	CAP_PWRITE                     = 0x20000000000000e
	CAP_READ                       = 0x200000000000001
	CAP_RECV                       = 0x200000000000001
	CAP_RENAMEAT_SOURCE            = 0x200000004000400
	CAP_RENAMEAT_TARGET            = 0x200040000000400
	CAP_RIGHTS_VERSION             = 0x0
	CAP_RIGHTS_VERSION_00          = 0x0
	CAP_SEEK                       = 0x20000000000000c
	CAP_SEEK_TELL                  = 0x200000000000004
	CAP_SEM_GETVALUE               = 0x400000000000004
	CAP_SEM_POST                   = 0x400000000000008
	CAP_SEM_WAIT                   = 0x400000000000010
	CAP_SEND                       = 0x200000000000002
	CAP_SETSOCKOPT                 = 0x200002000000000
	CAP_SHUTDOWN                   = 0x200004000000000
	CAP_SOCK_CLIENT                = 0x200007780000003
	CAP_SOCK_SERVER                = 0x200007f60000003
	CAP_SYMLINKAT                  = 0x200000008000400
	CAP_TTYHOOK                    = 0x400000000000100
	CAP_UNLINKAT                   = 0x200000010000400
	CAP_UNUSED0_44                 = 0x200080000000000
	CAP_UNUSED0_57                 = 0x300000000000000
	CAP_UNUSED1_22                 = 0x400000000200000
	CAP_UNUSED1_57                 = 0x500000000000000
	CAP_WRITE                      = 0x200000000000002
	CFLUSH                         = 0xf
	CLOCAL                         = 0x8000
	CLOCK_MONOTONIC                = 0x4
	CLOCK_MONOTONIC_FAST           = 0xc
	CLOCK_MONOTONIC_PRECISE        = 0xb
	CLOCK_PROCESS_CPUTIME_ID       = 0xf
	CLOCK_PROF                     = 0x2
	CLOCK_REALTIME                 = 0x0
	CLOCK_REALTIME_FAST            = 0xa
	CLOCK_REALTIME_PRECISE         = 0x9
	CLOCK_SECOND                   = 0xd
	CLOCK_THREAD_CPUTIME_ID        = 0xe
	CLOCK_UPTIME                   = 0x5
	CLOCK_UPTIME_FAST              = 0x8
	CLOCK_UPTIME_PRECISE           = 0x7
	CLOCK_VIRTUAL                  = 0x1
	CPUSTATES                      = 0x5
	CP_IDLE                        = 0x4
	CP_INTR                        = 0x3
	CP_NICE                        = 0x1
	CP_SYS                         = 0x2
	CP_USER                        = 0x0
	CREAD                          = 0x800
	CRTSCTS                        = 0x30000
	CS5                            = 0x0
	CS6                            = 0x100
	CS7                            = 0x200
	CS8                            = 0x300
	CSIZE                          = 0x300
	CSTART                         = 0x11
	CSTATUS                        = 0x14
	CSTOP                          = 0x13
	CSTOPB                         = 0x400
	CSUSP                          = 0x1a
	CTL_HW                         = 0x6
	CTL_KERN                       = 0x1
	CTL_MAXNAME                    = 0x18
	CTL_NET                        = 0x4
	DIOCGATTR                      = 0xc148648e
	DIOCGDELETE                    = 0x80106488
	DIOCGFLUSH                     = 0x20006487
	DIOCGFRONTSTUFF                = 0x40086486
	DIOCGFWHEADS                   = 0x40046483
	DIOCGFWSECTORS                 = 0x40046482
	DIOCGIDENT                     = 0x41006489
	DIOCGMEDIASIZE                 = 0x40086481
	DIOCGPHYSPATH                  = 0x4400648d
	DIOCGPROVIDERNAME              = 0x4400648a
	DIOCGSECTORSIZE                = 0x40046480
	DIOCGSTRIPEOFFSET              = 0x4008648c
	DIOCGSTRIPESIZE                = 0x4008648b
	DIOCSKERNELDUMP                = 0x80506490
	DIOCSKERNELDUMP_FREEBSD11      = 0x80046485
	DIOCZONECMD                    = 0xc080648f
	DLT_A429                       = 0xb8
	DLT_A653_ICM                   = 0xb9
	DLT_AIRONET_HEADER             = 0x78
	DLT_AOS                        = 0xde
	DLT_APPLE_IP_OVER_IEEE1394     = 0x8a
	DLT_ARCNET                     = 0x7
	DLT_ARCNET_LINUX               = 0x81
	DLT_ATM_CLIP                   = 0x13
	DLT_ATM_RFC1483                = 0xb
	DLT_AURORA                     = 0x7e
	DLT_AX25                       = 0x3
	DLT_AX25_KISS                  = 0xca
	DLT_BACNET_MS_TP               = 0xa5
	DLT_BLUETOOTH_BREDR_BB         = 0xff
	DLT_BLUETOOTH_HCI_H4           = 0xbb
	DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9
	DLT_BLUETOOTH_LE_LL            = 0xfb
	DLT_BLUETOOTH_LE_LL_WITH_PHDR  = 0x100
	DLT_BLUETOOTH_LINUX_MONITOR    = 0xfe
	DLT_CAN20B                     = 0xbe
	DLT_CAN_SOCKETCAN              = 0xe3
	DLT_CHAOS                      = 0x5
	DLT_CHDLC                      = 0x68
	DLT_CISCO_IOS                  = 0x76
	DLT_CLASS_NETBSD_RAWAF         = 0x2240000
	DLT_C_HDLC                     = 0x68
	DLT_C_HDLC_WITH_DIR            = 0xcd
	DLT_DBUS                       = 0xe7
	DLT_DECT                       = 0xdd
	DLT_DISPLAYPORT_AUX            = 0x113
	DLT_DOCSIS                     = 0x8f
	DLT_DOCSIS31_XRA31             = 0x111
	DLT_DVB_CI                     = 0xeb
	DLT_ECONET                     = 0x73
	DLT_EN10MB                     = 0x1
	DLT_EN3MB                      = 0x2
	DLT_ENC                        = 0x6d
	DLT_EPON                       = 0x103
	DLT_ERF                        = 0xc5
	DLT_ERF_ETH                    = 0xaf
	DLT_ERF_POS                    = 0xb0
	DLT_ETHERNET_MPACKET           = 0x112
	DLT_FC_2                       = 0xe0
	DLT_FC_2_WITH_FRAME_DELIMS     = 0xe1
	DLT_FDDI                       = 0xa
	DLT_FLEXRAY                    = 0xd2
	DLT_FRELAY                     = 0x6b
	DLT_FRELAY_WITH_DIR            = 0xce
	DLT_GCOM_SERIAL                = 0xad
	DLT_GCOM_T1E1                  = 0xac
	DLT_GPF_F                      = 0xab
	DLT_GPF_T                      = 0xaa
	DLT_GPRS_LLC                   = 0xa9
	DLT_GSMTAP_ABIS                = 0xda
	DLT_GSMTAP_UM                  = 0xd9
	DLT_IBM_SN                     = 0x92
	DLT_IBM_SP                     = 0x91
	DLT_IEEE802                    = 0x6
	DLT_IEEE802_11                 = 0x69
	DLT_IEEE802_11_RADIO           = 0x7f
	DLT_IEEE802_11_RADIO_AVS       = 0xa3
	DLT_IEEE802_15_4               = 0xc3
	DLT_IEEE802_15_4_LINUX         = 0xbf
	DLT_IEEE802_15_4_NOFCS         = 0xe6
	DLT_IEEE802_15_4_NONASK_PHY    = 0xd7
	DLT_IEEE802_16_MAC_CPS         = 0xbc
	DLT_IEEE802_16_MAC_CPS_RADIO   = 0xc1
	DLT_INFINIBAND                 = 0xf7
	DLT_IPFILTER                   = 0x74
	DLT_IPMB_KONTRON               = 0xc7
	DLT_IPMB_LINUX                 = 0xd1
	DLT_IPMI_HPM_2                 = 0x104
	DLT_IPNET                      = 0xe2
	DLT_IPOIB                      = 0xf2
	DLT_IPV4                       = 0xe4
	DLT_IPV6                       = 0xe5
	DLT_IP_OVER_FC                 = 0x7a
	DLT_ISO_14443                  = 0x108
	DLT_JUNIPER_ATM1               = 0x89
	DLT_JUNIPER_ATM2               = 0x87
	DLT_JUNIPER_ATM_CEMIC          = 0xee
	DLT_JUNIPER_CHDLC              = 0xb5
	DLT_JUNIPER_ES                 = 0x84
	DLT_JUNIPER_ETHER              = 0xb2
	DLT_JUNIPER_FIBRECHANNEL       = 0xea
	DLT_JUNIPER_FRELAY             = 0xb4
	DLT_JUNIPER_GGSN               = 0x85
	DLT_JUNIPER_ISM                = 0xc2
	DLT_JUNIPER_MFR                = 0x86
	DLT_JUNIPER_MLFR               = 0x83
	DLT_JUNIPER_MLPPP              = 0x82
	DLT_JUNIPER_MONITOR            = 0xa4
	DLT_JUNIPER_PIC_PEER           = 0xae
	DLT_JUNIPER_PPP                = 0xb3
	DLT_JUNIPER_PPPOE              = 0xa7
	DLT_JUNIPER_PPPOE_ATM          = 0xa8
	DLT_JUNIPER_SERVICES           = 0x88
	DLT_JUNIPER_SRX_E2E            = 0xe9
	DLT_JUNIPER_ST                 = 0xc8
	DLT_JUNIPER_VP                 = 0xb7
	DLT_JUNIPER_VS                 = 0xe8
	DLT_LAPB_WITH_DIR              = 0xcf
	DLT_LAPD                       = 0xcb
	DLT_LIN                        = 0xd4
	DLT_LINUX_EVDEV                = 0xd8
	DLT_LINUX_IRDA                 = 0x90
	DLT_LINUX_LAPD                 = 0xb1
	DLT_LINUX_PPP_WITHDIRECTION    = 0xa6
	DLT_LINUX_SLL                  = 0x71
	DLT_LINUX_SLL2                 = 0x114
	DLT_LOOP                       = 0x6c
	DLT_LORATAP                    = 0x10e
	DLT_LTALK                      = 0x72
	DLT_MATCHING_MAX               = 0x114
	DLT_MATCHING_MIN               = 0x68
	DLT_MFR                        = 0xb6
	DLT_MOST                       = 0xd3
	DLT_MPEG_2_TS                  = 0xf3
	DLT_MPLS                       = 0xdb
	DLT_MTP2                       = 0x8c
	DLT_MTP2_WITH_PHDR             = 0x8b
	DLT_MTP3                       = 0x8d
	DLT_MUX27010                   = 0xec
	DLT_NETANALYZER                = 0xf0
	DLT_NETANALYZER_TRANSPARENT    = 0xf1
	DLT_NETLINK                    = 0xfd
	DLT_NFC_LLCP                   = 0xf5
	DLT_NFLOG                      = 0xef
	DLT_NG40                       = 0xf4
	DLT_NORDIC_BLE                 = 0x110
	DLT_NULL                       = 0x0
	DLT_OPENFLOW                   = 0x10b
	DLT_PCI_EXP                    = 0x7d
	DLT_PFLOG                      = 0x75
	DLT_PFSYNC                     = 0x79
	DLT_PKTAP                      = 0x102
	DLT_PPI                        = 0xc0
	DLT_PPP                        = 0x9
	DLT_PPP_BSDOS                  = 0xe
	DLT_PPP_ETHER                  = 0x33
	DLT_PPP_PPPD                   = 0xa6
	DLT_PPP_SERIAL                 = 0x32
	DLT_PPP_WITH_DIR               = 0xcc
	DLT_PPP_WITH_DIRECTION         = 0xa6
	DLT_PRISM_HEADER               = 0x77
	DLT_PROFIBUS_DL                = 0x101
	DLT_PRONET                     = 0x4
	DLT_RAIF1                      = 0xc6
	DLT_RAW                        = 0xc
	DLT_RDS                        = 0x109
	DLT_REDBACK_SMARTEDGE          = 0x20
	DLT_RIO                        = 0x7c
	DLT_RTAC_SERIAL                = 0xfa
	DLT_SCCP                       = 0x8e
	DLT_SCTP                       = 0xf8
	DLT_SDLC                       = 0x10c
	DLT_SITA                       = 0xc4
	DLT_SLIP                       = 0x8
	DLT_SLIP_BSDOS                 = 0xd
	DLT_STANAG_5066_D_PDU          = 0xed
	DLT_SUNATM                     = 0x7b
	DLT_SYMANTEC_FIREWALL          = 0x63
	DLT_TI_LLN_SNIFFER             = 0x10d
	DLT_TZSP                       = 0x80
	DLT_USB                        = 0xba
	DLT_USBPCAP                    = 0xf9
	DLT_USB_DARWIN                 = 0x10a
	DLT_USB_FREEBSD                = 0xba
	DLT_USB_LINUX                  = 0xbd
	DLT_USB_LINUX_MMAPPED          = 0xdc
	DLT_USER0                      = 0x93
	DLT_USER1                      = 0x94
	DLT_USER10                     = 0x9d
	DLT_USER11                     = 0x9e
	DLT_USER12                     = 0x9f
	DLT_USER13                     = 0xa0
	DLT_USER14                     = 0xa1
	DLT_USER15                     = 0xa2
	DLT_USER2                      = 0x95
	DLT_USER3                      = 0x96
	DLT_USER4                      = 0x97
	DLT_USER5                      = 0x98
	DLT_USER6                      = 0x99
	DLT_USER7                      = 0x9a
	DLT_USER8                      = 0x9b
	DLT_USER9                      = 0x9c
	DLT_VSOCK                      = 0x10f
	DLT_WATTSTOPPER_DLM            = 0x107
	DLT_WIHART                     = 0xdf
	DLT_WIRESHARK_UPPER_PDU        = 0xfc
	DLT_X2E_SERIAL                 = 0xd5
	DLT_X2E_XORAYA                 = 0xd6
	DLT_ZWAVE_R1_R2                = 0x105
	DLT_ZWAVE_R3                   = 0x106
	DT_BLK                         = 0x6
	DT_CHR                         = 0x2
	DT_DIR                         = 0x4
	DT_FIFO                        = 0x1
	DT_LNK                         = 0xa
	DT_REG                         = 0x8
	DT_SOCK                        = 0xc
	DT_UNKNOWN                     = 0x0
	DT_WHT                         = 0xe
	ECHO                           = 0x8
	ECHOCTL                        = 0x40
	ECHOE                          = 0x2
	ECHOK                          = 0x4
	ECHOKE                         = 0x1
	ECHONL                         = 0x10
	ECHOPRT                        = 0x20
	EVFILT_AIO                     = -0x3
	EVFILT_EMPTY                   = -0xd
	EVFILT_FS                      = -0x9
	EVFILT_LIO                     = -0xa
	EVFILT_PROC                    = -0x5
	EVFILT_PROCDESC                = -0x8
	EVFILT_READ                    = -0x1
	EVFILT_SENDFILE                = -0xc
	EVFILT_SIGNAL                  = -0x6
	EVFILT_SYSCOUNT                = 0xd
	EVFILT_TIMER                   = -0x7
	EVFILT_USER                    = -0xb
	EVFILT_VNODE                   = -0x4
	EVFILT_WRITE                   = -0x2
	EVNAMEMAP_NAME_SIZE            = 0x40
	EV_ADD                         = 0x1
	EV_CLEAR                       = 0x20
	EV_DELETE                      = 0x2
	EV_DISABLE                     = 0x8
	EV_DISPATCH                    = 0x80
	EV_DROP                        = 0x1000
	EV_ENABLE                      = 0x4
	EV_EOF                         = 0x8000
	EV_ERROR                       = 0x4000
	EV_FLAG1                       = 0x2000
	EV_FLAG2                       = 0x4000
	EV_FORCEONESHOT                = 0x100
	EV_ONESHOT                     = 0x10
	EV_RECEIPT                     = 0x40
	EV_SYSFLAGS                    = 0xf000
	EXTA                           = 0x4b00
	EXTATTR_MAXNAMELEN             = 0xff
	EXTATTR_NAMESPACE_EMPTY        = 0x0
	EXTATTR_NAMESPACE_SYSTEM       = 0x2
	EXTATTR_NAMESPACE_USER         = 0x1
	EXTB                           = 0x9600
	EXTPROC                        = 0x800
	FD_CLOEXEC                     = 0x1
	FD_SETSIZE                     = 0x400
	FLUSHO                         = 0x800000
	F_CANCEL                       = 0x5
	F_DUP2FD                       = 0xa
	F_DUP2FD_CLOEXEC               = 0x12
	F_DUPFD                        = 0x0
	F_DUPFD_CLOEXEC                = 0x11
	F_GETFD                        = 0x1
	F_GETFL                        = 0x3
	F_GETLK                        = 0xb
	F_GETOWN                       = 0x5
	F_OGETLK                       = 0x7
	F_OK                           = 0x0
	F_OSETLK                       = 0x8
	F_OSETLKW                      = 0x9
	F_RDAHEAD                      = 0x10
	F_RDLCK                        = 0x1
	F_READAHEAD                    = 0xf
	F_SETFD                        = 0x2
	F_SETFL                        = 0x4
	F_SETLK                        = 0xc
	F_SETLKW                       = 0xd
	F_SETLK_REMOTE                 = 0xe
	F_SETOWN                       = 0x6
	F_UNLCK                        = 0x2
	F_UNLCKSYS                     = 0x4
	F_WRLCK                        = 0x3
	HUPCL                          = 0x4000
	HW_MACHINE                     = 0x1
	ICANON                         = 0x100
	ICMP6_FILTER                   = 0x12
	ICRNL                          = 0x100
	IEXTEN                         = 0x400
	IFAN_ARRIVAL                   = 0x0
	IFAN_DEPARTURE                 = 0x1
	IFCAP_WOL_MAGIC                = 0x2000
	IFF_ALLMULTI                   = 0x200
	IFF_ALTPHYS                    = 0x4000
	IFF_BROADCAST                  = 0x2
	IFF_CANTCHANGE                 = 0x218f52
	IFF_CANTCONFIG                 = 0x10000
	IFF_DEBUG                      = 0x4
	IFF_DRV_OACTIVE                = 0x400
	IFF_DRV_RUNNING                = 0x40
	IFF_DYING                      = 0x200000
	IFF_LINK0                      = 0x1000
	IFF_LINK1                      = 0x2000
	IFF_LINK2                      = 0x4000
	IFF_LOOPBACK                   = 0x8
	IFF_MONITOR                    = 0x40000
	IFF_MULTICAST                  = 0x8000
	IFF_NOARP                      = 0x80
	IFF_NOGROUP                    = 0x800000
	IFF_OACTIVE                    = 0x400
	IFF_POINTOPOINT                = 0x10
	IFF_PPROMISC                   = 0x20000
	IFF_PROMISC                    = 0x100
	IFF_RENAMING                   = 0x400000
	IFF_RUNNING                    = 0x40
	IFF_SIMPLEX                    = 0x800
	IFF_STATICARP                  = 0x80000
	IFF_UP                         = 0x1
	IFNAMSIZ                       = 0x10
	IFT_BRIDGE                     = 0xd1
	IFT_CARP                       = 0xf8
	IFT_IEEE1394                   = 0x90
	IFT_INFINIBAND                 = 0xc7
	IFT_L2VLAN                     = 0x87
	IFT_L3IPVLAN                   = 0x88
	IFT_PPP                        = 0x17
	IFT_PROPVIRTUAL                = 0x35
	IGNBRK                         = 0x1
	IGNCR                          = 0x80
	IGNPAR                         = 0x4
	IMAXBEL                        = 0x2000
	INLCR                          = 0x40
	INPCK                          = 0x10
	IN_CLASSA_HOST                 = 0xffffff
	IN_CLASSA_MAX                  = 0x80
	IN_CLASSA_NET                  = 0xff000000
	IN_CLASSA_NSHIFT               = 0x18
	IN_CLASSB_HOST                 = 0xffff
	IN_CLASSB_MAX                  = 0x10000
	IN_CLASSB_NET                  = 0xffff0000
	IN_CLASSB_NSHIFT               = 0x10
	IN_CLASSC_HOST                 = 0xff
	IN_CLASSC_NET                  = 0xffffff00
	IN_CLASSC_NSHIFT               = 0x8
	IN_CLASSD_HOST                 = 0xfffffff
	IN_CLASSD_NET                  = 0xf0000000
	IN_CLASSD_NSHIFT               = 0x1c
	IN_LOOPBACKNET                 = 0x7f
	IN_RFC3021_MASK                = 0xfffffffe
	IPPROTO_3PC                    = 0x22
	IPPROTO_ADFS                   = 0x44
	IPPROTO_AH                     = 0x33
	IPPROTO_AHIP                   = 0x3d
	IPPROTO_APES                   = 0x63
	IPPROTO_ARGUS                  = 0xd
	IPPROTO_AX25                   = 0x5d
	IPPROTO_BHA                    = 0x31
	IPPROTO_BLT                    = 0x1e
	IPPROTO_BRSATMON               = 0x4c
	IPPROTO_CARP                   = 0x70
	IPPROTO_CFTP                   = 0x3e
	IPPROTO_CHAOS                  = 0x10
	IPPROTO_CMTP                   = 0x26
	IPPROTO_CPHB                   = 0x49
	IPPROTO_CPNX                   = 0x48
	IPPROTO_DCCP                   = 0x21
	IPPROTO_DDP                    = 0x25
	IPPROTO_DGP                    = 0x56
	IPPROTO_DIVERT                 = 0x102
	IPPROTO_DONE                   = 0x101
	IPPROTO_DSTOPTS                = 0x3c
	IPPROTO_EGP                    = 0x8
	IPPROTO_EMCON                  = 0xe
	IPPROTO_ENCAP                  = 0x62
	IPPROTO_EON                    = 0x50
	IPPROTO_ESP                    = 0x32
	IPPROTO_ETHERIP                = 0x61
	IPPROTO_FRAGMENT               = 0x2c
	IPPROTO_GGP                    = 0x3
	IPPROTO_GMTP                   = 0x64
	IPPROTO_GRE                    = 0x2f
	IPPROTO_HELLO                  = 0x3f
	IPPROTO_HIP                    = 0x8b
	IPPROTO_HMP                    = 0x14
	IPPROTO_HOPOPTS                = 0x0
	IPPROTO_ICMP                   = 0x1
	IPPROTO_ICMPV6                 = 0x3a
	IPPROTO_IDP                    = 0x16
	IPPROTO_IDPR                   = 0x23
	IPPROTO_IDRP                   = 0x2d
	IPPROTO_IGMP                   = 0x2
	IPPROTO_IGP                    = 0x55
	IPPROTO_IGRP                   = 0x58
	IPPROTO_IL                     = 0x28
	IPPROTO_INLSP                  = 0x34
	IPPROTO_INP                    = 0x20
	IPPROTO_IP                     = 0x0
	IPPROTO_IPCOMP                 = 0x6c
	IPPROTO_IPCV                   = 0x47
	IPPROTO_IPEIP                  = 0x5e
	IPPROTO_IPIP                   = 0x4
	IPPROTO_IPPC                   = 0x43
	IPPROTO_IPV4                   = 0x4
	IPPROTO_IPV6                   = 0x29
	IPPROTO_IRTP                   = 0x1c
	IPPROTO_KRYPTOLAN              = 0x41
	IPPROTO_LARP                   = 0x5b
	IPPROTO_LEAF1                  = 0x19
	IPPROTO_LEAF2                  = 0x1a
	IPPROTO_MAX                    = 0x100
	IPPROTO_MEAS                   = 0x13
	IPPROTO_MH                     = 0x87
	IPPROTO_MHRP                   = 0x30
	IPPROTO_MICP                   = 0x5f
	IPPROTO_MOBILE                 = 0x37
	IPPROTO_MPLS                   = 0x89
	IPPROTO_MTP                    = 0x5c
	IPPROTO_MUX                    = 0x12
	IPPROTO_ND                     = 0x4d
	IPPROTO_NHRP                   = 0x36
	IPPROTO_NONE                   = 0x3b
	IPPROTO_NSP                    = 0x1f
	IPPROTO_NVPII                  = 0xb
	IPPROTO_OLD_DIVERT             = 0xfe
	IPPROTO_OSPFIGP                = 0x59
	IPPROTO_PFSYNC                 = 0xf0
	IPPROTO_PGM                    = 0x71
	IPPROTO_PIGP                   = 0x9
	IPPROTO_PIM                    = 0x67
	IPPROTO_PRM                    = 0x15
	IPPROTO_PUP                    = 0xc
	IPPROTO_PVP                    = 0x4b
	IPPROTO_RAW                    = 0xff
	IPPROTO_RCCMON                 = 0xa
	IPPROTO_RDP                    = 0x1b
	IPPROTO_RESERVED_253           = 0xfd
	IPPROTO_RESERVED_254           = 0xfe
	IPPROTO_ROUTING                = 0x2b
	IPPROTO_RSVP                   = 0x2e
	IPPROTO_RVD                    = 0x42
	IPPROTO_SATEXPAK               = 0x40
	IPPROTO_SATMON                 = 0x45
	IPPROTO_SCCSP                  = 0x60
	IPPROTO_SCTP                   = 0x84
	IPPROTO_SDRP                   = 0x2a
	IPPROTO_SEND                   = 0x103
	IPPROTO_SHIM6                  = 0x8c
	IPPROTO_SKIP                   = 0x39
	IPPROTO_SPACER                 = 0x7fff
	IPPROTO_SRPC                   = 0x5a
	IPPROTO_ST                     = 0x7
	IPPROTO_SVMTP                  = 0x52
	IPPROTO_SWIPE                  = 0x35
	IPPROTO_TCF                    = 0x57
	IPPROTO_TCP                    = 0x6
	IPPROTO_TLSP                   = 0x38
	IPPROTO_TP                     = 0x1d
	IPPROTO_TPXX                   = 0x27
	IPPROTO_TRUNK1                 = 0x17
	IPPROTO_TRUNK2                 = 0x18
	IPPROTO_TTP                    = 0x54
	IPPROTO_UDP                    = 0x11
	IPPROTO_UDPLITE                = 0x88
	IPPROTO_VINES                  = 0x53
	IPPROTO_VISA                   = 0x46
	IPPROTO_VMTP                   = 0x51
	IPPROTO_WBEXPAK                = 0x4f
	IPPROTO_WBMON                  = 0x4e
	IPPROTO_WSN                    = 0x4a
	IPPROTO_XNET                   = 0xf
	IPPROTO_XTP                    = 0x24
	IPV6_AUTOFLOWLABEL             = 0x3b
	IPV6_BINDANY                   = 0x40
	IPV6_BINDMULTI                 = 0x41
	IPV6_BINDV6ONLY                = 0x1b
	IPV6_CHECKSUM                  = 0x1a
	IPV6_DEFAULT_MULTICAST_HOPS    = 0x1
	IPV6_DEFAULT_MULTICAST_LOOP    = 0x1
	IPV6_DEFHLIM                   = 0x40
	IPV6_DONTFRAG                  = 0x3e
	IPV6_DSTOPTS                   = 0x32
	IPV6_FLOWID                    = 0x43
	IPV6_FLOWINFO_MASK             = 0xffffff0f
	IPV6_FLOWLABEL_LEN             = 0x14
	IPV6_FLOWLABEL_MASK            = 0xffff0f00
	IPV6_FLOWTYPE                  = 0x44
	IPV6_FRAGTTL                   = 0x78
	IPV6_FW_ADD                    = 0x1e
	IPV6_FW_DEL                    = 0x1f
	IPV6_FW_FLUSH                  = 0x20
	IPV6_FW_GET                    = 0x22
	IPV6_FW_ZERO                   = 0x21
	IPV6_HLIMDEC                   = 0x1
	IPV6_HOPLIMIT                  = 0x2f
	IPV6_HOPOPTS                   = 0x31
	IPV6_IPSEC_POLICY              = 0x1c
	IPV6_JOIN_GROUP                = 0xc
	IPV6_LEAVE_GROUP               = 0xd
	IPV6_MAXHLIM                   = 0xff
	IPV6_MAXOPTHDR                 = 0x800
	IPV6_MAXPACKET                 = 0xffff
	IPV6_MAX_GROUP_SRC_FILTER      = 0x200
	IPV6_MAX_MEMBERSHIPS           = 0xfff
	IPV6_MAX_SOCK_SRC_FILTER       = 0x80
	IPV6_MMTU                      = 0x500
	IPV6_MSFILTER                  = 0x4a
	IPV6_MULTICAST_HOPS            = 0xa
	IPV6_MULTICAST_IF              = 0x9
	IPV6_MULTICAST_LOOP            = 0xb
	IPV6_NEXTHOP                   = 0x30
	IPV6_ORIGDSTADDR               = 0x48
	IPV6_PATHMTU                   = 0x2c
	IPV6_PKTINFO                   = 0x2e
	IPV6_PORTRANGE                 = 0xe
	IPV6_PORTRANGE_DEFAULT         = 0x0
	IPV6_PORTRANGE_HIGH            = 0x1
	IPV6_PORTRANGE_LOW             = 0x2
	IPV6_PREFER_TEMPADDR           = 0x3f
	IPV6_RECVDSTOPTS               = 0x28
	IPV6_RECVFLOWID                = 0x46
	IPV6_RECVHOPLIMIT              = 0x25
	IPV6_RECVHOPOPTS               = 0x27
	IPV6_RECVORIGDSTADDR           = 0x48
	IPV6_RECVPATHMTU               = 0x2b
	IPV6_RECVPKTINFO               = 0x24
	IPV6_RECVRSSBUCKETID           = 0x47
	IPV6_RECVRTHDR                 = 0x26
	IPV6_RECVTCLASS                = 0x39
	IPV6_RSSBUCKETID               = 0x45
	IPV6_RSS_LISTEN_BUCKET         = 0x42
	IPV6_RTHDR                     = 0x33
	IPV6_RTHDRDSTOPTS              = 0x23
	IPV6_RTHDR_LOOSE               = 0x0
	IPV6_RTHDR_STRICT              = 0x1
	IPV6_RTHDR_TYPE_0              = 0x0
	IPV6_SOCKOPT_RESERVED1         = 0x3
	IPV6_TCLASS                    = 0x3d
	IPV6_UNICAST_HOPS              = 0x4
	IPV6_USE_MIN_MTU               = 0x2a
	IPV6_V6ONLY                    = 0x1b
	IPV6_VERSION                   = 0x60
	IPV6_VERSION_MASK              = 0xf0
	IPV6_VLAN_PCP                  = 0x4b
	IP_ADD_MEMBERSHIP              = 0xc
	IP_ADD_SOURCE_MEMBERSHIP       = 0x46
	IP_BINDANY                     = 0x18
	IP_BINDMULTI                   = 0x19
	IP_BLOCK_SOURCE                = 0x48
	IP_DEFAULT_MULTICAST_LOOP      = 0x1
	IP_DEFAULT_MULTICAST_TTL       = 0x1
	IP_DF                          = 0x4000
	IP_DONTFRAG                    = 0x43
	IP_DROP_MEMBERSHIP             = 0xd
	IP_DROP_SOURCE_MEMBERSHIP      = 0x47
	IP_DUMMYNET3                   = 0x31
	IP_DUMMYNET_CONFIGURE          = 0x3c
	IP_DUMMYNET_DEL                = 0x3d
	IP_DUMMYNET_FLUSH              = 0x3e
	IP_DUMMYNET_GET                = 0x40
	IP_FLOWID                      = 0x5a
	IP_FLOWTYPE                    = 0x5b
	IP_FW3                         = 0x30
	IP_FW_ADD                      = 0x32
	IP_FW_DEL                      = 0x33
	IP_FW_FLUSH                    = 0x34
	IP_FW_GET                      = 0x36
	IP_FW_NAT_CFG                  = 0x38
	IP_FW_NAT_DEL                  = 0x39
	IP_FW_NAT_GET_CONFIG           = 0x3a
	IP_FW_NAT_GET_LOG              = 0x3b
	IP_FW_RESETLOG                 = 0x37
	IP_FW_TABLE_ADD                = 0x28
	IP_FW_TABLE_DEL                = 0x29
	IP_FW_TABLE_FLUSH              = 0x2a
	IP_FW_TABLE_GETSIZE            = 0x2b
	IP_FW_TABLE_LIST               = 0x2c
	IP_FW_ZERO                     = 0x35
	IP_HDRINCL                     = 0x2
	IP_IPSEC_POLICY                = 0x15
	IP_MAXPACKET                   = 0xffff
	IP_MAX_GROUP_SRC_FILTER        = 0x200
	IP_MAX_MEMBERSHIPS             = 0xfff
	IP_MAX_SOCK_MUTE_FILTER        = 0x80
	IP_MAX_SOCK_SRC_FILTER         = 0x80
	IP_MF                          = 0x2000
	IP_MINTTL                      = 0x42
	IP_MSFILTER                    = 0x4a
	IP_MSS                         = 0x240
	IP_MULTICAST_IF                = 0x9
	IP_MULTICAST_LOOP              = 0xb
	IP_MULTICAST_TTL               = 0xa
	IP_MULTICAST_VIF               = 0xe
	IP_OFFMASK                     = 0x1fff
	IP_ONESBCAST                   = 0x17
	IP_OPTIONS                     = 0x1
	IP_ORIGDSTADDR                 = 0x1b
	IP_PORTRANGE                   = 0x13
	IP_PORTRANGE_DEFAULT           = 0x0
	IP_PORTRANGE_HIGH              = 0x1
	IP_PORTRANGE_LOW               = 0x2
	IP_RECVDSTADDR                 = 0x7
	IP_RECVFLOWID                  = 0x5d
	IP_RECVIF                      = 0x14
	IP_RECVOPTS                    = 0x5
	IP_RECVORIGDSTADDR             = 0x1b
	IP_RECVRETOPTS                 = 0x6
	IP_RECVRSSBUCKETID             = 0x5e
	IP_RECVTOS                     = 0x44
	IP_RECVTTL                     = 0x41
	IP_RETOPTS                     = 0x8
	IP_RF                          = 0x8000
	IP_RSSBUCKETID                 = 0x5c
	IP_RSS_LISTEN_BUCKET           = 0x1a
	IP_RSVP_OFF                    = 0x10
	IP_RSVP_ON                     = 0xf
	IP_RSVP_VIF_OFF                = 0x12
	IP_RSVP_VIF_ON                 = 0x11
	IP_SENDSRCADDR                 = 0x7
	IP_TOS                         = 0x3
	IP_TTL                         = 0x4
	IP_UNBLOCK_SOURCE              = 0x49
	IP_VLAN_PCP                    = 0x4b
	ISIG                           = 0x80
	ISTRIP                         = 0x20
	ITIMER_PROF                    = 0x2
	ITIMER_REAL                    = 0x0
	ITIMER_VIRTUAL                 = 0x1
	IXANY                          = 0x800
	IXOFF                          = 0x400
	IXON                           = 0x200
	KERN_HOSTNAME                  = 0xa
	KERN_OSRELEASE                 = 0x2
	KERN_OSTYPE                    = 0x1
	KERN_VERSION                   = 0x4
	LOCAL_CONNWAIT                 = 0x4
	LOCAL_CREDS                    = 0x2
	LOCAL_PEERCRED                 = 0x1
	LOCAL_VENDOR                   = 0x80000000
	LOCK_EX                        = 0x2
	LOCK_NB                        = 0x4
	LOCK_SH                        = 0x1
	LOCK_UN                        = 0x8
	MADV_AUTOSYNC                  = 0x7
	MADV_CORE                      = 0x9
	MADV_DONTNEED                  = 0x4
	MADV_FREE                      = 0x5
	MADV_NOCORE                    = 0x8
	MADV_NORMAL                    = 0x0
	MADV_NOSYNC                    = 0x6
	MADV_PROTECT                   = 0xa
	MADV_RANDOM                    = 0x1
	MADV_SEQUENTIAL                = 0x2
	MADV_WILLNEED                  = 0x3
	MAP_32BIT                      = 0x80000
	MAP_ALIGNED_SUPER              = 0x1000000
	MAP_ALIGNMENT_MASK             = -0x1000000
	MAP_ALIGNMENT_SHIFT            = 0x18
	MAP_ANON                       = 0x1000
	MAP_ANONYMOUS                  = 0x1000
	MAP_COPY                       = 0x2
	MAP_EXCL                       = 0x4000
	MAP_FILE                       = 0x0
	MAP_FIXED                      = 0x10
	MAP_GUARD                      = 0x2000
	MAP_HASSEMAPHORE               = 0x200
	MAP_NOCORE                     = 0x20000
	MAP_NOSYNC                     = 0x800
	MAP_PREFAULT_READ              = 0x40000
	MAP_PRIVATE                    = 0x2
	MAP_RESERVED0020               = 0x20
	MAP_RESERVED0040               = 0x40
	MAP_RESERVED0080               = 0x80
	MAP_RESERVED0100               = 0x100
	MAP_SHARED                     = 0x1
	MAP_STACK                      = 0x400
	MCAST_BLOCK_SOURCE             = 0x54
	MCAST_EXCLUDE                  = 0x2
	MCAST_INCLUDE                  = 0x1
	MCAST_JOIN_GROUP               = 0x50
	MCAST_JOIN_SOURCE_GROUP        = 0x52
	MCAST_LEAVE_GROUP              = 0x51
	MCAST_LEAVE_SOURCE_GROUP       = 0x53
	MCAST_UNBLOCK_SOURCE           = 0x55
	MCAST_UNDEFINED                = 0x0
	MCL_CURRENT                    = 0x1
	MCL_FUTURE                     = 0x2
	MNT_ACLS                       = 0x8000000
	MNT_ASYNC                      = 0x40
	MNT_AUTOMOUNTED                = 0x200000000
	MNT_BYFSID                     = 0x8000000
	MNT_CMDFLAGS                   = 0xd0f0000
	MNT_DEFEXPORTED                = 0x200
	MNT_DELEXPORT                  = 0x20000
	MNT_EXKERB                     = 0x800
	MNT_EXPORTANON                 = 0x400
	MNT_EXPORTED                   = 0x100
	MNT_EXPUBLIC                   = 0x20000000
	MNT_EXRDONLY                   = 0x80
	MNT_FORCE                      = 0x80000
	MNT_GJOURNAL                   = 0x2000000
	MNT_IGNORE                     = 0x800000
	MNT_LAZY                       = 0x3
	MNT_LOCAL                      = 0x1000
	MNT_MULTILABEL                 = 0x4000000
	MNT_NFS4ACLS                   = 0x10
	MNT_NOATIME                    = 0x10000000
	MNT_NOCLUSTERR                 = 0x40000000
	MNT_NOCLUSTERW                 = 0x80000000
	MNT_NOEXEC                     = 0x4
	MNT_NONBUSY                    = 0x4000000
	MNT_NOSUID                     = 0x8
	MNT_NOSYMFOLLOW                = 0x400000
	MNT_NOWAIT                     = 0x2
	MNT_QUOTA                      = 0x2000
	MNT_RDONLY                     = 0x1
	MNT_RELOAD                     = 0x40000
	MNT_ROOTFS                     = 0x4000
	MNT_SNAPSHOT                   = 0x1000000
	MNT_SOFTDEP                    = 0x200000
	MNT_SUIDDIR                    = 0x100000
	MNT_SUJ                        = 0x100000000
	MNT_SUSPEND                    = 0x4
	MNT_SYNCHRONOUS                = 0x2
	MNT_UNION                      = 0x20
	MNT_UNTRUSTED                  = 0x800000000
	MNT_UPDATE                     = 0x10000
	MNT_UPDATEMASK                 = 0xad8d0807e
	MNT_USER                       = 0x8000
	MNT_VERIFIED                   = 0x400000000
	MNT_VISFLAGMASK                = 0xffef0ffff
	MNT_WAIT                       = 0x1
	MSG_CMSG_CLOEXEC               = 0x40000
	MSG_COMPAT                     = 0x8000
	MSG_CTRUNC                     = 0x20
	MSG_DONTROUTE                  = 0x4
	MSG_DONTWAIT                   = 0x80
	MSG_EOF                        = 0x100
	MSG_EOR                        = 0x8
	MSG_NBIO                       = 0x4000
	MSG_NOSIGNAL                   = 0x20000
	MSG_NOTIFICATION               = 0x2000
	MSG_OOB                        = 0x1
	MSG_PEEK                       = 0x2
	MSG_TRUNC                      = 0x10
	MSG_WAITALL                    = 0x40
	MSG_WAITFORONE                 = 0x80000
	MS_ASYNC                       = 0x1
	MS_INVALIDATE                  = 0x2
	MS_SYNC                        = 0x0
	NAME_MAX                       = 0xff
	NET_RT_DUMP                    = 0x1
	NET_RT_FLAGS                   = 0x2
	NET_RT_IFLIST                  = 0x3
	NET_RT_IFLISTL                 = 0x5
	NET_RT_IFMALIST                = 0x4
	NFDBITS                        = 0x40
	NOFLSH                         = 0x80000000
	NOKERNINFO                     = 0x2000000
	NOTE_ABSTIME                   = 0x10
	NOTE_ATTRIB                    = 0x8
	NOTE_CHILD                     = 0x4
	NOTE_CLOSE                     = 0x100
	NOTE_CLOSE_WRITE               = 0x200
	NOTE_DELETE                    = 0x1
	NOTE_EXEC                      = 0x20000000
	NOTE_EXIT                      = 0x80000000
	NOTE_EXTEND                    = 0x4
	NOTE_FFAND                     = 0x40000000
	NOTE_FFCOPY                    = 0xc0000000
	NOTE_FFCTRLMASK                = 0xc0000000
	NOTE_FFLAGSMASK                = 0xffffff
	NOTE_FFNOP                     = 0x0
	NOTE_FFOR                      = 0x80000000
	NOTE_FILE_POLL                 = 0x2
	NOTE_FORK                      = 0x40000000
	NOTE_LINK                      = 0x10
	NOTE_LOWAT                     = 0x1
	NOTE_MSECONDS                  = 0x2
	NOTE_NSECONDS                  = 0x8
	NOTE_OPEN                      = 0x80
	NOTE_PCTRLMASK                 = 0xf0000000
	NOTE_PDATAMASK                 = 0xfffff
	NOTE_READ                      = 0x400
	NOTE_RENAME                    = 0x20
	NOTE_REVOKE                    = 0x40
	NOTE_SECONDS                   = 0x1
	NOTE_TRACK                     = 0x1
	NOTE_TRACKERR                  = 0x2
	NOTE_TRIGGER                   = 0x1000000
	NOTE_USECONDS                  = 0x4
	NOTE_WRITE                     = 0x2
	OCRNL                          = 0x10
	ONLCR                          = 0x2
	ONLRET                         = 0x40
	ONOCR                          = 0x20
	ONOEOT                         = 0x8
	OPOST                          = 0x1
	OXTABS                         = 0x4
	O_ACCMODE                      = 0x3
	O_APPEND                       = 0x8
	O_ASYNC                        = 0x40
	O_CLOEXEC                      = 0x100000
	O_CREAT                        = 0x200
	O_DIRECT                       = 0x10000
	O_DIRECTORY                    = 0x20000
	O_EXCL                         = 0x800
	O_EXEC                         = 0x40000
	O_EXLOCK                       = 0x20
	O_FSYNC                        = 0x80
	O_NDELAY                       = 0x4
	O_NOCTTY                       = 0x8000
	O_NOFOLLOW                     = 0x100
	O_NONBLOCK                     = 0x4
	O_RDONLY                       = 0x0
	O_RDWR                         = 0x2
	O_RESOLVE_BENEATH              = 0x800000
	O_SEARCH                       = 0x40000
	O_SHLOCK                       = 0x10
	O_SYNC                         = 0x80
	O_TRUNC                        = 0x400
	O_TTY_INIT                     = 0x80000
	O_VERIFY                       = 0x200000
	O_WRONLY                       = 0x1
	PARENB                         = 0x1000
	PARMRK                         = 0x8
	PARODD                         = 0x2000
	PENDIN                         = 0x20000000
	PIOD_READ_D                    = 0x1
	PIOD_READ_I                    = 0x3
	PIOD_WRITE_D                   = 0x2
	PIOD_WRITE_I                   = 0x4
	PRIO_PGRP                      = 0x1
	PRIO_PROCESS                   = 0x0
	PRIO_USER                      = 0x2
	PROT_EXEC                      = 0x4
	PROT_NONE                      = 0x0
	PROT_READ                      = 0x1
	PROT_WRITE                     = 0x2
	PTRACE_DEFAULT                 = 0x1
	PTRACE_EXEC                    = 0x1
	PTRACE_FORK                    = 0x8
	PTRACE_LWP                     = 0x10
	PTRACE_SCE                     = 0x2
	PTRACE_SCX                     = 0x4
	PTRACE_SYSCALL                 = 0x6
	PTRACE_VFORK                   = 0x20
	PT_ATTACH                      = 0xa
	PT_CLEARSTEP                   = 0x10
	PT_CONTINUE                    = 0x7
	PT_DETACH                      = 0xb
	PT_FIRSTMACH                   = 0x40
	PT_FOLLOW_FORK                 = 0x17
	PT_GETDBREGS                   = 0x25
	PT_GETFPREGS                   = 0x23
	PT_GETFSBASE                   = 0x47
	PT_GETGSBASE                   = 0x49
	PT_GETLWPLIST                  = 0xf
	PT_GETNUMLWPS                  = 0xe
	PT_GETREGS                     = 0x21
	PT_GETXSTATE                   = 0x45
	PT_GETXSTATE_INFO              = 0x44
	PT_GET_EVENT_MASK              = 0x19
	PT_GET_SC_ARGS                 = 0x1b
	PT_GET_SC_RET                  = 0x1c
	PT_IO                          = 0xc
	PT_KILL                        = 0x8
	PT_LWPINFO                     = 0xd
	PT_LWP_EVENTS                  = 0x18
	PT_READ_D                      = 0x2
	PT_READ_I                      = 0x1
	PT_RESUME                      = 0x13
	PT_SETDBREGS                   = 0x26
	PT_SETFPREGS                   = 0x24
	PT_SETFSBASE                   = 0x48
	PT_SETGSBASE                   = 0x4a
	PT_SETREGS                     = 0x22
	PT_SETSTEP                     = 0x11
	PT_SETXSTATE                   = 0x46
	PT_SET_EVENT_MASK              = 0x1a
	PT_STEP                        = 0x9
	PT_SUSPEND                     = 0x12
	PT_SYSCALL                     = 0x16
	PT_TO_SCE                      = 0x14
	PT_TO_SCX                      = 0x15
	PT_TRACE_ME                    = 0x0
	PT_VM_ENTRY                    = 0x29
	PT_VM_TIMESTAMP                = 0x28
	PT_WRITE_D                     = 0x5
	PT_WRITE_I                     = 0x4
	P_ZONEID                       = 0xc
	RLIMIT_AS                      = 0xa
	RLIMIT_CORE                    = 0x4
	RLIMIT_CPU                     = 0x0
	RLIMIT_DATA                    = 0x2
	RLIMIT_FSIZE                   = 0x1
	RLIMIT_MEMLOCK                 = 0x6
	RLIMIT_NOFILE                  = 0x8
	RLIMIT_NPROC                   = 0x7
	RLIMIT_RSS                     = 0x5
	RLIMIT_STACK                   = 0x3
	RLIM_INFINITY                  = 0x7fffffffffffffff
	RTAX_AUTHOR                    = 0x6
	RTAX_BRD                       = 0x7
	RTAX_DST                       = 0x0
	RTAX_GATEWAY                   = 0x1
	RTAX_GENMASK                   = 0x3
	RTAX_IFA                       = 0x5
	RTAX_IFP                       = 0x4
	RTAX_MAX                       = 0x8
	RTAX_NETMASK                   = 0x2
	RTA_AUTHOR                     = 0x40
	RTA_BRD                        = 0x80
	RTA_DST                        = 0x1
	RTA_GATEWAY                    = 0x2
	RTA_GENMASK                    = 0x8
	RTA_IFA                        = 0x20
	RTA_IFP                        = 0x10
	RTA_NETMASK                    = 0x4
	RTF_BLACKHOLE                  = 0x1000
	RTF_BROADCAST                  = 0x400000
	RTF_DONE                       = 0x40
	RTF_DYNAMIC                    = 0x10
	RTF_FIXEDMTU                   = 0x80000
	RTF_FMASK                      = 0x1004d808
	RTF_GATEWAY                    = 0x2
	RTF_GWFLAG_COMPAT              = 0x80000000
	RTF_HOST                       = 0x4
	RTF_LLDATA                     = 0x400
	RTF_LLINFO                     = 0x400
	RTF_LOCAL                      = 0x200000
	RTF_MODIFIED                   = 0x20
	RTF_MULTICAST                  = 0x800000
	RTF_PINNED                     = 0x100000
	RTF_PROTO1                     = 0x8000
	RTF_PROTO2                     = 0x4000
	RTF_PROTO3                     = 0x40000
	RTF_REJECT                     = 0x8
	RTF_RNH_LOCKED                 = 0x40000000
	RTF_STATIC                     = 0x800
	RTF_STICKY                     = 0x10000000
	RTF_UP                         = 0x1
	RTF_XRESOLVE                   = 0x200
	RTM_ADD                        = 0x1
	RTM_CHANGE                     = 0x3
	RTM_DELADDR                    = 0xd
	RTM_DELETE                     = 0x2
	RTM_DELMADDR                   = 0x10
	RTM_GET                        = 0x4
	RTM_IEEE80211                  = 0x12
	RTM_IFANNOUNCE                 = 0x11
	RTM_IFINFO                     = 0xe
	RTM_LOCK                       = 0x8
	RTM_LOSING                     = 0x5
	RTM_MISS                       = 0x7
	RTM_NEWADDR                    = 0xc
	RTM_NEWMADDR                   = 0xf
	RTM_REDIRECT                   = 0x6
	RTM_RESOLVE                    = 0xb
	RTM_RTTUNIT                    = 0xf4240
	RTM_VERSION                    = 0x5
	RTV_EXPIRE                     = 0x4
	RTV_HOPCOUNT                   = 0x2
	RTV_MTU                        = 0x1
	RTV_RPIPE                      = 0x8
	RTV_RTT                        = 0x40
	RTV_RTTVAR                     = 0x80
	RTV_SPIPE                      = 0x10
	RTV_SSTHRESH                   = 0x20
	RTV_WEIGHT                     = 0x100
	RT_ALL_FIBS                    = -0x1
	RT_BLACKHOLE                   = 0x40
	RT_DEFAULT_FIB                 = 0x0
	RT_HAS_GW                      = 0x80
	RT_HAS_HEADER                  = 0x10
	RT_HAS_HEADER_BIT              = 0x4
	RT_L2_ME                       = 0x4
	RT_L2_ME_BIT                   = 0x2
	RT_LLE_CACHE                   = 0x100
	RT_MAY_LOOP                    = 0x8
	RT_MAY_LOOP_BIT                = 0x3
	RT_REJECT                      = 0x20
	RUSAGE_CHILDREN                = -0x1
	RUSAGE_SELF                    = 0x0
	RUSAGE_THREAD                  = 0x1
	SCM_BINTIME                    = 0x4
	SCM_CREDS                      = 0x3
	SCM_MONOTONIC                  = 0x6
	SCM_REALTIME                   = 0x5
	SCM_RIGHTS                     = 0x1
	SCM_TIMESTAMP                  = 0x2
	SCM_TIME_INFO                  = 0x7
	SEEK_CUR                       = 0x1
	SEEK_DATA                      = 0x3
	SEEK_END                       = 0x2
	SEEK_HOLE                      = 0x4
	SEEK_SET                       = 0x0
	SHUT_RD                        = 0x0
	SHUT_RDWR                      = 0x2
	SHUT_WR                        = 0x1
	SIOCADDMULTI                   = 0x80206931
	SIOCAIFADDR                    = 0x8040691a
	SIOCAIFGROUP                   = 0x80286987
	SIOCATMARK                     = 0x40047307
	SIOCDELMULTI                   = 0x80206932
	SIOCDIFADDR                    = 0x80206919
	SIOCDIFGROUP                   = 0x80286989
	SIOCDIFPHYADDR                 = 0x80206949
	SIOCGDRVSPEC                   = 0xc028697b
	SIOCGETSGCNT                   = 0xc0207210
	SIOCGETVIFCNT                  = 0xc028720f
	SIOCGHIWAT                     = 0x40047301
	SIOCGHWADDR                    = 0xc020693e
	SIOCGI2C                       = 0xc020693d
	SIOCGIFADDR                    = 0xc0206921
	SIOCGIFALIAS                   = 0xc044692d
	SIOCGIFBRDADDR                 = 0xc0206923
	SIOCGIFCAP                     = 0xc020691f
	SIOCGIFCONF                    = 0xc0106924
	SIOCGIFDESCR                   = 0xc020692a
	SIOCGIFDOWNREASON              = 0xc058699a
	SIOCGIFDSTADDR                 = 0xc0206922
	SIOCGIFFIB                     = 0xc020695c
	SIOCGIFFLAGS                   = 0xc0206911
	SIOCGIFGENERIC                 = 0xc020693a
	SIOCGIFGMEMB                   = 0xc028698a
	SIOCGIFGROUP                   = 0xc0286988
	SIOCGIFINDEX                   = 0xc0206920
	SIOCGIFMAC                     = 0xc0206926
	SIOCGIFMEDIA                   = 0xc0306938
	SIOCGIFMETRIC                  = 0xc0206917
	SIOCGIFMTU                     = 0xc0206933
	SIOCGIFNETMASK                 = 0xc0206925
	SIOCGIFPDSTADDR                = 0xc0206948
	SIOCGIFPHYS                    = 0xc0206935
	SIOCGIFPSRCADDR                = 0xc0206947
	SIOCGIFRSSHASH                 = 0xc0186997
	SIOCGIFRSSKEY                  = 0xc0946996
	SIOCGIFSTATUS                  = 0xc331693b
	SIOCGIFXMEDIA                  = 0xc030698b
	SIOCGLANPCP                    = 0xc0206998
	SIOCGLOWAT                     = 0x40047303
	SIOCGPGRP                      = 0x40047309
	SIOCGPRIVATE_0                 = 0xc0206950
	SIOCGPRIVATE_1                 = 0xc0206951
	SIOCGTUNFIB                    = 0xc020695e
	SIOCIFCREATE                   = 0xc020697a
	SIOCIFCREATE2                  = 0xc020697c
	SIOCIFDESTROY                  = 0x80206979
	SIOCIFGCLONERS                 = 0xc0106978
	SIOCSDRVSPEC                   = 0x8028697b
	SIOCSHIWAT                     = 0x80047300
	SIOCSIFADDR                    = 0x8020690c
	SIOCSIFBRDADDR                 = 0x80206913
	SIOCSIFCAP                     = 0x8020691e
	SIOCSIFDESCR                   = 0x80206929
	SIOCSIFDSTADDR                 = 0x8020690e
	SIOCSIFFIB                     = 0x8020695d
	SIOCSIFFLAGS                   = 0x80206910
	SIOCSIFGENERIC                 = 0x80206939
	SIOCSIFLLADDR                  = 0x8020693c
	SIOCSIFMAC                     = 0x80206927
	SIOCSIFMEDIA                   = 0xc0206937
	SIOCSIFMETRIC                  = 0x80206918
	SIOCSIFMTU                     = 0x80206934
	SIOCSIFNAME                    = 0x80206928
	SIOCSIFNETMASK                 = 0x80206916
	SIOCSIFPHYADDR                 = 0x80406946
	SIOCSIFPHYS                    = 0x80206936
	SIOCSIFRVNET                   = 0xc020695b
	SIOCSIFVNET                    = 0xc020695a
	SIOCSLANPCP                    = 0x80206999
	SIOCSLOWAT                     = 0x80047302
	SIOCSPGRP                      = 0x80047308
	SIOCSTUNFIB                    = 0x8020695f
	SOCK_CLOEXEC                   = 0x10000000
	SOCK_DGRAM                     = 0x2
	SOCK_MAXADDRLEN                = 0xff
	SOCK_NONBLOCK                  = 0x20000000
	SOCK_RAW                       = 0x3
	SOCK_RDM                       = 0x4
	SOCK_SEQPACKET                 = 0x5
	SOCK_STREAM                    = 0x1
	SOL_LOCAL                      = 0x0
	SOL_SOCKET                     = 0xffff
	SOMAXCONN                      = 0x80
	SO_ACCEPTCONN                  = 0x2
	SO_ACCEPTFILTER                = 0x1000
	SO_BINTIME                     = 0x2000
	SO_BROADCAST                   = 0x20
	SO_DEBUG                       = 0x1
	SO_DOMAIN                      = 0x1019
	SO_DONTROUTE                   = 0x10
	SO_ERROR                       = 0x1007
	SO_KEEPALIVE                   = 0x8
	SO_LABEL                       = 0x1009
	SO_LINGER                      = 0x80
	SO_LISTENINCQLEN               = 0x1013
	SO_LISTENQLEN                  = 0x1012
	SO_LISTENQLIMIT                = 0x1011
	SO_MAX_PACING_RATE             = 0x1018
	SO_NOSIGPIPE                   = 0x800
	SO_NO_DDP                      = 0x8000
	SO_NO_OFFLOAD                  = 0x4000
	SO_OOBINLINE                   = 0x100
	SO_PEERLABEL                   = 0x1010
	SO_PROTOCOL                    = 0x1016
	SO_PROTOTYPE                   = 0x1016
	SO_RCVBUF                      = 0x1002
	SO_RCVLOWAT                    = 0x1004
	SO_RCVTIMEO                    = 0x1006
	SO_RERROR                      = 0x20000
	SO_REUSEADDR                   = 0x4
	SO_REUSEPORT                   = 0x200
	SO_REUSEPORT_LB                = 0x10000
	SO_SETFIB                      = 0x1014
	SO_SNDBUF                      = 0x1001
	SO_SNDLOWAT                    = 0x1003
	SO_SNDTIMEO                    = 0x1005
	SO_TIMESTAMP                   = 0x400
	SO_TS_BINTIME                  = 0x1
	SO_TS_CLOCK                    = 0x1017
	SO_TS_CLOCK_MAX                = 0x3
	SO_TS_DEFAULT                  = 0x0
	SO_TS_MONOTONIC                = 0x3
	SO_TS_REALTIME                 = 0x2
	SO_TS_REALTIME_MICRO           = 0x0
	SO_TYPE                        = 0x1008
	SO_USELOOPBACK                 = 0x40
	SO_USER_COOKIE                 = 0x1015
	SO_VENDOR                      = 0x80000000
	S_BLKSIZE                      = 0x200
	S_IEXEC                        = 0x40
	S_IFBLK                        = 0x6000
	S_IFCHR                        = 0x2000
	S_IFDIR                        = 0x4000
	S_IFIFO                        = 0x1000
	S_IFLNK                        = 0xa000
	S_IFMT                         = 0xf000
	S_IFREG                        = 0x8000
	S_IFSOCK                       = 0xc000
	S_IFWHT                        = 0xe000
	S_IREAD                        = 0x100
	S_IRGRP                        = 0x20
	S_IROTH                        = 0x4
	S_IRUSR                        = 0x100
	S_IRWXG                        = 0x38
	S_IRWXO                        = 0x7
	S_IRWXU                        = 0x1c0
	S_ISGID                        = 0x400
	S_ISTXT                        = 0x200
	S_ISUID                        = 0x800
	S_ISVTX                        = 0x200
	S_IWGRP                        = 0x10
	S_IWOTH                        = 0x2
	S_IWRITE                       = 0x80
	S_IWUSR                        = 0x80
	S_IXGRP                        = 0x8
	S_IXOTH                        = 0x1
	S_IXUSR                        = 0x40
	TAB0                           = 0x0
	TAB3                           = 0x4
	TABDLY                         = 0x4
	TCIFLUSH                       = 0x1
	TCIOFF                         = 0x3
	TCIOFLUSH                      = 0x3
	TCION                          = 0x4
	TCOFLUSH                       = 0x2
	TCOOFF                         = 0x1
	TCOON                          = 0x2
	TCPOPT_EOL                     = 0x0
	TCPOPT_FAST_OPEN               = 0x22
	TCPOPT_MAXSEG                  = 0x2
	TCPOPT_NOP                     = 0x1
	TCPOPT_PAD                     = 0x0
	TCPOPT_SACK                    = 0x5
	TCPOPT_SACK_PERMITTED          = 0x4
	TCPOPT_SIGNATURE               = 0x13
	TCPOPT_TIMESTAMP               = 0x8
	TCPOPT_WINDOW                  = 0x3
	TCP_BBR_ACK_COMP_ALG           = 0x448
	TCP_BBR_ALGORITHM              = 0x43b
	TCP_BBR_DRAIN_INC_EXTRA        = 0x43c
	TCP_BBR_DRAIN_PG               = 0x42e
	TCP_BBR_EXTRA_GAIN             = 0x449
	TCP_BBR_EXTRA_STATE            = 0x453
	TCP_BBR_FLOOR_MIN_TSO          = 0x454
	TCP_BBR_HDWR_PACE              = 0x451
	TCP_BBR_HOLD_TARGET            = 0x436
	TCP_BBR_IWINTSO                = 0x42b
	TCP_BBR_LOWGAIN_FD             = 0x436
	TCP_BBR_LOWGAIN_HALF           = 0x435
	TCP_BBR_LOWGAIN_THRESH         = 0x434
	TCP_BBR_MAX_RTO                = 0x439
	TCP_BBR_MIN_RTO                = 0x438
	TCP_BBR_MIN_TOPACEOUT          = 0x455
	TCP_BBR_ONE_RETRAN             = 0x431
	TCP_BBR_PACE_CROSS             = 0x442
	TCP_BBR_PACE_DEL_TAR           = 0x43f
	TCP_BBR_PACE_OH                = 0x435
	TCP_BBR_PACE_PER_SEC           = 0x43e
	TCP_BBR_PACE_SEG_MAX           = 0x440
	TCP_BBR_PACE_SEG_MIN           = 0x441
	TCP_BBR_POLICER_DETECT         = 0x457
	TCP_BBR_PROBE_RTT_GAIN         = 0x44d
	TCP_BBR_PROBE_RTT_INT          = 0x430
	TCP_BBR_PROBE_RTT_LEN          = 0x44e
	TCP_BBR_RACK_RTT_USE           = 0x44a
	TCP_BBR_RECFORCE               = 0x42c
	TCP_BBR_REC_OVER_HPTS          = 0x43a
	TCP_BBR_RETRAN_WTSO            = 0x44b
	TCP_BBR_RWND_IS_APP            = 0x42f
	TCP_BBR_SEND_IWND_IN_TSO       = 0x44f
	TCP_BBR_STARTUP_EXIT_EPOCH     = 0x43d
	TCP_BBR_STARTUP_LOSS_EXIT      = 0x432
	TCP_BBR_STARTUP_PG             = 0x42d
	TCP_BBR_TMR_PACE_OH            = 0x448
	TCP_BBR_TSLIMITS               = 0x434
	TCP_BBR_TSTMP_RAISES           = 0x456
	TCP_BBR_UNLIMITED              = 0x43b
	TCP_BBR_USEDEL_RATE            = 0x437
	TCP_BBR_USE_LOWGAIN            = 0x433
	TCP_BBR_USE_RACK_CHEAT         = 0x450
	TCP_BBR_UTTER_MAX_TSO          = 0x452
	TCP_CA_NAME_MAX                = 0x10
	TCP_CCALGOOPT                  = 0x41
	TCP_CONGESTION                 = 0x40
	TCP_DATA_AFTER_CLOSE           = 0x44c
	TCP_DELACK                     = 0x48
	TCP_FASTOPEN                   = 0x401
	TCP_FASTOPEN_MAX_COOKIE_LEN    = 0x10
	TCP_FASTOPEN_MIN_COOKIE_LEN    = 0x4
	TCP_FASTOPEN_PSK_LEN           = 0x10
	TCP_FUNCTION_BLK               = 0x2000
	TCP_FUNCTION_NAME_LEN_MAX      = 0x20
	TCP_INFO                       = 0x20
	TCP_KEEPCNT                    = 0x400
	TCP_KEEPIDLE                   = 0x100
	TCP_KEEPINIT                   = 0x80
	TCP_KEEPINTVL                  = 0x200
	TCP_LOG                        = 0x22
	TCP_LOGBUF                     = 0x23
	TCP_LOGDUMP                    = 0x25
	TCP_LOGDUMPID                  = 0x26
	TCP_LOGID                      = 0x24
	TCP_LOG_ID_LEN                 = 0x40
	TCP_MAXBURST                   = 0x4
	TCP_MAXHLEN                    = 0x3c
	TCP_MAXOLEN                    = 0x28
	TCP_MAXSEG                     = 0x2
	TCP_MAXWIN                     = 0xffff
	TCP_MAX_SACK                   = 0x4
	TCP_MAX_WINSHIFT               = 0xe
	TCP_MD5SIG                     = 0x10
	TCP_MINMSS                     = 0xd8
	TCP_MSS                        = 0x218
	TCP_NODELAY                    = 0x1
	TCP_NOOPT                      = 0x8
	TCP_NOPUSH                     = 0x4
	TCP_PCAP_IN                    = 0x1000
	TCP_PCAP_OUT                   = 0x800
	TCP_RACK_EARLY_RECOV           = 0x423
	TCP_RACK_EARLY_SEG             = 0x424
	TCP_RACK_GP_INCREASE           = 0x446
	TCP_RACK_IDLE_REDUCE_HIGH      = 0x444
	TCP_RACK_MIN_PACE              = 0x445
	TCP_RACK_MIN_PACE_SEG          = 0x446
	TCP_RACK_MIN_TO                = 0x422
	TCP_RACK_PACE_ALWAYS           = 0x41f
	TCP_RACK_PACE_MAX_SEG          = 0x41e
	TCP_RACK_PACE_REDUCE           = 0x41d
	TCP_RACK_PKT_DELAY             = 0x428
	TCP_RACK_PROP                  = 0x41b
	TCP_RACK_PROP_RATE             = 0x420
	TCP_RACK_PRR_SENDALOT          = 0x421
	TCP_RACK_REORD_FADE            = 0x426
	TCP_RACK_REORD_THRESH          = 0x425
	TCP_RACK_TLP_INC_VAR           = 0x429
	TCP_RACK_TLP_REDUCE            = 0x41c
	TCP_RACK_TLP_THRESH            = 0x427
	TCP_RACK_TLP_USE               = 0x447
	TCP_VENDOR                     = 0x80000000
	TCSAFLUSH                      = 0x2
	TIMER_ABSTIME                  = 0x1
	TIMER_RELTIME                  = 0x0
	TIOCCBRK                       = 0x2000747a
	TIOCCDTR                       = 0x20007478
	TIOCCONS                       = 0x80047462
	TIOCDRAIN                      = 0x2000745e
	TIOCEXCL                       = 0x2000740d
	TIOCEXT                        = 0x80047460
	TIOCFLUSH                      = 0x80047410
	TIOCGDRAINWAIT                 = 0x40047456
	TIOCGETA                       = 0x402c7413
	TIOCGETD                       = 0x4004741a
	TIOCGPGRP                      = 0x40047477
	TIOCGPTN                       = 0x4004740f
	TIOCGSID                       = 0x40047463
	TIOCGWINSZ                     = 0x40087468
	TIOCMBIC                       = 0x8004746b
	TIOCMBIS                       = 0x8004746c
	TIOCMGDTRWAIT                  = 0x4004745a
	TIOCMGET                       = 0x4004746a
	TIOCMSDTRWAIT                  = 0x8004745b
	TIOCMSET                       = 0x8004746d
	TIOCM_CAR                      = 0x40
	TIOCM_CD                       = 0x40
	TIOCM_CTS                      = 0x20
	TIOCM_DCD                      = 0x40
	TIOCM_DSR                      = 0x100
	TIOCM_DTR                      = 0x2
	TIOCM_LE                       = 0x1
	TIOCM_RI                       = 0x80
	TIOCM_RNG                      = 0x80
	TIOCM_RTS                      = 0x4
	TIOCM_SR                       = 0x10
	TIOCM_ST                       = 0x8
	TIOCNOTTY                      = 0x20007471
	TIOCNXCL                       = 0x2000740e
	TIOCOUTQ                       = 0x40047473
	TIOCPKT                        = 0x80047470
	TIOCPKT_DATA                   = 0x0
	TIOCPKT_DOSTOP                 = 0x20
	TIOCPKT_FLUSHREAD              = 0x1
	TIOCPKT_FLUSHWRITE             = 0x2
	TIOCPKT_IOCTL                  = 0x40
	TIOCPKT_NOSTOP                 = 0x10
	TIOCPKT_START                  = 0x8
	TIOCPKT_STOP                   = 0x4
	TIOCPTMASTER                   = 0x2000741c
	TIOCSBRK                       = 0x2000747b
	TIOCSCTTY                      = 0x20007461
	TIOCSDRAINWAIT                 = 0x80047457
	TIOCSDTR                       = 0x20007479
	TIOCSETA                       = 0x802c7414
	TIOCSETAF                      = 0x802c7416
	TIOCSETAW                      = 0x802c7415
	TIOCSETD                       = 0x8004741b
	TIOCSIG                        = 0x2004745f
	TIOCSPGRP                      = 0x80047476
	TIOCSTART                      = 0x2000746e
	TIOCSTAT                       = 0x20007465
	TIOCSTI                        = 0x80017472
	TIOCSTOP                       = 0x2000746f
	TIOCSWINSZ                     = 0x80087467
	TIOCTIMESTAMP                  = 0x40107459
	TIOCUCNTL                      = 0x80047466
	TOSTOP                         = 0x400000
	UTIME_NOW                      = -0x1
	UTIME_OMIT                     = -0x2
	VDISCARD                       = 0xf
	VDSUSP                         = 0xb
	VEOF                           = 0x0
	VEOL                           = 0x1
	VEOL2                          = 0x2
	VERASE                         = 0x3
	VERASE2                        = 0x7
	VINTR                          = 0x8
	VKILL                          = 0x5
	VLNEXT                         = 0xe
	VMIN                           = 0x10
	VQUIT                          = 0x9
	VREPRINT                       = 0x6
	VSTART                         = 0xc
	VSTATUS                        = 0x12
	VSTOP                          = 0xd
	VSUSP                          = 0xa
	VTIME                          = 0x11
	VWERASE                        = 0x4
	WCONTINUED                     = 0x4
	WCOREFLAG                      = 0x80
	WEXITED                        = 0x10
	WLINUXCLONE                    = 0x80000000
	WNOHANG                        = 0x1
	WNOWAIT                        = 0x8
	WSTOPPED                       = 0x2
	WTRAPPED                       = 0x20
	WUNTRACED                      = 0x2
)

// Errors
const (
	E2BIG           = syscall.Errno(0x7)
	EACCES          = syscall.Errno(0xd)
	EADDRINUSE      = syscall.Errno(0x30)
	EADDRNOTAVAIL   = syscall.Errno(0x31)
	EAFNOSUPPORT    = syscall.Errno(0x2f)
	EAGAIN          = syscall.Errno(0x23)
	EALREADY        = syscall.Errno(0x25)
	EAUTH           = syscall.Errno(0x50)
	EBADF           = syscall.Errno(0x9)
	EBADMSG         = syscall.Errno(0x59)
	EBADRPC         = syscall.Errno(0x48)
	EBUSY           = syscall.Errno(0x10)
	ECANCELED       = syscall.Errno(0x55)
	ECAPMODE        = syscall.Errno(0x5e)
	ECHILD          = syscall.Errno(0xa)
	ECONNABORTED    = syscall.Errno(0x35)
	ECONNREFUSED    = syscall.Errno(0x3d)
	ECONNRESET      = syscall.Errno(0x36)
	EDEADLK         = syscall.Errno(0xb)
	EDESTADDRREQ    = syscall.Errno(0x27)
	EDOM            = syscall.Errno(0x21)
	EDOOFUS         = syscall.Errno(0x58)
	EDQUOT          = syscall.Errno(0x45)
	EEXIST          = syscall.Errno(0x11)
	EFAULT          = syscall.Errno(0xe)
	EFBIG           = syscall.Errno(0x1b)
	EFTYPE          = syscall.Errno(0x4f)
	EHOSTDOWN       = syscall.Errno(0x40)
	EHOSTUNREACH    = syscall.Errno(0x41)
	EIDRM           = syscall.Errno(0x52)
	EILSEQ          = syscall.Errno(0x56)
	EINPROGRESS     = syscall.Errno(0x24)
	EINTEGRITY      = syscall.Errno(0x61)
	EINTR           = syscall.Errno(0x4)
	EINVAL          = syscall.Errno(0x16)
	EIO             = syscall.Errno(0x5)
	EISCONN         = syscall.Errno(0x38)
	EISDIR          = syscall.Errno(0x15)
	ELAST           = syscall.Errno(0x61)
	ELOOP           = syscall.Errno(0x3e)
	EMFILE          = syscall.Errno(0x18)
	EMLINK          = syscall.Errno(0x1f)
	EMSGSIZE        = syscall.Errno(0x28)
	EMULTIHOP       = syscall.Errno(0x5a)
	ENAMETOOLONG    = syscall.Errno(0x3f)
	ENEEDAUTH       = syscall.Errno(0x51)
	ENETDOWN        = syscall.Errno(0x32)
	ENETRESET       = syscall.Errno(0x34)
	ENETUNREACH     = syscall.Errno(0x33)
	ENFILE          = syscall.Errno(0x17)
	ENOATTR         = syscall.Errno(0x57)
	ENOBUFS         = syscall.Errno(0x37)
	ENODEV          = syscall.Errno(0x13)
	ENOENT          = syscall.Errno(0x2)
	ENOEXEC         = syscall.Errno(0x8)
	ENOLCK          = syscall.Errno(0x4d)
	ENOLINK         = syscall.Errno(0x5b)
	ENOMEM          = syscall.Errno(0xc)
	ENOMSG          = syscall.Errno(0x53)
	ENOPROTOOPT     = syscall.Errno(0x2a)
	ENOSPC          = syscall.Errno(0x1c)
	ENOSYS          = syscall.Errno(0x4e)
	ENOTBLK         = syscall.Errno(0xf)
	ENOTCAPABLE     = syscall.Errno(0x5d)
	ENOTCONN        = syscall.Errno(0x39)
	ENOTDIR         = syscall.Errno(0x14)
	ENOTEMPTY       = syscall.Errno(0x42)
	ENOTRECOVERABLE = syscall.Errno(0x5f)
	ENOTSOCK        = syscall.Errno(0x26)
	ENOTSUP         = syscall.Errno(0x2d)
	ENOTTY          = syscall.Errno(0x19)
	ENXIO           = syscall.Errno(0x6)
	EOPNOTSUPP      = syscall.Errno(0x2d)
	EOVERFLOW       = syscall.Errno(0x54)
	EOWNERDEAD      = syscall.Errno(0x60)
	EPERM           = syscall.Errno(0x1)
	EPFNOSUPPORT    = syscall.Errno(0x2e)
	EPIPE           = syscall.Errno(0x20)
	EPROCLIM        = syscall.Errno(0x43)
	EPROCUNAVAIL    = syscall.Errno(0x4c)
	EPROGMISMATCH   = syscall.Errno(0x4b)
	EPROGUNAVAIL    = syscall.Errno(0x4a)
	EPROTO          = syscall.Errno(0x5c)
	EPROTONOSUPPORT = syscall.Errno(0x2b)
	EPROTOTYPE      = syscall.Errno(0x29)
	ERANGE          = syscall.Errno(0x22)
	EREMOTE         = syscall.Errno(0x47)
	EROFS           = syscall.Errno(0x1e)
	ERPCMISMATCH    = syscall.Errno(0x49)
	ESHUTDOWN       = syscall.Errno(0x3a)
	ESOCKTNOSUPPORT = syscall.Errno(0x2c)
	ESPIPE          = syscall.Errno(0x1d)
	ESRCH           = syscall.Errno(0x3)
	ESTALE          = syscall.Errno(0x46)
	ETIMEDOUT       = syscall.Errno(0x3c)
	ETOOMANYREFS    = syscall.Errno(0x3b)
	ETXTBSY         = syscall.Errno(0x1a)
	EUSERS          = syscall.Errno(0x44)
	EWOULDBLOCK     = syscall.Errno(0x23)
	EXDEV           = syscall.Errno(0x12)
)

// Signals
const (
	SIGABRT   = syscall.Signal(0x6)
	SIGALRM   = syscall.Signal(0xe)
	SIGBUS    = syscall.Signal(0xa)
	SIGCHLD   = syscall.Signal(0x14)
	SIGCONT   = syscall.Signal(0x13)
	SIGEMT    = syscall.Signal(0x7)
	SIGFPE    = syscall.Signal(0x8)
	SIGHUP    = syscall.Signal(0x1)
	SIGILL    = syscall.Signal(0x4)
	SIGINFO   = syscall.Signal(0x1d)
	SIGINT    = syscall.Signal(0x2)
	SIGIO     = syscall.Signal(0x17)
	SIGIOT    = syscall.Signal(0x6)
	SIGKILL   = syscall.Signal(0x9)
	SIGLIBRT  = syscall.Signal(0x21)
	SIGLWP    = syscall.Signal(0x20)
	SIGPIPE   = syscall.Signal(0xd)
	SIGPROF   = syscall.Signal(0x1b)
	SIGQUIT   = syscall.Signal(0x3)
	SIGSEGV   = syscall.Signal(0xb)
	SIGSTOP   = syscall.Signal(0x11)
	SIGSYS    = syscall.Signal(0xc)
	SIGTERM   = syscall.Signal(0xf)
	SIGTHR    = syscall.Signal(0x20)
	SIGTRAP   = syscall.Signal(0x5)
	SIGTSTP   = syscall.Signal(0x12)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x10)
	SIGUSR1   = syscall.Signal(0x1e)
	SIGUSR2   = syscall.Signal(0x1f)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "device not configured"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EDEADLK", "resource deadlock avoided"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "cross-device link"},
	{19, "ENODEV", "operation not supported by device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "result too large"},
	{35, "EWOULDBLOCK", "resource temporarily unavailable"},
	{36, "EINPROGRESS", "operation now in progress"},
	{37, "EALREADY", "operation already in progress"},
	{38, "ENOTSOCK", "socket operation on non-socket"},
	{39, "EDESTADDRREQ", "destination address required"},
	{40, "EMSGSIZE", "message too long"},
	{41, "EPROTOTYPE", "protocol wrong type for socket"},
	{42, "ENOPROTOOPT", "protocol not available"},
	{43, "EPROTONOSUPPORT", "protocol not supported"},
	{44, "ESOCKTNOSUPPORT", "socket type not supported"},
	{45, "EOPNOTSUPP", "operation not supported"},
	{46, "EPFNOSUPPORT", "protocol family not supported"},
	{47, "EAFNOSUPPORT", "address family not supported by protocol family"},
	{48, "EADDRINUSE", "address already in use"},
	{49, "EADDRNOTAVAIL", "can't assign requested address"},
	{50, "ENETDOWN", "network is down"},
	{51, "ENETUNREACH", "network is unreachable"},
	{52, "ENETRESET", "network dropped connection on reset"},
	{53, "ECONNABORTED", "software caused connection abort"},
	{54, "ECONNRESET", "connection reset by peer"},
	{55, "ENOBUFS", "no buffer space available"},
	{56, "EISCONN", "socket is already connected"},
	{57, "ENOTCONN", "socket is not connected"},
	{58, "ESHUTDOWN", "can't send after socket shutdown"},
	{59, "ETOOMANYREFS", "too many references: can't splice"},
	{60, "ETIMEDOUT", "operation timed out"},
	{61, "ECONNREFUSED", "connection refused"},
	{62, "ELOOP", "too many levels of symbolic links"},
	{63, "ENAMETOOLONG", "file name too long"},
	{64, "EHOSTDOWN", "host is down"},
	{65, "EHOSTUNREACH", "no route to host"},
	{66, "ENOTEMPTY", "directory not empty"},
	{67, "EPROCLIM", "too many processes"},
	{68, "EUSERS", "too many users"},
	{69, "EDQUOT", "disc quota exceeded"},
	{70, "ESTALE", "stale NFS file handle"},
	{71, "EREMOTE", "too many levels of remote in path"},
	{72, "EBADRPC", "RPC struct is bad"},
	{73, "ERPCMISMATCH", "RPC version wrong"},
	{74, "EPROGUNAVAIL", "RPC prog. not avail"},
	{75, "EPROGMISMATCH", "program version wrong"},
	{76, "EPROCUNAVAIL", "bad procedure for program"},
	{77, "ENOLCK", "no locks available"},
	{78, "ENOSYS", "function not implemented"},
	{79, "EFTYPE", "inappropriate file type or format"},
	{80, "EAUTH", "authentication error"},
	{81, "ENEEDAUTH", "need authenticator"},
	{82, "EIDRM", "identifier removed"},
	{83, "ENOMSG", "no message of desired type"},
	{84, "EOVERFLOW", "value too large to be stored in data type"},
	{85, "ECANCELED", "operation canceled"},
	{86, "EILSEQ", "illegal byte sequence"},
	{87, "ENOATTR", "attribute not found"},
	{88, "EDOOFUS", "programming error"},
	{89, "EBADMSG", "bad message"},
	{90, "EMULTIHOP", "multihop attempted"},
	{91, "ENOLINK", "link has been severed"},
	{92, "EPROTO", "protocol error"},
	{93, "ENOTCAPABLE", "capabilities insufficient"},
	{94, "ECAPMODE", "not permitted in capability mode"},
	{95, "ENOTRECOVERABLE", "state not recoverable"},
	{96, "EOWNERDEAD", "previous owner died"},
	{97, "EINTEGRITY", "integrity check failed"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/BPT trap"},
	{6, "SIGIOT", "abort trap"},
	{7, "SIGEMT", "EMT trap"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus error"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGSYS", "bad system call"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGURG", "urgent I/O condition"},
	{17, "SIGSTOP", "suspended (signal)"},
	{18, "SIGTSTP", "suspended"},
	{19, "SIGCONT", "continued"},
	{20, "SIGCHLD", "child exited"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGIO", "I/O possible"},
	{24, "SIGXCPU", "cputime limit exceeded"},
	{25, "SIGXFSZ", "filesize limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window size changes"},
	{29, "SIGINFO", "information request"},
	{30, "SIGUSR1", "user defined signal 1"},
	{31, "SIGUSR2", "user defined signal 2"},
	{32, "SIGTHR", "unknown signal"},
	{33, "SIGLIBRT", "unknown signal"},
}
 07070100000E27000081A4000000000000000000000001645E367C00013CD8000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go   // mkerrors.sh
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build arm && freebsd
// +build arm,freebsd

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- _const.go

package unix

import "syscall"

const (
	AF_APPLETALK                   = 0x10
	AF_ARP                         = 0x23
	AF_ATM                         = 0x1e
	AF_BLUETOOTH                   = 0x24
	AF_CCITT                       = 0xa
	AF_CHAOS                       = 0x5
	AF_CNT                         = 0x15
	AF_COIP                        = 0x14
	AF_DATAKIT                     = 0x9
	AF_DECnet                      = 0xc
	AF_DLI                         = 0xd
	AF_E164                        = 0x1a
	AF_ECMA                        = 0x8
	AF_HYLINK                      = 0xf
	AF_IEEE80211                   = 0x25
	AF_IMPLINK                     = 0x3
	AF_INET                        = 0x2
	AF_INET6                       = 0x1c
	AF_INET6_SDP                   = 0x2a
	AF_INET_SDP                    = 0x28
	AF_IPX                         = 0x17
	AF_ISDN                        = 0x1a
	AF_ISO                         = 0x7
	AF_LAT                         = 0xe
	AF_LINK                        = 0x12
	AF_LOCAL                       = 0x1
	AF_MAX                         = 0x2a
	AF_NATM                        = 0x1d
	AF_NETBIOS                     = 0x6
	AF_NETGRAPH                    = 0x20
	AF_OSI                         = 0x7
	AF_PUP                         = 0x4
	AF_ROUTE                       = 0x11
	AF_SCLUSTER                    = 0x22
	AF_SIP                         = 0x18
	AF_SLOW                        = 0x21
	AF_SNA                         = 0xb
	AF_UNIX                        = 0x1
	AF_UNSPEC                      = 0x0
	AF_VENDOR00                    = 0x27
	AF_VENDOR01                    = 0x29
	AF_VENDOR02                    = 0x2b
	AF_VENDOR03                    = 0x2d
	AF_VENDOR04                    = 0x2f
	AF_VENDOR05                    = 0x31
	AF_VENDOR06                    = 0x33
	AF_VENDOR07                    = 0x35
	AF_VENDOR08                    = 0x37
	AF_VENDOR09                    = 0x39
	AF_VENDOR10                    = 0x3b
	AF_VENDOR11                    = 0x3d
	AF_VENDOR12                    = 0x3f
	AF_VENDOR13                    = 0x41
	AF_VENDOR14                    = 0x43
	AF_VENDOR15                    = 0x45
	AF_VENDOR16                    = 0x47
	AF_VENDOR17                    = 0x49
	AF_VENDOR18                    = 0x4b
	AF_VENDOR19                    = 0x4d
	AF_VENDOR20                    = 0x4f
	AF_VENDOR21                    = 0x51
	AF_VENDOR22                    = 0x53
	AF_VENDOR23                    = 0x55
	AF_VENDOR24                    = 0x57
	AF_VENDOR25                    = 0x59
	AF_VENDOR26                    = 0x5b
	AF_VENDOR27                    = 0x5d
	AF_VENDOR28                    = 0x5f
	AF_VENDOR29                    = 0x61
	AF_VENDOR30                    = 0x63
	AF_VENDOR31                    = 0x65
	AF_VENDOR32                    = 0x67
	AF_VENDOR33                    = 0x69
	AF_VENDOR34                    = 0x6b
	AF_VENDOR35                    = 0x6d
	AF_VENDOR36                    = 0x6f
	AF_VENDOR37                    = 0x71
	AF_VENDOR38                    = 0x73
	AF_VENDOR39                    = 0x75
	AF_VENDOR40                    = 0x77
	AF_VENDOR41                    = 0x79
	AF_VENDOR42                    = 0x7b
	AF_VENDOR43                    = 0x7d
	AF_VENDOR44                    = 0x7f
	AF_VENDOR45                    = 0x81
	AF_VENDOR46                    = 0x83
	AF_VENDOR47                    = 0x85
	ALTWERASE                      = 0x200
	B0                             = 0x0
	B110                           = 0x6e
	B115200                        = 0x1c200
	B1200                          = 0x4b0
	B134                           = 0x86
	B14400                         = 0x3840
	B150                           = 0x96
	B1800                          = 0x708
	B19200                         = 0x4b00
	B200                           = 0xc8
	B230400                        = 0x38400
	B2400                          = 0x960
	B28800                         = 0x7080
	B300                           = 0x12c
	B38400                         = 0x9600
	B460800                        = 0x70800
	B4800                          = 0x12c0
	B50                            = 0x32
	B57600                         = 0xe100
	B600                           = 0x258
	B7200                          = 0x1c20
	B75                            = 0x4b
	B76800                         = 0x12c00
	B921600                        = 0xe1000
	B9600                          = 0x2580
	BIOCFEEDBACK                   = 0x8004427c
	BIOCFLUSH                      = 0x20004268
	BIOCGBLEN                      = 0x40044266
	BIOCGDIRECTION                 = 0x40044276
	BIOCGDLT                       = 0x4004426a
	BIOCGDLTLIST                   = 0xc0084279
	BIOCGETBUFMODE                 = 0x4004427d
	BIOCGETIF                      = 0x4020426b
	BIOCGETZMAX                    = 0x4004427f
	BIOCGHDRCMPLT                  = 0x40044274
	BIOCGRSIG                      = 0x40044272
	BIOCGRTIMEOUT                  = 0x4010426e
	BIOCGSEESENT                   = 0x40044276
	BIOCGSTATS                     = 0x4008426f
	BIOCGTSTAMP                    = 0x40044283
	BIOCIMMEDIATE                  = 0x80044270
	BIOCLOCK                       = 0x2000427a
	BIOCPROMISC                    = 0x20004269
	BIOCROTZBUF                    = 0x400c4280
	BIOCSBLEN                      = 0xc0044266
	BIOCSDIRECTION                 = 0x80044277
	BIOCSDLT                       = 0x80044278
	BIOCSETBUFMODE                 = 0x8004427e
	BIOCSETF                       = 0x80084267
	BIOCSETFNR                     = 0x80084282
	BIOCSETIF                      = 0x8020426c
	BIOCSETVLANPCP                 = 0x80044285
	BIOCSETWF                      = 0x8008427b
	BIOCSETZBUF                    = 0x800c4281
	BIOCSHDRCMPLT                  = 0x80044275
	BIOCSRSIG                      = 0x80044273
	BIOCSRTIMEOUT                  = 0x8010426d
	BIOCSSEESENT                   = 0x80044277
	BIOCSTSTAMP                    = 0x80044284
	BIOCVERSION                    = 0x40044271
	BPF_A                          = 0x10
	BPF_ABS                        = 0x20
	BPF_ADD                        = 0x0
	BPF_ALIGNMENT                  = 0x4
	BPF_ALU                        = 0x4
	BPF_AND                        = 0x50
	BPF_B                          = 0x10
	BPF_BUFMODE_BUFFER             = 0x1
	BPF_BUFMODE_ZBUF               = 0x2
	BPF_DIV                        = 0x30
	BPF_H                          = 0x8
	BPF_IMM                        = 0x0
	BPF_IND                        = 0x40
	BPF_JA                         = 0x0
	BPF_JEQ                        = 0x10
	BPF_JGE                        = 0x30
	BPF_JGT                        = 0x20
	BPF_JMP                        = 0x5
	BPF_JSET                       = 0x40
	BPF_K                          = 0x0
	BPF_LD                         = 0x0
	BPF_LDX                        = 0x1
	BPF_LEN                        = 0x80
	BPF_LSH                        = 0x60
	BPF_MAJOR_VERSION              = 0x1
	BPF_MAXBUFSIZE                 = 0x80000
	BPF_MAXINSNS                   = 0x200
	BPF_MEM                        = 0x60
	BPF_MEMWORDS                   = 0x10
	BPF_MINBUFSIZE                 = 0x20
	BPF_MINOR_VERSION              = 0x1
	BPF_MISC                       = 0x7
	BPF_MOD                        = 0x90
	BPF_MSH                        = 0xa0
	BPF_MUL                        = 0x20
	BPF_NEG                        = 0x80
	BPF_OR                         = 0x40
	BPF_RELEASE                    = 0x30bb6
	BPF_RET                        = 0x6
	BPF_RSH                        = 0x70
	BPF_ST                         = 0x2
	BPF_STX                        = 0x3
	BPF_SUB                        = 0x10
	BPF_TAX                        = 0x0
	BPF_TXA                        = 0x80
	BPF_T_BINTIME                  = 0x2
	BPF_T_BINTIME_FAST             = 0x102
	BPF_T_BINTIME_MONOTONIC        = 0x202
	BPF_T_BINTIME_MONOTONIC_FAST   = 0x302
	BPF_T_FAST                     = 0x100
	BPF_T_FLAG_MASK                = 0x300
	BPF_T_FORMAT_MASK              = 0x3
	BPF_T_MICROTIME                = 0x0
	BPF_T_MICROTIME_FAST           = 0x100
	BPF_T_MICROTIME_MONOTONIC      = 0x200
	BPF_T_MICROTIME_MONOTONIC_FAST = 0x300
	BPF_T_MONOTONIC                = 0x200
	BPF_T_MONOTONIC_FAST           = 0x300
	BPF_T_NANOTIME                 = 0x1
	BPF_T_NANOTIME_FAST            = 0x101
	BPF_T_NANOTIME_MONOTONIC       = 0x201
	BPF_T_NANOTIME_MONOTONIC_FAST  = 0x301
	BPF_T_NONE                     = 0x3
	BPF_T_NORMAL                   = 0x0
	BPF_W                          = 0x0
	BPF_X                          = 0x8
	BPF_XOR                        = 0xa0
	BRKINT                         = 0x2
	CAP_ACCEPT                     = 0x200000020000000
	CAP_ACL_CHECK                  = 0x400000000010000
	CAP_ACL_DELETE                 = 0x400000000020000
	CAP_ACL_GET                    = 0x400000000040000
	CAP_ACL_SET                    = 0x400000000080000
	CAP_ALL0                       = 0x20007ffffffffff
	CAP_ALL1                       = 0x4000000001fffff
	CAP_BIND                       = 0x200000040000000
	CAP_BINDAT                     = 0x200008000000400
	CAP_CHFLAGSAT                  = 0x200000000001400
	CAP_CONNECT                    = 0x200000080000000
	CAP_CONNECTAT                  = 0x200010000000400
	CAP_CREATE                     = 0x200000000000040
	CAP_EVENT                      = 0x400000000000020
	CAP_EXTATTR_DELETE             = 0x400000000001000
	CAP_EXTATTR_GET                = 0x400000000002000
	CAP_EXTATTR_LIST               = 0x400000000004000
	CAP_EXTATTR_SET                = 0x400000000008000
	CAP_FCHDIR                     = 0x200000000000800
	CAP_FCHFLAGS                   = 0x200000000001000
	CAP_FCHMOD                     = 0x200000000002000
	CAP_FCHMODAT                   = 0x200000000002400
	CAP_FCHOWN                     = 0x200000000004000
	CAP_FCHOWNAT                   = 0x200000000004400
	CAP_FCNTL                      = 0x200000000008000
	CAP_FCNTL_ALL                  = 0x78
	CAP_FCNTL_GETFL                = 0x8
	CAP_FCNTL_GETOWN               = 0x20
	CAP_FCNTL_SETFL                = 0x10
	CAP_FCNTL_SETOWN               = 0x40
	CAP_FEXECVE                    = 0x200000000000080
	CAP_FLOCK                      = 0x200000000010000
	CAP_FPATHCONF                  = 0x200000000020000
	CAP_FSCK                       = 0x200000000040000
	CAP_FSTAT                      = 0x200000000080000
	CAP_FSTATAT                    = 0x200000000080400
	CAP_FSTATFS                    = 0x200000000100000
	CAP_FSYNC                      = 0x200000000000100
	CAP_FTRUNCATE                  = 0x200000000000200
	CAP_FUTIMES                    = 0x200000000200000
	CAP_FUTIMESAT                  = 0x200000000200400
	CAP_GETPEERNAME                = 0x200000100000000
	CAP_GETSOCKNAME                = 0x200000200000000
	CAP_GETSOCKOPT                 = 0x200000400000000
	CAP_IOCTL                      = 0x400000000000080
	CAP_IOCTLS_ALL                 = 0x7fffffff
	CAP_KQUEUE                     = 0x400000000100040
	CAP_KQUEUE_CHANGE              = 0x400000000100000
	CAP_KQUEUE_EVENT               = 0x400000000000040
	CAP_LINKAT_SOURCE              = 0x200020000000400
	CAP_LINKAT_TARGET              = 0x200000000400400
	CAP_LISTEN                     = 0x200000800000000
	CAP_LOOKUP                     = 0x200000000000400
	CAP_MAC_GET                    = 0x400000000000001
	CAP_MAC_SET                    = 0x400000000000002
	CAP_MKDIRAT                    = 0x200000000800400
	CAP_MKFIFOAT                   = 0x200000001000400
	CAP_MKNODAT                    = 0x200000002000400
	CAP_MMAP                       = 0x200000000000010
	CAP_MMAP_R                     = 0x20000000000001d
	CAP_MMAP_RW                    = 0x20000000000001f
	CAP_MMAP_RWX                   = 0x20000000000003f
	CAP_MMAP_RX                    = 0x20000000000003d
	CAP_MMAP_W                     = 0x20000000000001e
	CAP_MMAP_WX                    = 0x20000000000003e
	CAP_MMAP_X                     = 0x20000000000003c
	CAP_PDGETPID                   = 0x400000000000200
	CAP_PDKILL                     = 0x400000000000800
	CAP_PDWAIT                     = 0x400000000000400
	CAP_PEELOFF                    = 0x200001000000000
	CAP_POLL_EVENT                 = 0x400000000000020
	CAP_PREAD                      = 0x20000000000000d
	CAP_PWRITE                     = 0x20000000000000e
	CAP_READ                       = 0x200000000000001
	CAP_RECV                       = 0x200000000000001
	CAP_RENAMEAT_SOURCE            = 0x200000004000400
	CAP_RENAMEAT_TARGET            = 0x200040000000400
	CAP_RIGHTS_VERSION             = 0x0
	CAP_RIGHTS_VERSION_00          = 0x0
	CAP_SEEK                       = 0x20000000000000c
	CAP_SEEK_TELL                  = 0x200000000000004
	CAP_SEM_GETVALUE               = 0x400000000000004
	CAP_SEM_POST                   = 0x400000000000008
	CAP_SEM_WAIT                   = 0x400000000000010
	CAP_SEND                       = 0x200000000000002
	CAP_SETSOCKOPT                 = 0x200002000000000
	CAP_SHUTDOWN                   = 0x200004000000000
	CAP_SOCK_CLIENT                = 0x200007780000003
	CAP_SOCK_SERVER                = 0x200007f60000003
	CAP_SYMLINKAT                  = 0x200000008000400
	CAP_TTYHOOK                    = 0x400000000000100
	CAP_UNLINKAT                   = 0x200000010000400
	CAP_UNUSED0_44                 = 0x200080000000000
	CAP_UNUSED0_57                 = 0x300000000000000
	CAP_UNUSED1_22                 = 0x400000000200000
	CAP_UNUSED1_57                 = 0x500000000000000
	CAP_WRITE                      = 0x200000000000002
	CFLUSH                         = 0xf
	CLOCAL                         = 0x8000
	CLOCK_MONOTONIC                = 0x4
	CLOCK_MONOTONIC_FAST           = 0xc
	CLOCK_MONOTONIC_PRECISE        = 0xb
	CLOCK_PROCESS_CPUTIME_ID       = 0xf
	CLOCK_PROF                     = 0x2
	CLOCK_REALTIME                 = 0x0
	CLOCK_REALTIME_FAST            = 0xa
	CLOCK_REALTIME_PRECISE         = 0x9
	CLOCK_SECOND                   = 0xd
	CLOCK_THREAD_CPUTIME_ID        = 0xe
	CLOCK_UPTIME                   = 0x5
	CLOCK_UPTIME_FAST              = 0x8
	CLOCK_UPTIME_PRECISE           = 0x7
	CLOCK_VIRTUAL                  = 0x1
	CPUSTATES                      = 0x5
	CP_IDLE                        = 0x4
	CP_INTR                        = 0x3
	CP_NICE                        = 0x1
	CP_SYS                         = 0x2
	CP_USER                        = 0x0
	CREAD                          = 0x800
	CRTSCTS                        = 0x30000
	CS5                            = 0x0
	CS6                            = 0x100
	CS7                            = 0x200
	CS8                            = 0x300
	CSIZE                          = 0x300
	CSTART                         = 0x11
	CSTATUS                        = 0x14
	CSTOP                          = 0x13
	CSTOPB                         = 0x400
	CSUSP                          = 0x1a
	CTL_HW                         = 0x6
	CTL_KERN                       = 0x1
	CTL_MAXNAME                    = 0x18
	CTL_NET                        = 0x4
	DIOCGATTR                      = 0xc148648e
	DIOCGDELETE                    = 0x80106488
	DIOCGFLUSH                     = 0x20006487
	DIOCGFRONTSTUFF                = 0x40086486
	DIOCGFWHEADS                   = 0x40046483
	DIOCGFWSECTORS                 = 0x40046482
	DIOCGIDENT                     = 0x41006489
	DIOCGMEDIASIZE                 = 0x40086481
	DIOCGPHYSPATH                  = 0x4400648d
	DIOCGPROVIDERNAME              = 0x4400648a
	DIOCGSECTORSIZE                = 0x40046480
	DIOCGSTRIPEOFFSET              = 0x4008648c
	DIOCGSTRIPESIZE                = 0x4008648b
	DIOCSKERNELDUMP                = 0x804c6490
	DIOCSKERNELDUMP_FREEBSD11      = 0x80046485
	DIOCZONECMD                    = 0xc078648f
	DLT_A429                       = 0xb8
	DLT_A653_ICM                   = 0xb9
	DLT_AIRONET_HEADER             = 0x78
	DLT_AOS                        = 0xde
	DLT_APPLE_IP_OVER_IEEE1394     = 0x8a
	DLT_ARCNET                     = 0x7
	DLT_ARCNET_LINUX               = 0x81
	DLT_ATM_CLIP                   = 0x13
	DLT_ATM_RFC1483                = 0xb
	DLT_AURORA                     = 0x7e
	DLT_AX25                       = 0x3
	DLT_AX25_KISS                  = 0xca
	DLT_BACNET_MS_TP               = 0xa5
	DLT_BLUETOOTH_BREDR_BB         = 0xff
	DLT_BLUETOOTH_HCI_H4           = 0xbb
	DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9
	DLT_BLUETOOTH_LE_LL            = 0xfb
	DLT_BLUETOOTH_LE_LL_WITH_PHDR  = 0x100
	DLT_BLUETOOTH_LINUX_MONITOR    = 0xfe
	DLT_CAN20B                     = 0xbe
	DLT_CAN_SOCKETCAN              = 0xe3
	DLT_CHAOS                      = 0x5
	DLT_CHDLC                      = 0x68
	DLT_CISCO_IOS                  = 0x76
	DLT_CLASS_NETBSD_RAWAF         = 0x2240000
	DLT_C_HDLC                     = 0x68
	DLT_C_HDLC_WITH_DIR            = 0xcd
	DLT_DBUS                       = 0xe7
	DLT_DECT                       = 0xdd
	DLT_DISPLAYPORT_AUX            = 0x113
	DLT_DOCSIS                     = 0x8f
	DLT_DOCSIS31_XRA31             = 0x111
	DLT_DVB_CI                     = 0xeb
	DLT_ECONET                     = 0x73
	DLT_EN10MB                     = 0x1
	DLT_EN3MB                      = 0x2
	DLT_ENC                        = 0x6d
	DLT_EPON                       = 0x103
	DLT_ERF                        = 0xc5
	DLT_ERF_ETH                    = 0xaf
	DLT_ERF_POS                    = 0xb0
	DLT_ETHERNET_MPACKET           = 0x112
	DLT_FC_2                       = 0xe0
	DLT_FC_2_WITH_FRAME_DELIMS     = 0xe1
	DLT_FDDI                       = 0xa
	DLT_FLEXRAY                    = 0xd2
	DLT_FRELAY                     = 0x6b
	DLT_FRELAY_WITH_DIR            = 0xce
	DLT_GCOM_SERIAL                = 0xad
	DLT_GCOM_T1E1                  = 0xac
	DLT_GPF_F                      = 0xab
	DLT_GPF_T                      = 0xaa
	DLT_GPRS_LLC                   = 0xa9
	DLT_GSMTAP_ABIS                = 0xda
	DLT_GSMTAP_UM                  = 0xd9
	DLT_IBM_SN                     = 0x92
	DLT_IBM_SP                     = 0x91
	DLT_IEEE802                    = 0x6
	DLT_IEEE802_11                 = 0x69
	DLT_IEEE802_11_RADIO           = 0x7f
	DLT_IEEE802_11_RADIO_AVS       = 0xa3
	DLT_IEEE802_15_4               = 0xc3
	DLT_IEEE802_15_4_LINUX         = 0xbf
	DLT_IEEE802_15_4_NOFCS         = 0xe6
	DLT_IEEE802_15_4_NONASK_PHY    = 0xd7
	DLT_IEEE802_16_MAC_CPS         = 0xbc
	DLT_IEEE802_16_MAC_CPS_RADIO   = 0xc1
	DLT_INFINIBAND                 = 0xf7
	DLT_IPFILTER                   = 0x74
	DLT_IPMB_KONTRON               = 0xc7
	DLT_IPMB_LINUX                 = 0xd1
	DLT_IPMI_HPM_2                 = 0x104
	DLT_IPNET                      = 0xe2
	DLT_IPOIB                      = 0xf2
	DLT_IPV4                       = 0xe4
	DLT_IPV6                       = 0xe5
	DLT_IP_OVER_FC                 = 0x7a
	DLT_ISO_14443                  = 0x108
	DLT_JUNIPER_ATM1               = 0x89
	DLT_JUNIPER_ATM2               = 0x87
	DLT_JUNIPER_ATM_CEMIC          = 0xee
	DLT_JUNIPER_CHDLC              = 0xb5
	DLT_JUNIPER_ES                 = 0x84
	DLT_JUNIPER_ETHER              = 0xb2
	DLT_JUNIPER_FIBRECHANNEL       = 0xea
	DLT_JUNIPER_FRELAY             = 0xb4
	DLT_JUNIPER_GGSN               = 0x85
	DLT_JUNIPER_ISM                = 0xc2
	DLT_JUNIPER_MFR                = 0x86
	DLT_JUNIPER_MLFR               = 0x83
	DLT_JUNIPER_MLPPP              = 0x82
	DLT_JUNIPER_MONITOR            = 0xa4
	DLT_JUNIPER_PIC_PEER           = 0xae
	DLT_JUNIPER_PPP                = 0xb3
	DLT_JUNIPER_PPPOE              = 0xa7
	DLT_JUNIPER_PPPOE_ATM          = 0xa8
	DLT_JUNIPER_SERVICES           = 0x88
	DLT_JUNIPER_SRX_E2E            = 0xe9
	DLT_JUNIPER_ST                 = 0xc8
	DLT_JUNIPER_VP                 = 0xb7
	DLT_JUNIPER_VS                 = 0xe8
	DLT_LAPB_WITH_DIR              = 0xcf
	DLT_LAPD                       = 0xcb
	DLT_LIN                        = 0xd4
	DLT_LINUX_EVDEV                = 0xd8
	DLT_LINUX_IRDA                 = 0x90
	DLT_LINUX_LAPD                 = 0xb1
	DLT_LINUX_PPP_WITHDIRECTION    = 0xa6
	DLT_LINUX_SLL                  = 0x71
	DLT_LINUX_SLL2                 = 0x114
	DLT_LOOP                       = 0x6c
	DLT_LORATAP                    = 0x10e
	DLT_LTALK                      = 0x72
	DLT_MATCHING_MAX               = 0x114
	DLT_MATCHING_MIN               = 0x68
	DLT_MFR                        = 0xb6
	DLT_MOST                       = 0xd3
	DLT_MPEG_2_TS                  = 0xf3
	DLT_MPLS                       = 0xdb
	DLT_MTP2                       = 0x8c
	DLT_MTP2_WITH_PHDR             = 0x8b
	DLT_MTP3                       = 0x8d
	DLT_MUX27010                   = 0xec
	DLT_NETANALYZER                = 0xf0
	DLT_NETANALYZER_TRANSPARENT    = 0xf1
	DLT_NETLINK                    = 0xfd
	DLT_NFC_LLCP                   = 0xf5
	DLT_NFLOG                      = 0xef
	DLT_NG40                       = 0xf4
	DLT_NORDIC_BLE                 = 0x110
	DLT_NULL                       = 0x0
	DLT_OPENFLOW                   = 0x10b
	DLT_PCI_EXP                    = 0x7d
	DLT_PFLOG                      = 0x75
	DLT_PFSYNC                     = 0x79
	DLT_PKTAP                      = 0x102
	DLT_PPI                        = 0xc0
	DLT_PPP                        = 0x9
	DLT_PPP_BSDOS                  = 0xe
	DLT_PPP_ETHER                  = 0x33
	DLT_PPP_PPPD                   = 0xa6
	DLT_PPP_SERIAL                 = 0x32
	DLT_PPP_WITH_DIR               = 0xcc
	DLT_PPP_WITH_DIRECTION         = 0xa6
	DLT_PRISM_HEADER               = 0x77
	DLT_PROFIBUS_DL                = 0x101
	DLT_PRONET                     = 0x4
	DLT_RAIF1                      = 0xc6
	DLT_RAW                        = 0xc
	DLT_RDS                        = 0x109
	DLT_REDBACK_SMARTEDGE          = 0x20
	DLT_RIO                        = 0x7c
	DLT_RTAC_SERIAL                = 0xfa
	DLT_SCCP                       = 0x8e
	DLT_SCTP                       = 0xf8
	DLT_SDLC                       = 0x10c
	DLT_SITA                       = 0xc4
	DLT_SLIP                       = 0x8
	DLT_SLIP_BSDOS                 = 0xd
	DLT_STANAG_5066_D_PDU          = 0xed
	DLT_SUNATM                     = 0x7b
	DLT_SYMANTEC_FIREWALL          = 0x63
	DLT_TI_LLN_SNIFFER             = 0x10d
	DLT_TZSP                       = 0x80
	DLT_USB                        = 0xba
	DLT_USBPCAP                    = 0xf9
	DLT_USB_DARWIN                 = 0x10a
	DLT_USB_FREEBSD                = 0xba
	DLT_USB_LINUX                  = 0xbd
	DLT_USB_LINUX_MMAPPED          = 0xdc
	DLT_USER0                      = 0x93
	DLT_USER1                      = 0x94
	DLT_USER10                     = 0x9d
	DLT_USER11                     = 0x9e
	DLT_USER12                     = 0x9f
	DLT_USER13                     = 0xa0
	DLT_USER14                     = 0xa1
	DLT_USER15                     = 0xa2
	DLT_USER2                      = 0x95
	DLT_USER3                      = 0x96
	DLT_USER4                      = 0x97
	DLT_USER5                      = 0x98
	DLT_USER6                      = 0x99
	DLT_USER7                      = 0x9a
	DLT_USER8                      = 0x9b
	DLT_USER9                      = 0x9c
	DLT_VSOCK                      = 0x10f
	DLT_WATTSTOPPER_DLM            = 0x107
	DLT_WIHART                     = 0xdf
	DLT_WIRESHARK_UPPER_PDU        = 0xfc
	DLT_X2E_SERIAL                 = 0xd5
	DLT_X2E_XORAYA                 = 0xd6
	DLT_ZWAVE_R1_R2                = 0x105
	DLT_ZWAVE_R3                   = 0x106
	DT_BLK                         = 0x6
	DT_CHR                         = 0x2
	DT_DIR                         = 0x4
	DT_FIFO                        = 0x1
	DT_LNK                         = 0xa
	DT_REG                         = 0x8
	DT_SOCK                        = 0xc
	DT_UNKNOWN                     = 0x0
	DT_WHT                         = 0xe
	ECHO                           = 0x8
	ECHOCTL                        = 0x40
	ECHOE                          = 0x2
	ECHOK                          = 0x4
	ECHOKE                         = 0x1
	ECHONL                         = 0x10
	ECHOPRT                        = 0x20
	EVFILT_AIO                     = -0x3
	EVFILT_EMPTY                   = -0xd
	EVFILT_FS                      = -0x9
	EVFILT_LIO                     = -0xa
	EVFILT_PROC                    = -0x5
	EVFILT_PROCDESC                = -0x8
	EVFILT_READ                    = -0x1
	EVFILT_SENDFILE                = -0xc
	EVFILT_SIGNAL                  = -0x6
	EVFILT_SYSCOUNT                = 0xd
	EVFILT_TIMER                   = -0x7
	EVFILT_USER                    = -0xb
	EVFILT_VNODE                   = -0x4
	EVFILT_WRITE                   = -0x2
	EVNAMEMAP_NAME_SIZE            = 0x40
	EV_ADD                         = 0x1
	EV_CLEAR                       = 0x20
	EV_DELETE                      = 0x2
	EV_DISABLE                     = 0x8
	EV_DISPATCH                    = 0x80
	EV_DROP                        = 0x1000
	EV_ENABLE                      = 0x4
	EV_EOF                         = 0x8000
	EV_ERROR                       = 0x4000
	EV_FLAG1                       = 0x2000
	EV_FLAG2                       = 0x4000
	EV_FORCEONESHOT                = 0x100
	EV_ONESHOT                     = 0x10
	EV_RECEIPT                     = 0x40
	EV_SYSFLAGS                    = 0xf000
	EXTA                           = 0x4b00
	EXTATTR_MAXNAMELEN             = 0xff
	EXTATTR_NAMESPACE_EMPTY        = 0x0
	EXTATTR_NAMESPACE_SYSTEM       = 0x2
	EXTATTR_NAMESPACE_USER         = 0x1
	EXTB                           = 0x9600
	EXTPROC                        = 0x800
	FD_CLOEXEC                     = 0x1
	FD_SETSIZE                     = 0x400
	FLUSHO                         = 0x800000
	F_CANCEL                       = 0x5
	F_DUP2FD                       = 0xa
	F_DUP2FD_CLOEXEC               = 0x12
	F_DUPFD                        = 0x0
	F_DUPFD_CLOEXEC                = 0x11
	F_GETFD                        = 0x1
	F_GETFL                        = 0x3
	F_GETLK                        = 0xb
	F_GETOWN                       = 0x5
	F_OGETLK                       = 0x7
	F_OK                           = 0x0
	F_OSETLK                       = 0x8
	F_OSETLKW                      = 0x9
	F_RDAHEAD                      = 0x10
	F_RDLCK                        = 0x1
	F_READAHEAD                    = 0xf
	F_SETFD                        = 0x2
	F_SETFL                        = 0x4
	F_SETLK                        = 0xc
	F_SETLKW                       = 0xd
	F_SETLK_REMOTE                 = 0xe
	F_SETOWN                       = 0x6
	F_UNLCK                        = 0x2
	F_UNLCKSYS                     = 0x4
	F_WRLCK                        = 0x3
	HUPCL                          = 0x4000
	HW_MACHINE                     = 0x1
	ICANON                         = 0x100
	ICMP6_FILTER                   = 0x12
	ICRNL                          = 0x100
	IEXTEN                         = 0x400
	IFAN_ARRIVAL                   = 0x0
	IFAN_DEPARTURE                 = 0x1
	IFCAP_WOL_MAGIC                = 0x2000
	IFF_ALLMULTI                   = 0x200
	IFF_ALTPHYS                    = 0x4000
	IFF_BROADCAST                  = 0x2
	IFF_CANTCHANGE                 = 0x218f52
	IFF_CANTCONFIG                 = 0x10000
	IFF_DEBUG                      = 0x4
	IFF_DRV_OACTIVE                = 0x400
	IFF_DRV_RUNNING                = 0x40
	IFF_DYING                      = 0x200000
	IFF_LINK0                      = 0x1000
	IFF_LINK1                      = 0x2000
	IFF_LINK2                      = 0x4000
	IFF_LOOPBACK                   = 0x8
	IFF_MONITOR                    = 0x40000
	IFF_MULTICAST                  = 0x8000
	IFF_NOARP                      = 0x80
	IFF_NOGROUP                    = 0x800000
	IFF_OACTIVE                    = 0x400
	IFF_POINTOPOINT                = 0x10
	IFF_PPROMISC                   = 0x20000
	IFF_PROMISC                    = 0x100
	IFF_RENAMING                   = 0x400000
	IFF_RUNNING                    = 0x40
	IFF_SIMPLEX                    = 0x800
	IFF_STATICARP                  = 0x80000
	IFF_UP                         = 0x1
	IFNAMSIZ                       = 0x10
	IFT_BRIDGE                     = 0xd1
	IFT_CARP                       = 0xf8
	IFT_IEEE1394                   = 0x90
	IFT_INFINIBAND                 = 0xc7
	IFT_L2VLAN                     = 0x87
	IFT_L3IPVLAN                   = 0x88
	IFT_PPP                        = 0x17
	IFT_PROPVIRTUAL                = 0x35
	IGNBRK                         = 0x1
	IGNCR                          = 0x80
	IGNPAR                         = 0x4
	IMAXBEL                        = 0x2000
	INLCR                          = 0x40
	INPCK                          = 0x10
	IN_CLASSA_HOST                 = 0xffffff
	IN_CLASSA_MAX                  = 0x80
	IN_CLASSA_NET                  = 0xff000000
	IN_CLASSA_NSHIFT               = 0x18
	IN_CLASSB_HOST                 = 0xffff
	IN_CLASSB_MAX                  = 0x10000
	IN_CLASSB_NET                  = 0xffff0000
	IN_CLASSB_NSHIFT               = 0x10
	IN_CLASSC_HOST                 = 0xff
	IN_CLASSC_NET                  = 0xffffff00
	IN_CLASSC_NSHIFT               = 0x8
	IN_CLASSD_HOST                 = 0xfffffff
	IN_CLASSD_NET                  = 0xf0000000
	IN_CLASSD_NSHIFT               = 0x1c
	IN_LOOPBACKNET                 = 0x7f
	IN_RFC3021_MASK                = 0xfffffffe
	IPPROTO_3PC                    = 0x22
	IPPROTO_ADFS                   = 0x44
	IPPROTO_AH                     = 0x33
	IPPROTO_AHIP                   = 0x3d
	IPPROTO_APES                   = 0x63
	IPPROTO_ARGUS                  = 0xd
	IPPROTO_AX25                   = 0x5d
	IPPROTO_BHA                    = 0x31
	IPPROTO_BLT                    = 0x1e
	IPPROTO_BRSATMON               = 0x4c
	IPPROTO_CARP                   = 0x70
	IPPROTO_CFTP                   = 0x3e
	IPPROTO_CHAOS                  = 0x10
	IPPROTO_CMTP                   = 0x26
	IPPROTO_CPHB                   = 0x49
	IPPROTO_CPNX                   = 0x48
	IPPROTO_DCCP                   = 0x21
	IPPROTO_DDP                    = 0x25
	IPPROTO_DGP                    = 0x56
	IPPROTO_DIVERT                 = 0x102
	IPPROTO_DONE                   = 0x101
	IPPROTO_DSTOPTS                = 0x3c
	IPPROTO_EGP                    = 0x8
	IPPROTO_EMCON                  = 0xe
	IPPROTO_ENCAP                  = 0x62
	IPPROTO_EON                    = 0x50
	IPPROTO_ESP                    = 0x32
	IPPROTO_ETHERIP                = 0x61
	IPPROTO_FRAGMENT               = 0x2c
	IPPROTO_GGP                    = 0x3
	IPPROTO_GMTP                   = 0x64
	IPPROTO_GRE                    = 0x2f
	IPPROTO_HELLO                  = 0x3f
	IPPROTO_HIP                    = 0x8b
	IPPROTO_HMP                    = 0x14
	IPPROTO_HOPOPTS                = 0x0
	IPPROTO_ICMP                   = 0x1
	IPPROTO_ICMPV6                 = 0x3a
	IPPROTO_IDP                    = 0x16
	IPPROTO_IDPR                   = 0x23
	IPPROTO_IDRP                   = 0x2d
	IPPROTO_IGMP                   = 0x2
	IPPROTO_IGP                    = 0x55
	IPPROTO_IGRP                   = 0x58
	IPPROTO_IL                     = 0x28
	IPPROTO_INLSP                  = 0x34
	IPPROTO_INP                    = 0x20
	IPPROTO_IP                     = 0x0
	IPPROTO_IPCOMP                 = 0x6c
	IPPROTO_IPCV                   = 0x47
	IPPROTO_IPEIP                  = 0x5e
	IPPROTO_IPIP                   = 0x4
	IPPROTO_IPPC                   = 0x43
	IPPROTO_IPV4                   = 0x4
	IPPROTO_IPV6                   = 0x29
	IPPROTO_IRTP                   = 0x1c
	IPPROTO_KRYPTOLAN              = 0x41
	IPPROTO_LARP                   = 0x5b
	IPPROTO_LEAF1                  = 0x19
	IPPROTO_LEAF2                  = 0x1a
	IPPROTO_MAX                    = 0x100
	IPPROTO_MEAS                   = 0x13
	IPPROTO_MH                     = 0x87
	IPPROTO_MHRP                   = 0x30
	IPPROTO_MICP                   = 0x5f
	IPPROTO_MOBILE                 = 0x37
	IPPROTO_MPLS                   = 0x89
	IPPROTO_MTP                    = 0x5c
	IPPROTO_MUX                    = 0x12
	IPPROTO_ND                     = 0x4d
	IPPROTO_NHRP                   = 0x36
	IPPROTO_NONE                   = 0x3b
	IPPROTO_NSP                    = 0x1f
	IPPROTO_NVPII                  = 0xb
	IPPROTO_OLD_DIVERT             = 0xfe
	IPPROTO_OSPFIGP                = 0x59
	IPPROTO_PFSYNC                 = 0xf0
	IPPROTO_PGM                    = 0x71
	IPPROTO_PIGP                   = 0x9
	IPPROTO_PIM                    = 0x67
	IPPROTO_PRM                    = 0x15
	IPPROTO_PUP                    = 0xc
	IPPROTO_PVP                    = 0x4b
	IPPROTO_RAW                    = 0xff
	IPPROTO_RCCMON                 = 0xa
	IPPROTO_RDP                    = 0x1b
	IPPROTO_RESERVED_253           = 0xfd
	IPPROTO_RESERVED_254           = 0xfe
	IPPROTO_ROUTING                = 0x2b
	IPPROTO_RSVP                   = 0x2e
	IPPROTO_RVD                    = 0x42
	IPPROTO_SATEXPAK               = 0x40
	IPPROTO_SATMON                 = 0x45
	IPPROTO_SCCSP                  = 0x60
	IPPROTO_SCTP                   = 0x84
	IPPROTO_SDRP                   = 0x2a
	IPPROTO_SEND                   = 0x103
	IPPROTO_SHIM6                  = 0x8c
	IPPROTO_SKIP                   = 0x39
	IPPROTO_SPACER                 = 0x7fff
	IPPROTO_SRPC                   = 0x5a
	IPPROTO_ST                     = 0x7
	IPPROTO_SVMTP                  = 0x52
	IPPROTO_SWIPE                  = 0x35
	IPPROTO_TCF                    = 0x57
	IPPROTO_TCP                    = 0x6
	IPPROTO_TLSP                   = 0x38
	IPPROTO_TP                     = 0x1d
	IPPROTO_TPXX                   = 0x27
	IPPROTO_TRUNK1                 = 0x17
	IPPROTO_TRUNK2                 = 0x18
	IPPROTO_TTP                    = 0x54
	IPPROTO_UDP                    = 0x11
	IPPROTO_UDPLITE                = 0x88
	IPPROTO_VINES                  = 0x53
	IPPROTO_VISA                   = 0x46
	IPPROTO_VMTP                   = 0x51
	IPPROTO_WBEXPAK                = 0x4f
	IPPROTO_WBMON                  = 0x4e
	IPPROTO_WSN                    = 0x4a
	IPPROTO_XNET                   = 0xf
	IPPROTO_XTP                    = 0x24
	IPV6_AUTOFLOWLABEL             = 0x3b
	IPV6_BINDANY                   = 0x40
	IPV6_BINDMULTI                 = 0x41
	IPV6_BINDV6ONLY                = 0x1b
	IPV6_CHECKSUM                  = 0x1a
	IPV6_DEFAULT_MULTICAST_HOPS    = 0x1
	IPV6_DEFAULT_MULTICAST_LOOP    = 0x1
	IPV6_DEFHLIM                   = 0x40
	IPV6_DONTFRAG                  = 0x3e
	IPV6_DSTOPTS                   = 0x32
	IPV6_FLOWID                    = 0x43
	IPV6_FLOWINFO_MASK             = 0xffffff0f
	IPV6_FLOWLABEL_LEN             = 0x14
	IPV6_FLOWLABEL_MASK            = 0xffff0f00
	IPV6_FLOWTYPE                  = 0x44
	IPV6_FRAGTTL                   = 0x78
	IPV6_FW_ADD                    = 0x1e
	IPV6_FW_DEL                    = 0x1f
	IPV6_FW_FLUSH                  = 0x20
	IPV6_FW_GET                    = 0x22
	IPV6_FW_ZERO                   = 0x21
	IPV6_HLIMDEC                   = 0x1
	IPV6_HOPLIMIT                  = 0x2f
	IPV6_HOPOPTS                   = 0x31
	IPV6_IPSEC_POLICY              = 0x1c
	IPV6_JOIN_GROUP                = 0xc
	IPV6_LEAVE_GROUP               = 0xd
	IPV6_MAXHLIM                   = 0xff
	IPV6_MAXOPTHDR                 = 0x800
	IPV6_MAXPACKET                 = 0xffff
	IPV6_MAX_GROUP_SRC_FILTER      = 0x200
	IPV6_MAX_MEMBERSHIPS           = 0xfff
	IPV6_MAX_SOCK_SRC_FILTER       = 0x80
	IPV6_MMTU                      = 0x500
	IPV6_MSFILTER                  = 0x4a
	IPV6_MULTICAST_HOPS            = 0xa
	IPV6_MULTICAST_IF              = 0x9
	IPV6_MULTICAST_LOOP            = 0xb
	IPV6_NEXTHOP                   = 0x30
	IPV6_ORIGDSTADDR               = 0x48
	IPV6_PATHMTU                   = 0x2c
	IPV6_PKTINFO                   = 0x2e
	IPV6_PORTRANGE                 = 0xe
	IPV6_PORTRANGE_DEFAULT         = 0x0
	IPV6_PORTRANGE_HIGH            = 0x1
	IPV6_PORTRANGE_LOW             = 0x2
	IPV6_PREFER_TEMPADDR           = 0x3f
	IPV6_RECVDSTOPTS               = 0x28
	IPV6_RECVFLOWID                = 0x46
	IPV6_RECVHOPLIMIT              = 0x25
	IPV6_RECVHOPOPTS               = 0x27
	IPV6_RECVORIGDSTADDR           = 0x48
	IPV6_RECVPATHMTU               = 0x2b
	IPV6_RECVPKTINFO               = 0x24
	IPV6_RECVRSSBUCKETID           = 0x47
	IPV6_RECVRTHDR                 = 0x26
	IPV6_RECVTCLASS                = 0x39
	IPV6_RSSBUCKETID               = 0x45
	IPV6_RSS_LISTEN_BUCKET         = 0x42
	IPV6_RTHDR                     = 0x33
	IPV6_RTHDRDSTOPTS              = 0x23
	IPV6_RTHDR_LOOSE               = 0x0
	IPV6_RTHDR_STRICT              = 0x1
	IPV6_RTHDR_TYPE_0              = 0x0
	IPV6_SOCKOPT_RESERVED1         = 0x3
	IPV6_TCLASS                    = 0x3d
	IPV6_UNICAST_HOPS              = 0x4
	IPV6_USE_MIN_MTU               = 0x2a
	IPV6_V6ONLY                    = 0x1b
	IPV6_VERSION                   = 0x60
	IPV6_VERSION_MASK              = 0xf0
	IPV6_VLAN_PCP                  = 0x4b
	IP_ADD_MEMBERSHIP              = 0xc
	IP_ADD_SOURCE_MEMBERSHIP       = 0x46
	IP_BINDANY                     = 0x18
	IP_BINDMULTI                   = 0x19
	IP_BLOCK_SOURCE                = 0x48
	IP_DEFAULT_MULTICAST_LOOP      = 0x1
	IP_DEFAULT_MULTICAST_TTL       = 0x1
	IP_DF                          = 0x4000
	IP_DONTFRAG                    = 0x43
	IP_DROP_MEMBERSHIP             = 0xd
	IP_DROP_SOURCE_MEMBERSHIP      = 0x47
	IP_DUMMYNET3                   = 0x31
	IP_DUMMYNET_CONFIGURE          = 0x3c
	IP_DUMMYNET_DEL                = 0x3d
	IP_DUMMYNET_FLUSH              = 0x3e
	IP_DUMMYNET_GET                = 0x40
	IP_FLOWID                      = 0x5a
	IP_FLOWTYPE                    = 0x5b
	IP_FW3                         = 0x30
	IP_FW_ADD                      = 0x32
	IP_FW_DEL                      = 0x33
	IP_FW_FLUSH                    = 0x34
	IP_FW_GET                      = 0x36
	IP_FW_NAT_CFG                  = 0x38
	IP_FW_NAT_DEL                  = 0x39
	IP_FW_NAT_GET_CONFIG           = 0x3a
	IP_FW_NAT_GET_LOG              = 0x3b
	IP_FW_RESETLOG                 = 0x37
	IP_FW_TABLE_ADD                = 0x28
	IP_FW_TABLE_DEL                = 0x29
	IP_FW_TABLE_FLUSH              = 0x2a
	IP_FW_TABLE_GETSIZE            = 0x2b
	IP_FW_TABLE_LIST               = 0x2c
	IP_FW_ZERO                     = 0x35
	IP_HDRINCL                     = 0x2
	IP_IPSEC_POLICY                = 0x15
	IP_MAXPACKET                   = 0xffff
	IP_MAX_GROUP_SRC_FILTER        = 0x200
	IP_MAX_MEMBERSHIPS             = 0xfff
	IP_MAX_SOCK_MUTE_FILTER        = 0x80
	IP_MAX_SOCK_SRC_FILTER         = 0x80
	IP_MF                          = 0x2000
	IP_MINTTL                      = 0x42
	IP_MSFILTER                    = 0x4a
	IP_MSS                         = 0x240
	IP_MULTICAST_IF                = 0x9
	IP_MULTICAST_LOOP              = 0xb
	IP_MULTICAST_TTL               = 0xa
	IP_MULTICAST_VIF               = 0xe
	IP_OFFMASK                     = 0x1fff
	IP_ONESBCAST                   = 0x17
	IP_OPTIONS                     = 0x1
	IP_ORIGDSTADDR                 = 0x1b
	IP_PORTRANGE                   = 0x13
	IP_PORTRANGE_DEFAULT           = 0x0
	IP_PORTRANGE_HIGH              = 0x1
	IP_PORTRANGE_LOW               = 0x2
	IP_RECVDSTADDR                 = 0x7
	IP_RECVFLOWID                  = 0x5d
	IP_RECVIF                      = 0x14
	IP_RECVOPTS                    = 0x5
	IP_RECVORIGDSTADDR             = 0x1b
	IP_RECVRETOPTS                 = 0x6
	IP_RECVRSSBUCKETID             = 0x5e
	IP_RECVTOS                     = 0x44
	IP_RECVTTL                     = 0x41
	IP_RETOPTS                     = 0x8
	IP_RF                          = 0x8000
	IP_RSSBUCKETID                 = 0x5c
	IP_RSS_LISTEN_BUCKET           = 0x1a
	IP_RSVP_OFF                    = 0x10
	IP_RSVP_ON                     = 0xf
	IP_RSVP_VIF_OFF                = 0x12
	IP_RSVP_VIF_ON                 = 0x11
	IP_SENDSRCADDR                 = 0x7
	IP_TOS                         = 0x3
	IP_TTL                         = 0x4
	IP_UNBLOCK_SOURCE              = 0x49
	IP_VLAN_PCP                    = 0x4b
	ISIG                           = 0x80
	ISTRIP                         = 0x20
	ITIMER_PROF                    = 0x2
	ITIMER_REAL                    = 0x0
	ITIMER_VIRTUAL                 = 0x1
	IXANY                          = 0x800
	IXOFF                          = 0x400
	IXON                           = 0x200
	KERN_HOSTNAME                  = 0xa
	KERN_OSRELEASE                 = 0x2
	KERN_OSTYPE                    = 0x1
	KERN_VERSION                   = 0x4
	LOCAL_CONNWAIT                 = 0x4
	LOCAL_CREDS                    = 0x2
	LOCAL_PEERCRED                 = 0x1
	LOCAL_VENDOR                   = 0x80000000
	LOCK_EX                        = 0x2
	LOCK_NB                        = 0x4
	LOCK_SH                        = 0x1
	LOCK_UN                        = 0x8
	MADV_AUTOSYNC                  = 0x7
	MADV_CORE                      = 0x9
	MADV_DONTNEED                  = 0x4
	MADV_FREE                      = 0x5
	MADV_NOCORE                    = 0x8
	MADV_NORMAL                    = 0x0
	MADV_NOSYNC                    = 0x6
	MADV_PROTECT                   = 0xa
	MADV_RANDOM                    = 0x1
	MADV_SEQUENTIAL                = 0x2
	MADV_WILLNEED                  = 0x3
	MAP_ALIGNED_SUPER              = 0x1000000
	MAP_ALIGNMENT_MASK             = -0x1000000
	MAP_ALIGNMENT_SHIFT            = 0x18
	MAP_ANON                       = 0x1000
	MAP_ANONYMOUS                  = 0x1000
	MAP_COPY                       = 0x2
	MAP_EXCL                       = 0x4000
	MAP_FILE                       = 0x0
	MAP_FIXED                      = 0x10
	MAP_GUARD                      = 0x2000
	MAP_HASSEMAPHORE               = 0x200
	MAP_NOCORE                     = 0x20000
	MAP_NOSYNC                     = 0x800
	MAP_PREFAULT_READ              = 0x40000
	MAP_PRIVATE                    = 0x2
	MAP_RESERVED0020               = 0x20
	MAP_RESERVED0040               = 0x40
	MAP_RESERVED0080               = 0x80
	MAP_RESERVED0100               = 0x100
	MAP_SHARED                     = 0x1
	MAP_STACK                      = 0x400
	MCAST_BLOCK_SOURCE             = 0x54
	MCAST_EXCLUDE                  = 0x2
	MCAST_INCLUDE                  = 0x1
	MCAST_JOIN_GROUP               = 0x50
	MCAST_JOIN_SOURCE_GROUP        = 0x52
	MCAST_LEAVE_GROUP              = 0x51
	MCAST_LEAVE_SOURCE_GROUP       = 0x53
	MCAST_UNBLOCK_SOURCE           = 0x55
	MCAST_UNDEFINED                = 0x0
	MCL_CURRENT                    = 0x1
	MCL_FUTURE                     = 0x2
	MNT_ACLS                       = 0x8000000
	MNT_ASYNC                      = 0x40
	MNT_AUTOMOUNTED                = 0x200000000
	MNT_BYFSID                     = 0x8000000
	MNT_CMDFLAGS                   = 0xd0f0000
	MNT_DEFEXPORTED                = 0x200
	MNT_DELEXPORT                  = 0x20000
	MNT_EXKERB                     = 0x800
	MNT_EXPORTANON                 = 0x400
	MNT_EXPORTED                   = 0x100
	MNT_EXPUBLIC                   = 0x20000000
	MNT_EXRDONLY                   = 0x80
	MNT_FORCE                      = 0x80000
	MNT_GJOURNAL                   = 0x2000000
	MNT_IGNORE                     = 0x800000
	MNT_LAZY                       = 0x3
	MNT_LOCAL                      = 0x1000
	MNT_MULTILABEL                 = 0x4000000
	MNT_NFS4ACLS                   = 0x10
	MNT_NOATIME                    = 0x10000000
	MNT_NOCLUSTERR                 = 0x40000000
	MNT_NOCLUSTERW                 = 0x80000000
	MNT_NOEXEC                     = 0x4
	MNT_NONBUSY                    = 0x4000000
	MNT_NOSUID                     = 0x8
	MNT_NOSYMFOLLOW                = 0x400000
	MNT_NOWAIT                     = 0x2
	MNT_QUOTA                      = 0x2000
	MNT_RDONLY                     = 0x1
	MNT_RELOAD                     = 0x40000
	MNT_ROOTFS                     = 0x4000
	MNT_SNAPSHOT                   = 0x1000000
	MNT_SOFTDEP                    = 0x200000
	MNT_SUIDDIR                    = 0x100000
	MNT_SUJ                        = 0x100000000
	MNT_SUSPEND                    = 0x4
	MNT_SYNCHRONOUS                = 0x2
	MNT_UNION                      = 0x20
	MNT_UNTRUSTED                  = 0x800000000
	MNT_UPDATE                     = 0x10000
	MNT_UPDATEMASK                 = 0xad8d0807e
	MNT_USER                       = 0x8000
	MNT_VERIFIED                   = 0x400000000
	MNT_VISFLAGMASK                = 0xffef0ffff
	MNT_WAIT                       = 0x1
	MSG_CMSG_CLOEXEC               = 0x40000
	MSG_COMPAT                     = 0x8000
	MSG_CTRUNC                     = 0x20
	MSG_DONTROUTE                  = 0x4
	MSG_DONTWAIT                   = 0x80
	MSG_EOF                        = 0x100
	MSG_EOR                        = 0x8
	MSG_NBIO                       = 0x4000
	MSG_NOSIGNAL                   = 0x20000
	MSG_NOTIFICATION               = 0x2000
	MSG_OOB                        = 0x1
	MSG_PEEK                       = 0x2
	MSG_TRUNC                      = 0x10
	MSG_WAITALL                    = 0x40
	MSG_WAITFORONE                 = 0x80000
	MS_ASYNC                       = 0x1
	MS_INVALIDATE                  = 0x2
	MS_SYNC                        = 0x0
	NAME_MAX                       = 0xff
	NET_RT_DUMP                    = 0x1
	NET_RT_FLAGS                   = 0x2
	NET_RT_IFLIST                  = 0x3
	NET_RT_IFLISTL                 = 0x5
	NET_RT_IFMALIST                = 0x4
	NFDBITS                        = 0x20
	NOFLSH                         = 0x80000000
	NOKERNINFO                     = 0x2000000
	NOTE_ABSTIME                   = 0x10
	NOTE_ATTRIB                    = 0x8
	NOTE_CHILD                     = 0x4
	NOTE_CLOSE                     = 0x100
	NOTE_CLOSE_WRITE               = 0x200
	NOTE_DELETE                    = 0x1
	NOTE_EXEC                      = 0x20000000
	NOTE_EXIT                      = 0x80000000
	NOTE_EXTEND                    = 0x4
	NOTE_FFAND                     = 0x40000000
	NOTE_FFCOPY                    = 0xc0000000
	NOTE_FFCTRLMASK                = 0xc0000000
	NOTE_FFLAGSMASK                = 0xffffff
	NOTE_FFNOP                     = 0x0
	NOTE_FFOR                      = 0x80000000
	NOTE_FILE_POLL                 = 0x2
	NOTE_FORK                      = 0x40000000
	NOTE_LINK                      = 0x10
	NOTE_LOWAT                     = 0x1
	NOTE_MSECONDS                  = 0x2
	NOTE_NSECONDS                  = 0x8
	NOTE_OPEN                      = 0x80
	NOTE_PCTRLMASK                 = 0xf0000000
	NOTE_PDATAMASK                 = 0xfffff
	NOTE_READ                      = 0x400
	NOTE_RENAME                    = 0x20
	NOTE_REVOKE                    = 0x40
	NOTE_SECONDS                   = 0x1
	NOTE_TRACK                     = 0x1
	NOTE_TRACKERR                  = 0x2
	NOTE_TRIGGER                   = 0x1000000
	NOTE_USECONDS                  = 0x4
	NOTE_WRITE                     = 0x2
	OCRNL                          = 0x10
	ONLCR                          = 0x2
	ONLRET                         = 0x40
	ONOCR                          = 0x20
	ONOEOT                         = 0x8
	OPOST                          = 0x1
	OXTABS                         = 0x4
	O_ACCMODE                      = 0x3
	O_APPEND                       = 0x8
	O_ASYNC                        = 0x40
	O_CLOEXEC                      = 0x100000
	O_CREAT                        = 0x200
	O_DIRECT                       = 0x10000
	O_DIRECTORY                    = 0x20000
	O_EXCL                         = 0x800
	O_EXEC                         = 0x40000
	O_EXLOCK                       = 0x20
	O_FSYNC                        = 0x80
	O_NDELAY                       = 0x4
	O_NOCTTY                       = 0x8000
	O_NOFOLLOW                     = 0x100
	O_NONBLOCK                     = 0x4
	O_RDONLY                       = 0x0
	O_RDWR                         = 0x2
	O_RESOLVE_BENEATH              = 0x800000
	O_SEARCH                       = 0x40000
	O_SHLOCK                       = 0x10
	O_SYNC                         = 0x80
	O_TRUNC                        = 0x400
	O_TTY_INIT                     = 0x80000
	O_VERIFY                       = 0x200000
	O_WRONLY                       = 0x1
	PARENB                         = 0x1000
	PARMRK                         = 0x8
	PARODD                         = 0x2000
	PENDIN                         = 0x20000000
	PIOD_READ_D                    = 0x1
	PIOD_READ_I                    = 0x3
	PIOD_WRITE_D                   = 0x2
	PIOD_WRITE_I                   = 0x4
	PRIO_PGRP                      = 0x1
	PRIO_PROCESS                   = 0x0
	PRIO_USER                      = 0x2
	PROT_EXEC                      = 0x4
	PROT_NONE                      = 0x0
	PROT_READ                      = 0x1
	PROT_WRITE                     = 0x2
	PTRACE_DEFAULT                 = 0x1
	PTRACE_EXEC                    = 0x1
	PTRACE_FORK                    = 0x8
	PTRACE_LWP                     = 0x10
	PTRACE_SCE                     = 0x2
	PTRACE_SCX                     = 0x4
	PTRACE_SYSCALL                 = 0x6
	PTRACE_VFORK                   = 0x20
	PT_ATTACH                      = 0xa
	PT_CLEARSTEP                   = 0x10
	PT_CONTINUE                    = 0x7
	PT_DETACH                      = 0xb
	PT_FIRSTMACH                   = 0x40
	PT_FOLLOW_FORK                 = 0x17
	PT_GETDBREGS                   = 0x25
	PT_GETFPREGS                   = 0x23
	PT_GETLWPLIST                  = 0xf
	PT_GETNUMLWPS                  = 0xe
	PT_GETREGS                     = 0x21
	PT_GETVFPREGS                  = 0x40
	PT_GET_EVENT_MASK              = 0x19
	PT_GET_SC_ARGS                 = 0x1b
	PT_GET_SC_RET                  = 0x1c
	PT_IO                          = 0xc
	PT_KILL                        = 0x8
	PT_LWPINFO                     = 0xd
	PT_LWP_EVENTS                  = 0x18
	PT_READ_D                      = 0x2
	PT_READ_I                      = 0x1
	PT_RESUME                      = 0x13
	PT_SETDBREGS                   = 0x26
	PT_SETFPREGS                   = 0x24
	PT_SETREGS                     = 0x22
	PT_SETSTEP                     = 0x11
	PT_SETVFPREGS                  = 0x41
	PT_SET_EVENT_MASK              = 0x1a
	PT_STEP                        = 0x9
	PT_SUSPEND                     = 0x12
	PT_SYSCALL                     = 0x16
	PT_TO_SCE                      = 0x14
	PT_TO_SCX                      = 0x15
	PT_TRACE_ME                    = 0x0
	PT_VM_ENTRY                    = 0x29
	PT_VM_TIMESTAMP                = 0x28
	PT_WRITE_D                     = 0x5
	PT_WRITE_I                     = 0x4
	P_ZONEID                       = 0xc
	RLIMIT_AS                      = 0xa
	RLIMIT_CORE                    = 0x4
	RLIMIT_CPU                     = 0x0
	RLIMIT_DATA                    = 0x2
	RLIMIT_FSIZE                   = 0x1
	RLIMIT_MEMLOCK                 = 0x6
	RLIMIT_NOFILE                  = 0x8
	RLIMIT_NPROC                   = 0x7
	RLIMIT_RSS                     = 0x5
	RLIMIT_STACK                   = 0x3
	RLIM_INFINITY                  = 0x7fffffffffffffff
	RTAX_AUTHOR                    = 0x6
	RTAX_BRD                       = 0x7
	RTAX_DST                       = 0x0
	RTAX_GATEWAY                   = 0x1
	RTAX_GENMASK                   = 0x3
	RTAX_IFA                       = 0x5
	RTAX_IFP                       = 0x4
	RTAX_MAX                       = 0x8
	RTAX_NETMASK                   = 0x2
	RTA_AUTHOR                     = 0x40
	RTA_BRD                        = 0x80
	RTA_DST                        = 0x1
	RTA_GATEWAY                    = 0x2
	RTA_GENMASK                    = 0x8
	RTA_IFA                        = 0x20
	RTA_IFP                        = 0x10
	RTA_NETMASK                    = 0x4
	RTF_BLACKHOLE                  = 0x1000
	RTF_BROADCAST                  = 0x400000
	RTF_DONE                       = 0x40
	RTF_DYNAMIC                    = 0x10
	RTF_FIXEDMTU                   = 0x80000
	RTF_FMASK                      = 0x1004d808
	RTF_GATEWAY                    = 0x2
	RTF_GWFLAG_COMPAT              = 0x80000000
	RTF_HOST                       = 0x4
	RTF_LLDATA                     = 0x400
	RTF_LLINFO                     = 0x400
	RTF_LOCAL                      = 0x200000
	RTF_MODIFIED                   = 0x20
	RTF_MULTICAST                  = 0x800000
	RTF_PINNED                     = 0x100000
	RTF_PROTO1                     = 0x8000
	RTF_PROTO2                     = 0x4000
	RTF_PROTO3                     = 0x40000
	RTF_REJECT                     = 0x8
	RTF_RNH_LOCKED                 = 0x40000000
	RTF_STATIC                     = 0x800
	RTF_STICKY                     = 0x10000000
	RTF_UP                         = 0x1
	RTF_XRESOLVE                   = 0x200
	RTM_ADD                        = 0x1
	RTM_CHANGE                     = 0x3
	RTM_DELADDR                    = 0xd
	RTM_DELETE                     = 0x2
	RTM_DELMADDR                   = 0x10
	RTM_GET                        = 0x4
	RTM_IEEE80211                  = 0x12
	RTM_IFANNOUNCE                 = 0x11
	RTM_IFINFO                     = 0xe
	RTM_LOCK                       = 0x8
	RTM_LOSING                     = 0x5
	RTM_MISS                       = 0x7
	RTM_NEWADDR                    = 0xc
	RTM_NEWMADDR                   = 0xf
	RTM_REDIRECT                   = 0x6
	RTM_RESOLVE                    = 0xb
	RTM_RTTUNIT                    = 0xf4240
	RTM_VERSION                    = 0x5
	RTV_EXPIRE                     = 0x4
	RTV_HOPCOUNT                   = 0x2
	RTV_MTU                        = 0x1
	RTV_RPIPE                      = 0x8
	RTV_RTT                        = 0x40
	RTV_RTTVAR                     = 0x80
	RTV_SPIPE                      = 0x10
	RTV_SSTHRESH                   = 0x20
	RTV_WEIGHT                     = 0x100
	RT_ALL_FIBS                    = -0x1
	RT_BLACKHOLE                   = 0x40
	RT_DEFAULT_FIB                 = 0x0
	RT_HAS_GW                      = 0x80
	RT_HAS_HEADER                  = 0x10
	RT_HAS_HEADER_BIT              = 0x4
	RT_L2_ME                       = 0x4
	RT_L2_ME_BIT                   = 0x2
	RT_LLE_CACHE                   = 0x100
	RT_MAY_LOOP                    = 0x8
	RT_MAY_LOOP_BIT                = 0x3
	RT_REJECT                      = 0x20
	RUSAGE_CHILDREN                = -0x1
	RUSAGE_SELF                    = 0x0
	RUSAGE_THREAD                  = 0x1
	SCM_BINTIME                    = 0x4
	SCM_CREDS                      = 0x3
	SCM_MONOTONIC                  = 0x6
	SCM_REALTIME                   = 0x5
	SCM_RIGHTS                     = 0x1
	SCM_TIMESTAMP                  = 0x2
	SCM_TIME_INFO                  = 0x7
	SEEK_CUR                       = 0x1
	SEEK_DATA                      = 0x3
	SEEK_END                       = 0x2
	SEEK_HOLE                      = 0x4
	SEEK_SET                       = 0x0
	SHUT_RD                        = 0x0
	SHUT_RDWR                      = 0x2
	SHUT_WR                        = 0x1
	SIOCADDMULTI                   = 0x80206931
	SIOCAIFADDR                    = 0x8040691a
	SIOCAIFGROUP                   = 0x80246987
	SIOCATMARK                     = 0x40047307
	SIOCDELMULTI                   = 0x80206932
	SIOCDIFADDR                    = 0x80206919
	SIOCDIFGROUP                   = 0x80246989
	SIOCDIFPHYADDR                 = 0x80206949
	SIOCGDRVSPEC                   = 0xc01c697b
	SIOCGETSGCNT                   = 0xc0147210
	SIOCGETVIFCNT                  = 0xc014720f
	SIOCGHIWAT                     = 0x40047301
	SIOCGHWADDR                    = 0xc020693e
	SIOCGI2C                       = 0xc020693d
	SIOCGIFADDR                    = 0xc0206921
	SIOCGIFALIAS                   = 0xc044692d
	SIOCGIFBRDADDR                 = 0xc0206923
	SIOCGIFCAP                     = 0xc020691f
	SIOCGIFCONF                    = 0xc0086924
	SIOCGIFDESCR                   = 0xc020692a
	SIOCGIFDOWNREASON              = 0xc058699a
	SIOCGIFDSTADDR                 = 0xc0206922
	SIOCGIFFIB                     = 0xc020695c
	SIOCGIFFLAGS                   = 0xc0206911
	SIOCGIFGENERIC                 = 0xc020693a
	SIOCGIFGMEMB                   = 0xc024698a
	SIOCGIFGROUP                   = 0xc0246988
	SIOCGIFINDEX                   = 0xc0206920
	SIOCGIFMAC                     = 0xc0206926
	SIOCGIFMEDIA                   = 0xc0286938
	SIOCGIFMETRIC                  = 0xc0206917
	SIOCGIFMTU                     = 0xc0206933
	SIOCGIFNETMASK                 = 0xc0206925
	SIOCGIFPDSTADDR                = 0xc0206948
	SIOCGIFPHYS                    = 0xc0206935
	SIOCGIFPSRCADDR                = 0xc0206947
	SIOCGIFRSSHASH                 = 0xc0186997
	SIOCGIFRSSKEY                  = 0xc0946996
	SIOCGIFSTATUS                  = 0xc331693b
	SIOCGIFXMEDIA                  = 0xc028698b
	SIOCGLANPCP                    = 0xc0206998
	SIOCGLOWAT                     = 0x40047303
	SIOCGPGRP                      = 0x40047309
	SIOCGPRIVATE_0                 = 0xc0206950
	SIOCGPRIVATE_1                 = 0xc0206951
	SIOCGTUNFIB                    = 0xc020695e
	SIOCIFCREATE                   = 0xc020697a
	SIOCIFCREATE2                  = 0xc020697c
	SIOCIFDESTROY                  = 0x80206979
	SIOCIFGCLONERS                 = 0xc00c6978
	SIOCSDRVSPEC                   = 0x801c697b
	SIOCSHIWAT                     = 0x80047300
	SIOCSIFADDR                    = 0x8020690c
	SIOCSIFBRDADDR                 = 0x80206913
	SIOCSIFCAP                     = 0x8020691e
	SIOCSIFDESCR                   = 0x80206929
	SIOCSIFDSTADDR                 = 0x8020690e
	SIOCSIFFIB                     = 0x8020695d
	SIOCSIFFLAGS                   = 0x80206910
	SIOCSIFGENERIC                 = 0x80206939
	SIOCSIFLLADDR                  = 0x8020693c
	SIOCSIFMAC                     = 0x80206927
	SIOCSIFMEDIA                   = 0xc0206937
	SIOCSIFMETRIC                  = 0x80206918
	SIOCSIFMTU                     = 0x80206934
	SIOCSIFNAME                    = 0x80206928
	SIOCSIFNETMASK                 = 0x80206916
	SIOCSIFPHYADDR                 = 0x80406946
	SIOCSIFPHYS                    = 0x80206936
	SIOCSIFRVNET                   = 0xc020695b
	SIOCSIFVNET                    = 0xc020695a
	SIOCSLANPCP                    = 0x80206999
	SIOCSLOWAT                     = 0x80047302
	SIOCSPGRP                      = 0x80047308
	SIOCSTUNFIB                    = 0x8020695f
	SOCK_CLOEXEC                   = 0x10000000
	SOCK_DGRAM                     = 0x2
	SOCK_MAXADDRLEN                = 0xff
	SOCK_NONBLOCK                  = 0x20000000
	SOCK_RAW                       = 0x3
	SOCK_RDM                       = 0x4
	SOCK_SEQPACKET                 = 0x5
	SOCK_STREAM                    = 0x1
	SOL_LOCAL                      = 0x0
	SOL_SOCKET                     = 0xffff
	SOMAXCONN                      = 0x80
	SO_ACCEPTCONN                  = 0x2
	SO_ACCEPTFILTER                = 0x1000
	SO_BINTIME                     = 0x2000
	SO_BROADCAST                   = 0x20
	SO_DEBUG                       = 0x1
	SO_DOMAIN                      = 0x1019
	SO_DONTROUTE                   = 0x10
	SO_ERROR                       = 0x1007
	SO_KEEPALIVE                   = 0x8
	SO_LABEL                       = 0x1009
	SO_LINGER                      = 0x80
	SO_LISTENINCQLEN               = 0x1013
	SO_LISTENQLEN                  = 0x1012
	SO_LISTENQLIMIT                = 0x1011
	SO_MAX_PACING_RATE             = 0x1018
	SO_NOSIGPIPE                   = 0x800
	SO_NO_DDP                      = 0x8000
	SO_NO_OFFLOAD                  = 0x4000
	SO_OOBINLINE                   = 0x100
	SO_PEERLABEL                   = 0x1010
	SO_PROTOCOL                    = 0x1016
	SO_PROTOTYPE                   = 0x1016
	SO_RCVBUF                      = 0x1002
	SO_RCVLOWAT                    = 0x1004
	SO_RCVTIMEO                    = 0x1006
	SO_RERROR                      = 0x20000
	SO_REUSEADDR                   = 0x4
	SO_REUSEPORT                   = 0x200
	SO_REUSEPORT_LB                = 0x10000
	SO_SETFIB                      = 0x1014
	SO_SNDBUF                      = 0x1001
	SO_SNDLOWAT                    = 0x1003
	SO_SNDTIMEO                    = 0x1005
	SO_TIMESTAMP                   = 0x400
	SO_TS_BINTIME                  = 0x1
	SO_TS_CLOCK                    = 0x1017
	SO_TS_CLOCK_MAX                = 0x3
	SO_TS_DEFAULT                  = 0x0
	SO_TS_MONOTONIC                = 0x3
	SO_TS_REALTIME                 = 0x2
	SO_TS_REALTIME_MICRO           = 0x0
	SO_TYPE                        = 0x1008
	SO_USELOOPBACK                 = 0x40
	SO_USER_COOKIE                 = 0x1015
	SO_VENDOR                      = 0x80000000
	S_BLKSIZE                      = 0x200
	S_IEXEC                        = 0x40
	S_IFBLK                        = 0x6000
	S_IFCHR                        = 0x2000
	S_IFDIR                        = 0x4000
	S_IFIFO                        = 0x1000
	S_IFLNK                        = 0xa000
	S_IFMT                         = 0xf000
	S_IFREG                        = 0x8000
	S_IFSOCK                       = 0xc000
	S_IFWHT                        = 0xe000
	S_IREAD                        = 0x100
	S_IRGRP                        = 0x20
	S_IROTH                        = 0x4
	S_IRUSR                        = 0x100
	S_IRWXG                        = 0x38
	S_IRWXO                        = 0x7
	S_IRWXU                        = 0x1c0
	S_ISGID                        = 0x400
	S_ISTXT                        = 0x200
	S_ISUID                        = 0x800
	S_ISVTX                        = 0x200
	S_IWGRP                        = 0x10
	S_IWOTH                        = 0x2
	S_IWRITE                       = 0x80
	S_IWUSR                        = 0x80
	S_IXGRP                        = 0x8
	S_IXOTH                        = 0x1
	S_IXUSR                        = 0x40
	TAB0                           = 0x0
	TAB3                           = 0x4
	TABDLY                         = 0x4
	TCIFLUSH                       = 0x1
	TCIOFF                         = 0x3
	TCIOFLUSH                      = 0x3
	TCION                          = 0x4
	TCOFLUSH                       = 0x2
	TCOOFF                         = 0x1
	TCOON                          = 0x2
	TCPOPT_EOL                     = 0x0
	TCPOPT_FAST_OPEN               = 0x22
	TCPOPT_MAXSEG                  = 0x2
	TCPOPT_NOP                     = 0x1
	TCPOPT_PAD                     = 0x0
	TCPOPT_SACK                    = 0x5
	TCPOPT_SACK_PERMITTED          = 0x4
	TCPOPT_SIGNATURE               = 0x13
	TCPOPT_TIMESTAMP               = 0x8
	TCPOPT_WINDOW                  = 0x3
	TCP_BBR_ACK_COMP_ALG           = 0x448
	TCP_BBR_ALGORITHM              = 0x43b
	TCP_BBR_DRAIN_INC_EXTRA        = 0x43c
	TCP_BBR_DRAIN_PG               = 0x42e
	TCP_BBR_EXTRA_GAIN             = 0x449
	TCP_BBR_EXTRA_STATE            = 0x453
	TCP_BBR_FLOOR_MIN_TSO          = 0x454
	TCP_BBR_HDWR_PACE              = 0x451
	TCP_BBR_HOLD_TARGET            = 0x436
	TCP_BBR_IWINTSO                = 0x42b
	TCP_BBR_LOWGAIN_FD             = 0x436
	TCP_BBR_LOWGAIN_HALF           = 0x435
	TCP_BBR_LOWGAIN_THRESH         = 0x434
	TCP_BBR_MAX_RTO                = 0x439
	TCP_BBR_MIN_RTO                = 0x438
	TCP_BBR_MIN_TOPACEOUT          = 0x455
	TCP_BBR_ONE_RETRAN             = 0x431
	TCP_BBR_PACE_CROSS             = 0x442
	TCP_BBR_PACE_DEL_TAR           = 0x43f
	TCP_BBR_PACE_OH                = 0x435
	TCP_BBR_PACE_PER_SEC           = 0x43e
	TCP_BBR_PACE_SEG_MAX           = 0x440
	TCP_BBR_PACE_SEG_MIN           = 0x441
	TCP_BBR_POLICER_DETECT         = 0x457
	TCP_BBR_PROBE_RTT_GAIN         = 0x44d
	TCP_BBR_PROBE_RTT_INT          = 0x430
	TCP_BBR_PROBE_RTT_LEN          = 0x44e
	TCP_BBR_RACK_RTT_USE           = 0x44a
	TCP_BBR_RECFORCE               = 0x42c
	TCP_BBR_REC_OVER_HPTS          = 0x43a
	TCP_BBR_RETRAN_WTSO            = 0x44b
	TCP_BBR_RWND_IS_APP            = 0x42f
	TCP_BBR_SEND_IWND_IN_TSO       = 0x44f
	TCP_BBR_STARTUP_EXIT_EPOCH     = 0x43d
	TCP_BBR_STARTUP_LOSS_EXIT      = 0x432
	TCP_BBR_STARTUP_PG             = 0x42d
	TCP_BBR_TMR_PACE_OH            = 0x448
	TCP_BBR_TSLIMITS               = 0x434
	TCP_BBR_TSTMP_RAISES           = 0x456
	TCP_BBR_UNLIMITED              = 0x43b
	TCP_BBR_USEDEL_RATE            = 0x437
	TCP_BBR_USE_LOWGAIN            = 0x433
	TCP_BBR_USE_RACK_CHEAT         = 0x450
	TCP_BBR_UTTER_MAX_TSO          = 0x452
	TCP_CA_NAME_MAX                = 0x10
	TCP_CCALGOOPT                  = 0x41
	TCP_CONGESTION                 = 0x40
	TCP_DATA_AFTER_CLOSE           = 0x44c
	TCP_DELACK                     = 0x48
	TCP_FASTOPEN                   = 0x401
	TCP_FASTOPEN_MAX_COOKIE_LEN    = 0x10
	TCP_FASTOPEN_MIN_COOKIE_LEN    = 0x4
	TCP_FASTOPEN_PSK_LEN           = 0x10
	TCP_FUNCTION_BLK               = 0x2000
	TCP_FUNCTION_NAME_LEN_MAX      = 0x20
	TCP_INFO                       = 0x20
	TCP_KEEPCNT                    = 0x400
	TCP_KEEPIDLE                   = 0x100
	TCP_KEEPINIT                   = 0x80
	TCP_KEEPINTVL                  = 0x200
	TCP_LOG                        = 0x22
	TCP_LOGBUF                     = 0x23
	TCP_LOGDUMP                    = 0x25
	TCP_LOGDUMPID                  = 0x26
	TCP_LOGID                      = 0x24
	TCP_LOG_ID_LEN                 = 0x40
	TCP_MAXBURST                   = 0x4
	TCP_MAXHLEN                    = 0x3c
	TCP_MAXOLEN                    = 0x28
	TCP_MAXSEG                     = 0x2
	TCP_MAXWIN                     = 0xffff
	TCP_MAX_SACK                   = 0x4
	TCP_MAX_WINSHIFT               = 0xe
	TCP_MD5SIG                     = 0x10
	TCP_MINMSS                     = 0xd8
	TCP_MSS                        = 0x218
	TCP_NODELAY                    = 0x1
	TCP_NOOPT                      = 0x8
	TCP_NOPUSH                     = 0x4
	TCP_PCAP_IN                    = 0x1000
	TCP_PCAP_OUT                   = 0x800
	TCP_RACK_EARLY_RECOV           = 0x423
	TCP_RACK_EARLY_SEG             = 0x424
	TCP_RACK_GP_INCREASE           = 0x446
	TCP_RACK_IDLE_REDUCE_HIGH      = 0x444
	TCP_RACK_MIN_PACE              = 0x445
	TCP_RACK_MIN_PACE_SEG          = 0x446
	TCP_RACK_MIN_TO                = 0x422
	TCP_RACK_PACE_ALWAYS           = 0x41f
	TCP_RACK_PACE_MAX_SEG          = 0x41e
	TCP_RACK_PACE_REDUCE           = 0x41d
	TCP_RACK_PKT_DELAY             = 0x428
	TCP_RACK_PROP                  = 0x41b
	TCP_RACK_PROP_RATE             = 0x420
	TCP_RACK_PRR_SENDALOT          = 0x421
	TCP_RACK_REORD_FADE            = 0x426
	TCP_RACK_REORD_THRESH          = 0x425
	TCP_RACK_TLP_INC_VAR           = 0x429
	TCP_RACK_TLP_REDUCE            = 0x41c
	TCP_RACK_TLP_THRESH            = 0x427
	TCP_RACK_TLP_USE               = 0x447
	TCP_VENDOR                     = 0x80000000
	TCSAFLUSH                      = 0x2
	TIMER_ABSTIME                  = 0x1
	TIMER_RELTIME                  = 0x0
	TIOCCBRK                       = 0x2000747a
	TIOCCDTR                       = 0x20007478
	TIOCCONS                       = 0x80047462
	TIOCDRAIN                      = 0x2000745e
	TIOCEXCL                       = 0x2000740d
	TIOCEXT                        = 0x80047460
	TIOCFLUSH                      = 0x80047410
	TIOCGDRAINWAIT                 = 0x40047456
	TIOCGETA                       = 0x402c7413
	TIOCGETD                       = 0x4004741a
	TIOCGPGRP                      = 0x40047477
	TIOCGPTN                       = 0x4004740f
	TIOCGSID                       = 0x40047463
	TIOCGWINSZ                     = 0x40087468
	TIOCMBIC                       = 0x8004746b
	TIOCMBIS                       = 0x8004746c
	TIOCMGDTRWAIT                  = 0x4004745a
	TIOCMGET                       = 0x4004746a
	TIOCMSDTRWAIT                  = 0x8004745b
	TIOCMSET                       = 0x8004746d
	TIOCM_CAR                      = 0x40
	TIOCM_CD                       = 0x40
	TIOCM_CTS                      = 0x20
	TIOCM_DCD                      = 0x40
	TIOCM_DSR                      = 0x100
	TIOCM_DTR                      = 0x2
	TIOCM_LE                       = 0x1
	TIOCM_RI                       = 0x80
	TIOCM_RNG                      = 0x80
	TIOCM_RTS                      = 0x4
	TIOCM_SR                       = 0x10
	TIOCM_ST                       = 0x8
	TIOCNOTTY                      = 0x20007471
	TIOCNXCL                       = 0x2000740e
	TIOCOUTQ                       = 0x40047473
	TIOCPKT                        = 0x80047470
	TIOCPKT_DATA                   = 0x0
	TIOCPKT_DOSTOP                 = 0x20
	TIOCPKT_FLUSHREAD              = 0x1
	TIOCPKT_FLUSHWRITE             = 0x2
	TIOCPKT_IOCTL                  = 0x40
	TIOCPKT_NOSTOP                 = 0x10
	TIOCPKT_START                  = 0x8
	TIOCPKT_STOP                   = 0x4
	TIOCPTMASTER                   = 0x2000741c
	TIOCSBRK                       = 0x2000747b
	TIOCSCTTY                      = 0x20007461
	TIOCSDRAINWAIT                 = 0x80047457
	TIOCSDTR                       = 0x20007479
	TIOCSETA                       = 0x802c7414
	TIOCSETAF                      = 0x802c7416
	TIOCSETAW                      = 0x802c7415
	TIOCSETD                       = 0x8004741b
	TIOCSIG                        = 0x2004745f
	TIOCSPGRP                      = 0x80047476
	TIOCSTART                      = 0x2000746e
	TIOCSTAT                       = 0x20007465
	TIOCSTI                        = 0x80017472
	TIOCSTOP                       = 0x2000746f
	TIOCSWINSZ                     = 0x80087467
	TIOCTIMESTAMP                  = 0x40107459
	TIOCUCNTL                      = 0x80047466
	TOSTOP                         = 0x400000
	UTIME_NOW                      = -0x1
	UTIME_OMIT                     = -0x2
	VDISCARD                       = 0xf
	VDSUSP                         = 0xb
	VEOF                           = 0x0
	VEOL                           = 0x1
	VEOL2                          = 0x2
	VERASE                         = 0x3
	VERASE2                        = 0x7
	VINTR                          = 0x8
	VKILL                          = 0x5
	VLNEXT                         = 0xe
	VMIN                           = 0x10
	VQUIT                          = 0x9
	VREPRINT                       = 0x6
	VSTART                         = 0xc
	VSTATUS                        = 0x12
	VSTOP                          = 0xd
	VSUSP                          = 0xa
	VTIME                          = 0x11
	VWERASE                        = 0x4
	WCONTINUED                     = 0x4
	WCOREFLAG                      = 0x80
	WEXITED                        = 0x10
	WLINUXCLONE                    = 0x80000000
	WNOHANG                        = 0x1
	WNOWAIT                        = 0x8
	WSTOPPED                       = 0x2
	WTRAPPED                       = 0x20
	WUNTRACED                      = 0x2
)

// Errors
const (
	E2BIG           = syscall.Errno(0x7)
	EACCES          = syscall.Errno(0xd)
	EADDRINUSE      = syscall.Errno(0x30)
	EADDRNOTAVAIL   = syscall.Errno(0x31)
	EAFNOSUPPORT    = syscall.Errno(0x2f)
	EAGAIN          = syscall.Errno(0x23)
	EALREADY        = syscall.Errno(0x25)
	EAUTH           = syscall.Errno(0x50)
	EBADF           = syscall.Errno(0x9)
	EBADMSG         = syscall.Errno(0x59)
	EBADRPC         = syscall.Errno(0x48)
	EBUSY           = syscall.Errno(0x10)
	ECANCELED       = syscall.Errno(0x55)
	ECAPMODE        = syscall.Errno(0x5e)
	ECHILD          = syscall.Errno(0xa)
	ECONNABORTED    = syscall.Errno(0x35)
	ECONNREFUSED    = syscall.Errno(0x3d)
	ECONNRESET      = syscall.Errno(0x36)
	EDEADLK         = syscall.Errno(0xb)
	EDESTADDRREQ    = syscall.Errno(0x27)
	EDOM            = syscall.Errno(0x21)
	EDOOFUS         = syscall.Errno(0x58)
	EDQUOT          = syscall.Errno(0x45)
	EEXIST          = syscall.Errno(0x11)
	EFAULT          = syscall.Errno(0xe)
	EFBIG           = syscall.Errno(0x1b)
	EFTYPE          = syscall.Errno(0x4f)
	EHOSTDOWN       = syscall.Errno(0x40)
	EHOSTUNREACH    = syscall.Errno(0x41)
	EIDRM           = syscall.Errno(0x52)
	EILSEQ          = syscall.Errno(0x56)
	EINPROGRESS     = syscall.Errno(0x24)
	EINTEGRITY      = syscall.Errno(0x61)
	EINTR           = syscall.Errno(0x4)
	EINVAL          = syscall.Errno(0x16)
	EIO             = syscall.Errno(0x5)
	EISCONN         = syscall.Errno(0x38)
	EISDIR          = syscall.Errno(0x15)
	ELAST           = syscall.Errno(0x61)
	ELOOP           = syscall.Errno(0x3e)
	EMFILE          = syscall.Errno(0x18)
	EMLINK          = syscall.Errno(0x1f)
	EMSGSIZE        = syscall.Errno(0x28)
	EMULTIHOP       = syscall.Errno(0x5a)
	ENAMETOOLONG    = syscall.Errno(0x3f)
	ENEEDAUTH       = syscall.Errno(0x51)
	ENETDOWN        = syscall.Errno(0x32)
	ENETRESET       = syscall.Errno(0x34)
	ENETUNREACH     = syscall.Errno(0x33)
	ENFILE          = syscall.Errno(0x17)
	ENOATTR         = syscall.Errno(0x57)
	ENOBUFS         = syscall.Errno(0x37)
	ENODEV          = syscall.Errno(0x13)
	ENOENT          = syscall.Errno(0x2)
	ENOEXEC         = syscall.Errno(0x8)
	ENOLCK          = syscall.Errno(0x4d)
	ENOLINK         = syscall.Errno(0x5b)
	ENOMEM          = syscall.Errno(0xc)
	ENOMSG          = syscall.Errno(0x53)
	ENOPROTOOPT     = syscall.Errno(0x2a)
	ENOSPC          = syscall.Errno(0x1c)
	ENOSYS          = syscall.Errno(0x4e)
	ENOTBLK         = syscall.Errno(0xf)
	ENOTCAPABLE     = syscall.Errno(0x5d)
	ENOTCONN        = syscall.Errno(0x39)
	ENOTDIR         = syscall.Errno(0x14)
	ENOTEMPTY       = syscall.Errno(0x42)
	ENOTRECOVERABLE = syscall.Errno(0x5f)
	ENOTSOCK        = syscall.Errno(0x26)
	ENOTSUP         = syscall.Errno(0x2d)
	ENOTTY          = syscall.Errno(0x19)
	ENXIO           = syscall.Errno(0x6)
	EOPNOTSUPP      = syscall.Errno(0x2d)
	EOVERFLOW       = syscall.Errno(0x54)
	EOWNERDEAD      = syscall.Errno(0x60)
	EPERM           = syscall.Errno(0x1)
	EPFNOSUPPORT    = syscall.Errno(0x2e)
	EPIPE           = syscall.Errno(0x20)
	EPROCLIM        = syscall.Errno(0x43)
	EPROCUNAVAIL    = syscall.Errno(0x4c)
	EPROGMISMATCH   = syscall.Errno(0x4b)
	EPROGUNAVAIL    = syscall.Errno(0x4a)
	EPROTO          = syscall.Errno(0x5c)
	EPROTONOSUPPORT = syscall.Errno(0x2b)
	EPROTOTYPE      = syscall.Errno(0x29)
	ERANGE          = syscall.Errno(0x22)
	EREMOTE         = syscall.Errno(0x47)
	EROFS           = syscall.Errno(0x1e)
	ERPCMISMATCH    = syscall.Errno(0x49)
	ESHUTDOWN       = syscall.Errno(0x3a)
	ESOCKTNOSUPPORT = syscall.Errno(0x2c)
	ESPIPE          = syscall.Errno(0x1d)
	ESRCH           = syscall.Errno(0x3)
	ESTALE          = syscall.Errno(0x46)
	ETIMEDOUT       = syscall.Errno(0x3c)
	ETOOMANYREFS    = syscall.Errno(0x3b)
	ETXTBSY         = syscall.Errno(0x1a)
	EUSERS          = syscall.Errno(0x44)
	EWOULDBLOCK     = syscall.Errno(0x23)
	EXDEV           = syscall.Errno(0x12)
)

// Signals
const (
	SIGABRT   = syscall.Signal(0x6)
	SIGALRM   = syscall.Signal(0xe)
	SIGBUS    = syscall.Signal(0xa)
	SIGCHLD   = syscall.Signal(0x14)
	SIGCONT   = syscall.Signal(0x13)
	SIGEMT    = syscall.Signal(0x7)
	SIGFPE    = syscall.Signal(0x8)
	SIGHUP    = syscall.Signal(0x1)
	SIGILL    = syscall.Signal(0x4)
	SIGINFO   = syscall.Signal(0x1d)
	SIGINT    = syscall.Signal(0x2)
	SIGIO     = syscall.Signal(0x17)
	SIGIOT    = syscall.Signal(0x6)
	SIGKILL   = syscall.Signal(0x9)
	SIGLIBRT  = syscall.Signal(0x21)
	SIGLWP    = syscall.Signal(0x20)
	SIGPIPE   = syscall.Signal(0xd)
	SIGPROF   = syscall.Signal(0x1b)
	SIGQUIT   = syscall.Signal(0x3)
	SIGSEGV   = syscall.Signal(0xb)
	SIGSTOP   = syscall.Signal(0x11)
	SIGSYS    = syscall.Signal(0xc)
	SIGTERM   = syscall.Signal(0xf)
	SIGTHR    = syscall.Signal(0x20)
	SIGTRAP   = syscall.Signal(0x5)
	SIGTSTP   = syscall.Signal(0x12)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x10)
	SIGUSR1   = syscall.Signal(0x1e)
	SIGUSR2   = syscall.Signal(0x1f)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "device not configured"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EDEADLK", "resource deadlock avoided"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "cross-device link"},
	{19, "ENODEV", "operation not supported by device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "result too large"},
	{35, "EWOULDBLOCK", "resource temporarily unavailable"},
	{36, "EINPROGRESS", "operation now in progress"},
	{37, "EALREADY", "operation already in progress"},
	{38, "ENOTSOCK", "socket operation on non-socket"},
	{39, "EDESTADDRREQ", "destination address required"},
	{40, "EMSGSIZE", "message too long"},
	{41, "EPROTOTYPE", "protocol wrong type for socket"},
	{42, "ENOPROTOOPT", "protocol not available"},
	{43, "EPROTONOSUPPORT", "protocol not supported"},
	{44, "ESOCKTNOSUPPORT", "socket type not supported"},
	{45, "EOPNOTSUPP", "operation not supported"},
	{46, "EPFNOSUPPORT", "protocol family not supported"},
	{47, "EAFNOSUPPORT", "address family not supported by protocol family"},
	{48, "EADDRINUSE", "address already in use"},
	{49, "EADDRNOTAVAIL", "can't assign requested address"},
	{50, "ENETDOWN", "network is down"},
	{51, "ENETUNREACH", "network is unreachable"},
	{52, "ENETRESET", "network dropped connection on reset"},
	{53, "ECONNABORTED", "software caused connection abort"},
	{54, "ECONNRESET", "connection reset by peer"},
	{55, "ENOBUFS", "no buffer space available"},
	{56, "EISCONN", "socket is already connected"},
	{57, "ENOTCONN", "socket is not connected"},
	{58, "ESHUTDOWN", "can't send after socket shutdown"},
	{59, "ETOOMANYREFS", "too many references: can't splice"},
	{60, "ETIMEDOUT", "operation timed out"},
	{61, "ECONNREFUSED", "connection refused"},
	{62, "ELOOP", "too many levels of symbolic links"},
	{63, "ENAMETOOLONG", "file name too long"},
	{64, "EHOSTDOWN", "host is down"},
	{65, "EHOSTUNREACH", "no route to host"},
	{66, "ENOTEMPTY", "directory not empty"},
	{67, "EPROCLIM", "too many processes"},
	{68, "EUSERS", "too many users"},
	{69, "EDQUOT", "disc quota exceeded"},
	{70, "ESTALE", "stale NFS file handle"},
	{71, "EREMOTE", "too many levels of remote in path"},
	{72, "EBADRPC", "RPC struct is bad"},
	{73, "ERPCMISMATCH", "RPC version wrong"},
	{74, "EPROGUNAVAIL", "RPC prog. not avail"},
	{75, "EPROGMISMATCH", "program version wrong"},
	{76, "EPROCUNAVAIL", "bad procedure for program"},
	{77, "ENOLCK", "no locks available"},
	{78, "ENOSYS", "function not implemented"},
	{79, "EFTYPE", "inappropriate file type or format"},
	{80, "EAUTH", "authentication error"},
	{81, "ENEEDAUTH", "need authenticator"},
	{82, "EIDRM", "identifier removed"},
	{83, "ENOMSG", "no message of desired type"},
	{84, "EOVERFLOW", "value too large to be stored in data type"},
	{85, "ECANCELED", "operation canceled"},
	{86, "EILSEQ", "illegal byte sequence"},
	{87, "ENOATTR", "attribute not found"},
	{88, "EDOOFUS", "programming error"},
	{89, "EBADMSG", "bad message"},
	{90, "EMULTIHOP", "multihop attempted"},
	{91, "ENOLINK", "link has been severed"},
	{92, "EPROTO", "protocol error"},
	{93, "ENOTCAPABLE", "capabilities insufficient"},
	{94, "ECAPMODE", "not permitted in capability mode"},
	{95, "ENOTRECOVERABLE", "state not recoverable"},
	{96, "EOWNERDEAD", "previous owner died"},
	{97, "EINTEGRITY", "integrity check failed"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/BPT trap"},
	{6, "SIGIOT", "abort trap"},
	{7, "SIGEMT", "EMT trap"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus error"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGSYS", "bad system call"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGURG", "urgent I/O condition"},
	{17, "SIGSTOP", "suspended (signal)"},
	{18, "SIGTSTP", "suspended"},
	{19, "SIGCONT", "continued"},
	{20, "SIGCHLD", "child exited"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGIO", "I/O possible"},
	{24, "SIGXCPU", "cputime limit exceeded"},
	{25, "SIGXFSZ", "filesize limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window size changes"},
	{29, "SIGINFO", "information request"},
	{30, "SIGUSR1", "user defined signal 1"},
	{31, "SIGUSR2", "user defined signal 2"},
	{32, "SIGTHR", "unknown signal"},
	{33, "SIGLIBRT", "unknown signal"},
}
07070100000E28000081A4000000000000000000000001645E367C00013CF7000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go // mkerrors.sh -m64
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build arm64 && freebsd
// +build arm64,freebsd

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -m64 _const.go

package unix

import "syscall"

const (
	AF_APPLETALK                   = 0x10
	AF_ARP                         = 0x23
	AF_ATM                         = 0x1e
	AF_BLUETOOTH                   = 0x24
	AF_CCITT                       = 0xa
	AF_CHAOS                       = 0x5
	AF_CNT                         = 0x15
	AF_COIP                        = 0x14
	AF_DATAKIT                     = 0x9
	AF_DECnet                      = 0xc
	AF_DLI                         = 0xd
	AF_E164                        = 0x1a
	AF_ECMA                        = 0x8
	AF_HYLINK                      = 0xf
	AF_IEEE80211                   = 0x25
	AF_IMPLINK                     = 0x3
	AF_INET                        = 0x2
	AF_INET6                       = 0x1c
	AF_INET6_SDP                   = 0x2a
	AF_INET_SDP                    = 0x28
	AF_IPX                         = 0x17
	AF_ISDN                        = 0x1a
	AF_ISO                         = 0x7
	AF_LAT                         = 0xe
	AF_LINK                        = 0x12
	AF_LOCAL                       = 0x1
	AF_MAX                         = 0x2a
	AF_NATM                        = 0x1d
	AF_NETBIOS                     = 0x6
	AF_NETGRAPH                    = 0x20
	AF_OSI                         = 0x7
	AF_PUP                         = 0x4
	AF_ROUTE                       = 0x11
	AF_SCLUSTER                    = 0x22
	AF_SIP                         = 0x18
	AF_SLOW                        = 0x21
	AF_SNA                         = 0xb
	AF_UNIX                        = 0x1
	AF_UNSPEC                      = 0x0
	AF_VENDOR00                    = 0x27
	AF_VENDOR01                    = 0x29
	AF_VENDOR02                    = 0x2b
	AF_VENDOR03                    = 0x2d
	AF_VENDOR04                    = 0x2f
	AF_VENDOR05                    = 0x31
	AF_VENDOR06                    = 0x33
	AF_VENDOR07                    = 0x35
	AF_VENDOR08                    = 0x37
	AF_VENDOR09                    = 0x39
	AF_VENDOR10                    = 0x3b
	AF_VENDOR11                    = 0x3d
	AF_VENDOR12                    = 0x3f
	AF_VENDOR13                    = 0x41
	AF_VENDOR14                    = 0x43
	AF_VENDOR15                    = 0x45
	AF_VENDOR16                    = 0x47
	AF_VENDOR17                    = 0x49
	AF_VENDOR18                    = 0x4b
	AF_VENDOR19                    = 0x4d
	AF_VENDOR20                    = 0x4f
	AF_VENDOR21                    = 0x51
	AF_VENDOR22                    = 0x53
	AF_VENDOR23                    = 0x55
	AF_VENDOR24                    = 0x57
	AF_VENDOR25                    = 0x59
	AF_VENDOR26                    = 0x5b
	AF_VENDOR27                    = 0x5d
	AF_VENDOR28                    = 0x5f
	AF_VENDOR29                    = 0x61
	AF_VENDOR30                    = 0x63
	AF_VENDOR31                    = 0x65
	AF_VENDOR32                    = 0x67
	AF_VENDOR33                    = 0x69
	AF_VENDOR34                    = 0x6b
	AF_VENDOR35                    = 0x6d
	AF_VENDOR36                    = 0x6f
	AF_VENDOR37                    = 0x71
	AF_VENDOR38                    = 0x73
	AF_VENDOR39                    = 0x75
	AF_VENDOR40                    = 0x77
	AF_VENDOR41                    = 0x79
	AF_VENDOR42                    = 0x7b
	AF_VENDOR43                    = 0x7d
	AF_VENDOR44                    = 0x7f
	AF_VENDOR45                    = 0x81
	AF_VENDOR46                    = 0x83
	AF_VENDOR47                    = 0x85
	ALTWERASE                      = 0x200
	B0                             = 0x0
	B110                           = 0x6e
	B115200                        = 0x1c200
	B1200                          = 0x4b0
	B134                           = 0x86
	B14400                         = 0x3840
	B150                           = 0x96
	B1800                          = 0x708
	B19200                         = 0x4b00
	B200                           = 0xc8
	B230400                        = 0x38400
	B2400                          = 0x960
	B28800                         = 0x7080
	B300                           = 0x12c
	B38400                         = 0x9600
	B460800                        = 0x70800
	B4800                          = 0x12c0
	B50                            = 0x32
	B57600                         = 0xe100
	B600                           = 0x258
	B7200                          = 0x1c20
	B75                            = 0x4b
	B76800                         = 0x12c00
	B921600                        = 0xe1000
	B9600                          = 0x2580
	BIOCFEEDBACK                   = 0x8004427c
	BIOCFLUSH                      = 0x20004268
	BIOCGBLEN                      = 0x40044266
	BIOCGDIRECTION                 = 0x40044276
	BIOCGDLT                       = 0x4004426a
	BIOCGDLTLIST                   = 0xc0104279
	BIOCGETBUFMODE                 = 0x4004427d
	BIOCGETIF                      = 0x4020426b
	BIOCGETZMAX                    = 0x4008427f
	BIOCGHDRCMPLT                  = 0x40044274
	BIOCGRSIG                      = 0x40044272
	BIOCGRTIMEOUT                  = 0x4010426e
	BIOCGSEESENT                   = 0x40044276
	BIOCGSTATS                     = 0x4008426f
	BIOCGTSTAMP                    = 0x40044283
	BIOCIMMEDIATE                  = 0x80044270
	BIOCLOCK                       = 0x2000427a
	BIOCPROMISC                    = 0x20004269
	BIOCROTZBUF                    = 0x40184280
	BIOCSBLEN                      = 0xc0044266
	BIOCSDIRECTION                 = 0x80044277
	BIOCSDLT                       = 0x80044278
	BIOCSETBUFMODE                 = 0x8004427e
	BIOCSETF                       = 0x80104267
	BIOCSETFNR                     = 0x80104282
	BIOCSETIF                      = 0x8020426c
	BIOCSETVLANPCP                 = 0x80044285
	BIOCSETWF                      = 0x8010427b
	BIOCSETZBUF                    = 0x80184281
	BIOCSHDRCMPLT                  = 0x80044275
	BIOCSRSIG                      = 0x80044273
	BIOCSRTIMEOUT                  = 0x8010426d
	BIOCSSEESENT                   = 0x80044277
	BIOCSTSTAMP                    = 0x80044284
	BIOCVERSION                    = 0x40044271
	BPF_A                          = 0x10
	BPF_ABS                        = 0x20
	BPF_ADD                        = 0x0
	BPF_ALIGNMENT                  = 0x8
	BPF_ALU                        = 0x4
	BPF_AND                        = 0x50
	BPF_B                          = 0x10
	BPF_BUFMODE_BUFFER             = 0x1
	BPF_BUFMODE_ZBUF               = 0x2
	BPF_DIV                        = 0x30
	BPF_H                          = 0x8
	BPF_IMM                        = 0x0
	BPF_IND                        = 0x40
	BPF_JA                         = 0x0
	BPF_JEQ                        = 0x10
	BPF_JGE                        = 0x30
	BPF_JGT                        = 0x20
	BPF_JMP                        = 0x5
	BPF_JSET                       = 0x40
	BPF_K                          = 0x0
	BPF_LD                         = 0x0
	BPF_LDX                        = 0x1
	BPF_LEN                        = 0x80
	BPF_LSH                        = 0x60
	BPF_MAJOR_VERSION              = 0x1
	BPF_MAXBUFSIZE                 = 0x80000
	BPF_MAXINSNS                   = 0x200
	BPF_MEM                        = 0x60
	BPF_MEMWORDS                   = 0x10
	BPF_MINBUFSIZE                 = 0x20
	BPF_MINOR_VERSION              = 0x1
	BPF_MISC                       = 0x7
	BPF_MOD                        = 0x90
	BPF_MSH                        = 0xa0
	BPF_MUL                        = 0x20
	BPF_NEG                        = 0x80
	BPF_OR                         = 0x40
	BPF_RELEASE                    = 0x30bb6
	BPF_RET                        = 0x6
	BPF_RSH                        = 0x70
	BPF_ST                         = 0x2
	BPF_STX                        = 0x3
	BPF_SUB                        = 0x10
	BPF_TAX                        = 0x0
	BPF_TXA                        = 0x80
	BPF_T_BINTIME                  = 0x2
	BPF_T_BINTIME_FAST             = 0x102
	BPF_T_BINTIME_MONOTONIC        = 0x202
	BPF_T_BINTIME_MONOTONIC_FAST   = 0x302
	BPF_T_FAST                     = 0x100
	BPF_T_FLAG_MASK                = 0x300
	BPF_T_FORMAT_MASK              = 0x3
	BPF_T_MICROTIME                = 0x0
	BPF_T_MICROTIME_FAST           = 0x100
	BPF_T_MICROTIME_MONOTONIC      = 0x200
	BPF_T_MICROTIME_MONOTONIC_FAST = 0x300
	BPF_T_MONOTONIC                = 0x200
	BPF_T_MONOTONIC_FAST           = 0x300
	BPF_T_NANOTIME                 = 0x1
	BPF_T_NANOTIME_FAST            = 0x101
	BPF_T_NANOTIME_MONOTONIC       = 0x201
	BPF_T_NANOTIME_MONOTONIC_FAST  = 0x301
	BPF_T_NONE                     = 0x3
	BPF_T_NORMAL                   = 0x0
	BPF_W                          = 0x0
	BPF_X                          = 0x8
	BPF_XOR                        = 0xa0
	BRKINT                         = 0x2
	CAP_ACCEPT                     = 0x200000020000000
	CAP_ACL_CHECK                  = 0x400000000010000
	CAP_ACL_DELETE                 = 0x400000000020000
	CAP_ACL_GET                    = 0x400000000040000
	CAP_ACL_SET                    = 0x400000000080000
	CAP_ALL0                       = 0x20007ffffffffff
	CAP_ALL1                       = 0x4000000001fffff
	CAP_BIND                       = 0x200000040000000
	CAP_BINDAT                     = 0x200008000000400
	CAP_CHFLAGSAT                  = 0x200000000001400
	CAP_CONNECT                    = 0x200000080000000
	CAP_CONNECTAT                  = 0x200010000000400
	CAP_CREATE                     = 0x200000000000040
	CAP_EVENT                      = 0x400000000000020
	CAP_EXTATTR_DELETE             = 0x400000000001000
	CAP_EXTATTR_GET                = 0x400000000002000
	CAP_EXTATTR_LIST               = 0x400000000004000
	CAP_EXTATTR_SET                = 0x400000000008000
	CAP_FCHDIR                     = 0x200000000000800
	CAP_FCHFLAGS                   = 0x200000000001000
	CAP_FCHMOD                     = 0x200000000002000
	CAP_FCHMODAT                   = 0x200000000002400
	CAP_FCHOWN                     = 0x200000000004000
	CAP_FCHOWNAT                   = 0x200000000004400
	CAP_FCNTL                      = 0x200000000008000
	CAP_FCNTL_ALL                  = 0x78
	CAP_FCNTL_GETFL                = 0x8
	CAP_FCNTL_GETOWN               = 0x20
	CAP_FCNTL_SETFL                = 0x10
	CAP_FCNTL_SETOWN               = 0x40
	CAP_FEXECVE                    = 0x200000000000080
	CAP_FLOCK                      = 0x200000000010000
	CAP_FPATHCONF                  = 0x200000000020000
	CAP_FSCK                       = 0x200000000040000
	CAP_FSTAT                      = 0x200000000080000
	CAP_FSTATAT                    = 0x200000000080400
	CAP_FSTATFS                    = 0x200000000100000
	CAP_FSYNC                      = 0x200000000000100
	CAP_FTRUNCATE                  = 0x200000000000200
	CAP_FUTIMES                    = 0x200000000200000
	CAP_FUTIMESAT                  = 0x200000000200400
	CAP_GETPEERNAME                = 0x200000100000000
	CAP_GETSOCKNAME                = 0x200000200000000
	CAP_GETSOCKOPT                 = 0x200000400000000
	CAP_IOCTL                      = 0x400000000000080
	CAP_IOCTLS_ALL                 = 0x7fffffffffffffff
	CAP_KQUEUE                     = 0x400000000100040
	CAP_KQUEUE_CHANGE              = 0x400000000100000
	CAP_KQUEUE_EVENT               = 0x400000000000040
	CAP_LINKAT_SOURCE              = 0x200020000000400
	CAP_LINKAT_TARGET              = 0x200000000400400
	CAP_LISTEN                     = 0x200000800000000
	CAP_LOOKUP                     = 0x200000000000400
	CAP_MAC_GET                    = 0x400000000000001
	CAP_MAC_SET                    = 0x400000000000002
	CAP_MKDIRAT                    = 0x200000000800400
	CAP_MKFIFOAT                   = 0x200000001000400
	CAP_MKNODAT                    = 0x200000002000400
	CAP_MMAP                       = 0x200000000000010
	CAP_MMAP_R                     = 0x20000000000001d
	CAP_MMAP_RW                    = 0x20000000000001f
	CAP_MMAP_RWX                   = 0x20000000000003f
	CAP_MMAP_RX                    = 0x20000000000003d
	CAP_MMAP_W                     = 0x20000000000001e
	CAP_MMAP_WX                    = 0x20000000000003e
	CAP_MMAP_X                     = 0x20000000000003c
	CAP_PDGETPID                   = 0x400000000000200
	CAP_PDKILL                     = 0x400000000000800
	CAP_PDWAIT                     = 0x400000000000400
	CAP_PEELOFF                    = 0x200001000000000
	CAP_POLL_EVENT                 = 0x400000000000020
	CAP_PREAD                      = 0x20000000000000d
	CAP_PWRITE                     = 0x20000000000000e
	CAP_READ                       = 0x200000000000001
	CAP_RECV                       = 0x200000000000001
	CAP_RENAMEAT_SOURCE            = 0x200000004000400
	CAP_RENAMEAT_TARGET            = 0x200040000000400
	CAP_RIGHTS_VERSION             = 0x0
	CAP_RIGHTS_VERSION_00          = 0x0
	CAP_SEEK                       = 0x20000000000000c
	CAP_SEEK_TELL                  = 0x200000000000004
	CAP_SEM_GETVALUE               = 0x400000000000004
	CAP_SEM_POST                   = 0x400000000000008
	CAP_SEM_WAIT                   = 0x400000000000010
	CAP_SEND                       = 0x200000000000002
	CAP_SETSOCKOPT                 = 0x200002000000000
	CAP_SHUTDOWN                   = 0x200004000000000
	CAP_SOCK_CLIENT                = 0x200007780000003
	CAP_SOCK_SERVER                = 0x200007f60000003
	CAP_SYMLINKAT                  = 0x200000008000400
	CAP_TTYHOOK                    = 0x400000000000100
	CAP_UNLINKAT                   = 0x200000010000400
	CAP_UNUSED0_44                 = 0x200080000000000
	CAP_UNUSED0_57                 = 0x300000000000000
	CAP_UNUSED1_22                 = 0x400000000200000
	CAP_UNUSED1_57                 = 0x500000000000000
	CAP_WRITE                      = 0x200000000000002
	CFLUSH                         = 0xf
	CLOCAL                         = 0x8000
	CLOCK_MONOTONIC                = 0x4
	CLOCK_MONOTONIC_FAST           = 0xc
	CLOCK_MONOTONIC_PRECISE        = 0xb
	CLOCK_PROCESS_CPUTIME_ID       = 0xf
	CLOCK_PROF                     = 0x2
	CLOCK_REALTIME                 = 0x0
	CLOCK_REALTIME_FAST            = 0xa
	CLOCK_REALTIME_PRECISE         = 0x9
	CLOCK_SECOND                   = 0xd
	CLOCK_THREAD_CPUTIME_ID        = 0xe
	CLOCK_UPTIME                   = 0x5
	CLOCK_UPTIME_FAST              = 0x8
	CLOCK_UPTIME_PRECISE           = 0x7
	CLOCK_VIRTUAL                  = 0x1
	CPUSTATES                      = 0x5
	CP_IDLE                        = 0x4
	CP_INTR                        = 0x3
	CP_NICE                        = 0x1
	CP_SYS                         = 0x2
	CP_USER                        = 0x0
	CREAD                          = 0x800
	CRTSCTS                        = 0x30000
	CS5                            = 0x0
	CS6                            = 0x100
	CS7                            = 0x200
	CS8                            = 0x300
	CSIZE                          = 0x300
	CSTART                         = 0x11
	CSTATUS                        = 0x14
	CSTOP                          = 0x13
	CSTOPB                         = 0x400
	CSUSP                          = 0x1a
	CTL_HW                         = 0x6
	CTL_KERN                       = 0x1
	CTL_MAXNAME                    = 0x18
	CTL_NET                        = 0x4
	DIOCGATTR                      = 0xc148648e
	DIOCGDELETE                    = 0x80106488
	DIOCGFLUSH                     = 0x20006487
	DIOCGFRONTSTUFF                = 0x40086486
	DIOCGFWHEADS                   = 0x40046483
	DIOCGFWSECTORS                 = 0x40046482
	DIOCGIDENT                     = 0x41006489
	DIOCGMEDIASIZE                 = 0x40086481
	DIOCGPHYSPATH                  = 0x4400648d
	DIOCGPROVIDERNAME              = 0x4400648a
	DIOCGSECTORSIZE                = 0x40046480
	DIOCGSTRIPEOFFSET              = 0x4008648c
	DIOCGSTRIPESIZE                = 0x4008648b
	DIOCSKERNELDUMP                = 0x80506490
	DIOCSKERNELDUMP_FREEBSD11      = 0x80046485
	DIOCZONECMD                    = 0xc080648f
	DLT_A429                       = 0xb8
	DLT_A653_ICM                   = 0xb9
	DLT_AIRONET_HEADER             = 0x78
	DLT_AOS                        = 0xde
	DLT_APPLE_IP_OVER_IEEE1394     = 0x8a
	DLT_ARCNET                     = 0x7
	DLT_ARCNET_LINUX               = 0x81
	DLT_ATM_CLIP                   = 0x13
	DLT_ATM_RFC1483                = 0xb
	DLT_AURORA                     = 0x7e
	DLT_AX25                       = 0x3
	DLT_AX25_KISS                  = 0xca
	DLT_BACNET_MS_TP               = 0xa5
	DLT_BLUETOOTH_BREDR_BB         = 0xff
	DLT_BLUETOOTH_HCI_H4           = 0xbb
	DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9
	DLT_BLUETOOTH_LE_LL            = 0xfb
	DLT_BLUETOOTH_LE_LL_WITH_PHDR  = 0x100
	DLT_BLUETOOTH_LINUX_MONITOR    = 0xfe
	DLT_CAN20B                     = 0xbe
	DLT_CAN_SOCKETCAN              = 0xe3
	DLT_CHAOS                      = 0x5
	DLT_CHDLC                      = 0x68
	DLT_CISCO_IOS                  = 0x76
	DLT_CLASS_NETBSD_RAWAF         = 0x2240000
	DLT_C_HDLC                     = 0x68
	DLT_C_HDLC_WITH_DIR            = 0xcd
	DLT_DBUS                       = 0xe7
	DLT_DECT                       = 0xdd
	DLT_DISPLAYPORT_AUX            = 0x113
	DLT_DOCSIS                     = 0x8f
	DLT_DOCSIS31_XRA31             = 0x111
	DLT_DVB_CI                     = 0xeb
	DLT_ECONET                     = 0x73
	DLT_EN10MB                     = 0x1
	DLT_EN3MB                      = 0x2
	DLT_ENC                        = 0x6d
	DLT_EPON                       = 0x103
	DLT_ERF                        = 0xc5
	DLT_ERF_ETH                    = 0xaf
	DLT_ERF_POS                    = 0xb0
	DLT_ETHERNET_MPACKET           = 0x112
	DLT_FC_2                       = 0xe0
	DLT_FC_2_WITH_FRAME_DELIMS     = 0xe1
	DLT_FDDI                       = 0xa
	DLT_FLEXRAY                    = 0xd2
	DLT_FRELAY                     = 0x6b
	DLT_FRELAY_WITH_DIR            = 0xce
	DLT_GCOM_SERIAL                = 0xad
	DLT_GCOM_T1E1                  = 0xac
	DLT_GPF_F                      = 0xab
	DLT_GPF_T                      = 0xaa
	DLT_GPRS_LLC                   = 0xa9
	DLT_GSMTAP_ABIS                = 0xda
	DLT_GSMTAP_UM                  = 0xd9
	DLT_IBM_SN                     = 0x92
	DLT_IBM_SP                     = 0x91
	DLT_IEEE802                    = 0x6
	DLT_IEEE802_11                 = 0x69
	DLT_IEEE802_11_RADIO           = 0x7f
	DLT_IEEE802_11_RADIO_AVS       = 0xa3
	DLT_IEEE802_15_4               = 0xc3
	DLT_IEEE802_15_4_LINUX         = 0xbf
	DLT_IEEE802_15_4_NOFCS         = 0xe6
	DLT_IEEE802_15_4_NONASK_PHY    = 0xd7
	DLT_IEEE802_16_MAC_CPS         = 0xbc
	DLT_IEEE802_16_MAC_CPS_RADIO   = 0xc1
	DLT_INFINIBAND                 = 0xf7
	DLT_IPFILTER                   = 0x74
	DLT_IPMB_KONTRON               = 0xc7
	DLT_IPMB_LINUX                 = 0xd1
	DLT_IPMI_HPM_2                 = 0x104
	DLT_IPNET                      = 0xe2
	DLT_IPOIB                      = 0xf2
	DLT_IPV4                       = 0xe4
	DLT_IPV6                       = 0xe5
	DLT_IP_OVER_FC                 = 0x7a
	DLT_ISO_14443                  = 0x108
	DLT_JUNIPER_ATM1               = 0x89
	DLT_JUNIPER_ATM2               = 0x87
	DLT_JUNIPER_ATM_CEMIC          = 0xee
	DLT_JUNIPER_CHDLC              = 0xb5
	DLT_JUNIPER_ES                 = 0x84
	DLT_JUNIPER_ETHER              = 0xb2
	DLT_JUNIPER_FIBRECHANNEL       = 0xea
	DLT_JUNIPER_FRELAY             = 0xb4
	DLT_JUNIPER_GGSN               = 0x85
	DLT_JUNIPER_ISM                = 0xc2
	DLT_JUNIPER_MFR                = 0x86
	DLT_JUNIPER_MLFR               = 0x83
	DLT_JUNIPER_MLPPP              = 0x82
	DLT_JUNIPER_MONITOR            = 0xa4
	DLT_JUNIPER_PIC_PEER           = 0xae
	DLT_JUNIPER_PPP                = 0xb3
	DLT_JUNIPER_PPPOE              = 0xa7
	DLT_JUNIPER_PPPOE_ATM          = 0xa8
	DLT_JUNIPER_SERVICES           = 0x88
	DLT_JUNIPER_SRX_E2E            = 0xe9
	DLT_JUNIPER_ST                 = 0xc8
	DLT_JUNIPER_VP                 = 0xb7
	DLT_JUNIPER_VS                 = 0xe8
	DLT_LAPB_WITH_DIR              = 0xcf
	DLT_LAPD                       = 0xcb
	DLT_LIN                        = 0xd4
	DLT_LINUX_EVDEV                = 0xd8
	DLT_LINUX_IRDA                 = 0x90
	DLT_LINUX_LAPD                 = 0xb1
	DLT_LINUX_PPP_WITHDIRECTION    = 0xa6
	DLT_LINUX_SLL                  = 0x71
	DLT_LINUX_SLL2                 = 0x114
	DLT_LOOP                       = 0x6c
	DLT_LORATAP                    = 0x10e
	DLT_LTALK                      = 0x72
	DLT_MATCHING_MAX               = 0x114
	DLT_MATCHING_MIN               = 0x68
	DLT_MFR                        = 0xb6
	DLT_MOST                       = 0xd3
	DLT_MPEG_2_TS                  = 0xf3
	DLT_MPLS                       = 0xdb
	DLT_MTP2                       = 0x8c
	DLT_MTP2_WITH_PHDR             = 0x8b
	DLT_MTP3                       = 0x8d
	DLT_MUX27010                   = 0xec
	DLT_NETANALYZER                = 0xf0
	DLT_NETANALYZER_TRANSPARENT    = 0xf1
	DLT_NETLINK                    = 0xfd
	DLT_NFC_LLCP                   = 0xf5
	DLT_NFLOG                      = 0xef
	DLT_NG40                       = 0xf4
	DLT_NORDIC_BLE                 = 0x110
	DLT_NULL                       = 0x0
	DLT_OPENFLOW                   = 0x10b
	DLT_PCI_EXP                    = 0x7d
	DLT_PFLOG                      = 0x75
	DLT_PFSYNC                     = 0x79
	DLT_PKTAP                      = 0x102
	DLT_PPI                        = 0xc0
	DLT_PPP                        = 0x9
	DLT_PPP_BSDOS                  = 0xe
	DLT_PPP_ETHER                  = 0x33
	DLT_PPP_PPPD                   = 0xa6
	DLT_PPP_SERIAL                 = 0x32
	DLT_PPP_WITH_DIR               = 0xcc
	DLT_PPP_WITH_DIRECTION         = 0xa6
	DLT_PRISM_HEADER               = 0x77
	DLT_PROFIBUS_DL                = 0x101
	DLT_PRONET                     = 0x4
	DLT_RAIF1                      = 0xc6
	DLT_RAW                        = 0xc
	DLT_RDS                        = 0x109
	DLT_REDBACK_SMARTEDGE          = 0x20
	DLT_RIO                        = 0x7c
	DLT_RTAC_SERIAL                = 0xfa
	DLT_SCCP                       = 0x8e
	DLT_SCTP                       = 0xf8
	DLT_SDLC                       = 0x10c
	DLT_SITA                       = 0xc4
	DLT_SLIP                       = 0x8
	DLT_SLIP_BSDOS                 = 0xd
	DLT_STANAG_5066_D_PDU          = 0xed
	DLT_SUNATM                     = 0x7b
	DLT_SYMANTEC_FIREWALL          = 0x63
	DLT_TI_LLN_SNIFFER             = 0x10d
	DLT_TZSP                       = 0x80
	DLT_USB                        = 0xba
	DLT_USBPCAP                    = 0xf9
	DLT_USB_DARWIN                 = 0x10a
	DLT_USB_FREEBSD                = 0xba
	DLT_USB_LINUX                  = 0xbd
	DLT_USB_LINUX_MMAPPED          = 0xdc
	DLT_USER0                      = 0x93
	DLT_USER1                      = 0x94
	DLT_USER10                     = 0x9d
	DLT_USER11                     = 0x9e
	DLT_USER12                     = 0x9f
	DLT_USER13                     = 0xa0
	DLT_USER14                     = 0xa1
	DLT_USER15                     = 0xa2
	DLT_USER2                      = 0x95
	DLT_USER3                      = 0x96
	DLT_USER4                      = 0x97
	DLT_USER5                      = 0x98
	DLT_USER6                      = 0x99
	DLT_USER7                      = 0x9a
	DLT_USER8                      = 0x9b
	DLT_USER9                      = 0x9c
	DLT_VSOCK                      = 0x10f
	DLT_WATTSTOPPER_DLM            = 0x107
	DLT_WIHART                     = 0xdf
	DLT_WIRESHARK_UPPER_PDU        = 0xfc
	DLT_X2E_SERIAL                 = 0xd5
	DLT_X2E_XORAYA                 = 0xd6
	DLT_ZWAVE_R1_R2                = 0x105
	DLT_ZWAVE_R3                   = 0x106
	DT_BLK                         = 0x6
	DT_CHR                         = 0x2
	DT_DIR                         = 0x4
	DT_FIFO                        = 0x1
	DT_LNK                         = 0xa
	DT_REG                         = 0x8
	DT_SOCK                        = 0xc
	DT_UNKNOWN                     = 0x0
	DT_WHT                         = 0xe
	ECHO                           = 0x8
	ECHOCTL                        = 0x40
	ECHOE                          = 0x2
	ECHOK                          = 0x4
	ECHOKE                         = 0x1
	ECHONL                         = 0x10
	ECHOPRT                        = 0x20
	EVFILT_AIO                     = -0x3
	EVFILT_EMPTY                   = -0xd
	EVFILT_FS                      = -0x9
	EVFILT_LIO                     = -0xa
	EVFILT_PROC                    = -0x5
	EVFILT_PROCDESC                = -0x8
	EVFILT_READ                    = -0x1
	EVFILT_SENDFILE                = -0xc
	EVFILT_SIGNAL                  = -0x6
	EVFILT_SYSCOUNT                = 0xd
	EVFILT_TIMER                   = -0x7
	EVFILT_USER                    = -0xb
	EVFILT_VNODE                   = -0x4
	EVFILT_WRITE                   = -0x2
	EVNAMEMAP_NAME_SIZE            = 0x40
	EV_ADD                         = 0x1
	EV_CLEAR                       = 0x20
	EV_DELETE                      = 0x2
	EV_DISABLE                     = 0x8
	EV_DISPATCH                    = 0x80
	EV_DROP                        = 0x1000
	EV_ENABLE                      = 0x4
	EV_EOF                         = 0x8000
	EV_ERROR                       = 0x4000
	EV_FLAG1                       = 0x2000
	EV_FLAG2                       = 0x4000
	EV_FORCEONESHOT                = 0x100
	EV_ONESHOT                     = 0x10
	EV_RECEIPT                     = 0x40
	EV_SYSFLAGS                    = 0xf000
	EXTA                           = 0x4b00
	EXTATTR_MAXNAMELEN             = 0xff
	EXTATTR_NAMESPACE_EMPTY        = 0x0
	EXTATTR_NAMESPACE_SYSTEM       = 0x2
	EXTATTR_NAMESPACE_USER         = 0x1
	EXTB                           = 0x9600
	EXTPROC                        = 0x800
	FD_CLOEXEC                     = 0x1
	FD_SETSIZE                     = 0x400
	FLUSHO                         = 0x800000
	F_CANCEL                       = 0x5
	F_DUP2FD                       = 0xa
	F_DUP2FD_CLOEXEC               = 0x12
	F_DUPFD                        = 0x0
	F_DUPFD_CLOEXEC                = 0x11
	F_GETFD                        = 0x1
	F_GETFL                        = 0x3
	F_GETLK                        = 0xb
	F_GETOWN                       = 0x5
	F_OGETLK                       = 0x7
	F_OK                           = 0x0
	F_OSETLK                       = 0x8
	F_OSETLKW                      = 0x9
	F_RDAHEAD                      = 0x10
	F_RDLCK                        = 0x1
	F_READAHEAD                    = 0xf
	F_SETFD                        = 0x2
	F_SETFL                        = 0x4
	F_SETLK                        = 0xc
	F_SETLKW                       = 0xd
	F_SETLK_REMOTE                 = 0xe
	F_SETOWN                       = 0x6
	F_UNLCK                        = 0x2
	F_UNLCKSYS                     = 0x4
	F_WRLCK                        = 0x3
	HUPCL                          = 0x4000
	HW_MACHINE                     = 0x1
	ICANON                         = 0x100
	ICMP6_FILTER                   = 0x12
	ICRNL                          = 0x100
	IEXTEN                         = 0x400
	IFAN_ARRIVAL                   = 0x0
	IFAN_DEPARTURE                 = 0x1
	IFCAP_WOL_MAGIC                = 0x2000
	IFF_ALLMULTI                   = 0x200
	IFF_ALTPHYS                    = 0x4000
	IFF_BROADCAST                  = 0x2
	IFF_CANTCHANGE                 = 0x218f52
	IFF_CANTCONFIG                 = 0x10000
	IFF_DEBUG                      = 0x4
	IFF_DRV_OACTIVE                = 0x400
	IFF_DRV_RUNNING                = 0x40
	IFF_DYING                      = 0x200000
	IFF_LINK0                      = 0x1000
	IFF_LINK1                      = 0x2000
	IFF_LINK2                      = 0x4000
	IFF_LOOPBACK                   = 0x8
	IFF_MONITOR                    = 0x40000
	IFF_MULTICAST                  = 0x8000
	IFF_NOARP                      = 0x80
	IFF_NOGROUP                    = 0x800000
	IFF_OACTIVE                    = 0x400
	IFF_POINTOPOINT                = 0x10
	IFF_PPROMISC                   = 0x20000
	IFF_PROMISC                    = 0x100
	IFF_RENAMING                   = 0x400000
	IFF_RUNNING                    = 0x40
	IFF_SIMPLEX                    = 0x800
	IFF_STATICARP                  = 0x80000
	IFF_UP                         = 0x1
	IFNAMSIZ                       = 0x10
	IFT_BRIDGE                     = 0xd1
	IFT_CARP                       = 0xf8
	IFT_IEEE1394                   = 0x90
	IFT_INFINIBAND                 = 0xc7
	IFT_L2VLAN                     = 0x87
	IFT_L3IPVLAN                   = 0x88
	IFT_PPP                        = 0x17
	IFT_PROPVIRTUAL                = 0x35
	IGNBRK                         = 0x1
	IGNCR                          = 0x80
	IGNPAR                         = 0x4
	IMAXBEL                        = 0x2000
	INLCR                          = 0x40
	INPCK                          = 0x10
	IN_CLASSA_HOST                 = 0xffffff
	IN_CLASSA_MAX                  = 0x80
	IN_CLASSA_NET                  = 0xff000000
	IN_CLASSA_NSHIFT               = 0x18
	IN_CLASSB_HOST                 = 0xffff
	IN_CLASSB_MAX                  = 0x10000
	IN_CLASSB_NET                  = 0xffff0000
	IN_CLASSB_NSHIFT               = 0x10
	IN_CLASSC_HOST                 = 0xff
	IN_CLASSC_NET                  = 0xffffff00
	IN_CLASSC_NSHIFT               = 0x8
	IN_CLASSD_HOST                 = 0xfffffff
	IN_CLASSD_NET                  = 0xf0000000
	IN_CLASSD_NSHIFT               = 0x1c
	IN_LOOPBACKNET                 = 0x7f
	IN_RFC3021_MASK                = 0xfffffffe
	IPPROTO_3PC                    = 0x22
	IPPROTO_ADFS                   = 0x44
	IPPROTO_AH                     = 0x33
	IPPROTO_AHIP                   = 0x3d
	IPPROTO_APES                   = 0x63
	IPPROTO_ARGUS                  = 0xd
	IPPROTO_AX25                   = 0x5d
	IPPROTO_BHA                    = 0x31
	IPPROTO_BLT                    = 0x1e
	IPPROTO_BRSATMON               = 0x4c
	IPPROTO_CARP                   = 0x70
	IPPROTO_CFTP                   = 0x3e
	IPPROTO_CHAOS                  = 0x10
	IPPROTO_CMTP                   = 0x26
	IPPROTO_CPHB                   = 0x49
	IPPROTO_CPNX                   = 0x48
	IPPROTO_DCCP                   = 0x21
	IPPROTO_DDP                    = 0x25
	IPPROTO_DGP                    = 0x56
	IPPROTO_DIVERT                 = 0x102
	IPPROTO_DONE                   = 0x101
	IPPROTO_DSTOPTS                = 0x3c
	IPPROTO_EGP                    = 0x8
	IPPROTO_EMCON                  = 0xe
	IPPROTO_ENCAP                  = 0x62
	IPPROTO_EON                    = 0x50
	IPPROTO_ESP                    = 0x32
	IPPROTO_ETHERIP                = 0x61
	IPPROTO_FRAGMENT               = 0x2c
	IPPROTO_GGP                    = 0x3
	IPPROTO_GMTP                   = 0x64
	IPPROTO_GRE                    = 0x2f
	IPPROTO_HELLO                  = 0x3f
	IPPROTO_HIP                    = 0x8b
	IPPROTO_HMP                    = 0x14
	IPPROTO_HOPOPTS                = 0x0
	IPPROTO_ICMP                   = 0x1
	IPPROTO_ICMPV6                 = 0x3a
	IPPROTO_IDP                    = 0x16
	IPPROTO_IDPR                   = 0x23
	IPPROTO_IDRP                   = 0x2d
	IPPROTO_IGMP                   = 0x2
	IPPROTO_IGP                    = 0x55
	IPPROTO_IGRP                   = 0x58
	IPPROTO_IL                     = 0x28
	IPPROTO_INLSP                  = 0x34
	IPPROTO_INP                    = 0x20
	IPPROTO_IP                     = 0x0
	IPPROTO_IPCOMP                 = 0x6c
	IPPROTO_IPCV                   = 0x47
	IPPROTO_IPEIP                  = 0x5e
	IPPROTO_IPIP                   = 0x4
	IPPROTO_IPPC                   = 0x43
	IPPROTO_IPV4                   = 0x4
	IPPROTO_IPV6                   = 0x29
	IPPROTO_IRTP                   = 0x1c
	IPPROTO_KRYPTOLAN              = 0x41
	IPPROTO_LARP                   = 0x5b
	IPPROTO_LEAF1                  = 0x19
	IPPROTO_LEAF2                  = 0x1a
	IPPROTO_MAX                    = 0x100
	IPPROTO_MEAS                   = 0x13
	IPPROTO_MH                     = 0x87
	IPPROTO_MHRP                   = 0x30
	IPPROTO_MICP                   = 0x5f
	IPPROTO_MOBILE                 = 0x37
	IPPROTO_MPLS                   = 0x89
	IPPROTO_MTP                    = 0x5c
	IPPROTO_MUX                    = 0x12
	IPPROTO_ND                     = 0x4d
	IPPROTO_NHRP                   = 0x36
	IPPROTO_NONE                   = 0x3b
	IPPROTO_NSP                    = 0x1f
	IPPROTO_NVPII                  = 0xb
	IPPROTO_OLD_DIVERT             = 0xfe
	IPPROTO_OSPFIGP                = 0x59
	IPPROTO_PFSYNC                 = 0xf0
	IPPROTO_PGM                    = 0x71
	IPPROTO_PIGP                   = 0x9
	IPPROTO_PIM                    = 0x67
	IPPROTO_PRM                    = 0x15
	IPPROTO_PUP                    = 0xc
	IPPROTO_PVP                    = 0x4b
	IPPROTO_RAW                    = 0xff
	IPPROTO_RCCMON                 = 0xa
	IPPROTO_RDP                    = 0x1b
	IPPROTO_RESERVED_253           = 0xfd
	IPPROTO_RESERVED_254           = 0xfe
	IPPROTO_ROUTING                = 0x2b
	IPPROTO_RSVP                   = 0x2e
	IPPROTO_RVD                    = 0x42
	IPPROTO_SATEXPAK               = 0x40
	IPPROTO_SATMON                 = 0x45
	IPPROTO_SCCSP                  = 0x60
	IPPROTO_SCTP                   = 0x84
	IPPROTO_SDRP                   = 0x2a
	IPPROTO_SEND                   = 0x103
	IPPROTO_SHIM6                  = 0x8c
	IPPROTO_SKIP                   = 0x39
	IPPROTO_SPACER                 = 0x7fff
	IPPROTO_SRPC                   = 0x5a
	IPPROTO_ST                     = 0x7
	IPPROTO_SVMTP                  = 0x52
	IPPROTO_SWIPE                  = 0x35
	IPPROTO_TCF                    = 0x57
	IPPROTO_TCP                    = 0x6
	IPPROTO_TLSP                   = 0x38
	IPPROTO_TP                     = 0x1d
	IPPROTO_TPXX                   = 0x27
	IPPROTO_TRUNK1                 = 0x17
	IPPROTO_TRUNK2                 = 0x18
	IPPROTO_TTP                    = 0x54
	IPPROTO_UDP                    = 0x11
	IPPROTO_UDPLITE                = 0x88
	IPPROTO_VINES                  = 0x53
	IPPROTO_VISA                   = 0x46
	IPPROTO_VMTP                   = 0x51
	IPPROTO_WBEXPAK                = 0x4f
	IPPROTO_WBMON                  = 0x4e
	IPPROTO_WSN                    = 0x4a
	IPPROTO_XNET                   = 0xf
	IPPROTO_XTP                    = 0x24
	IPV6_AUTOFLOWLABEL             = 0x3b
	IPV6_BINDANY                   = 0x40
	IPV6_BINDMULTI                 = 0x41
	IPV6_BINDV6ONLY                = 0x1b
	IPV6_CHECKSUM                  = 0x1a
	IPV6_DEFAULT_MULTICAST_HOPS    = 0x1
	IPV6_DEFAULT_MULTICAST_LOOP    = 0x1
	IPV6_DEFHLIM                   = 0x40
	IPV6_DONTFRAG                  = 0x3e
	IPV6_DSTOPTS                   = 0x32
	IPV6_FLOWID                    = 0x43
	IPV6_FLOWINFO_MASK             = 0xffffff0f
	IPV6_FLOWLABEL_LEN             = 0x14
	IPV6_FLOWLABEL_MASK            = 0xffff0f00
	IPV6_FLOWTYPE                  = 0x44
	IPV6_FRAGTTL                   = 0x78
	IPV6_FW_ADD                    = 0x1e
	IPV6_FW_DEL                    = 0x1f
	IPV6_FW_FLUSH                  = 0x20
	IPV6_FW_GET                    = 0x22
	IPV6_FW_ZERO                   = 0x21
	IPV6_HLIMDEC                   = 0x1
	IPV6_HOPLIMIT                  = 0x2f
	IPV6_HOPOPTS                   = 0x31
	IPV6_IPSEC_POLICY              = 0x1c
	IPV6_JOIN_GROUP                = 0xc
	IPV6_LEAVE_GROUP               = 0xd
	IPV6_MAXHLIM                   = 0xff
	IPV6_MAXOPTHDR                 = 0x800
	IPV6_MAXPACKET                 = 0xffff
	IPV6_MAX_GROUP_SRC_FILTER      = 0x200
	IPV6_MAX_MEMBERSHIPS           = 0xfff
	IPV6_MAX_SOCK_SRC_FILTER       = 0x80
	IPV6_MMTU                      = 0x500
	IPV6_MSFILTER                  = 0x4a
	IPV6_MULTICAST_HOPS            = 0xa
	IPV6_MULTICAST_IF              = 0x9
	IPV6_MULTICAST_LOOP            = 0xb
	IPV6_NEXTHOP                   = 0x30
	IPV6_ORIGDSTADDR               = 0x48
	IPV6_PATHMTU                   = 0x2c
	IPV6_PKTINFO                   = 0x2e
	IPV6_PORTRANGE                 = 0xe
	IPV6_PORTRANGE_DEFAULT         = 0x0
	IPV6_PORTRANGE_HIGH            = 0x1
	IPV6_PORTRANGE_LOW             = 0x2
	IPV6_PREFER_TEMPADDR           = 0x3f
	IPV6_RECVDSTOPTS               = 0x28
	IPV6_RECVFLOWID                = 0x46
	IPV6_RECVHOPLIMIT              = 0x25
	IPV6_RECVHOPOPTS               = 0x27
	IPV6_RECVORIGDSTADDR           = 0x48
	IPV6_RECVPATHMTU               = 0x2b
	IPV6_RECVPKTINFO               = 0x24
	IPV6_RECVRSSBUCKETID           = 0x47
	IPV6_RECVRTHDR                 = 0x26
	IPV6_RECVTCLASS                = 0x39
	IPV6_RSSBUCKETID               = 0x45
	IPV6_RSS_LISTEN_BUCKET         = 0x42
	IPV6_RTHDR                     = 0x33
	IPV6_RTHDRDSTOPTS              = 0x23
	IPV6_RTHDR_LOOSE               = 0x0
	IPV6_RTHDR_STRICT              = 0x1
	IPV6_RTHDR_TYPE_0              = 0x0
	IPV6_SOCKOPT_RESERVED1         = 0x3
	IPV6_TCLASS                    = 0x3d
	IPV6_UNICAST_HOPS              = 0x4
	IPV6_USE_MIN_MTU               = 0x2a
	IPV6_V6ONLY                    = 0x1b
	IPV6_VERSION                   = 0x60
	IPV6_VERSION_MASK              = 0xf0
	IPV6_VLAN_PCP                  = 0x4b
	IP_ADD_MEMBERSHIP              = 0xc
	IP_ADD_SOURCE_MEMBERSHIP       = 0x46
	IP_BINDANY                     = 0x18
	IP_BINDMULTI                   = 0x19
	IP_BLOCK_SOURCE                = 0x48
	IP_DEFAULT_MULTICAST_LOOP      = 0x1
	IP_DEFAULT_MULTICAST_TTL       = 0x1
	IP_DF                          = 0x4000
	IP_DONTFRAG                    = 0x43
	IP_DROP_MEMBERSHIP             = 0xd
	IP_DROP_SOURCE_MEMBERSHIP      = 0x47
	IP_DUMMYNET3                   = 0x31
	IP_DUMMYNET_CONFIGURE          = 0x3c
	IP_DUMMYNET_DEL                = 0x3d
	IP_DUMMYNET_FLUSH              = 0x3e
	IP_DUMMYNET_GET                = 0x40
	IP_FLOWID                      = 0x5a
	IP_FLOWTYPE                    = 0x5b
	IP_FW3                         = 0x30
	IP_FW_ADD                      = 0x32
	IP_FW_DEL                      = 0x33
	IP_FW_FLUSH                    = 0x34
	IP_FW_GET                      = 0x36
	IP_FW_NAT_CFG                  = 0x38
	IP_FW_NAT_DEL                  = 0x39
	IP_FW_NAT_GET_CONFIG           = 0x3a
	IP_FW_NAT_GET_LOG              = 0x3b
	IP_FW_RESETLOG                 = 0x37
	IP_FW_TABLE_ADD                = 0x28
	IP_FW_TABLE_DEL                = 0x29
	IP_FW_TABLE_FLUSH              = 0x2a
	IP_FW_TABLE_GETSIZE            = 0x2b
	IP_FW_TABLE_LIST               = 0x2c
	IP_FW_ZERO                     = 0x35
	IP_HDRINCL                     = 0x2
	IP_IPSEC_POLICY                = 0x15
	IP_MAXPACKET                   = 0xffff
	IP_MAX_GROUP_SRC_FILTER        = 0x200
	IP_MAX_MEMBERSHIPS             = 0xfff
	IP_MAX_SOCK_MUTE_FILTER        = 0x80
	IP_MAX_SOCK_SRC_FILTER         = 0x80
	IP_MF                          = 0x2000
	IP_MINTTL                      = 0x42
	IP_MSFILTER                    = 0x4a
	IP_MSS                         = 0x240
	IP_MULTICAST_IF                = 0x9
	IP_MULTICAST_LOOP              = 0xb
	IP_MULTICAST_TTL               = 0xa
	IP_MULTICAST_VIF               = 0xe
	IP_OFFMASK                     = 0x1fff
	IP_ONESBCAST                   = 0x17
	IP_OPTIONS                     = 0x1
	IP_ORIGDSTADDR                 = 0x1b
	IP_PORTRANGE                   = 0x13
	IP_PORTRANGE_DEFAULT           = 0x0
	IP_PORTRANGE_HIGH              = 0x1
	IP_PORTRANGE_LOW               = 0x2
	IP_RECVDSTADDR                 = 0x7
	IP_RECVFLOWID                  = 0x5d
	IP_RECVIF                      = 0x14
	IP_RECVOPTS                    = 0x5
	IP_RECVORIGDSTADDR             = 0x1b
	IP_RECVRETOPTS                 = 0x6
	IP_RECVRSSBUCKETID             = 0x5e
	IP_RECVTOS                     = 0x44
	IP_RECVTTL                     = 0x41
	IP_RETOPTS                     = 0x8
	IP_RF                          = 0x8000
	IP_RSSBUCKETID                 = 0x5c
	IP_RSS_LISTEN_BUCKET           = 0x1a
	IP_RSVP_OFF                    = 0x10
	IP_RSVP_ON                     = 0xf
	IP_RSVP_VIF_OFF                = 0x12
	IP_RSVP_VIF_ON                 = 0x11
	IP_SENDSRCADDR                 = 0x7
	IP_TOS                         = 0x3
	IP_TTL                         = 0x4
	IP_UNBLOCK_SOURCE              = 0x49
	IP_VLAN_PCP                    = 0x4b
	ISIG                           = 0x80
	ISTRIP                         = 0x20
	ITIMER_PROF                    = 0x2
	ITIMER_REAL                    = 0x0
	ITIMER_VIRTUAL                 = 0x1
	IXANY                          = 0x800
	IXOFF                          = 0x400
	IXON                           = 0x200
	KERN_HOSTNAME                  = 0xa
	KERN_OSRELEASE                 = 0x2
	KERN_OSTYPE                    = 0x1
	KERN_VERSION                   = 0x4
	LOCAL_CONNWAIT                 = 0x4
	LOCAL_CREDS                    = 0x2
	LOCAL_PEERCRED                 = 0x1
	LOCAL_VENDOR                   = 0x80000000
	LOCK_EX                        = 0x2
	LOCK_NB                        = 0x4
	LOCK_SH                        = 0x1
	LOCK_UN                        = 0x8
	MADV_AUTOSYNC                  = 0x7
	MADV_CORE                      = 0x9
	MADV_DONTNEED                  = 0x4
	MADV_FREE                      = 0x5
	MADV_NOCORE                    = 0x8
	MADV_NORMAL                    = 0x0
	MADV_NOSYNC                    = 0x6
	MADV_PROTECT                   = 0xa
	MADV_RANDOM                    = 0x1
	MADV_SEQUENTIAL                = 0x2
	MADV_WILLNEED                  = 0x3
	MAP_32BIT                      = 0x80000
	MAP_ALIGNED_SUPER              = 0x1000000
	MAP_ALIGNMENT_MASK             = -0x1000000
	MAP_ALIGNMENT_SHIFT            = 0x18
	MAP_ANON                       = 0x1000
	MAP_ANONYMOUS                  = 0x1000
	MAP_COPY                       = 0x2
	MAP_EXCL                       = 0x4000
	MAP_FILE                       = 0x0
	MAP_FIXED                      = 0x10
	MAP_GUARD                      = 0x2000
	MAP_HASSEMAPHORE               = 0x200
	MAP_NOCORE                     = 0x20000
	MAP_NOSYNC                     = 0x800
	MAP_PREFAULT_READ              = 0x40000
	MAP_PRIVATE                    = 0x2
	MAP_RESERVED0020               = 0x20
	MAP_RESERVED0040               = 0x40
	MAP_RESERVED0080               = 0x80
	MAP_RESERVED0100               = 0x100
	MAP_SHARED                     = 0x1
	MAP_STACK                      = 0x400
	MCAST_BLOCK_SOURCE             = 0x54
	MCAST_EXCLUDE                  = 0x2
	MCAST_INCLUDE                  = 0x1
	MCAST_JOIN_GROUP               = 0x50
	MCAST_JOIN_SOURCE_GROUP        = 0x52
	MCAST_LEAVE_GROUP              = 0x51
	MCAST_LEAVE_SOURCE_GROUP       = 0x53
	MCAST_UNBLOCK_SOURCE           = 0x55
	MCAST_UNDEFINED                = 0x0
	MCL_CURRENT                    = 0x1
	MCL_FUTURE                     = 0x2
	MNT_ACLS                       = 0x8000000
	MNT_ASYNC                      = 0x40
	MNT_AUTOMOUNTED                = 0x200000000
	MNT_BYFSID                     = 0x8000000
	MNT_CMDFLAGS                   = 0xd0f0000
	MNT_DEFEXPORTED                = 0x200
	MNT_DELEXPORT                  = 0x20000
	MNT_EXKERB                     = 0x800
	MNT_EXPORTANON                 = 0x400
	MNT_EXPORTED                   = 0x100
	MNT_EXPUBLIC                   = 0x20000000
	MNT_EXRDONLY                   = 0x80
	MNT_FORCE                      = 0x80000
	MNT_GJOURNAL                   = 0x2000000
	MNT_IGNORE                     = 0x800000
	MNT_LAZY                       = 0x3
	MNT_LOCAL                      = 0x1000
	MNT_MULTILABEL                 = 0x4000000
	MNT_NFS4ACLS                   = 0x10
	MNT_NOATIME                    = 0x10000000
	MNT_NOCLUSTERR                 = 0x40000000
	MNT_NOCLUSTERW                 = 0x80000000
	MNT_NOEXEC                     = 0x4
	MNT_NONBUSY                    = 0x4000000
	MNT_NOSUID                     = 0x8
	MNT_NOSYMFOLLOW                = 0x400000
	MNT_NOWAIT                     = 0x2
	MNT_QUOTA                      = 0x2000
	MNT_RDONLY                     = 0x1
	MNT_RELOAD                     = 0x40000
	MNT_ROOTFS                     = 0x4000
	MNT_SNAPSHOT                   = 0x1000000
	MNT_SOFTDEP                    = 0x200000
	MNT_SUIDDIR                    = 0x100000
	MNT_SUJ                        = 0x100000000
	MNT_SUSPEND                    = 0x4
	MNT_SYNCHRONOUS                = 0x2
	MNT_UNION                      = 0x20
	MNT_UNTRUSTED                  = 0x800000000
	MNT_UPDATE                     = 0x10000
	MNT_UPDATEMASK                 = 0xad8d0807e
	MNT_USER                       = 0x8000
	MNT_VERIFIED                   = 0x400000000
	MNT_VISFLAGMASK                = 0xffef0ffff
	MNT_WAIT                       = 0x1
	MSG_CMSG_CLOEXEC               = 0x40000
	MSG_COMPAT                     = 0x8000
	MSG_CTRUNC                     = 0x20
	MSG_DONTROUTE                  = 0x4
	MSG_DONTWAIT                   = 0x80
	MSG_EOF                        = 0x100
	MSG_EOR                        = 0x8
	MSG_NBIO                       = 0x4000
	MSG_NOSIGNAL                   = 0x20000
	MSG_NOTIFICATION               = 0x2000
	MSG_OOB                        = 0x1
	MSG_PEEK                       = 0x2
	MSG_TRUNC                      = 0x10
	MSG_WAITALL                    = 0x40
	MSG_WAITFORONE                 = 0x80000
	MS_ASYNC                       = 0x1
	MS_INVALIDATE                  = 0x2
	MS_SYNC                        = 0x0
	NAME_MAX                       = 0xff
	NET_RT_DUMP                    = 0x1
	NET_RT_FLAGS                   = 0x2
	NET_RT_IFLIST                  = 0x3
	NET_RT_IFLISTL                 = 0x5
	NET_RT_IFMALIST                = 0x4
	NFDBITS                        = 0x40
	NOFLSH                         = 0x80000000
	NOKERNINFO                     = 0x2000000
	NOTE_ABSTIME                   = 0x10
	NOTE_ATTRIB                    = 0x8
	NOTE_CHILD                     = 0x4
	NOTE_CLOSE                     = 0x100
	NOTE_CLOSE_WRITE               = 0x200
	NOTE_DELETE                    = 0x1
	NOTE_EXEC                      = 0x20000000
	NOTE_EXIT                      = 0x80000000
	NOTE_EXTEND                    = 0x4
	NOTE_FFAND                     = 0x40000000
	NOTE_FFCOPY                    = 0xc0000000
	NOTE_FFCTRLMASK                = 0xc0000000
	NOTE_FFLAGSMASK                = 0xffffff
	NOTE_FFNOP                     = 0x0
	NOTE_FFOR                      = 0x80000000
	NOTE_FILE_POLL                 = 0x2
	NOTE_FORK                      = 0x40000000
	NOTE_LINK                      = 0x10
	NOTE_LOWAT                     = 0x1
	NOTE_MSECONDS                  = 0x2
	NOTE_NSECONDS                  = 0x8
	NOTE_OPEN                      = 0x80
	NOTE_PCTRLMASK                 = 0xf0000000
	NOTE_PDATAMASK                 = 0xfffff
	NOTE_READ                      = 0x400
	NOTE_RENAME                    = 0x20
	NOTE_REVOKE                    = 0x40
	NOTE_SECONDS                   = 0x1
	NOTE_TRACK                     = 0x1
	NOTE_TRACKERR                  = 0x2
	NOTE_TRIGGER                   = 0x1000000
	NOTE_USECONDS                  = 0x4
	NOTE_WRITE                     = 0x2
	OCRNL                          = 0x10
	ONLCR                          = 0x2
	ONLRET                         = 0x40
	ONOCR                          = 0x20
	ONOEOT                         = 0x8
	OPOST                          = 0x1
	OXTABS                         = 0x4
	O_ACCMODE                      = 0x3
	O_APPEND                       = 0x8
	O_ASYNC                        = 0x40
	O_CLOEXEC                      = 0x100000
	O_CREAT                        = 0x200
	O_DIRECT                       = 0x10000
	O_DIRECTORY                    = 0x20000
	O_EXCL                         = 0x800
	O_EXEC                         = 0x40000
	O_EXLOCK                       = 0x20
	O_FSYNC                        = 0x80
	O_NDELAY                       = 0x4
	O_NOCTTY                       = 0x8000
	O_NOFOLLOW                     = 0x100
	O_NONBLOCK                     = 0x4
	O_RDONLY                       = 0x0
	O_RDWR                         = 0x2
	O_RESOLVE_BENEATH              = 0x800000
	O_SEARCH                       = 0x40000
	O_SHLOCK                       = 0x10
	O_SYNC                         = 0x80
	O_TRUNC                        = 0x400
	O_TTY_INIT                     = 0x80000
	O_VERIFY                       = 0x200000
	O_WRONLY                       = 0x1
	PARENB                         = 0x1000
	PARMRK                         = 0x8
	PARODD                         = 0x2000
	PENDIN                         = 0x20000000
	PIOD_READ_D                    = 0x1
	PIOD_READ_I                    = 0x3
	PIOD_WRITE_D                   = 0x2
	PIOD_WRITE_I                   = 0x4
	PRIO_PGRP                      = 0x1
	PRIO_PROCESS                   = 0x0
	PRIO_USER                      = 0x2
	PROT_EXEC                      = 0x4
	PROT_NONE                      = 0x0
	PROT_READ                      = 0x1
	PROT_WRITE                     = 0x2
	PTRACE_DEFAULT                 = 0x1
	PTRACE_EXEC                    = 0x1
	PTRACE_FORK                    = 0x8
	PTRACE_LWP                     = 0x10
	PTRACE_SCE                     = 0x2
	PTRACE_SCX                     = 0x4
	PTRACE_SYSCALL                 = 0x6
	PTRACE_VFORK                   = 0x20
	PT_ATTACH                      = 0xa
	PT_CLEARSTEP                   = 0x10
	PT_CONTINUE                    = 0x7
	PT_DETACH                      = 0xb
	PT_FIRSTMACH                   = 0x40
	PT_FOLLOW_FORK                 = 0x17
	PT_GETDBREGS                   = 0x25
	PT_GETFPREGS                   = 0x23
	PT_GETLWPLIST                  = 0xf
	PT_GETNUMLWPS                  = 0xe
	PT_GETREGS                     = 0x21
	PT_GET_EVENT_MASK              = 0x19
	PT_GET_SC_ARGS                 = 0x1b
	PT_GET_SC_RET                  = 0x1c
	PT_IO                          = 0xc
	PT_KILL                        = 0x8
	PT_LWPINFO                     = 0xd
	PT_LWP_EVENTS                  = 0x18
	PT_READ_D                      = 0x2
	PT_READ_I                      = 0x1
	PT_RESUME                      = 0x13
	PT_SETDBREGS                   = 0x26
	PT_SETFPREGS                   = 0x24
	PT_SETREGS                     = 0x22
	PT_SETSTEP                     = 0x11
	PT_SET_EVENT_MASK              = 0x1a
	PT_STEP                        = 0x9
	PT_SUSPEND                     = 0x12
	PT_SYSCALL                     = 0x16
	PT_TO_SCE                      = 0x14
	PT_TO_SCX                      = 0x15
	PT_TRACE_ME                    = 0x0
	PT_VM_ENTRY                    = 0x29
	PT_VM_TIMESTAMP                = 0x28
	PT_WRITE_D                     = 0x5
	PT_WRITE_I                     = 0x4
	P_ZONEID                       = 0xc
	RLIMIT_AS                      = 0xa
	RLIMIT_CORE                    = 0x4
	RLIMIT_CPU                     = 0x0
	RLIMIT_DATA                    = 0x2
	RLIMIT_FSIZE                   = 0x1
	RLIMIT_MEMLOCK                 = 0x6
	RLIMIT_NOFILE                  = 0x8
	RLIMIT_NPROC                   = 0x7
	RLIMIT_RSS                     = 0x5
	RLIMIT_STACK                   = 0x3
	RLIM_INFINITY                  = 0x7fffffffffffffff
	RTAX_AUTHOR                    = 0x6
	RTAX_BRD                       = 0x7
	RTAX_DST                       = 0x0
	RTAX_GATEWAY                   = 0x1
	RTAX_GENMASK                   = 0x3
	RTAX_IFA                       = 0x5
	RTAX_IFP                       = 0x4
	RTAX_MAX                       = 0x8
	RTAX_NETMASK                   = 0x2
	RTA_AUTHOR                     = 0x40
	RTA_BRD                        = 0x80
	RTA_DST                        = 0x1
	RTA_GATEWAY                    = 0x2
	RTA_GENMASK                    = 0x8
	RTA_IFA                        = 0x20
	RTA_IFP                        = 0x10
	RTA_NETMASK                    = 0x4
	RTF_BLACKHOLE                  = 0x1000
	RTF_BROADCAST                  = 0x400000
	RTF_DONE                       = 0x40
	RTF_DYNAMIC                    = 0x10
	RTF_FIXEDMTU                   = 0x80000
	RTF_FMASK                      = 0x1004d808
	RTF_GATEWAY                    = 0x2
	RTF_GWFLAG_COMPAT              = 0x80000000
	RTF_HOST                       = 0x4
	RTF_LLDATA                     = 0x400
	RTF_LLINFO                     = 0x400
	RTF_LOCAL                      = 0x200000
	RTF_MODIFIED                   = 0x20
	RTF_MULTICAST                  = 0x800000
	RTF_PINNED                     = 0x100000
	RTF_PROTO1                     = 0x8000
	RTF_PROTO2                     = 0x4000
	RTF_PROTO3                     = 0x40000
	RTF_REJECT                     = 0x8
	RTF_RNH_LOCKED                 = 0x40000000
	RTF_STATIC                     = 0x800
	RTF_STICKY                     = 0x10000000
	RTF_UP                         = 0x1
	RTF_XRESOLVE                   = 0x200
	RTM_ADD                        = 0x1
	RTM_CHANGE                     = 0x3
	RTM_DELADDR                    = 0xd
	RTM_DELETE                     = 0x2
	RTM_DELMADDR                   = 0x10
	RTM_GET                        = 0x4
	RTM_IEEE80211                  = 0x12
	RTM_IFANNOUNCE                 = 0x11
	RTM_IFINFO                     = 0xe
	RTM_LOCK                       = 0x8
	RTM_LOSING                     = 0x5
	RTM_MISS                       = 0x7
	RTM_NEWADDR                    = 0xc
	RTM_NEWMADDR                   = 0xf
	RTM_REDIRECT                   = 0x6
	RTM_RESOLVE                    = 0xb
	RTM_RTTUNIT                    = 0xf4240
	RTM_VERSION                    = 0x5
	RTV_EXPIRE                     = 0x4
	RTV_HOPCOUNT                   = 0x2
	RTV_MTU                        = 0x1
	RTV_RPIPE                      = 0x8
	RTV_RTT                        = 0x40
	RTV_RTTVAR                     = 0x80
	RTV_SPIPE                      = 0x10
	RTV_SSTHRESH                   = 0x20
	RTV_WEIGHT                     = 0x100
	RT_ALL_FIBS                    = -0x1
	RT_BLACKHOLE                   = 0x40
	RT_DEFAULT_FIB                 = 0x0
	RT_HAS_GW                      = 0x80
	RT_HAS_HEADER                  = 0x10
	RT_HAS_HEADER_BIT              = 0x4
	RT_L2_ME                       = 0x4
	RT_L2_ME_BIT                   = 0x2
	RT_LLE_CACHE                   = 0x100
	RT_MAY_LOOP                    = 0x8
	RT_MAY_LOOP_BIT                = 0x3
	RT_REJECT                      = 0x20
	RUSAGE_CHILDREN                = -0x1
	RUSAGE_SELF                    = 0x0
	RUSAGE_THREAD                  = 0x1
	SCM_BINTIME                    = 0x4
	SCM_CREDS                      = 0x3
	SCM_MONOTONIC                  = 0x6
	SCM_REALTIME                   = 0x5
	SCM_RIGHTS                     = 0x1
	SCM_TIMESTAMP                  = 0x2
	SCM_TIME_INFO                  = 0x7
	SEEK_CUR                       = 0x1
	SEEK_DATA                      = 0x3
	SEEK_END                       = 0x2
	SEEK_HOLE                      = 0x4
	SEEK_SET                       = 0x0
	SHUT_RD                        = 0x0
	SHUT_RDWR                      = 0x2
	SHUT_WR                        = 0x1
	SIOCADDMULTI                   = 0x80206931
	SIOCAIFADDR                    = 0x8040691a
	SIOCAIFGROUP                   = 0x80286987
	SIOCATMARK                     = 0x40047307
	SIOCDELMULTI                   = 0x80206932
	SIOCDIFADDR                    = 0x80206919
	SIOCDIFGROUP                   = 0x80286989
	SIOCDIFPHYADDR                 = 0x80206949
	SIOCGDRVSPEC                   = 0xc028697b
	SIOCGETSGCNT                   = 0xc0207210
	SIOCGETVIFCNT                  = 0xc028720f
	SIOCGHIWAT                     = 0x40047301
	SIOCGHWADDR                    = 0xc020693e
	SIOCGI2C                       = 0xc020693d
	SIOCGIFADDR                    = 0xc0206921
	SIOCGIFALIAS                   = 0xc044692d
	SIOCGIFBRDADDR                 = 0xc0206923
	SIOCGIFCAP                     = 0xc020691f
	SIOCGIFCONF                    = 0xc0106924
	SIOCGIFDESCR                   = 0xc020692a
	SIOCGIFDOWNREASON              = 0xc058699a
	SIOCGIFDSTADDR                 = 0xc0206922
	SIOCGIFFIB                     = 0xc020695c
	SIOCGIFFLAGS                   = 0xc0206911
	SIOCGIFGENERIC                 = 0xc020693a
	SIOCGIFGMEMB                   = 0xc028698a
	SIOCGIFGROUP                   = 0xc0286988
	SIOCGIFINDEX                   = 0xc0206920
	SIOCGIFMAC                     = 0xc0206926
	SIOCGIFMEDIA                   = 0xc0306938
	SIOCGIFMETRIC                  = 0xc0206917
	SIOCGIFMTU                     = 0xc0206933
	SIOCGIFNETMASK                 = 0xc0206925
	SIOCGIFPDSTADDR                = 0xc0206948
	SIOCGIFPHYS                    = 0xc0206935
	SIOCGIFPSRCADDR                = 0xc0206947
	SIOCGIFRSSHASH                 = 0xc0186997
	SIOCGIFRSSKEY                  = 0xc0946996
	SIOCGIFSTATUS                  = 0xc331693b
	SIOCGIFXMEDIA                  = 0xc030698b
	SIOCGLANPCP                    = 0xc0206998
	SIOCGLOWAT                     = 0x40047303
	SIOCGPGRP                      = 0x40047309
	SIOCGPRIVATE_0                 = 0xc0206950
	SIOCGPRIVATE_1                 = 0xc0206951
	SIOCGTUNFIB                    = 0xc020695e
	SIOCIFCREATE                   = 0xc020697a
	SIOCIFCREATE2                  = 0xc020697c
	SIOCIFDESTROY                  = 0x80206979
	SIOCIFGCLONERS                 = 0xc0106978
	SIOCSDRVSPEC                   = 0x8028697b
	SIOCSHIWAT                     = 0x80047300
	SIOCSIFADDR                    = 0x8020690c
	SIOCSIFBRDADDR                 = 0x80206913
	SIOCSIFCAP                     = 0x8020691e
	SIOCSIFDESCR                   = 0x80206929
	SIOCSIFDSTADDR                 = 0x8020690e
	SIOCSIFFIB                     = 0x8020695d
	SIOCSIFFLAGS                   = 0x80206910
	SIOCSIFGENERIC                 = 0x80206939
	SIOCSIFLLADDR                  = 0x8020693c
	SIOCSIFMAC                     = 0x80206927
	SIOCSIFMEDIA                   = 0xc0206937
	SIOCSIFMETRIC                  = 0x80206918
	SIOCSIFMTU                     = 0x80206934
	SIOCSIFNAME                    = 0x80206928
	SIOCSIFNETMASK                 = 0x80206916
	SIOCSIFPHYADDR                 = 0x80406946
	SIOCSIFPHYS                    = 0x80206936
	SIOCSIFRVNET                   = 0xc020695b
	SIOCSIFVNET                    = 0xc020695a
	SIOCSLANPCP                    = 0x80206999
	SIOCSLOWAT                     = 0x80047302
	SIOCSPGRP                      = 0x80047308
	SIOCSTUNFIB                    = 0x8020695f
	SOCK_CLOEXEC                   = 0x10000000
	SOCK_DGRAM                     = 0x2
	SOCK_MAXADDRLEN                = 0xff
	SOCK_NONBLOCK                  = 0x20000000
	SOCK_RAW                       = 0x3
	SOCK_RDM                       = 0x4
	SOCK_SEQPACKET                 = 0x5
	SOCK_STREAM                    = 0x1
	SOL_LOCAL                      = 0x0
	SOL_SOCKET                     = 0xffff
	SOMAXCONN                      = 0x80
	SO_ACCEPTCONN                  = 0x2
	SO_ACCEPTFILTER                = 0x1000
	SO_BINTIME                     = 0x2000
	SO_BROADCAST                   = 0x20
	SO_DEBUG                       = 0x1
	SO_DOMAIN                      = 0x1019
	SO_DONTROUTE                   = 0x10
	SO_ERROR                       = 0x1007
	SO_KEEPALIVE                   = 0x8
	SO_LABEL                       = 0x1009
	SO_LINGER                      = 0x80
	SO_LISTENINCQLEN               = 0x1013
	SO_LISTENQLEN                  = 0x1012
	SO_LISTENQLIMIT                = 0x1011
	SO_MAX_PACING_RATE             = 0x1018
	SO_NOSIGPIPE                   = 0x800
	SO_NO_DDP                      = 0x8000
	SO_NO_OFFLOAD                  = 0x4000
	SO_OOBINLINE                   = 0x100
	SO_PEERLABEL                   = 0x1010
	SO_PROTOCOL                    = 0x1016
	SO_PROTOTYPE                   = 0x1016
	SO_RCVBUF                      = 0x1002
	SO_RCVLOWAT                    = 0x1004
	SO_RCVTIMEO                    = 0x1006
	SO_RERROR                      = 0x20000
	SO_REUSEADDR                   = 0x4
	SO_REUSEPORT                   = 0x200
	SO_REUSEPORT_LB                = 0x10000
	SO_SETFIB                      = 0x1014
	SO_SNDBUF                      = 0x1001
	SO_SNDLOWAT                    = 0x1003
	SO_SNDTIMEO                    = 0x1005
	SO_TIMESTAMP                   = 0x400
	SO_TS_BINTIME                  = 0x1
	SO_TS_CLOCK                    = 0x1017
	SO_TS_CLOCK_MAX                = 0x3
	SO_TS_DEFAULT                  = 0x0
	SO_TS_MONOTONIC                = 0x3
	SO_TS_REALTIME                 = 0x2
	SO_TS_REALTIME_MICRO           = 0x0
	SO_TYPE                        = 0x1008
	SO_USELOOPBACK                 = 0x40
	SO_USER_COOKIE                 = 0x1015
	SO_VENDOR                      = 0x80000000
	S_BLKSIZE                      = 0x200
	S_IEXEC                        = 0x40
	S_IFBLK                        = 0x6000
	S_IFCHR                        = 0x2000
	S_IFDIR                        = 0x4000
	S_IFIFO                        = 0x1000
	S_IFLNK                        = 0xa000
	S_IFMT                         = 0xf000
	S_IFREG                        = 0x8000
	S_IFSOCK                       = 0xc000
	S_IFWHT                        = 0xe000
	S_IREAD                        = 0x100
	S_IRGRP                        = 0x20
	S_IROTH                        = 0x4
	S_IRUSR                        = 0x100
	S_IRWXG                        = 0x38
	S_IRWXO                        = 0x7
	S_IRWXU                        = 0x1c0
	S_ISGID                        = 0x400
	S_ISTXT                        = 0x200
	S_ISUID                        = 0x800
	S_ISVTX                        = 0x200
	S_IWGRP                        = 0x10
	S_IWOTH                        = 0x2
	S_IWRITE                       = 0x80
	S_IWUSR                        = 0x80
	S_IXGRP                        = 0x8
	S_IXOTH                        = 0x1
	S_IXUSR                        = 0x40
	TAB0                           = 0x0
	TAB3                           = 0x4
	TABDLY                         = 0x4
	TCIFLUSH                       = 0x1
	TCIOFF                         = 0x3
	TCIOFLUSH                      = 0x3
	TCION                          = 0x4
	TCOFLUSH                       = 0x2
	TCOOFF                         = 0x1
	TCOON                          = 0x2
	TCPOPT_EOL                     = 0x0
	TCPOPT_FAST_OPEN               = 0x22
	TCPOPT_MAXSEG                  = 0x2
	TCPOPT_NOP                     = 0x1
	TCPOPT_PAD                     = 0x0
	TCPOPT_SACK                    = 0x5
	TCPOPT_SACK_PERMITTED          = 0x4
	TCPOPT_SIGNATURE               = 0x13
	TCPOPT_TIMESTAMP               = 0x8
	TCPOPT_WINDOW                  = 0x3
	TCP_BBR_ACK_COMP_ALG           = 0x448
	TCP_BBR_ALGORITHM              = 0x43b
	TCP_BBR_DRAIN_INC_EXTRA        = 0x43c
	TCP_BBR_DRAIN_PG               = 0x42e
	TCP_BBR_EXTRA_GAIN             = 0x449
	TCP_BBR_EXTRA_STATE            = 0x453
	TCP_BBR_FLOOR_MIN_TSO          = 0x454
	TCP_BBR_HDWR_PACE              = 0x451
	TCP_BBR_HOLD_TARGET            = 0x436
	TCP_BBR_IWINTSO                = 0x42b
	TCP_BBR_LOWGAIN_FD             = 0x436
	TCP_BBR_LOWGAIN_HALF           = 0x435
	TCP_BBR_LOWGAIN_THRESH         = 0x434
	TCP_BBR_MAX_RTO                = 0x439
	TCP_BBR_MIN_RTO                = 0x438
	TCP_BBR_MIN_TOPACEOUT          = 0x455
	TCP_BBR_ONE_RETRAN             = 0x431
	TCP_BBR_PACE_CROSS             = 0x442
	TCP_BBR_PACE_DEL_TAR           = 0x43f
	TCP_BBR_PACE_OH                = 0x435
	TCP_BBR_PACE_PER_SEC           = 0x43e
	TCP_BBR_PACE_SEG_MAX           = 0x440
	TCP_BBR_PACE_SEG_MIN           = 0x441
	TCP_BBR_POLICER_DETECT         = 0x457
	TCP_BBR_PROBE_RTT_GAIN         = 0x44d
	TCP_BBR_PROBE_RTT_INT          = 0x430
	TCP_BBR_PROBE_RTT_LEN          = 0x44e
	TCP_BBR_RACK_RTT_USE           = 0x44a
	TCP_BBR_RECFORCE               = 0x42c
	TCP_BBR_REC_OVER_HPTS          = 0x43a
	TCP_BBR_RETRAN_WTSO            = 0x44b
	TCP_BBR_RWND_IS_APP            = 0x42f
	TCP_BBR_SEND_IWND_IN_TSO       = 0x44f
	TCP_BBR_STARTUP_EXIT_EPOCH     = 0x43d
	TCP_BBR_STARTUP_LOSS_EXIT      = 0x432
	TCP_BBR_STARTUP_PG             = 0x42d
	TCP_BBR_TMR_PACE_OH            = 0x448
	TCP_BBR_TSLIMITS               = 0x434
	TCP_BBR_TSTMP_RAISES           = 0x456
	TCP_BBR_UNLIMITED              = 0x43b
	TCP_BBR_USEDEL_RATE            = 0x437
	TCP_BBR_USE_LOWGAIN            = 0x433
	TCP_BBR_USE_RACK_CHEAT         = 0x450
	TCP_BBR_UTTER_MAX_TSO          = 0x452
	TCP_CA_NAME_MAX                = 0x10
	TCP_CCALGOOPT                  = 0x41
	TCP_CONGESTION                 = 0x40
	TCP_DATA_AFTER_CLOSE           = 0x44c
	TCP_DELACK                     = 0x48
	TCP_FASTOPEN                   = 0x401
	TCP_FASTOPEN_MAX_COOKIE_LEN    = 0x10
	TCP_FASTOPEN_MIN_COOKIE_LEN    = 0x4
	TCP_FASTOPEN_PSK_LEN           = 0x10
	TCP_FUNCTION_BLK               = 0x2000
	TCP_FUNCTION_NAME_LEN_MAX      = 0x20
	TCP_INFO                       = 0x20
	TCP_KEEPCNT                    = 0x400
	TCP_KEEPIDLE                   = 0x100
	TCP_KEEPINIT                   = 0x80
	TCP_KEEPINTVL                  = 0x200
	TCP_LOG                        = 0x22
	TCP_LOGBUF                     = 0x23
	TCP_LOGDUMP                    = 0x25
	TCP_LOGDUMPID                  = 0x26
	TCP_LOGID                      = 0x24
	TCP_LOG_ID_LEN                 = 0x40
	TCP_MAXBURST                   = 0x4
	TCP_MAXHLEN                    = 0x3c
	TCP_MAXOLEN                    = 0x28
	TCP_MAXSEG                     = 0x2
	TCP_MAXWIN                     = 0xffff
	TCP_MAX_SACK                   = 0x4
	TCP_MAX_WINSHIFT               = 0xe
	TCP_MD5SIG                     = 0x10
	TCP_MINMSS                     = 0xd8
	TCP_MSS                        = 0x218
	TCP_NODELAY                    = 0x1
	TCP_NOOPT                      = 0x8
	TCP_NOPUSH                     = 0x4
	TCP_PCAP_IN                    = 0x1000
	TCP_PCAP_OUT                   = 0x800
	TCP_RACK_EARLY_RECOV           = 0x423
	TCP_RACK_EARLY_SEG             = 0x424
	TCP_RACK_GP_INCREASE           = 0x446
	TCP_RACK_IDLE_REDUCE_HIGH      = 0x444
	TCP_RACK_MIN_PACE              = 0x445
	TCP_RACK_MIN_PACE_SEG          = 0x446
	TCP_RACK_MIN_TO                = 0x422
	TCP_RACK_PACE_ALWAYS           = 0x41f
	TCP_RACK_PACE_MAX_SEG          = 0x41e
	TCP_RACK_PACE_REDUCE           = 0x41d
	TCP_RACK_PKT_DELAY             = 0x428
	TCP_RACK_PROP                  = 0x41b
	TCP_RACK_PROP_RATE             = 0x420
	TCP_RACK_PRR_SENDALOT          = 0x421
	TCP_RACK_REORD_FADE            = 0x426
	TCP_RACK_REORD_THRESH          = 0x425
	TCP_RACK_TLP_INC_VAR           = 0x429
	TCP_RACK_TLP_REDUCE            = 0x41c
	TCP_RACK_TLP_THRESH            = 0x427
	TCP_RACK_TLP_USE               = 0x447
	TCP_VENDOR                     = 0x80000000
	TCSAFLUSH                      = 0x2
	TIMER_ABSTIME                  = 0x1
	TIMER_RELTIME                  = 0x0
	TIOCCBRK                       = 0x2000747a
	TIOCCDTR                       = 0x20007478
	TIOCCONS                       = 0x80047462
	TIOCDRAIN                      = 0x2000745e
	TIOCEXCL                       = 0x2000740d
	TIOCEXT                        = 0x80047460
	TIOCFLUSH                      = 0x80047410
	TIOCGDRAINWAIT                 = 0x40047456
	TIOCGETA                       = 0x402c7413
	TIOCGETD                       = 0x4004741a
	TIOCGPGRP                      = 0x40047477
	TIOCGPTN                       = 0x4004740f
	TIOCGSID                       = 0x40047463
	TIOCGWINSZ                     = 0x40087468
	TIOCMBIC                       = 0x8004746b
	TIOCMBIS                       = 0x8004746c
	TIOCMGDTRWAIT                  = 0x4004745a
	TIOCMGET                       = 0x4004746a
	TIOCMSDTRWAIT                  = 0x8004745b
	TIOCMSET                       = 0x8004746d
	TIOCM_CAR                      = 0x40
	TIOCM_CD                       = 0x40
	TIOCM_CTS                      = 0x20
	TIOCM_DCD                      = 0x40
	TIOCM_DSR                      = 0x100
	TIOCM_DTR                      = 0x2
	TIOCM_LE                       = 0x1
	TIOCM_RI                       = 0x80
	TIOCM_RNG                      = 0x80
	TIOCM_RTS                      = 0x4
	TIOCM_SR                       = 0x10
	TIOCM_ST                       = 0x8
	TIOCNOTTY                      = 0x20007471
	TIOCNXCL                       = 0x2000740e
	TIOCOUTQ                       = 0x40047473
	TIOCPKT                        = 0x80047470
	TIOCPKT_DATA                   = 0x0
	TIOCPKT_DOSTOP                 = 0x20
	TIOCPKT_FLUSHREAD              = 0x1
	TIOCPKT_FLUSHWRITE             = 0x2
	TIOCPKT_IOCTL                  = 0x40
	TIOCPKT_NOSTOP                 = 0x10
	TIOCPKT_START                  = 0x8
	TIOCPKT_STOP                   = 0x4
	TIOCPTMASTER                   = 0x2000741c
	TIOCSBRK                       = 0x2000747b
	TIOCSCTTY                      = 0x20007461
	TIOCSDRAINWAIT                 = 0x80047457
	TIOCSDTR                       = 0x20007479
	TIOCSETA                       = 0x802c7414
	TIOCSETAF                      = 0x802c7416
	TIOCSETAW                      = 0x802c7415
	TIOCSETD                       = 0x8004741b
	TIOCSIG                        = 0x2004745f
	TIOCSPGRP                      = 0x80047476
	TIOCSTART                      = 0x2000746e
	TIOCSTAT                       = 0x20007465
	TIOCSTI                        = 0x80017472
	TIOCSTOP                       = 0x2000746f
	TIOCSWINSZ                     = 0x80087467
	TIOCTIMESTAMP                  = 0x40107459
	TIOCUCNTL                      = 0x80047466
	TOSTOP                         = 0x400000
	UTIME_NOW                      = -0x1
	UTIME_OMIT                     = -0x2
	VDISCARD                       = 0xf
	VDSUSP                         = 0xb
	VEOF                           = 0x0
	VEOL                           = 0x1
	VEOL2                          = 0x2
	VERASE                         = 0x3
	VERASE2                        = 0x7
	VINTR                          = 0x8
	VKILL                          = 0x5
	VLNEXT                         = 0xe
	VMIN                           = 0x10
	VM_BCACHE_SIZE_MAX             = 0x19000000
	VQUIT                          = 0x9
	VREPRINT                       = 0x6
	VSTART                         = 0xc
	VSTATUS                        = 0x12
	VSTOP                          = 0xd
	VSUSP                          = 0xa
	VTIME                          = 0x11
	VWERASE                        = 0x4
	WCONTINUED                     = 0x4
	WCOREFLAG                      = 0x80
	WEXITED                        = 0x10
	WLINUXCLONE                    = 0x80000000
	WNOHANG                        = 0x1
	WNOWAIT                        = 0x8
	WSTOPPED                       = 0x2
	WTRAPPED                       = 0x20
	WUNTRACED                      = 0x2
)

// Errors
const (
	E2BIG           = syscall.Errno(0x7)
	EACCES          = syscall.Errno(0xd)
	EADDRINUSE      = syscall.Errno(0x30)
	EADDRNOTAVAIL   = syscall.Errno(0x31)
	EAFNOSUPPORT    = syscall.Errno(0x2f)
	EAGAIN          = syscall.Errno(0x23)
	EALREADY        = syscall.Errno(0x25)
	EAUTH           = syscall.Errno(0x50)
	EBADF           = syscall.Errno(0x9)
	EBADMSG         = syscall.Errno(0x59)
	EBADRPC         = syscall.Errno(0x48)
	EBUSY           = syscall.Errno(0x10)
	ECANCELED       = syscall.Errno(0x55)
	ECAPMODE        = syscall.Errno(0x5e)
	ECHILD          = syscall.Errno(0xa)
	ECONNABORTED    = syscall.Errno(0x35)
	ECONNREFUSED    = syscall.Errno(0x3d)
	ECONNRESET      = syscall.Errno(0x36)
	EDEADLK         = syscall.Errno(0xb)
	EDESTADDRREQ    = syscall.Errno(0x27)
	EDOM            = syscall.Errno(0x21)
	EDOOFUS         = syscall.Errno(0x58)
	EDQUOT          = syscall.Errno(0x45)
	EEXIST          = syscall.Errno(0x11)
	EFAULT          = syscall.Errno(0xe)
	EFBIG           = syscall.Errno(0x1b)
	EFTYPE          = syscall.Errno(0x4f)
	EHOSTDOWN       = syscall.Errno(0x40)
	EHOSTUNREACH    = syscall.Errno(0x41)
	EIDRM           = syscall.Errno(0x52)
	EILSEQ          = syscall.Errno(0x56)
	EINPROGRESS     = syscall.Errno(0x24)
	EINTEGRITY      = syscall.Errno(0x61)
	EINTR           = syscall.Errno(0x4)
	EINVAL          = syscall.Errno(0x16)
	EIO             = syscall.Errno(0x5)
	EISCONN         = syscall.Errno(0x38)
	EISDIR          = syscall.Errno(0x15)
	ELAST           = syscall.Errno(0x61)
	ELOOP           = syscall.Errno(0x3e)
	EMFILE          = syscall.Errno(0x18)
	EMLINK          = syscall.Errno(0x1f)
	EMSGSIZE        = syscall.Errno(0x28)
	EMULTIHOP       = syscall.Errno(0x5a)
	ENAMETOOLONG    = syscall.Errno(0x3f)
	ENEEDAUTH       = syscall.Errno(0x51)
	ENETDOWN        = syscall.Errno(0x32)
	ENETRESET       = syscall.Errno(0x34)
	ENETUNREACH     = syscall.Errno(0x33)
	ENFILE          = syscall.Errno(0x17)
	ENOATTR         = syscall.Errno(0x57)
	ENOBUFS         = syscall.Errno(0x37)
	ENODEV          = syscall.Errno(0x13)
	ENOENT          = syscall.Errno(0x2)
	ENOEXEC         = syscall.Errno(0x8)
	ENOLCK          = syscall.Errno(0x4d)
	ENOLINK         = syscall.Errno(0x5b)
	ENOMEM          = syscall.Errno(0xc)
	ENOMSG          = syscall.Errno(0x53)
	ENOPROTOOPT     = syscall.Errno(0x2a)
	ENOSPC          = syscall.Errno(0x1c)
	ENOSYS          = syscall.Errno(0x4e)
	ENOTBLK         = syscall.Errno(0xf)
	ENOTCAPABLE     = syscall.Errno(0x5d)
	ENOTCONN        = syscall.Errno(0x39)
	ENOTDIR         = syscall.Errno(0x14)
	ENOTEMPTY       = syscall.Errno(0x42)
	ENOTRECOVERABLE = syscall.Errno(0x5f)
	ENOTSOCK        = syscall.Errno(0x26)
	ENOTSUP         = syscall.Errno(0x2d)
	ENOTTY          = syscall.Errno(0x19)
	ENXIO           = syscall.Errno(0x6)
	EOPNOTSUPP      = syscall.Errno(0x2d)
	EOVERFLOW       = syscall.Errno(0x54)
	EOWNERDEAD      = syscall.Errno(0x60)
	EPERM           = syscall.Errno(0x1)
	EPFNOSUPPORT    = syscall.Errno(0x2e)
	EPIPE           = syscall.Errno(0x20)
	EPROCLIM        = syscall.Errno(0x43)
	EPROCUNAVAIL    = syscall.Errno(0x4c)
	EPROGMISMATCH   = syscall.Errno(0x4b)
	EPROGUNAVAIL    = syscall.Errno(0x4a)
	EPROTO          = syscall.Errno(0x5c)
	EPROTONOSUPPORT = syscall.Errno(0x2b)
	EPROTOTYPE      = syscall.Errno(0x29)
	ERANGE          = syscall.Errno(0x22)
	EREMOTE         = syscall.Errno(0x47)
	EROFS           = syscall.Errno(0x1e)
	ERPCMISMATCH    = syscall.Errno(0x49)
	ESHUTDOWN       = syscall.Errno(0x3a)
	ESOCKTNOSUPPORT = syscall.Errno(0x2c)
	ESPIPE          = syscall.Errno(0x1d)
	ESRCH           = syscall.Errno(0x3)
	ESTALE          = syscall.Errno(0x46)
	ETIMEDOUT       = syscall.Errno(0x3c)
	ETOOMANYREFS    = syscall.Errno(0x3b)
	ETXTBSY         = syscall.Errno(0x1a)
	EUSERS          = syscall.Errno(0x44)
	EWOULDBLOCK     = syscall.Errno(0x23)
	EXDEV           = syscall.Errno(0x12)
)

// Signals
const (
	SIGABRT   = syscall.Signal(0x6)
	SIGALRM   = syscall.Signal(0xe)
	SIGBUS    = syscall.Signal(0xa)
	SIGCHLD   = syscall.Signal(0x14)
	SIGCONT   = syscall.Signal(0x13)
	SIGEMT    = syscall.Signal(0x7)
	SIGFPE    = syscall.Signal(0x8)
	SIGHUP    = syscall.Signal(0x1)
	SIGILL    = syscall.Signal(0x4)
	SIGINFO   = syscall.Signal(0x1d)
	SIGINT    = syscall.Signal(0x2)
	SIGIO     = syscall.Signal(0x17)
	SIGIOT    = syscall.Signal(0x6)
	SIGKILL   = syscall.Signal(0x9)
	SIGLIBRT  = syscall.Signal(0x21)
	SIGLWP    = syscall.Signal(0x20)
	SIGPIPE   = syscall.Signal(0xd)
	SIGPROF   = syscall.Signal(0x1b)
	SIGQUIT   = syscall.Signal(0x3)
	SIGSEGV   = syscall.Signal(0xb)
	SIGSTOP   = syscall.Signal(0x11)
	SIGSYS    = syscall.Signal(0xc)
	SIGTERM   = syscall.Signal(0xf)
	SIGTHR    = syscall.Signal(0x20)
	SIGTRAP   = syscall.Signal(0x5)
	SIGTSTP   = syscall.Signal(0x12)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x10)
	SIGUSR1   = syscall.Signal(0x1e)
	SIGUSR2   = syscall.Signal(0x1f)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "device not configured"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EDEADLK", "resource deadlock avoided"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "cross-device link"},
	{19, "ENODEV", "operation not supported by device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "result too large"},
	{35, "EWOULDBLOCK", "resource temporarily unavailable"},
	{36, "EINPROGRESS", "operation now in progress"},
	{37, "EALREADY", "operation already in progress"},
	{38, "ENOTSOCK", "socket operation on non-socket"},
	{39, "EDESTADDRREQ", "destination address required"},
	{40, "EMSGSIZE", "message too long"},
	{41, "EPROTOTYPE", "protocol wrong type for socket"},
	{42, "ENOPROTOOPT", "protocol not available"},
	{43, "EPROTONOSUPPORT", "protocol not supported"},
	{44, "ESOCKTNOSUPPORT", "socket type not supported"},
	{45, "EOPNOTSUPP", "operation not supported"},
	{46, "EPFNOSUPPORT", "protocol family not supported"},
	{47, "EAFNOSUPPORT", "address family not supported by protocol family"},
	{48, "EADDRINUSE", "address already in use"},
	{49, "EADDRNOTAVAIL", "can't assign requested address"},
	{50, "ENETDOWN", "network is down"},
	{51, "ENETUNREACH", "network is unreachable"},
	{52, "ENETRESET", "network dropped connection on reset"},
	{53, "ECONNABORTED", "software caused connection abort"},
	{54, "ECONNRESET", "connection reset by peer"},
	{55, "ENOBUFS", "no buffer space available"},
	{56, "EISCONN", "socket is already connected"},
	{57, "ENOTCONN", "socket is not connected"},
	{58, "ESHUTDOWN", "can't send after socket shutdown"},
	{59, "ETOOMANYREFS", "too many references: can't splice"},
	{60, "ETIMEDOUT", "operation timed out"},
	{61, "ECONNREFUSED", "connection refused"},
	{62, "ELOOP", "too many levels of symbolic links"},
	{63, "ENAMETOOLONG", "file name too long"},
	{64, "EHOSTDOWN", "host is down"},
	{65, "EHOSTUNREACH", "no route to host"},
	{66, "ENOTEMPTY", "directory not empty"},
	{67, "EPROCLIM", "too many processes"},
	{68, "EUSERS", "too many users"},
	{69, "EDQUOT", "disc quota exceeded"},
	{70, "ESTALE", "stale NFS file handle"},
	{71, "EREMOTE", "too many levels of remote in path"},
	{72, "EBADRPC", "RPC struct is bad"},
	{73, "ERPCMISMATCH", "RPC version wrong"},
	{74, "EPROGUNAVAIL", "RPC prog. not avail"},
	{75, "EPROGMISMATCH", "program version wrong"},
	{76, "EPROCUNAVAIL", "bad procedure for program"},
	{77, "ENOLCK", "no locks available"},
	{78, "ENOSYS", "function not implemented"},
	{79, "EFTYPE", "inappropriate file type or format"},
	{80, "EAUTH", "authentication error"},
	{81, "ENEEDAUTH", "need authenticator"},
	{82, "EIDRM", "identifier removed"},
	{83, "ENOMSG", "no message of desired type"},
	{84, "EOVERFLOW", "value too large to be stored in data type"},
	{85, "ECANCELED", "operation canceled"},
	{86, "EILSEQ", "illegal byte sequence"},
	{87, "ENOATTR", "attribute not found"},
	{88, "EDOOFUS", "programming error"},
	{89, "EBADMSG", "bad message"},
	{90, "EMULTIHOP", "multihop attempted"},
	{91, "ENOLINK", "link has been severed"},
	{92, "EPROTO", "protocol error"},
	{93, "ENOTCAPABLE", "capabilities insufficient"},
	{94, "ECAPMODE", "not permitted in capability mode"},
	{95, "ENOTRECOVERABLE", "state not recoverable"},
	{96, "EOWNERDEAD", "previous owner died"},
	{97, "EINTEGRITY", "integrity check failed"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/BPT trap"},
	{6, "SIGIOT", "abort trap"},
	{7, "SIGEMT", "EMT trap"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus error"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGSYS", "bad system call"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGURG", "urgent I/O condition"},
	{17, "SIGSTOP", "suspended (signal)"},
	{18, "SIGTSTP", "suspended"},
	{19, "SIGCONT", "continued"},
	{20, "SIGCHLD", "child exited"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGIO", "I/O possible"},
	{24, "SIGXCPU", "cputime limit exceeded"},
	{25, "SIGXFSZ", "filesize limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window size changes"},
	{29, "SIGINFO", "information request"},
	{30, "SIGUSR1", "user defined signal 1"},
	{31, "SIGUSR2", "user defined signal 2"},
	{32, "SIGTHR", "unknown signal"},
	{33, "SIGLIBRT", "unknown signal"},
}
 07070100000E29000081A4000000000000000000000001645E367C00014F19000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_freebsd_riscv64.go   // mkerrors.sh -m64
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build riscv64 && freebsd
// +build riscv64,freebsd

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -m64 _const.go

package unix

import "syscall"

const (
	AF_APPLETALK                   = 0x10
	AF_ARP                         = 0x23
	AF_ATM                         = 0x1e
	AF_BLUETOOTH                   = 0x24
	AF_CCITT                       = 0xa
	AF_CHAOS                       = 0x5
	AF_CNT                         = 0x15
	AF_COIP                        = 0x14
	AF_DATAKIT                     = 0x9
	AF_DECnet                      = 0xc
	AF_DLI                         = 0xd
	AF_E164                        = 0x1a
	AF_ECMA                        = 0x8
	AF_HYLINK                      = 0xf
	AF_HYPERV                      = 0x2b
	AF_IEEE80211                   = 0x25
	AF_IMPLINK                     = 0x3
	AF_INET                        = 0x2
	AF_INET6                       = 0x1c
	AF_INET6_SDP                   = 0x2a
	AF_INET_SDP                    = 0x28
	AF_IPX                         = 0x17
	AF_ISDN                        = 0x1a
	AF_ISO                         = 0x7
	AF_LAT                         = 0xe
	AF_LINK                        = 0x12
	AF_LOCAL                       = 0x1
	AF_MAX                         = 0x2b
	AF_NATM                        = 0x1d
	AF_NETBIOS                     = 0x6
	AF_NETGRAPH                    = 0x20
	AF_OSI                         = 0x7
	AF_PUP                         = 0x4
	AF_ROUTE                       = 0x11
	AF_SCLUSTER                    = 0x22
	AF_SIP                         = 0x18
	AF_SLOW                        = 0x21
	AF_SNA                         = 0xb
	AF_UNIX                        = 0x1
	AF_UNSPEC                      = 0x0
	AF_VENDOR00                    = 0x27
	AF_VENDOR01                    = 0x29
	AF_VENDOR03                    = 0x2d
	AF_VENDOR04                    = 0x2f
	AF_VENDOR05                    = 0x31
	AF_VENDOR06                    = 0x33
	AF_VENDOR07                    = 0x35
	AF_VENDOR08                    = 0x37
	AF_VENDOR09                    = 0x39
	AF_VENDOR10                    = 0x3b
	AF_VENDOR11                    = 0x3d
	AF_VENDOR12                    = 0x3f
	AF_VENDOR13                    = 0x41
	AF_VENDOR14                    = 0x43
	AF_VENDOR15                    = 0x45
	AF_VENDOR16                    = 0x47
	AF_VENDOR17                    = 0x49
	AF_VENDOR18                    = 0x4b
	AF_VENDOR19                    = 0x4d
	AF_VENDOR20                    = 0x4f
	AF_VENDOR21                    = 0x51
	AF_VENDOR22                    = 0x53
	AF_VENDOR23                    = 0x55
	AF_VENDOR24                    = 0x57
	AF_VENDOR25                    = 0x59
	AF_VENDOR26                    = 0x5b
	AF_VENDOR27                    = 0x5d
	AF_VENDOR28                    = 0x5f
	AF_VENDOR29                    = 0x61
	AF_VENDOR30                    = 0x63
	AF_VENDOR31                    = 0x65
	AF_VENDOR32                    = 0x67
	AF_VENDOR33                    = 0x69
	AF_VENDOR34                    = 0x6b
	AF_VENDOR35                    = 0x6d
	AF_VENDOR36                    = 0x6f
	AF_VENDOR37                    = 0x71
	AF_VENDOR38                    = 0x73
	AF_VENDOR39                    = 0x75
	AF_VENDOR40                    = 0x77
	AF_VENDOR41                    = 0x79
	AF_VENDOR42                    = 0x7b
	AF_VENDOR43                    = 0x7d
	AF_VENDOR44                    = 0x7f
	AF_VENDOR45                    = 0x81
	AF_VENDOR46                    = 0x83
	AF_VENDOR47                    = 0x85
	ALTWERASE                      = 0x200
	B0                             = 0x0
	B1000000                       = 0xf4240
	B110                           = 0x6e
	B115200                        = 0x1c200
	B1200                          = 0x4b0
	B134                           = 0x86
	B14400                         = 0x3840
	B150                           = 0x96
	B1500000                       = 0x16e360
	B1800                          = 0x708
	B19200                         = 0x4b00
	B200                           = 0xc8
	B2000000                       = 0x1e8480
	B230400                        = 0x38400
	B2400                          = 0x960
	B2500000                       = 0x2625a0
	B28800                         = 0x7080
	B300                           = 0x12c
	B3000000                       = 0x2dc6c0
	B3500000                       = 0x3567e0
	B38400                         = 0x9600
	B4000000                       = 0x3d0900
	B460800                        = 0x70800
	B4800                          = 0x12c0
	B50                            = 0x32
	B500000                        = 0x7a120
	B57600                         = 0xe100
	B600                           = 0x258
	B7200                          = 0x1c20
	B75                            = 0x4b
	B76800                         = 0x12c00
	B921600                        = 0xe1000
	B9600                          = 0x2580
	BIOCFEEDBACK                   = 0x8004427c
	BIOCFLUSH                      = 0x20004268
	BIOCGBLEN                      = 0x40044266
	BIOCGDIRECTION                 = 0x40044276
	BIOCGDLT                       = 0x4004426a
	BIOCGDLTLIST                   = 0xc0104279
	BIOCGETBUFMODE                 = 0x4004427d
	BIOCGETIF                      = 0x4020426b
	BIOCGETZMAX                    = 0x4008427f
	BIOCGHDRCMPLT                  = 0x40044274
	BIOCGRSIG                      = 0x40044272
	BIOCGRTIMEOUT                  = 0x4010426e
	BIOCGSEESENT                   = 0x40044276
	BIOCGSTATS                     = 0x4008426f
	BIOCGTSTAMP                    = 0x40044283
	BIOCIMMEDIATE                  = 0x80044270
	BIOCLOCK                       = 0x2000427a
	BIOCPROMISC                    = 0x20004269
	BIOCROTZBUF                    = 0x40184280
	BIOCSBLEN                      = 0xc0044266
	BIOCSDIRECTION                 = 0x80044277
	BIOCSDLT                       = 0x80044278
	BIOCSETBUFMODE                 = 0x8004427e
	BIOCSETF                       = 0x80104267
	BIOCSETFNR                     = 0x80104282
	BIOCSETIF                      = 0x8020426c
	BIOCSETVLANPCP                 = 0x80044285
	BIOCSETWF                      = 0x8010427b
	BIOCSETZBUF                    = 0x80184281
	BIOCSHDRCMPLT                  = 0x80044275
	BIOCSRSIG                      = 0x80044273
	BIOCSRTIMEOUT                  = 0x8010426d
	BIOCSSEESENT                   = 0x80044277
	BIOCSTSTAMP                    = 0x80044284
	BIOCVERSION                    = 0x40044271
	BPF_A                          = 0x10
	BPF_ABS                        = 0x20
	BPF_ADD                        = 0x0
	BPF_ALIGNMENT                  = 0x8
	BPF_ALU                        = 0x4
	BPF_AND                        = 0x50
	BPF_B                          = 0x10
	BPF_BUFMODE_BUFFER             = 0x1
	BPF_BUFMODE_ZBUF               = 0x2
	BPF_DIV                        = 0x30
	BPF_H                          = 0x8
	BPF_IMM                        = 0x0
	BPF_IND                        = 0x40
	BPF_JA                         = 0x0
	BPF_JEQ                        = 0x10
	BPF_JGE                        = 0x30
	BPF_JGT                        = 0x20
	BPF_JMP                        = 0x5
	BPF_JSET                       = 0x40
	BPF_K                          = 0x0
	BPF_LD                         = 0x0
	BPF_LDX                        = 0x1
	BPF_LEN                        = 0x80
	BPF_LSH                        = 0x60
	BPF_MAJOR_VERSION              = 0x1
	BPF_MAXBUFSIZE                 = 0x80000
	BPF_MAXINSNS                   = 0x200
	BPF_MEM                        = 0x60
	BPF_MEMWORDS                   = 0x10
	BPF_MINBUFSIZE                 = 0x20
	BPF_MINOR_VERSION              = 0x1
	BPF_MISC                       = 0x7
	BPF_MOD                        = 0x90
	BPF_MSH                        = 0xa0
	BPF_MUL                        = 0x20
	BPF_NEG                        = 0x80
	BPF_OR                         = 0x40
	BPF_RELEASE                    = 0x30bb6
	BPF_RET                        = 0x6
	BPF_RSH                        = 0x70
	BPF_ST                         = 0x2
	BPF_STX                        = 0x3
	BPF_SUB                        = 0x10
	BPF_TAX                        = 0x0
	BPF_TXA                        = 0x80
	BPF_T_BINTIME                  = 0x2
	BPF_T_BINTIME_FAST             = 0x102
	BPF_T_BINTIME_MONOTONIC        = 0x202
	BPF_T_BINTIME_MONOTONIC_FAST   = 0x302
	BPF_T_FAST                     = 0x100
	BPF_T_FLAG_MASK                = 0x300
	BPF_T_FORMAT_MASK              = 0x3
	BPF_T_MICROTIME                = 0x0
	BPF_T_MICROTIME_FAST           = 0x100
	BPF_T_MICROTIME_MONOTONIC      = 0x200
	BPF_T_MICROTIME_MONOTONIC_FAST = 0x300
	BPF_T_MONOTONIC                = 0x200
	BPF_T_MONOTONIC_FAST           = 0x300
	BPF_T_NANOTIME                 = 0x1
	BPF_T_NANOTIME_FAST            = 0x101
	BPF_T_NANOTIME_MONOTONIC       = 0x201
	BPF_T_NANOTIME_MONOTONIC_FAST  = 0x301
	BPF_T_NONE                     = 0x3
	BPF_T_NORMAL                   = 0x0
	BPF_W                          = 0x0
	BPF_X                          = 0x8
	BPF_XOR                        = 0xa0
	BRKINT                         = 0x2
	CAP_ACCEPT                     = 0x200000020000000
	CAP_ACL_CHECK                  = 0x400000000010000
	CAP_ACL_DELETE                 = 0x400000000020000
	CAP_ACL_GET                    = 0x400000000040000
	CAP_ACL_SET                    = 0x400000000080000
	CAP_ALL0                       = 0x20007ffffffffff
	CAP_ALL1                       = 0x4000000001fffff
	CAP_BIND                       = 0x200000040000000
	CAP_BINDAT                     = 0x200008000000400
	CAP_CHFLAGSAT                  = 0x200000000001400
	CAP_CONNECT                    = 0x200000080000000
	CAP_CONNECTAT                  = 0x200010000000400
	CAP_CREATE                     = 0x200000000000040
	CAP_EVENT                      = 0x400000000000020
	CAP_EXTATTR_DELETE             = 0x400000000001000
	CAP_EXTATTR_GET                = 0x400000000002000
	CAP_EXTATTR_LIST               = 0x400000000004000
	CAP_EXTATTR_SET                = 0x400000000008000
	CAP_FCHDIR                     = 0x200000000000800
	CAP_FCHFLAGS                   = 0x200000000001000
	CAP_FCHMOD                     = 0x200000000002000
	CAP_FCHMODAT                   = 0x200000000002400
	CAP_FCHOWN                     = 0x200000000004000
	CAP_FCHOWNAT                   = 0x200000000004400
	CAP_FCNTL                      = 0x200000000008000
	CAP_FCNTL_ALL                  = 0x78
	CAP_FCNTL_GETFL                = 0x8
	CAP_FCNTL_GETOWN               = 0x20
	CAP_FCNTL_SETFL                = 0x10
	CAP_FCNTL_SETOWN               = 0x40
	CAP_FEXECVE                    = 0x200000000000080
	CAP_FLOCK                      = 0x200000000010000
	CAP_FPATHCONF                  = 0x200000000020000
	CAP_FSCK                       = 0x200000000040000
	CAP_FSTAT                      = 0x200000000080000
	CAP_FSTATAT                    = 0x200000000080400
	CAP_FSTATFS                    = 0x200000000100000
	CAP_FSYNC                      = 0x200000000000100
	CAP_FTRUNCATE                  = 0x200000000000200
	CAP_FUTIMES                    = 0x200000000200000
	CAP_FUTIMESAT                  = 0x200000000200400
	CAP_GETPEERNAME                = 0x200000100000000
	CAP_GETSOCKNAME                = 0x200000200000000
	CAP_GETSOCKOPT                 = 0x200000400000000
	CAP_IOCTL                      = 0x400000000000080
	CAP_IOCTLS_ALL                 = 0x7fffffffffffffff
	CAP_KQUEUE                     = 0x400000000100040
	CAP_KQUEUE_CHANGE              = 0x400000000100000
	CAP_KQUEUE_EVENT               = 0x400000000000040
	CAP_LINKAT_SOURCE              = 0x200020000000400
	CAP_LINKAT_TARGET              = 0x200000000400400
	CAP_LISTEN                     = 0x200000800000000
	CAP_LOOKUP                     = 0x200000000000400
	CAP_MAC_GET                    = 0x400000000000001
	CAP_MAC_SET                    = 0x400000000000002
	CAP_MKDIRAT                    = 0x200000000800400
	CAP_MKFIFOAT                   = 0x200000001000400
	CAP_MKNODAT                    = 0x200000002000400
	CAP_MMAP                       = 0x200000000000010
	CAP_MMAP_R                     = 0x20000000000001d
	CAP_MMAP_RW                    = 0x20000000000001f
	CAP_MMAP_RWX                   = 0x20000000000003f
	CAP_MMAP_RX                    = 0x20000000000003d
	CAP_MMAP_W                     = 0x20000000000001e
	CAP_MMAP_WX                    = 0x20000000000003e
	CAP_MMAP_X                     = 0x20000000000003c
	CAP_PDGETPID                   = 0x400000000000200
	CAP_PDKILL                     = 0x400000000000800
	CAP_PDWAIT                     = 0x400000000000400
	CAP_PEELOFF                    = 0x200001000000000
	CAP_POLL_EVENT                 = 0x400000000000020
	CAP_PREAD                      = 0x20000000000000d
	CAP_PWRITE                     = 0x20000000000000e
	CAP_READ                       = 0x200000000000001
	CAP_RECV                       = 0x200000000000001
	CAP_RENAMEAT_SOURCE            = 0x200000004000400
	CAP_RENAMEAT_TARGET            = 0x200040000000400
	CAP_RIGHTS_VERSION             = 0x0
	CAP_RIGHTS_VERSION_00          = 0x0
	CAP_SEEK                       = 0x20000000000000c
	CAP_SEEK_TELL                  = 0x200000000000004
	CAP_SEM_GETVALUE               = 0x400000000000004
	CAP_SEM_POST                   = 0x400000000000008
	CAP_SEM_WAIT                   = 0x400000000000010
	CAP_SEND                       = 0x200000000000002
	CAP_SETSOCKOPT                 = 0x200002000000000
	CAP_SHUTDOWN                   = 0x200004000000000
	CAP_SOCK_CLIENT                = 0x200007780000003
	CAP_SOCK_SERVER                = 0x200007f60000003
	CAP_SYMLINKAT                  = 0x200000008000400
	CAP_TTYHOOK                    = 0x400000000000100
	CAP_UNLINKAT                   = 0x200000010000400
	CAP_UNUSED0_44                 = 0x200080000000000
	CAP_UNUSED0_57                 = 0x300000000000000
	CAP_UNUSED1_22                 = 0x400000000200000
	CAP_UNUSED1_57                 = 0x500000000000000
	CAP_WRITE                      = 0x200000000000002
	CFLUSH                         = 0xf
	CLOCAL                         = 0x8000
	CLOCK_BOOTTIME                 = 0x5
	CLOCK_MONOTONIC                = 0x4
	CLOCK_MONOTONIC_COARSE         = 0xc
	CLOCK_MONOTONIC_FAST           = 0xc
	CLOCK_MONOTONIC_PRECISE        = 0xb
	CLOCK_PROCESS_CPUTIME_ID       = 0xf
	CLOCK_PROF                     = 0x2
	CLOCK_REALTIME                 = 0x0
	CLOCK_REALTIME_COARSE          = 0xa
	CLOCK_REALTIME_FAST            = 0xa
	CLOCK_REALTIME_PRECISE         = 0x9
	CLOCK_SECOND                   = 0xd
	CLOCK_THREAD_CPUTIME_ID        = 0xe
	CLOCK_UPTIME                   = 0x5
	CLOCK_UPTIME_FAST              = 0x8
	CLOCK_UPTIME_PRECISE           = 0x7
	CLOCK_VIRTUAL                  = 0x1
	CPUSTATES                      = 0x5
	CP_IDLE                        = 0x4
	CP_INTR                        = 0x3
	CP_NICE                        = 0x1
	CP_SYS                         = 0x2
	CP_USER                        = 0x0
	CREAD                          = 0x800
	CRTSCTS                        = 0x30000
	CS5                            = 0x0
	CS6                            = 0x100
	CS7                            = 0x200
	CS8                            = 0x300
	CSIZE                          = 0x300
	CSTART                         = 0x11
	CSTATUS                        = 0x14
	CSTOP                          = 0x13
	CSTOPB                         = 0x400
	CSUSP                          = 0x1a
	CTL_HW                         = 0x6
	CTL_KERN                       = 0x1
	CTL_MAXNAME                    = 0x18
	CTL_NET                        = 0x4
	DIOCGATTR                      = 0xc148648e
	DIOCGDELETE                    = 0x80106488
	DIOCGFLUSH                     = 0x20006487
	DIOCGFWHEADS                   = 0x40046483
	DIOCGFWSECTORS                 = 0x40046482
	DIOCGIDENT                     = 0x41006489
	DIOCGKERNELDUMP                = 0xc0986492
	DIOCGMEDIASIZE                 = 0x40086481
	DIOCGPHYSPATH                  = 0x4400648d
	DIOCGPROVIDERNAME              = 0x4400648a
	DIOCGSECTORSIZE                = 0x40046480
	DIOCGSTRIPEOFFSET              = 0x4008648c
	DIOCGSTRIPESIZE                = 0x4008648b
	DIOCSKERNELDUMP                = 0x80986491
	DIOCSKERNELDUMP_FREEBSD11      = 0x80046485
	DIOCSKERNELDUMP_FREEBSD12      = 0x80506490
	DIOCZONECMD                    = 0xc080648f
	DLT_A429                       = 0xb8
	DLT_A653_ICM                   = 0xb9
	DLT_AIRONET_HEADER             = 0x78
	DLT_AOS                        = 0xde
	DLT_APPLE_IP_OVER_IEEE1394     = 0x8a
	DLT_ARCNET                     = 0x7
	DLT_ARCNET_LINUX               = 0x81
	DLT_ATM_CLIP                   = 0x13
	DLT_ATM_RFC1483                = 0xb
	DLT_AURORA                     = 0x7e
	DLT_AX25                       = 0x3
	DLT_AX25_KISS                  = 0xca
	DLT_BACNET_MS_TP               = 0xa5
	DLT_BLUETOOTH_BREDR_BB         = 0xff
	DLT_BLUETOOTH_HCI_H4           = 0xbb
	DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9
	DLT_BLUETOOTH_LE_LL            = 0xfb
	DLT_BLUETOOTH_LE_LL_WITH_PHDR  = 0x100
	DLT_BLUETOOTH_LINUX_MONITOR    = 0xfe
	DLT_CAN20B                     = 0xbe
	DLT_CAN_SOCKETCAN              = 0xe3
	DLT_CHAOS                      = 0x5
	DLT_CHDLC                      = 0x68
	DLT_CISCO_IOS                  = 0x76
	DLT_CLASS_NETBSD_RAWAF         = 0x2240000
	DLT_C_HDLC                     = 0x68
	DLT_C_HDLC_WITH_DIR            = 0xcd
	DLT_DBUS                       = 0xe7
	DLT_DECT                       = 0xdd
	DLT_DISPLAYPORT_AUX            = 0x113
	DLT_DOCSIS                     = 0x8f
	DLT_DOCSIS31_XRA31             = 0x111
	DLT_DVB_CI                     = 0xeb
	DLT_ECONET                     = 0x73
	DLT_EN10MB                     = 0x1
	DLT_EN3MB                      = 0x2
	DLT_ENC                        = 0x6d
	DLT_EPON                       = 0x103
	DLT_ERF                        = 0xc5
	DLT_ERF_ETH                    = 0xaf
	DLT_ERF_POS                    = 0xb0
	DLT_ETHERNET_MPACKET           = 0x112
	DLT_FC_2                       = 0xe0
	DLT_FC_2_WITH_FRAME_DELIMS     = 0xe1
	DLT_FDDI                       = 0xa
	DLT_FLEXRAY                    = 0xd2
	DLT_FRELAY                     = 0x6b
	DLT_FRELAY_WITH_DIR            = 0xce
	DLT_GCOM_SERIAL                = 0xad
	DLT_GCOM_T1E1                  = 0xac
	DLT_GPF_F                      = 0xab
	DLT_GPF_T                      = 0xaa
	DLT_GPRS_LLC                   = 0xa9
	DLT_GSMTAP_ABIS                = 0xda
	DLT_GSMTAP_UM                  = 0xd9
	DLT_IBM_SN                     = 0x92
	DLT_IBM_SP                     = 0x91
	DLT_IEEE802                    = 0x6
	DLT_IEEE802_11                 = 0x69
	DLT_IEEE802_11_RADIO           = 0x7f
	DLT_IEEE802_11_RADIO_AVS       = 0xa3
	DLT_IEEE802_15_4               = 0xc3
	DLT_IEEE802_15_4_LINUX         = 0xbf
	DLT_IEEE802_15_4_NOFCS         = 0xe6
	DLT_IEEE802_15_4_NONASK_PHY    = 0xd7
	DLT_IEEE802_16_MAC_CPS         = 0xbc
	DLT_IEEE802_16_MAC_CPS_RADIO   = 0xc1
	DLT_INFINIBAND                 = 0xf7
	DLT_IPFILTER                   = 0x74
	DLT_IPMB_KONTRON               = 0xc7
	DLT_IPMB_LINUX                 = 0xd1
	DLT_IPMI_HPM_2                 = 0x104
	DLT_IPNET                      = 0xe2
	DLT_IPOIB                      = 0xf2
	DLT_IPV4                       = 0xe4
	DLT_IPV6                       = 0xe5
	DLT_IP_OVER_FC                 = 0x7a
	DLT_ISO_14443                  = 0x108
	DLT_JUNIPER_ATM1               = 0x89
	DLT_JUNIPER_ATM2               = 0x87
	DLT_JUNIPER_ATM_CEMIC          = 0xee
	DLT_JUNIPER_CHDLC              = 0xb5
	DLT_JUNIPER_ES                 = 0x84
	DLT_JUNIPER_ETHER              = 0xb2
	DLT_JUNIPER_FIBRECHANNEL       = 0xea
	DLT_JUNIPER_FRELAY             = 0xb4
	DLT_JUNIPER_GGSN               = 0x85
	DLT_JUNIPER_ISM                = 0xc2
	DLT_JUNIPER_MFR                = 0x86
	DLT_JUNIPER_MLFR               = 0x83
	DLT_JUNIPER_MLPPP              = 0x82
	DLT_JUNIPER_MONITOR            = 0xa4
	DLT_JUNIPER_PIC_PEER           = 0xae
	DLT_JUNIPER_PPP                = 0xb3
	DLT_JUNIPER_PPPOE              = 0xa7
	DLT_JUNIPER_PPPOE_ATM          = 0xa8
	DLT_JUNIPER_SERVICES           = 0x88
	DLT_JUNIPER_SRX_E2E            = 0xe9
	DLT_JUNIPER_ST                 = 0xc8
	DLT_JUNIPER_VP                 = 0xb7
	DLT_JUNIPER_VS                 = 0xe8
	DLT_LAPB_WITH_DIR              = 0xcf
	DLT_LAPD                       = 0xcb
	DLT_LIN                        = 0xd4
	DLT_LINUX_EVDEV                = 0xd8
	DLT_LINUX_IRDA                 = 0x90
	DLT_LINUX_LAPD                 = 0xb1
	DLT_LINUX_PPP_WITHDIRECTION    = 0xa6
	DLT_LINUX_SLL                  = 0x71
	DLT_LINUX_SLL2                 = 0x114
	DLT_LOOP                       = 0x6c
	DLT_LORATAP                    = 0x10e
	DLT_LTALK                      = 0x72
	DLT_MATCHING_MAX               = 0x114
	DLT_MATCHING_MIN               = 0x68
	DLT_MFR                        = 0xb6
	DLT_MOST                       = 0xd3
	DLT_MPEG_2_TS                  = 0xf3
	DLT_MPLS                       = 0xdb
	DLT_MTP2                       = 0x8c
	DLT_MTP2_WITH_PHDR             = 0x8b
	DLT_MTP3                       = 0x8d
	DLT_MUX27010                   = 0xec
	DLT_NETANALYZER                = 0xf0
	DLT_NETANALYZER_TRANSPARENT    = 0xf1
	DLT_NETLINK                    = 0xfd
	DLT_NFC_LLCP                   = 0xf5
	DLT_NFLOG                      = 0xef
	DLT_NG40                       = 0xf4
	DLT_NORDIC_BLE                 = 0x110
	DLT_NULL                       = 0x0
	DLT_OPENFLOW                   = 0x10b
	DLT_PCI_EXP                    = 0x7d
	DLT_PFLOG                      = 0x75
	DLT_PFSYNC                     = 0x79
	DLT_PKTAP                      = 0x102
	DLT_PPI                        = 0xc0
	DLT_PPP                        = 0x9
	DLT_PPP_BSDOS                  = 0xe
	DLT_PPP_ETHER                  = 0x33
	DLT_PPP_PPPD                   = 0xa6
	DLT_PPP_SERIAL                 = 0x32
	DLT_PPP_WITH_DIR               = 0xcc
	DLT_PPP_WITH_DIRECTION         = 0xa6
	DLT_PRISM_HEADER               = 0x77
	DLT_PROFIBUS_DL                = 0x101
	DLT_PRONET                     = 0x4
	DLT_RAIF1                      = 0xc6
	DLT_RAW                        = 0xc
	DLT_RDS                        = 0x109
	DLT_REDBACK_SMARTEDGE          = 0x20
	DLT_RIO                        = 0x7c
	DLT_RTAC_SERIAL                = 0xfa
	DLT_SCCP                       = 0x8e
	DLT_SCTP                       = 0xf8
	DLT_SDLC                       = 0x10c
	DLT_SITA                       = 0xc4
	DLT_SLIP                       = 0x8
	DLT_SLIP_BSDOS                 = 0xd
	DLT_STANAG_5066_D_PDU          = 0xed
	DLT_SUNATM                     = 0x7b
	DLT_SYMANTEC_FIREWALL          = 0x63
	DLT_TI_LLN_SNIFFER             = 0x10d
	DLT_TZSP                       = 0x80
	DLT_USB                        = 0xba
	DLT_USBPCAP                    = 0xf9
	DLT_USB_DARWIN                 = 0x10a
	DLT_USB_FREEBSD                = 0xba
	DLT_USB_LINUX                  = 0xbd
	DLT_USB_LINUX_MMAPPED          = 0xdc
	DLT_USER0                      = 0x93
	DLT_USER1                      = 0x94
	DLT_USER10                     = 0x9d
	DLT_USER11                     = 0x9e
	DLT_USER12                     = 0x9f
	DLT_USER13                     = 0xa0
	DLT_USER14                     = 0xa1
	DLT_USER15                     = 0xa2
	DLT_USER2                      = 0x95
	DLT_USER3                      = 0x96
	DLT_USER4                      = 0x97
	DLT_USER5                      = 0x98
	DLT_USER6                      = 0x99
	DLT_USER7                      = 0x9a
	DLT_USER8                      = 0x9b
	DLT_USER9                      = 0x9c
	DLT_VSOCK                      = 0x10f
	DLT_WATTSTOPPER_DLM            = 0x107
	DLT_WIHART                     = 0xdf
	DLT_WIRESHARK_UPPER_PDU        = 0xfc
	DLT_X2E_SERIAL                 = 0xd5
	DLT_X2E_XORAYA                 = 0xd6
	DLT_ZWAVE_R1_R2                = 0x105
	DLT_ZWAVE_R3                   = 0x106
	DT_BLK                         = 0x6
	DT_CHR                         = 0x2
	DT_DIR                         = 0x4
	DT_FIFO                        = 0x1
	DT_LNK                         = 0xa
	DT_REG                         = 0x8
	DT_SOCK                        = 0xc
	DT_UNKNOWN                     = 0x0
	DT_WHT                         = 0xe
	ECHO                           = 0x8
	ECHOCTL                        = 0x40
	ECHOE                          = 0x2
	ECHOK                          = 0x4
	ECHOKE                         = 0x1
	ECHONL                         = 0x10
	ECHOPRT                        = 0x20
	EHE_DEAD_PRIORITY              = -0x1
	EVFILT_AIO                     = -0x3
	EVFILT_EMPTY                   = -0xd
	EVFILT_FS                      = -0x9
	EVFILT_LIO                     = -0xa
	EVFILT_PROC                    = -0x5
	EVFILT_PROCDESC                = -0x8
	EVFILT_READ                    = -0x1
	EVFILT_SENDFILE                = -0xc
	EVFILT_SIGNAL                  = -0x6
	EVFILT_SYSCOUNT                = 0xd
	EVFILT_TIMER                   = -0x7
	EVFILT_USER                    = -0xb
	EVFILT_VNODE                   = -0x4
	EVFILT_WRITE                   = -0x2
	EVNAMEMAP_NAME_SIZE            = 0x40
	EV_ADD                         = 0x1
	EV_CLEAR                       = 0x20
	EV_DELETE                      = 0x2
	EV_DISABLE                     = 0x8
	EV_DISPATCH                    = 0x80
	EV_DROP                        = 0x1000
	EV_ENABLE                      = 0x4
	EV_EOF                         = 0x8000
	EV_ERROR                       = 0x4000
	EV_FLAG1                       = 0x2000
	EV_FLAG2                       = 0x4000
	EV_FORCEONESHOT                = 0x100
	EV_ONESHOT                     = 0x10
	EV_RECEIPT                     = 0x40
	EV_SYSFLAGS                    = 0xf000
	EXTA                           = 0x4b00
	EXTATTR_MAXNAMELEN             = 0xff
	EXTATTR_NAMESPACE_EMPTY        = 0x0
	EXTATTR_NAMESPACE_SYSTEM       = 0x2
	EXTATTR_NAMESPACE_USER         = 0x1
	EXTB                           = 0x9600
	EXTPROC                        = 0x800
	FD_CLOEXEC                     = 0x1
	FD_NONE                        = -0xc8
	FD_SETSIZE                     = 0x400
	FLUSHO                         = 0x800000
	F_ADD_SEALS                    = 0x13
	F_CANCEL                       = 0x5
	F_DUP2FD                       = 0xa
	F_DUP2FD_CLOEXEC               = 0x12
	F_DUPFD                        = 0x0
	F_DUPFD_CLOEXEC                = 0x11
	F_GETFD                        = 0x1
	F_GETFL                        = 0x3
	F_GETLK                        = 0xb
	F_GETOWN                       = 0x5
	F_GET_SEALS                    = 0x14
	F_ISUNIONSTACK                 = 0x15
	F_KINFO                        = 0x16
	F_OGETLK                       = 0x7
	F_OK                           = 0x0
	F_OSETLK                       = 0x8
	F_OSETLKW                      = 0x9
	F_RDAHEAD                      = 0x10
	F_RDLCK                        = 0x1
	F_READAHEAD                    = 0xf
	F_SEAL_GROW                    = 0x4
	F_SEAL_SEAL                    = 0x1
	F_SEAL_SHRINK                  = 0x2
	F_SEAL_WRITE                   = 0x8
	F_SETFD                        = 0x2
	F_SETFL                        = 0x4
	F_SETLK                        = 0xc
	F_SETLKW                       = 0xd
	F_SETLK_REMOTE                 = 0xe
	F_SETOWN                       = 0x6
	F_UNLCK                        = 0x2
	F_UNLCKSYS                     = 0x4
	F_WRLCK                        = 0x3
	HUPCL                          = 0x4000
	HW_MACHINE                     = 0x1
	ICANON                         = 0x100
	ICMP6_FILTER                   = 0x12
	ICRNL                          = 0x100
	IEXTEN                         = 0x400
	IFAN_ARRIVAL                   = 0x0
	IFAN_DEPARTURE                 = 0x1
	IFCAP_WOL_MAGIC                = 0x2000
	IFF_ALLMULTI                   = 0x200
	IFF_ALTPHYS                    = 0x4000
	IFF_BROADCAST                  = 0x2
	IFF_CANTCHANGE                 = 0x218f72
	IFF_CANTCONFIG                 = 0x10000
	IFF_DEBUG                      = 0x4
	IFF_DRV_OACTIVE                = 0x400
	IFF_DRV_RUNNING                = 0x40
	IFF_DYING                      = 0x200000
	IFF_KNOWSEPOCH                 = 0x20
	IFF_LINK0                      = 0x1000
	IFF_LINK1                      = 0x2000
	IFF_LINK2                      = 0x4000
	IFF_LOOPBACK                   = 0x8
	IFF_MONITOR                    = 0x40000
	IFF_MULTICAST                  = 0x8000
	IFF_NOARP                      = 0x80
	IFF_NOGROUP                    = 0x800000
	IFF_OACTIVE                    = 0x400
	IFF_POINTOPOINT                = 0x10
	IFF_PPROMISC                   = 0x20000
	IFF_PROMISC                    = 0x100
	IFF_RENAMING                   = 0x400000
	IFF_RUNNING                    = 0x40
	IFF_SIMPLEX                    = 0x800
	IFF_STATICARP                  = 0x80000
	IFF_UP                         = 0x1
	IFNAMSIZ                       = 0x10
	IFT_BRIDGE                     = 0xd1
	IFT_CARP                       = 0xf8
	IFT_IEEE1394                   = 0x90
	IFT_INFINIBAND                 = 0xc7
	IFT_L2VLAN                     = 0x87
	IFT_L3IPVLAN                   = 0x88
	IFT_PPP                        = 0x17
	IFT_PROPVIRTUAL                = 0x35
	IGNBRK                         = 0x1
	IGNCR                          = 0x80
	IGNPAR                         = 0x4
	IMAXBEL                        = 0x2000
	INLCR                          = 0x40
	INPCK                          = 0x10
	IN_CLASSA_HOST                 = 0xffffff
	IN_CLASSA_MAX                  = 0x80
	IN_CLASSA_NET                  = 0xff000000
	IN_CLASSA_NSHIFT               = 0x18
	IN_CLASSB_HOST                 = 0xffff
	IN_CLASSB_MAX                  = 0x10000
	IN_CLASSB_NET                  = 0xffff0000
	IN_CLASSB_NSHIFT               = 0x10
	IN_CLASSC_HOST                 = 0xff
	IN_CLASSC_NET                  = 0xffffff00
	IN_CLASSC_NSHIFT               = 0x8
	IN_CLASSD_HOST                 = 0xfffffff
	IN_CLASSD_NET                  = 0xf0000000
	IN_CLASSD_NSHIFT               = 0x1c
	IN_LOOPBACKNET                 = 0x7f
	IN_NETMASK_DEFAULT             = 0xffffff00
	IN_RFC3021_MASK                = 0xfffffffe
	IPPROTO_3PC                    = 0x22
	IPPROTO_ADFS                   = 0x44
	IPPROTO_AH                     = 0x33
	IPPROTO_AHIP                   = 0x3d
	IPPROTO_APES                   = 0x63
	IPPROTO_ARGUS                  = 0xd
	IPPROTO_AX25                   = 0x5d
	IPPROTO_BHA                    = 0x31
	IPPROTO_BLT                    = 0x1e
	IPPROTO_BRSATMON               = 0x4c
	IPPROTO_CARP                   = 0x70
	IPPROTO_CFTP                   = 0x3e
	IPPROTO_CHAOS                  = 0x10
	IPPROTO_CMTP                   = 0x26
	IPPROTO_CPHB                   = 0x49
	IPPROTO_CPNX                   = 0x48
	IPPROTO_DCCP                   = 0x21
	IPPROTO_DDP                    = 0x25
	IPPROTO_DGP                    = 0x56
	IPPROTO_DIVERT                 = 0x102
	IPPROTO_DONE                   = 0x101
	IPPROTO_DSTOPTS                = 0x3c
	IPPROTO_EGP                    = 0x8
	IPPROTO_EMCON                  = 0xe
	IPPROTO_ENCAP                  = 0x62
	IPPROTO_EON                    = 0x50
	IPPROTO_ESP                    = 0x32
	IPPROTO_ETHERIP                = 0x61
	IPPROTO_FRAGMENT               = 0x2c
	IPPROTO_GGP                    = 0x3
	IPPROTO_GMTP                   = 0x64
	IPPROTO_GRE                    = 0x2f
	IPPROTO_HELLO                  = 0x3f
	IPPROTO_HIP                    = 0x8b
	IPPROTO_HMP                    = 0x14
	IPPROTO_HOPOPTS                = 0x0
	IPPROTO_ICMP                   = 0x1
	IPPROTO_ICMPV6                 = 0x3a
	IPPROTO_IDP                    = 0x16
	IPPROTO_IDPR                   = 0x23
	IPPROTO_IDRP                   = 0x2d
	IPPROTO_IGMP                   = 0x2
	IPPROTO_IGP                    = 0x55
	IPPROTO_IGRP                   = 0x58
	IPPROTO_IL                     = 0x28
	IPPROTO_INLSP                  = 0x34
	IPPROTO_INP                    = 0x20
	IPPROTO_IP                     = 0x0
	IPPROTO_IPCOMP                 = 0x6c
	IPPROTO_IPCV                   = 0x47
	IPPROTO_IPEIP                  = 0x5e
	IPPROTO_IPIP                   = 0x4
	IPPROTO_IPPC                   = 0x43
	IPPROTO_IPV4                   = 0x4
	IPPROTO_IPV6                   = 0x29
	IPPROTO_IRTP                   = 0x1c
	IPPROTO_KRYPTOLAN              = 0x41
	IPPROTO_LARP                   = 0x5b
	IPPROTO_LEAF1                  = 0x19
	IPPROTO_LEAF2                  = 0x1a
	IPPROTO_MAX                    = 0x100
	IPPROTO_MEAS                   = 0x13
	IPPROTO_MH                     = 0x87
	IPPROTO_MHRP                   = 0x30
	IPPROTO_MICP                   = 0x5f
	IPPROTO_MOBILE                 = 0x37
	IPPROTO_MPLS                   = 0x89
	IPPROTO_MTP                    = 0x5c
	IPPROTO_MUX                    = 0x12
	IPPROTO_ND                     = 0x4d
	IPPROTO_NHRP                   = 0x36
	IPPROTO_NONE                   = 0x3b
	IPPROTO_NSP                    = 0x1f
	IPPROTO_NVPII                  = 0xb
	IPPROTO_OLD_DIVERT             = 0xfe
	IPPROTO_OSPFIGP                = 0x59
	IPPROTO_PFSYNC                 = 0xf0
	IPPROTO_PGM                    = 0x71
	IPPROTO_PIGP                   = 0x9
	IPPROTO_PIM                    = 0x67
	IPPROTO_PRM                    = 0x15
	IPPROTO_PUP                    = 0xc
	IPPROTO_PVP                    = 0x4b
	IPPROTO_RAW                    = 0xff
	IPPROTO_RCCMON                 = 0xa
	IPPROTO_RDP                    = 0x1b
	IPPROTO_RESERVED_253           = 0xfd
	IPPROTO_RESERVED_254           = 0xfe
	IPPROTO_ROUTING                = 0x2b
	IPPROTO_RSVP                   = 0x2e
	IPPROTO_RVD                    = 0x42
	IPPROTO_SATEXPAK               = 0x40
	IPPROTO_SATMON                 = 0x45
	IPPROTO_SCCSP                  = 0x60
	IPPROTO_SCTP                   = 0x84
	IPPROTO_SDRP                   = 0x2a
	IPPROTO_SEND                   = 0x103
	IPPROTO_SHIM6                  = 0x8c
	IPPROTO_SKIP                   = 0x39
	IPPROTO_SPACER                 = 0x7fff
	IPPROTO_SRPC                   = 0x5a
	IPPROTO_ST                     = 0x7
	IPPROTO_SVMTP                  = 0x52
	IPPROTO_SWIPE                  = 0x35
	IPPROTO_TCF                    = 0x57
	IPPROTO_TCP                    = 0x6
	IPPROTO_TLSP                   = 0x38
	IPPROTO_TP                     = 0x1d
	IPPROTO_TPXX                   = 0x27
	IPPROTO_TRUNK1                 = 0x17
	IPPROTO_TRUNK2                 = 0x18
	IPPROTO_TTP                    = 0x54
	IPPROTO_UDP                    = 0x11
	IPPROTO_UDPLITE                = 0x88
	IPPROTO_VINES                  = 0x53
	IPPROTO_VISA                   = 0x46
	IPPROTO_VMTP                   = 0x51
	IPPROTO_WBEXPAK                = 0x4f
	IPPROTO_WBMON                  = 0x4e
	IPPROTO_WSN                    = 0x4a
	IPPROTO_XNET                   = 0xf
	IPPROTO_XTP                    = 0x24
	IPV6_AUTOFLOWLABEL             = 0x3b
	IPV6_BINDANY                   = 0x40
	IPV6_BINDMULTI                 = 0x41
	IPV6_BINDV6ONLY                = 0x1b
	IPV6_CHECKSUM                  = 0x1a
	IPV6_DEFAULT_MULTICAST_HOPS    = 0x1
	IPV6_DEFAULT_MULTICAST_LOOP    = 0x1
	IPV6_DEFHLIM                   = 0x40
	IPV6_DONTFRAG                  = 0x3e
	IPV6_DSTOPTS                   = 0x32
	IPV6_FLOWID                    = 0x43
	IPV6_FLOWINFO_MASK             = 0xffffff0f
	IPV6_FLOWLABEL_LEN             = 0x14
	IPV6_FLOWLABEL_MASK            = 0xffff0f00
	IPV6_FLOWTYPE                  = 0x44
	IPV6_FRAGTTL                   = 0x78
	IPV6_FW_ADD                    = 0x1e
	IPV6_FW_DEL                    = 0x1f
	IPV6_FW_FLUSH                  = 0x20
	IPV6_FW_GET                    = 0x22
	IPV6_FW_ZERO                   = 0x21
	IPV6_HLIMDEC                   = 0x1
	IPV6_HOPLIMIT                  = 0x2f
	IPV6_HOPOPTS                   = 0x31
	IPV6_IPSEC_POLICY              = 0x1c
	IPV6_JOIN_GROUP                = 0xc
	IPV6_LEAVE_GROUP               = 0xd
	IPV6_MAXHLIM                   = 0xff
	IPV6_MAXOPTHDR                 = 0x800
	IPV6_MAXPACKET                 = 0xffff
	IPV6_MAX_GROUP_SRC_FILTER      = 0x200
	IPV6_MAX_MEMBERSHIPS           = 0xfff
	IPV6_MAX_SOCK_SRC_FILTER       = 0x80
	IPV6_MMTU                      = 0x500
	IPV6_MSFILTER                  = 0x4a
	IPV6_MULTICAST_HOPS            = 0xa
	IPV6_MULTICAST_IF              = 0x9
	IPV6_MULTICAST_LOOP            = 0xb
	IPV6_NEXTHOP                   = 0x30
	IPV6_ORIGDSTADDR               = 0x48
	IPV6_PATHMTU                   = 0x2c
	IPV6_PKTINFO                   = 0x2e
	IPV6_PORTRANGE                 = 0xe
	IPV6_PORTRANGE_DEFAULT         = 0x0
	IPV6_PORTRANGE_HIGH            = 0x1
	IPV6_PORTRANGE_LOW             = 0x2
	IPV6_PREFER_TEMPADDR           = 0x3f
	IPV6_RECVDSTOPTS               = 0x28
	IPV6_RECVFLOWID                = 0x46
	IPV6_RECVHOPLIMIT              = 0x25
	IPV6_RECVHOPOPTS               = 0x27
	IPV6_RECVORIGDSTADDR           = 0x48
	IPV6_RECVPATHMTU               = 0x2b
	IPV6_RECVPKTINFO               = 0x24
	IPV6_RECVRSSBUCKETID           = 0x47
	IPV6_RECVRTHDR                 = 0x26
	IPV6_RECVTCLASS                = 0x39
	IPV6_RSSBUCKETID               = 0x45
	IPV6_RSS_LISTEN_BUCKET         = 0x42
	IPV6_RTHDR                     = 0x33
	IPV6_RTHDRDSTOPTS              = 0x23
	IPV6_RTHDR_LOOSE               = 0x0
	IPV6_RTHDR_STRICT              = 0x1
	IPV6_RTHDR_TYPE_0              = 0x0
	IPV6_SOCKOPT_RESERVED1         = 0x3
	IPV6_TCLASS                    = 0x3d
	IPV6_UNICAST_HOPS              = 0x4
	IPV6_USE_MIN_MTU               = 0x2a
	IPV6_V6ONLY                    = 0x1b
	IPV6_VERSION                   = 0x60
	IPV6_VERSION_MASK              = 0xf0
	IPV6_VLAN_PCP                  = 0x4b
	IP_ADD_MEMBERSHIP              = 0xc
	IP_ADD_SOURCE_MEMBERSHIP       = 0x46
	IP_BINDANY                     = 0x18
	IP_BINDMULTI                   = 0x19
	IP_BLOCK_SOURCE                = 0x48
	IP_DEFAULT_MULTICAST_LOOP      = 0x1
	IP_DEFAULT_MULTICAST_TTL       = 0x1
	IP_DF                          = 0x4000
	IP_DONTFRAG                    = 0x43
	IP_DROP_MEMBERSHIP             = 0xd
	IP_DROP_SOURCE_MEMBERSHIP      = 0x47
	IP_DUMMYNET3                   = 0x31
	IP_DUMMYNET_CONFIGURE          = 0x3c
	IP_DUMMYNET_DEL                = 0x3d
	IP_DUMMYNET_FLUSH              = 0x3e
	IP_DUMMYNET_GET                = 0x40
	IP_FLOWID                      = 0x5a
	IP_FLOWTYPE                    = 0x5b
	IP_FW3                         = 0x30
	IP_FW_ADD                      = 0x32
	IP_FW_DEL                      = 0x33
	IP_FW_FLUSH                    = 0x34
	IP_FW_GET                      = 0x36
	IP_FW_NAT_CFG                  = 0x38
	IP_FW_NAT_DEL                  = 0x39
	IP_FW_NAT_GET_CONFIG           = 0x3a
	IP_FW_NAT_GET_LOG              = 0x3b
	IP_FW_RESETLOG                 = 0x37
	IP_FW_TABLE_ADD                = 0x28
	IP_FW_TABLE_DEL                = 0x29
	IP_FW_TABLE_FLUSH              = 0x2a
	IP_FW_TABLE_GETSIZE            = 0x2b
	IP_FW_TABLE_LIST               = 0x2c
	IP_FW_ZERO                     = 0x35
	IP_HDRINCL                     = 0x2
	IP_IPSEC_POLICY                = 0x15
	IP_MAXPACKET                   = 0xffff
	IP_MAX_GROUP_SRC_FILTER        = 0x200
	IP_MAX_MEMBERSHIPS             = 0xfff
	IP_MAX_SOCK_MUTE_FILTER        = 0x80
	IP_MAX_SOCK_SRC_FILTER         = 0x80
	IP_MF                          = 0x2000
	IP_MINTTL                      = 0x42
	IP_MSFILTER                    = 0x4a
	IP_MSS                         = 0x240
	IP_MULTICAST_IF                = 0x9
	IP_MULTICAST_LOOP              = 0xb
	IP_MULTICAST_TTL               = 0xa
	IP_MULTICAST_VIF               = 0xe
	IP_OFFMASK                     = 0x1fff
	IP_ONESBCAST                   = 0x17
	IP_OPTIONS                     = 0x1
	IP_ORIGDSTADDR                 = 0x1b
	IP_PORTRANGE                   = 0x13
	IP_PORTRANGE_DEFAULT           = 0x0
	IP_PORTRANGE_HIGH              = 0x1
	IP_PORTRANGE_LOW               = 0x2
	IP_RECVDSTADDR                 = 0x7
	IP_RECVFLOWID                  = 0x5d
	IP_RECVIF                      = 0x14
	IP_RECVOPTS                    = 0x5
	IP_RECVORIGDSTADDR             = 0x1b
	IP_RECVRETOPTS                 = 0x6
	IP_RECVRSSBUCKETID             = 0x5e
	IP_RECVTOS                     = 0x44
	IP_RECVTTL                     = 0x41
	IP_RETOPTS                     = 0x8
	IP_RF                          = 0x8000
	IP_RSSBUCKETID                 = 0x5c
	IP_RSS_LISTEN_BUCKET           = 0x1a
	IP_RSVP_OFF                    = 0x10
	IP_RSVP_ON                     = 0xf
	IP_RSVP_VIF_OFF                = 0x12
	IP_RSVP_VIF_ON                 = 0x11
	IP_SENDSRCADDR                 = 0x7
	IP_TOS                         = 0x3
	IP_TTL                         = 0x4
	IP_UNBLOCK_SOURCE              = 0x49
	IP_VLAN_PCP                    = 0x4b
	ISIG                           = 0x80
	ISTRIP                         = 0x20
	ITIMER_PROF                    = 0x2
	ITIMER_REAL                    = 0x0
	ITIMER_VIRTUAL                 = 0x1
	IXANY                          = 0x800
	IXOFF                          = 0x400
	IXON                           = 0x200
	KERN_HOSTNAME                  = 0xa
	KERN_OSRELEASE                 = 0x2
	KERN_OSTYPE                    = 0x1
	KERN_VERSION                   = 0x4
	LOCAL_CONNWAIT                 = 0x4
	LOCAL_CREDS                    = 0x2
	LOCAL_CREDS_PERSISTENT         = 0x3
	LOCAL_PEERCRED                 = 0x1
	LOCAL_VENDOR                   = 0x80000000
	LOCK_EX                        = 0x2
	LOCK_NB                        = 0x4
	LOCK_SH                        = 0x1
	LOCK_UN                        = 0x8
	MADV_AUTOSYNC                  = 0x7
	MADV_CORE                      = 0x9
	MADV_DONTNEED                  = 0x4
	MADV_FREE                      = 0x5
	MADV_NOCORE                    = 0x8
	MADV_NORMAL                    = 0x0
	MADV_NOSYNC                    = 0x6
	MADV_PROTECT                   = 0xa
	MADV_RANDOM                    = 0x1
	MADV_SEQUENTIAL                = 0x2
	MADV_WILLNEED                  = 0x3
	MAP_32BIT                      = 0x80000
	MAP_ALIGNED_SUPER              = 0x1000000
	MAP_ALIGNMENT_MASK             = -0x1000000
	MAP_ALIGNMENT_SHIFT            = 0x18
	MAP_ANON                       = 0x1000
	MAP_ANONYMOUS                  = 0x1000
	MAP_COPY                       = 0x2
	MAP_EXCL                       = 0x4000
	MAP_FILE                       = 0x0
	MAP_FIXED                      = 0x10
	MAP_GUARD                      = 0x2000
	MAP_HASSEMAPHORE               = 0x200
	MAP_NOCORE                     = 0x20000
	MAP_NOSYNC                     = 0x800
	MAP_PREFAULT_READ              = 0x40000
	MAP_PRIVATE                    = 0x2
	MAP_RESERVED0020               = 0x20
	MAP_RESERVED0040               = 0x40
	MAP_RESERVED0080               = 0x80
	MAP_RESERVED0100               = 0x100
	MAP_SHARED                     = 0x1
	MAP_STACK                      = 0x400
	MCAST_BLOCK_SOURCE             = 0x54
	MCAST_EXCLUDE                  = 0x2
	MCAST_INCLUDE                  = 0x1
	MCAST_JOIN_GROUP               = 0x50
	MCAST_JOIN_SOURCE_GROUP        = 0x52
	MCAST_LEAVE_GROUP              = 0x51
	MCAST_LEAVE_SOURCE_GROUP       = 0x53
	MCAST_UNBLOCK_SOURCE           = 0x55
	MCAST_UNDEFINED                = 0x0
	MCL_CURRENT                    = 0x1
	MCL_FUTURE                     = 0x2
	MFD_ALLOW_SEALING              = 0x2
	MFD_CLOEXEC                    = 0x1
	MFD_HUGETLB                    = 0x4
	MFD_HUGE_16GB                  = -0x78000000
	MFD_HUGE_16MB                  = 0x60000000
	MFD_HUGE_1GB                   = 0x78000000
	MFD_HUGE_1MB                   = 0x50000000
	MFD_HUGE_256MB                 = 0x70000000
	MFD_HUGE_2GB                   = 0x7c000000
	MFD_HUGE_2MB                   = 0x54000000
	MFD_HUGE_32MB                  = 0x64000000
	MFD_HUGE_512KB                 = 0x4c000000
	MFD_HUGE_512MB                 = 0x74000000
	MFD_HUGE_64KB                  = 0x40000000
	MFD_HUGE_8MB                   = 0x5c000000
	MFD_HUGE_MASK                  = 0xfc000000
	MFD_HUGE_SHIFT                 = 0x1a
	MNT_ACLS                       = 0x8000000
	MNT_ASYNC                      = 0x40
	MNT_AUTOMOUNTED                = 0x200000000
	MNT_BYFSID                     = 0x8000000
	MNT_CMDFLAGS                   = 0x300d0f0000
	MNT_DEFEXPORTED                = 0x200
	MNT_DELEXPORT                  = 0x20000
	MNT_EMPTYDIR                   = 0x2000000000
	MNT_EXKERB                     = 0x800
	MNT_EXPORTANON                 = 0x400
	MNT_EXPORTED                   = 0x100
	MNT_EXPUBLIC                   = 0x20000000
	MNT_EXRDONLY                   = 0x80
	MNT_EXTLS                      = 0x4000000000
	MNT_EXTLSCERT                  = 0x8000000000
	MNT_EXTLSCERTUSER              = 0x10000000000
	MNT_FORCE                      = 0x80000
	MNT_GJOURNAL                   = 0x2000000
	MNT_IGNORE                     = 0x800000
	MNT_LAZY                       = 0x3
	MNT_LOCAL                      = 0x1000
	MNT_MULTILABEL                 = 0x4000000
	MNT_NFS4ACLS                   = 0x10
	MNT_NOATIME                    = 0x10000000
	MNT_NOCLUSTERR                 = 0x40000000
	MNT_NOCLUSTERW                 = 0x80000000
	MNT_NOCOVER                    = 0x1000000000
	MNT_NOEXEC                     = 0x4
	MNT_NONBUSY                    = 0x4000000
	MNT_NOSUID                     = 0x8
	MNT_NOSYMFOLLOW                = 0x400000
	MNT_NOWAIT                     = 0x2
	MNT_QUOTA                      = 0x2000
	MNT_RDONLY                     = 0x1
	MNT_RELOAD                     = 0x40000
	MNT_ROOTFS                     = 0x4000
	MNT_SNAPSHOT                   = 0x1000000
	MNT_SOFTDEP                    = 0x200000
	MNT_SUIDDIR                    = 0x100000
	MNT_SUJ                        = 0x100000000
	MNT_SUSPEND                    = 0x4
	MNT_SYNCHRONOUS                = 0x2
	MNT_UNION                      = 0x20
	MNT_UNTRUSTED                  = 0x800000000
	MNT_UPDATE                     = 0x10000
	MNT_UPDATEMASK                 = 0xad8d0807e
	MNT_USER                       = 0x8000
	MNT_VERIFIED                   = 0x400000000
	MNT_VISFLAGMASK                = 0xffef0ffff
	MNT_WAIT                       = 0x1
	MSG_CMSG_CLOEXEC               = 0x40000
	MSG_COMPAT                     = 0x8000
	MSG_CTRUNC                     = 0x20
	MSG_DONTROUTE                  = 0x4
	MSG_DONTWAIT                   = 0x80
	MSG_EOF                        = 0x100
	MSG_EOR                        = 0x8
	MSG_NBIO                       = 0x4000
	MSG_NOSIGNAL                   = 0x20000
	MSG_NOTIFICATION               = 0x2000
	MSG_OOB                        = 0x1
	MSG_PEEK                       = 0x2
	MSG_TRUNC                      = 0x10
	MSG_WAITALL                    = 0x40
	MSG_WAITFORONE                 = 0x80000
	MS_ASYNC                       = 0x1
	MS_INVALIDATE                  = 0x2
	MS_SYNC                        = 0x0
	NAME_MAX                       = 0xff
	NET_RT_DUMP                    = 0x1
	NET_RT_FLAGS                   = 0x2
	NET_RT_IFLIST                  = 0x3
	NET_RT_IFLISTL                 = 0x5
	NET_RT_IFMALIST                = 0x4
	NET_RT_NHGRP                   = 0x7
	NET_RT_NHOP                    = 0x6
	NFDBITS                        = 0x40
	NOFLSH                         = 0x80000000
	NOKERNINFO                     = 0x2000000
	NOTE_ABSTIME                   = 0x10
	NOTE_ATTRIB                    = 0x8
	NOTE_CHILD                     = 0x4
	NOTE_CLOSE                     = 0x100
	NOTE_CLOSE_WRITE               = 0x200
	NOTE_DELETE                    = 0x1
	NOTE_EXEC                      = 0x20000000
	NOTE_EXIT                      = 0x80000000
	NOTE_EXTEND                    = 0x4
	NOTE_FFAND                     = 0x40000000
	NOTE_FFCOPY                    = 0xc0000000
	NOTE_FFCTRLMASK                = 0xc0000000
	NOTE_FFLAGSMASK                = 0xffffff
	NOTE_FFNOP                     = 0x0
	NOTE_FFOR                      = 0x80000000
	NOTE_FILE_POLL                 = 0x2
	NOTE_FORK                      = 0x40000000
	NOTE_LINK                      = 0x10
	NOTE_LOWAT                     = 0x1
	NOTE_MSECONDS                  = 0x2
	NOTE_NSECONDS                  = 0x8
	NOTE_OPEN                      = 0x80
	NOTE_PCTRLMASK                 = 0xf0000000
	NOTE_PDATAMASK                 = 0xfffff
	NOTE_READ                      = 0x400
	NOTE_RENAME                    = 0x20
	NOTE_REVOKE                    = 0x40
	NOTE_SECONDS                   = 0x1
	NOTE_TRACK                     = 0x1
	NOTE_TRACKERR                  = 0x2
	NOTE_TRIGGER                   = 0x1000000
	NOTE_USECONDS                  = 0x4
	NOTE_WRITE                     = 0x2
	OCRNL                          = 0x10
	ONLCR                          = 0x2
	ONLRET                         = 0x40
	ONOCR                          = 0x20
	ONOEOT                         = 0x8
	OPOST                          = 0x1
	OXTABS                         = 0x4
	O_ACCMODE                      = 0x3
	O_APPEND                       = 0x8
	O_ASYNC                        = 0x40
	O_CLOEXEC                      = 0x100000
	O_CREAT                        = 0x200
	O_DIRECT                       = 0x10000
	O_DIRECTORY                    = 0x20000
	O_DSYNC                        = 0x1000000
	O_EMPTY_PATH                   = 0x2000000
	O_EXCL                         = 0x800
	O_EXEC                         = 0x40000
	O_EXLOCK                       = 0x20
	O_FSYNC                        = 0x80
	O_NDELAY                       = 0x4
	O_NOCTTY                       = 0x8000
	O_NOFOLLOW                     = 0x100
	O_NONBLOCK                     = 0x4
	O_PATH                         = 0x400000
	O_RDONLY                       = 0x0
	O_RDWR                         = 0x2
	O_RESOLVE_BENEATH              = 0x800000
	O_SEARCH                       = 0x40000
	O_SHLOCK                       = 0x10
	O_SYNC                         = 0x80
	O_TRUNC                        = 0x400
	O_TTY_INIT                     = 0x80000
	O_VERIFY                       = 0x200000
	O_WRONLY                       = 0x1
	PARENB                         = 0x1000
	PARMRK                         = 0x8
	PARODD                         = 0x2000
	PENDIN                         = 0x20000000
	PIOD_READ_D                    = 0x1
	PIOD_READ_I                    = 0x3
	PIOD_WRITE_D                   = 0x2
	PIOD_WRITE_I                   = 0x4
	PRIO_PGRP                      = 0x1
	PRIO_PROCESS                   = 0x0
	PRIO_USER                      = 0x2
	PROT_EXEC                      = 0x4
	PROT_NONE                      = 0x0
	PROT_READ                      = 0x1
	PROT_WRITE                     = 0x2
	PTRACE_DEFAULT                 = 0x1
	PTRACE_EXEC                    = 0x1
	PTRACE_FORK                    = 0x8
	PTRACE_LWP                     = 0x10
	PTRACE_SCE                     = 0x2
	PTRACE_SCX                     = 0x4
	PTRACE_SYSCALL                 = 0x6
	PTRACE_VFORK                   = 0x20
	PT_ATTACH                      = 0xa
	PT_CLEARSTEP                   = 0x10
	PT_CONTINUE                    = 0x7
	PT_COREDUMP                    = 0x1d
	PT_DETACH                      = 0xb
	PT_FIRSTMACH                   = 0x40
	PT_FOLLOW_FORK                 = 0x17
	PT_GETDBREGS                   = 0x25
	PT_GETFPREGS                   = 0x23
	PT_GETLWPLIST                  = 0xf
	PT_GETNUMLWPS                  = 0xe
	PT_GETREGS                     = 0x21
	PT_GET_EVENT_MASK              = 0x19
	PT_GET_SC_ARGS                 = 0x1b
	PT_GET_SC_RET                  = 0x1c
	PT_IO                          = 0xc
	PT_KILL                        = 0x8
	PT_LWPINFO                     = 0xd
	PT_LWP_EVENTS                  = 0x18
	PT_READ_D                      = 0x2
	PT_READ_I                      = 0x1
	PT_RESUME                      = 0x13
	PT_SETDBREGS                   = 0x26
	PT_SETFPREGS                   = 0x24
	PT_SETREGS                     = 0x22
	PT_SETSTEP                     = 0x11
	PT_SET_EVENT_MASK              = 0x1a
	PT_STEP                        = 0x9
	PT_SUSPEND                     = 0x12
	PT_SYSCALL                     = 0x16
	PT_TO_SCE                      = 0x14
	PT_TO_SCX                      = 0x15
	PT_TRACE_ME                    = 0x0
	PT_VM_ENTRY                    = 0x29
	PT_VM_TIMESTAMP                = 0x28
	PT_WRITE_D                     = 0x5
	PT_WRITE_I                     = 0x4
	P_ZONEID                       = 0xc
	RLIMIT_AS                      = 0xa
	RLIMIT_CORE                    = 0x4
	RLIMIT_CPU                     = 0x0
	RLIMIT_DATA                    = 0x2
	RLIMIT_FSIZE                   = 0x1
	RLIMIT_MEMLOCK                 = 0x6
	RLIMIT_NOFILE                  = 0x8
	RLIMIT_NPROC                   = 0x7
	RLIMIT_RSS                     = 0x5
	RLIMIT_STACK                   = 0x3
	RLIM_INFINITY                  = 0x7fffffffffffffff
	RTAX_AUTHOR                    = 0x6
	RTAX_BRD                       = 0x7
	RTAX_DST                       = 0x0
	RTAX_GATEWAY                   = 0x1
	RTAX_GENMASK                   = 0x3
	RTAX_IFA                       = 0x5
	RTAX_IFP                       = 0x4
	RTAX_MAX                       = 0x8
	RTAX_NETMASK                   = 0x2
	RTA_AUTHOR                     = 0x40
	RTA_BRD                        = 0x80
	RTA_DST                        = 0x1
	RTA_GATEWAY                    = 0x2
	RTA_GENMASK                    = 0x8
	RTA_IFA                        = 0x20
	RTA_IFP                        = 0x10
	RTA_NETMASK                    = 0x4
	RTF_BLACKHOLE                  = 0x1000
	RTF_BROADCAST                  = 0x400000
	RTF_DONE                       = 0x40
	RTF_DYNAMIC                    = 0x10
	RTF_FIXEDMTU                   = 0x80000
	RTF_FMASK                      = 0x1004d808
	RTF_GATEWAY                    = 0x2
	RTF_GWFLAG_COMPAT              = 0x80000000
	RTF_HOST                       = 0x4
	RTF_LLDATA                     = 0x400
	RTF_LLINFO                     = 0x400
	RTF_LOCAL                      = 0x200000
	RTF_MODIFIED                   = 0x20
	RTF_MULTICAST                  = 0x800000
	RTF_PINNED                     = 0x100000
	RTF_PROTO1                     = 0x8000
	RTF_PROTO2                     = 0x4000
	RTF_PROTO3                     = 0x40000
	RTF_REJECT                     = 0x8
	RTF_STATIC                     = 0x800
	RTF_STICKY                     = 0x10000000
	RTF_UP                         = 0x1
	RTF_XRESOLVE                   = 0x200
	RTM_ADD                        = 0x1
	RTM_CHANGE                     = 0x3
	RTM_DELADDR                    = 0xd
	RTM_DELETE                     = 0x2
	RTM_DELMADDR                   = 0x10
	RTM_GET                        = 0x4
	RTM_IEEE80211                  = 0x12
	RTM_IFANNOUNCE                 = 0x11
	RTM_IFINFO                     = 0xe
	RTM_LOCK                       = 0x8
	RTM_LOSING                     = 0x5
	RTM_MISS                       = 0x7
	RTM_NEWADDR                    = 0xc
	RTM_NEWMADDR                   = 0xf
	RTM_REDIRECT                   = 0x6
	RTM_RESOLVE                    = 0xb
	RTM_RTTUNIT                    = 0xf4240
	RTM_VERSION                    = 0x5
	RTV_EXPIRE                     = 0x4
	RTV_HOPCOUNT                   = 0x2
	RTV_MTU                        = 0x1
	RTV_RPIPE                      = 0x8
	RTV_RTT                        = 0x40
	RTV_RTTVAR                     = 0x80
	RTV_SPIPE                      = 0x10
	RTV_SSTHRESH                   = 0x20
	RTV_WEIGHT                     = 0x100
	RT_ALL_FIBS                    = -0x1
	RT_BLACKHOLE                   = 0x40
	RT_DEFAULT_FIB                 = 0x0
	RT_DEFAULT_WEIGHT              = 0x1
	RT_HAS_GW                      = 0x80
	RT_HAS_HEADER                  = 0x10
	RT_HAS_HEADER_BIT              = 0x4
	RT_L2_ME                       = 0x4
	RT_L2_ME_BIT                   = 0x2
	RT_LLE_CACHE                   = 0x100
	RT_MAX_WEIGHT                  = 0xffffff
	RT_MAY_LOOP                    = 0x8
	RT_MAY_LOOP_BIT                = 0x3
	RT_REJECT                      = 0x20
	RUSAGE_CHILDREN                = -0x1
	RUSAGE_SELF                    = 0x0
	RUSAGE_THREAD                  = 0x1
	SCM_BINTIME                    = 0x4
	SCM_CREDS                      = 0x3
	SCM_CREDS2                     = 0x8
	SCM_MONOTONIC                  = 0x6
	SCM_REALTIME                   = 0x5
	SCM_RIGHTS                     = 0x1
	SCM_TIMESTAMP                  = 0x2
	SCM_TIME_INFO                  = 0x7
	SEEK_CUR                       = 0x1
	SEEK_DATA                      = 0x3
	SEEK_END                       = 0x2
	SEEK_HOLE                      = 0x4
	SEEK_SET                       = 0x0
	SHUT_RD                        = 0x0
	SHUT_RDWR                      = 0x2
	SHUT_WR                        = 0x1
	SIOCADDMULTI                   = 0x80206931
	SIOCAIFADDR                    = 0x8040691a
	SIOCAIFGROUP                   = 0x80286987
	SIOCATMARK                     = 0x40047307
	SIOCDELMULTI                   = 0x80206932
	SIOCDIFADDR                    = 0x80206919
	SIOCDIFGROUP                   = 0x80286989
	SIOCDIFPHYADDR                 = 0x80206949
	SIOCGDRVSPEC                   = 0xc028697b
	SIOCGETSGCNT                   = 0xc0207210
	SIOCGETVIFCNT                  = 0xc028720f
	SIOCGHIWAT                     = 0x40047301
	SIOCGHWADDR                    = 0xc020693e
	SIOCGI2C                       = 0xc020693d
	SIOCGIFADDR                    = 0xc0206921
	SIOCGIFALIAS                   = 0xc044692d
	SIOCGIFBRDADDR                 = 0xc0206923
	SIOCGIFCAP                     = 0xc020691f
	SIOCGIFCONF                    = 0xc0106924
	SIOCGIFDATA                    = 0x8020692c
	SIOCGIFDESCR                   = 0xc020692a
	SIOCGIFDOWNREASON              = 0xc058699a
	SIOCGIFDSTADDR                 = 0xc0206922
	SIOCGIFFIB                     = 0xc020695c
	SIOCGIFFLAGS                   = 0xc0206911
	SIOCGIFGENERIC                 = 0xc020693a
	SIOCGIFGMEMB                   = 0xc028698a
	SIOCGIFGROUP                   = 0xc0286988
	SIOCGIFINDEX                   = 0xc0206920
	SIOCGIFMAC                     = 0xc0206926
	SIOCGIFMEDIA                   = 0xc0306938
	SIOCGIFMETRIC                  = 0xc0206917
	SIOCGIFMTU                     = 0xc0206933
	SIOCGIFNETMASK                 = 0xc0206925
	SIOCGIFPDSTADDR                = 0xc0206948
	SIOCGIFPHYS                    = 0xc0206935
	SIOCGIFPSRCADDR                = 0xc0206947
	SIOCGIFRSSHASH                 = 0xc0186997
	SIOCGIFRSSKEY                  = 0xc0946996
	SIOCGIFSTATUS                  = 0xc331693b
	SIOCGIFXMEDIA                  = 0xc030698b
	SIOCGLANPCP                    = 0xc0206998
	SIOCGLOWAT                     = 0x40047303
	SIOCGPGRP                      = 0x40047309
	SIOCGPRIVATE_0                 = 0xc0206950
	SIOCGPRIVATE_1                 = 0xc0206951
	SIOCGTUNFIB                    = 0xc020695e
	SIOCIFCREATE                   = 0xc020697a
	SIOCIFCREATE2                  = 0xc020697c
	SIOCIFDESTROY                  = 0x80206979
	SIOCIFGCLONERS                 = 0xc0106978
	SIOCSDRVSPEC                   = 0x8028697b
	SIOCSHIWAT                     = 0x80047300
	SIOCSIFADDR                    = 0x8020690c
	SIOCSIFBRDADDR                 = 0x80206913
	SIOCSIFCAP                     = 0x8020691e
	SIOCSIFDESCR                   = 0x80206929
	SIOCSIFDSTADDR                 = 0x8020690e
	SIOCSIFFIB                     = 0x8020695d
	SIOCSIFFLAGS                   = 0x80206910
	SIOCSIFGENERIC                 = 0x80206939
	SIOCSIFLLADDR                  = 0x8020693c
	SIOCSIFMAC                     = 0x80206927
	SIOCSIFMEDIA                   = 0xc0206937
	SIOCSIFMETRIC                  = 0x80206918
	SIOCSIFMTU                     = 0x80206934
	SIOCSIFNAME                    = 0x80206928
	SIOCSIFNETMASK                 = 0x80206916
	SIOCSIFPHYADDR                 = 0x80406946
	SIOCSIFPHYS                    = 0x80206936
	SIOCSIFRVNET                   = 0xc020695b
	SIOCSIFVNET                    = 0xc020695a
	SIOCSLANPCP                    = 0x80206999
	SIOCSLOWAT                     = 0x80047302
	SIOCSPGRP                      = 0x80047308
	SIOCSTUNFIB                    = 0x8020695f
	SOCK_CLOEXEC                   = 0x10000000
	SOCK_DGRAM                     = 0x2
	SOCK_MAXADDRLEN                = 0xff
	SOCK_NONBLOCK                  = 0x20000000
	SOCK_RAW                       = 0x3
	SOCK_RDM                       = 0x4
	SOCK_SEQPACKET                 = 0x5
	SOCK_STREAM                    = 0x1
	SOL_LOCAL                      = 0x0
	SOL_SOCKET                     = 0xffff
	SOMAXCONN                      = 0x80
	SO_ACCEPTCONN                  = 0x2
	SO_ACCEPTFILTER                = 0x1000
	SO_BINTIME                     = 0x2000
	SO_BROADCAST                   = 0x20
	SO_DEBUG                       = 0x1
	SO_DOMAIN                      = 0x1019
	SO_DONTROUTE                   = 0x10
	SO_ERROR                       = 0x1007
	SO_KEEPALIVE                   = 0x8
	SO_LABEL                       = 0x1009
	SO_LINGER                      = 0x80
	SO_LISTENINCQLEN               = 0x1013
	SO_LISTENQLEN                  = 0x1012
	SO_LISTENQLIMIT                = 0x1011
	SO_MAX_PACING_RATE             = 0x1018
	SO_NOSIGPIPE                   = 0x800
	SO_NO_DDP                      = 0x8000
	SO_NO_OFFLOAD                  = 0x4000
	SO_OOBINLINE                   = 0x100
	SO_PEERLABEL                   = 0x1010
	SO_PROTOCOL                    = 0x1016
	SO_PROTOTYPE                   = 0x1016
	SO_RCVBUF                      = 0x1002
	SO_RCVLOWAT                    = 0x1004
	SO_RCVTIMEO                    = 0x1006
	SO_RERROR                      = 0x20000
	SO_REUSEADDR                   = 0x4
	SO_REUSEPORT                   = 0x200
	SO_REUSEPORT_LB                = 0x10000
	SO_SETFIB                      = 0x1014
	SO_SNDBUF                      = 0x1001
	SO_SNDLOWAT                    = 0x1003
	SO_SNDTIMEO                    = 0x1005
	SO_TIMESTAMP                   = 0x400
	SO_TS_BINTIME                  = 0x1
	SO_TS_CLOCK                    = 0x1017
	SO_TS_CLOCK_MAX                = 0x3
	SO_TS_DEFAULT                  = 0x0
	SO_TS_MONOTONIC                = 0x3
	SO_TS_REALTIME                 = 0x2
	SO_TS_REALTIME_MICRO           = 0x0
	SO_TYPE                        = 0x1008
	SO_USELOOPBACK                 = 0x40
	SO_USER_COOKIE                 = 0x1015
	SO_VENDOR                      = 0x80000000
	S_BLKSIZE                      = 0x200
	S_IEXEC                        = 0x40
	S_IFBLK                        = 0x6000
	S_IFCHR                        = 0x2000
	S_IFDIR                        = 0x4000
	S_IFIFO                        = 0x1000
	S_IFLNK                        = 0xa000
	S_IFMT                         = 0xf000
	S_IFREG                        = 0x8000
	S_IFSOCK                       = 0xc000
	S_IFWHT                        = 0xe000
	S_IREAD                        = 0x100
	S_IRGRP                        = 0x20
	S_IROTH                        = 0x4
	S_IRUSR                        = 0x100
	S_IRWXG                        = 0x38
	S_IRWXO                        = 0x7
	S_IRWXU                        = 0x1c0
	S_ISGID                        = 0x400
	S_ISTXT                        = 0x200
	S_ISUID                        = 0x800
	S_ISVTX                        = 0x200
	S_IWGRP                        = 0x10
	S_IWOTH                        = 0x2
	S_IWRITE                       = 0x80
	S_IWUSR                        = 0x80
	S_IXGRP                        = 0x8
	S_IXOTH                        = 0x1
	S_IXUSR                        = 0x40
	TAB0                           = 0x0
	TAB3                           = 0x4
	TABDLY                         = 0x4
	TCIFLUSH                       = 0x1
	TCIOFF                         = 0x3
	TCIOFLUSH                      = 0x3
	TCION                          = 0x4
	TCOFLUSH                       = 0x2
	TCOOFF                         = 0x1
	TCOON                          = 0x2
	TCPOPT_EOL                     = 0x0
	TCPOPT_FAST_OPEN               = 0x22
	TCPOPT_MAXSEG                  = 0x2
	TCPOPT_NOP                     = 0x1
	TCPOPT_PAD                     = 0x0
	TCPOPT_SACK                    = 0x5
	TCPOPT_SACK_PERMITTED          = 0x4
	TCPOPT_SIGNATURE               = 0x13
	TCPOPT_TIMESTAMP               = 0x8
	TCPOPT_WINDOW                  = 0x3
	TCP_BBR_ACK_COMP_ALG           = 0x448
	TCP_BBR_ALGORITHM              = 0x43b
	TCP_BBR_DRAIN_INC_EXTRA        = 0x43c
	TCP_BBR_DRAIN_PG               = 0x42e
	TCP_BBR_EXTRA_GAIN             = 0x449
	TCP_BBR_EXTRA_STATE            = 0x453
	TCP_BBR_FLOOR_MIN_TSO          = 0x454
	TCP_BBR_HDWR_PACE              = 0x451
	TCP_BBR_HOLD_TARGET            = 0x436
	TCP_BBR_IWINTSO                = 0x42b
	TCP_BBR_LOWGAIN_FD             = 0x436
	TCP_BBR_LOWGAIN_HALF           = 0x435
	TCP_BBR_LOWGAIN_THRESH         = 0x434
	TCP_BBR_MAX_RTO                = 0x439
	TCP_BBR_MIN_RTO                = 0x438
	TCP_BBR_MIN_TOPACEOUT          = 0x455
	TCP_BBR_ONE_RETRAN             = 0x431
	TCP_BBR_PACE_CROSS             = 0x442
	TCP_BBR_PACE_DEL_TAR           = 0x43f
	TCP_BBR_PACE_OH                = 0x435
	TCP_BBR_PACE_PER_SEC           = 0x43e
	TCP_BBR_PACE_SEG_MAX           = 0x440
	TCP_BBR_PACE_SEG_MIN           = 0x441
	TCP_BBR_POLICER_DETECT         = 0x457
	TCP_BBR_PROBE_RTT_GAIN         = 0x44d
	TCP_BBR_PROBE_RTT_INT          = 0x430
	TCP_BBR_PROBE_RTT_LEN          = 0x44e
	TCP_BBR_RACK_INIT_RATE         = 0x458
	TCP_BBR_RACK_RTT_USE           = 0x44a
	TCP_BBR_RECFORCE               = 0x42c
	TCP_BBR_REC_OVER_HPTS          = 0x43a
	TCP_BBR_RETRAN_WTSO            = 0x44b
	TCP_BBR_RWND_IS_APP            = 0x42f
	TCP_BBR_SEND_IWND_IN_TSO       = 0x44f
	TCP_BBR_STARTUP_EXIT_EPOCH     = 0x43d
	TCP_BBR_STARTUP_LOSS_EXIT      = 0x432
	TCP_BBR_STARTUP_PG             = 0x42d
	TCP_BBR_TMR_PACE_OH            = 0x448
	TCP_BBR_TSLIMITS               = 0x434
	TCP_BBR_TSTMP_RAISES           = 0x456
	TCP_BBR_UNLIMITED              = 0x43b
	TCP_BBR_USEDEL_RATE            = 0x437
	TCP_BBR_USE_LOWGAIN            = 0x433
	TCP_BBR_USE_RACK_CHEAT         = 0x450
	TCP_BBR_USE_RACK_RR            = 0x450
	TCP_BBR_UTTER_MAX_TSO          = 0x452
	TCP_CA_NAME_MAX                = 0x10
	TCP_CCALGOOPT                  = 0x41
	TCP_CONGESTION                 = 0x40
	TCP_DATA_AFTER_CLOSE           = 0x44c
	TCP_DEFER_OPTIONS              = 0x470
	TCP_DELACK                     = 0x48
	TCP_FASTOPEN                   = 0x401
	TCP_FASTOPEN_MAX_COOKIE_LEN    = 0x10
	TCP_FASTOPEN_MIN_COOKIE_LEN    = 0x4
	TCP_FASTOPEN_PSK_LEN           = 0x10
	TCP_FAST_RSM_HACK              = 0x471
	TCP_FIN_IS_RST                 = 0x49
	TCP_FUNCTION_BLK               = 0x2000
	TCP_FUNCTION_NAME_LEN_MAX      = 0x20
	TCP_HDWR_RATE_CAP              = 0x46a
	TCP_HDWR_UP_ONLY               = 0x46c
	TCP_IDLE_REDUCE                = 0x46
	TCP_INFO                       = 0x20
	TCP_IWND_NB                    = 0x2b
	TCP_IWND_NSEG                  = 0x2c
	TCP_KEEPCNT                    = 0x400
	TCP_KEEPIDLE                   = 0x100
	TCP_KEEPINIT                   = 0x80
	TCP_KEEPINTVL                  = 0x200
	TCP_LOG                        = 0x22
	TCP_LOGBUF                     = 0x23
	TCP_LOGDUMP                    = 0x25
	TCP_LOGDUMPID                  = 0x26
	TCP_LOGID                      = 0x24
	TCP_LOGID_CNT                  = 0x2e
	TCP_LOG_ID_LEN                 = 0x40
	TCP_LOG_LIMIT                  = 0x4a
	TCP_LOG_TAG                    = 0x2f
	TCP_MAXBURST                   = 0x4
	TCP_MAXHLEN                    = 0x3c
	TCP_MAXOLEN                    = 0x28
	TCP_MAXPEAKRATE                = 0x45
	TCP_MAXSEG                     = 0x2
	TCP_MAXUNACKTIME               = 0x44
	TCP_MAXWIN                     = 0xffff
	TCP_MAX_SACK                   = 0x4
	TCP_MAX_WINSHIFT               = 0xe
	TCP_MD5SIG                     = 0x10
	TCP_MINMSS                     = 0xd8
	TCP_MSS                        = 0x218
	TCP_NODELAY                    = 0x1
	TCP_NOOPT                      = 0x8
	TCP_NOPUSH                     = 0x4
	TCP_NO_PRR                     = 0x462
	TCP_PACING_RATE_CAP            = 0x46b
	TCP_PCAP_IN                    = 0x1000
	TCP_PCAP_OUT                   = 0x800
	TCP_PERF_INFO                  = 0x4e
	TCP_PROC_ACCOUNTING            = 0x4c
	TCP_RACK_ABC_VAL               = 0x46d
	TCP_RACK_CHEAT_NOT_CONF_RATE   = 0x459
	TCP_RACK_DO_DETECTION          = 0x449
	TCP_RACK_EARLY_RECOV           = 0x423
	TCP_RACK_EARLY_SEG             = 0x424
	TCP_RACK_FORCE_MSEG            = 0x45d
	TCP_RACK_GP_INCREASE           = 0x446
	TCP_RACK_GP_INCREASE_CA        = 0x45a
	TCP_RACK_GP_INCREASE_REC       = 0x45c
	TCP_RACK_GP_INCREASE_SS        = 0x45b
	TCP_RACK_IDLE_REDUCE_HIGH      = 0x444
	TCP_RACK_MBUF_QUEUE            = 0x41a
	TCP_RACK_MEASURE_CNT           = 0x46f
	TCP_RACK_MIN_PACE              = 0x445
	TCP_RACK_MIN_PACE_SEG          = 0x446
	TCP_RACK_MIN_TO                = 0x422
	TCP_RACK_NONRXT_CFG_RATE       = 0x463
	TCP_RACK_NO_PUSH_AT_MAX        = 0x466
	TCP_RACK_PACE_ALWAYS           = 0x41f
	TCP_RACK_PACE_MAX_SEG          = 0x41e
	TCP_RACK_PACE_RATE_CA          = 0x45e
	TCP_RACK_PACE_RATE_REC         = 0x460
	TCP_RACK_PACE_RATE_SS          = 0x45f
	TCP_RACK_PACE_REDUCE           = 0x41d
	TCP_RACK_PACE_TO_FILL          = 0x467
	TCP_RACK_PACING_BETA           = 0x472
	TCP_RACK_PACING_BETA_ECN       = 0x473
	TCP_RACK_PKT_DELAY             = 0x428
	TCP_RACK_PROFILE               = 0x469
	TCP_RACK_PROP                  = 0x41b
	TCP_RACK_PROP_RATE             = 0x420
	TCP_RACK_PRR_SENDALOT          = 0x421
	TCP_RACK_REORD_FADE            = 0x426
	TCP_RACK_REORD_THRESH          = 0x425
	TCP_RACK_RR_CONF               = 0x459
	TCP_RACK_TIMER_SLOP            = 0x474
	TCP_RACK_TLP_INC_VAR           = 0x429
	TCP_RACK_TLP_REDUCE            = 0x41c
	TCP_RACK_TLP_THRESH            = 0x427
	TCP_RACK_TLP_USE               = 0x447
	TCP_REC_ABC_VAL                = 0x46e
	TCP_REMOTE_UDP_ENCAPS_PORT     = 0x47
	TCP_REUSPORT_LB_NUMA           = 0x402
	TCP_REUSPORT_LB_NUMA_CURDOM    = -0x1
	TCP_REUSPORT_LB_NUMA_NODOM     = -0x2
	TCP_RXTLS_ENABLE               = 0x29
	TCP_RXTLS_MODE                 = 0x2a
	TCP_SHARED_CWND_ALLOWED        = 0x4b
	TCP_SHARED_CWND_ENABLE         = 0x464
	TCP_SHARED_CWND_TIME_LIMIT     = 0x468
	TCP_STATS                      = 0x21
	TCP_TIMELY_DYN_ADJ             = 0x465
	TCP_TLS_MODE_IFNET             = 0x2
	TCP_TLS_MODE_NONE              = 0x0
	TCP_TLS_MODE_SW                = 0x1
	TCP_TLS_MODE_TOE               = 0x3
	TCP_TXTLS_ENABLE               = 0x27
	TCP_TXTLS_MODE                 = 0x28
	TCP_USER_LOG                   = 0x30
	TCP_USE_CMP_ACKS               = 0x4d
	TCP_VENDOR                     = 0x80000000
	TCSAFLUSH                      = 0x2
	TIMER_ABSTIME                  = 0x1
	TIMER_RELTIME                  = 0x0
	TIOCCBRK                       = 0x2000747a
	TIOCCDTR                       = 0x20007478
	TIOCCONS                       = 0x80047462
	TIOCDRAIN                      = 0x2000745e
	TIOCEXCL                       = 0x2000740d
	TIOCEXT                        = 0x80047460
	TIOCFLUSH                      = 0x80047410
	TIOCGDRAINWAIT                 = 0x40047456
	TIOCGETA                       = 0x402c7413
	TIOCGETD                       = 0x4004741a
	TIOCGPGRP                      = 0x40047477
	TIOCGPTN                       = 0x4004740f
	TIOCGSID                       = 0x40047463
	TIOCGWINSZ                     = 0x40087468
	TIOCMBIC                       = 0x8004746b
	TIOCMBIS                       = 0x8004746c
	TIOCMGDTRWAIT                  = 0x4004745a
	TIOCMGET                       = 0x4004746a
	TIOCMSDTRWAIT                  = 0x8004745b
	TIOCMSET                       = 0x8004746d
	TIOCM_CAR                      = 0x40
	TIOCM_CD                       = 0x40
	TIOCM_CTS                      = 0x20
	TIOCM_DCD                      = 0x40
	TIOCM_DSR                      = 0x100
	TIOCM_DTR                      = 0x2
	TIOCM_LE                       = 0x1
	TIOCM_RI                       = 0x80
	TIOCM_RNG                      = 0x80
	TIOCM_RTS                      = 0x4
	TIOCM_SR                       = 0x10
	TIOCM_ST                       = 0x8
	TIOCNOTTY                      = 0x20007471
	TIOCNXCL                       = 0x2000740e
	TIOCOUTQ                       = 0x40047473
	TIOCPKT                        = 0x80047470
	TIOCPKT_DATA                   = 0x0
	TIOCPKT_DOSTOP                 = 0x20
	TIOCPKT_FLUSHREAD              = 0x1
	TIOCPKT_FLUSHWRITE             = 0x2
	TIOCPKT_IOCTL                  = 0x40
	TIOCPKT_NOSTOP                 = 0x10
	TIOCPKT_START                  = 0x8
	TIOCPKT_STOP                   = 0x4
	TIOCPTMASTER                   = 0x2000741c
	TIOCSBRK                       = 0x2000747b
	TIOCSCTTY                      = 0x20007461
	TIOCSDRAINWAIT                 = 0x80047457
	TIOCSDTR                       = 0x20007479
	TIOCSETA                       = 0x802c7414
	TIOCSETAF                      = 0x802c7416
	TIOCSETAW                      = 0x802c7415
	TIOCSETD                       = 0x8004741b
	TIOCSIG                        = 0x2004745f
	TIOCSPGRP                      = 0x80047476
	TIOCSTART                      = 0x2000746e
	TIOCSTAT                       = 0x20007465
	TIOCSTI                        = 0x80017472
	TIOCSTOP                       = 0x2000746f
	TIOCSWINSZ                     = 0x80087467
	TIOCTIMESTAMP                  = 0x40107459
	TIOCUCNTL                      = 0x80047466
	TOSTOP                         = 0x400000
	UTIME_NOW                      = -0x1
	UTIME_OMIT                     = -0x2
	VDISCARD                       = 0xf
	VDSUSP                         = 0xb
	VEOF                           = 0x0
	VEOL                           = 0x1
	VEOL2                          = 0x2
	VERASE                         = 0x3
	VERASE2                        = 0x7
	VINTR                          = 0x8
	VKILL                          = 0x5
	VLNEXT                         = 0xe
	VMIN                           = 0x10
	VQUIT                          = 0x9
	VREPRINT                       = 0x6
	VSTART                         = 0xc
	VSTATUS                        = 0x12
	VSTOP                          = 0xd
	VSUSP                          = 0xa
	VTIME                          = 0x11
	VWERASE                        = 0x4
	WCONTINUED                     = 0x4
	WCOREFLAG                      = 0x80
	WEXITED                        = 0x10
	WLINUXCLONE                    = 0x80000000
	WNOHANG                        = 0x1
	WNOWAIT                        = 0x8
	WSTOPPED                       = 0x2
	WTRAPPED                       = 0x20
	WUNTRACED                      = 0x2
)

// Errors
const (
	E2BIG           = syscall.Errno(0x7)
	EACCES          = syscall.Errno(0xd)
	EADDRINUSE      = syscall.Errno(0x30)
	EADDRNOTAVAIL   = syscall.Errno(0x31)
	EAFNOSUPPORT    = syscall.Errno(0x2f)
	EAGAIN          = syscall.Errno(0x23)
	EALREADY        = syscall.Errno(0x25)
	EAUTH           = syscall.Errno(0x50)
	EBADF           = syscall.Errno(0x9)
	EBADMSG         = syscall.Errno(0x59)
	EBADRPC         = syscall.Errno(0x48)
	EBUSY           = syscall.Errno(0x10)
	ECANCELED       = syscall.Errno(0x55)
	ECAPMODE        = syscall.Errno(0x5e)
	ECHILD          = syscall.Errno(0xa)
	ECONNABORTED    = syscall.Errno(0x35)
	ECONNREFUSED    = syscall.Errno(0x3d)
	ECONNRESET      = syscall.Errno(0x36)
	EDEADLK         = syscall.Errno(0xb)
	EDESTADDRREQ    = syscall.Errno(0x27)
	EDOM            = syscall.Errno(0x21)
	EDOOFUS         = syscall.Errno(0x58)
	EDQUOT          = syscall.Errno(0x45)
	EEXIST          = syscall.Errno(0x11)
	EFAULT          = syscall.Errno(0xe)
	EFBIG           = syscall.Errno(0x1b)
	EFTYPE          = syscall.Errno(0x4f)
	EHOSTDOWN       = syscall.Errno(0x40)
	EHOSTUNREACH    = syscall.Errno(0x41)
	EIDRM           = syscall.Errno(0x52)
	EILSEQ          = syscall.Errno(0x56)
	EINPROGRESS     = syscall.Errno(0x24)
	EINTEGRITY      = syscall.Errno(0x61)
	EINTR           = syscall.Errno(0x4)
	EINVAL          = syscall.Errno(0x16)
	EIO             = syscall.Errno(0x5)
	EISCONN         = syscall.Errno(0x38)
	EISDIR          = syscall.Errno(0x15)
	ELAST           = syscall.Errno(0x61)
	ELOOP           = syscall.Errno(0x3e)
	EMFILE          = syscall.Errno(0x18)
	EMLINK          = syscall.Errno(0x1f)
	EMSGSIZE        = syscall.Errno(0x28)
	EMULTIHOP       = syscall.Errno(0x5a)
	ENAMETOOLONG    = syscall.Errno(0x3f)
	ENEEDAUTH       = syscall.Errno(0x51)
	ENETDOWN        = syscall.Errno(0x32)
	ENETRESET       = syscall.Errno(0x34)
	ENETUNREACH     = syscall.Errno(0x33)
	ENFILE          = syscall.Errno(0x17)
	ENOATTR         = syscall.Errno(0x57)
	ENOBUFS         = syscall.Errno(0x37)
	ENODEV          = syscall.Errno(0x13)
	ENOENT          = syscall.Errno(0x2)
	ENOEXEC         = syscall.Errno(0x8)
	ENOLCK          = syscall.Errno(0x4d)
	ENOLINK         = syscall.Errno(0x5b)
	ENOMEM          = syscall.Errno(0xc)
	ENOMSG          = syscall.Errno(0x53)
	ENOPROTOOPT     = syscall.Errno(0x2a)
	ENOSPC          = syscall.Errno(0x1c)
	ENOSYS          = syscall.Errno(0x4e)
	ENOTBLK         = syscall.Errno(0xf)
	ENOTCAPABLE     = syscall.Errno(0x5d)
	ENOTCONN        = syscall.Errno(0x39)
	ENOTDIR         = syscall.Errno(0x14)
	ENOTEMPTY       = syscall.Errno(0x42)
	ENOTRECOVERABLE = syscall.Errno(0x5f)
	ENOTSOCK        = syscall.Errno(0x26)
	ENOTSUP         = syscall.Errno(0x2d)
	ENOTTY          = syscall.Errno(0x19)
	ENXIO           = syscall.Errno(0x6)
	EOPNOTSUPP      = syscall.Errno(0x2d)
	EOVERFLOW       = syscall.Errno(0x54)
	EOWNERDEAD      = syscall.Errno(0x60)
	EPERM           = syscall.Errno(0x1)
	EPFNOSUPPORT    = syscall.Errno(0x2e)
	EPIPE           = syscall.Errno(0x20)
	EPROCLIM        = syscall.Errno(0x43)
	EPROCUNAVAIL    = syscall.Errno(0x4c)
	EPROGMISMATCH   = syscall.Errno(0x4b)
	EPROGUNAVAIL    = syscall.Errno(0x4a)
	EPROTO          = syscall.Errno(0x5c)
	EPROTONOSUPPORT = syscall.Errno(0x2b)
	EPROTOTYPE      = syscall.Errno(0x29)
	ERANGE          = syscall.Errno(0x22)
	EREMOTE         = syscall.Errno(0x47)
	EROFS           = syscall.Errno(0x1e)
	ERPCMISMATCH    = syscall.Errno(0x49)
	ESHUTDOWN       = syscall.Errno(0x3a)
	ESOCKTNOSUPPORT = syscall.Errno(0x2c)
	ESPIPE          = syscall.Errno(0x1d)
	ESRCH           = syscall.Errno(0x3)
	ESTALE          = syscall.Errno(0x46)
	ETIMEDOUT       = syscall.Errno(0x3c)
	ETOOMANYREFS    = syscall.Errno(0x3b)
	ETXTBSY         = syscall.Errno(0x1a)
	EUSERS          = syscall.Errno(0x44)
	EWOULDBLOCK     = syscall.Errno(0x23)
	EXDEV           = syscall.Errno(0x12)
)

// Signals
const (
	SIGABRT   = syscall.Signal(0x6)
	SIGALRM   = syscall.Signal(0xe)
	SIGBUS    = syscall.Signal(0xa)
	SIGCHLD   = syscall.Signal(0x14)
	SIGCONT   = syscall.Signal(0x13)
	SIGEMT    = syscall.Signal(0x7)
	SIGFPE    = syscall.Signal(0x8)
	SIGHUP    = syscall.Signal(0x1)
	SIGILL    = syscall.Signal(0x4)
	SIGINFO   = syscall.Signal(0x1d)
	SIGINT    = syscall.Signal(0x2)
	SIGIO     = syscall.Signal(0x17)
	SIGIOT    = syscall.Signal(0x6)
	SIGKILL   = syscall.Signal(0x9)
	SIGLIBRT  = syscall.Signal(0x21)
	SIGLWP    = syscall.Signal(0x20)
	SIGPIPE   = syscall.Signal(0xd)
	SIGPROF   = syscall.Signal(0x1b)
	SIGQUIT   = syscall.Signal(0x3)
	SIGSEGV   = syscall.Signal(0xb)
	SIGSTOP   = syscall.Signal(0x11)
	SIGSYS    = syscall.Signal(0xc)
	SIGTERM   = syscall.Signal(0xf)
	SIGTHR    = syscall.Signal(0x20)
	SIGTRAP   = syscall.Signal(0x5)
	SIGTSTP   = syscall.Signal(0x12)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x10)
	SIGUSR1   = syscall.Signal(0x1e)
	SIGUSR2   = syscall.Signal(0x1f)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "device not configured"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EDEADLK", "resource deadlock avoided"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "cross-device link"},
	{19, "ENODEV", "operation not supported by device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "result too large"},
	{35, "EWOULDBLOCK", "resource temporarily unavailable"},
	{36, "EINPROGRESS", "operation now in progress"},
	{37, "EALREADY", "operation already in progress"},
	{38, "ENOTSOCK", "socket operation on non-socket"},
	{39, "EDESTADDRREQ", "destination address required"},
	{40, "EMSGSIZE", "message too long"},
	{41, "EPROTOTYPE", "protocol wrong type for socket"},
	{42, "ENOPROTOOPT", "protocol not available"},
	{43, "EPROTONOSUPPORT", "protocol not supported"},
	{44, "ESOCKTNOSUPPORT", "socket type not supported"},
	{45, "EOPNOTSUPP", "operation not supported"},
	{46, "EPFNOSUPPORT", "protocol family not supported"},
	{47, "EAFNOSUPPORT", "address family not supported by protocol family"},
	{48, "EADDRINUSE", "address already in use"},
	{49, "EADDRNOTAVAIL", "can't assign requested address"},
	{50, "ENETDOWN", "network is down"},
	{51, "ENETUNREACH", "network is unreachable"},
	{52, "ENETRESET", "network dropped connection on reset"},
	{53, "ECONNABORTED", "software caused connection abort"},
	{54, "ECONNRESET", "connection reset by peer"},
	{55, "ENOBUFS", "no buffer space available"},
	{56, "EISCONN", "socket is already connected"},
	{57, "ENOTCONN", "socket is not connected"},
	{58, "ESHUTDOWN", "can't send after socket shutdown"},
	{59, "ETOOMANYREFS", "too many references: can't splice"},
	{60, "ETIMEDOUT", "operation timed out"},
	{61, "ECONNREFUSED", "connection refused"},
	{62, "ELOOP", "too many levels of symbolic links"},
	{63, "ENAMETOOLONG", "file name too long"},
	{64, "EHOSTDOWN", "host is down"},
	{65, "EHOSTUNREACH", "no route to host"},
	{66, "ENOTEMPTY", "directory not empty"},
	{67, "EPROCLIM", "too many processes"},
	{68, "EUSERS", "too many users"},
	{69, "EDQUOT", "disc quota exceeded"},
	{70, "ESTALE", "stale NFS file handle"},
	{71, "EREMOTE", "too many levels of remote in path"},
	{72, "EBADRPC", "RPC struct is bad"},
	{73, "ERPCMISMATCH", "RPC version wrong"},
	{74, "EPROGUNAVAIL", "RPC prog. not avail"},
	{75, "EPROGMISMATCH", "program version wrong"},
	{76, "EPROCUNAVAIL", "bad procedure for program"},
	{77, "ENOLCK", "no locks available"},
	{78, "ENOSYS", "function not implemented"},
	{79, "EFTYPE", "inappropriate file type or format"},
	{80, "EAUTH", "authentication error"},
	{81, "ENEEDAUTH", "need authenticator"},
	{82, "EIDRM", "identifier removed"},
	{83, "ENOMSG", "no message of desired type"},
	{84, "EOVERFLOW", "value too large to be stored in data type"},
	{85, "ECANCELED", "operation canceled"},
	{86, "EILSEQ", "illegal byte sequence"},
	{87, "ENOATTR", "attribute not found"},
	{88, "EDOOFUS", "programming error"},
	{89, "EBADMSG", "bad message"},
	{90, "EMULTIHOP", "multihop attempted"},
	{91, "ENOLINK", "link has been severed"},
	{92, "EPROTO", "protocol error"},
	{93, "ENOTCAPABLE", "capabilities insufficient"},
	{94, "ECAPMODE", "not permitted in capability mode"},
	{95, "ENOTRECOVERABLE", "state not recoverable"},
	{96, "EOWNERDEAD", "previous owner died"},
	{97, "EINTEGRITY", "integrity check failed"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/BPT trap"},
	{6, "SIGIOT", "abort trap"},
	{7, "SIGEMT", "EMT trap"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus error"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGSYS", "bad system call"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGURG", "urgent I/O condition"},
	{17, "SIGSTOP", "suspended (signal)"},
	{18, "SIGTSTP", "suspended"},
	{19, "SIGCONT", "continued"},
	{20, "SIGCHLD", "child exited"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGIO", "I/O possible"},
	{24, "SIGXCPU", "cputime limit exceeded"},
	{25, "SIGXFSZ", "filesize limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window size changes"},
	{29, "SIGINFO", "information request"},
	{30, "SIGUSR1", "user defined signal 1"},
	{31, "SIGUSR2", "user defined signal 2"},
	{32, "SIGTHR", "unknown signal"},
	{33, "SIGLIBRT", "unknown signal"},
}
   07070100000E2A000081A4000000000000000000000001645E367C0002C48D000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_linux.go // Code generated by mkmerge; DO NOT EDIT.

//go:build linux
// +build linux

package unix

import "syscall"

const (
	AAFS_MAGIC                                  = 0x5a3c69f0
	ADFS_SUPER_MAGIC                            = 0xadf5
	AFFS_SUPER_MAGIC                            = 0xadff
	AFS_FS_MAGIC                                = 0x6b414653
	AFS_SUPER_MAGIC                             = 0x5346414f
	AF_ALG                                      = 0x26
	AF_APPLETALK                                = 0x5
	AF_ASH                                      = 0x12
	AF_ATMPVC                                   = 0x8
	AF_ATMSVC                                   = 0x14
	AF_AX25                                     = 0x3
	AF_BLUETOOTH                                = 0x1f
	AF_BRIDGE                                   = 0x7
	AF_CAIF                                     = 0x25
	AF_CAN                                      = 0x1d
	AF_DECnet                                   = 0xc
	AF_ECONET                                   = 0x13
	AF_FILE                                     = 0x1
	AF_IB                                       = 0x1b
	AF_IEEE802154                               = 0x24
	AF_INET                                     = 0x2
	AF_INET6                                    = 0xa
	AF_IPX                                      = 0x4
	AF_IRDA                                     = 0x17
	AF_ISDN                                     = 0x22
	AF_IUCV                                     = 0x20
	AF_KCM                                      = 0x29
	AF_KEY                                      = 0xf
	AF_LLC                                      = 0x1a
	AF_LOCAL                                    = 0x1
	AF_MAX                                      = 0x2e
	AF_MCTP                                     = 0x2d
	AF_MPLS                                     = 0x1c
	AF_NETBEUI                                  = 0xd
	AF_NETLINK                                  = 0x10
	AF_NETROM                                   = 0x6
	AF_NFC                                      = 0x27
	AF_PACKET                                   = 0x11
	AF_PHONET                                   = 0x23
	AF_PPPOX                                    = 0x18
	AF_QIPCRTR                                  = 0x2a
	AF_RDS                                      = 0x15
	AF_ROSE                                     = 0xb
	AF_ROUTE                                    = 0x10
	AF_RXRPC                                    = 0x21
	AF_SECURITY                                 = 0xe
	AF_SMC                                      = 0x2b
	AF_SNA                                      = 0x16
	AF_TIPC                                     = 0x1e
	AF_UNIX                                     = 0x1
	AF_UNSPEC                                   = 0x0
	AF_VSOCK                                    = 0x28
	AF_WANPIPE                                  = 0x19
	AF_X25                                      = 0x9
	AF_XDP                                      = 0x2c
	ALG_OP_DECRYPT                              = 0x0
	ALG_OP_ENCRYPT                              = 0x1
	ALG_SET_AEAD_ASSOCLEN                       = 0x4
	ALG_SET_AEAD_AUTHSIZE                       = 0x5
	ALG_SET_DRBG_ENTROPY                        = 0x6
	ALG_SET_IV                                  = 0x2
	ALG_SET_KEY                                 = 0x1
	ALG_SET_KEY_BY_KEY_SERIAL                   = 0x7
	ALG_SET_OP                                  = 0x3
	ANON_INODE_FS_MAGIC                         = 0x9041934
	ARPHRD_6LOWPAN                              = 0x339
	ARPHRD_ADAPT                                = 0x108
	ARPHRD_APPLETLK                             = 0x8
	ARPHRD_ARCNET                               = 0x7
	ARPHRD_ASH                                  = 0x30d
	ARPHRD_ATM                                  = 0x13
	ARPHRD_AX25                                 = 0x3
	ARPHRD_BIF                                  = 0x307
	ARPHRD_CAIF                                 = 0x336
	ARPHRD_CAN                                  = 0x118
	ARPHRD_CHAOS                                = 0x5
	ARPHRD_CISCO                                = 0x201
	ARPHRD_CSLIP                                = 0x101
	ARPHRD_CSLIP6                               = 0x103
	ARPHRD_DDCMP                                = 0x205
	ARPHRD_DLCI                                 = 0xf
	ARPHRD_ECONET                               = 0x30e
	ARPHRD_EETHER                               = 0x2
	ARPHRD_ETHER                                = 0x1
	ARPHRD_EUI64                                = 0x1b
	ARPHRD_FCAL                                 = 0x311
	ARPHRD_FCFABRIC                             = 0x313
	ARPHRD_FCPL                                 = 0x312
	ARPHRD_FCPP                                 = 0x310
	ARPHRD_FDDI                                 = 0x306
	ARPHRD_FRAD                                 = 0x302
	ARPHRD_HDLC                                 = 0x201
	ARPHRD_HIPPI                                = 0x30c
	ARPHRD_HWX25                                = 0x110
	ARPHRD_IEEE1394                             = 0x18
	ARPHRD_IEEE802                              = 0x6
	ARPHRD_IEEE80211                            = 0x321
	ARPHRD_IEEE80211_PRISM                      = 0x322
	ARPHRD_IEEE80211_RADIOTAP                   = 0x323
	ARPHRD_IEEE802154                           = 0x324
	ARPHRD_IEEE802154_MONITOR                   = 0x325
	ARPHRD_IEEE802_TR                           = 0x320
	ARPHRD_INFINIBAND                           = 0x20
	ARPHRD_IP6GRE                               = 0x337
	ARPHRD_IPDDP                                = 0x309
	ARPHRD_IPGRE                                = 0x30a
	ARPHRD_IRDA                                 = 0x30f
	ARPHRD_LAPB                                 = 0x204
	ARPHRD_LOCALTLK                             = 0x305
	ARPHRD_LOOPBACK                             = 0x304
	ARPHRD_MCTP                                 = 0x122
	ARPHRD_METRICOM                             = 0x17
	ARPHRD_NETLINK                              = 0x338
	ARPHRD_NETROM                               = 0x0
	ARPHRD_NONE                                 = 0xfffe
	ARPHRD_PHONET                               = 0x334
	ARPHRD_PHONET_PIPE                          = 0x335
	ARPHRD_PIMREG                               = 0x30b
	ARPHRD_PPP                                  = 0x200
	ARPHRD_PRONET                               = 0x4
	ARPHRD_RAWHDLC                              = 0x206
	ARPHRD_RAWIP                                = 0x207
	ARPHRD_ROSE                                 = 0x10e
	ARPHRD_RSRVD                                = 0x104
	ARPHRD_SIT                                  = 0x308
	ARPHRD_SKIP                                 = 0x303
	ARPHRD_SLIP                                 = 0x100
	ARPHRD_SLIP6                                = 0x102
	ARPHRD_TUNNEL                               = 0x300
	ARPHRD_TUNNEL6                              = 0x301
	ARPHRD_VOID                                 = 0xffff
	ARPHRD_VSOCKMON                             = 0x33a
	ARPHRD_X25                                  = 0x10f
	AUDIT_ADD                                   = 0x3eb
	AUDIT_ADD_RULE                              = 0x3f3
	AUDIT_ALWAYS                                = 0x2
	AUDIT_ANOM_ABEND                            = 0x6a5
	AUDIT_ANOM_CREAT                            = 0x6a7
	AUDIT_ANOM_LINK                             = 0x6a6
	AUDIT_ANOM_PROMISCUOUS                      = 0x6a4
	AUDIT_ARCH                                  = 0xb
	AUDIT_ARCH_AARCH64                          = 0xc00000b7
	AUDIT_ARCH_ALPHA                            = 0xc0009026
	AUDIT_ARCH_ARCOMPACT                        = 0x4000005d
	AUDIT_ARCH_ARCOMPACTBE                      = 0x5d
	AUDIT_ARCH_ARCV2                            = 0x400000c3
	AUDIT_ARCH_ARCV2BE                          = 0xc3
	AUDIT_ARCH_ARM                              = 0x40000028
	AUDIT_ARCH_ARMEB                            = 0x28
	AUDIT_ARCH_C6X                              = 0x4000008c
	AUDIT_ARCH_C6XBE                            = 0x8c
	AUDIT_ARCH_CRIS                             = 0x4000004c
	AUDIT_ARCH_CSKY                             = 0x400000fc
	AUDIT_ARCH_FRV                              = 0x5441
	AUDIT_ARCH_H8300                            = 0x2e
	AUDIT_ARCH_HEXAGON                          = 0xa4
	AUDIT_ARCH_I386                             = 0x40000003
	AUDIT_ARCH_IA64                             = 0xc0000032
	AUDIT_ARCH_LOONGARCH32                      = 0x40000102
	AUDIT_ARCH_LOONGARCH64                      = 0xc0000102
	AUDIT_ARCH_M32R                             = 0x58
	AUDIT_ARCH_M68K                             = 0x4
	AUDIT_ARCH_MICROBLAZE                       = 0xbd
	AUDIT_ARCH_MIPS                             = 0x8
	AUDIT_ARCH_MIPS64                           = 0x80000008
	AUDIT_ARCH_MIPS64N32                        = 0xa0000008
	AUDIT_ARCH_MIPSEL                           = 0x40000008
	AUDIT_ARCH_MIPSEL64                         = 0xc0000008
	AUDIT_ARCH_MIPSEL64N32                      = 0xe0000008
	AUDIT_ARCH_NDS32                            = 0x400000a7
	AUDIT_ARCH_NDS32BE                          = 0xa7
	AUDIT_ARCH_NIOS2                            = 0x40000071
	AUDIT_ARCH_OPENRISC                         = 0x5c
	AUDIT_ARCH_PARISC                           = 0xf
	AUDIT_ARCH_PARISC64                         = 0x8000000f
	AUDIT_ARCH_PPC                              = 0x14
	AUDIT_ARCH_PPC64                            = 0x80000015
	AUDIT_ARCH_PPC64LE                          = 0xc0000015
	AUDIT_ARCH_RISCV32                          = 0x400000f3
	AUDIT_ARCH_RISCV64                          = 0xc00000f3
	AUDIT_ARCH_S390                             = 0x16
	AUDIT_ARCH_S390X                            = 0x80000016
	AUDIT_ARCH_SH                               = 0x2a
	AUDIT_ARCH_SH64                             = 0x8000002a
	AUDIT_ARCH_SHEL                             = 0x4000002a
	AUDIT_ARCH_SHEL64                           = 0xc000002a
	AUDIT_ARCH_SPARC                            = 0x2
	AUDIT_ARCH_SPARC64                          = 0x8000002b
	AUDIT_ARCH_TILEGX                           = 0xc00000bf
	AUDIT_ARCH_TILEGX32                         = 0x400000bf
	AUDIT_ARCH_TILEPRO                          = 0x400000bc
	AUDIT_ARCH_UNICORE                          = 0x4000006e
	AUDIT_ARCH_X86_64                           = 0xc000003e
	AUDIT_ARCH_XTENSA                           = 0x5e
	AUDIT_ARG0                                  = 0xc8
	AUDIT_ARG1                                  = 0xc9
	AUDIT_ARG2                                  = 0xca
	AUDIT_ARG3                                  = 0xcb
	AUDIT_AVC                                   = 0x578
	AUDIT_AVC_PATH                              = 0x57a
	AUDIT_BITMASK_SIZE                          = 0x40
	AUDIT_BIT_MASK                              = 0x8000000
	AUDIT_BIT_TEST                              = 0x48000000
	AUDIT_BPF                                   = 0x536
	AUDIT_BPRM_FCAPS                            = 0x529
	AUDIT_CAPSET                                = 0x52a
	AUDIT_CLASS_CHATTR                          = 0x2
	AUDIT_CLASS_CHATTR_32                       = 0x3
	AUDIT_CLASS_DIR_WRITE                       = 0x0
	AUDIT_CLASS_DIR_WRITE_32                    = 0x1
	AUDIT_CLASS_READ                            = 0x4
	AUDIT_CLASS_READ_32                         = 0x5
	AUDIT_CLASS_SIGNAL                          = 0x8
	AUDIT_CLASS_SIGNAL_32                       = 0x9
	AUDIT_CLASS_WRITE                           = 0x6
	AUDIT_CLASS_WRITE_32                        = 0x7
	AUDIT_COMPARE_AUID_TO_EUID                  = 0x10
	AUDIT_COMPARE_AUID_TO_FSUID                 = 0xe
	AUDIT_COMPARE_AUID_TO_OBJ_UID               = 0x5
	AUDIT_COMPARE_AUID_TO_SUID                  = 0xf
	AUDIT_COMPARE_EGID_TO_FSGID                 = 0x17
	AUDIT_COMPARE_EGID_TO_OBJ_GID               = 0x4
	AUDIT_COMPARE_EGID_TO_SGID                  = 0x18
	AUDIT_COMPARE_EUID_TO_FSUID                 = 0x12
	AUDIT_COMPARE_EUID_TO_OBJ_UID               = 0x3
	AUDIT_COMPARE_EUID_TO_SUID                  = 0x11
	AUDIT_COMPARE_FSGID_TO_OBJ_GID              = 0x9
	AUDIT_COMPARE_FSUID_TO_OBJ_UID              = 0x8
	AUDIT_COMPARE_GID_TO_EGID                   = 0x14
	AUDIT_COMPARE_GID_TO_FSGID                  = 0x15
	AUDIT_COMPARE_GID_TO_OBJ_GID                = 0x2
	AUDIT_COMPARE_GID_TO_SGID                   = 0x16
	AUDIT_COMPARE_SGID_TO_FSGID                 = 0x19
	AUDIT_COMPARE_SGID_TO_OBJ_GID               = 0x7
	AUDIT_COMPARE_SUID_TO_FSUID                 = 0x13
	AUDIT_COMPARE_SUID_TO_OBJ_UID               = 0x6
	AUDIT_COMPARE_UID_TO_AUID                   = 0xa
	AUDIT_COMPARE_UID_TO_EUID                   = 0xb
	AUDIT_COMPARE_UID_TO_FSUID                  = 0xc
	AUDIT_COMPARE_UID_TO_OBJ_UID                = 0x1
	AUDIT_COMPARE_UID_TO_SUID                   = 0xd
	AUDIT_CONFIG_CHANGE                         = 0x519
	AUDIT_CWD                                   = 0x51b
	AUDIT_DAEMON_ABORT                          = 0x4b2
	AUDIT_DAEMON_CONFIG                         = 0x4b3
	AUDIT_DAEMON_END                            = 0x4b1
	AUDIT_DAEMON_START                          = 0x4b0
	AUDIT_DEL                                   = 0x3ec
	AUDIT_DEL_RULE                              = 0x3f4
	AUDIT_DEVMAJOR                              = 0x64
	AUDIT_DEVMINOR                              = 0x65
	AUDIT_DIR                                   = 0x6b
	AUDIT_DM_CTRL                               = 0x53a
	AUDIT_DM_EVENT                              = 0x53b
	AUDIT_EGID                                  = 0x6
	AUDIT_EOE                                   = 0x528
	AUDIT_EQUAL                                 = 0x40000000
	AUDIT_EUID                                  = 0x2
	AUDIT_EVENT_LISTENER                        = 0x537
	AUDIT_EXE                                   = 0x70
	AUDIT_EXECVE                                = 0x51d
	AUDIT_EXIT                                  = 0x67
	AUDIT_FAIL_PANIC                            = 0x2
	AUDIT_FAIL_PRINTK                           = 0x1
	AUDIT_FAIL_SILENT                           = 0x0
	AUDIT_FANOTIFY                              = 0x533
	AUDIT_FD_PAIR                               = 0x525
	AUDIT_FEATURE_BITMAP_ALL                    = 0x7f
	AUDIT_FEATURE_BITMAP_BACKLOG_LIMIT          = 0x1
	AUDIT_FEATURE_BITMAP_BACKLOG_WAIT_TIME      = 0x2
	AUDIT_FEATURE_BITMAP_EXCLUDE_EXTEND         = 0x8
	AUDIT_FEATURE_BITMAP_EXECUTABLE_PATH        = 0x4
	AUDIT_FEATURE_BITMAP_FILTER_FS              = 0x40
	AUDIT_FEATURE_BITMAP_LOST_RESET             = 0x20
	AUDIT_FEATURE_BITMAP_SESSIONID_FILTER       = 0x10
	AUDIT_FEATURE_CHANGE                        = 0x530
	AUDIT_FEATURE_LOGINUID_IMMUTABLE            = 0x1
	AUDIT_FEATURE_ONLY_UNSET_LOGINUID           = 0x0
	AUDIT_FEATURE_VERSION                       = 0x1
	AUDIT_FIELD_COMPARE                         = 0x6f
	AUDIT_FILETYPE                              = 0x6c
	AUDIT_FILTERKEY                             = 0xd2
	AUDIT_FILTER_ENTRY                          = 0x2
	AUDIT_FILTER_EXCLUDE                        = 0x5
	AUDIT_FILTER_EXIT                           = 0x4
	AUDIT_FILTER_FS                             = 0x6
	AUDIT_FILTER_PREPEND                        = 0x10
	AUDIT_FILTER_TASK                           = 0x1
	AUDIT_FILTER_TYPE                           = 0x5
	AUDIT_FILTER_URING_EXIT                     = 0x7
	AUDIT_FILTER_USER                           = 0x0
	AUDIT_FILTER_WATCH                          = 0x3
	AUDIT_FIRST_KERN_ANOM_MSG                   = 0x6a4
	AUDIT_FIRST_USER_MSG                        = 0x44c
	AUDIT_FIRST_USER_MSG2                       = 0x834
	AUDIT_FSGID                                 = 0x8
	AUDIT_FSTYPE                                = 0x1a
	AUDIT_FSUID                                 = 0x4
	AUDIT_GET                                   = 0x3e8
	AUDIT_GET_FEATURE                           = 0x3fb
	AUDIT_GID                                   = 0x5
	AUDIT_GREATER_THAN                          = 0x20000000
	AUDIT_GREATER_THAN_OR_EQUAL                 = 0x60000000
	AUDIT_INODE                                 = 0x66
	AUDIT_INTEGRITY_DATA                        = 0x708
	AUDIT_INTEGRITY_EVM_XATTR                   = 0x70e
	AUDIT_INTEGRITY_HASH                        = 0x70b
	AUDIT_INTEGRITY_METADATA                    = 0x709
	AUDIT_INTEGRITY_PCR                         = 0x70c
	AUDIT_INTEGRITY_POLICY_RULE                 = 0x70f
	AUDIT_INTEGRITY_RULE                        = 0x70d
	AUDIT_INTEGRITY_STATUS                      = 0x70a
	AUDIT_IPC                                   = 0x517
	AUDIT_IPC_SET_PERM                          = 0x51f
	AUDIT_KERNEL                                = 0x7d0
	AUDIT_KERNEL_OTHER                          = 0x524
	AUDIT_KERN_MODULE                           = 0x532
	AUDIT_LAST_FEATURE                          = 0x1
	AUDIT_LAST_KERN_ANOM_MSG                    = 0x707
	AUDIT_LAST_USER_MSG                         = 0x4af
	AUDIT_LAST_USER_MSG2                        = 0xbb7
	AUDIT_LESS_THAN                             = 0x10000000
	AUDIT_LESS_THAN_OR_EQUAL                    = 0x50000000
	AUDIT_LIST                                  = 0x3ea
	AUDIT_LIST_RULES                            = 0x3f5
	AUDIT_LOGIN                                 = 0x3ee
	AUDIT_LOGINUID                              = 0x9
	AUDIT_LOGINUID_SET                          = 0x18
	AUDIT_MAC_CALIPSO_ADD                       = 0x58a
	AUDIT_MAC_CALIPSO_DEL                       = 0x58b
	AUDIT_MAC_CIPSOV4_ADD                       = 0x57f
	AUDIT_MAC_CIPSOV4_DEL                       = 0x580
	AUDIT_MAC_CONFIG_CHANGE                     = 0x57d
	AUDIT_MAC_IPSEC_ADDSA                       = 0x583
	AUDIT_MAC_IPSEC_ADDSPD                      = 0x585
	AUDIT_MAC_IPSEC_DELSA                       = 0x584
	AUDIT_MAC_IPSEC_DELSPD                      = 0x586
	AUDIT_MAC_IPSEC_EVENT                       = 0x587
	AUDIT_MAC_MAP_ADD                           = 0x581
	AUDIT_MAC_MAP_DEL                           = 0x582
	AUDIT_MAC_POLICY_LOAD                       = 0x57b
	AUDIT_MAC_STATUS                            = 0x57c
	AUDIT_MAC_UNLBL_ALLOW                       = 0x57e
	AUDIT_MAC_UNLBL_STCADD                      = 0x588
	AUDIT_MAC_UNLBL_STCDEL                      = 0x589
	AUDIT_MAKE_EQUIV                            = 0x3f7
	AUDIT_MAX_FIELDS                            = 0x40
	AUDIT_MAX_FIELD_COMPARE                     = 0x19
	AUDIT_MAX_KEY_LEN                           = 0x100
	AUDIT_MESSAGE_TEXT_MAX                      = 0x2170
	AUDIT_MMAP                                  = 0x52b
	AUDIT_MQ_GETSETATTR                         = 0x523
	AUDIT_MQ_NOTIFY                             = 0x522
	AUDIT_MQ_OPEN                               = 0x520
	AUDIT_MQ_SENDRECV                           = 0x521
	AUDIT_MSGTYPE                               = 0xc
	AUDIT_NEGATE                                = 0x80000000
	AUDIT_NETFILTER_CFG                         = 0x52d
	AUDIT_NETFILTER_PKT                         = 0x52c
	AUDIT_NEVER                                 = 0x0
	AUDIT_NLGRP_MAX                             = 0x1
	AUDIT_NOT_EQUAL                             = 0x30000000
	AUDIT_NR_FILTERS                            = 0x8
	AUDIT_OBJ_GID                               = 0x6e
	AUDIT_OBJ_LEV_HIGH                          = 0x17
	AUDIT_OBJ_LEV_LOW                           = 0x16
	AUDIT_OBJ_PID                               = 0x526
	AUDIT_OBJ_ROLE                              = 0x14
	AUDIT_OBJ_TYPE                              = 0x15
	AUDIT_OBJ_UID                               = 0x6d
	AUDIT_OBJ_USER                              = 0x13
	AUDIT_OPENAT2                               = 0x539
	AUDIT_OPERATORS                             = 0x78000000
	AUDIT_PATH                                  = 0x516
	AUDIT_PERM                                  = 0x6a
	AUDIT_PERM_ATTR                             = 0x8
	AUDIT_PERM_EXEC                             = 0x1
	AUDIT_PERM_READ                             = 0x4
	AUDIT_PERM_WRITE                            = 0x2
	AUDIT_PERS                                  = 0xa
	AUDIT_PID                                   = 0x0
	AUDIT_POSSIBLE                              = 0x1
	AUDIT_PPID                                  = 0x12
	AUDIT_PROCTITLE                             = 0x52f
	AUDIT_REPLACE                               = 0x531
	AUDIT_SADDR_FAM                             = 0x71
	AUDIT_SECCOMP                               = 0x52e
	AUDIT_SELINUX_ERR                           = 0x579
	AUDIT_SESSIONID                             = 0x19
	AUDIT_SET                                   = 0x3e9
	AUDIT_SET_FEATURE                           = 0x3fa
	AUDIT_SGID                                  = 0x7
	AUDIT_SID_UNSET                             = 0xffffffff
	AUDIT_SIGNAL_INFO                           = 0x3f2
	AUDIT_SOCKADDR                              = 0x51a
	AUDIT_SOCKETCALL                            = 0x518
	AUDIT_STATUS_BACKLOG_LIMIT                  = 0x10
	AUDIT_STATUS_BACKLOG_WAIT_TIME              = 0x20
	AUDIT_STATUS_BACKLOG_WAIT_TIME_ACTUAL       = 0x80
	AUDIT_STATUS_ENABLED                        = 0x1
	AUDIT_STATUS_FAILURE                        = 0x2
	AUDIT_STATUS_LOST                           = 0x40
	AUDIT_STATUS_PID                            = 0x4
	AUDIT_STATUS_RATE_LIMIT                     = 0x8
	AUDIT_SUBJ_CLR                              = 0x11
	AUDIT_SUBJ_ROLE                             = 0xe
	AUDIT_SUBJ_SEN                              = 0x10
	AUDIT_SUBJ_TYPE                             = 0xf
	AUDIT_SUBJ_USER                             = 0xd
	AUDIT_SUCCESS                               = 0x68
	AUDIT_SUID                                  = 0x3
	AUDIT_SYSCALL                               = 0x514
	AUDIT_SYSCALL_CLASSES                       = 0x10
	AUDIT_TIME_ADJNTPVAL                        = 0x535
	AUDIT_TIME_INJOFFSET                        = 0x534
	AUDIT_TRIM                                  = 0x3f6
	AUDIT_TTY                                   = 0x527
	AUDIT_TTY_GET                               = 0x3f8
	AUDIT_TTY_SET                               = 0x3f9
	AUDIT_UID                                   = 0x1
	AUDIT_UID_UNSET                             = 0xffffffff
	AUDIT_UNUSED_BITS                           = 0x7fffc00
	AUDIT_URINGOP                               = 0x538
	AUDIT_USER                                  = 0x3ed
	AUDIT_USER_AVC                              = 0x453
	AUDIT_USER_TTY                              = 0x464
	AUDIT_VERSION_BACKLOG_LIMIT                 = 0x1
	AUDIT_VERSION_BACKLOG_WAIT_TIME             = 0x2
	AUDIT_VERSION_LATEST                        = 0x7f
	AUDIT_WATCH                                 = 0x69
	AUDIT_WATCH_INS                             = 0x3ef
	AUDIT_WATCH_LIST                            = 0x3f1
	AUDIT_WATCH_REM                             = 0x3f0
	AUTOFS_SUPER_MAGIC                          = 0x187
	B0                                          = 0x0
	B110                                        = 0x3
	B1200                                       = 0x9
	B134                                        = 0x4
	B150                                        = 0x5
	B1800                                       = 0xa
	B19200                                      = 0xe
	B200                                        = 0x6
	B2400                                       = 0xb
	B300                                        = 0x7
	B38400                                      = 0xf
	B4800                                       = 0xc
	B50                                         = 0x1
	B600                                        = 0x8
	B75                                         = 0x2
	B9600                                       = 0xd
	BDEVFS_MAGIC                                = 0x62646576
	BINDERFS_SUPER_MAGIC                        = 0x6c6f6f70
	BINFMTFS_MAGIC                              = 0x42494e4d
	BPF_A                                       = 0x10
	BPF_ABS                                     = 0x20
	BPF_ADD                                     = 0x0
	BPF_ALU                                     = 0x4
	BPF_ALU64                                   = 0x7
	BPF_AND                                     = 0x50
	BPF_ARSH                                    = 0xc0
	BPF_ATOMIC                                  = 0xc0
	BPF_B                                       = 0x10
	BPF_BUILD_ID_SIZE                           = 0x14
	BPF_CALL                                    = 0x80
	BPF_CMPXCHG                                 = 0xf1
	BPF_DIV                                     = 0x30
	BPF_DW                                      = 0x18
	BPF_END                                     = 0xd0
	BPF_EXIT                                    = 0x90
	BPF_FETCH                                   = 0x1
	BPF_FROM_BE                                 = 0x8
	BPF_FROM_LE                                 = 0x0
	BPF_FS_MAGIC                                = 0xcafe4a11
	BPF_F_ALLOW_MULTI                           = 0x2
	BPF_F_ALLOW_OVERRIDE                        = 0x1
	BPF_F_ANY_ALIGNMENT                         = 0x2
	BPF_F_KPROBE_MULTI_RETURN                   = 0x1
	BPF_F_QUERY_EFFECTIVE                       = 0x1
	BPF_F_REPLACE                               = 0x4
	BPF_F_SLEEPABLE                             = 0x10
	BPF_F_STRICT_ALIGNMENT                      = 0x1
	BPF_F_TEST_RND_HI32                         = 0x4
	BPF_F_TEST_RUN_ON_CPU                       = 0x1
	BPF_F_TEST_STATE_FREQ                       = 0x8
	BPF_F_TEST_XDP_LIVE_FRAMES                  = 0x2
	BPF_F_XDP_HAS_FRAGS                         = 0x20
	BPF_H                                       = 0x8
	BPF_IMM                                     = 0x0
	BPF_IND                                     = 0x40
	BPF_JA                                      = 0x0
	BPF_JEQ                                     = 0x10
	BPF_JGE                                     = 0x30
	BPF_JGT                                     = 0x20
	BPF_JLE                                     = 0xb0
	BPF_JLT                                     = 0xa0
	BPF_JMP                                     = 0x5
	BPF_JMP32                                   = 0x6
	BPF_JNE                                     = 0x50
	BPF_JSET                                    = 0x40
	BPF_JSGE                                    = 0x70
	BPF_JSGT                                    = 0x60
	BPF_JSLE                                    = 0xd0
	BPF_JSLT                                    = 0xc0
	BPF_K                                       = 0x0
	BPF_LD                                      = 0x0
	BPF_LDX                                     = 0x1
	BPF_LEN                                     = 0x80
	BPF_LL_OFF                                  = -0x200000
	BPF_LSH                                     = 0x60
	BPF_MAJOR_VERSION                           = 0x1
	BPF_MAXINSNS                                = 0x1000
	BPF_MEM                                     = 0x60
	BPF_MEMWORDS                                = 0x10
	BPF_MINOR_VERSION                           = 0x1
	BPF_MISC                                    = 0x7
	BPF_MOD                                     = 0x90
	BPF_MOV                                     = 0xb0
	BPF_MSH                                     = 0xa0
	BPF_MUL                                     = 0x20
	BPF_NEG                                     = 0x80
	BPF_NET_OFF                                 = -0x100000
	BPF_OBJ_NAME_LEN                            = 0x10
	BPF_OR                                      = 0x40
	BPF_PSEUDO_BTF_ID                           = 0x3
	BPF_PSEUDO_CALL                             = 0x1
	BPF_PSEUDO_FUNC                             = 0x4
	BPF_PSEUDO_KFUNC_CALL                       = 0x2
	BPF_PSEUDO_MAP_FD                           = 0x1
	BPF_PSEUDO_MAP_IDX                          = 0x5
	BPF_PSEUDO_MAP_IDX_VALUE                    = 0x6
	BPF_PSEUDO_MAP_VALUE                        = 0x2
	BPF_RET                                     = 0x6
	BPF_RSH                                     = 0x70
	BPF_ST                                      = 0x2
	BPF_STX                                     = 0x3
	BPF_SUB                                     = 0x10
	BPF_TAG_SIZE                                = 0x8
	BPF_TAX                                     = 0x0
	BPF_TO_BE                                   = 0x8
	BPF_TO_LE                                   = 0x0
	BPF_TXA                                     = 0x80
	BPF_W                                       = 0x0
	BPF_X                                       = 0x8
	BPF_XADD                                    = 0xc0
	BPF_XCHG                                    = 0xe1
	BPF_XOR                                     = 0xa0
	BRKINT                                      = 0x2
	BS0                                         = 0x0
	BTRFS_SUPER_MAGIC                           = 0x9123683e
	BTRFS_TEST_MAGIC                            = 0x73727279
	BUS_BLUETOOTH                               = 0x5
	BUS_HIL                                     = 0x4
	BUS_USB                                     = 0x3
	BUS_VIRTUAL                                 = 0x6
	CAN_BCM                                     = 0x2
	CAN_BUS_OFF_THRESHOLD                       = 0x100
	CAN_CTRLMODE_3_SAMPLES                      = 0x4
	CAN_CTRLMODE_BERR_REPORTING                 = 0x10
	CAN_CTRLMODE_CC_LEN8_DLC                    = 0x100
	CAN_CTRLMODE_FD                             = 0x20
	CAN_CTRLMODE_FD_NON_ISO                     = 0x80
	CAN_CTRLMODE_LISTENONLY                     = 0x2
	CAN_CTRLMODE_LOOPBACK                       = 0x1
	CAN_CTRLMODE_ONE_SHOT                       = 0x8
	CAN_CTRLMODE_PRESUME_ACK                    = 0x40
	CAN_CTRLMODE_TDC_AUTO                       = 0x200
	CAN_CTRLMODE_TDC_MANUAL                     = 0x400
	CAN_EFF_FLAG                                = 0x80000000
	CAN_EFF_ID_BITS                             = 0x1d
	CAN_EFF_MASK                                = 0x1fffffff
	CAN_ERROR_PASSIVE_THRESHOLD                 = 0x80
	CAN_ERROR_WARNING_THRESHOLD                 = 0x60
	CAN_ERR_ACK                                 = 0x20
	CAN_ERR_BUSERROR                            = 0x80
	CAN_ERR_BUSOFF                              = 0x40
	CAN_ERR_CNT                                 = 0x200
	CAN_ERR_CRTL                                = 0x4
	CAN_ERR_CRTL_ACTIVE                         = 0x40
	CAN_ERR_CRTL_RX_OVERFLOW                    = 0x1
	CAN_ERR_CRTL_RX_PASSIVE                     = 0x10
	CAN_ERR_CRTL_RX_WARNING                     = 0x4
	CAN_ERR_CRTL_TX_OVERFLOW                    = 0x2
	CAN_ERR_CRTL_TX_PASSIVE                     = 0x20
	CAN_ERR_CRTL_TX_WARNING                     = 0x8
	CAN_ERR_CRTL_UNSPEC                         = 0x0
	CAN_ERR_DLC                                 = 0x8
	CAN_ERR_FLAG                                = 0x20000000
	CAN_ERR_LOSTARB                             = 0x2
	CAN_ERR_LOSTARB_UNSPEC                      = 0x0
	CAN_ERR_MASK                                = 0x1fffffff
	CAN_ERR_PROT                                = 0x8
	CAN_ERR_PROT_ACTIVE                         = 0x40
	CAN_ERR_PROT_BIT                            = 0x1
	CAN_ERR_PROT_BIT0                           = 0x8
	CAN_ERR_PROT_BIT1                           = 0x10
	CAN_ERR_PROT_FORM                           = 0x2
	CAN_ERR_PROT_LOC_ACK                        = 0x19
	CAN_ERR_PROT_LOC_ACK_DEL                    = 0x1b
	CAN_ERR_PROT_LOC_CRC_DEL                    = 0x18
	CAN_ERR_PROT_LOC_CRC_SEQ                    = 0x8
	CAN_ERR_PROT_LOC_DATA                       = 0xa
	CAN_ERR_PROT_LOC_DLC                        = 0xb
	CAN_ERR_PROT_LOC_EOF                        = 0x1a
	CAN_ERR_PROT_LOC_ID04_00                    = 0xe
	CAN_ERR_PROT_LOC_ID12_05                    = 0xf
	CAN_ERR_PROT_LOC_ID17_13                    = 0x7
	CAN_ERR_PROT_LOC_ID20_18                    = 0x6
	CAN_ERR_PROT_LOC_ID28_21                    = 0x2
	CAN_ERR_PROT_LOC_IDE                        = 0x5
	CAN_ERR_PROT_LOC_INTERM                     = 0x12
	CAN_ERR_PROT_LOC_RES0                       = 0x9
	CAN_ERR_PROT_LOC_RES1                       = 0xd
	CAN_ERR_PROT_LOC_RTR                        = 0xc
	CAN_ERR_PROT_LOC_SOF                        = 0x3
	CAN_ERR_PROT_LOC_SRTR                       = 0x4
	CAN_ERR_PROT_LOC_UNSPEC                     = 0x0
	CAN_ERR_PROT_OVERLOAD                       = 0x20
	CAN_ERR_PROT_STUFF                          = 0x4
	CAN_ERR_PROT_TX                             = 0x80
	CAN_ERR_PROT_UNSPEC                         = 0x0
	CAN_ERR_RESTARTED                           = 0x100
	CAN_ERR_TRX                                 = 0x10
	CAN_ERR_TRX_CANH_NO_WIRE                    = 0x4
	CAN_ERR_TRX_CANH_SHORT_TO_BAT               = 0x5
	CAN_ERR_TRX_CANH_SHORT_TO_GND               = 0x7
	CAN_ERR_TRX_CANH_SHORT_TO_VCC               = 0x6
	CAN_ERR_TRX_CANL_NO_WIRE                    = 0x40
	CAN_ERR_TRX_CANL_SHORT_TO_BAT               = 0x50
	CAN_ERR_TRX_CANL_SHORT_TO_CANH              = 0x80
	CAN_ERR_TRX_CANL_SHORT_TO_GND               = 0x70
	CAN_ERR_TRX_CANL_SHORT_TO_VCC               = 0x60
	CAN_ERR_TRX_UNSPEC                          = 0x0
	CAN_ERR_TX_TIMEOUT                          = 0x1
	CAN_INV_FILTER                              = 0x20000000
	CAN_ISOTP                                   = 0x6
	CAN_J1939                                   = 0x7
	CAN_MAX_DLC                                 = 0x8
	CAN_MAX_DLEN                                = 0x8
	CAN_MAX_RAW_DLC                             = 0xf
	CAN_MCNET                                   = 0x5
	CAN_MTU                                     = 0x10
	CAN_NPROTO                                  = 0x8
	CAN_RAW                                     = 0x1
	CAN_RAW_FILTER_MAX                          = 0x200
	CAN_RTR_FLAG                                = 0x40000000
	CAN_SFF_ID_BITS                             = 0xb
	CAN_SFF_MASK                                = 0x7ff
	CAN_TERMINATION_DISABLED                    = 0x0
	CAN_TP16                                    = 0x3
	CAN_TP20                                    = 0x4
	CAP_AUDIT_CONTROL                           = 0x1e
	CAP_AUDIT_READ                              = 0x25
	CAP_AUDIT_WRITE                             = 0x1d
	CAP_BLOCK_SUSPEND                           = 0x24
	CAP_BPF                                     = 0x27
	CAP_CHECKPOINT_RESTORE                      = 0x28
	CAP_CHOWN                                   = 0x0
	CAP_DAC_OVERRIDE                            = 0x1
	CAP_DAC_READ_SEARCH                         = 0x2
	CAP_FOWNER                                  = 0x3
	CAP_FSETID                                  = 0x4
	CAP_IPC_LOCK                                = 0xe
	CAP_IPC_OWNER                               = 0xf
	CAP_KILL                                    = 0x5
	CAP_LAST_CAP                                = 0x28
	CAP_LEASE                                   = 0x1c
	CAP_LINUX_IMMUTABLE                         = 0x9
	CAP_MAC_ADMIN                               = 0x21
	CAP_MAC_OVERRIDE                            = 0x20
	CAP_MKNOD                                   = 0x1b
	CAP_NET_ADMIN                               = 0xc
	CAP_NET_BIND_SERVICE                        = 0xa
	CAP_NET_BROADCAST                           = 0xb
	CAP_NET_RAW                                 = 0xd
	CAP_PERFMON                                 = 0x26
	CAP_SETFCAP                                 = 0x1f
	CAP_SETGID                                  = 0x6
	CAP_SETPCAP                                 = 0x8
	CAP_SETUID                                  = 0x7
	CAP_SYSLOG                                  = 0x22
	CAP_SYS_ADMIN                               = 0x15
	CAP_SYS_BOOT                                = 0x16
	CAP_SYS_CHROOT                              = 0x12
	CAP_SYS_MODULE                              = 0x10
	CAP_SYS_NICE                                = 0x17
	CAP_SYS_PACCT                               = 0x14
	CAP_SYS_PTRACE                              = 0x13
	CAP_SYS_RAWIO                               = 0x11
	CAP_SYS_RESOURCE                            = 0x18
	CAP_SYS_TIME                                = 0x19
	CAP_SYS_TTY_CONFIG                          = 0x1a
	CAP_WAKE_ALARM                              = 0x23
	CEPH_SUPER_MAGIC                            = 0xc36400
	CFLUSH                                      = 0xf
	CGROUP2_SUPER_MAGIC                         = 0x63677270
	CGROUP_SUPER_MAGIC                          = 0x27e0eb
	CIFS_SUPER_MAGIC                            = 0xff534d42
	CLOCK_BOOTTIME                              = 0x7
	CLOCK_BOOTTIME_ALARM                        = 0x9
	CLOCK_DEFAULT                               = 0x0
	CLOCK_EXT                                   = 0x1
	CLOCK_INT                                   = 0x2
	CLOCK_MONOTONIC                             = 0x1
	CLOCK_MONOTONIC_COARSE                      = 0x6
	CLOCK_MONOTONIC_RAW                         = 0x4
	CLOCK_PROCESS_CPUTIME_ID                    = 0x2
	CLOCK_REALTIME                              = 0x0
	CLOCK_REALTIME_ALARM                        = 0x8
	CLOCK_REALTIME_COARSE                       = 0x5
	CLOCK_TAI                                   = 0xb
	CLOCK_THREAD_CPUTIME_ID                     = 0x3
	CLOCK_TXFROMRX                              = 0x4
	CLOCK_TXINT                                 = 0x3
	CLONE_ARGS_SIZE_VER0                        = 0x40
	CLONE_ARGS_SIZE_VER1                        = 0x50
	CLONE_ARGS_SIZE_VER2                        = 0x58
	CLONE_CHILD_CLEARTID                        = 0x200000
	CLONE_CHILD_SETTID                          = 0x1000000
	CLONE_CLEAR_SIGHAND                         = 0x100000000
	CLONE_DETACHED                              = 0x400000
	CLONE_FILES                                 = 0x400
	CLONE_FS                                    = 0x200
	CLONE_INTO_CGROUP                           = 0x200000000
	CLONE_IO                                    = 0x80000000
	CLONE_NEWCGROUP                             = 0x2000000
	CLONE_NEWIPC                                = 0x8000000
	CLONE_NEWNET                                = 0x40000000
	CLONE_NEWNS                                 = 0x20000
	CLONE_NEWPID                                = 0x20000000
	CLONE_NEWTIME                               = 0x80
	CLONE_NEWUSER                               = 0x10000000
	CLONE_NEWUTS                                = 0x4000000
	CLONE_PARENT                                = 0x8000
	CLONE_PARENT_SETTID                         = 0x100000
	CLONE_PIDFD                                 = 0x1000
	CLONE_PTRACE                                = 0x2000
	CLONE_SETTLS                                = 0x80000
	CLONE_SIGHAND                               = 0x800
	CLONE_SYSVSEM                               = 0x40000
	CLONE_THREAD                                = 0x10000
	CLONE_UNTRACED                              = 0x800000
	CLONE_VFORK                                 = 0x4000
	CLONE_VM                                    = 0x100
	CMSPAR                                      = 0x40000000
	CODA_SUPER_MAGIC                            = 0x73757245
	CR0                                         = 0x0
	CRAMFS_MAGIC                                = 0x28cd3d45
	CRTSCTS                                     = 0x80000000
	CRYPTO_MAX_NAME                             = 0x40
	CRYPTO_MSG_MAX                              = 0x15
	CRYPTO_NR_MSGTYPES                          = 0x6
	CRYPTO_REPORT_MAXSIZE                       = 0x160
	CS5                                         = 0x0
	CSIGNAL                                     = 0xff
	CSTART                                      = 0x11
	CSTATUS                                     = 0x0
	CSTOP                                       = 0x13
	CSUSP                                       = 0x1a
	DAXFS_MAGIC                                 = 0x64646178
	DEBUGFS_MAGIC                               = 0x64626720
	DEVLINK_CMD_ESWITCH_MODE_GET                = 0x1d
	DEVLINK_CMD_ESWITCH_MODE_SET                = 0x1e
	DEVLINK_FLASH_OVERWRITE_IDENTIFIERS         = 0x2
	DEVLINK_FLASH_OVERWRITE_SETTINGS            = 0x1
	DEVLINK_GENL_MCGRP_CONFIG_NAME              = "config"
	DEVLINK_GENL_NAME                           = "devlink"
	DEVLINK_GENL_VERSION                        = 0x1
	DEVLINK_PORT_FN_CAP_MIGRATABLE              = 0x2
	DEVLINK_PORT_FN_CAP_ROCE                    = 0x1
	DEVLINK_SB_THRESHOLD_TO_ALPHA_MAX           = 0x14
	DEVLINK_SUPPORTED_FLASH_OVERWRITE_SECTIONS  = 0x3
	DEVMEM_MAGIC                                = 0x454d444d
	DEVPTS_SUPER_MAGIC                          = 0x1cd1
	DMA_BUF_MAGIC                               = 0x444d4142
	DM_ACTIVE_PRESENT_FLAG                      = 0x20
	DM_BUFFER_FULL_FLAG                         = 0x100
	DM_CONTROL_NODE                             = "control"
	DM_DATA_OUT_FLAG                            = 0x10000
	DM_DEFERRED_REMOVE                          = 0x20000
	DM_DEV_ARM_POLL                             = 0xc138fd10
	DM_DEV_CREATE                               = 0xc138fd03
	DM_DEV_REMOVE                               = 0xc138fd04
	DM_DEV_RENAME                               = 0xc138fd05
	DM_DEV_SET_GEOMETRY                         = 0xc138fd0f
	DM_DEV_STATUS                               = 0xc138fd07
	DM_DEV_SUSPEND                              = 0xc138fd06
	DM_DEV_WAIT                                 = 0xc138fd08
	DM_DIR                                      = "mapper"
	DM_GET_TARGET_VERSION                       = 0xc138fd11
	DM_IMA_MEASUREMENT_FLAG                     = 0x80000
	DM_INACTIVE_PRESENT_FLAG                    = 0x40
	DM_INTERNAL_SUSPEND_FLAG                    = 0x40000
	DM_IOCTL                                    = 0xfd
	DM_LIST_DEVICES                             = 0xc138fd02
	DM_LIST_VERSIONS                            = 0xc138fd0d
	DM_MAX_TYPE_NAME                            = 0x10
	DM_NAME_LEN                                 = 0x80
	DM_NAME_LIST_FLAG_DOESNT_HAVE_UUID          = 0x2
	DM_NAME_LIST_FLAG_HAS_UUID                  = 0x1
	DM_NOFLUSH_FLAG                             = 0x800
	DM_PERSISTENT_DEV_FLAG                      = 0x8
	DM_QUERY_INACTIVE_TABLE_FLAG                = 0x1000
	DM_READONLY_FLAG                            = 0x1
	DM_REMOVE_ALL                               = 0xc138fd01
	DM_SECURE_DATA_FLAG                         = 0x8000
	DM_SKIP_BDGET_FLAG                          = 0x200
	DM_SKIP_LOCKFS_FLAG                         = 0x400
	DM_STATUS_TABLE_FLAG                        = 0x10
	DM_SUSPEND_FLAG                             = 0x2
	DM_TABLE_CLEAR                              = 0xc138fd0a
	DM_TABLE_DEPS                               = 0xc138fd0b
	DM_TABLE_LOAD                               = 0xc138fd09
	DM_TABLE_STATUS                             = 0xc138fd0c
	DM_TARGET_MSG                               = 0xc138fd0e
	DM_UEVENT_GENERATED_FLAG                    = 0x2000
	DM_UUID_FLAG                                = 0x4000
	DM_UUID_LEN                                 = 0x81
	DM_VERSION                                  = 0xc138fd00
	DM_VERSION_EXTRA                            = "-ioctl (2022-07-28)"
	DM_VERSION_MAJOR                            = 0x4
	DM_VERSION_MINOR                            = 0x2f
	DM_VERSION_PATCHLEVEL                       = 0x0
	DT_BLK                                      = 0x6
	DT_CHR                                      = 0x2
	DT_DIR                                      = 0x4
	DT_FIFO                                     = 0x1
	DT_LNK                                      = 0xa
	DT_REG                                      = 0x8
	DT_SOCK                                     = 0xc
	DT_UNKNOWN                                  = 0x0
	DT_WHT                                      = 0xe
	ECHO                                        = 0x8
	ECRYPTFS_SUPER_MAGIC                        = 0xf15f
	EFD_SEMAPHORE                               = 0x1
	EFIVARFS_MAGIC                              = 0xde5e81e4
	EFS_SUPER_MAGIC                             = 0x414a53
	EM_386                                      = 0x3
	EM_486                                      = 0x6
	EM_68K                                      = 0x4
	EM_860                                      = 0x7
	EM_88K                                      = 0x5
	EM_AARCH64                                  = 0xb7
	EM_ALPHA                                    = 0x9026
	EM_ALTERA_NIOS2                             = 0x71
	EM_ARCOMPACT                                = 0x5d
	EM_ARCV2                                    = 0xc3
	EM_ARM                                      = 0x28
	EM_BLACKFIN                                 = 0x6a
	EM_BPF                                      = 0xf7
	EM_CRIS                                     = 0x4c
	EM_CSKY                                     = 0xfc
	EM_CYGNUS_M32R                              = 0x9041
	EM_CYGNUS_MN10300                           = 0xbeef
	EM_FRV                                      = 0x5441
	EM_H8_300                                   = 0x2e
	EM_HEXAGON                                  = 0xa4
	EM_IA_64                                    = 0x32
	EM_LOONGARCH                                = 0x102
	EM_M32                                      = 0x1
	EM_M32R                                     = 0x58
	EM_MICROBLAZE                               = 0xbd
	EM_MIPS                                     = 0x8
	EM_MIPS_RS3_LE                              = 0xa
	EM_MIPS_RS4_BE                              = 0xa
	EM_MN10300                                  = 0x59
	EM_NDS32                                    = 0xa7
	EM_NONE                                     = 0x0
	EM_OPENRISC                                 = 0x5c
	EM_PARISC                                   = 0xf
	EM_PPC                                      = 0x14
	EM_PPC64                                    = 0x15
	EM_RISCV                                    = 0xf3
	EM_S390                                     = 0x16
	EM_S390_OLD                                 = 0xa390
	EM_SH                                       = 0x2a
	EM_SPARC                                    = 0x2
	EM_SPARC32PLUS                              = 0x12
	EM_SPARCV9                                  = 0x2b
	EM_SPU                                      = 0x17
	EM_TILEGX                                   = 0xbf
	EM_TILEPRO                                  = 0xbc
	EM_TI_C6000                                 = 0x8c
	EM_UNICORE                                  = 0x6e
	EM_X86_64                                   = 0x3e
	EM_XTENSA                                   = 0x5e
	ENCODING_DEFAULT                            = 0x0
	ENCODING_FM_MARK                            = 0x3
	ENCODING_FM_SPACE                           = 0x4
	ENCODING_MANCHESTER                         = 0x5
	ENCODING_NRZ                                = 0x1
	ENCODING_NRZI                               = 0x2
	EPOLLERR                                    = 0x8
	EPOLLET                                     = 0x80000000
	EPOLLEXCLUSIVE                              = 0x10000000
	EPOLLHUP                                    = 0x10
	EPOLLIN                                     = 0x1
	EPOLLMSG                                    = 0x400
	EPOLLONESHOT                                = 0x40000000
	EPOLLOUT                                    = 0x4
	EPOLLPRI                                    = 0x2
	EPOLLRDBAND                                 = 0x80
	EPOLLRDHUP                                  = 0x2000
	EPOLLRDNORM                                 = 0x40
	EPOLLWAKEUP                                 = 0x20000000
	EPOLLWRBAND                                 = 0x200
	EPOLLWRNORM                                 = 0x100
	EPOLL_CTL_ADD                               = 0x1
	EPOLL_CTL_DEL                               = 0x2
	EPOLL_CTL_MOD                               = 0x3
	EROFS_SUPER_MAGIC_V1                        = 0xe0f5e1e2
	ESP_V4_FLOW                                 = 0xa
	ESP_V6_FLOW                                 = 0xc
	ETHER_FLOW                                  = 0x12
	ETHTOOL_BUSINFO_LEN                         = 0x20
	ETHTOOL_EROMVERS_LEN                        = 0x20
	ETHTOOL_FEC_AUTO                            = 0x2
	ETHTOOL_FEC_BASER                           = 0x10
	ETHTOOL_FEC_LLRS                            = 0x20
	ETHTOOL_FEC_NONE                            = 0x1
	ETHTOOL_FEC_OFF                             = 0x4
	ETHTOOL_FEC_RS                              = 0x8
	ETHTOOL_FLAG_ALL                            = 0x7
	ETHTOOL_FLAG_COMPACT_BITSETS                = 0x1
	ETHTOOL_FLAG_OMIT_REPLY                     = 0x2
	ETHTOOL_FLAG_STATS                          = 0x4
	ETHTOOL_FLASHDEV                            = 0x33
	ETHTOOL_FLASH_MAX_FILENAME                  = 0x80
	ETHTOOL_FWVERS_LEN                          = 0x20
	ETHTOOL_F_COMPAT                            = 0x4
	ETHTOOL_F_UNSUPPORTED                       = 0x1
	ETHTOOL_F_WISH                              = 0x2
	ETHTOOL_GCHANNELS                           = 0x3c
	ETHTOOL_GCOALESCE                           = 0xe
	ETHTOOL_GDRVINFO                            = 0x3
	ETHTOOL_GEEE                                = 0x44
	ETHTOOL_GEEPROM                             = 0xb
	ETHTOOL_GENL_NAME                           = "ethtool"
	ETHTOOL_GENL_VERSION                        = 0x1
	ETHTOOL_GET_DUMP_DATA                       = 0x40
	ETHTOOL_GET_DUMP_FLAG                       = 0x3f
	ETHTOOL_GET_TS_INFO                         = 0x41
	ETHTOOL_GFEATURES                           = 0x3a
	ETHTOOL_GFECPARAM                           = 0x50
	ETHTOOL_GFLAGS                              = 0x25
	ETHTOOL_GGRO                                = 0x2b
	ETHTOOL_GGSO                                = 0x23
	ETHTOOL_GLINK                               = 0xa
	ETHTOOL_GLINKSETTINGS                       = 0x4c
	ETHTOOL_GMODULEEEPROM                       = 0x43
	ETHTOOL_GMODULEINFO                         = 0x42
	ETHTOOL_GMSGLVL                             = 0x7
	ETHTOOL_GPAUSEPARAM                         = 0x12
	ETHTOOL_GPERMADDR                           = 0x20
	ETHTOOL_GPFLAGS                             = 0x27
	ETHTOOL_GPHYSTATS                           = 0x4a
	ETHTOOL_GREGS                               = 0x4
	ETHTOOL_GRINGPARAM                          = 0x10
	ETHTOOL_GRSSH                               = 0x46
	ETHTOOL_GRXCLSRLALL                         = 0x30
	ETHTOOL_GRXCLSRLCNT                         = 0x2e
	ETHTOOL_GRXCLSRULE                          = 0x2f
	ETHTOOL_GRXCSUM                             = 0x14
	ETHTOOL_GRXFH                               = 0x29
	ETHTOOL_GRXFHINDIR                          = 0x38
	ETHTOOL_GRXNTUPLE                           = 0x36
	ETHTOOL_GRXRINGS                            = 0x2d
	ETHTOOL_GSET                                = 0x1
	ETHTOOL_GSG                                 = 0x18
	ETHTOOL_GSSET_INFO                          = 0x37
	ETHTOOL_GSTATS                              = 0x1d
	ETHTOOL_GSTRINGS                            = 0x1b
	ETHTOOL_GTSO                                = 0x1e
	ETHTOOL_GTUNABLE                            = 0x48
	ETHTOOL_GTXCSUM                             = 0x16
	ETHTOOL_GUFO                                = 0x21
	ETHTOOL_GWOL                                = 0x5
	ETHTOOL_MCGRP_MONITOR_NAME                  = "monitor"
	ETHTOOL_NWAY_RST                            = 0x9
	ETHTOOL_PERQUEUE                            = 0x4b
	ETHTOOL_PHYS_ID                             = 0x1c
	ETHTOOL_PHY_EDPD_DFLT_TX_MSECS              = 0xffff
	ETHTOOL_PHY_EDPD_DISABLE                    = 0x0
	ETHTOOL_PHY_EDPD_NO_TX                      = 0xfffe
	ETHTOOL_PHY_FAST_LINK_DOWN_OFF              = 0xff
	ETHTOOL_PHY_FAST_LINK_DOWN_ON               = 0x0
	ETHTOOL_PHY_GTUNABLE                        = 0x4e
	ETHTOOL_PHY_STUNABLE                        = 0x4f
	ETHTOOL_RESET                               = 0x34
	ETHTOOL_RXNTUPLE_ACTION_CLEAR               = -0x2
	ETHTOOL_RXNTUPLE_ACTION_DROP                = -0x1
	ETHTOOL_RX_FLOW_SPEC_RING                   = 0xffffffff
	ETHTOOL_RX_FLOW_SPEC_RING_VF                = 0xff00000000
	ETHTOOL_RX_FLOW_SPEC_RING_VF_OFF            = 0x20
	ETHTOOL_SCHANNELS                           = 0x3d
	ETHTOOL_SCOALESCE                           = 0xf
	ETHTOOL_SEEE                                = 0x45
	ETHTOOL_SEEPROM                             = 0xc
	ETHTOOL_SET_DUMP                            = 0x3e
	ETHTOOL_SFEATURES                           = 0x3b
	ETHTOOL_SFECPARAM                           = 0x51
	ETHTOOL_SFLAGS                              = 0x26
	ETHTOOL_SGRO                                = 0x2c
	ETHTOOL_SGSO                                = 0x24
	ETHTOOL_SLINKSETTINGS                       = 0x4d
	ETHTOOL_SMSGLVL                             = 0x8
	ETHTOOL_SPAUSEPARAM                         = 0x13
	ETHTOOL_SPFLAGS                             = 0x28
	ETHTOOL_SRINGPARAM                          = 0x11
	ETHTOOL_SRSSH                               = 0x47
	ETHTOOL_SRXCLSRLDEL                         = 0x31
	ETHTOOL_SRXCLSRLINS                         = 0x32
	ETHTOOL_SRXCSUM                             = 0x15
	ETHTOOL_SRXFH                               = 0x2a
	ETHTOOL_SRXFHINDIR                          = 0x39
	ETHTOOL_SRXNTUPLE                           = 0x35
	ETHTOOL_SSET                                = 0x2
	ETHTOOL_SSG                                 = 0x19
	ETHTOOL_STSO                                = 0x1f
	ETHTOOL_STUNABLE                            = 0x49
	ETHTOOL_STXCSUM                             = 0x17
	ETHTOOL_SUFO                                = 0x22
	ETHTOOL_SWOL                                = 0x6
	ETHTOOL_TEST                                = 0x1a
	ETH_P_1588                                  = 0x88f7
	ETH_P_8021AD                                = 0x88a8
	ETH_P_8021AH                                = 0x88e7
	ETH_P_8021Q                                 = 0x8100
	ETH_P_80221                                 = 0x8917
	ETH_P_802_2                                 = 0x4
	ETH_P_802_3                                 = 0x1
	ETH_P_802_3_MIN                             = 0x600
	ETH_P_802_EX1                               = 0x88b5
	ETH_P_AARP                                  = 0x80f3
	ETH_P_AF_IUCV                               = 0xfbfb
	ETH_P_ALL                                   = 0x3
	ETH_P_AOE                                   = 0x88a2
	ETH_P_ARCNET                                = 0x1a
	ETH_P_ARP                                   = 0x806
	ETH_P_ATALK                                 = 0x809b
	ETH_P_ATMFATE                               = 0x8884
	ETH_P_ATMMPOA                               = 0x884c
	ETH_P_AX25                                  = 0x2
	ETH_P_BATMAN                                = 0x4305
	ETH_P_BPQ                                   = 0x8ff
	ETH_P_CAIF                                  = 0xf7
	ETH_P_CAN                                   = 0xc
	ETH_P_CANFD                                 = 0xd
	ETH_P_CANXL                                 = 0xe
	ETH_P_CFM                                   = 0x8902
	ETH_P_CONTROL                               = 0x16
	ETH_P_CUST                                  = 0x6006
	ETH_P_DDCMP                                 = 0x6
	ETH_P_DEC                                   = 0x6000
	ETH_P_DIAG                                  = 0x6005
	ETH_P_DNA_DL                                = 0x6001
	ETH_P_DNA_RC                                = 0x6002
	ETH_P_DNA_RT                                = 0x6003
	ETH_P_DSA                                   = 0x1b
	ETH_P_DSA_8021Q                             = 0xdadb
	ETH_P_DSA_A5PSW                             = 0xe001
	ETH_P_ECONET                                = 0x18
	ETH_P_EDSA                                  = 0xdada
	ETH_P_ERSPAN                                = 0x88be
	ETH_P_ERSPAN2                               = 0x22eb
	ETH_P_ETHERCAT                              = 0x88a4
	ETH_P_FCOE                                  = 0x8906
	ETH_P_FIP                                   = 0x8914
	ETH_P_HDLC                                  = 0x19
	ETH_P_HSR                                   = 0x892f
	ETH_P_IBOE                                  = 0x8915
	ETH_P_IEEE802154                            = 0xf6
	ETH_P_IEEEPUP                               = 0xa00
	ETH_P_IEEEPUPAT                             = 0xa01
	ETH_P_IFE                                   = 0xed3e
	ETH_P_IP                                    = 0x800
	ETH_P_IPV6                                  = 0x86dd
	ETH_P_IPX                                   = 0x8137
	ETH_P_IRDA                                  = 0x17
	ETH_P_LAT                                   = 0x6004
	ETH_P_LINK_CTL                              = 0x886c
	ETH_P_LLDP                                  = 0x88cc
	ETH_P_LOCALTALK                             = 0x9
	ETH_P_LOOP                                  = 0x60
	ETH_P_LOOPBACK                              = 0x9000
	ETH_P_MACSEC                                = 0x88e5
	ETH_P_MAP                                   = 0xf9
	ETH_P_MCTP                                  = 0xfa
	ETH_P_MOBITEX                               = 0x15
	ETH_P_MPLS_MC                               = 0x8848
	ETH_P_MPLS_UC                               = 0x8847
	ETH_P_MRP                                   = 0x88e3
	ETH_P_MVRP                                  = 0x88f5
	ETH_P_NCSI                                  = 0x88f8
	ETH_P_NSH                                   = 0x894f
	ETH_P_PAE                                   = 0x888e
	ETH_P_PAUSE                                 = 0x8808
	ETH_P_PHONET                                = 0xf5
	ETH_P_PPPTALK                               = 0x10
	ETH_P_PPP_DISC                              = 0x8863
	ETH_P_PPP_MP                                = 0x8
	ETH_P_PPP_SES                               = 0x8864
	ETH_P_PREAUTH                               = 0x88c7
	ETH_P_PROFINET                              = 0x8892
	ETH_P_PRP                                   = 0x88fb
	ETH_P_PUP                                   = 0x200
	ETH_P_PUPAT                                 = 0x201
	ETH_P_QINQ1                                 = 0x9100
	ETH_P_QINQ2                                 = 0x9200
	ETH_P_QINQ3                                 = 0x9300
	ETH_P_RARP                                  = 0x8035
	ETH_P_REALTEK                               = 0x8899
	ETH_P_SCA                                   = 0x6007
	ETH_P_SLOW                                  = 0x8809
	ETH_P_SNAP                                  = 0x5
	ETH_P_TDLS                                  = 0x890d
	ETH_P_TEB                                   = 0x6558
	ETH_P_TIPC                                  = 0x88ca
	ETH_P_TRAILER                               = 0x1c
	ETH_P_TR_802_2                              = 0x11
	ETH_P_TSN                                   = 0x22f0
	ETH_P_WAN_PPP                               = 0x7
	ETH_P_WCCP                                  = 0x883e
	ETH_P_X25                                   = 0x805
	ETH_P_XDSA                                  = 0xf8
	EV_ABS                                      = 0x3
	EV_CNT                                      = 0x20
	EV_FF                                       = 0x15
	EV_FF_STATUS                                = 0x17
	EV_KEY                                      = 0x1
	EV_LED                                      = 0x11
	EV_MAX                                      = 0x1f
	EV_MSC                                      = 0x4
	EV_PWR                                      = 0x16
	EV_REL                                      = 0x2
	EV_REP                                      = 0x14
	EV_SND                                      = 0x12
	EV_SW                                       = 0x5
	EV_SYN                                      = 0x0
	EV_VERSION                                  = 0x10001
	EXABYTE_ENABLE_NEST                         = 0xf0
	EXFAT_SUPER_MAGIC                           = 0x2011bab0
	EXT2_SUPER_MAGIC                            = 0xef53
	EXT3_SUPER_MAGIC                            = 0xef53
	EXT4_SUPER_MAGIC                            = 0xef53
	EXTA                                        = 0xe
	EXTB                                        = 0xf
	F2FS_SUPER_MAGIC                            = 0xf2f52010
	FALLOC_FL_COLLAPSE_RANGE                    = 0x8
	FALLOC_FL_INSERT_RANGE                      = 0x20
	FALLOC_FL_KEEP_SIZE                         = 0x1
	FALLOC_FL_NO_HIDE_STALE                     = 0x4
	FALLOC_FL_PUNCH_HOLE                        = 0x2
	FALLOC_FL_UNSHARE_RANGE                     = 0x40
	FALLOC_FL_ZERO_RANGE                        = 0x10
	FANOTIFY_METADATA_VERSION                   = 0x3
	FAN_ACCESS                                  = 0x1
	FAN_ACCESS_PERM                             = 0x20000
	FAN_ALLOW                                   = 0x1
	FAN_ALL_CLASS_BITS                          = 0xc
	FAN_ALL_EVENTS                              = 0x3b
	FAN_ALL_INIT_FLAGS                          = 0x3f
	FAN_ALL_MARK_FLAGS                          = 0xff
	FAN_ALL_OUTGOING_EVENTS                     = 0x3403b
	FAN_ALL_PERM_EVENTS                         = 0x30000
	FAN_ATTRIB                                  = 0x4
	FAN_AUDIT                                   = 0x10
	FAN_CLASS_CONTENT                           = 0x4
	FAN_CLASS_NOTIF                             = 0x0
	FAN_CLASS_PRE_CONTENT                       = 0x8
	FAN_CLOEXEC                                 = 0x1
	FAN_CLOSE                                   = 0x18
	FAN_CLOSE_NOWRITE                           = 0x10
	FAN_CLOSE_WRITE                             = 0x8
	FAN_CREATE                                  = 0x100
	FAN_DELETE                                  = 0x200
	FAN_DELETE_SELF                             = 0x400
	FAN_DENY                                    = 0x2
	FAN_ENABLE_AUDIT                            = 0x40
	FAN_EPIDFD                                  = -0x2
	FAN_EVENT_INFO_TYPE_DFID                    = 0x3
	FAN_EVENT_INFO_TYPE_DFID_NAME               = 0x2
	FAN_EVENT_INFO_TYPE_ERROR                   = 0x5
	FAN_EVENT_INFO_TYPE_FID                     = 0x1
	FAN_EVENT_INFO_TYPE_NEW_DFID_NAME           = 0xc
	FAN_EVENT_INFO_TYPE_OLD_DFID_NAME           = 0xa
	FAN_EVENT_INFO_TYPE_PIDFD                   = 0x4
	FAN_EVENT_METADATA_LEN                      = 0x18
	FAN_EVENT_ON_CHILD                          = 0x8000000
	FAN_FS_ERROR                                = 0x8000
	FAN_MARK_ADD                                = 0x1
	FAN_MARK_DONT_FOLLOW                        = 0x4
	FAN_MARK_EVICTABLE                          = 0x200
	FAN_MARK_FILESYSTEM                         = 0x100
	FAN_MARK_FLUSH                              = 0x80
	FAN_MARK_IGNORE                             = 0x400
	FAN_MARK_IGNORED_MASK                       = 0x20
	FAN_MARK_IGNORED_SURV_MODIFY                = 0x40
	FAN_MARK_IGNORE_SURV                        = 0x440
	FAN_MARK_INODE                              = 0x0
	FAN_MARK_MOUNT                              = 0x10
	FAN_MARK_ONLYDIR                            = 0x8
	FAN_MARK_REMOVE                             = 0x2
	FAN_MODIFY                                  = 0x2
	FAN_MOVE                                    = 0xc0
	FAN_MOVED_FROM                              = 0x40
	FAN_MOVED_TO                                = 0x80
	FAN_MOVE_SELF                               = 0x800
	FAN_NOFD                                    = -0x1
	FAN_NONBLOCK                                = 0x2
	FAN_NOPIDFD                                 = -0x1
	FAN_ONDIR                                   = 0x40000000
	FAN_OPEN                                    = 0x20
	FAN_OPEN_EXEC                               = 0x1000
	FAN_OPEN_EXEC_PERM                          = 0x40000
	FAN_OPEN_PERM                               = 0x10000
	FAN_Q_OVERFLOW                              = 0x4000
	FAN_RENAME                                  = 0x10000000
	FAN_REPORT_DFID_NAME                        = 0xc00
	FAN_REPORT_DFID_NAME_TARGET                 = 0x1e00
	FAN_REPORT_DIR_FID                          = 0x400
	FAN_REPORT_FID                              = 0x200
	FAN_REPORT_NAME                             = 0x800
	FAN_REPORT_PIDFD                            = 0x80
	FAN_REPORT_TARGET_FID                       = 0x1000
	FAN_REPORT_TID                              = 0x100
	FAN_UNLIMITED_MARKS                         = 0x20
	FAN_UNLIMITED_QUEUE                         = 0x10
	FD_CLOEXEC                                  = 0x1
	FD_SETSIZE                                  = 0x400
	FF0                                         = 0x0
	FIB_RULE_DEV_DETACHED                       = 0x8
	FIB_RULE_FIND_SADDR                         = 0x10000
	FIB_RULE_IIF_DETACHED                       = 0x8
	FIB_RULE_INVERT                             = 0x2
	FIB_RULE_OIF_DETACHED                       = 0x10
	FIB_RULE_PERMANENT                          = 0x1
	FIB_RULE_UNRESOLVED                         = 0x4
	FIDEDUPERANGE                               = 0xc0189436
	FSCRYPT_KEY_DESCRIPTOR_SIZE                 = 0x8
	FSCRYPT_KEY_DESC_PREFIX                     = "fscrypt:"
	FSCRYPT_KEY_DESC_PREFIX_SIZE                = 0x8
	FSCRYPT_KEY_IDENTIFIER_SIZE                 = 0x10
	FSCRYPT_KEY_REMOVAL_STATUS_FLAG_FILES_BUSY  = 0x1
	FSCRYPT_KEY_REMOVAL_STATUS_FLAG_OTHER_USERS = 0x2
	FSCRYPT_KEY_SPEC_TYPE_DESCRIPTOR            = 0x1
	FSCRYPT_KEY_SPEC_TYPE_IDENTIFIER            = 0x2
	FSCRYPT_KEY_STATUS_ABSENT                   = 0x1
	FSCRYPT_KEY_STATUS_FLAG_ADDED_BY_SELF       = 0x1
	FSCRYPT_KEY_STATUS_INCOMPLETELY_REMOVED     = 0x3
	FSCRYPT_KEY_STATUS_PRESENT                  = 0x2
	FSCRYPT_MAX_KEY_SIZE                        = 0x40
	FSCRYPT_MODE_ADIANTUM                       = 0x9
	FSCRYPT_MODE_AES_128_CBC                    = 0x5
	FSCRYPT_MODE_AES_128_CTS                    = 0x6
	FSCRYPT_MODE_AES_256_CTS                    = 0x4
	FSCRYPT_MODE_AES_256_HCTR2                  = 0xa
	FSCRYPT_MODE_AES_256_XTS                    = 0x1
	FSCRYPT_MODE_SM4_CTS                        = 0x8
	FSCRYPT_MODE_SM4_XTS                        = 0x7
	FSCRYPT_POLICY_FLAGS_PAD_16                 = 0x2
	FSCRYPT_POLICY_FLAGS_PAD_32                 = 0x3
	FSCRYPT_POLICY_FLAGS_PAD_4                  = 0x0
	FSCRYPT_POLICY_FLAGS_PAD_8                  = 0x1
	FSCRYPT_POLICY_FLAGS_PAD_MASK               = 0x3
	FSCRYPT_POLICY_FLAG_DIRECT_KEY              = 0x4
	FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32          = 0x10
	FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64          = 0x8
	FSCRYPT_POLICY_V1                           = 0x0
	FSCRYPT_POLICY_V2                           = 0x2
	FS_ENCRYPTION_MODE_ADIANTUM                 = 0x9
	FS_ENCRYPTION_MODE_AES_128_CBC              = 0x5
	FS_ENCRYPTION_MODE_AES_128_CTS              = 0x6
	FS_ENCRYPTION_MODE_AES_256_CBC              = 0x3
	FS_ENCRYPTION_MODE_AES_256_CTS              = 0x4
	FS_ENCRYPTION_MODE_AES_256_GCM              = 0x2
	FS_ENCRYPTION_MODE_AES_256_XTS              = 0x1
	FS_ENCRYPTION_MODE_INVALID                  = 0x0
	FS_IOC_ADD_ENCRYPTION_KEY                   = 0xc0506617
	FS_IOC_GET_ENCRYPTION_KEY_STATUS            = 0xc080661a
	FS_IOC_GET_ENCRYPTION_POLICY_EX             = 0xc0096616
	FS_IOC_MEASURE_VERITY                       = 0xc0046686
	FS_IOC_READ_VERITY_METADATA                 = 0xc0286687
	FS_IOC_REMOVE_ENCRYPTION_KEY                = 0xc0406618
	FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS      = 0xc0406619
	FS_KEY_DESCRIPTOR_SIZE                      = 0x8
	FS_KEY_DESC_PREFIX                          = "fscrypt:"
	FS_KEY_DESC_PREFIX_SIZE                     = 0x8
	FS_MAX_KEY_SIZE                             = 0x40
	FS_POLICY_FLAGS_PAD_16                      = 0x2
	FS_POLICY_FLAGS_PAD_32                      = 0x3
	FS_POLICY_FLAGS_PAD_4                       = 0x0
	FS_POLICY_FLAGS_PAD_8                       = 0x1
	FS_POLICY_FLAGS_PAD_MASK                    = 0x3
	FS_POLICY_FLAGS_VALID                       = 0x7
	FS_VERITY_FL                                = 0x100000
	FS_VERITY_HASH_ALG_SHA256                   = 0x1
	FS_VERITY_HASH_ALG_SHA512                   = 0x2
	FS_VERITY_METADATA_TYPE_DESCRIPTOR          = 0x2
	FS_VERITY_METADATA_TYPE_MERKLE_TREE         = 0x1
	FS_VERITY_METADATA_TYPE_SIGNATURE           = 0x3
	FUSE_SUPER_MAGIC                            = 0x65735546
	FUTEXFS_SUPER_MAGIC                         = 0xbad1dea
	F_ADD_SEALS                                 = 0x409
	F_DUPFD                                     = 0x0
	F_DUPFD_CLOEXEC                             = 0x406
	F_EXLCK                                     = 0x4
	F_GETFD                                     = 0x1
	F_GETFL                                     = 0x3
	F_GETLEASE                                  = 0x401
	F_GETOWN_EX                                 = 0x10
	F_GETPIPE_SZ                                = 0x408
	F_GETSIG                                    = 0xb
	F_GET_FILE_RW_HINT                          = 0x40d
	F_GET_RW_HINT                               = 0x40b
	F_GET_SEALS                                 = 0x40a
	F_LOCK                                      = 0x1
	F_NOTIFY                                    = 0x402
	F_OFD_GETLK                                 = 0x24
	F_OFD_SETLK                                 = 0x25
	F_OFD_SETLKW                                = 0x26
	F_OK                                        = 0x0
	F_SEAL_FUTURE_WRITE                         = 0x10
	F_SEAL_GROW                                 = 0x4
	F_SEAL_SEAL                                 = 0x1
	F_SEAL_SHRINK                               = 0x2
	F_SEAL_WRITE                                = 0x8
	F_SETFD                                     = 0x2
	F_SETFL                                     = 0x4
	F_SETLEASE                                  = 0x400
	F_SETOWN_EX                                 = 0xf
	F_SETPIPE_SZ                                = 0x407
	F_SETSIG                                    = 0xa
	F_SET_FILE_RW_HINT                          = 0x40e
	F_SET_RW_HINT                               = 0x40c
	F_SHLCK                                     = 0x8
	F_TEST                                      = 0x3
	F_TLOCK                                     = 0x2
	F_ULOCK                                     = 0x0
	GENL_ADMIN_PERM                             = 0x1
	GENL_CMD_CAP_DO                             = 0x2
	GENL_CMD_CAP_DUMP                           = 0x4
	GENL_CMD_CAP_HASPOL                         = 0x8
	GENL_HDRLEN                                 = 0x4
	GENL_ID_CTRL                                = 0x10
	GENL_ID_PMCRAID                             = 0x12
	GENL_ID_VFS_DQUOT                           = 0x11
	GENL_MAX_ID                                 = 0x3ff
	GENL_MIN_ID                                 = 0x10
	GENL_NAMSIZ                                 = 0x10
	GENL_START_ALLOC                            = 0x13
	GENL_UNS_ADMIN_PERM                         = 0x10
	GRND_INSECURE                               = 0x4
	GRND_NONBLOCK                               = 0x1
	GRND_RANDOM                                 = 0x2
	HDIO_DRIVE_CMD                              = 0x31f
	HDIO_DRIVE_CMD_AEB                          = 0x31e
	HDIO_DRIVE_CMD_HDR_SIZE                     = 0x4
	HDIO_DRIVE_HOB_HDR_SIZE                     = 0x8
	HDIO_DRIVE_RESET                            = 0x31c
	HDIO_DRIVE_TASK                             = 0x31e
	HDIO_DRIVE_TASKFILE                         = 0x31d
	HDIO_DRIVE_TASK_HDR_SIZE                    = 0x8
	HDIO_GETGEO                                 = 0x301
	HDIO_GET_32BIT                              = 0x309
	HDIO_GET_ACOUSTIC                           = 0x30f
	HDIO_GET_ADDRESS                            = 0x310
	HDIO_GET_BUSSTATE                           = 0x31a
	HDIO_GET_DMA                                = 0x30b
	HDIO_GET_IDENTITY                           = 0x30d
	HDIO_GET_KEEPSETTINGS                       = 0x308
	HDIO_GET_MULTCOUNT                          = 0x304
	HDIO_GET_NICE                               = 0x30c
	HDIO_GET_NOWERR                             = 0x30a
	HDIO_GET_QDMA                               = 0x305
	HDIO_GET_UNMASKINTR                         = 0x302
	HDIO_GET_WCACHE                             = 0x30e
	HDIO_OBSOLETE_IDENTITY                      = 0x307
	HDIO_SCAN_HWIF                              = 0x328
	HDIO_SET_32BIT                              = 0x324
	HDIO_SET_ACOUSTIC                           = 0x32c
	HDIO_SET_ADDRESS                            = 0x32f
	HDIO_SET_BUSSTATE                           = 0x32d
	HDIO_SET_DMA                                = 0x326
	HDIO_SET_KEEPSETTINGS                       = 0x323
	HDIO_SET_MULTCOUNT                          = 0x321
	HDIO_SET_NICE                               = 0x329
	HDIO_SET_NOWERR                             = 0x325
	HDIO_SET_PIO_MODE                           = 0x327
	HDIO_SET_QDMA                               = 0x32e
	HDIO_SET_UNMASKINTR                         = 0x322
	HDIO_SET_WCACHE                             = 0x32b
	HDIO_SET_XFER                               = 0x306
	HDIO_TRISTATE_HWIF                          = 0x31b
	HDIO_UNREGISTER_HWIF                        = 0x32a
	HID_MAX_DESCRIPTOR_SIZE                     = 0x1000
	HOSTFS_SUPER_MAGIC                          = 0xc0ffee
	HPFS_SUPER_MAGIC                            = 0xf995e849
	HUGETLBFS_MAGIC                             = 0x958458f6
	IBSHIFT                                     = 0x10
	ICRNL                                       = 0x100
	IFA_F_DADFAILED                             = 0x8
	IFA_F_DEPRECATED                            = 0x20
	IFA_F_HOMEADDRESS                           = 0x10
	IFA_F_MANAGETEMPADDR                        = 0x100
	IFA_F_MCAUTOJOIN                            = 0x400
	IFA_F_NODAD                                 = 0x2
	IFA_F_NOPREFIXROUTE                         = 0x200
	IFA_F_OPTIMISTIC                            = 0x4
	IFA_F_PERMANENT                             = 0x80
	IFA_F_SECONDARY                             = 0x1
	IFA_F_STABLE_PRIVACY                        = 0x800
	IFA_F_TEMPORARY                             = 0x1
	IFA_F_TENTATIVE                             = 0x40
	IFA_MAX                                     = 0xb
	IFF_ALLMULTI                                = 0x200
	IFF_ATTACH_QUEUE                            = 0x200
	IFF_AUTOMEDIA                               = 0x4000
	IFF_BROADCAST                               = 0x2
	IFF_DEBUG                                   = 0x4
	IFF_DETACH_QUEUE                            = 0x400
	IFF_DORMANT                                 = 0x20000
	IFF_DYNAMIC                                 = 0x8000
	IFF_ECHO                                    = 0x40000
	IFF_LOOPBACK                                = 0x8
	IFF_LOWER_UP                                = 0x10000
	IFF_MASTER                                  = 0x400
	IFF_MULTICAST                               = 0x1000
	IFF_MULTI_QUEUE                             = 0x100
	IFF_NAPI                                    = 0x10
	IFF_NAPI_FRAGS                              = 0x20
	IFF_NOARP                                   = 0x80
	IFF_NOFILTER                                = 0x1000
	IFF_NOTRAILERS                              = 0x20
	IFF_NO_CARRIER                              = 0x40
	IFF_NO_PI                                   = 0x1000
	IFF_ONE_QUEUE                               = 0x2000
	IFF_PERSIST                                 = 0x800
	IFF_POINTOPOINT                             = 0x10
	IFF_PORTSEL                                 = 0x2000
	IFF_PROMISC                                 = 0x100
	IFF_RUNNING                                 = 0x40
	IFF_SLAVE                                   = 0x800
	IFF_TAP                                     = 0x2
	IFF_TUN                                     = 0x1
	IFF_TUN_EXCL                                = 0x8000
	IFF_UP                                      = 0x1
	IFF_VNET_HDR                                = 0x4000
	IFF_VOLATILE                                = 0x70c5a
	IFNAMSIZ                                    = 0x10
	IGNBRK                                      = 0x1
	IGNCR                                       = 0x80
	IGNPAR                                      = 0x4
	IMAXBEL                                     = 0x2000
	INLCR                                       = 0x40
	INPCK                                       = 0x10
	IN_ACCESS                                   = 0x1
	IN_ALL_EVENTS                               = 0xfff
	IN_ATTRIB                                   = 0x4
	IN_CLASSA_HOST                              = 0xffffff
	IN_CLASSA_MAX                               = 0x80
	IN_CLASSA_NET                               = 0xff000000
	IN_CLASSA_NSHIFT                            = 0x18
	IN_CLASSB_HOST                              = 0xffff
	IN_CLASSB_MAX                               = 0x10000
	IN_CLASSB_NET                               = 0xffff0000
	IN_CLASSB_NSHIFT                            = 0x10
	IN_CLASSC_HOST                              = 0xff
	IN_CLASSC_NET                               = 0xffffff00
	IN_CLASSC_NSHIFT                            = 0x8
	IN_CLOSE                                    = 0x18
	IN_CLOSE_NOWRITE                            = 0x10
	IN_CLOSE_WRITE                              = 0x8
	IN_CREATE                                   = 0x100
	IN_DELETE                                   = 0x200
	IN_DELETE_SELF                              = 0x400
	IN_DONT_FOLLOW                              = 0x2000000
	IN_EXCL_UNLINK                              = 0x4000000
	IN_IGNORED                                  = 0x8000
	IN_ISDIR                                    = 0x40000000
	IN_LOOPBACKNET                              = 0x7f
	IN_MASK_ADD                                 = 0x20000000
	IN_MASK_CREATE                              = 0x10000000
	IN_MODIFY                                   = 0x2
	IN_MOVE                                     = 0xc0
	IN_MOVED_FROM                               = 0x40
	IN_MOVED_TO                                 = 0x80
	IN_MOVE_SELF                                = 0x800
	IN_ONESHOT                                  = 0x80000000
	IN_ONLYDIR                                  = 0x1000000
	IN_OPEN                                     = 0x20
	IN_Q_OVERFLOW                               = 0x4000
	IN_UNMOUNT                                  = 0x2000
	IPPROTO_AH                                  = 0x33
	IPPROTO_BEETPH                              = 0x5e
	IPPROTO_COMP                                = 0x6c
	IPPROTO_DCCP                                = 0x21
	IPPROTO_DSTOPTS                             = 0x3c
	IPPROTO_EGP                                 = 0x8
	IPPROTO_ENCAP                               = 0x62
	IPPROTO_ESP                                 = 0x32
	IPPROTO_ETHERNET                            = 0x8f
	IPPROTO_FRAGMENT                            = 0x2c
	IPPROTO_GRE                                 = 0x2f
	IPPROTO_HOPOPTS                             = 0x0
	IPPROTO_ICMP                                = 0x1
	IPPROTO_ICMPV6                              = 0x3a
	IPPROTO_IDP                                 = 0x16
	IPPROTO_IGMP                                = 0x2
	IPPROTO_IP                                  = 0x0
	IPPROTO_IPIP                                = 0x4
	IPPROTO_IPV6                                = 0x29
	IPPROTO_L2TP                                = 0x73
	IPPROTO_MH                                  = 0x87
	IPPROTO_MPLS                                = 0x89
	IPPROTO_MPTCP                               = 0x106
	IPPROTO_MTP                                 = 0x5c
	IPPROTO_NONE                                = 0x3b
	IPPROTO_PIM                                 = 0x67
	IPPROTO_PUP                                 = 0xc
	IPPROTO_RAW                                 = 0xff
	IPPROTO_ROUTING                             = 0x2b
	IPPROTO_RSVP                                = 0x2e
	IPPROTO_SCTP                                = 0x84
	IPPROTO_TCP                                 = 0x6
	IPPROTO_TP                                  = 0x1d
	IPPROTO_UDP                                 = 0x11
	IPPROTO_UDPLITE                             = 0x88
	IPV6_2292DSTOPTS                            = 0x4
	IPV6_2292HOPLIMIT                           = 0x8
	IPV6_2292HOPOPTS                            = 0x3
	IPV6_2292PKTINFO                            = 0x2
	IPV6_2292PKTOPTIONS                         = 0x6
	IPV6_2292RTHDR                              = 0x5
	IPV6_ADDRFORM                               = 0x1
	IPV6_ADDR_PREFERENCES                       = 0x48
	IPV6_ADD_MEMBERSHIP                         = 0x14
	IPV6_AUTHHDR                                = 0xa
	IPV6_AUTOFLOWLABEL                          = 0x46
	IPV6_CHECKSUM                               = 0x7
	IPV6_DONTFRAG                               = 0x3e
	IPV6_DROP_MEMBERSHIP                        = 0x15
	IPV6_DSTOPTS                                = 0x3b
	IPV6_FLOW                                   = 0x11
	IPV6_FREEBIND                               = 0x4e
	IPV6_HDRINCL                                = 0x24
	IPV6_HOPLIMIT                               = 0x34
	IPV6_HOPOPTS                                = 0x36
	IPV6_IPSEC_POLICY                           = 0x22
	IPV6_JOIN_ANYCAST                           = 0x1b
	IPV6_JOIN_GROUP                             = 0x14
	IPV6_LEAVE_ANYCAST                          = 0x1c
	IPV6_LEAVE_GROUP                            = 0x15
	IPV6_MINHOPCOUNT                            = 0x49
	IPV6_MTU                                    = 0x18
	IPV6_MTU_DISCOVER                           = 0x17
	IPV6_MULTICAST_ALL                          = 0x1d
	IPV6_MULTICAST_HOPS                         = 0x12
	IPV6_MULTICAST_IF                           = 0x11
	IPV6_MULTICAST_LOOP                         = 0x13
	IPV6_NEXTHOP                                = 0x9
	IPV6_ORIGDSTADDR                            = 0x4a
	IPV6_PATHMTU                                = 0x3d
	IPV6_PKTINFO                                = 0x32
	IPV6_PMTUDISC_DO                            = 0x2
	IPV6_PMTUDISC_DONT                          = 0x0
	IPV6_PMTUDISC_INTERFACE                     = 0x4
	IPV6_PMTUDISC_OMIT                          = 0x5
	IPV6_PMTUDISC_PROBE                         = 0x3
	IPV6_PMTUDISC_WANT                          = 0x1
	IPV6_RECVDSTOPTS                            = 0x3a
	IPV6_RECVERR                                = 0x19
	IPV6_RECVERR_RFC4884                        = 0x1f
	IPV6_RECVFRAGSIZE                           = 0x4d
	IPV6_RECVHOPLIMIT                           = 0x33
	IPV6_RECVHOPOPTS                            = 0x35
	IPV6_RECVORIGDSTADDR                        = 0x4a
	IPV6_RECVPATHMTU                            = 0x3c
	IPV6_RECVPKTINFO                            = 0x31
	IPV6_RECVRTHDR                              = 0x38
	IPV6_RECVTCLASS                             = 0x42
	IPV6_ROUTER_ALERT                           = 0x16
	IPV6_ROUTER_ALERT_ISOLATE                   = 0x1e
	IPV6_RTHDR                                  = 0x39
	IPV6_RTHDRDSTOPTS                           = 0x37
	IPV6_RTHDR_LOOSE                            = 0x0
	IPV6_RTHDR_STRICT                           = 0x1
	IPV6_RTHDR_TYPE_0                           = 0x0
	IPV6_RXDSTOPTS                              = 0x3b
	IPV6_RXHOPOPTS                              = 0x36
	IPV6_TCLASS                                 = 0x43
	IPV6_TRANSPARENT                            = 0x4b
	IPV6_UNICAST_HOPS                           = 0x10
	IPV6_UNICAST_IF                             = 0x4c
	IPV6_USER_FLOW                              = 0xe
	IPV6_V6ONLY                                 = 0x1a
	IPV6_XFRM_POLICY                            = 0x23
	IP_ADD_MEMBERSHIP                           = 0x23
	IP_ADD_SOURCE_MEMBERSHIP                    = 0x27
	IP_BIND_ADDRESS_NO_PORT                     = 0x18
	IP_BLOCK_SOURCE                             = 0x26
	IP_CHECKSUM                                 = 0x17
	IP_DEFAULT_MULTICAST_LOOP                   = 0x1
	IP_DEFAULT_MULTICAST_TTL                    = 0x1
	IP_DF                                       = 0x4000
	IP_DROP_MEMBERSHIP                          = 0x24
	IP_DROP_SOURCE_MEMBERSHIP                   = 0x28
	IP_FREEBIND                                 = 0xf
	IP_HDRINCL                                  = 0x3
	IP_IPSEC_POLICY                             = 0x10
	IP_MAXPACKET                                = 0xffff
	IP_MAX_MEMBERSHIPS                          = 0x14
	IP_MF                                       = 0x2000
	IP_MINTTL                                   = 0x15
	IP_MSFILTER                                 = 0x29
	IP_MSS                                      = 0x240
	IP_MTU                                      = 0xe
	IP_MTU_DISCOVER                             = 0xa
	IP_MULTICAST_ALL                            = 0x31
	IP_MULTICAST_IF                             = 0x20
	IP_MULTICAST_LOOP                           = 0x22
	IP_MULTICAST_TTL                            = 0x21
	IP_NODEFRAG                                 = 0x16
	IP_OFFMASK                                  = 0x1fff
	IP_OPTIONS                                  = 0x4
	IP_ORIGDSTADDR                              = 0x14
	IP_PASSSEC                                  = 0x12
	IP_PKTINFO                                  = 0x8
	IP_PKTOPTIONS                               = 0x9
	IP_PMTUDISC                                 = 0xa
	IP_PMTUDISC_DO                              = 0x2
	IP_PMTUDISC_DONT                            = 0x0
	IP_PMTUDISC_INTERFACE                       = 0x4
	IP_PMTUDISC_OMIT                            = 0x5
	IP_PMTUDISC_PROBE                           = 0x3
	IP_PMTUDISC_WANT                            = 0x1
	IP_RECVERR                                  = 0xb
	IP_RECVERR_RFC4884                          = 0x1a
	IP_RECVFRAGSIZE                             = 0x19
	IP_RECVOPTS                                 = 0x6
	IP_RECVORIGDSTADDR                          = 0x14
	IP_RECVRETOPTS                              = 0x7
	IP_RECVTOS                                  = 0xd
	IP_RECVTTL                                  = 0xc
	IP_RETOPTS                                  = 0x7
	IP_RF                                       = 0x8000
	IP_ROUTER_ALERT                             = 0x5
	IP_TOS                                      = 0x1
	IP_TRANSPARENT                              = 0x13
	IP_TTL                                      = 0x2
	IP_UNBLOCK_SOURCE                           = 0x25
	IP_UNICAST_IF                               = 0x32
	IP_USER_FLOW                                = 0xd
	IP_XFRM_POLICY                              = 0x11
	ISOFS_SUPER_MAGIC                           = 0x9660
	ISTRIP                                      = 0x20
	ITIMER_PROF                                 = 0x2
	ITIMER_REAL                                 = 0x0
	ITIMER_VIRTUAL                              = 0x1
	IUTF8                                       = 0x4000
	IXANY                                       = 0x800
	JFFS2_SUPER_MAGIC                           = 0x72b6
	KCMPROTO_CONNECTED                          = 0x0
	KCM_RECV_DISABLE                            = 0x1
	KEXEC_ARCH_386                              = 0x30000
	KEXEC_ARCH_68K                              = 0x40000
	KEXEC_ARCH_AARCH64                          = 0xb70000
	KEXEC_ARCH_ARM                              = 0x280000
	KEXEC_ARCH_DEFAULT                          = 0x0
	KEXEC_ARCH_IA_64                            = 0x320000
	KEXEC_ARCH_LOONGARCH                        = 0x1020000
	KEXEC_ARCH_MASK                             = 0xffff0000
	KEXEC_ARCH_MIPS                             = 0x80000
	KEXEC_ARCH_MIPS_LE                          = 0xa0000
	KEXEC_ARCH_PARISC                           = 0xf0000
	KEXEC_ARCH_PPC                              = 0x140000
	KEXEC_ARCH_PPC64                            = 0x150000
	KEXEC_ARCH_RISCV                            = 0xf30000
	KEXEC_ARCH_S390                             = 0x160000
	KEXEC_ARCH_SH                               = 0x2a0000
	KEXEC_ARCH_X86_64                           = 0x3e0000
	KEXEC_FILE_NO_INITRAMFS                     = 0x4
	KEXEC_FILE_ON_CRASH                         = 0x2
	KEXEC_FILE_UNLOAD                           = 0x1
	KEXEC_ON_CRASH                              = 0x1
	KEXEC_PRESERVE_CONTEXT                      = 0x2
	KEXEC_SEGMENT_MAX                           = 0x10
	KEYCTL_ASSUME_AUTHORITY                     = 0x10
	KEYCTL_CAPABILITIES                         = 0x1f
	KEYCTL_CAPS0_BIG_KEY                        = 0x10
	KEYCTL_CAPS0_CAPABILITIES                   = 0x1
	KEYCTL_CAPS0_DIFFIE_HELLMAN                 = 0x4
	KEYCTL_CAPS0_INVALIDATE                     = 0x20
	KEYCTL_CAPS0_MOVE                           = 0x80
	KEYCTL_CAPS0_PERSISTENT_KEYRINGS            = 0x2
	KEYCTL_CAPS0_PUBLIC_KEY                     = 0x8
	KEYCTL_CAPS0_RESTRICT_KEYRING               = 0x40
	KEYCTL_CAPS1_NOTIFICATIONS                  = 0x4
	KEYCTL_CAPS1_NS_KEYRING_NAME                = 0x1
	KEYCTL_CAPS1_NS_KEY_TAG                     = 0x2
	KEYCTL_CHOWN                                = 0x4
	KEYCTL_CLEAR                                = 0x7
	KEYCTL_DESCRIBE                             = 0x6
	KEYCTL_DH_COMPUTE                           = 0x17
	KEYCTL_GET_KEYRING_ID                       = 0x0
	KEYCTL_GET_PERSISTENT                       = 0x16
	KEYCTL_GET_SECURITY                         = 0x11
	KEYCTL_INSTANTIATE                          = 0xc
	KEYCTL_INSTANTIATE_IOV                      = 0x14
	KEYCTL_INVALIDATE                           = 0x15
	KEYCTL_JOIN_SESSION_KEYRING                 = 0x1
	KEYCTL_LINK                                 = 0x8
	KEYCTL_MOVE                                 = 0x1e
	KEYCTL_MOVE_EXCL                            = 0x1
	KEYCTL_NEGATE                               = 0xd
	KEYCTL_PKEY_DECRYPT                         = 0x1a
	KEYCTL_PKEY_ENCRYPT                         = 0x19
	KEYCTL_PKEY_QUERY                           = 0x18
	KEYCTL_PKEY_SIGN                            = 0x1b
	KEYCTL_PKEY_VERIFY                          = 0x1c
	KEYCTL_READ                                 = 0xb
	KEYCTL_REJECT                               = 0x13
	KEYCTL_RESTRICT_KEYRING                     = 0x1d
	KEYCTL_REVOKE                               = 0x3
	KEYCTL_SEARCH                               = 0xa
	KEYCTL_SESSION_TO_PARENT                    = 0x12
	KEYCTL_SETPERM                              = 0x5
	KEYCTL_SET_REQKEY_KEYRING                   = 0xe
	KEYCTL_SET_TIMEOUT                          = 0xf
	KEYCTL_SUPPORTS_DECRYPT                     = 0x2
	KEYCTL_SUPPORTS_ENCRYPT                     = 0x1
	KEYCTL_SUPPORTS_SIGN                        = 0x4
	KEYCTL_SUPPORTS_VERIFY                      = 0x8
	KEYCTL_UNLINK                               = 0x9
	KEYCTL_UPDATE                               = 0x2
	KEYCTL_WATCH_KEY                            = 0x20
	KEY_REQKEY_DEFL_DEFAULT                     = 0x0
	KEY_REQKEY_DEFL_GROUP_KEYRING               = 0x6
	KEY_REQKEY_DEFL_NO_CHANGE                   = -0x1
	KEY_REQKEY_DEFL_PROCESS_KEYRING             = 0x2
	KEY_REQKEY_DEFL_REQUESTOR_KEYRING           = 0x7
	KEY_REQKEY_DEFL_SESSION_KEYRING             = 0x3
	KEY_REQKEY_DEFL_THREAD_KEYRING              = 0x1
	KEY_REQKEY_DEFL_USER_KEYRING                = 0x4
	KEY_REQKEY_DEFL_USER_SESSION_KEYRING        = 0x5
	KEY_SPEC_GROUP_KEYRING                      = -0x6
	KEY_SPEC_PROCESS_KEYRING                    = -0x2
	KEY_SPEC_REQKEY_AUTH_KEY                    = -0x7
	KEY_SPEC_REQUESTOR_KEYRING                  = -0x8
	KEY_SPEC_SESSION_KEYRING                    = -0x3
	KEY_SPEC_THREAD_KEYRING                     = -0x1
	KEY_SPEC_USER_KEYRING                       = -0x4
	KEY_SPEC_USER_SESSION_KEYRING               = -0x5
	LANDLOCK_ACCESS_FS_EXECUTE                  = 0x1
	LANDLOCK_ACCESS_FS_MAKE_BLOCK               = 0x800
	LANDLOCK_ACCESS_FS_MAKE_CHAR                = 0x40
	LANDLOCK_ACCESS_FS_MAKE_DIR                 = 0x80
	LANDLOCK_ACCESS_FS_MAKE_FIFO                = 0x400
	LANDLOCK_ACCESS_FS_MAKE_REG                 = 0x100
	LANDLOCK_ACCESS_FS_MAKE_SOCK                = 0x200
	LANDLOCK_ACCESS_FS_MAKE_SYM                 = 0x1000
	LANDLOCK_ACCESS_FS_READ_DIR                 = 0x8
	LANDLOCK_ACCESS_FS_READ_FILE                = 0x4
	LANDLOCK_ACCESS_FS_REFER                    = 0x2000
	LANDLOCK_ACCESS_FS_REMOVE_DIR               = 0x10
	LANDLOCK_ACCESS_FS_REMOVE_FILE              = 0x20
	LANDLOCK_ACCESS_FS_TRUNCATE                 = 0x4000
	LANDLOCK_ACCESS_FS_WRITE_FILE               = 0x2
	LANDLOCK_CREATE_RULESET_VERSION             = 0x1
	LINUX_REBOOT_CMD_CAD_OFF                    = 0x0
	LINUX_REBOOT_CMD_CAD_ON                     = 0x89abcdef
	LINUX_REBOOT_CMD_HALT                       = 0xcdef0123
	LINUX_REBOOT_CMD_KEXEC                      = 0x45584543
	LINUX_REBOOT_CMD_POWER_OFF                  = 0x4321fedc
	LINUX_REBOOT_CMD_RESTART                    = 0x1234567
	LINUX_REBOOT_CMD_RESTART2                   = 0xa1b2c3d4
	LINUX_REBOOT_CMD_SW_SUSPEND                 = 0xd000fce2
	LINUX_REBOOT_MAGIC1                         = 0xfee1dead
	LINUX_REBOOT_MAGIC2                         = 0x28121969
	LOCK_EX                                     = 0x2
	LOCK_NB                                     = 0x4
	LOCK_SH                                     = 0x1
	LOCK_UN                                     = 0x8
	LOOP_CLR_FD                                 = 0x4c01
	LOOP_CTL_ADD                                = 0x4c80
	LOOP_CTL_GET_FREE                           = 0x4c82
	LOOP_CTL_REMOVE                             = 0x4c81
	LOOP_GET_STATUS                             = 0x4c03
	LOOP_GET_STATUS64                           = 0x4c05
	LOOP_SET_BLOCK_SIZE                         = 0x4c09
	LOOP_SET_CAPACITY                           = 0x4c07
	LOOP_SET_DIRECT_IO                          = 0x4c08
	LOOP_SET_FD                                 = 0x4c00
	LOOP_SET_STATUS                             = 0x4c02
	LOOP_SET_STATUS64                           = 0x4c04
	LOOP_SET_STATUS_CLEARABLE_FLAGS             = 0x4
	LOOP_SET_STATUS_SETTABLE_FLAGS              = 0xc
	LO_KEY_SIZE                                 = 0x20
	LO_NAME_SIZE                                = 0x40
	LWTUNNEL_IP6_MAX                            = 0x8
	LWTUNNEL_IP_MAX                             = 0x8
	LWTUNNEL_IP_OPTS_MAX                        = 0x3
	LWTUNNEL_IP_OPT_ERSPAN_MAX                  = 0x4
	LWTUNNEL_IP_OPT_GENEVE_MAX                  = 0x3
	LWTUNNEL_IP_OPT_VXLAN_MAX                   = 0x1
	MADV_COLD                                   = 0x14
	MADV_COLLAPSE                               = 0x19
	MADV_DODUMP                                 = 0x11
	MADV_DOFORK                                 = 0xb
	MADV_DONTDUMP                               = 0x10
	MADV_DONTFORK                               = 0xa
	MADV_DONTNEED                               = 0x4
	MADV_DONTNEED_LOCKED                        = 0x18
	MADV_FREE                                   = 0x8
	MADV_HUGEPAGE                               = 0xe
	MADV_HWPOISON                               = 0x64
	MADV_KEEPONFORK                             = 0x13
	MADV_MERGEABLE                              = 0xc
	MADV_NOHUGEPAGE                             = 0xf
	MADV_NORMAL                                 = 0x0
	MADV_PAGEOUT                                = 0x15
	MADV_POPULATE_READ                          = 0x16
	MADV_POPULATE_WRITE                         = 0x17
	MADV_RANDOM                                 = 0x1
	MADV_REMOVE                                 = 0x9
	MADV_SEQUENTIAL                             = 0x2
	MADV_UNMERGEABLE                            = 0xd
	MADV_WILLNEED                               = 0x3
	MADV_WIPEONFORK                             = 0x12
	MAP_FILE                                    = 0x0
	MAP_FIXED                                   = 0x10
	MAP_FIXED_NOREPLACE                         = 0x100000
	MAP_HUGE_MASK                               = 0x3f
	MAP_HUGE_SHIFT                              = 0x1a
	MAP_PRIVATE                                 = 0x2
	MAP_SHARED                                  = 0x1
	MAP_SHARED_VALIDATE                         = 0x3
	MAP_TYPE                                    = 0xf
	MCAST_BLOCK_SOURCE                          = 0x2b
	MCAST_EXCLUDE                               = 0x0
	MCAST_INCLUDE                               = 0x1
	MCAST_JOIN_GROUP                            = 0x2a
	MCAST_JOIN_SOURCE_GROUP                     = 0x2e
	MCAST_LEAVE_GROUP                           = 0x2d
	MCAST_LEAVE_SOURCE_GROUP                    = 0x2f
	MCAST_MSFILTER                              = 0x30
	MCAST_UNBLOCK_SOURCE                        = 0x2c
	MEMGETREGIONINFO                            = 0xc0104d08
	MEMREADOOB64                                = 0xc0184d16
	MEMWRITE                                    = 0xc0304d18
	MEMWRITEOOB64                               = 0xc0184d15
	MFD_ALLOW_SEALING                           = 0x2
	MFD_CLOEXEC                                 = 0x1
	MFD_HUGETLB                                 = 0x4
	MFD_HUGE_16GB                               = 0x88000000
	MFD_HUGE_16MB                               = 0x60000000
	MFD_HUGE_1GB                                = 0x78000000
	MFD_HUGE_1MB                                = 0x50000000
	MFD_HUGE_256MB                              = 0x70000000
	MFD_HUGE_2GB                                = 0x7c000000
	MFD_HUGE_2MB                                = 0x54000000
	MFD_HUGE_32MB                               = 0x64000000
	MFD_HUGE_512KB                              = 0x4c000000
	MFD_HUGE_512MB                              = 0x74000000
	MFD_HUGE_64KB                               = 0x40000000
	MFD_HUGE_8MB                                = 0x5c000000
	MFD_HUGE_MASK                               = 0x3f
	MFD_HUGE_SHIFT                              = 0x1a
	MINIX2_SUPER_MAGIC                          = 0x2468
	MINIX2_SUPER_MAGIC2                         = 0x2478
	MINIX3_SUPER_MAGIC                          = 0x4d5a
	MINIX_SUPER_MAGIC                           = 0x137f
	MINIX_SUPER_MAGIC2                          = 0x138f
	MNT_DETACH                                  = 0x2
	MNT_EXPIRE                                  = 0x4
	MNT_FORCE                                   = 0x1
	MODULE_INIT_COMPRESSED_FILE                 = 0x4
	MODULE_INIT_IGNORE_MODVERSIONS              = 0x1
	MODULE_INIT_IGNORE_VERMAGIC                 = 0x2
	MOUNT_ATTR_IDMAP                            = 0x100000
	MOUNT_ATTR_NOATIME                          = 0x10
	MOUNT_ATTR_NODEV                            = 0x4
	MOUNT_ATTR_NODIRATIME                       = 0x80
	MOUNT_ATTR_NOEXEC                           = 0x8
	MOUNT_ATTR_NOSUID                           = 0x2
	MOUNT_ATTR_NOSYMFOLLOW                      = 0x200000
	MOUNT_ATTR_RDONLY                           = 0x1
	MOUNT_ATTR_RELATIME                         = 0x0
	MOUNT_ATTR_SIZE_VER0                        = 0x20
	MOUNT_ATTR_STRICTATIME                      = 0x20
	MOUNT_ATTR__ATIME                           = 0x70
	MSDOS_SUPER_MAGIC                           = 0x4d44
	MSG_BATCH                                   = 0x40000
	MSG_CMSG_CLOEXEC                            = 0x40000000
	MSG_CONFIRM                                 = 0x800
	MSG_CTRUNC                                  = 0x8
	MSG_DONTROUTE                               = 0x4
	MSG_DONTWAIT                                = 0x40
	MSG_EOR                                     = 0x80
	MSG_ERRQUEUE                                = 0x2000
	MSG_FASTOPEN                                = 0x20000000
	MSG_FIN                                     = 0x200
	MSG_MORE                                    = 0x8000
	MSG_NOSIGNAL                                = 0x4000
	MSG_OOB                                     = 0x1
	MSG_PEEK                                    = 0x2
	MSG_PROXY                                   = 0x10
	MSG_RST                                     = 0x1000
	MSG_SYN                                     = 0x400
	MSG_TRUNC                                   = 0x20
	MSG_TRYHARD                                 = 0x4
	MSG_WAITALL                                 = 0x100
	MSG_WAITFORONE                              = 0x10000
	MSG_ZEROCOPY                                = 0x4000000
	MS_ACTIVE                                   = 0x40000000
	MS_ASYNC                                    = 0x1
	MS_BIND                                     = 0x1000
	MS_BORN                                     = 0x20000000
	MS_DIRSYNC                                  = 0x80
	MS_INVALIDATE                               = 0x2
	MS_I_VERSION                                = 0x800000
	MS_KERNMOUNT                                = 0x400000
	MS_LAZYTIME                                 = 0x2000000
	MS_MANDLOCK                                 = 0x40
	MS_MGC_MSK                                  = 0xffff0000
	MS_MGC_VAL                                  = 0xc0ed0000
	MS_MOVE                                     = 0x2000
	MS_NOATIME                                  = 0x400
	MS_NODEV                                    = 0x4
	MS_NODIRATIME                               = 0x800
	MS_NOEXEC                                   = 0x8
	MS_NOREMOTELOCK                             = 0x8000000
	MS_NOSEC                                    = 0x10000000
	MS_NOSUID                                   = 0x2
	MS_NOSYMFOLLOW                              = 0x100
	MS_NOUSER                                   = -0x80000000
	MS_POSIXACL                                 = 0x10000
	MS_PRIVATE                                  = 0x40000
	MS_RDONLY                                   = 0x1
	MS_REC                                      = 0x4000
	MS_RELATIME                                 = 0x200000
	MS_REMOUNT                                  = 0x20
	MS_RMT_MASK                                 = 0x2800051
	MS_SHARED                                   = 0x100000
	MS_SILENT                                   = 0x8000
	MS_SLAVE                                    = 0x80000
	MS_STRICTATIME                              = 0x1000000
	MS_SUBMOUNT                                 = 0x4000000
	MS_SYNC                                     = 0x4
	MS_SYNCHRONOUS                              = 0x10
	MS_UNBINDABLE                               = 0x20000
	MS_VERBOSE                                  = 0x8000
	MTD_ABSENT                                  = 0x0
	MTD_BIT_WRITEABLE                           = 0x800
	MTD_CAP_NANDFLASH                           = 0x400
	MTD_CAP_NORFLASH                            = 0xc00
	MTD_CAP_NVRAM                               = 0x1c00
	MTD_CAP_RAM                                 = 0x1c00
	MTD_CAP_ROM                                 = 0x0
	MTD_DATAFLASH                               = 0x6
	MTD_INODE_FS_MAGIC                          = 0x11307854
	MTD_MAX_ECCPOS_ENTRIES                      = 0x40
	MTD_MAX_OOBFREE_ENTRIES                     = 0x8
	MTD_MLCNANDFLASH                            = 0x8
	MTD_NANDECC_AUTOPLACE                       = 0x2
	MTD_NANDECC_AUTOPL_USR                      = 0x4
	MTD_NANDECC_OFF                             = 0x0
	MTD_NANDECC_PLACE                           = 0x1
	MTD_NANDECC_PLACEONLY                       = 0x3
	MTD_NANDFLASH                               = 0x4
	MTD_NORFLASH                                = 0x3
	MTD_NO_ERASE                                = 0x1000
	MTD_OTP_FACTORY                             = 0x1
	MTD_OTP_OFF                                 = 0x0
	MTD_OTP_USER                                = 0x2
	MTD_POWERUP_LOCK                            = 0x2000
	MTD_RAM                                     = 0x1
	MTD_ROM                                     = 0x2
	MTD_SLC_ON_MLC_EMULATION                    = 0x4000
	MTD_UBIVOLUME                               = 0x7
	MTD_WRITEABLE                               = 0x400
	NAME_MAX                                    = 0xff
	NCP_SUPER_MAGIC                             = 0x564c
	NETLINK_ADD_MEMBERSHIP                      = 0x1
	NETLINK_AUDIT                               = 0x9
	NETLINK_BROADCAST_ERROR                     = 0x4
	NETLINK_CAP_ACK                             = 0xa
	NETLINK_CONNECTOR                           = 0xb
	NETLINK_CRYPTO                              = 0x15
	NETLINK_DNRTMSG                             = 0xe
	NETLINK_DROP_MEMBERSHIP                     = 0x2
	NETLINK_ECRYPTFS                            = 0x13
	NETLINK_EXT_ACK                             = 0xb
	NETLINK_FIB_LOOKUP                          = 0xa
	NETLINK_FIREWALL                            = 0x3
	NETLINK_GENERIC                             = 0x10
	NETLINK_GET_STRICT_CHK                      = 0xc
	NETLINK_INET_DIAG                           = 0x4
	NETLINK_IP6_FW                              = 0xd
	NETLINK_ISCSI                               = 0x8
	NETLINK_KOBJECT_UEVENT                      = 0xf
	NETLINK_LISTEN_ALL_NSID                     = 0x8
	NETLINK_LIST_MEMBERSHIPS                    = 0x9
	NETLINK_NETFILTER                           = 0xc
	NETLINK_NFLOG                               = 0x5
	NETLINK_NO_ENOBUFS                          = 0x5
	NETLINK_PKTINFO                             = 0x3
	NETLINK_RDMA                                = 0x14
	NETLINK_ROUTE                               = 0x0
	NETLINK_RX_RING                             = 0x6
	NETLINK_SCSITRANSPORT                       = 0x12
	NETLINK_SELINUX                             = 0x7
	NETLINK_SMC                                 = 0x16
	NETLINK_SOCK_DIAG                           = 0x4
	NETLINK_TX_RING                             = 0x7
	NETLINK_UNUSED                              = 0x1
	NETLINK_USERSOCK                            = 0x2
	NETLINK_XFRM                                = 0x6
	NETNSA_MAX                                  = 0x5
	NETNSA_NSID_NOT_ASSIGNED                    = -0x1
	NFC_ATR_REQ_GB_MAXSIZE                      = 0x30
	NFC_ATR_REQ_MAXSIZE                         = 0x40
	NFC_ATR_RES_GB_MAXSIZE                      = 0x2f
	NFC_ATR_RES_MAXSIZE                         = 0x40
	NFC_COMM_ACTIVE                             = 0x0
	NFC_COMM_PASSIVE                            = 0x1
	NFC_DEVICE_NAME_MAXSIZE                     = 0x8
	NFC_DIRECTION_RX                            = 0x0
	NFC_DIRECTION_TX                            = 0x1
	NFC_FIRMWARE_NAME_MAXSIZE                   = 0x20
	NFC_GB_MAXSIZE                              = 0x30
	NFC_GENL_MCAST_EVENT_NAME                   = "events"
	NFC_GENL_NAME                               = "nfc"
	NFC_GENL_VERSION                            = 0x1
	NFC_HEADER_SIZE                             = 0x1
	NFC_ISO15693_UID_MAXSIZE                    = 0x8
	NFC_LLCP_MAX_SERVICE_NAME                   = 0x3f
	NFC_LLCP_MIUX                               = 0x1
	NFC_LLCP_REMOTE_LTO                         = 0x3
	NFC_LLCP_REMOTE_MIU                         = 0x2
	NFC_LLCP_REMOTE_RW                          = 0x4
	NFC_LLCP_RW                                 = 0x0
	NFC_NFCID1_MAXSIZE                          = 0xa
	NFC_NFCID2_MAXSIZE                          = 0x8
	NFC_NFCID3_MAXSIZE                          = 0xa
	NFC_PROTO_FELICA                            = 0x3
	NFC_PROTO_FELICA_MASK                       = 0x8
	NFC_PROTO_ISO14443                          = 0x4
	NFC_PROTO_ISO14443_B                        = 0x6
	NFC_PROTO_ISO14443_B_MASK                   = 0x40
	NFC_PROTO_ISO14443_MASK                     = 0x10
	NFC_PROTO_ISO15693                          = 0x7
	NFC_PROTO_ISO15693_MASK                     = 0x80
	NFC_PROTO_JEWEL                             = 0x1
	NFC_PROTO_JEWEL_MASK                        = 0x2
	NFC_PROTO_MAX                               = 0x8
	NFC_PROTO_MIFARE                            = 0x2
	NFC_PROTO_MIFARE_MASK                       = 0x4
	NFC_PROTO_NFC_DEP                           = 0x5
	NFC_PROTO_NFC_DEP_MASK                      = 0x20
	NFC_RAW_HEADER_SIZE                         = 0x2
	NFC_RF_INITIATOR                            = 0x0
	NFC_RF_NONE                                 = 0x2
	NFC_RF_TARGET                               = 0x1
	NFC_SENSB_RES_MAXSIZE                       = 0xc
	NFC_SENSF_RES_MAXSIZE                       = 0x12
	NFC_SE_DISABLED                             = 0x0
	NFC_SE_EMBEDDED                             = 0x2
	NFC_SE_ENABLED                              = 0x1
	NFC_SE_UICC                                 = 0x1
	NFC_SOCKPROTO_LLCP                          = 0x1
	NFC_SOCKPROTO_MAX                           = 0x2
	NFC_SOCKPROTO_RAW                           = 0x0
	NFNETLINK_V0                                = 0x0
	NFNLGRP_ACCT_QUOTA                          = 0x8
	NFNLGRP_CONNTRACK_DESTROY                   = 0x3
	NFNLGRP_CONNTRACK_EXP_DESTROY               = 0x6
	NFNLGRP_CONNTRACK_EXP_NEW                   = 0x4
	NFNLGRP_CONNTRACK_EXP_UPDATE                = 0x5
	NFNLGRP_CONNTRACK_NEW                       = 0x1
	NFNLGRP_CONNTRACK_UPDATE                    = 0x2
	NFNLGRP_MAX                                 = 0x9
	NFNLGRP_NFTABLES                            = 0x7
	NFNLGRP_NFTRACE                             = 0x9
	NFNLGRP_NONE                                = 0x0
	NFNL_BATCH_MAX                              = 0x1
	NFNL_MSG_BATCH_BEGIN                        = 0x10
	NFNL_MSG_BATCH_END                          = 0x11
	NFNL_NFA_NEST                               = 0x8000
	NFNL_SUBSYS_ACCT                            = 0x7
	NFNL_SUBSYS_COUNT                           = 0xd
	NFNL_SUBSYS_CTHELPER                        = 0x9
	NFNL_SUBSYS_CTNETLINK                       = 0x1
	NFNL_SUBSYS_CTNETLINK_EXP                   = 0x2
	NFNL_SUBSYS_CTNETLINK_TIMEOUT               = 0x8
	NFNL_SUBSYS_HOOK                            = 0xc
	NFNL_SUBSYS_IPSET                           = 0x6
	NFNL_SUBSYS_NFTABLES                        = 0xa
	NFNL_SUBSYS_NFT_COMPAT                      = 0xb
	NFNL_SUBSYS_NONE                            = 0x0
	NFNL_SUBSYS_OSF                             = 0x5
	NFNL_SUBSYS_QUEUE                           = 0x3
	NFNL_SUBSYS_ULOG                            = 0x4
	NFS_SUPER_MAGIC                             = 0x6969
	NILFS_SUPER_MAGIC                           = 0x3434
	NL0                                         = 0x0
	NL1                                         = 0x100
	NLA_ALIGNTO                                 = 0x4
	NLA_F_NESTED                                = 0x8000
	NLA_F_NET_BYTEORDER                         = 0x4000
	NLA_HDRLEN                                  = 0x4
	NLMSG_ALIGNTO                               = 0x4
	NLMSG_DONE                                  = 0x3
	NLMSG_ERROR                                 = 0x2
	NLMSG_HDRLEN                                = 0x10
	NLMSG_MIN_TYPE                              = 0x10
	NLMSG_NOOP                                  = 0x1
	NLMSG_OVERRUN                               = 0x4
	NLM_F_ACK                                   = 0x4
	NLM_F_ACK_TLVS                              = 0x200
	NLM_F_APPEND                                = 0x800
	NLM_F_ATOMIC                                = 0x400
	NLM_F_BULK                                  = 0x200
	NLM_F_CAPPED                                = 0x100
	NLM_F_CREATE                                = 0x400
	NLM_F_DUMP                                  = 0x300
	NLM_F_DUMP_FILTERED                         = 0x20
	NLM_F_DUMP_INTR                             = 0x10
	NLM_F_ECHO                                  = 0x8
	NLM_F_EXCL                                  = 0x200
	NLM_F_MATCH                                 = 0x200
	NLM_F_MULTI                                 = 0x2
	NLM_F_NONREC                                = 0x100
	NLM_F_REPLACE                               = 0x100
	NLM_F_REQUEST                               = 0x1
	NLM_F_ROOT                                  = 0x100
	NSFS_MAGIC                                  = 0x6e736673
	OCFS2_SUPER_MAGIC                           = 0x7461636f
	OCRNL                                       = 0x8
	OFDEL                                       = 0x80
	OFILL                                       = 0x40
	ONLRET                                      = 0x20
	ONOCR                                       = 0x10
	OPENPROM_SUPER_MAGIC                        = 0x9fa1
	OPOST                                       = 0x1
	OVERLAYFS_SUPER_MAGIC                       = 0x794c7630
	O_ACCMODE                                   = 0x3
	O_RDONLY                                    = 0x0
	O_RDWR                                      = 0x2
	O_WRONLY                                    = 0x1
	PACKET_ADD_MEMBERSHIP                       = 0x1
	PACKET_AUXDATA                              = 0x8
	PACKET_BROADCAST                            = 0x1
	PACKET_COPY_THRESH                          = 0x7
	PACKET_DROP_MEMBERSHIP                      = 0x2
	PACKET_FANOUT                               = 0x12
	PACKET_FANOUT_CBPF                          = 0x6
	PACKET_FANOUT_CPU                           = 0x2
	PACKET_FANOUT_DATA                          = 0x16
	PACKET_FANOUT_EBPF                          = 0x7
	PACKET_FANOUT_FLAG_DEFRAG                   = 0x8000
	PACKET_FANOUT_FLAG_IGNORE_OUTGOING          = 0x4000
	PACKET_FANOUT_FLAG_ROLLOVER                 = 0x1000
	PACKET_FANOUT_FLAG_UNIQUEID                 = 0x2000
	PACKET_FANOUT_HASH                          = 0x0
	PACKET_FANOUT_LB                            = 0x1
	PACKET_FANOUT_QM                            = 0x5
	PACKET_FANOUT_RND                           = 0x4
	PACKET_FANOUT_ROLLOVER                      = 0x3
	PACKET_FASTROUTE                            = 0x6
	PACKET_HDRLEN                               = 0xb
	PACKET_HOST                                 = 0x0
	PACKET_IGNORE_OUTGOING                      = 0x17
	PACKET_KERNEL                               = 0x7
	PACKET_LOOPBACK                             = 0x5
	PACKET_LOSS                                 = 0xe
	PACKET_MR_ALLMULTI                          = 0x2
	PACKET_MR_MULTICAST                         = 0x0
	PACKET_MR_PROMISC                           = 0x1
	PACKET_MR_UNICAST                           = 0x3
	PACKET_MULTICAST                            = 0x2
	PACKET_ORIGDEV                              = 0x9
	PACKET_OTHERHOST                            = 0x3
	PACKET_OUTGOING                             = 0x4
	PACKET_QDISC_BYPASS                         = 0x14
	PACKET_RECV_OUTPUT                          = 0x3
	PACKET_RESERVE                              = 0xc
	PACKET_ROLLOVER_STATS                       = 0x15
	PACKET_RX_RING                              = 0x5
	PACKET_STATISTICS                           = 0x6
	PACKET_TIMESTAMP                            = 0x11
	PACKET_TX_HAS_OFF                           = 0x13
	PACKET_TX_RING                              = 0xd
	PACKET_TX_TIMESTAMP                         = 0x10
	PACKET_USER                                 = 0x6
	PACKET_VERSION                              = 0xa
	PACKET_VNET_HDR                             = 0xf
	PARITY_CRC16_PR0                            = 0x2
	PARITY_CRC16_PR0_CCITT                      = 0x4
	PARITY_CRC16_PR1                            = 0x3
	PARITY_CRC16_PR1_CCITT                      = 0x5
	PARITY_CRC32_PR0_CCITT                      = 0x6
	PARITY_CRC32_PR1_CCITT                      = 0x7
	PARITY_DEFAULT                              = 0x0
	PARITY_NONE                                 = 0x1
	PARMRK                                      = 0x8
	PERF_ATTR_SIZE_VER0                         = 0x40
	PERF_ATTR_SIZE_VER1                         = 0x48
	PERF_ATTR_SIZE_VER2                         = 0x50
	PERF_ATTR_SIZE_VER3                         = 0x60
	PERF_ATTR_SIZE_VER4                         = 0x68
	PERF_ATTR_SIZE_VER5                         = 0x70
	PERF_ATTR_SIZE_VER6                         = 0x78
	PERF_ATTR_SIZE_VER7                         = 0x80
	PERF_AUX_FLAG_COLLISION                     = 0x8
	PERF_AUX_FLAG_CORESIGHT_FORMAT_CORESIGHT    = 0x0
	PERF_AUX_FLAG_CORESIGHT_FORMAT_RAW          = 0x100
	PERF_AUX_FLAG_OVERWRITE                     = 0x2
	PERF_AUX_FLAG_PARTIAL                       = 0x4
	PERF_AUX_FLAG_PMU_FORMAT_TYPE_MASK          = 0xff00
	PERF_AUX_FLAG_TRUNCATED                     = 0x1
	PERF_BR_ARM64_DEBUG_DATA                    = 0x7
	PERF_BR_ARM64_DEBUG_EXIT                    = 0x5
	PERF_BR_ARM64_DEBUG_HALT                    = 0x4
	PERF_BR_ARM64_DEBUG_INST                    = 0x6
	PERF_BR_ARM64_FIQ                           = 0x3
	PERF_FLAG_FD_CLOEXEC                        = 0x8
	PERF_FLAG_FD_NO_GROUP                       = 0x1
	PERF_FLAG_FD_OUTPUT                         = 0x2
	PERF_FLAG_PID_CGROUP                        = 0x4
	PERF_HW_EVENT_MASK                          = 0xffffffff
	PERF_MAX_CONTEXTS_PER_STACK                 = 0x8
	PERF_MAX_STACK_DEPTH                        = 0x7f
	PERF_MEM_BLK_ADDR                           = 0x4
	PERF_MEM_BLK_DATA                           = 0x2
	PERF_MEM_BLK_NA                             = 0x1
	PERF_MEM_BLK_SHIFT                          = 0x28
	PERF_MEM_HOPS_0                             = 0x1
	PERF_MEM_HOPS_1                             = 0x2
	PERF_MEM_HOPS_2                             = 0x3
	PERF_MEM_HOPS_3                             = 0x4
	PERF_MEM_HOPS_SHIFT                         = 0x2b
	PERF_MEM_LOCK_LOCKED                        = 0x2
	PERF_MEM_LOCK_NA                            = 0x1
	PERF_MEM_LOCK_SHIFT                         = 0x18
	PERF_MEM_LVLNUM_ANY_CACHE                   = 0xb
	PERF_MEM_LVLNUM_CXL                         = 0x9
	PERF_MEM_LVLNUM_IO                          = 0xa
	PERF_MEM_LVLNUM_L1                          = 0x1
	PERF_MEM_LVLNUM_L2                          = 0x2
	PERF_MEM_LVLNUM_L3                          = 0x3
	PERF_MEM_LVLNUM_L4                          = 0x4
	PERF_MEM_LVLNUM_LFB                         = 0xc
	PERF_MEM_LVLNUM_NA                          = 0xf
	PERF_MEM_LVLNUM_PMEM                        = 0xe
	PERF_MEM_LVLNUM_RAM                         = 0xd
	PERF_MEM_LVLNUM_SHIFT                       = 0x21
	PERF_MEM_LVL_HIT                            = 0x2
	PERF_MEM_LVL_IO                             = 0x1000
	PERF_MEM_LVL_L1                             = 0x8
	PERF_MEM_LVL_L2                             = 0x20
	PERF_MEM_LVL_L3                             = 0x40
	PERF_MEM_LVL_LFB                            = 0x10
	PERF_MEM_LVL_LOC_RAM                        = 0x80
	PERF_MEM_LVL_MISS                           = 0x4
	PERF_MEM_LVL_NA                             = 0x1
	PERF_MEM_LVL_REM_CCE1                       = 0x400
	PERF_MEM_LVL_REM_CCE2                       = 0x800
	PERF_MEM_LVL_REM_RAM1                       = 0x100
	PERF_MEM_LVL_REM_RAM2                       = 0x200
	PERF_MEM_LVL_SHIFT                          = 0x5
	PERF_MEM_LVL_UNC                            = 0x2000
	PERF_MEM_OP_EXEC                            = 0x10
	PERF_MEM_OP_LOAD                            = 0x2
	PERF_MEM_OP_NA                              = 0x1
	PERF_MEM_OP_PFETCH                          = 0x8
	PERF_MEM_OP_SHIFT                           = 0x0
	PERF_MEM_OP_STORE                           = 0x4
	PERF_MEM_REMOTE_REMOTE                      = 0x1
	PERF_MEM_REMOTE_SHIFT                       = 0x25
	PERF_MEM_SNOOPX_FWD                         = 0x1
	PERF_MEM_SNOOPX_PEER                        = 0x2
	PERF_MEM_SNOOPX_SHIFT                       = 0x26
	PERF_MEM_SNOOP_HIT                          = 0x4
	PERF_MEM_SNOOP_HITM                         = 0x10
	PERF_MEM_SNOOP_MISS                         = 0x8
	PERF_MEM_SNOOP_NA                           = 0x1
	PERF_MEM_SNOOP_NONE                         = 0x2
	PERF_MEM_SNOOP_SHIFT                        = 0x13
	PERF_MEM_TLB_HIT                            = 0x2
	PERF_MEM_TLB_L1                             = 0x8
	PERF_MEM_TLB_L2                             = 0x10
	PERF_MEM_TLB_MISS                           = 0x4
	PERF_MEM_TLB_NA                             = 0x1
	PERF_MEM_TLB_OS                             = 0x40
	PERF_MEM_TLB_SHIFT                          = 0x1a
	PERF_MEM_TLB_WK                             = 0x20
	PERF_PMU_TYPE_SHIFT                         = 0x20
	PERF_RECORD_KSYMBOL_FLAGS_UNREGISTER        = 0x1
	PERF_RECORD_MISC_COMM_EXEC                  = 0x2000
	PERF_RECORD_MISC_CPUMODE_MASK               = 0x7
	PERF_RECORD_MISC_CPUMODE_UNKNOWN            = 0x0
	PERF_RECORD_MISC_EXACT_IP                   = 0x4000
	PERF_RECORD_MISC_EXT_RESERVED               = 0x8000
	PERF_RECORD_MISC_FORK_EXEC                  = 0x2000
	PERF_RECORD_MISC_GUEST_KERNEL               = 0x4
	PERF_RECORD_MISC_GUEST_USER                 = 0x5
	PERF_RECORD_MISC_HYPERVISOR                 = 0x3
	PERF_RECORD_MISC_KERNEL                     = 0x1
	PERF_RECORD_MISC_MMAP_BUILD_ID              = 0x4000
	PERF_RECORD_MISC_MMAP_DATA                  = 0x2000
	PERF_RECORD_MISC_PROC_MAP_PARSE_TIMEOUT     = 0x1000
	PERF_RECORD_MISC_SWITCH_OUT                 = 0x2000
	PERF_RECORD_MISC_SWITCH_OUT_PREEMPT         = 0x4000
	PERF_RECORD_MISC_USER                       = 0x2
	PERF_SAMPLE_BRANCH_PLM_ALL                  = 0x7
	PERF_SAMPLE_WEIGHT_TYPE                     = 0x1004000
	PIPEFS_MAGIC                                = 0x50495045
	PPPIOCGNPMODE                               = 0xc008744c
	PPPIOCNEWUNIT                               = 0xc004743e
	PRIO_PGRP                                   = 0x1
	PRIO_PROCESS                                = 0x0
	PRIO_USER                                   = 0x2
	PROC_SUPER_MAGIC                            = 0x9fa0
	PROT_EXEC                                   = 0x4
	PROT_GROWSDOWN                              = 0x1000000
	PROT_GROWSUP                                = 0x2000000
	PROT_NONE                                   = 0x0
	PROT_READ                                   = 0x1
	PROT_WRITE                                  = 0x2
	PR_CAPBSET_DROP                             = 0x18
	PR_CAPBSET_READ                             = 0x17
	PR_CAP_AMBIENT                              = 0x2f
	PR_CAP_AMBIENT_CLEAR_ALL                    = 0x4
	PR_CAP_AMBIENT_IS_SET                       = 0x1
	PR_CAP_AMBIENT_LOWER                        = 0x3
	PR_CAP_AMBIENT_RAISE                        = 0x2
	PR_ENDIAN_BIG                               = 0x0
	PR_ENDIAN_LITTLE                            = 0x1
	PR_ENDIAN_PPC_LITTLE                        = 0x2
	PR_FPEMU_NOPRINT                            = 0x1
	PR_FPEMU_SIGFPE                             = 0x2
	PR_FP_EXC_ASYNC                             = 0x2
	PR_FP_EXC_DISABLED                          = 0x0
	PR_FP_EXC_DIV                               = 0x10000
	PR_FP_EXC_INV                               = 0x100000
	PR_FP_EXC_NONRECOV                          = 0x1
	PR_FP_EXC_OVF                               = 0x20000
	PR_FP_EXC_PRECISE                           = 0x3
	PR_FP_EXC_RES                               = 0x80000
	PR_FP_EXC_SW_ENABLE                         = 0x80
	PR_FP_EXC_UND                               = 0x40000
	PR_FP_MODE_FR                               = 0x1
	PR_FP_MODE_FRE                              = 0x2
	PR_GET_CHILD_SUBREAPER                      = 0x25
	PR_GET_DUMPABLE                             = 0x3
	PR_GET_ENDIAN                               = 0x13
	PR_GET_FPEMU                                = 0x9
	PR_GET_FPEXC                                = 0xb
	PR_GET_FP_MODE                              = 0x2e
	PR_GET_IO_FLUSHER                           = 0x3a
	PR_GET_KEEPCAPS                             = 0x7
	PR_GET_NAME                                 = 0x10
	PR_GET_NO_NEW_PRIVS                         = 0x27
	PR_GET_PDEATHSIG                            = 0x2
	PR_GET_SECCOMP                              = 0x15
	PR_GET_SECUREBITS                           = 0x1b
	PR_GET_SPECULATION_CTRL                     = 0x34
	PR_GET_TAGGED_ADDR_CTRL                     = 0x38
	PR_GET_THP_DISABLE                          = 0x2a
	PR_GET_TID_ADDRESS                          = 0x28
	PR_GET_TIMERSLACK                           = 0x1e
	PR_GET_TIMING                               = 0xd
	PR_GET_TSC                                  = 0x19
	PR_GET_UNALIGN                              = 0x5
	PR_MCE_KILL                                 = 0x21
	PR_MCE_KILL_CLEAR                           = 0x0
	PR_MCE_KILL_DEFAULT                         = 0x2
	PR_MCE_KILL_EARLY                           = 0x1
	PR_MCE_KILL_GET                             = 0x22
	PR_MCE_KILL_LATE                            = 0x0
	PR_MCE_KILL_SET                             = 0x1
	PR_MPX_DISABLE_MANAGEMENT                   = 0x2c
	PR_MPX_ENABLE_MANAGEMENT                    = 0x2b
	PR_MTE_TAG_MASK                             = 0x7fff8
	PR_MTE_TAG_SHIFT                            = 0x3
	PR_MTE_TCF_ASYNC                            = 0x4
	PR_MTE_TCF_MASK                             = 0x6
	PR_MTE_TCF_NONE                             = 0x0
	PR_MTE_TCF_SHIFT                            = 0x1
	PR_MTE_TCF_SYNC                             = 0x2
	PR_PAC_APDAKEY                              = 0x4
	PR_PAC_APDBKEY                              = 0x8
	PR_PAC_APGAKEY                              = 0x10
	PR_PAC_APIAKEY                              = 0x1
	PR_PAC_APIBKEY                              = 0x2
	PR_PAC_GET_ENABLED_KEYS                     = 0x3d
	PR_PAC_RESET_KEYS                           = 0x36
	PR_PAC_SET_ENABLED_KEYS                     = 0x3c
	PR_SCHED_CORE                               = 0x3e
	PR_SCHED_CORE_CREATE                        = 0x1
	PR_SCHED_CORE_GET                           = 0x0
	PR_SCHED_CORE_MAX                           = 0x4
	PR_SCHED_CORE_SCOPE_PROCESS_GROUP           = 0x2
	PR_SCHED_CORE_SCOPE_THREAD                  = 0x0
	PR_SCHED_CORE_SCOPE_THREAD_GROUP            = 0x1
	PR_SCHED_CORE_SHARE_FROM                    = 0x3
	PR_SCHED_CORE_SHARE_TO                      = 0x2
	PR_SET_CHILD_SUBREAPER                      = 0x24
	PR_SET_DUMPABLE                             = 0x4
	PR_SET_ENDIAN                               = 0x14
	PR_SET_FPEMU                                = 0xa
	PR_SET_FPEXC                                = 0xc
	PR_SET_FP_MODE                              = 0x2d
	PR_SET_IO_FLUSHER                           = 0x39
	PR_SET_KEEPCAPS                             = 0x8
	PR_SET_MM                                   = 0x23
	PR_SET_MM_ARG_END                           = 0x9
	PR_SET_MM_ARG_START                         = 0x8
	PR_SET_MM_AUXV                              = 0xc
	PR_SET_MM_BRK                               = 0x7
	PR_SET_MM_END_CODE                          = 0x2
	PR_SET_MM_END_DATA                          = 0x4
	PR_SET_MM_ENV_END                           = 0xb
	PR_SET_MM_ENV_START                         = 0xa
	PR_SET_MM_EXE_FILE                          = 0xd
	PR_SET_MM_MAP                               = 0xe
	PR_SET_MM_MAP_SIZE                          = 0xf
	PR_SET_MM_START_BRK                         = 0x6
	PR_SET_MM_START_CODE                        = 0x1
	PR_SET_MM_START_DATA                        = 0x3
	PR_SET_MM_START_STACK                       = 0x5
	PR_SET_NAME                                 = 0xf
	PR_SET_NO_NEW_PRIVS                         = 0x26
	PR_SET_PDEATHSIG                            = 0x1
	PR_SET_PTRACER                              = 0x59616d61
	PR_SET_SECCOMP                              = 0x16
	PR_SET_SECUREBITS                           = 0x1c
	PR_SET_SPECULATION_CTRL                     = 0x35
	PR_SET_SYSCALL_USER_DISPATCH                = 0x3b
	PR_SET_TAGGED_ADDR_CTRL                     = 0x37
	PR_SET_THP_DISABLE                          = 0x29
	PR_SET_TIMERSLACK                           = 0x1d
	PR_SET_TIMING                               = 0xe
	PR_SET_TSC                                  = 0x1a
	PR_SET_UNALIGN                              = 0x6
	PR_SET_VMA                                  = 0x53564d41
	PR_SET_VMA_ANON_NAME                        = 0x0
	PR_SME_GET_VL                               = 0x40
	PR_SME_SET_VL                               = 0x3f
	PR_SME_SET_VL_ONEXEC                        = 0x40000
	PR_SME_VL_INHERIT                           = 0x20000
	PR_SME_VL_LEN_MASK                          = 0xffff
	PR_SPEC_DISABLE                             = 0x4
	PR_SPEC_DISABLE_NOEXEC                      = 0x10
	PR_SPEC_ENABLE                              = 0x2
	PR_SPEC_FORCE_DISABLE                       = 0x8
	PR_SPEC_INDIRECT_BRANCH                     = 0x1
	PR_SPEC_L1D_FLUSH                           = 0x2
	PR_SPEC_NOT_AFFECTED                        = 0x0
	PR_SPEC_PRCTL                               = 0x1
	PR_SPEC_STORE_BYPASS                        = 0x0
	PR_SVE_GET_VL                               = 0x33
	PR_SVE_SET_VL                               = 0x32
	PR_SVE_SET_VL_ONEXEC                        = 0x40000
	PR_SVE_VL_INHERIT                           = 0x20000
	PR_SVE_VL_LEN_MASK                          = 0xffff
	PR_SYS_DISPATCH_OFF                         = 0x0
	PR_SYS_DISPATCH_ON                          = 0x1
	PR_TAGGED_ADDR_ENABLE                       = 0x1
	PR_TASK_PERF_EVENTS_DISABLE                 = 0x1f
	PR_TASK_PERF_EVENTS_ENABLE                  = 0x20
	PR_TIMING_STATISTICAL                       = 0x0
	PR_TIMING_TIMESTAMP                         = 0x1
	PR_TSC_ENABLE                               = 0x1
	PR_TSC_SIGSEGV                              = 0x2
	PR_UNALIGN_NOPRINT                          = 0x1
	PR_UNALIGN_SIGBUS                           = 0x2
	PSTOREFS_MAGIC                              = 0x6165676c
	PTRACE_ATTACH                               = 0x10
	PTRACE_CONT                                 = 0x7
	PTRACE_DETACH                               = 0x11
	PTRACE_EVENTMSG_SYSCALL_ENTRY               = 0x1
	PTRACE_EVENTMSG_SYSCALL_EXIT                = 0x2
	PTRACE_EVENT_CLONE                          = 0x3
	PTRACE_EVENT_EXEC                           = 0x4
	PTRACE_EVENT_EXIT                           = 0x6
	PTRACE_EVENT_FORK                           = 0x1
	PTRACE_EVENT_SECCOMP                        = 0x7
	PTRACE_EVENT_STOP                           = 0x80
	PTRACE_EVENT_VFORK                          = 0x2
	PTRACE_EVENT_VFORK_DONE                     = 0x5
	PTRACE_GETEVENTMSG                          = 0x4201
	PTRACE_GETREGS                              = 0xc
	PTRACE_GETREGSET                            = 0x4204
	PTRACE_GETSIGINFO                           = 0x4202
	PTRACE_GETSIGMASK                           = 0x420a
	PTRACE_GET_RSEQ_CONFIGURATION               = 0x420f
	PTRACE_GET_SYSCALL_INFO                     = 0x420e
	PTRACE_INTERRUPT                            = 0x4207
	PTRACE_KILL                                 = 0x8
	PTRACE_LISTEN                               = 0x4208
	PTRACE_O_EXITKILL                           = 0x100000
	PTRACE_O_MASK                               = 0x3000ff
	PTRACE_O_SUSPEND_SECCOMP                    = 0x200000
	PTRACE_O_TRACECLONE                         = 0x8
	PTRACE_O_TRACEEXEC                          = 0x10
	PTRACE_O_TRACEEXIT                          = 0x40
	PTRACE_O_TRACEFORK                          = 0x2
	PTRACE_O_TRACESECCOMP                       = 0x80
	PTRACE_O_TRACESYSGOOD                       = 0x1
	PTRACE_O_TRACEVFORK                         = 0x4
	PTRACE_O_TRACEVFORKDONE                     = 0x20
	PTRACE_PEEKDATA                             = 0x2
	PTRACE_PEEKSIGINFO                          = 0x4209
	PTRACE_PEEKSIGINFO_SHARED                   = 0x1
	PTRACE_PEEKTEXT                             = 0x1
	PTRACE_PEEKUSR                              = 0x3
	PTRACE_POKEDATA                             = 0x5
	PTRACE_POKETEXT                             = 0x4
	PTRACE_POKEUSR                              = 0x6
	PTRACE_SECCOMP_GET_FILTER                   = 0x420c
	PTRACE_SECCOMP_GET_METADATA                 = 0x420d
	PTRACE_SEIZE                                = 0x4206
	PTRACE_SETOPTIONS                           = 0x4200
	PTRACE_SETREGS                              = 0xd
	PTRACE_SETREGSET                            = 0x4205
	PTRACE_SETSIGINFO                           = 0x4203
	PTRACE_SETSIGMASK                           = 0x420b
	PTRACE_SINGLESTEP                           = 0x9
	PTRACE_SYSCALL                              = 0x18
	PTRACE_SYSCALL_INFO_ENTRY                   = 0x1
	PTRACE_SYSCALL_INFO_EXIT                    = 0x2
	PTRACE_SYSCALL_INFO_NONE                    = 0x0
	PTRACE_SYSCALL_INFO_SECCOMP                 = 0x3
	PTRACE_TRACEME                              = 0x0
	P_ALL                                       = 0x0
	P_PGID                                      = 0x2
	P_PID                                       = 0x1
	P_PIDFD                                     = 0x3
	QNX4_SUPER_MAGIC                            = 0x2f
	QNX6_SUPER_MAGIC                            = 0x68191122
	RAMFS_MAGIC                                 = 0x858458f6
	RAW_PAYLOAD_DIGITAL                         = 0x3
	RAW_PAYLOAD_HCI                             = 0x2
	RAW_PAYLOAD_LLCP                            = 0x0
	RAW_PAYLOAD_NCI                             = 0x1
	RAW_PAYLOAD_PROPRIETARY                     = 0x4
	RDTGROUP_SUPER_MAGIC                        = 0x7655821
	REISERFS_SUPER_MAGIC                        = 0x52654973
	RENAME_EXCHANGE                             = 0x2
	RENAME_NOREPLACE                            = 0x1
	RENAME_WHITEOUT                             = 0x4
	RLIMIT_CORE                                 = 0x4
	RLIMIT_CPU                                  = 0x0
	RLIMIT_DATA                                 = 0x2
	RLIMIT_FSIZE                                = 0x1
	RLIMIT_LOCKS                                = 0xa
	RLIMIT_MSGQUEUE                             = 0xc
	RLIMIT_NICE                                 = 0xd
	RLIMIT_RTPRIO                               = 0xe
	RLIMIT_RTTIME                               = 0xf
	RLIMIT_SIGPENDING                           = 0xb
	RLIMIT_STACK                                = 0x3
	RLIM_INFINITY                               = 0xffffffffffffffff
	RTAX_ADVMSS                                 = 0x8
	RTAX_CC_ALGO                                = 0x10
	RTAX_CWND                                   = 0x7
	RTAX_FASTOPEN_NO_COOKIE                     = 0x11
	RTAX_FEATURES                               = 0xc
	RTAX_FEATURE_ALLFRAG                        = 0x8
	RTAX_FEATURE_ECN                            = 0x1
	RTAX_FEATURE_MASK                           = 0xf
	RTAX_FEATURE_SACK                           = 0x2
	RTAX_FEATURE_TIMESTAMP                      = 0x4
	RTAX_HOPLIMIT                               = 0xa
	RTAX_INITCWND                               = 0xb
	RTAX_INITRWND                               = 0xe
	RTAX_LOCK                                   = 0x1
	RTAX_MAX                                    = 0x11
	RTAX_MTU                                    = 0x2
	RTAX_QUICKACK                               = 0xf
	RTAX_REORDERING                             = 0x9
	RTAX_RTO_MIN                                = 0xd
	RTAX_RTT                                    = 0x4
	RTAX_RTTVAR                                 = 0x5
	RTAX_SSTHRESH                               = 0x6
	RTAX_UNSPEC                                 = 0x0
	RTAX_WINDOW                                 = 0x3
	RTA_ALIGNTO                                 = 0x4
	RTA_MAX                                     = 0x1e
	RTCF_DIRECTSRC                              = 0x4000000
	RTCF_DOREDIRECT                             = 0x1000000
	RTCF_LOG                                    = 0x2000000
	RTCF_MASQ                                   = 0x400000
	RTCF_NAT                                    = 0x800000
	RTCF_VALVE                                  = 0x200000
	RTC_AF                                      = 0x20
	RTC_BSM_DIRECT                              = 0x1
	RTC_BSM_DISABLED                            = 0x0
	RTC_BSM_LEVEL                               = 0x2
	RTC_BSM_STANDBY                             = 0x3
	RTC_FEATURE_ALARM                           = 0x0
	RTC_FEATURE_ALARM_RES_2S                    = 0x3
	RTC_FEATURE_ALARM_RES_MINUTE                = 0x1
	RTC_FEATURE_ALARM_WAKEUP_ONLY               = 0x7
	RTC_FEATURE_BACKUP_SWITCH_MODE              = 0x6
	RTC_FEATURE_CNT                             = 0x8
	RTC_FEATURE_CORRECTION                      = 0x5
	RTC_FEATURE_NEED_WEEK_DAY                   = 0x2
	RTC_FEATURE_UPDATE_INTERRUPT                = 0x4
	RTC_IRQF                                    = 0x80
	RTC_MAX_FREQ                                = 0x2000
	RTC_PARAM_BACKUP_SWITCH_MODE                = 0x2
	RTC_PARAM_CORRECTION                        = 0x1
	RTC_PARAM_FEATURES                          = 0x0
	RTC_PF                                      = 0x40
	RTC_UF                                      = 0x10
	RTF_ADDRCLASSMASK                           = 0xf8000000
	RTF_ADDRCONF                                = 0x40000
	RTF_ALLONLINK                               = 0x20000
	RTF_BROADCAST                               = 0x10000000
	RTF_CACHE                                   = 0x1000000
	RTF_DEFAULT                                 = 0x10000
	RTF_DYNAMIC                                 = 0x10
	RTF_FLOW                                    = 0x2000000
	RTF_GATEWAY                                 = 0x2
	RTF_HOST                                    = 0x4
	RTF_INTERFACE                               = 0x40000000
	RTF_IRTT                                    = 0x100
	RTF_LINKRT                                  = 0x100000
	RTF_LOCAL                                   = 0x80000000
	RTF_MODIFIED                                = 0x20
	RTF_MSS                                     = 0x40
	RTF_MTU                                     = 0x40
	RTF_MULTICAST                               = 0x20000000
	RTF_NAT                                     = 0x8000000
	RTF_NOFORWARD                               = 0x1000
	RTF_NONEXTHOP                               = 0x200000
	RTF_NOPMTUDISC                              = 0x4000
	RTF_POLICY                                  = 0x4000000
	RTF_REINSTATE                               = 0x8
	RTF_REJECT                                  = 0x200
	RTF_STATIC                                  = 0x400
	RTF_THROW                                   = 0x2000
	RTF_UP                                      = 0x1
	RTF_WINDOW                                  = 0x80
	RTF_XRESOLVE                                = 0x800
	RTMGRP_DECnet_IFADDR                        = 0x1000
	RTMGRP_DECnet_ROUTE                         = 0x4000
	RTMGRP_IPV4_IFADDR                          = 0x10
	RTMGRP_IPV4_MROUTE                          = 0x20
	RTMGRP_IPV4_ROUTE                           = 0x40
	RTMGRP_IPV4_RULE                            = 0x80
	RTMGRP_IPV6_IFADDR                          = 0x100
	RTMGRP_IPV6_IFINFO                          = 0x800
	RTMGRP_IPV6_MROUTE                          = 0x200
	RTMGRP_IPV6_PREFIX                          = 0x20000
	RTMGRP_IPV6_ROUTE                           = 0x400
	RTMGRP_LINK                                 = 0x1
	RTMGRP_NEIGH                                = 0x4
	RTMGRP_NOTIFY                               = 0x2
	RTMGRP_TC                                   = 0x8
	RTM_BASE                                    = 0x10
	RTM_DELACTION                               = 0x31
	RTM_DELADDR                                 = 0x15
	RTM_DELADDRLABEL                            = 0x49
	RTM_DELCHAIN                                = 0x65
	RTM_DELLINK                                 = 0x11
	RTM_DELLINKPROP                             = 0x6d
	RTM_DELMDB                                  = 0x55
	RTM_DELNEIGH                                = 0x1d
	RTM_DELNETCONF                              = 0x51
	RTM_DELNEXTHOP                              = 0x69
	RTM_DELNEXTHOPBUCKET                        = 0x75
	RTM_DELNSID                                 = 0x59
	RTM_DELQDISC                                = 0x25
	RTM_DELROUTE                                = 0x19
	RTM_DELRULE                                 = 0x21
	RTM_DELTCLASS                               = 0x29
	RTM_DELTFILTER                              = 0x2d
	RTM_DELTUNNEL                               = 0x79
	RTM_DELVLAN                                 = 0x71
	RTM_F_CLONED                                = 0x200
	RTM_F_EQUALIZE                              = 0x400
	RTM_F_FIB_MATCH                             = 0x2000
	RTM_F_LOOKUP_TABLE                          = 0x1000
	RTM_F_NOTIFY                                = 0x100
	RTM_F_OFFLOAD                               = 0x4000
	RTM_F_OFFLOAD_FAILED                        = 0x20000000
	RTM_F_PREFIX                                = 0x800
	RTM_F_TRAP                                  = 0x8000
	RTM_GETACTION                               = 0x32
	RTM_GETADDR                                 = 0x16
	RTM_GETADDRLABEL                            = 0x4a
	RTM_GETANYCAST                              = 0x3e
	RTM_GETCHAIN                                = 0x66
	RTM_GETDCB                                  = 0x4e
	RTM_GETLINK                                 = 0x12
	RTM_GETLINKPROP                             = 0x6e
	RTM_GETMDB                                  = 0x56
	RTM_GETMULTICAST                            = 0x3a
	RTM_GETNEIGH                                = 0x1e
	RTM_GETNEIGHTBL                             = 0x42
	RTM_GETNETCONF                              = 0x52
	RTM_GETNEXTHOP                              = 0x6a
	RTM_GETNEXTHOPBUCKET                        = 0x76
	RTM_GETNSID                                 = 0x5a
	RTM_GETQDISC                                = 0x26
	RTM_GETROUTE                                = 0x1a
	RTM_GETRULE                                 = 0x22
	RTM_GETSTATS                                = 0x5e
	RTM_GETTCLASS                               = 0x2a
	RTM_GETTFILTER                              = 0x2e
	RTM_GETTUNNEL                               = 0x7a
	RTM_GETVLAN                                 = 0x72
	RTM_MAX                                     = 0x7b
	RTM_NEWACTION                               = 0x30
	RTM_NEWADDR                                 = 0x14
	RTM_NEWADDRLABEL                            = 0x48
	RTM_NEWCACHEREPORT                          = 0x60
	RTM_NEWCHAIN                                = 0x64
	RTM_NEWLINK                                 = 0x10
	RTM_NEWLINKPROP                             = 0x6c
	RTM_NEWMDB                                  = 0x54
	RTM_NEWNDUSEROPT                            = 0x44
	RTM_NEWNEIGH                                = 0x1c
	RTM_NEWNEIGHTBL                             = 0x40
	RTM_NEWNETCONF                              = 0x50
	RTM_NEWNEXTHOP                              = 0x68
	RTM_NEWNEXTHOPBUCKET                        = 0x74
	RTM_NEWNSID                                 = 0x58
	RTM_NEWNVLAN                                = 0x70
	RTM_NEWPREFIX                               = 0x34
	RTM_NEWQDISC                                = 0x24
	RTM_NEWROUTE                                = 0x18
	RTM_NEWRULE                                 = 0x20
	RTM_NEWSTATS                                = 0x5c
	RTM_NEWTCLASS                               = 0x28
	RTM_NEWTFILTER                              = 0x2c
	RTM_NEWTUNNEL                               = 0x78
	RTM_NR_FAMILIES                             = 0x1b
	RTM_NR_MSGTYPES                             = 0x6c
	RTM_SETDCB                                  = 0x4f
	RTM_SETLINK                                 = 0x13
	RTM_SETNEIGHTBL                             = 0x43
	RTM_SETSTATS                                = 0x5f
	RTNH_ALIGNTO                                = 0x4
	RTNH_COMPARE_MASK                           = 0x59
	RTNH_F_DEAD                                 = 0x1
	RTNH_F_LINKDOWN                             = 0x10
	RTNH_F_OFFLOAD                              = 0x8
	RTNH_F_ONLINK                               = 0x4
	RTNH_F_PERVASIVE                            = 0x2
	RTNH_F_TRAP                                 = 0x40
	RTNH_F_UNRESOLVED                           = 0x20
	RTN_MAX                                     = 0xb
	RTPROT_BABEL                                = 0x2a
	RTPROT_BGP                                  = 0xba
	RTPROT_BIRD                                 = 0xc
	RTPROT_BOOT                                 = 0x3
	RTPROT_DHCP                                 = 0x10
	RTPROT_DNROUTED                             = 0xd
	RTPROT_EIGRP                                = 0xc0
	RTPROT_GATED                                = 0x8
	RTPROT_ISIS                                 = 0xbb
	RTPROT_KEEPALIVED                           = 0x12
	RTPROT_KERNEL                               = 0x2
	RTPROT_MROUTED                              = 0x11
	RTPROT_MRT                                  = 0xa
	RTPROT_NTK                                  = 0xf
	RTPROT_OPENR                                = 0x63
	RTPROT_OSPF                                 = 0xbc
	RTPROT_RA                                   = 0x9
	RTPROT_REDIRECT                             = 0x1
	RTPROT_RIP                                  = 0xbd
	RTPROT_STATIC                               = 0x4
	RTPROT_UNSPEC                               = 0x0
	RTPROT_XORP                                 = 0xe
	RTPROT_ZEBRA                                = 0xb
	RT_CLASS_DEFAULT                            = 0xfd
	RT_CLASS_LOCAL                              = 0xff
	RT_CLASS_MAIN                               = 0xfe
	RT_CLASS_MAX                                = 0xff
	RT_CLASS_UNSPEC                             = 0x0
	RUSAGE_CHILDREN                             = -0x1
	RUSAGE_SELF                                 = 0x0
	RUSAGE_THREAD                               = 0x1
	RWF_APPEND                                  = 0x10
	RWF_DSYNC                                   = 0x2
	RWF_HIPRI                                   = 0x1
	RWF_NOWAIT                                  = 0x8
	RWF_SUPPORTED                               = 0x1f
	RWF_SYNC                                    = 0x4
	RWF_WRITE_LIFE_NOT_SET                      = 0x0
	SCM_CREDENTIALS                             = 0x2
	SCM_RIGHTS                                  = 0x1
	SCM_TIMESTAMP                               = 0x1d
	SC_LOG_FLUSH                                = 0x100000
	SECCOMP_MODE_DISABLED                       = 0x0
	SECCOMP_MODE_FILTER                         = 0x2
	SECCOMP_MODE_STRICT                         = 0x1
	SECRETMEM_MAGIC                             = 0x5345434d
	SECURITYFS_MAGIC                            = 0x73636673
	SEEK_CUR                                    = 0x1
	SEEK_DATA                                   = 0x3
	SEEK_END                                    = 0x2
	SEEK_HOLE                                   = 0x4
	SEEK_MAX                                    = 0x4
	SEEK_SET                                    = 0x0
	SELINUX_MAGIC                               = 0xf97cff8c
	SHUT_RD                                     = 0x0
	SHUT_RDWR                                   = 0x2
	SHUT_WR                                     = 0x1
	SIOCADDDLCI                                 = 0x8980
	SIOCADDMULTI                                = 0x8931
	SIOCADDRT                                   = 0x890b
	SIOCBONDCHANGEACTIVE                        = 0x8995
	SIOCBONDENSLAVE                             = 0x8990
	SIOCBONDINFOQUERY                           = 0x8994
	SIOCBONDRELEASE                             = 0x8991
	SIOCBONDSETHWADDR                           = 0x8992
	SIOCBONDSLAVEINFOQUERY                      = 0x8993
	SIOCBRADDBR                                 = 0x89a0
	SIOCBRADDIF                                 = 0x89a2
	SIOCBRDELBR                                 = 0x89a1
	SIOCBRDELIF                                 = 0x89a3
	SIOCDARP                                    = 0x8953
	SIOCDELDLCI                                 = 0x8981
	SIOCDELMULTI                                = 0x8932
	SIOCDELRT                                   = 0x890c
	SIOCDEVPRIVATE                              = 0x89f0
	SIOCDIFADDR                                 = 0x8936
	SIOCDRARP                                   = 0x8960
	SIOCETHTOOL                                 = 0x8946
	SIOCGARP                                    = 0x8954
	SIOCGETLINKNAME                             = 0x89e0
	SIOCGETNODEID                               = 0x89e1
	SIOCGHWTSTAMP                               = 0x89b1
	SIOCGIFADDR                                 = 0x8915
	SIOCGIFBR                                   = 0x8940
	SIOCGIFBRDADDR                              = 0x8919
	SIOCGIFCONF                                 = 0x8912
	SIOCGIFCOUNT                                = 0x8938
	SIOCGIFDSTADDR                              = 0x8917
	SIOCGIFENCAP                                = 0x8925
	SIOCGIFFLAGS                                = 0x8913
	SIOCGIFHWADDR                               = 0x8927
	SIOCGIFINDEX                                = 0x8933
	SIOCGIFMAP                                  = 0x8970
	SIOCGIFMEM                                  = 0x891f
	SIOCGIFMETRIC                               = 0x891d
	SIOCGIFMTU                                  = 0x8921
	SIOCGIFNAME                                 = 0x8910
	SIOCGIFNETMASK                              = 0x891b
	SIOCGIFPFLAGS                               = 0x8935
	SIOCGIFSLAVE                                = 0x8929
	SIOCGIFTXQLEN                               = 0x8942
	SIOCGIFVLAN                                 = 0x8982
	SIOCGMIIPHY                                 = 0x8947
	SIOCGMIIREG                                 = 0x8948
	SIOCGPPPCSTATS                              = 0x89f2
	SIOCGPPPSTATS                               = 0x89f0
	SIOCGPPPVER                                 = 0x89f1
	SIOCGRARP                                   = 0x8961
	SIOCGSKNS                                   = 0x894c
	SIOCGSTAMP                                  = 0x8906
	SIOCGSTAMPNS                                = 0x8907
	SIOCGSTAMPNS_OLD                            = 0x8907
	SIOCGSTAMP_OLD                              = 0x8906
	SIOCKCMATTACH                               = 0x89e0
	SIOCKCMCLONE                                = 0x89e2
	SIOCKCMUNATTACH                             = 0x89e1
	SIOCOUTQNSD                                 = 0x894b
	SIOCPROTOPRIVATE                            = 0x89e0
	SIOCRTMSG                                   = 0x890d
	SIOCSARP                                    = 0x8955
	SIOCSHWTSTAMP                               = 0x89b0
	SIOCSIFADDR                                 = 0x8916
	SIOCSIFBR                                   = 0x8941
	SIOCSIFBRDADDR                              = 0x891a
	SIOCSIFDSTADDR                              = 0x8918
	SIOCSIFENCAP                                = 0x8926
	SIOCSIFFLAGS                                = 0x8914
	SIOCSIFHWADDR                               = 0x8924
	SIOCSIFHWBROADCAST                          = 0x8937
	SIOCSIFLINK                                 = 0x8911
	SIOCSIFMAP                                  = 0x8971
	SIOCSIFMEM                                  = 0x8920
	SIOCSIFMETRIC                               = 0x891e
	SIOCSIFMTU                                  = 0x8922
	SIOCSIFNAME                                 = 0x8923
	SIOCSIFNETMASK                              = 0x891c
	SIOCSIFPFLAGS                               = 0x8934
	SIOCSIFSLAVE                                = 0x8930
	SIOCSIFTXQLEN                               = 0x8943
	SIOCSIFVLAN                                 = 0x8983
	SIOCSMIIREG                                 = 0x8949
	SIOCSRARP                                   = 0x8962
	SIOCWANDEV                                  = 0x894a
	SMACK_MAGIC                                 = 0x43415d53
	SMART_AUTOSAVE                              = 0xd2
	SMART_AUTO_OFFLINE                          = 0xdb
	SMART_DISABLE                               = 0xd9
	SMART_ENABLE                                = 0xd8
	SMART_HCYL_PASS                             = 0xc2
	SMART_IMMEDIATE_OFFLINE                     = 0xd4
	SMART_LCYL_PASS                             = 0x4f
	SMART_READ_LOG_SECTOR                       = 0xd5
	SMART_READ_THRESHOLDS                       = 0xd1
	SMART_READ_VALUES                           = 0xd0
	SMART_SAVE                                  = 0xd3
	SMART_STATUS                                = 0xda
	SMART_WRITE_LOG_SECTOR                      = 0xd6
	SMART_WRITE_THRESHOLDS                      = 0xd7
	SMB2_SUPER_MAGIC                            = 0xfe534d42
	SMB_SUPER_MAGIC                             = 0x517b
	SOCKFS_MAGIC                                = 0x534f434b
	SOCK_BUF_LOCK_MASK                          = 0x3
	SOCK_DCCP                                   = 0x6
	SOCK_IOC_TYPE                               = 0x89
	SOCK_PACKET                                 = 0xa
	SOCK_RAW                                    = 0x3
	SOCK_RCVBUF_LOCK                            = 0x2
	SOCK_RDM                                    = 0x4
	SOCK_SEQPACKET                              = 0x5
	SOCK_SNDBUF_LOCK                            = 0x1
	SOCK_TXREHASH_DEFAULT                       = 0xff
	SOCK_TXREHASH_DISABLED                      = 0x0
	SOCK_TXREHASH_ENABLED                       = 0x1
	SOL_AAL                                     = 0x109
	SOL_ALG                                     = 0x117
	SOL_ATM                                     = 0x108
	SOL_CAIF                                    = 0x116
	SOL_CAN_BASE                                = 0x64
	SOL_CAN_RAW                                 = 0x65
	SOL_DCCP                                    = 0x10d
	SOL_DECNET                                  = 0x105
	SOL_ICMPV6                                  = 0x3a
	SOL_IP                                      = 0x0
	SOL_IPV6                                    = 0x29
	SOL_IRDA                                    = 0x10a
	SOL_IUCV                                    = 0x115
	SOL_KCM                                     = 0x119
	SOL_LLC                                     = 0x10c
	SOL_MCTP                                    = 0x11d
	SOL_MPTCP                                   = 0x11c
	SOL_NETBEUI                                 = 0x10b
	SOL_NETLINK                                 = 0x10e
	SOL_NFC                                     = 0x118
	SOL_PACKET                                  = 0x107
	SOL_PNPIPE                                  = 0x113
	SOL_PPPOL2TP                                = 0x111
	SOL_RAW                                     = 0xff
	SOL_RDS                                     = 0x114
	SOL_RXRPC                                   = 0x110
	SOL_SMC                                     = 0x11e
	SOL_TCP                                     = 0x6
	SOL_TIPC                                    = 0x10f
	SOL_TLS                                     = 0x11a
	SOL_UDP                                     = 0x11
	SOL_X25                                     = 0x106
	SOL_XDP                                     = 0x11b
	SOMAXCONN                                   = 0x1000
	SO_ATTACH_FILTER                            = 0x1a
	SO_DEBUG                                    = 0x1
	SO_DETACH_BPF                               = 0x1b
	SO_DETACH_FILTER                            = 0x1b
	SO_EE_CODE_TXTIME_INVALID_PARAM             = 0x1
	SO_EE_CODE_TXTIME_MISSED                    = 0x2
	SO_EE_CODE_ZEROCOPY_COPIED                  = 0x1
	SO_EE_ORIGIN_ICMP                           = 0x2
	SO_EE_ORIGIN_ICMP6                          = 0x3
	SO_EE_ORIGIN_LOCAL                          = 0x1
	SO_EE_ORIGIN_NONE                           = 0x0
	SO_EE_ORIGIN_TIMESTAMPING                   = 0x4
	SO_EE_ORIGIN_TXSTATUS                       = 0x4
	SO_EE_ORIGIN_TXTIME                         = 0x6
	SO_EE_ORIGIN_ZEROCOPY                       = 0x5
	SO_EE_RFC4884_FLAG_INVALID                  = 0x1
	SO_GET_FILTER                               = 0x1a
	SO_NO_CHECK                                 = 0xb
	SO_PEERNAME                                 = 0x1c
	SO_PRIORITY                                 = 0xc
	SO_TIMESTAMP                                = 0x1d
	SO_TIMESTAMP_OLD                            = 0x1d
	SO_VM_SOCKETS_BUFFER_MAX_SIZE               = 0x2
	SO_VM_SOCKETS_BUFFER_MIN_SIZE               = 0x1
	SO_VM_SOCKETS_BUFFER_SIZE                   = 0x0
	SO_VM_SOCKETS_CONNECT_TIMEOUT               = 0x6
	SO_VM_SOCKETS_CONNECT_TIMEOUT_NEW           = 0x8
	SO_VM_SOCKETS_CONNECT_TIMEOUT_OLD           = 0x6
	SO_VM_SOCKETS_NONBLOCK_TXRX                 = 0x7
	SO_VM_SOCKETS_PEER_HOST_VM_ID               = 0x3
	SO_VM_SOCKETS_TRUSTED                       = 0x5
	SPLICE_F_GIFT                               = 0x8
	SPLICE_F_MORE                               = 0x4
	SPLICE_F_MOVE                               = 0x1
	SPLICE_F_NONBLOCK                           = 0x2
	SQUASHFS_MAGIC                              = 0x73717368
	STACK_END_MAGIC                             = 0x57ac6e9d
	STATX_ALL                                   = 0xfff
	STATX_ATIME                                 = 0x20
	STATX_ATTR_APPEND                           = 0x20
	STATX_ATTR_AUTOMOUNT                        = 0x1000
	STATX_ATTR_COMPRESSED                       = 0x4
	STATX_ATTR_DAX                              = 0x200000
	STATX_ATTR_ENCRYPTED                        = 0x800
	STATX_ATTR_IMMUTABLE                        = 0x10
	STATX_ATTR_MOUNT_ROOT                       = 0x2000
	STATX_ATTR_NODUMP                           = 0x40
	STATX_ATTR_VERITY                           = 0x100000
	STATX_BASIC_STATS                           = 0x7ff
	STATX_BLOCKS                                = 0x400
	STATX_BTIME                                 = 0x800
	STATX_CTIME                                 = 0x80
	STATX_DIOALIGN                              = 0x2000
	STATX_GID                                   = 0x10
	STATX_INO                                   = 0x100
	STATX_MNT_ID                                = 0x1000
	STATX_MODE                                  = 0x2
	STATX_MTIME                                 = 0x40
	STATX_NLINK                                 = 0x4
	STATX_SIZE                                  = 0x200
	STATX_TYPE                                  = 0x1
	STATX_UID                                   = 0x8
	STATX__RESERVED                             = 0x80000000
	SYNC_FILE_RANGE_WAIT_AFTER                  = 0x4
	SYNC_FILE_RANGE_WAIT_BEFORE                 = 0x1
	SYNC_FILE_RANGE_WRITE                       = 0x2
	SYNC_FILE_RANGE_WRITE_AND_WAIT              = 0x7
	SYSFS_MAGIC                                 = 0x62656572
	S_BLKSIZE                                   = 0x200
	S_IEXEC                                     = 0x40
	S_IFBLK                                     = 0x6000
	S_IFCHR                                     = 0x2000
	S_IFDIR                                     = 0x4000
	S_IFIFO                                     = 0x1000
	S_IFLNK                                     = 0xa000
	S_IFMT                                      = 0xf000
	S_IFREG                                     = 0x8000
	S_IFSOCK                                    = 0xc000
	S_IREAD                                     = 0x100
	S_IRGRP                                     = 0x20
	S_IROTH                                     = 0x4
	S_IRUSR                                     = 0x100
	S_IRWXG                                     = 0x38
	S_IRWXO                                     = 0x7
	S_IRWXU                                     = 0x1c0
	S_ISGID                                     = 0x400
	S_ISUID                                     = 0x800
	S_ISVTX                                     = 0x200
	S_IWGRP                                     = 0x10
	S_IWOTH                                     = 0x2
	S_IWRITE                                    = 0x80
	S_IWUSR                                     = 0x80
	S_IXGRP                                     = 0x8
	S_IXOTH                                     = 0x1
	S_IXUSR                                     = 0x40
	TAB0                                        = 0x0
	TASKSTATS_CMD_ATTR_MAX                      = 0x4
	TASKSTATS_CMD_MAX                           = 0x2
	TASKSTATS_GENL_NAME                         = "TASKSTATS"
	TASKSTATS_GENL_VERSION                      = 0x1
	TASKSTATS_TYPE_MAX                          = 0x6
	TASKSTATS_VERSION                           = 0xd
	TCIFLUSH                                    = 0x0
	TCIOFF                                      = 0x2
	TCIOFLUSH                                   = 0x2
	TCION                                       = 0x3
	TCOFLUSH                                    = 0x1
	TCOOFF                                      = 0x0
	TCOON                                       = 0x1
	TCPOPT_EOL                                  = 0x0
	TCPOPT_MAXSEG                               = 0x2
	TCPOPT_NOP                                  = 0x1
	TCPOPT_SACK                                 = 0x5
	TCPOPT_SACK_PERMITTED                       = 0x4
	TCPOPT_TIMESTAMP                            = 0x8
	TCPOPT_TSTAMP_HDR                           = 0x101080a
	TCPOPT_WINDOW                               = 0x3
	TCP_CC_INFO                                 = 0x1a
	TCP_CM_INQ                                  = 0x24
	TCP_CONGESTION                              = 0xd
	TCP_COOKIE_IN_ALWAYS                        = 0x1
	TCP_COOKIE_MAX                              = 0x10
	TCP_COOKIE_MIN                              = 0x8
	TCP_COOKIE_OUT_NEVER                        = 0x2
	TCP_COOKIE_PAIR_SIZE                        = 0x20
	TCP_COOKIE_TRANSACTIONS                     = 0xf
	TCP_CORK                                    = 0x3
	TCP_DEFER_ACCEPT                            = 0x9
	TCP_FASTOPEN                                = 0x17
	TCP_FASTOPEN_CONNECT                        = 0x1e
	TCP_FASTOPEN_KEY                            = 0x21
	TCP_FASTOPEN_NO_COOKIE                      = 0x22
	TCP_INFO                                    = 0xb
	TCP_INQ                                     = 0x24
	TCP_KEEPCNT                                 = 0x6
	TCP_KEEPIDLE                                = 0x4
	TCP_KEEPINTVL                               = 0x5
	TCP_LINGER2                                 = 0x8
	TCP_MAXSEG                                  = 0x2
	TCP_MAXWIN                                  = 0xffff
	TCP_MAX_WINSHIFT                            = 0xe
	TCP_MD5SIG                                  = 0xe
	TCP_MD5SIG_EXT                              = 0x20
	TCP_MD5SIG_FLAG_PREFIX                      = 0x1
	TCP_MD5SIG_MAXKEYLEN                        = 0x50
	TCP_MSS                                     = 0x200
	TCP_MSS_DEFAULT                             = 0x218
	TCP_MSS_DESIRED                             = 0x4c4
	TCP_NODELAY                                 = 0x1
	TCP_NOTSENT_LOWAT                           = 0x19
	TCP_QUEUE_SEQ                               = 0x15
	TCP_QUICKACK                                = 0xc
	TCP_REPAIR                                  = 0x13
	TCP_REPAIR_OFF                              = 0x0
	TCP_REPAIR_OFF_NO_WP                        = -0x1
	TCP_REPAIR_ON                               = 0x1
	TCP_REPAIR_OPTIONS                          = 0x16
	TCP_REPAIR_QUEUE                            = 0x14
	TCP_REPAIR_WINDOW                           = 0x1d
	TCP_SAVED_SYN                               = 0x1c
	TCP_SAVE_SYN                                = 0x1b
	TCP_SYNCNT                                  = 0x7
	TCP_S_DATA_IN                               = 0x4
	TCP_S_DATA_OUT                              = 0x8
	TCP_THIN_DUPACK                             = 0x11
	TCP_THIN_LINEAR_TIMEOUTS                    = 0x10
	TCP_TIMESTAMP                               = 0x18
	TCP_TX_DELAY                                = 0x25
	TCP_ULP                                     = 0x1f
	TCP_USER_TIMEOUT                            = 0x12
	TCP_V4_FLOW                                 = 0x1
	TCP_V6_FLOW                                 = 0x5
	TCP_WINDOW_CLAMP                            = 0xa
	TCP_ZEROCOPY_RECEIVE                        = 0x23
	TFD_TIMER_ABSTIME                           = 0x1
	TFD_TIMER_CANCEL_ON_SET                     = 0x2
	TIMER_ABSTIME                               = 0x1
	TIOCM_DTR                                   = 0x2
	TIOCM_LE                                    = 0x1
	TIOCM_RTS                                   = 0x4
	TIOCPKT_DATA                                = 0x0
	TIOCPKT_DOSTOP                              = 0x20
	TIOCPKT_FLUSHREAD                           = 0x1
	TIOCPKT_FLUSHWRITE                          = 0x2
	TIOCPKT_IOCTL                               = 0x40
	TIOCPKT_NOSTOP                              = 0x10
	TIOCPKT_START                               = 0x8
	TIOCPKT_STOP                                = 0x4
	TIPC_ADDR_ID                                = 0x3
	TIPC_ADDR_MCAST                             = 0x1
	TIPC_ADDR_NAME                              = 0x2
	TIPC_ADDR_NAMESEQ                           = 0x1
	TIPC_AEAD_ALG_NAME                          = 0x20
	TIPC_AEAD_KEYLEN_MAX                        = 0x24
	TIPC_AEAD_KEYLEN_MIN                        = 0x14
	TIPC_AEAD_KEY_SIZE_MAX                      = 0x48
	TIPC_CFG_SRV                                = 0x0
	TIPC_CLUSTER_BITS                           = 0xc
	TIPC_CLUSTER_MASK                           = 0xfff000
	TIPC_CLUSTER_OFFSET                         = 0xc
	TIPC_CLUSTER_SIZE                           = 0xfff
	TIPC_CONN_SHUTDOWN                          = 0x5
	TIPC_CONN_TIMEOUT                           = 0x82
	TIPC_CRITICAL_IMPORTANCE                    = 0x3
	TIPC_DESTNAME                               = 0x3
	TIPC_DEST_DROPPABLE                         = 0x81
	TIPC_ERRINFO                                = 0x1
	TIPC_ERR_NO_NAME                            = 0x1
	TIPC_ERR_NO_NODE                            = 0x3
	TIPC_ERR_NO_PORT                            = 0x2
	TIPC_ERR_OVERLOAD                           = 0x4
	TIPC_GROUP_JOIN                             = 0x87
	TIPC_GROUP_LEAVE                            = 0x88
	TIPC_GROUP_LOOPBACK                         = 0x1
	TIPC_GROUP_MEMBER_EVTS                      = 0x2
	TIPC_HIGH_IMPORTANCE                        = 0x2
	TIPC_IMPORTANCE                             = 0x7f
	TIPC_LINK_STATE                             = 0x2
	TIPC_LOW_IMPORTANCE                         = 0x0
	TIPC_MAX_BEARER_NAME                        = 0x20
	TIPC_MAX_IF_NAME                            = 0x10
	TIPC_MAX_LINK_NAME                          = 0x44
	TIPC_MAX_MEDIA_NAME                         = 0x10
	TIPC_MAX_USER_MSG_SIZE                      = 0x101d0
	TIPC_MCAST_BROADCAST                        = 0x85
	TIPC_MCAST_REPLICAST                        = 0x86
	TIPC_MEDIUM_IMPORTANCE                      = 0x1
	TIPC_NODEID_LEN                             = 0x10
	TIPC_NODELAY                                = 0x8a
	TIPC_NODE_BITS                              = 0xc
	TIPC_NODE_MASK                              = 0xfff
	TIPC_NODE_OFFSET                            = 0x0
	TIPC_NODE_RECVQ_DEPTH                       = 0x83
	TIPC_NODE_SIZE                              = 0xfff
	TIPC_NODE_STATE                             = 0x0
	TIPC_OK                                     = 0x0
	TIPC_PUBLISHED                              = 0x1
	TIPC_REKEYING_NOW                           = 0xffffffff
	TIPC_RESERVED_TYPES                         = 0x40
	TIPC_RETDATA                                = 0x2
	TIPC_SERVICE_ADDR                           = 0x2
	TIPC_SERVICE_RANGE                          = 0x1
	TIPC_SOCKET_ADDR                            = 0x3
	TIPC_SOCK_RECVQ_DEPTH                       = 0x84
	TIPC_SOCK_RECVQ_USED                        = 0x89
	TIPC_SRC_DROPPABLE                          = 0x80
	TIPC_SUBSCR_TIMEOUT                         = 0x3
	TIPC_SUB_CANCEL                             = 0x4
	TIPC_SUB_PORTS                              = 0x1
	TIPC_SUB_SERVICE                            = 0x2
	TIPC_TOP_SRV                                = 0x1
	TIPC_WAIT_FOREVER                           = 0xffffffff
	TIPC_WITHDRAWN                              = 0x2
	TIPC_ZONE_BITS                              = 0x8
	TIPC_ZONE_CLUSTER_MASK                      = 0xfffff000
	TIPC_ZONE_MASK                              = 0xff000000
	TIPC_ZONE_OFFSET                            = 0x18
	TIPC_ZONE_SCOPE                             = 0x1
	TIPC_ZONE_SIZE                              = 0xff
	TMPFS_MAGIC                                 = 0x1021994
	TPACKET_ALIGNMENT                           = 0x10
	TPACKET_HDRLEN                              = 0x34
	TP_STATUS_AVAILABLE                         = 0x0
	TP_STATUS_BLK_TMO                           = 0x20
	TP_STATUS_COPY                              = 0x2
	TP_STATUS_CSUMNOTREADY                      = 0x8
	TP_STATUS_CSUM_VALID                        = 0x80
	TP_STATUS_KERNEL                            = 0x0
	TP_STATUS_LOSING                            = 0x4
	TP_STATUS_SENDING                           = 0x2
	TP_STATUS_SEND_REQUEST                      = 0x1
	TP_STATUS_TS_RAW_HARDWARE                   = 0x80000000
	TP_STATUS_TS_SOFTWARE                       = 0x20000000
	TP_STATUS_TS_SYS_HARDWARE                   = 0x40000000
	TP_STATUS_USER                              = 0x1
	TP_STATUS_VLAN_TPID_VALID                   = 0x40
	TP_STATUS_VLAN_VALID                        = 0x10
	TP_STATUS_WRONG_FORMAT                      = 0x4
	TRACEFS_MAGIC                               = 0x74726163
	TS_COMM_LEN                                 = 0x20
	UDF_SUPER_MAGIC                             = 0x15013346
	UDP_CORK                                    = 0x1
	UDP_ENCAP                                   = 0x64
	UDP_ENCAP_ESPINUDP                          = 0x2
	UDP_ENCAP_ESPINUDP_NON_IKE                  = 0x1
	UDP_ENCAP_GTP0                              = 0x4
	UDP_ENCAP_GTP1U                             = 0x5
	UDP_ENCAP_L2TPINUDP                         = 0x3
	UDP_GRO                                     = 0x68
	UDP_NO_CHECK6_RX                            = 0x66
	UDP_NO_CHECK6_TX                            = 0x65
	UDP_SEGMENT                                 = 0x67
	UDP_V4_FLOW                                 = 0x2
	UDP_V6_FLOW                                 = 0x6
	UMOUNT_NOFOLLOW                             = 0x8
	USBDEVICE_SUPER_MAGIC                       = 0x9fa2
	UTIME_NOW                                   = 0x3fffffff
	UTIME_OMIT                                  = 0x3ffffffe
	V9FS_MAGIC                                  = 0x1021997
	VERASE                                      = 0x2
	VINTR                                       = 0x0
	VKILL                                       = 0x3
	VLNEXT                                      = 0xf
	VMADDR_CID_ANY                              = 0xffffffff
	VMADDR_CID_HOST                             = 0x2
	VMADDR_CID_HYPERVISOR                       = 0x0
	VMADDR_CID_LOCAL                            = 0x1
	VMADDR_FLAG_TO_HOST                         = 0x1
	VMADDR_PORT_ANY                             = 0xffffffff
	VM_SOCKETS_INVALID_VERSION                  = 0xffffffff
	VQUIT                                       = 0x1
	VT0                                         = 0x0
	WAKE_MAGIC                                  = 0x20
	WALL                                        = 0x40000000
	WCLONE                                      = 0x80000000
	WCONTINUED                                  = 0x8
	WDIOC_SETPRETIMEOUT                         = 0xc0045708
	WDIOC_SETTIMEOUT                            = 0xc0045706
	WDIOF_ALARMONLY                             = 0x400
	WDIOF_CARDRESET                             = 0x20
	WDIOF_EXTERN1                               = 0x4
	WDIOF_EXTERN2                               = 0x8
	WDIOF_FANFAULT                              = 0x2
	WDIOF_KEEPALIVEPING                         = 0x8000
	WDIOF_MAGICCLOSE                            = 0x100
	WDIOF_OVERHEAT                              = 0x1
	WDIOF_POWEROVER                             = 0x40
	WDIOF_POWERUNDER                            = 0x10
	WDIOF_PRETIMEOUT                            = 0x200
	WDIOF_SETTIMEOUT                            = 0x80
	WDIOF_UNKNOWN                               = -0x1
	WDIOS_DISABLECARD                           = 0x1
	WDIOS_ENABLECARD                            = 0x2
	WDIOS_TEMPPANIC                             = 0x4
	WDIOS_UNKNOWN                               = -0x1
	WEXITED                                     = 0x4
	WGALLOWEDIP_A_MAX                           = 0x3
	WGDEVICE_A_MAX                              = 0x8
	WGPEER_A_MAX                                = 0xa
	WG_CMD_MAX                                  = 0x1
	WG_GENL_NAME                                = "wireguard"
	WG_GENL_VERSION                             = 0x1
	WG_KEY_LEN                                  = 0x20
	WIN_ACKMEDIACHANGE                          = 0xdb
	WIN_CHECKPOWERMODE1                         = 0xe5
	WIN_CHECKPOWERMODE2                         = 0x98
	WIN_DEVICE_RESET                            = 0x8
	WIN_DIAGNOSE                                = 0x90
	WIN_DOORLOCK                                = 0xde
	WIN_DOORUNLOCK                              = 0xdf
	WIN_DOWNLOAD_MICROCODE                      = 0x92
	WIN_FLUSH_CACHE                             = 0xe7
	WIN_FLUSH_CACHE_EXT                         = 0xea
	WIN_FORMAT                                  = 0x50
	WIN_GETMEDIASTATUS                          = 0xda
	WIN_IDENTIFY                                = 0xec
	WIN_IDENTIFY_DMA                            = 0xee
	WIN_IDLEIMMEDIATE                           = 0xe1
	WIN_INIT                                    = 0x60
	WIN_MEDIAEJECT                              = 0xed
	WIN_MULTREAD                                = 0xc4
	WIN_MULTREAD_EXT                            = 0x29
	WIN_MULTWRITE                               = 0xc5
	WIN_MULTWRITE_EXT                           = 0x39
	WIN_NOP                                     = 0x0
	WIN_PACKETCMD                               = 0xa0
	WIN_PIDENTIFY                               = 0xa1
	WIN_POSTBOOT                                = 0xdc
	WIN_PREBOOT                                 = 0xdd
	WIN_QUEUED_SERVICE                          = 0xa2
	WIN_READ                                    = 0x20
	WIN_READDMA                                 = 0xc8
	WIN_READDMA_EXT                             = 0x25
	WIN_READDMA_ONCE                            = 0xc9
	WIN_READDMA_QUEUED                          = 0xc7
	WIN_READDMA_QUEUED_EXT                      = 0x26
	WIN_READ_BUFFER                             = 0xe4
	WIN_READ_EXT                                = 0x24
	WIN_READ_LONG                               = 0x22
	WIN_READ_LONG_ONCE                          = 0x23
	WIN_READ_NATIVE_MAX                         = 0xf8
	WIN_READ_NATIVE_MAX_EXT                     = 0x27
	WIN_READ_ONCE                               = 0x21
	WIN_RECAL                                   = 0x10
	WIN_RESTORE                                 = 0x10
	WIN_SECURITY_DISABLE                        = 0xf6
	WIN_SECURITY_ERASE_PREPARE                  = 0xf3
	WIN_SECURITY_ERASE_UNIT                     = 0xf4
	WIN_SECURITY_FREEZE_LOCK                    = 0xf5
	WIN_SECURITY_SET_PASS                       = 0xf1
	WIN_SECURITY_UNLOCK                         = 0xf2
	WIN_SEEK                                    = 0x70
	WIN_SETFEATURES                             = 0xef
	WIN_SETIDLE1                                = 0xe3
	WIN_SETIDLE2                                = 0x97
	WIN_SETMULT                                 = 0xc6
	WIN_SET_MAX                                 = 0xf9
	WIN_SET_MAX_EXT                             = 0x37
	WIN_SLEEPNOW1                               = 0xe6
	WIN_SLEEPNOW2                               = 0x99
	WIN_SMART                                   = 0xb0
	WIN_SPECIFY                                 = 0x91
	WIN_SRST                                    = 0x8
	WIN_STANDBY                                 = 0xe2
	WIN_STANDBY2                                = 0x96
	WIN_STANDBYNOW1                             = 0xe0
	WIN_STANDBYNOW2                             = 0x94
	WIN_VERIFY                                  = 0x40
	WIN_VERIFY_EXT                              = 0x42
	WIN_VERIFY_ONCE                             = 0x41
	WIN_WRITE                                   = 0x30
	WIN_WRITEDMA                                = 0xca
	WIN_WRITEDMA_EXT                            = 0x35
	WIN_WRITEDMA_ONCE                           = 0xcb
	WIN_WRITEDMA_QUEUED                         = 0xcc
	WIN_WRITEDMA_QUEUED_EXT                     = 0x36
	WIN_WRITE_BUFFER                            = 0xe8
	WIN_WRITE_EXT                               = 0x34
	WIN_WRITE_LONG                              = 0x32
	WIN_WRITE_LONG_ONCE                         = 0x33
	WIN_WRITE_ONCE                              = 0x31
	WIN_WRITE_SAME                              = 0xe9
	WIN_WRITE_VERIFY                            = 0x3c
	WNOHANG                                     = 0x1
	WNOTHREAD                                   = 0x20000000
	WNOWAIT                                     = 0x1000000
	WSTOPPED                                    = 0x2
	WUNTRACED                                   = 0x2
	XATTR_CREATE                                = 0x1
	XATTR_REPLACE                               = 0x2
	XDP_COPY                                    = 0x2
	XDP_FLAGS_DRV_MODE                          = 0x4
	XDP_FLAGS_HW_MODE                           = 0x8
	XDP_FLAGS_MASK                              = 0x1f
	XDP_FLAGS_MODES                             = 0xe
	XDP_FLAGS_REPLACE                           = 0x10
	XDP_FLAGS_SKB_MODE                          = 0x2
	XDP_FLAGS_UPDATE_IF_NOEXIST                 = 0x1
	XDP_MMAP_OFFSETS                            = 0x1
	XDP_OPTIONS                                 = 0x8
	XDP_OPTIONS_ZEROCOPY                        = 0x1
	XDP_PACKET_HEADROOM                         = 0x100
	XDP_PGOFF_RX_RING                           = 0x0
	XDP_PGOFF_TX_RING                           = 0x80000000
	XDP_RING_NEED_WAKEUP                        = 0x1
	XDP_RX_RING                                 = 0x2
	XDP_SHARED_UMEM                             = 0x1
	XDP_STATISTICS                              = 0x7
	XDP_TX_RING                                 = 0x3
	XDP_UMEM_COMPLETION_RING                    = 0x6
	XDP_UMEM_FILL_RING                          = 0x5
	XDP_UMEM_PGOFF_COMPLETION_RING              = 0x180000000
	XDP_UMEM_PGOFF_FILL_RING                    = 0x100000000
	XDP_UMEM_REG                                = 0x4
	XDP_UMEM_UNALIGNED_CHUNK_FLAG               = 0x1
	XDP_USE_NEED_WAKEUP                         = 0x8
	XDP_ZEROCOPY                                = 0x4
	XENFS_SUPER_MAGIC                           = 0xabba1974
	XFS_SUPER_MAGIC                             = 0x58465342
	ZONEFS_MAGIC                                = 0x5a4f4653
	_HIDIOCGRAWNAME_LEN                         = 0x80
	_HIDIOCGRAWPHYS_LEN                         = 0x40
	_HIDIOCGRAWUNIQ_LEN                         = 0x40
)

// Errors
const (
	E2BIG       = syscall.Errno(0x7)
	EACCES      = syscall.Errno(0xd)
	EAGAIN      = syscall.Errno(0xb)
	EBADF       = syscall.Errno(0x9)
	EBUSY       = syscall.Errno(0x10)
	ECHILD      = syscall.Errno(0xa)
	EDOM        = syscall.Errno(0x21)
	EEXIST      = syscall.Errno(0x11)
	EFAULT      = syscall.Errno(0xe)
	EFBIG       = syscall.Errno(0x1b)
	EINTR       = syscall.Errno(0x4)
	EINVAL      = syscall.Errno(0x16)
	EIO         = syscall.Errno(0x5)
	EISDIR      = syscall.Errno(0x15)
	EMFILE      = syscall.Errno(0x18)
	EMLINK      = syscall.Errno(0x1f)
	ENFILE      = syscall.Errno(0x17)
	ENODEV      = syscall.Errno(0x13)
	ENOENT      = syscall.Errno(0x2)
	ENOEXEC     = syscall.Errno(0x8)
	ENOMEM      = syscall.Errno(0xc)
	ENOSPC      = syscall.Errno(0x1c)
	ENOTBLK     = syscall.Errno(0xf)
	ENOTDIR     = syscall.Errno(0x14)
	ENOTTY      = syscall.Errno(0x19)
	ENXIO       = syscall.Errno(0x6)
	EPERM       = syscall.Errno(0x1)
	EPIPE       = syscall.Errno(0x20)
	ERANGE      = syscall.Errno(0x22)
	EROFS       = syscall.Errno(0x1e)
	ESPIPE      = syscall.Errno(0x1d)
	ESRCH       = syscall.Errno(0x3)
	ETXTBSY     = syscall.Errno(0x1a)
	EWOULDBLOCK = syscall.Errno(0xb)
	EXDEV       = syscall.Errno(0x12)
)

// Signals
const (
	SIGABRT = syscall.Signal(0x6)
	SIGALRM = syscall.Signal(0xe)
	SIGFPE  = syscall.Signal(0x8)
	SIGHUP  = syscall.Signal(0x1)
	SIGILL  = syscall.Signal(0x4)
	SIGINT  = syscall.Signal(0x2)
	SIGIOT  = syscall.Signal(0x6)
	SIGKILL = syscall.Signal(0x9)
	SIGPIPE = syscall.Signal(0xd)
	SIGQUIT = syscall.Signal(0x3)
	SIGSEGV = syscall.Signal(0xb)
	SIGTERM = syscall.Signal(0xf)
	SIGTRAP = syscall.Signal(0x5)
)
   07070100000E2B000081A4000000000000000000000001645E367C0000862B000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_linux_386.go // mkerrors.sh -Wall -Werror -static -I/tmp/386/include -m32
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build 386 && linux
// +build 386,linux

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -Wall -Werror -static -I/tmp/386/include -m32 _const.go

package unix

import "syscall"

const (
	B1000000                         = 0x1008
	B115200                          = 0x1002
	B1152000                         = 0x1009
	B1500000                         = 0x100a
	B2000000                         = 0x100b
	B230400                          = 0x1003
	B2500000                         = 0x100c
	B3000000                         = 0x100d
	B3500000                         = 0x100e
	B4000000                         = 0x100f
	B460800                          = 0x1004
	B500000                          = 0x1005
	B57600                           = 0x1001
	B576000                          = 0x1006
	B921600                          = 0x1007
	BLKBSZGET                        = 0x80041270
	BLKBSZSET                        = 0x40041271
	BLKFLSBUF                        = 0x1261
	BLKFRAGET                        = 0x1265
	BLKFRASET                        = 0x1264
	BLKGETSIZE                       = 0x1260
	BLKGETSIZE64                     = 0x80041272
	BLKPBSZGET                       = 0x127b
	BLKRAGET                         = 0x1263
	BLKRASET                         = 0x1262
	BLKROGET                         = 0x125e
	BLKROSET                         = 0x125d
	BLKRRPART                        = 0x125f
	BLKSECTGET                       = 0x1267
	BLKSECTSET                       = 0x1266
	BLKSSZGET                        = 0x1268
	BOTHER                           = 0x1000
	BS1                              = 0x2000
	BSDLY                            = 0x2000
	CBAUD                            = 0x100f
	CBAUDEX                          = 0x1000
	CIBAUD                           = 0x100f0000
	CLOCAL                           = 0x800
	CR1                              = 0x200
	CR2                              = 0x400
	CR3                              = 0x600
	CRDLY                            = 0x600
	CREAD                            = 0x80
	CS6                              = 0x10
	CS7                              = 0x20
	CS8                              = 0x30
	CSIZE                            = 0x30
	CSTOPB                           = 0x40
	ECCGETLAYOUT                     = 0x81484d11
	ECCGETSTATS                      = 0x80104d12
	ECHOCTL                          = 0x200
	ECHOE                            = 0x10
	ECHOK                            = 0x20
	ECHOKE                           = 0x800
	ECHONL                           = 0x40
	ECHOPRT                          = 0x400
	EFD_CLOEXEC                      = 0x80000
	EFD_NONBLOCK                     = 0x800
	EPOLL_CLOEXEC                    = 0x80000
	EXTPROC                          = 0x10000
	FF1                              = 0x8000
	FFDLY                            = 0x8000
	FICLONE                          = 0x40049409
	FICLONERANGE                     = 0x4020940d
	FLUSHO                           = 0x1000
	FP_XSTATE_MAGIC2                 = 0x46505845
	FS_IOC_ENABLE_VERITY             = 0x40806685
	FS_IOC_GETFLAGS                  = 0x80046601
	FS_IOC_GET_ENCRYPTION_NONCE      = 0x8010661b
	FS_IOC_GET_ENCRYPTION_POLICY     = 0x400c6615
	FS_IOC_GET_ENCRYPTION_PWSALT     = 0x40106614
	FS_IOC_SETFLAGS                  = 0x40046602
	FS_IOC_SET_ENCRYPTION_POLICY     = 0x800c6613
	F_GETLK                          = 0xc
	F_GETLK64                        = 0xc
	F_GETOWN                         = 0x9
	F_RDLCK                          = 0x0
	F_SETLK                          = 0xd
	F_SETLK64                        = 0xd
	F_SETLKW                         = 0xe
	F_SETLKW64                       = 0xe
	F_SETOWN                         = 0x8
	F_UNLCK                          = 0x2
	F_WRLCK                          = 0x1
	HIDIOCGRAWINFO                   = 0x80084803
	HIDIOCGRDESC                     = 0x90044802
	HIDIOCGRDESCSIZE                 = 0x80044801
	HUPCL                            = 0x400
	ICANON                           = 0x2
	IEXTEN                           = 0x8000
	IN_CLOEXEC                       = 0x80000
	IN_NONBLOCK                      = 0x800
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9
	ISIG                             = 0x1
	IUCLC                            = 0x200
	IXOFF                            = 0x1000
	IXON                             = 0x400
	MAP_32BIT                        = 0x40
	MAP_ANON                         = 0x20
	MAP_ANONYMOUS                    = 0x20
	MAP_DENYWRITE                    = 0x800
	MAP_EXECUTABLE                   = 0x1000
	MAP_GROWSDOWN                    = 0x100
	MAP_HUGETLB                      = 0x40000
	MAP_LOCKED                       = 0x2000
	MAP_NONBLOCK                     = 0x10000
	MAP_NORESERVE                    = 0x4000
	MAP_POPULATE                     = 0x8000
	MAP_STACK                        = 0x20000
	MAP_SYNC                         = 0x80000
	MCL_CURRENT                      = 0x1
	MCL_FUTURE                       = 0x2
	MCL_ONFAULT                      = 0x4
	MEMERASE                         = 0x40084d02
	MEMERASE64                       = 0x40104d14
	MEMGETBADBLOCK                   = 0x40084d0b
	MEMGETINFO                       = 0x80204d01
	MEMGETOOBSEL                     = 0x80c84d0a
	MEMGETREGIONCOUNT                = 0x80044d07
	MEMISLOCKED                      = 0x80084d17
	MEMLOCK                          = 0x40084d05
	MEMREAD                          = 0xc03c4d1a
	MEMREADOOB                       = 0xc00c4d04
	MEMSETBADBLOCK                   = 0x40084d0c
	MEMUNLOCK                        = 0x40084d06
	MEMWRITEOOB                      = 0xc00c4d03
	MTDFILEMODE                      = 0x4d13
	NFDBITS                          = 0x20
	NLDLY                            = 0x100
	NOFLSH                           = 0x80
	NS_GET_NSTYPE                    = 0xb703
	NS_GET_OWNER_UID                 = 0xb704
	NS_GET_PARENT                    = 0xb702
	NS_GET_USERNS                    = 0xb701
	OLCUC                            = 0x2
	ONLCR                            = 0x4
	OTPERASE                         = 0x400c4d19
	OTPGETREGIONCOUNT                = 0x40044d0e
	OTPGETREGIONINFO                 = 0x400c4d0f
	OTPLOCK                          = 0x800c4d10
	OTPSELECT                        = 0x80044d0d
	O_APPEND                         = 0x400
	O_ASYNC                          = 0x2000
	O_CLOEXEC                        = 0x80000
	O_CREAT                          = 0x40
	O_DIRECT                         = 0x4000
	O_DIRECTORY                      = 0x10000
	O_DSYNC                          = 0x1000
	O_EXCL                           = 0x80
	O_FSYNC                          = 0x101000
	O_LARGEFILE                      = 0x8000
	O_NDELAY                         = 0x800
	O_NOATIME                        = 0x40000
	O_NOCTTY                         = 0x100
	O_NOFOLLOW                       = 0x20000
	O_NONBLOCK                       = 0x800
	O_PATH                           = 0x200000
	O_RSYNC                          = 0x101000
	O_SYNC                           = 0x101000
	O_TMPFILE                        = 0x410000
	O_TRUNC                          = 0x200
	PARENB                           = 0x100
	PARODD                           = 0x200
	PENDIN                           = 0x4000
	PERF_EVENT_IOC_DISABLE           = 0x2401
	PERF_EVENT_IOC_ENABLE            = 0x2400
	PERF_EVENT_IOC_ID                = 0x80042407
	PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4004240b
	PERF_EVENT_IOC_PAUSE_OUTPUT      = 0x40042409
	PERF_EVENT_IOC_PERIOD            = 0x40082404
	PERF_EVENT_IOC_QUERY_BPF         = 0xc004240a
	PERF_EVENT_IOC_REFRESH           = 0x2402
	PERF_EVENT_IOC_RESET             = 0x2403
	PERF_EVENT_IOC_SET_BPF           = 0x40042408
	PERF_EVENT_IOC_SET_FILTER        = 0x40042406
	PERF_EVENT_IOC_SET_OUTPUT        = 0x2405
	PPPIOCATTACH                     = 0x4004743d
	PPPIOCATTCHAN                    = 0x40047438
	PPPIOCBRIDGECHAN                 = 0x40047435
	PPPIOCCONNECT                    = 0x4004743a
	PPPIOCDETACH                     = 0x4004743c
	PPPIOCDISCONN                    = 0x7439
	PPPIOCGASYNCMAP                  = 0x80047458
	PPPIOCGCHAN                      = 0x80047437
	PPPIOCGDEBUG                     = 0x80047441
	PPPIOCGFLAGS                     = 0x8004745a
	PPPIOCGIDLE                      = 0x8008743f
	PPPIOCGIDLE32                    = 0x8008743f
	PPPIOCGIDLE64                    = 0x8010743f
	PPPIOCGL2TPSTATS                 = 0x80487436
	PPPIOCGMRU                       = 0x80047453
	PPPIOCGRASYNCMAP                 = 0x80047455
	PPPIOCGUNIT                      = 0x80047456
	PPPIOCGXASYNCMAP                 = 0x80207450
	PPPIOCSACTIVE                    = 0x40087446
	PPPIOCSASYNCMAP                  = 0x40047457
	PPPIOCSCOMPRESS                  = 0x400c744d
	PPPIOCSDEBUG                     = 0x40047440
	PPPIOCSFLAGS                     = 0x40047459
	PPPIOCSMAXCID                    = 0x40047451
	PPPIOCSMRRU                      = 0x4004743b
	PPPIOCSMRU                       = 0x40047452
	PPPIOCSNPMODE                    = 0x4008744b
	PPPIOCSPASS                      = 0x40087447
	PPPIOCSRASYNCMAP                 = 0x40047454
	PPPIOCSXASYNCMAP                 = 0x4020744f
	PPPIOCUNBRIDGECHAN               = 0x7434
	PPPIOCXFERUNIT                   = 0x744e
	PR_SET_PTRACER_ANY               = 0xffffffff
	PTRACE_GETFPREGS                 = 0xe
	PTRACE_GETFPXREGS                = 0x12
	PTRACE_GET_THREAD_AREA           = 0x19
	PTRACE_OLDSETOPTIONS             = 0x15
	PTRACE_SETFPREGS                 = 0xf
	PTRACE_SETFPXREGS                = 0x13
	PTRACE_SET_THREAD_AREA           = 0x1a
	PTRACE_SINGLEBLOCK               = 0x21
	PTRACE_SYSEMU                    = 0x1f
	PTRACE_SYSEMU_SINGLESTEP         = 0x20
	RLIMIT_AS                        = 0x9
	RLIMIT_MEMLOCK                   = 0x8
	RLIMIT_NOFILE                    = 0x7
	RLIMIT_NPROC                     = 0x6
	RLIMIT_RSS                       = 0x5
	RNDADDENTROPY                    = 0x40085203
	RNDADDTOENTCNT                   = 0x40045201
	RNDCLEARPOOL                     = 0x5206
	RNDGETENTCNT                     = 0x80045200
	RNDGETPOOL                       = 0x80085202
	RNDRESEEDCRNG                    = 0x5207
	RNDZAPENTCNT                     = 0x5204
	RTC_AIE_OFF                      = 0x7002
	RTC_AIE_ON                       = 0x7001
	RTC_ALM_READ                     = 0x80247008
	RTC_ALM_SET                      = 0x40247007
	RTC_EPOCH_READ                   = 0x8004700d
	RTC_EPOCH_SET                    = 0x4004700e
	RTC_IRQP_READ                    = 0x8004700b
	RTC_IRQP_SET                     = 0x4004700c
	RTC_PARAM_GET                    = 0x40187013
	RTC_PARAM_SET                    = 0x40187014
	RTC_PIE_OFF                      = 0x7006
	RTC_PIE_ON                       = 0x7005
	RTC_PLL_GET                      = 0x801c7011
	RTC_PLL_SET                      = 0x401c7012
	RTC_RD_TIME                      = 0x80247009
	RTC_SET_TIME                     = 0x4024700a
	RTC_UIE_OFF                      = 0x7004
	RTC_UIE_ON                       = 0x7003
	RTC_VL_CLR                       = 0x7014
	RTC_VL_READ                      = 0x80047013
	RTC_WIE_OFF                      = 0x7010
	RTC_WIE_ON                       = 0x700f
	RTC_WKALM_RD                     = 0x80287010
	RTC_WKALM_SET                    = 0x4028700f
	SCM_TIMESTAMPING                 = 0x25
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
	SCM_TIMESTAMPNS                  = 0x23
	SCM_TXTIME                       = 0x3d
	SCM_WIFI_STATUS                  = 0x29
	SFD_CLOEXEC                      = 0x80000
	SFD_NONBLOCK                     = 0x800
	SIOCATMARK                       = 0x8905
	SIOCGPGRP                        = 0x8904
	SIOCGSTAMPNS_NEW                 = 0x80108907
	SIOCGSTAMP_NEW                   = 0x80108906
	SIOCINQ                          = 0x541b
	SIOCOUTQ                         = 0x5411
	SIOCSPGRP                        = 0x8902
	SOCK_CLOEXEC                     = 0x80000
	SOCK_DGRAM                       = 0x2
	SOCK_NONBLOCK                    = 0x800
	SOCK_STREAM                      = 0x1
	SOL_SOCKET                       = 0x1
	SO_ACCEPTCONN                    = 0x1e
	SO_ATTACH_BPF                    = 0x32
	SO_ATTACH_REUSEPORT_CBPF         = 0x33
	SO_ATTACH_REUSEPORT_EBPF         = 0x34
	SO_BINDTODEVICE                  = 0x19
	SO_BINDTOIFINDEX                 = 0x3e
	SO_BPF_EXTENSIONS                = 0x30
	SO_BROADCAST                     = 0x6
	SO_BSDCOMPAT                     = 0xe
	SO_BUF_LOCK                      = 0x48
	SO_BUSY_POLL                     = 0x2e
	SO_BUSY_POLL_BUDGET              = 0x46
	SO_CNX_ADVICE                    = 0x35
	SO_COOKIE                        = 0x39
	SO_DETACH_REUSEPORT_BPF          = 0x44
	SO_DOMAIN                        = 0x27
	SO_DONTROUTE                     = 0x5
	SO_ERROR                         = 0x4
	SO_INCOMING_CPU                  = 0x31
	SO_INCOMING_NAPI_ID              = 0x38
	SO_KEEPALIVE                     = 0x9
	SO_LINGER                        = 0xd
	SO_LOCK_FILTER                   = 0x2c
	SO_MARK                          = 0x24
	SO_MAX_PACING_RATE               = 0x2f
	SO_MEMINFO                       = 0x37
	SO_NETNS_COOKIE                  = 0x47
	SO_NOFCS                         = 0x2b
	SO_OOBINLINE                     = 0xa
	SO_PASSCRED                      = 0x10
	SO_PASSSEC                       = 0x22
	SO_PEEK_OFF                      = 0x2a
	SO_PEERCRED                      = 0x11
	SO_PEERGROUPS                    = 0x3b
	SO_PEERSEC                       = 0x1f
	SO_PREFER_BUSY_POLL              = 0x45
	SO_PROTOCOL                      = 0x26
	SO_RCVBUF                        = 0x8
	SO_RCVBUFFORCE                   = 0x21
	SO_RCVLOWAT                      = 0x12
	SO_RCVMARK                       = 0x4b
	SO_RCVTIMEO                      = 0x14
	SO_RCVTIMEO_NEW                  = 0x42
	SO_RCVTIMEO_OLD                  = 0x14
	SO_RESERVE_MEM                   = 0x49
	SO_REUSEADDR                     = 0x2
	SO_REUSEPORT                     = 0xf
	SO_RXQ_OVFL                      = 0x28
	SO_SECURITY_AUTHENTICATION       = 0x16
	SO_SECURITY_ENCRYPTION_NETWORK   = 0x18
	SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
	SO_SELECT_ERR_QUEUE              = 0x2d
	SO_SNDBUF                        = 0x7
	SO_SNDBUFFORCE                   = 0x20
	SO_SNDLOWAT                      = 0x13
	SO_SNDTIMEO                      = 0x15
	SO_SNDTIMEO_NEW                  = 0x43
	SO_SNDTIMEO_OLD                  = 0x15
	SO_TIMESTAMPING                  = 0x25
	SO_TIMESTAMPING_NEW              = 0x41
	SO_TIMESTAMPING_OLD              = 0x25
	SO_TIMESTAMPNS                   = 0x23
	SO_TIMESTAMPNS_NEW               = 0x40
	SO_TIMESTAMPNS_OLD               = 0x23
	SO_TIMESTAMP_NEW                 = 0x3f
	SO_TXREHASH                      = 0x4a
	SO_TXTIME                        = 0x3d
	SO_TYPE                          = 0x3
	SO_WIFI_STATUS                   = 0x29
	SO_ZEROCOPY                      = 0x3c
	TAB1                             = 0x800
	TAB2                             = 0x1000
	TAB3                             = 0x1800
	TABDLY                           = 0x1800
	TCFLSH                           = 0x540b
	TCGETA                           = 0x5405
	TCGETS                           = 0x5401
	TCGETS2                          = 0x802c542a
	TCGETX                           = 0x5432
	TCSAFLUSH                        = 0x2
	TCSBRK                           = 0x5409
	TCSBRKP                          = 0x5425
	TCSETA                           = 0x5406
	TCSETAF                          = 0x5408
	TCSETAW                          = 0x5407
	TCSETS                           = 0x5402
	TCSETS2                          = 0x402c542b
	TCSETSF                          = 0x5404
	TCSETSF2                         = 0x402c542d
	TCSETSW                          = 0x5403
	TCSETSW2                         = 0x402c542c
	TCSETX                           = 0x5433
	TCSETXF                          = 0x5434
	TCSETXW                          = 0x5435
	TCXONC                           = 0x540a
	TFD_CLOEXEC                      = 0x80000
	TFD_NONBLOCK                     = 0x800
	TIOCCBRK                         = 0x5428
	TIOCCONS                         = 0x541d
	TIOCEXCL                         = 0x540c
	TIOCGDEV                         = 0x80045432
	TIOCGETD                         = 0x5424
	TIOCGEXCL                        = 0x80045440
	TIOCGICOUNT                      = 0x545d
	TIOCGISO7816                     = 0x80285442
	TIOCGLCKTRMIOS                   = 0x5456
	TIOCGPGRP                        = 0x540f
	TIOCGPKT                         = 0x80045438
	TIOCGPTLCK                       = 0x80045439
	TIOCGPTN                         = 0x80045430
	TIOCGPTPEER                      = 0x5441
	TIOCGRS485                       = 0x542e
	TIOCGSERIAL                      = 0x541e
	TIOCGSID                         = 0x5429
	TIOCGSOFTCAR                     = 0x5419
	TIOCGWINSZ                       = 0x5413
	TIOCINQ                          = 0x541b
	TIOCLINUX                        = 0x541c
	TIOCMBIC                         = 0x5417
	TIOCMBIS                         = 0x5416
	TIOCMGET                         = 0x5415
	TIOCMIWAIT                       = 0x545c
	TIOCMSET                         = 0x5418
	TIOCM_CAR                        = 0x40
	TIOCM_CD                         = 0x40
	TIOCM_CTS                        = 0x20
	TIOCM_DSR                        = 0x100
	TIOCM_RI                         = 0x80
	TIOCM_RNG                        = 0x80
	TIOCM_SR                         = 0x10
	TIOCM_ST                         = 0x8
	TIOCNOTTY                        = 0x5422
	TIOCNXCL                         = 0x540d
	TIOCOUTQ                         = 0x5411
	TIOCPKT                          = 0x5420
	TIOCSBRK                         = 0x5427
	TIOCSCTTY                        = 0x540e
	TIOCSERCONFIG                    = 0x5453
	TIOCSERGETLSR                    = 0x5459
	TIOCSERGETMULTI                  = 0x545a
	TIOCSERGSTRUCT                   = 0x5458
	TIOCSERGWILD                     = 0x5454
	TIOCSERSETMULTI                  = 0x545b
	TIOCSERSWILD                     = 0x5455
	TIOCSER_TEMT                     = 0x1
	TIOCSETD                         = 0x5423
	TIOCSIG                          = 0x40045436
	TIOCSISO7816                     = 0xc0285443
	TIOCSLCKTRMIOS                   = 0x5457
	TIOCSPGRP                        = 0x5410
	TIOCSPTLCK                       = 0x40045431
	TIOCSRS485                       = 0x542f
	TIOCSSERIAL                      = 0x541f
	TIOCSSOFTCAR                     = 0x541a
	TIOCSTI                          = 0x5412
	TIOCSWINSZ                       = 0x5414
	TIOCVHANGUP                      = 0x5437
	TOSTOP                           = 0x100
	TUNATTACHFILTER                  = 0x400854d5
	TUNDETACHFILTER                  = 0x400854d6
	TUNGETDEVNETNS                   = 0x54e3
	TUNGETFEATURES                   = 0x800454cf
	TUNGETFILTER                     = 0x800854db
	TUNGETIFF                        = 0x800454d2
	TUNGETSNDBUF                     = 0x800454d3
	TUNGETVNETBE                     = 0x800454df
	TUNGETVNETHDRSZ                  = 0x800454d7
	TUNGETVNETLE                     = 0x800454dd
	TUNSETCARRIER                    = 0x400454e2
	TUNSETDEBUG                      = 0x400454c9
	TUNSETFILTEREBPF                 = 0x800454e1
	TUNSETGROUP                      = 0x400454ce
	TUNSETIFF                        = 0x400454ca
	TUNSETIFINDEX                    = 0x400454da
	TUNSETLINK                       = 0x400454cd
	TUNSETNOCSUM                     = 0x400454c8
	TUNSETOFFLOAD                    = 0x400454d0
	TUNSETOWNER                      = 0x400454cc
	TUNSETPERSIST                    = 0x400454cb
	TUNSETQUEUE                      = 0x400454d9
	TUNSETSNDBUF                     = 0x400454d4
	TUNSETSTEERINGEBPF               = 0x800454e0
	TUNSETTXFILTER                   = 0x400454d1
	TUNSETVNETBE                     = 0x400454de
	TUNSETVNETHDRSZ                  = 0x400454d8
	TUNSETVNETLE                     = 0x400454dc
	UBI_IOCATT                       = 0x40186f40
	UBI_IOCDET                       = 0x40046f41
	UBI_IOCEBCH                      = 0x40044f02
	UBI_IOCEBER                      = 0x40044f01
	UBI_IOCEBISMAP                   = 0x80044f05
	UBI_IOCEBMAP                     = 0x40084f03
	UBI_IOCEBUNMAP                   = 0x40044f04
	UBI_IOCMKVOL                     = 0x40986f00
	UBI_IOCRMVOL                     = 0x40046f01
	UBI_IOCRNVOL                     = 0x51106f03
	UBI_IOCRPEB                      = 0x40046f04
	UBI_IOCRSVOL                     = 0x400c6f02
	UBI_IOCSETVOLPROP                = 0x40104f06
	UBI_IOCSPEB                      = 0x40046f05
	UBI_IOCVOLCRBLK                  = 0x40804f07
	UBI_IOCVOLRMBLK                  = 0x4f08
	UBI_IOCVOLUP                     = 0x40084f00
	VDISCARD                         = 0xd
	VEOF                             = 0x4
	VEOL                             = 0xb
	VEOL2                            = 0x10
	VMIN                             = 0x6
	VREPRINT                         = 0xc
	VSTART                           = 0x8
	VSTOP                            = 0x9
	VSUSP                            = 0xa
	VSWTC                            = 0x7
	VT1                              = 0x4000
	VTDLY                            = 0x4000
	VTIME                            = 0x5
	VWERASE                          = 0xe
	WDIOC_GETBOOTSTATUS              = 0x80045702
	WDIOC_GETPRETIMEOUT              = 0x80045709
	WDIOC_GETSTATUS                  = 0x80045701
	WDIOC_GETSUPPORT                 = 0x80285700
	WDIOC_GETTEMP                    = 0x80045703
	WDIOC_GETTIMELEFT                = 0x8004570a
	WDIOC_GETTIMEOUT                 = 0x80045707
	WDIOC_KEEPALIVE                  = 0x80045705
	WDIOC_SETOPTIONS                 = 0x80045704
	WORDSIZE                         = 0x20
	X86_FXSR_MAGIC                   = 0x0
	XCASE                            = 0x4
	XTABS                            = 0x1800
	_HIDIOCGRAWNAME                  = 0x80804804
	_HIDIOCGRAWPHYS                  = 0x80404805
	_HIDIOCGRAWUNIQ                  = 0x80404808
)

// Errors
const (
	EADDRINUSE      = syscall.Errno(0x62)
	EADDRNOTAVAIL   = syscall.Errno(0x63)
	EADV            = syscall.Errno(0x44)
	EAFNOSUPPORT    = syscall.Errno(0x61)
	EALREADY        = syscall.Errno(0x72)
	EBADE           = syscall.Errno(0x34)
	EBADFD          = syscall.Errno(0x4d)
	EBADMSG         = syscall.Errno(0x4a)
	EBADR           = syscall.Errno(0x35)
	EBADRQC         = syscall.Errno(0x38)
	EBADSLT         = syscall.Errno(0x39)
	EBFONT          = syscall.Errno(0x3b)
	ECANCELED       = syscall.Errno(0x7d)
	ECHRNG          = syscall.Errno(0x2c)
	ECOMM           = syscall.Errno(0x46)
	ECONNABORTED    = syscall.Errno(0x67)
	ECONNREFUSED    = syscall.Errno(0x6f)
	ECONNRESET      = syscall.Errno(0x68)
	EDEADLK         = syscall.Errno(0x23)
	EDEADLOCK       = syscall.Errno(0x23)
	EDESTADDRREQ    = syscall.Errno(0x59)
	EDOTDOT         = syscall.Errno(0x49)
	EDQUOT          = syscall.Errno(0x7a)
	EHOSTDOWN       = syscall.Errno(0x70)
	EHOSTUNREACH    = syscall.Errno(0x71)
	EHWPOISON       = syscall.Errno(0x85)
	EIDRM           = syscall.Errno(0x2b)
	EILSEQ          = syscall.Errno(0x54)
	EINPROGRESS     = syscall.Errno(0x73)
	EISCONN         = syscall.Errno(0x6a)
	EISNAM          = syscall.Errno(0x78)
	EKEYEXPIRED     = syscall.Errno(0x7f)
	EKEYREJECTED    = syscall.Errno(0x81)
	EKEYREVOKED     = syscall.Errno(0x80)
	EL2HLT          = syscall.Errno(0x33)
	EL2NSYNC        = syscall.Errno(0x2d)
	EL3HLT          = syscall.Errno(0x2e)
	EL3RST          = syscall.Errno(0x2f)
	ELIBACC         = syscall.Errno(0x4f)
	ELIBBAD         = syscall.Errno(0x50)
	ELIBEXEC        = syscall.Errno(0x53)
	ELIBMAX         = syscall.Errno(0x52)
	ELIBSCN         = syscall.Errno(0x51)
	ELNRNG          = syscall.Errno(0x30)
	ELOOP           = syscall.Errno(0x28)
	EMEDIUMTYPE     = syscall.Errno(0x7c)
	EMSGSIZE        = syscall.Errno(0x5a)
	EMULTIHOP       = syscall.Errno(0x48)
	ENAMETOOLONG    = syscall.Errno(0x24)
	ENAVAIL         = syscall.Errno(0x77)
	ENETDOWN        = syscall.Errno(0x64)
	ENETRESET       = syscall.Errno(0x66)
	ENETUNREACH     = syscall.Errno(0x65)
	ENOANO          = syscall.Errno(0x37)
	ENOBUFS         = syscall.Errno(0x69)
	ENOCSI          = syscall.Errno(0x32)
	ENODATA         = syscall.Errno(0x3d)
	ENOKEY          = syscall.Errno(0x7e)
	ENOLCK          = syscall.Errno(0x25)
	ENOLINK         = syscall.Errno(0x43)
	ENOMEDIUM       = syscall.Errno(0x7b)
	ENOMSG          = syscall.Errno(0x2a)
	ENONET          = syscall.Errno(0x40)
	ENOPKG          = syscall.Errno(0x41)
	ENOPROTOOPT     = syscall.Errno(0x5c)
	ENOSR           = syscall.Errno(0x3f)
	ENOSTR          = syscall.Errno(0x3c)
	ENOSYS          = syscall.Errno(0x26)
	ENOTCONN        = syscall.Errno(0x6b)
	ENOTEMPTY       = syscall.Errno(0x27)
	ENOTNAM         = syscall.Errno(0x76)
	ENOTRECOVERABLE = syscall.Errno(0x83)
	ENOTSOCK        = syscall.Errno(0x58)
	ENOTSUP         = syscall.Errno(0x5f)
	ENOTUNIQ        = syscall.Errno(0x4c)
	EOPNOTSUPP      = syscall.Errno(0x5f)
	EOVERFLOW       = syscall.Errno(0x4b)
	EOWNERDEAD      = syscall.Errno(0x82)
	EPFNOSUPPORT    = syscall.Errno(0x60)
	EPROTO          = syscall.Errno(0x47)
	EPROTONOSUPPORT = syscall.Errno(0x5d)
	EPROTOTYPE      = syscall.Errno(0x5b)
	EREMCHG         = syscall.Errno(0x4e)
	EREMOTE         = syscall.Errno(0x42)
	EREMOTEIO       = syscall.Errno(0x79)
	ERESTART        = syscall.Errno(0x55)
	ERFKILL         = syscall.Errno(0x84)
	ESHUTDOWN       = syscall.Errno(0x6c)
	ESOCKTNOSUPPORT = syscall.Errno(0x5e)
	ESRMNT          = syscall.Errno(0x45)
	ESTALE          = syscall.Errno(0x74)
	ESTRPIPE        = syscall.Errno(0x56)
	ETIME           = syscall.Errno(0x3e)
	ETIMEDOUT       = syscall.Errno(0x6e)
	ETOOMANYREFS    = syscall.Errno(0x6d)
	EUCLEAN         = syscall.Errno(0x75)
	EUNATCH         = syscall.Errno(0x31)
	EUSERS          = syscall.Errno(0x57)
	EXFULL          = syscall.Errno(0x36)
)

// Signals
const (
	SIGBUS    = syscall.Signal(0x7)
	SIGCHLD   = syscall.Signal(0x11)
	SIGCLD    = syscall.Signal(0x11)
	SIGCONT   = syscall.Signal(0x12)
	SIGIO     = syscall.Signal(0x1d)
	SIGPOLL   = syscall.Signal(0x1d)
	SIGPROF   = syscall.Signal(0x1b)
	SIGPWR    = syscall.Signal(0x1e)
	SIGSTKFLT = syscall.Signal(0x10)
	SIGSTOP   = syscall.Signal(0x13)
	SIGSYS    = syscall.Signal(0x1f)
	SIGTSTP   = syscall.Signal(0x14)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x17)
	SIGUSR1   = syscall.Signal(0xa)
	SIGUSR2   = syscall.Signal(0xc)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "no such device or address"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EAGAIN", "resource temporarily unavailable"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device or resource busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "invalid cross-device link"},
	{19, "ENODEV", "no such device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "numerical result out of range"},
	{35, "EDEADLK", "resource deadlock avoided"},
	{36, "ENAMETOOLONG", "file name too long"},
	{37, "ENOLCK", "no locks available"},
	{38, "ENOSYS", "function not implemented"},
	{39, "ENOTEMPTY", "directory not empty"},
	{40, "ELOOP", "too many levels of symbolic links"},
	{42, "ENOMSG", "no message of desired type"},
	{43, "EIDRM", "identifier removed"},
	{44, "ECHRNG", "channel number out of range"},
	{45, "EL2NSYNC", "level 2 not synchronized"},
	{46, "EL3HLT", "level 3 halted"},
	{47, "EL3RST", "level 3 reset"},
	{48, "ELNRNG", "link number out of range"},
	{49, "EUNATCH", "protocol driver not attached"},
	{50, "ENOCSI", "no CSI structure available"},
	{51, "EL2HLT", "level 2 halted"},
	{52, "EBADE", "invalid exchange"},
	{53, "EBADR", "invalid request descriptor"},
	{54, "EXFULL", "exchange full"},
	{55, "ENOANO", "no anode"},
	{56, "EBADRQC", "invalid request code"},
	{57, "EBADSLT", "invalid slot"},
	{59, "EBFONT", "bad font file format"},
	{60, "ENOSTR", "device not a stream"},
	{61, "ENODATA", "no data available"},
	{62, "ETIME", "timer expired"},
	{63, "ENOSR", "out of streams resources"},
	{64, "ENONET", "machine is not on the network"},
	{65, "ENOPKG", "package not installed"},
	{66, "EREMOTE", "object is remote"},
	{67, "ENOLINK", "link has been severed"},
	{68, "EADV", "advertise error"},
	{69, "ESRMNT", "srmount error"},
	{70, "ECOMM", "communication error on send"},
	{71, "EPROTO", "protocol error"},
	{72, "EMULTIHOP", "multihop attempted"},
	{73, "EDOTDOT", "RFS specific error"},
	{74, "EBADMSG", "bad message"},
	{75, "EOVERFLOW", "value too large for defined data type"},
	{76, "ENOTUNIQ", "name not unique on network"},
	{77, "EBADFD", "file descriptor in bad state"},
	{78, "EREMCHG", "remote address changed"},
	{79, "ELIBACC", "can not access a needed shared library"},
	{80, "ELIBBAD", "accessing a corrupted shared library"},
	{81, "ELIBSCN", ".lib section in a.out corrupted"},
	{82, "ELIBMAX", "attempting to link in too many shared libraries"},
	{83, "ELIBEXEC", "cannot exec a shared library directly"},
	{84, "EILSEQ", "invalid or incomplete multibyte or wide character"},
	{85, "ERESTART", "interrupted system call should be restarted"},
	{86, "ESTRPIPE", "streams pipe error"},
	{87, "EUSERS", "too many users"},
	{88, "ENOTSOCK", "socket operation on non-socket"},
	{89, "EDESTADDRREQ", "destination address required"},
	{90, "EMSGSIZE", "message too long"},
	{91, "EPROTOTYPE", "protocol wrong type for socket"},
	{92, "ENOPROTOOPT", "protocol not available"},
	{93, "EPROTONOSUPPORT", "protocol not supported"},
	{94, "ESOCKTNOSUPPORT", "socket type not supported"},
	{95, "ENOTSUP", "operation not supported"},
	{96, "EPFNOSUPPORT", "protocol family not supported"},
	{97, "EAFNOSUPPORT", "address family not supported by protocol"},
	{98, "EADDRINUSE", "address already in use"},
	{99, "EADDRNOTAVAIL", "cannot assign requested address"},
	{100, "ENETDOWN", "network is down"},
	{101, "ENETUNREACH", "network is unreachable"},
	{102, "ENETRESET", "network dropped connection on reset"},
	{103, "ECONNABORTED", "software caused connection abort"},
	{104, "ECONNRESET", "connection reset by peer"},
	{105, "ENOBUFS", "no buffer space available"},
	{106, "EISCONN", "transport endpoint is already connected"},
	{107, "ENOTCONN", "transport endpoint is not connected"},
	{108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
	{109, "ETOOMANYREFS", "too many references: cannot splice"},
	{110, "ETIMEDOUT", "connection timed out"},
	{111, "ECONNREFUSED", "connection refused"},
	{112, "EHOSTDOWN", "host is down"},
	{113, "EHOSTUNREACH", "no route to host"},
	{114, "EALREADY", "operation already in progress"},
	{115, "EINPROGRESS", "operation now in progress"},
	{116, "ESTALE", "stale file handle"},
	{117, "EUCLEAN", "structure needs cleaning"},
	{118, "ENOTNAM", "not a XENIX named type file"},
	{119, "ENAVAIL", "no XENIX semaphores available"},
	{120, "EISNAM", "is a named type file"},
	{121, "EREMOTEIO", "remote I/O error"},
	{122, "EDQUOT", "disk quota exceeded"},
	{123, "ENOMEDIUM", "no medium found"},
	{124, "EMEDIUMTYPE", "wrong medium type"},
	{125, "ECANCELED", "operation canceled"},
	{126, "ENOKEY", "required key not available"},
	{127, "EKEYEXPIRED", "key has expired"},
	{128, "EKEYREVOKED", "key has been revoked"},
	{129, "EKEYREJECTED", "key was rejected by service"},
	{130, "EOWNERDEAD", "owner died"},
	{131, "ENOTRECOVERABLE", "state not recoverable"},
	{132, "ERFKILL", "operation not possible due to RF-kill"},
	{133, "EHWPOISON", "memory page has hardware error"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/breakpoint trap"},
	{6, "SIGABRT", "aborted"},
	{7, "SIGBUS", "bus error"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGUSR1", "user defined signal 1"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGUSR2", "user defined signal 2"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGSTKFLT", "stack fault"},
	{17, "SIGCHLD", "child exited"},
	{18, "SIGCONT", "continued"},
	{19, "SIGSTOP", "stopped (signal)"},
	{20, "SIGTSTP", "stopped"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGURG", "urgent I/O condition"},
	{24, "SIGXCPU", "CPU time limit exceeded"},
	{25, "SIGXFSZ", "file size limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window changed"},
	{29, "SIGIO", "I/O possible"},
	{30, "SIGPWR", "power failure"},
	{31, "SIGSYS", "bad system call"},
}
 07070100000E2C000081A4000000000000000000000001645E367C00008639000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go   // mkerrors.sh -Wall -Werror -static -I/tmp/amd64/include -m64
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build amd64 && linux
// +build amd64,linux

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -Wall -Werror -static -I/tmp/amd64/include -m64 _const.go

package unix

import "syscall"

const (
	B1000000                         = 0x1008
	B115200                          = 0x1002
	B1152000                         = 0x1009
	B1500000                         = 0x100a
	B2000000                         = 0x100b
	B230400                          = 0x1003
	B2500000                         = 0x100c
	B3000000                         = 0x100d
	B3500000                         = 0x100e
	B4000000                         = 0x100f
	B460800                          = 0x1004
	B500000                          = 0x1005
	B57600                           = 0x1001
	B576000                          = 0x1006
	B921600                          = 0x1007
	BLKBSZGET                        = 0x80081270
	BLKBSZSET                        = 0x40081271
	BLKFLSBUF                        = 0x1261
	BLKFRAGET                        = 0x1265
	BLKFRASET                        = 0x1264
	BLKGETSIZE                       = 0x1260
	BLKGETSIZE64                     = 0x80081272
	BLKPBSZGET                       = 0x127b
	BLKRAGET                         = 0x1263
	BLKRASET                         = 0x1262
	BLKROGET                         = 0x125e
	BLKROSET                         = 0x125d
	BLKRRPART                        = 0x125f
	BLKSECTGET                       = 0x1267
	BLKSECTSET                       = 0x1266
	BLKSSZGET                        = 0x1268
	BOTHER                           = 0x1000
	BS1                              = 0x2000
	BSDLY                            = 0x2000
	CBAUD                            = 0x100f
	CBAUDEX                          = 0x1000
	CIBAUD                           = 0x100f0000
	CLOCAL                           = 0x800
	CR1                              = 0x200
	CR2                              = 0x400
	CR3                              = 0x600
	CRDLY                            = 0x600
	CREAD                            = 0x80
	CS6                              = 0x10
	CS7                              = 0x20
	CS8                              = 0x30
	CSIZE                            = 0x30
	CSTOPB                           = 0x40
	ECCGETLAYOUT                     = 0x81484d11
	ECCGETSTATS                      = 0x80104d12
	ECHOCTL                          = 0x200
	ECHOE                            = 0x10
	ECHOK                            = 0x20
	ECHOKE                           = 0x800
	ECHONL                           = 0x40
	ECHOPRT                          = 0x400
	EFD_CLOEXEC                      = 0x80000
	EFD_NONBLOCK                     = 0x800
	EPOLL_CLOEXEC                    = 0x80000
	EXTPROC                          = 0x10000
	FF1                              = 0x8000
	FFDLY                            = 0x8000
	FICLONE                          = 0x40049409
	FICLONERANGE                     = 0x4020940d
	FLUSHO                           = 0x1000
	FP_XSTATE_MAGIC2                 = 0x46505845
	FS_IOC_ENABLE_VERITY             = 0x40806685
	FS_IOC_GETFLAGS                  = 0x80086601
	FS_IOC_GET_ENCRYPTION_NONCE      = 0x8010661b
	FS_IOC_GET_ENCRYPTION_POLICY     = 0x400c6615
	FS_IOC_GET_ENCRYPTION_PWSALT     = 0x40106614
	FS_IOC_SETFLAGS                  = 0x40086602
	FS_IOC_SET_ENCRYPTION_POLICY     = 0x800c6613
	F_GETLK                          = 0x5
	F_GETLK64                        = 0x5
	F_GETOWN                         = 0x9
	F_RDLCK                          = 0x0
	F_SETLK                          = 0x6
	F_SETLK64                        = 0x6
	F_SETLKW                         = 0x7
	F_SETLKW64                       = 0x7
	F_SETOWN                         = 0x8
	F_UNLCK                          = 0x2
	F_WRLCK                          = 0x1
	HIDIOCGRAWINFO                   = 0x80084803
	HIDIOCGRDESC                     = 0x90044802
	HIDIOCGRDESCSIZE                 = 0x80044801
	HUPCL                            = 0x400
	ICANON                           = 0x2
	IEXTEN                           = 0x8000
	IN_CLOEXEC                       = 0x80000
	IN_NONBLOCK                      = 0x800
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9
	ISIG                             = 0x1
	IUCLC                            = 0x200
	IXOFF                            = 0x1000
	IXON                             = 0x400
	MAP_32BIT                        = 0x40
	MAP_ANON                         = 0x20
	MAP_ANONYMOUS                    = 0x20
	MAP_DENYWRITE                    = 0x800
	MAP_EXECUTABLE                   = 0x1000
	MAP_GROWSDOWN                    = 0x100
	MAP_HUGETLB                      = 0x40000
	MAP_LOCKED                       = 0x2000
	MAP_NONBLOCK                     = 0x10000
	MAP_NORESERVE                    = 0x4000
	MAP_POPULATE                     = 0x8000
	MAP_STACK                        = 0x20000
	MAP_SYNC                         = 0x80000
	MCL_CURRENT                      = 0x1
	MCL_FUTURE                       = 0x2
	MCL_ONFAULT                      = 0x4
	MEMERASE                         = 0x40084d02
	MEMERASE64                       = 0x40104d14
	MEMGETBADBLOCK                   = 0x40084d0b
	MEMGETINFO                       = 0x80204d01
	MEMGETOOBSEL                     = 0x80c84d0a
	MEMGETREGIONCOUNT                = 0x80044d07
	MEMISLOCKED                      = 0x80084d17
	MEMLOCK                          = 0x40084d05
	MEMREAD                          = 0xc0404d1a
	MEMREADOOB                       = 0xc0104d04
	MEMSETBADBLOCK                   = 0x40084d0c
	MEMUNLOCK                        = 0x40084d06
	MEMWRITEOOB                      = 0xc0104d03
	MTDFILEMODE                      = 0x4d13
	NFDBITS                          = 0x40
	NLDLY                            = 0x100
	NOFLSH                           = 0x80
	NS_GET_NSTYPE                    = 0xb703
	NS_GET_OWNER_UID                 = 0xb704
	NS_GET_PARENT                    = 0xb702
	NS_GET_USERNS                    = 0xb701
	OLCUC                            = 0x2
	ONLCR                            = 0x4
	OTPERASE                         = 0x400c4d19
	OTPGETREGIONCOUNT                = 0x40044d0e
	OTPGETREGIONINFO                 = 0x400c4d0f
	OTPLOCK                          = 0x800c4d10
	OTPSELECT                        = 0x80044d0d
	O_APPEND                         = 0x400
	O_ASYNC                          = 0x2000
	O_CLOEXEC                        = 0x80000
	O_CREAT                          = 0x40
	O_DIRECT                         = 0x4000
	O_DIRECTORY                      = 0x10000
	O_DSYNC                          = 0x1000
	O_EXCL                           = 0x80
	O_FSYNC                          = 0x101000
	O_LARGEFILE                      = 0x0
	O_NDELAY                         = 0x800
	O_NOATIME                        = 0x40000
	O_NOCTTY                         = 0x100
	O_NOFOLLOW                       = 0x20000
	O_NONBLOCK                       = 0x800
	O_PATH                           = 0x200000
	O_RSYNC                          = 0x101000
	O_SYNC                           = 0x101000
	O_TMPFILE                        = 0x410000
	O_TRUNC                          = 0x200
	PARENB                           = 0x100
	PARODD                           = 0x200
	PENDIN                           = 0x4000
	PERF_EVENT_IOC_DISABLE           = 0x2401
	PERF_EVENT_IOC_ENABLE            = 0x2400
	PERF_EVENT_IOC_ID                = 0x80082407
	PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b
	PERF_EVENT_IOC_PAUSE_OUTPUT      = 0x40042409
	PERF_EVENT_IOC_PERIOD            = 0x40082404
	PERF_EVENT_IOC_QUERY_BPF         = 0xc008240a
	PERF_EVENT_IOC_REFRESH           = 0x2402
	PERF_EVENT_IOC_RESET             = 0x2403
	PERF_EVENT_IOC_SET_BPF           = 0x40042408
	PERF_EVENT_IOC_SET_FILTER        = 0x40082406
	PERF_EVENT_IOC_SET_OUTPUT        = 0x2405
	PPPIOCATTACH                     = 0x4004743d
	PPPIOCATTCHAN                    = 0x40047438
	PPPIOCBRIDGECHAN                 = 0x40047435
	PPPIOCCONNECT                    = 0x4004743a
	PPPIOCDETACH                     = 0x4004743c
	PPPIOCDISCONN                    = 0x7439
	PPPIOCGASYNCMAP                  = 0x80047458
	PPPIOCGCHAN                      = 0x80047437
	PPPIOCGDEBUG                     = 0x80047441
	PPPIOCGFLAGS                     = 0x8004745a
	PPPIOCGIDLE                      = 0x8010743f
	PPPIOCGIDLE32                    = 0x8008743f
	PPPIOCGIDLE64                    = 0x8010743f
	PPPIOCGL2TPSTATS                 = 0x80487436
	PPPIOCGMRU                       = 0x80047453
	PPPIOCGRASYNCMAP                 = 0x80047455
	PPPIOCGUNIT                      = 0x80047456
	PPPIOCGXASYNCMAP                 = 0x80207450
	PPPIOCSACTIVE                    = 0x40107446
	PPPIOCSASYNCMAP                  = 0x40047457
	PPPIOCSCOMPRESS                  = 0x4010744d
	PPPIOCSDEBUG                     = 0x40047440
	PPPIOCSFLAGS                     = 0x40047459
	PPPIOCSMAXCID                    = 0x40047451
	PPPIOCSMRRU                      = 0x4004743b
	PPPIOCSMRU                       = 0x40047452
	PPPIOCSNPMODE                    = 0x4008744b
	PPPIOCSPASS                      = 0x40107447
	PPPIOCSRASYNCMAP                 = 0x40047454
	PPPIOCSXASYNCMAP                 = 0x4020744f
	PPPIOCUNBRIDGECHAN               = 0x7434
	PPPIOCXFERUNIT                   = 0x744e
	PR_SET_PTRACER_ANY               = 0xffffffffffffffff
	PTRACE_ARCH_PRCTL                = 0x1e
	PTRACE_GETFPREGS                 = 0xe
	PTRACE_GETFPXREGS                = 0x12
	PTRACE_GET_THREAD_AREA           = 0x19
	PTRACE_OLDSETOPTIONS             = 0x15
	PTRACE_SETFPREGS                 = 0xf
	PTRACE_SETFPXREGS                = 0x13
	PTRACE_SET_THREAD_AREA           = 0x1a
	PTRACE_SINGLEBLOCK               = 0x21
	PTRACE_SYSEMU                    = 0x1f
	PTRACE_SYSEMU_SINGLESTEP         = 0x20
	RLIMIT_AS                        = 0x9
	RLIMIT_MEMLOCK                   = 0x8
	RLIMIT_NOFILE                    = 0x7
	RLIMIT_NPROC                     = 0x6
	RLIMIT_RSS                       = 0x5
	RNDADDENTROPY                    = 0x40085203
	RNDADDTOENTCNT                   = 0x40045201
	RNDCLEARPOOL                     = 0x5206
	RNDGETENTCNT                     = 0x80045200
	RNDGETPOOL                       = 0x80085202
	RNDRESEEDCRNG                    = 0x5207
	RNDZAPENTCNT                     = 0x5204
	RTC_AIE_OFF                      = 0x7002
	RTC_AIE_ON                       = 0x7001
	RTC_ALM_READ                     = 0x80247008
	RTC_ALM_SET                      = 0x40247007
	RTC_EPOCH_READ                   = 0x8008700d
	RTC_EPOCH_SET                    = 0x4008700e
	RTC_IRQP_READ                    = 0x8008700b
	RTC_IRQP_SET                     = 0x4008700c
	RTC_PARAM_GET                    = 0x40187013
	RTC_PARAM_SET                    = 0x40187014
	RTC_PIE_OFF                      = 0x7006
	RTC_PIE_ON                       = 0x7005
	RTC_PLL_GET                      = 0x80207011
	RTC_PLL_SET                      = 0x40207012
	RTC_RD_TIME                      = 0x80247009
	RTC_SET_TIME                     = 0x4024700a
	RTC_UIE_OFF                      = 0x7004
	RTC_UIE_ON                       = 0x7003
	RTC_VL_CLR                       = 0x7014
	RTC_VL_READ                      = 0x80047013
	RTC_WIE_OFF                      = 0x7010
	RTC_WIE_ON                       = 0x700f
	RTC_WKALM_RD                     = 0x80287010
	RTC_WKALM_SET                    = 0x4028700f
	SCM_TIMESTAMPING                 = 0x25
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
	SCM_TIMESTAMPNS                  = 0x23
	SCM_TXTIME                       = 0x3d
	SCM_WIFI_STATUS                  = 0x29
	SFD_CLOEXEC                      = 0x80000
	SFD_NONBLOCK                     = 0x800
	SIOCATMARK                       = 0x8905
	SIOCGPGRP                        = 0x8904
	SIOCGSTAMPNS_NEW                 = 0x80108907
	SIOCGSTAMP_NEW                   = 0x80108906
	SIOCINQ                          = 0x541b
	SIOCOUTQ                         = 0x5411
	SIOCSPGRP                        = 0x8902
	SOCK_CLOEXEC                     = 0x80000
	SOCK_DGRAM                       = 0x2
	SOCK_NONBLOCK                    = 0x800
	SOCK_STREAM                      = 0x1
	SOL_SOCKET                       = 0x1
	SO_ACCEPTCONN                    = 0x1e
	SO_ATTACH_BPF                    = 0x32
	SO_ATTACH_REUSEPORT_CBPF         = 0x33
	SO_ATTACH_REUSEPORT_EBPF         = 0x34
	SO_BINDTODEVICE                  = 0x19
	SO_BINDTOIFINDEX                 = 0x3e
	SO_BPF_EXTENSIONS                = 0x30
	SO_BROADCAST                     = 0x6
	SO_BSDCOMPAT                     = 0xe
	SO_BUF_LOCK                      = 0x48
	SO_BUSY_POLL                     = 0x2e
	SO_BUSY_POLL_BUDGET              = 0x46
	SO_CNX_ADVICE                    = 0x35
	SO_COOKIE                        = 0x39
	SO_DETACH_REUSEPORT_BPF          = 0x44
	SO_DOMAIN                        = 0x27
	SO_DONTROUTE                     = 0x5
	SO_ERROR                         = 0x4
	SO_INCOMING_CPU                  = 0x31
	SO_INCOMING_NAPI_ID              = 0x38
	SO_KEEPALIVE                     = 0x9
	SO_LINGER                        = 0xd
	SO_LOCK_FILTER                   = 0x2c
	SO_MARK                          = 0x24
	SO_MAX_PACING_RATE               = 0x2f
	SO_MEMINFO                       = 0x37
	SO_NETNS_COOKIE                  = 0x47
	SO_NOFCS                         = 0x2b
	SO_OOBINLINE                     = 0xa
	SO_PASSCRED                      = 0x10
	SO_PASSSEC                       = 0x22
	SO_PEEK_OFF                      = 0x2a
	SO_PEERCRED                      = 0x11
	SO_PEERGROUPS                    = 0x3b
	SO_PEERSEC                       = 0x1f
	SO_PREFER_BUSY_POLL              = 0x45
	SO_PROTOCOL                      = 0x26
	SO_RCVBUF                        = 0x8
	SO_RCVBUFFORCE                   = 0x21
	SO_RCVLOWAT                      = 0x12
	SO_RCVMARK                       = 0x4b
	SO_RCVTIMEO                      = 0x14
	SO_RCVTIMEO_NEW                  = 0x42
	SO_RCVTIMEO_OLD                  = 0x14
	SO_RESERVE_MEM                   = 0x49
	SO_REUSEADDR                     = 0x2
	SO_REUSEPORT                     = 0xf
	SO_RXQ_OVFL                      = 0x28
	SO_SECURITY_AUTHENTICATION       = 0x16
	SO_SECURITY_ENCRYPTION_NETWORK   = 0x18
	SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
	SO_SELECT_ERR_QUEUE              = 0x2d
	SO_SNDBUF                        = 0x7
	SO_SNDBUFFORCE                   = 0x20
	SO_SNDLOWAT                      = 0x13
	SO_SNDTIMEO                      = 0x15
	SO_SNDTIMEO_NEW                  = 0x43
	SO_SNDTIMEO_OLD                  = 0x15
	SO_TIMESTAMPING                  = 0x25
	SO_TIMESTAMPING_NEW              = 0x41
	SO_TIMESTAMPING_OLD              = 0x25
	SO_TIMESTAMPNS                   = 0x23
	SO_TIMESTAMPNS_NEW               = 0x40
	SO_TIMESTAMPNS_OLD               = 0x23
	SO_TIMESTAMP_NEW                 = 0x3f
	SO_TXREHASH                      = 0x4a
	SO_TXTIME                        = 0x3d
	SO_TYPE                          = 0x3
	SO_WIFI_STATUS                   = 0x29
	SO_ZEROCOPY                      = 0x3c
	TAB1                             = 0x800
	TAB2                             = 0x1000
	TAB3                             = 0x1800
	TABDLY                           = 0x1800
	TCFLSH                           = 0x540b
	TCGETA                           = 0x5405
	TCGETS                           = 0x5401
	TCGETS2                          = 0x802c542a
	TCGETX                           = 0x5432
	TCSAFLUSH                        = 0x2
	TCSBRK                           = 0x5409
	TCSBRKP                          = 0x5425
	TCSETA                           = 0x5406
	TCSETAF                          = 0x5408
	TCSETAW                          = 0x5407
	TCSETS                           = 0x5402
	TCSETS2                          = 0x402c542b
	TCSETSF                          = 0x5404
	TCSETSF2                         = 0x402c542d
	TCSETSW                          = 0x5403
	TCSETSW2                         = 0x402c542c
	TCSETX                           = 0x5433
	TCSETXF                          = 0x5434
	TCSETXW                          = 0x5435
	TCXONC                           = 0x540a
	TFD_CLOEXEC                      = 0x80000
	TFD_NONBLOCK                     = 0x800
	TIOCCBRK                         = 0x5428
	TIOCCONS                         = 0x541d
	TIOCEXCL                         = 0x540c
	TIOCGDEV                         = 0x80045432
	TIOCGETD                         = 0x5424
	TIOCGEXCL                        = 0x80045440
	TIOCGICOUNT                      = 0x545d
	TIOCGISO7816                     = 0x80285442
	TIOCGLCKTRMIOS                   = 0x5456
	TIOCGPGRP                        = 0x540f
	TIOCGPKT                         = 0x80045438
	TIOCGPTLCK                       = 0x80045439
	TIOCGPTN                         = 0x80045430
	TIOCGPTPEER                      = 0x5441
	TIOCGRS485                       = 0x542e
	TIOCGSERIAL                      = 0x541e
	TIOCGSID                         = 0x5429
	TIOCGSOFTCAR                     = 0x5419
	TIOCGWINSZ                       = 0x5413
	TIOCINQ                          = 0x541b
	TIOCLINUX                        = 0x541c
	TIOCMBIC                         = 0x5417
	TIOCMBIS                         = 0x5416
	TIOCMGET                         = 0x5415
	TIOCMIWAIT                       = 0x545c
	TIOCMSET                         = 0x5418
	TIOCM_CAR                        = 0x40
	TIOCM_CD                         = 0x40
	TIOCM_CTS                        = 0x20
	TIOCM_DSR                        = 0x100
	TIOCM_RI                         = 0x80
	TIOCM_RNG                        = 0x80
	TIOCM_SR                         = 0x10
	TIOCM_ST                         = 0x8
	TIOCNOTTY                        = 0x5422
	TIOCNXCL                         = 0x540d
	TIOCOUTQ                         = 0x5411
	TIOCPKT                          = 0x5420
	TIOCSBRK                         = 0x5427
	TIOCSCTTY                        = 0x540e
	TIOCSERCONFIG                    = 0x5453
	TIOCSERGETLSR                    = 0x5459
	TIOCSERGETMULTI                  = 0x545a
	TIOCSERGSTRUCT                   = 0x5458
	TIOCSERGWILD                     = 0x5454
	TIOCSERSETMULTI                  = 0x545b
	TIOCSERSWILD                     = 0x5455
	TIOCSER_TEMT                     = 0x1
	TIOCSETD                         = 0x5423
	TIOCSIG                          = 0x40045436
	TIOCSISO7816                     = 0xc0285443
	TIOCSLCKTRMIOS                   = 0x5457
	TIOCSPGRP                        = 0x5410
	TIOCSPTLCK                       = 0x40045431
	TIOCSRS485                       = 0x542f
	TIOCSSERIAL                      = 0x541f
	TIOCSSOFTCAR                     = 0x541a
	TIOCSTI                          = 0x5412
	TIOCSWINSZ                       = 0x5414
	TIOCVHANGUP                      = 0x5437
	TOSTOP                           = 0x100
	TUNATTACHFILTER                  = 0x401054d5
	TUNDETACHFILTER                  = 0x401054d6
	TUNGETDEVNETNS                   = 0x54e3
	TUNGETFEATURES                   = 0x800454cf
	TUNGETFILTER                     = 0x801054db
	TUNGETIFF                        = 0x800454d2
	TUNGETSNDBUF                     = 0x800454d3
	TUNGETVNETBE                     = 0x800454df
	TUNGETVNETHDRSZ                  = 0x800454d7
	TUNGETVNETLE                     = 0x800454dd
	TUNSETCARRIER                    = 0x400454e2
	TUNSETDEBUG                      = 0x400454c9
	TUNSETFILTEREBPF                 = 0x800454e1
	TUNSETGROUP                      = 0x400454ce
	TUNSETIFF                        = 0x400454ca
	TUNSETIFINDEX                    = 0x400454da
	TUNSETLINK                       = 0x400454cd
	TUNSETNOCSUM                     = 0x400454c8
	TUNSETOFFLOAD                    = 0x400454d0
	TUNSETOWNER                      = 0x400454cc
	TUNSETPERSIST                    = 0x400454cb
	TUNSETQUEUE                      = 0x400454d9
	TUNSETSNDBUF                     = 0x400454d4
	TUNSETSTEERINGEBPF               = 0x800454e0
	TUNSETTXFILTER                   = 0x400454d1
	TUNSETVNETBE                     = 0x400454de
	TUNSETVNETHDRSZ                  = 0x400454d8
	TUNSETVNETLE                     = 0x400454dc
	UBI_IOCATT                       = 0x40186f40
	UBI_IOCDET                       = 0x40046f41
	UBI_IOCEBCH                      = 0x40044f02
	UBI_IOCEBER                      = 0x40044f01
	UBI_IOCEBISMAP                   = 0x80044f05
	UBI_IOCEBMAP                     = 0x40084f03
	UBI_IOCEBUNMAP                   = 0x40044f04
	UBI_IOCMKVOL                     = 0x40986f00
	UBI_IOCRMVOL                     = 0x40046f01
	UBI_IOCRNVOL                     = 0x51106f03
	UBI_IOCRPEB                      = 0x40046f04
	UBI_IOCRSVOL                     = 0x400c6f02
	UBI_IOCSETVOLPROP                = 0x40104f06
	UBI_IOCSPEB                      = 0x40046f05
	UBI_IOCVOLCRBLK                  = 0x40804f07
	UBI_IOCVOLRMBLK                  = 0x4f08
	UBI_IOCVOLUP                     = 0x40084f00
	VDISCARD                         = 0xd
	VEOF                             = 0x4
	VEOL                             = 0xb
	VEOL2                            = 0x10
	VMIN                             = 0x6
	VREPRINT                         = 0xc
	VSTART                           = 0x8
	VSTOP                            = 0x9
	VSUSP                            = 0xa
	VSWTC                            = 0x7
	VT1                              = 0x4000
	VTDLY                            = 0x4000
	VTIME                            = 0x5
	VWERASE                          = 0xe
	WDIOC_GETBOOTSTATUS              = 0x80045702
	WDIOC_GETPRETIMEOUT              = 0x80045709
	WDIOC_GETSTATUS                  = 0x80045701
	WDIOC_GETSUPPORT                 = 0x80285700
	WDIOC_GETTEMP                    = 0x80045703
	WDIOC_GETTIMELEFT                = 0x8004570a
	WDIOC_GETTIMEOUT                 = 0x80045707
	WDIOC_KEEPALIVE                  = 0x80045705
	WDIOC_SETOPTIONS                 = 0x80045704
	WORDSIZE                         = 0x40
	XCASE                            = 0x4
	XTABS                            = 0x1800
	_HIDIOCGRAWNAME                  = 0x80804804
	_HIDIOCGRAWPHYS                  = 0x80404805
	_HIDIOCGRAWUNIQ                  = 0x80404808
)

// Errors
const (
	EADDRINUSE      = syscall.Errno(0x62)
	EADDRNOTAVAIL   = syscall.Errno(0x63)
	EADV            = syscall.Errno(0x44)
	EAFNOSUPPORT    = syscall.Errno(0x61)
	EALREADY        = syscall.Errno(0x72)
	EBADE           = syscall.Errno(0x34)
	EBADFD          = syscall.Errno(0x4d)
	EBADMSG         = syscall.Errno(0x4a)
	EBADR           = syscall.Errno(0x35)
	EBADRQC         = syscall.Errno(0x38)
	EBADSLT         = syscall.Errno(0x39)
	EBFONT          = syscall.Errno(0x3b)
	ECANCELED       = syscall.Errno(0x7d)
	ECHRNG          = syscall.Errno(0x2c)
	ECOMM           = syscall.Errno(0x46)
	ECONNABORTED    = syscall.Errno(0x67)
	ECONNREFUSED    = syscall.Errno(0x6f)
	ECONNRESET      = syscall.Errno(0x68)
	EDEADLK         = syscall.Errno(0x23)
	EDEADLOCK       = syscall.Errno(0x23)
	EDESTADDRREQ    = syscall.Errno(0x59)
	EDOTDOT         = syscall.Errno(0x49)
	EDQUOT          = syscall.Errno(0x7a)
	EHOSTDOWN       = syscall.Errno(0x70)
	EHOSTUNREACH    = syscall.Errno(0x71)
	EHWPOISON       = syscall.Errno(0x85)
	EIDRM           = syscall.Errno(0x2b)
	EILSEQ          = syscall.Errno(0x54)
	EINPROGRESS     = syscall.Errno(0x73)
	EISCONN         = syscall.Errno(0x6a)
	EISNAM          = syscall.Errno(0x78)
	EKEYEXPIRED     = syscall.Errno(0x7f)
	EKEYREJECTED    = syscall.Errno(0x81)
	EKEYREVOKED     = syscall.Errno(0x80)
	EL2HLT          = syscall.Errno(0x33)
	EL2NSYNC        = syscall.Errno(0x2d)
	EL3HLT          = syscall.Errno(0x2e)
	EL3RST          = syscall.Errno(0x2f)
	ELIBACC         = syscall.Errno(0x4f)
	ELIBBAD         = syscall.Errno(0x50)
	ELIBEXEC        = syscall.Errno(0x53)
	ELIBMAX         = syscall.Errno(0x52)
	ELIBSCN         = syscall.Errno(0x51)
	ELNRNG          = syscall.Errno(0x30)
	ELOOP           = syscall.Errno(0x28)
	EMEDIUMTYPE     = syscall.Errno(0x7c)
	EMSGSIZE        = syscall.Errno(0x5a)
	EMULTIHOP       = syscall.Errno(0x48)
	ENAMETOOLONG    = syscall.Errno(0x24)
	ENAVAIL         = syscall.Errno(0x77)
	ENETDOWN        = syscall.Errno(0x64)
	ENETRESET       = syscall.Errno(0x66)
	ENETUNREACH     = syscall.Errno(0x65)
	ENOANO          = syscall.Errno(0x37)
	ENOBUFS         = syscall.Errno(0x69)
	ENOCSI          = syscall.Errno(0x32)
	ENODATA         = syscall.Errno(0x3d)
	ENOKEY          = syscall.Errno(0x7e)
	ENOLCK          = syscall.Errno(0x25)
	ENOLINK         = syscall.Errno(0x43)
	ENOMEDIUM       = syscall.Errno(0x7b)
	ENOMSG          = syscall.Errno(0x2a)
	ENONET          = syscall.Errno(0x40)
	ENOPKG          = syscall.Errno(0x41)
	ENOPROTOOPT     = syscall.Errno(0x5c)
	ENOSR           = syscall.Errno(0x3f)
	ENOSTR          = syscall.Errno(0x3c)
	ENOSYS          = syscall.Errno(0x26)
	ENOTCONN        = syscall.Errno(0x6b)
	ENOTEMPTY       = syscall.Errno(0x27)
	ENOTNAM         = syscall.Errno(0x76)
	ENOTRECOVERABLE = syscall.Errno(0x83)
	ENOTSOCK        = syscall.Errno(0x58)
	ENOTSUP         = syscall.Errno(0x5f)
	ENOTUNIQ        = syscall.Errno(0x4c)
	EOPNOTSUPP      = syscall.Errno(0x5f)
	EOVERFLOW       = syscall.Errno(0x4b)
	EOWNERDEAD      = syscall.Errno(0x82)
	EPFNOSUPPORT    = syscall.Errno(0x60)
	EPROTO          = syscall.Errno(0x47)
	EPROTONOSUPPORT = syscall.Errno(0x5d)
	EPROTOTYPE      = syscall.Errno(0x5b)
	EREMCHG         = syscall.Errno(0x4e)
	EREMOTE         = syscall.Errno(0x42)
	EREMOTEIO       = syscall.Errno(0x79)
	ERESTART        = syscall.Errno(0x55)
	ERFKILL         = syscall.Errno(0x84)
	ESHUTDOWN       = syscall.Errno(0x6c)
	ESOCKTNOSUPPORT = syscall.Errno(0x5e)
	ESRMNT          = syscall.Errno(0x45)
	ESTALE          = syscall.Errno(0x74)
	ESTRPIPE        = syscall.Errno(0x56)
	ETIME           = syscall.Errno(0x3e)
	ETIMEDOUT       = syscall.Errno(0x6e)
	ETOOMANYREFS    = syscall.Errno(0x6d)
	EUCLEAN         = syscall.Errno(0x75)
	EUNATCH         = syscall.Errno(0x31)
	EUSERS          = syscall.Errno(0x57)
	EXFULL          = syscall.Errno(0x36)
)

// Signals
const (
	SIGBUS    = syscall.Signal(0x7)
	SIGCHLD   = syscall.Signal(0x11)
	SIGCLD    = syscall.Signal(0x11)
	SIGCONT   = syscall.Signal(0x12)
	SIGIO     = syscall.Signal(0x1d)
	SIGPOLL   = syscall.Signal(0x1d)
	SIGPROF   = syscall.Signal(0x1b)
	SIGPWR    = syscall.Signal(0x1e)
	SIGSTKFLT = syscall.Signal(0x10)
	SIGSTOP   = syscall.Signal(0x13)
	SIGSYS    = syscall.Signal(0x1f)
	SIGTSTP   = syscall.Signal(0x14)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x17)
	SIGUSR1   = syscall.Signal(0xa)
	SIGUSR2   = syscall.Signal(0xc)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "no such device or address"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EAGAIN", "resource temporarily unavailable"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device or resource busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "invalid cross-device link"},
	{19, "ENODEV", "no such device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "numerical result out of range"},
	{35, "EDEADLK", "resource deadlock avoided"},
	{36, "ENAMETOOLONG", "file name too long"},
	{37, "ENOLCK", "no locks available"},
	{38, "ENOSYS", "function not implemented"},
	{39, "ENOTEMPTY", "directory not empty"},
	{40, "ELOOP", "too many levels of symbolic links"},
	{42, "ENOMSG", "no message of desired type"},
	{43, "EIDRM", "identifier removed"},
	{44, "ECHRNG", "channel number out of range"},
	{45, "EL2NSYNC", "level 2 not synchronized"},
	{46, "EL3HLT", "level 3 halted"},
	{47, "EL3RST", "level 3 reset"},
	{48, "ELNRNG", "link number out of range"},
	{49, "EUNATCH", "protocol driver not attached"},
	{50, "ENOCSI", "no CSI structure available"},
	{51, "EL2HLT", "level 2 halted"},
	{52, "EBADE", "invalid exchange"},
	{53, "EBADR", "invalid request descriptor"},
	{54, "EXFULL", "exchange full"},
	{55, "ENOANO", "no anode"},
	{56, "EBADRQC", "invalid request code"},
	{57, "EBADSLT", "invalid slot"},
	{59, "EBFONT", "bad font file format"},
	{60, "ENOSTR", "device not a stream"},
	{61, "ENODATA", "no data available"},
	{62, "ETIME", "timer expired"},
	{63, "ENOSR", "out of streams resources"},
	{64, "ENONET", "machine is not on the network"},
	{65, "ENOPKG", "package not installed"},
	{66, "EREMOTE", "object is remote"},
	{67, "ENOLINK", "link has been severed"},
	{68, "EADV", "advertise error"},
	{69, "ESRMNT", "srmount error"},
	{70, "ECOMM", "communication error on send"},
	{71, "EPROTO", "protocol error"},
	{72, "EMULTIHOP", "multihop attempted"},
	{73, "EDOTDOT", "RFS specific error"},
	{74, "EBADMSG", "bad message"},
	{75, "EOVERFLOW", "value too large for defined data type"},
	{76, "ENOTUNIQ", "name not unique on network"},
	{77, "EBADFD", "file descriptor in bad state"},
	{78, "EREMCHG", "remote address changed"},
	{79, "ELIBACC", "can not access a needed shared library"},
	{80, "ELIBBAD", "accessing a corrupted shared library"},
	{81, "ELIBSCN", ".lib section in a.out corrupted"},
	{82, "ELIBMAX", "attempting to link in too many shared libraries"},
	{83, "ELIBEXEC", "cannot exec a shared library directly"},
	{84, "EILSEQ", "invalid or incomplete multibyte or wide character"},
	{85, "ERESTART", "interrupted system call should be restarted"},
	{86, "ESTRPIPE", "streams pipe error"},
	{87, "EUSERS", "too many users"},
	{88, "ENOTSOCK", "socket operation on non-socket"},
	{89, "EDESTADDRREQ", "destination address required"},
	{90, "EMSGSIZE", "message too long"},
	{91, "EPROTOTYPE", "protocol wrong type for socket"},
	{92, "ENOPROTOOPT", "protocol not available"},
	{93, "EPROTONOSUPPORT", "protocol not supported"},
	{94, "ESOCKTNOSUPPORT", "socket type not supported"},
	{95, "ENOTSUP", "operation not supported"},
	{96, "EPFNOSUPPORT", "protocol family not supported"},
	{97, "EAFNOSUPPORT", "address family not supported by protocol"},
	{98, "EADDRINUSE", "address already in use"},
	{99, "EADDRNOTAVAIL", "cannot assign requested address"},
	{100, "ENETDOWN", "network is down"},
	{101, "ENETUNREACH", "network is unreachable"},
	{102, "ENETRESET", "network dropped connection on reset"},
	{103, "ECONNABORTED", "software caused connection abort"},
	{104, "ECONNRESET", "connection reset by peer"},
	{105, "ENOBUFS", "no buffer space available"},
	{106, "EISCONN", "transport endpoint is already connected"},
	{107, "ENOTCONN", "transport endpoint is not connected"},
	{108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
	{109, "ETOOMANYREFS", "too many references: cannot splice"},
	{110, "ETIMEDOUT", "connection timed out"},
	{111, "ECONNREFUSED", "connection refused"},
	{112, "EHOSTDOWN", "host is down"},
	{113, "EHOSTUNREACH", "no route to host"},
	{114, "EALREADY", "operation already in progress"},
	{115, "EINPROGRESS", "operation now in progress"},
	{116, "ESTALE", "stale file handle"},
	{117, "EUCLEAN", "structure needs cleaning"},
	{118, "ENOTNAM", "not a XENIX named type file"},
	{119, "ENAVAIL", "no XENIX semaphores available"},
	{120, "EISNAM", "is a named type file"},
	{121, "EREMOTEIO", "remote I/O error"},
	{122, "EDQUOT", "disk quota exceeded"},
	{123, "ENOMEDIUM", "no medium found"},
	{124, "EMEDIUMTYPE", "wrong medium type"},
	{125, "ECANCELED", "operation canceled"},
	{126, "ENOKEY", "required key not available"},
	{127, "EKEYEXPIRED", "key has expired"},
	{128, "EKEYREVOKED", "key has been revoked"},
	{129, "EKEYREJECTED", "key was rejected by service"},
	{130, "EOWNERDEAD", "owner died"},
	{131, "ENOTRECOVERABLE", "state not recoverable"},
	{132, "ERFKILL", "operation not possible due to RF-kill"},
	{133, "EHWPOISON", "memory page has hardware error"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/breakpoint trap"},
	{6, "SIGABRT", "aborted"},
	{7, "SIGBUS", "bus error"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGUSR1", "user defined signal 1"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGUSR2", "user defined signal 2"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGSTKFLT", "stack fault"},
	{17, "SIGCHLD", "child exited"},
	{18, "SIGCONT", "continued"},
	{19, "SIGSTOP", "stopped (signal)"},
	{20, "SIGTSTP", "stopped"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGURG", "urgent I/O condition"},
	{24, "SIGXCPU", "CPU time limit exceeded"},
	{25, "SIGXFSZ", "file size limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window changed"},
	{29, "SIGIO", "I/O possible"},
	{30, "SIGPWR", "power failure"},
	{31, "SIGSYS", "bad system call"},
}
   07070100000E2D000081A4000000000000000000000001645E367C00008719000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go // mkerrors.sh -Wall -Werror -static -I/tmp/arm/include
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build arm && linux
// +build arm,linux

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -Wall -Werror -static -I/tmp/arm/include _const.go

package unix

import "syscall"

const (
	B1000000                         = 0x1008
	B115200                          = 0x1002
	B1152000                         = 0x1009
	B1500000                         = 0x100a
	B2000000                         = 0x100b
	B230400                          = 0x1003
	B2500000                         = 0x100c
	B3000000                         = 0x100d
	B3500000                         = 0x100e
	B4000000                         = 0x100f
	B460800                          = 0x1004
	B500000                          = 0x1005
	B57600                           = 0x1001
	B576000                          = 0x1006
	B921600                          = 0x1007
	BLKBSZGET                        = 0x80041270
	BLKBSZSET                        = 0x40041271
	BLKFLSBUF                        = 0x1261
	BLKFRAGET                        = 0x1265
	BLKFRASET                        = 0x1264
	BLKGETSIZE                       = 0x1260
	BLKGETSIZE64                     = 0x80041272
	BLKPBSZGET                       = 0x127b
	BLKRAGET                         = 0x1263
	BLKRASET                         = 0x1262
	BLKROGET                         = 0x125e
	BLKROSET                         = 0x125d
	BLKRRPART                        = 0x125f
	BLKSECTGET                       = 0x1267
	BLKSECTSET                       = 0x1266
	BLKSSZGET                        = 0x1268
	BOTHER                           = 0x1000
	BS1                              = 0x2000
	BSDLY                            = 0x2000
	CBAUD                            = 0x100f
	CBAUDEX                          = 0x1000
	CIBAUD                           = 0x100f0000
	CLOCAL                           = 0x800
	CR1                              = 0x200
	CR2                              = 0x400
	CR3                              = 0x600
	CRDLY                            = 0x600
	CREAD                            = 0x80
	CS6                              = 0x10
	CS7                              = 0x20
	CS8                              = 0x30
	CSIZE                            = 0x30
	CSTOPB                           = 0x40
	ECCGETLAYOUT                     = 0x81484d11
	ECCGETSTATS                      = 0x80104d12
	ECHOCTL                          = 0x200
	ECHOE                            = 0x10
	ECHOK                            = 0x20
	ECHOKE                           = 0x800
	ECHONL                           = 0x40
	ECHOPRT                          = 0x400
	EFD_CLOEXEC                      = 0x80000
	EFD_NONBLOCK                     = 0x800
	EPOLL_CLOEXEC                    = 0x80000
	EXTPROC                          = 0x10000
	FF1                              = 0x8000
	FFDLY                            = 0x8000
	FICLONE                          = 0x40049409
	FICLONERANGE                     = 0x4020940d
	FLUSHO                           = 0x1000
	FS_IOC_ENABLE_VERITY             = 0x40806685
	FS_IOC_GETFLAGS                  = 0x80046601
	FS_IOC_GET_ENCRYPTION_NONCE      = 0x8010661b
	FS_IOC_GET_ENCRYPTION_POLICY     = 0x400c6615
	FS_IOC_GET_ENCRYPTION_PWSALT     = 0x40106614
	FS_IOC_SETFLAGS                  = 0x40046602
	FS_IOC_SET_ENCRYPTION_POLICY     = 0x800c6613
	F_GETLK                          = 0xc
	F_GETLK64                        = 0xc
	F_GETOWN                         = 0x9
	F_RDLCK                          = 0x0
	F_SETLK                          = 0xd
	F_SETLK64                        = 0xd
	F_SETLKW                         = 0xe
	F_SETLKW64                       = 0xe
	F_SETOWN                         = 0x8
	F_UNLCK                          = 0x2
	F_WRLCK                          = 0x1
	HIDIOCGRAWINFO                   = 0x80084803
	HIDIOCGRDESC                     = 0x90044802
	HIDIOCGRDESCSIZE                 = 0x80044801
	HUPCL                            = 0x400
	ICANON                           = 0x2
	IEXTEN                           = 0x8000
	IN_CLOEXEC                       = 0x80000
	IN_NONBLOCK                      = 0x800
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9
	ISIG                             = 0x1
	IUCLC                            = 0x200
	IXOFF                            = 0x1000
	IXON                             = 0x400
	MAP_ANON                         = 0x20
	MAP_ANONYMOUS                    = 0x20
	MAP_DENYWRITE                    = 0x800
	MAP_EXECUTABLE                   = 0x1000
	MAP_GROWSDOWN                    = 0x100
	MAP_HUGETLB                      = 0x40000
	MAP_LOCKED                       = 0x2000
	MAP_NONBLOCK                     = 0x10000
	MAP_NORESERVE                    = 0x4000
	MAP_POPULATE                     = 0x8000
	MAP_STACK                        = 0x20000
	MAP_SYNC                         = 0x80000
	MCL_CURRENT                      = 0x1
	MCL_FUTURE                       = 0x2
	MCL_ONFAULT                      = 0x4
	MEMERASE                         = 0x40084d02
	MEMERASE64                       = 0x40104d14
	MEMGETBADBLOCK                   = 0x40084d0b
	MEMGETINFO                       = 0x80204d01
	MEMGETOOBSEL                     = 0x80c84d0a
	MEMGETREGIONCOUNT                = 0x80044d07
	MEMISLOCKED                      = 0x80084d17
	MEMLOCK                          = 0x40084d05
	MEMREAD                          = 0xc0404d1a
	MEMREADOOB                       = 0xc00c4d04
	MEMSETBADBLOCK                   = 0x40084d0c
	MEMUNLOCK                        = 0x40084d06
	MEMWRITEOOB                      = 0xc00c4d03
	MTDFILEMODE                      = 0x4d13
	NFDBITS                          = 0x20
	NLDLY                            = 0x100
	NOFLSH                           = 0x80
	NS_GET_NSTYPE                    = 0xb703
	NS_GET_OWNER_UID                 = 0xb704
	NS_GET_PARENT                    = 0xb702
	NS_GET_USERNS                    = 0xb701
	OLCUC                            = 0x2
	ONLCR                            = 0x4
	OTPERASE                         = 0x400c4d19
	OTPGETREGIONCOUNT                = 0x40044d0e
	OTPGETREGIONINFO                 = 0x400c4d0f
	OTPLOCK                          = 0x800c4d10
	OTPSELECT                        = 0x80044d0d
	O_APPEND                         = 0x400
	O_ASYNC                          = 0x2000
	O_CLOEXEC                        = 0x80000
	O_CREAT                          = 0x40
	O_DIRECT                         = 0x10000
	O_DIRECTORY                      = 0x4000
	O_DSYNC                          = 0x1000
	O_EXCL                           = 0x80
	O_FSYNC                          = 0x101000
	O_LARGEFILE                      = 0x20000
	O_NDELAY                         = 0x800
	O_NOATIME                        = 0x40000
	O_NOCTTY                         = 0x100
	O_NOFOLLOW                       = 0x8000
	O_NONBLOCK                       = 0x800
	O_PATH                           = 0x200000
	O_RSYNC                          = 0x101000
	O_SYNC                           = 0x101000
	O_TMPFILE                        = 0x404000
	O_TRUNC                          = 0x200
	PARENB                           = 0x100
	PARODD                           = 0x200
	PENDIN                           = 0x4000
	PERF_EVENT_IOC_DISABLE           = 0x2401
	PERF_EVENT_IOC_ENABLE            = 0x2400
	PERF_EVENT_IOC_ID                = 0x80042407
	PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4004240b
	PERF_EVENT_IOC_PAUSE_OUTPUT      = 0x40042409
	PERF_EVENT_IOC_PERIOD            = 0x40082404
	PERF_EVENT_IOC_QUERY_BPF         = 0xc004240a
	PERF_EVENT_IOC_REFRESH           = 0x2402
	PERF_EVENT_IOC_RESET             = 0x2403
	PERF_EVENT_IOC_SET_BPF           = 0x40042408
	PERF_EVENT_IOC_SET_FILTER        = 0x40042406
	PERF_EVENT_IOC_SET_OUTPUT        = 0x2405
	PPPIOCATTACH                     = 0x4004743d
	PPPIOCATTCHAN                    = 0x40047438
	PPPIOCBRIDGECHAN                 = 0x40047435
	PPPIOCCONNECT                    = 0x4004743a
	PPPIOCDETACH                     = 0x4004743c
	PPPIOCDISCONN                    = 0x7439
	PPPIOCGASYNCMAP                  = 0x80047458
	PPPIOCGCHAN                      = 0x80047437
	PPPIOCGDEBUG                     = 0x80047441
	PPPIOCGFLAGS                     = 0x8004745a
	PPPIOCGIDLE                      = 0x8008743f
	PPPIOCGIDLE32                    = 0x8008743f
	PPPIOCGIDLE64                    = 0x8010743f
	PPPIOCGL2TPSTATS                 = 0x80487436
	PPPIOCGMRU                       = 0x80047453
	PPPIOCGRASYNCMAP                 = 0x80047455
	PPPIOCGUNIT                      = 0x80047456
	PPPIOCGXASYNCMAP                 = 0x80207450
	PPPIOCSACTIVE                    = 0x40087446
	PPPIOCSASYNCMAP                  = 0x40047457
	PPPIOCSCOMPRESS                  = 0x400c744d
	PPPIOCSDEBUG                     = 0x40047440
	PPPIOCSFLAGS                     = 0x40047459
	PPPIOCSMAXCID                    = 0x40047451
	PPPIOCSMRRU                      = 0x4004743b
	PPPIOCSMRU                       = 0x40047452
	PPPIOCSNPMODE                    = 0x4008744b
	PPPIOCSPASS                      = 0x40087447
	PPPIOCSRASYNCMAP                 = 0x40047454
	PPPIOCSXASYNCMAP                 = 0x4020744f
	PPPIOCUNBRIDGECHAN               = 0x7434
	PPPIOCXFERUNIT                   = 0x744e
	PR_SET_PTRACER_ANY               = 0xffffffff
	PTRACE_GETCRUNCHREGS             = 0x19
	PTRACE_GETFDPIC                  = 0x1f
	PTRACE_GETFDPIC_EXEC             = 0x0
	PTRACE_GETFDPIC_INTERP           = 0x1
	PTRACE_GETFPREGS                 = 0xe
	PTRACE_GETHBPREGS                = 0x1d
	PTRACE_GETVFPREGS                = 0x1b
	PTRACE_GETWMMXREGS               = 0x12
	PTRACE_GET_THREAD_AREA           = 0x16
	PTRACE_OLDSETOPTIONS             = 0x15
	PTRACE_SETCRUNCHREGS             = 0x1a
	PTRACE_SETFPREGS                 = 0xf
	PTRACE_SETHBPREGS                = 0x1e
	PTRACE_SETVFPREGS                = 0x1c
	PTRACE_SETWMMXREGS               = 0x13
	PTRACE_SET_SYSCALL               = 0x17
	PT_DATA_ADDR                     = 0x10004
	PT_TEXT_ADDR                     = 0x10000
	PT_TEXT_END_ADDR                 = 0x10008
	RLIMIT_AS                        = 0x9
	RLIMIT_MEMLOCK                   = 0x8
	RLIMIT_NOFILE                    = 0x7
	RLIMIT_NPROC                     = 0x6
	RLIMIT_RSS                       = 0x5
	RNDADDENTROPY                    = 0x40085203
	RNDADDTOENTCNT                   = 0x40045201
	RNDCLEARPOOL                     = 0x5206
	RNDGETENTCNT                     = 0x80045200
	RNDGETPOOL                       = 0x80085202
	RNDRESEEDCRNG                    = 0x5207
	RNDZAPENTCNT                     = 0x5204
	RTC_AIE_OFF                      = 0x7002
	RTC_AIE_ON                       = 0x7001
	RTC_ALM_READ                     = 0x80247008
	RTC_ALM_SET                      = 0x40247007
	RTC_EPOCH_READ                   = 0x8004700d
	RTC_EPOCH_SET                    = 0x4004700e
	RTC_IRQP_READ                    = 0x8004700b
	RTC_IRQP_SET                     = 0x4004700c
	RTC_PARAM_GET                    = 0x40187013
	RTC_PARAM_SET                    = 0x40187014
	RTC_PIE_OFF                      = 0x7006
	RTC_PIE_ON                       = 0x7005
	RTC_PLL_GET                      = 0x801c7011
	RTC_PLL_SET                      = 0x401c7012
	RTC_RD_TIME                      = 0x80247009
	RTC_SET_TIME                     = 0x4024700a
	RTC_UIE_OFF                      = 0x7004
	RTC_UIE_ON                       = 0x7003
	RTC_VL_CLR                       = 0x7014
	RTC_VL_READ                      = 0x80047013
	RTC_WIE_OFF                      = 0x7010
	RTC_WIE_ON                       = 0x700f
	RTC_WKALM_RD                     = 0x80287010
	RTC_WKALM_SET                    = 0x4028700f
	SCM_TIMESTAMPING                 = 0x25
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
	SCM_TIMESTAMPNS                  = 0x23
	SCM_TXTIME                       = 0x3d
	SCM_WIFI_STATUS                  = 0x29
	SFD_CLOEXEC                      = 0x80000
	SFD_NONBLOCK                     = 0x800
	SIOCATMARK                       = 0x8905
	SIOCGPGRP                        = 0x8904
	SIOCGSTAMPNS_NEW                 = 0x80108907
	SIOCGSTAMP_NEW                   = 0x80108906
	SIOCINQ                          = 0x541b
	SIOCOUTQ                         = 0x5411
	SIOCSPGRP                        = 0x8902
	SOCK_CLOEXEC                     = 0x80000
	SOCK_DGRAM                       = 0x2
	SOCK_NONBLOCK                    = 0x800
	SOCK_STREAM                      = 0x1
	SOL_SOCKET                       = 0x1
	SO_ACCEPTCONN                    = 0x1e
	SO_ATTACH_BPF                    = 0x32
	SO_ATTACH_REUSEPORT_CBPF         = 0x33
	SO_ATTACH_REUSEPORT_EBPF         = 0x34
	SO_BINDTODEVICE                  = 0x19
	SO_BINDTOIFINDEX                 = 0x3e
	SO_BPF_EXTENSIONS                = 0x30
	SO_BROADCAST                     = 0x6
	SO_BSDCOMPAT                     = 0xe
	SO_BUF_LOCK                      = 0x48
	SO_BUSY_POLL                     = 0x2e
	SO_BUSY_POLL_BUDGET              = 0x46
	SO_CNX_ADVICE                    = 0x35
	SO_COOKIE                        = 0x39
	SO_DETACH_REUSEPORT_BPF          = 0x44
	SO_DOMAIN                        = 0x27
	SO_DONTROUTE                     = 0x5
	SO_ERROR                         = 0x4
	SO_INCOMING_CPU                  = 0x31
	SO_INCOMING_NAPI_ID              = 0x38
	SO_KEEPALIVE                     = 0x9
	SO_LINGER                        = 0xd
	SO_LOCK_FILTER                   = 0x2c
	SO_MARK                          = 0x24
	SO_MAX_PACING_RATE               = 0x2f
	SO_MEMINFO                       = 0x37
	SO_NETNS_COOKIE                  = 0x47
	SO_NOFCS                         = 0x2b
	SO_OOBINLINE                     = 0xa
	SO_PASSCRED                      = 0x10
	SO_PASSSEC                       = 0x22
	SO_PEEK_OFF                      = 0x2a
	SO_PEERCRED                      = 0x11
	SO_PEERGROUPS                    = 0x3b
	SO_PEERSEC                       = 0x1f
	SO_PREFER_BUSY_POLL              = 0x45
	SO_PROTOCOL                      = 0x26
	SO_RCVBUF                        = 0x8
	SO_RCVBUFFORCE                   = 0x21
	SO_RCVLOWAT                      = 0x12
	SO_RCVMARK                       = 0x4b
	SO_RCVTIMEO                      = 0x14
	SO_RCVTIMEO_NEW                  = 0x42
	SO_RCVTIMEO_OLD                  = 0x14
	SO_RESERVE_MEM                   = 0x49
	SO_REUSEADDR                     = 0x2
	SO_REUSEPORT                     = 0xf
	SO_RXQ_OVFL                      = 0x28
	SO_SECURITY_AUTHENTICATION       = 0x16
	SO_SECURITY_ENCRYPTION_NETWORK   = 0x18
	SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
	SO_SELECT_ERR_QUEUE              = 0x2d
	SO_SNDBUF                        = 0x7
	SO_SNDBUFFORCE                   = 0x20
	SO_SNDLOWAT                      = 0x13
	SO_SNDTIMEO                      = 0x15
	SO_SNDTIMEO_NEW                  = 0x43
	SO_SNDTIMEO_OLD                  = 0x15
	SO_TIMESTAMPING                  = 0x25
	SO_TIMESTAMPING_NEW              = 0x41
	SO_TIMESTAMPING_OLD              = 0x25
	SO_TIMESTAMPNS                   = 0x23
	SO_TIMESTAMPNS_NEW               = 0x40
	SO_TIMESTAMPNS_OLD               = 0x23
	SO_TIMESTAMP_NEW                 = 0x3f
	SO_TXREHASH                      = 0x4a
	SO_TXTIME                        = 0x3d
	SO_TYPE                          = 0x3
	SO_WIFI_STATUS                   = 0x29
	SO_ZEROCOPY                      = 0x3c
	TAB1                             = 0x800
	TAB2                             = 0x1000
	TAB3                             = 0x1800
	TABDLY                           = 0x1800
	TCFLSH                           = 0x540b
	TCGETA                           = 0x5405
	TCGETS                           = 0x5401
	TCGETS2                          = 0x802c542a
	TCGETX                           = 0x5432
	TCSAFLUSH                        = 0x2
	TCSBRK                           = 0x5409
	TCSBRKP                          = 0x5425
	TCSETA                           = 0x5406
	TCSETAF                          = 0x5408
	TCSETAW                          = 0x5407
	TCSETS                           = 0x5402
	TCSETS2                          = 0x402c542b
	TCSETSF                          = 0x5404
	TCSETSF2                         = 0x402c542d
	TCSETSW                          = 0x5403
	TCSETSW2                         = 0x402c542c
	TCSETX                           = 0x5433
	TCSETXF                          = 0x5434
	TCSETXW                          = 0x5435
	TCXONC                           = 0x540a
	TFD_CLOEXEC                      = 0x80000
	TFD_NONBLOCK                     = 0x800
	TIOCCBRK                         = 0x5428
	TIOCCONS                         = 0x541d
	TIOCEXCL                         = 0x540c
	TIOCGDEV                         = 0x80045432
	TIOCGETD                         = 0x5424
	TIOCGEXCL                        = 0x80045440
	TIOCGICOUNT                      = 0x545d
	TIOCGISO7816                     = 0x80285442
	TIOCGLCKTRMIOS                   = 0x5456
	TIOCGPGRP                        = 0x540f
	TIOCGPKT                         = 0x80045438
	TIOCGPTLCK                       = 0x80045439
	TIOCGPTN                         = 0x80045430
	TIOCGPTPEER                      = 0x5441
	TIOCGRS485                       = 0x542e
	TIOCGSERIAL                      = 0x541e
	TIOCGSID                         = 0x5429
	TIOCGSOFTCAR                     = 0x5419
	TIOCGWINSZ                       = 0x5413
	TIOCINQ                          = 0x541b
	TIOCLINUX                        = 0x541c
	TIOCMBIC                         = 0x5417
	TIOCMBIS                         = 0x5416
	TIOCMGET                         = 0x5415
	TIOCMIWAIT                       = 0x545c
	TIOCMSET                         = 0x5418
	TIOCM_CAR                        = 0x40
	TIOCM_CD                         = 0x40
	TIOCM_CTS                        = 0x20
	TIOCM_DSR                        = 0x100
	TIOCM_RI                         = 0x80
	TIOCM_RNG                        = 0x80
	TIOCM_SR                         = 0x10
	TIOCM_ST                         = 0x8
	TIOCNOTTY                        = 0x5422
	TIOCNXCL                         = 0x540d
	TIOCOUTQ                         = 0x5411
	TIOCPKT                          = 0x5420
	TIOCSBRK                         = 0x5427
	TIOCSCTTY                        = 0x540e
	TIOCSERCONFIG                    = 0x5453
	TIOCSERGETLSR                    = 0x5459
	TIOCSERGETMULTI                  = 0x545a
	TIOCSERGSTRUCT                   = 0x5458
	TIOCSERGWILD                     = 0x5454
	TIOCSERSETMULTI                  = 0x545b
	TIOCSERSWILD                     = 0x5455
	TIOCSER_TEMT                     = 0x1
	TIOCSETD                         = 0x5423
	TIOCSIG                          = 0x40045436
	TIOCSISO7816                     = 0xc0285443
	TIOCSLCKTRMIOS                   = 0x5457
	TIOCSPGRP                        = 0x5410
	TIOCSPTLCK                       = 0x40045431
	TIOCSRS485                       = 0x542f
	TIOCSSERIAL                      = 0x541f
	TIOCSSOFTCAR                     = 0x541a
	TIOCSTI                          = 0x5412
	TIOCSWINSZ                       = 0x5414
	TIOCVHANGUP                      = 0x5437
	TOSTOP                           = 0x100
	TUNATTACHFILTER                  = 0x400854d5
	TUNDETACHFILTER                  = 0x400854d6
	TUNGETDEVNETNS                   = 0x54e3
	TUNGETFEATURES                   = 0x800454cf
	TUNGETFILTER                     = 0x800854db
	TUNGETIFF                        = 0x800454d2
	TUNGETSNDBUF                     = 0x800454d3
	TUNGETVNETBE                     = 0x800454df
	TUNGETVNETHDRSZ                  = 0x800454d7
	TUNGETVNETLE                     = 0x800454dd
	TUNSETCARRIER                    = 0x400454e2
	TUNSETDEBUG                      = 0x400454c9
	TUNSETFILTEREBPF                 = 0x800454e1
	TUNSETGROUP                      = 0x400454ce
	TUNSETIFF                        = 0x400454ca
	TUNSETIFINDEX                    = 0x400454da
	TUNSETLINK                       = 0x400454cd
	TUNSETNOCSUM                     = 0x400454c8
	TUNSETOFFLOAD                    = 0x400454d0
	TUNSETOWNER                      = 0x400454cc
	TUNSETPERSIST                    = 0x400454cb
	TUNSETQUEUE                      = 0x400454d9
	TUNSETSNDBUF                     = 0x400454d4
	TUNSETSTEERINGEBPF               = 0x800454e0
	TUNSETTXFILTER                   = 0x400454d1
	TUNSETVNETBE                     = 0x400454de
	TUNSETVNETHDRSZ                  = 0x400454d8
	TUNSETVNETLE                     = 0x400454dc
	UBI_IOCATT                       = 0x40186f40
	UBI_IOCDET                       = 0x40046f41
	UBI_IOCEBCH                      = 0x40044f02
	UBI_IOCEBER                      = 0x40044f01
	UBI_IOCEBISMAP                   = 0x80044f05
	UBI_IOCEBMAP                     = 0x40084f03
	UBI_IOCEBUNMAP                   = 0x40044f04
	UBI_IOCMKVOL                     = 0x40986f00
	UBI_IOCRMVOL                     = 0x40046f01
	UBI_IOCRNVOL                     = 0x51106f03
	UBI_IOCRPEB                      = 0x40046f04
	UBI_IOCRSVOL                     = 0x400c6f02
	UBI_IOCSETVOLPROP                = 0x40104f06
	UBI_IOCSPEB                      = 0x40046f05
	UBI_IOCVOLCRBLK                  = 0x40804f07
	UBI_IOCVOLRMBLK                  = 0x4f08
	UBI_IOCVOLUP                     = 0x40084f00
	VDISCARD                         = 0xd
	VEOF                             = 0x4
	VEOL                             = 0xb
	VEOL2                            = 0x10
	VMIN                             = 0x6
	VREPRINT                         = 0xc
	VSTART                           = 0x8
	VSTOP                            = 0x9
	VSUSP                            = 0xa
	VSWTC                            = 0x7
	VT1                              = 0x4000
	VTDLY                            = 0x4000
	VTIME                            = 0x5
	VWERASE                          = 0xe
	WDIOC_GETBOOTSTATUS              = 0x80045702
	WDIOC_GETPRETIMEOUT              = 0x80045709
	WDIOC_GETSTATUS                  = 0x80045701
	WDIOC_GETSUPPORT                 = 0x80285700
	WDIOC_GETTEMP                    = 0x80045703
	WDIOC_GETTIMELEFT                = 0x8004570a
	WDIOC_GETTIMEOUT                 = 0x80045707
	WDIOC_KEEPALIVE                  = 0x80045705
	WDIOC_SETOPTIONS                 = 0x80045704
	WORDSIZE                         = 0x20
	XCASE                            = 0x4
	XTABS                            = 0x1800
	_HIDIOCGRAWNAME                  = 0x80804804
	_HIDIOCGRAWPHYS                  = 0x80404805
	_HIDIOCGRAWUNIQ                  = 0x80404808
)

// Errors
const (
	EADDRINUSE      = syscall.Errno(0x62)
	EADDRNOTAVAIL   = syscall.Errno(0x63)
	EADV            = syscall.Errno(0x44)
	EAFNOSUPPORT    = syscall.Errno(0x61)
	EALREADY        = syscall.Errno(0x72)
	EBADE           = syscall.Errno(0x34)
	EBADFD          = syscall.Errno(0x4d)
	EBADMSG         = syscall.Errno(0x4a)
	EBADR           = syscall.Errno(0x35)
	EBADRQC         = syscall.Errno(0x38)
	EBADSLT         = syscall.Errno(0x39)
	EBFONT          = syscall.Errno(0x3b)
	ECANCELED       = syscall.Errno(0x7d)
	ECHRNG          = syscall.Errno(0x2c)
	ECOMM           = syscall.Errno(0x46)
	ECONNABORTED    = syscall.Errno(0x67)
	ECONNREFUSED    = syscall.Errno(0x6f)
	ECONNRESET      = syscall.Errno(0x68)
	EDEADLK         = syscall.Errno(0x23)
	EDEADLOCK       = syscall.Errno(0x23)
	EDESTADDRREQ    = syscall.Errno(0x59)
	EDOTDOT         = syscall.Errno(0x49)
	EDQUOT          = syscall.Errno(0x7a)
	EHOSTDOWN       = syscall.Errno(0x70)
	EHOSTUNREACH    = syscall.Errno(0x71)
	EHWPOISON       = syscall.Errno(0x85)
	EIDRM           = syscall.Errno(0x2b)
	EILSEQ          = syscall.Errno(0x54)
	EINPROGRESS     = syscall.Errno(0x73)
	EISCONN         = syscall.Errno(0x6a)
	EISNAM          = syscall.Errno(0x78)
	EKEYEXPIRED     = syscall.Errno(0x7f)
	EKEYREJECTED    = syscall.Errno(0x81)
	EKEYREVOKED     = syscall.Errno(0x80)
	EL2HLT          = syscall.Errno(0x33)
	EL2NSYNC        = syscall.Errno(0x2d)
	EL3HLT          = syscall.Errno(0x2e)
	EL3RST          = syscall.Errno(0x2f)
	ELIBACC         = syscall.Errno(0x4f)
	ELIBBAD         = syscall.Errno(0x50)
	ELIBEXEC        = syscall.Errno(0x53)
	ELIBMAX         = syscall.Errno(0x52)
	ELIBSCN         = syscall.Errno(0x51)
	ELNRNG          = syscall.Errno(0x30)
	ELOOP           = syscall.Errno(0x28)
	EMEDIUMTYPE     = syscall.Errno(0x7c)
	EMSGSIZE        = syscall.Errno(0x5a)
	EMULTIHOP       = syscall.Errno(0x48)
	ENAMETOOLONG    = syscall.Errno(0x24)
	ENAVAIL         = syscall.Errno(0x77)
	ENETDOWN        = syscall.Errno(0x64)
	ENETRESET       = syscall.Errno(0x66)
	ENETUNREACH     = syscall.Errno(0x65)
	ENOANO          = syscall.Errno(0x37)
	ENOBUFS         = syscall.Errno(0x69)
	ENOCSI          = syscall.Errno(0x32)
	ENODATA         = syscall.Errno(0x3d)
	ENOKEY          = syscall.Errno(0x7e)
	ENOLCK          = syscall.Errno(0x25)
	ENOLINK         = syscall.Errno(0x43)
	ENOMEDIUM       = syscall.Errno(0x7b)
	ENOMSG          = syscall.Errno(0x2a)
	ENONET          = syscall.Errno(0x40)
	ENOPKG          = syscall.Errno(0x41)
	ENOPROTOOPT     = syscall.Errno(0x5c)
	ENOSR           = syscall.Errno(0x3f)
	ENOSTR          = syscall.Errno(0x3c)
	ENOSYS          = syscall.Errno(0x26)
	ENOTCONN        = syscall.Errno(0x6b)
	ENOTEMPTY       = syscall.Errno(0x27)
	ENOTNAM         = syscall.Errno(0x76)
	ENOTRECOVERABLE = syscall.Errno(0x83)
	ENOTSOCK        = syscall.Errno(0x58)
	ENOTSUP         = syscall.Errno(0x5f)
	ENOTUNIQ        = syscall.Errno(0x4c)
	EOPNOTSUPP      = syscall.Errno(0x5f)
	EOVERFLOW       = syscall.Errno(0x4b)
	EOWNERDEAD      = syscall.Errno(0x82)
	EPFNOSUPPORT    = syscall.Errno(0x60)
	EPROTO          = syscall.Errno(0x47)
	EPROTONOSUPPORT = syscall.Errno(0x5d)
	EPROTOTYPE      = syscall.Errno(0x5b)
	EREMCHG         = syscall.Errno(0x4e)
	EREMOTE         = syscall.Errno(0x42)
	EREMOTEIO       = syscall.Errno(0x79)
	ERESTART        = syscall.Errno(0x55)
	ERFKILL         = syscall.Errno(0x84)
	ESHUTDOWN       = syscall.Errno(0x6c)
	ESOCKTNOSUPPORT = syscall.Errno(0x5e)
	ESRMNT          = syscall.Errno(0x45)
	ESTALE          = syscall.Errno(0x74)
	ESTRPIPE        = syscall.Errno(0x56)
	ETIME           = syscall.Errno(0x3e)
	ETIMEDOUT       = syscall.Errno(0x6e)
	ETOOMANYREFS    = syscall.Errno(0x6d)
	EUCLEAN         = syscall.Errno(0x75)
	EUNATCH         = syscall.Errno(0x31)
	EUSERS          = syscall.Errno(0x57)
	EXFULL          = syscall.Errno(0x36)
)

// Signals
const (
	SIGBUS    = syscall.Signal(0x7)
	SIGCHLD   = syscall.Signal(0x11)
	SIGCLD    = syscall.Signal(0x11)
	SIGCONT   = syscall.Signal(0x12)
	SIGIO     = syscall.Signal(0x1d)
	SIGPOLL   = syscall.Signal(0x1d)
	SIGPROF   = syscall.Signal(0x1b)
	SIGPWR    = syscall.Signal(0x1e)
	SIGSTKFLT = syscall.Signal(0x10)
	SIGSTOP   = syscall.Signal(0x13)
	SIGSYS    = syscall.Signal(0x1f)
	SIGTSTP   = syscall.Signal(0x14)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x17)
	SIGUSR1   = syscall.Signal(0xa)
	SIGUSR2   = syscall.Signal(0xc)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "no such device or address"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EAGAIN", "resource temporarily unavailable"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device or resource busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "invalid cross-device link"},
	{19, "ENODEV", "no such device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "numerical result out of range"},
	{35, "EDEADLK", "resource deadlock avoided"},
	{36, "ENAMETOOLONG", "file name too long"},
	{37, "ENOLCK", "no locks available"},
	{38, "ENOSYS", "function not implemented"},
	{39, "ENOTEMPTY", "directory not empty"},
	{40, "ELOOP", "too many levels of symbolic links"},
	{42, "ENOMSG", "no message of desired type"},
	{43, "EIDRM", "identifier removed"},
	{44, "ECHRNG", "channel number out of range"},
	{45, "EL2NSYNC", "level 2 not synchronized"},
	{46, "EL3HLT", "level 3 halted"},
	{47, "EL3RST", "level 3 reset"},
	{48, "ELNRNG", "link number out of range"},
	{49, "EUNATCH", "protocol driver not attached"},
	{50, "ENOCSI", "no CSI structure available"},
	{51, "EL2HLT", "level 2 halted"},
	{52, "EBADE", "invalid exchange"},
	{53, "EBADR", "invalid request descriptor"},
	{54, "EXFULL", "exchange full"},
	{55, "ENOANO", "no anode"},
	{56, "EBADRQC", "invalid request code"},
	{57, "EBADSLT", "invalid slot"},
	{59, "EBFONT", "bad font file format"},
	{60, "ENOSTR", "device not a stream"},
	{61, "ENODATA", "no data available"},
	{62, "ETIME", "timer expired"},
	{63, "ENOSR", "out of streams resources"},
	{64, "ENONET", "machine is not on the network"},
	{65, "ENOPKG", "package not installed"},
	{66, "EREMOTE", "object is remote"},
	{67, "ENOLINK", "link has been severed"},
	{68, "EADV", "advertise error"},
	{69, "ESRMNT", "srmount error"},
	{70, "ECOMM", "communication error on send"},
	{71, "EPROTO", "protocol error"},
	{72, "EMULTIHOP", "multihop attempted"},
	{73, "EDOTDOT", "RFS specific error"},
	{74, "EBADMSG", "bad message"},
	{75, "EOVERFLOW", "value too large for defined data type"},
	{76, "ENOTUNIQ", "name not unique on network"},
	{77, "EBADFD", "file descriptor in bad state"},
	{78, "EREMCHG", "remote address changed"},
	{79, "ELIBACC", "can not access a needed shared library"},
	{80, "ELIBBAD", "accessing a corrupted shared library"},
	{81, "ELIBSCN", ".lib section in a.out corrupted"},
	{82, "ELIBMAX", "attempting to link in too many shared libraries"},
	{83, "ELIBEXEC", "cannot exec a shared library directly"},
	{84, "EILSEQ", "invalid or incomplete multibyte or wide character"},
	{85, "ERESTART", "interrupted system call should be restarted"},
	{86, "ESTRPIPE", "streams pipe error"},
	{87, "EUSERS", "too many users"},
	{88, "ENOTSOCK", "socket operation on non-socket"},
	{89, "EDESTADDRREQ", "destination address required"},
	{90, "EMSGSIZE", "message too long"},
	{91, "EPROTOTYPE", "protocol wrong type for socket"},
	{92, "ENOPROTOOPT", "protocol not available"},
	{93, "EPROTONOSUPPORT", "protocol not supported"},
	{94, "ESOCKTNOSUPPORT", "socket type not supported"},
	{95, "ENOTSUP", "operation not supported"},
	{96, "EPFNOSUPPORT", "protocol family not supported"},
	{97, "EAFNOSUPPORT", "address family not supported by protocol"},
	{98, "EADDRINUSE", "address already in use"},
	{99, "EADDRNOTAVAIL", "cannot assign requested address"},
	{100, "ENETDOWN", "network is down"},
	{101, "ENETUNREACH", "network is unreachable"},
	{102, "ENETRESET", "network dropped connection on reset"},
	{103, "ECONNABORTED", "software caused connection abort"},
	{104, "ECONNRESET", "connection reset by peer"},
	{105, "ENOBUFS", "no buffer space available"},
	{106, "EISCONN", "transport endpoint is already connected"},
	{107, "ENOTCONN", "transport endpoint is not connected"},
	{108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
	{109, "ETOOMANYREFS", "too many references: cannot splice"},
	{110, "ETIMEDOUT", "connection timed out"},
	{111, "ECONNREFUSED", "connection refused"},
	{112, "EHOSTDOWN", "host is down"},
	{113, "EHOSTUNREACH", "no route to host"},
	{114, "EALREADY", "operation already in progress"},
	{115, "EINPROGRESS", "operation now in progress"},
	{116, "ESTALE", "stale file handle"},
	{117, "EUCLEAN", "structure needs cleaning"},
	{118, "ENOTNAM", "not a XENIX named type file"},
	{119, "ENAVAIL", "no XENIX semaphores available"},
	{120, "EISNAM", "is a named type file"},
	{121, "EREMOTEIO", "remote I/O error"},
	{122, "EDQUOT", "disk quota exceeded"},
	{123, "ENOMEDIUM", "no medium found"},
	{124, "EMEDIUMTYPE", "wrong medium type"},
	{125, "ECANCELED", "operation canceled"},
	{126, "ENOKEY", "required key not available"},
	{127, "EKEYEXPIRED", "key has expired"},
	{128, "EKEYREVOKED", "key has been revoked"},
	{129, "EKEYREJECTED", "key was rejected by service"},
	{130, "EOWNERDEAD", "owner died"},
	{131, "ENOTRECOVERABLE", "state not recoverable"},
	{132, "ERFKILL", "operation not possible due to RF-kill"},
	{133, "EHWPOISON", "memory page has hardware error"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/breakpoint trap"},
	{6, "SIGABRT", "aborted"},
	{7, "SIGBUS", "bus error"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGUSR1", "user defined signal 1"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGUSR2", "user defined signal 2"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGSTKFLT", "stack fault"},
	{17, "SIGCHLD", "child exited"},
	{18, "SIGCONT", "continued"},
	{19, "SIGSTOP", "stopped (signal)"},
	{20, "SIGTSTP", "stopped"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGURG", "urgent I/O condition"},
	{24, "SIGXCPU", "CPU time limit exceeded"},
	{25, "SIGXFSZ", "file size limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window changed"},
	{29, "SIGIO", "I/O possible"},
	{30, "SIGPWR", "power failure"},
	{31, "SIGSYS", "bad system call"},
}
   07070100000E2E000081A4000000000000000000000001645E367C00008612000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go   // mkerrors.sh -Wall -Werror -static -I/tmp/arm64/include -fsigned-char
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build arm64 && linux
// +build arm64,linux

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -Wall -Werror -static -I/tmp/arm64/include -fsigned-char _const.go

package unix

import "syscall"

const (
	B1000000                         = 0x1008
	B115200                          = 0x1002
	B1152000                         = 0x1009
	B1500000                         = 0x100a
	B2000000                         = 0x100b
	B230400                          = 0x1003
	B2500000                         = 0x100c
	B3000000                         = 0x100d
	B3500000                         = 0x100e
	B4000000                         = 0x100f
	B460800                          = 0x1004
	B500000                          = 0x1005
	B57600                           = 0x1001
	B576000                          = 0x1006
	B921600                          = 0x1007
	BLKBSZGET                        = 0x80081270
	BLKBSZSET                        = 0x40081271
	BLKFLSBUF                        = 0x1261
	BLKFRAGET                        = 0x1265
	BLKFRASET                        = 0x1264
	BLKGETSIZE                       = 0x1260
	BLKGETSIZE64                     = 0x80081272
	BLKPBSZGET                       = 0x127b
	BLKRAGET                         = 0x1263
	BLKRASET                         = 0x1262
	BLKROGET                         = 0x125e
	BLKROSET                         = 0x125d
	BLKRRPART                        = 0x125f
	BLKSECTGET                       = 0x1267
	BLKSECTSET                       = 0x1266
	BLKSSZGET                        = 0x1268
	BOTHER                           = 0x1000
	BS1                              = 0x2000
	BSDLY                            = 0x2000
	CBAUD                            = 0x100f
	CBAUDEX                          = 0x1000
	CIBAUD                           = 0x100f0000
	CLOCAL                           = 0x800
	CR1                              = 0x200
	CR2                              = 0x400
	CR3                              = 0x600
	CRDLY                            = 0x600
	CREAD                            = 0x80
	CS6                              = 0x10
	CS7                              = 0x20
	CS8                              = 0x30
	CSIZE                            = 0x30
	CSTOPB                           = 0x40
	ECCGETLAYOUT                     = 0x81484d11
	ECCGETSTATS                      = 0x80104d12
	ECHOCTL                          = 0x200
	ECHOE                            = 0x10
	ECHOK                            = 0x20
	ECHOKE                           = 0x800
	ECHONL                           = 0x40
	ECHOPRT                          = 0x400
	EFD_CLOEXEC                      = 0x80000
	EFD_NONBLOCK                     = 0x800
	EPOLL_CLOEXEC                    = 0x80000
	ESR_MAGIC                        = 0x45535201
	EXTPROC                          = 0x10000
	EXTRA_MAGIC                      = 0x45585401
	FF1                              = 0x8000
	FFDLY                            = 0x8000
	FICLONE                          = 0x40049409
	FICLONERANGE                     = 0x4020940d
	FLUSHO                           = 0x1000
	FPSIMD_MAGIC                     = 0x46508001
	FS_IOC_ENABLE_VERITY             = 0x40806685
	FS_IOC_GETFLAGS                  = 0x80086601
	FS_IOC_GET_ENCRYPTION_NONCE      = 0x8010661b
	FS_IOC_GET_ENCRYPTION_POLICY     = 0x400c6615
	FS_IOC_GET_ENCRYPTION_PWSALT     = 0x40106614
	FS_IOC_SETFLAGS                  = 0x40086602
	FS_IOC_SET_ENCRYPTION_POLICY     = 0x800c6613
	F_GETLK                          = 0x5
	F_GETLK64                        = 0x5
	F_GETOWN                         = 0x9
	F_RDLCK                          = 0x0
	F_SETLK                          = 0x6
	F_SETLK64                        = 0x6
	F_SETLKW                         = 0x7
	F_SETLKW64                       = 0x7
	F_SETOWN                         = 0x8
	F_UNLCK                          = 0x2
	F_WRLCK                          = 0x1
	HIDIOCGRAWINFO                   = 0x80084803
	HIDIOCGRDESC                     = 0x90044802
	HIDIOCGRDESCSIZE                 = 0x80044801
	HUPCL                            = 0x400
	ICANON                           = 0x2
	IEXTEN                           = 0x8000
	IN_CLOEXEC                       = 0x80000
	IN_NONBLOCK                      = 0x800
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9
	ISIG                             = 0x1
	IUCLC                            = 0x200
	IXOFF                            = 0x1000
	IXON                             = 0x400
	MAP_ANON                         = 0x20
	MAP_ANONYMOUS                    = 0x20
	MAP_DENYWRITE                    = 0x800
	MAP_EXECUTABLE                   = 0x1000
	MAP_GROWSDOWN                    = 0x100
	MAP_HUGETLB                      = 0x40000
	MAP_LOCKED                       = 0x2000
	MAP_NONBLOCK                     = 0x10000
	MAP_NORESERVE                    = 0x4000
	MAP_POPULATE                     = 0x8000
	MAP_STACK                        = 0x20000
	MAP_SYNC                         = 0x80000
	MCL_CURRENT                      = 0x1
	MCL_FUTURE                       = 0x2
	MCL_ONFAULT                      = 0x4
	MEMERASE                         = 0x40084d02
	MEMERASE64                       = 0x40104d14
	MEMGETBADBLOCK                   = 0x40084d0b
	MEMGETINFO                       = 0x80204d01
	MEMGETOOBSEL                     = 0x80c84d0a
	MEMGETREGIONCOUNT                = 0x80044d07
	MEMISLOCKED                      = 0x80084d17
	MEMLOCK                          = 0x40084d05
	MEMREAD                          = 0xc0404d1a
	MEMREADOOB                       = 0xc0104d04
	MEMSETBADBLOCK                   = 0x40084d0c
	MEMUNLOCK                        = 0x40084d06
	MEMWRITEOOB                      = 0xc0104d03
	MTDFILEMODE                      = 0x4d13
	NFDBITS                          = 0x40
	NLDLY                            = 0x100
	NOFLSH                           = 0x80
	NS_GET_NSTYPE                    = 0xb703
	NS_GET_OWNER_UID                 = 0xb704
	NS_GET_PARENT                    = 0xb702
	NS_GET_USERNS                    = 0xb701
	OLCUC                            = 0x2
	ONLCR                            = 0x4
	OTPERASE                         = 0x400c4d19
	OTPGETREGIONCOUNT                = 0x40044d0e
	OTPGETREGIONINFO                 = 0x400c4d0f
	OTPLOCK                          = 0x800c4d10
	OTPSELECT                        = 0x80044d0d
	O_APPEND                         = 0x400
	O_ASYNC                          = 0x2000
	O_CLOEXEC                        = 0x80000
	O_CREAT                          = 0x40
	O_DIRECT                         = 0x10000
	O_DIRECTORY                      = 0x4000
	O_DSYNC                          = 0x1000
	O_EXCL                           = 0x80
	O_FSYNC                          = 0x101000
	O_LARGEFILE                      = 0x0
	O_NDELAY                         = 0x800
	O_NOATIME                        = 0x40000
	O_NOCTTY                         = 0x100
	O_NOFOLLOW                       = 0x8000
	O_NONBLOCK                       = 0x800
	O_PATH                           = 0x200000
	O_RSYNC                          = 0x101000
	O_SYNC                           = 0x101000
	O_TMPFILE                        = 0x404000
	O_TRUNC                          = 0x200
	PARENB                           = 0x100
	PARODD                           = 0x200
	PENDIN                           = 0x4000
	PERF_EVENT_IOC_DISABLE           = 0x2401
	PERF_EVENT_IOC_ENABLE            = 0x2400
	PERF_EVENT_IOC_ID                = 0x80082407
	PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b
	PERF_EVENT_IOC_PAUSE_OUTPUT      = 0x40042409
	PERF_EVENT_IOC_PERIOD            = 0x40082404
	PERF_EVENT_IOC_QUERY_BPF         = 0xc008240a
	PERF_EVENT_IOC_REFRESH           = 0x2402
	PERF_EVENT_IOC_RESET             = 0x2403
	PERF_EVENT_IOC_SET_BPF           = 0x40042408
	PERF_EVENT_IOC_SET_FILTER        = 0x40082406
	PERF_EVENT_IOC_SET_OUTPUT        = 0x2405
	PPPIOCATTACH                     = 0x4004743d
	PPPIOCATTCHAN                    = 0x40047438
	PPPIOCBRIDGECHAN                 = 0x40047435
	PPPIOCCONNECT                    = 0x4004743a
	PPPIOCDETACH                     = 0x4004743c
	PPPIOCDISCONN                    = 0x7439
	PPPIOCGASYNCMAP                  = 0x80047458
	PPPIOCGCHAN                      = 0x80047437
	PPPIOCGDEBUG                     = 0x80047441
	PPPIOCGFLAGS                     = 0x8004745a
	PPPIOCGIDLE                      = 0x8010743f
	PPPIOCGIDLE32                    = 0x8008743f
	PPPIOCGIDLE64                    = 0x8010743f
	PPPIOCGL2TPSTATS                 = 0x80487436
	PPPIOCGMRU                       = 0x80047453
	PPPIOCGRASYNCMAP                 = 0x80047455
	PPPIOCGUNIT                      = 0x80047456
	PPPIOCGXASYNCMAP                 = 0x80207450
	PPPIOCSACTIVE                    = 0x40107446
	PPPIOCSASYNCMAP                  = 0x40047457
	PPPIOCSCOMPRESS                  = 0x4010744d
	PPPIOCSDEBUG                     = 0x40047440
	PPPIOCSFLAGS                     = 0x40047459
	PPPIOCSMAXCID                    = 0x40047451
	PPPIOCSMRRU                      = 0x4004743b
	PPPIOCSMRU                       = 0x40047452
	PPPIOCSNPMODE                    = 0x4008744b
	PPPIOCSPASS                      = 0x40107447
	PPPIOCSRASYNCMAP                 = 0x40047454
	PPPIOCSXASYNCMAP                 = 0x4020744f
	PPPIOCUNBRIDGECHAN               = 0x7434
	PPPIOCXFERUNIT                   = 0x744e
	PROT_BTI                         = 0x10
	PROT_MTE                         = 0x20
	PR_SET_PTRACER_ANY               = 0xffffffffffffffff
	PTRACE_PEEKMTETAGS               = 0x21
	PTRACE_POKEMTETAGS               = 0x22
	PTRACE_SYSEMU                    = 0x1f
	PTRACE_SYSEMU_SINGLESTEP         = 0x20
	RLIMIT_AS                        = 0x9
	RLIMIT_MEMLOCK                   = 0x8
	RLIMIT_NOFILE                    = 0x7
	RLIMIT_NPROC                     = 0x6
	RLIMIT_RSS                       = 0x5
	RNDADDENTROPY                    = 0x40085203
	RNDADDTOENTCNT                   = 0x40045201
	RNDCLEARPOOL                     = 0x5206
	RNDGETENTCNT                     = 0x80045200
	RNDGETPOOL                       = 0x80085202
	RNDRESEEDCRNG                    = 0x5207
	RNDZAPENTCNT                     = 0x5204
	RTC_AIE_OFF                      = 0x7002
	RTC_AIE_ON                       = 0x7001
	RTC_ALM_READ                     = 0x80247008
	RTC_ALM_SET                      = 0x40247007
	RTC_EPOCH_READ                   = 0x8008700d
	RTC_EPOCH_SET                    = 0x4008700e
	RTC_IRQP_READ                    = 0x8008700b
	RTC_IRQP_SET                     = 0x4008700c
	RTC_PARAM_GET                    = 0x40187013
	RTC_PARAM_SET                    = 0x40187014
	RTC_PIE_OFF                      = 0x7006
	RTC_PIE_ON                       = 0x7005
	RTC_PLL_GET                      = 0x80207011
	RTC_PLL_SET                      = 0x40207012
	RTC_RD_TIME                      = 0x80247009
	RTC_SET_TIME                     = 0x4024700a
	RTC_UIE_OFF                      = 0x7004
	RTC_UIE_ON                       = 0x7003
	RTC_VL_CLR                       = 0x7014
	RTC_VL_READ                      = 0x80047013
	RTC_WIE_OFF                      = 0x7010
	RTC_WIE_ON                       = 0x700f
	RTC_WKALM_RD                     = 0x80287010
	RTC_WKALM_SET                    = 0x4028700f
	SCM_TIMESTAMPING                 = 0x25
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
	SCM_TIMESTAMPNS                  = 0x23
	SCM_TXTIME                       = 0x3d
	SCM_WIFI_STATUS                  = 0x29
	SFD_CLOEXEC                      = 0x80000
	SFD_NONBLOCK                     = 0x800
	SIOCATMARK                       = 0x8905
	SIOCGPGRP                        = 0x8904
	SIOCGSTAMPNS_NEW                 = 0x80108907
	SIOCGSTAMP_NEW                   = 0x80108906
	SIOCINQ                          = 0x541b
	SIOCOUTQ                         = 0x5411
	SIOCSPGRP                        = 0x8902
	SOCK_CLOEXEC                     = 0x80000
	SOCK_DGRAM                       = 0x2
	SOCK_NONBLOCK                    = 0x800
	SOCK_STREAM                      = 0x1
	SOL_SOCKET                       = 0x1
	SO_ACCEPTCONN                    = 0x1e
	SO_ATTACH_BPF                    = 0x32
	SO_ATTACH_REUSEPORT_CBPF         = 0x33
	SO_ATTACH_REUSEPORT_EBPF         = 0x34
	SO_BINDTODEVICE                  = 0x19
	SO_BINDTOIFINDEX                 = 0x3e
	SO_BPF_EXTENSIONS                = 0x30
	SO_BROADCAST                     = 0x6
	SO_BSDCOMPAT                     = 0xe
	SO_BUF_LOCK                      = 0x48
	SO_BUSY_POLL                     = 0x2e
	SO_BUSY_POLL_BUDGET              = 0x46
	SO_CNX_ADVICE                    = 0x35
	SO_COOKIE                        = 0x39
	SO_DETACH_REUSEPORT_BPF          = 0x44
	SO_DOMAIN                        = 0x27
	SO_DONTROUTE                     = 0x5
	SO_ERROR                         = 0x4
	SO_INCOMING_CPU                  = 0x31
	SO_INCOMING_NAPI_ID              = 0x38
	SO_KEEPALIVE                     = 0x9
	SO_LINGER                        = 0xd
	SO_LOCK_FILTER                   = 0x2c
	SO_MARK                          = 0x24
	SO_MAX_PACING_RATE               = 0x2f
	SO_MEMINFO                       = 0x37
	SO_NETNS_COOKIE                  = 0x47
	SO_NOFCS                         = 0x2b
	SO_OOBINLINE                     = 0xa
	SO_PASSCRED                      = 0x10
	SO_PASSSEC                       = 0x22
	SO_PEEK_OFF                      = 0x2a
	SO_PEERCRED                      = 0x11
	SO_PEERGROUPS                    = 0x3b
	SO_PEERSEC                       = 0x1f
	SO_PREFER_BUSY_POLL              = 0x45
	SO_PROTOCOL                      = 0x26
	SO_RCVBUF                        = 0x8
	SO_RCVBUFFORCE                   = 0x21
	SO_RCVLOWAT                      = 0x12
	SO_RCVMARK                       = 0x4b
	SO_RCVTIMEO                      = 0x14
	SO_RCVTIMEO_NEW                  = 0x42
	SO_RCVTIMEO_OLD                  = 0x14
	SO_RESERVE_MEM                   = 0x49
	SO_REUSEADDR                     = 0x2
	SO_REUSEPORT                     = 0xf
	SO_RXQ_OVFL                      = 0x28
	SO_SECURITY_AUTHENTICATION       = 0x16
	SO_SECURITY_ENCRYPTION_NETWORK   = 0x18
	SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
	SO_SELECT_ERR_QUEUE              = 0x2d
	SO_SNDBUF                        = 0x7
	SO_SNDBUFFORCE                   = 0x20
	SO_SNDLOWAT                      = 0x13
	SO_SNDTIMEO                      = 0x15
	SO_SNDTIMEO_NEW                  = 0x43
	SO_SNDTIMEO_OLD                  = 0x15
	SO_TIMESTAMPING                  = 0x25
	SO_TIMESTAMPING_NEW              = 0x41
	SO_TIMESTAMPING_OLD              = 0x25
	SO_TIMESTAMPNS                   = 0x23
	SO_TIMESTAMPNS_NEW               = 0x40
	SO_TIMESTAMPNS_OLD               = 0x23
	SO_TIMESTAMP_NEW                 = 0x3f
	SO_TXREHASH                      = 0x4a
	SO_TXTIME                        = 0x3d
	SO_TYPE                          = 0x3
	SO_WIFI_STATUS                   = 0x29
	SO_ZEROCOPY                      = 0x3c
	SVE_MAGIC                        = 0x53564501
	TAB1                             = 0x800
	TAB2                             = 0x1000
	TAB3                             = 0x1800
	TABDLY                           = 0x1800
	TCFLSH                           = 0x540b
	TCGETA                           = 0x5405
	TCGETS                           = 0x5401
	TCGETS2                          = 0x802c542a
	TCGETX                           = 0x5432
	TCSAFLUSH                        = 0x2
	TCSBRK                           = 0x5409
	TCSBRKP                          = 0x5425
	TCSETA                           = 0x5406
	TCSETAF                          = 0x5408
	TCSETAW                          = 0x5407
	TCSETS                           = 0x5402
	TCSETS2                          = 0x402c542b
	TCSETSF                          = 0x5404
	TCSETSF2                         = 0x402c542d
	TCSETSW                          = 0x5403
	TCSETSW2                         = 0x402c542c
	TCSETX                           = 0x5433
	TCSETXF                          = 0x5434
	TCSETXW                          = 0x5435
	TCXONC                           = 0x540a
	TFD_CLOEXEC                      = 0x80000
	TFD_NONBLOCK                     = 0x800
	TIOCCBRK                         = 0x5428
	TIOCCONS                         = 0x541d
	TIOCEXCL                         = 0x540c
	TIOCGDEV                         = 0x80045432
	TIOCGETD                         = 0x5424
	TIOCGEXCL                        = 0x80045440
	TIOCGICOUNT                      = 0x545d
	TIOCGISO7816                     = 0x80285442
	TIOCGLCKTRMIOS                   = 0x5456
	TIOCGPGRP                        = 0x540f
	TIOCGPKT                         = 0x80045438
	TIOCGPTLCK                       = 0x80045439
	TIOCGPTN                         = 0x80045430
	TIOCGPTPEER                      = 0x5441
	TIOCGRS485                       = 0x542e
	TIOCGSERIAL                      = 0x541e
	TIOCGSID                         = 0x5429
	TIOCGSOFTCAR                     = 0x5419
	TIOCGWINSZ                       = 0x5413
	TIOCINQ                          = 0x541b
	TIOCLINUX                        = 0x541c
	TIOCMBIC                         = 0x5417
	TIOCMBIS                         = 0x5416
	TIOCMGET                         = 0x5415
	TIOCMIWAIT                       = 0x545c
	TIOCMSET                         = 0x5418
	TIOCM_CAR                        = 0x40
	TIOCM_CD                         = 0x40
	TIOCM_CTS                        = 0x20
	TIOCM_DSR                        = 0x100
	TIOCM_RI                         = 0x80
	TIOCM_RNG                        = 0x80
	TIOCM_SR                         = 0x10
	TIOCM_ST                         = 0x8
	TIOCNOTTY                        = 0x5422
	TIOCNXCL                         = 0x540d
	TIOCOUTQ                         = 0x5411
	TIOCPKT                          = 0x5420
	TIOCSBRK                         = 0x5427
	TIOCSCTTY                        = 0x540e
	TIOCSERCONFIG                    = 0x5453
	TIOCSERGETLSR                    = 0x5459
	TIOCSERGETMULTI                  = 0x545a
	TIOCSERGSTRUCT                   = 0x5458
	TIOCSERGWILD                     = 0x5454
	TIOCSERSETMULTI                  = 0x545b
	TIOCSERSWILD                     = 0x5455
	TIOCSER_TEMT                     = 0x1
	TIOCSETD                         = 0x5423
	TIOCSIG                          = 0x40045436
	TIOCSISO7816                     = 0xc0285443
	TIOCSLCKTRMIOS                   = 0x5457
	TIOCSPGRP                        = 0x5410
	TIOCSPTLCK                       = 0x40045431
	TIOCSRS485                       = 0x542f
	TIOCSSERIAL                      = 0x541f
	TIOCSSOFTCAR                     = 0x541a
	TIOCSTI                          = 0x5412
	TIOCSWINSZ                       = 0x5414
	TIOCVHANGUP                      = 0x5437
	TOSTOP                           = 0x100
	TUNATTACHFILTER                  = 0x401054d5
	TUNDETACHFILTER                  = 0x401054d6
	TUNGETDEVNETNS                   = 0x54e3
	TUNGETFEATURES                   = 0x800454cf
	TUNGETFILTER                     = 0x801054db
	TUNGETIFF                        = 0x800454d2
	TUNGETSNDBUF                     = 0x800454d3
	TUNGETVNETBE                     = 0x800454df
	TUNGETVNETHDRSZ                  = 0x800454d7
	TUNGETVNETLE                     = 0x800454dd
	TUNSETCARRIER                    = 0x400454e2
	TUNSETDEBUG                      = 0x400454c9
	TUNSETFILTEREBPF                 = 0x800454e1
	TUNSETGROUP                      = 0x400454ce
	TUNSETIFF                        = 0x400454ca
	TUNSETIFINDEX                    = 0x400454da
	TUNSETLINK                       = 0x400454cd
	TUNSETNOCSUM                     = 0x400454c8
	TUNSETOFFLOAD                    = 0x400454d0
	TUNSETOWNER                      = 0x400454cc
	TUNSETPERSIST                    = 0x400454cb
	TUNSETQUEUE                      = 0x400454d9
	TUNSETSNDBUF                     = 0x400454d4
	TUNSETSTEERINGEBPF               = 0x800454e0
	TUNSETTXFILTER                   = 0x400454d1
	TUNSETVNETBE                     = 0x400454de
	TUNSETVNETHDRSZ                  = 0x400454d8
	TUNSETVNETLE                     = 0x400454dc
	UBI_IOCATT                       = 0x40186f40
	UBI_IOCDET                       = 0x40046f41
	UBI_IOCEBCH                      = 0x40044f02
	UBI_IOCEBER                      = 0x40044f01
	UBI_IOCEBISMAP                   = 0x80044f05
	UBI_IOCEBMAP                     = 0x40084f03
	UBI_IOCEBUNMAP                   = 0x40044f04
	UBI_IOCMKVOL                     = 0x40986f00
	UBI_IOCRMVOL                     = 0x40046f01
	UBI_IOCRNVOL                     = 0x51106f03
	UBI_IOCRPEB                      = 0x40046f04
	UBI_IOCRSVOL                     = 0x400c6f02
	UBI_IOCSETVOLPROP                = 0x40104f06
	UBI_IOCSPEB                      = 0x40046f05
	UBI_IOCVOLCRBLK                  = 0x40804f07
	UBI_IOCVOLRMBLK                  = 0x4f08
	UBI_IOCVOLUP                     = 0x40084f00
	VDISCARD                         = 0xd
	VEOF                             = 0x4
	VEOL                             = 0xb
	VEOL2                            = 0x10
	VMIN                             = 0x6
	VREPRINT                         = 0xc
	VSTART                           = 0x8
	VSTOP                            = 0x9
	VSUSP                            = 0xa
	VSWTC                            = 0x7
	VT1                              = 0x4000
	VTDLY                            = 0x4000
	VTIME                            = 0x5
	VWERASE                          = 0xe
	WDIOC_GETBOOTSTATUS              = 0x80045702
	WDIOC_GETPRETIMEOUT              = 0x80045709
	WDIOC_GETSTATUS                  = 0x80045701
	WDIOC_GETSUPPORT                 = 0x80285700
	WDIOC_GETTEMP                    = 0x80045703
	WDIOC_GETTIMELEFT                = 0x8004570a
	WDIOC_GETTIMEOUT                 = 0x80045707
	WDIOC_KEEPALIVE                  = 0x80045705
	WDIOC_SETOPTIONS                 = 0x80045704
	WORDSIZE                         = 0x40
	XCASE                            = 0x4
	XTABS                            = 0x1800
	ZA_MAGIC                         = 0x54366345
	_HIDIOCGRAWNAME                  = 0x80804804
	_HIDIOCGRAWPHYS                  = 0x80404805
	_HIDIOCGRAWUNIQ                  = 0x80404808
)

// Errors
const (
	EADDRINUSE      = syscall.Errno(0x62)
	EADDRNOTAVAIL   = syscall.Errno(0x63)
	EADV            = syscall.Errno(0x44)
	EAFNOSUPPORT    = syscall.Errno(0x61)
	EALREADY        = syscall.Errno(0x72)
	EBADE           = syscall.Errno(0x34)
	EBADFD          = syscall.Errno(0x4d)
	EBADMSG         = syscall.Errno(0x4a)
	EBADR           = syscall.Errno(0x35)
	EBADRQC         = syscall.Errno(0x38)
	EBADSLT         = syscall.Errno(0x39)
	EBFONT          = syscall.Errno(0x3b)
	ECANCELED       = syscall.Errno(0x7d)
	ECHRNG          = syscall.Errno(0x2c)
	ECOMM           = syscall.Errno(0x46)
	ECONNABORTED    = syscall.Errno(0x67)
	ECONNREFUSED    = syscall.Errno(0x6f)
	ECONNRESET      = syscall.Errno(0x68)
	EDEADLK         = syscall.Errno(0x23)
	EDEADLOCK       = syscall.Errno(0x23)
	EDESTADDRREQ    = syscall.Errno(0x59)
	EDOTDOT         = syscall.Errno(0x49)
	EDQUOT          = syscall.Errno(0x7a)
	EHOSTDOWN       = syscall.Errno(0x70)
	EHOSTUNREACH    = syscall.Errno(0x71)
	EHWPOISON       = syscall.Errno(0x85)
	EIDRM           = syscall.Errno(0x2b)
	EILSEQ          = syscall.Errno(0x54)
	EINPROGRESS     = syscall.Errno(0x73)
	EISCONN         = syscall.Errno(0x6a)
	EISNAM          = syscall.Errno(0x78)
	EKEYEXPIRED     = syscall.Errno(0x7f)
	EKEYREJECTED    = syscall.Errno(0x81)
	EKEYREVOKED     = syscall.Errno(0x80)
	EL2HLT          = syscall.Errno(0x33)
	EL2NSYNC        = syscall.Errno(0x2d)
	EL3HLT          = syscall.Errno(0x2e)
	EL3RST          = syscall.Errno(0x2f)
	ELIBACC         = syscall.Errno(0x4f)
	ELIBBAD         = syscall.Errno(0x50)
	ELIBEXEC        = syscall.Errno(0x53)
	ELIBMAX         = syscall.Errno(0x52)
	ELIBSCN         = syscall.Errno(0x51)
	ELNRNG          = syscall.Errno(0x30)
	ELOOP           = syscall.Errno(0x28)
	EMEDIUMTYPE     = syscall.Errno(0x7c)
	EMSGSIZE        = syscall.Errno(0x5a)
	EMULTIHOP       = syscall.Errno(0x48)
	ENAMETOOLONG    = syscall.Errno(0x24)
	ENAVAIL         = syscall.Errno(0x77)
	ENETDOWN        = syscall.Errno(0x64)
	ENETRESET       = syscall.Errno(0x66)
	ENETUNREACH     = syscall.Errno(0x65)
	ENOANO          = syscall.Errno(0x37)
	ENOBUFS         = syscall.Errno(0x69)
	ENOCSI          = syscall.Errno(0x32)
	ENODATA         = syscall.Errno(0x3d)
	ENOKEY          = syscall.Errno(0x7e)
	ENOLCK          = syscall.Errno(0x25)
	ENOLINK         = syscall.Errno(0x43)
	ENOMEDIUM       = syscall.Errno(0x7b)
	ENOMSG          = syscall.Errno(0x2a)
	ENONET          = syscall.Errno(0x40)
	ENOPKG          = syscall.Errno(0x41)
	ENOPROTOOPT     = syscall.Errno(0x5c)
	ENOSR           = syscall.Errno(0x3f)
	ENOSTR          = syscall.Errno(0x3c)
	ENOSYS          = syscall.Errno(0x26)
	ENOTCONN        = syscall.Errno(0x6b)
	ENOTEMPTY       = syscall.Errno(0x27)
	ENOTNAM         = syscall.Errno(0x76)
	ENOTRECOVERABLE = syscall.Errno(0x83)
	ENOTSOCK        = syscall.Errno(0x58)
	ENOTSUP         = syscall.Errno(0x5f)
	ENOTUNIQ        = syscall.Errno(0x4c)
	EOPNOTSUPP      = syscall.Errno(0x5f)
	EOVERFLOW       = syscall.Errno(0x4b)
	EOWNERDEAD      = syscall.Errno(0x82)
	EPFNOSUPPORT    = syscall.Errno(0x60)
	EPROTO          = syscall.Errno(0x47)
	EPROTONOSUPPORT = syscall.Errno(0x5d)
	EPROTOTYPE      = syscall.Errno(0x5b)
	EREMCHG         = syscall.Errno(0x4e)
	EREMOTE         = syscall.Errno(0x42)
	EREMOTEIO       = syscall.Errno(0x79)
	ERESTART        = syscall.Errno(0x55)
	ERFKILL         = syscall.Errno(0x84)
	ESHUTDOWN       = syscall.Errno(0x6c)
	ESOCKTNOSUPPORT = syscall.Errno(0x5e)
	ESRMNT          = syscall.Errno(0x45)
	ESTALE          = syscall.Errno(0x74)
	ESTRPIPE        = syscall.Errno(0x56)
	ETIME           = syscall.Errno(0x3e)
	ETIMEDOUT       = syscall.Errno(0x6e)
	ETOOMANYREFS    = syscall.Errno(0x6d)
	EUCLEAN         = syscall.Errno(0x75)
	EUNATCH         = syscall.Errno(0x31)
	EUSERS          = syscall.Errno(0x57)
	EXFULL          = syscall.Errno(0x36)
)

// Signals
const (
	SIGBUS    = syscall.Signal(0x7)
	SIGCHLD   = syscall.Signal(0x11)
	SIGCLD    = syscall.Signal(0x11)
	SIGCONT   = syscall.Signal(0x12)
	SIGIO     = syscall.Signal(0x1d)
	SIGPOLL   = syscall.Signal(0x1d)
	SIGPROF   = syscall.Signal(0x1b)
	SIGPWR    = syscall.Signal(0x1e)
	SIGSTKFLT = syscall.Signal(0x10)
	SIGSTOP   = syscall.Signal(0x13)
	SIGSYS    = syscall.Signal(0x1f)
	SIGTSTP   = syscall.Signal(0x14)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x17)
	SIGUSR1   = syscall.Signal(0xa)
	SIGUSR2   = syscall.Signal(0xc)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "no such device or address"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EAGAIN", "resource temporarily unavailable"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device or resource busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "invalid cross-device link"},
	{19, "ENODEV", "no such device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "numerical result out of range"},
	{35, "EDEADLK", "resource deadlock avoided"},
	{36, "ENAMETOOLONG", "file name too long"},
	{37, "ENOLCK", "no locks available"},
	{38, "ENOSYS", "function not implemented"},
	{39, "ENOTEMPTY", "directory not empty"},
	{40, "ELOOP", "too many levels of symbolic links"},
	{42, "ENOMSG", "no message of desired type"},
	{43, "EIDRM", "identifier removed"},
	{44, "ECHRNG", "channel number out of range"},
	{45, "EL2NSYNC", "level 2 not synchronized"},
	{46, "EL3HLT", "level 3 halted"},
	{47, "EL3RST", "level 3 reset"},
	{48, "ELNRNG", "link number out of range"},
	{49, "EUNATCH", "protocol driver not attached"},
	{50, "ENOCSI", "no CSI structure available"},
	{51, "EL2HLT", "level 2 halted"},
	{52, "EBADE", "invalid exchange"},
	{53, "EBADR", "invalid request descriptor"},
	{54, "EXFULL", "exchange full"},
	{55, "ENOANO", "no anode"},
	{56, "EBADRQC", "invalid request code"},
	{57, "EBADSLT", "invalid slot"},
	{59, "EBFONT", "bad font file format"},
	{60, "ENOSTR", "device not a stream"},
	{61, "ENODATA", "no data available"},
	{62, "ETIME", "timer expired"},
	{63, "ENOSR", "out of streams resources"},
	{64, "ENONET", "machine is not on the network"},
	{65, "ENOPKG", "package not installed"},
	{66, "EREMOTE", "object is remote"},
	{67, "ENOLINK", "link has been severed"},
	{68, "EADV", "advertise error"},
	{69, "ESRMNT", "srmount error"},
	{70, "ECOMM", "communication error on send"},
	{71, "EPROTO", "protocol error"},
	{72, "EMULTIHOP", "multihop attempted"},
	{73, "EDOTDOT", "RFS specific error"},
	{74, "EBADMSG", "bad message"},
	{75, "EOVERFLOW", "value too large for defined data type"},
	{76, "ENOTUNIQ", "name not unique on network"},
	{77, "EBADFD", "file descriptor in bad state"},
	{78, "EREMCHG", "remote address changed"},
	{79, "ELIBACC", "can not access a needed shared library"},
	{80, "ELIBBAD", "accessing a corrupted shared library"},
	{81, "ELIBSCN", ".lib section in a.out corrupted"},
	{82, "ELIBMAX", "attempting to link in too many shared libraries"},
	{83, "ELIBEXEC", "cannot exec a shared library directly"},
	{84, "EILSEQ", "invalid or incomplete multibyte or wide character"},
	{85, "ERESTART", "interrupted system call should be restarted"},
	{86, "ESTRPIPE", "streams pipe error"},
	{87, "EUSERS", "too many users"},
	{88, "ENOTSOCK", "socket operation on non-socket"},
	{89, "EDESTADDRREQ", "destination address required"},
	{90, "EMSGSIZE", "message too long"},
	{91, "EPROTOTYPE", "protocol wrong type for socket"},
	{92, "ENOPROTOOPT", "protocol not available"},
	{93, "EPROTONOSUPPORT", "protocol not supported"},
	{94, "ESOCKTNOSUPPORT", "socket type not supported"},
	{95, "ENOTSUP", "operation not supported"},
	{96, "EPFNOSUPPORT", "protocol family not supported"},
	{97, "EAFNOSUPPORT", "address family not supported by protocol"},
	{98, "EADDRINUSE", "address already in use"},
	{99, "EADDRNOTAVAIL", "cannot assign requested address"},
	{100, "ENETDOWN", "network is down"},
	{101, "ENETUNREACH", "network is unreachable"},
	{102, "ENETRESET", "network dropped connection on reset"},
	{103, "ECONNABORTED", "software caused connection abort"},
	{104, "ECONNRESET", "connection reset by peer"},
	{105, "ENOBUFS", "no buffer space available"},
	{106, "EISCONN", "transport endpoint is already connected"},
	{107, "ENOTCONN", "transport endpoint is not connected"},
	{108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
	{109, "ETOOMANYREFS", "too many references: cannot splice"},
	{110, "ETIMEDOUT", "connection timed out"},
	{111, "ECONNREFUSED", "connection refused"},
	{112, "EHOSTDOWN", "host is down"},
	{113, "EHOSTUNREACH", "no route to host"},
	{114, "EALREADY", "operation already in progress"},
	{115, "EINPROGRESS", "operation now in progress"},
	{116, "ESTALE", "stale file handle"},
	{117, "EUCLEAN", "structure needs cleaning"},
	{118, "ENOTNAM", "not a XENIX named type file"},
	{119, "ENAVAIL", "no XENIX semaphores available"},
	{120, "EISNAM", "is a named type file"},
	{121, "EREMOTEIO", "remote I/O error"},
	{122, "EDQUOT", "disk quota exceeded"},
	{123, "ENOMEDIUM", "no medium found"},
	{124, "EMEDIUMTYPE", "wrong medium type"},
	{125, "ECANCELED", "operation canceled"},
	{126, "ENOKEY", "required key not available"},
	{127, "EKEYEXPIRED", "key has expired"},
	{128, "EKEYREVOKED", "key has been revoked"},
	{129, "EKEYREJECTED", "key was rejected by service"},
	{130, "EOWNERDEAD", "owner died"},
	{131, "ENOTRECOVERABLE", "state not recoverable"},
	{132, "ERFKILL", "operation not possible due to RF-kill"},
	{133, "EHWPOISON", "memory page has hardware error"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/breakpoint trap"},
	{6, "SIGABRT", "aborted"},
	{7, "SIGBUS", "bus error"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGUSR1", "user defined signal 1"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGUSR2", "user defined signal 2"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGSTKFLT", "stack fault"},
	{17, "SIGCHLD", "child exited"},
	{18, "SIGCONT", "continued"},
	{19, "SIGSTOP", "stopped (signal)"},
	{20, "SIGTSTP", "stopped"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGURG", "urgent I/O condition"},
	{24, "SIGXCPU", "CPU time limit exceeded"},
	{25, "SIGXFSZ", "file size limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window changed"},
	{29, "SIGIO", "I/O possible"},
	{30, "SIGPWR", "power failure"},
	{31, "SIGSYS", "bad system call"},
}
  07070100000E2F000081A4000000000000000000000001645E367C0000849F000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go // mkerrors.sh -Wall -Werror -static -I/tmp/loong64/include
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build loong64 && linux
// +build loong64,linux

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -Wall -Werror -static -I/tmp/loong64/include _const.go

package unix

import "syscall"

const (
	B1000000                         = 0x1008
	B115200                          = 0x1002
	B1152000                         = 0x1009
	B1500000                         = 0x100a
	B2000000                         = 0x100b
	B230400                          = 0x1003
	B2500000                         = 0x100c
	B3000000                         = 0x100d
	B3500000                         = 0x100e
	B4000000                         = 0x100f
	B460800                          = 0x1004
	B500000                          = 0x1005
	B57600                           = 0x1001
	B576000                          = 0x1006
	B921600                          = 0x1007
	BLKBSZGET                        = 0x80081270
	BLKBSZSET                        = 0x40081271
	BLKFLSBUF                        = 0x1261
	BLKFRAGET                        = 0x1265
	BLKFRASET                        = 0x1264
	BLKGETSIZE                       = 0x1260
	BLKGETSIZE64                     = 0x80081272
	BLKPBSZGET                       = 0x127b
	BLKRAGET                         = 0x1263
	BLKRASET                         = 0x1262
	BLKROGET                         = 0x125e
	BLKROSET                         = 0x125d
	BLKRRPART                        = 0x125f
	BLKSECTGET                       = 0x1267
	BLKSECTSET                       = 0x1266
	BLKSSZGET                        = 0x1268
	BOTHER                           = 0x1000
	BS1                              = 0x2000
	BSDLY                            = 0x2000
	CBAUD                            = 0x100f
	CBAUDEX                          = 0x1000
	CIBAUD                           = 0x100f0000
	CLOCAL                           = 0x800
	CR1                              = 0x200
	CR2                              = 0x400
	CR3                              = 0x600
	CRDLY                            = 0x600
	CREAD                            = 0x80
	CS6                              = 0x10
	CS7                              = 0x20
	CS8                              = 0x30
	CSIZE                            = 0x30
	CSTOPB                           = 0x40
	ECCGETLAYOUT                     = 0x81484d11
	ECCGETSTATS                      = 0x80104d12
	ECHOCTL                          = 0x200
	ECHOE                            = 0x10
	ECHOK                            = 0x20
	ECHOKE                           = 0x800
	ECHONL                           = 0x40
	ECHOPRT                          = 0x400
	EFD_CLOEXEC                      = 0x80000
	EFD_NONBLOCK                     = 0x800
	EPOLL_CLOEXEC                    = 0x80000
	EXTPROC                          = 0x10000
	FF1                              = 0x8000
	FFDLY                            = 0x8000
	FICLONE                          = 0x40049409
	FICLONERANGE                     = 0x4020940d
	FLUSHO                           = 0x1000
	FPU_CTX_MAGIC                    = 0x46505501
	FS_IOC_ENABLE_VERITY             = 0x40806685
	FS_IOC_GETFLAGS                  = 0x80086601
	FS_IOC_GET_ENCRYPTION_NONCE      = 0x8010661b
	FS_IOC_GET_ENCRYPTION_POLICY     = 0x400c6615
	FS_IOC_GET_ENCRYPTION_PWSALT     = 0x40106614
	FS_IOC_SETFLAGS                  = 0x40086602
	FS_IOC_SET_ENCRYPTION_POLICY     = 0x800c6613
	F_GETLK                          = 0x5
	F_GETLK64                        = 0x5
	F_GETOWN                         = 0x9
	F_RDLCK                          = 0x0
	F_SETLK                          = 0x6
	F_SETLK64                        = 0x6
	F_SETLKW                         = 0x7
	F_SETLKW64                       = 0x7
	F_SETOWN                         = 0x8
	F_UNLCK                          = 0x2
	F_WRLCK                          = 0x1
	HIDIOCGRAWINFO                   = 0x80084803
	HIDIOCGRDESC                     = 0x90044802
	HIDIOCGRDESCSIZE                 = 0x80044801
	HUPCL                            = 0x400
	ICANON                           = 0x2
	IEXTEN                           = 0x8000
	IN_CLOEXEC                       = 0x80000
	IN_NONBLOCK                      = 0x800
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9
	ISIG                             = 0x1
	IUCLC                            = 0x200
	IXOFF                            = 0x1000
	IXON                             = 0x400
	MAP_ANON                         = 0x20
	MAP_ANONYMOUS                    = 0x20
	MAP_DENYWRITE                    = 0x800
	MAP_EXECUTABLE                   = 0x1000
	MAP_GROWSDOWN                    = 0x100
	MAP_HUGETLB                      = 0x40000
	MAP_LOCKED                       = 0x2000
	MAP_NONBLOCK                     = 0x10000
	MAP_NORESERVE                    = 0x4000
	MAP_POPULATE                     = 0x8000
	MAP_STACK                        = 0x20000
	MAP_SYNC                         = 0x80000
	MCL_CURRENT                      = 0x1
	MCL_FUTURE                       = 0x2
	MCL_ONFAULT                      = 0x4
	MEMERASE                         = 0x40084d02
	MEMERASE64                       = 0x40104d14
	MEMGETBADBLOCK                   = 0x40084d0b
	MEMGETINFO                       = 0x80204d01
	MEMGETOOBSEL                     = 0x80c84d0a
	MEMGETREGIONCOUNT                = 0x80044d07
	MEMISLOCKED                      = 0x80084d17
	MEMLOCK                          = 0x40084d05
	MEMREAD                          = 0xc0404d1a
	MEMREADOOB                       = 0xc0104d04
	MEMSETBADBLOCK                   = 0x40084d0c
	MEMUNLOCK                        = 0x40084d06
	MEMWRITEOOB                      = 0xc0104d03
	MTDFILEMODE                      = 0x4d13
	NFDBITS                          = 0x40
	NLDLY                            = 0x100
	NOFLSH                           = 0x80
	NS_GET_NSTYPE                    = 0xb703
	NS_GET_OWNER_UID                 = 0xb704
	NS_GET_PARENT                    = 0xb702
	NS_GET_USERNS                    = 0xb701
	OLCUC                            = 0x2
	ONLCR                            = 0x4
	OTPERASE                         = 0x400c4d19
	OTPGETREGIONCOUNT                = 0x40044d0e
	OTPGETREGIONINFO                 = 0x400c4d0f
	OTPLOCK                          = 0x800c4d10
	OTPSELECT                        = 0x80044d0d
	O_APPEND                         = 0x400
	O_ASYNC                          = 0x2000
	O_CLOEXEC                        = 0x80000
	O_CREAT                          = 0x40
	O_DIRECT                         = 0x4000
	O_DIRECTORY                      = 0x10000
	O_DSYNC                          = 0x1000
	O_EXCL                           = 0x80
	O_FSYNC                          = 0x101000
	O_LARGEFILE                      = 0x0
	O_NDELAY                         = 0x800
	O_NOATIME                        = 0x40000
	O_NOCTTY                         = 0x100
	O_NOFOLLOW                       = 0x20000
	O_NONBLOCK                       = 0x800
	O_PATH                           = 0x200000
	O_RSYNC                          = 0x101000
	O_SYNC                           = 0x101000
	O_TMPFILE                        = 0x410000
	O_TRUNC                          = 0x200
	PARENB                           = 0x100
	PARODD                           = 0x200
	PENDIN                           = 0x4000
	PERF_EVENT_IOC_DISABLE           = 0x2401
	PERF_EVENT_IOC_ENABLE            = 0x2400
	PERF_EVENT_IOC_ID                = 0x80082407
	PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b
	PERF_EVENT_IOC_PAUSE_OUTPUT      = 0x40042409
	PERF_EVENT_IOC_PERIOD            = 0x40082404
	PERF_EVENT_IOC_QUERY_BPF         = 0xc008240a
	PERF_EVENT_IOC_REFRESH           = 0x2402
	PERF_EVENT_IOC_RESET             = 0x2403
	PERF_EVENT_IOC_SET_BPF           = 0x40042408
	PERF_EVENT_IOC_SET_FILTER        = 0x40082406
	PERF_EVENT_IOC_SET_OUTPUT        = 0x2405
	PPPIOCATTACH                     = 0x4004743d
	PPPIOCATTCHAN                    = 0x40047438
	PPPIOCBRIDGECHAN                 = 0x40047435
	PPPIOCCONNECT                    = 0x4004743a
	PPPIOCDETACH                     = 0x4004743c
	PPPIOCDISCONN                    = 0x7439
	PPPIOCGASYNCMAP                  = 0x80047458
	PPPIOCGCHAN                      = 0x80047437
	PPPIOCGDEBUG                     = 0x80047441
	PPPIOCGFLAGS                     = 0x8004745a
	PPPIOCGIDLE                      = 0x8010743f
	PPPIOCGIDLE32                    = 0x8008743f
	PPPIOCGIDLE64                    = 0x8010743f
	PPPIOCGL2TPSTATS                 = 0x80487436
	PPPIOCGMRU                       = 0x80047453
	PPPIOCGRASYNCMAP                 = 0x80047455
	PPPIOCGUNIT                      = 0x80047456
	PPPIOCGXASYNCMAP                 = 0x80207450
	PPPIOCSACTIVE                    = 0x40107446
	PPPIOCSASYNCMAP                  = 0x40047457
	PPPIOCSCOMPRESS                  = 0x4010744d
	PPPIOCSDEBUG                     = 0x40047440
	PPPIOCSFLAGS                     = 0x40047459
	PPPIOCSMAXCID                    = 0x40047451
	PPPIOCSMRRU                      = 0x4004743b
	PPPIOCSMRU                       = 0x40047452
	PPPIOCSNPMODE                    = 0x4008744b
	PPPIOCSPASS                      = 0x40107447
	PPPIOCSRASYNCMAP                 = 0x40047454
	PPPIOCSXASYNCMAP                 = 0x4020744f
	PPPIOCUNBRIDGECHAN               = 0x7434
	PPPIOCXFERUNIT                   = 0x744e
	PR_SET_PTRACER_ANY               = 0xffffffffffffffff
	PTRACE_SYSEMU                    = 0x1f
	PTRACE_SYSEMU_SINGLESTEP         = 0x20
	RLIMIT_AS                        = 0x9
	RLIMIT_MEMLOCK                   = 0x8
	RLIMIT_NOFILE                    = 0x7
	RLIMIT_NPROC                     = 0x6
	RLIMIT_RSS                       = 0x5
	RNDADDENTROPY                    = 0x40085203
	RNDADDTOENTCNT                   = 0x40045201
	RNDCLEARPOOL                     = 0x5206
	RNDGETENTCNT                     = 0x80045200
	RNDGETPOOL                       = 0x80085202
	RNDRESEEDCRNG                    = 0x5207
	RNDZAPENTCNT                     = 0x5204
	RTC_AIE_OFF                      = 0x7002
	RTC_AIE_ON                       = 0x7001
	RTC_ALM_READ                     = 0x80247008
	RTC_ALM_SET                      = 0x40247007
	RTC_EPOCH_READ                   = 0x8008700d
	RTC_EPOCH_SET                    = 0x4008700e
	RTC_IRQP_READ                    = 0x8008700b
	RTC_IRQP_SET                     = 0x4008700c
	RTC_PARAM_GET                    = 0x40187013
	RTC_PARAM_SET                    = 0x40187014
	RTC_PIE_OFF                      = 0x7006
	RTC_PIE_ON                       = 0x7005
	RTC_PLL_GET                      = 0x80207011
	RTC_PLL_SET                      = 0x40207012
	RTC_RD_TIME                      = 0x80247009
	RTC_SET_TIME                     = 0x4024700a
	RTC_UIE_OFF                      = 0x7004
	RTC_UIE_ON                       = 0x7003
	RTC_VL_CLR                       = 0x7014
	RTC_VL_READ                      = 0x80047013
	RTC_WIE_OFF                      = 0x7010
	RTC_WIE_ON                       = 0x700f
	RTC_WKALM_RD                     = 0x80287010
	RTC_WKALM_SET                    = 0x4028700f
	SCM_TIMESTAMPING                 = 0x25
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
	SCM_TIMESTAMPNS                  = 0x23
	SCM_TXTIME                       = 0x3d
	SCM_WIFI_STATUS                  = 0x29
	SFD_CLOEXEC                      = 0x80000
	SFD_NONBLOCK                     = 0x800
	SIOCATMARK                       = 0x8905
	SIOCGPGRP                        = 0x8904
	SIOCGSTAMPNS_NEW                 = 0x80108907
	SIOCGSTAMP_NEW                   = 0x80108906
	SIOCINQ                          = 0x541b
	SIOCOUTQ                         = 0x5411
	SIOCSPGRP                        = 0x8902
	SOCK_CLOEXEC                     = 0x80000
	SOCK_DGRAM                       = 0x2
	SOCK_NONBLOCK                    = 0x800
	SOCK_STREAM                      = 0x1
	SOL_SOCKET                       = 0x1
	SO_ACCEPTCONN                    = 0x1e
	SO_ATTACH_BPF                    = 0x32
	SO_ATTACH_REUSEPORT_CBPF         = 0x33
	SO_ATTACH_REUSEPORT_EBPF         = 0x34
	SO_BINDTODEVICE                  = 0x19
	SO_BINDTOIFINDEX                 = 0x3e
	SO_BPF_EXTENSIONS                = 0x30
	SO_BROADCAST                     = 0x6
	SO_BSDCOMPAT                     = 0xe
	SO_BUF_LOCK                      = 0x48
	SO_BUSY_POLL                     = 0x2e
	SO_BUSY_POLL_BUDGET              = 0x46
	SO_CNX_ADVICE                    = 0x35
	SO_COOKIE                        = 0x39
	SO_DETACH_REUSEPORT_BPF          = 0x44
	SO_DOMAIN                        = 0x27
	SO_DONTROUTE                     = 0x5
	SO_ERROR                         = 0x4
	SO_INCOMING_CPU                  = 0x31
	SO_INCOMING_NAPI_ID              = 0x38
	SO_KEEPALIVE                     = 0x9
	SO_LINGER                        = 0xd
	SO_LOCK_FILTER                   = 0x2c
	SO_MARK                          = 0x24
	SO_MAX_PACING_RATE               = 0x2f
	SO_MEMINFO                       = 0x37
	SO_NETNS_COOKIE                  = 0x47
	SO_NOFCS                         = 0x2b
	SO_OOBINLINE                     = 0xa
	SO_PASSCRED                      = 0x10
	SO_PASSSEC                       = 0x22
	SO_PEEK_OFF                      = 0x2a
	SO_PEERCRED                      = 0x11
	SO_PEERGROUPS                    = 0x3b
	SO_PEERSEC                       = 0x1f
	SO_PREFER_BUSY_POLL              = 0x45
	SO_PROTOCOL                      = 0x26
	SO_RCVBUF                        = 0x8
	SO_RCVBUFFORCE                   = 0x21
	SO_RCVLOWAT                      = 0x12
	SO_RCVMARK                       = 0x4b
	SO_RCVTIMEO                      = 0x14
	SO_RCVTIMEO_NEW                  = 0x42
	SO_RCVTIMEO_OLD                  = 0x14
	SO_RESERVE_MEM                   = 0x49
	SO_REUSEADDR                     = 0x2
	SO_REUSEPORT                     = 0xf
	SO_RXQ_OVFL                      = 0x28
	SO_SECURITY_AUTHENTICATION       = 0x16
	SO_SECURITY_ENCRYPTION_NETWORK   = 0x18
	SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
	SO_SELECT_ERR_QUEUE              = 0x2d
	SO_SNDBUF                        = 0x7
	SO_SNDBUFFORCE                   = 0x20
	SO_SNDLOWAT                      = 0x13
	SO_SNDTIMEO                      = 0x15
	SO_SNDTIMEO_NEW                  = 0x43
	SO_SNDTIMEO_OLD                  = 0x15
	SO_TIMESTAMPING                  = 0x25
	SO_TIMESTAMPING_NEW              = 0x41
	SO_TIMESTAMPING_OLD              = 0x25
	SO_TIMESTAMPNS                   = 0x23
	SO_TIMESTAMPNS_NEW               = 0x40
	SO_TIMESTAMPNS_OLD               = 0x23
	SO_TIMESTAMP_NEW                 = 0x3f
	SO_TXREHASH                      = 0x4a
	SO_TXTIME                        = 0x3d
	SO_TYPE                          = 0x3
	SO_WIFI_STATUS                   = 0x29
	SO_ZEROCOPY                      = 0x3c
	TAB1                             = 0x800
	TAB2                             = 0x1000
	TAB3                             = 0x1800
	TABDLY                           = 0x1800
	TCFLSH                           = 0x540b
	TCGETA                           = 0x5405
	TCGETS                           = 0x5401
	TCGETS2                          = 0x802c542a
	TCGETX                           = 0x5432
	TCSAFLUSH                        = 0x2
	TCSBRK                           = 0x5409
	TCSBRKP                          = 0x5425
	TCSETA                           = 0x5406
	TCSETAF                          = 0x5408
	TCSETAW                          = 0x5407
	TCSETS                           = 0x5402
	TCSETS2                          = 0x402c542b
	TCSETSF                          = 0x5404
	TCSETSF2                         = 0x402c542d
	TCSETSW                          = 0x5403
	TCSETSW2                         = 0x402c542c
	TCSETX                           = 0x5433
	TCSETXF                          = 0x5434
	TCSETXW                          = 0x5435
	TCXONC                           = 0x540a
	TFD_CLOEXEC                      = 0x80000
	TFD_NONBLOCK                     = 0x800
	TIOCCBRK                         = 0x5428
	TIOCCONS                         = 0x541d
	TIOCEXCL                         = 0x540c
	TIOCGDEV                         = 0x80045432
	TIOCGETD                         = 0x5424
	TIOCGEXCL                        = 0x80045440
	TIOCGICOUNT                      = 0x545d
	TIOCGISO7816                     = 0x80285442
	TIOCGLCKTRMIOS                   = 0x5456
	TIOCGPGRP                        = 0x540f
	TIOCGPKT                         = 0x80045438
	TIOCGPTLCK                       = 0x80045439
	TIOCGPTN                         = 0x80045430
	TIOCGPTPEER                      = 0x5441
	TIOCGRS485                       = 0x542e
	TIOCGSERIAL                      = 0x541e
	TIOCGSID                         = 0x5429
	TIOCGSOFTCAR                     = 0x5419
	TIOCGWINSZ                       = 0x5413
	TIOCINQ                          = 0x541b
	TIOCLINUX                        = 0x541c
	TIOCMBIC                         = 0x5417
	TIOCMBIS                         = 0x5416
	TIOCMGET                         = 0x5415
	TIOCMIWAIT                       = 0x545c
	TIOCMSET                         = 0x5418
	TIOCM_CAR                        = 0x40
	TIOCM_CD                         = 0x40
	TIOCM_CTS                        = 0x20
	TIOCM_DSR                        = 0x100
	TIOCM_RI                         = 0x80
	TIOCM_RNG                        = 0x80
	TIOCM_SR                         = 0x10
	TIOCM_ST                         = 0x8
	TIOCNOTTY                        = 0x5422
	TIOCNXCL                         = 0x540d
	TIOCOUTQ                         = 0x5411
	TIOCPKT                          = 0x5420
	TIOCSBRK                         = 0x5427
	TIOCSCTTY                        = 0x540e
	TIOCSERCONFIG                    = 0x5453
	TIOCSERGETLSR                    = 0x5459
	TIOCSERGETMULTI                  = 0x545a
	TIOCSERGSTRUCT                   = 0x5458
	TIOCSERGWILD                     = 0x5454
	TIOCSERSETMULTI                  = 0x545b
	TIOCSERSWILD                     = 0x5455
	TIOCSER_TEMT                     = 0x1
	TIOCSETD                         = 0x5423
	TIOCSIG                          = 0x40045436
	TIOCSISO7816                     = 0xc0285443
	TIOCSLCKTRMIOS                   = 0x5457
	TIOCSPGRP                        = 0x5410
	TIOCSPTLCK                       = 0x40045431
	TIOCSRS485                       = 0x542f
	TIOCSSERIAL                      = 0x541f
	TIOCSSOFTCAR                     = 0x541a
	TIOCSTI                          = 0x5412
	TIOCSWINSZ                       = 0x5414
	TIOCVHANGUP                      = 0x5437
	TOSTOP                           = 0x100
	TUNATTACHFILTER                  = 0x401054d5
	TUNDETACHFILTER                  = 0x401054d6
	TUNGETDEVNETNS                   = 0x54e3
	TUNGETFEATURES                   = 0x800454cf
	TUNGETFILTER                     = 0x801054db
	TUNGETIFF                        = 0x800454d2
	TUNGETSNDBUF                     = 0x800454d3
	TUNGETVNETBE                     = 0x800454df
	TUNGETVNETHDRSZ                  = 0x800454d7
	TUNGETVNETLE                     = 0x800454dd
	TUNSETCARRIER                    = 0x400454e2
	TUNSETDEBUG                      = 0x400454c9
	TUNSETFILTEREBPF                 = 0x800454e1
	TUNSETGROUP                      = 0x400454ce
	TUNSETIFF                        = 0x400454ca
	TUNSETIFINDEX                    = 0x400454da
	TUNSETLINK                       = 0x400454cd
	TUNSETNOCSUM                     = 0x400454c8
	TUNSETOFFLOAD                    = 0x400454d0
	TUNSETOWNER                      = 0x400454cc
	TUNSETPERSIST                    = 0x400454cb
	TUNSETQUEUE                      = 0x400454d9
	TUNSETSNDBUF                     = 0x400454d4
	TUNSETSTEERINGEBPF               = 0x800454e0
	TUNSETTXFILTER                   = 0x400454d1
	TUNSETVNETBE                     = 0x400454de
	TUNSETVNETHDRSZ                  = 0x400454d8
	TUNSETVNETLE                     = 0x400454dc
	UBI_IOCATT                       = 0x40186f40
	UBI_IOCDET                       = 0x40046f41
	UBI_IOCEBCH                      = 0x40044f02
	UBI_IOCEBER                      = 0x40044f01
	UBI_IOCEBISMAP                   = 0x80044f05
	UBI_IOCEBMAP                     = 0x40084f03
	UBI_IOCEBUNMAP                   = 0x40044f04
	UBI_IOCMKVOL                     = 0x40986f00
	UBI_IOCRMVOL                     = 0x40046f01
	UBI_IOCRNVOL                     = 0x51106f03
	UBI_IOCRPEB                      = 0x40046f04
	UBI_IOCRSVOL                     = 0x400c6f02
	UBI_IOCSETVOLPROP                = 0x40104f06
	UBI_IOCSPEB                      = 0x40046f05
	UBI_IOCVOLCRBLK                  = 0x40804f07
	UBI_IOCVOLRMBLK                  = 0x4f08
	UBI_IOCVOLUP                     = 0x40084f00
	VDISCARD                         = 0xd
	VEOF                             = 0x4
	VEOL                             = 0xb
	VEOL2                            = 0x10
	VMIN                             = 0x6
	VREPRINT                         = 0xc
	VSTART                           = 0x8
	VSTOP                            = 0x9
	VSUSP                            = 0xa
	VSWTC                            = 0x7
	VT1                              = 0x4000
	VTDLY                            = 0x4000
	VTIME                            = 0x5
	VWERASE                          = 0xe
	WDIOC_GETBOOTSTATUS              = 0x80045702
	WDIOC_GETPRETIMEOUT              = 0x80045709
	WDIOC_GETSTATUS                  = 0x80045701
	WDIOC_GETSUPPORT                 = 0x80285700
	WDIOC_GETTEMP                    = 0x80045703
	WDIOC_GETTIMELEFT                = 0x8004570a
	WDIOC_GETTIMEOUT                 = 0x80045707
	WDIOC_KEEPALIVE                  = 0x80045705
	WDIOC_SETOPTIONS                 = 0x80045704
	WORDSIZE                         = 0x40
	XCASE                            = 0x4
	XTABS                            = 0x1800
	_HIDIOCGRAWNAME                  = 0x80804804
	_HIDIOCGRAWPHYS                  = 0x80404805
	_HIDIOCGRAWUNIQ                  = 0x80404808
)

// Errors
const (
	EADDRINUSE      = syscall.Errno(0x62)
	EADDRNOTAVAIL   = syscall.Errno(0x63)
	EADV            = syscall.Errno(0x44)
	EAFNOSUPPORT    = syscall.Errno(0x61)
	EALREADY        = syscall.Errno(0x72)
	EBADE           = syscall.Errno(0x34)
	EBADFD          = syscall.Errno(0x4d)
	EBADMSG         = syscall.Errno(0x4a)
	EBADR           = syscall.Errno(0x35)
	EBADRQC         = syscall.Errno(0x38)
	EBADSLT         = syscall.Errno(0x39)
	EBFONT          = syscall.Errno(0x3b)
	ECANCELED       = syscall.Errno(0x7d)
	ECHRNG          = syscall.Errno(0x2c)
	ECOMM           = syscall.Errno(0x46)
	ECONNABORTED    = syscall.Errno(0x67)
	ECONNREFUSED    = syscall.Errno(0x6f)
	ECONNRESET      = syscall.Errno(0x68)
	EDEADLK         = syscall.Errno(0x23)
	EDEADLOCK       = syscall.Errno(0x23)
	EDESTADDRREQ    = syscall.Errno(0x59)
	EDOTDOT         = syscall.Errno(0x49)
	EDQUOT          = syscall.Errno(0x7a)
	EHOSTDOWN       = syscall.Errno(0x70)
	EHOSTUNREACH    = syscall.Errno(0x71)
	EHWPOISON       = syscall.Errno(0x85)
	EIDRM           = syscall.Errno(0x2b)
	EILSEQ          = syscall.Errno(0x54)
	EINPROGRESS     = syscall.Errno(0x73)
	EISCONN         = syscall.Errno(0x6a)
	EISNAM          = syscall.Errno(0x78)
	EKEYEXPIRED     = syscall.Errno(0x7f)
	EKEYREJECTED    = syscall.Errno(0x81)
	EKEYREVOKED     = syscall.Errno(0x80)
	EL2HLT          = syscall.Errno(0x33)
	EL2NSYNC        = syscall.Errno(0x2d)
	EL3HLT          = syscall.Errno(0x2e)
	EL3RST          = syscall.Errno(0x2f)
	ELIBACC         = syscall.Errno(0x4f)
	ELIBBAD         = syscall.Errno(0x50)
	ELIBEXEC        = syscall.Errno(0x53)
	ELIBMAX         = syscall.Errno(0x52)
	ELIBSCN         = syscall.Errno(0x51)
	ELNRNG          = syscall.Errno(0x30)
	ELOOP           = syscall.Errno(0x28)
	EMEDIUMTYPE     = syscall.Errno(0x7c)
	EMSGSIZE        = syscall.Errno(0x5a)
	EMULTIHOP       = syscall.Errno(0x48)
	ENAMETOOLONG    = syscall.Errno(0x24)
	ENAVAIL         = syscall.Errno(0x77)
	ENETDOWN        = syscall.Errno(0x64)
	ENETRESET       = syscall.Errno(0x66)
	ENETUNREACH     = syscall.Errno(0x65)
	ENOANO          = syscall.Errno(0x37)
	ENOBUFS         = syscall.Errno(0x69)
	ENOCSI          = syscall.Errno(0x32)
	ENODATA         = syscall.Errno(0x3d)
	ENOKEY          = syscall.Errno(0x7e)
	ENOLCK          = syscall.Errno(0x25)
	ENOLINK         = syscall.Errno(0x43)
	ENOMEDIUM       = syscall.Errno(0x7b)
	ENOMSG          = syscall.Errno(0x2a)
	ENONET          = syscall.Errno(0x40)
	ENOPKG          = syscall.Errno(0x41)
	ENOPROTOOPT     = syscall.Errno(0x5c)
	ENOSR           = syscall.Errno(0x3f)
	ENOSTR          = syscall.Errno(0x3c)
	ENOSYS          = syscall.Errno(0x26)
	ENOTCONN        = syscall.Errno(0x6b)
	ENOTEMPTY       = syscall.Errno(0x27)
	ENOTNAM         = syscall.Errno(0x76)
	ENOTRECOVERABLE = syscall.Errno(0x83)
	ENOTSOCK        = syscall.Errno(0x58)
	ENOTSUP         = syscall.Errno(0x5f)
	ENOTUNIQ        = syscall.Errno(0x4c)
	EOPNOTSUPP      = syscall.Errno(0x5f)
	EOVERFLOW       = syscall.Errno(0x4b)
	EOWNERDEAD      = syscall.Errno(0x82)
	EPFNOSUPPORT    = syscall.Errno(0x60)
	EPROTO          = syscall.Errno(0x47)
	EPROTONOSUPPORT = syscall.Errno(0x5d)
	EPROTOTYPE      = syscall.Errno(0x5b)
	EREMCHG         = syscall.Errno(0x4e)
	EREMOTE         = syscall.Errno(0x42)
	EREMOTEIO       = syscall.Errno(0x79)
	ERESTART        = syscall.Errno(0x55)
	ERFKILL         = syscall.Errno(0x84)
	ESHUTDOWN       = syscall.Errno(0x6c)
	ESOCKTNOSUPPORT = syscall.Errno(0x5e)
	ESRMNT          = syscall.Errno(0x45)
	ESTALE          = syscall.Errno(0x74)
	ESTRPIPE        = syscall.Errno(0x56)
	ETIME           = syscall.Errno(0x3e)
	ETIMEDOUT       = syscall.Errno(0x6e)
	ETOOMANYREFS    = syscall.Errno(0x6d)
	EUCLEAN         = syscall.Errno(0x75)
	EUNATCH         = syscall.Errno(0x31)
	EUSERS          = syscall.Errno(0x57)
	EXFULL          = syscall.Errno(0x36)
)

// Signals
const (
	SIGBUS    = syscall.Signal(0x7)
	SIGCHLD   = syscall.Signal(0x11)
	SIGCLD    = syscall.Signal(0x11)
	SIGCONT   = syscall.Signal(0x12)
	SIGIO     = syscall.Signal(0x1d)
	SIGPOLL   = syscall.Signal(0x1d)
	SIGPROF   = syscall.Signal(0x1b)
	SIGPWR    = syscall.Signal(0x1e)
	SIGSTKFLT = syscall.Signal(0x10)
	SIGSTOP   = syscall.Signal(0x13)
	SIGSYS    = syscall.Signal(0x1f)
	SIGTSTP   = syscall.Signal(0x14)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x17)
	SIGUSR1   = syscall.Signal(0xa)
	SIGUSR2   = syscall.Signal(0xc)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "no such device or address"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EAGAIN", "resource temporarily unavailable"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device or resource busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "invalid cross-device link"},
	{19, "ENODEV", "no such device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "numerical result out of range"},
	{35, "EDEADLK", "resource deadlock avoided"},
	{36, "ENAMETOOLONG", "file name too long"},
	{37, "ENOLCK", "no locks available"},
	{38, "ENOSYS", "function not implemented"},
	{39, "ENOTEMPTY", "directory not empty"},
	{40, "ELOOP", "too many levels of symbolic links"},
	{42, "ENOMSG", "no message of desired type"},
	{43, "EIDRM", "identifier removed"},
	{44, "ECHRNG", "channel number out of range"},
	{45, "EL2NSYNC", "level 2 not synchronized"},
	{46, "EL3HLT", "level 3 halted"},
	{47, "EL3RST", "level 3 reset"},
	{48, "ELNRNG", "link number out of range"},
	{49, "EUNATCH", "protocol driver not attached"},
	{50, "ENOCSI", "no CSI structure available"},
	{51, "EL2HLT", "level 2 halted"},
	{52, "EBADE", "invalid exchange"},
	{53, "EBADR", "invalid request descriptor"},
	{54, "EXFULL", "exchange full"},
	{55, "ENOANO", "no anode"},
	{56, "EBADRQC", "invalid request code"},
	{57, "EBADSLT", "invalid slot"},
	{59, "EBFONT", "bad font file format"},
	{60, "ENOSTR", "device not a stream"},
	{61, "ENODATA", "no data available"},
	{62, "ETIME", "timer expired"},
	{63, "ENOSR", "out of streams resources"},
	{64, "ENONET", "machine is not on the network"},
	{65, "ENOPKG", "package not installed"},
	{66, "EREMOTE", "object is remote"},
	{67, "ENOLINK", "link has been severed"},
	{68, "EADV", "advertise error"},
	{69, "ESRMNT", "srmount error"},
	{70, "ECOMM", "communication error on send"},
	{71, "EPROTO", "protocol error"},
	{72, "EMULTIHOP", "multihop attempted"},
	{73, "EDOTDOT", "RFS specific error"},
	{74, "EBADMSG", "bad message"},
	{75, "EOVERFLOW", "value too large for defined data type"},
	{76, "ENOTUNIQ", "name not unique on network"},
	{77, "EBADFD", "file descriptor in bad state"},
	{78, "EREMCHG", "remote address changed"},
	{79, "ELIBACC", "can not access a needed shared library"},
	{80, "ELIBBAD", "accessing a corrupted shared library"},
	{81, "ELIBSCN", ".lib section in a.out corrupted"},
	{82, "ELIBMAX", "attempting to link in too many shared libraries"},
	{83, "ELIBEXEC", "cannot exec a shared library directly"},
	{84, "EILSEQ", "invalid or incomplete multibyte or wide character"},
	{85, "ERESTART", "interrupted system call should be restarted"},
	{86, "ESTRPIPE", "streams pipe error"},
	{87, "EUSERS", "too many users"},
	{88, "ENOTSOCK", "socket operation on non-socket"},
	{89, "EDESTADDRREQ", "destination address required"},
	{90, "EMSGSIZE", "message too long"},
	{91, "EPROTOTYPE", "protocol wrong type for socket"},
	{92, "ENOPROTOOPT", "protocol not available"},
	{93, "EPROTONOSUPPORT", "protocol not supported"},
	{94, "ESOCKTNOSUPPORT", "socket type not supported"},
	{95, "ENOTSUP", "operation not supported"},
	{96, "EPFNOSUPPORT", "protocol family not supported"},
	{97, "EAFNOSUPPORT", "address family not supported by protocol"},
	{98, "EADDRINUSE", "address already in use"},
	{99, "EADDRNOTAVAIL", "cannot assign requested address"},
	{100, "ENETDOWN", "network is down"},
	{101, "ENETUNREACH", "network is unreachable"},
	{102, "ENETRESET", "network dropped connection on reset"},
	{103, "ECONNABORTED", "software caused connection abort"},
	{104, "ECONNRESET", "connection reset by peer"},
	{105, "ENOBUFS", "no buffer space available"},
	{106, "EISCONN", "transport endpoint is already connected"},
	{107, "ENOTCONN", "transport endpoint is not connected"},
	{108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
	{109, "ETOOMANYREFS", "too many references: cannot splice"},
	{110, "ETIMEDOUT", "connection timed out"},
	{111, "ECONNREFUSED", "connection refused"},
	{112, "EHOSTDOWN", "host is down"},
	{113, "EHOSTUNREACH", "no route to host"},
	{114, "EALREADY", "operation already in progress"},
	{115, "EINPROGRESS", "operation now in progress"},
	{116, "ESTALE", "stale file handle"},
	{117, "EUCLEAN", "structure needs cleaning"},
	{118, "ENOTNAM", "not a XENIX named type file"},
	{119, "ENAVAIL", "no XENIX semaphores available"},
	{120, "EISNAM", "is a named type file"},
	{121, "EREMOTEIO", "remote I/O error"},
	{122, "EDQUOT", "disk quota exceeded"},
	{123, "ENOMEDIUM", "no medium found"},
	{124, "EMEDIUMTYPE", "wrong medium type"},
	{125, "ECANCELED", "operation canceled"},
	{126, "ENOKEY", "required key not available"},
	{127, "EKEYEXPIRED", "key has expired"},
	{128, "EKEYREVOKED", "key has been revoked"},
	{129, "EKEYREJECTED", "key was rejected by service"},
	{130, "EOWNERDEAD", "owner died"},
	{131, "ENOTRECOVERABLE", "state not recoverable"},
	{132, "ERFKILL", "operation not possible due to RF-kill"},
	{133, "EHWPOISON", "memory page has hardware error"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/breakpoint trap"},
	{6, "SIGABRT", "aborted"},
	{7, "SIGBUS", "bus error"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGUSR1", "user defined signal 1"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGUSR2", "user defined signal 2"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGSTKFLT", "stack fault"},
	{17, "SIGCHLD", "child exited"},
	{18, "SIGCONT", "continued"},
	{19, "SIGSTOP", "stopped (signal)"},
	{20, "SIGTSTP", "stopped"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGURG", "urgent I/O condition"},
	{24, "SIGXCPU", "CPU time limit exceeded"},
	{25, "SIGXFSZ", "file size limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window changed"},
	{29, "SIGIO", "I/O possible"},
	{30, "SIGPWR", "power failure"},
	{31, "SIGSYS", "bad system call"},
}
 07070100000E30000081A4000000000000000000000001645E367C00008844000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go    // mkerrors.sh -Wall -Werror -static -I/tmp/mips/include
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build mips && linux
// +build mips,linux

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -Wall -Werror -static -I/tmp/mips/include _const.go

package unix

import "syscall"

const (
	B1000000                         = 0x1008
	B115200                          = 0x1002
	B1152000                         = 0x1009
	B1500000                         = 0x100a
	B2000000                         = 0x100b
	B230400                          = 0x1003
	B2500000                         = 0x100c
	B3000000                         = 0x100d
	B3500000                         = 0x100e
	B4000000                         = 0x100f
	B460800                          = 0x1004
	B500000                          = 0x1005
	B57600                           = 0x1001
	B576000                          = 0x1006
	B921600                          = 0x1007
	BLKBSZGET                        = 0x40041270
	BLKBSZSET                        = 0x80041271
	BLKFLSBUF                        = 0x20001261
	BLKFRAGET                        = 0x20001265
	BLKFRASET                        = 0x20001264
	BLKGETSIZE                       = 0x20001260
	BLKGETSIZE64                     = 0x40041272
	BLKPBSZGET                       = 0x2000127b
	BLKRAGET                         = 0x20001263
	BLKRASET                         = 0x20001262
	BLKROGET                         = 0x2000125e
	BLKROSET                         = 0x2000125d
	BLKRRPART                        = 0x2000125f
	BLKSECTGET                       = 0x20001267
	BLKSECTSET                       = 0x20001266
	BLKSSZGET                        = 0x20001268
	BOTHER                           = 0x1000
	BS1                              = 0x2000
	BSDLY                            = 0x2000
	CBAUD                            = 0x100f
	CBAUDEX                          = 0x1000
	CIBAUD                           = 0x100f0000
	CLOCAL                           = 0x800
	CR1                              = 0x200
	CR2                              = 0x400
	CR3                              = 0x600
	CRDLY                            = 0x600
	CREAD                            = 0x80
	CS6                              = 0x10
	CS7                              = 0x20
	CS8                              = 0x30
	CSIZE                            = 0x30
	CSTOPB                           = 0x40
	ECCGETLAYOUT                     = 0x41484d11
	ECCGETSTATS                      = 0x40104d12
	ECHOCTL                          = 0x200
	ECHOE                            = 0x10
	ECHOK                            = 0x20
	ECHOKE                           = 0x800
	ECHONL                           = 0x40
	ECHOPRT                          = 0x400
	EFD_CLOEXEC                      = 0x80000
	EFD_NONBLOCK                     = 0x80
	EPOLL_CLOEXEC                    = 0x80000
	EXTPROC                          = 0x10000
	FF1                              = 0x8000
	FFDLY                            = 0x8000
	FICLONE                          = 0x80049409
	FICLONERANGE                     = 0x8020940d
	FLUSHO                           = 0x2000
	FS_IOC_ENABLE_VERITY             = 0x80806685
	FS_IOC_GETFLAGS                  = 0x40046601
	FS_IOC_GET_ENCRYPTION_NONCE      = 0x4010661b
	FS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615
	FS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614
	FS_IOC_SETFLAGS                  = 0x80046602
	FS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613
	F_GETLK                          = 0x21
	F_GETLK64                        = 0x21
	F_GETOWN                         = 0x17
	F_RDLCK                          = 0x0
	F_SETLK                          = 0x22
	F_SETLK64                        = 0x22
	F_SETLKW                         = 0x23
	F_SETLKW64                       = 0x23
	F_SETOWN                         = 0x18
	F_UNLCK                          = 0x2
	F_WRLCK                          = 0x1
	HIDIOCGRAWINFO                   = 0x40084803
	HIDIOCGRDESC                     = 0x50044802
	HIDIOCGRDESCSIZE                 = 0x40044801
	HUPCL                            = 0x400
	ICANON                           = 0x2
	IEXTEN                           = 0x100
	IN_CLOEXEC                       = 0x80000
	IN_NONBLOCK                      = 0x80
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9
	ISIG                             = 0x1
	IUCLC                            = 0x200
	IXOFF                            = 0x1000
	IXON                             = 0x400
	MAP_ANON                         = 0x800
	MAP_ANONYMOUS                    = 0x800
	MAP_DENYWRITE                    = 0x2000
	MAP_EXECUTABLE                   = 0x4000
	MAP_GROWSDOWN                    = 0x1000
	MAP_HUGETLB                      = 0x80000
	MAP_LOCKED                       = 0x8000
	MAP_NONBLOCK                     = 0x20000
	MAP_NORESERVE                    = 0x400
	MAP_POPULATE                     = 0x10000
	MAP_RENAME                       = 0x800
	MAP_STACK                        = 0x40000
	MCL_CURRENT                      = 0x1
	MCL_FUTURE                       = 0x2
	MCL_ONFAULT                      = 0x4
	MEMERASE                         = 0x80084d02
	MEMERASE64                       = 0x80104d14
	MEMGETBADBLOCK                   = 0x80084d0b
	MEMGETINFO                       = 0x40204d01
	MEMGETOOBSEL                     = 0x40c84d0a
	MEMGETREGIONCOUNT                = 0x40044d07
	MEMISLOCKED                      = 0x40084d17
	MEMLOCK                          = 0x80084d05
	MEMREAD                          = 0xc0404d1a
	MEMREADOOB                       = 0xc00c4d04
	MEMSETBADBLOCK                   = 0x80084d0c
	MEMUNLOCK                        = 0x80084d06
	MEMWRITEOOB                      = 0xc00c4d03
	MTDFILEMODE                      = 0x20004d13
	NFDBITS                          = 0x20
	NLDLY                            = 0x100
	NOFLSH                           = 0x80
	NS_GET_NSTYPE                    = 0x2000b703
	NS_GET_OWNER_UID                 = 0x2000b704
	NS_GET_PARENT                    = 0x2000b702
	NS_GET_USERNS                    = 0x2000b701
	OLCUC                            = 0x2
	ONLCR                            = 0x4
	OTPERASE                         = 0x800c4d19
	OTPGETREGIONCOUNT                = 0x80044d0e
	OTPGETREGIONINFO                 = 0x800c4d0f
	OTPLOCK                          = 0x400c4d10
	OTPSELECT                        = 0x40044d0d
	O_APPEND                         = 0x8
	O_ASYNC                          = 0x1000
	O_CLOEXEC                        = 0x80000
	O_CREAT                          = 0x100
	O_DIRECT                         = 0x8000
	O_DIRECTORY                      = 0x10000
	O_DSYNC                          = 0x10
	O_EXCL                           = 0x400
	O_FSYNC                          = 0x4010
	O_LARGEFILE                      = 0x2000
	O_NDELAY                         = 0x80
	O_NOATIME                        = 0x40000
	O_NOCTTY                         = 0x800
	O_NOFOLLOW                       = 0x20000
	O_NONBLOCK                       = 0x80
	O_PATH                           = 0x200000
	O_RSYNC                          = 0x4010
	O_SYNC                           = 0x4010
	O_TMPFILE                        = 0x410000
	O_TRUNC                          = 0x200
	PARENB                           = 0x100
	PARODD                           = 0x200
	PENDIN                           = 0x4000
	PERF_EVENT_IOC_DISABLE           = 0x20002401
	PERF_EVENT_IOC_ENABLE            = 0x20002400
	PERF_EVENT_IOC_ID                = 0x40042407
	PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8004240b
	PERF_EVENT_IOC_PAUSE_OUTPUT      = 0x80042409
	PERF_EVENT_IOC_PERIOD            = 0x80082404
	PERF_EVENT_IOC_QUERY_BPF         = 0xc004240a
	PERF_EVENT_IOC_REFRESH           = 0x20002402
	PERF_EVENT_IOC_RESET             = 0x20002403
	PERF_EVENT_IOC_SET_BPF           = 0x80042408
	PERF_EVENT_IOC_SET_FILTER        = 0x80042406
	PERF_EVENT_IOC_SET_OUTPUT        = 0x20002405
	PPPIOCATTACH                     = 0x8004743d
	PPPIOCATTCHAN                    = 0x80047438
	PPPIOCBRIDGECHAN                 = 0x80047435
	PPPIOCCONNECT                    = 0x8004743a
	PPPIOCDETACH                     = 0x8004743c
	PPPIOCDISCONN                    = 0x20007439
	PPPIOCGASYNCMAP                  = 0x40047458
	PPPIOCGCHAN                      = 0x40047437
	PPPIOCGDEBUG                     = 0x40047441
	PPPIOCGFLAGS                     = 0x4004745a
	PPPIOCGIDLE                      = 0x4008743f
	PPPIOCGIDLE32                    = 0x4008743f
	PPPIOCGIDLE64                    = 0x4010743f
	PPPIOCGL2TPSTATS                 = 0x40487436
	PPPIOCGMRU                       = 0x40047453
	PPPIOCGRASYNCMAP                 = 0x40047455
	PPPIOCGUNIT                      = 0x40047456
	PPPIOCGXASYNCMAP                 = 0x40207450
	PPPIOCSACTIVE                    = 0x80087446
	PPPIOCSASYNCMAP                  = 0x80047457
	PPPIOCSCOMPRESS                  = 0x800c744d
	PPPIOCSDEBUG                     = 0x80047440
	PPPIOCSFLAGS                     = 0x80047459
	PPPIOCSMAXCID                    = 0x80047451
	PPPIOCSMRRU                      = 0x8004743b
	PPPIOCSMRU                       = 0x80047452
	PPPIOCSNPMODE                    = 0x8008744b
	PPPIOCSPASS                      = 0x80087447
	PPPIOCSRASYNCMAP                 = 0x80047454
	PPPIOCSXASYNCMAP                 = 0x8020744f
	PPPIOCUNBRIDGECHAN               = 0x20007434
	PPPIOCXFERUNIT                   = 0x2000744e
	PR_SET_PTRACER_ANY               = 0xffffffff
	PTRACE_GETFPREGS                 = 0xe
	PTRACE_GET_THREAD_AREA           = 0x19
	PTRACE_GET_THREAD_AREA_3264      = 0xc4
	PTRACE_GET_WATCH_REGS            = 0xd0
	PTRACE_OLDSETOPTIONS             = 0x15
	PTRACE_PEEKDATA_3264             = 0xc1
	PTRACE_PEEKTEXT_3264             = 0xc0
	PTRACE_POKEDATA_3264             = 0xc3
	PTRACE_POKETEXT_3264             = 0xc2
	PTRACE_SETFPREGS                 = 0xf
	PTRACE_SET_THREAD_AREA           = 0x1a
	PTRACE_SET_WATCH_REGS            = 0xd1
	RLIMIT_AS                        = 0x6
	RLIMIT_MEMLOCK                   = 0x9
	RLIMIT_NOFILE                    = 0x5
	RLIMIT_NPROC                     = 0x8
	RLIMIT_RSS                       = 0x7
	RNDADDENTROPY                    = 0x80085203
	RNDADDTOENTCNT                   = 0x80045201
	RNDCLEARPOOL                     = 0x20005206
	RNDGETENTCNT                     = 0x40045200
	RNDGETPOOL                       = 0x40085202
	RNDRESEEDCRNG                    = 0x20005207
	RNDZAPENTCNT                     = 0x20005204
	RTC_AIE_OFF                      = 0x20007002
	RTC_AIE_ON                       = 0x20007001
	RTC_ALM_READ                     = 0x40247008
	RTC_ALM_SET                      = 0x80247007
	RTC_EPOCH_READ                   = 0x4004700d
	RTC_EPOCH_SET                    = 0x8004700e
	RTC_IRQP_READ                    = 0x4004700b
	RTC_IRQP_SET                     = 0x8004700c
	RTC_PARAM_GET                    = 0x80187013
	RTC_PARAM_SET                    = 0x80187014
	RTC_PIE_OFF                      = 0x20007006
	RTC_PIE_ON                       = 0x20007005
	RTC_PLL_GET                      = 0x401c7011
	RTC_PLL_SET                      = 0x801c7012
	RTC_RD_TIME                      = 0x40247009
	RTC_SET_TIME                     = 0x8024700a
	RTC_UIE_OFF                      = 0x20007004
	RTC_UIE_ON                       = 0x20007003
	RTC_VL_CLR                       = 0x20007014
	RTC_VL_READ                      = 0x40047013
	RTC_WIE_OFF                      = 0x20007010
	RTC_WIE_ON                       = 0x2000700f
	RTC_WKALM_RD                     = 0x40287010
	RTC_WKALM_SET                    = 0x8028700f
	SCM_TIMESTAMPING                 = 0x25
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
	SCM_TIMESTAMPNS                  = 0x23
	SCM_TXTIME                       = 0x3d
	SCM_WIFI_STATUS                  = 0x29
	SFD_CLOEXEC                      = 0x80000
	SFD_NONBLOCK                     = 0x80
	SIOCATMARK                       = 0x40047307
	SIOCGPGRP                        = 0x40047309
	SIOCGSTAMPNS_NEW                 = 0x40108907
	SIOCGSTAMP_NEW                   = 0x40108906
	SIOCINQ                          = 0x467f
	SIOCOUTQ                         = 0x7472
	SIOCSPGRP                        = 0x80047308
	SOCK_CLOEXEC                     = 0x80000
	SOCK_DGRAM                       = 0x1
	SOCK_NONBLOCK                    = 0x80
	SOCK_STREAM                      = 0x2
	SOL_SOCKET                       = 0xffff
	SO_ACCEPTCONN                    = 0x1009
	SO_ATTACH_BPF                    = 0x32
	SO_ATTACH_REUSEPORT_CBPF         = 0x33
	SO_ATTACH_REUSEPORT_EBPF         = 0x34
	SO_BINDTODEVICE                  = 0x19
	SO_BINDTOIFINDEX                 = 0x3e
	SO_BPF_EXTENSIONS                = 0x30
	SO_BROADCAST                     = 0x20
	SO_BSDCOMPAT                     = 0xe
	SO_BUF_LOCK                      = 0x48
	SO_BUSY_POLL                     = 0x2e
	SO_BUSY_POLL_BUDGET              = 0x46
	SO_CNX_ADVICE                    = 0x35
	SO_COOKIE                        = 0x39
	SO_DETACH_REUSEPORT_BPF          = 0x44
	SO_DOMAIN                        = 0x1029
	SO_DONTROUTE                     = 0x10
	SO_ERROR                         = 0x1007
	SO_INCOMING_CPU                  = 0x31
	SO_INCOMING_NAPI_ID              = 0x38
	SO_KEEPALIVE                     = 0x8
	SO_LINGER                        = 0x80
	SO_LOCK_FILTER                   = 0x2c
	SO_MARK                          = 0x24
	SO_MAX_PACING_RATE               = 0x2f
	SO_MEMINFO                       = 0x37
	SO_NETNS_COOKIE                  = 0x47
	SO_NOFCS                         = 0x2b
	SO_OOBINLINE                     = 0x100
	SO_PASSCRED                      = 0x11
	SO_PASSSEC                       = 0x22
	SO_PEEK_OFF                      = 0x2a
	SO_PEERCRED                      = 0x12
	SO_PEERGROUPS                    = 0x3b
	SO_PEERSEC                       = 0x1e
	SO_PREFER_BUSY_POLL              = 0x45
	SO_PROTOCOL                      = 0x1028
	SO_RCVBUF                        = 0x1002
	SO_RCVBUFFORCE                   = 0x21
	SO_RCVLOWAT                      = 0x1004
	SO_RCVMARK                       = 0x4b
	SO_RCVTIMEO                      = 0x1006
	SO_RCVTIMEO_NEW                  = 0x42
	SO_RCVTIMEO_OLD                  = 0x1006
	SO_RESERVE_MEM                   = 0x49
	SO_REUSEADDR                     = 0x4
	SO_REUSEPORT                     = 0x200
	SO_RXQ_OVFL                      = 0x28
	SO_SECURITY_AUTHENTICATION       = 0x16
	SO_SECURITY_ENCRYPTION_NETWORK   = 0x18
	SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
	SO_SELECT_ERR_QUEUE              = 0x2d
	SO_SNDBUF                        = 0x1001
	SO_SNDBUFFORCE                   = 0x1f
	SO_SNDLOWAT                      = 0x1003
	SO_SNDTIMEO                      = 0x1005
	SO_SNDTIMEO_NEW                  = 0x43
	SO_SNDTIMEO_OLD                  = 0x1005
	SO_STYLE                         = 0x1008
	SO_TIMESTAMPING                  = 0x25
	SO_TIMESTAMPING_NEW              = 0x41
	SO_TIMESTAMPING_OLD              = 0x25
	SO_TIMESTAMPNS                   = 0x23
	SO_TIMESTAMPNS_NEW               = 0x40
	SO_TIMESTAMPNS_OLD               = 0x23
	SO_TIMESTAMP_NEW                 = 0x3f
	SO_TXREHASH                      = 0x4a
	SO_TXTIME                        = 0x3d
	SO_TYPE                          = 0x1008
	SO_WIFI_STATUS                   = 0x29
	SO_ZEROCOPY                      = 0x3c
	TAB1                             = 0x800
	TAB2                             = 0x1000
	TAB3                             = 0x1800
	TABDLY                           = 0x1800
	TCFLSH                           = 0x5407
	TCGETA                           = 0x5401
	TCGETS                           = 0x540d
	TCGETS2                          = 0x4030542a
	TCSAFLUSH                        = 0x5410
	TCSBRK                           = 0x5405
	TCSBRKP                          = 0x5486
	TCSETA                           = 0x5402
	TCSETAF                          = 0x5404
	TCSETAW                          = 0x5403
	TCSETS                           = 0x540e
	TCSETS2                          = 0x8030542b
	TCSETSF                          = 0x5410
	TCSETSF2                         = 0x8030542d
	TCSETSW                          = 0x540f
	TCSETSW2                         = 0x8030542c
	TCXONC                           = 0x5406
	TFD_CLOEXEC                      = 0x80000
	TFD_NONBLOCK                     = 0x80
	TIOCCBRK                         = 0x5428
	TIOCCONS                         = 0x80047478
	TIOCEXCL                         = 0x740d
	TIOCGDEV                         = 0x40045432
	TIOCGETD                         = 0x7400
	TIOCGETP                         = 0x7408
	TIOCGEXCL                        = 0x40045440
	TIOCGICOUNT                      = 0x5492
	TIOCGISO7816                     = 0x40285442
	TIOCGLCKTRMIOS                   = 0x548b
	TIOCGLTC                         = 0x7474
	TIOCGPGRP                        = 0x40047477
	TIOCGPKT                         = 0x40045438
	TIOCGPTLCK                       = 0x40045439
	TIOCGPTN                         = 0x40045430
	TIOCGPTPEER                      = 0x20005441
	TIOCGRS485                       = 0x4020542e
	TIOCGSERIAL                      = 0x5484
	TIOCGSID                         = 0x7416
	TIOCGSOFTCAR                     = 0x5481
	TIOCGWINSZ                       = 0x40087468
	TIOCINQ                          = 0x467f
	TIOCLINUX                        = 0x5483
	TIOCMBIC                         = 0x741c
	TIOCMBIS                         = 0x741b
	TIOCMGET                         = 0x741d
	TIOCMIWAIT                       = 0x5491
	TIOCMSET                         = 0x741a
	TIOCM_CAR                        = 0x100
	TIOCM_CD                         = 0x100
	TIOCM_CTS                        = 0x40
	TIOCM_DSR                        = 0x400
	TIOCM_RI                         = 0x200
	TIOCM_RNG                        = 0x200
	TIOCM_SR                         = 0x20
	TIOCM_ST                         = 0x10
	TIOCNOTTY                        = 0x5471
	TIOCNXCL                         = 0x740e
	TIOCOUTQ                         = 0x7472
	TIOCPKT                          = 0x5470
	TIOCSBRK                         = 0x5427
	TIOCSCTTY                        = 0x5480
	TIOCSERCONFIG                    = 0x5488
	TIOCSERGETLSR                    = 0x548e
	TIOCSERGETMULTI                  = 0x548f
	TIOCSERGSTRUCT                   = 0x548d
	TIOCSERGWILD                     = 0x5489
	TIOCSERSETMULTI                  = 0x5490
	TIOCSERSWILD                     = 0x548a
	TIOCSER_TEMT                     = 0x1
	TIOCSETD                         = 0x7401
	TIOCSETN                         = 0x740a
	TIOCSETP                         = 0x7409
	TIOCSIG                          = 0x80045436
	TIOCSISO7816                     = 0xc0285443
	TIOCSLCKTRMIOS                   = 0x548c
	TIOCSLTC                         = 0x7475
	TIOCSPGRP                        = 0x80047476
	TIOCSPTLCK                       = 0x80045431
	TIOCSRS485                       = 0xc020542f
	TIOCSSERIAL                      = 0x5485
	TIOCSSOFTCAR                     = 0x5482
	TIOCSTI                          = 0x5472
	TIOCSWINSZ                       = 0x80087467
	TIOCVHANGUP                      = 0x5437
	TOSTOP                           = 0x8000
	TUNATTACHFILTER                  = 0x800854d5
	TUNDETACHFILTER                  = 0x800854d6
	TUNGETDEVNETNS                   = 0x200054e3
	TUNGETFEATURES                   = 0x400454cf
	TUNGETFILTER                     = 0x400854db
	TUNGETIFF                        = 0x400454d2
	TUNGETSNDBUF                     = 0x400454d3
	TUNGETVNETBE                     = 0x400454df
	TUNGETVNETHDRSZ                  = 0x400454d7
	TUNGETVNETLE                     = 0x400454dd
	TUNSETCARRIER                    = 0x800454e2
	TUNSETDEBUG                      = 0x800454c9
	TUNSETFILTEREBPF                 = 0x400454e1
	TUNSETGROUP                      = 0x800454ce
	TUNSETIFF                        = 0x800454ca
	TUNSETIFINDEX                    = 0x800454da
	TUNSETLINK                       = 0x800454cd
	TUNSETNOCSUM                     = 0x800454c8
	TUNSETOFFLOAD                    = 0x800454d0
	TUNSETOWNER                      = 0x800454cc
	TUNSETPERSIST                    = 0x800454cb
	TUNSETQUEUE                      = 0x800454d9
	TUNSETSNDBUF                     = 0x800454d4
	TUNSETSTEERINGEBPF               = 0x400454e0
	TUNSETTXFILTER                   = 0x800454d1
	TUNSETVNETBE                     = 0x800454de
	TUNSETVNETHDRSZ                  = 0x800454d8
	TUNSETVNETLE                     = 0x800454dc
	UBI_IOCATT                       = 0x80186f40
	UBI_IOCDET                       = 0x80046f41
	UBI_IOCEBCH                      = 0x80044f02
	UBI_IOCEBER                      = 0x80044f01
	UBI_IOCEBISMAP                   = 0x40044f05
	UBI_IOCEBMAP                     = 0x80084f03
	UBI_IOCEBUNMAP                   = 0x80044f04
	UBI_IOCMKVOL                     = 0x80986f00
	UBI_IOCRMVOL                     = 0x80046f01
	UBI_IOCRNVOL                     = 0x91106f03
	UBI_IOCRPEB                      = 0x80046f04
	UBI_IOCRSVOL                     = 0x800c6f02
	UBI_IOCSETVOLPROP                = 0x80104f06
	UBI_IOCSPEB                      = 0x80046f05
	UBI_IOCVOLCRBLK                  = 0x80804f07
	UBI_IOCVOLRMBLK                  = 0x20004f08
	UBI_IOCVOLUP                     = 0x80084f00
	VDISCARD                         = 0xd
	VEOF                             = 0x10
	VEOL                             = 0x11
	VEOL2                            = 0x6
	VMIN                             = 0x4
	VREPRINT                         = 0xc
	VSTART                           = 0x8
	VSTOP                            = 0x9
	VSUSP                            = 0xa
	VSWTC                            = 0x7
	VSWTCH                           = 0x7
	VT1                              = 0x4000
	VTDLY                            = 0x4000
	VTIME                            = 0x5
	VWERASE                          = 0xe
	WDIOC_GETBOOTSTATUS              = 0x40045702
	WDIOC_GETPRETIMEOUT              = 0x40045709
	WDIOC_GETSTATUS                  = 0x40045701
	WDIOC_GETSUPPORT                 = 0x40285700
	WDIOC_GETTEMP                    = 0x40045703
	WDIOC_GETTIMELEFT                = 0x4004570a
	WDIOC_GETTIMEOUT                 = 0x40045707
	WDIOC_KEEPALIVE                  = 0x40045705
	WDIOC_SETOPTIONS                 = 0x40045704
	WORDSIZE                         = 0x20
	XCASE                            = 0x4
	XTABS                            = 0x1800
	_HIDIOCGRAWNAME                  = 0x40804804
	_HIDIOCGRAWPHYS                  = 0x40404805
	_HIDIOCGRAWUNIQ                  = 0x40404808
)

// Errors
const (
	EADDRINUSE      = syscall.Errno(0x7d)
	EADDRNOTAVAIL   = syscall.Errno(0x7e)
	EADV            = syscall.Errno(0x44)
	EAFNOSUPPORT    = syscall.Errno(0x7c)
	EALREADY        = syscall.Errno(0x95)
	EBADE           = syscall.Errno(0x32)
	EBADFD          = syscall.Errno(0x51)
	EBADMSG         = syscall.Errno(0x4d)
	EBADR           = syscall.Errno(0x33)
	EBADRQC         = syscall.Errno(0x36)
	EBADSLT         = syscall.Errno(0x37)
	EBFONT          = syscall.Errno(0x3b)
	ECANCELED       = syscall.Errno(0x9e)
	ECHRNG          = syscall.Errno(0x25)
	ECOMM           = syscall.Errno(0x46)
	ECONNABORTED    = syscall.Errno(0x82)
	ECONNREFUSED    = syscall.Errno(0x92)
	ECONNRESET      = syscall.Errno(0x83)
	EDEADLK         = syscall.Errno(0x2d)
	EDEADLOCK       = syscall.Errno(0x38)
	EDESTADDRREQ    = syscall.Errno(0x60)
	EDOTDOT         = syscall.Errno(0x49)
	EDQUOT          = syscall.Errno(0x46d)
	EHOSTDOWN       = syscall.Errno(0x93)
	EHOSTUNREACH    = syscall.Errno(0x94)
	EHWPOISON       = syscall.Errno(0xa8)
	EIDRM           = syscall.Errno(0x24)
	EILSEQ          = syscall.Errno(0x58)
	EINIT           = syscall.Errno(0x8d)
	EINPROGRESS     = syscall.Errno(0x96)
	EISCONN         = syscall.Errno(0x85)
	EISNAM          = syscall.Errno(0x8b)
	EKEYEXPIRED     = syscall.Errno(0xa2)
	EKEYREJECTED    = syscall.Errno(0xa4)
	EKEYREVOKED     = syscall.Errno(0xa3)
	EL2HLT          = syscall.Errno(0x2c)
	EL2NSYNC        = syscall.Errno(0x26)
	EL3HLT          = syscall.Errno(0x27)
	EL3RST          = syscall.Errno(0x28)
	ELIBACC         = syscall.Errno(0x53)
	ELIBBAD         = syscall.Errno(0x54)
	ELIBEXEC        = syscall.Errno(0x57)
	ELIBMAX         = syscall.Errno(0x56)
	ELIBSCN         = syscall.Errno(0x55)
	ELNRNG          = syscall.Errno(0x29)
	ELOOP           = syscall.Errno(0x5a)
	EMEDIUMTYPE     = syscall.Errno(0xa0)
	EMSGSIZE        = syscall.Errno(0x61)
	EMULTIHOP       = syscall.Errno(0x4a)
	ENAMETOOLONG    = syscall.Errno(0x4e)
	ENAVAIL         = syscall.Errno(0x8a)
	ENETDOWN        = syscall.Errno(0x7f)
	ENETRESET       = syscall.Errno(0x81)
	ENETUNREACH     = syscall.Errno(0x80)
	ENOANO          = syscall.Errno(0x35)
	ENOBUFS         = syscall.Errno(0x84)
	ENOCSI          = syscall.Errno(0x2b)
	ENODATA         = syscall.Errno(0x3d)
	ENOKEY          = syscall.Errno(0xa1)
	ENOLCK          = syscall.Errno(0x2e)
	ENOLINK         = syscall.Errno(0x43)
	ENOMEDIUM       = syscall.Errno(0x9f)
	ENOMSG          = syscall.Errno(0x23)
	ENONET          = syscall.Errno(0x40)
	ENOPKG          = syscall.Errno(0x41)
	ENOPROTOOPT     = syscall.Errno(0x63)
	ENOSR           = syscall.Errno(0x3f)
	ENOSTR          = syscall.Errno(0x3c)
	ENOSYS          = syscall.Errno(0x59)
	ENOTCONN        = syscall.Errno(0x86)
	ENOTEMPTY       = syscall.Errno(0x5d)
	ENOTNAM         = syscall.Errno(0x89)
	ENOTRECOVERABLE = syscall.Errno(0xa6)
	ENOTSOCK        = syscall.Errno(0x5f)
	ENOTSUP         = syscall.Errno(0x7a)
	ENOTUNIQ        = syscall.Errno(0x50)
	EOPNOTSUPP      = syscall.Errno(0x7a)
	EOVERFLOW       = syscall.Errno(0x4f)
	EOWNERDEAD      = syscall.Errno(0xa5)
	EPFNOSUPPORT    = syscall.Errno(0x7b)
	EPROTO          = syscall.Errno(0x47)
	EPROTONOSUPPORT = syscall.Errno(0x78)
	EPROTOTYPE      = syscall.Errno(0x62)
	EREMCHG         = syscall.Errno(0x52)
	EREMDEV         = syscall.Errno(0x8e)
	EREMOTE         = syscall.Errno(0x42)
	EREMOTEIO       = syscall.Errno(0x8c)
	ERESTART        = syscall.Errno(0x5b)
	ERFKILL         = syscall.Errno(0xa7)
	ESHUTDOWN       = syscall.Errno(0x8f)
	ESOCKTNOSUPPORT = syscall.Errno(0x79)
	ESRMNT          = syscall.Errno(0x45)
	ESTALE          = syscall.Errno(0x97)
	ESTRPIPE        = syscall.Errno(0x5c)
	ETIME           = syscall.Errno(0x3e)
	ETIMEDOUT       = syscall.Errno(0x91)
	ETOOMANYREFS    = syscall.Errno(0x90)
	EUCLEAN         = syscall.Errno(0x87)
	EUNATCH         = syscall.Errno(0x2a)
	EUSERS          = syscall.Errno(0x5e)
	EXFULL          = syscall.Errno(0x34)
)

// Signals
const (
	SIGBUS    = syscall.Signal(0xa)
	SIGCHLD   = syscall.Signal(0x12)
	SIGCLD    = syscall.Signal(0x12)
	SIGCONT   = syscall.Signal(0x19)
	SIGEMT    = syscall.Signal(0x7)
	SIGIO     = syscall.Signal(0x16)
	SIGPOLL   = syscall.Signal(0x16)
	SIGPROF   = syscall.Signal(0x1d)
	SIGPWR    = syscall.Signal(0x13)
	SIGSTOP   = syscall.Signal(0x17)
	SIGSYS    = syscall.Signal(0xc)
	SIGTSTP   = syscall.Signal(0x18)
	SIGTTIN   = syscall.Signal(0x1a)
	SIGTTOU   = syscall.Signal(0x1b)
	SIGURG    = syscall.Signal(0x15)
	SIGUSR1   = syscall.Signal(0x10)
	SIGUSR2   = syscall.Signal(0x11)
	SIGVTALRM = syscall.Signal(0x1c)
	SIGWINCH  = syscall.Signal(0x14)
	SIGXCPU   = syscall.Signal(0x1e)
	SIGXFSZ   = syscall.Signal(0x1f)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "no such device or address"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EAGAIN", "resource temporarily unavailable"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device or resource busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "invalid cross-device link"},
	{19, "ENODEV", "no such device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "numerical result out of range"},
	{35, "ENOMSG", "no message of desired type"},
	{36, "EIDRM", "identifier removed"},
	{37, "ECHRNG", "channel number out of range"},
	{38, "EL2NSYNC", "level 2 not synchronized"},
	{39, "EL3HLT", "level 3 halted"},
	{40, "EL3RST", "level 3 reset"},
	{41, "ELNRNG", "link number out of range"},
	{42, "EUNATCH", "protocol driver not attached"},
	{43, "ENOCSI", "no CSI structure available"},
	{44, "EL2HLT", "level 2 halted"},
	{45, "EDEADLK", "resource deadlock avoided"},
	{46, "ENOLCK", "no locks available"},
	{50, "EBADE", "invalid exchange"},
	{51, "EBADR", "invalid request descriptor"},
	{52, "EXFULL", "exchange full"},
	{53, "ENOANO", "no anode"},
	{54, "EBADRQC", "invalid request code"},
	{55, "EBADSLT", "invalid slot"},
	{56, "EDEADLOCK", "file locking deadlock error"},
	{59, "EBFONT", "bad font file format"},
	{60, "ENOSTR", "device not a stream"},
	{61, "ENODATA", "no data available"},
	{62, "ETIME", "timer expired"},
	{63, "ENOSR", "out of streams resources"},
	{64, "ENONET", "machine is not on the network"},
	{65, "ENOPKG", "package not installed"},
	{66, "EREMOTE", "object is remote"},
	{67, "ENOLINK", "link has been severed"},
	{68, "EADV", "advertise error"},
	{69, "ESRMNT", "srmount error"},
	{70, "ECOMM", "communication error on send"},
	{71, "EPROTO", "protocol error"},
	{73, "EDOTDOT", "RFS specific error"},
	{74, "EMULTIHOP", "multihop attempted"},
	{77, "EBADMSG", "bad message"},
	{78, "ENAMETOOLONG", "file name too long"},
	{79, "EOVERFLOW", "value too large for defined data type"},
	{80, "ENOTUNIQ", "name not unique on network"},
	{81, "EBADFD", "file descriptor in bad state"},
	{82, "EREMCHG", "remote address changed"},
	{83, "ELIBACC", "can not access a needed shared library"},
	{84, "ELIBBAD", "accessing a corrupted shared library"},
	{85, "ELIBSCN", ".lib section in a.out corrupted"},
	{86, "ELIBMAX", "attempting to link in too many shared libraries"},
	{87, "ELIBEXEC", "cannot exec a shared library directly"},
	{88, "EILSEQ", "invalid or incomplete multibyte or wide character"},
	{89, "ENOSYS", "function not implemented"},
	{90, "ELOOP", "too many levels of symbolic links"},
	{91, "ERESTART", "interrupted system call should be restarted"},
	{92, "ESTRPIPE", "streams pipe error"},
	{93, "ENOTEMPTY", "directory not empty"},
	{94, "EUSERS", "too many users"},
	{95, "ENOTSOCK", "socket operation on non-socket"},
	{96, "EDESTADDRREQ", "destination address required"},
	{97, "EMSGSIZE", "message too long"},
	{98, "EPROTOTYPE", "protocol wrong type for socket"},
	{99, "ENOPROTOOPT", "protocol not available"},
	{120, "EPROTONOSUPPORT", "protocol not supported"},
	{121, "ESOCKTNOSUPPORT", "socket type not supported"},
	{122, "ENOTSUP", "operation not supported"},
	{123, "EPFNOSUPPORT", "protocol family not supported"},
	{124, "EAFNOSUPPORT", "address family not supported by protocol"},
	{125, "EADDRINUSE", "address already in use"},
	{126, "EADDRNOTAVAIL", "cannot assign requested address"},
	{127, "ENETDOWN", "network is down"},
	{128, "ENETUNREACH", "network is unreachable"},
	{129, "ENETRESET", "network dropped connection on reset"},
	{130, "ECONNABORTED", "software caused connection abort"},
	{131, "ECONNRESET", "connection reset by peer"},
	{132, "ENOBUFS", "no buffer space available"},
	{133, "EISCONN", "transport endpoint is already connected"},
	{134, "ENOTCONN", "transport endpoint is not connected"},
	{135, "EUCLEAN", "structure needs cleaning"},
	{137, "ENOTNAM", "not a XENIX named type file"},
	{138, "ENAVAIL", "no XENIX semaphores available"},
	{139, "EISNAM", "is a named type file"},
	{140, "EREMOTEIO", "remote I/O error"},
	{141, "EINIT", "unknown error 141"},
	{142, "EREMDEV", "unknown error 142"},
	{143, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
	{144, "ETOOMANYREFS", "too many references: cannot splice"},
	{145, "ETIMEDOUT", "connection timed out"},
	{146, "ECONNREFUSED", "connection refused"},
	{147, "EHOSTDOWN", "host is down"},
	{148, "EHOSTUNREACH", "no route to host"},
	{149, "EALREADY", "operation already in progress"},
	{150, "EINPROGRESS", "operation now in progress"},
	{151, "ESTALE", "stale file handle"},
	{158, "ECANCELED", "operation canceled"},
	{159, "ENOMEDIUM", "no medium found"},
	{160, "EMEDIUMTYPE", "wrong medium type"},
	{161, "ENOKEY", "required key not available"},
	{162, "EKEYEXPIRED", "key has expired"},
	{163, "EKEYREVOKED", "key has been revoked"},
	{164, "EKEYREJECTED", "key was rejected by service"},
	{165, "EOWNERDEAD", "owner died"},
	{166, "ENOTRECOVERABLE", "state not recoverable"},
	{167, "ERFKILL", "operation not possible due to RF-kill"},
	{168, "EHWPOISON", "memory page has hardware error"},
	{1133, "EDQUOT", "disk quota exceeded"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/breakpoint trap"},
	{6, "SIGABRT", "aborted"},
	{7, "SIGEMT", "EMT trap"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus error"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGSYS", "bad system call"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGUSR1", "user defined signal 1"},
	{17, "SIGUSR2", "user defined signal 2"},
	{18, "SIGCHLD", "child exited"},
	{19, "SIGPWR", "power failure"},
	{20, "SIGWINCH", "window changed"},
	{21, "SIGURG", "urgent I/O condition"},
	{22, "SIGIO", "I/O possible"},
	{23, "SIGSTOP", "stopped (signal)"},
	{24, "SIGTSTP", "stopped"},
	{25, "SIGCONT", "continued"},
	{26, "SIGTTIN", "stopped (tty input)"},
	{27, "SIGTTOU", "stopped (tty output)"},
	{28, "SIGVTALRM", "virtual timer expired"},
	{29, "SIGPROF", "profiling timer expired"},
	{30, "SIGXCPU", "CPU time limit exceeded"},
	{31, "SIGXFSZ", "file size limit exceeded"},
}
07070100000E31000081A4000000000000000000000001645E367C0000884B000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go  // mkerrors.sh -Wall -Werror -static -I/tmp/mips64/include
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build mips64 && linux
// +build mips64,linux

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -Wall -Werror -static -I/tmp/mips64/include _const.go

package unix

import "syscall"

const (
	B1000000                         = 0x1008
	B115200                          = 0x1002
	B1152000                         = 0x1009
	B1500000                         = 0x100a
	B2000000                         = 0x100b
	B230400                          = 0x1003
	B2500000                         = 0x100c
	B3000000                         = 0x100d
	B3500000                         = 0x100e
	B4000000                         = 0x100f
	B460800                          = 0x1004
	B500000                          = 0x1005
	B57600                           = 0x1001
	B576000                          = 0x1006
	B921600                          = 0x1007
	BLKBSZGET                        = 0x40081270
	BLKBSZSET                        = 0x80081271
	BLKFLSBUF                        = 0x20001261
	BLKFRAGET                        = 0x20001265
	BLKFRASET                        = 0x20001264
	BLKGETSIZE                       = 0x20001260
	BLKGETSIZE64                     = 0x40081272
	BLKPBSZGET                       = 0x2000127b
	BLKRAGET                         = 0x20001263
	BLKRASET                         = 0x20001262
	BLKROGET                         = 0x2000125e
	BLKROSET                         = 0x2000125d
	BLKRRPART                        = 0x2000125f
	BLKSECTGET                       = 0x20001267
	BLKSECTSET                       = 0x20001266
	BLKSSZGET                        = 0x20001268
	BOTHER                           = 0x1000
	BS1                              = 0x2000
	BSDLY                            = 0x2000
	CBAUD                            = 0x100f
	CBAUDEX                          = 0x1000
	CIBAUD                           = 0x100f0000
	CLOCAL                           = 0x800
	CR1                              = 0x200
	CR2                              = 0x400
	CR3                              = 0x600
	CRDLY                            = 0x600
	CREAD                            = 0x80
	CS6                              = 0x10
	CS7                              = 0x20
	CS8                              = 0x30
	CSIZE                            = 0x30
	CSTOPB                           = 0x40
	ECCGETLAYOUT                     = 0x41484d11
	ECCGETSTATS                      = 0x40104d12
	ECHOCTL                          = 0x200
	ECHOE                            = 0x10
	ECHOK                            = 0x20
	ECHOKE                           = 0x800
	ECHONL                           = 0x40
	ECHOPRT                          = 0x400
	EFD_CLOEXEC                      = 0x80000
	EFD_NONBLOCK                     = 0x80
	EPOLL_CLOEXEC                    = 0x80000
	EXTPROC                          = 0x10000
	FF1                              = 0x8000
	FFDLY                            = 0x8000
	FICLONE                          = 0x80049409
	FICLONERANGE                     = 0x8020940d
	FLUSHO                           = 0x2000
	FS_IOC_ENABLE_VERITY             = 0x80806685
	FS_IOC_GETFLAGS                  = 0x40086601
	FS_IOC_GET_ENCRYPTION_NONCE      = 0x4010661b
	FS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615
	FS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614
	FS_IOC_SETFLAGS                  = 0x80086602
	FS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613
	F_GETLK                          = 0xe
	F_GETLK64                        = 0xe
	F_GETOWN                         = 0x17
	F_RDLCK                          = 0x0
	F_SETLK                          = 0x6
	F_SETLK64                        = 0x6
	F_SETLKW                         = 0x7
	F_SETLKW64                       = 0x7
	F_SETOWN                         = 0x18
	F_UNLCK                          = 0x2
	F_WRLCK                          = 0x1
	HIDIOCGRAWINFO                   = 0x40084803
	HIDIOCGRDESC                     = 0x50044802
	HIDIOCGRDESCSIZE                 = 0x40044801
	HUPCL                            = 0x400
	ICANON                           = 0x2
	IEXTEN                           = 0x100
	IN_CLOEXEC                       = 0x80000
	IN_NONBLOCK                      = 0x80
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9
	ISIG                             = 0x1
	IUCLC                            = 0x200
	IXOFF                            = 0x1000
	IXON                             = 0x400
	MAP_ANON                         = 0x800
	MAP_ANONYMOUS                    = 0x800
	MAP_DENYWRITE                    = 0x2000
	MAP_EXECUTABLE                   = 0x4000
	MAP_GROWSDOWN                    = 0x1000
	MAP_HUGETLB                      = 0x80000
	MAP_LOCKED                       = 0x8000
	MAP_NONBLOCK                     = 0x20000
	MAP_NORESERVE                    = 0x400
	MAP_POPULATE                     = 0x10000
	MAP_RENAME                       = 0x800
	MAP_STACK                        = 0x40000
	MCL_CURRENT                      = 0x1
	MCL_FUTURE                       = 0x2
	MCL_ONFAULT                      = 0x4
	MEMERASE                         = 0x80084d02
	MEMERASE64                       = 0x80104d14
	MEMGETBADBLOCK                   = 0x80084d0b
	MEMGETINFO                       = 0x40204d01
	MEMGETOOBSEL                     = 0x40c84d0a
	MEMGETREGIONCOUNT                = 0x40044d07
	MEMISLOCKED                      = 0x40084d17
	MEMLOCK                          = 0x80084d05
	MEMREAD                          = 0xc0404d1a
	MEMREADOOB                       = 0xc0104d04
	MEMSETBADBLOCK                   = 0x80084d0c
	MEMUNLOCK                        = 0x80084d06
	MEMWRITEOOB                      = 0xc0104d03
	MTDFILEMODE                      = 0x20004d13
	NFDBITS                          = 0x40
	NLDLY                            = 0x100
	NOFLSH                           = 0x80
	NS_GET_NSTYPE                    = 0x2000b703
	NS_GET_OWNER_UID                 = 0x2000b704
	NS_GET_PARENT                    = 0x2000b702
	NS_GET_USERNS                    = 0x2000b701
	OLCUC                            = 0x2
	ONLCR                            = 0x4
	OTPERASE                         = 0x800c4d19
	OTPGETREGIONCOUNT                = 0x80044d0e
	OTPGETREGIONINFO                 = 0x800c4d0f
	OTPLOCK                          = 0x400c4d10
	OTPSELECT                        = 0x40044d0d
	O_APPEND                         = 0x8
	O_ASYNC                          = 0x1000
	O_CLOEXEC                        = 0x80000
	O_CREAT                          = 0x100
	O_DIRECT                         = 0x8000
	O_DIRECTORY                      = 0x10000
	O_DSYNC                          = 0x10
	O_EXCL                           = 0x400
	O_FSYNC                          = 0x4010
	O_LARGEFILE                      = 0x0
	O_NDELAY                         = 0x80
	O_NOATIME                        = 0x40000
	O_NOCTTY                         = 0x800
	O_NOFOLLOW                       = 0x20000
	O_NONBLOCK                       = 0x80
	O_PATH                           = 0x200000
	O_RSYNC                          = 0x4010
	O_SYNC                           = 0x4010
	O_TMPFILE                        = 0x410000
	O_TRUNC                          = 0x200
	PARENB                           = 0x100
	PARODD                           = 0x200
	PENDIN                           = 0x4000
	PERF_EVENT_IOC_DISABLE           = 0x20002401
	PERF_EVENT_IOC_ENABLE            = 0x20002400
	PERF_EVENT_IOC_ID                = 0x40082407
	PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b
	PERF_EVENT_IOC_PAUSE_OUTPUT      = 0x80042409
	PERF_EVENT_IOC_PERIOD            = 0x80082404
	PERF_EVENT_IOC_QUERY_BPF         = 0xc008240a
	PERF_EVENT_IOC_REFRESH           = 0x20002402
	PERF_EVENT_IOC_RESET             = 0x20002403
	PERF_EVENT_IOC_SET_BPF           = 0x80042408
	PERF_EVENT_IOC_SET_FILTER        = 0x80082406
	PERF_EVENT_IOC_SET_OUTPUT        = 0x20002405
	PPPIOCATTACH                     = 0x8004743d
	PPPIOCATTCHAN                    = 0x80047438
	PPPIOCBRIDGECHAN                 = 0x80047435
	PPPIOCCONNECT                    = 0x8004743a
	PPPIOCDETACH                     = 0x8004743c
	PPPIOCDISCONN                    = 0x20007439
	PPPIOCGASYNCMAP                  = 0x40047458
	PPPIOCGCHAN                      = 0x40047437
	PPPIOCGDEBUG                     = 0x40047441
	PPPIOCGFLAGS                     = 0x4004745a
	PPPIOCGIDLE                      = 0x4010743f
	PPPIOCGIDLE32                    = 0x4008743f
	PPPIOCGIDLE64                    = 0x4010743f
	PPPIOCGL2TPSTATS                 = 0x40487436
	PPPIOCGMRU                       = 0x40047453
	PPPIOCGRASYNCMAP                 = 0x40047455
	PPPIOCGUNIT                      = 0x40047456
	PPPIOCGXASYNCMAP                 = 0x40207450
	PPPIOCSACTIVE                    = 0x80107446
	PPPIOCSASYNCMAP                  = 0x80047457
	PPPIOCSCOMPRESS                  = 0x8010744d
	PPPIOCSDEBUG                     = 0x80047440
	PPPIOCSFLAGS                     = 0x80047459
	PPPIOCSMAXCID                    = 0x80047451
	PPPIOCSMRRU                      = 0x8004743b
	PPPIOCSMRU                       = 0x80047452
	PPPIOCSNPMODE                    = 0x8008744b
	PPPIOCSPASS                      = 0x80107447
	PPPIOCSRASYNCMAP                 = 0x80047454
	PPPIOCSXASYNCMAP                 = 0x8020744f
	PPPIOCUNBRIDGECHAN               = 0x20007434
	PPPIOCXFERUNIT                   = 0x2000744e
	PR_SET_PTRACER_ANY               = 0xffffffffffffffff
	PTRACE_GETFPREGS                 = 0xe
	PTRACE_GET_THREAD_AREA           = 0x19
	PTRACE_GET_THREAD_AREA_3264      = 0xc4
	PTRACE_GET_WATCH_REGS            = 0xd0
	PTRACE_OLDSETOPTIONS             = 0x15
	PTRACE_PEEKDATA_3264             = 0xc1
	PTRACE_PEEKTEXT_3264             = 0xc0
	PTRACE_POKEDATA_3264             = 0xc3
	PTRACE_POKETEXT_3264             = 0xc2
	PTRACE_SETFPREGS                 = 0xf
	PTRACE_SET_THREAD_AREA           = 0x1a
	PTRACE_SET_WATCH_REGS            = 0xd1
	RLIMIT_AS                        = 0x6
	RLIMIT_MEMLOCK                   = 0x9
	RLIMIT_NOFILE                    = 0x5
	RLIMIT_NPROC                     = 0x8
	RLIMIT_RSS                       = 0x7
	RNDADDENTROPY                    = 0x80085203
	RNDADDTOENTCNT                   = 0x80045201
	RNDCLEARPOOL                     = 0x20005206
	RNDGETENTCNT                     = 0x40045200
	RNDGETPOOL                       = 0x40085202
	RNDRESEEDCRNG                    = 0x20005207
	RNDZAPENTCNT                     = 0x20005204
	RTC_AIE_OFF                      = 0x20007002
	RTC_AIE_ON                       = 0x20007001
	RTC_ALM_READ                     = 0x40247008
	RTC_ALM_SET                      = 0x80247007
	RTC_EPOCH_READ                   = 0x4008700d
	RTC_EPOCH_SET                    = 0x8008700e
	RTC_IRQP_READ                    = 0x4008700b
	RTC_IRQP_SET                     = 0x8008700c
	RTC_PARAM_GET                    = 0x80187013
	RTC_PARAM_SET                    = 0x80187014
	RTC_PIE_OFF                      = 0x20007006
	RTC_PIE_ON                       = 0x20007005
	RTC_PLL_GET                      = 0x40207011
	RTC_PLL_SET                      = 0x80207012
	RTC_RD_TIME                      = 0x40247009
	RTC_SET_TIME                     = 0x8024700a
	RTC_UIE_OFF                      = 0x20007004
	RTC_UIE_ON                       = 0x20007003
	RTC_VL_CLR                       = 0x20007014
	RTC_VL_READ                      = 0x40047013
	RTC_WIE_OFF                      = 0x20007010
	RTC_WIE_ON                       = 0x2000700f
	RTC_WKALM_RD                     = 0x40287010
	RTC_WKALM_SET                    = 0x8028700f
	SCM_TIMESTAMPING                 = 0x25
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
	SCM_TIMESTAMPNS                  = 0x23
	SCM_TXTIME                       = 0x3d
	SCM_WIFI_STATUS                  = 0x29
	SFD_CLOEXEC                      = 0x80000
	SFD_NONBLOCK                     = 0x80
	SIOCATMARK                       = 0x40047307
	SIOCGPGRP                        = 0x40047309
	SIOCGSTAMPNS_NEW                 = 0x40108907
	SIOCGSTAMP_NEW                   = 0x40108906
	SIOCINQ                          = 0x467f
	SIOCOUTQ                         = 0x7472
	SIOCSPGRP                        = 0x80047308
	SOCK_CLOEXEC                     = 0x80000
	SOCK_DGRAM                       = 0x1
	SOCK_NONBLOCK                    = 0x80
	SOCK_STREAM                      = 0x2
	SOL_SOCKET                       = 0xffff
	SO_ACCEPTCONN                    = 0x1009
	SO_ATTACH_BPF                    = 0x32
	SO_ATTACH_REUSEPORT_CBPF         = 0x33
	SO_ATTACH_REUSEPORT_EBPF         = 0x34
	SO_BINDTODEVICE                  = 0x19
	SO_BINDTOIFINDEX                 = 0x3e
	SO_BPF_EXTENSIONS                = 0x30
	SO_BROADCAST                     = 0x20
	SO_BSDCOMPAT                     = 0xe
	SO_BUF_LOCK                      = 0x48
	SO_BUSY_POLL                     = 0x2e
	SO_BUSY_POLL_BUDGET              = 0x46
	SO_CNX_ADVICE                    = 0x35
	SO_COOKIE                        = 0x39
	SO_DETACH_REUSEPORT_BPF          = 0x44
	SO_DOMAIN                        = 0x1029
	SO_DONTROUTE                     = 0x10
	SO_ERROR                         = 0x1007
	SO_INCOMING_CPU                  = 0x31
	SO_INCOMING_NAPI_ID              = 0x38
	SO_KEEPALIVE                     = 0x8
	SO_LINGER                        = 0x80
	SO_LOCK_FILTER                   = 0x2c
	SO_MARK                          = 0x24
	SO_MAX_PACING_RATE               = 0x2f
	SO_MEMINFO                       = 0x37
	SO_NETNS_COOKIE                  = 0x47
	SO_NOFCS                         = 0x2b
	SO_OOBINLINE                     = 0x100
	SO_PASSCRED                      = 0x11
	SO_PASSSEC                       = 0x22
	SO_PEEK_OFF                      = 0x2a
	SO_PEERCRED                      = 0x12
	SO_PEERGROUPS                    = 0x3b
	SO_PEERSEC                       = 0x1e
	SO_PREFER_BUSY_POLL              = 0x45
	SO_PROTOCOL                      = 0x1028
	SO_RCVBUF                        = 0x1002
	SO_RCVBUFFORCE                   = 0x21
	SO_RCVLOWAT                      = 0x1004
	SO_RCVMARK                       = 0x4b
	SO_RCVTIMEO                      = 0x1006
	SO_RCVTIMEO_NEW                  = 0x42
	SO_RCVTIMEO_OLD                  = 0x1006
	SO_RESERVE_MEM                   = 0x49
	SO_REUSEADDR                     = 0x4
	SO_REUSEPORT                     = 0x200
	SO_RXQ_OVFL                      = 0x28
	SO_SECURITY_AUTHENTICATION       = 0x16
	SO_SECURITY_ENCRYPTION_NETWORK   = 0x18
	SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
	SO_SELECT_ERR_QUEUE              = 0x2d
	SO_SNDBUF                        = 0x1001
	SO_SNDBUFFORCE                   = 0x1f
	SO_SNDLOWAT                      = 0x1003
	SO_SNDTIMEO                      = 0x1005
	SO_SNDTIMEO_NEW                  = 0x43
	SO_SNDTIMEO_OLD                  = 0x1005
	SO_STYLE                         = 0x1008
	SO_TIMESTAMPING                  = 0x25
	SO_TIMESTAMPING_NEW              = 0x41
	SO_TIMESTAMPING_OLD              = 0x25
	SO_TIMESTAMPNS                   = 0x23
	SO_TIMESTAMPNS_NEW               = 0x40
	SO_TIMESTAMPNS_OLD               = 0x23
	SO_TIMESTAMP_NEW                 = 0x3f
	SO_TXREHASH                      = 0x4a
	SO_TXTIME                        = 0x3d
	SO_TYPE                          = 0x1008
	SO_WIFI_STATUS                   = 0x29
	SO_ZEROCOPY                      = 0x3c
	TAB1                             = 0x800
	TAB2                             = 0x1000
	TAB3                             = 0x1800
	TABDLY                           = 0x1800
	TCFLSH                           = 0x5407
	TCGETA                           = 0x5401
	TCGETS                           = 0x540d
	TCGETS2                          = 0x4030542a
	TCSAFLUSH                        = 0x5410
	TCSBRK                           = 0x5405
	TCSBRKP                          = 0x5486
	TCSETA                           = 0x5402
	TCSETAF                          = 0x5404
	TCSETAW                          = 0x5403
	TCSETS                           = 0x540e
	TCSETS2                          = 0x8030542b
	TCSETSF                          = 0x5410
	TCSETSF2                         = 0x8030542d
	TCSETSW                          = 0x540f
	TCSETSW2                         = 0x8030542c
	TCXONC                           = 0x5406
	TFD_CLOEXEC                      = 0x80000
	TFD_NONBLOCK                     = 0x80
	TIOCCBRK                         = 0x5428
	TIOCCONS                         = 0x80047478
	TIOCEXCL                         = 0x740d
	TIOCGDEV                         = 0x40045432
	TIOCGETD                         = 0x7400
	TIOCGETP                         = 0x7408
	TIOCGEXCL                        = 0x40045440
	TIOCGICOUNT                      = 0x5492
	TIOCGISO7816                     = 0x40285442
	TIOCGLCKTRMIOS                   = 0x548b
	TIOCGLTC                         = 0x7474
	TIOCGPGRP                        = 0x40047477
	TIOCGPKT                         = 0x40045438
	TIOCGPTLCK                       = 0x40045439
	TIOCGPTN                         = 0x40045430
	TIOCGPTPEER                      = 0x20005441
	TIOCGRS485                       = 0x4020542e
	TIOCGSERIAL                      = 0x5484
	TIOCGSID                         = 0x7416
	TIOCGSOFTCAR                     = 0x5481
	TIOCGWINSZ                       = 0x40087468
	TIOCINQ                          = 0x467f
	TIOCLINUX                        = 0x5483
	TIOCMBIC                         = 0x741c
	TIOCMBIS                         = 0x741b
	TIOCMGET                         = 0x741d
	TIOCMIWAIT                       = 0x5491
	TIOCMSET                         = 0x741a
	TIOCM_CAR                        = 0x100
	TIOCM_CD                         = 0x100
	TIOCM_CTS                        = 0x40
	TIOCM_DSR                        = 0x400
	TIOCM_RI                         = 0x200
	TIOCM_RNG                        = 0x200
	TIOCM_SR                         = 0x20
	TIOCM_ST                         = 0x10
	TIOCNOTTY                        = 0x5471
	TIOCNXCL                         = 0x740e
	TIOCOUTQ                         = 0x7472
	TIOCPKT                          = 0x5470
	TIOCSBRK                         = 0x5427
	TIOCSCTTY                        = 0x5480
	TIOCSERCONFIG                    = 0x5488
	TIOCSERGETLSR                    = 0x548e
	TIOCSERGETMULTI                  = 0x548f
	TIOCSERGSTRUCT                   = 0x548d
	TIOCSERGWILD                     = 0x5489
	TIOCSERSETMULTI                  = 0x5490
	TIOCSERSWILD                     = 0x548a
	TIOCSER_TEMT                     = 0x1
	TIOCSETD                         = 0x7401
	TIOCSETN                         = 0x740a
	TIOCSETP                         = 0x7409
	TIOCSIG                          = 0x80045436
	TIOCSISO7816                     = 0xc0285443
	TIOCSLCKTRMIOS                   = 0x548c
	TIOCSLTC                         = 0x7475
	TIOCSPGRP                        = 0x80047476
	TIOCSPTLCK                       = 0x80045431
	TIOCSRS485                       = 0xc020542f
	TIOCSSERIAL                      = 0x5485
	TIOCSSOFTCAR                     = 0x5482
	TIOCSTI                          = 0x5472
	TIOCSWINSZ                       = 0x80087467
	TIOCVHANGUP                      = 0x5437
	TOSTOP                           = 0x8000
	TUNATTACHFILTER                  = 0x801054d5
	TUNDETACHFILTER                  = 0x801054d6
	TUNGETDEVNETNS                   = 0x200054e3
	TUNGETFEATURES                   = 0x400454cf
	TUNGETFILTER                     = 0x401054db
	TUNGETIFF                        = 0x400454d2
	TUNGETSNDBUF                     = 0x400454d3
	TUNGETVNETBE                     = 0x400454df
	TUNGETVNETHDRSZ                  = 0x400454d7
	TUNGETVNETLE                     = 0x400454dd
	TUNSETCARRIER                    = 0x800454e2
	TUNSETDEBUG                      = 0x800454c9
	TUNSETFILTEREBPF                 = 0x400454e1
	TUNSETGROUP                      = 0x800454ce
	TUNSETIFF                        = 0x800454ca
	TUNSETIFINDEX                    = 0x800454da
	TUNSETLINK                       = 0x800454cd
	TUNSETNOCSUM                     = 0x800454c8
	TUNSETOFFLOAD                    = 0x800454d0
	TUNSETOWNER                      = 0x800454cc
	TUNSETPERSIST                    = 0x800454cb
	TUNSETQUEUE                      = 0x800454d9
	TUNSETSNDBUF                     = 0x800454d4
	TUNSETSTEERINGEBPF               = 0x400454e0
	TUNSETTXFILTER                   = 0x800454d1
	TUNSETVNETBE                     = 0x800454de
	TUNSETVNETHDRSZ                  = 0x800454d8
	TUNSETVNETLE                     = 0x800454dc
	UBI_IOCATT                       = 0x80186f40
	UBI_IOCDET                       = 0x80046f41
	UBI_IOCEBCH                      = 0x80044f02
	UBI_IOCEBER                      = 0x80044f01
	UBI_IOCEBISMAP                   = 0x40044f05
	UBI_IOCEBMAP                     = 0x80084f03
	UBI_IOCEBUNMAP                   = 0x80044f04
	UBI_IOCMKVOL                     = 0x80986f00
	UBI_IOCRMVOL                     = 0x80046f01
	UBI_IOCRNVOL                     = 0x91106f03
	UBI_IOCRPEB                      = 0x80046f04
	UBI_IOCRSVOL                     = 0x800c6f02
	UBI_IOCSETVOLPROP                = 0x80104f06
	UBI_IOCSPEB                      = 0x80046f05
	UBI_IOCVOLCRBLK                  = 0x80804f07
	UBI_IOCVOLRMBLK                  = 0x20004f08
	UBI_IOCVOLUP                     = 0x80084f00
	VDISCARD                         = 0xd
	VEOF                             = 0x10
	VEOL                             = 0x11
	VEOL2                            = 0x6
	VMIN                             = 0x4
	VREPRINT                         = 0xc
	VSTART                           = 0x8
	VSTOP                            = 0x9
	VSUSP                            = 0xa
	VSWTC                            = 0x7
	VSWTCH                           = 0x7
	VT1                              = 0x4000
	VTDLY                            = 0x4000
	VTIME                            = 0x5
	VWERASE                          = 0xe
	WDIOC_GETBOOTSTATUS              = 0x40045702
	WDIOC_GETPRETIMEOUT              = 0x40045709
	WDIOC_GETSTATUS                  = 0x40045701
	WDIOC_GETSUPPORT                 = 0x40285700
	WDIOC_GETTEMP                    = 0x40045703
	WDIOC_GETTIMELEFT                = 0x4004570a
	WDIOC_GETTIMEOUT                 = 0x40045707
	WDIOC_KEEPALIVE                  = 0x40045705
	WDIOC_SETOPTIONS                 = 0x40045704
	WORDSIZE                         = 0x40
	XCASE                            = 0x4
	XTABS                            = 0x1800
	_HIDIOCGRAWNAME                  = 0x40804804
	_HIDIOCGRAWPHYS                  = 0x40404805
	_HIDIOCGRAWUNIQ                  = 0x40404808
)

// Errors
const (
	EADDRINUSE      = syscall.Errno(0x7d)
	EADDRNOTAVAIL   = syscall.Errno(0x7e)
	EADV            = syscall.Errno(0x44)
	EAFNOSUPPORT    = syscall.Errno(0x7c)
	EALREADY        = syscall.Errno(0x95)
	EBADE           = syscall.Errno(0x32)
	EBADFD          = syscall.Errno(0x51)
	EBADMSG         = syscall.Errno(0x4d)
	EBADR           = syscall.Errno(0x33)
	EBADRQC         = syscall.Errno(0x36)
	EBADSLT         = syscall.Errno(0x37)
	EBFONT          = syscall.Errno(0x3b)
	ECANCELED       = syscall.Errno(0x9e)
	ECHRNG          = syscall.Errno(0x25)
	ECOMM           = syscall.Errno(0x46)
	ECONNABORTED    = syscall.Errno(0x82)
	ECONNREFUSED    = syscall.Errno(0x92)
	ECONNRESET      = syscall.Errno(0x83)
	EDEADLK         = syscall.Errno(0x2d)
	EDEADLOCK       = syscall.Errno(0x38)
	EDESTADDRREQ    = syscall.Errno(0x60)
	EDOTDOT         = syscall.Errno(0x49)
	EDQUOT          = syscall.Errno(0x46d)
	EHOSTDOWN       = syscall.Errno(0x93)
	EHOSTUNREACH    = syscall.Errno(0x94)
	EHWPOISON       = syscall.Errno(0xa8)
	EIDRM           = syscall.Errno(0x24)
	EILSEQ          = syscall.Errno(0x58)
	EINIT           = syscall.Errno(0x8d)
	EINPROGRESS     = syscall.Errno(0x96)
	EISCONN         = syscall.Errno(0x85)
	EISNAM          = syscall.Errno(0x8b)
	EKEYEXPIRED     = syscall.Errno(0xa2)
	EKEYREJECTED    = syscall.Errno(0xa4)
	EKEYREVOKED     = syscall.Errno(0xa3)
	EL2HLT          = syscall.Errno(0x2c)
	EL2NSYNC        = syscall.Errno(0x26)
	EL3HLT          = syscall.Errno(0x27)
	EL3RST          = syscall.Errno(0x28)
	ELIBACC         = syscall.Errno(0x53)
	ELIBBAD         = syscall.Errno(0x54)
	ELIBEXEC        = syscall.Errno(0x57)
	ELIBMAX         = syscall.Errno(0x56)
	ELIBSCN         = syscall.Errno(0x55)
	ELNRNG          = syscall.Errno(0x29)
	ELOOP           = syscall.Errno(0x5a)
	EMEDIUMTYPE     = syscall.Errno(0xa0)
	EMSGSIZE        = syscall.Errno(0x61)
	EMULTIHOP       = syscall.Errno(0x4a)
	ENAMETOOLONG    = syscall.Errno(0x4e)
	ENAVAIL         = syscall.Errno(0x8a)
	ENETDOWN        = syscall.Errno(0x7f)
	ENETRESET       = syscall.Errno(0x81)
	ENETUNREACH     = syscall.Errno(0x80)
	ENOANO          = syscall.Errno(0x35)
	ENOBUFS         = syscall.Errno(0x84)
	ENOCSI          = syscall.Errno(0x2b)
	ENODATA         = syscall.Errno(0x3d)
	ENOKEY          = syscall.Errno(0xa1)
	ENOLCK          = syscall.Errno(0x2e)
	ENOLINK         = syscall.Errno(0x43)
	ENOMEDIUM       = syscall.Errno(0x9f)
	ENOMSG          = syscall.Errno(0x23)
	ENONET          = syscall.Errno(0x40)
	ENOPKG          = syscall.Errno(0x41)
	ENOPROTOOPT     = syscall.Errno(0x63)
	ENOSR           = syscall.Errno(0x3f)
	ENOSTR          = syscall.Errno(0x3c)
	ENOSYS          = syscall.Errno(0x59)
	ENOTCONN        = syscall.Errno(0x86)
	ENOTEMPTY       = syscall.Errno(0x5d)
	ENOTNAM         = syscall.Errno(0x89)
	ENOTRECOVERABLE = syscall.Errno(0xa6)
	ENOTSOCK        = syscall.Errno(0x5f)
	ENOTSUP         = syscall.Errno(0x7a)
	ENOTUNIQ        = syscall.Errno(0x50)
	EOPNOTSUPP      = syscall.Errno(0x7a)
	EOVERFLOW       = syscall.Errno(0x4f)
	EOWNERDEAD      = syscall.Errno(0xa5)
	EPFNOSUPPORT    = syscall.Errno(0x7b)
	EPROTO          = syscall.Errno(0x47)
	EPROTONOSUPPORT = syscall.Errno(0x78)
	EPROTOTYPE      = syscall.Errno(0x62)
	EREMCHG         = syscall.Errno(0x52)
	EREMDEV         = syscall.Errno(0x8e)
	EREMOTE         = syscall.Errno(0x42)
	EREMOTEIO       = syscall.Errno(0x8c)
	ERESTART        = syscall.Errno(0x5b)
	ERFKILL         = syscall.Errno(0xa7)
	ESHUTDOWN       = syscall.Errno(0x8f)
	ESOCKTNOSUPPORT = syscall.Errno(0x79)
	ESRMNT          = syscall.Errno(0x45)
	ESTALE          = syscall.Errno(0x97)
	ESTRPIPE        = syscall.Errno(0x5c)
	ETIME           = syscall.Errno(0x3e)
	ETIMEDOUT       = syscall.Errno(0x91)
	ETOOMANYREFS    = syscall.Errno(0x90)
	EUCLEAN         = syscall.Errno(0x87)
	EUNATCH         = syscall.Errno(0x2a)
	EUSERS          = syscall.Errno(0x5e)
	EXFULL          = syscall.Errno(0x34)
)

// Signals
const (
	SIGBUS    = syscall.Signal(0xa)
	SIGCHLD   = syscall.Signal(0x12)
	SIGCLD    = syscall.Signal(0x12)
	SIGCONT   = syscall.Signal(0x19)
	SIGEMT    = syscall.Signal(0x7)
	SIGIO     = syscall.Signal(0x16)
	SIGPOLL   = syscall.Signal(0x16)
	SIGPROF   = syscall.Signal(0x1d)
	SIGPWR    = syscall.Signal(0x13)
	SIGSTOP   = syscall.Signal(0x17)
	SIGSYS    = syscall.Signal(0xc)
	SIGTSTP   = syscall.Signal(0x18)
	SIGTTIN   = syscall.Signal(0x1a)
	SIGTTOU   = syscall.Signal(0x1b)
	SIGURG    = syscall.Signal(0x15)
	SIGUSR1   = syscall.Signal(0x10)
	SIGUSR2   = syscall.Signal(0x11)
	SIGVTALRM = syscall.Signal(0x1c)
	SIGWINCH  = syscall.Signal(0x14)
	SIGXCPU   = syscall.Signal(0x1e)
	SIGXFSZ   = syscall.Signal(0x1f)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "no such device or address"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EAGAIN", "resource temporarily unavailable"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device or resource busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "invalid cross-device link"},
	{19, "ENODEV", "no such device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "numerical result out of range"},
	{35, "ENOMSG", "no message of desired type"},
	{36, "EIDRM", "identifier removed"},
	{37, "ECHRNG", "channel number out of range"},
	{38, "EL2NSYNC", "level 2 not synchronized"},
	{39, "EL3HLT", "level 3 halted"},
	{40, "EL3RST", "level 3 reset"},
	{41, "ELNRNG", "link number out of range"},
	{42, "EUNATCH", "protocol driver not attached"},
	{43, "ENOCSI", "no CSI structure available"},
	{44, "EL2HLT", "level 2 halted"},
	{45, "EDEADLK", "resource deadlock avoided"},
	{46, "ENOLCK", "no locks available"},
	{50, "EBADE", "invalid exchange"},
	{51, "EBADR", "invalid request descriptor"},
	{52, "EXFULL", "exchange full"},
	{53, "ENOANO", "no anode"},
	{54, "EBADRQC", "invalid request code"},
	{55, "EBADSLT", "invalid slot"},
	{56, "EDEADLOCK", "file locking deadlock error"},
	{59, "EBFONT", "bad font file format"},
	{60, "ENOSTR", "device not a stream"},
	{61, "ENODATA", "no data available"},
	{62, "ETIME", "timer expired"},
	{63, "ENOSR", "out of streams resources"},
	{64, "ENONET", "machine is not on the network"},
	{65, "ENOPKG", "package not installed"},
	{66, "EREMOTE", "object is remote"},
	{67, "ENOLINK", "link has been severed"},
	{68, "EADV", "advertise error"},
	{69, "ESRMNT", "srmount error"},
	{70, "ECOMM", "communication error on send"},
	{71, "EPROTO", "protocol error"},
	{73, "EDOTDOT", "RFS specific error"},
	{74, "EMULTIHOP", "multihop attempted"},
	{77, "EBADMSG", "bad message"},
	{78, "ENAMETOOLONG", "file name too long"},
	{79, "EOVERFLOW", "value too large for defined data type"},
	{80, "ENOTUNIQ", "name not unique on network"},
	{81, "EBADFD", "file descriptor in bad state"},
	{82, "EREMCHG", "remote address changed"},
	{83, "ELIBACC", "can not access a needed shared library"},
	{84, "ELIBBAD", "accessing a corrupted shared library"},
	{85, "ELIBSCN", ".lib section in a.out corrupted"},
	{86, "ELIBMAX", "attempting to link in too many shared libraries"},
	{87, "ELIBEXEC", "cannot exec a shared library directly"},
	{88, "EILSEQ", "invalid or incomplete multibyte or wide character"},
	{89, "ENOSYS", "function not implemented"},
	{90, "ELOOP", "too many levels of symbolic links"},
	{91, "ERESTART", "interrupted system call should be restarted"},
	{92, "ESTRPIPE", "streams pipe error"},
	{93, "ENOTEMPTY", "directory not empty"},
	{94, "EUSERS", "too many users"},
	{95, "ENOTSOCK", "socket operation on non-socket"},
	{96, "EDESTADDRREQ", "destination address required"},
	{97, "EMSGSIZE", "message too long"},
	{98, "EPROTOTYPE", "protocol wrong type for socket"},
	{99, "ENOPROTOOPT", "protocol not available"},
	{120, "EPROTONOSUPPORT", "protocol not supported"},
	{121, "ESOCKTNOSUPPORT", "socket type not supported"},
	{122, "ENOTSUP", "operation not supported"},
	{123, "EPFNOSUPPORT", "protocol family not supported"},
	{124, "EAFNOSUPPORT", "address family not supported by protocol"},
	{125, "EADDRINUSE", "address already in use"},
	{126, "EADDRNOTAVAIL", "cannot assign requested address"},
	{127, "ENETDOWN", "network is down"},
	{128, "ENETUNREACH", "network is unreachable"},
	{129, "ENETRESET", "network dropped connection on reset"},
	{130, "ECONNABORTED", "software caused connection abort"},
	{131, "ECONNRESET", "connection reset by peer"},
	{132, "ENOBUFS", "no buffer space available"},
	{133, "EISCONN", "transport endpoint is already connected"},
	{134, "ENOTCONN", "transport endpoint is not connected"},
	{135, "EUCLEAN", "structure needs cleaning"},
	{137, "ENOTNAM", "not a XENIX named type file"},
	{138, "ENAVAIL", "no XENIX semaphores available"},
	{139, "EISNAM", "is a named type file"},
	{140, "EREMOTEIO", "remote I/O error"},
	{141, "EINIT", "unknown error 141"},
	{142, "EREMDEV", "unknown error 142"},
	{143, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
	{144, "ETOOMANYREFS", "too many references: cannot splice"},
	{145, "ETIMEDOUT", "connection timed out"},
	{146, "ECONNREFUSED", "connection refused"},
	{147, "EHOSTDOWN", "host is down"},
	{148, "EHOSTUNREACH", "no route to host"},
	{149, "EALREADY", "operation already in progress"},
	{150, "EINPROGRESS", "operation now in progress"},
	{151, "ESTALE", "stale file handle"},
	{158, "ECANCELED", "operation canceled"},
	{159, "ENOMEDIUM", "no medium found"},
	{160, "EMEDIUMTYPE", "wrong medium type"},
	{161, "ENOKEY", "required key not available"},
	{162, "EKEYEXPIRED", "key has expired"},
	{163, "EKEYREVOKED", "key has been revoked"},
	{164, "EKEYREJECTED", "key was rejected by service"},
	{165, "EOWNERDEAD", "owner died"},
	{166, "ENOTRECOVERABLE", "state not recoverable"},
	{167, "ERFKILL", "operation not possible due to RF-kill"},
	{168, "EHWPOISON", "memory page has hardware error"},
	{1133, "EDQUOT", "disk quota exceeded"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/breakpoint trap"},
	{6, "SIGABRT", "aborted"},
	{7, "SIGEMT", "EMT trap"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus error"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGSYS", "bad system call"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGUSR1", "user defined signal 1"},
	{17, "SIGUSR2", "user defined signal 2"},
	{18, "SIGCHLD", "child exited"},
	{19, "SIGPWR", "power failure"},
	{20, "SIGWINCH", "window changed"},
	{21, "SIGURG", "urgent I/O condition"},
	{22, "SIGIO", "I/O possible"},
	{23, "SIGSTOP", "stopped (signal)"},
	{24, "SIGTSTP", "stopped"},
	{25, "SIGCONT", "continued"},
	{26, "SIGTTIN", "stopped (tty input)"},
	{27, "SIGTTOU", "stopped (tty output)"},
	{28, "SIGVTALRM", "virtual timer expired"},
	{29, "SIGPROF", "profiling timer expired"},
	{30, "SIGXCPU", "CPU time limit exceeded"},
	{31, "SIGXFSZ", "file size limit exceeded"},
}
 07070100000E32000081A4000000000000000000000001645E367C00008853000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go    // mkerrors.sh -Wall -Werror -static -I/tmp/mips64le/include
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build mips64le && linux
// +build mips64le,linux

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -Wall -Werror -static -I/tmp/mips64le/include _const.go

package unix

import "syscall"

const (
	B1000000                         = 0x1008
	B115200                          = 0x1002
	B1152000                         = 0x1009
	B1500000                         = 0x100a
	B2000000                         = 0x100b
	B230400                          = 0x1003
	B2500000                         = 0x100c
	B3000000                         = 0x100d
	B3500000                         = 0x100e
	B4000000                         = 0x100f
	B460800                          = 0x1004
	B500000                          = 0x1005
	B57600                           = 0x1001
	B576000                          = 0x1006
	B921600                          = 0x1007
	BLKBSZGET                        = 0x40081270
	BLKBSZSET                        = 0x80081271
	BLKFLSBUF                        = 0x20001261
	BLKFRAGET                        = 0x20001265
	BLKFRASET                        = 0x20001264
	BLKGETSIZE                       = 0x20001260
	BLKGETSIZE64                     = 0x40081272
	BLKPBSZGET                       = 0x2000127b
	BLKRAGET                         = 0x20001263
	BLKRASET                         = 0x20001262
	BLKROGET                         = 0x2000125e
	BLKROSET                         = 0x2000125d
	BLKRRPART                        = 0x2000125f
	BLKSECTGET                       = 0x20001267
	BLKSECTSET                       = 0x20001266
	BLKSSZGET                        = 0x20001268
	BOTHER                           = 0x1000
	BS1                              = 0x2000
	BSDLY                            = 0x2000
	CBAUD                            = 0x100f
	CBAUDEX                          = 0x1000
	CIBAUD                           = 0x100f0000
	CLOCAL                           = 0x800
	CR1                              = 0x200
	CR2                              = 0x400
	CR3                              = 0x600
	CRDLY                            = 0x600
	CREAD                            = 0x80
	CS6                              = 0x10
	CS7                              = 0x20
	CS8                              = 0x30
	CSIZE                            = 0x30
	CSTOPB                           = 0x40
	ECCGETLAYOUT                     = 0x41484d11
	ECCGETSTATS                      = 0x40104d12
	ECHOCTL                          = 0x200
	ECHOE                            = 0x10
	ECHOK                            = 0x20
	ECHOKE                           = 0x800
	ECHONL                           = 0x40
	ECHOPRT                          = 0x400
	EFD_CLOEXEC                      = 0x80000
	EFD_NONBLOCK                     = 0x80
	EPOLL_CLOEXEC                    = 0x80000
	EXTPROC                          = 0x10000
	FF1                              = 0x8000
	FFDLY                            = 0x8000
	FICLONE                          = 0x80049409
	FICLONERANGE                     = 0x8020940d
	FLUSHO                           = 0x2000
	FS_IOC_ENABLE_VERITY             = 0x80806685
	FS_IOC_GETFLAGS                  = 0x40086601
	FS_IOC_GET_ENCRYPTION_NONCE      = 0x4010661b
	FS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615
	FS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614
	FS_IOC_SETFLAGS                  = 0x80086602
	FS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613
	F_GETLK                          = 0xe
	F_GETLK64                        = 0xe
	F_GETOWN                         = 0x17
	F_RDLCK                          = 0x0
	F_SETLK                          = 0x6
	F_SETLK64                        = 0x6
	F_SETLKW                         = 0x7
	F_SETLKW64                       = 0x7
	F_SETOWN                         = 0x18
	F_UNLCK                          = 0x2
	F_WRLCK                          = 0x1
	HIDIOCGRAWINFO                   = 0x40084803
	HIDIOCGRDESC                     = 0x50044802
	HIDIOCGRDESCSIZE                 = 0x40044801
	HUPCL                            = 0x400
	ICANON                           = 0x2
	IEXTEN                           = 0x100
	IN_CLOEXEC                       = 0x80000
	IN_NONBLOCK                      = 0x80
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9
	ISIG                             = 0x1
	IUCLC                            = 0x200
	IXOFF                            = 0x1000
	IXON                             = 0x400
	MAP_ANON                         = 0x800
	MAP_ANONYMOUS                    = 0x800
	MAP_DENYWRITE                    = 0x2000
	MAP_EXECUTABLE                   = 0x4000
	MAP_GROWSDOWN                    = 0x1000
	MAP_HUGETLB                      = 0x80000
	MAP_LOCKED                       = 0x8000
	MAP_NONBLOCK                     = 0x20000
	MAP_NORESERVE                    = 0x400
	MAP_POPULATE                     = 0x10000
	MAP_RENAME                       = 0x800
	MAP_STACK                        = 0x40000
	MCL_CURRENT                      = 0x1
	MCL_FUTURE                       = 0x2
	MCL_ONFAULT                      = 0x4
	MEMERASE                         = 0x80084d02
	MEMERASE64                       = 0x80104d14
	MEMGETBADBLOCK                   = 0x80084d0b
	MEMGETINFO                       = 0x40204d01
	MEMGETOOBSEL                     = 0x40c84d0a
	MEMGETREGIONCOUNT                = 0x40044d07
	MEMISLOCKED                      = 0x40084d17
	MEMLOCK                          = 0x80084d05
	MEMREAD                          = 0xc0404d1a
	MEMREADOOB                       = 0xc0104d04
	MEMSETBADBLOCK                   = 0x80084d0c
	MEMUNLOCK                        = 0x80084d06
	MEMWRITEOOB                      = 0xc0104d03
	MTDFILEMODE                      = 0x20004d13
	NFDBITS                          = 0x40
	NLDLY                            = 0x100
	NOFLSH                           = 0x80
	NS_GET_NSTYPE                    = 0x2000b703
	NS_GET_OWNER_UID                 = 0x2000b704
	NS_GET_PARENT                    = 0x2000b702
	NS_GET_USERNS                    = 0x2000b701
	OLCUC                            = 0x2
	ONLCR                            = 0x4
	OTPERASE                         = 0x800c4d19
	OTPGETREGIONCOUNT                = 0x80044d0e
	OTPGETREGIONINFO                 = 0x800c4d0f
	OTPLOCK                          = 0x400c4d10
	OTPSELECT                        = 0x40044d0d
	O_APPEND                         = 0x8
	O_ASYNC                          = 0x1000
	O_CLOEXEC                        = 0x80000
	O_CREAT                          = 0x100
	O_DIRECT                         = 0x8000
	O_DIRECTORY                      = 0x10000
	O_DSYNC                          = 0x10
	O_EXCL                           = 0x400
	O_FSYNC                          = 0x4010
	O_LARGEFILE                      = 0x0
	O_NDELAY                         = 0x80
	O_NOATIME                        = 0x40000
	O_NOCTTY                         = 0x800
	O_NOFOLLOW                       = 0x20000
	O_NONBLOCK                       = 0x80
	O_PATH                           = 0x200000
	O_RSYNC                          = 0x4010
	O_SYNC                           = 0x4010
	O_TMPFILE                        = 0x410000
	O_TRUNC                          = 0x200
	PARENB                           = 0x100
	PARODD                           = 0x200
	PENDIN                           = 0x4000
	PERF_EVENT_IOC_DISABLE           = 0x20002401
	PERF_EVENT_IOC_ENABLE            = 0x20002400
	PERF_EVENT_IOC_ID                = 0x40082407
	PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b
	PERF_EVENT_IOC_PAUSE_OUTPUT      = 0x80042409
	PERF_EVENT_IOC_PERIOD            = 0x80082404
	PERF_EVENT_IOC_QUERY_BPF         = 0xc008240a
	PERF_EVENT_IOC_REFRESH           = 0x20002402
	PERF_EVENT_IOC_RESET             = 0x20002403
	PERF_EVENT_IOC_SET_BPF           = 0x80042408
	PERF_EVENT_IOC_SET_FILTER        = 0x80082406
	PERF_EVENT_IOC_SET_OUTPUT        = 0x20002405
	PPPIOCATTACH                     = 0x8004743d
	PPPIOCATTCHAN                    = 0x80047438
	PPPIOCBRIDGECHAN                 = 0x80047435
	PPPIOCCONNECT                    = 0x8004743a
	PPPIOCDETACH                     = 0x8004743c
	PPPIOCDISCONN                    = 0x20007439
	PPPIOCGASYNCMAP                  = 0x40047458
	PPPIOCGCHAN                      = 0x40047437
	PPPIOCGDEBUG                     = 0x40047441
	PPPIOCGFLAGS                     = 0x4004745a
	PPPIOCGIDLE                      = 0x4010743f
	PPPIOCGIDLE32                    = 0x4008743f
	PPPIOCGIDLE64                    = 0x4010743f
	PPPIOCGL2TPSTATS                 = 0x40487436
	PPPIOCGMRU                       = 0x40047453
	PPPIOCGRASYNCMAP                 = 0x40047455
	PPPIOCGUNIT                      = 0x40047456
	PPPIOCGXASYNCMAP                 = 0x40207450
	PPPIOCSACTIVE                    = 0x80107446
	PPPIOCSASYNCMAP                  = 0x80047457
	PPPIOCSCOMPRESS                  = 0x8010744d
	PPPIOCSDEBUG                     = 0x80047440
	PPPIOCSFLAGS                     = 0x80047459
	PPPIOCSMAXCID                    = 0x80047451
	PPPIOCSMRRU                      = 0x8004743b
	PPPIOCSMRU                       = 0x80047452
	PPPIOCSNPMODE                    = 0x8008744b
	PPPIOCSPASS                      = 0x80107447
	PPPIOCSRASYNCMAP                 = 0x80047454
	PPPIOCSXASYNCMAP                 = 0x8020744f
	PPPIOCUNBRIDGECHAN               = 0x20007434
	PPPIOCXFERUNIT                   = 0x2000744e
	PR_SET_PTRACER_ANY               = 0xffffffffffffffff
	PTRACE_GETFPREGS                 = 0xe
	PTRACE_GET_THREAD_AREA           = 0x19
	PTRACE_GET_THREAD_AREA_3264      = 0xc4
	PTRACE_GET_WATCH_REGS            = 0xd0
	PTRACE_OLDSETOPTIONS             = 0x15
	PTRACE_PEEKDATA_3264             = 0xc1
	PTRACE_PEEKTEXT_3264             = 0xc0
	PTRACE_POKEDATA_3264             = 0xc3
	PTRACE_POKETEXT_3264             = 0xc2
	PTRACE_SETFPREGS                 = 0xf
	PTRACE_SET_THREAD_AREA           = 0x1a
	PTRACE_SET_WATCH_REGS            = 0xd1
	RLIMIT_AS                        = 0x6
	RLIMIT_MEMLOCK                   = 0x9
	RLIMIT_NOFILE                    = 0x5
	RLIMIT_NPROC                     = 0x8
	RLIMIT_RSS                       = 0x7
	RNDADDENTROPY                    = 0x80085203
	RNDADDTOENTCNT                   = 0x80045201
	RNDCLEARPOOL                     = 0x20005206
	RNDGETENTCNT                     = 0x40045200
	RNDGETPOOL                       = 0x40085202
	RNDRESEEDCRNG                    = 0x20005207
	RNDZAPENTCNT                     = 0x20005204
	RTC_AIE_OFF                      = 0x20007002
	RTC_AIE_ON                       = 0x20007001
	RTC_ALM_READ                     = 0x40247008
	RTC_ALM_SET                      = 0x80247007
	RTC_EPOCH_READ                   = 0x4008700d
	RTC_EPOCH_SET                    = 0x8008700e
	RTC_IRQP_READ                    = 0x4008700b
	RTC_IRQP_SET                     = 0x8008700c
	RTC_PARAM_GET                    = 0x80187013
	RTC_PARAM_SET                    = 0x80187014
	RTC_PIE_OFF                      = 0x20007006
	RTC_PIE_ON                       = 0x20007005
	RTC_PLL_GET                      = 0x40207011
	RTC_PLL_SET                      = 0x80207012
	RTC_RD_TIME                      = 0x40247009
	RTC_SET_TIME                     = 0x8024700a
	RTC_UIE_OFF                      = 0x20007004
	RTC_UIE_ON                       = 0x20007003
	RTC_VL_CLR                       = 0x20007014
	RTC_VL_READ                      = 0x40047013
	RTC_WIE_OFF                      = 0x20007010
	RTC_WIE_ON                       = 0x2000700f
	RTC_WKALM_RD                     = 0x40287010
	RTC_WKALM_SET                    = 0x8028700f
	SCM_TIMESTAMPING                 = 0x25
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
	SCM_TIMESTAMPNS                  = 0x23
	SCM_TXTIME                       = 0x3d
	SCM_WIFI_STATUS                  = 0x29
	SFD_CLOEXEC                      = 0x80000
	SFD_NONBLOCK                     = 0x80
	SIOCATMARK                       = 0x40047307
	SIOCGPGRP                        = 0x40047309
	SIOCGSTAMPNS_NEW                 = 0x40108907
	SIOCGSTAMP_NEW                   = 0x40108906
	SIOCINQ                          = 0x467f
	SIOCOUTQ                         = 0x7472
	SIOCSPGRP                        = 0x80047308
	SOCK_CLOEXEC                     = 0x80000
	SOCK_DGRAM                       = 0x1
	SOCK_NONBLOCK                    = 0x80
	SOCK_STREAM                      = 0x2
	SOL_SOCKET                       = 0xffff
	SO_ACCEPTCONN                    = 0x1009
	SO_ATTACH_BPF                    = 0x32
	SO_ATTACH_REUSEPORT_CBPF         = 0x33
	SO_ATTACH_REUSEPORT_EBPF         = 0x34
	SO_BINDTODEVICE                  = 0x19
	SO_BINDTOIFINDEX                 = 0x3e
	SO_BPF_EXTENSIONS                = 0x30
	SO_BROADCAST                     = 0x20
	SO_BSDCOMPAT                     = 0xe
	SO_BUF_LOCK                      = 0x48
	SO_BUSY_POLL                     = 0x2e
	SO_BUSY_POLL_BUDGET              = 0x46
	SO_CNX_ADVICE                    = 0x35
	SO_COOKIE                        = 0x39
	SO_DETACH_REUSEPORT_BPF          = 0x44
	SO_DOMAIN                        = 0x1029
	SO_DONTROUTE                     = 0x10
	SO_ERROR                         = 0x1007
	SO_INCOMING_CPU                  = 0x31
	SO_INCOMING_NAPI_ID              = 0x38
	SO_KEEPALIVE                     = 0x8
	SO_LINGER                        = 0x80
	SO_LOCK_FILTER                   = 0x2c
	SO_MARK                          = 0x24
	SO_MAX_PACING_RATE               = 0x2f
	SO_MEMINFO                       = 0x37
	SO_NETNS_COOKIE                  = 0x47
	SO_NOFCS                         = 0x2b
	SO_OOBINLINE                     = 0x100
	SO_PASSCRED                      = 0x11
	SO_PASSSEC                       = 0x22
	SO_PEEK_OFF                      = 0x2a
	SO_PEERCRED                      = 0x12
	SO_PEERGROUPS                    = 0x3b
	SO_PEERSEC                       = 0x1e
	SO_PREFER_BUSY_POLL              = 0x45
	SO_PROTOCOL                      = 0x1028
	SO_RCVBUF                        = 0x1002
	SO_RCVBUFFORCE                   = 0x21
	SO_RCVLOWAT                      = 0x1004
	SO_RCVMARK                       = 0x4b
	SO_RCVTIMEO                      = 0x1006
	SO_RCVTIMEO_NEW                  = 0x42
	SO_RCVTIMEO_OLD                  = 0x1006
	SO_RESERVE_MEM                   = 0x49
	SO_REUSEADDR                     = 0x4
	SO_REUSEPORT                     = 0x200
	SO_RXQ_OVFL                      = 0x28
	SO_SECURITY_AUTHENTICATION       = 0x16
	SO_SECURITY_ENCRYPTION_NETWORK   = 0x18
	SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
	SO_SELECT_ERR_QUEUE              = 0x2d
	SO_SNDBUF                        = 0x1001
	SO_SNDBUFFORCE                   = 0x1f
	SO_SNDLOWAT                      = 0x1003
	SO_SNDTIMEO                      = 0x1005
	SO_SNDTIMEO_NEW                  = 0x43
	SO_SNDTIMEO_OLD                  = 0x1005
	SO_STYLE                         = 0x1008
	SO_TIMESTAMPING                  = 0x25
	SO_TIMESTAMPING_NEW              = 0x41
	SO_TIMESTAMPING_OLD              = 0x25
	SO_TIMESTAMPNS                   = 0x23
	SO_TIMESTAMPNS_NEW               = 0x40
	SO_TIMESTAMPNS_OLD               = 0x23
	SO_TIMESTAMP_NEW                 = 0x3f
	SO_TXREHASH                      = 0x4a
	SO_TXTIME                        = 0x3d
	SO_TYPE                          = 0x1008
	SO_WIFI_STATUS                   = 0x29
	SO_ZEROCOPY                      = 0x3c
	TAB1                             = 0x800
	TAB2                             = 0x1000
	TAB3                             = 0x1800
	TABDLY                           = 0x1800
	TCFLSH                           = 0x5407
	TCGETA                           = 0x5401
	TCGETS                           = 0x540d
	TCGETS2                          = 0x4030542a
	TCSAFLUSH                        = 0x5410
	TCSBRK                           = 0x5405
	TCSBRKP                          = 0x5486
	TCSETA                           = 0x5402
	TCSETAF                          = 0x5404
	TCSETAW                          = 0x5403
	TCSETS                           = 0x540e
	TCSETS2                          = 0x8030542b
	TCSETSF                          = 0x5410
	TCSETSF2                         = 0x8030542d
	TCSETSW                          = 0x540f
	TCSETSW2                         = 0x8030542c
	TCXONC                           = 0x5406
	TFD_CLOEXEC                      = 0x80000
	TFD_NONBLOCK                     = 0x80
	TIOCCBRK                         = 0x5428
	TIOCCONS                         = 0x80047478
	TIOCEXCL                         = 0x740d
	TIOCGDEV                         = 0x40045432
	TIOCGETD                         = 0x7400
	TIOCGETP                         = 0x7408
	TIOCGEXCL                        = 0x40045440
	TIOCGICOUNT                      = 0x5492
	TIOCGISO7816                     = 0x40285442
	TIOCGLCKTRMIOS                   = 0x548b
	TIOCGLTC                         = 0x7474
	TIOCGPGRP                        = 0x40047477
	TIOCGPKT                         = 0x40045438
	TIOCGPTLCK                       = 0x40045439
	TIOCGPTN                         = 0x40045430
	TIOCGPTPEER                      = 0x20005441
	TIOCGRS485                       = 0x4020542e
	TIOCGSERIAL                      = 0x5484
	TIOCGSID                         = 0x7416
	TIOCGSOFTCAR                     = 0x5481
	TIOCGWINSZ                       = 0x40087468
	TIOCINQ                          = 0x467f
	TIOCLINUX                        = 0x5483
	TIOCMBIC                         = 0x741c
	TIOCMBIS                         = 0x741b
	TIOCMGET                         = 0x741d
	TIOCMIWAIT                       = 0x5491
	TIOCMSET                         = 0x741a
	TIOCM_CAR                        = 0x100
	TIOCM_CD                         = 0x100
	TIOCM_CTS                        = 0x40
	TIOCM_DSR                        = 0x400
	TIOCM_RI                         = 0x200
	TIOCM_RNG                        = 0x200
	TIOCM_SR                         = 0x20
	TIOCM_ST                         = 0x10
	TIOCNOTTY                        = 0x5471
	TIOCNXCL                         = 0x740e
	TIOCOUTQ                         = 0x7472
	TIOCPKT                          = 0x5470
	TIOCSBRK                         = 0x5427
	TIOCSCTTY                        = 0x5480
	TIOCSERCONFIG                    = 0x5488
	TIOCSERGETLSR                    = 0x548e
	TIOCSERGETMULTI                  = 0x548f
	TIOCSERGSTRUCT                   = 0x548d
	TIOCSERGWILD                     = 0x5489
	TIOCSERSETMULTI                  = 0x5490
	TIOCSERSWILD                     = 0x548a
	TIOCSER_TEMT                     = 0x1
	TIOCSETD                         = 0x7401
	TIOCSETN                         = 0x740a
	TIOCSETP                         = 0x7409
	TIOCSIG                          = 0x80045436
	TIOCSISO7816                     = 0xc0285443
	TIOCSLCKTRMIOS                   = 0x548c
	TIOCSLTC                         = 0x7475
	TIOCSPGRP                        = 0x80047476
	TIOCSPTLCK                       = 0x80045431
	TIOCSRS485                       = 0xc020542f
	TIOCSSERIAL                      = 0x5485
	TIOCSSOFTCAR                     = 0x5482
	TIOCSTI                          = 0x5472
	TIOCSWINSZ                       = 0x80087467
	TIOCVHANGUP                      = 0x5437
	TOSTOP                           = 0x8000
	TUNATTACHFILTER                  = 0x801054d5
	TUNDETACHFILTER                  = 0x801054d6
	TUNGETDEVNETNS                   = 0x200054e3
	TUNGETFEATURES                   = 0x400454cf
	TUNGETFILTER                     = 0x401054db
	TUNGETIFF                        = 0x400454d2
	TUNGETSNDBUF                     = 0x400454d3
	TUNGETVNETBE                     = 0x400454df
	TUNGETVNETHDRSZ                  = 0x400454d7
	TUNGETVNETLE                     = 0x400454dd
	TUNSETCARRIER                    = 0x800454e2
	TUNSETDEBUG                      = 0x800454c9
	TUNSETFILTEREBPF                 = 0x400454e1
	TUNSETGROUP                      = 0x800454ce
	TUNSETIFF                        = 0x800454ca
	TUNSETIFINDEX                    = 0x800454da
	TUNSETLINK                       = 0x800454cd
	TUNSETNOCSUM                     = 0x800454c8
	TUNSETOFFLOAD                    = 0x800454d0
	TUNSETOWNER                      = 0x800454cc
	TUNSETPERSIST                    = 0x800454cb
	TUNSETQUEUE                      = 0x800454d9
	TUNSETSNDBUF                     = 0x800454d4
	TUNSETSTEERINGEBPF               = 0x400454e0
	TUNSETTXFILTER                   = 0x800454d1
	TUNSETVNETBE                     = 0x800454de
	TUNSETVNETHDRSZ                  = 0x800454d8
	TUNSETVNETLE                     = 0x800454dc
	UBI_IOCATT                       = 0x80186f40
	UBI_IOCDET                       = 0x80046f41
	UBI_IOCEBCH                      = 0x80044f02
	UBI_IOCEBER                      = 0x80044f01
	UBI_IOCEBISMAP                   = 0x40044f05
	UBI_IOCEBMAP                     = 0x80084f03
	UBI_IOCEBUNMAP                   = 0x80044f04
	UBI_IOCMKVOL                     = 0x80986f00
	UBI_IOCRMVOL                     = 0x80046f01
	UBI_IOCRNVOL                     = 0x91106f03
	UBI_IOCRPEB                      = 0x80046f04
	UBI_IOCRSVOL                     = 0x800c6f02
	UBI_IOCSETVOLPROP                = 0x80104f06
	UBI_IOCSPEB                      = 0x80046f05
	UBI_IOCVOLCRBLK                  = 0x80804f07
	UBI_IOCVOLRMBLK                  = 0x20004f08
	UBI_IOCVOLUP                     = 0x80084f00
	VDISCARD                         = 0xd
	VEOF                             = 0x10
	VEOL                             = 0x11
	VEOL2                            = 0x6
	VMIN                             = 0x4
	VREPRINT                         = 0xc
	VSTART                           = 0x8
	VSTOP                            = 0x9
	VSUSP                            = 0xa
	VSWTC                            = 0x7
	VSWTCH                           = 0x7
	VT1                              = 0x4000
	VTDLY                            = 0x4000
	VTIME                            = 0x5
	VWERASE                          = 0xe
	WDIOC_GETBOOTSTATUS              = 0x40045702
	WDIOC_GETPRETIMEOUT              = 0x40045709
	WDIOC_GETSTATUS                  = 0x40045701
	WDIOC_GETSUPPORT                 = 0x40285700
	WDIOC_GETTEMP                    = 0x40045703
	WDIOC_GETTIMELEFT                = 0x4004570a
	WDIOC_GETTIMEOUT                 = 0x40045707
	WDIOC_KEEPALIVE                  = 0x40045705
	WDIOC_SETOPTIONS                 = 0x40045704
	WORDSIZE                         = 0x40
	XCASE                            = 0x4
	XTABS                            = 0x1800
	_HIDIOCGRAWNAME                  = 0x40804804
	_HIDIOCGRAWPHYS                  = 0x40404805
	_HIDIOCGRAWUNIQ                  = 0x40404808
)

// Errors
const (
	EADDRINUSE      = syscall.Errno(0x7d)
	EADDRNOTAVAIL   = syscall.Errno(0x7e)
	EADV            = syscall.Errno(0x44)
	EAFNOSUPPORT    = syscall.Errno(0x7c)
	EALREADY        = syscall.Errno(0x95)
	EBADE           = syscall.Errno(0x32)
	EBADFD          = syscall.Errno(0x51)
	EBADMSG         = syscall.Errno(0x4d)
	EBADR           = syscall.Errno(0x33)
	EBADRQC         = syscall.Errno(0x36)
	EBADSLT         = syscall.Errno(0x37)
	EBFONT          = syscall.Errno(0x3b)
	ECANCELED       = syscall.Errno(0x9e)
	ECHRNG          = syscall.Errno(0x25)
	ECOMM           = syscall.Errno(0x46)
	ECONNABORTED    = syscall.Errno(0x82)
	ECONNREFUSED    = syscall.Errno(0x92)
	ECONNRESET      = syscall.Errno(0x83)
	EDEADLK         = syscall.Errno(0x2d)
	EDEADLOCK       = syscall.Errno(0x38)
	EDESTADDRREQ    = syscall.Errno(0x60)
	EDOTDOT         = syscall.Errno(0x49)
	EDQUOT          = syscall.Errno(0x46d)
	EHOSTDOWN       = syscall.Errno(0x93)
	EHOSTUNREACH    = syscall.Errno(0x94)
	EHWPOISON       = syscall.Errno(0xa8)
	EIDRM           = syscall.Errno(0x24)
	EILSEQ          = syscall.Errno(0x58)
	EINIT           = syscall.Errno(0x8d)
	EINPROGRESS     = syscall.Errno(0x96)
	EISCONN         = syscall.Errno(0x85)
	EISNAM          = syscall.Errno(0x8b)
	EKEYEXPIRED     = syscall.Errno(0xa2)
	EKEYREJECTED    = syscall.Errno(0xa4)
	EKEYREVOKED     = syscall.Errno(0xa3)
	EL2HLT          = syscall.Errno(0x2c)
	EL2NSYNC        = syscall.Errno(0x26)
	EL3HLT          = syscall.Errno(0x27)
	EL3RST          = syscall.Errno(0x28)
	ELIBACC         = syscall.Errno(0x53)
	ELIBBAD         = syscall.Errno(0x54)
	ELIBEXEC        = syscall.Errno(0x57)
	ELIBMAX         = syscall.Errno(0x56)
	ELIBSCN         = syscall.Errno(0x55)
	ELNRNG          = syscall.Errno(0x29)
	ELOOP           = syscall.Errno(0x5a)
	EMEDIUMTYPE     = syscall.Errno(0xa0)
	EMSGSIZE        = syscall.Errno(0x61)
	EMULTIHOP       = syscall.Errno(0x4a)
	ENAMETOOLONG    = syscall.Errno(0x4e)
	ENAVAIL         = syscall.Errno(0x8a)
	ENETDOWN        = syscall.Errno(0x7f)
	ENETRESET       = syscall.Errno(0x81)
	ENETUNREACH     = syscall.Errno(0x80)
	ENOANO          = syscall.Errno(0x35)
	ENOBUFS         = syscall.Errno(0x84)
	ENOCSI          = syscall.Errno(0x2b)
	ENODATA         = syscall.Errno(0x3d)
	ENOKEY          = syscall.Errno(0xa1)
	ENOLCK          = syscall.Errno(0x2e)
	ENOLINK         = syscall.Errno(0x43)
	ENOMEDIUM       = syscall.Errno(0x9f)
	ENOMSG          = syscall.Errno(0x23)
	ENONET          = syscall.Errno(0x40)
	ENOPKG          = syscall.Errno(0x41)
	ENOPROTOOPT     = syscall.Errno(0x63)
	ENOSR           = syscall.Errno(0x3f)
	ENOSTR          = syscall.Errno(0x3c)
	ENOSYS          = syscall.Errno(0x59)
	ENOTCONN        = syscall.Errno(0x86)
	ENOTEMPTY       = syscall.Errno(0x5d)
	ENOTNAM         = syscall.Errno(0x89)
	ENOTRECOVERABLE = syscall.Errno(0xa6)
	ENOTSOCK        = syscall.Errno(0x5f)
	ENOTSUP         = syscall.Errno(0x7a)
	ENOTUNIQ        = syscall.Errno(0x50)
	EOPNOTSUPP      = syscall.Errno(0x7a)
	EOVERFLOW       = syscall.Errno(0x4f)
	EOWNERDEAD      = syscall.Errno(0xa5)
	EPFNOSUPPORT    = syscall.Errno(0x7b)
	EPROTO          = syscall.Errno(0x47)
	EPROTONOSUPPORT = syscall.Errno(0x78)
	EPROTOTYPE      = syscall.Errno(0x62)
	EREMCHG         = syscall.Errno(0x52)
	EREMDEV         = syscall.Errno(0x8e)
	EREMOTE         = syscall.Errno(0x42)
	EREMOTEIO       = syscall.Errno(0x8c)
	ERESTART        = syscall.Errno(0x5b)
	ERFKILL         = syscall.Errno(0xa7)
	ESHUTDOWN       = syscall.Errno(0x8f)
	ESOCKTNOSUPPORT = syscall.Errno(0x79)
	ESRMNT          = syscall.Errno(0x45)
	ESTALE          = syscall.Errno(0x97)
	ESTRPIPE        = syscall.Errno(0x5c)
	ETIME           = syscall.Errno(0x3e)
	ETIMEDOUT       = syscall.Errno(0x91)
	ETOOMANYREFS    = syscall.Errno(0x90)
	EUCLEAN         = syscall.Errno(0x87)
	EUNATCH         = syscall.Errno(0x2a)
	EUSERS          = syscall.Errno(0x5e)
	EXFULL          = syscall.Errno(0x34)
)

// Signals
const (
	SIGBUS    = syscall.Signal(0xa)
	SIGCHLD   = syscall.Signal(0x12)
	SIGCLD    = syscall.Signal(0x12)
	SIGCONT   = syscall.Signal(0x19)
	SIGEMT    = syscall.Signal(0x7)
	SIGIO     = syscall.Signal(0x16)
	SIGPOLL   = syscall.Signal(0x16)
	SIGPROF   = syscall.Signal(0x1d)
	SIGPWR    = syscall.Signal(0x13)
	SIGSTOP   = syscall.Signal(0x17)
	SIGSYS    = syscall.Signal(0xc)
	SIGTSTP   = syscall.Signal(0x18)
	SIGTTIN   = syscall.Signal(0x1a)
	SIGTTOU   = syscall.Signal(0x1b)
	SIGURG    = syscall.Signal(0x15)
	SIGUSR1   = syscall.Signal(0x10)
	SIGUSR2   = syscall.Signal(0x11)
	SIGVTALRM = syscall.Signal(0x1c)
	SIGWINCH  = syscall.Signal(0x14)
	SIGXCPU   = syscall.Signal(0x1e)
	SIGXFSZ   = syscall.Signal(0x1f)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "no such device or address"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EAGAIN", "resource temporarily unavailable"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device or resource busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "invalid cross-device link"},
	{19, "ENODEV", "no such device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "numerical result out of range"},
	{35, "ENOMSG", "no message of desired type"},
	{36, "EIDRM", "identifier removed"},
	{37, "ECHRNG", "channel number out of range"},
	{38, "EL2NSYNC", "level 2 not synchronized"},
	{39, "EL3HLT", "level 3 halted"},
	{40, "EL3RST", "level 3 reset"},
	{41, "ELNRNG", "link number out of range"},
	{42, "EUNATCH", "protocol driver not attached"},
	{43, "ENOCSI", "no CSI structure available"},
	{44, "EL2HLT", "level 2 halted"},
	{45, "EDEADLK", "resource deadlock avoided"},
	{46, "ENOLCK", "no locks available"},
	{50, "EBADE", "invalid exchange"},
	{51, "EBADR", "invalid request descriptor"},
	{52, "EXFULL", "exchange full"},
	{53, "ENOANO", "no anode"},
	{54, "EBADRQC", "invalid request code"},
	{55, "EBADSLT", "invalid slot"},
	{56, "EDEADLOCK", "file locking deadlock error"},
	{59, "EBFONT", "bad font file format"},
	{60, "ENOSTR", "device not a stream"},
	{61, "ENODATA", "no data available"},
	{62, "ETIME", "timer expired"},
	{63, "ENOSR", "out of streams resources"},
	{64, "ENONET", "machine is not on the network"},
	{65, "ENOPKG", "package not installed"},
	{66, "EREMOTE", "object is remote"},
	{67, "ENOLINK", "link has been severed"},
	{68, "EADV", "advertise error"},
	{69, "ESRMNT", "srmount error"},
	{70, "ECOMM", "communication error on send"},
	{71, "EPROTO", "protocol error"},
	{73, "EDOTDOT", "RFS specific error"},
	{74, "EMULTIHOP", "multihop attempted"},
	{77, "EBADMSG", "bad message"},
	{78, "ENAMETOOLONG", "file name too long"},
	{79, "EOVERFLOW", "value too large for defined data type"},
	{80, "ENOTUNIQ", "name not unique on network"},
	{81, "EBADFD", "file descriptor in bad state"},
	{82, "EREMCHG", "remote address changed"},
	{83, "ELIBACC", "can not access a needed shared library"},
	{84, "ELIBBAD", "accessing a corrupted shared library"},
	{85, "ELIBSCN", ".lib section in a.out corrupted"},
	{86, "ELIBMAX", "attempting to link in too many shared libraries"},
	{87, "ELIBEXEC", "cannot exec a shared library directly"},
	{88, "EILSEQ", "invalid or incomplete multibyte or wide character"},
	{89, "ENOSYS", "function not implemented"},
	{90, "ELOOP", "too many levels of symbolic links"},
	{91, "ERESTART", "interrupted system call should be restarted"},
	{92, "ESTRPIPE", "streams pipe error"},
	{93, "ENOTEMPTY", "directory not empty"},
	{94, "EUSERS", "too many users"},
	{95, "ENOTSOCK", "socket operation on non-socket"},
	{96, "EDESTADDRREQ", "destination address required"},
	{97, "EMSGSIZE", "message too long"},
	{98, "EPROTOTYPE", "protocol wrong type for socket"},
	{99, "ENOPROTOOPT", "protocol not available"},
	{120, "EPROTONOSUPPORT", "protocol not supported"},
	{121, "ESOCKTNOSUPPORT", "socket type not supported"},
	{122, "ENOTSUP", "operation not supported"},
	{123, "EPFNOSUPPORT", "protocol family not supported"},
	{124, "EAFNOSUPPORT", "address family not supported by protocol"},
	{125, "EADDRINUSE", "address already in use"},
	{126, "EADDRNOTAVAIL", "cannot assign requested address"},
	{127, "ENETDOWN", "network is down"},
	{128, "ENETUNREACH", "network is unreachable"},
	{129, "ENETRESET", "network dropped connection on reset"},
	{130, "ECONNABORTED", "software caused connection abort"},
	{131, "ECONNRESET", "connection reset by peer"},
	{132, "ENOBUFS", "no buffer space available"},
	{133, "EISCONN", "transport endpoint is already connected"},
	{134, "ENOTCONN", "transport endpoint is not connected"},
	{135, "EUCLEAN", "structure needs cleaning"},
	{137, "ENOTNAM", "not a XENIX named type file"},
	{138, "ENAVAIL", "no XENIX semaphores available"},
	{139, "EISNAM", "is a named type file"},
	{140, "EREMOTEIO", "remote I/O error"},
	{141, "EINIT", "unknown error 141"},
	{142, "EREMDEV", "unknown error 142"},
	{143, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
	{144, "ETOOMANYREFS", "too many references: cannot splice"},
	{145, "ETIMEDOUT", "connection timed out"},
	{146, "ECONNREFUSED", "connection refused"},
	{147, "EHOSTDOWN", "host is down"},
	{148, "EHOSTUNREACH", "no route to host"},
	{149, "EALREADY", "operation already in progress"},
	{150, "EINPROGRESS", "operation now in progress"},
	{151, "ESTALE", "stale file handle"},
	{158, "ECANCELED", "operation canceled"},
	{159, "ENOMEDIUM", "no medium found"},
	{160, "EMEDIUMTYPE", "wrong medium type"},
	{161, "ENOKEY", "required key not available"},
	{162, "EKEYEXPIRED", "key has expired"},
	{163, "EKEYREVOKED", "key has been revoked"},
	{164, "EKEYREJECTED", "key was rejected by service"},
	{165, "EOWNERDEAD", "owner died"},
	{166, "ENOTRECOVERABLE", "state not recoverable"},
	{167, "ERFKILL", "operation not possible due to RF-kill"},
	{168, "EHWPOISON", "memory page has hardware error"},
	{1133, "EDQUOT", "disk quota exceeded"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/breakpoint trap"},
	{6, "SIGABRT", "aborted"},
	{7, "SIGEMT", "EMT trap"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus error"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGSYS", "bad system call"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGUSR1", "user defined signal 1"},
	{17, "SIGUSR2", "user defined signal 2"},
	{18, "SIGCHLD", "child exited"},
	{19, "SIGPWR", "power failure"},
	{20, "SIGWINCH", "window changed"},
	{21, "SIGURG", "urgent I/O condition"},
	{22, "SIGIO", "I/O possible"},
	{23, "SIGSTOP", "stopped (signal)"},
	{24, "SIGTSTP", "stopped"},
	{25, "SIGCONT", "continued"},
	{26, "SIGTTIN", "stopped (tty input)"},
	{27, "SIGTTOU", "stopped (tty output)"},
	{28, "SIGVTALRM", "virtual timer expired"},
	{29, "SIGPROF", "profiling timer expired"},
	{30, "SIGXCPU", "CPU time limit exceeded"},
	{31, "SIGXFSZ", "file size limit exceeded"},
}
 07070100000E33000081A4000000000000000000000001645E367C0000884C000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go  // mkerrors.sh -Wall -Werror -static -I/tmp/mipsle/include
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build mipsle && linux
// +build mipsle,linux

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -Wall -Werror -static -I/tmp/mipsle/include _const.go

package unix

import "syscall"

const (
	B1000000                         = 0x1008
	B115200                          = 0x1002
	B1152000                         = 0x1009
	B1500000                         = 0x100a
	B2000000                         = 0x100b
	B230400                          = 0x1003
	B2500000                         = 0x100c
	B3000000                         = 0x100d
	B3500000                         = 0x100e
	B4000000                         = 0x100f
	B460800                          = 0x1004
	B500000                          = 0x1005
	B57600                           = 0x1001
	B576000                          = 0x1006
	B921600                          = 0x1007
	BLKBSZGET                        = 0x40041270
	BLKBSZSET                        = 0x80041271
	BLKFLSBUF                        = 0x20001261
	BLKFRAGET                        = 0x20001265
	BLKFRASET                        = 0x20001264
	BLKGETSIZE                       = 0x20001260
	BLKGETSIZE64                     = 0x40041272
	BLKPBSZGET                       = 0x2000127b
	BLKRAGET                         = 0x20001263
	BLKRASET                         = 0x20001262
	BLKROGET                         = 0x2000125e
	BLKROSET                         = 0x2000125d
	BLKRRPART                        = 0x2000125f
	BLKSECTGET                       = 0x20001267
	BLKSECTSET                       = 0x20001266
	BLKSSZGET                        = 0x20001268
	BOTHER                           = 0x1000
	BS1                              = 0x2000
	BSDLY                            = 0x2000
	CBAUD                            = 0x100f
	CBAUDEX                          = 0x1000
	CIBAUD                           = 0x100f0000
	CLOCAL                           = 0x800
	CR1                              = 0x200
	CR2                              = 0x400
	CR3                              = 0x600
	CRDLY                            = 0x600
	CREAD                            = 0x80
	CS6                              = 0x10
	CS7                              = 0x20
	CS8                              = 0x30
	CSIZE                            = 0x30
	CSTOPB                           = 0x40
	ECCGETLAYOUT                     = 0x41484d11
	ECCGETSTATS                      = 0x40104d12
	ECHOCTL                          = 0x200
	ECHOE                            = 0x10
	ECHOK                            = 0x20
	ECHOKE                           = 0x800
	ECHONL                           = 0x40
	ECHOPRT                          = 0x400
	EFD_CLOEXEC                      = 0x80000
	EFD_NONBLOCK                     = 0x80
	EPOLL_CLOEXEC                    = 0x80000
	EXTPROC                          = 0x10000
	FF1                              = 0x8000
	FFDLY                            = 0x8000
	FICLONE                          = 0x80049409
	FICLONERANGE                     = 0x8020940d
	FLUSHO                           = 0x2000
	FS_IOC_ENABLE_VERITY             = 0x80806685
	FS_IOC_GETFLAGS                  = 0x40046601
	FS_IOC_GET_ENCRYPTION_NONCE      = 0x4010661b
	FS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615
	FS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614
	FS_IOC_SETFLAGS                  = 0x80046602
	FS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613
	F_GETLK                          = 0x21
	F_GETLK64                        = 0x21
	F_GETOWN                         = 0x17
	F_RDLCK                          = 0x0
	F_SETLK                          = 0x22
	F_SETLK64                        = 0x22
	F_SETLKW                         = 0x23
	F_SETLKW64                       = 0x23
	F_SETOWN                         = 0x18
	F_UNLCK                          = 0x2
	F_WRLCK                          = 0x1
	HIDIOCGRAWINFO                   = 0x40084803
	HIDIOCGRDESC                     = 0x50044802
	HIDIOCGRDESCSIZE                 = 0x40044801
	HUPCL                            = 0x400
	ICANON                           = 0x2
	IEXTEN                           = 0x100
	IN_CLOEXEC                       = 0x80000
	IN_NONBLOCK                      = 0x80
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9
	ISIG                             = 0x1
	IUCLC                            = 0x200
	IXOFF                            = 0x1000
	IXON                             = 0x400
	MAP_ANON                         = 0x800
	MAP_ANONYMOUS                    = 0x800
	MAP_DENYWRITE                    = 0x2000
	MAP_EXECUTABLE                   = 0x4000
	MAP_GROWSDOWN                    = 0x1000
	MAP_HUGETLB                      = 0x80000
	MAP_LOCKED                       = 0x8000
	MAP_NONBLOCK                     = 0x20000
	MAP_NORESERVE                    = 0x400
	MAP_POPULATE                     = 0x10000
	MAP_RENAME                       = 0x800
	MAP_STACK                        = 0x40000
	MCL_CURRENT                      = 0x1
	MCL_FUTURE                       = 0x2
	MCL_ONFAULT                      = 0x4
	MEMERASE                         = 0x80084d02
	MEMERASE64                       = 0x80104d14
	MEMGETBADBLOCK                   = 0x80084d0b
	MEMGETINFO                       = 0x40204d01
	MEMGETOOBSEL                     = 0x40c84d0a
	MEMGETREGIONCOUNT                = 0x40044d07
	MEMISLOCKED                      = 0x40084d17
	MEMLOCK                          = 0x80084d05
	MEMREAD                          = 0xc0404d1a
	MEMREADOOB                       = 0xc00c4d04
	MEMSETBADBLOCK                   = 0x80084d0c
	MEMUNLOCK                        = 0x80084d06
	MEMWRITEOOB                      = 0xc00c4d03
	MTDFILEMODE                      = 0x20004d13
	NFDBITS                          = 0x20
	NLDLY                            = 0x100
	NOFLSH                           = 0x80
	NS_GET_NSTYPE                    = 0x2000b703
	NS_GET_OWNER_UID                 = 0x2000b704
	NS_GET_PARENT                    = 0x2000b702
	NS_GET_USERNS                    = 0x2000b701
	OLCUC                            = 0x2
	ONLCR                            = 0x4
	OTPERASE                         = 0x800c4d19
	OTPGETREGIONCOUNT                = 0x80044d0e
	OTPGETREGIONINFO                 = 0x800c4d0f
	OTPLOCK                          = 0x400c4d10
	OTPSELECT                        = 0x40044d0d
	O_APPEND                         = 0x8
	O_ASYNC                          = 0x1000
	O_CLOEXEC                        = 0x80000
	O_CREAT                          = 0x100
	O_DIRECT                         = 0x8000
	O_DIRECTORY                      = 0x10000
	O_DSYNC                          = 0x10
	O_EXCL                           = 0x400
	O_FSYNC                          = 0x4010
	O_LARGEFILE                      = 0x2000
	O_NDELAY                         = 0x80
	O_NOATIME                        = 0x40000
	O_NOCTTY                         = 0x800
	O_NOFOLLOW                       = 0x20000
	O_NONBLOCK                       = 0x80
	O_PATH                           = 0x200000
	O_RSYNC                          = 0x4010
	O_SYNC                           = 0x4010
	O_TMPFILE                        = 0x410000
	O_TRUNC                          = 0x200
	PARENB                           = 0x100
	PARODD                           = 0x200
	PENDIN                           = 0x4000
	PERF_EVENT_IOC_DISABLE           = 0x20002401
	PERF_EVENT_IOC_ENABLE            = 0x20002400
	PERF_EVENT_IOC_ID                = 0x40042407
	PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8004240b
	PERF_EVENT_IOC_PAUSE_OUTPUT      = 0x80042409
	PERF_EVENT_IOC_PERIOD            = 0x80082404
	PERF_EVENT_IOC_QUERY_BPF         = 0xc004240a
	PERF_EVENT_IOC_REFRESH           = 0x20002402
	PERF_EVENT_IOC_RESET             = 0x20002403
	PERF_EVENT_IOC_SET_BPF           = 0x80042408
	PERF_EVENT_IOC_SET_FILTER        = 0x80042406
	PERF_EVENT_IOC_SET_OUTPUT        = 0x20002405
	PPPIOCATTACH                     = 0x8004743d
	PPPIOCATTCHAN                    = 0x80047438
	PPPIOCBRIDGECHAN                 = 0x80047435
	PPPIOCCONNECT                    = 0x8004743a
	PPPIOCDETACH                     = 0x8004743c
	PPPIOCDISCONN                    = 0x20007439
	PPPIOCGASYNCMAP                  = 0x40047458
	PPPIOCGCHAN                      = 0x40047437
	PPPIOCGDEBUG                     = 0x40047441
	PPPIOCGFLAGS                     = 0x4004745a
	PPPIOCGIDLE                      = 0x4008743f
	PPPIOCGIDLE32                    = 0x4008743f
	PPPIOCGIDLE64                    = 0x4010743f
	PPPIOCGL2TPSTATS                 = 0x40487436
	PPPIOCGMRU                       = 0x40047453
	PPPIOCGRASYNCMAP                 = 0x40047455
	PPPIOCGUNIT                      = 0x40047456
	PPPIOCGXASYNCMAP                 = 0x40207450
	PPPIOCSACTIVE                    = 0x80087446
	PPPIOCSASYNCMAP                  = 0x80047457
	PPPIOCSCOMPRESS                  = 0x800c744d
	PPPIOCSDEBUG                     = 0x80047440
	PPPIOCSFLAGS                     = 0x80047459
	PPPIOCSMAXCID                    = 0x80047451
	PPPIOCSMRRU                      = 0x8004743b
	PPPIOCSMRU                       = 0x80047452
	PPPIOCSNPMODE                    = 0x8008744b
	PPPIOCSPASS                      = 0x80087447
	PPPIOCSRASYNCMAP                 = 0x80047454
	PPPIOCSXASYNCMAP                 = 0x8020744f
	PPPIOCUNBRIDGECHAN               = 0x20007434
	PPPIOCXFERUNIT                   = 0x2000744e
	PR_SET_PTRACER_ANY               = 0xffffffff
	PTRACE_GETFPREGS                 = 0xe
	PTRACE_GET_THREAD_AREA           = 0x19
	PTRACE_GET_THREAD_AREA_3264      = 0xc4
	PTRACE_GET_WATCH_REGS            = 0xd0
	PTRACE_OLDSETOPTIONS             = 0x15
	PTRACE_PEEKDATA_3264             = 0xc1
	PTRACE_PEEKTEXT_3264             = 0xc0
	PTRACE_POKEDATA_3264             = 0xc3
	PTRACE_POKETEXT_3264             = 0xc2
	PTRACE_SETFPREGS                 = 0xf
	PTRACE_SET_THREAD_AREA           = 0x1a
	PTRACE_SET_WATCH_REGS            = 0xd1
	RLIMIT_AS                        = 0x6
	RLIMIT_MEMLOCK                   = 0x9
	RLIMIT_NOFILE                    = 0x5
	RLIMIT_NPROC                     = 0x8
	RLIMIT_RSS                       = 0x7
	RNDADDENTROPY                    = 0x80085203
	RNDADDTOENTCNT                   = 0x80045201
	RNDCLEARPOOL                     = 0x20005206
	RNDGETENTCNT                     = 0x40045200
	RNDGETPOOL                       = 0x40085202
	RNDRESEEDCRNG                    = 0x20005207
	RNDZAPENTCNT                     = 0x20005204
	RTC_AIE_OFF                      = 0x20007002
	RTC_AIE_ON                       = 0x20007001
	RTC_ALM_READ                     = 0x40247008
	RTC_ALM_SET                      = 0x80247007
	RTC_EPOCH_READ                   = 0x4004700d
	RTC_EPOCH_SET                    = 0x8004700e
	RTC_IRQP_READ                    = 0x4004700b
	RTC_IRQP_SET                     = 0x8004700c
	RTC_PARAM_GET                    = 0x80187013
	RTC_PARAM_SET                    = 0x80187014
	RTC_PIE_OFF                      = 0x20007006
	RTC_PIE_ON                       = 0x20007005
	RTC_PLL_GET                      = 0x401c7011
	RTC_PLL_SET                      = 0x801c7012
	RTC_RD_TIME                      = 0x40247009
	RTC_SET_TIME                     = 0x8024700a
	RTC_UIE_OFF                      = 0x20007004
	RTC_UIE_ON                       = 0x20007003
	RTC_VL_CLR                       = 0x20007014
	RTC_VL_READ                      = 0x40047013
	RTC_WIE_OFF                      = 0x20007010
	RTC_WIE_ON                       = 0x2000700f
	RTC_WKALM_RD                     = 0x40287010
	RTC_WKALM_SET                    = 0x8028700f
	SCM_TIMESTAMPING                 = 0x25
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
	SCM_TIMESTAMPNS                  = 0x23
	SCM_TXTIME                       = 0x3d
	SCM_WIFI_STATUS                  = 0x29
	SFD_CLOEXEC                      = 0x80000
	SFD_NONBLOCK                     = 0x80
	SIOCATMARK                       = 0x40047307
	SIOCGPGRP                        = 0x40047309
	SIOCGSTAMPNS_NEW                 = 0x40108907
	SIOCGSTAMP_NEW                   = 0x40108906
	SIOCINQ                          = 0x467f
	SIOCOUTQ                         = 0x7472
	SIOCSPGRP                        = 0x80047308
	SOCK_CLOEXEC                     = 0x80000
	SOCK_DGRAM                       = 0x1
	SOCK_NONBLOCK                    = 0x80
	SOCK_STREAM                      = 0x2
	SOL_SOCKET                       = 0xffff
	SO_ACCEPTCONN                    = 0x1009
	SO_ATTACH_BPF                    = 0x32
	SO_ATTACH_REUSEPORT_CBPF         = 0x33
	SO_ATTACH_REUSEPORT_EBPF         = 0x34
	SO_BINDTODEVICE                  = 0x19
	SO_BINDTOIFINDEX                 = 0x3e
	SO_BPF_EXTENSIONS                = 0x30
	SO_BROADCAST                     = 0x20
	SO_BSDCOMPAT                     = 0xe
	SO_BUF_LOCK                      = 0x48
	SO_BUSY_POLL                     = 0x2e
	SO_BUSY_POLL_BUDGET              = 0x46
	SO_CNX_ADVICE                    = 0x35
	SO_COOKIE                        = 0x39
	SO_DETACH_REUSEPORT_BPF          = 0x44
	SO_DOMAIN                        = 0x1029
	SO_DONTROUTE                     = 0x10
	SO_ERROR                         = 0x1007
	SO_INCOMING_CPU                  = 0x31
	SO_INCOMING_NAPI_ID              = 0x38
	SO_KEEPALIVE                     = 0x8
	SO_LINGER                        = 0x80
	SO_LOCK_FILTER                   = 0x2c
	SO_MARK                          = 0x24
	SO_MAX_PACING_RATE               = 0x2f
	SO_MEMINFO                       = 0x37
	SO_NETNS_COOKIE                  = 0x47
	SO_NOFCS                         = 0x2b
	SO_OOBINLINE                     = 0x100
	SO_PASSCRED                      = 0x11
	SO_PASSSEC                       = 0x22
	SO_PEEK_OFF                      = 0x2a
	SO_PEERCRED                      = 0x12
	SO_PEERGROUPS                    = 0x3b
	SO_PEERSEC                       = 0x1e
	SO_PREFER_BUSY_POLL              = 0x45
	SO_PROTOCOL                      = 0x1028
	SO_RCVBUF                        = 0x1002
	SO_RCVBUFFORCE                   = 0x21
	SO_RCVLOWAT                      = 0x1004
	SO_RCVMARK                       = 0x4b
	SO_RCVTIMEO                      = 0x1006
	SO_RCVTIMEO_NEW                  = 0x42
	SO_RCVTIMEO_OLD                  = 0x1006
	SO_RESERVE_MEM                   = 0x49
	SO_REUSEADDR                     = 0x4
	SO_REUSEPORT                     = 0x200
	SO_RXQ_OVFL                      = 0x28
	SO_SECURITY_AUTHENTICATION       = 0x16
	SO_SECURITY_ENCRYPTION_NETWORK   = 0x18
	SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
	SO_SELECT_ERR_QUEUE              = 0x2d
	SO_SNDBUF                        = 0x1001
	SO_SNDBUFFORCE                   = 0x1f
	SO_SNDLOWAT                      = 0x1003
	SO_SNDTIMEO                      = 0x1005
	SO_SNDTIMEO_NEW                  = 0x43
	SO_SNDTIMEO_OLD                  = 0x1005
	SO_STYLE                         = 0x1008
	SO_TIMESTAMPING                  = 0x25
	SO_TIMESTAMPING_NEW              = 0x41
	SO_TIMESTAMPING_OLD              = 0x25
	SO_TIMESTAMPNS                   = 0x23
	SO_TIMESTAMPNS_NEW               = 0x40
	SO_TIMESTAMPNS_OLD               = 0x23
	SO_TIMESTAMP_NEW                 = 0x3f
	SO_TXREHASH                      = 0x4a
	SO_TXTIME                        = 0x3d
	SO_TYPE                          = 0x1008
	SO_WIFI_STATUS                   = 0x29
	SO_ZEROCOPY                      = 0x3c
	TAB1                             = 0x800
	TAB2                             = 0x1000
	TAB3                             = 0x1800
	TABDLY                           = 0x1800
	TCFLSH                           = 0x5407
	TCGETA                           = 0x5401
	TCGETS                           = 0x540d
	TCGETS2                          = 0x4030542a
	TCSAFLUSH                        = 0x5410
	TCSBRK                           = 0x5405
	TCSBRKP                          = 0x5486
	TCSETA                           = 0x5402
	TCSETAF                          = 0x5404
	TCSETAW                          = 0x5403
	TCSETS                           = 0x540e
	TCSETS2                          = 0x8030542b
	TCSETSF                          = 0x5410
	TCSETSF2                         = 0x8030542d
	TCSETSW                          = 0x540f
	TCSETSW2                         = 0x8030542c
	TCXONC                           = 0x5406
	TFD_CLOEXEC                      = 0x80000
	TFD_NONBLOCK                     = 0x80
	TIOCCBRK                         = 0x5428
	TIOCCONS                         = 0x80047478
	TIOCEXCL                         = 0x740d
	TIOCGDEV                         = 0x40045432
	TIOCGETD                         = 0x7400
	TIOCGETP                         = 0x7408
	TIOCGEXCL                        = 0x40045440
	TIOCGICOUNT                      = 0x5492
	TIOCGISO7816                     = 0x40285442
	TIOCGLCKTRMIOS                   = 0x548b
	TIOCGLTC                         = 0x7474
	TIOCGPGRP                        = 0x40047477
	TIOCGPKT                         = 0x40045438
	TIOCGPTLCK                       = 0x40045439
	TIOCGPTN                         = 0x40045430
	TIOCGPTPEER                      = 0x20005441
	TIOCGRS485                       = 0x4020542e
	TIOCGSERIAL                      = 0x5484
	TIOCGSID                         = 0x7416
	TIOCGSOFTCAR                     = 0x5481
	TIOCGWINSZ                       = 0x40087468
	TIOCINQ                          = 0x467f
	TIOCLINUX                        = 0x5483
	TIOCMBIC                         = 0x741c
	TIOCMBIS                         = 0x741b
	TIOCMGET                         = 0x741d
	TIOCMIWAIT                       = 0x5491
	TIOCMSET                         = 0x741a
	TIOCM_CAR                        = 0x100
	TIOCM_CD                         = 0x100
	TIOCM_CTS                        = 0x40
	TIOCM_DSR                        = 0x400
	TIOCM_RI                         = 0x200
	TIOCM_RNG                        = 0x200
	TIOCM_SR                         = 0x20
	TIOCM_ST                         = 0x10
	TIOCNOTTY                        = 0x5471
	TIOCNXCL                         = 0x740e
	TIOCOUTQ                         = 0x7472
	TIOCPKT                          = 0x5470
	TIOCSBRK                         = 0x5427
	TIOCSCTTY                        = 0x5480
	TIOCSERCONFIG                    = 0x5488
	TIOCSERGETLSR                    = 0x548e
	TIOCSERGETMULTI                  = 0x548f
	TIOCSERGSTRUCT                   = 0x548d
	TIOCSERGWILD                     = 0x5489
	TIOCSERSETMULTI                  = 0x5490
	TIOCSERSWILD                     = 0x548a
	TIOCSER_TEMT                     = 0x1
	TIOCSETD                         = 0x7401
	TIOCSETN                         = 0x740a
	TIOCSETP                         = 0x7409
	TIOCSIG                          = 0x80045436
	TIOCSISO7816                     = 0xc0285443
	TIOCSLCKTRMIOS                   = 0x548c
	TIOCSLTC                         = 0x7475
	TIOCSPGRP                        = 0x80047476
	TIOCSPTLCK                       = 0x80045431
	TIOCSRS485                       = 0xc020542f
	TIOCSSERIAL                      = 0x5485
	TIOCSSOFTCAR                     = 0x5482
	TIOCSTI                          = 0x5472
	TIOCSWINSZ                       = 0x80087467
	TIOCVHANGUP                      = 0x5437
	TOSTOP                           = 0x8000
	TUNATTACHFILTER                  = 0x800854d5
	TUNDETACHFILTER                  = 0x800854d6
	TUNGETDEVNETNS                   = 0x200054e3
	TUNGETFEATURES                   = 0x400454cf
	TUNGETFILTER                     = 0x400854db
	TUNGETIFF                        = 0x400454d2
	TUNGETSNDBUF                     = 0x400454d3
	TUNGETVNETBE                     = 0x400454df
	TUNGETVNETHDRSZ                  = 0x400454d7
	TUNGETVNETLE                     = 0x400454dd
	TUNSETCARRIER                    = 0x800454e2
	TUNSETDEBUG                      = 0x800454c9
	TUNSETFILTEREBPF                 = 0x400454e1
	TUNSETGROUP                      = 0x800454ce
	TUNSETIFF                        = 0x800454ca
	TUNSETIFINDEX                    = 0x800454da
	TUNSETLINK                       = 0x800454cd
	TUNSETNOCSUM                     = 0x800454c8
	TUNSETOFFLOAD                    = 0x800454d0
	TUNSETOWNER                      = 0x800454cc
	TUNSETPERSIST                    = 0x800454cb
	TUNSETQUEUE                      = 0x800454d9
	TUNSETSNDBUF                     = 0x800454d4
	TUNSETSTEERINGEBPF               = 0x400454e0
	TUNSETTXFILTER                   = 0x800454d1
	TUNSETVNETBE                     = 0x800454de
	TUNSETVNETHDRSZ                  = 0x800454d8
	TUNSETVNETLE                     = 0x800454dc
	UBI_IOCATT                       = 0x80186f40
	UBI_IOCDET                       = 0x80046f41
	UBI_IOCEBCH                      = 0x80044f02
	UBI_IOCEBER                      = 0x80044f01
	UBI_IOCEBISMAP                   = 0x40044f05
	UBI_IOCEBMAP                     = 0x80084f03
	UBI_IOCEBUNMAP                   = 0x80044f04
	UBI_IOCMKVOL                     = 0x80986f00
	UBI_IOCRMVOL                     = 0x80046f01
	UBI_IOCRNVOL                     = 0x91106f03
	UBI_IOCRPEB                      = 0x80046f04
	UBI_IOCRSVOL                     = 0x800c6f02
	UBI_IOCSETVOLPROP                = 0x80104f06
	UBI_IOCSPEB                      = 0x80046f05
	UBI_IOCVOLCRBLK                  = 0x80804f07
	UBI_IOCVOLRMBLK                  = 0x20004f08
	UBI_IOCVOLUP                     = 0x80084f00
	VDISCARD                         = 0xd
	VEOF                             = 0x10
	VEOL                             = 0x11
	VEOL2                            = 0x6
	VMIN                             = 0x4
	VREPRINT                         = 0xc
	VSTART                           = 0x8
	VSTOP                            = 0x9
	VSUSP                            = 0xa
	VSWTC                            = 0x7
	VSWTCH                           = 0x7
	VT1                              = 0x4000
	VTDLY                            = 0x4000
	VTIME                            = 0x5
	VWERASE                          = 0xe
	WDIOC_GETBOOTSTATUS              = 0x40045702
	WDIOC_GETPRETIMEOUT              = 0x40045709
	WDIOC_GETSTATUS                  = 0x40045701
	WDIOC_GETSUPPORT                 = 0x40285700
	WDIOC_GETTEMP                    = 0x40045703
	WDIOC_GETTIMELEFT                = 0x4004570a
	WDIOC_GETTIMEOUT                 = 0x40045707
	WDIOC_KEEPALIVE                  = 0x40045705
	WDIOC_SETOPTIONS                 = 0x40045704
	WORDSIZE                         = 0x20
	XCASE                            = 0x4
	XTABS                            = 0x1800
	_HIDIOCGRAWNAME                  = 0x40804804
	_HIDIOCGRAWPHYS                  = 0x40404805
	_HIDIOCGRAWUNIQ                  = 0x40404808
)

// Errors
const (
	EADDRINUSE      = syscall.Errno(0x7d)
	EADDRNOTAVAIL   = syscall.Errno(0x7e)
	EADV            = syscall.Errno(0x44)
	EAFNOSUPPORT    = syscall.Errno(0x7c)
	EALREADY        = syscall.Errno(0x95)
	EBADE           = syscall.Errno(0x32)
	EBADFD          = syscall.Errno(0x51)
	EBADMSG         = syscall.Errno(0x4d)
	EBADR           = syscall.Errno(0x33)
	EBADRQC         = syscall.Errno(0x36)
	EBADSLT         = syscall.Errno(0x37)
	EBFONT          = syscall.Errno(0x3b)
	ECANCELED       = syscall.Errno(0x9e)
	ECHRNG          = syscall.Errno(0x25)
	ECOMM           = syscall.Errno(0x46)
	ECONNABORTED    = syscall.Errno(0x82)
	ECONNREFUSED    = syscall.Errno(0x92)
	ECONNRESET      = syscall.Errno(0x83)
	EDEADLK         = syscall.Errno(0x2d)
	EDEADLOCK       = syscall.Errno(0x38)
	EDESTADDRREQ    = syscall.Errno(0x60)
	EDOTDOT         = syscall.Errno(0x49)
	EDQUOT          = syscall.Errno(0x46d)
	EHOSTDOWN       = syscall.Errno(0x93)
	EHOSTUNREACH    = syscall.Errno(0x94)
	EHWPOISON       = syscall.Errno(0xa8)
	EIDRM           = syscall.Errno(0x24)
	EILSEQ          = syscall.Errno(0x58)
	EINIT           = syscall.Errno(0x8d)
	EINPROGRESS     = syscall.Errno(0x96)
	EISCONN         = syscall.Errno(0x85)
	EISNAM          = syscall.Errno(0x8b)
	EKEYEXPIRED     = syscall.Errno(0xa2)
	EKEYREJECTED    = syscall.Errno(0xa4)
	EKEYREVOKED     = syscall.Errno(0xa3)
	EL2HLT          = syscall.Errno(0x2c)
	EL2NSYNC        = syscall.Errno(0x26)
	EL3HLT          = syscall.Errno(0x27)
	EL3RST          = syscall.Errno(0x28)
	ELIBACC         = syscall.Errno(0x53)
	ELIBBAD         = syscall.Errno(0x54)
	ELIBEXEC        = syscall.Errno(0x57)
	ELIBMAX         = syscall.Errno(0x56)
	ELIBSCN         = syscall.Errno(0x55)
	ELNRNG          = syscall.Errno(0x29)
	ELOOP           = syscall.Errno(0x5a)
	EMEDIUMTYPE     = syscall.Errno(0xa0)
	EMSGSIZE        = syscall.Errno(0x61)
	EMULTIHOP       = syscall.Errno(0x4a)
	ENAMETOOLONG    = syscall.Errno(0x4e)
	ENAVAIL         = syscall.Errno(0x8a)
	ENETDOWN        = syscall.Errno(0x7f)
	ENETRESET       = syscall.Errno(0x81)
	ENETUNREACH     = syscall.Errno(0x80)
	ENOANO          = syscall.Errno(0x35)
	ENOBUFS         = syscall.Errno(0x84)
	ENOCSI          = syscall.Errno(0x2b)
	ENODATA         = syscall.Errno(0x3d)
	ENOKEY          = syscall.Errno(0xa1)
	ENOLCK          = syscall.Errno(0x2e)
	ENOLINK         = syscall.Errno(0x43)
	ENOMEDIUM       = syscall.Errno(0x9f)
	ENOMSG          = syscall.Errno(0x23)
	ENONET          = syscall.Errno(0x40)
	ENOPKG          = syscall.Errno(0x41)
	ENOPROTOOPT     = syscall.Errno(0x63)
	ENOSR           = syscall.Errno(0x3f)
	ENOSTR          = syscall.Errno(0x3c)
	ENOSYS          = syscall.Errno(0x59)
	ENOTCONN        = syscall.Errno(0x86)
	ENOTEMPTY       = syscall.Errno(0x5d)
	ENOTNAM         = syscall.Errno(0x89)
	ENOTRECOVERABLE = syscall.Errno(0xa6)
	ENOTSOCK        = syscall.Errno(0x5f)
	ENOTSUP         = syscall.Errno(0x7a)
	ENOTUNIQ        = syscall.Errno(0x50)
	EOPNOTSUPP      = syscall.Errno(0x7a)
	EOVERFLOW       = syscall.Errno(0x4f)
	EOWNERDEAD      = syscall.Errno(0xa5)
	EPFNOSUPPORT    = syscall.Errno(0x7b)
	EPROTO          = syscall.Errno(0x47)
	EPROTONOSUPPORT = syscall.Errno(0x78)
	EPROTOTYPE      = syscall.Errno(0x62)
	EREMCHG         = syscall.Errno(0x52)
	EREMDEV         = syscall.Errno(0x8e)
	EREMOTE         = syscall.Errno(0x42)
	EREMOTEIO       = syscall.Errno(0x8c)
	ERESTART        = syscall.Errno(0x5b)
	ERFKILL         = syscall.Errno(0xa7)
	ESHUTDOWN       = syscall.Errno(0x8f)
	ESOCKTNOSUPPORT = syscall.Errno(0x79)
	ESRMNT          = syscall.Errno(0x45)
	ESTALE          = syscall.Errno(0x97)
	ESTRPIPE        = syscall.Errno(0x5c)
	ETIME           = syscall.Errno(0x3e)
	ETIMEDOUT       = syscall.Errno(0x91)
	ETOOMANYREFS    = syscall.Errno(0x90)
	EUCLEAN         = syscall.Errno(0x87)
	EUNATCH         = syscall.Errno(0x2a)
	EUSERS          = syscall.Errno(0x5e)
	EXFULL          = syscall.Errno(0x34)
)

// Signals
const (
	SIGBUS    = syscall.Signal(0xa)
	SIGCHLD   = syscall.Signal(0x12)
	SIGCLD    = syscall.Signal(0x12)
	SIGCONT   = syscall.Signal(0x19)
	SIGEMT    = syscall.Signal(0x7)
	SIGIO     = syscall.Signal(0x16)
	SIGPOLL   = syscall.Signal(0x16)
	SIGPROF   = syscall.Signal(0x1d)
	SIGPWR    = syscall.Signal(0x13)
	SIGSTOP   = syscall.Signal(0x17)
	SIGSYS    = syscall.Signal(0xc)
	SIGTSTP   = syscall.Signal(0x18)
	SIGTTIN   = syscall.Signal(0x1a)
	SIGTTOU   = syscall.Signal(0x1b)
	SIGURG    = syscall.Signal(0x15)
	SIGUSR1   = syscall.Signal(0x10)
	SIGUSR2   = syscall.Signal(0x11)
	SIGVTALRM = syscall.Signal(0x1c)
	SIGWINCH  = syscall.Signal(0x14)
	SIGXCPU   = syscall.Signal(0x1e)
	SIGXFSZ   = syscall.Signal(0x1f)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "no such device or address"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EAGAIN", "resource temporarily unavailable"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device or resource busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "invalid cross-device link"},
	{19, "ENODEV", "no such device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "numerical result out of range"},
	{35, "ENOMSG", "no message of desired type"},
	{36, "EIDRM", "identifier removed"},
	{37, "ECHRNG", "channel number out of range"},
	{38, "EL2NSYNC", "level 2 not synchronized"},
	{39, "EL3HLT", "level 3 halted"},
	{40, "EL3RST", "level 3 reset"},
	{41, "ELNRNG", "link number out of range"},
	{42, "EUNATCH", "protocol driver not attached"},
	{43, "ENOCSI", "no CSI structure available"},
	{44, "EL2HLT", "level 2 halted"},
	{45, "EDEADLK", "resource deadlock avoided"},
	{46, "ENOLCK", "no locks available"},
	{50, "EBADE", "invalid exchange"},
	{51, "EBADR", "invalid request descriptor"},
	{52, "EXFULL", "exchange full"},
	{53, "ENOANO", "no anode"},
	{54, "EBADRQC", "invalid request code"},
	{55, "EBADSLT", "invalid slot"},
	{56, "EDEADLOCK", "file locking deadlock error"},
	{59, "EBFONT", "bad font file format"},
	{60, "ENOSTR", "device not a stream"},
	{61, "ENODATA", "no data available"},
	{62, "ETIME", "timer expired"},
	{63, "ENOSR", "out of streams resources"},
	{64, "ENONET", "machine is not on the network"},
	{65, "ENOPKG", "package not installed"},
	{66, "EREMOTE", "object is remote"},
	{67, "ENOLINK", "link has been severed"},
	{68, "EADV", "advertise error"},
	{69, "ESRMNT", "srmount error"},
	{70, "ECOMM", "communication error on send"},
	{71, "EPROTO", "protocol error"},
	{73, "EDOTDOT", "RFS specific error"},
	{74, "EMULTIHOP", "multihop attempted"},
	{77, "EBADMSG", "bad message"},
	{78, "ENAMETOOLONG", "file name too long"},
	{79, "EOVERFLOW", "value too large for defined data type"},
	{80, "ENOTUNIQ", "name not unique on network"},
	{81, "EBADFD", "file descriptor in bad state"},
	{82, "EREMCHG", "remote address changed"},
	{83, "ELIBACC", "can not access a needed shared library"},
	{84, "ELIBBAD", "accessing a corrupted shared library"},
	{85, "ELIBSCN", ".lib section in a.out corrupted"},
	{86, "ELIBMAX", "attempting to link in too many shared libraries"},
	{87, "ELIBEXEC", "cannot exec a shared library directly"},
	{88, "EILSEQ", "invalid or incomplete multibyte or wide character"},
	{89, "ENOSYS", "function not implemented"},
	{90, "ELOOP", "too many levels of symbolic links"},
	{91, "ERESTART", "interrupted system call should be restarted"},
	{92, "ESTRPIPE", "streams pipe error"},
	{93, "ENOTEMPTY", "directory not empty"},
	{94, "EUSERS", "too many users"},
	{95, "ENOTSOCK", "socket operation on non-socket"},
	{96, "EDESTADDRREQ", "destination address required"},
	{97, "EMSGSIZE", "message too long"},
	{98, "EPROTOTYPE", "protocol wrong type for socket"},
	{99, "ENOPROTOOPT", "protocol not available"},
	{120, "EPROTONOSUPPORT", "protocol not supported"},
	{121, "ESOCKTNOSUPPORT", "socket type not supported"},
	{122, "ENOTSUP", "operation not supported"},
	{123, "EPFNOSUPPORT", "protocol family not supported"},
	{124, "EAFNOSUPPORT", "address family not supported by protocol"},
	{125, "EADDRINUSE", "address already in use"},
	{126, "EADDRNOTAVAIL", "cannot assign requested address"},
	{127, "ENETDOWN", "network is down"},
	{128, "ENETUNREACH", "network is unreachable"},
	{129, "ENETRESET", "network dropped connection on reset"},
	{130, "ECONNABORTED", "software caused connection abort"},
	{131, "ECONNRESET", "connection reset by peer"},
	{132, "ENOBUFS", "no buffer space available"},
	{133, "EISCONN", "transport endpoint is already connected"},
	{134, "ENOTCONN", "transport endpoint is not connected"},
	{135, "EUCLEAN", "structure needs cleaning"},
	{137, "ENOTNAM", "not a XENIX named type file"},
	{138, "ENAVAIL", "no XENIX semaphores available"},
	{139, "EISNAM", "is a named type file"},
	{140, "EREMOTEIO", "remote I/O error"},
	{141, "EINIT", "unknown error 141"},
	{142, "EREMDEV", "unknown error 142"},
	{143, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
	{144, "ETOOMANYREFS", "too many references: cannot splice"},
	{145, "ETIMEDOUT", "connection timed out"},
	{146, "ECONNREFUSED", "connection refused"},
	{147, "EHOSTDOWN", "host is down"},
	{148, "EHOSTUNREACH", "no route to host"},
	{149, "EALREADY", "operation already in progress"},
	{150, "EINPROGRESS", "operation now in progress"},
	{151, "ESTALE", "stale file handle"},
	{158, "ECANCELED", "operation canceled"},
	{159, "ENOMEDIUM", "no medium found"},
	{160, "EMEDIUMTYPE", "wrong medium type"},
	{161, "ENOKEY", "required key not available"},
	{162, "EKEYEXPIRED", "key has expired"},
	{163, "EKEYREVOKED", "key has been revoked"},
	{164, "EKEYREJECTED", "key was rejected by service"},
	{165, "EOWNERDEAD", "owner died"},
	{166, "ENOTRECOVERABLE", "state not recoverable"},
	{167, "ERFKILL", "operation not possible due to RF-kill"},
	{168, "EHWPOISON", "memory page has hardware error"},
	{1133, "EDQUOT", "disk quota exceeded"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/breakpoint trap"},
	{6, "SIGABRT", "aborted"},
	{7, "SIGEMT", "EMT trap"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus error"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGSYS", "bad system call"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGUSR1", "user defined signal 1"},
	{17, "SIGUSR2", "user defined signal 2"},
	{18, "SIGCHLD", "child exited"},
	{19, "SIGPWR", "power failure"},
	{20, "SIGWINCH", "window changed"},
	{21, "SIGURG", "urgent I/O condition"},
	{22, "SIGIO", "I/O possible"},
	{23, "SIGSTOP", "stopped (signal)"},
	{24, "SIGTSTP", "stopped"},
	{25, "SIGCONT", "continued"},
	{26, "SIGTTIN", "stopped (tty input)"},
	{27, "SIGTTOU", "stopped (tty output)"},
	{28, "SIGVTALRM", "virtual timer expired"},
	{29, "SIGPROF", "profiling timer expired"},
	{30, "SIGXCPU", "CPU time limit exceeded"},
	{31, "SIGXFSZ", "file size limit exceeded"},
}
07070100000E34000081A4000000000000000000000001645E367C00009098000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go // mkerrors.sh -Wall -Werror -static -I/tmp/ppc/include
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build ppc && linux
// +build ppc,linux

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -Wall -Werror -static -I/tmp/ppc/include _const.go

package unix

import "syscall"

const (
	B1000000                         = 0x17
	B115200                          = 0x11
	B1152000                         = 0x18
	B1500000                         = 0x19
	B2000000                         = 0x1a
	B230400                          = 0x12
	B2500000                         = 0x1b
	B3000000                         = 0x1c
	B3500000                         = 0x1d
	B4000000                         = 0x1e
	B460800                          = 0x13
	B500000                          = 0x14
	B57600                           = 0x10
	B576000                          = 0x15
	B921600                          = 0x16
	BLKBSZGET                        = 0x40041270
	BLKBSZSET                        = 0x80041271
	BLKFLSBUF                        = 0x20001261
	BLKFRAGET                        = 0x20001265
	BLKFRASET                        = 0x20001264
	BLKGETSIZE                       = 0x20001260
	BLKGETSIZE64                     = 0x40041272
	BLKPBSZGET                       = 0x2000127b
	BLKRAGET                         = 0x20001263
	BLKRASET                         = 0x20001262
	BLKROGET                         = 0x2000125e
	BLKROSET                         = 0x2000125d
	BLKRRPART                        = 0x2000125f
	BLKSECTGET                       = 0x20001267
	BLKSECTSET                       = 0x20001266
	BLKSSZGET                        = 0x20001268
	BOTHER                           = 0x1f
	BS1                              = 0x8000
	BSDLY                            = 0x8000
	CBAUD                            = 0xff
	CBAUDEX                          = 0x0
	CIBAUD                           = 0xff0000
	CLOCAL                           = 0x8000
	CR1                              = 0x1000
	CR2                              = 0x2000
	CR3                              = 0x3000
	CRDLY                            = 0x3000
	CREAD                            = 0x800
	CS6                              = 0x100
	CS7                              = 0x200
	CS8                              = 0x300
	CSIZE                            = 0x300
	CSTOPB                           = 0x400
	ECCGETLAYOUT                     = 0x41484d11
	ECCGETSTATS                      = 0x40104d12
	ECHOCTL                          = 0x40
	ECHOE                            = 0x2
	ECHOK                            = 0x4
	ECHOKE                           = 0x1
	ECHONL                           = 0x10
	ECHOPRT                          = 0x20
	EFD_CLOEXEC                      = 0x80000
	EFD_NONBLOCK                     = 0x800
	EPOLL_CLOEXEC                    = 0x80000
	EXTPROC                          = 0x10000000
	FF1                              = 0x4000
	FFDLY                            = 0x4000
	FICLONE                          = 0x80049409
	FICLONERANGE                     = 0x8020940d
	FLUSHO                           = 0x800000
	FS_IOC_ENABLE_VERITY             = 0x80806685
	FS_IOC_GETFLAGS                  = 0x40046601
	FS_IOC_GET_ENCRYPTION_NONCE      = 0x4010661b
	FS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615
	FS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614
	FS_IOC_SETFLAGS                  = 0x80046602
	FS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613
	F_GETLK                          = 0xc
	F_GETLK64                        = 0xc
	F_GETOWN                         = 0x9
	F_RDLCK                          = 0x0
	F_SETLK                          = 0xd
	F_SETLK64                        = 0xd
	F_SETLKW                         = 0xe
	F_SETLKW64                       = 0xe
	F_SETOWN                         = 0x8
	F_UNLCK                          = 0x2
	F_WRLCK                          = 0x1
	HIDIOCGRAWINFO                   = 0x40084803
	HIDIOCGRDESC                     = 0x50044802
	HIDIOCGRDESCSIZE                 = 0x40044801
	HUPCL                            = 0x4000
	ICANON                           = 0x100
	IEXTEN                           = 0x400
	IN_CLOEXEC                       = 0x80000
	IN_NONBLOCK                      = 0x800
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9
	ISIG                             = 0x80
	IUCLC                            = 0x1000
	IXOFF                            = 0x400
	IXON                             = 0x200
	MAP_ANON                         = 0x20
	MAP_ANONYMOUS                    = 0x20
	MAP_DENYWRITE                    = 0x800
	MAP_EXECUTABLE                   = 0x1000
	MAP_GROWSDOWN                    = 0x100
	MAP_HUGETLB                      = 0x40000
	MAP_LOCKED                       = 0x80
	MAP_NONBLOCK                     = 0x10000
	MAP_NORESERVE                    = 0x40
	MAP_POPULATE                     = 0x8000
	MAP_STACK                        = 0x20000
	MAP_SYNC                         = 0x80000
	MCL_CURRENT                      = 0x2000
	MCL_FUTURE                       = 0x4000
	MCL_ONFAULT                      = 0x8000
	MEMERASE                         = 0x80084d02
	MEMERASE64                       = 0x80104d14
	MEMGETBADBLOCK                   = 0x80084d0b
	MEMGETINFO                       = 0x40204d01
	MEMGETOOBSEL                     = 0x40c84d0a
	MEMGETREGIONCOUNT                = 0x40044d07
	MEMISLOCKED                      = 0x40084d17
	MEMLOCK                          = 0x80084d05
	MEMREAD                          = 0xc0404d1a
	MEMREADOOB                       = 0xc00c4d04
	MEMSETBADBLOCK                   = 0x80084d0c
	MEMUNLOCK                        = 0x80084d06
	MEMWRITEOOB                      = 0xc00c4d03
	MTDFILEMODE                      = 0x20004d13
	NFDBITS                          = 0x20
	NL2                              = 0x200
	NL3                              = 0x300
	NLDLY                            = 0x300
	NOFLSH                           = 0x80000000
	NS_GET_NSTYPE                    = 0x2000b703
	NS_GET_OWNER_UID                 = 0x2000b704
	NS_GET_PARENT                    = 0x2000b702
	NS_GET_USERNS                    = 0x2000b701
	OLCUC                            = 0x4
	ONLCR                            = 0x2
	OTPERASE                         = 0x800c4d19
	OTPGETREGIONCOUNT                = 0x80044d0e
	OTPGETREGIONINFO                 = 0x800c4d0f
	OTPLOCK                          = 0x400c4d10
	OTPSELECT                        = 0x40044d0d
	O_APPEND                         = 0x400
	O_ASYNC                          = 0x2000
	O_CLOEXEC                        = 0x80000
	O_CREAT                          = 0x40
	O_DIRECT                         = 0x20000
	O_DIRECTORY                      = 0x4000
	O_DSYNC                          = 0x1000
	O_EXCL                           = 0x80
	O_FSYNC                          = 0x101000
	O_LARGEFILE                      = 0x10000
	O_NDELAY                         = 0x800
	O_NOATIME                        = 0x40000
	O_NOCTTY                         = 0x100
	O_NOFOLLOW                       = 0x8000
	O_NONBLOCK                       = 0x800
	O_PATH                           = 0x200000
	O_RSYNC                          = 0x101000
	O_SYNC                           = 0x101000
	O_TMPFILE                        = 0x404000
	O_TRUNC                          = 0x200
	PARENB                           = 0x1000
	PARODD                           = 0x2000
	PENDIN                           = 0x20000000
	PERF_EVENT_IOC_DISABLE           = 0x20002401
	PERF_EVENT_IOC_ENABLE            = 0x20002400
	PERF_EVENT_IOC_ID                = 0x40042407
	PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8004240b
	PERF_EVENT_IOC_PAUSE_OUTPUT      = 0x80042409
	PERF_EVENT_IOC_PERIOD            = 0x80082404
	PERF_EVENT_IOC_QUERY_BPF         = 0xc004240a
	PERF_EVENT_IOC_REFRESH           = 0x20002402
	PERF_EVENT_IOC_RESET             = 0x20002403
	PERF_EVENT_IOC_SET_BPF           = 0x80042408
	PERF_EVENT_IOC_SET_FILTER        = 0x80042406
	PERF_EVENT_IOC_SET_OUTPUT        = 0x20002405
	PPPIOCATTACH                     = 0x8004743d
	PPPIOCATTCHAN                    = 0x80047438
	PPPIOCBRIDGECHAN                 = 0x80047435
	PPPIOCCONNECT                    = 0x8004743a
	PPPIOCDETACH                     = 0x8004743c
	PPPIOCDISCONN                    = 0x20007439
	PPPIOCGASYNCMAP                  = 0x40047458
	PPPIOCGCHAN                      = 0x40047437
	PPPIOCGDEBUG                     = 0x40047441
	PPPIOCGFLAGS                     = 0x4004745a
	PPPIOCGIDLE                      = 0x4008743f
	PPPIOCGIDLE32                    = 0x4008743f
	PPPIOCGIDLE64                    = 0x4010743f
	PPPIOCGL2TPSTATS                 = 0x40487436
	PPPIOCGMRU                       = 0x40047453
	PPPIOCGRASYNCMAP                 = 0x40047455
	PPPIOCGUNIT                      = 0x40047456
	PPPIOCGXASYNCMAP                 = 0x40207450
	PPPIOCSACTIVE                    = 0x80087446
	PPPIOCSASYNCMAP                  = 0x80047457
	PPPIOCSCOMPRESS                  = 0x800c744d
	PPPIOCSDEBUG                     = 0x80047440
	PPPIOCSFLAGS                     = 0x80047459
	PPPIOCSMAXCID                    = 0x80047451
	PPPIOCSMRRU                      = 0x8004743b
	PPPIOCSMRU                       = 0x80047452
	PPPIOCSNPMODE                    = 0x8008744b
	PPPIOCSPASS                      = 0x80087447
	PPPIOCSRASYNCMAP                 = 0x80047454
	PPPIOCSXASYNCMAP                 = 0x8020744f
	PPPIOCUNBRIDGECHAN               = 0x20007434
	PPPIOCXFERUNIT                   = 0x2000744e
	PROT_SAO                         = 0x10
	PR_SET_PTRACER_ANY               = 0xffffffff
	PTRACE_GETEVRREGS                = 0x14
	PTRACE_GETFPREGS                 = 0xe
	PTRACE_GETREGS64                 = 0x16
	PTRACE_GETVRREGS                 = 0x12
	PTRACE_GETVSRREGS                = 0x1b
	PTRACE_GET_DEBUGREG              = 0x19
	PTRACE_SETEVRREGS                = 0x15
	PTRACE_SETFPREGS                 = 0xf
	PTRACE_SETREGS64                 = 0x17
	PTRACE_SETVRREGS                 = 0x13
	PTRACE_SETVSRREGS                = 0x1c
	PTRACE_SET_DEBUGREG              = 0x1a
	PTRACE_SINGLEBLOCK               = 0x100
	PTRACE_SYSEMU                    = 0x1d
	PTRACE_SYSEMU_SINGLESTEP         = 0x1e
	PT_CCR                           = 0x26
	PT_CTR                           = 0x23
	PT_DAR                           = 0x29
	PT_DSCR                          = 0x2c
	PT_DSISR                         = 0x2a
	PT_FPR0                          = 0x30
	PT_FPR31                         = 0x6e
	PT_FPSCR                         = 0x71
	PT_LNK                           = 0x24
	PT_MQ                            = 0x27
	PT_MSR                           = 0x21
	PT_NIP                           = 0x20
	PT_ORIG_R3                       = 0x22
	PT_R0                            = 0x0
	PT_R1                            = 0x1
	PT_R10                           = 0xa
	PT_R11                           = 0xb
	PT_R12                           = 0xc
	PT_R13                           = 0xd
	PT_R14                           = 0xe
	PT_R15                           = 0xf
	PT_R16                           = 0x10
	PT_R17                           = 0x11
	PT_R18                           = 0x12
	PT_R19                           = 0x13
	PT_R2                            = 0x2
	PT_R20                           = 0x14
	PT_R21                           = 0x15
	PT_R22                           = 0x16
	PT_R23                           = 0x17
	PT_R24                           = 0x18
	PT_R25                           = 0x19
	PT_R26                           = 0x1a
	PT_R27                           = 0x1b
	PT_R28                           = 0x1c
	PT_R29                           = 0x1d
	PT_R3                            = 0x3
	PT_R30                           = 0x1e
	PT_R31                           = 0x1f
	PT_R4                            = 0x4
	PT_R5                            = 0x5
	PT_R6                            = 0x6
	PT_R7                            = 0x7
	PT_R8                            = 0x8
	PT_R9                            = 0x9
	PT_REGS_COUNT                    = 0x2c
	PT_RESULT                        = 0x2b
	PT_TRAP                          = 0x28
	PT_XER                           = 0x25
	RLIMIT_AS                        = 0x9
	RLIMIT_MEMLOCK                   = 0x8
	RLIMIT_NOFILE                    = 0x7
	RLIMIT_NPROC                     = 0x6
	RLIMIT_RSS                       = 0x5
	RNDADDENTROPY                    = 0x80085203
	RNDADDTOENTCNT                   = 0x80045201
	RNDCLEARPOOL                     = 0x20005206
	RNDGETENTCNT                     = 0x40045200
	RNDGETPOOL                       = 0x40085202
	RNDRESEEDCRNG                    = 0x20005207
	RNDZAPENTCNT                     = 0x20005204
	RTC_AIE_OFF                      = 0x20007002
	RTC_AIE_ON                       = 0x20007001
	RTC_ALM_READ                     = 0x40247008
	RTC_ALM_SET                      = 0x80247007
	RTC_EPOCH_READ                   = 0x4004700d
	RTC_EPOCH_SET                    = 0x8004700e
	RTC_IRQP_READ                    = 0x4004700b
	RTC_IRQP_SET                     = 0x8004700c
	RTC_PARAM_GET                    = 0x80187013
	RTC_PARAM_SET                    = 0x80187014
	RTC_PIE_OFF                      = 0x20007006
	RTC_PIE_ON                       = 0x20007005
	RTC_PLL_GET                      = 0x401c7011
	RTC_PLL_SET                      = 0x801c7012
	RTC_RD_TIME                      = 0x40247009
	RTC_SET_TIME                     = 0x8024700a
	RTC_UIE_OFF                      = 0x20007004
	RTC_UIE_ON                       = 0x20007003
	RTC_VL_CLR                       = 0x20007014
	RTC_VL_READ                      = 0x40047013
	RTC_WIE_OFF                      = 0x20007010
	RTC_WIE_ON                       = 0x2000700f
	RTC_WKALM_RD                     = 0x40287010
	RTC_WKALM_SET                    = 0x8028700f
	SCM_TIMESTAMPING                 = 0x25
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
	SCM_TIMESTAMPNS                  = 0x23
	SCM_TXTIME                       = 0x3d
	SCM_WIFI_STATUS                  = 0x29
	SFD_CLOEXEC                      = 0x80000
	SFD_NONBLOCK                     = 0x800
	SIOCATMARK                       = 0x8905
	SIOCGPGRP                        = 0x8904
	SIOCGSTAMPNS_NEW                 = 0x40108907
	SIOCGSTAMP_NEW                   = 0x40108906
	SIOCINQ                          = 0x4004667f
	SIOCOUTQ                         = 0x40047473
	SIOCSPGRP                        = 0x8902
	SOCK_CLOEXEC                     = 0x80000
	SOCK_DGRAM                       = 0x2
	SOCK_NONBLOCK                    = 0x800
	SOCK_STREAM                      = 0x1
	SOL_SOCKET                       = 0x1
	SO_ACCEPTCONN                    = 0x1e
	SO_ATTACH_BPF                    = 0x32
	SO_ATTACH_REUSEPORT_CBPF         = 0x33
	SO_ATTACH_REUSEPORT_EBPF         = 0x34
	SO_BINDTODEVICE                  = 0x19
	SO_BINDTOIFINDEX                 = 0x3e
	SO_BPF_EXTENSIONS                = 0x30
	SO_BROADCAST                     = 0x6
	SO_BSDCOMPAT                     = 0xe
	SO_BUF_LOCK                      = 0x48
	SO_BUSY_POLL                     = 0x2e
	SO_BUSY_POLL_BUDGET              = 0x46
	SO_CNX_ADVICE                    = 0x35
	SO_COOKIE                        = 0x39
	SO_DETACH_REUSEPORT_BPF          = 0x44
	SO_DOMAIN                        = 0x27
	SO_DONTROUTE                     = 0x5
	SO_ERROR                         = 0x4
	SO_INCOMING_CPU                  = 0x31
	SO_INCOMING_NAPI_ID              = 0x38
	SO_KEEPALIVE                     = 0x9
	SO_LINGER                        = 0xd
	SO_LOCK_FILTER                   = 0x2c
	SO_MARK                          = 0x24
	SO_MAX_PACING_RATE               = 0x2f
	SO_MEMINFO                       = 0x37
	SO_NETNS_COOKIE                  = 0x47
	SO_NOFCS                         = 0x2b
	SO_OOBINLINE                     = 0xa
	SO_PASSCRED                      = 0x14
	SO_PASSSEC                       = 0x22
	SO_PEEK_OFF                      = 0x2a
	SO_PEERCRED                      = 0x15
	SO_PEERGROUPS                    = 0x3b
	SO_PEERSEC                       = 0x1f
	SO_PREFER_BUSY_POLL              = 0x45
	SO_PROTOCOL                      = 0x26
	SO_RCVBUF                        = 0x8
	SO_RCVBUFFORCE                   = 0x21
	SO_RCVLOWAT                      = 0x10
	SO_RCVMARK                       = 0x4b
	SO_RCVTIMEO                      = 0x12
	SO_RCVTIMEO_NEW                  = 0x42
	SO_RCVTIMEO_OLD                  = 0x12
	SO_RESERVE_MEM                   = 0x49
	SO_REUSEADDR                     = 0x2
	SO_REUSEPORT                     = 0xf
	SO_RXQ_OVFL                      = 0x28
	SO_SECURITY_AUTHENTICATION       = 0x16
	SO_SECURITY_ENCRYPTION_NETWORK   = 0x18
	SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
	SO_SELECT_ERR_QUEUE              = 0x2d
	SO_SNDBUF                        = 0x7
	SO_SNDBUFFORCE                   = 0x20
	SO_SNDLOWAT                      = 0x11
	SO_SNDTIMEO                      = 0x13
	SO_SNDTIMEO_NEW                  = 0x43
	SO_SNDTIMEO_OLD                  = 0x13
	SO_TIMESTAMPING                  = 0x25
	SO_TIMESTAMPING_NEW              = 0x41
	SO_TIMESTAMPING_OLD              = 0x25
	SO_TIMESTAMPNS                   = 0x23
	SO_TIMESTAMPNS_NEW               = 0x40
	SO_TIMESTAMPNS_OLD               = 0x23
	SO_TIMESTAMP_NEW                 = 0x3f
	SO_TXREHASH                      = 0x4a
	SO_TXTIME                        = 0x3d
	SO_TYPE                          = 0x3
	SO_WIFI_STATUS                   = 0x29
	SO_ZEROCOPY                      = 0x3c
	TAB1                             = 0x400
	TAB2                             = 0x800
	TAB3                             = 0xc00
	TABDLY                           = 0xc00
	TCFLSH                           = 0x2000741f
	TCGETA                           = 0x40147417
	TCGETS                           = 0x402c7413
	TCSAFLUSH                        = 0x2
	TCSBRK                           = 0x2000741d
	TCSBRKP                          = 0x5425
	TCSETA                           = 0x80147418
	TCSETAF                          = 0x8014741c
	TCSETAW                          = 0x80147419
	TCSETS                           = 0x802c7414
	TCSETSF                          = 0x802c7416
	TCSETSW                          = 0x802c7415
	TCXONC                           = 0x2000741e
	TFD_CLOEXEC                      = 0x80000
	TFD_NONBLOCK                     = 0x800
	TIOCCBRK                         = 0x5428
	TIOCCONS                         = 0x541d
	TIOCEXCL                         = 0x540c
	TIOCGDEV                         = 0x40045432
	TIOCGETC                         = 0x40067412
	TIOCGETD                         = 0x5424
	TIOCGETP                         = 0x40067408
	TIOCGEXCL                        = 0x40045440
	TIOCGICOUNT                      = 0x545d
	TIOCGISO7816                     = 0x40285442
	TIOCGLCKTRMIOS                   = 0x5456
	TIOCGLTC                         = 0x40067474
	TIOCGPGRP                        = 0x40047477
	TIOCGPKT                         = 0x40045438
	TIOCGPTLCK                       = 0x40045439
	TIOCGPTN                         = 0x40045430
	TIOCGPTPEER                      = 0x20005441
	TIOCGRS485                       = 0x542e
	TIOCGSERIAL                      = 0x541e
	TIOCGSID                         = 0x5429
	TIOCGSOFTCAR                     = 0x5419
	TIOCGWINSZ                       = 0x40087468
	TIOCINQ                          = 0x4004667f
	TIOCLINUX                        = 0x541c
	TIOCMBIC                         = 0x5417
	TIOCMBIS                         = 0x5416
	TIOCMGET                         = 0x5415
	TIOCMIWAIT                       = 0x545c
	TIOCMSET                         = 0x5418
	TIOCM_CAR                        = 0x40
	TIOCM_CD                         = 0x40
	TIOCM_CTS                        = 0x20
	TIOCM_DSR                        = 0x100
	TIOCM_LOOP                       = 0x8000
	TIOCM_OUT1                       = 0x2000
	TIOCM_OUT2                       = 0x4000
	TIOCM_RI                         = 0x80
	TIOCM_RNG                        = 0x80
	TIOCM_SR                         = 0x10
	TIOCM_ST                         = 0x8
	TIOCNOTTY                        = 0x5422
	TIOCNXCL                         = 0x540d
	TIOCOUTQ                         = 0x40047473
	TIOCPKT                          = 0x5420
	TIOCSBRK                         = 0x5427
	TIOCSCTTY                        = 0x540e
	TIOCSERCONFIG                    = 0x5453
	TIOCSERGETLSR                    = 0x5459
	TIOCSERGETMULTI                  = 0x545a
	TIOCSERGSTRUCT                   = 0x5458
	TIOCSERGWILD                     = 0x5454
	TIOCSERSETMULTI                  = 0x545b
	TIOCSERSWILD                     = 0x5455
	TIOCSER_TEMT                     = 0x1
	TIOCSETC                         = 0x80067411
	TIOCSETD                         = 0x5423
	TIOCSETN                         = 0x8006740a
	TIOCSETP                         = 0x80067409
	TIOCSIG                          = 0x80045436
	TIOCSISO7816                     = 0xc0285443
	TIOCSLCKTRMIOS                   = 0x5457
	TIOCSLTC                         = 0x80067475
	TIOCSPGRP                        = 0x80047476
	TIOCSPTLCK                       = 0x80045431
	TIOCSRS485                       = 0x542f
	TIOCSSERIAL                      = 0x541f
	TIOCSSOFTCAR                     = 0x541a
	TIOCSTART                        = 0x2000746e
	TIOCSTI                          = 0x5412
	TIOCSTOP                         = 0x2000746f
	TIOCSWINSZ                       = 0x80087467
	TIOCVHANGUP                      = 0x5437
	TOSTOP                           = 0x400000
	TUNATTACHFILTER                  = 0x800854d5
	TUNDETACHFILTER                  = 0x800854d6
	TUNGETDEVNETNS                   = 0x200054e3
	TUNGETFEATURES                   = 0x400454cf
	TUNGETFILTER                     = 0x400854db
	TUNGETIFF                        = 0x400454d2
	TUNGETSNDBUF                     = 0x400454d3
	TUNGETVNETBE                     = 0x400454df
	TUNGETVNETHDRSZ                  = 0x400454d7
	TUNGETVNETLE                     = 0x400454dd
	TUNSETCARRIER                    = 0x800454e2
	TUNSETDEBUG                      = 0x800454c9
	TUNSETFILTEREBPF                 = 0x400454e1
	TUNSETGROUP                      = 0x800454ce
	TUNSETIFF                        = 0x800454ca
	TUNSETIFINDEX                    = 0x800454da
	TUNSETLINK                       = 0x800454cd
	TUNSETNOCSUM                     = 0x800454c8
	TUNSETOFFLOAD                    = 0x800454d0
	TUNSETOWNER                      = 0x800454cc
	TUNSETPERSIST                    = 0x800454cb
	TUNSETQUEUE                      = 0x800454d9
	TUNSETSNDBUF                     = 0x800454d4
	TUNSETSTEERINGEBPF               = 0x400454e0
	TUNSETTXFILTER                   = 0x800454d1
	TUNSETVNETBE                     = 0x800454de
	TUNSETVNETHDRSZ                  = 0x800454d8
	TUNSETVNETLE                     = 0x800454dc
	UBI_IOCATT                       = 0x80186f40
	UBI_IOCDET                       = 0x80046f41
	UBI_IOCEBCH                      = 0x80044f02
	UBI_IOCEBER                      = 0x80044f01
	UBI_IOCEBISMAP                   = 0x40044f05
	UBI_IOCEBMAP                     = 0x80084f03
	UBI_IOCEBUNMAP                   = 0x80044f04
	UBI_IOCMKVOL                     = 0x80986f00
	UBI_IOCRMVOL                     = 0x80046f01
	UBI_IOCRNVOL                     = 0x91106f03
	UBI_IOCRPEB                      = 0x80046f04
	UBI_IOCRSVOL                     = 0x800c6f02
	UBI_IOCSETVOLPROP                = 0x80104f06
	UBI_IOCSPEB                      = 0x80046f05
	UBI_IOCVOLCRBLK                  = 0x80804f07
	UBI_IOCVOLRMBLK                  = 0x20004f08
	UBI_IOCVOLUP                     = 0x80084f00
	VDISCARD                         = 0x10
	VEOF                             = 0x4
	VEOL                             = 0x6
	VEOL2                            = 0x8
	VMIN                             = 0x5
	VREPRINT                         = 0xb
	VSTART                           = 0xd
	VSTOP                            = 0xe
	VSUSP                            = 0xc
	VSWTC                            = 0x9
	VT1                              = 0x10000
	VTDLY                            = 0x10000
	VTIME                            = 0x7
	VWERASE                          = 0xa
	WDIOC_GETBOOTSTATUS              = 0x40045702
	WDIOC_GETPRETIMEOUT              = 0x40045709
	WDIOC_GETSTATUS                  = 0x40045701
	WDIOC_GETSUPPORT                 = 0x40285700
	WDIOC_GETTEMP                    = 0x40045703
	WDIOC_GETTIMELEFT                = 0x4004570a
	WDIOC_GETTIMEOUT                 = 0x40045707
	WDIOC_KEEPALIVE                  = 0x40045705
	WDIOC_SETOPTIONS                 = 0x40045704
	WORDSIZE                         = 0x20
	XCASE                            = 0x4000
	XTABS                            = 0xc00
	_HIDIOCGRAWNAME                  = 0x40804804
	_HIDIOCGRAWPHYS                  = 0x40404805
	_HIDIOCGRAWUNIQ                  = 0x40404808
)

// Errors
const (
	EADDRINUSE      = syscall.Errno(0x62)
	EADDRNOTAVAIL   = syscall.Errno(0x63)
	EADV            = syscall.Errno(0x44)
	EAFNOSUPPORT    = syscall.Errno(0x61)
	EALREADY        = syscall.Errno(0x72)
	EBADE           = syscall.Errno(0x34)
	EBADFD          = syscall.Errno(0x4d)
	EBADMSG         = syscall.Errno(0x4a)
	EBADR           = syscall.Errno(0x35)
	EBADRQC         = syscall.Errno(0x38)
	EBADSLT         = syscall.Errno(0x39)
	EBFONT          = syscall.Errno(0x3b)
	ECANCELED       = syscall.Errno(0x7d)
	ECHRNG          = syscall.Errno(0x2c)
	ECOMM           = syscall.Errno(0x46)
	ECONNABORTED    = syscall.Errno(0x67)
	ECONNREFUSED    = syscall.Errno(0x6f)
	ECONNRESET      = syscall.Errno(0x68)
	EDEADLK         = syscall.Errno(0x23)
	EDEADLOCK       = syscall.Errno(0x3a)
	EDESTADDRREQ    = syscall.Errno(0x59)
	EDOTDOT         = syscall.Errno(0x49)
	EDQUOT          = syscall.Errno(0x7a)
	EHOSTDOWN       = syscall.Errno(0x70)
	EHOSTUNREACH    = syscall.Errno(0x71)
	EHWPOISON       = syscall.Errno(0x85)
	EIDRM           = syscall.Errno(0x2b)
	EILSEQ          = syscall.Errno(0x54)
	EINPROGRESS     = syscall.Errno(0x73)
	EISCONN         = syscall.Errno(0x6a)
	EISNAM          = syscall.Errno(0x78)
	EKEYEXPIRED     = syscall.Errno(0x7f)
	EKEYREJECTED    = syscall.Errno(0x81)
	EKEYREVOKED     = syscall.Errno(0x80)
	EL2HLT          = syscall.Errno(0x33)
	EL2NSYNC        = syscall.Errno(0x2d)
	EL3HLT          = syscall.Errno(0x2e)
	EL3RST          = syscall.Errno(0x2f)
	ELIBACC         = syscall.Errno(0x4f)
	ELIBBAD         = syscall.Errno(0x50)
	ELIBEXEC        = syscall.Errno(0x53)
	ELIBMAX         = syscall.Errno(0x52)
	ELIBSCN         = syscall.Errno(0x51)
	ELNRNG          = syscall.Errno(0x30)
	ELOOP           = syscall.Errno(0x28)
	EMEDIUMTYPE     = syscall.Errno(0x7c)
	EMSGSIZE        = syscall.Errno(0x5a)
	EMULTIHOP       = syscall.Errno(0x48)
	ENAMETOOLONG    = syscall.Errno(0x24)
	ENAVAIL         = syscall.Errno(0x77)
	ENETDOWN        = syscall.Errno(0x64)
	ENETRESET       = syscall.Errno(0x66)
	ENETUNREACH     = syscall.Errno(0x65)
	ENOANO          = syscall.Errno(0x37)
	ENOBUFS         = syscall.Errno(0x69)
	ENOCSI          = syscall.Errno(0x32)
	ENODATA         = syscall.Errno(0x3d)
	ENOKEY          = syscall.Errno(0x7e)
	ENOLCK          = syscall.Errno(0x25)
	ENOLINK         = syscall.Errno(0x43)
	ENOMEDIUM       = syscall.Errno(0x7b)
	ENOMSG          = syscall.Errno(0x2a)
	ENONET          = syscall.Errno(0x40)
	ENOPKG          = syscall.Errno(0x41)
	ENOPROTOOPT     = syscall.Errno(0x5c)
	ENOSR           = syscall.Errno(0x3f)
	ENOSTR          = syscall.Errno(0x3c)
	ENOSYS          = syscall.Errno(0x26)
	ENOTCONN        = syscall.Errno(0x6b)
	ENOTEMPTY       = syscall.Errno(0x27)
	ENOTNAM         = syscall.Errno(0x76)
	ENOTRECOVERABLE = syscall.Errno(0x83)
	ENOTSOCK        = syscall.Errno(0x58)
	ENOTSUP         = syscall.Errno(0x5f)
	ENOTUNIQ        = syscall.Errno(0x4c)
	EOPNOTSUPP      = syscall.Errno(0x5f)
	EOVERFLOW       = syscall.Errno(0x4b)
	EOWNERDEAD      = syscall.Errno(0x82)
	EPFNOSUPPORT    = syscall.Errno(0x60)
	EPROTO          = syscall.Errno(0x47)
	EPROTONOSUPPORT = syscall.Errno(0x5d)
	EPROTOTYPE      = syscall.Errno(0x5b)
	EREMCHG         = syscall.Errno(0x4e)
	EREMOTE         = syscall.Errno(0x42)
	EREMOTEIO       = syscall.Errno(0x79)
	ERESTART        = syscall.Errno(0x55)
	ERFKILL         = syscall.Errno(0x84)
	ESHUTDOWN       = syscall.Errno(0x6c)
	ESOCKTNOSUPPORT = syscall.Errno(0x5e)
	ESRMNT          = syscall.Errno(0x45)
	ESTALE          = syscall.Errno(0x74)
	ESTRPIPE        = syscall.Errno(0x56)
	ETIME           = syscall.Errno(0x3e)
	ETIMEDOUT       = syscall.Errno(0x6e)
	ETOOMANYREFS    = syscall.Errno(0x6d)
	EUCLEAN         = syscall.Errno(0x75)
	EUNATCH         = syscall.Errno(0x31)
	EUSERS          = syscall.Errno(0x57)
	EXFULL          = syscall.Errno(0x36)
)

// Signals
const (
	SIGBUS    = syscall.Signal(0x7)
	SIGCHLD   = syscall.Signal(0x11)
	SIGCLD    = syscall.Signal(0x11)
	SIGCONT   = syscall.Signal(0x12)
	SIGIO     = syscall.Signal(0x1d)
	SIGPOLL   = syscall.Signal(0x1d)
	SIGPROF   = syscall.Signal(0x1b)
	SIGPWR    = syscall.Signal(0x1e)
	SIGSTKFLT = syscall.Signal(0x10)
	SIGSTOP   = syscall.Signal(0x13)
	SIGSYS    = syscall.Signal(0x1f)
	SIGTSTP   = syscall.Signal(0x14)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x17)
	SIGUSR1   = syscall.Signal(0xa)
	SIGUSR2   = syscall.Signal(0xc)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "no such device or address"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EAGAIN", "resource temporarily unavailable"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device or resource busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "invalid cross-device link"},
	{19, "ENODEV", "no such device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "numerical result out of range"},
	{35, "EDEADLK", "resource deadlock avoided"},
	{36, "ENAMETOOLONG", "file name too long"},
	{37, "ENOLCK", "no locks available"},
	{38, "ENOSYS", "function not implemented"},
	{39, "ENOTEMPTY", "directory not empty"},
	{40, "ELOOP", "too many levels of symbolic links"},
	{42, "ENOMSG", "no message of desired type"},
	{43, "EIDRM", "identifier removed"},
	{44, "ECHRNG", "channel number out of range"},
	{45, "EL2NSYNC", "level 2 not synchronized"},
	{46, "EL3HLT", "level 3 halted"},
	{47, "EL3RST", "level 3 reset"},
	{48, "ELNRNG", "link number out of range"},
	{49, "EUNATCH", "protocol driver not attached"},
	{50, "ENOCSI", "no CSI structure available"},
	{51, "EL2HLT", "level 2 halted"},
	{52, "EBADE", "invalid exchange"},
	{53, "EBADR", "invalid request descriptor"},
	{54, "EXFULL", "exchange full"},
	{55, "ENOANO", "no anode"},
	{56, "EBADRQC", "invalid request code"},
	{57, "EBADSLT", "invalid slot"},
	{58, "EDEADLOCK", "file locking deadlock error"},
	{59, "EBFONT", "bad font file format"},
	{60, "ENOSTR", "device not a stream"},
	{61, "ENODATA", "no data available"},
	{62, "ETIME", "timer expired"},
	{63, "ENOSR", "out of streams resources"},
	{64, "ENONET", "machine is not on the network"},
	{65, "ENOPKG", "package not installed"},
	{66, "EREMOTE", "object is remote"},
	{67, "ENOLINK", "link has been severed"},
	{68, "EADV", "advertise error"},
	{69, "ESRMNT", "srmount error"},
	{70, "ECOMM", "communication error on send"},
	{71, "EPROTO", "protocol error"},
	{72, "EMULTIHOP", "multihop attempted"},
	{73, "EDOTDOT", "RFS specific error"},
	{74, "EBADMSG", "bad message"},
	{75, "EOVERFLOW", "value too large for defined data type"},
	{76, "ENOTUNIQ", "name not unique on network"},
	{77, "EBADFD", "file descriptor in bad state"},
	{78, "EREMCHG", "remote address changed"},
	{79, "ELIBACC", "can not access a needed shared library"},
	{80, "ELIBBAD", "accessing a corrupted shared library"},
	{81, "ELIBSCN", ".lib section in a.out corrupted"},
	{82, "ELIBMAX", "attempting to link in too many shared libraries"},
	{83, "ELIBEXEC", "cannot exec a shared library directly"},
	{84, "EILSEQ", "invalid or incomplete multibyte or wide character"},
	{85, "ERESTART", "interrupted system call should be restarted"},
	{86, "ESTRPIPE", "streams pipe error"},
	{87, "EUSERS", "too many users"},
	{88, "ENOTSOCK", "socket operation on non-socket"},
	{89, "EDESTADDRREQ", "destination address required"},
	{90, "EMSGSIZE", "message too long"},
	{91, "EPROTOTYPE", "protocol wrong type for socket"},
	{92, "ENOPROTOOPT", "protocol not available"},
	{93, "EPROTONOSUPPORT", "protocol not supported"},
	{94, "ESOCKTNOSUPPORT", "socket type not supported"},
	{95, "ENOTSUP", "operation not supported"},
	{96, "EPFNOSUPPORT", "protocol family not supported"},
	{97, "EAFNOSUPPORT", "address family not supported by protocol"},
	{98, "EADDRINUSE", "address already in use"},
	{99, "EADDRNOTAVAIL", "cannot assign requested address"},
	{100, "ENETDOWN", "network is down"},
	{101, "ENETUNREACH", "network is unreachable"},
	{102, "ENETRESET", "network dropped connection on reset"},
	{103, "ECONNABORTED", "software caused connection abort"},
	{104, "ECONNRESET", "connection reset by peer"},
	{105, "ENOBUFS", "no buffer space available"},
	{106, "EISCONN", "transport endpoint is already connected"},
	{107, "ENOTCONN", "transport endpoint is not connected"},
	{108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
	{109, "ETOOMANYREFS", "too many references: cannot splice"},
	{110, "ETIMEDOUT", "connection timed out"},
	{111, "ECONNREFUSED", "connection refused"},
	{112, "EHOSTDOWN", "host is down"},
	{113, "EHOSTUNREACH", "no route to host"},
	{114, "EALREADY", "operation already in progress"},
	{115, "EINPROGRESS", "operation now in progress"},
	{116, "ESTALE", "stale file handle"},
	{117, "EUCLEAN", "structure needs cleaning"},
	{118, "ENOTNAM", "not a XENIX named type file"},
	{119, "ENAVAIL", "no XENIX semaphores available"},
	{120, "EISNAM", "is a named type file"},
	{121, "EREMOTEIO", "remote I/O error"},
	{122, "EDQUOT", "disk quota exceeded"},
	{123, "ENOMEDIUM", "no medium found"},
	{124, "EMEDIUMTYPE", "wrong medium type"},
	{125, "ECANCELED", "operation canceled"},
	{126, "ENOKEY", "required key not available"},
	{127, "EKEYEXPIRED", "key has expired"},
	{128, "EKEYREVOKED", "key has been revoked"},
	{129, "EKEYREJECTED", "key was rejected by service"},
	{130, "EOWNERDEAD", "owner died"},
	{131, "ENOTRECOVERABLE", "state not recoverable"},
	{132, "ERFKILL", "operation not possible due to RF-kill"},
	{133, "EHWPOISON", "memory page has hardware error"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/breakpoint trap"},
	{6, "SIGABRT", "aborted"},
	{7, "SIGBUS", "bus error"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGUSR1", "user defined signal 1"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGUSR2", "user defined signal 2"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGSTKFLT", "stack fault"},
	{17, "SIGCHLD", "child exited"},
	{18, "SIGCONT", "continued"},
	{19, "SIGSTOP", "stopped (signal)"},
	{20, "SIGTSTP", "stopped"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGURG", "urgent I/O condition"},
	{24, "SIGXCPU", "CPU time limit exceeded"},
	{25, "SIGXFSZ", "file size limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window changed"},
	{29, "SIGIO", "I/O possible"},
	{30, "SIGPWR", "power failure"},
	{31, "SIGSYS", "bad system call"},
}
07070100000E35000081A4000000000000000000000001645E367C00009148000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go   // mkerrors.sh -Wall -Werror -static -I/tmp/ppc64/include
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build ppc64 && linux
// +build ppc64,linux

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -Wall -Werror -static -I/tmp/ppc64/include _const.go

package unix

import "syscall"

const (
	B1000000                         = 0x17
	B115200                          = 0x11
	B1152000                         = 0x18
	B1500000                         = 0x19
	B2000000                         = 0x1a
	B230400                          = 0x12
	B2500000                         = 0x1b
	B3000000                         = 0x1c
	B3500000                         = 0x1d
	B4000000                         = 0x1e
	B460800                          = 0x13
	B500000                          = 0x14
	B57600                           = 0x10
	B576000                          = 0x15
	B921600                          = 0x16
	BLKBSZGET                        = 0x40081270
	BLKBSZSET                        = 0x80081271
	BLKFLSBUF                        = 0x20001261
	BLKFRAGET                        = 0x20001265
	BLKFRASET                        = 0x20001264
	BLKGETSIZE                       = 0x20001260
	BLKGETSIZE64                     = 0x40081272
	BLKPBSZGET                       = 0x2000127b
	BLKRAGET                         = 0x20001263
	BLKRASET                         = 0x20001262
	BLKROGET                         = 0x2000125e
	BLKROSET                         = 0x2000125d
	BLKRRPART                        = 0x2000125f
	BLKSECTGET                       = 0x20001267
	BLKSECTSET                       = 0x20001266
	BLKSSZGET                        = 0x20001268
	BOTHER                           = 0x1f
	BS1                              = 0x8000
	BSDLY                            = 0x8000
	CBAUD                            = 0xff
	CBAUDEX                          = 0x0
	CIBAUD                           = 0xff0000
	CLOCAL                           = 0x8000
	CR1                              = 0x1000
	CR2                              = 0x2000
	CR3                              = 0x3000
	CRDLY                            = 0x3000
	CREAD                            = 0x800
	CS6                              = 0x100
	CS7                              = 0x200
	CS8                              = 0x300
	CSIZE                            = 0x300
	CSTOPB                           = 0x400
	ECCGETLAYOUT                     = 0x41484d11
	ECCGETSTATS                      = 0x40104d12
	ECHOCTL                          = 0x40
	ECHOE                            = 0x2
	ECHOK                            = 0x4
	ECHOKE                           = 0x1
	ECHONL                           = 0x10
	ECHOPRT                          = 0x20
	EFD_CLOEXEC                      = 0x80000
	EFD_NONBLOCK                     = 0x800
	EPOLL_CLOEXEC                    = 0x80000
	EXTPROC                          = 0x10000000
	FF1                              = 0x4000
	FFDLY                            = 0x4000
	FICLONE                          = 0x80049409
	FICLONERANGE                     = 0x8020940d
	FLUSHO                           = 0x800000
	FS_IOC_ENABLE_VERITY             = 0x80806685
	FS_IOC_GETFLAGS                  = 0x40086601
	FS_IOC_GET_ENCRYPTION_NONCE      = 0x4010661b
	FS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615
	FS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614
	FS_IOC_SETFLAGS                  = 0x80086602
	FS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613
	F_GETLK                          = 0x5
	F_GETLK64                        = 0xc
	F_GETOWN                         = 0x9
	F_RDLCK                          = 0x0
	F_SETLK                          = 0x6
	F_SETLK64                        = 0xd
	F_SETLKW                         = 0x7
	F_SETLKW64                       = 0xe
	F_SETOWN                         = 0x8
	F_UNLCK                          = 0x2
	F_WRLCK                          = 0x1
	HIDIOCGRAWINFO                   = 0x40084803
	HIDIOCGRDESC                     = 0x50044802
	HIDIOCGRDESCSIZE                 = 0x40044801
	HUPCL                            = 0x4000
	ICANON                           = 0x100
	IEXTEN                           = 0x400
	IN_CLOEXEC                       = 0x80000
	IN_NONBLOCK                      = 0x800
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9
	ISIG                             = 0x80
	IUCLC                            = 0x1000
	IXOFF                            = 0x400
	IXON                             = 0x200
	MAP_ANON                         = 0x20
	MAP_ANONYMOUS                    = 0x20
	MAP_DENYWRITE                    = 0x800
	MAP_EXECUTABLE                   = 0x1000
	MAP_GROWSDOWN                    = 0x100
	MAP_HUGETLB                      = 0x40000
	MAP_LOCKED                       = 0x80
	MAP_NONBLOCK                     = 0x10000
	MAP_NORESERVE                    = 0x40
	MAP_POPULATE                     = 0x8000
	MAP_STACK                        = 0x20000
	MAP_SYNC                         = 0x80000
	MCL_CURRENT                      = 0x2000
	MCL_FUTURE                       = 0x4000
	MCL_ONFAULT                      = 0x8000
	MEMERASE                         = 0x80084d02
	MEMERASE64                       = 0x80104d14
	MEMGETBADBLOCK                   = 0x80084d0b
	MEMGETINFO                       = 0x40204d01
	MEMGETOOBSEL                     = 0x40c84d0a
	MEMGETREGIONCOUNT                = 0x40044d07
	MEMISLOCKED                      = 0x40084d17
	MEMLOCK                          = 0x80084d05
	MEMREAD                          = 0xc0404d1a
	MEMREADOOB                       = 0xc0104d04
	MEMSETBADBLOCK                   = 0x80084d0c
	MEMUNLOCK                        = 0x80084d06
	MEMWRITEOOB                      = 0xc0104d03
	MTDFILEMODE                      = 0x20004d13
	NFDBITS                          = 0x40
	NL2                              = 0x200
	NL3                              = 0x300
	NLDLY                            = 0x300
	NOFLSH                           = 0x80000000
	NS_GET_NSTYPE                    = 0x2000b703
	NS_GET_OWNER_UID                 = 0x2000b704
	NS_GET_PARENT                    = 0x2000b702
	NS_GET_USERNS                    = 0x2000b701
	OLCUC                            = 0x4
	ONLCR                            = 0x2
	OTPERASE                         = 0x800c4d19
	OTPGETREGIONCOUNT                = 0x80044d0e
	OTPGETREGIONINFO                 = 0x800c4d0f
	OTPLOCK                          = 0x400c4d10
	OTPSELECT                        = 0x40044d0d
	O_APPEND                         = 0x400
	O_ASYNC                          = 0x2000
	O_CLOEXEC                        = 0x80000
	O_CREAT                          = 0x40
	O_DIRECT                         = 0x20000
	O_DIRECTORY                      = 0x4000
	O_DSYNC                          = 0x1000
	O_EXCL                           = 0x80
	O_FSYNC                          = 0x101000
	O_LARGEFILE                      = 0x0
	O_NDELAY                         = 0x800
	O_NOATIME                        = 0x40000
	O_NOCTTY                         = 0x100
	O_NOFOLLOW                       = 0x8000
	O_NONBLOCK                       = 0x800
	O_PATH                           = 0x200000
	O_RSYNC                          = 0x101000
	O_SYNC                           = 0x101000
	O_TMPFILE                        = 0x404000
	O_TRUNC                          = 0x200
	PARENB                           = 0x1000
	PARODD                           = 0x2000
	PENDIN                           = 0x20000000
	PERF_EVENT_IOC_DISABLE           = 0x20002401
	PERF_EVENT_IOC_ENABLE            = 0x20002400
	PERF_EVENT_IOC_ID                = 0x40082407
	PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b
	PERF_EVENT_IOC_PAUSE_OUTPUT      = 0x80042409
	PERF_EVENT_IOC_PERIOD            = 0x80082404
	PERF_EVENT_IOC_QUERY_BPF         = 0xc008240a
	PERF_EVENT_IOC_REFRESH           = 0x20002402
	PERF_EVENT_IOC_RESET             = 0x20002403
	PERF_EVENT_IOC_SET_BPF           = 0x80042408
	PERF_EVENT_IOC_SET_FILTER        = 0x80082406
	PERF_EVENT_IOC_SET_OUTPUT        = 0x20002405
	PPPIOCATTACH                     = 0x8004743d
	PPPIOCATTCHAN                    = 0x80047438
	PPPIOCBRIDGECHAN                 = 0x80047435
	PPPIOCCONNECT                    = 0x8004743a
	PPPIOCDETACH                     = 0x8004743c
	PPPIOCDISCONN                    = 0x20007439
	PPPIOCGASYNCMAP                  = 0x40047458
	PPPIOCGCHAN                      = 0x40047437
	PPPIOCGDEBUG                     = 0x40047441
	PPPIOCGFLAGS                     = 0x4004745a
	PPPIOCGIDLE                      = 0x4010743f
	PPPIOCGIDLE32                    = 0x4008743f
	PPPIOCGIDLE64                    = 0x4010743f
	PPPIOCGL2TPSTATS                 = 0x40487436
	PPPIOCGMRU                       = 0x40047453
	PPPIOCGRASYNCMAP                 = 0x40047455
	PPPIOCGUNIT                      = 0x40047456
	PPPIOCGXASYNCMAP                 = 0x40207450
	PPPIOCSACTIVE                    = 0x80107446
	PPPIOCSASYNCMAP                  = 0x80047457
	PPPIOCSCOMPRESS                  = 0x8010744d
	PPPIOCSDEBUG                     = 0x80047440
	PPPIOCSFLAGS                     = 0x80047459
	PPPIOCSMAXCID                    = 0x80047451
	PPPIOCSMRRU                      = 0x8004743b
	PPPIOCSMRU                       = 0x80047452
	PPPIOCSNPMODE                    = 0x8008744b
	PPPIOCSPASS                      = 0x80107447
	PPPIOCSRASYNCMAP                 = 0x80047454
	PPPIOCSXASYNCMAP                 = 0x8020744f
	PPPIOCUNBRIDGECHAN               = 0x20007434
	PPPIOCXFERUNIT                   = 0x2000744e
	PROT_SAO                         = 0x10
	PR_SET_PTRACER_ANY               = 0xffffffffffffffff
	PTRACE_GETEVRREGS                = 0x14
	PTRACE_GETFPREGS                 = 0xe
	PTRACE_GETREGS64                 = 0x16
	PTRACE_GETVRREGS                 = 0x12
	PTRACE_GETVSRREGS                = 0x1b
	PTRACE_GET_DEBUGREG              = 0x19
	PTRACE_SETEVRREGS                = 0x15
	PTRACE_SETFPREGS                 = 0xf
	PTRACE_SETREGS64                 = 0x17
	PTRACE_SETVRREGS                 = 0x13
	PTRACE_SETVSRREGS                = 0x1c
	PTRACE_SET_DEBUGREG              = 0x1a
	PTRACE_SINGLEBLOCK               = 0x100
	PTRACE_SYSEMU                    = 0x1d
	PTRACE_SYSEMU_SINGLESTEP         = 0x1e
	PT_CCR                           = 0x26
	PT_CTR                           = 0x23
	PT_DAR                           = 0x29
	PT_DSCR                          = 0x2c
	PT_DSISR                         = 0x2a
	PT_FPR0                          = 0x30
	PT_FPSCR                         = 0x50
	PT_LNK                           = 0x24
	PT_MSR                           = 0x21
	PT_NIP                           = 0x20
	PT_ORIG_R3                       = 0x22
	PT_R0                            = 0x0
	PT_R1                            = 0x1
	PT_R10                           = 0xa
	PT_R11                           = 0xb
	PT_R12                           = 0xc
	PT_R13                           = 0xd
	PT_R14                           = 0xe
	PT_R15                           = 0xf
	PT_R16                           = 0x10
	PT_R17                           = 0x11
	PT_R18                           = 0x12
	PT_R19                           = 0x13
	PT_R2                            = 0x2
	PT_R20                           = 0x14
	PT_R21                           = 0x15
	PT_R22                           = 0x16
	PT_R23                           = 0x17
	PT_R24                           = 0x18
	PT_R25                           = 0x19
	PT_R26                           = 0x1a
	PT_R27                           = 0x1b
	PT_R28                           = 0x1c
	PT_R29                           = 0x1d
	PT_R3                            = 0x3
	PT_R30                           = 0x1e
	PT_R31                           = 0x1f
	PT_R4                            = 0x4
	PT_R5                            = 0x5
	PT_R6                            = 0x6
	PT_R7                            = 0x7
	PT_R8                            = 0x8
	PT_R9                            = 0x9
	PT_REGS_COUNT                    = 0x2c
	PT_RESULT                        = 0x2b
	PT_SOFTE                         = 0x27
	PT_TRAP                          = 0x28
	PT_VR0                           = 0x52
	PT_VRSAVE                        = 0x94
	PT_VSCR                          = 0x93
	PT_VSR0                          = 0x96
	PT_VSR31                         = 0xd4
	PT_XER                           = 0x25
	RLIMIT_AS                        = 0x9
	RLIMIT_MEMLOCK                   = 0x8
	RLIMIT_NOFILE                    = 0x7
	RLIMIT_NPROC                     = 0x6
	RLIMIT_RSS                       = 0x5
	RNDADDENTROPY                    = 0x80085203
	RNDADDTOENTCNT                   = 0x80045201
	RNDCLEARPOOL                     = 0x20005206
	RNDGETENTCNT                     = 0x40045200
	RNDGETPOOL                       = 0x40085202
	RNDRESEEDCRNG                    = 0x20005207
	RNDZAPENTCNT                     = 0x20005204
	RTC_AIE_OFF                      = 0x20007002
	RTC_AIE_ON                       = 0x20007001
	RTC_ALM_READ                     = 0x40247008
	RTC_ALM_SET                      = 0x80247007
	RTC_EPOCH_READ                   = 0x4008700d
	RTC_EPOCH_SET                    = 0x8008700e
	RTC_IRQP_READ                    = 0x4008700b
	RTC_IRQP_SET                     = 0x8008700c
	RTC_PARAM_GET                    = 0x80187013
	RTC_PARAM_SET                    = 0x80187014
	RTC_PIE_OFF                      = 0x20007006
	RTC_PIE_ON                       = 0x20007005
	RTC_PLL_GET                      = 0x40207011
	RTC_PLL_SET                      = 0x80207012
	RTC_RD_TIME                      = 0x40247009
	RTC_SET_TIME                     = 0x8024700a
	RTC_UIE_OFF                      = 0x20007004
	RTC_UIE_ON                       = 0x20007003
	RTC_VL_CLR                       = 0x20007014
	RTC_VL_READ                      = 0x40047013
	RTC_WIE_OFF                      = 0x20007010
	RTC_WIE_ON                       = 0x2000700f
	RTC_WKALM_RD                     = 0x40287010
	RTC_WKALM_SET                    = 0x8028700f
	SCM_TIMESTAMPING                 = 0x25
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
	SCM_TIMESTAMPNS                  = 0x23
	SCM_TXTIME                       = 0x3d
	SCM_WIFI_STATUS                  = 0x29
	SFD_CLOEXEC                      = 0x80000
	SFD_NONBLOCK                     = 0x800
	SIOCATMARK                       = 0x8905
	SIOCGPGRP                        = 0x8904
	SIOCGSTAMPNS_NEW                 = 0x40108907
	SIOCGSTAMP_NEW                   = 0x40108906
	SIOCINQ                          = 0x4004667f
	SIOCOUTQ                         = 0x40047473
	SIOCSPGRP                        = 0x8902
	SOCK_CLOEXEC                     = 0x80000
	SOCK_DGRAM                       = 0x2
	SOCK_NONBLOCK                    = 0x800
	SOCK_STREAM                      = 0x1
	SOL_SOCKET                       = 0x1
	SO_ACCEPTCONN                    = 0x1e
	SO_ATTACH_BPF                    = 0x32
	SO_ATTACH_REUSEPORT_CBPF         = 0x33
	SO_ATTACH_REUSEPORT_EBPF         = 0x34
	SO_BINDTODEVICE                  = 0x19
	SO_BINDTOIFINDEX                 = 0x3e
	SO_BPF_EXTENSIONS                = 0x30
	SO_BROADCAST                     = 0x6
	SO_BSDCOMPAT                     = 0xe
	SO_BUF_LOCK                      = 0x48
	SO_BUSY_POLL                     = 0x2e
	SO_BUSY_POLL_BUDGET              = 0x46
	SO_CNX_ADVICE                    = 0x35
	SO_COOKIE                        = 0x39
	SO_DETACH_REUSEPORT_BPF          = 0x44
	SO_DOMAIN                        = 0x27
	SO_DONTROUTE                     = 0x5
	SO_ERROR                         = 0x4
	SO_INCOMING_CPU                  = 0x31
	SO_INCOMING_NAPI_ID              = 0x38
	SO_KEEPALIVE                     = 0x9
	SO_LINGER                        = 0xd
	SO_LOCK_FILTER                   = 0x2c
	SO_MARK                          = 0x24
	SO_MAX_PACING_RATE               = 0x2f
	SO_MEMINFO                       = 0x37
	SO_NETNS_COOKIE                  = 0x47
	SO_NOFCS                         = 0x2b
	SO_OOBINLINE                     = 0xa
	SO_PASSCRED                      = 0x14
	SO_PASSSEC                       = 0x22
	SO_PEEK_OFF                      = 0x2a
	SO_PEERCRED                      = 0x15
	SO_PEERGROUPS                    = 0x3b
	SO_PEERSEC                       = 0x1f
	SO_PREFER_BUSY_POLL              = 0x45
	SO_PROTOCOL                      = 0x26
	SO_RCVBUF                        = 0x8
	SO_RCVBUFFORCE                   = 0x21
	SO_RCVLOWAT                      = 0x10
	SO_RCVMARK                       = 0x4b
	SO_RCVTIMEO                      = 0x12
	SO_RCVTIMEO_NEW                  = 0x42
	SO_RCVTIMEO_OLD                  = 0x12
	SO_RESERVE_MEM                   = 0x49
	SO_REUSEADDR                     = 0x2
	SO_REUSEPORT                     = 0xf
	SO_RXQ_OVFL                      = 0x28
	SO_SECURITY_AUTHENTICATION       = 0x16
	SO_SECURITY_ENCRYPTION_NETWORK   = 0x18
	SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
	SO_SELECT_ERR_QUEUE              = 0x2d
	SO_SNDBUF                        = 0x7
	SO_SNDBUFFORCE                   = 0x20
	SO_SNDLOWAT                      = 0x11
	SO_SNDTIMEO                      = 0x13
	SO_SNDTIMEO_NEW                  = 0x43
	SO_SNDTIMEO_OLD                  = 0x13
	SO_TIMESTAMPING                  = 0x25
	SO_TIMESTAMPING_NEW              = 0x41
	SO_TIMESTAMPING_OLD              = 0x25
	SO_TIMESTAMPNS                   = 0x23
	SO_TIMESTAMPNS_NEW               = 0x40
	SO_TIMESTAMPNS_OLD               = 0x23
	SO_TIMESTAMP_NEW                 = 0x3f
	SO_TXREHASH                      = 0x4a
	SO_TXTIME                        = 0x3d
	SO_TYPE                          = 0x3
	SO_WIFI_STATUS                   = 0x29
	SO_ZEROCOPY                      = 0x3c
	TAB1                             = 0x400
	TAB2                             = 0x800
	TAB3                             = 0xc00
	TABDLY                           = 0xc00
	TCFLSH                           = 0x2000741f
	TCGETA                           = 0x40147417
	TCGETS                           = 0x402c7413
	TCSAFLUSH                        = 0x2
	TCSBRK                           = 0x2000741d
	TCSBRKP                          = 0x5425
	TCSETA                           = 0x80147418
	TCSETAF                          = 0x8014741c
	TCSETAW                          = 0x80147419
	TCSETS                           = 0x802c7414
	TCSETSF                          = 0x802c7416
	TCSETSW                          = 0x802c7415
	TCXONC                           = 0x2000741e
	TFD_CLOEXEC                      = 0x80000
	TFD_NONBLOCK                     = 0x800
	TIOCCBRK                         = 0x5428
	TIOCCONS                         = 0x541d
	TIOCEXCL                         = 0x540c
	TIOCGDEV                         = 0x40045432
	TIOCGETC                         = 0x40067412
	TIOCGETD                         = 0x5424
	TIOCGETP                         = 0x40067408
	TIOCGEXCL                        = 0x40045440
	TIOCGICOUNT                      = 0x545d
	TIOCGISO7816                     = 0x40285442
	TIOCGLCKTRMIOS                   = 0x5456
	TIOCGLTC                         = 0x40067474
	TIOCGPGRP                        = 0x40047477
	TIOCGPKT                         = 0x40045438
	TIOCGPTLCK                       = 0x40045439
	TIOCGPTN                         = 0x40045430
	TIOCGPTPEER                      = 0x20005441
	TIOCGRS485                       = 0x542e
	TIOCGSERIAL                      = 0x541e
	TIOCGSID                         = 0x5429
	TIOCGSOFTCAR                     = 0x5419
	TIOCGWINSZ                       = 0x40087468
	TIOCINQ                          = 0x4004667f
	TIOCLINUX                        = 0x541c
	TIOCMBIC                         = 0x5417
	TIOCMBIS                         = 0x5416
	TIOCMGET                         = 0x5415
	TIOCMIWAIT                       = 0x545c
	TIOCMSET                         = 0x5418
	TIOCM_CAR                        = 0x40
	TIOCM_CD                         = 0x40
	TIOCM_CTS                        = 0x20
	TIOCM_DSR                        = 0x100
	TIOCM_LOOP                       = 0x8000
	TIOCM_OUT1                       = 0x2000
	TIOCM_OUT2                       = 0x4000
	TIOCM_RI                         = 0x80
	TIOCM_RNG                        = 0x80
	TIOCM_SR                         = 0x10
	TIOCM_ST                         = 0x8
	TIOCNOTTY                        = 0x5422
	TIOCNXCL                         = 0x540d
	TIOCOUTQ                         = 0x40047473
	TIOCPKT                          = 0x5420
	TIOCSBRK                         = 0x5427
	TIOCSCTTY                        = 0x540e
	TIOCSERCONFIG                    = 0x5453
	TIOCSERGETLSR                    = 0x5459
	TIOCSERGETMULTI                  = 0x545a
	TIOCSERGSTRUCT                   = 0x5458
	TIOCSERGWILD                     = 0x5454
	TIOCSERSETMULTI                  = 0x545b
	TIOCSERSWILD                     = 0x5455
	TIOCSER_TEMT                     = 0x1
	TIOCSETC                         = 0x80067411
	TIOCSETD                         = 0x5423
	TIOCSETN                         = 0x8006740a
	TIOCSETP                         = 0x80067409
	TIOCSIG                          = 0x80045436
	TIOCSISO7816                     = 0xc0285443
	TIOCSLCKTRMIOS                   = 0x5457
	TIOCSLTC                         = 0x80067475
	TIOCSPGRP                        = 0x80047476
	TIOCSPTLCK                       = 0x80045431
	TIOCSRS485                       = 0x542f
	TIOCSSERIAL                      = 0x541f
	TIOCSSOFTCAR                     = 0x541a
	TIOCSTART                        = 0x2000746e
	TIOCSTI                          = 0x5412
	TIOCSTOP                         = 0x2000746f
	TIOCSWINSZ                       = 0x80087467
	TIOCVHANGUP                      = 0x5437
	TOSTOP                           = 0x400000
	TUNATTACHFILTER                  = 0x801054d5
	TUNDETACHFILTER                  = 0x801054d6
	TUNGETDEVNETNS                   = 0x200054e3
	TUNGETFEATURES                   = 0x400454cf
	TUNGETFILTER                     = 0x401054db
	TUNGETIFF                        = 0x400454d2
	TUNGETSNDBUF                     = 0x400454d3
	TUNGETVNETBE                     = 0x400454df
	TUNGETVNETHDRSZ                  = 0x400454d7
	TUNGETVNETLE                     = 0x400454dd
	TUNSETCARRIER                    = 0x800454e2
	TUNSETDEBUG                      = 0x800454c9
	TUNSETFILTEREBPF                 = 0x400454e1
	TUNSETGROUP                      = 0x800454ce
	TUNSETIFF                        = 0x800454ca
	TUNSETIFINDEX                    = 0x800454da
	TUNSETLINK                       = 0x800454cd
	TUNSETNOCSUM                     = 0x800454c8
	TUNSETOFFLOAD                    = 0x800454d0
	TUNSETOWNER                      = 0x800454cc
	TUNSETPERSIST                    = 0x800454cb
	TUNSETQUEUE                      = 0x800454d9
	TUNSETSNDBUF                     = 0x800454d4
	TUNSETSTEERINGEBPF               = 0x400454e0
	TUNSETTXFILTER                   = 0x800454d1
	TUNSETVNETBE                     = 0x800454de
	TUNSETVNETHDRSZ                  = 0x800454d8
	TUNSETVNETLE                     = 0x800454dc
	UBI_IOCATT                       = 0x80186f40
	UBI_IOCDET                       = 0x80046f41
	UBI_IOCEBCH                      = 0x80044f02
	UBI_IOCEBER                      = 0x80044f01
	UBI_IOCEBISMAP                   = 0x40044f05
	UBI_IOCEBMAP                     = 0x80084f03
	UBI_IOCEBUNMAP                   = 0x80044f04
	UBI_IOCMKVOL                     = 0x80986f00
	UBI_IOCRMVOL                     = 0x80046f01
	UBI_IOCRNVOL                     = 0x91106f03
	UBI_IOCRPEB                      = 0x80046f04
	UBI_IOCRSVOL                     = 0x800c6f02
	UBI_IOCSETVOLPROP                = 0x80104f06
	UBI_IOCSPEB                      = 0x80046f05
	UBI_IOCVOLCRBLK                  = 0x80804f07
	UBI_IOCVOLRMBLK                  = 0x20004f08
	UBI_IOCVOLUP                     = 0x80084f00
	VDISCARD                         = 0x10
	VEOF                             = 0x4
	VEOL                             = 0x6
	VEOL2                            = 0x8
	VMIN                             = 0x5
	VREPRINT                         = 0xb
	VSTART                           = 0xd
	VSTOP                            = 0xe
	VSUSP                            = 0xc
	VSWTC                            = 0x9
	VT1                              = 0x10000
	VTDLY                            = 0x10000
	VTIME                            = 0x7
	VWERASE                          = 0xa
	WDIOC_GETBOOTSTATUS              = 0x40045702
	WDIOC_GETPRETIMEOUT              = 0x40045709
	WDIOC_GETSTATUS                  = 0x40045701
	WDIOC_GETSUPPORT                 = 0x40285700
	WDIOC_GETTEMP                    = 0x40045703
	WDIOC_GETTIMELEFT                = 0x4004570a
	WDIOC_GETTIMEOUT                 = 0x40045707
	WDIOC_KEEPALIVE                  = 0x40045705
	WDIOC_SETOPTIONS                 = 0x40045704
	WORDSIZE                         = 0x40
	XCASE                            = 0x4000
	XTABS                            = 0xc00
	_HIDIOCGRAWNAME                  = 0x40804804
	_HIDIOCGRAWPHYS                  = 0x40404805
	_HIDIOCGRAWUNIQ                  = 0x40404808
)

// Errors
const (
	EADDRINUSE      = syscall.Errno(0x62)
	EADDRNOTAVAIL   = syscall.Errno(0x63)
	EADV            = syscall.Errno(0x44)
	EAFNOSUPPORT    = syscall.Errno(0x61)
	EALREADY        = syscall.Errno(0x72)
	EBADE           = syscall.Errno(0x34)
	EBADFD          = syscall.Errno(0x4d)
	EBADMSG         = syscall.Errno(0x4a)
	EBADR           = syscall.Errno(0x35)
	EBADRQC         = syscall.Errno(0x38)
	EBADSLT         = syscall.Errno(0x39)
	EBFONT          = syscall.Errno(0x3b)
	ECANCELED       = syscall.Errno(0x7d)
	ECHRNG          = syscall.Errno(0x2c)
	ECOMM           = syscall.Errno(0x46)
	ECONNABORTED    = syscall.Errno(0x67)
	ECONNREFUSED    = syscall.Errno(0x6f)
	ECONNRESET      = syscall.Errno(0x68)
	EDEADLK         = syscall.Errno(0x23)
	EDEADLOCK       = syscall.Errno(0x3a)
	EDESTADDRREQ    = syscall.Errno(0x59)
	EDOTDOT         = syscall.Errno(0x49)
	EDQUOT          = syscall.Errno(0x7a)
	EHOSTDOWN       = syscall.Errno(0x70)
	EHOSTUNREACH    = syscall.Errno(0x71)
	EHWPOISON       = syscall.Errno(0x85)
	EIDRM           = syscall.Errno(0x2b)
	EILSEQ          = syscall.Errno(0x54)
	EINPROGRESS     = syscall.Errno(0x73)
	EISCONN         = syscall.Errno(0x6a)
	EISNAM          = syscall.Errno(0x78)
	EKEYEXPIRED     = syscall.Errno(0x7f)
	EKEYREJECTED    = syscall.Errno(0x81)
	EKEYREVOKED     = syscall.Errno(0x80)
	EL2HLT          = syscall.Errno(0x33)
	EL2NSYNC        = syscall.Errno(0x2d)
	EL3HLT          = syscall.Errno(0x2e)
	EL3RST          = syscall.Errno(0x2f)
	ELIBACC         = syscall.Errno(0x4f)
	ELIBBAD         = syscall.Errno(0x50)
	ELIBEXEC        = syscall.Errno(0x53)
	ELIBMAX         = syscall.Errno(0x52)
	ELIBSCN         = syscall.Errno(0x51)
	ELNRNG          = syscall.Errno(0x30)
	ELOOP           = syscall.Errno(0x28)
	EMEDIUMTYPE     = syscall.Errno(0x7c)
	EMSGSIZE        = syscall.Errno(0x5a)
	EMULTIHOP       = syscall.Errno(0x48)
	ENAMETOOLONG    = syscall.Errno(0x24)
	ENAVAIL         = syscall.Errno(0x77)
	ENETDOWN        = syscall.Errno(0x64)
	ENETRESET       = syscall.Errno(0x66)
	ENETUNREACH     = syscall.Errno(0x65)
	ENOANO          = syscall.Errno(0x37)
	ENOBUFS         = syscall.Errno(0x69)
	ENOCSI          = syscall.Errno(0x32)
	ENODATA         = syscall.Errno(0x3d)
	ENOKEY          = syscall.Errno(0x7e)
	ENOLCK          = syscall.Errno(0x25)
	ENOLINK         = syscall.Errno(0x43)
	ENOMEDIUM       = syscall.Errno(0x7b)
	ENOMSG          = syscall.Errno(0x2a)
	ENONET          = syscall.Errno(0x40)
	ENOPKG          = syscall.Errno(0x41)
	ENOPROTOOPT     = syscall.Errno(0x5c)
	ENOSR           = syscall.Errno(0x3f)
	ENOSTR          = syscall.Errno(0x3c)
	ENOSYS          = syscall.Errno(0x26)
	ENOTCONN        = syscall.Errno(0x6b)
	ENOTEMPTY       = syscall.Errno(0x27)
	ENOTNAM         = syscall.Errno(0x76)
	ENOTRECOVERABLE = syscall.Errno(0x83)
	ENOTSOCK        = syscall.Errno(0x58)
	ENOTSUP         = syscall.Errno(0x5f)
	ENOTUNIQ        = syscall.Errno(0x4c)
	EOPNOTSUPP      = syscall.Errno(0x5f)
	EOVERFLOW       = syscall.Errno(0x4b)
	EOWNERDEAD      = syscall.Errno(0x82)
	EPFNOSUPPORT    = syscall.Errno(0x60)
	EPROTO          = syscall.Errno(0x47)
	EPROTONOSUPPORT = syscall.Errno(0x5d)
	EPROTOTYPE      = syscall.Errno(0x5b)
	EREMCHG         = syscall.Errno(0x4e)
	EREMOTE         = syscall.Errno(0x42)
	EREMOTEIO       = syscall.Errno(0x79)
	ERESTART        = syscall.Errno(0x55)
	ERFKILL         = syscall.Errno(0x84)
	ESHUTDOWN       = syscall.Errno(0x6c)
	ESOCKTNOSUPPORT = syscall.Errno(0x5e)
	ESRMNT          = syscall.Errno(0x45)
	ESTALE          = syscall.Errno(0x74)
	ESTRPIPE        = syscall.Errno(0x56)
	ETIME           = syscall.Errno(0x3e)
	ETIMEDOUT       = syscall.Errno(0x6e)
	ETOOMANYREFS    = syscall.Errno(0x6d)
	EUCLEAN         = syscall.Errno(0x75)
	EUNATCH         = syscall.Errno(0x31)
	EUSERS          = syscall.Errno(0x57)
	EXFULL          = syscall.Errno(0x36)
)

// Signals
const (
	SIGBUS    = syscall.Signal(0x7)
	SIGCHLD   = syscall.Signal(0x11)
	SIGCLD    = syscall.Signal(0x11)
	SIGCONT   = syscall.Signal(0x12)
	SIGIO     = syscall.Signal(0x1d)
	SIGPOLL   = syscall.Signal(0x1d)
	SIGPROF   = syscall.Signal(0x1b)
	SIGPWR    = syscall.Signal(0x1e)
	SIGSTKFLT = syscall.Signal(0x10)
	SIGSTOP   = syscall.Signal(0x13)
	SIGSYS    = syscall.Signal(0x1f)
	SIGTSTP   = syscall.Signal(0x14)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x17)
	SIGUSR1   = syscall.Signal(0xa)
	SIGUSR2   = syscall.Signal(0xc)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "no such device or address"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EAGAIN", "resource temporarily unavailable"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device or resource busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "invalid cross-device link"},
	{19, "ENODEV", "no such device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "numerical result out of range"},
	{35, "EDEADLK", "resource deadlock avoided"},
	{36, "ENAMETOOLONG", "file name too long"},
	{37, "ENOLCK", "no locks available"},
	{38, "ENOSYS", "function not implemented"},
	{39, "ENOTEMPTY", "directory not empty"},
	{40, "ELOOP", "too many levels of symbolic links"},
	{42, "ENOMSG", "no message of desired type"},
	{43, "EIDRM", "identifier removed"},
	{44, "ECHRNG", "channel number out of range"},
	{45, "EL2NSYNC", "level 2 not synchronized"},
	{46, "EL3HLT", "level 3 halted"},
	{47, "EL3RST", "level 3 reset"},
	{48, "ELNRNG", "link number out of range"},
	{49, "EUNATCH", "protocol driver not attached"},
	{50, "ENOCSI", "no CSI structure available"},
	{51, "EL2HLT", "level 2 halted"},
	{52, "EBADE", "invalid exchange"},
	{53, "EBADR", "invalid request descriptor"},
	{54, "EXFULL", "exchange full"},
	{55, "ENOANO", "no anode"},
	{56, "EBADRQC", "invalid request code"},
	{57, "EBADSLT", "invalid slot"},
	{58, "EDEADLOCK", "file locking deadlock error"},
	{59, "EBFONT", "bad font file format"},
	{60, "ENOSTR", "device not a stream"},
	{61, "ENODATA", "no data available"},
	{62, "ETIME", "timer expired"},
	{63, "ENOSR", "out of streams resources"},
	{64, "ENONET", "machine is not on the network"},
	{65, "ENOPKG", "package not installed"},
	{66, "EREMOTE", "object is remote"},
	{67, "ENOLINK", "link has been severed"},
	{68, "EADV", "advertise error"},
	{69, "ESRMNT", "srmount error"},
	{70, "ECOMM", "communication error on send"},
	{71, "EPROTO", "protocol error"},
	{72, "EMULTIHOP", "multihop attempted"},
	{73, "EDOTDOT", "RFS specific error"},
	{74, "EBADMSG", "bad message"},
	{75, "EOVERFLOW", "value too large for defined data type"},
	{76, "ENOTUNIQ", "name not unique on network"},
	{77, "EBADFD", "file descriptor in bad state"},
	{78, "EREMCHG", "remote address changed"},
	{79, "ELIBACC", "can not access a needed shared library"},
	{80, "ELIBBAD", "accessing a corrupted shared library"},
	{81, "ELIBSCN", ".lib section in a.out corrupted"},
	{82, "ELIBMAX", "attempting to link in too many shared libraries"},
	{83, "ELIBEXEC", "cannot exec a shared library directly"},
	{84, "EILSEQ", "invalid or incomplete multibyte or wide character"},
	{85, "ERESTART", "interrupted system call should be restarted"},
	{86, "ESTRPIPE", "streams pipe error"},
	{87, "EUSERS", "too many users"},
	{88, "ENOTSOCK", "socket operation on non-socket"},
	{89, "EDESTADDRREQ", "destination address required"},
	{90, "EMSGSIZE", "message too long"},
	{91, "EPROTOTYPE", "protocol wrong type for socket"},
	{92, "ENOPROTOOPT", "protocol not available"},
	{93, "EPROTONOSUPPORT", "protocol not supported"},
	{94, "ESOCKTNOSUPPORT", "socket type not supported"},
	{95, "ENOTSUP", "operation not supported"},
	{96, "EPFNOSUPPORT", "protocol family not supported"},
	{97, "EAFNOSUPPORT", "address family not supported by protocol"},
	{98, "EADDRINUSE", "address already in use"},
	{99, "EADDRNOTAVAIL", "cannot assign requested address"},
	{100, "ENETDOWN", "network is down"},
	{101, "ENETUNREACH", "network is unreachable"},
	{102, "ENETRESET", "network dropped connection on reset"},
	{103, "ECONNABORTED", "software caused connection abort"},
	{104, "ECONNRESET", "connection reset by peer"},
	{105, "ENOBUFS", "no buffer space available"},
	{106, "EISCONN", "transport endpoint is already connected"},
	{107, "ENOTCONN", "transport endpoint is not connected"},
	{108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
	{109, "ETOOMANYREFS", "too many references: cannot splice"},
	{110, "ETIMEDOUT", "connection timed out"},
	{111, "ECONNREFUSED", "connection refused"},
	{112, "EHOSTDOWN", "host is down"},
	{113, "EHOSTUNREACH", "no route to host"},
	{114, "EALREADY", "operation already in progress"},
	{115, "EINPROGRESS", "operation now in progress"},
	{116, "ESTALE", "stale file handle"},
	{117, "EUCLEAN", "structure needs cleaning"},
	{118, "ENOTNAM", "not a XENIX named type file"},
	{119, "ENAVAIL", "no XENIX semaphores available"},
	{120, "EISNAM", "is a named type file"},
	{121, "EREMOTEIO", "remote I/O error"},
	{122, "EDQUOT", "disk quota exceeded"},
	{123, "ENOMEDIUM", "no medium found"},
	{124, "EMEDIUMTYPE", "wrong medium type"},
	{125, "ECANCELED", "operation canceled"},
	{126, "ENOKEY", "required key not available"},
	{127, "EKEYEXPIRED", "key has expired"},
	{128, "EKEYREVOKED", "key has been revoked"},
	{129, "EKEYREJECTED", "key was rejected by service"},
	{130, "EOWNERDEAD", "owner died"},
	{131, "ENOTRECOVERABLE", "state not recoverable"},
	{132, "ERFKILL", "operation not possible due to RF-kill"},
	{133, "EHWPOISON", "memory page has hardware error"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/breakpoint trap"},
	{6, "SIGABRT", "aborted"},
	{7, "SIGBUS", "bus error"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGUSR1", "user defined signal 1"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGUSR2", "user defined signal 2"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGSTKFLT", "stack fault"},
	{17, "SIGCHLD", "child exited"},
	{18, "SIGCONT", "continued"},
	{19, "SIGSTOP", "stopped (signal)"},
	{20, "SIGTSTP", "stopped"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGURG", "urgent I/O condition"},
	{24, "SIGXCPU", "CPU time limit exceeded"},
	{25, "SIGXFSZ", "file size limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window changed"},
	{29, "SIGIO", "I/O possible"},
	{30, "SIGPWR", "power failure"},
	{31, "SIGSYS", "bad system call"},
}
07070100000E36000081A4000000000000000000000001645E367C00009150000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go // mkerrors.sh -Wall -Werror -static -I/tmp/ppc64le/include
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build ppc64le && linux
// +build ppc64le,linux

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -Wall -Werror -static -I/tmp/ppc64le/include _const.go

package unix

import "syscall"

const (
	B1000000                         = 0x17
	B115200                          = 0x11
	B1152000                         = 0x18
	B1500000                         = 0x19
	B2000000                         = 0x1a
	B230400                          = 0x12
	B2500000                         = 0x1b
	B3000000                         = 0x1c
	B3500000                         = 0x1d
	B4000000                         = 0x1e
	B460800                          = 0x13
	B500000                          = 0x14
	B57600                           = 0x10
	B576000                          = 0x15
	B921600                          = 0x16
	BLKBSZGET                        = 0x40081270
	BLKBSZSET                        = 0x80081271
	BLKFLSBUF                        = 0x20001261
	BLKFRAGET                        = 0x20001265
	BLKFRASET                        = 0x20001264
	BLKGETSIZE                       = 0x20001260
	BLKGETSIZE64                     = 0x40081272
	BLKPBSZGET                       = 0x2000127b
	BLKRAGET                         = 0x20001263
	BLKRASET                         = 0x20001262
	BLKROGET                         = 0x2000125e
	BLKROSET                         = 0x2000125d
	BLKRRPART                        = 0x2000125f
	BLKSECTGET                       = 0x20001267
	BLKSECTSET                       = 0x20001266
	BLKSSZGET                        = 0x20001268
	BOTHER                           = 0x1f
	BS1                              = 0x8000
	BSDLY                            = 0x8000
	CBAUD                            = 0xff
	CBAUDEX                          = 0x0
	CIBAUD                           = 0xff0000
	CLOCAL                           = 0x8000
	CR1                              = 0x1000
	CR2                              = 0x2000
	CR3                              = 0x3000
	CRDLY                            = 0x3000
	CREAD                            = 0x800
	CS6                              = 0x100
	CS7                              = 0x200
	CS8                              = 0x300
	CSIZE                            = 0x300
	CSTOPB                           = 0x400
	ECCGETLAYOUT                     = 0x41484d11
	ECCGETSTATS                      = 0x40104d12
	ECHOCTL                          = 0x40
	ECHOE                            = 0x2
	ECHOK                            = 0x4
	ECHOKE                           = 0x1
	ECHONL                           = 0x10
	ECHOPRT                          = 0x20
	EFD_CLOEXEC                      = 0x80000
	EFD_NONBLOCK                     = 0x800
	EPOLL_CLOEXEC                    = 0x80000
	EXTPROC                          = 0x10000000
	FF1                              = 0x4000
	FFDLY                            = 0x4000
	FICLONE                          = 0x80049409
	FICLONERANGE                     = 0x8020940d
	FLUSHO                           = 0x800000
	FS_IOC_ENABLE_VERITY             = 0x80806685
	FS_IOC_GETFLAGS                  = 0x40086601
	FS_IOC_GET_ENCRYPTION_NONCE      = 0x4010661b
	FS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615
	FS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614
	FS_IOC_SETFLAGS                  = 0x80086602
	FS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613
	F_GETLK                          = 0x5
	F_GETLK64                        = 0xc
	F_GETOWN                         = 0x9
	F_RDLCK                          = 0x0
	F_SETLK                          = 0x6
	F_SETLK64                        = 0xd
	F_SETLKW                         = 0x7
	F_SETLKW64                       = 0xe
	F_SETOWN                         = 0x8
	F_UNLCK                          = 0x2
	F_WRLCK                          = 0x1
	HIDIOCGRAWINFO                   = 0x40084803
	HIDIOCGRDESC                     = 0x50044802
	HIDIOCGRDESCSIZE                 = 0x40044801
	HUPCL                            = 0x4000
	ICANON                           = 0x100
	IEXTEN                           = 0x400
	IN_CLOEXEC                       = 0x80000
	IN_NONBLOCK                      = 0x800
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9
	ISIG                             = 0x80
	IUCLC                            = 0x1000
	IXOFF                            = 0x400
	IXON                             = 0x200
	MAP_ANON                         = 0x20
	MAP_ANONYMOUS                    = 0x20
	MAP_DENYWRITE                    = 0x800
	MAP_EXECUTABLE                   = 0x1000
	MAP_GROWSDOWN                    = 0x100
	MAP_HUGETLB                      = 0x40000
	MAP_LOCKED                       = 0x80
	MAP_NONBLOCK                     = 0x10000
	MAP_NORESERVE                    = 0x40
	MAP_POPULATE                     = 0x8000
	MAP_STACK                        = 0x20000
	MAP_SYNC                         = 0x80000
	MCL_CURRENT                      = 0x2000
	MCL_FUTURE                       = 0x4000
	MCL_ONFAULT                      = 0x8000
	MEMERASE                         = 0x80084d02
	MEMERASE64                       = 0x80104d14
	MEMGETBADBLOCK                   = 0x80084d0b
	MEMGETINFO                       = 0x40204d01
	MEMGETOOBSEL                     = 0x40c84d0a
	MEMGETREGIONCOUNT                = 0x40044d07
	MEMISLOCKED                      = 0x40084d17
	MEMLOCK                          = 0x80084d05
	MEMREAD                          = 0xc0404d1a
	MEMREADOOB                       = 0xc0104d04
	MEMSETBADBLOCK                   = 0x80084d0c
	MEMUNLOCK                        = 0x80084d06
	MEMWRITEOOB                      = 0xc0104d03
	MTDFILEMODE                      = 0x20004d13
	NFDBITS                          = 0x40
	NL2                              = 0x200
	NL3                              = 0x300
	NLDLY                            = 0x300
	NOFLSH                           = 0x80000000
	NS_GET_NSTYPE                    = 0x2000b703
	NS_GET_OWNER_UID                 = 0x2000b704
	NS_GET_PARENT                    = 0x2000b702
	NS_GET_USERNS                    = 0x2000b701
	OLCUC                            = 0x4
	ONLCR                            = 0x2
	OTPERASE                         = 0x800c4d19
	OTPGETREGIONCOUNT                = 0x80044d0e
	OTPGETREGIONINFO                 = 0x800c4d0f
	OTPLOCK                          = 0x400c4d10
	OTPSELECT                        = 0x40044d0d
	O_APPEND                         = 0x400
	O_ASYNC                          = 0x2000
	O_CLOEXEC                        = 0x80000
	O_CREAT                          = 0x40
	O_DIRECT                         = 0x20000
	O_DIRECTORY                      = 0x4000
	O_DSYNC                          = 0x1000
	O_EXCL                           = 0x80
	O_FSYNC                          = 0x101000
	O_LARGEFILE                      = 0x0
	O_NDELAY                         = 0x800
	O_NOATIME                        = 0x40000
	O_NOCTTY                         = 0x100
	O_NOFOLLOW                       = 0x8000
	O_NONBLOCK                       = 0x800
	O_PATH                           = 0x200000
	O_RSYNC                          = 0x101000
	O_SYNC                           = 0x101000
	O_TMPFILE                        = 0x404000
	O_TRUNC                          = 0x200
	PARENB                           = 0x1000
	PARODD                           = 0x2000
	PENDIN                           = 0x20000000
	PERF_EVENT_IOC_DISABLE           = 0x20002401
	PERF_EVENT_IOC_ENABLE            = 0x20002400
	PERF_EVENT_IOC_ID                = 0x40082407
	PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b
	PERF_EVENT_IOC_PAUSE_OUTPUT      = 0x80042409
	PERF_EVENT_IOC_PERIOD            = 0x80082404
	PERF_EVENT_IOC_QUERY_BPF         = 0xc008240a
	PERF_EVENT_IOC_REFRESH           = 0x20002402
	PERF_EVENT_IOC_RESET             = 0x20002403
	PERF_EVENT_IOC_SET_BPF           = 0x80042408
	PERF_EVENT_IOC_SET_FILTER        = 0x80082406
	PERF_EVENT_IOC_SET_OUTPUT        = 0x20002405
	PPPIOCATTACH                     = 0x8004743d
	PPPIOCATTCHAN                    = 0x80047438
	PPPIOCBRIDGECHAN                 = 0x80047435
	PPPIOCCONNECT                    = 0x8004743a
	PPPIOCDETACH                     = 0x8004743c
	PPPIOCDISCONN                    = 0x20007439
	PPPIOCGASYNCMAP                  = 0x40047458
	PPPIOCGCHAN                      = 0x40047437
	PPPIOCGDEBUG                     = 0x40047441
	PPPIOCGFLAGS                     = 0x4004745a
	PPPIOCGIDLE                      = 0x4010743f
	PPPIOCGIDLE32                    = 0x4008743f
	PPPIOCGIDLE64                    = 0x4010743f
	PPPIOCGL2TPSTATS                 = 0x40487436
	PPPIOCGMRU                       = 0x40047453
	PPPIOCGRASYNCMAP                 = 0x40047455
	PPPIOCGUNIT                      = 0x40047456
	PPPIOCGXASYNCMAP                 = 0x40207450
	PPPIOCSACTIVE                    = 0x80107446
	PPPIOCSASYNCMAP                  = 0x80047457
	PPPIOCSCOMPRESS                  = 0x8010744d
	PPPIOCSDEBUG                     = 0x80047440
	PPPIOCSFLAGS                     = 0x80047459
	PPPIOCSMAXCID                    = 0x80047451
	PPPIOCSMRRU                      = 0x8004743b
	PPPIOCSMRU                       = 0x80047452
	PPPIOCSNPMODE                    = 0x8008744b
	PPPIOCSPASS                      = 0x80107447
	PPPIOCSRASYNCMAP                 = 0x80047454
	PPPIOCSXASYNCMAP                 = 0x8020744f
	PPPIOCUNBRIDGECHAN               = 0x20007434
	PPPIOCXFERUNIT                   = 0x2000744e
	PROT_SAO                         = 0x10
	PR_SET_PTRACER_ANY               = 0xffffffffffffffff
	PTRACE_GETEVRREGS                = 0x14
	PTRACE_GETFPREGS                 = 0xe
	PTRACE_GETREGS64                 = 0x16
	PTRACE_GETVRREGS                 = 0x12
	PTRACE_GETVSRREGS                = 0x1b
	PTRACE_GET_DEBUGREG              = 0x19
	PTRACE_SETEVRREGS                = 0x15
	PTRACE_SETFPREGS                 = 0xf
	PTRACE_SETREGS64                 = 0x17
	PTRACE_SETVRREGS                 = 0x13
	PTRACE_SETVSRREGS                = 0x1c
	PTRACE_SET_DEBUGREG              = 0x1a
	PTRACE_SINGLEBLOCK               = 0x100
	PTRACE_SYSEMU                    = 0x1d
	PTRACE_SYSEMU_SINGLESTEP         = 0x1e
	PT_CCR                           = 0x26
	PT_CTR                           = 0x23
	PT_DAR                           = 0x29
	PT_DSCR                          = 0x2c
	PT_DSISR                         = 0x2a
	PT_FPR0                          = 0x30
	PT_FPSCR                         = 0x50
	PT_LNK                           = 0x24
	PT_MSR                           = 0x21
	PT_NIP                           = 0x20
	PT_ORIG_R3                       = 0x22
	PT_R0                            = 0x0
	PT_R1                            = 0x1
	PT_R10                           = 0xa
	PT_R11                           = 0xb
	PT_R12                           = 0xc
	PT_R13                           = 0xd
	PT_R14                           = 0xe
	PT_R15                           = 0xf
	PT_R16                           = 0x10
	PT_R17                           = 0x11
	PT_R18                           = 0x12
	PT_R19                           = 0x13
	PT_R2                            = 0x2
	PT_R20                           = 0x14
	PT_R21                           = 0x15
	PT_R22                           = 0x16
	PT_R23                           = 0x17
	PT_R24                           = 0x18
	PT_R25                           = 0x19
	PT_R26                           = 0x1a
	PT_R27                           = 0x1b
	PT_R28                           = 0x1c
	PT_R29                           = 0x1d
	PT_R3                            = 0x3
	PT_R30                           = 0x1e
	PT_R31                           = 0x1f
	PT_R4                            = 0x4
	PT_R5                            = 0x5
	PT_R6                            = 0x6
	PT_R7                            = 0x7
	PT_R8                            = 0x8
	PT_R9                            = 0x9
	PT_REGS_COUNT                    = 0x2c
	PT_RESULT                        = 0x2b
	PT_SOFTE                         = 0x27
	PT_TRAP                          = 0x28
	PT_VR0                           = 0x52
	PT_VRSAVE                        = 0x94
	PT_VSCR                          = 0x93
	PT_VSR0                          = 0x96
	PT_VSR31                         = 0xd4
	PT_XER                           = 0x25
	RLIMIT_AS                        = 0x9
	RLIMIT_MEMLOCK                   = 0x8
	RLIMIT_NOFILE                    = 0x7
	RLIMIT_NPROC                     = 0x6
	RLIMIT_RSS                       = 0x5
	RNDADDENTROPY                    = 0x80085203
	RNDADDTOENTCNT                   = 0x80045201
	RNDCLEARPOOL                     = 0x20005206
	RNDGETENTCNT                     = 0x40045200
	RNDGETPOOL                       = 0x40085202
	RNDRESEEDCRNG                    = 0x20005207
	RNDZAPENTCNT                     = 0x20005204
	RTC_AIE_OFF                      = 0x20007002
	RTC_AIE_ON                       = 0x20007001
	RTC_ALM_READ                     = 0x40247008
	RTC_ALM_SET                      = 0x80247007
	RTC_EPOCH_READ                   = 0x4008700d
	RTC_EPOCH_SET                    = 0x8008700e
	RTC_IRQP_READ                    = 0x4008700b
	RTC_IRQP_SET                     = 0x8008700c
	RTC_PARAM_GET                    = 0x80187013
	RTC_PARAM_SET                    = 0x80187014
	RTC_PIE_OFF                      = 0x20007006
	RTC_PIE_ON                       = 0x20007005
	RTC_PLL_GET                      = 0x40207011
	RTC_PLL_SET                      = 0x80207012
	RTC_RD_TIME                      = 0x40247009
	RTC_SET_TIME                     = 0x8024700a
	RTC_UIE_OFF                      = 0x20007004
	RTC_UIE_ON                       = 0x20007003
	RTC_VL_CLR                       = 0x20007014
	RTC_VL_READ                      = 0x40047013
	RTC_WIE_OFF                      = 0x20007010
	RTC_WIE_ON                       = 0x2000700f
	RTC_WKALM_RD                     = 0x40287010
	RTC_WKALM_SET                    = 0x8028700f
	SCM_TIMESTAMPING                 = 0x25
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
	SCM_TIMESTAMPNS                  = 0x23
	SCM_TXTIME                       = 0x3d
	SCM_WIFI_STATUS                  = 0x29
	SFD_CLOEXEC                      = 0x80000
	SFD_NONBLOCK                     = 0x800
	SIOCATMARK                       = 0x8905
	SIOCGPGRP                        = 0x8904
	SIOCGSTAMPNS_NEW                 = 0x40108907
	SIOCGSTAMP_NEW                   = 0x40108906
	SIOCINQ                          = 0x4004667f
	SIOCOUTQ                         = 0x40047473
	SIOCSPGRP                        = 0x8902
	SOCK_CLOEXEC                     = 0x80000
	SOCK_DGRAM                       = 0x2
	SOCK_NONBLOCK                    = 0x800
	SOCK_STREAM                      = 0x1
	SOL_SOCKET                       = 0x1
	SO_ACCEPTCONN                    = 0x1e
	SO_ATTACH_BPF                    = 0x32
	SO_ATTACH_REUSEPORT_CBPF         = 0x33
	SO_ATTACH_REUSEPORT_EBPF         = 0x34
	SO_BINDTODEVICE                  = 0x19
	SO_BINDTOIFINDEX                 = 0x3e
	SO_BPF_EXTENSIONS                = 0x30
	SO_BROADCAST                     = 0x6
	SO_BSDCOMPAT                     = 0xe
	SO_BUF_LOCK                      = 0x48
	SO_BUSY_POLL                     = 0x2e
	SO_BUSY_POLL_BUDGET              = 0x46
	SO_CNX_ADVICE                    = 0x35
	SO_COOKIE                        = 0x39
	SO_DETACH_REUSEPORT_BPF          = 0x44
	SO_DOMAIN                        = 0x27
	SO_DONTROUTE                     = 0x5
	SO_ERROR                         = 0x4
	SO_INCOMING_CPU                  = 0x31
	SO_INCOMING_NAPI_ID              = 0x38
	SO_KEEPALIVE                     = 0x9
	SO_LINGER                        = 0xd
	SO_LOCK_FILTER                   = 0x2c
	SO_MARK                          = 0x24
	SO_MAX_PACING_RATE               = 0x2f
	SO_MEMINFO                       = 0x37
	SO_NETNS_COOKIE                  = 0x47
	SO_NOFCS                         = 0x2b
	SO_OOBINLINE                     = 0xa
	SO_PASSCRED                      = 0x14
	SO_PASSSEC                       = 0x22
	SO_PEEK_OFF                      = 0x2a
	SO_PEERCRED                      = 0x15
	SO_PEERGROUPS                    = 0x3b
	SO_PEERSEC                       = 0x1f
	SO_PREFER_BUSY_POLL              = 0x45
	SO_PROTOCOL                      = 0x26
	SO_RCVBUF                        = 0x8
	SO_RCVBUFFORCE                   = 0x21
	SO_RCVLOWAT                      = 0x10
	SO_RCVMARK                       = 0x4b
	SO_RCVTIMEO                      = 0x12
	SO_RCVTIMEO_NEW                  = 0x42
	SO_RCVTIMEO_OLD                  = 0x12
	SO_RESERVE_MEM                   = 0x49
	SO_REUSEADDR                     = 0x2
	SO_REUSEPORT                     = 0xf
	SO_RXQ_OVFL                      = 0x28
	SO_SECURITY_AUTHENTICATION       = 0x16
	SO_SECURITY_ENCRYPTION_NETWORK   = 0x18
	SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
	SO_SELECT_ERR_QUEUE              = 0x2d
	SO_SNDBUF                        = 0x7
	SO_SNDBUFFORCE                   = 0x20
	SO_SNDLOWAT                      = 0x11
	SO_SNDTIMEO                      = 0x13
	SO_SNDTIMEO_NEW                  = 0x43
	SO_SNDTIMEO_OLD                  = 0x13
	SO_TIMESTAMPING                  = 0x25
	SO_TIMESTAMPING_NEW              = 0x41
	SO_TIMESTAMPING_OLD              = 0x25
	SO_TIMESTAMPNS                   = 0x23
	SO_TIMESTAMPNS_NEW               = 0x40
	SO_TIMESTAMPNS_OLD               = 0x23
	SO_TIMESTAMP_NEW                 = 0x3f
	SO_TXREHASH                      = 0x4a
	SO_TXTIME                        = 0x3d
	SO_TYPE                          = 0x3
	SO_WIFI_STATUS                   = 0x29
	SO_ZEROCOPY                      = 0x3c
	TAB1                             = 0x400
	TAB2                             = 0x800
	TAB3                             = 0xc00
	TABDLY                           = 0xc00
	TCFLSH                           = 0x2000741f
	TCGETA                           = 0x40147417
	TCGETS                           = 0x402c7413
	TCSAFLUSH                        = 0x2
	TCSBRK                           = 0x2000741d
	TCSBRKP                          = 0x5425
	TCSETA                           = 0x80147418
	TCSETAF                          = 0x8014741c
	TCSETAW                          = 0x80147419
	TCSETS                           = 0x802c7414
	TCSETSF                          = 0x802c7416
	TCSETSW                          = 0x802c7415
	TCXONC                           = 0x2000741e
	TFD_CLOEXEC                      = 0x80000
	TFD_NONBLOCK                     = 0x800
	TIOCCBRK                         = 0x5428
	TIOCCONS                         = 0x541d
	TIOCEXCL                         = 0x540c
	TIOCGDEV                         = 0x40045432
	TIOCGETC                         = 0x40067412
	TIOCGETD                         = 0x5424
	TIOCGETP                         = 0x40067408
	TIOCGEXCL                        = 0x40045440
	TIOCGICOUNT                      = 0x545d
	TIOCGISO7816                     = 0x40285442
	TIOCGLCKTRMIOS                   = 0x5456
	TIOCGLTC                         = 0x40067474
	TIOCGPGRP                        = 0x40047477
	TIOCGPKT                         = 0x40045438
	TIOCGPTLCK                       = 0x40045439
	TIOCGPTN                         = 0x40045430
	TIOCGPTPEER                      = 0x20005441
	TIOCGRS485                       = 0x542e
	TIOCGSERIAL                      = 0x541e
	TIOCGSID                         = 0x5429
	TIOCGSOFTCAR                     = 0x5419
	TIOCGWINSZ                       = 0x40087468
	TIOCINQ                          = 0x4004667f
	TIOCLINUX                        = 0x541c
	TIOCMBIC                         = 0x5417
	TIOCMBIS                         = 0x5416
	TIOCMGET                         = 0x5415
	TIOCMIWAIT                       = 0x545c
	TIOCMSET                         = 0x5418
	TIOCM_CAR                        = 0x40
	TIOCM_CD                         = 0x40
	TIOCM_CTS                        = 0x20
	TIOCM_DSR                        = 0x100
	TIOCM_LOOP                       = 0x8000
	TIOCM_OUT1                       = 0x2000
	TIOCM_OUT2                       = 0x4000
	TIOCM_RI                         = 0x80
	TIOCM_RNG                        = 0x80
	TIOCM_SR                         = 0x10
	TIOCM_ST                         = 0x8
	TIOCNOTTY                        = 0x5422
	TIOCNXCL                         = 0x540d
	TIOCOUTQ                         = 0x40047473
	TIOCPKT                          = 0x5420
	TIOCSBRK                         = 0x5427
	TIOCSCTTY                        = 0x540e
	TIOCSERCONFIG                    = 0x5453
	TIOCSERGETLSR                    = 0x5459
	TIOCSERGETMULTI                  = 0x545a
	TIOCSERGSTRUCT                   = 0x5458
	TIOCSERGWILD                     = 0x5454
	TIOCSERSETMULTI                  = 0x545b
	TIOCSERSWILD                     = 0x5455
	TIOCSER_TEMT                     = 0x1
	TIOCSETC                         = 0x80067411
	TIOCSETD                         = 0x5423
	TIOCSETN                         = 0x8006740a
	TIOCSETP                         = 0x80067409
	TIOCSIG                          = 0x80045436
	TIOCSISO7816                     = 0xc0285443
	TIOCSLCKTRMIOS                   = 0x5457
	TIOCSLTC                         = 0x80067475
	TIOCSPGRP                        = 0x80047476
	TIOCSPTLCK                       = 0x80045431
	TIOCSRS485                       = 0x542f
	TIOCSSERIAL                      = 0x541f
	TIOCSSOFTCAR                     = 0x541a
	TIOCSTART                        = 0x2000746e
	TIOCSTI                          = 0x5412
	TIOCSTOP                         = 0x2000746f
	TIOCSWINSZ                       = 0x80087467
	TIOCVHANGUP                      = 0x5437
	TOSTOP                           = 0x400000
	TUNATTACHFILTER                  = 0x801054d5
	TUNDETACHFILTER                  = 0x801054d6
	TUNGETDEVNETNS                   = 0x200054e3
	TUNGETFEATURES                   = 0x400454cf
	TUNGETFILTER                     = 0x401054db
	TUNGETIFF                        = 0x400454d2
	TUNGETSNDBUF                     = 0x400454d3
	TUNGETVNETBE                     = 0x400454df
	TUNGETVNETHDRSZ                  = 0x400454d7
	TUNGETVNETLE                     = 0x400454dd
	TUNSETCARRIER                    = 0x800454e2
	TUNSETDEBUG                      = 0x800454c9
	TUNSETFILTEREBPF                 = 0x400454e1
	TUNSETGROUP                      = 0x800454ce
	TUNSETIFF                        = 0x800454ca
	TUNSETIFINDEX                    = 0x800454da
	TUNSETLINK                       = 0x800454cd
	TUNSETNOCSUM                     = 0x800454c8
	TUNSETOFFLOAD                    = 0x800454d0
	TUNSETOWNER                      = 0x800454cc
	TUNSETPERSIST                    = 0x800454cb
	TUNSETQUEUE                      = 0x800454d9
	TUNSETSNDBUF                     = 0x800454d4
	TUNSETSTEERINGEBPF               = 0x400454e0
	TUNSETTXFILTER                   = 0x800454d1
	TUNSETVNETBE                     = 0x800454de
	TUNSETVNETHDRSZ                  = 0x800454d8
	TUNSETVNETLE                     = 0x800454dc
	UBI_IOCATT                       = 0x80186f40
	UBI_IOCDET                       = 0x80046f41
	UBI_IOCEBCH                      = 0x80044f02
	UBI_IOCEBER                      = 0x80044f01
	UBI_IOCEBISMAP                   = 0x40044f05
	UBI_IOCEBMAP                     = 0x80084f03
	UBI_IOCEBUNMAP                   = 0x80044f04
	UBI_IOCMKVOL                     = 0x80986f00
	UBI_IOCRMVOL                     = 0x80046f01
	UBI_IOCRNVOL                     = 0x91106f03
	UBI_IOCRPEB                      = 0x80046f04
	UBI_IOCRSVOL                     = 0x800c6f02
	UBI_IOCSETVOLPROP                = 0x80104f06
	UBI_IOCSPEB                      = 0x80046f05
	UBI_IOCVOLCRBLK                  = 0x80804f07
	UBI_IOCVOLRMBLK                  = 0x20004f08
	UBI_IOCVOLUP                     = 0x80084f00
	VDISCARD                         = 0x10
	VEOF                             = 0x4
	VEOL                             = 0x6
	VEOL2                            = 0x8
	VMIN                             = 0x5
	VREPRINT                         = 0xb
	VSTART                           = 0xd
	VSTOP                            = 0xe
	VSUSP                            = 0xc
	VSWTC                            = 0x9
	VT1                              = 0x10000
	VTDLY                            = 0x10000
	VTIME                            = 0x7
	VWERASE                          = 0xa
	WDIOC_GETBOOTSTATUS              = 0x40045702
	WDIOC_GETPRETIMEOUT              = 0x40045709
	WDIOC_GETSTATUS                  = 0x40045701
	WDIOC_GETSUPPORT                 = 0x40285700
	WDIOC_GETTEMP                    = 0x40045703
	WDIOC_GETTIMELEFT                = 0x4004570a
	WDIOC_GETTIMEOUT                 = 0x40045707
	WDIOC_KEEPALIVE                  = 0x40045705
	WDIOC_SETOPTIONS                 = 0x40045704
	WORDSIZE                         = 0x40
	XCASE                            = 0x4000
	XTABS                            = 0xc00
	_HIDIOCGRAWNAME                  = 0x40804804
	_HIDIOCGRAWPHYS                  = 0x40404805
	_HIDIOCGRAWUNIQ                  = 0x40404808
)

// Errors
const (
	EADDRINUSE      = syscall.Errno(0x62)
	EADDRNOTAVAIL   = syscall.Errno(0x63)
	EADV            = syscall.Errno(0x44)
	EAFNOSUPPORT    = syscall.Errno(0x61)
	EALREADY        = syscall.Errno(0x72)
	EBADE           = syscall.Errno(0x34)
	EBADFD          = syscall.Errno(0x4d)
	EBADMSG         = syscall.Errno(0x4a)
	EBADR           = syscall.Errno(0x35)
	EBADRQC         = syscall.Errno(0x38)
	EBADSLT         = syscall.Errno(0x39)
	EBFONT          = syscall.Errno(0x3b)
	ECANCELED       = syscall.Errno(0x7d)
	ECHRNG          = syscall.Errno(0x2c)
	ECOMM           = syscall.Errno(0x46)
	ECONNABORTED    = syscall.Errno(0x67)
	ECONNREFUSED    = syscall.Errno(0x6f)
	ECONNRESET      = syscall.Errno(0x68)
	EDEADLK         = syscall.Errno(0x23)
	EDEADLOCK       = syscall.Errno(0x3a)
	EDESTADDRREQ    = syscall.Errno(0x59)
	EDOTDOT         = syscall.Errno(0x49)
	EDQUOT          = syscall.Errno(0x7a)
	EHOSTDOWN       = syscall.Errno(0x70)
	EHOSTUNREACH    = syscall.Errno(0x71)
	EHWPOISON       = syscall.Errno(0x85)
	EIDRM           = syscall.Errno(0x2b)
	EILSEQ          = syscall.Errno(0x54)
	EINPROGRESS     = syscall.Errno(0x73)
	EISCONN         = syscall.Errno(0x6a)
	EISNAM          = syscall.Errno(0x78)
	EKEYEXPIRED     = syscall.Errno(0x7f)
	EKEYREJECTED    = syscall.Errno(0x81)
	EKEYREVOKED     = syscall.Errno(0x80)
	EL2HLT          = syscall.Errno(0x33)
	EL2NSYNC        = syscall.Errno(0x2d)
	EL3HLT          = syscall.Errno(0x2e)
	EL3RST          = syscall.Errno(0x2f)
	ELIBACC         = syscall.Errno(0x4f)
	ELIBBAD         = syscall.Errno(0x50)
	ELIBEXEC        = syscall.Errno(0x53)
	ELIBMAX         = syscall.Errno(0x52)
	ELIBSCN         = syscall.Errno(0x51)
	ELNRNG          = syscall.Errno(0x30)
	ELOOP           = syscall.Errno(0x28)
	EMEDIUMTYPE     = syscall.Errno(0x7c)
	EMSGSIZE        = syscall.Errno(0x5a)
	EMULTIHOP       = syscall.Errno(0x48)
	ENAMETOOLONG    = syscall.Errno(0x24)
	ENAVAIL         = syscall.Errno(0x77)
	ENETDOWN        = syscall.Errno(0x64)
	ENETRESET       = syscall.Errno(0x66)
	ENETUNREACH     = syscall.Errno(0x65)
	ENOANO          = syscall.Errno(0x37)
	ENOBUFS         = syscall.Errno(0x69)
	ENOCSI          = syscall.Errno(0x32)
	ENODATA         = syscall.Errno(0x3d)
	ENOKEY          = syscall.Errno(0x7e)
	ENOLCK          = syscall.Errno(0x25)
	ENOLINK         = syscall.Errno(0x43)
	ENOMEDIUM       = syscall.Errno(0x7b)
	ENOMSG          = syscall.Errno(0x2a)
	ENONET          = syscall.Errno(0x40)
	ENOPKG          = syscall.Errno(0x41)
	ENOPROTOOPT     = syscall.Errno(0x5c)
	ENOSR           = syscall.Errno(0x3f)
	ENOSTR          = syscall.Errno(0x3c)
	ENOSYS          = syscall.Errno(0x26)
	ENOTCONN        = syscall.Errno(0x6b)
	ENOTEMPTY       = syscall.Errno(0x27)
	ENOTNAM         = syscall.Errno(0x76)
	ENOTRECOVERABLE = syscall.Errno(0x83)
	ENOTSOCK        = syscall.Errno(0x58)
	ENOTSUP         = syscall.Errno(0x5f)
	ENOTUNIQ        = syscall.Errno(0x4c)
	EOPNOTSUPP      = syscall.Errno(0x5f)
	EOVERFLOW       = syscall.Errno(0x4b)
	EOWNERDEAD      = syscall.Errno(0x82)
	EPFNOSUPPORT    = syscall.Errno(0x60)
	EPROTO          = syscall.Errno(0x47)
	EPROTONOSUPPORT = syscall.Errno(0x5d)
	EPROTOTYPE      = syscall.Errno(0x5b)
	EREMCHG         = syscall.Errno(0x4e)
	EREMOTE         = syscall.Errno(0x42)
	EREMOTEIO       = syscall.Errno(0x79)
	ERESTART        = syscall.Errno(0x55)
	ERFKILL         = syscall.Errno(0x84)
	ESHUTDOWN       = syscall.Errno(0x6c)
	ESOCKTNOSUPPORT = syscall.Errno(0x5e)
	ESRMNT          = syscall.Errno(0x45)
	ESTALE          = syscall.Errno(0x74)
	ESTRPIPE        = syscall.Errno(0x56)
	ETIME           = syscall.Errno(0x3e)
	ETIMEDOUT       = syscall.Errno(0x6e)
	ETOOMANYREFS    = syscall.Errno(0x6d)
	EUCLEAN         = syscall.Errno(0x75)
	EUNATCH         = syscall.Errno(0x31)
	EUSERS          = syscall.Errno(0x57)
	EXFULL          = syscall.Errno(0x36)
)

// Signals
const (
	SIGBUS    = syscall.Signal(0x7)
	SIGCHLD   = syscall.Signal(0x11)
	SIGCLD    = syscall.Signal(0x11)
	SIGCONT   = syscall.Signal(0x12)
	SIGIO     = syscall.Signal(0x1d)
	SIGPOLL   = syscall.Signal(0x1d)
	SIGPROF   = syscall.Signal(0x1b)
	SIGPWR    = syscall.Signal(0x1e)
	SIGSTKFLT = syscall.Signal(0x10)
	SIGSTOP   = syscall.Signal(0x13)
	SIGSYS    = syscall.Signal(0x1f)
	SIGTSTP   = syscall.Signal(0x14)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x17)
	SIGUSR1   = syscall.Signal(0xa)
	SIGUSR2   = syscall.Signal(0xc)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "no such device or address"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EAGAIN", "resource temporarily unavailable"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device or resource busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "invalid cross-device link"},
	{19, "ENODEV", "no such device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "numerical result out of range"},
	{35, "EDEADLK", "resource deadlock avoided"},
	{36, "ENAMETOOLONG", "file name too long"},
	{37, "ENOLCK", "no locks available"},
	{38, "ENOSYS", "function not implemented"},
	{39, "ENOTEMPTY", "directory not empty"},
	{40, "ELOOP", "too many levels of symbolic links"},
	{42, "ENOMSG", "no message of desired type"},
	{43, "EIDRM", "identifier removed"},
	{44, "ECHRNG", "channel number out of range"},
	{45, "EL2NSYNC", "level 2 not synchronized"},
	{46, "EL3HLT", "level 3 halted"},
	{47, "EL3RST", "level 3 reset"},
	{48, "ELNRNG", "link number out of range"},
	{49, "EUNATCH", "protocol driver not attached"},
	{50, "ENOCSI", "no CSI structure available"},
	{51, "EL2HLT", "level 2 halted"},
	{52, "EBADE", "invalid exchange"},
	{53, "EBADR", "invalid request descriptor"},
	{54, "EXFULL", "exchange full"},
	{55, "ENOANO", "no anode"},
	{56, "EBADRQC", "invalid request code"},
	{57, "EBADSLT", "invalid slot"},
	{58, "EDEADLOCK", "file locking deadlock error"},
	{59, "EBFONT", "bad font file format"},
	{60, "ENOSTR", "device not a stream"},
	{61, "ENODATA", "no data available"},
	{62, "ETIME", "timer expired"},
	{63, "ENOSR", "out of streams resources"},
	{64, "ENONET", "machine is not on the network"},
	{65, "ENOPKG", "package not installed"},
	{66, "EREMOTE", "object is remote"},
	{67, "ENOLINK", "link has been severed"},
	{68, "EADV", "advertise error"},
	{69, "ESRMNT", "srmount error"},
	{70, "ECOMM", "communication error on send"},
	{71, "EPROTO", "protocol error"},
	{72, "EMULTIHOP", "multihop attempted"},
	{73, "EDOTDOT", "RFS specific error"},
	{74, "EBADMSG", "bad message"},
	{75, "EOVERFLOW", "value too large for defined data type"},
	{76, "ENOTUNIQ", "name not unique on network"},
	{77, "EBADFD", "file descriptor in bad state"},
	{78, "EREMCHG", "remote address changed"},
	{79, "ELIBACC", "can not access a needed shared library"},
	{80, "ELIBBAD", "accessing a corrupted shared library"},
	{81, "ELIBSCN", ".lib section in a.out corrupted"},
	{82, "ELIBMAX", "attempting to link in too many shared libraries"},
	{83, "ELIBEXEC", "cannot exec a shared library directly"},
	{84, "EILSEQ", "invalid or incomplete multibyte or wide character"},
	{85, "ERESTART", "interrupted system call should be restarted"},
	{86, "ESTRPIPE", "streams pipe error"},
	{87, "EUSERS", "too many users"},
	{88, "ENOTSOCK", "socket operation on non-socket"},
	{89, "EDESTADDRREQ", "destination address required"},
	{90, "EMSGSIZE", "message too long"},
	{91, "EPROTOTYPE", "protocol wrong type for socket"},
	{92, "ENOPROTOOPT", "protocol not available"},
	{93, "EPROTONOSUPPORT", "protocol not supported"},
	{94, "ESOCKTNOSUPPORT", "socket type not supported"},
	{95, "ENOTSUP", "operation not supported"},
	{96, "EPFNOSUPPORT", "protocol family not supported"},
	{97, "EAFNOSUPPORT", "address family not supported by protocol"},
	{98, "EADDRINUSE", "address already in use"},
	{99, "EADDRNOTAVAIL", "cannot assign requested address"},
	{100, "ENETDOWN", "network is down"},
	{101, "ENETUNREACH", "network is unreachable"},
	{102, "ENETRESET", "network dropped connection on reset"},
	{103, "ECONNABORTED", "software caused connection abort"},
	{104, "ECONNRESET", "connection reset by peer"},
	{105, "ENOBUFS", "no buffer space available"},
	{106, "EISCONN", "transport endpoint is already connected"},
	{107, "ENOTCONN", "transport endpoint is not connected"},
	{108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
	{109, "ETOOMANYREFS", "too many references: cannot splice"},
	{110, "ETIMEDOUT", "connection timed out"},
	{111, "ECONNREFUSED", "connection refused"},
	{112, "EHOSTDOWN", "host is down"},
	{113, "EHOSTUNREACH", "no route to host"},
	{114, "EALREADY", "operation already in progress"},
	{115, "EINPROGRESS", "operation now in progress"},
	{116, "ESTALE", "stale file handle"},
	{117, "EUCLEAN", "structure needs cleaning"},
	{118, "ENOTNAM", "not a XENIX named type file"},
	{119, "ENAVAIL", "no XENIX semaphores available"},
	{120, "EISNAM", "is a named type file"},
	{121, "EREMOTEIO", "remote I/O error"},
	{122, "EDQUOT", "disk quota exceeded"},
	{123, "ENOMEDIUM", "no medium found"},
	{124, "EMEDIUMTYPE", "wrong medium type"},
	{125, "ECANCELED", "operation canceled"},
	{126, "ENOKEY", "required key not available"},
	{127, "EKEYEXPIRED", "key has expired"},
	{128, "EKEYREVOKED", "key has been revoked"},
	{129, "EKEYREJECTED", "key was rejected by service"},
	{130, "EOWNERDEAD", "owner died"},
	{131, "ENOTRECOVERABLE", "state not recoverable"},
	{132, "ERFKILL", "operation not possible due to RF-kill"},
	{133, "EHWPOISON", "memory page has hardware error"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/breakpoint trap"},
	{6, "SIGABRT", "aborted"},
	{7, "SIGBUS", "bus error"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGUSR1", "user defined signal 1"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGUSR2", "user defined signal 2"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGSTKFLT", "stack fault"},
	{17, "SIGCHLD", "child exited"},
	{18, "SIGCONT", "continued"},
	{19, "SIGSTOP", "stopped (signal)"},
	{20, "SIGTSTP", "stopped"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGURG", "urgent I/O condition"},
	{24, "SIGXCPU", "CPU time limit exceeded"},
	{25, "SIGXFSZ", "file size limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window changed"},
	{29, "SIGIO", "I/O possible"},
	{30, "SIGPWR", "power failure"},
	{31, "SIGSYS", "bad system call"},
}
07070100000E37000081A4000000000000000000000001645E367C0000841E000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go // mkerrors.sh -Wall -Werror -static -I/tmp/riscv64/include
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build riscv64 && linux
// +build riscv64,linux

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -Wall -Werror -static -I/tmp/riscv64/include _const.go

package unix

import "syscall"

const (
	B1000000                         = 0x1008
	B115200                          = 0x1002
	B1152000                         = 0x1009
	B1500000                         = 0x100a
	B2000000                         = 0x100b
	B230400                          = 0x1003
	B2500000                         = 0x100c
	B3000000                         = 0x100d
	B3500000                         = 0x100e
	B4000000                         = 0x100f
	B460800                          = 0x1004
	B500000                          = 0x1005
	B57600                           = 0x1001
	B576000                          = 0x1006
	B921600                          = 0x1007
	BLKBSZGET                        = 0x80081270
	BLKBSZSET                        = 0x40081271
	BLKFLSBUF                        = 0x1261
	BLKFRAGET                        = 0x1265
	BLKFRASET                        = 0x1264
	BLKGETSIZE                       = 0x1260
	BLKGETSIZE64                     = 0x80081272
	BLKPBSZGET                       = 0x127b
	BLKRAGET                         = 0x1263
	BLKRASET                         = 0x1262
	BLKROGET                         = 0x125e
	BLKROSET                         = 0x125d
	BLKRRPART                        = 0x125f
	BLKSECTGET                       = 0x1267
	BLKSECTSET                       = 0x1266
	BLKSSZGET                        = 0x1268
	BOTHER                           = 0x1000
	BS1                              = 0x2000
	BSDLY                            = 0x2000
	CBAUD                            = 0x100f
	CBAUDEX                          = 0x1000
	CIBAUD                           = 0x100f0000
	CLOCAL                           = 0x800
	CR1                              = 0x200
	CR2                              = 0x400
	CR3                              = 0x600
	CRDLY                            = 0x600
	CREAD                            = 0x80
	CS6                              = 0x10
	CS7                              = 0x20
	CS8                              = 0x30
	CSIZE                            = 0x30
	CSTOPB                           = 0x40
	ECCGETLAYOUT                     = 0x81484d11
	ECCGETSTATS                      = 0x80104d12
	ECHOCTL                          = 0x200
	ECHOE                            = 0x10
	ECHOK                            = 0x20
	ECHOKE                           = 0x800
	ECHONL                           = 0x40
	ECHOPRT                          = 0x400
	EFD_CLOEXEC                      = 0x80000
	EFD_NONBLOCK                     = 0x800
	EPOLL_CLOEXEC                    = 0x80000
	EXTPROC                          = 0x10000
	FF1                              = 0x8000
	FFDLY                            = 0x8000
	FICLONE                          = 0x40049409
	FICLONERANGE                     = 0x4020940d
	FLUSHO                           = 0x1000
	FS_IOC_ENABLE_VERITY             = 0x40806685
	FS_IOC_GETFLAGS                  = 0x80086601
	FS_IOC_GET_ENCRYPTION_NONCE      = 0x8010661b
	FS_IOC_GET_ENCRYPTION_POLICY     = 0x400c6615
	FS_IOC_GET_ENCRYPTION_PWSALT     = 0x40106614
	FS_IOC_SETFLAGS                  = 0x40086602
	FS_IOC_SET_ENCRYPTION_POLICY     = 0x800c6613
	F_GETLK                          = 0x5
	F_GETLK64                        = 0x5
	F_GETOWN                         = 0x9
	F_RDLCK                          = 0x0
	F_SETLK                          = 0x6
	F_SETLK64                        = 0x6
	F_SETLKW                         = 0x7
	F_SETLKW64                       = 0x7
	F_SETOWN                         = 0x8
	F_UNLCK                          = 0x2
	F_WRLCK                          = 0x1
	HIDIOCGRAWINFO                   = 0x80084803
	HIDIOCGRDESC                     = 0x90044802
	HIDIOCGRDESCSIZE                 = 0x80044801
	HUPCL                            = 0x400
	ICANON                           = 0x2
	IEXTEN                           = 0x8000
	IN_CLOEXEC                       = 0x80000
	IN_NONBLOCK                      = 0x800
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9
	ISIG                             = 0x1
	IUCLC                            = 0x200
	IXOFF                            = 0x1000
	IXON                             = 0x400
	MAP_ANON                         = 0x20
	MAP_ANONYMOUS                    = 0x20
	MAP_DENYWRITE                    = 0x800
	MAP_EXECUTABLE                   = 0x1000
	MAP_GROWSDOWN                    = 0x100
	MAP_HUGETLB                      = 0x40000
	MAP_LOCKED                       = 0x2000
	MAP_NONBLOCK                     = 0x10000
	MAP_NORESERVE                    = 0x4000
	MAP_POPULATE                     = 0x8000
	MAP_STACK                        = 0x20000
	MAP_SYNC                         = 0x80000
	MCL_CURRENT                      = 0x1
	MCL_FUTURE                       = 0x2
	MCL_ONFAULT                      = 0x4
	MEMERASE                         = 0x40084d02
	MEMERASE64                       = 0x40104d14
	MEMGETBADBLOCK                   = 0x40084d0b
	MEMGETINFO                       = 0x80204d01
	MEMGETOOBSEL                     = 0x80c84d0a
	MEMGETREGIONCOUNT                = 0x80044d07
	MEMISLOCKED                      = 0x80084d17
	MEMLOCK                          = 0x40084d05
	MEMREAD                          = 0xc0404d1a
	MEMREADOOB                       = 0xc0104d04
	MEMSETBADBLOCK                   = 0x40084d0c
	MEMUNLOCK                        = 0x40084d06
	MEMWRITEOOB                      = 0xc0104d03
	MTDFILEMODE                      = 0x4d13
	NFDBITS                          = 0x40
	NLDLY                            = 0x100
	NOFLSH                           = 0x80
	NS_GET_NSTYPE                    = 0xb703
	NS_GET_OWNER_UID                 = 0xb704
	NS_GET_PARENT                    = 0xb702
	NS_GET_USERNS                    = 0xb701
	OLCUC                            = 0x2
	ONLCR                            = 0x4
	OTPERASE                         = 0x400c4d19
	OTPGETREGIONCOUNT                = 0x40044d0e
	OTPGETREGIONINFO                 = 0x400c4d0f
	OTPLOCK                          = 0x800c4d10
	OTPSELECT                        = 0x80044d0d
	O_APPEND                         = 0x400
	O_ASYNC                          = 0x2000
	O_CLOEXEC                        = 0x80000
	O_CREAT                          = 0x40
	O_DIRECT                         = 0x4000
	O_DIRECTORY                      = 0x10000
	O_DSYNC                          = 0x1000
	O_EXCL                           = 0x80
	O_FSYNC                          = 0x101000
	O_LARGEFILE                      = 0x0
	O_NDELAY                         = 0x800
	O_NOATIME                        = 0x40000
	O_NOCTTY                         = 0x100
	O_NOFOLLOW                       = 0x20000
	O_NONBLOCK                       = 0x800
	O_PATH                           = 0x200000
	O_RSYNC                          = 0x101000
	O_SYNC                           = 0x101000
	O_TMPFILE                        = 0x410000
	O_TRUNC                          = 0x200
	PARENB                           = 0x100
	PARODD                           = 0x200
	PENDIN                           = 0x4000
	PERF_EVENT_IOC_DISABLE           = 0x2401
	PERF_EVENT_IOC_ENABLE            = 0x2400
	PERF_EVENT_IOC_ID                = 0x80082407
	PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b
	PERF_EVENT_IOC_PAUSE_OUTPUT      = 0x40042409
	PERF_EVENT_IOC_PERIOD            = 0x40082404
	PERF_EVENT_IOC_QUERY_BPF         = 0xc008240a
	PERF_EVENT_IOC_REFRESH           = 0x2402
	PERF_EVENT_IOC_RESET             = 0x2403
	PERF_EVENT_IOC_SET_BPF           = 0x40042408
	PERF_EVENT_IOC_SET_FILTER        = 0x40082406
	PERF_EVENT_IOC_SET_OUTPUT        = 0x2405
	PPPIOCATTACH                     = 0x4004743d
	PPPIOCATTCHAN                    = 0x40047438
	PPPIOCBRIDGECHAN                 = 0x40047435
	PPPIOCCONNECT                    = 0x4004743a
	PPPIOCDETACH                     = 0x4004743c
	PPPIOCDISCONN                    = 0x7439
	PPPIOCGASYNCMAP                  = 0x80047458
	PPPIOCGCHAN                      = 0x80047437
	PPPIOCGDEBUG                     = 0x80047441
	PPPIOCGFLAGS                     = 0x8004745a
	PPPIOCGIDLE                      = 0x8010743f
	PPPIOCGIDLE32                    = 0x8008743f
	PPPIOCGIDLE64                    = 0x8010743f
	PPPIOCGL2TPSTATS                 = 0x80487436
	PPPIOCGMRU                       = 0x80047453
	PPPIOCGRASYNCMAP                 = 0x80047455
	PPPIOCGUNIT                      = 0x80047456
	PPPIOCGXASYNCMAP                 = 0x80207450
	PPPIOCSACTIVE                    = 0x40107446
	PPPIOCSASYNCMAP                  = 0x40047457
	PPPIOCSCOMPRESS                  = 0x4010744d
	PPPIOCSDEBUG                     = 0x40047440
	PPPIOCSFLAGS                     = 0x40047459
	PPPIOCSMAXCID                    = 0x40047451
	PPPIOCSMRRU                      = 0x4004743b
	PPPIOCSMRU                       = 0x40047452
	PPPIOCSNPMODE                    = 0x4008744b
	PPPIOCSPASS                      = 0x40107447
	PPPIOCSRASYNCMAP                 = 0x40047454
	PPPIOCSXASYNCMAP                 = 0x4020744f
	PPPIOCUNBRIDGECHAN               = 0x7434
	PPPIOCXFERUNIT                   = 0x744e
	PR_SET_PTRACER_ANY               = 0xffffffffffffffff
	RLIMIT_AS                        = 0x9
	RLIMIT_MEMLOCK                   = 0x8
	RLIMIT_NOFILE                    = 0x7
	RLIMIT_NPROC                     = 0x6
	RLIMIT_RSS                       = 0x5
	RNDADDENTROPY                    = 0x40085203
	RNDADDTOENTCNT                   = 0x40045201
	RNDCLEARPOOL                     = 0x5206
	RNDGETENTCNT                     = 0x80045200
	RNDGETPOOL                       = 0x80085202
	RNDRESEEDCRNG                    = 0x5207
	RNDZAPENTCNT                     = 0x5204
	RTC_AIE_OFF                      = 0x7002
	RTC_AIE_ON                       = 0x7001
	RTC_ALM_READ                     = 0x80247008
	RTC_ALM_SET                      = 0x40247007
	RTC_EPOCH_READ                   = 0x8008700d
	RTC_EPOCH_SET                    = 0x4008700e
	RTC_IRQP_READ                    = 0x8008700b
	RTC_IRQP_SET                     = 0x4008700c
	RTC_PARAM_GET                    = 0x40187013
	RTC_PARAM_SET                    = 0x40187014
	RTC_PIE_OFF                      = 0x7006
	RTC_PIE_ON                       = 0x7005
	RTC_PLL_GET                      = 0x80207011
	RTC_PLL_SET                      = 0x40207012
	RTC_RD_TIME                      = 0x80247009
	RTC_SET_TIME                     = 0x4024700a
	RTC_UIE_OFF                      = 0x7004
	RTC_UIE_ON                       = 0x7003
	RTC_VL_CLR                       = 0x7014
	RTC_VL_READ                      = 0x80047013
	RTC_WIE_OFF                      = 0x7010
	RTC_WIE_ON                       = 0x700f
	RTC_WKALM_RD                     = 0x80287010
	RTC_WKALM_SET                    = 0x4028700f
	SCM_TIMESTAMPING                 = 0x25
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
	SCM_TIMESTAMPNS                  = 0x23
	SCM_TXTIME                       = 0x3d
	SCM_WIFI_STATUS                  = 0x29
	SFD_CLOEXEC                      = 0x80000
	SFD_NONBLOCK                     = 0x800
	SIOCATMARK                       = 0x8905
	SIOCGPGRP                        = 0x8904
	SIOCGSTAMPNS_NEW                 = 0x80108907
	SIOCGSTAMP_NEW                   = 0x80108906
	SIOCINQ                          = 0x541b
	SIOCOUTQ                         = 0x5411
	SIOCSPGRP                        = 0x8902
	SOCK_CLOEXEC                     = 0x80000
	SOCK_DGRAM                       = 0x2
	SOCK_NONBLOCK                    = 0x800
	SOCK_STREAM                      = 0x1
	SOL_SOCKET                       = 0x1
	SO_ACCEPTCONN                    = 0x1e
	SO_ATTACH_BPF                    = 0x32
	SO_ATTACH_REUSEPORT_CBPF         = 0x33
	SO_ATTACH_REUSEPORT_EBPF         = 0x34
	SO_BINDTODEVICE                  = 0x19
	SO_BINDTOIFINDEX                 = 0x3e
	SO_BPF_EXTENSIONS                = 0x30
	SO_BROADCAST                     = 0x6
	SO_BSDCOMPAT                     = 0xe
	SO_BUF_LOCK                      = 0x48
	SO_BUSY_POLL                     = 0x2e
	SO_BUSY_POLL_BUDGET              = 0x46
	SO_CNX_ADVICE                    = 0x35
	SO_COOKIE                        = 0x39
	SO_DETACH_REUSEPORT_BPF          = 0x44
	SO_DOMAIN                        = 0x27
	SO_DONTROUTE                     = 0x5
	SO_ERROR                         = 0x4
	SO_INCOMING_CPU                  = 0x31
	SO_INCOMING_NAPI_ID              = 0x38
	SO_KEEPALIVE                     = 0x9
	SO_LINGER                        = 0xd
	SO_LOCK_FILTER                   = 0x2c
	SO_MARK                          = 0x24
	SO_MAX_PACING_RATE               = 0x2f
	SO_MEMINFO                       = 0x37
	SO_NETNS_COOKIE                  = 0x47
	SO_NOFCS                         = 0x2b
	SO_OOBINLINE                     = 0xa
	SO_PASSCRED                      = 0x10
	SO_PASSSEC                       = 0x22
	SO_PEEK_OFF                      = 0x2a
	SO_PEERCRED                      = 0x11
	SO_PEERGROUPS                    = 0x3b
	SO_PEERSEC                       = 0x1f
	SO_PREFER_BUSY_POLL              = 0x45
	SO_PROTOCOL                      = 0x26
	SO_RCVBUF                        = 0x8
	SO_RCVBUFFORCE                   = 0x21
	SO_RCVLOWAT                      = 0x12
	SO_RCVMARK                       = 0x4b
	SO_RCVTIMEO                      = 0x14
	SO_RCVTIMEO_NEW                  = 0x42
	SO_RCVTIMEO_OLD                  = 0x14
	SO_RESERVE_MEM                   = 0x49
	SO_REUSEADDR                     = 0x2
	SO_REUSEPORT                     = 0xf
	SO_RXQ_OVFL                      = 0x28
	SO_SECURITY_AUTHENTICATION       = 0x16
	SO_SECURITY_ENCRYPTION_NETWORK   = 0x18
	SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
	SO_SELECT_ERR_QUEUE              = 0x2d
	SO_SNDBUF                        = 0x7
	SO_SNDBUFFORCE                   = 0x20
	SO_SNDLOWAT                      = 0x13
	SO_SNDTIMEO                      = 0x15
	SO_SNDTIMEO_NEW                  = 0x43
	SO_SNDTIMEO_OLD                  = 0x15
	SO_TIMESTAMPING                  = 0x25
	SO_TIMESTAMPING_NEW              = 0x41
	SO_TIMESTAMPING_OLD              = 0x25
	SO_TIMESTAMPNS                   = 0x23
	SO_TIMESTAMPNS_NEW               = 0x40
	SO_TIMESTAMPNS_OLD               = 0x23
	SO_TIMESTAMP_NEW                 = 0x3f
	SO_TXREHASH                      = 0x4a
	SO_TXTIME                        = 0x3d
	SO_TYPE                          = 0x3
	SO_WIFI_STATUS                   = 0x29
	SO_ZEROCOPY                      = 0x3c
	TAB1                             = 0x800
	TAB2                             = 0x1000
	TAB3                             = 0x1800
	TABDLY                           = 0x1800
	TCFLSH                           = 0x540b
	TCGETA                           = 0x5405
	TCGETS                           = 0x5401
	TCGETS2                          = 0x802c542a
	TCGETX                           = 0x5432
	TCSAFLUSH                        = 0x2
	TCSBRK                           = 0x5409
	TCSBRKP                          = 0x5425
	TCSETA                           = 0x5406
	TCSETAF                          = 0x5408
	TCSETAW                          = 0x5407
	TCSETS                           = 0x5402
	TCSETS2                          = 0x402c542b
	TCSETSF                          = 0x5404
	TCSETSF2                         = 0x402c542d
	TCSETSW                          = 0x5403
	TCSETSW2                         = 0x402c542c
	TCSETX                           = 0x5433
	TCSETXF                          = 0x5434
	TCSETXW                          = 0x5435
	TCXONC                           = 0x540a
	TFD_CLOEXEC                      = 0x80000
	TFD_NONBLOCK                     = 0x800
	TIOCCBRK                         = 0x5428
	TIOCCONS                         = 0x541d
	TIOCEXCL                         = 0x540c
	TIOCGDEV                         = 0x80045432
	TIOCGETD                         = 0x5424
	TIOCGEXCL                        = 0x80045440
	TIOCGICOUNT                      = 0x545d
	TIOCGISO7816                     = 0x80285442
	TIOCGLCKTRMIOS                   = 0x5456
	TIOCGPGRP                        = 0x540f
	TIOCGPKT                         = 0x80045438
	TIOCGPTLCK                       = 0x80045439
	TIOCGPTN                         = 0x80045430
	TIOCGPTPEER                      = 0x5441
	TIOCGRS485                       = 0x542e
	TIOCGSERIAL                      = 0x541e
	TIOCGSID                         = 0x5429
	TIOCGSOFTCAR                     = 0x5419
	TIOCGWINSZ                       = 0x5413
	TIOCINQ                          = 0x541b
	TIOCLINUX                        = 0x541c
	TIOCMBIC                         = 0x5417
	TIOCMBIS                         = 0x5416
	TIOCMGET                         = 0x5415
	TIOCMIWAIT                       = 0x545c
	TIOCMSET                         = 0x5418
	TIOCM_CAR                        = 0x40
	TIOCM_CD                         = 0x40
	TIOCM_CTS                        = 0x20
	TIOCM_DSR                        = 0x100
	TIOCM_RI                         = 0x80
	TIOCM_RNG                        = 0x80
	TIOCM_SR                         = 0x10
	TIOCM_ST                         = 0x8
	TIOCNOTTY                        = 0x5422
	TIOCNXCL                         = 0x540d
	TIOCOUTQ                         = 0x5411
	TIOCPKT                          = 0x5420
	TIOCSBRK                         = 0x5427
	TIOCSCTTY                        = 0x540e
	TIOCSERCONFIG                    = 0x5453
	TIOCSERGETLSR                    = 0x5459
	TIOCSERGETMULTI                  = 0x545a
	TIOCSERGSTRUCT                   = 0x5458
	TIOCSERGWILD                     = 0x5454
	TIOCSERSETMULTI                  = 0x545b
	TIOCSERSWILD                     = 0x5455
	TIOCSER_TEMT                     = 0x1
	TIOCSETD                         = 0x5423
	TIOCSIG                          = 0x40045436
	TIOCSISO7816                     = 0xc0285443
	TIOCSLCKTRMIOS                   = 0x5457
	TIOCSPGRP                        = 0x5410
	TIOCSPTLCK                       = 0x40045431
	TIOCSRS485                       = 0x542f
	TIOCSSERIAL                      = 0x541f
	TIOCSSOFTCAR                     = 0x541a
	TIOCSTI                          = 0x5412
	TIOCSWINSZ                       = 0x5414
	TIOCVHANGUP                      = 0x5437
	TOSTOP                           = 0x100
	TUNATTACHFILTER                  = 0x401054d5
	TUNDETACHFILTER                  = 0x401054d6
	TUNGETDEVNETNS                   = 0x54e3
	TUNGETFEATURES                   = 0x800454cf
	TUNGETFILTER                     = 0x801054db
	TUNGETIFF                        = 0x800454d2
	TUNGETSNDBUF                     = 0x800454d3
	TUNGETVNETBE                     = 0x800454df
	TUNGETVNETHDRSZ                  = 0x800454d7
	TUNGETVNETLE                     = 0x800454dd
	TUNSETCARRIER                    = 0x400454e2
	TUNSETDEBUG                      = 0x400454c9
	TUNSETFILTEREBPF                 = 0x800454e1
	TUNSETGROUP                      = 0x400454ce
	TUNSETIFF                        = 0x400454ca
	TUNSETIFINDEX                    = 0x400454da
	TUNSETLINK                       = 0x400454cd
	TUNSETNOCSUM                     = 0x400454c8
	TUNSETOFFLOAD                    = 0x400454d0
	TUNSETOWNER                      = 0x400454cc
	TUNSETPERSIST                    = 0x400454cb
	TUNSETQUEUE                      = 0x400454d9
	TUNSETSNDBUF                     = 0x400454d4
	TUNSETSTEERINGEBPF               = 0x800454e0
	TUNSETTXFILTER                   = 0x400454d1
	TUNSETVNETBE                     = 0x400454de
	TUNSETVNETHDRSZ                  = 0x400454d8
	TUNSETVNETLE                     = 0x400454dc
	UBI_IOCATT                       = 0x40186f40
	UBI_IOCDET                       = 0x40046f41
	UBI_IOCEBCH                      = 0x40044f02
	UBI_IOCEBER                      = 0x40044f01
	UBI_IOCEBISMAP                   = 0x80044f05
	UBI_IOCEBMAP                     = 0x40084f03
	UBI_IOCEBUNMAP                   = 0x40044f04
	UBI_IOCMKVOL                     = 0x40986f00
	UBI_IOCRMVOL                     = 0x40046f01
	UBI_IOCRNVOL                     = 0x51106f03
	UBI_IOCRPEB                      = 0x40046f04
	UBI_IOCRSVOL                     = 0x400c6f02
	UBI_IOCSETVOLPROP                = 0x40104f06
	UBI_IOCSPEB                      = 0x40046f05
	UBI_IOCVOLCRBLK                  = 0x40804f07
	UBI_IOCVOLRMBLK                  = 0x4f08
	UBI_IOCVOLUP                     = 0x40084f00
	VDISCARD                         = 0xd
	VEOF                             = 0x4
	VEOL                             = 0xb
	VEOL2                            = 0x10
	VMIN                             = 0x6
	VREPRINT                         = 0xc
	VSTART                           = 0x8
	VSTOP                            = 0x9
	VSUSP                            = 0xa
	VSWTC                            = 0x7
	VT1                              = 0x4000
	VTDLY                            = 0x4000
	VTIME                            = 0x5
	VWERASE                          = 0xe
	WDIOC_GETBOOTSTATUS              = 0x80045702
	WDIOC_GETPRETIMEOUT              = 0x80045709
	WDIOC_GETSTATUS                  = 0x80045701
	WDIOC_GETSUPPORT                 = 0x80285700
	WDIOC_GETTEMP                    = 0x80045703
	WDIOC_GETTIMELEFT                = 0x8004570a
	WDIOC_GETTIMEOUT                 = 0x80045707
	WDIOC_KEEPALIVE                  = 0x80045705
	WDIOC_SETOPTIONS                 = 0x80045704
	WORDSIZE                         = 0x40
	XCASE                            = 0x4
	XTABS                            = 0x1800
	_HIDIOCGRAWNAME                  = 0x80804804
	_HIDIOCGRAWPHYS                  = 0x80404805
	_HIDIOCGRAWUNIQ                  = 0x80404808
)

// Errors
const (
	EADDRINUSE      = syscall.Errno(0x62)
	EADDRNOTAVAIL   = syscall.Errno(0x63)
	EADV            = syscall.Errno(0x44)
	EAFNOSUPPORT    = syscall.Errno(0x61)
	EALREADY        = syscall.Errno(0x72)
	EBADE           = syscall.Errno(0x34)
	EBADFD          = syscall.Errno(0x4d)
	EBADMSG         = syscall.Errno(0x4a)
	EBADR           = syscall.Errno(0x35)
	EBADRQC         = syscall.Errno(0x38)
	EBADSLT         = syscall.Errno(0x39)
	EBFONT          = syscall.Errno(0x3b)
	ECANCELED       = syscall.Errno(0x7d)
	ECHRNG          = syscall.Errno(0x2c)
	ECOMM           = syscall.Errno(0x46)
	ECONNABORTED    = syscall.Errno(0x67)
	ECONNREFUSED    = syscall.Errno(0x6f)
	ECONNRESET      = syscall.Errno(0x68)
	EDEADLK         = syscall.Errno(0x23)
	EDEADLOCK       = syscall.Errno(0x23)
	EDESTADDRREQ    = syscall.Errno(0x59)
	EDOTDOT         = syscall.Errno(0x49)
	EDQUOT          = syscall.Errno(0x7a)
	EHOSTDOWN       = syscall.Errno(0x70)
	EHOSTUNREACH    = syscall.Errno(0x71)
	EHWPOISON       = syscall.Errno(0x85)
	EIDRM           = syscall.Errno(0x2b)
	EILSEQ          = syscall.Errno(0x54)
	EINPROGRESS     = syscall.Errno(0x73)
	EISCONN         = syscall.Errno(0x6a)
	EISNAM          = syscall.Errno(0x78)
	EKEYEXPIRED     = syscall.Errno(0x7f)
	EKEYREJECTED    = syscall.Errno(0x81)
	EKEYREVOKED     = syscall.Errno(0x80)
	EL2HLT          = syscall.Errno(0x33)
	EL2NSYNC        = syscall.Errno(0x2d)
	EL3HLT          = syscall.Errno(0x2e)
	EL3RST          = syscall.Errno(0x2f)
	ELIBACC         = syscall.Errno(0x4f)
	ELIBBAD         = syscall.Errno(0x50)
	ELIBEXEC        = syscall.Errno(0x53)
	ELIBMAX         = syscall.Errno(0x52)
	ELIBSCN         = syscall.Errno(0x51)
	ELNRNG          = syscall.Errno(0x30)
	ELOOP           = syscall.Errno(0x28)
	EMEDIUMTYPE     = syscall.Errno(0x7c)
	EMSGSIZE        = syscall.Errno(0x5a)
	EMULTIHOP       = syscall.Errno(0x48)
	ENAMETOOLONG    = syscall.Errno(0x24)
	ENAVAIL         = syscall.Errno(0x77)
	ENETDOWN        = syscall.Errno(0x64)
	ENETRESET       = syscall.Errno(0x66)
	ENETUNREACH     = syscall.Errno(0x65)
	ENOANO          = syscall.Errno(0x37)
	ENOBUFS         = syscall.Errno(0x69)
	ENOCSI          = syscall.Errno(0x32)
	ENODATA         = syscall.Errno(0x3d)
	ENOKEY          = syscall.Errno(0x7e)
	ENOLCK          = syscall.Errno(0x25)
	ENOLINK         = syscall.Errno(0x43)
	ENOMEDIUM       = syscall.Errno(0x7b)
	ENOMSG          = syscall.Errno(0x2a)
	ENONET          = syscall.Errno(0x40)
	ENOPKG          = syscall.Errno(0x41)
	ENOPROTOOPT     = syscall.Errno(0x5c)
	ENOSR           = syscall.Errno(0x3f)
	ENOSTR          = syscall.Errno(0x3c)
	ENOSYS          = syscall.Errno(0x26)
	ENOTCONN        = syscall.Errno(0x6b)
	ENOTEMPTY       = syscall.Errno(0x27)
	ENOTNAM         = syscall.Errno(0x76)
	ENOTRECOVERABLE = syscall.Errno(0x83)
	ENOTSOCK        = syscall.Errno(0x58)
	ENOTSUP         = syscall.Errno(0x5f)
	ENOTUNIQ        = syscall.Errno(0x4c)
	EOPNOTSUPP      = syscall.Errno(0x5f)
	EOVERFLOW       = syscall.Errno(0x4b)
	EOWNERDEAD      = syscall.Errno(0x82)
	EPFNOSUPPORT    = syscall.Errno(0x60)
	EPROTO          = syscall.Errno(0x47)
	EPROTONOSUPPORT = syscall.Errno(0x5d)
	EPROTOTYPE      = syscall.Errno(0x5b)
	EREMCHG         = syscall.Errno(0x4e)
	EREMOTE         = syscall.Errno(0x42)
	EREMOTEIO       = syscall.Errno(0x79)
	ERESTART        = syscall.Errno(0x55)
	ERFKILL         = syscall.Errno(0x84)
	ESHUTDOWN       = syscall.Errno(0x6c)
	ESOCKTNOSUPPORT = syscall.Errno(0x5e)
	ESRMNT          = syscall.Errno(0x45)
	ESTALE          = syscall.Errno(0x74)
	ESTRPIPE        = syscall.Errno(0x56)
	ETIME           = syscall.Errno(0x3e)
	ETIMEDOUT       = syscall.Errno(0x6e)
	ETOOMANYREFS    = syscall.Errno(0x6d)
	EUCLEAN         = syscall.Errno(0x75)
	EUNATCH         = syscall.Errno(0x31)
	EUSERS          = syscall.Errno(0x57)
	EXFULL          = syscall.Errno(0x36)
)

// Signals
const (
	SIGBUS    = syscall.Signal(0x7)
	SIGCHLD   = syscall.Signal(0x11)
	SIGCLD    = syscall.Signal(0x11)
	SIGCONT   = syscall.Signal(0x12)
	SIGIO     = syscall.Signal(0x1d)
	SIGPOLL   = syscall.Signal(0x1d)
	SIGPROF   = syscall.Signal(0x1b)
	SIGPWR    = syscall.Signal(0x1e)
	SIGSTKFLT = syscall.Signal(0x10)
	SIGSTOP   = syscall.Signal(0x13)
	SIGSYS    = syscall.Signal(0x1f)
	SIGTSTP   = syscall.Signal(0x14)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x17)
	SIGUSR1   = syscall.Signal(0xa)
	SIGUSR2   = syscall.Signal(0xc)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "no such device or address"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EAGAIN", "resource temporarily unavailable"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device or resource busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "invalid cross-device link"},
	{19, "ENODEV", "no such device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "numerical result out of range"},
	{35, "EDEADLK", "resource deadlock avoided"},
	{36, "ENAMETOOLONG", "file name too long"},
	{37, "ENOLCK", "no locks available"},
	{38, "ENOSYS", "function not implemented"},
	{39, "ENOTEMPTY", "directory not empty"},
	{40, "ELOOP", "too many levels of symbolic links"},
	{42, "ENOMSG", "no message of desired type"},
	{43, "EIDRM", "identifier removed"},
	{44, "ECHRNG", "channel number out of range"},
	{45, "EL2NSYNC", "level 2 not synchronized"},
	{46, "EL3HLT", "level 3 halted"},
	{47, "EL3RST", "level 3 reset"},
	{48, "ELNRNG", "link number out of range"},
	{49, "EUNATCH", "protocol driver not attached"},
	{50, "ENOCSI", "no CSI structure available"},
	{51, "EL2HLT", "level 2 halted"},
	{52, "EBADE", "invalid exchange"},
	{53, "EBADR", "invalid request descriptor"},
	{54, "EXFULL", "exchange full"},
	{55, "ENOANO", "no anode"},
	{56, "EBADRQC", "invalid request code"},
	{57, "EBADSLT", "invalid slot"},
	{59, "EBFONT", "bad font file format"},
	{60, "ENOSTR", "device not a stream"},
	{61, "ENODATA", "no data available"},
	{62, "ETIME", "timer expired"},
	{63, "ENOSR", "out of streams resources"},
	{64, "ENONET", "machine is not on the network"},
	{65, "ENOPKG", "package not installed"},
	{66, "EREMOTE", "object is remote"},
	{67, "ENOLINK", "link has been severed"},
	{68, "EADV", "advertise error"},
	{69, "ESRMNT", "srmount error"},
	{70, "ECOMM", "communication error on send"},
	{71, "EPROTO", "protocol error"},
	{72, "EMULTIHOP", "multihop attempted"},
	{73, "EDOTDOT", "RFS specific error"},
	{74, "EBADMSG", "bad message"},
	{75, "EOVERFLOW", "value too large for defined data type"},
	{76, "ENOTUNIQ", "name not unique on network"},
	{77, "EBADFD", "file descriptor in bad state"},
	{78, "EREMCHG", "remote address changed"},
	{79, "ELIBACC", "can not access a needed shared library"},
	{80, "ELIBBAD", "accessing a corrupted shared library"},
	{81, "ELIBSCN", ".lib section in a.out corrupted"},
	{82, "ELIBMAX", "attempting to link in too many shared libraries"},
	{83, "ELIBEXEC", "cannot exec a shared library directly"},
	{84, "EILSEQ", "invalid or incomplete multibyte or wide character"},
	{85, "ERESTART", "interrupted system call should be restarted"},
	{86, "ESTRPIPE", "streams pipe error"},
	{87, "EUSERS", "too many users"},
	{88, "ENOTSOCK", "socket operation on non-socket"},
	{89, "EDESTADDRREQ", "destination address required"},
	{90, "EMSGSIZE", "message too long"},
	{91, "EPROTOTYPE", "protocol wrong type for socket"},
	{92, "ENOPROTOOPT", "protocol not available"},
	{93, "EPROTONOSUPPORT", "protocol not supported"},
	{94, "ESOCKTNOSUPPORT", "socket type not supported"},
	{95, "ENOTSUP", "operation not supported"},
	{96, "EPFNOSUPPORT", "protocol family not supported"},
	{97, "EAFNOSUPPORT", "address family not supported by protocol"},
	{98, "EADDRINUSE", "address already in use"},
	{99, "EADDRNOTAVAIL", "cannot assign requested address"},
	{100, "ENETDOWN", "network is down"},
	{101, "ENETUNREACH", "network is unreachable"},
	{102, "ENETRESET", "network dropped connection on reset"},
	{103, "ECONNABORTED", "software caused connection abort"},
	{104, "ECONNRESET", "connection reset by peer"},
	{105, "ENOBUFS", "no buffer space available"},
	{106, "EISCONN", "transport endpoint is already connected"},
	{107, "ENOTCONN", "transport endpoint is not connected"},
	{108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
	{109, "ETOOMANYREFS", "too many references: cannot splice"},
	{110, "ETIMEDOUT", "connection timed out"},
	{111, "ECONNREFUSED", "connection refused"},
	{112, "EHOSTDOWN", "host is down"},
	{113, "EHOSTUNREACH", "no route to host"},
	{114, "EALREADY", "operation already in progress"},
	{115, "EINPROGRESS", "operation now in progress"},
	{116, "ESTALE", "stale file handle"},
	{117, "EUCLEAN", "structure needs cleaning"},
	{118, "ENOTNAM", "not a XENIX named type file"},
	{119, "ENAVAIL", "no XENIX semaphores available"},
	{120, "EISNAM", "is a named type file"},
	{121, "EREMOTEIO", "remote I/O error"},
	{122, "EDQUOT", "disk quota exceeded"},
	{123, "ENOMEDIUM", "no medium found"},
	{124, "EMEDIUMTYPE", "wrong medium type"},
	{125, "ECANCELED", "operation canceled"},
	{126, "ENOKEY", "required key not available"},
	{127, "EKEYEXPIRED", "key has expired"},
	{128, "EKEYREVOKED", "key has been revoked"},
	{129, "EKEYREJECTED", "key was rejected by service"},
	{130, "EOWNERDEAD", "owner died"},
	{131, "ENOTRECOVERABLE", "state not recoverable"},
	{132, "ERFKILL", "operation not possible due to RF-kill"},
	{133, "EHWPOISON", "memory page has hardware error"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/breakpoint trap"},
	{6, "SIGABRT", "aborted"},
	{7, "SIGBUS", "bus error"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGUSR1", "user defined signal 1"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGUSR2", "user defined signal 2"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGSTKFLT", "stack fault"},
	{17, "SIGCHLD", "child exited"},
	{18, "SIGCONT", "continued"},
	{19, "SIGSTOP", "stopped (signal)"},
	{20, "SIGTSTP", "stopped"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGURG", "urgent I/O condition"},
	{24, "SIGXCPU", "CPU time limit exceeded"},
	{25, "SIGXFSZ", "file size limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window changed"},
	{29, "SIGIO", "I/O possible"},
	{30, "SIGPWR", "power failure"},
	{31, "SIGSYS", "bad system call"},
}
  07070100000E38000081A4000000000000000000000001645E367C0000905C000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go   // mkerrors.sh -Wall -Werror -static -I/tmp/s390x/include -fsigned-char
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build s390x && linux
// +build s390x,linux

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -Wall -Werror -static -I/tmp/s390x/include -fsigned-char _const.go

package unix

import "syscall"

const (
	B1000000                         = 0x1008
	B115200                          = 0x1002
	B1152000                         = 0x1009
	B1500000                         = 0x100a
	B2000000                         = 0x100b
	B230400                          = 0x1003
	B2500000                         = 0x100c
	B3000000                         = 0x100d
	B3500000                         = 0x100e
	B4000000                         = 0x100f
	B460800                          = 0x1004
	B500000                          = 0x1005
	B57600                           = 0x1001
	B576000                          = 0x1006
	B921600                          = 0x1007
	BLKBSZGET                        = 0x80081270
	BLKBSZSET                        = 0x40081271
	BLKFLSBUF                        = 0x1261
	BLKFRAGET                        = 0x1265
	BLKFRASET                        = 0x1264
	BLKGETSIZE                       = 0x1260
	BLKGETSIZE64                     = 0x80081272
	BLKPBSZGET                       = 0x127b
	BLKRAGET                         = 0x1263
	BLKRASET                         = 0x1262
	BLKROGET                         = 0x125e
	BLKROSET                         = 0x125d
	BLKRRPART                        = 0x125f
	BLKSECTGET                       = 0x1267
	BLKSECTSET                       = 0x1266
	BLKSSZGET                        = 0x1268
	BOTHER                           = 0x1000
	BS1                              = 0x2000
	BSDLY                            = 0x2000
	CBAUD                            = 0x100f
	CBAUDEX                          = 0x1000
	CIBAUD                           = 0x100f0000
	CLOCAL                           = 0x800
	CR1                              = 0x200
	CR2                              = 0x400
	CR3                              = 0x600
	CRDLY                            = 0x600
	CREAD                            = 0x80
	CS6                              = 0x10
	CS7                              = 0x20
	CS8                              = 0x30
	CSIZE                            = 0x30
	CSTOPB                           = 0x40
	ECCGETLAYOUT                     = 0x81484d11
	ECCGETSTATS                      = 0x80104d12
	ECHOCTL                          = 0x200
	ECHOE                            = 0x10
	ECHOK                            = 0x20
	ECHOKE                           = 0x800
	ECHONL                           = 0x40
	ECHOPRT                          = 0x400
	EFD_CLOEXEC                      = 0x80000
	EFD_NONBLOCK                     = 0x800
	EPOLL_CLOEXEC                    = 0x80000
	EXTPROC                          = 0x10000
	FF1                              = 0x8000
	FFDLY                            = 0x8000
	FICLONE                          = 0x40049409
	FICLONERANGE                     = 0x4020940d
	FLUSHO                           = 0x1000
	FS_IOC_ENABLE_VERITY             = 0x40806685
	FS_IOC_GETFLAGS                  = 0x80086601
	FS_IOC_GET_ENCRYPTION_NONCE      = 0x8010661b
	FS_IOC_GET_ENCRYPTION_POLICY     = 0x400c6615
	FS_IOC_GET_ENCRYPTION_PWSALT     = 0x40106614
	FS_IOC_SETFLAGS                  = 0x40086602
	FS_IOC_SET_ENCRYPTION_POLICY     = 0x800c6613
	F_GETLK                          = 0x5
	F_GETLK64                        = 0x5
	F_GETOWN                         = 0x9
	F_RDLCK                          = 0x0
	F_SETLK                          = 0x6
	F_SETLK64                        = 0x6
	F_SETLKW                         = 0x7
	F_SETLKW64                       = 0x7
	F_SETOWN                         = 0x8
	F_UNLCK                          = 0x2
	F_WRLCK                          = 0x1
	HIDIOCGRAWINFO                   = 0x80084803
	HIDIOCGRDESC                     = 0x90044802
	HIDIOCGRDESCSIZE                 = 0x80044801
	HUPCL                            = 0x400
	ICANON                           = 0x2
	IEXTEN                           = 0x8000
	IN_CLOEXEC                       = 0x80000
	IN_NONBLOCK                      = 0x800
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9
	ISIG                             = 0x1
	IUCLC                            = 0x200
	IXOFF                            = 0x1000
	IXON                             = 0x400
	MAP_ANON                         = 0x20
	MAP_ANONYMOUS                    = 0x20
	MAP_DENYWRITE                    = 0x800
	MAP_EXECUTABLE                   = 0x1000
	MAP_GROWSDOWN                    = 0x100
	MAP_HUGETLB                      = 0x40000
	MAP_LOCKED                       = 0x2000
	MAP_NONBLOCK                     = 0x10000
	MAP_NORESERVE                    = 0x4000
	MAP_POPULATE                     = 0x8000
	MAP_STACK                        = 0x20000
	MAP_SYNC                         = 0x80000
	MCL_CURRENT                      = 0x1
	MCL_FUTURE                       = 0x2
	MCL_ONFAULT                      = 0x4
	MEMERASE                         = 0x40084d02
	MEMERASE64                       = 0x40104d14
	MEMGETBADBLOCK                   = 0x40084d0b
	MEMGETINFO                       = 0x80204d01
	MEMGETOOBSEL                     = 0x80c84d0a
	MEMGETREGIONCOUNT                = 0x80044d07
	MEMISLOCKED                      = 0x80084d17
	MEMLOCK                          = 0x40084d05
	MEMREAD                          = 0xc0404d1a
	MEMREADOOB                       = 0xc0104d04
	MEMSETBADBLOCK                   = 0x40084d0c
	MEMUNLOCK                        = 0x40084d06
	MEMWRITEOOB                      = 0xc0104d03
	MTDFILEMODE                      = 0x4d13
	NFDBITS                          = 0x40
	NLDLY                            = 0x100
	NOFLSH                           = 0x80
	NS_GET_NSTYPE                    = 0xb703
	NS_GET_OWNER_UID                 = 0xb704
	NS_GET_PARENT                    = 0xb702
	NS_GET_USERNS                    = 0xb701
	OLCUC                            = 0x2
	ONLCR                            = 0x4
	OTPERASE                         = 0x400c4d19
	OTPGETREGIONCOUNT                = 0x40044d0e
	OTPGETREGIONINFO                 = 0x400c4d0f
	OTPLOCK                          = 0x800c4d10
	OTPSELECT                        = 0x80044d0d
	O_APPEND                         = 0x400
	O_ASYNC                          = 0x2000
	O_CLOEXEC                        = 0x80000
	O_CREAT                          = 0x40
	O_DIRECT                         = 0x4000
	O_DIRECTORY                      = 0x10000
	O_DSYNC                          = 0x1000
	O_EXCL                           = 0x80
	O_FSYNC                          = 0x101000
	O_LARGEFILE                      = 0x0
	O_NDELAY                         = 0x800
	O_NOATIME                        = 0x40000
	O_NOCTTY                         = 0x100
	O_NOFOLLOW                       = 0x20000
	O_NONBLOCK                       = 0x800
	O_PATH                           = 0x200000
	O_RSYNC                          = 0x101000
	O_SYNC                           = 0x101000
	O_TMPFILE                        = 0x410000
	O_TRUNC                          = 0x200
	PARENB                           = 0x100
	PARODD                           = 0x200
	PENDIN                           = 0x4000
	PERF_EVENT_IOC_DISABLE           = 0x2401
	PERF_EVENT_IOC_ENABLE            = 0x2400
	PERF_EVENT_IOC_ID                = 0x80082407
	PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b
	PERF_EVENT_IOC_PAUSE_OUTPUT      = 0x40042409
	PERF_EVENT_IOC_PERIOD            = 0x40082404
	PERF_EVENT_IOC_QUERY_BPF         = 0xc008240a
	PERF_EVENT_IOC_REFRESH           = 0x2402
	PERF_EVENT_IOC_RESET             = 0x2403
	PERF_EVENT_IOC_SET_BPF           = 0x40042408
	PERF_EVENT_IOC_SET_FILTER        = 0x40082406
	PERF_EVENT_IOC_SET_OUTPUT        = 0x2405
	PPPIOCATTACH                     = 0x4004743d
	PPPIOCATTCHAN                    = 0x40047438
	PPPIOCBRIDGECHAN                 = 0x40047435
	PPPIOCCONNECT                    = 0x4004743a
	PPPIOCDETACH                     = 0x4004743c
	PPPIOCDISCONN                    = 0x7439
	PPPIOCGASYNCMAP                  = 0x80047458
	PPPIOCGCHAN                      = 0x80047437
	PPPIOCGDEBUG                     = 0x80047441
	PPPIOCGFLAGS                     = 0x8004745a
	PPPIOCGIDLE                      = 0x8010743f
	PPPIOCGIDLE32                    = 0x8008743f
	PPPIOCGIDLE64                    = 0x8010743f
	PPPIOCGL2TPSTATS                 = 0x80487436
	PPPIOCGMRU                       = 0x80047453
	PPPIOCGRASYNCMAP                 = 0x80047455
	PPPIOCGUNIT                      = 0x80047456
	PPPIOCGXASYNCMAP                 = 0x80207450
	PPPIOCSACTIVE                    = 0x40107446
	PPPIOCSASYNCMAP                  = 0x40047457
	PPPIOCSCOMPRESS                  = 0x4010744d
	PPPIOCSDEBUG                     = 0x40047440
	PPPIOCSFLAGS                     = 0x40047459
	PPPIOCSMAXCID                    = 0x40047451
	PPPIOCSMRRU                      = 0x4004743b
	PPPIOCSMRU                       = 0x40047452
	PPPIOCSNPMODE                    = 0x4008744b
	PPPIOCSPASS                      = 0x40107447
	PPPIOCSRASYNCMAP                 = 0x40047454
	PPPIOCSXASYNCMAP                 = 0x4020744f
	PPPIOCUNBRIDGECHAN               = 0x7434
	PPPIOCXFERUNIT                   = 0x744e
	PR_SET_PTRACER_ANY               = 0xffffffffffffffff
	PTRACE_DISABLE_TE                = 0x5010
	PTRACE_ENABLE_TE                 = 0x5009
	PTRACE_GET_LAST_BREAK            = 0x5006
	PTRACE_OLDSETOPTIONS             = 0x15
	PTRACE_PEEKDATA_AREA             = 0x5003
	PTRACE_PEEKTEXT_AREA             = 0x5002
	PTRACE_PEEKUSR_AREA              = 0x5000
	PTRACE_PEEK_SYSTEM_CALL          = 0x5007
	PTRACE_POKEDATA_AREA             = 0x5005
	PTRACE_POKETEXT_AREA             = 0x5004
	PTRACE_POKEUSR_AREA              = 0x5001
	PTRACE_POKE_SYSTEM_CALL          = 0x5008
	PTRACE_PROT                      = 0x15
	PTRACE_SINGLEBLOCK               = 0xc
	PTRACE_SYSEMU                    = 0x1f
	PTRACE_SYSEMU_SINGLESTEP         = 0x20
	PTRACE_TE_ABORT_RAND             = 0x5011
	PT_ACR0                          = 0x90
	PT_ACR1                          = 0x94
	PT_ACR10                         = 0xb8
	PT_ACR11                         = 0xbc
	PT_ACR12                         = 0xc0
	PT_ACR13                         = 0xc4
	PT_ACR14                         = 0xc8
	PT_ACR15                         = 0xcc
	PT_ACR2                          = 0x98
	PT_ACR3                          = 0x9c
	PT_ACR4                          = 0xa0
	PT_ACR5                          = 0xa4
	PT_ACR6                          = 0xa8
	PT_ACR7                          = 0xac
	PT_ACR8                          = 0xb0
	PT_ACR9                          = 0xb4
	PT_CR_10                         = 0x168
	PT_CR_11                         = 0x170
	PT_CR_9                          = 0x160
	PT_ENDREGS                       = 0x1af
	PT_FPC                           = 0xd8
	PT_FPR0                          = 0xe0
	PT_FPR1                          = 0xe8
	PT_FPR10                         = 0x130
	PT_FPR11                         = 0x138
	PT_FPR12                         = 0x140
	PT_FPR13                         = 0x148
	PT_FPR14                         = 0x150
	PT_FPR15                         = 0x158
	PT_FPR2                          = 0xf0
	PT_FPR3                          = 0xf8
	PT_FPR4                          = 0x100
	PT_FPR5                          = 0x108
	PT_FPR6                          = 0x110
	PT_FPR7                          = 0x118
	PT_FPR8                          = 0x120
	PT_FPR9                          = 0x128
	PT_GPR0                          = 0x10
	PT_GPR1                          = 0x18
	PT_GPR10                         = 0x60
	PT_GPR11                         = 0x68
	PT_GPR12                         = 0x70
	PT_GPR13                         = 0x78
	PT_GPR14                         = 0x80
	PT_GPR15                         = 0x88
	PT_GPR2                          = 0x20
	PT_GPR3                          = 0x28
	PT_GPR4                          = 0x30
	PT_GPR5                          = 0x38
	PT_GPR6                          = 0x40
	PT_GPR7                          = 0x48
	PT_GPR8                          = 0x50
	PT_GPR9                          = 0x58
	PT_IEEE_IP                       = 0x1a8
	PT_LASTOFF                       = 0x1a8
	PT_ORIGGPR2                      = 0xd0
	PT_PSWADDR                       = 0x8
	PT_PSWMASK                       = 0x0
	RLIMIT_AS                        = 0x9
	RLIMIT_MEMLOCK                   = 0x8
	RLIMIT_NOFILE                    = 0x7
	RLIMIT_NPROC                     = 0x6
	RLIMIT_RSS                       = 0x5
	RNDADDENTROPY                    = 0x40085203
	RNDADDTOENTCNT                   = 0x40045201
	RNDCLEARPOOL                     = 0x5206
	RNDGETENTCNT                     = 0x80045200
	RNDGETPOOL                       = 0x80085202
	RNDRESEEDCRNG                    = 0x5207
	RNDZAPENTCNT                     = 0x5204
	RTC_AIE_OFF                      = 0x7002
	RTC_AIE_ON                       = 0x7001
	RTC_ALM_READ                     = 0x80247008
	RTC_ALM_SET                      = 0x40247007
	RTC_EPOCH_READ                   = 0x8008700d
	RTC_EPOCH_SET                    = 0x4008700e
	RTC_IRQP_READ                    = 0x8008700b
	RTC_IRQP_SET                     = 0x4008700c
	RTC_PARAM_GET                    = 0x40187013
	RTC_PARAM_SET                    = 0x40187014
	RTC_PIE_OFF                      = 0x7006
	RTC_PIE_ON                       = 0x7005
	RTC_PLL_GET                      = 0x80207011
	RTC_PLL_SET                      = 0x40207012
	RTC_RD_TIME                      = 0x80247009
	RTC_SET_TIME                     = 0x4024700a
	RTC_UIE_OFF                      = 0x7004
	RTC_UIE_ON                       = 0x7003
	RTC_VL_CLR                       = 0x7014
	RTC_VL_READ                      = 0x80047013
	RTC_WIE_OFF                      = 0x7010
	RTC_WIE_ON                       = 0x700f
	RTC_WKALM_RD                     = 0x80287010
	RTC_WKALM_SET                    = 0x4028700f
	SCM_TIMESTAMPING                 = 0x25
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
	SCM_TIMESTAMPNS                  = 0x23
	SCM_TXTIME                       = 0x3d
	SCM_WIFI_STATUS                  = 0x29
	SFD_CLOEXEC                      = 0x80000
	SFD_NONBLOCK                     = 0x800
	SIOCATMARK                       = 0x8905
	SIOCGPGRP                        = 0x8904
	SIOCGSTAMPNS_NEW                 = 0x80108907
	SIOCGSTAMP_NEW                   = 0x80108906
	SIOCINQ                          = 0x541b
	SIOCOUTQ                         = 0x5411
	SIOCSPGRP                        = 0x8902
	SOCK_CLOEXEC                     = 0x80000
	SOCK_DGRAM                       = 0x2
	SOCK_NONBLOCK                    = 0x800
	SOCK_STREAM                      = 0x1
	SOL_SOCKET                       = 0x1
	SO_ACCEPTCONN                    = 0x1e
	SO_ATTACH_BPF                    = 0x32
	SO_ATTACH_REUSEPORT_CBPF         = 0x33
	SO_ATTACH_REUSEPORT_EBPF         = 0x34
	SO_BINDTODEVICE                  = 0x19
	SO_BINDTOIFINDEX                 = 0x3e
	SO_BPF_EXTENSIONS                = 0x30
	SO_BROADCAST                     = 0x6
	SO_BSDCOMPAT                     = 0xe
	SO_BUF_LOCK                      = 0x48
	SO_BUSY_POLL                     = 0x2e
	SO_BUSY_POLL_BUDGET              = 0x46
	SO_CNX_ADVICE                    = 0x35
	SO_COOKIE                        = 0x39
	SO_DETACH_REUSEPORT_BPF          = 0x44
	SO_DOMAIN                        = 0x27
	SO_DONTROUTE                     = 0x5
	SO_ERROR                         = 0x4
	SO_INCOMING_CPU                  = 0x31
	SO_INCOMING_NAPI_ID              = 0x38
	SO_KEEPALIVE                     = 0x9
	SO_LINGER                        = 0xd
	SO_LOCK_FILTER                   = 0x2c
	SO_MARK                          = 0x24
	SO_MAX_PACING_RATE               = 0x2f
	SO_MEMINFO                       = 0x37
	SO_NETNS_COOKIE                  = 0x47
	SO_NOFCS                         = 0x2b
	SO_OOBINLINE                     = 0xa
	SO_PASSCRED                      = 0x10
	SO_PASSSEC                       = 0x22
	SO_PEEK_OFF                      = 0x2a
	SO_PEERCRED                      = 0x11
	SO_PEERGROUPS                    = 0x3b
	SO_PEERSEC                       = 0x1f
	SO_PREFER_BUSY_POLL              = 0x45
	SO_PROTOCOL                      = 0x26
	SO_RCVBUF                        = 0x8
	SO_RCVBUFFORCE                   = 0x21
	SO_RCVLOWAT                      = 0x12
	SO_RCVMARK                       = 0x4b
	SO_RCVTIMEO                      = 0x14
	SO_RCVTIMEO_NEW                  = 0x42
	SO_RCVTIMEO_OLD                  = 0x14
	SO_RESERVE_MEM                   = 0x49
	SO_REUSEADDR                     = 0x2
	SO_REUSEPORT                     = 0xf
	SO_RXQ_OVFL                      = 0x28
	SO_SECURITY_AUTHENTICATION       = 0x16
	SO_SECURITY_ENCRYPTION_NETWORK   = 0x18
	SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
	SO_SELECT_ERR_QUEUE              = 0x2d
	SO_SNDBUF                        = 0x7
	SO_SNDBUFFORCE                   = 0x20
	SO_SNDLOWAT                      = 0x13
	SO_SNDTIMEO                      = 0x15
	SO_SNDTIMEO_NEW                  = 0x43
	SO_SNDTIMEO_OLD                  = 0x15
	SO_TIMESTAMPING                  = 0x25
	SO_TIMESTAMPING_NEW              = 0x41
	SO_TIMESTAMPING_OLD              = 0x25
	SO_TIMESTAMPNS                   = 0x23
	SO_TIMESTAMPNS_NEW               = 0x40
	SO_TIMESTAMPNS_OLD               = 0x23
	SO_TIMESTAMP_NEW                 = 0x3f
	SO_TXREHASH                      = 0x4a
	SO_TXTIME                        = 0x3d
	SO_TYPE                          = 0x3
	SO_WIFI_STATUS                   = 0x29
	SO_ZEROCOPY                      = 0x3c
	TAB1                             = 0x800
	TAB2                             = 0x1000
	TAB3                             = 0x1800
	TABDLY                           = 0x1800
	TCFLSH                           = 0x540b
	TCGETA                           = 0x5405
	TCGETS                           = 0x5401
	TCGETS2                          = 0x802c542a
	TCGETX                           = 0x5432
	TCSAFLUSH                        = 0x2
	TCSBRK                           = 0x5409
	TCSBRKP                          = 0x5425
	TCSETA                           = 0x5406
	TCSETAF                          = 0x5408
	TCSETAW                          = 0x5407
	TCSETS                           = 0x5402
	TCSETS2                          = 0x402c542b
	TCSETSF                          = 0x5404
	TCSETSF2                         = 0x402c542d
	TCSETSW                          = 0x5403
	TCSETSW2                         = 0x402c542c
	TCSETX                           = 0x5433
	TCSETXF                          = 0x5434
	TCSETXW                          = 0x5435
	TCXONC                           = 0x540a
	TFD_CLOEXEC                      = 0x80000
	TFD_NONBLOCK                     = 0x800
	TIOCCBRK                         = 0x5428
	TIOCCONS                         = 0x541d
	TIOCEXCL                         = 0x540c
	TIOCGDEV                         = 0x80045432
	TIOCGETD                         = 0x5424
	TIOCGEXCL                        = 0x80045440
	TIOCGICOUNT                      = 0x545d
	TIOCGISO7816                     = 0x80285442
	TIOCGLCKTRMIOS                   = 0x5456
	TIOCGPGRP                        = 0x540f
	TIOCGPKT                         = 0x80045438
	TIOCGPTLCK                       = 0x80045439
	TIOCGPTN                         = 0x80045430
	TIOCGPTPEER                      = 0x5441
	TIOCGRS485                       = 0x542e
	TIOCGSERIAL                      = 0x541e
	TIOCGSID                         = 0x5429
	TIOCGSOFTCAR                     = 0x5419
	TIOCGWINSZ                       = 0x5413
	TIOCINQ                          = 0x541b
	TIOCLINUX                        = 0x541c
	TIOCMBIC                         = 0x5417
	TIOCMBIS                         = 0x5416
	TIOCMGET                         = 0x5415
	TIOCMIWAIT                       = 0x545c
	TIOCMSET                         = 0x5418
	TIOCM_CAR                        = 0x40
	TIOCM_CD                         = 0x40
	TIOCM_CTS                        = 0x20
	TIOCM_DSR                        = 0x100
	TIOCM_RI                         = 0x80
	TIOCM_RNG                        = 0x80
	TIOCM_SR                         = 0x10
	TIOCM_ST                         = 0x8
	TIOCNOTTY                        = 0x5422
	TIOCNXCL                         = 0x540d
	TIOCOUTQ                         = 0x5411
	TIOCPKT                          = 0x5420
	TIOCSBRK                         = 0x5427
	TIOCSCTTY                        = 0x540e
	TIOCSERCONFIG                    = 0x5453
	TIOCSERGETLSR                    = 0x5459
	TIOCSERGETMULTI                  = 0x545a
	TIOCSERGSTRUCT                   = 0x5458
	TIOCSERGWILD                     = 0x5454
	TIOCSERSETMULTI                  = 0x545b
	TIOCSERSWILD                     = 0x5455
	TIOCSER_TEMT                     = 0x1
	TIOCSETD                         = 0x5423
	TIOCSIG                          = 0x40045436
	TIOCSISO7816                     = 0xc0285443
	TIOCSLCKTRMIOS                   = 0x5457
	TIOCSPGRP                        = 0x5410
	TIOCSPTLCK                       = 0x40045431
	TIOCSRS485                       = 0x542f
	TIOCSSERIAL                      = 0x541f
	TIOCSSOFTCAR                     = 0x541a
	TIOCSTI                          = 0x5412
	TIOCSWINSZ                       = 0x5414
	TIOCVHANGUP                      = 0x5437
	TOSTOP                           = 0x100
	TUNATTACHFILTER                  = 0x401054d5
	TUNDETACHFILTER                  = 0x401054d6
	TUNGETDEVNETNS                   = 0x54e3
	TUNGETFEATURES                   = 0x800454cf
	TUNGETFILTER                     = 0x801054db
	TUNGETIFF                        = 0x800454d2
	TUNGETSNDBUF                     = 0x800454d3
	TUNGETVNETBE                     = 0x800454df
	TUNGETVNETHDRSZ                  = 0x800454d7
	TUNGETVNETLE                     = 0x800454dd
	TUNSETCARRIER                    = 0x400454e2
	TUNSETDEBUG                      = 0x400454c9
	TUNSETFILTEREBPF                 = 0x800454e1
	TUNSETGROUP                      = 0x400454ce
	TUNSETIFF                        = 0x400454ca
	TUNSETIFINDEX                    = 0x400454da
	TUNSETLINK                       = 0x400454cd
	TUNSETNOCSUM                     = 0x400454c8
	TUNSETOFFLOAD                    = 0x400454d0
	TUNSETOWNER                      = 0x400454cc
	TUNSETPERSIST                    = 0x400454cb
	TUNSETQUEUE                      = 0x400454d9
	TUNSETSNDBUF                     = 0x400454d4
	TUNSETSTEERINGEBPF               = 0x800454e0
	TUNSETTXFILTER                   = 0x400454d1
	TUNSETVNETBE                     = 0x400454de
	TUNSETVNETHDRSZ                  = 0x400454d8
	TUNSETVNETLE                     = 0x400454dc
	UBI_IOCATT                       = 0x40186f40
	UBI_IOCDET                       = 0x40046f41
	UBI_IOCEBCH                      = 0x40044f02
	UBI_IOCEBER                      = 0x40044f01
	UBI_IOCEBISMAP                   = 0x80044f05
	UBI_IOCEBMAP                     = 0x40084f03
	UBI_IOCEBUNMAP                   = 0x40044f04
	UBI_IOCMKVOL                     = 0x40986f00
	UBI_IOCRMVOL                     = 0x40046f01
	UBI_IOCRNVOL                     = 0x51106f03
	UBI_IOCRPEB                      = 0x40046f04
	UBI_IOCRSVOL                     = 0x400c6f02
	UBI_IOCSETVOLPROP                = 0x40104f06
	UBI_IOCSPEB                      = 0x40046f05
	UBI_IOCVOLCRBLK                  = 0x40804f07
	UBI_IOCVOLRMBLK                  = 0x4f08
	UBI_IOCVOLUP                     = 0x40084f00
	VDISCARD                         = 0xd
	VEOF                             = 0x4
	VEOL                             = 0xb
	VEOL2                            = 0x10
	VMIN                             = 0x6
	VREPRINT                         = 0xc
	VSTART                           = 0x8
	VSTOP                            = 0x9
	VSUSP                            = 0xa
	VSWTC                            = 0x7
	VT1                              = 0x4000
	VTDLY                            = 0x4000
	VTIME                            = 0x5
	VWERASE                          = 0xe
	WDIOC_GETBOOTSTATUS              = 0x80045702
	WDIOC_GETPRETIMEOUT              = 0x80045709
	WDIOC_GETSTATUS                  = 0x80045701
	WDIOC_GETSUPPORT                 = 0x80285700
	WDIOC_GETTEMP                    = 0x80045703
	WDIOC_GETTIMELEFT                = 0x8004570a
	WDIOC_GETTIMEOUT                 = 0x80045707
	WDIOC_KEEPALIVE                  = 0x80045705
	WDIOC_SETOPTIONS                 = 0x80045704
	WORDSIZE                         = 0x40
	XCASE                            = 0x4
	XTABS                            = 0x1800
	_HIDIOCGRAWNAME                  = 0x80804804
	_HIDIOCGRAWPHYS                  = 0x80404805
	_HIDIOCGRAWUNIQ                  = 0x80404808
)

// Errors
const (
	EADDRINUSE      = syscall.Errno(0x62)
	EADDRNOTAVAIL   = syscall.Errno(0x63)
	EADV            = syscall.Errno(0x44)
	EAFNOSUPPORT    = syscall.Errno(0x61)
	EALREADY        = syscall.Errno(0x72)
	EBADE           = syscall.Errno(0x34)
	EBADFD          = syscall.Errno(0x4d)
	EBADMSG         = syscall.Errno(0x4a)
	EBADR           = syscall.Errno(0x35)
	EBADRQC         = syscall.Errno(0x38)
	EBADSLT         = syscall.Errno(0x39)
	EBFONT          = syscall.Errno(0x3b)
	ECANCELED       = syscall.Errno(0x7d)
	ECHRNG          = syscall.Errno(0x2c)
	ECOMM           = syscall.Errno(0x46)
	ECONNABORTED    = syscall.Errno(0x67)
	ECONNREFUSED    = syscall.Errno(0x6f)
	ECONNRESET      = syscall.Errno(0x68)
	EDEADLK         = syscall.Errno(0x23)
	EDEADLOCK       = syscall.Errno(0x23)
	EDESTADDRREQ    = syscall.Errno(0x59)
	EDOTDOT         = syscall.Errno(0x49)
	EDQUOT          = syscall.Errno(0x7a)
	EHOSTDOWN       = syscall.Errno(0x70)
	EHOSTUNREACH    = syscall.Errno(0x71)
	EHWPOISON       = syscall.Errno(0x85)
	EIDRM           = syscall.Errno(0x2b)
	EILSEQ          = syscall.Errno(0x54)
	EINPROGRESS     = syscall.Errno(0x73)
	EISCONN         = syscall.Errno(0x6a)
	EISNAM          = syscall.Errno(0x78)
	EKEYEXPIRED     = syscall.Errno(0x7f)
	EKEYREJECTED    = syscall.Errno(0x81)
	EKEYREVOKED     = syscall.Errno(0x80)
	EL2HLT          = syscall.Errno(0x33)
	EL2NSYNC        = syscall.Errno(0x2d)
	EL3HLT          = syscall.Errno(0x2e)
	EL3RST          = syscall.Errno(0x2f)
	ELIBACC         = syscall.Errno(0x4f)
	ELIBBAD         = syscall.Errno(0x50)
	ELIBEXEC        = syscall.Errno(0x53)
	ELIBMAX         = syscall.Errno(0x52)
	ELIBSCN         = syscall.Errno(0x51)
	ELNRNG          = syscall.Errno(0x30)
	ELOOP           = syscall.Errno(0x28)
	EMEDIUMTYPE     = syscall.Errno(0x7c)
	EMSGSIZE        = syscall.Errno(0x5a)
	EMULTIHOP       = syscall.Errno(0x48)
	ENAMETOOLONG    = syscall.Errno(0x24)
	ENAVAIL         = syscall.Errno(0x77)
	ENETDOWN        = syscall.Errno(0x64)
	ENETRESET       = syscall.Errno(0x66)
	ENETUNREACH     = syscall.Errno(0x65)
	ENOANO          = syscall.Errno(0x37)
	ENOBUFS         = syscall.Errno(0x69)
	ENOCSI          = syscall.Errno(0x32)
	ENODATA         = syscall.Errno(0x3d)
	ENOKEY          = syscall.Errno(0x7e)
	ENOLCK          = syscall.Errno(0x25)
	ENOLINK         = syscall.Errno(0x43)
	ENOMEDIUM       = syscall.Errno(0x7b)
	ENOMSG          = syscall.Errno(0x2a)
	ENONET          = syscall.Errno(0x40)
	ENOPKG          = syscall.Errno(0x41)
	ENOPROTOOPT     = syscall.Errno(0x5c)
	ENOSR           = syscall.Errno(0x3f)
	ENOSTR          = syscall.Errno(0x3c)
	ENOSYS          = syscall.Errno(0x26)
	ENOTCONN        = syscall.Errno(0x6b)
	ENOTEMPTY       = syscall.Errno(0x27)
	ENOTNAM         = syscall.Errno(0x76)
	ENOTRECOVERABLE = syscall.Errno(0x83)
	ENOTSOCK        = syscall.Errno(0x58)
	ENOTSUP         = syscall.Errno(0x5f)
	ENOTUNIQ        = syscall.Errno(0x4c)
	EOPNOTSUPP      = syscall.Errno(0x5f)
	EOVERFLOW       = syscall.Errno(0x4b)
	EOWNERDEAD      = syscall.Errno(0x82)
	EPFNOSUPPORT    = syscall.Errno(0x60)
	EPROTO          = syscall.Errno(0x47)
	EPROTONOSUPPORT = syscall.Errno(0x5d)
	EPROTOTYPE      = syscall.Errno(0x5b)
	EREMCHG         = syscall.Errno(0x4e)
	EREMOTE         = syscall.Errno(0x42)
	EREMOTEIO       = syscall.Errno(0x79)
	ERESTART        = syscall.Errno(0x55)
	ERFKILL         = syscall.Errno(0x84)
	ESHUTDOWN       = syscall.Errno(0x6c)
	ESOCKTNOSUPPORT = syscall.Errno(0x5e)
	ESRMNT          = syscall.Errno(0x45)
	ESTALE          = syscall.Errno(0x74)
	ESTRPIPE        = syscall.Errno(0x56)
	ETIME           = syscall.Errno(0x3e)
	ETIMEDOUT       = syscall.Errno(0x6e)
	ETOOMANYREFS    = syscall.Errno(0x6d)
	EUCLEAN         = syscall.Errno(0x75)
	EUNATCH         = syscall.Errno(0x31)
	EUSERS          = syscall.Errno(0x57)
	EXFULL          = syscall.Errno(0x36)
)

// Signals
const (
	SIGBUS    = syscall.Signal(0x7)
	SIGCHLD   = syscall.Signal(0x11)
	SIGCLD    = syscall.Signal(0x11)
	SIGCONT   = syscall.Signal(0x12)
	SIGIO     = syscall.Signal(0x1d)
	SIGPOLL   = syscall.Signal(0x1d)
	SIGPROF   = syscall.Signal(0x1b)
	SIGPWR    = syscall.Signal(0x1e)
	SIGSTKFLT = syscall.Signal(0x10)
	SIGSTOP   = syscall.Signal(0x13)
	SIGSYS    = syscall.Signal(0x1f)
	SIGTSTP   = syscall.Signal(0x14)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x17)
	SIGUSR1   = syscall.Signal(0xa)
	SIGUSR2   = syscall.Signal(0xc)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "no such device or address"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EAGAIN", "resource temporarily unavailable"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device or resource busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "invalid cross-device link"},
	{19, "ENODEV", "no such device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "numerical result out of range"},
	{35, "EDEADLK", "resource deadlock avoided"},
	{36, "ENAMETOOLONG", "file name too long"},
	{37, "ENOLCK", "no locks available"},
	{38, "ENOSYS", "function not implemented"},
	{39, "ENOTEMPTY", "directory not empty"},
	{40, "ELOOP", "too many levels of symbolic links"},
	{42, "ENOMSG", "no message of desired type"},
	{43, "EIDRM", "identifier removed"},
	{44, "ECHRNG", "channel number out of range"},
	{45, "EL2NSYNC", "level 2 not synchronized"},
	{46, "EL3HLT", "level 3 halted"},
	{47, "EL3RST", "level 3 reset"},
	{48, "ELNRNG", "link number out of range"},
	{49, "EUNATCH", "protocol driver not attached"},
	{50, "ENOCSI", "no CSI structure available"},
	{51, "EL2HLT", "level 2 halted"},
	{52, "EBADE", "invalid exchange"},
	{53, "EBADR", "invalid request descriptor"},
	{54, "EXFULL", "exchange full"},
	{55, "ENOANO", "no anode"},
	{56, "EBADRQC", "invalid request code"},
	{57, "EBADSLT", "invalid slot"},
	{59, "EBFONT", "bad font file format"},
	{60, "ENOSTR", "device not a stream"},
	{61, "ENODATA", "no data available"},
	{62, "ETIME", "timer expired"},
	{63, "ENOSR", "out of streams resources"},
	{64, "ENONET", "machine is not on the network"},
	{65, "ENOPKG", "package not installed"},
	{66, "EREMOTE", "object is remote"},
	{67, "ENOLINK", "link has been severed"},
	{68, "EADV", "advertise error"},
	{69, "ESRMNT", "srmount error"},
	{70, "ECOMM", "communication error on send"},
	{71, "EPROTO", "protocol error"},
	{72, "EMULTIHOP", "multihop attempted"},
	{73, "EDOTDOT", "RFS specific error"},
	{74, "EBADMSG", "bad message"},
	{75, "EOVERFLOW", "value too large for defined data type"},
	{76, "ENOTUNIQ", "name not unique on network"},
	{77, "EBADFD", "file descriptor in bad state"},
	{78, "EREMCHG", "remote address changed"},
	{79, "ELIBACC", "can not access a needed shared library"},
	{80, "ELIBBAD", "accessing a corrupted shared library"},
	{81, "ELIBSCN", ".lib section in a.out corrupted"},
	{82, "ELIBMAX", "attempting to link in too many shared libraries"},
	{83, "ELIBEXEC", "cannot exec a shared library directly"},
	{84, "EILSEQ", "invalid or incomplete multibyte or wide character"},
	{85, "ERESTART", "interrupted system call should be restarted"},
	{86, "ESTRPIPE", "streams pipe error"},
	{87, "EUSERS", "too many users"},
	{88, "ENOTSOCK", "socket operation on non-socket"},
	{89, "EDESTADDRREQ", "destination address required"},
	{90, "EMSGSIZE", "message too long"},
	{91, "EPROTOTYPE", "protocol wrong type for socket"},
	{92, "ENOPROTOOPT", "protocol not available"},
	{93, "EPROTONOSUPPORT", "protocol not supported"},
	{94, "ESOCKTNOSUPPORT", "socket type not supported"},
	{95, "ENOTSUP", "operation not supported"},
	{96, "EPFNOSUPPORT", "protocol family not supported"},
	{97, "EAFNOSUPPORT", "address family not supported by protocol"},
	{98, "EADDRINUSE", "address already in use"},
	{99, "EADDRNOTAVAIL", "cannot assign requested address"},
	{100, "ENETDOWN", "network is down"},
	{101, "ENETUNREACH", "network is unreachable"},
	{102, "ENETRESET", "network dropped connection on reset"},
	{103, "ECONNABORTED", "software caused connection abort"},
	{104, "ECONNRESET", "connection reset by peer"},
	{105, "ENOBUFS", "no buffer space available"},
	{106, "EISCONN", "transport endpoint is already connected"},
	{107, "ENOTCONN", "transport endpoint is not connected"},
	{108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
	{109, "ETOOMANYREFS", "too many references: cannot splice"},
	{110, "ETIMEDOUT", "connection timed out"},
	{111, "ECONNREFUSED", "connection refused"},
	{112, "EHOSTDOWN", "host is down"},
	{113, "EHOSTUNREACH", "no route to host"},
	{114, "EALREADY", "operation already in progress"},
	{115, "EINPROGRESS", "operation now in progress"},
	{116, "ESTALE", "stale file handle"},
	{117, "EUCLEAN", "structure needs cleaning"},
	{118, "ENOTNAM", "not a XENIX named type file"},
	{119, "ENAVAIL", "no XENIX semaphores available"},
	{120, "EISNAM", "is a named type file"},
	{121, "EREMOTEIO", "remote I/O error"},
	{122, "EDQUOT", "disk quota exceeded"},
	{123, "ENOMEDIUM", "no medium found"},
	{124, "EMEDIUMTYPE", "wrong medium type"},
	{125, "ECANCELED", "operation canceled"},
	{126, "ENOKEY", "required key not available"},
	{127, "EKEYEXPIRED", "key has expired"},
	{128, "EKEYREVOKED", "key has been revoked"},
	{129, "EKEYREJECTED", "key was rejected by service"},
	{130, "EOWNERDEAD", "owner died"},
	{131, "ENOTRECOVERABLE", "state not recoverable"},
	{132, "ERFKILL", "operation not possible due to RF-kill"},
	{133, "EHWPOISON", "memory page has hardware error"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/breakpoint trap"},
	{6, "SIGABRT", "aborted"},
	{7, "SIGBUS", "bus error"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGUSR1", "user defined signal 1"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGUSR2", "user defined signal 2"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGSTKFLT", "stack fault"},
	{17, "SIGCHLD", "child exited"},
	{18, "SIGCONT", "continued"},
	{19, "SIGSTOP", "stopped (signal)"},
	{20, "SIGTSTP", "stopped"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGURG", "urgent I/O condition"},
	{24, "SIGXCPU", "CPU time limit exceeded"},
	{25, "SIGXFSZ", "file size limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window changed"},
	{29, "SIGIO", "I/O possible"},
	{30, "SIGPWR", "power failure"},
	{31, "SIGSYS", "bad system call"},
}
07070100000E39000081A4000000000000000000000001645E367C000090E7000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go // mkerrors.sh -Wall -Werror -static -I/tmp/sparc64/include
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build sparc64 && linux
// +build sparc64,linux

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -Wall -Werror -static -I/tmp/sparc64/include _const.go

package unix

import "syscall"

const (
	ASI_LEON_DFLUSH                  = 0x11
	ASI_LEON_IFLUSH                  = 0x10
	ASI_LEON_MMUFLUSH                = 0x18
	B1000000                         = 0x1008
	B115200                          = 0x1002
	B1152000                         = 0x1009
	B1500000                         = 0x100a
	B2000000                         = 0x100b
	B230400                          = 0x1003
	B2500000                         = 0x100c
	B3000000                         = 0x100d
	B3500000                         = 0x100e
	B4000000                         = 0x100f
	B460800                          = 0x1004
	B500000                          = 0x1005
	B57600                           = 0x1001
	B576000                          = 0x1006
	B921600                          = 0x1007
	BLKBSZGET                        = 0x40081270
	BLKBSZSET                        = 0x80081271
	BLKFLSBUF                        = 0x20001261
	BLKFRAGET                        = 0x20001265
	BLKFRASET                        = 0x20001264
	BLKGETSIZE                       = 0x20001260
	BLKGETSIZE64                     = 0x40081272
	BLKPBSZGET                       = 0x2000127b
	BLKRAGET                         = 0x20001263
	BLKRASET                         = 0x20001262
	BLKROGET                         = 0x2000125e
	BLKROSET                         = 0x2000125d
	BLKRRPART                        = 0x2000125f
	BLKSECTGET                       = 0x20001267
	BLKSECTSET                       = 0x20001266
	BLKSSZGET                        = 0x20001268
	BOTHER                           = 0x1000
	BS1                              = 0x2000
	BSDLY                            = 0x2000
	CBAUD                            = 0x100f
	CBAUDEX                          = 0x1000
	CIBAUD                           = 0x100f0000
	CLOCAL                           = 0x800
	CR1                              = 0x200
	CR2                              = 0x400
	CR3                              = 0x600
	CRDLY                            = 0x600
	CREAD                            = 0x80
	CS6                              = 0x10
	CS7                              = 0x20
	CS8                              = 0x30
	CSIZE                            = 0x30
	CSTOPB                           = 0x40
	ECCGETLAYOUT                     = 0x41484d11
	ECCGETSTATS                      = 0x40104d12
	ECHOCTL                          = 0x200
	ECHOE                            = 0x10
	ECHOK                            = 0x20
	ECHOKE                           = 0x800
	ECHONL                           = 0x40
	ECHOPRT                          = 0x400
	EFD_CLOEXEC                      = 0x400000
	EFD_NONBLOCK                     = 0x4000
	EMT_TAGOVF                       = 0x1
	EPOLL_CLOEXEC                    = 0x400000
	EXTPROC                          = 0x10000
	FF1                              = 0x8000
	FFDLY                            = 0x8000
	FICLONE                          = 0x80049409
	FICLONERANGE                     = 0x8020940d
	FLUSHO                           = 0x1000
	FS_IOC_ENABLE_VERITY             = 0x80806685
	FS_IOC_GETFLAGS                  = 0x40086601
	FS_IOC_GET_ENCRYPTION_NONCE      = 0x4010661b
	FS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615
	FS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614
	FS_IOC_SETFLAGS                  = 0x80086602
	FS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613
	F_GETLK                          = 0x7
	F_GETLK64                        = 0x7
	F_GETOWN                         = 0x5
	F_RDLCK                          = 0x1
	F_SETLK                          = 0x8
	F_SETLK64                        = 0x8
	F_SETLKW                         = 0x9
	F_SETLKW64                       = 0x9
	F_SETOWN                         = 0x6
	F_UNLCK                          = 0x3
	F_WRLCK                          = 0x2
	HIDIOCGRAWINFO                   = 0x40084803
	HIDIOCGRDESC                     = 0x50044802
	HIDIOCGRDESCSIZE                 = 0x40044801
	HUPCL                            = 0x400
	ICANON                           = 0x2
	IEXTEN                           = 0x8000
	IN_CLOEXEC                       = 0x400000
	IN_NONBLOCK                      = 0x4000
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9
	ISIG                             = 0x1
	IUCLC                            = 0x200
	IXOFF                            = 0x1000
	IXON                             = 0x400
	MAP_ANON                         = 0x20
	MAP_ANONYMOUS                    = 0x20
	MAP_DENYWRITE                    = 0x800
	MAP_EXECUTABLE                   = 0x1000
	MAP_GROWSDOWN                    = 0x200
	MAP_HUGETLB                      = 0x40000
	MAP_LOCKED                       = 0x100
	MAP_NONBLOCK                     = 0x10000
	MAP_NORESERVE                    = 0x40
	MAP_POPULATE                     = 0x8000
	MAP_RENAME                       = 0x20
	MAP_STACK                        = 0x20000
	MAP_SYNC                         = 0x80000
	MCL_CURRENT                      = 0x2000
	MCL_FUTURE                       = 0x4000
	MCL_ONFAULT                      = 0x8000
	MEMERASE                         = 0x80084d02
	MEMERASE64                       = 0x80104d14
	MEMGETBADBLOCK                   = 0x80084d0b
	MEMGETINFO                       = 0x40204d01
	MEMGETOOBSEL                     = 0x40c84d0a
	MEMGETREGIONCOUNT                = 0x40044d07
	MEMISLOCKED                      = 0x40084d17
	MEMLOCK                          = 0x80084d05
	MEMREAD                          = 0xc0404d1a
	MEMREADOOB                       = 0xc0104d04
	MEMSETBADBLOCK                   = 0x80084d0c
	MEMUNLOCK                        = 0x80084d06
	MEMWRITEOOB                      = 0xc0104d03
	MTDFILEMODE                      = 0x20004d13
	NFDBITS                          = 0x40
	NLDLY                            = 0x100
	NOFLSH                           = 0x80
	NS_GET_NSTYPE                    = 0x2000b703
	NS_GET_OWNER_UID                 = 0x2000b704
	NS_GET_PARENT                    = 0x2000b702
	NS_GET_USERNS                    = 0x2000b701
	OLCUC                            = 0x2
	ONLCR                            = 0x4
	OTPERASE                         = 0x800c4d19
	OTPGETREGIONCOUNT                = 0x80044d0e
	OTPGETREGIONINFO                 = 0x800c4d0f
	OTPLOCK                          = 0x400c4d10
	OTPSELECT                        = 0x40044d0d
	O_APPEND                         = 0x8
	O_ASYNC                          = 0x40
	O_CLOEXEC                        = 0x400000
	O_CREAT                          = 0x200
	O_DIRECT                         = 0x100000
	O_DIRECTORY                      = 0x10000
	O_DSYNC                          = 0x2000
	O_EXCL                           = 0x800
	O_FSYNC                          = 0x802000
	O_LARGEFILE                      = 0x0
	O_NDELAY                         = 0x4004
	O_NOATIME                        = 0x200000
	O_NOCTTY                         = 0x8000
	O_NOFOLLOW                       = 0x20000
	O_NONBLOCK                       = 0x4000
	O_PATH                           = 0x1000000
	O_RSYNC                          = 0x802000
	O_SYNC                           = 0x802000
	O_TMPFILE                        = 0x2010000
	O_TRUNC                          = 0x400
	PARENB                           = 0x100
	PARODD                           = 0x200
	PENDIN                           = 0x4000
	PERF_EVENT_IOC_DISABLE           = 0x20002401
	PERF_EVENT_IOC_ENABLE            = 0x20002400
	PERF_EVENT_IOC_ID                = 0x40082407
	PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b
	PERF_EVENT_IOC_PAUSE_OUTPUT      = 0x80042409
	PERF_EVENT_IOC_PERIOD            = 0x80082404
	PERF_EVENT_IOC_QUERY_BPF         = 0xc008240a
	PERF_EVENT_IOC_REFRESH           = 0x20002402
	PERF_EVENT_IOC_RESET             = 0x20002403
	PERF_EVENT_IOC_SET_BPF           = 0x80042408
	PERF_EVENT_IOC_SET_FILTER        = 0x80082406
	PERF_EVENT_IOC_SET_OUTPUT        = 0x20002405
	PPPIOCATTACH                     = 0x8004743d
	PPPIOCATTCHAN                    = 0x80047438
	PPPIOCBRIDGECHAN                 = 0x80047435
	PPPIOCCONNECT                    = 0x8004743a
	PPPIOCDETACH                     = 0x8004743c
	PPPIOCDISCONN                    = 0x20007439
	PPPIOCGASYNCMAP                  = 0x40047458
	PPPIOCGCHAN                      = 0x40047437
	PPPIOCGDEBUG                     = 0x40047441
	PPPIOCGFLAGS                     = 0x4004745a
	PPPIOCGIDLE                      = 0x4010743f
	PPPIOCGIDLE32                    = 0x4008743f
	PPPIOCGIDLE64                    = 0x4010743f
	PPPIOCGL2TPSTATS                 = 0x40487436
	PPPIOCGMRU                       = 0x40047453
	PPPIOCGRASYNCMAP                 = 0x40047455
	PPPIOCGUNIT                      = 0x40047456
	PPPIOCGXASYNCMAP                 = 0x40207450
	PPPIOCSACTIVE                    = 0x80107446
	PPPIOCSASYNCMAP                  = 0x80047457
	PPPIOCSCOMPRESS                  = 0x8010744d
	PPPIOCSDEBUG                     = 0x80047440
	PPPIOCSFLAGS                     = 0x80047459
	PPPIOCSMAXCID                    = 0x80047451
	PPPIOCSMRRU                      = 0x8004743b
	PPPIOCSMRU                       = 0x80047452
	PPPIOCSNPMODE                    = 0x8008744b
	PPPIOCSPASS                      = 0x80107447
	PPPIOCSRASYNCMAP                 = 0x80047454
	PPPIOCSXASYNCMAP                 = 0x8020744f
	PPPIOCUNBRIDGECHAN               = 0x20007434
	PPPIOCXFERUNIT                   = 0x2000744e
	PR_SET_PTRACER_ANY               = 0xffffffffffffffff
	PTRACE_GETFPAREGS                = 0x14
	PTRACE_GETFPREGS                 = 0xe
	PTRACE_GETFPREGS64               = 0x19
	PTRACE_GETREGS64                 = 0x16
	PTRACE_READDATA                  = 0x10
	PTRACE_READTEXT                  = 0x12
	PTRACE_SETFPAREGS                = 0x15
	PTRACE_SETFPREGS                 = 0xf
	PTRACE_SETFPREGS64               = 0x1a
	PTRACE_SETREGS64                 = 0x17
	PTRACE_SPARC_DETACH              = 0xb
	PTRACE_WRITEDATA                 = 0x11
	PTRACE_WRITETEXT                 = 0x13
	PT_FP                            = 0x48
	PT_G0                            = 0x10
	PT_G1                            = 0x14
	PT_G2                            = 0x18
	PT_G3                            = 0x1c
	PT_G4                            = 0x20
	PT_G5                            = 0x24
	PT_G6                            = 0x28
	PT_G7                            = 0x2c
	PT_I0                            = 0x30
	PT_I1                            = 0x34
	PT_I2                            = 0x38
	PT_I3                            = 0x3c
	PT_I4                            = 0x40
	PT_I5                            = 0x44
	PT_I6                            = 0x48
	PT_I7                            = 0x4c
	PT_NPC                           = 0x8
	PT_PC                            = 0x4
	PT_PSR                           = 0x0
	PT_REGS_MAGIC                    = 0x57ac6c00
	PT_TNPC                          = 0x90
	PT_TPC                           = 0x88
	PT_TSTATE                        = 0x80
	PT_V9_FP                         = 0x70
	PT_V9_G0                         = 0x0
	PT_V9_G1                         = 0x8
	PT_V9_G2                         = 0x10
	PT_V9_G3                         = 0x18
	PT_V9_G4                         = 0x20
	PT_V9_G5                         = 0x28
	PT_V9_G6                         = 0x30
	PT_V9_G7                         = 0x38
	PT_V9_I0                         = 0x40
	PT_V9_I1                         = 0x48
	PT_V9_I2                         = 0x50
	PT_V9_I3                         = 0x58
	PT_V9_I4                         = 0x60
	PT_V9_I5                         = 0x68
	PT_V9_I6                         = 0x70
	PT_V9_I7                         = 0x78
	PT_V9_MAGIC                      = 0x9c
	PT_V9_TNPC                       = 0x90
	PT_V9_TPC                        = 0x88
	PT_V9_TSTATE                     = 0x80
	PT_V9_Y                          = 0x98
	PT_WIM                           = 0x10
	PT_Y                             = 0xc
	RLIMIT_AS                        = 0x9
	RLIMIT_MEMLOCK                   = 0x8
	RLIMIT_NOFILE                    = 0x6
	RLIMIT_NPROC                     = 0x7
	RLIMIT_RSS                       = 0x5
	RNDADDENTROPY                    = 0x80085203
	RNDADDTOENTCNT                   = 0x80045201
	RNDCLEARPOOL                     = 0x20005206
	RNDGETENTCNT                     = 0x40045200
	RNDGETPOOL                       = 0x40085202
	RNDRESEEDCRNG                    = 0x20005207
	RNDZAPENTCNT                     = 0x20005204
	RTC_AIE_OFF                      = 0x20007002
	RTC_AIE_ON                       = 0x20007001
	RTC_ALM_READ                     = 0x40247008
	RTC_ALM_SET                      = 0x80247007
	RTC_EPOCH_READ                   = 0x4008700d
	RTC_EPOCH_SET                    = 0x8008700e
	RTC_IRQP_READ                    = 0x4008700b
	RTC_IRQP_SET                     = 0x8008700c
	RTC_PARAM_GET                    = 0x80187013
	RTC_PARAM_SET                    = 0x80187014
	RTC_PIE_OFF                      = 0x20007006
	RTC_PIE_ON                       = 0x20007005
	RTC_PLL_GET                      = 0x40207011
	RTC_PLL_SET                      = 0x80207012
	RTC_RD_TIME                      = 0x40247009
	RTC_SET_TIME                     = 0x8024700a
	RTC_UIE_OFF                      = 0x20007004
	RTC_UIE_ON                       = 0x20007003
	RTC_VL_CLR                       = 0x20007014
	RTC_VL_READ                      = 0x40047013
	RTC_WIE_OFF                      = 0x20007010
	RTC_WIE_ON                       = 0x2000700f
	RTC_WKALM_RD                     = 0x40287010
	RTC_WKALM_SET                    = 0x8028700f
	SCM_TIMESTAMPING                 = 0x23
	SCM_TIMESTAMPING_OPT_STATS       = 0x38
	SCM_TIMESTAMPING_PKTINFO         = 0x3c
	SCM_TIMESTAMPNS                  = 0x21
	SCM_TXTIME                       = 0x3f
	SCM_WIFI_STATUS                  = 0x25
	SFD_CLOEXEC                      = 0x400000
	SFD_NONBLOCK                     = 0x4000
	SIOCATMARK                       = 0x8905
	SIOCGPGRP                        = 0x8904
	SIOCGSTAMPNS_NEW                 = 0x40108907
	SIOCGSTAMP_NEW                   = 0x40108906
	SIOCINQ                          = 0x4004667f
	SIOCOUTQ                         = 0x40047473
	SIOCSPGRP                        = 0x8902
	SOCK_CLOEXEC                     = 0x400000
	SOCK_DGRAM                       = 0x2
	SOCK_NONBLOCK                    = 0x4000
	SOCK_STREAM                      = 0x1
	SOL_SOCKET                       = 0xffff
	SO_ACCEPTCONN                    = 0x8000
	SO_ATTACH_BPF                    = 0x34
	SO_ATTACH_REUSEPORT_CBPF         = 0x35
	SO_ATTACH_REUSEPORT_EBPF         = 0x36
	SO_BINDTODEVICE                  = 0xd
	SO_BINDTOIFINDEX                 = 0x41
	SO_BPF_EXTENSIONS                = 0x32
	SO_BROADCAST                     = 0x20
	SO_BSDCOMPAT                     = 0x400
	SO_BUF_LOCK                      = 0x51
	SO_BUSY_POLL                     = 0x30
	SO_BUSY_POLL_BUDGET              = 0x49
	SO_CNX_ADVICE                    = 0x37
	SO_COOKIE                        = 0x3b
	SO_DETACH_REUSEPORT_BPF          = 0x47
	SO_DOMAIN                        = 0x1029
	SO_DONTROUTE                     = 0x10
	SO_ERROR                         = 0x1007
	SO_INCOMING_CPU                  = 0x33
	SO_INCOMING_NAPI_ID              = 0x3a
	SO_KEEPALIVE                     = 0x8
	SO_LINGER                        = 0x80
	SO_LOCK_FILTER                   = 0x28
	SO_MARK                          = 0x22
	SO_MAX_PACING_RATE               = 0x31
	SO_MEMINFO                       = 0x39
	SO_NETNS_COOKIE                  = 0x50
	SO_NOFCS                         = 0x27
	SO_OOBINLINE                     = 0x100
	SO_PASSCRED                      = 0x2
	SO_PASSSEC                       = 0x1f
	SO_PEEK_OFF                      = 0x26
	SO_PEERCRED                      = 0x40
	SO_PEERGROUPS                    = 0x3d
	SO_PEERSEC                       = 0x1e
	SO_PREFER_BUSY_POLL              = 0x48
	SO_PROTOCOL                      = 0x1028
	SO_RCVBUF                        = 0x1002
	SO_RCVBUFFORCE                   = 0x100b
	SO_RCVLOWAT                      = 0x800
	SO_RCVMARK                       = 0x54
	SO_RCVTIMEO                      = 0x2000
	SO_RCVTIMEO_NEW                  = 0x44
	SO_RCVTIMEO_OLD                  = 0x2000
	SO_RESERVE_MEM                   = 0x52
	SO_REUSEADDR                     = 0x4
	SO_REUSEPORT                     = 0x200
	SO_RXQ_OVFL                      = 0x24
	SO_SECURITY_AUTHENTICATION       = 0x5001
	SO_SECURITY_ENCRYPTION_NETWORK   = 0x5004
	SO_SECURITY_ENCRYPTION_TRANSPORT = 0x5002
	SO_SELECT_ERR_QUEUE              = 0x29
	SO_SNDBUF                        = 0x1001
	SO_SNDBUFFORCE                   = 0x100a
	SO_SNDLOWAT                      = 0x1000
	SO_SNDTIMEO                      = 0x4000
	SO_SNDTIMEO_NEW                  = 0x45
	SO_SNDTIMEO_OLD                  = 0x4000
	SO_TIMESTAMPING                  = 0x23
	SO_TIMESTAMPING_NEW              = 0x43
	SO_TIMESTAMPING_OLD              = 0x23
	SO_TIMESTAMPNS                   = 0x21
	SO_TIMESTAMPNS_NEW               = 0x42
	SO_TIMESTAMPNS_OLD               = 0x21
	SO_TIMESTAMP_NEW                 = 0x46
	SO_TXREHASH                      = 0x53
	SO_TXTIME                        = 0x3f
	SO_TYPE                          = 0x1008
	SO_WIFI_STATUS                   = 0x25
	SO_ZEROCOPY                      = 0x3e
	TAB1                             = 0x800
	TAB2                             = 0x1000
	TAB3                             = 0x1800
	TABDLY                           = 0x1800
	TCFLSH                           = 0x20005407
	TCGETA                           = 0x40125401
	TCGETS                           = 0x40245408
	TCGETS2                          = 0x402c540c
	TCSAFLUSH                        = 0x2
	TCSBRK                           = 0x20005405
	TCSBRKP                          = 0x5425
	TCSETA                           = 0x80125402
	TCSETAF                          = 0x80125404
	TCSETAW                          = 0x80125403
	TCSETS                           = 0x80245409
	TCSETS2                          = 0x802c540d
	TCSETSF                          = 0x8024540b
	TCSETSF2                         = 0x802c540f
	TCSETSW                          = 0x8024540a
	TCSETSW2                         = 0x802c540e
	TCXONC                           = 0x20005406
	TFD_CLOEXEC                      = 0x400000
	TFD_NONBLOCK                     = 0x4000
	TIOCCBRK                         = 0x2000747a
	TIOCCONS                         = 0x20007424
	TIOCEXCL                         = 0x2000740d
	TIOCGDEV                         = 0x40045432
	TIOCGETD                         = 0x40047400
	TIOCGEXCL                        = 0x40045440
	TIOCGICOUNT                      = 0x545d
	TIOCGISO7816                     = 0x40285443
	TIOCGLCKTRMIOS                   = 0x5456
	TIOCGPGRP                        = 0x40047483
	TIOCGPKT                         = 0x40045438
	TIOCGPTLCK                       = 0x40045439
	TIOCGPTN                         = 0x40047486
	TIOCGPTPEER                      = 0x20007489
	TIOCGRS485                       = 0x40205441
	TIOCGSERIAL                      = 0x541e
	TIOCGSID                         = 0x40047485
	TIOCGSOFTCAR                     = 0x40047464
	TIOCGWINSZ                       = 0x40087468
	TIOCINQ                          = 0x4004667f
	TIOCLINUX                        = 0x541c
	TIOCMBIC                         = 0x8004746b
	TIOCMBIS                         = 0x8004746c
	TIOCMGET                         = 0x4004746a
	TIOCMIWAIT                       = 0x545c
	TIOCMSET                         = 0x8004746d
	TIOCM_CAR                        = 0x40
	TIOCM_CD                         = 0x40
	TIOCM_CTS                        = 0x20
	TIOCM_DSR                        = 0x100
	TIOCM_RI                         = 0x80
	TIOCM_RNG                        = 0x80
	TIOCM_SR                         = 0x10
	TIOCM_ST                         = 0x8
	TIOCNOTTY                        = 0x20007471
	TIOCNXCL                         = 0x2000740e
	TIOCOUTQ                         = 0x40047473
	TIOCPKT                          = 0x80047470
	TIOCSBRK                         = 0x2000747b
	TIOCSCTTY                        = 0x20007484
	TIOCSERCONFIG                    = 0x5453
	TIOCSERGETLSR                    = 0x5459
	TIOCSERGETMULTI                  = 0x545a
	TIOCSERGSTRUCT                   = 0x5458
	TIOCSERGWILD                     = 0x5454
	TIOCSERSETMULTI                  = 0x545b
	TIOCSERSWILD                     = 0x5455
	TIOCSETD                         = 0x80047401
	TIOCSIG                          = 0x80047488
	TIOCSISO7816                     = 0xc0285444
	TIOCSLCKTRMIOS                   = 0x5457
	TIOCSPGRP                        = 0x80047482
	TIOCSPTLCK                       = 0x80047487
	TIOCSRS485                       = 0xc0205442
	TIOCSSERIAL                      = 0x541f
	TIOCSSOFTCAR                     = 0x80047465
	TIOCSTART                        = 0x2000746e
	TIOCSTI                          = 0x80017472
	TIOCSTOP                         = 0x2000746f
	TIOCSWINSZ                       = 0x80087467
	TIOCVHANGUP                      = 0x20005437
	TOSTOP                           = 0x100
	TUNATTACHFILTER                  = 0x801054d5
	TUNDETACHFILTER                  = 0x801054d6
	TUNGETDEVNETNS                   = 0x200054e3
	TUNGETFEATURES                   = 0x400454cf
	TUNGETFILTER                     = 0x401054db
	TUNGETIFF                        = 0x400454d2
	TUNGETSNDBUF                     = 0x400454d3
	TUNGETVNETBE                     = 0x400454df
	TUNGETVNETHDRSZ                  = 0x400454d7
	TUNGETVNETLE                     = 0x400454dd
	TUNSETCARRIER                    = 0x800454e2
	TUNSETDEBUG                      = 0x800454c9
	TUNSETFILTEREBPF                 = 0x400454e1
	TUNSETGROUP                      = 0x800454ce
	TUNSETIFF                        = 0x800454ca
	TUNSETIFINDEX                    = 0x800454da
	TUNSETLINK                       = 0x800454cd
	TUNSETNOCSUM                     = 0x800454c8
	TUNSETOFFLOAD                    = 0x800454d0
	TUNSETOWNER                      = 0x800454cc
	TUNSETPERSIST                    = 0x800454cb
	TUNSETQUEUE                      = 0x800454d9
	TUNSETSNDBUF                     = 0x800454d4
	TUNSETSTEERINGEBPF               = 0x400454e0
	TUNSETTXFILTER                   = 0x800454d1
	TUNSETVNETBE                     = 0x800454de
	TUNSETVNETHDRSZ                  = 0x800454d8
	TUNSETVNETLE                     = 0x800454dc
	UBI_IOCATT                       = 0x80186f40
	UBI_IOCDET                       = 0x80046f41
	UBI_IOCEBCH                      = 0x80044f02
	UBI_IOCEBER                      = 0x80044f01
	UBI_IOCEBISMAP                   = 0x40044f05
	UBI_IOCEBMAP                     = 0x80084f03
	UBI_IOCEBUNMAP                   = 0x80044f04
	UBI_IOCMKVOL                     = 0x80986f00
	UBI_IOCRMVOL                     = 0x80046f01
	UBI_IOCRNVOL                     = 0x91106f03
	UBI_IOCRPEB                      = 0x80046f04
	UBI_IOCRSVOL                     = 0x800c6f02
	UBI_IOCSETVOLPROP                = 0x80104f06
	UBI_IOCSPEB                      = 0x80046f05
	UBI_IOCVOLCRBLK                  = 0x80804f07
	UBI_IOCVOLRMBLK                  = 0x20004f08
	UBI_IOCVOLUP                     = 0x80084f00
	VDISCARD                         = 0xd
	VEOF                             = 0x4
	VEOL                             = 0xb
	VEOL2                            = 0x10
	VMIN                             = 0x6
	VREPRINT                         = 0xc
	VSTART                           = 0x8
	VSTOP                            = 0x9
	VSUSP                            = 0xa
	VSWTC                            = 0x7
	VT1                              = 0x4000
	VTDLY                            = 0x4000
	VTIME                            = 0x5
	VWERASE                          = 0xe
	WDIOC_GETBOOTSTATUS              = 0x40045702
	WDIOC_GETPRETIMEOUT              = 0x40045709
	WDIOC_GETSTATUS                  = 0x40045701
	WDIOC_GETSUPPORT                 = 0x40285700
	WDIOC_GETTEMP                    = 0x40045703
	WDIOC_GETTIMELEFT                = 0x4004570a
	WDIOC_GETTIMEOUT                 = 0x40045707
	WDIOC_KEEPALIVE                  = 0x40045705
	WDIOC_SETOPTIONS                 = 0x40045704
	WORDSIZE                         = 0x40
	XCASE                            = 0x4
	XTABS                            = 0x1800
	_HIDIOCGRAWNAME                  = 0x40804804
	_HIDIOCGRAWPHYS                  = 0x40404805
	_HIDIOCGRAWUNIQ                  = 0x40404808
	__TIOCFLUSH                      = 0x80047410
)

// Errors
const (
	EADDRINUSE      = syscall.Errno(0x30)
	EADDRNOTAVAIL   = syscall.Errno(0x31)
	EADV            = syscall.Errno(0x53)
	EAFNOSUPPORT    = syscall.Errno(0x2f)
	EALREADY        = syscall.Errno(0x25)
	EBADE           = syscall.Errno(0x66)
	EBADFD          = syscall.Errno(0x5d)
	EBADMSG         = syscall.Errno(0x4c)
	EBADR           = syscall.Errno(0x67)
	EBADRQC         = syscall.Errno(0x6a)
	EBADSLT         = syscall.Errno(0x6b)
	EBFONT          = syscall.Errno(0x6d)
	ECANCELED       = syscall.Errno(0x7f)
	ECHRNG          = syscall.Errno(0x5e)
	ECOMM           = syscall.Errno(0x55)
	ECONNABORTED    = syscall.Errno(0x35)
	ECONNREFUSED    = syscall.Errno(0x3d)
	ECONNRESET      = syscall.Errno(0x36)
	EDEADLK         = syscall.Errno(0x4e)
	EDEADLOCK       = syscall.Errno(0x6c)
	EDESTADDRREQ    = syscall.Errno(0x27)
	EDOTDOT         = syscall.Errno(0x58)
	EDQUOT          = syscall.Errno(0x45)
	EHOSTDOWN       = syscall.Errno(0x40)
	EHOSTUNREACH    = syscall.Errno(0x41)
	EHWPOISON       = syscall.Errno(0x87)
	EIDRM           = syscall.Errno(0x4d)
	EILSEQ          = syscall.Errno(0x7a)
	EINPROGRESS     = syscall.Errno(0x24)
	EISCONN         = syscall.Errno(0x38)
	EISNAM          = syscall.Errno(0x78)
	EKEYEXPIRED     = syscall.Errno(0x81)
	EKEYREJECTED    = syscall.Errno(0x83)
	EKEYREVOKED     = syscall.Errno(0x82)
	EL2HLT          = syscall.Errno(0x65)
	EL2NSYNC        = syscall.Errno(0x5f)
	EL3HLT          = syscall.Errno(0x60)
	EL3RST          = syscall.Errno(0x61)
	ELIBACC         = syscall.Errno(0x72)
	ELIBBAD         = syscall.Errno(0x70)
	ELIBEXEC        = syscall.Errno(0x6e)
	ELIBMAX         = syscall.Errno(0x7b)
	ELIBSCN         = syscall.Errno(0x7c)
	ELNRNG          = syscall.Errno(0x62)
	ELOOP           = syscall.Errno(0x3e)
	EMEDIUMTYPE     = syscall.Errno(0x7e)
	EMSGSIZE        = syscall.Errno(0x28)
	EMULTIHOP       = syscall.Errno(0x57)
	ENAMETOOLONG    = syscall.Errno(0x3f)
	ENAVAIL         = syscall.Errno(0x77)
	ENETDOWN        = syscall.Errno(0x32)
	ENETRESET       = syscall.Errno(0x34)
	ENETUNREACH     = syscall.Errno(0x33)
	ENOANO          = syscall.Errno(0x69)
	ENOBUFS         = syscall.Errno(0x37)
	ENOCSI          = syscall.Errno(0x64)
	ENODATA         = syscall.Errno(0x6f)
	ENOKEY          = syscall.Errno(0x80)
	ENOLCK          = syscall.Errno(0x4f)
	ENOLINK         = syscall.Errno(0x52)
	ENOMEDIUM       = syscall.Errno(0x7d)
	ENOMSG          = syscall.Errno(0x4b)
	ENONET          = syscall.Errno(0x50)
	ENOPKG          = syscall.Errno(0x71)
	ENOPROTOOPT     = syscall.Errno(0x2a)
	ENOSR           = syscall.Errno(0x4a)
	ENOSTR          = syscall.Errno(0x48)
	ENOSYS          = syscall.Errno(0x5a)
	ENOTCONN        = syscall.Errno(0x39)
	ENOTEMPTY       = syscall.Errno(0x42)
	ENOTNAM         = syscall.Errno(0x76)
	ENOTRECOVERABLE = syscall.Errno(0x85)
	ENOTSOCK        = syscall.Errno(0x26)
	ENOTSUP         = syscall.Errno(0x2d)
	ENOTUNIQ        = syscall.Errno(0x73)
	EOPNOTSUPP      = syscall.Errno(0x2d)
	EOVERFLOW       = syscall.Errno(0x5c)
	EOWNERDEAD      = syscall.Errno(0x84)
	EPFNOSUPPORT    = syscall.Errno(0x2e)
	EPROCLIM        = syscall.Errno(0x43)
	EPROTO          = syscall.Errno(0x56)
	EPROTONOSUPPORT = syscall.Errno(0x2b)
	EPROTOTYPE      = syscall.Errno(0x29)
	EREMCHG         = syscall.Errno(0x59)
	EREMOTE         = syscall.Errno(0x47)
	EREMOTEIO       = syscall.Errno(0x79)
	ERESTART        = syscall.Errno(0x74)
	ERFKILL         = syscall.Errno(0x86)
	ERREMOTE        = syscall.Errno(0x51)
	ESHUTDOWN       = syscall.Errno(0x3a)
	ESOCKTNOSUPPORT = syscall.Errno(0x2c)
	ESRMNT          = syscall.Errno(0x54)
	ESTALE          = syscall.Errno(0x46)
	ESTRPIPE        = syscall.Errno(0x5b)
	ETIME           = syscall.Errno(0x49)
	ETIMEDOUT       = syscall.Errno(0x3c)
	ETOOMANYREFS    = syscall.Errno(0x3b)
	EUCLEAN         = syscall.Errno(0x75)
	EUNATCH         = syscall.Errno(0x63)
	EUSERS          = syscall.Errno(0x44)
	EXFULL          = syscall.Errno(0x68)
)

// Signals
const (
	SIGBUS    = syscall.Signal(0xa)
	SIGCHLD   = syscall.Signal(0x14)
	SIGCLD    = syscall.Signal(0x14)
	SIGCONT   = syscall.Signal(0x13)
	SIGEMT    = syscall.Signal(0x7)
	SIGIO     = syscall.Signal(0x17)
	SIGLOST   = syscall.Signal(0x1d)
	SIGPOLL   = syscall.Signal(0x17)
	SIGPROF   = syscall.Signal(0x1b)
	SIGPWR    = syscall.Signal(0x1d)
	SIGSTOP   = syscall.Signal(0x11)
	SIGSYS    = syscall.Signal(0xc)
	SIGTSTP   = syscall.Signal(0x12)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x10)
	SIGUSR1   = syscall.Signal(0x1e)
	SIGUSR2   = syscall.Signal(0x1f)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "no such device or address"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EAGAIN", "resource temporarily unavailable"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device or resource busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "invalid cross-device link"},
	{19, "ENODEV", "no such device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "numerical result out of range"},
	{36, "EINPROGRESS", "operation now in progress"},
	{37, "EALREADY", "operation already in progress"},
	{38, "ENOTSOCK", "socket operation on non-socket"},
	{39, "EDESTADDRREQ", "destination address required"},
	{40, "EMSGSIZE", "message too long"},
	{41, "EPROTOTYPE", "protocol wrong type for socket"},
	{42, "ENOPROTOOPT", "protocol not available"},
	{43, "EPROTONOSUPPORT", "protocol not supported"},
	{44, "ESOCKTNOSUPPORT", "socket type not supported"},
	{45, "ENOTSUP", "operation not supported"},
	{46, "EPFNOSUPPORT", "protocol family not supported"},
	{47, "EAFNOSUPPORT", "address family not supported by protocol"},
	{48, "EADDRINUSE", "address already in use"},
	{49, "EADDRNOTAVAIL", "cannot assign requested address"},
	{50, "ENETDOWN", "network is down"},
	{51, "ENETUNREACH", "network is unreachable"},
	{52, "ENETRESET", "network dropped connection on reset"},
	{53, "ECONNABORTED", "software caused connection abort"},
	{54, "ECONNRESET", "connection reset by peer"},
	{55, "ENOBUFS", "no buffer space available"},
	{56, "EISCONN", "transport endpoint is already connected"},
	{57, "ENOTCONN", "transport endpoint is not connected"},
	{58, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
	{59, "ETOOMANYREFS", "too many references: cannot splice"},
	{60, "ETIMEDOUT", "connection timed out"},
	{61, "ECONNREFUSED", "connection refused"},
	{62, "ELOOP", "too many levels of symbolic links"},
	{63, "ENAMETOOLONG", "file name too long"},
	{64, "EHOSTDOWN", "host is down"},
	{65, "EHOSTUNREACH", "no route to host"},
	{66, "ENOTEMPTY", "directory not empty"},
	{67, "EPROCLIM", "too many processes"},
	{68, "EUSERS", "too many users"},
	{69, "EDQUOT", "disk quota exceeded"},
	{70, "ESTALE", "stale file handle"},
	{71, "EREMOTE", "object is remote"},
	{72, "ENOSTR", "device not a stream"},
	{73, "ETIME", "timer expired"},
	{74, "ENOSR", "out of streams resources"},
	{75, "ENOMSG", "no message of desired type"},
	{76, "EBADMSG", "bad message"},
	{77, "EIDRM", "identifier removed"},
	{78, "EDEADLK", "resource deadlock avoided"},
	{79, "ENOLCK", "no locks available"},
	{80, "ENONET", "machine is not on the network"},
	{81, "ERREMOTE", "unknown error 81"},
	{82, "ENOLINK", "link has been severed"},
	{83, "EADV", "advertise error"},
	{84, "ESRMNT", "srmount error"},
	{85, "ECOMM", "communication error on send"},
	{86, "EPROTO", "protocol error"},
	{87, "EMULTIHOP", "multihop attempted"},
	{88, "EDOTDOT", "RFS specific error"},
	{89, "EREMCHG", "remote address changed"},
	{90, "ENOSYS", "function not implemented"},
	{91, "ESTRPIPE", "streams pipe error"},
	{92, "EOVERFLOW", "value too large for defined data type"},
	{93, "EBADFD", "file descriptor in bad state"},
	{94, "ECHRNG", "channel number out of range"},
	{95, "EL2NSYNC", "level 2 not synchronized"},
	{96, "EL3HLT", "level 3 halted"},
	{97, "EL3RST", "level 3 reset"},
	{98, "ELNRNG", "link number out of range"},
	{99, "EUNATCH", "protocol driver not attached"},
	{100, "ENOCSI", "no CSI structure available"},
	{101, "EL2HLT", "level 2 halted"},
	{102, "EBADE", "invalid exchange"},
	{103, "EBADR", "invalid request descriptor"},
	{104, "EXFULL", "exchange full"},
	{105, "ENOANO", "no anode"},
	{106, "EBADRQC", "invalid request code"},
	{107, "EBADSLT", "invalid slot"},
	{108, "EDEADLOCK", "file locking deadlock error"},
	{109, "EBFONT", "bad font file format"},
	{110, "ELIBEXEC", "cannot exec a shared library directly"},
	{111, "ENODATA", "no data available"},
	{112, "ELIBBAD", "accessing a corrupted shared library"},
	{113, "ENOPKG", "package not installed"},
	{114, "ELIBACC", "can not access a needed shared library"},
	{115, "ENOTUNIQ", "name not unique on network"},
	{116, "ERESTART", "interrupted system call should be restarted"},
	{117, "EUCLEAN", "structure needs cleaning"},
	{118, "ENOTNAM", "not a XENIX named type file"},
	{119, "ENAVAIL", "no XENIX semaphores available"},
	{120, "EISNAM", "is a named type file"},
	{121, "EREMOTEIO", "remote I/O error"},
	{122, "EILSEQ", "invalid or incomplete multibyte or wide character"},
	{123, "ELIBMAX", "attempting to link in too many shared libraries"},
	{124, "ELIBSCN", ".lib section in a.out corrupted"},
	{125, "ENOMEDIUM", "no medium found"},
	{126, "EMEDIUMTYPE", "wrong medium type"},
	{127, "ECANCELED", "operation canceled"},
	{128, "ENOKEY", "required key not available"},
	{129, "EKEYEXPIRED", "key has expired"},
	{130, "EKEYREVOKED", "key has been revoked"},
	{131, "EKEYREJECTED", "key was rejected by service"},
	{132, "EOWNERDEAD", "owner died"},
	{133, "ENOTRECOVERABLE", "state not recoverable"},
	{134, "ERFKILL", "operation not possible due to RF-kill"},
	{135, "EHWPOISON", "memory page has hardware error"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/breakpoint trap"},
	{6, "SIGABRT", "aborted"},
	{7, "SIGEMT", "EMT trap"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus error"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGSYS", "bad system call"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGURG", "urgent I/O condition"},
	{17, "SIGSTOP", "stopped (signal)"},
	{18, "SIGTSTP", "stopped"},
	{19, "SIGCONT", "continued"},
	{20, "SIGCHLD", "child exited"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGIO", "I/O possible"},
	{24, "SIGXCPU", "CPU time limit exceeded"},
	{25, "SIGXFSZ", "file size limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window changed"},
	{29, "SIGLOST", "power failure"},
	{30, "SIGUSR1", "user defined signal 1"},
	{31, "SIGUSR2", "user defined signal 2"},
}
 07070100000E3A000081A4000000000000000000000001645E367C0001231B000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go    // mkerrors.sh -m32
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build 386 && netbsd
// +build 386,netbsd

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -m32 _const.go

package unix

import "syscall"

const (
	AF_APPLETALK                      = 0x10
	AF_ARP                            = 0x1c
	AF_BLUETOOTH                      = 0x1f
	AF_CCITT                          = 0xa
	AF_CHAOS                          = 0x5
	AF_CNT                            = 0x15
	AF_COIP                           = 0x14
	AF_DATAKIT                        = 0x9
	AF_DECnet                         = 0xc
	AF_DLI                            = 0xd
	AF_E164                           = 0x1a
	AF_ECMA                           = 0x8
	AF_HYLINK                         = 0xf
	AF_IEEE80211                      = 0x20
	AF_IMPLINK                        = 0x3
	AF_INET                           = 0x2
	AF_INET6                          = 0x18
	AF_IPX                            = 0x17
	AF_ISDN                           = 0x1a
	AF_ISO                            = 0x7
	AF_LAT                            = 0xe
	AF_LINK                           = 0x12
	AF_LOCAL                          = 0x1
	AF_MAX                            = 0x23
	AF_MPLS                           = 0x21
	AF_NATM                           = 0x1b
	AF_NS                             = 0x6
	AF_OROUTE                         = 0x11
	AF_OSI                            = 0x7
	AF_PUP                            = 0x4
	AF_ROUTE                          = 0x22
	AF_SNA                            = 0xb
	AF_UNIX                           = 0x1
	AF_UNSPEC                         = 0x0
	ARPHRD_ARCNET                     = 0x7
	ARPHRD_ETHER                      = 0x1
	ARPHRD_FRELAY                     = 0xf
	ARPHRD_IEEE1394                   = 0x18
	ARPHRD_IEEE802                    = 0x6
	ARPHRD_STRIP                      = 0x17
	B0                                = 0x0
	B110                              = 0x6e
	B115200                           = 0x1c200
	B1200                             = 0x4b0
	B134                              = 0x86
	B14400                            = 0x3840
	B150                              = 0x96
	B1800                             = 0x708
	B19200                            = 0x4b00
	B200                              = 0xc8
	B230400                           = 0x38400
	B2400                             = 0x960
	B28800                            = 0x7080
	B300                              = 0x12c
	B38400                            = 0x9600
	B460800                           = 0x70800
	B4800                             = 0x12c0
	B50                               = 0x32
	B57600                            = 0xe100
	B600                              = 0x258
	B7200                             = 0x1c20
	B75                               = 0x4b
	B76800                            = 0x12c00
	B921600                           = 0xe1000
	B9600                             = 0x2580
	BIOCFEEDBACK                      = 0x8004427d
	BIOCFLUSH                         = 0x20004268
	BIOCGBLEN                         = 0x40044266
	BIOCGDLT                          = 0x4004426a
	BIOCGDLTLIST                      = 0xc0084277
	BIOCGETIF                         = 0x4090426b
	BIOCGFEEDBACK                     = 0x4004427c
	BIOCGHDRCMPLT                     = 0x40044274
	BIOCGRTIMEOUT                     = 0x400c427b
	BIOCGSEESENT                      = 0x40044278
	BIOCGSTATS                        = 0x4080426f
	BIOCGSTATSOLD                     = 0x4008426f
	BIOCIMMEDIATE                     = 0x80044270
	BIOCPROMISC                       = 0x20004269
	BIOCSBLEN                         = 0xc0044266
	BIOCSDLT                          = 0x80044276
	BIOCSETF                          = 0x80084267
	BIOCSETIF                         = 0x8090426c
	BIOCSFEEDBACK                     = 0x8004427d
	BIOCSHDRCMPLT                     = 0x80044275
	BIOCSRTIMEOUT                     = 0x800c427a
	BIOCSSEESENT                      = 0x80044279
	BIOCSTCPF                         = 0x80084272
	BIOCSUDPF                         = 0x80084273
	BIOCVERSION                       = 0x40044271
	BPF_A                             = 0x10
	BPF_ABS                           = 0x20
	BPF_ADD                           = 0x0
	BPF_ALIGNMENT                     = 0x4
	BPF_ALIGNMENT32                   = 0x4
	BPF_ALU                           = 0x4
	BPF_AND                           = 0x50
	BPF_B                             = 0x10
	BPF_DFLTBUFSIZE                   = 0x100000
	BPF_DIV                           = 0x30
	BPF_H                             = 0x8
	BPF_IMM                           = 0x0
	BPF_IND                           = 0x40
	BPF_JA                            = 0x0
	BPF_JEQ                           = 0x10
	BPF_JGE                           = 0x30
	BPF_JGT                           = 0x20
	BPF_JMP                           = 0x5
	BPF_JSET                          = 0x40
	BPF_K                             = 0x0
	BPF_LD                            = 0x0
	BPF_LDX                           = 0x1
	BPF_LEN                           = 0x80
	BPF_LSH                           = 0x60
	BPF_MAJOR_VERSION                 = 0x1
	BPF_MAXBUFSIZE                    = 0x1000000
	BPF_MAXINSNS                      = 0x200
	BPF_MEM                           = 0x60
	BPF_MEMWORDS                      = 0x10
	BPF_MINBUFSIZE                    = 0x20
	BPF_MINOR_VERSION                 = 0x1
	BPF_MISC                          = 0x7
	BPF_MSH                           = 0xa0
	BPF_MUL                           = 0x20
	BPF_NEG                           = 0x80
	BPF_OR                            = 0x40
	BPF_RELEASE                       = 0x30bb6
	BPF_RET                           = 0x6
	BPF_RSH                           = 0x70
	BPF_ST                            = 0x2
	BPF_STX                           = 0x3
	BPF_SUB                           = 0x10
	BPF_TAX                           = 0x0
	BPF_TXA                           = 0x80
	BPF_W                             = 0x0
	BPF_X                             = 0x8
	BRKINT                            = 0x2
	CFLUSH                            = 0xf
	CLOCAL                            = 0x8000
	CLONE_CSIGNAL                     = 0xff
	CLONE_FILES                       = 0x400
	CLONE_FS                          = 0x200
	CLONE_PID                         = 0x1000
	CLONE_PTRACE                      = 0x2000
	CLONE_SIGHAND                     = 0x800
	CLONE_VFORK                       = 0x4000
	CLONE_VM                          = 0x100
	CPUSTATES                         = 0x5
	CP_IDLE                           = 0x4
	CP_INTR                           = 0x3
	CP_NICE                           = 0x1
	CP_SYS                            = 0x2
	CP_USER                           = 0x0
	CREAD                             = 0x800
	CRTSCTS                           = 0x10000
	CS5                               = 0x0
	CS6                               = 0x100
	CS7                               = 0x200
	CS8                               = 0x300
	CSIZE                             = 0x300
	CSTART                            = 0x11
	CSTATUS                           = 0x14
	CSTOP                             = 0x13
	CSTOPB                            = 0x400
	CSUSP                             = 0x1a
	CTL_HW                            = 0x6
	CTL_KERN                          = 0x1
	CTL_MAXNAME                       = 0xc
	CTL_NET                           = 0x4
	CTL_QUERY                         = -0x2
	DIOCBSFLUSH                       = 0x20006478
	DLT_A429                          = 0xb8
	DLT_A653_ICM                      = 0xb9
	DLT_AIRONET_HEADER                = 0x78
	DLT_AOS                           = 0xde
	DLT_APPLE_IP_OVER_IEEE1394        = 0x8a
	DLT_ARCNET                        = 0x7
	DLT_ARCNET_LINUX                  = 0x81
	DLT_ATM_CLIP                      = 0x13
	DLT_ATM_RFC1483                   = 0xb
	DLT_AURORA                        = 0x7e
	DLT_AX25                          = 0x3
	DLT_AX25_KISS                     = 0xca
	DLT_BACNET_MS_TP                  = 0xa5
	DLT_BLUETOOTH_HCI_H4              = 0xbb
	DLT_BLUETOOTH_HCI_H4_WITH_PHDR    = 0xc9
	DLT_CAN20B                        = 0xbe
	DLT_CAN_SOCKETCAN                 = 0xe3
	DLT_CHAOS                         = 0x5
	DLT_CISCO_IOS                     = 0x76
	DLT_C_HDLC                        = 0x68
	DLT_C_HDLC_WITH_DIR               = 0xcd
	DLT_DECT                          = 0xdd
	DLT_DOCSIS                        = 0x8f
	DLT_ECONET                        = 0x73
	DLT_EN10MB                        = 0x1
	DLT_EN3MB                         = 0x2
	DLT_ENC                           = 0x6d
	DLT_ERF                           = 0xc5
	DLT_ERF_ETH                       = 0xaf
	DLT_ERF_POS                       = 0xb0
	DLT_FC_2                          = 0xe0
	DLT_FC_2_WITH_FRAME_DELIMS        = 0xe1
	DLT_FDDI                          = 0xa
	DLT_FLEXRAY                       = 0xd2
	DLT_FRELAY                        = 0x6b
	DLT_FRELAY_WITH_DIR               = 0xce
	DLT_GCOM_SERIAL                   = 0xad
	DLT_GCOM_T1E1                     = 0xac
	DLT_GPF_F                         = 0xab
	DLT_GPF_T                         = 0xaa
	DLT_GPRS_LLC                      = 0xa9
	DLT_GSMTAP_ABIS                   = 0xda
	DLT_GSMTAP_UM                     = 0xd9
	DLT_HDLC                          = 0x10
	DLT_HHDLC                         = 0x79
	DLT_HIPPI                         = 0xf
	DLT_IBM_SN                        = 0x92
	DLT_IBM_SP                        = 0x91
	DLT_IEEE802                       = 0x6
	DLT_IEEE802_11                    = 0x69
	DLT_IEEE802_11_RADIO              = 0x7f
	DLT_IEEE802_11_RADIO_AVS          = 0xa3
	DLT_IEEE802_15_4                  = 0xc3
	DLT_IEEE802_15_4_LINUX            = 0xbf
	DLT_IEEE802_15_4_NONASK_PHY       = 0xd7
	DLT_IEEE802_16_MAC_CPS            = 0xbc
	DLT_IEEE802_16_MAC_CPS_RADIO      = 0xc1
	DLT_IPMB                          = 0xc7
	DLT_IPMB_LINUX                    = 0xd1
	DLT_IPNET                         = 0xe2
	DLT_IPV4                          = 0xe4
	DLT_IPV6                          = 0xe5
	DLT_IP_OVER_FC                    = 0x7a
	DLT_JUNIPER_ATM1                  = 0x89
	DLT_JUNIPER_ATM2                  = 0x87
	DLT_JUNIPER_CHDLC                 = 0xb5
	DLT_JUNIPER_ES                    = 0x84
	DLT_JUNIPER_ETHER                 = 0xb2
	DLT_JUNIPER_FRELAY                = 0xb4
	DLT_JUNIPER_GGSN                  = 0x85
	DLT_JUNIPER_ISM                   = 0xc2
	DLT_JUNIPER_MFR                   = 0x86
	DLT_JUNIPER_MLFR                  = 0x83
	DLT_JUNIPER_MLPPP                 = 0x82
	DLT_JUNIPER_MONITOR               = 0xa4
	DLT_JUNIPER_PIC_PEER              = 0xae
	DLT_JUNIPER_PPP                   = 0xb3
	DLT_JUNIPER_PPPOE                 = 0xa7
	DLT_JUNIPER_PPPOE_ATM             = 0xa8
	DLT_JUNIPER_SERVICES              = 0x88
	DLT_JUNIPER_ST                    = 0xc8
	DLT_JUNIPER_VP                    = 0xb7
	DLT_LAPB_WITH_DIR                 = 0xcf
	DLT_LAPD                          = 0xcb
	DLT_LIN                           = 0xd4
	DLT_LINUX_EVDEV                   = 0xd8
	DLT_LINUX_IRDA                    = 0x90
	DLT_LINUX_LAPD                    = 0xb1
	DLT_LINUX_SLL                     = 0x71
	DLT_LOOP                          = 0x6c
	DLT_LTALK                         = 0x72
	DLT_MFR                           = 0xb6
	DLT_MOST                          = 0xd3
	DLT_MPLS                          = 0xdb
	DLT_MTP2                          = 0x8c
	DLT_MTP2_WITH_PHDR                = 0x8b
	DLT_MTP3                          = 0x8d
	DLT_NULL                          = 0x0
	DLT_PCI_EXP                       = 0x7d
	DLT_PFLOG                         = 0x75
	DLT_PFSYNC                        = 0x12
	DLT_PPI                           = 0xc0
	DLT_PPP                           = 0x9
	DLT_PPP_BSDOS                     = 0xe
	DLT_PPP_ETHER                     = 0x33
	DLT_PPP_PPPD                      = 0xa6
	DLT_PPP_SERIAL                    = 0x32
	DLT_PPP_WITH_DIR                  = 0xcc
	DLT_PRISM_HEADER                  = 0x77
	DLT_PRONET                        = 0x4
	DLT_RAIF1                         = 0xc6
	DLT_RAW                           = 0xc
	DLT_RAWAF_MASK                    = 0x2240000
	DLT_RIO                           = 0x7c
	DLT_SCCP                          = 0x8e
	DLT_SITA                          = 0xc4
	DLT_SLIP                          = 0x8
	DLT_SLIP_BSDOS                    = 0xd
	DLT_SUNATM                        = 0x7b
	DLT_SYMANTEC_FIREWALL             = 0x63
	DLT_TZSP                          = 0x80
	DLT_USB                           = 0xba
	DLT_USB_LINUX                     = 0xbd
	DLT_USB_LINUX_MMAPPED             = 0xdc
	DLT_WIHART                        = 0xdf
	DLT_X2E_SERIAL                    = 0xd5
	DLT_X2E_XORAYA                    = 0xd6
	DT_BLK                            = 0x6
	DT_CHR                            = 0x2
	DT_DIR                            = 0x4
	DT_FIFO                           = 0x1
	DT_LNK                            = 0xa
	DT_REG                            = 0x8
	DT_SOCK                           = 0xc
	DT_UNKNOWN                        = 0x0
	DT_WHT                            = 0xe
	ECHO                              = 0x8
	ECHOCTL                           = 0x40
	ECHOE                             = 0x2
	ECHOK                             = 0x4
	ECHOKE                            = 0x1
	ECHONL                            = 0x10
	ECHOPRT                           = 0x20
	EMUL_LINUX                        = 0x1
	EMUL_LINUX32                      = 0x5
	EMUL_MAXID                        = 0x6
	EN_SW_CTL_INF                     = 0x1000
	EN_SW_CTL_PREC                    = 0x300
	EN_SW_CTL_ROUND                   = 0xc00
	EN_SW_DATACHAIN                   = 0x80
	EN_SW_DENORM                      = 0x2
	EN_SW_INVOP                       = 0x1
	EN_SW_OVERFLOW                    = 0x8
	EN_SW_PRECLOSS                    = 0x20
	EN_SW_UNDERFLOW                   = 0x10
	EN_SW_ZERODIV                     = 0x4
	ETHERCAP_JUMBO_MTU                = 0x4
	ETHERCAP_VLAN_HWTAGGING           = 0x2
	ETHERCAP_VLAN_MTU                 = 0x1
	ETHERMIN                          = 0x2e
	ETHERMTU                          = 0x5dc
	ETHERMTU_JUMBO                    = 0x2328
	ETHERTYPE_8023                    = 0x4
	ETHERTYPE_AARP                    = 0x80f3
	ETHERTYPE_ACCTON                  = 0x8390
	ETHERTYPE_AEONIC                  = 0x8036
	ETHERTYPE_ALPHA                   = 0x814a
	ETHERTYPE_AMBER                   = 0x6008
	ETHERTYPE_AMOEBA                  = 0x8145
	ETHERTYPE_APOLLO                  = 0x80f7
	ETHERTYPE_APOLLODOMAIN            = 0x8019
	ETHERTYPE_APPLETALK               = 0x809b
	ETHERTYPE_APPLITEK                = 0x80c7
	ETHERTYPE_ARGONAUT                = 0x803a
	ETHERTYPE_ARP                     = 0x806
	ETHERTYPE_AT                      = 0x809b
	ETHERTYPE_ATALK                   = 0x809b
	ETHERTYPE_ATOMIC                  = 0x86df
	ETHERTYPE_ATT                     = 0x8069
	ETHERTYPE_ATTSTANFORD             = 0x8008
	ETHERTYPE_AUTOPHON                = 0x806a
	ETHERTYPE_AXIS                    = 0x8856
	ETHERTYPE_BCLOOP                  = 0x9003
	ETHERTYPE_BOFL                    = 0x8102
	ETHERTYPE_CABLETRON               = 0x7034
	ETHERTYPE_CHAOS                   = 0x804
	ETHERTYPE_COMDESIGN               = 0x806c
	ETHERTYPE_COMPUGRAPHIC            = 0x806d
	ETHERTYPE_COUNTERPOINT            = 0x8062
	ETHERTYPE_CRONUS                  = 0x8004
	ETHERTYPE_CRONUSVLN               = 0x8003
	ETHERTYPE_DCA                     = 0x1234
	ETHERTYPE_DDE                     = 0x807b
	ETHERTYPE_DEBNI                   = 0xaaaa
	ETHERTYPE_DECAM                   = 0x8048
	ETHERTYPE_DECCUST                 = 0x6006
	ETHERTYPE_DECDIAG                 = 0x6005
	ETHERTYPE_DECDNS                  = 0x803c
	ETHERTYPE_DECDTS                  = 0x803e
	ETHERTYPE_DECEXPER                = 0x6000
	ETHERTYPE_DECLAST                 = 0x8041
	ETHERTYPE_DECLTM                  = 0x803f
	ETHERTYPE_DECMUMPS                = 0x6009
	ETHERTYPE_DECNETBIOS              = 0x8040
	ETHERTYPE_DELTACON                = 0x86de
	ETHERTYPE_DIDDLE                  = 0x4321
	ETHERTYPE_DLOG1                   = 0x660
	ETHERTYPE_DLOG2                   = 0x661
	ETHERTYPE_DN                      = 0x6003
	ETHERTYPE_DOGFIGHT                = 0x1989
	ETHERTYPE_DSMD                    = 0x8039
	ETHERTYPE_ECMA                    = 0x803
	ETHERTYPE_ENCRYPT                 = 0x803d
	ETHERTYPE_ES                      = 0x805d
	ETHERTYPE_EXCELAN                 = 0x8010
	ETHERTYPE_EXPERDATA               = 0x8049
	ETHERTYPE_FLIP                    = 0x8146
	ETHERTYPE_FLOWCONTROL             = 0x8808
	ETHERTYPE_FRARP                   = 0x808
	ETHERTYPE_GENDYN                  = 0x8068
	ETHERTYPE_HAYES                   = 0x8130
	ETHERTYPE_HIPPI_FP                = 0x8180
	ETHERTYPE_HITACHI                 = 0x8820
	ETHERTYPE_HP                      = 0x8005
	ETHERTYPE_IEEEPUP                 = 0xa00
	ETHERTYPE_IEEEPUPAT               = 0xa01
	ETHERTYPE_IMLBL                   = 0x4c42
	ETHERTYPE_IMLBLDIAG               = 0x424c
	ETHERTYPE_IP                      = 0x800
	ETHERTYPE_IPAS                    = 0x876c
	ETHERTYPE_IPV6                    = 0x86dd
	ETHERTYPE_IPX                     = 0x8137
	ETHERTYPE_IPXNEW                  = 0x8037
	ETHERTYPE_KALPANA                 = 0x8582
	ETHERTYPE_LANBRIDGE               = 0x8038
	ETHERTYPE_LANPROBE                = 0x8888
	ETHERTYPE_LAT                     = 0x6004
	ETHERTYPE_LBACK                   = 0x9000
	ETHERTYPE_LITTLE                  = 0x8060
	ETHERTYPE_LOGICRAFT               = 0x8148
	ETHERTYPE_LOOPBACK                = 0x9000
	ETHERTYPE_MATRA                   = 0x807a
	ETHERTYPE_MAX                     = 0xffff
	ETHERTYPE_MERIT                   = 0x807c
	ETHERTYPE_MICP                    = 0x873a
	ETHERTYPE_MOPDL                   = 0x6001
	ETHERTYPE_MOPRC                   = 0x6002
	ETHERTYPE_MOTOROLA                = 0x818d
	ETHERTYPE_MPLS                    = 0x8847
	ETHERTYPE_MPLS_MCAST              = 0x8848
	ETHERTYPE_MUMPS                   = 0x813f
	ETHERTYPE_NBPCC                   = 0x3c04
	ETHERTYPE_NBPCLAIM                = 0x3c09
	ETHERTYPE_NBPCLREQ                = 0x3c05
	ETHERTYPE_NBPCLRSP                = 0x3c06
	ETHERTYPE_NBPCREQ                 = 0x3c02
	ETHERTYPE_NBPCRSP                 = 0x3c03
	ETHERTYPE_NBPDG                   = 0x3c07
	ETHERTYPE_NBPDGB                  = 0x3c08
	ETHERTYPE_NBPDLTE                 = 0x3c0a
	ETHERTYPE_NBPRAR                  = 0x3c0c
	ETHERTYPE_NBPRAS                  = 0x3c0b
	ETHERTYPE_NBPRST                  = 0x3c0d
	ETHERTYPE_NBPSCD                  = 0x3c01
	ETHERTYPE_NBPVCD                  = 0x3c00
	ETHERTYPE_NBS                     = 0x802
	ETHERTYPE_NCD                     = 0x8149
	ETHERTYPE_NESTAR                  = 0x8006
	ETHERTYPE_NETBEUI                 = 0x8191
	ETHERTYPE_NOVELL                  = 0x8138
	ETHERTYPE_NS                      = 0x600
	ETHERTYPE_NSAT                    = 0x601
	ETHERTYPE_NSCOMPAT                = 0x807
	ETHERTYPE_NTRAILER                = 0x10
	ETHERTYPE_OS9                     = 0x7007
	ETHERTYPE_OS9NET                  = 0x7009
	ETHERTYPE_PACER                   = 0x80c6
	ETHERTYPE_PAE                     = 0x888e
	ETHERTYPE_PCS                     = 0x4242
	ETHERTYPE_PLANNING                = 0x8044
	ETHERTYPE_PPP                     = 0x880b
	ETHERTYPE_PPPOE                   = 0x8864
	ETHERTYPE_PPPOEDISC               = 0x8863
	ETHERTYPE_PRIMENTS                = 0x7031
	ETHERTYPE_PUP                     = 0x200
	ETHERTYPE_PUPAT                   = 0x200
	ETHERTYPE_RACAL                   = 0x7030
	ETHERTYPE_RATIONAL                = 0x8150
	ETHERTYPE_RAWFR                   = 0x6559
	ETHERTYPE_RCL                     = 0x1995
	ETHERTYPE_RDP                     = 0x8739
	ETHERTYPE_RETIX                   = 0x80f2
	ETHERTYPE_REVARP                  = 0x8035
	ETHERTYPE_SCA                     = 0x6007
	ETHERTYPE_SECTRA                  = 0x86db
	ETHERTYPE_SECUREDATA              = 0x876d
	ETHERTYPE_SGITW                   = 0x817e
	ETHERTYPE_SG_BOUNCE               = 0x8016
	ETHERTYPE_SG_DIAG                 = 0x8013
	ETHERTYPE_SG_NETGAMES             = 0x8014
	ETHERTYPE_SG_RESV                 = 0x8015
	ETHERTYPE_SIMNET                  = 0x5208
	ETHERTYPE_SLOWPROTOCOLS           = 0x8809
	ETHERTYPE_SNA                     = 0x80d5
	ETHERTYPE_SNMP                    = 0x814c
	ETHERTYPE_SONIX                   = 0xfaf5
	ETHERTYPE_SPIDER                  = 0x809f
	ETHERTYPE_SPRITE                  = 0x500
	ETHERTYPE_STP                     = 0x8181
	ETHERTYPE_TALARIS                 = 0x812b
	ETHERTYPE_TALARISMC               = 0x852b
	ETHERTYPE_TCPCOMP                 = 0x876b
	ETHERTYPE_TCPSM                   = 0x9002
	ETHERTYPE_TEC                     = 0x814f
	ETHERTYPE_TIGAN                   = 0x802f
	ETHERTYPE_TRAIL                   = 0x1000
	ETHERTYPE_TRANSETHER              = 0x6558
	ETHERTYPE_TYMSHARE                = 0x802e
	ETHERTYPE_UBBST                   = 0x7005
	ETHERTYPE_UBDEBUG                 = 0x900
	ETHERTYPE_UBDIAGLOOP              = 0x7002
	ETHERTYPE_UBDL                    = 0x7000
	ETHERTYPE_UBNIU                   = 0x7001
	ETHERTYPE_UBNMC                   = 0x7003
	ETHERTYPE_VALID                   = 0x1600
	ETHERTYPE_VARIAN                  = 0x80dd
	ETHERTYPE_VAXELN                  = 0x803b
	ETHERTYPE_VEECO                   = 0x8067
	ETHERTYPE_VEXP                    = 0x805b
	ETHERTYPE_VGLAB                   = 0x8131
	ETHERTYPE_VINES                   = 0xbad
	ETHERTYPE_VINESECHO               = 0xbaf
	ETHERTYPE_VINESLOOP               = 0xbae
	ETHERTYPE_VITAL                   = 0xff00
	ETHERTYPE_VLAN                    = 0x8100
	ETHERTYPE_VLTLMAN                 = 0x8080
	ETHERTYPE_VPROD                   = 0x805c
	ETHERTYPE_VURESERVED              = 0x8147
	ETHERTYPE_WATERLOO                = 0x8130
	ETHERTYPE_WELLFLEET               = 0x8103
	ETHERTYPE_X25                     = 0x805
	ETHERTYPE_X75                     = 0x801
	ETHERTYPE_XNSSM                   = 0x9001
	ETHERTYPE_XTP                     = 0x817d
	ETHER_ADDR_LEN                    = 0x6
	ETHER_CRC_LEN                     = 0x4
	ETHER_CRC_POLY_BE                 = 0x4c11db6
	ETHER_CRC_POLY_LE                 = 0xedb88320
	ETHER_HDR_LEN                     = 0xe
	ETHER_MAX_LEN                     = 0x5ee
	ETHER_MAX_LEN_JUMBO               = 0x233a
	ETHER_MIN_LEN                     = 0x40
	ETHER_PPPOE_ENCAP_LEN             = 0x8
	ETHER_TYPE_LEN                    = 0x2
	ETHER_VLAN_ENCAP_LEN              = 0x4
	EVFILT_AIO                        = 0x2
	EVFILT_PROC                       = 0x4
	EVFILT_READ                       = 0x0
	EVFILT_SIGNAL                     = 0x5
	EVFILT_SYSCOUNT                   = 0x7
	EVFILT_TIMER                      = 0x6
	EVFILT_VNODE                      = 0x3
	EVFILT_WRITE                      = 0x1
	EV_ADD                            = 0x1
	EV_CLEAR                          = 0x20
	EV_DELETE                         = 0x2
	EV_DISABLE                        = 0x8
	EV_ENABLE                         = 0x4
	EV_EOF                            = 0x8000
	EV_ERROR                          = 0x4000
	EV_FLAG1                          = 0x2000
	EV_ONESHOT                        = 0x10
	EV_SYSFLAGS                       = 0xf000
	EXTA                              = 0x4b00
	EXTATTR_CMD_START                 = 0x1
	EXTATTR_CMD_STOP                  = 0x2
	EXTATTR_NAMESPACE_SYSTEM          = 0x2
	EXTATTR_NAMESPACE_USER            = 0x1
	EXTB                              = 0x9600
	EXTPROC                           = 0x800
	FD_CLOEXEC                        = 0x1
	FD_SETSIZE                        = 0x100
	FLUSHO                            = 0x800000
	F_CLOSEM                          = 0xa
	F_DUPFD                           = 0x0
	F_DUPFD_CLOEXEC                   = 0xc
	F_FSCTL                           = -0x80000000
	F_FSDIRMASK                       = 0x70000000
	F_FSIN                            = 0x10000000
	F_FSINOUT                         = 0x30000000
	F_FSOUT                           = 0x20000000
	F_FSPRIV                          = 0x8000
	F_FSVOID                          = 0x40000000
	F_GETFD                           = 0x1
	F_GETFL                           = 0x3
	F_GETLK                           = 0x7
	F_GETNOSIGPIPE                    = 0xd
	F_GETOWN                          = 0x5
	F_MAXFD                           = 0xb
	F_OK                              = 0x0
	F_PARAM_MASK                      = 0xfff
	F_PARAM_MAX                       = 0xfff
	F_RDLCK                           = 0x1
	F_SETFD                           = 0x2
	F_SETFL                           = 0x4
	F_SETLK                           = 0x8
	F_SETLKW                          = 0x9
	F_SETNOSIGPIPE                    = 0xe
	F_SETOWN                          = 0x6
	F_UNLCK                           = 0x2
	F_WRLCK                           = 0x3
	HUPCL                             = 0x4000
	HW_MACHINE                        = 0x1
	ICANON                            = 0x100
	ICMP6_FILTER                      = 0x12
	ICRNL                             = 0x100
	IEXTEN                            = 0x400
	IFAN_ARRIVAL                      = 0x0
	IFAN_DEPARTURE                    = 0x1
	IFA_ROUTE                         = 0x1
	IFF_ALLMULTI                      = 0x200
	IFF_BROADCAST                     = 0x2
	IFF_CANTCHANGE                    = 0x8f52
	IFF_DEBUG                         = 0x4
	IFF_LINK0                         = 0x1000
	IFF_LINK1                         = 0x2000
	IFF_LINK2                         = 0x4000
	IFF_LOOPBACK                      = 0x8
	IFF_MULTICAST                     = 0x8000
	IFF_NOARP                         = 0x80
	IFF_NOTRAILERS                    = 0x20
	IFF_OACTIVE                       = 0x400
	IFF_POINTOPOINT                   = 0x10
	IFF_PROMISC                       = 0x100
	IFF_RUNNING                       = 0x40
	IFF_SIMPLEX                       = 0x800
	IFF_UP                            = 0x1
	IFNAMSIZ                          = 0x10
	IFT_1822                          = 0x2
	IFT_A12MPPSWITCH                  = 0x82
	IFT_AAL2                          = 0xbb
	IFT_AAL5                          = 0x31
	IFT_ADSL                          = 0x5e
	IFT_AFLANE8023                    = 0x3b
	IFT_AFLANE8025                    = 0x3c
	IFT_ARAP                          = 0x58
	IFT_ARCNET                        = 0x23
	IFT_ARCNETPLUS                    = 0x24
	IFT_ASYNC                         = 0x54
	IFT_ATM                           = 0x25
	IFT_ATMDXI                        = 0x69
	IFT_ATMFUNI                       = 0x6a
	IFT_ATMIMA                        = 0x6b
	IFT_ATMLOGICAL                    = 0x50
	IFT_ATMRADIO                      = 0xbd
	IFT_ATMSUBINTERFACE               = 0x86
	IFT_ATMVCIENDPT                   = 0xc2
	IFT_ATMVIRTUAL                    = 0x95
	IFT_BGPPOLICYACCOUNTING           = 0xa2
	IFT_BRIDGE                        = 0xd1
	IFT_BSC                           = 0x53
	IFT_CARP                          = 0xf8
	IFT_CCTEMUL                       = 0x3d
	IFT_CEPT                          = 0x13
	IFT_CES                           = 0x85
	IFT_CHANNEL                       = 0x46
	IFT_CNR                           = 0x55
	IFT_COFFEE                        = 0x84
	IFT_COMPOSITELINK                 = 0x9b
	IFT_DCN                           = 0x8d
	IFT_DIGITALPOWERLINE              = 0x8a
	IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba
	IFT_DLSW                          = 0x4a
	IFT_DOCSCABLEDOWNSTREAM           = 0x80
	IFT_DOCSCABLEMACLAYER             = 0x7f
	IFT_DOCSCABLEUPSTREAM             = 0x81
	IFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd
	IFT_DS0                           = 0x51
	IFT_DS0BUNDLE                     = 0x52
	IFT_DS1FDL                        = 0xaa
	IFT_DS3                           = 0x1e
	IFT_DTM                           = 0x8c
	IFT_DVBASILN                      = 0xac
	IFT_DVBASIOUT                     = 0xad
	IFT_DVBRCCDOWNSTREAM              = 0x93
	IFT_DVBRCCMACLAYER                = 0x92
	IFT_DVBRCCUPSTREAM                = 0x94
	IFT_ECONET                        = 0xce
	IFT_EON                           = 0x19
	IFT_EPLRS                         = 0x57
	IFT_ESCON                         = 0x49
	IFT_ETHER                         = 0x6
	IFT_FAITH                         = 0xf2
	IFT_FAST                          = 0x7d
	IFT_FASTETHER                     = 0x3e
	IFT_FASTETHERFX                   = 0x45
	IFT_FDDI                          = 0xf
	IFT_FIBRECHANNEL                  = 0x38
	IFT_FRAMERELAYINTERCONNECT        = 0x3a
	IFT_FRAMERELAYMPI                 = 0x5c
	IFT_FRDLCIENDPT                   = 0xc1
	IFT_FRELAY                        = 0x20
	IFT_FRELAYDCE                     = 0x2c
	IFT_FRF16MFRBUNDLE                = 0xa3
	IFT_FRFORWARD                     = 0x9e
	IFT_G703AT2MB                     = 0x43
	IFT_G703AT64K                     = 0x42
	IFT_GIF                           = 0xf0
	IFT_GIGABITETHERNET               = 0x75
	IFT_GR303IDT                      = 0xb2
	IFT_GR303RDT                      = 0xb1
	IFT_H323GATEKEEPER                = 0xa4
	IFT_H323PROXY                     = 0xa5
	IFT_HDH1822                       = 0x3
	IFT_HDLC                          = 0x76
	IFT_HDSL2                         = 0xa8
	IFT_HIPERLAN2                     = 0xb7
	IFT_HIPPI                         = 0x2f
	IFT_HIPPIINTERFACE                = 0x39
	IFT_HOSTPAD                       = 0x5a
	IFT_HSSI                          = 0x2e
	IFT_HY                            = 0xe
	IFT_IBM370PARCHAN                 = 0x48
	IFT_IDSL                          = 0x9a
	IFT_IEEE1394                      = 0x90
	IFT_IEEE80211                     = 0x47
	IFT_IEEE80212                     = 0x37
	IFT_IEEE8023ADLAG                 = 0xa1
	IFT_IFGSN                         = 0x91
	IFT_IMT                           = 0xbe
	IFT_INFINIBAND                    = 0xc7
	IFT_INTERLEAVE                    = 0x7c
	IFT_IP                            = 0x7e
	IFT_IPFORWARD                     = 0x8e
	IFT_IPOVERATM                     = 0x72
	IFT_IPOVERCDLC                    = 0x6d
	IFT_IPOVERCLAW                    = 0x6e
	IFT_IPSWITCH                      = 0x4e
	IFT_ISDN                          = 0x3f
	IFT_ISDNBASIC                     = 0x14
	IFT_ISDNPRIMARY                   = 0x15
	IFT_ISDNS                         = 0x4b
	IFT_ISDNU                         = 0x4c
	IFT_ISO88022LLC                   = 0x29
	IFT_ISO88023                      = 0x7
	IFT_ISO88024                      = 0x8
	IFT_ISO88025                      = 0x9
	IFT_ISO88025CRFPINT               = 0x62
	IFT_ISO88025DTR                   = 0x56
	IFT_ISO88025FIBER                 = 0x73
	IFT_ISO88026                      = 0xa
	IFT_ISUP                          = 0xb3
	IFT_L2VLAN                        = 0x87
	IFT_L3IPVLAN                      = 0x88
	IFT_L3IPXVLAN                     = 0x89
	IFT_LAPB                          = 0x10
	IFT_LAPD                          = 0x4d
	IFT_LAPF                          = 0x77
	IFT_LINEGROUP                     = 0xd2
	IFT_LOCALTALK                     = 0x2a
	IFT_LOOP                          = 0x18
	IFT_MEDIAMAILOVERIP               = 0x8b
	IFT_MFSIGLINK                     = 0xa7
	IFT_MIOX25                        = 0x26
	IFT_MODEM                         = 0x30
	IFT_MPC                           = 0x71
	IFT_MPLS                          = 0xa6
	IFT_MPLSTUNNEL                    = 0x96
	IFT_MSDSL                         = 0x8f
	IFT_MVL                           = 0xbf
	IFT_MYRINET                       = 0x63
	IFT_NFAS                          = 0xaf
	IFT_NSIP                          = 0x1b
	IFT_OPTICALCHANNEL                = 0xc3
	IFT_OPTICALTRANSPORT              = 0xc4
	IFT_OTHER                         = 0x1
	IFT_P10                           = 0xc
	IFT_P80                           = 0xd
	IFT_PARA                          = 0x22
	IFT_PFLOG                         = 0xf5
	IFT_PFSYNC                        = 0xf6
	IFT_PLC                           = 0xae
	IFT_PON155                        = 0xcf
	IFT_PON622                        = 0xd0
	IFT_POS                           = 0xab
	IFT_PPP                           = 0x17
	IFT_PPPMULTILINKBUNDLE            = 0x6c
	IFT_PROPATM                       = 0xc5
	IFT_PROPBWAP2MP                   = 0xb8
	IFT_PROPCNLS                      = 0x59
	IFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5
	IFT_PROPDOCSWIRELESSMACLAYER      = 0xb4
	IFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6
	IFT_PROPMUX                       = 0x36
	IFT_PROPVIRTUAL                   = 0x35
	IFT_PROPWIRELESSP2P               = 0x9d
	IFT_PTPSERIAL                     = 0x16
	IFT_PVC                           = 0xf1
	IFT_Q2931                         = 0xc9
	IFT_QLLC                          = 0x44
	IFT_RADIOMAC                      = 0xbc
	IFT_RADSL                         = 0x5f
	IFT_REACHDSL                      = 0xc0
	IFT_RFC1483                       = 0x9f
	IFT_RS232                         = 0x21
	IFT_RSRB                          = 0x4f
	IFT_SDLC                          = 0x11
	IFT_SDSL                          = 0x60
	IFT_SHDSL                         = 0xa9
	IFT_SIP                           = 0x1f
	IFT_SIPSIG                        = 0xcc
	IFT_SIPTG                         = 0xcb
	IFT_SLIP                          = 0x1c
	IFT_SMDSDXI                       = 0x2b
	IFT_SMDSICIP                      = 0x34
	IFT_SONET                         = 0x27
	IFT_SONETOVERHEADCHANNEL          = 0xb9
	IFT_SONETPATH                     = 0x32
	IFT_SONETVT                       = 0x33
	IFT_SRP                           = 0x97
	IFT_SS7SIGLINK                    = 0x9c
	IFT_STACKTOSTACK                  = 0x6f
	IFT_STARLAN                       = 0xb
	IFT_STF                           = 0xd7
	IFT_T1                            = 0x12
	IFT_TDLC                          = 0x74
	IFT_TELINK                        = 0xc8
	IFT_TERMPAD                       = 0x5b
	IFT_TR008                         = 0xb0
	IFT_TRANSPHDLC                    = 0x7b
	IFT_TUNNEL                        = 0x83
	IFT_ULTRA                         = 0x1d
	IFT_USB                           = 0xa0
	IFT_V11                           = 0x40
	IFT_V35                           = 0x2d
	IFT_V36                           = 0x41
	IFT_V37                           = 0x78
	IFT_VDSL                          = 0x61
	IFT_VIRTUALIPADDRESS              = 0x70
	IFT_VIRTUALTG                     = 0xca
	IFT_VOICEDID                      = 0xd5
	IFT_VOICEEM                       = 0x64
	IFT_VOICEEMFGD                    = 0xd3
	IFT_VOICEENCAP                    = 0x67
	IFT_VOICEFGDEANA                  = 0xd4
	IFT_VOICEFXO                      = 0x65
	IFT_VOICEFXS                      = 0x66
	IFT_VOICEOVERATM                  = 0x98
	IFT_VOICEOVERCABLE                = 0xc6
	IFT_VOICEOVERFRAMERELAY           = 0x99
	IFT_VOICEOVERIP                   = 0x68
	IFT_X213                          = 0x5d
	IFT_X25                           = 0x5
	IFT_X25DDN                        = 0x4
	IFT_X25HUNTGROUP                  = 0x7a
	IFT_X25MLP                        = 0x79
	IFT_X25PLE                        = 0x28
	IFT_XETHER                        = 0x1a
	IGNBRK                            = 0x1
	IGNCR                             = 0x80
	IGNPAR                            = 0x4
	IMAXBEL                           = 0x2000
	INLCR                             = 0x40
	INPCK                             = 0x10
	IN_CLASSA_HOST                    = 0xffffff
	IN_CLASSA_MAX                     = 0x80
	IN_CLASSA_NET                     = 0xff000000
	IN_CLASSA_NSHIFT                  = 0x18
	IN_CLASSB_HOST                    = 0xffff
	IN_CLASSB_MAX                     = 0x10000
	IN_CLASSB_NET                     = 0xffff0000
	IN_CLASSB_NSHIFT                  = 0x10
	IN_CLASSC_HOST                    = 0xff
	IN_CLASSC_NET                     = 0xffffff00
	IN_CLASSC_NSHIFT                  = 0x8
	IN_CLASSD_HOST                    = 0xfffffff
	IN_CLASSD_NET                     = 0xf0000000
	IN_CLASSD_NSHIFT                  = 0x1c
	IN_LOOPBACKNET                    = 0x7f
	IPPROTO_AH                        = 0x33
	IPPROTO_CARP                      = 0x70
	IPPROTO_DONE                      = 0x101
	IPPROTO_DSTOPTS                   = 0x3c
	IPPROTO_EGP                       = 0x8
	IPPROTO_ENCAP                     = 0x62
	IPPROTO_EON                       = 0x50
	IPPROTO_ESP                       = 0x32
	IPPROTO_ETHERIP                   = 0x61
	IPPROTO_FRAGMENT                  = 0x2c
	IPPROTO_GGP                       = 0x3
	IPPROTO_GRE                       = 0x2f
	IPPROTO_HOPOPTS                   = 0x0
	IPPROTO_ICMP                      = 0x1
	IPPROTO_ICMPV6                    = 0x3a
	IPPROTO_IDP                       = 0x16
	IPPROTO_IGMP                      = 0x2
	IPPROTO_IP                        = 0x0
	IPPROTO_IPCOMP                    = 0x6c
	IPPROTO_IPIP                      = 0x4
	IPPROTO_IPV4                      = 0x4
	IPPROTO_IPV6                      = 0x29
	IPPROTO_IPV6_ICMP                 = 0x3a
	IPPROTO_MAX                       = 0x100
	IPPROTO_MAXID                     = 0x34
	IPPROTO_MOBILE                    = 0x37
	IPPROTO_NONE                      = 0x3b
	IPPROTO_PFSYNC                    = 0xf0
	IPPROTO_PIM                       = 0x67
	IPPROTO_PUP                       = 0xc
	IPPROTO_RAW                       = 0xff
	IPPROTO_ROUTING                   = 0x2b
	IPPROTO_RSVP                      = 0x2e
	IPPROTO_TCP                       = 0x6
	IPPROTO_TP                        = 0x1d
	IPPROTO_UDP                       = 0x11
	IPPROTO_VRRP                      = 0x70
	IPV6_CHECKSUM                     = 0x1a
	IPV6_DEFAULT_MULTICAST_HOPS       = 0x1
	IPV6_DEFAULT_MULTICAST_LOOP       = 0x1
	IPV6_DEFHLIM                      = 0x40
	IPV6_DONTFRAG                     = 0x3e
	IPV6_DSTOPTS                      = 0x32
	IPV6_FAITH                        = 0x1d
	IPV6_FLOWINFO_MASK                = 0xffffff0f
	IPV6_FLOWLABEL_MASK               = 0xffff0f00
	IPV6_FRAGTTL                      = 0x78
	IPV6_HLIMDEC                      = 0x1
	IPV6_HOPLIMIT                     = 0x2f
	IPV6_HOPOPTS                      = 0x31
	IPV6_IPSEC_POLICY                 = 0x1c
	IPV6_JOIN_GROUP                   = 0xc
	IPV6_LEAVE_GROUP                  = 0xd
	IPV6_MAXHLIM                      = 0xff
	IPV6_MAXPACKET                    = 0xffff
	IPV6_MMTU                         = 0x500
	IPV6_MULTICAST_HOPS               = 0xa
	IPV6_MULTICAST_IF                 = 0x9
	IPV6_MULTICAST_LOOP               = 0xb
	IPV6_NEXTHOP                      = 0x30
	IPV6_PATHMTU                      = 0x2c
	IPV6_PKTINFO                      = 0x2e
	IPV6_PORTRANGE                    = 0xe
	IPV6_PORTRANGE_DEFAULT            = 0x0
	IPV6_PORTRANGE_HIGH               = 0x1
	IPV6_PORTRANGE_LOW                = 0x2
	IPV6_RECVDSTOPTS                  = 0x28
	IPV6_RECVHOPLIMIT                 = 0x25
	IPV6_RECVHOPOPTS                  = 0x27
	IPV6_RECVPATHMTU                  = 0x2b
	IPV6_RECVPKTINFO                  = 0x24
	IPV6_RECVRTHDR                    = 0x26
	IPV6_RECVTCLASS                   = 0x39
	IPV6_RTHDR                        = 0x33
	IPV6_RTHDRDSTOPTS                 = 0x23
	IPV6_RTHDR_LOOSE                  = 0x0
	IPV6_RTHDR_STRICT                 = 0x1
	IPV6_RTHDR_TYPE_0                 = 0x0
	IPV6_SOCKOPT_RESERVED1            = 0x3
	IPV6_TCLASS                       = 0x3d
	IPV6_UNICAST_HOPS                 = 0x4
	IPV6_USE_MIN_MTU                  = 0x2a
	IPV6_V6ONLY                       = 0x1b
	IPV6_VERSION                      = 0x60
	IPV6_VERSION_MASK                 = 0xf0
	IP_ADD_MEMBERSHIP                 = 0xc
	IP_DEFAULT_MULTICAST_LOOP         = 0x1
	IP_DEFAULT_MULTICAST_TTL          = 0x1
	IP_DF                             = 0x4000
	IP_DROP_MEMBERSHIP                = 0xd
	IP_EF                             = 0x8000
	IP_ERRORMTU                       = 0x15
	IP_HDRINCL                        = 0x2
	IP_IPSEC_POLICY                   = 0x16
	IP_MAXPACKET                      = 0xffff
	IP_MAX_MEMBERSHIPS                = 0x14
	IP_MF                             = 0x2000
	IP_MINFRAGSIZE                    = 0x45
	IP_MINTTL                         = 0x18
	IP_MSS                            = 0x240
	IP_MULTICAST_IF                   = 0x9
	IP_MULTICAST_LOOP                 = 0xb
	IP_MULTICAST_TTL                  = 0xa
	IP_OFFMASK                        = 0x1fff
	IP_OPTIONS                        = 0x1
	IP_PORTRANGE                      = 0x13
	IP_PORTRANGE_DEFAULT              = 0x0
	IP_PORTRANGE_HIGH                 = 0x1
	IP_PORTRANGE_LOW                  = 0x2
	IP_RECVDSTADDR                    = 0x7
	IP_RECVIF                         = 0x14
	IP_RECVOPTS                       = 0x5
	IP_RECVRETOPTS                    = 0x6
	IP_RECVTTL                        = 0x17
	IP_RETOPTS                        = 0x8
	IP_RF                             = 0x8000
	IP_TOS                            = 0x3
	IP_TTL                            = 0x4
	ISIG                              = 0x80
	ISTRIP                            = 0x20
	IXANY                             = 0x800
	IXOFF                             = 0x400
	IXON                              = 0x200
	KERN_HOSTNAME                     = 0xa
	KERN_OSRELEASE                    = 0x2
	KERN_OSTYPE                       = 0x1
	KERN_VERSION                      = 0x4
	LOCK_EX                           = 0x2
	LOCK_NB                           = 0x4
	LOCK_SH                           = 0x1
	LOCK_UN                           = 0x8
	MADV_DONTNEED                     = 0x4
	MADV_FREE                         = 0x6
	MADV_NORMAL                       = 0x0
	MADV_RANDOM                       = 0x1
	MADV_SEQUENTIAL                   = 0x2
	MADV_SPACEAVAIL                   = 0x5
	MADV_WILLNEED                     = 0x3
	MAP_ALIGNMENT_16MB                = 0x18000000
	MAP_ALIGNMENT_1TB                 = 0x28000000
	MAP_ALIGNMENT_256TB               = 0x30000000
	MAP_ALIGNMENT_4GB                 = 0x20000000
	MAP_ALIGNMENT_64KB                = 0x10000000
	MAP_ALIGNMENT_64PB                = 0x38000000
	MAP_ALIGNMENT_MASK                = -0x1000000
	MAP_ALIGNMENT_SHIFT               = 0x18
	MAP_ANON                          = 0x1000
	MAP_FILE                          = 0x0
	MAP_FIXED                         = 0x10
	MAP_HASSEMAPHORE                  = 0x200
	MAP_INHERIT                       = 0x80
	MAP_INHERIT_COPY                  = 0x1
	MAP_INHERIT_DEFAULT               = 0x1
	MAP_INHERIT_DONATE_COPY           = 0x3
	MAP_INHERIT_NONE                  = 0x2
	MAP_INHERIT_SHARE                 = 0x0
	MAP_NORESERVE                     = 0x40
	MAP_PRIVATE                       = 0x2
	MAP_RENAME                        = 0x20
	MAP_SHARED                        = 0x1
	MAP_STACK                         = 0x2000
	MAP_TRYFIXED                      = 0x400
	MAP_WIRED                         = 0x800
	MCL_CURRENT                       = 0x1
	MCL_FUTURE                        = 0x2
	MNT_ASYNC                         = 0x40
	MNT_BASIC_FLAGS                   = 0xe782807f
	MNT_DEFEXPORTED                   = 0x200
	MNT_DISCARD                       = 0x800000
	MNT_EXKERB                        = 0x800
	MNT_EXNORESPORT                   = 0x8000000
	MNT_EXPORTANON                    = 0x400
	MNT_EXPORTED                      = 0x100
	MNT_EXPUBLIC                      = 0x10000000
	MNT_EXRDONLY                      = 0x80
	MNT_EXTATTR                       = 0x1000000
	MNT_FORCE                         = 0x80000
	MNT_GETARGS                       = 0x400000
	MNT_IGNORE                        = 0x100000
	MNT_LAZY                          = 0x3
	MNT_LOCAL                         = 0x1000
	MNT_LOG                           = 0x2000000
	MNT_NOATIME                       = 0x4000000
	MNT_NOCOREDUMP                    = 0x8000
	MNT_NODEV                         = 0x10
	MNT_NODEVMTIME                    = 0x40000000
	MNT_NOEXEC                        = 0x4
	MNT_NOSUID                        = 0x8
	MNT_NOWAIT                        = 0x2
	MNT_OP_FLAGS                      = 0x4d0000
	MNT_QUOTA                         = 0x2000
	MNT_RDONLY                        = 0x1
	MNT_RELATIME                      = 0x20000
	MNT_RELOAD                        = 0x40000
	MNT_ROOTFS                        = 0x4000
	MNT_SOFTDEP                       = 0x80000000
	MNT_SYMPERM                       = 0x20000000
	MNT_SYNCHRONOUS                   = 0x2
	MNT_UNION                         = 0x20
	MNT_UPDATE                        = 0x10000
	MNT_VISFLAGMASK                   = 0xff90ffff
	MNT_WAIT                          = 0x1
	MSG_BCAST                         = 0x100
	MSG_CMSG_CLOEXEC                  = 0x800
	MSG_CONTROLMBUF                   = 0x2000000
	MSG_CTRUNC                        = 0x20
	MSG_DONTROUTE                     = 0x4
	MSG_DONTWAIT                      = 0x80
	MSG_EOR                           = 0x8
	MSG_IOVUSRSPACE                   = 0x4000000
	MSG_LENUSRSPACE                   = 0x8000000
	MSG_MCAST                         = 0x200
	MSG_NAMEMBUF                      = 0x1000000
	MSG_NBIO                          = 0x1000
	MSG_NOSIGNAL                      = 0x400
	MSG_OOB                           = 0x1
	MSG_PEEK                          = 0x2
	MSG_TRUNC                         = 0x10
	MSG_USERFLAGS                     = 0xffffff
	MSG_WAITALL                       = 0x40
	MS_ASYNC                          = 0x1
	MS_INVALIDATE                     = 0x2
	MS_SYNC                           = 0x4
	NAME_MAX                          = 0x1ff
	NET_RT_DUMP                       = 0x1
	NET_RT_FLAGS                      = 0x2
	NET_RT_IFLIST                     = 0x5
	NET_RT_MAXID                      = 0x6
	NET_RT_OIFLIST                    = 0x4
	NET_RT_OOIFLIST                   = 0x3
	NFDBITS                           = 0x20
	NOFLSH                            = 0x80000000
	NOTE_ATTRIB                       = 0x8
	NOTE_CHILD                        = 0x4
	NOTE_DELETE                       = 0x1
	NOTE_EXEC                         = 0x20000000
	NOTE_EXIT                         = 0x80000000
	NOTE_EXTEND                       = 0x4
	NOTE_FORK                         = 0x40000000
	NOTE_LINK                         = 0x10
	NOTE_LOWAT                        = 0x1
	NOTE_PCTRLMASK                    = 0xf0000000
	NOTE_PDATAMASK                    = 0xfffff
	NOTE_RENAME                       = 0x20
	NOTE_REVOKE                       = 0x40
	NOTE_TRACK                        = 0x1
	NOTE_TRACKERR                     = 0x2
	NOTE_WRITE                        = 0x2
	OCRNL                             = 0x10
	OFIOGETBMAP                       = 0xc004667a
	ONLCR                             = 0x2
	ONLRET                            = 0x40
	ONOCR                             = 0x20
	ONOEOT                            = 0x8
	OPOST                             = 0x1
	O_ACCMODE                         = 0x3
	O_ALT_IO                          = 0x40000
	O_APPEND                          = 0x8
	O_ASYNC                           = 0x40
	O_CLOEXEC                         = 0x400000
	O_CREAT                           = 0x200
	O_DIRECT                          = 0x80000
	O_DIRECTORY                       = 0x200000
	O_DSYNC                           = 0x10000
	O_EXCL                            = 0x800
	O_EXLOCK                          = 0x20
	O_FSYNC                           = 0x80
	O_NDELAY                          = 0x4
	O_NOCTTY                          = 0x8000
	O_NOFOLLOW                        = 0x100
	O_NONBLOCK                        = 0x4
	O_NOSIGPIPE                       = 0x1000000
	O_RDONLY                          = 0x0
	O_RDWR                            = 0x2
	O_RSYNC                           = 0x20000
	O_SHLOCK                          = 0x10
	O_SYNC                            = 0x80
	O_TRUNC                           = 0x400
	O_WRONLY                          = 0x1
	PARENB                            = 0x1000
	PARMRK                            = 0x8
	PARODD                            = 0x2000
	PENDIN                            = 0x20000000
	PRIO_PGRP                         = 0x1
	PRIO_PROCESS                      = 0x0
	PRIO_USER                         = 0x2
	PRI_IOFLUSH                       = 0x7c
	PROT_EXEC                         = 0x4
	PROT_NONE                         = 0x0
	PROT_READ                         = 0x1
	PROT_WRITE                        = 0x2
	RLIMIT_AS                         = 0xa
	RLIMIT_CORE                       = 0x4
	RLIMIT_CPU                        = 0x0
	RLIMIT_DATA                       = 0x2
	RLIMIT_FSIZE                      = 0x1
	RLIMIT_MEMLOCK                    = 0x6
	RLIMIT_NOFILE                     = 0x8
	RLIMIT_NPROC                      = 0x7
	RLIMIT_RSS                        = 0x5
	RLIMIT_STACK                      = 0x3
	RLIM_INFINITY                     = 0x7fffffffffffffff
	RTAX_AUTHOR                       = 0x6
	RTAX_BRD                          = 0x7
	RTAX_DST                          = 0x0
	RTAX_GATEWAY                      = 0x1
	RTAX_GENMASK                      = 0x3
	RTAX_IFA                          = 0x5
	RTAX_IFP                          = 0x4
	RTAX_MAX                          = 0x9
	RTAX_NETMASK                      = 0x2
	RTAX_TAG                          = 0x8
	RTA_AUTHOR                        = 0x40
	RTA_BRD                           = 0x80
	RTA_DST                           = 0x1
	RTA_GATEWAY                       = 0x2
	RTA_GENMASK                       = 0x8
	RTA_IFA                           = 0x20
	RTA_IFP                           = 0x10
	RTA_NETMASK                       = 0x4
	RTA_TAG                           = 0x100
	RTF_ANNOUNCE                      = 0x20000
	RTF_BLACKHOLE                     = 0x1000
	RTF_CLONED                        = 0x2000
	RTF_CLONING                       = 0x100
	RTF_DONE                          = 0x40
	RTF_DYNAMIC                       = 0x10
	RTF_GATEWAY                       = 0x2
	RTF_HOST                          = 0x4
	RTF_LLINFO                        = 0x400
	RTF_MASK                          = 0x80
	RTF_MODIFIED                      = 0x20
	RTF_PROTO1                        = 0x8000
	RTF_PROTO2                        = 0x4000
	RTF_REJECT                        = 0x8
	RTF_SRC                           = 0x10000
	RTF_STATIC                        = 0x800
	RTF_UP                            = 0x1
	RTF_XRESOLVE                      = 0x200
	RTM_ADD                           = 0x1
	RTM_CHANGE                        = 0x3
	RTM_CHGADDR                       = 0x15
	RTM_DELADDR                       = 0xd
	RTM_DELETE                        = 0x2
	RTM_GET                           = 0x4
	RTM_IEEE80211                     = 0x11
	RTM_IFANNOUNCE                    = 0x10
	RTM_IFINFO                        = 0x14
	RTM_LLINFO_UPD                    = 0x13
	RTM_LOCK                          = 0x8
	RTM_LOSING                        = 0x5
	RTM_MISS                          = 0x7
	RTM_NEWADDR                       = 0xc
	RTM_OIFINFO                       = 0xf
	RTM_OLDADD                        = 0x9
	RTM_OLDDEL                        = 0xa
	RTM_OOIFINFO                      = 0xe
	RTM_REDIRECT                      = 0x6
	RTM_RESOLVE                       = 0xb
	RTM_RTTUNIT                       = 0xf4240
	RTM_SETGATE                       = 0x12
	RTM_VERSION                       = 0x4
	RTV_EXPIRE                        = 0x4
	RTV_HOPCOUNT                      = 0x2
	RTV_MTU                           = 0x1
	RTV_RPIPE                         = 0x8
	RTV_RTT                           = 0x40
	RTV_RTTVAR                        = 0x80
	RTV_SPIPE                         = 0x10
	RTV_SSTHRESH                      = 0x20
	RUSAGE_CHILDREN                   = -0x1
	RUSAGE_SELF                       = 0x0
	SCM_CREDS                         = 0x4
	SCM_RIGHTS                        = 0x1
	SCM_TIMESTAMP                     = 0x8
	SHUT_RD                           = 0x0
	SHUT_RDWR                         = 0x2
	SHUT_WR                           = 0x1
	SIOCADDMULTI                      = 0x80906931
	SIOCADDRT                         = 0x8030720a
	SIOCAIFADDR                       = 0x8040691a
	SIOCALIFADDR                      = 0x8118691c
	SIOCATMARK                        = 0x40047307
	SIOCDELMULTI                      = 0x80906932
	SIOCDELRT                         = 0x8030720b
	SIOCDIFADDR                       = 0x80906919
	SIOCDIFPHYADDR                    = 0x80906949
	SIOCDLIFADDR                      = 0x8118691e
	SIOCGDRVSPEC                      = 0xc01c697b
	SIOCGETPFSYNC                     = 0xc09069f8
	SIOCGETSGCNT                      = 0xc0147534
	SIOCGETVIFCNT                     = 0xc0147533
	SIOCGHIWAT                        = 0x40047301
	SIOCGIFADDR                       = 0xc0906921
	SIOCGIFADDRPREF                   = 0xc0946920
	SIOCGIFALIAS                      = 0xc040691b
	SIOCGIFBRDADDR                    = 0xc0906923
	SIOCGIFCAP                        = 0xc0206976
	SIOCGIFCONF                       = 0xc0086926
	SIOCGIFDATA                       = 0xc0946985
	SIOCGIFDLT                        = 0xc0906977
	SIOCGIFDSTADDR                    = 0xc0906922
	SIOCGIFFLAGS                      = 0xc0906911
	SIOCGIFGENERIC                    = 0xc090693a
	SIOCGIFMEDIA                      = 0xc0286936
	SIOCGIFMETRIC                     = 0xc0906917
	SIOCGIFMTU                        = 0xc090697e
	SIOCGIFNETMASK                    = 0xc0906925
	SIOCGIFPDSTADDR                   = 0xc0906948
	SIOCGIFPSRCADDR                   = 0xc0906947
	SIOCGLIFADDR                      = 0xc118691d
	SIOCGLIFPHYADDR                   = 0xc118694b
	SIOCGLINKSTR                      = 0xc01c6987
	SIOCGLOWAT                        = 0x40047303
	SIOCGPGRP                         = 0x40047309
	SIOCGVH                           = 0xc0906983
	SIOCIFCREATE                      = 0x8090697a
	SIOCIFDESTROY                     = 0x80906979
	SIOCIFGCLONERS                    = 0xc00c6978
	SIOCINITIFADDR                    = 0xc0446984
	SIOCSDRVSPEC                      = 0x801c697b
	SIOCSETPFSYNC                     = 0x809069f7
	SIOCSHIWAT                        = 0x80047300
	SIOCSIFADDR                       = 0x8090690c
	SIOCSIFADDRPREF                   = 0x8094691f
	SIOCSIFBRDADDR                    = 0x80906913
	SIOCSIFCAP                        = 0x80206975
	SIOCSIFDSTADDR                    = 0x8090690e
	SIOCSIFFLAGS                      = 0x80906910
	SIOCSIFGENERIC                    = 0x80906939
	SIOCSIFMEDIA                      = 0xc0906935
	SIOCSIFMETRIC                     = 0x80906918
	SIOCSIFMTU                        = 0x8090697f
	SIOCSIFNETMASK                    = 0x80906916
	SIOCSIFPHYADDR                    = 0x80406946
	SIOCSLIFPHYADDR                   = 0x8118694a
	SIOCSLINKSTR                      = 0x801c6988
	SIOCSLOWAT                        = 0x80047302
	SIOCSPGRP                         = 0x80047308
	SIOCSVH                           = 0xc0906982
	SIOCZIFDATA                       = 0xc0946986
	SOCK_CLOEXEC                      = 0x10000000
	SOCK_DGRAM                        = 0x2
	SOCK_FLAGS_MASK                   = 0xf0000000
	SOCK_NONBLOCK                     = 0x20000000
	SOCK_NOSIGPIPE                    = 0x40000000
	SOCK_RAW                          = 0x3
	SOCK_RDM                          = 0x4
	SOCK_SEQPACKET                    = 0x5
	SOCK_STREAM                       = 0x1
	SOL_SOCKET                        = 0xffff
	SOMAXCONN                         = 0x80
	SO_ACCEPTCONN                     = 0x2
	SO_ACCEPTFILTER                   = 0x1000
	SO_BROADCAST                      = 0x20
	SO_DEBUG                          = 0x1
	SO_DONTROUTE                      = 0x10
	SO_ERROR                          = 0x1007
	SO_KEEPALIVE                      = 0x8
	SO_LINGER                         = 0x80
	SO_NOHEADER                       = 0x100a
	SO_NOSIGPIPE                      = 0x800
	SO_OOBINLINE                      = 0x100
	SO_OVERFLOWED                     = 0x1009
	SO_RCVBUF                         = 0x1002
	SO_RCVLOWAT                       = 0x1004
	SO_RCVTIMEO                       = 0x100c
	SO_REUSEADDR                      = 0x4
	SO_REUSEPORT                      = 0x200
	SO_SNDBUF                         = 0x1001
	SO_SNDLOWAT                       = 0x1003
	SO_SNDTIMEO                       = 0x100b
	SO_TIMESTAMP                      = 0x2000
	SO_TYPE                           = 0x1008
	SO_USELOOPBACK                    = 0x40
	SYSCTL_VERSION                    = 0x1000000
	SYSCTL_VERS_0                     = 0x0
	SYSCTL_VERS_1                     = 0x1000000
	SYSCTL_VERS_MASK                  = 0xff000000
	S_ARCH1                           = 0x10000
	S_ARCH2                           = 0x20000
	S_BLKSIZE                         = 0x200
	S_IEXEC                           = 0x40
	S_IFBLK                           = 0x6000
	S_IFCHR                           = 0x2000
	S_IFDIR                           = 0x4000
	S_IFIFO                           = 0x1000
	S_IFLNK                           = 0xa000
	S_IFMT                            = 0xf000
	S_IFREG                           = 0x8000
	S_IFSOCK                          = 0xc000
	S_IFWHT                           = 0xe000
	S_IREAD                           = 0x100
	S_IRGRP                           = 0x20
	S_IROTH                           = 0x4
	S_IRUSR                           = 0x100
	S_IRWXG                           = 0x38
	S_IRWXO                           = 0x7
	S_IRWXU                           = 0x1c0
	S_ISGID                           = 0x400
	S_ISTXT                           = 0x200
	S_ISUID                           = 0x800
	S_ISVTX                           = 0x200
	S_IWGRP                           = 0x10
	S_IWOTH                           = 0x2
	S_IWRITE                          = 0x80
	S_IWUSR                           = 0x80
	S_IXGRP                           = 0x8
	S_IXOTH                           = 0x1
	S_IXUSR                           = 0x40
	S_LOGIN_SET                       = 0x1
	TCIFLUSH                          = 0x1
	TCIOFLUSH                         = 0x3
	TCOFLUSH                          = 0x2
	TCP_CONGCTL                       = 0x20
	TCP_KEEPCNT                       = 0x6
	TCP_KEEPIDLE                      = 0x3
	TCP_KEEPINIT                      = 0x7
	TCP_KEEPINTVL                     = 0x5
	TCP_MAXBURST                      = 0x4
	TCP_MAXSEG                        = 0x2
	TCP_MAXWIN                        = 0xffff
	TCP_MAX_WINSHIFT                  = 0xe
	TCP_MD5SIG                        = 0x10
	TCP_MINMSS                        = 0xd8
	TCP_MSS                           = 0x218
	TCP_NODELAY                       = 0x1
	TCSAFLUSH                         = 0x2
	TIOCCBRK                          = 0x2000747a
	TIOCCDTR                          = 0x20007478
	TIOCCONS                          = 0x80047462
	TIOCDCDTIMESTAMP                  = 0x400c7458
	TIOCDRAIN                         = 0x2000745e
	TIOCEXCL                          = 0x2000740d
	TIOCEXT                           = 0x80047460
	TIOCFLAG_CDTRCTS                  = 0x10
	TIOCFLAG_CLOCAL                   = 0x2
	TIOCFLAG_CRTSCTS                  = 0x4
	TIOCFLAG_MDMBUF                   = 0x8
	TIOCFLAG_SOFTCAR                  = 0x1
	TIOCFLUSH                         = 0x80047410
	TIOCGETA                          = 0x402c7413
	TIOCGETD                          = 0x4004741a
	TIOCGFLAGS                        = 0x4004745d
	TIOCGLINED                        = 0x40207442
	TIOCGPGRP                         = 0x40047477
	TIOCGQSIZE                        = 0x40047481
	TIOCGRANTPT                       = 0x20007447
	TIOCGSID                          = 0x40047463
	TIOCGSIZE                         = 0x40087468
	TIOCGWINSZ                        = 0x40087468
	TIOCMBIC                          = 0x8004746b
	TIOCMBIS                          = 0x8004746c
	TIOCMGET                          = 0x4004746a
	TIOCMSET                          = 0x8004746d
	TIOCM_CAR                         = 0x40
	TIOCM_CD                          = 0x40
	TIOCM_CTS                         = 0x20
	TIOCM_DSR                         = 0x100
	TIOCM_DTR                         = 0x2
	TIOCM_LE                          = 0x1
	TIOCM_RI                          = 0x80
	TIOCM_RNG                         = 0x80
	TIOCM_RTS                         = 0x4
	TIOCM_SR                          = 0x10
	TIOCM_ST                          = 0x8
	TIOCNOTTY                         = 0x20007471
	TIOCNXCL                          = 0x2000740e
	TIOCOUTQ                          = 0x40047473
	TIOCPKT                           = 0x80047470
	TIOCPKT_DATA                      = 0x0
	TIOCPKT_DOSTOP                    = 0x20
	TIOCPKT_FLUSHREAD                 = 0x1
	TIOCPKT_FLUSHWRITE                = 0x2
	TIOCPKT_IOCTL                     = 0x40
	TIOCPKT_NOSTOP                    = 0x10
	TIOCPKT_START                     = 0x8
	TIOCPKT_STOP                      = 0x4
	TIOCPTMGET                        = 0x40287446
	TIOCPTSNAME                       = 0x40287448
	TIOCRCVFRAME                      = 0x80047445
	TIOCREMOTE                        = 0x80047469
	TIOCSBRK                          = 0x2000747b
	TIOCSCTTY                         = 0x20007461
	TIOCSDTR                          = 0x20007479
	TIOCSETA                          = 0x802c7414
	TIOCSETAF                         = 0x802c7416
	TIOCSETAW                         = 0x802c7415
	TIOCSETD                          = 0x8004741b
	TIOCSFLAGS                        = 0x8004745c
	TIOCSIG                           = 0x2000745f
	TIOCSLINED                        = 0x80207443
	TIOCSPGRP                         = 0x80047476
	TIOCSQSIZE                        = 0x80047480
	TIOCSSIZE                         = 0x80087467
	TIOCSTART                         = 0x2000746e
	TIOCSTAT                          = 0x80047465
	TIOCSTI                           = 0x80017472
	TIOCSTOP                          = 0x2000746f
	TIOCSWINSZ                        = 0x80087467
	TIOCUCNTL                         = 0x80047466
	TIOCXMTFRAME                      = 0x80047444
	TOSTOP                            = 0x400000
	VDISCARD                          = 0xf
	VDSUSP                            = 0xb
	VEOF                              = 0x0
	VEOL                              = 0x1
	VEOL2                             = 0x2
	VERASE                            = 0x3
	VINTR                             = 0x8
	VKILL                             = 0x5
	VLNEXT                            = 0xe
	VMIN                              = 0x10
	VQUIT                             = 0x9
	VREPRINT                          = 0x6
	VSTART                            = 0xc
	VSTATUS                           = 0x12
	VSTOP                             = 0xd
	VSUSP                             = 0xa
	VTIME                             = 0x11
	VWERASE                           = 0x4
	WALL                              = 0x8
	WALLSIG                           = 0x8
	WALTSIG                           = 0x4
	WCLONE                            = 0x4
	WCOREFLAG                         = 0x80
	WNOHANG                           = 0x1
	WNOWAIT                           = 0x10000
	WNOZOMBIE                         = 0x20000
	WOPTSCHECKED                      = 0x40000
	WSTOPPED                          = 0x7f
	WUNTRACED                         = 0x2
)

// Errors
const (
	E2BIG           = syscall.Errno(0x7)
	EACCES          = syscall.Errno(0xd)
	EADDRINUSE      = syscall.Errno(0x30)
	EADDRNOTAVAIL   = syscall.Errno(0x31)
	EAFNOSUPPORT    = syscall.Errno(0x2f)
	EAGAIN          = syscall.Errno(0x23)
	EALREADY        = syscall.Errno(0x25)
	EAUTH           = syscall.Errno(0x50)
	EBADF           = syscall.Errno(0x9)
	EBADMSG         = syscall.Errno(0x58)
	EBADRPC         = syscall.Errno(0x48)
	EBUSY           = syscall.Errno(0x10)
	ECANCELED       = syscall.Errno(0x57)
	ECHILD          = syscall.Errno(0xa)
	ECONNABORTED    = syscall.Errno(0x35)
	ECONNREFUSED    = syscall.Errno(0x3d)
	ECONNRESET      = syscall.Errno(0x36)
	EDEADLK         = syscall.Errno(0xb)
	EDESTADDRREQ    = syscall.Errno(0x27)
	EDOM            = syscall.Errno(0x21)
	EDQUOT          = syscall.Errno(0x45)
	EEXIST          = syscall.Errno(0x11)
	EFAULT          = syscall.Errno(0xe)
	EFBIG           = syscall.Errno(0x1b)
	EFTYPE          = syscall.Errno(0x4f)
	EHOSTDOWN       = syscall.Errno(0x40)
	EHOSTUNREACH    = syscall.Errno(0x41)
	EIDRM           = syscall.Errno(0x52)
	EILSEQ          = syscall.Errno(0x55)
	EINPROGRESS     = syscall.Errno(0x24)
	EINTR           = syscall.Errno(0x4)
	EINVAL          = syscall.Errno(0x16)
	EIO             = syscall.Errno(0x5)
	EISCONN         = syscall.Errno(0x38)
	EISDIR          = syscall.Errno(0x15)
	ELAST           = syscall.Errno(0x60)
	ELOOP           = syscall.Errno(0x3e)
	EMFILE          = syscall.Errno(0x18)
	EMLINK          = syscall.Errno(0x1f)
	EMSGSIZE        = syscall.Errno(0x28)
	EMULTIHOP       = syscall.Errno(0x5e)
	ENAMETOOLONG    = syscall.Errno(0x3f)
	ENEEDAUTH       = syscall.Errno(0x51)
	ENETDOWN        = syscall.Errno(0x32)
	ENETRESET       = syscall.Errno(0x34)
	ENETUNREACH     = syscall.Errno(0x33)
	ENFILE          = syscall.Errno(0x17)
	ENOATTR         = syscall.Errno(0x5d)
	ENOBUFS         = syscall.Errno(0x37)
	ENODATA         = syscall.Errno(0x59)
	ENODEV          = syscall.Errno(0x13)
	ENOENT          = syscall.Errno(0x2)
	ENOEXEC         = syscall.Errno(0x8)
	ENOLCK          = syscall.Errno(0x4d)
	ENOLINK         = syscall.Errno(0x5f)
	ENOMEM          = syscall.Errno(0xc)
	ENOMSG          = syscall.Errno(0x53)
	ENOPROTOOPT     = syscall.Errno(0x2a)
	ENOSPC          = syscall.Errno(0x1c)
	ENOSR           = syscall.Errno(0x5a)
	ENOSTR          = syscall.Errno(0x5b)
	ENOSYS          = syscall.Errno(0x4e)
	ENOTBLK         = syscall.Errno(0xf)
	ENOTCONN        = syscall.Errno(0x39)
	ENOTDIR         = syscall.Errno(0x14)
	ENOTEMPTY       = syscall.Errno(0x42)
	ENOTSOCK        = syscall.Errno(0x26)
	ENOTSUP         = syscall.Errno(0x56)
	ENOTTY          = syscall.Errno(0x19)
	ENXIO           = syscall.Errno(0x6)
	EOPNOTSUPP      = syscall.Errno(0x2d)
	EOVERFLOW       = syscall.Errno(0x54)
	EPERM           = syscall.Errno(0x1)
	EPFNOSUPPORT    = syscall.Errno(0x2e)
	EPIPE           = syscall.Errno(0x20)
	EPROCLIM        = syscall.Errno(0x43)
	EPROCUNAVAIL    = syscall.Errno(0x4c)
	EPROGMISMATCH   = syscall.Errno(0x4b)
	EPROGUNAVAIL    = syscall.Errno(0x4a)
	EPROTO          = syscall.Errno(0x60)
	EPROTONOSUPPORT = syscall.Errno(0x2b)
	EPROTOTYPE      = syscall.Errno(0x29)
	ERANGE          = syscall.Errno(0x22)
	EREMOTE         = syscall.Errno(0x47)
	EROFS           = syscall.Errno(0x1e)
	ERPCMISMATCH    = syscall.Errno(0x49)
	ESHUTDOWN       = syscall.Errno(0x3a)
	ESOCKTNOSUPPORT = syscall.Errno(0x2c)
	ESPIPE          = syscall.Errno(0x1d)
	ESRCH           = syscall.Errno(0x3)
	ESTALE          = syscall.Errno(0x46)
	ETIME           = syscall.Errno(0x5c)
	ETIMEDOUT       = syscall.Errno(0x3c)
	ETOOMANYREFS    = syscall.Errno(0x3b)
	ETXTBSY         = syscall.Errno(0x1a)
	EUSERS          = syscall.Errno(0x44)
	EWOULDBLOCK     = syscall.Errno(0x23)
	EXDEV           = syscall.Errno(0x12)
)

// Signals
const (
	SIGABRT   = syscall.Signal(0x6)
	SIGALRM   = syscall.Signal(0xe)
	SIGBUS    = syscall.Signal(0xa)
	SIGCHLD   = syscall.Signal(0x14)
	SIGCONT   = syscall.Signal(0x13)
	SIGEMT    = syscall.Signal(0x7)
	SIGFPE    = syscall.Signal(0x8)
	SIGHUP    = syscall.Signal(0x1)
	SIGILL    = syscall.Signal(0x4)
	SIGINFO   = syscall.Signal(0x1d)
	SIGINT    = syscall.Signal(0x2)
	SIGIO     = syscall.Signal(0x17)
	SIGIOT    = syscall.Signal(0x6)
	SIGKILL   = syscall.Signal(0x9)
	SIGPIPE   = syscall.Signal(0xd)
	SIGPROF   = syscall.Signal(0x1b)
	SIGPWR    = syscall.Signal(0x20)
	SIGQUIT   = syscall.Signal(0x3)
	SIGSEGV   = syscall.Signal(0xb)
	SIGSTOP   = syscall.Signal(0x11)
	SIGSYS    = syscall.Signal(0xc)
	SIGTERM   = syscall.Signal(0xf)
	SIGTRAP   = syscall.Signal(0x5)
	SIGTSTP   = syscall.Signal(0x12)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x10)
	SIGUSR1   = syscall.Signal(0x1e)
	SIGUSR2   = syscall.Signal(0x1f)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "device not configured"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EDEADLK", "resource deadlock avoided"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "cross-device link"},
	{19, "ENODEV", "operation not supported by device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "result too large or too small"},
	{35, "EAGAIN", "resource temporarily unavailable"},
	{36, "EINPROGRESS", "operation now in progress"},
	{37, "EALREADY", "operation already in progress"},
	{38, "ENOTSOCK", "socket operation on non-socket"},
	{39, "EDESTADDRREQ", "destination address required"},
	{40, "EMSGSIZE", "message too long"},
	{41, "EPROTOTYPE", "protocol wrong type for socket"},
	{42, "ENOPROTOOPT", "protocol option not available"},
	{43, "EPROTONOSUPPORT", "protocol not supported"},
	{44, "ESOCKTNOSUPPORT", "socket type not supported"},
	{45, "EOPNOTSUPP", "operation not supported"},
	{46, "EPFNOSUPPORT", "protocol family not supported"},
	{47, "EAFNOSUPPORT", "address family not supported by protocol family"},
	{48, "EADDRINUSE", "address already in use"},
	{49, "EADDRNOTAVAIL", "can't assign requested address"},
	{50, "ENETDOWN", "network is down"},
	{51, "ENETUNREACH", "network is unreachable"},
	{52, "ENETRESET", "network dropped connection on reset"},
	{53, "ECONNABORTED", "software caused connection abort"},
	{54, "ECONNRESET", "connection reset by peer"},
	{55, "ENOBUFS", "no buffer space available"},
	{56, "EISCONN", "socket is already connected"},
	{57, "ENOTCONN", "socket is not connected"},
	{58, "ESHUTDOWN", "can't send after socket shutdown"},
	{59, "ETOOMANYREFS", "too many references: can't splice"},
	{60, "ETIMEDOUT", "connection timed out"},
	{61, "ECONNREFUSED", "connection refused"},
	{62, "ELOOP", "too many levels of symbolic links"},
	{63, "ENAMETOOLONG", "file name too long"},
	{64, "EHOSTDOWN", "host is down"},
	{65, "EHOSTUNREACH", "no route to host"},
	{66, "ENOTEMPTY", "directory not empty"},
	{67, "EPROCLIM", "too many processes"},
	{68, "EUSERS", "too many users"},
	{69, "EDQUOT", "disc quota exceeded"},
	{70, "ESTALE", "stale NFS file handle"},
	{71, "EREMOTE", "too many levels of remote in path"},
	{72, "EBADRPC", "RPC struct is bad"},
	{73, "ERPCMISMATCH", "RPC version wrong"},
	{74, "EPROGUNAVAIL", "RPC prog. not avail"},
	{75, "EPROGMISMATCH", "program version wrong"},
	{76, "EPROCUNAVAIL", "bad procedure for program"},
	{77, "ENOLCK", "no locks available"},
	{78, "ENOSYS", "function not implemented"},
	{79, "EFTYPE", "inappropriate file type or format"},
	{80, "EAUTH", "authentication error"},
	{81, "ENEEDAUTH", "need authenticator"},
	{82, "EIDRM", "identifier removed"},
	{83, "ENOMSG", "no message of desired type"},
	{84, "EOVERFLOW", "value too large to be stored in data type"},
	{85, "EILSEQ", "illegal byte sequence"},
	{86, "ENOTSUP", "not supported"},
	{87, "ECANCELED", "operation Canceled"},
	{88, "EBADMSG", "bad or Corrupt message"},
	{89, "ENODATA", "no message available"},
	{90, "ENOSR", "no STREAM resources"},
	{91, "ENOSTR", "not a STREAM"},
	{92, "ETIME", "STREAM ioctl timeout"},
	{93, "ENOATTR", "attribute not found"},
	{94, "EMULTIHOP", "multihop attempted"},
	{95, "ENOLINK", "link has been severed"},
	{96, "ELAST", "protocol error"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/BPT trap"},
	{6, "SIGIOT", "abort trap"},
	{7, "SIGEMT", "EMT trap"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus error"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGSYS", "bad system call"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGURG", "urgent I/O condition"},
	{17, "SIGSTOP", "stopped (signal)"},
	{18, "SIGTSTP", "stopped"},
	{19, "SIGCONT", "continued"},
	{20, "SIGCHLD", "child exited"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGIO", "I/O possible"},
	{24, "SIGXCPU", "cputime limit exceeded"},
	{25, "SIGXFSZ", "filesize limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window size changes"},
	{29, "SIGINFO", "information request"},
	{30, "SIGUSR1", "user defined signal 1"},
	{31, "SIGUSR2", "user defined signal 2"},
	{32, "SIGPWR", "power fail/restart"},
}
 07070100000E3B000081A4000000000000000000000001645E367C0001217B000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go  // mkerrors.sh -m64
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build amd64 && netbsd
// +build amd64,netbsd

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -m64 _const.go

package unix

import "syscall"

const (
	AF_APPLETALK                      = 0x10
	AF_ARP                            = 0x1c
	AF_BLUETOOTH                      = 0x1f
	AF_CCITT                          = 0xa
	AF_CHAOS                          = 0x5
	AF_CNT                            = 0x15
	AF_COIP                           = 0x14
	AF_DATAKIT                        = 0x9
	AF_DECnet                         = 0xc
	AF_DLI                            = 0xd
	AF_E164                           = 0x1a
	AF_ECMA                           = 0x8
	AF_HYLINK                         = 0xf
	AF_IEEE80211                      = 0x20
	AF_IMPLINK                        = 0x3
	AF_INET                           = 0x2
	AF_INET6                          = 0x18
	AF_IPX                            = 0x17
	AF_ISDN                           = 0x1a
	AF_ISO                            = 0x7
	AF_LAT                            = 0xe
	AF_LINK                           = 0x12
	AF_LOCAL                          = 0x1
	AF_MAX                            = 0x23
	AF_MPLS                           = 0x21
	AF_NATM                           = 0x1b
	AF_NS                             = 0x6
	AF_OROUTE                         = 0x11
	AF_OSI                            = 0x7
	AF_PUP                            = 0x4
	AF_ROUTE                          = 0x22
	AF_SNA                            = 0xb
	AF_UNIX                           = 0x1
	AF_UNSPEC                         = 0x0
	ARPHRD_ARCNET                     = 0x7
	ARPHRD_ETHER                      = 0x1
	ARPHRD_FRELAY                     = 0xf
	ARPHRD_IEEE1394                   = 0x18
	ARPHRD_IEEE802                    = 0x6
	ARPHRD_STRIP                      = 0x17
	B0                                = 0x0
	B110                              = 0x6e
	B115200                           = 0x1c200
	B1200                             = 0x4b0
	B134                              = 0x86
	B14400                            = 0x3840
	B150                              = 0x96
	B1800                             = 0x708
	B19200                            = 0x4b00
	B200                              = 0xc8
	B230400                           = 0x38400
	B2400                             = 0x960
	B28800                            = 0x7080
	B300                              = 0x12c
	B38400                            = 0x9600
	B460800                           = 0x70800
	B4800                             = 0x12c0
	B50                               = 0x32
	B57600                            = 0xe100
	B600                              = 0x258
	B7200                             = 0x1c20
	B75                               = 0x4b
	B76800                            = 0x12c00
	B921600                           = 0xe1000
	B9600                             = 0x2580
	BIOCFEEDBACK                      = 0x8004427d
	BIOCFLUSH                         = 0x20004268
	BIOCGBLEN                         = 0x40044266
	BIOCGDLT                          = 0x4004426a
	BIOCGDLTLIST                      = 0xc0104277
	BIOCGETIF                         = 0x4090426b
	BIOCGFEEDBACK                     = 0x4004427c
	BIOCGHDRCMPLT                     = 0x40044274
	BIOCGRTIMEOUT                     = 0x4010427b
	BIOCGSEESENT                      = 0x40044278
	BIOCGSTATS                        = 0x4080426f
	BIOCGSTATSOLD                     = 0x4008426f
	BIOCIMMEDIATE                     = 0x80044270
	BIOCPROMISC                       = 0x20004269
	BIOCSBLEN                         = 0xc0044266
	BIOCSDLT                          = 0x80044276
	BIOCSETF                          = 0x80104267
	BIOCSETIF                         = 0x8090426c
	BIOCSFEEDBACK                     = 0x8004427d
	BIOCSHDRCMPLT                     = 0x80044275
	BIOCSRTIMEOUT                     = 0x8010427a
	BIOCSSEESENT                      = 0x80044279
	BIOCSTCPF                         = 0x80104272
	BIOCSUDPF                         = 0x80104273
	BIOCVERSION                       = 0x40044271
	BPF_A                             = 0x10
	BPF_ABS                           = 0x20
	BPF_ADD                           = 0x0
	BPF_ALIGNMENT                     = 0x8
	BPF_ALIGNMENT32                   = 0x4
	BPF_ALU                           = 0x4
	BPF_AND                           = 0x50
	BPF_B                             = 0x10
	BPF_DFLTBUFSIZE                   = 0x100000
	BPF_DIV                           = 0x30
	BPF_H                             = 0x8
	BPF_IMM                           = 0x0
	BPF_IND                           = 0x40
	BPF_JA                            = 0x0
	BPF_JEQ                           = 0x10
	BPF_JGE                           = 0x30
	BPF_JGT                           = 0x20
	BPF_JMP                           = 0x5
	BPF_JSET                          = 0x40
	BPF_K                             = 0x0
	BPF_LD                            = 0x0
	BPF_LDX                           = 0x1
	BPF_LEN                           = 0x80
	BPF_LSH                           = 0x60
	BPF_MAJOR_VERSION                 = 0x1
	BPF_MAXBUFSIZE                    = 0x1000000
	BPF_MAXINSNS                      = 0x200
	BPF_MEM                           = 0x60
	BPF_MEMWORDS                      = 0x10
	BPF_MINBUFSIZE                    = 0x20
	BPF_MINOR_VERSION                 = 0x1
	BPF_MISC                          = 0x7
	BPF_MSH                           = 0xa0
	BPF_MUL                           = 0x20
	BPF_NEG                           = 0x80
	BPF_OR                            = 0x40
	BPF_RELEASE                       = 0x30bb6
	BPF_RET                           = 0x6
	BPF_RSH                           = 0x70
	BPF_ST                            = 0x2
	BPF_STX                           = 0x3
	BPF_SUB                           = 0x10
	BPF_TAX                           = 0x0
	BPF_TXA                           = 0x80
	BPF_W                             = 0x0
	BPF_X                             = 0x8
	BRKINT                            = 0x2
	CFLUSH                            = 0xf
	CLOCAL                            = 0x8000
	CLONE_CSIGNAL                     = 0xff
	CLONE_FILES                       = 0x400
	CLONE_FS                          = 0x200
	CLONE_PID                         = 0x1000
	CLONE_PTRACE                      = 0x2000
	CLONE_SIGHAND                     = 0x800
	CLONE_VFORK                       = 0x4000
	CLONE_VM                          = 0x100
	CPUSTATES                         = 0x5
	CP_IDLE                           = 0x4
	CP_INTR                           = 0x3
	CP_NICE                           = 0x1
	CP_SYS                            = 0x2
	CP_USER                           = 0x0
	CREAD                             = 0x800
	CRTSCTS                           = 0x10000
	CS5                               = 0x0
	CS6                               = 0x100
	CS7                               = 0x200
	CS8                               = 0x300
	CSIZE                             = 0x300
	CSTART                            = 0x11
	CSTATUS                           = 0x14
	CSTOP                             = 0x13
	CSTOPB                            = 0x400
	CSUSP                             = 0x1a
	CTL_HW                            = 0x6
	CTL_KERN                          = 0x1
	CTL_MAXNAME                       = 0xc
	CTL_NET                           = 0x4
	CTL_QUERY                         = -0x2
	DIOCBSFLUSH                       = 0x20006478
	DLT_A429                          = 0xb8
	DLT_A653_ICM                      = 0xb9
	DLT_AIRONET_HEADER                = 0x78
	DLT_AOS                           = 0xde
	DLT_APPLE_IP_OVER_IEEE1394        = 0x8a
	DLT_ARCNET                        = 0x7
	DLT_ARCNET_LINUX                  = 0x81
	DLT_ATM_CLIP                      = 0x13
	DLT_ATM_RFC1483                   = 0xb
	DLT_AURORA                        = 0x7e
	DLT_AX25                          = 0x3
	DLT_AX25_KISS                     = 0xca
	DLT_BACNET_MS_TP                  = 0xa5
	DLT_BLUETOOTH_HCI_H4              = 0xbb
	DLT_BLUETOOTH_HCI_H4_WITH_PHDR    = 0xc9
	DLT_CAN20B                        = 0xbe
	DLT_CAN_SOCKETCAN                 = 0xe3
	DLT_CHAOS                         = 0x5
	DLT_CISCO_IOS                     = 0x76
	DLT_C_HDLC                        = 0x68
	DLT_C_HDLC_WITH_DIR               = 0xcd
	DLT_DECT                          = 0xdd
	DLT_DOCSIS                        = 0x8f
	DLT_ECONET                        = 0x73
	DLT_EN10MB                        = 0x1
	DLT_EN3MB                         = 0x2
	DLT_ENC                           = 0x6d
	DLT_ERF                           = 0xc5
	DLT_ERF_ETH                       = 0xaf
	DLT_ERF_POS                       = 0xb0
	DLT_FC_2                          = 0xe0
	DLT_FC_2_WITH_FRAME_DELIMS        = 0xe1
	DLT_FDDI                          = 0xa
	DLT_FLEXRAY                       = 0xd2
	DLT_FRELAY                        = 0x6b
	DLT_FRELAY_WITH_DIR               = 0xce
	DLT_GCOM_SERIAL                   = 0xad
	DLT_GCOM_T1E1                     = 0xac
	DLT_GPF_F                         = 0xab
	DLT_GPF_T                         = 0xaa
	DLT_GPRS_LLC                      = 0xa9
	DLT_GSMTAP_ABIS                   = 0xda
	DLT_GSMTAP_UM                     = 0xd9
	DLT_HDLC                          = 0x10
	DLT_HHDLC                         = 0x79
	DLT_HIPPI                         = 0xf
	DLT_IBM_SN                        = 0x92
	DLT_IBM_SP                        = 0x91
	DLT_IEEE802                       = 0x6
	DLT_IEEE802_11                    = 0x69
	DLT_IEEE802_11_RADIO              = 0x7f
	DLT_IEEE802_11_RADIO_AVS          = 0xa3
	DLT_IEEE802_15_4                  = 0xc3
	DLT_IEEE802_15_4_LINUX            = 0xbf
	DLT_IEEE802_15_4_NONASK_PHY       = 0xd7
	DLT_IEEE802_16_MAC_CPS            = 0xbc
	DLT_IEEE802_16_MAC_CPS_RADIO      = 0xc1
	DLT_IPMB                          = 0xc7
	DLT_IPMB_LINUX                    = 0xd1
	DLT_IPNET                         = 0xe2
	DLT_IPV4                          = 0xe4
	DLT_IPV6                          = 0xe5
	DLT_IP_OVER_FC                    = 0x7a
	DLT_JUNIPER_ATM1                  = 0x89
	DLT_JUNIPER_ATM2                  = 0x87
	DLT_JUNIPER_CHDLC                 = 0xb5
	DLT_JUNIPER_ES                    = 0x84
	DLT_JUNIPER_ETHER                 = 0xb2
	DLT_JUNIPER_FRELAY                = 0xb4
	DLT_JUNIPER_GGSN                  = 0x85
	DLT_JUNIPER_ISM                   = 0xc2
	DLT_JUNIPER_MFR                   = 0x86
	DLT_JUNIPER_MLFR                  = 0x83
	DLT_JUNIPER_MLPPP                 = 0x82
	DLT_JUNIPER_MONITOR               = 0xa4
	DLT_JUNIPER_PIC_PEER              = 0xae
	DLT_JUNIPER_PPP                   = 0xb3
	DLT_JUNIPER_PPPOE                 = 0xa7
	DLT_JUNIPER_PPPOE_ATM             = 0xa8
	DLT_JUNIPER_SERVICES              = 0x88
	DLT_JUNIPER_ST                    = 0xc8
	DLT_JUNIPER_VP                    = 0xb7
	DLT_LAPB_WITH_DIR                 = 0xcf
	DLT_LAPD                          = 0xcb
	DLT_LIN                           = 0xd4
	DLT_LINUX_EVDEV                   = 0xd8
	DLT_LINUX_IRDA                    = 0x90
	DLT_LINUX_LAPD                    = 0xb1
	DLT_LINUX_SLL                     = 0x71
	DLT_LOOP                          = 0x6c
	DLT_LTALK                         = 0x72
	DLT_MFR                           = 0xb6
	DLT_MOST                          = 0xd3
	DLT_MPLS                          = 0xdb
	DLT_MTP2                          = 0x8c
	DLT_MTP2_WITH_PHDR                = 0x8b
	DLT_MTP3                          = 0x8d
	DLT_NULL                          = 0x0
	DLT_PCI_EXP                       = 0x7d
	DLT_PFLOG                         = 0x75
	DLT_PFSYNC                        = 0x12
	DLT_PPI                           = 0xc0
	DLT_PPP                           = 0x9
	DLT_PPP_BSDOS                     = 0xe
	DLT_PPP_ETHER                     = 0x33
	DLT_PPP_PPPD                      = 0xa6
	DLT_PPP_SERIAL                    = 0x32
	DLT_PPP_WITH_DIR                  = 0xcc
	DLT_PRISM_HEADER                  = 0x77
	DLT_PRONET                        = 0x4
	DLT_RAIF1                         = 0xc6
	DLT_RAW                           = 0xc
	DLT_RAWAF_MASK                    = 0x2240000
	DLT_RIO                           = 0x7c
	DLT_SCCP                          = 0x8e
	DLT_SITA                          = 0xc4
	DLT_SLIP                          = 0x8
	DLT_SLIP_BSDOS                    = 0xd
	DLT_SUNATM                        = 0x7b
	DLT_SYMANTEC_FIREWALL             = 0x63
	DLT_TZSP                          = 0x80
	DLT_USB                           = 0xba
	DLT_USB_LINUX                     = 0xbd
	DLT_USB_LINUX_MMAPPED             = 0xdc
	DLT_WIHART                        = 0xdf
	DLT_X2E_SERIAL                    = 0xd5
	DLT_X2E_XORAYA                    = 0xd6
	DT_BLK                            = 0x6
	DT_CHR                            = 0x2
	DT_DIR                            = 0x4
	DT_FIFO                           = 0x1
	DT_LNK                            = 0xa
	DT_REG                            = 0x8
	DT_SOCK                           = 0xc
	DT_UNKNOWN                        = 0x0
	DT_WHT                            = 0xe
	ECHO                              = 0x8
	ECHOCTL                           = 0x40
	ECHOE                             = 0x2
	ECHOK                             = 0x4
	ECHOKE                            = 0x1
	ECHONL                            = 0x10
	ECHOPRT                           = 0x20
	EMUL_LINUX                        = 0x1
	EMUL_LINUX32                      = 0x5
	EMUL_MAXID                        = 0x6
	ETHERCAP_JUMBO_MTU                = 0x4
	ETHERCAP_VLAN_HWTAGGING           = 0x2
	ETHERCAP_VLAN_MTU                 = 0x1
	ETHERMIN                          = 0x2e
	ETHERMTU                          = 0x5dc
	ETHERMTU_JUMBO                    = 0x2328
	ETHERTYPE_8023                    = 0x4
	ETHERTYPE_AARP                    = 0x80f3
	ETHERTYPE_ACCTON                  = 0x8390
	ETHERTYPE_AEONIC                  = 0x8036
	ETHERTYPE_ALPHA                   = 0x814a
	ETHERTYPE_AMBER                   = 0x6008
	ETHERTYPE_AMOEBA                  = 0x8145
	ETHERTYPE_APOLLO                  = 0x80f7
	ETHERTYPE_APOLLODOMAIN            = 0x8019
	ETHERTYPE_APPLETALK               = 0x809b
	ETHERTYPE_APPLITEK                = 0x80c7
	ETHERTYPE_ARGONAUT                = 0x803a
	ETHERTYPE_ARP                     = 0x806
	ETHERTYPE_AT                      = 0x809b
	ETHERTYPE_ATALK                   = 0x809b
	ETHERTYPE_ATOMIC                  = 0x86df
	ETHERTYPE_ATT                     = 0x8069
	ETHERTYPE_ATTSTANFORD             = 0x8008
	ETHERTYPE_AUTOPHON                = 0x806a
	ETHERTYPE_AXIS                    = 0x8856
	ETHERTYPE_BCLOOP                  = 0x9003
	ETHERTYPE_BOFL                    = 0x8102
	ETHERTYPE_CABLETRON               = 0x7034
	ETHERTYPE_CHAOS                   = 0x804
	ETHERTYPE_COMDESIGN               = 0x806c
	ETHERTYPE_COMPUGRAPHIC            = 0x806d
	ETHERTYPE_COUNTERPOINT            = 0x8062
	ETHERTYPE_CRONUS                  = 0x8004
	ETHERTYPE_CRONUSVLN               = 0x8003
	ETHERTYPE_DCA                     = 0x1234
	ETHERTYPE_DDE                     = 0x807b
	ETHERTYPE_DEBNI                   = 0xaaaa
	ETHERTYPE_DECAM                   = 0x8048
	ETHERTYPE_DECCUST                 = 0x6006
	ETHERTYPE_DECDIAG                 = 0x6005
	ETHERTYPE_DECDNS                  = 0x803c
	ETHERTYPE_DECDTS                  = 0x803e
	ETHERTYPE_DECEXPER                = 0x6000
	ETHERTYPE_DECLAST                 = 0x8041
	ETHERTYPE_DECLTM                  = 0x803f
	ETHERTYPE_DECMUMPS                = 0x6009
	ETHERTYPE_DECNETBIOS              = 0x8040
	ETHERTYPE_DELTACON                = 0x86de
	ETHERTYPE_DIDDLE                  = 0x4321
	ETHERTYPE_DLOG1                   = 0x660
	ETHERTYPE_DLOG2                   = 0x661
	ETHERTYPE_DN                      = 0x6003
	ETHERTYPE_DOGFIGHT                = 0x1989
	ETHERTYPE_DSMD                    = 0x8039
	ETHERTYPE_ECMA                    = 0x803
	ETHERTYPE_ENCRYPT                 = 0x803d
	ETHERTYPE_ES                      = 0x805d
	ETHERTYPE_EXCELAN                 = 0x8010
	ETHERTYPE_EXPERDATA               = 0x8049
	ETHERTYPE_FLIP                    = 0x8146
	ETHERTYPE_FLOWCONTROL             = 0x8808
	ETHERTYPE_FRARP                   = 0x808
	ETHERTYPE_GENDYN                  = 0x8068
	ETHERTYPE_HAYES                   = 0x8130
	ETHERTYPE_HIPPI_FP                = 0x8180
	ETHERTYPE_HITACHI                 = 0x8820
	ETHERTYPE_HP                      = 0x8005
	ETHERTYPE_IEEEPUP                 = 0xa00
	ETHERTYPE_IEEEPUPAT               = 0xa01
	ETHERTYPE_IMLBL                   = 0x4c42
	ETHERTYPE_IMLBLDIAG               = 0x424c
	ETHERTYPE_IP                      = 0x800
	ETHERTYPE_IPAS                    = 0x876c
	ETHERTYPE_IPV6                    = 0x86dd
	ETHERTYPE_IPX                     = 0x8137
	ETHERTYPE_IPXNEW                  = 0x8037
	ETHERTYPE_KALPANA                 = 0x8582
	ETHERTYPE_LANBRIDGE               = 0x8038
	ETHERTYPE_LANPROBE                = 0x8888
	ETHERTYPE_LAT                     = 0x6004
	ETHERTYPE_LBACK                   = 0x9000
	ETHERTYPE_LITTLE                  = 0x8060
	ETHERTYPE_LOGICRAFT               = 0x8148
	ETHERTYPE_LOOPBACK                = 0x9000
	ETHERTYPE_MATRA                   = 0x807a
	ETHERTYPE_MAX                     = 0xffff
	ETHERTYPE_MERIT                   = 0x807c
	ETHERTYPE_MICP                    = 0x873a
	ETHERTYPE_MOPDL                   = 0x6001
	ETHERTYPE_MOPRC                   = 0x6002
	ETHERTYPE_MOTOROLA                = 0x818d
	ETHERTYPE_MPLS                    = 0x8847
	ETHERTYPE_MPLS_MCAST              = 0x8848
	ETHERTYPE_MUMPS                   = 0x813f
	ETHERTYPE_NBPCC                   = 0x3c04
	ETHERTYPE_NBPCLAIM                = 0x3c09
	ETHERTYPE_NBPCLREQ                = 0x3c05
	ETHERTYPE_NBPCLRSP                = 0x3c06
	ETHERTYPE_NBPCREQ                 = 0x3c02
	ETHERTYPE_NBPCRSP                 = 0x3c03
	ETHERTYPE_NBPDG                   = 0x3c07
	ETHERTYPE_NBPDGB                  = 0x3c08
	ETHERTYPE_NBPDLTE                 = 0x3c0a
	ETHERTYPE_NBPRAR                  = 0x3c0c
	ETHERTYPE_NBPRAS                  = 0x3c0b
	ETHERTYPE_NBPRST                  = 0x3c0d
	ETHERTYPE_NBPSCD                  = 0x3c01
	ETHERTYPE_NBPVCD                  = 0x3c00
	ETHERTYPE_NBS                     = 0x802
	ETHERTYPE_NCD                     = 0x8149
	ETHERTYPE_NESTAR                  = 0x8006
	ETHERTYPE_NETBEUI                 = 0x8191
	ETHERTYPE_NOVELL                  = 0x8138
	ETHERTYPE_NS                      = 0x600
	ETHERTYPE_NSAT                    = 0x601
	ETHERTYPE_NSCOMPAT                = 0x807
	ETHERTYPE_NTRAILER                = 0x10
	ETHERTYPE_OS9                     = 0x7007
	ETHERTYPE_OS9NET                  = 0x7009
	ETHERTYPE_PACER                   = 0x80c6
	ETHERTYPE_PAE                     = 0x888e
	ETHERTYPE_PCS                     = 0x4242
	ETHERTYPE_PLANNING                = 0x8044
	ETHERTYPE_PPP                     = 0x880b
	ETHERTYPE_PPPOE                   = 0x8864
	ETHERTYPE_PPPOEDISC               = 0x8863
	ETHERTYPE_PRIMENTS                = 0x7031
	ETHERTYPE_PUP                     = 0x200
	ETHERTYPE_PUPAT                   = 0x200
	ETHERTYPE_RACAL                   = 0x7030
	ETHERTYPE_RATIONAL                = 0x8150
	ETHERTYPE_RAWFR                   = 0x6559
	ETHERTYPE_RCL                     = 0x1995
	ETHERTYPE_RDP                     = 0x8739
	ETHERTYPE_RETIX                   = 0x80f2
	ETHERTYPE_REVARP                  = 0x8035
	ETHERTYPE_SCA                     = 0x6007
	ETHERTYPE_SECTRA                  = 0x86db
	ETHERTYPE_SECUREDATA              = 0x876d
	ETHERTYPE_SGITW                   = 0x817e
	ETHERTYPE_SG_BOUNCE               = 0x8016
	ETHERTYPE_SG_DIAG                 = 0x8013
	ETHERTYPE_SG_NETGAMES             = 0x8014
	ETHERTYPE_SG_RESV                 = 0x8015
	ETHERTYPE_SIMNET                  = 0x5208
	ETHERTYPE_SLOWPROTOCOLS           = 0x8809
	ETHERTYPE_SNA                     = 0x80d5
	ETHERTYPE_SNMP                    = 0x814c
	ETHERTYPE_SONIX                   = 0xfaf5
	ETHERTYPE_SPIDER                  = 0x809f
	ETHERTYPE_SPRITE                  = 0x500
	ETHERTYPE_STP                     = 0x8181
	ETHERTYPE_TALARIS                 = 0x812b
	ETHERTYPE_TALARISMC               = 0x852b
	ETHERTYPE_TCPCOMP                 = 0x876b
	ETHERTYPE_TCPSM                   = 0x9002
	ETHERTYPE_TEC                     = 0x814f
	ETHERTYPE_TIGAN                   = 0x802f
	ETHERTYPE_TRAIL                   = 0x1000
	ETHERTYPE_TRANSETHER              = 0x6558
	ETHERTYPE_TYMSHARE                = 0x802e
	ETHERTYPE_UBBST                   = 0x7005
	ETHERTYPE_UBDEBUG                 = 0x900
	ETHERTYPE_UBDIAGLOOP              = 0x7002
	ETHERTYPE_UBDL                    = 0x7000
	ETHERTYPE_UBNIU                   = 0x7001
	ETHERTYPE_UBNMC                   = 0x7003
	ETHERTYPE_VALID                   = 0x1600
	ETHERTYPE_VARIAN                  = 0x80dd
	ETHERTYPE_VAXELN                  = 0x803b
	ETHERTYPE_VEECO                   = 0x8067
	ETHERTYPE_VEXP                    = 0x805b
	ETHERTYPE_VGLAB                   = 0x8131
	ETHERTYPE_VINES                   = 0xbad
	ETHERTYPE_VINESECHO               = 0xbaf
	ETHERTYPE_VINESLOOP               = 0xbae
	ETHERTYPE_VITAL                   = 0xff00
	ETHERTYPE_VLAN                    = 0x8100
	ETHERTYPE_VLTLMAN                 = 0x8080
	ETHERTYPE_VPROD                   = 0x805c
	ETHERTYPE_VURESERVED              = 0x8147
	ETHERTYPE_WATERLOO                = 0x8130
	ETHERTYPE_WELLFLEET               = 0x8103
	ETHERTYPE_X25                     = 0x805
	ETHERTYPE_X75                     = 0x801
	ETHERTYPE_XNSSM                   = 0x9001
	ETHERTYPE_XTP                     = 0x817d
	ETHER_ADDR_LEN                    = 0x6
	ETHER_CRC_LEN                     = 0x4
	ETHER_CRC_POLY_BE                 = 0x4c11db6
	ETHER_CRC_POLY_LE                 = 0xedb88320
	ETHER_HDR_LEN                     = 0xe
	ETHER_MAX_LEN                     = 0x5ee
	ETHER_MAX_LEN_JUMBO               = 0x233a
	ETHER_MIN_LEN                     = 0x40
	ETHER_PPPOE_ENCAP_LEN             = 0x8
	ETHER_TYPE_LEN                    = 0x2
	ETHER_VLAN_ENCAP_LEN              = 0x4
	EVFILT_AIO                        = 0x2
	EVFILT_PROC                       = 0x4
	EVFILT_READ                       = 0x0
	EVFILT_SIGNAL                     = 0x5
	EVFILT_SYSCOUNT                   = 0x7
	EVFILT_TIMER                      = 0x6
	EVFILT_VNODE                      = 0x3
	EVFILT_WRITE                      = 0x1
	EV_ADD                            = 0x1
	EV_CLEAR                          = 0x20
	EV_DELETE                         = 0x2
	EV_DISABLE                        = 0x8
	EV_ENABLE                         = 0x4
	EV_EOF                            = 0x8000
	EV_ERROR                          = 0x4000
	EV_FLAG1                          = 0x2000
	EV_ONESHOT                        = 0x10
	EV_SYSFLAGS                       = 0xf000
	EXTA                              = 0x4b00
	EXTATTR_CMD_START                 = 0x1
	EXTATTR_CMD_STOP                  = 0x2
	EXTATTR_NAMESPACE_SYSTEM          = 0x2
	EXTATTR_NAMESPACE_USER            = 0x1
	EXTB                              = 0x9600
	EXTPROC                           = 0x800
	FD_CLOEXEC                        = 0x1
	FD_SETSIZE                        = 0x100
	FLUSHO                            = 0x800000
	F_CLOSEM                          = 0xa
	F_DUPFD                           = 0x0
	F_DUPFD_CLOEXEC                   = 0xc
	F_FSCTL                           = -0x80000000
	F_FSDIRMASK                       = 0x70000000
	F_FSIN                            = 0x10000000
	F_FSINOUT                         = 0x30000000
	F_FSOUT                           = 0x20000000
	F_FSPRIV                          = 0x8000
	F_FSVOID                          = 0x40000000
	F_GETFD                           = 0x1
	F_GETFL                           = 0x3
	F_GETLK                           = 0x7
	F_GETNOSIGPIPE                    = 0xd
	F_GETOWN                          = 0x5
	F_MAXFD                           = 0xb
	F_OK                              = 0x0
	F_PARAM_MASK                      = 0xfff
	F_PARAM_MAX                       = 0xfff
	F_RDLCK                           = 0x1
	F_SETFD                           = 0x2
	F_SETFL                           = 0x4
	F_SETLK                           = 0x8
	F_SETLKW                          = 0x9
	F_SETNOSIGPIPE                    = 0xe
	F_SETOWN                          = 0x6
	F_UNLCK                           = 0x2
	F_WRLCK                           = 0x3
	HUPCL                             = 0x4000
	HW_MACHINE                        = 0x1
	ICANON                            = 0x100
	ICMP6_FILTER                      = 0x12
	ICRNL                             = 0x100
	IEXTEN                            = 0x400
	IFAN_ARRIVAL                      = 0x0
	IFAN_DEPARTURE                    = 0x1
	IFA_ROUTE                         = 0x1
	IFF_ALLMULTI                      = 0x200
	IFF_BROADCAST                     = 0x2
	IFF_CANTCHANGE                    = 0x8f52
	IFF_DEBUG                         = 0x4
	IFF_LINK0                         = 0x1000
	IFF_LINK1                         = 0x2000
	IFF_LINK2                         = 0x4000
	IFF_LOOPBACK                      = 0x8
	IFF_MULTICAST                     = 0x8000
	IFF_NOARP                         = 0x80
	IFF_NOTRAILERS                    = 0x20
	IFF_OACTIVE                       = 0x400
	IFF_POINTOPOINT                   = 0x10
	IFF_PROMISC                       = 0x100
	IFF_RUNNING                       = 0x40
	IFF_SIMPLEX                       = 0x800
	IFF_UP                            = 0x1
	IFNAMSIZ                          = 0x10
	IFT_1822                          = 0x2
	IFT_A12MPPSWITCH                  = 0x82
	IFT_AAL2                          = 0xbb
	IFT_AAL5                          = 0x31
	IFT_ADSL                          = 0x5e
	IFT_AFLANE8023                    = 0x3b
	IFT_AFLANE8025                    = 0x3c
	IFT_ARAP                          = 0x58
	IFT_ARCNET                        = 0x23
	IFT_ARCNETPLUS                    = 0x24
	IFT_ASYNC                         = 0x54
	IFT_ATM                           = 0x25
	IFT_ATMDXI                        = 0x69
	IFT_ATMFUNI                       = 0x6a
	IFT_ATMIMA                        = 0x6b
	IFT_ATMLOGICAL                    = 0x50
	IFT_ATMRADIO                      = 0xbd
	IFT_ATMSUBINTERFACE               = 0x86
	IFT_ATMVCIENDPT                   = 0xc2
	IFT_ATMVIRTUAL                    = 0x95
	IFT_BGPPOLICYACCOUNTING           = 0xa2
	IFT_BRIDGE                        = 0xd1
	IFT_BSC                           = 0x53
	IFT_CARP                          = 0xf8
	IFT_CCTEMUL                       = 0x3d
	IFT_CEPT                          = 0x13
	IFT_CES                           = 0x85
	IFT_CHANNEL                       = 0x46
	IFT_CNR                           = 0x55
	IFT_COFFEE                        = 0x84
	IFT_COMPOSITELINK                 = 0x9b
	IFT_DCN                           = 0x8d
	IFT_DIGITALPOWERLINE              = 0x8a
	IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba
	IFT_DLSW                          = 0x4a
	IFT_DOCSCABLEDOWNSTREAM           = 0x80
	IFT_DOCSCABLEMACLAYER             = 0x7f
	IFT_DOCSCABLEUPSTREAM             = 0x81
	IFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd
	IFT_DS0                           = 0x51
	IFT_DS0BUNDLE                     = 0x52
	IFT_DS1FDL                        = 0xaa
	IFT_DS3                           = 0x1e
	IFT_DTM                           = 0x8c
	IFT_DVBASILN                      = 0xac
	IFT_DVBASIOUT                     = 0xad
	IFT_DVBRCCDOWNSTREAM              = 0x93
	IFT_DVBRCCMACLAYER                = 0x92
	IFT_DVBRCCUPSTREAM                = 0x94
	IFT_ECONET                        = 0xce
	IFT_EON                           = 0x19
	IFT_EPLRS                         = 0x57
	IFT_ESCON                         = 0x49
	IFT_ETHER                         = 0x6
	IFT_FAITH                         = 0xf2
	IFT_FAST                          = 0x7d
	IFT_FASTETHER                     = 0x3e
	IFT_FASTETHERFX                   = 0x45
	IFT_FDDI                          = 0xf
	IFT_FIBRECHANNEL                  = 0x38
	IFT_FRAMERELAYINTERCONNECT        = 0x3a
	IFT_FRAMERELAYMPI                 = 0x5c
	IFT_FRDLCIENDPT                   = 0xc1
	IFT_FRELAY                        = 0x20
	IFT_FRELAYDCE                     = 0x2c
	IFT_FRF16MFRBUNDLE                = 0xa3
	IFT_FRFORWARD                     = 0x9e
	IFT_G703AT2MB                     = 0x43
	IFT_G703AT64K                     = 0x42
	IFT_GIF                           = 0xf0
	IFT_GIGABITETHERNET               = 0x75
	IFT_GR303IDT                      = 0xb2
	IFT_GR303RDT                      = 0xb1
	IFT_H323GATEKEEPER                = 0xa4
	IFT_H323PROXY                     = 0xa5
	IFT_HDH1822                       = 0x3
	IFT_HDLC                          = 0x76
	IFT_HDSL2                         = 0xa8
	IFT_HIPERLAN2                     = 0xb7
	IFT_HIPPI                         = 0x2f
	IFT_HIPPIINTERFACE                = 0x39
	IFT_HOSTPAD                       = 0x5a
	IFT_HSSI                          = 0x2e
	IFT_HY                            = 0xe
	IFT_IBM370PARCHAN                 = 0x48
	IFT_IDSL                          = 0x9a
	IFT_IEEE1394                      = 0x90
	IFT_IEEE80211                     = 0x47
	IFT_IEEE80212                     = 0x37
	IFT_IEEE8023ADLAG                 = 0xa1
	IFT_IFGSN                         = 0x91
	IFT_IMT                           = 0xbe
	IFT_INFINIBAND                    = 0xc7
	IFT_INTERLEAVE                    = 0x7c
	IFT_IP                            = 0x7e
	IFT_IPFORWARD                     = 0x8e
	IFT_IPOVERATM                     = 0x72
	IFT_IPOVERCDLC                    = 0x6d
	IFT_IPOVERCLAW                    = 0x6e
	IFT_IPSWITCH                      = 0x4e
	IFT_ISDN                          = 0x3f
	IFT_ISDNBASIC                     = 0x14
	IFT_ISDNPRIMARY                   = 0x15
	IFT_ISDNS                         = 0x4b
	IFT_ISDNU                         = 0x4c
	IFT_ISO88022LLC                   = 0x29
	IFT_ISO88023                      = 0x7
	IFT_ISO88024                      = 0x8
	IFT_ISO88025                      = 0x9
	IFT_ISO88025CRFPINT               = 0x62
	IFT_ISO88025DTR                   = 0x56
	IFT_ISO88025FIBER                 = 0x73
	IFT_ISO88026                      = 0xa
	IFT_ISUP                          = 0xb3
	IFT_L2VLAN                        = 0x87
	IFT_L3IPVLAN                      = 0x88
	IFT_L3IPXVLAN                     = 0x89
	IFT_LAPB                          = 0x10
	IFT_LAPD                          = 0x4d
	IFT_LAPF                          = 0x77
	IFT_LINEGROUP                     = 0xd2
	IFT_LOCALTALK                     = 0x2a
	IFT_LOOP                          = 0x18
	IFT_MEDIAMAILOVERIP               = 0x8b
	IFT_MFSIGLINK                     = 0xa7
	IFT_MIOX25                        = 0x26
	IFT_MODEM                         = 0x30
	IFT_MPC                           = 0x71
	IFT_MPLS                          = 0xa6
	IFT_MPLSTUNNEL                    = 0x96
	IFT_MSDSL                         = 0x8f
	IFT_MVL                           = 0xbf
	IFT_MYRINET                       = 0x63
	IFT_NFAS                          = 0xaf
	IFT_NSIP                          = 0x1b
	IFT_OPTICALCHANNEL                = 0xc3
	IFT_OPTICALTRANSPORT              = 0xc4
	IFT_OTHER                         = 0x1
	IFT_P10                           = 0xc
	IFT_P80                           = 0xd
	IFT_PARA                          = 0x22
	IFT_PFLOG                         = 0xf5
	IFT_PFSYNC                        = 0xf6
	IFT_PLC                           = 0xae
	IFT_PON155                        = 0xcf
	IFT_PON622                        = 0xd0
	IFT_POS                           = 0xab
	IFT_PPP                           = 0x17
	IFT_PPPMULTILINKBUNDLE            = 0x6c
	IFT_PROPATM                       = 0xc5
	IFT_PROPBWAP2MP                   = 0xb8
	IFT_PROPCNLS                      = 0x59
	IFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5
	IFT_PROPDOCSWIRELESSMACLAYER      = 0xb4
	IFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6
	IFT_PROPMUX                       = 0x36
	IFT_PROPVIRTUAL                   = 0x35
	IFT_PROPWIRELESSP2P               = 0x9d
	IFT_PTPSERIAL                     = 0x16
	IFT_PVC                           = 0xf1
	IFT_Q2931                         = 0xc9
	IFT_QLLC                          = 0x44
	IFT_RADIOMAC                      = 0xbc
	IFT_RADSL                         = 0x5f
	IFT_REACHDSL                      = 0xc0
	IFT_RFC1483                       = 0x9f
	IFT_RS232                         = 0x21
	IFT_RSRB                          = 0x4f
	IFT_SDLC                          = 0x11
	IFT_SDSL                          = 0x60
	IFT_SHDSL                         = 0xa9
	IFT_SIP                           = 0x1f
	IFT_SIPSIG                        = 0xcc
	IFT_SIPTG                         = 0xcb
	IFT_SLIP                          = 0x1c
	IFT_SMDSDXI                       = 0x2b
	IFT_SMDSICIP                      = 0x34
	IFT_SONET                         = 0x27
	IFT_SONETOVERHEADCHANNEL          = 0xb9
	IFT_SONETPATH                     = 0x32
	IFT_SONETVT                       = 0x33
	IFT_SRP                           = 0x97
	IFT_SS7SIGLINK                    = 0x9c
	IFT_STACKTOSTACK                  = 0x6f
	IFT_STARLAN                       = 0xb
	IFT_STF                           = 0xd7
	IFT_T1                            = 0x12
	IFT_TDLC                          = 0x74
	IFT_TELINK                        = 0xc8
	IFT_TERMPAD                       = 0x5b
	IFT_TR008                         = 0xb0
	IFT_TRANSPHDLC                    = 0x7b
	IFT_TUNNEL                        = 0x83
	IFT_ULTRA                         = 0x1d
	IFT_USB                           = 0xa0
	IFT_V11                           = 0x40
	IFT_V35                           = 0x2d
	IFT_V36                           = 0x41
	IFT_V37                           = 0x78
	IFT_VDSL                          = 0x61
	IFT_VIRTUALIPADDRESS              = 0x70
	IFT_VIRTUALTG                     = 0xca
	IFT_VOICEDID                      = 0xd5
	IFT_VOICEEM                       = 0x64
	IFT_VOICEEMFGD                    = 0xd3
	IFT_VOICEENCAP                    = 0x67
	IFT_VOICEFGDEANA                  = 0xd4
	IFT_VOICEFXO                      = 0x65
	IFT_VOICEFXS                      = 0x66
	IFT_VOICEOVERATM                  = 0x98
	IFT_VOICEOVERCABLE                = 0xc6
	IFT_VOICEOVERFRAMERELAY           = 0x99
	IFT_VOICEOVERIP                   = 0x68
	IFT_X213                          = 0x5d
	IFT_X25                           = 0x5
	IFT_X25DDN                        = 0x4
	IFT_X25HUNTGROUP                  = 0x7a
	IFT_X25MLP                        = 0x79
	IFT_X25PLE                        = 0x28
	IFT_XETHER                        = 0x1a
	IGNBRK                            = 0x1
	IGNCR                             = 0x80
	IGNPAR                            = 0x4
	IMAXBEL                           = 0x2000
	INLCR                             = 0x40
	INPCK                             = 0x10
	IN_CLASSA_HOST                    = 0xffffff
	IN_CLASSA_MAX                     = 0x80
	IN_CLASSA_NET                     = 0xff000000
	IN_CLASSA_NSHIFT                  = 0x18
	IN_CLASSB_HOST                    = 0xffff
	IN_CLASSB_MAX                     = 0x10000
	IN_CLASSB_NET                     = 0xffff0000
	IN_CLASSB_NSHIFT                  = 0x10
	IN_CLASSC_HOST                    = 0xff
	IN_CLASSC_NET                     = 0xffffff00
	IN_CLASSC_NSHIFT                  = 0x8
	IN_CLASSD_HOST                    = 0xfffffff
	IN_CLASSD_NET                     = 0xf0000000
	IN_CLASSD_NSHIFT                  = 0x1c
	IN_LOOPBACKNET                    = 0x7f
	IPPROTO_AH                        = 0x33
	IPPROTO_CARP                      = 0x70
	IPPROTO_DONE                      = 0x101
	IPPROTO_DSTOPTS                   = 0x3c
	IPPROTO_EGP                       = 0x8
	IPPROTO_ENCAP                     = 0x62
	IPPROTO_EON                       = 0x50
	IPPROTO_ESP                       = 0x32
	IPPROTO_ETHERIP                   = 0x61
	IPPROTO_FRAGMENT                  = 0x2c
	IPPROTO_GGP                       = 0x3
	IPPROTO_GRE                       = 0x2f
	IPPROTO_HOPOPTS                   = 0x0
	IPPROTO_ICMP                      = 0x1
	IPPROTO_ICMPV6                    = 0x3a
	IPPROTO_IDP                       = 0x16
	IPPROTO_IGMP                      = 0x2
	IPPROTO_IP                        = 0x0
	IPPROTO_IPCOMP                    = 0x6c
	IPPROTO_IPIP                      = 0x4
	IPPROTO_IPV4                      = 0x4
	IPPROTO_IPV6                      = 0x29
	IPPROTO_IPV6_ICMP                 = 0x3a
	IPPROTO_MAX                       = 0x100
	IPPROTO_MAXID                     = 0x34
	IPPROTO_MOBILE                    = 0x37
	IPPROTO_NONE                      = 0x3b
	IPPROTO_PFSYNC                    = 0xf0
	IPPROTO_PIM                       = 0x67
	IPPROTO_PUP                       = 0xc
	IPPROTO_RAW                       = 0xff
	IPPROTO_ROUTING                   = 0x2b
	IPPROTO_RSVP                      = 0x2e
	IPPROTO_TCP                       = 0x6
	IPPROTO_TP                        = 0x1d
	IPPROTO_UDP                       = 0x11
	IPPROTO_VRRP                      = 0x70
	IPV6_CHECKSUM                     = 0x1a
	IPV6_DEFAULT_MULTICAST_HOPS       = 0x1
	IPV6_DEFAULT_MULTICAST_LOOP       = 0x1
	IPV6_DEFHLIM                      = 0x40
	IPV6_DONTFRAG                     = 0x3e
	IPV6_DSTOPTS                      = 0x32
	IPV6_FAITH                        = 0x1d
	IPV6_FLOWINFO_MASK                = 0xffffff0f
	IPV6_FLOWLABEL_MASK               = 0xffff0f00
	IPV6_FRAGTTL                      = 0x78
	IPV6_HLIMDEC                      = 0x1
	IPV6_HOPLIMIT                     = 0x2f
	IPV6_HOPOPTS                      = 0x31
	IPV6_IPSEC_POLICY                 = 0x1c
	IPV6_JOIN_GROUP                   = 0xc
	IPV6_LEAVE_GROUP                  = 0xd
	IPV6_MAXHLIM                      = 0xff
	IPV6_MAXPACKET                    = 0xffff
	IPV6_MMTU                         = 0x500
	IPV6_MULTICAST_HOPS               = 0xa
	IPV6_MULTICAST_IF                 = 0x9
	IPV6_MULTICAST_LOOP               = 0xb
	IPV6_NEXTHOP                      = 0x30
	IPV6_PATHMTU                      = 0x2c
	IPV6_PKTINFO                      = 0x2e
	IPV6_PORTRANGE                    = 0xe
	IPV6_PORTRANGE_DEFAULT            = 0x0
	IPV6_PORTRANGE_HIGH               = 0x1
	IPV6_PORTRANGE_LOW                = 0x2
	IPV6_RECVDSTOPTS                  = 0x28
	IPV6_RECVHOPLIMIT                 = 0x25
	IPV6_RECVHOPOPTS                  = 0x27
	IPV6_RECVPATHMTU                  = 0x2b
	IPV6_RECVPKTINFO                  = 0x24
	IPV6_RECVRTHDR                    = 0x26
	IPV6_RECVTCLASS                   = 0x39
	IPV6_RTHDR                        = 0x33
	IPV6_RTHDRDSTOPTS                 = 0x23
	IPV6_RTHDR_LOOSE                  = 0x0
	IPV6_RTHDR_STRICT                 = 0x1
	IPV6_RTHDR_TYPE_0                 = 0x0
	IPV6_SOCKOPT_RESERVED1            = 0x3
	IPV6_TCLASS                       = 0x3d
	IPV6_UNICAST_HOPS                 = 0x4
	IPV6_USE_MIN_MTU                  = 0x2a
	IPV6_V6ONLY                       = 0x1b
	IPV6_VERSION                      = 0x60
	IPV6_VERSION_MASK                 = 0xf0
	IP_ADD_MEMBERSHIP                 = 0xc
	IP_DEFAULT_MULTICAST_LOOP         = 0x1
	IP_DEFAULT_MULTICAST_TTL          = 0x1
	IP_DF                             = 0x4000
	IP_DROP_MEMBERSHIP                = 0xd
	IP_EF                             = 0x8000
	IP_ERRORMTU                       = 0x15
	IP_HDRINCL                        = 0x2
	IP_IPSEC_POLICY                   = 0x16
	IP_MAXPACKET                      = 0xffff
	IP_MAX_MEMBERSHIPS                = 0x14
	IP_MF                             = 0x2000
	IP_MINFRAGSIZE                    = 0x45
	IP_MINTTL                         = 0x18
	IP_MSS                            = 0x240
	IP_MULTICAST_IF                   = 0x9
	IP_MULTICAST_LOOP                 = 0xb
	IP_MULTICAST_TTL                  = 0xa
	IP_OFFMASK                        = 0x1fff
	IP_OPTIONS                        = 0x1
	IP_PORTRANGE                      = 0x13
	IP_PORTRANGE_DEFAULT              = 0x0
	IP_PORTRANGE_HIGH                 = 0x1
	IP_PORTRANGE_LOW                  = 0x2
	IP_RECVDSTADDR                    = 0x7
	IP_RECVIF                         = 0x14
	IP_RECVOPTS                       = 0x5
	IP_RECVRETOPTS                    = 0x6
	IP_RECVTTL                        = 0x17
	IP_RETOPTS                        = 0x8
	IP_RF                             = 0x8000
	IP_TOS                            = 0x3
	IP_TTL                            = 0x4
	ISIG                              = 0x80
	ISTRIP                            = 0x20
	IXANY                             = 0x800
	IXOFF                             = 0x400
	IXON                              = 0x200
	KERN_HOSTNAME                     = 0xa
	KERN_OSRELEASE                    = 0x2
	KERN_OSTYPE                       = 0x1
	KERN_VERSION                      = 0x4
	LOCK_EX                           = 0x2
	LOCK_NB                           = 0x4
	LOCK_SH                           = 0x1
	LOCK_UN                           = 0x8
	MADV_DONTNEED                     = 0x4
	MADV_FREE                         = 0x6
	MADV_NORMAL                       = 0x0
	MADV_RANDOM                       = 0x1
	MADV_SEQUENTIAL                   = 0x2
	MADV_SPACEAVAIL                   = 0x5
	MADV_WILLNEED                     = 0x3
	MAP_ALIGNMENT_16MB                = 0x18000000
	MAP_ALIGNMENT_1TB                 = 0x28000000
	MAP_ALIGNMENT_256TB               = 0x30000000
	MAP_ALIGNMENT_4GB                 = 0x20000000
	MAP_ALIGNMENT_64KB                = 0x10000000
	MAP_ALIGNMENT_64PB                = 0x38000000
	MAP_ALIGNMENT_MASK                = -0x1000000
	MAP_ALIGNMENT_SHIFT               = 0x18
	MAP_ANON                          = 0x1000
	MAP_FILE                          = 0x0
	MAP_FIXED                         = 0x10
	MAP_HASSEMAPHORE                  = 0x200
	MAP_INHERIT                       = 0x80
	MAP_INHERIT_COPY                  = 0x1
	MAP_INHERIT_DEFAULT               = 0x1
	MAP_INHERIT_DONATE_COPY           = 0x3
	MAP_INHERIT_NONE                  = 0x2
	MAP_INHERIT_SHARE                 = 0x0
	MAP_NORESERVE                     = 0x40
	MAP_PRIVATE                       = 0x2
	MAP_RENAME                        = 0x20
	MAP_SHARED                        = 0x1
	MAP_STACK                         = 0x2000
	MAP_TRYFIXED                      = 0x400
	MAP_WIRED                         = 0x800
	MCL_CURRENT                       = 0x1
	MCL_FUTURE                        = 0x2
	MNT_ASYNC                         = 0x40
	MNT_BASIC_FLAGS                   = 0xe782807f
	MNT_DEFEXPORTED                   = 0x200
	MNT_DISCARD                       = 0x800000
	MNT_EXKERB                        = 0x800
	MNT_EXNORESPORT                   = 0x8000000
	MNT_EXPORTANON                    = 0x400
	MNT_EXPORTED                      = 0x100
	MNT_EXPUBLIC                      = 0x10000000
	MNT_EXRDONLY                      = 0x80
	MNT_EXTATTR                       = 0x1000000
	MNT_FORCE                         = 0x80000
	MNT_GETARGS                       = 0x400000
	MNT_IGNORE                        = 0x100000
	MNT_LAZY                          = 0x3
	MNT_LOCAL                         = 0x1000
	MNT_LOG                           = 0x2000000
	MNT_NOATIME                       = 0x4000000
	MNT_NOCOREDUMP                    = 0x8000
	MNT_NODEV                         = 0x10
	MNT_NODEVMTIME                    = 0x40000000
	MNT_NOEXEC                        = 0x4
	MNT_NOSUID                        = 0x8
	MNT_NOWAIT                        = 0x2
	MNT_OP_FLAGS                      = 0x4d0000
	MNT_QUOTA                         = 0x2000
	MNT_RDONLY                        = 0x1
	MNT_RELATIME                      = 0x20000
	MNT_RELOAD                        = 0x40000
	MNT_ROOTFS                        = 0x4000
	MNT_SOFTDEP                       = 0x80000000
	MNT_SYMPERM                       = 0x20000000
	MNT_SYNCHRONOUS                   = 0x2
	MNT_UNION                         = 0x20
	MNT_UPDATE                        = 0x10000
	MNT_VISFLAGMASK                   = 0xff90ffff
	MNT_WAIT                          = 0x1
	MSG_BCAST                         = 0x100
	MSG_CMSG_CLOEXEC                  = 0x800
	MSG_CONTROLMBUF                   = 0x2000000
	MSG_CTRUNC                        = 0x20
	MSG_DONTROUTE                     = 0x4
	MSG_DONTWAIT                      = 0x80
	MSG_EOR                           = 0x8
	MSG_IOVUSRSPACE                   = 0x4000000
	MSG_LENUSRSPACE                   = 0x8000000
	MSG_MCAST                         = 0x200
	MSG_NAMEMBUF                      = 0x1000000
	MSG_NBIO                          = 0x1000
	MSG_NOSIGNAL                      = 0x400
	MSG_OOB                           = 0x1
	MSG_PEEK                          = 0x2
	MSG_TRUNC                         = 0x10
	MSG_USERFLAGS                     = 0xffffff
	MSG_WAITALL                       = 0x40
	MS_ASYNC                          = 0x1
	MS_INVALIDATE                     = 0x2
	MS_SYNC                           = 0x4
	NAME_MAX                          = 0x1ff
	NET_RT_DUMP                       = 0x1
	NET_RT_FLAGS                      = 0x2
	NET_RT_IFLIST                     = 0x5
	NET_RT_MAXID                      = 0x6
	NET_RT_OIFLIST                    = 0x4
	NET_RT_OOIFLIST                   = 0x3
	NFDBITS                           = 0x20
	NOFLSH                            = 0x80000000
	NOTE_ATTRIB                       = 0x8
	NOTE_CHILD                        = 0x4
	NOTE_DELETE                       = 0x1
	NOTE_EXEC                         = 0x20000000
	NOTE_EXIT                         = 0x80000000
	NOTE_EXTEND                       = 0x4
	NOTE_FORK                         = 0x40000000
	NOTE_LINK                         = 0x10
	NOTE_LOWAT                        = 0x1
	NOTE_PCTRLMASK                    = 0xf0000000
	NOTE_PDATAMASK                    = 0xfffff
	NOTE_RENAME                       = 0x20
	NOTE_REVOKE                       = 0x40
	NOTE_TRACK                        = 0x1
	NOTE_TRACKERR                     = 0x2
	NOTE_WRITE                        = 0x2
	OCRNL                             = 0x10
	OFIOGETBMAP                       = 0xc004667a
	ONLCR                             = 0x2
	ONLRET                            = 0x40
	ONOCR                             = 0x20
	ONOEOT                            = 0x8
	OPOST                             = 0x1
	O_ACCMODE                         = 0x3
	O_ALT_IO                          = 0x40000
	O_APPEND                          = 0x8
	O_ASYNC                           = 0x40
	O_CLOEXEC                         = 0x400000
	O_CREAT                           = 0x200
	O_DIRECT                          = 0x80000
	O_DIRECTORY                       = 0x200000
	O_DSYNC                           = 0x10000
	O_EXCL                            = 0x800
	O_EXLOCK                          = 0x20
	O_FSYNC                           = 0x80
	O_NDELAY                          = 0x4
	O_NOCTTY                          = 0x8000
	O_NOFOLLOW                        = 0x100
	O_NONBLOCK                        = 0x4
	O_NOSIGPIPE                       = 0x1000000
	O_RDONLY                          = 0x0
	O_RDWR                            = 0x2
	O_RSYNC                           = 0x20000
	O_SHLOCK                          = 0x10
	O_SYNC                            = 0x80
	O_TRUNC                           = 0x400
	O_WRONLY                          = 0x1
	PARENB                            = 0x1000
	PARMRK                            = 0x8
	PARODD                            = 0x2000
	PENDIN                            = 0x20000000
	PRIO_PGRP                         = 0x1
	PRIO_PROCESS                      = 0x0
	PRIO_USER                         = 0x2
	PRI_IOFLUSH                       = 0x7c
	PROT_EXEC                         = 0x4
	PROT_NONE                         = 0x0
	PROT_READ                         = 0x1
	PROT_WRITE                        = 0x2
	RLIMIT_AS                         = 0xa
	RLIMIT_CORE                       = 0x4
	RLIMIT_CPU                        = 0x0
	RLIMIT_DATA                       = 0x2
	RLIMIT_FSIZE                      = 0x1
	RLIMIT_MEMLOCK                    = 0x6
	RLIMIT_NOFILE                     = 0x8
	RLIMIT_NPROC                      = 0x7
	RLIMIT_RSS                        = 0x5
	RLIMIT_STACK                      = 0x3
	RLIM_INFINITY                     = 0x7fffffffffffffff
	RTAX_AUTHOR                       = 0x6
	RTAX_BRD                          = 0x7
	RTAX_DST                          = 0x0
	RTAX_GATEWAY                      = 0x1
	RTAX_GENMASK                      = 0x3
	RTAX_IFA                          = 0x5
	RTAX_IFP                          = 0x4
	RTAX_MAX                          = 0x9
	RTAX_NETMASK                      = 0x2
	RTAX_TAG                          = 0x8
	RTA_AUTHOR                        = 0x40
	RTA_BRD                           = 0x80
	RTA_DST                           = 0x1
	RTA_GATEWAY                       = 0x2
	RTA_GENMASK                       = 0x8
	RTA_IFA                           = 0x20
	RTA_IFP                           = 0x10
	RTA_NETMASK                       = 0x4
	RTA_TAG                           = 0x100
	RTF_ANNOUNCE                      = 0x20000
	RTF_BLACKHOLE                     = 0x1000
	RTF_CLONED                        = 0x2000
	RTF_CLONING                       = 0x100
	RTF_DONE                          = 0x40
	RTF_DYNAMIC                       = 0x10
	RTF_GATEWAY                       = 0x2
	RTF_HOST                          = 0x4
	RTF_LLINFO                        = 0x400
	RTF_MASK                          = 0x80
	RTF_MODIFIED                      = 0x20
	RTF_PROTO1                        = 0x8000
	RTF_PROTO2                        = 0x4000
	RTF_REJECT                        = 0x8
	RTF_SRC                           = 0x10000
	RTF_STATIC                        = 0x800
	RTF_UP                            = 0x1
	RTF_XRESOLVE                      = 0x200
	RTM_ADD                           = 0x1
	RTM_CHANGE                        = 0x3
	RTM_CHGADDR                       = 0x15
	RTM_DELADDR                       = 0xd
	RTM_DELETE                        = 0x2
	RTM_GET                           = 0x4
	RTM_IEEE80211                     = 0x11
	RTM_IFANNOUNCE                    = 0x10
	RTM_IFINFO                        = 0x14
	RTM_LLINFO_UPD                    = 0x13
	RTM_LOCK                          = 0x8
	RTM_LOSING                        = 0x5
	RTM_MISS                          = 0x7
	RTM_NEWADDR                       = 0xc
	RTM_OIFINFO                       = 0xf
	RTM_OLDADD                        = 0x9
	RTM_OLDDEL                        = 0xa
	RTM_OOIFINFO                      = 0xe
	RTM_REDIRECT                      = 0x6
	RTM_RESOLVE                       = 0xb
	RTM_RTTUNIT                       = 0xf4240
	RTM_SETGATE                       = 0x12
	RTM_VERSION                       = 0x4
	RTV_EXPIRE                        = 0x4
	RTV_HOPCOUNT                      = 0x2
	RTV_MTU                           = 0x1
	RTV_RPIPE                         = 0x8
	RTV_RTT                           = 0x40
	RTV_RTTVAR                        = 0x80
	RTV_SPIPE                         = 0x10
	RTV_SSTHRESH                      = 0x20
	RUSAGE_CHILDREN                   = -0x1
	RUSAGE_SELF                       = 0x0
	SCM_CREDS                         = 0x4
	SCM_RIGHTS                        = 0x1
	SCM_TIMESTAMP                     = 0x8
	SHUT_RD                           = 0x0
	SHUT_RDWR                         = 0x2
	SHUT_WR                           = 0x1
	SIOCADDMULTI                      = 0x80906931
	SIOCADDRT                         = 0x8038720a
	SIOCAIFADDR                       = 0x8040691a
	SIOCALIFADDR                      = 0x8118691c
	SIOCATMARK                        = 0x40047307
	SIOCDELMULTI                      = 0x80906932
	SIOCDELRT                         = 0x8038720b
	SIOCDIFADDR                       = 0x80906919
	SIOCDIFPHYADDR                    = 0x80906949
	SIOCDLIFADDR                      = 0x8118691e
	SIOCGDRVSPEC                      = 0xc028697b
	SIOCGETPFSYNC                     = 0xc09069f8
	SIOCGETSGCNT                      = 0xc0207534
	SIOCGETVIFCNT                     = 0xc0287533
	SIOCGHIWAT                        = 0x40047301
	SIOCGIFADDR                       = 0xc0906921
	SIOCGIFADDRPREF                   = 0xc0986920
	SIOCGIFALIAS                      = 0xc040691b
	SIOCGIFBRDADDR                    = 0xc0906923
	SIOCGIFCAP                        = 0xc0206976
	SIOCGIFCONF                       = 0xc0106926
	SIOCGIFDATA                       = 0xc0986985
	SIOCGIFDLT                        = 0xc0906977
	SIOCGIFDSTADDR                    = 0xc0906922
	SIOCGIFFLAGS                      = 0xc0906911
	SIOCGIFGENERIC                    = 0xc090693a
	SIOCGIFMEDIA                      = 0xc0306936
	SIOCGIFMETRIC                     = 0xc0906917
	SIOCGIFMTU                        = 0xc090697e
	SIOCGIFNETMASK                    = 0xc0906925
	SIOCGIFPDSTADDR                   = 0xc0906948
	SIOCGIFPSRCADDR                   = 0xc0906947
	SIOCGLIFADDR                      = 0xc118691d
	SIOCGLIFPHYADDR                   = 0xc118694b
	SIOCGLINKSTR                      = 0xc0286987
	SIOCGLOWAT                        = 0x40047303
	SIOCGPGRP                         = 0x40047309
	SIOCGVH                           = 0xc0906983
	SIOCIFCREATE                      = 0x8090697a
	SIOCIFDESTROY                     = 0x80906979
	SIOCIFGCLONERS                    = 0xc0106978
	SIOCINITIFADDR                    = 0xc0706984
	SIOCSDRVSPEC                      = 0x8028697b
	SIOCSETPFSYNC                     = 0x809069f7
	SIOCSHIWAT                        = 0x80047300
	SIOCSIFADDR                       = 0x8090690c
	SIOCSIFADDRPREF                   = 0x8098691f
	SIOCSIFBRDADDR                    = 0x80906913
	SIOCSIFCAP                        = 0x80206975
	SIOCSIFDSTADDR                    = 0x8090690e
	SIOCSIFFLAGS                      = 0x80906910
	SIOCSIFGENERIC                    = 0x80906939
	SIOCSIFMEDIA                      = 0xc0906935
	SIOCSIFMETRIC                     = 0x80906918
	SIOCSIFMTU                        = 0x8090697f
	SIOCSIFNETMASK                    = 0x80906916
	SIOCSIFPHYADDR                    = 0x80406946
	SIOCSLIFPHYADDR                   = 0x8118694a
	SIOCSLINKSTR                      = 0x80286988
	SIOCSLOWAT                        = 0x80047302
	SIOCSPGRP                         = 0x80047308
	SIOCSVH                           = 0xc0906982
	SIOCZIFDATA                       = 0xc0986986
	SOCK_CLOEXEC                      = 0x10000000
	SOCK_DGRAM                        = 0x2
	SOCK_FLAGS_MASK                   = 0xf0000000
	SOCK_NONBLOCK                     = 0x20000000
	SOCK_NOSIGPIPE                    = 0x40000000
	SOCK_RAW                          = 0x3
	SOCK_RDM                          = 0x4
	SOCK_SEQPACKET                    = 0x5
	SOCK_STREAM                       = 0x1
	SOL_SOCKET                        = 0xffff
	SOMAXCONN                         = 0x80
	SO_ACCEPTCONN                     = 0x2
	SO_ACCEPTFILTER                   = 0x1000
	SO_BROADCAST                      = 0x20
	SO_DEBUG                          = 0x1
	SO_DONTROUTE                      = 0x10
	SO_ERROR                          = 0x1007
	SO_KEEPALIVE                      = 0x8
	SO_LINGER                         = 0x80
	SO_NOHEADER                       = 0x100a
	SO_NOSIGPIPE                      = 0x800
	SO_OOBINLINE                      = 0x100
	SO_OVERFLOWED                     = 0x1009
	SO_RCVBUF                         = 0x1002
	SO_RCVLOWAT                       = 0x1004
	SO_RCVTIMEO                       = 0x100c
	SO_REUSEADDR                      = 0x4
	SO_REUSEPORT                      = 0x200
	SO_SNDBUF                         = 0x1001
	SO_SNDLOWAT                       = 0x1003
	SO_SNDTIMEO                       = 0x100b
	SO_TIMESTAMP                      = 0x2000
	SO_TYPE                           = 0x1008
	SO_USELOOPBACK                    = 0x40
	SYSCTL_VERSION                    = 0x1000000
	SYSCTL_VERS_0                     = 0x0
	SYSCTL_VERS_1                     = 0x1000000
	SYSCTL_VERS_MASK                  = 0xff000000
	S_ARCH1                           = 0x10000
	S_ARCH2                           = 0x20000
	S_BLKSIZE                         = 0x200
	S_IEXEC                           = 0x40
	S_IFBLK                           = 0x6000
	S_IFCHR                           = 0x2000
	S_IFDIR                           = 0x4000
	S_IFIFO                           = 0x1000
	S_IFLNK                           = 0xa000
	S_IFMT                            = 0xf000
	S_IFREG                           = 0x8000
	S_IFSOCK                          = 0xc000
	S_IFWHT                           = 0xe000
	S_IREAD                           = 0x100
	S_IRGRP                           = 0x20
	S_IROTH                           = 0x4
	S_IRUSR                           = 0x100
	S_IRWXG                           = 0x38
	S_IRWXO                           = 0x7
	S_IRWXU                           = 0x1c0
	S_ISGID                           = 0x400
	S_ISTXT                           = 0x200
	S_ISUID                           = 0x800
	S_ISVTX                           = 0x200
	S_IWGRP                           = 0x10
	S_IWOTH                           = 0x2
	S_IWRITE                          = 0x80
	S_IWUSR                           = 0x80
	S_IXGRP                           = 0x8
	S_IXOTH                           = 0x1
	S_IXUSR                           = 0x40
	S_LOGIN_SET                       = 0x1
	TCIFLUSH                          = 0x1
	TCIOFLUSH                         = 0x3
	TCOFLUSH                          = 0x2
	TCP_CONGCTL                       = 0x20
	TCP_KEEPCNT                       = 0x6
	TCP_KEEPIDLE                      = 0x3
	TCP_KEEPINIT                      = 0x7
	TCP_KEEPINTVL                     = 0x5
	TCP_MAXBURST                      = 0x4
	TCP_MAXSEG                        = 0x2
	TCP_MAXWIN                        = 0xffff
	TCP_MAX_WINSHIFT                  = 0xe
	TCP_MD5SIG                        = 0x10
	TCP_MINMSS                        = 0xd8
	TCP_MSS                           = 0x218
	TCP_NODELAY                       = 0x1
	TCSAFLUSH                         = 0x2
	TIOCCBRK                          = 0x2000747a
	TIOCCDTR                          = 0x20007478
	TIOCCONS                          = 0x80047462
	TIOCDCDTIMESTAMP                  = 0x40107458
	TIOCDRAIN                         = 0x2000745e
	TIOCEXCL                          = 0x2000740d
	TIOCEXT                           = 0x80047460
	TIOCFLAG_CDTRCTS                  = 0x10
	TIOCFLAG_CLOCAL                   = 0x2
	TIOCFLAG_CRTSCTS                  = 0x4
	TIOCFLAG_MDMBUF                   = 0x8
	TIOCFLAG_SOFTCAR                  = 0x1
	TIOCFLUSH                         = 0x80047410
	TIOCGETA                          = 0x402c7413
	TIOCGETD                          = 0x4004741a
	TIOCGFLAGS                        = 0x4004745d
	TIOCGLINED                        = 0x40207442
	TIOCGPGRP                         = 0x40047477
	TIOCGQSIZE                        = 0x40047481
	TIOCGRANTPT                       = 0x20007447
	TIOCGSID                          = 0x40047463
	TIOCGSIZE                         = 0x40087468
	TIOCGWINSZ                        = 0x40087468
	TIOCMBIC                          = 0x8004746b
	TIOCMBIS                          = 0x8004746c
	TIOCMGET                          = 0x4004746a
	TIOCMSET                          = 0x8004746d
	TIOCM_CAR                         = 0x40
	TIOCM_CD                          = 0x40
	TIOCM_CTS                         = 0x20
	TIOCM_DSR                         = 0x100
	TIOCM_DTR                         = 0x2
	TIOCM_LE                          = 0x1
	TIOCM_RI                          = 0x80
	TIOCM_RNG                         = 0x80
	TIOCM_RTS                         = 0x4
	TIOCM_SR                          = 0x10
	TIOCM_ST                          = 0x8
	TIOCNOTTY                         = 0x20007471
	TIOCNXCL                          = 0x2000740e
	TIOCOUTQ                          = 0x40047473
	TIOCPKT                           = 0x80047470
	TIOCPKT_DATA                      = 0x0
	TIOCPKT_DOSTOP                    = 0x20
	TIOCPKT_FLUSHREAD                 = 0x1
	TIOCPKT_FLUSHWRITE                = 0x2
	TIOCPKT_IOCTL                     = 0x40
	TIOCPKT_NOSTOP                    = 0x10
	TIOCPKT_START                     = 0x8
	TIOCPKT_STOP                      = 0x4
	TIOCPTMGET                        = 0x40287446
	TIOCPTSNAME                       = 0x40287448
	TIOCRCVFRAME                      = 0x80087445
	TIOCREMOTE                        = 0x80047469
	TIOCSBRK                          = 0x2000747b
	TIOCSCTTY                         = 0x20007461
	TIOCSDTR                          = 0x20007479
	TIOCSETA                          = 0x802c7414
	TIOCSETAF                         = 0x802c7416
	TIOCSETAW                         = 0x802c7415
	TIOCSETD                          = 0x8004741b
	TIOCSFLAGS                        = 0x8004745c
	TIOCSIG                           = 0x2000745f
	TIOCSLINED                        = 0x80207443
	TIOCSPGRP                         = 0x80047476
	TIOCSQSIZE                        = 0x80047480
	TIOCSSIZE                         = 0x80087467
	TIOCSTART                         = 0x2000746e
	TIOCSTAT                          = 0x80047465
	TIOCSTI                           = 0x80017472
	TIOCSTOP                          = 0x2000746f
	TIOCSWINSZ                        = 0x80087467
	TIOCUCNTL                         = 0x80047466
	TIOCXMTFRAME                      = 0x80087444
	TOSTOP                            = 0x400000
	VDISCARD                          = 0xf
	VDSUSP                            = 0xb
	VEOF                              = 0x0
	VEOL                              = 0x1
	VEOL2                             = 0x2
	VERASE                            = 0x3
	VINTR                             = 0x8
	VKILL                             = 0x5
	VLNEXT                            = 0xe
	VMIN                              = 0x10
	VQUIT                             = 0x9
	VREPRINT                          = 0x6
	VSTART                            = 0xc
	VSTATUS                           = 0x12
	VSTOP                             = 0xd
	VSUSP                             = 0xa
	VTIME                             = 0x11
	VWERASE                           = 0x4
	WALL                              = 0x8
	WALLSIG                           = 0x8
	WALTSIG                           = 0x4
	WCLONE                            = 0x4
	WCOREFLAG                         = 0x80
	WNOHANG                           = 0x1
	WNOWAIT                           = 0x10000
	WNOZOMBIE                         = 0x20000
	WOPTSCHECKED                      = 0x40000
	WSTOPPED                          = 0x7f
	WUNTRACED                         = 0x2
)

// Errors
const (
	E2BIG           = syscall.Errno(0x7)
	EACCES          = syscall.Errno(0xd)
	EADDRINUSE      = syscall.Errno(0x30)
	EADDRNOTAVAIL   = syscall.Errno(0x31)
	EAFNOSUPPORT    = syscall.Errno(0x2f)
	EAGAIN          = syscall.Errno(0x23)
	EALREADY        = syscall.Errno(0x25)
	EAUTH           = syscall.Errno(0x50)
	EBADF           = syscall.Errno(0x9)
	EBADMSG         = syscall.Errno(0x58)
	EBADRPC         = syscall.Errno(0x48)
	EBUSY           = syscall.Errno(0x10)
	ECANCELED       = syscall.Errno(0x57)
	ECHILD          = syscall.Errno(0xa)
	ECONNABORTED    = syscall.Errno(0x35)
	ECONNREFUSED    = syscall.Errno(0x3d)
	ECONNRESET      = syscall.Errno(0x36)
	EDEADLK         = syscall.Errno(0xb)
	EDESTADDRREQ    = syscall.Errno(0x27)
	EDOM            = syscall.Errno(0x21)
	EDQUOT          = syscall.Errno(0x45)
	EEXIST          = syscall.Errno(0x11)
	EFAULT          = syscall.Errno(0xe)
	EFBIG           = syscall.Errno(0x1b)
	EFTYPE          = syscall.Errno(0x4f)
	EHOSTDOWN       = syscall.Errno(0x40)
	EHOSTUNREACH    = syscall.Errno(0x41)
	EIDRM           = syscall.Errno(0x52)
	EILSEQ          = syscall.Errno(0x55)
	EINPROGRESS     = syscall.Errno(0x24)
	EINTR           = syscall.Errno(0x4)
	EINVAL          = syscall.Errno(0x16)
	EIO             = syscall.Errno(0x5)
	EISCONN         = syscall.Errno(0x38)
	EISDIR          = syscall.Errno(0x15)
	ELAST           = syscall.Errno(0x60)
	ELOOP           = syscall.Errno(0x3e)
	EMFILE          = syscall.Errno(0x18)
	EMLINK          = syscall.Errno(0x1f)
	EMSGSIZE        = syscall.Errno(0x28)
	EMULTIHOP       = syscall.Errno(0x5e)
	ENAMETOOLONG    = syscall.Errno(0x3f)
	ENEEDAUTH       = syscall.Errno(0x51)
	ENETDOWN        = syscall.Errno(0x32)
	ENETRESET       = syscall.Errno(0x34)
	ENETUNREACH     = syscall.Errno(0x33)
	ENFILE          = syscall.Errno(0x17)
	ENOATTR         = syscall.Errno(0x5d)
	ENOBUFS         = syscall.Errno(0x37)
	ENODATA         = syscall.Errno(0x59)
	ENODEV          = syscall.Errno(0x13)
	ENOENT          = syscall.Errno(0x2)
	ENOEXEC         = syscall.Errno(0x8)
	ENOLCK          = syscall.Errno(0x4d)
	ENOLINK         = syscall.Errno(0x5f)
	ENOMEM          = syscall.Errno(0xc)
	ENOMSG          = syscall.Errno(0x53)
	ENOPROTOOPT     = syscall.Errno(0x2a)
	ENOSPC          = syscall.Errno(0x1c)
	ENOSR           = syscall.Errno(0x5a)
	ENOSTR          = syscall.Errno(0x5b)
	ENOSYS          = syscall.Errno(0x4e)
	ENOTBLK         = syscall.Errno(0xf)
	ENOTCONN        = syscall.Errno(0x39)
	ENOTDIR         = syscall.Errno(0x14)
	ENOTEMPTY       = syscall.Errno(0x42)
	ENOTSOCK        = syscall.Errno(0x26)
	ENOTSUP         = syscall.Errno(0x56)
	ENOTTY          = syscall.Errno(0x19)
	ENXIO           = syscall.Errno(0x6)
	EOPNOTSUPP      = syscall.Errno(0x2d)
	EOVERFLOW       = syscall.Errno(0x54)
	EPERM           = syscall.Errno(0x1)
	EPFNOSUPPORT    = syscall.Errno(0x2e)
	EPIPE           = syscall.Errno(0x20)
	EPROCLIM        = syscall.Errno(0x43)
	EPROCUNAVAIL    = syscall.Errno(0x4c)
	EPROGMISMATCH   = syscall.Errno(0x4b)
	EPROGUNAVAIL    = syscall.Errno(0x4a)
	EPROTO          = syscall.Errno(0x60)
	EPROTONOSUPPORT = syscall.Errno(0x2b)
	EPROTOTYPE      = syscall.Errno(0x29)
	ERANGE          = syscall.Errno(0x22)
	EREMOTE         = syscall.Errno(0x47)
	EROFS           = syscall.Errno(0x1e)
	ERPCMISMATCH    = syscall.Errno(0x49)
	ESHUTDOWN       = syscall.Errno(0x3a)
	ESOCKTNOSUPPORT = syscall.Errno(0x2c)
	ESPIPE          = syscall.Errno(0x1d)
	ESRCH           = syscall.Errno(0x3)
	ESTALE          = syscall.Errno(0x46)
	ETIME           = syscall.Errno(0x5c)
	ETIMEDOUT       = syscall.Errno(0x3c)
	ETOOMANYREFS    = syscall.Errno(0x3b)
	ETXTBSY         = syscall.Errno(0x1a)
	EUSERS          = syscall.Errno(0x44)
	EWOULDBLOCK     = syscall.Errno(0x23)
	EXDEV           = syscall.Errno(0x12)
)

// Signals
const (
	SIGABRT   = syscall.Signal(0x6)
	SIGALRM   = syscall.Signal(0xe)
	SIGBUS    = syscall.Signal(0xa)
	SIGCHLD   = syscall.Signal(0x14)
	SIGCONT   = syscall.Signal(0x13)
	SIGEMT    = syscall.Signal(0x7)
	SIGFPE    = syscall.Signal(0x8)
	SIGHUP    = syscall.Signal(0x1)
	SIGILL    = syscall.Signal(0x4)
	SIGINFO   = syscall.Signal(0x1d)
	SIGINT    = syscall.Signal(0x2)
	SIGIO     = syscall.Signal(0x17)
	SIGIOT    = syscall.Signal(0x6)
	SIGKILL   = syscall.Signal(0x9)
	SIGPIPE   = syscall.Signal(0xd)
	SIGPROF   = syscall.Signal(0x1b)
	SIGPWR    = syscall.Signal(0x20)
	SIGQUIT   = syscall.Signal(0x3)
	SIGSEGV   = syscall.Signal(0xb)
	SIGSTOP   = syscall.Signal(0x11)
	SIGSYS    = syscall.Signal(0xc)
	SIGTERM   = syscall.Signal(0xf)
	SIGTRAP   = syscall.Signal(0x5)
	SIGTSTP   = syscall.Signal(0x12)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x10)
	SIGUSR1   = syscall.Signal(0x1e)
	SIGUSR2   = syscall.Signal(0x1f)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "device not configured"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EDEADLK", "resource deadlock avoided"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "cross-device link"},
	{19, "ENODEV", "operation not supported by device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "result too large or too small"},
	{35, "EAGAIN", "resource temporarily unavailable"},
	{36, "EINPROGRESS", "operation now in progress"},
	{37, "EALREADY", "operation already in progress"},
	{38, "ENOTSOCK", "socket operation on non-socket"},
	{39, "EDESTADDRREQ", "destination address required"},
	{40, "EMSGSIZE", "message too long"},
	{41, "EPROTOTYPE", "protocol wrong type for socket"},
	{42, "ENOPROTOOPT", "protocol option not available"},
	{43, "EPROTONOSUPPORT", "protocol not supported"},
	{44, "ESOCKTNOSUPPORT", "socket type not supported"},
	{45, "EOPNOTSUPP", "operation not supported"},
	{46, "EPFNOSUPPORT", "protocol family not supported"},
	{47, "EAFNOSUPPORT", "address family not supported by protocol family"},
	{48, "EADDRINUSE", "address already in use"},
	{49, "EADDRNOTAVAIL", "can't assign requested address"},
	{50, "ENETDOWN", "network is down"},
	{51, "ENETUNREACH", "network is unreachable"},
	{52, "ENETRESET", "network dropped connection on reset"},
	{53, "ECONNABORTED", "software caused connection abort"},
	{54, "ECONNRESET", "connection reset by peer"},
	{55, "ENOBUFS", "no buffer space available"},
	{56, "EISCONN", "socket is already connected"},
	{57, "ENOTCONN", "socket is not connected"},
	{58, "ESHUTDOWN", "can't send after socket shutdown"},
	{59, "ETOOMANYREFS", "too many references: can't splice"},
	{60, "ETIMEDOUT", "connection timed out"},
	{61, "ECONNREFUSED", "connection refused"},
	{62, "ELOOP", "too many levels of symbolic links"},
	{63, "ENAMETOOLONG", "file name too long"},
	{64, "EHOSTDOWN", "host is down"},
	{65, "EHOSTUNREACH", "no route to host"},
	{66, "ENOTEMPTY", "directory not empty"},
	{67, "EPROCLIM", "too many processes"},
	{68, "EUSERS", "too many users"},
	{69, "EDQUOT", "disc quota exceeded"},
	{70, "ESTALE", "stale NFS file handle"},
	{71, "EREMOTE", "too many levels of remote in path"},
	{72, "EBADRPC", "RPC struct is bad"},
	{73, "ERPCMISMATCH", "RPC version wrong"},
	{74, "EPROGUNAVAIL", "RPC prog. not avail"},
	{75, "EPROGMISMATCH", "program version wrong"},
	{76, "EPROCUNAVAIL", "bad procedure for program"},
	{77, "ENOLCK", "no locks available"},
	{78, "ENOSYS", "function not implemented"},
	{79, "EFTYPE", "inappropriate file type or format"},
	{80, "EAUTH", "authentication error"},
	{81, "ENEEDAUTH", "need authenticator"},
	{82, "EIDRM", "identifier removed"},
	{83, "ENOMSG", "no message of desired type"},
	{84, "EOVERFLOW", "value too large to be stored in data type"},
	{85, "EILSEQ", "illegal byte sequence"},
	{86, "ENOTSUP", "not supported"},
	{87, "ECANCELED", "operation Canceled"},
	{88, "EBADMSG", "bad or Corrupt message"},
	{89, "ENODATA", "no message available"},
	{90, "ENOSR", "no STREAM resources"},
	{91, "ENOSTR", "not a STREAM"},
	{92, "ETIME", "STREAM ioctl timeout"},
	{93, "ENOATTR", "attribute not found"},
	{94, "EMULTIHOP", "multihop attempted"},
	{95, "ENOLINK", "link has been severed"},
	{96, "ELAST", "protocol error"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/BPT trap"},
	{6, "SIGIOT", "abort trap"},
	{7, "SIGEMT", "EMT trap"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus error"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGSYS", "bad system call"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGURG", "urgent I/O condition"},
	{17, "SIGSTOP", "stopped (signal)"},
	{18, "SIGTSTP", "stopped"},
	{19, "SIGCONT", "continued"},
	{20, "SIGCHLD", "child exited"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGIO", "I/O possible"},
	{24, "SIGXCPU", "cputime limit exceeded"},
	{25, "SIGXFSZ", "filesize limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window size changes"},
	{29, "SIGINFO", "information request"},
	{30, "SIGUSR1", "user defined signal 1"},
	{31, "SIGUSR2", "user defined signal 2"},
	{32, "SIGPWR", "power fail/restart"},
}
 07070100000E3C000081A4000000000000000000000001645E367C00011FA4000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go    // mkerrors.sh -marm
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build arm && netbsd
// +build arm,netbsd

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -marm _const.go

package unix

import "syscall"

const (
	AF_APPLETALK                      = 0x10
	AF_ARP                            = 0x1c
	AF_BLUETOOTH                      = 0x1f
	AF_CCITT                          = 0xa
	AF_CHAOS                          = 0x5
	AF_CNT                            = 0x15
	AF_COIP                           = 0x14
	AF_DATAKIT                        = 0x9
	AF_DECnet                         = 0xc
	AF_DLI                            = 0xd
	AF_E164                           = 0x1a
	AF_ECMA                           = 0x8
	AF_HYLINK                         = 0xf
	AF_IEEE80211                      = 0x20
	AF_IMPLINK                        = 0x3
	AF_INET                           = 0x2
	AF_INET6                          = 0x18
	AF_IPX                            = 0x17
	AF_ISDN                           = 0x1a
	AF_ISO                            = 0x7
	AF_LAT                            = 0xe
	AF_LINK                           = 0x12
	AF_LOCAL                          = 0x1
	AF_MAX                            = 0x23
	AF_MPLS                           = 0x21
	AF_NATM                           = 0x1b
	AF_NS                             = 0x6
	AF_OROUTE                         = 0x11
	AF_OSI                            = 0x7
	AF_PUP                            = 0x4
	AF_ROUTE                          = 0x22
	AF_SNA                            = 0xb
	AF_UNIX                           = 0x1
	AF_UNSPEC                         = 0x0
	ARPHRD_ARCNET                     = 0x7
	ARPHRD_ETHER                      = 0x1
	ARPHRD_FRELAY                     = 0xf
	ARPHRD_IEEE1394                   = 0x18
	ARPHRD_IEEE802                    = 0x6
	ARPHRD_STRIP                      = 0x17
	B0                                = 0x0
	B110                              = 0x6e
	B115200                           = 0x1c200
	B1200                             = 0x4b0
	B134                              = 0x86
	B14400                            = 0x3840
	B150                              = 0x96
	B1800                             = 0x708
	B19200                            = 0x4b00
	B200                              = 0xc8
	B230400                           = 0x38400
	B2400                             = 0x960
	B28800                            = 0x7080
	B300                              = 0x12c
	B38400                            = 0x9600
	B460800                           = 0x70800
	B4800                             = 0x12c0
	B50                               = 0x32
	B57600                            = 0xe100
	B600                              = 0x258
	B7200                             = 0x1c20
	B75                               = 0x4b
	B76800                            = 0x12c00
	B921600                           = 0xe1000
	B9600                             = 0x2580
	BIOCFEEDBACK                      = 0x8004427d
	BIOCFLUSH                         = 0x20004268
	BIOCGBLEN                         = 0x40044266
	BIOCGDLT                          = 0x4004426a
	BIOCGDLTLIST                      = 0xc0084277
	BIOCGETIF                         = 0x4090426b
	BIOCGFEEDBACK                     = 0x4004427c
	BIOCGHDRCMPLT                     = 0x40044274
	BIOCGRTIMEOUT                     = 0x400c427b
	BIOCGSEESENT                      = 0x40044278
	BIOCGSTATS                        = 0x4080426f
	BIOCGSTATSOLD                     = 0x4008426f
	BIOCIMMEDIATE                     = 0x80044270
	BIOCPROMISC                       = 0x20004269
	BIOCSBLEN                         = 0xc0044266
	BIOCSDLT                          = 0x80044276
	BIOCSETF                          = 0x80084267
	BIOCSETIF                         = 0x8090426c
	BIOCSFEEDBACK                     = 0x8004427d
	BIOCSHDRCMPLT                     = 0x80044275
	BIOCSRTIMEOUT                     = 0x800c427a
	BIOCSSEESENT                      = 0x80044279
	BIOCSTCPF                         = 0x80084272
	BIOCSUDPF                         = 0x80084273
	BIOCVERSION                       = 0x40044271
	BPF_A                             = 0x10
	BPF_ABS                           = 0x20
	BPF_ADD                           = 0x0
	BPF_ALIGNMENT                     = 0x4
	BPF_ALIGNMENT32                   = 0x4
	BPF_ALU                           = 0x4
	BPF_AND                           = 0x50
	BPF_B                             = 0x10
	BPF_DFLTBUFSIZE                   = 0x100000
	BPF_DIV                           = 0x30
	BPF_H                             = 0x8
	BPF_IMM                           = 0x0
	BPF_IND                           = 0x40
	BPF_JA                            = 0x0
	BPF_JEQ                           = 0x10
	BPF_JGE                           = 0x30
	BPF_JGT                           = 0x20
	BPF_JMP                           = 0x5
	BPF_JSET                          = 0x40
	BPF_K                             = 0x0
	BPF_LD                            = 0x0
	BPF_LDX                           = 0x1
	BPF_LEN                           = 0x80
	BPF_LSH                           = 0x60
	BPF_MAJOR_VERSION                 = 0x1
	BPF_MAXBUFSIZE                    = 0x1000000
	BPF_MAXINSNS                      = 0x200
	BPF_MEM                           = 0x60
	BPF_MEMWORDS                      = 0x10
	BPF_MINBUFSIZE                    = 0x20
	BPF_MINOR_VERSION                 = 0x1
	BPF_MISC                          = 0x7
	BPF_MSH                           = 0xa0
	BPF_MUL                           = 0x20
	BPF_NEG                           = 0x80
	BPF_OR                            = 0x40
	BPF_RELEASE                       = 0x30bb6
	BPF_RET                           = 0x6
	BPF_RSH                           = 0x70
	BPF_ST                            = 0x2
	BPF_STX                           = 0x3
	BPF_SUB                           = 0x10
	BPF_TAX                           = 0x0
	BPF_TXA                           = 0x80
	BPF_W                             = 0x0
	BPF_X                             = 0x8
	BRKINT                            = 0x2
	CFLUSH                            = 0xf
	CLOCAL                            = 0x8000
	CPUSTATES                         = 0x5
	CP_IDLE                           = 0x4
	CP_INTR                           = 0x3
	CP_NICE                           = 0x1
	CP_SYS                            = 0x2
	CP_USER                           = 0x0
	CREAD                             = 0x800
	CRTSCTS                           = 0x10000
	CS5                               = 0x0
	CS6                               = 0x100
	CS7                               = 0x200
	CS8                               = 0x300
	CSIZE                             = 0x300
	CSTART                            = 0x11
	CSTATUS                           = 0x14
	CSTOP                             = 0x13
	CSTOPB                            = 0x400
	CSUSP                             = 0x1a
	CTL_HW                            = 0x6
	CTL_KERN                          = 0x1
	CTL_MAXNAME                       = 0xc
	CTL_NET                           = 0x4
	CTL_QUERY                         = -0x2
	DIOCBSFLUSH                       = 0x20006478
	DLT_A429                          = 0xb8
	DLT_A653_ICM                      = 0xb9
	DLT_AIRONET_HEADER                = 0x78
	DLT_AOS                           = 0xde
	DLT_APPLE_IP_OVER_IEEE1394        = 0x8a
	DLT_ARCNET                        = 0x7
	DLT_ARCNET_LINUX                  = 0x81
	DLT_ATM_CLIP                      = 0x13
	DLT_ATM_RFC1483                   = 0xb
	DLT_AURORA                        = 0x7e
	DLT_AX25                          = 0x3
	DLT_AX25_KISS                     = 0xca
	DLT_BACNET_MS_TP                  = 0xa5
	DLT_BLUETOOTH_HCI_H4              = 0xbb
	DLT_BLUETOOTH_HCI_H4_WITH_PHDR    = 0xc9
	DLT_CAN20B                        = 0xbe
	DLT_CAN_SOCKETCAN                 = 0xe3
	DLT_CHAOS                         = 0x5
	DLT_CISCO_IOS                     = 0x76
	DLT_C_HDLC                        = 0x68
	DLT_C_HDLC_WITH_DIR               = 0xcd
	DLT_DECT                          = 0xdd
	DLT_DOCSIS                        = 0x8f
	DLT_ECONET                        = 0x73
	DLT_EN10MB                        = 0x1
	DLT_EN3MB                         = 0x2
	DLT_ENC                           = 0x6d
	DLT_ERF                           = 0xc5
	DLT_ERF_ETH                       = 0xaf
	DLT_ERF_POS                       = 0xb0
	DLT_FC_2                          = 0xe0
	DLT_FC_2_WITH_FRAME_DELIMS        = 0xe1
	DLT_FDDI                          = 0xa
	DLT_FLEXRAY                       = 0xd2
	DLT_FRELAY                        = 0x6b
	DLT_FRELAY_WITH_DIR               = 0xce
	DLT_GCOM_SERIAL                   = 0xad
	DLT_GCOM_T1E1                     = 0xac
	DLT_GPF_F                         = 0xab
	DLT_GPF_T                         = 0xaa
	DLT_GPRS_LLC                      = 0xa9
	DLT_GSMTAP_ABIS                   = 0xda
	DLT_GSMTAP_UM                     = 0xd9
	DLT_HDLC                          = 0x10
	DLT_HHDLC                         = 0x79
	DLT_HIPPI                         = 0xf
	DLT_IBM_SN                        = 0x92
	DLT_IBM_SP                        = 0x91
	DLT_IEEE802                       = 0x6
	DLT_IEEE802_11                    = 0x69
	DLT_IEEE802_11_RADIO              = 0x7f
	DLT_IEEE802_11_RADIO_AVS          = 0xa3
	DLT_IEEE802_15_4                  = 0xc3
	DLT_IEEE802_15_4_LINUX            = 0xbf
	DLT_IEEE802_15_4_NONASK_PHY       = 0xd7
	DLT_IEEE802_16_MAC_CPS            = 0xbc
	DLT_IEEE802_16_MAC_CPS_RADIO      = 0xc1
	DLT_IPMB                          = 0xc7
	DLT_IPMB_LINUX                    = 0xd1
	DLT_IPNET                         = 0xe2
	DLT_IPV4                          = 0xe4
	DLT_IPV6                          = 0xe5
	DLT_IP_OVER_FC                    = 0x7a
	DLT_JUNIPER_ATM1                  = 0x89
	DLT_JUNIPER_ATM2                  = 0x87
	DLT_JUNIPER_CHDLC                 = 0xb5
	DLT_JUNIPER_ES                    = 0x84
	DLT_JUNIPER_ETHER                 = 0xb2
	DLT_JUNIPER_FRELAY                = 0xb4
	DLT_JUNIPER_GGSN                  = 0x85
	DLT_JUNIPER_ISM                   = 0xc2
	DLT_JUNIPER_MFR                   = 0x86
	DLT_JUNIPER_MLFR                  = 0x83
	DLT_JUNIPER_MLPPP                 = 0x82
	DLT_JUNIPER_MONITOR               = 0xa4
	DLT_JUNIPER_PIC_PEER              = 0xae
	DLT_JUNIPER_PPP                   = 0xb3
	DLT_JUNIPER_PPPOE                 = 0xa7
	DLT_JUNIPER_PPPOE_ATM             = 0xa8
	DLT_JUNIPER_SERVICES              = 0x88
	DLT_JUNIPER_ST                    = 0xc8
	DLT_JUNIPER_VP                    = 0xb7
	DLT_LAPB_WITH_DIR                 = 0xcf
	DLT_LAPD                          = 0xcb
	DLT_LIN                           = 0xd4
	DLT_LINUX_EVDEV                   = 0xd8
	DLT_LINUX_IRDA                    = 0x90
	DLT_LINUX_LAPD                    = 0xb1
	DLT_LINUX_SLL                     = 0x71
	DLT_LOOP                          = 0x6c
	DLT_LTALK                         = 0x72
	DLT_MFR                           = 0xb6
	DLT_MOST                          = 0xd3
	DLT_MPLS                          = 0xdb
	DLT_MTP2                          = 0x8c
	DLT_MTP2_WITH_PHDR                = 0x8b
	DLT_MTP3                          = 0x8d
	DLT_NULL                          = 0x0
	DLT_PCI_EXP                       = 0x7d
	DLT_PFLOG                         = 0x75
	DLT_PFSYNC                        = 0x12
	DLT_PPI                           = 0xc0
	DLT_PPP                           = 0x9
	DLT_PPP_BSDOS                     = 0xe
	DLT_PPP_ETHER                     = 0x33
	DLT_PPP_PPPD                      = 0xa6
	DLT_PPP_SERIAL                    = 0x32
	DLT_PPP_WITH_DIR                  = 0xcc
	DLT_PRISM_HEADER                  = 0x77
	DLT_PRONET                        = 0x4
	DLT_RAIF1                         = 0xc6
	DLT_RAW                           = 0xc
	DLT_RAWAF_MASK                    = 0x2240000
	DLT_RIO                           = 0x7c
	DLT_SCCP                          = 0x8e
	DLT_SITA                          = 0xc4
	DLT_SLIP                          = 0x8
	DLT_SLIP_BSDOS                    = 0xd
	DLT_SUNATM                        = 0x7b
	DLT_SYMANTEC_FIREWALL             = 0x63
	DLT_TZSP                          = 0x80
	DLT_USB                           = 0xba
	DLT_USB_LINUX                     = 0xbd
	DLT_USB_LINUX_MMAPPED             = 0xdc
	DLT_WIHART                        = 0xdf
	DLT_X2E_SERIAL                    = 0xd5
	DLT_X2E_XORAYA                    = 0xd6
	DT_BLK                            = 0x6
	DT_CHR                            = 0x2
	DT_DIR                            = 0x4
	DT_FIFO                           = 0x1
	DT_LNK                            = 0xa
	DT_REG                            = 0x8
	DT_SOCK                           = 0xc
	DT_UNKNOWN                        = 0x0
	DT_WHT                            = 0xe
	ECHO                              = 0x8
	ECHOCTL                           = 0x40
	ECHOE                             = 0x2
	ECHOK                             = 0x4
	ECHOKE                            = 0x1
	ECHONL                            = 0x10
	ECHOPRT                           = 0x20
	EMUL_LINUX                        = 0x1
	EMUL_LINUX32                      = 0x5
	EMUL_MAXID                        = 0x6
	ETHERCAP_JUMBO_MTU                = 0x4
	ETHERCAP_VLAN_HWTAGGING           = 0x2
	ETHERCAP_VLAN_MTU                 = 0x1
	ETHERMIN                          = 0x2e
	ETHERMTU                          = 0x5dc
	ETHERMTU_JUMBO                    = 0x2328
	ETHERTYPE_8023                    = 0x4
	ETHERTYPE_AARP                    = 0x80f3
	ETHERTYPE_ACCTON                  = 0x8390
	ETHERTYPE_AEONIC                  = 0x8036
	ETHERTYPE_ALPHA                   = 0x814a
	ETHERTYPE_AMBER                   = 0x6008
	ETHERTYPE_AMOEBA                  = 0x8145
	ETHERTYPE_APOLLO                  = 0x80f7
	ETHERTYPE_APOLLODOMAIN            = 0x8019
	ETHERTYPE_APPLETALK               = 0x809b
	ETHERTYPE_APPLITEK                = 0x80c7
	ETHERTYPE_ARGONAUT                = 0x803a
	ETHERTYPE_ARP                     = 0x806
	ETHERTYPE_AT                      = 0x809b
	ETHERTYPE_ATALK                   = 0x809b
	ETHERTYPE_ATOMIC                  = 0x86df
	ETHERTYPE_ATT                     = 0x8069
	ETHERTYPE_ATTSTANFORD             = 0x8008
	ETHERTYPE_AUTOPHON                = 0x806a
	ETHERTYPE_AXIS                    = 0x8856
	ETHERTYPE_BCLOOP                  = 0x9003
	ETHERTYPE_BOFL                    = 0x8102
	ETHERTYPE_CABLETRON               = 0x7034
	ETHERTYPE_CHAOS                   = 0x804
	ETHERTYPE_COMDESIGN               = 0x806c
	ETHERTYPE_COMPUGRAPHIC            = 0x806d
	ETHERTYPE_COUNTERPOINT            = 0x8062
	ETHERTYPE_CRONUS                  = 0x8004
	ETHERTYPE_CRONUSVLN               = 0x8003
	ETHERTYPE_DCA                     = 0x1234
	ETHERTYPE_DDE                     = 0x807b
	ETHERTYPE_DEBNI                   = 0xaaaa
	ETHERTYPE_DECAM                   = 0x8048
	ETHERTYPE_DECCUST                 = 0x6006
	ETHERTYPE_DECDIAG                 = 0x6005
	ETHERTYPE_DECDNS                  = 0x803c
	ETHERTYPE_DECDTS                  = 0x803e
	ETHERTYPE_DECEXPER                = 0x6000
	ETHERTYPE_DECLAST                 = 0x8041
	ETHERTYPE_DECLTM                  = 0x803f
	ETHERTYPE_DECMUMPS                = 0x6009
	ETHERTYPE_DECNETBIOS              = 0x8040
	ETHERTYPE_DELTACON                = 0x86de
	ETHERTYPE_DIDDLE                  = 0x4321
	ETHERTYPE_DLOG1                   = 0x660
	ETHERTYPE_DLOG2                   = 0x661
	ETHERTYPE_DN                      = 0x6003
	ETHERTYPE_DOGFIGHT                = 0x1989
	ETHERTYPE_DSMD                    = 0x8039
	ETHERTYPE_ECMA                    = 0x803
	ETHERTYPE_ENCRYPT                 = 0x803d
	ETHERTYPE_ES                      = 0x805d
	ETHERTYPE_EXCELAN                 = 0x8010
	ETHERTYPE_EXPERDATA               = 0x8049
	ETHERTYPE_FLIP                    = 0x8146
	ETHERTYPE_FLOWCONTROL             = 0x8808
	ETHERTYPE_FRARP                   = 0x808
	ETHERTYPE_GENDYN                  = 0x8068
	ETHERTYPE_HAYES                   = 0x8130
	ETHERTYPE_HIPPI_FP                = 0x8180
	ETHERTYPE_HITACHI                 = 0x8820
	ETHERTYPE_HP                      = 0x8005
	ETHERTYPE_IEEEPUP                 = 0xa00
	ETHERTYPE_IEEEPUPAT               = 0xa01
	ETHERTYPE_IMLBL                   = 0x4c42
	ETHERTYPE_IMLBLDIAG               = 0x424c
	ETHERTYPE_IP                      = 0x800
	ETHERTYPE_IPAS                    = 0x876c
	ETHERTYPE_IPV6                    = 0x86dd
	ETHERTYPE_IPX                     = 0x8137
	ETHERTYPE_IPXNEW                  = 0x8037
	ETHERTYPE_KALPANA                 = 0x8582
	ETHERTYPE_LANBRIDGE               = 0x8038
	ETHERTYPE_LANPROBE                = 0x8888
	ETHERTYPE_LAT                     = 0x6004
	ETHERTYPE_LBACK                   = 0x9000
	ETHERTYPE_LITTLE                  = 0x8060
	ETHERTYPE_LOGICRAFT               = 0x8148
	ETHERTYPE_LOOPBACK                = 0x9000
	ETHERTYPE_MATRA                   = 0x807a
	ETHERTYPE_MAX                     = 0xffff
	ETHERTYPE_MERIT                   = 0x807c
	ETHERTYPE_MICP                    = 0x873a
	ETHERTYPE_MOPDL                   = 0x6001
	ETHERTYPE_MOPRC                   = 0x6002
	ETHERTYPE_MOTOROLA                = 0x818d
	ETHERTYPE_MPLS                    = 0x8847
	ETHERTYPE_MPLS_MCAST              = 0x8848
	ETHERTYPE_MUMPS                   = 0x813f
	ETHERTYPE_NBPCC                   = 0x3c04
	ETHERTYPE_NBPCLAIM                = 0x3c09
	ETHERTYPE_NBPCLREQ                = 0x3c05
	ETHERTYPE_NBPCLRSP                = 0x3c06
	ETHERTYPE_NBPCREQ                 = 0x3c02
	ETHERTYPE_NBPCRSP                 = 0x3c03
	ETHERTYPE_NBPDG                   = 0x3c07
	ETHERTYPE_NBPDGB                  = 0x3c08
	ETHERTYPE_NBPDLTE                 = 0x3c0a
	ETHERTYPE_NBPRAR                  = 0x3c0c
	ETHERTYPE_NBPRAS                  = 0x3c0b
	ETHERTYPE_NBPRST                  = 0x3c0d
	ETHERTYPE_NBPSCD                  = 0x3c01
	ETHERTYPE_NBPVCD                  = 0x3c00
	ETHERTYPE_NBS                     = 0x802
	ETHERTYPE_NCD                     = 0x8149
	ETHERTYPE_NESTAR                  = 0x8006
	ETHERTYPE_NETBEUI                 = 0x8191
	ETHERTYPE_NOVELL                  = 0x8138
	ETHERTYPE_NS                      = 0x600
	ETHERTYPE_NSAT                    = 0x601
	ETHERTYPE_NSCOMPAT                = 0x807
	ETHERTYPE_NTRAILER                = 0x10
	ETHERTYPE_OS9                     = 0x7007
	ETHERTYPE_OS9NET                  = 0x7009
	ETHERTYPE_PACER                   = 0x80c6
	ETHERTYPE_PAE                     = 0x888e
	ETHERTYPE_PCS                     = 0x4242
	ETHERTYPE_PLANNING                = 0x8044
	ETHERTYPE_PPP                     = 0x880b
	ETHERTYPE_PPPOE                   = 0x8864
	ETHERTYPE_PPPOEDISC               = 0x8863
	ETHERTYPE_PRIMENTS                = 0x7031
	ETHERTYPE_PUP                     = 0x200
	ETHERTYPE_PUPAT                   = 0x200
	ETHERTYPE_RACAL                   = 0x7030
	ETHERTYPE_RATIONAL                = 0x8150
	ETHERTYPE_RAWFR                   = 0x6559
	ETHERTYPE_RCL                     = 0x1995
	ETHERTYPE_RDP                     = 0x8739
	ETHERTYPE_RETIX                   = 0x80f2
	ETHERTYPE_REVARP                  = 0x8035
	ETHERTYPE_SCA                     = 0x6007
	ETHERTYPE_SECTRA                  = 0x86db
	ETHERTYPE_SECUREDATA              = 0x876d
	ETHERTYPE_SGITW                   = 0x817e
	ETHERTYPE_SG_BOUNCE               = 0x8016
	ETHERTYPE_SG_DIAG                 = 0x8013
	ETHERTYPE_SG_NETGAMES             = 0x8014
	ETHERTYPE_SG_RESV                 = 0x8015
	ETHERTYPE_SIMNET                  = 0x5208
	ETHERTYPE_SLOWPROTOCOLS           = 0x8809
	ETHERTYPE_SNA                     = 0x80d5
	ETHERTYPE_SNMP                    = 0x814c
	ETHERTYPE_SONIX                   = 0xfaf5
	ETHERTYPE_SPIDER                  = 0x809f
	ETHERTYPE_SPRITE                  = 0x500
	ETHERTYPE_STP                     = 0x8181
	ETHERTYPE_TALARIS                 = 0x812b
	ETHERTYPE_TALARISMC               = 0x852b
	ETHERTYPE_TCPCOMP                 = 0x876b
	ETHERTYPE_TCPSM                   = 0x9002
	ETHERTYPE_TEC                     = 0x814f
	ETHERTYPE_TIGAN                   = 0x802f
	ETHERTYPE_TRAIL                   = 0x1000
	ETHERTYPE_TRANSETHER              = 0x6558
	ETHERTYPE_TYMSHARE                = 0x802e
	ETHERTYPE_UBBST                   = 0x7005
	ETHERTYPE_UBDEBUG                 = 0x900
	ETHERTYPE_UBDIAGLOOP              = 0x7002
	ETHERTYPE_UBDL                    = 0x7000
	ETHERTYPE_UBNIU                   = 0x7001
	ETHERTYPE_UBNMC                   = 0x7003
	ETHERTYPE_VALID                   = 0x1600
	ETHERTYPE_VARIAN                  = 0x80dd
	ETHERTYPE_VAXELN                  = 0x803b
	ETHERTYPE_VEECO                   = 0x8067
	ETHERTYPE_VEXP                    = 0x805b
	ETHERTYPE_VGLAB                   = 0x8131
	ETHERTYPE_VINES                   = 0xbad
	ETHERTYPE_VINESECHO               = 0xbaf
	ETHERTYPE_VINESLOOP               = 0xbae
	ETHERTYPE_VITAL                   = 0xff00
	ETHERTYPE_VLAN                    = 0x8100
	ETHERTYPE_VLTLMAN                 = 0x8080
	ETHERTYPE_VPROD                   = 0x805c
	ETHERTYPE_VURESERVED              = 0x8147
	ETHERTYPE_WATERLOO                = 0x8130
	ETHERTYPE_WELLFLEET               = 0x8103
	ETHERTYPE_X25                     = 0x805
	ETHERTYPE_X75                     = 0x801
	ETHERTYPE_XNSSM                   = 0x9001
	ETHERTYPE_XTP                     = 0x817d
	ETHER_ADDR_LEN                    = 0x6
	ETHER_CRC_LEN                     = 0x4
	ETHER_CRC_POLY_BE                 = 0x4c11db6
	ETHER_CRC_POLY_LE                 = 0xedb88320
	ETHER_HDR_LEN                     = 0xe
	ETHER_MAX_LEN                     = 0x5ee
	ETHER_MAX_LEN_JUMBO               = 0x233a
	ETHER_MIN_LEN                     = 0x40
	ETHER_PPPOE_ENCAP_LEN             = 0x8
	ETHER_TYPE_LEN                    = 0x2
	ETHER_VLAN_ENCAP_LEN              = 0x4
	EVFILT_AIO                        = 0x2
	EVFILT_PROC                       = 0x4
	EVFILT_READ                       = 0x0
	EVFILT_SIGNAL                     = 0x5
	EVFILT_SYSCOUNT                   = 0x7
	EVFILT_TIMER                      = 0x6
	EVFILT_VNODE                      = 0x3
	EVFILT_WRITE                      = 0x1
	EV_ADD                            = 0x1
	EV_CLEAR                          = 0x20
	EV_DELETE                         = 0x2
	EV_DISABLE                        = 0x8
	EV_ENABLE                         = 0x4
	EV_EOF                            = 0x8000
	EV_ERROR                          = 0x4000
	EV_FLAG1                          = 0x2000
	EV_ONESHOT                        = 0x10
	EV_SYSFLAGS                       = 0xf000
	EXTA                              = 0x4b00
	EXTATTR_CMD_START                 = 0x1
	EXTATTR_CMD_STOP                  = 0x2
	EXTATTR_NAMESPACE_SYSTEM          = 0x2
	EXTATTR_NAMESPACE_USER            = 0x1
	EXTB                              = 0x9600
	EXTPROC                           = 0x800
	FD_CLOEXEC                        = 0x1
	FD_SETSIZE                        = 0x100
	FLUSHO                            = 0x800000
	F_CLOSEM                          = 0xa
	F_DUPFD                           = 0x0
	F_DUPFD_CLOEXEC                   = 0xc
	F_FSCTL                           = -0x80000000
	F_FSDIRMASK                       = 0x70000000
	F_FSIN                            = 0x10000000
	F_FSINOUT                         = 0x30000000
	F_FSOUT                           = 0x20000000
	F_FSPRIV                          = 0x8000
	F_FSVOID                          = 0x40000000
	F_GETFD                           = 0x1
	F_GETFL                           = 0x3
	F_GETLK                           = 0x7
	F_GETNOSIGPIPE                    = 0xd
	F_GETOWN                          = 0x5
	F_MAXFD                           = 0xb
	F_OK                              = 0x0
	F_PARAM_MASK                      = 0xfff
	F_PARAM_MAX                       = 0xfff
	F_RDLCK                           = 0x1
	F_SETFD                           = 0x2
	F_SETFL                           = 0x4
	F_SETLK                           = 0x8
	F_SETLKW                          = 0x9
	F_SETNOSIGPIPE                    = 0xe
	F_SETOWN                          = 0x6
	F_UNLCK                           = 0x2
	F_WRLCK                           = 0x3
	HUPCL                             = 0x4000
	HW_MACHINE                        = 0x1
	ICANON                            = 0x100
	ICMP6_FILTER                      = 0x12
	ICRNL                             = 0x100
	IEXTEN                            = 0x400
	IFAN_ARRIVAL                      = 0x0
	IFAN_DEPARTURE                    = 0x1
	IFA_ROUTE                         = 0x1
	IFF_ALLMULTI                      = 0x200
	IFF_BROADCAST                     = 0x2
	IFF_CANTCHANGE                    = 0x8f52
	IFF_DEBUG                         = 0x4
	IFF_LINK0                         = 0x1000
	IFF_LINK1                         = 0x2000
	IFF_LINK2                         = 0x4000
	IFF_LOOPBACK                      = 0x8
	IFF_MULTICAST                     = 0x8000
	IFF_NOARP                         = 0x80
	IFF_NOTRAILERS                    = 0x20
	IFF_OACTIVE                       = 0x400
	IFF_POINTOPOINT                   = 0x10
	IFF_PROMISC                       = 0x100
	IFF_RUNNING                       = 0x40
	IFF_SIMPLEX                       = 0x800
	IFF_UP                            = 0x1
	IFNAMSIZ                          = 0x10
	IFT_1822                          = 0x2
	IFT_A12MPPSWITCH                  = 0x82
	IFT_AAL2                          = 0xbb
	IFT_AAL5                          = 0x31
	IFT_ADSL                          = 0x5e
	IFT_AFLANE8023                    = 0x3b
	IFT_AFLANE8025                    = 0x3c
	IFT_ARAP                          = 0x58
	IFT_ARCNET                        = 0x23
	IFT_ARCNETPLUS                    = 0x24
	IFT_ASYNC                         = 0x54
	IFT_ATM                           = 0x25
	IFT_ATMDXI                        = 0x69
	IFT_ATMFUNI                       = 0x6a
	IFT_ATMIMA                        = 0x6b
	IFT_ATMLOGICAL                    = 0x50
	IFT_ATMRADIO                      = 0xbd
	IFT_ATMSUBINTERFACE               = 0x86
	IFT_ATMVCIENDPT                   = 0xc2
	IFT_ATMVIRTUAL                    = 0x95
	IFT_BGPPOLICYACCOUNTING           = 0xa2
	IFT_BRIDGE                        = 0xd1
	IFT_BSC                           = 0x53
	IFT_CARP                          = 0xf8
	IFT_CCTEMUL                       = 0x3d
	IFT_CEPT                          = 0x13
	IFT_CES                           = 0x85
	IFT_CHANNEL                       = 0x46
	IFT_CNR                           = 0x55
	IFT_COFFEE                        = 0x84
	IFT_COMPOSITELINK                 = 0x9b
	IFT_DCN                           = 0x8d
	IFT_DIGITALPOWERLINE              = 0x8a
	IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba
	IFT_DLSW                          = 0x4a
	IFT_DOCSCABLEDOWNSTREAM           = 0x80
	IFT_DOCSCABLEMACLAYER             = 0x7f
	IFT_DOCSCABLEUPSTREAM             = 0x81
	IFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd
	IFT_DS0                           = 0x51
	IFT_DS0BUNDLE                     = 0x52
	IFT_DS1FDL                        = 0xaa
	IFT_DS3                           = 0x1e
	IFT_DTM                           = 0x8c
	IFT_DVBASILN                      = 0xac
	IFT_DVBASIOUT                     = 0xad
	IFT_DVBRCCDOWNSTREAM              = 0x93
	IFT_DVBRCCMACLAYER                = 0x92
	IFT_DVBRCCUPSTREAM                = 0x94
	IFT_ECONET                        = 0xce
	IFT_EON                           = 0x19
	IFT_EPLRS                         = 0x57
	IFT_ESCON                         = 0x49
	IFT_ETHER                         = 0x6
	IFT_FAITH                         = 0xf2
	IFT_FAST                          = 0x7d
	IFT_FASTETHER                     = 0x3e
	IFT_FASTETHERFX                   = 0x45
	IFT_FDDI                          = 0xf
	IFT_FIBRECHANNEL                  = 0x38
	IFT_FRAMERELAYINTERCONNECT        = 0x3a
	IFT_FRAMERELAYMPI                 = 0x5c
	IFT_FRDLCIENDPT                   = 0xc1
	IFT_FRELAY                        = 0x20
	IFT_FRELAYDCE                     = 0x2c
	IFT_FRF16MFRBUNDLE                = 0xa3
	IFT_FRFORWARD                     = 0x9e
	IFT_G703AT2MB                     = 0x43
	IFT_G703AT64K                     = 0x42
	IFT_GIF                           = 0xf0
	IFT_GIGABITETHERNET               = 0x75
	IFT_GR303IDT                      = 0xb2
	IFT_GR303RDT                      = 0xb1
	IFT_H323GATEKEEPER                = 0xa4
	IFT_H323PROXY                     = 0xa5
	IFT_HDH1822                       = 0x3
	IFT_HDLC                          = 0x76
	IFT_HDSL2                         = 0xa8
	IFT_HIPERLAN2                     = 0xb7
	IFT_HIPPI                         = 0x2f
	IFT_HIPPIINTERFACE                = 0x39
	IFT_HOSTPAD                       = 0x5a
	IFT_HSSI                          = 0x2e
	IFT_HY                            = 0xe
	IFT_IBM370PARCHAN                 = 0x48
	IFT_IDSL                          = 0x9a
	IFT_IEEE1394                      = 0x90
	IFT_IEEE80211                     = 0x47
	IFT_IEEE80212                     = 0x37
	IFT_IEEE8023ADLAG                 = 0xa1
	IFT_IFGSN                         = 0x91
	IFT_IMT                           = 0xbe
	IFT_INFINIBAND                    = 0xc7
	IFT_INTERLEAVE                    = 0x7c
	IFT_IP                            = 0x7e
	IFT_IPFORWARD                     = 0x8e
	IFT_IPOVERATM                     = 0x72
	IFT_IPOVERCDLC                    = 0x6d
	IFT_IPOVERCLAW                    = 0x6e
	IFT_IPSWITCH                      = 0x4e
	IFT_ISDN                          = 0x3f
	IFT_ISDNBASIC                     = 0x14
	IFT_ISDNPRIMARY                   = 0x15
	IFT_ISDNS                         = 0x4b
	IFT_ISDNU                         = 0x4c
	IFT_ISO88022LLC                   = 0x29
	IFT_ISO88023                      = 0x7
	IFT_ISO88024                      = 0x8
	IFT_ISO88025                      = 0x9
	IFT_ISO88025CRFPINT               = 0x62
	IFT_ISO88025DTR                   = 0x56
	IFT_ISO88025FIBER                 = 0x73
	IFT_ISO88026                      = 0xa
	IFT_ISUP                          = 0xb3
	IFT_L2VLAN                        = 0x87
	IFT_L3IPVLAN                      = 0x88
	IFT_L3IPXVLAN                     = 0x89
	IFT_LAPB                          = 0x10
	IFT_LAPD                          = 0x4d
	IFT_LAPF                          = 0x77
	IFT_LINEGROUP                     = 0xd2
	IFT_LOCALTALK                     = 0x2a
	IFT_LOOP                          = 0x18
	IFT_MEDIAMAILOVERIP               = 0x8b
	IFT_MFSIGLINK                     = 0xa7
	IFT_MIOX25                        = 0x26
	IFT_MODEM                         = 0x30
	IFT_MPC                           = 0x71
	IFT_MPLS                          = 0xa6
	IFT_MPLSTUNNEL                    = 0x96
	IFT_MSDSL                         = 0x8f
	IFT_MVL                           = 0xbf
	IFT_MYRINET                       = 0x63
	IFT_NFAS                          = 0xaf
	IFT_NSIP                          = 0x1b
	IFT_OPTICALCHANNEL                = 0xc3
	IFT_OPTICALTRANSPORT              = 0xc4
	IFT_OTHER                         = 0x1
	IFT_P10                           = 0xc
	IFT_P80                           = 0xd
	IFT_PARA                          = 0x22
	IFT_PFLOG                         = 0xf5
	IFT_PFSYNC                        = 0xf6
	IFT_PLC                           = 0xae
	IFT_PON155                        = 0xcf
	IFT_PON622                        = 0xd0
	IFT_POS                           = 0xab
	IFT_PPP                           = 0x17
	IFT_PPPMULTILINKBUNDLE            = 0x6c
	IFT_PROPATM                       = 0xc5
	IFT_PROPBWAP2MP                   = 0xb8
	IFT_PROPCNLS                      = 0x59
	IFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5
	IFT_PROPDOCSWIRELESSMACLAYER      = 0xb4
	IFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6
	IFT_PROPMUX                       = 0x36
	IFT_PROPVIRTUAL                   = 0x35
	IFT_PROPWIRELESSP2P               = 0x9d
	IFT_PTPSERIAL                     = 0x16
	IFT_PVC                           = 0xf1
	IFT_Q2931                         = 0xc9
	IFT_QLLC                          = 0x44
	IFT_RADIOMAC                      = 0xbc
	IFT_RADSL                         = 0x5f
	IFT_REACHDSL                      = 0xc0
	IFT_RFC1483                       = 0x9f
	IFT_RS232                         = 0x21
	IFT_RSRB                          = 0x4f
	IFT_SDLC                          = 0x11
	IFT_SDSL                          = 0x60
	IFT_SHDSL                         = 0xa9
	IFT_SIP                           = 0x1f
	IFT_SIPSIG                        = 0xcc
	IFT_SIPTG                         = 0xcb
	IFT_SLIP                          = 0x1c
	IFT_SMDSDXI                       = 0x2b
	IFT_SMDSICIP                      = 0x34
	IFT_SONET                         = 0x27
	IFT_SONETOVERHEADCHANNEL          = 0xb9
	IFT_SONETPATH                     = 0x32
	IFT_SONETVT                       = 0x33
	IFT_SRP                           = 0x97
	IFT_SS7SIGLINK                    = 0x9c
	IFT_STACKTOSTACK                  = 0x6f
	IFT_STARLAN                       = 0xb
	IFT_STF                           = 0xd7
	IFT_T1                            = 0x12
	IFT_TDLC                          = 0x74
	IFT_TELINK                        = 0xc8
	IFT_TERMPAD                       = 0x5b
	IFT_TR008                         = 0xb0
	IFT_TRANSPHDLC                    = 0x7b
	IFT_TUNNEL                        = 0x83
	IFT_ULTRA                         = 0x1d
	IFT_USB                           = 0xa0
	IFT_V11                           = 0x40
	IFT_V35                           = 0x2d
	IFT_V36                           = 0x41
	IFT_V37                           = 0x78
	IFT_VDSL                          = 0x61
	IFT_VIRTUALIPADDRESS              = 0x70
	IFT_VIRTUALTG                     = 0xca
	IFT_VOICEDID                      = 0xd5
	IFT_VOICEEM                       = 0x64
	IFT_VOICEEMFGD                    = 0xd3
	IFT_VOICEENCAP                    = 0x67
	IFT_VOICEFGDEANA                  = 0xd4
	IFT_VOICEFXO                      = 0x65
	IFT_VOICEFXS                      = 0x66
	IFT_VOICEOVERATM                  = 0x98
	IFT_VOICEOVERCABLE                = 0xc6
	IFT_VOICEOVERFRAMERELAY           = 0x99
	IFT_VOICEOVERIP                   = 0x68
	IFT_X213                          = 0x5d
	IFT_X25                           = 0x5
	IFT_X25DDN                        = 0x4
	IFT_X25HUNTGROUP                  = 0x7a
	IFT_X25MLP                        = 0x79
	IFT_X25PLE                        = 0x28
	IFT_XETHER                        = 0x1a
	IGNBRK                            = 0x1
	IGNCR                             = 0x80
	IGNPAR                            = 0x4
	IMAXBEL                           = 0x2000
	INLCR                             = 0x40
	INPCK                             = 0x10
	IN_CLASSA_HOST                    = 0xffffff
	IN_CLASSA_MAX                     = 0x80
	IN_CLASSA_NET                     = 0xff000000
	IN_CLASSA_NSHIFT                  = 0x18
	IN_CLASSB_HOST                    = 0xffff
	IN_CLASSB_MAX                     = 0x10000
	IN_CLASSB_NET                     = 0xffff0000
	IN_CLASSB_NSHIFT                  = 0x10
	IN_CLASSC_HOST                    = 0xff
	IN_CLASSC_NET                     = 0xffffff00
	IN_CLASSC_NSHIFT                  = 0x8
	IN_CLASSD_HOST                    = 0xfffffff
	IN_CLASSD_NET                     = 0xf0000000
	IN_CLASSD_NSHIFT                  = 0x1c
	IN_LOOPBACKNET                    = 0x7f
	IPPROTO_AH                        = 0x33
	IPPROTO_CARP                      = 0x70
	IPPROTO_DONE                      = 0x101
	IPPROTO_DSTOPTS                   = 0x3c
	IPPROTO_EGP                       = 0x8
	IPPROTO_ENCAP                     = 0x62
	IPPROTO_EON                       = 0x50
	IPPROTO_ESP                       = 0x32
	IPPROTO_ETHERIP                   = 0x61
	IPPROTO_FRAGMENT                  = 0x2c
	IPPROTO_GGP                       = 0x3
	IPPROTO_GRE                       = 0x2f
	IPPROTO_HOPOPTS                   = 0x0
	IPPROTO_ICMP                      = 0x1
	IPPROTO_ICMPV6                    = 0x3a
	IPPROTO_IDP                       = 0x16
	IPPROTO_IGMP                      = 0x2
	IPPROTO_IP                        = 0x0
	IPPROTO_IPCOMP                    = 0x6c
	IPPROTO_IPIP                      = 0x4
	IPPROTO_IPV4                      = 0x4
	IPPROTO_IPV6                      = 0x29
	IPPROTO_IPV6_ICMP                 = 0x3a
	IPPROTO_MAX                       = 0x100
	IPPROTO_MAXID                     = 0x34
	IPPROTO_MOBILE                    = 0x37
	IPPROTO_NONE                      = 0x3b
	IPPROTO_PFSYNC                    = 0xf0
	IPPROTO_PIM                       = 0x67
	IPPROTO_PUP                       = 0xc
	IPPROTO_RAW                       = 0xff
	IPPROTO_ROUTING                   = 0x2b
	IPPROTO_RSVP                      = 0x2e
	IPPROTO_TCP                       = 0x6
	IPPROTO_TP                        = 0x1d
	IPPROTO_UDP                       = 0x11
	IPPROTO_VRRP                      = 0x70
	IPV6_CHECKSUM                     = 0x1a
	IPV6_DEFAULT_MULTICAST_HOPS       = 0x1
	IPV6_DEFAULT_MULTICAST_LOOP       = 0x1
	IPV6_DEFHLIM                      = 0x40
	IPV6_DONTFRAG                     = 0x3e
	IPV6_DSTOPTS                      = 0x32
	IPV6_FAITH                        = 0x1d
	IPV6_FLOWINFO_MASK                = 0xffffff0f
	IPV6_FLOWLABEL_MASK               = 0xffff0f00
	IPV6_FRAGTTL                      = 0x78
	IPV6_HLIMDEC                      = 0x1
	IPV6_HOPLIMIT                     = 0x2f
	IPV6_HOPOPTS                      = 0x31
	IPV6_IPSEC_POLICY                 = 0x1c
	IPV6_JOIN_GROUP                   = 0xc
	IPV6_LEAVE_GROUP                  = 0xd
	IPV6_MAXHLIM                      = 0xff
	IPV6_MAXPACKET                    = 0xffff
	IPV6_MMTU                         = 0x500
	IPV6_MULTICAST_HOPS               = 0xa
	IPV6_MULTICAST_IF                 = 0x9
	IPV6_MULTICAST_LOOP               = 0xb
	IPV6_NEXTHOP                      = 0x30
	IPV6_PATHMTU                      = 0x2c
	IPV6_PKTINFO                      = 0x2e
	IPV6_PORTRANGE                    = 0xe
	IPV6_PORTRANGE_DEFAULT            = 0x0
	IPV6_PORTRANGE_HIGH               = 0x1
	IPV6_PORTRANGE_LOW                = 0x2
	IPV6_RECVDSTOPTS                  = 0x28
	IPV6_RECVHOPLIMIT                 = 0x25
	IPV6_RECVHOPOPTS                  = 0x27
	IPV6_RECVPATHMTU                  = 0x2b
	IPV6_RECVPKTINFO                  = 0x24
	IPV6_RECVRTHDR                    = 0x26
	IPV6_RECVTCLASS                   = 0x39
	IPV6_RTHDR                        = 0x33
	IPV6_RTHDRDSTOPTS                 = 0x23
	IPV6_RTHDR_LOOSE                  = 0x0
	IPV6_RTHDR_STRICT                 = 0x1
	IPV6_RTHDR_TYPE_0                 = 0x0
	IPV6_SOCKOPT_RESERVED1            = 0x3
	IPV6_TCLASS                       = 0x3d
	IPV6_UNICAST_HOPS                 = 0x4
	IPV6_USE_MIN_MTU                  = 0x2a
	IPV6_V6ONLY                       = 0x1b
	IPV6_VERSION                      = 0x60
	IPV6_VERSION_MASK                 = 0xf0
	IP_ADD_MEMBERSHIP                 = 0xc
	IP_DEFAULT_MULTICAST_LOOP         = 0x1
	IP_DEFAULT_MULTICAST_TTL          = 0x1
	IP_DF                             = 0x4000
	IP_DROP_MEMBERSHIP                = 0xd
	IP_EF                             = 0x8000
	IP_ERRORMTU                       = 0x15
	IP_HDRINCL                        = 0x2
	IP_IPSEC_POLICY                   = 0x16
	IP_MAXPACKET                      = 0xffff
	IP_MAX_MEMBERSHIPS                = 0x14
	IP_MF                             = 0x2000
	IP_MINFRAGSIZE                    = 0x45
	IP_MINTTL                         = 0x18
	IP_MSS                            = 0x240
	IP_MULTICAST_IF                   = 0x9
	IP_MULTICAST_LOOP                 = 0xb
	IP_MULTICAST_TTL                  = 0xa
	IP_OFFMASK                        = 0x1fff
	IP_OPTIONS                        = 0x1
	IP_PORTRANGE                      = 0x13
	IP_PORTRANGE_DEFAULT              = 0x0
	IP_PORTRANGE_HIGH                 = 0x1
	IP_PORTRANGE_LOW                  = 0x2
	IP_RECVDSTADDR                    = 0x7
	IP_RECVIF                         = 0x14
	IP_RECVOPTS                       = 0x5
	IP_RECVRETOPTS                    = 0x6
	IP_RECVTTL                        = 0x17
	IP_RETOPTS                        = 0x8
	IP_RF                             = 0x8000
	IP_TOS                            = 0x3
	IP_TTL                            = 0x4
	ISIG                              = 0x80
	ISTRIP                            = 0x20
	IXANY                             = 0x800
	IXOFF                             = 0x400
	IXON                              = 0x200
	KERN_HOSTNAME                     = 0xa
	KERN_OSRELEASE                    = 0x2
	KERN_OSTYPE                       = 0x1
	KERN_VERSION                      = 0x4
	LOCK_EX                           = 0x2
	LOCK_NB                           = 0x4
	LOCK_SH                           = 0x1
	LOCK_UN                           = 0x8
	MADV_DONTNEED                     = 0x4
	MADV_FREE                         = 0x6
	MADV_NORMAL                       = 0x0
	MADV_RANDOM                       = 0x1
	MADV_SEQUENTIAL                   = 0x2
	MADV_SPACEAVAIL                   = 0x5
	MADV_WILLNEED                     = 0x3
	MAP_ALIGNMENT_16MB                = 0x18000000
	MAP_ALIGNMENT_1TB                 = 0x28000000
	MAP_ALIGNMENT_256TB               = 0x30000000
	MAP_ALIGNMENT_4GB                 = 0x20000000
	MAP_ALIGNMENT_64KB                = 0x10000000
	MAP_ALIGNMENT_64PB                = 0x38000000
	MAP_ALIGNMENT_MASK                = -0x1000000
	MAP_ALIGNMENT_SHIFT               = 0x18
	MAP_ANON                          = 0x1000
	MAP_FILE                          = 0x0
	MAP_FIXED                         = 0x10
	MAP_HASSEMAPHORE                  = 0x200
	MAP_INHERIT                       = 0x80
	MAP_INHERIT_COPY                  = 0x1
	MAP_INHERIT_DEFAULT               = 0x1
	MAP_INHERIT_DONATE_COPY           = 0x3
	MAP_INHERIT_NONE                  = 0x2
	MAP_INHERIT_SHARE                 = 0x0
	MAP_NORESERVE                     = 0x40
	MAP_PRIVATE                       = 0x2
	MAP_RENAME                        = 0x20
	MAP_SHARED                        = 0x1
	MAP_STACK                         = 0x2000
	MAP_TRYFIXED                      = 0x400
	MAP_WIRED                         = 0x800
	MNT_ASYNC                         = 0x40
	MNT_BASIC_FLAGS                   = 0xe782807f
	MNT_DEFEXPORTED                   = 0x200
	MNT_DISCARD                       = 0x800000
	MNT_EXKERB                        = 0x800
	MNT_EXNORESPORT                   = 0x8000000
	MNT_EXPORTANON                    = 0x400
	MNT_EXPORTED                      = 0x100
	MNT_EXPUBLIC                      = 0x10000000
	MNT_EXRDONLY                      = 0x80
	MNT_EXTATTR                       = 0x1000000
	MNT_FORCE                         = 0x80000
	MNT_GETARGS                       = 0x400000
	MNT_IGNORE                        = 0x100000
	MNT_LAZY                          = 0x3
	MNT_LOCAL                         = 0x1000
	MNT_LOG                           = 0x2000000
	MNT_NOATIME                       = 0x4000000
	MNT_NOCOREDUMP                    = 0x8000
	MNT_NODEV                         = 0x10
	MNT_NODEVMTIME                    = 0x40000000
	MNT_NOEXEC                        = 0x4
	MNT_NOSUID                        = 0x8
	MNT_NOWAIT                        = 0x2
	MNT_OP_FLAGS                      = 0x4d0000
	MNT_QUOTA                         = 0x2000
	MNT_RDONLY                        = 0x1
	MNT_RELATIME                      = 0x20000
	MNT_RELOAD                        = 0x40000
	MNT_ROOTFS                        = 0x4000
	MNT_SOFTDEP                       = 0x80000000
	MNT_SYMPERM                       = 0x20000000
	MNT_SYNCHRONOUS                   = 0x2
	MNT_UNION                         = 0x20
	MNT_UPDATE                        = 0x10000
	MNT_VISFLAGMASK                   = 0xff90ffff
	MNT_WAIT                          = 0x1
	MSG_BCAST                         = 0x100
	MSG_CMSG_CLOEXEC                  = 0x800
	MSG_CONTROLMBUF                   = 0x2000000
	MSG_CTRUNC                        = 0x20
	MSG_DONTROUTE                     = 0x4
	MSG_DONTWAIT                      = 0x80
	MSG_EOR                           = 0x8
	MSG_IOVUSRSPACE                   = 0x4000000
	MSG_LENUSRSPACE                   = 0x8000000
	MSG_MCAST                         = 0x200
	MSG_NAMEMBUF                      = 0x1000000
	MSG_NBIO                          = 0x1000
	MSG_NOSIGNAL                      = 0x400
	MSG_OOB                           = 0x1
	MSG_PEEK                          = 0x2
	MSG_TRUNC                         = 0x10
	MSG_USERFLAGS                     = 0xffffff
	MSG_WAITALL                       = 0x40
	MS_ASYNC                          = 0x1
	MS_INVALIDATE                     = 0x2
	MS_SYNC                           = 0x4
	NAME_MAX                          = 0x1ff
	NET_RT_DUMP                       = 0x1
	NET_RT_FLAGS                      = 0x2
	NET_RT_IFLIST                     = 0x5
	NET_RT_MAXID                      = 0x6
	NET_RT_OIFLIST                    = 0x4
	NET_RT_OOIFLIST                   = 0x3
	NFDBITS                           = 0x20
	NOFLSH                            = 0x80000000
	NOTE_ATTRIB                       = 0x8
	NOTE_CHILD                        = 0x4
	NOTE_DELETE                       = 0x1
	NOTE_EXEC                         = 0x20000000
	NOTE_EXIT                         = 0x80000000
	NOTE_EXTEND                       = 0x4
	NOTE_FORK                         = 0x40000000
	NOTE_LINK                         = 0x10
	NOTE_LOWAT                        = 0x1
	NOTE_PCTRLMASK                    = 0xf0000000
	NOTE_PDATAMASK                    = 0xfffff
	NOTE_RENAME                       = 0x20
	NOTE_REVOKE                       = 0x40
	NOTE_TRACK                        = 0x1
	NOTE_TRACKERR                     = 0x2
	NOTE_WRITE                        = 0x2
	OCRNL                             = 0x10
	OFIOGETBMAP                       = 0xc004667a
	ONLCR                             = 0x2
	ONLRET                            = 0x40
	ONOCR                             = 0x20
	ONOEOT                            = 0x8
	OPOST                             = 0x1
	O_ACCMODE                         = 0x3
	O_ALT_IO                          = 0x40000
	O_APPEND                          = 0x8
	O_ASYNC                           = 0x40
	O_CLOEXEC                         = 0x400000
	O_CREAT                           = 0x200
	O_DIRECT                          = 0x80000
	O_DIRECTORY                       = 0x200000
	O_DSYNC                           = 0x10000
	O_EXCL                            = 0x800
	O_EXLOCK                          = 0x20
	O_FSYNC                           = 0x80
	O_NDELAY                          = 0x4
	O_NOCTTY                          = 0x8000
	O_NOFOLLOW                        = 0x100
	O_NONBLOCK                        = 0x4
	O_NOSIGPIPE                       = 0x1000000
	O_RDONLY                          = 0x0
	O_RDWR                            = 0x2
	O_RSYNC                           = 0x20000
	O_SHLOCK                          = 0x10
	O_SYNC                            = 0x80
	O_TRUNC                           = 0x400
	O_WRONLY                          = 0x1
	PARENB                            = 0x1000
	PARMRK                            = 0x8
	PARODD                            = 0x2000
	PENDIN                            = 0x20000000
	PROT_EXEC                         = 0x4
	PROT_NONE                         = 0x0
	PROT_READ                         = 0x1
	PROT_WRITE                        = 0x2
	PRI_IOFLUSH                       = 0x7c
	PRIO_PGRP                         = 0x1
	PRIO_PROCESS                      = 0x0
	PRIO_USER                         = 0x2
	RLIMIT_AS                         = 0xa
	RLIMIT_CORE                       = 0x4
	RLIMIT_CPU                        = 0x0
	RLIMIT_DATA                       = 0x2
	RLIMIT_FSIZE                      = 0x1
	RLIMIT_MEMLOCK                    = 0x6
	RLIMIT_NOFILE                     = 0x8
	RLIMIT_NPROC                      = 0x7
	RLIMIT_RSS                        = 0x5
	RLIMIT_STACK                      = 0x3
	RLIM_INFINITY                     = 0x7fffffffffffffff
	RTAX_AUTHOR                       = 0x6
	RTAX_BRD                          = 0x7
	RTAX_DST                          = 0x0
	RTAX_GATEWAY                      = 0x1
	RTAX_GENMASK                      = 0x3
	RTAX_IFA                          = 0x5
	RTAX_IFP                          = 0x4
	RTAX_MAX                          = 0x9
	RTAX_NETMASK                      = 0x2
	RTAX_TAG                          = 0x8
	RTA_AUTHOR                        = 0x40
	RTA_BRD                           = 0x80
	RTA_DST                           = 0x1
	RTA_GATEWAY                       = 0x2
	RTA_GENMASK                       = 0x8
	RTA_IFA                           = 0x20
	RTA_IFP                           = 0x10
	RTA_NETMASK                       = 0x4
	RTA_TAG                           = 0x100
	RTF_ANNOUNCE                      = 0x20000
	RTF_BLACKHOLE                     = 0x1000
	RTF_CLONED                        = 0x2000
	RTF_CLONING                       = 0x100
	RTF_DONE                          = 0x40
	RTF_DYNAMIC                       = 0x10
	RTF_GATEWAY                       = 0x2
	RTF_HOST                          = 0x4
	RTF_LLINFO                        = 0x400
	RTF_MASK                          = 0x80
	RTF_MODIFIED                      = 0x20
	RTF_PROTO1                        = 0x8000
	RTF_PROTO2                        = 0x4000
	RTF_REJECT                        = 0x8
	RTF_SRC                           = 0x10000
	RTF_STATIC                        = 0x800
	RTF_UP                            = 0x1
	RTF_XRESOLVE                      = 0x200
	RTM_ADD                           = 0x1
	RTM_CHANGE                        = 0x3
	RTM_CHGADDR                       = 0x15
	RTM_DELADDR                       = 0xd
	RTM_DELETE                        = 0x2
	RTM_GET                           = 0x4
	RTM_IEEE80211                     = 0x11
	RTM_IFANNOUNCE                    = 0x10
	RTM_IFINFO                        = 0x14
	RTM_LLINFO_UPD                    = 0x13
	RTM_LOCK                          = 0x8
	RTM_LOSING                        = 0x5
	RTM_MISS                          = 0x7
	RTM_NEWADDR                       = 0xc
	RTM_OIFINFO                       = 0xf
	RTM_OLDADD                        = 0x9
	RTM_OLDDEL                        = 0xa
	RTM_OOIFINFO                      = 0xe
	RTM_REDIRECT                      = 0x6
	RTM_RESOLVE                       = 0xb
	RTM_RTTUNIT                       = 0xf4240
	RTM_SETGATE                       = 0x12
	RTM_VERSION                       = 0x4
	RTV_EXPIRE                        = 0x4
	RTV_HOPCOUNT                      = 0x2
	RTV_MTU                           = 0x1
	RTV_RPIPE                         = 0x8
	RTV_RTT                           = 0x40
	RTV_RTTVAR                        = 0x80
	RTV_SPIPE                         = 0x10
	RTV_SSTHRESH                      = 0x20
	RUSAGE_CHILDREN                   = -0x1
	RUSAGE_SELF                       = 0x0
	SCM_CREDS                         = 0x4
	SCM_RIGHTS                        = 0x1
	SCM_TIMESTAMP                     = 0x8
	SHUT_RD                           = 0x0
	SHUT_RDWR                         = 0x2
	SHUT_WR                           = 0x1
	SIOCADDMULTI                      = 0x80906931
	SIOCADDRT                         = 0x8030720a
	SIOCAIFADDR                       = 0x8040691a
	SIOCALIFADDR                      = 0x8118691c
	SIOCATMARK                        = 0x40047307
	SIOCDELMULTI                      = 0x80906932
	SIOCDELRT                         = 0x8030720b
	SIOCDIFADDR                       = 0x80906919
	SIOCDIFPHYADDR                    = 0x80906949
	SIOCDLIFADDR                      = 0x8118691e
	SIOCGDRVSPEC                      = 0xc01c697b
	SIOCGETPFSYNC                     = 0xc09069f8
	SIOCGETSGCNT                      = 0xc0147534
	SIOCGETVIFCNT                     = 0xc0147533
	SIOCGHIWAT                        = 0x40047301
	SIOCGIFADDR                       = 0xc0906921
	SIOCGIFADDRPREF                   = 0xc0946920
	SIOCGIFALIAS                      = 0xc040691b
	SIOCGIFBRDADDR                    = 0xc0906923
	SIOCGIFCAP                        = 0xc0206976
	SIOCGIFCONF                       = 0xc0086926
	SIOCGIFDATA                       = 0xc0946985
	SIOCGIFDLT                        = 0xc0906977
	SIOCGIFDSTADDR                    = 0xc0906922
	SIOCGIFFLAGS                      = 0xc0906911
	SIOCGIFGENERIC                    = 0xc090693a
	SIOCGIFMEDIA                      = 0xc0286936
	SIOCGIFMETRIC                     = 0xc0906917
	SIOCGIFMTU                        = 0xc090697e
	SIOCGIFNETMASK                    = 0xc0906925
	SIOCGIFPDSTADDR                   = 0xc0906948
	SIOCGIFPSRCADDR                   = 0xc0906947
	SIOCGLIFADDR                      = 0xc118691d
	SIOCGLIFPHYADDR                   = 0xc118694b
	SIOCGLINKSTR                      = 0xc01c6987
	SIOCGLOWAT                        = 0x40047303
	SIOCGPGRP                         = 0x40047309
	SIOCGVH                           = 0xc0906983
	SIOCIFCREATE                      = 0x8090697a
	SIOCIFDESTROY                     = 0x80906979
	SIOCIFGCLONERS                    = 0xc00c6978
	SIOCINITIFADDR                    = 0xc0446984
	SIOCSDRVSPEC                      = 0x801c697b
	SIOCSETPFSYNC                     = 0x809069f7
	SIOCSHIWAT                        = 0x80047300
	SIOCSIFADDR                       = 0x8090690c
	SIOCSIFADDRPREF                   = 0x8094691f
	SIOCSIFBRDADDR                    = 0x80906913
	SIOCSIFCAP                        = 0x80206975
	SIOCSIFDSTADDR                    = 0x8090690e
	SIOCSIFFLAGS                      = 0x80906910
	SIOCSIFGENERIC                    = 0x80906939
	SIOCSIFMEDIA                      = 0xc0906935
	SIOCSIFMETRIC                     = 0x80906918
	SIOCSIFMTU                        = 0x8090697f
	SIOCSIFNETMASK                    = 0x80906916
	SIOCSIFPHYADDR                    = 0x80406946
	SIOCSLIFPHYADDR                   = 0x8118694a
	SIOCSLINKSTR                      = 0x801c6988
	SIOCSLOWAT                        = 0x80047302
	SIOCSPGRP                         = 0x80047308
	SIOCSVH                           = 0xc0906982
	SIOCZIFDATA                       = 0xc0946986
	SOCK_CLOEXEC                      = 0x10000000
	SOCK_DGRAM                        = 0x2
	SOCK_FLAGS_MASK                   = 0xf0000000
	SOCK_NONBLOCK                     = 0x20000000
	SOCK_NOSIGPIPE                    = 0x40000000
	SOCK_RAW                          = 0x3
	SOCK_RDM                          = 0x4
	SOCK_SEQPACKET                    = 0x5
	SOCK_STREAM                       = 0x1
	SOL_SOCKET                        = 0xffff
	SOMAXCONN                         = 0x80
	SO_ACCEPTCONN                     = 0x2
	SO_ACCEPTFILTER                   = 0x1000
	SO_BROADCAST                      = 0x20
	SO_DEBUG                          = 0x1
	SO_DONTROUTE                      = 0x10
	SO_ERROR                          = 0x1007
	SO_KEEPALIVE                      = 0x8
	SO_LINGER                         = 0x80
	SO_NOHEADER                       = 0x100a
	SO_NOSIGPIPE                      = 0x800
	SO_OOBINLINE                      = 0x100
	SO_OVERFLOWED                     = 0x1009
	SO_RCVBUF                         = 0x1002
	SO_RCVLOWAT                       = 0x1004
	SO_RCVTIMEO                       = 0x100c
	SO_REUSEADDR                      = 0x4
	SO_REUSEPORT                      = 0x200
	SO_SNDBUF                         = 0x1001
	SO_SNDLOWAT                       = 0x1003
	SO_SNDTIMEO                       = 0x100b
	SO_TIMESTAMP                      = 0x2000
	SO_TYPE                           = 0x1008
	SO_USELOOPBACK                    = 0x40
	SYSCTL_VERSION                    = 0x1000000
	SYSCTL_VERS_0                     = 0x0
	SYSCTL_VERS_1                     = 0x1000000
	SYSCTL_VERS_MASK                  = 0xff000000
	S_ARCH1                           = 0x10000
	S_ARCH2                           = 0x20000
	S_BLKSIZE                         = 0x200
	S_IEXEC                           = 0x40
	S_IFBLK                           = 0x6000
	S_IFCHR                           = 0x2000
	S_IFDIR                           = 0x4000
	S_IFIFO                           = 0x1000
	S_IFLNK                           = 0xa000
	S_IFMT                            = 0xf000
	S_IFREG                           = 0x8000
	S_IFSOCK                          = 0xc000
	S_IFWHT                           = 0xe000
	S_IREAD                           = 0x100
	S_IRGRP                           = 0x20
	S_IROTH                           = 0x4
	S_IRUSR                           = 0x100
	S_IRWXG                           = 0x38
	S_IRWXO                           = 0x7
	S_IRWXU                           = 0x1c0
	S_ISGID                           = 0x400
	S_ISTXT                           = 0x200
	S_ISUID                           = 0x800
	S_ISVTX                           = 0x200
	S_IWGRP                           = 0x10
	S_IWOTH                           = 0x2
	S_IWRITE                          = 0x80
	S_IWUSR                           = 0x80
	S_IXGRP                           = 0x8
	S_IXOTH                           = 0x1
	S_IXUSR                           = 0x40
	TCIFLUSH                          = 0x1
	TCIOFLUSH                         = 0x3
	TCOFLUSH                          = 0x2
	TCP_CONGCTL                       = 0x20
	TCP_KEEPCNT                       = 0x6
	TCP_KEEPIDLE                      = 0x3
	TCP_KEEPINIT                      = 0x7
	TCP_KEEPINTVL                     = 0x5
	TCP_MAXBURST                      = 0x4
	TCP_MAXSEG                        = 0x2
	TCP_MAXWIN                        = 0xffff
	TCP_MAX_WINSHIFT                  = 0xe
	TCP_MD5SIG                        = 0x10
	TCP_MINMSS                        = 0xd8
	TCP_MSS                           = 0x218
	TCP_NODELAY                       = 0x1
	TCSAFLUSH                         = 0x2
	TIOCCBRK                          = 0x2000747a
	TIOCCDTR                          = 0x20007478
	TIOCCONS                          = 0x80047462
	TIOCDCDTIMESTAMP                  = 0x400c7458
	TIOCDRAIN                         = 0x2000745e
	TIOCEXCL                          = 0x2000740d
	TIOCEXT                           = 0x80047460
	TIOCFLAG_CDTRCTS                  = 0x10
	TIOCFLAG_CLOCAL                   = 0x2
	TIOCFLAG_CRTSCTS                  = 0x4
	TIOCFLAG_MDMBUF                   = 0x8
	TIOCFLAG_SOFTCAR                  = 0x1
	TIOCFLUSH                         = 0x80047410
	TIOCGETA                          = 0x402c7413
	TIOCGETD                          = 0x4004741a
	TIOCGFLAGS                        = 0x4004745d
	TIOCGLINED                        = 0x40207442
	TIOCGPGRP                         = 0x40047477
	TIOCGQSIZE                        = 0x40047481
	TIOCGRANTPT                       = 0x20007447
	TIOCGSID                          = 0x40047463
	TIOCGSIZE                         = 0x40087468
	TIOCGWINSZ                        = 0x40087468
	TIOCMBIC                          = 0x8004746b
	TIOCMBIS                          = 0x8004746c
	TIOCMGET                          = 0x4004746a
	TIOCMSET                          = 0x8004746d
	TIOCM_CAR                         = 0x40
	TIOCM_CD                          = 0x40
	TIOCM_CTS                         = 0x20
	TIOCM_DSR                         = 0x100
	TIOCM_DTR                         = 0x2
	TIOCM_LE                          = 0x1
	TIOCM_RI                          = 0x80
	TIOCM_RNG                         = 0x80
	TIOCM_RTS                         = 0x4
	TIOCM_SR                          = 0x10
	TIOCM_ST                          = 0x8
	TIOCNOTTY                         = 0x20007471
	TIOCNXCL                          = 0x2000740e
	TIOCOUTQ                          = 0x40047473
	TIOCPKT                           = 0x80047470
	TIOCPKT_DATA                      = 0x0
	TIOCPKT_DOSTOP                    = 0x20
	TIOCPKT_FLUSHREAD                 = 0x1
	TIOCPKT_FLUSHWRITE                = 0x2
	TIOCPKT_IOCTL                     = 0x40
	TIOCPKT_NOSTOP                    = 0x10
	TIOCPKT_START                     = 0x8
	TIOCPKT_STOP                      = 0x4
	TIOCPTMGET                        = 0x48087446
	TIOCPTSNAME                       = 0x48087448
	TIOCRCVFRAME                      = 0x80047445
	TIOCREMOTE                        = 0x80047469
	TIOCSBRK                          = 0x2000747b
	TIOCSCTTY                         = 0x20007461
	TIOCSDTR                          = 0x20007479
	TIOCSETA                          = 0x802c7414
	TIOCSETAF                         = 0x802c7416
	TIOCSETAW                         = 0x802c7415
	TIOCSETD                          = 0x8004741b
	TIOCSFLAGS                        = 0x8004745c
	TIOCSIG                           = 0x2000745f
	TIOCSLINED                        = 0x80207443
	TIOCSPGRP                         = 0x80047476
	TIOCSQSIZE                        = 0x80047480
	TIOCSSIZE                         = 0x80087467
	TIOCSTART                         = 0x2000746e
	TIOCSTAT                          = 0x80047465
	TIOCSTI                           = 0x80017472
	TIOCSTOP                          = 0x2000746f
	TIOCSWINSZ                        = 0x80087467
	TIOCUCNTL                         = 0x80047466
	TIOCXMTFRAME                      = 0x80047444
	TOSTOP                            = 0x400000
	VDISCARD                          = 0xf
	VDSUSP                            = 0xb
	VEOF                              = 0x0
	VEOL                              = 0x1
	VEOL2                             = 0x2
	VERASE                            = 0x3
	VINTR                             = 0x8
	VKILL                             = 0x5
	VLNEXT                            = 0xe
	VMIN                              = 0x10
	VQUIT                             = 0x9
	VREPRINT                          = 0x6
	VSTART                            = 0xc
	VSTATUS                           = 0x12
	VSTOP                             = 0xd
	VSUSP                             = 0xa
	VTIME                             = 0x11
	VWERASE                           = 0x4
	WALL                              = 0x8
	WALLSIG                           = 0x8
	WALTSIG                           = 0x4
	WCLONE                            = 0x4
	WCOREFLAG                         = 0x80
	WNOHANG                           = 0x1
	WNOWAIT                           = 0x10000
	WNOZOMBIE                         = 0x20000
	WOPTSCHECKED                      = 0x40000
	WSTOPPED                          = 0x7f
	WUNTRACED                         = 0x2
)

// Errors
const (
	E2BIG           = syscall.Errno(0x7)
	EACCES          = syscall.Errno(0xd)
	EADDRINUSE      = syscall.Errno(0x30)
	EADDRNOTAVAIL   = syscall.Errno(0x31)
	EAFNOSUPPORT    = syscall.Errno(0x2f)
	EAGAIN          = syscall.Errno(0x23)
	EALREADY        = syscall.Errno(0x25)
	EAUTH           = syscall.Errno(0x50)
	EBADF           = syscall.Errno(0x9)
	EBADMSG         = syscall.Errno(0x58)
	EBADRPC         = syscall.Errno(0x48)
	EBUSY           = syscall.Errno(0x10)
	ECANCELED       = syscall.Errno(0x57)
	ECHILD          = syscall.Errno(0xa)
	ECONNABORTED    = syscall.Errno(0x35)
	ECONNREFUSED    = syscall.Errno(0x3d)
	ECONNRESET      = syscall.Errno(0x36)
	EDEADLK         = syscall.Errno(0xb)
	EDESTADDRREQ    = syscall.Errno(0x27)
	EDOM            = syscall.Errno(0x21)
	EDQUOT          = syscall.Errno(0x45)
	EEXIST          = syscall.Errno(0x11)
	EFAULT          = syscall.Errno(0xe)
	EFBIG           = syscall.Errno(0x1b)
	EFTYPE          = syscall.Errno(0x4f)
	EHOSTDOWN       = syscall.Errno(0x40)
	EHOSTUNREACH    = syscall.Errno(0x41)
	EIDRM           = syscall.Errno(0x52)
	EILSEQ          = syscall.Errno(0x55)
	EINPROGRESS     = syscall.Errno(0x24)
	EINTR           = syscall.Errno(0x4)
	EINVAL          = syscall.Errno(0x16)
	EIO             = syscall.Errno(0x5)
	EISCONN         = syscall.Errno(0x38)
	EISDIR          = syscall.Errno(0x15)
	ELAST           = syscall.Errno(0x60)
	ELOOP           = syscall.Errno(0x3e)
	EMFILE          = syscall.Errno(0x18)
	EMLINK          = syscall.Errno(0x1f)
	EMSGSIZE        = syscall.Errno(0x28)
	EMULTIHOP       = syscall.Errno(0x5e)
	ENAMETOOLONG    = syscall.Errno(0x3f)
	ENEEDAUTH       = syscall.Errno(0x51)
	ENETDOWN        = syscall.Errno(0x32)
	ENETRESET       = syscall.Errno(0x34)
	ENETUNREACH     = syscall.Errno(0x33)
	ENFILE          = syscall.Errno(0x17)
	ENOATTR         = syscall.Errno(0x5d)
	ENOBUFS         = syscall.Errno(0x37)
	ENODATA         = syscall.Errno(0x59)
	ENODEV          = syscall.Errno(0x13)
	ENOENT          = syscall.Errno(0x2)
	ENOEXEC         = syscall.Errno(0x8)
	ENOLCK          = syscall.Errno(0x4d)
	ENOLINK         = syscall.Errno(0x5f)
	ENOMEM          = syscall.Errno(0xc)
	ENOMSG          = syscall.Errno(0x53)
	ENOPROTOOPT     = syscall.Errno(0x2a)
	ENOSPC          = syscall.Errno(0x1c)
	ENOSR           = syscall.Errno(0x5a)
	ENOSTR          = syscall.Errno(0x5b)
	ENOSYS          = syscall.Errno(0x4e)
	ENOTBLK         = syscall.Errno(0xf)
	ENOTCONN        = syscall.Errno(0x39)
	ENOTDIR         = syscall.Errno(0x14)
	ENOTEMPTY       = syscall.Errno(0x42)
	ENOTSOCK        = syscall.Errno(0x26)
	ENOTSUP         = syscall.Errno(0x56)
	ENOTTY          = syscall.Errno(0x19)
	ENXIO           = syscall.Errno(0x6)
	EOPNOTSUPP      = syscall.Errno(0x2d)
	EOVERFLOW       = syscall.Errno(0x54)
	EPERM           = syscall.Errno(0x1)
	EPFNOSUPPORT    = syscall.Errno(0x2e)
	EPIPE           = syscall.Errno(0x20)
	EPROCLIM        = syscall.Errno(0x43)
	EPROCUNAVAIL    = syscall.Errno(0x4c)
	EPROGMISMATCH   = syscall.Errno(0x4b)
	EPROGUNAVAIL    = syscall.Errno(0x4a)
	EPROTO          = syscall.Errno(0x60)
	EPROTONOSUPPORT = syscall.Errno(0x2b)
	EPROTOTYPE      = syscall.Errno(0x29)
	ERANGE          = syscall.Errno(0x22)
	EREMOTE         = syscall.Errno(0x47)
	EROFS           = syscall.Errno(0x1e)
	ERPCMISMATCH    = syscall.Errno(0x49)
	ESHUTDOWN       = syscall.Errno(0x3a)
	ESOCKTNOSUPPORT = syscall.Errno(0x2c)
	ESPIPE          = syscall.Errno(0x1d)
	ESRCH           = syscall.Errno(0x3)
	ESTALE          = syscall.Errno(0x46)
	ETIME           = syscall.Errno(0x5c)
	ETIMEDOUT       = syscall.Errno(0x3c)
	ETOOMANYREFS    = syscall.Errno(0x3b)
	ETXTBSY         = syscall.Errno(0x1a)
	EUSERS          = syscall.Errno(0x44)
	EWOULDBLOCK     = syscall.Errno(0x23)
	EXDEV           = syscall.Errno(0x12)
)

// Signals
const (
	SIGABRT   = syscall.Signal(0x6)
	SIGALRM   = syscall.Signal(0xe)
	SIGBUS    = syscall.Signal(0xa)
	SIGCHLD   = syscall.Signal(0x14)
	SIGCONT   = syscall.Signal(0x13)
	SIGEMT    = syscall.Signal(0x7)
	SIGFPE    = syscall.Signal(0x8)
	SIGHUP    = syscall.Signal(0x1)
	SIGILL    = syscall.Signal(0x4)
	SIGINFO   = syscall.Signal(0x1d)
	SIGINT    = syscall.Signal(0x2)
	SIGIO     = syscall.Signal(0x17)
	SIGIOT    = syscall.Signal(0x6)
	SIGKILL   = syscall.Signal(0x9)
	SIGPIPE   = syscall.Signal(0xd)
	SIGPROF   = syscall.Signal(0x1b)
	SIGPWR    = syscall.Signal(0x20)
	SIGQUIT   = syscall.Signal(0x3)
	SIGSEGV   = syscall.Signal(0xb)
	SIGSTOP   = syscall.Signal(0x11)
	SIGSYS    = syscall.Signal(0xc)
	SIGTERM   = syscall.Signal(0xf)
	SIGTRAP   = syscall.Signal(0x5)
	SIGTSTP   = syscall.Signal(0x12)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x10)
	SIGUSR1   = syscall.Signal(0x1e)
	SIGUSR2   = syscall.Signal(0x1f)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "device not configured"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EDEADLK", "resource deadlock avoided"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "cross-device link"},
	{19, "ENODEV", "operation not supported by device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "result too large or too small"},
	{35, "EAGAIN", "resource temporarily unavailable"},
	{36, "EINPROGRESS", "operation now in progress"},
	{37, "EALREADY", "operation already in progress"},
	{38, "ENOTSOCK", "socket operation on non-socket"},
	{39, "EDESTADDRREQ", "destination address required"},
	{40, "EMSGSIZE", "message too long"},
	{41, "EPROTOTYPE", "protocol wrong type for socket"},
	{42, "ENOPROTOOPT", "protocol option not available"},
	{43, "EPROTONOSUPPORT", "protocol not supported"},
	{44, "ESOCKTNOSUPPORT", "socket type not supported"},
	{45, "EOPNOTSUPP", "operation not supported"},
	{46, "EPFNOSUPPORT", "protocol family not supported"},
	{47, "EAFNOSUPPORT", "address family not supported by protocol family"},
	{48, "EADDRINUSE", "address already in use"},
	{49, "EADDRNOTAVAIL", "can't assign requested address"},
	{50, "ENETDOWN", "network is down"},
	{51, "ENETUNREACH", "network is unreachable"},
	{52, "ENETRESET", "network dropped connection on reset"},
	{53, "ECONNABORTED", "software caused connection abort"},
	{54, "ECONNRESET", "connection reset by peer"},
	{55, "ENOBUFS", "no buffer space available"},
	{56, "EISCONN", "socket is already connected"},
	{57, "ENOTCONN", "socket is not connected"},
	{58, "ESHUTDOWN", "can't send after socket shutdown"},
	{59, "ETOOMANYREFS", "too many references: can't splice"},
	{60, "ETIMEDOUT", "connection timed out"},
	{61, "ECONNREFUSED", "connection refused"},
	{62, "ELOOP", "too many levels of symbolic links"},
	{63, "ENAMETOOLONG", "file name too long"},
	{64, "EHOSTDOWN", "host is down"},
	{65, "EHOSTUNREACH", "no route to host"},
	{66, "ENOTEMPTY", "directory not empty"},
	{67, "EPROCLIM", "too many processes"},
	{68, "EUSERS", "too many users"},
	{69, "EDQUOT", "disc quota exceeded"},
	{70, "ESTALE", "stale NFS file handle"},
	{71, "EREMOTE", "too many levels of remote in path"},
	{72, "EBADRPC", "RPC struct is bad"},
	{73, "ERPCMISMATCH", "RPC version wrong"},
	{74, "EPROGUNAVAIL", "RPC prog. not avail"},
	{75, "EPROGMISMATCH", "program version wrong"},
	{76, "EPROCUNAVAIL", "bad procedure for program"},
	{77, "ENOLCK", "no locks available"},
	{78, "ENOSYS", "function not implemented"},
	{79, "EFTYPE", "inappropriate file type or format"},
	{80, "EAUTH", "authentication error"},
	{81, "ENEEDAUTH", "need authenticator"},
	{82, "EIDRM", "identifier removed"},
	{83, "ENOMSG", "no message of desired type"},
	{84, "EOVERFLOW", "value too large to be stored in data type"},
	{85, "EILSEQ", "illegal byte sequence"},
	{86, "ENOTSUP", "not supported"},
	{87, "ECANCELED", "operation Canceled"},
	{88, "EBADMSG", "bad or Corrupt message"},
	{89, "ENODATA", "no message available"},
	{90, "ENOSR", "no STREAM resources"},
	{91, "ENOSTR", "not a STREAM"},
	{92, "ETIME", "STREAM ioctl timeout"},
	{93, "ENOATTR", "attribute not found"},
	{94, "EMULTIHOP", "multihop attempted"},
	{95, "ENOLINK", "link has been severed"},
	{96, "ELAST", "protocol error"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/BPT trap"},
	{6, "SIGIOT", "abort trap"},
	{7, "SIGEMT", "EMT trap"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus error"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGSYS", "bad system call"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGURG", "urgent I/O condition"},
	{17, "SIGSTOP", "stopped (signal)"},
	{18, "SIGTSTP", "stopped"},
	{19, "SIGCONT", "continued"},
	{20, "SIGCHLD", "child exited"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGIO", "I/O possible"},
	{24, "SIGXCPU", "cputime limit exceeded"},
	{25, "SIGXFSZ", "filesize limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window size changes"},
	{29, "SIGINFO", "information request"},
	{30, "SIGUSR1", "user defined signal 1"},
	{31, "SIGUSR2", "user defined signal 2"},
	{32, "SIGPWR", "power fail/restart"},
}
07070100000E3D000081A4000000000000000000000001645E367C0001217B000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm64.go  // mkerrors.sh -m64
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build arm64 && netbsd
// +build arm64,netbsd

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -m64 _const.go

package unix

import "syscall"

const (
	AF_APPLETALK                      = 0x10
	AF_ARP                            = 0x1c
	AF_BLUETOOTH                      = 0x1f
	AF_CCITT                          = 0xa
	AF_CHAOS                          = 0x5
	AF_CNT                            = 0x15
	AF_COIP                           = 0x14
	AF_DATAKIT                        = 0x9
	AF_DECnet                         = 0xc
	AF_DLI                            = 0xd
	AF_E164                           = 0x1a
	AF_ECMA                           = 0x8
	AF_HYLINK                         = 0xf
	AF_IEEE80211                      = 0x20
	AF_IMPLINK                        = 0x3
	AF_INET                           = 0x2
	AF_INET6                          = 0x18
	AF_IPX                            = 0x17
	AF_ISDN                           = 0x1a
	AF_ISO                            = 0x7
	AF_LAT                            = 0xe
	AF_LINK                           = 0x12
	AF_LOCAL                          = 0x1
	AF_MAX                            = 0x23
	AF_MPLS                           = 0x21
	AF_NATM                           = 0x1b
	AF_NS                             = 0x6
	AF_OROUTE                         = 0x11
	AF_OSI                            = 0x7
	AF_PUP                            = 0x4
	AF_ROUTE                          = 0x22
	AF_SNA                            = 0xb
	AF_UNIX                           = 0x1
	AF_UNSPEC                         = 0x0
	ARPHRD_ARCNET                     = 0x7
	ARPHRD_ETHER                      = 0x1
	ARPHRD_FRELAY                     = 0xf
	ARPHRD_IEEE1394                   = 0x18
	ARPHRD_IEEE802                    = 0x6
	ARPHRD_STRIP                      = 0x17
	B0                                = 0x0
	B110                              = 0x6e
	B115200                           = 0x1c200
	B1200                             = 0x4b0
	B134                              = 0x86
	B14400                            = 0x3840
	B150                              = 0x96
	B1800                             = 0x708
	B19200                            = 0x4b00
	B200                              = 0xc8
	B230400                           = 0x38400
	B2400                             = 0x960
	B28800                            = 0x7080
	B300                              = 0x12c
	B38400                            = 0x9600
	B460800                           = 0x70800
	B4800                             = 0x12c0
	B50                               = 0x32
	B57600                            = 0xe100
	B600                              = 0x258
	B7200                             = 0x1c20
	B75                               = 0x4b
	B76800                            = 0x12c00
	B921600                           = 0xe1000
	B9600                             = 0x2580
	BIOCFEEDBACK                      = 0x8004427d
	BIOCFLUSH                         = 0x20004268
	BIOCGBLEN                         = 0x40044266
	BIOCGDLT                          = 0x4004426a
	BIOCGDLTLIST                      = 0xc0104277
	BIOCGETIF                         = 0x4090426b
	BIOCGFEEDBACK                     = 0x4004427c
	BIOCGHDRCMPLT                     = 0x40044274
	BIOCGRTIMEOUT                     = 0x4010427b
	BIOCGSEESENT                      = 0x40044278
	BIOCGSTATS                        = 0x4080426f
	BIOCGSTATSOLD                     = 0x4008426f
	BIOCIMMEDIATE                     = 0x80044270
	BIOCPROMISC                       = 0x20004269
	BIOCSBLEN                         = 0xc0044266
	BIOCSDLT                          = 0x80044276
	BIOCSETF                          = 0x80104267
	BIOCSETIF                         = 0x8090426c
	BIOCSFEEDBACK                     = 0x8004427d
	BIOCSHDRCMPLT                     = 0x80044275
	BIOCSRTIMEOUT                     = 0x8010427a
	BIOCSSEESENT                      = 0x80044279
	BIOCSTCPF                         = 0x80104272
	BIOCSUDPF                         = 0x80104273
	BIOCVERSION                       = 0x40044271
	BPF_A                             = 0x10
	BPF_ABS                           = 0x20
	BPF_ADD                           = 0x0
	BPF_ALIGNMENT                     = 0x8
	BPF_ALIGNMENT32                   = 0x4
	BPF_ALU                           = 0x4
	BPF_AND                           = 0x50
	BPF_B                             = 0x10
	BPF_DFLTBUFSIZE                   = 0x100000
	BPF_DIV                           = 0x30
	BPF_H                             = 0x8
	BPF_IMM                           = 0x0
	BPF_IND                           = 0x40
	BPF_JA                            = 0x0
	BPF_JEQ                           = 0x10
	BPF_JGE                           = 0x30
	BPF_JGT                           = 0x20
	BPF_JMP                           = 0x5
	BPF_JSET                          = 0x40
	BPF_K                             = 0x0
	BPF_LD                            = 0x0
	BPF_LDX                           = 0x1
	BPF_LEN                           = 0x80
	BPF_LSH                           = 0x60
	BPF_MAJOR_VERSION                 = 0x1
	BPF_MAXBUFSIZE                    = 0x1000000
	BPF_MAXINSNS                      = 0x200
	BPF_MEM                           = 0x60
	BPF_MEMWORDS                      = 0x10
	BPF_MINBUFSIZE                    = 0x20
	BPF_MINOR_VERSION                 = 0x1
	BPF_MISC                          = 0x7
	BPF_MSH                           = 0xa0
	BPF_MUL                           = 0x20
	BPF_NEG                           = 0x80
	BPF_OR                            = 0x40
	BPF_RELEASE                       = 0x30bb6
	BPF_RET                           = 0x6
	BPF_RSH                           = 0x70
	BPF_ST                            = 0x2
	BPF_STX                           = 0x3
	BPF_SUB                           = 0x10
	BPF_TAX                           = 0x0
	BPF_TXA                           = 0x80
	BPF_W                             = 0x0
	BPF_X                             = 0x8
	BRKINT                            = 0x2
	CFLUSH                            = 0xf
	CLOCAL                            = 0x8000
	CLONE_CSIGNAL                     = 0xff
	CLONE_FILES                       = 0x400
	CLONE_FS                          = 0x200
	CLONE_PID                         = 0x1000
	CLONE_PTRACE                      = 0x2000
	CLONE_SIGHAND                     = 0x800
	CLONE_VFORK                       = 0x4000
	CLONE_VM                          = 0x100
	CPUSTATES                         = 0x5
	CP_IDLE                           = 0x4
	CP_INTR                           = 0x3
	CP_NICE                           = 0x1
	CP_SYS                            = 0x2
	CP_USER                           = 0x0
	CREAD                             = 0x800
	CRTSCTS                           = 0x10000
	CS5                               = 0x0
	CS6                               = 0x100
	CS7                               = 0x200
	CS8                               = 0x300
	CSIZE                             = 0x300
	CSTART                            = 0x11
	CSTATUS                           = 0x14
	CSTOP                             = 0x13
	CSTOPB                            = 0x400
	CSUSP                             = 0x1a
	CTL_HW                            = 0x6
	CTL_KERN                          = 0x1
	CTL_MAXNAME                       = 0xc
	CTL_NET                           = 0x4
	CTL_QUERY                         = -0x2
	DIOCBSFLUSH                       = 0x20006478
	DLT_A429                          = 0xb8
	DLT_A653_ICM                      = 0xb9
	DLT_AIRONET_HEADER                = 0x78
	DLT_AOS                           = 0xde
	DLT_APPLE_IP_OVER_IEEE1394        = 0x8a
	DLT_ARCNET                        = 0x7
	DLT_ARCNET_LINUX                  = 0x81
	DLT_ATM_CLIP                      = 0x13
	DLT_ATM_RFC1483                   = 0xb
	DLT_AURORA                        = 0x7e
	DLT_AX25                          = 0x3
	DLT_AX25_KISS                     = 0xca
	DLT_BACNET_MS_TP                  = 0xa5
	DLT_BLUETOOTH_HCI_H4              = 0xbb
	DLT_BLUETOOTH_HCI_H4_WITH_PHDR    = 0xc9
	DLT_CAN20B                        = 0xbe
	DLT_CAN_SOCKETCAN                 = 0xe3
	DLT_CHAOS                         = 0x5
	DLT_CISCO_IOS                     = 0x76
	DLT_C_HDLC                        = 0x68
	DLT_C_HDLC_WITH_DIR               = 0xcd
	DLT_DECT                          = 0xdd
	DLT_DOCSIS                        = 0x8f
	DLT_ECONET                        = 0x73
	DLT_EN10MB                        = 0x1
	DLT_EN3MB                         = 0x2
	DLT_ENC                           = 0x6d
	DLT_ERF                           = 0xc5
	DLT_ERF_ETH                       = 0xaf
	DLT_ERF_POS                       = 0xb0
	DLT_FC_2                          = 0xe0
	DLT_FC_2_WITH_FRAME_DELIMS        = 0xe1
	DLT_FDDI                          = 0xa
	DLT_FLEXRAY                       = 0xd2
	DLT_FRELAY                        = 0x6b
	DLT_FRELAY_WITH_DIR               = 0xce
	DLT_GCOM_SERIAL                   = 0xad
	DLT_GCOM_T1E1                     = 0xac
	DLT_GPF_F                         = 0xab
	DLT_GPF_T                         = 0xaa
	DLT_GPRS_LLC                      = 0xa9
	DLT_GSMTAP_ABIS                   = 0xda
	DLT_GSMTAP_UM                     = 0xd9
	DLT_HDLC                          = 0x10
	DLT_HHDLC                         = 0x79
	DLT_HIPPI                         = 0xf
	DLT_IBM_SN                        = 0x92
	DLT_IBM_SP                        = 0x91
	DLT_IEEE802                       = 0x6
	DLT_IEEE802_11                    = 0x69
	DLT_IEEE802_11_RADIO              = 0x7f
	DLT_IEEE802_11_RADIO_AVS          = 0xa3
	DLT_IEEE802_15_4                  = 0xc3
	DLT_IEEE802_15_4_LINUX            = 0xbf
	DLT_IEEE802_15_4_NONASK_PHY       = 0xd7
	DLT_IEEE802_16_MAC_CPS            = 0xbc
	DLT_IEEE802_16_MAC_CPS_RADIO      = 0xc1
	DLT_IPMB                          = 0xc7
	DLT_IPMB_LINUX                    = 0xd1
	DLT_IPNET                         = 0xe2
	DLT_IPV4                          = 0xe4
	DLT_IPV6                          = 0xe5
	DLT_IP_OVER_FC                    = 0x7a
	DLT_JUNIPER_ATM1                  = 0x89
	DLT_JUNIPER_ATM2                  = 0x87
	DLT_JUNIPER_CHDLC                 = 0xb5
	DLT_JUNIPER_ES                    = 0x84
	DLT_JUNIPER_ETHER                 = 0xb2
	DLT_JUNIPER_FRELAY                = 0xb4
	DLT_JUNIPER_GGSN                  = 0x85
	DLT_JUNIPER_ISM                   = 0xc2
	DLT_JUNIPER_MFR                   = 0x86
	DLT_JUNIPER_MLFR                  = 0x83
	DLT_JUNIPER_MLPPP                 = 0x82
	DLT_JUNIPER_MONITOR               = 0xa4
	DLT_JUNIPER_PIC_PEER              = 0xae
	DLT_JUNIPER_PPP                   = 0xb3
	DLT_JUNIPER_PPPOE                 = 0xa7
	DLT_JUNIPER_PPPOE_ATM             = 0xa8
	DLT_JUNIPER_SERVICES              = 0x88
	DLT_JUNIPER_ST                    = 0xc8
	DLT_JUNIPER_VP                    = 0xb7
	DLT_LAPB_WITH_DIR                 = 0xcf
	DLT_LAPD                          = 0xcb
	DLT_LIN                           = 0xd4
	DLT_LINUX_EVDEV                   = 0xd8
	DLT_LINUX_IRDA                    = 0x90
	DLT_LINUX_LAPD                    = 0xb1
	DLT_LINUX_SLL                     = 0x71
	DLT_LOOP                          = 0x6c
	DLT_LTALK                         = 0x72
	DLT_MFR                           = 0xb6
	DLT_MOST                          = 0xd3
	DLT_MPLS                          = 0xdb
	DLT_MTP2                          = 0x8c
	DLT_MTP2_WITH_PHDR                = 0x8b
	DLT_MTP3                          = 0x8d
	DLT_NULL                          = 0x0
	DLT_PCI_EXP                       = 0x7d
	DLT_PFLOG                         = 0x75
	DLT_PFSYNC                        = 0x12
	DLT_PPI                           = 0xc0
	DLT_PPP                           = 0x9
	DLT_PPP_BSDOS                     = 0xe
	DLT_PPP_ETHER                     = 0x33
	DLT_PPP_PPPD                      = 0xa6
	DLT_PPP_SERIAL                    = 0x32
	DLT_PPP_WITH_DIR                  = 0xcc
	DLT_PRISM_HEADER                  = 0x77
	DLT_PRONET                        = 0x4
	DLT_RAIF1                         = 0xc6
	DLT_RAW                           = 0xc
	DLT_RAWAF_MASK                    = 0x2240000
	DLT_RIO                           = 0x7c
	DLT_SCCP                          = 0x8e
	DLT_SITA                          = 0xc4
	DLT_SLIP                          = 0x8
	DLT_SLIP_BSDOS                    = 0xd
	DLT_SUNATM                        = 0x7b
	DLT_SYMANTEC_FIREWALL             = 0x63
	DLT_TZSP                          = 0x80
	DLT_USB                           = 0xba
	DLT_USB_LINUX                     = 0xbd
	DLT_USB_LINUX_MMAPPED             = 0xdc
	DLT_WIHART                        = 0xdf
	DLT_X2E_SERIAL                    = 0xd5
	DLT_X2E_XORAYA                    = 0xd6
	DT_BLK                            = 0x6
	DT_CHR                            = 0x2
	DT_DIR                            = 0x4
	DT_FIFO                           = 0x1
	DT_LNK                            = 0xa
	DT_REG                            = 0x8
	DT_SOCK                           = 0xc
	DT_UNKNOWN                        = 0x0
	DT_WHT                            = 0xe
	ECHO                              = 0x8
	ECHOCTL                           = 0x40
	ECHOE                             = 0x2
	ECHOK                             = 0x4
	ECHOKE                            = 0x1
	ECHONL                            = 0x10
	ECHOPRT                           = 0x20
	EMUL_LINUX                        = 0x1
	EMUL_LINUX32                      = 0x5
	EMUL_MAXID                        = 0x6
	ETHERCAP_JUMBO_MTU                = 0x4
	ETHERCAP_VLAN_HWTAGGING           = 0x2
	ETHERCAP_VLAN_MTU                 = 0x1
	ETHERMIN                          = 0x2e
	ETHERMTU                          = 0x5dc
	ETHERMTU_JUMBO                    = 0x2328
	ETHERTYPE_8023                    = 0x4
	ETHERTYPE_AARP                    = 0x80f3
	ETHERTYPE_ACCTON                  = 0x8390
	ETHERTYPE_AEONIC                  = 0x8036
	ETHERTYPE_ALPHA                   = 0x814a
	ETHERTYPE_AMBER                   = 0x6008
	ETHERTYPE_AMOEBA                  = 0x8145
	ETHERTYPE_APOLLO                  = 0x80f7
	ETHERTYPE_APOLLODOMAIN            = 0x8019
	ETHERTYPE_APPLETALK               = 0x809b
	ETHERTYPE_APPLITEK                = 0x80c7
	ETHERTYPE_ARGONAUT                = 0x803a
	ETHERTYPE_ARP                     = 0x806
	ETHERTYPE_AT                      = 0x809b
	ETHERTYPE_ATALK                   = 0x809b
	ETHERTYPE_ATOMIC                  = 0x86df
	ETHERTYPE_ATT                     = 0x8069
	ETHERTYPE_ATTSTANFORD             = 0x8008
	ETHERTYPE_AUTOPHON                = 0x806a
	ETHERTYPE_AXIS                    = 0x8856
	ETHERTYPE_BCLOOP                  = 0x9003
	ETHERTYPE_BOFL                    = 0x8102
	ETHERTYPE_CABLETRON               = 0x7034
	ETHERTYPE_CHAOS                   = 0x804
	ETHERTYPE_COMDESIGN               = 0x806c
	ETHERTYPE_COMPUGRAPHIC            = 0x806d
	ETHERTYPE_COUNTERPOINT            = 0x8062
	ETHERTYPE_CRONUS                  = 0x8004
	ETHERTYPE_CRONUSVLN               = 0x8003
	ETHERTYPE_DCA                     = 0x1234
	ETHERTYPE_DDE                     = 0x807b
	ETHERTYPE_DEBNI                   = 0xaaaa
	ETHERTYPE_DECAM                   = 0x8048
	ETHERTYPE_DECCUST                 = 0x6006
	ETHERTYPE_DECDIAG                 = 0x6005
	ETHERTYPE_DECDNS                  = 0x803c
	ETHERTYPE_DECDTS                  = 0x803e
	ETHERTYPE_DECEXPER                = 0x6000
	ETHERTYPE_DECLAST                 = 0x8041
	ETHERTYPE_DECLTM                  = 0x803f
	ETHERTYPE_DECMUMPS                = 0x6009
	ETHERTYPE_DECNETBIOS              = 0x8040
	ETHERTYPE_DELTACON                = 0x86de
	ETHERTYPE_DIDDLE                  = 0x4321
	ETHERTYPE_DLOG1                   = 0x660
	ETHERTYPE_DLOG2                   = 0x661
	ETHERTYPE_DN                      = 0x6003
	ETHERTYPE_DOGFIGHT                = 0x1989
	ETHERTYPE_DSMD                    = 0x8039
	ETHERTYPE_ECMA                    = 0x803
	ETHERTYPE_ENCRYPT                 = 0x803d
	ETHERTYPE_ES                      = 0x805d
	ETHERTYPE_EXCELAN                 = 0x8010
	ETHERTYPE_EXPERDATA               = 0x8049
	ETHERTYPE_FLIP                    = 0x8146
	ETHERTYPE_FLOWCONTROL             = 0x8808
	ETHERTYPE_FRARP                   = 0x808
	ETHERTYPE_GENDYN                  = 0x8068
	ETHERTYPE_HAYES                   = 0x8130
	ETHERTYPE_HIPPI_FP                = 0x8180
	ETHERTYPE_HITACHI                 = 0x8820
	ETHERTYPE_HP                      = 0x8005
	ETHERTYPE_IEEEPUP                 = 0xa00
	ETHERTYPE_IEEEPUPAT               = 0xa01
	ETHERTYPE_IMLBL                   = 0x4c42
	ETHERTYPE_IMLBLDIAG               = 0x424c
	ETHERTYPE_IP                      = 0x800
	ETHERTYPE_IPAS                    = 0x876c
	ETHERTYPE_IPV6                    = 0x86dd
	ETHERTYPE_IPX                     = 0x8137
	ETHERTYPE_IPXNEW                  = 0x8037
	ETHERTYPE_KALPANA                 = 0x8582
	ETHERTYPE_LANBRIDGE               = 0x8038
	ETHERTYPE_LANPROBE                = 0x8888
	ETHERTYPE_LAT                     = 0x6004
	ETHERTYPE_LBACK                   = 0x9000
	ETHERTYPE_LITTLE                  = 0x8060
	ETHERTYPE_LOGICRAFT               = 0x8148
	ETHERTYPE_LOOPBACK                = 0x9000
	ETHERTYPE_MATRA                   = 0x807a
	ETHERTYPE_MAX                     = 0xffff
	ETHERTYPE_MERIT                   = 0x807c
	ETHERTYPE_MICP                    = 0x873a
	ETHERTYPE_MOPDL                   = 0x6001
	ETHERTYPE_MOPRC                   = 0x6002
	ETHERTYPE_MOTOROLA                = 0x818d
	ETHERTYPE_MPLS                    = 0x8847
	ETHERTYPE_MPLS_MCAST              = 0x8848
	ETHERTYPE_MUMPS                   = 0x813f
	ETHERTYPE_NBPCC                   = 0x3c04
	ETHERTYPE_NBPCLAIM                = 0x3c09
	ETHERTYPE_NBPCLREQ                = 0x3c05
	ETHERTYPE_NBPCLRSP                = 0x3c06
	ETHERTYPE_NBPCREQ                 = 0x3c02
	ETHERTYPE_NBPCRSP                 = 0x3c03
	ETHERTYPE_NBPDG                   = 0x3c07
	ETHERTYPE_NBPDGB                  = 0x3c08
	ETHERTYPE_NBPDLTE                 = 0x3c0a
	ETHERTYPE_NBPRAR                  = 0x3c0c
	ETHERTYPE_NBPRAS                  = 0x3c0b
	ETHERTYPE_NBPRST                  = 0x3c0d
	ETHERTYPE_NBPSCD                  = 0x3c01
	ETHERTYPE_NBPVCD                  = 0x3c00
	ETHERTYPE_NBS                     = 0x802
	ETHERTYPE_NCD                     = 0x8149
	ETHERTYPE_NESTAR                  = 0x8006
	ETHERTYPE_NETBEUI                 = 0x8191
	ETHERTYPE_NOVELL                  = 0x8138
	ETHERTYPE_NS                      = 0x600
	ETHERTYPE_NSAT                    = 0x601
	ETHERTYPE_NSCOMPAT                = 0x807
	ETHERTYPE_NTRAILER                = 0x10
	ETHERTYPE_OS9                     = 0x7007
	ETHERTYPE_OS9NET                  = 0x7009
	ETHERTYPE_PACER                   = 0x80c6
	ETHERTYPE_PAE                     = 0x888e
	ETHERTYPE_PCS                     = 0x4242
	ETHERTYPE_PLANNING                = 0x8044
	ETHERTYPE_PPP                     = 0x880b
	ETHERTYPE_PPPOE                   = 0x8864
	ETHERTYPE_PPPOEDISC               = 0x8863
	ETHERTYPE_PRIMENTS                = 0x7031
	ETHERTYPE_PUP                     = 0x200
	ETHERTYPE_PUPAT                   = 0x200
	ETHERTYPE_RACAL                   = 0x7030
	ETHERTYPE_RATIONAL                = 0x8150
	ETHERTYPE_RAWFR                   = 0x6559
	ETHERTYPE_RCL                     = 0x1995
	ETHERTYPE_RDP                     = 0x8739
	ETHERTYPE_RETIX                   = 0x80f2
	ETHERTYPE_REVARP                  = 0x8035
	ETHERTYPE_SCA                     = 0x6007
	ETHERTYPE_SECTRA                  = 0x86db
	ETHERTYPE_SECUREDATA              = 0x876d
	ETHERTYPE_SGITW                   = 0x817e
	ETHERTYPE_SG_BOUNCE               = 0x8016
	ETHERTYPE_SG_DIAG                 = 0x8013
	ETHERTYPE_SG_NETGAMES             = 0x8014
	ETHERTYPE_SG_RESV                 = 0x8015
	ETHERTYPE_SIMNET                  = 0x5208
	ETHERTYPE_SLOWPROTOCOLS           = 0x8809
	ETHERTYPE_SNA                     = 0x80d5
	ETHERTYPE_SNMP                    = 0x814c
	ETHERTYPE_SONIX                   = 0xfaf5
	ETHERTYPE_SPIDER                  = 0x809f
	ETHERTYPE_SPRITE                  = 0x500
	ETHERTYPE_STP                     = 0x8181
	ETHERTYPE_TALARIS                 = 0x812b
	ETHERTYPE_TALARISMC               = 0x852b
	ETHERTYPE_TCPCOMP                 = 0x876b
	ETHERTYPE_TCPSM                   = 0x9002
	ETHERTYPE_TEC                     = 0x814f
	ETHERTYPE_TIGAN                   = 0x802f
	ETHERTYPE_TRAIL                   = 0x1000
	ETHERTYPE_TRANSETHER              = 0x6558
	ETHERTYPE_TYMSHARE                = 0x802e
	ETHERTYPE_UBBST                   = 0x7005
	ETHERTYPE_UBDEBUG                 = 0x900
	ETHERTYPE_UBDIAGLOOP              = 0x7002
	ETHERTYPE_UBDL                    = 0x7000
	ETHERTYPE_UBNIU                   = 0x7001
	ETHERTYPE_UBNMC                   = 0x7003
	ETHERTYPE_VALID                   = 0x1600
	ETHERTYPE_VARIAN                  = 0x80dd
	ETHERTYPE_VAXELN                  = 0x803b
	ETHERTYPE_VEECO                   = 0x8067
	ETHERTYPE_VEXP                    = 0x805b
	ETHERTYPE_VGLAB                   = 0x8131
	ETHERTYPE_VINES                   = 0xbad
	ETHERTYPE_VINESECHO               = 0xbaf
	ETHERTYPE_VINESLOOP               = 0xbae
	ETHERTYPE_VITAL                   = 0xff00
	ETHERTYPE_VLAN                    = 0x8100
	ETHERTYPE_VLTLMAN                 = 0x8080
	ETHERTYPE_VPROD                   = 0x805c
	ETHERTYPE_VURESERVED              = 0x8147
	ETHERTYPE_WATERLOO                = 0x8130
	ETHERTYPE_WELLFLEET               = 0x8103
	ETHERTYPE_X25                     = 0x805
	ETHERTYPE_X75                     = 0x801
	ETHERTYPE_XNSSM                   = 0x9001
	ETHERTYPE_XTP                     = 0x817d
	ETHER_ADDR_LEN                    = 0x6
	ETHER_CRC_LEN                     = 0x4
	ETHER_CRC_POLY_BE                 = 0x4c11db6
	ETHER_CRC_POLY_LE                 = 0xedb88320
	ETHER_HDR_LEN                     = 0xe
	ETHER_MAX_LEN                     = 0x5ee
	ETHER_MAX_LEN_JUMBO               = 0x233a
	ETHER_MIN_LEN                     = 0x40
	ETHER_PPPOE_ENCAP_LEN             = 0x8
	ETHER_TYPE_LEN                    = 0x2
	ETHER_VLAN_ENCAP_LEN              = 0x4
	EVFILT_AIO                        = 0x2
	EVFILT_PROC                       = 0x4
	EVFILT_READ                       = 0x0
	EVFILT_SIGNAL                     = 0x5
	EVFILT_SYSCOUNT                   = 0x7
	EVFILT_TIMER                      = 0x6
	EVFILT_VNODE                      = 0x3
	EVFILT_WRITE                      = 0x1
	EV_ADD                            = 0x1
	EV_CLEAR                          = 0x20
	EV_DELETE                         = 0x2
	EV_DISABLE                        = 0x8
	EV_ENABLE                         = 0x4
	EV_EOF                            = 0x8000
	EV_ERROR                          = 0x4000
	EV_FLAG1                          = 0x2000
	EV_ONESHOT                        = 0x10
	EV_SYSFLAGS                       = 0xf000
	EXTA                              = 0x4b00
	EXTATTR_CMD_START                 = 0x1
	EXTATTR_CMD_STOP                  = 0x2
	EXTATTR_NAMESPACE_SYSTEM          = 0x2
	EXTATTR_NAMESPACE_USER            = 0x1
	EXTB                              = 0x9600
	EXTPROC                           = 0x800
	FD_CLOEXEC                        = 0x1
	FD_SETSIZE                        = 0x100
	FLUSHO                            = 0x800000
	F_CLOSEM                          = 0xa
	F_DUPFD                           = 0x0
	F_DUPFD_CLOEXEC                   = 0xc
	F_FSCTL                           = -0x80000000
	F_FSDIRMASK                       = 0x70000000
	F_FSIN                            = 0x10000000
	F_FSINOUT                         = 0x30000000
	F_FSOUT                           = 0x20000000
	F_FSPRIV                          = 0x8000
	F_FSVOID                          = 0x40000000
	F_GETFD                           = 0x1
	F_GETFL                           = 0x3
	F_GETLK                           = 0x7
	F_GETNOSIGPIPE                    = 0xd
	F_GETOWN                          = 0x5
	F_MAXFD                           = 0xb
	F_OK                              = 0x0
	F_PARAM_MASK                      = 0xfff
	F_PARAM_MAX                       = 0xfff
	F_RDLCK                           = 0x1
	F_SETFD                           = 0x2
	F_SETFL                           = 0x4
	F_SETLK                           = 0x8
	F_SETLKW                          = 0x9
	F_SETNOSIGPIPE                    = 0xe
	F_SETOWN                          = 0x6
	F_UNLCK                           = 0x2
	F_WRLCK                           = 0x3
	HUPCL                             = 0x4000
	HW_MACHINE                        = 0x1
	ICANON                            = 0x100
	ICMP6_FILTER                      = 0x12
	ICRNL                             = 0x100
	IEXTEN                            = 0x400
	IFAN_ARRIVAL                      = 0x0
	IFAN_DEPARTURE                    = 0x1
	IFA_ROUTE                         = 0x1
	IFF_ALLMULTI                      = 0x200
	IFF_BROADCAST                     = 0x2
	IFF_CANTCHANGE                    = 0x8f52
	IFF_DEBUG                         = 0x4
	IFF_LINK0                         = 0x1000
	IFF_LINK1                         = 0x2000
	IFF_LINK2                         = 0x4000
	IFF_LOOPBACK                      = 0x8
	IFF_MULTICAST                     = 0x8000
	IFF_NOARP                         = 0x80
	IFF_NOTRAILERS                    = 0x20
	IFF_OACTIVE                       = 0x400
	IFF_POINTOPOINT                   = 0x10
	IFF_PROMISC                       = 0x100
	IFF_RUNNING                       = 0x40
	IFF_SIMPLEX                       = 0x800
	IFF_UP                            = 0x1
	IFNAMSIZ                          = 0x10
	IFT_1822                          = 0x2
	IFT_A12MPPSWITCH                  = 0x82
	IFT_AAL2                          = 0xbb
	IFT_AAL5                          = 0x31
	IFT_ADSL                          = 0x5e
	IFT_AFLANE8023                    = 0x3b
	IFT_AFLANE8025                    = 0x3c
	IFT_ARAP                          = 0x58
	IFT_ARCNET                        = 0x23
	IFT_ARCNETPLUS                    = 0x24
	IFT_ASYNC                         = 0x54
	IFT_ATM                           = 0x25
	IFT_ATMDXI                        = 0x69
	IFT_ATMFUNI                       = 0x6a
	IFT_ATMIMA                        = 0x6b
	IFT_ATMLOGICAL                    = 0x50
	IFT_ATMRADIO                      = 0xbd
	IFT_ATMSUBINTERFACE               = 0x86
	IFT_ATMVCIENDPT                   = 0xc2
	IFT_ATMVIRTUAL                    = 0x95
	IFT_BGPPOLICYACCOUNTING           = 0xa2
	IFT_BRIDGE                        = 0xd1
	IFT_BSC                           = 0x53
	IFT_CARP                          = 0xf8
	IFT_CCTEMUL                       = 0x3d
	IFT_CEPT                          = 0x13
	IFT_CES                           = 0x85
	IFT_CHANNEL                       = 0x46
	IFT_CNR                           = 0x55
	IFT_COFFEE                        = 0x84
	IFT_COMPOSITELINK                 = 0x9b
	IFT_DCN                           = 0x8d
	IFT_DIGITALPOWERLINE              = 0x8a
	IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba
	IFT_DLSW                          = 0x4a
	IFT_DOCSCABLEDOWNSTREAM           = 0x80
	IFT_DOCSCABLEMACLAYER             = 0x7f
	IFT_DOCSCABLEUPSTREAM             = 0x81
	IFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd
	IFT_DS0                           = 0x51
	IFT_DS0BUNDLE                     = 0x52
	IFT_DS1FDL                        = 0xaa
	IFT_DS3                           = 0x1e
	IFT_DTM                           = 0x8c
	IFT_DVBASILN                      = 0xac
	IFT_DVBASIOUT                     = 0xad
	IFT_DVBRCCDOWNSTREAM              = 0x93
	IFT_DVBRCCMACLAYER                = 0x92
	IFT_DVBRCCUPSTREAM                = 0x94
	IFT_ECONET                        = 0xce
	IFT_EON                           = 0x19
	IFT_EPLRS                         = 0x57
	IFT_ESCON                         = 0x49
	IFT_ETHER                         = 0x6
	IFT_FAITH                         = 0xf2
	IFT_FAST                          = 0x7d
	IFT_FASTETHER                     = 0x3e
	IFT_FASTETHERFX                   = 0x45
	IFT_FDDI                          = 0xf
	IFT_FIBRECHANNEL                  = 0x38
	IFT_FRAMERELAYINTERCONNECT        = 0x3a
	IFT_FRAMERELAYMPI                 = 0x5c
	IFT_FRDLCIENDPT                   = 0xc1
	IFT_FRELAY                        = 0x20
	IFT_FRELAYDCE                     = 0x2c
	IFT_FRF16MFRBUNDLE                = 0xa3
	IFT_FRFORWARD                     = 0x9e
	IFT_G703AT2MB                     = 0x43
	IFT_G703AT64K                     = 0x42
	IFT_GIF                           = 0xf0
	IFT_GIGABITETHERNET               = 0x75
	IFT_GR303IDT                      = 0xb2
	IFT_GR303RDT                      = 0xb1
	IFT_H323GATEKEEPER                = 0xa4
	IFT_H323PROXY                     = 0xa5
	IFT_HDH1822                       = 0x3
	IFT_HDLC                          = 0x76
	IFT_HDSL2                         = 0xa8
	IFT_HIPERLAN2                     = 0xb7
	IFT_HIPPI                         = 0x2f
	IFT_HIPPIINTERFACE                = 0x39
	IFT_HOSTPAD                       = 0x5a
	IFT_HSSI                          = 0x2e
	IFT_HY                            = 0xe
	IFT_IBM370PARCHAN                 = 0x48
	IFT_IDSL                          = 0x9a
	IFT_IEEE1394                      = 0x90
	IFT_IEEE80211                     = 0x47
	IFT_IEEE80212                     = 0x37
	IFT_IEEE8023ADLAG                 = 0xa1
	IFT_IFGSN                         = 0x91
	IFT_IMT                           = 0xbe
	IFT_INFINIBAND                    = 0xc7
	IFT_INTERLEAVE                    = 0x7c
	IFT_IP                            = 0x7e
	IFT_IPFORWARD                     = 0x8e
	IFT_IPOVERATM                     = 0x72
	IFT_IPOVERCDLC                    = 0x6d
	IFT_IPOVERCLAW                    = 0x6e
	IFT_IPSWITCH                      = 0x4e
	IFT_ISDN                          = 0x3f
	IFT_ISDNBASIC                     = 0x14
	IFT_ISDNPRIMARY                   = 0x15
	IFT_ISDNS                         = 0x4b
	IFT_ISDNU                         = 0x4c
	IFT_ISO88022LLC                   = 0x29
	IFT_ISO88023                      = 0x7
	IFT_ISO88024                      = 0x8
	IFT_ISO88025                      = 0x9
	IFT_ISO88025CRFPINT               = 0x62
	IFT_ISO88025DTR                   = 0x56
	IFT_ISO88025FIBER                 = 0x73
	IFT_ISO88026                      = 0xa
	IFT_ISUP                          = 0xb3
	IFT_L2VLAN                        = 0x87
	IFT_L3IPVLAN                      = 0x88
	IFT_L3IPXVLAN                     = 0x89
	IFT_LAPB                          = 0x10
	IFT_LAPD                          = 0x4d
	IFT_LAPF                          = 0x77
	IFT_LINEGROUP                     = 0xd2
	IFT_LOCALTALK                     = 0x2a
	IFT_LOOP                          = 0x18
	IFT_MEDIAMAILOVERIP               = 0x8b
	IFT_MFSIGLINK                     = 0xa7
	IFT_MIOX25                        = 0x26
	IFT_MODEM                         = 0x30
	IFT_MPC                           = 0x71
	IFT_MPLS                          = 0xa6
	IFT_MPLSTUNNEL                    = 0x96
	IFT_MSDSL                         = 0x8f
	IFT_MVL                           = 0xbf
	IFT_MYRINET                       = 0x63
	IFT_NFAS                          = 0xaf
	IFT_NSIP                          = 0x1b
	IFT_OPTICALCHANNEL                = 0xc3
	IFT_OPTICALTRANSPORT              = 0xc4
	IFT_OTHER                         = 0x1
	IFT_P10                           = 0xc
	IFT_P80                           = 0xd
	IFT_PARA                          = 0x22
	IFT_PFLOG                         = 0xf5
	IFT_PFSYNC                        = 0xf6
	IFT_PLC                           = 0xae
	IFT_PON155                        = 0xcf
	IFT_PON622                        = 0xd0
	IFT_POS                           = 0xab
	IFT_PPP                           = 0x17
	IFT_PPPMULTILINKBUNDLE            = 0x6c
	IFT_PROPATM                       = 0xc5
	IFT_PROPBWAP2MP                   = 0xb8
	IFT_PROPCNLS                      = 0x59
	IFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5
	IFT_PROPDOCSWIRELESSMACLAYER      = 0xb4
	IFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6
	IFT_PROPMUX                       = 0x36
	IFT_PROPVIRTUAL                   = 0x35
	IFT_PROPWIRELESSP2P               = 0x9d
	IFT_PTPSERIAL                     = 0x16
	IFT_PVC                           = 0xf1
	IFT_Q2931                         = 0xc9
	IFT_QLLC                          = 0x44
	IFT_RADIOMAC                      = 0xbc
	IFT_RADSL                         = 0x5f
	IFT_REACHDSL                      = 0xc0
	IFT_RFC1483                       = 0x9f
	IFT_RS232                         = 0x21
	IFT_RSRB                          = 0x4f
	IFT_SDLC                          = 0x11
	IFT_SDSL                          = 0x60
	IFT_SHDSL                         = 0xa9
	IFT_SIP                           = 0x1f
	IFT_SIPSIG                        = 0xcc
	IFT_SIPTG                         = 0xcb
	IFT_SLIP                          = 0x1c
	IFT_SMDSDXI                       = 0x2b
	IFT_SMDSICIP                      = 0x34
	IFT_SONET                         = 0x27
	IFT_SONETOVERHEADCHANNEL          = 0xb9
	IFT_SONETPATH                     = 0x32
	IFT_SONETVT                       = 0x33
	IFT_SRP                           = 0x97
	IFT_SS7SIGLINK                    = 0x9c
	IFT_STACKTOSTACK                  = 0x6f
	IFT_STARLAN                       = 0xb
	IFT_STF                           = 0xd7
	IFT_T1                            = 0x12
	IFT_TDLC                          = 0x74
	IFT_TELINK                        = 0xc8
	IFT_TERMPAD                       = 0x5b
	IFT_TR008                         = 0xb0
	IFT_TRANSPHDLC                    = 0x7b
	IFT_TUNNEL                        = 0x83
	IFT_ULTRA                         = 0x1d
	IFT_USB                           = 0xa0
	IFT_V11                           = 0x40
	IFT_V35                           = 0x2d
	IFT_V36                           = 0x41
	IFT_V37                           = 0x78
	IFT_VDSL                          = 0x61
	IFT_VIRTUALIPADDRESS              = 0x70
	IFT_VIRTUALTG                     = 0xca
	IFT_VOICEDID                      = 0xd5
	IFT_VOICEEM                       = 0x64
	IFT_VOICEEMFGD                    = 0xd3
	IFT_VOICEENCAP                    = 0x67
	IFT_VOICEFGDEANA                  = 0xd4
	IFT_VOICEFXO                      = 0x65
	IFT_VOICEFXS                      = 0x66
	IFT_VOICEOVERATM                  = 0x98
	IFT_VOICEOVERCABLE                = 0xc6
	IFT_VOICEOVERFRAMERELAY           = 0x99
	IFT_VOICEOVERIP                   = 0x68
	IFT_X213                          = 0x5d
	IFT_X25                           = 0x5
	IFT_X25DDN                        = 0x4
	IFT_X25HUNTGROUP                  = 0x7a
	IFT_X25MLP                        = 0x79
	IFT_X25PLE                        = 0x28
	IFT_XETHER                        = 0x1a
	IGNBRK                            = 0x1
	IGNCR                             = 0x80
	IGNPAR                            = 0x4
	IMAXBEL                           = 0x2000
	INLCR                             = 0x40
	INPCK                             = 0x10
	IN_CLASSA_HOST                    = 0xffffff
	IN_CLASSA_MAX                     = 0x80
	IN_CLASSA_NET                     = 0xff000000
	IN_CLASSA_NSHIFT                  = 0x18
	IN_CLASSB_HOST                    = 0xffff
	IN_CLASSB_MAX                     = 0x10000
	IN_CLASSB_NET                     = 0xffff0000
	IN_CLASSB_NSHIFT                  = 0x10
	IN_CLASSC_HOST                    = 0xff
	IN_CLASSC_NET                     = 0xffffff00
	IN_CLASSC_NSHIFT                  = 0x8
	IN_CLASSD_HOST                    = 0xfffffff
	IN_CLASSD_NET                     = 0xf0000000
	IN_CLASSD_NSHIFT                  = 0x1c
	IN_LOOPBACKNET                    = 0x7f
	IPPROTO_AH                        = 0x33
	IPPROTO_CARP                      = 0x70
	IPPROTO_DONE                      = 0x101
	IPPROTO_DSTOPTS                   = 0x3c
	IPPROTO_EGP                       = 0x8
	IPPROTO_ENCAP                     = 0x62
	IPPROTO_EON                       = 0x50
	IPPROTO_ESP                       = 0x32
	IPPROTO_ETHERIP                   = 0x61
	IPPROTO_FRAGMENT                  = 0x2c
	IPPROTO_GGP                       = 0x3
	IPPROTO_GRE                       = 0x2f
	IPPROTO_HOPOPTS                   = 0x0
	IPPROTO_ICMP                      = 0x1
	IPPROTO_ICMPV6                    = 0x3a
	IPPROTO_IDP                       = 0x16
	IPPROTO_IGMP                      = 0x2
	IPPROTO_IP                        = 0x0
	IPPROTO_IPCOMP                    = 0x6c
	IPPROTO_IPIP                      = 0x4
	IPPROTO_IPV4                      = 0x4
	IPPROTO_IPV6                      = 0x29
	IPPROTO_IPV6_ICMP                 = 0x3a
	IPPROTO_MAX                       = 0x100
	IPPROTO_MAXID                     = 0x34
	IPPROTO_MOBILE                    = 0x37
	IPPROTO_NONE                      = 0x3b
	IPPROTO_PFSYNC                    = 0xf0
	IPPROTO_PIM                       = 0x67
	IPPROTO_PUP                       = 0xc
	IPPROTO_RAW                       = 0xff
	IPPROTO_ROUTING                   = 0x2b
	IPPROTO_RSVP                      = 0x2e
	IPPROTO_TCP                       = 0x6
	IPPROTO_TP                        = 0x1d
	IPPROTO_UDP                       = 0x11
	IPPROTO_VRRP                      = 0x70
	IPV6_CHECKSUM                     = 0x1a
	IPV6_DEFAULT_MULTICAST_HOPS       = 0x1
	IPV6_DEFAULT_MULTICAST_LOOP       = 0x1
	IPV6_DEFHLIM                      = 0x40
	IPV6_DONTFRAG                     = 0x3e
	IPV6_DSTOPTS                      = 0x32
	IPV6_FAITH                        = 0x1d
	IPV6_FLOWINFO_MASK                = 0xffffff0f
	IPV6_FLOWLABEL_MASK               = 0xffff0f00
	IPV6_FRAGTTL                      = 0x78
	IPV6_HLIMDEC                      = 0x1
	IPV6_HOPLIMIT                     = 0x2f
	IPV6_HOPOPTS                      = 0x31
	IPV6_IPSEC_POLICY                 = 0x1c
	IPV6_JOIN_GROUP                   = 0xc
	IPV6_LEAVE_GROUP                  = 0xd
	IPV6_MAXHLIM                      = 0xff
	IPV6_MAXPACKET                    = 0xffff
	IPV6_MMTU                         = 0x500
	IPV6_MULTICAST_HOPS               = 0xa
	IPV6_MULTICAST_IF                 = 0x9
	IPV6_MULTICAST_LOOP               = 0xb
	IPV6_NEXTHOP                      = 0x30
	IPV6_PATHMTU                      = 0x2c
	IPV6_PKTINFO                      = 0x2e
	IPV6_PORTRANGE                    = 0xe
	IPV6_PORTRANGE_DEFAULT            = 0x0
	IPV6_PORTRANGE_HIGH               = 0x1
	IPV6_PORTRANGE_LOW                = 0x2
	IPV6_RECVDSTOPTS                  = 0x28
	IPV6_RECVHOPLIMIT                 = 0x25
	IPV6_RECVHOPOPTS                  = 0x27
	IPV6_RECVPATHMTU                  = 0x2b
	IPV6_RECVPKTINFO                  = 0x24
	IPV6_RECVRTHDR                    = 0x26
	IPV6_RECVTCLASS                   = 0x39
	IPV6_RTHDR                        = 0x33
	IPV6_RTHDRDSTOPTS                 = 0x23
	IPV6_RTHDR_LOOSE                  = 0x0
	IPV6_RTHDR_STRICT                 = 0x1
	IPV6_RTHDR_TYPE_0                 = 0x0
	IPV6_SOCKOPT_RESERVED1            = 0x3
	IPV6_TCLASS                       = 0x3d
	IPV6_UNICAST_HOPS                 = 0x4
	IPV6_USE_MIN_MTU                  = 0x2a
	IPV6_V6ONLY                       = 0x1b
	IPV6_VERSION                      = 0x60
	IPV6_VERSION_MASK                 = 0xf0
	IP_ADD_MEMBERSHIP                 = 0xc
	IP_DEFAULT_MULTICAST_LOOP         = 0x1
	IP_DEFAULT_MULTICAST_TTL          = 0x1
	IP_DF                             = 0x4000
	IP_DROP_MEMBERSHIP                = 0xd
	IP_EF                             = 0x8000
	IP_ERRORMTU                       = 0x15
	IP_HDRINCL                        = 0x2
	IP_IPSEC_POLICY                   = 0x16
	IP_MAXPACKET                      = 0xffff
	IP_MAX_MEMBERSHIPS                = 0x14
	IP_MF                             = 0x2000
	IP_MINFRAGSIZE                    = 0x45
	IP_MINTTL                         = 0x18
	IP_MSS                            = 0x240
	IP_MULTICAST_IF                   = 0x9
	IP_MULTICAST_LOOP                 = 0xb
	IP_MULTICAST_TTL                  = 0xa
	IP_OFFMASK                        = 0x1fff
	IP_OPTIONS                        = 0x1
	IP_PORTRANGE                      = 0x13
	IP_PORTRANGE_DEFAULT              = 0x0
	IP_PORTRANGE_HIGH                 = 0x1
	IP_PORTRANGE_LOW                  = 0x2
	IP_RECVDSTADDR                    = 0x7
	IP_RECVIF                         = 0x14
	IP_RECVOPTS                       = 0x5
	IP_RECVRETOPTS                    = 0x6
	IP_RECVTTL                        = 0x17
	IP_RETOPTS                        = 0x8
	IP_RF                             = 0x8000
	IP_TOS                            = 0x3
	IP_TTL                            = 0x4
	ISIG                              = 0x80
	ISTRIP                            = 0x20
	IXANY                             = 0x800
	IXOFF                             = 0x400
	IXON                              = 0x200
	KERN_HOSTNAME                     = 0xa
	KERN_OSRELEASE                    = 0x2
	KERN_OSTYPE                       = 0x1
	KERN_VERSION                      = 0x4
	LOCK_EX                           = 0x2
	LOCK_NB                           = 0x4
	LOCK_SH                           = 0x1
	LOCK_UN                           = 0x8
	MADV_DONTNEED                     = 0x4
	MADV_FREE                         = 0x6
	MADV_NORMAL                       = 0x0
	MADV_RANDOM                       = 0x1
	MADV_SEQUENTIAL                   = 0x2
	MADV_SPACEAVAIL                   = 0x5
	MADV_WILLNEED                     = 0x3
	MAP_ALIGNMENT_16MB                = 0x18000000
	MAP_ALIGNMENT_1TB                 = 0x28000000
	MAP_ALIGNMENT_256TB               = 0x30000000
	MAP_ALIGNMENT_4GB                 = 0x20000000
	MAP_ALIGNMENT_64KB                = 0x10000000
	MAP_ALIGNMENT_64PB                = 0x38000000
	MAP_ALIGNMENT_MASK                = -0x1000000
	MAP_ALIGNMENT_SHIFT               = 0x18
	MAP_ANON                          = 0x1000
	MAP_FILE                          = 0x0
	MAP_FIXED                         = 0x10
	MAP_HASSEMAPHORE                  = 0x200
	MAP_INHERIT                       = 0x80
	MAP_INHERIT_COPY                  = 0x1
	MAP_INHERIT_DEFAULT               = 0x1
	MAP_INHERIT_DONATE_COPY           = 0x3
	MAP_INHERIT_NONE                  = 0x2
	MAP_INHERIT_SHARE                 = 0x0
	MAP_NORESERVE                     = 0x40
	MAP_PRIVATE                       = 0x2
	MAP_RENAME                        = 0x20
	MAP_SHARED                        = 0x1
	MAP_STACK                         = 0x2000
	MAP_TRYFIXED                      = 0x400
	MAP_WIRED                         = 0x800
	MCL_CURRENT                       = 0x1
	MCL_FUTURE                        = 0x2
	MNT_ASYNC                         = 0x40
	MNT_BASIC_FLAGS                   = 0xe782807f
	MNT_DEFEXPORTED                   = 0x200
	MNT_DISCARD                       = 0x800000
	MNT_EXKERB                        = 0x800
	MNT_EXNORESPORT                   = 0x8000000
	MNT_EXPORTANON                    = 0x400
	MNT_EXPORTED                      = 0x100
	MNT_EXPUBLIC                      = 0x10000000
	MNT_EXRDONLY                      = 0x80
	MNT_EXTATTR                       = 0x1000000
	MNT_FORCE                         = 0x80000
	MNT_GETARGS                       = 0x400000
	MNT_IGNORE                        = 0x100000
	MNT_LAZY                          = 0x3
	MNT_LOCAL                         = 0x1000
	MNT_LOG                           = 0x2000000
	MNT_NOATIME                       = 0x4000000
	MNT_NOCOREDUMP                    = 0x8000
	MNT_NODEV                         = 0x10
	MNT_NODEVMTIME                    = 0x40000000
	MNT_NOEXEC                        = 0x4
	MNT_NOSUID                        = 0x8
	MNT_NOWAIT                        = 0x2
	MNT_OP_FLAGS                      = 0x4d0000
	MNT_QUOTA                         = 0x2000
	MNT_RDONLY                        = 0x1
	MNT_RELATIME                      = 0x20000
	MNT_RELOAD                        = 0x40000
	MNT_ROOTFS                        = 0x4000
	MNT_SOFTDEP                       = 0x80000000
	MNT_SYMPERM                       = 0x20000000
	MNT_SYNCHRONOUS                   = 0x2
	MNT_UNION                         = 0x20
	MNT_UPDATE                        = 0x10000
	MNT_VISFLAGMASK                   = 0xff90ffff
	MNT_WAIT                          = 0x1
	MSG_BCAST                         = 0x100
	MSG_CMSG_CLOEXEC                  = 0x800
	MSG_CONTROLMBUF                   = 0x2000000
	MSG_CTRUNC                        = 0x20
	MSG_DONTROUTE                     = 0x4
	MSG_DONTWAIT                      = 0x80
	MSG_EOR                           = 0x8
	MSG_IOVUSRSPACE                   = 0x4000000
	MSG_LENUSRSPACE                   = 0x8000000
	MSG_MCAST                         = 0x200
	MSG_NAMEMBUF                      = 0x1000000
	MSG_NBIO                          = 0x1000
	MSG_NOSIGNAL                      = 0x400
	MSG_OOB                           = 0x1
	MSG_PEEK                          = 0x2
	MSG_TRUNC                         = 0x10
	MSG_USERFLAGS                     = 0xffffff
	MSG_WAITALL                       = 0x40
	MS_ASYNC                          = 0x1
	MS_INVALIDATE                     = 0x2
	MS_SYNC                           = 0x4
	NAME_MAX                          = 0x1ff
	NET_RT_DUMP                       = 0x1
	NET_RT_FLAGS                      = 0x2
	NET_RT_IFLIST                     = 0x5
	NET_RT_MAXID                      = 0x6
	NET_RT_OIFLIST                    = 0x4
	NET_RT_OOIFLIST                   = 0x3
	NFDBITS                           = 0x20
	NOFLSH                            = 0x80000000
	NOTE_ATTRIB                       = 0x8
	NOTE_CHILD                        = 0x4
	NOTE_DELETE                       = 0x1
	NOTE_EXEC                         = 0x20000000
	NOTE_EXIT                         = 0x80000000
	NOTE_EXTEND                       = 0x4
	NOTE_FORK                         = 0x40000000
	NOTE_LINK                         = 0x10
	NOTE_LOWAT                        = 0x1
	NOTE_PCTRLMASK                    = 0xf0000000
	NOTE_PDATAMASK                    = 0xfffff
	NOTE_RENAME                       = 0x20
	NOTE_REVOKE                       = 0x40
	NOTE_TRACK                        = 0x1
	NOTE_TRACKERR                     = 0x2
	NOTE_WRITE                        = 0x2
	OCRNL                             = 0x10
	OFIOGETBMAP                       = 0xc004667a
	ONLCR                             = 0x2
	ONLRET                            = 0x40
	ONOCR                             = 0x20
	ONOEOT                            = 0x8
	OPOST                             = 0x1
	O_ACCMODE                         = 0x3
	O_ALT_IO                          = 0x40000
	O_APPEND                          = 0x8
	O_ASYNC                           = 0x40
	O_CLOEXEC                         = 0x400000
	O_CREAT                           = 0x200
	O_DIRECT                          = 0x80000
	O_DIRECTORY                       = 0x200000
	O_DSYNC                           = 0x10000
	O_EXCL                            = 0x800
	O_EXLOCK                          = 0x20
	O_FSYNC                           = 0x80
	O_NDELAY                          = 0x4
	O_NOCTTY                          = 0x8000
	O_NOFOLLOW                        = 0x100
	O_NONBLOCK                        = 0x4
	O_NOSIGPIPE                       = 0x1000000
	O_RDONLY                          = 0x0
	O_RDWR                            = 0x2
	O_RSYNC                           = 0x20000
	O_SHLOCK                          = 0x10
	O_SYNC                            = 0x80
	O_TRUNC                           = 0x400
	O_WRONLY                          = 0x1
	PARENB                            = 0x1000
	PARMRK                            = 0x8
	PARODD                            = 0x2000
	PENDIN                            = 0x20000000
	PRIO_PGRP                         = 0x1
	PRIO_PROCESS                      = 0x0
	PRIO_USER                         = 0x2
	PRI_IOFLUSH                       = 0x7c
	PROT_EXEC                         = 0x4
	PROT_NONE                         = 0x0
	PROT_READ                         = 0x1
	PROT_WRITE                        = 0x2
	RLIMIT_AS                         = 0xa
	RLIMIT_CORE                       = 0x4
	RLIMIT_CPU                        = 0x0
	RLIMIT_DATA                       = 0x2
	RLIMIT_FSIZE                      = 0x1
	RLIMIT_MEMLOCK                    = 0x6
	RLIMIT_NOFILE                     = 0x8
	RLIMIT_NPROC                      = 0x7
	RLIMIT_RSS                        = 0x5
	RLIMIT_STACK                      = 0x3
	RLIM_INFINITY                     = 0x7fffffffffffffff
	RTAX_AUTHOR                       = 0x6
	RTAX_BRD                          = 0x7
	RTAX_DST                          = 0x0
	RTAX_GATEWAY                      = 0x1
	RTAX_GENMASK                      = 0x3
	RTAX_IFA                          = 0x5
	RTAX_IFP                          = 0x4
	RTAX_MAX                          = 0x9
	RTAX_NETMASK                      = 0x2
	RTAX_TAG                          = 0x8
	RTA_AUTHOR                        = 0x40
	RTA_BRD                           = 0x80
	RTA_DST                           = 0x1
	RTA_GATEWAY                       = 0x2
	RTA_GENMASK                       = 0x8
	RTA_IFA                           = 0x20
	RTA_IFP                           = 0x10
	RTA_NETMASK                       = 0x4
	RTA_TAG                           = 0x100
	RTF_ANNOUNCE                      = 0x20000
	RTF_BLACKHOLE                     = 0x1000
	RTF_CLONED                        = 0x2000
	RTF_CLONING                       = 0x100
	RTF_DONE                          = 0x40
	RTF_DYNAMIC                       = 0x10
	RTF_GATEWAY                       = 0x2
	RTF_HOST                          = 0x4
	RTF_LLINFO                        = 0x400
	RTF_MASK                          = 0x80
	RTF_MODIFIED                      = 0x20
	RTF_PROTO1                        = 0x8000
	RTF_PROTO2                        = 0x4000
	RTF_REJECT                        = 0x8
	RTF_SRC                           = 0x10000
	RTF_STATIC                        = 0x800
	RTF_UP                            = 0x1
	RTF_XRESOLVE                      = 0x200
	RTM_ADD                           = 0x1
	RTM_CHANGE                        = 0x3
	RTM_CHGADDR                       = 0x15
	RTM_DELADDR                       = 0xd
	RTM_DELETE                        = 0x2
	RTM_GET                           = 0x4
	RTM_IEEE80211                     = 0x11
	RTM_IFANNOUNCE                    = 0x10
	RTM_IFINFO                        = 0x14
	RTM_LLINFO_UPD                    = 0x13
	RTM_LOCK                          = 0x8
	RTM_LOSING                        = 0x5
	RTM_MISS                          = 0x7
	RTM_NEWADDR                       = 0xc
	RTM_OIFINFO                       = 0xf
	RTM_OLDADD                        = 0x9
	RTM_OLDDEL                        = 0xa
	RTM_OOIFINFO                      = 0xe
	RTM_REDIRECT                      = 0x6
	RTM_RESOLVE                       = 0xb
	RTM_RTTUNIT                       = 0xf4240
	RTM_SETGATE                       = 0x12
	RTM_VERSION                       = 0x4
	RTV_EXPIRE                        = 0x4
	RTV_HOPCOUNT                      = 0x2
	RTV_MTU                           = 0x1
	RTV_RPIPE                         = 0x8
	RTV_RTT                           = 0x40
	RTV_RTTVAR                        = 0x80
	RTV_SPIPE                         = 0x10
	RTV_SSTHRESH                      = 0x20
	RUSAGE_CHILDREN                   = -0x1
	RUSAGE_SELF                       = 0x0
	SCM_CREDS                         = 0x4
	SCM_RIGHTS                        = 0x1
	SCM_TIMESTAMP                     = 0x8
	SHUT_RD                           = 0x0
	SHUT_RDWR                         = 0x2
	SHUT_WR                           = 0x1
	SIOCADDMULTI                      = 0x80906931
	SIOCADDRT                         = 0x8038720a
	SIOCAIFADDR                       = 0x8040691a
	SIOCALIFADDR                      = 0x8118691c
	SIOCATMARK                        = 0x40047307
	SIOCDELMULTI                      = 0x80906932
	SIOCDELRT                         = 0x8038720b
	SIOCDIFADDR                       = 0x80906919
	SIOCDIFPHYADDR                    = 0x80906949
	SIOCDLIFADDR                      = 0x8118691e
	SIOCGDRVSPEC                      = 0xc028697b
	SIOCGETPFSYNC                     = 0xc09069f8
	SIOCGETSGCNT                      = 0xc0207534
	SIOCGETVIFCNT                     = 0xc0287533
	SIOCGHIWAT                        = 0x40047301
	SIOCGIFADDR                       = 0xc0906921
	SIOCGIFADDRPREF                   = 0xc0986920
	SIOCGIFALIAS                      = 0xc040691b
	SIOCGIFBRDADDR                    = 0xc0906923
	SIOCGIFCAP                        = 0xc0206976
	SIOCGIFCONF                       = 0xc0106926
	SIOCGIFDATA                       = 0xc0986985
	SIOCGIFDLT                        = 0xc0906977
	SIOCGIFDSTADDR                    = 0xc0906922
	SIOCGIFFLAGS                      = 0xc0906911
	SIOCGIFGENERIC                    = 0xc090693a
	SIOCGIFMEDIA                      = 0xc0306936
	SIOCGIFMETRIC                     = 0xc0906917
	SIOCGIFMTU                        = 0xc090697e
	SIOCGIFNETMASK                    = 0xc0906925
	SIOCGIFPDSTADDR                   = 0xc0906948
	SIOCGIFPSRCADDR                   = 0xc0906947
	SIOCGLIFADDR                      = 0xc118691d
	SIOCGLIFPHYADDR                   = 0xc118694b
	SIOCGLINKSTR                      = 0xc0286987
	SIOCGLOWAT                        = 0x40047303
	SIOCGPGRP                         = 0x40047309
	SIOCGVH                           = 0xc0906983
	SIOCIFCREATE                      = 0x8090697a
	SIOCIFDESTROY                     = 0x80906979
	SIOCIFGCLONERS                    = 0xc0106978
	SIOCINITIFADDR                    = 0xc0706984
	SIOCSDRVSPEC                      = 0x8028697b
	SIOCSETPFSYNC                     = 0x809069f7
	SIOCSHIWAT                        = 0x80047300
	SIOCSIFADDR                       = 0x8090690c
	SIOCSIFADDRPREF                   = 0x8098691f
	SIOCSIFBRDADDR                    = 0x80906913
	SIOCSIFCAP                        = 0x80206975
	SIOCSIFDSTADDR                    = 0x8090690e
	SIOCSIFFLAGS                      = 0x80906910
	SIOCSIFGENERIC                    = 0x80906939
	SIOCSIFMEDIA                      = 0xc0906935
	SIOCSIFMETRIC                     = 0x80906918
	SIOCSIFMTU                        = 0x8090697f
	SIOCSIFNETMASK                    = 0x80906916
	SIOCSIFPHYADDR                    = 0x80406946
	SIOCSLIFPHYADDR                   = 0x8118694a
	SIOCSLINKSTR                      = 0x80286988
	SIOCSLOWAT                        = 0x80047302
	SIOCSPGRP                         = 0x80047308
	SIOCSVH                           = 0xc0906982
	SIOCZIFDATA                       = 0xc0986986
	SOCK_CLOEXEC                      = 0x10000000
	SOCK_DGRAM                        = 0x2
	SOCK_FLAGS_MASK                   = 0xf0000000
	SOCK_NONBLOCK                     = 0x20000000
	SOCK_NOSIGPIPE                    = 0x40000000
	SOCK_RAW                          = 0x3
	SOCK_RDM                          = 0x4
	SOCK_SEQPACKET                    = 0x5
	SOCK_STREAM                       = 0x1
	SOL_SOCKET                        = 0xffff
	SOMAXCONN                         = 0x80
	SO_ACCEPTCONN                     = 0x2
	SO_ACCEPTFILTER                   = 0x1000
	SO_BROADCAST                      = 0x20
	SO_DEBUG                          = 0x1
	SO_DONTROUTE                      = 0x10
	SO_ERROR                          = 0x1007
	SO_KEEPALIVE                      = 0x8
	SO_LINGER                         = 0x80
	SO_NOHEADER                       = 0x100a
	SO_NOSIGPIPE                      = 0x800
	SO_OOBINLINE                      = 0x100
	SO_OVERFLOWED                     = 0x1009
	SO_RCVBUF                         = 0x1002
	SO_RCVLOWAT                       = 0x1004
	SO_RCVTIMEO                       = 0x100c
	SO_REUSEADDR                      = 0x4
	SO_REUSEPORT                      = 0x200
	SO_SNDBUF                         = 0x1001
	SO_SNDLOWAT                       = 0x1003
	SO_SNDTIMEO                       = 0x100b
	SO_TIMESTAMP                      = 0x2000
	SO_TYPE                           = 0x1008
	SO_USELOOPBACK                    = 0x40
	SYSCTL_VERSION                    = 0x1000000
	SYSCTL_VERS_0                     = 0x0
	SYSCTL_VERS_1                     = 0x1000000
	SYSCTL_VERS_MASK                  = 0xff000000
	S_ARCH1                           = 0x10000
	S_ARCH2                           = 0x20000
	S_BLKSIZE                         = 0x200
	S_IEXEC                           = 0x40
	S_IFBLK                           = 0x6000
	S_IFCHR                           = 0x2000
	S_IFDIR                           = 0x4000
	S_IFIFO                           = 0x1000
	S_IFLNK                           = 0xa000
	S_IFMT                            = 0xf000
	S_IFREG                           = 0x8000
	S_IFSOCK                          = 0xc000
	S_IFWHT                           = 0xe000
	S_IREAD                           = 0x100
	S_IRGRP                           = 0x20
	S_IROTH                           = 0x4
	S_IRUSR                           = 0x100
	S_IRWXG                           = 0x38
	S_IRWXO                           = 0x7
	S_IRWXU                           = 0x1c0
	S_ISGID                           = 0x400
	S_ISTXT                           = 0x200
	S_ISUID                           = 0x800
	S_ISVTX                           = 0x200
	S_IWGRP                           = 0x10
	S_IWOTH                           = 0x2
	S_IWRITE                          = 0x80
	S_IWUSR                           = 0x80
	S_IXGRP                           = 0x8
	S_IXOTH                           = 0x1
	S_IXUSR                           = 0x40
	S_LOGIN_SET                       = 0x1
	TCIFLUSH                          = 0x1
	TCIOFLUSH                         = 0x3
	TCOFLUSH                          = 0x2
	TCP_CONGCTL                       = 0x20
	TCP_KEEPCNT                       = 0x6
	TCP_KEEPIDLE                      = 0x3
	TCP_KEEPINIT                      = 0x7
	TCP_KEEPINTVL                     = 0x5
	TCP_MAXBURST                      = 0x4
	TCP_MAXSEG                        = 0x2
	TCP_MAXWIN                        = 0xffff
	TCP_MAX_WINSHIFT                  = 0xe
	TCP_MD5SIG                        = 0x10
	TCP_MINMSS                        = 0xd8
	TCP_MSS                           = 0x218
	TCP_NODELAY                       = 0x1
	TCSAFLUSH                         = 0x2
	TIOCCBRK                          = 0x2000747a
	TIOCCDTR                          = 0x20007478
	TIOCCONS                          = 0x80047462
	TIOCDCDTIMESTAMP                  = 0x40107458
	TIOCDRAIN                         = 0x2000745e
	TIOCEXCL                          = 0x2000740d
	TIOCEXT                           = 0x80047460
	TIOCFLAG_CDTRCTS                  = 0x10
	TIOCFLAG_CLOCAL                   = 0x2
	TIOCFLAG_CRTSCTS                  = 0x4
	TIOCFLAG_MDMBUF                   = 0x8
	TIOCFLAG_SOFTCAR                  = 0x1
	TIOCFLUSH                         = 0x80047410
	TIOCGETA                          = 0x402c7413
	TIOCGETD                          = 0x4004741a
	TIOCGFLAGS                        = 0x4004745d
	TIOCGLINED                        = 0x40207442
	TIOCGPGRP                         = 0x40047477
	TIOCGQSIZE                        = 0x40047481
	TIOCGRANTPT                       = 0x20007447
	TIOCGSID                          = 0x40047463
	TIOCGSIZE                         = 0x40087468
	TIOCGWINSZ                        = 0x40087468
	TIOCMBIC                          = 0x8004746b
	TIOCMBIS                          = 0x8004746c
	TIOCMGET                          = 0x4004746a
	TIOCMSET                          = 0x8004746d
	TIOCM_CAR                         = 0x40
	TIOCM_CD                          = 0x40
	TIOCM_CTS                         = 0x20
	TIOCM_DSR                         = 0x100
	TIOCM_DTR                         = 0x2
	TIOCM_LE                          = 0x1
	TIOCM_RI                          = 0x80
	TIOCM_RNG                         = 0x80
	TIOCM_RTS                         = 0x4
	TIOCM_SR                          = 0x10
	TIOCM_ST                          = 0x8
	TIOCNOTTY                         = 0x20007471
	TIOCNXCL                          = 0x2000740e
	TIOCOUTQ                          = 0x40047473
	TIOCPKT                           = 0x80047470
	TIOCPKT_DATA                      = 0x0
	TIOCPKT_DOSTOP                    = 0x20
	TIOCPKT_FLUSHREAD                 = 0x1
	TIOCPKT_FLUSHWRITE                = 0x2
	TIOCPKT_IOCTL                     = 0x40
	TIOCPKT_NOSTOP                    = 0x10
	TIOCPKT_START                     = 0x8
	TIOCPKT_STOP                      = 0x4
	TIOCPTMGET                        = 0x40287446
	TIOCPTSNAME                       = 0x40287448
	TIOCRCVFRAME                      = 0x80087445
	TIOCREMOTE                        = 0x80047469
	TIOCSBRK                          = 0x2000747b
	TIOCSCTTY                         = 0x20007461
	TIOCSDTR                          = 0x20007479
	TIOCSETA                          = 0x802c7414
	TIOCSETAF                         = 0x802c7416
	TIOCSETAW                         = 0x802c7415
	TIOCSETD                          = 0x8004741b
	TIOCSFLAGS                        = 0x8004745c
	TIOCSIG                           = 0x2000745f
	TIOCSLINED                        = 0x80207443
	TIOCSPGRP                         = 0x80047476
	TIOCSQSIZE                        = 0x80047480
	TIOCSSIZE                         = 0x80087467
	TIOCSTART                         = 0x2000746e
	TIOCSTAT                          = 0x80047465
	TIOCSTI                           = 0x80017472
	TIOCSTOP                          = 0x2000746f
	TIOCSWINSZ                        = 0x80087467
	TIOCUCNTL                         = 0x80047466
	TIOCXMTFRAME                      = 0x80087444
	TOSTOP                            = 0x400000
	VDISCARD                          = 0xf
	VDSUSP                            = 0xb
	VEOF                              = 0x0
	VEOL                              = 0x1
	VEOL2                             = 0x2
	VERASE                            = 0x3
	VINTR                             = 0x8
	VKILL                             = 0x5
	VLNEXT                            = 0xe
	VMIN                              = 0x10
	VQUIT                             = 0x9
	VREPRINT                          = 0x6
	VSTART                            = 0xc
	VSTATUS                           = 0x12
	VSTOP                             = 0xd
	VSUSP                             = 0xa
	VTIME                             = 0x11
	VWERASE                           = 0x4
	WALL                              = 0x8
	WALLSIG                           = 0x8
	WALTSIG                           = 0x4
	WCLONE                            = 0x4
	WCOREFLAG                         = 0x80
	WNOHANG                           = 0x1
	WNOWAIT                           = 0x10000
	WNOZOMBIE                         = 0x20000
	WOPTSCHECKED                      = 0x40000
	WSTOPPED                          = 0x7f
	WUNTRACED                         = 0x2
)

// Errors
const (
	E2BIG           = syscall.Errno(0x7)
	EACCES          = syscall.Errno(0xd)
	EADDRINUSE      = syscall.Errno(0x30)
	EADDRNOTAVAIL   = syscall.Errno(0x31)
	EAFNOSUPPORT    = syscall.Errno(0x2f)
	EAGAIN          = syscall.Errno(0x23)
	EALREADY        = syscall.Errno(0x25)
	EAUTH           = syscall.Errno(0x50)
	EBADF           = syscall.Errno(0x9)
	EBADMSG         = syscall.Errno(0x58)
	EBADRPC         = syscall.Errno(0x48)
	EBUSY           = syscall.Errno(0x10)
	ECANCELED       = syscall.Errno(0x57)
	ECHILD          = syscall.Errno(0xa)
	ECONNABORTED    = syscall.Errno(0x35)
	ECONNREFUSED    = syscall.Errno(0x3d)
	ECONNRESET      = syscall.Errno(0x36)
	EDEADLK         = syscall.Errno(0xb)
	EDESTADDRREQ    = syscall.Errno(0x27)
	EDOM            = syscall.Errno(0x21)
	EDQUOT          = syscall.Errno(0x45)
	EEXIST          = syscall.Errno(0x11)
	EFAULT          = syscall.Errno(0xe)
	EFBIG           = syscall.Errno(0x1b)
	EFTYPE          = syscall.Errno(0x4f)
	EHOSTDOWN       = syscall.Errno(0x40)
	EHOSTUNREACH    = syscall.Errno(0x41)
	EIDRM           = syscall.Errno(0x52)
	EILSEQ          = syscall.Errno(0x55)
	EINPROGRESS     = syscall.Errno(0x24)
	EINTR           = syscall.Errno(0x4)
	EINVAL          = syscall.Errno(0x16)
	EIO             = syscall.Errno(0x5)
	EISCONN         = syscall.Errno(0x38)
	EISDIR          = syscall.Errno(0x15)
	ELAST           = syscall.Errno(0x60)
	ELOOP           = syscall.Errno(0x3e)
	EMFILE          = syscall.Errno(0x18)
	EMLINK          = syscall.Errno(0x1f)
	EMSGSIZE        = syscall.Errno(0x28)
	EMULTIHOP       = syscall.Errno(0x5e)
	ENAMETOOLONG    = syscall.Errno(0x3f)
	ENEEDAUTH       = syscall.Errno(0x51)
	ENETDOWN        = syscall.Errno(0x32)
	ENETRESET       = syscall.Errno(0x34)
	ENETUNREACH     = syscall.Errno(0x33)
	ENFILE          = syscall.Errno(0x17)
	ENOATTR         = syscall.Errno(0x5d)
	ENOBUFS         = syscall.Errno(0x37)
	ENODATA         = syscall.Errno(0x59)
	ENODEV          = syscall.Errno(0x13)
	ENOENT          = syscall.Errno(0x2)
	ENOEXEC         = syscall.Errno(0x8)
	ENOLCK          = syscall.Errno(0x4d)
	ENOLINK         = syscall.Errno(0x5f)
	ENOMEM          = syscall.Errno(0xc)
	ENOMSG          = syscall.Errno(0x53)
	ENOPROTOOPT     = syscall.Errno(0x2a)
	ENOSPC          = syscall.Errno(0x1c)
	ENOSR           = syscall.Errno(0x5a)
	ENOSTR          = syscall.Errno(0x5b)
	ENOSYS          = syscall.Errno(0x4e)
	ENOTBLK         = syscall.Errno(0xf)
	ENOTCONN        = syscall.Errno(0x39)
	ENOTDIR         = syscall.Errno(0x14)
	ENOTEMPTY       = syscall.Errno(0x42)
	ENOTSOCK        = syscall.Errno(0x26)
	ENOTSUP         = syscall.Errno(0x56)
	ENOTTY          = syscall.Errno(0x19)
	ENXIO           = syscall.Errno(0x6)
	EOPNOTSUPP      = syscall.Errno(0x2d)
	EOVERFLOW       = syscall.Errno(0x54)
	EPERM           = syscall.Errno(0x1)
	EPFNOSUPPORT    = syscall.Errno(0x2e)
	EPIPE           = syscall.Errno(0x20)
	EPROCLIM        = syscall.Errno(0x43)
	EPROCUNAVAIL    = syscall.Errno(0x4c)
	EPROGMISMATCH   = syscall.Errno(0x4b)
	EPROGUNAVAIL    = syscall.Errno(0x4a)
	EPROTO          = syscall.Errno(0x60)
	EPROTONOSUPPORT = syscall.Errno(0x2b)
	EPROTOTYPE      = syscall.Errno(0x29)
	ERANGE          = syscall.Errno(0x22)
	EREMOTE         = syscall.Errno(0x47)
	EROFS           = syscall.Errno(0x1e)
	ERPCMISMATCH    = syscall.Errno(0x49)
	ESHUTDOWN       = syscall.Errno(0x3a)
	ESOCKTNOSUPPORT = syscall.Errno(0x2c)
	ESPIPE          = syscall.Errno(0x1d)
	ESRCH           = syscall.Errno(0x3)
	ESTALE          = syscall.Errno(0x46)
	ETIME           = syscall.Errno(0x5c)
	ETIMEDOUT       = syscall.Errno(0x3c)
	ETOOMANYREFS    = syscall.Errno(0x3b)
	ETXTBSY         = syscall.Errno(0x1a)
	EUSERS          = syscall.Errno(0x44)
	EWOULDBLOCK     = syscall.Errno(0x23)
	EXDEV           = syscall.Errno(0x12)
)

// Signals
const (
	SIGABRT   = syscall.Signal(0x6)
	SIGALRM   = syscall.Signal(0xe)
	SIGBUS    = syscall.Signal(0xa)
	SIGCHLD   = syscall.Signal(0x14)
	SIGCONT   = syscall.Signal(0x13)
	SIGEMT    = syscall.Signal(0x7)
	SIGFPE    = syscall.Signal(0x8)
	SIGHUP    = syscall.Signal(0x1)
	SIGILL    = syscall.Signal(0x4)
	SIGINFO   = syscall.Signal(0x1d)
	SIGINT    = syscall.Signal(0x2)
	SIGIO     = syscall.Signal(0x17)
	SIGIOT    = syscall.Signal(0x6)
	SIGKILL   = syscall.Signal(0x9)
	SIGPIPE   = syscall.Signal(0xd)
	SIGPROF   = syscall.Signal(0x1b)
	SIGPWR    = syscall.Signal(0x20)
	SIGQUIT   = syscall.Signal(0x3)
	SIGSEGV   = syscall.Signal(0xb)
	SIGSTOP   = syscall.Signal(0x11)
	SIGSYS    = syscall.Signal(0xc)
	SIGTERM   = syscall.Signal(0xf)
	SIGTRAP   = syscall.Signal(0x5)
	SIGTSTP   = syscall.Signal(0x12)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x10)
	SIGUSR1   = syscall.Signal(0x1e)
	SIGUSR2   = syscall.Signal(0x1f)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "device not configured"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EDEADLK", "resource deadlock avoided"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "cross-device link"},
	{19, "ENODEV", "operation not supported by device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "result too large or too small"},
	{35, "EAGAIN", "resource temporarily unavailable"},
	{36, "EINPROGRESS", "operation now in progress"},
	{37, "EALREADY", "operation already in progress"},
	{38, "ENOTSOCK", "socket operation on non-socket"},
	{39, "EDESTADDRREQ", "destination address required"},
	{40, "EMSGSIZE", "message too long"},
	{41, "EPROTOTYPE", "protocol wrong type for socket"},
	{42, "ENOPROTOOPT", "protocol option not available"},
	{43, "EPROTONOSUPPORT", "protocol not supported"},
	{44, "ESOCKTNOSUPPORT", "socket type not supported"},
	{45, "EOPNOTSUPP", "operation not supported"},
	{46, "EPFNOSUPPORT", "protocol family not supported"},
	{47, "EAFNOSUPPORT", "address family not supported by protocol family"},
	{48, "EADDRINUSE", "address already in use"},
	{49, "EADDRNOTAVAIL", "can't assign requested address"},
	{50, "ENETDOWN", "network is down"},
	{51, "ENETUNREACH", "network is unreachable"},
	{52, "ENETRESET", "network dropped connection on reset"},
	{53, "ECONNABORTED", "software caused connection abort"},
	{54, "ECONNRESET", "connection reset by peer"},
	{55, "ENOBUFS", "no buffer space available"},
	{56, "EISCONN", "socket is already connected"},
	{57, "ENOTCONN", "socket is not connected"},
	{58, "ESHUTDOWN", "can't send after socket shutdown"},
	{59, "ETOOMANYREFS", "too many references: can't splice"},
	{60, "ETIMEDOUT", "connection timed out"},
	{61, "ECONNREFUSED", "connection refused"},
	{62, "ELOOP", "too many levels of symbolic links"},
	{63, "ENAMETOOLONG", "file name too long"},
	{64, "EHOSTDOWN", "host is down"},
	{65, "EHOSTUNREACH", "no route to host"},
	{66, "ENOTEMPTY", "directory not empty"},
	{67, "EPROCLIM", "too many processes"},
	{68, "EUSERS", "too many users"},
	{69, "EDQUOT", "disc quota exceeded"},
	{70, "ESTALE", "stale NFS file handle"},
	{71, "EREMOTE", "too many levels of remote in path"},
	{72, "EBADRPC", "RPC struct is bad"},
	{73, "ERPCMISMATCH", "RPC version wrong"},
	{74, "EPROGUNAVAIL", "RPC prog. not avail"},
	{75, "EPROGMISMATCH", "program version wrong"},
	{76, "EPROCUNAVAIL", "bad procedure for program"},
	{77, "ENOLCK", "no locks available"},
	{78, "ENOSYS", "function not implemented"},
	{79, "EFTYPE", "inappropriate file type or format"},
	{80, "EAUTH", "authentication error"},
	{81, "ENEEDAUTH", "need authenticator"},
	{82, "EIDRM", "identifier removed"},
	{83, "ENOMSG", "no message of desired type"},
	{84, "EOVERFLOW", "value too large to be stored in data type"},
	{85, "EILSEQ", "illegal byte sequence"},
	{86, "ENOTSUP", "not supported"},
	{87, "ECANCELED", "operation Canceled"},
	{88, "EBADMSG", "bad or Corrupt message"},
	{89, "ENODATA", "no message available"},
	{90, "ENOSR", "no STREAM resources"},
	{91, "ENOSTR", "not a STREAM"},
	{92, "ETIME", "STREAM ioctl timeout"},
	{93, "ENOATTR", "attribute not found"},
	{94, "EMULTIHOP", "multihop attempted"},
	{95, "ENOLINK", "link has been severed"},
	{96, "ELAST", "protocol error"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/BPT trap"},
	{6, "SIGIOT", "abort trap"},
	{7, "SIGEMT", "EMT trap"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus error"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGSYS", "bad system call"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGURG", "urgent I/O condition"},
	{17, "SIGSTOP", "stopped (signal)"},
	{18, "SIGTSTP", "stopped"},
	{19, "SIGCONT", "continued"},
	{20, "SIGCHLD", "child exited"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGIO", "I/O possible"},
	{24, "SIGXCPU", "cputime limit exceeded"},
	{25, "SIGXFSZ", "filesize limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window size changes"},
	{29, "SIGINFO", "information request"},
	{30, "SIGUSR1", "user defined signal 1"},
	{31, "SIGUSR2", "user defined signal 2"},
	{32, "SIGPWR", "power fail/restart"},
}
 07070100000E3E000081A4000000000000000000000001645E367C00013A49000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go   // mkerrors.sh -m32
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build 386 && openbsd
// +build 386,openbsd

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -m32 _const.go

package unix

import "syscall"

const (
	AF_APPLETALK                      = 0x10
	AF_BLUETOOTH                      = 0x20
	AF_CCITT                          = 0xa
	AF_CHAOS                          = 0x5
	AF_CNT                            = 0x15
	AF_COIP                           = 0x14
	AF_DATAKIT                        = 0x9
	AF_DECnet                         = 0xc
	AF_DLI                            = 0xd
	AF_E164                           = 0x1a
	AF_ECMA                           = 0x8
	AF_ENCAP                          = 0x1c
	AF_HYLINK                         = 0xf
	AF_IMPLINK                        = 0x3
	AF_INET                           = 0x2
	AF_INET6                          = 0x18
	AF_IPX                            = 0x17
	AF_ISDN                           = 0x1a
	AF_ISO                            = 0x7
	AF_KEY                            = 0x1e
	AF_LAT                            = 0xe
	AF_LINK                           = 0x12
	AF_LOCAL                          = 0x1
	AF_MAX                            = 0x24
	AF_MPLS                           = 0x21
	AF_NATM                           = 0x1b
	AF_NS                             = 0x6
	AF_OSI                            = 0x7
	AF_PUP                            = 0x4
	AF_ROUTE                          = 0x11
	AF_SIP                            = 0x1d
	AF_SNA                            = 0xb
	AF_UNIX                           = 0x1
	AF_UNSPEC                         = 0x0
	ALTWERASE                         = 0x200
	ARPHRD_ETHER                      = 0x1
	ARPHRD_FRELAY                     = 0xf
	ARPHRD_IEEE1394                   = 0x18
	ARPHRD_IEEE802                    = 0x6
	B0                                = 0x0
	B110                              = 0x6e
	B115200                           = 0x1c200
	B1200                             = 0x4b0
	B134                              = 0x86
	B14400                            = 0x3840
	B150                              = 0x96
	B1800                             = 0x708
	B19200                            = 0x4b00
	B200                              = 0xc8
	B230400                           = 0x38400
	B2400                             = 0x960
	B28800                            = 0x7080
	B300                              = 0x12c
	B38400                            = 0x9600
	B4800                             = 0x12c0
	B50                               = 0x32
	B57600                            = 0xe100
	B600                              = 0x258
	B7200                             = 0x1c20
	B75                               = 0x4b
	B76800                            = 0x12c00
	B9600                             = 0x2580
	BIOCFLUSH                         = 0x20004268
	BIOCGBLEN                         = 0x40044266
	BIOCGDIRFILT                      = 0x4004427c
	BIOCGDLT                          = 0x4004426a
	BIOCGDLTLIST                      = 0xc008427b
	BIOCGETIF                         = 0x4020426b
	BIOCGFILDROP                      = 0x40044278
	BIOCGHDRCMPLT                     = 0x40044274
	BIOCGRSIG                         = 0x40044273
	BIOCGRTIMEOUT                     = 0x400c426e
	BIOCGSTATS                        = 0x4008426f
	BIOCIMMEDIATE                     = 0x80044270
	BIOCLOCK                          = 0x20004276
	BIOCPROMISC                       = 0x20004269
	BIOCSBLEN                         = 0xc0044266
	BIOCSDIRFILT                      = 0x8004427d
	BIOCSDLT                          = 0x8004427a
	BIOCSETF                          = 0x80084267
	BIOCSETIF                         = 0x8020426c
	BIOCSETWF                         = 0x80084277
	BIOCSFILDROP                      = 0x80044279
	BIOCSHDRCMPLT                     = 0x80044275
	BIOCSRSIG                         = 0x80044272
	BIOCSRTIMEOUT                     = 0x800c426d
	BIOCVERSION                       = 0x40044271
	BPF_A                             = 0x10
	BPF_ABS                           = 0x20
	BPF_ADD                           = 0x0
	BPF_ALIGNMENT                     = 0x4
	BPF_ALU                           = 0x4
	BPF_AND                           = 0x50
	BPF_B                             = 0x10
	BPF_DIRECTION_IN                  = 0x1
	BPF_DIRECTION_OUT                 = 0x2
	BPF_DIV                           = 0x30
	BPF_FILDROP_CAPTURE               = 0x1
	BPF_FILDROP_DROP                  = 0x2
	BPF_FILDROP_PASS                  = 0x0
	BPF_F_DIR_IN                      = 0x10
	BPF_F_DIR_MASK                    = 0x30
	BPF_F_DIR_OUT                     = 0x20
	BPF_F_DIR_SHIFT                   = 0x4
	BPF_F_FLOWID                      = 0x8
	BPF_F_PRI_MASK                    = 0x7
	BPF_H                             = 0x8
	BPF_IMM                           = 0x0
	BPF_IND                           = 0x40
	BPF_JA                            = 0x0
	BPF_JEQ                           = 0x10
	BPF_JGE                           = 0x30
	BPF_JGT                           = 0x20
	BPF_JMP                           = 0x5
	BPF_JSET                          = 0x40
	BPF_K                             = 0x0
	BPF_LD                            = 0x0
	BPF_LDX                           = 0x1
	BPF_LEN                           = 0x80
	BPF_LSH                           = 0x60
	BPF_MAJOR_VERSION                 = 0x1
	BPF_MAXBUFSIZE                    = 0x200000
	BPF_MAXINSNS                      = 0x200
	BPF_MEM                           = 0x60
	BPF_MEMWORDS                      = 0x10
	BPF_MINBUFSIZE                    = 0x20
	BPF_MINOR_VERSION                 = 0x1
	BPF_MISC                          = 0x7
	BPF_MSH                           = 0xa0
	BPF_MUL                           = 0x20
	BPF_NEG                           = 0x80
	BPF_OR                            = 0x40
	BPF_RELEASE                       = 0x30bb6
	BPF_RET                           = 0x6
	BPF_RND                           = 0xc0
	BPF_RSH                           = 0x70
	BPF_ST                            = 0x2
	BPF_STX                           = 0x3
	BPF_SUB                           = 0x10
	BPF_TAX                           = 0x0
	BPF_TXA                           = 0x80
	BPF_W                             = 0x0
	BPF_X                             = 0x8
	BRKINT                            = 0x2
	CFLUSH                            = 0xf
	CLOCAL                            = 0x8000
	CLOCK_BOOTTIME                    = 0x6
	CLOCK_MONOTONIC                   = 0x3
	CLOCK_PROCESS_CPUTIME_ID          = 0x2
	CLOCK_REALTIME                    = 0x0
	CLOCK_THREAD_CPUTIME_ID           = 0x4
	CLOCK_UPTIME                      = 0x5
	CPUSTATES                         = 0x6
	CP_IDLE                           = 0x5
	CP_INTR                           = 0x4
	CP_NICE                           = 0x1
	CP_SPIN                           = 0x3
	CP_SYS                            = 0x2
	CP_USER                           = 0x0
	CREAD                             = 0x800
	CRTSCTS                           = 0x10000
	CS5                               = 0x0
	CS6                               = 0x100
	CS7                               = 0x200
	CS8                               = 0x300
	CSIZE                             = 0x300
	CSTART                            = 0x11
	CSTATUS                           = 0xff
	CSTOP                             = 0x13
	CSTOPB                            = 0x400
	CSUSP                             = 0x1a
	CTL_HW                            = 0x6
	CTL_KERN                          = 0x1
	CTL_MAXNAME                       = 0xc
	CTL_NET                           = 0x4
	DIOCADDQUEUE                      = 0xc100445d
	DIOCADDRULE                       = 0xccc84404
	DIOCADDSTATE                      = 0xc1084425
	DIOCCHANGERULE                    = 0xccc8441a
	DIOCCLRIFFLAG                     = 0xc024445a
	DIOCCLRSRCNODES                   = 0x20004455
	DIOCCLRSTATES                     = 0xc0d04412
	DIOCCLRSTATUS                     = 0xc0244416
	DIOCGETLIMIT                      = 0xc0084427
	DIOCGETQSTATS                     = 0xc1084460
	DIOCGETQUEUE                      = 0xc100445f
	DIOCGETQUEUES                     = 0xc100445e
	DIOCGETRULE                       = 0xccc84407
	DIOCGETRULES                      = 0xccc84406
	DIOCGETRULESET                    = 0xc444443b
	DIOCGETRULESETS                   = 0xc444443a
	DIOCGETSRCNODES                   = 0xc0084454
	DIOCGETSTATE                      = 0xc1084413
	DIOCGETSTATES                     = 0xc0084419
	DIOCGETSTATUS                     = 0xc1e84415
	DIOCGETSYNFLWATS                  = 0xc0084463
	DIOCGETTIMEOUT                    = 0xc008441e
	DIOCIGETIFACES                    = 0xc0244457
	DIOCKILLSRCNODES                  = 0xc068445b
	DIOCKILLSTATES                    = 0xc0d04429
	DIOCNATLOOK                       = 0xc0504417
	DIOCOSFPADD                       = 0xc084444f
	DIOCOSFPFLUSH                     = 0x2000444e
	DIOCOSFPGET                       = 0xc0844450
	DIOCRADDADDRS                     = 0xc44c4443
	DIOCRADDTABLES                    = 0xc44c443d
	DIOCRCLRADDRS                     = 0xc44c4442
	DIOCRCLRASTATS                    = 0xc44c4448
	DIOCRCLRTABLES                    = 0xc44c443c
	DIOCRCLRTSTATS                    = 0xc44c4441
	DIOCRDELADDRS                     = 0xc44c4444
	DIOCRDELTABLES                    = 0xc44c443e
	DIOCRGETADDRS                     = 0xc44c4446
	DIOCRGETASTATS                    = 0xc44c4447
	DIOCRGETTABLES                    = 0xc44c443f
	DIOCRGETTSTATS                    = 0xc44c4440
	DIOCRINADEFINE                    = 0xc44c444d
	DIOCRSETADDRS                     = 0xc44c4445
	DIOCRSETTFLAGS                    = 0xc44c444a
	DIOCRTSTADDRS                     = 0xc44c4449
	DIOCSETDEBUG                      = 0xc0044418
	DIOCSETHOSTID                     = 0xc0044456
	DIOCSETIFFLAG                     = 0xc0244459
	DIOCSETLIMIT                      = 0xc0084428
	DIOCSETREASS                      = 0xc004445c
	DIOCSETSTATUSIF                   = 0xc0244414
	DIOCSETSYNCOOKIES                 = 0xc0014462
	DIOCSETSYNFLWATS                  = 0xc0084461
	DIOCSETTIMEOUT                    = 0xc008441d
	DIOCSTART                         = 0x20004401
	DIOCSTOP                          = 0x20004402
	DIOCXBEGIN                        = 0xc00c4451
	DIOCXCOMMIT                       = 0xc00c4452
	DIOCXROLLBACK                     = 0xc00c4453
	DLT_ARCNET                        = 0x7
	DLT_ATM_RFC1483                   = 0xb
	DLT_AX25                          = 0x3
	DLT_CHAOS                         = 0x5
	DLT_C_HDLC                        = 0x68
	DLT_EN10MB                        = 0x1
	DLT_EN3MB                         = 0x2
	DLT_ENC                           = 0xd
	DLT_FDDI                          = 0xa
	DLT_IEEE802                       = 0x6
	DLT_IEEE802_11                    = 0x69
	DLT_IEEE802_11_RADIO              = 0x7f
	DLT_LOOP                          = 0xc
	DLT_MPLS                          = 0xdb
	DLT_NULL                          = 0x0
	DLT_OPENFLOW                      = 0x10b
	DLT_PFLOG                         = 0x75
	DLT_PFSYNC                        = 0x12
	DLT_PPP                           = 0x9
	DLT_PPP_BSDOS                     = 0x10
	DLT_PPP_ETHER                     = 0x33
	DLT_PPP_SERIAL                    = 0x32
	DLT_PRONET                        = 0x4
	DLT_RAW                           = 0xe
	DLT_SLIP                          = 0x8
	DLT_SLIP_BSDOS                    = 0xf
	DLT_USBPCAP                       = 0xf9
	DLT_USER0                         = 0x93
	DLT_USER1                         = 0x94
	DLT_USER10                        = 0x9d
	DLT_USER11                        = 0x9e
	DLT_USER12                        = 0x9f
	DLT_USER13                        = 0xa0
	DLT_USER14                        = 0xa1
	DLT_USER15                        = 0xa2
	DLT_USER2                         = 0x95
	DLT_USER3                         = 0x96
	DLT_USER4                         = 0x97
	DLT_USER5                         = 0x98
	DLT_USER6                         = 0x99
	DLT_USER7                         = 0x9a
	DLT_USER8                         = 0x9b
	DLT_USER9                         = 0x9c
	DT_BLK                            = 0x6
	DT_CHR                            = 0x2
	DT_DIR                            = 0x4
	DT_FIFO                           = 0x1
	DT_LNK                            = 0xa
	DT_REG                            = 0x8
	DT_SOCK                           = 0xc
	DT_UNKNOWN                        = 0x0
	ECHO                              = 0x8
	ECHOCTL                           = 0x40
	ECHOE                             = 0x2
	ECHOK                             = 0x4
	ECHOKE                            = 0x1
	ECHONL                            = 0x10
	ECHOPRT                           = 0x20
	EMT_TAGOVF                        = 0x1
	EMUL_ENABLED                      = 0x1
	EMUL_NATIVE                       = 0x2
	ENDRUNDISC                        = 0x9
	ETH64_8021_RSVD_MASK              = 0xfffffffffff0
	ETH64_8021_RSVD_PREFIX            = 0x180c2000000
	ETHERMIN                          = 0x2e
	ETHERMTU                          = 0x5dc
	ETHERTYPE_8023                    = 0x4
	ETHERTYPE_AARP                    = 0x80f3
	ETHERTYPE_ACCTON                  = 0x8390
	ETHERTYPE_AEONIC                  = 0x8036
	ETHERTYPE_ALPHA                   = 0x814a
	ETHERTYPE_AMBER                   = 0x6008
	ETHERTYPE_AMOEBA                  = 0x8145
	ETHERTYPE_AOE                     = 0x88a2
	ETHERTYPE_APOLLO                  = 0x80f7
	ETHERTYPE_APOLLODOMAIN            = 0x8019
	ETHERTYPE_APPLETALK               = 0x809b
	ETHERTYPE_APPLITEK                = 0x80c7
	ETHERTYPE_ARGONAUT                = 0x803a
	ETHERTYPE_ARP                     = 0x806
	ETHERTYPE_AT                      = 0x809b
	ETHERTYPE_ATALK                   = 0x809b
	ETHERTYPE_ATOMIC                  = 0x86df
	ETHERTYPE_ATT                     = 0x8069
	ETHERTYPE_ATTSTANFORD             = 0x8008
	ETHERTYPE_AUTOPHON                = 0x806a
	ETHERTYPE_AXIS                    = 0x8856
	ETHERTYPE_BCLOOP                  = 0x9003
	ETHERTYPE_BOFL                    = 0x8102
	ETHERTYPE_CABLETRON               = 0x7034
	ETHERTYPE_CHAOS                   = 0x804
	ETHERTYPE_COMDESIGN               = 0x806c
	ETHERTYPE_COMPUGRAPHIC            = 0x806d
	ETHERTYPE_COUNTERPOINT            = 0x8062
	ETHERTYPE_CRONUS                  = 0x8004
	ETHERTYPE_CRONUSVLN               = 0x8003
	ETHERTYPE_DCA                     = 0x1234
	ETHERTYPE_DDE                     = 0x807b
	ETHERTYPE_DEBNI                   = 0xaaaa
	ETHERTYPE_DECAM                   = 0x8048
	ETHERTYPE_DECCUST                 = 0x6006
	ETHERTYPE_DECDIAG                 = 0x6005
	ETHERTYPE_DECDNS                  = 0x803c
	ETHERTYPE_DECDTS                  = 0x803e
	ETHERTYPE_DECEXPER                = 0x6000
	ETHERTYPE_DECLAST                 = 0x8041
	ETHERTYPE_DECLTM                  = 0x803f
	ETHERTYPE_DECMUMPS                = 0x6009
	ETHERTYPE_DECNETBIOS              = 0x8040
	ETHERTYPE_DELTACON                = 0x86de
	ETHERTYPE_DIDDLE                  = 0x4321
	ETHERTYPE_DLOG1                   = 0x660
	ETHERTYPE_DLOG2                   = 0x661
	ETHERTYPE_DN                      = 0x6003
	ETHERTYPE_DOGFIGHT                = 0x1989
	ETHERTYPE_DSMD                    = 0x8039
	ETHERTYPE_EAPOL                   = 0x888e
	ETHERTYPE_ECMA                    = 0x803
	ETHERTYPE_ENCRYPT                 = 0x803d
	ETHERTYPE_ES                      = 0x805d
	ETHERTYPE_EXCELAN                 = 0x8010
	ETHERTYPE_EXPERDATA               = 0x8049
	ETHERTYPE_FLIP                    = 0x8146
	ETHERTYPE_FLOWCONTROL             = 0x8808
	ETHERTYPE_FRARP                   = 0x808
	ETHERTYPE_GENDYN                  = 0x8068
	ETHERTYPE_HAYES                   = 0x8130
	ETHERTYPE_HIPPI_FP                = 0x8180
	ETHERTYPE_HITACHI                 = 0x8820
	ETHERTYPE_HP                      = 0x8005
	ETHERTYPE_IEEEPUP                 = 0xa00
	ETHERTYPE_IEEEPUPAT               = 0xa01
	ETHERTYPE_IMLBL                   = 0x4c42
	ETHERTYPE_IMLBLDIAG               = 0x424c
	ETHERTYPE_IP                      = 0x800
	ETHERTYPE_IPAS                    = 0x876c
	ETHERTYPE_IPV6                    = 0x86dd
	ETHERTYPE_IPX                     = 0x8137
	ETHERTYPE_IPXNEW                  = 0x8037
	ETHERTYPE_KALPANA                 = 0x8582
	ETHERTYPE_LANBRIDGE               = 0x8038
	ETHERTYPE_LANPROBE                = 0x8888
	ETHERTYPE_LAT                     = 0x6004
	ETHERTYPE_LBACK                   = 0x9000
	ETHERTYPE_LITTLE                  = 0x8060
	ETHERTYPE_LLDP                    = 0x88cc
	ETHERTYPE_LOGICRAFT               = 0x8148
	ETHERTYPE_LOOPBACK                = 0x9000
	ETHERTYPE_MACSEC                  = 0x88e5
	ETHERTYPE_MATRA                   = 0x807a
	ETHERTYPE_MAX                     = 0xffff
	ETHERTYPE_MERIT                   = 0x807c
	ETHERTYPE_MICP                    = 0x873a
	ETHERTYPE_MOPDL                   = 0x6001
	ETHERTYPE_MOPRC                   = 0x6002
	ETHERTYPE_MOTOROLA                = 0x818d
	ETHERTYPE_MPLS                    = 0x8847
	ETHERTYPE_MPLS_MCAST              = 0x8848
	ETHERTYPE_MUMPS                   = 0x813f
	ETHERTYPE_NBPCC                   = 0x3c04
	ETHERTYPE_NBPCLAIM                = 0x3c09
	ETHERTYPE_NBPCLREQ                = 0x3c05
	ETHERTYPE_NBPCLRSP                = 0x3c06
	ETHERTYPE_NBPCREQ                 = 0x3c02
	ETHERTYPE_NBPCRSP                 = 0x3c03
	ETHERTYPE_NBPDG                   = 0x3c07
	ETHERTYPE_NBPDGB                  = 0x3c08
	ETHERTYPE_NBPDLTE                 = 0x3c0a
	ETHERTYPE_NBPRAR                  = 0x3c0c
	ETHERTYPE_NBPRAS                  = 0x3c0b
	ETHERTYPE_NBPRST                  = 0x3c0d
	ETHERTYPE_NBPSCD                  = 0x3c01
	ETHERTYPE_NBPVCD                  = 0x3c00
	ETHERTYPE_NBS                     = 0x802
	ETHERTYPE_NCD                     = 0x8149
	ETHERTYPE_NESTAR                  = 0x8006
	ETHERTYPE_NETBEUI                 = 0x8191
	ETHERTYPE_NHRP                    = 0x2001
	ETHERTYPE_NOVELL                  = 0x8138
	ETHERTYPE_NS                      = 0x600
	ETHERTYPE_NSAT                    = 0x601
	ETHERTYPE_NSCOMPAT                = 0x807
	ETHERTYPE_NSH                     = 0x984f
	ETHERTYPE_NTRAILER                = 0x10
	ETHERTYPE_OS9                     = 0x7007
	ETHERTYPE_OS9NET                  = 0x7009
	ETHERTYPE_PACER                   = 0x80c6
	ETHERTYPE_PBB                     = 0x88e7
	ETHERTYPE_PCS                     = 0x4242
	ETHERTYPE_PLANNING                = 0x8044
	ETHERTYPE_PPP                     = 0x880b
	ETHERTYPE_PPPOE                   = 0x8864
	ETHERTYPE_PPPOEDISC               = 0x8863
	ETHERTYPE_PRIMENTS                = 0x7031
	ETHERTYPE_PUP                     = 0x200
	ETHERTYPE_PUPAT                   = 0x200
	ETHERTYPE_QINQ                    = 0x88a8
	ETHERTYPE_RACAL                   = 0x7030
	ETHERTYPE_RATIONAL                = 0x8150
	ETHERTYPE_RAWFR                   = 0x6559
	ETHERTYPE_RCL                     = 0x1995
	ETHERTYPE_RDP                     = 0x8739
	ETHERTYPE_RETIX                   = 0x80f2
	ETHERTYPE_REVARP                  = 0x8035
	ETHERTYPE_SCA                     = 0x6007
	ETHERTYPE_SECTRA                  = 0x86db
	ETHERTYPE_SECUREDATA              = 0x876d
	ETHERTYPE_SGITW                   = 0x817e
	ETHERTYPE_SG_BOUNCE               = 0x8016
	ETHERTYPE_SG_DIAG                 = 0x8013
	ETHERTYPE_SG_NETGAMES             = 0x8014
	ETHERTYPE_SG_RESV                 = 0x8015
	ETHERTYPE_SIMNET                  = 0x5208
	ETHERTYPE_SLOW                    = 0x8809
	ETHERTYPE_SNA                     = 0x80d5
	ETHERTYPE_SNMP                    = 0x814c
	ETHERTYPE_SONIX                   = 0xfaf5
	ETHERTYPE_SPIDER                  = 0x809f
	ETHERTYPE_SPRITE                  = 0x500
	ETHERTYPE_STP                     = 0x8181
	ETHERTYPE_TALARIS                 = 0x812b
	ETHERTYPE_TALARISMC               = 0x852b
	ETHERTYPE_TCPCOMP                 = 0x876b
	ETHERTYPE_TCPSM                   = 0x9002
	ETHERTYPE_TEC                     = 0x814f
	ETHERTYPE_TIGAN                   = 0x802f
	ETHERTYPE_TRAIL                   = 0x1000
	ETHERTYPE_TRANSETHER              = 0x6558
	ETHERTYPE_TYMSHARE                = 0x802e
	ETHERTYPE_UBBST                   = 0x7005
	ETHERTYPE_UBDEBUG                 = 0x900
	ETHERTYPE_UBDIAGLOOP              = 0x7002
	ETHERTYPE_UBDL                    = 0x7000
	ETHERTYPE_UBNIU                   = 0x7001
	ETHERTYPE_UBNMC                   = 0x7003
	ETHERTYPE_VALID                   = 0x1600
	ETHERTYPE_VARIAN                  = 0x80dd
	ETHERTYPE_VAXELN                  = 0x803b
	ETHERTYPE_VEECO                   = 0x8067
	ETHERTYPE_VEXP                    = 0x805b
	ETHERTYPE_VGLAB                   = 0x8131
	ETHERTYPE_VINES                   = 0xbad
	ETHERTYPE_VINESECHO               = 0xbaf
	ETHERTYPE_VINESLOOP               = 0xbae
	ETHERTYPE_VITAL                   = 0xff00
	ETHERTYPE_VLAN                    = 0x8100
	ETHERTYPE_VLTLMAN                 = 0x8080
	ETHERTYPE_VPROD                   = 0x805c
	ETHERTYPE_VURESERVED              = 0x8147
	ETHERTYPE_WATERLOO                = 0x8130
	ETHERTYPE_WELLFLEET               = 0x8103
	ETHERTYPE_X25                     = 0x805
	ETHERTYPE_X75                     = 0x801
	ETHERTYPE_XNSSM                   = 0x9001
	ETHERTYPE_XTP                     = 0x817d
	ETHER_ADDR_LEN                    = 0x6
	ETHER_ALIGN                       = 0x2
	ETHER_CRC_LEN                     = 0x4
	ETHER_CRC_POLY_BE                 = 0x4c11db6
	ETHER_CRC_POLY_LE                 = 0xedb88320
	ETHER_HDR_LEN                     = 0xe
	ETHER_MAX_DIX_LEN                 = 0x600
	ETHER_MAX_HARDMTU_LEN             = 0xff9b
	ETHER_MAX_LEN                     = 0x5ee
	ETHER_MIN_LEN                     = 0x40
	ETHER_TYPE_LEN                    = 0x2
	ETHER_VLAN_ENCAP_LEN              = 0x4
	EVFILT_AIO                        = -0x3
	EVFILT_DEVICE                     = -0x8
	EVFILT_EXCEPT                     = -0x9
	EVFILT_PROC                       = -0x5
	EVFILT_READ                       = -0x1
	EVFILT_SIGNAL                     = -0x6
	EVFILT_SYSCOUNT                   = 0x9
	EVFILT_TIMER                      = -0x7
	EVFILT_VNODE                      = -0x4
	EVFILT_WRITE                      = -0x2
	EVL_ENCAPLEN                      = 0x4
	EVL_PRIO_BITS                     = 0xd
	EVL_PRIO_MAX                      = 0x7
	EVL_VLID_MASK                     = 0xfff
	EVL_VLID_MAX                      = 0xffe
	EVL_VLID_MIN                      = 0x1
	EVL_VLID_NULL                     = 0x0
	EV_ADD                            = 0x1
	EV_CLEAR                          = 0x20
	EV_DELETE                         = 0x2
	EV_DISABLE                        = 0x8
	EV_DISPATCH                       = 0x80
	EV_ENABLE                         = 0x4
	EV_EOF                            = 0x8000
	EV_ERROR                          = 0x4000
	EV_FLAG1                          = 0x2000
	EV_ONESHOT                        = 0x10
	EV_RECEIPT                        = 0x40
	EV_SYSFLAGS                       = 0xf800
	EXTA                              = 0x4b00
	EXTB                              = 0x9600
	EXTPROC                           = 0x800
	FD_CLOEXEC                        = 0x1
	FD_SETSIZE                        = 0x400
	FLUSHO                            = 0x800000
	F_DUPFD                           = 0x0
	F_DUPFD_CLOEXEC                   = 0xa
	F_GETFD                           = 0x1
	F_GETFL                           = 0x3
	F_GETLK                           = 0x7
	F_GETOWN                          = 0x5
	F_ISATTY                          = 0xb
	F_OK                              = 0x0
	F_RDLCK                           = 0x1
	F_SETFD                           = 0x2
	F_SETFL                           = 0x4
	F_SETLK                           = 0x8
	F_SETLKW                          = 0x9
	F_SETOWN                          = 0x6
	F_UNLCK                           = 0x2
	F_WRLCK                           = 0x3
	HUPCL                             = 0x4000
	HW_MACHINE                        = 0x1
	ICANON                            = 0x100
	ICMP6_FILTER                      = 0x12
	ICRNL                             = 0x100
	IEXTEN                            = 0x400
	IFAN_ARRIVAL                      = 0x0
	IFAN_DEPARTURE                    = 0x1
	IFF_ALLMULTI                      = 0x200
	IFF_BROADCAST                     = 0x2
	IFF_CANTCHANGE                    = 0x8e52
	IFF_DEBUG                         = 0x4
	IFF_LINK0                         = 0x1000
	IFF_LINK1                         = 0x2000
	IFF_LINK2                         = 0x4000
	IFF_LOOPBACK                      = 0x8
	IFF_MULTICAST                     = 0x8000
	IFF_NOARP                         = 0x80
	IFF_OACTIVE                       = 0x400
	IFF_POINTOPOINT                   = 0x10
	IFF_PROMISC                       = 0x100
	IFF_RUNNING                       = 0x40
	IFF_SIMPLEX                       = 0x800
	IFF_STATICARP                     = 0x20
	IFF_UP                            = 0x1
	IFNAMSIZ                          = 0x10
	IFT_1822                          = 0x2
	IFT_A12MPPSWITCH                  = 0x82
	IFT_AAL2                          = 0xbb
	IFT_AAL5                          = 0x31
	IFT_ADSL                          = 0x5e
	IFT_AFLANE8023                    = 0x3b
	IFT_AFLANE8025                    = 0x3c
	IFT_ARAP                          = 0x58
	IFT_ARCNET                        = 0x23
	IFT_ARCNETPLUS                    = 0x24
	IFT_ASYNC                         = 0x54
	IFT_ATM                           = 0x25
	IFT_ATMDXI                        = 0x69
	IFT_ATMFUNI                       = 0x6a
	IFT_ATMIMA                        = 0x6b
	IFT_ATMLOGICAL                    = 0x50
	IFT_ATMRADIO                      = 0xbd
	IFT_ATMSUBINTERFACE               = 0x86
	IFT_ATMVCIENDPT                   = 0xc2
	IFT_ATMVIRTUAL                    = 0x95
	IFT_BGPPOLICYACCOUNTING           = 0xa2
	IFT_BLUETOOTH                     = 0xf8
	IFT_BRIDGE                        = 0xd1
	IFT_BSC                           = 0x53
	IFT_CARP                          = 0xf7
	IFT_CCTEMUL                       = 0x3d
	IFT_CEPT                          = 0x13
	IFT_CES                           = 0x85
	IFT_CHANNEL                       = 0x46
	IFT_CNR                           = 0x55
	IFT_COFFEE                        = 0x84
	IFT_COMPOSITELINK                 = 0x9b
	IFT_DCN                           = 0x8d
	IFT_DIGITALPOWERLINE              = 0x8a
	IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba
	IFT_DLSW                          = 0x4a
	IFT_DOCSCABLEDOWNSTREAM           = 0x80
	IFT_DOCSCABLEMACLAYER             = 0x7f
	IFT_DOCSCABLEUPSTREAM             = 0x81
	IFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd
	IFT_DS0                           = 0x51
	IFT_DS0BUNDLE                     = 0x52
	IFT_DS1FDL                        = 0xaa
	IFT_DS3                           = 0x1e
	IFT_DTM                           = 0x8c
	IFT_DUMMY                         = 0xf1
	IFT_DVBASILN                      = 0xac
	IFT_DVBASIOUT                     = 0xad
	IFT_DVBRCCDOWNSTREAM              = 0x93
	IFT_DVBRCCMACLAYER                = 0x92
	IFT_DVBRCCUPSTREAM                = 0x94
	IFT_ECONET                        = 0xce
	IFT_ENC                           = 0xf4
	IFT_EON                           = 0x19
	IFT_EPLRS                         = 0x57
	IFT_ESCON                         = 0x49
	IFT_ETHER                         = 0x6
	IFT_FAITH                         = 0xf3
	IFT_FAST                          = 0x7d
	IFT_FASTETHER                     = 0x3e
	IFT_FASTETHERFX                   = 0x45
	IFT_FDDI                          = 0xf
	IFT_FIBRECHANNEL                  = 0x38
	IFT_FRAMERELAYINTERCONNECT        = 0x3a
	IFT_FRAMERELAYMPI                 = 0x5c
	IFT_FRDLCIENDPT                   = 0xc1
	IFT_FRELAY                        = 0x20
	IFT_FRELAYDCE                     = 0x2c
	IFT_FRF16MFRBUNDLE                = 0xa3
	IFT_FRFORWARD                     = 0x9e
	IFT_G703AT2MB                     = 0x43
	IFT_G703AT64K                     = 0x42
	IFT_GIF                           = 0xf0
	IFT_GIGABITETHERNET               = 0x75
	IFT_GR303IDT                      = 0xb2
	IFT_GR303RDT                      = 0xb1
	IFT_H323GATEKEEPER                = 0xa4
	IFT_H323PROXY                     = 0xa5
	IFT_HDH1822                       = 0x3
	IFT_HDLC                          = 0x76
	IFT_HDSL2                         = 0xa8
	IFT_HIPERLAN2                     = 0xb7
	IFT_HIPPI                         = 0x2f
	IFT_HIPPIINTERFACE                = 0x39
	IFT_HOSTPAD                       = 0x5a
	IFT_HSSI                          = 0x2e
	IFT_HY                            = 0xe
	IFT_IBM370PARCHAN                 = 0x48
	IFT_IDSL                          = 0x9a
	IFT_IEEE1394                      = 0x90
	IFT_IEEE80211                     = 0x47
	IFT_IEEE80212                     = 0x37
	IFT_IEEE8023ADLAG                 = 0xa1
	IFT_IFGSN                         = 0x91
	IFT_IMT                           = 0xbe
	IFT_INFINIBAND                    = 0xc7
	IFT_INTERLEAVE                    = 0x7c
	IFT_IP                            = 0x7e
	IFT_IPFORWARD                     = 0x8e
	IFT_IPOVERATM                     = 0x72
	IFT_IPOVERCDLC                    = 0x6d
	IFT_IPOVERCLAW                    = 0x6e
	IFT_IPSWITCH                      = 0x4e
	IFT_ISDN                          = 0x3f
	IFT_ISDNBASIC                     = 0x14
	IFT_ISDNPRIMARY                   = 0x15
	IFT_ISDNS                         = 0x4b
	IFT_ISDNU                         = 0x4c
	IFT_ISO88022LLC                   = 0x29
	IFT_ISO88023                      = 0x7
	IFT_ISO88024                      = 0x8
	IFT_ISO88025                      = 0x9
	IFT_ISO88025CRFPINT               = 0x62
	IFT_ISO88025DTR                   = 0x56
	IFT_ISO88025FIBER                 = 0x73
	IFT_ISO88026                      = 0xa
	IFT_ISUP                          = 0xb3
	IFT_L2VLAN                        = 0x87
	IFT_L3IPVLAN                      = 0x88
	IFT_L3IPXVLAN                     = 0x89
	IFT_LAPB                          = 0x10
	IFT_LAPD                          = 0x4d
	IFT_LAPF                          = 0x77
	IFT_LINEGROUP                     = 0xd2
	IFT_LOCALTALK                     = 0x2a
	IFT_LOOP                          = 0x18
	IFT_MBIM                          = 0xfa
	IFT_MEDIAMAILOVERIP               = 0x8b
	IFT_MFSIGLINK                     = 0xa7
	IFT_MIOX25                        = 0x26
	IFT_MODEM                         = 0x30
	IFT_MPC                           = 0x71
	IFT_MPLS                          = 0xa6
	IFT_MPLSTUNNEL                    = 0x96
	IFT_MSDSL                         = 0x8f
	IFT_MVL                           = 0xbf
	IFT_MYRINET                       = 0x63
	IFT_NFAS                          = 0xaf
	IFT_NSIP                          = 0x1b
	IFT_OPTICALCHANNEL                = 0xc3
	IFT_OPTICALTRANSPORT              = 0xc4
	IFT_OTHER                         = 0x1
	IFT_P10                           = 0xc
	IFT_P80                           = 0xd
	IFT_PARA                          = 0x22
	IFT_PFLOG                         = 0xf5
	IFT_PFLOW                         = 0xf9
	IFT_PFSYNC                        = 0xf6
	IFT_PLC                           = 0xae
	IFT_PON155                        = 0xcf
	IFT_PON622                        = 0xd0
	IFT_POS                           = 0xab
	IFT_PPP                           = 0x17
	IFT_PPPMULTILINKBUNDLE            = 0x6c
	IFT_PROPATM                       = 0xc5
	IFT_PROPBWAP2MP                   = 0xb8
	IFT_PROPCNLS                      = 0x59
	IFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5
	IFT_PROPDOCSWIRELESSMACLAYER      = 0xb4
	IFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6
	IFT_PROPMUX                       = 0x36
	IFT_PROPVIRTUAL                   = 0x35
	IFT_PROPWIRELESSP2P               = 0x9d
	IFT_PTPSERIAL                     = 0x16
	IFT_PVC                           = 0xf2
	IFT_Q2931                         = 0xc9
	IFT_QLLC                          = 0x44
	IFT_RADIOMAC                      = 0xbc
	IFT_RADSL                         = 0x5f
	IFT_REACHDSL                      = 0xc0
	IFT_RFC1483                       = 0x9f
	IFT_RS232                         = 0x21
	IFT_RSRB                          = 0x4f
	IFT_SDLC                          = 0x11
	IFT_SDSL                          = 0x60
	IFT_SHDSL                         = 0xa9
	IFT_SIP                           = 0x1f
	IFT_SIPSIG                        = 0xcc
	IFT_SIPTG                         = 0xcb
	IFT_SLIP                          = 0x1c
	IFT_SMDSDXI                       = 0x2b
	IFT_SMDSICIP                      = 0x34
	IFT_SONET                         = 0x27
	IFT_SONETOVERHEADCHANNEL          = 0xb9
	IFT_SONETPATH                     = 0x32
	IFT_SONETVT                       = 0x33
	IFT_SRP                           = 0x97
	IFT_SS7SIGLINK                    = 0x9c
	IFT_STACKTOSTACK                  = 0x6f
	IFT_STARLAN                       = 0xb
	IFT_T1                            = 0x12
	IFT_TDLC                          = 0x74
	IFT_TELINK                        = 0xc8
	IFT_TERMPAD                       = 0x5b
	IFT_TR008                         = 0xb0
	IFT_TRANSPHDLC                    = 0x7b
	IFT_TUNNEL                        = 0x83
	IFT_ULTRA                         = 0x1d
	IFT_USB                           = 0xa0
	IFT_V11                           = 0x40
	IFT_V35                           = 0x2d
	IFT_V36                           = 0x41
	IFT_V37                           = 0x78
	IFT_VDSL                          = 0x61
	IFT_VIRTUALIPADDRESS              = 0x70
	IFT_VIRTUALTG                     = 0xca
	IFT_VOICEDID                      = 0xd5
	IFT_VOICEEM                       = 0x64
	IFT_VOICEEMFGD                    = 0xd3
	IFT_VOICEENCAP                    = 0x67
	IFT_VOICEFGDEANA                  = 0xd4
	IFT_VOICEFXO                      = 0x65
	IFT_VOICEFXS                      = 0x66
	IFT_VOICEOVERATM                  = 0x98
	IFT_VOICEOVERCABLE                = 0xc6
	IFT_VOICEOVERFRAMERELAY           = 0x99
	IFT_VOICEOVERIP                   = 0x68
	IFT_WIREGUARD                     = 0xfb
	IFT_X213                          = 0x5d
	IFT_X25                           = 0x5
	IFT_X25DDN                        = 0x4
	IFT_X25HUNTGROUP                  = 0x7a
	IFT_X25MLP                        = 0x79
	IFT_X25PLE                        = 0x28
	IFT_XETHER                        = 0x1a
	IGNBRK                            = 0x1
	IGNCR                             = 0x80
	IGNPAR                            = 0x4
	IMAXBEL                           = 0x2000
	INLCR                             = 0x40
	INPCK                             = 0x10
	IN_CLASSA_HOST                    = 0xffffff
	IN_CLASSA_MAX                     = 0x80
	IN_CLASSA_NET                     = 0xff000000
	IN_CLASSA_NSHIFT                  = 0x18
	IN_CLASSB_HOST                    = 0xffff
	IN_CLASSB_MAX                     = 0x10000
	IN_CLASSB_NET                     = 0xffff0000
	IN_CLASSB_NSHIFT                  = 0x10
	IN_CLASSC_HOST                    = 0xff
	IN_CLASSC_NET                     = 0xffffff00
	IN_CLASSC_NSHIFT                  = 0x8
	IN_CLASSD_HOST                    = 0xfffffff
	IN_CLASSD_NET                     = 0xf0000000
	IN_CLASSD_NSHIFT                  = 0x1c
	IN_LOOPBACKNET                    = 0x7f
	IN_RFC3021_HOST                   = 0x1
	IN_RFC3021_NET                    = 0xfffffffe
	IN_RFC3021_NSHIFT                 = 0x1f
	IPPROTO_AH                        = 0x33
	IPPROTO_CARP                      = 0x70
	IPPROTO_DIVERT                    = 0x102
	IPPROTO_DONE                      = 0x101
	IPPROTO_DSTOPTS                   = 0x3c
	IPPROTO_EGP                       = 0x8
	IPPROTO_ENCAP                     = 0x62
	IPPROTO_EON                       = 0x50
	IPPROTO_ESP                       = 0x32
	IPPROTO_ETHERIP                   = 0x61
	IPPROTO_FRAGMENT                  = 0x2c
	IPPROTO_GGP                       = 0x3
	IPPROTO_GRE                       = 0x2f
	IPPROTO_HOPOPTS                   = 0x0
	IPPROTO_ICMP                      = 0x1
	IPPROTO_ICMPV6                    = 0x3a
	IPPROTO_IDP                       = 0x16
	IPPROTO_IGMP                      = 0x2
	IPPROTO_IP                        = 0x0
	IPPROTO_IPCOMP                    = 0x6c
	IPPROTO_IPIP                      = 0x4
	IPPROTO_IPV4                      = 0x4
	IPPROTO_IPV6                      = 0x29
	IPPROTO_MAX                       = 0x100
	IPPROTO_MAXID                     = 0x103
	IPPROTO_MOBILE                    = 0x37
	IPPROTO_MPLS                      = 0x89
	IPPROTO_NONE                      = 0x3b
	IPPROTO_PFSYNC                    = 0xf0
	IPPROTO_PIM                       = 0x67
	IPPROTO_PUP                       = 0xc
	IPPROTO_RAW                       = 0xff
	IPPROTO_ROUTING                   = 0x2b
	IPPROTO_RSVP                      = 0x2e
	IPPROTO_SCTP                      = 0x84
	IPPROTO_TCP                       = 0x6
	IPPROTO_TP                        = 0x1d
	IPPROTO_UDP                       = 0x11
	IPPROTO_UDPLITE                   = 0x88
	IPV6_AUTH_LEVEL                   = 0x35
	IPV6_AUTOFLOWLABEL                = 0x3b
	IPV6_CHECKSUM                     = 0x1a
	IPV6_DEFAULT_MULTICAST_HOPS       = 0x1
	IPV6_DEFAULT_MULTICAST_LOOP       = 0x1
	IPV6_DEFHLIM                      = 0x40
	IPV6_DONTFRAG                     = 0x3e
	IPV6_DSTOPTS                      = 0x32
	IPV6_ESP_NETWORK_LEVEL            = 0x37
	IPV6_ESP_TRANS_LEVEL              = 0x36
	IPV6_FAITH                        = 0x1d
	IPV6_FLOWINFO_MASK                = 0xffffff0f
	IPV6_FLOWLABEL_MASK               = 0xffff0f00
	IPV6_FRAGTTL                      = 0x78
	IPV6_HLIMDEC                      = 0x1
	IPV6_HOPLIMIT                     = 0x2f
	IPV6_HOPOPTS                      = 0x31
	IPV6_IPCOMP_LEVEL                 = 0x3c
	IPV6_JOIN_GROUP                   = 0xc
	IPV6_LEAVE_GROUP                  = 0xd
	IPV6_MAXHLIM                      = 0xff
	IPV6_MAXPACKET                    = 0xffff
	IPV6_MINHOPCOUNT                  = 0x41
	IPV6_MMTU                         = 0x500
	IPV6_MULTICAST_HOPS               = 0xa
	IPV6_MULTICAST_IF                 = 0x9
	IPV6_MULTICAST_LOOP               = 0xb
	IPV6_NEXTHOP                      = 0x30
	IPV6_OPTIONS                      = 0x1
	IPV6_PATHMTU                      = 0x2c
	IPV6_PIPEX                        = 0x3f
	IPV6_PKTINFO                      = 0x2e
	IPV6_PORTRANGE                    = 0xe
	IPV6_PORTRANGE_DEFAULT            = 0x0
	IPV6_PORTRANGE_HIGH               = 0x1
	IPV6_PORTRANGE_LOW                = 0x2
	IPV6_RECVDSTOPTS                  = 0x28
	IPV6_RECVDSTPORT                  = 0x40
	IPV6_RECVHOPLIMIT                 = 0x25
	IPV6_RECVHOPOPTS                  = 0x27
	IPV6_RECVPATHMTU                  = 0x2b
	IPV6_RECVPKTINFO                  = 0x24
	IPV6_RECVRTHDR                    = 0x26
	IPV6_RECVTCLASS                   = 0x39
	IPV6_RTABLE                       = 0x1021
	IPV6_RTHDR                        = 0x33
	IPV6_RTHDRDSTOPTS                 = 0x23
	IPV6_RTHDR_LOOSE                  = 0x0
	IPV6_RTHDR_STRICT                 = 0x1
	IPV6_RTHDR_TYPE_0                 = 0x0
	IPV6_SOCKOPT_RESERVED1            = 0x3
	IPV6_TCLASS                       = 0x3d
	IPV6_UNICAST_HOPS                 = 0x4
	IPV6_USE_MIN_MTU                  = 0x2a
	IPV6_V6ONLY                       = 0x1b
	IPV6_VERSION                      = 0x60
	IPV6_VERSION_MASK                 = 0xf0
	IP_ADD_MEMBERSHIP                 = 0xc
	IP_AUTH_LEVEL                     = 0x14
	IP_DEFAULT_MULTICAST_LOOP         = 0x1
	IP_DEFAULT_MULTICAST_TTL          = 0x1
	IP_DF                             = 0x4000
	IP_DROP_MEMBERSHIP                = 0xd
	IP_ESP_NETWORK_LEVEL              = 0x16
	IP_ESP_TRANS_LEVEL                = 0x15
	IP_HDRINCL                        = 0x2
	IP_IPCOMP_LEVEL                   = 0x1d
	IP_IPDEFTTL                       = 0x25
	IP_IPSECFLOWINFO                  = 0x24
	IP_IPSEC_LOCAL_AUTH               = 0x1b
	IP_IPSEC_LOCAL_CRED               = 0x19
	IP_IPSEC_LOCAL_ID                 = 0x17
	IP_IPSEC_REMOTE_AUTH              = 0x1c
	IP_IPSEC_REMOTE_CRED              = 0x1a
	IP_IPSEC_REMOTE_ID                = 0x18
	IP_MAXPACKET                      = 0xffff
	IP_MAX_MEMBERSHIPS                = 0xfff
	IP_MF                             = 0x2000
	IP_MINTTL                         = 0x20
	IP_MIN_MEMBERSHIPS                = 0xf
	IP_MSS                            = 0x240
	IP_MULTICAST_IF                   = 0x9
	IP_MULTICAST_LOOP                 = 0xb
	IP_MULTICAST_TTL                  = 0xa
	IP_OFFMASK                        = 0x1fff
	IP_OPTIONS                        = 0x1
	IP_PIPEX                          = 0x22
	IP_PORTRANGE                      = 0x13
	IP_PORTRANGE_DEFAULT              = 0x0
	IP_PORTRANGE_HIGH                 = 0x1
	IP_PORTRANGE_LOW                  = 0x2
	IP_RECVDSTADDR                    = 0x7
	IP_RECVDSTPORT                    = 0x21
	IP_RECVIF                         = 0x1e
	IP_RECVOPTS                       = 0x5
	IP_RECVRETOPTS                    = 0x6
	IP_RECVRTABLE                     = 0x23
	IP_RECVTTL                        = 0x1f
	IP_RETOPTS                        = 0x8
	IP_RF                             = 0x8000
	IP_RTABLE                         = 0x1021
	IP_SENDSRCADDR                    = 0x7
	IP_TOS                            = 0x3
	IP_TTL                            = 0x4
	ISIG                              = 0x80
	ISTRIP                            = 0x20
	ITIMER_PROF                       = 0x2
	ITIMER_REAL                       = 0x0
	ITIMER_VIRTUAL                    = 0x1
	IUCLC                             = 0x1000
	IXANY                             = 0x800
	IXOFF                             = 0x400
	IXON                              = 0x200
	KERN_HOSTNAME                     = 0xa
	KERN_OSRELEASE                    = 0x2
	KERN_OSTYPE                       = 0x1
	KERN_VERSION                      = 0x4
	LCNT_OVERLOAD_FLUSH               = 0x6
	LOCK_EX                           = 0x2
	LOCK_NB                           = 0x4
	LOCK_SH                           = 0x1
	LOCK_UN                           = 0x8
	MADV_DONTNEED                     = 0x4
	MADV_FREE                         = 0x6
	MADV_NORMAL                       = 0x0
	MADV_RANDOM                       = 0x1
	MADV_SEQUENTIAL                   = 0x2
	MADV_SPACEAVAIL                   = 0x5
	MADV_WILLNEED                     = 0x3
	MAP_ANON                          = 0x1000
	MAP_ANONYMOUS                     = 0x1000
	MAP_CONCEAL                       = 0x8000
	MAP_COPY                          = 0x2
	MAP_FILE                          = 0x0
	MAP_FIXED                         = 0x10
	MAP_FLAGMASK                      = 0xfff7
	MAP_HASSEMAPHORE                  = 0x0
	MAP_INHERIT                       = 0x0
	MAP_INHERIT_COPY                  = 0x1
	MAP_INHERIT_NONE                  = 0x2
	MAP_INHERIT_SHARE                 = 0x0
	MAP_INHERIT_ZERO                  = 0x3
	MAP_NOEXTEND                      = 0x0
	MAP_NORESERVE                     = 0x0
	MAP_PRIVATE                       = 0x2
	MAP_RENAME                        = 0x0
	MAP_SHARED                        = 0x1
	MAP_STACK                         = 0x4000
	MAP_TRYFIXED                      = 0x0
	MCL_CURRENT                       = 0x1
	MCL_FUTURE                        = 0x2
	MNT_ASYNC                         = 0x40
	MNT_DEFEXPORTED                   = 0x200
	MNT_DELEXPORT                     = 0x20000
	MNT_DOOMED                        = 0x8000000
	MNT_EXPORTANON                    = 0x400
	MNT_EXPORTED                      = 0x100
	MNT_EXRDONLY                      = 0x80
	MNT_FORCE                         = 0x80000
	MNT_LAZY                          = 0x3
	MNT_LOCAL                         = 0x1000
	MNT_NOATIME                       = 0x8000
	MNT_NODEV                         = 0x10
	MNT_NOEXEC                        = 0x4
	MNT_NOPERM                        = 0x20
	MNT_NOSUID                        = 0x8
	MNT_NOWAIT                        = 0x2
	MNT_QUOTA                         = 0x2000
	MNT_RDONLY                        = 0x1
	MNT_RELOAD                        = 0x40000
	MNT_ROOTFS                        = 0x4000
	MNT_SOFTDEP                       = 0x4000000
	MNT_STALLED                       = 0x100000
	MNT_SWAPPABLE                     = 0x200000
	MNT_SYNCHRONOUS                   = 0x2
	MNT_UPDATE                        = 0x10000
	MNT_VISFLAGMASK                   = 0x400ffff
	MNT_WAIT                          = 0x1
	MNT_WANTRDWR                      = 0x2000000
	MNT_WXALLOWED                     = 0x800
	MOUNT_AFS                         = "afs"
	MOUNT_CD9660                      = "cd9660"
	MOUNT_EXT2FS                      = "ext2fs"
	MOUNT_FFS                         = "ffs"
	MOUNT_FUSEFS                      = "fuse"
	MOUNT_MFS                         = "mfs"
	MOUNT_MSDOS                       = "msdos"
	MOUNT_NCPFS                       = "ncpfs"
	MOUNT_NFS                         = "nfs"
	MOUNT_NTFS                        = "ntfs"
	MOUNT_TMPFS                       = "tmpfs"
	MOUNT_UDF                         = "udf"
	MOUNT_UFS                         = "ffs"
	MSG_BCAST                         = 0x100
	MSG_CMSG_CLOEXEC                  = 0x800
	MSG_CTRUNC                        = 0x20
	MSG_DONTROUTE                     = 0x4
	MSG_DONTWAIT                      = 0x80
	MSG_EOR                           = 0x8
	MSG_MCAST                         = 0x200
	MSG_NOSIGNAL                      = 0x400
	MSG_OOB                           = 0x1
	MSG_PEEK                          = 0x2
	MSG_TRUNC                         = 0x10
	MSG_WAITALL                       = 0x40
	MSG_WAITFORONE                    = 0x1000
	MS_ASYNC                          = 0x1
	MS_INVALIDATE                     = 0x4
	MS_SYNC                           = 0x2
	NAME_MAX                          = 0xff
	NET_RT_DUMP                       = 0x1
	NET_RT_FLAGS                      = 0x2
	NET_RT_IFLIST                     = 0x3
	NET_RT_IFNAMES                    = 0x6
	NET_RT_MAXID                      = 0x8
	NET_RT_SOURCE                     = 0x7
	NET_RT_STATS                      = 0x4
	NET_RT_TABLE                      = 0x5
	NFDBITS                           = 0x20
	NOFLSH                            = 0x80000000
	NOKERNINFO                        = 0x2000000
	NOTE_ATTRIB                       = 0x8
	NOTE_CHANGE                       = 0x1
	NOTE_CHILD                        = 0x4
	NOTE_DELETE                       = 0x1
	NOTE_EOF                          = 0x2
	NOTE_EXEC                         = 0x20000000
	NOTE_EXIT                         = 0x80000000
	NOTE_EXTEND                       = 0x4
	NOTE_FORK                         = 0x40000000
	NOTE_LINK                         = 0x10
	NOTE_LOWAT                        = 0x1
	NOTE_OOB                          = 0x4
	NOTE_PCTRLMASK                    = 0xf0000000
	NOTE_PDATAMASK                    = 0xfffff
	NOTE_RENAME                       = 0x20
	NOTE_REVOKE                       = 0x40
	NOTE_TRACK                        = 0x1
	NOTE_TRACKERR                     = 0x2
	NOTE_TRUNCATE                     = 0x80
	NOTE_WRITE                        = 0x2
	OCRNL                             = 0x10
	OLCUC                             = 0x20
	ONLCR                             = 0x2
	ONLRET                            = 0x80
	ONOCR                             = 0x40
	ONOEOT                            = 0x8
	OPOST                             = 0x1
	OXTABS                            = 0x4
	O_ACCMODE                         = 0x3
	O_APPEND                          = 0x8
	O_ASYNC                           = 0x40
	O_CLOEXEC                         = 0x10000
	O_CREAT                           = 0x200
	O_DIRECTORY                       = 0x20000
	O_DSYNC                           = 0x80
	O_EXCL                            = 0x800
	O_EXLOCK                          = 0x20
	O_FSYNC                           = 0x80
	O_NDELAY                          = 0x4
	O_NOCTTY                          = 0x8000
	O_NOFOLLOW                        = 0x100
	O_NONBLOCK                        = 0x4
	O_RDONLY                          = 0x0
	O_RDWR                            = 0x2
	O_RSYNC                           = 0x80
	O_SHLOCK                          = 0x10
	O_SYNC                            = 0x80
	O_TRUNC                           = 0x400
	O_WRONLY                          = 0x1
	PARENB                            = 0x1000
	PARMRK                            = 0x8
	PARODD                            = 0x2000
	PENDIN                            = 0x20000000
	PF_FLUSH                          = 0x1
	PRIO_PGRP                         = 0x1
	PRIO_PROCESS                      = 0x0
	PRIO_USER                         = 0x2
	PROT_EXEC                         = 0x4
	PROT_NONE                         = 0x0
	PROT_READ                         = 0x1
	PROT_WRITE                        = 0x2
	RLIMIT_CORE                       = 0x4
	RLIMIT_CPU                        = 0x0
	RLIMIT_DATA                       = 0x2
	RLIMIT_FSIZE                      = 0x1
	RLIMIT_MEMLOCK                    = 0x6
	RLIMIT_NOFILE                     = 0x8
	RLIMIT_NPROC                      = 0x7
	RLIMIT_RSS                        = 0x5
	RLIMIT_STACK                      = 0x3
	RLIM_INFINITY                     = 0x7fffffffffffffff
	RTAX_AUTHOR                       = 0x6
	RTAX_BFD                          = 0xb
	RTAX_BRD                          = 0x7
	RTAX_DNS                          = 0xc
	RTAX_DST                          = 0x0
	RTAX_GATEWAY                      = 0x1
	RTAX_GENMASK                      = 0x3
	RTAX_IFA                          = 0x5
	RTAX_IFP                          = 0x4
	RTAX_LABEL                        = 0xa
	RTAX_MAX                          = 0xf
	RTAX_NETMASK                      = 0x2
	RTAX_SEARCH                       = 0xe
	RTAX_SRC                          = 0x8
	RTAX_SRCMASK                      = 0x9
	RTAX_STATIC                       = 0xd
	RTA_AUTHOR                        = 0x40
	RTA_BFD                           = 0x800
	RTA_BRD                           = 0x80
	RTA_DNS                           = 0x1000
	RTA_DST                           = 0x1
	RTA_GATEWAY                       = 0x2
	RTA_GENMASK                       = 0x8
	RTA_IFA                           = 0x20
	RTA_IFP                           = 0x10
	RTA_LABEL                         = 0x400
	RTA_NETMASK                       = 0x4
	RTA_SEARCH                        = 0x4000
	RTA_SRC                           = 0x100
	RTA_SRCMASK                       = 0x200
	RTA_STATIC                        = 0x2000
	RTF_ANNOUNCE                      = 0x4000
	RTF_BFD                           = 0x1000000
	RTF_BLACKHOLE                     = 0x1000
	RTF_BROADCAST                     = 0x400000
	RTF_CACHED                        = 0x20000
	RTF_CLONED                        = 0x10000
	RTF_CLONING                       = 0x100
	RTF_CONNECTED                     = 0x800000
	RTF_DONE                          = 0x40
	RTF_DYNAMIC                       = 0x10
	RTF_FMASK                         = 0x110fc08
	RTF_GATEWAY                       = 0x2
	RTF_HOST                          = 0x4
	RTF_LLINFO                        = 0x400
	RTF_LOCAL                         = 0x200000
	RTF_MODIFIED                      = 0x20
	RTF_MPATH                         = 0x40000
	RTF_MPLS                          = 0x100000
	RTF_MULTICAST                     = 0x200
	RTF_PERMANENT_ARP                 = 0x2000
	RTF_PROTO1                        = 0x8000
	RTF_PROTO2                        = 0x4000
	RTF_PROTO3                        = 0x2000
	RTF_REJECT                        = 0x8
	RTF_STATIC                        = 0x800
	RTF_UP                            = 0x1
	RTF_USETRAILERS                   = 0x8000
	RTM_80211INFO                     = 0x15
	RTM_ADD                           = 0x1
	RTM_BFD                           = 0x12
	RTM_CHANGE                        = 0x3
	RTM_CHGADDRATTR                   = 0x14
	RTM_DELADDR                       = 0xd
	RTM_DELETE                        = 0x2
	RTM_DESYNC                        = 0x10
	RTM_GET                           = 0x4
	RTM_IFANNOUNCE                    = 0xf
	RTM_IFINFO                        = 0xe
	RTM_INVALIDATE                    = 0x11
	RTM_LOSING                        = 0x5
	RTM_MAXSIZE                       = 0x800
	RTM_MISS                          = 0x7
	RTM_NEWADDR                       = 0xc
	RTM_PROPOSAL                      = 0x13
	RTM_REDIRECT                      = 0x6
	RTM_RESOLVE                       = 0xb
	RTM_SOURCE                        = 0x16
	RTM_VERSION                       = 0x5
	RTV_EXPIRE                        = 0x4
	RTV_HOPCOUNT                      = 0x2
	RTV_MTU                           = 0x1
	RTV_RPIPE                         = 0x8
	RTV_RTT                           = 0x40
	RTV_RTTVAR                        = 0x80
	RTV_SPIPE                         = 0x10
	RTV_SSTHRESH                      = 0x20
	RT_TABLEID_BITS                   = 0x8
	RT_TABLEID_MASK                   = 0xff
	RT_TABLEID_MAX                    = 0xff
	RUSAGE_CHILDREN                   = -0x1
	RUSAGE_SELF                       = 0x0
	RUSAGE_THREAD                     = 0x1
	SCM_RIGHTS                        = 0x1
	SCM_TIMESTAMP                     = 0x4
	SEEK_CUR                          = 0x1
	SEEK_END                          = 0x2
	SEEK_SET                          = 0x0
	SHUT_RD                           = 0x0
	SHUT_RDWR                         = 0x2
	SHUT_WR                           = 0x1
	SIOCADDMULTI                      = 0x80206931
	SIOCAIFADDR                       = 0x8040691a
	SIOCAIFGROUP                      = 0x80246987
	SIOCATMARK                        = 0x40047307
	SIOCBRDGADD                       = 0x805c693c
	SIOCBRDGADDL                      = 0x805c6949
	SIOCBRDGADDS                      = 0x805c6941
	SIOCBRDGARL                       = 0x808c694d
	SIOCBRDGDADDR                     = 0x81286947
	SIOCBRDGDEL                       = 0x805c693d
	SIOCBRDGDELS                      = 0x805c6942
	SIOCBRDGFLUSH                     = 0x805c6948
	SIOCBRDGFRL                       = 0x808c694e
	SIOCBRDGGCACHE                    = 0xc0146941
	SIOCBRDGGFD                       = 0xc0146952
	SIOCBRDGGHT                       = 0xc0146951
	SIOCBRDGGIFFLGS                   = 0xc05c693e
	SIOCBRDGGMA                       = 0xc0146953
	SIOCBRDGGPARAM                    = 0xc03c6958
	SIOCBRDGGPRI                      = 0xc0146950
	SIOCBRDGGRL                       = 0xc028694f
	SIOCBRDGGTO                       = 0xc0146946
	SIOCBRDGIFS                       = 0xc05c6942
	SIOCBRDGRTS                       = 0xc0186943
	SIOCBRDGSADDR                     = 0xc1286944
	SIOCBRDGSCACHE                    = 0x80146940
	SIOCBRDGSFD                       = 0x80146952
	SIOCBRDGSHT                       = 0x80146951
	SIOCBRDGSIFCOST                   = 0x805c6955
	SIOCBRDGSIFFLGS                   = 0x805c693f
	SIOCBRDGSIFPRIO                   = 0x805c6954
	SIOCBRDGSIFPROT                   = 0x805c694a
	SIOCBRDGSMA                       = 0x80146953
	SIOCBRDGSPRI                      = 0x80146950
	SIOCBRDGSPROTO                    = 0x8014695a
	SIOCBRDGSTO                       = 0x80146945
	SIOCBRDGSTXHC                     = 0x80146959
	SIOCDELLABEL                      = 0x80206997
	SIOCDELMULTI                      = 0x80206932
	SIOCDIFADDR                       = 0x80206919
	SIOCDIFGROUP                      = 0x80246989
	SIOCDIFPARENT                     = 0x802069b4
	SIOCDIFPHYADDR                    = 0x80206949
	SIOCDPWE3NEIGHBOR                 = 0x802069de
	SIOCDVNETID                       = 0x802069af
	SIOCGETKALIVE                     = 0xc01869a4
	SIOCGETLABEL                      = 0x8020699a
	SIOCGETMPWCFG                     = 0xc02069ae
	SIOCGETPFLOW                      = 0xc02069fe
	SIOCGETPFSYNC                     = 0xc02069f8
	SIOCGETSGCNT                      = 0xc0147534
	SIOCGETVIFCNT                     = 0xc0147533
	SIOCGETVLAN                       = 0xc0206990
	SIOCGIFADDR                       = 0xc0206921
	SIOCGIFBRDADDR                    = 0xc0206923
	SIOCGIFCONF                       = 0xc0086924
	SIOCGIFDATA                       = 0xc020691b
	SIOCGIFDESCR                      = 0xc0206981
	SIOCGIFDSTADDR                    = 0xc0206922
	SIOCGIFFLAGS                      = 0xc0206911
	SIOCGIFGATTR                      = 0xc024698b
	SIOCGIFGENERIC                    = 0xc020693a
	SIOCGIFGLIST                      = 0xc024698d
	SIOCGIFGMEMB                      = 0xc024698a
	SIOCGIFGROUP                      = 0xc0246988
	SIOCGIFHARDMTU                    = 0xc02069a5
	SIOCGIFLLPRIO                     = 0xc02069b6
	SIOCGIFMEDIA                      = 0xc0386938
	SIOCGIFMETRIC                     = 0xc0206917
	SIOCGIFMTU                        = 0xc020697e
	SIOCGIFNETMASK                    = 0xc0206925
	SIOCGIFPAIR                       = 0xc02069b1
	SIOCGIFPARENT                     = 0xc02069b3
	SIOCGIFPRIORITY                   = 0xc020699c
	SIOCGIFRDOMAIN                    = 0xc02069a0
	SIOCGIFRTLABEL                    = 0xc0206983
	SIOCGIFRXR                        = 0x802069aa
	SIOCGIFSFFPAGE                    = 0xc1126939
	SIOCGIFXFLAGS                     = 0xc020699e
	SIOCGLIFPHYADDR                   = 0xc218694b
	SIOCGLIFPHYDF                     = 0xc02069c2
	SIOCGLIFPHYECN                    = 0xc02069c8
	SIOCGLIFPHYRTABLE                 = 0xc02069a2
	SIOCGLIFPHYTTL                    = 0xc02069a9
	SIOCGPGRP                         = 0x40047309
	SIOCGPWE3                         = 0xc0206998
	SIOCGPWE3CTRLWORD                 = 0xc02069dc
	SIOCGPWE3FAT                      = 0xc02069dd
	SIOCGPWE3NEIGHBOR                 = 0xc21869de
	SIOCGRXHPRIO                      = 0xc02069db
	SIOCGSPPPPARAMS                   = 0xc0206994
	SIOCGTXHPRIO                      = 0xc02069c6
	SIOCGUMBINFO                      = 0xc02069be
	SIOCGUMBPARAM                     = 0xc02069c0
	SIOCGVH                           = 0xc02069f6
	SIOCGVNETFLOWID                   = 0xc02069c4
	SIOCGVNETID                       = 0xc02069a7
	SIOCIFAFATTACH                    = 0x801169ab
	SIOCIFAFDETACH                    = 0x801169ac
	SIOCIFCREATE                      = 0x8020697a
	SIOCIFDESTROY                     = 0x80206979
	SIOCIFGCLONERS                    = 0xc00c6978
	SIOCSETKALIVE                     = 0x801869a3
	SIOCSETLABEL                      = 0x80206999
	SIOCSETMPWCFG                     = 0x802069ad
	SIOCSETPFLOW                      = 0x802069fd
	SIOCSETPFSYNC                     = 0x802069f7
	SIOCSETVLAN                       = 0x8020698f
	SIOCSIFADDR                       = 0x8020690c
	SIOCSIFBRDADDR                    = 0x80206913
	SIOCSIFDESCR                      = 0x80206980
	SIOCSIFDSTADDR                    = 0x8020690e
	SIOCSIFFLAGS                      = 0x80206910
	SIOCSIFGATTR                      = 0x8024698c
	SIOCSIFGENERIC                    = 0x80206939
	SIOCSIFLLADDR                     = 0x8020691f
	SIOCSIFLLPRIO                     = 0x802069b5
	SIOCSIFMEDIA                      = 0xc0206937
	SIOCSIFMETRIC                     = 0x80206918
	SIOCSIFMTU                        = 0x8020697f
	SIOCSIFNETMASK                    = 0x80206916
	SIOCSIFPAIR                       = 0x802069b0
	SIOCSIFPARENT                     = 0x802069b2
	SIOCSIFPRIORITY                   = 0x8020699b
	SIOCSIFRDOMAIN                    = 0x8020699f
	SIOCSIFRTLABEL                    = 0x80206982
	SIOCSIFXFLAGS                     = 0x8020699d
	SIOCSLIFPHYADDR                   = 0x8218694a
	SIOCSLIFPHYDF                     = 0x802069c1
	SIOCSLIFPHYECN                    = 0x802069c7
	SIOCSLIFPHYRTABLE                 = 0x802069a1
	SIOCSLIFPHYTTL                    = 0x802069a8
	SIOCSPGRP                         = 0x80047308
	SIOCSPWE3CTRLWORD                 = 0x802069dc
	SIOCSPWE3FAT                      = 0x802069dd
	SIOCSPWE3NEIGHBOR                 = 0x821869de
	SIOCSRXHPRIO                      = 0x802069db
	SIOCSSPPPPARAMS                   = 0x80206993
	SIOCSTXHPRIO                      = 0x802069c5
	SIOCSUMBPARAM                     = 0x802069bf
	SIOCSVH                           = 0xc02069f5
	SIOCSVNETFLOWID                   = 0x802069c3
	SIOCSVNETID                       = 0x802069a6
	SOCK_CLOEXEC                      = 0x8000
	SOCK_DGRAM                        = 0x2
	SOCK_DNS                          = 0x1000
	SOCK_NONBLOCK                     = 0x4000
	SOCK_RAW                          = 0x3
	SOCK_RDM                          = 0x4
	SOCK_SEQPACKET                    = 0x5
	SOCK_STREAM                       = 0x1
	SOL_SOCKET                        = 0xffff
	SOMAXCONN                         = 0x80
	SO_ACCEPTCONN                     = 0x2
	SO_BINDANY                        = 0x1000
	SO_BROADCAST                      = 0x20
	SO_DEBUG                          = 0x1
	SO_DOMAIN                         = 0x1024
	SO_DONTROUTE                      = 0x10
	SO_ERROR                          = 0x1007
	SO_KEEPALIVE                      = 0x8
	SO_LINGER                         = 0x80
	SO_NETPROC                        = 0x1020
	SO_OOBINLINE                      = 0x100
	SO_PEERCRED                       = 0x1022
	SO_PROTOCOL                       = 0x1025
	SO_RCVBUF                         = 0x1002
	SO_RCVLOWAT                       = 0x1004
	SO_RCVTIMEO                       = 0x1006
	SO_REUSEADDR                      = 0x4
	SO_REUSEPORT                      = 0x200
	SO_RTABLE                         = 0x1021
	SO_SNDBUF                         = 0x1001
	SO_SNDLOWAT                       = 0x1003
	SO_SNDTIMEO                       = 0x1005
	SO_SPLICE                         = 0x1023
	SO_TIMESTAMP                      = 0x800
	SO_TYPE                           = 0x1008
	SO_USELOOPBACK                    = 0x40
	SO_ZEROIZE                        = 0x2000
	S_BLKSIZE                         = 0x200
	S_IEXEC                           = 0x40
	S_IFBLK                           = 0x6000
	S_IFCHR                           = 0x2000
	S_IFDIR                           = 0x4000
	S_IFIFO                           = 0x1000
	S_IFLNK                           = 0xa000
	S_IFMT                            = 0xf000
	S_IFREG                           = 0x8000
	S_IFSOCK                          = 0xc000
	S_IREAD                           = 0x100
	S_IRGRP                           = 0x20
	S_IROTH                           = 0x4
	S_IRUSR                           = 0x100
	S_IRWXG                           = 0x38
	S_IRWXO                           = 0x7
	S_IRWXU                           = 0x1c0
	S_ISGID                           = 0x400
	S_ISTXT                           = 0x200
	S_ISUID                           = 0x800
	S_ISVTX                           = 0x200
	S_IWGRP                           = 0x10
	S_IWOTH                           = 0x2
	S_IWRITE                          = 0x80
	S_IWUSR                           = 0x80
	S_IXGRP                           = 0x8
	S_IXOTH                           = 0x1
	S_IXUSR                           = 0x40
	TCIFLUSH                          = 0x1
	TCIOFF                            = 0x3
	TCIOFLUSH                         = 0x3
	TCION                             = 0x4
	TCOFLUSH                          = 0x2
	TCOOFF                            = 0x1
	TCOON                             = 0x2
	TCPOPT_EOL                        = 0x0
	TCPOPT_MAXSEG                     = 0x2
	TCPOPT_NOP                        = 0x1
	TCPOPT_SACK                       = 0x5
	TCPOPT_SACK_HDR                   = 0x1010500
	TCPOPT_SACK_PERMITTED             = 0x4
	TCPOPT_SACK_PERMIT_HDR            = 0x1010402
	TCPOPT_SIGNATURE                  = 0x13
	TCPOPT_TIMESTAMP                  = 0x8
	TCPOPT_TSTAMP_HDR                 = 0x101080a
	TCPOPT_WINDOW                     = 0x3
	TCP_INFO                          = 0x9
	TCP_MAXSEG                        = 0x2
	TCP_MAXWIN                        = 0xffff
	TCP_MAX_SACK                      = 0x3
	TCP_MAX_WINSHIFT                  = 0xe
	TCP_MD5SIG                        = 0x4
	TCP_MSS                           = 0x200
	TCP_NODELAY                       = 0x1
	TCP_NOPUSH                        = 0x10
	TCP_SACKHOLE_LIMIT                = 0x80
	TCP_SACK_ENABLE                   = 0x8
	TCSAFLUSH                         = 0x2
	TIMER_ABSTIME                     = 0x1
	TIMER_RELTIME                     = 0x0
	TIOCCBRK                          = 0x2000747a
	TIOCCDTR                          = 0x20007478
	TIOCCHKVERAUTH                    = 0x2000741e
	TIOCCLRVERAUTH                    = 0x2000741d
	TIOCCONS                          = 0x80047462
	TIOCDRAIN                         = 0x2000745e
	TIOCEXCL                          = 0x2000740d
	TIOCEXT                           = 0x80047460
	TIOCFLAG_CLOCAL                   = 0x2
	TIOCFLAG_CRTSCTS                  = 0x4
	TIOCFLAG_MDMBUF                   = 0x8
	TIOCFLAG_PPS                      = 0x10
	TIOCFLAG_SOFTCAR                  = 0x1
	TIOCFLUSH                         = 0x80047410
	TIOCGETA                          = 0x402c7413
	TIOCGETD                          = 0x4004741a
	TIOCGFLAGS                        = 0x4004745d
	TIOCGPGRP                         = 0x40047477
	TIOCGSID                          = 0x40047463
	TIOCGTSTAMP                       = 0x400c745b
	TIOCGWINSZ                        = 0x40087468
	TIOCMBIC                          = 0x8004746b
	TIOCMBIS                          = 0x8004746c
	TIOCMGET                          = 0x4004746a
	TIOCMODG                          = 0x4004746a
	TIOCMODS                          = 0x8004746d
	TIOCMSET                          = 0x8004746d
	TIOCM_CAR                         = 0x40
	TIOCM_CD                          = 0x40
	TIOCM_CTS                         = 0x20
	TIOCM_DSR                         = 0x100
	TIOCM_DTR                         = 0x2
	TIOCM_LE                          = 0x1
	TIOCM_RI                          = 0x80
	TIOCM_RNG                         = 0x80
	TIOCM_RTS                         = 0x4
	TIOCM_SR                          = 0x10
	TIOCM_ST                          = 0x8
	TIOCNOTTY                         = 0x20007471
	TIOCNXCL                          = 0x2000740e
	TIOCOUTQ                          = 0x40047473
	TIOCPKT                           = 0x80047470
	TIOCPKT_DATA                      = 0x0
	TIOCPKT_DOSTOP                    = 0x20
	TIOCPKT_FLUSHREAD                 = 0x1
	TIOCPKT_FLUSHWRITE                = 0x2
	TIOCPKT_IOCTL                     = 0x40
	TIOCPKT_NOSTOP                    = 0x10
	TIOCPKT_START                     = 0x8
	TIOCPKT_STOP                      = 0x4
	TIOCREMOTE                        = 0x80047469
	TIOCSBRK                          = 0x2000747b
	TIOCSCTTY                         = 0x20007461
	TIOCSDTR                          = 0x20007479
	TIOCSETA                          = 0x802c7414
	TIOCSETAF                         = 0x802c7416
	TIOCSETAW                         = 0x802c7415
	TIOCSETD                          = 0x8004741b
	TIOCSETVERAUTH                    = 0x8004741c
	TIOCSFLAGS                        = 0x8004745c
	TIOCSIG                           = 0x8004745f
	TIOCSPGRP                         = 0x80047476
	TIOCSTART                         = 0x2000746e
	TIOCSTAT                          = 0x20007465
	TIOCSTOP                          = 0x2000746f
	TIOCSTSTAMP                       = 0x8008745a
	TIOCSWINSZ                        = 0x80087467
	TIOCUCNTL                         = 0x80047466
	TIOCUCNTL_CBRK                    = 0x7a
	TIOCUCNTL_SBRK                    = 0x7b
	TOSTOP                            = 0x400000
	UTIME_NOW                         = -0x2
	UTIME_OMIT                        = -0x1
	VDISCARD                          = 0xf
	VDSUSP                            = 0xb
	VEOF                              = 0x0
	VEOL                              = 0x1
	VEOL2                             = 0x2
	VERASE                            = 0x3
	VINTR                             = 0x8
	VKILL                             = 0x5
	VLNEXT                            = 0xe
	VMIN                              = 0x10
	VM_ANONMIN                        = 0x7
	VM_LOADAVG                        = 0x2
	VM_MALLOC_CONF                    = 0xc
	VM_MAXID                          = 0xd
	VM_MAXSLP                         = 0xa
	VM_METER                          = 0x1
	VM_NKMEMPAGES                     = 0x6
	VM_PSSTRINGS                      = 0x3
	VM_SWAPENCRYPT                    = 0x5
	VM_USPACE                         = 0xb
	VM_UVMEXP                         = 0x4
	VM_VNODEMIN                       = 0x9
	VM_VTEXTMIN                       = 0x8
	VQUIT                             = 0x9
	VREPRINT                          = 0x6
	VSTART                            = 0xc
	VSTATUS                           = 0x12
	VSTOP                             = 0xd
	VSUSP                             = 0xa
	VTIME                             = 0x11
	VWERASE                           = 0x4
	WALTSIG                           = 0x4
	WCONTINUED                        = 0x8
	WCOREFLAG                         = 0x80
	WNOHANG                           = 0x1
	WUNTRACED                         = 0x2
	XCASE                             = 0x1000000
)

// Errors
const (
	E2BIG           = syscall.Errno(0x7)
	EACCES          = syscall.Errno(0xd)
	EADDRINUSE      = syscall.Errno(0x30)
	EADDRNOTAVAIL   = syscall.Errno(0x31)
	EAFNOSUPPORT    = syscall.Errno(0x2f)
	EAGAIN          = syscall.Errno(0x23)
	EALREADY        = syscall.Errno(0x25)
	EAUTH           = syscall.Errno(0x50)
	EBADF           = syscall.Errno(0x9)
	EBADMSG         = syscall.Errno(0x5c)
	EBADRPC         = syscall.Errno(0x48)
	EBUSY           = syscall.Errno(0x10)
	ECANCELED       = syscall.Errno(0x58)
	ECHILD          = syscall.Errno(0xa)
	ECONNABORTED    = syscall.Errno(0x35)
	ECONNREFUSED    = syscall.Errno(0x3d)
	ECONNRESET      = syscall.Errno(0x36)
	EDEADLK         = syscall.Errno(0xb)
	EDESTADDRREQ    = syscall.Errno(0x27)
	EDOM            = syscall.Errno(0x21)
	EDQUOT          = syscall.Errno(0x45)
	EEXIST          = syscall.Errno(0x11)
	EFAULT          = syscall.Errno(0xe)
	EFBIG           = syscall.Errno(0x1b)
	EFTYPE          = syscall.Errno(0x4f)
	EHOSTDOWN       = syscall.Errno(0x40)
	EHOSTUNREACH    = syscall.Errno(0x41)
	EIDRM           = syscall.Errno(0x59)
	EILSEQ          = syscall.Errno(0x54)
	EINPROGRESS     = syscall.Errno(0x24)
	EINTR           = syscall.Errno(0x4)
	EINVAL          = syscall.Errno(0x16)
	EIO             = syscall.Errno(0x5)
	EIPSEC          = syscall.Errno(0x52)
	EISCONN         = syscall.Errno(0x38)
	EISDIR          = syscall.Errno(0x15)
	ELAST           = syscall.Errno(0x5f)
	ELOOP           = syscall.Errno(0x3e)
	EMEDIUMTYPE     = syscall.Errno(0x56)
	EMFILE          = syscall.Errno(0x18)
	EMLINK          = syscall.Errno(0x1f)
	EMSGSIZE        = syscall.Errno(0x28)
	ENAMETOOLONG    = syscall.Errno(0x3f)
	ENEEDAUTH       = syscall.Errno(0x51)
	ENETDOWN        = syscall.Errno(0x32)
	ENETRESET       = syscall.Errno(0x34)
	ENETUNREACH     = syscall.Errno(0x33)
	ENFILE          = syscall.Errno(0x17)
	ENOATTR         = syscall.Errno(0x53)
	ENOBUFS         = syscall.Errno(0x37)
	ENODEV          = syscall.Errno(0x13)
	ENOENT          = syscall.Errno(0x2)
	ENOEXEC         = syscall.Errno(0x8)
	ENOLCK          = syscall.Errno(0x4d)
	ENOMEDIUM       = syscall.Errno(0x55)
	ENOMEM          = syscall.Errno(0xc)
	ENOMSG          = syscall.Errno(0x5a)
	ENOPROTOOPT     = syscall.Errno(0x2a)
	ENOSPC          = syscall.Errno(0x1c)
	ENOSYS          = syscall.Errno(0x4e)
	ENOTBLK         = syscall.Errno(0xf)
	ENOTCONN        = syscall.Errno(0x39)
	ENOTDIR         = syscall.Errno(0x14)
	ENOTEMPTY       = syscall.Errno(0x42)
	ENOTRECOVERABLE = syscall.Errno(0x5d)
	ENOTSOCK        = syscall.Errno(0x26)
	ENOTSUP         = syscall.Errno(0x5b)
	ENOTTY          = syscall.Errno(0x19)
	ENXIO           = syscall.Errno(0x6)
	EOPNOTSUPP      = syscall.Errno(0x2d)
	EOVERFLOW       = syscall.Errno(0x57)
	EOWNERDEAD      = syscall.Errno(0x5e)
	EPERM           = syscall.Errno(0x1)
	EPFNOSUPPORT    = syscall.Errno(0x2e)
	EPIPE           = syscall.Errno(0x20)
	EPROCLIM        = syscall.Errno(0x43)
	EPROCUNAVAIL    = syscall.Errno(0x4c)
	EPROGMISMATCH   = syscall.Errno(0x4b)
	EPROGUNAVAIL    = syscall.Errno(0x4a)
	EPROTO          = syscall.Errno(0x5f)
	EPROTONOSUPPORT = syscall.Errno(0x2b)
	EPROTOTYPE      = syscall.Errno(0x29)
	ERANGE          = syscall.Errno(0x22)
	EREMOTE         = syscall.Errno(0x47)
	EROFS           = syscall.Errno(0x1e)
	ERPCMISMATCH    = syscall.Errno(0x49)
	ESHUTDOWN       = syscall.Errno(0x3a)
	ESOCKTNOSUPPORT = syscall.Errno(0x2c)
	ESPIPE          = syscall.Errno(0x1d)
	ESRCH           = syscall.Errno(0x3)
	ESTALE          = syscall.Errno(0x46)
	ETIMEDOUT       = syscall.Errno(0x3c)
	ETOOMANYREFS    = syscall.Errno(0x3b)
	ETXTBSY         = syscall.Errno(0x1a)
	EUSERS          = syscall.Errno(0x44)
	EWOULDBLOCK     = syscall.Errno(0x23)
	EXDEV           = syscall.Errno(0x12)
)

// Signals
const (
	SIGABRT   = syscall.Signal(0x6)
	SIGALRM   = syscall.Signal(0xe)
	SIGBUS    = syscall.Signal(0xa)
	SIGCHLD   = syscall.Signal(0x14)
	SIGCONT   = syscall.Signal(0x13)
	SIGEMT    = syscall.Signal(0x7)
	SIGFPE    = syscall.Signal(0x8)
	SIGHUP    = syscall.Signal(0x1)
	SIGILL    = syscall.Signal(0x4)
	SIGINFO   = syscall.Signal(0x1d)
	SIGINT    = syscall.Signal(0x2)
	SIGIO     = syscall.Signal(0x17)
	SIGIOT    = syscall.Signal(0x6)
	SIGKILL   = syscall.Signal(0x9)
	SIGPIPE   = syscall.Signal(0xd)
	SIGPROF   = syscall.Signal(0x1b)
	SIGQUIT   = syscall.Signal(0x3)
	SIGSEGV   = syscall.Signal(0xb)
	SIGSTOP   = syscall.Signal(0x11)
	SIGSYS    = syscall.Signal(0xc)
	SIGTERM   = syscall.Signal(0xf)
	SIGTHR    = syscall.Signal(0x20)
	SIGTRAP   = syscall.Signal(0x5)
	SIGTSTP   = syscall.Signal(0x12)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x10)
	SIGUSR1   = syscall.Signal(0x1e)
	SIGUSR2   = syscall.Signal(0x1f)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "device not configured"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EDEADLK", "resource deadlock avoided"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "cross-device link"},
	{19, "ENODEV", "operation not supported by device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "result too large"},
	{35, "EAGAIN", "resource temporarily unavailable"},
	{36, "EINPROGRESS", "operation now in progress"},
	{37, "EALREADY", "operation already in progress"},
	{38, "ENOTSOCK", "socket operation on non-socket"},
	{39, "EDESTADDRREQ", "destination address required"},
	{40, "EMSGSIZE", "message too long"},
	{41, "EPROTOTYPE", "protocol wrong type for socket"},
	{42, "ENOPROTOOPT", "protocol not available"},
	{43, "EPROTONOSUPPORT", "protocol not supported"},
	{44, "ESOCKTNOSUPPORT", "socket type not supported"},
	{45, "EOPNOTSUPP", "operation not supported"},
	{46, "EPFNOSUPPORT", "protocol family not supported"},
	{47, "EAFNOSUPPORT", "address family not supported by protocol family"},
	{48, "EADDRINUSE", "address already in use"},
	{49, "EADDRNOTAVAIL", "can't assign requested address"},
	{50, "ENETDOWN", "network is down"},
	{51, "ENETUNREACH", "network is unreachable"},
	{52, "ENETRESET", "network dropped connection on reset"},
	{53, "ECONNABORTED", "software caused connection abort"},
	{54, "ECONNRESET", "connection reset by peer"},
	{55, "ENOBUFS", "no buffer space available"},
	{56, "EISCONN", "socket is already connected"},
	{57, "ENOTCONN", "socket is not connected"},
	{58, "ESHUTDOWN", "can't send after socket shutdown"},
	{59, "ETOOMANYREFS", "too many references: can't splice"},
	{60, "ETIMEDOUT", "operation timed out"},
	{61, "ECONNREFUSED", "connection refused"},
	{62, "ELOOP", "too many levels of symbolic links"},
	{63, "ENAMETOOLONG", "file name too long"},
	{64, "EHOSTDOWN", "host is down"},
	{65, "EHOSTUNREACH", "no route to host"},
	{66, "ENOTEMPTY", "directory not empty"},
	{67, "EPROCLIM", "too many processes"},
	{68, "EUSERS", "too many users"},
	{69, "EDQUOT", "disk quota exceeded"},
	{70, "ESTALE", "stale NFS file handle"},
	{71, "EREMOTE", "too many levels of remote in path"},
	{72, "EBADRPC", "RPC struct is bad"},
	{73, "ERPCMISMATCH", "RPC version wrong"},
	{74, "EPROGUNAVAIL", "RPC program not available"},
	{75, "EPROGMISMATCH", "program version wrong"},
	{76, "EPROCUNAVAIL", "bad procedure for program"},
	{77, "ENOLCK", "no locks available"},
	{78, "ENOSYS", "function not implemented"},
	{79, "EFTYPE", "inappropriate file type or format"},
	{80, "EAUTH", "authentication error"},
	{81, "ENEEDAUTH", "need authenticator"},
	{82, "EIPSEC", "IPsec processing failure"},
	{83, "ENOATTR", "attribute not found"},
	{84, "EILSEQ", "illegal byte sequence"},
	{85, "ENOMEDIUM", "no medium found"},
	{86, "EMEDIUMTYPE", "wrong medium type"},
	{87, "EOVERFLOW", "value too large to be stored in data type"},
	{88, "ECANCELED", "operation canceled"},
	{89, "EIDRM", "identifier removed"},
	{90, "ENOMSG", "no message of desired type"},
	{91, "ENOTSUP", "not supported"},
	{92, "EBADMSG", "bad message"},
	{93, "ENOTRECOVERABLE", "state not recoverable"},
	{94, "EOWNERDEAD", "previous owner died"},
	{95, "ELAST", "protocol error"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/BPT trap"},
	{6, "SIGIOT", "abort trap"},
	{7, "SIGEMT", "EMT trap"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus error"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGSYS", "bad system call"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGURG", "urgent I/O condition"},
	{17, "SIGSTOP", "suspended (signal)"},
	{18, "SIGTSTP", "suspended"},
	{19, "SIGCONT", "continued"},
	{20, "SIGCHLD", "child exited"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGIO", "I/O possible"},
	{24, "SIGXCPU", "cputime limit exceeded"},
	{25, "SIGXFSZ", "filesize limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window size changes"},
	{29, "SIGINFO", "information request"},
	{30, "SIGUSR1", "user defined signal 1"},
	{31, "SIGUSR2", "user defined signal 2"},
	{32, "SIGTHR", "thread AST"},
	{28672, "SIGSTKSZ", "unknown signal"},
}
   07070100000E3F000081A4000000000000000000000001645E367C00013A4D000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go // mkerrors.sh -m64
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build amd64 && openbsd
// +build amd64,openbsd

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -m64 _const.go

package unix

import "syscall"

const (
	AF_APPLETALK                      = 0x10
	AF_BLUETOOTH                      = 0x20
	AF_CCITT                          = 0xa
	AF_CHAOS                          = 0x5
	AF_CNT                            = 0x15
	AF_COIP                           = 0x14
	AF_DATAKIT                        = 0x9
	AF_DECnet                         = 0xc
	AF_DLI                            = 0xd
	AF_E164                           = 0x1a
	AF_ECMA                           = 0x8
	AF_ENCAP                          = 0x1c
	AF_HYLINK                         = 0xf
	AF_IMPLINK                        = 0x3
	AF_INET                           = 0x2
	AF_INET6                          = 0x18
	AF_IPX                            = 0x17
	AF_ISDN                           = 0x1a
	AF_ISO                            = 0x7
	AF_KEY                            = 0x1e
	AF_LAT                            = 0xe
	AF_LINK                           = 0x12
	AF_LOCAL                          = 0x1
	AF_MAX                            = 0x24
	AF_MPLS                           = 0x21
	AF_NATM                           = 0x1b
	AF_NS                             = 0x6
	AF_OSI                            = 0x7
	AF_PUP                            = 0x4
	AF_ROUTE                          = 0x11
	AF_SIP                            = 0x1d
	AF_SNA                            = 0xb
	AF_UNIX                           = 0x1
	AF_UNSPEC                         = 0x0
	ALTWERASE                         = 0x200
	ARPHRD_ETHER                      = 0x1
	ARPHRD_FRELAY                     = 0xf
	ARPHRD_IEEE1394                   = 0x18
	ARPHRD_IEEE802                    = 0x6
	B0                                = 0x0
	B110                              = 0x6e
	B115200                           = 0x1c200
	B1200                             = 0x4b0
	B134                              = 0x86
	B14400                            = 0x3840
	B150                              = 0x96
	B1800                             = 0x708
	B19200                            = 0x4b00
	B200                              = 0xc8
	B230400                           = 0x38400
	B2400                             = 0x960
	B28800                            = 0x7080
	B300                              = 0x12c
	B38400                            = 0x9600
	B4800                             = 0x12c0
	B50                               = 0x32
	B57600                            = 0xe100
	B600                              = 0x258
	B7200                             = 0x1c20
	B75                               = 0x4b
	B76800                            = 0x12c00
	B9600                             = 0x2580
	BIOCFLUSH                         = 0x20004268
	BIOCGBLEN                         = 0x40044266
	BIOCGDIRFILT                      = 0x4004427c
	BIOCGDLT                          = 0x4004426a
	BIOCGDLTLIST                      = 0xc010427b
	BIOCGETIF                         = 0x4020426b
	BIOCGFILDROP                      = 0x40044278
	BIOCGHDRCMPLT                     = 0x40044274
	BIOCGRSIG                         = 0x40044273
	BIOCGRTIMEOUT                     = 0x4010426e
	BIOCGSTATS                        = 0x4008426f
	BIOCIMMEDIATE                     = 0x80044270
	BIOCLOCK                          = 0x20004276
	BIOCPROMISC                       = 0x20004269
	BIOCSBLEN                         = 0xc0044266
	BIOCSDIRFILT                      = 0x8004427d
	BIOCSDLT                          = 0x8004427a
	BIOCSETF                          = 0x80104267
	BIOCSETIF                         = 0x8020426c
	BIOCSETWF                         = 0x80104277
	BIOCSFILDROP                      = 0x80044279
	BIOCSHDRCMPLT                     = 0x80044275
	BIOCSRSIG                         = 0x80044272
	BIOCSRTIMEOUT                     = 0x8010426d
	BIOCVERSION                       = 0x40044271
	BPF_A                             = 0x10
	BPF_ABS                           = 0x20
	BPF_ADD                           = 0x0
	BPF_ALIGNMENT                     = 0x4
	BPF_ALU                           = 0x4
	BPF_AND                           = 0x50
	BPF_B                             = 0x10
	BPF_DIRECTION_IN                  = 0x1
	BPF_DIRECTION_OUT                 = 0x2
	BPF_DIV                           = 0x30
	BPF_FILDROP_CAPTURE               = 0x1
	BPF_FILDROP_DROP                  = 0x2
	BPF_FILDROP_PASS                  = 0x0
	BPF_F_DIR_IN                      = 0x10
	BPF_F_DIR_MASK                    = 0x30
	BPF_F_DIR_OUT                     = 0x20
	BPF_F_DIR_SHIFT                   = 0x4
	BPF_F_FLOWID                      = 0x8
	BPF_F_PRI_MASK                    = 0x7
	BPF_H                             = 0x8
	BPF_IMM                           = 0x0
	BPF_IND                           = 0x40
	BPF_JA                            = 0x0
	BPF_JEQ                           = 0x10
	BPF_JGE                           = 0x30
	BPF_JGT                           = 0x20
	BPF_JMP                           = 0x5
	BPF_JSET                          = 0x40
	BPF_K                             = 0x0
	BPF_LD                            = 0x0
	BPF_LDX                           = 0x1
	BPF_LEN                           = 0x80
	BPF_LSH                           = 0x60
	BPF_MAJOR_VERSION                 = 0x1
	BPF_MAXBUFSIZE                    = 0x200000
	BPF_MAXINSNS                      = 0x200
	BPF_MEM                           = 0x60
	BPF_MEMWORDS                      = 0x10
	BPF_MINBUFSIZE                    = 0x20
	BPF_MINOR_VERSION                 = 0x1
	BPF_MISC                          = 0x7
	BPF_MSH                           = 0xa0
	BPF_MUL                           = 0x20
	BPF_NEG                           = 0x80
	BPF_OR                            = 0x40
	BPF_RELEASE                       = 0x30bb6
	BPF_RET                           = 0x6
	BPF_RND                           = 0xc0
	BPF_RSH                           = 0x70
	BPF_ST                            = 0x2
	BPF_STX                           = 0x3
	BPF_SUB                           = 0x10
	BPF_TAX                           = 0x0
	BPF_TXA                           = 0x80
	BPF_W                             = 0x0
	BPF_X                             = 0x8
	BRKINT                            = 0x2
	CFLUSH                            = 0xf
	CLOCAL                            = 0x8000
	CLOCK_BOOTTIME                    = 0x6
	CLOCK_MONOTONIC                   = 0x3
	CLOCK_PROCESS_CPUTIME_ID          = 0x2
	CLOCK_REALTIME                    = 0x0
	CLOCK_THREAD_CPUTIME_ID           = 0x4
	CLOCK_UPTIME                      = 0x5
	CPUSTATES                         = 0x6
	CP_IDLE                           = 0x5
	CP_INTR                           = 0x4
	CP_NICE                           = 0x1
	CP_SPIN                           = 0x3
	CP_SYS                            = 0x2
	CP_USER                           = 0x0
	CREAD                             = 0x800
	CRTSCTS                           = 0x10000
	CS5                               = 0x0
	CS6                               = 0x100
	CS7                               = 0x200
	CS8                               = 0x300
	CSIZE                             = 0x300
	CSTART                            = 0x11
	CSTATUS                           = 0xff
	CSTOP                             = 0x13
	CSTOPB                            = 0x400
	CSUSP                             = 0x1a
	CTL_HW                            = 0x6
	CTL_KERN                          = 0x1
	CTL_MAXNAME                       = 0xc
	CTL_NET                           = 0x4
	DIOCADDQUEUE                      = 0xc110445d
	DIOCADDRULE                       = 0xcd604404
	DIOCADDSTATE                      = 0xc1084425
	DIOCCHANGERULE                    = 0xcd60441a
	DIOCCLRIFFLAG                     = 0xc028445a
	DIOCCLRSRCNODES                   = 0x20004455
	DIOCCLRSTATES                     = 0xc0e04412
	DIOCCLRSTATUS                     = 0xc0284416
	DIOCGETLIMIT                      = 0xc0084427
	DIOCGETQSTATS                     = 0xc1204460
	DIOCGETQUEUE                      = 0xc110445f
	DIOCGETQUEUES                     = 0xc110445e
	DIOCGETRULE                       = 0xcd604407
	DIOCGETRULES                      = 0xcd604406
	DIOCGETRULESET                    = 0xc444443b
	DIOCGETRULESETS                   = 0xc444443a
	DIOCGETSRCNODES                   = 0xc0104454
	DIOCGETSTATE                      = 0xc1084413
	DIOCGETSTATES                     = 0xc0104419
	DIOCGETSTATUS                     = 0xc1e84415
	DIOCGETSYNFLWATS                  = 0xc0084463
	DIOCGETTIMEOUT                    = 0xc008441e
	DIOCIGETIFACES                    = 0xc0284457
	DIOCKILLSRCNODES                  = 0xc080445b
	DIOCKILLSTATES                    = 0xc0e04429
	DIOCNATLOOK                       = 0xc0504417
	DIOCOSFPADD                       = 0xc088444f
	DIOCOSFPFLUSH                     = 0x2000444e
	DIOCOSFPGET                       = 0xc0884450
	DIOCRADDADDRS                     = 0xc4504443
	DIOCRADDTABLES                    = 0xc450443d
	DIOCRCLRADDRS                     = 0xc4504442
	DIOCRCLRASTATS                    = 0xc4504448
	DIOCRCLRTABLES                    = 0xc450443c
	DIOCRCLRTSTATS                    = 0xc4504441
	DIOCRDELADDRS                     = 0xc4504444
	DIOCRDELTABLES                    = 0xc450443e
	DIOCRGETADDRS                     = 0xc4504446
	DIOCRGETASTATS                    = 0xc4504447
	DIOCRGETTABLES                    = 0xc450443f
	DIOCRGETTSTATS                    = 0xc4504440
	DIOCRINADEFINE                    = 0xc450444d
	DIOCRSETADDRS                     = 0xc4504445
	DIOCRSETTFLAGS                    = 0xc450444a
	DIOCRTSTADDRS                     = 0xc4504449
	DIOCSETDEBUG                      = 0xc0044418
	DIOCSETHOSTID                     = 0xc0044456
	DIOCSETIFFLAG                     = 0xc0284459
	DIOCSETLIMIT                      = 0xc0084428
	DIOCSETREASS                      = 0xc004445c
	DIOCSETSTATUSIF                   = 0xc0284414
	DIOCSETSYNCOOKIES                 = 0xc0014462
	DIOCSETSYNFLWATS                  = 0xc0084461
	DIOCSETTIMEOUT                    = 0xc008441d
	DIOCSTART                         = 0x20004401
	DIOCSTOP                          = 0x20004402
	DIOCXBEGIN                        = 0xc0104451
	DIOCXCOMMIT                       = 0xc0104452
	DIOCXROLLBACK                     = 0xc0104453
	DLT_ARCNET                        = 0x7
	DLT_ATM_RFC1483                   = 0xb
	DLT_AX25                          = 0x3
	DLT_CHAOS                         = 0x5
	DLT_C_HDLC                        = 0x68
	DLT_EN10MB                        = 0x1
	DLT_EN3MB                         = 0x2
	DLT_ENC                           = 0xd
	DLT_FDDI                          = 0xa
	DLT_IEEE802                       = 0x6
	DLT_IEEE802_11                    = 0x69
	DLT_IEEE802_11_RADIO              = 0x7f
	DLT_LOOP                          = 0xc
	DLT_MPLS                          = 0xdb
	DLT_NULL                          = 0x0
	DLT_OPENFLOW                      = 0x10b
	DLT_PFLOG                         = 0x75
	DLT_PFSYNC                        = 0x12
	DLT_PPP                           = 0x9
	DLT_PPP_BSDOS                     = 0x10
	DLT_PPP_ETHER                     = 0x33
	DLT_PPP_SERIAL                    = 0x32
	DLT_PRONET                        = 0x4
	DLT_RAW                           = 0xe
	DLT_SLIP                          = 0x8
	DLT_SLIP_BSDOS                    = 0xf
	DLT_USBPCAP                       = 0xf9
	DLT_USER0                         = 0x93
	DLT_USER1                         = 0x94
	DLT_USER10                        = 0x9d
	DLT_USER11                        = 0x9e
	DLT_USER12                        = 0x9f
	DLT_USER13                        = 0xa0
	DLT_USER14                        = 0xa1
	DLT_USER15                        = 0xa2
	DLT_USER2                         = 0x95
	DLT_USER3                         = 0x96
	DLT_USER4                         = 0x97
	DLT_USER5                         = 0x98
	DLT_USER6                         = 0x99
	DLT_USER7                         = 0x9a
	DLT_USER8                         = 0x9b
	DLT_USER9                         = 0x9c
	DT_BLK                            = 0x6
	DT_CHR                            = 0x2
	DT_DIR                            = 0x4
	DT_FIFO                           = 0x1
	DT_LNK                            = 0xa
	DT_REG                            = 0x8
	DT_SOCK                           = 0xc
	DT_UNKNOWN                        = 0x0
	ECHO                              = 0x8
	ECHOCTL                           = 0x40
	ECHOE                             = 0x2
	ECHOK                             = 0x4
	ECHOKE                            = 0x1
	ECHONL                            = 0x10
	ECHOPRT                           = 0x20
	EMT_TAGOVF                        = 0x1
	EMUL_ENABLED                      = 0x1
	EMUL_NATIVE                       = 0x2
	ENDRUNDISC                        = 0x9
	ETH64_8021_RSVD_MASK              = 0xfffffffffff0
	ETH64_8021_RSVD_PREFIX            = 0x180c2000000
	ETHERMIN                          = 0x2e
	ETHERMTU                          = 0x5dc
	ETHERTYPE_8023                    = 0x4
	ETHERTYPE_AARP                    = 0x80f3
	ETHERTYPE_ACCTON                  = 0x8390
	ETHERTYPE_AEONIC                  = 0x8036
	ETHERTYPE_ALPHA                   = 0x814a
	ETHERTYPE_AMBER                   = 0x6008
	ETHERTYPE_AMOEBA                  = 0x8145
	ETHERTYPE_AOE                     = 0x88a2
	ETHERTYPE_APOLLO                  = 0x80f7
	ETHERTYPE_APOLLODOMAIN            = 0x8019
	ETHERTYPE_APPLETALK               = 0x809b
	ETHERTYPE_APPLITEK                = 0x80c7
	ETHERTYPE_ARGONAUT                = 0x803a
	ETHERTYPE_ARP                     = 0x806
	ETHERTYPE_AT                      = 0x809b
	ETHERTYPE_ATALK                   = 0x809b
	ETHERTYPE_ATOMIC                  = 0x86df
	ETHERTYPE_ATT                     = 0x8069
	ETHERTYPE_ATTSTANFORD             = 0x8008
	ETHERTYPE_AUTOPHON                = 0x806a
	ETHERTYPE_AXIS                    = 0x8856
	ETHERTYPE_BCLOOP                  = 0x9003
	ETHERTYPE_BOFL                    = 0x8102
	ETHERTYPE_CABLETRON               = 0x7034
	ETHERTYPE_CHAOS                   = 0x804
	ETHERTYPE_COMDESIGN               = 0x806c
	ETHERTYPE_COMPUGRAPHIC            = 0x806d
	ETHERTYPE_COUNTERPOINT            = 0x8062
	ETHERTYPE_CRONUS                  = 0x8004
	ETHERTYPE_CRONUSVLN               = 0x8003
	ETHERTYPE_DCA                     = 0x1234
	ETHERTYPE_DDE                     = 0x807b
	ETHERTYPE_DEBNI                   = 0xaaaa
	ETHERTYPE_DECAM                   = 0x8048
	ETHERTYPE_DECCUST                 = 0x6006
	ETHERTYPE_DECDIAG                 = 0x6005
	ETHERTYPE_DECDNS                  = 0x803c
	ETHERTYPE_DECDTS                  = 0x803e
	ETHERTYPE_DECEXPER                = 0x6000
	ETHERTYPE_DECLAST                 = 0x8041
	ETHERTYPE_DECLTM                  = 0x803f
	ETHERTYPE_DECMUMPS                = 0x6009
	ETHERTYPE_DECNETBIOS              = 0x8040
	ETHERTYPE_DELTACON                = 0x86de
	ETHERTYPE_DIDDLE                  = 0x4321
	ETHERTYPE_DLOG1                   = 0x660
	ETHERTYPE_DLOG2                   = 0x661
	ETHERTYPE_DN                      = 0x6003
	ETHERTYPE_DOGFIGHT                = 0x1989
	ETHERTYPE_DSMD                    = 0x8039
	ETHERTYPE_EAPOL                   = 0x888e
	ETHERTYPE_ECMA                    = 0x803
	ETHERTYPE_ENCRYPT                 = 0x803d
	ETHERTYPE_ES                      = 0x805d
	ETHERTYPE_EXCELAN                 = 0x8010
	ETHERTYPE_EXPERDATA               = 0x8049
	ETHERTYPE_FLIP                    = 0x8146
	ETHERTYPE_FLOWCONTROL             = 0x8808
	ETHERTYPE_FRARP                   = 0x808
	ETHERTYPE_GENDYN                  = 0x8068
	ETHERTYPE_HAYES                   = 0x8130
	ETHERTYPE_HIPPI_FP                = 0x8180
	ETHERTYPE_HITACHI                 = 0x8820
	ETHERTYPE_HP                      = 0x8005
	ETHERTYPE_IEEEPUP                 = 0xa00
	ETHERTYPE_IEEEPUPAT               = 0xa01
	ETHERTYPE_IMLBL                   = 0x4c42
	ETHERTYPE_IMLBLDIAG               = 0x424c
	ETHERTYPE_IP                      = 0x800
	ETHERTYPE_IPAS                    = 0x876c
	ETHERTYPE_IPV6                    = 0x86dd
	ETHERTYPE_IPX                     = 0x8137
	ETHERTYPE_IPXNEW                  = 0x8037
	ETHERTYPE_KALPANA                 = 0x8582
	ETHERTYPE_LANBRIDGE               = 0x8038
	ETHERTYPE_LANPROBE                = 0x8888
	ETHERTYPE_LAT                     = 0x6004
	ETHERTYPE_LBACK                   = 0x9000
	ETHERTYPE_LITTLE                  = 0x8060
	ETHERTYPE_LLDP                    = 0x88cc
	ETHERTYPE_LOGICRAFT               = 0x8148
	ETHERTYPE_LOOPBACK                = 0x9000
	ETHERTYPE_MACSEC                  = 0x88e5
	ETHERTYPE_MATRA                   = 0x807a
	ETHERTYPE_MAX                     = 0xffff
	ETHERTYPE_MERIT                   = 0x807c
	ETHERTYPE_MICP                    = 0x873a
	ETHERTYPE_MOPDL                   = 0x6001
	ETHERTYPE_MOPRC                   = 0x6002
	ETHERTYPE_MOTOROLA                = 0x818d
	ETHERTYPE_MPLS                    = 0x8847
	ETHERTYPE_MPLS_MCAST              = 0x8848
	ETHERTYPE_MUMPS                   = 0x813f
	ETHERTYPE_NBPCC                   = 0x3c04
	ETHERTYPE_NBPCLAIM                = 0x3c09
	ETHERTYPE_NBPCLREQ                = 0x3c05
	ETHERTYPE_NBPCLRSP                = 0x3c06
	ETHERTYPE_NBPCREQ                 = 0x3c02
	ETHERTYPE_NBPCRSP                 = 0x3c03
	ETHERTYPE_NBPDG                   = 0x3c07
	ETHERTYPE_NBPDGB                  = 0x3c08
	ETHERTYPE_NBPDLTE                 = 0x3c0a
	ETHERTYPE_NBPRAR                  = 0x3c0c
	ETHERTYPE_NBPRAS                  = 0x3c0b
	ETHERTYPE_NBPRST                  = 0x3c0d
	ETHERTYPE_NBPSCD                  = 0x3c01
	ETHERTYPE_NBPVCD                  = 0x3c00
	ETHERTYPE_NBS                     = 0x802
	ETHERTYPE_NCD                     = 0x8149
	ETHERTYPE_NESTAR                  = 0x8006
	ETHERTYPE_NETBEUI                 = 0x8191
	ETHERTYPE_NHRP                    = 0x2001
	ETHERTYPE_NOVELL                  = 0x8138
	ETHERTYPE_NS                      = 0x600
	ETHERTYPE_NSAT                    = 0x601
	ETHERTYPE_NSCOMPAT                = 0x807
	ETHERTYPE_NSH                     = 0x984f
	ETHERTYPE_NTRAILER                = 0x10
	ETHERTYPE_OS9                     = 0x7007
	ETHERTYPE_OS9NET                  = 0x7009
	ETHERTYPE_PACER                   = 0x80c6
	ETHERTYPE_PBB                     = 0x88e7
	ETHERTYPE_PCS                     = 0x4242
	ETHERTYPE_PLANNING                = 0x8044
	ETHERTYPE_PPP                     = 0x880b
	ETHERTYPE_PPPOE                   = 0x8864
	ETHERTYPE_PPPOEDISC               = 0x8863
	ETHERTYPE_PRIMENTS                = 0x7031
	ETHERTYPE_PUP                     = 0x200
	ETHERTYPE_PUPAT                   = 0x200
	ETHERTYPE_QINQ                    = 0x88a8
	ETHERTYPE_RACAL                   = 0x7030
	ETHERTYPE_RATIONAL                = 0x8150
	ETHERTYPE_RAWFR                   = 0x6559
	ETHERTYPE_RCL                     = 0x1995
	ETHERTYPE_RDP                     = 0x8739
	ETHERTYPE_RETIX                   = 0x80f2
	ETHERTYPE_REVARP                  = 0x8035
	ETHERTYPE_SCA                     = 0x6007
	ETHERTYPE_SECTRA                  = 0x86db
	ETHERTYPE_SECUREDATA              = 0x876d
	ETHERTYPE_SGITW                   = 0x817e
	ETHERTYPE_SG_BOUNCE               = 0x8016
	ETHERTYPE_SG_DIAG                 = 0x8013
	ETHERTYPE_SG_NETGAMES             = 0x8014
	ETHERTYPE_SG_RESV                 = 0x8015
	ETHERTYPE_SIMNET                  = 0x5208
	ETHERTYPE_SLOW                    = 0x8809
	ETHERTYPE_SNA                     = 0x80d5
	ETHERTYPE_SNMP                    = 0x814c
	ETHERTYPE_SONIX                   = 0xfaf5
	ETHERTYPE_SPIDER                  = 0x809f
	ETHERTYPE_SPRITE                  = 0x500
	ETHERTYPE_STP                     = 0x8181
	ETHERTYPE_TALARIS                 = 0x812b
	ETHERTYPE_TALARISMC               = 0x852b
	ETHERTYPE_TCPCOMP                 = 0x876b
	ETHERTYPE_TCPSM                   = 0x9002
	ETHERTYPE_TEC                     = 0x814f
	ETHERTYPE_TIGAN                   = 0x802f
	ETHERTYPE_TRAIL                   = 0x1000
	ETHERTYPE_TRANSETHER              = 0x6558
	ETHERTYPE_TYMSHARE                = 0x802e
	ETHERTYPE_UBBST                   = 0x7005
	ETHERTYPE_UBDEBUG                 = 0x900
	ETHERTYPE_UBDIAGLOOP              = 0x7002
	ETHERTYPE_UBDL                    = 0x7000
	ETHERTYPE_UBNIU                   = 0x7001
	ETHERTYPE_UBNMC                   = 0x7003
	ETHERTYPE_VALID                   = 0x1600
	ETHERTYPE_VARIAN                  = 0x80dd
	ETHERTYPE_VAXELN                  = 0x803b
	ETHERTYPE_VEECO                   = 0x8067
	ETHERTYPE_VEXP                    = 0x805b
	ETHERTYPE_VGLAB                   = 0x8131
	ETHERTYPE_VINES                   = 0xbad
	ETHERTYPE_VINESECHO               = 0xbaf
	ETHERTYPE_VINESLOOP               = 0xbae
	ETHERTYPE_VITAL                   = 0xff00
	ETHERTYPE_VLAN                    = 0x8100
	ETHERTYPE_VLTLMAN                 = 0x8080
	ETHERTYPE_VPROD                   = 0x805c
	ETHERTYPE_VURESERVED              = 0x8147
	ETHERTYPE_WATERLOO                = 0x8130
	ETHERTYPE_WELLFLEET               = 0x8103
	ETHERTYPE_X25                     = 0x805
	ETHERTYPE_X75                     = 0x801
	ETHERTYPE_XNSSM                   = 0x9001
	ETHERTYPE_XTP                     = 0x817d
	ETHER_ADDR_LEN                    = 0x6
	ETHER_ALIGN                       = 0x2
	ETHER_CRC_LEN                     = 0x4
	ETHER_CRC_POLY_BE                 = 0x4c11db6
	ETHER_CRC_POLY_LE                 = 0xedb88320
	ETHER_HDR_LEN                     = 0xe
	ETHER_MAX_DIX_LEN                 = 0x600
	ETHER_MAX_HARDMTU_LEN             = 0xff9b
	ETHER_MAX_LEN                     = 0x5ee
	ETHER_MIN_LEN                     = 0x40
	ETHER_TYPE_LEN                    = 0x2
	ETHER_VLAN_ENCAP_LEN              = 0x4
	EVFILT_AIO                        = -0x3
	EVFILT_DEVICE                     = -0x8
	EVFILT_EXCEPT                     = -0x9
	EVFILT_PROC                       = -0x5
	EVFILT_READ                       = -0x1
	EVFILT_SIGNAL                     = -0x6
	EVFILT_SYSCOUNT                   = 0x9
	EVFILT_TIMER                      = -0x7
	EVFILT_VNODE                      = -0x4
	EVFILT_WRITE                      = -0x2
	EVL_ENCAPLEN                      = 0x4
	EVL_PRIO_BITS                     = 0xd
	EVL_PRIO_MAX                      = 0x7
	EVL_VLID_MASK                     = 0xfff
	EVL_VLID_MAX                      = 0xffe
	EVL_VLID_MIN                      = 0x1
	EVL_VLID_NULL                     = 0x0
	EV_ADD                            = 0x1
	EV_CLEAR                          = 0x20
	EV_DELETE                         = 0x2
	EV_DISABLE                        = 0x8
	EV_DISPATCH                       = 0x80
	EV_ENABLE                         = 0x4
	EV_EOF                            = 0x8000
	EV_ERROR                          = 0x4000
	EV_FLAG1                          = 0x2000
	EV_ONESHOT                        = 0x10
	EV_RECEIPT                        = 0x40
	EV_SYSFLAGS                       = 0xf800
	EXTA                              = 0x4b00
	EXTB                              = 0x9600
	EXTPROC                           = 0x800
	FD_CLOEXEC                        = 0x1
	FD_SETSIZE                        = 0x400
	FLUSHO                            = 0x800000
	F_DUPFD                           = 0x0
	F_DUPFD_CLOEXEC                   = 0xa
	F_GETFD                           = 0x1
	F_GETFL                           = 0x3
	F_GETLK                           = 0x7
	F_GETOWN                          = 0x5
	F_ISATTY                          = 0xb
	F_OK                              = 0x0
	F_RDLCK                           = 0x1
	F_SETFD                           = 0x2
	F_SETFL                           = 0x4
	F_SETLK                           = 0x8
	F_SETLKW                          = 0x9
	F_SETOWN                          = 0x6
	F_UNLCK                           = 0x2
	F_WRLCK                           = 0x3
	HUPCL                             = 0x4000
	HW_MACHINE                        = 0x1
	ICANON                            = 0x100
	ICMP6_FILTER                      = 0x12
	ICRNL                             = 0x100
	IEXTEN                            = 0x400
	IFAN_ARRIVAL                      = 0x0
	IFAN_DEPARTURE                    = 0x1
	IFF_ALLMULTI                      = 0x200
	IFF_BROADCAST                     = 0x2
	IFF_CANTCHANGE                    = 0x8e52
	IFF_DEBUG                         = 0x4
	IFF_LINK0                         = 0x1000
	IFF_LINK1                         = 0x2000
	IFF_LINK2                         = 0x4000
	IFF_LOOPBACK                      = 0x8
	IFF_MULTICAST                     = 0x8000
	IFF_NOARP                         = 0x80
	IFF_OACTIVE                       = 0x400
	IFF_POINTOPOINT                   = 0x10
	IFF_PROMISC                       = 0x100
	IFF_RUNNING                       = 0x40
	IFF_SIMPLEX                       = 0x800
	IFF_STATICARP                     = 0x20
	IFF_UP                            = 0x1
	IFNAMSIZ                          = 0x10
	IFT_1822                          = 0x2
	IFT_A12MPPSWITCH                  = 0x82
	IFT_AAL2                          = 0xbb
	IFT_AAL5                          = 0x31
	IFT_ADSL                          = 0x5e
	IFT_AFLANE8023                    = 0x3b
	IFT_AFLANE8025                    = 0x3c
	IFT_ARAP                          = 0x58
	IFT_ARCNET                        = 0x23
	IFT_ARCNETPLUS                    = 0x24
	IFT_ASYNC                         = 0x54
	IFT_ATM                           = 0x25
	IFT_ATMDXI                        = 0x69
	IFT_ATMFUNI                       = 0x6a
	IFT_ATMIMA                        = 0x6b
	IFT_ATMLOGICAL                    = 0x50
	IFT_ATMRADIO                      = 0xbd
	IFT_ATMSUBINTERFACE               = 0x86
	IFT_ATMVCIENDPT                   = 0xc2
	IFT_ATMVIRTUAL                    = 0x95
	IFT_BGPPOLICYACCOUNTING           = 0xa2
	IFT_BLUETOOTH                     = 0xf8
	IFT_BRIDGE                        = 0xd1
	IFT_BSC                           = 0x53
	IFT_CARP                          = 0xf7
	IFT_CCTEMUL                       = 0x3d
	IFT_CEPT                          = 0x13
	IFT_CES                           = 0x85
	IFT_CHANNEL                       = 0x46
	IFT_CNR                           = 0x55
	IFT_COFFEE                        = 0x84
	IFT_COMPOSITELINK                 = 0x9b
	IFT_DCN                           = 0x8d
	IFT_DIGITALPOWERLINE              = 0x8a
	IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba
	IFT_DLSW                          = 0x4a
	IFT_DOCSCABLEDOWNSTREAM           = 0x80
	IFT_DOCSCABLEMACLAYER             = 0x7f
	IFT_DOCSCABLEUPSTREAM             = 0x81
	IFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd
	IFT_DS0                           = 0x51
	IFT_DS0BUNDLE                     = 0x52
	IFT_DS1FDL                        = 0xaa
	IFT_DS3                           = 0x1e
	IFT_DTM                           = 0x8c
	IFT_DUMMY                         = 0xf1
	IFT_DVBASILN                      = 0xac
	IFT_DVBASIOUT                     = 0xad
	IFT_DVBRCCDOWNSTREAM              = 0x93
	IFT_DVBRCCMACLAYER                = 0x92
	IFT_DVBRCCUPSTREAM                = 0x94
	IFT_ECONET                        = 0xce
	IFT_ENC                           = 0xf4
	IFT_EON                           = 0x19
	IFT_EPLRS                         = 0x57
	IFT_ESCON                         = 0x49
	IFT_ETHER                         = 0x6
	IFT_FAITH                         = 0xf3
	IFT_FAST                          = 0x7d
	IFT_FASTETHER                     = 0x3e
	IFT_FASTETHERFX                   = 0x45
	IFT_FDDI                          = 0xf
	IFT_FIBRECHANNEL                  = 0x38
	IFT_FRAMERELAYINTERCONNECT        = 0x3a
	IFT_FRAMERELAYMPI                 = 0x5c
	IFT_FRDLCIENDPT                   = 0xc1
	IFT_FRELAY                        = 0x20
	IFT_FRELAYDCE                     = 0x2c
	IFT_FRF16MFRBUNDLE                = 0xa3
	IFT_FRFORWARD                     = 0x9e
	IFT_G703AT2MB                     = 0x43
	IFT_G703AT64K                     = 0x42
	IFT_GIF                           = 0xf0
	IFT_GIGABITETHERNET               = 0x75
	IFT_GR303IDT                      = 0xb2
	IFT_GR303RDT                      = 0xb1
	IFT_H323GATEKEEPER                = 0xa4
	IFT_H323PROXY                     = 0xa5
	IFT_HDH1822                       = 0x3
	IFT_HDLC                          = 0x76
	IFT_HDSL2                         = 0xa8
	IFT_HIPERLAN2                     = 0xb7
	IFT_HIPPI                         = 0x2f
	IFT_HIPPIINTERFACE                = 0x39
	IFT_HOSTPAD                       = 0x5a
	IFT_HSSI                          = 0x2e
	IFT_HY                            = 0xe
	IFT_IBM370PARCHAN                 = 0x48
	IFT_IDSL                          = 0x9a
	IFT_IEEE1394                      = 0x90
	IFT_IEEE80211                     = 0x47
	IFT_IEEE80212                     = 0x37
	IFT_IEEE8023ADLAG                 = 0xa1
	IFT_IFGSN                         = 0x91
	IFT_IMT                           = 0xbe
	IFT_INFINIBAND                    = 0xc7
	IFT_INTERLEAVE                    = 0x7c
	IFT_IP                            = 0x7e
	IFT_IPFORWARD                     = 0x8e
	IFT_IPOVERATM                     = 0x72
	IFT_IPOVERCDLC                    = 0x6d
	IFT_IPOVERCLAW                    = 0x6e
	IFT_IPSWITCH                      = 0x4e
	IFT_ISDN                          = 0x3f
	IFT_ISDNBASIC                     = 0x14
	IFT_ISDNPRIMARY                   = 0x15
	IFT_ISDNS                         = 0x4b
	IFT_ISDNU                         = 0x4c
	IFT_ISO88022LLC                   = 0x29
	IFT_ISO88023                      = 0x7
	IFT_ISO88024                      = 0x8
	IFT_ISO88025                      = 0x9
	IFT_ISO88025CRFPINT               = 0x62
	IFT_ISO88025DTR                   = 0x56
	IFT_ISO88025FIBER                 = 0x73
	IFT_ISO88026                      = 0xa
	IFT_ISUP                          = 0xb3
	IFT_L2VLAN                        = 0x87
	IFT_L3IPVLAN                      = 0x88
	IFT_L3IPXVLAN                     = 0x89
	IFT_LAPB                          = 0x10
	IFT_LAPD                          = 0x4d
	IFT_LAPF                          = 0x77
	IFT_LINEGROUP                     = 0xd2
	IFT_LOCALTALK                     = 0x2a
	IFT_LOOP                          = 0x18
	IFT_MBIM                          = 0xfa
	IFT_MEDIAMAILOVERIP               = 0x8b
	IFT_MFSIGLINK                     = 0xa7
	IFT_MIOX25                        = 0x26
	IFT_MODEM                         = 0x30
	IFT_MPC                           = 0x71
	IFT_MPLS                          = 0xa6
	IFT_MPLSTUNNEL                    = 0x96
	IFT_MSDSL                         = 0x8f
	IFT_MVL                           = 0xbf
	IFT_MYRINET                       = 0x63
	IFT_NFAS                          = 0xaf
	IFT_NSIP                          = 0x1b
	IFT_OPTICALCHANNEL                = 0xc3
	IFT_OPTICALTRANSPORT              = 0xc4
	IFT_OTHER                         = 0x1
	IFT_P10                           = 0xc
	IFT_P80                           = 0xd
	IFT_PARA                          = 0x22
	IFT_PFLOG                         = 0xf5
	IFT_PFLOW                         = 0xf9
	IFT_PFSYNC                        = 0xf6
	IFT_PLC                           = 0xae
	IFT_PON155                        = 0xcf
	IFT_PON622                        = 0xd0
	IFT_POS                           = 0xab
	IFT_PPP                           = 0x17
	IFT_PPPMULTILINKBUNDLE            = 0x6c
	IFT_PROPATM                       = 0xc5
	IFT_PROPBWAP2MP                   = 0xb8
	IFT_PROPCNLS                      = 0x59
	IFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5
	IFT_PROPDOCSWIRELESSMACLAYER      = 0xb4
	IFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6
	IFT_PROPMUX                       = 0x36
	IFT_PROPVIRTUAL                   = 0x35
	IFT_PROPWIRELESSP2P               = 0x9d
	IFT_PTPSERIAL                     = 0x16
	IFT_PVC                           = 0xf2
	IFT_Q2931                         = 0xc9
	IFT_QLLC                          = 0x44
	IFT_RADIOMAC                      = 0xbc
	IFT_RADSL                         = 0x5f
	IFT_REACHDSL                      = 0xc0
	IFT_RFC1483                       = 0x9f
	IFT_RS232                         = 0x21
	IFT_RSRB                          = 0x4f
	IFT_SDLC                          = 0x11
	IFT_SDSL                          = 0x60
	IFT_SHDSL                         = 0xa9
	IFT_SIP                           = 0x1f
	IFT_SIPSIG                        = 0xcc
	IFT_SIPTG                         = 0xcb
	IFT_SLIP                          = 0x1c
	IFT_SMDSDXI                       = 0x2b
	IFT_SMDSICIP                      = 0x34
	IFT_SONET                         = 0x27
	IFT_SONETOVERHEADCHANNEL          = 0xb9
	IFT_SONETPATH                     = 0x32
	IFT_SONETVT                       = 0x33
	IFT_SRP                           = 0x97
	IFT_SS7SIGLINK                    = 0x9c
	IFT_STACKTOSTACK                  = 0x6f
	IFT_STARLAN                       = 0xb
	IFT_T1                            = 0x12
	IFT_TDLC                          = 0x74
	IFT_TELINK                        = 0xc8
	IFT_TERMPAD                       = 0x5b
	IFT_TR008                         = 0xb0
	IFT_TRANSPHDLC                    = 0x7b
	IFT_TUNNEL                        = 0x83
	IFT_ULTRA                         = 0x1d
	IFT_USB                           = 0xa0
	IFT_V11                           = 0x40
	IFT_V35                           = 0x2d
	IFT_V36                           = 0x41
	IFT_V37                           = 0x78
	IFT_VDSL                          = 0x61
	IFT_VIRTUALIPADDRESS              = 0x70
	IFT_VIRTUALTG                     = 0xca
	IFT_VOICEDID                      = 0xd5
	IFT_VOICEEM                       = 0x64
	IFT_VOICEEMFGD                    = 0xd3
	IFT_VOICEENCAP                    = 0x67
	IFT_VOICEFGDEANA                  = 0xd4
	IFT_VOICEFXO                      = 0x65
	IFT_VOICEFXS                      = 0x66
	IFT_VOICEOVERATM                  = 0x98
	IFT_VOICEOVERCABLE                = 0xc6
	IFT_VOICEOVERFRAMERELAY           = 0x99
	IFT_VOICEOVERIP                   = 0x68
	IFT_WIREGUARD                     = 0xfb
	IFT_X213                          = 0x5d
	IFT_X25                           = 0x5
	IFT_X25DDN                        = 0x4
	IFT_X25HUNTGROUP                  = 0x7a
	IFT_X25MLP                        = 0x79
	IFT_X25PLE                        = 0x28
	IFT_XETHER                        = 0x1a
	IGNBRK                            = 0x1
	IGNCR                             = 0x80
	IGNPAR                            = 0x4
	IMAXBEL                           = 0x2000
	INLCR                             = 0x40
	INPCK                             = 0x10
	IN_CLASSA_HOST                    = 0xffffff
	IN_CLASSA_MAX                     = 0x80
	IN_CLASSA_NET                     = 0xff000000
	IN_CLASSA_NSHIFT                  = 0x18
	IN_CLASSB_HOST                    = 0xffff
	IN_CLASSB_MAX                     = 0x10000
	IN_CLASSB_NET                     = 0xffff0000
	IN_CLASSB_NSHIFT                  = 0x10
	IN_CLASSC_HOST                    = 0xff
	IN_CLASSC_NET                     = 0xffffff00
	IN_CLASSC_NSHIFT                  = 0x8
	IN_CLASSD_HOST                    = 0xfffffff
	IN_CLASSD_NET                     = 0xf0000000
	IN_CLASSD_NSHIFT                  = 0x1c
	IN_LOOPBACKNET                    = 0x7f
	IN_RFC3021_HOST                   = 0x1
	IN_RFC3021_NET                    = 0xfffffffe
	IN_RFC3021_NSHIFT                 = 0x1f
	IPPROTO_AH                        = 0x33
	IPPROTO_CARP                      = 0x70
	IPPROTO_DIVERT                    = 0x102
	IPPROTO_DONE                      = 0x101
	IPPROTO_DSTOPTS                   = 0x3c
	IPPROTO_EGP                       = 0x8
	IPPROTO_ENCAP                     = 0x62
	IPPROTO_EON                       = 0x50
	IPPROTO_ESP                       = 0x32
	IPPROTO_ETHERIP                   = 0x61
	IPPROTO_FRAGMENT                  = 0x2c
	IPPROTO_GGP                       = 0x3
	IPPROTO_GRE                       = 0x2f
	IPPROTO_HOPOPTS                   = 0x0
	IPPROTO_ICMP                      = 0x1
	IPPROTO_ICMPV6                    = 0x3a
	IPPROTO_IDP                       = 0x16
	IPPROTO_IGMP                      = 0x2
	IPPROTO_IP                        = 0x0
	IPPROTO_IPCOMP                    = 0x6c
	IPPROTO_IPIP                      = 0x4
	IPPROTO_IPV4                      = 0x4
	IPPROTO_IPV6                      = 0x29
	IPPROTO_MAX                       = 0x100
	IPPROTO_MAXID                     = 0x103
	IPPROTO_MOBILE                    = 0x37
	IPPROTO_MPLS                      = 0x89
	IPPROTO_NONE                      = 0x3b
	IPPROTO_PFSYNC                    = 0xf0
	IPPROTO_PIM                       = 0x67
	IPPROTO_PUP                       = 0xc
	IPPROTO_RAW                       = 0xff
	IPPROTO_ROUTING                   = 0x2b
	IPPROTO_RSVP                      = 0x2e
	IPPROTO_SCTP                      = 0x84
	IPPROTO_TCP                       = 0x6
	IPPROTO_TP                        = 0x1d
	IPPROTO_UDP                       = 0x11
	IPPROTO_UDPLITE                   = 0x88
	IPV6_AUTH_LEVEL                   = 0x35
	IPV6_AUTOFLOWLABEL                = 0x3b
	IPV6_CHECKSUM                     = 0x1a
	IPV6_DEFAULT_MULTICAST_HOPS       = 0x1
	IPV6_DEFAULT_MULTICAST_LOOP       = 0x1
	IPV6_DEFHLIM                      = 0x40
	IPV6_DONTFRAG                     = 0x3e
	IPV6_DSTOPTS                      = 0x32
	IPV6_ESP_NETWORK_LEVEL            = 0x37
	IPV6_ESP_TRANS_LEVEL              = 0x36
	IPV6_FAITH                        = 0x1d
	IPV6_FLOWINFO_MASK                = 0xffffff0f
	IPV6_FLOWLABEL_MASK               = 0xffff0f00
	IPV6_FRAGTTL                      = 0x78
	IPV6_HLIMDEC                      = 0x1
	IPV6_HOPLIMIT                     = 0x2f
	IPV6_HOPOPTS                      = 0x31
	IPV6_IPCOMP_LEVEL                 = 0x3c
	IPV6_JOIN_GROUP                   = 0xc
	IPV6_LEAVE_GROUP                  = 0xd
	IPV6_MAXHLIM                      = 0xff
	IPV6_MAXPACKET                    = 0xffff
	IPV6_MINHOPCOUNT                  = 0x41
	IPV6_MMTU                         = 0x500
	IPV6_MULTICAST_HOPS               = 0xa
	IPV6_MULTICAST_IF                 = 0x9
	IPV6_MULTICAST_LOOP               = 0xb
	IPV6_NEXTHOP                      = 0x30
	IPV6_OPTIONS                      = 0x1
	IPV6_PATHMTU                      = 0x2c
	IPV6_PIPEX                        = 0x3f
	IPV6_PKTINFO                      = 0x2e
	IPV6_PORTRANGE                    = 0xe
	IPV6_PORTRANGE_DEFAULT            = 0x0
	IPV6_PORTRANGE_HIGH               = 0x1
	IPV6_PORTRANGE_LOW                = 0x2
	IPV6_RECVDSTOPTS                  = 0x28
	IPV6_RECVDSTPORT                  = 0x40
	IPV6_RECVHOPLIMIT                 = 0x25
	IPV6_RECVHOPOPTS                  = 0x27
	IPV6_RECVPATHMTU                  = 0x2b
	IPV6_RECVPKTINFO                  = 0x24
	IPV6_RECVRTHDR                    = 0x26
	IPV6_RECVTCLASS                   = 0x39
	IPV6_RTABLE                       = 0x1021
	IPV6_RTHDR                        = 0x33
	IPV6_RTHDRDSTOPTS                 = 0x23
	IPV6_RTHDR_LOOSE                  = 0x0
	IPV6_RTHDR_STRICT                 = 0x1
	IPV6_RTHDR_TYPE_0                 = 0x0
	IPV6_SOCKOPT_RESERVED1            = 0x3
	IPV6_TCLASS                       = 0x3d
	IPV6_UNICAST_HOPS                 = 0x4
	IPV6_USE_MIN_MTU                  = 0x2a
	IPV6_V6ONLY                       = 0x1b
	IPV6_VERSION                      = 0x60
	IPV6_VERSION_MASK                 = 0xf0
	IP_ADD_MEMBERSHIP                 = 0xc
	IP_AUTH_LEVEL                     = 0x14
	IP_DEFAULT_MULTICAST_LOOP         = 0x1
	IP_DEFAULT_MULTICAST_TTL          = 0x1
	IP_DF                             = 0x4000
	IP_DROP_MEMBERSHIP                = 0xd
	IP_ESP_NETWORK_LEVEL              = 0x16
	IP_ESP_TRANS_LEVEL                = 0x15
	IP_HDRINCL                        = 0x2
	IP_IPCOMP_LEVEL                   = 0x1d
	IP_IPDEFTTL                       = 0x25
	IP_IPSECFLOWINFO                  = 0x24
	IP_IPSEC_LOCAL_AUTH               = 0x1b
	IP_IPSEC_LOCAL_CRED               = 0x19
	IP_IPSEC_LOCAL_ID                 = 0x17
	IP_IPSEC_REMOTE_AUTH              = 0x1c
	IP_IPSEC_REMOTE_CRED              = 0x1a
	IP_IPSEC_REMOTE_ID                = 0x18
	IP_MAXPACKET                      = 0xffff
	IP_MAX_MEMBERSHIPS                = 0xfff
	IP_MF                             = 0x2000
	IP_MINTTL                         = 0x20
	IP_MIN_MEMBERSHIPS                = 0xf
	IP_MSS                            = 0x240
	IP_MULTICAST_IF                   = 0x9
	IP_MULTICAST_LOOP                 = 0xb
	IP_MULTICAST_TTL                  = 0xa
	IP_OFFMASK                        = 0x1fff
	IP_OPTIONS                        = 0x1
	IP_PIPEX                          = 0x22
	IP_PORTRANGE                      = 0x13
	IP_PORTRANGE_DEFAULT              = 0x0
	IP_PORTRANGE_HIGH                 = 0x1
	IP_PORTRANGE_LOW                  = 0x2
	IP_RECVDSTADDR                    = 0x7
	IP_RECVDSTPORT                    = 0x21
	IP_RECVIF                         = 0x1e
	IP_RECVOPTS                       = 0x5
	IP_RECVRETOPTS                    = 0x6
	IP_RECVRTABLE                     = 0x23
	IP_RECVTTL                        = 0x1f
	IP_RETOPTS                        = 0x8
	IP_RF                             = 0x8000
	IP_RTABLE                         = 0x1021
	IP_SENDSRCADDR                    = 0x7
	IP_TOS                            = 0x3
	IP_TTL                            = 0x4
	ISIG                              = 0x80
	ISTRIP                            = 0x20
	ITIMER_PROF                       = 0x2
	ITIMER_REAL                       = 0x0
	ITIMER_VIRTUAL                    = 0x1
	IUCLC                             = 0x1000
	IXANY                             = 0x800
	IXOFF                             = 0x400
	IXON                              = 0x200
	KERN_HOSTNAME                     = 0xa
	KERN_OSRELEASE                    = 0x2
	KERN_OSTYPE                       = 0x1
	KERN_VERSION                      = 0x4
	LCNT_OVERLOAD_FLUSH               = 0x6
	LOCK_EX                           = 0x2
	LOCK_NB                           = 0x4
	LOCK_SH                           = 0x1
	LOCK_UN                           = 0x8
	MADV_DONTNEED                     = 0x4
	MADV_FREE                         = 0x6
	MADV_NORMAL                       = 0x0
	MADV_RANDOM                       = 0x1
	MADV_SEQUENTIAL                   = 0x2
	MADV_SPACEAVAIL                   = 0x5
	MADV_WILLNEED                     = 0x3
	MAP_ANON                          = 0x1000
	MAP_ANONYMOUS                     = 0x1000
	MAP_CONCEAL                       = 0x8000
	MAP_COPY                          = 0x2
	MAP_FILE                          = 0x0
	MAP_FIXED                         = 0x10
	MAP_FLAGMASK                      = 0xfff7
	MAP_HASSEMAPHORE                  = 0x0
	MAP_INHERIT                       = 0x0
	MAP_INHERIT_COPY                  = 0x1
	MAP_INHERIT_NONE                  = 0x2
	MAP_INHERIT_SHARE                 = 0x0
	MAP_INHERIT_ZERO                  = 0x3
	MAP_NOEXTEND                      = 0x0
	MAP_NORESERVE                     = 0x0
	MAP_PRIVATE                       = 0x2
	MAP_RENAME                        = 0x0
	MAP_SHARED                        = 0x1
	MAP_STACK                         = 0x4000
	MAP_TRYFIXED                      = 0x0
	MCL_CURRENT                       = 0x1
	MCL_FUTURE                        = 0x2
	MNT_ASYNC                         = 0x40
	MNT_DEFEXPORTED                   = 0x200
	MNT_DELEXPORT                     = 0x20000
	MNT_DOOMED                        = 0x8000000
	MNT_EXPORTANON                    = 0x400
	MNT_EXPORTED                      = 0x100
	MNT_EXRDONLY                      = 0x80
	MNT_FORCE                         = 0x80000
	MNT_LAZY                          = 0x3
	MNT_LOCAL                         = 0x1000
	MNT_NOATIME                       = 0x8000
	MNT_NODEV                         = 0x10
	MNT_NOEXEC                        = 0x4
	MNT_NOPERM                        = 0x20
	MNT_NOSUID                        = 0x8
	MNT_NOWAIT                        = 0x2
	MNT_QUOTA                         = 0x2000
	MNT_RDONLY                        = 0x1
	MNT_RELOAD                        = 0x40000
	MNT_ROOTFS                        = 0x4000
	MNT_SOFTDEP                       = 0x4000000
	MNT_STALLED                       = 0x100000
	MNT_SWAPPABLE                     = 0x200000
	MNT_SYNCHRONOUS                   = 0x2
	MNT_UPDATE                        = 0x10000
	MNT_VISFLAGMASK                   = 0x400ffff
	MNT_WAIT                          = 0x1
	MNT_WANTRDWR                      = 0x2000000
	MNT_WXALLOWED                     = 0x800
	MOUNT_AFS                         = "afs"
	MOUNT_CD9660                      = "cd9660"
	MOUNT_EXT2FS                      = "ext2fs"
	MOUNT_FFS                         = "ffs"
	MOUNT_FUSEFS                      = "fuse"
	MOUNT_MFS                         = "mfs"
	MOUNT_MSDOS                       = "msdos"
	MOUNT_NCPFS                       = "ncpfs"
	MOUNT_NFS                         = "nfs"
	MOUNT_NTFS                        = "ntfs"
	MOUNT_TMPFS                       = "tmpfs"
	MOUNT_UDF                         = "udf"
	MOUNT_UFS                         = "ffs"
	MSG_BCAST                         = 0x100
	MSG_CMSG_CLOEXEC                  = 0x800
	MSG_CTRUNC                        = 0x20
	MSG_DONTROUTE                     = 0x4
	MSG_DONTWAIT                      = 0x80
	MSG_EOR                           = 0x8
	MSG_MCAST                         = 0x200
	MSG_NOSIGNAL                      = 0x400
	MSG_OOB                           = 0x1
	MSG_PEEK                          = 0x2
	MSG_TRUNC                         = 0x10
	MSG_WAITALL                       = 0x40
	MSG_WAITFORONE                    = 0x1000
	MS_ASYNC                          = 0x1
	MS_INVALIDATE                     = 0x4
	MS_SYNC                           = 0x2
	NAME_MAX                          = 0xff
	NET_RT_DUMP                       = 0x1
	NET_RT_FLAGS                      = 0x2
	NET_RT_IFLIST                     = 0x3
	NET_RT_IFNAMES                    = 0x6
	NET_RT_MAXID                      = 0x8
	NET_RT_SOURCE                     = 0x7
	NET_RT_STATS                      = 0x4
	NET_RT_TABLE                      = 0x5
	NFDBITS                           = 0x20
	NOFLSH                            = 0x80000000
	NOKERNINFO                        = 0x2000000
	NOTE_ATTRIB                       = 0x8
	NOTE_CHANGE                       = 0x1
	NOTE_CHILD                        = 0x4
	NOTE_DELETE                       = 0x1
	NOTE_EOF                          = 0x2
	NOTE_EXEC                         = 0x20000000
	NOTE_EXIT                         = 0x80000000
	NOTE_EXTEND                       = 0x4
	NOTE_FORK                         = 0x40000000
	NOTE_LINK                         = 0x10
	NOTE_LOWAT                        = 0x1
	NOTE_OOB                          = 0x4
	NOTE_PCTRLMASK                    = 0xf0000000
	NOTE_PDATAMASK                    = 0xfffff
	NOTE_RENAME                       = 0x20
	NOTE_REVOKE                       = 0x40
	NOTE_TRACK                        = 0x1
	NOTE_TRACKERR                     = 0x2
	NOTE_TRUNCATE                     = 0x80
	NOTE_WRITE                        = 0x2
	OCRNL                             = 0x10
	OLCUC                             = 0x20
	ONLCR                             = 0x2
	ONLRET                            = 0x80
	ONOCR                             = 0x40
	ONOEOT                            = 0x8
	OPOST                             = 0x1
	OXTABS                            = 0x4
	O_ACCMODE                         = 0x3
	O_APPEND                          = 0x8
	O_ASYNC                           = 0x40
	O_CLOEXEC                         = 0x10000
	O_CREAT                           = 0x200
	O_DIRECTORY                       = 0x20000
	O_DSYNC                           = 0x80
	O_EXCL                            = 0x800
	O_EXLOCK                          = 0x20
	O_FSYNC                           = 0x80
	O_NDELAY                          = 0x4
	O_NOCTTY                          = 0x8000
	O_NOFOLLOW                        = 0x100
	O_NONBLOCK                        = 0x4
	O_RDONLY                          = 0x0
	O_RDWR                            = 0x2
	O_RSYNC                           = 0x80
	O_SHLOCK                          = 0x10
	O_SYNC                            = 0x80
	O_TRUNC                           = 0x400
	O_WRONLY                          = 0x1
	PARENB                            = 0x1000
	PARMRK                            = 0x8
	PARODD                            = 0x2000
	PENDIN                            = 0x20000000
	PF_FLUSH                          = 0x1
	PRIO_PGRP                         = 0x1
	PRIO_PROCESS                      = 0x0
	PRIO_USER                         = 0x2
	PROT_EXEC                         = 0x4
	PROT_NONE                         = 0x0
	PROT_READ                         = 0x1
	PROT_WRITE                        = 0x2
	RLIMIT_CORE                       = 0x4
	RLIMIT_CPU                        = 0x0
	RLIMIT_DATA                       = 0x2
	RLIMIT_FSIZE                      = 0x1
	RLIMIT_MEMLOCK                    = 0x6
	RLIMIT_NOFILE                     = 0x8
	RLIMIT_NPROC                      = 0x7
	RLIMIT_RSS                        = 0x5
	RLIMIT_STACK                      = 0x3
	RLIM_INFINITY                     = 0x7fffffffffffffff
	RTAX_AUTHOR                       = 0x6
	RTAX_BFD                          = 0xb
	RTAX_BRD                          = 0x7
	RTAX_DNS                          = 0xc
	RTAX_DST                          = 0x0
	RTAX_GATEWAY                      = 0x1
	RTAX_GENMASK                      = 0x3
	RTAX_IFA                          = 0x5
	RTAX_IFP                          = 0x4
	RTAX_LABEL                        = 0xa
	RTAX_MAX                          = 0xf
	RTAX_NETMASK                      = 0x2
	RTAX_SEARCH                       = 0xe
	RTAX_SRC                          = 0x8
	RTAX_SRCMASK                      = 0x9
	RTAX_STATIC                       = 0xd
	RTA_AUTHOR                        = 0x40
	RTA_BFD                           = 0x800
	RTA_BRD                           = 0x80
	RTA_DNS                           = 0x1000
	RTA_DST                           = 0x1
	RTA_GATEWAY                       = 0x2
	RTA_GENMASK                       = 0x8
	RTA_IFA                           = 0x20
	RTA_IFP                           = 0x10
	RTA_LABEL                         = 0x400
	RTA_NETMASK                       = 0x4
	RTA_SEARCH                        = 0x4000
	RTA_SRC                           = 0x100
	RTA_SRCMASK                       = 0x200
	RTA_STATIC                        = 0x2000
	RTF_ANNOUNCE                      = 0x4000
	RTF_BFD                           = 0x1000000
	RTF_BLACKHOLE                     = 0x1000
	RTF_BROADCAST                     = 0x400000
	RTF_CACHED                        = 0x20000
	RTF_CLONED                        = 0x10000
	RTF_CLONING                       = 0x100
	RTF_CONNECTED                     = 0x800000
	RTF_DONE                          = 0x40
	RTF_DYNAMIC                       = 0x10
	RTF_FMASK                         = 0x110fc08
	RTF_GATEWAY                       = 0x2
	RTF_HOST                          = 0x4
	RTF_LLINFO                        = 0x400
	RTF_LOCAL                         = 0x200000
	RTF_MODIFIED                      = 0x20
	RTF_MPATH                         = 0x40000
	RTF_MPLS                          = 0x100000
	RTF_MULTICAST                     = 0x200
	RTF_PERMANENT_ARP                 = 0x2000
	RTF_PROTO1                        = 0x8000
	RTF_PROTO2                        = 0x4000
	RTF_PROTO3                        = 0x2000
	RTF_REJECT                        = 0x8
	RTF_STATIC                        = 0x800
	RTF_UP                            = 0x1
	RTF_USETRAILERS                   = 0x8000
	RTM_80211INFO                     = 0x15
	RTM_ADD                           = 0x1
	RTM_BFD                           = 0x12
	RTM_CHANGE                        = 0x3
	RTM_CHGADDRATTR                   = 0x14
	RTM_DELADDR                       = 0xd
	RTM_DELETE                        = 0x2
	RTM_DESYNC                        = 0x10
	RTM_GET                           = 0x4
	RTM_IFANNOUNCE                    = 0xf
	RTM_IFINFO                        = 0xe
	RTM_INVALIDATE                    = 0x11
	RTM_LOSING                        = 0x5
	RTM_MAXSIZE                       = 0x800
	RTM_MISS                          = 0x7
	RTM_NEWADDR                       = 0xc
	RTM_PROPOSAL                      = 0x13
	RTM_REDIRECT                      = 0x6
	RTM_RESOLVE                       = 0xb
	RTM_SOURCE                        = 0x16
	RTM_VERSION                       = 0x5
	RTV_EXPIRE                        = 0x4
	RTV_HOPCOUNT                      = 0x2
	RTV_MTU                           = 0x1
	RTV_RPIPE                         = 0x8
	RTV_RTT                           = 0x40
	RTV_RTTVAR                        = 0x80
	RTV_SPIPE                         = 0x10
	RTV_SSTHRESH                      = 0x20
	RT_TABLEID_BITS                   = 0x8
	RT_TABLEID_MASK                   = 0xff
	RT_TABLEID_MAX                    = 0xff
	RUSAGE_CHILDREN                   = -0x1
	RUSAGE_SELF                       = 0x0
	RUSAGE_THREAD                     = 0x1
	SCM_RIGHTS                        = 0x1
	SCM_TIMESTAMP                     = 0x4
	SEEK_CUR                          = 0x1
	SEEK_END                          = 0x2
	SEEK_SET                          = 0x0
	SHUT_RD                           = 0x0
	SHUT_RDWR                         = 0x2
	SHUT_WR                           = 0x1
	SIOCADDMULTI                      = 0x80206931
	SIOCAIFADDR                       = 0x8040691a
	SIOCAIFGROUP                      = 0x80286987
	SIOCATMARK                        = 0x40047307
	SIOCBRDGADD                       = 0x8060693c
	SIOCBRDGADDL                      = 0x80606949
	SIOCBRDGADDS                      = 0x80606941
	SIOCBRDGARL                       = 0x808c694d
	SIOCBRDGDADDR                     = 0x81286947
	SIOCBRDGDEL                       = 0x8060693d
	SIOCBRDGDELS                      = 0x80606942
	SIOCBRDGFLUSH                     = 0x80606948
	SIOCBRDGFRL                       = 0x808c694e
	SIOCBRDGGCACHE                    = 0xc0146941
	SIOCBRDGGFD                       = 0xc0146952
	SIOCBRDGGHT                       = 0xc0146951
	SIOCBRDGGIFFLGS                   = 0xc060693e
	SIOCBRDGGMA                       = 0xc0146953
	SIOCBRDGGPARAM                    = 0xc0406958
	SIOCBRDGGPRI                      = 0xc0146950
	SIOCBRDGGRL                       = 0xc030694f
	SIOCBRDGGTO                       = 0xc0146946
	SIOCBRDGIFS                       = 0xc0606942
	SIOCBRDGRTS                       = 0xc0206943
	SIOCBRDGSADDR                     = 0xc1286944
	SIOCBRDGSCACHE                    = 0x80146940
	SIOCBRDGSFD                       = 0x80146952
	SIOCBRDGSHT                       = 0x80146951
	SIOCBRDGSIFCOST                   = 0x80606955
	SIOCBRDGSIFFLGS                   = 0x8060693f
	SIOCBRDGSIFPRIO                   = 0x80606954
	SIOCBRDGSIFPROT                   = 0x8060694a
	SIOCBRDGSMA                       = 0x80146953
	SIOCBRDGSPRI                      = 0x80146950
	SIOCBRDGSPROTO                    = 0x8014695a
	SIOCBRDGSTO                       = 0x80146945
	SIOCBRDGSTXHC                     = 0x80146959
	SIOCDELLABEL                      = 0x80206997
	SIOCDELMULTI                      = 0x80206932
	SIOCDIFADDR                       = 0x80206919
	SIOCDIFGROUP                      = 0x80286989
	SIOCDIFPARENT                     = 0x802069b4
	SIOCDIFPHYADDR                    = 0x80206949
	SIOCDPWE3NEIGHBOR                 = 0x802069de
	SIOCDVNETID                       = 0x802069af
	SIOCGETKALIVE                     = 0xc01869a4
	SIOCGETLABEL                      = 0x8020699a
	SIOCGETMPWCFG                     = 0xc02069ae
	SIOCGETPFLOW                      = 0xc02069fe
	SIOCGETPFSYNC                     = 0xc02069f8
	SIOCGETSGCNT                      = 0xc0207534
	SIOCGETVIFCNT                     = 0xc0287533
	SIOCGETVLAN                       = 0xc0206990
	SIOCGIFADDR                       = 0xc0206921
	SIOCGIFBRDADDR                    = 0xc0206923
	SIOCGIFCONF                       = 0xc0106924
	SIOCGIFDATA                       = 0xc020691b
	SIOCGIFDESCR                      = 0xc0206981
	SIOCGIFDSTADDR                    = 0xc0206922
	SIOCGIFFLAGS                      = 0xc0206911
	SIOCGIFGATTR                      = 0xc028698b
	SIOCGIFGENERIC                    = 0xc020693a
	SIOCGIFGLIST                      = 0xc028698d
	SIOCGIFGMEMB                      = 0xc028698a
	SIOCGIFGROUP                      = 0xc0286988
	SIOCGIFHARDMTU                    = 0xc02069a5
	SIOCGIFLLPRIO                     = 0xc02069b6
	SIOCGIFMEDIA                      = 0xc0406938
	SIOCGIFMETRIC                     = 0xc0206917
	SIOCGIFMTU                        = 0xc020697e
	SIOCGIFNETMASK                    = 0xc0206925
	SIOCGIFPAIR                       = 0xc02069b1
	SIOCGIFPARENT                     = 0xc02069b3
	SIOCGIFPRIORITY                   = 0xc020699c
	SIOCGIFRDOMAIN                    = 0xc02069a0
	SIOCGIFRTLABEL                    = 0xc0206983
	SIOCGIFRXR                        = 0x802069aa
	SIOCGIFSFFPAGE                    = 0xc1126939
	SIOCGIFXFLAGS                     = 0xc020699e
	SIOCGLIFPHYADDR                   = 0xc218694b
	SIOCGLIFPHYDF                     = 0xc02069c2
	SIOCGLIFPHYECN                    = 0xc02069c8
	SIOCGLIFPHYRTABLE                 = 0xc02069a2
	SIOCGLIFPHYTTL                    = 0xc02069a9
	SIOCGPGRP                         = 0x40047309
	SIOCGPWE3                         = 0xc0206998
	SIOCGPWE3CTRLWORD                 = 0xc02069dc
	SIOCGPWE3FAT                      = 0xc02069dd
	SIOCGPWE3NEIGHBOR                 = 0xc21869de
	SIOCGRXHPRIO                      = 0xc02069db
	SIOCGSPPPPARAMS                   = 0xc0206994
	SIOCGTXHPRIO                      = 0xc02069c6
	SIOCGUMBINFO                      = 0xc02069be
	SIOCGUMBPARAM                     = 0xc02069c0
	SIOCGVH                           = 0xc02069f6
	SIOCGVNETFLOWID                   = 0xc02069c4
	SIOCGVNETID                       = 0xc02069a7
	SIOCIFAFATTACH                    = 0x801169ab
	SIOCIFAFDETACH                    = 0x801169ac
	SIOCIFCREATE                      = 0x8020697a
	SIOCIFDESTROY                     = 0x80206979
	SIOCIFGCLONERS                    = 0xc0106978
	SIOCSETKALIVE                     = 0x801869a3
	SIOCSETLABEL                      = 0x80206999
	SIOCSETMPWCFG                     = 0x802069ad
	SIOCSETPFLOW                      = 0x802069fd
	SIOCSETPFSYNC                     = 0x802069f7
	SIOCSETVLAN                       = 0x8020698f
	SIOCSIFADDR                       = 0x8020690c
	SIOCSIFBRDADDR                    = 0x80206913
	SIOCSIFDESCR                      = 0x80206980
	SIOCSIFDSTADDR                    = 0x8020690e
	SIOCSIFFLAGS                      = 0x80206910
	SIOCSIFGATTR                      = 0x8028698c
	SIOCSIFGENERIC                    = 0x80206939
	SIOCSIFLLADDR                     = 0x8020691f
	SIOCSIFLLPRIO                     = 0x802069b5
	SIOCSIFMEDIA                      = 0xc0206937
	SIOCSIFMETRIC                     = 0x80206918
	SIOCSIFMTU                        = 0x8020697f
	SIOCSIFNETMASK                    = 0x80206916
	SIOCSIFPAIR                       = 0x802069b0
	SIOCSIFPARENT                     = 0x802069b2
	SIOCSIFPRIORITY                   = 0x8020699b
	SIOCSIFRDOMAIN                    = 0x8020699f
	SIOCSIFRTLABEL                    = 0x80206982
	SIOCSIFXFLAGS                     = 0x8020699d
	SIOCSLIFPHYADDR                   = 0x8218694a
	SIOCSLIFPHYDF                     = 0x802069c1
	SIOCSLIFPHYECN                    = 0x802069c7
	SIOCSLIFPHYRTABLE                 = 0x802069a1
	SIOCSLIFPHYTTL                    = 0x802069a8
	SIOCSPGRP                         = 0x80047308
	SIOCSPWE3CTRLWORD                 = 0x802069dc
	SIOCSPWE3FAT                      = 0x802069dd
	SIOCSPWE3NEIGHBOR                 = 0x821869de
	SIOCSRXHPRIO                      = 0x802069db
	SIOCSSPPPPARAMS                   = 0x80206993
	SIOCSTXHPRIO                      = 0x802069c5
	SIOCSUMBPARAM                     = 0x802069bf
	SIOCSVH                           = 0xc02069f5
	SIOCSVNETFLOWID                   = 0x802069c3
	SIOCSVNETID                       = 0x802069a6
	SOCK_CLOEXEC                      = 0x8000
	SOCK_DGRAM                        = 0x2
	SOCK_DNS                          = 0x1000
	SOCK_NONBLOCK                     = 0x4000
	SOCK_RAW                          = 0x3
	SOCK_RDM                          = 0x4
	SOCK_SEQPACKET                    = 0x5
	SOCK_STREAM                       = 0x1
	SOL_SOCKET                        = 0xffff
	SOMAXCONN                         = 0x80
	SO_ACCEPTCONN                     = 0x2
	SO_BINDANY                        = 0x1000
	SO_BROADCAST                      = 0x20
	SO_DEBUG                          = 0x1
	SO_DOMAIN                         = 0x1024
	SO_DONTROUTE                      = 0x10
	SO_ERROR                          = 0x1007
	SO_KEEPALIVE                      = 0x8
	SO_LINGER                         = 0x80
	SO_NETPROC                        = 0x1020
	SO_OOBINLINE                      = 0x100
	SO_PEERCRED                       = 0x1022
	SO_PROTOCOL                       = 0x1025
	SO_RCVBUF                         = 0x1002
	SO_RCVLOWAT                       = 0x1004
	SO_RCVTIMEO                       = 0x1006
	SO_REUSEADDR                      = 0x4
	SO_REUSEPORT                      = 0x200
	SO_RTABLE                         = 0x1021
	SO_SNDBUF                         = 0x1001
	SO_SNDLOWAT                       = 0x1003
	SO_SNDTIMEO                       = 0x1005
	SO_SPLICE                         = 0x1023
	SO_TIMESTAMP                      = 0x800
	SO_TYPE                           = 0x1008
	SO_USELOOPBACK                    = 0x40
	SO_ZEROIZE                        = 0x2000
	S_BLKSIZE                         = 0x200
	S_IEXEC                           = 0x40
	S_IFBLK                           = 0x6000
	S_IFCHR                           = 0x2000
	S_IFDIR                           = 0x4000
	S_IFIFO                           = 0x1000
	S_IFLNK                           = 0xa000
	S_IFMT                            = 0xf000
	S_IFREG                           = 0x8000
	S_IFSOCK                          = 0xc000
	S_IREAD                           = 0x100
	S_IRGRP                           = 0x20
	S_IROTH                           = 0x4
	S_IRUSR                           = 0x100
	S_IRWXG                           = 0x38
	S_IRWXO                           = 0x7
	S_IRWXU                           = 0x1c0
	S_ISGID                           = 0x400
	S_ISTXT                           = 0x200
	S_ISUID                           = 0x800
	S_ISVTX                           = 0x200
	S_IWGRP                           = 0x10
	S_IWOTH                           = 0x2
	S_IWRITE                          = 0x80
	S_IWUSR                           = 0x80
	S_IXGRP                           = 0x8
	S_IXOTH                           = 0x1
	S_IXUSR                           = 0x40
	TCIFLUSH                          = 0x1
	TCIOFF                            = 0x3
	TCIOFLUSH                         = 0x3
	TCION                             = 0x4
	TCOFLUSH                          = 0x2
	TCOOFF                            = 0x1
	TCOON                             = 0x2
	TCPOPT_EOL                        = 0x0
	TCPOPT_MAXSEG                     = 0x2
	TCPOPT_NOP                        = 0x1
	TCPOPT_SACK                       = 0x5
	TCPOPT_SACK_HDR                   = 0x1010500
	TCPOPT_SACK_PERMITTED             = 0x4
	TCPOPT_SACK_PERMIT_HDR            = 0x1010402
	TCPOPT_SIGNATURE                  = 0x13
	TCPOPT_TIMESTAMP                  = 0x8
	TCPOPT_TSTAMP_HDR                 = 0x101080a
	TCPOPT_WINDOW                     = 0x3
	TCP_INFO                          = 0x9
	TCP_MAXSEG                        = 0x2
	TCP_MAXWIN                        = 0xffff
	TCP_MAX_SACK                      = 0x3
	TCP_MAX_WINSHIFT                  = 0xe
	TCP_MD5SIG                        = 0x4
	TCP_MSS                           = 0x200
	TCP_NODELAY                       = 0x1
	TCP_NOPUSH                        = 0x10
	TCP_SACKHOLE_LIMIT                = 0x80
	TCP_SACK_ENABLE                   = 0x8
	TCSAFLUSH                         = 0x2
	TIMER_ABSTIME                     = 0x1
	TIMER_RELTIME                     = 0x0
	TIOCCBRK                          = 0x2000747a
	TIOCCDTR                          = 0x20007478
	TIOCCHKVERAUTH                    = 0x2000741e
	TIOCCLRVERAUTH                    = 0x2000741d
	TIOCCONS                          = 0x80047462
	TIOCDRAIN                         = 0x2000745e
	TIOCEXCL                          = 0x2000740d
	TIOCEXT                           = 0x80047460
	TIOCFLAG_CLOCAL                   = 0x2
	TIOCFLAG_CRTSCTS                  = 0x4
	TIOCFLAG_MDMBUF                   = 0x8
	TIOCFLAG_PPS                      = 0x10
	TIOCFLAG_SOFTCAR                  = 0x1
	TIOCFLUSH                         = 0x80047410
	TIOCGETA                          = 0x402c7413
	TIOCGETD                          = 0x4004741a
	TIOCGFLAGS                        = 0x4004745d
	TIOCGPGRP                         = 0x40047477
	TIOCGSID                          = 0x40047463
	TIOCGTSTAMP                       = 0x4010745b
	TIOCGWINSZ                        = 0x40087468
	TIOCMBIC                          = 0x8004746b
	TIOCMBIS                          = 0x8004746c
	TIOCMGET                          = 0x4004746a
	TIOCMODG                          = 0x4004746a
	TIOCMODS                          = 0x8004746d
	TIOCMSET                          = 0x8004746d
	TIOCM_CAR                         = 0x40
	TIOCM_CD                          = 0x40
	TIOCM_CTS                         = 0x20
	TIOCM_DSR                         = 0x100
	TIOCM_DTR                         = 0x2
	TIOCM_LE                          = 0x1
	TIOCM_RI                          = 0x80
	TIOCM_RNG                         = 0x80
	TIOCM_RTS                         = 0x4
	TIOCM_SR                          = 0x10
	TIOCM_ST                          = 0x8
	TIOCNOTTY                         = 0x20007471
	TIOCNXCL                          = 0x2000740e
	TIOCOUTQ                          = 0x40047473
	TIOCPKT                           = 0x80047470
	TIOCPKT_DATA                      = 0x0
	TIOCPKT_DOSTOP                    = 0x20
	TIOCPKT_FLUSHREAD                 = 0x1
	TIOCPKT_FLUSHWRITE                = 0x2
	TIOCPKT_IOCTL                     = 0x40
	TIOCPKT_NOSTOP                    = 0x10
	TIOCPKT_START                     = 0x8
	TIOCPKT_STOP                      = 0x4
	TIOCREMOTE                        = 0x80047469
	TIOCSBRK                          = 0x2000747b
	TIOCSCTTY                         = 0x20007461
	TIOCSDTR                          = 0x20007479
	TIOCSETA                          = 0x802c7414
	TIOCSETAF                         = 0x802c7416
	TIOCSETAW                         = 0x802c7415
	TIOCSETD                          = 0x8004741b
	TIOCSETVERAUTH                    = 0x8004741c
	TIOCSFLAGS                        = 0x8004745c
	TIOCSIG                           = 0x8004745f
	TIOCSPGRP                         = 0x80047476
	TIOCSTART                         = 0x2000746e
	TIOCSTAT                          = 0x20007465
	TIOCSTOP                          = 0x2000746f
	TIOCSTSTAMP                       = 0x8008745a
	TIOCSWINSZ                        = 0x80087467
	TIOCUCNTL                         = 0x80047466
	TIOCUCNTL_CBRK                    = 0x7a
	TIOCUCNTL_SBRK                    = 0x7b
	TOSTOP                            = 0x400000
	UTIME_NOW                         = -0x2
	UTIME_OMIT                        = -0x1
	VDISCARD                          = 0xf
	VDSUSP                            = 0xb
	VEOF                              = 0x0
	VEOL                              = 0x1
	VEOL2                             = 0x2
	VERASE                            = 0x3
	VINTR                             = 0x8
	VKILL                             = 0x5
	VLNEXT                            = 0xe
	VMIN                              = 0x10
	VM_ANONMIN                        = 0x7
	VM_LOADAVG                        = 0x2
	VM_MALLOC_CONF                    = 0xc
	VM_MAXID                          = 0xd
	VM_MAXSLP                         = 0xa
	VM_METER                          = 0x1
	VM_NKMEMPAGES                     = 0x6
	VM_PSSTRINGS                      = 0x3
	VM_SWAPENCRYPT                    = 0x5
	VM_USPACE                         = 0xb
	VM_UVMEXP                         = 0x4
	VM_VNODEMIN                       = 0x9
	VM_VTEXTMIN                       = 0x8
	VQUIT                             = 0x9
	VREPRINT                          = 0x6
	VSTART                            = 0xc
	VSTATUS                           = 0x12
	VSTOP                             = 0xd
	VSUSP                             = 0xa
	VTIME                             = 0x11
	VWERASE                           = 0x4
	WALTSIG                           = 0x4
	WCONTINUED                        = 0x8
	WCOREFLAG                         = 0x80
	WNOHANG                           = 0x1
	WUNTRACED                         = 0x2
	XCASE                             = 0x1000000
)

// Errors
const (
	E2BIG           = syscall.Errno(0x7)
	EACCES          = syscall.Errno(0xd)
	EADDRINUSE      = syscall.Errno(0x30)
	EADDRNOTAVAIL   = syscall.Errno(0x31)
	EAFNOSUPPORT    = syscall.Errno(0x2f)
	EAGAIN          = syscall.Errno(0x23)
	EALREADY        = syscall.Errno(0x25)
	EAUTH           = syscall.Errno(0x50)
	EBADF           = syscall.Errno(0x9)
	EBADMSG         = syscall.Errno(0x5c)
	EBADRPC         = syscall.Errno(0x48)
	EBUSY           = syscall.Errno(0x10)
	ECANCELED       = syscall.Errno(0x58)
	ECHILD          = syscall.Errno(0xa)
	ECONNABORTED    = syscall.Errno(0x35)
	ECONNREFUSED    = syscall.Errno(0x3d)
	ECONNRESET      = syscall.Errno(0x36)
	EDEADLK         = syscall.Errno(0xb)
	EDESTADDRREQ    = syscall.Errno(0x27)
	EDOM            = syscall.Errno(0x21)
	EDQUOT          = syscall.Errno(0x45)
	EEXIST          = syscall.Errno(0x11)
	EFAULT          = syscall.Errno(0xe)
	EFBIG           = syscall.Errno(0x1b)
	EFTYPE          = syscall.Errno(0x4f)
	EHOSTDOWN       = syscall.Errno(0x40)
	EHOSTUNREACH    = syscall.Errno(0x41)
	EIDRM           = syscall.Errno(0x59)
	EILSEQ          = syscall.Errno(0x54)
	EINPROGRESS     = syscall.Errno(0x24)
	EINTR           = syscall.Errno(0x4)
	EINVAL          = syscall.Errno(0x16)
	EIO             = syscall.Errno(0x5)
	EIPSEC          = syscall.Errno(0x52)
	EISCONN         = syscall.Errno(0x38)
	EISDIR          = syscall.Errno(0x15)
	ELAST           = syscall.Errno(0x5f)
	ELOOP           = syscall.Errno(0x3e)
	EMEDIUMTYPE     = syscall.Errno(0x56)
	EMFILE          = syscall.Errno(0x18)
	EMLINK          = syscall.Errno(0x1f)
	EMSGSIZE        = syscall.Errno(0x28)
	ENAMETOOLONG    = syscall.Errno(0x3f)
	ENEEDAUTH       = syscall.Errno(0x51)
	ENETDOWN        = syscall.Errno(0x32)
	ENETRESET       = syscall.Errno(0x34)
	ENETUNREACH     = syscall.Errno(0x33)
	ENFILE          = syscall.Errno(0x17)
	ENOATTR         = syscall.Errno(0x53)
	ENOBUFS         = syscall.Errno(0x37)
	ENODEV          = syscall.Errno(0x13)
	ENOENT          = syscall.Errno(0x2)
	ENOEXEC         = syscall.Errno(0x8)
	ENOLCK          = syscall.Errno(0x4d)
	ENOMEDIUM       = syscall.Errno(0x55)
	ENOMEM          = syscall.Errno(0xc)
	ENOMSG          = syscall.Errno(0x5a)
	ENOPROTOOPT     = syscall.Errno(0x2a)
	ENOSPC          = syscall.Errno(0x1c)
	ENOSYS          = syscall.Errno(0x4e)
	ENOTBLK         = syscall.Errno(0xf)
	ENOTCONN        = syscall.Errno(0x39)
	ENOTDIR         = syscall.Errno(0x14)
	ENOTEMPTY       = syscall.Errno(0x42)
	ENOTRECOVERABLE = syscall.Errno(0x5d)
	ENOTSOCK        = syscall.Errno(0x26)
	ENOTSUP         = syscall.Errno(0x5b)
	ENOTTY          = syscall.Errno(0x19)
	ENXIO           = syscall.Errno(0x6)
	EOPNOTSUPP      = syscall.Errno(0x2d)
	EOVERFLOW       = syscall.Errno(0x57)
	EOWNERDEAD      = syscall.Errno(0x5e)
	EPERM           = syscall.Errno(0x1)
	EPFNOSUPPORT    = syscall.Errno(0x2e)
	EPIPE           = syscall.Errno(0x20)
	EPROCLIM        = syscall.Errno(0x43)
	EPROCUNAVAIL    = syscall.Errno(0x4c)
	EPROGMISMATCH   = syscall.Errno(0x4b)
	EPROGUNAVAIL    = syscall.Errno(0x4a)
	EPROTO          = syscall.Errno(0x5f)
	EPROTONOSUPPORT = syscall.Errno(0x2b)
	EPROTOTYPE      = syscall.Errno(0x29)
	ERANGE          = syscall.Errno(0x22)
	EREMOTE         = syscall.Errno(0x47)
	EROFS           = syscall.Errno(0x1e)
	ERPCMISMATCH    = syscall.Errno(0x49)
	ESHUTDOWN       = syscall.Errno(0x3a)
	ESOCKTNOSUPPORT = syscall.Errno(0x2c)
	ESPIPE          = syscall.Errno(0x1d)
	ESRCH           = syscall.Errno(0x3)
	ESTALE          = syscall.Errno(0x46)
	ETIMEDOUT       = syscall.Errno(0x3c)
	ETOOMANYREFS    = syscall.Errno(0x3b)
	ETXTBSY         = syscall.Errno(0x1a)
	EUSERS          = syscall.Errno(0x44)
	EWOULDBLOCK     = syscall.Errno(0x23)
	EXDEV           = syscall.Errno(0x12)
)

// Signals
const (
	SIGABRT   = syscall.Signal(0x6)
	SIGALRM   = syscall.Signal(0xe)
	SIGBUS    = syscall.Signal(0xa)
	SIGCHLD   = syscall.Signal(0x14)
	SIGCONT   = syscall.Signal(0x13)
	SIGEMT    = syscall.Signal(0x7)
	SIGFPE    = syscall.Signal(0x8)
	SIGHUP    = syscall.Signal(0x1)
	SIGILL    = syscall.Signal(0x4)
	SIGINFO   = syscall.Signal(0x1d)
	SIGINT    = syscall.Signal(0x2)
	SIGIO     = syscall.Signal(0x17)
	SIGIOT    = syscall.Signal(0x6)
	SIGKILL   = syscall.Signal(0x9)
	SIGPIPE   = syscall.Signal(0xd)
	SIGPROF   = syscall.Signal(0x1b)
	SIGQUIT   = syscall.Signal(0x3)
	SIGSEGV   = syscall.Signal(0xb)
	SIGSTOP   = syscall.Signal(0x11)
	SIGSYS    = syscall.Signal(0xc)
	SIGTERM   = syscall.Signal(0xf)
	SIGTHR    = syscall.Signal(0x20)
	SIGTRAP   = syscall.Signal(0x5)
	SIGTSTP   = syscall.Signal(0x12)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x10)
	SIGUSR1   = syscall.Signal(0x1e)
	SIGUSR2   = syscall.Signal(0x1f)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "device not configured"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EDEADLK", "resource deadlock avoided"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "cross-device link"},
	{19, "ENODEV", "operation not supported by device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "result too large"},
	{35, "EAGAIN", "resource temporarily unavailable"},
	{36, "EINPROGRESS", "operation now in progress"},
	{37, "EALREADY", "operation already in progress"},
	{38, "ENOTSOCK", "socket operation on non-socket"},
	{39, "EDESTADDRREQ", "destination address required"},
	{40, "EMSGSIZE", "message too long"},
	{41, "EPROTOTYPE", "protocol wrong type for socket"},
	{42, "ENOPROTOOPT", "protocol not available"},
	{43, "EPROTONOSUPPORT", "protocol not supported"},
	{44, "ESOCKTNOSUPPORT", "socket type not supported"},
	{45, "EOPNOTSUPP", "operation not supported"},
	{46, "EPFNOSUPPORT", "protocol family not supported"},
	{47, "EAFNOSUPPORT", "address family not supported by protocol family"},
	{48, "EADDRINUSE", "address already in use"},
	{49, "EADDRNOTAVAIL", "can't assign requested address"},
	{50, "ENETDOWN", "network is down"},
	{51, "ENETUNREACH", "network is unreachable"},
	{52, "ENETRESET", "network dropped connection on reset"},
	{53, "ECONNABORTED", "software caused connection abort"},
	{54, "ECONNRESET", "connection reset by peer"},
	{55, "ENOBUFS", "no buffer space available"},
	{56, "EISCONN", "socket is already connected"},
	{57, "ENOTCONN", "socket is not connected"},
	{58, "ESHUTDOWN", "can't send after socket shutdown"},
	{59, "ETOOMANYREFS", "too many references: can't splice"},
	{60, "ETIMEDOUT", "operation timed out"},
	{61, "ECONNREFUSED", "connection refused"},
	{62, "ELOOP", "too many levels of symbolic links"},
	{63, "ENAMETOOLONG", "file name too long"},
	{64, "EHOSTDOWN", "host is down"},
	{65, "EHOSTUNREACH", "no route to host"},
	{66, "ENOTEMPTY", "directory not empty"},
	{67, "EPROCLIM", "too many processes"},
	{68, "EUSERS", "too many users"},
	{69, "EDQUOT", "disk quota exceeded"},
	{70, "ESTALE", "stale NFS file handle"},
	{71, "EREMOTE", "too many levels of remote in path"},
	{72, "EBADRPC", "RPC struct is bad"},
	{73, "ERPCMISMATCH", "RPC version wrong"},
	{74, "EPROGUNAVAIL", "RPC program not available"},
	{75, "EPROGMISMATCH", "program version wrong"},
	{76, "EPROCUNAVAIL", "bad procedure for program"},
	{77, "ENOLCK", "no locks available"},
	{78, "ENOSYS", "function not implemented"},
	{79, "EFTYPE", "inappropriate file type or format"},
	{80, "EAUTH", "authentication error"},
	{81, "ENEEDAUTH", "need authenticator"},
	{82, "EIPSEC", "IPsec processing failure"},
	{83, "ENOATTR", "attribute not found"},
	{84, "EILSEQ", "illegal byte sequence"},
	{85, "ENOMEDIUM", "no medium found"},
	{86, "EMEDIUMTYPE", "wrong medium type"},
	{87, "EOVERFLOW", "value too large to be stored in data type"},
	{88, "ECANCELED", "operation canceled"},
	{89, "EIDRM", "identifier removed"},
	{90, "ENOMSG", "no message of desired type"},
	{91, "ENOTSUP", "not supported"},
	{92, "EBADMSG", "bad message"},
	{93, "ENOTRECOVERABLE", "state not recoverable"},
	{94, "EOWNERDEAD", "previous owner died"},
	{95, "ELAST", "protocol error"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/BPT trap"},
	{6, "SIGIOT", "abort trap"},
	{7, "SIGEMT", "EMT trap"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus error"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGSYS", "bad system call"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGURG", "urgent I/O condition"},
	{17, "SIGSTOP", "suspended (signal)"},
	{18, "SIGTSTP", "suspended"},
	{19, "SIGCONT", "continued"},
	{20, "SIGCHLD", "child exited"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGIO", "I/O possible"},
	{24, "SIGXCPU", "cputime limit exceeded"},
	{25, "SIGXFSZ", "filesize limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window size changes"},
	{29, "SIGINFO", "information request"},
	{30, "SIGUSR1", "user defined signal 1"},
	{31, "SIGUSR2", "user defined signal 2"},
	{32, "SIGTHR", "thread AST"},
	{28672, "SIGSTKSZ", "unknown signal"},
}
   07070100000E40000081A4000000000000000000000001645E367C00013A3F000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go   // mkerrors.sh
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build arm && openbsd
// +build arm,openbsd

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- _const.go

package unix

import "syscall"

const (
	AF_APPLETALK                      = 0x10
	AF_BLUETOOTH                      = 0x20
	AF_CCITT                          = 0xa
	AF_CHAOS                          = 0x5
	AF_CNT                            = 0x15
	AF_COIP                           = 0x14
	AF_DATAKIT                        = 0x9
	AF_DECnet                         = 0xc
	AF_DLI                            = 0xd
	AF_E164                           = 0x1a
	AF_ECMA                           = 0x8
	AF_ENCAP                          = 0x1c
	AF_HYLINK                         = 0xf
	AF_IMPLINK                        = 0x3
	AF_INET                           = 0x2
	AF_INET6                          = 0x18
	AF_IPX                            = 0x17
	AF_ISDN                           = 0x1a
	AF_ISO                            = 0x7
	AF_KEY                            = 0x1e
	AF_LAT                            = 0xe
	AF_LINK                           = 0x12
	AF_LOCAL                          = 0x1
	AF_MAX                            = 0x24
	AF_MPLS                           = 0x21
	AF_NATM                           = 0x1b
	AF_NS                             = 0x6
	AF_OSI                            = 0x7
	AF_PUP                            = 0x4
	AF_ROUTE                          = 0x11
	AF_SIP                            = 0x1d
	AF_SNA                            = 0xb
	AF_UNIX                           = 0x1
	AF_UNSPEC                         = 0x0
	ALTWERASE                         = 0x200
	ARPHRD_ETHER                      = 0x1
	ARPHRD_FRELAY                     = 0xf
	ARPHRD_IEEE1394                   = 0x18
	ARPHRD_IEEE802                    = 0x6
	B0                                = 0x0
	B110                              = 0x6e
	B115200                           = 0x1c200
	B1200                             = 0x4b0
	B134                              = 0x86
	B14400                            = 0x3840
	B150                              = 0x96
	B1800                             = 0x708
	B19200                            = 0x4b00
	B200                              = 0xc8
	B230400                           = 0x38400
	B2400                             = 0x960
	B28800                            = 0x7080
	B300                              = 0x12c
	B38400                            = 0x9600
	B4800                             = 0x12c0
	B50                               = 0x32
	B57600                            = 0xe100
	B600                              = 0x258
	B7200                             = 0x1c20
	B75                               = 0x4b
	B76800                            = 0x12c00
	B9600                             = 0x2580
	BIOCFLUSH                         = 0x20004268
	BIOCGBLEN                         = 0x40044266
	BIOCGDIRFILT                      = 0x4004427c
	BIOCGDLT                          = 0x4004426a
	BIOCGDLTLIST                      = 0xc008427b
	BIOCGETIF                         = 0x4020426b
	BIOCGFILDROP                      = 0x40044278
	BIOCGHDRCMPLT                     = 0x40044274
	BIOCGRSIG                         = 0x40044273
	BIOCGRTIMEOUT                     = 0x4010426e
	BIOCGSTATS                        = 0x4008426f
	BIOCIMMEDIATE                     = 0x80044270
	BIOCLOCK                          = 0x20004276
	BIOCPROMISC                       = 0x20004269
	BIOCSBLEN                         = 0xc0044266
	BIOCSDIRFILT                      = 0x8004427d
	BIOCSDLT                          = 0x8004427a
	BIOCSETF                          = 0x80084267
	BIOCSETIF                         = 0x8020426c
	BIOCSETWF                         = 0x80084277
	BIOCSFILDROP                      = 0x80044279
	BIOCSHDRCMPLT                     = 0x80044275
	BIOCSRSIG                         = 0x80044272
	BIOCSRTIMEOUT                     = 0x8010426d
	BIOCVERSION                       = 0x40044271
	BPF_A                             = 0x10
	BPF_ABS                           = 0x20
	BPF_ADD                           = 0x0
	BPF_ALIGNMENT                     = 0x4
	BPF_ALU                           = 0x4
	BPF_AND                           = 0x50
	BPF_B                             = 0x10
	BPF_DIRECTION_IN                  = 0x1
	BPF_DIRECTION_OUT                 = 0x2
	BPF_DIV                           = 0x30
	BPF_FILDROP_CAPTURE               = 0x1
	BPF_FILDROP_DROP                  = 0x2
	BPF_FILDROP_PASS                  = 0x0
	BPF_F_DIR_IN                      = 0x10
	BPF_F_DIR_MASK                    = 0x30
	BPF_F_DIR_OUT                     = 0x20
	BPF_F_DIR_SHIFT                   = 0x4
	BPF_F_FLOWID                      = 0x8
	BPF_F_PRI_MASK                    = 0x7
	BPF_H                             = 0x8
	BPF_IMM                           = 0x0
	BPF_IND                           = 0x40
	BPF_JA                            = 0x0
	BPF_JEQ                           = 0x10
	BPF_JGE                           = 0x30
	BPF_JGT                           = 0x20
	BPF_JMP                           = 0x5
	BPF_JSET                          = 0x40
	BPF_K                             = 0x0
	BPF_LD                            = 0x0
	BPF_LDX                           = 0x1
	BPF_LEN                           = 0x80
	BPF_LSH                           = 0x60
	BPF_MAJOR_VERSION                 = 0x1
	BPF_MAXBUFSIZE                    = 0x200000
	BPF_MAXINSNS                      = 0x200
	BPF_MEM                           = 0x60
	BPF_MEMWORDS                      = 0x10
	BPF_MINBUFSIZE                    = 0x20
	BPF_MINOR_VERSION                 = 0x1
	BPF_MISC                          = 0x7
	BPF_MSH                           = 0xa0
	BPF_MUL                           = 0x20
	BPF_NEG                           = 0x80
	BPF_OR                            = 0x40
	BPF_RELEASE                       = 0x30bb6
	BPF_RET                           = 0x6
	BPF_RND                           = 0xc0
	BPF_RSH                           = 0x70
	BPF_ST                            = 0x2
	BPF_STX                           = 0x3
	BPF_SUB                           = 0x10
	BPF_TAX                           = 0x0
	BPF_TXA                           = 0x80
	BPF_W                             = 0x0
	BPF_X                             = 0x8
	BRKINT                            = 0x2
	CFLUSH                            = 0xf
	CLOCAL                            = 0x8000
	CLOCK_BOOTTIME                    = 0x6
	CLOCK_MONOTONIC                   = 0x3
	CLOCK_PROCESS_CPUTIME_ID          = 0x2
	CLOCK_REALTIME                    = 0x0
	CLOCK_THREAD_CPUTIME_ID           = 0x4
	CLOCK_UPTIME                      = 0x5
	CPUSTATES                         = 0x6
	CP_IDLE                           = 0x5
	CP_INTR                           = 0x4
	CP_NICE                           = 0x1
	CP_SPIN                           = 0x3
	CP_SYS                            = 0x2
	CP_USER                           = 0x0
	CREAD                             = 0x800
	CRTSCTS                           = 0x10000
	CS5                               = 0x0
	CS6                               = 0x100
	CS7                               = 0x200
	CS8                               = 0x300
	CSIZE                             = 0x300
	CSTART                            = 0x11
	CSTATUS                           = 0xff
	CSTOP                             = 0x13
	CSTOPB                            = 0x400
	CSUSP                             = 0x1a
	CTL_HW                            = 0x6
	CTL_KERN                          = 0x1
	CTL_MAXNAME                       = 0xc
	CTL_NET                           = 0x4
	DIOCADDQUEUE                      = 0xc100445d
	DIOCADDRULE                       = 0xcce04404
	DIOCADDSTATE                      = 0xc1084425
	DIOCCHANGERULE                    = 0xcce0441a
	DIOCCLRIFFLAG                     = 0xc024445a
	DIOCCLRSRCNODES                   = 0x20004455
	DIOCCLRSTATES                     = 0xc0d04412
	DIOCCLRSTATUS                     = 0xc0244416
	DIOCGETLIMIT                      = 0xc0084427
	DIOCGETQSTATS                     = 0xc1084460
	DIOCGETQUEUE                      = 0xc100445f
	DIOCGETQUEUES                     = 0xc100445e
	DIOCGETRULE                       = 0xcce04407
	DIOCGETRULES                      = 0xcce04406
	DIOCGETRULESET                    = 0xc444443b
	DIOCGETRULESETS                   = 0xc444443a
	DIOCGETSRCNODES                   = 0xc0084454
	DIOCGETSTATE                      = 0xc1084413
	DIOCGETSTATES                     = 0xc0084419
	DIOCGETSTATUS                     = 0xc1e84415
	DIOCGETSYNFLWATS                  = 0xc0084463
	DIOCGETTIMEOUT                    = 0xc008441e
	DIOCIGETIFACES                    = 0xc0244457
	DIOCKILLSRCNODES                  = 0xc068445b
	DIOCKILLSTATES                    = 0xc0d04429
	DIOCNATLOOK                       = 0xc0504417
	DIOCOSFPADD                       = 0xc088444f
	DIOCOSFPFLUSH                     = 0x2000444e
	DIOCOSFPGET                       = 0xc0884450
	DIOCRADDADDRS                     = 0xc44c4443
	DIOCRADDTABLES                    = 0xc44c443d
	DIOCRCLRADDRS                     = 0xc44c4442
	DIOCRCLRASTATS                    = 0xc44c4448
	DIOCRCLRTABLES                    = 0xc44c443c
	DIOCRCLRTSTATS                    = 0xc44c4441
	DIOCRDELADDRS                     = 0xc44c4444
	DIOCRDELTABLES                    = 0xc44c443e
	DIOCRGETADDRS                     = 0xc44c4446
	DIOCRGETASTATS                    = 0xc44c4447
	DIOCRGETTABLES                    = 0xc44c443f
	DIOCRGETTSTATS                    = 0xc44c4440
	DIOCRINADEFINE                    = 0xc44c444d
	DIOCRSETADDRS                     = 0xc44c4445
	DIOCRSETTFLAGS                    = 0xc44c444a
	DIOCRTSTADDRS                     = 0xc44c4449
	DIOCSETDEBUG                      = 0xc0044418
	DIOCSETHOSTID                     = 0xc0044456
	DIOCSETIFFLAG                     = 0xc0244459
	DIOCSETLIMIT                      = 0xc0084428
	DIOCSETREASS                      = 0xc004445c
	DIOCSETSTATUSIF                   = 0xc0244414
	DIOCSETSYNCOOKIES                 = 0xc0014462
	DIOCSETSYNFLWATS                  = 0xc0084461
	DIOCSETTIMEOUT                    = 0xc008441d
	DIOCSTART                         = 0x20004401
	DIOCSTOP                          = 0x20004402
	DIOCXBEGIN                        = 0xc00c4451
	DIOCXCOMMIT                       = 0xc00c4452
	DIOCXROLLBACK                     = 0xc00c4453
	DLT_ARCNET                        = 0x7
	DLT_ATM_RFC1483                   = 0xb
	DLT_AX25                          = 0x3
	DLT_CHAOS                         = 0x5
	DLT_C_HDLC                        = 0x68
	DLT_EN10MB                        = 0x1
	DLT_EN3MB                         = 0x2
	DLT_ENC                           = 0xd
	DLT_FDDI                          = 0xa
	DLT_IEEE802                       = 0x6
	DLT_IEEE802_11                    = 0x69
	DLT_IEEE802_11_RADIO              = 0x7f
	DLT_LOOP                          = 0xc
	DLT_MPLS                          = 0xdb
	DLT_NULL                          = 0x0
	DLT_OPENFLOW                      = 0x10b
	DLT_PFLOG                         = 0x75
	DLT_PFSYNC                        = 0x12
	DLT_PPP                           = 0x9
	DLT_PPP_BSDOS                     = 0x10
	DLT_PPP_ETHER                     = 0x33
	DLT_PPP_SERIAL                    = 0x32
	DLT_PRONET                        = 0x4
	DLT_RAW                           = 0xe
	DLT_SLIP                          = 0x8
	DLT_SLIP_BSDOS                    = 0xf
	DLT_USBPCAP                       = 0xf9
	DLT_USER0                         = 0x93
	DLT_USER1                         = 0x94
	DLT_USER10                        = 0x9d
	DLT_USER11                        = 0x9e
	DLT_USER12                        = 0x9f
	DLT_USER13                        = 0xa0
	DLT_USER14                        = 0xa1
	DLT_USER15                        = 0xa2
	DLT_USER2                         = 0x95
	DLT_USER3                         = 0x96
	DLT_USER4                         = 0x97
	DLT_USER5                         = 0x98
	DLT_USER6                         = 0x99
	DLT_USER7                         = 0x9a
	DLT_USER8                         = 0x9b
	DLT_USER9                         = 0x9c
	DT_BLK                            = 0x6
	DT_CHR                            = 0x2
	DT_DIR                            = 0x4
	DT_FIFO                           = 0x1
	DT_LNK                            = 0xa
	DT_REG                            = 0x8
	DT_SOCK                           = 0xc
	DT_UNKNOWN                        = 0x0
	ECHO                              = 0x8
	ECHOCTL                           = 0x40
	ECHOE                             = 0x2
	ECHOK                             = 0x4
	ECHOKE                            = 0x1
	ECHONL                            = 0x10
	ECHOPRT                           = 0x20
	EMT_TAGOVF                        = 0x1
	EMUL_ENABLED                      = 0x1
	EMUL_NATIVE                       = 0x2
	ENDRUNDISC                        = 0x9
	ETH64_8021_RSVD_MASK              = 0xfffffffffff0
	ETH64_8021_RSVD_PREFIX            = 0x180c2000000
	ETHERMIN                          = 0x2e
	ETHERMTU                          = 0x5dc
	ETHERTYPE_8023                    = 0x4
	ETHERTYPE_AARP                    = 0x80f3
	ETHERTYPE_ACCTON                  = 0x8390
	ETHERTYPE_AEONIC                  = 0x8036
	ETHERTYPE_ALPHA                   = 0x814a
	ETHERTYPE_AMBER                   = 0x6008
	ETHERTYPE_AMOEBA                  = 0x8145
	ETHERTYPE_AOE                     = 0x88a2
	ETHERTYPE_APOLLO                  = 0x80f7
	ETHERTYPE_APOLLODOMAIN            = 0x8019
	ETHERTYPE_APPLETALK               = 0x809b
	ETHERTYPE_APPLITEK                = 0x80c7
	ETHERTYPE_ARGONAUT                = 0x803a
	ETHERTYPE_ARP                     = 0x806
	ETHERTYPE_AT                      = 0x809b
	ETHERTYPE_ATALK                   = 0x809b
	ETHERTYPE_ATOMIC                  = 0x86df
	ETHERTYPE_ATT                     = 0x8069
	ETHERTYPE_ATTSTANFORD             = 0x8008
	ETHERTYPE_AUTOPHON                = 0x806a
	ETHERTYPE_AXIS                    = 0x8856
	ETHERTYPE_BCLOOP                  = 0x9003
	ETHERTYPE_BOFL                    = 0x8102
	ETHERTYPE_CABLETRON               = 0x7034
	ETHERTYPE_CHAOS                   = 0x804
	ETHERTYPE_COMDESIGN               = 0x806c
	ETHERTYPE_COMPUGRAPHIC            = 0x806d
	ETHERTYPE_COUNTERPOINT            = 0x8062
	ETHERTYPE_CRONUS                  = 0x8004
	ETHERTYPE_CRONUSVLN               = 0x8003
	ETHERTYPE_DCA                     = 0x1234
	ETHERTYPE_DDE                     = 0x807b
	ETHERTYPE_DEBNI                   = 0xaaaa
	ETHERTYPE_DECAM                   = 0x8048
	ETHERTYPE_DECCUST                 = 0x6006
	ETHERTYPE_DECDIAG                 = 0x6005
	ETHERTYPE_DECDNS                  = 0x803c
	ETHERTYPE_DECDTS                  = 0x803e
	ETHERTYPE_DECEXPER                = 0x6000
	ETHERTYPE_DECLAST                 = 0x8041
	ETHERTYPE_DECLTM                  = 0x803f
	ETHERTYPE_DECMUMPS                = 0x6009
	ETHERTYPE_DECNETBIOS              = 0x8040
	ETHERTYPE_DELTACON                = 0x86de
	ETHERTYPE_DIDDLE                  = 0x4321
	ETHERTYPE_DLOG1                   = 0x660
	ETHERTYPE_DLOG2                   = 0x661
	ETHERTYPE_DN                      = 0x6003
	ETHERTYPE_DOGFIGHT                = 0x1989
	ETHERTYPE_DSMD                    = 0x8039
	ETHERTYPE_EAPOL                   = 0x888e
	ETHERTYPE_ECMA                    = 0x803
	ETHERTYPE_ENCRYPT                 = 0x803d
	ETHERTYPE_ES                      = 0x805d
	ETHERTYPE_EXCELAN                 = 0x8010
	ETHERTYPE_EXPERDATA               = 0x8049
	ETHERTYPE_FLIP                    = 0x8146
	ETHERTYPE_FLOWCONTROL             = 0x8808
	ETHERTYPE_FRARP                   = 0x808
	ETHERTYPE_GENDYN                  = 0x8068
	ETHERTYPE_HAYES                   = 0x8130
	ETHERTYPE_HIPPI_FP                = 0x8180
	ETHERTYPE_HITACHI                 = 0x8820
	ETHERTYPE_HP                      = 0x8005
	ETHERTYPE_IEEEPUP                 = 0xa00
	ETHERTYPE_IEEEPUPAT               = 0xa01
	ETHERTYPE_IMLBL                   = 0x4c42
	ETHERTYPE_IMLBLDIAG               = 0x424c
	ETHERTYPE_IP                      = 0x800
	ETHERTYPE_IPAS                    = 0x876c
	ETHERTYPE_IPV6                    = 0x86dd
	ETHERTYPE_IPX                     = 0x8137
	ETHERTYPE_IPXNEW                  = 0x8037
	ETHERTYPE_KALPANA                 = 0x8582
	ETHERTYPE_LANBRIDGE               = 0x8038
	ETHERTYPE_LANPROBE                = 0x8888
	ETHERTYPE_LAT                     = 0x6004
	ETHERTYPE_LBACK                   = 0x9000
	ETHERTYPE_LITTLE                  = 0x8060
	ETHERTYPE_LLDP                    = 0x88cc
	ETHERTYPE_LOGICRAFT               = 0x8148
	ETHERTYPE_LOOPBACK                = 0x9000
	ETHERTYPE_MACSEC                  = 0x88e5
	ETHERTYPE_MATRA                   = 0x807a
	ETHERTYPE_MAX                     = 0xffff
	ETHERTYPE_MERIT                   = 0x807c
	ETHERTYPE_MICP                    = 0x873a
	ETHERTYPE_MOPDL                   = 0x6001
	ETHERTYPE_MOPRC                   = 0x6002
	ETHERTYPE_MOTOROLA                = 0x818d
	ETHERTYPE_MPLS                    = 0x8847
	ETHERTYPE_MPLS_MCAST              = 0x8848
	ETHERTYPE_MUMPS                   = 0x813f
	ETHERTYPE_NBPCC                   = 0x3c04
	ETHERTYPE_NBPCLAIM                = 0x3c09
	ETHERTYPE_NBPCLREQ                = 0x3c05
	ETHERTYPE_NBPCLRSP                = 0x3c06
	ETHERTYPE_NBPCREQ                 = 0x3c02
	ETHERTYPE_NBPCRSP                 = 0x3c03
	ETHERTYPE_NBPDG                   = 0x3c07
	ETHERTYPE_NBPDGB                  = 0x3c08
	ETHERTYPE_NBPDLTE                 = 0x3c0a
	ETHERTYPE_NBPRAR                  = 0x3c0c
	ETHERTYPE_NBPRAS                  = 0x3c0b
	ETHERTYPE_NBPRST                  = 0x3c0d
	ETHERTYPE_NBPSCD                  = 0x3c01
	ETHERTYPE_NBPVCD                  = 0x3c00
	ETHERTYPE_NBS                     = 0x802
	ETHERTYPE_NCD                     = 0x8149
	ETHERTYPE_NESTAR                  = 0x8006
	ETHERTYPE_NETBEUI                 = 0x8191
	ETHERTYPE_NHRP                    = 0x2001
	ETHERTYPE_NOVELL                  = 0x8138
	ETHERTYPE_NS                      = 0x600
	ETHERTYPE_NSAT                    = 0x601
	ETHERTYPE_NSCOMPAT                = 0x807
	ETHERTYPE_NSH                     = 0x984f
	ETHERTYPE_NTRAILER                = 0x10
	ETHERTYPE_OS9                     = 0x7007
	ETHERTYPE_OS9NET                  = 0x7009
	ETHERTYPE_PACER                   = 0x80c6
	ETHERTYPE_PBB                     = 0x88e7
	ETHERTYPE_PCS                     = 0x4242
	ETHERTYPE_PLANNING                = 0x8044
	ETHERTYPE_PPP                     = 0x880b
	ETHERTYPE_PPPOE                   = 0x8864
	ETHERTYPE_PPPOEDISC               = 0x8863
	ETHERTYPE_PRIMENTS                = 0x7031
	ETHERTYPE_PUP                     = 0x200
	ETHERTYPE_PUPAT                   = 0x200
	ETHERTYPE_QINQ                    = 0x88a8
	ETHERTYPE_RACAL                   = 0x7030
	ETHERTYPE_RATIONAL                = 0x8150
	ETHERTYPE_RAWFR                   = 0x6559
	ETHERTYPE_RCL                     = 0x1995
	ETHERTYPE_RDP                     = 0x8739
	ETHERTYPE_RETIX                   = 0x80f2
	ETHERTYPE_REVARP                  = 0x8035
	ETHERTYPE_SCA                     = 0x6007
	ETHERTYPE_SECTRA                  = 0x86db
	ETHERTYPE_SECUREDATA              = 0x876d
	ETHERTYPE_SGITW                   = 0x817e
	ETHERTYPE_SG_BOUNCE               = 0x8016
	ETHERTYPE_SG_DIAG                 = 0x8013
	ETHERTYPE_SG_NETGAMES             = 0x8014
	ETHERTYPE_SG_RESV                 = 0x8015
	ETHERTYPE_SIMNET                  = 0x5208
	ETHERTYPE_SLOW                    = 0x8809
	ETHERTYPE_SNA                     = 0x80d5
	ETHERTYPE_SNMP                    = 0x814c
	ETHERTYPE_SONIX                   = 0xfaf5
	ETHERTYPE_SPIDER                  = 0x809f
	ETHERTYPE_SPRITE                  = 0x500
	ETHERTYPE_STP                     = 0x8181
	ETHERTYPE_TALARIS                 = 0x812b
	ETHERTYPE_TALARISMC               = 0x852b
	ETHERTYPE_TCPCOMP                 = 0x876b
	ETHERTYPE_TCPSM                   = 0x9002
	ETHERTYPE_TEC                     = 0x814f
	ETHERTYPE_TIGAN                   = 0x802f
	ETHERTYPE_TRAIL                   = 0x1000
	ETHERTYPE_TRANSETHER              = 0x6558
	ETHERTYPE_TYMSHARE                = 0x802e
	ETHERTYPE_UBBST                   = 0x7005
	ETHERTYPE_UBDEBUG                 = 0x900
	ETHERTYPE_UBDIAGLOOP              = 0x7002
	ETHERTYPE_UBDL                    = 0x7000
	ETHERTYPE_UBNIU                   = 0x7001
	ETHERTYPE_UBNMC                   = 0x7003
	ETHERTYPE_VALID                   = 0x1600
	ETHERTYPE_VARIAN                  = 0x80dd
	ETHERTYPE_VAXELN                  = 0x803b
	ETHERTYPE_VEECO                   = 0x8067
	ETHERTYPE_VEXP                    = 0x805b
	ETHERTYPE_VGLAB                   = 0x8131
	ETHERTYPE_VINES                   = 0xbad
	ETHERTYPE_VINESECHO               = 0xbaf
	ETHERTYPE_VINESLOOP               = 0xbae
	ETHERTYPE_VITAL                   = 0xff00
	ETHERTYPE_VLAN                    = 0x8100
	ETHERTYPE_VLTLMAN                 = 0x8080
	ETHERTYPE_VPROD                   = 0x805c
	ETHERTYPE_VURESERVED              = 0x8147
	ETHERTYPE_WATERLOO                = 0x8130
	ETHERTYPE_WELLFLEET               = 0x8103
	ETHERTYPE_X25                     = 0x805
	ETHERTYPE_X75                     = 0x801
	ETHERTYPE_XNSSM                   = 0x9001
	ETHERTYPE_XTP                     = 0x817d
	ETHER_ADDR_LEN                    = 0x6
	ETHER_ALIGN                       = 0x2
	ETHER_CRC_LEN                     = 0x4
	ETHER_CRC_POLY_BE                 = 0x4c11db6
	ETHER_CRC_POLY_LE                 = 0xedb88320
	ETHER_HDR_LEN                     = 0xe
	ETHER_MAX_DIX_LEN                 = 0x600
	ETHER_MAX_HARDMTU_LEN             = 0xff9b
	ETHER_MAX_LEN                     = 0x5ee
	ETHER_MIN_LEN                     = 0x40
	ETHER_TYPE_LEN                    = 0x2
	ETHER_VLAN_ENCAP_LEN              = 0x4
	EVFILT_AIO                        = -0x3
	EVFILT_DEVICE                     = -0x8
	EVFILT_EXCEPT                     = -0x9
	EVFILT_PROC                       = -0x5
	EVFILT_READ                       = -0x1
	EVFILT_SIGNAL                     = -0x6
	EVFILT_SYSCOUNT                   = 0x9
	EVFILT_TIMER                      = -0x7
	EVFILT_VNODE                      = -0x4
	EVFILT_WRITE                      = -0x2
	EVL_ENCAPLEN                      = 0x4
	EVL_PRIO_BITS                     = 0xd
	EVL_PRIO_MAX                      = 0x7
	EVL_VLID_MASK                     = 0xfff
	EVL_VLID_MAX                      = 0xffe
	EVL_VLID_MIN                      = 0x1
	EVL_VLID_NULL                     = 0x0
	EV_ADD                            = 0x1
	EV_CLEAR                          = 0x20
	EV_DELETE                         = 0x2
	EV_DISABLE                        = 0x8
	EV_DISPATCH                       = 0x80
	EV_ENABLE                         = 0x4
	EV_EOF                            = 0x8000
	EV_ERROR                          = 0x4000
	EV_FLAG1                          = 0x2000
	EV_ONESHOT                        = 0x10
	EV_RECEIPT                        = 0x40
	EV_SYSFLAGS                       = 0xf800
	EXTA                              = 0x4b00
	EXTB                              = 0x9600
	EXTPROC                           = 0x800
	FD_CLOEXEC                        = 0x1
	FD_SETSIZE                        = 0x400
	FLUSHO                            = 0x800000
	F_DUPFD                           = 0x0
	F_DUPFD_CLOEXEC                   = 0xa
	F_GETFD                           = 0x1
	F_GETFL                           = 0x3
	F_GETLK                           = 0x7
	F_GETOWN                          = 0x5
	F_ISATTY                          = 0xb
	F_OK                              = 0x0
	F_RDLCK                           = 0x1
	F_SETFD                           = 0x2
	F_SETFL                           = 0x4
	F_SETLK                           = 0x8
	F_SETLKW                          = 0x9
	F_SETOWN                          = 0x6
	F_UNLCK                           = 0x2
	F_WRLCK                           = 0x3
	HUPCL                             = 0x4000
	HW_MACHINE                        = 0x1
	ICANON                            = 0x100
	ICMP6_FILTER                      = 0x12
	ICRNL                             = 0x100
	IEXTEN                            = 0x400
	IFAN_ARRIVAL                      = 0x0
	IFAN_DEPARTURE                    = 0x1
	IFF_ALLMULTI                      = 0x200
	IFF_BROADCAST                     = 0x2
	IFF_CANTCHANGE                    = 0x8e52
	IFF_DEBUG                         = 0x4
	IFF_LINK0                         = 0x1000
	IFF_LINK1                         = 0x2000
	IFF_LINK2                         = 0x4000
	IFF_LOOPBACK                      = 0x8
	IFF_MULTICAST                     = 0x8000
	IFF_NOARP                         = 0x80
	IFF_OACTIVE                       = 0x400
	IFF_POINTOPOINT                   = 0x10
	IFF_PROMISC                       = 0x100
	IFF_RUNNING                       = 0x40
	IFF_SIMPLEX                       = 0x800
	IFF_STATICARP                     = 0x20
	IFF_UP                            = 0x1
	IFNAMSIZ                          = 0x10
	IFT_1822                          = 0x2
	IFT_A12MPPSWITCH                  = 0x82
	IFT_AAL2                          = 0xbb
	IFT_AAL5                          = 0x31
	IFT_ADSL                          = 0x5e
	IFT_AFLANE8023                    = 0x3b
	IFT_AFLANE8025                    = 0x3c
	IFT_ARAP                          = 0x58
	IFT_ARCNET                        = 0x23
	IFT_ARCNETPLUS                    = 0x24
	IFT_ASYNC                         = 0x54
	IFT_ATM                           = 0x25
	IFT_ATMDXI                        = 0x69
	IFT_ATMFUNI                       = 0x6a
	IFT_ATMIMA                        = 0x6b
	IFT_ATMLOGICAL                    = 0x50
	IFT_ATMRADIO                      = 0xbd
	IFT_ATMSUBINTERFACE               = 0x86
	IFT_ATMVCIENDPT                   = 0xc2
	IFT_ATMVIRTUAL                    = 0x95
	IFT_BGPPOLICYACCOUNTING           = 0xa2
	IFT_BLUETOOTH                     = 0xf8
	IFT_BRIDGE                        = 0xd1
	IFT_BSC                           = 0x53
	IFT_CARP                          = 0xf7
	IFT_CCTEMUL                       = 0x3d
	IFT_CEPT                          = 0x13
	IFT_CES                           = 0x85
	IFT_CHANNEL                       = 0x46
	IFT_CNR                           = 0x55
	IFT_COFFEE                        = 0x84
	IFT_COMPOSITELINK                 = 0x9b
	IFT_DCN                           = 0x8d
	IFT_DIGITALPOWERLINE              = 0x8a
	IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba
	IFT_DLSW                          = 0x4a
	IFT_DOCSCABLEDOWNSTREAM           = 0x80
	IFT_DOCSCABLEMACLAYER             = 0x7f
	IFT_DOCSCABLEUPSTREAM             = 0x81
	IFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd
	IFT_DS0                           = 0x51
	IFT_DS0BUNDLE                     = 0x52
	IFT_DS1FDL                        = 0xaa
	IFT_DS3                           = 0x1e
	IFT_DTM                           = 0x8c
	IFT_DUMMY                         = 0xf1
	IFT_DVBASILN                      = 0xac
	IFT_DVBASIOUT                     = 0xad
	IFT_DVBRCCDOWNSTREAM              = 0x93
	IFT_DVBRCCMACLAYER                = 0x92
	IFT_DVBRCCUPSTREAM                = 0x94
	IFT_ECONET                        = 0xce
	IFT_ENC                           = 0xf4
	IFT_EON                           = 0x19
	IFT_EPLRS                         = 0x57
	IFT_ESCON                         = 0x49
	IFT_ETHER                         = 0x6
	IFT_FAITH                         = 0xf3
	IFT_FAST                          = 0x7d
	IFT_FASTETHER                     = 0x3e
	IFT_FASTETHERFX                   = 0x45
	IFT_FDDI                          = 0xf
	IFT_FIBRECHANNEL                  = 0x38
	IFT_FRAMERELAYINTERCONNECT        = 0x3a
	IFT_FRAMERELAYMPI                 = 0x5c
	IFT_FRDLCIENDPT                   = 0xc1
	IFT_FRELAY                        = 0x20
	IFT_FRELAYDCE                     = 0x2c
	IFT_FRF16MFRBUNDLE                = 0xa3
	IFT_FRFORWARD                     = 0x9e
	IFT_G703AT2MB                     = 0x43
	IFT_G703AT64K                     = 0x42
	IFT_GIF                           = 0xf0
	IFT_GIGABITETHERNET               = 0x75
	IFT_GR303IDT                      = 0xb2
	IFT_GR303RDT                      = 0xb1
	IFT_H323GATEKEEPER                = 0xa4
	IFT_H323PROXY                     = 0xa5
	IFT_HDH1822                       = 0x3
	IFT_HDLC                          = 0x76
	IFT_HDSL2                         = 0xa8
	IFT_HIPERLAN2                     = 0xb7
	IFT_HIPPI                         = 0x2f
	IFT_HIPPIINTERFACE                = 0x39
	IFT_HOSTPAD                       = 0x5a
	IFT_HSSI                          = 0x2e
	IFT_HY                            = 0xe
	IFT_IBM370PARCHAN                 = 0x48
	IFT_IDSL                          = 0x9a
	IFT_IEEE1394                      = 0x90
	IFT_IEEE80211                     = 0x47
	IFT_IEEE80212                     = 0x37
	IFT_IEEE8023ADLAG                 = 0xa1
	IFT_IFGSN                         = 0x91
	IFT_IMT                           = 0xbe
	IFT_INFINIBAND                    = 0xc7
	IFT_INTERLEAVE                    = 0x7c
	IFT_IP                            = 0x7e
	IFT_IPFORWARD                     = 0x8e
	IFT_IPOVERATM                     = 0x72
	IFT_IPOVERCDLC                    = 0x6d
	IFT_IPOVERCLAW                    = 0x6e
	IFT_IPSWITCH                      = 0x4e
	IFT_ISDN                          = 0x3f
	IFT_ISDNBASIC                     = 0x14
	IFT_ISDNPRIMARY                   = 0x15
	IFT_ISDNS                         = 0x4b
	IFT_ISDNU                         = 0x4c
	IFT_ISO88022LLC                   = 0x29
	IFT_ISO88023                      = 0x7
	IFT_ISO88024                      = 0x8
	IFT_ISO88025                      = 0x9
	IFT_ISO88025CRFPINT               = 0x62
	IFT_ISO88025DTR                   = 0x56
	IFT_ISO88025FIBER                 = 0x73
	IFT_ISO88026                      = 0xa
	IFT_ISUP                          = 0xb3
	IFT_L2VLAN                        = 0x87
	IFT_L3IPVLAN                      = 0x88
	IFT_L3IPXVLAN                     = 0x89
	IFT_LAPB                          = 0x10
	IFT_LAPD                          = 0x4d
	IFT_LAPF                          = 0x77
	IFT_LINEGROUP                     = 0xd2
	IFT_LOCALTALK                     = 0x2a
	IFT_LOOP                          = 0x18
	IFT_MBIM                          = 0xfa
	IFT_MEDIAMAILOVERIP               = 0x8b
	IFT_MFSIGLINK                     = 0xa7
	IFT_MIOX25                        = 0x26
	IFT_MODEM                         = 0x30
	IFT_MPC                           = 0x71
	IFT_MPLS                          = 0xa6
	IFT_MPLSTUNNEL                    = 0x96
	IFT_MSDSL                         = 0x8f
	IFT_MVL                           = 0xbf
	IFT_MYRINET                       = 0x63
	IFT_NFAS                          = 0xaf
	IFT_NSIP                          = 0x1b
	IFT_OPTICALCHANNEL                = 0xc3
	IFT_OPTICALTRANSPORT              = 0xc4
	IFT_OTHER                         = 0x1
	IFT_P10                           = 0xc
	IFT_P80                           = 0xd
	IFT_PARA                          = 0x22
	IFT_PFLOG                         = 0xf5
	IFT_PFLOW                         = 0xf9
	IFT_PFSYNC                        = 0xf6
	IFT_PLC                           = 0xae
	IFT_PON155                        = 0xcf
	IFT_PON622                        = 0xd0
	IFT_POS                           = 0xab
	IFT_PPP                           = 0x17
	IFT_PPPMULTILINKBUNDLE            = 0x6c
	IFT_PROPATM                       = 0xc5
	IFT_PROPBWAP2MP                   = 0xb8
	IFT_PROPCNLS                      = 0x59
	IFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5
	IFT_PROPDOCSWIRELESSMACLAYER      = 0xb4
	IFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6
	IFT_PROPMUX                       = 0x36
	IFT_PROPVIRTUAL                   = 0x35
	IFT_PROPWIRELESSP2P               = 0x9d
	IFT_PTPSERIAL                     = 0x16
	IFT_PVC                           = 0xf2
	IFT_Q2931                         = 0xc9
	IFT_QLLC                          = 0x44
	IFT_RADIOMAC                      = 0xbc
	IFT_RADSL                         = 0x5f
	IFT_REACHDSL                      = 0xc0
	IFT_RFC1483                       = 0x9f
	IFT_RS232                         = 0x21
	IFT_RSRB                          = 0x4f
	IFT_SDLC                          = 0x11
	IFT_SDSL                          = 0x60
	IFT_SHDSL                         = 0xa9
	IFT_SIP                           = 0x1f
	IFT_SIPSIG                        = 0xcc
	IFT_SIPTG                         = 0xcb
	IFT_SLIP                          = 0x1c
	IFT_SMDSDXI                       = 0x2b
	IFT_SMDSICIP                      = 0x34
	IFT_SONET                         = 0x27
	IFT_SONETOVERHEADCHANNEL          = 0xb9
	IFT_SONETPATH                     = 0x32
	IFT_SONETVT                       = 0x33
	IFT_SRP                           = 0x97
	IFT_SS7SIGLINK                    = 0x9c
	IFT_STACKTOSTACK                  = 0x6f
	IFT_STARLAN                       = 0xb
	IFT_T1                            = 0x12
	IFT_TDLC                          = 0x74
	IFT_TELINK                        = 0xc8
	IFT_TERMPAD                       = 0x5b
	IFT_TR008                         = 0xb0
	IFT_TRANSPHDLC                    = 0x7b
	IFT_TUNNEL                        = 0x83
	IFT_ULTRA                         = 0x1d
	IFT_USB                           = 0xa0
	IFT_V11                           = 0x40
	IFT_V35                           = 0x2d
	IFT_V36                           = 0x41
	IFT_V37                           = 0x78
	IFT_VDSL                          = 0x61
	IFT_VIRTUALIPADDRESS              = 0x70
	IFT_VIRTUALTG                     = 0xca
	IFT_VOICEDID                      = 0xd5
	IFT_VOICEEM                       = 0x64
	IFT_VOICEEMFGD                    = 0xd3
	IFT_VOICEENCAP                    = 0x67
	IFT_VOICEFGDEANA                  = 0xd4
	IFT_VOICEFXO                      = 0x65
	IFT_VOICEFXS                      = 0x66
	IFT_VOICEOVERATM                  = 0x98
	IFT_VOICEOVERCABLE                = 0xc6
	IFT_VOICEOVERFRAMERELAY           = 0x99
	IFT_VOICEOVERIP                   = 0x68
	IFT_WIREGUARD                     = 0xfb
	IFT_X213                          = 0x5d
	IFT_X25                           = 0x5
	IFT_X25DDN                        = 0x4
	IFT_X25HUNTGROUP                  = 0x7a
	IFT_X25MLP                        = 0x79
	IFT_X25PLE                        = 0x28
	IFT_XETHER                        = 0x1a
	IGNBRK                            = 0x1
	IGNCR                             = 0x80
	IGNPAR                            = 0x4
	IMAXBEL                           = 0x2000
	INLCR                             = 0x40
	INPCK                             = 0x10
	IN_CLASSA_HOST                    = 0xffffff
	IN_CLASSA_MAX                     = 0x80
	IN_CLASSA_NET                     = 0xff000000
	IN_CLASSA_NSHIFT                  = 0x18
	IN_CLASSB_HOST                    = 0xffff
	IN_CLASSB_MAX                     = 0x10000
	IN_CLASSB_NET                     = 0xffff0000
	IN_CLASSB_NSHIFT                  = 0x10
	IN_CLASSC_HOST                    = 0xff
	IN_CLASSC_NET                     = 0xffffff00
	IN_CLASSC_NSHIFT                  = 0x8
	IN_CLASSD_HOST                    = 0xfffffff
	IN_CLASSD_NET                     = 0xf0000000
	IN_CLASSD_NSHIFT                  = 0x1c
	IN_LOOPBACKNET                    = 0x7f
	IN_RFC3021_HOST                   = 0x1
	IN_RFC3021_NET                    = 0xfffffffe
	IN_RFC3021_NSHIFT                 = 0x1f
	IPPROTO_AH                        = 0x33
	IPPROTO_CARP                      = 0x70
	IPPROTO_DIVERT                    = 0x102
	IPPROTO_DONE                      = 0x101
	IPPROTO_DSTOPTS                   = 0x3c
	IPPROTO_EGP                       = 0x8
	IPPROTO_ENCAP                     = 0x62
	IPPROTO_EON                       = 0x50
	IPPROTO_ESP                       = 0x32
	IPPROTO_ETHERIP                   = 0x61
	IPPROTO_FRAGMENT                  = 0x2c
	IPPROTO_GGP                       = 0x3
	IPPROTO_GRE                       = 0x2f
	IPPROTO_HOPOPTS                   = 0x0
	IPPROTO_ICMP                      = 0x1
	IPPROTO_ICMPV6                    = 0x3a
	IPPROTO_IDP                       = 0x16
	IPPROTO_IGMP                      = 0x2
	IPPROTO_IP                        = 0x0
	IPPROTO_IPCOMP                    = 0x6c
	IPPROTO_IPIP                      = 0x4
	IPPROTO_IPV4                      = 0x4
	IPPROTO_IPV6                      = 0x29
	IPPROTO_MAX                       = 0x100
	IPPROTO_MAXID                     = 0x103
	IPPROTO_MOBILE                    = 0x37
	IPPROTO_MPLS                      = 0x89
	IPPROTO_NONE                      = 0x3b
	IPPROTO_PFSYNC                    = 0xf0
	IPPROTO_PIM                       = 0x67
	IPPROTO_PUP                       = 0xc
	IPPROTO_RAW                       = 0xff
	IPPROTO_ROUTING                   = 0x2b
	IPPROTO_RSVP                      = 0x2e
	IPPROTO_SCTP                      = 0x84
	IPPROTO_TCP                       = 0x6
	IPPROTO_TP                        = 0x1d
	IPPROTO_UDP                       = 0x11
	IPPROTO_UDPLITE                   = 0x88
	IPV6_AUTH_LEVEL                   = 0x35
	IPV6_AUTOFLOWLABEL                = 0x3b
	IPV6_CHECKSUM                     = 0x1a
	IPV6_DEFAULT_MULTICAST_HOPS       = 0x1
	IPV6_DEFAULT_MULTICAST_LOOP       = 0x1
	IPV6_DEFHLIM                      = 0x40
	IPV6_DONTFRAG                     = 0x3e
	IPV6_DSTOPTS                      = 0x32
	IPV6_ESP_NETWORK_LEVEL            = 0x37
	IPV6_ESP_TRANS_LEVEL              = 0x36
	IPV6_FAITH                        = 0x1d
	IPV6_FLOWINFO_MASK                = 0xffffff0f
	IPV6_FLOWLABEL_MASK               = 0xffff0f00
	IPV6_FRAGTTL                      = 0x78
	IPV6_HLIMDEC                      = 0x1
	IPV6_HOPLIMIT                     = 0x2f
	IPV6_HOPOPTS                      = 0x31
	IPV6_IPCOMP_LEVEL                 = 0x3c
	IPV6_JOIN_GROUP                   = 0xc
	IPV6_LEAVE_GROUP                  = 0xd
	IPV6_MAXHLIM                      = 0xff
	IPV6_MAXPACKET                    = 0xffff
	IPV6_MINHOPCOUNT                  = 0x41
	IPV6_MMTU                         = 0x500
	IPV6_MULTICAST_HOPS               = 0xa
	IPV6_MULTICAST_IF                 = 0x9
	IPV6_MULTICAST_LOOP               = 0xb
	IPV6_NEXTHOP                      = 0x30
	IPV6_OPTIONS                      = 0x1
	IPV6_PATHMTU                      = 0x2c
	IPV6_PIPEX                        = 0x3f
	IPV6_PKTINFO                      = 0x2e
	IPV6_PORTRANGE                    = 0xe
	IPV6_PORTRANGE_DEFAULT            = 0x0
	IPV6_PORTRANGE_HIGH               = 0x1
	IPV6_PORTRANGE_LOW                = 0x2
	IPV6_RECVDSTOPTS                  = 0x28
	IPV6_RECVDSTPORT                  = 0x40
	IPV6_RECVHOPLIMIT                 = 0x25
	IPV6_RECVHOPOPTS                  = 0x27
	IPV6_RECVPATHMTU                  = 0x2b
	IPV6_RECVPKTINFO                  = 0x24
	IPV6_RECVRTHDR                    = 0x26
	IPV6_RECVTCLASS                   = 0x39
	IPV6_RTABLE                       = 0x1021
	IPV6_RTHDR                        = 0x33
	IPV6_RTHDRDSTOPTS                 = 0x23
	IPV6_RTHDR_LOOSE                  = 0x0
	IPV6_RTHDR_STRICT                 = 0x1
	IPV6_RTHDR_TYPE_0                 = 0x0
	IPV6_SOCKOPT_RESERVED1            = 0x3
	IPV6_TCLASS                       = 0x3d
	IPV6_UNICAST_HOPS                 = 0x4
	IPV6_USE_MIN_MTU                  = 0x2a
	IPV6_V6ONLY                       = 0x1b
	IPV6_VERSION                      = 0x60
	IPV6_VERSION_MASK                 = 0xf0
	IP_ADD_MEMBERSHIP                 = 0xc
	IP_AUTH_LEVEL                     = 0x14
	IP_DEFAULT_MULTICAST_LOOP         = 0x1
	IP_DEFAULT_MULTICAST_TTL          = 0x1
	IP_DF                             = 0x4000
	IP_DROP_MEMBERSHIP                = 0xd
	IP_ESP_NETWORK_LEVEL              = 0x16
	IP_ESP_TRANS_LEVEL                = 0x15
	IP_HDRINCL                        = 0x2
	IP_IPCOMP_LEVEL                   = 0x1d
	IP_IPDEFTTL                       = 0x25
	IP_IPSECFLOWINFO                  = 0x24
	IP_IPSEC_LOCAL_AUTH               = 0x1b
	IP_IPSEC_LOCAL_CRED               = 0x19
	IP_IPSEC_LOCAL_ID                 = 0x17
	IP_IPSEC_REMOTE_AUTH              = 0x1c
	IP_IPSEC_REMOTE_CRED              = 0x1a
	IP_IPSEC_REMOTE_ID                = 0x18
	IP_MAXPACKET                      = 0xffff
	IP_MAX_MEMBERSHIPS                = 0xfff
	IP_MF                             = 0x2000
	IP_MINTTL                         = 0x20
	IP_MIN_MEMBERSHIPS                = 0xf
	IP_MSS                            = 0x240
	IP_MULTICAST_IF                   = 0x9
	IP_MULTICAST_LOOP                 = 0xb
	IP_MULTICAST_TTL                  = 0xa
	IP_OFFMASK                        = 0x1fff
	IP_OPTIONS                        = 0x1
	IP_PIPEX                          = 0x22
	IP_PORTRANGE                      = 0x13
	IP_PORTRANGE_DEFAULT              = 0x0
	IP_PORTRANGE_HIGH                 = 0x1
	IP_PORTRANGE_LOW                  = 0x2
	IP_RECVDSTADDR                    = 0x7
	IP_RECVDSTPORT                    = 0x21
	IP_RECVIF                         = 0x1e
	IP_RECVOPTS                       = 0x5
	IP_RECVRETOPTS                    = 0x6
	IP_RECVRTABLE                     = 0x23
	IP_RECVTTL                        = 0x1f
	IP_RETOPTS                        = 0x8
	IP_RF                             = 0x8000
	IP_RTABLE                         = 0x1021
	IP_SENDSRCADDR                    = 0x7
	IP_TOS                            = 0x3
	IP_TTL                            = 0x4
	ISIG                              = 0x80
	ISTRIP                            = 0x20
	ITIMER_PROF                       = 0x2
	ITIMER_REAL                       = 0x0
	ITIMER_VIRTUAL                    = 0x1
	IUCLC                             = 0x1000
	IXANY                             = 0x800
	IXOFF                             = 0x400
	IXON                              = 0x200
	KERN_HOSTNAME                     = 0xa
	KERN_OSRELEASE                    = 0x2
	KERN_OSTYPE                       = 0x1
	KERN_VERSION                      = 0x4
	LCNT_OVERLOAD_FLUSH               = 0x6
	LOCK_EX                           = 0x2
	LOCK_NB                           = 0x4
	LOCK_SH                           = 0x1
	LOCK_UN                           = 0x8
	MADV_DONTNEED                     = 0x4
	MADV_FREE                         = 0x6
	MADV_NORMAL                       = 0x0
	MADV_RANDOM                       = 0x1
	MADV_SEQUENTIAL                   = 0x2
	MADV_SPACEAVAIL                   = 0x5
	MADV_WILLNEED                     = 0x3
	MAP_ANON                          = 0x1000
	MAP_ANONYMOUS                     = 0x1000
	MAP_CONCEAL                       = 0x8000
	MAP_COPY                          = 0x2
	MAP_FILE                          = 0x0
	MAP_FIXED                         = 0x10
	MAP_FLAGMASK                      = 0xfff7
	MAP_HASSEMAPHORE                  = 0x0
	MAP_INHERIT                       = 0x0
	MAP_INHERIT_COPY                  = 0x1
	MAP_INHERIT_NONE                  = 0x2
	MAP_INHERIT_SHARE                 = 0x0
	MAP_INHERIT_ZERO                  = 0x3
	MAP_NOEXTEND                      = 0x0
	MAP_NORESERVE                     = 0x0
	MAP_PRIVATE                       = 0x2
	MAP_RENAME                        = 0x0
	MAP_SHARED                        = 0x1
	MAP_STACK                         = 0x4000
	MAP_TRYFIXED                      = 0x0
	MCL_CURRENT                       = 0x1
	MCL_FUTURE                        = 0x2
	MNT_ASYNC                         = 0x40
	MNT_DEFEXPORTED                   = 0x200
	MNT_DELEXPORT                     = 0x20000
	MNT_DOOMED                        = 0x8000000
	MNT_EXPORTANON                    = 0x400
	MNT_EXPORTED                      = 0x100
	MNT_EXRDONLY                      = 0x80
	MNT_FORCE                         = 0x80000
	MNT_LAZY                          = 0x3
	MNT_LOCAL                         = 0x1000
	MNT_NOATIME                       = 0x8000
	MNT_NODEV                         = 0x10
	MNT_NOEXEC                        = 0x4
	MNT_NOPERM                        = 0x20
	MNT_NOSUID                        = 0x8
	MNT_NOWAIT                        = 0x2
	MNT_QUOTA                         = 0x2000
	MNT_RDONLY                        = 0x1
	MNT_RELOAD                        = 0x40000
	MNT_ROOTFS                        = 0x4000
	MNT_SOFTDEP                       = 0x4000000
	MNT_STALLED                       = 0x100000
	MNT_SWAPPABLE                     = 0x200000
	MNT_SYNCHRONOUS                   = 0x2
	MNT_UPDATE                        = 0x10000
	MNT_VISFLAGMASK                   = 0x400ffff
	MNT_WAIT                          = 0x1
	MNT_WANTRDWR                      = 0x2000000
	MNT_WXALLOWED                     = 0x800
	MOUNT_AFS                         = "afs"
	MOUNT_CD9660                      = "cd9660"
	MOUNT_EXT2FS                      = "ext2fs"
	MOUNT_FFS                         = "ffs"
	MOUNT_FUSEFS                      = "fuse"
	MOUNT_MFS                         = "mfs"
	MOUNT_MSDOS                       = "msdos"
	MOUNT_NCPFS                       = "ncpfs"
	MOUNT_NFS                         = "nfs"
	MOUNT_NTFS                        = "ntfs"
	MOUNT_TMPFS                       = "tmpfs"
	MOUNT_UDF                         = "udf"
	MOUNT_UFS                         = "ffs"
	MSG_BCAST                         = 0x100
	MSG_CMSG_CLOEXEC                  = 0x800
	MSG_CTRUNC                        = 0x20
	MSG_DONTROUTE                     = 0x4
	MSG_DONTWAIT                      = 0x80
	MSG_EOR                           = 0x8
	MSG_MCAST                         = 0x200
	MSG_NOSIGNAL                      = 0x400
	MSG_OOB                           = 0x1
	MSG_PEEK                          = 0x2
	MSG_TRUNC                         = 0x10
	MSG_WAITALL                       = 0x40
	MSG_WAITFORONE                    = 0x1000
	MS_ASYNC                          = 0x1
	MS_INVALIDATE                     = 0x4
	MS_SYNC                           = 0x2
	NAME_MAX                          = 0xff
	NET_RT_DUMP                       = 0x1
	NET_RT_FLAGS                      = 0x2
	NET_RT_IFLIST                     = 0x3
	NET_RT_IFNAMES                    = 0x6
	NET_RT_MAXID                      = 0x8
	NET_RT_SOURCE                     = 0x7
	NET_RT_STATS                      = 0x4
	NET_RT_TABLE                      = 0x5
	NFDBITS                           = 0x20
	NOFLSH                            = 0x80000000
	NOKERNINFO                        = 0x2000000
	NOTE_ATTRIB                       = 0x8
	NOTE_CHANGE                       = 0x1
	NOTE_CHILD                        = 0x4
	NOTE_DELETE                       = 0x1
	NOTE_EOF                          = 0x2
	NOTE_EXEC                         = 0x20000000
	NOTE_EXIT                         = 0x80000000
	NOTE_EXTEND                       = 0x4
	NOTE_FORK                         = 0x40000000
	NOTE_LINK                         = 0x10
	NOTE_LOWAT                        = 0x1
	NOTE_OOB                          = 0x4
	NOTE_PCTRLMASK                    = 0xf0000000
	NOTE_PDATAMASK                    = 0xfffff
	NOTE_RENAME                       = 0x20
	NOTE_REVOKE                       = 0x40
	NOTE_TRACK                        = 0x1
	NOTE_TRACKERR                     = 0x2
	NOTE_TRUNCATE                     = 0x80
	NOTE_WRITE                        = 0x2
	OCRNL                             = 0x10
	OLCUC                             = 0x20
	ONLCR                             = 0x2
	ONLRET                            = 0x80
	ONOCR                             = 0x40
	ONOEOT                            = 0x8
	OPOST                             = 0x1
	OXTABS                            = 0x4
	O_ACCMODE                         = 0x3
	O_APPEND                          = 0x8
	O_ASYNC                           = 0x40
	O_CLOEXEC                         = 0x10000
	O_CREAT                           = 0x200
	O_DIRECTORY                       = 0x20000
	O_DSYNC                           = 0x80
	O_EXCL                            = 0x800
	O_EXLOCK                          = 0x20
	O_FSYNC                           = 0x80
	O_NDELAY                          = 0x4
	O_NOCTTY                          = 0x8000
	O_NOFOLLOW                        = 0x100
	O_NONBLOCK                        = 0x4
	O_RDONLY                          = 0x0
	O_RDWR                            = 0x2
	O_RSYNC                           = 0x80
	O_SHLOCK                          = 0x10
	O_SYNC                            = 0x80
	O_TRUNC                           = 0x400
	O_WRONLY                          = 0x1
	PARENB                            = 0x1000
	PARMRK                            = 0x8
	PARODD                            = 0x2000
	PENDIN                            = 0x20000000
	PF_FLUSH                          = 0x1
	PRIO_PGRP                         = 0x1
	PRIO_PROCESS                      = 0x0
	PRIO_USER                         = 0x2
	PROT_EXEC                         = 0x4
	PROT_NONE                         = 0x0
	PROT_READ                         = 0x1
	PROT_WRITE                        = 0x2
	RLIMIT_CORE                       = 0x4
	RLIMIT_CPU                        = 0x0
	RLIMIT_DATA                       = 0x2
	RLIMIT_FSIZE                      = 0x1
	RLIMIT_MEMLOCK                    = 0x6
	RLIMIT_NOFILE                     = 0x8
	RLIMIT_NPROC                      = 0x7
	RLIMIT_RSS                        = 0x5
	RLIMIT_STACK                      = 0x3
	RLIM_INFINITY                     = 0x7fffffffffffffff
	RTAX_AUTHOR                       = 0x6
	RTAX_BFD                          = 0xb
	RTAX_BRD                          = 0x7
	RTAX_DNS                          = 0xc
	RTAX_DST                          = 0x0
	RTAX_GATEWAY                      = 0x1
	RTAX_GENMASK                      = 0x3
	RTAX_IFA                          = 0x5
	RTAX_IFP                          = 0x4
	RTAX_LABEL                        = 0xa
	RTAX_MAX                          = 0xf
	RTAX_NETMASK                      = 0x2
	RTAX_SEARCH                       = 0xe
	RTAX_SRC                          = 0x8
	RTAX_SRCMASK                      = 0x9
	RTAX_STATIC                       = 0xd
	RTA_AUTHOR                        = 0x40
	RTA_BFD                           = 0x800
	RTA_BRD                           = 0x80
	RTA_DNS                           = 0x1000
	RTA_DST                           = 0x1
	RTA_GATEWAY                       = 0x2
	RTA_GENMASK                       = 0x8
	RTA_IFA                           = 0x20
	RTA_IFP                           = 0x10
	RTA_LABEL                         = 0x400
	RTA_NETMASK                       = 0x4
	RTA_SEARCH                        = 0x4000
	RTA_SRC                           = 0x100
	RTA_SRCMASK                       = 0x200
	RTA_STATIC                        = 0x2000
	RTF_ANNOUNCE                      = 0x4000
	RTF_BFD                           = 0x1000000
	RTF_BLACKHOLE                     = 0x1000
	RTF_BROADCAST                     = 0x400000
	RTF_CACHED                        = 0x20000
	RTF_CLONED                        = 0x10000
	RTF_CLONING                       = 0x100
	RTF_CONNECTED                     = 0x800000
	RTF_DONE                          = 0x40
	RTF_DYNAMIC                       = 0x10
	RTF_FMASK                         = 0x110fc08
	RTF_GATEWAY                       = 0x2
	RTF_HOST                          = 0x4
	RTF_LLINFO                        = 0x400
	RTF_LOCAL                         = 0x200000
	RTF_MODIFIED                      = 0x20
	RTF_MPATH                         = 0x40000
	RTF_MPLS                          = 0x100000
	RTF_MULTICAST                     = 0x200
	RTF_PERMANENT_ARP                 = 0x2000
	RTF_PROTO1                        = 0x8000
	RTF_PROTO2                        = 0x4000
	RTF_PROTO3                        = 0x2000
	RTF_REJECT                        = 0x8
	RTF_STATIC                        = 0x800
	RTF_UP                            = 0x1
	RTF_USETRAILERS                   = 0x8000
	RTM_80211INFO                     = 0x15
	RTM_ADD                           = 0x1
	RTM_BFD                           = 0x12
	RTM_CHANGE                        = 0x3
	RTM_CHGADDRATTR                   = 0x14
	RTM_DELADDR                       = 0xd
	RTM_DELETE                        = 0x2
	RTM_DESYNC                        = 0x10
	RTM_GET                           = 0x4
	RTM_IFANNOUNCE                    = 0xf
	RTM_IFINFO                        = 0xe
	RTM_INVALIDATE                    = 0x11
	RTM_LOSING                        = 0x5
	RTM_MAXSIZE                       = 0x800
	RTM_MISS                          = 0x7
	RTM_NEWADDR                       = 0xc
	RTM_PROPOSAL                      = 0x13
	RTM_REDIRECT                      = 0x6
	RTM_RESOLVE                       = 0xb
	RTM_SOURCE                        = 0x16
	RTM_VERSION                       = 0x5
	RTV_EXPIRE                        = 0x4
	RTV_HOPCOUNT                      = 0x2
	RTV_MTU                           = 0x1
	RTV_RPIPE                         = 0x8
	RTV_RTT                           = 0x40
	RTV_RTTVAR                        = 0x80
	RTV_SPIPE                         = 0x10
	RTV_SSTHRESH                      = 0x20
	RT_TABLEID_BITS                   = 0x8
	RT_TABLEID_MASK                   = 0xff
	RT_TABLEID_MAX                    = 0xff
	RUSAGE_CHILDREN                   = -0x1
	RUSAGE_SELF                       = 0x0
	RUSAGE_THREAD                     = 0x1
	SCM_RIGHTS                        = 0x1
	SCM_TIMESTAMP                     = 0x4
	SEEK_CUR                          = 0x1
	SEEK_END                          = 0x2
	SEEK_SET                          = 0x0
	SHUT_RD                           = 0x0
	SHUT_RDWR                         = 0x2
	SHUT_WR                           = 0x1
	SIOCADDMULTI                      = 0x80206931
	SIOCAIFADDR                       = 0x8040691a
	SIOCAIFGROUP                      = 0x80246987
	SIOCATMARK                        = 0x40047307
	SIOCBRDGADD                       = 0x8060693c
	SIOCBRDGADDL                      = 0x80606949
	SIOCBRDGADDS                      = 0x80606941
	SIOCBRDGARL                       = 0x808c694d
	SIOCBRDGDADDR                     = 0x81286947
	SIOCBRDGDEL                       = 0x8060693d
	SIOCBRDGDELS                      = 0x80606942
	SIOCBRDGFLUSH                     = 0x80606948
	SIOCBRDGFRL                       = 0x808c694e
	SIOCBRDGGCACHE                    = 0xc0146941
	SIOCBRDGGFD                       = 0xc0146952
	SIOCBRDGGHT                       = 0xc0146951
	SIOCBRDGGIFFLGS                   = 0xc060693e
	SIOCBRDGGMA                       = 0xc0146953
	SIOCBRDGGPARAM                    = 0xc0406958
	SIOCBRDGGPRI                      = 0xc0146950
	SIOCBRDGGRL                       = 0xc028694f
	SIOCBRDGGTO                       = 0xc0146946
	SIOCBRDGIFS                       = 0xc0606942
	SIOCBRDGRTS                       = 0xc0186943
	SIOCBRDGSADDR                     = 0xc1286944
	SIOCBRDGSCACHE                    = 0x80146940
	SIOCBRDGSFD                       = 0x80146952
	SIOCBRDGSHT                       = 0x80146951
	SIOCBRDGSIFCOST                   = 0x80606955
	SIOCBRDGSIFFLGS                   = 0x8060693f
	SIOCBRDGSIFPRIO                   = 0x80606954
	SIOCBRDGSIFPROT                   = 0x8060694a
	SIOCBRDGSMA                       = 0x80146953
	SIOCBRDGSPRI                      = 0x80146950
	SIOCBRDGSPROTO                    = 0x8014695a
	SIOCBRDGSTO                       = 0x80146945
	SIOCBRDGSTXHC                     = 0x80146959
	SIOCDELLABEL                      = 0x80206997
	SIOCDELMULTI                      = 0x80206932
	SIOCDIFADDR                       = 0x80206919
	SIOCDIFGROUP                      = 0x80246989
	SIOCDIFPARENT                     = 0x802069b4
	SIOCDIFPHYADDR                    = 0x80206949
	SIOCDPWE3NEIGHBOR                 = 0x802069de
	SIOCDVNETID                       = 0x802069af
	SIOCGETKALIVE                     = 0xc01869a4
	SIOCGETLABEL                      = 0x8020699a
	SIOCGETMPWCFG                     = 0xc02069ae
	SIOCGETPFLOW                      = 0xc02069fe
	SIOCGETPFSYNC                     = 0xc02069f8
	SIOCGETSGCNT                      = 0xc0147534
	SIOCGETVIFCNT                     = 0xc0147533
	SIOCGETVLAN                       = 0xc0206990
	SIOCGIFADDR                       = 0xc0206921
	SIOCGIFBRDADDR                    = 0xc0206923
	SIOCGIFCONF                       = 0xc0086924
	SIOCGIFDATA                       = 0xc020691b
	SIOCGIFDESCR                      = 0xc0206981
	SIOCGIFDSTADDR                    = 0xc0206922
	SIOCGIFFLAGS                      = 0xc0206911
	SIOCGIFGATTR                      = 0xc024698b
	SIOCGIFGENERIC                    = 0xc020693a
	SIOCGIFGLIST                      = 0xc024698d
	SIOCGIFGMEMB                      = 0xc024698a
	SIOCGIFGROUP                      = 0xc0246988
	SIOCGIFHARDMTU                    = 0xc02069a5
	SIOCGIFLLPRIO                     = 0xc02069b6
	SIOCGIFMEDIA                      = 0xc0386938
	SIOCGIFMETRIC                     = 0xc0206917
	SIOCGIFMTU                        = 0xc020697e
	SIOCGIFNETMASK                    = 0xc0206925
	SIOCGIFPAIR                       = 0xc02069b1
	SIOCGIFPARENT                     = 0xc02069b3
	SIOCGIFPRIORITY                   = 0xc020699c
	SIOCGIFRDOMAIN                    = 0xc02069a0
	SIOCGIFRTLABEL                    = 0xc0206983
	SIOCGIFRXR                        = 0x802069aa
	SIOCGIFSFFPAGE                    = 0xc1126939
	SIOCGIFXFLAGS                     = 0xc020699e
	SIOCGLIFPHYADDR                   = 0xc218694b
	SIOCGLIFPHYDF                     = 0xc02069c2
	SIOCGLIFPHYECN                    = 0xc02069c8
	SIOCGLIFPHYRTABLE                 = 0xc02069a2
	SIOCGLIFPHYTTL                    = 0xc02069a9
	SIOCGPGRP                         = 0x40047309
	SIOCGPWE3                         = 0xc0206998
	SIOCGPWE3CTRLWORD                 = 0xc02069dc
	SIOCGPWE3FAT                      = 0xc02069dd
	SIOCGPWE3NEIGHBOR                 = 0xc21869de
	SIOCGRXHPRIO                      = 0xc02069db
	SIOCGSPPPPARAMS                   = 0xc0206994
	SIOCGTXHPRIO                      = 0xc02069c6
	SIOCGUMBINFO                      = 0xc02069be
	SIOCGUMBPARAM                     = 0xc02069c0
	SIOCGVH                           = 0xc02069f6
	SIOCGVNETFLOWID                   = 0xc02069c4
	SIOCGVNETID                       = 0xc02069a7
	SIOCIFAFATTACH                    = 0x801169ab
	SIOCIFAFDETACH                    = 0x801169ac
	SIOCIFCREATE                      = 0x8020697a
	SIOCIFDESTROY                     = 0x80206979
	SIOCIFGCLONERS                    = 0xc00c6978
	SIOCSETKALIVE                     = 0x801869a3
	SIOCSETLABEL                      = 0x80206999
	SIOCSETMPWCFG                     = 0x802069ad
	SIOCSETPFLOW                      = 0x802069fd
	SIOCSETPFSYNC                     = 0x802069f7
	SIOCSETVLAN                       = 0x8020698f
	SIOCSIFADDR                       = 0x8020690c
	SIOCSIFBRDADDR                    = 0x80206913
	SIOCSIFDESCR                      = 0x80206980
	SIOCSIFDSTADDR                    = 0x8020690e
	SIOCSIFFLAGS                      = 0x80206910
	SIOCSIFGATTR                      = 0x8024698c
	SIOCSIFGENERIC                    = 0x80206939
	SIOCSIFLLADDR                     = 0x8020691f
	SIOCSIFLLPRIO                     = 0x802069b5
	SIOCSIFMEDIA                      = 0xc0206937
	SIOCSIFMETRIC                     = 0x80206918
	SIOCSIFMTU                        = 0x8020697f
	SIOCSIFNETMASK                    = 0x80206916
	SIOCSIFPAIR                       = 0x802069b0
	SIOCSIFPARENT                     = 0x802069b2
	SIOCSIFPRIORITY                   = 0x8020699b
	SIOCSIFRDOMAIN                    = 0x8020699f
	SIOCSIFRTLABEL                    = 0x80206982
	SIOCSIFXFLAGS                     = 0x8020699d
	SIOCSLIFPHYADDR                   = 0x8218694a
	SIOCSLIFPHYDF                     = 0x802069c1
	SIOCSLIFPHYECN                    = 0x802069c7
	SIOCSLIFPHYRTABLE                 = 0x802069a1
	SIOCSLIFPHYTTL                    = 0x802069a8
	SIOCSPGRP                         = 0x80047308
	SIOCSPWE3CTRLWORD                 = 0x802069dc
	SIOCSPWE3FAT                      = 0x802069dd
	SIOCSPWE3NEIGHBOR                 = 0x821869de
	SIOCSRXHPRIO                      = 0x802069db
	SIOCSSPPPPARAMS                   = 0x80206993
	SIOCSTXHPRIO                      = 0x802069c5
	SIOCSUMBPARAM                     = 0x802069bf
	SIOCSVH                           = 0xc02069f5
	SIOCSVNETFLOWID                   = 0x802069c3
	SIOCSVNETID                       = 0x802069a6
	SOCK_CLOEXEC                      = 0x8000
	SOCK_DGRAM                        = 0x2
	SOCK_DNS                          = 0x1000
	SOCK_NONBLOCK                     = 0x4000
	SOCK_RAW                          = 0x3
	SOCK_RDM                          = 0x4
	SOCK_SEQPACKET                    = 0x5
	SOCK_STREAM                       = 0x1
	SOL_SOCKET                        = 0xffff
	SOMAXCONN                         = 0x80
	SO_ACCEPTCONN                     = 0x2
	SO_BINDANY                        = 0x1000
	SO_BROADCAST                      = 0x20
	SO_DEBUG                          = 0x1
	SO_DOMAIN                         = 0x1024
	SO_DONTROUTE                      = 0x10
	SO_ERROR                          = 0x1007
	SO_KEEPALIVE                      = 0x8
	SO_LINGER                         = 0x80
	SO_NETPROC                        = 0x1020
	SO_OOBINLINE                      = 0x100
	SO_PEERCRED                       = 0x1022
	SO_PROTOCOL                       = 0x1025
	SO_RCVBUF                         = 0x1002
	SO_RCVLOWAT                       = 0x1004
	SO_RCVTIMEO                       = 0x1006
	SO_REUSEADDR                      = 0x4
	SO_REUSEPORT                      = 0x200
	SO_RTABLE                         = 0x1021
	SO_SNDBUF                         = 0x1001
	SO_SNDLOWAT                       = 0x1003
	SO_SNDTIMEO                       = 0x1005
	SO_SPLICE                         = 0x1023
	SO_TIMESTAMP                      = 0x800
	SO_TYPE                           = 0x1008
	SO_USELOOPBACK                    = 0x40
	SO_ZEROIZE                        = 0x2000
	S_BLKSIZE                         = 0x200
	S_IEXEC                           = 0x40
	S_IFBLK                           = 0x6000
	S_IFCHR                           = 0x2000
	S_IFDIR                           = 0x4000
	S_IFIFO                           = 0x1000
	S_IFLNK                           = 0xa000
	S_IFMT                            = 0xf000
	S_IFREG                           = 0x8000
	S_IFSOCK                          = 0xc000
	S_IREAD                           = 0x100
	S_IRGRP                           = 0x20
	S_IROTH                           = 0x4
	S_IRUSR                           = 0x100
	S_IRWXG                           = 0x38
	S_IRWXO                           = 0x7
	S_IRWXU                           = 0x1c0
	S_ISGID                           = 0x400
	S_ISTXT                           = 0x200
	S_ISUID                           = 0x800
	S_ISVTX                           = 0x200
	S_IWGRP                           = 0x10
	S_IWOTH                           = 0x2
	S_IWRITE                          = 0x80
	S_IWUSR                           = 0x80
	S_IXGRP                           = 0x8
	S_IXOTH                           = 0x1
	S_IXUSR                           = 0x40
	TCIFLUSH                          = 0x1
	TCIOFF                            = 0x3
	TCIOFLUSH                         = 0x3
	TCION                             = 0x4
	TCOFLUSH                          = 0x2
	TCOOFF                            = 0x1
	TCOON                             = 0x2
	TCPOPT_EOL                        = 0x0
	TCPOPT_MAXSEG                     = 0x2
	TCPOPT_NOP                        = 0x1
	TCPOPT_SACK                       = 0x5
	TCPOPT_SACK_HDR                   = 0x1010500
	TCPOPT_SACK_PERMITTED             = 0x4
	TCPOPT_SACK_PERMIT_HDR            = 0x1010402
	TCPOPT_SIGNATURE                  = 0x13
	TCPOPT_TIMESTAMP                  = 0x8
	TCPOPT_TSTAMP_HDR                 = 0x101080a
	TCPOPT_WINDOW                     = 0x3
	TCP_INFO                          = 0x9
	TCP_MAXSEG                        = 0x2
	TCP_MAXWIN                        = 0xffff
	TCP_MAX_SACK                      = 0x3
	TCP_MAX_WINSHIFT                  = 0xe
	TCP_MD5SIG                        = 0x4
	TCP_MSS                           = 0x200
	TCP_NODELAY                       = 0x1
	TCP_NOPUSH                        = 0x10
	TCP_SACKHOLE_LIMIT                = 0x80
	TCP_SACK_ENABLE                   = 0x8
	TCSAFLUSH                         = 0x2
	TIMER_ABSTIME                     = 0x1
	TIMER_RELTIME                     = 0x0
	TIOCCBRK                          = 0x2000747a
	TIOCCDTR                          = 0x20007478
	TIOCCHKVERAUTH                    = 0x2000741e
	TIOCCLRVERAUTH                    = 0x2000741d
	TIOCCONS                          = 0x80047462
	TIOCDRAIN                         = 0x2000745e
	TIOCEXCL                          = 0x2000740d
	TIOCEXT                           = 0x80047460
	TIOCFLAG_CLOCAL                   = 0x2
	TIOCFLAG_CRTSCTS                  = 0x4
	TIOCFLAG_MDMBUF                   = 0x8
	TIOCFLAG_PPS                      = 0x10
	TIOCFLAG_SOFTCAR                  = 0x1
	TIOCFLUSH                         = 0x80047410
	TIOCGETA                          = 0x402c7413
	TIOCGETD                          = 0x4004741a
	TIOCGFLAGS                        = 0x4004745d
	TIOCGPGRP                         = 0x40047477
	TIOCGSID                          = 0x40047463
	TIOCGTSTAMP                       = 0x4010745b
	TIOCGWINSZ                        = 0x40087468
	TIOCMBIC                          = 0x8004746b
	TIOCMBIS                          = 0x8004746c
	TIOCMGET                          = 0x4004746a
	TIOCMODG                          = 0x4004746a
	TIOCMODS                          = 0x8004746d
	TIOCMSET                          = 0x8004746d
	TIOCM_CAR                         = 0x40
	TIOCM_CD                          = 0x40
	TIOCM_CTS                         = 0x20
	TIOCM_DSR                         = 0x100
	TIOCM_DTR                         = 0x2
	TIOCM_LE                          = 0x1
	TIOCM_RI                          = 0x80
	TIOCM_RNG                         = 0x80
	TIOCM_RTS                         = 0x4
	TIOCM_SR                          = 0x10
	TIOCM_ST                          = 0x8
	TIOCNOTTY                         = 0x20007471
	TIOCNXCL                          = 0x2000740e
	TIOCOUTQ                          = 0x40047473
	TIOCPKT                           = 0x80047470
	TIOCPKT_DATA                      = 0x0
	TIOCPKT_DOSTOP                    = 0x20
	TIOCPKT_FLUSHREAD                 = 0x1
	TIOCPKT_FLUSHWRITE                = 0x2
	TIOCPKT_IOCTL                     = 0x40
	TIOCPKT_NOSTOP                    = 0x10
	TIOCPKT_START                     = 0x8
	TIOCPKT_STOP                      = 0x4
	TIOCREMOTE                        = 0x80047469
	TIOCSBRK                          = 0x2000747b
	TIOCSCTTY                         = 0x20007461
	TIOCSDTR                          = 0x20007479
	TIOCSETA                          = 0x802c7414
	TIOCSETAF                         = 0x802c7416
	TIOCSETAW                         = 0x802c7415
	TIOCSETD                          = 0x8004741b
	TIOCSETVERAUTH                    = 0x8004741c
	TIOCSFLAGS                        = 0x8004745c
	TIOCSIG                           = 0x8004745f
	TIOCSPGRP                         = 0x80047476
	TIOCSTART                         = 0x2000746e
	TIOCSTAT                          = 0x20007465
	TIOCSTOP                          = 0x2000746f
	TIOCSTSTAMP                       = 0x8008745a
	TIOCSWINSZ                        = 0x80087467
	TIOCUCNTL                         = 0x80047466
	TIOCUCNTL_CBRK                    = 0x7a
	TIOCUCNTL_SBRK                    = 0x7b
	TOSTOP                            = 0x400000
	UTIME_NOW                         = -0x2
	UTIME_OMIT                        = -0x1
	VDISCARD                          = 0xf
	VDSUSP                            = 0xb
	VEOF                              = 0x0
	VEOL                              = 0x1
	VEOL2                             = 0x2
	VERASE                            = 0x3
	VINTR                             = 0x8
	VKILL                             = 0x5
	VLNEXT                            = 0xe
	VMIN                              = 0x10
	VM_ANONMIN                        = 0x7
	VM_LOADAVG                        = 0x2
	VM_MALLOC_CONF                    = 0xc
	VM_MAXID                          = 0xd
	VM_MAXSLP                         = 0xa
	VM_METER                          = 0x1
	VM_NKMEMPAGES                     = 0x6
	VM_PSSTRINGS                      = 0x3
	VM_SWAPENCRYPT                    = 0x5
	VM_USPACE                         = 0xb
	VM_UVMEXP                         = 0x4
	VM_VNODEMIN                       = 0x9
	VM_VTEXTMIN                       = 0x8
	VQUIT                             = 0x9
	VREPRINT                          = 0x6
	VSTART                            = 0xc
	VSTATUS                           = 0x12
	VSTOP                             = 0xd
	VSUSP                             = 0xa
	VTIME                             = 0x11
	VWERASE                           = 0x4
	WALTSIG                           = 0x4
	WCONTINUED                        = 0x8
	WCOREFLAG                         = 0x80
	WNOHANG                           = 0x1
	WUNTRACED                         = 0x2
	XCASE                             = 0x1000000
)

// Errors
const (
	E2BIG           = syscall.Errno(0x7)
	EACCES          = syscall.Errno(0xd)
	EADDRINUSE      = syscall.Errno(0x30)
	EADDRNOTAVAIL   = syscall.Errno(0x31)
	EAFNOSUPPORT    = syscall.Errno(0x2f)
	EAGAIN          = syscall.Errno(0x23)
	EALREADY        = syscall.Errno(0x25)
	EAUTH           = syscall.Errno(0x50)
	EBADF           = syscall.Errno(0x9)
	EBADMSG         = syscall.Errno(0x5c)
	EBADRPC         = syscall.Errno(0x48)
	EBUSY           = syscall.Errno(0x10)
	ECANCELED       = syscall.Errno(0x58)
	ECHILD          = syscall.Errno(0xa)
	ECONNABORTED    = syscall.Errno(0x35)
	ECONNREFUSED    = syscall.Errno(0x3d)
	ECONNRESET      = syscall.Errno(0x36)
	EDEADLK         = syscall.Errno(0xb)
	EDESTADDRREQ    = syscall.Errno(0x27)
	EDOM            = syscall.Errno(0x21)
	EDQUOT          = syscall.Errno(0x45)
	EEXIST          = syscall.Errno(0x11)
	EFAULT          = syscall.Errno(0xe)
	EFBIG           = syscall.Errno(0x1b)
	EFTYPE          = syscall.Errno(0x4f)
	EHOSTDOWN       = syscall.Errno(0x40)
	EHOSTUNREACH    = syscall.Errno(0x41)
	EIDRM           = syscall.Errno(0x59)
	EILSEQ          = syscall.Errno(0x54)
	EINPROGRESS     = syscall.Errno(0x24)
	EINTR           = syscall.Errno(0x4)
	EINVAL          = syscall.Errno(0x16)
	EIO             = syscall.Errno(0x5)
	EIPSEC          = syscall.Errno(0x52)
	EISCONN         = syscall.Errno(0x38)
	EISDIR          = syscall.Errno(0x15)
	ELAST           = syscall.Errno(0x5f)
	ELOOP           = syscall.Errno(0x3e)
	EMEDIUMTYPE     = syscall.Errno(0x56)
	EMFILE          = syscall.Errno(0x18)
	EMLINK          = syscall.Errno(0x1f)
	EMSGSIZE        = syscall.Errno(0x28)
	ENAMETOOLONG    = syscall.Errno(0x3f)
	ENEEDAUTH       = syscall.Errno(0x51)
	ENETDOWN        = syscall.Errno(0x32)
	ENETRESET       = syscall.Errno(0x34)
	ENETUNREACH     = syscall.Errno(0x33)
	ENFILE          = syscall.Errno(0x17)
	ENOATTR         = syscall.Errno(0x53)
	ENOBUFS         = syscall.Errno(0x37)
	ENODEV          = syscall.Errno(0x13)
	ENOENT          = syscall.Errno(0x2)
	ENOEXEC         = syscall.Errno(0x8)
	ENOLCK          = syscall.Errno(0x4d)
	ENOMEDIUM       = syscall.Errno(0x55)
	ENOMEM          = syscall.Errno(0xc)
	ENOMSG          = syscall.Errno(0x5a)
	ENOPROTOOPT     = syscall.Errno(0x2a)
	ENOSPC          = syscall.Errno(0x1c)
	ENOSYS          = syscall.Errno(0x4e)
	ENOTBLK         = syscall.Errno(0xf)
	ENOTCONN        = syscall.Errno(0x39)
	ENOTDIR         = syscall.Errno(0x14)
	ENOTEMPTY       = syscall.Errno(0x42)
	ENOTRECOVERABLE = syscall.Errno(0x5d)
	ENOTSOCK        = syscall.Errno(0x26)
	ENOTSUP         = syscall.Errno(0x5b)
	ENOTTY          = syscall.Errno(0x19)
	ENXIO           = syscall.Errno(0x6)
	EOPNOTSUPP      = syscall.Errno(0x2d)
	EOVERFLOW       = syscall.Errno(0x57)
	EOWNERDEAD      = syscall.Errno(0x5e)
	EPERM           = syscall.Errno(0x1)
	EPFNOSUPPORT    = syscall.Errno(0x2e)
	EPIPE           = syscall.Errno(0x20)
	EPROCLIM        = syscall.Errno(0x43)
	EPROCUNAVAIL    = syscall.Errno(0x4c)
	EPROGMISMATCH   = syscall.Errno(0x4b)
	EPROGUNAVAIL    = syscall.Errno(0x4a)
	EPROTO          = syscall.Errno(0x5f)
	EPROTONOSUPPORT = syscall.Errno(0x2b)
	EPROTOTYPE      = syscall.Errno(0x29)
	ERANGE          = syscall.Errno(0x22)
	EREMOTE         = syscall.Errno(0x47)
	EROFS           = syscall.Errno(0x1e)
	ERPCMISMATCH    = syscall.Errno(0x49)
	ESHUTDOWN       = syscall.Errno(0x3a)
	ESOCKTNOSUPPORT = syscall.Errno(0x2c)
	ESPIPE          = syscall.Errno(0x1d)
	ESRCH           = syscall.Errno(0x3)
	ESTALE          = syscall.Errno(0x46)
	ETIMEDOUT       = syscall.Errno(0x3c)
	ETOOMANYREFS    = syscall.Errno(0x3b)
	ETXTBSY         = syscall.Errno(0x1a)
	EUSERS          = syscall.Errno(0x44)
	EWOULDBLOCK     = syscall.Errno(0x23)
	EXDEV           = syscall.Errno(0x12)
)

// Signals
const (
	SIGABRT   = syscall.Signal(0x6)
	SIGALRM   = syscall.Signal(0xe)
	SIGBUS    = syscall.Signal(0xa)
	SIGCHLD   = syscall.Signal(0x14)
	SIGCONT   = syscall.Signal(0x13)
	SIGEMT    = syscall.Signal(0x7)
	SIGFPE    = syscall.Signal(0x8)
	SIGHUP    = syscall.Signal(0x1)
	SIGILL    = syscall.Signal(0x4)
	SIGINFO   = syscall.Signal(0x1d)
	SIGINT    = syscall.Signal(0x2)
	SIGIO     = syscall.Signal(0x17)
	SIGIOT    = syscall.Signal(0x6)
	SIGKILL   = syscall.Signal(0x9)
	SIGPIPE   = syscall.Signal(0xd)
	SIGPROF   = syscall.Signal(0x1b)
	SIGQUIT   = syscall.Signal(0x3)
	SIGSEGV   = syscall.Signal(0xb)
	SIGSTOP   = syscall.Signal(0x11)
	SIGSYS    = syscall.Signal(0xc)
	SIGTERM   = syscall.Signal(0xf)
	SIGTHR    = syscall.Signal(0x20)
	SIGTRAP   = syscall.Signal(0x5)
	SIGTSTP   = syscall.Signal(0x12)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x10)
	SIGUSR1   = syscall.Signal(0x1e)
	SIGUSR2   = syscall.Signal(0x1f)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "device not configured"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EDEADLK", "resource deadlock avoided"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "cross-device link"},
	{19, "ENODEV", "operation not supported by device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "result too large"},
	{35, "EAGAIN", "resource temporarily unavailable"},
	{36, "EINPROGRESS", "operation now in progress"},
	{37, "EALREADY", "operation already in progress"},
	{38, "ENOTSOCK", "socket operation on non-socket"},
	{39, "EDESTADDRREQ", "destination address required"},
	{40, "EMSGSIZE", "message too long"},
	{41, "EPROTOTYPE", "protocol wrong type for socket"},
	{42, "ENOPROTOOPT", "protocol not available"},
	{43, "EPROTONOSUPPORT", "protocol not supported"},
	{44, "ESOCKTNOSUPPORT", "socket type not supported"},
	{45, "EOPNOTSUPP", "operation not supported"},
	{46, "EPFNOSUPPORT", "protocol family not supported"},
	{47, "EAFNOSUPPORT", "address family not supported by protocol family"},
	{48, "EADDRINUSE", "address already in use"},
	{49, "EADDRNOTAVAIL", "can't assign requested address"},
	{50, "ENETDOWN", "network is down"},
	{51, "ENETUNREACH", "network is unreachable"},
	{52, "ENETRESET", "network dropped connection on reset"},
	{53, "ECONNABORTED", "software caused connection abort"},
	{54, "ECONNRESET", "connection reset by peer"},
	{55, "ENOBUFS", "no buffer space available"},
	{56, "EISCONN", "socket is already connected"},
	{57, "ENOTCONN", "socket is not connected"},
	{58, "ESHUTDOWN", "can't send after socket shutdown"},
	{59, "ETOOMANYREFS", "too many references: can't splice"},
	{60, "ETIMEDOUT", "operation timed out"},
	{61, "ECONNREFUSED", "connection refused"},
	{62, "ELOOP", "too many levels of symbolic links"},
	{63, "ENAMETOOLONG", "file name too long"},
	{64, "EHOSTDOWN", "host is down"},
	{65, "EHOSTUNREACH", "no route to host"},
	{66, "ENOTEMPTY", "directory not empty"},
	{67, "EPROCLIM", "too many processes"},
	{68, "EUSERS", "too many users"},
	{69, "EDQUOT", "disk quota exceeded"},
	{70, "ESTALE", "stale NFS file handle"},
	{71, "EREMOTE", "too many levels of remote in path"},
	{72, "EBADRPC", "RPC struct is bad"},
	{73, "ERPCMISMATCH", "RPC version wrong"},
	{74, "EPROGUNAVAIL", "RPC program not available"},
	{75, "EPROGMISMATCH", "program version wrong"},
	{76, "EPROCUNAVAIL", "bad procedure for program"},
	{77, "ENOLCK", "no locks available"},
	{78, "ENOSYS", "function not implemented"},
	{79, "EFTYPE", "inappropriate file type or format"},
	{80, "EAUTH", "authentication error"},
	{81, "ENEEDAUTH", "need authenticator"},
	{82, "EIPSEC", "IPsec processing failure"},
	{83, "ENOATTR", "attribute not found"},
	{84, "EILSEQ", "illegal byte sequence"},
	{85, "ENOMEDIUM", "no medium found"},
	{86, "EMEDIUMTYPE", "wrong medium type"},
	{87, "EOVERFLOW", "value too large to be stored in data type"},
	{88, "ECANCELED", "operation canceled"},
	{89, "EIDRM", "identifier removed"},
	{90, "ENOMSG", "no message of desired type"},
	{91, "ENOTSUP", "not supported"},
	{92, "EBADMSG", "bad message"},
	{93, "ENOTRECOVERABLE", "state not recoverable"},
	{94, "EOWNERDEAD", "previous owner died"},
	{95, "ELAST", "protocol error"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/BPT trap"},
	{6, "SIGIOT", "abort trap"},
	{7, "SIGEMT", "EMT trap"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus error"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGSYS", "bad system call"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGURG", "urgent I/O condition"},
	{17, "SIGSTOP", "suspended (signal)"},
	{18, "SIGTSTP", "suspended"},
	{19, "SIGCONT", "continued"},
	{20, "SIGCHLD", "child exited"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGIO", "I/O possible"},
	{24, "SIGXCPU", "cputime limit exceeded"},
	{25, "SIGXFSZ", "filesize limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window size changes"},
	{29, "SIGINFO", "information request"},
	{30, "SIGUSR1", "user defined signal 1"},
	{31, "SIGUSR2", "user defined signal 2"},
	{32, "SIGTHR", "thread AST"},
	{28672, "SIGSTKSZ", "unknown signal"},
}
 07070100000E41000081A4000000000000000000000001645E367C00013A4D000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go // mkerrors.sh -m64
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build arm64 && openbsd
// +build arm64,openbsd

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -m64 _const.go

package unix

import "syscall"

const (
	AF_APPLETALK                      = 0x10
	AF_BLUETOOTH                      = 0x20
	AF_CCITT                          = 0xa
	AF_CHAOS                          = 0x5
	AF_CNT                            = 0x15
	AF_COIP                           = 0x14
	AF_DATAKIT                        = 0x9
	AF_DECnet                         = 0xc
	AF_DLI                            = 0xd
	AF_E164                           = 0x1a
	AF_ECMA                           = 0x8
	AF_ENCAP                          = 0x1c
	AF_HYLINK                         = 0xf
	AF_IMPLINK                        = 0x3
	AF_INET                           = 0x2
	AF_INET6                          = 0x18
	AF_IPX                            = 0x17
	AF_ISDN                           = 0x1a
	AF_ISO                            = 0x7
	AF_KEY                            = 0x1e
	AF_LAT                            = 0xe
	AF_LINK                           = 0x12
	AF_LOCAL                          = 0x1
	AF_MAX                            = 0x24
	AF_MPLS                           = 0x21
	AF_NATM                           = 0x1b
	AF_NS                             = 0x6
	AF_OSI                            = 0x7
	AF_PUP                            = 0x4
	AF_ROUTE                          = 0x11
	AF_SIP                            = 0x1d
	AF_SNA                            = 0xb
	AF_UNIX                           = 0x1
	AF_UNSPEC                         = 0x0
	ALTWERASE                         = 0x200
	ARPHRD_ETHER                      = 0x1
	ARPHRD_FRELAY                     = 0xf
	ARPHRD_IEEE1394                   = 0x18
	ARPHRD_IEEE802                    = 0x6
	B0                                = 0x0
	B110                              = 0x6e
	B115200                           = 0x1c200
	B1200                             = 0x4b0
	B134                              = 0x86
	B14400                            = 0x3840
	B150                              = 0x96
	B1800                             = 0x708
	B19200                            = 0x4b00
	B200                              = 0xc8
	B230400                           = 0x38400
	B2400                             = 0x960
	B28800                            = 0x7080
	B300                              = 0x12c
	B38400                            = 0x9600
	B4800                             = 0x12c0
	B50                               = 0x32
	B57600                            = 0xe100
	B600                              = 0x258
	B7200                             = 0x1c20
	B75                               = 0x4b
	B76800                            = 0x12c00
	B9600                             = 0x2580
	BIOCFLUSH                         = 0x20004268
	BIOCGBLEN                         = 0x40044266
	BIOCGDIRFILT                      = 0x4004427c
	BIOCGDLT                          = 0x4004426a
	BIOCGDLTLIST                      = 0xc010427b
	BIOCGETIF                         = 0x4020426b
	BIOCGFILDROP                      = 0x40044278
	BIOCGHDRCMPLT                     = 0x40044274
	BIOCGRSIG                         = 0x40044273
	BIOCGRTIMEOUT                     = 0x4010426e
	BIOCGSTATS                        = 0x4008426f
	BIOCIMMEDIATE                     = 0x80044270
	BIOCLOCK                          = 0x20004276
	BIOCPROMISC                       = 0x20004269
	BIOCSBLEN                         = 0xc0044266
	BIOCSDIRFILT                      = 0x8004427d
	BIOCSDLT                          = 0x8004427a
	BIOCSETF                          = 0x80104267
	BIOCSETIF                         = 0x8020426c
	BIOCSETWF                         = 0x80104277
	BIOCSFILDROP                      = 0x80044279
	BIOCSHDRCMPLT                     = 0x80044275
	BIOCSRSIG                         = 0x80044272
	BIOCSRTIMEOUT                     = 0x8010426d
	BIOCVERSION                       = 0x40044271
	BPF_A                             = 0x10
	BPF_ABS                           = 0x20
	BPF_ADD                           = 0x0
	BPF_ALIGNMENT                     = 0x4
	BPF_ALU                           = 0x4
	BPF_AND                           = 0x50
	BPF_B                             = 0x10
	BPF_DIRECTION_IN                  = 0x1
	BPF_DIRECTION_OUT                 = 0x2
	BPF_DIV                           = 0x30
	BPF_FILDROP_CAPTURE               = 0x1
	BPF_FILDROP_DROP                  = 0x2
	BPF_FILDROP_PASS                  = 0x0
	BPF_F_DIR_IN                      = 0x10
	BPF_F_DIR_MASK                    = 0x30
	BPF_F_DIR_OUT                     = 0x20
	BPF_F_DIR_SHIFT                   = 0x4
	BPF_F_FLOWID                      = 0x8
	BPF_F_PRI_MASK                    = 0x7
	BPF_H                             = 0x8
	BPF_IMM                           = 0x0
	BPF_IND                           = 0x40
	BPF_JA                            = 0x0
	BPF_JEQ                           = 0x10
	BPF_JGE                           = 0x30
	BPF_JGT                           = 0x20
	BPF_JMP                           = 0x5
	BPF_JSET                          = 0x40
	BPF_K                             = 0x0
	BPF_LD                            = 0x0
	BPF_LDX                           = 0x1
	BPF_LEN                           = 0x80
	BPF_LSH                           = 0x60
	BPF_MAJOR_VERSION                 = 0x1
	BPF_MAXBUFSIZE                    = 0x200000
	BPF_MAXINSNS                      = 0x200
	BPF_MEM                           = 0x60
	BPF_MEMWORDS                      = 0x10
	BPF_MINBUFSIZE                    = 0x20
	BPF_MINOR_VERSION                 = 0x1
	BPF_MISC                          = 0x7
	BPF_MSH                           = 0xa0
	BPF_MUL                           = 0x20
	BPF_NEG                           = 0x80
	BPF_OR                            = 0x40
	BPF_RELEASE                       = 0x30bb6
	BPF_RET                           = 0x6
	BPF_RND                           = 0xc0
	BPF_RSH                           = 0x70
	BPF_ST                            = 0x2
	BPF_STX                           = 0x3
	BPF_SUB                           = 0x10
	BPF_TAX                           = 0x0
	BPF_TXA                           = 0x80
	BPF_W                             = 0x0
	BPF_X                             = 0x8
	BRKINT                            = 0x2
	CFLUSH                            = 0xf
	CLOCAL                            = 0x8000
	CLOCK_BOOTTIME                    = 0x6
	CLOCK_MONOTONIC                   = 0x3
	CLOCK_PROCESS_CPUTIME_ID          = 0x2
	CLOCK_REALTIME                    = 0x0
	CLOCK_THREAD_CPUTIME_ID           = 0x4
	CLOCK_UPTIME                      = 0x5
	CPUSTATES                         = 0x6
	CP_IDLE                           = 0x5
	CP_INTR                           = 0x4
	CP_NICE                           = 0x1
	CP_SPIN                           = 0x3
	CP_SYS                            = 0x2
	CP_USER                           = 0x0
	CREAD                             = 0x800
	CRTSCTS                           = 0x10000
	CS5                               = 0x0
	CS6                               = 0x100
	CS7                               = 0x200
	CS8                               = 0x300
	CSIZE                             = 0x300
	CSTART                            = 0x11
	CSTATUS                           = 0xff
	CSTOP                             = 0x13
	CSTOPB                            = 0x400
	CSUSP                             = 0x1a
	CTL_HW                            = 0x6
	CTL_KERN                          = 0x1
	CTL_MAXNAME                       = 0xc
	CTL_NET                           = 0x4
	DIOCADDQUEUE                      = 0xc110445d
	DIOCADDRULE                       = 0xcd604404
	DIOCADDSTATE                      = 0xc1084425
	DIOCCHANGERULE                    = 0xcd60441a
	DIOCCLRIFFLAG                     = 0xc028445a
	DIOCCLRSRCNODES                   = 0x20004455
	DIOCCLRSTATES                     = 0xc0e04412
	DIOCCLRSTATUS                     = 0xc0284416
	DIOCGETLIMIT                      = 0xc0084427
	DIOCGETQSTATS                     = 0xc1204460
	DIOCGETQUEUE                      = 0xc110445f
	DIOCGETQUEUES                     = 0xc110445e
	DIOCGETRULE                       = 0xcd604407
	DIOCGETRULES                      = 0xcd604406
	DIOCGETRULESET                    = 0xc444443b
	DIOCGETRULESETS                   = 0xc444443a
	DIOCGETSRCNODES                   = 0xc0104454
	DIOCGETSTATE                      = 0xc1084413
	DIOCGETSTATES                     = 0xc0104419
	DIOCGETSTATUS                     = 0xc1e84415
	DIOCGETSYNFLWATS                  = 0xc0084463
	DIOCGETTIMEOUT                    = 0xc008441e
	DIOCIGETIFACES                    = 0xc0284457
	DIOCKILLSRCNODES                  = 0xc080445b
	DIOCKILLSTATES                    = 0xc0e04429
	DIOCNATLOOK                       = 0xc0504417
	DIOCOSFPADD                       = 0xc088444f
	DIOCOSFPFLUSH                     = 0x2000444e
	DIOCOSFPGET                       = 0xc0884450
	DIOCRADDADDRS                     = 0xc4504443
	DIOCRADDTABLES                    = 0xc450443d
	DIOCRCLRADDRS                     = 0xc4504442
	DIOCRCLRASTATS                    = 0xc4504448
	DIOCRCLRTABLES                    = 0xc450443c
	DIOCRCLRTSTATS                    = 0xc4504441
	DIOCRDELADDRS                     = 0xc4504444
	DIOCRDELTABLES                    = 0xc450443e
	DIOCRGETADDRS                     = 0xc4504446
	DIOCRGETASTATS                    = 0xc4504447
	DIOCRGETTABLES                    = 0xc450443f
	DIOCRGETTSTATS                    = 0xc4504440
	DIOCRINADEFINE                    = 0xc450444d
	DIOCRSETADDRS                     = 0xc4504445
	DIOCRSETTFLAGS                    = 0xc450444a
	DIOCRTSTADDRS                     = 0xc4504449
	DIOCSETDEBUG                      = 0xc0044418
	DIOCSETHOSTID                     = 0xc0044456
	DIOCSETIFFLAG                     = 0xc0284459
	DIOCSETLIMIT                      = 0xc0084428
	DIOCSETREASS                      = 0xc004445c
	DIOCSETSTATUSIF                   = 0xc0284414
	DIOCSETSYNCOOKIES                 = 0xc0014462
	DIOCSETSYNFLWATS                  = 0xc0084461
	DIOCSETTIMEOUT                    = 0xc008441d
	DIOCSTART                         = 0x20004401
	DIOCSTOP                          = 0x20004402
	DIOCXBEGIN                        = 0xc0104451
	DIOCXCOMMIT                       = 0xc0104452
	DIOCXROLLBACK                     = 0xc0104453
	DLT_ARCNET                        = 0x7
	DLT_ATM_RFC1483                   = 0xb
	DLT_AX25                          = 0x3
	DLT_CHAOS                         = 0x5
	DLT_C_HDLC                        = 0x68
	DLT_EN10MB                        = 0x1
	DLT_EN3MB                         = 0x2
	DLT_ENC                           = 0xd
	DLT_FDDI                          = 0xa
	DLT_IEEE802                       = 0x6
	DLT_IEEE802_11                    = 0x69
	DLT_IEEE802_11_RADIO              = 0x7f
	DLT_LOOP                          = 0xc
	DLT_MPLS                          = 0xdb
	DLT_NULL                          = 0x0
	DLT_OPENFLOW                      = 0x10b
	DLT_PFLOG                         = 0x75
	DLT_PFSYNC                        = 0x12
	DLT_PPP                           = 0x9
	DLT_PPP_BSDOS                     = 0x10
	DLT_PPP_ETHER                     = 0x33
	DLT_PPP_SERIAL                    = 0x32
	DLT_PRONET                        = 0x4
	DLT_RAW                           = 0xe
	DLT_SLIP                          = 0x8
	DLT_SLIP_BSDOS                    = 0xf
	DLT_USBPCAP                       = 0xf9
	DLT_USER0                         = 0x93
	DLT_USER1                         = 0x94
	DLT_USER10                        = 0x9d
	DLT_USER11                        = 0x9e
	DLT_USER12                        = 0x9f
	DLT_USER13                        = 0xa0
	DLT_USER14                        = 0xa1
	DLT_USER15                        = 0xa2
	DLT_USER2                         = 0x95
	DLT_USER3                         = 0x96
	DLT_USER4                         = 0x97
	DLT_USER5                         = 0x98
	DLT_USER6                         = 0x99
	DLT_USER7                         = 0x9a
	DLT_USER8                         = 0x9b
	DLT_USER9                         = 0x9c
	DT_BLK                            = 0x6
	DT_CHR                            = 0x2
	DT_DIR                            = 0x4
	DT_FIFO                           = 0x1
	DT_LNK                            = 0xa
	DT_REG                            = 0x8
	DT_SOCK                           = 0xc
	DT_UNKNOWN                        = 0x0
	ECHO                              = 0x8
	ECHOCTL                           = 0x40
	ECHOE                             = 0x2
	ECHOK                             = 0x4
	ECHOKE                            = 0x1
	ECHONL                            = 0x10
	ECHOPRT                           = 0x20
	EMT_TAGOVF                        = 0x1
	EMUL_ENABLED                      = 0x1
	EMUL_NATIVE                       = 0x2
	ENDRUNDISC                        = 0x9
	ETH64_8021_RSVD_MASK              = 0xfffffffffff0
	ETH64_8021_RSVD_PREFIX            = 0x180c2000000
	ETHERMIN                          = 0x2e
	ETHERMTU                          = 0x5dc
	ETHERTYPE_8023                    = 0x4
	ETHERTYPE_AARP                    = 0x80f3
	ETHERTYPE_ACCTON                  = 0x8390
	ETHERTYPE_AEONIC                  = 0x8036
	ETHERTYPE_ALPHA                   = 0x814a
	ETHERTYPE_AMBER                   = 0x6008
	ETHERTYPE_AMOEBA                  = 0x8145
	ETHERTYPE_AOE                     = 0x88a2
	ETHERTYPE_APOLLO                  = 0x80f7
	ETHERTYPE_APOLLODOMAIN            = 0x8019
	ETHERTYPE_APPLETALK               = 0x809b
	ETHERTYPE_APPLITEK                = 0x80c7
	ETHERTYPE_ARGONAUT                = 0x803a
	ETHERTYPE_ARP                     = 0x806
	ETHERTYPE_AT                      = 0x809b
	ETHERTYPE_ATALK                   = 0x809b
	ETHERTYPE_ATOMIC                  = 0x86df
	ETHERTYPE_ATT                     = 0x8069
	ETHERTYPE_ATTSTANFORD             = 0x8008
	ETHERTYPE_AUTOPHON                = 0x806a
	ETHERTYPE_AXIS                    = 0x8856
	ETHERTYPE_BCLOOP                  = 0x9003
	ETHERTYPE_BOFL                    = 0x8102
	ETHERTYPE_CABLETRON               = 0x7034
	ETHERTYPE_CHAOS                   = 0x804
	ETHERTYPE_COMDESIGN               = 0x806c
	ETHERTYPE_COMPUGRAPHIC            = 0x806d
	ETHERTYPE_COUNTERPOINT            = 0x8062
	ETHERTYPE_CRONUS                  = 0x8004
	ETHERTYPE_CRONUSVLN               = 0x8003
	ETHERTYPE_DCA                     = 0x1234
	ETHERTYPE_DDE                     = 0x807b
	ETHERTYPE_DEBNI                   = 0xaaaa
	ETHERTYPE_DECAM                   = 0x8048
	ETHERTYPE_DECCUST                 = 0x6006
	ETHERTYPE_DECDIAG                 = 0x6005
	ETHERTYPE_DECDNS                  = 0x803c
	ETHERTYPE_DECDTS                  = 0x803e
	ETHERTYPE_DECEXPER                = 0x6000
	ETHERTYPE_DECLAST                 = 0x8041
	ETHERTYPE_DECLTM                  = 0x803f
	ETHERTYPE_DECMUMPS                = 0x6009
	ETHERTYPE_DECNETBIOS              = 0x8040
	ETHERTYPE_DELTACON                = 0x86de
	ETHERTYPE_DIDDLE                  = 0x4321
	ETHERTYPE_DLOG1                   = 0x660
	ETHERTYPE_DLOG2                   = 0x661
	ETHERTYPE_DN                      = 0x6003
	ETHERTYPE_DOGFIGHT                = 0x1989
	ETHERTYPE_DSMD                    = 0x8039
	ETHERTYPE_EAPOL                   = 0x888e
	ETHERTYPE_ECMA                    = 0x803
	ETHERTYPE_ENCRYPT                 = 0x803d
	ETHERTYPE_ES                      = 0x805d
	ETHERTYPE_EXCELAN                 = 0x8010
	ETHERTYPE_EXPERDATA               = 0x8049
	ETHERTYPE_FLIP                    = 0x8146
	ETHERTYPE_FLOWCONTROL             = 0x8808
	ETHERTYPE_FRARP                   = 0x808
	ETHERTYPE_GENDYN                  = 0x8068
	ETHERTYPE_HAYES                   = 0x8130
	ETHERTYPE_HIPPI_FP                = 0x8180
	ETHERTYPE_HITACHI                 = 0x8820
	ETHERTYPE_HP                      = 0x8005
	ETHERTYPE_IEEEPUP                 = 0xa00
	ETHERTYPE_IEEEPUPAT               = 0xa01
	ETHERTYPE_IMLBL                   = 0x4c42
	ETHERTYPE_IMLBLDIAG               = 0x424c
	ETHERTYPE_IP                      = 0x800
	ETHERTYPE_IPAS                    = 0x876c
	ETHERTYPE_IPV6                    = 0x86dd
	ETHERTYPE_IPX                     = 0x8137
	ETHERTYPE_IPXNEW                  = 0x8037
	ETHERTYPE_KALPANA                 = 0x8582
	ETHERTYPE_LANBRIDGE               = 0x8038
	ETHERTYPE_LANPROBE                = 0x8888
	ETHERTYPE_LAT                     = 0x6004
	ETHERTYPE_LBACK                   = 0x9000
	ETHERTYPE_LITTLE                  = 0x8060
	ETHERTYPE_LLDP                    = 0x88cc
	ETHERTYPE_LOGICRAFT               = 0x8148
	ETHERTYPE_LOOPBACK                = 0x9000
	ETHERTYPE_MACSEC                  = 0x88e5
	ETHERTYPE_MATRA                   = 0x807a
	ETHERTYPE_MAX                     = 0xffff
	ETHERTYPE_MERIT                   = 0x807c
	ETHERTYPE_MICP                    = 0x873a
	ETHERTYPE_MOPDL                   = 0x6001
	ETHERTYPE_MOPRC                   = 0x6002
	ETHERTYPE_MOTOROLA                = 0x818d
	ETHERTYPE_MPLS                    = 0x8847
	ETHERTYPE_MPLS_MCAST              = 0x8848
	ETHERTYPE_MUMPS                   = 0x813f
	ETHERTYPE_NBPCC                   = 0x3c04
	ETHERTYPE_NBPCLAIM                = 0x3c09
	ETHERTYPE_NBPCLREQ                = 0x3c05
	ETHERTYPE_NBPCLRSP                = 0x3c06
	ETHERTYPE_NBPCREQ                 = 0x3c02
	ETHERTYPE_NBPCRSP                 = 0x3c03
	ETHERTYPE_NBPDG                   = 0x3c07
	ETHERTYPE_NBPDGB                  = 0x3c08
	ETHERTYPE_NBPDLTE                 = 0x3c0a
	ETHERTYPE_NBPRAR                  = 0x3c0c
	ETHERTYPE_NBPRAS                  = 0x3c0b
	ETHERTYPE_NBPRST                  = 0x3c0d
	ETHERTYPE_NBPSCD                  = 0x3c01
	ETHERTYPE_NBPVCD                  = 0x3c00
	ETHERTYPE_NBS                     = 0x802
	ETHERTYPE_NCD                     = 0x8149
	ETHERTYPE_NESTAR                  = 0x8006
	ETHERTYPE_NETBEUI                 = 0x8191
	ETHERTYPE_NHRP                    = 0x2001
	ETHERTYPE_NOVELL                  = 0x8138
	ETHERTYPE_NS                      = 0x600
	ETHERTYPE_NSAT                    = 0x601
	ETHERTYPE_NSCOMPAT                = 0x807
	ETHERTYPE_NSH                     = 0x984f
	ETHERTYPE_NTRAILER                = 0x10
	ETHERTYPE_OS9                     = 0x7007
	ETHERTYPE_OS9NET                  = 0x7009
	ETHERTYPE_PACER                   = 0x80c6
	ETHERTYPE_PBB                     = 0x88e7
	ETHERTYPE_PCS                     = 0x4242
	ETHERTYPE_PLANNING                = 0x8044
	ETHERTYPE_PPP                     = 0x880b
	ETHERTYPE_PPPOE                   = 0x8864
	ETHERTYPE_PPPOEDISC               = 0x8863
	ETHERTYPE_PRIMENTS                = 0x7031
	ETHERTYPE_PUP                     = 0x200
	ETHERTYPE_PUPAT                   = 0x200
	ETHERTYPE_QINQ                    = 0x88a8
	ETHERTYPE_RACAL                   = 0x7030
	ETHERTYPE_RATIONAL                = 0x8150
	ETHERTYPE_RAWFR                   = 0x6559
	ETHERTYPE_RCL                     = 0x1995
	ETHERTYPE_RDP                     = 0x8739
	ETHERTYPE_RETIX                   = 0x80f2
	ETHERTYPE_REVARP                  = 0x8035
	ETHERTYPE_SCA                     = 0x6007
	ETHERTYPE_SECTRA                  = 0x86db
	ETHERTYPE_SECUREDATA              = 0x876d
	ETHERTYPE_SGITW                   = 0x817e
	ETHERTYPE_SG_BOUNCE               = 0x8016
	ETHERTYPE_SG_DIAG                 = 0x8013
	ETHERTYPE_SG_NETGAMES             = 0x8014
	ETHERTYPE_SG_RESV                 = 0x8015
	ETHERTYPE_SIMNET                  = 0x5208
	ETHERTYPE_SLOW                    = 0x8809
	ETHERTYPE_SNA                     = 0x80d5
	ETHERTYPE_SNMP                    = 0x814c
	ETHERTYPE_SONIX                   = 0xfaf5
	ETHERTYPE_SPIDER                  = 0x809f
	ETHERTYPE_SPRITE                  = 0x500
	ETHERTYPE_STP                     = 0x8181
	ETHERTYPE_TALARIS                 = 0x812b
	ETHERTYPE_TALARISMC               = 0x852b
	ETHERTYPE_TCPCOMP                 = 0x876b
	ETHERTYPE_TCPSM                   = 0x9002
	ETHERTYPE_TEC                     = 0x814f
	ETHERTYPE_TIGAN                   = 0x802f
	ETHERTYPE_TRAIL                   = 0x1000
	ETHERTYPE_TRANSETHER              = 0x6558
	ETHERTYPE_TYMSHARE                = 0x802e
	ETHERTYPE_UBBST                   = 0x7005
	ETHERTYPE_UBDEBUG                 = 0x900
	ETHERTYPE_UBDIAGLOOP              = 0x7002
	ETHERTYPE_UBDL                    = 0x7000
	ETHERTYPE_UBNIU                   = 0x7001
	ETHERTYPE_UBNMC                   = 0x7003
	ETHERTYPE_VALID                   = 0x1600
	ETHERTYPE_VARIAN                  = 0x80dd
	ETHERTYPE_VAXELN                  = 0x803b
	ETHERTYPE_VEECO                   = 0x8067
	ETHERTYPE_VEXP                    = 0x805b
	ETHERTYPE_VGLAB                   = 0x8131
	ETHERTYPE_VINES                   = 0xbad
	ETHERTYPE_VINESECHO               = 0xbaf
	ETHERTYPE_VINESLOOP               = 0xbae
	ETHERTYPE_VITAL                   = 0xff00
	ETHERTYPE_VLAN                    = 0x8100
	ETHERTYPE_VLTLMAN                 = 0x8080
	ETHERTYPE_VPROD                   = 0x805c
	ETHERTYPE_VURESERVED              = 0x8147
	ETHERTYPE_WATERLOO                = 0x8130
	ETHERTYPE_WELLFLEET               = 0x8103
	ETHERTYPE_X25                     = 0x805
	ETHERTYPE_X75                     = 0x801
	ETHERTYPE_XNSSM                   = 0x9001
	ETHERTYPE_XTP                     = 0x817d
	ETHER_ADDR_LEN                    = 0x6
	ETHER_ALIGN                       = 0x2
	ETHER_CRC_LEN                     = 0x4
	ETHER_CRC_POLY_BE                 = 0x4c11db6
	ETHER_CRC_POLY_LE                 = 0xedb88320
	ETHER_HDR_LEN                     = 0xe
	ETHER_MAX_DIX_LEN                 = 0x600
	ETHER_MAX_HARDMTU_LEN             = 0xff9b
	ETHER_MAX_LEN                     = 0x5ee
	ETHER_MIN_LEN                     = 0x40
	ETHER_TYPE_LEN                    = 0x2
	ETHER_VLAN_ENCAP_LEN              = 0x4
	EVFILT_AIO                        = -0x3
	EVFILT_DEVICE                     = -0x8
	EVFILT_EXCEPT                     = -0x9
	EVFILT_PROC                       = -0x5
	EVFILT_READ                       = -0x1
	EVFILT_SIGNAL                     = -0x6
	EVFILT_SYSCOUNT                   = 0x9
	EVFILT_TIMER                      = -0x7
	EVFILT_VNODE                      = -0x4
	EVFILT_WRITE                      = -0x2
	EVL_ENCAPLEN                      = 0x4
	EVL_PRIO_BITS                     = 0xd
	EVL_PRIO_MAX                      = 0x7
	EVL_VLID_MASK                     = 0xfff
	EVL_VLID_MAX                      = 0xffe
	EVL_VLID_MIN                      = 0x1
	EVL_VLID_NULL                     = 0x0
	EV_ADD                            = 0x1
	EV_CLEAR                          = 0x20
	EV_DELETE                         = 0x2
	EV_DISABLE                        = 0x8
	EV_DISPATCH                       = 0x80
	EV_ENABLE                         = 0x4
	EV_EOF                            = 0x8000
	EV_ERROR                          = 0x4000
	EV_FLAG1                          = 0x2000
	EV_ONESHOT                        = 0x10
	EV_RECEIPT                        = 0x40
	EV_SYSFLAGS                       = 0xf800
	EXTA                              = 0x4b00
	EXTB                              = 0x9600
	EXTPROC                           = 0x800
	FD_CLOEXEC                        = 0x1
	FD_SETSIZE                        = 0x400
	FLUSHO                            = 0x800000
	F_DUPFD                           = 0x0
	F_DUPFD_CLOEXEC                   = 0xa
	F_GETFD                           = 0x1
	F_GETFL                           = 0x3
	F_GETLK                           = 0x7
	F_GETOWN                          = 0x5
	F_ISATTY                          = 0xb
	F_OK                              = 0x0
	F_RDLCK                           = 0x1
	F_SETFD                           = 0x2
	F_SETFL                           = 0x4
	F_SETLK                           = 0x8
	F_SETLKW                          = 0x9
	F_SETOWN                          = 0x6
	F_UNLCK                           = 0x2
	F_WRLCK                           = 0x3
	HUPCL                             = 0x4000
	HW_MACHINE                        = 0x1
	ICANON                            = 0x100
	ICMP6_FILTER                      = 0x12
	ICRNL                             = 0x100
	IEXTEN                            = 0x400
	IFAN_ARRIVAL                      = 0x0
	IFAN_DEPARTURE                    = 0x1
	IFF_ALLMULTI                      = 0x200
	IFF_BROADCAST                     = 0x2
	IFF_CANTCHANGE                    = 0x8e52
	IFF_DEBUG                         = 0x4
	IFF_LINK0                         = 0x1000
	IFF_LINK1                         = 0x2000
	IFF_LINK2                         = 0x4000
	IFF_LOOPBACK                      = 0x8
	IFF_MULTICAST                     = 0x8000
	IFF_NOARP                         = 0x80
	IFF_OACTIVE                       = 0x400
	IFF_POINTOPOINT                   = 0x10
	IFF_PROMISC                       = 0x100
	IFF_RUNNING                       = 0x40
	IFF_SIMPLEX                       = 0x800
	IFF_STATICARP                     = 0x20
	IFF_UP                            = 0x1
	IFNAMSIZ                          = 0x10
	IFT_1822                          = 0x2
	IFT_A12MPPSWITCH                  = 0x82
	IFT_AAL2                          = 0xbb
	IFT_AAL5                          = 0x31
	IFT_ADSL                          = 0x5e
	IFT_AFLANE8023                    = 0x3b
	IFT_AFLANE8025                    = 0x3c
	IFT_ARAP                          = 0x58
	IFT_ARCNET                        = 0x23
	IFT_ARCNETPLUS                    = 0x24
	IFT_ASYNC                         = 0x54
	IFT_ATM                           = 0x25
	IFT_ATMDXI                        = 0x69
	IFT_ATMFUNI                       = 0x6a
	IFT_ATMIMA                        = 0x6b
	IFT_ATMLOGICAL                    = 0x50
	IFT_ATMRADIO                      = 0xbd
	IFT_ATMSUBINTERFACE               = 0x86
	IFT_ATMVCIENDPT                   = 0xc2
	IFT_ATMVIRTUAL                    = 0x95
	IFT_BGPPOLICYACCOUNTING           = 0xa2
	IFT_BLUETOOTH                     = 0xf8
	IFT_BRIDGE                        = 0xd1
	IFT_BSC                           = 0x53
	IFT_CARP                          = 0xf7
	IFT_CCTEMUL                       = 0x3d
	IFT_CEPT                          = 0x13
	IFT_CES                           = 0x85
	IFT_CHANNEL                       = 0x46
	IFT_CNR                           = 0x55
	IFT_COFFEE                        = 0x84
	IFT_COMPOSITELINK                 = 0x9b
	IFT_DCN                           = 0x8d
	IFT_DIGITALPOWERLINE              = 0x8a
	IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba
	IFT_DLSW                          = 0x4a
	IFT_DOCSCABLEDOWNSTREAM           = 0x80
	IFT_DOCSCABLEMACLAYER             = 0x7f
	IFT_DOCSCABLEUPSTREAM             = 0x81
	IFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd
	IFT_DS0                           = 0x51
	IFT_DS0BUNDLE                     = 0x52
	IFT_DS1FDL                        = 0xaa
	IFT_DS3                           = 0x1e
	IFT_DTM                           = 0x8c
	IFT_DUMMY                         = 0xf1
	IFT_DVBASILN                      = 0xac
	IFT_DVBASIOUT                     = 0xad
	IFT_DVBRCCDOWNSTREAM              = 0x93
	IFT_DVBRCCMACLAYER                = 0x92
	IFT_DVBRCCUPSTREAM                = 0x94
	IFT_ECONET                        = 0xce
	IFT_ENC                           = 0xf4
	IFT_EON                           = 0x19
	IFT_EPLRS                         = 0x57
	IFT_ESCON                         = 0x49
	IFT_ETHER                         = 0x6
	IFT_FAITH                         = 0xf3
	IFT_FAST                          = 0x7d
	IFT_FASTETHER                     = 0x3e
	IFT_FASTETHERFX                   = 0x45
	IFT_FDDI                          = 0xf
	IFT_FIBRECHANNEL                  = 0x38
	IFT_FRAMERELAYINTERCONNECT        = 0x3a
	IFT_FRAMERELAYMPI                 = 0x5c
	IFT_FRDLCIENDPT                   = 0xc1
	IFT_FRELAY                        = 0x20
	IFT_FRELAYDCE                     = 0x2c
	IFT_FRF16MFRBUNDLE                = 0xa3
	IFT_FRFORWARD                     = 0x9e
	IFT_G703AT2MB                     = 0x43
	IFT_G703AT64K                     = 0x42
	IFT_GIF                           = 0xf0
	IFT_GIGABITETHERNET               = 0x75
	IFT_GR303IDT                      = 0xb2
	IFT_GR303RDT                      = 0xb1
	IFT_H323GATEKEEPER                = 0xa4
	IFT_H323PROXY                     = 0xa5
	IFT_HDH1822                       = 0x3
	IFT_HDLC                          = 0x76
	IFT_HDSL2                         = 0xa8
	IFT_HIPERLAN2                     = 0xb7
	IFT_HIPPI                         = 0x2f
	IFT_HIPPIINTERFACE                = 0x39
	IFT_HOSTPAD                       = 0x5a
	IFT_HSSI                          = 0x2e
	IFT_HY                            = 0xe
	IFT_IBM370PARCHAN                 = 0x48
	IFT_IDSL                          = 0x9a
	IFT_IEEE1394                      = 0x90
	IFT_IEEE80211                     = 0x47
	IFT_IEEE80212                     = 0x37
	IFT_IEEE8023ADLAG                 = 0xa1
	IFT_IFGSN                         = 0x91
	IFT_IMT                           = 0xbe
	IFT_INFINIBAND                    = 0xc7
	IFT_INTERLEAVE                    = 0x7c
	IFT_IP                            = 0x7e
	IFT_IPFORWARD                     = 0x8e
	IFT_IPOVERATM                     = 0x72
	IFT_IPOVERCDLC                    = 0x6d
	IFT_IPOVERCLAW                    = 0x6e
	IFT_IPSWITCH                      = 0x4e
	IFT_ISDN                          = 0x3f
	IFT_ISDNBASIC                     = 0x14
	IFT_ISDNPRIMARY                   = 0x15
	IFT_ISDNS                         = 0x4b
	IFT_ISDNU                         = 0x4c
	IFT_ISO88022LLC                   = 0x29
	IFT_ISO88023                      = 0x7
	IFT_ISO88024                      = 0x8
	IFT_ISO88025                      = 0x9
	IFT_ISO88025CRFPINT               = 0x62
	IFT_ISO88025DTR                   = 0x56
	IFT_ISO88025FIBER                 = 0x73
	IFT_ISO88026                      = 0xa
	IFT_ISUP                          = 0xb3
	IFT_L2VLAN                        = 0x87
	IFT_L3IPVLAN                      = 0x88
	IFT_L3IPXVLAN                     = 0x89
	IFT_LAPB                          = 0x10
	IFT_LAPD                          = 0x4d
	IFT_LAPF                          = 0x77
	IFT_LINEGROUP                     = 0xd2
	IFT_LOCALTALK                     = 0x2a
	IFT_LOOP                          = 0x18
	IFT_MBIM                          = 0xfa
	IFT_MEDIAMAILOVERIP               = 0x8b
	IFT_MFSIGLINK                     = 0xa7
	IFT_MIOX25                        = 0x26
	IFT_MODEM                         = 0x30
	IFT_MPC                           = 0x71
	IFT_MPLS                          = 0xa6
	IFT_MPLSTUNNEL                    = 0x96
	IFT_MSDSL                         = 0x8f
	IFT_MVL                           = 0xbf
	IFT_MYRINET                       = 0x63
	IFT_NFAS                          = 0xaf
	IFT_NSIP                          = 0x1b
	IFT_OPTICALCHANNEL                = 0xc3
	IFT_OPTICALTRANSPORT              = 0xc4
	IFT_OTHER                         = 0x1
	IFT_P10                           = 0xc
	IFT_P80                           = 0xd
	IFT_PARA                          = 0x22
	IFT_PFLOG                         = 0xf5
	IFT_PFLOW                         = 0xf9
	IFT_PFSYNC                        = 0xf6
	IFT_PLC                           = 0xae
	IFT_PON155                        = 0xcf
	IFT_PON622                        = 0xd0
	IFT_POS                           = 0xab
	IFT_PPP                           = 0x17
	IFT_PPPMULTILINKBUNDLE            = 0x6c
	IFT_PROPATM                       = 0xc5
	IFT_PROPBWAP2MP                   = 0xb8
	IFT_PROPCNLS                      = 0x59
	IFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5
	IFT_PROPDOCSWIRELESSMACLAYER      = 0xb4
	IFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6
	IFT_PROPMUX                       = 0x36
	IFT_PROPVIRTUAL                   = 0x35
	IFT_PROPWIRELESSP2P               = 0x9d
	IFT_PTPSERIAL                     = 0x16
	IFT_PVC                           = 0xf2
	IFT_Q2931                         = 0xc9
	IFT_QLLC                          = 0x44
	IFT_RADIOMAC                      = 0xbc
	IFT_RADSL                         = 0x5f
	IFT_REACHDSL                      = 0xc0
	IFT_RFC1483                       = 0x9f
	IFT_RS232                         = 0x21
	IFT_RSRB                          = 0x4f
	IFT_SDLC                          = 0x11
	IFT_SDSL                          = 0x60
	IFT_SHDSL                         = 0xa9
	IFT_SIP                           = 0x1f
	IFT_SIPSIG                        = 0xcc
	IFT_SIPTG                         = 0xcb
	IFT_SLIP                          = 0x1c
	IFT_SMDSDXI                       = 0x2b
	IFT_SMDSICIP                      = 0x34
	IFT_SONET                         = 0x27
	IFT_SONETOVERHEADCHANNEL          = 0xb9
	IFT_SONETPATH                     = 0x32
	IFT_SONETVT                       = 0x33
	IFT_SRP                           = 0x97
	IFT_SS7SIGLINK                    = 0x9c
	IFT_STACKTOSTACK                  = 0x6f
	IFT_STARLAN                       = 0xb
	IFT_T1                            = 0x12
	IFT_TDLC                          = 0x74
	IFT_TELINK                        = 0xc8
	IFT_TERMPAD                       = 0x5b
	IFT_TR008                         = 0xb0
	IFT_TRANSPHDLC                    = 0x7b
	IFT_TUNNEL                        = 0x83
	IFT_ULTRA                         = 0x1d
	IFT_USB                           = 0xa0
	IFT_V11                           = 0x40
	IFT_V35                           = 0x2d
	IFT_V36                           = 0x41
	IFT_V37                           = 0x78
	IFT_VDSL                          = 0x61
	IFT_VIRTUALIPADDRESS              = 0x70
	IFT_VIRTUALTG                     = 0xca
	IFT_VOICEDID                      = 0xd5
	IFT_VOICEEM                       = 0x64
	IFT_VOICEEMFGD                    = 0xd3
	IFT_VOICEENCAP                    = 0x67
	IFT_VOICEFGDEANA                  = 0xd4
	IFT_VOICEFXO                      = 0x65
	IFT_VOICEFXS                      = 0x66
	IFT_VOICEOVERATM                  = 0x98
	IFT_VOICEOVERCABLE                = 0xc6
	IFT_VOICEOVERFRAMERELAY           = 0x99
	IFT_VOICEOVERIP                   = 0x68
	IFT_WIREGUARD                     = 0xfb
	IFT_X213                          = 0x5d
	IFT_X25                           = 0x5
	IFT_X25DDN                        = 0x4
	IFT_X25HUNTGROUP                  = 0x7a
	IFT_X25MLP                        = 0x79
	IFT_X25PLE                        = 0x28
	IFT_XETHER                        = 0x1a
	IGNBRK                            = 0x1
	IGNCR                             = 0x80
	IGNPAR                            = 0x4
	IMAXBEL                           = 0x2000
	INLCR                             = 0x40
	INPCK                             = 0x10
	IN_CLASSA_HOST                    = 0xffffff
	IN_CLASSA_MAX                     = 0x80
	IN_CLASSA_NET                     = 0xff000000
	IN_CLASSA_NSHIFT                  = 0x18
	IN_CLASSB_HOST                    = 0xffff
	IN_CLASSB_MAX                     = 0x10000
	IN_CLASSB_NET                     = 0xffff0000
	IN_CLASSB_NSHIFT                  = 0x10
	IN_CLASSC_HOST                    = 0xff
	IN_CLASSC_NET                     = 0xffffff00
	IN_CLASSC_NSHIFT                  = 0x8
	IN_CLASSD_HOST                    = 0xfffffff
	IN_CLASSD_NET                     = 0xf0000000
	IN_CLASSD_NSHIFT                  = 0x1c
	IN_LOOPBACKNET                    = 0x7f
	IN_RFC3021_HOST                   = 0x1
	IN_RFC3021_NET                    = 0xfffffffe
	IN_RFC3021_NSHIFT                 = 0x1f
	IPPROTO_AH                        = 0x33
	IPPROTO_CARP                      = 0x70
	IPPROTO_DIVERT                    = 0x102
	IPPROTO_DONE                      = 0x101
	IPPROTO_DSTOPTS                   = 0x3c
	IPPROTO_EGP                       = 0x8
	IPPROTO_ENCAP                     = 0x62
	IPPROTO_EON                       = 0x50
	IPPROTO_ESP                       = 0x32
	IPPROTO_ETHERIP                   = 0x61
	IPPROTO_FRAGMENT                  = 0x2c
	IPPROTO_GGP                       = 0x3
	IPPROTO_GRE                       = 0x2f
	IPPROTO_HOPOPTS                   = 0x0
	IPPROTO_ICMP                      = 0x1
	IPPROTO_ICMPV6                    = 0x3a
	IPPROTO_IDP                       = 0x16
	IPPROTO_IGMP                      = 0x2
	IPPROTO_IP                        = 0x0
	IPPROTO_IPCOMP                    = 0x6c
	IPPROTO_IPIP                      = 0x4
	IPPROTO_IPV4                      = 0x4
	IPPROTO_IPV6                      = 0x29
	IPPROTO_MAX                       = 0x100
	IPPROTO_MAXID                     = 0x103
	IPPROTO_MOBILE                    = 0x37
	IPPROTO_MPLS                      = 0x89
	IPPROTO_NONE                      = 0x3b
	IPPROTO_PFSYNC                    = 0xf0
	IPPROTO_PIM                       = 0x67
	IPPROTO_PUP                       = 0xc
	IPPROTO_RAW                       = 0xff
	IPPROTO_ROUTING                   = 0x2b
	IPPROTO_RSVP                      = 0x2e
	IPPROTO_SCTP                      = 0x84
	IPPROTO_TCP                       = 0x6
	IPPROTO_TP                        = 0x1d
	IPPROTO_UDP                       = 0x11
	IPPROTO_UDPLITE                   = 0x88
	IPV6_AUTH_LEVEL                   = 0x35
	IPV6_AUTOFLOWLABEL                = 0x3b
	IPV6_CHECKSUM                     = 0x1a
	IPV6_DEFAULT_MULTICAST_HOPS       = 0x1
	IPV6_DEFAULT_MULTICAST_LOOP       = 0x1
	IPV6_DEFHLIM                      = 0x40
	IPV6_DONTFRAG                     = 0x3e
	IPV6_DSTOPTS                      = 0x32
	IPV6_ESP_NETWORK_LEVEL            = 0x37
	IPV6_ESP_TRANS_LEVEL              = 0x36
	IPV6_FAITH                        = 0x1d
	IPV6_FLOWINFO_MASK                = 0xffffff0f
	IPV6_FLOWLABEL_MASK               = 0xffff0f00
	IPV6_FRAGTTL                      = 0x78
	IPV6_HLIMDEC                      = 0x1
	IPV6_HOPLIMIT                     = 0x2f
	IPV6_HOPOPTS                      = 0x31
	IPV6_IPCOMP_LEVEL                 = 0x3c
	IPV6_JOIN_GROUP                   = 0xc
	IPV6_LEAVE_GROUP                  = 0xd
	IPV6_MAXHLIM                      = 0xff
	IPV6_MAXPACKET                    = 0xffff
	IPV6_MINHOPCOUNT                  = 0x41
	IPV6_MMTU                         = 0x500
	IPV6_MULTICAST_HOPS               = 0xa
	IPV6_MULTICAST_IF                 = 0x9
	IPV6_MULTICAST_LOOP               = 0xb
	IPV6_NEXTHOP                      = 0x30
	IPV6_OPTIONS                      = 0x1
	IPV6_PATHMTU                      = 0x2c
	IPV6_PIPEX                        = 0x3f
	IPV6_PKTINFO                      = 0x2e
	IPV6_PORTRANGE                    = 0xe
	IPV6_PORTRANGE_DEFAULT            = 0x0
	IPV6_PORTRANGE_HIGH               = 0x1
	IPV6_PORTRANGE_LOW                = 0x2
	IPV6_RECVDSTOPTS                  = 0x28
	IPV6_RECVDSTPORT                  = 0x40
	IPV6_RECVHOPLIMIT                 = 0x25
	IPV6_RECVHOPOPTS                  = 0x27
	IPV6_RECVPATHMTU                  = 0x2b
	IPV6_RECVPKTINFO                  = 0x24
	IPV6_RECVRTHDR                    = 0x26
	IPV6_RECVTCLASS                   = 0x39
	IPV6_RTABLE                       = 0x1021
	IPV6_RTHDR                        = 0x33
	IPV6_RTHDRDSTOPTS                 = 0x23
	IPV6_RTHDR_LOOSE                  = 0x0
	IPV6_RTHDR_STRICT                 = 0x1
	IPV6_RTHDR_TYPE_0                 = 0x0
	IPV6_SOCKOPT_RESERVED1            = 0x3
	IPV6_TCLASS                       = 0x3d
	IPV6_UNICAST_HOPS                 = 0x4
	IPV6_USE_MIN_MTU                  = 0x2a
	IPV6_V6ONLY                       = 0x1b
	IPV6_VERSION                      = 0x60
	IPV6_VERSION_MASK                 = 0xf0
	IP_ADD_MEMBERSHIP                 = 0xc
	IP_AUTH_LEVEL                     = 0x14
	IP_DEFAULT_MULTICAST_LOOP         = 0x1
	IP_DEFAULT_MULTICAST_TTL          = 0x1
	IP_DF                             = 0x4000
	IP_DROP_MEMBERSHIP                = 0xd
	IP_ESP_NETWORK_LEVEL              = 0x16
	IP_ESP_TRANS_LEVEL                = 0x15
	IP_HDRINCL                        = 0x2
	IP_IPCOMP_LEVEL                   = 0x1d
	IP_IPDEFTTL                       = 0x25
	IP_IPSECFLOWINFO                  = 0x24
	IP_IPSEC_LOCAL_AUTH               = 0x1b
	IP_IPSEC_LOCAL_CRED               = 0x19
	IP_IPSEC_LOCAL_ID                 = 0x17
	IP_IPSEC_REMOTE_AUTH              = 0x1c
	IP_IPSEC_REMOTE_CRED              = 0x1a
	IP_IPSEC_REMOTE_ID                = 0x18
	IP_MAXPACKET                      = 0xffff
	IP_MAX_MEMBERSHIPS                = 0xfff
	IP_MF                             = 0x2000
	IP_MINTTL                         = 0x20
	IP_MIN_MEMBERSHIPS                = 0xf
	IP_MSS                            = 0x240
	IP_MULTICAST_IF                   = 0x9
	IP_MULTICAST_LOOP                 = 0xb
	IP_MULTICAST_TTL                  = 0xa
	IP_OFFMASK                        = 0x1fff
	IP_OPTIONS                        = 0x1
	IP_PIPEX                          = 0x22
	IP_PORTRANGE                      = 0x13
	IP_PORTRANGE_DEFAULT              = 0x0
	IP_PORTRANGE_HIGH                 = 0x1
	IP_PORTRANGE_LOW                  = 0x2
	IP_RECVDSTADDR                    = 0x7
	IP_RECVDSTPORT                    = 0x21
	IP_RECVIF                         = 0x1e
	IP_RECVOPTS                       = 0x5
	IP_RECVRETOPTS                    = 0x6
	IP_RECVRTABLE                     = 0x23
	IP_RECVTTL                        = 0x1f
	IP_RETOPTS                        = 0x8
	IP_RF                             = 0x8000
	IP_RTABLE                         = 0x1021
	IP_SENDSRCADDR                    = 0x7
	IP_TOS                            = 0x3
	IP_TTL                            = 0x4
	ISIG                              = 0x80
	ISTRIP                            = 0x20
	ITIMER_PROF                       = 0x2
	ITIMER_REAL                       = 0x0
	ITIMER_VIRTUAL                    = 0x1
	IUCLC                             = 0x1000
	IXANY                             = 0x800
	IXOFF                             = 0x400
	IXON                              = 0x200
	KERN_HOSTNAME                     = 0xa
	KERN_OSRELEASE                    = 0x2
	KERN_OSTYPE                       = 0x1
	KERN_VERSION                      = 0x4
	LCNT_OVERLOAD_FLUSH               = 0x6
	LOCK_EX                           = 0x2
	LOCK_NB                           = 0x4
	LOCK_SH                           = 0x1
	LOCK_UN                           = 0x8
	MADV_DONTNEED                     = 0x4
	MADV_FREE                         = 0x6
	MADV_NORMAL                       = 0x0
	MADV_RANDOM                       = 0x1
	MADV_SEQUENTIAL                   = 0x2
	MADV_SPACEAVAIL                   = 0x5
	MADV_WILLNEED                     = 0x3
	MAP_ANON                          = 0x1000
	MAP_ANONYMOUS                     = 0x1000
	MAP_CONCEAL                       = 0x8000
	MAP_COPY                          = 0x2
	MAP_FILE                          = 0x0
	MAP_FIXED                         = 0x10
	MAP_FLAGMASK                      = 0xfff7
	MAP_HASSEMAPHORE                  = 0x0
	MAP_INHERIT                       = 0x0
	MAP_INHERIT_COPY                  = 0x1
	MAP_INHERIT_NONE                  = 0x2
	MAP_INHERIT_SHARE                 = 0x0
	MAP_INHERIT_ZERO                  = 0x3
	MAP_NOEXTEND                      = 0x0
	MAP_NORESERVE                     = 0x0
	MAP_PRIVATE                       = 0x2
	MAP_RENAME                        = 0x0
	MAP_SHARED                        = 0x1
	MAP_STACK                         = 0x4000
	MAP_TRYFIXED                      = 0x0
	MCL_CURRENT                       = 0x1
	MCL_FUTURE                        = 0x2
	MNT_ASYNC                         = 0x40
	MNT_DEFEXPORTED                   = 0x200
	MNT_DELEXPORT                     = 0x20000
	MNT_DOOMED                        = 0x8000000
	MNT_EXPORTANON                    = 0x400
	MNT_EXPORTED                      = 0x100
	MNT_EXRDONLY                      = 0x80
	MNT_FORCE                         = 0x80000
	MNT_LAZY                          = 0x3
	MNT_LOCAL                         = 0x1000
	MNT_NOATIME                       = 0x8000
	MNT_NODEV                         = 0x10
	MNT_NOEXEC                        = 0x4
	MNT_NOPERM                        = 0x20
	MNT_NOSUID                        = 0x8
	MNT_NOWAIT                        = 0x2
	MNT_QUOTA                         = 0x2000
	MNT_RDONLY                        = 0x1
	MNT_RELOAD                        = 0x40000
	MNT_ROOTFS                        = 0x4000
	MNT_SOFTDEP                       = 0x4000000
	MNT_STALLED                       = 0x100000
	MNT_SWAPPABLE                     = 0x200000
	MNT_SYNCHRONOUS                   = 0x2
	MNT_UPDATE                        = 0x10000
	MNT_VISFLAGMASK                   = 0x400ffff
	MNT_WAIT                          = 0x1
	MNT_WANTRDWR                      = 0x2000000
	MNT_WXALLOWED                     = 0x800
	MOUNT_AFS                         = "afs"
	MOUNT_CD9660                      = "cd9660"
	MOUNT_EXT2FS                      = "ext2fs"
	MOUNT_FFS                         = "ffs"
	MOUNT_FUSEFS                      = "fuse"
	MOUNT_MFS                         = "mfs"
	MOUNT_MSDOS                       = "msdos"
	MOUNT_NCPFS                       = "ncpfs"
	MOUNT_NFS                         = "nfs"
	MOUNT_NTFS                        = "ntfs"
	MOUNT_TMPFS                       = "tmpfs"
	MOUNT_UDF                         = "udf"
	MOUNT_UFS                         = "ffs"
	MSG_BCAST                         = 0x100
	MSG_CMSG_CLOEXEC                  = 0x800
	MSG_CTRUNC                        = 0x20
	MSG_DONTROUTE                     = 0x4
	MSG_DONTWAIT                      = 0x80
	MSG_EOR                           = 0x8
	MSG_MCAST                         = 0x200
	MSG_NOSIGNAL                      = 0x400
	MSG_OOB                           = 0x1
	MSG_PEEK                          = 0x2
	MSG_TRUNC                         = 0x10
	MSG_WAITALL                       = 0x40
	MSG_WAITFORONE                    = 0x1000
	MS_ASYNC                          = 0x1
	MS_INVALIDATE                     = 0x4
	MS_SYNC                           = 0x2
	NAME_MAX                          = 0xff
	NET_RT_DUMP                       = 0x1
	NET_RT_FLAGS                      = 0x2
	NET_RT_IFLIST                     = 0x3
	NET_RT_IFNAMES                    = 0x6
	NET_RT_MAXID                      = 0x8
	NET_RT_SOURCE                     = 0x7
	NET_RT_STATS                      = 0x4
	NET_RT_TABLE                      = 0x5
	NFDBITS                           = 0x20
	NOFLSH                            = 0x80000000
	NOKERNINFO                        = 0x2000000
	NOTE_ATTRIB                       = 0x8
	NOTE_CHANGE                       = 0x1
	NOTE_CHILD                        = 0x4
	NOTE_DELETE                       = 0x1
	NOTE_EOF                          = 0x2
	NOTE_EXEC                         = 0x20000000
	NOTE_EXIT                         = 0x80000000
	NOTE_EXTEND                       = 0x4
	NOTE_FORK                         = 0x40000000
	NOTE_LINK                         = 0x10
	NOTE_LOWAT                        = 0x1
	NOTE_OOB                          = 0x4
	NOTE_PCTRLMASK                    = 0xf0000000
	NOTE_PDATAMASK                    = 0xfffff
	NOTE_RENAME                       = 0x20
	NOTE_REVOKE                       = 0x40
	NOTE_TRACK                        = 0x1
	NOTE_TRACKERR                     = 0x2
	NOTE_TRUNCATE                     = 0x80
	NOTE_WRITE                        = 0x2
	OCRNL                             = 0x10
	OLCUC                             = 0x20
	ONLCR                             = 0x2
	ONLRET                            = 0x80
	ONOCR                             = 0x40
	ONOEOT                            = 0x8
	OPOST                             = 0x1
	OXTABS                            = 0x4
	O_ACCMODE                         = 0x3
	O_APPEND                          = 0x8
	O_ASYNC                           = 0x40
	O_CLOEXEC                         = 0x10000
	O_CREAT                           = 0x200
	O_DIRECTORY                       = 0x20000
	O_DSYNC                           = 0x80
	O_EXCL                            = 0x800
	O_EXLOCK                          = 0x20
	O_FSYNC                           = 0x80
	O_NDELAY                          = 0x4
	O_NOCTTY                          = 0x8000
	O_NOFOLLOW                        = 0x100
	O_NONBLOCK                        = 0x4
	O_RDONLY                          = 0x0
	O_RDWR                            = 0x2
	O_RSYNC                           = 0x80
	O_SHLOCK                          = 0x10
	O_SYNC                            = 0x80
	O_TRUNC                           = 0x400
	O_WRONLY                          = 0x1
	PARENB                            = 0x1000
	PARMRK                            = 0x8
	PARODD                            = 0x2000
	PENDIN                            = 0x20000000
	PF_FLUSH                          = 0x1
	PRIO_PGRP                         = 0x1
	PRIO_PROCESS                      = 0x0
	PRIO_USER                         = 0x2
	PROT_EXEC                         = 0x4
	PROT_NONE                         = 0x0
	PROT_READ                         = 0x1
	PROT_WRITE                        = 0x2
	RLIMIT_CORE                       = 0x4
	RLIMIT_CPU                        = 0x0
	RLIMIT_DATA                       = 0x2
	RLIMIT_FSIZE                      = 0x1
	RLIMIT_MEMLOCK                    = 0x6
	RLIMIT_NOFILE                     = 0x8
	RLIMIT_NPROC                      = 0x7
	RLIMIT_RSS                        = 0x5
	RLIMIT_STACK                      = 0x3
	RLIM_INFINITY                     = 0x7fffffffffffffff
	RTAX_AUTHOR                       = 0x6
	RTAX_BFD                          = 0xb
	RTAX_BRD                          = 0x7
	RTAX_DNS                          = 0xc
	RTAX_DST                          = 0x0
	RTAX_GATEWAY                      = 0x1
	RTAX_GENMASK                      = 0x3
	RTAX_IFA                          = 0x5
	RTAX_IFP                          = 0x4
	RTAX_LABEL                        = 0xa
	RTAX_MAX                          = 0xf
	RTAX_NETMASK                      = 0x2
	RTAX_SEARCH                       = 0xe
	RTAX_SRC                          = 0x8
	RTAX_SRCMASK                      = 0x9
	RTAX_STATIC                       = 0xd
	RTA_AUTHOR                        = 0x40
	RTA_BFD                           = 0x800
	RTA_BRD                           = 0x80
	RTA_DNS                           = 0x1000
	RTA_DST                           = 0x1
	RTA_GATEWAY                       = 0x2
	RTA_GENMASK                       = 0x8
	RTA_IFA                           = 0x20
	RTA_IFP                           = 0x10
	RTA_LABEL                         = 0x400
	RTA_NETMASK                       = 0x4
	RTA_SEARCH                        = 0x4000
	RTA_SRC                           = 0x100
	RTA_SRCMASK                       = 0x200
	RTA_STATIC                        = 0x2000
	RTF_ANNOUNCE                      = 0x4000
	RTF_BFD                           = 0x1000000
	RTF_BLACKHOLE                     = 0x1000
	RTF_BROADCAST                     = 0x400000
	RTF_CACHED                        = 0x20000
	RTF_CLONED                        = 0x10000
	RTF_CLONING                       = 0x100
	RTF_CONNECTED                     = 0x800000
	RTF_DONE                          = 0x40
	RTF_DYNAMIC                       = 0x10
	RTF_FMASK                         = 0x110fc08
	RTF_GATEWAY                       = 0x2
	RTF_HOST                          = 0x4
	RTF_LLINFO                        = 0x400
	RTF_LOCAL                         = 0x200000
	RTF_MODIFIED                      = 0x20
	RTF_MPATH                         = 0x40000
	RTF_MPLS                          = 0x100000
	RTF_MULTICAST                     = 0x200
	RTF_PERMANENT_ARP                 = 0x2000
	RTF_PROTO1                        = 0x8000
	RTF_PROTO2                        = 0x4000
	RTF_PROTO3                        = 0x2000
	RTF_REJECT                        = 0x8
	RTF_STATIC                        = 0x800
	RTF_UP                            = 0x1
	RTF_USETRAILERS                   = 0x8000
	RTM_80211INFO                     = 0x15
	RTM_ADD                           = 0x1
	RTM_BFD                           = 0x12
	RTM_CHANGE                        = 0x3
	RTM_CHGADDRATTR                   = 0x14
	RTM_DELADDR                       = 0xd
	RTM_DELETE                        = 0x2
	RTM_DESYNC                        = 0x10
	RTM_GET                           = 0x4
	RTM_IFANNOUNCE                    = 0xf
	RTM_IFINFO                        = 0xe
	RTM_INVALIDATE                    = 0x11
	RTM_LOSING                        = 0x5
	RTM_MAXSIZE                       = 0x800
	RTM_MISS                          = 0x7
	RTM_NEWADDR                       = 0xc
	RTM_PROPOSAL                      = 0x13
	RTM_REDIRECT                      = 0x6
	RTM_RESOLVE                       = 0xb
	RTM_SOURCE                        = 0x16
	RTM_VERSION                       = 0x5
	RTV_EXPIRE                        = 0x4
	RTV_HOPCOUNT                      = 0x2
	RTV_MTU                           = 0x1
	RTV_RPIPE                         = 0x8
	RTV_RTT                           = 0x40
	RTV_RTTVAR                        = 0x80
	RTV_SPIPE                         = 0x10
	RTV_SSTHRESH                      = 0x20
	RT_TABLEID_BITS                   = 0x8
	RT_TABLEID_MASK                   = 0xff
	RT_TABLEID_MAX                    = 0xff
	RUSAGE_CHILDREN                   = -0x1
	RUSAGE_SELF                       = 0x0
	RUSAGE_THREAD                     = 0x1
	SCM_RIGHTS                        = 0x1
	SCM_TIMESTAMP                     = 0x4
	SEEK_CUR                          = 0x1
	SEEK_END                          = 0x2
	SEEK_SET                          = 0x0
	SHUT_RD                           = 0x0
	SHUT_RDWR                         = 0x2
	SHUT_WR                           = 0x1
	SIOCADDMULTI                      = 0x80206931
	SIOCAIFADDR                       = 0x8040691a
	SIOCAIFGROUP                      = 0x80286987
	SIOCATMARK                        = 0x40047307
	SIOCBRDGADD                       = 0x8060693c
	SIOCBRDGADDL                      = 0x80606949
	SIOCBRDGADDS                      = 0x80606941
	SIOCBRDGARL                       = 0x808c694d
	SIOCBRDGDADDR                     = 0x81286947
	SIOCBRDGDEL                       = 0x8060693d
	SIOCBRDGDELS                      = 0x80606942
	SIOCBRDGFLUSH                     = 0x80606948
	SIOCBRDGFRL                       = 0x808c694e
	SIOCBRDGGCACHE                    = 0xc0146941
	SIOCBRDGGFD                       = 0xc0146952
	SIOCBRDGGHT                       = 0xc0146951
	SIOCBRDGGIFFLGS                   = 0xc060693e
	SIOCBRDGGMA                       = 0xc0146953
	SIOCBRDGGPARAM                    = 0xc0406958
	SIOCBRDGGPRI                      = 0xc0146950
	SIOCBRDGGRL                       = 0xc030694f
	SIOCBRDGGTO                       = 0xc0146946
	SIOCBRDGIFS                       = 0xc0606942
	SIOCBRDGRTS                       = 0xc0206943
	SIOCBRDGSADDR                     = 0xc1286944
	SIOCBRDGSCACHE                    = 0x80146940
	SIOCBRDGSFD                       = 0x80146952
	SIOCBRDGSHT                       = 0x80146951
	SIOCBRDGSIFCOST                   = 0x80606955
	SIOCBRDGSIFFLGS                   = 0x8060693f
	SIOCBRDGSIFPRIO                   = 0x80606954
	SIOCBRDGSIFPROT                   = 0x8060694a
	SIOCBRDGSMA                       = 0x80146953
	SIOCBRDGSPRI                      = 0x80146950
	SIOCBRDGSPROTO                    = 0x8014695a
	SIOCBRDGSTO                       = 0x80146945
	SIOCBRDGSTXHC                     = 0x80146959
	SIOCDELLABEL                      = 0x80206997
	SIOCDELMULTI                      = 0x80206932
	SIOCDIFADDR                       = 0x80206919
	SIOCDIFGROUP                      = 0x80286989
	SIOCDIFPARENT                     = 0x802069b4
	SIOCDIFPHYADDR                    = 0x80206949
	SIOCDPWE3NEIGHBOR                 = 0x802069de
	SIOCDVNETID                       = 0x802069af
	SIOCGETKALIVE                     = 0xc01869a4
	SIOCGETLABEL                      = 0x8020699a
	SIOCGETMPWCFG                     = 0xc02069ae
	SIOCGETPFLOW                      = 0xc02069fe
	SIOCGETPFSYNC                     = 0xc02069f8
	SIOCGETSGCNT                      = 0xc0207534
	SIOCGETVIFCNT                     = 0xc0287533
	SIOCGETVLAN                       = 0xc0206990
	SIOCGIFADDR                       = 0xc0206921
	SIOCGIFBRDADDR                    = 0xc0206923
	SIOCGIFCONF                       = 0xc0106924
	SIOCGIFDATA                       = 0xc020691b
	SIOCGIFDESCR                      = 0xc0206981
	SIOCGIFDSTADDR                    = 0xc0206922
	SIOCGIFFLAGS                      = 0xc0206911
	SIOCGIFGATTR                      = 0xc028698b
	SIOCGIFGENERIC                    = 0xc020693a
	SIOCGIFGLIST                      = 0xc028698d
	SIOCGIFGMEMB                      = 0xc028698a
	SIOCGIFGROUP                      = 0xc0286988
	SIOCGIFHARDMTU                    = 0xc02069a5
	SIOCGIFLLPRIO                     = 0xc02069b6
	SIOCGIFMEDIA                      = 0xc0406938
	SIOCGIFMETRIC                     = 0xc0206917
	SIOCGIFMTU                        = 0xc020697e
	SIOCGIFNETMASK                    = 0xc0206925
	SIOCGIFPAIR                       = 0xc02069b1
	SIOCGIFPARENT                     = 0xc02069b3
	SIOCGIFPRIORITY                   = 0xc020699c
	SIOCGIFRDOMAIN                    = 0xc02069a0
	SIOCGIFRTLABEL                    = 0xc0206983
	SIOCGIFRXR                        = 0x802069aa
	SIOCGIFSFFPAGE                    = 0xc1126939
	SIOCGIFXFLAGS                     = 0xc020699e
	SIOCGLIFPHYADDR                   = 0xc218694b
	SIOCGLIFPHYDF                     = 0xc02069c2
	SIOCGLIFPHYECN                    = 0xc02069c8
	SIOCGLIFPHYRTABLE                 = 0xc02069a2
	SIOCGLIFPHYTTL                    = 0xc02069a9
	SIOCGPGRP                         = 0x40047309
	SIOCGPWE3                         = 0xc0206998
	SIOCGPWE3CTRLWORD                 = 0xc02069dc
	SIOCGPWE3FAT                      = 0xc02069dd
	SIOCGPWE3NEIGHBOR                 = 0xc21869de
	SIOCGRXHPRIO                      = 0xc02069db
	SIOCGSPPPPARAMS                   = 0xc0206994
	SIOCGTXHPRIO                      = 0xc02069c6
	SIOCGUMBINFO                      = 0xc02069be
	SIOCGUMBPARAM                     = 0xc02069c0
	SIOCGVH                           = 0xc02069f6
	SIOCGVNETFLOWID                   = 0xc02069c4
	SIOCGVNETID                       = 0xc02069a7
	SIOCIFAFATTACH                    = 0x801169ab
	SIOCIFAFDETACH                    = 0x801169ac
	SIOCIFCREATE                      = 0x8020697a
	SIOCIFDESTROY                     = 0x80206979
	SIOCIFGCLONERS                    = 0xc0106978
	SIOCSETKALIVE                     = 0x801869a3
	SIOCSETLABEL                      = 0x80206999
	SIOCSETMPWCFG                     = 0x802069ad
	SIOCSETPFLOW                      = 0x802069fd
	SIOCSETPFSYNC                     = 0x802069f7
	SIOCSETVLAN                       = 0x8020698f
	SIOCSIFADDR                       = 0x8020690c
	SIOCSIFBRDADDR                    = 0x80206913
	SIOCSIFDESCR                      = 0x80206980
	SIOCSIFDSTADDR                    = 0x8020690e
	SIOCSIFFLAGS                      = 0x80206910
	SIOCSIFGATTR                      = 0x8028698c
	SIOCSIFGENERIC                    = 0x80206939
	SIOCSIFLLADDR                     = 0x8020691f
	SIOCSIFLLPRIO                     = 0x802069b5
	SIOCSIFMEDIA                      = 0xc0206937
	SIOCSIFMETRIC                     = 0x80206918
	SIOCSIFMTU                        = 0x8020697f
	SIOCSIFNETMASK                    = 0x80206916
	SIOCSIFPAIR                       = 0x802069b0
	SIOCSIFPARENT                     = 0x802069b2
	SIOCSIFPRIORITY                   = 0x8020699b
	SIOCSIFRDOMAIN                    = 0x8020699f
	SIOCSIFRTLABEL                    = 0x80206982
	SIOCSIFXFLAGS                     = 0x8020699d
	SIOCSLIFPHYADDR                   = 0x8218694a
	SIOCSLIFPHYDF                     = 0x802069c1
	SIOCSLIFPHYECN                    = 0x802069c7
	SIOCSLIFPHYRTABLE                 = 0x802069a1
	SIOCSLIFPHYTTL                    = 0x802069a8
	SIOCSPGRP                         = 0x80047308
	SIOCSPWE3CTRLWORD                 = 0x802069dc
	SIOCSPWE3FAT                      = 0x802069dd
	SIOCSPWE3NEIGHBOR                 = 0x821869de
	SIOCSRXHPRIO                      = 0x802069db
	SIOCSSPPPPARAMS                   = 0x80206993
	SIOCSTXHPRIO                      = 0x802069c5
	SIOCSUMBPARAM                     = 0x802069bf
	SIOCSVH                           = 0xc02069f5
	SIOCSVNETFLOWID                   = 0x802069c3
	SIOCSVNETID                       = 0x802069a6
	SOCK_CLOEXEC                      = 0x8000
	SOCK_DGRAM                        = 0x2
	SOCK_DNS                          = 0x1000
	SOCK_NONBLOCK                     = 0x4000
	SOCK_RAW                          = 0x3
	SOCK_RDM                          = 0x4
	SOCK_SEQPACKET                    = 0x5
	SOCK_STREAM                       = 0x1
	SOL_SOCKET                        = 0xffff
	SOMAXCONN                         = 0x80
	SO_ACCEPTCONN                     = 0x2
	SO_BINDANY                        = 0x1000
	SO_BROADCAST                      = 0x20
	SO_DEBUG                          = 0x1
	SO_DOMAIN                         = 0x1024
	SO_DONTROUTE                      = 0x10
	SO_ERROR                          = 0x1007
	SO_KEEPALIVE                      = 0x8
	SO_LINGER                         = 0x80
	SO_NETPROC                        = 0x1020
	SO_OOBINLINE                      = 0x100
	SO_PEERCRED                       = 0x1022
	SO_PROTOCOL                       = 0x1025
	SO_RCVBUF                         = 0x1002
	SO_RCVLOWAT                       = 0x1004
	SO_RCVTIMEO                       = 0x1006
	SO_REUSEADDR                      = 0x4
	SO_REUSEPORT                      = 0x200
	SO_RTABLE                         = 0x1021
	SO_SNDBUF                         = 0x1001
	SO_SNDLOWAT                       = 0x1003
	SO_SNDTIMEO                       = 0x1005
	SO_SPLICE                         = 0x1023
	SO_TIMESTAMP                      = 0x800
	SO_TYPE                           = 0x1008
	SO_USELOOPBACK                    = 0x40
	SO_ZEROIZE                        = 0x2000
	S_BLKSIZE                         = 0x200
	S_IEXEC                           = 0x40
	S_IFBLK                           = 0x6000
	S_IFCHR                           = 0x2000
	S_IFDIR                           = 0x4000
	S_IFIFO                           = 0x1000
	S_IFLNK                           = 0xa000
	S_IFMT                            = 0xf000
	S_IFREG                           = 0x8000
	S_IFSOCK                          = 0xc000
	S_IREAD                           = 0x100
	S_IRGRP                           = 0x20
	S_IROTH                           = 0x4
	S_IRUSR                           = 0x100
	S_IRWXG                           = 0x38
	S_IRWXO                           = 0x7
	S_IRWXU                           = 0x1c0
	S_ISGID                           = 0x400
	S_ISTXT                           = 0x200
	S_ISUID                           = 0x800
	S_ISVTX                           = 0x200
	S_IWGRP                           = 0x10
	S_IWOTH                           = 0x2
	S_IWRITE                          = 0x80
	S_IWUSR                           = 0x80
	S_IXGRP                           = 0x8
	S_IXOTH                           = 0x1
	S_IXUSR                           = 0x40
	TCIFLUSH                          = 0x1
	TCIOFF                            = 0x3
	TCIOFLUSH                         = 0x3
	TCION                             = 0x4
	TCOFLUSH                          = 0x2
	TCOOFF                            = 0x1
	TCOON                             = 0x2
	TCPOPT_EOL                        = 0x0
	TCPOPT_MAXSEG                     = 0x2
	TCPOPT_NOP                        = 0x1
	TCPOPT_SACK                       = 0x5
	TCPOPT_SACK_HDR                   = 0x1010500
	TCPOPT_SACK_PERMITTED             = 0x4
	TCPOPT_SACK_PERMIT_HDR            = 0x1010402
	TCPOPT_SIGNATURE                  = 0x13
	TCPOPT_TIMESTAMP                  = 0x8
	TCPOPT_TSTAMP_HDR                 = 0x101080a
	TCPOPT_WINDOW                     = 0x3
	TCP_INFO                          = 0x9
	TCP_MAXSEG                        = 0x2
	TCP_MAXWIN                        = 0xffff
	TCP_MAX_SACK                      = 0x3
	TCP_MAX_WINSHIFT                  = 0xe
	TCP_MD5SIG                        = 0x4
	TCP_MSS                           = 0x200
	TCP_NODELAY                       = 0x1
	TCP_NOPUSH                        = 0x10
	TCP_SACKHOLE_LIMIT                = 0x80
	TCP_SACK_ENABLE                   = 0x8
	TCSAFLUSH                         = 0x2
	TIMER_ABSTIME                     = 0x1
	TIMER_RELTIME                     = 0x0
	TIOCCBRK                          = 0x2000747a
	TIOCCDTR                          = 0x20007478
	TIOCCHKVERAUTH                    = 0x2000741e
	TIOCCLRVERAUTH                    = 0x2000741d
	TIOCCONS                          = 0x80047462
	TIOCDRAIN                         = 0x2000745e
	TIOCEXCL                          = 0x2000740d
	TIOCEXT                           = 0x80047460
	TIOCFLAG_CLOCAL                   = 0x2
	TIOCFLAG_CRTSCTS                  = 0x4
	TIOCFLAG_MDMBUF                   = 0x8
	TIOCFLAG_PPS                      = 0x10
	TIOCFLAG_SOFTCAR                  = 0x1
	TIOCFLUSH                         = 0x80047410
	TIOCGETA                          = 0x402c7413
	TIOCGETD                          = 0x4004741a
	TIOCGFLAGS                        = 0x4004745d
	TIOCGPGRP                         = 0x40047477
	TIOCGSID                          = 0x40047463
	TIOCGTSTAMP                       = 0x4010745b
	TIOCGWINSZ                        = 0x40087468
	TIOCMBIC                          = 0x8004746b
	TIOCMBIS                          = 0x8004746c
	TIOCMGET                          = 0x4004746a
	TIOCMODG                          = 0x4004746a
	TIOCMODS                          = 0x8004746d
	TIOCMSET                          = 0x8004746d
	TIOCM_CAR                         = 0x40
	TIOCM_CD                          = 0x40
	TIOCM_CTS                         = 0x20
	TIOCM_DSR                         = 0x100
	TIOCM_DTR                         = 0x2
	TIOCM_LE                          = 0x1
	TIOCM_RI                          = 0x80
	TIOCM_RNG                         = 0x80
	TIOCM_RTS                         = 0x4
	TIOCM_SR                          = 0x10
	TIOCM_ST                          = 0x8
	TIOCNOTTY                         = 0x20007471
	TIOCNXCL                          = 0x2000740e
	TIOCOUTQ                          = 0x40047473
	TIOCPKT                           = 0x80047470
	TIOCPKT_DATA                      = 0x0
	TIOCPKT_DOSTOP                    = 0x20
	TIOCPKT_FLUSHREAD                 = 0x1
	TIOCPKT_FLUSHWRITE                = 0x2
	TIOCPKT_IOCTL                     = 0x40
	TIOCPKT_NOSTOP                    = 0x10
	TIOCPKT_START                     = 0x8
	TIOCPKT_STOP                      = 0x4
	TIOCREMOTE                        = 0x80047469
	TIOCSBRK                          = 0x2000747b
	TIOCSCTTY                         = 0x20007461
	TIOCSDTR                          = 0x20007479
	TIOCSETA                          = 0x802c7414
	TIOCSETAF                         = 0x802c7416
	TIOCSETAW                         = 0x802c7415
	TIOCSETD                          = 0x8004741b
	TIOCSETVERAUTH                    = 0x8004741c
	TIOCSFLAGS                        = 0x8004745c
	TIOCSIG                           = 0x8004745f
	TIOCSPGRP                         = 0x80047476
	TIOCSTART                         = 0x2000746e
	TIOCSTAT                          = 0x20007465
	TIOCSTOP                          = 0x2000746f
	TIOCSTSTAMP                       = 0x8008745a
	TIOCSWINSZ                        = 0x80087467
	TIOCUCNTL                         = 0x80047466
	TIOCUCNTL_CBRK                    = 0x7a
	TIOCUCNTL_SBRK                    = 0x7b
	TOSTOP                            = 0x400000
	UTIME_NOW                         = -0x2
	UTIME_OMIT                        = -0x1
	VDISCARD                          = 0xf
	VDSUSP                            = 0xb
	VEOF                              = 0x0
	VEOL                              = 0x1
	VEOL2                             = 0x2
	VERASE                            = 0x3
	VINTR                             = 0x8
	VKILL                             = 0x5
	VLNEXT                            = 0xe
	VMIN                              = 0x10
	VM_ANONMIN                        = 0x7
	VM_LOADAVG                        = 0x2
	VM_MALLOC_CONF                    = 0xc
	VM_MAXID                          = 0xd
	VM_MAXSLP                         = 0xa
	VM_METER                          = 0x1
	VM_NKMEMPAGES                     = 0x6
	VM_PSSTRINGS                      = 0x3
	VM_SWAPENCRYPT                    = 0x5
	VM_USPACE                         = 0xb
	VM_UVMEXP                         = 0x4
	VM_VNODEMIN                       = 0x9
	VM_VTEXTMIN                       = 0x8
	VQUIT                             = 0x9
	VREPRINT                          = 0x6
	VSTART                            = 0xc
	VSTATUS                           = 0x12
	VSTOP                             = 0xd
	VSUSP                             = 0xa
	VTIME                             = 0x11
	VWERASE                           = 0x4
	WALTSIG                           = 0x4
	WCONTINUED                        = 0x8
	WCOREFLAG                         = 0x80
	WNOHANG                           = 0x1
	WUNTRACED                         = 0x2
	XCASE                             = 0x1000000
)

// Errors
const (
	E2BIG           = syscall.Errno(0x7)
	EACCES          = syscall.Errno(0xd)
	EADDRINUSE      = syscall.Errno(0x30)
	EADDRNOTAVAIL   = syscall.Errno(0x31)
	EAFNOSUPPORT    = syscall.Errno(0x2f)
	EAGAIN          = syscall.Errno(0x23)
	EALREADY        = syscall.Errno(0x25)
	EAUTH           = syscall.Errno(0x50)
	EBADF           = syscall.Errno(0x9)
	EBADMSG         = syscall.Errno(0x5c)
	EBADRPC         = syscall.Errno(0x48)
	EBUSY           = syscall.Errno(0x10)
	ECANCELED       = syscall.Errno(0x58)
	ECHILD          = syscall.Errno(0xa)
	ECONNABORTED    = syscall.Errno(0x35)
	ECONNREFUSED    = syscall.Errno(0x3d)
	ECONNRESET      = syscall.Errno(0x36)
	EDEADLK         = syscall.Errno(0xb)
	EDESTADDRREQ    = syscall.Errno(0x27)
	EDOM            = syscall.Errno(0x21)
	EDQUOT          = syscall.Errno(0x45)
	EEXIST          = syscall.Errno(0x11)
	EFAULT          = syscall.Errno(0xe)
	EFBIG           = syscall.Errno(0x1b)
	EFTYPE          = syscall.Errno(0x4f)
	EHOSTDOWN       = syscall.Errno(0x40)
	EHOSTUNREACH    = syscall.Errno(0x41)
	EIDRM           = syscall.Errno(0x59)
	EILSEQ          = syscall.Errno(0x54)
	EINPROGRESS     = syscall.Errno(0x24)
	EINTR           = syscall.Errno(0x4)
	EINVAL          = syscall.Errno(0x16)
	EIO             = syscall.Errno(0x5)
	EIPSEC          = syscall.Errno(0x52)
	EISCONN         = syscall.Errno(0x38)
	EISDIR          = syscall.Errno(0x15)
	ELAST           = syscall.Errno(0x5f)
	ELOOP           = syscall.Errno(0x3e)
	EMEDIUMTYPE     = syscall.Errno(0x56)
	EMFILE          = syscall.Errno(0x18)
	EMLINK          = syscall.Errno(0x1f)
	EMSGSIZE        = syscall.Errno(0x28)
	ENAMETOOLONG    = syscall.Errno(0x3f)
	ENEEDAUTH       = syscall.Errno(0x51)
	ENETDOWN        = syscall.Errno(0x32)
	ENETRESET       = syscall.Errno(0x34)
	ENETUNREACH     = syscall.Errno(0x33)
	ENFILE          = syscall.Errno(0x17)
	ENOATTR         = syscall.Errno(0x53)
	ENOBUFS         = syscall.Errno(0x37)
	ENODEV          = syscall.Errno(0x13)
	ENOENT          = syscall.Errno(0x2)
	ENOEXEC         = syscall.Errno(0x8)
	ENOLCK          = syscall.Errno(0x4d)
	ENOMEDIUM       = syscall.Errno(0x55)
	ENOMEM          = syscall.Errno(0xc)
	ENOMSG          = syscall.Errno(0x5a)
	ENOPROTOOPT     = syscall.Errno(0x2a)
	ENOSPC          = syscall.Errno(0x1c)
	ENOSYS          = syscall.Errno(0x4e)
	ENOTBLK         = syscall.Errno(0xf)
	ENOTCONN        = syscall.Errno(0x39)
	ENOTDIR         = syscall.Errno(0x14)
	ENOTEMPTY       = syscall.Errno(0x42)
	ENOTRECOVERABLE = syscall.Errno(0x5d)
	ENOTSOCK        = syscall.Errno(0x26)
	ENOTSUP         = syscall.Errno(0x5b)
	ENOTTY          = syscall.Errno(0x19)
	ENXIO           = syscall.Errno(0x6)
	EOPNOTSUPP      = syscall.Errno(0x2d)
	EOVERFLOW       = syscall.Errno(0x57)
	EOWNERDEAD      = syscall.Errno(0x5e)
	EPERM           = syscall.Errno(0x1)
	EPFNOSUPPORT    = syscall.Errno(0x2e)
	EPIPE           = syscall.Errno(0x20)
	EPROCLIM        = syscall.Errno(0x43)
	EPROCUNAVAIL    = syscall.Errno(0x4c)
	EPROGMISMATCH   = syscall.Errno(0x4b)
	EPROGUNAVAIL    = syscall.Errno(0x4a)
	EPROTO          = syscall.Errno(0x5f)
	EPROTONOSUPPORT = syscall.Errno(0x2b)
	EPROTOTYPE      = syscall.Errno(0x29)
	ERANGE          = syscall.Errno(0x22)
	EREMOTE         = syscall.Errno(0x47)
	EROFS           = syscall.Errno(0x1e)
	ERPCMISMATCH    = syscall.Errno(0x49)
	ESHUTDOWN       = syscall.Errno(0x3a)
	ESOCKTNOSUPPORT = syscall.Errno(0x2c)
	ESPIPE          = syscall.Errno(0x1d)
	ESRCH           = syscall.Errno(0x3)
	ESTALE          = syscall.Errno(0x46)
	ETIMEDOUT       = syscall.Errno(0x3c)
	ETOOMANYREFS    = syscall.Errno(0x3b)
	ETXTBSY         = syscall.Errno(0x1a)
	EUSERS          = syscall.Errno(0x44)
	EWOULDBLOCK     = syscall.Errno(0x23)
	EXDEV           = syscall.Errno(0x12)
)

// Signals
const (
	SIGABRT   = syscall.Signal(0x6)
	SIGALRM   = syscall.Signal(0xe)
	SIGBUS    = syscall.Signal(0xa)
	SIGCHLD   = syscall.Signal(0x14)
	SIGCONT   = syscall.Signal(0x13)
	SIGEMT    = syscall.Signal(0x7)
	SIGFPE    = syscall.Signal(0x8)
	SIGHUP    = syscall.Signal(0x1)
	SIGILL    = syscall.Signal(0x4)
	SIGINFO   = syscall.Signal(0x1d)
	SIGINT    = syscall.Signal(0x2)
	SIGIO     = syscall.Signal(0x17)
	SIGIOT    = syscall.Signal(0x6)
	SIGKILL   = syscall.Signal(0x9)
	SIGPIPE   = syscall.Signal(0xd)
	SIGPROF   = syscall.Signal(0x1b)
	SIGQUIT   = syscall.Signal(0x3)
	SIGSEGV   = syscall.Signal(0xb)
	SIGSTOP   = syscall.Signal(0x11)
	SIGSYS    = syscall.Signal(0xc)
	SIGTERM   = syscall.Signal(0xf)
	SIGTHR    = syscall.Signal(0x20)
	SIGTRAP   = syscall.Signal(0x5)
	SIGTSTP   = syscall.Signal(0x12)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x10)
	SIGUSR1   = syscall.Signal(0x1e)
	SIGUSR2   = syscall.Signal(0x1f)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "device not configured"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EDEADLK", "resource deadlock avoided"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "cross-device link"},
	{19, "ENODEV", "operation not supported by device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "result too large"},
	{35, "EAGAIN", "resource temporarily unavailable"},
	{36, "EINPROGRESS", "operation now in progress"},
	{37, "EALREADY", "operation already in progress"},
	{38, "ENOTSOCK", "socket operation on non-socket"},
	{39, "EDESTADDRREQ", "destination address required"},
	{40, "EMSGSIZE", "message too long"},
	{41, "EPROTOTYPE", "protocol wrong type for socket"},
	{42, "ENOPROTOOPT", "protocol not available"},
	{43, "EPROTONOSUPPORT", "protocol not supported"},
	{44, "ESOCKTNOSUPPORT", "socket type not supported"},
	{45, "EOPNOTSUPP", "operation not supported"},
	{46, "EPFNOSUPPORT", "protocol family not supported"},
	{47, "EAFNOSUPPORT", "address family not supported by protocol family"},
	{48, "EADDRINUSE", "address already in use"},
	{49, "EADDRNOTAVAIL", "can't assign requested address"},
	{50, "ENETDOWN", "network is down"},
	{51, "ENETUNREACH", "network is unreachable"},
	{52, "ENETRESET", "network dropped connection on reset"},
	{53, "ECONNABORTED", "software caused connection abort"},
	{54, "ECONNRESET", "connection reset by peer"},
	{55, "ENOBUFS", "no buffer space available"},
	{56, "EISCONN", "socket is already connected"},
	{57, "ENOTCONN", "socket is not connected"},
	{58, "ESHUTDOWN", "can't send after socket shutdown"},
	{59, "ETOOMANYREFS", "too many references: can't splice"},
	{60, "ETIMEDOUT", "operation timed out"},
	{61, "ECONNREFUSED", "connection refused"},
	{62, "ELOOP", "too many levels of symbolic links"},
	{63, "ENAMETOOLONG", "file name too long"},
	{64, "EHOSTDOWN", "host is down"},
	{65, "EHOSTUNREACH", "no route to host"},
	{66, "ENOTEMPTY", "directory not empty"},
	{67, "EPROCLIM", "too many processes"},
	{68, "EUSERS", "too many users"},
	{69, "EDQUOT", "disk quota exceeded"},
	{70, "ESTALE", "stale NFS file handle"},
	{71, "EREMOTE", "too many levels of remote in path"},
	{72, "EBADRPC", "RPC struct is bad"},
	{73, "ERPCMISMATCH", "RPC version wrong"},
	{74, "EPROGUNAVAIL", "RPC program not available"},
	{75, "EPROGMISMATCH", "program version wrong"},
	{76, "EPROCUNAVAIL", "bad procedure for program"},
	{77, "ENOLCK", "no locks available"},
	{78, "ENOSYS", "function not implemented"},
	{79, "EFTYPE", "inappropriate file type or format"},
	{80, "EAUTH", "authentication error"},
	{81, "ENEEDAUTH", "need authenticator"},
	{82, "EIPSEC", "IPsec processing failure"},
	{83, "ENOATTR", "attribute not found"},
	{84, "EILSEQ", "illegal byte sequence"},
	{85, "ENOMEDIUM", "no medium found"},
	{86, "EMEDIUMTYPE", "wrong medium type"},
	{87, "EOVERFLOW", "value too large to be stored in data type"},
	{88, "ECANCELED", "operation canceled"},
	{89, "EIDRM", "identifier removed"},
	{90, "ENOMSG", "no message of desired type"},
	{91, "ENOTSUP", "not supported"},
	{92, "EBADMSG", "bad message"},
	{93, "ENOTRECOVERABLE", "state not recoverable"},
	{94, "EOWNERDEAD", "previous owner died"},
	{95, "ELAST", "protocol error"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/BPT trap"},
	{6, "SIGIOT", "abort trap"},
	{7, "SIGEMT", "EMT trap"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus error"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGSYS", "bad system call"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGURG", "urgent I/O condition"},
	{17, "SIGSTOP", "suspended (signal)"},
	{18, "SIGTSTP", "suspended"},
	{19, "SIGCONT", "continued"},
	{20, "SIGCHLD", "child exited"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGIO", "I/O possible"},
	{24, "SIGXCPU", "cputime limit exceeded"},
	{25, "SIGXFSZ", "filesize limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window size changes"},
	{29, "SIGINFO", "information request"},
	{30, "SIGUSR1", "user defined signal 1"},
	{31, "SIGUSR2", "user defined signal 2"},
	{32, "SIGTHR", "thread AST"},
	{28672, "SIGSTKSZ", "unknown signal"},
}
   07070100000E42000081A4000000000000000000000001645E367C00013A4B000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go    // mkerrors.sh -m64
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build mips64 && openbsd
// +build mips64,openbsd

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -m64 _const.go

package unix

import "syscall"

const (
	AF_APPLETALK                      = 0x10
	AF_BLUETOOTH                      = 0x20
	AF_CCITT                          = 0xa
	AF_CHAOS                          = 0x5
	AF_CNT                            = 0x15
	AF_COIP                           = 0x14
	AF_DATAKIT                        = 0x9
	AF_DECnet                         = 0xc
	AF_DLI                            = 0xd
	AF_E164                           = 0x1a
	AF_ECMA                           = 0x8
	AF_ENCAP                          = 0x1c
	AF_HYLINK                         = 0xf
	AF_IMPLINK                        = 0x3
	AF_INET                           = 0x2
	AF_INET6                          = 0x18
	AF_IPX                            = 0x17
	AF_ISDN                           = 0x1a
	AF_ISO                            = 0x7
	AF_KEY                            = 0x1e
	AF_LAT                            = 0xe
	AF_LINK                           = 0x12
	AF_LOCAL                          = 0x1
	AF_MAX                            = 0x24
	AF_MPLS                           = 0x21
	AF_NATM                           = 0x1b
	AF_NS                             = 0x6
	AF_OSI                            = 0x7
	AF_PUP                            = 0x4
	AF_ROUTE                          = 0x11
	AF_SIP                            = 0x1d
	AF_SNA                            = 0xb
	AF_UNIX                           = 0x1
	AF_UNSPEC                         = 0x0
	ALTWERASE                         = 0x200
	ARPHRD_ETHER                      = 0x1
	ARPHRD_FRELAY                     = 0xf
	ARPHRD_IEEE1394                   = 0x18
	ARPHRD_IEEE802                    = 0x6
	B0                                = 0x0
	B110                              = 0x6e
	B115200                           = 0x1c200
	B1200                             = 0x4b0
	B134                              = 0x86
	B14400                            = 0x3840
	B150                              = 0x96
	B1800                             = 0x708
	B19200                            = 0x4b00
	B200                              = 0xc8
	B230400                           = 0x38400
	B2400                             = 0x960
	B28800                            = 0x7080
	B300                              = 0x12c
	B38400                            = 0x9600
	B4800                             = 0x12c0
	B50                               = 0x32
	B57600                            = 0xe100
	B600                              = 0x258
	B7200                             = 0x1c20
	B75                               = 0x4b
	B76800                            = 0x12c00
	B9600                             = 0x2580
	BIOCFLUSH                         = 0x20004268
	BIOCGBLEN                         = 0x40044266
	BIOCGDIRFILT                      = 0x4004427c
	BIOCGDLT                          = 0x4004426a
	BIOCGDLTLIST                      = 0xc010427b
	BIOCGETIF                         = 0x4020426b
	BIOCGFILDROP                      = 0x40044278
	BIOCGHDRCMPLT                     = 0x40044274
	BIOCGRSIG                         = 0x40044273
	BIOCGRTIMEOUT                     = 0x4010426e
	BIOCGSTATS                        = 0x4008426f
	BIOCIMMEDIATE                     = 0x80044270
	BIOCLOCK                          = 0x20004276
	BIOCPROMISC                       = 0x20004269
	BIOCSBLEN                         = 0xc0044266
	BIOCSDIRFILT                      = 0x8004427d
	BIOCSDLT                          = 0x8004427a
	BIOCSETF                          = 0x80104267
	BIOCSETIF                         = 0x8020426c
	BIOCSETWF                         = 0x80104277
	BIOCSFILDROP                      = 0x80044279
	BIOCSHDRCMPLT                     = 0x80044275
	BIOCSRSIG                         = 0x80044272
	BIOCSRTIMEOUT                     = 0x8010426d
	BIOCVERSION                       = 0x40044271
	BPF_A                             = 0x10
	BPF_ABS                           = 0x20
	BPF_ADD                           = 0x0
	BPF_ALIGNMENT                     = 0x4
	BPF_ALU                           = 0x4
	BPF_AND                           = 0x50
	BPF_B                             = 0x10
	BPF_DIRECTION_IN                  = 0x1
	BPF_DIRECTION_OUT                 = 0x2
	BPF_DIV                           = 0x30
	BPF_FILDROP_CAPTURE               = 0x1
	BPF_FILDROP_DROP                  = 0x2
	BPF_FILDROP_PASS                  = 0x0
	BPF_F_DIR_IN                      = 0x10
	BPF_F_DIR_MASK                    = 0x30
	BPF_F_DIR_OUT                     = 0x20
	BPF_F_DIR_SHIFT                   = 0x4
	BPF_F_FLOWID                      = 0x8
	BPF_F_PRI_MASK                    = 0x7
	BPF_H                             = 0x8
	BPF_IMM                           = 0x0
	BPF_IND                           = 0x40
	BPF_JA                            = 0x0
	BPF_JEQ                           = 0x10
	BPF_JGE                           = 0x30
	BPF_JGT                           = 0x20
	BPF_JMP                           = 0x5
	BPF_JSET                          = 0x40
	BPF_K                             = 0x0
	BPF_LD                            = 0x0
	BPF_LDX                           = 0x1
	BPF_LEN                           = 0x80
	BPF_LSH                           = 0x60
	BPF_MAJOR_VERSION                 = 0x1
	BPF_MAXBUFSIZE                    = 0x200000
	BPF_MAXINSNS                      = 0x200
	BPF_MEM                           = 0x60
	BPF_MEMWORDS                      = 0x10
	BPF_MINBUFSIZE                    = 0x20
	BPF_MINOR_VERSION                 = 0x1
	BPF_MISC                          = 0x7
	BPF_MSH                           = 0xa0
	BPF_MUL                           = 0x20
	BPF_NEG                           = 0x80
	BPF_OR                            = 0x40
	BPF_RELEASE                       = 0x30bb6
	BPF_RET                           = 0x6
	BPF_RND                           = 0xc0
	BPF_RSH                           = 0x70
	BPF_ST                            = 0x2
	BPF_STX                           = 0x3
	BPF_SUB                           = 0x10
	BPF_TAX                           = 0x0
	BPF_TXA                           = 0x80
	BPF_W                             = 0x0
	BPF_X                             = 0x8
	BRKINT                            = 0x2
	CFLUSH                            = 0xf
	CLOCAL                            = 0x8000
	CLOCK_BOOTTIME                    = 0x6
	CLOCK_MONOTONIC                   = 0x3
	CLOCK_PROCESS_CPUTIME_ID          = 0x2
	CLOCK_REALTIME                    = 0x0
	CLOCK_THREAD_CPUTIME_ID           = 0x4
	CLOCK_UPTIME                      = 0x5
	CPUSTATES                         = 0x6
	CP_IDLE                           = 0x5
	CP_INTR                           = 0x4
	CP_NICE                           = 0x1
	CP_SPIN                           = 0x3
	CP_SYS                            = 0x2
	CP_USER                           = 0x0
	CREAD                             = 0x800
	CRTSCTS                           = 0x10000
	CS5                               = 0x0
	CS6                               = 0x100
	CS7                               = 0x200
	CS8                               = 0x300
	CSIZE                             = 0x300
	CSTART                            = 0x11
	CSTATUS                           = 0xff
	CSTOP                             = 0x13
	CSTOPB                            = 0x400
	CSUSP                             = 0x1a
	CTL_HW                            = 0x6
	CTL_KERN                          = 0x1
	CTL_MAXNAME                       = 0xc
	CTL_NET                           = 0x4
	DIOCADDQUEUE                      = 0xc110445d
	DIOCADDRULE                       = 0xcd604404
	DIOCADDSTATE                      = 0xc1084425
	DIOCCHANGERULE                    = 0xcd60441a
	DIOCCLRIFFLAG                     = 0xc028445a
	DIOCCLRSRCNODES                   = 0x20004455
	DIOCCLRSTATES                     = 0xc0e04412
	DIOCCLRSTATUS                     = 0xc0284416
	DIOCGETLIMIT                      = 0xc0084427
	DIOCGETQSTATS                     = 0xc1204460
	DIOCGETQUEUE                      = 0xc110445f
	DIOCGETQUEUES                     = 0xc110445e
	DIOCGETRULE                       = 0xcd604407
	DIOCGETRULES                      = 0xcd604406
	DIOCGETRULESET                    = 0xc444443b
	DIOCGETRULESETS                   = 0xc444443a
	DIOCGETSRCNODES                   = 0xc0104454
	DIOCGETSTATE                      = 0xc1084413
	DIOCGETSTATES                     = 0xc0104419
	DIOCGETSTATUS                     = 0xc1e84415
	DIOCGETSYNFLWATS                  = 0xc0084463
	DIOCGETTIMEOUT                    = 0xc008441e
	DIOCIGETIFACES                    = 0xc0284457
	DIOCKILLSRCNODES                  = 0xc080445b
	DIOCKILLSTATES                    = 0xc0e04429
	DIOCNATLOOK                       = 0xc0504417
	DIOCOSFPADD                       = 0xc088444f
	DIOCOSFPFLUSH                     = 0x2000444e
	DIOCOSFPGET                       = 0xc0884450
	DIOCRADDADDRS                     = 0xc4504443
	DIOCRADDTABLES                    = 0xc450443d
	DIOCRCLRADDRS                     = 0xc4504442
	DIOCRCLRASTATS                    = 0xc4504448
	DIOCRCLRTABLES                    = 0xc450443c
	DIOCRCLRTSTATS                    = 0xc4504441
	DIOCRDELADDRS                     = 0xc4504444
	DIOCRDELTABLES                    = 0xc450443e
	DIOCRGETADDRS                     = 0xc4504446
	DIOCRGETASTATS                    = 0xc4504447
	DIOCRGETTABLES                    = 0xc450443f
	DIOCRGETTSTATS                    = 0xc4504440
	DIOCRINADEFINE                    = 0xc450444d
	DIOCRSETADDRS                     = 0xc4504445
	DIOCRSETTFLAGS                    = 0xc450444a
	DIOCRTSTADDRS                     = 0xc4504449
	DIOCSETDEBUG                      = 0xc0044418
	DIOCSETHOSTID                     = 0xc0044456
	DIOCSETIFFLAG                     = 0xc0284459
	DIOCSETLIMIT                      = 0xc0084428
	DIOCSETREASS                      = 0xc004445c
	DIOCSETSTATUSIF                   = 0xc0284414
	DIOCSETSYNCOOKIES                 = 0xc0014462
	DIOCSETSYNFLWATS                  = 0xc0084461
	DIOCSETTIMEOUT                    = 0xc008441d
	DIOCSTART                         = 0x20004401
	DIOCSTOP                          = 0x20004402
	DIOCXBEGIN                        = 0xc0104451
	DIOCXCOMMIT                       = 0xc0104452
	DIOCXROLLBACK                     = 0xc0104453
	DLT_ARCNET                        = 0x7
	DLT_ATM_RFC1483                   = 0xb
	DLT_AX25                          = 0x3
	DLT_CHAOS                         = 0x5
	DLT_C_HDLC                        = 0x68
	DLT_EN10MB                        = 0x1
	DLT_EN3MB                         = 0x2
	DLT_ENC                           = 0xd
	DLT_FDDI                          = 0xa
	DLT_IEEE802                       = 0x6
	DLT_IEEE802_11                    = 0x69
	DLT_IEEE802_11_RADIO              = 0x7f
	DLT_LOOP                          = 0xc
	DLT_MPLS                          = 0xdb
	DLT_NULL                          = 0x0
	DLT_OPENFLOW                      = 0x10b
	DLT_PFLOG                         = 0x75
	DLT_PFSYNC                        = 0x12
	DLT_PPP                           = 0x9
	DLT_PPP_BSDOS                     = 0x10
	DLT_PPP_ETHER                     = 0x33
	DLT_PPP_SERIAL                    = 0x32
	DLT_PRONET                        = 0x4
	DLT_RAW                           = 0xe
	DLT_SLIP                          = 0x8
	DLT_SLIP_BSDOS                    = 0xf
	DLT_USBPCAP                       = 0xf9
	DLT_USER0                         = 0x93
	DLT_USER1                         = 0x94
	DLT_USER10                        = 0x9d
	DLT_USER11                        = 0x9e
	DLT_USER12                        = 0x9f
	DLT_USER13                        = 0xa0
	DLT_USER14                        = 0xa1
	DLT_USER15                        = 0xa2
	DLT_USER2                         = 0x95
	DLT_USER3                         = 0x96
	DLT_USER4                         = 0x97
	DLT_USER5                         = 0x98
	DLT_USER6                         = 0x99
	DLT_USER7                         = 0x9a
	DLT_USER8                         = 0x9b
	DLT_USER9                         = 0x9c
	DT_BLK                            = 0x6
	DT_CHR                            = 0x2
	DT_DIR                            = 0x4
	DT_FIFO                           = 0x1
	DT_LNK                            = 0xa
	DT_REG                            = 0x8
	DT_SOCK                           = 0xc
	DT_UNKNOWN                        = 0x0
	ECHO                              = 0x8
	ECHOCTL                           = 0x40
	ECHOE                             = 0x2
	ECHOK                             = 0x4
	ECHOKE                            = 0x1
	ECHONL                            = 0x10
	ECHOPRT                           = 0x20
	EMT_TAGOVF                        = 0x1
	EMUL_ENABLED                      = 0x1
	EMUL_NATIVE                       = 0x2
	ENDRUNDISC                        = 0x9
	ETH64_8021_RSVD_MASK              = 0xfffffffffff0
	ETH64_8021_RSVD_PREFIX            = 0x180c2000000
	ETHERMIN                          = 0x2e
	ETHERMTU                          = 0x5dc
	ETHERTYPE_8023                    = 0x4
	ETHERTYPE_AARP                    = 0x80f3
	ETHERTYPE_ACCTON                  = 0x8390
	ETHERTYPE_AEONIC                  = 0x8036
	ETHERTYPE_ALPHA                   = 0x814a
	ETHERTYPE_AMBER                   = 0x6008
	ETHERTYPE_AMOEBA                  = 0x8145
	ETHERTYPE_AOE                     = 0x88a2
	ETHERTYPE_APOLLO                  = 0x80f7
	ETHERTYPE_APOLLODOMAIN            = 0x8019
	ETHERTYPE_APPLETALK               = 0x809b
	ETHERTYPE_APPLITEK                = 0x80c7
	ETHERTYPE_ARGONAUT                = 0x803a
	ETHERTYPE_ARP                     = 0x806
	ETHERTYPE_AT                      = 0x809b
	ETHERTYPE_ATALK                   = 0x809b
	ETHERTYPE_ATOMIC                  = 0x86df
	ETHERTYPE_ATT                     = 0x8069
	ETHERTYPE_ATTSTANFORD             = 0x8008
	ETHERTYPE_AUTOPHON                = 0x806a
	ETHERTYPE_AXIS                    = 0x8856
	ETHERTYPE_BCLOOP                  = 0x9003
	ETHERTYPE_BOFL                    = 0x8102
	ETHERTYPE_CABLETRON               = 0x7034
	ETHERTYPE_CHAOS                   = 0x804
	ETHERTYPE_COMDESIGN               = 0x806c
	ETHERTYPE_COMPUGRAPHIC            = 0x806d
	ETHERTYPE_COUNTERPOINT            = 0x8062
	ETHERTYPE_CRONUS                  = 0x8004
	ETHERTYPE_CRONUSVLN               = 0x8003
	ETHERTYPE_DCA                     = 0x1234
	ETHERTYPE_DDE                     = 0x807b
	ETHERTYPE_DEBNI                   = 0xaaaa
	ETHERTYPE_DECAM                   = 0x8048
	ETHERTYPE_DECCUST                 = 0x6006
	ETHERTYPE_DECDIAG                 = 0x6005
	ETHERTYPE_DECDNS                  = 0x803c
	ETHERTYPE_DECDTS                  = 0x803e
	ETHERTYPE_DECEXPER                = 0x6000
	ETHERTYPE_DECLAST                 = 0x8041
	ETHERTYPE_DECLTM                  = 0x803f
	ETHERTYPE_DECMUMPS                = 0x6009
	ETHERTYPE_DECNETBIOS              = 0x8040
	ETHERTYPE_DELTACON                = 0x86de
	ETHERTYPE_DIDDLE                  = 0x4321
	ETHERTYPE_DLOG1                   = 0x660
	ETHERTYPE_DLOG2                   = 0x661
	ETHERTYPE_DN                      = 0x6003
	ETHERTYPE_DOGFIGHT                = 0x1989
	ETHERTYPE_DSMD                    = 0x8039
	ETHERTYPE_EAPOL                   = 0x888e
	ETHERTYPE_ECMA                    = 0x803
	ETHERTYPE_ENCRYPT                 = 0x803d
	ETHERTYPE_ES                      = 0x805d
	ETHERTYPE_EXCELAN                 = 0x8010
	ETHERTYPE_EXPERDATA               = 0x8049
	ETHERTYPE_FLIP                    = 0x8146
	ETHERTYPE_FLOWCONTROL             = 0x8808
	ETHERTYPE_FRARP                   = 0x808
	ETHERTYPE_GENDYN                  = 0x8068
	ETHERTYPE_HAYES                   = 0x8130
	ETHERTYPE_HIPPI_FP                = 0x8180
	ETHERTYPE_HITACHI                 = 0x8820
	ETHERTYPE_HP                      = 0x8005
	ETHERTYPE_IEEEPUP                 = 0xa00
	ETHERTYPE_IEEEPUPAT               = 0xa01
	ETHERTYPE_IMLBL                   = 0x4c42
	ETHERTYPE_IMLBLDIAG               = 0x424c
	ETHERTYPE_IP                      = 0x800
	ETHERTYPE_IPAS                    = 0x876c
	ETHERTYPE_IPV6                    = 0x86dd
	ETHERTYPE_IPX                     = 0x8137
	ETHERTYPE_IPXNEW                  = 0x8037
	ETHERTYPE_KALPANA                 = 0x8582
	ETHERTYPE_LANBRIDGE               = 0x8038
	ETHERTYPE_LANPROBE                = 0x8888
	ETHERTYPE_LAT                     = 0x6004
	ETHERTYPE_LBACK                   = 0x9000
	ETHERTYPE_LITTLE                  = 0x8060
	ETHERTYPE_LLDP                    = 0x88cc
	ETHERTYPE_LOGICRAFT               = 0x8148
	ETHERTYPE_LOOPBACK                = 0x9000
	ETHERTYPE_MACSEC                  = 0x88e5
	ETHERTYPE_MATRA                   = 0x807a
	ETHERTYPE_MAX                     = 0xffff
	ETHERTYPE_MERIT                   = 0x807c
	ETHERTYPE_MICP                    = 0x873a
	ETHERTYPE_MOPDL                   = 0x6001
	ETHERTYPE_MOPRC                   = 0x6002
	ETHERTYPE_MOTOROLA                = 0x818d
	ETHERTYPE_MPLS                    = 0x8847
	ETHERTYPE_MPLS_MCAST              = 0x8848
	ETHERTYPE_MUMPS                   = 0x813f
	ETHERTYPE_NBPCC                   = 0x3c04
	ETHERTYPE_NBPCLAIM                = 0x3c09
	ETHERTYPE_NBPCLREQ                = 0x3c05
	ETHERTYPE_NBPCLRSP                = 0x3c06
	ETHERTYPE_NBPCREQ                 = 0x3c02
	ETHERTYPE_NBPCRSP                 = 0x3c03
	ETHERTYPE_NBPDG                   = 0x3c07
	ETHERTYPE_NBPDGB                  = 0x3c08
	ETHERTYPE_NBPDLTE                 = 0x3c0a
	ETHERTYPE_NBPRAR                  = 0x3c0c
	ETHERTYPE_NBPRAS                  = 0x3c0b
	ETHERTYPE_NBPRST                  = 0x3c0d
	ETHERTYPE_NBPSCD                  = 0x3c01
	ETHERTYPE_NBPVCD                  = 0x3c00
	ETHERTYPE_NBS                     = 0x802
	ETHERTYPE_NCD                     = 0x8149
	ETHERTYPE_NESTAR                  = 0x8006
	ETHERTYPE_NETBEUI                 = 0x8191
	ETHERTYPE_NHRP                    = 0x2001
	ETHERTYPE_NOVELL                  = 0x8138
	ETHERTYPE_NS                      = 0x600
	ETHERTYPE_NSAT                    = 0x601
	ETHERTYPE_NSCOMPAT                = 0x807
	ETHERTYPE_NSH                     = 0x984f
	ETHERTYPE_NTRAILER                = 0x10
	ETHERTYPE_OS9                     = 0x7007
	ETHERTYPE_OS9NET                  = 0x7009
	ETHERTYPE_PACER                   = 0x80c6
	ETHERTYPE_PBB                     = 0x88e7
	ETHERTYPE_PCS                     = 0x4242
	ETHERTYPE_PLANNING                = 0x8044
	ETHERTYPE_PPP                     = 0x880b
	ETHERTYPE_PPPOE                   = 0x8864
	ETHERTYPE_PPPOEDISC               = 0x8863
	ETHERTYPE_PRIMENTS                = 0x7031
	ETHERTYPE_PUP                     = 0x200
	ETHERTYPE_PUPAT                   = 0x200
	ETHERTYPE_QINQ                    = 0x88a8
	ETHERTYPE_RACAL                   = 0x7030
	ETHERTYPE_RATIONAL                = 0x8150
	ETHERTYPE_RAWFR                   = 0x6559
	ETHERTYPE_RCL                     = 0x1995
	ETHERTYPE_RDP                     = 0x8739
	ETHERTYPE_RETIX                   = 0x80f2
	ETHERTYPE_REVARP                  = 0x8035
	ETHERTYPE_SCA                     = 0x6007
	ETHERTYPE_SECTRA                  = 0x86db
	ETHERTYPE_SECUREDATA              = 0x876d
	ETHERTYPE_SGITW                   = 0x817e
	ETHERTYPE_SG_BOUNCE               = 0x8016
	ETHERTYPE_SG_DIAG                 = 0x8013
	ETHERTYPE_SG_NETGAMES             = 0x8014
	ETHERTYPE_SG_RESV                 = 0x8015
	ETHERTYPE_SIMNET                  = 0x5208
	ETHERTYPE_SLOW                    = 0x8809
	ETHERTYPE_SNA                     = 0x80d5
	ETHERTYPE_SNMP                    = 0x814c
	ETHERTYPE_SONIX                   = 0xfaf5
	ETHERTYPE_SPIDER                  = 0x809f
	ETHERTYPE_SPRITE                  = 0x500
	ETHERTYPE_STP                     = 0x8181
	ETHERTYPE_TALARIS                 = 0x812b
	ETHERTYPE_TALARISMC               = 0x852b
	ETHERTYPE_TCPCOMP                 = 0x876b
	ETHERTYPE_TCPSM                   = 0x9002
	ETHERTYPE_TEC                     = 0x814f
	ETHERTYPE_TIGAN                   = 0x802f
	ETHERTYPE_TRAIL                   = 0x1000
	ETHERTYPE_TRANSETHER              = 0x6558
	ETHERTYPE_TYMSHARE                = 0x802e
	ETHERTYPE_UBBST                   = 0x7005
	ETHERTYPE_UBDEBUG                 = 0x900
	ETHERTYPE_UBDIAGLOOP              = 0x7002
	ETHERTYPE_UBDL                    = 0x7000
	ETHERTYPE_UBNIU                   = 0x7001
	ETHERTYPE_UBNMC                   = 0x7003
	ETHERTYPE_VALID                   = 0x1600
	ETHERTYPE_VARIAN                  = 0x80dd
	ETHERTYPE_VAXELN                  = 0x803b
	ETHERTYPE_VEECO                   = 0x8067
	ETHERTYPE_VEXP                    = 0x805b
	ETHERTYPE_VGLAB                   = 0x8131
	ETHERTYPE_VINES                   = 0xbad
	ETHERTYPE_VINESECHO               = 0xbaf
	ETHERTYPE_VINESLOOP               = 0xbae
	ETHERTYPE_VITAL                   = 0xff00
	ETHERTYPE_VLAN                    = 0x8100
	ETHERTYPE_VLTLMAN                 = 0x8080
	ETHERTYPE_VPROD                   = 0x805c
	ETHERTYPE_VURESERVED              = 0x8147
	ETHERTYPE_WATERLOO                = 0x8130
	ETHERTYPE_WELLFLEET               = 0x8103
	ETHERTYPE_X25                     = 0x805
	ETHERTYPE_X75                     = 0x801
	ETHERTYPE_XNSSM                   = 0x9001
	ETHERTYPE_XTP                     = 0x817d
	ETHER_ADDR_LEN                    = 0x6
	ETHER_ALIGN                       = 0x2
	ETHER_CRC_LEN                     = 0x4
	ETHER_CRC_POLY_BE                 = 0x4c11db6
	ETHER_CRC_POLY_LE                 = 0xedb88320
	ETHER_HDR_LEN                     = 0xe
	ETHER_MAX_DIX_LEN                 = 0x600
	ETHER_MAX_HARDMTU_LEN             = 0xff9b
	ETHER_MAX_LEN                     = 0x5ee
	ETHER_MIN_LEN                     = 0x40
	ETHER_TYPE_LEN                    = 0x2
	ETHER_VLAN_ENCAP_LEN              = 0x4
	EVFILT_AIO                        = -0x3
	EVFILT_DEVICE                     = -0x8
	EVFILT_EXCEPT                     = -0x9
	EVFILT_PROC                       = -0x5
	EVFILT_READ                       = -0x1
	EVFILT_SIGNAL                     = -0x6
	EVFILT_SYSCOUNT                   = 0x9
	EVFILT_TIMER                      = -0x7
	EVFILT_VNODE                      = -0x4
	EVFILT_WRITE                      = -0x2
	EVL_ENCAPLEN                      = 0x4
	EVL_PRIO_BITS                     = 0xd
	EVL_PRIO_MAX                      = 0x7
	EVL_VLID_MASK                     = 0xfff
	EVL_VLID_MAX                      = 0xffe
	EVL_VLID_MIN                      = 0x1
	EVL_VLID_NULL                     = 0x0
	EV_ADD                            = 0x1
	EV_CLEAR                          = 0x20
	EV_DELETE                         = 0x2
	EV_DISABLE                        = 0x8
	EV_DISPATCH                       = 0x80
	EV_ENABLE                         = 0x4
	EV_EOF                            = 0x8000
	EV_ERROR                          = 0x4000
	EV_FLAG1                          = 0x2000
	EV_ONESHOT                        = 0x10
	EV_RECEIPT                        = 0x40
	EV_SYSFLAGS                       = 0xf800
	EXTA                              = 0x4b00
	EXTB                              = 0x9600
	EXTPROC                           = 0x800
	FD_CLOEXEC                        = 0x1
	FD_SETSIZE                        = 0x400
	FLUSHO                            = 0x800000
	F_DUPFD                           = 0x0
	F_DUPFD_CLOEXEC                   = 0xa
	F_GETFD                           = 0x1
	F_GETFL                           = 0x3
	F_GETLK                           = 0x7
	F_GETOWN                          = 0x5
	F_ISATTY                          = 0xb
	F_OK                              = 0x0
	F_RDLCK                           = 0x1
	F_SETFD                           = 0x2
	F_SETFL                           = 0x4
	F_SETLK                           = 0x8
	F_SETLKW                          = 0x9
	F_SETOWN                          = 0x6
	F_UNLCK                           = 0x2
	F_WRLCK                           = 0x3
	HUPCL                             = 0x4000
	HW_MACHINE                        = 0x1
	ICANON                            = 0x100
	ICMP6_FILTER                      = 0x12
	ICRNL                             = 0x100
	IEXTEN                            = 0x400
	IFAN_ARRIVAL                      = 0x0
	IFAN_DEPARTURE                    = 0x1
	IFF_ALLMULTI                      = 0x200
	IFF_BROADCAST                     = 0x2
	IFF_CANTCHANGE                    = 0x8e52
	IFF_DEBUG                         = 0x4
	IFF_LINK0                         = 0x1000
	IFF_LINK1                         = 0x2000
	IFF_LINK2                         = 0x4000
	IFF_LOOPBACK                      = 0x8
	IFF_MULTICAST                     = 0x8000
	IFF_NOARP                         = 0x80
	IFF_OACTIVE                       = 0x400
	IFF_POINTOPOINT                   = 0x10
	IFF_PROMISC                       = 0x100
	IFF_RUNNING                       = 0x40
	IFF_SIMPLEX                       = 0x800
	IFF_STATICARP                     = 0x20
	IFF_UP                            = 0x1
	IFNAMSIZ                          = 0x10
	IFT_1822                          = 0x2
	IFT_A12MPPSWITCH                  = 0x82
	IFT_AAL2                          = 0xbb
	IFT_AAL5                          = 0x31
	IFT_ADSL                          = 0x5e
	IFT_AFLANE8023                    = 0x3b
	IFT_AFLANE8025                    = 0x3c
	IFT_ARAP                          = 0x58
	IFT_ARCNET                        = 0x23
	IFT_ARCNETPLUS                    = 0x24
	IFT_ASYNC                         = 0x54
	IFT_ATM                           = 0x25
	IFT_ATMDXI                        = 0x69
	IFT_ATMFUNI                       = 0x6a
	IFT_ATMIMA                        = 0x6b
	IFT_ATMLOGICAL                    = 0x50
	IFT_ATMRADIO                      = 0xbd
	IFT_ATMSUBINTERFACE               = 0x86
	IFT_ATMVCIENDPT                   = 0xc2
	IFT_ATMVIRTUAL                    = 0x95
	IFT_BGPPOLICYACCOUNTING           = 0xa2
	IFT_BLUETOOTH                     = 0xf8
	IFT_BRIDGE                        = 0xd1
	IFT_BSC                           = 0x53
	IFT_CARP                          = 0xf7
	IFT_CCTEMUL                       = 0x3d
	IFT_CEPT                          = 0x13
	IFT_CES                           = 0x85
	IFT_CHANNEL                       = 0x46
	IFT_CNR                           = 0x55
	IFT_COFFEE                        = 0x84
	IFT_COMPOSITELINK                 = 0x9b
	IFT_DCN                           = 0x8d
	IFT_DIGITALPOWERLINE              = 0x8a
	IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba
	IFT_DLSW                          = 0x4a
	IFT_DOCSCABLEDOWNSTREAM           = 0x80
	IFT_DOCSCABLEMACLAYER             = 0x7f
	IFT_DOCSCABLEUPSTREAM             = 0x81
	IFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd
	IFT_DS0                           = 0x51
	IFT_DS0BUNDLE                     = 0x52
	IFT_DS1FDL                        = 0xaa
	IFT_DS3                           = 0x1e
	IFT_DTM                           = 0x8c
	IFT_DUMMY                         = 0xf1
	IFT_DVBASILN                      = 0xac
	IFT_DVBASIOUT                     = 0xad
	IFT_DVBRCCDOWNSTREAM              = 0x93
	IFT_DVBRCCMACLAYER                = 0x92
	IFT_DVBRCCUPSTREAM                = 0x94
	IFT_ECONET                        = 0xce
	IFT_ENC                           = 0xf4
	IFT_EON                           = 0x19
	IFT_EPLRS                         = 0x57
	IFT_ESCON                         = 0x49
	IFT_ETHER                         = 0x6
	IFT_FAITH                         = 0xf3
	IFT_FAST                          = 0x7d
	IFT_FASTETHER                     = 0x3e
	IFT_FASTETHERFX                   = 0x45
	IFT_FDDI                          = 0xf
	IFT_FIBRECHANNEL                  = 0x38
	IFT_FRAMERELAYINTERCONNECT        = 0x3a
	IFT_FRAMERELAYMPI                 = 0x5c
	IFT_FRDLCIENDPT                   = 0xc1
	IFT_FRELAY                        = 0x20
	IFT_FRELAYDCE                     = 0x2c
	IFT_FRF16MFRBUNDLE                = 0xa3
	IFT_FRFORWARD                     = 0x9e
	IFT_G703AT2MB                     = 0x43
	IFT_G703AT64K                     = 0x42
	IFT_GIF                           = 0xf0
	IFT_GIGABITETHERNET               = 0x75
	IFT_GR303IDT                      = 0xb2
	IFT_GR303RDT                      = 0xb1
	IFT_H323GATEKEEPER                = 0xa4
	IFT_H323PROXY                     = 0xa5
	IFT_HDH1822                       = 0x3
	IFT_HDLC                          = 0x76
	IFT_HDSL2                         = 0xa8
	IFT_HIPERLAN2                     = 0xb7
	IFT_HIPPI                         = 0x2f
	IFT_HIPPIINTERFACE                = 0x39
	IFT_HOSTPAD                       = 0x5a
	IFT_HSSI                          = 0x2e
	IFT_HY                            = 0xe
	IFT_IBM370PARCHAN                 = 0x48
	IFT_IDSL                          = 0x9a
	IFT_IEEE1394                      = 0x90
	IFT_IEEE80211                     = 0x47
	IFT_IEEE80212                     = 0x37
	IFT_IEEE8023ADLAG                 = 0xa1
	IFT_IFGSN                         = 0x91
	IFT_IMT                           = 0xbe
	IFT_INFINIBAND                    = 0xc7
	IFT_INTERLEAVE                    = 0x7c
	IFT_IP                            = 0x7e
	IFT_IPFORWARD                     = 0x8e
	IFT_IPOVERATM                     = 0x72
	IFT_IPOVERCDLC                    = 0x6d
	IFT_IPOVERCLAW                    = 0x6e
	IFT_IPSWITCH                      = 0x4e
	IFT_ISDN                          = 0x3f
	IFT_ISDNBASIC                     = 0x14
	IFT_ISDNPRIMARY                   = 0x15
	IFT_ISDNS                         = 0x4b
	IFT_ISDNU                         = 0x4c
	IFT_ISO88022LLC                   = 0x29
	IFT_ISO88023                      = 0x7
	IFT_ISO88024                      = 0x8
	IFT_ISO88025                      = 0x9
	IFT_ISO88025CRFPINT               = 0x62
	IFT_ISO88025DTR                   = 0x56
	IFT_ISO88025FIBER                 = 0x73
	IFT_ISO88026                      = 0xa
	IFT_ISUP                          = 0xb3
	IFT_L2VLAN                        = 0x87
	IFT_L3IPVLAN                      = 0x88
	IFT_L3IPXVLAN                     = 0x89
	IFT_LAPB                          = 0x10
	IFT_LAPD                          = 0x4d
	IFT_LAPF                          = 0x77
	IFT_LINEGROUP                     = 0xd2
	IFT_LOCALTALK                     = 0x2a
	IFT_LOOP                          = 0x18
	IFT_MBIM                          = 0xfa
	IFT_MEDIAMAILOVERIP               = 0x8b
	IFT_MFSIGLINK                     = 0xa7
	IFT_MIOX25                        = 0x26
	IFT_MODEM                         = 0x30
	IFT_MPC                           = 0x71
	IFT_MPLS                          = 0xa6
	IFT_MPLSTUNNEL                    = 0x96
	IFT_MSDSL                         = 0x8f
	IFT_MVL                           = 0xbf
	IFT_MYRINET                       = 0x63
	IFT_NFAS                          = 0xaf
	IFT_NSIP                          = 0x1b
	IFT_OPTICALCHANNEL                = 0xc3
	IFT_OPTICALTRANSPORT              = 0xc4
	IFT_OTHER                         = 0x1
	IFT_P10                           = 0xc
	IFT_P80                           = 0xd
	IFT_PARA                          = 0x22
	IFT_PFLOG                         = 0xf5
	IFT_PFLOW                         = 0xf9
	IFT_PFSYNC                        = 0xf6
	IFT_PLC                           = 0xae
	IFT_PON155                        = 0xcf
	IFT_PON622                        = 0xd0
	IFT_POS                           = 0xab
	IFT_PPP                           = 0x17
	IFT_PPPMULTILINKBUNDLE            = 0x6c
	IFT_PROPATM                       = 0xc5
	IFT_PROPBWAP2MP                   = 0xb8
	IFT_PROPCNLS                      = 0x59
	IFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5
	IFT_PROPDOCSWIRELESSMACLAYER      = 0xb4
	IFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6
	IFT_PROPMUX                       = 0x36
	IFT_PROPVIRTUAL                   = 0x35
	IFT_PROPWIRELESSP2P               = 0x9d
	IFT_PTPSERIAL                     = 0x16
	IFT_PVC                           = 0xf2
	IFT_Q2931                         = 0xc9
	IFT_QLLC                          = 0x44
	IFT_RADIOMAC                      = 0xbc
	IFT_RADSL                         = 0x5f
	IFT_REACHDSL                      = 0xc0
	IFT_RFC1483                       = 0x9f
	IFT_RS232                         = 0x21
	IFT_RSRB                          = 0x4f
	IFT_SDLC                          = 0x11
	IFT_SDSL                          = 0x60
	IFT_SHDSL                         = 0xa9
	IFT_SIP                           = 0x1f
	IFT_SIPSIG                        = 0xcc
	IFT_SIPTG                         = 0xcb
	IFT_SLIP                          = 0x1c
	IFT_SMDSDXI                       = 0x2b
	IFT_SMDSICIP                      = 0x34
	IFT_SONET                         = 0x27
	IFT_SONETOVERHEADCHANNEL          = 0xb9
	IFT_SONETPATH                     = 0x32
	IFT_SONETVT                       = 0x33
	IFT_SRP                           = 0x97
	IFT_SS7SIGLINK                    = 0x9c
	IFT_STACKTOSTACK                  = 0x6f
	IFT_STARLAN                       = 0xb
	IFT_T1                            = 0x12
	IFT_TDLC                          = 0x74
	IFT_TELINK                        = 0xc8
	IFT_TERMPAD                       = 0x5b
	IFT_TR008                         = 0xb0
	IFT_TRANSPHDLC                    = 0x7b
	IFT_TUNNEL                        = 0x83
	IFT_ULTRA                         = 0x1d
	IFT_USB                           = 0xa0
	IFT_V11                           = 0x40
	IFT_V35                           = 0x2d
	IFT_V36                           = 0x41
	IFT_V37                           = 0x78
	IFT_VDSL                          = 0x61
	IFT_VIRTUALIPADDRESS              = 0x70
	IFT_VIRTUALTG                     = 0xca
	IFT_VOICEDID                      = 0xd5
	IFT_VOICEEM                       = 0x64
	IFT_VOICEEMFGD                    = 0xd3
	IFT_VOICEENCAP                    = 0x67
	IFT_VOICEFGDEANA                  = 0xd4
	IFT_VOICEFXO                      = 0x65
	IFT_VOICEFXS                      = 0x66
	IFT_VOICEOVERATM                  = 0x98
	IFT_VOICEOVERCABLE                = 0xc6
	IFT_VOICEOVERFRAMERELAY           = 0x99
	IFT_VOICEOVERIP                   = 0x68
	IFT_WIREGUARD                     = 0xfb
	IFT_X213                          = 0x5d
	IFT_X25                           = 0x5
	IFT_X25DDN                        = 0x4
	IFT_X25HUNTGROUP                  = 0x7a
	IFT_X25MLP                        = 0x79
	IFT_X25PLE                        = 0x28
	IFT_XETHER                        = 0x1a
	IGNBRK                            = 0x1
	IGNCR                             = 0x80
	IGNPAR                            = 0x4
	IMAXBEL                           = 0x2000
	INLCR                             = 0x40
	INPCK                             = 0x10
	IN_CLASSA_HOST                    = 0xffffff
	IN_CLASSA_MAX                     = 0x80
	IN_CLASSA_NET                     = 0xff000000
	IN_CLASSA_NSHIFT                  = 0x18
	IN_CLASSB_HOST                    = 0xffff
	IN_CLASSB_MAX                     = 0x10000
	IN_CLASSB_NET                     = 0xffff0000
	IN_CLASSB_NSHIFT                  = 0x10
	IN_CLASSC_HOST                    = 0xff
	IN_CLASSC_NET                     = 0xffffff00
	IN_CLASSC_NSHIFT                  = 0x8
	IN_CLASSD_HOST                    = 0xfffffff
	IN_CLASSD_NET                     = 0xf0000000
	IN_CLASSD_NSHIFT                  = 0x1c
	IN_LOOPBACKNET                    = 0x7f
	IN_RFC3021_HOST                   = 0x1
	IN_RFC3021_NET                    = 0xfffffffe
	IN_RFC3021_NSHIFT                 = 0x1f
	IPPROTO_AH                        = 0x33
	IPPROTO_CARP                      = 0x70
	IPPROTO_DIVERT                    = 0x102
	IPPROTO_DONE                      = 0x101
	IPPROTO_DSTOPTS                   = 0x3c
	IPPROTO_EGP                       = 0x8
	IPPROTO_ENCAP                     = 0x62
	IPPROTO_EON                       = 0x50
	IPPROTO_ESP                       = 0x32
	IPPROTO_ETHERIP                   = 0x61
	IPPROTO_FRAGMENT                  = 0x2c
	IPPROTO_GGP                       = 0x3
	IPPROTO_GRE                       = 0x2f
	IPPROTO_HOPOPTS                   = 0x0
	IPPROTO_ICMP                      = 0x1
	IPPROTO_ICMPV6                    = 0x3a
	IPPROTO_IDP                       = 0x16
	IPPROTO_IGMP                      = 0x2
	IPPROTO_IP                        = 0x0
	IPPROTO_IPCOMP                    = 0x6c
	IPPROTO_IPIP                      = 0x4
	IPPROTO_IPV4                      = 0x4
	IPPROTO_IPV6                      = 0x29
	IPPROTO_MAX                       = 0x100
	IPPROTO_MAXID                     = 0x103
	IPPROTO_MOBILE                    = 0x37
	IPPROTO_MPLS                      = 0x89
	IPPROTO_NONE                      = 0x3b
	IPPROTO_PFSYNC                    = 0xf0
	IPPROTO_PIM                       = 0x67
	IPPROTO_PUP                       = 0xc
	IPPROTO_RAW                       = 0xff
	IPPROTO_ROUTING                   = 0x2b
	IPPROTO_RSVP                      = 0x2e
	IPPROTO_SCTP                      = 0x84
	IPPROTO_TCP                       = 0x6
	IPPROTO_TP                        = 0x1d
	IPPROTO_UDP                       = 0x11
	IPPROTO_UDPLITE                   = 0x88
	IPV6_AUTH_LEVEL                   = 0x35
	IPV6_AUTOFLOWLABEL                = 0x3b
	IPV6_CHECKSUM                     = 0x1a
	IPV6_DEFAULT_MULTICAST_HOPS       = 0x1
	IPV6_DEFAULT_MULTICAST_LOOP       = 0x1
	IPV6_DEFHLIM                      = 0x40
	IPV6_DONTFRAG                     = 0x3e
	IPV6_DSTOPTS                      = 0x32
	IPV6_ESP_NETWORK_LEVEL            = 0x37
	IPV6_ESP_TRANS_LEVEL              = 0x36
	IPV6_FAITH                        = 0x1d
	IPV6_FLOWINFO_MASK                = 0xfffffff
	IPV6_FLOWLABEL_MASK               = 0xfffff
	IPV6_FRAGTTL                      = 0x78
	IPV6_HLIMDEC                      = 0x1
	IPV6_HOPLIMIT                     = 0x2f
	IPV6_HOPOPTS                      = 0x31
	IPV6_IPCOMP_LEVEL                 = 0x3c
	IPV6_JOIN_GROUP                   = 0xc
	IPV6_LEAVE_GROUP                  = 0xd
	IPV6_MAXHLIM                      = 0xff
	IPV6_MAXPACKET                    = 0xffff
	IPV6_MINHOPCOUNT                  = 0x41
	IPV6_MMTU                         = 0x500
	IPV6_MULTICAST_HOPS               = 0xa
	IPV6_MULTICAST_IF                 = 0x9
	IPV6_MULTICAST_LOOP               = 0xb
	IPV6_NEXTHOP                      = 0x30
	IPV6_OPTIONS                      = 0x1
	IPV6_PATHMTU                      = 0x2c
	IPV6_PIPEX                        = 0x3f
	IPV6_PKTINFO                      = 0x2e
	IPV6_PORTRANGE                    = 0xe
	IPV6_PORTRANGE_DEFAULT            = 0x0
	IPV6_PORTRANGE_HIGH               = 0x1
	IPV6_PORTRANGE_LOW                = 0x2
	IPV6_RECVDSTOPTS                  = 0x28
	IPV6_RECVDSTPORT                  = 0x40
	IPV6_RECVHOPLIMIT                 = 0x25
	IPV6_RECVHOPOPTS                  = 0x27
	IPV6_RECVPATHMTU                  = 0x2b
	IPV6_RECVPKTINFO                  = 0x24
	IPV6_RECVRTHDR                    = 0x26
	IPV6_RECVTCLASS                   = 0x39
	IPV6_RTABLE                       = 0x1021
	IPV6_RTHDR                        = 0x33
	IPV6_RTHDRDSTOPTS                 = 0x23
	IPV6_RTHDR_LOOSE                  = 0x0
	IPV6_RTHDR_STRICT                 = 0x1
	IPV6_RTHDR_TYPE_0                 = 0x0
	IPV6_SOCKOPT_RESERVED1            = 0x3
	IPV6_TCLASS                       = 0x3d
	IPV6_UNICAST_HOPS                 = 0x4
	IPV6_USE_MIN_MTU                  = 0x2a
	IPV6_V6ONLY                       = 0x1b
	IPV6_VERSION                      = 0x60
	IPV6_VERSION_MASK                 = 0xf0
	IP_ADD_MEMBERSHIP                 = 0xc
	IP_AUTH_LEVEL                     = 0x14
	IP_DEFAULT_MULTICAST_LOOP         = 0x1
	IP_DEFAULT_MULTICAST_TTL          = 0x1
	IP_DF                             = 0x4000
	IP_DROP_MEMBERSHIP                = 0xd
	IP_ESP_NETWORK_LEVEL              = 0x16
	IP_ESP_TRANS_LEVEL                = 0x15
	IP_HDRINCL                        = 0x2
	IP_IPCOMP_LEVEL                   = 0x1d
	IP_IPDEFTTL                       = 0x25
	IP_IPSECFLOWINFO                  = 0x24
	IP_IPSEC_LOCAL_AUTH               = 0x1b
	IP_IPSEC_LOCAL_CRED               = 0x19
	IP_IPSEC_LOCAL_ID                 = 0x17
	IP_IPSEC_REMOTE_AUTH              = 0x1c
	IP_IPSEC_REMOTE_CRED              = 0x1a
	IP_IPSEC_REMOTE_ID                = 0x18
	IP_MAXPACKET                      = 0xffff
	IP_MAX_MEMBERSHIPS                = 0xfff
	IP_MF                             = 0x2000
	IP_MINTTL                         = 0x20
	IP_MIN_MEMBERSHIPS                = 0xf
	IP_MSS                            = 0x240
	IP_MULTICAST_IF                   = 0x9
	IP_MULTICAST_LOOP                 = 0xb
	IP_MULTICAST_TTL                  = 0xa
	IP_OFFMASK                        = 0x1fff
	IP_OPTIONS                        = 0x1
	IP_PIPEX                          = 0x22
	IP_PORTRANGE                      = 0x13
	IP_PORTRANGE_DEFAULT              = 0x0
	IP_PORTRANGE_HIGH                 = 0x1
	IP_PORTRANGE_LOW                  = 0x2
	IP_RECVDSTADDR                    = 0x7
	IP_RECVDSTPORT                    = 0x21
	IP_RECVIF                         = 0x1e
	IP_RECVOPTS                       = 0x5
	IP_RECVRETOPTS                    = 0x6
	IP_RECVRTABLE                     = 0x23
	IP_RECVTTL                        = 0x1f
	IP_RETOPTS                        = 0x8
	IP_RF                             = 0x8000
	IP_RTABLE                         = 0x1021
	IP_SENDSRCADDR                    = 0x7
	IP_TOS                            = 0x3
	IP_TTL                            = 0x4
	ISIG                              = 0x80
	ISTRIP                            = 0x20
	ITIMER_PROF                       = 0x2
	ITIMER_REAL                       = 0x0
	ITIMER_VIRTUAL                    = 0x1
	IUCLC                             = 0x1000
	IXANY                             = 0x800
	IXOFF                             = 0x400
	IXON                              = 0x200
	KERN_HOSTNAME                     = 0xa
	KERN_OSRELEASE                    = 0x2
	KERN_OSTYPE                       = 0x1
	KERN_VERSION                      = 0x4
	LCNT_OVERLOAD_FLUSH               = 0x6
	LOCK_EX                           = 0x2
	LOCK_NB                           = 0x4
	LOCK_SH                           = 0x1
	LOCK_UN                           = 0x8
	MADV_DONTNEED                     = 0x4
	MADV_FREE                         = 0x6
	MADV_NORMAL                       = 0x0
	MADV_RANDOM                       = 0x1
	MADV_SEQUENTIAL                   = 0x2
	MADV_SPACEAVAIL                   = 0x5
	MADV_WILLNEED                     = 0x3
	MAP_ANON                          = 0x1000
	MAP_ANONYMOUS                     = 0x1000
	MAP_CONCEAL                       = 0x8000
	MAP_COPY                          = 0x2
	MAP_FILE                          = 0x0
	MAP_FIXED                         = 0x10
	MAP_FLAGMASK                      = 0xfff7
	MAP_HASSEMAPHORE                  = 0x0
	MAP_INHERIT                       = 0x0
	MAP_INHERIT_COPY                  = 0x1
	MAP_INHERIT_NONE                  = 0x2
	MAP_INHERIT_SHARE                 = 0x0
	MAP_INHERIT_ZERO                  = 0x3
	MAP_NOEXTEND                      = 0x0
	MAP_NORESERVE                     = 0x0
	MAP_PRIVATE                       = 0x2
	MAP_RENAME                        = 0x0
	MAP_SHARED                        = 0x1
	MAP_STACK                         = 0x4000
	MAP_TRYFIXED                      = 0x0
	MCL_CURRENT                       = 0x1
	MCL_FUTURE                        = 0x2
	MNT_ASYNC                         = 0x40
	MNT_DEFEXPORTED                   = 0x200
	MNT_DELEXPORT                     = 0x20000
	MNT_DOOMED                        = 0x8000000
	MNT_EXPORTANON                    = 0x400
	MNT_EXPORTED                      = 0x100
	MNT_EXRDONLY                      = 0x80
	MNT_FORCE                         = 0x80000
	MNT_LAZY                          = 0x3
	MNT_LOCAL                         = 0x1000
	MNT_NOATIME                       = 0x8000
	MNT_NODEV                         = 0x10
	MNT_NOEXEC                        = 0x4
	MNT_NOPERM                        = 0x20
	MNT_NOSUID                        = 0x8
	MNT_NOWAIT                        = 0x2
	MNT_QUOTA                         = 0x2000
	MNT_RDONLY                        = 0x1
	MNT_RELOAD                        = 0x40000
	MNT_ROOTFS                        = 0x4000
	MNT_SOFTDEP                       = 0x4000000
	MNT_STALLED                       = 0x100000
	MNT_SWAPPABLE                     = 0x200000
	MNT_SYNCHRONOUS                   = 0x2
	MNT_UPDATE                        = 0x10000
	MNT_VISFLAGMASK                   = 0x400ffff
	MNT_WAIT                          = 0x1
	MNT_WANTRDWR                      = 0x2000000
	MNT_WXALLOWED                     = 0x800
	MOUNT_AFS                         = "afs"
	MOUNT_CD9660                      = "cd9660"
	MOUNT_EXT2FS                      = "ext2fs"
	MOUNT_FFS                         = "ffs"
	MOUNT_FUSEFS                      = "fuse"
	MOUNT_MFS                         = "mfs"
	MOUNT_MSDOS                       = "msdos"
	MOUNT_NCPFS                       = "ncpfs"
	MOUNT_NFS                         = "nfs"
	MOUNT_NTFS                        = "ntfs"
	MOUNT_TMPFS                       = "tmpfs"
	MOUNT_UDF                         = "udf"
	MOUNT_UFS                         = "ffs"
	MSG_BCAST                         = 0x100
	MSG_CMSG_CLOEXEC                  = 0x800
	MSG_CTRUNC                        = 0x20
	MSG_DONTROUTE                     = 0x4
	MSG_DONTWAIT                      = 0x80
	MSG_EOR                           = 0x8
	MSG_MCAST                         = 0x200
	MSG_NOSIGNAL                      = 0x400
	MSG_OOB                           = 0x1
	MSG_PEEK                          = 0x2
	MSG_TRUNC                         = 0x10
	MSG_WAITALL                       = 0x40
	MSG_WAITFORONE                    = 0x1000
	MS_ASYNC                          = 0x1
	MS_INVALIDATE                     = 0x4
	MS_SYNC                           = 0x2
	NAME_MAX                          = 0xff
	NET_RT_DUMP                       = 0x1
	NET_RT_FLAGS                      = 0x2
	NET_RT_IFLIST                     = 0x3
	NET_RT_IFNAMES                    = 0x6
	NET_RT_MAXID                      = 0x8
	NET_RT_SOURCE                     = 0x7
	NET_RT_STATS                      = 0x4
	NET_RT_TABLE                      = 0x5
	NFDBITS                           = 0x20
	NOFLSH                            = 0x80000000
	NOKERNINFO                        = 0x2000000
	NOTE_ATTRIB                       = 0x8
	NOTE_CHANGE                       = 0x1
	NOTE_CHILD                        = 0x4
	NOTE_DELETE                       = 0x1
	NOTE_EOF                          = 0x2
	NOTE_EXEC                         = 0x20000000
	NOTE_EXIT                         = 0x80000000
	NOTE_EXTEND                       = 0x4
	NOTE_FORK                         = 0x40000000
	NOTE_LINK                         = 0x10
	NOTE_LOWAT                        = 0x1
	NOTE_OOB                          = 0x4
	NOTE_PCTRLMASK                    = 0xf0000000
	NOTE_PDATAMASK                    = 0xfffff
	NOTE_RENAME                       = 0x20
	NOTE_REVOKE                       = 0x40
	NOTE_TRACK                        = 0x1
	NOTE_TRACKERR                     = 0x2
	NOTE_TRUNCATE                     = 0x80
	NOTE_WRITE                        = 0x2
	OCRNL                             = 0x10
	OLCUC                             = 0x20
	ONLCR                             = 0x2
	ONLRET                            = 0x80
	ONOCR                             = 0x40
	ONOEOT                            = 0x8
	OPOST                             = 0x1
	OXTABS                            = 0x4
	O_ACCMODE                         = 0x3
	O_APPEND                          = 0x8
	O_ASYNC                           = 0x40
	O_CLOEXEC                         = 0x10000
	O_CREAT                           = 0x200
	O_DIRECTORY                       = 0x20000
	O_DSYNC                           = 0x80
	O_EXCL                            = 0x800
	O_EXLOCK                          = 0x20
	O_FSYNC                           = 0x80
	O_NDELAY                          = 0x4
	O_NOCTTY                          = 0x8000
	O_NOFOLLOW                        = 0x100
	O_NONBLOCK                        = 0x4
	O_RDONLY                          = 0x0
	O_RDWR                            = 0x2
	O_RSYNC                           = 0x80
	O_SHLOCK                          = 0x10
	O_SYNC                            = 0x80
	O_TRUNC                           = 0x400
	O_WRONLY                          = 0x1
	PARENB                            = 0x1000
	PARMRK                            = 0x8
	PARODD                            = 0x2000
	PENDIN                            = 0x20000000
	PF_FLUSH                          = 0x1
	PRIO_PGRP                         = 0x1
	PRIO_PROCESS                      = 0x0
	PRIO_USER                         = 0x2
	PROT_EXEC                         = 0x4
	PROT_NONE                         = 0x0
	PROT_READ                         = 0x1
	PROT_WRITE                        = 0x2
	RLIMIT_CORE                       = 0x4
	RLIMIT_CPU                        = 0x0
	RLIMIT_DATA                       = 0x2
	RLIMIT_FSIZE                      = 0x1
	RLIMIT_MEMLOCK                    = 0x6
	RLIMIT_NOFILE                     = 0x8
	RLIMIT_NPROC                      = 0x7
	RLIMIT_RSS                        = 0x5
	RLIMIT_STACK                      = 0x3
	RLIM_INFINITY                     = 0x7fffffffffffffff
	RTAX_AUTHOR                       = 0x6
	RTAX_BFD                          = 0xb
	RTAX_BRD                          = 0x7
	RTAX_DNS                          = 0xc
	RTAX_DST                          = 0x0
	RTAX_GATEWAY                      = 0x1
	RTAX_GENMASK                      = 0x3
	RTAX_IFA                          = 0x5
	RTAX_IFP                          = 0x4
	RTAX_LABEL                        = 0xa
	RTAX_MAX                          = 0xf
	RTAX_NETMASK                      = 0x2
	RTAX_SEARCH                       = 0xe
	RTAX_SRC                          = 0x8
	RTAX_SRCMASK                      = 0x9
	RTAX_STATIC                       = 0xd
	RTA_AUTHOR                        = 0x40
	RTA_BFD                           = 0x800
	RTA_BRD                           = 0x80
	RTA_DNS                           = 0x1000
	RTA_DST                           = 0x1
	RTA_GATEWAY                       = 0x2
	RTA_GENMASK                       = 0x8
	RTA_IFA                           = 0x20
	RTA_IFP                           = 0x10
	RTA_LABEL                         = 0x400
	RTA_NETMASK                       = 0x4
	RTA_SEARCH                        = 0x4000
	RTA_SRC                           = 0x100
	RTA_SRCMASK                       = 0x200
	RTA_STATIC                        = 0x2000
	RTF_ANNOUNCE                      = 0x4000
	RTF_BFD                           = 0x1000000
	RTF_BLACKHOLE                     = 0x1000
	RTF_BROADCAST                     = 0x400000
	RTF_CACHED                        = 0x20000
	RTF_CLONED                        = 0x10000
	RTF_CLONING                       = 0x100
	RTF_CONNECTED                     = 0x800000
	RTF_DONE                          = 0x40
	RTF_DYNAMIC                       = 0x10
	RTF_FMASK                         = 0x110fc08
	RTF_GATEWAY                       = 0x2
	RTF_HOST                          = 0x4
	RTF_LLINFO                        = 0x400
	RTF_LOCAL                         = 0x200000
	RTF_MODIFIED                      = 0x20
	RTF_MPATH                         = 0x40000
	RTF_MPLS                          = 0x100000
	RTF_MULTICAST                     = 0x200
	RTF_PERMANENT_ARP                 = 0x2000
	RTF_PROTO1                        = 0x8000
	RTF_PROTO2                        = 0x4000
	RTF_PROTO3                        = 0x2000
	RTF_REJECT                        = 0x8
	RTF_STATIC                        = 0x800
	RTF_UP                            = 0x1
	RTF_USETRAILERS                   = 0x8000
	RTM_80211INFO                     = 0x15
	RTM_ADD                           = 0x1
	RTM_BFD                           = 0x12
	RTM_CHANGE                        = 0x3
	RTM_CHGADDRATTR                   = 0x14
	RTM_DELADDR                       = 0xd
	RTM_DELETE                        = 0x2
	RTM_DESYNC                        = 0x10
	RTM_GET                           = 0x4
	RTM_IFANNOUNCE                    = 0xf
	RTM_IFINFO                        = 0xe
	RTM_INVALIDATE                    = 0x11
	RTM_LOSING                        = 0x5
	RTM_MAXSIZE                       = 0x800
	RTM_MISS                          = 0x7
	RTM_NEWADDR                       = 0xc
	RTM_PROPOSAL                      = 0x13
	RTM_REDIRECT                      = 0x6
	RTM_RESOLVE                       = 0xb
	RTM_SOURCE                        = 0x16
	RTM_VERSION                       = 0x5
	RTV_EXPIRE                        = 0x4
	RTV_HOPCOUNT                      = 0x2
	RTV_MTU                           = 0x1
	RTV_RPIPE                         = 0x8
	RTV_RTT                           = 0x40
	RTV_RTTVAR                        = 0x80
	RTV_SPIPE                         = 0x10
	RTV_SSTHRESH                      = 0x20
	RT_TABLEID_BITS                   = 0x8
	RT_TABLEID_MASK                   = 0xff
	RT_TABLEID_MAX                    = 0xff
	RUSAGE_CHILDREN                   = -0x1
	RUSAGE_SELF                       = 0x0
	RUSAGE_THREAD                     = 0x1
	SCM_RIGHTS                        = 0x1
	SCM_TIMESTAMP                     = 0x4
	SEEK_CUR                          = 0x1
	SEEK_END                          = 0x2
	SEEK_SET                          = 0x0
	SHUT_RD                           = 0x0
	SHUT_RDWR                         = 0x2
	SHUT_WR                           = 0x1
	SIOCADDMULTI                      = 0x80206931
	SIOCAIFADDR                       = 0x8040691a
	SIOCAIFGROUP                      = 0x80286987
	SIOCATMARK                        = 0x40047307
	SIOCBRDGADD                       = 0x8060693c
	SIOCBRDGADDL                      = 0x80606949
	SIOCBRDGADDS                      = 0x80606941
	SIOCBRDGARL                       = 0x808c694d
	SIOCBRDGDADDR                     = 0x81286947
	SIOCBRDGDEL                       = 0x8060693d
	SIOCBRDGDELS                      = 0x80606942
	SIOCBRDGFLUSH                     = 0x80606948
	SIOCBRDGFRL                       = 0x808c694e
	SIOCBRDGGCACHE                    = 0xc0146941
	SIOCBRDGGFD                       = 0xc0146952
	SIOCBRDGGHT                       = 0xc0146951
	SIOCBRDGGIFFLGS                   = 0xc060693e
	SIOCBRDGGMA                       = 0xc0146953
	SIOCBRDGGPARAM                    = 0xc0406958
	SIOCBRDGGPRI                      = 0xc0146950
	SIOCBRDGGRL                       = 0xc030694f
	SIOCBRDGGTO                       = 0xc0146946
	SIOCBRDGIFS                       = 0xc0606942
	SIOCBRDGRTS                       = 0xc0206943
	SIOCBRDGSADDR                     = 0xc1286944
	SIOCBRDGSCACHE                    = 0x80146940
	SIOCBRDGSFD                       = 0x80146952
	SIOCBRDGSHT                       = 0x80146951
	SIOCBRDGSIFCOST                   = 0x80606955
	SIOCBRDGSIFFLGS                   = 0x8060693f
	SIOCBRDGSIFPRIO                   = 0x80606954
	SIOCBRDGSIFPROT                   = 0x8060694a
	SIOCBRDGSMA                       = 0x80146953
	SIOCBRDGSPRI                      = 0x80146950
	SIOCBRDGSPROTO                    = 0x8014695a
	SIOCBRDGSTO                       = 0x80146945
	SIOCBRDGSTXHC                     = 0x80146959
	SIOCDELLABEL                      = 0x80206997
	SIOCDELMULTI                      = 0x80206932
	SIOCDIFADDR                       = 0x80206919
	SIOCDIFGROUP                      = 0x80286989
	SIOCDIFPARENT                     = 0x802069b4
	SIOCDIFPHYADDR                    = 0x80206949
	SIOCDPWE3NEIGHBOR                 = 0x802069de
	SIOCDVNETID                       = 0x802069af
	SIOCGETKALIVE                     = 0xc01869a4
	SIOCGETLABEL                      = 0x8020699a
	SIOCGETMPWCFG                     = 0xc02069ae
	SIOCGETPFLOW                      = 0xc02069fe
	SIOCGETPFSYNC                     = 0xc02069f8
	SIOCGETSGCNT                      = 0xc0207534
	SIOCGETVIFCNT                     = 0xc0287533
	SIOCGETVLAN                       = 0xc0206990
	SIOCGIFADDR                       = 0xc0206921
	SIOCGIFBRDADDR                    = 0xc0206923
	SIOCGIFCONF                       = 0xc0106924
	SIOCGIFDATA                       = 0xc020691b
	SIOCGIFDESCR                      = 0xc0206981
	SIOCGIFDSTADDR                    = 0xc0206922
	SIOCGIFFLAGS                      = 0xc0206911
	SIOCGIFGATTR                      = 0xc028698b
	SIOCGIFGENERIC                    = 0xc020693a
	SIOCGIFGLIST                      = 0xc028698d
	SIOCGIFGMEMB                      = 0xc028698a
	SIOCGIFGROUP                      = 0xc0286988
	SIOCGIFHARDMTU                    = 0xc02069a5
	SIOCGIFLLPRIO                     = 0xc02069b6
	SIOCGIFMEDIA                      = 0xc0406938
	SIOCGIFMETRIC                     = 0xc0206917
	SIOCGIFMTU                        = 0xc020697e
	SIOCGIFNETMASK                    = 0xc0206925
	SIOCGIFPAIR                       = 0xc02069b1
	SIOCGIFPARENT                     = 0xc02069b3
	SIOCGIFPRIORITY                   = 0xc020699c
	SIOCGIFRDOMAIN                    = 0xc02069a0
	SIOCGIFRTLABEL                    = 0xc0206983
	SIOCGIFRXR                        = 0x802069aa
	SIOCGIFSFFPAGE                    = 0xc1126939
	SIOCGIFXFLAGS                     = 0xc020699e
	SIOCGLIFPHYADDR                   = 0xc218694b
	SIOCGLIFPHYDF                     = 0xc02069c2
	SIOCGLIFPHYECN                    = 0xc02069c8
	SIOCGLIFPHYRTABLE                 = 0xc02069a2
	SIOCGLIFPHYTTL                    = 0xc02069a9
	SIOCGPGRP                         = 0x40047309
	SIOCGPWE3                         = 0xc0206998
	SIOCGPWE3CTRLWORD                 = 0xc02069dc
	SIOCGPWE3FAT                      = 0xc02069dd
	SIOCGPWE3NEIGHBOR                 = 0xc21869de
	SIOCGRXHPRIO                      = 0xc02069db
	SIOCGSPPPPARAMS                   = 0xc0206994
	SIOCGTXHPRIO                      = 0xc02069c6
	SIOCGUMBINFO                      = 0xc02069be
	SIOCGUMBPARAM                     = 0xc02069c0
	SIOCGVH                           = 0xc02069f6
	SIOCGVNETFLOWID                   = 0xc02069c4
	SIOCGVNETID                       = 0xc02069a7
	SIOCIFAFATTACH                    = 0x801169ab
	SIOCIFAFDETACH                    = 0x801169ac
	SIOCIFCREATE                      = 0x8020697a
	SIOCIFDESTROY                     = 0x80206979
	SIOCIFGCLONERS                    = 0xc0106978
	SIOCSETKALIVE                     = 0x801869a3
	SIOCSETLABEL                      = 0x80206999
	SIOCSETMPWCFG                     = 0x802069ad
	SIOCSETPFLOW                      = 0x802069fd
	SIOCSETPFSYNC                     = 0x802069f7
	SIOCSETVLAN                       = 0x8020698f
	SIOCSIFADDR                       = 0x8020690c
	SIOCSIFBRDADDR                    = 0x80206913
	SIOCSIFDESCR                      = 0x80206980
	SIOCSIFDSTADDR                    = 0x8020690e
	SIOCSIFFLAGS                      = 0x80206910
	SIOCSIFGATTR                      = 0x8028698c
	SIOCSIFGENERIC                    = 0x80206939
	SIOCSIFLLADDR                     = 0x8020691f
	SIOCSIFLLPRIO                     = 0x802069b5
	SIOCSIFMEDIA                      = 0xc0206937
	SIOCSIFMETRIC                     = 0x80206918
	SIOCSIFMTU                        = 0x8020697f
	SIOCSIFNETMASK                    = 0x80206916
	SIOCSIFPAIR                       = 0x802069b0
	SIOCSIFPARENT                     = 0x802069b2
	SIOCSIFPRIORITY                   = 0x8020699b
	SIOCSIFRDOMAIN                    = 0x8020699f
	SIOCSIFRTLABEL                    = 0x80206982
	SIOCSIFXFLAGS                     = 0x8020699d
	SIOCSLIFPHYADDR                   = 0x8218694a
	SIOCSLIFPHYDF                     = 0x802069c1
	SIOCSLIFPHYECN                    = 0x802069c7
	SIOCSLIFPHYRTABLE                 = 0x802069a1
	SIOCSLIFPHYTTL                    = 0x802069a8
	SIOCSPGRP                         = 0x80047308
	SIOCSPWE3CTRLWORD                 = 0x802069dc
	SIOCSPWE3FAT                      = 0x802069dd
	SIOCSPWE3NEIGHBOR                 = 0x821869de
	SIOCSRXHPRIO                      = 0x802069db
	SIOCSSPPPPARAMS                   = 0x80206993
	SIOCSTXHPRIO                      = 0x802069c5
	SIOCSUMBPARAM                     = 0x802069bf
	SIOCSVH                           = 0xc02069f5
	SIOCSVNETFLOWID                   = 0x802069c3
	SIOCSVNETID                       = 0x802069a6
	SOCK_CLOEXEC                      = 0x8000
	SOCK_DGRAM                        = 0x2
	SOCK_DNS                          = 0x1000
	SOCK_NONBLOCK                     = 0x4000
	SOCK_RAW                          = 0x3
	SOCK_RDM                          = 0x4
	SOCK_SEQPACKET                    = 0x5
	SOCK_STREAM                       = 0x1
	SOL_SOCKET                        = 0xffff
	SOMAXCONN                         = 0x80
	SO_ACCEPTCONN                     = 0x2
	SO_BINDANY                        = 0x1000
	SO_BROADCAST                      = 0x20
	SO_DEBUG                          = 0x1
	SO_DOMAIN                         = 0x1024
	SO_DONTROUTE                      = 0x10
	SO_ERROR                          = 0x1007
	SO_KEEPALIVE                      = 0x8
	SO_LINGER                         = 0x80
	SO_NETPROC                        = 0x1020
	SO_OOBINLINE                      = 0x100
	SO_PEERCRED                       = 0x1022
	SO_PROTOCOL                       = 0x1025
	SO_RCVBUF                         = 0x1002
	SO_RCVLOWAT                       = 0x1004
	SO_RCVTIMEO                       = 0x1006
	SO_REUSEADDR                      = 0x4
	SO_REUSEPORT                      = 0x200
	SO_RTABLE                         = 0x1021
	SO_SNDBUF                         = 0x1001
	SO_SNDLOWAT                       = 0x1003
	SO_SNDTIMEO                       = 0x1005
	SO_SPLICE                         = 0x1023
	SO_TIMESTAMP                      = 0x800
	SO_TYPE                           = 0x1008
	SO_USELOOPBACK                    = 0x40
	SO_ZEROIZE                        = 0x2000
	S_BLKSIZE                         = 0x200
	S_IEXEC                           = 0x40
	S_IFBLK                           = 0x6000
	S_IFCHR                           = 0x2000
	S_IFDIR                           = 0x4000
	S_IFIFO                           = 0x1000
	S_IFLNK                           = 0xa000
	S_IFMT                            = 0xf000
	S_IFREG                           = 0x8000
	S_IFSOCK                          = 0xc000
	S_IREAD                           = 0x100
	S_IRGRP                           = 0x20
	S_IROTH                           = 0x4
	S_IRUSR                           = 0x100
	S_IRWXG                           = 0x38
	S_IRWXO                           = 0x7
	S_IRWXU                           = 0x1c0
	S_ISGID                           = 0x400
	S_ISTXT                           = 0x200
	S_ISUID                           = 0x800
	S_ISVTX                           = 0x200
	S_IWGRP                           = 0x10
	S_IWOTH                           = 0x2
	S_IWRITE                          = 0x80
	S_IWUSR                           = 0x80
	S_IXGRP                           = 0x8
	S_IXOTH                           = 0x1
	S_IXUSR                           = 0x40
	TCIFLUSH                          = 0x1
	TCIOFF                            = 0x3
	TCIOFLUSH                         = 0x3
	TCION                             = 0x4
	TCOFLUSH                          = 0x2
	TCOOFF                            = 0x1
	TCOON                             = 0x2
	TCPOPT_EOL                        = 0x0
	TCPOPT_MAXSEG                     = 0x2
	TCPOPT_NOP                        = 0x1
	TCPOPT_SACK                       = 0x5
	TCPOPT_SACK_HDR                   = 0x1010500
	TCPOPT_SACK_PERMITTED             = 0x4
	TCPOPT_SACK_PERMIT_HDR            = 0x1010402
	TCPOPT_SIGNATURE                  = 0x13
	TCPOPT_TIMESTAMP                  = 0x8
	TCPOPT_TSTAMP_HDR                 = 0x101080a
	TCPOPT_WINDOW                     = 0x3
	TCP_INFO                          = 0x9
	TCP_MAXSEG                        = 0x2
	TCP_MAXWIN                        = 0xffff
	TCP_MAX_SACK                      = 0x3
	TCP_MAX_WINSHIFT                  = 0xe
	TCP_MD5SIG                        = 0x4
	TCP_MSS                           = 0x200
	TCP_NODELAY                       = 0x1
	TCP_NOPUSH                        = 0x10
	TCP_SACKHOLE_LIMIT                = 0x80
	TCP_SACK_ENABLE                   = 0x8
	TCSAFLUSH                         = 0x2
	TIMER_ABSTIME                     = 0x1
	TIMER_RELTIME                     = 0x0
	TIOCCBRK                          = 0x2000747a
	TIOCCDTR                          = 0x20007478
	TIOCCHKVERAUTH                    = 0x2000741e
	TIOCCLRVERAUTH                    = 0x2000741d
	TIOCCONS                          = 0x80047462
	TIOCDRAIN                         = 0x2000745e
	TIOCEXCL                          = 0x2000740d
	TIOCEXT                           = 0x80047460
	TIOCFLAG_CLOCAL                   = 0x2
	TIOCFLAG_CRTSCTS                  = 0x4
	TIOCFLAG_MDMBUF                   = 0x8
	TIOCFLAG_PPS                      = 0x10
	TIOCFLAG_SOFTCAR                  = 0x1
	TIOCFLUSH                         = 0x80047410
	TIOCGETA                          = 0x402c7413
	TIOCGETD                          = 0x4004741a
	TIOCGFLAGS                        = 0x4004745d
	TIOCGPGRP                         = 0x40047477
	TIOCGSID                          = 0x40047463
	TIOCGTSTAMP                       = 0x4010745b
	TIOCGWINSZ                        = 0x40087468
	TIOCMBIC                          = 0x8004746b
	TIOCMBIS                          = 0x8004746c
	TIOCMGET                          = 0x4004746a
	TIOCMODG                          = 0x4004746a
	TIOCMODS                          = 0x8004746d
	TIOCMSET                          = 0x8004746d
	TIOCM_CAR                         = 0x40
	TIOCM_CD                          = 0x40
	TIOCM_CTS                         = 0x20
	TIOCM_DSR                         = 0x100
	TIOCM_DTR                         = 0x2
	TIOCM_LE                          = 0x1
	TIOCM_RI                          = 0x80
	TIOCM_RNG                         = 0x80
	TIOCM_RTS                         = 0x4
	TIOCM_SR                          = 0x10
	TIOCM_ST                          = 0x8
	TIOCNOTTY                         = 0x20007471
	TIOCNXCL                          = 0x2000740e
	TIOCOUTQ                          = 0x40047473
	TIOCPKT                           = 0x80047470
	TIOCPKT_DATA                      = 0x0
	TIOCPKT_DOSTOP                    = 0x20
	TIOCPKT_FLUSHREAD                 = 0x1
	TIOCPKT_FLUSHWRITE                = 0x2
	TIOCPKT_IOCTL                     = 0x40
	TIOCPKT_NOSTOP                    = 0x10
	TIOCPKT_START                     = 0x8
	TIOCPKT_STOP                      = 0x4
	TIOCREMOTE                        = 0x80047469
	TIOCSBRK                          = 0x2000747b
	TIOCSCTTY                         = 0x20007461
	TIOCSDTR                          = 0x20007479
	TIOCSETA                          = 0x802c7414
	TIOCSETAF                         = 0x802c7416
	TIOCSETAW                         = 0x802c7415
	TIOCSETD                          = 0x8004741b
	TIOCSETVERAUTH                    = 0x8004741c
	TIOCSFLAGS                        = 0x8004745c
	TIOCSIG                           = 0x8004745f
	TIOCSPGRP                         = 0x80047476
	TIOCSTART                         = 0x2000746e
	TIOCSTAT                          = 0x20007465
	TIOCSTOP                          = 0x2000746f
	TIOCSTSTAMP                       = 0x8008745a
	TIOCSWINSZ                        = 0x80087467
	TIOCUCNTL                         = 0x80047466
	TIOCUCNTL_CBRK                    = 0x7a
	TIOCUCNTL_SBRK                    = 0x7b
	TOSTOP                            = 0x400000
	UTIME_NOW                         = -0x2
	UTIME_OMIT                        = -0x1
	VDISCARD                          = 0xf
	VDSUSP                            = 0xb
	VEOF                              = 0x0
	VEOL                              = 0x1
	VEOL2                             = 0x2
	VERASE                            = 0x3
	VINTR                             = 0x8
	VKILL                             = 0x5
	VLNEXT                            = 0xe
	VMIN                              = 0x10
	VM_ANONMIN                        = 0x7
	VM_LOADAVG                        = 0x2
	VM_MALLOC_CONF                    = 0xc
	VM_MAXID                          = 0xd
	VM_MAXSLP                         = 0xa
	VM_METER                          = 0x1
	VM_NKMEMPAGES                     = 0x6
	VM_PSSTRINGS                      = 0x3
	VM_SWAPENCRYPT                    = 0x5
	VM_USPACE                         = 0xb
	VM_UVMEXP                         = 0x4
	VM_VNODEMIN                       = 0x9
	VM_VTEXTMIN                       = 0x8
	VQUIT                             = 0x9
	VREPRINT                          = 0x6
	VSTART                            = 0xc
	VSTATUS                           = 0x12
	VSTOP                             = 0xd
	VSUSP                             = 0xa
	VTIME                             = 0x11
	VWERASE                           = 0x4
	WALTSIG                           = 0x4
	WCONTINUED                        = 0x8
	WCOREFLAG                         = 0x80
	WNOHANG                           = 0x1
	WUNTRACED                         = 0x2
	XCASE                             = 0x1000000
)

// Errors
const (
	E2BIG           = syscall.Errno(0x7)
	EACCES          = syscall.Errno(0xd)
	EADDRINUSE      = syscall.Errno(0x30)
	EADDRNOTAVAIL   = syscall.Errno(0x31)
	EAFNOSUPPORT    = syscall.Errno(0x2f)
	EAGAIN          = syscall.Errno(0x23)
	EALREADY        = syscall.Errno(0x25)
	EAUTH           = syscall.Errno(0x50)
	EBADF           = syscall.Errno(0x9)
	EBADMSG         = syscall.Errno(0x5c)
	EBADRPC         = syscall.Errno(0x48)
	EBUSY           = syscall.Errno(0x10)
	ECANCELED       = syscall.Errno(0x58)
	ECHILD          = syscall.Errno(0xa)
	ECONNABORTED    = syscall.Errno(0x35)
	ECONNREFUSED    = syscall.Errno(0x3d)
	ECONNRESET      = syscall.Errno(0x36)
	EDEADLK         = syscall.Errno(0xb)
	EDESTADDRREQ    = syscall.Errno(0x27)
	EDOM            = syscall.Errno(0x21)
	EDQUOT          = syscall.Errno(0x45)
	EEXIST          = syscall.Errno(0x11)
	EFAULT          = syscall.Errno(0xe)
	EFBIG           = syscall.Errno(0x1b)
	EFTYPE          = syscall.Errno(0x4f)
	EHOSTDOWN       = syscall.Errno(0x40)
	EHOSTUNREACH    = syscall.Errno(0x41)
	EIDRM           = syscall.Errno(0x59)
	EILSEQ          = syscall.Errno(0x54)
	EINPROGRESS     = syscall.Errno(0x24)
	EINTR           = syscall.Errno(0x4)
	EINVAL          = syscall.Errno(0x16)
	EIO             = syscall.Errno(0x5)
	EIPSEC          = syscall.Errno(0x52)
	EISCONN         = syscall.Errno(0x38)
	EISDIR          = syscall.Errno(0x15)
	ELAST           = syscall.Errno(0x5f)
	ELOOP           = syscall.Errno(0x3e)
	EMEDIUMTYPE     = syscall.Errno(0x56)
	EMFILE          = syscall.Errno(0x18)
	EMLINK          = syscall.Errno(0x1f)
	EMSGSIZE        = syscall.Errno(0x28)
	ENAMETOOLONG    = syscall.Errno(0x3f)
	ENEEDAUTH       = syscall.Errno(0x51)
	ENETDOWN        = syscall.Errno(0x32)
	ENETRESET       = syscall.Errno(0x34)
	ENETUNREACH     = syscall.Errno(0x33)
	ENFILE          = syscall.Errno(0x17)
	ENOATTR         = syscall.Errno(0x53)
	ENOBUFS         = syscall.Errno(0x37)
	ENODEV          = syscall.Errno(0x13)
	ENOENT          = syscall.Errno(0x2)
	ENOEXEC         = syscall.Errno(0x8)
	ENOLCK          = syscall.Errno(0x4d)
	ENOMEDIUM       = syscall.Errno(0x55)
	ENOMEM          = syscall.Errno(0xc)
	ENOMSG          = syscall.Errno(0x5a)
	ENOPROTOOPT     = syscall.Errno(0x2a)
	ENOSPC          = syscall.Errno(0x1c)
	ENOSYS          = syscall.Errno(0x4e)
	ENOTBLK         = syscall.Errno(0xf)
	ENOTCONN        = syscall.Errno(0x39)
	ENOTDIR         = syscall.Errno(0x14)
	ENOTEMPTY       = syscall.Errno(0x42)
	ENOTRECOVERABLE = syscall.Errno(0x5d)
	ENOTSOCK        = syscall.Errno(0x26)
	ENOTSUP         = syscall.Errno(0x5b)
	ENOTTY          = syscall.Errno(0x19)
	ENXIO           = syscall.Errno(0x6)
	EOPNOTSUPP      = syscall.Errno(0x2d)
	EOVERFLOW       = syscall.Errno(0x57)
	EOWNERDEAD      = syscall.Errno(0x5e)
	EPERM           = syscall.Errno(0x1)
	EPFNOSUPPORT    = syscall.Errno(0x2e)
	EPIPE           = syscall.Errno(0x20)
	EPROCLIM        = syscall.Errno(0x43)
	EPROCUNAVAIL    = syscall.Errno(0x4c)
	EPROGMISMATCH   = syscall.Errno(0x4b)
	EPROGUNAVAIL    = syscall.Errno(0x4a)
	EPROTO          = syscall.Errno(0x5f)
	EPROTONOSUPPORT = syscall.Errno(0x2b)
	EPROTOTYPE      = syscall.Errno(0x29)
	ERANGE          = syscall.Errno(0x22)
	EREMOTE         = syscall.Errno(0x47)
	EROFS           = syscall.Errno(0x1e)
	ERPCMISMATCH    = syscall.Errno(0x49)
	ESHUTDOWN       = syscall.Errno(0x3a)
	ESOCKTNOSUPPORT = syscall.Errno(0x2c)
	ESPIPE          = syscall.Errno(0x1d)
	ESRCH           = syscall.Errno(0x3)
	ESTALE          = syscall.Errno(0x46)
	ETIMEDOUT       = syscall.Errno(0x3c)
	ETOOMANYREFS    = syscall.Errno(0x3b)
	ETXTBSY         = syscall.Errno(0x1a)
	EUSERS          = syscall.Errno(0x44)
	EWOULDBLOCK     = syscall.Errno(0x23)
	EXDEV           = syscall.Errno(0x12)
)

// Signals
const (
	SIGABRT   = syscall.Signal(0x6)
	SIGALRM   = syscall.Signal(0xe)
	SIGBUS    = syscall.Signal(0xa)
	SIGCHLD   = syscall.Signal(0x14)
	SIGCONT   = syscall.Signal(0x13)
	SIGEMT    = syscall.Signal(0x7)
	SIGFPE    = syscall.Signal(0x8)
	SIGHUP    = syscall.Signal(0x1)
	SIGILL    = syscall.Signal(0x4)
	SIGINFO   = syscall.Signal(0x1d)
	SIGINT    = syscall.Signal(0x2)
	SIGIO     = syscall.Signal(0x17)
	SIGIOT    = syscall.Signal(0x6)
	SIGKILL   = syscall.Signal(0x9)
	SIGPIPE   = syscall.Signal(0xd)
	SIGPROF   = syscall.Signal(0x1b)
	SIGQUIT   = syscall.Signal(0x3)
	SIGSEGV   = syscall.Signal(0xb)
	SIGSTOP   = syscall.Signal(0x11)
	SIGSYS    = syscall.Signal(0xc)
	SIGTERM   = syscall.Signal(0xf)
	SIGTHR    = syscall.Signal(0x20)
	SIGTRAP   = syscall.Signal(0x5)
	SIGTSTP   = syscall.Signal(0x12)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x10)
	SIGUSR1   = syscall.Signal(0x1e)
	SIGUSR2   = syscall.Signal(0x1f)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "device not configured"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EDEADLK", "resource deadlock avoided"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "cross-device link"},
	{19, "ENODEV", "operation not supported by device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "result too large"},
	{35, "EAGAIN", "resource temporarily unavailable"},
	{36, "EINPROGRESS", "operation now in progress"},
	{37, "EALREADY", "operation already in progress"},
	{38, "ENOTSOCK", "socket operation on non-socket"},
	{39, "EDESTADDRREQ", "destination address required"},
	{40, "EMSGSIZE", "message too long"},
	{41, "EPROTOTYPE", "protocol wrong type for socket"},
	{42, "ENOPROTOOPT", "protocol not available"},
	{43, "EPROTONOSUPPORT", "protocol not supported"},
	{44, "ESOCKTNOSUPPORT", "socket type not supported"},
	{45, "EOPNOTSUPP", "operation not supported"},
	{46, "EPFNOSUPPORT", "protocol family not supported"},
	{47, "EAFNOSUPPORT", "address family not supported by protocol family"},
	{48, "EADDRINUSE", "address already in use"},
	{49, "EADDRNOTAVAIL", "can't assign requested address"},
	{50, "ENETDOWN", "network is down"},
	{51, "ENETUNREACH", "network is unreachable"},
	{52, "ENETRESET", "network dropped connection on reset"},
	{53, "ECONNABORTED", "software caused connection abort"},
	{54, "ECONNRESET", "connection reset by peer"},
	{55, "ENOBUFS", "no buffer space available"},
	{56, "EISCONN", "socket is already connected"},
	{57, "ENOTCONN", "socket is not connected"},
	{58, "ESHUTDOWN", "can't send after socket shutdown"},
	{59, "ETOOMANYREFS", "too many references: can't splice"},
	{60, "ETIMEDOUT", "operation timed out"},
	{61, "ECONNREFUSED", "connection refused"},
	{62, "ELOOP", "too many levels of symbolic links"},
	{63, "ENAMETOOLONG", "file name too long"},
	{64, "EHOSTDOWN", "host is down"},
	{65, "EHOSTUNREACH", "no route to host"},
	{66, "ENOTEMPTY", "directory not empty"},
	{67, "EPROCLIM", "too many processes"},
	{68, "EUSERS", "too many users"},
	{69, "EDQUOT", "disk quota exceeded"},
	{70, "ESTALE", "stale NFS file handle"},
	{71, "EREMOTE", "too many levels of remote in path"},
	{72, "EBADRPC", "RPC struct is bad"},
	{73, "ERPCMISMATCH", "RPC version wrong"},
	{74, "EPROGUNAVAIL", "RPC program not available"},
	{75, "EPROGMISMATCH", "program version wrong"},
	{76, "EPROCUNAVAIL", "bad procedure for program"},
	{77, "ENOLCK", "no locks available"},
	{78, "ENOSYS", "function not implemented"},
	{79, "EFTYPE", "inappropriate file type or format"},
	{80, "EAUTH", "authentication error"},
	{81, "ENEEDAUTH", "need authenticator"},
	{82, "EIPSEC", "IPsec processing failure"},
	{83, "ENOATTR", "attribute not found"},
	{84, "EILSEQ", "illegal byte sequence"},
	{85, "ENOMEDIUM", "no medium found"},
	{86, "EMEDIUMTYPE", "wrong medium type"},
	{87, "EOVERFLOW", "value too large to be stored in data type"},
	{88, "ECANCELED", "operation canceled"},
	{89, "EIDRM", "identifier removed"},
	{90, "ENOMSG", "no message of desired type"},
	{91, "ENOTSUP", "not supported"},
	{92, "EBADMSG", "bad message"},
	{93, "ENOTRECOVERABLE", "state not recoverable"},
	{94, "EOWNERDEAD", "previous owner died"},
	{95, "ELAST", "protocol error"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/BPT trap"},
	{6, "SIGIOT", "abort trap"},
	{7, "SIGEMT", "EMT trap"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus error"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGSYS", "bad system call"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGURG", "urgent I/O condition"},
	{17, "SIGSTOP", "suspended (signal)"},
	{18, "SIGTSTP", "suspended"},
	{19, "SIGCONT", "continued"},
	{20, "SIGCHLD", "child exited"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGIO", "I/O possible"},
	{24, "SIGXCPU", "cputime limit exceeded"},
	{25, "SIGXFSZ", "filesize limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window size changes"},
	{29, "SIGINFO", "information request"},
	{30, "SIGUSR1", "user defined signal 1"},
	{31, "SIGUSR2", "user defined signal 2"},
	{32, "SIGTHR", "thread AST"},
	{81920, "SIGSTKSZ", "unknown signal"},
}
 07070100000E43000081A4000000000000000000000001645E367C00013A22000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_openbsd_ppc64.go // mkerrors.sh -m64
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build ppc64 && openbsd
// +build ppc64,openbsd

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -m64 _const.go

package unix

import "syscall"

const (
	AF_APPLETALK                      = 0x10
	AF_BLUETOOTH                      = 0x20
	AF_CCITT                          = 0xa
	AF_CHAOS                          = 0x5
	AF_CNT                            = 0x15
	AF_COIP                           = 0x14
	AF_DATAKIT                        = 0x9
	AF_DECnet                         = 0xc
	AF_DLI                            = 0xd
	AF_E164                           = 0x1a
	AF_ECMA                           = 0x8
	AF_ENCAP                          = 0x1c
	AF_HYLINK                         = 0xf
	AF_IMPLINK                        = 0x3
	AF_INET                           = 0x2
	AF_INET6                          = 0x18
	AF_IPX                            = 0x17
	AF_ISDN                           = 0x1a
	AF_ISO                            = 0x7
	AF_KEY                            = 0x1e
	AF_LAT                            = 0xe
	AF_LINK                           = 0x12
	AF_LOCAL                          = 0x1
	AF_MAX                            = 0x24
	AF_MPLS                           = 0x21
	AF_NATM                           = 0x1b
	AF_NS                             = 0x6
	AF_OSI                            = 0x7
	AF_PUP                            = 0x4
	AF_ROUTE                          = 0x11
	AF_SIP                            = 0x1d
	AF_SNA                            = 0xb
	AF_UNIX                           = 0x1
	AF_UNSPEC                         = 0x0
	ALTWERASE                         = 0x200
	ARPHRD_ETHER                      = 0x1
	ARPHRD_FRELAY                     = 0xf
	ARPHRD_IEEE1394                   = 0x18
	ARPHRD_IEEE802                    = 0x6
	B0                                = 0x0
	B110                              = 0x6e
	B115200                           = 0x1c200
	B1200                             = 0x4b0
	B134                              = 0x86
	B14400                            = 0x3840
	B150                              = 0x96
	B1800                             = 0x708
	B19200                            = 0x4b00
	B200                              = 0xc8
	B230400                           = 0x38400
	B2400                             = 0x960
	B28800                            = 0x7080
	B300                              = 0x12c
	B38400                            = 0x9600
	B4800                             = 0x12c0
	B50                               = 0x32
	B57600                            = 0xe100
	B600                              = 0x258
	B7200                             = 0x1c20
	B75                               = 0x4b
	B76800                            = 0x12c00
	B9600                             = 0x2580
	BIOCFLUSH                         = 0x20004268
	BIOCGBLEN                         = 0x40044266
	BIOCGDIRFILT                      = 0x4004427c
	BIOCGDLT                          = 0x4004426a
	BIOCGDLTLIST                      = 0xc010427b
	BIOCGETIF                         = 0x4020426b
	BIOCGFILDROP                      = 0x40044278
	BIOCGHDRCMPLT                     = 0x40044274
	BIOCGRSIG                         = 0x40044273
	BIOCGRTIMEOUT                     = 0x4010426e
	BIOCGSTATS                        = 0x4008426f
	BIOCIMMEDIATE                     = 0x80044270
	BIOCLOCK                          = 0x20004276
	BIOCPROMISC                       = 0x20004269
	BIOCSBLEN                         = 0xc0044266
	BIOCSDIRFILT                      = 0x8004427d
	BIOCSDLT                          = 0x8004427a
	BIOCSETF                          = 0x80104267
	BIOCSETIF                         = 0x8020426c
	BIOCSETWF                         = 0x80104277
	BIOCSFILDROP                      = 0x80044279
	BIOCSHDRCMPLT                     = 0x80044275
	BIOCSRSIG                         = 0x80044272
	BIOCSRTIMEOUT                     = 0x8010426d
	BIOCVERSION                       = 0x40044271
	BPF_A                             = 0x10
	BPF_ABS                           = 0x20
	BPF_ADD                           = 0x0
	BPF_ALIGNMENT                     = 0x4
	BPF_ALU                           = 0x4
	BPF_AND                           = 0x50
	BPF_B                             = 0x10
	BPF_DIRECTION_IN                  = 0x1
	BPF_DIRECTION_OUT                 = 0x2
	BPF_DIV                           = 0x30
	BPF_FILDROP_CAPTURE               = 0x1
	BPF_FILDROP_DROP                  = 0x2
	BPF_FILDROP_PASS                  = 0x0
	BPF_F_DIR_IN                      = 0x10
	BPF_F_DIR_MASK                    = 0x30
	BPF_F_DIR_OUT                     = 0x20
	BPF_F_DIR_SHIFT                   = 0x4
	BPF_F_FLOWID                      = 0x8
	BPF_F_PRI_MASK                    = 0x7
	BPF_H                             = 0x8
	BPF_IMM                           = 0x0
	BPF_IND                           = 0x40
	BPF_JA                            = 0x0
	BPF_JEQ                           = 0x10
	BPF_JGE                           = 0x30
	BPF_JGT                           = 0x20
	BPF_JMP                           = 0x5
	BPF_JSET                          = 0x40
	BPF_K                             = 0x0
	BPF_LD                            = 0x0
	BPF_LDX                           = 0x1
	BPF_LEN                           = 0x80
	BPF_LSH                           = 0x60
	BPF_MAJOR_VERSION                 = 0x1
	BPF_MAXBUFSIZE                    = 0x200000
	BPF_MAXINSNS                      = 0x200
	BPF_MEM                           = 0x60
	BPF_MEMWORDS                      = 0x10
	BPF_MINBUFSIZE                    = 0x20
	BPF_MINOR_VERSION                 = 0x1
	BPF_MISC                          = 0x7
	BPF_MSH                           = 0xa0
	BPF_MUL                           = 0x20
	BPF_NEG                           = 0x80
	BPF_OR                            = 0x40
	BPF_RELEASE                       = 0x30bb6
	BPF_RET                           = 0x6
	BPF_RND                           = 0xc0
	BPF_RSH                           = 0x70
	BPF_ST                            = 0x2
	BPF_STX                           = 0x3
	BPF_SUB                           = 0x10
	BPF_TAX                           = 0x0
	BPF_TXA                           = 0x80
	BPF_W                             = 0x0
	BPF_X                             = 0x8
	BRKINT                            = 0x2
	CFLUSH                            = 0xf
	CLOCAL                            = 0x8000
	CLOCK_BOOTTIME                    = 0x6
	CLOCK_MONOTONIC                   = 0x3
	CLOCK_PROCESS_CPUTIME_ID          = 0x2
	CLOCK_REALTIME                    = 0x0
	CLOCK_THREAD_CPUTIME_ID           = 0x4
	CLOCK_UPTIME                      = 0x5
	CPUSTATES                         = 0x6
	CP_IDLE                           = 0x5
	CP_INTR                           = 0x4
	CP_NICE                           = 0x1
	CP_SPIN                           = 0x3
	CP_SYS                            = 0x2
	CP_USER                           = 0x0
	CREAD                             = 0x800
	CRTSCTS                           = 0x10000
	CS5                               = 0x0
	CS6                               = 0x100
	CS7                               = 0x200
	CS8                               = 0x300
	CSIZE                             = 0x300
	CSTART                            = 0x11
	CSTATUS                           = 0xff
	CSTOP                             = 0x13
	CSTOPB                            = 0x400
	CSUSP                             = 0x1a
	CTL_HW                            = 0x6
	CTL_KERN                          = 0x1
	CTL_MAXNAME                       = 0xc
	CTL_NET                           = 0x4
	DIOCADDQUEUE                      = 0xc110445d
	DIOCADDRULE                       = 0xcd604404
	DIOCADDSTATE                      = 0xc1084425
	DIOCCHANGERULE                    = 0xcd60441a
	DIOCCLRIFFLAG                     = 0xc028445a
	DIOCCLRSRCNODES                   = 0x20004455
	DIOCCLRSTATES                     = 0xc0e04412
	DIOCCLRSTATUS                     = 0xc0284416
	DIOCGETLIMIT                      = 0xc0084427
	DIOCGETQSTATS                     = 0xc1204460
	DIOCGETQUEUE                      = 0xc110445f
	DIOCGETQUEUES                     = 0xc110445e
	DIOCGETRULE                       = 0xcd604407
	DIOCGETRULES                      = 0xcd604406
	DIOCGETRULESET                    = 0xc444443b
	DIOCGETRULESETS                   = 0xc444443a
	DIOCGETSRCNODES                   = 0xc0104454
	DIOCGETSTATE                      = 0xc1084413
	DIOCGETSTATES                     = 0xc0104419
	DIOCGETSTATUS                     = 0xc1e84415
	DIOCGETSYNFLWATS                  = 0xc0084463
	DIOCGETTIMEOUT                    = 0xc008441e
	DIOCIGETIFACES                    = 0xc0284457
	DIOCKILLSRCNODES                  = 0xc080445b
	DIOCKILLSTATES                    = 0xc0e04429
	DIOCNATLOOK                       = 0xc0504417
	DIOCOSFPADD                       = 0xc088444f
	DIOCOSFPFLUSH                     = 0x2000444e
	DIOCOSFPGET                       = 0xc0884450
	DIOCRADDADDRS                     = 0xc4504443
	DIOCRADDTABLES                    = 0xc450443d
	DIOCRCLRADDRS                     = 0xc4504442
	DIOCRCLRASTATS                    = 0xc4504448
	DIOCRCLRTABLES                    = 0xc450443c
	DIOCRCLRTSTATS                    = 0xc4504441
	DIOCRDELADDRS                     = 0xc4504444
	DIOCRDELTABLES                    = 0xc450443e
	DIOCRGETADDRS                     = 0xc4504446
	DIOCRGETASTATS                    = 0xc4504447
	DIOCRGETTABLES                    = 0xc450443f
	DIOCRGETTSTATS                    = 0xc4504440
	DIOCRINADEFINE                    = 0xc450444d
	DIOCRSETADDRS                     = 0xc4504445
	DIOCRSETTFLAGS                    = 0xc450444a
	DIOCRTSTADDRS                     = 0xc4504449
	DIOCSETDEBUG                      = 0xc0044418
	DIOCSETHOSTID                     = 0xc0044456
	DIOCSETIFFLAG                     = 0xc0284459
	DIOCSETLIMIT                      = 0xc0084428
	DIOCSETREASS                      = 0xc004445c
	DIOCSETSTATUSIF                   = 0xc0284414
	DIOCSETSYNCOOKIES                 = 0xc0014462
	DIOCSETSYNFLWATS                  = 0xc0084461
	DIOCSETTIMEOUT                    = 0xc008441d
	DIOCSTART                         = 0x20004401
	DIOCSTOP                          = 0x20004402
	DIOCXBEGIN                        = 0xc0104451
	DIOCXCOMMIT                       = 0xc0104452
	DIOCXROLLBACK                     = 0xc0104453
	DLT_ARCNET                        = 0x7
	DLT_ATM_RFC1483                   = 0xb
	DLT_AX25                          = 0x3
	DLT_CHAOS                         = 0x5
	DLT_C_HDLC                        = 0x68
	DLT_EN10MB                        = 0x1
	DLT_EN3MB                         = 0x2
	DLT_ENC                           = 0xd
	DLT_FDDI                          = 0xa
	DLT_IEEE802                       = 0x6
	DLT_IEEE802_11                    = 0x69
	DLT_IEEE802_11_RADIO              = 0x7f
	DLT_LOOP                          = 0xc
	DLT_MPLS                          = 0xdb
	DLT_NULL                          = 0x0
	DLT_OPENFLOW                      = 0x10b
	DLT_PFLOG                         = 0x75
	DLT_PFSYNC                        = 0x12
	DLT_PPP                           = 0x9
	DLT_PPP_BSDOS                     = 0x10
	DLT_PPP_ETHER                     = 0x33
	DLT_PPP_SERIAL                    = 0x32
	DLT_PRONET                        = 0x4
	DLT_RAW                           = 0xe
	DLT_SLIP                          = 0x8
	DLT_SLIP_BSDOS                    = 0xf
	DLT_USBPCAP                       = 0xf9
	DLT_USER0                         = 0x93
	DLT_USER1                         = 0x94
	DLT_USER10                        = 0x9d
	DLT_USER11                        = 0x9e
	DLT_USER12                        = 0x9f
	DLT_USER13                        = 0xa0
	DLT_USER14                        = 0xa1
	DLT_USER15                        = 0xa2
	DLT_USER2                         = 0x95
	DLT_USER3                         = 0x96
	DLT_USER4                         = 0x97
	DLT_USER5                         = 0x98
	DLT_USER6                         = 0x99
	DLT_USER7                         = 0x9a
	DLT_USER8                         = 0x9b
	DLT_USER9                         = 0x9c
	DT_BLK                            = 0x6
	DT_CHR                            = 0x2
	DT_DIR                            = 0x4
	DT_FIFO                           = 0x1
	DT_LNK                            = 0xa
	DT_REG                            = 0x8
	DT_SOCK                           = 0xc
	DT_UNKNOWN                        = 0x0
	ECHO                              = 0x8
	ECHOCTL                           = 0x40
	ECHOE                             = 0x2
	ECHOK                             = 0x4
	ECHOKE                            = 0x1
	ECHONL                            = 0x10
	ECHOPRT                           = 0x20
	EMT_TAGOVF                        = 0x1
	EMUL_ENABLED                      = 0x1
	EMUL_NATIVE                       = 0x2
	ENDRUNDISC                        = 0x9
	ETH64_8021_RSVD_MASK              = 0xfffffffffff0
	ETH64_8021_RSVD_PREFIX            = 0x180c2000000
	ETHERMIN                          = 0x2e
	ETHERMTU                          = 0x5dc
	ETHERTYPE_8023                    = 0x4
	ETHERTYPE_AARP                    = 0x80f3
	ETHERTYPE_ACCTON                  = 0x8390
	ETHERTYPE_AEONIC                  = 0x8036
	ETHERTYPE_ALPHA                   = 0x814a
	ETHERTYPE_AMBER                   = 0x6008
	ETHERTYPE_AMOEBA                  = 0x8145
	ETHERTYPE_AOE                     = 0x88a2
	ETHERTYPE_APOLLO                  = 0x80f7
	ETHERTYPE_APOLLODOMAIN            = 0x8019
	ETHERTYPE_APPLETALK               = 0x809b
	ETHERTYPE_APPLITEK                = 0x80c7
	ETHERTYPE_ARGONAUT                = 0x803a
	ETHERTYPE_ARP                     = 0x806
	ETHERTYPE_AT                      = 0x809b
	ETHERTYPE_ATALK                   = 0x809b
	ETHERTYPE_ATOMIC                  = 0x86df
	ETHERTYPE_ATT                     = 0x8069
	ETHERTYPE_ATTSTANFORD             = 0x8008
	ETHERTYPE_AUTOPHON                = 0x806a
	ETHERTYPE_AXIS                    = 0x8856
	ETHERTYPE_BCLOOP                  = 0x9003
	ETHERTYPE_BOFL                    = 0x8102
	ETHERTYPE_CABLETRON               = 0x7034
	ETHERTYPE_CHAOS                   = 0x804
	ETHERTYPE_COMDESIGN               = 0x806c
	ETHERTYPE_COMPUGRAPHIC            = 0x806d
	ETHERTYPE_COUNTERPOINT            = 0x8062
	ETHERTYPE_CRONUS                  = 0x8004
	ETHERTYPE_CRONUSVLN               = 0x8003
	ETHERTYPE_DCA                     = 0x1234
	ETHERTYPE_DDE                     = 0x807b
	ETHERTYPE_DEBNI                   = 0xaaaa
	ETHERTYPE_DECAM                   = 0x8048
	ETHERTYPE_DECCUST                 = 0x6006
	ETHERTYPE_DECDIAG                 = 0x6005
	ETHERTYPE_DECDNS                  = 0x803c
	ETHERTYPE_DECDTS                  = 0x803e
	ETHERTYPE_DECEXPER                = 0x6000
	ETHERTYPE_DECLAST                 = 0x8041
	ETHERTYPE_DECLTM                  = 0x803f
	ETHERTYPE_DECMUMPS                = 0x6009
	ETHERTYPE_DECNETBIOS              = 0x8040
	ETHERTYPE_DELTACON                = 0x86de
	ETHERTYPE_DIDDLE                  = 0x4321
	ETHERTYPE_DLOG1                   = 0x660
	ETHERTYPE_DLOG2                   = 0x661
	ETHERTYPE_DN                      = 0x6003
	ETHERTYPE_DOGFIGHT                = 0x1989
	ETHERTYPE_DSMD                    = 0x8039
	ETHERTYPE_EAPOL                   = 0x888e
	ETHERTYPE_ECMA                    = 0x803
	ETHERTYPE_ENCRYPT                 = 0x803d
	ETHERTYPE_ES                      = 0x805d
	ETHERTYPE_EXCELAN                 = 0x8010
	ETHERTYPE_EXPERDATA               = 0x8049
	ETHERTYPE_FLIP                    = 0x8146
	ETHERTYPE_FLOWCONTROL             = 0x8808
	ETHERTYPE_FRARP                   = 0x808
	ETHERTYPE_GENDYN                  = 0x8068
	ETHERTYPE_HAYES                   = 0x8130
	ETHERTYPE_HIPPI_FP                = 0x8180
	ETHERTYPE_HITACHI                 = 0x8820
	ETHERTYPE_HP                      = 0x8005
	ETHERTYPE_IEEEPUP                 = 0xa00
	ETHERTYPE_IEEEPUPAT               = 0xa01
	ETHERTYPE_IMLBL                   = 0x4c42
	ETHERTYPE_IMLBLDIAG               = 0x424c
	ETHERTYPE_IP                      = 0x800
	ETHERTYPE_IPAS                    = 0x876c
	ETHERTYPE_IPV6                    = 0x86dd
	ETHERTYPE_IPX                     = 0x8137
	ETHERTYPE_IPXNEW                  = 0x8037
	ETHERTYPE_KALPANA                 = 0x8582
	ETHERTYPE_LANBRIDGE               = 0x8038
	ETHERTYPE_LANPROBE                = 0x8888
	ETHERTYPE_LAT                     = 0x6004
	ETHERTYPE_LBACK                   = 0x9000
	ETHERTYPE_LITTLE                  = 0x8060
	ETHERTYPE_LLDP                    = 0x88cc
	ETHERTYPE_LOGICRAFT               = 0x8148
	ETHERTYPE_LOOPBACK                = 0x9000
	ETHERTYPE_MACSEC                  = 0x88e5
	ETHERTYPE_MATRA                   = 0x807a
	ETHERTYPE_MAX                     = 0xffff
	ETHERTYPE_MERIT                   = 0x807c
	ETHERTYPE_MICP                    = 0x873a
	ETHERTYPE_MOPDL                   = 0x6001
	ETHERTYPE_MOPRC                   = 0x6002
	ETHERTYPE_MOTOROLA                = 0x818d
	ETHERTYPE_MPLS                    = 0x8847
	ETHERTYPE_MPLS_MCAST              = 0x8848
	ETHERTYPE_MUMPS                   = 0x813f
	ETHERTYPE_NBPCC                   = 0x3c04
	ETHERTYPE_NBPCLAIM                = 0x3c09
	ETHERTYPE_NBPCLREQ                = 0x3c05
	ETHERTYPE_NBPCLRSP                = 0x3c06
	ETHERTYPE_NBPCREQ                 = 0x3c02
	ETHERTYPE_NBPCRSP                 = 0x3c03
	ETHERTYPE_NBPDG                   = 0x3c07
	ETHERTYPE_NBPDGB                  = 0x3c08
	ETHERTYPE_NBPDLTE                 = 0x3c0a
	ETHERTYPE_NBPRAR                  = 0x3c0c
	ETHERTYPE_NBPRAS                  = 0x3c0b
	ETHERTYPE_NBPRST                  = 0x3c0d
	ETHERTYPE_NBPSCD                  = 0x3c01
	ETHERTYPE_NBPVCD                  = 0x3c00
	ETHERTYPE_NBS                     = 0x802
	ETHERTYPE_NCD                     = 0x8149
	ETHERTYPE_NESTAR                  = 0x8006
	ETHERTYPE_NETBEUI                 = 0x8191
	ETHERTYPE_NHRP                    = 0x2001
	ETHERTYPE_NOVELL                  = 0x8138
	ETHERTYPE_NS                      = 0x600
	ETHERTYPE_NSAT                    = 0x601
	ETHERTYPE_NSCOMPAT                = 0x807
	ETHERTYPE_NSH                     = 0x984f
	ETHERTYPE_NTRAILER                = 0x10
	ETHERTYPE_OS9                     = 0x7007
	ETHERTYPE_OS9NET                  = 0x7009
	ETHERTYPE_PACER                   = 0x80c6
	ETHERTYPE_PBB                     = 0x88e7
	ETHERTYPE_PCS                     = 0x4242
	ETHERTYPE_PLANNING                = 0x8044
	ETHERTYPE_PPP                     = 0x880b
	ETHERTYPE_PPPOE                   = 0x8864
	ETHERTYPE_PPPOEDISC               = 0x8863
	ETHERTYPE_PRIMENTS                = 0x7031
	ETHERTYPE_PUP                     = 0x200
	ETHERTYPE_PUPAT                   = 0x200
	ETHERTYPE_QINQ                    = 0x88a8
	ETHERTYPE_RACAL                   = 0x7030
	ETHERTYPE_RATIONAL                = 0x8150
	ETHERTYPE_RAWFR                   = 0x6559
	ETHERTYPE_RCL                     = 0x1995
	ETHERTYPE_RDP                     = 0x8739
	ETHERTYPE_RETIX                   = 0x80f2
	ETHERTYPE_REVARP                  = 0x8035
	ETHERTYPE_SCA                     = 0x6007
	ETHERTYPE_SECTRA                  = 0x86db
	ETHERTYPE_SECUREDATA              = 0x876d
	ETHERTYPE_SGITW                   = 0x817e
	ETHERTYPE_SG_BOUNCE               = 0x8016
	ETHERTYPE_SG_DIAG                 = 0x8013
	ETHERTYPE_SG_NETGAMES             = 0x8014
	ETHERTYPE_SG_RESV                 = 0x8015
	ETHERTYPE_SIMNET                  = 0x5208
	ETHERTYPE_SLOW                    = 0x8809
	ETHERTYPE_SNA                     = 0x80d5
	ETHERTYPE_SNMP                    = 0x814c
	ETHERTYPE_SONIX                   = 0xfaf5
	ETHERTYPE_SPIDER                  = 0x809f
	ETHERTYPE_SPRITE                  = 0x500
	ETHERTYPE_STP                     = 0x8181
	ETHERTYPE_TALARIS                 = 0x812b
	ETHERTYPE_TALARISMC               = 0x852b
	ETHERTYPE_TCPCOMP                 = 0x876b
	ETHERTYPE_TCPSM                   = 0x9002
	ETHERTYPE_TEC                     = 0x814f
	ETHERTYPE_TIGAN                   = 0x802f
	ETHERTYPE_TRAIL                   = 0x1000
	ETHERTYPE_TRANSETHER              = 0x6558
	ETHERTYPE_TYMSHARE                = 0x802e
	ETHERTYPE_UBBST                   = 0x7005
	ETHERTYPE_UBDEBUG                 = 0x900
	ETHERTYPE_UBDIAGLOOP              = 0x7002
	ETHERTYPE_UBDL                    = 0x7000
	ETHERTYPE_UBNIU                   = 0x7001
	ETHERTYPE_UBNMC                   = 0x7003
	ETHERTYPE_VALID                   = 0x1600
	ETHERTYPE_VARIAN                  = 0x80dd
	ETHERTYPE_VAXELN                  = 0x803b
	ETHERTYPE_VEECO                   = 0x8067
	ETHERTYPE_VEXP                    = 0x805b
	ETHERTYPE_VGLAB                   = 0x8131
	ETHERTYPE_VINES                   = 0xbad
	ETHERTYPE_VINESECHO               = 0xbaf
	ETHERTYPE_VINESLOOP               = 0xbae
	ETHERTYPE_VITAL                   = 0xff00
	ETHERTYPE_VLAN                    = 0x8100
	ETHERTYPE_VLTLMAN                 = 0x8080
	ETHERTYPE_VPROD                   = 0x805c
	ETHERTYPE_VURESERVED              = 0x8147
	ETHERTYPE_WATERLOO                = 0x8130
	ETHERTYPE_WELLFLEET               = 0x8103
	ETHERTYPE_X25                     = 0x805
	ETHERTYPE_X75                     = 0x801
	ETHERTYPE_XNSSM                   = 0x9001
	ETHERTYPE_XTP                     = 0x817d
	ETHER_ADDR_LEN                    = 0x6
	ETHER_ALIGN                       = 0x2
	ETHER_CRC_LEN                     = 0x4
	ETHER_CRC_POLY_BE                 = 0x4c11db6
	ETHER_CRC_POLY_LE                 = 0xedb88320
	ETHER_HDR_LEN                     = 0xe
	ETHER_MAX_DIX_LEN                 = 0x600
	ETHER_MAX_HARDMTU_LEN             = 0xff9b
	ETHER_MAX_LEN                     = 0x5ee
	ETHER_MIN_LEN                     = 0x40
	ETHER_TYPE_LEN                    = 0x2
	ETHER_VLAN_ENCAP_LEN              = 0x4
	EVFILT_AIO                        = -0x3
	EVFILT_DEVICE                     = -0x8
	EVFILT_EXCEPT                     = -0x9
	EVFILT_PROC                       = -0x5
	EVFILT_READ                       = -0x1
	EVFILT_SIGNAL                     = -0x6
	EVFILT_SYSCOUNT                   = 0x9
	EVFILT_TIMER                      = -0x7
	EVFILT_VNODE                      = -0x4
	EVFILT_WRITE                      = -0x2
	EVL_ENCAPLEN                      = 0x4
	EVL_PRIO_BITS                     = 0xd
	EVL_PRIO_MAX                      = 0x7
	EVL_VLID_MASK                     = 0xfff
	EVL_VLID_MAX                      = 0xffe
	EVL_VLID_MIN                      = 0x1
	EVL_VLID_NULL                     = 0x0
	EV_ADD                            = 0x1
	EV_CLEAR                          = 0x20
	EV_DELETE                         = 0x2
	EV_DISABLE                        = 0x8
	EV_DISPATCH                       = 0x80
	EV_ENABLE                         = 0x4
	EV_EOF                            = 0x8000
	EV_ERROR                          = 0x4000
	EV_FLAG1                          = 0x2000
	EV_ONESHOT                        = 0x10
	EV_RECEIPT                        = 0x40
	EV_SYSFLAGS                       = 0xf800
	EXTA                              = 0x4b00
	EXTB                              = 0x9600
	EXTPROC                           = 0x800
	FD_CLOEXEC                        = 0x1
	FD_SETSIZE                        = 0x400
	FLUSHO                            = 0x800000
	F_DUPFD                           = 0x0
	F_DUPFD_CLOEXEC                   = 0xa
	F_GETFD                           = 0x1
	F_GETFL                           = 0x3
	F_GETLK                           = 0x7
	F_GETOWN                          = 0x5
	F_ISATTY                          = 0xb
	F_OK                              = 0x0
	F_RDLCK                           = 0x1
	F_SETFD                           = 0x2
	F_SETFL                           = 0x4
	F_SETLK                           = 0x8
	F_SETLKW                          = 0x9
	F_SETOWN                          = 0x6
	F_UNLCK                           = 0x2
	F_WRLCK                           = 0x3
	HUPCL                             = 0x4000
	HW_MACHINE                        = 0x1
	ICANON                            = 0x100
	ICMP6_FILTER                      = 0x12
	ICRNL                             = 0x100
	IEXTEN                            = 0x400
	IFAN_ARRIVAL                      = 0x0
	IFAN_DEPARTURE                    = 0x1
	IFF_ALLMULTI                      = 0x200
	IFF_BROADCAST                     = 0x2
	IFF_CANTCHANGE                    = 0x8e52
	IFF_DEBUG                         = 0x4
	IFF_LINK0                         = 0x1000
	IFF_LINK1                         = 0x2000
	IFF_LINK2                         = 0x4000
	IFF_LOOPBACK                      = 0x8
	IFF_MULTICAST                     = 0x8000
	IFF_NOARP                         = 0x80
	IFF_OACTIVE                       = 0x400
	IFF_POINTOPOINT                   = 0x10
	IFF_PROMISC                       = 0x100
	IFF_RUNNING                       = 0x40
	IFF_SIMPLEX                       = 0x800
	IFF_STATICARP                     = 0x20
	IFF_UP                            = 0x1
	IFNAMSIZ                          = 0x10
	IFT_1822                          = 0x2
	IFT_A12MPPSWITCH                  = 0x82
	IFT_AAL2                          = 0xbb
	IFT_AAL5                          = 0x31
	IFT_ADSL                          = 0x5e
	IFT_AFLANE8023                    = 0x3b
	IFT_AFLANE8025                    = 0x3c
	IFT_ARAP                          = 0x58
	IFT_ARCNET                        = 0x23
	IFT_ARCNETPLUS                    = 0x24
	IFT_ASYNC                         = 0x54
	IFT_ATM                           = 0x25
	IFT_ATMDXI                        = 0x69
	IFT_ATMFUNI                       = 0x6a
	IFT_ATMIMA                        = 0x6b
	IFT_ATMLOGICAL                    = 0x50
	IFT_ATMRADIO                      = 0xbd
	IFT_ATMSUBINTERFACE               = 0x86
	IFT_ATMVCIENDPT                   = 0xc2
	IFT_ATMVIRTUAL                    = 0x95
	IFT_BGPPOLICYACCOUNTING           = 0xa2
	IFT_BLUETOOTH                     = 0xf8
	IFT_BRIDGE                        = 0xd1
	IFT_BSC                           = 0x53
	IFT_CARP                          = 0xf7
	IFT_CCTEMUL                       = 0x3d
	IFT_CEPT                          = 0x13
	IFT_CES                           = 0x85
	IFT_CHANNEL                       = 0x46
	IFT_CNR                           = 0x55
	IFT_COFFEE                        = 0x84
	IFT_COMPOSITELINK                 = 0x9b
	IFT_DCN                           = 0x8d
	IFT_DIGITALPOWERLINE              = 0x8a
	IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba
	IFT_DLSW                          = 0x4a
	IFT_DOCSCABLEDOWNSTREAM           = 0x80
	IFT_DOCSCABLEMACLAYER             = 0x7f
	IFT_DOCSCABLEUPSTREAM             = 0x81
	IFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd
	IFT_DS0                           = 0x51
	IFT_DS0BUNDLE                     = 0x52
	IFT_DS1FDL                        = 0xaa
	IFT_DS3                           = 0x1e
	IFT_DTM                           = 0x8c
	IFT_DUMMY                         = 0xf1
	IFT_DVBASILN                      = 0xac
	IFT_DVBASIOUT                     = 0xad
	IFT_DVBRCCDOWNSTREAM              = 0x93
	IFT_DVBRCCMACLAYER                = 0x92
	IFT_DVBRCCUPSTREAM                = 0x94
	IFT_ECONET                        = 0xce
	IFT_ENC                           = 0xf4
	IFT_EON                           = 0x19
	IFT_EPLRS                         = 0x57
	IFT_ESCON                         = 0x49
	IFT_ETHER                         = 0x6
	IFT_FAITH                         = 0xf3
	IFT_FAST                          = 0x7d
	IFT_FASTETHER                     = 0x3e
	IFT_FASTETHERFX                   = 0x45
	IFT_FDDI                          = 0xf
	IFT_FIBRECHANNEL                  = 0x38
	IFT_FRAMERELAYINTERCONNECT        = 0x3a
	IFT_FRAMERELAYMPI                 = 0x5c
	IFT_FRDLCIENDPT                   = 0xc1
	IFT_FRELAY                        = 0x20
	IFT_FRELAYDCE                     = 0x2c
	IFT_FRF16MFRBUNDLE                = 0xa3
	IFT_FRFORWARD                     = 0x9e
	IFT_G703AT2MB                     = 0x43
	IFT_G703AT64K                     = 0x42
	IFT_GIF                           = 0xf0
	IFT_GIGABITETHERNET               = 0x75
	IFT_GR303IDT                      = 0xb2
	IFT_GR303RDT                      = 0xb1
	IFT_H323GATEKEEPER                = 0xa4
	IFT_H323PROXY                     = 0xa5
	IFT_HDH1822                       = 0x3
	IFT_HDLC                          = 0x76
	IFT_HDSL2                         = 0xa8
	IFT_HIPERLAN2                     = 0xb7
	IFT_HIPPI                         = 0x2f
	IFT_HIPPIINTERFACE                = 0x39
	IFT_HOSTPAD                       = 0x5a
	IFT_HSSI                          = 0x2e
	IFT_HY                            = 0xe
	IFT_IBM370PARCHAN                 = 0x48
	IFT_IDSL                          = 0x9a
	IFT_IEEE1394                      = 0x90
	IFT_IEEE80211                     = 0x47
	IFT_IEEE80212                     = 0x37
	IFT_IEEE8023ADLAG                 = 0xa1
	IFT_IFGSN                         = 0x91
	IFT_IMT                           = 0xbe
	IFT_INFINIBAND                    = 0xc7
	IFT_INTERLEAVE                    = 0x7c
	IFT_IP                            = 0x7e
	IFT_IPFORWARD                     = 0x8e
	IFT_IPOVERATM                     = 0x72
	IFT_IPOVERCDLC                    = 0x6d
	IFT_IPOVERCLAW                    = 0x6e
	IFT_IPSWITCH                      = 0x4e
	IFT_ISDN                          = 0x3f
	IFT_ISDNBASIC                     = 0x14
	IFT_ISDNPRIMARY                   = 0x15
	IFT_ISDNS                         = 0x4b
	IFT_ISDNU                         = 0x4c
	IFT_ISO88022LLC                   = 0x29
	IFT_ISO88023                      = 0x7
	IFT_ISO88024                      = 0x8
	IFT_ISO88025                      = 0x9
	IFT_ISO88025CRFPINT               = 0x62
	IFT_ISO88025DTR                   = 0x56
	IFT_ISO88025FIBER                 = 0x73
	IFT_ISO88026                      = 0xa
	IFT_ISUP                          = 0xb3
	IFT_L2VLAN                        = 0x87
	IFT_L3IPVLAN                      = 0x88
	IFT_L3IPXVLAN                     = 0x89
	IFT_LAPB                          = 0x10
	IFT_LAPD                          = 0x4d
	IFT_LAPF                          = 0x77
	IFT_LINEGROUP                     = 0xd2
	IFT_LOCALTALK                     = 0x2a
	IFT_LOOP                          = 0x18
	IFT_MBIM                          = 0xfa
	IFT_MEDIAMAILOVERIP               = 0x8b
	IFT_MFSIGLINK                     = 0xa7
	IFT_MIOX25                        = 0x26
	IFT_MODEM                         = 0x30
	IFT_MPC                           = 0x71
	IFT_MPLS                          = 0xa6
	IFT_MPLSTUNNEL                    = 0x96
	IFT_MSDSL                         = 0x8f
	IFT_MVL                           = 0xbf
	IFT_MYRINET                       = 0x63
	IFT_NFAS                          = 0xaf
	IFT_NSIP                          = 0x1b
	IFT_OPTICALCHANNEL                = 0xc3
	IFT_OPTICALTRANSPORT              = 0xc4
	IFT_OTHER                         = 0x1
	IFT_P10                           = 0xc
	IFT_P80                           = 0xd
	IFT_PARA                          = 0x22
	IFT_PFLOG                         = 0xf5
	IFT_PFLOW                         = 0xf9
	IFT_PFSYNC                        = 0xf6
	IFT_PLC                           = 0xae
	IFT_PON155                        = 0xcf
	IFT_PON622                        = 0xd0
	IFT_POS                           = 0xab
	IFT_PPP                           = 0x17
	IFT_PPPMULTILINKBUNDLE            = 0x6c
	IFT_PROPATM                       = 0xc5
	IFT_PROPBWAP2MP                   = 0xb8
	IFT_PROPCNLS                      = 0x59
	IFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5
	IFT_PROPDOCSWIRELESSMACLAYER      = 0xb4
	IFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6
	IFT_PROPMUX                       = 0x36
	IFT_PROPVIRTUAL                   = 0x35
	IFT_PROPWIRELESSP2P               = 0x9d
	IFT_PTPSERIAL                     = 0x16
	IFT_PVC                           = 0xf2
	IFT_Q2931                         = 0xc9
	IFT_QLLC                          = 0x44
	IFT_RADIOMAC                      = 0xbc
	IFT_RADSL                         = 0x5f
	IFT_REACHDSL                      = 0xc0
	IFT_RFC1483                       = 0x9f
	IFT_RS232                         = 0x21
	IFT_RSRB                          = 0x4f
	IFT_SDLC                          = 0x11
	IFT_SDSL                          = 0x60
	IFT_SHDSL                         = 0xa9
	IFT_SIP                           = 0x1f
	IFT_SIPSIG                        = 0xcc
	IFT_SIPTG                         = 0xcb
	IFT_SLIP                          = 0x1c
	IFT_SMDSDXI                       = 0x2b
	IFT_SMDSICIP                      = 0x34
	IFT_SONET                         = 0x27
	IFT_SONETOVERHEADCHANNEL          = 0xb9
	IFT_SONETPATH                     = 0x32
	IFT_SONETVT                       = 0x33
	IFT_SRP                           = 0x97
	IFT_SS7SIGLINK                    = 0x9c
	IFT_STACKTOSTACK                  = 0x6f
	IFT_STARLAN                       = 0xb
	IFT_T1                            = 0x12
	IFT_TDLC                          = 0x74
	IFT_TELINK                        = 0xc8
	IFT_TERMPAD                       = 0x5b
	IFT_TR008                         = 0xb0
	IFT_TRANSPHDLC                    = 0x7b
	IFT_TUNNEL                        = 0x83
	IFT_ULTRA                         = 0x1d
	IFT_USB                           = 0xa0
	IFT_V11                           = 0x40
	IFT_V35                           = 0x2d
	IFT_V36                           = 0x41
	IFT_V37                           = 0x78
	IFT_VDSL                          = 0x61
	IFT_VIRTUALIPADDRESS              = 0x70
	IFT_VIRTUALTG                     = 0xca
	IFT_VOICEDID                      = 0xd5
	IFT_VOICEEM                       = 0x64
	IFT_VOICEEMFGD                    = 0xd3
	IFT_VOICEENCAP                    = 0x67
	IFT_VOICEFGDEANA                  = 0xd4
	IFT_VOICEFXO                      = 0x65
	IFT_VOICEFXS                      = 0x66
	IFT_VOICEOVERATM                  = 0x98
	IFT_VOICEOVERCABLE                = 0xc6
	IFT_VOICEOVERFRAMERELAY           = 0x99
	IFT_VOICEOVERIP                   = 0x68
	IFT_WIREGUARD                     = 0xfb
	IFT_X213                          = 0x5d
	IFT_X25                           = 0x5
	IFT_X25DDN                        = 0x4
	IFT_X25HUNTGROUP                  = 0x7a
	IFT_X25MLP                        = 0x79
	IFT_X25PLE                        = 0x28
	IFT_XETHER                        = 0x1a
	IGNBRK                            = 0x1
	IGNCR                             = 0x80
	IGNPAR                            = 0x4
	IMAXBEL                           = 0x2000
	INLCR                             = 0x40
	INPCK                             = 0x10
	IN_CLASSA_HOST                    = 0xffffff
	IN_CLASSA_MAX                     = 0x80
	IN_CLASSA_NET                     = 0xff000000
	IN_CLASSA_NSHIFT                  = 0x18
	IN_CLASSB_HOST                    = 0xffff
	IN_CLASSB_MAX                     = 0x10000
	IN_CLASSB_NET                     = 0xffff0000
	IN_CLASSB_NSHIFT                  = 0x10
	IN_CLASSC_HOST                    = 0xff
	IN_CLASSC_NET                     = 0xffffff00
	IN_CLASSC_NSHIFT                  = 0x8
	IN_CLASSD_HOST                    = 0xfffffff
	IN_CLASSD_NET                     = 0xf0000000
	IN_CLASSD_NSHIFT                  = 0x1c
	IN_LOOPBACKNET                    = 0x7f
	IN_RFC3021_HOST                   = 0x1
	IN_RFC3021_NET                    = 0xfffffffe
	IN_RFC3021_NSHIFT                 = 0x1f
	IPPROTO_AH                        = 0x33
	IPPROTO_CARP                      = 0x70
	IPPROTO_DIVERT                    = 0x102
	IPPROTO_DONE                      = 0x101
	IPPROTO_DSTOPTS                   = 0x3c
	IPPROTO_EGP                       = 0x8
	IPPROTO_ENCAP                     = 0x62
	IPPROTO_EON                       = 0x50
	IPPROTO_ESP                       = 0x32
	IPPROTO_ETHERIP                   = 0x61
	IPPROTO_FRAGMENT                  = 0x2c
	IPPROTO_GGP                       = 0x3
	IPPROTO_GRE                       = 0x2f
	IPPROTO_HOPOPTS                   = 0x0
	IPPROTO_ICMP                      = 0x1
	IPPROTO_ICMPV6                    = 0x3a
	IPPROTO_IDP                       = 0x16
	IPPROTO_IGMP                      = 0x2
	IPPROTO_IP                        = 0x0
	IPPROTO_IPCOMP                    = 0x6c
	IPPROTO_IPIP                      = 0x4
	IPPROTO_IPV4                      = 0x4
	IPPROTO_IPV6                      = 0x29
	IPPROTO_MAX                       = 0x100
	IPPROTO_MAXID                     = 0x103
	IPPROTO_MOBILE                    = 0x37
	IPPROTO_MPLS                      = 0x89
	IPPROTO_NONE                      = 0x3b
	IPPROTO_PFSYNC                    = 0xf0
	IPPROTO_PIM                       = 0x67
	IPPROTO_PUP                       = 0xc
	IPPROTO_RAW                       = 0xff
	IPPROTO_ROUTING                   = 0x2b
	IPPROTO_RSVP                      = 0x2e
	IPPROTO_SCTP                      = 0x84
	IPPROTO_TCP                       = 0x6
	IPPROTO_TP                        = 0x1d
	IPPROTO_UDP                       = 0x11
	IPPROTO_UDPLITE                   = 0x88
	IPV6_AUTH_LEVEL                   = 0x35
	IPV6_AUTOFLOWLABEL                = 0x3b
	IPV6_CHECKSUM                     = 0x1a
	IPV6_DEFAULT_MULTICAST_HOPS       = 0x1
	IPV6_DEFAULT_MULTICAST_LOOP       = 0x1
	IPV6_DEFHLIM                      = 0x40
	IPV6_DONTFRAG                     = 0x3e
	IPV6_DSTOPTS                      = 0x32
	IPV6_ESP_NETWORK_LEVEL            = 0x37
	IPV6_ESP_TRANS_LEVEL              = 0x36
	IPV6_FAITH                        = 0x1d
	IPV6_FLOWINFO_MASK                = 0xfffffff
	IPV6_FLOWLABEL_MASK               = 0xfffff
	IPV6_FRAGTTL                      = 0x78
	IPV6_HLIMDEC                      = 0x1
	IPV6_HOPLIMIT                     = 0x2f
	IPV6_HOPOPTS                      = 0x31
	IPV6_IPCOMP_LEVEL                 = 0x3c
	IPV6_JOIN_GROUP                   = 0xc
	IPV6_LEAVE_GROUP                  = 0xd
	IPV6_MAXHLIM                      = 0xff
	IPV6_MAXPACKET                    = 0xffff
	IPV6_MINHOPCOUNT                  = 0x41
	IPV6_MMTU                         = 0x500
	IPV6_MULTICAST_HOPS               = 0xa
	IPV6_MULTICAST_IF                 = 0x9
	IPV6_MULTICAST_LOOP               = 0xb
	IPV6_NEXTHOP                      = 0x30
	IPV6_OPTIONS                      = 0x1
	IPV6_PATHMTU                      = 0x2c
	IPV6_PIPEX                        = 0x3f
	IPV6_PKTINFO                      = 0x2e
	IPV6_PORTRANGE                    = 0xe
	IPV6_PORTRANGE_DEFAULT            = 0x0
	IPV6_PORTRANGE_HIGH               = 0x1
	IPV6_PORTRANGE_LOW                = 0x2
	IPV6_RECVDSTOPTS                  = 0x28
	IPV6_RECVDSTPORT                  = 0x40
	IPV6_RECVHOPLIMIT                 = 0x25
	IPV6_RECVHOPOPTS                  = 0x27
	IPV6_RECVPATHMTU                  = 0x2b
	IPV6_RECVPKTINFO                  = 0x24
	IPV6_RECVRTHDR                    = 0x26
	IPV6_RECVTCLASS                   = 0x39
	IPV6_RTABLE                       = 0x1021
	IPV6_RTHDR                        = 0x33
	IPV6_RTHDRDSTOPTS                 = 0x23
	IPV6_RTHDR_LOOSE                  = 0x0
	IPV6_RTHDR_STRICT                 = 0x1
	IPV6_RTHDR_TYPE_0                 = 0x0
	IPV6_SOCKOPT_RESERVED1            = 0x3
	IPV6_TCLASS                       = 0x3d
	IPV6_UNICAST_HOPS                 = 0x4
	IPV6_USE_MIN_MTU                  = 0x2a
	IPV6_V6ONLY                       = 0x1b
	IPV6_VERSION                      = 0x60
	IPV6_VERSION_MASK                 = 0xf0
	IP_ADD_MEMBERSHIP                 = 0xc
	IP_AUTH_LEVEL                     = 0x14
	IP_DEFAULT_MULTICAST_LOOP         = 0x1
	IP_DEFAULT_MULTICAST_TTL          = 0x1
	IP_DF                             = 0x4000
	IP_DROP_MEMBERSHIP                = 0xd
	IP_ESP_NETWORK_LEVEL              = 0x16
	IP_ESP_TRANS_LEVEL                = 0x15
	IP_HDRINCL                        = 0x2
	IP_IPCOMP_LEVEL                   = 0x1d
	IP_IPDEFTTL                       = 0x25
	IP_IPSECFLOWINFO                  = 0x24
	IP_IPSEC_LOCAL_AUTH               = 0x1b
	IP_IPSEC_LOCAL_CRED               = 0x19
	IP_IPSEC_LOCAL_ID                 = 0x17
	IP_IPSEC_REMOTE_AUTH              = 0x1c
	IP_IPSEC_REMOTE_CRED              = 0x1a
	IP_IPSEC_REMOTE_ID                = 0x18
	IP_MAXPACKET                      = 0xffff
	IP_MAX_MEMBERSHIPS                = 0xfff
	IP_MF                             = 0x2000
	IP_MINTTL                         = 0x20
	IP_MIN_MEMBERSHIPS                = 0xf
	IP_MSS                            = 0x240
	IP_MULTICAST_IF                   = 0x9
	IP_MULTICAST_LOOP                 = 0xb
	IP_MULTICAST_TTL                  = 0xa
	IP_OFFMASK                        = 0x1fff
	IP_OPTIONS                        = 0x1
	IP_PIPEX                          = 0x22
	IP_PORTRANGE                      = 0x13
	IP_PORTRANGE_DEFAULT              = 0x0
	IP_PORTRANGE_HIGH                 = 0x1
	IP_PORTRANGE_LOW                  = 0x2
	IP_RECVDSTADDR                    = 0x7
	IP_RECVDSTPORT                    = 0x21
	IP_RECVIF                         = 0x1e
	IP_RECVOPTS                       = 0x5
	IP_RECVRETOPTS                    = 0x6
	IP_RECVRTABLE                     = 0x23
	IP_RECVTTL                        = 0x1f
	IP_RETOPTS                        = 0x8
	IP_RF                             = 0x8000
	IP_RTABLE                         = 0x1021
	IP_SENDSRCADDR                    = 0x7
	IP_TOS                            = 0x3
	IP_TTL                            = 0x4
	ISIG                              = 0x80
	ISTRIP                            = 0x20
	ITIMER_PROF                       = 0x2
	ITIMER_REAL                       = 0x0
	ITIMER_VIRTUAL                    = 0x1
	IUCLC                             = 0x1000
	IXANY                             = 0x800
	IXOFF                             = 0x400
	IXON                              = 0x200
	KERN_HOSTNAME                     = 0xa
	KERN_OSRELEASE                    = 0x2
	KERN_OSTYPE                       = 0x1
	KERN_VERSION                      = 0x4
	LCNT_OVERLOAD_FLUSH               = 0x6
	LOCK_EX                           = 0x2
	LOCK_NB                           = 0x4
	LOCK_SH                           = 0x1
	LOCK_UN                           = 0x8
	MADV_DONTNEED                     = 0x4
	MADV_FREE                         = 0x6
	MADV_NORMAL                       = 0x0
	MADV_RANDOM                       = 0x1
	MADV_SEQUENTIAL                   = 0x2
	MADV_SPACEAVAIL                   = 0x5
	MADV_WILLNEED                     = 0x3
	MAP_ANON                          = 0x1000
	MAP_ANONYMOUS                     = 0x1000
	MAP_CONCEAL                       = 0x8000
	MAP_COPY                          = 0x2
	MAP_FILE                          = 0x0
	MAP_FIXED                         = 0x10
	MAP_FLAGMASK                      = 0xfff7
	MAP_HASSEMAPHORE                  = 0x0
	MAP_INHERIT                       = 0x0
	MAP_INHERIT_COPY                  = 0x1
	MAP_INHERIT_NONE                  = 0x2
	MAP_INHERIT_SHARE                 = 0x0
	MAP_INHERIT_ZERO                  = 0x3
	MAP_NOEXTEND                      = 0x0
	MAP_NORESERVE                     = 0x0
	MAP_PRIVATE                       = 0x2
	MAP_RENAME                        = 0x0
	MAP_SHARED                        = 0x1
	MAP_STACK                         = 0x4000
	MAP_TRYFIXED                      = 0x0
	MCL_CURRENT                       = 0x1
	MCL_FUTURE                        = 0x2
	MNT_ASYNC                         = 0x40
	MNT_DEFEXPORTED                   = 0x200
	MNT_DELEXPORT                     = 0x20000
	MNT_DOOMED                        = 0x8000000
	MNT_EXPORTANON                    = 0x400
	MNT_EXPORTED                      = 0x100
	MNT_EXRDONLY                      = 0x80
	MNT_FORCE                         = 0x80000
	MNT_LAZY                          = 0x3
	MNT_LOCAL                         = 0x1000
	MNT_NOATIME                       = 0x8000
	MNT_NODEV                         = 0x10
	MNT_NOEXEC                        = 0x4
	MNT_NOPERM                        = 0x20
	MNT_NOSUID                        = 0x8
	MNT_NOWAIT                        = 0x2
	MNT_QUOTA                         = 0x2000
	MNT_RDONLY                        = 0x1
	MNT_RELOAD                        = 0x40000
	MNT_ROOTFS                        = 0x4000
	MNT_SOFTDEP                       = 0x4000000
	MNT_STALLED                       = 0x100000
	MNT_SWAPPABLE                     = 0x200000
	MNT_SYNCHRONOUS                   = 0x2
	MNT_UPDATE                        = 0x10000
	MNT_VISFLAGMASK                   = 0x400ffff
	MNT_WAIT                          = 0x1
	MNT_WANTRDWR                      = 0x2000000
	MNT_WXALLOWED                     = 0x800
	MOUNT_AFS                         = "afs"
	MOUNT_CD9660                      = "cd9660"
	MOUNT_EXT2FS                      = "ext2fs"
	MOUNT_FFS                         = "ffs"
	MOUNT_FUSEFS                      = "fuse"
	MOUNT_MFS                         = "mfs"
	MOUNT_MSDOS                       = "msdos"
	MOUNT_NCPFS                       = "ncpfs"
	MOUNT_NFS                         = "nfs"
	MOUNT_NTFS                        = "ntfs"
	MOUNT_TMPFS                       = "tmpfs"
	MOUNT_UDF                         = "udf"
	MOUNT_UFS                         = "ffs"
	MSG_BCAST                         = 0x100
	MSG_CMSG_CLOEXEC                  = 0x800
	MSG_CTRUNC                        = 0x20
	MSG_DONTROUTE                     = 0x4
	MSG_DONTWAIT                      = 0x80
	MSG_EOR                           = 0x8
	MSG_MCAST                         = 0x200
	MSG_NOSIGNAL                      = 0x400
	MSG_OOB                           = 0x1
	MSG_PEEK                          = 0x2
	MSG_TRUNC                         = 0x10
	MSG_WAITALL                       = 0x40
	MSG_WAITFORONE                    = 0x1000
	MS_ASYNC                          = 0x1
	MS_INVALIDATE                     = 0x4
	MS_SYNC                           = 0x2
	NAME_MAX                          = 0xff
	NET_RT_DUMP                       = 0x1
	NET_RT_FLAGS                      = 0x2
	NET_RT_IFLIST                     = 0x3
	NET_RT_IFNAMES                    = 0x6
	NET_RT_MAXID                      = 0x8
	NET_RT_SOURCE                     = 0x7
	NET_RT_STATS                      = 0x4
	NET_RT_TABLE                      = 0x5
	NFDBITS                           = 0x20
	NOFLSH                            = 0x80000000
	NOKERNINFO                        = 0x2000000
	NOTE_ATTRIB                       = 0x8
	NOTE_CHANGE                       = 0x1
	NOTE_CHILD                        = 0x4
	NOTE_DELETE                       = 0x1
	NOTE_EOF                          = 0x2
	NOTE_EXEC                         = 0x20000000
	NOTE_EXIT                         = 0x80000000
	NOTE_EXTEND                       = 0x4
	NOTE_FORK                         = 0x40000000
	NOTE_LINK                         = 0x10
	NOTE_LOWAT                        = 0x1
	NOTE_OOB                          = 0x4
	NOTE_PCTRLMASK                    = 0xf0000000
	NOTE_PDATAMASK                    = 0xfffff
	NOTE_RENAME                       = 0x20
	NOTE_REVOKE                       = 0x40
	NOTE_TRACK                        = 0x1
	NOTE_TRACKERR                     = 0x2
	NOTE_TRUNCATE                     = 0x80
	NOTE_WRITE                        = 0x2
	OCRNL                             = 0x10
	OLCUC                             = 0x20
	ONLCR                             = 0x2
	ONLRET                            = 0x80
	ONOCR                             = 0x40
	ONOEOT                            = 0x8
	OPOST                             = 0x1
	OXTABS                            = 0x4
	O_ACCMODE                         = 0x3
	O_APPEND                          = 0x8
	O_ASYNC                           = 0x40
	O_CLOEXEC                         = 0x10000
	O_CREAT                           = 0x200
	O_DIRECTORY                       = 0x20000
	O_DSYNC                           = 0x80
	O_EXCL                            = 0x800
	O_EXLOCK                          = 0x20
	O_FSYNC                           = 0x80
	O_NDELAY                          = 0x4
	O_NOCTTY                          = 0x8000
	O_NOFOLLOW                        = 0x100
	O_NONBLOCK                        = 0x4
	O_RDONLY                          = 0x0
	O_RDWR                            = 0x2
	O_RSYNC                           = 0x80
	O_SHLOCK                          = 0x10
	O_SYNC                            = 0x80
	O_TRUNC                           = 0x400
	O_WRONLY                          = 0x1
	PARENB                            = 0x1000
	PARMRK                            = 0x8
	PARODD                            = 0x2000
	PENDIN                            = 0x20000000
	PF_FLUSH                          = 0x1
	PRIO_PGRP                         = 0x1
	PRIO_PROCESS                      = 0x0
	PRIO_USER                         = 0x2
	PROT_EXEC                         = 0x4
	PROT_NONE                         = 0x0
	PROT_READ                         = 0x1
	PROT_WRITE                        = 0x2
	RLIMIT_CORE                       = 0x4
	RLIMIT_CPU                        = 0x0
	RLIMIT_DATA                       = 0x2
	RLIMIT_FSIZE                      = 0x1
	RLIMIT_MEMLOCK                    = 0x6
	RLIMIT_NOFILE                     = 0x8
	RLIMIT_NPROC                      = 0x7
	RLIMIT_RSS                        = 0x5
	RLIMIT_STACK                      = 0x3
	RLIM_INFINITY                     = 0x7fffffffffffffff
	RTAX_AUTHOR                       = 0x6
	RTAX_BFD                          = 0xb
	RTAX_BRD                          = 0x7
	RTAX_DNS                          = 0xc
	RTAX_DST                          = 0x0
	RTAX_GATEWAY                      = 0x1
	RTAX_GENMASK                      = 0x3
	RTAX_IFA                          = 0x5
	RTAX_IFP                          = 0x4
	RTAX_LABEL                        = 0xa
	RTAX_MAX                          = 0xf
	RTAX_NETMASK                      = 0x2
	RTAX_SEARCH                       = 0xe
	RTAX_SRC                          = 0x8
	RTAX_SRCMASK                      = 0x9
	RTAX_STATIC                       = 0xd
	RTA_AUTHOR                        = 0x40
	RTA_BFD                           = 0x800
	RTA_BRD                           = 0x80
	RTA_DNS                           = 0x1000
	RTA_DST                           = 0x1
	RTA_GATEWAY                       = 0x2
	RTA_GENMASK                       = 0x8
	RTA_IFA                           = 0x20
	RTA_IFP                           = 0x10
	RTA_LABEL                         = 0x400
	RTA_NETMASK                       = 0x4
	RTA_SEARCH                        = 0x4000
	RTA_SRC                           = 0x100
	RTA_SRCMASK                       = 0x200
	RTA_STATIC                        = 0x2000
	RTF_ANNOUNCE                      = 0x4000
	RTF_BFD                           = 0x1000000
	RTF_BLACKHOLE                     = 0x1000
	RTF_BROADCAST                     = 0x400000
	RTF_CACHED                        = 0x20000
	RTF_CLONED                        = 0x10000
	RTF_CLONING                       = 0x100
	RTF_CONNECTED                     = 0x800000
	RTF_DONE                          = 0x40
	RTF_DYNAMIC                       = 0x10
	RTF_FMASK                         = 0x110fc08
	RTF_GATEWAY                       = 0x2
	RTF_HOST                          = 0x4
	RTF_LLINFO                        = 0x400
	RTF_LOCAL                         = 0x200000
	RTF_MODIFIED                      = 0x20
	RTF_MPATH                         = 0x40000
	RTF_MPLS                          = 0x100000
	RTF_MULTICAST                     = 0x200
	RTF_PERMANENT_ARP                 = 0x2000
	RTF_PROTO1                        = 0x8000
	RTF_PROTO2                        = 0x4000
	RTF_PROTO3                        = 0x2000
	RTF_REJECT                        = 0x8
	RTF_STATIC                        = 0x800
	RTF_UP                            = 0x1
	RTF_USETRAILERS                   = 0x8000
	RTM_80211INFO                     = 0x15
	RTM_ADD                           = 0x1
	RTM_BFD                           = 0x12
	RTM_CHANGE                        = 0x3
	RTM_CHGADDRATTR                   = 0x14
	RTM_DELADDR                       = 0xd
	RTM_DELETE                        = 0x2
	RTM_DESYNC                        = 0x10
	RTM_GET                           = 0x4
	RTM_IFANNOUNCE                    = 0xf
	RTM_IFINFO                        = 0xe
	RTM_INVALIDATE                    = 0x11
	RTM_LOSING                        = 0x5
	RTM_MAXSIZE                       = 0x800
	RTM_MISS                          = 0x7
	RTM_NEWADDR                       = 0xc
	RTM_PROPOSAL                      = 0x13
	RTM_REDIRECT                      = 0x6
	RTM_RESOLVE                       = 0xb
	RTM_SOURCE                        = 0x16
	RTM_VERSION                       = 0x5
	RTV_EXPIRE                        = 0x4
	RTV_HOPCOUNT                      = 0x2
	RTV_MTU                           = 0x1
	RTV_RPIPE                         = 0x8
	RTV_RTT                           = 0x40
	RTV_RTTVAR                        = 0x80
	RTV_SPIPE                         = 0x10
	RTV_SSTHRESH                      = 0x20
	RT_TABLEID_BITS                   = 0x8
	RT_TABLEID_MASK                   = 0xff
	RT_TABLEID_MAX                    = 0xff
	RUSAGE_CHILDREN                   = -0x1
	RUSAGE_SELF                       = 0x0
	RUSAGE_THREAD                     = 0x1
	SCM_RIGHTS                        = 0x1
	SCM_TIMESTAMP                     = 0x4
	SEEK_CUR                          = 0x1
	SEEK_END                          = 0x2
	SEEK_SET                          = 0x0
	SHUT_RD                           = 0x0
	SHUT_RDWR                         = 0x2
	SHUT_WR                           = 0x1
	SIOCADDMULTI                      = 0x80206931
	SIOCAIFADDR                       = 0x8040691a
	SIOCAIFGROUP                      = 0x80286987
	SIOCATMARK                        = 0x40047307
	SIOCBRDGADD                       = 0x8060693c
	SIOCBRDGADDL                      = 0x80606949
	SIOCBRDGADDS                      = 0x80606941
	SIOCBRDGARL                       = 0x808c694d
	SIOCBRDGDADDR                     = 0x81286947
	SIOCBRDGDEL                       = 0x8060693d
	SIOCBRDGDELS                      = 0x80606942
	SIOCBRDGFLUSH                     = 0x80606948
	SIOCBRDGFRL                       = 0x808c694e
	SIOCBRDGGCACHE                    = 0xc0146941
	SIOCBRDGGFD                       = 0xc0146952
	SIOCBRDGGHT                       = 0xc0146951
	SIOCBRDGGIFFLGS                   = 0xc060693e
	SIOCBRDGGMA                       = 0xc0146953
	SIOCBRDGGPARAM                    = 0xc0406958
	SIOCBRDGGPRI                      = 0xc0146950
	SIOCBRDGGRL                       = 0xc030694f
	SIOCBRDGGTO                       = 0xc0146946
	SIOCBRDGIFS                       = 0xc0606942
	SIOCBRDGRTS                       = 0xc0206943
	SIOCBRDGSADDR                     = 0xc1286944
	SIOCBRDGSCACHE                    = 0x80146940
	SIOCBRDGSFD                       = 0x80146952
	SIOCBRDGSHT                       = 0x80146951
	SIOCBRDGSIFCOST                   = 0x80606955
	SIOCBRDGSIFFLGS                   = 0x8060693f
	SIOCBRDGSIFPRIO                   = 0x80606954
	SIOCBRDGSIFPROT                   = 0x8060694a
	SIOCBRDGSMA                       = 0x80146953
	SIOCBRDGSPRI                      = 0x80146950
	SIOCBRDGSPROTO                    = 0x8014695a
	SIOCBRDGSTO                       = 0x80146945
	SIOCBRDGSTXHC                     = 0x80146959
	SIOCDELLABEL                      = 0x80206997
	SIOCDELMULTI                      = 0x80206932
	SIOCDIFADDR                       = 0x80206919
	SIOCDIFGROUP                      = 0x80286989
	SIOCDIFPARENT                     = 0x802069b4
	SIOCDIFPHYADDR                    = 0x80206949
	SIOCDPWE3NEIGHBOR                 = 0x802069de
	SIOCDVNETID                       = 0x802069af
	SIOCGETKALIVE                     = 0xc01869a4
	SIOCGETLABEL                      = 0x8020699a
	SIOCGETMPWCFG                     = 0xc02069ae
	SIOCGETPFLOW                      = 0xc02069fe
	SIOCGETPFSYNC                     = 0xc02069f8
	SIOCGETSGCNT                      = 0xc0207534
	SIOCGETVIFCNT                     = 0xc0287533
	SIOCGETVLAN                       = 0xc0206990
	SIOCGIFADDR                       = 0xc0206921
	SIOCGIFBRDADDR                    = 0xc0206923
	SIOCGIFCONF                       = 0xc0106924
	SIOCGIFDATA                       = 0xc020691b
	SIOCGIFDESCR                      = 0xc0206981
	SIOCGIFDSTADDR                    = 0xc0206922
	SIOCGIFFLAGS                      = 0xc0206911
	SIOCGIFGATTR                      = 0xc028698b
	SIOCGIFGENERIC                    = 0xc020693a
	SIOCGIFGLIST                      = 0xc028698d
	SIOCGIFGMEMB                      = 0xc028698a
	SIOCGIFGROUP                      = 0xc0286988
	SIOCGIFHARDMTU                    = 0xc02069a5
	SIOCGIFLLPRIO                     = 0xc02069b6
	SIOCGIFMEDIA                      = 0xc0406938
	SIOCGIFMETRIC                     = 0xc0206917
	SIOCGIFMTU                        = 0xc020697e
	SIOCGIFNETMASK                    = 0xc0206925
	SIOCGIFPAIR                       = 0xc02069b1
	SIOCGIFPARENT                     = 0xc02069b3
	SIOCGIFPRIORITY                   = 0xc020699c
	SIOCGIFRDOMAIN                    = 0xc02069a0
	SIOCGIFRTLABEL                    = 0xc0206983
	SIOCGIFRXR                        = 0x802069aa
	SIOCGIFSFFPAGE                    = 0xc1126939
	SIOCGIFXFLAGS                     = 0xc020699e
	SIOCGLIFPHYADDR                   = 0xc218694b
	SIOCGLIFPHYDF                     = 0xc02069c2
	SIOCGLIFPHYECN                    = 0xc02069c8
	SIOCGLIFPHYRTABLE                 = 0xc02069a2
	SIOCGLIFPHYTTL                    = 0xc02069a9
	SIOCGPGRP                         = 0x40047309
	SIOCGPWE3                         = 0xc0206998
	SIOCGPWE3CTRLWORD                 = 0xc02069dc
	SIOCGPWE3FAT                      = 0xc02069dd
	SIOCGPWE3NEIGHBOR                 = 0xc21869de
	SIOCGRXHPRIO                      = 0xc02069db
	SIOCGSPPPPARAMS                   = 0xc0206994
	SIOCGTXHPRIO                      = 0xc02069c6
	SIOCGUMBINFO                      = 0xc02069be
	SIOCGUMBPARAM                     = 0xc02069c0
	SIOCGVH                           = 0xc02069f6
	SIOCGVNETFLOWID                   = 0xc02069c4
	SIOCGVNETID                       = 0xc02069a7
	SIOCIFAFATTACH                    = 0x801169ab
	SIOCIFAFDETACH                    = 0x801169ac
	SIOCIFCREATE                      = 0x8020697a
	SIOCIFDESTROY                     = 0x80206979
	SIOCIFGCLONERS                    = 0xc0106978
	SIOCSETKALIVE                     = 0x801869a3
	SIOCSETLABEL                      = 0x80206999
	SIOCSETMPWCFG                     = 0x802069ad
	SIOCSETPFLOW                      = 0x802069fd
	SIOCSETPFSYNC                     = 0x802069f7
	SIOCSETVLAN                       = 0x8020698f
	SIOCSIFADDR                       = 0x8020690c
	SIOCSIFBRDADDR                    = 0x80206913
	SIOCSIFDESCR                      = 0x80206980
	SIOCSIFDSTADDR                    = 0x8020690e
	SIOCSIFFLAGS                      = 0x80206910
	SIOCSIFGATTR                      = 0x8028698c
	SIOCSIFGENERIC                    = 0x80206939
	SIOCSIFLLADDR                     = 0x8020691f
	SIOCSIFLLPRIO                     = 0x802069b5
	SIOCSIFMEDIA                      = 0xc0206937
	SIOCSIFMETRIC                     = 0x80206918
	SIOCSIFMTU                        = 0x8020697f
	SIOCSIFNETMASK                    = 0x80206916
	SIOCSIFPAIR                       = 0x802069b0
	SIOCSIFPARENT                     = 0x802069b2
	SIOCSIFPRIORITY                   = 0x8020699b
	SIOCSIFRDOMAIN                    = 0x8020699f
	SIOCSIFRTLABEL                    = 0x80206982
	SIOCSIFXFLAGS                     = 0x8020699d
	SIOCSLIFPHYADDR                   = 0x8218694a
	SIOCSLIFPHYDF                     = 0x802069c1
	SIOCSLIFPHYECN                    = 0x802069c7
	SIOCSLIFPHYRTABLE                 = 0x802069a1
	SIOCSLIFPHYTTL                    = 0x802069a8
	SIOCSPGRP                         = 0x80047308
	SIOCSPWE3CTRLWORD                 = 0x802069dc
	SIOCSPWE3FAT                      = 0x802069dd
	SIOCSPWE3NEIGHBOR                 = 0x821869de
	SIOCSRXHPRIO                      = 0x802069db
	SIOCSSPPPPARAMS                   = 0x80206993
	SIOCSTXHPRIO                      = 0x802069c5
	SIOCSUMBPARAM                     = 0x802069bf
	SIOCSVH                           = 0xc02069f5
	SIOCSVNETFLOWID                   = 0x802069c3
	SIOCSVNETID                       = 0x802069a6
	SOCK_CLOEXEC                      = 0x8000
	SOCK_DGRAM                        = 0x2
	SOCK_DNS                          = 0x1000
	SOCK_NONBLOCK                     = 0x4000
	SOCK_RAW                          = 0x3
	SOCK_RDM                          = 0x4
	SOCK_SEQPACKET                    = 0x5
	SOCK_STREAM                       = 0x1
	SOL_SOCKET                        = 0xffff
	SOMAXCONN                         = 0x80
	SO_ACCEPTCONN                     = 0x2
	SO_BINDANY                        = 0x1000
	SO_BROADCAST                      = 0x20
	SO_DEBUG                          = 0x1
	SO_DOMAIN                         = 0x1024
	SO_DONTROUTE                      = 0x10
	SO_ERROR                          = 0x1007
	SO_KEEPALIVE                      = 0x8
	SO_LINGER                         = 0x80
	SO_NETPROC                        = 0x1020
	SO_OOBINLINE                      = 0x100
	SO_PEERCRED                       = 0x1022
	SO_PROTOCOL                       = 0x1025
	SO_RCVBUF                         = 0x1002
	SO_RCVLOWAT                       = 0x1004
	SO_RCVTIMEO                       = 0x1006
	SO_REUSEADDR                      = 0x4
	SO_REUSEPORT                      = 0x200
	SO_RTABLE                         = 0x1021
	SO_SNDBUF                         = 0x1001
	SO_SNDLOWAT                       = 0x1003
	SO_SNDTIMEO                       = 0x1005
	SO_SPLICE                         = 0x1023
	SO_TIMESTAMP                      = 0x800
	SO_TYPE                           = 0x1008
	SO_USELOOPBACK                    = 0x40
	SO_ZEROIZE                        = 0x2000
	S_BLKSIZE                         = 0x200
	S_IEXEC                           = 0x40
	S_IFBLK                           = 0x6000
	S_IFCHR                           = 0x2000
	S_IFDIR                           = 0x4000
	S_IFIFO                           = 0x1000
	S_IFLNK                           = 0xa000
	S_IFMT                            = 0xf000
	S_IFREG                           = 0x8000
	S_IFSOCK                          = 0xc000
	S_IREAD                           = 0x100
	S_IRGRP                           = 0x20
	S_IROTH                           = 0x4
	S_IRUSR                           = 0x100
	S_IRWXG                           = 0x38
	S_IRWXO                           = 0x7
	S_IRWXU                           = 0x1c0
	S_ISGID                           = 0x400
	S_ISTXT                           = 0x200
	S_ISUID                           = 0x800
	S_ISVTX                           = 0x200
	S_IWGRP                           = 0x10
	S_IWOTH                           = 0x2
	S_IWRITE                          = 0x80
	S_IWUSR                           = 0x80
	S_IXGRP                           = 0x8
	S_IXOTH                           = 0x1
	S_IXUSR                           = 0x40
	TCIFLUSH                          = 0x1
	TCIOFF                            = 0x3
	TCIOFLUSH                         = 0x3
	TCION                             = 0x4
	TCOFLUSH                          = 0x2
	TCOOFF                            = 0x1
	TCOON                             = 0x2
	TCPOPT_EOL                        = 0x0
	TCPOPT_MAXSEG                     = 0x2
	TCPOPT_NOP                        = 0x1
	TCPOPT_SACK                       = 0x5
	TCPOPT_SACK_HDR                   = 0x1010500
	TCPOPT_SACK_PERMITTED             = 0x4
	TCPOPT_SACK_PERMIT_HDR            = 0x1010402
	TCPOPT_SIGNATURE                  = 0x13
	TCPOPT_TIMESTAMP                  = 0x8
	TCPOPT_TSTAMP_HDR                 = 0x101080a
	TCPOPT_WINDOW                     = 0x3
	TCP_INFO                          = 0x9
	TCP_MAXSEG                        = 0x2
	TCP_MAXWIN                        = 0xffff
	TCP_MAX_SACK                      = 0x3
	TCP_MAX_WINSHIFT                  = 0xe
	TCP_MD5SIG                        = 0x4
	TCP_MSS                           = 0x200
	TCP_NODELAY                       = 0x1
	TCP_NOPUSH                        = 0x10
	TCP_SACKHOLE_LIMIT                = 0x80
	TCP_SACK_ENABLE                   = 0x8
	TCSAFLUSH                         = 0x2
	TIMER_ABSTIME                     = 0x1
	TIMER_RELTIME                     = 0x0
	TIOCCBRK                          = 0x2000747a
	TIOCCDTR                          = 0x20007478
	TIOCCHKVERAUTH                    = 0x2000741e
	TIOCCLRVERAUTH                    = 0x2000741d
	TIOCCONS                          = 0x80047462
	TIOCDRAIN                         = 0x2000745e
	TIOCEXCL                          = 0x2000740d
	TIOCEXT                           = 0x80047460
	TIOCFLAG_CLOCAL                   = 0x2
	TIOCFLAG_CRTSCTS                  = 0x4
	TIOCFLAG_MDMBUF                   = 0x8
	TIOCFLAG_PPS                      = 0x10
	TIOCFLAG_SOFTCAR                  = 0x1
	TIOCFLUSH                         = 0x80047410
	TIOCGETA                          = 0x402c7413
	TIOCGETD                          = 0x4004741a
	TIOCGFLAGS                        = 0x4004745d
	TIOCGPGRP                         = 0x40047477
	TIOCGSID                          = 0x40047463
	TIOCGTSTAMP                       = 0x4010745b
	TIOCGWINSZ                        = 0x40087468
	TIOCMBIC                          = 0x8004746b
	TIOCMBIS                          = 0x8004746c
	TIOCMGET                          = 0x4004746a
	TIOCMODG                          = 0x4004746a
	TIOCMODS                          = 0x8004746d
	TIOCMSET                          = 0x8004746d
	TIOCM_CAR                         = 0x40
	TIOCM_CD                          = 0x40
	TIOCM_CTS                         = 0x20
	TIOCM_DSR                         = 0x100
	TIOCM_DTR                         = 0x2
	TIOCM_LE                          = 0x1
	TIOCM_RI                          = 0x80
	TIOCM_RNG                         = 0x80
	TIOCM_RTS                         = 0x4
	TIOCM_SR                          = 0x10
	TIOCM_ST                          = 0x8
	TIOCNOTTY                         = 0x20007471
	TIOCNXCL                          = 0x2000740e
	TIOCOUTQ                          = 0x40047473
	TIOCPKT                           = 0x80047470
	TIOCPKT_DATA                      = 0x0
	TIOCPKT_DOSTOP                    = 0x20
	TIOCPKT_FLUSHREAD                 = 0x1
	TIOCPKT_FLUSHWRITE                = 0x2
	TIOCPKT_IOCTL                     = 0x40
	TIOCPKT_NOSTOP                    = 0x10
	TIOCPKT_START                     = 0x8
	TIOCPKT_STOP                      = 0x4
	TIOCREMOTE                        = 0x80047469
	TIOCSBRK                          = 0x2000747b
	TIOCSCTTY                         = 0x20007461
	TIOCSDTR                          = 0x20007479
	TIOCSETA                          = 0x802c7414
	TIOCSETAF                         = 0x802c7416
	TIOCSETAW                         = 0x802c7415
	TIOCSETD                          = 0x8004741b
	TIOCSETVERAUTH                    = 0x8004741c
	TIOCSFLAGS                        = 0x8004745c
	TIOCSIG                           = 0x8004745f
	TIOCSPGRP                         = 0x80047476
	TIOCSTART                         = 0x2000746e
	TIOCSTAT                          = 0x20007465
	TIOCSTOP                          = 0x2000746f
	TIOCSTSTAMP                       = 0x8008745a
	TIOCSWINSZ                        = 0x80087467
	TIOCUCNTL                         = 0x80047466
	TIOCUCNTL_CBRK                    = 0x7a
	TIOCUCNTL_SBRK                    = 0x7b
	TOSTOP                            = 0x400000
	UTIME_NOW                         = -0x2
	UTIME_OMIT                        = -0x1
	VDISCARD                          = 0xf
	VDSUSP                            = 0xb
	VEOF                              = 0x0
	VEOL                              = 0x1
	VEOL2                             = 0x2
	VERASE                            = 0x3
	VINTR                             = 0x8
	VKILL                             = 0x5
	VLNEXT                            = 0xe
	VMIN                              = 0x10
	VM_ANONMIN                        = 0x7
	VM_LOADAVG                        = 0x2
	VM_MALLOC_CONF                    = 0xc
	VM_MAXID                          = 0xd
	VM_MAXSLP                         = 0xa
	VM_METER                          = 0x1
	VM_NKMEMPAGES                     = 0x6
	VM_PSSTRINGS                      = 0x3
	VM_SWAPENCRYPT                    = 0x5
	VM_USPACE                         = 0xb
	VM_UVMEXP                         = 0x4
	VM_VNODEMIN                       = 0x9
	VM_VTEXTMIN                       = 0x8
	VQUIT                             = 0x9
	VREPRINT                          = 0x6
	VSTART                            = 0xc
	VSTATUS                           = 0x12
	VSTOP                             = 0xd
	VSUSP                             = 0xa
	VTIME                             = 0x11
	VWERASE                           = 0x4
	WALTSIG                           = 0x4
	WCONTINUED                        = 0x8
	WCOREFLAG                         = 0x80
	WNOHANG                           = 0x1
	WUNTRACED                         = 0x2
	XCASE                             = 0x1000000
)

// Errors
const (
	E2BIG           = syscall.Errno(0x7)
	EACCES          = syscall.Errno(0xd)
	EADDRINUSE      = syscall.Errno(0x30)
	EADDRNOTAVAIL   = syscall.Errno(0x31)
	EAFNOSUPPORT    = syscall.Errno(0x2f)
	EAGAIN          = syscall.Errno(0x23)
	EALREADY        = syscall.Errno(0x25)
	EAUTH           = syscall.Errno(0x50)
	EBADF           = syscall.Errno(0x9)
	EBADMSG         = syscall.Errno(0x5c)
	EBADRPC         = syscall.Errno(0x48)
	EBUSY           = syscall.Errno(0x10)
	ECANCELED       = syscall.Errno(0x58)
	ECHILD          = syscall.Errno(0xa)
	ECONNABORTED    = syscall.Errno(0x35)
	ECONNREFUSED    = syscall.Errno(0x3d)
	ECONNRESET      = syscall.Errno(0x36)
	EDEADLK         = syscall.Errno(0xb)
	EDESTADDRREQ    = syscall.Errno(0x27)
	EDOM            = syscall.Errno(0x21)
	EDQUOT          = syscall.Errno(0x45)
	EEXIST          = syscall.Errno(0x11)
	EFAULT          = syscall.Errno(0xe)
	EFBIG           = syscall.Errno(0x1b)
	EFTYPE          = syscall.Errno(0x4f)
	EHOSTDOWN       = syscall.Errno(0x40)
	EHOSTUNREACH    = syscall.Errno(0x41)
	EIDRM           = syscall.Errno(0x59)
	EILSEQ          = syscall.Errno(0x54)
	EINPROGRESS     = syscall.Errno(0x24)
	EINTR           = syscall.Errno(0x4)
	EINVAL          = syscall.Errno(0x16)
	EIO             = syscall.Errno(0x5)
	EIPSEC          = syscall.Errno(0x52)
	EISCONN         = syscall.Errno(0x38)
	EISDIR          = syscall.Errno(0x15)
	ELAST           = syscall.Errno(0x5f)
	ELOOP           = syscall.Errno(0x3e)
	EMEDIUMTYPE     = syscall.Errno(0x56)
	EMFILE          = syscall.Errno(0x18)
	EMLINK          = syscall.Errno(0x1f)
	EMSGSIZE        = syscall.Errno(0x28)
	ENAMETOOLONG    = syscall.Errno(0x3f)
	ENEEDAUTH       = syscall.Errno(0x51)
	ENETDOWN        = syscall.Errno(0x32)
	ENETRESET       = syscall.Errno(0x34)
	ENETUNREACH     = syscall.Errno(0x33)
	ENFILE          = syscall.Errno(0x17)
	ENOATTR         = syscall.Errno(0x53)
	ENOBUFS         = syscall.Errno(0x37)
	ENODEV          = syscall.Errno(0x13)
	ENOENT          = syscall.Errno(0x2)
	ENOEXEC         = syscall.Errno(0x8)
	ENOLCK          = syscall.Errno(0x4d)
	ENOMEDIUM       = syscall.Errno(0x55)
	ENOMEM          = syscall.Errno(0xc)
	ENOMSG          = syscall.Errno(0x5a)
	ENOPROTOOPT     = syscall.Errno(0x2a)
	ENOSPC          = syscall.Errno(0x1c)
	ENOSYS          = syscall.Errno(0x4e)
	ENOTBLK         = syscall.Errno(0xf)
	ENOTCONN        = syscall.Errno(0x39)
	ENOTDIR         = syscall.Errno(0x14)
	ENOTEMPTY       = syscall.Errno(0x42)
	ENOTRECOVERABLE = syscall.Errno(0x5d)
	ENOTSOCK        = syscall.Errno(0x26)
	ENOTSUP         = syscall.Errno(0x5b)
	ENOTTY          = syscall.Errno(0x19)
	ENXIO           = syscall.Errno(0x6)
	EOPNOTSUPP      = syscall.Errno(0x2d)
	EOVERFLOW       = syscall.Errno(0x57)
	EOWNERDEAD      = syscall.Errno(0x5e)
	EPERM           = syscall.Errno(0x1)
	EPFNOSUPPORT    = syscall.Errno(0x2e)
	EPIPE           = syscall.Errno(0x20)
	EPROCLIM        = syscall.Errno(0x43)
	EPROCUNAVAIL    = syscall.Errno(0x4c)
	EPROGMISMATCH   = syscall.Errno(0x4b)
	EPROGUNAVAIL    = syscall.Errno(0x4a)
	EPROTO          = syscall.Errno(0x5f)
	EPROTONOSUPPORT = syscall.Errno(0x2b)
	EPROTOTYPE      = syscall.Errno(0x29)
	ERANGE          = syscall.Errno(0x22)
	EREMOTE         = syscall.Errno(0x47)
	EROFS           = syscall.Errno(0x1e)
	ERPCMISMATCH    = syscall.Errno(0x49)
	ESHUTDOWN       = syscall.Errno(0x3a)
	ESOCKTNOSUPPORT = syscall.Errno(0x2c)
	ESPIPE          = syscall.Errno(0x1d)
	ESRCH           = syscall.Errno(0x3)
	ESTALE          = syscall.Errno(0x46)
	ETIMEDOUT       = syscall.Errno(0x3c)
	ETOOMANYREFS    = syscall.Errno(0x3b)
	ETXTBSY         = syscall.Errno(0x1a)
	EUSERS          = syscall.Errno(0x44)
	EWOULDBLOCK     = syscall.Errno(0x23)
	EXDEV           = syscall.Errno(0x12)
)

// Signals
const (
	SIGABRT   = syscall.Signal(0x6)
	SIGALRM   = syscall.Signal(0xe)
	SIGBUS    = syscall.Signal(0xa)
	SIGCHLD   = syscall.Signal(0x14)
	SIGCONT   = syscall.Signal(0x13)
	SIGEMT    = syscall.Signal(0x7)
	SIGFPE    = syscall.Signal(0x8)
	SIGHUP    = syscall.Signal(0x1)
	SIGILL    = syscall.Signal(0x4)
	SIGINFO   = syscall.Signal(0x1d)
	SIGINT    = syscall.Signal(0x2)
	SIGIO     = syscall.Signal(0x17)
	SIGIOT    = syscall.Signal(0x6)
	SIGKILL   = syscall.Signal(0x9)
	SIGPIPE   = syscall.Signal(0xd)
	SIGPROF   = syscall.Signal(0x1b)
	SIGQUIT   = syscall.Signal(0x3)
	SIGSEGV   = syscall.Signal(0xb)
	SIGSTOP   = syscall.Signal(0x11)
	SIGSYS    = syscall.Signal(0xc)
	SIGTERM   = syscall.Signal(0xf)
	SIGTHR    = syscall.Signal(0x20)
	SIGTRAP   = syscall.Signal(0x5)
	SIGTSTP   = syscall.Signal(0x12)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x10)
	SIGUSR1   = syscall.Signal(0x1e)
	SIGUSR2   = syscall.Signal(0x1f)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "device not configured"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EDEADLK", "resource deadlock avoided"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "cross-device link"},
	{19, "ENODEV", "operation not supported by device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "result too large"},
	{35, "EAGAIN", "resource temporarily unavailable"},
	{36, "EINPROGRESS", "operation now in progress"},
	{37, "EALREADY", "operation already in progress"},
	{38, "ENOTSOCK", "socket operation on non-socket"},
	{39, "EDESTADDRREQ", "destination address required"},
	{40, "EMSGSIZE", "message too long"},
	{41, "EPROTOTYPE", "protocol wrong type for socket"},
	{42, "ENOPROTOOPT", "protocol not available"},
	{43, "EPROTONOSUPPORT", "protocol not supported"},
	{44, "ESOCKTNOSUPPORT", "socket type not supported"},
	{45, "EOPNOTSUPP", "operation not supported"},
	{46, "EPFNOSUPPORT", "protocol family not supported"},
	{47, "EAFNOSUPPORT", "address family not supported by protocol family"},
	{48, "EADDRINUSE", "address already in use"},
	{49, "EADDRNOTAVAIL", "can't assign requested address"},
	{50, "ENETDOWN", "network is down"},
	{51, "ENETUNREACH", "network is unreachable"},
	{52, "ENETRESET", "network dropped connection on reset"},
	{53, "ECONNABORTED", "software caused connection abort"},
	{54, "ECONNRESET", "connection reset by peer"},
	{55, "ENOBUFS", "no buffer space available"},
	{56, "EISCONN", "socket is already connected"},
	{57, "ENOTCONN", "socket is not connected"},
	{58, "ESHUTDOWN", "can't send after socket shutdown"},
	{59, "ETOOMANYREFS", "too many references: can't splice"},
	{60, "ETIMEDOUT", "operation timed out"},
	{61, "ECONNREFUSED", "connection refused"},
	{62, "ELOOP", "too many levels of symbolic links"},
	{63, "ENAMETOOLONG", "file name too long"},
	{64, "EHOSTDOWN", "host is down"},
	{65, "EHOSTUNREACH", "no route to host"},
	{66, "ENOTEMPTY", "directory not empty"},
	{67, "EPROCLIM", "too many processes"},
	{68, "EUSERS", "too many users"},
	{69, "EDQUOT", "disk quota exceeded"},
	{70, "ESTALE", "stale NFS file handle"},
	{71, "EREMOTE", "too many levels of remote in path"},
	{72, "EBADRPC", "RPC struct is bad"},
	{73, "ERPCMISMATCH", "RPC version wrong"},
	{74, "EPROGUNAVAIL", "RPC program not available"},
	{75, "EPROGMISMATCH", "program version wrong"},
	{76, "EPROCUNAVAIL", "bad procedure for program"},
	{77, "ENOLCK", "no locks available"},
	{78, "ENOSYS", "function not implemented"},
	{79, "EFTYPE", "inappropriate file type or format"},
	{80, "EAUTH", "authentication error"},
	{81, "ENEEDAUTH", "need authenticator"},
	{82, "EIPSEC", "IPsec processing failure"},
	{83, "ENOATTR", "attribute not found"},
	{84, "EILSEQ", "illegal byte sequence"},
	{85, "ENOMEDIUM", "no medium found"},
	{86, "EMEDIUMTYPE", "wrong medium type"},
	{87, "EOVERFLOW", "value too large to be stored in data type"},
	{88, "ECANCELED", "operation canceled"},
	{89, "EIDRM", "identifier removed"},
	{90, "ENOMSG", "no message of desired type"},
	{91, "ENOTSUP", "not supported"},
	{92, "EBADMSG", "bad message"},
	{93, "ENOTRECOVERABLE", "state not recoverable"},
	{94, "EOWNERDEAD", "previous owner died"},
	{95, "ELAST", "protocol error"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/BPT trap"},
	{6, "SIGABRT", "abort trap"},
	{7, "SIGEMT", "EMT trap"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus error"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGSYS", "bad system call"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGURG", "urgent I/O condition"},
	{17, "SIGSTOP", "suspended (signal)"},
	{18, "SIGTSTP", "suspended"},
	{19, "SIGCONT", "continued"},
	{20, "SIGCHLD", "child exited"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGIO", "I/O possible"},
	{24, "SIGXCPU", "cputime limit exceeded"},
	{25, "SIGXFSZ", "filesize limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window size changes"},
	{29, "SIGINFO", "information request"},
	{30, "SIGUSR1", "user defined signal 1"},
	{31, "SIGUSR2", "user defined signal 2"},
	{32, "SIGTHR", "thread AST"},
}
  07070100000E44000081A4000000000000000000000001645E367C000139FE000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_openbsd_riscv64.go   // mkerrors.sh -m64
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build riscv64 && openbsd
// +build riscv64,openbsd

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -m64 _const.go

package unix

import "syscall"

const (
	AF_APPLETALK                      = 0x10
	AF_BLUETOOTH                      = 0x20
	AF_CCITT                          = 0xa
	AF_CHAOS                          = 0x5
	AF_CNT                            = 0x15
	AF_COIP                           = 0x14
	AF_DATAKIT                        = 0x9
	AF_DECnet                         = 0xc
	AF_DLI                            = 0xd
	AF_E164                           = 0x1a
	AF_ECMA                           = 0x8
	AF_ENCAP                          = 0x1c
	AF_HYLINK                         = 0xf
	AF_IMPLINK                        = 0x3
	AF_INET                           = 0x2
	AF_INET6                          = 0x18
	AF_IPX                            = 0x17
	AF_ISDN                           = 0x1a
	AF_ISO                            = 0x7
	AF_KEY                            = 0x1e
	AF_LAT                            = 0xe
	AF_LINK                           = 0x12
	AF_LOCAL                          = 0x1
	AF_MAX                            = 0x24
	AF_MPLS                           = 0x21
	AF_NATM                           = 0x1b
	AF_NS                             = 0x6
	AF_OSI                            = 0x7
	AF_PUP                            = 0x4
	AF_ROUTE                          = 0x11
	AF_SIP                            = 0x1d
	AF_SNA                            = 0xb
	AF_UNIX                           = 0x1
	AF_UNSPEC                         = 0x0
	ALTWERASE                         = 0x200
	ARPHRD_ETHER                      = 0x1
	ARPHRD_FRELAY                     = 0xf
	ARPHRD_IEEE1394                   = 0x18
	ARPHRD_IEEE802                    = 0x6
	B0                                = 0x0
	B110                              = 0x6e
	B115200                           = 0x1c200
	B1200                             = 0x4b0
	B134                              = 0x86
	B14400                            = 0x3840
	B150                              = 0x96
	B1800                             = 0x708
	B19200                            = 0x4b00
	B200                              = 0xc8
	B230400                           = 0x38400
	B2400                             = 0x960
	B28800                            = 0x7080
	B300                              = 0x12c
	B38400                            = 0x9600
	B4800                             = 0x12c0
	B50                               = 0x32
	B57600                            = 0xe100
	B600                              = 0x258
	B7200                             = 0x1c20
	B75                               = 0x4b
	B76800                            = 0x12c00
	B9600                             = 0x2580
	BIOCFLUSH                         = 0x20004268
	BIOCGBLEN                         = 0x40044266
	BIOCGDIRFILT                      = 0x4004427c
	BIOCGDLT                          = 0x4004426a
	BIOCGDLTLIST                      = 0xc010427b
	BIOCGETIF                         = 0x4020426b
	BIOCGFILDROP                      = 0x40044278
	BIOCGHDRCMPLT                     = 0x40044274
	BIOCGRSIG                         = 0x40044273
	BIOCGRTIMEOUT                     = 0x4010426e
	BIOCGSTATS                        = 0x4008426f
	BIOCIMMEDIATE                     = 0x80044270
	BIOCLOCK                          = 0x20004276
	BIOCPROMISC                       = 0x20004269
	BIOCSBLEN                         = 0xc0044266
	BIOCSDIRFILT                      = 0x8004427d
	BIOCSDLT                          = 0x8004427a
	BIOCSETF                          = 0x80104267
	BIOCSETIF                         = 0x8020426c
	BIOCSETWF                         = 0x80104277
	BIOCSFILDROP                      = 0x80044279
	BIOCSHDRCMPLT                     = 0x80044275
	BIOCSRSIG                         = 0x80044272
	BIOCSRTIMEOUT                     = 0x8010426d
	BIOCVERSION                       = 0x40044271
	BPF_A                             = 0x10
	BPF_ABS                           = 0x20
	BPF_ADD                           = 0x0
	BPF_ALIGNMENT                     = 0x4
	BPF_ALU                           = 0x4
	BPF_AND                           = 0x50
	BPF_B                             = 0x10
	BPF_DIRECTION_IN                  = 0x1
	BPF_DIRECTION_OUT                 = 0x2
	BPF_DIV                           = 0x30
	BPF_FILDROP_CAPTURE               = 0x1
	BPF_FILDROP_DROP                  = 0x2
	BPF_FILDROP_PASS                  = 0x0
	BPF_F_DIR_IN                      = 0x10
	BPF_F_DIR_MASK                    = 0x30
	BPF_F_DIR_OUT                     = 0x20
	BPF_F_DIR_SHIFT                   = 0x4
	BPF_F_FLOWID                      = 0x8
	BPF_F_PRI_MASK                    = 0x7
	BPF_H                             = 0x8
	BPF_IMM                           = 0x0
	BPF_IND                           = 0x40
	BPF_JA                            = 0x0
	BPF_JEQ                           = 0x10
	BPF_JGE                           = 0x30
	BPF_JGT                           = 0x20
	BPF_JMP                           = 0x5
	BPF_JSET                          = 0x40
	BPF_K                             = 0x0
	BPF_LD                            = 0x0
	BPF_LDX                           = 0x1
	BPF_LEN                           = 0x80
	BPF_LSH                           = 0x60
	BPF_MAJOR_VERSION                 = 0x1
	BPF_MAXBUFSIZE                    = 0x200000
	BPF_MAXINSNS                      = 0x200
	BPF_MEM                           = 0x60
	BPF_MEMWORDS                      = 0x10
	BPF_MINBUFSIZE                    = 0x20
	BPF_MINOR_VERSION                 = 0x1
	BPF_MISC                          = 0x7
	BPF_MSH                           = 0xa0
	BPF_MUL                           = 0x20
	BPF_NEG                           = 0x80
	BPF_OR                            = 0x40
	BPF_RELEASE                       = 0x30bb6
	BPF_RET                           = 0x6
	BPF_RND                           = 0xc0
	BPF_RSH                           = 0x70
	BPF_ST                            = 0x2
	BPF_STX                           = 0x3
	BPF_SUB                           = 0x10
	BPF_TAX                           = 0x0
	BPF_TXA                           = 0x80
	BPF_W                             = 0x0
	BPF_X                             = 0x8
	BRKINT                            = 0x2
	CFLUSH                            = 0xf
	CLOCAL                            = 0x8000
	CLOCK_BOOTTIME                    = 0x6
	CLOCK_MONOTONIC                   = 0x3
	CLOCK_PROCESS_CPUTIME_ID          = 0x2
	CLOCK_REALTIME                    = 0x0
	CLOCK_THREAD_CPUTIME_ID           = 0x4
	CLOCK_UPTIME                      = 0x5
	CPUSTATES                         = 0x6
	CP_IDLE                           = 0x5
	CP_INTR                           = 0x4
	CP_NICE                           = 0x1
	CP_SPIN                           = 0x3
	CP_SYS                            = 0x2
	CP_USER                           = 0x0
	CREAD                             = 0x800
	CRTSCTS                           = 0x10000
	CS5                               = 0x0
	CS6                               = 0x100
	CS7                               = 0x200
	CS8                               = 0x300
	CSIZE                             = 0x300
	CSTART                            = 0x11
	CSTATUS                           = 0xff
	CSTOP                             = 0x13
	CSTOPB                            = 0x400
	CSUSP                             = 0x1a
	CTL_HW                            = 0x6
	CTL_KERN                          = 0x1
	CTL_MAXNAME                       = 0xc
	CTL_NET                           = 0x4
	DIOCADDQUEUE                      = 0xc110445d
	DIOCADDRULE                       = 0xcd604404
	DIOCADDSTATE                      = 0xc1084425
	DIOCCHANGERULE                    = 0xcd60441a
	DIOCCLRIFFLAG                     = 0xc028445a
	DIOCCLRSRCNODES                   = 0x20004455
	DIOCCLRSTATES                     = 0xc0e04412
	DIOCCLRSTATUS                     = 0xc0284416
	DIOCGETLIMIT                      = 0xc0084427
	DIOCGETQSTATS                     = 0xc1204460
	DIOCGETQUEUE                      = 0xc110445f
	DIOCGETQUEUES                     = 0xc110445e
	DIOCGETRULE                       = 0xcd604407
	DIOCGETRULES                      = 0xcd604406
	DIOCGETRULESET                    = 0xc444443b
	DIOCGETRULESETS                   = 0xc444443a
	DIOCGETSRCNODES                   = 0xc0104454
	DIOCGETSTATE                      = 0xc1084413
	DIOCGETSTATES                     = 0xc0104419
	DIOCGETSTATUS                     = 0xc1e84415
	DIOCGETSYNFLWATS                  = 0xc0084463
	DIOCGETTIMEOUT                    = 0xc008441e
	DIOCIGETIFACES                    = 0xc0284457
	DIOCKILLSRCNODES                  = 0xc080445b
	DIOCKILLSTATES                    = 0xc0e04429
	DIOCNATLOOK                       = 0xc0504417
	DIOCOSFPADD                       = 0xc088444f
	DIOCOSFPFLUSH                     = 0x2000444e
	DIOCOSFPGET                       = 0xc0884450
	DIOCRADDADDRS                     = 0xc4504443
	DIOCRADDTABLES                    = 0xc450443d
	DIOCRCLRADDRS                     = 0xc4504442
	DIOCRCLRASTATS                    = 0xc4504448
	DIOCRCLRTABLES                    = 0xc450443c
	DIOCRCLRTSTATS                    = 0xc4504441
	DIOCRDELADDRS                     = 0xc4504444
	DIOCRDELTABLES                    = 0xc450443e
	DIOCRGETADDRS                     = 0xc4504446
	DIOCRGETASTATS                    = 0xc4504447
	DIOCRGETTABLES                    = 0xc450443f
	DIOCRGETTSTATS                    = 0xc4504440
	DIOCRINADEFINE                    = 0xc450444d
	DIOCRSETADDRS                     = 0xc4504445
	DIOCRSETTFLAGS                    = 0xc450444a
	DIOCRTSTADDRS                     = 0xc4504449
	DIOCSETDEBUG                      = 0xc0044418
	DIOCSETHOSTID                     = 0xc0044456
	DIOCSETIFFLAG                     = 0xc0284459
	DIOCSETLIMIT                      = 0xc0084428
	DIOCSETREASS                      = 0xc004445c
	DIOCSETSTATUSIF                   = 0xc0284414
	DIOCSETSYNCOOKIES                 = 0xc0014462
	DIOCSETSYNFLWATS                  = 0xc0084461
	DIOCSETTIMEOUT                    = 0xc008441d
	DIOCSTART                         = 0x20004401
	DIOCSTOP                          = 0x20004402
	DIOCXBEGIN                        = 0xc0104451
	DIOCXCOMMIT                       = 0xc0104452
	DIOCXROLLBACK                     = 0xc0104453
	DLT_ARCNET                        = 0x7
	DLT_ATM_RFC1483                   = 0xb
	DLT_AX25                          = 0x3
	DLT_CHAOS                         = 0x5
	DLT_C_HDLC                        = 0x68
	DLT_EN10MB                        = 0x1
	DLT_EN3MB                         = 0x2
	DLT_ENC                           = 0xd
	DLT_FDDI                          = 0xa
	DLT_IEEE802                       = 0x6
	DLT_IEEE802_11                    = 0x69
	DLT_IEEE802_11_RADIO              = 0x7f
	DLT_LOOP                          = 0xc
	DLT_MPLS                          = 0xdb
	DLT_NULL                          = 0x0
	DLT_OPENFLOW                      = 0x10b
	DLT_PFLOG                         = 0x75
	DLT_PFSYNC                        = 0x12
	DLT_PPP                           = 0x9
	DLT_PPP_BSDOS                     = 0x10
	DLT_PPP_ETHER                     = 0x33
	DLT_PPP_SERIAL                    = 0x32
	DLT_PRONET                        = 0x4
	DLT_RAW                           = 0xe
	DLT_SLIP                          = 0x8
	DLT_SLIP_BSDOS                    = 0xf
	DLT_USBPCAP                       = 0xf9
	DLT_USER0                         = 0x93
	DLT_USER1                         = 0x94
	DLT_USER10                        = 0x9d
	DLT_USER11                        = 0x9e
	DLT_USER12                        = 0x9f
	DLT_USER13                        = 0xa0
	DLT_USER14                        = 0xa1
	DLT_USER15                        = 0xa2
	DLT_USER2                         = 0x95
	DLT_USER3                         = 0x96
	DLT_USER4                         = 0x97
	DLT_USER5                         = 0x98
	DLT_USER6                         = 0x99
	DLT_USER7                         = 0x9a
	DLT_USER8                         = 0x9b
	DLT_USER9                         = 0x9c
	DT_BLK                            = 0x6
	DT_CHR                            = 0x2
	DT_DIR                            = 0x4
	DT_FIFO                           = 0x1
	DT_LNK                            = 0xa
	DT_REG                            = 0x8
	DT_SOCK                           = 0xc
	DT_UNKNOWN                        = 0x0
	ECHO                              = 0x8
	ECHOCTL                           = 0x40
	ECHOE                             = 0x2
	ECHOK                             = 0x4
	ECHOKE                            = 0x1
	ECHONL                            = 0x10
	ECHOPRT                           = 0x20
	EMT_TAGOVF                        = 0x1
	EMUL_ENABLED                      = 0x1
	EMUL_NATIVE                       = 0x2
	ENDRUNDISC                        = 0x9
	ETH64_8021_RSVD_MASK              = 0xfffffffffff0
	ETH64_8021_RSVD_PREFIX            = 0x180c2000000
	ETHERMIN                          = 0x2e
	ETHERMTU                          = 0x5dc
	ETHERTYPE_8023                    = 0x4
	ETHERTYPE_AARP                    = 0x80f3
	ETHERTYPE_ACCTON                  = 0x8390
	ETHERTYPE_AEONIC                  = 0x8036
	ETHERTYPE_ALPHA                   = 0x814a
	ETHERTYPE_AMBER                   = 0x6008
	ETHERTYPE_AMOEBA                  = 0x8145
	ETHERTYPE_AOE                     = 0x88a2
	ETHERTYPE_APOLLO                  = 0x80f7
	ETHERTYPE_APOLLODOMAIN            = 0x8019
	ETHERTYPE_APPLETALK               = 0x809b
	ETHERTYPE_APPLITEK                = 0x80c7
	ETHERTYPE_ARGONAUT                = 0x803a
	ETHERTYPE_ARP                     = 0x806
	ETHERTYPE_AT                      = 0x809b
	ETHERTYPE_ATALK                   = 0x809b
	ETHERTYPE_ATOMIC                  = 0x86df
	ETHERTYPE_ATT                     = 0x8069
	ETHERTYPE_ATTSTANFORD             = 0x8008
	ETHERTYPE_AUTOPHON                = 0x806a
	ETHERTYPE_AXIS                    = 0x8856
	ETHERTYPE_BCLOOP                  = 0x9003
	ETHERTYPE_BOFL                    = 0x8102
	ETHERTYPE_CABLETRON               = 0x7034
	ETHERTYPE_CHAOS                   = 0x804
	ETHERTYPE_COMDESIGN               = 0x806c
	ETHERTYPE_COMPUGRAPHIC            = 0x806d
	ETHERTYPE_COUNTERPOINT            = 0x8062
	ETHERTYPE_CRONUS                  = 0x8004
	ETHERTYPE_CRONUSVLN               = 0x8003
	ETHERTYPE_DCA                     = 0x1234
	ETHERTYPE_DDE                     = 0x807b
	ETHERTYPE_DEBNI                   = 0xaaaa
	ETHERTYPE_DECAM                   = 0x8048
	ETHERTYPE_DECCUST                 = 0x6006
	ETHERTYPE_DECDIAG                 = 0x6005
	ETHERTYPE_DECDNS                  = 0x803c
	ETHERTYPE_DECDTS                  = 0x803e
	ETHERTYPE_DECEXPER                = 0x6000
	ETHERTYPE_DECLAST                 = 0x8041
	ETHERTYPE_DECLTM                  = 0x803f
	ETHERTYPE_DECMUMPS                = 0x6009
	ETHERTYPE_DECNETBIOS              = 0x8040
	ETHERTYPE_DELTACON                = 0x86de
	ETHERTYPE_DIDDLE                  = 0x4321
	ETHERTYPE_DLOG1                   = 0x660
	ETHERTYPE_DLOG2                   = 0x661
	ETHERTYPE_DN                      = 0x6003
	ETHERTYPE_DOGFIGHT                = 0x1989
	ETHERTYPE_DSMD                    = 0x8039
	ETHERTYPE_EAPOL                   = 0x888e
	ETHERTYPE_ECMA                    = 0x803
	ETHERTYPE_ENCRYPT                 = 0x803d
	ETHERTYPE_ES                      = 0x805d
	ETHERTYPE_EXCELAN                 = 0x8010
	ETHERTYPE_EXPERDATA               = 0x8049
	ETHERTYPE_FLIP                    = 0x8146
	ETHERTYPE_FLOWCONTROL             = 0x8808
	ETHERTYPE_FRARP                   = 0x808
	ETHERTYPE_GENDYN                  = 0x8068
	ETHERTYPE_HAYES                   = 0x8130
	ETHERTYPE_HIPPI_FP                = 0x8180
	ETHERTYPE_HITACHI                 = 0x8820
	ETHERTYPE_HP                      = 0x8005
	ETHERTYPE_IEEEPUP                 = 0xa00
	ETHERTYPE_IEEEPUPAT               = 0xa01
	ETHERTYPE_IMLBL                   = 0x4c42
	ETHERTYPE_IMLBLDIAG               = 0x424c
	ETHERTYPE_IP                      = 0x800
	ETHERTYPE_IPAS                    = 0x876c
	ETHERTYPE_IPV6                    = 0x86dd
	ETHERTYPE_IPX                     = 0x8137
	ETHERTYPE_IPXNEW                  = 0x8037
	ETHERTYPE_KALPANA                 = 0x8582
	ETHERTYPE_LANBRIDGE               = 0x8038
	ETHERTYPE_LANPROBE                = 0x8888
	ETHERTYPE_LAT                     = 0x6004
	ETHERTYPE_LBACK                   = 0x9000
	ETHERTYPE_LITTLE                  = 0x8060
	ETHERTYPE_LLDP                    = 0x88cc
	ETHERTYPE_LOGICRAFT               = 0x8148
	ETHERTYPE_LOOPBACK                = 0x9000
	ETHERTYPE_MACSEC                  = 0x88e5
	ETHERTYPE_MATRA                   = 0x807a
	ETHERTYPE_MAX                     = 0xffff
	ETHERTYPE_MERIT                   = 0x807c
	ETHERTYPE_MICP                    = 0x873a
	ETHERTYPE_MOPDL                   = 0x6001
	ETHERTYPE_MOPRC                   = 0x6002
	ETHERTYPE_MOTOROLA                = 0x818d
	ETHERTYPE_MPLS                    = 0x8847
	ETHERTYPE_MPLS_MCAST              = 0x8848
	ETHERTYPE_MUMPS                   = 0x813f
	ETHERTYPE_NBPCC                   = 0x3c04
	ETHERTYPE_NBPCLAIM                = 0x3c09
	ETHERTYPE_NBPCLREQ                = 0x3c05
	ETHERTYPE_NBPCLRSP                = 0x3c06
	ETHERTYPE_NBPCREQ                 = 0x3c02
	ETHERTYPE_NBPCRSP                 = 0x3c03
	ETHERTYPE_NBPDG                   = 0x3c07
	ETHERTYPE_NBPDGB                  = 0x3c08
	ETHERTYPE_NBPDLTE                 = 0x3c0a
	ETHERTYPE_NBPRAR                  = 0x3c0c
	ETHERTYPE_NBPRAS                  = 0x3c0b
	ETHERTYPE_NBPRST                  = 0x3c0d
	ETHERTYPE_NBPSCD                  = 0x3c01
	ETHERTYPE_NBPVCD                  = 0x3c00
	ETHERTYPE_NBS                     = 0x802
	ETHERTYPE_NCD                     = 0x8149
	ETHERTYPE_NESTAR                  = 0x8006
	ETHERTYPE_NETBEUI                 = 0x8191
	ETHERTYPE_NHRP                    = 0x2001
	ETHERTYPE_NOVELL                  = 0x8138
	ETHERTYPE_NS                      = 0x600
	ETHERTYPE_NSAT                    = 0x601
	ETHERTYPE_NSCOMPAT                = 0x807
	ETHERTYPE_NSH                     = 0x984f
	ETHERTYPE_NTRAILER                = 0x10
	ETHERTYPE_OS9                     = 0x7007
	ETHERTYPE_OS9NET                  = 0x7009
	ETHERTYPE_PACER                   = 0x80c6
	ETHERTYPE_PBB                     = 0x88e7
	ETHERTYPE_PCS                     = 0x4242
	ETHERTYPE_PLANNING                = 0x8044
	ETHERTYPE_PPP                     = 0x880b
	ETHERTYPE_PPPOE                   = 0x8864
	ETHERTYPE_PPPOEDISC               = 0x8863
	ETHERTYPE_PRIMENTS                = 0x7031
	ETHERTYPE_PUP                     = 0x200
	ETHERTYPE_PUPAT                   = 0x200
	ETHERTYPE_QINQ                    = 0x88a8
	ETHERTYPE_RACAL                   = 0x7030
	ETHERTYPE_RATIONAL                = 0x8150
	ETHERTYPE_RAWFR                   = 0x6559
	ETHERTYPE_RCL                     = 0x1995
	ETHERTYPE_RDP                     = 0x8739
	ETHERTYPE_RETIX                   = 0x80f2
	ETHERTYPE_REVARP                  = 0x8035
	ETHERTYPE_SCA                     = 0x6007
	ETHERTYPE_SECTRA                  = 0x86db
	ETHERTYPE_SECUREDATA              = 0x876d
	ETHERTYPE_SGITW                   = 0x817e
	ETHERTYPE_SG_BOUNCE               = 0x8016
	ETHERTYPE_SG_DIAG                 = 0x8013
	ETHERTYPE_SG_NETGAMES             = 0x8014
	ETHERTYPE_SG_RESV                 = 0x8015
	ETHERTYPE_SIMNET                  = 0x5208
	ETHERTYPE_SLOW                    = 0x8809
	ETHERTYPE_SNA                     = 0x80d5
	ETHERTYPE_SNMP                    = 0x814c
	ETHERTYPE_SONIX                   = 0xfaf5
	ETHERTYPE_SPIDER                  = 0x809f
	ETHERTYPE_SPRITE                  = 0x500
	ETHERTYPE_STP                     = 0x8181
	ETHERTYPE_TALARIS                 = 0x812b
	ETHERTYPE_TALARISMC               = 0x852b
	ETHERTYPE_TCPCOMP                 = 0x876b
	ETHERTYPE_TCPSM                   = 0x9002
	ETHERTYPE_TEC                     = 0x814f
	ETHERTYPE_TIGAN                   = 0x802f
	ETHERTYPE_TRAIL                   = 0x1000
	ETHERTYPE_TRANSETHER              = 0x6558
	ETHERTYPE_TYMSHARE                = 0x802e
	ETHERTYPE_UBBST                   = 0x7005
	ETHERTYPE_UBDEBUG                 = 0x900
	ETHERTYPE_UBDIAGLOOP              = 0x7002
	ETHERTYPE_UBDL                    = 0x7000
	ETHERTYPE_UBNIU                   = 0x7001
	ETHERTYPE_UBNMC                   = 0x7003
	ETHERTYPE_VALID                   = 0x1600
	ETHERTYPE_VARIAN                  = 0x80dd
	ETHERTYPE_VAXELN                  = 0x803b
	ETHERTYPE_VEECO                   = 0x8067
	ETHERTYPE_VEXP                    = 0x805b
	ETHERTYPE_VGLAB                   = 0x8131
	ETHERTYPE_VINES                   = 0xbad
	ETHERTYPE_VINESECHO               = 0xbaf
	ETHERTYPE_VINESLOOP               = 0xbae
	ETHERTYPE_VITAL                   = 0xff00
	ETHERTYPE_VLAN                    = 0x8100
	ETHERTYPE_VLTLMAN                 = 0x8080
	ETHERTYPE_VPROD                   = 0x805c
	ETHERTYPE_VURESERVED              = 0x8147
	ETHERTYPE_WATERLOO                = 0x8130
	ETHERTYPE_WELLFLEET               = 0x8103
	ETHERTYPE_X25                     = 0x805
	ETHERTYPE_X75                     = 0x801
	ETHERTYPE_XNSSM                   = 0x9001
	ETHERTYPE_XTP                     = 0x817d
	ETHER_ADDR_LEN                    = 0x6
	ETHER_ALIGN                       = 0x2
	ETHER_CRC_LEN                     = 0x4
	ETHER_CRC_POLY_BE                 = 0x4c11db6
	ETHER_CRC_POLY_LE                 = 0xedb88320
	ETHER_HDR_LEN                     = 0xe
	ETHER_MAX_DIX_LEN                 = 0x600
	ETHER_MAX_HARDMTU_LEN             = 0xff9b
	ETHER_MAX_LEN                     = 0x5ee
	ETHER_MIN_LEN                     = 0x40
	ETHER_TYPE_LEN                    = 0x2
	ETHER_VLAN_ENCAP_LEN              = 0x4
	EVFILT_AIO                        = -0x3
	EVFILT_DEVICE                     = -0x8
	EVFILT_EXCEPT                     = -0x9
	EVFILT_PROC                       = -0x5
	EVFILT_READ                       = -0x1
	EVFILT_SIGNAL                     = -0x6
	EVFILT_SYSCOUNT                   = 0x9
	EVFILT_TIMER                      = -0x7
	EVFILT_VNODE                      = -0x4
	EVFILT_WRITE                      = -0x2
	EVL_ENCAPLEN                      = 0x4
	EVL_PRIO_BITS                     = 0xd
	EVL_PRIO_MAX                      = 0x7
	EVL_VLID_MASK                     = 0xfff
	EVL_VLID_MAX                      = 0xffe
	EVL_VLID_MIN                      = 0x1
	EVL_VLID_NULL                     = 0x0
	EV_ADD                            = 0x1
	EV_CLEAR                          = 0x20
	EV_DELETE                         = 0x2
	EV_DISABLE                        = 0x8
	EV_DISPATCH                       = 0x80
	EV_ENABLE                         = 0x4
	EV_EOF                            = 0x8000
	EV_ERROR                          = 0x4000
	EV_FLAG1                          = 0x2000
	EV_ONESHOT                        = 0x10
	EV_RECEIPT                        = 0x40
	EV_SYSFLAGS                       = 0xf800
	EXTA                              = 0x4b00
	EXTB                              = 0x9600
	EXTPROC                           = 0x800
	FD_CLOEXEC                        = 0x1
	FD_SETSIZE                        = 0x400
	FLUSHO                            = 0x800000
	F_DUPFD                           = 0x0
	F_DUPFD_CLOEXEC                   = 0xa
	F_GETFD                           = 0x1
	F_GETFL                           = 0x3
	F_GETLK                           = 0x7
	F_GETOWN                          = 0x5
	F_ISATTY                          = 0xb
	F_OK                              = 0x0
	F_RDLCK                           = 0x1
	F_SETFD                           = 0x2
	F_SETFL                           = 0x4
	F_SETLK                           = 0x8
	F_SETLKW                          = 0x9
	F_SETOWN                          = 0x6
	F_UNLCK                           = 0x2
	F_WRLCK                           = 0x3
	HUPCL                             = 0x4000
	HW_MACHINE                        = 0x1
	ICANON                            = 0x100
	ICMP6_FILTER                      = 0x12
	ICRNL                             = 0x100
	IEXTEN                            = 0x400
	IFAN_ARRIVAL                      = 0x0
	IFAN_DEPARTURE                    = 0x1
	IFF_ALLMULTI                      = 0x200
	IFF_BROADCAST                     = 0x2
	IFF_CANTCHANGE                    = 0x8e52
	IFF_DEBUG                         = 0x4
	IFF_LINK0                         = 0x1000
	IFF_LINK1                         = 0x2000
	IFF_LINK2                         = 0x4000
	IFF_LOOPBACK                      = 0x8
	IFF_MULTICAST                     = 0x8000
	IFF_NOARP                         = 0x80
	IFF_OACTIVE                       = 0x400
	IFF_POINTOPOINT                   = 0x10
	IFF_PROMISC                       = 0x100
	IFF_RUNNING                       = 0x40
	IFF_SIMPLEX                       = 0x800
	IFF_STATICARP                     = 0x20
	IFF_UP                            = 0x1
	IFNAMSIZ                          = 0x10
	IFT_1822                          = 0x2
	IFT_A12MPPSWITCH                  = 0x82
	IFT_AAL2                          = 0xbb
	IFT_AAL5                          = 0x31
	IFT_ADSL                          = 0x5e
	IFT_AFLANE8023                    = 0x3b
	IFT_AFLANE8025                    = 0x3c
	IFT_ARAP                          = 0x58
	IFT_ARCNET                        = 0x23
	IFT_ARCNETPLUS                    = 0x24
	IFT_ASYNC                         = 0x54
	IFT_ATM                           = 0x25
	IFT_ATMDXI                        = 0x69
	IFT_ATMFUNI                       = 0x6a
	IFT_ATMIMA                        = 0x6b
	IFT_ATMLOGICAL                    = 0x50
	IFT_ATMRADIO                      = 0xbd
	IFT_ATMSUBINTERFACE               = 0x86
	IFT_ATMVCIENDPT                   = 0xc2
	IFT_ATMVIRTUAL                    = 0x95
	IFT_BGPPOLICYACCOUNTING           = 0xa2
	IFT_BLUETOOTH                     = 0xf8
	IFT_BRIDGE                        = 0xd1
	IFT_BSC                           = 0x53
	IFT_CARP                          = 0xf7
	IFT_CCTEMUL                       = 0x3d
	IFT_CEPT                          = 0x13
	IFT_CES                           = 0x85
	IFT_CHANNEL                       = 0x46
	IFT_CNR                           = 0x55
	IFT_COFFEE                        = 0x84
	IFT_COMPOSITELINK                 = 0x9b
	IFT_DCN                           = 0x8d
	IFT_DIGITALPOWERLINE              = 0x8a
	IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba
	IFT_DLSW                          = 0x4a
	IFT_DOCSCABLEDOWNSTREAM           = 0x80
	IFT_DOCSCABLEMACLAYER             = 0x7f
	IFT_DOCSCABLEUPSTREAM             = 0x81
	IFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd
	IFT_DS0                           = 0x51
	IFT_DS0BUNDLE                     = 0x52
	IFT_DS1FDL                        = 0xaa
	IFT_DS3                           = 0x1e
	IFT_DTM                           = 0x8c
	IFT_DUMMY                         = 0xf1
	IFT_DVBASILN                      = 0xac
	IFT_DVBASIOUT                     = 0xad
	IFT_DVBRCCDOWNSTREAM              = 0x93
	IFT_DVBRCCMACLAYER                = 0x92
	IFT_DVBRCCUPSTREAM                = 0x94
	IFT_ECONET                        = 0xce
	IFT_ENC                           = 0xf4
	IFT_EON                           = 0x19
	IFT_EPLRS                         = 0x57
	IFT_ESCON                         = 0x49
	IFT_ETHER                         = 0x6
	IFT_FAITH                         = 0xf3
	IFT_FAST                          = 0x7d
	IFT_FASTETHER                     = 0x3e
	IFT_FASTETHERFX                   = 0x45
	IFT_FDDI                          = 0xf
	IFT_FIBRECHANNEL                  = 0x38
	IFT_FRAMERELAYINTERCONNECT        = 0x3a
	IFT_FRAMERELAYMPI                 = 0x5c
	IFT_FRDLCIENDPT                   = 0xc1
	IFT_FRELAY                        = 0x20
	IFT_FRELAYDCE                     = 0x2c
	IFT_FRF16MFRBUNDLE                = 0xa3
	IFT_FRFORWARD                     = 0x9e
	IFT_G703AT2MB                     = 0x43
	IFT_G703AT64K                     = 0x42
	IFT_GIF                           = 0xf0
	IFT_GIGABITETHERNET               = 0x75
	IFT_GR303IDT                      = 0xb2
	IFT_GR303RDT                      = 0xb1
	IFT_H323GATEKEEPER                = 0xa4
	IFT_H323PROXY                     = 0xa5
	IFT_HDH1822                       = 0x3
	IFT_HDLC                          = 0x76
	IFT_HDSL2                         = 0xa8
	IFT_HIPERLAN2                     = 0xb7
	IFT_HIPPI                         = 0x2f
	IFT_HIPPIINTERFACE                = 0x39
	IFT_HOSTPAD                       = 0x5a
	IFT_HSSI                          = 0x2e
	IFT_HY                            = 0xe
	IFT_IBM370PARCHAN                 = 0x48
	IFT_IDSL                          = 0x9a
	IFT_IEEE1394                      = 0x90
	IFT_IEEE80211                     = 0x47
	IFT_IEEE80212                     = 0x37
	IFT_IEEE8023ADLAG                 = 0xa1
	IFT_IFGSN                         = 0x91
	IFT_IMT                           = 0xbe
	IFT_INFINIBAND                    = 0xc7
	IFT_INTERLEAVE                    = 0x7c
	IFT_IP                            = 0x7e
	IFT_IPFORWARD                     = 0x8e
	IFT_IPOVERATM                     = 0x72
	IFT_IPOVERCDLC                    = 0x6d
	IFT_IPOVERCLAW                    = 0x6e
	IFT_IPSWITCH                      = 0x4e
	IFT_ISDN                          = 0x3f
	IFT_ISDNBASIC                     = 0x14
	IFT_ISDNPRIMARY                   = 0x15
	IFT_ISDNS                         = 0x4b
	IFT_ISDNU                         = 0x4c
	IFT_ISO88022LLC                   = 0x29
	IFT_ISO88023                      = 0x7
	IFT_ISO88024                      = 0x8
	IFT_ISO88025                      = 0x9
	IFT_ISO88025CRFPINT               = 0x62
	IFT_ISO88025DTR                   = 0x56
	IFT_ISO88025FIBER                 = 0x73
	IFT_ISO88026                      = 0xa
	IFT_ISUP                          = 0xb3
	IFT_L2VLAN                        = 0x87
	IFT_L3IPVLAN                      = 0x88
	IFT_L3IPXVLAN                     = 0x89
	IFT_LAPB                          = 0x10
	IFT_LAPD                          = 0x4d
	IFT_LAPF                          = 0x77
	IFT_LINEGROUP                     = 0xd2
	IFT_LOCALTALK                     = 0x2a
	IFT_LOOP                          = 0x18
	IFT_MBIM                          = 0xfa
	IFT_MEDIAMAILOVERIP               = 0x8b
	IFT_MFSIGLINK                     = 0xa7
	IFT_MIOX25                        = 0x26
	IFT_MODEM                         = 0x30
	IFT_MPC                           = 0x71
	IFT_MPLS                          = 0xa6
	IFT_MPLSTUNNEL                    = 0x96
	IFT_MSDSL                         = 0x8f
	IFT_MVL                           = 0xbf
	IFT_MYRINET                       = 0x63
	IFT_NFAS                          = 0xaf
	IFT_NSIP                          = 0x1b
	IFT_OPTICALCHANNEL                = 0xc3
	IFT_OPTICALTRANSPORT              = 0xc4
	IFT_OTHER                         = 0x1
	IFT_P10                           = 0xc
	IFT_P80                           = 0xd
	IFT_PARA                          = 0x22
	IFT_PFLOG                         = 0xf5
	IFT_PFLOW                         = 0xf9
	IFT_PFSYNC                        = 0xf6
	IFT_PLC                           = 0xae
	IFT_PON155                        = 0xcf
	IFT_PON622                        = 0xd0
	IFT_POS                           = 0xab
	IFT_PPP                           = 0x17
	IFT_PPPMULTILINKBUNDLE            = 0x6c
	IFT_PROPATM                       = 0xc5
	IFT_PROPBWAP2MP                   = 0xb8
	IFT_PROPCNLS                      = 0x59
	IFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5
	IFT_PROPDOCSWIRELESSMACLAYER      = 0xb4
	IFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6
	IFT_PROPMUX                       = 0x36
	IFT_PROPVIRTUAL                   = 0x35
	IFT_PROPWIRELESSP2P               = 0x9d
	IFT_PTPSERIAL                     = 0x16
	IFT_PVC                           = 0xf2
	IFT_Q2931                         = 0xc9
	IFT_QLLC                          = 0x44
	IFT_RADIOMAC                      = 0xbc
	IFT_RADSL                         = 0x5f
	IFT_REACHDSL                      = 0xc0
	IFT_RFC1483                       = 0x9f
	IFT_RS232                         = 0x21
	IFT_RSRB                          = 0x4f
	IFT_SDLC                          = 0x11
	IFT_SDSL                          = 0x60
	IFT_SHDSL                         = 0xa9
	IFT_SIP                           = 0x1f
	IFT_SIPSIG                        = 0xcc
	IFT_SIPTG                         = 0xcb
	IFT_SLIP                          = 0x1c
	IFT_SMDSDXI                       = 0x2b
	IFT_SMDSICIP                      = 0x34
	IFT_SONET                         = 0x27
	IFT_SONETOVERHEADCHANNEL          = 0xb9
	IFT_SONETPATH                     = 0x32
	IFT_SONETVT                       = 0x33
	IFT_SRP                           = 0x97
	IFT_SS7SIGLINK                    = 0x9c
	IFT_STACKTOSTACK                  = 0x6f
	IFT_STARLAN                       = 0xb
	IFT_T1                            = 0x12
	IFT_TDLC                          = 0x74
	IFT_TELINK                        = 0xc8
	IFT_TERMPAD                       = 0x5b
	IFT_TR008                         = 0xb0
	IFT_TRANSPHDLC                    = 0x7b
	IFT_TUNNEL                        = 0x83
	IFT_ULTRA                         = 0x1d
	IFT_USB                           = 0xa0
	IFT_V11                           = 0x40
	IFT_V35                           = 0x2d
	IFT_V36                           = 0x41
	IFT_V37                           = 0x78
	IFT_VDSL                          = 0x61
	IFT_VIRTUALIPADDRESS              = 0x70
	IFT_VIRTUALTG                     = 0xca
	IFT_VOICEDID                      = 0xd5
	IFT_VOICEEM                       = 0x64
	IFT_VOICEEMFGD                    = 0xd3
	IFT_VOICEENCAP                    = 0x67
	IFT_VOICEFGDEANA                  = 0xd4
	IFT_VOICEFXO                      = 0x65
	IFT_VOICEFXS                      = 0x66
	IFT_VOICEOVERATM                  = 0x98
	IFT_VOICEOVERCABLE                = 0xc6
	IFT_VOICEOVERFRAMERELAY           = 0x99
	IFT_VOICEOVERIP                   = 0x68
	IFT_WIREGUARD                     = 0xfb
	IFT_X213                          = 0x5d
	IFT_X25                           = 0x5
	IFT_X25DDN                        = 0x4
	IFT_X25HUNTGROUP                  = 0x7a
	IFT_X25MLP                        = 0x79
	IFT_X25PLE                        = 0x28
	IFT_XETHER                        = 0x1a
	IGNBRK                            = 0x1
	IGNCR                             = 0x80
	IGNPAR                            = 0x4
	IMAXBEL                           = 0x2000
	INLCR                             = 0x40
	INPCK                             = 0x10
	IN_CLASSA_HOST                    = 0xffffff
	IN_CLASSA_MAX                     = 0x80
	IN_CLASSA_NET                     = 0xff000000
	IN_CLASSA_NSHIFT                  = 0x18
	IN_CLASSB_HOST                    = 0xffff
	IN_CLASSB_MAX                     = 0x10000
	IN_CLASSB_NET                     = 0xffff0000
	IN_CLASSB_NSHIFT                  = 0x10
	IN_CLASSC_HOST                    = 0xff
	IN_CLASSC_NET                     = 0xffffff00
	IN_CLASSC_NSHIFT                  = 0x8
	IN_CLASSD_HOST                    = 0xfffffff
	IN_CLASSD_NET                     = 0xf0000000
	IN_CLASSD_NSHIFT                  = 0x1c
	IN_LOOPBACKNET                    = 0x7f
	IN_RFC3021_HOST                   = 0x1
	IN_RFC3021_NET                    = 0xfffffffe
	IN_RFC3021_NSHIFT                 = 0x1f
	IPPROTO_AH                        = 0x33
	IPPROTO_CARP                      = 0x70
	IPPROTO_DIVERT                    = 0x102
	IPPROTO_DONE                      = 0x101
	IPPROTO_DSTOPTS                   = 0x3c
	IPPROTO_EGP                       = 0x8
	IPPROTO_ENCAP                     = 0x62
	IPPROTO_EON                       = 0x50
	IPPROTO_ESP                       = 0x32
	IPPROTO_ETHERIP                   = 0x61
	IPPROTO_FRAGMENT                  = 0x2c
	IPPROTO_GGP                       = 0x3
	IPPROTO_GRE                       = 0x2f
	IPPROTO_HOPOPTS                   = 0x0
	IPPROTO_ICMP                      = 0x1
	IPPROTO_ICMPV6                    = 0x3a
	IPPROTO_IDP                       = 0x16
	IPPROTO_IGMP                      = 0x2
	IPPROTO_IP                        = 0x0
	IPPROTO_IPCOMP                    = 0x6c
	IPPROTO_IPIP                      = 0x4
	IPPROTO_IPV4                      = 0x4
	IPPROTO_IPV6                      = 0x29
	IPPROTO_MAX                       = 0x100
	IPPROTO_MAXID                     = 0x103
	IPPROTO_MOBILE                    = 0x37
	IPPROTO_MPLS                      = 0x89
	IPPROTO_NONE                      = 0x3b
	IPPROTO_PFSYNC                    = 0xf0
	IPPROTO_PIM                       = 0x67
	IPPROTO_PUP                       = 0xc
	IPPROTO_RAW                       = 0xff
	IPPROTO_ROUTING                   = 0x2b
	IPPROTO_RSVP                      = 0x2e
	IPPROTO_SCTP                      = 0x84
	IPPROTO_TCP                       = 0x6
	IPPROTO_TP                        = 0x1d
	IPPROTO_UDP                       = 0x11
	IPPROTO_UDPLITE                   = 0x88
	IPV6_AUTH_LEVEL                   = 0x35
	IPV6_AUTOFLOWLABEL                = 0x3b
	IPV6_CHECKSUM                     = 0x1a
	IPV6_DEFAULT_MULTICAST_HOPS       = 0x1
	IPV6_DEFAULT_MULTICAST_LOOP       = 0x1
	IPV6_DEFHLIM                      = 0x40
	IPV6_DONTFRAG                     = 0x3e
	IPV6_DSTOPTS                      = 0x32
	IPV6_ESP_NETWORK_LEVEL            = 0x37
	IPV6_ESP_TRANS_LEVEL              = 0x36
	IPV6_FAITH                        = 0x1d
	IPV6_FLOWINFO_MASK                = 0xffffff0f
	IPV6_FLOWLABEL_MASK               = 0xffff0f00
	IPV6_FRAGTTL                      = 0x78
	IPV6_HLIMDEC                      = 0x1
	IPV6_HOPLIMIT                     = 0x2f
	IPV6_HOPOPTS                      = 0x31
	IPV6_IPCOMP_LEVEL                 = 0x3c
	IPV6_JOIN_GROUP                   = 0xc
	IPV6_LEAVE_GROUP                  = 0xd
	IPV6_MAXHLIM                      = 0xff
	IPV6_MAXPACKET                    = 0xffff
	IPV6_MINHOPCOUNT                  = 0x41
	IPV6_MMTU                         = 0x500
	IPV6_MULTICAST_HOPS               = 0xa
	IPV6_MULTICAST_IF                 = 0x9
	IPV6_MULTICAST_LOOP               = 0xb
	IPV6_NEXTHOP                      = 0x30
	IPV6_OPTIONS                      = 0x1
	IPV6_PATHMTU                      = 0x2c
	IPV6_PIPEX                        = 0x3f
	IPV6_PKTINFO                      = 0x2e
	IPV6_PORTRANGE                    = 0xe
	IPV6_PORTRANGE_DEFAULT            = 0x0
	IPV6_PORTRANGE_HIGH               = 0x1
	IPV6_PORTRANGE_LOW                = 0x2
	IPV6_RECVDSTOPTS                  = 0x28
	IPV6_RECVDSTPORT                  = 0x40
	IPV6_RECVHOPLIMIT                 = 0x25
	IPV6_RECVHOPOPTS                  = 0x27
	IPV6_RECVPATHMTU                  = 0x2b
	IPV6_RECVPKTINFO                  = 0x24
	IPV6_RECVRTHDR                    = 0x26
	IPV6_RECVTCLASS                   = 0x39
	IPV6_RTABLE                       = 0x1021
	IPV6_RTHDR                        = 0x33
	IPV6_RTHDRDSTOPTS                 = 0x23
	IPV6_RTHDR_LOOSE                  = 0x0
	IPV6_RTHDR_STRICT                 = 0x1
	IPV6_RTHDR_TYPE_0                 = 0x0
	IPV6_SOCKOPT_RESERVED1            = 0x3
	IPV6_TCLASS                       = 0x3d
	IPV6_UNICAST_HOPS                 = 0x4
	IPV6_USE_MIN_MTU                  = 0x2a
	IPV6_V6ONLY                       = 0x1b
	IPV6_VERSION                      = 0x60
	IPV6_VERSION_MASK                 = 0xf0
	IP_ADD_MEMBERSHIP                 = 0xc
	IP_AUTH_LEVEL                     = 0x14
	IP_DEFAULT_MULTICAST_LOOP         = 0x1
	IP_DEFAULT_MULTICAST_TTL          = 0x1
	IP_DF                             = 0x4000
	IP_DROP_MEMBERSHIP                = 0xd
	IP_ESP_NETWORK_LEVEL              = 0x16
	IP_ESP_TRANS_LEVEL                = 0x15
	IP_HDRINCL                        = 0x2
	IP_IPCOMP_LEVEL                   = 0x1d
	IP_IPDEFTTL                       = 0x25
	IP_IPSECFLOWINFO                  = 0x24
	IP_IPSEC_LOCAL_AUTH               = 0x1b
	IP_IPSEC_LOCAL_CRED               = 0x19
	IP_IPSEC_LOCAL_ID                 = 0x17
	IP_IPSEC_REMOTE_AUTH              = 0x1c
	IP_IPSEC_REMOTE_CRED              = 0x1a
	IP_IPSEC_REMOTE_ID                = 0x18
	IP_MAXPACKET                      = 0xffff
	IP_MAX_MEMBERSHIPS                = 0xfff
	IP_MF                             = 0x2000
	IP_MINTTL                         = 0x20
	IP_MIN_MEMBERSHIPS                = 0xf
	IP_MSS                            = 0x240
	IP_MULTICAST_IF                   = 0x9
	IP_MULTICAST_LOOP                 = 0xb
	IP_MULTICAST_TTL                  = 0xa
	IP_OFFMASK                        = 0x1fff
	IP_OPTIONS                        = 0x1
	IP_PIPEX                          = 0x22
	IP_PORTRANGE                      = 0x13
	IP_PORTRANGE_DEFAULT              = 0x0
	IP_PORTRANGE_HIGH                 = 0x1
	IP_PORTRANGE_LOW                  = 0x2
	IP_RECVDSTADDR                    = 0x7
	IP_RECVDSTPORT                    = 0x21
	IP_RECVIF                         = 0x1e
	IP_RECVOPTS                       = 0x5
	IP_RECVRETOPTS                    = 0x6
	IP_RECVRTABLE                     = 0x23
	IP_RECVTTL                        = 0x1f
	IP_RETOPTS                        = 0x8
	IP_RF                             = 0x8000
	IP_RTABLE                         = 0x1021
	IP_SENDSRCADDR                    = 0x7
	IP_TOS                            = 0x3
	IP_TTL                            = 0x4
	ISIG                              = 0x80
	ISTRIP                            = 0x20
	ITIMER_PROF                       = 0x2
	ITIMER_REAL                       = 0x0
	ITIMER_VIRTUAL                    = 0x1
	IUCLC                             = 0x1000
	IXANY                             = 0x800
	IXOFF                             = 0x400
	IXON                              = 0x200
	KERN_HOSTNAME                     = 0xa
	KERN_OSRELEASE                    = 0x2
	KERN_OSTYPE                       = 0x1
	KERN_VERSION                      = 0x4
	LCNT_OVERLOAD_FLUSH               = 0x6
	LOCK_EX                           = 0x2
	LOCK_NB                           = 0x4
	LOCK_SH                           = 0x1
	LOCK_UN                           = 0x8
	MADV_DONTNEED                     = 0x4
	MADV_FREE                         = 0x6
	MADV_NORMAL                       = 0x0
	MADV_RANDOM                       = 0x1
	MADV_SEQUENTIAL                   = 0x2
	MADV_SPACEAVAIL                   = 0x5
	MADV_WILLNEED                     = 0x3
	MAP_ANON                          = 0x1000
	MAP_ANONYMOUS                     = 0x1000
	MAP_CONCEAL                       = 0x8000
	MAP_COPY                          = 0x2
	MAP_FILE                          = 0x0
	MAP_FIXED                         = 0x10
	MAP_FLAGMASK                      = 0xfff7
	MAP_HASSEMAPHORE                  = 0x0
	MAP_INHERIT                       = 0x0
	MAP_INHERIT_COPY                  = 0x1
	MAP_INHERIT_NONE                  = 0x2
	MAP_INHERIT_SHARE                 = 0x0
	MAP_INHERIT_ZERO                  = 0x3
	MAP_NOEXTEND                      = 0x0
	MAP_NORESERVE                     = 0x0
	MAP_PRIVATE                       = 0x2
	MAP_RENAME                        = 0x0
	MAP_SHARED                        = 0x1
	MAP_STACK                         = 0x4000
	MAP_TRYFIXED                      = 0x0
	MCL_CURRENT                       = 0x1
	MCL_FUTURE                        = 0x2
	MNT_ASYNC                         = 0x40
	MNT_DEFEXPORTED                   = 0x200
	MNT_DELEXPORT                     = 0x20000
	MNT_DOOMED                        = 0x8000000
	MNT_EXPORTANON                    = 0x400
	MNT_EXPORTED                      = 0x100
	MNT_EXRDONLY                      = 0x80
	MNT_FORCE                         = 0x80000
	MNT_LAZY                          = 0x3
	MNT_LOCAL                         = 0x1000
	MNT_NOATIME                       = 0x8000
	MNT_NODEV                         = 0x10
	MNT_NOEXEC                        = 0x4
	MNT_NOPERM                        = 0x20
	MNT_NOSUID                        = 0x8
	MNT_NOWAIT                        = 0x2
	MNT_QUOTA                         = 0x2000
	MNT_RDONLY                        = 0x1
	MNT_RELOAD                        = 0x40000
	MNT_ROOTFS                        = 0x4000
	MNT_SOFTDEP                       = 0x4000000
	MNT_STALLED                       = 0x100000
	MNT_SWAPPABLE                     = 0x200000
	MNT_SYNCHRONOUS                   = 0x2
	MNT_UPDATE                        = 0x10000
	MNT_VISFLAGMASK                   = 0x400ffff
	MNT_WAIT                          = 0x1
	MNT_WANTRDWR                      = 0x2000000
	MNT_WXALLOWED                     = 0x800
	MOUNT_AFS                         = "afs"
	MOUNT_CD9660                      = "cd9660"
	MOUNT_EXT2FS                      = "ext2fs"
	MOUNT_FFS                         = "ffs"
	MOUNT_FUSEFS                      = "fuse"
	MOUNT_MFS                         = "mfs"
	MOUNT_MSDOS                       = "msdos"
	MOUNT_NCPFS                       = "ncpfs"
	MOUNT_NFS                         = "nfs"
	MOUNT_NTFS                        = "ntfs"
	MOUNT_TMPFS                       = "tmpfs"
	MOUNT_UDF                         = "udf"
	MOUNT_UFS                         = "ffs"
	MSG_BCAST                         = 0x100
	MSG_CMSG_CLOEXEC                  = 0x800
	MSG_CTRUNC                        = 0x20
	MSG_DONTROUTE                     = 0x4
	MSG_DONTWAIT                      = 0x80
	MSG_EOR                           = 0x8
	MSG_MCAST                         = 0x200
	MSG_NOSIGNAL                      = 0x400
	MSG_OOB                           = 0x1
	MSG_PEEK                          = 0x2
	MSG_TRUNC                         = 0x10
	MSG_WAITALL                       = 0x40
	MS_ASYNC                          = 0x1
	MS_INVALIDATE                     = 0x4
	MS_SYNC                           = 0x2
	NAME_MAX                          = 0xff
	NET_RT_DUMP                       = 0x1
	NET_RT_FLAGS                      = 0x2
	NET_RT_IFLIST                     = 0x3
	NET_RT_IFNAMES                    = 0x6
	NET_RT_MAXID                      = 0x8
	NET_RT_SOURCE                     = 0x7
	NET_RT_STATS                      = 0x4
	NET_RT_TABLE                      = 0x5
	NFDBITS                           = 0x20
	NOFLSH                            = 0x80000000
	NOKERNINFO                        = 0x2000000
	NOTE_ATTRIB                       = 0x8
	NOTE_CHANGE                       = 0x1
	NOTE_CHILD                        = 0x4
	NOTE_DELETE                       = 0x1
	NOTE_EOF                          = 0x2
	NOTE_EXEC                         = 0x20000000
	NOTE_EXIT                         = 0x80000000
	NOTE_EXTEND                       = 0x4
	NOTE_FORK                         = 0x40000000
	NOTE_LINK                         = 0x10
	NOTE_LOWAT                        = 0x1
	NOTE_OOB                          = 0x4
	NOTE_PCTRLMASK                    = 0xf0000000
	NOTE_PDATAMASK                    = 0xfffff
	NOTE_RENAME                       = 0x20
	NOTE_REVOKE                       = 0x40
	NOTE_TRACK                        = 0x1
	NOTE_TRACKERR                     = 0x2
	NOTE_TRUNCATE                     = 0x80
	NOTE_WRITE                        = 0x2
	OCRNL                             = 0x10
	OLCUC                             = 0x20
	ONLCR                             = 0x2
	ONLRET                            = 0x80
	ONOCR                             = 0x40
	ONOEOT                            = 0x8
	OPOST                             = 0x1
	OXTABS                            = 0x4
	O_ACCMODE                         = 0x3
	O_APPEND                          = 0x8
	O_ASYNC                           = 0x40
	O_CLOEXEC                         = 0x10000
	O_CREAT                           = 0x200
	O_DIRECTORY                       = 0x20000
	O_DSYNC                           = 0x80
	O_EXCL                            = 0x800
	O_EXLOCK                          = 0x20
	O_FSYNC                           = 0x80
	O_NDELAY                          = 0x4
	O_NOCTTY                          = 0x8000
	O_NOFOLLOW                        = 0x100
	O_NONBLOCK                        = 0x4
	O_RDONLY                          = 0x0
	O_RDWR                            = 0x2
	O_RSYNC                           = 0x80
	O_SHLOCK                          = 0x10
	O_SYNC                            = 0x80
	O_TRUNC                           = 0x400
	O_WRONLY                          = 0x1
	PARENB                            = 0x1000
	PARMRK                            = 0x8
	PARODD                            = 0x2000
	PENDIN                            = 0x20000000
	PF_FLUSH                          = 0x1
	PRIO_PGRP                         = 0x1
	PRIO_PROCESS                      = 0x0
	PRIO_USER                         = 0x2
	PROT_EXEC                         = 0x4
	PROT_NONE                         = 0x0
	PROT_READ                         = 0x1
	PROT_WRITE                        = 0x2
	RLIMIT_CORE                       = 0x4
	RLIMIT_CPU                        = 0x0
	RLIMIT_DATA                       = 0x2
	RLIMIT_FSIZE                      = 0x1
	RLIMIT_MEMLOCK                    = 0x6
	RLIMIT_NOFILE                     = 0x8
	RLIMIT_NPROC                      = 0x7
	RLIMIT_RSS                        = 0x5
	RLIMIT_STACK                      = 0x3
	RLIM_INFINITY                     = 0x7fffffffffffffff
	RTAX_AUTHOR                       = 0x6
	RTAX_BFD                          = 0xb
	RTAX_BRD                          = 0x7
	RTAX_DNS                          = 0xc
	RTAX_DST                          = 0x0
	RTAX_GATEWAY                      = 0x1
	RTAX_GENMASK                      = 0x3
	RTAX_IFA                          = 0x5
	RTAX_IFP                          = 0x4
	RTAX_LABEL                        = 0xa
	RTAX_MAX                          = 0xf
	RTAX_NETMASK                      = 0x2
	RTAX_SEARCH                       = 0xe
	RTAX_SRC                          = 0x8
	RTAX_SRCMASK                      = 0x9
	RTAX_STATIC                       = 0xd
	RTA_AUTHOR                        = 0x40
	RTA_BFD                           = 0x800
	RTA_BRD                           = 0x80
	RTA_DNS                           = 0x1000
	RTA_DST                           = 0x1
	RTA_GATEWAY                       = 0x2
	RTA_GENMASK                       = 0x8
	RTA_IFA                           = 0x20
	RTA_IFP                           = 0x10
	RTA_LABEL                         = 0x400
	RTA_NETMASK                       = 0x4
	RTA_SEARCH                        = 0x4000
	RTA_SRC                           = 0x100
	RTA_SRCMASK                       = 0x200
	RTA_STATIC                        = 0x2000
	RTF_ANNOUNCE                      = 0x4000
	RTF_BFD                           = 0x1000000
	RTF_BLACKHOLE                     = 0x1000
	RTF_BROADCAST                     = 0x400000
	RTF_CACHED                        = 0x20000
	RTF_CLONED                        = 0x10000
	RTF_CLONING                       = 0x100
	RTF_CONNECTED                     = 0x800000
	RTF_DONE                          = 0x40
	RTF_DYNAMIC                       = 0x10
	RTF_FMASK                         = 0x110fc08
	RTF_GATEWAY                       = 0x2
	RTF_HOST                          = 0x4
	RTF_LLINFO                        = 0x400
	RTF_LOCAL                         = 0x200000
	RTF_MODIFIED                      = 0x20
	RTF_MPATH                         = 0x40000
	RTF_MPLS                          = 0x100000
	RTF_MULTICAST                     = 0x200
	RTF_PERMANENT_ARP                 = 0x2000
	RTF_PROTO1                        = 0x8000
	RTF_PROTO2                        = 0x4000
	RTF_PROTO3                        = 0x2000
	RTF_REJECT                        = 0x8
	RTF_STATIC                        = 0x800
	RTF_UP                            = 0x1
	RTF_USETRAILERS                   = 0x8000
	RTM_80211INFO                     = 0x15
	RTM_ADD                           = 0x1
	RTM_BFD                           = 0x12
	RTM_CHANGE                        = 0x3
	RTM_CHGADDRATTR                   = 0x14
	RTM_DELADDR                       = 0xd
	RTM_DELETE                        = 0x2
	RTM_DESYNC                        = 0x10
	RTM_GET                           = 0x4
	RTM_IFANNOUNCE                    = 0xf
	RTM_IFINFO                        = 0xe
	RTM_INVALIDATE                    = 0x11
	RTM_LOSING                        = 0x5
	RTM_MAXSIZE                       = 0x800
	RTM_MISS                          = 0x7
	RTM_NEWADDR                       = 0xc
	RTM_PROPOSAL                      = 0x13
	RTM_REDIRECT                      = 0x6
	RTM_RESOLVE                       = 0xb
	RTM_SOURCE                        = 0x16
	RTM_VERSION                       = 0x5
	RTV_EXPIRE                        = 0x4
	RTV_HOPCOUNT                      = 0x2
	RTV_MTU                           = 0x1
	RTV_RPIPE                         = 0x8
	RTV_RTT                           = 0x40
	RTV_RTTVAR                        = 0x80
	RTV_SPIPE                         = 0x10
	RTV_SSTHRESH                      = 0x20
	RT_TABLEID_BITS                   = 0x8
	RT_TABLEID_MASK                   = 0xff
	RT_TABLEID_MAX                    = 0xff
	RUSAGE_CHILDREN                   = -0x1
	RUSAGE_SELF                       = 0x0
	RUSAGE_THREAD                     = 0x1
	SCM_RIGHTS                        = 0x1
	SCM_TIMESTAMP                     = 0x4
	SEEK_CUR                          = 0x1
	SEEK_END                          = 0x2
	SEEK_SET                          = 0x0
	SHUT_RD                           = 0x0
	SHUT_RDWR                         = 0x2
	SHUT_WR                           = 0x1
	SIOCADDMULTI                      = 0x80206931
	SIOCAIFADDR                       = 0x8040691a
	SIOCAIFGROUP                      = 0x80286987
	SIOCATMARK                        = 0x40047307
	SIOCBRDGADD                       = 0x8060693c
	SIOCBRDGADDL                      = 0x80606949
	SIOCBRDGADDS                      = 0x80606941
	SIOCBRDGARL                       = 0x808c694d
	SIOCBRDGDADDR                     = 0x81286947
	SIOCBRDGDEL                       = 0x8060693d
	SIOCBRDGDELS                      = 0x80606942
	SIOCBRDGFLUSH                     = 0x80606948
	SIOCBRDGFRL                       = 0x808c694e
	SIOCBRDGGCACHE                    = 0xc0146941
	SIOCBRDGGFD                       = 0xc0146952
	SIOCBRDGGHT                       = 0xc0146951
	SIOCBRDGGIFFLGS                   = 0xc060693e
	SIOCBRDGGMA                       = 0xc0146953
	SIOCBRDGGPARAM                    = 0xc0406958
	SIOCBRDGGPRI                      = 0xc0146950
	SIOCBRDGGRL                       = 0xc030694f
	SIOCBRDGGTO                       = 0xc0146946
	SIOCBRDGIFS                       = 0xc0606942
	SIOCBRDGRTS                       = 0xc0206943
	SIOCBRDGSADDR                     = 0xc1286944
	SIOCBRDGSCACHE                    = 0x80146940
	SIOCBRDGSFD                       = 0x80146952
	SIOCBRDGSHT                       = 0x80146951
	SIOCBRDGSIFCOST                   = 0x80606955
	SIOCBRDGSIFFLGS                   = 0x8060693f
	SIOCBRDGSIFPRIO                   = 0x80606954
	SIOCBRDGSIFPROT                   = 0x8060694a
	SIOCBRDGSMA                       = 0x80146953
	SIOCBRDGSPRI                      = 0x80146950
	SIOCBRDGSPROTO                    = 0x8014695a
	SIOCBRDGSTO                       = 0x80146945
	SIOCBRDGSTXHC                     = 0x80146959
	SIOCDELLABEL                      = 0x80206997
	SIOCDELMULTI                      = 0x80206932
	SIOCDIFADDR                       = 0x80206919
	SIOCDIFGROUP                      = 0x80286989
	SIOCDIFPARENT                     = 0x802069b4
	SIOCDIFPHYADDR                    = 0x80206949
	SIOCDPWE3NEIGHBOR                 = 0x802069de
	SIOCDVNETID                       = 0x802069af
	SIOCGETKALIVE                     = 0xc01869a4
	SIOCGETLABEL                      = 0x8020699a
	SIOCGETMPWCFG                     = 0xc02069ae
	SIOCGETPFLOW                      = 0xc02069fe
	SIOCGETPFSYNC                     = 0xc02069f8
	SIOCGETSGCNT                      = 0xc0207534
	SIOCGETVIFCNT                     = 0xc0287533
	SIOCGETVLAN                       = 0xc0206990
	SIOCGIFADDR                       = 0xc0206921
	SIOCGIFBRDADDR                    = 0xc0206923
	SIOCGIFCONF                       = 0xc0106924
	SIOCGIFDATA                       = 0xc020691b
	SIOCGIFDESCR                      = 0xc0206981
	SIOCGIFDSTADDR                    = 0xc0206922
	SIOCGIFFLAGS                      = 0xc0206911
	SIOCGIFGATTR                      = 0xc028698b
	SIOCGIFGENERIC                    = 0xc020693a
	SIOCGIFGLIST                      = 0xc028698d
	SIOCGIFGMEMB                      = 0xc028698a
	SIOCGIFGROUP                      = 0xc0286988
	SIOCGIFHARDMTU                    = 0xc02069a5
	SIOCGIFLLPRIO                     = 0xc02069b6
	SIOCGIFMEDIA                      = 0xc0406938
	SIOCGIFMETRIC                     = 0xc0206917
	SIOCGIFMTU                        = 0xc020697e
	SIOCGIFNETMASK                    = 0xc0206925
	SIOCGIFPAIR                       = 0xc02069b1
	SIOCGIFPARENT                     = 0xc02069b3
	SIOCGIFPRIORITY                   = 0xc020699c
	SIOCGIFRDOMAIN                    = 0xc02069a0
	SIOCGIFRTLABEL                    = 0xc0206983
	SIOCGIFRXR                        = 0x802069aa
	SIOCGIFSFFPAGE                    = 0xc1126939
	SIOCGIFXFLAGS                     = 0xc020699e
	SIOCGLIFPHYADDR                   = 0xc218694b
	SIOCGLIFPHYDF                     = 0xc02069c2
	SIOCGLIFPHYECN                    = 0xc02069c8
	SIOCGLIFPHYRTABLE                 = 0xc02069a2
	SIOCGLIFPHYTTL                    = 0xc02069a9
	SIOCGPGRP                         = 0x40047309
	SIOCGPWE3                         = 0xc0206998
	SIOCGPWE3CTRLWORD                 = 0xc02069dc
	SIOCGPWE3FAT                      = 0xc02069dd
	SIOCGPWE3NEIGHBOR                 = 0xc21869de
	SIOCGRXHPRIO                      = 0xc02069db
	SIOCGSPPPPARAMS                   = 0xc0206994
	SIOCGTXHPRIO                      = 0xc02069c6
	SIOCGUMBINFO                      = 0xc02069be
	SIOCGUMBPARAM                     = 0xc02069c0
	SIOCGVH                           = 0xc02069f6
	SIOCGVNETFLOWID                   = 0xc02069c4
	SIOCGVNETID                       = 0xc02069a7
	SIOCIFAFATTACH                    = 0x801169ab
	SIOCIFAFDETACH                    = 0x801169ac
	SIOCIFCREATE                      = 0x8020697a
	SIOCIFDESTROY                     = 0x80206979
	SIOCIFGCLONERS                    = 0xc0106978
	SIOCSETKALIVE                     = 0x801869a3
	SIOCSETLABEL                      = 0x80206999
	SIOCSETMPWCFG                     = 0x802069ad
	SIOCSETPFLOW                      = 0x802069fd
	SIOCSETPFSYNC                     = 0x802069f7
	SIOCSETVLAN                       = 0x8020698f
	SIOCSIFADDR                       = 0x8020690c
	SIOCSIFBRDADDR                    = 0x80206913
	SIOCSIFDESCR                      = 0x80206980
	SIOCSIFDSTADDR                    = 0x8020690e
	SIOCSIFFLAGS                      = 0x80206910
	SIOCSIFGATTR                      = 0x8028698c
	SIOCSIFGENERIC                    = 0x80206939
	SIOCSIFLLADDR                     = 0x8020691f
	SIOCSIFLLPRIO                     = 0x802069b5
	SIOCSIFMEDIA                      = 0xc0206937
	SIOCSIFMETRIC                     = 0x80206918
	SIOCSIFMTU                        = 0x8020697f
	SIOCSIFNETMASK                    = 0x80206916
	SIOCSIFPAIR                       = 0x802069b0
	SIOCSIFPARENT                     = 0x802069b2
	SIOCSIFPRIORITY                   = 0x8020699b
	SIOCSIFRDOMAIN                    = 0x8020699f
	SIOCSIFRTLABEL                    = 0x80206982
	SIOCSIFXFLAGS                     = 0x8020699d
	SIOCSLIFPHYADDR                   = 0x8218694a
	SIOCSLIFPHYDF                     = 0x802069c1
	SIOCSLIFPHYECN                    = 0x802069c7
	SIOCSLIFPHYRTABLE                 = 0x802069a1
	SIOCSLIFPHYTTL                    = 0x802069a8
	SIOCSPGRP                         = 0x80047308
	SIOCSPWE3CTRLWORD                 = 0x802069dc
	SIOCSPWE3FAT                      = 0x802069dd
	SIOCSPWE3NEIGHBOR                 = 0x821869de
	SIOCSRXHPRIO                      = 0x802069db
	SIOCSSPPPPARAMS                   = 0x80206993
	SIOCSTXHPRIO                      = 0x802069c5
	SIOCSUMBPARAM                     = 0x802069bf
	SIOCSVH                           = 0xc02069f5
	SIOCSVNETFLOWID                   = 0x802069c3
	SIOCSVNETID                       = 0x802069a6
	SOCK_CLOEXEC                      = 0x8000
	SOCK_DGRAM                        = 0x2
	SOCK_DNS                          = 0x1000
	SOCK_NONBLOCK                     = 0x4000
	SOCK_RAW                          = 0x3
	SOCK_RDM                          = 0x4
	SOCK_SEQPACKET                    = 0x5
	SOCK_STREAM                       = 0x1
	SOL_SOCKET                        = 0xffff
	SOMAXCONN                         = 0x80
	SO_ACCEPTCONN                     = 0x2
	SO_BINDANY                        = 0x1000
	SO_BROADCAST                      = 0x20
	SO_DEBUG                          = 0x1
	SO_DOMAIN                         = 0x1024
	SO_DONTROUTE                      = 0x10
	SO_ERROR                          = 0x1007
	SO_KEEPALIVE                      = 0x8
	SO_LINGER                         = 0x80
	SO_NETPROC                        = 0x1020
	SO_OOBINLINE                      = 0x100
	SO_PEERCRED                       = 0x1022
	SO_PROTOCOL                       = 0x1025
	SO_RCVBUF                         = 0x1002
	SO_RCVLOWAT                       = 0x1004
	SO_RCVTIMEO                       = 0x1006
	SO_REUSEADDR                      = 0x4
	SO_REUSEPORT                      = 0x200
	SO_RTABLE                         = 0x1021
	SO_SNDBUF                         = 0x1001
	SO_SNDLOWAT                       = 0x1003
	SO_SNDTIMEO                       = 0x1005
	SO_SPLICE                         = 0x1023
	SO_TIMESTAMP                      = 0x800
	SO_TYPE                           = 0x1008
	SO_USELOOPBACK                    = 0x40
	SO_ZEROIZE                        = 0x2000
	S_BLKSIZE                         = 0x200
	S_IEXEC                           = 0x40
	S_IFBLK                           = 0x6000
	S_IFCHR                           = 0x2000
	S_IFDIR                           = 0x4000
	S_IFIFO                           = 0x1000
	S_IFLNK                           = 0xa000
	S_IFMT                            = 0xf000
	S_IFREG                           = 0x8000
	S_IFSOCK                          = 0xc000
	S_IREAD                           = 0x100
	S_IRGRP                           = 0x20
	S_IROTH                           = 0x4
	S_IRUSR                           = 0x100
	S_IRWXG                           = 0x38
	S_IRWXO                           = 0x7
	S_IRWXU                           = 0x1c0
	S_ISGID                           = 0x400
	S_ISTXT                           = 0x200
	S_ISUID                           = 0x800
	S_ISVTX                           = 0x200
	S_IWGRP                           = 0x10
	S_IWOTH                           = 0x2
	S_IWRITE                          = 0x80
	S_IWUSR                           = 0x80
	S_IXGRP                           = 0x8
	S_IXOTH                           = 0x1
	S_IXUSR                           = 0x40
	TCIFLUSH                          = 0x1
	TCIOFF                            = 0x3
	TCIOFLUSH                         = 0x3
	TCION                             = 0x4
	TCOFLUSH                          = 0x2
	TCOOFF                            = 0x1
	TCOON                             = 0x2
	TCPOPT_EOL                        = 0x0
	TCPOPT_MAXSEG                     = 0x2
	TCPOPT_NOP                        = 0x1
	TCPOPT_SACK                       = 0x5
	TCPOPT_SACK_HDR                   = 0x1010500
	TCPOPT_SACK_PERMITTED             = 0x4
	TCPOPT_SACK_PERMIT_HDR            = 0x1010402
	TCPOPT_SIGNATURE                  = 0x13
	TCPOPT_TIMESTAMP                  = 0x8
	TCPOPT_TSTAMP_HDR                 = 0x101080a
	TCPOPT_WINDOW                     = 0x3
	TCP_INFO                          = 0x9
	TCP_MAXSEG                        = 0x2
	TCP_MAXWIN                        = 0xffff
	TCP_MAX_SACK                      = 0x3
	TCP_MAX_WINSHIFT                  = 0xe
	TCP_MD5SIG                        = 0x4
	TCP_MSS                           = 0x200
	TCP_NODELAY                       = 0x1
	TCP_NOPUSH                        = 0x10
	TCP_SACKHOLE_LIMIT                = 0x80
	TCP_SACK_ENABLE                   = 0x8
	TCSAFLUSH                         = 0x2
	TIMER_ABSTIME                     = 0x1
	TIMER_RELTIME                     = 0x0
	TIOCCBRK                          = 0x2000747a
	TIOCCDTR                          = 0x20007478
	TIOCCHKVERAUTH                    = 0x2000741e
	TIOCCLRVERAUTH                    = 0x2000741d
	TIOCCONS                          = 0x80047462
	TIOCDRAIN                         = 0x2000745e
	TIOCEXCL                          = 0x2000740d
	TIOCEXT                           = 0x80047460
	TIOCFLAG_CLOCAL                   = 0x2
	TIOCFLAG_CRTSCTS                  = 0x4
	TIOCFLAG_MDMBUF                   = 0x8
	TIOCFLAG_PPS                      = 0x10
	TIOCFLAG_SOFTCAR                  = 0x1
	TIOCFLUSH                         = 0x80047410
	TIOCGETA                          = 0x402c7413
	TIOCGETD                          = 0x4004741a
	TIOCGFLAGS                        = 0x4004745d
	TIOCGPGRP                         = 0x40047477
	TIOCGSID                          = 0x40047463
	TIOCGTSTAMP                       = 0x4010745b
	TIOCGWINSZ                        = 0x40087468
	TIOCMBIC                          = 0x8004746b
	TIOCMBIS                          = 0x8004746c
	TIOCMGET                          = 0x4004746a
	TIOCMODG                          = 0x4004746a
	TIOCMODS                          = 0x8004746d
	TIOCMSET                          = 0x8004746d
	TIOCM_CAR                         = 0x40
	TIOCM_CD                          = 0x40
	TIOCM_CTS                         = 0x20
	TIOCM_DSR                         = 0x100
	TIOCM_DTR                         = 0x2
	TIOCM_LE                          = 0x1
	TIOCM_RI                          = 0x80
	TIOCM_RNG                         = 0x80
	TIOCM_RTS                         = 0x4
	TIOCM_SR                          = 0x10
	TIOCM_ST                          = 0x8
	TIOCNOTTY                         = 0x20007471
	TIOCNXCL                          = 0x2000740e
	TIOCOUTQ                          = 0x40047473
	TIOCPKT                           = 0x80047470
	TIOCPKT_DATA                      = 0x0
	TIOCPKT_DOSTOP                    = 0x20
	TIOCPKT_FLUSHREAD                 = 0x1
	TIOCPKT_FLUSHWRITE                = 0x2
	TIOCPKT_IOCTL                     = 0x40
	TIOCPKT_NOSTOP                    = 0x10
	TIOCPKT_START                     = 0x8
	TIOCPKT_STOP                      = 0x4
	TIOCREMOTE                        = 0x80047469
	TIOCSBRK                          = 0x2000747b
	TIOCSCTTY                         = 0x20007461
	TIOCSDTR                          = 0x20007479
	TIOCSETA                          = 0x802c7414
	TIOCSETAF                         = 0x802c7416
	TIOCSETAW                         = 0x802c7415
	TIOCSETD                          = 0x8004741b
	TIOCSETVERAUTH                    = 0x8004741c
	TIOCSFLAGS                        = 0x8004745c
	TIOCSIG                           = 0x8004745f
	TIOCSPGRP                         = 0x80047476
	TIOCSTART                         = 0x2000746e
	TIOCSTAT                          = 0x20007465
	TIOCSTOP                          = 0x2000746f
	TIOCSTSTAMP                       = 0x8008745a
	TIOCSWINSZ                        = 0x80087467
	TIOCUCNTL                         = 0x80047466
	TIOCUCNTL_CBRK                    = 0x7a
	TIOCUCNTL_SBRK                    = 0x7b
	TOSTOP                            = 0x400000
	UTIME_NOW                         = -0x2
	UTIME_OMIT                        = -0x1
	VDISCARD                          = 0xf
	VDSUSP                            = 0xb
	VEOF                              = 0x0
	VEOL                              = 0x1
	VEOL2                             = 0x2
	VERASE                            = 0x3
	VINTR                             = 0x8
	VKILL                             = 0x5
	VLNEXT                            = 0xe
	VMIN                              = 0x10
	VM_ANONMIN                        = 0x7
	VM_LOADAVG                        = 0x2
	VM_MALLOC_CONF                    = 0xc
	VM_MAXID                          = 0xd
	VM_MAXSLP                         = 0xa
	VM_METER                          = 0x1
	VM_NKMEMPAGES                     = 0x6
	VM_PSSTRINGS                      = 0x3
	VM_SWAPENCRYPT                    = 0x5
	VM_USPACE                         = 0xb
	VM_UVMEXP                         = 0x4
	VM_VNODEMIN                       = 0x9
	VM_VTEXTMIN                       = 0x8
	VQUIT                             = 0x9
	VREPRINT                          = 0x6
	VSTART                            = 0xc
	VSTATUS                           = 0x12
	VSTOP                             = 0xd
	VSUSP                             = 0xa
	VTIME                             = 0x11
	VWERASE                           = 0x4
	WALTSIG                           = 0x4
	WCONTINUED                        = 0x8
	WCOREFLAG                         = 0x80
	WNOHANG                           = 0x1
	WUNTRACED                         = 0x2
	XCASE                             = 0x1000000
)

// Errors
const (
	E2BIG           = syscall.Errno(0x7)
	EACCES          = syscall.Errno(0xd)
	EADDRINUSE      = syscall.Errno(0x30)
	EADDRNOTAVAIL   = syscall.Errno(0x31)
	EAFNOSUPPORT    = syscall.Errno(0x2f)
	EAGAIN          = syscall.Errno(0x23)
	EALREADY        = syscall.Errno(0x25)
	EAUTH           = syscall.Errno(0x50)
	EBADF           = syscall.Errno(0x9)
	EBADMSG         = syscall.Errno(0x5c)
	EBADRPC         = syscall.Errno(0x48)
	EBUSY           = syscall.Errno(0x10)
	ECANCELED       = syscall.Errno(0x58)
	ECHILD          = syscall.Errno(0xa)
	ECONNABORTED    = syscall.Errno(0x35)
	ECONNREFUSED    = syscall.Errno(0x3d)
	ECONNRESET      = syscall.Errno(0x36)
	EDEADLK         = syscall.Errno(0xb)
	EDESTADDRREQ    = syscall.Errno(0x27)
	EDOM            = syscall.Errno(0x21)
	EDQUOT          = syscall.Errno(0x45)
	EEXIST          = syscall.Errno(0x11)
	EFAULT          = syscall.Errno(0xe)
	EFBIG           = syscall.Errno(0x1b)
	EFTYPE          = syscall.Errno(0x4f)
	EHOSTDOWN       = syscall.Errno(0x40)
	EHOSTUNREACH    = syscall.Errno(0x41)
	EIDRM           = syscall.Errno(0x59)
	EILSEQ          = syscall.Errno(0x54)
	EINPROGRESS     = syscall.Errno(0x24)
	EINTR           = syscall.Errno(0x4)
	EINVAL          = syscall.Errno(0x16)
	EIO             = syscall.Errno(0x5)
	EIPSEC          = syscall.Errno(0x52)
	EISCONN         = syscall.Errno(0x38)
	EISDIR          = syscall.Errno(0x15)
	ELAST           = syscall.Errno(0x5f)
	ELOOP           = syscall.Errno(0x3e)
	EMEDIUMTYPE     = syscall.Errno(0x56)
	EMFILE          = syscall.Errno(0x18)
	EMLINK          = syscall.Errno(0x1f)
	EMSGSIZE        = syscall.Errno(0x28)
	ENAMETOOLONG    = syscall.Errno(0x3f)
	ENEEDAUTH       = syscall.Errno(0x51)
	ENETDOWN        = syscall.Errno(0x32)
	ENETRESET       = syscall.Errno(0x34)
	ENETUNREACH     = syscall.Errno(0x33)
	ENFILE          = syscall.Errno(0x17)
	ENOATTR         = syscall.Errno(0x53)
	ENOBUFS         = syscall.Errno(0x37)
	ENODEV          = syscall.Errno(0x13)
	ENOENT          = syscall.Errno(0x2)
	ENOEXEC         = syscall.Errno(0x8)
	ENOLCK          = syscall.Errno(0x4d)
	ENOMEDIUM       = syscall.Errno(0x55)
	ENOMEM          = syscall.Errno(0xc)
	ENOMSG          = syscall.Errno(0x5a)
	ENOPROTOOPT     = syscall.Errno(0x2a)
	ENOSPC          = syscall.Errno(0x1c)
	ENOSYS          = syscall.Errno(0x4e)
	ENOTBLK         = syscall.Errno(0xf)
	ENOTCONN        = syscall.Errno(0x39)
	ENOTDIR         = syscall.Errno(0x14)
	ENOTEMPTY       = syscall.Errno(0x42)
	ENOTRECOVERABLE = syscall.Errno(0x5d)
	ENOTSOCK        = syscall.Errno(0x26)
	ENOTSUP         = syscall.Errno(0x5b)
	ENOTTY          = syscall.Errno(0x19)
	ENXIO           = syscall.Errno(0x6)
	EOPNOTSUPP      = syscall.Errno(0x2d)
	EOVERFLOW       = syscall.Errno(0x57)
	EOWNERDEAD      = syscall.Errno(0x5e)
	EPERM           = syscall.Errno(0x1)
	EPFNOSUPPORT    = syscall.Errno(0x2e)
	EPIPE           = syscall.Errno(0x20)
	EPROCLIM        = syscall.Errno(0x43)
	EPROCUNAVAIL    = syscall.Errno(0x4c)
	EPROGMISMATCH   = syscall.Errno(0x4b)
	EPROGUNAVAIL    = syscall.Errno(0x4a)
	EPROTO          = syscall.Errno(0x5f)
	EPROTONOSUPPORT = syscall.Errno(0x2b)
	EPROTOTYPE      = syscall.Errno(0x29)
	ERANGE          = syscall.Errno(0x22)
	EREMOTE         = syscall.Errno(0x47)
	EROFS           = syscall.Errno(0x1e)
	ERPCMISMATCH    = syscall.Errno(0x49)
	ESHUTDOWN       = syscall.Errno(0x3a)
	ESOCKTNOSUPPORT = syscall.Errno(0x2c)
	ESPIPE          = syscall.Errno(0x1d)
	ESRCH           = syscall.Errno(0x3)
	ESTALE          = syscall.Errno(0x46)
	ETIMEDOUT       = syscall.Errno(0x3c)
	ETOOMANYREFS    = syscall.Errno(0x3b)
	ETXTBSY         = syscall.Errno(0x1a)
	EUSERS          = syscall.Errno(0x44)
	EWOULDBLOCK     = syscall.Errno(0x23)
	EXDEV           = syscall.Errno(0x12)
)

// Signals
const (
	SIGABRT   = syscall.Signal(0x6)
	SIGALRM   = syscall.Signal(0xe)
	SIGBUS    = syscall.Signal(0xa)
	SIGCHLD   = syscall.Signal(0x14)
	SIGCONT   = syscall.Signal(0x13)
	SIGEMT    = syscall.Signal(0x7)
	SIGFPE    = syscall.Signal(0x8)
	SIGHUP    = syscall.Signal(0x1)
	SIGILL    = syscall.Signal(0x4)
	SIGINFO   = syscall.Signal(0x1d)
	SIGINT    = syscall.Signal(0x2)
	SIGIO     = syscall.Signal(0x17)
	SIGIOT    = syscall.Signal(0x6)
	SIGKILL   = syscall.Signal(0x9)
	SIGPIPE   = syscall.Signal(0xd)
	SIGPROF   = syscall.Signal(0x1b)
	SIGQUIT   = syscall.Signal(0x3)
	SIGSEGV   = syscall.Signal(0xb)
	SIGSTOP   = syscall.Signal(0x11)
	SIGSYS    = syscall.Signal(0xc)
	SIGTERM   = syscall.Signal(0xf)
	SIGTHR    = syscall.Signal(0x20)
	SIGTRAP   = syscall.Signal(0x5)
	SIGTSTP   = syscall.Signal(0x12)
	SIGTTIN   = syscall.Signal(0x15)
	SIGTTOU   = syscall.Signal(0x16)
	SIGURG    = syscall.Signal(0x10)
	SIGUSR1   = syscall.Signal(0x1e)
	SIGUSR2   = syscall.Signal(0x1f)
	SIGVTALRM = syscall.Signal(0x1a)
	SIGWINCH  = syscall.Signal(0x1c)
	SIGXCPU   = syscall.Signal(0x18)
	SIGXFSZ   = syscall.Signal(0x19)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "operation not permitted"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "input/output error"},
	{6, "ENXIO", "device not configured"},
	{7, "E2BIG", "argument list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file descriptor"},
	{10, "ECHILD", "no child processes"},
	{11, "EDEADLK", "resource deadlock avoided"},
	{12, "ENOMEM", "cannot allocate memory"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "cross-device link"},
	{19, "ENODEV", "operation not supported by device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "too many open files in system"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "numerical argument out of domain"},
	{34, "ERANGE", "result too large"},
	{35, "EAGAIN", "resource temporarily unavailable"},
	{36, "EINPROGRESS", "operation now in progress"},
	{37, "EALREADY", "operation already in progress"},
	{38, "ENOTSOCK", "socket operation on non-socket"},
	{39, "EDESTADDRREQ", "destination address required"},
	{40, "EMSGSIZE", "message too long"},
	{41, "EPROTOTYPE", "protocol wrong type for socket"},
	{42, "ENOPROTOOPT", "protocol not available"},
	{43, "EPROTONOSUPPORT", "protocol not supported"},
	{44, "ESOCKTNOSUPPORT", "socket type not supported"},
	{45, "EOPNOTSUPP", "operation not supported"},
	{46, "EPFNOSUPPORT", "protocol family not supported"},
	{47, "EAFNOSUPPORT", "address family not supported by protocol family"},
	{48, "EADDRINUSE", "address already in use"},
	{49, "EADDRNOTAVAIL", "can't assign requested address"},
	{50, "ENETDOWN", "network is down"},
	{51, "ENETUNREACH", "network is unreachable"},
	{52, "ENETRESET", "network dropped connection on reset"},
	{53, "ECONNABORTED", "software caused connection abort"},
	{54, "ECONNRESET", "connection reset by peer"},
	{55, "ENOBUFS", "no buffer space available"},
	{56, "EISCONN", "socket is already connected"},
	{57, "ENOTCONN", "socket is not connected"},
	{58, "ESHUTDOWN", "can't send after socket shutdown"},
	{59, "ETOOMANYREFS", "too many references: can't splice"},
	{60, "ETIMEDOUT", "operation timed out"},
	{61, "ECONNREFUSED", "connection refused"},
	{62, "ELOOP", "too many levels of symbolic links"},
	{63, "ENAMETOOLONG", "file name too long"},
	{64, "EHOSTDOWN", "host is down"},
	{65, "EHOSTUNREACH", "no route to host"},
	{66, "ENOTEMPTY", "directory not empty"},
	{67, "EPROCLIM", "too many processes"},
	{68, "EUSERS", "too many users"},
	{69, "EDQUOT", "disk quota exceeded"},
	{70, "ESTALE", "stale NFS file handle"},
	{71, "EREMOTE", "too many levels of remote in path"},
	{72, "EBADRPC", "RPC struct is bad"},
	{73, "ERPCMISMATCH", "RPC version wrong"},
	{74, "EPROGUNAVAIL", "RPC program not available"},
	{75, "EPROGMISMATCH", "program version wrong"},
	{76, "EPROCUNAVAIL", "bad procedure for program"},
	{77, "ENOLCK", "no locks available"},
	{78, "ENOSYS", "function not implemented"},
	{79, "EFTYPE", "inappropriate file type or format"},
	{80, "EAUTH", "authentication error"},
	{81, "ENEEDAUTH", "need authenticator"},
	{82, "EIPSEC", "IPsec processing failure"},
	{83, "ENOATTR", "attribute not found"},
	{84, "EILSEQ", "illegal byte sequence"},
	{85, "ENOMEDIUM", "no medium found"},
	{86, "EMEDIUMTYPE", "wrong medium type"},
	{87, "EOVERFLOW", "value too large to be stored in data type"},
	{88, "ECANCELED", "operation canceled"},
	{89, "EIDRM", "identifier removed"},
	{90, "ENOMSG", "no message of desired type"},
	{91, "ENOTSUP", "not supported"},
	{92, "EBADMSG", "bad message"},
	{93, "ENOTRECOVERABLE", "state not recoverable"},
	{94, "EOWNERDEAD", "previous owner died"},
	{95, "ELAST", "protocol error"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGTRAP", "trace/BPT trap"},
	{6, "SIGABRT", "abort trap"},
	{7, "SIGEMT", "EMT trap"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus error"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGSYS", "bad system call"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGURG", "urgent I/O condition"},
	{17, "SIGSTOP", "suspended (signal)"},
	{18, "SIGTSTP", "suspended"},
	{19, "SIGCONT", "continued"},
	{20, "SIGCHLD", "child exited"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGIO", "I/O possible"},
	{24, "SIGXCPU", "cputime limit exceeded"},
	{25, "SIGXFSZ", "filesize limit exceeded"},
	{26, "SIGVTALRM", "virtual timer expired"},
	{27, "SIGPROF", "profiling timer expired"},
	{28, "SIGWINCH", "window size changes"},
	{29, "SIGINFO", "information request"},
	{30, "SIGUSR1", "user defined signal 1"},
	{31, "SIGUSR2", "user defined signal 2"},
	{32, "SIGTHR", "thread AST"},
}
  07070100000E45000081A4000000000000000000000001645E367C0000EC1C000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go // mkerrors.sh -m64
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build amd64 && solaris
// +build amd64,solaris

// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -m64 _const.go

package unix

import "syscall"

const (
	AF_802                        = 0x12
	AF_APPLETALK                  = 0x10
	AF_CCITT                      = 0xa
	AF_CHAOS                      = 0x5
	AF_DATAKIT                    = 0x9
	AF_DECnet                     = 0xc
	AF_DLI                        = 0xd
	AF_ECMA                       = 0x8
	AF_FILE                       = 0x1
	AF_GOSIP                      = 0x16
	AF_HYLINK                     = 0xf
	AF_IMPLINK                    = 0x3
	AF_INET                       = 0x2
	AF_INET6                      = 0x1a
	AF_INET_OFFLOAD               = 0x1e
	AF_IPX                        = 0x17
	AF_KEY                        = 0x1b
	AF_LAT                        = 0xe
	AF_LINK                       = 0x19
	AF_LOCAL                      = 0x1
	AF_MAX                        = 0x20
	AF_NBS                        = 0x7
	AF_NCA                        = 0x1c
	AF_NIT                        = 0x11
	AF_NS                         = 0x6
	AF_OSI                        = 0x13
	AF_OSINET                     = 0x15
	AF_PACKET                     = 0x20
	AF_POLICY                     = 0x1d
	AF_PUP                        = 0x4
	AF_ROUTE                      = 0x18
	AF_SNA                        = 0xb
	AF_TRILL                      = 0x1f
	AF_UNIX                       = 0x1
	AF_UNSPEC                     = 0x0
	AF_X25                        = 0x14
	ARPHRD_ARCNET                 = 0x7
	ARPHRD_ATM                    = 0x10
	ARPHRD_AX25                   = 0x3
	ARPHRD_CHAOS                  = 0x5
	ARPHRD_EETHER                 = 0x2
	ARPHRD_ETHER                  = 0x1
	ARPHRD_FC                     = 0x12
	ARPHRD_FRAME                  = 0xf
	ARPHRD_HDLC                   = 0x11
	ARPHRD_IB                     = 0x20
	ARPHRD_IEEE802                = 0x6
	ARPHRD_IPATM                  = 0x13
	ARPHRD_METRICOM               = 0x17
	ARPHRD_TUNNEL                 = 0x1f
	B0                            = 0x0
	B110                          = 0x3
	B115200                       = 0x12
	B1200                         = 0x9
	B134                          = 0x4
	B150                          = 0x5
	B153600                       = 0x13
	B1800                         = 0xa
	B19200                        = 0xe
	B200                          = 0x6
	B230400                       = 0x14
	B2400                         = 0xb
	B300                          = 0x7
	B307200                       = 0x15
	B38400                        = 0xf
	B460800                       = 0x16
	B4800                         = 0xc
	B50                           = 0x1
	B57600                        = 0x10
	B600                          = 0x8
	B75                           = 0x2
	B76800                        = 0x11
	B921600                       = 0x17
	B9600                         = 0xd
	BIOCFLUSH                     = 0x20004268
	BIOCGBLEN                     = 0x40044266
	BIOCGDLT                      = 0x4004426a
	BIOCGDLTLIST                  = -0x3fefbd89
	BIOCGDLTLIST32                = -0x3ff7bd89
	BIOCGETIF                     = 0x4020426b
	BIOCGETLIF                    = 0x4078426b
	BIOCGHDRCMPLT                 = 0x40044274
	BIOCGRTIMEOUT                 = 0x4010427b
	BIOCGRTIMEOUT32               = 0x4008427b
	BIOCGSEESENT                  = 0x40044278
	BIOCGSTATS                    = 0x4080426f
	BIOCGSTATSOLD                 = 0x4008426f
	BIOCIMMEDIATE                 = -0x7ffbbd90
	BIOCPROMISC                   = 0x20004269
	BIOCSBLEN                     = -0x3ffbbd9a
	BIOCSDLT                      = -0x7ffbbd8a
	BIOCSETF                      = -0x7fefbd99
	BIOCSETF32                    = -0x7ff7bd99
	BIOCSETIF                     = -0x7fdfbd94
	BIOCSETLIF                    = -0x7f87bd94
	BIOCSHDRCMPLT                 = -0x7ffbbd8b
	BIOCSRTIMEOUT                 = -0x7fefbd86
	BIOCSRTIMEOUT32               = -0x7ff7bd86
	BIOCSSEESENT                  = -0x7ffbbd87
	BIOCSTCPF                     = -0x7fefbd8e
	BIOCSUDPF                     = -0x7fefbd8d
	BIOCVERSION                   = 0x40044271
	BPF_A                         = 0x10
	BPF_ABS                       = 0x20
	BPF_ADD                       = 0x0
	BPF_ALIGNMENT                 = 0x4
	BPF_ALU                       = 0x4
	BPF_AND                       = 0x50
	BPF_B                         = 0x10
	BPF_DFLTBUFSIZE               = 0x100000
	BPF_DIV                       = 0x30
	BPF_H                         = 0x8
	BPF_IMM                       = 0x0
	BPF_IND                       = 0x40
	BPF_JA                        = 0x0
	BPF_JEQ                       = 0x10
	BPF_JGE                       = 0x30
	BPF_JGT                       = 0x20
	BPF_JMP                       = 0x5
	BPF_JSET                      = 0x40
	BPF_K                         = 0x0
	BPF_LD                        = 0x0
	BPF_LDX                       = 0x1
	BPF_LEN                       = 0x80
	BPF_LSH                       = 0x60
	BPF_MAJOR_VERSION             = 0x1
	BPF_MAXBUFSIZE                = 0x1000000
	BPF_MAXINSNS                  = 0x200
	BPF_MEM                       = 0x60
	BPF_MEMWORDS                  = 0x10
	BPF_MINBUFSIZE                = 0x20
	BPF_MINOR_VERSION             = 0x1
	BPF_MISC                      = 0x7
	BPF_MSH                       = 0xa0
	BPF_MUL                       = 0x20
	BPF_NEG                       = 0x80
	BPF_OR                        = 0x40
	BPF_RELEASE                   = 0x30bb6
	BPF_RET                       = 0x6
	BPF_RSH                       = 0x70
	BPF_ST                        = 0x2
	BPF_STX                       = 0x3
	BPF_SUB                       = 0x10
	BPF_TAX                       = 0x0
	BPF_TXA                       = 0x80
	BPF_W                         = 0x0
	BPF_X                         = 0x8
	BRKINT                        = 0x2
	BS0                           = 0x0
	BS1                           = 0x2000
	BSDLY                         = 0x2000
	CBAUD                         = 0xf
	CFLUSH                        = 0xf
	CIBAUD                        = 0xf0000
	CLOCAL                        = 0x800
	CLOCK_HIGHRES                 = 0x4
	CLOCK_LEVEL                   = 0xa
	CLOCK_MONOTONIC               = 0x4
	CLOCK_PROCESS_CPUTIME_ID      = 0x5
	CLOCK_PROF                    = 0x2
	CLOCK_REALTIME                = 0x3
	CLOCK_THREAD_CPUTIME_ID       = 0x2
	CLOCK_VIRTUAL                 = 0x1
	CR0                           = 0x0
	CR1                           = 0x200
	CR2                           = 0x400
	CR3                           = 0x600
	CRDLY                         = 0x600
	CREAD                         = 0x80
	CRTSCTS                       = 0x80000000
	CS5                           = 0x0
	CS6                           = 0x10
	CS7                           = 0x20
	CS8                           = 0x30
	CSIZE                         = 0x30
	CSTART                        = 0x11
	CSTATUS                       = 0x14
	CSTOP                         = 0x13
	CSTOPB                        = 0x40
	CSUSP                         = 0x1a
	CSWTCH                        = 0x1a
	DIOC                          = 0x6400
	DIOCGETB                      = 0x6402
	DIOCGETC                      = 0x6401
	DIOCGETP                      = 0x6408
	DIOCSETE                      = 0x6403
	DIOCSETP                      = 0x6409
	DLT_AIRONET_HEADER            = 0x78
	DLT_APPLE_IP_OVER_IEEE1394    = 0x8a
	DLT_ARCNET                    = 0x7
	DLT_ARCNET_LINUX              = 0x81
	DLT_ATM_CLIP                  = 0x13
	DLT_ATM_RFC1483               = 0xb
	DLT_AURORA                    = 0x7e
	DLT_AX25                      = 0x3
	DLT_BACNET_MS_TP              = 0xa5
	DLT_CHAOS                     = 0x5
	DLT_CISCO_IOS                 = 0x76
	DLT_C_HDLC                    = 0x68
	DLT_DOCSIS                    = 0x8f
	DLT_ECONET                    = 0x73
	DLT_EN10MB                    = 0x1
	DLT_EN3MB                     = 0x2
	DLT_ENC                       = 0x6d
	DLT_ERF_ETH                   = 0xaf
	DLT_ERF_POS                   = 0xb0
	DLT_FDDI                      = 0xa
	DLT_FRELAY                    = 0x6b
	DLT_GCOM_SERIAL               = 0xad
	DLT_GCOM_T1E1                 = 0xac
	DLT_GPF_F                     = 0xab
	DLT_GPF_T                     = 0xaa
	DLT_GPRS_LLC                  = 0xa9
	DLT_HDLC                      = 0x10
	DLT_HHDLC                     = 0x79
	DLT_HIPPI                     = 0xf
	DLT_IBM_SN                    = 0x92
	DLT_IBM_SP                    = 0x91
	DLT_IEEE802                   = 0x6
	DLT_IEEE802_11                = 0x69
	DLT_IEEE802_11_RADIO          = 0x7f
	DLT_IEEE802_11_RADIO_AVS      = 0xa3
	DLT_IPNET                     = 0xe2
	DLT_IPOIB                     = 0xa2
	DLT_IP_OVER_FC                = 0x7a
	DLT_JUNIPER_ATM1              = 0x89
	DLT_JUNIPER_ATM2              = 0x87
	DLT_JUNIPER_CHDLC             = 0xb5
	DLT_JUNIPER_ES                = 0x84
	DLT_JUNIPER_ETHER             = 0xb2
	DLT_JUNIPER_FRELAY            = 0xb4
	DLT_JUNIPER_GGSN              = 0x85
	DLT_JUNIPER_MFR               = 0x86
	DLT_JUNIPER_MLFR              = 0x83
	DLT_JUNIPER_MLPPP             = 0x82
	DLT_JUNIPER_MONITOR           = 0xa4
	DLT_JUNIPER_PIC_PEER          = 0xae
	DLT_JUNIPER_PPP               = 0xb3
	DLT_JUNIPER_PPPOE             = 0xa7
	DLT_JUNIPER_PPPOE_ATM         = 0xa8
	DLT_JUNIPER_SERVICES          = 0x88
	DLT_LINUX_IRDA                = 0x90
	DLT_LINUX_LAPD                = 0xb1
	DLT_LINUX_SLL                 = 0x71
	DLT_LOOP                      = 0x6c
	DLT_LTALK                     = 0x72
	DLT_MTP2                      = 0x8c
	DLT_MTP2_WITH_PHDR            = 0x8b
	DLT_MTP3                      = 0x8d
	DLT_NULL                      = 0x0
	DLT_PCI_EXP                   = 0x7d
	DLT_PFLOG                     = 0x75
	DLT_PFSYNC                    = 0x12
	DLT_PPP                       = 0x9
	DLT_PPP_BSDOS                 = 0xe
	DLT_PPP_PPPD                  = 0xa6
	DLT_PRISM_HEADER              = 0x77
	DLT_PRONET                    = 0x4
	DLT_RAW                       = 0xc
	DLT_RAWAF_MASK                = 0x2240000
	DLT_RIO                       = 0x7c
	DLT_SCCP                      = 0x8e
	DLT_SLIP                      = 0x8
	DLT_SLIP_BSDOS                = 0xd
	DLT_SUNATM                    = 0x7b
	DLT_SYMANTEC_FIREWALL         = 0x63
	DLT_TZSP                      = 0x80
	ECHO                          = 0x8
	ECHOCTL                       = 0x200
	ECHOE                         = 0x10
	ECHOK                         = 0x20
	ECHOKE                        = 0x800
	ECHONL                        = 0x40
	ECHOPRT                       = 0x400
	EMPTY_SET                     = 0x0
	EMT_CPCOVF                    = 0x1
	EQUALITY_CHECK                = 0x0
	EXTA                          = 0xe
	EXTB                          = 0xf
	FD_CLOEXEC                    = 0x1
	FD_NFDBITS                    = 0x40
	FD_SETSIZE                    = 0x10000
	FF0                           = 0x0
	FF1                           = 0x8000
	FFDLY                         = 0x8000
	FIORDCHK                      = 0x6603
	FLUSHALL                      = 0x1
	FLUSHDATA                     = 0x0
	FLUSHO                        = 0x2000
	F_ALLOCSP                     = 0xa
	F_ALLOCSP64                   = 0xa
	F_BADFD                       = 0x2e
	F_BLKSIZE                     = 0x13
	F_BLOCKS                      = 0x12
	F_CHKFL                       = 0x8
	F_COMPAT                      = 0x8
	F_DUP2FD                      = 0x9
	F_DUP2FD_CLOEXEC              = 0x24
	F_DUPFD                       = 0x0
	F_DUPFD_CLOEXEC               = 0x25
	F_FLOCK                       = 0x35
	F_FLOCK64                     = 0x35
	F_FLOCKW                      = 0x36
	F_FLOCKW64                    = 0x36
	F_FREESP                      = 0xb
	F_FREESP64                    = 0xb
	F_GETFD                       = 0x1
	F_GETFL                       = 0x3
	F_GETLK                       = 0xe
	F_GETLK64                     = 0xe
	F_GETOWN                      = 0x17
	F_GETXFL                      = 0x2d
	F_HASREMOTELOCKS              = 0x1a
	F_ISSTREAM                    = 0xd
	F_MANDDNY                     = 0x10
	F_MDACC                       = 0x20
	F_NODNY                       = 0x0
	F_NPRIV                       = 0x10
	F_OFD_GETLK                   = 0x2f
	F_OFD_GETLK64                 = 0x2f
	F_OFD_SETLK                   = 0x30
	F_OFD_SETLK64                 = 0x30
	F_OFD_SETLKW                  = 0x31
	F_OFD_SETLKW64                = 0x31
	F_PRIV                        = 0xf
	F_QUOTACTL                    = 0x11
	F_RDACC                       = 0x1
	F_RDDNY                       = 0x1
	F_RDLCK                       = 0x1
	F_REVOKE                      = 0x19
	F_RMACC                       = 0x4
	F_RMDNY                       = 0x4
	F_RWACC                       = 0x3
	F_RWDNY                       = 0x3
	F_SETFD                       = 0x2
	F_SETFL                       = 0x4
	F_SETLK                       = 0x6
	F_SETLK64                     = 0x6
	F_SETLK64_NBMAND              = 0x2a
	F_SETLKW                      = 0x7
	F_SETLKW64                    = 0x7
	F_SETLK_NBMAND                = 0x2a
	F_SETOWN                      = 0x18
	F_SHARE                       = 0x28
	F_SHARE_NBMAND                = 0x2b
	F_UNLCK                       = 0x3
	F_UNLKSYS                     = 0x4
	F_UNSHARE                     = 0x29
	F_WRACC                       = 0x2
	F_WRDNY                       = 0x2
	F_WRLCK                       = 0x2
	HUPCL                         = 0x400
	IBSHIFT                       = 0x10
	ICANON                        = 0x2
	ICMP6_FILTER                  = 0x1
	ICRNL                         = 0x100
	IEXTEN                        = 0x8000
	IFF_ADDRCONF                  = 0x80000
	IFF_ALLMULTI                  = 0x200
	IFF_ANYCAST                   = 0x400000
	IFF_BROADCAST                 = 0x2
	IFF_CANTCHANGE                = 0x7f203003b5a
	IFF_COS_ENABLED               = 0x200000000
	IFF_DEBUG                     = 0x4
	IFF_DEPRECATED                = 0x40000
	IFF_DHCPRUNNING               = 0x4000
	IFF_DUPLICATE                 = 0x4000000000
	IFF_FAILED                    = 0x10000000
	IFF_FIXEDMTU                  = 0x1000000000
	IFF_INACTIVE                  = 0x40000000
	IFF_INTELLIGENT               = 0x400
	IFF_IPMP                      = 0x8000000000
	IFF_IPMP_CANTCHANGE           = 0x10000000
	IFF_IPMP_INVALID              = 0x1ec200080
	IFF_IPV4                      = 0x1000000
	IFF_IPV6                      = 0x2000000
	IFF_L3PROTECT                 = 0x40000000000
	IFF_LOOPBACK                  = 0x8
	IFF_MULTICAST                 = 0x800
	IFF_MULTI_BCAST               = 0x1000
	IFF_NOACCEPT                  = 0x4000000
	IFF_NOARP                     = 0x80
	IFF_NOFAILOVER                = 0x8000000
	IFF_NOLINKLOCAL               = 0x20000000000
	IFF_NOLOCAL                   = 0x20000
	IFF_NONUD                     = 0x200000
	IFF_NORTEXCH                  = 0x800000
	IFF_NOTRAILERS                = 0x20
	IFF_NOXMIT                    = 0x10000
	IFF_OFFLINE                   = 0x80000000
	IFF_POINTOPOINT               = 0x10
	IFF_PREFERRED                 = 0x400000000
	IFF_PRIVATE                   = 0x8000
	IFF_PROMISC                   = 0x100
	IFF_ROUTER                    = 0x100000
	IFF_RUNNING                   = 0x40
	IFF_STANDBY                   = 0x20000000
	IFF_TEMPORARY                 = 0x800000000
	IFF_UNNUMBERED                = 0x2000
	IFF_UP                        = 0x1
	IFF_VIRTUAL                   = 0x2000000000
	IFF_VRRP                      = 0x10000000000
	IFF_XRESOLV                   = 0x100000000
	IFNAMSIZ                      = 0x10
	IFT_1822                      = 0x2
	IFT_6TO4                      = 0xca
	IFT_AAL5                      = 0x31
	IFT_ARCNET                    = 0x23
	IFT_ARCNETPLUS                = 0x24
	IFT_ATM                       = 0x25
	IFT_CEPT                      = 0x13
	IFT_DS3                       = 0x1e
	IFT_EON                       = 0x19
	IFT_ETHER                     = 0x6
	IFT_FDDI                      = 0xf
	IFT_FRELAY                    = 0x20
	IFT_FRELAYDCE                 = 0x2c
	IFT_HDH1822                   = 0x3
	IFT_HIPPI                     = 0x2f
	IFT_HSSI                      = 0x2e
	IFT_HY                        = 0xe
	IFT_IB                        = 0xc7
	IFT_IPV4                      = 0xc8
	IFT_IPV6                      = 0xc9
	IFT_ISDNBASIC                 = 0x14
	IFT_ISDNPRIMARY               = 0x15
	IFT_ISO88022LLC               = 0x29
	IFT_ISO88023                  = 0x7
	IFT_ISO88024                  = 0x8
	IFT_ISO88025                  = 0x9
	IFT_ISO88026                  = 0xa
	IFT_LAPB                      = 0x10
	IFT_LOCALTALK                 = 0x2a
	IFT_LOOP                      = 0x18
	IFT_MIOX25                    = 0x26
	IFT_MODEM                     = 0x30
	IFT_NSIP                      = 0x1b
	IFT_OTHER                     = 0x1
	IFT_P10                       = 0xc
	IFT_P80                       = 0xd
	IFT_PARA                      = 0x22
	IFT_PPP                       = 0x17
	IFT_PROPMUX                   = 0x36
	IFT_PROPVIRTUAL               = 0x35
	IFT_PTPSERIAL                 = 0x16
	IFT_RS232                     = 0x21
	IFT_SDLC                      = 0x11
	IFT_SIP                       = 0x1f
	IFT_SLIP                      = 0x1c
	IFT_SMDSDXI                   = 0x2b
	IFT_SMDSICIP                  = 0x34
	IFT_SONET                     = 0x27
	IFT_SONETPATH                 = 0x32
	IFT_SONETVT                   = 0x33
	IFT_STARLAN                   = 0xb
	IFT_T1                        = 0x12
	IFT_ULTRA                     = 0x1d
	IFT_V35                       = 0x2d
	IFT_X25                       = 0x5
	IFT_X25DDN                    = 0x4
	IFT_X25PLE                    = 0x28
	IFT_XETHER                    = 0x1a
	IGNBRK                        = 0x1
	IGNCR                         = 0x80
	IGNPAR                        = 0x4
	IMAXBEL                       = 0x2000
	INLCR                         = 0x40
	INPCK                         = 0x10
	IN_AUTOCONF_MASK              = 0xffff0000
	IN_AUTOCONF_NET               = 0xa9fe0000
	IN_CLASSA_HOST                = 0xffffff
	IN_CLASSA_MAX                 = 0x80
	IN_CLASSA_NET                 = 0xff000000
	IN_CLASSA_NSHIFT              = 0x18
	IN_CLASSB_HOST                = 0xffff
	IN_CLASSB_MAX                 = 0x10000
	IN_CLASSB_NET                 = 0xffff0000
	IN_CLASSB_NSHIFT              = 0x10
	IN_CLASSC_HOST                = 0xff
	IN_CLASSC_NET                 = 0xffffff00
	IN_CLASSC_NSHIFT              = 0x8
	IN_CLASSD_HOST                = 0xfffffff
	IN_CLASSD_NET                 = 0xf0000000
	IN_CLASSD_NSHIFT              = 0x1c
	IN_CLASSE_NET                 = 0xffffffff
	IN_LOOPBACKNET                = 0x7f
	IN_PRIVATE12_MASK             = 0xfff00000
	IN_PRIVATE12_NET              = 0xac100000
	IN_PRIVATE16_MASK             = 0xffff0000
	IN_PRIVATE16_NET              = 0xc0a80000
	IN_PRIVATE8_MASK              = 0xff000000
	IN_PRIVATE8_NET               = 0xa000000
	IPPROTO_AH                    = 0x33
	IPPROTO_DSTOPTS               = 0x3c
	IPPROTO_EGP                   = 0x8
	IPPROTO_ENCAP                 = 0x4
	IPPROTO_EON                   = 0x50
	IPPROTO_ESP                   = 0x32
	IPPROTO_FRAGMENT              = 0x2c
	IPPROTO_GGP                   = 0x3
	IPPROTO_HELLO                 = 0x3f
	IPPROTO_HOPOPTS               = 0x0
	IPPROTO_ICMP                  = 0x1
	IPPROTO_ICMPV6                = 0x3a
	IPPROTO_IDP                   = 0x16
	IPPROTO_IGMP                  = 0x2
	IPPROTO_IP                    = 0x0
	IPPROTO_IPV6                  = 0x29
	IPPROTO_MAX                   = 0x100
	IPPROTO_ND                    = 0x4d
	IPPROTO_NONE                  = 0x3b
	IPPROTO_OSPF                  = 0x59
	IPPROTO_PIM                   = 0x67
	IPPROTO_PUP                   = 0xc
	IPPROTO_RAW                   = 0xff
	IPPROTO_ROUTING               = 0x2b
	IPPROTO_RSVP                  = 0x2e
	IPPROTO_SCTP                  = 0x84
	IPPROTO_TCP                   = 0x6
	IPPROTO_UDP                   = 0x11
	IPV6_ADD_MEMBERSHIP           = 0x9
	IPV6_BOUND_IF                 = 0x41
	IPV6_CHECKSUM                 = 0x18
	IPV6_DONTFRAG                 = 0x21
	IPV6_DROP_MEMBERSHIP          = 0xa
	IPV6_DSTOPTS                  = 0xf
	IPV6_FLOWINFO_FLOWLABEL       = 0xffff0f00
	IPV6_FLOWINFO_TCLASS          = 0xf00f
	IPV6_HOPLIMIT                 = 0xc
	IPV6_HOPOPTS                  = 0xe
	IPV6_JOIN_GROUP               = 0x9
	IPV6_LEAVE_GROUP              = 0xa
	IPV6_MULTICAST_HOPS           = 0x7
	IPV6_MULTICAST_IF             = 0x6
	IPV6_MULTICAST_LOOP           = 0x8
	IPV6_NEXTHOP                  = 0xd
	IPV6_PAD1_OPT                 = 0x0
	IPV6_PATHMTU                  = 0x25
	IPV6_PKTINFO                  = 0xb
	IPV6_PREFER_SRC_CGA           = 0x20
	IPV6_PREFER_SRC_CGADEFAULT    = 0x10
	IPV6_PREFER_SRC_CGAMASK       = 0x30
	IPV6_PREFER_SRC_COA           = 0x2
	IPV6_PREFER_SRC_DEFAULT       = 0x15
	IPV6_PREFER_SRC_HOME          = 0x1
	IPV6_PREFER_SRC_MASK          = 0x3f
	IPV6_PREFER_SRC_MIPDEFAULT    = 0x1
	IPV6_PREFER_SRC_MIPMASK       = 0x3
	IPV6_PREFER_SRC_NONCGA        = 0x10
	IPV6_PREFER_SRC_PUBLIC        = 0x4
	IPV6_PREFER_SRC_TMP           = 0x8
	IPV6_PREFER_SRC_TMPDEFAULT    = 0x4
	IPV6_PREFER_SRC_TMPMASK       = 0xc
	IPV6_RECVDSTOPTS              = 0x28
	IPV6_RECVHOPLIMIT             = 0x13
	IPV6_RECVHOPOPTS              = 0x14
	IPV6_RECVPATHMTU              = 0x24
	IPV6_RECVPKTINFO              = 0x12
	IPV6_RECVRTHDR                = 0x16
	IPV6_RECVRTHDRDSTOPTS         = 0x17
	IPV6_RECVTCLASS               = 0x19
	IPV6_RTHDR                    = 0x10
	IPV6_RTHDRDSTOPTS             = 0x11
	IPV6_RTHDR_TYPE_0             = 0x0
	IPV6_SEC_OPT                  = 0x22
	IPV6_SRC_PREFERENCES          = 0x23
	IPV6_TCLASS                   = 0x26
	IPV6_UNICAST_HOPS             = 0x5
	IPV6_UNSPEC_SRC               = 0x42
	IPV6_USE_MIN_MTU              = 0x20
	IPV6_V6ONLY                   = 0x27
	IP_ADD_MEMBERSHIP             = 0x13
	IP_ADD_SOURCE_MEMBERSHIP      = 0x17
	IP_BLOCK_SOURCE               = 0x15
	IP_BOUND_IF                   = 0x41
	IP_BROADCAST                  = 0x106
	IP_BROADCAST_TTL              = 0x43
	IP_DEFAULT_MULTICAST_LOOP     = 0x1
	IP_DEFAULT_MULTICAST_TTL      = 0x1
	IP_DF                         = 0x4000
	IP_DHCPINIT_IF                = 0x45
	IP_DONTFRAG                   = 0x1b
	IP_DONTROUTE                  = 0x105
	IP_DROP_MEMBERSHIP            = 0x14
	IP_DROP_SOURCE_MEMBERSHIP     = 0x18
	IP_HDRINCL                    = 0x2
	IP_MAXPACKET                  = 0xffff
	IP_MF                         = 0x2000
	IP_MSS                        = 0x240
	IP_MULTICAST_IF               = 0x10
	IP_MULTICAST_LOOP             = 0x12
	IP_MULTICAST_TTL              = 0x11
	IP_NEXTHOP                    = 0x19
	IP_OPTIONS                    = 0x1
	IP_PKTINFO                    = 0x1a
	IP_RECVDSTADDR                = 0x7
	IP_RECVIF                     = 0x9
	IP_RECVOPTS                   = 0x5
	IP_RECVPKTINFO                = 0x1a
	IP_RECVRETOPTS                = 0x6
	IP_RECVSLLA                   = 0xa
	IP_RECVTOS                    = 0xc
	IP_RECVTTL                    = 0xb
	IP_RETOPTS                    = 0x8
	IP_REUSEADDR                  = 0x104
	IP_SEC_OPT                    = 0x22
	IP_TOS                        = 0x3
	IP_TTL                        = 0x4
	IP_UNBLOCK_SOURCE             = 0x16
	IP_UNSPEC_SRC                 = 0x42
	ISIG                          = 0x1
	ISTRIP                        = 0x20
	IUCLC                         = 0x200
	IXANY                         = 0x800
	IXOFF                         = 0x1000
	IXON                          = 0x400
	LOCK_EX                       = 0x2
	LOCK_NB                       = 0x4
	LOCK_SH                       = 0x1
	LOCK_UN                       = 0x8
	MADV_ACCESS_DEFAULT           = 0x6
	MADV_ACCESS_LWP               = 0x7
	MADV_ACCESS_MANY              = 0x8
	MADV_DONTNEED                 = 0x4
	MADV_FREE                     = 0x5
	MADV_NORMAL                   = 0x0
	MADV_PURGE                    = 0x9
	MADV_RANDOM                   = 0x1
	MADV_SEQUENTIAL               = 0x2
	MADV_WILLNEED                 = 0x3
	MAP_32BIT                     = 0x80
	MAP_ALIGN                     = 0x200
	MAP_ANON                      = 0x100
	MAP_ANONYMOUS                 = 0x100
	MAP_FILE                      = 0x0
	MAP_FIXED                     = 0x10
	MAP_INITDATA                  = 0x800
	MAP_NORESERVE                 = 0x40
	MAP_PRIVATE                   = 0x2
	MAP_RENAME                    = 0x20
	MAP_SHARED                    = 0x1
	MAP_TEXT                      = 0x400
	MAP_TYPE                      = 0xf
	MCAST_BLOCK_SOURCE            = 0x2b
	MCAST_EXCLUDE                 = 0x2
	MCAST_INCLUDE                 = 0x1
	MCAST_JOIN_GROUP              = 0x29
	MCAST_JOIN_SOURCE_GROUP       = 0x2d
	MCAST_LEAVE_GROUP             = 0x2a
	MCAST_LEAVE_SOURCE_GROUP      = 0x2e
	MCAST_UNBLOCK_SOURCE          = 0x2c
	MCL_CURRENT                   = 0x1
	MCL_FUTURE                    = 0x2
	MSG_CTRUNC                    = 0x10
	MSG_DONTROUTE                 = 0x4
	MSG_DONTWAIT                  = 0x80
	MSG_DUPCTRL                   = 0x800
	MSG_EOR                       = 0x8
	MSG_MAXIOVLEN                 = 0x10
	MSG_NOSIGNAL                  = 0x200
	MSG_NOTIFICATION              = 0x100
	MSG_OOB                       = 0x1
	MSG_PEEK                      = 0x2
	MSG_TRUNC                     = 0x20
	MSG_WAITALL                   = 0x40
	MSG_XPG4_2                    = 0x8000
	MS_ASYNC                      = 0x1
	MS_INVALIDATE                 = 0x2
	MS_OLDSYNC                    = 0x0
	MS_SYNC                       = 0x4
	M_FLUSH                       = 0x86
	NAME_MAX                      = 0xff
	NEWDEV                        = 0x1
	NFDBITS                       = 0x40
	NL0                           = 0x0
	NL1                           = 0x100
	NLDLY                         = 0x100
	NOFLSH                        = 0x80
	OCRNL                         = 0x8
	OFDEL                         = 0x80
	OFILL                         = 0x40
	OLCUC                         = 0x2
	OLDDEV                        = 0x0
	ONBITSMAJOR                   = 0x7
	ONBITSMINOR                   = 0x8
	ONLCR                         = 0x4
	ONLRET                        = 0x20
	ONOCR                         = 0x10
	OPENFAIL                      = -0x1
	OPOST                         = 0x1
	O_ACCMODE                     = 0x600003
	O_APPEND                      = 0x8
	O_CLOEXEC                     = 0x800000
	O_CREAT                       = 0x100
	O_DIRECT                      = 0x2000000
	O_DIRECTORY                   = 0x1000000
	O_DSYNC                       = 0x40
	O_EXCL                        = 0x400
	O_EXEC                        = 0x400000
	O_LARGEFILE                   = 0x2000
	O_NDELAY                      = 0x4
	O_NOCTTY                      = 0x800
	O_NOFOLLOW                    = 0x20000
	O_NOLINKS                     = 0x40000
	O_NONBLOCK                    = 0x80
	O_RDONLY                      = 0x0
	O_RDWR                        = 0x2
	O_RSYNC                       = 0x8000
	O_SEARCH                      = 0x200000
	O_SIOCGIFCONF                 = -0x3ff796ec
	O_SIOCGLIFCONF                = -0x3fef9688
	O_SYNC                        = 0x10
	O_TRUNC                       = 0x200
	O_WRONLY                      = 0x1
	O_XATTR                       = 0x4000
	PARENB                        = 0x100
	PAREXT                        = 0x100000
	PARMRK                        = 0x8
	PARODD                        = 0x200
	PENDIN                        = 0x4000
	PRIO_PGRP                     = 0x1
	PRIO_PROCESS                  = 0x0
	PRIO_USER                     = 0x2
	PROT_EXEC                     = 0x4
	PROT_NONE                     = 0x0
	PROT_READ                     = 0x1
	PROT_WRITE                    = 0x2
	RLIMIT_AS                     = 0x6
	RLIMIT_CORE                   = 0x4
	RLIMIT_CPU                    = 0x0
	RLIMIT_DATA                   = 0x2
	RLIMIT_FSIZE                  = 0x1
	RLIMIT_NOFILE                 = 0x5
	RLIMIT_STACK                  = 0x3
	RLIM_INFINITY                 = 0xfffffffffffffffd
	RTAX_AUTHOR                   = 0x6
	RTAX_BRD                      = 0x7
	RTAX_DST                      = 0x0
	RTAX_GATEWAY                  = 0x1
	RTAX_GENMASK                  = 0x3
	RTAX_IFA                      = 0x5
	RTAX_IFP                      = 0x4
	RTAX_MAX                      = 0x9
	RTAX_NETMASK                  = 0x2
	RTAX_SRC                      = 0x8
	RTA_AUTHOR                    = 0x40
	RTA_BRD                       = 0x80
	RTA_DST                       = 0x1
	RTA_GATEWAY                   = 0x2
	RTA_GENMASK                   = 0x8
	RTA_IFA                       = 0x20
	RTA_IFP                       = 0x10
	RTA_NETMASK                   = 0x4
	RTA_NUMBITS                   = 0x9
	RTA_SRC                       = 0x100
	RTF_BLACKHOLE                 = 0x1000
	RTF_CLONING                   = 0x100
	RTF_DONE                      = 0x40
	RTF_DYNAMIC                   = 0x10
	RTF_GATEWAY                   = 0x2
	RTF_HOST                      = 0x4
	RTF_INDIRECT                  = 0x40000
	RTF_KERNEL                    = 0x80000
	RTF_LLINFO                    = 0x400
	RTF_MASK                      = 0x80
	RTF_MODIFIED                  = 0x20
	RTF_MULTIRT                   = 0x10000
	RTF_PRIVATE                   = 0x2000
	RTF_PROTO1                    = 0x8000
	RTF_PROTO2                    = 0x4000
	RTF_REJECT                    = 0x8
	RTF_SETSRC                    = 0x20000
	RTF_STATIC                    = 0x800
	RTF_UP                        = 0x1
	RTF_XRESOLVE                  = 0x200
	RTF_ZONE                      = 0x100000
	RTM_ADD                       = 0x1
	RTM_CHANGE                    = 0x3
	RTM_CHGADDR                   = 0xf
	RTM_DELADDR                   = 0xd
	RTM_DELETE                    = 0x2
	RTM_FREEADDR                  = 0x10
	RTM_GET                       = 0x4
	RTM_IFINFO                    = 0xe
	RTM_LOCK                      = 0x8
	RTM_LOSING                    = 0x5
	RTM_MISS                      = 0x7
	RTM_NEWADDR                   = 0xc
	RTM_OLDADD                    = 0x9
	RTM_OLDDEL                    = 0xa
	RTM_REDIRECT                  = 0x6
	RTM_RESOLVE                   = 0xb
	RTM_VERSION                   = 0x3
	RTV_EXPIRE                    = 0x4
	RTV_HOPCOUNT                  = 0x2
	RTV_MTU                       = 0x1
	RTV_RPIPE                     = 0x8
	RTV_RTT                       = 0x40
	RTV_RTTVAR                    = 0x80
	RTV_SPIPE                     = 0x10
	RTV_SSTHRESH                  = 0x20
	RT_AWARE                      = 0x1
	RUSAGE_CHILDREN               = -0x1
	RUSAGE_SELF                   = 0x0
	SCM_RIGHTS                    = 0x1010
	SCM_TIMESTAMP                 = 0x1013
	SCM_UCRED                     = 0x1012
	SHUT_RD                       = 0x0
	SHUT_RDWR                     = 0x2
	SHUT_WR                       = 0x1
	SIG2STR_MAX                   = 0x20
	SIOCADDMULTI                  = -0x7fdf96cf
	SIOCADDRT                     = -0x7fcf8df6
	SIOCATMARK                    = 0x40047307
	SIOCDARP                      = -0x7fdb96e0
	SIOCDELMULTI                  = -0x7fdf96ce
	SIOCDELRT                     = -0x7fcf8df5
	SIOCDXARP                     = -0x7fff9658
	SIOCGARP                      = -0x3fdb96e1
	SIOCGDSTINFO                  = -0x3fff965c
	SIOCGENADDR                   = -0x3fdf96ab
	SIOCGENPSTATS                 = -0x3fdf96c7
	SIOCGETLSGCNT                 = -0x3fef8deb
	SIOCGETNAME                   = 0x40107334
	SIOCGETPEER                   = 0x40107335
	SIOCGETPROP                   = -0x3fff8f44
	SIOCGETSGCNT                  = -0x3feb8deb
	SIOCGETSYNC                   = -0x3fdf96d3
	SIOCGETVIFCNT                 = -0x3feb8dec
	SIOCGHIWAT                    = 0x40047301
	SIOCGIFADDR                   = -0x3fdf96f3
	SIOCGIFBRDADDR                = -0x3fdf96e9
	SIOCGIFCONF                   = -0x3ff796a4
	SIOCGIFDSTADDR                = -0x3fdf96f1
	SIOCGIFFLAGS                  = -0x3fdf96ef
	SIOCGIFHWADDR                 = -0x3fdf9647
	SIOCGIFINDEX                  = -0x3fdf96a6
	SIOCGIFMEM                    = -0x3fdf96ed
	SIOCGIFMETRIC                 = -0x3fdf96e5
	SIOCGIFMTU                    = -0x3fdf96ea
	SIOCGIFMUXID                  = -0x3fdf96a8
	SIOCGIFNETMASK                = -0x3fdf96e7
	SIOCGIFNUM                    = 0x40046957
	SIOCGIP6ADDRPOLICY            = -0x3fff965e
	SIOCGIPMSFILTER               = -0x3ffb964c
	SIOCGLIFADDR                  = -0x3f87968f
	SIOCGLIFBINDING               = -0x3f879666
	SIOCGLIFBRDADDR               = -0x3f879685
	SIOCGLIFCONF                  = -0x3fef965b
	SIOCGLIFDADSTATE              = -0x3f879642
	SIOCGLIFDSTADDR               = -0x3f87968d
	SIOCGLIFFLAGS                 = -0x3f87968b
	SIOCGLIFGROUPINFO             = -0x3f4b9663
	SIOCGLIFGROUPNAME             = -0x3f879664
	SIOCGLIFHWADDR                = -0x3f879640
	SIOCGLIFINDEX                 = -0x3f87967b
	SIOCGLIFLNKINFO               = -0x3f879674
	SIOCGLIFMETRIC                = -0x3f879681
	SIOCGLIFMTU                   = -0x3f879686
	SIOCGLIFMUXID                 = -0x3f87967d
	SIOCGLIFNETMASK               = -0x3f879683
	SIOCGLIFNUM                   = -0x3ff3967e
	SIOCGLIFSRCOF                 = -0x3fef964f
	SIOCGLIFSUBNET                = -0x3f879676
	SIOCGLIFTOKEN                 = -0x3f879678
	SIOCGLIFUSESRC                = -0x3f879651
	SIOCGLIFZONE                  = -0x3f879656
	SIOCGLOWAT                    = 0x40047303
	SIOCGMSFILTER                 = -0x3ffb964e
	SIOCGPGRP                     = 0x40047309
	SIOCGSTAMP                    = -0x3fef9646
	SIOCGXARP                     = -0x3fff9659
	SIOCIFDETACH                  = -0x7fdf96c8
	SIOCILB                       = -0x3ffb9645
	SIOCLIFADDIF                  = -0x3f879691
	SIOCLIFDELND                  = -0x7f879673
	SIOCLIFGETND                  = -0x3f879672
	SIOCLIFREMOVEIF               = -0x7f879692
	SIOCLIFSETND                  = -0x7f879671
	SIOCLOWER                     = -0x7fdf96d7
	SIOCSARP                      = -0x7fdb96e2
	SIOCSCTPGOPT                  = -0x3fef9653
	SIOCSCTPPEELOFF               = -0x3ffb9652
	SIOCSCTPSOPT                  = -0x7fef9654
	SIOCSENABLESDP                = -0x3ffb9649
	SIOCSETPROP                   = -0x7ffb8f43
	SIOCSETSYNC                   = -0x7fdf96d4
	SIOCSHIWAT                    = -0x7ffb8d00
	SIOCSIFADDR                   = -0x7fdf96f4
	SIOCSIFBRDADDR                = -0x7fdf96e8
	SIOCSIFDSTADDR                = -0x7fdf96f2
	SIOCSIFFLAGS                  = -0x7fdf96f0
	SIOCSIFINDEX                  = -0x7fdf96a5
	SIOCSIFMEM                    = -0x7fdf96ee
	SIOCSIFMETRIC                 = -0x7fdf96e4
	SIOCSIFMTU                    = -0x7fdf96eb
	SIOCSIFMUXID                  = -0x7fdf96a7
	SIOCSIFNAME                   = -0x7fdf96b7
	SIOCSIFNETMASK                = -0x7fdf96e6
	SIOCSIP6ADDRPOLICY            = -0x7fff965d
	SIOCSIPMSFILTER               = -0x7ffb964b
	SIOCSLGETREQ                  = -0x3fdf96b9
	SIOCSLIFADDR                  = -0x7f879690
	SIOCSLIFBRDADDR               = -0x7f879684
	SIOCSLIFDSTADDR               = -0x7f87968e
	SIOCSLIFFLAGS                 = -0x7f87968c
	SIOCSLIFGROUPNAME             = -0x7f879665
	SIOCSLIFINDEX                 = -0x7f87967a
	SIOCSLIFLNKINFO               = -0x7f879675
	SIOCSLIFMETRIC                = -0x7f879680
	SIOCSLIFMTU                   = -0x7f879687
	SIOCSLIFMUXID                 = -0x7f87967c
	SIOCSLIFNAME                  = -0x3f87967f
	SIOCSLIFNETMASK               = -0x7f879682
	SIOCSLIFPREFIX                = -0x3f879641
	SIOCSLIFSUBNET                = -0x7f879677
	SIOCSLIFTOKEN                 = -0x7f879679
	SIOCSLIFUSESRC                = -0x7f879650
	SIOCSLIFZONE                  = -0x7f879655
	SIOCSLOWAT                    = -0x7ffb8cfe
	SIOCSLSTAT                    = -0x7fdf96b8
	SIOCSMSFILTER                 = -0x7ffb964d
	SIOCSPGRP                     = -0x7ffb8cf8
	SIOCSPROMISC                  = -0x7ffb96d0
	SIOCSQPTR                     = -0x3ffb9648
	SIOCSSDSTATS                  = -0x3fdf96d2
	SIOCSSESTATS                  = -0x3fdf96d1
	SIOCSXARP                     = -0x7fff965a
	SIOCTMYADDR                   = -0x3ff79670
	SIOCTMYSITE                   = -0x3ff7966e
	SIOCTONLINK                   = -0x3ff7966f
	SIOCUPPER                     = -0x7fdf96d8
	SIOCX25RCV                    = -0x3fdf96c4
	SIOCX25TBL                    = -0x3fdf96c3
	SIOCX25XMT                    = -0x3fdf96c5
	SIOCXPROTO                    = 0x20007337
	SOCK_CLOEXEC                  = 0x80000
	SOCK_DGRAM                    = 0x1
	SOCK_NDELAY                   = 0x200000
	SOCK_NONBLOCK                 = 0x100000
	SOCK_RAW                      = 0x4
	SOCK_RDM                      = 0x5
	SOCK_SEQPACKET                = 0x6
	SOCK_STREAM                   = 0x2
	SOCK_TYPE_MASK                = 0xffff
	SOL_FILTER                    = 0xfffc
	SOL_PACKET                    = 0xfffd
	SOL_ROUTE                     = 0xfffe
	SOL_SOCKET                    = 0xffff
	SOMAXCONN                     = 0x80
	SO_ACCEPTCONN                 = 0x2
	SO_ALL                        = 0x3f
	SO_ALLZONES                   = 0x1014
	SO_ANON_MLP                   = 0x100a
	SO_ATTACH_FILTER              = 0x40000001
	SO_BAND                       = 0x4000
	SO_BROADCAST                  = 0x20
	SO_COPYOPT                    = 0x80000
	SO_DEBUG                      = 0x1
	SO_DELIM                      = 0x8000
	SO_DETACH_FILTER              = 0x40000002
	SO_DGRAM_ERRIND               = 0x200
	SO_DOMAIN                     = 0x100c
	SO_DONTLINGER                 = -0x81
	SO_DONTROUTE                  = 0x10
	SO_ERROPT                     = 0x40000
	SO_ERROR                      = 0x1007
	SO_EXCLBIND                   = 0x1015
	SO_HIWAT                      = 0x10
	SO_ISNTTY                     = 0x800
	SO_ISTTY                      = 0x400
	SO_KEEPALIVE                  = 0x8
	SO_LINGER                     = 0x80
	SO_LOWAT                      = 0x20
	SO_MAC_EXEMPT                 = 0x100b
	SO_MAC_IMPLICIT               = 0x1016
	SO_MAXBLK                     = 0x100000
	SO_MAXPSZ                     = 0x8
	SO_MINPSZ                     = 0x4
	SO_MREADOFF                   = 0x80
	SO_MREADON                    = 0x40
	SO_NDELOFF                    = 0x200
	SO_NDELON                     = 0x100
	SO_NODELIM                    = 0x10000
	SO_OOBINLINE                  = 0x100
	SO_PROTOTYPE                  = 0x1009
	SO_RCVBUF                     = 0x1002
	SO_RCVLOWAT                   = 0x1004
	SO_RCVPSH                     = 0x100d
	SO_RCVTIMEO                   = 0x1006
	SO_READOPT                    = 0x1
	SO_RECVUCRED                  = 0x400
	SO_REUSEADDR                  = 0x4
	SO_SECATTR                    = 0x1011
	SO_SNDBUF                     = 0x1001
	SO_SNDLOWAT                   = 0x1003
	SO_SNDTIMEO                   = 0x1005
	SO_STRHOLD                    = 0x20000
	SO_TAIL                       = 0x200000
	SO_TIMESTAMP                  = 0x1013
	SO_TONSTOP                    = 0x2000
	SO_TOSTOP                     = 0x1000
	SO_TYPE                       = 0x1008
	SO_USELOOPBACK                = 0x40
	SO_VRRP                       = 0x1017
	SO_WROFF                      = 0x2
	S_ENFMT                       = 0x400
	S_IAMB                        = 0x1ff
	S_IEXEC                       = 0x40
	S_IFBLK                       = 0x6000
	S_IFCHR                       = 0x2000
	S_IFDIR                       = 0x4000
	S_IFDOOR                      = 0xd000
	S_IFIFO                       = 0x1000
	S_IFLNK                       = 0xa000
	S_IFMT                        = 0xf000
	S_IFNAM                       = 0x5000
	S_IFPORT                      = 0xe000
	S_IFREG                       = 0x8000
	S_IFSOCK                      = 0xc000
	S_INSEM                       = 0x1
	S_INSHD                       = 0x2
	S_IREAD                       = 0x100
	S_IRGRP                       = 0x20
	S_IROTH                       = 0x4
	S_IRUSR                       = 0x100
	S_IRWXG                       = 0x38
	S_IRWXO                       = 0x7
	S_IRWXU                       = 0x1c0
	S_ISGID                       = 0x400
	S_ISUID                       = 0x800
	S_ISVTX                       = 0x200
	S_IWGRP                       = 0x10
	S_IWOTH                       = 0x2
	S_IWRITE                      = 0x80
	S_IWUSR                       = 0x80
	S_IXGRP                       = 0x8
	S_IXOTH                       = 0x1
	S_IXUSR                       = 0x40
	TAB0                          = 0x0
	TAB1                          = 0x800
	TAB2                          = 0x1000
	TAB3                          = 0x1800
	TABDLY                        = 0x1800
	TCFLSH                        = 0x5407
	TCGETA                        = 0x5401
	TCGETS                        = 0x540d
	TCIFLUSH                      = 0x0
	TCIOFF                        = 0x2
	TCIOFLUSH                     = 0x2
	TCION                         = 0x3
	TCOFLUSH                      = 0x1
	TCOOFF                        = 0x0
	TCOON                         = 0x1
	TCP_ABORT_THRESHOLD           = 0x11
	TCP_ANONPRIVBIND              = 0x20
	TCP_CONGESTION                = 0x25
	TCP_CONN_ABORT_THRESHOLD      = 0x13
	TCP_CONN_NOTIFY_THRESHOLD     = 0x12
	TCP_CORK                      = 0x18
	TCP_EXCLBIND                  = 0x21
	TCP_INIT_CWND                 = 0x15
	TCP_KEEPALIVE                 = 0x8
	TCP_KEEPALIVE_ABORT_THRESHOLD = 0x17
	TCP_KEEPALIVE_THRESHOLD       = 0x16
	TCP_KEEPCNT                   = 0x23
	TCP_KEEPIDLE                  = 0x22
	TCP_KEEPINTVL                 = 0x24
	TCP_LINGER2                   = 0x1c
	TCP_MAXSEG                    = 0x2
	TCP_MSS                       = 0x218
	TCP_NODELAY                   = 0x1
	TCP_NOTIFY_THRESHOLD          = 0x10
	TCP_RECVDSTADDR               = 0x14
	TCP_RTO_INITIAL               = 0x19
	TCP_RTO_MAX                   = 0x1b
	TCP_RTO_MIN                   = 0x1a
	TCSAFLUSH                     = 0x5410
	TCSBRK                        = 0x5405
	TCSETA                        = 0x5402
	TCSETAF                       = 0x5404
	TCSETAW                       = 0x5403
	TCSETS                        = 0x540e
	TCSETSF                       = 0x5410
	TCSETSW                       = 0x540f
	TCXONC                        = 0x5406
	TIMER_ABSTIME                 = 0x1
	TIMER_RELTIME                 = 0x0
	TIOC                          = 0x5400
	TIOCCBRK                      = 0x747a
	TIOCCDTR                      = 0x7478
	TIOCCILOOP                    = 0x746c
	TIOCEXCL                      = 0x740d
	TIOCFLUSH                     = 0x7410
	TIOCGETC                      = 0x7412
	TIOCGETD                      = 0x7400
	TIOCGETP                      = 0x7408
	TIOCGLTC                      = 0x7474
	TIOCGPGRP                     = 0x7414
	TIOCGPPS                      = 0x547d
	TIOCGPPSEV                    = 0x547f
	TIOCGSID                      = 0x7416
	TIOCGSOFTCAR                  = 0x5469
	TIOCGWINSZ                    = 0x5468
	TIOCHPCL                      = 0x7402
	TIOCKBOF                      = 0x5409
	TIOCKBON                      = 0x5408
	TIOCLBIC                      = 0x747e
	TIOCLBIS                      = 0x747f
	TIOCLGET                      = 0x747c
	TIOCLSET                      = 0x747d
	TIOCMBIC                      = 0x741c
	TIOCMBIS                      = 0x741b
	TIOCMGET                      = 0x741d
	TIOCMSET                      = 0x741a
	TIOCM_CAR                     = 0x40
	TIOCM_CD                      = 0x40
	TIOCM_CTS                     = 0x20
	TIOCM_DSR                     = 0x100
	TIOCM_DTR                     = 0x2
	TIOCM_LE                      = 0x1
	TIOCM_RI                      = 0x80
	TIOCM_RNG                     = 0x80
	TIOCM_RTS                     = 0x4
	TIOCM_SR                      = 0x10
	TIOCM_ST                      = 0x8
	TIOCNOTTY                     = 0x7471
	TIOCNXCL                      = 0x740e
	TIOCOUTQ                      = 0x7473
	TIOCREMOTE                    = 0x741e
	TIOCSBRK                      = 0x747b
	TIOCSCTTY                     = 0x7484
	TIOCSDTR                      = 0x7479
	TIOCSETC                      = 0x7411
	TIOCSETD                      = 0x7401
	TIOCSETN                      = 0x740a
	TIOCSETP                      = 0x7409
	TIOCSIGNAL                    = 0x741f
	TIOCSILOOP                    = 0x746d
	TIOCSLTC                      = 0x7475
	TIOCSPGRP                     = 0x7415
	TIOCSPPS                      = 0x547e
	TIOCSSOFTCAR                  = 0x546a
	TIOCSTART                     = 0x746e
	TIOCSTI                       = 0x7417
	TIOCSTOP                      = 0x746f
	TIOCSWINSZ                    = 0x5467
	TOSTOP                        = 0x100
	UTIME_NOW                     = -0x1
	UTIME_OMIT                    = -0x2
	VCEOF                         = 0x8
	VCEOL                         = 0x9
	VDISCARD                      = 0xd
	VDSUSP                        = 0xb
	VEOF                          = 0x4
	VEOL                          = 0x5
	VEOL2                         = 0x6
	VERASE                        = 0x2
	VERASE2                       = 0x11
	VINTR                         = 0x0
	VKILL                         = 0x3
	VLNEXT                        = 0xf
	VMIN                          = 0x4
	VQUIT                         = 0x1
	VREPRINT                      = 0xc
	VSTART                        = 0x8
	VSTATUS                       = 0x10
	VSTOP                         = 0x9
	VSUSP                         = 0xa
	VSWTCH                        = 0x7
	VT0                           = 0x0
	VT1                           = 0x4000
	VTDLY                         = 0x4000
	VTIME                         = 0x5
	VWERASE                       = 0xe
	WCONTFLG                      = 0xffff
	WCONTINUED                    = 0x8
	WCOREFLG                      = 0x80
	WEXITED                       = 0x1
	WNOHANG                       = 0x40
	WNOWAIT                       = 0x80
	WOPTMASK                      = 0xcf
	WRAP                          = 0x20000
	WSIGMASK                      = 0x7f
	WSTOPFLG                      = 0x7f
	WSTOPPED                      = 0x4
	WTRAPPED                      = 0x2
	WUNTRACED                     = 0x4
	XCASE                         = 0x4
	XTABS                         = 0x1800
)

// Errors
const (
	E2BIG           = syscall.Errno(0x7)
	EACCES          = syscall.Errno(0xd)
	EADDRINUSE      = syscall.Errno(0x7d)
	EADDRNOTAVAIL   = syscall.Errno(0x7e)
	EADV            = syscall.Errno(0x44)
	EAFNOSUPPORT    = syscall.Errno(0x7c)
	EAGAIN          = syscall.Errno(0xb)
	EALREADY        = syscall.Errno(0x95)
	EBADE           = syscall.Errno(0x32)
	EBADF           = syscall.Errno(0x9)
	EBADFD          = syscall.Errno(0x51)
	EBADMSG         = syscall.Errno(0x4d)
	EBADR           = syscall.Errno(0x33)
	EBADRQC         = syscall.Errno(0x36)
	EBADSLT         = syscall.Errno(0x37)
	EBFONT          = syscall.Errno(0x39)
	EBUSY           = syscall.Errno(0x10)
	ECANCELED       = syscall.Errno(0x2f)
	ECHILD          = syscall.Errno(0xa)
	ECHRNG          = syscall.Errno(0x25)
	ECOMM           = syscall.Errno(0x46)
	ECONNABORTED    = syscall.Errno(0x82)
	ECONNREFUSED    = syscall.Errno(0x92)
	ECONNRESET      = syscall.Errno(0x83)
	EDEADLK         = syscall.Errno(0x2d)
	EDEADLOCK       = syscall.Errno(0x38)
	EDESTADDRREQ    = syscall.Errno(0x60)
	EDOM            = syscall.Errno(0x21)
	EDQUOT          = syscall.Errno(0x31)
	EEXIST          = syscall.Errno(0x11)
	EFAULT          = syscall.Errno(0xe)
	EFBIG           = syscall.Errno(0x1b)
	EHOSTDOWN       = syscall.Errno(0x93)
	EHOSTUNREACH    = syscall.Errno(0x94)
	EIDRM           = syscall.Errno(0x24)
	EILSEQ          = syscall.Errno(0x58)
	EINPROGRESS     = syscall.Errno(0x96)
	EINTR           = syscall.Errno(0x4)
	EINVAL          = syscall.Errno(0x16)
	EIO             = syscall.Errno(0x5)
	EISCONN         = syscall.Errno(0x85)
	EISDIR          = syscall.Errno(0x15)
	EL2HLT          = syscall.Errno(0x2c)
	EL2NSYNC        = syscall.Errno(0x26)
	EL3HLT          = syscall.Errno(0x27)
	EL3RST          = syscall.Errno(0x28)
	ELIBACC         = syscall.Errno(0x53)
	ELIBBAD         = syscall.Errno(0x54)
	ELIBEXEC        = syscall.Errno(0x57)
	ELIBMAX         = syscall.Errno(0x56)
	ELIBSCN         = syscall.Errno(0x55)
	ELNRNG          = syscall.Errno(0x29)
	ELOCKUNMAPPED   = syscall.Errno(0x48)
	ELOOP           = syscall.Errno(0x5a)
	EMFILE          = syscall.Errno(0x18)
	EMLINK          = syscall.Errno(0x1f)
	EMSGSIZE        = syscall.Errno(0x61)
	EMULTIHOP       = syscall.Errno(0x4a)
	ENAMETOOLONG    = syscall.Errno(0x4e)
	ENETDOWN        = syscall.Errno(0x7f)
	ENETRESET       = syscall.Errno(0x81)
	ENETUNREACH     = syscall.Errno(0x80)
	ENFILE          = syscall.Errno(0x17)
	ENOANO          = syscall.Errno(0x35)
	ENOBUFS         = syscall.Errno(0x84)
	ENOCSI          = syscall.Errno(0x2b)
	ENODATA         = syscall.Errno(0x3d)
	ENODEV          = syscall.Errno(0x13)
	ENOENT          = syscall.Errno(0x2)
	ENOEXEC         = syscall.Errno(0x8)
	ENOLCK          = syscall.Errno(0x2e)
	ENOLINK         = syscall.Errno(0x43)
	ENOMEM          = syscall.Errno(0xc)
	ENOMSG          = syscall.Errno(0x23)
	ENONET          = syscall.Errno(0x40)
	ENOPKG          = syscall.Errno(0x41)
	ENOPROTOOPT     = syscall.Errno(0x63)
	ENOSPC          = syscall.Errno(0x1c)
	ENOSR           = syscall.Errno(0x3f)
	ENOSTR          = syscall.Errno(0x3c)
	ENOSYS          = syscall.Errno(0x59)
	ENOTACTIVE      = syscall.Errno(0x49)
	ENOTBLK         = syscall.Errno(0xf)
	ENOTCONN        = syscall.Errno(0x86)
	ENOTDIR         = syscall.Errno(0x14)
	ENOTEMPTY       = syscall.Errno(0x5d)
	ENOTRECOVERABLE = syscall.Errno(0x3b)
	ENOTSOCK        = syscall.Errno(0x5f)
	ENOTSUP         = syscall.Errno(0x30)
	ENOTTY          = syscall.Errno(0x19)
	ENOTUNIQ        = syscall.Errno(0x50)
	ENXIO           = syscall.Errno(0x6)
	EOPNOTSUPP      = syscall.Errno(0x7a)
	EOVERFLOW       = syscall.Errno(0x4f)
	EOWNERDEAD      = syscall.Errno(0x3a)
	EPERM           = syscall.Errno(0x1)
	EPFNOSUPPORT    = syscall.Errno(0x7b)
	EPIPE           = syscall.Errno(0x20)
	EPROTO          = syscall.Errno(0x47)
	EPROTONOSUPPORT = syscall.Errno(0x78)
	EPROTOTYPE      = syscall.Errno(0x62)
	ERANGE          = syscall.Errno(0x22)
	EREMCHG         = syscall.Errno(0x52)
	EREMOTE         = syscall.Errno(0x42)
	ERESTART        = syscall.Errno(0x5b)
	EROFS           = syscall.Errno(0x1e)
	ESHUTDOWN       = syscall.Errno(0x8f)
	ESOCKTNOSUPPORT = syscall.Errno(0x79)
	ESPIPE          = syscall.Errno(0x1d)
	ESRCH           = syscall.Errno(0x3)
	ESRMNT          = syscall.Errno(0x45)
	ESTALE          = syscall.Errno(0x97)
	ESTRPIPE        = syscall.Errno(0x5c)
	ETIME           = syscall.Errno(0x3e)
	ETIMEDOUT       = syscall.Errno(0x91)
	ETOOMANYREFS    = syscall.Errno(0x90)
	ETXTBSY         = syscall.Errno(0x1a)
	EUNATCH         = syscall.Errno(0x2a)
	EUSERS          = syscall.Errno(0x5e)
	EWOULDBLOCK     = syscall.Errno(0xb)
	EXDEV           = syscall.Errno(0x12)
	EXFULL          = syscall.Errno(0x34)
)

// Signals
const (
	SIGABRT    = syscall.Signal(0x6)
	SIGALRM    = syscall.Signal(0xe)
	SIGBUS     = syscall.Signal(0xa)
	SIGCANCEL  = syscall.Signal(0x24)
	SIGCHLD    = syscall.Signal(0x12)
	SIGCLD     = syscall.Signal(0x12)
	SIGCONT    = syscall.Signal(0x19)
	SIGEMT     = syscall.Signal(0x7)
	SIGFPE     = syscall.Signal(0x8)
	SIGFREEZE  = syscall.Signal(0x22)
	SIGHUP     = syscall.Signal(0x1)
	SIGILL     = syscall.Signal(0x4)
	SIGINFO    = syscall.Signal(0x29)
	SIGINT     = syscall.Signal(0x2)
	SIGIO      = syscall.Signal(0x16)
	SIGIOT     = syscall.Signal(0x6)
	SIGJVM1    = syscall.Signal(0x27)
	SIGJVM2    = syscall.Signal(0x28)
	SIGKILL    = syscall.Signal(0x9)
	SIGLOST    = syscall.Signal(0x25)
	SIGLWP     = syscall.Signal(0x21)
	SIGPIPE    = syscall.Signal(0xd)
	SIGPOLL    = syscall.Signal(0x16)
	SIGPROF    = syscall.Signal(0x1d)
	SIGPWR     = syscall.Signal(0x13)
	SIGQUIT    = syscall.Signal(0x3)
	SIGSEGV    = syscall.Signal(0xb)
	SIGSTOP    = syscall.Signal(0x17)
	SIGSYS     = syscall.Signal(0xc)
	SIGTERM    = syscall.Signal(0xf)
	SIGTHAW    = syscall.Signal(0x23)
	SIGTRAP    = syscall.Signal(0x5)
	SIGTSTP    = syscall.Signal(0x18)
	SIGTTIN    = syscall.Signal(0x1a)
	SIGTTOU    = syscall.Signal(0x1b)
	SIGURG     = syscall.Signal(0x15)
	SIGUSR1    = syscall.Signal(0x10)
	SIGUSR2    = syscall.Signal(0x11)
	SIGVTALRM  = syscall.Signal(0x1c)
	SIGWAITING = syscall.Signal(0x20)
	SIGWINCH   = syscall.Signal(0x14)
	SIGXCPU    = syscall.Signal(0x1e)
	SIGXFSZ    = syscall.Signal(0x1f)
	SIGXRES    = syscall.Signal(0x26)
)

// Error table
var errorList = [...]struct {
	num  syscall.Errno
	name string
	desc string
}{
	{1, "EPERM", "not owner"},
	{2, "ENOENT", "no such file or directory"},
	{3, "ESRCH", "no such process"},
	{4, "EINTR", "interrupted system call"},
	{5, "EIO", "I/O error"},
	{6, "ENXIO", "no such device or address"},
	{7, "E2BIG", "arg list too long"},
	{8, "ENOEXEC", "exec format error"},
	{9, "EBADF", "bad file number"},
	{10, "ECHILD", "no child processes"},
	{11, "EAGAIN", "resource temporarily unavailable"},
	{12, "ENOMEM", "not enough space"},
	{13, "EACCES", "permission denied"},
	{14, "EFAULT", "bad address"},
	{15, "ENOTBLK", "block device required"},
	{16, "EBUSY", "device busy"},
	{17, "EEXIST", "file exists"},
	{18, "EXDEV", "cross-device link"},
	{19, "ENODEV", "no such device"},
	{20, "ENOTDIR", "not a directory"},
	{21, "EISDIR", "is a directory"},
	{22, "EINVAL", "invalid argument"},
	{23, "ENFILE", "file table overflow"},
	{24, "EMFILE", "too many open files"},
	{25, "ENOTTY", "inappropriate ioctl for device"},
	{26, "ETXTBSY", "text file busy"},
	{27, "EFBIG", "file too large"},
	{28, "ENOSPC", "no space left on device"},
	{29, "ESPIPE", "illegal seek"},
	{30, "EROFS", "read-only file system"},
	{31, "EMLINK", "too many links"},
	{32, "EPIPE", "broken pipe"},
	{33, "EDOM", "argument out of domain"},
	{34, "ERANGE", "result too large"},
	{35, "ENOMSG", "no message of desired type"},
	{36, "EIDRM", "identifier removed"},
	{37, "ECHRNG", "channel number out of range"},
	{38, "EL2NSYNC", "level 2 not synchronized"},
	{39, "EL3HLT", "level 3 halted"},
	{40, "EL3RST", "level 3 reset"},
	{41, "ELNRNG", "link number out of range"},
	{42, "EUNATCH", "protocol driver not attached"},
	{43, "ENOCSI", "no CSI structure available"},
	{44, "EL2HLT", "level 2 halted"},
	{45, "EDEADLK", "deadlock situation detected/avoided"},
	{46, "ENOLCK", "no record locks available"},
	{47, "ECANCELED", "operation canceled"},
	{48, "ENOTSUP", "operation not supported"},
	{49, "EDQUOT", "disc quota exceeded"},
	{50, "EBADE", "bad exchange descriptor"},
	{51, "EBADR", "bad request descriptor"},
	{52, "EXFULL", "message tables full"},
	{53, "ENOANO", "anode table overflow"},
	{54, "EBADRQC", "bad request code"},
	{55, "EBADSLT", "invalid slot"},
	{56, "EDEADLOCK", "file locking deadlock"},
	{57, "EBFONT", "bad font file format"},
	{58, "EOWNERDEAD", "owner of the lock died"},
	{59, "ENOTRECOVERABLE", "lock is not recoverable"},
	{60, "ENOSTR", "not a stream device"},
	{61, "ENODATA", "no data available"},
	{62, "ETIME", "timer expired"},
	{63, "ENOSR", "out of stream resources"},
	{64, "ENONET", "machine is not on the network"},
	{65, "ENOPKG", "package not installed"},
	{66, "EREMOTE", "object is remote"},
	{67, "ENOLINK", "link has been severed"},
	{68, "EADV", "advertise error"},
	{69, "ESRMNT", "srmount error"},
	{70, "ECOMM", "communication error on send"},
	{71, "EPROTO", "protocol error"},
	{72, "ELOCKUNMAPPED", "locked lock was unmapped "},
	{73, "ENOTACTIVE", "facility is not active"},
	{74, "EMULTIHOP", "multihop attempted"},
	{77, "EBADMSG", "not a data message"},
	{78, "ENAMETOOLONG", "file name too long"},
	{79, "EOVERFLOW", "value too large for defined data type"},
	{80, "ENOTUNIQ", "name not unique on network"},
	{81, "EBADFD", "file descriptor in bad state"},
	{82, "EREMCHG", "remote address changed"},
	{83, "ELIBACC", "can not access a needed shared library"},
	{84, "ELIBBAD", "accessing a corrupted shared library"},
	{85, "ELIBSCN", ".lib section in a.out corrupted"},
	{86, "ELIBMAX", "attempting to link in more shared libraries than system limit"},
	{87, "ELIBEXEC", "can not exec a shared library directly"},
	{88, "EILSEQ", "illegal byte sequence"},
	{89, "ENOSYS", "operation not applicable"},
	{90, "ELOOP", "number of symbolic links encountered during path name traversal exceeds MAXSYMLINKS"},
	{91, "ERESTART", "error 91"},
	{92, "ESTRPIPE", "error 92"},
	{93, "ENOTEMPTY", "directory not empty"},
	{94, "EUSERS", "too many users"},
	{95, "ENOTSOCK", "socket operation on non-socket"},
	{96, "EDESTADDRREQ", "destination address required"},
	{97, "EMSGSIZE", "message too long"},
	{98, "EPROTOTYPE", "protocol wrong type for socket"},
	{99, "ENOPROTOOPT", "option not supported by protocol"},
	{120, "EPROTONOSUPPORT", "protocol not supported"},
	{121, "ESOCKTNOSUPPORT", "socket type not supported"},
	{122, "EOPNOTSUPP", "operation not supported on transport endpoint"},
	{123, "EPFNOSUPPORT", "protocol family not supported"},
	{124, "EAFNOSUPPORT", "address family not supported by protocol family"},
	{125, "EADDRINUSE", "address already in use"},
	{126, "EADDRNOTAVAIL", "cannot assign requested address"},
	{127, "ENETDOWN", "network is down"},
	{128, "ENETUNREACH", "network is unreachable"},
	{129, "ENETRESET", "network dropped connection because of reset"},
	{130, "ECONNABORTED", "software caused connection abort"},
	{131, "ECONNRESET", "connection reset by peer"},
	{132, "ENOBUFS", "no buffer space available"},
	{133, "EISCONN", "transport endpoint is already connected"},
	{134, "ENOTCONN", "transport endpoint is not connected"},
	{143, "ESHUTDOWN", "cannot send after socket shutdown"},
	{144, "ETOOMANYREFS", "too many references: cannot splice"},
	{145, "ETIMEDOUT", "connection timed out"},
	{146, "ECONNREFUSED", "connection refused"},
	{147, "EHOSTDOWN", "host is down"},
	{148, "EHOSTUNREACH", "no route to host"},
	{149, "EALREADY", "operation already in progress"},
	{150, "EINPROGRESS", "operation now in progress"},
	{151, "ESTALE", "stale NFS file handle"},
}

// Signal table
var signalList = [...]struct {
	num  syscall.Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGQUIT", "quit"},
	{4, "SIGILL", "illegal Instruction"},
	{5, "SIGTRAP", "trace/Breakpoint Trap"},
	{6, "SIGABRT", "abort"},
	{7, "SIGEMT", "emulation Trap"},
	{8, "SIGFPE", "arithmetic Exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus Error"},
	{11, "SIGSEGV", "segmentation Fault"},
	{12, "SIGSYS", "bad System Call"},
	{13, "SIGPIPE", "broken Pipe"},
	{14, "SIGALRM", "alarm Clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGUSR1", "user Signal 1"},
	{17, "SIGUSR2", "user Signal 2"},
	{18, "SIGCHLD", "child Status Changed"},
	{19, "SIGPWR", "power-Fail/Restart"},
	{20, "SIGWINCH", "window Size Change"},
	{21, "SIGURG", "urgent Socket Condition"},
	{22, "SIGIO", "pollable Event"},
	{23, "SIGSTOP", "stopped (signal)"},
	{24, "SIGTSTP", "stopped (user)"},
	{25, "SIGCONT", "continued"},
	{26, "SIGTTIN", "stopped (tty input)"},
	{27, "SIGTTOU", "stopped (tty output)"},
	{28, "SIGVTALRM", "virtual Timer Expired"},
	{29, "SIGPROF", "profiling Timer Expired"},
	{30, "SIGXCPU", "cpu Limit Exceeded"},
	{31, "SIGXFSZ", "file Size Limit Exceeded"},
	{32, "SIGWAITING", "no runnable lwp"},
	{33, "SIGLWP", "inter-lwp signal"},
	{34, "SIGFREEZE", "checkpoint Freeze"},
	{35, "SIGTHAW", "checkpoint Thaw"},
	{36, "SIGCANCEL", "thread Cancellation"},
	{37, "SIGLOST", "resource Lost"},
	{38, "SIGXRES", "resource Control Exceeded"},
	{39, "SIGJVM1", "reserved for JVM 1"},
	{40, "SIGJVM2", "reserved for JVM 2"},
	{41, "SIGINFO", "information Request"},
}
07070100000E46000081A4000000000000000000000001645E367C000089F6000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build zos && s390x
// +build zos,s390x

// Hand edited based on zerrors_linux_s390x.go
// TODO: auto-generate.

package unix

const (
	BRKINT                          = 0x0001
	CLOCK_MONOTONIC                 = 0x1
	CLOCK_PROCESS_CPUTIME_ID        = 0x2
	CLOCK_REALTIME                  = 0x0
	CLOCK_THREAD_CPUTIME_ID         = 0x3
	CS8                             = 0x0030
	CSIZE                           = 0x0030
	ECHO                            = 0x00000008
	ECHONL                          = 0x00000001
	FD_CLOEXEC                      = 0x01
	FD_CLOFORK                      = 0x02
	FNDELAY                         = 0x04
	F_CLOSFD                        = 9
	F_CONTROL_CVT                   = 13
	F_DUPFD                         = 0
	F_DUPFD2                        = 8
	F_GETFD                         = 1
	F_GETFL                         = 259
	F_GETLK                         = 5
	F_GETOWN                        = 10
	F_OK                            = 0x0
	F_RDLCK                         = 1
	F_SETFD                         = 2
	F_SETFL                         = 4
	F_SETLK                         = 6
	F_SETLKW                        = 7
	F_SETOWN                        = 11
	F_SETTAG                        = 12
	F_UNLCK                         = 3
	F_WRLCK                         = 2
	FSTYPE_ZFS                      = 0xe9 //"Z"
	FSTYPE_HFS                      = 0xc8 //"H"
	FSTYPE_NFS                      = 0xd5 //"N"
	FSTYPE_TFS                      = 0xe3 //"T"
	FSTYPE_AUTOMOUNT                = 0xc1 //"A"
	IP6F_MORE_FRAG                  = 0x0001
	IP6F_OFF_MASK                   = 0xfff8
	IP6F_RESERVED_MASK              = 0x0006
	IP6OPT_JUMBO                    = 0xc2
	IP6OPT_JUMBO_LEN                = 6
	IP6OPT_MUTABLE                  = 0x20
	IP6OPT_NSAP_ADDR                = 0xc3
	IP6OPT_PAD1                     = 0x00
	IP6OPT_PADN                     = 0x01
	IP6OPT_ROUTER_ALERT             = 0x05
	IP6OPT_TUNNEL_LIMIT             = 0x04
	IP6OPT_TYPE_DISCARD             = 0x40
	IP6OPT_TYPE_FORCEICMP           = 0x80
	IP6OPT_TYPE_ICMP                = 0xc0
	IP6OPT_TYPE_SKIP                = 0x00
	IP6_ALERT_AN                    = 0x0002
	IP6_ALERT_MLD                   = 0x0000
	IP6_ALERT_RSVP                  = 0x0001
	IPPORT_RESERVED                 = 1024
	IPPORT_USERRESERVED             = 5000
	IPPROTO_AH                      = 51
	SOL_AH                          = 51
	IPPROTO_DSTOPTS                 = 60
	SOL_DSTOPTS                     = 60
	IPPROTO_EGP                     = 8
	SOL_EGP                         = 8
	IPPROTO_ESP                     = 50
	SOL_ESP                         = 50
	IPPROTO_FRAGMENT                = 44
	SOL_FRAGMENT                    = 44
	IPPROTO_GGP                     = 2
	SOL_GGP                         = 2
	IPPROTO_HOPOPTS                 = 0
	SOL_HOPOPTS                     = 0
	IPPROTO_ICMP                    = 1
	SOL_ICMP                        = 1
	IPPROTO_ICMPV6                  = 58
	SOL_ICMPV6                      = 58
	IPPROTO_IDP                     = 22
	SOL_IDP                         = 22
	IPPROTO_IP                      = 0
	SOL_IP                          = 0
	IPPROTO_IPV6                    = 41
	SOL_IPV6                        = 41
	IPPROTO_MAX                     = 256
	SOL_MAX                         = 256
	IPPROTO_NONE                    = 59
	SOL_NONE                        = 59
	IPPROTO_PUP                     = 12
	SOL_PUP                         = 12
	IPPROTO_RAW                     = 255
	SOL_RAW                         = 255
	IPPROTO_ROUTING                 = 43
	SOL_ROUTING                     = 43
	IPPROTO_TCP                     = 6
	SOL_TCP                         = 6
	IPPROTO_UDP                     = 17
	SOL_UDP                         = 17
	IPV6_ADDR_PREFERENCES           = 32
	IPV6_CHECKSUM                   = 19
	IPV6_DONTFRAG                   = 29
	IPV6_DSTOPTS                    = 23
	IPV6_HOPLIMIT                   = 11
	IPV6_HOPOPTS                    = 22
	IPV6_JOIN_GROUP                 = 5
	IPV6_LEAVE_GROUP                = 6
	IPV6_MULTICAST_HOPS             = 9
	IPV6_MULTICAST_IF               = 7
	IPV6_MULTICAST_LOOP             = 4
	IPV6_NEXTHOP                    = 20
	IPV6_PATHMTU                    = 12
	IPV6_PKTINFO                    = 13
	IPV6_PREFER_SRC_CGA             = 0x10
	IPV6_PREFER_SRC_COA             = 0x02
	IPV6_PREFER_SRC_HOME            = 0x01
	IPV6_PREFER_SRC_NONCGA          = 0x20
	IPV6_PREFER_SRC_PUBLIC          = 0x08
	IPV6_PREFER_SRC_TMP             = 0x04
	IPV6_RECVDSTOPTS                = 28
	IPV6_RECVHOPLIMIT               = 14
	IPV6_RECVHOPOPTS                = 26
	IPV6_RECVPATHMTU                = 16
	IPV6_RECVPKTINFO                = 15
	IPV6_RECVRTHDR                  = 25
	IPV6_RECVTCLASS                 = 31
	IPV6_RTHDR                      = 21
	IPV6_RTHDRDSTOPTS               = 24
	IPV6_RTHDR_TYPE_0               = 0
	IPV6_TCLASS                     = 30
	IPV6_UNICAST_HOPS               = 3
	IPV6_USE_MIN_MTU                = 18
	IPV6_V6ONLY                     = 10
	IP_ADD_MEMBERSHIP               = 5
	IP_ADD_SOURCE_MEMBERSHIP        = 12
	IP_BLOCK_SOURCE                 = 10
	IP_DEFAULT_MULTICAST_LOOP       = 1
	IP_DEFAULT_MULTICAST_TTL        = 1
	IP_DROP_MEMBERSHIP              = 6
	IP_DROP_SOURCE_MEMBERSHIP       = 13
	IP_MAX_MEMBERSHIPS              = 20
	IP_MULTICAST_IF                 = 7
	IP_MULTICAST_LOOP               = 4
	IP_MULTICAST_TTL                = 3
	IP_OPTIONS                      = 1
	IP_PKTINFO                      = 101
	IP_RECVPKTINFO                  = 102
	IP_TOS                          = 2
	IP_TTL                          = 3
	IP_UNBLOCK_SOURCE               = 11
	ICANON                          = 0x0010
	ICMP6_FILTER                    = 0x26
	ICRNL                           = 0x0002
	IEXTEN                          = 0x0020
	IGNBRK                          = 0x0004
	IGNCR                           = 0x0008
	INLCR                           = 0x0020
	ISIG                            = 0x0040
	ISTRIP                          = 0x0080
	IXON                            = 0x0200
	IXOFF                           = 0x0100
	LOCK_SH                         = 0x1 // Not exist on zOS
	LOCK_EX                         = 0x2 // Not exist on zOS
	LOCK_NB                         = 0x4 // Not exist on zOS
	LOCK_UN                         = 0x8 // Not exist on zOS
	POLLIN                          = 0x0003
	POLLOUT                         = 0x0004
	POLLPRI                         = 0x0010
	POLLERR                         = 0x0020
	POLLHUP                         = 0x0040
	POLLNVAL                        = 0x0080
	PROT_READ                       = 0x1 // mmap - page can be read
	PROT_WRITE                      = 0x2 // page can be written
	PROT_NONE                       = 0x4 // can't be accessed
	PROT_EXEC                       = 0x8 // can be executed
	MAP_PRIVATE                     = 0x1 // changes are private
	MAP_SHARED                      = 0x2 // changes are shared
	MAP_FIXED                       = 0x4 // place exactly
	MCAST_JOIN_GROUP                = 40
	MCAST_LEAVE_GROUP               = 41
	MCAST_JOIN_SOURCE_GROUP         = 42
	MCAST_LEAVE_SOURCE_GROUP        = 43
	MCAST_BLOCK_SOURCE              = 44
	MCAST_UNBLOCK_SOURCE            = 45
	MS_SYNC                         = 0x1 // msync - synchronous writes
	MS_ASYNC                        = 0x2 // asynchronous writes
	MS_INVALIDATE                   = 0x4 // invalidate mappings
	MTM_RDONLY                      = 0x80000000
	MTM_RDWR                        = 0x40000000
	MTM_UMOUNT                      = 0x10000000
	MTM_IMMED                       = 0x08000000
	MTM_FORCE                       = 0x04000000
	MTM_DRAIN                       = 0x02000000
	MTM_RESET                       = 0x01000000
	MTM_SAMEMODE                    = 0x00100000
	MTM_UNQSEFORCE                  = 0x00040000
	MTM_NOSUID                      = 0x00000400
	MTM_SYNCHONLY                   = 0x00000200
	MTM_REMOUNT                     = 0x00000100
	MTM_NOSECURITY                  = 0x00000080
	NFDBITS                         = 0x20
	O_ACCMODE                       = 0x03
	O_APPEND                        = 0x08
	O_ASYNCSIG                      = 0x0200
	O_CREAT                         = 0x80
	O_EXCL                          = 0x40
	O_GETFL                         = 0x0F
	O_LARGEFILE                     = 0x0400
	O_NONBLOCK                      = 0x04
	O_RDONLY                        = 0x02
	O_RDWR                          = 0x03
	O_SYNC                          = 0x0100
	O_TRUNC                         = 0x10
	O_WRONLY                        = 0x01
	O_NOCTTY                        = 0x20
	OPOST                           = 0x0001
	ONLCR                           = 0x0004
	PARENB                          = 0x0200
	PARMRK                          = 0x0400
	QUERYCVT                        = 3
	RUSAGE_CHILDREN                 = -0x1
	RUSAGE_SELF                     = 0x0 // RUSAGE_THREAD unsupported on z/OS
	SEEK_CUR                        = 1
	SEEK_END                        = 2
	SEEK_SET                        = 0
	SETAUTOCVTALL                   = 5
	SETAUTOCVTON                    = 2
	SETCVTALL                       = 4
	SETCVTOFF                       = 0
	SETCVTON                        = 1
	AF_APPLETALK                    = 16
	AF_CCITT                        = 10
	AF_CHAOS                        = 5
	AF_DATAKIT                      = 9
	AF_DLI                          = 13
	AF_ECMA                         = 8
	AF_HYLINK                       = 15
	AF_IMPLINK                      = 3
	AF_INET                         = 2
	AF_INET6                        = 19
	AF_INTF                         = 20
	AF_IUCV                         = 17
	AF_LAT                          = 14
	AF_LINK                         = 18
	AF_MAX                          = 30
	AF_NBS                          = 7
	AF_NDD                          = 23
	AF_NETWARE                      = 22
	AF_NS                           = 6
	AF_PUP                          = 4
	AF_RIF                          = 21
	AF_ROUTE                        = 20
	AF_SNA                          = 11
	AF_UNIX                         = 1
	AF_UNSPEC                       = 0
	IBMTCP_IMAGE                    = 1
	MSG_ACK_EXPECTED                = 0x10
	MSG_ACK_GEN                     = 0x40
	MSG_ACK_TIMEOUT                 = 0x20
	MSG_CONNTERM                    = 0x80
	MSG_CTRUNC                      = 0x20
	MSG_DONTROUTE                   = 0x4
	MSG_EOF                         = 0x8000
	MSG_EOR                         = 0x8
	MSG_MAXIOVLEN                   = 16
	MSG_NONBLOCK                    = 0x4000
	MSG_OOB                         = 0x1
	MSG_PEEK                        = 0x2
	MSG_TRUNC                       = 0x10
	MSG_WAITALL                     = 0x40
	PRIO_PROCESS                    = 1
	PRIO_PGRP                       = 2
	PRIO_USER                       = 3
	RLIMIT_CPU                      = 0
	RLIMIT_FSIZE                    = 1
	RLIMIT_DATA                     = 2
	RLIMIT_STACK                    = 3
	RLIMIT_CORE                     = 4
	RLIMIT_AS                       = 5
	RLIMIT_NOFILE                   = 6
	RLIMIT_MEMLIMIT                 = 7
	RLIM_INFINITY                   = 2147483647
	SCM_RIGHTS                      = 0x01
	SF_CLOSE                        = 0x00000002
	SF_REUSE                        = 0x00000001
	SHUT_RD                         = 0
	SHUT_RDWR                       = 2
	SHUT_WR                         = 1
	SOCK_CONN_DGRAM                 = 6
	SOCK_DGRAM                      = 2
	SOCK_RAW                        = 3
	SOCK_RDM                        = 4
	SOCK_SEQPACKET                  = 5
	SOCK_STREAM                     = 1
	SOL_SOCKET                      = 0xffff
	SOMAXCONN                       = 10
	SO_ACCEPTCONN                   = 0x0002
	SO_ACCEPTECONNABORTED           = 0x0006
	SO_ACKNOW                       = 0x7700
	SO_BROADCAST                    = 0x0020
	SO_BULKMODE                     = 0x8000
	SO_CKSUMRECV                    = 0x0800
	SO_CLOSE                        = 0x01
	SO_CLUSTERCONNTYPE              = 0x00004001
	SO_CLUSTERCONNTYPE_INTERNAL     = 8
	SO_CLUSTERCONNTYPE_NOCONN       = 0
	SO_CLUSTERCONNTYPE_NONE         = 1
	SO_CLUSTERCONNTYPE_SAME_CLUSTER = 2
	SO_CLUSTERCONNTYPE_SAME_IMAGE   = 4
	SO_DEBUG                        = 0x0001
	SO_DONTROUTE                    = 0x0010
	SO_ERROR                        = 0x1007
	SO_IGNOREINCOMINGPUSH           = 0x1
	SO_IGNORESOURCEVIPA             = 0x0002
	SO_KEEPALIVE                    = 0x0008
	SO_LINGER                       = 0x0080
	SO_NONBLOCKLOCAL                = 0x8001
	SO_NOREUSEADDR                  = 0x1000
	SO_OOBINLINE                    = 0x0100
	SO_OPTACK                       = 0x8004
	SO_OPTMSS                       = 0x8003
	SO_RCVBUF                       = 0x1002
	SO_RCVLOWAT                     = 0x1004
	SO_RCVTIMEO                     = 0x1006
	SO_REUSEADDR                    = 0x0004
	SO_REUSEPORT                    = 0x0200
	SO_SECINFO                      = 0x00004002
	SO_SET                          = 0x0200
	SO_SNDBUF                       = 0x1001
	SO_SNDLOWAT                     = 0x1003
	SO_SNDTIMEO                     = 0x1005
	SO_TYPE                         = 0x1008
	SO_UNSET                        = 0x0400
	SO_USELOOPBACK                  = 0x0040
	SO_USE_IFBUFS                   = 0x0400
	S_ISUID                         = 0x0800
	S_ISGID                         = 0x0400
	S_ISVTX                         = 0x0200
	S_IRUSR                         = 0x0100
	S_IWUSR                         = 0x0080
	S_IXUSR                         = 0x0040
	S_IRWXU                         = 0x01C0
	S_IRGRP                         = 0x0020
	S_IWGRP                         = 0x0010
	S_IXGRP                         = 0x0008
	S_IRWXG                         = 0x0038
	S_IROTH                         = 0x0004
	S_IWOTH                         = 0x0002
	S_IXOTH                         = 0x0001
	S_IRWXO                         = 0x0007
	S_IREAD                         = S_IRUSR
	S_IWRITE                        = S_IWUSR
	S_IEXEC                         = S_IXUSR
	S_IFDIR                         = 0x01000000
	S_IFCHR                         = 0x02000000
	S_IFREG                         = 0x03000000
	S_IFFIFO                        = 0x04000000
	S_IFIFO                         = 0x04000000
	S_IFLNK                         = 0x05000000
	S_IFBLK                         = 0x06000000
	S_IFSOCK                        = 0x07000000
	S_IFVMEXTL                      = 0xFE000000
	S_IFVMEXTL_EXEC                 = 0x00010000
	S_IFVMEXTL_DATA                 = 0x00020000
	S_IFVMEXTL_MEL                  = 0x00030000
	S_IFEXTL                        = 0x00000001
	S_IFPROGCTL                     = 0x00000002
	S_IFAPFCTL                      = 0x00000004
	S_IFNOSHARE                     = 0x00000008
	S_IFSHARELIB                    = 0x00000010
	S_IFMT                          = 0xFF000000
	S_IFMST                         = 0x00FF0000
	TCP_KEEPALIVE                   = 0x8
	TCP_NODELAY                     = 0x1
	TCP_INFO                        = 0xb
	TCP_USER_TIMEOUT                = 0x1
	TIOCGWINSZ                      = 0x4008a368
	TIOCSWINSZ                      = 0x8008a367
	TIOCSBRK                        = 0x2000a77b
	TIOCCBRK                        = 0x2000a77a
	TIOCSTI                         = 0x8001a772
	TIOCGPGRP                       = 0x4004a777 // _IOR(167, 119, int)
	TCSANOW                         = 0
	TCSETS                          = 0 // equivalent to TCSANOW for tcsetattr
	TCSADRAIN                       = 1
	TCSETSW                         = 1 // equivalent to TCSADRAIN for tcsetattr
	TCSAFLUSH                       = 2
	TCSETSF                         = 2 // equivalent to TCSAFLUSH for tcsetattr
	TCGETS                          = 3 // not defined in ioctl.h -- zos golang only
	TCIFLUSH                        = 0
	TCOFLUSH                        = 1
	TCIOFLUSH                       = 2
	TCOOFF                          = 0
	TCOON                           = 1
	TCIOFF                          = 2
	TCION                           = 3
	TIOCSPGRP                       = 0x8004a776
	TIOCNOTTY                       = 0x2000a771
	TIOCEXCL                        = 0x2000a70d
	TIOCNXCL                        = 0x2000a70e
	TIOCGETD                        = 0x4004a700
	TIOCSETD                        = 0x8004a701
	TIOCPKT                         = 0x8004a770
	TIOCSTOP                        = 0x2000a76f
	TIOCSTART                       = 0x2000a76e
	TIOCUCNTL                       = 0x8004a766
	TIOCREMOTE                      = 0x8004a769
	TIOCMGET                        = 0x4004a76a
	TIOCMSET                        = 0x8004a76d
	TIOCMBIC                        = 0x8004a76b
	TIOCMBIS                        = 0x8004a76c
	VINTR                           = 0
	VQUIT                           = 1
	VERASE                          = 2
	VKILL                           = 3
	VEOF                            = 4
	VEOL                            = 5
	VMIN                            = 6
	VSTART                          = 7
	VSTOP                           = 8
	VSUSP                           = 9
	VTIME                           = 10
	WCONTINUED                      = 0x4
	WNOHANG                         = 0x1
	WUNTRACED                       = 0x2
	_BPX_SWAP                       = 1
	_BPX_NONSWAP                    = 2
	MCL_CURRENT                     = 1  // for Linux compatibility -- no zos semantics
	MCL_FUTURE                      = 2  // for Linux compatibility -- no zos semantics
	MCL_ONFAULT                     = 3  // for Linux compatibility -- no zos semantics
	MADV_NORMAL                     = 0  // for Linux compatibility -- no zos semantics
	MADV_RANDOM                     = 1  // for Linux compatibility -- no zos semantics
	MADV_SEQUENTIAL                 = 2  // for Linux compatibility -- no zos semantics
	MADV_WILLNEED                   = 3  // for Linux compatibility -- no zos semantics
	MADV_REMOVE                     = 4  // for Linux compatibility -- no zos semantics
	MADV_DONTFORK                   = 5  // for Linux compatibility -- no zos semantics
	MADV_DOFORK                     = 6  // for Linux compatibility -- no zos semantics
	MADV_HWPOISON                   = 7  // for Linux compatibility -- no zos semantics
	MADV_MERGEABLE                  = 8  // for Linux compatibility -- no zos semantics
	MADV_UNMERGEABLE                = 9  // for Linux compatibility -- no zos semantics
	MADV_SOFT_OFFLINE               = 10 // for Linux compatibility -- no zos semantics
	MADV_HUGEPAGE                   = 11 // for Linux compatibility -- no zos semantics
	MADV_NOHUGEPAGE                 = 12 // for Linux compatibility -- no zos semantics
	MADV_DONTDUMP                   = 13 // for Linux compatibility -- no zos semantics
	MADV_DODUMP                     = 14 // for Linux compatibility -- no zos semantics
	MADV_FREE                       = 15 // for Linux compatibility -- no zos semantics
	MADV_WIPEONFORK                 = 16 // for Linux compatibility -- no zos semantics
	MADV_KEEPONFORK                 = 17 // for Linux compatibility -- no zos semantics
	AT_SYMLINK_NOFOLLOW             = 1  // for Unix  compatibility -- no zos semantics
	AT_FDCWD                        = 2  // for Unix  compatibility -- no zos semantics
)

const (
	EDOM               = Errno(1)
	ERANGE             = Errno(2)
	EACCES             = Errno(111)
	EAGAIN             = Errno(112)
	EBADF              = Errno(113)
	EBUSY              = Errno(114)
	ECHILD             = Errno(115)
	EDEADLK            = Errno(116)
	EEXIST             = Errno(117)
	EFAULT             = Errno(118)
	EFBIG              = Errno(119)
	EINTR              = Errno(120)
	EINVAL             = Errno(121)
	EIO                = Errno(122)
	EISDIR             = Errno(123)
	EMFILE             = Errno(124)
	EMLINK             = Errno(125)
	ENAMETOOLONG       = Errno(126)
	ENFILE             = Errno(127)
	ENODEV             = Errno(128)
	ENOENT             = Errno(129)
	ENOEXEC            = Errno(130)
	ENOLCK             = Errno(131)
	ENOMEM             = Errno(132)
	ENOSPC             = Errno(133)
	ENOSYS             = Errno(134)
	ENOTDIR            = Errno(135)
	ENOTEMPTY          = Errno(136)
	ENOTTY             = Errno(137)
	ENXIO              = Errno(138)
	EPERM              = Errno(139)
	EPIPE              = Errno(140)
	EROFS              = Errno(141)
	ESPIPE             = Errno(142)
	ESRCH              = Errno(143)
	EXDEV              = Errno(144)
	E2BIG              = Errno(145)
	ELOOP              = Errno(146)
	EILSEQ             = Errno(147)
	ENODATA            = Errno(148)
	EOVERFLOW          = Errno(149)
	EMVSNOTUP          = Errno(150)
	ECMSSTORAGE        = Errno(151)
	EMVSDYNALC         = Errno(151)
	EMVSCVAF           = Errno(152)
	EMVSCATLG          = Errno(153)
	ECMSINITIAL        = Errno(156)
	EMVSINITIAL        = Errno(156)
	ECMSERR            = Errno(157)
	EMVSERR            = Errno(157)
	EMVSPARM           = Errno(158)
	ECMSPFSFILE        = Errno(159)
	EMVSPFSFILE        = Errno(159)
	EMVSBADCHAR        = Errno(160)
	ECMSPFSPERM        = Errno(162)
	EMVSPFSPERM        = Errno(162)
	EMVSSAFEXTRERR     = Errno(163)
	EMVSSAF2ERR        = Errno(164)
	EMVSTODNOTSET      = Errno(165)
	EMVSPATHOPTS       = Errno(166)
	EMVSNORTL          = Errno(167)
	EMVSEXPIRE         = Errno(168)
	EMVSPASSWORD       = Errno(169)
	EMVSWLMERROR       = Errno(170)
	EMVSCPLERROR       = Errno(171)
	EMVSARMERROR       = Errno(172)
	ELENOFORK          = Errno(200)
	ELEMSGERR          = Errno(201)
	EFPMASKINV         = Errno(202)
	EFPMODEINV         = Errno(203)
	EBUFLEN            = Errno(227)
	EEXTLINK           = Errno(228)
	ENODD              = Errno(229)
	ECMSESMERR         = Errno(230)
	ECPERR             = Errno(231)
	ELEMULTITHREAD     = Errno(232)
	ELEFENCE           = Errno(244)
	EBADDATA           = Errno(245)
	EUNKNOWN           = Errno(246)
	ENOTSUP            = Errno(247)
	EBADNAME           = Errno(248)
	ENOTSAFE           = Errno(249)
	ELEMULTITHREADFORK = Errno(257)
	ECUNNOENV          = Errno(258)
	ECUNNOCONV         = Errno(259)
	ECUNNOTALIGNED     = Errno(260)
	ECUNERR            = Errno(262)
	EIBMBADCALL        = Errno(1000)
	EIBMBADPARM        = Errno(1001)
	EIBMSOCKOUTOFRANGE = Errno(1002)
	EIBMSOCKINUSE      = Errno(1003)
	EIBMIUCVERR        = Errno(1004)
	EOFFLOADboxERROR   = Errno(1005)
	EOFFLOADboxRESTART = Errno(1006)
	EOFFLOADboxDOWN    = Errno(1007)
	EIBMCONFLICT       = Errno(1008)
	EIBMCANCELLED      = Errno(1009)
	EIBMBADTCPNAME     = Errno(1011)
	ENOTBLK            = Errno(1100)
	ETXTBSY            = Errno(1101)
	EWOULDBLOCK        = Errno(1102)
	EINPROGRESS        = Errno(1103)
	EALREADY           = Errno(1104)
	ENOTSOCK           = Errno(1105)
	EDESTADDRREQ       = Errno(1106)
	EMSGSIZE           = Errno(1107)
	EPROTOTYPE         = Errno(1108)
	ENOPROTOOPT        = Errno(1109)
	EPROTONOSUPPORT    = Errno(1110)
	ESOCKTNOSUPPORT    = Errno(1111)
	EOPNOTSUPP         = Errno(1112)
	EPFNOSUPPORT       = Errno(1113)
	EAFNOSUPPORT       = Errno(1114)
	EADDRINUSE         = Errno(1115)
	EADDRNOTAVAIL      = Errno(1116)
	ENETDOWN           = Errno(1117)
	ENETUNREACH        = Errno(1118)
	ENETRESET          = Errno(1119)
	ECONNABORTED       = Errno(1120)
	ECONNRESET         = Errno(1121)
	ENOBUFS            = Errno(1122)
	EISCONN            = Errno(1123)
	ENOTCONN           = Errno(1124)
	ESHUTDOWN          = Errno(1125)
	ETOOMANYREFS       = Errno(1126)
	ETIMEDOUT          = Errno(1127)
	ECONNREFUSED       = Errno(1128)
	EHOSTDOWN          = Errno(1129)
	EHOSTUNREACH       = Errno(1130)
	EPROCLIM           = Errno(1131)
	EUSERS             = Errno(1132)
	EDQUOT             = Errno(1133)
	ESTALE             = Errno(1134)
	EREMOTE            = Errno(1135)
	ENOSTR             = Errno(1136)
	ETIME              = Errno(1137)
	ENOSR              = Errno(1138)
	ENOMSG             = Errno(1139)
	EBADMSG            = Errno(1140)
	EIDRM              = Errno(1141)
	ENONET             = Errno(1142)
	ERREMOTE           = Errno(1143)
	ENOLINK            = Errno(1144)
	EADV               = Errno(1145)
	ESRMNT             = Errno(1146)
	ECOMM              = Errno(1147)
	EPROTO             = Errno(1148)
	EMULTIHOP          = Errno(1149)
	EDOTDOT            = Errno(1150)
	EREMCHG            = Errno(1151)
	ECANCELED          = Errno(1152)
	EINTRNODATA        = Errno(1159)
	ENOREUSE           = Errno(1160)
	ENOMOVE            = Errno(1161)
)

// Signals
const (
	SIGHUP    = Signal(1)
	SIGINT    = Signal(2)
	SIGABRT   = Signal(3)
	SIGILL    = Signal(4)
	SIGPOLL   = Signal(5)
	SIGURG    = Signal(6)
	SIGSTOP   = Signal(7)
	SIGFPE    = Signal(8)
	SIGKILL   = Signal(9)
	SIGBUS    = Signal(10)
	SIGSEGV   = Signal(11)
	SIGSYS    = Signal(12)
	SIGPIPE   = Signal(13)
	SIGALRM   = Signal(14)
	SIGTERM   = Signal(15)
	SIGUSR1   = Signal(16)
	SIGUSR2   = Signal(17)
	SIGABND   = Signal(18)
	SIGCONT   = Signal(19)
	SIGCHLD   = Signal(20)
	SIGTTIN   = Signal(21)
	SIGTTOU   = Signal(22)
	SIGIO     = Signal(23)
	SIGQUIT   = Signal(24)
	SIGTSTP   = Signal(25)
	SIGTRAP   = Signal(26)
	SIGIOERR  = Signal(27)
	SIGWINCH  = Signal(28)
	SIGXCPU   = Signal(29)
	SIGXFSZ   = Signal(30)
	SIGVTALRM = Signal(31)
	SIGPROF   = Signal(32)
	SIGDANGER = Signal(33)
	SIGTHSTOP = Signal(34)
	SIGTHCONT = Signal(35)
	SIGTRACE  = Signal(37)
	SIGDCE    = Signal(38)
	SIGDUMP   = Signal(39)
)

// Error table
var errorList = [...]struct {
	num  Errno
	name string
	desc string
}{
	{1, "EDC5001I", "A domain error occurred."},
	{2, "EDC5002I", "A range error occurred."},
	{111, "EDC5111I", "Permission denied."},
	{112, "EDC5112I", "Resource temporarily unavailable."},
	{113, "EDC5113I", "Bad file descriptor."},
	{114, "EDC5114I", "Resource busy."},
	{115, "EDC5115I", "No child processes."},
	{116, "EDC5116I", "Resource deadlock avoided."},
	{117, "EDC5117I", "File exists."},
	{118, "EDC5118I", "Incorrect address."},
	{119, "EDC5119I", "File too large."},
	{120, "EDC5120I", "Interrupted function call."},
	{121, "EDC5121I", "Invalid argument."},
	{122, "EDC5122I", "Input/output error."},
	{123, "EDC5123I", "Is a directory."},
	{124, "EDC5124I", "Too many open files."},
	{125, "EDC5125I", "Too many links."},
	{126, "EDC5126I", "Filename too long."},
	{127, "EDC5127I", "Too many open files in system."},
	{128, "EDC5128I", "No such device."},
	{129, "EDC5129I", "No such file or directory."},
	{130, "EDC5130I", "Exec format error."},
	{131, "EDC5131I", "No locks available."},
	{132, "EDC5132I", "Not enough memory."},
	{133, "EDC5133I", "No space left on device."},
	{134, "EDC5134I", "Function not implemented."},
	{135, "EDC5135I", "Not a directory."},
	{136, "EDC5136I", "Directory not empty."},
	{137, "EDC5137I", "Inappropriate I/O control operation."},
	{138, "EDC5138I", "No such device or address."},
	{139, "EDC5139I", "Operation not permitted."},
	{140, "EDC5140I", "Broken pipe."},
	{141, "EDC5141I", "Read-only file system."},
	{142, "EDC5142I", "Invalid seek."},
	{143, "EDC5143I", "No such process."},
	{144, "EDC5144I", "Improper link."},
	{145, "EDC5145I", "The parameter list is too long, or the message to receive was too large for the buffer."},
	{146, "EDC5146I", "Too many levels of symbolic links."},
	{147, "EDC5147I", "Illegal byte sequence."},
	{148, "", ""},
	{149, "EDC5149I", "Value Overflow Error."},
	{150, "EDC5150I", "UNIX System Services is not active."},
	{151, "EDC5151I", "Dynamic allocation error."},
	{152, "EDC5152I", "Common VTOC access facility (CVAF) error."},
	{153, "EDC5153I", "Catalog obtain error."},
	{156, "EDC5156I", "Process initialization error."},
	{157, "EDC5157I", "An internal error has occurred."},
	{158, "EDC5158I", "Bad parameters were passed to the service."},
	{159, "EDC5159I", "The Physical File System encountered a permanent file error."},
	{160, "EDC5160I", "Bad character in environment variable name."},
	{162, "EDC5162I", "The Physical File System encountered a system error."},
	{163, "EDC5163I", "SAF/RACF extract error."},
	{164, "EDC5164I", "SAF/RACF error."},
	{165, "EDC5165I", "System TOD clock not set."},
	{166, "EDC5166I", "Access mode argument on function call conflicts with PATHOPTS parameter on JCL DD statement."},
	{167, "EDC5167I", "Access to the UNIX System Services version of the C RTL is denied."},
	{168, "EDC5168I", "Password has expired."},
	{169, "EDC5169I", "Password is invalid."},
	{170, "EDC5170I", "An error was encountered with WLM."},
	{171, "EDC5171I", "An error was encountered with CPL."},
	{172, "EDC5172I", "An error was encountered with Application Response Measurement (ARM) component."},
	{200, "EDC5200I", "The application contains a Language Environment member language that cannot tolerate a fork()."},
	{201, "EDC5201I", "The Language Environment message file was not found in the hierarchical file system."},
	{202, "EDC5202E", "DLL facilities are not supported under SPC environment."},
	{203, "EDC5203E", "DLL facilities are not supported under POSIX environment."},
	{227, "EDC5227I", "Buffer is not long enough to contain a path definition"},
	{228, "EDC5228I", "The file referred to is an external link"},
	{229, "EDC5229I", "No path definition for ddname in effect"},
	{230, "EDC5230I", "ESM error."},
	{231, "EDC5231I", "CP or the external security manager had an error"},
	{232, "EDC5232I", "The function failed because it was invoked from a multithread environment."},
	{244, "EDC5244I", "The program, module or DLL is not supported in this environment."},
	{245, "EDC5245I", "Data is not valid."},
	{246, "EDC5246I", "Unknown system state."},
	{247, "EDC5247I", "Operation not supported."},
	{248, "EDC5248I", "The object name specified is not correct."},
	{249, "EDC5249I", "The function is not allowed."},
	{257, "EDC5257I", "Function cannot be called in the child process of a fork() from a multithreaded process until exec() is called."},
	{258, "EDC5258I", "A CUN_RS_NO_UNI_ENV error was issued by Unicode Services."},
	{259, "EDC5259I", "A CUN_RS_NO_CONVERSION error was issued by Unicode Services."},
	{260, "EDC5260I", "A CUN_RS_TABLE_NOT_ALIGNED error was issued by Unicode Services."},
	{262, "EDC5262I", "An iconv() function encountered an unexpected error while using Unicode Services."},
	{1000, "EDC8000I", "A bad socket-call constant was found in the IUCV header."},
	{1001, "EDC8001I", "An error was found in the IUCV header."},
	{1002, "EDC8002I", "A socket descriptor is out of range."},
	{1003, "EDC8003I", "A socket descriptor is in use."},
	{1004, "EDC8004I", "Request failed because of an IUCV error."},
	{1005, "EDC8005I", "Offload box error."},
	{1006, "EDC8006I", "Offload box restarted."},
	{1007, "EDC8007I", "Offload box down."},
	{1008, "EDC8008I", "Already a conflicting call outstanding on socket."},
	{1009, "EDC8009I", "Request cancelled using a SOCKcallCANCEL request."},
	{1011, "EDC8011I", "A name of a PFS was specified that either is not configured or is not a Sockets PFS."},
	{1100, "EDC8100I", "Block device required."},
	{1101, "EDC8101I", "Text file busy."},
	{1102, "EDC8102I", "Operation would block."},
	{1103, "EDC8103I", "Operation now in progress."},
	{1104, "EDC8104I", "Connection already in progress."},
	{1105, "EDC8105I", "Socket operation on non-socket."},
	{1106, "EDC8106I", "Destination address required."},
	{1107, "EDC8107I", "Message too long."},
	{1108, "EDC8108I", "Protocol wrong type for socket."},
	{1109, "EDC8109I", "Protocol not available."},
	{1110, "EDC8110I", "Protocol not supported."},
	{1111, "EDC8111I", "Socket type not supported."},
	{1112, "EDC8112I", "Operation not supported on socket."},
	{1113, "EDC8113I", "Protocol family not supported."},
	{1114, "EDC8114I", "Address family not supported."},
	{1115, "EDC8115I", "Address already in use."},
	{1116, "EDC8116I", "Address not available."},
	{1117, "EDC8117I", "Network is down."},
	{1118, "EDC8118I", "Network is unreachable."},
	{1119, "EDC8119I", "Network dropped connection on reset."},
	{1120, "EDC8120I", "Connection ended abnormally."},
	{1121, "EDC8121I", "Connection reset."},
	{1122, "EDC8122I", "No buffer space available."},
	{1123, "EDC8123I", "Socket already connected."},
	{1124, "EDC8124I", "Socket not connected."},
	{1125, "EDC8125I", "Can't send after socket shutdown."},
	{1126, "EDC8126I", "Too many references; can't splice."},
	{1127, "EDC8127I", "Connection timed out."},
	{1128, "EDC8128I", "Connection refused."},
	{1129, "EDC8129I", "Host is not available."},
	{1130, "EDC8130I", "Host cannot be reached."},
	{1131, "EDC8131I", "Too many processes."},
	{1132, "EDC8132I", "Too many users."},
	{1133, "EDC8133I", "Disk quota exceeded."},
	{1134, "EDC8134I", "Stale file handle."},
	{1135, "", ""},
	{1136, "EDC8136I", "File is not a STREAM."},
	{1137, "EDC8137I", "STREAMS ioctl() timeout."},
	{1138, "EDC8138I", "No STREAMS resources."},
	{1139, "EDC8139I", "The message identified by set_id and msg_id is not in the message catalog."},
	{1140, "EDC8140I", "Bad message."},
	{1141, "EDC8141I", "Identifier removed."},
	{1142, "", ""},
	{1143, "", ""},
	{1144, "EDC8144I", "The link has been severed."},
	{1145, "", ""},
	{1146, "", ""},
	{1147, "", ""},
	{1148, "EDC8148I", "Protocol error."},
	{1149, "EDC8149I", "Multihop not allowed."},
	{1150, "", ""},
	{1151, "", ""},
	{1152, "EDC8152I", "The asynchronous I/O request has been canceled."},
	{1159, "EDC8159I", "Function call was interrupted before any data was received."},
	{1160, "EDC8160I", "Socket reuse is not supported."},
	{1161, "EDC8161I", "The file system cannot currently be moved."},
}

// Signal table
var signalList = [...]struct {
	num  Signal
	name string
	desc string
}{
	{1, "SIGHUP", "hangup"},
	{2, "SIGINT", "interrupt"},
	{3, "SIGABT", "aborted"},
	{4, "SIGILL", "illegal instruction"},
	{5, "SIGPOLL", "pollable event"},
	{6, "SIGURG", "urgent I/O condition"},
	{7, "SIGSTOP", "stop process"},
	{8, "SIGFPE", "floating point exception"},
	{9, "SIGKILL", "killed"},
	{10, "SIGBUS", "bus error"},
	{11, "SIGSEGV", "segmentation fault"},
	{12, "SIGSYS", "bad argument to routine"},
	{13, "SIGPIPE", "broken pipe"},
	{14, "SIGALRM", "alarm clock"},
	{15, "SIGTERM", "terminated"},
	{16, "SIGUSR1", "user defined signal 1"},
	{17, "SIGUSR2", "user defined signal 2"},
	{18, "SIGABND", "abend"},
	{19, "SIGCONT", "continued"},
	{20, "SIGCHLD", "child exited"},
	{21, "SIGTTIN", "stopped (tty input)"},
	{22, "SIGTTOU", "stopped (tty output)"},
	{23, "SIGIO", "I/O possible"},
	{24, "SIGQUIT", "quit"},
	{25, "SIGTSTP", "stopped"},
	{26, "SIGTRAP", "trace/breakpoint trap"},
	{27, "SIGIOER", "I/O error"},
	{28, "SIGWINCH", "window changed"},
	{29, "SIGXCPU", "CPU time limit exceeded"},
	{30, "SIGXFSZ", "file size limit exceeded"},
	{31, "SIGVTALRM", "virtual timer expired"},
	{32, "SIGPROF", "profiling timer expired"},
	{33, "SIGDANGER", "danger"},
	{34, "SIGTHSTOP", "stop thread"},
	{35, "SIGTHCONT", "continue thread"},
	{37, "SIGTRACE", "trace"},
	{38, "", "DCE"},
	{39, "SIGDUMP", "dump"},
}
  07070100000E47000081A4000000000000000000000001645E367C000004D4000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zptrace_armnn_linux.go   // Code generated by linux/mkall.go generatePtracePair("arm", "arm64"). DO NOT EDIT.

//go:build linux && (arm || arm64)
// +build linux
// +build arm arm64

package unix

import "unsafe"

// PtraceRegsArm is the registers used by arm binaries.
type PtraceRegsArm struct {
	Uregs [18]uint32
}

// PtraceGetRegsArm fetches the registers used by arm binaries.
func PtraceGetRegsArm(pid int, regsout *PtraceRegsArm) error {
	return ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout))
}

// PtraceSetRegsArm sets the registers used by arm binaries.
func PtraceSetRegsArm(pid int, regs *PtraceRegsArm) error {
	return ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs))
}

// PtraceRegsArm64 is the registers used by arm64 binaries.
type PtraceRegsArm64 struct {
	Regs   [31]uint64
	Sp     uint64
	Pc     uint64
	Pstate uint64
}

// PtraceGetRegsArm64 fetches the registers used by arm64 binaries.
func PtraceGetRegsArm64(pid int, regsout *PtraceRegsArm64) error {
	return ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout))
}

// PtraceSetRegsArm64 sets the registers used by arm64 binaries.
func PtraceSetRegsArm64(pid int, regs *PtraceRegsArm64) error {
	return ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs))
}
07070100000E48000081A4000000000000000000000001645E367C000002D1000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zptrace_linux_arm64.go   // Code generated by linux/mkall.go generatePtraceRegSet("arm64"). DO NOT EDIT.

package unix

import "unsafe"

// PtraceGetRegSetArm64 fetches the registers used by arm64 binaries.
func PtraceGetRegSetArm64(pid, addr int, regsout *PtraceRegsArm64) error {
	iovec := Iovec{(*byte)(unsafe.Pointer(regsout)), uint64(unsafe.Sizeof(*regsout))}
	return ptracePtr(PTRACE_GETREGSET, pid, uintptr(addr), unsafe.Pointer(&iovec))
}

// PtraceSetRegSetArm64 sets the registers used by arm64 binaries.
func PtraceSetRegSetArm64(pid, addr int, regs *PtraceRegsArm64) error {
	iovec := Iovec{(*byte)(unsafe.Pointer(regs)), uint64(unsafe.Sizeof(*regs))}
	return ptracePtr(PTRACE_SETREGSET, pid, uintptr(addr), unsafe.Pointer(&iovec))
}
   07070100000E49000081A4000000000000000000000001645E367C00000594000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go  // Code generated by linux/mkall.go generatePtracePair("mips", "mips64"). DO NOT EDIT.

//go:build linux && (mips || mips64)
// +build linux
// +build mips mips64

package unix

import "unsafe"

// PtraceRegsMips is the registers used by mips binaries.
type PtraceRegsMips struct {
	Regs     [32]uint64
	Lo       uint64
	Hi       uint64
	Epc      uint64
	Badvaddr uint64
	Status   uint64
	Cause    uint64
}

// PtraceGetRegsMips fetches the registers used by mips binaries.
func PtraceGetRegsMips(pid int, regsout *PtraceRegsMips) error {
	return ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout))
}

// PtraceSetRegsMips sets the registers used by mips binaries.
func PtraceSetRegsMips(pid int, regs *PtraceRegsMips) error {
	return ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs))
}

// PtraceRegsMips64 is the registers used by mips64 binaries.
type PtraceRegsMips64 struct {
	Regs     [32]uint64
	Lo       uint64
	Hi       uint64
	Epc      uint64
	Badvaddr uint64
	Status   uint64
	Cause    uint64
}

// PtraceGetRegsMips64 fetches the registers used by mips64 binaries.
func PtraceGetRegsMips64(pid int, regsout *PtraceRegsMips64) error {
	return ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout))
}

// PtraceSetRegsMips64 sets the registers used by mips64 binaries.
func PtraceSetRegsMips64(pid int, regs *PtraceRegsMips64) error {
	return ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs))
}
07070100000E4A000081A4000000000000000000000001645E367C000005CC000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go    // Code generated by linux/mkall.go generatePtracePair("mipsle", "mips64le"). DO NOT EDIT.

//go:build linux && (mipsle || mips64le)
// +build linux
// +build mipsle mips64le

package unix

import "unsafe"

// PtraceRegsMipsle is the registers used by mipsle binaries.
type PtraceRegsMipsle struct {
	Regs     [32]uint64
	Lo       uint64
	Hi       uint64
	Epc      uint64
	Badvaddr uint64
	Status   uint64
	Cause    uint64
}

// PtraceGetRegsMipsle fetches the registers used by mipsle binaries.
func PtraceGetRegsMipsle(pid int, regsout *PtraceRegsMipsle) error {
	return ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout))
}

// PtraceSetRegsMipsle sets the registers used by mipsle binaries.
func PtraceSetRegsMipsle(pid int, regs *PtraceRegsMipsle) error {
	return ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs))
}

// PtraceRegsMips64le is the registers used by mips64le binaries.
type PtraceRegsMips64le struct {
	Regs     [32]uint64
	Lo       uint64
	Hi       uint64
	Epc      uint64
	Badvaddr uint64
	Status   uint64
	Cause    uint64
}

// PtraceGetRegsMips64le fetches the registers used by mips64le binaries.
func PtraceGetRegsMips64le(pid int, regsout *PtraceRegsMips64le) error {
	return ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout))
}

// PtraceSetRegsMips64le sets the registers used by mips64le binaries.
func PtraceSetRegsMips64le(pid int, regs *PtraceRegsMips64le) error {
	return ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs))
}
07070100000E4B000081A4000000000000000000000001645E367C0000075D000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zptrace_x86_linux.go // Code generated by linux/mkall.go generatePtracePair("386", "amd64"). DO NOT EDIT.

//go:build linux && (386 || amd64)
// +build linux
// +build 386 amd64

package unix

import "unsafe"

// PtraceRegs386 is the registers used by 386 binaries.
type PtraceRegs386 struct {
	Ebx      int32
	Ecx      int32
	Edx      int32
	Esi      int32
	Edi      int32
	Ebp      int32
	Eax      int32
	Xds      int32
	Xes      int32
	Xfs      int32
	Xgs      int32
	Orig_eax int32
	Eip      int32
	Xcs      int32
	Eflags   int32
	Esp      int32
	Xss      int32
}

// PtraceGetRegs386 fetches the registers used by 386 binaries.
func PtraceGetRegs386(pid int, regsout *PtraceRegs386) error {
	return ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout))
}

// PtraceSetRegs386 sets the registers used by 386 binaries.
func PtraceSetRegs386(pid int, regs *PtraceRegs386) error {
	return ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs))
}

// PtraceRegsAmd64 is the registers used by amd64 binaries.
type PtraceRegsAmd64 struct {
	R15      uint64
	R14      uint64
	R13      uint64
	R12      uint64
	Rbp      uint64
	Rbx      uint64
	R11      uint64
	R10      uint64
	R9       uint64
	R8       uint64
	Rax      uint64
	Rcx      uint64
	Rdx      uint64
	Rsi      uint64
	Rdi      uint64
	Orig_rax uint64
	Rip      uint64
	Cs       uint64
	Eflags   uint64
	Rsp      uint64
	Ss       uint64
	Fs_base  uint64
	Gs_base  uint64
	Ds       uint64
	Es       uint64
	Fs       uint64
	Gs       uint64
}

// PtraceGetRegsAmd64 fetches the registers used by amd64 binaries.
func PtraceGetRegsAmd64(pid int, regsout *PtraceRegsAmd64) error {
	return ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout))
}

// PtraceSetRegsAmd64 sets the registers used by amd64 binaries.
func PtraceSetRegsAmd64(pid int, regs *PtraceRegsAmd64) error {
	return ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs))
}
   07070100000E4C000081A4000000000000000000000001645E367C000090F0000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go  // go run mksyscall_aix_ppc.go -aix -tags aix,ppc syscall_aix.go syscall_aix_ppc.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build aix && ppc
// +build aix,ppc

package unix

/*
#include <stdint.h>
#include <stddef.h>
int utimes(uintptr_t, uintptr_t);
int utimensat(int, uintptr_t, uintptr_t, int);
int getcwd(uintptr_t, size_t);
int accept(int, uintptr_t, uintptr_t);
int getdirent(int, uintptr_t, size_t);
int wait4(int, uintptr_t, int, uintptr_t);
int ioctl(int, int, uintptr_t);
int fcntl(uintptr_t, int, uintptr_t);
int fsync_range(int, int, long long, long long);
int acct(uintptr_t);
int chdir(uintptr_t);
int chroot(uintptr_t);
int close(int);
int dup(int);
void exit(int);
int faccessat(int, uintptr_t, unsigned int, int);
int fchdir(int);
int fchmod(int, unsigned int);
int fchmodat(int, uintptr_t, unsigned int, int);
int fchownat(int, uintptr_t, int, int, int);
int fdatasync(int);
int getpgid(int);
int getpgrp();
int getpid();
int getppid();
int getpriority(int, int);
int getrusage(int, uintptr_t);
int getsid(int);
int kill(int, int);
int syslog(int, uintptr_t, size_t);
int mkdir(int, uintptr_t, unsigned int);
int mkdirat(int, uintptr_t, unsigned int);
int mkfifo(uintptr_t, unsigned int);
int mknod(uintptr_t, unsigned int, int);
int mknodat(int, uintptr_t, unsigned int, int);
int nanosleep(uintptr_t, uintptr_t);
int open64(uintptr_t, int, unsigned int);
int openat(int, uintptr_t, int, unsigned int);
int read(int, uintptr_t, size_t);
int readlink(uintptr_t, uintptr_t, size_t);
int renameat(int, uintptr_t, int, uintptr_t);
int setdomainname(uintptr_t, size_t);
int sethostname(uintptr_t, size_t);
int setpgid(int, int);
int setsid();
int settimeofday(uintptr_t);
int setuid(int);
int setgid(int);
int setpriority(int, int, int);
int statx(int, uintptr_t, int, int, uintptr_t);
int sync();
uintptr_t times(uintptr_t);
int umask(int);
int uname(uintptr_t);
int unlink(uintptr_t);
int unlinkat(int, uintptr_t, int);
int ustat(int, uintptr_t);
int write(int, uintptr_t, size_t);
int dup2(int, int);
int posix_fadvise64(int, long long, long long, int);
int fchown(int, int, int);
int fstat(int, uintptr_t);
int fstatat(int, uintptr_t, uintptr_t, int);
int fstatfs(int, uintptr_t);
int ftruncate(int, long long);
int getegid();
int geteuid();
int getgid();
int getuid();
int lchown(uintptr_t, int, int);
int listen(int, int);
int lstat(uintptr_t, uintptr_t);
int pause();
int pread64(int, uintptr_t, size_t, long long);
int pwrite64(int, uintptr_t, size_t, long long);
#define c_select select
int select(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t);
int pselect(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);
int setregid(int, int);
int setreuid(int, int);
int shutdown(int, int);
long long splice(int, uintptr_t, int, uintptr_t, int, int);
int stat(uintptr_t, uintptr_t);
int statfs(uintptr_t, uintptr_t);
int truncate(uintptr_t, long long);
int bind(int, uintptr_t, uintptr_t);
int connect(int, uintptr_t, uintptr_t);
int getgroups(int, uintptr_t);
int setgroups(int, uintptr_t);
int getsockopt(int, int, int, uintptr_t, uintptr_t);
int setsockopt(int, int, int, uintptr_t, uintptr_t);
int socket(int, int, int);
int socketpair(int, int, int, uintptr_t);
int getpeername(int, uintptr_t, uintptr_t);
int getsockname(int, uintptr_t, uintptr_t);
int recvfrom(int, uintptr_t, size_t, int, uintptr_t, uintptr_t);
int sendto(int, uintptr_t, size_t, int, uintptr_t, uintptr_t);
int nrecvmsg(int, uintptr_t, int);
int nsendmsg(int, uintptr_t, int);
int munmap(uintptr_t, uintptr_t);
int madvise(uintptr_t, size_t, int);
int mprotect(uintptr_t, size_t, int);
int mlock(uintptr_t, size_t);
int mlockall(int);
int msync(uintptr_t, size_t, int);
int munlock(uintptr_t, size_t);
int munlockall();
int pipe(uintptr_t);
int poll(uintptr_t, int, int);
int gettimeofday(uintptr_t, uintptr_t);
int time(uintptr_t);
int utime(uintptr_t, uintptr_t);
unsigned long long getsystemcfg(int);
int umount(uintptr_t);
int getrlimit64(int, uintptr_t);
long long lseek64(int, long long, int);
uintptr_t mmap(uintptr_t, uintptr_t, int, int, int, long long);

*/
import "C"
import (
	"unsafe"
)

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, times *[2]Timeval) (err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(path)))
	r0, er := C.utimes(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(times))))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(path)))
	r0, er := C.utimensat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(times))), C.int(flag))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getcwd(buf []byte) (err error) {
	var _p0 *byte
	if len(buf) > 0 {
		_p0 = &buf[0]
	}
	var _p1 int
	_p1 = len(buf)
	r0, er := C.getcwd(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
	r0, er := C.accept(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(rsa))), C.uintptr_t(uintptr(unsafe.Pointer(addrlen))))
	fd = int(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getdirent(fd int, buf []byte) (n int, err error) {
	var _p0 *byte
	if len(buf) > 0 {
		_p0 = &buf[0]
	}
	var _p1 int
	_p1 = len(buf)
	r0, er := C.getdirent(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))
	n = int(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error) {
	r0, er := C.wait4(C.int(pid), C.uintptr_t(uintptr(unsafe.Pointer(status))), C.int(options), C.uintptr_t(uintptr(unsafe.Pointer(rusage))))
	wpid = Pid_t(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctl(fd int, req int, arg uintptr) (err error) {
	r0, er := C.ioctl(C.int(fd), C.int(req), C.uintptr_t(arg))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) {
	r0, er := C.ioctl(C.int(fd), C.int(req), C.uintptr_t(uintptr(arg)))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func FcntlInt(fd uintptr, cmd int, arg int) (r int, err error) {
	r0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg))
	r = int(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) {
	r0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(uintptr(unsafe.Pointer(lk))))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fcntl(fd int, cmd int, arg int) (val int, err error) {
	r0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg))
	val = int(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fsyncRange(fd int, how int, start int64, length int64) (err error) {
	r0, er := C.fsync_range(C.int(fd), C.int(how), C.longlong(start), C.longlong(length))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Acct(path string) (err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(path)))
	r0, er := C.acct(C.uintptr_t(_p0))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chdir(path string) (err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(path)))
	r0, er := C.chdir(C.uintptr_t(_p0))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chroot(path string) (err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(path)))
	r0, er := C.chroot(C.uintptr_t(_p0))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Close(fd int) (err error) {
	r0, er := C.close(C.int(fd))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup(oldfd int) (fd int, err error) {
	r0, er := C.dup(C.int(oldfd))
	fd = int(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Exit(code int) {
	C.exit(C.int(code))
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(path)))
	r0, er := C.faccessat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchdir(fd int) (err error) {
	r0, er := C.fchdir(C.int(fd))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmod(fd int, mode uint32) (err error) {
	r0, er := C.fchmod(C.int(fd), C.uint(mode))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(path)))
	r0, er := C.fchmodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(path)))
	r0, er := C.fchownat(C.int(dirfd), C.uintptr_t(_p0), C.int(uid), C.int(gid), C.int(flags))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fdatasync(fd int) (err error) {
	r0, er := C.fdatasync(C.int(fd))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgid(pid int) (pgid int, err error) {
	r0, er := C.getpgid(C.int(pid))
	pgid = int(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgrp() (pid int) {
	r0, _ := C.getpgrp()
	pid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpid() (pid int) {
	r0, _ := C.getpid()
	pid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getppid() (ppid int) {
	r0, _ := C.getppid()
	ppid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpriority(which int, who int) (prio int, err error) {
	r0, er := C.getpriority(C.int(which), C.int(who))
	prio = int(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrusage(who int, rusage *Rusage) (err error) {
	r0, er := C.getrusage(C.int(who), C.uintptr_t(uintptr(unsafe.Pointer(rusage))))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getsid(pid int) (sid int, err error) {
	r0, er := C.getsid(C.int(pid))
	sid = int(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kill(pid int, sig Signal) (err error) {
	r0, er := C.kill(C.int(pid), C.int(sig))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Klogctl(typ int, buf []byte) (n int, err error) {
	var _p0 *byte
	if len(buf) > 0 {
		_p0 = &buf[0]
	}
	var _p1 int
	_p1 = len(buf)
	r0, er := C.syslog(C.int(typ), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))
	n = int(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdir(dirfd int, path string, mode uint32) (err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(path)))
	r0, er := C.mkdir(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdirat(dirfd int, path string, mode uint32) (err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(path)))
	r0, er := C.mkdirat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifo(path string, mode uint32) (err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(path)))
	r0, er := C.mkfifo(C.uintptr_t(_p0), C.uint(mode))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknod(path string, mode uint32, dev int) (err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(path)))
	r0, er := C.mknod(C.uintptr_t(_p0), C.uint(mode), C.int(dev))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(path)))
	r0, er := C.mknodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(dev))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
	r0, er := C.nanosleep(C.uintptr_t(uintptr(unsafe.Pointer(time))), C.uintptr_t(uintptr(unsafe.Pointer(leftover))))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Open(path string, mode int, perm uint32) (fd int, err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(path)))
	r0, er := C.open64(C.uintptr_t(_p0), C.int(mode), C.uint(perm))
	fd = int(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(path)))
	r0, er := C.openat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.uint(mode))
	fd = int(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func read(fd int, p []byte) (n int, err error) {
	var _p0 *byte
	if len(p) > 0 {
		_p0 = &p[0]
	}
	var _p1 int
	_p1 = len(p)
	r0, er := C.read(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))
	n = int(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlink(path string, buf []byte) (n int, err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(path)))
	var _p1 *byte
	if len(buf) > 0 {
		_p1 = &buf[0]
	}
	var _p2 int
	_p2 = len(buf)
	r0, er := C.readlink(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(_p1))), C.size_t(_p2))
	n = int(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(oldpath)))
	_p1 := uintptr(unsafe.Pointer(C.CString(newpath)))
	r0, er := C.renameat(C.int(olddirfd), C.uintptr_t(_p0), C.int(newdirfd), C.uintptr_t(_p1))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setdomainname(p []byte) (err error) {
	var _p0 *byte
	if len(p) > 0 {
		_p0 = &p[0]
	}
	var _p1 int
	_p1 = len(p)
	r0, er := C.setdomainname(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sethostname(p []byte) (err error) {
	var _p0 *byte
	if len(p) > 0 {
		_p0 = &p[0]
	}
	var _p1 int
	_p1 = len(p)
	r0, er := C.sethostname(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpgid(pid int, pgid int) (err error) {
	r0, er := C.setpgid(C.int(pid), C.int(pgid))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setsid() (pid int, err error) {
	r0, er := C.setsid()
	pid = int(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Settimeofday(tv *Timeval) (err error) {
	r0, er := C.settimeofday(C.uintptr_t(uintptr(unsafe.Pointer(tv))))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setuid(uid int) (err error) {
	r0, er := C.setuid(C.int(uid))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setgid(uid int) (err error) {
	r0, er := C.setgid(C.int(uid))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpriority(which int, who int, prio int) (err error) {
	r0, er := C.setpriority(C.int(which), C.int(who), C.int(prio))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(path)))
	r0, er := C.statx(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.int(mask), C.uintptr_t(uintptr(unsafe.Pointer(stat))))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sync() {
	C.sync()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Times(tms *Tms) (ticks uintptr, err error) {
	r0, er := C.times(C.uintptr_t(uintptr(unsafe.Pointer(tms))))
	ticks = uintptr(r0)
	if uintptr(r0) == ^uintptr(0) && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Umask(mask int) (oldmask int) {
	r0, _ := C.umask(C.int(mask))
	oldmask = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Uname(buf *Utsname) (err error) {
	r0, er := C.uname(C.uintptr_t(uintptr(unsafe.Pointer(buf))))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlink(path string) (err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(path)))
	r0, er := C.unlink(C.uintptr_t(_p0))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlinkat(dirfd int, path string, flags int) (err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(path)))
	r0, er := C.unlinkat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ustat(dev int, ubuf *Ustat_t) (err error) {
	r0, er := C.ustat(C.int(dev), C.uintptr_t(uintptr(unsafe.Pointer(ubuf))))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func write(fd int, p []byte) (n int, err error) {
	var _p0 *byte
	if len(p) > 0 {
		_p0 = &p[0]
	}
	var _p1 int
	_p1 = len(p)
	r0, er := C.write(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))
	n = int(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func readlen(fd int, p *byte, np int) (n int, err error) {
	r0, er := C.read(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(p))), C.size_t(np))
	n = int(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func writelen(fd int, p *byte, np int) (n int, err error) {
	r0, er := C.write(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(p))), C.size_t(np))
	n = int(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup2(oldfd int, newfd int) (err error) {
	r0, er := C.dup2(C.int(oldfd), C.int(newfd))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
	r0, er := C.posix_fadvise64(C.int(fd), C.longlong(offset), C.longlong(length), C.int(advice))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	r0, er := C.fchown(C.int(fd), C.int(uid), C.int(gid))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fstat(fd int, stat *Stat_t) (err error) {
	r0, er := C.fstat(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(stat))))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(path)))
	r0, er := C.fstatat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(stat))), C.int(flags))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatfs(fd int, buf *Statfs_t) (err error) {
	r0, er := C.fstatfs(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(buf))))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	r0, er := C.ftruncate(C.int(fd), C.longlong(length))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _ := C.getegid()
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (euid int) {
	r0, _ := C.geteuid()
	euid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _ := C.getgid()
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _ := C.getuid()
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(path)))
	r0, er := C.lchown(C.uintptr_t(_p0), C.int(uid), C.int(gid))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, n int) (err error) {
	r0, er := C.listen(C.int(s), C.int(n))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func lstat(path string, stat *Stat_t) (err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(path)))
	r0, er := C.lstat(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(stat))))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pause() (err error) {
	r0, er := C.pause()
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 *byte
	if len(p) > 0 {
		_p0 = &p[0]
	}
	var _p1 int
	_p1 = len(p)
	r0, er := C.pread64(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.longlong(offset))
	n = int(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 *byte
	if len(p) > 0 {
		_p0 = &p[0]
	}
	var _p1 int
	_p1 = len(p)
	r0, er := C.pwrite64(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.longlong(offset))
	n = int(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, er := C.c_select(C.int(nfd), C.uintptr_t(uintptr(unsafe.Pointer(r))), C.uintptr_t(uintptr(unsafe.Pointer(w))), C.uintptr_t(uintptr(unsafe.Pointer(e))), C.uintptr_t(uintptr(unsafe.Pointer(timeout))))
	n = int(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
	r0, er := C.pselect(C.int(nfd), C.uintptr_t(uintptr(unsafe.Pointer(r))), C.uintptr_t(uintptr(unsafe.Pointer(w))), C.uintptr_t(uintptr(unsafe.Pointer(e))), C.uintptr_t(uintptr(unsafe.Pointer(timeout))), C.uintptr_t(uintptr(unsafe.Pointer(sigmask))))
	n = int(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setregid(rgid int, egid int) (err error) {
	r0, er := C.setregid(C.int(rgid), C.int(egid))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setreuid(ruid int, euid int) (err error) {
	r0, er := C.setreuid(C.int(ruid), C.int(euid))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(fd int, how int) (err error) {
	r0, er := C.shutdown(C.int(fd), C.int(how))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
	r0, er := C.splice(C.int(rfd), C.uintptr_t(uintptr(unsafe.Pointer(roff))), C.int(wfd), C.uintptr_t(uintptr(unsafe.Pointer(woff))), C.int(len), C.int(flags))
	n = int64(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func stat(path string, statptr *Stat_t) (err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(path)))
	r0, er := C.stat(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(statptr))))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statfs(path string, buf *Statfs_t) (err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(path)))
	r0, er := C.statfs(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(buf))))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(path)))
	r0, er := C.truncate(C.uintptr_t(_p0), C.longlong(length))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	r0, er := C.bind(C.int(s), C.uintptr_t(uintptr(addr)), C.uintptr_t(uintptr(addrlen)))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	r0, er := C.connect(C.int(s), C.uintptr_t(uintptr(addr)), C.uintptr_t(uintptr(addrlen)))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(n int, list *_Gid_t) (nn int, err error) {
	r0, er := C.getgroups(C.int(n), C.uintptr_t(uintptr(unsafe.Pointer(list))))
	nn = int(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(n int, list *_Gid_t) (err error) {
	r0, er := C.setgroups(C.int(n), C.uintptr_t(uintptr(unsafe.Pointer(list))))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	r0, er := C.getsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(uintptr(val)), C.uintptr_t(uintptr(unsafe.Pointer(vallen))))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	r0, er := C.setsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(uintptr(val)), C.uintptr_t(vallen))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, er := C.socket(C.int(domain), C.int(typ), C.int(proto))
	fd = int(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	r0, er := C.socketpair(C.int(domain), C.int(typ), C.int(proto), C.uintptr_t(uintptr(unsafe.Pointer(fd))))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	r0, er := C.getpeername(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(rsa))), C.uintptr_t(uintptr(unsafe.Pointer(addrlen))))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	r0, er := C.getsockname(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(rsa))), C.uintptr_t(uintptr(unsafe.Pointer(addrlen))))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 *byte
	if len(p) > 0 {
		_p0 = &p[0]
	}
	var _p1 int
	_p1 = len(p)
	r0, er := C.recvfrom(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(flags), C.uintptr_t(uintptr(unsafe.Pointer(from))), C.uintptr_t(uintptr(unsafe.Pointer(fromlen))))
	n = int(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 *byte
	if len(buf) > 0 {
		_p0 = &buf[0]
	}
	var _p1 int
	_p1 = len(buf)
	r0, er := C.sendto(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(flags), C.uintptr_t(uintptr(to)), C.uintptr_t(uintptr(addrlen)))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, er := C.nrecvmsg(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(msg))), C.int(flags))
	n = int(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, er := C.nsendmsg(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(msg))), C.int(flags))
	n = int(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func munmap(addr uintptr, length uintptr) (err error) {
	r0, er := C.munmap(C.uintptr_t(addr), C.uintptr_t(length))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Madvise(b []byte, advice int) (err error) {
	var _p0 *byte
	if len(b) > 0 {
		_p0 = &b[0]
	}
	var _p1 int
	_p1 = len(b)
	r0, er := C.madvise(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(advice))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mprotect(b []byte, prot int) (err error) {
	var _p0 *byte
	if len(b) > 0 {
		_p0 = &b[0]
	}
	var _p1 int
	_p1 = len(b)
	r0, er := C.mprotect(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(prot))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlock(b []byte) (err error) {
	var _p0 *byte
	if len(b) > 0 {
		_p0 = &b[0]
	}
	var _p1 int
	_p1 = len(b)
	r0, er := C.mlock(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlockall(flags int) (err error) {
	r0, er := C.mlockall(C.int(flags))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Msync(b []byte, flags int) (err error) {
	var _p0 *byte
	if len(b) > 0 {
		_p0 = &b[0]
	}
	var _p1 int
	_p1 = len(b)
	r0, er := C.msync(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(flags))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlock(b []byte) (err error) {
	var _p0 *byte
	if len(b) > 0 {
		_p0 = &b[0]
	}
	var _p1 int
	_p1 = len(b)
	r0, er := C.munlock(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlockall() (err error) {
	r0, er := C.munlockall()
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pipe(p *[2]_C_int) (err error) {
	r0, er := C.pipe(C.uintptr_t(uintptr(unsafe.Pointer(p))))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
	r0, er := C.poll(C.uintptr_t(uintptr(unsafe.Pointer(fds))), C.int(nfds), C.int(timeout))
	n = int(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func gettimeofday(tv *Timeval, tzp *Timezone) (err error) {
	r0, er := C.gettimeofday(C.uintptr_t(uintptr(unsafe.Pointer(tv))), C.uintptr_t(uintptr(unsafe.Pointer(tzp))))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Time(t *Time_t) (tt Time_t, err error) {
	r0, er := C.time(C.uintptr_t(uintptr(unsafe.Pointer(t))))
	tt = Time_t(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Utime(path string, buf *Utimbuf) (err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(path)))
	r0, er := C.utime(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(buf))))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getsystemcfg(label int) (n uint64) {
	r0, _ := C.getsystemcfg(C.int(label))
	n = uint64(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func umount(target string) (err error) {
	_p0 := uintptr(unsafe.Pointer(C.CString(target)))
	r0, er := C.umount(C.uintptr_t(_p0))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(resource int, rlim *Rlimit) (err error) {
	r0, er := C.getrlimit64(C.int(resource), C.uintptr_t(uintptr(unsafe.Pointer(rlim))))
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (off int64, err error) {
	r0, er := C.lseek64(C.int(fd), C.longlong(offset), C.int(whence))
	off = int64(r0)
	if r0 == -1 && er != nil {
		err = er
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
	r0, er := C.mmap(C.uintptr_t(addr), C.uintptr_t(length), C.int(prot), C.int(flags), C.int(fd), C.longlong(offset))
	xaddr = uintptr(r0)
	if uintptr(r0) == ^uintptr(0) && er != nil {
		err = er
	}
	return
}
07070100000E4D000081A4000000000000000000000001645E367C00007A22000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go    // go run mksyscall_aix_ppc64.go -aix -tags aix,ppc64 syscall_aix.go syscall_aix_ppc64.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build aix && ppc64
// +build aix,ppc64

package unix

import (
	"unsafe"
)

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, times *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, e1 := callutimes(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, e1 := callutimensat(dirfd, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), flag)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getcwd(buf []byte) (err error) {
	var _p0 *byte
	if len(buf) > 0 {
		_p0 = &buf[0]
	}
	_, e1 := callgetcwd(uintptr(unsafe.Pointer(_p0)), len(buf))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
	r0, e1 := callaccept(s, uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getdirent(fd int, buf []byte) (n int, err error) {
	var _p0 *byte
	if len(buf) > 0 {
		_p0 = &buf[0]
	}
	r0, e1 := callgetdirent(fd, uintptr(unsafe.Pointer(_p0)), len(buf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error) {
	r0, e1 := callwait4(int(pid), uintptr(unsafe.Pointer(status)), options, uintptr(unsafe.Pointer(rusage)))
	wpid = Pid_t(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctl(fd int, req int, arg uintptr) (err error) {
	_, e1 := callioctl(fd, req, arg)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) {
	_, e1 := callioctl_ptr(fd, req, arg)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func FcntlInt(fd uintptr, cmd int, arg int) (r int, err error) {
	r0, e1 := callfcntl(fd, cmd, uintptr(arg))
	r = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) {
	_, e1 := callfcntl(fd, cmd, uintptr(unsafe.Pointer(lk)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fcntl(fd int, cmd int, arg int) (val int, err error) {
	r0, e1 := callfcntl(uintptr(fd), cmd, uintptr(arg))
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fsyncRange(fd int, how int, start int64, length int64) (err error) {
	_, e1 := callfsync_range(fd, how, start, length)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Acct(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, e1 := callacct(uintptr(unsafe.Pointer(_p0)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, e1 := callchdir(uintptr(unsafe.Pointer(_p0)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chroot(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, e1 := callchroot(uintptr(unsafe.Pointer(_p0)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Close(fd int) (err error) {
	_, e1 := callclose(fd)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup(oldfd int) (fd int, err error) {
	r0, e1 := calldup(oldfd)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Exit(code int) {
	callexit(code)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, e1 := callfaccessat(dirfd, uintptr(unsafe.Pointer(_p0)), mode, flags)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchdir(fd int) (err error) {
	_, e1 := callfchdir(fd)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmod(fd int, mode uint32) (err error) {
	_, e1 := callfchmod(fd, mode)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, e1 := callfchmodat(dirfd, uintptr(unsafe.Pointer(_p0)), mode, flags)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, e1 := callfchownat(dirfd, uintptr(unsafe.Pointer(_p0)), uid, gid, flags)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fdatasync(fd int) (err error) {
	_, e1 := callfdatasync(fd)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgid(pid int) (pgid int, err error) {
	r0, e1 := callgetpgid(pid)
	pgid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgrp() (pid int) {
	r0, _ := callgetpgrp()
	pid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpid() (pid int) {
	r0, _ := callgetpid()
	pid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getppid() (ppid int) {
	r0, _ := callgetppid()
	ppid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpriority(which int, who int) (prio int, err error) {
	r0, e1 := callgetpriority(which, who)
	prio = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrusage(who int, rusage *Rusage) (err error) {
	_, e1 := callgetrusage(who, uintptr(unsafe.Pointer(rusage)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getsid(pid int) (sid int, err error) {
	r0, e1 := callgetsid(pid)
	sid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kill(pid int, sig Signal) (err error) {
	_, e1 := callkill(pid, int(sig))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Klogctl(typ int, buf []byte) (n int, err error) {
	var _p0 *byte
	if len(buf) > 0 {
		_p0 = &buf[0]
	}
	r0, e1 := callsyslog(typ, uintptr(unsafe.Pointer(_p0)), len(buf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdir(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, e1 := callmkdir(dirfd, uintptr(unsafe.Pointer(_p0)), mode)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdirat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, e1 := callmkdirat(dirfd, uintptr(unsafe.Pointer(_p0)), mode)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifo(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, e1 := callmkfifo(uintptr(unsafe.Pointer(_p0)), mode)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknod(path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, e1 := callmknod(uintptr(unsafe.Pointer(_p0)), mode, dev)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, e1 := callmknodat(dirfd, uintptr(unsafe.Pointer(_p0)), mode, dev)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
	_, e1 := callnanosleep(uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Open(path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, e1 := callopen64(uintptr(unsafe.Pointer(_p0)), mode, perm)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, e1 := callopenat(dirfd, uintptr(unsafe.Pointer(_p0)), flags, mode)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func read(fd int, p []byte) (n int, err error) {
	var _p0 *byte
	if len(p) > 0 {
		_p0 = &p[0]
	}
	r0, e1 := callread(fd, uintptr(unsafe.Pointer(_p0)), len(p))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlink(path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	if len(buf) > 0 {
		_p1 = &buf[0]
	}
	r0, e1 := callreadlink(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), len(buf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, e1 := callrenameat(olddirfd, uintptr(unsafe.Pointer(_p0)), newdirfd, uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setdomainname(p []byte) (err error) {
	var _p0 *byte
	if len(p) > 0 {
		_p0 = &p[0]
	}
	_, e1 := callsetdomainname(uintptr(unsafe.Pointer(_p0)), len(p))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sethostname(p []byte) (err error) {
	var _p0 *byte
	if len(p) > 0 {
		_p0 = &p[0]
	}
	_, e1 := callsethostname(uintptr(unsafe.Pointer(_p0)), len(p))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpgid(pid int, pgid int) (err error) {
	_, e1 := callsetpgid(pid, pgid)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setsid() (pid int, err error) {
	r0, e1 := callsetsid()
	pid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Settimeofday(tv *Timeval) (err error) {
	_, e1 := callsettimeofday(uintptr(unsafe.Pointer(tv)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setuid(uid int) (err error) {
	_, e1 := callsetuid(uid)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setgid(uid int) (err error) {
	_, e1 := callsetgid(uid)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpriority(which int, who int, prio int) (err error) {
	_, e1 := callsetpriority(which, who, prio)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, e1 := callstatx(dirfd, uintptr(unsafe.Pointer(_p0)), flags, mask, uintptr(unsafe.Pointer(stat)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sync() {
	callsync()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Times(tms *Tms) (ticks uintptr, err error) {
	r0, e1 := calltimes(uintptr(unsafe.Pointer(tms)))
	ticks = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Umask(mask int) (oldmask int) {
	r0, _ := callumask(mask)
	oldmask = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Uname(buf *Utsname) (err error) {
	_, e1 := calluname(uintptr(unsafe.Pointer(buf)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlink(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, e1 := callunlink(uintptr(unsafe.Pointer(_p0)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlinkat(dirfd int, path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, e1 := callunlinkat(dirfd, uintptr(unsafe.Pointer(_p0)), flags)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ustat(dev int, ubuf *Ustat_t) (err error) {
	_, e1 := callustat(dev, uintptr(unsafe.Pointer(ubuf)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func write(fd int, p []byte) (n int, err error) {
	var _p0 *byte
	if len(p) > 0 {
		_p0 = &p[0]
	}
	r0, e1 := callwrite(fd, uintptr(unsafe.Pointer(_p0)), len(p))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func readlen(fd int, p *byte, np int) (n int, err error) {
	r0, e1 := callread(fd, uintptr(unsafe.Pointer(p)), np)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func writelen(fd int, p *byte, np int) (n int, err error) {
	r0, e1 := callwrite(fd, uintptr(unsafe.Pointer(p)), np)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup2(oldfd int, newfd int) (err error) {
	_, e1 := calldup2(oldfd, newfd)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
	_, e1 := callposix_fadvise64(fd, offset, length, advice)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, e1 := callfchown(fd, uid, gid)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fstat(fd int, stat *Stat_t) (err error) {
	_, e1 := callfstat(fd, uintptr(unsafe.Pointer(stat)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, e1 := callfstatat(dirfd, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), flags)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatfs(fd int, buf *Statfs_t) (err error) {
	_, e1 := callfstatfs(fd, uintptr(unsafe.Pointer(buf)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, e1 := callftruncate(fd, length)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _ := callgetegid()
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (euid int) {
	r0, _ := callgeteuid()
	euid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _ := callgetgid()
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _ := callgetuid()
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, e1 := calllchown(uintptr(unsafe.Pointer(_p0)), uid, gid)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, n int) (err error) {
	_, e1 := calllisten(s, n)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func lstat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, e1 := calllstat(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pause() (err error) {
	_, e1 := callpause()
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 *byte
	if len(p) > 0 {
		_p0 = &p[0]
	}
	r0, e1 := callpread64(fd, uintptr(unsafe.Pointer(_p0)), len(p), offset)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 *byte
	if len(p) > 0 {
		_p0 = &p[0]
	}
	r0, e1 := callpwrite64(fd, uintptr(unsafe.Pointer(_p0)), len(p), offset)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, e1 := callselect(nfd, uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
	r0, e1 := callpselect(nfd, uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setregid(rgid int, egid int) (err error) {
	_, e1 := callsetregid(rgid, egid)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setreuid(ruid int, euid int) (err error) {
	_, e1 := callsetreuid(ruid, euid)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(fd int, how int) (err error) {
	_, e1 := callshutdown(fd, how)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
	r0, e1 := callsplice(rfd, uintptr(unsafe.Pointer(roff)), wfd, uintptr(unsafe.Pointer(woff)), len, flags)
	n = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func stat(path string, statptr *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, e1 := callstat(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(statptr)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statfs(path string, buf *Statfs_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, e1 := callstatfs(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, e1 := calltruncate(uintptr(unsafe.Pointer(_p0)), length)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, e1 := callbind(s, uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, e1 := callconnect(s, uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(n int, list *_Gid_t) (nn int, err error) {
	r0, e1 := callgetgroups(n, uintptr(unsafe.Pointer(list)))
	nn = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(n int, list *_Gid_t) (err error) {
	_, e1 := callsetgroups(n, uintptr(unsafe.Pointer(list)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, e1 := callgetsockopt(s, level, name, uintptr(val), uintptr(unsafe.Pointer(vallen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, e1 := callsetsockopt(s, level, name, uintptr(val), vallen)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, e1 := callsocket(domain, typ, proto)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, e1 := callsocketpair(domain, typ, proto, uintptr(unsafe.Pointer(fd)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, e1 := callgetpeername(fd, uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, e1 := callgetsockname(fd, uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 *byte
	if len(p) > 0 {
		_p0 = &p[0]
	}
	r0, e1 := callrecvfrom(fd, uintptr(unsafe.Pointer(_p0)), len(p), flags, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 *byte
	if len(buf) > 0 {
		_p0 = &buf[0]
	}
	_, e1 := callsendto(s, uintptr(unsafe.Pointer(_p0)), len(buf), flags, uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, e1 := callnrecvmsg(s, uintptr(unsafe.Pointer(msg)), flags)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, e1 := callnsendmsg(s, uintptr(unsafe.Pointer(msg)), flags)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func munmap(addr uintptr, length uintptr) (err error) {
	_, e1 := callmunmap(addr, length)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Madvise(b []byte, advice int) (err error) {
	var _p0 *byte
	if len(b) > 0 {
		_p0 = &b[0]
	}
	_, e1 := callmadvise(uintptr(unsafe.Pointer(_p0)), len(b), advice)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mprotect(b []byte, prot int) (err error) {
	var _p0 *byte
	if len(b) > 0 {
		_p0 = &b[0]
	}
	_, e1 := callmprotect(uintptr(unsafe.Pointer(_p0)), len(b), prot)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlock(b []byte) (err error) {
	var _p0 *byte
	if len(b) > 0 {
		_p0 = &b[0]
	}
	_, e1 := callmlock(uintptr(unsafe.Pointer(_p0)), len(b))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlockall(flags int) (err error) {
	_, e1 := callmlockall(flags)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Msync(b []byte, flags int) (err error) {
	var _p0 *byte
	if len(b) > 0 {
		_p0 = &b[0]
	}
	_, e1 := callmsync(uintptr(unsafe.Pointer(_p0)), len(b), flags)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlock(b []byte) (err error) {
	var _p0 *byte
	if len(b) > 0 {
		_p0 = &b[0]
	}
	_, e1 := callmunlock(uintptr(unsafe.Pointer(_p0)), len(b))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlockall() (err error) {
	_, e1 := callmunlockall()
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pipe(p *[2]_C_int) (err error) {
	_, e1 := callpipe(uintptr(unsafe.Pointer(p)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
	r0, e1 := callpoll(uintptr(unsafe.Pointer(fds)), nfds, timeout)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func gettimeofday(tv *Timeval, tzp *Timezone) (err error) {
	_, e1 := callgettimeofday(uintptr(unsafe.Pointer(tv)), uintptr(unsafe.Pointer(tzp)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Time(t *Time_t) (tt Time_t, err error) {
	r0, e1 := calltime(uintptr(unsafe.Pointer(t)))
	tt = Time_t(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Utime(path string, buf *Utimbuf) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, e1 := callutime(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getsystemcfg(label int) (n uint64) {
	r0, _ := callgetsystemcfg(label)
	n = uint64(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func umount(target string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(target)
	if err != nil {
		return
	}
	_, e1 := callumount(uintptr(unsafe.Pointer(_p0)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(resource int, rlim *Rlimit) (err error) {
	_, e1 := callgetrlimit(resource, uintptr(unsafe.Pointer(rlim)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (off int64, err error) {
	r0, e1 := calllseek(fd, offset, whence)
	off = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
	r0, e1 := callmmap64(addr, length, prot, flags, fd, offset)
	xaddr = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
  07070100000E4E000081A4000000000000000000000001645E367C0000A9D4000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go // go run mksyscall_aix_ppc64.go -aix -tags aix,ppc64 syscall_aix.go syscall_aix_ppc64.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build aix && ppc64 && gc
// +build aix,ppc64,gc

package unix

import (
	"unsafe"
)

//go:cgo_import_dynamic libc_utimes utimes "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_utimensat utimensat "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_getcwd getcwd "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_accept accept "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_getdirent getdirent "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_wait4 wait4 "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_ioctl ioctl "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_fcntl fcntl "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_fsync_range fsync_range "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_acct acct "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_chdir chdir "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_chroot chroot "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_close close "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_dup dup "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_exit exit "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_faccessat faccessat "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_fchdir fchdir "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_fchmod fchmod "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_fchownat fchownat "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_fdatasync fdatasync "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_getpgid getpgid "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_getpid getpid "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_getppid getppid "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_getpriority getpriority "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_getrusage getrusage "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_getsid getsid "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_kill kill "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_syslog syslog "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_mkdir mkdir "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_mknod mknod "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_mknodat mknodat "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_open64 open64 "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_openat openat "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_read read "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_readlink readlink "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_renameat renameat "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_setdomainname setdomainname "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_sethostname sethostname "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_setpgid setpgid "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_setsid setsid "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_settimeofday settimeofday "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_setuid setuid "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_setgid setgid "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_setpriority setpriority "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_statx statx "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_sync sync "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_times times "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_umask umask "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_uname uname "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_unlink unlink "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_ustat ustat "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_write write "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_dup2 dup2 "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_posix_fadvise64 posix_fadvise64 "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_fchown fchown "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_fstat fstat "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_fstatat fstatat "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_fstatfs fstatfs "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_getegid getegid "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_geteuid geteuid "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_getgid getgid "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_getuid getuid "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_lchown lchown "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_listen listen "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_lstat lstat "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_pause pause "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_pread64 pread64 "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_pwrite64 pwrite64 "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_select select "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_pselect pselect "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_setregid setregid "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_setreuid setreuid "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_shutdown shutdown "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_splice splice "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_stat stat "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_statfs statfs "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_truncate truncate "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_bind bind "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_connect connect "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_getgroups getgroups "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_setgroups setgroups "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_getsockopt getsockopt "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_setsockopt setsockopt "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_socket socket "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_socketpair socketpair "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_getpeername getpeername "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_getsockname getsockname "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_recvfrom recvfrom "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_sendto sendto "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_nrecvmsg nrecvmsg "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_nsendmsg nsendmsg "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_munmap munmap "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_madvise madvise "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_mprotect mprotect "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_mlock mlock "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_mlockall mlockall "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_msync msync "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_munlock munlock "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_munlockall munlockall "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_pipe pipe "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_poll poll "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_time time "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_utime utime "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_getsystemcfg getsystemcfg "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_umount umount "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_lseek lseek "libc.a/shr_64.o"
//go:cgo_import_dynamic libc_mmap64 mmap64 "libc.a/shr_64.o"

//go:linkname libc_utimes libc_utimes
//go:linkname libc_utimensat libc_utimensat
//go:linkname libc_getcwd libc_getcwd
//go:linkname libc_accept libc_accept
//go:linkname libc_getdirent libc_getdirent
//go:linkname libc_wait4 libc_wait4
//go:linkname libc_ioctl libc_ioctl
//go:linkname libc_fcntl libc_fcntl
//go:linkname libc_fsync_range libc_fsync_range
//go:linkname libc_acct libc_acct
//go:linkname libc_chdir libc_chdir
//go:linkname libc_chroot libc_chroot
//go:linkname libc_close libc_close
//go:linkname libc_dup libc_dup
//go:linkname libc_exit libc_exit
//go:linkname libc_faccessat libc_faccessat
//go:linkname libc_fchdir libc_fchdir
//go:linkname libc_fchmod libc_fchmod
//go:linkname libc_fchmodat libc_fchmodat
//go:linkname libc_fchownat libc_fchownat
//go:linkname libc_fdatasync libc_fdatasync
//go:linkname libc_getpgid libc_getpgid
//go:linkname libc_getpgrp libc_getpgrp
//go:linkname libc_getpid libc_getpid
//go:linkname libc_getppid libc_getppid
//go:linkname libc_getpriority libc_getpriority
//go:linkname libc_getrusage libc_getrusage
//go:linkname libc_getsid libc_getsid
//go:linkname libc_kill libc_kill
//go:linkname libc_syslog libc_syslog
//go:linkname libc_mkdir libc_mkdir
//go:linkname libc_mkdirat libc_mkdirat
//go:linkname libc_mkfifo libc_mkfifo
//go:linkname libc_mknod libc_mknod
//go:linkname libc_mknodat libc_mknodat
//go:linkname libc_nanosleep libc_nanosleep
//go:linkname libc_open64 libc_open64
//go:linkname libc_openat libc_openat
//go:linkname libc_read libc_read
//go:linkname libc_readlink libc_readlink
//go:linkname libc_renameat libc_renameat
//go:linkname libc_setdomainname libc_setdomainname
//go:linkname libc_sethostname libc_sethostname
//go:linkname libc_setpgid libc_setpgid
//go:linkname libc_setsid libc_setsid
//go:linkname libc_settimeofday libc_settimeofday
//go:linkname libc_setuid libc_setuid
//go:linkname libc_setgid libc_setgid
//go:linkname libc_setpriority libc_setpriority
//go:linkname libc_statx libc_statx
//go:linkname libc_sync libc_sync
//go:linkname libc_times libc_times
//go:linkname libc_umask libc_umask
//go:linkname libc_uname libc_uname
//go:linkname libc_unlink libc_unlink
//go:linkname libc_unlinkat libc_unlinkat
//go:linkname libc_ustat libc_ustat
//go:linkname libc_write libc_write
//go:linkname libc_dup2 libc_dup2
//go:linkname libc_posix_fadvise64 libc_posix_fadvise64
//go:linkname libc_fchown libc_fchown
//go:linkname libc_fstat libc_fstat
//go:linkname libc_fstatat libc_fstatat
//go:linkname libc_fstatfs libc_fstatfs
//go:linkname libc_ftruncate libc_ftruncate
//go:linkname libc_getegid libc_getegid
//go:linkname libc_geteuid libc_geteuid
//go:linkname libc_getgid libc_getgid
//go:linkname libc_getuid libc_getuid
//go:linkname libc_lchown libc_lchown
//go:linkname libc_listen libc_listen
//go:linkname libc_lstat libc_lstat
//go:linkname libc_pause libc_pause
//go:linkname libc_pread64 libc_pread64
//go:linkname libc_pwrite64 libc_pwrite64
//go:linkname libc_select libc_select
//go:linkname libc_pselect libc_pselect
//go:linkname libc_setregid libc_setregid
//go:linkname libc_setreuid libc_setreuid
//go:linkname libc_shutdown libc_shutdown
//go:linkname libc_splice libc_splice
//go:linkname libc_stat libc_stat
//go:linkname libc_statfs libc_statfs
//go:linkname libc_truncate libc_truncate
//go:linkname libc_bind libc_bind
//go:linkname libc_connect libc_connect
//go:linkname libc_getgroups libc_getgroups
//go:linkname libc_setgroups libc_setgroups
//go:linkname libc_getsockopt libc_getsockopt
//go:linkname libc_setsockopt libc_setsockopt
//go:linkname libc_socket libc_socket
//go:linkname libc_socketpair libc_socketpair
//go:linkname libc_getpeername libc_getpeername
//go:linkname libc_getsockname libc_getsockname
//go:linkname libc_recvfrom libc_recvfrom
//go:linkname libc_sendto libc_sendto
//go:linkname libc_nrecvmsg libc_nrecvmsg
//go:linkname libc_nsendmsg libc_nsendmsg
//go:linkname libc_munmap libc_munmap
//go:linkname libc_madvise libc_madvise
//go:linkname libc_mprotect libc_mprotect
//go:linkname libc_mlock libc_mlock
//go:linkname libc_mlockall libc_mlockall
//go:linkname libc_msync libc_msync
//go:linkname libc_munlock libc_munlock
//go:linkname libc_munlockall libc_munlockall
//go:linkname libc_pipe libc_pipe
//go:linkname libc_poll libc_poll
//go:linkname libc_gettimeofday libc_gettimeofday
//go:linkname libc_time libc_time
//go:linkname libc_utime libc_utime
//go:linkname libc_getsystemcfg libc_getsystemcfg
//go:linkname libc_umount libc_umount
//go:linkname libc_getrlimit libc_getrlimit
//go:linkname libc_lseek libc_lseek
//go:linkname libc_mmap64 libc_mmap64

type syscallFunc uintptr

var (
	libc_utimes,
	libc_utimensat,
	libc_getcwd,
	libc_accept,
	libc_getdirent,
	libc_wait4,
	libc_ioctl,
	libc_fcntl,
	libc_fsync_range,
	libc_acct,
	libc_chdir,
	libc_chroot,
	libc_close,
	libc_dup,
	libc_exit,
	libc_faccessat,
	libc_fchdir,
	libc_fchmod,
	libc_fchmodat,
	libc_fchownat,
	libc_fdatasync,
	libc_getpgid,
	libc_getpgrp,
	libc_getpid,
	libc_getppid,
	libc_getpriority,
	libc_getrusage,
	libc_getsid,
	libc_kill,
	libc_syslog,
	libc_mkdir,
	libc_mkdirat,
	libc_mkfifo,
	libc_mknod,
	libc_mknodat,
	libc_nanosleep,
	libc_open64,
	libc_openat,
	libc_read,
	libc_readlink,
	libc_renameat,
	libc_setdomainname,
	libc_sethostname,
	libc_setpgid,
	libc_setsid,
	libc_settimeofday,
	libc_setuid,
	libc_setgid,
	libc_setpriority,
	libc_statx,
	libc_sync,
	libc_times,
	libc_umask,
	libc_uname,
	libc_unlink,
	libc_unlinkat,
	libc_ustat,
	libc_write,
	libc_dup2,
	libc_posix_fadvise64,
	libc_fchown,
	libc_fstat,
	libc_fstatat,
	libc_fstatfs,
	libc_ftruncate,
	libc_getegid,
	libc_geteuid,
	libc_getgid,
	libc_getuid,
	libc_lchown,
	libc_listen,
	libc_lstat,
	libc_pause,
	libc_pread64,
	libc_pwrite64,
	libc_select,
	libc_pselect,
	libc_setregid,
	libc_setreuid,
	libc_shutdown,
	libc_splice,
	libc_stat,
	libc_statfs,
	libc_truncate,
	libc_bind,
	libc_connect,
	libc_getgroups,
	libc_setgroups,
	libc_getsockopt,
	libc_setsockopt,
	libc_socket,
	libc_socketpair,
	libc_getpeername,
	libc_getsockname,
	libc_recvfrom,
	libc_sendto,
	libc_nrecvmsg,
	libc_nsendmsg,
	libc_munmap,
	libc_madvise,
	libc_mprotect,
	libc_mlock,
	libc_mlockall,
	libc_msync,
	libc_munlock,
	libc_munlockall,
	libc_pipe,
	libc_poll,
	libc_gettimeofday,
	libc_time,
	libc_utime,
	libc_getsystemcfg,
	libc_umount,
	libc_getrlimit,
	libc_lseek,
	libc_mmap64 syscallFunc
)

// Implemented in runtime/syscall_aix.go.
func rawSyscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
func syscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callutimes(_p0 uintptr, times uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_utimes)), 2, _p0, times, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callutimensat(dirfd int, _p0 uintptr, times uintptr, flag int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_utimensat)), 4, uintptr(dirfd), _p0, times, uintptr(flag), 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetcwd(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getcwd)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callaccept(s int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_accept)), 3, uintptr(s), rsa, addrlen, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetdirent(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getdirent)), 3, uintptr(fd), _p0, uintptr(_lenp0), 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callwait4(pid int, status uintptr, options int, rusage uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_wait4)), 4, uintptr(pid), status, uintptr(options), rusage, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callioctl(fd int, req int, arg uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ioctl)), 3, uintptr(fd), uintptr(req), arg, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callioctl_ptr(fd int, req int, arg unsafe.Pointer) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callfcntl(fd uintptr, cmd int, arg uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fcntl)), 3, fd, uintptr(cmd), arg, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callfsync_range(fd int, how int, start int64, length int64) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fsync_range)), 4, uintptr(fd), uintptr(how), uintptr(start), uintptr(length), 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callacct(_p0 uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_acct)), 1, _p0, 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callchdir(_p0 uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_chdir)), 1, _p0, 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callchroot(_p0 uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_chroot)), 1, _p0, 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callclose(fd int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_close)), 1, uintptr(fd), 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func calldup(oldfd int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_dup)), 1, uintptr(oldfd), 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callexit(code int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_exit)), 1, uintptr(code), 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callfaccessat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_faccessat)), 4, uintptr(dirfd), _p0, uintptr(mode), uintptr(flags), 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callfchdir(fd int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchdir)), 1, uintptr(fd), 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callfchmod(fd int, mode uint32) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchmod)), 2, uintptr(fd), uintptr(mode), 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callfchmodat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchmodat)), 4, uintptr(dirfd), _p0, uintptr(mode), uintptr(flags), 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callfchownat(dirfd int, _p0 uintptr, uid int, gid int, flags int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchownat)), 5, uintptr(dirfd), _p0, uintptr(uid), uintptr(gid), uintptr(flags), 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callfdatasync(fd int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fdatasync)), 1, uintptr(fd), 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetpgid(pid int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetpgrp() (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getpgrp)), 0, 0, 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetpid() (r1 uintptr, e1 Errno) {
	r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpid)), 0, 0, 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetppid() (r1 uintptr, e1 Errno) {
	r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getppid)), 0, 0, 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetpriority(which int, who int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getpriority)), 2, uintptr(which), uintptr(who), 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetrusage(who int, rusage uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getrusage)), 2, uintptr(who), rusage, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetsid(pid int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getsid)), 1, uintptr(pid), 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callkill(pid int, sig int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_kill)), 2, uintptr(pid), uintptr(sig), 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsyslog(typ int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_syslog)), 3, uintptr(typ), _p0, uintptr(_lenp0), 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmkdir(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mkdir)), 3, uintptr(dirfd), _p0, uintptr(mode), 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmkdirat(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mkdirat)), 3, uintptr(dirfd), _p0, uintptr(mode), 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmkfifo(_p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mkfifo)), 2, _p0, uintptr(mode), 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmknod(_p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mknod)), 3, _p0, uintptr(mode), uintptr(dev), 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmknodat(dirfd int, _p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mknodat)), 4, uintptr(dirfd), _p0, uintptr(mode), uintptr(dev), 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callnanosleep(time uintptr, leftover uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_nanosleep)), 2, time, leftover, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callopen64(_p0 uintptr, mode int, perm uint32) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_open64)), 3, _p0, uintptr(mode), uintptr(perm), 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callopenat(dirfd int, _p0 uintptr, flags int, mode uint32) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_openat)), 4, uintptr(dirfd), _p0, uintptr(flags), uintptr(mode), 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callread(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_read)), 3, uintptr(fd), _p0, uintptr(_lenp0), 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callreadlink(_p0 uintptr, _p1 uintptr, _lenp1 int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_readlink)), 3, _p0, _p1, uintptr(_lenp1), 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callrenameat(olddirfd int, _p0 uintptr, newdirfd int, _p1 uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_renameat)), 4, uintptr(olddirfd), _p0, uintptr(newdirfd), _p1, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsetdomainname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setdomainname)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsethostname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sethostname)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsetpgid(pid int, pgid int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setpgid)), 2, uintptr(pid), uintptr(pgid), 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsetsid() (r1 uintptr, e1 Errno) {
	r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setsid)), 0, 0, 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsettimeofday(tv uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_settimeofday)), 1, tv, 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsetuid(uid int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setuid)), 1, uintptr(uid), 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsetgid(uid int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setgid)), 1, uintptr(uid), 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsetpriority(which int, who int, prio int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setpriority)), 3, uintptr(which), uintptr(who), uintptr(prio), 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callstatx(dirfd int, _p0 uintptr, flags int, mask int, stat uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_statx)), 5, uintptr(dirfd), _p0, uintptr(flags), uintptr(mask), stat, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsync() (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sync)), 0, 0, 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func calltimes(tms uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_times)), 1, tms, 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callumask(mask int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_umask)), 1, uintptr(mask), 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func calluname(buf uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_uname)), 1, buf, 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callunlink(_p0 uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_unlink)), 1, _p0, 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callunlinkat(dirfd int, _p0 uintptr, flags int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_unlinkat)), 3, uintptr(dirfd), _p0, uintptr(flags), 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callustat(dev int, ubuf uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ustat)), 2, uintptr(dev), ubuf, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callwrite(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_write)), 3, uintptr(fd), _p0, uintptr(_lenp0), 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func calldup2(oldfd int, newfd int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_dup2)), 2, uintptr(oldfd), uintptr(newfd), 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callposix_fadvise64(fd int, offset int64, length int64, advice int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_posix_fadvise64)), 4, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callfchown(fd int, uid int, gid int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchown)), 3, uintptr(fd), uintptr(uid), uintptr(gid), 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callfstat(fd int, stat uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fstat)), 2, uintptr(fd), stat, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callfstatat(dirfd int, _p0 uintptr, stat uintptr, flags int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fstatat)), 4, uintptr(dirfd), _p0, stat, uintptr(flags), 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callfstatfs(fd int, buf uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fstatfs)), 2, uintptr(fd), buf, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callftruncate(fd int, length int64) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ftruncate)), 2, uintptr(fd), uintptr(length), 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetegid() (r1 uintptr, e1 Errno) {
	r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getegid)), 0, 0, 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgeteuid() (r1 uintptr, e1 Errno) {
	r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_geteuid)), 0, 0, 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetgid() (r1 uintptr, e1 Errno) {
	r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getgid)), 0, 0, 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetuid() (r1 uintptr, e1 Errno) {
	r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getuid)), 0, 0, 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func calllchown(_p0 uintptr, uid int, gid int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lchown)), 3, _p0, uintptr(uid), uintptr(gid), 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func calllisten(s int, n int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_listen)), 2, uintptr(s), uintptr(n), 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func calllstat(_p0 uintptr, stat uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lstat)), 2, _p0, stat, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callpause() (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pause)), 0, 0, 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callpread64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pread64)), 4, uintptr(fd), _p0, uintptr(_lenp0), uintptr(offset), 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callpwrite64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pwrite64)), 4, uintptr(fd), _p0, uintptr(_lenp0), uintptr(offset), 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_select)), 5, uintptr(nfd), r, w, e, timeout, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callpselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr, sigmask uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pselect)), 6, uintptr(nfd), r, w, e, timeout, sigmask)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsetregid(rgid int, egid int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setregid)), 2, uintptr(rgid), uintptr(egid), 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsetreuid(ruid int, euid int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setreuid)), 2, uintptr(ruid), uintptr(euid), 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callshutdown(fd int, how int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_shutdown)), 2, uintptr(fd), uintptr(how), 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsplice(rfd int, roff uintptr, wfd int, woff uintptr, len int, flags int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_splice)), 6, uintptr(rfd), roff, uintptr(wfd), woff, uintptr(len), uintptr(flags))
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callstat(_p0 uintptr, statptr uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_stat)), 2, _p0, statptr, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callstatfs(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_statfs)), 2, _p0, buf, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func calltruncate(_p0 uintptr, length int64) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_truncate)), 2, _p0, uintptr(length), 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callbind(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_bind)), 3, uintptr(s), addr, addrlen, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callconnect(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_connect)), 3, uintptr(s), addr, addrlen, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getgroups)), 2, uintptr(n), list, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setgroups)), 2, uintptr(n), list, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), val, vallen, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), val, vallen, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsocket(domain int, typ int, proto int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_socket)), 3, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsocketpair(domain int, typ int, proto int, fd uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_socketpair)), 4, uintptr(domain), uintptr(typ), uintptr(proto), fd, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetpeername(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpeername)), 3, uintptr(fd), rsa, addrlen, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetsockname(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getsockname)), 3, uintptr(fd), rsa, addrlen, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callrecvfrom(fd int, _p0 uintptr, _lenp0 int, flags int, from uintptr, fromlen uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_recvfrom)), 6, uintptr(fd), _p0, uintptr(_lenp0), uintptr(flags), from, fromlen)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsendto(s int, _p0 uintptr, _lenp0 int, flags int, to uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sendto)), 6, uintptr(s), _p0, uintptr(_lenp0), uintptr(flags), to, addrlen)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callnrecvmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_nrecvmsg)), 3, uintptr(s), msg, uintptr(flags), 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callnsendmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_nsendmsg)), 3, uintptr(s), msg, uintptr(flags), 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmunmap(addr uintptr, length uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_munmap)), 2, addr, length, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmadvise(_p0 uintptr, _lenp0 int, advice int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_madvise)), 3, _p0, uintptr(_lenp0), uintptr(advice), 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmprotect(_p0 uintptr, _lenp0 int, prot int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mprotect)), 3, _p0, uintptr(_lenp0), uintptr(prot), 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mlock)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmlockall(flags int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mlockall)), 1, uintptr(flags), 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmsync(_p0 uintptr, _lenp0 int, flags int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_msync)), 3, _p0, uintptr(_lenp0), uintptr(flags), 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmunlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_munlock)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmunlockall() (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_munlockall)), 0, 0, 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callpipe(p uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_pipe)), 1, p, 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callpoll(fds uintptr, nfds int, timeout int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_poll)), 3, fds, uintptr(nfds), uintptr(timeout), 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgettimeofday(tv uintptr, tzp uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_gettimeofday)), 2, tv, tzp, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func calltime(t uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_time)), 1, t, 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callutime(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_utime)), 2, _p0, buf, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetsystemcfg(label int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getsystemcfg)), 1, uintptr(label), 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callumount(_p0 uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_umount)), 1, _p0, 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) {
	r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getrlimit)), 2, uintptr(resource), rlim, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func calllseek(fd int, offset int64, whence int) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lseek)), 3, uintptr(fd), uintptr(offset), uintptr(whence), 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmmap64(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (r1 uintptr, e1 Errno) {
	r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mmap64)), 6, addr, length, uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))
	return
}
07070100000E4F000081A4000000000000000000000001645E367C00007B83000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go  // go run mksyscall_aix_ppc64.go -aix -tags aix,ppc64 syscall_aix.go syscall_aix_ppc64.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build aix && ppc64 && gccgo
// +build aix,ppc64,gccgo

package unix

/*
#include <stdint.h>
int utimes(uintptr_t, uintptr_t);
int utimensat(int, uintptr_t, uintptr_t, int);
int getcwd(uintptr_t, size_t);
int accept(int, uintptr_t, uintptr_t);
int getdirent(int, uintptr_t, size_t);
int wait4(int, uintptr_t, int, uintptr_t);
int ioctl(int, int, uintptr_t);
int fcntl(uintptr_t, int, uintptr_t);
int fsync_range(int, int, long long, long long);
int acct(uintptr_t);
int chdir(uintptr_t);
int chroot(uintptr_t);
int close(int);
int dup(int);
void exit(int);
int faccessat(int, uintptr_t, unsigned int, int);
int fchdir(int);
int fchmod(int, unsigned int);
int fchmodat(int, uintptr_t, unsigned int, int);
int fchownat(int, uintptr_t, int, int, int);
int fdatasync(int);
int getpgid(int);
int getpgrp();
int getpid();
int getppid();
int getpriority(int, int);
int getrusage(int, uintptr_t);
int getsid(int);
int kill(int, int);
int syslog(int, uintptr_t, size_t);
int mkdir(int, uintptr_t, unsigned int);
int mkdirat(int, uintptr_t, unsigned int);
int mkfifo(uintptr_t, unsigned int);
int mknod(uintptr_t, unsigned int, int);
int mknodat(int, uintptr_t, unsigned int, int);
int nanosleep(uintptr_t, uintptr_t);
int open64(uintptr_t, int, unsigned int);
int openat(int, uintptr_t, int, unsigned int);
int read(int, uintptr_t, size_t);
int readlink(uintptr_t, uintptr_t, size_t);
int renameat(int, uintptr_t, int, uintptr_t);
int setdomainname(uintptr_t, size_t);
int sethostname(uintptr_t, size_t);
int setpgid(int, int);
int setsid();
int settimeofday(uintptr_t);
int setuid(int);
int setgid(int);
int setpriority(int, int, int);
int statx(int, uintptr_t, int, int, uintptr_t);
int sync();
uintptr_t times(uintptr_t);
int umask(int);
int uname(uintptr_t);
int unlink(uintptr_t);
int unlinkat(int, uintptr_t, int);
int ustat(int, uintptr_t);
int write(int, uintptr_t, size_t);
int dup2(int, int);
int posix_fadvise64(int, long long, long long, int);
int fchown(int, int, int);
int fstat(int, uintptr_t);
int fstatat(int, uintptr_t, uintptr_t, int);
int fstatfs(int, uintptr_t);
int ftruncate(int, long long);
int getegid();
int geteuid();
int getgid();
int getuid();
int lchown(uintptr_t, int, int);
int listen(int, int);
int lstat(uintptr_t, uintptr_t);
int pause();
int pread64(int, uintptr_t, size_t, long long);
int pwrite64(int, uintptr_t, size_t, long long);
#define c_select select
int select(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t);
int pselect(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);
int setregid(int, int);
int setreuid(int, int);
int shutdown(int, int);
long long splice(int, uintptr_t, int, uintptr_t, int, int);
int stat(uintptr_t, uintptr_t);
int statfs(uintptr_t, uintptr_t);
int truncate(uintptr_t, long long);
int bind(int, uintptr_t, uintptr_t);
int connect(int, uintptr_t, uintptr_t);
int getgroups(int, uintptr_t);
int setgroups(int, uintptr_t);
int getsockopt(int, int, int, uintptr_t, uintptr_t);
int setsockopt(int, int, int, uintptr_t, uintptr_t);
int socket(int, int, int);
int socketpair(int, int, int, uintptr_t);
int getpeername(int, uintptr_t, uintptr_t);
int getsockname(int, uintptr_t, uintptr_t);
int recvfrom(int, uintptr_t, size_t, int, uintptr_t, uintptr_t);
int sendto(int, uintptr_t, size_t, int, uintptr_t, uintptr_t);
int nrecvmsg(int, uintptr_t, int);
int nsendmsg(int, uintptr_t, int);
int munmap(uintptr_t, uintptr_t);
int madvise(uintptr_t, size_t, int);
int mprotect(uintptr_t, size_t, int);
int mlock(uintptr_t, size_t);
int mlockall(int);
int msync(uintptr_t, size_t, int);
int munlock(uintptr_t, size_t);
int munlockall();
int pipe(uintptr_t);
int poll(uintptr_t, int, int);
int gettimeofday(uintptr_t, uintptr_t);
int time(uintptr_t);
int utime(uintptr_t, uintptr_t);
unsigned long long getsystemcfg(int);
int umount(uintptr_t);
int getrlimit(int, uintptr_t);
long long lseek(int, long long, int);
uintptr_t mmap64(uintptr_t, uintptr_t, int, int, int, long long);

*/
import "C"
import (
	"syscall"
	"unsafe"
)

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callutimes(_p0 uintptr, times uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.utimes(C.uintptr_t(_p0), C.uintptr_t(times)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callutimensat(dirfd int, _p0 uintptr, times uintptr, flag int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.utimensat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(times), C.int(flag)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetcwd(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.getcwd(C.uintptr_t(_p0), C.size_t(_lenp0)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callaccept(s int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.accept(C.int(s), C.uintptr_t(rsa), C.uintptr_t(addrlen)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetdirent(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.getdirent(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callwait4(pid int, status uintptr, options int, rusage uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.wait4(C.int(pid), C.uintptr_t(status), C.int(options), C.uintptr_t(rusage)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callioctl(fd int, req int, arg uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.ioctl(C.int(fd), C.int(req), C.uintptr_t(arg)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callioctl_ptr(fd int, req int, arg unsafe.Pointer) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.ioctl(C.int(fd), C.int(req), C.uintptr_t(uintptr(arg))))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callfcntl(fd uintptr, cmd int, arg uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callfsync_range(fd int, how int, start int64, length int64) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.fsync_range(C.int(fd), C.int(how), C.longlong(start), C.longlong(length)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callacct(_p0 uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.acct(C.uintptr_t(_p0)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callchdir(_p0 uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.chdir(C.uintptr_t(_p0)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callchroot(_p0 uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.chroot(C.uintptr_t(_p0)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callclose(fd int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.close(C.int(fd)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func calldup(oldfd int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.dup(C.int(oldfd)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callexit(code int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.exit(C.int(code)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callfaccessat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.faccessat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callfchdir(fd int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.fchdir(C.int(fd)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callfchmod(fd int, mode uint32) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.fchmod(C.int(fd), C.uint(mode)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callfchmodat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.fchmodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callfchownat(dirfd int, _p0 uintptr, uid int, gid int, flags int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.fchownat(C.int(dirfd), C.uintptr_t(_p0), C.int(uid), C.int(gid), C.int(flags)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callfdatasync(fd int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.fdatasync(C.int(fd)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetpgid(pid int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.getpgid(C.int(pid)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetpgrp() (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.getpgrp())
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetpid() (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.getpid())
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetppid() (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.getppid())
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetpriority(which int, who int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.getpriority(C.int(which), C.int(who)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetrusage(who int, rusage uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.getrusage(C.int(who), C.uintptr_t(rusage)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetsid(pid int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.getsid(C.int(pid)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callkill(pid int, sig int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.kill(C.int(pid), C.int(sig)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsyslog(typ int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.syslog(C.int(typ), C.uintptr_t(_p0), C.size_t(_lenp0)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmkdir(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.mkdir(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmkdirat(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.mkdirat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmkfifo(_p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.mkfifo(C.uintptr_t(_p0), C.uint(mode)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmknod(_p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.mknod(C.uintptr_t(_p0), C.uint(mode), C.int(dev)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmknodat(dirfd int, _p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.mknodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(dev)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callnanosleep(time uintptr, leftover uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.nanosleep(C.uintptr_t(time), C.uintptr_t(leftover)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callopen64(_p0 uintptr, mode int, perm uint32) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.open64(C.uintptr_t(_p0), C.int(mode), C.uint(perm)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callopenat(dirfd int, _p0 uintptr, flags int, mode uint32) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.openat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.uint(mode)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callread(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.read(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callreadlink(_p0 uintptr, _p1 uintptr, _lenp1 int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.readlink(C.uintptr_t(_p0), C.uintptr_t(_p1), C.size_t(_lenp1)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callrenameat(olddirfd int, _p0 uintptr, newdirfd int, _p1 uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.renameat(C.int(olddirfd), C.uintptr_t(_p0), C.int(newdirfd), C.uintptr_t(_p1)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsetdomainname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.setdomainname(C.uintptr_t(_p0), C.size_t(_lenp0)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsethostname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.sethostname(C.uintptr_t(_p0), C.size_t(_lenp0)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsetpgid(pid int, pgid int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.setpgid(C.int(pid), C.int(pgid)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsetsid() (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.setsid())
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsettimeofday(tv uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.settimeofday(C.uintptr_t(tv)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsetuid(uid int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.setuid(C.int(uid)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsetgid(uid int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.setgid(C.int(uid)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsetpriority(which int, who int, prio int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.setpriority(C.int(which), C.int(who), C.int(prio)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callstatx(dirfd int, _p0 uintptr, flags int, mask int, stat uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.statx(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.int(mask), C.uintptr_t(stat)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsync() (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.sync())
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func calltimes(tms uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.times(C.uintptr_t(tms)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callumask(mask int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.umask(C.int(mask)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func calluname(buf uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.uname(C.uintptr_t(buf)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callunlink(_p0 uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.unlink(C.uintptr_t(_p0)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callunlinkat(dirfd int, _p0 uintptr, flags int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.unlinkat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callustat(dev int, ubuf uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.ustat(C.int(dev), C.uintptr_t(ubuf)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callwrite(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.write(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func calldup2(oldfd int, newfd int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.dup2(C.int(oldfd), C.int(newfd)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callposix_fadvise64(fd int, offset int64, length int64, advice int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.posix_fadvise64(C.int(fd), C.longlong(offset), C.longlong(length), C.int(advice)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callfchown(fd int, uid int, gid int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.fchown(C.int(fd), C.int(uid), C.int(gid)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callfstat(fd int, stat uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.fstat(C.int(fd), C.uintptr_t(stat)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callfstatat(dirfd int, _p0 uintptr, stat uintptr, flags int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.fstatat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(stat), C.int(flags)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callfstatfs(fd int, buf uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.fstatfs(C.int(fd), C.uintptr_t(buf)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callftruncate(fd int, length int64) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.ftruncate(C.int(fd), C.longlong(length)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetegid() (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.getegid())
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgeteuid() (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.geteuid())
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetgid() (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.getgid())
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetuid() (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.getuid())
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func calllchown(_p0 uintptr, uid int, gid int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.lchown(C.uintptr_t(_p0), C.int(uid), C.int(gid)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func calllisten(s int, n int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.listen(C.int(s), C.int(n)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func calllstat(_p0 uintptr, stat uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.lstat(C.uintptr_t(_p0), C.uintptr_t(stat)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callpause() (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.pause())
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callpread64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.pread64(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0), C.longlong(offset)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callpwrite64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.pwrite64(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0), C.longlong(offset)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.c_select(C.int(nfd), C.uintptr_t(r), C.uintptr_t(w), C.uintptr_t(e), C.uintptr_t(timeout)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callpselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr, sigmask uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.pselect(C.int(nfd), C.uintptr_t(r), C.uintptr_t(w), C.uintptr_t(e), C.uintptr_t(timeout), C.uintptr_t(sigmask)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsetregid(rgid int, egid int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.setregid(C.int(rgid), C.int(egid)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsetreuid(ruid int, euid int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.setreuid(C.int(ruid), C.int(euid)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callshutdown(fd int, how int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.shutdown(C.int(fd), C.int(how)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsplice(rfd int, roff uintptr, wfd int, woff uintptr, len int, flags int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.splice(C.int(rfd), C.uintptr_t(roff), C.int(wfd), C.uintptr_t(woff), C.int(len), C.int(flags)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callstat(_p0 uintptr, statptr uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.stat(C.uintptr_t(_p0), C.uintptr_t(statptr)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callstatfs(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.statfs(C.uintptr_t(_p0), C.uintptr_t(buf)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func calltruncate(_p0 uintptr, length int64) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.truncate(C.uintptr_t(_p0), C.longlong(length)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callbind(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.bind(C.int(s), C.uintptr_t(addr), C.uintptr_t(addrlen)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callconnect(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.connect(C.int(s), C.uintptr_t(addr), C.uintptr_t(addrlen)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.getgroups(C.int(n), C.uintptr_t(list)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.setgroups(C.int(n), C.uintptr_t(list)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.getsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(val), C.uintptr_t(vallen)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.setsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(val), C.uintptr_t(vallen)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsocket(domain int, typ int, proto int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.socket(C.int(domain), C.int(typ), C.int(proto)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsocketpair(domain int, typ int, proto int, fd uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.socketpair(C.int(domain), C.int(typ), C.int(proto), C.uintptr_t(fd)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetpeername(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.getpeername(C.int(fd), C.uintptr_t(rsa), C.uintptr_t(addrlen)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetsockname(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.getsockname(C.int(fd), C.uintptr_t(rsa), C.uintptr_t(addrlen)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callrecvfrom(fd int, _p0 uintptr, _lenp0 int, flags int, from uintptr, fromlen uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.recvfrom(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0), C.int(flags), C.uintptr_t(from), C.uintptr_t(fromlen)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callsendto(s int, _p0 uintptr, _lenp0 int, flags int, to uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.sendto(C.int(s), C.uintptr_t(_p0), C.size_t(_lenp0), C.int(flags), C.uintptr_t(to), C.uintptr_t(addrlen)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callnrecvmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.nrecvmsg(C.int(s), C.uintptr_t(msg), C.int(flags)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callnsendmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.nsendmsg(C.int(s), C.uintptr_t(msg), C.int(flags)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmunmap(addr uintptr, length uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.munmap(C.uintptr_t(addr), C.uintptr_t(length)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmadvise(_p0 uintptr, _lenp0 int, advice int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.madvise(C.uintptr_t(_p0), C.size_t(_lenp0), C.int(advice)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmprotect(_p0 uintptr, _lenp0 int, prot int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.mprotect(C.uintptr_t(_p0), C.size_t(_lenp0), C.int(prot)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.mlock(C.uintptr_t(_p0), C.size_t(_lenp0)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmlockall(flags int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.mlockall(C.int(flags)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmsync(_p0 uintptr, _lenp0 int, flags int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.msync(C.uintptr_t(_p0), C.size_t(_lenp0), C.int(flags)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmunlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.munlock(C.uintptr_t(_p0), C.size_t(_lenp0)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmunlockall() (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.munlockall())
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callpipe(p uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.pipe(C.uintptr_t(p)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callpoll(fds uintptr, nfds int, timeout int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.poll(C.uintptr_t(fds), C.int(nfds), C.int(timeout)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgettimeofday(tv uintptr, tzp uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.gettimeofday(C.uintptr_t(tv), C.uintptr_t(tzp)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func calltime(t uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.time(C.uintptr_t(t)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callutime(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.utime(C.uintptr_t(_p0), C.uintptr_t(buf)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetsystemcfg(label int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.getsystemcfg(C.int(label)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callumount(_p0 uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.umount(C.uintptr_t(_p0)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callgetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.getrlimit(C.int(resource), C.uintptr_t(rlim)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func calllseek(fd int, offset int64, whence int) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.lseek(C.int(fd), C.longlong(offset), C.int(whence)))
	e1 = syscall.GetErrno()
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func callmmap64(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (r1 uintptr, e1 Errno) {
	r1 = uintptr(C.mmap64(C.uintptr_t(addr), C.uintptr_t(length), C.int(prot), C.int(flags), C.int(fd), C.longlong(offset)))
	e1 = syscall.GetErrno()
	return
}
 07070100000E50000081A4000000000000000000000001645E367C00010E31000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go // go run mksyscall.go -tags darwin,amd64 syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build darwin && amd64
// +build darwin,amd64

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getgroups_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getgroups getgroups "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(ngid int, gid *_Gid_t) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setgroups_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setgroups setgroups "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
	r0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
	wpid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_wait4_trampoline_addr uintptr

//go:cgo_import_dynamic libc_wait4 wait4 "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
	r0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_accept_trampoline_addr uintptr

//go:cgo_import_dynamic libc_accept accept "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_bind_trampoline_addr uintptr

//go:cgo_import_dynamic libc_bind bind "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_connect_trampoline_addr uintptr

//go:cgo_import_dynamic libc_connect connect "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_socket_trampoline_addr uintptr

//go:cgo_import_dynamic libc_socket socket "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getsockopt_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getsockopt getsockopt "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setsockopt_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setsockopt setsockopt "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getpeername_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpeername getpeername "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getsockname_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getsockname getsockname "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(s int, how int) (err error) {
	_, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_shutdown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_shutdown shutdown "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_socketpair_trampoline_addr uintptr

//go:cgo_import_dynamic libc_socketpair socketpair "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_recvfrom_trampoline_addr uintptr

//go:cgo_import_dynamic libc_recvfrom recvfrom "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sendto_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sendto sendto "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_recvmsg_trampoline_addr uintptr

//go:cgo_import_dynamic libc_recvmsg recvmsg "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sendmsg_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sendmsg sendmsg "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
	r0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_kevent_trampoline_addr uintptr

//go:cgo_import_dynamic libc_kevent kevent "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, timeval *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_utimes_trampoline_addr uintptr

//go:cgo_import_dynamic libc_utimes utimes "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimes(fd int, timeval *[2]Timeval) (err error) {
	_, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_futimes_trampoline_addr uintptr

//go:cgo_import_dynamic libc_futimes futimes "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_poll_trampoline_addr uintptr

//go:cgo_import_dynamic libc_poll poll "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Madvise(b []byte, behav int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_madvise_trampoline_addr uintptr

//go:cgo_import_dynamic libc_madvise madvise "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mlock_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mlock mlock "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlockall(flags int) (err error) {
	_, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mlockall_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mlockall mlockall "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mprotect(b []byte, prot int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mprotect_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mprotect mprotect "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Msync(b []byte, flags int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_msync_trampoline_addr uintptr

//go:cgo_import_dynamic libc_msync msync "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_munlock_trampoline_addr uintptr

//go:cgo_import_dynamic libc_munlock munlock "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlockall() (err error) {
	_, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_munlockall_trampoline_addr uintptr

//go:cgo_import_dynamic libc_munlockall munlockall "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func closedir(dir uintptr) (err error) {
	_, _, e1 := syscall_syscall(libc_closedir_trampoline_addr, uintptr(dir), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_closedir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) {
	r0, _, _ := syscall_syscall(libc_readdir_r_trampoline_addr, uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result)))
	res = Errno(r0)
	return
}

var libc_readdir_r_trampoline_addr uintptr

//go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pipe(p *[2]int32) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_pipe_trampoline_addr, uintptr(unsafe.Pointer(p)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pipe_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pipe pipe "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attr)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall6(libc_getxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
	sz = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getxattr_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getxattr getxattr "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attr)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall6(libc_fgetxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
	sz = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fgetxattr_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fgetxattr fgetxattr "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attr)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_setxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setxattr_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setxattr setxattr "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attr)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fsetxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fsetxattr_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fsetxattr fsetxattr "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func removexattr(path string, attr string, options int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attr)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_removexattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_removexattr_trampoline_addr uintptr

//go:cgo_import_dynamic libc_removexattr removexattr "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fremovexattr(fd int, attr string, options int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attr)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_fremovexattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fremovexattr_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fremovexattr fremovexattr "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func listxattr(path string, dest *byte, size int, options int) (sz int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall6(libc_listxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
	sz = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_listxattr_trampoline_addr uintptr

//go:cgo_import_dynamic libc_listxattr listxattr "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {
	r0, _, e1 := syscall_syscall6(libc_flistxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
	sz = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_flistxattr_trampoline_addr uintptr

//go:cgo_import_dynamic libc_flistxattr flistxattr "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_utimensat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_utimensat utimensat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fcntl(fd int, cmd int, arg int) (val int, err error) {
	r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fcntl_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fcntl fcntl "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kill(pid int, signum int, posix int) (err error) {
	_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), uintptr(posix))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_kill_trampoline_addr uintptr

//go:cgo_import_dynamic libc_kill kill "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctl(fd int, req uint, arg uintptr) (err error) {
	_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {
	_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_ioctl_trampoline_addr uintptr

//go:cgo_import_dynamic libc_ioctl ioctl "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
	var _p0 unsafe.Pointer
	if len(mib) > 0 {
		_p0 = unsafe.Pointer(&mib[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sysctl_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sysctl sysctl "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {
	_, _, e1 := syscall_syscall6(libc_sendfile_trampoline_addr, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sendfile_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sendfile sendfile "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func shmat(id int, addr uintptr, flag int) (ret uintptr, err error) {
	r0, _, e1 := syscall_syscall(libc_shmat_trampoline_addr, uintptr(id), uintptr(addr), uintptr(flag))
	ret = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_shmat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_shmat shmat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) {
	r0, _, e1 := syscall_syscall(libc_shmctl_trampoline_addr, uintptr(id), uintptr(cmd), uintptr(unsafe.Pointer(buf)))
	result = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_shmctl_trampoline_addr uintptr

//go:cgo_import_dynamic libc_shmctl shmctl "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func shmdt(addr uintptr) (err error) {
	_, _, e1 := syscall_syscall(libc_shmdt_trampoline_addr, uintptr(addr), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_shmdt_trampoline_addr uintptr

//go:cgo_import_dynamic libc_shmdt shmdt "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func shmget(key int, size int, flag int) (id int, err error) {
	r0, _, e1 := syscall_syscall(libc_shmget_trampoline_addr, uintptr(key), uintptr(size), uintptr(flag))
	id = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_shmget_trampoline_addr uintptr

//go:cgo_import_dynamic libc_shmget shmget "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Access(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_access_trampoline_addr uintptr

//go:cgo_import_dynamic libc_access access "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
	_, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_adjtime_trampoline_addr uintptr

//go:cgo_import_dynamic libc_adjtime adjtime "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chdir chdir "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chflags(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chflags_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chflags chflags "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chmod(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chmod_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chmod chmod "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chown chown "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chroot(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chroot_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chroot chroot "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ClockGettime(clockid int32, time *Timespec) (err error) {
	_, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_clock_gettime_trampoline_addr uintptr

//go:cgo_import_dynamic libc_clock_gettime clock_gettime "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Close(fd int) (err error) {
	_, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_close_trampoline_addr uintptr

//go:cgo_import_dynamic libc_close close "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Clonefile(src string, dst string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(src)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(dst)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_clonefile_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_clonefile_trampoline_addr uintptr

//go:cgo_import_dynamic libc_clonefile clonefile "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Clonefileat(srcDirfd int, src string, dstDirfd int, dst string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(src)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(dst)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_clonefileat_trampoline_addr, uintptr(srcDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_clonefileat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_clonefileat clonefileat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup(fd int) (nfd int, err error) {
	r0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0)
	nfd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_dup_trampoline_addr uintptr

//go:cgo_import_dynamic libc_dup dup "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup2(from int, to int) (err error) {
	_, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_dup2_trampoline_addr uintptr

//go:cgo_import_dynamic libc_dup2 dup2 "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Exchangedata(path1 string, path2 string, options int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path1)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(path2)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_exchangedata_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_exchangedata_trampoline_addr uintptr

//go:cgo_import_dynamic libc_exchangedata exchangedata "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Exit(code int) {
	syscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0)
	return
}

var libc_exit_trampoline_addr uintptr

//go:cgo_import_dynamic libc_exit exit "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_faccessat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_faccessat faccessat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchdir(fd int) (err error) {
	_, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchdir fchdir "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchflags(fd int, flags int) (err error) {
	_, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchflags_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchflags fchflags "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmod(fd int, mode uint32) (err error) {
	_, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchmod_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchmod fchmod "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchmodat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchmodat fchmodat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchown fchown "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchownat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchownat fchownat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fclonefileat(srcDirfd int, dstDirfd int, dst string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(dst)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fclonefileat_trampoline_addr, uintptr(srcDirfd), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fclonefileat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fclonefileat fclonefileat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Flock(fd int, how int) (err error) {
	_, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_flock_trampoline_addr uintptr

//go:cgo_import_dynamic libc_flock flock "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fpathconf(fd int, name int) (val int, err error) {
	r0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fpathconf_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fpathconf fpathconf "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fsync(fd int) (err error) {
	_, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fsync_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fsync fsync "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_ftruncate_trampoline_addr uintptr

//go:cgo_import_dynamic libc_ftruncate ftruncate "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getcwd(buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getcwd_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getcwd getcwd "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getdtablesize() (size int) {
	r0, _, _ := syscall_syscall(libc_getdtablesize_trampoline_addr, 0, 0, 0)
	size = int(r0)
	return
}

var libc_getdtablesize_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getdtablesize getdtablesize "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0)
	egid = int(r0)
	return
}

var libc_getegid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getegid getegid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (uid int) {
	r0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0)
	uid = int(r0)
	return
}

var libc_geteuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_geteuid geteuid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0)
	gid = int(r0)
	return
}

var libc_getgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getgid getgid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgid(pid int) (pgid int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0)
	pgid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getpgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpgid getpgid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgrp() (pgrp int) {
	r0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0)
	pgrp = int(r0)
	return
}

var libc_getpgrp_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpgrp getpgrp "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpid() (pid int) {
	r0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0)
	pid = int(r0)
	return
}

var libc_getpid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpid getpid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getppid() (ppid int) {
	r0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0)
	ppid = int(r0)
	return
}

var libc_getppid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getppid getppid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpriority(which int, who int) (prio int, err error) {
	r0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0)
	prio = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getpriority_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpriority getpriority "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(which int, lim *Rlimit) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getrlimit_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getrlimit getrlimit "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrusage(who int, rusage *Rusage) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getrusage_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getrusage getrusage "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getsid(pid int) (sid int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0)
	sid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getsid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getsid getsid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tp *Timeval) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_gettimeofday_trampoline_addr uintptr

//go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0)
	uid = int(r0)
	return
}

var libc_getuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getuid getuid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Issetugid() (tainted bool) {
	r0, _, _ := syscall_rawSyscall(libc_issetugid_trampoline_addr, 0, 0, 0)
	tainted = bool(r0 != 0)
	return
}

var libc_issetugid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_issetugid issetugid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kqueue() (fd int, err error) {
	r0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_kqueue_trampoline_addr uintptr

//go:cgo_import_dynamic libc_kqueue kqueue "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_lchown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_lchown lchown "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Link(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_link_trampoline_addr uintptr

//go:cgo_import_dynamic libc_link link "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_linkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_linkat linkat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, backlog int) (err error) {
	_, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_listen_trampoline_addr uintptr

//go:cgo_import_dynamic libc_listen listen "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdir(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkdir mkdir "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdirat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkdirat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkdirat mkdirat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifo(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkfifo_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkfifo mkfifo "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknod(path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mknod_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mknod mknod "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(fsType)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(dir)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mount_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mount mount "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Open(path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_open_trampoline_addr uintptr

//go:cgo_import_dynamic libc_open open "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_openat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_openat openat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pathconf(path string, name int) (val int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pathconf_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pathconf pathconf "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pread_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pread pread "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pwrite_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pwrite pwrite "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func read(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_read_trampoline_addr uintptr

//go:cgo_import_dynamic libc_read read "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlink(path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_readlink_trampoline_addr uintptr

//go:cgo_import_dynamic libc_readlink readlink "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_readlinkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_readlinkat readlinkat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rename(from string, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_rename_trampoline_addr uintptr

//go:cgo_import_dynamic libc_rename rename "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(fromfd int, from string, tofd int, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_renameat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_renameat renameat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Revoke(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_revoke_trampoline_addr uintptr

//go:cgo_import_dynamic libc_revoke revoke "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rmdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_rmdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_rmdir rmdir "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
	r0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence))
	newoffset = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_lseek_trampoline_addr uintptr

//go:cgo_import_dynamic libc_lseek lseek "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_select_trampoline_addr uintptr

//go:cgo_import_dynamic libc_select select "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setattrlist(path string, attrlist *Attrlist, attrBuf []byte, options int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(attrBuf) > 0 {
		_p1 = unsafe.Pointer(&attrBuf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall6(libc_setattrlist_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(attrlist)), uintptr(_p1), uintptr(len(attrBuf)), uintptr(options), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setattrlist_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setegid(egid int) (err error) {
	_, _, e1 := syscall_syscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setegid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setegid setegid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seteuid(euid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_seteuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_seteuid seteuid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setgid(gid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setgid setgid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setlogin(name string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(name)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setlogin_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setlogin setlogin "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpgid(pid int, pgid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setpgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setpgid setpgid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpriority(which int, who int, prio int) (err error) {
	_, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setpriority_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setpriority setpriority "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setprivexec(flag int) (err error) {
	_, _, e1 := syscall_syscall(libc_setprivexec_trampoline_addr, uintptr(flag), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setprivexec_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setprivexec setprivexec "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setregid(rgid int, egid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setregid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setregid setregid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setreuid(ruid int, euid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setreuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setreuid setreuid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setsid() (pid int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0)
	pid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setsid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setsid setsid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Settimeofday(tp *Timeval) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_settimeofday_trampoline_addr uintptr

//go:cgo_import_dynamic libc_settimeofday settimeofday "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setuid(uid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setuid setuid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlink(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_symlink_trampoline_addr uintptr

//go:cgo_import_dynamic libc_symlink symlink "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_symlinkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_symlinkat symlinkat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sync() (err error) {
	_, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sync_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sync sync "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_truncate_trampoline_addr uintptr

//go:cgo_import_dynamic libc_truncate truncate "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Umask(newmask int) (oldmask int) {
	r0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0)
	oldmask = int(r0)
	return
}

var libc_umask_trampoline_addr uintptr

//go:cgo_import_dynamic libc_umask umask "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Undelete(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_undelete_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_undelete_trampoline_addr uintptr

//go:cgo_import_dynamic libc_undelete undelete "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlink(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_unlink_trampoline_addr uintptr

//go:cgo_import_dynamic libc_unlink unlink "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlinkat(dirfd int, path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_unlinkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_unlinkat unlinkat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unmount(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_unmount_trampoline_addr uintptr

//go:cgo_import_dynamic libc_unmount unmount "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func write(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_write_trampoline_addr uintptr

//go:cgo_import_dynamic libc_write write "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
	r0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
	ret = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mmap_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mmap mmap "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func munmap(addr uintptr, length uintptr) (err error) {
	_, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_munmap_trampoline_addr uintptr

//go:cgo_import_dynamic libc_munmap munmap "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := syscall_syscall(libc_fstat64_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fstat64_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fstat64 fstat64 "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fstatat64_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fstatat64_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fstatat64 fstatat64 "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatfs(fd int, stat *Statfs_t) (err error) {
	_, _, e1 := syscall_syscall(libc_fstatfs64_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fstatfs64_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fstatfs64 fstatfs64 "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_getfsstat64_trampoline_addr, uintptr(buf), uintptr(size), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getfsstat64_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getfsstat64 getfsstat64 "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lstat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_lstat64_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_lstat64_trampoline_addr uintptr

//go:cgo_import_dynamic libc_lstat64 lstat64 "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) {
	_, _, e1 := syscall_syscall6(libc_ptrace_trampoline_addr, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

func ptrace1Ptr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) {
	_, _, e1 := syscall_syscall6(libc_ptrace_trampoline_addr, uintptr(request), uintptr(pid), addr, uintptr(data), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_ptrace_trampoline_addr uintptr

//go:cgo_import_dynamic libc_ptrace ptrace "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Stat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_stat64_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_stat64_trampoline_addr uintptr

//go:cgo_import_dynamic libc_stat64 stat64 "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statfs(path string, stat *Statfs_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_statfs64_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_statfs64_trampoline_addr uintptr

//go:cgo_import_dynamic libc_statfs64 statfs64 "/usr/lib/libSystem.B.dylib"
   07070100000E51000081A4000000000000000000000001645E367C000075AF000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s  // go run mkasm.go darwin amd64
// Code generated by the command above; DO NOT EDIT.

#include "textflag.h"

TEXT libc_fdopendir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fdopendir(SB)

GLOBL	·libc_fdopendir_trampoline_addr(SB), RODATA, $8
DATA	·libc_fdopendir_trampoline_addr(SB)/8, $libc_fdopendir_trampoline<>(SB)

TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getgroups(SB)

GLOBL	·libc_getgroups_trampoline_addr(SB), RODATA, $8
DATA	·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB)

TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setgroups(SB)

GLOBL	·libc_setgroups_trampoline_addr(SB), RODATA, $8
DATA	·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB)

TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_wait4(SB)

GLOBL	·libc_wait4_trampoline_addr(SB), RODATA, $8
DATA	·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB)

TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_accept(SB)

GLOBL	·libc_accept_trampoline_addr(SB), RODATA, $8
DATA	·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB)

TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_bind(SB)

GLOBL	·libc_bind_trampoline_addr(SB), RODATA, $8
DATA	·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB)

TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_connect(SB)

GLOBL	·libc_connect_trampoline_addr(SB), RODATA, $8
DATA	·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB)

TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_socket(SB)

GLOBL	·libc_socket_trampoline_addr(SB), RODATA, $8
DATA	·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB)

TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getsockopt(SB)

GLOBL	·libc_getsockopt_trampoline_addr(SB), RODATA, $8
DATA	·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB)

TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setsockopt(SB)

GLOBL	·libc_setsockopt_trampoline_addr(SB), RODATA, $8
DATA	·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB)

TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpeername(SB)

GLOBL	·libc_getpeername_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB)

TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getsockname(SB)

GLOBL	·libc_getsockname_trampoline_addr(SB), RODATA, $8
DATA	·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB)

TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_shutdown(SB)

GLOBL	·libc_shutdown_trampoline_addr(SB), RODATA, $8
DATA	·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB)

TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_socketpair(SB)

GLOBL	·libc_socketpair_trampoline_addr(SB), RODATA, $8
DATA	·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB)

TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_recvfrom(SB)

GLOBL	·libc_recvfrom_trampoline_addr(SB), RODATA, $8
DATA	·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB)

TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sendto(SB)

GLOBL	·libc_sendto_trampoline_addr(SB), RODATA, $8
DATA	·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB)

TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_recvmsg(SB)

GLOBL	·libc_recvmsg_trampoline_addr(SB), RODATA, $8
DATA	·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB)

TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sendmsg(SB)

GLOBL	·libc_sendmsg_trampoline_addr(SB), RODATA, $8
DATA	·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB)

TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_kevent(SB)

GLOBL	·libc_kevent_trampoline_addr(SB), RODATA, $8
DATA	·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB)

TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_utimes(SB)

GLOBL	·libc_utimes_trampoline_addr(SB), RODATA, $8
DATA	·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB)

TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_futimes(SB)

GLOBL	·libc_futimes_trampoline_addr(SB), RODATA, $8
DATA	·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB)

TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_poll(SB)

GLOBL	·libc_poll_trampoline_addr(SB), RODATA, $8
DATA	·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB)

TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_madvise(SB)

GLOBL	·libc_madvise_trampoline_addr(SB), RODATA, $8
DATA	·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB)

TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mlock(SB)

GLOBL	·libc_mlock_trampoline_addr(SB), RODATA, $8
DATA	·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB)

TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mlockall(SB)

GLOBL	·libc_mlockall_trampoline_addr(SB), RODATA, $8
DATA	·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB)

TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mprotect(SB)

GLOBL	·libc_mprotect_trampoline_addr(SB), RODATA, $8
DATA	·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB)

TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_msync(SB)

GLOBL	·libc_msync_trampoline_addr(SB), RODATA, $8
DATA	·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB)

TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_munlock(SB)

GLOBL	·libc_munlock_trampoline_addr(SB), RODATA, $8
DATA	·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB)

TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_munlockall(SB)

GLOBL	·libc_munlockall_trampoline_addr(SB), RODATA, $8
DATA	·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB)

TEXT libc_closedir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_closedir(SB)

GLOBL	·libc_closedir_trampoline_addr(SB), RODATA, $8
DATA	·libc_closedir_trampoline_addr(SB)/8, $libc_closedir_trampoline<>(SB)

TEXT libc_readdir_r_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_readdir_r(SB)

GLOBL	·libc_readdir_r_trampoline_addr(SB), RODATA, $8
DATA	·libc_readdir_r_trampoline_addr(SB)/8, $libc_readdir_r_trampoline<>(SB)

TEXT libc_pipe_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pipe(SB)

GLOBL	·libc_pipe_trampoline_addr(SB), RODATA, $8
DATA	·libc_pipe_trampoline_addr(SB)/8, $libc_pipe_trampoline<>(SB)

TEXT libc_getxattr_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getxattr(SB)

GLOBL	·libc_getxattr_trampoline_addr(SB), RODATA, $8
DATA	·libc_getxattr_trampoline_addr(SB)/8, $libc_getxattr_trampoline<>(SB)

TEXT libc_fgetxattr_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fgetxattr(SB)

GLOBL	·libc_fgetxattr_trampoline_addr(SB), RODATA, $8
DATA	·libc_fgetxattr_trampoline_addr(SB)/8, $libc_fgetxattr_trampoline<>(SB)

TEXT libc_setxattr_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setxattr(SB)

GLOBL	·libc_setxattr_trampoline_addr(SB), RODATA, $8
DATA	·libc_setxattr_trampoline_addr(SB)/8, $libc_setxattr_trampoline<>(SB)

TEXT libc_fsetxattr_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fsetxattr(SB)

GLOBL	·libc_fsetxattr_trampoline_addr(SB), RODATA, $8
DATA	·libc_fsetxattr_trampoline_addr(SB)/8, $libc_fsetxattr_trampoline<>(SB)

TEXT libc_removexattr_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_removexattr(SB)

GLOBL	·libc_removexattr_trampoline_addr(SB), RODATA, $8
DATA	·libc_removexattr_trampoline_addr(SB)/8, $libc_removexattr_trampoline<>(SB)

TEXT libc_fremovexattr_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fremovexattr(SB)

GLOBL	·libc_fremovexattr_trampoline_addr(SB), RODATA, $8
DATA	·libc_fremovexattr_trampoline_addr(SB)/8, $libc_fremovexattr_trampoline<>(SB)

TEXT libc_listxattr_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_listxattr(SB)

GLOBL	·libc_listxattr_trampoline_addr(SB), RODATA, $8
DATA	·libc_listxattr_trampoline_addr(SB)/8, $libc_listxattr_trampoline<>(SB)

TEXT libc_flistxattr_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_flistxattr(SB)

GLOBL	·libc_flistxattr_trampoline_addr(SB), RODATA, $8
DATA	·libc_flistxattr_trampoline_addr(SB)/8, $libc_flistxattr_trampoline<>(SB)

TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_utimensat(SB)

GLOBL	·libc_utimensat_trampoline_addr(SB), RODATA, $8
DATA	·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB)

TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fcntl(SB)

GLOBL	·libc_fcntl_trampoline_addr(SB), RODATA, $8
DATA	·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB)

TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_kill(SB)

GLOBL	·libc_kill_trampoline_addr(SB), RODATA, $8
DATA	·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB)

TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_ioctl(SB)

GLOBL	·libc_ioctl_trampoline_addr(SB), RODATA, $8
DATA	·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB)

TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sysctl(SB)

GLOBL	·libc_sysctl_trampoline_addr(SB), RODATA, $8
DATA	·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)

TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sendfile(SB)

GLOBL	·libc_sendfile_trampoline_addr(SB), RODATA, $8
DATA	·libc_sendfile_trampoline_addr(SB)/8, $libc_sendfile_trampoline<>(SB)

TEXT libc_shmat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_shmat(SB)

GLOBL	·libc_shmat_trampoline_addr(SB), RODATA, $8
DATA	·libc_shmat_trampoline_addr(SB)/8, $libc_shmat_trampoline<>(SB)

TEXT libc_shmctl_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_shmctl(SB)

GLOBL	·libc_shmctl_trampoline_addr(SB), RODATA, $8
DATA	·libc_shmctl_trampoline_addr(SB)/8, $libc_shmctl_trampoline<>(SB)

TEXT libc_shmdt_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_shmdt(SB)

GLOBL	·libc_shmdt_trampoline_addr(SB), RODATA, $8
DATA	·libc_shmdt_trampoline_addr(SB)/8, $libc_shmdt_trampoline<>(SB)

TEXT libc_shmget_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_shmget(SB)

GLOBL	·libc_shmget_trampoline_addr(SB), RODATA, $8
DATA	·libc_shmget_trampoline_addr(SB)/8, $libc_shmget_trampoline<>(SB)

TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_access(SB)

GLOBL	·libc_access_trampoline_addr(SB), RODATA, $8
DATA	·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB)

TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_adjtime(SB)

GLOBL	·libc_adjtime_trampoline_addr(SB), RODATA, $8
DATA	·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB)

TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chdir(SB)

GLOBL	·libc_chdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB)

TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chflags(SB)

GLOBL	·libc_chflags_trampoline_addr(SB), RODATA, $8
DATA	·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB)

TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chmod(SB)

GLOBL	·libc_chmod_trampoline_addr(SB), RODATA, $8
DATA	·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB)

TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chown(SB)

GLOBL	·libc_chown_trampoline_addr(SB), RODATA, $8
DATA	·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB)

TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chroot(SB)

GLOBL	·libc_chroot_trampoline_addr(SB), RODATA, $8
DATA	·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB)

TEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_clock_gettime(SB)

GLOBL	·libc_clock_gettime_trampoline_addr(SB), RODATA, $8
DATA	·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB)

TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_close(SB)

GLOBL	·libc_close_trampoline_addr(SB), RODATA, $8
DATA	·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB)

TEXT libc_clonefile_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_clonefile(SB)

GLOBL	·libc_clonefile_trampoline_addr(SB), RODATA, $8
DATA	·libc_clonefile_trampoline_addr(SB)/8, $libc_clonefile_trampoline<>(SB)

TEXT libc_clonefileat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_clonefileat(SB)

GLOBL	·libc_clonefileat_trampoline_addr(SB), RODATA, $8
DATA	·libc_clonefileat_trampoline_addr(SB)/8, $libc_clonefileat_trampoline<>(SB)

TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_dup(SB)

GLOBL	·libc_dup_trampoline_addr(SB), RODATA, $8
DATA	·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB)

TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_dup2(SB)

GLOBL	·libc_dup2_trampoline_addr(SB), RODATA, $8
DATA	·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB)

TEXT libc_exchangedata_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_exchangedata(SB)

GLOBL	·libc_exchangedata_trampoline_addr(SB), RODATA, $8
DATA	·libc_exchangedata_trampoline_addr(SB)/8, $libc_exchangedata_trampoline<>(SB)

TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_exit(SB)

GLOBL	·libc_exit_trampoline_addr(SB), RODATA, $8
DATA	·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB)

TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_faccessat(SB)

GLOBL	·libc_faccessat_trampoline_addr(SB), RODATA, $8
DATA	·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB)

TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchdir(SB)

GLOBL	·libc_fchdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB)

TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchflags(SB)

GLOBL	·libc_fchflags_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB)

TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchmod(SB)

GLOBL	·libc_fchmod_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB)

TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchmodat(SB)

GLOBL	·libc_fchmodat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB)

TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchown(SB)

GLOBL	·libc_fchown_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB)

TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchownat(SB)

GLOBL	·libc_fchownat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB)

TEXT libc_fclonefileat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fclonefileat(SB)

GLOBL	·libc_fclonefileat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fclonefileat_trampoline_addr(SB)/8, $libc_fclonefileat_trampoline<>(SB)

TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_flock(SB)

GLOBL	·libc_flock_trampoline_addr(SB), RODATA, $8
DATA	·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB)

TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fpathconf(SB)

GLOBL	·libc_fpathconf_trampoline_addr(SB), RODATA, $8
DATA	·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB)

TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fsync(SB)

GLOBL	·libc_fsync_trampoline_addr(SB), RODATA, $8
DATA	·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB)

TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_ftruncate(SB)

GLOBL	·libc_ftruncate_trampoline_addr(SB), RODATA, $8
DATA	·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB)

TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getcwd(SB)

GLOBL	·libc_getcwd_trampoline_addr(SB), RODATA, $8
DATA	·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB)

TEXT libc_getdtablesize_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getdtablesize(SB)

GLOBL	·libc_getdtablesize_trampoline_addr(SB), RODATA, $8
DATA	·libc_getdtablesize_trampoline_addr(SB)/8, $libc_getdtablesize_trampoline<>(SB)

TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getegid(SB)

GLOBL	·libc_getegid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB)

TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_geteuid(SB)

GLOBL	·libc_geteuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB)

TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getgid(SB)

GLOBL	·libc_getgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB)

TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpgid(SB)

GLOBL	·libc_getpgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB)

TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpgrp(SB)

GLOBL	·libc_getpgrp_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB)

TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpid(SB)

GLOBL	·libc_getpid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB)

TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getppid(SB)

GLOBL	·libc_getppid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB)

TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpriority(SB)

GLOBL	·libc_getpriority_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB)

TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getrlimit(SB)

GLOBL	·libc_getrlimit_trampoline_addr(SB), RODATA, $8
DATA	·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB)

TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getrusage(SB)

GLOBL	·libc_getrusage_trampoline_addr(SB), RODATA, $8
DATA	·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB)

TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getsid(SB)

GLOBL	·libc_getsid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB)

TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_gettimeofday(SB)

GLOBL	·libc_gettimeofday_trampoline_addr(SB), RODATA, $8
DATA	·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB)

TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getuid(SB)

GLOBL	·libc_getuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB)

TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_issetugid(SB)

GLOBL	·libc_issetugid_trampoline_addr(SB), RODATA, $8
DATA	·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB)

TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_kqueue(SB)

GLOBL	·libc_kqueue_trampoline_addr(SB), RODATA, $8
DATA	·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB)

TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_lchown(SB)

GLOBL	·libc_lchown_trampoline_addr(SB), RODATA, $8
DATA	·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB)

TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_link(SB)

GLOBL	·libc_link_trampoline_addr(SB), RODATA, $8
DATA	·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB)

TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_linkat(SB)

GLOBL	·libc_linkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB)

TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_listen(SB)

GLOBL	·libc_listen_trampoline_addr(SB), RODATA, $8
DATA	·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB)

TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkdir(SB)

GLOBL	·libc_mkdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB)

TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkdirat(SB)

GLOBL	·libc_mkdirat_trampoline_addr(SB), RODATA, $8
DATA	·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB)

TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkfifo(SB)

GLOBL	·libc_mkfifo_trampoline_addr(SB), RODATA, $8
DATA	·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB)

TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mknod(SB)

GLOBL	·libc_mknod_trampoline_addr(SB), RODATA, $8
DATA	·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB)

TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mount(SB)

GLOBL	·libc_mount_trampoline_addr(SB), RODATA, $8
DATA	·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB)

TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_open(SB)

GLOBL	·libc_open_trampoline_addr(SB), RODATA, $8
DATA	·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB)

TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_openat(SB)

GLOBL	·libc_openat_trampoline_addr(SB), RODATA, $8
DATA	·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB)

TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pathconf(SB)

GLOBL	·libc_pathconf_trampoline_addr(SB), RODATA, $8
DATA	·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB)

TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pread(SB)

GLOBL	·libc_pread_trampoline_addr(SB), RODATA, $8
DATA	·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB)

TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pwrite(SB)

GLOBL	·libc_pwrite_trampoline_addr(SB), RODATA, $8
DATA	·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)

TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_read(SB)

GLOBL	·libc_read_trampoline_addr(SB), RODATA, $8
DATA	·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB)

TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_readlink(SB)

GLOBL	·libc_readlink_trampoline_addr(SB), RODATA, $8
DATA	·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB)

TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_readlinkat(SB)

GLOBL	·libc_readlinkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB)

TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_rename(SB)

GLOBL	·libc_rename_trampoline_addr(SB), RODATA, $8
DATA	·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB)

TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_renameat(SB)

GLOBL	·libc_renameat_trampoline_addr(SB), RODATA, $8
DATA	·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB)

TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_revoke(SB)

GLOBL	·libc_revoke_trampoline_addr(SB), RODATA, $8
DATA	·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB)

TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_rmdir(SB)

GLOBL	·libc_rmdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB)

TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_lseek(SB)

GLOBL	·libc_lseek_trampoline_addr(SB), RODATA, $8
DATA	·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB)

TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_select(SB)

GLOBL	·libc_select_trampoline_addr(SB), RODATA, $8
DATA	·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB)

TEXT libc_setattrlist_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setattrlist(SB)
GLOBL	·libc_setattrlist_trampoline_addr(SB), RODATA, $8
DATA	·libc_setattrlist_trampoline_addr(SB)/8, $libc_setattrlist_trampoline<>(SB)

TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setegid(SB)

GLOBL	·libc_setegid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB)

TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_seteuid(SB)

GLOBL	·libc_seteuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB)

TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setgid(SB)

GLOBL	·libc_setgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB)

TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setlogin(SB)

GLOBL	·libc_setlogin_trampoline_addr(SB), RODATA, $8
DATA	·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB)

TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setpgid(SB)

GLOBL	·libc_setpgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB)

TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setpriority(SB)

GLOBL	·libc_setpriority_trampoline_addr(SB), RODATA, $8
DATA	·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB)

TEXT libc_setprivexec_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setprivexec(SB)

GLOBL	·libc_setprivexec_trampoline_addr(SB), RODATA, $8
DATA	·libc_setprivexec_trampoline_addr(SB)/8, $libc_setprivexec_trampoline<>(SB)

TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setregid(SB)

GLOBL	·libc_setregid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB)

TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setreuid(SB)

GLOBL	·libc_setreuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB)

TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setsid(SB)

GLOBL	·libc_setsid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB)

TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_settimeofday(SB)

GLOBL	·libc_settimeofday_trampoline_addr(SB), RODATA, $8
DATA	·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB)

TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setuid(SB)

GLOBL	·libc_setuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB)

TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_symlink(SB)

GLOBL	·libc_symlink_trampoline_addr(SB), RODATA, $8
DATA	·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB)

TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_symlinkat(SB)

GLOBL	·libc_symlinkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB)

TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sync(SB)

GLOBL	·libc_sync_trampoline_addr(SB), RODATA, $8
DATA	·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB)

TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_truncate(SB)

GLOBL	·libc_truncate_trampoline_addr(SB), RODATA, $8
DATA	·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB)

TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_umask(SB)

GLOBL	·libc_umask_trampoline_addr(SB), RODATA, $8
DATA	·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB)

TEXT libc_undelete_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_undelete(SB)

GLOBL	·libc_undelete_trampoline_addr(SB), RODATA, $8
DATA	·libc_undelete_trampoline_addr(SB)/8, $libc_undelete_trampoline<>(SB)

TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_unlink(SB)

GLOBL	·libc_unlink_trampoline_addr(SB), RODATA, $8
DATA	·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB)

TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_unlinkat(SB)

GLOBL	·libc_unlinkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB)

TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_unmount(SB)

GLOBL	·libc_unmount_trampoline_addr(SB), RODATA, $8
DATA	·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB)

TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_write(SB)

GLOBL	·libc_write_trampoline_addr(SB), RODATA, $8
DATA	·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB)

TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mmap(SB)

GLOBL	·libc_mmap_trampoline_addr(SB), RODATA, $8
DATA	·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB)

TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_munmap(SB)

GLOBL	·libc_munmap_trampoline_addr(SB), RODATA, $8
DATA	·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB)

TEXT libc_fstat64_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fstat64(SB)

GLOBL	·libc_fstat64_trampoline_addr(SB), RODATA, $8
DATA	·libc_fstat64_trampoline_addr(SB)/8, $libc_fstat64_trampoline<>(SB)

TEXT libc_fstatat64_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fstatat64(SB)

GLOBL	·libc_fstatat64_trampoline_addr(SB), RODATA, $8
DATA	·libc_fstatat64_trampoline_addr(SB)/8, $libc_fstatat64_trampoline<>(SB)

TEXT libc_fstatfs64_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fstatfs64(SB)

GLOBL	·libc_fstatfs64_trampoline_addr(SB), RODATA, $8
DATA	·libc_fstatfs64_trampoline_addr(SB)/8, $libc_fstatfs64_trampoline<>(SB)

TEXT libc_getfsstat64_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getfsstat64(SB)

GLOBL	·libc_getfsstat64_trampoline_addr(SB), RODATA, $8
DATA	·libc_getfsstat64_trampoline_addr(SB)/8, $libc_getfsstat64_trampoline<>(SB)

TEXT libc_lstat64_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_lstat64(SB)

GLOBL	·libc_lstat64_trampoline_addr(SB), RODATA, $8
DATA	·libc_lstat64_trampoline_addr(SB)/8, $libc_lstat64_trampoline<>(SB)

TEXT libc_ptrace_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_ptrace(SB)

GLOBL	·libc_ptrace_trampoline_addr(SB), RODATA, $8
DATA	·libc_ptrace_trampoline_addr(SB)/8, $libc_ptrace_trampoline<>(SB)

TEXT libc_stat64_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_stat64(SB)

GLOBL	·libc_stat64_trampoline_addr(SB), RODATA, $8
DATA	·libc_stat64_trampoline_addr(SB)/8, $libc_stat64_trampoline<>(SB)

TEXT libc_statfs64_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_statfs64(SB)

GLOBL	·libc_statfs64_trampoline_addr(SB), RODATA, $8
DATA	·libc_statfs64_trampoline_addr(SB)/8, $libc_statfs64_trampoline<>(SB)
 07070100000E52000081A4000000000000000000000001645E367C00010DF9000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go // go run mksyscall.go -tags darwin,arm64 syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build darwin && arm64
// +build darwin,arm64

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getgroups_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getgroups getgroups "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(ngid int, gid *_Gid_t) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setgroups_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setgroups setgroups "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
	r0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
	wpid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_wait4_trampoline_addr uintptr

//go:cgo_import_dynamic libc_wait4 wait4 "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
	r0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_accept_trampoline_addr uintptr

//go:cgo_import_dynamic libc_accept accept "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_bind_trampoline_addr uintptr

//go:cgo_import_dynamic libc_bind bind "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_connect_trampoline_addr uintptr

//go:cgo_import_dynamic libc_connect connect "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_socket_trampoline_addr uintptr

//go:cgo_import_dynamic libc_socket socket "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getsockopt_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getsockopt getsockopt "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setsockopt_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setsockopt setsockopt "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getpeername_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpeername getpeername "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getsockname_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getsockname getsockname "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(s int, how int) (err error) {
	_, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_shutdown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_shutdown shutdown "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_socketpair_trampoline_addr uintptr

//go:cgo_import_dynamic libc_socketpair socketpair "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_recvfrom_trampoline_addr uintptr

//go:cgo_import_dynamic libc_recvfrom recvfrom "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sendto_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sendto sendto "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_recvmsg_trampoline_addr uintptr

//go:cgo_import_dynamic libc_recvmsg recvmsg "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sendmsg_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sendmsg sendmsg "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
	r0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_kevent_trampoline_addr uintptr

//go:cgo_import_dynamic libc_kevent kevent "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, timeval *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_utimes_trampoline_addr uintptr

//go:cgo_import_dynamic libc_utimes utimes "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimes(fd int, timeval *[2]Timeval) (err error) {
	_, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_futimes_trampoline_addr uintptr

//go:cgo_import_dynamic libc_futimes futimes "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_poll_trampoline_addr uintptr

//go:cgo_import_dynamic libc_poll poll "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Madvise(b []byte, behav int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_madvise_trampoline_addr uintptr

//go:cgo_import_dynamic libc_madvise madvise "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mlock_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mlock mlock "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlockall(flags int) (err error) {
	_, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mlockall_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mlockall mlockall "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mprotect(b []byte, prot int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mprotect_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mprotect mprotect "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Msync(b []byte, flags int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_msync_trampoline_addr uintptr

//go:cgo_import_dynamic libc_msync msync "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_munlock_trampoline_addr uintptr

//go:cgo_import_dynamic libc_munlock munlock "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlockall() (err error) {
	_, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_munlockall_trampoline_addr uintptr

//go:cgo_import_dynamic libc_munlockall munlockall "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func closedir(dir uintptr) (err error) {
	_, _, e1 := syscall_syscall(libc_closedir_trampoline_addr, uintptr(dir), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_closedir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) {
	r0, _, _ := syscall_syscall(libc_readdir_r_trampoline_addr, uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result)))
	res = Errno(r0)
	return
}

var libc_readdir_r_trampoline_addr uintptr

//go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pipe(p *[2]int32) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_pipe_trampoline_addr, uintptr(unsafe.Pointer(p)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pipe_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pipe pipe "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attr)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall6(libc_getxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
	sz = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getxattr_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getxattr getxattr "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attr)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall6(libc_fgetxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
	sz = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fgetxattr_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fgetxattr fgetxattr "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attr)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_setxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setxattr_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setxattr setxattr "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attr)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fsetxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fsetxattr_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fsetxattr fsetxattr "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func removexattr(path string, attr string, options int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attr)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_removexattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_removexattr_trampoline_addr uintptr

//go:cgo_import_dynamic libc_removexattr removexattr "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fremovexattr(fd int, attr string, options int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attr)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_fremovexattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fremovexattr_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fremovexattr fremovexattr "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func listxattr(path string, dest *byte, size int, options int) (sz int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall6(libc_listxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
	sz = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_listxattr_trampoline_addr uintptr

//go:cgo_import_dynamic libc_listxattr listxattr "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {
	r0, _, e1 := syscall_syscall6(libc_flistxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
	sz = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_flistxattr_trampoline_addr uintptr

//go:cgo_import_dynamic libc_flistxattr flistxattr "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_utimensat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_utimensat utimensat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fcntl(fd int, cmd int, arg int) (val int, err error) {
	r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fcntl_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fcntl fcntl "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kill(pid int, signum int, posix int) (err error) {
	_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), uintptr(posix))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_kill_trampoline_addr uintptr

//go:cgo_import_dynamic libc_kill kill "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctl(fd int, req uint, arg uintptr) (err error) {
	_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {
	_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_ioctl_trampoline_addr uintptr

//go:cgo_import_dynamic libc_ioctl ioctl "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
	var _p0 unsafe.Pointer
	if len(mib) > 0 {
		_p0 = unsafe.Pointer(&mib[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sysctl_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sysctl sysctl "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {
	_, _, e1 := syscall_syscall6(libc_sendfile_trampoline_addr, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sendfile_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sendfile sendfile "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func shmat(id int, addr uintptr, flag int) (ret uintptr, err error) {
	r0, _, e1 := syscall_syscall(libc_shmat_trampoline_addr, uintptr(id), uintptr(addr), uintptr(flag))
	ret = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_shmat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_shmat shmat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) {
	r0, _, e1 := syscall_syscall(libc_shmctl_trampoline_addr, uintptr(id), uintptr(cmd), uintptr(unsafe.Pointer(buf)))
	result = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_shmctl_trampoline_addr uintptr

//go:cgo_import_dynamic libc_shmctl shmctl "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func shmdt(addr uintptr) (err error) {
	_, _, e1 := syscall_syscall(libc_shmdt_trampoline_addr, uintptr(addr), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_shmdt_trampoline_addr uintptr

//go:cgo_import_dynamic libc_shmdt shmdt "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func shmget(key int, size int, flag int) (id int, err error) {
	r0, _, e1 := syscall_syscall(libc_shmget_trampoline_addr, uintptr(key), uintptr(size), uintptr(flag))
	id = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_shmget_trampoline_addr uintptr

//go:cgo_import_dynamic libc_shmget shmget "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Access(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_access_trampoline_addr uintptr

//go:cgo_import_dynamic libc_access access "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
	_, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_adjtime_trampoline_addr uintptr

//go:cgo_import_dynamic libc_adjtime adjtime "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chdir chdir "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chflags(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chflags_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chflags chflags "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chmod(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chmod_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chmod chmod "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chown chown "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chroot(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chroot_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chroot chroot "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ClockGettime(clockid int32, time *Timespec) (err error) {
	_, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_clock_gettime_trampoline_addr uintptr

//go:cgo_import_dynamic libc_clock_gettime clock_gettime "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Close(fd int) (err error) {
	_, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_close_trampoline_addr uintptr

//go:cgo_import_dynamic libc_close close "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Clonefile(src string, dst string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(src)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(dst)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_clonefile_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_clonefile_trampoline_addr uintptr

//go:cgo_import_dynamic libc_clonefile clonefile "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Clonefileat(srcDirfd int, src string, dstDirfd int, dst string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(src)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(dst)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_clonefileat_trampoline_addr, uintptr(srcDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_clonefileat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_clonefileat clonefileat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup(fd int) (nfd int, err error) {
	r0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0)
	nfd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_dup_trampoline_addr uintptr

//go:cgo_import_dynamic libc_dup dup "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup2(from int, to int) (err error) {
	_, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_dup2_trampoline_addr uintptr

//go:cgo_import_dynamic libc_dup2 dup2 "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Exchangedata(path1 string, path2 string, options int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path1)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(path2)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_exchangedata_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_exchangedata_trampoline_addr uintptr

//go:cgo_import_dynamic libc_exchangedata exchangedata "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Exit(code int) {
	syscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0)
	return
}

var libc_exit_trampoline_addr uintptr

//go:cgo_import_dynamic libc_exit exit "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_faccessat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_faccessat faccessat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchdir(fd int) (err error) {
	_, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchdir fchdir "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchflags(fd int, flags int) (err error) {
	_, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchflags_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchflags fchflags "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmod(fd int, mode uint32) (err error) {
	_, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchmod_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchmod fchmod "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchmodat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchmodat fchmodat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchown fchown "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchownat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchownat fchownat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fclonefileat(srcDirfd int, dstDirfd int, dst string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(dst)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fclonefileat_trampoline_addr, uintptr(srcDirfd), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fclonefileat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fclonefileat fclonefileat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Flock(fd int, how int) (err error) {
	_, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_flock_trampoline_addr uintptr

//go:cgo_import_dynamic libc_flock flock "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fpathconf(fd int, name int) (val int, err error) {
	r0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fpathconf_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fpathconf fpathconf "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fsync(fd int) (err error) {
	_, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fsync_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fsync fsync "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_ftruncate_trampoline_addr uintptr

//go:cgo_import_dynamic libc_ftruncate ftruncate "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getcwd(buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getcwd_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getcwd getcwd "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getdtablesize() (size int) {
	r0, _, _ := syscall_syscall(libc_getdtablesize_trampoline_addr, 0, 0, 0)
	size = int(r0)
	return
}

var libc_getdtablesize_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getdtablesize getdtablesize "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0)
	egid = int(r0)
	return
}

var libc_getegid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getegid getegid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (uid int) {
	r0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0)
	uid = int(r0)
	return
}

var libc_geteuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_geteuid geteuid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0)
	gid = int(r0)
	return
}

var libc_getgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getgid getgid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgid(pid int) (pgid int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0)
	pgid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getpgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpgid getpgid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgrp() (pgrp int) {
	r0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0)
	pgrp = int(r0)
	return
}

var libc_getpgrp_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpgrp getpgrp "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpid() (pid int) {
	r0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0)
	pid = int(r0)
	return
}

var libc_getpid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpid getpid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getppid() (ppid int) {
	r0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0)
	ppid = int(r0)
	return
}

var libc_getppid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getppid getppid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpriority(which int, who int) (prio int, err error) {
	r0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0)
	prio = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getpriority_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpriority getpriority "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(which int, lim *Rlimit) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getrlimit_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getrlimit getrlimit "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrusage(who int, rusage *Rusage) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getrusage_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getrusage getrusage "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getsid(pid int) (sid int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0)
	sid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getsid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getsid getsid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tp *Timeval) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_gettimeofday_trampoline_addr uintptr

//go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0)
	uid = int(r0)
	return
}

var libc_getuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getuid getuid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Issetugid() (tainted bool) {
	r0, _, _ := syscall_rawSyscall(libc_issetugid_trampoline_addr, 0, 0, 0)
	tainted = bool(r0 != 0)
	return
}

var libc_issetugid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_issetugid issetugid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kqueue() (fd int, err error) {
	r0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_kqueue_trampoline_addr uintptr

//go:cgo_import_dynamic libc_kqueue kqueue "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_lchown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_lchown lchown "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Link(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_link_trampoline_addr uintptr

//go:cgo_import_dynamic libc_link link "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_linkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_linkat linkat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, backlog int) (err error) {
	_, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_listen_trampoline_addr uintptr

//go:cgo_import_dynamic libc_listen listen "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdir(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkdir mkdir "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdirat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkdirat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkdirat mkdirat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifo(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkfifo_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkfifo mkfifo "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknod(path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mknod_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mknod mknod "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(fsType)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(dir)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mount_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mount mount "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Open(path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_open_trampoline_addr uintptr

//go:cgo_import_dynamic libc_open open "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_openat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_openat openat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pathconf(path string, name int) (val int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pathconf_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pathconf pathconf "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pread_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pread pread "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pwrite_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pwrite pwrite "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func read(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_read_trampoline_addr uintptr

//go:cgo_import_dynamic libc_read read "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlink(path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_readlink_trampoline_addr uintptr

//go:cgo_import_dynamic libc_readlink readlink "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_readlinkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_readlinkat readlinkat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rename(from string, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_rename_trampoline_addr uintptr

//go:cgo_import_dynamic libc_rename rename "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(fromfd int, from string, tofd int, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_renameat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_renameat renameat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Revoke(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_revoke_trampoline_addr uintptr

//go:cgo_import_dynamic libc_revoke revoke "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rmdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_rmdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_rmdir rmdir "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
	r0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence))
	newoffset = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_lseek_trampoline_addr uintptr

//go:cgo_import_dynamic libc_lseek lseek "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_select_trampoline_addr uintptr

//go:cgo_import_dynamic libc_select select "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setattrlist(path string, attrlist *Attrlist, attrBuf []byte, options int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(attrBuf) > 0 {
		_p1 = unsafe.Pointer(&attrBuf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall6(libc_setattrlist_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(attrlist)), uintptr(_p1), uintptr(len(attrBuf)), uintptr(options), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setattrlist_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setegid(egid int) (err error) {
	_, _, e1 := syscall_syscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setegid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setegid setegid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seteuid(euid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_seteuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_seteuid seteuid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setgid(gid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setgid setgid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setlogin(name string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(name)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setlogin_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setlogin setlogin "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpgid(pid int, pgid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setpgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setpgid setpgid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpriority(which int, who int, prio int) (err error) {
	_, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setpriority_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setpriority setpriority "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setprivexec(flag int) (err error) {
	_, _, e1 := syscall_syscall(libc_setprivexec_trampoline_addr, uintptr(flag), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setprivexec_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setprivexec setprivexec "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setregid(rgid int, egid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setregid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setregid setregid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setreuid(ruid int, euid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setreuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setreuid setreuid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setsid() (pid int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0)
	pid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setsid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setsid setsid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Settimeofday(tp *Timeval) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_settimeofday_trampoline_addr uintptr

//go:cgo_import_dynamic libc_settimeofday settimeofday "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setuid(uid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setuid setuid "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlink(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_symlink_trampoline_addr uintptr

//go:cgo_import_dynamic libc_symlink symlink "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_symlinkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_symlinkat symlinkat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sync() (err error) {
	_, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sync_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sync sync "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_truncate_trampoline_addr uintptr

//go:cgo_import_dynamic libc_truncate truncate "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Umask(newmask int) (oldmask int) {
	r0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0)
	oldmask = int(r0)
	return
}

var libc_umask_trampoline_addr uintptr

//go:cgo_import_dynamic libc_umask umask "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Undelete(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_undelete_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_undelete_trampoline_addr uintptr

//go:cgo_import_dynamic libc_undelete undelete "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlink(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_unlink_trampoline_addr uintptr

//go:cgo_import_dynamic libc_unlink unlink "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlinkat(dirfd int, path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_unlinkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_unlinkat unlinkat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unmount(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_unmount_trampoline_addr uintptr

//go:cgo_import_dynamic libc_unmount unmount "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func write(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_write_trampoline_addr uintptr

//go:cgo_import_dynamic libc_write write "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
	r0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
	ret = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mmap_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mmap mmap "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func munmap(addr uintptr, length uintptr) (err error) {
	_, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_munmap_trampoline_addr uintptr

//go:cgo_import_dynamic libc_munmap munmap "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fstat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fstat fstat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fstatat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fstatat fstatat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatfs(fd int, stat *Statfs_t) (err error) {
	_, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fstatfs_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fstatfs fstatfs "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_getfsstat_trampoline_addr, uintptr(buf), uintptr(size), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getfsstat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getfsstat getfsstat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lstat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_lstat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_lstat lstat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) {
	_, _, e1 := syscall_syscall6(libc_ptrace_trampoline_addr, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

func ptrace1Ptr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) {
	_, _, e1 := syscall_syscall6(libc_ptrace_trampoline_addr, uintptr(request), uintptr(pid), addr, uintptr(data), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_ptrace_trampoline_addr uintptr

//go:cgo_import_dynamic libc_ptrace ptrace "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Stat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_stat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_stat stat "/usr/lib/libSystem.B.dylib"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statfs(path string, stat *Statfs_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_statfs_trampoline_addr uintptr

//go:cgo_import_dynamic libc_statfs statfs "/usr/lib/libSystem.B.dylib"
   07070100000E53000081A4000000000000000000000001645E367C00007569000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s  // go run mkasm.go darwin arm64
// Code generated by the command above; DO NOT EDIT.

#include "textflag.h"

TEXT libc_fdopendir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fdopendir(SB)

GLOBL	·libc_fdopendir_trampoline_addr(SB), RODATA, $8
DATA	·libc_fdopendir_trampoline_addr(SB)/8, $libc_fdopendir_trampoline<>(SB)

TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getgroups(SB)

GLOBL	·libc_getgroups_trampoline_addr(SB), RODATA, $8
DATA	·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB)

TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setgroups(SB)

GLOBL	·libc_setgroups_trampoline_addr(SB), RODATA, $8
DATA	·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB)

TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_wait4(SB)

GLOBL	·libc_wait4_trampoline_addr(SB), RODATA, $8
DATA	·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB)

TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_accept(SB)

GLOBL	·libc_accept_trampoline_addr(SB), RODATA, $8
DATA	·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB)

TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_bind(SB)

GLOBL	·libc_bind_trampoline_addr(SB), RODATA, $8
DATA	·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB)

TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_connect(SB)

GLOBL	·libc_connect_trampoline_addr(SB), RODATA, $8
DATA	·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB)

TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_socket(SB)

GLOBL	·libc_socket_trampoline_addr(SB), RODATA, $8
DATA	·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB)

TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getsockopt(SB)

GLOBL	·libc_getsockopt_trampoline_addr(SB), RODATA, $8
DATA	·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB)

TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setsockopt(SB)

GLOBL	·libc_setsockopt_trampoline_addr(SB), RODATA, $8
DATA	·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB)

TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpeername(SB)

GLOBL	·libc_getpeername_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB)

TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getsockname(SB)

GLOBL	·libc_getsockname_trampoline_addr(SB), RODATA, $8
DATA	·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB)

TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_shutdown(SB)

GLOBL	·libc_shutdown_trampoline_addr(SB), RODATA, $8
DATA	·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB)

TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_socketpair(SB)

GLOBL	·libc_socketpair_trampoline_addr(SB), RODATA, $8
DATA	·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB)

TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_recvfrom(SB)

GLOBL	·libc_recvfrom_trampoline_addr(SB), RODATA, $8
DATA	·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB)

TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sendto(SB)

GLOBL	·libc_sendto_trampoline_addr(SB), RODATA, $8
DATA	·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB)

TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_recvmsg(SB)

GLOBL	·libc_recvmsg_trampoline_addr(SB), RODATA, $8
DATA	·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB)

TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sendmsg(SB)

GLOBL	·libc_sendmsg_trampoline_addr(SB), RODATA, $8
DATA	·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB)

TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_kevent(SB)

GLOBL	·libc_kevent_trampoline_addr(SB), RODATA, $8
DATA	·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB)

TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_utimes(SB)

GLOBL	·libc_utimes_trampoline_addr(SB), RODATA, $8
DATA	·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB)

TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_futimes(SB)

GLOBL	·libc_futimes_trampoline_addr(SB), RODATA, $8
DATA	·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB)

TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_poll(SB)

GLOBL	·libc_poll_trampoline_addr(SB), RODATA, $8
DATA	·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB)

TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_madvise(SB)

GLOBL	·libc_madvise_trampoline_addr(SB), RODATA, $8
DATA	·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB)

TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mlock(SB)

GLOBL	·libc_mlock_trampoline_addr(SB), RODATA, $8
DATA	·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB)

TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mlockall(SB)

GLOBL	·libc_mlockall_trampoline_addr(SB), RODATA, $8
DATA	·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB)

TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mprotect(SB)

GLOBL	·libc_mprotect_trampoline_addr(SB), RODATA, $8
DATA	·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB)

TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_msync(SB)

GLOBL	·libc_msync_trampoline_addr(SB), RODATA, $8
DATA	·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB)

TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_munlock(SB)

GLOBL	·libc_munlock_trampoline_addr(SB), RODATA, $8
DATA	·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB)

TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_munlockall(SB)

GLOBL	·libc_munlockall_trampoline_addr(SB), RODATA, $8
DATA	·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB)

TEXT libc_closedir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_closedir(SB)

GLOBL	·libc_closedir_trampoline_addr(SB), RODATA, $8
DATA	·libc_closedir_trampoline_addr(SB)/8, $libc_closedir_trampoline<>(SB)

TEXT libc_readdir_r_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_readdir_r(SB)

GLOBL	·libc_readdir_r_trampoline_addr(SB), RODATA, $8
DATA	·libc_readdir_r_trampoline_addr(SB)/8, $libc_readdir_r_trampoline<>(SB)

TEXT libc_pipe_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pipe(SB)

GLOBL	·libc_pipe_trampoline_addr(SB), RODATA, $8
DATA	·libc_pipe_trampoline_addr(SB)/8, $libc_pipe_trampoline<>(SB)

TEXT libc_getxattr_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getxattr(SB)

GLOBL	·libc_getxattr_trampoline_addr(SB), RODATA, $8
DATA	·libc_getxattr_trampoline_addr(SB)/8, $libc_getxattr_trampoline<>(SB)

TEXT libc_fgetxattr_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fgetxattr(SB)

GLOBL	·libc_fgetxattr_trampoline_addr(SB), RODATA, $8
DATA	·libc_fgetxattr_trampoline_addr(SB)/8, $libc_fgetxattr_trampoline<>(SB)

TEXT libc_setxattr_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setxattr(SB)

GLOBL	·libc_setxattr_trampoline_addr(SB), RODATA, $8
DATA	·libc_setxattr_trampoline_addr(SB)/8, $libc_setxattr_trampoline<>(SB)

TEXT libc_fsetxattr_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fsetxattr(SB)

GLOBL	·libc_fsetxattr_trampoline_addr(SB), RODATA, $8
DATA	·libc_fsetxattr_trampoline_addr(SB)/8, $libc_fsetxattr_trampoline<>(SB)

TEXT libc_removexattr_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_removexattr(SB)

GLOBL	·libc_removexattr_trampoline_addr(SB), RODATA, $8
DATA	·libc_removexattr_trampoline_addr(SB)/8, $libc_removexattr_trampoline<>(SB)

TEXT libc_fremovexattr_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fremovexattr(SB)

GLOBL	·libc_fremovexattr_trampoline_addr(SB), RODATA, $8
DATA	·libc_fremovexattr_trampoline_addr(SB)/8, $libc_fremovexattr_trampoline<>(SB)

TEXT libc_listxattr_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_listxattr(SB)

GLOBL	·libc_listxattr_trampoline_addr(SB), RODATA, $8
DATA	·libc_listxattr_trampoline_addr(SB)/8, $libc_listxattr_trampoline<>(SB)

TEXT libc_flistxattr_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_flistxattr(SB)

GLOBL	·libc_flistxattr_trampoline_addr(SB), RODATA, $8
DATA	·libc_flistxattr_trampoline_addr(SB)/8, $libc_flistxattr_trampoline<>(SB)

TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_utimensat(SB)

GLOBL	·libc_utimensat_trampoline_addr(SB), RODATA, $8
DATA	·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB)

TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fcntl(SB)

GLOBL	·libc_fcntl_trampoline_addr(SB), RODATA, $8
DATA	·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB)

TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_kill(SB)

GLOBL	·libc_kill_trampoline_addr(SB), RODATA, $8
DATA	·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB)

TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_ioctl(SB)

GLOBL	·libc_ioctl_trampoline_addr(SB), RODATA, $8
DATA	·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB)

TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sysctl(SB)

GLOBL	·libc_sysctl_trampoline_addr(SB), RODATA, $8
DATA	·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)

TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sendfile(SB)

GLOBL	·libc_sendfile_trampoline_addr(SB), RODATA, $8
DATA	·libc_sendfile_trampoline_addr(SB)/8, $libc_sendfile_trampoline<>(SB)

TEXT libc_shmat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_shmat(SB)

GLOBL	·libc_shmat_trampoline_addr(SB), RODATA, $8
DATA	·libc_shmat_trampoline_addr(SB)/8, $libc_shmat_trampoline<>(SB)

TEXT libc_shmctl_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_shmctl(SB)

GLOBL	·libc_shmctl_trampoline_addr(SB), RODATA, $8
DATA	·libc_shmctl_trampoline_addr(SB)/8, $libc_shmctl_trampoline<>(SB)

TEXT libc_shmdt_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_shmdt(SB)

GLOBL	·libc_shmdt_trampoline_addr(SB), RODATA, $8
DATA	·libc_shmdt_trampoline_addr(SB)/8, $libc_shmdt_trampoline<>(SB)

TEXT libc_shmget_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_shmget(SB)

GLOBL	·libc_shmget_trampoline_addr(SB), RODATA, $8
DATA	·libc_shmget_trampoline_addr(SB)/8, $libc_shmget_trampoline<>(SB)

TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_access(SB)

GLOBL	·libc_access_trampoline_addr(SB), RODATA, $8
DATA	·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB)

TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_adjtime(SB)

GLOBL	·libc_adjtime_trampoline_addr(SB), RODATA, $8
DATA	·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB)

TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chdir(SB)

GLOBL	·libc_chdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB)

TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chflags(SB)

GLOBL	·libc_chflags_trampoline_addr(SB), RODATA, $8
DATA	·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB)

TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chmod(SB)

GLOBL	·libc_chmod_trampoline_addr(SB), RODATA, $8
DATA	·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB)

TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chown(SB)

GLOBL	·libc_chown_trampoline_addr(SB), RODATA, $8
DATA	·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB)

TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chroot(SB)

GLOBL	·libc_chroot_trampoline_addr(SB), RODATA, $8
DATA	·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB)

TEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_clock_gettime(SB)

GLOBL	·libc_clock_gettime_trampoline_addr(SB), RODATA, $8
DATA	·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB)

TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_close(SB)

GLOBL	·libc_close_trampoline_addr(SB), RODATA, $8
DATA	·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB)

TEXT libc_clonefile_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_clonefile(SB)

GLOBL	·libc_clonefile_trampoline_addr(SB), RODATA, $8
DATA	·libc_clonefile_trampoline_addr(SB)/8, $libc_clonefile_trampoline<>(SB)

TEXT libc_clonefileat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_clonefileat(SB)

GLOBL	·libc_clonefileat_trampoline_addr(SB), RODATA, $8
DATA	·libc_clonefileat_trampoline_addr(SB)/8, $libc_clonefileat_trampoline<>(SB)

TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_dup(SB)

GLOBL	·libc_dup_trampoline_addr(SB), RODATA, $8
DATA	·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB)

TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_dup2(SB)

GLOBL	·libc_dup2_trampoline_addr(SB), RODATA, $8
DATA	·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB)

TEXT libc_exchangedata_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_exchangedata(SB)

GLOBL	·libc_exchangedata_trampoline_addr(SB), RODATA, $8
DATA	·libc_exchangedata_trampoline_addr(SB)/8, $libc_exchangedata_trampoline<>(SB)

TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_exit(SB)

GLOBL	·libc_exit_trampoline_addr(SB), RODATA, $8
DATA	·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB)

TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_faccessat(SB)

GLOBL	·libc_faccessat_trampoline_addr(SB), RODATA, $8
DATA	·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB)

TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchdir(SB)

GLOBL	·libc_fchdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB)

TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchflags(SB)

GLOBL	·libc_fchflags_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB)

TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchmod(SB)

GLOBL	·libc_fchmod_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB)

TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchmodat(SB)

GLOBL	·libc_fchmodat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB)

TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchown(SB)

GLOBL	·libc_fchown_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB)

TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchownat(SB)

GLOBL	·libc_fchownat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB)

TEXT libc_fclonefileat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fclonefileat(SB)

GLOBL	·libc_fclonefileat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fclonefileat_trampoline_addr(SB)/8, $libc_fclonefileat_trampoline<>(SB)

TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_flock(SB)

GLOBL	·libc_flock_trampoline_addr(SB), RODATA, $8
DATA	·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB)

TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fpathconf(SB)

GLOBL	·libc_fpathconf_trampoline_addr(SB), RODATA, $8
DATA	·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB)

TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fsync(SB)

GLOBL	·libc_fsync_trampoline_addr(SB), RODATA, $8
DATA	·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB)

TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_ftruncate(SB)

GLOBL	·libc_ftruncate_trampoline_addr(SB), RODATA, $8
DATA	·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB)

TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getcwd(SB)

GLOBL	·libc_getcwd_trampoline_addr(SB), RODATA, $8
DATA	·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB)

TEXT libc_getdtablesize_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getdtablesize(SB)

GLOBL	·libc_getdtablesize_trampoline_addr(SB), RODATA, $8
DATA	·libc_getdtablesize_trampoline_addr(SB)/8, $libc_getdtablesize_trampoline<>(SB)

TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getegid(SB)

GLOBL	·libc_getegid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB)

TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_geteuid(SB)

GLOBL	·libc_geteuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB)

TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getgid(SB)

GLOBL	·libc_getgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB)

TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpgid(SB)

GLOBL	·libc_getpgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB)

TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpgrp(SB)

GLOBL	·libc_getpgrp_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB)

TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpid(SB)

GLOBL	·libc_getpid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB)

TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getppid(SB)

GLOBL	·libc_getppid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB)

TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpriority(SB)

GLOBL	·libc_getpriority_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB)

TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getrlimit(SB)

GLOBL	·libc_getrlimit_trampoline_addr(SB), RODATA, $8
DATA	·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB)

TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getrusage(SB)

GLOBL	·libc_getrusage_trampoline_addr(SB), RODATA, $8
DATA	·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB)

TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getsid(SB)

GLOBL	·libc_getsid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB)

TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_gettimeofday(SB)

GLOBL	·libc_gettimeofday_trampoline_addr(SB), RODATA, $8
DATA	·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB)

TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getuid(SB)

GLOBL	·libc_getuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB)

TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_issetugid(SB)

GLOBL	·libc_issetugid_trampoline_addr(SB), RODATA, $8
DATA	·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB)

TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_kqueue(SB)

GLOBL	·libc_kqueue_trampoline_addr(SB), RODATA, $8
DATA	·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB)

TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_lchown(SB)

GLOBL	·libc_lchown_trampoline_addr(SB), RODATA, $8
DATA	·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB)

TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_link(SB)

GLOBL	·libc_link_trampoline_addr(SB), RODATA, $8
DATA	·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB)

TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_linkat(SB)

GLOBL	·libc_linkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB)

TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_listen(SB)

GLOBL	·libc_listen_trampoline_addr(SB), RODATA, $8
DATA	·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB)

TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkdir(SB)

GLOBL	·libc_mkdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB)

TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkdirat(SB)

GLOBL	·libc_mkdirat_trampoline_addr(SB), RODATA, $8
DATA	·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB)

TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkfifo(SB)

GLOBL	·libc_mkfifo_trampoline_addr(SB), RODATA, $8
DATA	·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB)

TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mknod(SB)

GLOBL	·libc_mknod_trampoline_addr(SB), RODATA, $8
DATA	·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB)

TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mount(SB)

GLOBL	·libc_mount_trampoline_addr(SB), RODATA, $8
DATA	·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB)

TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_open(SB)

GLOBL	·libc_open_trampoline_addr(SB), RODATA, $8
DATA	·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB)

TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_openat(SB)

GLOBL	·libc_openat_trampoline_addr(SB), RODATA, $8
DATA	·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB)

TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pathconf(SB)

GLOBL	·libc_pathconf_trampoline_addr(SB), RODATA, $8
DATA	·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB)

TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pread(SB)

GLOBL	·libc_pread_trampoline_addr(SB), RODATA, $8
DATA	·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB)

TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pwrite(SB)

GLOBL	·libc_pwrite_trampoline_addr(SB), RODATA, $8
DATA	·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)

TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_read(SB)

GLOBL	·libc_read_trampoline_addr(SB), RODATA, $8
DATA	·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB)

TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_readlink(SB)

GLOBL	·libc_readlink_trampoline_addr(SB), RODATA, $8
DATA	·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB)

TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_readlinkat(SB)

GLOBL	·libc_readlinkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB)

TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_rename(SB)

GLOBL	·libc_rename_trampoline_addr(SB), RODATA, $8
DATA	·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB)

TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_renameat(SB)

GLOBL	·libc_renameat_trampoline_addr(SB), RODATA, $8
DATA	·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB)

TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_revoke(SB)

GLOBL	·libc_revoke_trampoline_addr(SB), RODATA, $8
DATA	·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB)

TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_rmdir(SB)

GLOBL	·libc_rmdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB)

TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_lseek(SB)

GLOBL	·libc_lseek_trampoline_addr(SB), RODATA, $8
DATA	·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB)

TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_select(SB)

GLOBL	·libc_select_trampoline_addr(SB), RODATA, $8
DATA	·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB)

TEXT libc_setattrlist_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setattrlist(SB)
GLOBL	·libc_setattrlist_trampoline_addr(SB), RODATA, $8
DATA	·libc_setattrlist_trampoline_addr(SB)/8, $libc_setattrlist_trampoline<>(SB)

TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setegid(SB)

GLOBL	·libc_setegid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB)

TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_seteuid(SB)

GLOBL	·libc_seteuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB)

TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setgid(SB)

GLOBL	·libc_setgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB)

TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setlogin(SB)

GLOBL	·libc_setlogin_trampoline_addr(SB), RODATA, $8
DATA	·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB)

TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setpgid(SB)

GLOBL	·libc_setpgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB)

TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setpriority(SB)

GLOBL	·libc_setpriority_trampoline_addr(SB), RODATA, $8
DATA	·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB)

TEXT libc_setprivexec_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setprivexec(SB)

GLOBL	·libc_setprivexec_trampoline_addr(SB), RODATA, $8
DATA	·libc_setprivexec_trampoline_addr(SB)/8, $libc_setprivexec_trampoline<>(SB)

TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setregid(SB)

GLOBL	·libc_setregid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB)

TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setreuid(SB)

GLOBL	·libc_setreuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB)

TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setsid(SB)

GLOBL	·libc_setsid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB)

TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_settimeofday(SB)

GLOBL	·libc_settimeofday_trampoline_addr(SB), RODATA, $8
DATA	·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB)

TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setuid(SB)

GLOBL	·libc_setuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB)

TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_symlink(SB)

GLOBL	·libc_symlink_trampoline_addr(SB), RODATA, $8
DATA	·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB)

TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_symlinkat(SB)

GLOBL	·libc_symlinkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB)

TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sync(SB)

GLOBL	·libc_sync_trampoline_addr(SB), RODATA, $8
DATA	·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB)

TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_truncate(SB)

GLOBL	·libc_truncate_trampoline_addr(SB), RODATA, $8
DATA	·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB)

TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_umask(SB)

GLOBL	·libc_umask_trampoline_addr(SB), RODATA, $8
DATA	·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB)

TEXT libc_undelete_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_undelete(SB)

GLOBL	·libc_undelete_trampoline_addr(SB), RODATA, $8
DATA	·libc_undelete_trampoline_addr(SB)/8, $libc_undelete_trampoline<>(SB)

TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_unlink(SB)

GLOBL	·libc_unlink_trampoline_addr(SB), RODATA, $8
DATA	·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB)

TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_unlinkat(SB)

GLOBL	·libc_unlinkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB)

TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_unmount(SB)

GLOBL	·libc_unmount_trampoline_addr(SB), RODATA, $8
DATA	·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB)

TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_write(SB)

GLOBL	·libc_write_trampoline_addr(SB), RODATA, $8
DATA	·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB)

TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mmap(SB)

GLOBL	·libc_mmap_trampoline_addr(SB), RODATA, $8
DATA	·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB)

TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_munmap(SB)

GLOBL	·libc_munmap_trampoline_addr(SB), RODATA, $8
DATA	·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB)

TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fstat(SB)

GLOBL	·libc_fstat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB)

TEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fstatat(SB)

GLOBL	·libc_fstatat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB)

TEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fstatfs(SB)

GLOBL	·libc_fstatfs_trampoline_addr(SB), RODATA, $8
DATA	·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB)

TEXT libc_getfsstat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getfsstat(SB)

GLOBL	·libc_getfsstat_trampoline_addr(SB), RODATA, $8
DATA	·libc_getfsstat_trampoline_addr(SB)/8, $libc_getfsstat_trampoline<>(SB)

TEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_lstat(SB)

GLOBL	·libc_lstat_trampoline_addr(SB), RODATA, $8
DATA	·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB)

TEXT libc_ptrace_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_ptrace(SB)

GLOBL	·libc_ptrace_trampoline_addr(SB), RODATA, $8
DATA	·libc_ptrace_trampoline_addr(SB)/8, $libc_ptrace_trampoline<>(SB)

TEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_stat(SB)

GLOBL	·libc_stat_trampoline_addr(SB), RODATA, $8
DATA	·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB)

TEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_statfs(SB)

GLOBL	·libc_statfs_trampoline_addr(SB), RODATA, $8
DATA	·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB)
   07070100000E54000081A4000000000000000000000001645E367C00009D79000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go  // go run mksyscall.go -dragonfly -tags dragonfly,amd64 syscall_bsd.go syscall_dragonfly.go syscall_dragonfly_amd64.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build dragonfly && amd64
// +build dragonfly,amd64

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(ngid int, gid *_Gid_t) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
	r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
	wpid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
	r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(s int, how int) (err error) {
	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, timeval *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimes(fd int, timeval *[2]Timeval) (err error) {
	_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Madvise(b []byte, behav int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlockall(flags int) (err error) {
	_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mprotect(b []byte, prot int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Msync(b []byte, flags int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlockall() (err error) {
	_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pipe() (r int, w int, err error) {
	r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
	r = int(r0)
	w = int(r1)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pipe2(p *[2]_C_int, flags int) (r int, w int, err error) {
	r0, r1, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
	r = int(r0)
	w = int(r1)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func extpread(fd int, p []byte, flags int, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_EXTPREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(offset), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_EXTPWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(offset), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getcwd(buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctl(fd int, req uint, arg uintptr) (err error) {
	_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {
	_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
	var _p0 unsafe.Pointer
	if len(mib) > 0 {
		_p0 = unsafe.Pointer(&mib[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Access(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
	_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chflags(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chmod(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chroot(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ClockGettime(clockid int32, time *Timespec) (err error) {
	_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Close(fd int) (err error) {
	_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup(fd int) (nfd int, err error) {
	r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)
	nfd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup2(from int, to int) (err error) {
	_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Exit(code int) {
	Syscall(SYS_EXIT, uintptr(code), 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchdir(fd int) (err error) {
	_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchflags(fd int, flags int) (err error) {
	_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmod(fd int, mode uint32) (err error) {
	_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Flock(fd int, how int) (err error) {
	_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fpathconf(fd int, name int) (val int, err error) {
	r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatfs(fd int, stat *Statfs_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fsync(fd int) (err error) {
	_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getdents(fd int, buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getdtablesize() (size int) {
	r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
	size = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (uid int) {
	r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgid(pid int) (pgid int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
	pgid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgrp() (pgrp int) {
	r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)
	pgrp = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpid() (pid int) {
	r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
	pid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getppid() (ppid int) {
	r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
	ppid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpriority(which int, who int) (prio int, err error) {
	r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
	prio = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(which int, lim *Rlimit) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrusage(who int, rusage *Rusage) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getsid(pid int) (sid int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
	sid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Issetugid() (tainted bool) {
	r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)
	tainted = bool(r0 != 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kill(pid int, signum syscall.Signal) (err error) {
	_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kqueue() (fd int, err error) {
	r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Link(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, backlog int) (err error) {
	_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lstat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdir(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdirat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifo(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknod(path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknodat(fd int, path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
	_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Open(path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pathconf(path string, name int) (val int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func read(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlink(path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rename(from string, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(fromfd int, from string, tofd int, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Revoke(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rmdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
	r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0)
	newoffset = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setegid(egid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seteuid(euid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setgid(gid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setlogin(name string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(name)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpgid(pid int, pgid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpriority(which int, who int, prio int) (err error) {
	_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setregid(rgid int, egid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setreuid(ruid int, euid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setresgid(rgid int, egid int, sgid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setresuid(ruid int, euid int, suid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setsid() (pid int, err error) {
	r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
	pid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Settimeofday(tp *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setuid(uid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Stat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statfs(path string, stat *Statfs_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlink(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sync() (err error) {
	_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Umask(newmask int) (oldmask int) {
	r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)
	oldmask = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Undelete(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlink(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlinkat(dirfd int, path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unmount(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func write(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
	r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0)
	ret = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func munmap(addr uintptr, length uintptr) (err error) {
	_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) {
	r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
	nfd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
   07070100000E55000081A4000000000000000000000001645E367C0000B6AB000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go  // go run mksyscall.go -l32 -tags freebsd,386 syscall_bsd.go syscall_freebsd.go syscall_freebsd_386.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build freebsd && 386
// +build freebsd,386

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(ngid int, gid *_Gid_t) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
	r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
	wpid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
	r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(s int, how int) (err error) {
	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, timeval *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimes(fd int, timeval *[2]Timeval) (err error) {
	_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Madvise(b []byte, behav int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlockall(flags int) (err error) {
	_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mprotect(b []byte, prot int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Msync(b []byte, flags int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlockall() (err error) {
	_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pipe2(p *[2]_C_int, flags int) (err error) {
	_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getcwd(buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctl(fd int, req uint, arg uintptr) (err error) {
	_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {
	_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
	var _p0 unsafe.Pointer
	if len(mib) > 0 {
		_p0 = unsafe.Pointer(&mib[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ptrace(request int, pid int, addr uintptr, data int) (err error) {
	_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ptracePtr(request int, pid int, addr unsafe.Pointer, data int) (err error) {
	_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Access(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
	_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func CapEnter() (err error) {
	_, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func capRightsGet(version int, fd int, rightsp *CapRights) (err error) {
	_, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func capRightsLimit(fd int, rightsp *CapRights) (err error) {
	_, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chflags(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chmod(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chroot(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ClockGettime(clockid int32, time *Timespec) (err error) {
	_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Close(fd int) (err error) {
	_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup(fd int) (nfd int, err error) {
	r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)
	nfd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup2(from int, to int) (err error) {
	_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Exit(code int) {
	Syscall(SYS_EXIT, uintptr(code), 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
	r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
	_, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchdir(fd int) (err error) {
	_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchflags(fd int, flags int) (err error) {
	_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmod(fd int, mode uint32) (err error) {
	_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Flock(fd int, how int) (err error) {
	_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fpathconf(fd int, name int) (val int, err error) {
	r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatfs(fd int, stat *Statfs_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fsync(fd int) (err error) {
	_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length>>32))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getdirentries(fd int, buf []byte, basep *uint64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getdtablesize() (size int) {
	r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
	size = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (uid int) {
	r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgid(pid int) (pgid int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
	pgid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgrp() (pgrp int) {
	r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)
	pgrp = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpid() (pid int) {
	r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
	pid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getppid() (ppid int) {
	r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
	ppid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpriority(which int, who int) (prio int, err error) {
	r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
	prio = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(which int, lim *Rlimit) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrusage(who int, rusage *Rusage) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getsid(pid int) (sid int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
	sid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Issetugid() (tainted bool) {
	r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)
	tainted = bool(r0 != 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kill(pid int, signum syscall.Signal) (err error) {
	_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kqueue() (fd int, err error) {
	r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Link(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, backlog int) (err error) {
	_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdir(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdirat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifo(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknodat(fd int, path string, mode uint32, dev uint64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), uintptr(dev>>32), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
	_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Open(path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pathconf(path string, name int) (val int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func read(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlink(path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rename(from string, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(fromfd int, from string, tofd int, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Revoke(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rmdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
	r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0)
	newoffset = int64(int64(r1)<<32 | int64(r0))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setegid(egid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seteuid(euid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setgid(gid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setlogin(name string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(name)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpgid(pid int, pgid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpriority(which int, who int, prio int) (err error) {
	_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setregid(rgid int, egid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setreuid(ruid int, euid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setresgid(rgid int, egid int, sgid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setresuid(ruid int, euid int, suid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setsid() (pid int, err error) {
	r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
	pid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Settimeofday(tp *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setuid(uid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statfs(path string, stat *Statfs_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlink(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sync() (err error) {
	_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Umask(newmask int) (oldmask int) {
	r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)
	oldmask = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Undelete(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlink(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlinkat(dirfd int, path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unmount(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func write(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
	r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0)
	ret = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func munmap(addr uintptr, length uintptr) (err error) {
	_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) {
	r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
	nfd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
 07070100000E56000081A4000000000000000000000001645E367C0000B5E7000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go    // go run mksyscall.go -tags freebsd,amd64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_amd64.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build freebsd && amd64
// +build freebsd,amd64

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(ngid int, gid *_Gid_t) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
	r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
	wpid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
	r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(s int, how int) (err error) {
	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, timeval *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimes(fd int, timeval *[2]Timeval) (err error) {
	_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Madvise(b []byte, behav int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlockall(flags int) (err error) {
	_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mprotect(b []byte, prot int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Msync(b []byte, flags int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlockall() (err error) {
	_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pipe2(p *[2]_C_int, flags int) (err error) {
	_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getcwd(buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctl(fd int, req uint, arg uintptr) (err error) {
	_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {
	_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
	var _p0 unsafe.Pointer
	if len(mib) > 0 {
		_p0 = unsafe.Pointer(&mib[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ptrace(request int, pid int, addr uintptr, data int) (err error) {
	_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ptracePtr(request int, pid int, addr unsafe.Pointer, data int) (err error) {
	_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Access(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
	_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func CapEnter() (err error) {
	_, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func capRightsGet(version int, fd int, rightsp *CapRights) (err error) {
	_, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func capRightsLimit(fd int, rightsp *CapRights) (err error) {
	_, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chflags(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chmod(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chroot(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ClockGettime(clockid int32, time *Timespec) (err error) {
	_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Close(fd int) (err error) {
	_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup(fd int) (nfd int, err error) {
	r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)
	nfd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup2(from int, to int) (err error) {
	_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Exit(code int) {
	Syscall(SYS_EXIT, uintptr(code), 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
	r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
	_, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchdir(fd int) (err error) {
	_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchflags(fd int, flags int) (err error) {
	_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmod(fd int, mode uint32) (err error) {
	_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Flock(fd int, how int) (err error) {
	_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fpathconf(fd int, name int) (val int, err error) {
	r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatfs(fd int, stat *Statfs_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fsync(fd int) (err error) {
	_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getdirentries(fd int, buf []byte, basep *uint64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getdtablesize() (size int) {
	r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
	size = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (uid int) {
	r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgid(pid int) (pgid int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
	pgid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgrp() (pgrp int) {
	r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)
	pgrp = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpid() (pid int) {
	r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
	pid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getppid() (ppid int) {
	r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
	ppid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpriority(which int, who int) (prio int, err error) {
	r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
	prio = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(which int, lim *Rlimit) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrusage(who int, rusage *Rusage) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getsid(pid int) (sid int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
	sid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Issetugid() (tainted bool) {
	r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)
	tainted = bool(r0 != 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kill(pid int, signum syscall.Signal) (err error) {
	_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kqueue() (fd int, err error) {
	r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Link(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, backlog int) (err error) {
	_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdir(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdirat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifo(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknodat(fd int, path string, mode uint32, dev uint64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
	_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Open(path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pathconf(path string, name int) (val int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func read(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlink(path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rename(from string, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(fromfd int, from string, tofd int, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Revoke(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rmdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
	r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
	newoffset = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setegid(egid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seteuid(euid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setgid(gid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setlogin(name string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(name)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpgid(pid int, pgid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpriority(which int, who int, prio int) (err error) {
	_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setregid(rgid int, egid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setreuid(ruid int, euid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setresgid(rgid int, egid int, sgid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setresuid(ruid int, euid int, suid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setsid() (pid int, err error) {
	r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
	pid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Settimeofday(tp *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setuid(uid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statfs(path string, stat *Statfs_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlink(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sync() (err error) {
	_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Umask(newmask int) (oldmask int) {
	r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)
	oldmask = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Undelete(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlink(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlinkat(dirfd int, path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unmount(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func write(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
	r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
	ret = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func munmap(addr uintptr, length uintptr) (err error) {
	_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) {
	r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
	nfd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
 07070100000E57000081A4000000000000000000000001645E367C0000B6CD000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go  // go run mksyscall.go -l32 -arm -tags freebsd,arm syscall_bsd.go syscall_freebsd.go syscall_freebsd_arm.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build freebsd && arm
// +build freebsd,arm

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(ngid int, gid *_Gid_t) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
	r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
	wpid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
	r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(s int, how int) (err error) {
	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, timeval *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimes(fd int, timeval *[2]Timeval) (err error) {
	_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Madvise(b []byte, behav int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlockall(flags int) (err error) {
	_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mprotect(b []byte, prot int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Msync(b []byte, flags int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlockall() (err error) {
	_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pipe2(p *[2]_C_int, flags int) (err error) {
	_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getcwd(buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctl(fd int, req uint, arg uintptr) (err error) {
	_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {
	_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
	var _p0 unsafe.Pointer
	if len(mib) > 0 {
		_p0 = unsafe.Pointer(&mib[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ptrace(request int, pid int, addr uintptr, data int) (err error) {
	_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ptracePtr(request int, pid int, addr unsafe.Pointer, data int) (err error) {
	_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Access(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
	_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func CapEnter() (err error) {
	_, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func capRightsGet(version int, fd int, rightsp *CapRights) (err error) {
	_, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func capRightsLimit(fd int, rightsp *CapRights) (err error) {
	_, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chflags(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chmod(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chroot(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ClockGettime(clockid int32, time *Timespec) (err error) {
	_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Close(fd int) (err error) {
	_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup(fd int) (nfd int, err error) {
	r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)
	nfd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup2(from int, to int) (err error) {
	_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Exit(code int) {
	Syscall(SYS_EXIT, uintptr(code), 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
	r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
	_, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchdir(fd int) (err error) {
	_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchflags(fd int, flags int) (err error) {
	_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmod(fd int, mode uint32) (err error) {
	_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Flock(fd int, how int) (err error) {
	_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fpathconf(fd int, name int) (val int, err error) {
	r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatfs(fd int, stat *Statfs_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fsync(fd int) (err error) {
	_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getdirentries(fd int, buf []byte, basep *uint64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getdtablesize() (size int) {
	r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
	size = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (uid int) {
	r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgid(pid int) (pgid int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
	pgid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgrp() (pgrp int) {
	r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)
	pgrp = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpid() (pid int) {
	r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
	pid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getppid() (ppid int) {
	r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
	ppid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpriority(which int, who int) (prio int, err error) {
	r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
	prio = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(which int, lim *Rlimit) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrusage(who int, rusage *Rusage) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getsid(pid int) (sid int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
	sid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Issetugid() (tainted bool) {
	r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)
	tainted = bool(r0 != 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kill(pid int, signum syscall.Signal) (err error) {
	_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kqueue() (fd int, err error) {
	r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Link(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, backlog int) (err error) {
	_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdir(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdirat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifo(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknodat(fd int, path string, mode uint32, dev uint64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, uintptr(dev), uintptr(dev>>32))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
	_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Open(path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pathconf(path string, name int) (val int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func read(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlink(path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rename(from string, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(fromfd int, from string, tofd int, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Revoke(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rmdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
	r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0)
	newoffset = int64(int64(r1)<<32 | int64(r0))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setegid(egid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seteuid(euid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setgid(gid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setlogin(name string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(name)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpgid(pid int, pgid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpriority(which int, who int, prio int) (err error) {
	_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setregid(rgid int, egid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setreuid(ruid int, euid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setresgid(rgid int, egid int, sgid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setresuid(ruid int, euid int, suid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setsid() (pid int, err error) {
	r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
	pid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Settimeofday(tp *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setuid(uid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statfs(path string, stat *Statfs_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlink(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sync() (err error) {
	_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Umask(newmask int) (oldmask int) {
	r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)
	oldmask = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Undelete(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlink(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlinkat(dirfd int, path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unmount(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func write(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
	r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0)
	ret = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func munmap(addr uintptr, length uintptr) (err error) {
	_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) {
	r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
	nfd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
   07070100000E58000081A4000000000000000000000001645E367C0000B5E7000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go    // go run mksyscall.go -tags freebsd,arm64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_arm64.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build freebsd && arm64
// +build freebsd,arm64

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(ngid int, gid *_Gid_t) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
	r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
	wpid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
	r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(s int, how int) (err error) {
	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, timeval *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimes(fd int, timeval *[2]Timeval) (err error) {
	_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Madvise(b []byte, behav int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlockall(flags int) (err error) {
	_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mprotect(b []byte, prot int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Msync(b []byte, flags int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlockall() (err error) {
	_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pipe2(p *[2]_C_int, flags int) (err error) {
	_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getcwd(buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctl(fd int, req uint, arg uintptr) (err error) {
	_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {
	_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
	var _p0 unsafe.Pointer
	if len(mib) > 0 {
		_p0 = unsafe.Pointer(&mib[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ptrace(request int, pid int, addr uintptr, data int) (err error) {
	_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ptracePtr(request int, pid int, addr unsafe.Pointer, data int) (err error) {
	_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Access(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
	_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func CapEnter() (err error) {
	_, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func capRightsGet(version int, fd int, rightsp *CapRights) (err error) {
	_, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func capRightsLimit(fd int, rightsp *CapRights) (err error) {
	_, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chflags(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chmod(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chroot(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ClockGettime(clockid int32, time *Timespec) (err error) {
	_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Close(fd int) (err error) {
	_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup(fd int) (nfd int, err error) {
	r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)
	nfd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup2(from int, to int) (err error) {
	_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Exit(code int) {
	Syscall(SYS_EXIT, uintptr(code), 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
	r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
	_, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchdir(fd int) (err error) {
	_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchflags(fd int, flags int) (err error) {
	_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmod(fd int, mode uint32) (err error) {
	_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Flock(fd int, how int) (err error) {
	_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fpathconf(fd int, name int) (val int, err error) {
	r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatfs(fd int, stat *Statfs_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fsync(fd int) (err error) {
	_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getdirentries(fd int, buf []byte, basep *uint64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getdtablesize() (size int) {
	r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
	size = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (uid int) {
	r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgid(pid int) (pgid int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
	pgid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgrp() (pgrp int) {
	r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)
	pgrp = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpid() (pid int) {
	r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
	pid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getppid() (ppid int) {
	r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
	ppid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpriority(which int, who int) (prio int, err error) {
	r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
	prio = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(which int, lim *Rlimit) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrusage(who int, rusage *Rusage) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getsid(pid int) (sid int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
	sid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Issetugid() (tainted bool) {
	r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)
	tainted = bool(r0 != 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kill(pid int, signum syscall.Signal) (err error) {
	_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kqueue() (fd int, err error) {
	r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Link(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, backlog int) (err error) {
	_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdir(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdirat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifo(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknodat(fd int, path string, mode uint32, dev uint64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
	_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Open(path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pathconf(path string, name int) (val int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func read(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlink(path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rename(from string, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(fromfd int, from string, tofd int, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Revoke(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rmdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
	r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
	newoffset = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setegid(egid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seteuid(euid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setgid(gid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setlogin(name string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(name)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpgid(pid int, pgid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpriority(which int, who int, prio int) (err error) {
	_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setregid(rgid int, egid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setreuid(ruid int, euid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setresgid(rgid int, egid int, sgid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setresuid(ruid int, euid int, suid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setsid() (pid int, err error) {
	r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
	pid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Settimeofday(tp *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setuid(uid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statfs(path string, stat *Statfs_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlink(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sync() (err error) {
	_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Umask(newmask int) (oldmask int) {
	r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)
	oldmask = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Undelete(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlink(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlinkat(dirfd int, path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unmount(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func write(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
	r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
	ret = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func munmap(addr uintptr, length uintptr) (err error) {
	_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) {
	r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
	nfd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
 07070100000E59000081A4000000000000000000000001645E367C0000B5EF000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go  // go run mksyscall.go -tags freebsd,riscv64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_riscv64.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build freebsd && riscv64
// +build freebsd,riscv64

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(ngid int, gid *_Gid_t) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
	r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
	wpid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
	r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(s int, how int) (err error) {
	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, timeval *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimes(fd int, timeval *[2]Timeval) (err error) {
	_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Madvise(b []byte, behav int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlockall(flags int) (err error) {
	_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mprotect(b []byte, prot int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Msync(b []byte, flags int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlockall() (err error) {
	_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pipe2(p *[2]_C_int, flags int) (err error) {
	_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getcwd(buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctl(fd int, req uint, arg uintptr) (err error) {
	_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {
	_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
	var _p0 unsafe.Pointer
	if len(mib) > 0 {
		_p0 = unsafe.Pointer(&mib[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ptrace(request int, pid int, addr uintptr, data int) (err error) {
	_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ptracePtr(request int, pid int, addr unsafe.Pointer, data int) (err error) {
	_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Access(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
	_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func CapEnter() (err error) {
	_, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func capRightsGet(version int, fd int, rightsp *CapRights) (err error) {
	_, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func capRightsLimit(fd int, rightsp *CapRights) (err error) {
	_, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chflags(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chmod(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chroot(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ClockGettime(clockid int32, time *Timespec) (err error) {
	_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Close(fd int) (err error) {
	_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup(fd int) (nfd int, err error) {
	r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)
	nfd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup2(from int, to int) (err error) {
	_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Exit(code int) {
	Syscall(SYS_EXIT, uintptr(code), 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
	r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
	_, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchdir(fd int) (err error) {
	_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchflags(fd int, flags int) (err error) {
	_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmod(fd int, mode uint32) (err error) {
	_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Flock(fd int, how int) (err error) {
	_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fpathconf(fd int, name int) (val int, err error) {
	r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatfs(fd int, stat *Statfs_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fsync(fd int) (err error) {
	_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getdirentries(fd int, buf []byte, basep *uint64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getdtablesize() (size int) {
	r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
	size = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (uid int) {
	r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgid(pid int) (pgid int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
	pgid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgrp() (pgrp int) {
	r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)
	pgrp = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpid() (pid int) {
	r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
	pid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getppid() (ppid int) {
	r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
	ppid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpriority(which int, who int) (prio int, err error) {
	r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
	prio = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(which int, lim *Rlimit) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrusage(who int, rusage *Rusage) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getsid(pid int) (sid int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
	sid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Issetugid() (tainted bool) {
	r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)
	tainted = bool(r0 != 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kill(pid int, signum syscall.Signal) (err error) {
	_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kqueue() (fd int, err error) {
	r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Link(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, backlog int) (err error) {
	_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdir(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdirat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifo(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknodat(fd int, path string, mode uint32, dev uint64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
	_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Open(path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pathconf(path string, name int) (val int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func read(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlink(path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rename(from string, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(fromfd int, from string, tofd int, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Revoke(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rmdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
	r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
	newoffset = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setegid(egid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seteuid(euid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setgid(gid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setlogin(name string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(name)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpgid(pid int, pgid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpriority(which int, who int, prio int) (err error) {
	_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setregid(rgid int, egid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setreuid(ruid int, euid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setresgid(rgid int, egid int, sgid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setresuid(ruid int, euid int, suid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setsid() (pid int, err error) {
	r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
	pid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Settimeofday(tp *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setuid(uid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statfs(path string, stat *Statfs_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlink(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sync() (err error) {
	_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Umask(newmask int) (oldmask int) {
	r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)
	oldmask = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Undelete(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlink(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlinkat(dirfd int, path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unmount(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func write(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
	r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
	ret = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func munmap(addr uintptr, length uintptr) (err error) {
	_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) {
	r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
	nfd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
 07070100000E5A000081A4000000000000000000000001645E367C00000A70000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go    // go run mksyscall_solaris.go -illumos -tags illumos,amd64 syscall_illumos.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build illumos && amd64
// +build illumos,amd64

package unix

import (
	"unsafe"
)

//go:cgo_import_dynamic libc_readv readv "libc.so"
//go:cgo_import_dynamic libc_preadv preadv "libc.so"
//go:cgo_import_dynamic libc_writev writev "libc.so"
//go:cgo_import_dynamic libc_pwritev pwritev "libc.so"
//go:cgo_import_dynamic libc_accept4 accept4 "libsocket.so"

//go:linkname procreadv libc_readv
//go:linkname procpreadv libc_preadv
//go:linkname procwritev libc_writev
//go:linkname procpwritev libc_pwritev
//go:linkname procaccept4 libc_accept4

var (
	procreadv,
	procpreadv,
	procwritev,
	procpwritev,
	procaccept4 syscallFunc
)

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func readv(fd int, iovs []Iovec) (n int, err error) {
	var _p0 *Iovec
	if len(iovs) > 0 {
		_p0 = &iovs[0]
	}
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procreadv)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), 0, 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func preadv(fd int, iovs []Iovec, off int64) (n int, err error) {
	var _p0 *Iovec
	if len(iovs) > 0 {
		_p0 = &iovs[0]
	}
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpreadv)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), uintptr(off), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func writev(fd int, iovs []Iovec) (n int, err error) {
	var _p0 *Iovec
	if len(iovs) > 0 {
		_p0 = &iovs[0]
	}
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwritev)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), 0, 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwritev(fd int, iovs []Iovec, off int64) (n int, err error) {
	var _p0 *Iovec
	if len(iovs) > 0 {
		_p0 = &iovs[0]
	}
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpwritev)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), uintptr(off), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procaccept4)), 4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}
07070100000E5B000081A4000000000000000000000001645E367C0000D283000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_linux.go    // Code generated by mkmerge; DO NOT EDIT.

//go:build linux
// +build linux

package unix

import (
	"syscall"
	"unsafe"
)

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) {
	r0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fchmodat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctl(fd int, req uint, arg uintptr) (err error) {
	_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {
	_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func openat2(dirfd int, path string, open_how *OpenHow, size int) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_OPENAT2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(open_how)), uintptr(size), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pipe2(p *[2]_C_int, flags int) (err error) {
	_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlinkat(dirfd int, path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getcwd(buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
	r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
	wpid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Waitid(idType int, id int, info *Siginfo, options int, rusage *Rusage) (err error) {
	_, _, e1 := Syscall6(SYS_WAITID, uintptr(idType), uintptr(id), uintptr(unsafe.Pointer(info)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {
	r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func keyctlJoin(cmd int, arg2 string) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(arg2)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(arg3)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(arg4)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {
	var _p0 unsafe.Pointer
	if len(payload) > 0 {
		_p0 = unsafe.Pointer(&payload[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func keyctlRestrictKeyringByType(cmd int, arg2 int, keyType string, restriction string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(keyType)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(restriction)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func keyctlRestrictKeyring(cmd int, arg2 int) (err error) {
	_, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
	_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) {
	_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(arg)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(source)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(target)
	if err != nil {
		return
	}
	var _p2 *byte
	_p2, err = BytePtrFromString(fstype)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mountSetattr(dirfd int, pathname string, flags uint, attr *MountAttr, size uintptr) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(pathname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_MOUNT_SETATTR, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(unsafe.Pointer(attr)), uintptr(size), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Acct(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(keyType)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(description)
	if err != nil {
		return
	}
	var _p2 unsafe.Pointer
	if len(payload) > 0 {
		_p2 = unsafe.Pointer(&payload[0])
	} else {
		_p2 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)
	id = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Adjtimex(buf *Timex) (state int, err error) {
	r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)
	state = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Capget(hdr *CapUserHeader, data *CapUserData) (err error) {
	_, _, e1 := RawSyscall(SYS_CAPGET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Capset(hdr *CapUserHeader, data *CapUserData) (err error) {
	_, _, e1 := RawSyscall(SYS_CAPSET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chroot(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ClockAdjtime(clockid int32, buf *Timex) (state int, err error) {
	r0, _, e1 := Syscall(SYS_CLOCK_ADJTIME, uintptr(clockid), uintptr(unsafe.Pointer(buf)), 0)
	state = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ClockGetres(clockid int32, res *Timespec) (err error) {
	_, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ClockGettime(clockid int32, time *Timespec) (err error) {
	_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) {
	_, _, e1 := Syscall6(SYS_CLOCK_NANOSLEEP, uintptr(clockid), uintptr(flags), uintptr(unsafe.Pointer(request)), uintptr(unsafe.Pointer(remain)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Close(fd int) (err error) {
	_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func CloseRange(first uint, last uint, flags uint) (err error) {
	_, _, e1 := Syscall(SYS_CLOSE_RANGE, uintptr(first), uintptr(last), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func DeleteModule(name string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(name)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup(oldfd int) (fd int, err error) {
	r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup3(oldfd int, newfd int, flags int) (err error) {
	_, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func EpollCreate1(flag int) (fd int, err error) {
	r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {
	_, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Eventfd(initval uint, flags int) (fd int, err error) {
	r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Exit(code int) {
	SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchdir(fd int) (err error) {
	_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmod(fd int, mode uint32) (err error) {
	_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fdatasync(fd int) (err error) {
	_, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attr)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(dest) > 0 {
		_p1 = unsafe.Pointer(&dest[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)
	sz = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func FinitModule(fd int, params string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(params)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Flistxattr(fd int, dest []byte) (sz int, err error) {
	var _p0 unsafe.Pointer
	if len(dest) > 0 {
		_p0 = unsafe.Pointer(&dest[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))
	sz = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Flock(fd int, how int) (err error) {
	_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fremovexattr(fd int, attr string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attr)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attr)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(dest) > 0 {
		_p1 = unsafe.Pointer(&dest[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fsync(fd int) (err error) {
	_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fsmount(fd int, flags int, mountAttrs int) (fsfd int, err error) {
	r0, _, e1 := Syscall(SYS_FSMOUNT, uintptr(fd), uintptr(flags), uintptr(mountAttrs))
	fsfd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fsopen(fsName string, flags int) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(fsName)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall(SYS_FSOPEN, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fspick(dirfd int, pathName string, flags int) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(pathName)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall(SYS_FSPICK, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getdents(fd int, buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgid(pid int) (pgid int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
	pgid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpid() (pid int) {
	r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0)
	pid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getppid() (ppid int) {
	r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0)
	ppid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpriority(which int, who int) (prio int, err error) {
	r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
	prio = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrandom(buf []byte, flags int) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrusage(who int, rusage *Rusage) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getsid(pid int) (sid int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
	sid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettid() (tid int) {
	r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0)
	tid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attr)
	if err != nil {
		return
	}
	var _p2 unsafe.Pointer
	if len(dest) > 0 {
		_p2 = unsafe.Pointer(&dest[0])
	} else {
		_p2 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
	sz = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func InitModule(moduleImage []byte, params string) (err error) {
	var _p0 unsafe.Pointer
	if len(moduleImage) > 0 {
		_p0 = unsafe.Pointer(&moduleImage[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(params)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(pathname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))
	watchdesc = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func InotifyInit1(flags int) (fd int, err error) {
	r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {
	r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)
	success = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kill(pid int, sig syscall.Signal) (err error) {
	_, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Klogctl(typ int, buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attr)
	if err != nil {
		return
	}
	var _p2 unsafe.Pointer
	if len(dest) > 0 {
		_p2 = unsafe.Pointer(&dest[0])
	} else {
		_p2 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
	sz = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listxattr(path string, dest []byte) (sz int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(dest) > 0 {
		_p1 = unsafe.Pointer(&dest[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
	sz = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Llistxattr(path string, dest []byte) (sz int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(dest) > 0 {
		_p1 = unsafe.Pointer(&dest[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
	sz = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lremovexattr(path string, attr string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attr)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lsetxattr(path string, attr string, data []byte, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attr)
	if err != nil {
		return
	}
	var _p2 unsafe.Pointer
	if len(data) > 0 {
		_p2 = unsafe.Pointer(&data[0])
	} else {
		_p2 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func MemfdCreate(name string, flags int) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(name)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdirat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func MoveMount(fromDirfd int, fromPathName string, toDirfd int, toPathName string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(fromPathName)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(toPathName)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_MOVE_MOUNT, uintptr(fromDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(toDirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
	_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func OpenTree(dfd int, fileName string, flags uint) (r int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(fileName)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall(SYS_OPEN_TREE, uintptr(dfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
	r = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) {
	r0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func PivotRoot(newroot string, putold string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(newroot)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(putold)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {
	_, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func read(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Removexattr(path string, attr string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attr)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(keyType)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(description)
	if err != nil {
		return
	}
	var _p2 *byte
	_p2, err = BytePtrFromString(callback)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)
	id = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setdomainname(p []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sethostname(p []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpgid(pid int, pgid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setsid() (pid int, err error) {
	r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
	pid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Settimeofday(tv *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setns(fd int, nstype int) (err error) {
	_, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpriority(which int, who int, prio int) (err error) {
	_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setxattr(path string, attr string, data []byte, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attr)
	if err != nil {
		return
	}
	var _p2 unsafe.Pointer
	if len(data) > 0 {
		_p2 = unsafe.Pointer(&data[0])
	} else {
		_p2 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {
	r0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)
	newfd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sync() {
	SyscallNoError(SYS_SYNC, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Syncfs(fd int) (err error) {
	_, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sysinfo(info *Sysinfo_t) (err error) {
	_, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func TimerfdCreate(clockid int, flags int) (fd int, err error) {
	r0, _, e1 := RawSyscall(SYS_TIMERFD_CREATE, uintptr(clockid), uintptr(flags), 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func TimerfdGettime(fd int, currValue *ItimerSpec) (err error) {
	_, _, e1 := RawSyscall(SYS_TIMERFD_GETTIME, uintptr(fd), uintptr(unsafe.Pointer(currValue)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func TimerfdSettime(fd int, flags int, newValue *ItimerSpec, oldValue *ItimerSpec) (err error) {
	_, _, e1 := RawSyscall6(SYS_TIMERFD_SETTIME, uintptr(fd), uintptr(flags), uintptr(unsafe.Pointer(newValue)), uintptr(unsafe.Pointer(oldValue)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {
	_, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Times(tms *Tms) (ticks uintptr, err error) {
	r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)
	ticks = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Umask(mask int) (oldmask int) {
	r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0)
	oldmask = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Uname(buf *Utsname) (err error) {
	_, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unmount(target string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(target)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unshare(flags int) (err error) {
	_, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func write(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func exitThread(code int) (err error) {
	_, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func readlen(fd int, p *byte, np int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func writelen(fd int, p *byte, np int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func readv(fd int, iovs []Iovec) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(iovs) > 0 {
		_p0 = unsafe.Pointer(&iovs[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_READV, uintptr(fd), uintptr(_p0), uintptr(len(iovs)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func writev(fd int, iovs []Iovec) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(iovs) > 0 {
		_p0 = unsafe.Pointer(&iovs[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_WRITEV, uintptr(fd), uintptr(_p0), uintptr(len(iovs)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func preadv(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(iovs) > 0 {
		_p0 = unsafe.Pointer(&iovs[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PREADV, uintptr(fd), uintptr(_p0), uintptr(len(iovs)), uintptr(offs_l), uintptr(offs_h), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwritev(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(iovs) > 0 {
		_p0 = unsafe.Pointer(&iovs[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PWRITEV, uintptr(fd), uintptr(_p0), uintptr(len(iovs)), uintptr(offs_l), uintptr(offs_h), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func preadv2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(iovs) > 0 {
		_p0 = unsafe.Pointer(&iovs[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PREADV2, uintptr(fd), uintptr(_p0), uintptr(len(iovs)), uintptr(offs_l), uintptr(offs_h), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwritev2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(iovs) > 0 {
		_p0 = unsafe.Pointer(&iovs[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PWRITEV2, uintptr(fd), uintptr(_p0), uintptr(len(iovs)), uintptr(offs_l), uintptr(offs_h), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func munmap(addr uintptr, length uintptr) (err error) {
	_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Madvise(b []byte, advice int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mprotect(b []byte, prot int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlockall(flags int) (err error) {
	_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Msync(b []byte, flags int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlockall() (err error) {
	_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func faccessat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Faccessat2(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FACCESSAT2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(pathname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) {
	r0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ProcessVMReadv(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags uint) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(localIov) > 0 {
		_p0 = unsafe.Pointer(&localIov[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	var _p1 unsafe.Pointer
	if len(remoteIov) > 0 {
		_p1 = unsafe.Pointer(&remoteIov[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PROCESS_VM_READV, uintptr(pid), uintptr(_p0), uintptr(len(localIov)), uintptr(_p1), uintptr(len(remoteIov)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ProcessVMWritev(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags uint) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(localIov) > 0 {
		_p0 = unsafe.Pointer(&localIov[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	var _p1 unsafe.Pointer
	if len(remoteIov) > 0 {
		_p1 = unsafe.Pointer(&remoteIov[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PROCESS_VM_WRITEV, uintptr(pid), uintptr(_p0), uintptr(len(localIov)), uintptr(_p1), uintptr(len(remoteIov)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func PidfdOpen(pid int, flags int) (fd int, err error) {
	r0, _, e1 := Syscall(SYS_PIDFD_OPEN, uintptr(pid), uintptr(flags), 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func PidfdGetfd(pidfd int, targetfd int, flags int) (fd int, err error) {
	r0, _, e1 := Syscall(SYS_PIDFD_GETFD, uintptr(pidfd), uintptr(targetfd), uintptr(flags))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func PidfdSendSignal(pidfd int, sig Signal, info *Siginfo, flags int) (err error) {
	_, _, e1 := Syscall6(SYS_PIDFD_SEND_SIGNAL, uintptr(pidfd), uintptr(sig), uintptr(unsafe.Pointer(info)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func shmat(id int, addr uintptr, flag int) (ret uintptr, err error) {
	r0, _, e1 := Syscall(SYS_SHMAT, uintptr(id), uintptr(addr), uintptr(flag))
	ret = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) {
	r0, _, e1 := Syscall(SYS_SHMCTL, uintptr(id), uintptr(cmd), uintptr(unsafe.Pointer(buf)))
	result = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func shmdt(addr uintptr) (err error) {
	_, _, e1 := Syscall(SYS_SHMDT, uintptr(addr), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func shmget(key int, size int, flag int) (id int, err error) {
	r0, _, e1 := Syscall(SYS_SHMGET, uintptr(key), uintptr(size), uintptr(flag))
	id = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getitimer(which int, currValue *Itimerval) (err error) {
	_, _, e1 := Syscall(SYS_GETITIMER, uintptr(which), uintptr(unsafe.Pointer(currValue)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setitimer(which int, newValue *Itimerval, oldValue *Itimerval) (err error) {
	_, _, e1 := Syscall(SYS_SETITIMER, uintptr(which), uintptr(unsafe.Pointer(newValue)), uintptr(unsafe.Pointer(oldValue)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func rtSigprocmask(how int, set *Sigset_t, oldset *Sigset_t, sigsetsize uintptr) (err error) {
	_, _, e1 := RawSyscall6(SYS_RT_SIGPROCMASK, uintptr(how), uintptr(unsafe.Pointer(set)), uintptr(unsafe.Pointer(oldset)), uintptr(sigsetsize), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
 07070100000E5C000081A4000000000000000000000001645E367C00003081000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go    // go run mksyscall.go -l32 -tags linux,386 syscall_linux.go syscall_linux_386.go syscall_linux_alarm.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build linux && 386
// +build linux,386

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
	_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(mask>>32), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
	_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
	r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
	n = int64(int64(r1)<<32 | int64(r0))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(events) > 0 {
		_p0 = unsafe.Pointer(&events[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
	_, _, e1 := Syscall6(SYS_FADVISE64_64, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := Syscall(SYS_FTRUNCATE64, uintptr(fd), uintptr(length), uintptr(length>>32))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _ := RawSyscallNoError(SYS_GETEGID32, 0, 0, 0)
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (euid int) {
	r0, _ := RawSyscallNoError(SYS_GETEUID32, 0, 0, 0)
	euid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _ := RawSyscallNoError(SYS_GETGID32, 0, 0, 0)
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _ := RawSyscallNoError(SYS_GETUID32, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ioperm(from int, num int, on int) (err error) {
	_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Iopl(level int) (err error) {
	_, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LCHOWN32, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lstat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)
	written = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsgid(gid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSGID32, uintptr(gid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsuid(uid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSUID32, uintptr(uid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Stat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func SyncFileRange(fd int, off int64, n int64, flags int) (err error) {
	_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ustat(dev int, ubuf *Ustat_t) (err error) {
	_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(n int, list *_Gid_t) (nn int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	nn = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(n int, list *_Gid_t) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) {
	r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset))
	xaddr = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pause() (err error) {
	_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getrlimit(resource int, rlim *rlimit32) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimesat(dirfd int, path string, times *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Time(t *Time_t) (tt Time_t, err error) {
	r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0)
	tt = Time_t(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Utime(path string, buf *Utimbuf) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, times *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Alarm(seconds uint) (remaining uint, err error) {
	r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)
	remaining = uint(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
   07070100000E5D000081A4000000000000000000000001645E367C00004215000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go  // go run mksyscall.go -tags linux,amd64 syscall_linux.go syscall_linux_amd64.go syscall_linux_alarm.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build linux && amd64
// +build linux,amd64

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
	_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
	_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
	r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
	n = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(events) > 0 {
		_p0 = unsafe.Pointer(&events[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
	_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatfs(fd int, buf *Statfs_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (euid int) {
	r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)
	euid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(resource int, rlim *Rlimit) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ioperm(from int, num int, on int) (err error) {
	_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Iopl(level int) (err error) {
	_, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, n int) (err error) {
	_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func MemfdSecret(flags int) (fd int, err error) {
	r0, _, e1 := Syscall(SYS_MEMFD_SECRET, uintptr(flags), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pause() (err error) {
	_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (off int64, err error) {
	r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
	off = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)
	written = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsgid(gid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsuid(uid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(fd int, how int) (err error) {
	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
	r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
	n = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statfs(path string, buf *Statfs_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func SyncFileRange(fd int, off int64, n int64, flags int) (err error) {
	_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ustat(dev int, ubuf *Ustat_t) (err error) {
	_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
	r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(n int, list *_Gid_t) (nn int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	nn = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(n int, list *_Gid_t) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
	r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))
	xaddr = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimesat(dirfd int, path string, times *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Utime(path string, buf *Utimbuf) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, times *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(cmdline)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Alarm(seconds uint) (remaining uint, err error) {
	r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)
	remaining = uint(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
   07070100000E5E000081A4000000000000000000000001645E367C00003E82000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go    // go run mksyscall.go -l32 -arm -tags linux,arm syscall_linux.go syscall_linux_arm.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build linux && arm
// +build linux,arm

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
	_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(mask>>32), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
	_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
	r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
	n = int64(int64(r1)<<32 | int64(r0))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
	r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(n int, list *_Gid_t) (nn int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	nn = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(n int, list *_Gid_t) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) {
	_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(events) > 0 {
		_p0 = unsafe.Pointer(&events[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _ := RawSyscallNoError(SYS_GETEGID32, 0, 0, 0)
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (euid int) {
	r0, _ := RawSyscallNoError(SYS_GETEUID32, 0, 0, 0)
	euid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _ := RawSyscallNoError(SYS_GETGID32, 0, 0, 0)
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _ := RawSyscallNoError(SYS_GETUID32, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LCHOWN32, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, n int) (err error) {
	_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lstat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pause() (err error) {
	_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)
	written = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsgid(gid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSGID32, uintptr(gid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsuid(uid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSUID32, uintptr(uid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(fd int, how int) (err error) {
	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Stat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ustat(dev int, ubuf *Ustat_t) (err error) {
	_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimesat(dirfd int, path string, times *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, times *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) {
	r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset))
	xaddr = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getrlimit(resource int, rlim *rlimit32) (err error) {
	_, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func armSyncFileRange(fd int, flags int, off int64, n int64) (err error) {
	_, _, e1 := Syscall6(SYS_ARM_SYNC_FILE_RANGE, uintptr(fd), uintptr(flags), uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(cmdline)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
  07070100000E5F000081A4000000000000000000000001645E367C000038F8000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go  // go run mksyscall.go -tags linux,arm64 syscall_linux.go syscall_linux_arm64.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build linux && arm64
// +build linux,arm64

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
	_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
	_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
	r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
	n = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(events) > 0 {
		_p0 = unsafe.Pointer(&events[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
	_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatfs(fd int, buf *Statfs_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (euid int) {
	r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)
	euid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getrlimit(resource int, rlim *Rlimit) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, n int) (err error) {
	_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func MemfdSecret(flags int) (fd int, err error) {
	r0, _, e1 := Syscall(SYS_MEMFD_SECRET, uintptr(flags), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (off int64, err error) {
	r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
	off = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)
	written = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsgid(gid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsuid(uid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(fd int, how int) (err error) {
	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
	r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
	n = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statfs(path string, buf *Statfs_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func SyncFileRange(fd int, off int64, n int64, flags int) (err error) {
	_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
	r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(n int, list *_Gid_t) (nn int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	nn = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(n int, list *_Gid_t) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
	r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))
	xaddr = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(cmdline)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
07070100000E60000081A4000000000000000000000001645E367C0000328A000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go    // go run mksyscall.go -tags linux,loong64 syscall_linux.go syscall_linux_loong64.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build linux && loong64
// +build linux,loong64

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
	_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
	_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
	r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
	n = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(events) > 0 {
		_p0 = unsafe.Pointer(&events[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
	_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatfs(fd int, buf *Statfs_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (euid int) {
	r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)
	euid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, n int) (err error) {
	_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (off int64, err error) {
	r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
	off = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)
	written = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsgid(gid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsuid(uid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(fd int, how int) (err error) {
	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
	r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
	n = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statfs(path string, buf *Statfs_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func SyncFileRange(fd int, off int64, n int64, flags int) (err error) {
	_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
	r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(n int, list *_Gid_t) (nn int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	nn = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(n int, list *_Gid_t) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
	r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))
	xaddr = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(cmdline)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
  07070100000E61000081A4000000000000000000000001645E367C00004320000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go   // go run mksyscall.go -b32 -arm -tags linux,mips syscall_linux.go syscall_linux_mipsx.go syscall_linux_alarm.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build linux && mips
// +build linux,mips

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
	_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask>>32), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
	_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off>>32), uintptr(off), uintptr(len>>32), uintptr(len))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
	r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
	n = int64(int64(r0)<<32 | int64(r1))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(events) > 0 {
		_p0 = unsafe.Pointer(&events[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
	_, _, e1 := Syscall9(SYS_FADVISE64, uintptr(fd), 0, uintptr(offset>>32), uintptr(offset), uintptr(length>>32), uintptr(length), uintptr(advice), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length>>32), uintptr(length), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (euid int) {
	r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)
	euid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, n int) (err error) {
	_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset>>32), uintptr(offset))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset>>32), uintptr(offset))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)
	written = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsgid(gid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsuid(uid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(fd int, how int) (err error) {
	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func SyncFileRange(fd int, off int64, n int64, flags int) (err error) {
	_, _, e1 := Syscall9(SYS_SYNC_FILE_RANGE, uintptr(fd), 0, uintptr(off>>32), uintptr(off), uintptr(n>>32), uintptr(n), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length>>32), uintptr(length), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ustat(dev int, ubuf *Ustat_t) (err error) {
	_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
	r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(n int, list *_Gid_t) (nn int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	nn = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(n int, list *_Gid_t) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ioperm(from int, num int, on int) (err error) {
	_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Iopl(level int) (err error) {
	_, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimesat(dirfd int, path string, times *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Time(t *Time_t) (tt Time_t, err error) {
	r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0)
	tt = Time_t(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Utime(path string, buf *Utimbuf) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, times *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lstat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Stat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pause() (err error) {
	_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) {
	r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset))
	xaddr = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getrlimit(resource int, rlim *rlimit32) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Alarm(seconds uint) (remaining uint, err error) {
	r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)
	remaining = uint(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
07070100000E62000081A4000000000000000000000001645E367C0000412F000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go // go run mksyscall.go -tags linux,mips64 syscall_linux.go syscall_linux_mips64x.go syscall_linux_alarm.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build linux && mips64
// +build linux,mips64

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
	_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
	_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
	r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
	n = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(events) > 0 {
		_p0 = unsafe.Pointer(&events[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
	_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatfs(fd int, buf *Statfs_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (euid int) {
	r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)
	euid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(resource int, rlim *Rlimit) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, n int) (err error) {
	_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pause() (err error) {
	_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (off int64, err error) {
	r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
	off = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)
	written = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsgid(gid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsuid(uid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(fd int, how int) (err error) {
	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
	r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
	n = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statfs(path string, buf *Statfs_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func SyncFileRange(fd int, off int64, n int64, flags int) (err error) {
	_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ustat(dev int, ubuf *Ustat_t) (err error) {
	_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
	r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(n int, list *_Gid_t) (nn int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	nn = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(n int, list *_Gid_t) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
	r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))
	xaddr = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimesat(dirfd int, path string, times *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Utime(path string, buf *Utimbuf) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, times *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fstat(fd int, st *stat_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(st)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fstatat(dirfd int, path string, st *stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func lstat(path string, st *stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func stat(path string, st *stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Alarm(seconds uint) (remaining uint, err error) {
	r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)
	remaining = uint(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
 07070100000E63000081A4000000000000000000000001645E367C00004025000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go   // go run mksyscall.go -tags linux,mips64le syscall_linux.go syscall_linux_mips64x.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build linux && mips64le
// +build linux,mips64le

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
	_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
	_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
	r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
	n = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(events) > 0 {
		_p0 = unsafe.Pointer(&events[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
	_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatfs(fd int, buf *Statfs_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (euid int) {
	r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)
	euid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(resource int, rlim *Rlimit) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, n int) (err error) {
	_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pause() (err error) {
	_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (off int64, err error) {
	r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
	off = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)
	written = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsgid(gid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsuid(uid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(fd int, how int) (err error) {
	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
	r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
	n = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statfs(path string, buf *Statfs_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func SyncFileRange(fd int, off int64, n int64, flags int) (err error) {
	_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ustat(dev int, ubuf *Ustat_t) (err error) {
	_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
	r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(n int, list *_Gid_t) (nn int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	nn = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(n int, list *_Gid_t) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
	r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))
	xaddr = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimesat(dirfd int, path string, times *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Utime(path string, buf *Utimbuf) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, times *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fstat(fd int, st *stat_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(st)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fstatat(dirfd int, path string, st *stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func lstat(path string, st *stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func stat(path string, st *stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
   07070100000E64000081A4000000000000000000000001645E367C00004326000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go // go run mksyscall.go -l32 -arm -tags linux,mipsle syscall_linux.go syscall_linux_mipsx.go syscall_linux_alarm.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build linux && mipsle
// +build linux,mipsle

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
	_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(mask>>32), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
	_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
	r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
	n = int64(int64(r1)<<32 | int64(r0))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(events) > 0 {
		_p0 = unsafe.Pointer(&events[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
	_, _, e1 := Syscall9(SYS_FADVISE64, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (euid int) {
	r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)
	euid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, n int) (err error) {
	_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)
	written = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsgid(gid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsuid(uid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(fd int, how int) (err error) {
	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func SyncFileRange(fd int, off int64, n int64, flags int) (err error) {
	_, _, e1 := Syscall9(SYS_SYNC_FILE_RANGE, uintptr(fd), 0, uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ustat(dev int, ubuf *Ustat_t) (err error) {
	_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
	r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(n int, list *_Gid_t) (nn int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	nn = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(n int, list *_Gid_t) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ioperm(from int, num int, on int) (err error) {
	_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Iopl(level int) (err error) {
	_, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimesat(dirfd int, path string, times *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Time(t *Time_t) (tt Time_t, err error) {
	r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0)
	tt = Time_t(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Utime(path string, buf *Utimbuf) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, times *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lstat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Stat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pause() (err error) {
	_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) {
	r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset))
	xaddr = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getrlimit(resource int, rlim *rlimit32) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Alarm(seconds uint) (remaining uint, err error) {
	r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)
	remaining = uint(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
  07070100000E65000081A4000000000000000000000001645E367C0000436B000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go    // go run mksyscall.go -b32 -tags linux,ppc syscall_linux.go syscall_linux_ppc.go syscall_linux_alarm.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build linux && ppc
// +build linux,ppc

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
	_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask>>32), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
	_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off>>32), uintptr(off), uintptr(len>>32), uintptr(len))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
	r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
	n = int64(int64(r0)<<32 | int64(r1))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(events) > 0 {
		_p0 = unsafe.Pointer(&events[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := Syscall(SYS_FTRUNCATE64, uintptr(fd), uintptr(length>>32), uintptr(length))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (euid int) {
	r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)
	euid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ioperm(from int, num int, on int) (err error) {
	_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Iopl(level int) (err error) {
	_, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, n int) (err error) {
	_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lstat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pause() (err error) {
	_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset>>32), uintptr(offset), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset>>32), uintptr(offset), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)
	written = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsgid(gid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsuid(uid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(fd int, how int) (err error) {
	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Stat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), uintptr(length>>32), uintptr(length))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ustat(dev int, ubuf *Ustat_t) (err error) {
	_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
	r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(n int, list *_Gid_t) (nn int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	nn = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(n int, list *_Gid_t) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimesat(dirfd int, path string, times *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Time(t *Time_t) (tt Time_t, err error) {
	r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0)
	tt = Time_t(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Utime(path string, buf *Utimbuf) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, times *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) {
	r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset))
	xaddr = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getrlimit(resource int, rlim *rlimit32) (err error) {
	_, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func syncFileRange2(fd int, flags int, off int64, n int64) (err error) {
	_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off>>32), uintptr(off), uintptr(n>>32), uintptr(n))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(cmdline)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Alarm(seconds uint) (remaining uint, err error) {
	r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)
	remaining = uint(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
 07070100000E66000081A4000000000000000000000001645E367C00004740000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go  // go run mksyscall.go -tags linux,ppc64 syscall_linux.go syscall_linux_ppc64x.go syscall_linux_alarm.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build linux && ppc64
// +build linux,ppc64

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
	_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
	_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
	r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
	n = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(events) > 0 {
		_p0 = unsafe.Pointer(&events[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
	_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatfs(fd int, buf *Statfs_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (euid int) {
	r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)
	euid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(resource int, rlim *Rlimit) (err error) {
	_, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ioperm(from int, num int, on int) (err error) {
	_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Iopl(level int) (err error) {
	_, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, n int) (err error) {
	_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lstat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pause() (err error) {
	_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (off int64, err error) {
	r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
	off = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)
	written = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsgid(gid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsuid(uid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(fd int, how int) (err error) {
	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
	r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
	n = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Stat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statfs(path string, buf *Statfs_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ustat(dev int, ubuf *Ustat_t) (err error) {
	_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
	r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(n int, list *_Gid_t) (nn int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	nn = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(n int, list *_Gid_t) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
	r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))
	xaddr = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimesat(dirfd int, path string, times *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Time(t *Time_t) (tt Time_t, err error) {
	r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0)
	tt = Time_t(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Utime(path string, buf *Utimbuf) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, times *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func syncFileRange2(fd int, flags int, off int64, n int64) (err error) {
	_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off), uintptr(n), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(cmdline)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Alarm(seconds uint) (remaining uint, err error) {
	r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)
	remaining = uint(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
07070100000E67000081A4000000000000000000000001645E367C00004746000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go    // go run mksyscall.go -tags linux,ppc64le syscall_linux.go syscall_linux_ppc64x.go syscall_linux_alarm.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build linux && ppc64le
// +build linux,ppc64le

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
	_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
	_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
	r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
	n = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(events) > 0 {
		_p0 = unsafe.Pointer(&events[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
	_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatfs(fd int, buf *Statfs_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (euid int) {
	r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)
	euid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(resource int, rlim *Rlimit) (err error) {
	_, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ioperm(from int, num int, on int) (err error) {
	_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Iopl(level int) (err error) {
	_, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, n int) (err error) {
	_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lstat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pause() (err error) {
	_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (off int64, err error) {
	r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
	off = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)
	written = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsgid(gid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsuid(uid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(fd int, how int) (err error) {
	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
	r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
	n = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Stat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statfs(path string, buf *Statfs_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ustat(dev int, ubuf *Ustat_t) (err error) {
	_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
	r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(n int, list *_Gid_t) (nn int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	nn = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(n int, list *_Gid_t) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
	r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))
	xaddr = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimesat(dirfd int, path string, times *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Time(t *Time_t) (tt Time_t, err error) {
	r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0)
	tt = Time_t(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Utime(path string, buf *Utimbuf) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, times *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func syncFileRange2(fd int, flags int, off int64, n int64) (err error) {
	_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off), uintptr(n), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(cmdline)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Alarm(seconds uint) (remaining uint, err error) {
	r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)
	remaining = uint(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
  07070100000E68000081A4000000000000000000000001645E367C00003703000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go    // go run mksyscall.go -tags linux,riscv64 syscall_linux.go syscall_linux_riscv64.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build linux && riscv64
// +build linux,riscv64

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
	_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
	_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
	r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
	n = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(events) > 0 {
		_p0 = unsafe.Pointer(&events[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
	_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatfs(fd int, buf *Statfs_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (euid int) {
	r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)
	euid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(resource int, rlim *Rlimit) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, n int) (err error) {
	_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func MemfdSecret(flags int) (fd int, err error) {
	r0, _, e1 := Syscall(SYS_MEMFD_SECRET, uintptr(flags), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (off int64, err error) {
	r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
	off = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)
	written = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsgid(gid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsuid(uid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(fd int, how int) (err error) {
	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
	r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
	n = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statfs(path string, buf *Statfs_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func SyncFileRange(fd int, off int64, n int64, flags int) (err error) {
	_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
	r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(n int, list *_Gid_t) (nn int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	nn = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(n int, list *_Gid_t) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
	r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))
	xaddr = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(cmdline)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
 07070100000E69000081A4000000000000000000000001645E367C00003087000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go  // go run mksyscall.go -tags linux,s390x syscall_linux.go syscall_linux_s390x.go syscall_linux_alarm.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build linux && s390x
// +build linux,s390x

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
	_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
	_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
	r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
	n = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(events) > 0 {
		_p0 = unsafe.Pointer(&events[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
	_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatfs(fd int, buf *Statfs_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (euid int) {
	r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)
	euid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(resource int, rlim *Rlimit) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lstat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pause() (err error) {
	_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (off int64, err error) {
	r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
	off = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)
	written = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsgid(gid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsuid(uid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
	r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
	n = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Stat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statfs(path string, buf *Statfs_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func SyncFileRange(fd int, off int64, n int64, flags int) (err error) {
	_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ustat(dev int, ubuf *Ustat_t) (err error) {
	_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(n int, list *_Gid_t) (nn int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	nn = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(n int, list *_Gid_t) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimesat(dirfd int, path string, times *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Utime(path string, buf *Utimbuf) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, times *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(cmdline)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Alarm(seconds uint) (remaining uint, err error) {
	r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)
	remaining = uint(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
 07070100000E6A000081A4000000000000000000000001645E367C000041D1000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go    // go run mksyscall.go -tags linux,sparc64 syscall_linux.go syscall_linux_sparc64.go syscall_linux_alarm.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build linux && sparc64
// +build linux,sparc64

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
	_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
	_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
	r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
	n = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(events) > 0 {
		_p0 = unsafe.Pointer(&events[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
	_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatfs(fd int, buf *Statfs_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (euid int) {
	r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)
	euid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(resource int, rlim *Rlimit) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, n int) (err error) {
	_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lstat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pause() (err error) {
	_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (off int64, err error) {
	r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
	off = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)
	written = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsgid(gid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setfsuid(uid int) (prev int, err error) {
	r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
	prev = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(fd int, how int) (err error) {
	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
	r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
	n = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Stat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statfs(path string, buf *Statfs_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func SyncFileRange(fd int, off int64, n int64, flags int) (err error) {
	_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
	r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(n int, list *_Gid_t) (nn int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	nn = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(n int, list *_Gid_t) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
	r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))
	xaddr = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimesat(dirfd int, path string, times *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Utime(path string, buf *Utimbuf) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, times *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Alarm(seconds uint) (remaining uint, err error) {
	r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)
	remaining = uint(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
   07070100000E6B000081A4000000000000000000000001645E367C0000B152000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go   // go run mksyscall.go -l32 -netbsd -tags netbsd,386 syscall_bsd.go syscall_netbsd.go syscall_netbsd_386.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build netbsd && 386
// +build netbsd,386

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(ngid int, gid *_Gid_t) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
	r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
	wpid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
	r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(s int, how int) (err error) {
	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, timeval *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimes(fd int, timeval *[2]Timeval) (err error) {
	_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Madvise(b []byte, behav int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlockall(flags int) (err error) {
	_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mprotect(b []byte, prot int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Msync(b []byte, flags int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlockall() (err error) {
	_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pipe2(p *[2]_C_int, flags int) (err error) {
	_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getdents(fd int, buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getcwd(buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctl(fd int, req uint, arg uintptr) (err error) {
	_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {
	_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
	var _p0 unsafe.Pointer
	if len(mib) > 0 {
		_p0 = unsafe.Pointer(&mib[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Access(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
	_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chflags(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chmod(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chroot(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ClockGettime(clockid int32, time *Timespec) (err error) {
	_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Close(fd int) (err error) {
	_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup(fd int) (nfd int, err error) {
	r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)
	nfd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup2(from int, to int) (err error) {
	_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup3(from int, to int, flags int) (err error) {
	_, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Exit(code int) {
	Syscall(SYS_EXIT, uintptr(code), 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
	r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
	_, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), 0, uintptr(length), uintptr(length>>32), uintptr(advice), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchdir(fd int) (err error) {
	_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchflags(fd int, flags int) (err error) {
	_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmod(fd int, mode uint32) (err error) {
	_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Flock(fd int, how int) (err error) {
	_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fpathconf(fd int, name int) (val int, err error) {
	r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) {
	_, _, e1 := Syscall(SYS_FSTATVFS1, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fsync(fd int) (err error) {
	_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (uid int) {
	r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgid(pid int) (pgid int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
	pgid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgrp() (pgrp int) {
	r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)
	pgrp = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpid() (pid int) {
	r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
	pid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getppid() (ppid int) {
	r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
	ppid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpriority(which int, who int) (prio int, err error) {
	r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
	prio = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(which int, lim *Rlimit) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrusage(who int, rusage *Rusage) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getsid(pid int) (sid int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
	sid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Issetugid() (tainted bool) {
	r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)
	tainted = bool(r0 != 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kill(pid int, signum syscall.Signal) (err error) {
	_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kqueue() (fd int, err error) {
	r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Link(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, backlog int) (err error) {
	_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lstat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdir(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdirat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifo(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknod(path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
	_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Open(path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pathconf(path string, name int) (val int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func read(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlink(path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rename(from string, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(fromfd int, from string, tofd int, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Revoke(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rmdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
	r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0)
	newoffset = int64(int64(r1)<<32 | int64(r0))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setegid(egid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seteuid(euid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setgid(gid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpgid(pid int, pgid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpriority(which int, who int, prio int) (err error) {
	_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setregid(rgid int, egid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setreuid(ruid int, euid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setsid() (pid int, err error) {
	r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
	pid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Settimeofday(tp *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setuid(uid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Stat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statvfs1(path string, buf *Statvfs_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STATVFS1, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlink(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sync() (err error) {
	_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Umask(newmask int) (oldmask int) {
	r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)
	oldmask = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlink(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlinkat(dirfd int, path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unmount(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func write(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
	r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0)
	ret = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func munmap(addr uintptr, length uintptr) (err error) {
	_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
  07070100000E6C000081A4000000000000000000000001645E367C0000B093000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go // go run mksyscall.go -netbsd -tags netbsd,amd64 syscall_bsd.go syscall_netbsd.go syscall_netbsd_amd64.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build netbsd && amd64
// +build netbsd,amd64

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(ngid int, gid *_Gid_t) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
	r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
	wpid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
	r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(s int, how int) (err error) {
	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, timeval *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimes(fd int, timeval *[2]Timeval) (err error) {
	_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Madvise(b []byte, behav int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlockall(flags int) (err error) {
	_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mprotect(b []byte, prot int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Msync(b []byte, flags int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlockall() (err error) {
	_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pipe2(p *[2]_C_int, flags int) (err error) {
	_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getdents(fd int, buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getcwd(buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctl(fd int, req uint, arg uintptr) (err error) {
	_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {
	_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
	var _p0 unsafe.Pointer
	if len(mib) > 0 {
		_p0 = unsafe.Pointer(&mib[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Access(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
	_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chflags(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chmod(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chroot(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ClockGettime(clockid int32, time *Timespec) (err error) {
	_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Close(fd int) (err error) {
	_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup(fd int) (nfd int, err error) {
	r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)
	nfd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup2(from int, to int) (err error) {
	_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup3(from int, to int, flags int) (err error) {
	_, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Exit(code int) {
	Syscall(SYS_EXIT, uintptr(code), 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
	r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
	_, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), 0, uintptr(length), uintptr(advice))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchdir(fd int) (err error) {
	_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchflags(fd int, flags int) (err error) {
	_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmod(fd int, mode uint32) (err error) {
	_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Flock(fd int, how int) (err error) {
	_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fpathconf(fd int, name int) (val int, err error) {
	r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) {
	_, _, e1 := Syscall(SYS_FSTATVFS1, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fsync(fd int) (err error) {
	_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (uid int) {
	r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgid(pid int) (pgid int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
	pgid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgrp() (pgrp int) {
	r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)
	pgrp = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpid() (pid int) {
	r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
	pid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getppid() (ppid int) {
	r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
	ppid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpriority(which int, who int) (prio int, err error) {
	r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
	prio = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(which int, lim *Rlimit) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrusage(who int, rusage *Rusage) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getsid(pid int) (sid int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
	sid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Issetugid() (tainted bool) {
	r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)
	tainted = bool(r0 != 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kill(pid int, signum syscall.Signal) (err error) {
	_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kqueue() (fd int, err error) {
	r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Link(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, backlog int) (err error) {
	_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lstat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdir(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdirat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifo(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknod(path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
	_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Open(path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pathconf(path string, name int) (val int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func read(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlink(path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rename(from string, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(fromfd int, from string, tofd int, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Revoke(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rmdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
	r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0)
	newoffset = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setegid(egid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seteuid(euid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setgid(gid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpgid(pid int, pgid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpriority(which int, who int, prio int) (err error) {
	_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setregid(rgid int, egid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setreuid(ruid int, euid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setsid() (pid int, err error) {
	r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
	pid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Settimeofday(tp *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setuid(uid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Stat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statvfs1(path string, buf *Statvfs_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STATVFS1, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlink(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sync() (err error) {
	_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Umask(newmask int) (oldmask int) {
	r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)
	oldmask = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlink(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlinkat(dirfd int, path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unmount(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func write(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
	r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0)
	ret = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func munmap(addr uintptr, length uintptr) (err error) {
	_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
 07070100000E6D000081A4000000000000000000000001645E367C0000B157000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go   // go run mksyscall.go -l32 -netbsd -arm -tags netbsd,arm syscall_bsd.go syscall_netbsd.go syscall_netbsd_arm.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build netbsd && arm
// +build netbsd,arm

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(ngid int, gid *_Gid_t) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
	r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
	wpid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
	r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(s int, how int) (err error) {
	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, timeval *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimes(fd int, timeval *[2]Timeval) (err error) {
	_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Madvise(b []byte, behav int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlockall(flags int) (err error) {
	_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mprotect(b []byte, prot int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Msync(b []byte, flags int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlockall() (err error) {
	_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pipe2(p *[2]_C_int, flags int) (err error) {
	_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getdents(fd int, buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getcwd(buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctl(fd int, req uint, arg uintptr) (err error) {
	_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {
	_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
	var _p0 unsafe.Pointer
	if len(mib) > 0 {
		_p0 = unsafe.Pointer(&mib[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Access(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
	_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chflags(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chmod(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chroot(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ClockGettime(clockid int32, time *Timespec) (err error) {
	_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Close(fd int) (err error) {
	_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup(fd int) (nfd int, err error) {
	r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)
	nfd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup2(from int, to int) (err error) {
	_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup3(from int, to int, flags int) (err error) {
	_, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Exit(code int) {
	Syscall(SYS_EXIT, uintptr(code), 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
	r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
	_, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), 0, uintptr(length), uintptr(length>>32), uintptr(advice), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchdir(fd int) (err error) {
	_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchflags(fd int, flags int) (err error) {
	_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmod(fd int, mode uint32) (err error) {
	_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Flock(fd int, how int) (err error) {
	_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fpathconf(fd int, name int) (val int, err error) {
	r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) {
	_, _, e1 := Syscall(SYS_FSTATVFS1, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fsync(fd int) (err error) {
	_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (uid int) {
	r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgid(pid int) (pgid int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
	pgid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgrp() (pgrp int) {
	r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)
	pgrp = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpid() (pid int) {
	r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
	pid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getppid() (ppid int) {
	r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
	ppid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpriority(which int, who int) (prio int, err error) {
	r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
	prio = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(which int, lim *Rlimit) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrusage(who int, rusage *Rusage) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getsid(pid int) (sid int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
	sid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Issetugid() (tainted bool) {
	r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)
	tainted = bool(r0 != 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kill(pid int, signum syscall.Signal) (err error) {
	_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kqueue() (fd int, err error) {
	r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Link(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, backlog int) (err error) {
	_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lstat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdir(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdirat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifo(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknod(path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
	_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Open(path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pathconf(path string, name int) (val int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func read(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlink(path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rename(from string, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(fromfd int, from string, tofd int, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Revoke(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rmdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
	r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0)
	newoffset = int64(int64(r1)<<32 | int64(r0))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setegid(egid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seteuid(euid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setgid(gid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpgid(pid int, pgid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpriority(which int, who int, prio int) (err error) {
	_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setregid(rgid int, egid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setreuid(ruid int, euid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setsid() (pid int, err error) {
	r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
	pid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Settimeofday(tp *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setuid(uid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Stat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statvfs1(path string, buf *Statvfs_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STATVFS1, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlink(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sync() (err error) {
	_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Umask(newmask int) (oldmask int) {
	r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)
	oldmask = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlink(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlinkat(dirfd int, path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unmount(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func write(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
	r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0)
	ret = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func munmap(addr uintptr, length uintptr) (err error) {
	_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
 07070100000E6E000081A4000000000000000000000001645E367C0000B093000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go // go run mksyscall.go -netbsd -tags netbsd,arm64 syscall_bsd.go syscall_netbsd.go syscall_netbsd_arm64.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build netbsd && arm64
// +build netbsd,arm64

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(ngid int, gid *_Gid_t) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
	r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
	wpid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
	r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(s int, how int) (err error) {
	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, timeval *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimes(fd int, timeval *[2]Timeval) (err error) {
	_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Madvise(b []byte, behav int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlockall(flags int) (err error) {
	_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mprotect(b []byte, prot int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Msync(b []byte, flags int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlockall() (err error) {
	_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pipe2(p *[2]_C_int, flags int) (err error) {
	_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getdents(fd int, buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getcwd(buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctl(fd int, req uint, arg uintptr) (err error) {
	_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {
	_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
	var _p0 unsafe.Pointer
	if len(mib) > 0 {
		_p0 = unsafe.Pointer(&mib[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Access(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
	_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chflags(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chmod(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chroot(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ClockGettime(clockid int32, time *Timespec) (err error) {
	_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Close(fd int) (err error) {
	_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup(fd int) (nfd int, err error) {
	r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)
	nfd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup2(from int, to int) (err error) {
	_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup3(from int, to int, flags int) (err error) {
	_, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Exit(code int) {
	Syscall(SYS_EXIT, uintptr(code), 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
	r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(file)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(attrname)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
	_, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), 0, uintptr(length), uintptr(advice))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchdir(fd int) (err error) {
	_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchflags(fd int, flags int) (err error) {
	_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmod(fd int, mode uint32) (err error) {
	_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Flock(fd int, how int) (err error) {
	_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fpathconf(fd int, name int) (val int, err error) {
	r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) {
	_, _, e1 := Syscall(SYS_FSTATVFS1, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fsync(fd int) (err error) {
	_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (uid int) {
	r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgid(pid int) (pgid int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
	pgid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgrp() (pgrp int) {
	r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)
	pgrp = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpid() (pid int) {
	r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
	pid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getppid() (ppid int) {
	r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
	ppid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpriority(which int, who int) (prio int, err error) {
	r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
	prio = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(which int, lim *Rlimit) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrusage(who int, rusage *Rusage) (err error) {
	_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getsid(pid int) (sid int, err error) {
	r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
	sid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Issetugid() (tainted bool) {
	r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)
	tainted = bool(r0 != 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kill(pid int, signum syscall.Signal) (err error) {
	_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kqueue() (fd int, err error) {
	r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Link(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, backlog int) (err error) {
	_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lstat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdir(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdirat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifo(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknod(path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
	_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Open(path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pathconf(path string, name int) (val int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func read(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlink(path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rename(from string, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(fromfd int, from string, tofd int, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Revoke(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rmdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
	r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0)
	newoffset = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setegid(egid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seteuid(euid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setgid(gid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpgid(pid int, pgid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpriority(which int, who int, prio int) (err error) {
	_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setregid(rgid int, egid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setreuid(ruid int, euid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setsid() (pid int, err error) {
	r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
	pid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Settimeofday(tp *Timeval) (err error) {
	_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setuid(uid int) (err error) {
	_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Stat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statvfs1(path string, buf *Statvfs_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_STATVFS1, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlink(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sync() (err error) {
	_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Umask(newmask int) (oldmask int) {
	r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)
	oldmask = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlink(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlinkat(dirfd int, path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unmount(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func write(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
	r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0)
	ret = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func munmap(addr uintptr, length uintptr) (err error) {
	_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
 07070100000E6F000081A4000000000000000000000001645E367C0000DE6C000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go  // go run mksyscall.go -l32 -openbsd -libc -tags openbsd,386 syscall_bsd.go syscall_openbsd.go syscall_openbsd_386.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build openbsd && 386
// +build openbsd,386

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getgroups_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getgroups getgroups "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(ngid int, gid *_Gid_t) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setgroups_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setgroups setgroups "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
	r0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
	wpid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_wait4_trampoline_addr uintptr

//go:cgo_import_dynamic libc_wait4 wait4 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
	r0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_accept_trampoline_addr uintptr

//go:cgo_import_dynamic libc_accept accept "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_bind_trampoline_addr uintptr

//go:cgo_import_dynamic libc_bind bind "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_connect_trampoline_addr uintptr

//go:cgo_import_dynamic libc_connect connect "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_socket_trampoline_addr uintptr

//go:cgo_import_dynamic libc_socket socket "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getsockopt_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getsockopt getsockopt "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setsockopt_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setsockopt setsockopt "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getpeername_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpeername getpeername "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getsockname_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getsockname getsockname "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(s int, how int) (err error) {
	_, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_shutdown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_shutdown shutdown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_socketpair_trampoline_addr uintptr

//go:cgo_import_dynamic libc_socketpair socketpair "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_recvfrom_trampoline_addr uintptr

//go:cgo_import_dynamic libc_recvfrom recvfrom "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sendto_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sendto sendto "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_recvmsg_trampoline_addr uintptr

//go:cgo_import_dynamic libc_recvmsg recvmsg "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sendmsg_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sendmsg sendmsg "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
	r0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_kevent_trampoline_addr uintptr

//go:cgo_import_dynamic libc_kevent kevent "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, timeval *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_utimes_trampoline_addr uintptr

//go:cgo_import_dynamic libc_utimes utimes "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimes(fd int, timeval *[2]Timeval) (err error) {
	_, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_futimes_trampoline_addr uintptr

//go:cgo_import_dynamic libc_futimes futimes "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_poll_trampoline_addr uintptr

//go:cgo_import_dynamic libc_poll poll "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Madvise(b []byte, behav int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_madvise_trampoline_addr uintptr

//go:cgo_import_dynamic libc_madvise madvise "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mlock_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mlock mlock "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlockall(flags int) (err error) {
	_, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mlockall_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mlockall mlockall "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mprotect(b []byte, prot int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mprotect_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mprotect mprotect "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Msync(b []byte, flags int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_msync_trampoline_addr uintptr

//go:cgo_import_dynamic libc_msync msync "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_munlock_trampoline_addr uintptr

//go:cgo_import_dynamic libc_munlock munlock "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlockall() (err error) {
	_, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_munlockall_trampoline_addr uintptr

//go:cgo_import_dynamic libc_munlockall munlockall "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pipe2(p *[2]_C_int, flags int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pipe2_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pipe2 pipe2 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getdents(fd int, buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getdents_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getdents getdents "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getcwd(buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getcwd_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getcwd getcwd "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctl(fd int, req uint, arg uintptr) (err error) {
	_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {
	_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_ioctl_trampoline_addr uintptr

//go:cgo_import_dynamic libc_ioctl ioctl "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
	var _p0 unsafe.Pointer
	if len(mib) > 0 {
		_p0 = unsafe.Pointer(&mib[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sysctl_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sysctl sysctl "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
	r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_ppoll_trampoline_addr uintptr

//go:cgo_import_dynamic libc_ppoll ppoll "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Access(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_access_trampoline_addr uintptr

//go:cgo_import_dynamic libc_access access "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
	_, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_adjtime_trampoline_addr uintptr

//go:cgo_import_dynamic libc_adjtime adjtime "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chdir chdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chflags(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chflags_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chflags chflags "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chmod(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chmod_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chmod chmod "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chown chown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chroot(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chroot_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chroot chroot "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ClockGettime(clockid int32, time *Timespec) (err error) {
	_, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_clock_gettime_trampoline_addr uintptr

//go:cgo_import_dynamic libc_clock_gettime clock_gettime "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Close(fd int) (err error) {
	_, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_close_trampoline_addr uintptr

//go:cgo_import_dynamic libc_close close "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup(fd int) (nfd int, err error) {
	r0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0)
	nfd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_dup_trampoline_addr uintptr

//go:cgo_import_dynamic libc_dup dup "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup2(from int, to int) (err error) {
	_, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_dup2_trampoline_addr uintptr

//go:cgo_import_dynamic libc_dup2 dup2 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup3(from int, to int, flags int) (err error) {
	_, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_dup3_trampoline_addr uintptr

//go:cgo_import_dynamic libc_dup3 dup3 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Exit(code int) {
	syscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0)
	return
}

var libc_exit_trampoline_addr uintptr

//go:cgo_import_dynamic libc_exit exit "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_faccessat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_faccessat faccessat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchdir(fd int) (err error) {
	_, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchdir fchdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchflags(fd int, flags int) (err error) {
	_, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchflags_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchflags fchflags "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmod(fd int, mode uint32) (err error) {
	_, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchmod_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchmod fchmod "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchmodat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchown fchown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchownat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchownat fchownat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Flock(fd int, how int) (err error) {
	_, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_flock_trampoline_addr uintptr

//go:cgo_import_dynamic libc_flock flock "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fpathconf(fd int, name int) (val int, err error) {
	r0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fpathconf_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fstat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fstat fstat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fstatat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fstatat fstatat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatfs(fd int, stat *Statfs_t) (err error) {
	_, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fstatfs_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fstatfs fstatfs "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fsync(fd int) (err error) {
	_, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fsync_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fsync fsync "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), uintptr(length>>32))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_ftruncate_trampoline_addr uintptr

//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0)
	egid = int(r0)
	return
}

var libc_getegid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getegid getegid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (uid int) {
	r0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0)
	uid = int(r0)
	return
}

var libc_geteuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_geteuid geteuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0)
	gid = int(r0)
	return
}

var libc_getgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getgid getgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgid(pid int) (pgid int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0)
	pgid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getpgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpgid getpgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgrp() (pgrp int) {
	r0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0)
	pgrp = int(r0)
	return
}

var libc_getpgrp_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpid() (pid int) {
	r0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0)
	pid = int(r0)
	return
}

var libc_getpid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpid getpid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getppid() (ppid int) {
	r0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0)
	ppid = int(r0)
	return
}

var libc_getppid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getppid getppid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpriority(which int, who int) (prio int, err error) {
	r0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0)
	prio = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getpriority_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpriority getpriority "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(which int, lim *Rlimit) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getrlimit_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrtable() (rtable int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0)
	rtable = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getrtable_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getrtable getrtable "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrusage(who int, rusage *Rusage) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getrusage_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getrusage getrusage "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getsid(pid int) (sid int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0)
	sid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getsid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getsid getsid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_gettimeofday_trampoline_addr uintptr

//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0)
	uid = int(r0)
	return
}

var libc_getuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getuid getuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Issetugid() (tainted bool) {
	r0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0)
	tainted = bool(r0 != 0)
	return
}

var libc_issetugid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_issetugid issetugid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kill(pid int, signum syscall.Signal) (err error) {
	_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_kill_trampoline_addr uintptr

//go:cgo_import_dynamic libc_kill kill "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kqueue() (fd int, err error) {
	r0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_kqueue_trampoline_addr uintptr

//go:cgo_import_dynamic libc_kqueue kqueue "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_lchown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_lchown lchown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Link(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_link_trampoline_addr uintptr

//go:cgo_import_dynamic libc_link link "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_linkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_linkat linkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, backlog int) (err error) {
	_, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_listen_trampoline_addr uintptr

//go:cgo_import_dynamic libc_listen listen "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lstat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_lstat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_lstat lstat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdir(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkdir mkdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdirat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkdirat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifo(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkfifo_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkfifoat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkfifoat mkfifoat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknod(path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mknod_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mknod mknod "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mknodat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mknodat mknodat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
	_, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_nanosleep_trampoline_addr uintptr

//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Open(path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_open_trampoline_addr uintptr

//go:cgo_import_dynamic libc_open open "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_openat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_openat openat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pathconf(path string, name int) (val int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pathconf_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pathconf pathconf "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pread_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pread pread "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pwrite_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pwrite pwrite "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func read(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_read_trampoline_addr uintptr

//go:cgo_import_dynamic libc_read read "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlink(path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_readlink_trampoline_addr uintptr

//go:cgo_import_dynamic libc_readlink readlink "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_readlinkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_readlinkat readlinkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rename(from string, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_rename_trampoline_addr uintptr

//go:cgo_import_dynamic libc_rename rename "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(fromfd int, from string, tofd int, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_renameat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_renameat renameat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Revoke(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_revoke_trampoline_addr uintptr

//go:cgo_import_dynamic libc_revoke revoke "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rmdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_rmdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_rmdir rmdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
	r0, r1, e1 := syscall_syscall6(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0)
	newoffset = int64(int64(r1)<<32 | int64(r0))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_lseek_trampoline_addr uintptr

//go:cgo_import_dynamic libc_lseek lseek "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_select_trampoline_addr uintptr

//go:cgo_import_dynamic libc_select select "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setegid(egid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setegid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setegid setegid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seteuid(euid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_seteuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_seteuid seteuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setgid(gid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setgid setgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setlogin(name string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(name)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setlogin_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setlogin setlogin "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpgid(pid int, pgid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setpgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setpgid setpgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpriority(which int, who int, prio int) (err error) {
	_, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setpriority_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setpriority setpriority "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setregid(rgid int, egid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setregid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setregid setregid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setreuid(ruid int, euid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setreuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setreuid setreuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setresgid(rgid int, egid int, sgid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setresgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setresgid setresgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setresuid(ruid int, euid int, suid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setresuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setresuid setresuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setrtable(rtable int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setrtable_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setrtable setrtable "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setsid() (pid int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0)
	pid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setsid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setsid setsid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Settimeofday(tp *Timeval) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_settimeofday_trampoline_addr uintptr

//go:cgo_import_dynamic libc_settimeofday settimeofday "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setuid(uid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setuid setuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Stat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_stat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_stat stat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statfs(path string, stat *Statfs_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_statfs_trampoline_addr uintptr

//go:cgo_import_dynamic libc_statfs statfs "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlink(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_symlink_trampoline_addr uintptr

//go:cgo_import_dynamic libc_symlink symlink "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_symlinkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_symlinkat symlinkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sync() (err error) {
	_, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sync_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sync sync "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_truncate_trampoline_addr uintptr

//go:cgo_import_dynamic libc_truncate truncate "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Umask(newmask int) (oldmask int) {
	r0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0)
	oldmask = int(r0)
	return
}

var libc_umask_trampoline_addr uintptr

//go:cgo_import_dynamic libc_umask umask "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlink(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_unlink_trampoline_addr uintptr

//go:cgo_import_dynamic libc_unlink unlink "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlinkat(dirfd int, path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_unlinkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unmount(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_unmount_trampoline_addr uintptr

//go:cgo_import_dynamic libc_unmount unmount "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func write(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_write_trampoline_addr uintptr

//go:cgo_import_dynamic libc_write write "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
	r0, _, e1 := syscall_syscall9(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0)
	ret = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mmap_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mmap mmap "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func munmap(addr uintptr, length uintptr) (err error) {
	_, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_munmap_trampoline_addr uintptr

//go:cgo_import_dynamic libc_munmap munmap "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_utimensat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_utimensat utimensat "libc.so"
07070100000E70000081A4000000000000000000000001645E367C0000661F000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s   // go run mkasm.go openbsd 386
// Code generated by the command above; DO NOT EDIT.

#include "textflag.h"

TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getgroups(SB)
GLOBL	·libc_getgroups_trampoline_addr(SB), RODATA, $4
DATA	·libc_getgroups_trampoline_addr(SB)/4, $libc_getgroups_trampoline<>(SB)

TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setgroups(SB)
GLOBL	·libc_setgroups_trampoline_addr(SB), RODATA, $4
DATA	·libc_setgroups_trampoline_addr(SB)/4, $libc_setgroups_trampoline<>(SB)

TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_wait4(SB)
GLOBL	·libc_wait4_trampoline_addr(SB), RODATA, $4
DATA	·libc_wait4_trampoline_addr(SB)/4, $libc_wait4_trampoline<>(SB)

TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_accept(SB)
GLOBL	·libc_accept_trampoline_addr(SB), RODATA, $4
DATA	·libc_accept_trampoline_addr(SB)/4, $libc_accept_trampoline<>(SB)

TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_bind(SB)
GLOBL	·libc_bind_trampoline_addr(SB), RODATA, $4
DATA	·libc_bind_trampoline_addr(SB)/4, $libc_bind_trampoline<>(SB)

TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_connect(SB)
GLOBL	·libc_connect_trampoline_addr(SB), RODATA, $4
DATA	·libc_connect_trampoline_addr(SB)/4, $libc_connect_trampoline<>(SB)

TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_socket(SB)
GLOBL	·libc_socket_trampoline_addr(SB), RODATA, $4
DATA	·libc_socket_trampoline_addr(SB)/4, $libc_socket_trampoline<>(SB)

TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getsockopt(SB)
GLOBL	·libc_getsockopt_trampoline_addr(SB), RODATA, $4
DATA	·libc_getsockopt_trampoline_addr(SB)/4, $libc_getsockopt_trampoline<>(SB)

TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setsockopt(SB)
GLOBL	·libc_setsockopt_trampoline_addr(SB), RODATA, $4
DATA	·libc_setsockopt_trampoline_addr(SB)/4, $libc_setsockopt_trampoline<>(SB)

TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpeername(SB)
GLOBL	·libc_getpeername_trampoline_addr(SB), RODATA, $4
DATA	·libc_getpeername_trampoline_addr(SB)/4, $libc_getpeername_trampoline<>(SB)

TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getsockname(SB)
GLOBL	·libc_getsockname_trampoline_addr(SB), RODATA, $4
DATA	·libc_getsockname_trampoline_addr(SB)/4, $libc_getsockname_trampoline<>(SB)

TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_shutdown(SB)
GLOBL	·libc_shutdown_trampoline_addr(SB), RODATA, $4
DATA	·libc_shutdown_trampoline_addr(SB)/4, $libc_shutdown_trampoline<>(SB)

TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_socketpair(SB)
GLOBL	·libc_socketpair_trampoline_addr(SB), RODATA, $4
DATA	·libc_socketpair_trampoline_addr(SB)/4, $libc_socketpair_trampoline<>(SB)

TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_recvfrom(SB)
GLOBL	·libc_recvfrom_trampoline_addr(SB), RODATA, $4
DATA	·libc_recvfrom_trampoline_addr(SB)/4, $libc_recvfrom_trampoline<>(SB)

TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sendto(SB)
GLOBL	·libc_sendto_trampoline_addr(SB), RODATA, $4
DATA	·libc_sendto_trampoline_addr(SB)/4, $libc_sendto_trampoline<>(SB)

TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_recvmsg(SB)
GLOBL	·libc_recvmsg_trampoline_addr(SB), RODATA, $4
DATA	·libc_recvmsg_trampoline_addr(SB)/4, $libc_recvmsg_trampoline<>(SB)

TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sendmsg(SB)
GLOBL	·libc_sendmsg_trampoline_addr(SB), RODATA, $4
DATA	·libc_sendmsg_trampoline_addr(SB)/4, $libc_sendmsg_trampoline<>(SB)

TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_kevent(SB)
GLOBL	·libc_kevent_trampoline_addr(SB), RODATA, $4
DATA	·libc_kevent_trampoline_addr(SB)/4, $libc_kevent_trampoline<>(SB)

TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_utimes(SB)
GLOBL	·libc_utimes_trampoline_addr(SB), RODATA, $4
DATA	·libc_utimes_trampoline_addr(SB)/4, $libc_utimes_trampoline<>(SB)

TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_futimes(SB)
GLOBL	·libc_futimes_trampoline_addr(SB), RODATA, $4
DATA	·libc_futimes_trampoline_addr(SB)/4, $libc_futimes_trampoline<>(SB)

TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_poll(SB)
GLOBL	·libc_poll_trampoline_addr(SB), RODATA, $4
DATA	·libc_poll_trampoline_addr(SB)/4, $libc_poll_trampoline<>(SB)

TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_madvise(SB)
GLOBL	·libc_madvise_trampoline_addr(SB), RODATA, $4
DATA	·libc_madvise_trampoline_addr(SB)/4, $libc_madvise_trampoline<>(SB)

TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mlock(SB)
GLOBL	·libc_mlock_trampoline_addr(SB), RODATA, $4
DATA	·libc_mlock_trampoline_addr(SB)/4, $libc_mlock_trampoline<>(SB)

TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mlockall(SB)
GLOBL	·libc_mlockall_trampoline_addr(SB), RODATA, $4
DATA	·libc_mlockall_trampoline_addr(SB)/4, $libc_mlockall_trampoline<>(SB)

TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mprotect(SB)
GLOBL	·libc_mprotect_trampoline_addr(SB), RODATA, $4
DATA	·libc_mprotect_trampoline_addr(SB)/4, $libc_mprotect_trampoline<>(SB)

TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_msync(SB)
GLOBL	·libc_msync_trampoline_addr(SB), RODATA, $4
DATA	·libc_msync_trampoline_addr(SB)/4, $libc_msync_trampoline<>(SB)

TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_munlock(SB)
GLOBL	·libc_munlock_trampoline_addr(SB), RODATA, $4
DATA	·libc_munlock_trampoline_addr(SB)/4, $libc_munlock_trampoline<>(SB)

TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_munlockall(SB)
GLOBL	·libc_munlockall_trampoline_addr(SB), RODATA, $4
DATA	·libc_munlockall_trampoline_addr(SB)/4, $libc_munlockall_trampoline<>(SB)

TEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pipe2(SB)
GLOBL	·libc_pipe2_trampoline_addr(SB), RODATA, $4
DATA	·libc_pipe2_trampoline_addr(SB)/4, $libc_pipe2_trampoline<>(SB)

TEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getdents(SB)
GLOBL	·libc_getdents_trampoline_addr(SB), RODATA, $4
DATA	·libc_getdents_trampoline_addr(SB)/4, $libc_getdents_trampoline<>(SB)

TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getcwd(SB)
GLOBL	·libc_getcwd_trampoline_addr(SB), RODATA, $4
DATA	·libc_getcwd_trampoline_addr(SB)/4, $libc_getcwd_trampoline<>(SB)

TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_ioctl(SB)
GLOBL	·libc_ioctl_trampoline_addr(SB), RODATA, $4
DATA	·libc_ioctl_trampoline_addr(SB)/4, $libc_ioctl_trampoline<>(SB)

TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sysctl(SB)
GLOBL	·libc_sysctl_trampoline_addr(SB), RODATA, $4
DATA	·libc_sysctl_trampoline_addr(SB)/4, $libc_sysctl_trampoline<>(SB)

TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_ppoll(SB)
GLOBL	·libc_ppoll_trampoline_addr(SB), RODATA, $4
DATA	·libc_ppoll_trampoline_addr(SB)/4, $libc_ppoll_trampoline<>(SB)

TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_access(SB)
GLOBL	·libc_access_trampoline_addr(SB), RODATA, $4
DATA	·libc_access_trampoline_addr(SB)/4, $libc_access_trampoline<>(SB)

TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_adjtime(SB)
GLOBL	·libc_adjtime_trampoline_addr(SB), RODATA, $4
DATA	·libc_adjtime_trampoline_addr(SB)/4, $libc_adjtime_trampoline<>(SB)

TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chdir(SB)
GLOBL	·libc_chdir_trampoline_addr(SB), RODATA, $4
DATA	·libc_chdir_trampoline_addr(SB)/4, $libc_chdir_trampoline<>(SB)

TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chflags(SB)
GLOBL	·libc_chflags_trampoline_addr(SB), RODATA, $4
DATA	·libc_chflags_trampoline_addr(SB)/4, $libc_chflags_trampoline<>(SB)

TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chmod(SB)
GLOBL	·libc_chmod_trampoline_addr(SB), RODATA, $4
DATA	·libc_chmod_trampoline_addr(SB)/4, $libc_chmod_trampoline<>(SB)

TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chown(SB)
GLOBL	·libc_chown_trampoline_addr(SB), RODATA, $4
DATA	·libc_chown_trampoline_addr(SB)/4, $libc_chown_trampoline<>(SB)

TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chroot(SB)
GLOBL	·libc_chroot_trampoline_addr(SB), RODATA, $4
DATA	·libc_chroot_trampoline_addr(SB)/4, $libc_chroot_trampoline<>(SB)

TEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_clock_gettime(SB)
GLOBL	·libc_clock_gettime_trampoline_addr(SB), RODATA, $4
DATA	·libc_clock_gettime_trampoline_addr(SB)/4, $libc_clock_gettime_trampoline<>(SB)

TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_close(SB)
GLOBL	·libc_close_trampoline_addr(SB), RODATA, $4
DATA	·libc_close_trampoline_addr(SB)/4, $libc_close_trampoline<>(SB)

TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_dup(SB)
GLOBL	·libc_dup_trampoline_addr(SB), RODATA, $4
DATA	·libc_dup_trampoline_addr(SB)/4, $libc_dup_trampoline<>(SB)

TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_dup2(SB)
GLOBL	·libc_dup2_trampoline_addr(SB), RODATA, $4
DATA	·libc_dup2_trampoline_addr(SB)/4, $libc_dup2_trampoline<>(SB)

TEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_dup3(SB)
GLOBL	·libc_dup3_trampoline_addr(SB), RODATA, $4
DATA	·libc_dup3_trampoline_addr(SB)/4, $libc_dup3_trampoline<>(SB)

TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_exit(SB)
GLOBL	·libc_exit_trampoline_addr(SB), RODATA, $4
DATA	·libc_exit_trampoline_addr(SB)/4, $libc_exit_trampoline<>(SB)

TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_faccessat(SB)
GLOBL	·libc_faccessat_trampoline_addr(SB), RODATA, $4
DATA	·libc_faccessat_trampoline_addr(SB)/4, $libc_faccessat_trampoline<>(SB)

TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchdir(SB)
GLOBL	·libc_fchdir_trampoline_addr(SB), RODATA, $4
DATA	·libc_fchdir_trampoline_addr(SB)/4, $libc_fchdir_trampoline<>(SB)

TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchflags(SB)
GLOBL	·libc_fchflags_trampoline_addr(SB), RODATA, $4
DATA	·libc_fchflags_trampoline_addr(SB)/4, $libc_fchflags_trampoline<>(SB)

TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchmod(SB)
GLOBL	·libc_fchmod_trampoline_addr(SB), RODATA, $4
DATA	·libc_fchmod_trampoline_addr(SB)/4, $libc_fchmod_trampoline<>(SB)

TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchmodat(SB)
GLOBL	·libc_fchmodat_trampoline_addr(SB), RODATA, $4
DATA	·libc_fchmodat_trampoline_addr(SB)/4, $libc_fchmodat_trampoline<>(SB)

TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchown(SB)
GLOBL	·libc_fchown_trampoline_addr(SB), RODATA, $4
DATA	·libc_fchown_trampoline_addr(SB)/4, $libc_fchown_trampoline<>(SB)

TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchownat(SB)
GLOBL	·libc_fchownat_trampoline_addr(SB), RODATA, $4
DATA	·libc_fchownat_trampoline_addr(SB)/4, $libc_fchownat_trampoline<>(SB)

TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_flock(SB)
GLOBL	·libc_flock_trampoline_addr(SB), RODATA, $4
DATA	·libc_flock_trampoline_addr(SB)/4, $libc_flock_trampoline<>(SB)

TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fpathconf(SB)
GLOBL	·libc_fpathconf_trampoline_addr(SB), RODATA, $4
DATA	·libc_fpathconf_trampoline_addr(SB)/4, $libc_fpathconf_trampoline<>(SB)

TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fstat(SB)
GLOBL	·libc_fstat_trampoline_addr(SB), RODATA, $4
DATA	·libc_fstat_trampoline_addr(SB)/4, $libc_fstat_trampoline<>(SB)

TEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fstatat(SB)
GLOBL	·libc_fstatat_trampoline_addr(SB), RODATA, $4
DATA	·libc_fstatat_trampoline_addr(SB)/4, $libc_fstatat_trampoline<>(SB)

TEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fstatfs(SB)
GLOBL	·libc_fstatfs_trampoline_addr(SB), RODATA, $4
DATA	·libc_fstatfs_trampoline_addr(SB)/4, $libc_fstatfs_trampoline<>(SB)

TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fsync(SB)
GLOBL	·libc_fsync_trampoline_addr(SB), RODATA, $4
DATA	·libc_fsync_trampoline_addr(SB)/4, $libc_fsync_trampoline<>(SB)

TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_ftruncate(SB)
GLOBL	·libc_ftruncate_trampoline_addr(SB), RODATA, $4
DATA	·libc_ftruncate_trampoline_addr(SB)/4, $libc_ftruncate_trampoline<>(SB)

TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getegid(SB)
GLOBL	·libc_getegid_trampoline_addr(SB), RODATA, $4
DATA	·libc_getegid_trampoline_addr(SB)/4, $libc_getegid_trampoline<>(SB)

TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_geteuid(SB)
GLOBL	·libc_geteuid_trampoline_addr(SB), RODATA, $4
DATA	·libc_geteuid_trampoline_addr(SB)/4, $libc_geteuid_trampoline<>(SB)

TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getgid(SB)
GLOBL	·libc_getgid_trampoline_addr(SB), RODATA, $4
DATA	·libc_getgid_trampoline_addr(SB)/4, $libc_getgid_trampoline<>(SB)

TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpgid(SB)
GLOBL	·libc_getpgid_trampoline_addr(SB), RODATA, $4
DATA	·libc_getpgid_trampoline_addr(SB)/4, $libc_getpgid_trampoline<>(SB)

TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpgrp(SB)
GLOBL	·libc_getpgrp_trampoline_addr(SB), RODATA, $4
DATA	·libc_getpgrp_trampoline_addr(SB)/4, $libc_getpgrp_trampoline<>(SB)

TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpid(SB)
GLOBL	·libc_getpid_trampoline_addr(SB), RODATA, $4
DATA	·libc_getpid_trampoline_addr(SB)/4, $libc_getpid_trampoline<>(SB)

TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getppid(SB)
GLOBL	·libc_getppid_trampoline_addr(SB), RODATA, $4
DATA	·libc_getppid_trampoline_addr(SB)/4, $libc_getppid_trampoline<>(SB)

TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpriority(SB)
GLOBL	·libc_getpriority_trampoline_addr(SB), RODATA, $4
DATA	·libc_getpriority_trampoline_addr(SB)/4, $libc_getpriority_trampoline<>(SB)

TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getrlimit(SB)
GLOBL	·libc_getrlimit_trampoline_addr(SB), RODATA, $4
DATA	·libc_getrlimit_trampoline_addr(SB)/4, $libc_getrlimit_trampoline<>(SB)

TEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getrtable(SB)
GLOBL	·libc_getrtable_trampoline_addr(SB), RODATA, $4
DATA	·libc_getrtable_trampoline_addr(SB)/4, $libc_getrtable_trampoline<>(SB)

TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getrusage(SB)
GLOBL	·libc_getrusage_trampoline_addr(SB), RODATA, $4
DATA	·libc_getrusage_trampoline_addr(SB)/4, $libc_getrusage_trampoline<>(SB)

TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getsid(SB)
GLOBL	·libc_getsid_trampoline_addr(SB), RODATA, $4
DATA	·libc_getsid_trampoline_addr(SB)/4, $libc_getsid_trampoline<>(SB)

TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_gettimeofday(SB)
GLOBL	·libc_gettimeofday_trampoline_addr(SB), RODATA, $4
DATA	·libc_gettimeofday_trampoline_addr(SB)/4, $libc_gettimeofday_trampoline<>(SB)

TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getuid(SB)
GLOBL	·libc_getuid_trampoline_addr(SB), RODATA, $4
DATA	·libc_getuid_trampoline_addr(SB)/4, $libc_getuid_trampoline<>(SB)

TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_issetugid(SB)
GLOBL	·libc_issetugid_trampoline_addr(SB), RODATA, $4
DATA	·libc_issetugid_trampoline_addr(SB)/4, $libc_issetugid_trampoline<>(SB)

TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_kill(SB)
GLOBL	·libc_kill_trampoline_addr(SB), RODATA, $4
DATA	·libc_kill_trampoline_addr(SB)/4, $libc_kill_trampoline<>(SB)

TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_kqueue(SB)
GLOBL	·libc_kqueue_trampoline_addr(SB), RODATA, $4
DATA	·libc_kqueue_trampoline_addr(SB)/4, $libc_kqueue_trampoline<>(SB)

TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_lchown(SB)
GLOBL	·libc_lchown_trampoline_addr(SB), RODATA, $4
DATA	·libc_lchown_trampoline_addr(SB)/4, $libc_lchown_trampoline<>(SB)

TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_link(SB)
GLOBL	·libc_link_trampoline_addr(SB), RODATA, $4
DATA	·libc_link_trampoline_addr(SB)/4, $libc_link_trampoline<>(SB)

TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_linkat(SB)
GLOBL	·libc_linkat_trampoline_addr(SB), RODATA, $4
DATA	·libc_linkat_trampoline_addr(SB)/4, $libc_linkat_trampoline<>(SB)

TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_listen(SB)
GLOBL	·libc_listen_trampoline_addr(SB), RODATA, $4
DATA	·libc_listen_trampoline_addr(SB)/4, $libc_listen_trampoline<>(SB)

TEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_lstat(SB)
GLOBL	·libc_lstat_trampoline_addr(SB), RODATA, $4
DATA	·libc_lstat_trampoline_addr(SB)/4, $libc_lstat_trampoline<>(SB)

TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkdir(SB)
GLOBL	·libc_mkdir_trampoline_addr(SB), RODATA, $4
DATA	·libc_mkdir_trampoline_addr(SB)/4, $libc_mkdir_trampoline<>(SB)

TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkdirat(SB)
GLOBL	·libc_mkdirat_trampoline_addr(SB), RODATA, $4
DATA	·libc_mkdirat_trampoline_addr(SB)/4, $libc_mkdirat_trampoline<>(SB)

TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkfifo(SB)
GLOBL	·libc_mkfifo_trampoline_addr(SB), RODATA, $4
DATA	·libc_mkfifo_trampoline_addr(SB)/4, $libc_mkfifo_trampoline<>(SB)

TEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkfifoat(SB)
GLOBL	·libc_mkfifoat_trampoline_addr(SB), RODATA, $4
DATA	·libc_mkfifoat_trampoline_addr(SB)/4, $libc_mkfifoat_trampoline<>(SB)

TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mknod(SB)
GLOBL	·libc_mknod_trampoline_addr(SB), RODATA, $4
DATA	·libc_mknod_trampoline_addr(SB)/4, $libc_mknod_trampoline<>(SB)

TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mknodat(SB)
GLOBL	·libc_mknodat_trampoline_addr(SB), RODATA, $4
DATA	·libc_mknodat_trampoline_addr(SB)/4, $libc_mknodat_trampoline<>(SB)

TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_nanosleep(SB)
GLOBL	·libc_nanosleep_trampoline_addr(SB), RODATA, $4
DATA	·libc_nanosleep_trampoline_addr(SB)/4, $libc_nanosleep_trampoline<>(SB)

TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_open(SB)
GLOBL	·libc_open_trampoline_addr(SB), RODATA, $4
DATA	·libc_open_trampoline_addr(SB)/4, $libc_open_trampoline<>(SB)

TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_openat(SB)
GLOBL	·libc_openat_trampoline_addr(SB), RODATA, $4
DATA	·libc_openat_trampoline_addr(SB)/4, $libc_openat_trampoline<>(SB)

TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pathconf(SB)
GLOBL	·libc_pathconf_trampoline_addr(SB), RODATA, $4
DATA	·libc_pathconf_trampoline_addr(SB)/4, $libc_pathconf_trampoline<>(SB)

TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pread(SB)
GLOBL	·libc_pread_trampoline_addr(SB), RODATA, $4
DATA	·libc_pread_trampoline_addr(SB)/4, $libc_pread_trampoline<>(SB)

TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pwrite(SB)
GLOBL	·libc_pwrite_trampoline_addr(SB), RODATA, $4
DATA	·libc_pwrite_trampoline_addr(SB)/4, $libc_pwrite_trampoline<>(SB)

TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_read(SB)
GLOBL	·libc_read_trampoline_addr(SB), RODATA, $4
DATA	·libc_read_trampoline_addr(SB)/4, $libc_read_trampoline<>(SB)

TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_readlink(SB)
GLOBL	·libc_readlink_trampoline_addr(SB), RODATA, $4
DATA	·libc_readlink_trampoline_addr(SB)/4, $libc_readlink_trampoline<>(SB)

TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_readlinkat(SB)
GLOBL	·libc_readlinkat_trampoline_addr(SB), RODATA, $4
DATA	·libc_readlinkat_trampoline_addr(SB)/4, $libc_readlinkat_trampoline<>(SB)

TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_rename(SB)
GLOBL	·libc_rename_trampoline_addr(SB), RODATA, $4
DATA	·libc_rename_trampoline_addr(SB)/4, $libc_rename_trampoline<>(SB)

TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_renameat(SB)
GLOBL	·libc_renameat_trampoline_addr(SB), RODATA, $4
DATA	·libc_renameat_trampoline_addr(SB)/4, $libc_renameat_trampoline<>(SB)

TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_revoke(SB)
GLOBL	·libc_revoke_trampoline_addr(SB), RODATA, $4
DATA	·libc_revoke_trampoline_addr(SB)/4, $libc_revoke_trampoline<>(SB)

TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_rmdir(SB)
GLOBL	·libc_rmdir_trampoline_addr(SB), RODATA, $4
DATA	·libc_rmdir_trampoline_addr(SB)/4, $libc_rmdir_trampoline<>(SB)

TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_lseek(SB)
GLOBL	·libc_lseek_trampoline_addr(SB), RODATA, $4
DATA	·libc_lseek_trampoline_addr(SB)/4, $libc_lseek_trampoline<>(SB)

TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_select(SB)
GLOBL	·libc_select_trampoline_addr(SB), RODATA, $4
DATA	·libc_select_trampoline_addr(SB)/4, $libc_select_trampoline<>(SB)

TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setegid(SB)
GLOBL	·libc_setegid_trampoline_addr(SB), RODATA, $4
DATA	·libc_setegid_trampoline_addr(SB)/4, $libc_setegid_trampoline<>(SB)

TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_seteuid(SB)
GLOBL	·libc_seteuid_trampoline_addr(SB), RODATA, $4
DATA	·libc_seteuid_trampoline_addr(SB)/4, $libc_seteuid_trampoline<>(SB)

TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setgid(SB)
GLOBL	·libc_setgid_trampoline_addr(SB), RODATA, $4
DATA	·libc_setgid_trampoline_addr(SB)/4, $libc_setgid_trampoline<>(SB)

TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setlogin(SB)
GLOBL	·libc_setlogin_trampoline_addr(SB), RODATA, $4
DATA	·libc_setlogin_trampoline_addr(SB)/4, $libc_setlogin_trampoline<>(SB)

TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setpgid(SB)
GLOBL	·libc_setpgid_trampoline_addr(SB), RODATA, $4
DATA	·libc_setpgid_trampoline_addr(SB)/4, $libc_setpgid_trampoline<>(SB)

TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setpriority(SB)
GLOBL	·libc_setpriority_trampoline_addr(SB), RODATA, $4
DATA	·libc_setpriority_trampoline_addr(SB)/4, $libc_setpriority_trampoline<>(SB)

TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setregid(SB)
GLOBL	·libc_setregid_trampoline_addr(SB), RODATA, $4
DATA	·libc_setregid_trampoline_addr(SB)/4, $libc_setregid_trampoline<>(SB)

TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setreuid(SB)
GLOBL	·libc_setreuid_trampoline_addr(SB), RODATA, $4
DATA	·libc_setreuid_trampoline_addr(SB)/4, $libc_setreuid_trampoline<>(SB)

TEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setresgid(SB)
GLOBL	·libc_setresgid_trampoline_addr(SB), RODATA, $4
DATA	·libc_setresgid_trampoline_addr(SB)/4, $libc_setresgid_trampoline<>(SB)

TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setresuid(SB)
GLOBL	·libc_setresuid_trampoline_addr(SB), RODATA, $4
DATA	·libc_setresuid_trampoline_addr(SB)/4, $libc_setresuid_trampoline<>(SB)

TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setrtable(SB)
GLOBL	·libc_setrtable_trampoline_addr(SB), RODATA, $4
DATA	·libc_setrtable_trampoline_addr(SB)/4, $libc_setrtable_trampoline<>(SB)

TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setsid(SB)
GLOBL	·libc_setsid_trampoline_addr(SB), RODATA, $4
DATA	·libc_setsid_trampoline_addr(SB)/4, $libc_setsid_trampoline<>(SB)

TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_settimeofday(SB)
GLOBL	·libc_settimeofday_trampoline_addr(SB), RODATA, $4
DATA	·libc_settimeofday_trampoline_addr(SB)/4, $libc_settimeofday_trampoline<>(SB)

TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setuid(SB)
GLOBL	·libc_setuid_trampoline_addr(SB), RODATA, $4
DATA	·libc_setuid_trampoline_addr(SB)/4, $libc_setuid_trampoline<>(SB)

TEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_stat(SB)
GLOBL	·libc_stat_trampoline_addr(SB), RODATA, $4
DATA	·libc_stat_trampoline_addr(SB)/4, $libc_stat_trampoline<>(SB)

TEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_statfs(SB)
GLOBL	·libc_statfs_trampoline_addr(SB), RODATA, $4
DATA	·libc_statfs_trampoline_addr(SB)/4, $libc_statfs_trampoline<>(SB)

TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_symlink(SB)
GLOBL	·libc_symlink_trampoline_addr(SB), RODATA, $4
DATA	·libc_symlink_trampoline_addr(SB)/4, $libc_symlink_trampoline<>(SB)

TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_symlinkat(SB)
GLOBL	·libc_symlinkat_trampoline_addr(SB), RODATA, $4
DATA	·libc_symlinkat_trampoline_addr(SB)/4, $libc_symlinkat_trampoline<>(SB)

TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sync(SB)
GLOBL	·libc_sync_trampoline_addr(SB), RODATA, $4
DATA	·libc_sync_trampoline_addr(SB)/4, $libc_sync_trampoline<>(SB)

TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_truncate(SB)
GLOBL	·libc_truncate_trampoline_addr(SB), RODATA, $4
DATA	·libc_truncate_trampoline_addr(SB)/4, $libc_truncate_trampoline<>(SB)

TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_umask(SB)
GLOBL	·libc_umask_trampoline_addr(SB), RODATA, $4
DATA	·libc_umask_trampoline_addr(SB)/4, $libc_umask_trampoline<>(SB)

TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_unlink(SB)
GLOBL	·libc_unlink_trampoline_addr(SB), RODATA, $4
DATA	·libc_unlink_trampoline_addr(SB)/4, $libc_unlink_trampoline<>(SB)

TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_unlinkat(SB)
GLOBL	·libc_unlinkat_trampoline_addr(SB), RODATA, $4
DATA	·libc_unlinkat_trampoline_addr(SB)/4, $libc_unlinkat_trampoline<>(SB)

TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_unmount(SB)
GLOBL	·libc_unmount_trampoline_addr(SB), RODATA, $4
DATA	·libc_unmount_trampoline_addr(SB)/4, $libc_unmount_trampoline<>(SB)

TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_write(SB)
GLOBL	·libc_write_trampoline_addr(SB), RODATA, $4
DATA	·libc_write_trampoline_addr(SB)/4, $libc_write_trampoline<>(SB)

TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mmap(SB)
GLOBL	·libc_mmap_trampoline_addr(SB), RODATA, $4
DATA	·libc_mmap_trampoline_addr(SB)/4, $libc_mmap_trampoline<>(SB)

TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_munmap(SB)
GLOBL	·libc_munmap_trampoline_addr(SB), RODATA, $4
DATA	·libc_munmap_trampoline_addr(SB)/4, $libc_munmap_trampoline<>(SB)

TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_utimensat(SB)
GLOBL	·libc_utimensat_trampoline_addr(SB), RODATA, $4
DATA	·libc_utimensat_trampoline_addr(SB)/4, $libc_utimensat_trampoline<>(SB)
 07070100000E71000081A4000000000000000000000001645E367C0000DDDB000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go    // go run mksyscall.go -openbsd -libc -tags openbsd,amd64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_amd64.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build openbsd && amd64
// +build openbsd,amd64

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getgroups_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getgroups getgroups "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(ngid int, gid *_Gid_t) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setgroups_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setgroups setgroups "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
	r0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
	wpid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_wait4_trampoline_addr uintptr

//go:cgo_import_dynamic libc_wait4 wait4 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
	r0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_accept_trampoline_addr uintptr

//go:cgo_import_dynamic libc_accept accept "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_bind_trampoline_addr uintptr

//go:cgo_import_dynamic libc_bind bind "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_connect_trampoline_addr uintptr

//go:cgo_import_dynamic libc_connect connect "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_socket_trampoline_addr uintptr

//go:cgo_import_dynamic libc_socket socket "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getsockopt_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getsockopt getsockopt "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setsockopt_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setsockopt setsockopt "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getpeername_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpeername getpeername "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getsockname_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getsockname getsockname "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(s int, how int) (err error) {
	_, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_shutdown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_shutdown shutdown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_socketpair_trampoline_addr uintptr

//go:cgo_import_dynamic libc_socketpair socketpair "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_recvfrom_trampoline_addr uintptr

//go:cgo_import_dynamic libc_recvfrom recvfrom "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sendto_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sendto sendto "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_recvmsg_trampoline_addr uintptr

//go:cgo_import_dynamic libc_recvmsg recvmsg "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sendmsg_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sendmsg sendmsg "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
	r0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_kevent_trampoline_addr uintptr

//go:cgo_import_dynamic libc_kevent kevent "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, timeval *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_utimes_trampoline_addr uintptr

//go:cgo_import_dynamic libc_utimes utimes "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimes(fd int, timeval *[2]Timeval) (err error) {
	_, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_futimes_trampoline_addr uintptr

//go:cgo_import_dynamic libc_futimes futimes "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_poll_trampoline_addr uintptr

//go:cgo_import_dynamic libc_poll poll "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Madvise(b []byte, behav int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_madvise_trampoline_addr uintptr

//go:cgo_import_dynamic libc_madvise madvise "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mlock_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mlock mlock "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlockall(flags int) (err error) {
	_, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mlockall_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mlockall mlockall "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mprotect(b []byte, prot int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mprotect_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mprotect mprotect "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Msync(b []byte, flags int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_msync_trampoline_addr uintptr

//go:cgo_import_dynamic libc_msync msync "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_munlock_trampoline_addr uintptr

//go:cgo_import_dynamic libc_munlock munlock "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlockall() (err error) {
	_, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_munlockall_trampoline_addr uintptr

//go:cgo_import_dynamic libc_munlockall munlockall "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pipe2(p *[2]_C_int, flags int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pipe2_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pipe2 pipe2 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getdents(fd int, buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getdents_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getdents getdents "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getcwd(buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getcwd_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getcwd getcwd "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctl(fd int, req uint, arg uintptr) (err error) {
	_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {
	_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_ioctl_trampoline_addr uintptr

//go:cgo_import_dynamic libc_ioctl ioctl "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
	var _p0 unsafe.Pointer
	if len(mib) > 0 {
		_p0 = unsafe.Pointer(&mib[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sysctl_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sysctl sysctl "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
	r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_ppoll_trampoline_addr uintptr

//go:cgo_import_dynamic libc_ppoll ppoll "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Access(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_access_trampoline_addr uintptr

//go:cgo_import_dynamic libc_access access "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
	_, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_adjtime_trampoline_addr uintptr

//go:cgo_import_dynamic libc_adjtime adjtime "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chdir chdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chflags(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chflags_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chflags chflags "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chmod(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chmod_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chmod chmod "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chown chown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chroot(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chroot_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chroot chroot "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ClockGettime(clockid int32, time *Timespec) (err error) {
	_, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_clock_gettime_trampoline_addr uintptr

//go:cgo_import_dynamic libc_clock_gettime clock_gettime "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Close(fd int) (err error) {
	_, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_close_trampoline_addr uintptr

//go:cgo_import_dynamic libc_close close "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup(fd int) (nfd int, err error) {
	r0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0)
	nfd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_dup_trampoline_addr uintptr

//go:cgo_import_dynamic libc_dup dup "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup2(from int, to int) (err error) {
	_, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_dup2_trampoline_addr uintptr

//go:cgo_import_dynamic libc_dup2 dup2 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup3(from int, to int, flags int) (err error) {
	_, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_dup3_trampoline_addr uintptr

//go:cgo_import_dynamic libc_dup3 dup3 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Exit(code int) {
	syscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0)
	return
}

var libc_exit_trampoline_addr uintptr

//go:cgo_import_dynamic libc_exit exit "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_faccessat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_faccessat faccessat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchdir(fd int) (err error) {
	_, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchdir fchdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchflags(fd int, flags int) (err error) {
	_, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchflags_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchflags fchflags "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmod(fd int, mode uint32) (err error) {
	_, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchmod_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchmod fchmod "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchmodat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchown fchown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchownat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchownat fchownat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Flock(fd int, how int) (err error) {
	_, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_flock_trampoline_addr uintptr

//go:cgo_import_dynamic libc_flock flock "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fpathconf(fd int, name int) (val int, err error) {
	r0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fpathconf_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fstat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fstat fstat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fstatat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fstatat fstatat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatfs(fd int, stat *Statfs_t) (err error) {
	_, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fstatfs_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fstatfs fstatfs "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fsync(fd int) (err error) {
	_, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fsync_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fsync fsync "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_ftruncate_trampoline_addr uintptr

//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0)
	egid = int(r0)
	return
}

var libc_getegid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getegid getegid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (uid int) {
	r0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0)
	uid = int(r0)
	return
}

var libc_geteuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_geteuid geteuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0)
	gid = int(r0)
	return
}

var libc_getgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getgid getgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgid(pid int) (pgid int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0)
	pgid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getpgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpgid getpgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgrp() (pgrp int) {
	r0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0)
	pgrp = int(r0)
	return
}

var libc_getpgrp_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpid() (pid int) {
	r0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0)
	pid = int(r0)
	return
}

var libc_getpid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpid getpid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getppid() (ppid int) {
	r0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0)
	ppid = int(r0)
	return
}

var libc_getppid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getppid getppid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpriority(which int, who int) (prio int, err error) {
	r0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0)
	prio = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getpriority_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpriority getpriority "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(which int, lim *Rlimit) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getrlimit_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrtable() (rtable int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0)
	rtable = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getrtable_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getrtable getrtable "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrusage(who int, rusage *Rusage) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getrusage_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getrusage getrusage "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getsid(pid int) (sid int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0)
	sid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getsid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getsid getsid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_gettimeofday_trampoline_addr uintptr

//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0)
	uid = int(r0)
	return
}

var libc_getuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getuid getuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Issetugid() (tainted bool) {
	r0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0)
	tainted = bool(r0 != 0)
	return
}

var libc_issetugid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_issetugid issetugid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kill(pid int, signum syscall.Signal) (err error) {
	_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_kill_trampoline_addr uintptr

//go:cgo_import_dynamic libc_kill kill "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kqueue() (fd int, err error) {
	r0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_kqueue_trampoline_addr uintptr

//go:cgo_import_dynamic libc_kqueue kqueue "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_lchown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_lchown lchown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Link(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_link_trampoline_addr uintptr

//go:cgo_import_dynamic libc_link link "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_linkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_linkat linkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, backlog int) (err error) {
	_, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_listen_trampoline_addr uintptr

//go:cgo_import_dynamic libc_listen listen "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lstat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_lstat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_lstat lstat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdir(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkdir mkdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdirat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkdirat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifo(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkfifo_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkfifoat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkfifoat mkfifoat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknod(path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mknod_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mknod mknod "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mknodat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mknodat mknodat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
	_, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_nanosleep_trampoline_addr uintptr

//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Open(path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_open_trampoline_addr uintptr

//go:cgo_import_dynamic libc_open open "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_openat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_openat openat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pathconf(path string, name int) (val int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pathconf_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pathconf pathconf "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pread_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pread pread "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pwrite_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pwrite pwrite "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func read(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_read_trampoline_addr uintptr

//go:cgo_import_dynamic libc_read read "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlink(path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_readlink_trampoline_addr uintptr

//go:cgo_import_dynamic libc_readlink readlink "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_readlinkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_readlinkat readlinkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rename(from string, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_rename_trampoline_addr uintptr

//go:cgo_import_dynamic libc_rename rename "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(fromfd int, from string, tofd int, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_renameat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_renameat renameat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Revoke(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_revoke_trampoline_addr uintptr

//go:cgo_import_dynamic libc_revoke revoke "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rmdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_rmdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_rmdir rmdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
	r0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence))
	newoffset = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_lseek_trampoline_addr uintptr

//go:cgo_import_dynamic libc_lseek lseek "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_select_trampoline_addr uintptr

//go:cgo_import_dynamic libc_select select "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setegid(egid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setegid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setegid setegid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seteuid(euid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_seteuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_seteuid seteuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setgid(gid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setgid setgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setlogin(name string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(name)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setlogin_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setlogin setlogin "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpgid(pid int, pgid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setpgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setpgid setpgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpriority(which int, who int, prio int) (err error) {
	_, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setpriority_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setpriority setpriority "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setregid(rgid int, egid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setregid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setregid setregid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setreuid(ruid int, euid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setreuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setreuid setreuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setresgid(rgid int, egid int, sgid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setresgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setresgid setresgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setresuid(ruid int, euid int, suid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setresuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setresuid setresuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setrtable(rtable int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setrtable_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setrtable setrtable "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setsid() (pid int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0)
	pid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setsid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setsid setsid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Settimeofday(tp *Timeval) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_settimeofday_trampoline_addr uintptr

//go:cgo_import_dynamic libc_settimeofday settimeofday "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setuid(uid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setuid setuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Stat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_stat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_stat stat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statfs(path string, stat *Statfs_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_statfs_trampoline_addr uintptr

//go:cgo_import_dynamic libc_statfs statfs "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlink(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_symlink_trampoline_addr uintptr

//go:cgo_import_dynamic libc_symlink symlink "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_symlinkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_symlinkat symlinkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sync() (err error) {
	_, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sync_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sync sync "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_truncate_trampoline_addr uintptr

//go:cgo_import_dynamic libc_truncate truncate "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Umask(newmask int) (oldmask int) {
	r0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0)
	oldmask = int(r0)
	return
}

var libc_umask_trampoline_addr uintptr

//go:cgo_import_dynamic libc_umask umask "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlink(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_unlink_trampoline_addr uintptr

//go:cgo_import_dynamic libc_unlink unlink "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlinkat(dirfd int, path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_unlinkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unmount(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_unmount_trampoline_addr uintptr

//go:cgo_import_dynamic libc_unmount unmount "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func write(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_write_trampoline_addr uintptr

//go:cgo_import_dynamic libc_write write "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
	r0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
	ret = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mmap_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mmap mmap "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func munmap(addr uintptr, length uintptr) (err error) {
	_, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_munmap_trampoline_addr uintptr

//go:cgo_import_dynamic libc_munmap munmap "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_utimensat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_utimensat utimensat "libc.so"
 07070100000E72000081A4000000000000000000000001645E367C00006621000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s // go run mkasm.go openbsd amd64
// Code generated by the command above; DO NOT EDIT.

#include "textflag.h"

TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getgroups(SB)
GLOBL	·libc_getgroups_trampoline_addr(SB), RODATA, $8
DATA	·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB)

TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setgroups(SB)
GLOBL	·libc_setgroups_trampoline_addr(SB), RODATA, $8
DATA	·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB)

TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_wait4(SB)
GLOBL	·libc_wait4_trampoline_addr(SB), RODATA, $8
DATA	·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB)

TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_accept(SB)
GLOBL	·libc_accept_trampoline_addr(SB), RODATA, $8
DATA	·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB)

TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_bind(SB)
GLOBL	·libc_bind_trampoline_addr(SB), RODATA, $8
DATA	·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB)

TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_connect(SB)
GLOBL	·libc_connect_trampoline_addr(SB), RODATA, $8
DATA	·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB)

TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_socket(SB)
GLOBL	·libc_socket_trampoline_addr(SB), RODATA, $8
DATA	·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB)

TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getsockopt(SB)
GLOBL	·libc_getsockopt_trampoline_addr(SB), RODATA, $8
DATA	·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB)

TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setsockopt(SB)
GLOBL	·libc_setsockopt_trampoline_addr(SB), RODATA, $8
DATA	·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB)

TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpeername(SB)
GLOBL	·libc_getpeername_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB)

TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getsockname(SB)
GLOBL	·libc_getsockname_trampoline_addr(SB), RODATA, $8
DATA	·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB)

TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_shutdown(SB)
GLOBL	·libc_shutdown_trampoline_addr(SB), RODATA, $8
DATA	·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB)

TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_socketpair(SB)
GLOBL	·libc_socketpair_trampoline_addr(SB), RODATA, $8
DATA	·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB)

TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_recvfrom(SB)
GLOBL	·libc_recvfrom_trampoline_addr(SB), RODATA, $8
DATA	·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB)

TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sendto(SB)
GLOBL	·libc_sendto_trampoline_addr(SB), RODATA, $8
DATA	·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB)

TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_recvmsg(SB)
GLOBL	·libc_recvmsg_trampoline_addr(SB), RODATA, $8
DATA	·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB)

TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sendmsg(SB)
GLOBL	·libc_sendmsg_trampoline_addr(SB), RODATA, $8
DATA	·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB)

TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_kevent(SB)
GLOBL	·libc_kevent_trampoline_addr(SB), RODATA, $8
DATA	·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB)

TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_utimes(SB)
GLOBL	·libc_utimes_trampoline_addr(SB), RODATA, $8
DATA	·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB)

TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_futimes(SB)
GLOBL	·libc_futimes_trampoline_addr(SB), RODATA, $8
DATA	·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB)

TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_poll(SB)
GLOBL	·libc_poll_trampoline_addr(SB), RODATA, $8
DATA	·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB)

TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_madvise(SB)
GLOBL	·libc_madvise_trampoline_addr(SB), RODATA, $8
DATA	·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB)

TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mlock(SB)
GLOBL	·libc_mlock_trampoline_addr(SB), RODATA, $8
DATA	·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB)

TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mlockall(SB)
GLOBL	·libc_mlockall_trampoline_addr(SB), RODATA, $8
DATA	·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB)

TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mprotect(SB)
GLOBL	·libc_mprotect_trampoline_addr(SB), RODATA, $8
DATA	·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB)

TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_msync(SB)
GLOBL	·libc_msync_trampoline_addr(SB), RODATA, $8
DATA	·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB)

TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_munlock(SB)
GLOBL	·libc_munlock_trampoline_addr(SB), RODATA, $8
DATA	·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB)

TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_munlockall(SB)
GLOBL	·libc_munlockall_trampoline_addr(SB), RODATA, $8
DATA	·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB)

TEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pipe2(SB)
GLOBL	·libc_pipe2_trampoline_addr(SB), RODATA, $8
DATA	·libc_pipe2_trampoline_addr(SB)/8, $libc_pipe2_trampoline<>(SB)

TEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getdents(SB)
GLOBL	·libc_getdents_trampoline_addr(SB), RODATA, $8
DATA	·libc_getdents_trampoline_addr(SB)/8, $libc_getdents_trampoline<>(SB)

TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getcwd(SB)
GLOBL	·libc_getcwd_trampoline_addr(SB), RODATA, $8
DATA	·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB)

TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_ioctl(SB)
GLOBL	·libc_ioctl_trampoline_addr(SB), RODATA, $8
DATA	·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB)

TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sysctl(SB)
GLOBL	·libc_sysctl_trampoline_addr(SB), RODATA, $8
DATA	·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)

TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_ppoll(SB)
GLOBL	·libc_ppoll_trampoline_addr(SB), RODATA, $8
DATA	·libc_ppoll_trampoline_addr(SB)/8, $libc_ppoll_trampoline<>(SB)

TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_access(SB)
GLOBL	·libc_access_trampoline_addr(SB), RODATA, $8
DATA	·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB)

TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_adjtime(SB)
GLOBL	·libc_adjtime_trampoline_addr(SB), RODATA, $8
DATA	·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB)

TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chdir(SB)
GLOBL	·libc_chdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB)

TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chflags(SB)
GLOBL	·libc_chflags_trampoline_addr(SB), RODATA, $8
DATA	·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB)

TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chmod(SB)
GLOBL	·libc_chmod_trampoline_addr(SB), RODATA, $8
DATA	·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB)

TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chown(SB)
GLOBL	·libc_chown_trampoline_addr(SB), RODATA, $8
DATA	·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB)

TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chroot(SB)
GLOBL	·libc_chroot_trampoline_addr(SB), RODATA, $8
DATA	·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB)

TEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_clock_gettime(SB)
GLOBL	·libc_clock_gettime_trampoline_addr(SB), RODATA, $8
DATA	·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB)

TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_close(SB)
GLOBL	·libc_close_trampoline_addr(SB), RODATA, $8
DATA	·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB)

TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_dup(SB)
GLOBL	·libc_dup_trampoline_addr(SB), RODATA, $8
DATA	·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB)

TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_dup2(SB)
GLOBL	·libc_dup2_trampoline_addr(SB), RODATA, $8
DATA	·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB)

TEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_dup3(SB)
GLOBL	·libc_dup3_trampoline_addr(SB), RODATA, $8
DATA	·libc_dup3_trampoline_addr(SB)/8, $libc_dup3_trampoline<>(SB)

TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_exit(SB)
GLOBL	·libc_exit_trampoline_addr(SB), RODATA, $8
DATA	·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB)

TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_faccessat(SB)
GLOBL	·libc_faccessat_trampoline_addr(SB), RODATA, $8
DATA	·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB)

TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchdir(SB)
GLOBL	·libc_fchdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB)

TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchflags(SB)
GLOBL	·libc_fchflags_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB)

TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchmod(SB)
GLOBL	·libc_fchmod_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB)

TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchmodat(SB)
GLOBL	·libc_fchmodat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB)

TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchown(SB)
GLOBL	·libc_fchown_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB)

TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchownat(SB)
GLOBL	·libc_fchownat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB)

TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_flock(SB)
GLOBL	·libc_flock_trampoline_addr(SB), RODATA, $8
DATA	·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB)

TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fpathconf(SB)
GLOBL	·libc_fpathconf_trampoline_addr(SB), RODATA, $8
DATA	·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB)

TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fstat(SB)
GLOBL	·libc_fstat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB)

TEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fstatat(SB)
GLOBL	·libc_fstatat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB)

TEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fstatfs(SB)
GLOBL	·libc_fstatfs_trampoline_addr(SB), RODATA, $8
DATA	·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB)

TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fsync(SB)
GLOBL	·libc_fsync_trampoline_addr(SB), RODATA, $8
DATA	·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB)

TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_ftruncate(SB)
GLOBL	·libc_ftruncate_trampoline_addr(SB), RODATA, $8
DATA	·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB)

TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getegid(SB)
GLOBL	·libc_getegid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB)

TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_geteuid(SB)
GLOBL	·libc_geteuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB)

TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getgid(SB)
GLOBL	·libc_getgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB)

TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpgid(SB)
GLOBL	·libc_getpgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB)

TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpgrp(SB)
GLOBL	·libc_getpgrp_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB)

TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpid(SB)
GLOBL	·libc_getpid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB)

TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getppid(SB)
GLOBL	·libc_getppid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB)

TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpriority(SB)
GLOBL	·libc_getpriority_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB)

TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getrlimit(SB)
GLOBL	·libc_getrlimit_trampoline_addr(SB), RODATA, $8
DATA	·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB)

TEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getrtable(SB)
GLOBL	·libc_getrtable_trampoline_addr(SB), RODATA, $8
DATA	·libc_getrtable_trampoline_addr(SB)/8, $libc_getrtable_trampoline<>(SB)

TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getrusage(SB)
GLOBL	·libc_getrusage_trampoline_addr(SB), RODATA, $8
DATA	·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB)

TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getsid(SB)
GLOBL	·libc_getsid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB)

TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_gettimeofday(SB)
GLOBL	·libc_gettimeofday_trampoline_addr(SB), RODATA, $8
DATA	·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB)

TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getuid(SB)
GLOBL	·libc_getuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB)

TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_issetugid(SB)
GLOBL	·libc_issetugid_trampoline_addr(SB), RODATA, $8
DATA	·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB)

TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_kill(SB)
GLOBL	·libc_kill_trampoline_addr(SB), RODATA, $8
DATA	·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB)

TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_kqueue(SB)
GLOBL	·libc_kqueue_trampoline_addr(SB), RODATA, $8
DATA	·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB)

TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_lchown(SB)
GLOBL	·libc_lchown_trampoline_addr(SB), RODATA, $8
DATA	·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB)

TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_link(SB)
GLOBL	·libc_link_trampoline_addr(SB), RODATA, $8
DATA	·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB)

TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_linkat(SB)
GLOBL	·libc_linkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB)

TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_listen(SB)
GLOBL	·libc_listen_trampoline_addr(SB), RODATA, $8
DATA	·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB)

TEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_lstat(SB)
GLOBL	·libc_lstat_trampoline_addr(SB), RODATA, $8
DATA	·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB)

TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkdir(SB)
GLOBL	·libc_mkdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB)

TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkdirat(SB)
GLOBL	·libc_mkdirat_trampoline_addr(SB), RODATA, $8
DATA	·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB)

TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkfifo(SB)
GLOBL	·libc_mkfifo_trampoline_addr(SB), RODATA, $8
DATA	·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB)

TEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkfifoat(SB)
GLOBL	·libc_mkfifoat_trampoline_addr(SB), RODATA, $8
DATA	·libc_mkfifoat_trampoline_addr(SB)/8, $libc_mkfifoat_trampoline<>(SB)

TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mknod(SB)
GLOBL	·libc_mknod_trampoline_addr(SB), RODATA, $8
DATA	·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB)

TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mknodat(SB)
GLOBL	·libc_mknodat_trampoline_addr(SB), RODATA, $8
DATA	·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB)

TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_nanosleep(SB)
GLOBL	·libc_nanosleep_trampoline_addr(SB), RODATA, $8
DATA	·libc_nanosleep_trampoline_addr(SB)/8, $libc_nanosleep_trampoline<>(SB)

TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_open(SB)
GLOBL	·libc_open_trampoline_addr(SB), RODATA, $8
DATA	·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB)

TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_openat(SB)
GLOBL	·libc_openat_trampoline_addr(SB), RODATA, $8
DATA	·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB)

TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pathconf(SB)
GLOBL	·libc_pathconf_trampoline_addr(SB), RODATA, $8
DATA	·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB)

TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pread(SB)
GLOBL	·libc_pread_trampoline_addr(SB), RODATA, $8
DATA	·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB)

TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pwrite(SB)
GLOBL	·libc_pwrite_trampoline_addr(SB), RODATA, $8
DATA	·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)

TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_read(SB)
GLOBL	·libc_read_trampoline_addr(SB), RODATA, $8
DATA	·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB)

TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_readlink(SB)
GLOBL	·libc_readlink_trampoline_addr(SB), RODATA, $8
DATA	·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB)

TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_readlinkat(SB)
GLOBL	·libc_readlinkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB)

TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_rename(SB)
GLOBL	·libc_rename_trampoline_addr(SB), RODATA, $8
DATA	·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB)

TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_renameat(SB)
GLOBL	·libc_renameat_trampoline_addr(SB), RODATA, $8
DATA	·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB)

TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_revoke(SB)
GLOBL	·libc_revoke_trampoline_addr(SB), RODATA, $8
DATA	·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB)

TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_rmdir(SB)
GLOBL	·libc_rmdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB)

TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_lseek(SB)
GLOBL	·libc_lseek_trampoline_addr(SB), RODATA, $8
DATA	·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB)

TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_select(SB)
GLOBL	·libc_select_trampoline_addr(SB), RODATA, $8
DATA	·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB)

TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setegid(SB)
GLOBL	·libc_setegid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB)

TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_seteuid(SB)
GLOBL	·libc_seteuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB)

TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setgid(SB)
GLOBL	·libc_setgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB)

TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setlogin(SB)
GLOBL	·libc_setlogin_trampoline_addr(SB), RODATA, $8
DATA	·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB)

TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setpgid(SB)
GLOBL	·libc_setpgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB)

TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setpriority(SB)
GLOBL	·libc_setpriority_trampoline_addr(SB), RODATA, $8
DATA	·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB)

TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setregid(SB)
GLOBL	·libc_setregid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB)

TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setreuid(SB)
GLOBL	·libc_setreuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB)

TEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setresgid(SB)
GLOBL	·libc_setresgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setresgid_trampoline_addr(SB)/8, $libc_setresgid_trampoline<>(SB)

TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setresuid(SB)
GLOBL	·libc_setresuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB)

TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setrtable(SB)
GLOBL	·libc_setrtable_trampoline_addr(SB), RODATA, $8
DATA	·libc_setrtable_trampoline_addr(SB)/8, $libc_setrtable_trampoline<>(SB)

TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setsid(SB)
GLOBL	·libc_setsid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB)

TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_settimeofday(SB)
GLOBL	·libc_settimeofday_trampoline_addr(SB), RODATA, $8
DATA	·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB)

TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setuid(SB)
GLOBL	·libc_setuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB)

TEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_stat(SB)
GLOBL	·libc_stat_trampoline_addr(SB), RODATA, $8
DATA	·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB)

TEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_statfs(SB)
GLOBL	·libc_statfs_trampoline_addr(SB), RODATA, $8
DATA	·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB)

TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_symlink(SB)
GLOBL	·libc_symlink_trampoline_addr(SB), RODATA, $8
DATA	·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB)

TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_symlinkat(SB)
GLOBL	·libc_symlinkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB)

TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sync(SB)
GLOBL	·libc_sync_trampoline_addr(SB), RODATA, $8
DATA	·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB)

TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_truncate(SB)
GLOBL	·libc_truncate_trampoline_addr(SB), RODATA, $8
DATA	·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB)

TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_umask(SB)
GLOBL	·libc_umask_trampoline_addr(SB), RODATA, $8
DATA	·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB)

TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_unlink(SB)
GLOBL	·libc_unlink_trampoline_addr(SB), RODATA, $8
DATA	·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB)

TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_unlinkat(SB)
GLOBL	·libc_unlinkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB)

TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_unmount(SB)
GLOBL	·libc_unmount_trampoline_addr(SB), RODATA, $8
DATA	·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB)

TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_write(SB)
GLOBL	·libc_write_trampoline_addr(SB), RODATA, $8
DATA	·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB)

TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mmap(SB)
GLOBL	·libc_mmap_trampoline_addr(SB), RODATA, $8
DATA	·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB)

TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_munmap(SB)
GLOBL	·libc_munmap_trampoline_addr(SB), RODATA, $8
DATA	·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB)

TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_utimensat(SB)
GLOBL	·libc_utimensat_trampoline_addr(SB), RODATA, $8
DATA	·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB)
   07070100000E73000081A4000000000000000000000001645E367C0000DE85000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go  // go run mksyscall.go -l32 -openbsd -arm -libc -tags openbsd,arm syscall_bsd.go syscall_openbsd.go syscall_openbsd_arm.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build openbsd && arm
// +build openbsd,arm

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getgroups_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getgroups getgroups "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(ngid int, gid *_Gid_t) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setgroups_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setgroups setgroups "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
	r0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
	wpid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_wait4_trampoline_addr uintptr

//go:cgo_import_dynamic libc_wait4 wait4 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
	r0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_accept_trampoline_addr uintptr

//go:cgo_import_dynamic libc_accept accept "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_bind_trampoline_addr uintptr

//go:cgo_import_dynamic libc_bind bind "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_connect_trampoline_addr uintptr

//go:cgo_import_dynamic libc_connect connect "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_socket_trampoline_addr uintptr

//go:cgo_import_dynamic libc_socket socket "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getsockopt_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getsockopt getsockopt "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setsockopt_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setsockopt setsockopt "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getpeername_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpeername getpeername "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getsockname_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getsockname getsockname "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(s int, how int) (err error) {
	_, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_shutdown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_shutdown shutdown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_socketpair_trampoline_addr uintptr

//go:cgo_import_dynamic libc_socketpair socketpair "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_recvfrom_trampoline_addr uintptr

//go:cgo_import_dynamic libc_recvfrom recvfrom "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sendto_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sendto sendto "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_recvmsg_trampoline_addr uintptr

//go:cgo_import_dynamic libc_recvmsg recvmsg "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sendmsg_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sendmsg sendmsg "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
	r0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_kevent_trampoline_addr uintptr

//go:cgo_import_dynamic libc_kevent kevent "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, timeval *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_utimes_trampoline_addr uintptr

//go:cgo_import_dynamic libc_utimes utimes "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimes(fd int, timeval *[2]Timeval) (err error) {
	_, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_futimes_trampoline_addr uintptr

//go:cgo_import_dynamic libc_futimes futimes "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_poll_trampoline_addr uintptr

//go:cgo_import_dynamic libc_poll poll "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Madvise(b []byte, behav int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_madvise_trampoline_addr uintptr

//go:cgo_import_dynamic libc_madvise madvise "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mlock_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mlock mlock "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlockall(flags int) (err error) {
	_, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mlockall_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mlockall mlockall "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mprotect(b []byte, prot int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mprotect_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mprotect mprotect "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Msync(b []byte, flags int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_msync_trampoline_addr uintptr

//go:cgo_import_dynamic libc_msync msync "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_munlock_trampoline_addr uintptr

//go:cgo_import_dynamic libc_munlock munlock "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlockall() (err error) {
	_, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_munlockall_trampoline_addr uintptr

//go:cgo_import_dynamic libc_munlockall munlockall "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pipe2(p *[2]_C_int, flags int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pipe2_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pipe2 pipe2 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getdents(fd int, buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getdents_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getdents getdents "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getcwd(buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getcwd_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getcwd getcwd "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctl(fd int, req uint, arg uintptr) (err error) {
	_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {
	_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_ioctl_trampoline_addr uintptr

//go:cgo_import_dynamic libc_ioctl ioctl "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
	var _p0 unsafe.Pointer
	if len(mib) > 0 {
		_p0 = unsafe.Pointer(&mib[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sysctl_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sysctl sysctl "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
	r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_ppoll_trampoline_addr uintptr

//go:cgo_import_dynamic libc_ppoll ppoll "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Access(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_access_trampoline_addr uintptr

//go:cgo_import_dynamic libc_access access "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
	_, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_adjtime_trampoline_addr uintptr

//go:cgo_import_dynamic libc_adjtime adjtime "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chdir chdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chflags(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chflags_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chflags chflags "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chmod(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chmod_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chmod chmod "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chown chown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chroot(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chroot_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chroot chroot "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ClockGettime(clockid int32, time *Timespec) (err error) {
	_, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_clock_gettime_trampoline_addr uintptr

//go:cgo_import_dynamic libc_clock_gettime clock_gettime "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Close(fd int) (err error) {
	_, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_close_trampoline_addr uintptr

//go:cgo_import_dynamic libc_close close "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup(fd int) (nfd int, err error) {
	r0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0)
	nfd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_dup_trampoline_addr uintptr

//go:cgo_import_dynamic libc_dup dup "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup2(from int, to int) (err error) {
	_, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_dup2_trampoline_addr uintptr

//go:cgo_import_dynamic libc_dup2 dup2 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup3(from int, to int, flags int) (err error) {
	_, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_dup3_trampoline_addr uintptr

//go:cgo_import_dynamic libc_dup3 dup3 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Exit(code int) {
	syscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0)
	return
}

var libc_exit_trampoline_addr uintptr

//go:cgo_import_dynamic libc_exit exit "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_faccessat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_faccessat faccessat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchdir(fd int) (err error) {
	_, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchdir fchdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchflags(fd int, flags int) (err error) {
	_, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchflags_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchflags fchflags "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmod(fd int, mode uint32) (err error) {
	_, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchmod_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchmod fchmod "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchmodat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchown fchown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchownat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchownat fchownat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Flock(fd int, how int) (err error) {
	_, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_flock_trampoline_addr uintptr

//go:cgo_import_dynamic libc_flock flock "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fpathconf(fd int, name int) (val int, err error) {
	r0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fpathconf_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fstat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fstat fstat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fstatat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fstatat fstatat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatfs(fd int, stat *Statfs_t) (err error) {
	_, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fstatfs_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fstatfs fstatfs "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fsync(fd int) (err error) {
	_, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fsync_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fsync fsync "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := syscall_syscall6(libc_ftruncate_trampoline_addr, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_ftruncate_trampoline_addr uintptr

//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0)
	egid = int(r0)
	return
}

var libc_getegid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getegid getegid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (uid int) {
	r0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0)
	uid = int(r0)
	return
}

var libc_geteuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_geteuid geteuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0)
	gid = int(r0)
	return
}

var libc_getgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getgid getgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgid(pid int) (pgid int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0)
	pgid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getpgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpgid getpgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgrp() (pgrp int) {
	r0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0)
	pgrp = int(r0)
	return
}

var libc_getpgrp_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpid() (pid int) {
	r0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0)
	pid = int(r0)
	return
}

var libc_getpid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpid getpid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getppid() (ppid int) {
	r0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0)
	ppid = int(r0)
	return
}

var libc_getppid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getppid getppid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpriority(which int, who int) (prio int, err error) {
	r0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0)
	prio = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getpriority_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpriority getpriority "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(which int, lim *Rlimit) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getrlimit_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrtable() (rtable int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0)
	rtable = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getrtable_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getrtable getrtable "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrusage(who int, rusage *Rusage) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getrusage_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getrusage getrusage "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getsid(pid int) (sid int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0)
	sid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getsid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getsid getsid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_gettimeofday_trampoline_addr uintptr

//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0)
	uid = int(r0)
	return
}

var libc_getuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getuid getuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Issetugid() (tainted bool) {
	r0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0)
	tainted = bool(r0 != 0)
	return
}

var libc_issetugid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_issetugid issetugid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kill(pid int, signum syscall.Signal) (err error) {
	_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_kill_trampoline_addr uintptr

//go:cgo_import_dynamic libc_kill kill "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kqueue() (fd int, err error) {
	r0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_kqueue_trampoline_addr uintptr

//go:cgo_import_dynamic libc_kqueue kqueue "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_lchown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_lchown lchown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Link(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_link_trampoline_addr uintptr

//go:cgo_import_dynamic libc_link link "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_linkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_linkat linkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, backlog int) (err error) {
	_, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_listen_trampoline_addr uintptr

//go:cgo_import_dynamic libc_listen listen "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lstat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_lstat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_lstat lstat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdir(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkdir mkdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdirat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkdirat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifo(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkfifo_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkfifoat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkfifoat mkfifoat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknod(path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mknod_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mknod mknod "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mknodat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mknodat mknodat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
	_, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_nanosleep_trampoline_addr uintptr

//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Open(path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_open_trampoline_addr uintptr

//go:cgo_import_dynamic libc_open open "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_openat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_openat openat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pathconf(path string, name int) (val int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pathconf_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pathconf pathconf "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pread_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pread pread "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pwrite_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pwrite pwrite "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func read(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_read_trampoline_addr uintptr

//go:cgo_import_dynamic libc_read read "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlink(path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_readlink_trampoline_addr uintptr

//go:cgo_import_dynamic libc_readlink readlink "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_readlinkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_readlinkat readlinkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rename(from string, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_rename_trampoline_addr uintptr

//go:cgo_import_dynamic libc_rename rename "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(fromfd int, from string, tofd int, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_renameat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_renameat renameat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Revoke(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_revoke_trampoline_addr uintptr

//go:cgo_import_dynamic libc_revoke revoke "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rmdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_rmdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_rmdir rmdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
	r0, r1, e1 := syscall_syscall6(libc_lseek_trampoline_addr, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0)
	newoffset = int64(int64(r1)<<32 | int64(r0))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_lseek_trampoline_addr uintptr

//go:cgo_import_dynamic libc_lseek lseek "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_select_trampoline_addr uintptr

//go:cgo_import_dynamic libc_select select "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setegid(egid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setegid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setegid setegid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seteuid(euid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_seteuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_seteuid seteuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setgid(gid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setgid setgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setlogin(name string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(name)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setlogin_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setlogin setlogin "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpgid(pid int, pgid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setpgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setpgid setpgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpriority(which int, who int, prio int) (err error) {
	_, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setpriority_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setpriority setpriority "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setregid(rgid int, egid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setregid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setregid setregid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setreuid(ruid int, euid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setreuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setreuid setreuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setresgid(rgid int, egid int, sgid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setresgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setresgid setresgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setresuid(ruid int, euid int, suid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setresuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setresuid setresuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setrtable(rtable int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setrtable_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setrtable setrtable "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setsid() (pid int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0)
	pid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setsid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setsid setsid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Settimeofday(tp *Timeval) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_settimeofday_trampoline_addr uintptr

//go:cgo_import_dynamic libc_settimeofday settimeofday "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setuid(uid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setuid setuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Stat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_stat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_stat stat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statfs(path string, stat *Statfs_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_statfs_trampoline_addr uintptr

//go:cgo_import_dynamic libc_statfs statfs "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlink(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_symlink_trampoline_addr uintptr

//go:cgo_import_dynamic libc_symlink symlink "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_symlinkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_symlinkat symlinkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sync() (err error) {
	_, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sync_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sync sync "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_truncate_trampoline_addr uintptr

//go:cgo_import_dynamic libc_truncate truncate "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Umask(newmask int) (oldmask int) {
	r0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0)
	oldmask = int(r0)
	return
}

var libc_umask_trampoline_addr uintptr

//go:cgo_import_dynamic libc_umask umask "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlink(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_unlink_trampoline_addr uintptr

//go:cgo_import_dynamic libc_unlink unlink "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlinkat(dirfd int, path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_unlinkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unmount(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_unmount_trampoline_addr uintptr

//go:cgo_import_dynamic libc_unmount unmount "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func write(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_write_trampoline_addr uintptr

//go:cgo_import_dynamic libc_write write "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
	r0, _, e1 := syscall_syscall9(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0)
	ret = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mmap_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mmap mmap "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func munmap(addr uintptr, length uintptr) (err error) {
	_, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_munmap_trampoline_addr uintptr

//go:cgo_import_dynamic libc_munmap munmap "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_utimensat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_utimensat utimensat "libc.so"
   07070100000E74000081A4000000000000000000000001645E367C0000661F000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s   // go run mkasm.go openbsd arm
// Code generated by the command above; DO NOT EDIT.

#include "textflag.h"

TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getgroups(SB)
GLOBL	·libc_getgroups_trampoline_addr(SB), RODATA, $4
DATA	·libc_getgroups_trampoline_addr(SB)/4, $libc_getgroups_trampoline<>(SB)

TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setgroups(SB)
GLOBL	·libc_setgroups_trampoline_addr(SB), RODATA, $4
DATA	·libc_setgroups_trampoline_addr(SB)/4, $libc_setgroups_trampoline<>(SB)

TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_wait4(SB)
GLOBL	·libc_wait4_trampoline_addr(SB), RODATA, $4
DATA	·libc_wait4_trampoline_addr(SB)/4, $libc_wait4_trampoline<>(SB)

TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_accept(SB)
GLOBL	·libc_accept_trampoline_addr(SB), RODATA, $4
DATA	·libc_accept_trampoline_addr(SB)/4, $libc_accept_trampoline<>(SB)

TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_bind(SB)
GLOBL	·libc_bind_trampoline_addr(SB), RODATA, $4
DATA	·libc_bind_trampoline_addr(SB)/4, $libc_bind_trampoline<>(SB)

TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_connect(SB)
GLOBL	·libc_connect_trampoline_addr(SB), RODATA, $4
DATA	·libc_connect_trampoline_addr(SB)/4, $libc_connect_trampoline<>(SB)

TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_socket(SB)
GLOBL	·libc_socket_trampoline_addr(SB), RODATA, $4
DATA	·libc_socket_trampoline_addr(SB)/4, $libc_socket_trampoline<>(SB)

TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getsockopt(SB)
GLOBL	·libc_getsockopt_trampoline_addr(SB), RODATA, $4
DATA	·libc_getsockopt_trampoline_addr(SB)/4, $libc_getsockopt_trampoline<>(SB)

TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setsockopt(SB)
GLOBL	·libc_setsockopt_trampoline_addr(SB), RODATA, $4
DATA	·libc_setsockopt_trampoline_addr(SB)/4, $libc_setsockopt_trampoline<>(SB)

TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpeername(SB)
GLOBL	·libc_getpeername_trampoline_addr(SB), RODATA, $4
DATA	·libc_getpeername_trampoline_addr(SB)/4, $libc_getpeername_trampoline<>(SB)

TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getsockname(SB)
GLOBL	·libc_getsockname_trampoline_addr(SB), RODATA, $4
DATA	·libc_getsockname_trampoline_addr(SB)/4, $libc_getsockname_trampoline<>(SB)

TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_shutdown(SB)
GLOBL	·libc_shutdown_trampoline_addr(SB), RODATA, $4
DATA	·libc_shutdown_trampoline_addr(SB)/4, $libc_shutdown_trampoline<>(SB)

TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_socketpair(SB)
GLOBL	·libc_socketpair_trampoline_addr(SB), RODATA, $4
DATA	·libc_socketpair_trampoline_addr(SB)/4, $libc_socketpair_trampoline<>(SB)

TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_recvfrom(SB)
GLOBL	·libc_recvfrom_trampoline_addr(SB), RODATA, $4
DATA	·libc_recvfrom_trampoline_addr(SB)/4, $libc_recvfrom_trampoline<>(SB)

TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sendto(SB)
GLOBL	·libc_sendto_trampoline_addr(SB), RODATA, $4
DATA	·libc_sendto_trampoline_addr(SB)/4, $libc_sendto_trampoline<>(SB)

TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_recvmsg(SB)
GLOBL	·libc_recvmsg_trampoline_addr(SB), RODATA, $4
DATA	·libc_recvmsg_trampoline_addr(SB)/4, $libc_recvmsg_trampoline<>(SB)

TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sendmsg(SB)
GLOBL	·libc_sendmsg_trampoline_addr(SB), RODATA, $4
DATA	·libc_sendmsg_trampoline_addr(SB)/4, $libc_sendmsg_trampoline<>(SB)

TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_kevent(SB)
GLOBL	·libc_kevent_trampoline_addr(SB), RODATA, $4
DATA	·libc_kevent_trampoline_addr(SB)/4, $libc_kevent_trampoline<>(SB)

TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_utimes(SB)
GLOBL	·libc_utimes_trampoline_addr(SB), RODATA, $4
DATA	·libc_utimes_trampoline_addr(SB)/4, $libc_utimes_trampoline<>(SB)

TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_futimes(SB)
GLOBL	·libc_futimes_trampoline_addr(SB), RODATA, $4
DATA	·libc_futimes_trampoline_addr(SB)/4, $libc_futimes_trampoline<>(SB)

TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_poll(SB)
GLOBL	·libc_poll_trampoline_addr(SB), RODATA, $4
DATA	·libc_poll_trampoline_addr(SB)/4, $libc_poll_trampoline<>(SB)

TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_madvise(SB)
GLOBL	·libc_madvise_trampoline_addr(SB), RODATA, $4
DATA	·libc_madvise_trampoline_addr(SB)/4, $libc_madvise_trampoline<>(SB)

TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mlock(SB)
GLOBL	·libc_mlock_trampoline_addr(SB), RODATA, $4
DATA	·libc_mlock_trampoline_addr(SB)/4, $libc_mlock_trampoline<>(SB)

TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mlockall(SB)
GLOBL	·libc_mlockall_trampoline_addr(SB), RODATA, $4
DATA	·libc_mlockall_trampoline_addr(SB)/4, $libc_mlockall_trampoline<>(SB)

TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mprotect(SB)
GLOBL	·libc_mprotect_trampoline_addr(SB), RODATA, $4
DATA	·libc_mprotect_trampoline_addr(SB)/4, $libc_mprotect_trampoline<>(SB)

TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_msync(SB)
GLOBL	·libc_msync_trampoline_addr(SB), RODATA, $4
DATA	·libc_msync_trampoline_addr(SB)/4, $libc_msync_trampoline<>(SB)

TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_munlock(SB)
GLOBL	·libc_munlock_trampoline_addr(SB), RODATA, $4
DATA	·libc_munlock_trampoline_addr(SB)/4, $libc_munlock_trampoline<>(SB)

TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_munlockall(SB)
GLOBL	·libc_munlockall_trampoline_addr(SB), RODATA, $4
DATA	·libc_munlockall_trampoline_addr(SB)/4, $libc_munlockall_trampoline<>(SB)

TEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pipe2(SB)
GLOBL	·libc_pipe2_trampoline_addr(SB), RODATA, $4
DATA	·libc_pipe2_trampoline_addr(SB)/4, $libc_pipe2_trampoline<>(SB)

TEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getdents(SB)
GLOBL	·libc_getdents_trampoline_addr(SB), RODATA, $4
DATA	·libc_getdents_trampoline_addr(SB)/4, $libc_getdents_trampoline<>(SB)

TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getcwd(SB)
GLOBL	·libc_getcwd_trampoline_addr(SB), RODATA, $4
DATA	·libc_getcwd_trampoline_addr(SB)/4, $libc_getcwd_trampoline<>(SB)

TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_ioctl(SB)
GLOBL	·libc_ioctl_trampoline_addr(SB), RODATA, $4
DATA	·libc_ioctl_trampoline_addr(SB)/4, $libc_ioctl_trampoline<>(SB)

TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sysctl(SB)
GLOBL	·libc_sysctl_trampoline_addr(SB), RODATA, $4
DATA	·libc_sysctl_trampoline_addr(SB)/4, $libc_sysctl_trampoline<>(SB)

TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_ppoll(SB)
GLOBL	·libc_ppoll_trampoline_addr(SB), RODATA, $4
DATA	·libc_ppoll_trampoline_addr(SB)/4, $libc_ppoll_trampoline<>(SB)

TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_access(SB)
GLOBL	·libc_access_trampoline_addr(SB), RODATA, $4
DATA	·libc_access_trampoline_addr(SB)/4, $libc_access_trampoline<>(SB)

TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_adjtime(SB)
GLOBL	·libc_adjtime_trampoline_addr(SB), RODATA, $4
DATA	·libc_adjtime_trampoline_addr(SB)/4, $libc_adjtime_trampoline<>(SB)

TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chdir(SB)
GLOBL	·libc_chdir_trampoline_addr(SB), RODATA, $4
DATA	·libc_chdir_trampoline_addr(SB)/4, $libc_chdir_trampoline<>(SB)

TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chflags(SB)
GLOBL	·libc_chflags_trampoline_addr(SB), RODATA, $4
DATA	·libc_chflags_trampoline_addr(SB)/4, $libc_chflags_trampoline<>(SB)

TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chmod(SB)
GLOBL	·libc_chmod_trampoline_addr(SB), RODATA, $4
DATA	·libc_chmod_trampoline_addr(SB)/4, $libc_chmod_trampoline<>(SB)

TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chown(SB)
GLOBL	·libc_chown_trampoline_addr(SB), RODATA, $4
DATA	·libc_chown_trampoline_addr(SB)/4, $libc_chown_trampoline<>(SB)

TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chroot(SB)
GLOBL	·libc_chroot_trampoline_addr(SB), RODATA, $4
DATA	·libc_chroot_trampoline_addr(SB)/4, $libc_chroot_trampoline<>(SB)

TEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_clock_gettime(SB)
GLOBL	·libc_clock_gettime_trampoline_addr(SB), RODATA, $4
DATA	·libc_clock_gettime_trampoline_addr(SB)/4, $libc_clock_gettime_trampoline<>(SB)

TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_close(SB)
GLOBL	·libc_close_trampoline_addr(SB), RODATA, $4
DATA	·libc_close_trampoline_addr(SB)/4, $libc_close_trampoline<>(SB)

TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_dup(SB)
GLOBL	·libc_dup_trampoline_addr(SB), RODATA, $4
DATA	·libc_dup_trampoline_addr(SB)/4, $libc_dup_trampoline<>(SB)

TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_dup2(SB)
GLOBL	·libc_dup2_trampoline_addr(SB), RODATA, $4
DATA	·libc_dup2_trampoline_addr(SB)/4, $libc_dup2_trampoline<>(SB)

TEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_dup3(SB)
GLOBL	·libc_dup3_trampoline_addr(SB), RODATA, $4
DATA	·libc_dup3_trampoline_addr(SB)/4, $libc_dup3_trampoline<>(SB)

TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_exit(SB)
GLOBL	·libc_exit_trampoline_addr(SB), RODATA, $4
DATA	·libc_exit_trampoline_addr(SB)/4, $libc_exit_trampoline<>(SB)

TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_faccessat(SB)
GLOBL	·libc_faccessat_trampoline_addr(SB), RODATA, $4
DATA	·libc_faccessat_trampoline_addr(SB)/4, $libc_faccessat_trampoline<>(SB)

TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchdir(SB)
GLOBL	·libc_fchdir_trampoline_addr(SB), RODATA, $4
DATA	·libc_fchdir_trampoline_addr(SB)/4, $libc_fchdir_trampoline<>(SB)

TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchflags(SB)
GLOBL	·libc_fchflags_trampoline_addr(SB), RODATA, $4
DATA	·libc_fchflags_trampoline_addr(SB)/4, $libc_fchflags_trampoline<>(SB)

TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchmod(SB)
GLOBL	·libc_fchmod_trampoline_addr(SB), RODATA, $4
DATA	·libc_fchmod_trampoline_addr(SB)/4, $libc_fchmod_trampoline<>(SB)

TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchmodat(SB)
GLOBL	·libc_fchmodat_trampoline_addr(SB), RODATA, $4
DATA	·libc_fchmodat_trampoline_addr(SB)/4, $libc_fchmodat_trampoline<>(SB)

TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchown(SB)
GLOBL	·libc_fchown_trampoline_addr(SB), RODATA, $4
DATA	·libc_fchown_trampoline_addr(SB)/4, $libc_fchown_trampoline<>(SB)

TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchownat(SB)
GLOBL	·libc_fchownat_trampoline_addr(SB), RODATA, $4
DATA	·libc_fchownat_trampoline_addr(SB)/4, $libc_fchownat_trampoline<>(SB)

TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_flock(SB)
GLOBL	·libc_flock_trampoline_addr(SB), RODATA, $4
DATA	·libc_flock_trampoline_addr(SB)/4, $libc_flock_trampoline<>(SB)

TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fpathconf(SB)
GLOBL	·libc_fpathconf_trampoline_addr(SB), RODATA, $4
DATA	·libc_fpathconf_trampoline_addr(SB)/4, $libc_fpathconf_trampoline<>(SB)

TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fstat(SB)
GLOBL	·libc_fstat_trampoline_addr(SB), RODATA, $4
DATA	·libc_fstat_trampoline_addr(SB)/4, $libc_fstat_trampoline<>(SB)

TEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fstatat(SB)
GLOBL	·libc_fstatat_trampoline_addr(SB), RODATA, $4
DATA	·libc_fstatat_trampoline_addr(SB)/4, $libc_fstatat_trampoline<>(SB)

TEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fstatfs(SB)
GLOBL	·libc_fstatfs_trampoline_addr(SB), RODATA, $4
DATA	·libc_fstatfs_trampoline_addr(SB)/4, $libc_fstatfs_trampoline<>(SB)

TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fsync(SB)
GLOBL	·libc_fsync_trampoline_addr(SB), RODATA, $4
DATA	·libc_fsync_trampoline_addr(SB)/4, $libc_fsync_trampoline<>(SB)

TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_ftruncate(SB)
GLOBL	·libc_ftruncate_trampoline_addr(SB), RODATA, $4
DATA	·libc_ftruncate_trampoline_addr(SB)/4, $libc_ftruncate_trampoline<>(SB)

TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getegid(SB)
GLOBL	·libc_getegid_trampoline_addr(SB), RODATA, $4
DATA	·libc_getegid_trampoline_addr(SB)/4, $libc_getegid_trampoline<>(SB)

TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_geteuid(SB)
GLOBL	·libc_geteuid_trampoline_addr(SB), RODATA, $4
DATA	·libc_geteuid_trampoline_addr(SB)/4, $libc_geteuid_trampoline<>(SB)

TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getgid(SB)
GLOBL	·libc_getgid_trampoline_addr(SB), RODATA, $4
DATA	·libc_getgid_trampoline_addr(SB)/4, $libc_getgid_trampoline<>(SB)

TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpgid(SB)
GLOBL	·libc_getpgid_trampoline_addr(SB), RODATA, $4
DATA	·libc_getpgid_trampoline_addr(SB)/4, $libc_getpgid_trampoline<>(SB)

TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpgrp(SB)
GLOBL	·libc_getpgrp_trampoline_addr(SB), RODATA, $4
DATA	·libc_getpgrp_trampoline_addr(SB)/4, $libc_getpgrp_trampoline<>(SB)

TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpid(SB)
GLOBL	·libc_getpid_trampoline_addr(SB), RODATA, $4
DATA	·libc_getpid_trampoline_addr(SB)/4, $libc_getpid_trampoline<>(SB)

TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getppid(SB)
GLOBL	·libc_getppid_trampoline_addr(SB), RODATA, $4
DATA	·libc_getppid_trampoline_addr(SB)/4, $libc_getppid_trampoline<>(SB)

TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpriority(SB)
GLOBL	·libc_getpriority_trampoline_addr(SB), RODATA, $4
DATA	·libc_getpriority_trampoline_addr(SB)/4, $libc_getpriority_trampoline<>(SB)

TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getrlimit(SB)
GLOBL	·libc_getrlimit_trampoline_addr(SB), RODATA, $4
DATA	·libc_getrlimit_trampoline_addr(SB)/4, $libc_getrlimit_trampoline<>(SB)

TEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getrtable(SB)
GLOBL	·libc_getrtable_trampoline_addr(SB), RODATA, $4
DATA	·libc_getrtable_trampoline_addr(SB)/4, $libc_getrtable_trampoline<>(SB)

TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getrusage(SB)
GLOBL	·libc_getrusage_trampoline_addr(SB), RODATA, $4
DATA	·libc_getrusage_trampoline_addr(SB)/4, $libc_getrusage_trampoline<>(SB)

TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getsid(SB)
GLOBL	·libc_getsid_trampoline_addr(SB), RODATA, $4
DATA	·libc_getsid_trampoline_addr(SB)/4, $libc_getsid_trampoline<>(SB)

TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_gettimeofday(SB)
GLOBL	·libc_gettimeofday_trampoline_addr(SB), RODATA, $4
DATA	·libc_gettimeofday_trampoline_addr(SB)/4, $libc_gettimeofday_trampoline<>(SB)

TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getuid(SB)
GLOBL	·libc_getuid_trampoline_addr(SB), RODATA, $4
DATA	·libc_getuid_trampoline_addr(SB)/4, $libc_getuid_trampoline<>(SB)

TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_issetugid(SB)
GLOBL	·libc_issetugid_trampoline_addr(SB), RODATA, $4
DATA	·libc_issetugid_trampoline_addr(SB)/4, $libc_issetugid_trampoline<>(SB)

TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_kill(SB)
GLOBL	·libc_kill_trampoline_addr(SB), RODATA, $4
DATA	·libc_kill_trampoline_addr(SB)/4, $libc_kill_trampoline<>(SB)

TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_kqueue(SB)
GLOBL	·libc_kqueue_trampoline_addr(SB), RODATA, $4
DATA	·libc_kqueue_trampoline_addr(SB)/4, $libc_kqueue_trampoline<>(SB)

TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_lchown(SB)
GLOBL	·libc_lchown_trampoline_addr(SB), RODATA, $4
DATA	·libc_lchown_trampoline_addr(SB)/4, $libc_lchown_trampoline<>(SB)

TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_link(SB)
GLOBL	·libc_link_trampoline_addr(SB), RODATA, $4
DATA	·libc_link_trampoline_addr(SB)/4, $libc_link_trampoline<>(SB)

TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_linkat(SB)
GLOBL	·libc_linkat_trampoline_addr(SB), RODATA, $4
DATA	·libc_linkat_trampoline_addr(SB)/4, $libc_linkat_trampoline<>(SB)

TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_listen(SB)
GLOBL	·libc_listen_trampoline_addr(SB), RODATA, $4
DATA	·libc_listen_trampoline_addr(SB)/4, $libc_listen_trampoline<>(SB)

TEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_lstat(SB)
GLOBL	·libc_lstat_trampoline_addr(SB), RODATA, $4
DATA	·libc_lstat_trampoline_addr(SB)/4, $libc_lstat_trampoline<>(SB)

TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkdir(SB)
GLOBL	·libc_mkdir_trampoline_addr(SB), RODATA, $4
DATA	·libc_mkdir_trampoline_addr(SB)/4, $libc_mkdir_trampoline<>(SB)

TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkdirat(SB)
GLOBL	·libc_mkdirat_trampoline_addr(SB), RODATA, $4
DATA	·libc_mkdirat_trampoline_addr(SB)/4, $libc_mkdirat_trampoline<>(SB)

TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkfifo(SB)
GLOBL	·libc_mkfifo_trampoline_addr(SB), RODATA, $4
DATA	·libc_mkfifo_trampoline_addr(SB)/4, $libc_mkfifo_trampoline<>(SB)

TEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkfifoat(SB)
GLOBL	·libc_mkfifoat_trampoline_addr(SB), RODATA, $4
DATA	·libc_mkfifoat_trampoline_addr(SB)/4, $libc_mkfifoat_trampoline<>(SB)

TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mknod(SB)
GLOBL	·libc_mknod_trampoline_addr(SB), RODATA, $4
DATA	·libc_mknod_trampoline_addr(SB)/4, $libc_mknod_trampoline<>(SB)

TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mknodat(SB)
GLOBL	·libc_mknodat_trampoline_addr(SB), RODATA, $4
DATA	·libc_mknodat_trampoline_addr(SB)/4, $libc_mknodat_trampoline<>(SB)

TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_nanosleep(SB)
GLOBL	·libc_nanosleep_trampoline_addr(SB), RODATA, $4
DATA	·libc_nanosleep_trampoline_addr(SB)/4, $libc_nanosleep_trampoline<>(SB)

TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_open(SB)
GLOBL	·libc_open_trampoline_addr(SB), RODATA, $4
DATA	·libc_open_trampoline_addr(SB)/4, $libc_open_trampoline<>(SB)

TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_openat(SB)
GLOBL	·libc_openat_trampoline_addr(SB), RODATA, $4
DATA	·libc_openat_trampoline_addr(SB)/4, $libc_openat_trampoline<>(SB)

TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pathconf(SB)
GLOBL	·libc_pathconf_trampoline_addr(SB), RODATA, $4
DATA	·libc_pathconf_trampoline_addr(SB)/4, $libc_pathconf_trampoline<>(SB)

TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pread(SB)
GLOBL	·libc_pread_trampoline_addr(SB), RODATA, $4
DATA	·libc_pread_trampoline_addr(SB)/4, $libc_pread_trampoline<>(SB)

TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pwrite(SB)
GLOBL	·libc_pwrite_trampoline_addr(SB), RODATA, $4
DATA	·libc_pwrite_trampoline_addr(SB)/4, $libc_pwrite_trampoline<>(SB)

TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_read(SB)
GLOBL	·libc_read_trampoline_addr(SB), RODATA, $4
DATA	·libc_read_trampoline_addr(SB)/4, $libc_read_trampoline<>(SB)

TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_readlink(SB)
GLOBL	·libc_readlink_trampoline_addr(SB), RODATA, $4
DATA	·libc_readlink_trampoline_addr(SB)/4, $libc_readlink_trampoline<>(SB)

TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_readlinkat(SB)
GLOBL	·libc_readlinkat_trampoline_addr(SB), RODATA, $4
DATA	·libc_readlinkat_trampoline_addr(SB)/4, $libc_readlinkat_trampoline<>(SB)

TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_rename(SB)
GLOBL	·libc_rename_trampoline_addr(SB), RODATA, $4
DATA	·libc_rename_trampoline_addr(SB)/4, $libc_rename_trampoline<>(SB)

TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_renameat(SB)
GLOBL	·libc_renameat_trampoline_addr(SB), RODATA, $4
DATA	·libc_renameat_trampoline_addr(SB)/4, $libc_renameat_trampoline<>(SB)

TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_revoke(SB)
GLOBL	·libc_revoke_trampoline_addr(SB), RODATA, $4
DATA	·libc_revoke_trampoline_addr(SB)/4, $libc_revoke_trampoline<>(SB)

TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_rmdir(SB)
GLOBL	·libc_rmdir_trampoline_addr(SB), RODATA, $4
DATA	·libc_rmdir_trampoline_addr(SB)/4, $libc_rmdir_trampoline<>(SB)

TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_lseek(SB)
GLOBL	·libc_lseek_trampoline_addr(SB), RODATA, $4
DATA	·libc_lseek_trampoline_addr(SB)/4, $libc_lseek_trampoline<>(SB)

TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_select(SB)
GLOBL	·libc_select_trampoline_addr(SB), RODATA, $4
DATA	·libc_select_trampoline_addr(SB)/4, $libc_select_trampoline<>(SB)

TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setegid(SB)
GLOBL	·libc_setegid_trampoline_addr(SB), RODATA, $4
DATA	·libc_setegid_trampoline_addr(SB)/4, $libc_setegid_trampoline<>(SB)

TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_seteuid(SB)
GLOBL	·libc_seteuid_trampoline_addr(SB), RODATA, $4
DATA	·libc_seteuid_trampoline_addr(SB)/4, $libc_seteuid_trampoline<>(SB)

TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setgid(SB)
GLOBL	·libc_setgid_trampoline_addr(SB), RODATA, $4
DATA	·libc_setgid_trampoline_addr(SB)/4, $libc_setgid_trampoline<>(SB)

TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setlogin(SB)
GLOBL	·libc_setlogin_trampoline_addr(SB), RODATA, $4
DATA	·libc_setlogin_trampoline_addr(SB)/4, $libc_setlogin_trampoline<>(SB)

TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setpgid(SB)
GLOBL	·libc_setpgid_trampoline_addr(SB), RODATA, $4
DATA	·libc_setpgid_trampoline_addr(SB)/4, $libc_setpgid_trampoline<>(SB)

TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setpriority(SB)
GLOBL	·libc_setpriority_trampoline_addr(SB), RODATA, $4
DATA	·libc_setpriority_trampoline_addr(SB)/4, $libc_setpriority_trampoline<>(SB)

TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setregid(SB)
GLOBL	·libc_setregid_trampoline_addr(SB), RODATA, $4
DATA	·libc_setregid_trampoline_addr(SB)/4, $libc_setregid_trampoline<>(SB)

TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setreuid(SB)
GLOBL	·libc_setreuid_trampoline_addr(SB), RODATA, $4
DATA	·libc_setreuid_trampoline_addr(SB)/4, $libc_setreuid_trampoline<>(SB)

TEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setresgid(SB)
GLOBL	·libc_setresgid_trampoline_addr(SB), RODATA, $4
DATA	·libc_setresgid_trampoline_addr(SB)/4, $libc_setresgid_trampoline<>(SB)

TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setresuid(SB)
GLOBL	·libc_setresuid_trampoline_addr(SB), RODATA, $4
DATA	·libc_setresuid_trampoline_addr(SB)/4, $libc_setresuid_trampoline<>(SB)

TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setrtable(SB)
GLOBL	·libc_setrtable_trampoline_addr(SB), RODATA, $4
DATA	·libc_setrtable_trampoline_addr(SB)/4, $libc_setrtable_trampoline<>(SB)

TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setsid(SB)
GLOBL	·libc_setsid_trampoline_addr(SB), RODATA, $4
DATA	·libc_setsid_trampoline_addr(SB)/4, $libc_setsid_trampoline<>(SB)

TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_settimeofday(SB)
GLOBL	·libc_settimeofday_trampoline_addr(SB), RODATA, $4
DATA	·libc_settimeofday_trampoline_addr(SB)/4, $libc_settimeofday_trampoline<>(SB)

TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setuid(SB)
GLOBL	·libc_setuid_trampoline_addr(SB), RODATA, $4
DATA	·libc_setuid_trampoline_addr(SB)/4, $libc_setuid_trampoline<>(SB)

TEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_stat(SB)
GLOBL	·libc_stat_trampoline_addr(SB), RODATA, $4
DATA	·libc_stat_trampoline_addr(SB)/4, $libc_stat_trampoline<>(SB)

TEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_statfs(SB)
GLOBL	·libc_statfs_trampoline_addr(SB), RODATA, $4
DATA	·libc_statfs_trampoline_addr(SB)/4, $libc_statfs_trampoline<>(SB)

TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_symlink(SB)
GLOBL	·libc_symlink_trampoline_addr(SB), RODATA, $4
DATA	·libc_symlink_trampoline_addr(SB)/4, $libc_symlink_trampoline<>(SB)

TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_symlinkat(SB)
GLOBL	·libc_symlinkat_trampoline_addr(SB), RODATA, $4
DATA	·libc_symlinkat_trampoline_addr(SB)/4, $libc_symlinkat_trampoline<>(SB)

TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sync(SB)
GLOBL	·libc_sync_trampoline_addr(SB), RODATA, $4
DATA	·libc_sync_trampoline_addr(SB)/4, $libc_sync_trampoline<>(SB)

TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_truncate(SB)
GLOBL	·libc_truncate_trampoline_addr(SB), RODATA, $4
DATA	·libc_truncate_trampoline_addr(SB)/4, $libc_truncate_trampoline<>(SB)

TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_umask(SB)
GLOBL	·libc_umask_trampoline_addr(SB), RODATA, $4
DATA	·libc_umask_trampoline_addr(SB)/4, $libc_umask_trampoline<>(SB)

TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_unlink(SB)
GLOBL	·libc_unlink_trampoline_addr(SB), RODATA, $4
DATA	·libc_unlink_trampoline_addr(SB)/4, $libc_unlink_trampoline<>(SB)

TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_unlinkat(SB)
GLOBL	·libc_unlinkat_trampoline_addr(SB), RODATA, $4
DATA	·libc_unlinkat_trampoline_addr(SB)/4, $libc_unlinkat_trampoline<>(SB)

TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_unmount(SB)
GLOBL	·libc_unmount_trampoline_addr(SB), RODATA, $4
DATA	·libc_unmount_trampoline_addr(SB)/4, $libc_unmount_trampoline<>(SB)

TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_write(SB)
GLOBL	·libc_write_trampoline_addr(SB), RODATA, $4
DATA	·libc_write_trampoline_addr(SB)/4, $libc_write_trampoline<>(SB)

TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mmap(SB)
GLOBL	·libc_mmap_trampoline_addr(SB), RODATA, $4
DATA	·libc_mmap_trampoline_addr(SB)/4, $libc_mmap_trampoline<>(SB)

TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_munmap(SB)
GLOBL	·libc_munmap_trampoline_addr(SB), RODATA, $4
DATA	·libc_munmap_trampoline_addr(SB)/4, $libc_munmap_trampoline<>(SB)

TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_utimensat(SB)
GLOBL	·libc_utimensat_trampoline_addr(SB), RODATA, $4
DATA	·libc_utimensat_trampoline_addr(SB)/4, $libc_utimensat_trampoline<>(SB)
 07070100000E75000081A4000000000000000000000001645E367C0000DDDB000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go    // go run mksyscall.go -openbsd -libc -tags openbsd,arm64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_arm64.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build openbsd && arm64
// +build openbsd,arm64

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getgroups_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getgroups getgroups "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(ngid int, gid *_Gid_t) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setgroups_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setgroups setgroups "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
	r0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
	wpid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_wait4_trampoline_addr uintptr

//go:cgo_import_dynamic libc_wait4 wait4 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
	r0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_accept_trampoline_addr uintptr

//go:cgo_import_dynamic libc_accept accept "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_bind_trampoline_addr uintptr

//go:cgo_import_dynamic libc_bind bind "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_connect_trampoline_addr uintptr

//go:cgo_import_dynamic libc_connect connect "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_socket_trampoline_addr uintptr

//go:cgo_import_dynamic libc_socket socket "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getsockopt_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getsockopt getsockopt "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setsockopt_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setsockopt setsockopt "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getpeername_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpeername getpeername "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getsockname_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getsockname getsockname "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(s int, how int) (err error) {
	_, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_shutdown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_shutdown shutdown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_socketpair_trampoline_addr uintptr

//go:cgo_import_dynamic libc_socketpair socketpair "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_recvfrom_trampoline_addr uintptr

//go:cgo_import_dynamic libc_recvfrom recvfrom "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sendto_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sendto sendto "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_recvmsg_trampoline_addr uintptr

//go:cgo_import_dynamic libc_recvmsg recvmsg "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sendmsg_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sendmsg sendmsg "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
	r0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_kevent_trampoline_addr uintptr

//go:cgo_import_dynamic libc_kevent kevent "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, timeval *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_utimes_trampoline_addr uintptr

//go:cgo_import_dynamic libc_utimes utimes "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimes(fd int, timeval *[2]Timeval) (err error) {
	_, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_futimes_trampoline_addr uintptr

//go:cgo_import_dynamic libc_futimes futimes "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_poll_trampoline_addr uintptr

//go:cgo_import_dynamic libc_poll poll "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Madvise(b []byte, behav int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_madvise_trampoline_addr uintptr

//go:cgo_import_dynamic libc_madvise madvise "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mlock_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mlock mlock "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlockall(flags int) (err error) {
	_, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mlockall_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mlockall mlockall "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mprotect(b []byte, prot int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mprotect_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mprotect mprotect "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Msync(b []byte, flags int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_msync_trampoline_addr uintptr

//go:cgo_import_dynamic libc_msync msync "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_munlock_trampoline_addr uintptr

//go:cgo_import_dynamic libc_munlock munlock "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlockall() (err error) {
	_, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_munlockall_trampoline_addr uintptr

//go:cgo_import_dynamic libc_munlockall munlockall "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pipe2(p *[2]_C_int, flags int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pipe2_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pipe2 pipe2 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getdents(fd int, buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getdents_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getdents getdents "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getcwd(buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getcwd_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getcwd getcwd "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctl(fd int, req uint, arg uintptr) (err error) {
	_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {
	_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_ioctl_trampoline_addr uintptr

//go:cgo_import_dynamic libc_ioctl ioctl "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
	var _p0 unsafe.Pointer
	if len(mib) > 0 {
		_p0 = unsafe.Pointer(&mib[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sysctl_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sysctl sysctl "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
	r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_ppoll_trampoline_addr uintptr

//go:cgo_import_dynamic libc_ppoll ppoll "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Access(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_access_trampoline_addr uintptr

//go:cgo_import_dynamic libc_access access "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
	_, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_adjtime_trampoline_addr uintptr

//go:cgo_import_dynamic libc_adjtime adjtime "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chdir chdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chflags(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chflags_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chflags chflags "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chmod(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chmod_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chmod chmod "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chown chown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chroot(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chroot_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chroot chroot "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ClockGettime(clockid int32, time *Timespec) (err error) {
	_, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_clock_gettime_trampoline_addr uintptr

//go:cgo_import_dynamic libc_clock_gettime clock_gettime "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Close(fd int) (err error) {
	_, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_close_trampoline_addr uintptr

//go:cgo_import_dynamic libc_close close "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup(fd int) (nfd int, err error) {
	r0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0)
	nfd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_dup_trampoline_addr uintptr

//go:cgo_import_dynamic libc_dup dup "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup2(from int, to int) (err error) {
	_, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_dup2_trampoline_addr uintptr

//go:cgo_import_dynamic libc_dup2 dup2 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup3(from int, to int, flags int) (err error) {
	_, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_dup3_trampoline_addr uintptr

//go:cgo_import_dynamic libc_dup3 dup3 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Exit(code int) {
	syscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0)
	return
}

var libc_exit_trampoline_addr uintptr

//go:cgo_import_dynamic libc_exit exit "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_faccessat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_faccessat faccessat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchdir(fd int) (err error) {
	_, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchdir fchdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchflags(fd int, flags int) (err error) {
	_, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchflags_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchflags fchflags "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmod(fd int, mode uint32) (err error) {
	_, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchmod_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchmod fchmod "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchmodat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchown fchown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchownat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchownat fchownat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Flock(fd int, how int) (err error) {
	_, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_flock_trampoline_addr uintptr

//go:cgo_import_dynamic libc_flock flock "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fpathconf(fd int, name int) (val int, err error) {
	r0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fpathconf_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fstat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fstat fstat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fstatat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fstatat fstatat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatfs(fd int, stat *Statfs_t) (err error) {
	_, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fstatfs_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fstatfs fstatfs "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fsync(fd int) (err error) {
	_, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fsync_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fsync fsync "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_ftruncate_trampoline_addr uintptr

//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0)
	egid = int(r0)
	return
}

var libc_getegid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getegid getegid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (uid int) {
	r0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0)
	uid = int(r0)
	return
}

var libc_geteuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_geteuid geteuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0)
	gid = int(r0)
	return
}

var libc_getgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getgid getgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgid(pid int) (pgid int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0)
	pgid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getpgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpgid getpgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgrp() (pgrp int) {
	r0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0)
	pgrp = int(r0)
	return
}

var libc_getpgrp_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpid() (pid int) {
	r0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0)
	pid = int(r0)
	return
}

var libc_getpid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpid getpid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getppid() (ppid int) {
	r0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0)
	ppid = int(r0)
	return
}

var libc_getppid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getppid getppid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpriority(which int, who int) (prio int, err error) {
	r0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0)
	prio = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getpriority_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpriority getpriority "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(which int, lim *Rlimit) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getrlimit_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrtable() (rtable int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0)
	rtable = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getrtable_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getrtable getrtable "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrusage(who int, rusage *Rusage) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getrusage_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getrusage getrusage "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getsid(pid int) (sid int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0)
	sid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getsid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getsid getsid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_gettimeofday_trampoline_addr uintptr

//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0)
	uid = int(r0)
	return
}

var libc_getuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getuid getuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Issetugid() (tainted bool) {
	r0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0)
	tainted = bool(r0 != 0)
	return
}

var libc_issetugid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_issetugid issetugid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kill(pid int, signum syscall.Signal) (err error) {
	_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_kill_trampoline_addr uintptr

//go:cgo_import_dynamic libc_kill kill "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kqueue() (fd int, err error) {
	r0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_kqueue_trampoline_addr uintptr

//go:cgo_import_dynamic libc_kqueue kqueue "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_lchown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_lchown lchown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Link(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_link_trampoline_addr uintptr

//go:cgo_import_dynamic libc_link link "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_linkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_linkat linkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, backlog int) (err error) {
	_, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_listen_trampoline_addr uintptr

//go:cgo_import_dynamic libc_listen listen "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lstat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_lstat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_lstat lstat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdir(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkdir mkdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdirat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkdirat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifo(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkfifo_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkfifoat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkfifoat mkfifoat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknod(path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mknod_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mknod mknod "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mknodat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mknodat mknodat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
	_, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_nanosleep_trampoline_addr uintptr

//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Open(path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_open_trampoline_addr uintptr

//go:cgo_import_dynamic libc_open open "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_openat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_openat openat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pathconf(path string, name int) (val int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pathconf_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pathconf pathconf "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pread_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pread pread "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pwrite_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pwrite pwrite "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func read(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_read_trampoline_addr uintptr

//go:cgo_import_dynamic libc_read read "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlink(path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_readlink_trampoline_addr uintptr

//go:cgo_import_dynamic libc_readlink readlink "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_readlinkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_readlinkat readlinkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rename(from string, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_rename_trampoline_addr uintptr

//go:cgo_import_dynamic libc_rename rename "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(fromfd int, from string, tofd int, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_renameat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_renameat renameat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Revoke(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_revoke_trampoline_addr uintptr

//go:cgo_import_dynamic libc_revoke revoke "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rmdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_rmdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_rmdir rmdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
	r0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence))
	newoffset = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_lseek_trampoline_addr uintptr

//go:cgo_import_dynamic libc_lseek lseek "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_select_trampoline_addr uintptr

//go:cgo_import_dynamic libc_select select "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setegid(egid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setegid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setegid setegid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seteuid(euid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_seteuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_seteuid seteuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setgid(gid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setgid setgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setlogin(name string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(name)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setlogin_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setlogin setlogin "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpgid(pid int, pgid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setpgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setpgid setpgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpriority(which int, who int, prio int) (err error) {
	_, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setpriority_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setpriority setpriority "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setregid(rgid int, egid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setregid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setregid setregid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setreuid(ruid int, euid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setreuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setreuid setreuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setresgid(rgid int, egid int, sgid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setresgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setresgid setresgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setresuid(ruid int, euid int, suid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setresuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setresuid setresuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setrtable(rtable int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setrtable_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setrtable setrtable "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setsid() (pid int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0)
	pid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setsid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setsid setsid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Settimeofday(tp *Timeval) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_settimeofday_trampoline_addr uintptr

//go:cgo_import_dynamic libc_settimeofday settimeofday "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setuid(uid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setuid setuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Stat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_stat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_stat stat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statfs(path string, stat *Statfs_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_statfs_trampoline_addr uintptr

//go:cgo_import_dynamic libc_statfs statfs "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlink(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_symlink_trampoline_addr uintptr

//go:cgo_import_dynamic libc_symlink symlink "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_symlinkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_symlinkat symlinkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sync() (err error) {
	_, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sync_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sync sync "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_truncate_trampoline_addr uintptr

//go:cgo_import_dynamic libc_truncate truncate "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Umask(newmask int) (oldmask int) {
	r0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0)
	oldmask = int(r0)
	return
}

var libc_umask_trampoline_addr uintptr

//go:cgo_import_dynamic libc_umask umask "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlink(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_unlink_trampoline_addr uintptr

//go:cgo_import_dynamic libc_unlink unlink "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlinkat(dirfd int, path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_unlinkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unmount(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_unmount_trampoline_addr uintptr

//go:cgo_import_dynamic libc_unmount unmount "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func write(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_write_trampoline_addr uintptr

//go:cgo_import_dynamic libc_write write "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
	r0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
	ret = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mmap_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mmap mmap "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func munmap(addr uintptr, length uintptr) (err error) {
	_, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_munmap_trampoline_addr uintptr

//go:cgo_import_dynamic libc_munmap munmap "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_utimensat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_utimensat utimensat "libc.so"
 07070100000E76000081A4000000000000000000000001645E367C00006621000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s // go run mkasm.go openbsd arm64
// Code generated by the command above; DO NOT EDIT.

#include "textflag.h"

TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getgroups(SB)
GLOBL	·libc_getgroups_trampoline_addr(SB), RODATA, $8
DATA	·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB)

TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setgroups(SB)
GLOBL	·libc_setgroups_trampoline_addr(SB), RODATA, $8
DATA	·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB)

TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_wait4(SB)
GLOBL	·libc_wait4_trampoline_addr(SB), RODATA, $8
DATA	·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB)

TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_accept(SB)
GLOBL	·libc_accept_trampoline_addr(SB), RODATA, $8
DATA	·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB)

TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_bind(SB)
GLOBL	·libc_bind_trampoline_addr(SB), RODATA, $8
DATA	·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB)

TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_connect(SB)
GLOBL	·libc_connect_trampoline_addr(SB), RODATA, $8
DATA	·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB)

TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_socket(SB)
GLOBL	·libc_socket_trampoline_addr(SB), RODATA, $8
DATA	·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB)

TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getsockopt(SB)
GLOBL	·libc_getsockopt_trampoline_addr(SB), RODATA, $8
DATA	·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB)

TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setsockopt(SB)
GLOBL	·libc_setsockopt_trampoline_addr(SB), RODATA, $8
DATA	·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB)

TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpeername(SB)
GLOBL	·libc_getpeername_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB)

TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getsockname(SB)
GLOBL	·libc_getsockname_trampoline_addr(SB), RODATA, $8
DATA	·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB)

TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_shutdown(SB)
GLOBL	·libc_shutdown_trampoline_addr(SB), RODATA, $8
DATA	·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB)

TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_socketpair(SB)
GLOBL	·libc_socketpair_trampoline_addr(SB), RODATA, $8
DATA	·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB)

TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_recvfrom(SB)
GLOBL	·libc_recvfrom_trampoline_addr(SB), RODATA, $8
DATA	·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB)

TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sendto(SB)
GLOBL	·libc_sendto_trampoline_addr(SB), RODATA, $8
DATA	·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB)

TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_recvmsg(SB)
GLOBL	·libc_recvmsg_trampoline_addr(SB), RODATA, $8
DATA	·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB)

TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sendmsg(SB)
GLOBL	·libc_sendmsg_trampoline_addr(SB), RODATA, $8
DATA	·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB)

TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_kevent(SB)
GLOBL	·libc_kevent_trampoline_addr(SB), RODATA, $8
DATA	·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB)

TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_utimes(SB)
GLOBL	·libc_utimes_trampoline_addr(SB), RODATA, $8
DATA	·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB)

TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_futimes(SB)
GLOBL	·libc_futimes_trampoline_addr(SB), RODATA, $8
DATA	·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB)

TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_poll(SB)
GLOBL	·libc_poll_trampoline_addr(SB), RODATA, $8
DATA	·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB)

TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_madvise(SB)
GLOBL	·libc_madvise_trampoline_addr(SB), RODATA, $8
DATA	·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB)

TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mlock(SB)
GLOBL	·libc_mlock_trampoline_addr(SB), RODATA, $8
DATA	·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB)

TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mlockall(SB)
GLOBL	·libc_mlockall_trampoline_addr(SB), RODATA, $8
DATA	·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB)

TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mprotect(SB)
GLOBL	·libc_mprotect_trampoline_addr(SB), RODATA, $8
DATA	·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB)

TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_msync(SB)
GLOBL	·libc_msync_trampoline_addr(SB), RODATA, $8
DATA	·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB)

TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_munlock(SB)
GLOBL	·libc_munlock_trampoline_addr(SB), RODATA, $8
DATA	·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB)

TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_munlockall(SB)
GLOBL	·libc_munlockall_trampoline_addr(SB), RODATA, $8
DATA	·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB)

TEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pipe2(SB)
GLOBL	·libc_pipe2_trampoline_addr(SB), RODATA, $8
DATA	·libc_pipe2_trampoline_addr(SB)/8, $libc_pipe2_trampoline<>(SB)

TEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getdents(SB)
GLOBL	·libc_getdents_trampoline_addr(SB), RODATA, $8
DATA	·libc_getdents_trampoline_addr(SB)/8, $libc_getdents_trampoline<>(SB)

TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getcwd(SB)
GLOBL	·libc_getcwd_trampoline_addr(SB), RODATA, $8
DATA	·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB)

TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_ioctl(SB)
GLOBL	·libc_ioctl_trampoline_addr(SB), RODATA, $8
DATA	·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB)

TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sysctl(SB)
GLOBL	·libc_sysctl_trampoline_addr(SB), RODATA, $8
DATA	·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)

TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_ppoll(SB)
GLOBL	·libc_ppoll_trampoline_addr(SB), RODATA, $8
DATA	·libc_ppoll_trampoline_addr(SB)/8, $libc_ppoll_trampoline<>(SB)

TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_access(SB)
GLOBL	·libc_access_trampoline_addr(SB), RODATA, $8
DATA	·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB)

TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_adjtime(SB)
GLOBL	·libc_adjtime_trampoline_addr(SB), RODATA, $8
DATA	·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB)

TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chdir(SB)
GLOBL	·libc_chdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB)

TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chflags(SB)
GLOBL	·libc_chflags_trampoline_addr(SB), RODATA, $8
DATA	·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB)

TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chmod(SB)
GLOBL	·libc_chmod_trampoline_addr(SB), RODATA, $8
DATA	·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB)

TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chown(SB)
GLOBL	·libc_chown_trampoline_addr(SB), RODATA, $8
DATA	·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB)

TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chroot(SB)
GLOBL	·libc_chroot_trampoline_addr(SB), RODATA, $8
DATA	·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB)

TEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_clock_gettime(SB)
GLOBL	·libc_clock_gettime_trampoline_addr(SB), RODATA, $8
DATA	·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB)

TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_close(SB)
GLOBL	·libc_close_trampoline_addr(SB), RODATA, $8
DATA	·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB)

TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_dup(SB)
GLOBL	·libc_dup_trampoline_addr(SB), RODATA, $8
DATA	·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB)

TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_dup2(SB)
GLOBL	·libc_dup2_trampoline_addr(SB), RODATA, $8
DATA	·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB)

TEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_dup3(SB)
GLOBL	·libc_dup3_trampoline_addr(SB), RODATA, $8
DATA	·libc_dup3_trampoline_addr(SB)/8, $libc_dup3_trampoline<>(SB)

TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_exit(SB)
GLOBL	·libc_exit_trampoline_addr(SB), RODATA, $8
DATA	·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB)

TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_faccessat(SB)
GLOBL	·libc_faccessat_trampoline_addr(SB), RODATA, $8
DATA	·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB)

TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchdir(SB)
GLOBL	·libc_fchdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB)

TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchflags(SB)
GLOBL	·libc_fchflags_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB)

TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchmod(SB)
GLOBL	·libc_fchmod_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB)

TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchmodat(SB)
GLOBL	·libc_fchmodat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB)

TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchown(SB)
GLOBL	·libc_fchown_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB)

TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchownat(SB)
GLOBL	·libc_fchownat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB)

TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_flock(SB)
GLOBL	·libc_flock_trampoline_addr(SB), RODATA, $8
DATA	·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB)

TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fpathconf(SB)
GLOBL	·libc_fpathconf_trampoline_addr(SB), RODATA, $8
DATA	·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB)

TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fstat(SB)
GLOBL	·libc_fstat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB)

TEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fstatat(SB)
GLOBL	·libc_fstatat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB)

TEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fstatfs(SB)
GLOBL	·libc_fstatfs_trampoline_addr(SB), RODATA, $8
DATA	·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB)

TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fsync(SB)
GLOBL	·libc_fsync_trampoline_addr(SB), RODATA, $8
DATA	·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB)

TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_ftruncate(SB)
GLOBL	·libc_ftruncate_trampoline_addr(SB), RODATA, $8
DATA	·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB)

TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getegid(SB)
GLOBL	·libc_getegid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB)

TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_geteuid(SB)
GLOBL	·libc_geteuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB)

TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getgid(SB)
GLOBL	·libc_getgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB)

TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpgid(SB)
GLOBL	·libc_getpgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB)

TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpgrp(SB)
GLOBL	·libc_getpgrp_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB)

TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpid(SB)
GLOBL	·libc_getpid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB)

TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getppid(SB)
GLOBL	·libc_getppid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB)

TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpriority(SB)
GLOBL	·libc_getpriority_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB)

TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getrlimit(SB)
GLOBL	·libc_getrlimit_trampoline_addr(SB), RODATA, $8
DATA	·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB)

TEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getrtable(SB)
GLOBL	·libc_getrtable_trampoline_addr(SB), RODATA, $8
DATA	·libc_getrtable_trampoline_addr(SB)/8, $libc_getrtable_trampoline<>(SB)

TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getrusage(SB)
GLOBL	·libc_getrusage_trampoline_addr(SB), RODATA, $8
DATA	·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB)

TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getsid(SB)
GLOBL	·libc_getsid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB)

TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_gettimeofday(SB)
GLOBL	·libc_gettimeofday_trampoline_addr(SB), RODATA, $8
DATA	·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB)

TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getuid(SB)
GLOBL	·libc_getuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB)

TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_issetugid(SB)
GLOBL	·libc_issetugid_trampoline_addr(SB), RODATA, $8
DATA	·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB)

TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_kill(SB)
GLOBL	·libc_kill_trampoline_addr(SB), RODATA, $8
DATA	·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB)

TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_kqueue(SB)
GLOBL	·libc_kqueue_trampoline_addr(SB), RODATA, $8
DATA	·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB)

TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_lchown(SB)
GLOBL	·libc_lchown_trampoline_addr(SB), RODATA, $8
DATA	·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB)

TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_link(SB)
GLOBL	·libc_link_trampoline_addr(SB), RODATA, $8
DATA	·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB)

TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_linkat(SB)
GLOBL	·libc_linkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB)

TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_listen(SB)
GLOBL	·libc_listen_trampoline_addr(SB), RODATA, $8
DATA	·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB)

TEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_lstat(SB)
GLOBL	·libc_lstat_trampoline_addr(SB), RODATA, $8
DATA	·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB)

TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkdir(SB)
GLOBL	·libc_mkdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB)

TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkdirat(SB)
GLOBL	·libc_mkdirat_trampoline_addr(SB), RODATA, $8
DATA	·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB)

TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkfifo(SB)
GLOBL	·libc_mkfifo_trampoline_addr(SB), RODATA, $8
DATA	·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB)

TEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkfifoat(SB)
GLOBL	·libc_mkfifoat_trampoline_addr(SB), RODATA, $8
DATA	·libc_mkfifoat_trampoline_addr(SB)/8, $libc_mkfifoat_trampoline<>(SB)

TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mknod(SB)
GLOBL	·libc_mknod_trampoline_addr(SB), RODATA, $8
DATA	·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB)

TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mknodat(SB)
GLOBL	·libc_mknodat_trampoline_addr(SB), RODATA, $8
DATA	·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB)

TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_nanosleep(SB)
GLOBL	·libc_nanosleep_trampoline_addr(SB), RODATA, $8
DATA	·libc_nanosleep_trampoline_addr(SB)/8, $libc_nanosleep_trampoline<>(SB)

TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_open(SB)
GLOBL	·libc_open_trampoline_addr(SB), RODATA, $8
DATA	·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB)

TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_openat(SB)
GLOBL	·libc_openat_trampoline_addr(SB), RODATA, $8
DATA	·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB)

TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pathconf(SB)
GLOBL	·libc_pathconf_trampoline_addr(SB), RODATA, $8
DATA	·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB)

TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pread(SB)
GLOBL	·libc_pread_trampoline_addr(SB), RODATA, $8
DATA	·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB)

TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pwrite(SB)
GLOBL	·libc_pwrite_trampoline_addr(SB), RODATA, $8
DATA	·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)

TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_read(SB)
GLOBL	·libc_read_trampoline_addr(SB), RODATA, $8
DATA	·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB)

TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_readlink(SB)
GLOBL	·libc_readlink_trampoline_addr(SB), RODATA, $8
DATA	·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB)

TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_readlinkat(SB)
GLOBL	·libc_readlinkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB)

TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_rename(SB)
GLOBL	·libc_rename_trampoline_addr(SB), RODATA, $8
DATA	·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB)

TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_renameat(SB)
GLOBL	·libc_renameat_trampoline_addr(SB), RODATA, $8
DATA	·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB)

TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_revoke(SB)
GLOBL	·libc_revoke_trampoline_addr(SB), RODATA, $8
DATA	·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB)

TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_rmdir(SB)
GLOBL	·libc_rmdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB)

TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_lseek(SB)
GLOBL	·libc_lseek_trampoline_addr(SB), RODATA, $8
DATA	·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB)

TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_select(SB)
GLOBL	·libc_select_trampoline_addr(SB), RODATA, $8
DATA	·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB)

TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setegid(SB)
GLOBL	·libc_setegid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB)

TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_seteuid(SB)
GLOBL	·libc_seteuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB)

TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setgid(SB)
GLOBL	·libc_setgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB)

TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setlogin(SB)
GLOBL	·libc_setlogin_trampoline_addr(SB), RODATA, $8
DATA	·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB)

TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setpgid(SB)
GLOBL	·libc_setpgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB)

TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setpriority(SB)
GLOBL	·libc_setpriority_trampoline_addr(SB), RODATA, $8
DATA	·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB)

TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setregid(SB)
GLOBL	·libc_setregid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB)

TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setreuid(SB)
GLOBL	·libc_setreuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB)

TEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setresgid(SB)
GLOBL	·libc_setresgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setresgid_trampoline_addr(SB)/8, $libc_setresgid_trampoline<>(SB)

TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setresuid(SB)
GLOBL	·libc_setresuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB)

TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setrtable(SB)
GLOBL	·libc_setrtable_trampoline_addr(SB), RODATA, $8
DATA	·libc_setrtable_trampoline_addr(SB)/8, $libc_setrtable_trampoline<>(SB)

TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setsid(SB)
GLOBL	·libc_setsid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB)

TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_settimeofday(SB)
GLOBL	·libc_settimeofday_trampoline_addr(SB), RODATA, $8
DATA	·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB)

TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setuid(SB)
GLOBL	·libc_setuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB)

TEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_stat(SB)
GLOBL	·libc_stat_trampoline_addr(SB), RODATA, $8
DATA	·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB)

TEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_statfs(SB)
GLOBL	·libc_statfs_trampoline_addr(SB), RODATA, $8
DATA	·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB)

TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_symlink(SB)
GLOBL	·libc_symlink_trampoline_addr(SB), RODATA, $8
DATA	·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB)

TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_symlinkat(SB)
GLOBL	·libc_symlinkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB)

TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sync(SB)
GLOBL	·libc_sync_trampoline_addr(SB), RODATA, $8
DATA	·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB)

TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_truncate(SB)
GLOBL	·libc_truncate_trampoline_addr(SB), RODATA, $8
DATA	·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB)

TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_umask(SB)
GLOBL	·libc_umask_trampoline_addr(SB), RODATA, $8
DATA	·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB)

TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_unlink(SB)
GLOBL	·libc_unlink_trampoline_addr(SB), RODATA, $8
DATA	·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB)

TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_unlinkat(SB)
GLOBL	·libc_unlinkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB)

TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_unmount(SB)
GLOBL	·libc_unmount_trampoline_addr(SB), RODATA, $8
DATA	·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB)

TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_write(SB)
GLOBL	·libc_write_trampoline_addr(SB), RODATA, $8
DATA	·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB)

TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mmap(SB)
GLOBL	·libc_mmap_trampoline_addr(SB), RODATA, $8
DATA	·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB)

TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_munmap(SB)
GLOBL	·libc_munmap_trampoline_addr(SB), RODATA, $8
DATA	·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB)

TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_utimensat(SB)
GLOBL	·libc_utimensat_trampoline_addr(SB), RODATA, $8
DATA	·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB)
   07070100000E77000081A4000000000000000000000001645E367C0000DDDF000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go   // go run mksyscall.go -openbsd -libc -tags openbsd,mips64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_mips64.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build openbsd && mips64
// +build openbsd,mips64

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getgroups_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getgroups getgroups "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(ngid int, gid *_Gid_t) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setgroups_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setgroups setgroups "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
	r0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
	wpid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_wait4_trampoline_addr uintptr

//go:cgo_import_dynamic libc_wait4 wait4 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
	r0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_accept_trampoline_addr uintptr

//go:cgo_import_dynamic libc_accept accept "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_bind_trampoline_addr uintptr

//go:cgo_import_dynamic libc_bind bind "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_connect_trampoline_addr uintptr

//go:cgo_import_dynamic libc_connect connect "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_socket_trampoline_addr uintptr

//go:cgo_import_dynamic libc_socket socket "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getsockopt_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getsockopt getsockopt "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setsockopt_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setsockopt setsockopt "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getpeername_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpeername getpeername "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getsockname_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getsockname getsockname "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(s int, how int) (err error) {
	_, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_shutdown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_shutdown shutdown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_socketpair_trampoline_addr uintptr

//go:cgo_import_dynamic libc_socketpair socketpair "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_recvfrom_trampoline_addr uintptr

//go:cgo_import_dynamic libc_recvfrom recvfrom "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sendto_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sendto sendto "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_recvmsg_trampoline_addr uintptr

//go:cgo_import_dynamic libc_recvmsg recvmsg "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sendmsg_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sendmsg sendmsg "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
	r0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_kevent_trampoline_addr uintptr

//go:cgo_import_dynamic libc_kevent kevent "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, timeval *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_utimes_trampoline_addr uintptr

//go:cgo_import_dynamic libc_utimes utimes "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimes(fd int, timeval *[2]Timeval) (err error) {
	_, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_futimes_trampoline_addr uintptr

//go:cgo_import_dynamic libc_futimes futimes "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_poll_trampoline_addr uintptr

//go:cgo_import_dynamic libc_poll poll "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Madvise(b []byte, behav int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_madvise_trampoline_addr uintptr

//go:cgo_import_dynamic libc_madvise madvise "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mlock_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mlock mlock "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlockall(flags int) (err error) {
	_, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mlockall_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mlockall mlockall "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mprotect(b []byte, prot int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mprotect_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mprotect mprotect "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Msync(b []byte, flags int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_msync_trampoline_addr uintptr

//go:cgo_import_dynamic libc_msync msync "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_munlock_trampoline_addr uintptr

//go:cgo_import_dynamic libc_munlock munlock "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlockall() (err error) {
	_, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_munlockall_trampoline_addr uintptr

//go:cgo_import_dynamic libc_munlockall munlockall "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pipe2(p *[2]_C_int, flags int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pipe2_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pipe2 pipe2 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getdents(fd int, buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getdents_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getdents getdents "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getcwd(buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getcwd_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getcwd getcwd "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctl(fd int, req uint, arg uintptr) (err error) {
	_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {
	_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_ioctl_trampoline_addr uintptr

//go:cgo_import_dynamic libc_ioctl ioctl "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
	var _p0 unsafe.Pointer
	if len(mib) > 0 {
		_p0 = unsafe.Pointer(&mib[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sysctl_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sysctl sysctl "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
	r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_ppoll_trampoline_addr uintptr

//go:cgo_import_dynamic libc_ppoll ppoll "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Access(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_access_trampoline_addr uintptr

//go:cgo_import_dynamic libc_access access "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
	_, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_adjtime_trampoline_addr uintptr

//go:cgo_import_dynamic libc_adjtime adjtime "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chdir chdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chflags(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chflags_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chflags chflags "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chmod(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chmod_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chmod chmod "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chown chown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chroot(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chroot_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chroot chroot "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ClockGettime(clockid int32, time *Timespec) (err error) {
	_, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_clock_gettime_trampoline_addr uintptr

//go:cgo_import_dynamic libc_clock_gettime clock_gettime "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Close(fd int) (err error) {
	_, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_close_trampoline_addr uintptr

//go:cgo_import_dynamic libc_close close "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup(fd int) (nfd int, err error) {
	r0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0)
	nfd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_dup_trampoline_addr uintptr

//go:cgo_import_dynamic libc_dup dup "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup2(from int, to int) (err error) {
	_, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_dup2_trampoline_addr uintptr

//go:cgo_import_dynamic libc_dup2 dup2 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup3(from int, to int, flags int) (err error) {
	_, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_dup3_trampoline_addr uintptr

//go:cgo_import_dynamic libc_dup3 dup3 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Exit(code int) {
	syscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0)
	return
}

var libc_exit_trampoline_addr uintptr

//go:cgo_import_dynamic libc_exit exit "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_faccessat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_faccessat faccessat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchdir(fd int) (err error) {
	_, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchdir fchdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchflags(fd int, flags int) (err error) {
	_, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchflags_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchflags fchflags "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmod(fd int, mode uint32) (err error) {
	_, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchmod_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchmod fchmod "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchmodat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchown fchown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchownat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchownat fchownat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Flock(fd int, how int) (err error) {
	_, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_flock_trampoline_addr uintptr

//go:cgo_import_dynamic libc_flock flock "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fpathconf(fd int, name int) (val int, err error) {
	r0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fpathconf_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fstat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fstat fstat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fstatat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fstatat fstatat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatfs(fd int, stat *Statfs_t) (err error) {
	_, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fstatfs_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fstatfs fstatfs "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fsync(fd int) (err error) {
	_, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fsync_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fsync fsync "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_ftruncate_trampoline_addr uintptr

//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0)
	egid = int(r0)
	return
}

var libc_getegid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getegid getegid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (uid int) {
	r0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0)
	uid = int(r0)
	return
}

var libc_geteuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_geteuid geteuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0)
	gid = int(r0)
	return
}

var libc_getgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getgid getgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgid(pid int) (pgid int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0)
	pgid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getpgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpgid getpgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgrp() (pgrp int) {
	r0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0)
	pgrp = int(r0)
	return
}

var libc_getpgrp_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpid() (pid int) {
	r0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0)
	pid = int(r0)
	return
}

var libc_getpid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpid getpid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getppid() (ppid int) {
	r0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0)
	ppid = int(r0)
	return
}

var libc_getppid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getppid getppid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpriority(which int, who int) (prio int, err error) {
	r0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0)
	prio = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getpriority_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpriority getpriority "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(which int, lim *Rlimit) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getrlimit_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrtable() (rtable int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0)
	rtable = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getrtable_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getrtable getrtable "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrusage(who int, rusage *Rusage) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getrusage_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getrusage getrusage "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getsid(pid int) (sid int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0)
	sid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getsid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getsid getsid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_gettimeofday_trampoline_addr uintptr

//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0)
	uid = int(r0)
	return
}

var libc_getuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getuid getuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Issetugid() (tainted bool) {
	r0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0)
	tainted = bool(r0 != 0)
	return
}

var libc_issetugid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_issetugid issetugid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kill(pid int, signum syscall.Signal) (err error) {
	_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_kill_trampoline_addr uintptr

//go:cgo_import_dynamic libc_kill kill "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kqueue() (fd int, err error) {
	r0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_kqueue_trampoline_addr uintptr

//go:cgo_import_dynamic libc_kqueue kqueue "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_lchown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_lchown lchown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Link(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_link_trampoline_addr uintptr

//go:cgo_import_dynamic libc_link link "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_linkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_linkat linkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, backlog int) (err error) {
	_, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_listen_trampoline_addr uintptr

//go:cgo_import_dynamic libc_listen listen "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lstat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_lstat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_lstat lstat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdir(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkdir mkdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdirat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkdirat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifo(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkfifo_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkfifoat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkfifoat mkfifoat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknod(path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mknod_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mknod mknod "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mknodat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mknodat mknodat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
	_, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_nanosleep_trampoline_addr uintptr

//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Open(path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_open_trampoline_addr uintptr

//go:cgo_import_dynamic libc_open open "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_openat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_openat openat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pathconf(path string, name int) (val int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pathconf_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pathconf pathconf "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pread_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pread pread "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pwrite_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pwrite pwrite "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func read(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_read_trampoline_addr uintptr

//go:cgo_import_dynamic libc_read read "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlink(path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_readlink_trampoline_addr uintptr

//go:cgo_import_dynamic libc_readlink readlink "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_readlinkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_readlinkat readlinkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rename(from string, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_rename_trampoline_addr uintptr

//go:cgo_import_dynamic libc_rename rename "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(fromfd int, from string, tofd int, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_renameat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_renameat renameat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Revoke(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_revoke_trampoline_addr uintptr

//go:cgo_import_dynamic libc_revoke revoke "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rmdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_rmdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_rmdir rmdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
	r0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence))
	newoffset = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_lseek_trampoline_addr uintptr

//go:cgo_import_dynamic libc_lseek lseek "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_select_trampoline_addr uintptr

//go:cgo_import_dynamic libc_select select "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setegid(egid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setegid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setegid setegid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seteuid(euid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_seteuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_seteuid seteuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setgid(gid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setgid setgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setlogin(name string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(name)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setlogin_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setlogin setlogin "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpgid(pid int, pgid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setpgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setpgid setpgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpriority(which int, who int, prio int) (err error) {
	_, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setpriority_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setpriority setpriority "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setregid(rgid int, egid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setregid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setregid setregid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setreuid(ruid int, euid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setreuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setreuid setreuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setresgid(rgid int, egid int, sgid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setresgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setresgid setresgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setresuid(ruid int, euid int, suid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setresuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setresuid setresuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setrtable(rtable int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setrtable_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setrtable setrtable "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setsid() (pid int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0)
	pid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setsid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setsid setsid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Settimeofday(tp *Timeval) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_settimeofday_trampoline_addr uintptr

//go:cgo_import_dynamic libc_settimeofday settimeofday "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setuid(uid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setuid setuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Stat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_stat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_stat stat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statfs(path string, stat *Statfs_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_statfs_trampoline_addr uintptr

//go:cgo_import_dynamic libc_statfs statfs "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlink(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_symlink_trampoline_addr uintptr

//go:cgo_import_dynamic libc_symlink symlink "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_symlinkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_symlinkat symlinkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sync() (err error) {
	_, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sync_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sync sync "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_truncate_trampoline_addr uintptr

//go:cgo_import_dynamic libc_truncate truncate "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Umask(newmask int) (oldmask int) {
	r0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0)
	oldmask = int(r0)
	return
}

var libc_umask_trampoline_addr uintptr

//go:cgo_import_dynamic libc_umask umask "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlink(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_unlink_trampoline_addr uintptr

//go:cgo_import_dynamic libc_unlink unlink "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlinkat(dirfd int, path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_unlinkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unmount(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_unmount_trampoline_addr uintptr

//go:cgo_import_dynamic libc_unmount unmount "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func write(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_write_trampoline_addr uintptr

//go:cgo_import_dynamic libc_write write "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
	r0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
	ret = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mmap_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mmap mmap "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func munmap(addr uintptr, length uintptr) (err error) {
	_, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_munmap_trampoline_addr uintptr

//go:cgo_import_dynamic libc_munmap munmap "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_utimensat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_utimensat utimensat "libc.so"
 07070100000E78000081A4000000000000000000000001645E367C00006622000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s    // go run mkasm.go openbsd mips64
// Code generated by the command above; DO NOT EDIT.

#include "textflag.h"

TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getgroups(SB)
GLOBL	·libc_getgroups_trampoline_addr(SB), RODATA, $8
DATA	·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB)

TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setgroups(SB)
GLOBL	·libc_setgroups_trampoline_addr(SB), RODATA, $8
DATA	·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB)

TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_wait4(SB)
GLOBL	·libc_wait4_trampoline_addr(SB), RODATA, $8
DATA	·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB)

TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_accept(SB)
GLOBL	·libc_accept_trampoline_addr(SB), RODATA, $8
DATA	·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB)

TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_bind(SB)
GLOBL	·libc_bind_trampoline_addr(SB), RODATA, $8
DATA	·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB)

TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_connect(SB)
GLOBL	·libc_connect_trampoline_addr(SB), RODATA, $8
DATA	·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB)

TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_socket(SB)
GLOBL	·libc_socket_trampoline_addr(SB), RODATA, $8
DATA	·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB)

TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getsockopt(SB)
GLOBL	·libc_getsockopt_trampoline_addr(SB), RODATA, $8
DATA	·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB)

TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setsockopt(SB)
GLOBL	·libc_setsockopt_trampoline_addr(SB), RODATA, $8
DATA	·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB)

TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpeername(SB)
GLOBL	·libc_getpeername_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB)

TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getsockname(SB)
GLOBL	·libc_getsockname_trampoline_addr(SB), RODATA, $8
DATA	·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB)

TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_shutdown(SB)
GLOBL	·libc_shutdown_trampoline_addr(SB), RODATA, $8
DATA	·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB)

TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_socketpair(SB)
GLOBL	·libc_socketpair_trampoline_addr(SB), RODATA, $8
DATA	·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB)

TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_recvfrom(SB)
GLOBL	·libc_recvfrom_trampoline_addr(SB), RODATA, $8
DATA	·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB)

TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sendto(SB)
GLOBL	·libc_sendto_trampoline_addr(SB), RODATA, $8
DATA	·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB)

TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_recvmsg(SB)
GLOBL	·libc_recvmsg_trampoline_addr(SB), RODATA, $8
DATA	·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB)

TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sendmsg(SB)
GLOBL	·libc_sendmsg_trampoline_addr(SB), RODATA, $8
DATA	·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB)

TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_kevent(SB)
GLOBL	·libc_kevent_trampoline_addr(SB), RODATA, $8
DATA	·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB)

TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_utimes(SB)
GLOBL	·libc_utimes_trampoline_addr(SB), RODATA, $8
DATA	·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB)

TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_futimes(SB)
GLOBL	·libc_futimes_trampoline_addr(SB), RODATA, $8
DATA	·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB)

TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_poll(SB)
GLOBL	·libc_poll_trampoline_addr(SB), RODATA, $8
DATA	·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB)

TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_madvise(SB)
GLOBL	·libc_madvise_trampoline_addr(SB), RODATA, $8
DATA	·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB)

TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mlock(SB)
GLOBL	·libc_mlock_trampoline_addr(SB), RODATA, $8
DATA	·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB)

TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mlockall(SB)
GLOBL	·libc_mlockall_trampoline_addr(SB), RODATA, $8
DATA	·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB)

TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mprotect(SB)
GLOBL	·libc_mprotect_trampoline_addr(SB), RODATA, $8
DATA	·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB)

TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_msync(SB)
GLOBL	·libc_msync_trampoline_addr(SB), RODATA, $8
DATA	·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB)

TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_munlock(SB)
GLOBL	·libc_munlock_trampoline_addr(SB), RODATA, $8
DATA	·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB)

TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_munlockall(SB)
GLOBL	·libc_munlockall_trampoline_addr(SB), RODATA, $8
DATA	·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB)

TEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pipe2(SB)
GLOBL	·libc_pipe2_trampoline_addr(SB), RODATA, $8
DATA	·libc_pipe2_trampoline_addr(SB)/8, $libc_pipe2_trampoline<>(SB)

TEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getdents(SB)
GLOBL	·libc_getdents_trampoline_addr(SB), RODATA, $8
DATA	·libc_getdents_trampoline_addr(SB)/8, $libc_getdents_trampoline<>(SB)

TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getcwd(SB)
GLOBL	·libc_getcwd_trampoline_addr(SB), RODATA, $8
DATA	·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB)

TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_ioctl(SB)
GLOBL	·libc_ioctl_trampoline_addr(SB), RODATA, $8
DATA	·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB)

TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sysctl(SB)
GLOBL	·libc_sysctl_trampoline_addr(SB), RODATA, $8
DATA	·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)

TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_ppoll(SB)
GLOBL	·libc_ppoll_trampoline_addr(SB), RODATA, $8
DATA	·libc_ppoll_trampoline_addr(SB)/8, $libc_ppoll_trampoline<>(SB)

TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_access(SB)
GLOBL	·libc_access_trampoline_addr(SB), RODATA, $8
DATA	·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB)

TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_adjtime(SB)
GLOBL	·libc_adjtime_trampoline_addr(SB), RODATA, $8
DATA	·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB)

TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chdir(SB)
GLOBL	·libc_chdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB)

TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chflags(SB)
GLOBL	·libc_chflags_trampoline_addr(SB), RODATA, $8
DATA	·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB)

TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chmod(SB)
GLOBL	·libc_chmod_trampoline_addr(SB), RODATA, $8
DATA	·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB)

TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chown(SB)
GLOBL	·libc_chown_trampoline_addr(SB), RODATA, $8
DATA	·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB)

TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chroot(SB)
GLOBL	·libc_chroot_trampoline_addr(SB), RODATA, $8
DATA	·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB)

TEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_clock_gettime(SB)
GLOBL	·libc_clock_gettime_trampoline_addr(SB), RODATA, $8
DATA	·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB)

TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_close(SB)
GLOBL	·libc_close_trampoline_addr(SB), RODATA, $8
DATA	·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB)

TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_dup(SB)
GLOBL	·libc_dup_trampoline_addr(SB), RODATA, $8
DATA	·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB)

TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_dup2(SB)
GLOBL	·libc_dup2_trampoline_addr(SB), RODATA, $8
DATA	·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB)

TEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_dup3(SB)
GLOBL	·libc_dup3_trampoline_addr(SB), RODATA, $8
DATA	·libc_dup3_trampoline_addr(SB)/8, $libc_dup3_trampoline<>(SB)

TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_exit(SB)
GLOBL	·libc_exit_trampoline_addr(SB), RODATA, $8
DATA	·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB)

TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_faccessat(SB)
GLOBL	·libc_faccessat_trampoline_addr(SB), RODATA, $8
DATA	·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB)

TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchdir(SB)
GLOBL	·libc_fchdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB)

TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchflags(SB)
GLOBL	·libc_fchflags_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB)

TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchmod(SB)
GLOBL	·libc_fchmod_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB)

TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchmodat(SB)
GLOBL	·libc_fchmodat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB)

TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchown(SB)
GLOBL	·libc_fchown_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB)

TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchownat(SB)
GLOBL	·libc_fchownat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB)

TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_flock(SB)
GLOBL	·libc_flock_trampoline_addr(SB), RODATA, $8
DATA	·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB)

TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fpathconf(SB)
GLOBL	·libc_fpathconf_trampoline_addr(SB), RODATA, $8
DATA	·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB)

TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fstat(SB)
GLOBL	·libc_fstat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB)

TEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fstatat(SB)
GLOBL	·libc_fstatat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB)

TEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fstatfs(SB)
GLOBL	·libc_fstatfs_trampoline_addr(SB), RODATA, $8
DATA	·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB)

TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fsync(SB)
GLOBL	·libc_fsync_trampoline_addr(SB), RODATA, $8
DATA	·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB)

TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_ftruncate(SB)
GLOBL	·libc_ftruncate_trampoline_addr(SB), RODATA, $8
DATA	·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB)

TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getegid(SB)
GLOBL	·libc_getegid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB)

TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_geteuid(SB)
GLOBL	·libc_geteuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB)

TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getgid(SB)
GLOBL	·libc_getgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB)

TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpgid(SB)
GLOBL	·libc_getpgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB)

TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpgrp(SB)
GLOBL	·libc_getpgrp_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB)

TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpid(SB)
GLOBL	·libc_getpid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB)

TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getppid(SB)
GLOBL	·libc_getppid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB)

TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpriority(SB)
GLOBL	·libc_getpriority_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB)

TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getrlimit(SB)
GLOBL	·libc_getrlimit_trampoline_addr(SB), RODATA, $8
DATA	·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB)

TEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getrtable(SB)
GLOBL	·libc_getrtable_trampoline_addr(SB), RODATA, $8
DATA	·libc_getrtable_trampoline_addr(SB)/8, $libc_getrtable_trampoline<>(SB)

TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getrusage(SB)
GLOBL	·libc_getrusage_trampoline_addr(SB), RODATA, $8
DATA	·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB)

TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getsid(SB)
GLOBL	·libc_getsid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB)

TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_gettimeofday(SB)
GLOBL	·libc_gettimeofday_trampoline_addr(SB), RODATA, $8
DATA	·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB)

TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getuid(SB)
GLOBL	·libc_getuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB)

TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_issetugid(SB)
GLOBL	·libc_issetugid_trampoline_addr(SB), RODATA, $8
DATA	·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB)

TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_kill(SB)
GLOBL	·libc_kill_trampoline_addr(SB), RODATA, $8
DATA	·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB)

TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_kqueue(SB)
GLOBL	·libc_kqueue_trampoline_addr(SB), RODATA, $8
DATA	·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB)

TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_lchown(SB)
GLOBL	·libc_lchown_trampoline_addr(SB), RODATA, $8
DATA	·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB)

TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_link(SB)
GLOBL	·libc_link_trampoline_addr(SB), RODATA, $8
DATA	·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB)

TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_linkat(SB)
GLOBL	·libc_linkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB)

TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_listen(SB)
GLOBL	·libc_listen_trampoline_addr(SB), RODATA, $8
DATA	·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB)

TEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_lstat(SB)
GLOBL	·libc_lstat_trampoline_addr(SB), RODATA, $8
DATA	·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB)

TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkdir(SB)
GLOBL	·libc_mkdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB)

TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkdirat(SB)
GLOBL	·libc_mkdirat_trampoline_addr(SB), RODATA, $8
DATA	·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB)

TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkfifo(SB)
GLOBL	·libc_mkfifo_trampoline_addr(SB), RODATA, $8
DATA	·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB)

TEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkfifoat(SB)
GLOBL	·libc_mkfifoat_trampoline_addr(SB), RODATA, $8
DATA	·libc_mkfifoat_trampoline_addr(SB)/8, $libc_mkfifoat_trampoline<>(SB)

TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mknod(SB)
GLOBL	·libc_mknod_trampoline_addr(SB), RODATA, $8
DATA	·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB)

TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mknodat(SB)
GLOBL	·libc_mknodat_trampoline_addr(SB), RODATA, $8
DATA	·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB)

TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_nanosleep(SB)
GLOBL	·libc_nanosleep_trampoline_addr(SB), RODATA, $8
DATA	·libc_nanosleep_trampoline_addr(SB)/8, $libc_nanosleep_trampoline<>(SB)

TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_open(SB)
GLOBL	·libc_open_trampoline_addr(SB), RODATA, $8
DATA	·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB)

TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_openat(SB)
GLOBL	·libc_openat_trampoline_addr(SB), RODATA, $8
DATA	·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB)

TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pathconf(SB)
GLOBL	·libc_pathconf_trampoline_addr(SB), RODATA, $8
DATA	·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB)

TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pread(SB)
GLOBL	·libc_pread_trampoline_addr(SB), RODATA, $8
DATA	·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB)

TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pwrite(SB)
GLOBL	·libc_pwrite_trampoline_addr(SB), RODATA, $8
DATA	·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)

TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_read(SB)
GLOBL	·libc_read_trampoline_addr(SB), RODATA, $8
DATA	·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB)

TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_readlink(SB)
GLOBL	·libc_readlink_trampoline_addr(SB), RODATA, $8
DATA	·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB)

TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_readlinkat(SB)
GLOBL	·libc_readlinkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB)

TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_rename(SB)
GLOBL	·libc_rename_trampoline_addr(SB), RODATA, $8
DATA	·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB)

TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_renameat(SB)
GLOBL	·libc_renameat_trampoline_addr(SB), RODATA, $8
DATA	·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB)

TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_revoke(SB)
GLOBL	·libc_revoke_trampoline_addr(SB), RODATA, $8
DATA	·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB)

TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_rmdir(SB)
GLOBL	·libc_rmdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB)

TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_lseek(SB)
GLOBL	·libc_lseek_trampoline_addr(SB), RODATA, $8
DATA	·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB)

TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_select(SB)
GLOBL	·libc_select_trampoline_addr(SB), RODATA, $8
DATA	·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB)

TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setegid(SB)
GLOBL	·libc_setegid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB)

TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_seteuid(SB)
GLOBL	·libc_seteuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB)

TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setgid(SB)
GLOBL	·libc_setgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB)

TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setlogin(SB)
GLOBL	·libc_setlogin_trampoline_addr(SB), RODATA, $8
DATA	·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB)

TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setpgid(SB)
GLOBL	·libc_setpgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB)

TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setpriority(SB)
GLOBL	·libc_setpriority_trampoline_addr(SB), RODATA, $8
DATA	·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB)

TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setregid(SB)
GLOBL	·libc_setregid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB)

TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setreuid(SB)
GLOBL	·libc_setreuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB)

TEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setresgid(SB)
GLOBL	·libc_setresgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setresgid_trampoline_addr(SB)/8, $libc_setresgid_trampoline<>(SB)

TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setresuid(SB)
GLOBL	·libc_setresuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB)

TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setrtable(SB)
GLOBL	·libc_setrtable_trampoline_addr(SB), RODATA, $8
DATA	·libc_setrtable_trampoline_addr(SB)/8, $libc_setrtable_trampoline<>(SB)

TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setsid(SB)
GLOBL	·libc_setsid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB)

TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_settimeofday(SB)
GLOBL	·libc_settimeofday_trampoline_addr(SB), RODATA, $8
DATA	·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB)

TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setuid(SB)
GLOBL	·libc_setuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB)

TEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_stat(SB)
GLOBL	·libc_stat_trampoline_addr(SB), RODATA, $8
DATA	·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB)

TEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_statfs(SB)
GLOBL	·libc_statfs_trampoline_addr(SB), RODATA, $8
DATA	·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB)

TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_symlink(SB)
GLOBL	·libc_symlink_trampoline_addr(SB), RODATA, $8
DATA	·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB)

TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_symlinkat(SB)
GLOBL	·libc_symlinkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB)

TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sync(SB)
GLOBL	·libc_sync_trampoline_addr(SB), RODATA, $8
DATA	·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB)

TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_truncate(SB)
GLOBL	·libc_truncate_trampoline_addr(SB), RODATA, $8
DATA	·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB)

TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_umask(SB)
GLOBL	·libc_umask_trampoline_addr(SB), RODATA, $8
DATA	·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB)

TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_unlink(SB)
GLOBL	·libc_unlink_trampoline_addr(SB), RODATA, $8
DATA	·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB)

TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_unlinkat(SB)
GLOBL	·libc_unlinkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB)

TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_unmount(SB)
GLOBL	·libc_unmount_trampoline_addr(SB), RODATA, $8
DATA	·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB)

TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_write(SB)
GLOBL	·libc_write_trampoline_addr(SB), RODATA, $8
DATA	·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB)

TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mmap(SB)
GLOBL	·libc_mmap_trampoline_addr(SB), RODATA, $8
DATA	·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB)

TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_munmap(SB)
GLOBL	·libc_munmap_trampoline_addr(SB), RODATA, $8
DATA	·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB)

TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_utimensat(SB)
GLOBL	·libc_utimensat_trampoline_addr(SB), RODATA, $8
DATA	·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB)
  07070100000E79000081A4000000000000000000000001645E367C0000DDDB000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go    // go run mksyscall.go -openbsd -libc -tags openbsd,ppc64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_ppc64.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build openbsd && ppc64
// +build openbsd,ppc64

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getgroups_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getgroups getgroups "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(ngid int, gid *_Gid_t) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setgroups_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setgroups setgroups "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
	r0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
	wpid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_wait4_trampoline_addr uintptr

//go:cgo_import_dynamic libc_wait4 wait4 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
	r0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_accept_trampoline_addr uintptr

//go:cgo_import_dynamic libc_accept accept "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_bind_trampoline_addr uintptr

//go:cgo_import_dynamic libc_bind bind "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_connect_trampoline_addr uintptr

//go:cgo_import_dynamic libc_connect connect "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_socket_trampoline_addr uintptr

//go:cgo_import_dynamic libc_socket socket "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getsockopt_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getsockopt getsockopt "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setsockopt_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setsockopt setsockopt "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getpeername_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpeername getpeername "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getsockname_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getsockname getsockname "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(s int, how int) (err error) {
	_, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_shutdown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_shutdown shutdown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_socketpair_trampoline_addr uintptr

//go:cgo_import_dynamic libc_socketpair socketpair "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_recvfrom_trampoline_addr uintptr

//go:cgo_import_dynamic libc_recvfrom recvfrom "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sendto_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sendto sendto "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_recvmsg_trampoline_addr uintptr

//go:cgo_import_dynamic libc_recvmsg recvmsg "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sendmsg_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sendmsg sendmsg "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
	r0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_kevent_trampoline_addr uintptr

//go:cgo_import_dynamic libc_kevent kevent "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, timeval *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_utimes_trampoline_addr uintptr

//go:cgo_import_dynamic libc_utimes utimes "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimes(fd int, timeval *[2]Timeval) (err error) {
	_, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_futimes_trampoline_addr uintptr

//go:cgo_import_dynamic libc_futimes futimes "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_poll_trampoline_addr uintptr

//go:cgo_import_dynamic libc_poll poll "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Madvise(b []byte, behav int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_madvise_trampoline_addr uintptr

//go:cgo_import_dynamic libc_madvise madvise "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mlock_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mlock mlock "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlockall(flags int) (err error) {
	_, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mlockall_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mlockall mlockall "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mprotect(b []byte, prot int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mprotect_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mprotect mprotect "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Msync(b []byte, flags int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_msync_trampoline_addr uintptr

//go:cgo_import_dynamic libc_msync msync "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_munlock_trampoline_addr uintptr

//go:cgo_import_dynamic libc_munlock munlock "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlockall() (err error) {
	_, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_munlockall_trampoline_addr uintptr

//go:cgo_import_dynamic libc_munlockall munlockall "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pipe2(p *[2]_C_int, flags int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pipe2_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pipe2 pipe2 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getdents(fd int, buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getdents_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getdents getdents "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getcwd(buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getcwd_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getcwd getcwd "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctl(fd int, req uint, arg uintptr) (err error) {
	_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {
	_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_ioctl_trampoline_addr uintptr

//go:cgo_import_dynamic libc_ioctl ioctl "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
	var _p0 unsafe.Pointer
	if len(mib) > 0 {
		_p0 = unsafe.Pointer(&mib[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sysctl_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sysctl sysctl "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
	r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_ppoll_trampoline_addr uintptr

//go:cgo_import_dynamic libc_ppoll ppoll "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Access(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_access_trampoline_addr uintptr

//go:cgo_import_dynamic libc_access access "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
	_, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_adjtime_trampoline_addr uintptr

//go:cgo_import_dynamic libc_adjtime adjtime "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chdir chdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chflags(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chflags_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chflags chflags "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chmod(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chmod_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chmod chmod "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chown chown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chroot(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chroot_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chroot chroot "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ClockGettime(clockid int32, time *Timespec) (err error) {
	_, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_clock_gettime_trampoline_addr uintptr

//go:cgo_import_dynamic libc_clock_gettime clock_gettime "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Close(fd int) (err error) {
	_, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_close_trampoline_addr uintptr

//go:cgo_import_dynamic libc_close close "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup(fd int) (nfd int, err error) {
	r0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0)
	nfd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_dup_trampoline_addr uintptr

//go:cgo_import_dynamic libc_dup dup "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup2(from int, to int) (err error) {
	_, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_dup2_trampoline_addr uintptr

//go:cgo_import_dynamic libc_dup2 dup2 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup3(from int, to int, flags int) (err error) {
	_, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_dup3_trampoline_addr uintptr

//go:cgo_import_dynamic libc_dup3 dup3 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Exit(code int) {
	syscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0)
	return
}

var libc_exit_trampoline_addr uintptr

//go:cgo_import_dynamic libc_exit exit "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_faccessat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_faccessat faccessat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchdir(fd int) (err error) {
	_, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchdir fchdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchflags(fd int, flags int) (err error) {
	_, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchflags_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchflags fchflags "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmod(fd int, mode uint32) (err error) {
	_, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchmod_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchmod fchmod "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchmodat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchown fchown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchownat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchownat fchownat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Flock(fd int, how int) (err error) {
	_, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_flock_trampoline_addr uintptr

//go:cgo_import_dynamic libc_flock flock "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fpathconf(fd int, name int) (val int, err error) {
	r0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fpathconf_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fstat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fstat fstat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fstatat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fstatat fstatat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatfs(fd int, stat *Statfs_t) (err error) {
	_, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fstatfs_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fstatfs fstatfs "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fsync(fd int) (err error) {
	_, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fsync_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fsync fsync "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_ftruncate_trampoline_addr uintptr

//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0)
	egid = int(r0)
	return
}

var libc_getegid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getegid getegid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (uid int) {
	r0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0)
	uid = int(r0)
	return
}

var libc_geteuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_geteuid geteuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0)
	gid = int(r0)
	return
}

var libc_getgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getgid getgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgid(pid int) (pgid int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0)
	pgid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getpgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpgid getpgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgrp() (pgrp int) {
	r0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0)
	pgrp = int(r0)
	return
}

var libc_getpgrp_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpid() (pid int) {
	r0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0)
	pid = int(r0)
	return
}

var libc_getpid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpid getpid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getppid() (ppid int) {
	r0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0)
	ppid = int(r0)
	return
}

var libc_getppid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getppid getppid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpriority(which int, who int) (prio int, err error) {
	r0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0)
	prio = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getpriority_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpriority getpriority "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(which int, lim *Rlimit) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getrlimit_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrtable() (rtable int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0)
	rtable = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getrtable_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getrtable getrtable "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrusage(who int, rusage *Rusage) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getrusage_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getrusage getrusage "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getsid(pid int) (sid int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0)
	sid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getsid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getsid getsid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_gettimeofday_trampoline_addr uintptr

//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0)
	uid = int(r0)
	return
}

var libc_getuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getuid getuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Issetugid() (tainted bool) {
	r0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0)
	tainted = bool(r0 != 0)
	return
}

var libc_issetugid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_issetugid issetugid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kill(pid int, signum syscall.Signal) (err error) {
	_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_kill_trampoline_addr uintptr

//go:cgo_import_dynamic libc_kill kill "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kqueue() (fd int, err error) {
	r0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_kqueue_trampoline_addr uintptr

//go:cgo_import_dynamic libc_kqueue kqueue "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_lchown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_lchown lchown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Link(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_link_trampoline_addr uintptr

//go:cgo_import_dynamic libc_link link "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_linkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_linkat linkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, backlog int) (err error) {
	_, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_listen_trampoline_addr uintptr

//go:cgo_import_dynamic libc_listen listen "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lstat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_lstat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_lstat lstat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdir(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkdir mkdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdirat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkdirat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifo(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkfifo_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkfifoat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkfifoat mkfifoat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknod(path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mknod_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mknod mknod "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mknodat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mknodat mknodat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
	_, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_nanosleep_trampoline_addr uintptr

//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Open(path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_open_trampoline_addr uintptr

//go:cgo_import_dynamic libc_open open "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_openat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_openat openat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pathconf(path string, name int) (val int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pathconf_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pathconf pathconf "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pread_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pread pread "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pwrite_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pwrite pwrite "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func read(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_read_trampoline_addr uintptr

//go:cgo_import_dynamic libc_read read "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlink(path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_readlink_trampoline_addr uintptr

//go:cgo_import_dynamic libc_readlink readlink "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_readlinkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_readlinkat readlinkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rename(from string, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_rename_trampoline_addr uintptr

//go:cgo_import_dynamic libc_rename rename "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(fromfd int, from string, tofd int, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_renameat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_renameat renameat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Revoke(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_revoke_trampoline_addr uintptr

//go:cgo_import_dynamic libc_revoke revoke "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rmdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_rmdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_rmdir rmdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
	r0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence))
	newoffset = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_lseek_trampoline_addr uintptr

//go:cgo_import_dynamic libc_lseek lseek "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_select_trampoline_addr uintptr

//go:cgo_import_dynamic libc_select select "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setegid(egid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setegid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setegid setegid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seteuid(euid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_seteuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_seteuid seteuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setgid(gid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setgid setgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setlogin(name string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(name)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setlogin_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setlogin setlogin "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpgid(pid int, pgid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setpgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setpgid setpgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpriority(which int, who int, prio int) (err error) {
	_, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setpriority_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setpriority setpriority "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setregid(rgid int, egid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setregid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setregid setregid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setreuid(ruid int, euid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setreuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setreuid setreuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setresgid(rgid int, egid int, sgid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setresgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setresgid setresgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setresuid(ruid int, euid int, suid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setresuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setresuid setresuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setrtable(rtable int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setrtable_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setrtable setrtable "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setsid() (pid int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0)
	pid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setsid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setsid setsid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Settimeofday(tp *Timeval) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_settimeofday_trampoline_addr uintptr

//go:cgo_import_dynamic libc_settimeofday settimeofday "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setuid(uid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setuid setuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Stat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_stat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_stat stat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statfs(path string, stat *Statfs_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_statfs_trampoline_addr uintptr

//go:cgo_import_dynamic libc_statfs statfs "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlink(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_symlink_trampoline_addr uintptr

//go:cgo_import_dynamic libc_symlink symlink "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_symlinkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_symlinkat symlinkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sync() (err error) {
	_, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sync_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sync sync "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_truncate_trampoline_addr uintptr

//go:cgo_import_dynamic libc_truncate truncate "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Umask(newmask int) (oldmask int) {
	r0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0)
	oldmask = int(r0)
	return
}

var libc_umask_trampoline_addr uintptr

//go:cgo_import_dynamic libc_umask umask "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlink(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_unlink_trampoline_addr uintptr

//go:cgo_import_dynamic libc_unlink unlink "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlinkat(dirfd int, path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_unlinkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unmount(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_unmount_trampoline_addr uintptr

//go:cgo_import_dynamic libc_unmount unmount "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func write(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_write_trampoline_addr uintptr

//go:cgo_import_dynamic libc_write write "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
	r0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
	ret = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mmap_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mmap mmap "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func munmap(addr uintptr, length uintptr) (err error) {
	_, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_munmap_trampoline_addr uintptr

//go:cgo_import_dynamic libc_munmap munmap "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_utimensat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_utimensat utimensat "libc.so"
 07070100000E7A000081A4000000000000000000000001645E367C00006939000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s // go run mkasm.go openbsd ppc64
// Code generated by the command above; DO NOT EDIT.

#include "textflag.h"

TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_getgroups(SB)
	RET
GLOBL	·libc_getgroups_trampoline_addr(SB), RODATA, $8
DATA	·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB)

TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_setgroups(SB)
	RET
GLOBL	·libc_setgroups_trampoline_addr(SB), RODATA, $8
DATA	·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB)

TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_wait4(SB)
	RET
GLOBL	·libc_wait4_trampoline_addr(SB), RODATA, $8
DATA	·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB)

TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_accept(SB)
	RET
GLOBL	·libc_accept_trampoline_addr(SB), RODATA, $8
DATA	·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB)

TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_bind(SB)
	RET
GLOBL	·libc_bind_trampoline_addr(SB), RODATA, $8
DATA	·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB)

TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_connect(SB)
	RET
GLOBL	·libc_connect_trampoline_addr(SB), RODATA, $8
DATA	·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB)

TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_socket(SB)
	RET
GLOBL	·libc_socket_trampoline_addr(SB), RODATA, $8
DATA	·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB)

TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_getsockopt(SB)
	RET
GLOBL	·libc_getsockopt_trampoline_addr(SB), RODATA, $8
DATA	·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB)

TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_setsockopt(SB)
	RET
GLOBL	·libc_setsockopt_trampoline_addr(SB), RODATA, $8
DATA	·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB)

TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_getpeername(SB)
	RET
GLOBL	·libc_getpeername_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB)

TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_getsockname(SB)
	RET
GLOBL	·libc_getsockname_trampoline_addr(SB), RODATA, $8
DATA	·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB)

TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_shutdown(SB)
	RET
GLOBL	·libc_shutdown_trampoline_addr(SB), RODATA, $8
DATA	·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB)

TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_socketpair(SB)
	RET
GLOBL	·libc_socketpair_trampoline_addr(SB), RODATA, $8
DATA	·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB)

TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_recvfrom(SB)
	RET
GLOBL	·libc_recvfrom_trampoline_addr(SB), RODATA, $8
DATA	·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB)

TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_sendto(SB)
	RET
GLOBL	·libc_sendto_trampoline_addr(SB), RODATA, $8
DATA	·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB)

TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_recvmsg(SB)
	RET
GLOBL	·libc_recvmsg_trampoline_addr(SB), RODATA, $8
DATA	·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB)

TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_sendmsg(SB)
	RET
GLOBL	·libc_sendmsg_trampoline_addr(SB), RODATA, $8
DATA	·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB)

TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_kevent(SB)
	RET
GLOBL	·libc_kevent_trampoline_addr(SB), RODATA, $8
DATA	·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB)

TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_utimes(SB)
	RET
GLOBL	·libc_utimes_trampoline_addr(SB), RODATA, $8
DATA	·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB)

TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_futimes(SB)
	RET
GLOBL	·libc_futimes_trampoline_addr(SB), RODATA, $8
DATA	·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB)

TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_poll(SB)
	RET
GLOBL	·libc_poll_trampoline_addr(SB), RODATA, $8
DATA	·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB)

TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_madvise(SB)
	RET
GLOBL	·libc_madvise_trampoline_addr(SB), RODATA, $8
DATA	·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB)

TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_mlock(SB)
	RET
GLOBL	·libc_mlock_trampoline_addr(SB), RODATA, $8
DATA	·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB)

TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_mlockall(SB)
	RET
GLOBL	·libc_mlockall_trampoline_addr(SB), RODATA, $8
DATA	·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB)

TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_mprotect(SB)
	RET
GLOBL	·libc_mprotect_trampoline_addr(SB), RODATA, $8
DATA	·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB)

TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_msync(SB)
	RET
GLOBL	·libc_msync_trampoline_addr(SB), RODATA, $8
DATA	·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB)

TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_munlock(SB)
	RET
GLOBL	·libc_munlock_trampoline_addr(SB), RODATA, $8
DATA	·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB)

TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_munlockall(SB)
	RET
GLOBL	·libc_munlockall_trampoline_addr(SB), RODATA, $8
DATA	·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB)

TEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_pipe2(SB)
	RET
GLOBL	·libc_pipe2_trampoline_addr(SB), RODATA, $8
DATA	·libc_pipe2_trampoline_addr(SB)/8, $libc_pipe2_trampoline<>(SB)

TEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_getdents(SB)
	RET
GLOBL	·libc_getdents_trampoline_addr(SB), RODATA, $8
DATA	·libc_getdents_trampoline_addr(SB)/8, $libc_getdents_trampoline<>(SB)

TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_getcwd(SB)
	RET
GLOBL	·libc_getcwd_trampoline_addr(SB), RODATA, $8
DATA	·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB)

TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_ioctl(SB)
	RET
GLOBL	·libc_ioctl_trampoline_addr(SB), RODATA, $8
DATA	·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB)

TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_sysctl(SB)
	RET
GLOBL	·libc_sysctl_trampoline_addr(SB), RODATA, $8
DATA	·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)

TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_ppoll(SB)
	RET
GLOBL	·libc_ppoll_trampoline_addr(SB), RODATA, $8
DATA	·libc_ppoll_trampoline_addr(SB)/8, $libc_ppoll_trampoline<>(SB)

TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_access(SB)
	RET
GLOBL	·libc_access_trampoline_addr(SB), RODATA, $8
DATA	·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB)

TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_adjtime(SB)
	RET
GLOBL	·libc_adjtime_trampoline_addr(SB), RODATA, $8
DATA	·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB)

TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_chdir(SB)
	RET
GLOBL	·libc_chdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB)

TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_chflags(SB)
	RET
GLOBL	·libc_chflags_trampoline_addr(SB), RODATA, $8
DATA	·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB)

TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_chmod(SB)
	RET
GLOBL	·libc_chmod_trampoline_addr(SB), RODATA, $8
DATA	·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB)

TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_chown(SB)
	RET
GLOBL	·libc_chown_trampoline_addr(SB), RODATA, $8
DATA	·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB)

TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_chroot(SB)
	RET
GLOBL	·libc_chroot_trampoline_addr(SB), RODATA, $8
DATA	·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB)

TEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_clock_gettime(SB)
	RET
GLOBL	·libc_clock_gettime_trampoline_addr(SB), RODATA, $8
DATA	·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB)

TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_close(SB)
	RET
GLOBL	·libc_close_trampoline_addr(SB), RODATA, $8
DATA	·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB)

TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_dup(SB)
	RET
GLOBL	·libc_dup_trampoline_addr(SB), RODATA, $8
DATA	·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB)

TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_dup2(SB)
	RET
GLOBL	·libc_dup2_trampoline_addr(SB), RODATA, $8
DATA	·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB)

TEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_dup3(SB)
	RET
GLOBL	·libc_dup3_trampoline_addr(SB), RODATA, $8
DATA	·libc_dup3_trampoline_addr(SB)/8, $libc_dup3_trampoline<>(SB)

TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_exit(SB)
	RET
GLOBL	·libc_exit_trampoline_addr(SB), RODATA, $8
DATA	·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB)

TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_faccessat(SB)
	RET
GLOBL	·libc_faccessat_trampoline_addr(SB), RODATA, $8
DATA	·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB)

TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_fchdir(SB)
	RET
GLOBL	·libc_fchdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB)

TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_fchflags(SB)
	RET
GLOBL	·libc_fchflags_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB)

TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_fchmod(SB)
	RET
GLOBL	·libc_fchmod_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB)

TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_fchmodat(SB)
	RET
GLOBL	·libc_fchmodat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB)

TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_fchown(SB)
	RET
GLOBL	·libc_fchown_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB)

TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_fchownat(SB)
	RET
GLOBL	·libc_fchownat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB)

TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_flock(SB)
	RET
GLOBL	·libc_flock_trampoline_addr(SB), RODATA, $8
DATA	·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB)

TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_fpathconf(SB)
	RET
GLOBL	·libc_fpathconf_trampoline_addr(SB), RODATA, $8
DATA	·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB)

TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_fstat(SB)
	RET
GLOBL	·libc_fstat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB)

TEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_fstatat(SB)
	RET
GLOBL	·libc_fstatat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB)

TEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_fstatfs(SB)
	RET
GLOBL	·libc_fstatfs_trampoline_addr(SB), RODATA, $8
DATA	·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB)

TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_fsync(SB)
	RET
GLOBL	·libc_fsync_trampoline_addr(SB), RODATA, $8
DATA	·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB)

TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_ftruncate(SB)
	RET
GLOBL	·libc_ftruncate_trampoline_addr(SB), RODATA, $8
DATA	·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB)

TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_getegid(SB)
	RET
GLOBL	·libc_getegid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB)

TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_geteuid(SB)
	RET
GLOBL	·libc_geteuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB)

TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_getgid(SB)
	RET
GLOBL	·libc_getgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB)

TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_getpgid(SB)
	RET
GLOBL	·libc_getpgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB)

TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_getpgrp(SB)
	RET
GLOBL	·libc_getpgrp_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB)

TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_getpid(SB)
	RET
GLOBL	·libc_getpid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB)

TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_getppid(SB)
	RET
GLOBL	·libc_getppid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB)

TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_getpriority(SB)
	RET
GLOBL	·libc_getpriority_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB)

TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_getrlimit(SB)
	RET
GLOBL	·libc_getrlimit_trampoline_addr(SB), RODATA, $8
DATA	·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB)

TEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_getrtable(SB)
	RET
GLOBL	·libc_getrtable_trampoline_addr(SB), RODATA, $8
DATA	·libc_getrtable_trampoline_addr(SB)/8, $libc_getrtable_trampoline<>(SB)

TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_getrusage(SB)
	RET
GLOBL	·libc_getrusage_trampoline_addr(SB), RODATA, $8
DATA	·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB)

TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_getsid(SB)
	RET
GLOBL	·libc_getsid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB)

TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_gettimeofday(SB)
	RET
GLOBL	·libc_gettimeofday_trampoline_addr(SB), RODATA, $8
DATA	·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB)

TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_getuid(SB)
	RET
GLOBL	·libc_getuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB)

TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_issetugid(SB)
	RET
GLOBL	·libc_issetugid_trampoline_addr(SB), RODATA, $8
DATA	·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB)

TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_kill(SB)
	RET
GLOBL	·libc_kill_trampoline_addr(SB), RODATA, $8
DATA	·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB)

TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_kqueue(SB)
	RET
GLOBL	·libc_kqueue_trampoline_addr(SB), RODATA, $8
DATA	·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB)

TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_lchown(SB)
	RET
GLOBL	·libc_lchown_trampoline_addr(SB), RODATA, $8
DATA	·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB)

TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_link(SB)
	RET
GLOBL	·libc_link_trampoline_addr(SB), RODATA, $8
DATA	·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB)

TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_linkat(SB)
	RET
GLOBL	·libc_linkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB)

TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_listen(SB)
	RET
GLOBL	·libc_listen_trampoline_addr(SB), RODATA, $8
DATA	·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB)

TEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_lstat(SB)
	RET
GLOBL	·libc_lstat_trampoline_addr(SB), RODATA, $8
DATA	·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB)

TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_mkdir(SB)
	RET
GLOBL	·libc_mkdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB)

TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_mkdirat(SB)
	RET
GLOBL	·libc_mkdirat_trampoline_addr(SB), RODATA, $8
DATA	·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB)

TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_mkfifo(SB)
	RET
GLOBL	·libc_mkfifo_trampoline_addr(SB), RODATA, $8
DATA	·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB)

TEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_mkfifoat(SB)
	RET
GLOBL	·libc_mkfifoat_trampoline_addr(SB), RODATA, $8
DATA	·libc_mkfifoat_trampoline_addr(SB)/8, $libc_mkfifoat_trampoline<>(SB)

TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_mknod(SB)
	RET
GLOBL	·libc_mknod_trampoline_addr(SB), RODATA, $8
DATA	·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB)

TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_mknodat(SB)
	RET
GLOBL	·libc_mknodat_trampoline_addr(SB), RODATA, $8
DATA	·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB)

TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_nanosleep(SB)
	RET
GLOBL	·libc_nanosleep_trampoline_addr(SB), RODATA, $8
DATA	·libc_nanosleep_trampoline_addr(SB)/8, $libc_nanosleep_trampoline<>(SB)

TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_open(SB)
	RET
GLOBL	·libc_open_trampoline_addr(SB), RODATA, $8
DATA	·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB)

TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_openat(SB)
	RET
GLOBL	·libc_openat_trampoline_addr(SB), RODATA, $8
DATA	·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB)

TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_pathconf(SB)
	RET
GLOBL	·libc_pathconf_trampoline_addr(SB), RODATA, $8
DATA	·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB)

TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_pread(SB)
	RET
GLOBL	·libc_pread_trampoline_addr(SB), RODATA, $8
DATA	·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB)

TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_pwrite(SB)
	RET
GLOBL	·libc_pwrite_trampoline_addr(SB), RODATA, $8
DATA	·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)

TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_read(SB)
	RET
GLOBL	·libc_read_trampoline_addr(SB), RODATA, $8
DATA	·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB)

TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_readlink(SB)
	RET
GLOBL	·libc_readlink_trampoline_addr(SB), RODATA, $8
DATA	·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB)

TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_readlinkat(SB)
	RET
GLOBL	·libc_readlinkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB)

TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_rename(SB)
	RET
GLOBL	·libc_rename_trampoline_addr(SB), RODATA, $8
DATA	·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB)

TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_renameat(SB)
	RET
GLOBL	·libc_renameat_trampoline_addr(SB), RODATA, $8
DATA	·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB)

TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_revoke(SB)
	RET
GLOBL	·libc_revoke_trampoline_addr(SB), RODATA, $8
DATA	·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB)

TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_rmdir(SB)
	RET
GLOBL	·libc_rmdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB)

TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_lseek(SB)
	RET
GLOBL	·libc_lseek_trampoline_addr(SB), RODATA, $8
DATA	·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB)

TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_select(SB)
	RET
GLOBL	·libc_select_trampoline_addr(SB), RODATA, $8
DATA	·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB)

TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_setegid(SB)
	RET
GLOBL	·libc_setegid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB)

TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_seteuid(SB)
	RET
GLOBL	·libc_seteuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB)

TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_setgid(SB)
	RET
GLOBL	·libc_setgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB)

TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_setlogin(SB)
	RET
GLOBL	·libc_setlogin_trampoline_addr(SB), RODATA, $8
DATA	·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB)

TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_setpgid(SB)
	RET
GLOBL	·libc_setpgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB)

TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_setpriority(SB)
	RET
GLOBL	·libc_setpriority_trampoline_addr(SB), RODATA, $8
DATA	·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB)

TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_setregid(SB)
	RET
GLOBL	·libc_setregid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB)

TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_setreuid(SB)
	RET
GLOBL	·libc_setreuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB)

TEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_setresgid(SB)
	RET
GLOBL	·libc_setresgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setresgid_trampoline_addr(SB)/8, $libc_setresgid_trampoline<>(SB)

TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_setresuid(SB)
	RET
GLOBL	·libc_setresuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB)

TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_setrtable(SB)
	RET
GLOBL	·libc_setrtable_trampoline_addr(SB), RODATA, $8
DATA	·libc_setrtable_trampoline_addr(SB)/8, $libc_setrtable_trampoline<>(SB)

TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_setsid(SB)
	RET
GLOBL	·libc_setsid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB)

TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_settimeofday(SB)
	RET
GLOBL	·libc_settimeofday_trampoline_addr(SB), RODATA, $8
DATA	·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB)

TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_setuid(SB)
	RET
GLOBL	·libc_setuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB)

TEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_stat(SB)
	RET
GLOBL	·libc_stat_trampoline_addr(SB), RODATA, $8
DATA	·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB)

TEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_statfs(SB)
	RET
GLOBL	·libc_statfs_trampoline_addr(SB), RODATA, $8
DATA	·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB)

TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_symlink(SB)
	RET
GLOBL	·libc_symlink_trampoline_addr(SB), RODATA, $8
DATA	·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB)

TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_symlinkat(SB)
	RET
GLOBL	·libc_symlinkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB)

TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_sync(SB)
	RET
GLOBL	·libc_sync_trampoline_addr(SB), RODATA, $8
DATA	·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB)

TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_truncate(SB)
	RET
GLOBL	·libc_truncate_trampoline_addr(SB), RODATA, $8
DATA	·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB)

TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_umask(SB)
	RET
GLOBL	·libc_umask_trampoline_addr(SB), RODATA, $8
DATA	·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB)

TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_unlink(SB)
	RET
GLOBL	·libc_unlink_trampoline_addr(SB), RODATA, $8
DATA	·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB)

TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_unlinkat(SB)
	RET
GLOBL	·libc_unlinkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB)

TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_unmount(SB)
	RET
GLOBL	·libc_unmount_trampoline_addr(SB), RODATA, $8
DATA	·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB)

TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_write(SB)
	RET
GLOBL	·libc_write_trampoline_addr(SB), RODATA, $8
DATA	·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB)

TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_mmap(SB)
	RET
GLOBL	·libc_mmap_trampoline_addr(SB), RODATA, $8
DATA	·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB)

TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_munmap(SB)
	RET
GLOBL	·libc_munmap_trampoline_addr(SB), RODATA, $8
DATA	·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB)

TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0
	CALL	libc_utimensat(SB)
	RET
GLOBL	·libc_utimensat_trampoline_addr(SB), RODATA, $8
DATA	·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB)
   07070100000E7B000081A4000000000000000000000001645E367C0000DDE3000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go  // go run mksyscall.go -openbsd -libc -tags openbsd,riscv64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_riscv64.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build openbsd && riscv64
// +build openbsd,riscv64

package unix

import (
	"syscall"
	"unsafe"
)

var _ syscall.Errno

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getgroups_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getgroups getgroups "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(ngid int, gid *_Gid_t) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setgroups_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setgroups setgroups "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
	r0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
	wpid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_wait4_trampoline_addr uintptr

//go:cgo_import_dynamic libc_wait4 wait4 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
	r0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_accept_trampoline_addr uintptr

//go:cgo_import_dynamic libc_accept accept "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_bind_trampoline_addr uintptr

//go:cgo_import_dynamic libc_bind bind "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_connect_trampoline_addr uintptr

//go:cgo_import_dynamic libc_connect connect "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_socket_trampoline_addr uintptr

//go:cgo_import_dynamic libc_socket socket "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getsockopt_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getsockopt getsockopt "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setsockopt_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setsockopt setsockopt "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getpeername_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpeername getpeername "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getsockname_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getsockname getsockname "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(s int, how int) (err error) {
	_, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_shutdown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_shutdown shutdown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_socketpair_trampoline_addr uintptr

//go:cgo_import_dynamic libc_socketpair socketpair "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_recvfrom_trampoline_addr uintptr

//go:cgo_import_dynamic libc_recvfrom recvfrom "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sendto_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sendto sendto "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_recvmsg_trampoline_addr uintptr

//go:cgo_import_dynamic libc_recvmsg recvmsg "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sendmsg_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sendmsg sendmsg "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
	r0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_kevent_trampoline_addr uintptr

//go:cgo_import_dynamic libc_kevent kevent "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, timeval *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_utimes_trampoline_addr uintptr

//go:cgo_import_dynamic libc_utimes utimes "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimes(fd int, timeval *[2]Timeval) (err error) {
	_, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_futimes_trampoline_addr uintptr

//go:cgo_import_dynamic libc_futimes futimes "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_poll_trampoline_addr uintptr

//go:cgo_import_dynamic libc_poll poll "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Madvise(b []byte, behav int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_madvise_trampoline_addr uintptr

//go:cgo_import_dynamic libc_madvise madvise "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mlock_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mlock mlock "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlockall(flags int) (err error) {
	_, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mlockall_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mlockall mlockall "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mprotect(b []byte, prot int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mprotect_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mprotect mprotect "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Msync(b []byte, flags int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_msync_trampoline_addr uintptr

//go:cgo_import_dynamic libc_msync msync "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlock(b []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_munlock_trampoline_addr uintptr

//go:cgo_import_dynamic libc_munlock munlock "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlockall() (err error) {
	_, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_munlockall_trampoline_addr uintptr

//go:cgo_import_dynamic libc_munlockall munlockall "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pipe2(p *[2]_C_int, flags int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pipe2_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pipe2 pipe2 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getdents(fd int, buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getdents_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getdents getdents "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getcwd(buf []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getcwd_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getcwd getcwd "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctl(fd int, req uint, arg uintptr) (err error) {
	_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {
	_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_ioctl_trampoline_addr uintptr

//go:cgo_import_dynamic libc_ioctl ioctl "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
	var _p0 unsafe.Pointer
	if len(mib) > 0 {
		_p0 = unsafe.Pointer(&mib[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sysctl_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sysctl sysctl "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
	r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_ppoll_trampoline_addr uintptr

//go:cgo_import_dynamic libc_ppoll ppoll "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Access(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_access_trampoline_addr uintptr

//go:cgo_import_dynamic libc_access access "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
	_, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_adjtime_trampoline_addr uintptr

//go:cgo_import_dynamic libc_adjtime adjtime "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chdir chdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chflags(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chflags_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chflags chflags "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chmod(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chmod_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chmod chmod "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chown chown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chroot(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_chroot_trampoline_addr uintptr

//go:cgo_import_dynamic libc_chroot chroot "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ClockGettime(clockid int32, time *Timespec) (err error) {
	_, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_clock_gettime_trampoline_addr uintptr

//go:cgo_import_dynamic libc_clock_gettime clock_gettime "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Close(fd int) (err error) {
	_, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_close_trampoline_addr uintptr

//go:cgo_import_dynamic libc_close close "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup(fd int) (nfd int, err error) {
	r0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0)
	nfd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_dup_trampoline_addr uintptr

//go:cgo_import_dynamic libc_dup dup "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup2(from int, to int) (err error) {
	_, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_dup2_trampoline_addr uintptr

//go:cgo_import_dynamic libc_dup2 dup2 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup3(from int, to int, flags int) (err error) {
	_, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_dup3_trampoline_addr uintptr

//go:cgo_import_dynamic libc_dup3 dup3 "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Exit(code int) {
	syscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0)
	return
}

var libc_exit_trampoline_addr uintptr

//go:cgo_import_dynamic libc_exit exit "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_faccessat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_faccessat faccessat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchdir(fd int) (err error) {
	_, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchdir fchdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchflags(fd int, flags int) (err error) {
	_, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchflags_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchflags fchflags "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmod(fd int, mode uint32) (err error) {
	_, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchmod_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchmod fchmod "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchmodat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchown fchown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fchownat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fchownat fchownat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Flock(fd int, how int) (err error) {
	_, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_flock_trampoline_addr uintptr

//go:cgo_import_dynamic libc_flock flock "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fpathconf(fd int, name int) (val int, err error) {
	r0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fpathconf_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fstat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fstat fstat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fstatat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fstatat fstatat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatfs(fd int, stat *Statfs_t) (err error) {
	_, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fstatfs_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fstatfs fstatfs "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fsync(fd int) (err error) {
	_, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_fsync_trampoline_addr uintptr

//go:cgo_import_dynamic libc_fsync fsync "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_ftruncate_trampoline_addr uintptr

//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0)
	egid = int(r0)
	return
}

var libc_getegid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getegid getegid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (uid int) {
	r0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0)
	uid = int(r0)
	return
}

var libc_geteuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_geteuid geteuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0)
	gid = int(r0)
	return
}

var libc_getgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getgid getgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgid(pid int) (pgid int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0)
	pgid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getpgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpgid getpgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgrp() (pgrp int) {
	r0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0)
	pgrp = int(r0)
	return
}

var libc_getpgrp_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpid() (pid int) {
	r0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0)
	pid = int(r0)
	return
}

var libc_getpid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpid getpid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getppid() (ppid int) {
	r0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0)
	ppid = int(r0)
	return
}

var libc_getppid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getppid getppid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpriority(which int, who int) (prio int, err error) {
	r0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0)
	prio = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getpriority_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getpriority getpriority "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(which int, lim *Rlimit) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getrlimit_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrtable() (rtable int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0)
	rtable = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getrtable_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getrtable getrtable "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrusage(who int, rusage *Rusage) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getrusage_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getrusage getrusage "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getsid(pid int) (sid int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0)
	sid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_getsid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getsid getsid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_gettimeofday_trampoline_addr uintptr

//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0)
	uid = int(r0)
	return
}

var libc_getuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_getuid getuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Issetugid() (tainted bool) {
	r0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0)
	tainted = bool(r0 != 0)
	return
}

var libc_issetugid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_issetugid issetugid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kill(pid int, signum syscall.Signal) (err error) {
	_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_kill_trampoline_addr uintptr

//go:cgo_import_dynamic libc_kill kill "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kqueue() (fd int, err error) {
	r0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_kqueue_trampoline_addr uintptr

//go:cgo_import_dynamic libc_kqueue kqueue "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_lchown_trampoline_addr uintptr

//go:cgo_import_dynamic libc_lchown lchown "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Link(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_link_trampoline_addr uintptr

//go:cgo_import_dynamic libc_link link "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_linkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_linkat linkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, backlog int) (err error) {
	_, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_listen_trampoline_addr uintptr

//go:cgo_import_dynamic libc_listen listen "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lstat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_lstat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_lstat lstat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdir(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkdir mkdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdirat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkdirat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifo(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkfifo_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mkfifoat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mkfifoat mkfifoat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknod(path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mknod_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mknod mknod "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mknodat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mknodat mknodat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
	_, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_nanosleep_trampoline_addr uintptr

//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Open(path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_open_trampoline_addr uintptr

//go:cgo_import_dynamic libc_open open "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_openat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_openat openat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pathconf(path string, name int) (val int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pathconf_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pathconf pathconf "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pread_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pread pread "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_pwrite_trampoline_addr uintptr

//go:cgo_import_dynamic libc_pwrite pwrite "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func read(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_read_trampoline_addr uintptr

//go:cgo_import_dynamic libc_read read "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlink(path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_readlink_trampoline_addr uintptr

//go:cgo_import_dynamic libc_readlink readlink "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_readlinkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_readlinkat readlinkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rename(from string, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_rename_trampoline_addr uintptr

//go:cgo_import_dynamic libc_rename rename "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(fromfd int, from string, tofd int, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_renameat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_renameat renameat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Revoke(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_revoke_trampoline_addr uintptr

//go:cgo_import_dynamic libc_revoke revoke "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rmdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_rmdir_trampoline_addr uintptr

//go:cgo_import_dynamic libc_rmdir rmdir "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
	r0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence))
	newoffset = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_lseek_trampoline_addr uintptr

//go:cgo_import_dynamic libc_lseek lseek "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_select_trampoline_addr uintptr

//go:cgo_import_dynamic libc_select select "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setegid(egid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setegid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setegid setegid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seteuid(euid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_seteuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_seteuid seteuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setgid(gid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setgid setgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setlogin(name string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(name)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setlogin_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setlogin setlogin "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpgid(pid int, pgid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setpgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setpgid setpgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpriority(which int, who int, prio int) (err error) {
	_, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setpriority_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setpriority setpriority "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setregid(rgid int, egid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setregid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setregid setregid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setreuid(ruid int, euid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setreuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setreuid setreuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setresgid(rgid int, egid int, sgid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setresgid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setresgid setresgid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setresuid(ruid int, euid int, suid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setresuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setresuid setresuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setrtable(rtable int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setrtable_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setrtable setrtable "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setsid() (pid int, err error) {
	r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0)
	pid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setsid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setsid setsid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Settimeofday(tp *Timeval) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_settimeofday_trampoline_addr uintptr

//go:cgo_import_dynamic libc_settimeofday settimeofday "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setuid(uid int) (err error) {
	_, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_setuid_trampoline_addr uintptr

//go:cgo_import_dynamic libc_setuid setuid "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Stat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_stat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_stat stat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statfs(path string, stat *Statfs_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_statfs_trampoline_addr uintptr

//go:cgo_import_dynamic libc_statfs statfs "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlink(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_symlink_trampoline_addr uintptr

//go:cgo_import_dynamic libc_symlink symlink "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_symlinkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_symlinkat symlinkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sync() (err error) {
	_, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_sync_trampoline_addr uintptr

//go:cgo_import_dynamic libc_sync sync "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_truncate_trampoline_addr uintptr

//go:cgo_import_dynamic libc_truncate truncate "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Umask(newmask int) (oldmask int) {
	r0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0)
	oldmask = int(r0)
	return
}

var libc_umask_trampoline_addr uintptr

//go:cgo_import_dynamic libc_umask umask "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlink(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_unlink_trampoline_addr uintptr

//go:cgo_import_dynamic libc_unlink unlink "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlinkat(dirfd int, path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_unlinkat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unmount(path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_unmount_trampoline_addr uintptr

//go:cgo_import_dynamic libc_unmount unmount "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func write(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_write_trampoline_addr uintptr

//go:cgo_import_dynamic libc_write write "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
	r0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
	ret = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_mmap_trampoline_addr uintptr

//go:cgo_import_dynamic libc_mmap mmap "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func munmap(addr uintptr, length uintptr) (err error) {
	_, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_munmap_trampoline_addr uintptr

//go:cgo_import_dynamic libc_munmap munmap "libc.so"

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

var libc_utimensat_trampoline_addr uintptr

//go:cgo_import_dynamic libc_utimensat utimensat "libc.so"
 07070100000E7C000081A4000000000000000000000001645E367C00006623000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s   // go run mkasm.go openbsd riscv64
// Code generated by the command above; DO NOT EDIT.

#include "textflag.h"

TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getgroups(SB)
GLOBL	·libc_getgroups_trampoline_addr(SB), RODATA, $8
DATA	·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB)

TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setgroups(SB)
GLOBL	·libc_setgroups_trampoline_addr(SB), RODATA, $8
DATA	·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB)

TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_wait4(SB)
GLOBL	·libc_wait4_trampoline_addr(SB), RODATA, $8
DATA	·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB)

TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_accept(SB)
GLOBL	·libc_accept_trampoline_addr(SB), RODATA, $8
DATA	·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB)

TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_bind(SB)
GLOBL	·libc_bind_trampoline_addr(SB), RODATA, $8
DATA	·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB)

TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_connect(SB)
GLOBL	·libc_connect_trampoline_addr(SB), RODATA, $8
DATA	·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB)

TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_socket(SB)
GLOBL	·libc_socket_trampoline_addr(SB), RODATA, $8
DATA	·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB)

TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getsockopt(SB)
GLOBL	·libc_getsockopt_trampoline_addr(SB), RODATA, $8
DATA	·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB)

TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setsockopt(SB)
GLOBL	·libc_setsockopt_trampoline_addr(SB), RODATA, $8
DATA	·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB)

TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpeername(SB)
GLOBL	·libc_getpeername_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB)

TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getsockname(SB)
GLOBL	·libc_getsockname_trampoline_addr(SB), RODATA, $8
DATA	·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB)

TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_shutdown(SB)
GLOBL	·libc_shutdown_trampoline_addr(SB), RODATA, $8
DATA	·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB)

TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_socketpair(SB)
GLOBL	·libc_socketpair_trampoline_addr(SB), RODATA, $8
DATA	·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB)

TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_recvfrom(SB)
GLOBL	·libc_recvfrom_trampoline_addr(SB), RODATA, $8
DATA	·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB)

TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sendto(SB)
GLOBL	·libc_sendto_trampoline_addr(SB), RODATA, $8
DATA	·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB)

TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_recvmsg(SB)
GLOBL	·libc_recvmsg_trampoline_addr(SB), RODATA, $8
DATA	·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB)

TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sendmsg(SB)
GLOBL	·libc_sendmsg_trampoline_addr(SB), RODATA, $8
DATA	·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB)

TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_kevent(SB)
GLOBL	·libc_kevent_trampoline_addr(SB), RODATA, $8
DATA	·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB)

TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_utimes(SB)
GLOBL	·libc_utimes_trampoline_addr(SB), RODATA, $8
DATA	·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB)

TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_futimes(SB)
GLOBL	·libc_futimes_trampoline_addr(SB), RODATA, $8
DATA	·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB)

TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_poll(SB)
GLOBL	·libc_poll_trampoline_addr(SB), RODATA, $8
DATA	·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB)

TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_madvise(SB)
GLOBL	·libc_madvise_trampoline_addr(SB), RODATA, $8
DATA	·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB)

TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mlock(SB)
GLOBL	·libc_mlock_trampoline_addr(SB), RODATA, $8
DATA	·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB)

TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mlockall(SB)
GLOBL	·libc_mlockall_trampoline_addr(SB), RODATA, $8
DATA	·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB)

TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mprotect(SB)
GLOBL	·libc_mprotect_trampoline_addr(SB), RODATA, $8
DATA	·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB)

TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_msync(SB)
GLOBL	·libc_msync_trampoline_addr(SB), RODATA, $8
DATA	·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB)

TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_munlock(SB)
GLOBL	·libc_munlock_trampoline_addr(SB), RODATA, $8
DATA	·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB)

TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_munlockall(SB)
GLOBL	·libc_munlockall_trampoline_addr(SB), RODATA, $8
DATA	·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB)

TEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pipe2(SB)
GLOBL	·libc_pipe2_trampoline_addr(SB), RODATA, $8
DATA	·libc_pipe2_trampoline_addr(SB)/8, $libc_pipe2_trampoline<>(SB)

TEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getdents(SB)
GLOBL	·libc_getdents_trampoline_addr(SB), RODATA, $8
DATA	·libc_getdents_trampoline_addr(SB)/8, $libc_getdents_trampoline<>(SB)

TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getcwd(SB)
GLOBL	·libc_getcwd_trampoline_addr(SB), RODATA, $8
DATA	·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB)

TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_ioctl(SB)
GLOBL	·libc_ioctl_trampoline_addr(SB), RODATA, $8
DATA	·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB)

TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sysctl(SB)
GLOBL	·libc_sysctl_trampoline_addr(SB), RODATA, $8
DATA	·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)

TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_ppoll(SB)
GLOBL	·libc_ppoll_trampoline_addr(SB), RODATA, $8
DATA	·libc_ppoll_trampoline_addr(SB)/8, $libc_ppoll_trampoline<>(SB)

TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_access(SB)
GLOBL	·libc_access_trampoline_addr(SB), RODATA, $8
DATA	·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB)

TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_adjtime(SB)
GLOBL	·libc_adjtime_trampoline_addr(SB), RODATA, $8
DATA	·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB)

TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chdir(SB)
GLOBL	·libc_chdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB)

TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chflags(SB)
GLOBL	·libc_chflags_trampoline_addr(SB), RODATA, $8
DATA	·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB)

TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chmod(SB)
GLOBL	·libc_chmod_trampoline_addr(SB), RODATA, $8
DATA	·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB)

TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chown(SB)
GLOBL	·libc_chown_trampoline_addr(SB), RODATA, $8
DATA	·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB)

TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_chroot(SB)
GLOBL	·libc_chroot_trampoline_addr(SB), RODATA, $8
DATA	·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB)

TEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_clock_gettime(SB)
GLOBL	·libc_clock_gettime_trampoline_addr(SB), RODATA, $8
DATA	·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB)

TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_close(SB)
GLOBL	·libc_close_trampoline_addr(SB), RODATA, $8
DATA	·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB)

TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_dup(SB)
GLOBL	·libc_dup_trampoline_addr(SB), RODATA, $8
DATA	·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB)

TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_dup2(SB)
GLOBL	·libc_dup2_trampoline_addr(SB), RODATA, $8
DATA	·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB)

TEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_dup3(SB)
GLOBL	·libc_dup3_trampoline_addr(SB), RODATA, $8
DATA	·libc_dup3_trampoline_addr(SB)/8, $libc_dup3_trampoline<>(SB)

TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_exit(SB)
GLOBL	·libc_exit_trampoline_addr(SB), RODATA, $8
DATA	·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB)

TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_faccessat(SB)
GLOBL	·libc_faccessat_trampoline_addr(SB), RODATA, $8
DATA	·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB)

TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchdir(SB)
GLOBL	·libc_fchdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB)

TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchflags(SB)
GLOBL	·libc_fchflags_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB)

TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchmod(SB)
GLOBL	·libc_fchmod_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB)

TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchmodat(SB)
GLOBL	·libc_fchmodat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB)

TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchown(SB)
GLOBL	·libc_fchown_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB)

TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fchownat(SB)
GLOBL	·libc_fchownat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB)

TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_flock(SB)
GLOBL	·libc_flock_trampoline_addr(SB), RODATA, $8
DATA	·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB)

TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fpathconf(SB)
GLOBL	·libc_fpathconf_trampoline_addr(SB), RODATA, $8
DATA	·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB)

TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fstat(SB)
GLOBL	·libc_fstat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB)

TEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fstatat(SB)
GLOBL	·libc_fstatat_trampoline_addr(SB), RODATA, $8
DATA	·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB)

TEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fstatfs(SB)
GLOBL	·libc_fstatfs_trampoline_addr(SB), RODATA, $8
DATA	·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB)

TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_fsync(SB)
GLOBL	·libc_fsync_trampoline_addr(SB), RODATA, $8
DATA	·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB)

TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_ftruncate(SB)
GLOBL	·libc_ftruncate_trampoline_addr(SB), RODATA, $8
DATA	·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB)

TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getegid(SB)
GLOBL	·libc_getegid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB)

TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_geteuid(SB)
GLOBL	·libc_geteuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB)

TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getgid(SB)
GLOBL	·libc_getgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB)

TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpgid(SB)
GLOBL	·libc_getpgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB)

TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpgrp(SB)
GLOBL	·libc_getpgrp_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB)

TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpid(SB)
GLOBL	·libc_getpid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB)

TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getppid(SB)
GLOBL	·libc_getppid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB)

TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getpriority(SB)
GLOBL	·libc_getpriority_trampoline_addr(SB), RODATA, $8
DATA	·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB)

TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getrlimit(SB)
GLOBL	·libc_getrlimit_trampoline_addr(SB), RODATA, $8
DATA	·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB)

TEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getrtable(SB)
GLOBL	·libc_getrtable_trampoline_addr(SB), RODATA, $8
DATA	·libc_getrtable_trampoline_addr(SB)/8, $libc_getrtable_trampoline<>(SB)

TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getrusage(SB)
GLOBL	·libc_getrusage_trampoline_addr(SB), RODATA, $8
DATA	·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB)

TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getsid(SB)
GLOBL	·libc_getsid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB)

TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_gettimeofday(SB)
GLOBL	·libc_gettimeofday_trampoline_addr(SB), RODATA, $8
DATA	·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB)

TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_getuid(SB)
GLOBL	·libc_getuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB)

TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_issetugid(SB)
GLOBL	·libc_issetugid_trampoline_addr(SB), RODATA, $8
DATA	·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB)

TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_kill(SB)
GLOBL	·libc_kill_trampoline_addr(SB), RODATA, $8
DATA	·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB)

TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_kqueue(SB)
GLOBL	·libc_kqueue_trampoline_addr(SB), RODATA, $8
DATA	·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB)

TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_lchown(SB)
GLOBL	·libc_lchown_trampoline_addr(SB), RODATA, $8
DATA	·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB)

TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_link(SB)
GLOBL	·libc_link_trampoline_addr(SB), RODATA, $8
DATA	·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB)

TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_linkat(SB)
GLOBL	·libc_linkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB)

TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_listen(SB)
GLOBL	·libc_listen_trampoline_addr(SB), RODATA, $8
DATA	·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB)

TEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_lstat(SB)
GLOBL	·libc_lstat_trampoline_addr(SB), RODATA, $8
DATA	·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB)

TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkdir(SB)
GLOBL	·libc_mkdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB)

TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkdirat(SB)
GLOBL	·libc_mkdirat_trampoline_addr(SB), RODATA, $8
DATA	·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB)

TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkfifo(SB)
GLOBL	·libc_mkfifo_trampoline_addr(SB), RODATA, $8
DATA	·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB)

TEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mkfifoat(SB)
GLOBL	·libc_mkfifoat_trampoline_addr(SB), RODATA, $8
DATA	·libc_mkfifoat_trampoline_addr(SB)/8, $libc_mkfifoat_trampoline<>(SB)

TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mknod(SB)
GLOBL	·libc_mknod_trampoline_addr(SB), RODATA, $8
DATA	·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB)

TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mknodat(SB)
GLOBL	·libc_mknodat_trampoline_addr(SB), RODATA, $8
DATA	·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB)

TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_nanosleep(SB)
GLOBL	·libc_nanosleep_trampoline_addr(SB), RODATA, $8
DATA	·libc_nanosleep_trampoline_addr(SB)/8, $libc_nanosleep_trampoline<>(SB)

TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_open(SB)
GLOBL	·libc_open_trampoline_addr(SB), RODATA, $8
DATA	·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB)

TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_openat(SB)
GLOBL	·libc_openat_trampoline_addr(SB), RODATA, $8
DATA	·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB)

TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pathconf(SB)
GLOBL	·libc_pathconf_trampoline_addr(SB), RODATA, $8
DATA	·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB)

TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pread(SB)
GLOBL	·libc_pread_trampoline_addr(SB), RODATA, $8
DATA	·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB)

TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_pwrite(SB)
GLOBL	·libc_pwrite_trampoline_addr(SB), RODATA, $8
DATA	·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)

TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_read(SB)
GLOBL	·libc_read_trampoline_addr(SB), RODATA, $8
DATA	·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB)

TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_readlink(SB)
GLOBL	·libc_readlink_trampoline_addr(SB), RODATA, $8
DATA	·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB)

TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_readlinkat(SB)
GLOBL	·libc_readlinkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB)

TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_rename(SB)
GLOBL	·libc_rename_trampoline_addr(SB), RODATA, $8
DATA	·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB)

TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_renameat(SB)
GLOBL	·libc_renameat_trampoline_addr(SB), RODATA, $8
DATA	·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB)

TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_revoke(SB)
GLOBL	·libc_revoke_trampoline_addr(SB), RODATA, $8
DATA	·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB)

TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_rmdir(SB)
GLOBL	·libc_rmdir_trampoline_addr(SB), RODATA, $8
DATA	·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB)

TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_lseek(SB)
GLOBL	·libc_lseek_trampoline_addr(SB), RODATA, $8
DATA	·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB)

TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_select(SB)
GLOBL	·libc_select_trampoline_addr(SB), RODATA, $8
DATA	·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB)

TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setegid(SB)
GLOBL	·libc_setegid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB)

TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_seteuid(SB)
GLOBL	·libc_seteuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB)

TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setgid(SB)
GLOBL	·libc_setgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB)

TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setlogin(SB)
GLOBL	·libc_setlogin_trampoline_addr(SB), RODATA, $8
DATA	·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB)

TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setpgid(SB)
GLOBL	·libc_setpgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB)

TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setpriority(SB)
GLOBL	·libc_setpriority_trampoline_addr(SB), RODATA, $8
DATA	·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB)

TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setregid(SB)
GLOBL	·libc_setregid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB)

TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setreuid(SB)
GLOBL	·libc_setreuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB)

TEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setresgid(SB)
GLOBL	·libc_setresgid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setresgid_trampoline_addr(SB)/8, $libc_setresgid_trampoline<>(SB)

TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setresuid(SB)
GLOBL	·libc_setresuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB)

TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setrtable(SB)
GLOBL	·libc_setrtable_trampoline_addr(SB), RODATA, $8
DATA	·libc_setrtable_trampoline_addr(SB)/8, $libc_setrtable_trampoline<>(SB)

TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setsid(SB)
GLOBL	·libc_setsid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB)

TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_settimeofday(SB)
GLOBL	·libc_settimeofday_trampoline_addr(SB), RODATA, $8
DATA	·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB)

TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_setuid(SB)
GLOBL	·libc_setuid_trampoline_addr(SB), RODATA, $8
DATA	·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB)

TEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_stat(SB)
GLOBL	·libc_stat_trampoline_addr(SB), RODATA, $8
DATA	·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB)

TEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_statfs(SB)
GLOBL	·libc_statfs_trampoline_addr(SB), RODATA, $8
DATA	·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB)

TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_symlink(SB)
GLOBL	·libc_symlink_trampoline_addr(SB), RODATA, $8
DATA	·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB)

TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_symlinkat(SB)
GLOBL	·libc_symlinkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB)

TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_sync(SB)
GLOBL	·libc_sync_trampoline_addr(SB), RODATA, $8
DATA	·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB)

TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_truncate(SB)
GLOBL	·libc_truncate_trampoline_addr(SB), RODATA, $8
DATA	·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB)

TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_umask(SB)
GLOBL	·libc_umask_trampoline_addr(SB), RODATA, $8
DATA	·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB)

TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_unlink(SB)
GLOBL	·libc_unlink_trampoline_addr(SB), RODATA, $8
DATA	·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB)

TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_unlinkat(SB)
GLOBL	·libc_unlinkat_trampoline_addr(SB), RODATA, $8
DATA	·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB)

TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_unmount(SB)
GLOBL	·libc_unmount_trampoline_addr(SB), RODATA, $8
DATA	·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB)

TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_write(SB)
GLOBL	·libc_write_trampoline_addr(SB), RODATA, $8
DATA	·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB)

TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_mmap(SB)
GLOBL	·libc_mmap_trampoline_addr(SB), RODATA, $8
DATA	·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB)

TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_munmap(SB)
GLOBL	·libc_munmap_trampoline_addr(SB), RODATA, $8
DATA	·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB)

TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0
	JMP	libc_utimensat(SB)
GLOBL	·libc_utimensat_trampoline_addr(SB), RODATA, $8
DATA	·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB)
 07070100000E7D000081A4000000000000000000000001645E367C0000EA0E000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go    // go run mksyscall_solaris.go -tags solaris,amd64 syscall_solaris.go syscall_solaris_amd64.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build solaris && amd64
// +build solaris,amd64

package unix

import (
	"syscall"
	"unsafe"
)

//go:cgo_import_dynamic libc_pipe pipe "libc.so"
//go:cgo_import_dynamic libc_pipe2 pipe2 "libc.so"
//go:cgo_import_dynamic libc_getsockname getsockname "libsocket.so"
//go:cgo_import_dynamic libc_getcwd getcwd "libc.so"
//go:cgo_import_dynamic libc_getgroups getgroups "libc.so"
//go:cgo_import_dynamic libc_setgroups setgroups "libc.so"
//go:cgo_import_dynamic libc_wait4 wait4 "libc.so"
//go:cgo_import_dynamic libc_gethostname gethostname "libc.so"
//go:cgo_import_dynamic libc_utimes utimes "libc.so"
//go:cgo_import_dynamic libc_utimensat utimensat "libc.so"
//go:cgo_import_dynamic libc_fcntl fcntl "libc.so"
//go:cgo_import_dynamic libc_futimesat futimesat "libc.so"
//go:cgo_import_dynamic libc_accept accept "libsocket.so"
//go:cgo_import_dynamic libc___xnet_recvmsg __xnet_recvmsg "libsocket.so"
//go:cgo_import_dynamic libc___xnet_sendmsg __xnet_sendmsg "libsocket.so"
//go:cgo_import_dynamic libc_acct acct "libc.so"
//go:cgo_import_dynamic libc___makedev __makedev "libc.so"
//go:cgo_import_dynamic libc___major __major "libc.so"
//go:cgo_import_dynamic libc___minor __minor "libc.so"
//go:cgo_import_dynamic libc_ioctl ioctl "libc.so"
//go:cgo_import_dynamic libc_poll poll "libc.so"
//go:cgo_import_dynamic libc_access access "libc.so"
//go:cgo_import_dynamic libc_adjtime adjtime "libc.so"
//go:cgo_import_dynamic libc_chdir chdir "libc.so"
//go:cgo_import_dynamic libc_chmod chmod "libc.so"
//go:cgo_import_dynamic libc_chown chown "libc.so"
//go:cgo_import_dynamic libc_chroot chroot "libc.so"
//go:cgo_import_dynamic libc_clockgettime clockgettime "libc.so"
//go:cgo_import_dynamic libc_close close "libc.so"
//go:cgo_import_dynamic libc_creat creat "libc.so"
//go:cgo_import_dynamic libc_dup dup "libc.so"
//go:cgo_import_dynamic libc_dup2 dup2 "libc.so"
//go:cgo_import_dynamic libc_exit exit "libc.so"
//go:cgo_import_dynamic libc_faccessat faccessat "libc.so"
//go:cgo_import_dynamic libc_fchdir fchdir "libc.so"
//go:cgo_import_dynamic libc_fchmod fchmod "libc.so"
//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.so"
//go:cgo_import_dynamic libc_fchown fchown "libc.so"
//go:cgo_import_dynamic libc_fchownat fchownat "libc.so"
//go:cgo_import_dynamic libc_fdatasync fdatasync "libc.so"
//go:cgo_import_dynamic libc_flock flock "libc.so"
//go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so"
//go:cgo_import_dynamic libc_fstat fstat "libc.so"
//go:cgo_import_dynamic libc_fstatat fstatat "libc.so"
//go:cgo_import_dynamic libc_fstatvfs fstatvfs "libc.so"
//go:cgo_import_dynamic libc_getdents getdents "libc.so"
//go:cgo_import_dynamic libc_getgid getgid "libc.so"
//go:cgo_import_dynamic libc_getpid getpid "libc.so"
//go:cgo_import_dynamic libc_getpgid getpgid "libc.so"
//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.so"
//go:cgo_import_dynamic libc_geteuid geteuid "libc.so"
//go:cgo_import_dynamic libc_getegid getegid "libc.so"
//go:cgo_import_dynamic libc_getppid getppid "libc.so"
//go:cgo_import_dynamic libc_getpriority getpriority "libc.so"
//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so"
//go:cgo_import_dynamic libc_getrusage getrusage "libc.so"
//go:cgo_import_dynamic libc_getsid getsid "libc.so"
//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so"
//go:cgo_import_dynamic libc_getuid getuid "libc.so"
//go:cgo_import_dynamic libc_kill kill "libc.so"
//go:cgo_import_dynamic libc_lchown lchown "libc.so"
//go:cgo_import_dynamic libc_link link "libc.so"
//go:cgo_import_dynamic libc___xnet_llisten __xnet_llisten "libsocket.so"
//go:cgo_import_dynamic libc_lstat lstat "libc.so"
//go:cgo_import_dynamic libc_madvise madvise "libc.so"
//go:cgo_import_dynamic libc_mkdir mkdir "libc.so"
//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.so"
//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.so"
//go:cgo_import_dynamic libc_mkfifoat mkfifoat "libc.so"
//go:cgo_import_dynamic libc_mknod mknod "libc.so"
//go:cgo_import_dynamic libc_mknodat mknodat "libc.so"
//go:cgo_import_dynamic libc_mlock mlock "libc.so"
//go:cgo_import_dynamic libc_mlockall mlockall "libc.so"
//go:cgo_import_dynamic libc_mprotect mprotect "libc.so"
//go:cgo_import_dynamic libc_msync msync "libc.so"
//go:cgo_import_dynamic libc_munlock munlock "libc.so"
//go:cgo_import_dynamic libc_munlockall munlockall "libc.so"
//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so"
//go:cgo_import_dynamic libc_open open "libc.so"
//go:cgo_import_dynamic libc_openat openat "libc.so"
//go:cgo_import_dynamic libc_pathconf pathconf "libc.so"
//go:cgo_import_dynamic libc_pause pause "libc.so"
//go:cgo_import_dynamic libc_pread pread "libc.so"
//go:cgo_import_dynamic libc_pwrite pwrite "libc.so"
//go:cgo_import_dynamic libc_read read "libc.so"
//go:cgo_import_dynamic libc_readlink readlink "libc.so"
//go:cgo_import_dynamic libc_rename rename "libc.so"
//go:cgo_import_dynamic libc_renameat renameat "libc.so"
//go:cgo_import_dynamic libc_rmdir rmdir "libc.so"
//go:cgo_import_dynamic libc_lseek lseek "libc.so"
//go:cgo_import_dynamic libc_select select "libc.so"
//go:cgo_import_dynamic libc_setegid setegid "libc.so"
//go:cgo_import_dynamic libc_seteuid seteuid "libc.so"
//go:cgo_import_dynamic libc_setgid setgid "libc.so"
//go:cgo_import_dynamic libc_sethostname sethostname "libc.so"
//go:cgo_import_dynamic libc_setpgid setpgid "libc.so"
//go:cgo_import_dynamic libc_setpriority setpriority "libc.so"
//go:cgo_import_dynamic libc_setregid setregid "libc.so"
//go:cgo_import_dynamic libc_setreuid setreuid "libc.so"
//go:cgo_import_dynamic libc_setsid setsid "libc.so"
//go:cgo_import_dynamic libc_setuid setuid "libc.so"
//go:cgo_import_dynamic libc_shutdown shutdown "libsocket.so"
//go:cgo_import_dynamic libc_stat stat "libc.so"
//go:cgo_import_dynamic libc_statvfs statvfs "libc.so"
//go:cgo_import_dynamic libc_symlink symlink "libc.so"
//go:cgo_import_dynamic libc_sync sync "libc.so"
//go:cgo_import_dynamic libc_sysconf sysconf "libc.so"
//go:cgo_import_dynamic libc_times times "libc.so"
//go:cgo_import_dynamic libc_truncate truncate "libc.so"
//go:cgo_import_dynamic libc_fsync fsync "libc.so"
//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.so"
//go:cgo_import_dynamic libc_umask umask "libc.so"
//go:cgo_import_dynamic libc_uname uname "libc.so"
//go:cgo_import_dynamic libc_umount umount "libc.so"
//go:cgo_import_dynamic libc_unlink unlink "libc.so"
//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.so"
//go:cgo_import_dynamic libc_ustat ustat "libc.so"
//go:cgo_import_dynamic libc_utime utime "libc.so"
//go:cgo_import_dynamic libc___xnet_bind __xnet_bind "libsocket.so"
//go:cgo_import_dynamic libc___xnet_connect __xnet_connect "libsocket.so"
//go:cgo_import_dynamic libc_mmap mmap "libc.so"
//go:cgo_import_dynamic libc_munmap munmap "libc.so"
//go:cgo_import_dynamic libc_sendfile sendfile "libsendfile.so"
//go:cgo_import_dynamic libc___xnet_sendto __xnet_sendto "libsocket.so"
//go:cgo_import_dynamic libc___xnet_socket __xnet_socket "libsocket.so"
//go:cgo_import_dynamic libc___xnet_socketpair __xnet_socketpair "libsocket.so"
//go:cgo_import_dynamic libc_write write "libc.so"
//go:cgo_import_dynamic libc___xnet_getsockopt __xnet_getsockopt "libsocket.so"
//go:cgo_import_dynamic libc_getpeername getpeername "libsocket.so"
//go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so"
//go:cgo_import_dynamic libc_recvfrom recvfrom "libsocket.so"
//go:cgo_import_dynamic libc_port_create port_create "libc.so"
//go:cgo_import_dynamic libc_port_associate port_associate "libc.so"
//go:cgo_import_dynamic libc_port_dissociate port_dissociate "libc.so"
//go:cgo_import_dynamic libc_port_get port_get "libc.so"
//go:cgo_import_dynamic libc_port_getn port_getn "libc.so"
//go:cgo_import_dynamic libc_putmsg putmsg "libc.so"
//go:cgo_import_dynamic libc_getmsg getmsg "libc.so"

//go:linkname procpipe libc_pipe
//go:linkname procpipe2 libc_pipe2
//go:linkname procgetsockname libc_getsockname
//go:linkname procGetcwd libc_getcwd
//go:linkname procgetgroups libc_getgroups
//go:linkname procsetgroups libc_setgroups
//go:linkname procwait4 libc_wait4
//go:linkname procgethostname libc_gethostname
//go:linkname procutimes libc_utimes
//go:linkname procutimensat libc_utimensat
//go:linkname procfcntl libc_fcntl
//go:linkname procfutimesat libc_futimesat
//go:linkname procaccept libc_accept
//go:linkname proc__xnet_recvmsg libc___xnet_recvmsg
//go:linkname proc__xnet_sendmsg libc___xnet_sendmsg
//go:linkname procacct libc_acct
//go:linkname proc__makedev libc___makedev
//go:linkname proc__major libc___major
//go:linkname proc__minor libc___minor
//go:linkname procioctl libc_ioctl
//go:linkname procpoll libc_poll
//go:linkname procAccess libc_access
//go:linkname procAdjtime libc_adjtime
//go:linkname procChdir libc_chdir
//go:linkname procChmod libc_chmod
//go:linkname procChown libc_chown
//go:linkname procChroot libc_chroot
//go:linkname procClockGettime libc_clockgettime
//go:linkname procClose libc_close
//go:linkname procCreat libc_creat
//go:linkname procDup libc_dup
//go:linkname procDup2 libc_dup2
//go:linkname procExit libc_exit
//go:linkname procFaccessat libc_faccessat
//go:linkname procFchdir libc_fchdir
//go:linkname procFchmod libc_fchmod
//go:linkname procFchmodat libc_fchmodat
//go:linkname procFchown libc_fchown
//go:linkname procFchownat libc_fchownat
//go:linkname procFdatasync libc_fdatasync
//go:linkname procFlock libc_flock
//go:linkname procFpathconf libc_fpathconf
//go:linkname procFstat libc_fstat
//go:linkname procFstatat libc_fstatat
//go:linkname procFstatvfs libc_fstatvfs
//go:linkname procGetdents libc_getdents
//go:linkname procGetgid libc_getgid
//go:linkname procGetpid libc_getpid
//go:linkname procGetpgid libc_getpgid
//go:linkname procGetpgrp libc_getpgrp
//go:linkname procGeteuid libc_geteuid
//go:linkname procGetegid libc_getegid
//go:linkname procGetppid libc_getppid
//go:linkname procGetpriority libc_getpriority
//go:linkname procGetrlimit libc_getrlimit
//go:linkname procGetrusage libc_getrusage
//go:linkname procGetsid libc_getsid
//go:linkname procGettimeofday libc_gettimeofday
//go:linkname procGetuid libc_getuid
//go:linkname procKill libc_kill
//go:linkname procLchown libc_lchown
//go:linkname procLink libc_link
//go:linkname proc__xnet_llisten libc___xnet_llisten
//go:linkname procLstat libc_lstat
//go:linkname procMadvise libc_madvise
//go:linkname procMkdir libc_mkdir
//go:linkname procMkdirat libc_mkdirat
//go:linkname procMkfifo libc_mkfifo
//go:linkname procMkfifoat libc_mkfifoat
//go:linkname procMknod libc_mknod
//go:linkname procMknodat libc_mknodat
//go:linkname procMlock libc_mlock
//go:linkname procMlockall libc_mlockall
//go:linkname procMprotect libc_mprotect
//go:linkname procMsync libc_msync
//go:linkname procMunlock libc_munlock
//go:linkname procMunlockall libc_munlockall
//go:linkname procNanosleep libc_nanosleep
//go:linkname procOpen libc_open
//go:linkname procOpenat libc_openat
//go:linkname procPathconf libc_pathconf
//go:linkname procPause libc_pause
//go:linkname procpread libc_pread
//go:linkname procpwrite libc_pwrite
//go:linkname procread libc_read
//go:linkname procReadlink libc_readlink
//go:linkname procRename libc_rename
//go:linkname procRenameat libc_renameat
//go:linkname procRmdir libc_rmdir
//go:linkname proclseek libc_lseek
//go:linkname procSelect libc_select
//go:linkname procSetegid libc_setegid
//go:linkname procSeteuid libc_seteuid
//go:linkname procSetgid libc_setgid
//go:linkname procSethostname libc_sethostname
//go:linkname procSetpgid libc_setpgid
//go:linkname procSetpriority libc_setpriority
//go:linkname procSetregid libc_setregid
//go:linkname procSetreuid libc_setreuid
//go:linkname procSetsid libc_setsid
//go:linkname procSetuid libc_setuid
//go:linkname procshutdown libc_shutdown
//go:linkname procStat libc_stat
//go:linkname procStatvfs libc_statvfs
//go:linkname procSymlink libc_symlink
//go:linkname procSync libc_sync
//go:linkname procSysconf libc_sysconf
//go:linkname procTimes libc_times
//go:linkname procTruncate libc_truncate
//go:linkname procFsync libc_fsync
//go:linkname procFtruncate libc_ftruncate
//go:linkname procUmask libc_umask
//go:linkname procUname libc_uname
//go:linkname procumount libc_umount
//go:linkname procUnlink libc_unlink
//go:linkname procUnlinkat libc_unlinkat
//go:linkname procUstat libc_ustat
//go:linkname procUtime libc_utime
//go:linkname proc__xnet_bind libc___xnet_bind
//go:linkname proc__xnet_connect libc___xnet_connect
//go:linkname procmmap libc_mmap
//go:linkname procmunmap libc_munmap
//go:linkname procsendfile libc_sendfile
//go:linkname proc__xnet_sendto libc___xnet_sendto
//go:linkname proc__xnet_socket libc___xnet_socket
//go:linkname proc__xnet_socketpair libc___xnet_socketpair
//go:linkname procwrite libc_write
//go:linkname proc__xnet_getsockopt libc___xnet_getsockopt
//go:linkname procgetpeername libc_getpeername
//go:linkname procsetsockopt libc_setsockopt
//go:linkname procrecvfrom libc_recvfrom
//go:linkname procport_create libc_port_create
//go:linkname procport_associate libc_port_associate
//go:linkname procport_dissociate libc_port_dissociate
//go:linkname procport_get libc_port_get
//go:linkname procport_getn libc_port_getn
//go:linkname procputmsg libc_putmsg
//go:linkname procgetmsg libc_getmsg

var (
	procpipe,
	procpipe2,
	procgetsockname,
	procGetcwd,
	procgetgroups,
	procsetgroups,
	procwait4,
	procgethostname,
	procutimes,
	procutimensat,
	procfcntl,
	procfutimesat,
	procaccept,
	proc__xnet_recvmsg,
	proc__xnet_sendmsg,
	procacct,
	proc__makedev,
	proc__major,
	proc__minor,
	procioctl,
	procpoll,
	procAccess,
	procAdjtime,
	procChdir,
	procChmod,
	procChown,
	procChroot,
	procClockGettime,
	procClose,
	procCreat,
	procDup,
	procDup2,
	procExit,
	procFaccessat,
	procFchdir,
	procFchmod,
	procFchmodat,
	procFchown,
	procFchownat,
	procFdatasync,
	procFlock,
	procFpathconf,
	procFstat,
	procFstatat,
	procFstatvfs,
	procGetdents,
	procGetgid,
	procGetpid,
	procGetpgid,
	procGetpgrp,
	procGeteuid,
	procGetegid,
	procGetppid,
	procGetpriority,
	procGetrlimit,
	procGetrusage,
	procGetsid,
	procGettimeofday,
	procGetuid,
	procKill,
	procLchown,
	procLink,
	proc__xnet_llisten,
	procLstat,
	procMadvise,
	procMkdir,
	procMkdirat,
	procMkfifo,
	procMkfifoat,
	procMknod,
	procMknodat,
	procMlock,
	procMlockall,
	procMprotect,
	procMsync,
	procMunlock,
	procMunlockall,
	procNanosleep,
	procOpen,
	procOpenat,
	procPathconf,
	procPause,
	procpread,
	procpwrite,
	procread,
	procReadlink,
	procRename,
	procRenameat,
	procRmdir,
	proclseek,
	procSelect,
	procSetegid,
	procSeteuid,
	procSetgid,
	procSethostname,
	procSetpgid,
	procSetpriority,
	procSetregid,
	procSetreuid,
	procSetsid,
	procSetuid,
	procshutdown,
	procStat,
	procStatvfs,
	procSymlink,
	procSync,
	procSysconf,
	procTimes,
	procTruncate,
	procFsync,
	procFtruncate,
	procUmask,
	procUname,
	procumount,
	procUnlink,
	procUnlinkat,
	procUstat,
	procUtime,
	proc__xnet_bind,
	proc__xnet_connect,
	procmmap,
	procmunmap,
	procsendfile,
	proc__xnet_sendto,
	proc__xnet_socket,
	proc__xnet_socketpair,
	procwrite,
	proc__xnet_getsockopt,
	procgetpeername,
	procsetsockopt,
	procrecvfrom,
	procport_create,
	procport_associate,
	procport_dissociate,
	procport_get,
	procport_getn,
	procputmsg,
	procgetmsg syscallFunc
)

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pipe(p *[2]_C_int) (n int, err error) {
	r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procpipe)), 1, uintptr(unsafe.Pointer(p)), 0, 0, 0, 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pipe2(p *[2]_C_int, flags int) (err error) {
	_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procpipe2)), 2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetsockname)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getcwd(buf []byte) (n int, err error) {
	var _p0 *byte
	if len(buf) > 0 {
		_p0 = &buf[0]
	}
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetcwd)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), 0, 0, 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
	r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(ngid int, gid *_Gid_t) (err error) {
	_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procsetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func wait4(pid int32, statusp *_C_int, options int, rusage *Rusage) (wpid int32, err error) {
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwait4)), 4, uintptr(pid), uintptr(unsafe.Pointer(statusp)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
	wpid = int32(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func gethostname(buf []byte) (n int, err error) {
	var _p0 *byte
	if len(buf) > 0 {
		_p0 = &buf[0]
	}
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgethostname)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), 0, 0, 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, times *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimes)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimensat(fd int, path string, times *[2]Timespec, flag int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimensat)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flag), 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fcntl(fd int, cmd int, arg int) (val int, err error) {
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(arg), 0, 0, 0)
	val = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func futimesat(fildes int, path *byte, times *[2]Timeval) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfutimesat)), 3, uintptr(fildes), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)), 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procaccept)), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_recvmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_sendmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func acct(path *byte) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procacct)), 1, uintptr(unsafe.Pointer(path)), 0, 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func __makedev(version int, major uint, minor uint) (val uint64) {
	r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__makedev)), 3, uintptr(version), uintptr(major), uintptr(minor), 0, 0, 0)
	val = uint64(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func __major(version int, dev uint64) (val uint) {
	r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__major)), 2, uintptr(version), uintptr(dev), 0, 0, 0, 0)
	val = uint(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func __minor(version int, dev uint64) (val uint) {
	r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__minor)), 2, uintptr(version), uintptr(dev), 0, 0, 0, 0)
	val = uint(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctlRet(fd int, req int, arg uintptr) (ret int, err error) {
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctlPtrRet(fd int, req int, arg unsafe.Pointer) (ret int, err error) {
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0)
	ret = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpoll)), 3, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout), 0, 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Access(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procAccess)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procAdjtime)), 2, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChdir)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chmod(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChmod)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChown)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chroot(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChroot)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ClockGettime(clockid int32, time *Timespec) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procClockGettime)), 2, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Close(fd int) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procClose)), 1, uintptr(fd), 0, 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Creat(path string, mode uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procCreat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup(fd int) (nfd int, err error) {
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup)), 1, uintptr(fd), 0, 0, 0, 0, 0)
	nfd = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup2(oldfd int, newfd int) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup2)), 2, uintptr(oldfd), uintptr(newfd), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Exit(code int) {
	sysvicall6(uintptr(unsafe.Pointer(&procExit)), 1, uintptr(code), 0, 0, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFaccessat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchdir(fd int) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchdir)), 1, uintptr(fd), 0, 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmod(fd int, mode uint32) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmod)), 2, uintptr(fd), uintptr(mode), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchown)), 3, uintptr(fd), uintptr(uid), uintptr(gid), 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchownat)), 5, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fdatasync(fd int) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFdatasync)), 1, uintptr(fd), 0, 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Flock(fd int, how int) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFlock)), 2, uintptr(fd), uintptr(how), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fpathconf(fd int, name int) (val int, err error) {
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFpathconf)), 2, uintptr(fd), uintptr(name), 0, 0, 0, 0)
	val = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstat(fd int, stat *Stat_t) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstat)), 2, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstatat)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatvfs(fd int, vfsstat *Statvfs_t) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstatvfs)), 2, uintptr(fd), uintptr(unsafe.Pointer(vfsstat)), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getdents(fd int, buf []byte, basep *uintptr) (n int, err error) {
	var _p0 *byte
	if len(buf) > 0 {
		_p0 = &buf[0]
	}
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetdents)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetgid)), 0, 0, 0, 0, 0, 0, 0)
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpid() (pid int) {
	r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpid)), 0, 0, 0, 0, 0, 0, 0)
	pid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgid(pid int) (pgid int, err error) {
	r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0)
	pgid = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgrp() (pgid int, err error) {
	r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgrp)), 0, 0, 0, 0, 0, 0, 0)
	pgid = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (euid int) {
	r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGeteuid)), 0, 0, 0, 0, 0, 0, 0)
	euid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGetegid)), 0, 0, 0, 0, 0, 0, 0)
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getppid() (ppid int) {
	r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGetppid)), 0, 0, 0, 0, 0, 0, 0)
	ppid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpriority(which int, who int) (n int, err error) {
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetpriority)), 2, uintptr(which), uintptr(who), 0, 0, 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(which int, lim *Rlimit) (err error) {
	_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrusage(who int, rusage *Rusage) (err error) {
	_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrusage)), 2, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getsid(pid int) (sid int, err error) {
	r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetsid)), 1, uintptr(pid), 0, 0, 0, 0, 0)
	sid = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gettimeofday(tv *Timeval) (err error) {
	_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGettimeofday)), 1, uintptr(unsafe.Pointer(tv)), 0, 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetuid)), 0, 0, 0, 0, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kill(pid int, signum syscall.Signal) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procKill)), 2, uintptr(pid), uintptr(signum), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLchown)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Link(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLink)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, backlog int) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_llisten)), 2, uintptr(s), uintptr(backlog), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lstat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLstat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Madvise(b []byte, advice int) (err error) {
	var _p0 *byte
	if len(b) > 0 {
		_p0 = &b[0]
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMadvise)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(advice), 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdir(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkdir)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdirat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkdirat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifo(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifo)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifoat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknod(path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMknod)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMknodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlock(b []byte) (err error) {
	var _p0 *byte
	if len(b) > 0 {
		_p0 = &b[0]
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlock)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mlockall(flags int) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlockall)), 1, uintptr(flags), 0, 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mprotect(b []byte, prot int) (err error) {
	var _p0 *byte
	if len(b) > 0 {
		_p0 = &b[0]
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMprotect)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(prot), 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Msync(b []byte, flags int) (err error) {
	var _p0 *byte
	if len(b) > 0 {
		_p0 = &b[0]
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMsync)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(flags), 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlock(b []byte) (err error) {
	var _p0 *byte
	if len(b) > 0 {
		_p0 = &b[0]
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlock)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Munlockall() (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlockall)), 0, 0, 0, 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procNanosleep)), 2, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Open(path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procOpen)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procOpenat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pathconf(path string, name int) (val int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPathconf)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0, 0, 0, 0)
	val = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pause() (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPause)), 0, 0, 0, 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 *byte
	if len(p) > 0 {
		_p0 = &p[0]
	}
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpread)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 *byte
	if len(p) > 0 {
		_p0 = &p[0]
	}
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpwrite)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func read(fd int, p []byte) (n int, err error) {
	var _p0 *byte
	if len(p) > 0 {
		_p0 = &p[0]
	}
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procread)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlink(path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	if len(buf) > 0 {
		_p1 = &buf[0]
	}
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procReadlink)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(len(buf)), 0, 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rename(from string, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRename)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(oldpath)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(newpath)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRenameat)), 4, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rmdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRmdir)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proclseek)), 3, uintptr(fd), uintptr(offset), uintptr(whence), 0, 0, 0)
	newoffset = int64(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSelect)), 5, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setegid(egid int) (err error) {
	_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetegid)), 1, uintptr(egid), 0, 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seteuid(euid int) (err error) {
	_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSeteuid)), 1, uintptr(euid), 0, 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setgid(gid int) (err error) {
	_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetgid)), 1, uintptr(gid), 0, 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sethostname(p []byte) (err error) {
	var _p0 *byte
	if len(p) > 0 {
		_p0 = &p[0]
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSethostname)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpgid(pid int, pgid int) (err error) {
	_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetpgid)), 2, uintptr(pid), uintptr(pgid), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpriority(which int, who int, prio int) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSetpriority)), 3, uintptr(which), uintptr(who), uintptr(prio), 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setregid(rgid int, egid int) (err error) {
	_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetregid)), 2, uintptr(rgid), uintptr(egid), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setreuid(ruid int, euid int) (err error) {
	_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetreuid)), 2, uintptr(ruid), uintptr(euid), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setsid() (pid int, err error) {
	r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetsid)), 0, 0, 0, 0, 0, 0, 0)
	pid = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setuid(uid int) (err error) {
	_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetuid)), 1, uintptr(uid), 0, 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(s int, how int) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procshutdown)), 2, uintptr(s), uintptr(how), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Stat(path string, stat *Stat_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procStat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Statvfs(path string, vfsstat *Statvfs_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procStatvfs)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(vfsstat)), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlink(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSymlink)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sync() (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSync)), 0, 0, 0, 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sysconf(which int) (n int64, err error) {
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSysconf)), 1, uintptr(which), 0, 0, 0, 0, 0)
	n = int64(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Times(tms *Tms) (ticks uintptr, err error) {
	r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procTimes)), 1, uintptr(unsafe.Pointer(tms)), 0, 0, 0, 0, 0)
	ticks = uintptr(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procTruncate)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fsync(fd int) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFsync)), 1, uintptr(fd), 0, 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFtruncate)), 2, uintptr(fd), uintptr(length), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Umask(mask int) (oldmask int) {
	r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procUmask)), 1, uintptr(mask), 0, 0, 0, 0, 0)
	oldmask = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Uname(buf *Utsname) (err error) {
	_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procUname)), 1, uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unmount(target string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(target)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procumount)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlink(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlink)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlinkat(dirfd int, path string, flags int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlinkat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ustat(dev int, ubuf *Ustat_t) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUstat)), 2, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Utime(path string, buf *Utimbuf) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUtime)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_bind)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_connect)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmmap)), 6, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
	ret = uintptr(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func munmap(addr uintptr, length uintptr) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmunmap)), 2, uintptr(addr), uintptr(length), 0, 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsendfile)), 4, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)
	written = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 *byte
	if len(buf) > 0 {
		_p0 = &buf[0]
	}
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_sendto)), 6, uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_socket)), 3, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&proc__xnet_socketpair)), 4, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func write(fd int, p []byte) (n int, err error) {
	var _p0 *byte
	if len(p) > 0 {
		_p0 = &p[0]
	}
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwrite)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_getsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetpeername)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsetsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 *byte
	if len(p) > 0 {
		_p0 = &p[0]
	}
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procrecvfrom)), 6, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func port_create() (n int, err error) {
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_create)), 0, 0, 0, 0, 0, 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func port_associate(port int, source int, object uintptr, events int, user *byte) (n int, err error) {
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_associate)), 5, uintptr(port), uintptr(source), uintptr(object), uintptr(events), uintptr(unsafe.Pointer(user)), 0)
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func port_dissociate(port int, source int, object uintptr) (n int, err error) {
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_dissociate)), 3, uintptr(port), uintptr(source), uintptr(object), 0, 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func port_get(port int, pe *portEvent, timeout *Timespec) (n int, err error) {
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_get)), 3, uintptr(port), uintptr(unsafe.Pointer(pe)), uintptr(unsafe.Pointer(timeout)), 0, 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func port_getn(port int, pe *portEvent, max uint32, nget *uint32, timeout *Timespec) (n int, err error) {
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_getn)), 5, uintptr(port), uintptr(unsafe.Pointer(pe)), uintptr(max), uintptr(unsafe.Pointer(nget)), uintptr(unsafe.Pointer(timeout)), 0)
	n = int(r0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func putmsg(fd int, clptr *strbuf, dataptr *strbuf, flags int) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procputmsg)), 4, uintptr(fd), uintptr(unsafe.Pointer(clptr)), uintptr(unsafe.Pointer(dataptr)), uintptr(flags), 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getmsg(fd int, clptr *strbuf, dataptr *strbuf, flags *int) (err error) {
	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetmsg)), 4, uintptr(fd), uintptr(unsafe.Pointer(clptr)), uintptr(unsafe.Pointer(dataptr)), uintptr(unsafe.Pointer(flags)), 0, 0)
	if e1 != 0 {
		err = e1
	}
	return
}
  07070100000E7E000081A4000000000000000000000001645E367C0000787E000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go    // go run mksyscall.go -tags zos,s390x syscall_zos_s390x.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build zos && s390x
// +build zos,s390x

package unix

import (
	"unsafe"
)

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fcntl(fd int, cmd int, arg int) (val int, err error) {
	r0, _, e1 := syscall_syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
	val = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func read(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
	r0, _, e1 := syscall_syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func write(fd int, p []byte) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
	r0, _, e1 := syscall_syscall(SYS___ACCEPT_A, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := syscall_syscall(SYS___BIND_A, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
	_, _, e1 := syscall_syscall(SYS___CONNECT_A, uintptr(s), uintptr(addr), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getgroups(n int, list *_Gid_t) (nn int, err error) {
	r0, _, e1 := syscall_rawsyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	nn = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setgroups(n int, list *_Gid_t) (err error) {
	_, _, e1 := syscall_rawsyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
	_, _, e1 := syscall_syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
	_, _, e1 := syscall_syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socket(domain int, typ int, proto int) (fd int, err error) {
	r0, _, e1 := syscall_rawsyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
	_, _, e1 := syscall_rawsyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := syscall_rawsyscall(SYS___GETPEERNAME_A, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
	_, _, e1 := syscall_rawsyscall(SYS___GETSOCKNAME_A, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(SYS___RECVFROM_A, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall6(SYS___SENDTO_A, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := syscall_syscall(SYS___RECVMSG_A, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
	r0, _, e1 := syscall_syscall(SYS___SENDMSG_A, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
	r0, _, e1 := syscall_syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
	ret = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func munmap(addr uintptr, length uintptr) (err error) {
	_, _, e1 := syscall_syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctl(fd int, req int, arg uintptr) (err error) {
	_, _, e1 := syscall_syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) {
	_, _, e1 := syscall_syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Access(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(SYS___ACCESS_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(SYS___CHDIR_A, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(SYS___CHOWN_A, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chmod(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(SYS___CHMOD_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Creat(path string, mode uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall(SYS___CREAT_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup(oldfd int) (fd int, err error) {
	r0, _, e1 := syscall_syscall(SYS_DUP, uintptr(oldfd), 0, 0)
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Dup2(oldfd int, newfd int) (err error) {
	_, _, e1 := syscall_syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Errno2() (er2 int) {
	uer2, _, _ := syscall_syscall(SYS___ERRNO2, 0, 0, 0)
	er2 = int(uer2)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Err2ad() (eadd *int) {
	ueadd, _, _ := syscall_syscall(SYS___ERR2AD, 0, 0, 0)
	eadd = (*int)(unsafe.Pointer(ueadd))
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Exit(code int) {
	syscall_syscall(SYS_EXIT, uintptr(code), 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchdir(fd int) (err error) {
	_, _, e1 := syscall_syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchmod(fd int, mode uint32) (err error) {
	_, _, e1 := syscall_syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fchown(fd int, uid int, gid int) (err error) {
	_, _, e1 := syscall_syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func FcntlInt(fd uintptr, cmd int, arg int) (retval int, err error) {
	r0, _, e1 := syscall_syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
	retval = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func fstat(fd int, stat *Stat_LE_t) (err error) {
	_, _, e1 := syscall_syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fstatvfs(fd int, stat *Statvfs_t) (err error) {
	_, _, e1 := syscall_syscall(SYS_FSTATVFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Fsync(fd int) (err error) {
	_, _, e1 := syscall_syscall(SYS_FSYNC, uintptr(fd), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Ftruncate(fd int, length int64) (err error) {
	_, _, e1 := syscall_syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpagesize() (pgsize int) {
	r0, _, _ := syscall_syscall(SYS_GETPAGESIZE, 0, 0, 0)
	pgsize = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mprotect(b []byte, prot int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Msync(b []byte, flags int) (err error) {
	var _p0 unsafe.Pointer
	if len(b) > 0 {
		_p0 = unsafe.Pointer(&b[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Poll(fds []PollFd, timeout int) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(fds) > 0 {
		_p0 = unsafe.Pointer(&fds[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(SYS_POLL, uintptr(_p0), uintptr(len(fds)), uintptr(timeout))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Times(tms *Tms) (ticks uintptr, err error) {
	r0, _, e1 := syscall_syscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)
	ticks = uintptr(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func W_Getmntent(buff *byte, size int) (lastsys int, err error) {
	r0, _, e1 := syscall_syscall(SYS_W_GETMNTENT, uintptr(unsafe.Pointer(buff)), uintptr(size), 0)
	lastsys = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func W_Getmntent_A(buff *byte, size int) (lastsys int, err error) {
	r0, _, e1 := syscall_syscall(SYS___W_GETMNTENT_A, uintptr(unsafe.Pointer(buff)), uintptr(size), 0)
	lastsys = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func mount_LE(path string, filesystem string, fstype string, mtm uint32, parmlen int32, parm string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(filesystem)
	if err != nil {
		return
	}
	var _p2 *byte
	_p2, err = BytePtrFromString(fstype)
	if err != nil {
		return
	}
	var _p3 *byte
	_p3, err = BytePtrFromString(parm)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall6(SYS___MOUNT_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(mtm), uintptr(parmlen), uintptr(unsafe.Pointer(_p3)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func unmount(filesystem string, mtm int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(filesystem)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(SYS___UMOUNT_A, uintptr(unsafe.Pointer(_p0)), uintptr(mtm), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Chroot(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(SYS___CHROOT_A, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Uname(buf *Utsname) (err error) {
	_, _, e1 := syscall_rawsyscall(SYS___UNAME_A, uintptr(unsafe.Pointer(buf)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Gethostname(buf []byte) (err error) {
	var _p0 unsafe.Pointer
	if len(buf) > 0 {
		_p0 = unsafe.Pointer(&buf[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	_, _, e1 := syscall_syscall(SYS___GETHOSTNAME_A, uintptr(_p0), uintptr(len(buf)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getegid() (egid int) {
	r0, _, _ := syscall_rawsyscall(SYS_GETEGID, 0, 0, 0)
	egid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Geteuid() (uid int) {
	r0, _, _ := syscall_rawsyscall(SYS_GETEUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getgid() (gid int) {
	r0, _, _ := syscall_rawsyscall(SYS_GETGID, 0, 0, 0)
	gid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpid() (pid int) {
	r0, _, _ := syscall_rawsyscall(SYS_GETPID, 0, 0, 0)
	pid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpgid(pid int) (pgid int, err error) {
	r0, _, e1 := syscall_rawsyscall(SYS_GETPGID, uintptr(pid), 0, 0)
	pgid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getppid() (pid int) {
	r0, _, _ := syscall_rawsyscall(SYS_GETPPID, 0, 0, 0)
	pid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getpriority(which int, who int) (prio int, err error) {
	r0, _, e1 := syscall_syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
	prio = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getrlimit(resource int, rlim *Rlimit) (err error) {
	_, _, e1 := syscall_rawsyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func getrusage(who int, rusage *rusage_zos) (err error) {
	_, _, e1 := syscall_rawsyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getsid(pid int) (sid int, err error) {
	r0, _, e1 := syscall_rawsyscall(SYS_GETSID, uintptr(pid), 0, 0)
	sid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Getuid() (uid int) {
	r0, _, _ := syscall_rawsyscall(SYS_GETUID, 0, 0, 0)
	uid = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Kill(pid int, sig Signal) (err error) {
	_, _, e1 := syscall_rawsyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Lchown(path string, uid int, gid int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(SYS___LCHOWN_A, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Link(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(SYS___LINK_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Listen(s int, n int) (err error) {
	_, _, e1 := syscall_syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func lstat(path string, stat *Stat_LE_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(SYS___LSTAT_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkdir(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(SYS___MKDIR_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mkfifo(path string, mode uint32) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(SYS___MKFIFO_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Mknod(path string, mode uint32, dev int) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(SYS___MKNOD_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pread(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
	var _p0 unsafe.Pointer
	if len(p) > 0 {
		_p0 = unsafe.Pointer(&p[0])
	} else {
		_p0 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Readlink(path string, buf []byte) (n int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 unsafe.Pointer
	if len(buf) > 0 {
		_p1 = unsafe.Pointer(&buf[0])
	} else {
		_p1 = unsafe.Pointer(&_zero)
	}
	r0, _, e1 := syscall_syscall(SYS___READLINK_A, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
	n = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rename(from string, to string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(from)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(to)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(SYS___RENAME_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Rmdir(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(SYS___RMDIR_A, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Seek(fd int, offset int64, whence int) (off int64, err error) {
	r0, _, e1 := syscall_syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
	off = int64(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpriority(which int, who int, prio int) (err error) {
	_, _, e1 := syscall_syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setpgid(pid int, pgid int) (err error) {
	_, _, e1 := syscall_rawsyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setrlimit(resource int, lim *Rlimit) (err error) {
	_, _, e1 := syscall_rawsyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(lim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setregid(rgid int, egid int) (err error) {
	_, _, e1 := syscall_rawsyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setreuid(ruid int, euid int) (err error) {
	_, _, e1 := syscall_rawsyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setsid() (pid int, err error) {
	r0, _, e1 := syscall_rawsyscall(SYS_SETSID, 0, 0, 0)
	pid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setuid(uid int) (err error) {
	_, _, e1 := syscall_syscall(SYS_SETUID, uintptr(uid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Setgid(uid int) (err error) {
	_, _, e1 := syscall_syscall(SYS_SETGID, uintptr(uid), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Shutdown(fd int, how int) (err error) {
	_, _, e1 := syscall_syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func stat(path string, statLE *Stat_LE_t) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(SYS___STAT_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(statLE)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Symlink(path string, link string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = BytePtrFromString(link)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(SYS___SYMLINK_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Sync() {
	syscall_syscall(SYS_SYNC, 0, 0, 0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Truncate(path string, length int64) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(SYS___TRUNCATE_A, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Tcgetattr(fildes int, termptr *Termios) (err error) {
	_, _, e1 := syscall_syscall(SYS_TCGETATTR, uintptr(fildes), uintptr(unsafe.Pointer(termptr)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Tcsetattr(fildes int, when int, termptr *Termios) (err error) {
	_, _, e1 := syscall_syscall(SYS_TCSETATTR, uintptr(fildes), uintptr(when), uintptr(unsafe.Pointer(termptr)))
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Umask(mask int) (oldmask int) {
	r0, _, _ := syscall_syscall(SYS_UMASK, uintptr(mask), 0, 0)
	oldmask = int(r0)
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Unlink(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(SYS___UNLINK_A, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Utime(path string, utim *Utimbuf) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(SYS___UTIME_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(utim)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func open(path string, mode int, perm uint32) (fd int, err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	r0, _, e1 := syscall_syscall(SYS___OPEN_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
	fd = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func remove(path string) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(SYS_REMOVE, uintptr(unsafe.Pointer(_p0)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func waitpid(pid int, wstatus *_C_int, options int) (wpid int, err error) {
	r0, _, e1 := syscall_syscall(SYS_WAITPID, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options))
	wpid = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func gettimeofday(tv *timeval_zos) (err error) {
	_, _, e1 := syscall_rawsyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func pipe(p *[2]_C_int) (err error) {
	_, _, e1 := syscall_rawsyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func utimes(path string, timeval *[2]Timeval) (err error) {
	var _p0 *byte
	_p0, err = BytePtrFromString(path)
	if err != nil {
		return
	}
	_, _, e1 := syscall_syscall(SYS___UTIMES_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}

// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT

func Select(nmsgsfds int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (ret int, err error) {
	r0, _, e1 := syscall_syscall6(SYS_SELECT, uintptr(nmsgsfds), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
	ret = int(r0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}
  07070100000E7F000081A4000000000000000000000001645E367C00002FD0000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go   // go run mksysctl_openbsd.go
// Code generated by the command above; DO NOT EDIT.

//go:build 386 && openbsd
// +build 386,openbsd

package unix

type mibentry struct {
	ctlname string
	ctloid  []_C_int
}

var sysctlMib = []mibentry{
	{"ddb.console", []_C_int{9, 6}},
	{"ddb.log", []_C_int{9, 7}},
	{"ddb.max_line", []_C_int{9, 3}},
	{"ddb.max_width", []_C_int{9, 2}},
	{"ddb.panic", []_C_int{9, 5}},
	{"ddb.profile", []_C_int{9, 9}},
	{"ddb.radix", []_C_int{9, 1}},
	{"ddb.tab_stop_width", []_C_int{9, 4}},
	{"ddb.trigger", []_C_int{9, 8}},
	{"fs.posix.setuid", []_C_int{3, 1, 1}},
	{"hw.allowpowerdown", []_C_int{6, 22}},
	{"hw.byteorder", []_C_int{6, 4}},
	{"hw.cpuspeed", []_C_int{6, 12}},
	{"hw.diskcount", []_C_int{6, 10}},
	{"hw.disknames", []_C_int{6, 8}},
	{"hw.diskstats", []_C_int{6, 9}},
	{"hw.machine", []_C_int{6, 1}},
	{"hw.model", []_C_int{6, 2}},
	{"hw.ncpu", []_C_int{6, 3}},
	{"hw.ncpufound", []_C_int{6, 21}},
	{"hw.ncpuonline", []_C_int{6, 25}},
	{"hw.pagesize", []_C_int{6, 7}},
	{"hw.perfpolicy", []_C_int{6, 23}},
	{"hw.physmem", []_C_int{6, 19}},
	{"hw.power", []_C_int{6, 26}},
	{"hw.product", []_C_int{6, 15}},
	{"hw.serialno", []_C_int{6, 17}},
	{"hw.setperf", []_C_int{6, 13}},
	{"hw.smt", []_C_int{6, 24}},
	{"hw.usermem", []_C_int{6, 20}},
	{"hw.uuid", []_C_int{6, 18}},
	{"hw.vendor", []_C_int{6, 14}},
	{"hw.version", []_C_int{6, 16}},
	{"kern.allowdt", []_C_int{1, 65}},
	{"kern.allowkmem", []_C_int{1, 52}},
	{"kern.argmax", []_C_int{1, 8}},
	{"kern.audio", []_C_int{1, 84}},
	{"kern.boottime", []_C_int{1, 21}},
	{"kern.bufcachepercent", []_C_int{1, 72}},
	{"kern.ccpu", []_C_int{1, 45}},
	{"kern.clockrate", []_C_int{1, 12}},
	{"kern.consbuf", []_C_int{1, 83}},
	{"kern.consbufsize", []_C_int{1, 82}},
	{"kern.consdev", []_C_int{1, 75}},
	{"kern.cp_time", []_C_int{1, 40}},
	{"kern.cp_time2", []_C_int{1, 71}},
	{"kern.cpustats", []_C_int{1, 85}},
	{"kern.domainname", []_C_int{1, 22}},
	{"kern.file", []_C_int{1, 73}},
	{"kern.forkstat", []_C_int{1, 42}},
	{"kern.fscale", []_C_int{1, 46}},
	{"kern.fsync", []_C_int{1, 33}},
	{"kern.global_ptrace", []_C_int{1, 81}},
	{"kern.hostid", []_C_int{1, 11}},
	{"kern.hostname", []_C_int{1, 10}},
	{"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}},
	{"kern.job_control", []_C_int{1, 19}},
	{"kern.malloc.buckets", []_C_int{1, 39, 1}},
	{"kern.malloc.kmemnames", []_C_int{1, 39, 3}},
	{"kern.maxclusters", []_C_int{1, 67}},
	{"kern.maxfiles", []_C_int{1, 7}},
	{"kern.maxlocksperuid", []_C_int{1, 70}},
	{"kern.maxpartitions", []_C_int{1, 23}},
	{"kern.maxproc", []_C_int{1, 6}},
	{"kern.maxthread", []_C_int{1, 25}},
	{"kern.maxvnodes", []_C_int{1, 5}},
	{"kern.mbstat", []_C_int{1, 59}},
	{"kern.msgbuf", []_C_int{1, 48}},
	{"kern.msgbufsize", []_C_int{1, 38}},
	{"kern.nchstats", []_C_int{1, 41}},
	{"kern.netlivelocks", []_C_int{1, 76}},
	{"kern.nfiles", []_C_int{1, 56}},
	{"kern.ngroups", []_C_int{1, 18}},
	{"kern.nosuidcoredump", []_C_int{1, 32}},
	{"kern.nprocs", []_C_int{1, 47}},
	{"kern.nthreads", []_C_int{1, 26}},
	{"kern.numvnodes", []_C_int{1, 58}},
	{"kern.osrelease", []_C_int{1, 2}},
	{"kern.osrevision", []_C_int{1, 3}},
	{"kern.ostype", []_C_int{1, 1}},
	{"kern.osversion", []_C_int{1, 27}},
	{"kern.pfstatus", []_C_int{1, 86}},
	{"kern.pool_debug", []_C_int{1, 77}},
	{"kern.posix1version", []_C_int{1, 17}},
	{"kern.proc", []_C_int{1, 66}},
	{"kern.rawpartition", []_C_int{1, 24}},
	{"kern.saved_ids", []_C_int{1, 20}},
	{"kern.securelevel", []_C_int{1, 9}},
	{"kern.seminfo", []_C_int{1, 61}},
	{"kern.shminfo", []_C_int{1, 62}},
	{"kern.somaxconn", []_C_int{1, 28}},
	{"kern.sominconn", []_C_int{1, 29}},
	{"kern.splassert", []_C_int{1, 54}},
	{"kern.stackgap_random", []_C_int{1, 50}},
	{"kern.sysvipc_info", []_C_int{1, 51}},
	{"kern.sysvmsg", []_C_int{1, 34}},
	{"kern.sysvsem", []_C_int{1, 35}},
	{"kern.sysvshm", []_C_int{1, 36}},
	{"kern.timecounter.choice", []_C_int{1, 69, 4}},
	{"kern.timecounter.hardware", []_C_int{1, 69, 3}},
	{"kern.timecounter.tick", []_C_int{1, 69, 1}},
	{"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}},
	{"kern.timeout_stats", []_C_int{1, 87}},
	{"kern.tty.tk_cancc", []_C_int{1, 44, 4}},
	{"kern.tty.tk_nin", []_C_int{1, 44, 1}},
	{"kern.tty.tk_nout", []_C_int{1, 44, 2}},
	{"kern.tty.tk_rawcc", []_C_int{1, 44, 3}},
	{"kern.tty.ttyinfo", []_C_int{1, 44, 5}},
	{"kern.ttycount", []_C_int{1, 57}},
	{"kern.utc_offset", []_C_int{1, 88}},
	{"kern.version", []_C_int{1, 4}},
	{"kern.video", []_C_int{1, 89}},
	{"kern.watchdog.auto", []_C_int{1, 64, 2}},
	{"kern.watchdog.period", []_C_int{1, 64, 1}},
	{"kern.witnesswatch", []_C_int{1, 53}},
	{"kern.wxabort", []_C_int{1, 74}},
	{"net.bpf.bufsize", []_C_int{4, 31, 1}},
	{"net.bpf.maxbufsize", []_C_int{4, 31, 2}},
	{"net.inet.ah.enable", []_C_int{4, 2, 51, 1}},
	{"net.inet.ah.stats", []_C_int{4, 2, 51, 2}},
	{"net.inet.carp.allow", []_C_int{4, 2, 112, 1}},
	{"net.inet.carp.log", []_C_int{4, 2, 112, 3}},
	{"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}},
	{"net.inet.carp.stats", []_C_int{4, 2, 112, 4}},
	{"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}},
	{"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}},
	{"net.inet.divert.stats", []_C_int{4, 2, 258, 3}},
	{"net.inet.esp.enable", []_C_int{4, 2, 50, 1}},
	{"net.inet.esp.stats", []_C_int{4, 2, 50, 4}},
	{"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}},
	{"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}},
	{"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}},
	{"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}},
	{"net.inet.gre.allow", []_C_int{4, 2, 47, 1}},
	{"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}},
	{"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}},
	{"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}},
	{"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}},
	{"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}},
	{"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}},
	{"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}},
	{"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}},
	{"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}},
	{"net.inet.ip.arpdown", []_C_int{4, 2, 0, 40}},
	{"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}},
	{"net.inet.ip.arptimeout", []_C_int{4, 2, 0, 39}},
	{"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}},
	{"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}},
	{"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}},
	{"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}},
	{"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}},
	{"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}},
	{"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}},
	{"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}},
	{"net.inet.ip.mrtmfc", []_C_int{4, 2, 0, 37}},
	{"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}},
	{"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}},
	{"net.inet.ip.mrtvif", []_C_int{4, 2, 0, 38}},
	{"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}},
	{"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}},
	{"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}},
	{"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}},
	{"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}},
	{"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}},
	{"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}},
	{"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}},
	{"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}},
	{"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}},
	{"net.inet.ip.stats", []_C_int{4, 2, 0, 33}},
	{"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}},
	{"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}},
	{"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}},
	{"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}},
	{"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}},
	{"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}},
	{"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}},
	{"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}},
	{"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}},
	{"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}},
	{"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}},
	{"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}},
	{"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}},
	{"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}},
	{"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}},
	{"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}},
	{"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}},
	{"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}},
	{"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}},
	{"net.inet.tcp.rootonly", []_C_int{4, 2, 6, 24}},
	{"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}},
	{"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}},
	{"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}},
	{"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}},
	{"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}},
	{"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}},
	{"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}},
	{"net.inet.tcp.synhashsize", []_C_int{4, 2, 6, 25}},
	{"net.inet.tcp.synuselimit", []_C_int{4, 2, 6, 23}},
	{"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}},
	{"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}},
	{"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}},
	{"net.inet.udp.rootonly", []_C_int{4, 2, 17, 6}},
	{"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}},
	{"net.inet.udp.stats", []_C_int{4, 2, 17, 5}},
	{"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}},
	{"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}},
	{"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}},
	{"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}},
	{"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}},
	{"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}},
	{"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}},
	{"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}},
	{"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}},
	{"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}},
	{"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}},
	{"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}},
	{"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}},
	{"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}},
	{"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}},
	{"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}},
	{"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}},
	{"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}},
	{"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}},
	{"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}},
	{"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}},
	{"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}},
	{"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}},
	{"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}},
	{"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}},
	{"net.inet6.ip6.mrtmfc", []_C_int{4, 24, 17, 53}},
	{"net.inet6.ip6.mrtmif", []_C_int{4, 24, 17, 52}},
	{"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}},
	{"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}},
	{"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}},
	{"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}},
	{"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}},
	{"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}},
	{"net.inet6.ip6.soiikey", []_C_int{4, 24, 17, 54}},
	{"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}},
	{"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}},
	{"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}},
	{"net.key.sadb_dump", []_C_int{4, 30, 1}},
	{"net.key.spd_dump", []_C_int{4, 30, 2}},
	{"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}},
	{"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}},
	{"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}},
	{"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}},
	{"net.mpls.mapttl_ip", []_C_int{4, 33, 5}},
	{"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}},
	{"net.mpls.ttl", []_C_int{4, 33, 2}},
	{"net.pflow.stats", []_C_int{4, 34, 1}},
	{"net.pipex.enable", []_C_int{4, 35, 1}},
	{"vm.anonmin", []_C_int{2, 7}},
	{"vm.loadavg", []_C_int{2, 2}},
	{"vm.malloc_conf", []_C_int{2, 12}},
	{"vm.maxslp", []_C_int{2, 10}},
	{"vm.nkmempages", []_C_int{2, 6}},
	{"vm.psstrings", []_C_int{2, 3}},
	{"vm.swapencrypt.enable", []_C_int{2, 5, 0}},
	{"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}},
	{"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}},
	{"vm.uspace", []_C_int{2, 11}},
	{"vm.uvmexp", []_C_int{2, 4}},
	{"vm.vmmeter", []_C_int{2, 1}},
	{"vm.vnodemin", []_C_int{2, 9}},
	{"vm.vtextmin", []_C_int{2, 8}},
}
07070100000E80000081A4000000000000000000000001645E367C00002FD4000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go // go run mksysctl_openbsd.go
// Code generated by the command above; DO NOT EDIT.

//go:build amd64 && openbsd
// +build amd64,openbsd

package unix

type mibentry struct {
	ctlname string
	ctloid  []_C_int
}

var sysctlMib = []mibentry{
	{"ddb.console", []_C_int{9, 6}},
	{"ddb.log", []_C_int{9, 7}},
	{"ddb.max_line", []_C_int{9, 3}},
	{"ddb.max_width", []_C_int{9, 2}},
	{"ddb.panic", []_C_int{9, 5}},
	{"ddb.profile", []_C_int{9, 9}},
	{"ddb.radix", []_C_int{9, 1}},
	{"ddb.tab_stop_width", []_C_int{9, 4}},
	{"ddb.trigger", []_C_int{9, 8}},
	{"fs.posix.setuid", []_C_int{3, 1, 1}},
	{"hw.allowpowerdown", []_C_int{6, 22}},
	{"hw.byteorder", []_C_int{6, 4}},
	{"hw.cpuspeed", []_C_int{6, 12}},
	{"hw.diskcount", []_C_int{6, 10}},
	{"hw.disknames", []_C_int{6, 8}},
	{"hw.diskstats", []_C_int{6, 9}},
	{"hw.machine", []_C_int{6, 1}},
	{"hw.model", []_C_int{6, 2}},
	{"hw.ncpu", []_C_int{6, 3}},
	{"hw.ncpufound", []_C_int{6, 21}},
	{"hw.ncpuonline", []_C_int{6, 25}},
	{"hw.pagesize", []_C_int{6, 7}},
	{"hw.perfpolicy", []_C_int{6, 23}},
	{"hw.physmem", []_C_int{6, 19}},
	{"hw.power", []_C_int{6, 26}},
	{"hw.product", []_C_int{6, 15}},
	{"hw.serialno", []_C_int{6, 17}},
	{"hw.setperf", []_C_int{6, 13}},
	{"hw.smt", []_C_int{6, 24}},
	{"hw.usermem", []_C_int{6, 20}},
	{"hw.uuid", []_C_int{6, 18}},
	{"hw.vendor", []_C_int{6, 14}},
	{"hw.version", []_C_int{6, 16}},
	{"kern.allowdt", []_C_int{1, 65}},
	{"kern.allowkmem", []_C_int{1, 52}},
	{"kern.argmax", []_C_int{1, 8}},
	{"kern.audio", []_C_int{1, 84}},
	{"kern.boottime", []_C_int{1, 21}},
	{"kern.bufcachepercent", []_C_int{1, 72}},
	{"kern.ccpu", []_C_int{1, 45}},
	{"kern.clockrate", []_C_int{1, 12}},
	{"kern.consbuf", []_C_int{1, 83}},
	{"kern.consbufsize", []_C_int{1, 82}},
	{"kern.consdev", []_C_int{1, 75}},
	{"kern.cp_time", []_C_int{1, 40}},
	{"kern.cp_time2", []_C_int{1, 71}},
	{"kern.cpustats", []_C_int{1, 85}},
	{"kern.domainname", []_C_int{1, 22}},
	{"kern.file", []_C_int{1, 73}},
	{"kern.forkstat", []_C_int{1, 42}},
	{"kern.fscale", []_C_int{1, 46}},
	{"kern.fsync", []_C_int{1, 33}},
	{"kern.global_ptrace", []_C_int{1, 81}},
	{"kern.hostid", []_C_int{1, 11}},
	{"kern.hostname", []_C_int{1, 10}},
	{"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}},
	{"kern.job_control", []_C_int{1, 19}},
	{"kern.malloc.buckets", []_C_int{1, 39, 1}},
	{"kern.malloc.kmemnames", []_C_int{1, 39, 3}},
	{"kern.maxclusters", []_C_int{1, 67}},
	{"kern.maxfiles", []_C_int{1, 7}},
	{"kern.maxlocksperuid", []_C_int{1, 70}},
	{"kern.maxpartitions", []_C_int{1, 23}},
	{"kern.maxproc", []_C_int{1, 6}},
	{"kern.maxthread", []_C_int{1, 25}},
	{"kern.maxvnodes", []_C_int{1, 5}},
	{"kern.mbstat", []_C_int{1, 59}},
	{"kern.msgbuf", []_C_int{1, 48}},
	{"kern.msgbufsize", []_C_int{1, 38}},
	{"kern.nchstats", []_C_int{1, 41}},
	{"kern.netlivelocks", []_C_int{1, 76}},
	{"kern.nfiles", []_C_int{1, 56}},
	{"kern.ngroups", []_C_int{1, 18}},
	{"kern.nosuidcoredump", []_C_int{1, 32}},
	{"kern.nprocs", []_C_int{1, 47}},
	{"kern.nthreads", []_C_int{1, 26}},
	{"kern.numvnodes", []_C_int{1, 58}},
	{"kern.osrelease", []_C_int{1, 2}},
	{"kern.osrevision", []_C_int{1, 3}},
	{"kern.ostype", []_C_int{1, 1}},
	{"kern.osversion", []_C_int{1, 27}},
	{"kern.pfstatus", []_C_int{1, 86}},
	{"kern.pool_debug", []_C_int{1, 77}},
	{"kern.posix1version", []_C_int{1, 17}},
	{"kern.proc", []_C_int{1, 66}},
	{"kern.rawpartition", []_C_int{1, 24}},
	{"kern.saved_ids", []_C_int{1, 20}},
	{"kern.securelevel", []_C_int{1, 9}},
	{"kern.seminfo", []_C_int{1, 61}},
	{"kern.shminfo", []_C_int{1, 62}},
	{"kern.somaxconn", []_C_int{1, 28}},
	{"kern.sominconn", []_C_int{1, 29}},
	{"kern.splassert", []_C_int{1, 54}},
	{"kern.stackgap_random", []_C_int{1, 50}},
	{"kern.sysvipc_info", []_C_int{1, 51}},
	{"kern.sysvmsg", []_C_int{1, 34}},
	{"kern.sysvsem", []_C_int{1, 35}},
	{"kern.sysvshm", []_C_int{1, 36}},
	{"kern.timecounter.choice", []_C_int{1, 69, 4}},
	{"kern.timecounter.hardware", []_C_int{1, 69, 3}},
	{"kern.timecounter.tick", []_C_int{1, 69, 1}},
	{"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}},
	{"kern.timeout_stats", []_C_int{1, 87}},
	{"kern.tty.tk_cancc", []_C_int{1, 44, 4}},
	{"kern.tty.tk_nin", []_C_int{1, 44, 1}},
	{"kern.tty.tk_nout", []_C_int{1, 44, 2}},
	{"kern.tty.tk_rawcc", []_C_int{1, 44, 3}},
	{"kern.tty.ttyinfo", []_C_int{1, 44, 5}},
	{"kern.ttycount", []_C_int{1, 57}},
	{"kern.utc_offset", []_C_int{1, 88}},
	{"kern.version", []_C_int{1, 4}},
	{"kern.video", []_C_int{1, 89}},
	{"kern.watchdog.auto", []_C_int{1, 64, 2}},
	{"kern.watchdog.period", []_C_int{1, 64, 1}},
	{"kern.witnesswatch", []_C_int{1, 53}},
	{"kern.wxabort", []_C_int{1, 74}},
	{"net.bpf.bufsize", []_C_int{4, 31, 1}},
	{"net.bpf.maxbufsize", []_C_int{4, 31, 2}},
	{"net.inet.ah.enable", []_C_int{4, 2, 51, 1}},
	{"net.inet.ah.stats", []_C_int{4, 2, 51, 2}},
	{"net.inet.carp.allow", []_C_int{4, 2, 112, 1}},
	{"net.inet.carp.log", []_C_int{4, 2, 112, 3}},
	{"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}},
	{"net.inet.carp.stats", []_C_int{4, 2, 112, 4}},
	{"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}},
	{"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}},
	{"net.inet.divert.stats", []_C_int{4, 2, 258, 3}},
	{"net.inet.esp.enable", []_C_int{4, 2, 50, 1}},
	{"net.inet.esp.stats", []_C_int{4, 2, 50, 4}},
	{"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}},
	{"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}},
	{"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}},
	{"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}},
	{"net.inet.gre.allow", []_C_int{4, 2, 47, 1}},
	{"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}},
	{"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}},
	{"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}},
	{"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}},
	{"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}},
	{"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}},
	{"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}},
	{"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}},
	{"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}},
	{"net.inet.ip.arpdown", []_C_int{4, 2, 0, 40}},
	{"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}},
	{"net.inet.ip.arptimeout", []_C_int{4, 2, 0, 39}},
	{"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}},
	{"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}},
	{"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}},
	{"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}},
	{"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}},
	{"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}},
	{"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}},
	{"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}},
	{"net.inet.ip.mrtmfc", []_C_int{4, 2, 0, 37}},
	{"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}},
	{"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}},
	{"net.inet.ip.mrtvif", []_C_int{4, 2, 0, 38}},
	{"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}},
	{"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}},
	{"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}},
	{"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}},
	{"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}},
	{"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}},
	{"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}},
	{"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}},
	{"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}},
	{"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}},
	{"net.inet.ip.stats", []_C_int{4, 2, 0, 33}},
	{"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}},
	{"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}},
	{"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}},
	{"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}},
	{"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}},
	{"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}},
	{"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}},
	{"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}},
	{"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}},
	{"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}},
	{"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}},
	{"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}},
	{"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}},
	{"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}},
	{"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}},
	{"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}},
	{"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}},
	{"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}},
	{"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}},
	{"net.inet.tcp.rootonly", []_C_int{4, 2, 6, 24}},
	{"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}},
	{"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}},
	{"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}},
	{"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}},
	{"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}},
	{"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}},
	{"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}},
	{"net.inet.tcp.synhashsize", []_C_int{4, 2, 6, 25}},
	{"net.inet.tcp.synuselimit", []_C_int{4, 2, 6, 23}},
	{"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}},
	{"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}},
	{"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}},
	{"net.inet.udp.rootonly", []_C_int{4, 2, 17, 6}},
	{"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}},
	{"net.inet.udp.stats", []_C_int{4, 2, 17, 5}},
	{"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}},
	{"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}},
	{"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}},
	{"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}},
	{"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}},
	{"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}},
	{"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}},
	{"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}},
	{"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}},
	{"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}},
	{"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}},
	{"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}},
	{"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}},
	{"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}},
	{"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}},
	{"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}},
	{"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}},
	{"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}},
	{"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}},
	{"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}},
	{"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}},
	{"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}},
	{"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}},
	{"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}},
	{"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}},
	{"net.inet6.ip6.mrtmfc", []_C_int{4, 24, 17, 53}},
	{"net.inet6.ip6.mrtmif", []_C_int{4, 24, 17, 52}},
	{"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}},
	{"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}},
	{"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}},
	{"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}},
	{"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}},
	{"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}},
	{"net.inet6.ip6.soiikey", []_C_int{4, 24, 17, 54}},
	{"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}},
	{"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}},
	{"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}},
	{"net.key.sadb_dump", []_C_int{4, 30, 1}},
	{"net.key.spd_dump", []_C_int{4, 30, 2}},
	{"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}},
	{"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}},
	{"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}},
	{"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}},
	{"net.mpls.mapttl_ip", []_C_int{4, 33, 5}},
	{"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}},
	{"net.mpls.ttl", []_C_int{4, 33, 2}},
	{"net.pflow.stats", []_C_int{4, 34, 1}},
	{"net.pipex.enable", []_C_int{4, 35, 1}},
	{"vm.anonmin", []_C_int{2, 7}},
	{"vm.loadavg", []_C_int{2, 2}},
	{"vm.malloc_conf", []_C_int{2, 12}},
	{"vm.maxslp", []_C_int{2, 10}},
	{"vm.nkmempages", []_C_int{2, 6}},
	{"vm.psstrings", []_C_int{2, 3}},
	{"vm.swapencrypt.enable", []_C_int{2, 5, 0}},
	{"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}},
	{"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}},
	{"vm.uspace", []_C_int{2, 11}},
	{"vm.uvmexp", []_C_int{2, 4}},
	{"vm.vmmeter", []_C_int{2, 1}},
	{"vm.vnodemin", []_C_int{2, 9}},
	{"vm.vtextmin", []_C_int{2, 8}},
}
07070100000E81000081A4000000000000000000000001645E367C00002FD0000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go   // go run mksysctl_openbsd.go
// Code generated by the command above; DO NOT EDIT.

//go:build arm && openbsd
// +build arm,openbsd

package unix

type mibentry struct {
	ctlname string
	ctloid  []_C_int
}

var sysctlMib = []mibentry{
	{"ddb.console", []_C_int{9, 6}},
	{"ddb.log", []_C_int{9, 7}},
	{"ddb.max_line", []_C_int{9, 3}},
	{"ddb.max_width", []_C_int{9, 2}},
	{"ddb.panic", []_C_int{9, 5}},
	{"ddb.profile", []_C_int{9, 9}},
	{"ddb.radix", []_C_int{9, 1}},
	{"ddb.tab_stop_width", []_C_int{9, 4}},
	{"ddb.trigger", []_C_int{9, 8}},
	{"fs.posix.setuid", []_C_int{3, 1, 1}},
	{"hw.allowpowerdown", []_C_int{6, 22}},
	{"hw.byteorder", []_C_int{6, 4}},
	{"hw.cpuspeed", []_C_int{6, 12}},
	{"hw.diskcount", []_C_int{6, 10}},
	{"hw.disknames", []_C_int{6, 8}},
	{"hw.diskstats", []_C_int{6, 9}},
	{"hw.machine", []_C_int{6, 1}},
	{"hw.model", []_C_int{6, 2}},
	{"hw.ncpu", []_C_int{6, 3}},
	{"hw.ncpufound", []_C_int{6, 21}},
	{"hw.ncpuonline", []_C_int{6, 25}},
	{"hw.pagesize", []_C_int{6, 7}},
	{"hw.perfpolicy", []_C_int{6, 23}},
	{"hw.physmem", []_C_int{6, 19}},
	{"hw.power", []_C_int{6, 26}},
	{"hw.product", []_C_int{6, 15}},
	{"hw.serialno", []_C_int{6, 17}},
	{"hw.setperf", []_C_int{6, 13}},
	{"hw.smt", []_C_int{6, 24}},
	{"hw.usermem", []_C_int{6, 20}},
	{"hw.uuid", []_C_int{6, 18}},
	{"hw.vendor", []_C_int{6, 14}},
	{"hw.version", []_C_int{6, 16}},
	{"kern.allowdt", []_C_int{1, 65}},
	{"kern.allowkmem", []_C_int{1, 52}},
	{"kern.argmax", []_C_int{1, 8}},
	{"kern.audio", []_C_int{1, 84}},
	{"kern.boottime", []_C_int{1, 21}},
	{"kern.bufcachepercent", []_C_int{1, 72}},
	{"kern.ccpu", []_C_int{1, 45}},
	{"kern.clockrate", []_C_int{1, 12}},
	{"kern.consbuf", []_C_int{1, 83}},
	{"kern.consbufsize", []_C_int{1, 82}},
	{"kern.consdev", []_C_int{1, 75}},
	{"kern.cp_time", []_C_int{1, 40}},
	{"kern.cp_time2", []_C_int{1, 71}},
	{"kern.cpustats", []_C_int{1, 85}},
	{"kern.domainname", []_C_int{1, 22}},
	{"kern.file", []_C_int{1, 73}},
	{"kern.forkstat", []_C_int{1, 42}},
	{"kern.fscale", []_C_int{1, 46}},
	{"kern.fsync", []_C_int{1, 33}},
	{"kern.global_ptrace", []_C_int{1, 81}},
	{"kern.hostid", []_C_int{1, 11}},
	{"kern.hostname", []_C_int{1, 10}},
	{"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}},
	{"kern.job_control", []_C_int{1, 19}},
	{"kern.malloc.buckets", []_C_int{1, 39, 1}},
	{"kern.malloc.kmemnames", []_C_int{1, 39, 3}},
	{"kern.maxclusters", []_C_int{1, 67}},
	{"kern.maxfiles", []_C_int{1, 7}},
	{"kern.maxlocksperuid", []_C_int{1, 70}},
	{"kern.maxpartitions", []_C_int{1, 23}},
	{"kern.maxproc", []_C_int{1, 6}},
	{"kern.maxthread", []_C_int{1, 25}},
	{"kern.maxvnodes", []_C_int{1, 5}},
	{"kern.mbstat", []_C_int{1, 59}},
	{"kern.msgbuf", []_C_int{1, 48}},
	{"kern.msgbufsize", []_C_int{1, 38}},
	{"kern.nchstats", []_C_int{1, 41}},
	{"kern.netlivelocks", []_C_int{1, 76}},
	{"kern.nfiles", []_C_int{1, 56}},
	{"kern.ngroups", []_C_int{1, 18}},
	{"kern.nosuidcoredump", []_C_int{1, 32}},
	{"kern.nprocs", []_C_int{1, 47}},
	{"kern.nthreads", []_C_int{1, 26}},
	{"kern.numvnodes", []_C_int{1, 58}},
	{"kern.osrelease", []_C_int{1, 2}},
	{"kern.osrevision", []_C_int{1, 3}},
	{"kern.ostype", []_C_int{1, 1}},
	{"kern.osversion", []_C_int{1, 27}},
	{"kern.pfstatus", []_C_int{1, 86}},
	{"kern.pool_debug", []_C_int{1, 77}},
	{"kern.posix1version", []_C_int{1, 17}},
	{"kern.proc", []_C_int{1, 66}},
	{"kern.rawpartition", []_C_int{1, 24}},
	{"kern.saved_ids", []_C_int{1, 20}},
	{"kern.securelevel", []_C_int{1, 9}},
	{"kern.seminfo", []_C_int{1, 61}},
	{"kern.shminfo", []_C_int{1, 62}},
	{"kern.somaxconn", []_C_int{1, 28}},
	{"kern.sominconn", []_C_int{1, 29}},
	{"kern.splassert", []_C_int{1, 54}},
	{"kern.stackgap_random", []_C_int{1, 50}},
	{"kern.sysvipc_info", []_C_int{1, 51}},
	{"kern.sysvmsg", []_C_int{1, 34}},
	{"kern.sysvsem", []_C_int{1, 35}},
	{"kern.sysvshm", []_C_int{1, 36}},
	{"kern.timecounter.choice", []_C_int{1, 69, 4}},
	{"kern.timecounter.hardware", []_C_int{1, 69, 3}},
	{"kern.timecounter.tick", []_C_int{1, 69, 1}},
	{"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}},
	{"kern.timeout_stats", []_C_int{1, 87}},
	{"kern.tty.tk_cancc", []_C_int{1, 44, 4}},
	{"kern.tty.tk_nin", []_C_int{1, 44, 1}},
	{"kern.tty.tk_nout", []_C_int{1, 44, 2}},
	{"kern.tty.tk_rawcc", []_C_int{1, 44, 3}},
	{"kern.tty.ttyinfo", []_C_int{1, 44, 5}},
	{"kern.ttycount", []_C_int{1, 57}},
	{"kern.utc_offset", []_C_int{1, 88}},
	{"kern.version", []_C_int{1, 4}},
	{"kern.video", []_C_int{1, 89}},
	{"kern.watchdog.auto", []_C_int{1, 64, 2}},
	{"kern.watchdog.period", []_C_int{1, 64, 1}},
	{"kern.witnesswatch", []_C_int{1, 53}},
	{"kern.wxabort", []_C_int{1, 74}},
	{"net.bpf.bufsize", []_C_int{4, 31, 1}},
	{"net.bpf.maxbufsize", []_C_int{4, 31, 2}},
	{"net.inet.ah.enable", []_C_int{4, 2, 51, 1}},
	{"net.inet.ah.stats", []_C_int{4, 2, 51, 2}},
	{"net.inet.carp.allow", []_C_int{4, 2, 112, 1}},
	{"net.inet.carp.log", []_C_int{4, 2, 112, 3}},
	{"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}},
	{"net.inet.carp.stats", []_C_int{4, 2, 112, 4}},
	{"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}},
	{"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}},
	{"net.inet.divert.stats", []_C_int{4, 2, 258, 3}},
	{"net.inet.esp.enable", []_C_int{4, 2, 50, 1}},
	{"net.inet.esp.stats", []_C_int{4, 2, 50, 4}},
	{"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}},
	{"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}},
	{"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}},
	{"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}},
	{"net.inet.gre.allow", []_C_int{4, 2, 47, 1}},
	{"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}},
	{"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}},
	{"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}},
	{"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}},
	{"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}},
	{"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}},
	{"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}},
	{"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}},
	{"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}},
	{"net.inet.ip.arpdown", []_C_int{4, 2, 0, 40}},
	{"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}},
	{"net.inet.ip.arptimeout", []_C_int{4, 2, 0, 39}},
	{"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}},
	{"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}},
	{"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}},
	{"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}},
	{"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}},
	{"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}},
	{"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}},
	{"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}},
	{"net.inet.ip.mrtmfc", []_C_int{4, 2, 0, 37}},
	{"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}},
	{"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}},
	{"net.inet.ip.mrtvif", []_C_int{4, 2, 0, 38}},
	{"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}},
	{"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}},
	{"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}},
	{"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}},
	{"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}},
	{"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}},
	{"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}},
	{"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}},
	{"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}},
	{"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}},
	{"net.inet.ip.stats", []_C_int{4, 2, 0, 33}},
	{"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}},
	{"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}},
	{"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}},
	{"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}},
	{"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}},
	{"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}},
	{"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}},
	{"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}},
	{"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}},
	{"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}},
	{"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}},
	{"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}},
	{"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}},
	{"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}},
	{"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}},
	{"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}},
	{"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}},
	{"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}},
	{"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}},
	{"net.inet.tcp.rootonly", []_C_int{4, 2, 6, 24}},
	{"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}},
	{"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}},
	{"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}},
	{"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}},
	{"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}},
	{"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}},
	{"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}},
	{"net.inet.tcp.synhashsize", []_C_int{4, 2, 6, 25}},
	{"net.inet.tcp.synuselimit", []_C_int{4, 2, 6, 23}},
	{"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}},
	{"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}},
	{"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}},
	{"net.inet.udp.rootonly", []_C_int{4, 2, 17, 6}},
	{"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}},
	{"net.inet.udp.stats", []_C_int{4, 2, 17, 5}},
	{"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}},
	{"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}},
	{"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}},
	{"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}},
	{"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}},
	{"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}},
	{"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}},
	{"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}},
	{"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}},
	{"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}},
	{"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}},
	{"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}},
	{"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}},
	{"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}},
	{"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}},
	{"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}},
	{"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}},
	{"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}},
	{"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}},
	{"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}},
	{"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}},
	{"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}},
	{"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}},
	{"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}},
	{"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}},
	{"net.inet6.ip6.mrtmfc", []_C_int{4, 24, 17, 53}},
	{"net.inet6.ip6.mrtmif", []_C_int{4, 24, 17, 52}},
	{"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}},
	{"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}},
	{"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}},
	{"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}},
	{"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}},
	{"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}},
	{"net.inet6.ip6.soiikey", []_C_int{4, 24, 17, 54}},
	{"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}},
	{"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}},
	{"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}},
	{"net.key.sadb_dump", []_C_int{4, 30, 1}},
	{"net.key.spd_dump", []_C_int{4, 30, 2}},
	{"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}},
	{"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}},
	{"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}},
	{"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}},
	{"net.mpls.mapttl_ip", []_C_int{4, 33, 5}},
	{"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}},
	{"net.mpls.ttl", []_C_int{4, 33, 2}},
	{"net.pflow.stats", []_C_int{4, 34, 1}},
	{"net.pipex.enable", []_C_int{4, 35, 1}},
	{"vm.anonmin", []_C_int{2, 7}},
	{"vm.loadavg", []_C_int{2, 2}},
	{"vm.malloc_conf", []_C_int{2, 12}},
	{"vm.maxslp", []_C_int{2, 10}},
	{"vm.nkmempages", []_C_int{2, 6}},
	{"vm.psstrings", []_C_int{2, 3}},
	{"vm.swapencrypt.enable", []_C_int{2, 5, 0}},
	{"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}},
	{"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}},
	{"vm.uspace", []_C_int{2, 11}},
	{"vm.uvmexp", []_C_int{2, 4}},
	{"vm.vmmeter", []_C_int{2, 1}},
	{"vm.vnodemin", []_C_int{2, 9}},
	{"vm.vtextmin", []_C_int{2, 8}},
}
07070100000E82000081A4000000000000000000000001645E367C00002FD4000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go // go run mksysctl_openbsd.go
// Code generated by the command above; DO NOT EDIT.

//go:build arm64 && openbsd
// +build arm64,openbsd

package unix

type mibentry struct {
	ctlname string
	ctloid  []_C_int
}

var sysctlMib = []mibentry{
	{"ddb.console", []_C_int{9, 6}},
	{"ddb.log", []_C_int{9, 7}},
	{"ddb.max_line", []_C_int{9, 3}},
	{"ddb.max_width", []_C_int{9, 2}},
	{"ddb.panic", []_C_int{9, 5}},
	{"ddb.profile", []_C_int{9, 9}},
	{"ddb.radix", []_C_int{9, 1}},
	{"ddb.tab_stop_width", []_C_int{9, 4}},
	{"ddb.trigger", []_C_int{9, 8}},
	{"fs.posix.setuid", []_C_int{3, 1, 1}},
	{"hw.allowpowerdown", []_C_int{6, 22}},
	{"hw.byteorder", []_C_int{6, 4}},
	{"hw.cpuspeed", []_C_int{6, 12}},
	{"hw.diskcount", []_C_int{6, 10}},
	{"hw.disknames", []_C_int{6, 8}},
	{"hw.diskstats", []_C_int{6, 9}},
	{"hw.machine", []_C_int{6, 1}},
	{"hw.model", []_C_int{6, 2}},
	{"hw.ncpu", []_C_int{6, 3}},
	{"hw.ncpufound", []_C_int{6, 21}},
	{"hw.ncpuonline", []_C_int{6, 25}},
	{"hw.pagesize", []_C_int{6, 7}},
	{"hw.perfpolicy", []_C_int{6, 23}},
	{"hw.physmem", []_C_int{6, 19}},
	{"hw.power", []_C_int{6, 26}},
	{"hw.product", []_C_int{6, 15}},
	{"hw.serialno", []_C_int{6, 17}},
	{"hw.setperf", []_C_int{6, 13}},
	{"hw.smt", []_C_int{6, 24}},
	{"hw.usermem", []_C_int{6, 20}},
	{"hw.uuid", []_C_int{6, 18}},
	{"hw.vendor", []_C_int{6, 14}},
	{"hw.version", []_C_int{6, 16}},
	{"kern.allowdt", []_C_int{1, 65}},
	{"kern.allowkmem", []_C_int{1, 52}},
	{"kern.argmax", []_C_int{1, 8}},
	{"kern.audio", []_C_int{1, 84}},
	{"kern.boottime", []_C_int{1, 21}},
	{"kern.bufcachepercent", []_C_int{1, 72}},
	{"kern.ccpu", []_C_int{1, 45}},
	{"kern.clockrate", []_C_int{1, 12}},
	{"kern.consbuf", []_C_int{1, 83}},
	{"kern.consbufsize", []_C_int{1, 82}},
	{"kern.consdev", []_C_int{1, 75}},
	{"kern.cp_time", []_C_int{1, 40}},
	{"kern.cp_time2", []_C_int{1, 71}},
	{"kern.cpustats", []_C_int{1, 85}},
	{"kern.domainname", []_C_int{1, 22}},
	{"kern.file", []_C_int{1, 73}},
	{"kern.forkstat", []_C_int{1, 42}},
	{"kern.fscale", []_C_int{1, 46}},
	{"kern.fsync", []_C_int{1, 33}},
	{"kern.global_ptrace", []_C_int{1, 81}},
	{"kern.hostid", []_C_int{1, 11}},
	{"kern.hostname", []_C_int{1, 10}},
	{"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}},
	{"kern.job_control", []_C_int{1, 19}},
	{"kern.malloc.buckets", []_C_int{1, 39, 1}},
	{"kern.malloc.kmemnames", []_C_int{1, 39, 3}},
	{"kern.maxclusters", []_C_int{1, 67}},
	{"kern.maxfiles", []_C_int{1, 7}},
	{"kern.maxlocksperuid", []_C_int{1, 70}},
	{"kern.maxpartitions", []_C_int{1, 23}},
	{"kern.maxproc", []_C_int{1, 6}},
	{"kern.maxthread", []_C_int{1, 25}},
	{"kern.maxvnodes", []_C_int{1, 5}},
	{"kern.mbstat", []_C_int{1, 59}},
	{"kern.msgbuf", []_C_int{1, 48}},
	{"kern.msgbufsize", []_C_int{1, 38}},
	{"kern.nchstats", []_C_int{1, 41}},
	{"kern.netlivelocks", []_C_int{1, 76}},
	{"kern.nfiles", []_C_int{1, 56}},
	{"kern.ngroups", []_C_int{1, 18}},
	{"kern.nosuidcoredump", []_C_int{1, 32}},
	{"kern.nprocs", []_C_int{1, 47}},
	{"kern.nthreads", []_C_int{1, 26}},
	{"kern.numvnodes", []_C_int{1, 58}},
	{"kern.osrelease", []_C_int{1, 2}},
	{"kern.osrevision", []_C_int{1, 3}},
	{"kern.ostype", []_C_int{1, 1}},
	{"kern.osversion", []_C_int{1, 27}},
	{"kern.pfstatus", []_C_int{1, 86}},
	{"kern.pool_debug", []_C_int{1, 77}},
	{"kern.posix1version", []_C_int{1, 17}},
	{"kern.proc", []_C_int{1, 66}},
	{"kern.rawpartition", []_C_int{1, 24}},
	{"kern.saved_ids", []_C_int{1, 20}},
	{"kern.securelevel", []_C_int{1, 9}},
	{"kern.seminfo", []_C_int{1, 61}},
	{"kern.shminfo", []_C_int{1, 62}},
	{"kern.somaxconn", []_C_int{1, 28}},
	{"kern.sominconn", []_C_int{1, 29}},
	{"kern.splassert", []_C_int{1, 54}},
	{"kern.stackgap_random", []_C_int{1, 50}},
	{"kern.sysvipc_info", []_C_int{1, 51}},
	{"kern.sysvmsg", []_C_int{1, 34}},
	{"kern.sysvsem", []_C_int{1, 35}},
	{"kern.sysvshm", []_C_int{1, 36}},
	{"kern.timecounter.choice", []_C_int{1, 69, 4}},
	{"kern.timecounter.hardware", []_C_int{1, 69, 3}},
	{"kern.timecounter.tick", []_C_int{1, 69, 1}},
	{"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}},
	{"kern.timeout_stats", []_C_int{1, 87}},
	{"kern.tty.tk_cancc", []_C_int{1, 44, 4}},
	{"kern.tty.tk_nin", []_C_int{1, 44, 1}},
	{"kern.tty.tk_nout", []_C_int{1, 44, 2}},
	{"kern.tty.tk_rawcc", []_C_int{1, 44, 3}},
	{"kern.tty.ttyinfo", []_C_int{1, 44, 5}},
	{"kern.ttycount", []_C_int{1, 57}},
	{"kern.utc_offset", []_C_int{1, 88}},
	{"kern.version", []_C_int{1, 4}},
	{"kern.video", []_C_int{1, 89}},
	{"kern.watchdog.auto", []_C_int{1, 64, 2}},
	{"kern.watchdog.period", []_C_int{1, 64, 1}},
	{"kern.witnesswatch", []_C_int{1, 53}},
	{"kern.wxabort", []_C_int{1, 74}},
	{"net.bpf.bufsize", []_C_int{4, 31, 1}},
	{"net.bpf.maxbufsize", []_C_int{4, 31, 2}},
	{"net.inet.ah.enable", []_C_int{4, 2, 51, 1}},
	{"net.inet.ah.stats", []_C_int{4, 2, 51, 2}},
	{"net.inet.carp.allow", []_C_int{4, 2, 112, 1}},
	{"net.inet.carp.log", []_C_int{4, 2, 112, 3}},
	{"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}},
	{"net.inet.carp.stats", []_C_int{4, 2, 112, 4}},
	{"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}},
	{"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}},
	{"net.inet.divert.stats", []_C_int{4, 2, 258, 3}},
	{"net.inet.esp.enable", []_C_int{4, 2, 50, 1}},
	{"net.inet.esp.stats", []_C_int{4, 2, 50, 4}},
	{"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}},
	{"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}},
	{"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}},
	{"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}},
	{"net.inet.gre.allow", []_C_int{4, 2, 47, 1}},
	{"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}},
	{"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}},
	{"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}},
	{"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}},
	{"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}},
	{"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}},
	{"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}},
	{"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}},
	{"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}},
	{"net.inet.ip.arpdown", []_C_int{4, 2, 0, 40}},
	{"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}},
	{"net.inet.ip.arptimeout", []_C_int{4, 2, 0, 39}},
	{"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}},
	{"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}},
	{"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}},
	{"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}},
	{"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}},
	{"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}},
	{"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}},
	{"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}},
	{"net.inet.ip.mrtmfc", []_C_int{4, 2, 0, 37}},
	{"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}},
	{"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}},
	{"net.inet.ip.mrtvif", []_C_int{4, 2, 0, 38}},
	{"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}},
	{"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}},
	{"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}},
	{"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}},
	{"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}},
	{"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}},
	{"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}},
	{"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}},
	{"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}},
	{"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}},
	{"net.inet.ip.stats", []_C_int{4, 2, 0, 33}},
	{"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}},
	{"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}},
	{"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}},
	{"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}},
	{"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}},
	{"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}},
	{"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}},
	{"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}},
	{"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}},
	{"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}},
	{"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}},
	{"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}},
	{"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}},
	{"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}},
	{"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}},
	{"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}},
	{"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}},
	{"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}},
	{"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}},
	{"net.inet.tcp.rootonly", []_C_int{4, 2, 6, 24}},
	{"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}},
	{"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}},
	{"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}},
	{"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}},
	{"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}},
	{"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}},
	{"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}},
	{"net.inet.tcp.synhashsize", []_C_int{4, 2, 6, 25}},
	{"net.inet.tcp.synuselimit", []_C_int{4, 2, 6, 23}},
	{"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}},
	{"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}},
	{"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}},
	{"net.inet.udp.rootonly", []_C_int{4, 2, 17, 6}},
	{"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}},
	{"net.inet.udp.stats", []_C_int{4, 2, 17, 5}},
	{"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}},
	{"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}},
	{"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}},
	{"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}},
	{"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}},
	{"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}},
	{"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}},
	{"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}},
	{"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}},
	{"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}},
	{"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}},
	{"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}},
	{"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}},
	{"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}},
	{"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}},
	{"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}},
	{"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}},
	{"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}},
	{"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}},
	{"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}},
	{"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}},
	{"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}},
	{"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}},
	{"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}},
	{"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}},
	{"net.inet6.ip6.mrtmfc", []_C_int{4, 24, 17, 53}},
	{"net.inet6.ip6.mrtmif", []_C_int{4, 24, 17, 52}},
	{"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}},
	{"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}},
	{"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}},
	{"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}},
	{"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}},
	{"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}},
	{"net.inet6.ip6.soiikey", []_C_int{4, 24, 17, 54}},
	{"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}},
	{"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}},
	{"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}},
	{"net.key.sadb_dump", []_C_int{4, 30, 1}},
	{"net.key.spd_dump", []_C_int{4, 30, 2}},
	{"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}},
	{"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}},
	{"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}},
	{"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}},
	{"net.mpls.mapttl_ip", []_C_int{4, 33, 5}},
	{"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}},
	{"net.mpls.ttl", []_C_int{4, 33, 2}},
	{"net.pflow.stats", []_C_int{4, 34, 1}},
	{"net.pipex.enable", []_C_int{4, 35, 1}},
	{"vm.anonmin", []_C_int{2, 7}},
	{"vm.loadavg", []_C_int{2, 2}},
	{"vm.malloc_conf", []_C_int{2, 12}},
	{"vm.maxslp", []_C_int{2, 10}},
	{"vm.nkmempages", []_C_int{2, 6}},
	{"vm.psstrings", []_C_int{2, 3}},
	{"vm.swapencrypt.enable", []_C_int{2, 5, 0}},
	{"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}},
	{"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}},
	{"vm.uspace", []_C_int{2, 11}},
	{"vm.uvmexp", []_C_int{2, 4}},
	{"vm.vmmeter", []_C_int{2, 1}},
	{"vm.vnodemin", []_C_int{2, 9}},
	{"vm.vtextmin", []_C_int{2, 8}},
}
07070100000E83000081A4000000000000000000000001645E367C00002FD6000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go    // go run mksysctl_openbsd.go
// Code generated by the command above; DO NOT EDIT.

//go:build mips64 && openbsd
// +build mips64,openbsd

package unix

type mibentry struct {
	ctlname string
	ctloid  []_C_int
}

var sysctlMib = []mibentry{
	{"ddb.console", []_C_int{9, 6}},
	{"ddb.log", []_C_int{9, 7}},
	{"ddb.max_line", []_C_int{9, 3}},
	{"ddb.max_width", []_C_int{9, 2}},
	{"ddb.panic", []_C_int{9, 5}},
	{"ddb.profile", []_C_int{9, 9}},
	{"ddb.radix", []_C_int{9, 1}},
	{"ddb.tab_stop_width", []_C_int{9, 4}},
	{"ddb.trigger", []_C_int{9, 8}},
	{"fs.posix.setuid", []_C_int{3, 1, 1}},
	{"hw.allowpowerdown", []_C_int{6, 22}},
	{"hw.byteorder", []_C_int{6, 4}},
	{"hw.cpuspeed", []_C_int{6, 12}},
	{"hw.diskcount", []_C_int{6, 10}},
	{"hw.disknames", []_C_int{6, 8}},
	{"hw.diskstats", []_C_int{6, 9}},
	{"hw.machine", []_C_int{6, 1}},
	{"hw.model", []_C_int{6, 2}},
	{"hw.ncpu", []_C_int{6, 3}},
	{"hw.ncpufound", []_C_int{6, 21}},
	{"hw.ncpuonline", []_C_int{6, 25}},
	{"hw.pagesize", []_C_int{6, 7}},
	{"hw.perfpolicy", []_C_int{6, 23}},
	{"hw.physmem", []_C_int{6, 19}},
	{"hw.power", []_C_int{6, 26}},
	{"hw.product", []_C_int{6, 15}},
	{"hw.serialno", []_C_int{6, 17}},
	{"hw.setperf", []_C_int{6, 13}},
	{"hw.smt", []_C_int{6, 24}},
	{"hw.usermem", []_C_int{6, 20}},
	{"hw.uuid", []_C_int{6, 18}},
	{"hw.vendor", []_C_int{6, 14}},
	{"hw.version", []_C_int{6, 16}},
	{"kern.allowdt", []_C_int{1, 65}},
	{"kern.allowkmem", []_C_int{1, 52}},
	{"kern.argmax", []_C_int{1, 8}},
	{"kern.audio", []_C_int{1, 84}},
	{"kern.boottime", []_C_int{1, 21}},
	{"kern.bufcachepercent", []_C_int{1, 72}},
	{"kern.ccpu", []_C_int{1, 45}},
	{"kern.clockrate", []_C_int{1, 12}},
	{"kern.consbuf", []_C_int{1, 83}},
	{"kern.consbufsize", []_C_int{1, 82}},
	{"kern.consdev", []_C_int{1, 75}},
	{"kern.cp_time", []_C_int{1, 40}},
	{"kern.cp_time2", []_C_int{1, 71}},
	{"kern.cpustats", []_C_int{1, 85}},
	{"kern.domainname", []_C_int{1, 22}},
	{"kern.file", []_C_int{1, 73}},
	{"kern.forkstat", []_C_int{1, 42}},
	{"kern.fscale", []_C_int{1, 46}},
	{"kern.fsync", []_C_int{1, 33}},
	{"kern.global_ptrace", []_C_int{1, 81}},
	{"kern.hostid", []_C_int{1, 11}},
	{"kern.hostname", []_C_int{1, 10}},
	{"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}},
	{"kern.job_control", []_C_int{1, 19}},
	{"kern.malloc.buckets", []_C_int{1, 39, 1}},
	{"kern.malloc.kmemnames", []_C_int{1, 39, 3}},
	{"kern.maxclusters", []_C_int{1, 67}},
	{"kern.maxfiles", []_C_int{1, 7}},
	{"kern.maxlocksperuid", []_C_int{1, 70}},
	{"kern.maxpartitions", []_C_int{1, 23}},
	{"kern.maxproc", []_C_int{1, 6}},
	{"kern.maxthread", []_C_int{1, 25}},
	{"kern.maxvnodes", []_C_int{1, 5}},
	{"kern.mbstat", []_C_int{1, 59}},
	{"kern.msgbuf", []_C_int{1, 48}},
	{"kern.msgbufsize", []_C_int{1, 38}},
	{"kern.nchstats", []_C_int{1, 41}},
	{"kern.netlivelocks", []_C_int{1, 76}},
	{"kern.nfiles", []_C_int{1, 56}},
	{"kern.ngroups", []_C_int{1, 18}},
	{"kern.nosuidcoredump", []_C_int{1, 32}},
	{"kern.nprocs", []_C_int{1, 47}},
	{"kern.nthreads", []_C_int{1, 26}},
	{"kern.numvnodes", []_C_int{1, 58}},
	{"kern.osrelease", []_C_int{1, 2}},
	{"kern.osrevision", []_C_int{1, 3}},
	{"kern.ostype", []_C_int{1, 1}},
	{"kern.osversion", []_C_int{1, 27}},
	{"kern.pfstatus", []_C_int{1, 86}},
	{"kern.pool_debug", []_C_int{1, 77}},
	{"kern.posix1version", []_C_int{1, 17}},
	{"kern.proc", []_C_int{1, 66}},
	{"kern.rawpartition", []_C_int{1, 24}},
	{"kern.saved_ids", []_C_int{1, 20}},
	{"kern.securelevel", []_C_int{1, 9}},
	{"kern.seminfo", []_C_int{1, 61}},
	{"kern.shminfo", []_C_int{1, 62}},
	{"kern.somaxconn", []_C_int{1, 28}},
	{"kern.sominconn", []_C_int{1, 29}},
	{"kern.splassert", []_C_int{1, 54}},
	{"kern.stackgap_random", []_C_int{1, 50}},
	{"kern.sysvipc_info", []_C_int{1, 51}},
	{"kern.sysvmsg", []_C_int{1, 34}},
	{"kern.sysvsem", []_C_int{1, 35}},
	{"kern.sysvshm", []_C_int{1, 36}},
	{"kern.timecounter.choice", []_C_int{1, 69, 4}},
	{"kern.timecounter.hardware", []_C_int{1, 69, 3}},
	{"kern.timecounter.tick", []_C_int{1, 69, 1}},
	{"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}},
	{"kern.timeout_stats", []_C_int{1, 87}},
	{"kern.tty.tk_cancc", []_C_int{1, 44, 4}},
	{"kern.tty.tk_nin", []_C_int{1, 44, 1}},
	{"kern.tty.tk_nout", []_C_int{1, 44, 2}},
	{"kern.tty.tk_rawcc", []_C_int{1, 44, 3}},
	{"kern.tty.ttyinfo", []_C_int{1, 44, 5}},
	{"kern.ttycount", []_C_int{1, 57}},
	{"kern.utc_offset", []_C_int{1, 88}},
	{"kern.version", []_C_int{1, 4}},
	{"kern.video", []_C_int{1, 89}},
	{"kern.watchdog.auto", []_C_int{1, 64, 2}},
	{"kern.watchdog.period", []_C_int{1, 64, 1}},
	{"kern.witnesswatch", []_C_int{1, 53}},
	{"kern.wxabort", []_C_int{1, 74}},
	{"net.bpf.bufsize", []_C_int{4, 31, 1}},
	{"net.bpf.maxbufsize", []_C_int{4, 31, 2}},
	{"net.inet.ah.enable", []_C_int{4, 2, 51, 1}},
	{"net.inet.ah.stats", []_C_int{4, 2, 51, 2}},
	{"net.inet.carp.allow", []_C_int{4, 2, 112, 1}},
	{"net.inet.carp.log", []_C_int{4, 2, 112, 3}},
	{"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}},
	{"net.inet.carp.stats", []_C_int{4, 2, 112, 4}},
	{"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}},
	{"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}},
	{"net.inet.divert.stats", []_C_int{4, 2, 258, 3}},
	{"net.inet.esp.enable", []_C_int{4, 2, 50, 1}},
	{"net.inet.esp.stats", []_C_int{4, 2, 50, 4}},
	{"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}},
	{"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}},
	{"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}},
	{"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}},
	{"net.inet.gre.allow", []_C_int{4, 2, 47, 1}},
	{"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}},
	{"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}},
	{"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}},
	{"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}},
	{"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}},
	{"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}},
	{"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}},
	{"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}},
	{"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}},
	{"net.inet.ip.arpdown", []_C_int{4, 2, 0, 40}},
	{"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}},
	{"net.inet.ip.arptimeout", []_C_int{4, 2, 0, 39}},
	{"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}},
	{"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}},
	{"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}},
	{"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}},
	{"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}},
	{"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}},
	{"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}},
	{"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}},
	{"net.inet.ip.mrtmfc", []_C_int{4, 2, 0, 37}},
	{"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}},
	{"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}},
	{"net.inet.ip.mrtvif", []_C_int{4, 2, 0, 38}},
	{"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}},
	{"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}},
	{"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}},
	{"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}},
	{"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}},
	{"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}},
	{"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}},
	{"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}},
	{"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}},
	{"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}},
	{"net.inet.ip.stats", []_C_int{4, 2, 0, 33}},
	{"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}},
	{"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}},
	{"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}},
	{"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}},
	{"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}},
	{"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}},
	{"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}},
	{"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}},
	{"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}},
	{"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}},
	{"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}},
	{"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}},
	{"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}},
	{"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}},
	{"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}},
	{"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}},
	{"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}},
	{"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}},
	{"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}},
	{"net.inet.tcp.rootonly", []_C_int{4, 2, 6, 24}},
	{"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}},
	{"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}},
	{"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}},
	{"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}},
	{"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}},
	{"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}},
	{"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}},
	{"net.inet.tcp.synhashsize", []_C_int{4, 2, 6, 25}},
	{"net.inet.tcp.synuselimit", []_C_int{4, 2, 6, 23}},
	{"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}},
	{"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}},
	{"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}},
	{"net.inet.udp.rootonly", []_C_int{4, 2, 17, 6}},
	{"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}},
	{"net.inet.udp.stats", []_C_int{4, 2, 17, 5}},
	{"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}},
	{"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}},
	{"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}},
	{"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}},
	{"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}},
	{"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}},
	{"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}},
	{"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}},
	{"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}},
	{"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}},
	{"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}},
	{"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}},
	{"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}},
	{"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}},
	{"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}},
	{"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}},
	{"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}},
	{"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}},
	{"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}},
	{"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}},
	{"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}},
	{"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}},
	{"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}},
	{"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}},
	{"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}},
	{"net.inet6.ip6.mrtmfc", []_C_int{4, 24, 17, 53}},
	{"net.inet6.ip6.mrtmif", []_C_int{4, 24, 17, 52}},
	{"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}},
	{"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}},
	{"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}},
	{"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}},
	{"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}},
	{"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}},
	{"net.inet6.ip6.soiikey", []_C_int{4, 24, 17, 54}},
	{"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}},
	{"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}},
	{"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}},
	{"net.key.sadb_dump", []_C_int{4, 30, 1}},
	{"net.key.spd_dump", []_C_int{4, 30, 2}},
	{"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}},
	{"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}},
	{"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}},
	{"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}},
	{"net.mpls.mapttl_ip", []_C_int{4, 33, 5}},
	{"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}},
	{"net.mpls.ttl", []_C_int{4, 33, 2}},
	{"net.pflow.stats", []_C_int{4, 34, 1}},
	{"net.pipex.enable", []_C_int{4, 35, 1}},
	{"vm.anonmin", []_C_int{2, 7}},
	{"vm.loadavg", []_C_int{2, 2}},
	{"vm.malloc_conf", []_C_int{2, 12}},
	{"vm.maxslp", []_C_int{2, 10}},
	{"vm.nkmempages", []_C_int{2, 6}},
	{"vm.psstrings", []_C_int{2, 3}},
	{"vm.swapencrypt.enable", []_C_int{2, 5, 0}},
	{"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}},
	{"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}},
	{"vm.uspace", []_C_int{2, 11}},
	{"vm.uvmexp", []_C_int{2, 4}},
	{"vm.vmmeter", []_C_int{2, 1}},
	{"vm.vnodemin", []_C_int{2, 9}},
	{"vm.vtextmin", []_C_int{2, 8}},
}
  07070100000E84000081A4000000000000000000000001645E367C00002FD4000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysctl_openbsd_ppc64.go // go run mksysctl_openbsd.go
// Code generated by the command above; DO NOT EDIT.

//go:build ppc64 && openbsd
// +build ppc64,openbsd

package unix

type mibentry struct {
	ctlname string
	ctloid  []_C_int
}

var sysctlMib = []mibentry{
	{"ddb.console", []_C_int{9, 6}},
	{"ddb.log", []_C_int{9, 7}},
	{"ddb.max_line", []_C_int{9, 3}},
	{"ddb.max_width", []_C_int{9, 2}},
	{"ddb.panic", []_C_int{9, 5}},
	{"ddb.profile", []_C_int{9, 9}},
	{"ddb.radix", []_C_int{9, 1}},
	{"ddb.tab_stop_width", []_C_int{9, 4}},
	{"ddb.trigger", []_C_int{9, 8}},
	{"fs.posix.setuid", []_C_int{3, 1, 1}},
	{"hw.allowpowerdown", []_C_int{6, 22}},
	{"hw.byteorder", []_C_int{6, 4}},
	{"hw.cpuspeed", []_C_int{6, 12}},
	{"hw.diskcount", []_C_int{6, 10}},
	{"hw.disknames", []_C_int{6, 8}},
	{"hw.diskstats", []_C_int{6, 9}},
	{"hw.machine", []_C_int{6, 1}},
	{"hw.model", []_C_int{6, 2}},
	{"hw.ncpu", []_C_int{6, 3}},
	{"hw.ncpufound", []_C_int{6, 21}},
	{"hw.ncpuonline", []_C_int{6, 25}},
	{"hw.pagesize", []_C_int{6, 7}},
	{"hw.perfpolicy", []_C_int{6, 23}},
	{"hw.physmem", []_C_int{6, 19}},
	{"hw.power", []_C_int{6, 26}},
	{"hw.product", []_C_int{6, 15}},
	{"hw.serialno", []_C_int{6, 17}},
	{"hw.setperf", []_C_int{6, 13}},
	{"hw.smt", []_C_int{6, 24}},
	{"hw.usermem", []_C_int{6, 20}},
	{"hw.uuid", []_C_int{6, 18}},
	{"hw.vendor", []_C_int{6, 14}},
	{"hw.version", []_C_int{6, 16}},
	{"kern.allowdt", []_C_int{1, 65}},
	{"kern.allowkmem", []_C_int{1, 52}},
	{"kern.argmax", []_C_int{1, 8}},
	{"kern.audio", []_C_int{1, 84}},
	{"kern.boottime", []_C_int{1, 21}},
	{"kern.bufcachepercent", []_C_int{1, 72}},
	{"kern.ccpu", []_C_int{1, 45}},
	{"kern.clockrate", []_C_int{1, 12}},
	{"kern.consbuf", []_C_int{1, 83}},
	{"kern.consbufsize", []_C_int{1, 82}},
	{"kern.consdev", []_C_int{1, 75}},
	{"kern.cp_time", []_C_int{1, 40}},
	{"kern.cp_time2", []_C_int{1, 71}},
	{"kern.cpustats", []_C_int{1, 85}},
	{"kern.domainname", []_C_int{1, 22}},
	{"kern.file", []_C_int{1, 73}},
	{"kern.forkstat", []_C_int{1, 42}},
	{"kern.fscale", []_C_int{1, 46}},
	{"kern.fsync", []_C_int{1, 33}},
	{"kern.global_ptrace", []_C_int{1, 81}},
	{"kern.hostid", []_C_int{1, 11}},
	{"kern.hostname", []_C_int{1, 10}},
	{"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}},
	{"kern.job_control", []_C_int{1, 19}},
	{"kern.malloc.buckets", []_C_int{1, 39, 1}},
	{"kern.malloc.kmemnames", []_C_int{1, 39, 3}},
	{"kern.maxclusters", []_C_int{1, 67}},
	{"kern.maxfiles", []_C_int{1, 7}},
	{"kern.maxlocksperuid", []_C_int{1, 70}},
	{"kern.maxpartitions", []_C_int{1, 23}},
	{"kern.maxproc", []_C_int{1, 6}},
	{"kern.maxthread", []_C_int{1, 25}},
	{"kern.maxvnodes", []_C_int{1, 5}},
	{"kern.mbstat", []_C_int{1, 59}},
	{"kern.msgbuf", []_C_int{1, 48}},
	{"kern.msgbufsize", []_C_int{1, 38}},
	{"kern.nchstats", []_C_int{1, 41}},
	{"kern.netlivelocks", []_C_int{1, 76}},
	{"kern.nfiles", []_C_int{1, 56}},
	{"kern.ngroups", []_C_int{1, 18}},
	{"kern.nosuidcoredump", []_C_int{1, 32}},
	{"kern.nprocs", []_C_int{1, 47}},
	{"kern.nthreads", []_C_int{1, 26}},
	{"kern.numvnodes", []_C_int{1, 58}},
	{"kern.osrelease", []_C_int{1, 2}},
	{"kern.osrevision", []_C_int{1, 3}},
	{"kern.ostype", []_C_int{1, 1}},
	{"kern.osversion", []_C_int{1, 27}},
	{"kern.pfstatus", []_C_int{1, 86}},
	{"kern.pool_debug", []_C_int{1, 77}},
	{"kern.posix1version", []_C_int{1, 17}},
	{"kern.proc", []_C_int{1, 66}},
	{"kern.rawpartition", []_C_int{1, 24}},
	{"kern.saved_ids", []_C_int{1, 20}},
	{"kern.securelevel", []_C_int{1, 9}},
	{"kern.seminfo", []_C_int{1, 61}},
	{"kern.shminfo", []_C_int{1, 62}},
	{"kern.somaxconn", []_C_int{1, 28}},
	{"kern.sominconn", []_C_int{1, 29}},
	{"kern.splassert", []_C_int{1, 54}},
	{"kern.stackgap_random", []_C_int{1, 50}},
	{"kern.sysvipc_info", []_C_int{1, 51}},
	{"kern.sysvmsg", []_C_int{1, 34}},
	{"kern.sysvsem", []_C_int{1, 35}},
	{"kern.sysvshm", []_C_int{1, 36}},
	{"kern.timecounter.choice", []_C_int{1, 69, 4}},
	{"kern.timecounter.hardware", []_C_int{1, 69, 3}},
	{"kern.timecounter.tick", []_C_int{1, 69, 1}},
	{"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}},
	{"kern.timeout_stats", []_C_int{1, 87}},
	{"kern.tty.tk_cancc", []_C_int{1, 44, 4}},
	{"kern.tty.tk_nin", []_C_int{1, 44, 1}},
	{"kern.tty.tk_nout", []_C_int{1, 44, 2}},
	{"kern.tty.tk_rawcc", []_C_int{1, 44, 3}},
	{"kern.tty.ttyinfo", []_C_int{1, 44, 5}},
	{"kern.ttycount", []_C_int{1, 57}},
	{"kern.utc_offset", []_C_int{1, 88}},
	{"kern.version", []_C_int{1, 4}},
	{"kern.video", []_C_int{1, 89}},
	{"kern.watchdog.auto", []_C_int{1, 64, 2}},
	{"kern.watchdog.period", []_C_int{1, 64, 1}},
	{"kern.witnesswatch", []_C_int{1, 53}},
	{"kern.wxabort", []_C_int{1, 74}},
	{"net.bpf.bufsize", []_C_int{4, 31, 1}},
	{"net.bpf.maxbufsize", []_C_int{4, 31, 2}},
	{"net.inet.ah.enable", []_C_int{4, 2, 51, 1}},
	{"net.inet.ah.stats", []_C_int{4, 2, 51, 2}},
	{"net.inet.carp.allow", []_C_int{4, 2, 112, 1}},
	{"net.inet.carp.log", []_C_int{4, 2, 112, 3}},
	{"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}},
	{"net.inet.carp.stats", []_C_int{4, 2, 112, 4}},
	{"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}},
	{"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}},
	{"net.inet.divert.stats", []_C_int{4, 2, 258, 3}},
	{"net.inet.esp.enable", []_C_int{4, 2, 50, 1}},
	{"net.inet.esp.stats", []_C_int{4, 2, 50, 4}},
	{"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}},
	{"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}},
	{"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}},
	{"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}},
	{"net.inet.gre.allow", []_C_int{4, 2, 47, 1}},
	{"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}},
	{"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}},
	{"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}},
	{"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}},
	{"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}},
	{"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}},
	{"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}},
	{"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}},
	{"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}},
	{"net.inet.ip.arpdown", []_C_int{4, 2, 0, 40}},
	{"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}},
	{"net.inet.ip.arptimeout", []_C_int{4, 2, 0, 39}},
	{"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}},
	{"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}},
	{"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}},
	{"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}},
	{"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}},
	{"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}},
	{"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}},
	{"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}},
	{"net.inet.ip.mrtmfc", []_C_int{4, 2, 0, 37}},
	{"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}},
	{"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}},
	{"net.inet.ip.mrtvif", []_C_int{4, 2, 0, 38}},
	{"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}},
	{"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}},
	{"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}},
	{"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}},
	{"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}},
	{"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}},
	{"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}},
	{"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}},
	{"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}},
	{"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}},
	{"net.inet.ip.stats", []_C_int{4, 2, 0, 33}},
	{"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}},
	{"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}},
	{"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}},
	{"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}},
	{"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}},
	{"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}},
	{"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}},
	{"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}},
	{"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}},
	{"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}},
	{"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}},
	{"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}},
	{"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}},
	{"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}},
	{"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}},
	{"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}},
	{"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}},
	{"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}},
	{"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}},
	{"net.inet.tcp.rootonly", []_C_int{4, 2, 6, 24}},
	{"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}},
	{"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}},
	{"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}},
	{"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}},
	{"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}},
	{"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}},
	{"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}},
	{"net.inet.tcp.synhashsize", []_C_int{4, 2, 6, 25}},
	{"net.inet.tcp.synuselimit", []_C_int{4, 2, 6, 23}},
	{"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}},
	{"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}},
	{"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}},
	{"net.inet.udp.rootonly", []_C_int{4, 2, 17, 6}},
	{"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}},
	{"net.inet.udp.stats", []_C_int{4, 2, 17, 5}},
	{"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}},
	{"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}},
	{"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}},
	{"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}},
	{"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}},
	{"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}},
	{"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}},
	{"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}},
	{"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}},
	{"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}},
	{"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}},
	{"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}},
	{"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}},
	{"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}},
	{"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}},
	{"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}},
	{"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}},
	{"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}},
	{"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}},
	{"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}},
	{"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}},
	{"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}},
	{"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}},
	{"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}},
	{"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}},
	{"net.inet6.ip6.mrtmfc", []_C_int{4, 24, 17, 53}},
	{"net.inet6.ip6.mrtmif", []_C_int{4, 24, 17, 52}},
	{"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}},
	{"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}},
	{"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}},
	{"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}},
	{"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}},
	{"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}},
	{"net.inet6.ip6.soiikey", []_C_int{4, 24, 17, 54}},
	{"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}},
	{"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}},
	{"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}},
	{"net.key.sadb_dump", []_C_int{4, 30, 1}},
	{"net.key.spd_dump", []_C_int{4, 30, 2}},
	{"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}},
	{"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}},
	{"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}},
	{"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}},
	{"net.mpls.mapttl_ip", []_C_int{4, 33, 5}},
	{"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}},
	{"net.mpls.ttl", []_C_int{4, 33, 2}},
	{"net.pflow.stats", []_C_int{4, 34, 1}},
	{"net.pipex.enable", []_C_int{4, 35, 1}},
	{"vm.anonmin", []_C_int{2, 7}},
	{"vm.loadavg", []_C_int{2, 2}},
	{"vm.malloc_conf", []_C_int{2, 12}},
	{"vm.maxslp", []_C_int{2, 10}},
	{"vm.nkmempages", []_C_int{2, 6}},
	{"vm.psstrings", []_C_int{2, 3}},
	{"vm.swapencrypt.enable", []_C_int{2, 5, 0}},
	{"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}},
	{"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}},
	{"vm.uspace", []_C_int{2, 11}},
	{"vm.uvmexp", []_C_int{2, 4}},
	{"vm.vmmeter", []_C_int{2, 1}},
	{"vm.vnodemin", []_C_int{2, 9}},
	{"vm.vtextmin", []_C_int{2, 8}},
}
07070100000E85000081A4000000000000000000000001645E367C00002FFD000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysctl_openbsd_riscv64.go   // go run mksysctl_openbsd.go
// Code generated by the command above; DO NOT EDIT.

//go:build riscv64 && openbsd
// +build riscv64,openbsd

package unix

type mibentry struct {
	ctlname string
	ctloid  []_C_int
}

var sysctlMib = []mibentry{
	{"ddb.console", []_C_int{9, 6}},
	{"ddb.log", []_C_int{9, 7}},
	{"ddb.max_line", []_C_int{9, 3}},
	{"ddb.max_width", []_C_int{9, 2}},
	{"ddb.panic", []_C_int{9, 5}},
	{"ddb.profile", []_C_int{9, 9}},
	{"ddb.radix", []_C_int{9, 1}},
	{"ddb.tab_stop_width", []_C_int{9, 4}},
	{"ddb.trigger", []_C_int{9, 8}},
	{"fs.posix.setuid", []_C_int{3, 1, 1}},
	{"hw.allowpowerdown", []_C_int{6, 22}},
	{"hw.byteorder", []_C_int{6, 4}},
	{"hw.cpuspeed", []_C_int{6, 12}},
	{"hw.diskcount", []_C_int{6, 10}},
	{"hw.disknames", []_C_int{6, 8}},
	{"hw.diskstats", []_C_int{6, 9}},
	{"hw.machine", []_C_int{6, 1}},
	{"hw.model", []_C_int{6, 2}},
	{"hw.ncpu", []_C_int{6, 3}},
	{"hw.ncpufound", []_C_int{6, 21}},
	{"hw.ncpuonline", []_C_int{6, 25}},
	{"hw.pagesize", []_C_int{6, 7}},
	{"hw.perfpolicy", []_C_int{6, 23}},
	{"hw.physmem", []_C_int{6, 19}},
	{"hw.power", []_C_int{6, 26}},
	{"hw.product", []_C_int{6, 15}},
	{"hw.serialno", []_C_int{6, 17}},
	{"hw.setperf", []_C_int{6, 13}},
	{"hw.smt", []_C_int{6, 24}},
	{"hw.usermem", []_C_int{6, 20}},
	{"hw.uuid", []_C_int{6, 18}},
	{"hw.vendor", []_C_int{6, 14}},
	{"hw.version", []_C_int{6, 16}},
	{"kern.allowdt", []_C_int{1, 65}},
	{"kern.allowkmem", []_C_int{1, 52}},
	{"kern.argmax", []_C_int{1, 8}},
	{"kern.audio", []_C_int{1, 84}},
	{"kern.boottime", []_C_int{1, 21}},
	{"kern.bufcachepercent", []_C_int{1, 72}},
	{"kern.ccpu", []_C_int{1, 45}},
	{"kern.clockrate", []_C_int{1, 12}},
	{"kern.consbuf", []_C_int{1, 83}},
	{"kern.consbufsize", []_C_int{1, 82}},
	{"kern.consdev", []_C_int{1, 75}},
	{"kern.cp_time", []_C_int{1, 40}},
	{"kern.cp_time2", []_C_int{1, 71}},
	{"kern.cpustats", []_C_int{1, 85}},
	{"kern.domainname", []_C_int{1, 22}},
	{"kern.file", []_C_int{1, 73}},
	{"kern.forkstat", []_C_int{1, 42}},
	{"kern.fscale", []_C_int{1, 46}},
	{"kern.fsync", []_C_int{1, 33}},
	{"kern.global_ptrace", []_C_int{1, 81}},
	{"kern.hostid", []_C_int{1, 11}},
	{"kern.hostname", []_C_int{1, 10}},
	{"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}},
	{"kern.job_control", []_C_int{1, 19}},
	{"kern.malloc.buckets", []_C_int{1, 39, 1}},
	{"kern.malloc.kmemnames", []_C_int{1, 39, 3}},
	{"kern.maxclusters", []_C_int{1, 67}},
	{"kern.maxfiles", []_C_int{1, 7}},
	{"kern.maxlocksperuid", []_C_int{1, 70}},
	{"kern.maxpartitions", []_C_int{1, 23}},
	{"kern.maxproc", []_C_int{1, 6}},
	{"kern.maxthread", []_C_int{1, 25}},
	{"kern.maxvnodes", []_C_int{1, 5}},
	{"kern.mbstat", []_C_int{1, 59}},
	{"kern.msgbuf", []_C_int{1, 48}},
	{"kern.msgbufsize", []_C_int{1, 38}},
	{"kern.nchstats", []_C_int{1, 41}},
	{"kern.netlivelocks", []_C_int{1, 76}},
	{"kern.nfiles", []_C_int{1, 56}},
	{"kern.ngroups", []_C_int{1, 18}},
	{"kern.nosuidcoredump", []_C_int{1, 32}},
	{"kern.nprocs", []_C_int{1, 47}},
	{"kern.nselcoll", []_C_int{1, 43}},
	{"kern.nthreads", []_C_int{1, 26}},
	{"kern.numvnodes", []_C_int{1, 58}},
	{"kern.osrelease", []_C_int{1, 2}},
	{"kern.osrevision", []_C_int{1, 3}},
	{"kern.ostype", []_C_int{1, 1}},
	{"kern.osversion", []_C_int{1, 27}},
	{"kern.pfstatus", []_C_int{1, 86}},
	{"kern.pool_debug", []_C_int{1, 77}},
	{"kern.posix1version", []_C_int{1, 17}},
	{"kern.proc", []_C_int{1, 66}},
	{"kern.rawpartition", []_C_int{1, 24}},
	{"kern.saved_ids", []_C_int{1, 20}},
	{"kern.securelevel", []_C_int{1, 9}},
	{"kern.seminfo", []_C_int{1, 61}},
	{"kern.shminfo", []_C_int{1, 62}},
	{"kern.somaxconn", []_C_int{1, 28}},
	{"kern.sominconn", []_C_int{1, 29}},
	{"kern.splassert", []_C_int{1, 54}},
	{"kern.stackgap_random", []_C_int{1, 50}},
	{"kern.sysvipc_info", []_C_int{1, 51}},
	{"kern.sysvmsg", []_C_int{1, 34}},
	{"kern.sysvsem", []_C_int{1, 35}},
	{"kern.sysvshm", []_C_int{1, 36}},
	{"kern.timecounter.choice", []_C_int{1, 69, 4}},
	{"kern.timecounter.hardware", []_C_int{1, 69, 3}},
	{"kern.timecounter.tick", []_C_int{1, 69, 1}},
	{"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}},
	{"kern.timeout_stats", []_C_int{1, 87}},
	{"kern.tty.tk_cancc", []_C_int{1, 44, 4}},
	{"kern.tty.tk_nin", []_C_int{1, 44, 1}},
	{"kern.tty.tk_nout", []_C_int{1, 44, 2}},
	{"kern.tty.tk_rawcc", []_C_int{1, 44, 3}},
	{"kern.tty.ttyinfo", []_C_int{1, 44, 5}},
	{"kern.ttycount", []_C_int{1, 57}},
	{"kern.utc_offset", []_C_int{1, 88}},
	{"kern.version", []_C_int{1, 4}},
	{"kern.video", []_C_int{1, 89}},
	{"kern.watchdog.auto", []_C_int{1, 64, 2}},
	{"kern.watchdog.period", []_C_int{1, 64, 1}},
	{"kern.witnesswatch", []_C_int{1, 53}},
	{"kern.wxabort", []_C_int{1, 74}},
	{"net.bpf.bufsize", []_C_int{4, 31, 1}},
	{"net.bpf.maxbufsize", []_C_int{4, 31, 2}},
	{"net.inet.ah.enable", []_C_int{4, 2, 51, 1}},
	{"net.inet.ah.stats", []_C_int{4, 2, 51, 2}},
	{"net.inet.carp.allow", []_C_int{4, 2, 112, 1}},
	{"net.inet.carp.log", []_C_int{4, 2, 112, 3}},
	{"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}},
	{"net.inet.carp.stats", []_C_int{4, 2, 112, 4}},
	{"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}},
	{"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}},
	{"net.inet.divert.stats", []_C_int{4, 2, 258, 3}},
	{"net.inet.esp.enable", []_C_int{4, 2, 50, 1}},
	{"net.inet.esp.stats", []_C_int{4, 2, 50, 4}},
	{"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}},
	{"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}},
	{"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}},
	{"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}},
	{"net.inet.gre.allow", []_C_int{4, 2, 47, 1}},
	{"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}},
	{"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}},
	{"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}},
	{"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}},
	{"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}},
	{"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}},
	{"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}},
	{"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}},
	{"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}},
	{"net.inet.ip.arpdown", []_C_int{4, 2, 0, 40}},
	{"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}},
	{"net.inet.ip.arptimeout", []_C_int{4, 2, 0, 39}},
	{"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}},
	{"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}},
	{"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}},
	{"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}},
	{"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}},
	{"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}},
	{"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}},
	{"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}},
	{"net.inet.ip.mrtmfc", []_C_int{4, 2, 0, 37}},
	{"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}},
	{"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}},
	{"net.inet.ip.mrtvif", []_C_int{4, 2, 0, 38}},
	{"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}},
	{"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}},
	{"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}},
	{"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}},
	{"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}},
	{"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}},
	{"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}},
	{"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}},
	{"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}},
	{"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}},
	{"net.inet.ip.stats", []_C_int{4, 2, 0, 33}},
	{"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}},
	{"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}},
	{"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}},
	{"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}},
	{"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}},
	{"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}},
	{"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}},
	{"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}},
	{"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}},
	{"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}},
	{"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}},
	{"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}},
	{"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}},
	{"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}},
	{"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}},
	{"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}},
	{"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}},
	{"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}},
	{"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}},
	{"net.inet.tcp.rootonly", []_C_int{4, 2, 6, 24}},
	{"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}},
	{"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}},
	{"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}},
	{"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}},
	{"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}},
	{"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}},
	{"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}},
	{"net.inet.tcp.synhashsize", []_C_int{4, 2, 6, 25}},
	{"net.inet.tcp.synuselimit", []_C_int{4, 2, 6, 23}},
	{"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}},
	{"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}},
	{"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}},
	{"net.inet.udp.rootonly", []_C_int{4, 2, 17, 6}},
	{"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}},
	{"net.inet.udp.stats", []_C_int{4, 2, 17, 5}},
	{"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}},
	{"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}},
	{"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}},
	{"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}},
	{"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}},
	{"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}},
	{"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}},
	{"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}},
	{"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}},
	{"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}},
	{"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}},
	{"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}},
	{"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}},
	{"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}},
	{"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}},
	{"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}},
	{"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}},
	{"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}},
	{"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}},
	{"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}},
	{"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}},
	{"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}},
	{"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}},
	{"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}},
	{"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}},
	{"net.inet6.ip6.mrtmfc", []_C_int{4, 24, 17, 53}},
	{"net.inet6.ip6.mrtmif", []_C_int{4, 24, 17, 52}},
	{"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}},
	{"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}},
	{"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}},
	{"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}},
	{"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}},
	{"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}},
	{"net.inet6.ip6.soiikey", []_C_int{4, 24, 17, 54}},
	{"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}},
	{"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}},
	{"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}},
	{"net.key.sadb_dump", []_C_int{4, 30, 1}},
	{"net.key.spd_dump", []_C_int{4, 30, 2}},
	{"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}},
	{"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}},
	{"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}},
	{"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}},
	{"net.mpls.mapttl_ip", []_C_int{4, 33, 5}},
	{"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}},
	{"net.mpls.ttl", []_C_int{4, 33, 2}},
	{"net.pflow.stats", []_C_int{4, 34, 1}},
	{"net.pipex.enable", []_C_int{4, 35, 1}},
	{"vm.anonmin", []_C_int{2, 7}},
	{"vm.loadavg", []_C_int{2, 2}},
	{"vm.malloc_conf", []_C_int{2, 12}},
	{"vm.maxslp", []_C_int{2, 10}},
	{"vm.nkmempages", []_C_int{2, 6}},
	{"vm.psstrings", []_C_int{2, 3}},
	{"vm.swapencrypt.enable", []_C_int{2, 5, 0}},
	{"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}},
	{"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}},
	{"vm.uspace", []_C_int{2, 11}},
	{"vm.uvmexp", []_C_int{2, 4}},
	{"vm.vmmeter", []_C_int{2, 1}},
	{"vm.vnodemin", []_C_int{2, 9}},
	{"vm.vtextmin", []_C_int{2, 8}},
}
   07070100000E86000081A4000000000000000000000001645E367C00004775000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go  // go run mksysnum.go /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/sys/syscall.h
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build amd64 && darwin
// +build amd64,darwin

package unix

// Deprecated: Use libSystem wrappers instead of direct syscalls.
const (
	SYS_SYSCALL                        = 0
	SYS_EXIT                           = 1
	SYS_FORK                           = 2
	SYS_READ                           = 3
	SYS_WRITE                          = 4
	SYS_OPEN                           = 5
	SYS_CLOSE                          = 6
	SYS_WAIT4                          = 7
	SYS_LINK                           = 9
	SYS_UNLINK                         = 10
	SYS_CHDIR                          = 12
	SYS_FCHDIR                         = 13
	SYS_MKNOD                          = 14
	SYS_CHMOD                          = 15
	SYS_CHOWN                          = 16
	SYS_GETFSSTAT                      = 18
	SYS_GETPID                         = 20
	SYS_SETUID                         = 23
	SYS_GETUID                         = 24
	SYS_GETEUID                        = 25
	SYS_PTRACE                         = 26
	SYS_RECVMSG                        = 27
	SYS_SENDMSG                        = 28
	SYS_RECVFROM                       = 29
	SYS_ACCEPT                         = 30
	SYS_GETPEERNAME                    = 31
	SYS_GETSOCKNAME                    = 32
	SYS_ACCESS                         = 33
	SYS_CHFLAGS                        = 34
	SYS_FCHFLAGS                       = 35
	SYS_SYNC                           = 36
	SYS_KILL                           = 37
	SYS_GETPPID                        = 39
	SYS_DUP                            = 41
	SYS_PIPE                           = 42
	SYS_GETEGID                        = 43
	SYS_SIGACTION                      = 46
	SYS_GETGID                         = 47
	SYS_SIGPROCMASK                    = 48
	SYS_GETLOGIN                       = 49
	SYS_SETLOGIN                       = 50
	SYS_ACCT                           = 51
	SYS_SIGPENDING                     = 52
	SYS_SIGALTSTACK                    = 53
	SYS_IOCTL                          = 54
	SYS_REBOOT                         = 55
	SYS_REVOKE                         = 56
	SYS_SYMLINK                        = 57
	SYS_READLINK                       = 58
	SYS_EXECVE                         = 59
	SYS_UMASK                          = 60
	SYS_CHROOT                         = 61
	SYS_MSYNC                          = 65
	SYS_VFORK                          = 66
	SYS_MUNMAP                         = 73
	SYS_MPROTECT                       = 74
	SYS_MADVISE                        = 75
	SYS_MINCORE                        = 78
	SYS_GETGROUPS                      = 79
	SYS_SETGROUPS                      = 80
	SYS_GETPGRP                        = 81
	SYS_SETPGID                        = 82
	SYS_SETITIMER                      = 83
	SYS_SWAPON                         = 85
	SYS_GETITIMER                      = 86
	SYS_GETDTABLESIZE                  = 89
	SYS_DUP2                           = 90
	SYS_FCNTL                          = 92
	SYS_SELECT                         = 93
	SYS_FSYNC                          = 95
	SYS_SETPRIORITY                    = 96
	SYS_SOCKET                         = 97
	SYS_CONNECT                        = 98
	SYS_GETPRIORITY                    = 100
	SYS_BIND                           = 104
	SYS_SETSOCKOPT                     = 105
	SYS_LISTEN                         = 106
	SYS_SIGSUSPEND                     = 111
	SYS_GETTIMEOFDAY                   = 116
	SYS_GETRUSAGE                      = 117
	SYS_GETSOCKOPT                     = 118
	SYS_READV                          = 120
	SYS_WRITEV                         = 121
	SYS_SETTIMEOFDAY                   = 122
	SYS_FCHOWN                         = 123
	SYS_FCHMOD                         = 124
	SYS_SETREUID                       = 126
	SYS_SETREGID                       = 127
	SYS_RENAME                         = 128
	SYS_FLOCK                          = 131
	SYS_MKFIFO                         = 132
	SYS_SENDTO                         = 133
	SYS_SHUTDOWN                       = 134
	SYS_SOCKETPAIR                     = 135
	SYS_MKDIR                          = 136
	SYS_RMDIR                          = 137
	SYS_UTIMES                         = 138
	SYS_FUTIMES                        = 139
	SYS_ADJTIME                        = 140
	SYS_GETHOSTUUID                    = 142
	SYS_SETSID                         = 147
	SYS_GETPGID                        = 151
	SYS_SETPRIVEXEC                    = 152
	SYS_PREAD                          = 153
	SYS_PWRITE                         = 154
	SYS_NFSSVC                         = 155
	SYS_STATFS                         = 157
	SYS_FSTATFS                        = 158
	SYS_UNMOUNT                        = 159
	SYS_GETFH                          = 161
	SYS_QUOTACTL                       = 165
	SYS_MOUNT                          = 167
	SYS_CSOPS                          = 169
	SYS_CSOPS_AUDITTOKEN               = 170
	SYS_WAITID                         = 173
	SYS_KDEBUG_TYPEFILTER              = 177
	SYS_KDEBUG_TRACE_STRING            = 178
	SYS_KDEBUG_TRACE64                 = 179
	SYS_KDEBUG_TRACE                   = 180
	SYS_SETGID                         = 181
	SYS_SETEGID                        = 182
	SYS_SETEUID                        = 183
	SYS_SIGRETURN                      = 184
	SYS_THREAD_SELFCOUNTS              = 186
	SYS_FDATASYNC                      = 187
	SYS_STAT                           = 188
	SYS_FSTAT                          = 189
	SYS_LSTAT                          = 190
	SYS_PATHCONF                       = 191
	SYS_FPATHCONF                      = 192
	SYS_GETRLIMIT                      = 194
	SYS_SETRLIMIT                      = 195
	SYS_GETDIRENTRIES                  = 196
	SYS_MMAP                           = 197
	SYS_LSEEK                          = 199
	SYS_TRUNCATE                       = 200
	SYS_FTRUNCATE                      = 201
	SYS_SYSCTL                         = 202
	SYS_MLOCK                          = 203
	SYS_MUNLOCK                        = 204
	SYS_UNDELETE                       = 205
	SYS_OPEN_DPROTECTED_NP             = 216
	SYS_GETATTRLIST                    = 220
	SYS_SETATTRLIST                    = 221
	SYS_GETDIRENTRIESATTR              = 222
	SYS_EXCHANGEDATA                   = 223
	SYS_SEARCHFS                       = 225
	SYS_DELETE                         = 226
	SYS_COPYFILE                       = 227
	SYS_FGETATTRLIST                   = 228
	SYS_FSETATTRLIST                   = 229
	SYS_POLL                           = 230
	SYS_WATCHEVENT                     = 231
	SYS_WAITEVENT                      = 232
	SYS_MODWATCH                       = 233
	SYS_GETXATTR                       = 234
	SYS_FGETXATTR                      = 235
	SYS_SETXATTR                       = 236
	SYS_FSETXATTR                      = 237
	SYS_REMOVEXATTR                    = 238
	SYS_FREMOVEXATTR                   = 239
	SYS_LISTXATTR                      = 240
	SYS_FLISTXATTR                     = 241
	SYS_FSCTL                          = 242
	SYS_INITGROUPS                     = 243
	SYS_POSIX_SPAWN                    = 244
	SYS_FFSCTL                         = 245
	SYS_NFSCLNT                        = 247
	SYS_FHOPEN                         = 248
	SYS_MINHERIT                       = 250
	SYS_SEMSYS                         = 251
	SYS_MSGSYS                         = 252
	SYS_SHMSYS                         = 253
	SYS_SEMCTL                         = 254
	SYS_SEMGET                         = 255
	SYS_SEMOP                          = 256
	SYS_MSGCTL                         = 258
	SYS_MSGGET                         = 259
	SYS_MSGSND                         = 260
	SYS_MSGRCV                         = 261
	SYS_SHMAT                          = 262
	SYS_SHMCTL                         = 263
	SYS_SHMDT                          = 264
	SYS_SHMGET                         = 265
	SYS_SHM_OPEN                       = 266
	SYS_SHM_UNLINK                     = 267
	SYS_SEM_OPEN                       = 268
	SYS_SEM_CLOSE                      = 269
	SYS_SEM_UNLINK                     = 270
	SYS_SEM_WAIT                       = 271
	SYS_SEM_TRYWAIT                    = 272
	SYS_SEM_POST                       = 273
	SYS_SYSCTLBYNAME                   = 274
	SYS_OPEN_EXTENDED                  = 277
	SYS_UMASK_EXTENDED                 = 278
	SYS_STAT_EXTENDED                  = 279
	SYS_LSTAT_EXTENDED                 = 280
	SYS_FSTAT_EXTENDED                 = 281
	SYS_CHMOD_EXTENDED                 = 282
	SYS_FCHMOD_EXTENDED                = 283
	SYS_ACCESS_EXTENDED                = 284
	SYS_SETTID                         = 285
	SYS_GETTID                         = 286
	SYS_SETSGROUPS                     = 287
	SYS_GETSGROUPS                     = 288
	SYS_SETWGROUPS                     = 289
	SYS_GETWGROUPS                     = 290
	SYS_MKFIFO_EXTENDED                = 291
	SYS_MKDIR_EXTENDED                 = 292
	SYS_IDENTITYSVC                    = 293
	SYS_SHARED_REGION_CHECK_NP         = 294
	SYS_VM_PRESSURE_MONITOR            = 296
	SYS_PSYNCH_RW_LONGRDLOCK           = 297
	SYS_PSYNCH_RW_YIELDWRLOCK          = 298
	SYS_PSYNCH_RW_DOWNGRADE            = 299
	SYS_PSYNCH_RW_UPGRADE              = 300
	SYS_PSYNCH_MUTEXWAIT               = 301
	SYS_PSYNCH_MUTEXDROP               = 302
	SYS_PSYNCH_CVBROAD                 = 303
	SYS_PSYNCH_CVSIGNAL                = 304
	SYS_PSYNCH_CVWAIT                  = 305
	SYS_PSYNCH_RW_RDLOCK               = 306
	SYS_PSYNCH_RW_WRLOCK               = 307
	SYS_PSYNCH_RW_UNLOCK               = 308
	SYS_PSYNCH_RW_UNLOCK2              = 309
	SYS_GETSID                         = 310
	SYS_SETTID_WITH_PID                = 311
	SYS_PSYNCH_CVCLRPREPOST            = 312
	SYS_AIO_FSYNC                      = 313
	SYS_AIO_RETURN                     = 314
	SYS_AIO_SUSPEND                    = 315
	SYS_AIO_CANCEL                     = 316
	SYS_AIO_ERROR                      = 317
	SYS_AIO_READ                       = 318
	SYS_AIO_WRITE                      = 319
	SYS_LIO_LISTIO                     = 320
	SYS_IOPOLICYSYS                    = 322
	SYS_PROCESS_POLICY                 = 323
	SYS_MLOCKALL                       = 324
	SYS_MUNLOCKALL                     = 325
	SYS_ISSETUGID                      = 327
	SYS___PTHREAD_KILL                 = 328
	SYS___PTHREAD_SIGMASK              = 329
	SYS___SIGWAIT                      = 330
	SYS___DISABLE_THREADSIGNAL         = 331
	SYS___PTHREAD_MARKCANCEL           = 332
	SYS___PTHREAD_CANCELED             = 333
	SYS___SEMWAIT_SIGNAL               = 334
	SYS_PROC_INFO                      = 336
	SYS_SENDFILE                       = 337
	SYS_STAT64                         = 338
	SYS_FSTAT64                        = 339
	SYS_LSTAT64                        = 340
	SYS_STAT64_EXTENDED                = 341
	SYS_LSTAT64_EXTENDED               = 342
	SYS_FSTAT64_EXTENDED               = 343
	SYS_GETDIRENTRIES64                = 344
	SYS_STATFS64                       = 345
	SYS_FSTATFS64                      = 346
	SYS_GETFSSTAT64                    = 347
	SYS___PTHREAD_CHDIR                = 348
	SYS___PTHREAD_FCHDIR               = 349
	SYS_AUDIT                          = 350
	SYS_AUDITON                        = 351
	SYS_GETAUID                        = 353
	SYS_SETAUID                        = 354
	SYS_GETAUDIT_ADDR                  = 357
	SYS_SETAUDIT_ADDR                  = 358
	SYS_AUDITCTL                       = 359
	SYS_BSDTHREAD_CREATE               = 360
	SYS_BSDTHREAD_TERMINATE            = 361
	SYS_KQUEUE                         = 362
	SYS_KEVENT                         = 363
	SYS_LCHOWN                         = 364
	SYS_BSDTHREAD_REGISTER             = 366
	SYS_WORKQ_OPEN                     = 367
	SYS_WORKQ_KERNRETURN               = 368
	SYS_KEVENT64                       = 369
	SYS___OLD_SEMWAIT_SIGNAL           = 370
	SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL  = 371
	SYS_THREAD_SELFID                  = 372
	SYS_LEDGER                         = 373
	SYS_KEVENT_QOS                     = 374
	SYS_KEVENT_ID                      = 375
	SYS___MAC_EXECVE                   = 380
	SYS___MAC_SYSCALL                  = 381
	SYS___MAC_GET_FILE                 = 382
	SYS___MAC_SET_FILE                 = 383
	SYS___MAC_GET_LINK                 = 384
	SYS___MAC_SET_LINK                 = 385
	SYS___MAC_GET_PROC                 = 386
	SYS___MAC_SET_PROC                 = 387
	SYS___MAC_GET_FD                   = 388
	SYS___MAC_SET_FD                   = 389
	SYS___MAC_GET_PID                  = 390
	SYS_PSELECT                        = 394
	SYS_PSELECT_NOCANCEL               = 395
	SYS_READ_NOCANCEL                  = 396
	SYS_WRITE_NOCANCEL                 = 397
	SYS_OPEN_NOCANCEL                  = 398
	SYS_CLOSE_NOCANCEL                 = 399
	SYS_WAIT4_NOCANCEL                 = 400
	SYS_RECVMSG_NOCANCEL               = 401
	SYS_SENDMSG_NOCANCEL               = 402
	SYS_RECVFROM_NOCANCEL              = 403
	SYS_ACCEPT_NOCANCEL                = 404
	SYS_MSYNC_NOCANCEL                 = 405
	SYS_FCNTL_NOCANCEL                 = 406
	SYS_SELECT_NOCANCEL                = 407
	SYS_FSYNC_NOCANCEL                 = 408
	SYS_CONNECT_NOCANCEL               = 409
	SYS_SIGSUSPEND_NOCANCEL            = 410
	SYS_READV_NOCANCEL                 = 411
	SYS_WRITEV_NOCANCEL                = 412
	SYS_SENDTO_NOCANCEL                = 413
	SYS_PREAD_NOCANCEL                 = 414
	SYS_PWRITE_NOCANCEL                = 415
	SYS_WAITID_NOCANCEL                = 416
	SYS_POLL_NOCANCEL                  = 417
	SYS_MSGSND_NOCANCEL                = 418
	SYS_MSGRCV_NOCANCEL                = 419
	SYS_SEM_WAIT_NOCANCEL              = 420
	SYS_AIO_SUSPEND_NOCANCEL           = 421
	SYS___SIGWAIT_NOCANCEL             = 422
	SYS___SEMWAIT_SIGNAL_NOCANCEL      = 423
	SYS___MAC_MOUNT                    = 424
	SYS___MAC_GET_MOUNT                = 425
	SYS___MAC_GETFSSTAT                = 426
	SYS_FSGETPATH                      = 427
	SYS_AUDIT_SESSION_SELF             = 428
	SYS_AUDIT_SESSION_JOIN             = 429
	SYS_FILEPORT_MAKEPORT              = 430
	SYS_FILEPORT_MAKEFD                = 431
	SYS_AUDIT_SESSION_PORT             = 432
	SYS_PID_SUSPEND                    = 433
	SYS_PID_RESUME                     = 434
	SYS_PID_HIBERNATE                  = 435
	SYS_PID_SHUTDOWN_SOCKETS           = 436
	SYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438
	SYS_KAS_INFO                       = 439
	SYS_MEMORYSTATUS_CONTROL           = 440
	SYS_GUARDED_OPEN_NP                = 441
	SYS_GUARDED_CLOSE_NP               = 442
	SYS_GUARDED_KQUEUE_NP              = 443
	SYS_CHANGE_FDGUARD_NP              = 444
	SYS_USRCTL                         = 445
	SYS_PROC_RLIMIT_CONTROL            = 446
	SYS_CONNECTX                       = 447
	SYS_DISCONNECTX                    = 448
	SYS_PEELOFF                        = 449
	SYS_SOCKET_DELEGATE                = 450
	SYS_TELEMETRY                      = 451
	SYS_PROC_UUID_POLICY               = 452
	SYS_MEMORYSTATUS_GET_LEVEL         = 453
	SYS_SYSTEM_OVERRIDE                = 454
	SYS_VFS_PURGE                      = 455
	SYS_SFI_CTL                        = 456
	SYS_SFI_PIDCTL                     = 457
	SYS_COALITION                      = 458
	SYS_COALITION_INFO                 = 459
	SYS_NECP_MATCH_POLICY              = 460
	SYS_GETATTRLISTBULK                = 461
	SYS_CLONEFILEAT                    = 462
	SYS_OPENAT                         = 463
	SYS_OPENAT_NOCANCEL                = 464
	SYS_RENAMEAT                       = 465
	SYS_FACCESSAT                      = 466
	SYS_FCHMODAT                       = 467
	SYS_FCHOWNAT                       = 468
	SYS_FSTATAT                        = 469
	SYS_FSTATAT64                      = 470
	SYS_LINKAT                         = 471
	SYS_UNLINKAT                       = 472
	SYS_READLINKAT                     = 473
	SYS_SYMLINKAT                      = 474
	SYS_MKDIRAT                        = 475
	SYS_GETATTRLISTAT                  = 476
	SYS_PROC_TRACE_LOG                 = 477
	SYS_BSDTHREAD_CTL                  = 478
	SYS_OPENBYID_NP                    = 479
	SYS_RECVMSG_X                      = 480
	SYS_SENDMSG_X                      = 481
	SYS_THREAD_SELFUSAGE               = 482
	SYS_CSRCTL                         = 483
	SYS_GUARDED_OPEN_DPROTECTED_NP     = 484
	SYS_GUARDED_WRITE_NP               = 485
	SYS_GUARDED_PWRITE_NP              = 486
	SYS_GUARDED_WRITEV_NP              = 487
	SYS_RENAMEATX_NP                   = 488
	SYS_MREMAP_ENCRYPTED               = 489
	SYS_NETAGENT_TRIGGER               = 490
	SYS_STACK_SNAPSHOT_WITH_CONFIG     = 491
	SYS_MICROSTACKSHOT                 = 492
	SYS_GRAB_PGO_DATA                  = 493
	SYS_PERSONA                        = 494
	SYS_WORK_INTERVAL_CTL              = 499
	SYS_GETENTROPY                     = 500
	SYS_NECP_OPEN                      = 501
	SYS_NECP_CLIENT_ACTION             = 502
	SYS___NEXUS_OPEN                   = 503
	SYS___NEXUS_REGISTER               = 504
	SYS___NEXUS_DEREGISTER             = 505
	SYS___NEXUS_CREATE                 = 506
	SYS___NEXUS_DESTROY                = 507
	SYS___NEXUS_GET_OPT                = 508
	SYS___NEXUS_SET_OPT                = 509
	SYS___CHANNEL_OPEN                 = 510
	SYS___CHANNEL_GET_INFO             = 511
	SYS___CHANNEL_SYNC                 = 512
	SYS___CHANNEL_GET_OPT              = 513
	SYS___CHANNEL_SET_OPT              = 514
	SYS_ULOCK_WAIT                     = 515
	SYS_ULOCK_WAKE                     = 516
	SYS_FCLONEFILEAT                   = 517
	SYS_FS_SNAPSHOT                    = 518
	SYS_TERMINATE_WITH_PAYLOAD         = 520
	SYS_ABORT_WITH_PAYLOAD             = 521
	SYS_NECP_SESSION_OPEN              = 522
	SYS_NECP_SESSION_ACTION            = 523
	SYS_SETATTRLISTAT                  = 524
	SYS_NET_QOS_GUIDELINE              = 525
	SYS_FMOUNT                         = 526
	SYS_NTP_ADJTIME                    = 527
	SYS_NTP_GETTIME                    = 528
	SYS_OS_FAULT_WITH_PAYLOAD          = 529
	SYS_KQUEUE_WORKLOOP_CTL            = 530
	SYS___MACH_BRIDGE_REMOTE_TIME      = 531
	SYS_MAXSYSCALL                     = 532
	SYS_INVALID                        = 63
)
   07070100000E87000081A4000000000000000000000001645E367C00004724000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go  // go run mksysnum.go /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.1.sdk/usr/include/sys/syscall.h
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build arm64 && darwin
// +build arm64,darwin

package unix

// Deprecated: Use libSystem wrappers instead of direct syscalls.
const (
	SYS_SYSCALL                        = 0
	SYS_EXIT                           = 1
	SYS_FORK                           = 2
	SYS_READ                           = 3
	SYS_WRITE                          = 4
	SYS_OPEN                           = 5
	SYS_CLOSE                          = 6
	SYS_WAIT4                          = 7
	SYS_LINK                           = 9
	SYS_UNLINK                         = 10
	SYS_CHDIR                          = 12
	SYS_FCHDIR                         = 13
	SYS_MKNOD                          = 14
	SYS_CHMOD                          = 15
	SYS_CHOWN                          = 16
	SYS_GETFSSTAT                      = 18
	SYS_GETPID                         = 20
	SYS_SETUID                         = 23
	SYS_GETUID                         = 24
	SYS_GETEUID                        = 25
	SYS_PTRACE                         = 26
	SYS_RECVMSG                        = 27
	SYS_SENDMSG                        = 28
	SYS_RECVFROM                       = 29
	SYS_ACCEPT                         = 30
	SYS_GETPEERNAME                    = 31
	SYS_GETSOCKNAME                    = 32
	SYS_ACCESS                         = 33
	SYS_CHFLAGS                        = 34
	SYS_FCHFLAGS                       = 35
	SYS_SYNC                           = 36
	SYS_KILL                           = 37
	SYS_GETPPID                        = 39
	SYS_DUP                            = 41
	SYS_PIPE                           = 42
	SYS_GETEGID                        = 43
	SYS_SIGACTION                      = 46
	SYS_GETGID                         = 47
	SYS_SIGPROCMASK                    = 48
	SYS_GETLOGIN                       = 49
	SYS_SETLOGIN                       = 50
	SYS_ACCT                           = 51
	SYS_SIGPENDING                     = 52
	SYS_SIGALTSTACK                    = 53
	SYS_IOCTL                          = 54
	SYS_REBOOT                         = 55
	SYS_REVOKE                         = 56
	SYS_SYMLINK                        = 57
	SYS_READLINK                       = 58
	SYS_EXECVE                         = 59
	SYS_UMASK                          = 60
	SYS_CHROOT                         = 61
	SYS_MSYNC                          = 65
	SYS_VFORK                          = 66
	SYS_MUNMAP                         = 73
	SYS_MPROTECT                       = 74
	SYS_MADVISE                        = 75
	SYS_MINCORE                        = 78
	SYS_GETGROUPS                      = 79
	SYS_SETGROUPS                      = 80
	SYS_GETPGRP                        = 81
	SYS_SETPGID                        = 82
	SYS_SETITIMER                      = 83
	SYS_SWAPON                         = 85
	SYS_GETITIMER                      = 86
	SYS_GETDTABLESIZE                  = 89
	SYS_DUP2                           = 90
	SYS_FCNTL                          = 92
	SYS_SELECT                         = 93
	SYS_FSYNC                          = 95
	SYS_SETPRIORITY                    = 96
	SYS_SOCKET                         = 97
	SYS_CONNECT                        = 98
	SYS_GETPRIORITY                    = 100
	SYS_BIND                           = 104
	SYS_SETSOCKOPT                     = 105
	SYS_LISTEN                         = 106
	SYS_SIGSUSPEND                     = 111
	SYS_GETTIMEOFDAY                   = 116
	SYS_GETRUSAGE                      = 117
	SYS_GETSOCKOPT                     = 118
	SYS_READV                          = 120
	SYS_WRITEV                         = 121
	SYS_SETTIMEOFDAY                   = 122
	SYS_FCHOWN                         = 123
	SYS_FCHMOD                         = 124
	SYS_SETREUID                       = 126
	SYS_SETREGID                       = 127
	SYS_RENAME                         = 128
	SYS_FLOCK                          = 131
	SYS_MKFIFO                         = 132
	SYS_SENDTO                         = 133
	SYS_SHUTDOWN                       = 134
	SYS_SOCKETPAIR                     = 135
	SYS_MKDIR                          = 136
	SYS_RMDIR                          = 137
	SYS_UTIMES                         = 138
	SYS_FUTIMES                        = 139
	SYS_ADJTIME                        = 140
	SYS_GETHOSTUUID                    = 142
	SYS_SETSID                         = 147
	SYS_GETPGID                        = 151
	SYS_SETPRIVEXEC                    = 152
	SYS_PREAD                          = 153
	SYS_PWRITE                         = 154
	SYS_NFSSVC                         = 155
	SYS_STATFS                         = 157
	SYS_FSTATFS                        = 158
	SYS_UNMOUNT                        = 159
	SYS_GETFH                          = 161
	SYS_QUOTACTL                       = 165
	SYS_MOUNT                          = 167
	SYS_CSOPS                          = 169
	SYS_CSOPS_AUDITTOKEN               = 170
	SYS_WAITID                         = 173
	SYS_KDEBUG_TYPEFILTER              = 177
	SYS_KDEBUG_TRACE_STRING            = 178
	SYS_KDEBUG_TRACE64                 = 179
	SYS_KDEBUG_TRACE                   = 180
	SYS_SETGID                         = 181
	SYS_SETEGID                        = 182
	SYS_SETEUID                        = 183
	SYS_SIGRETURN                      = 184
	SYS_THREAD_SELFCOUNTS              = 186
	SYS_FDATASYNC                      = 187
	SYS_STAT                           = 188
	SYS_FSTAT                          = 189
	SYS_LSTAT                          = 190
	SYS_PATHCONF                       = 191
	SYS_FPATHCONF                      = 192
	SYS_GETRLIMIT                      = 194
	SYS_SETRLIMIT                      = 195
	SYS_GETDIRENTRIES                  = 196
	SYS_MMAP                           = 197
	SYS_LSEEK                          = 199
	SYS_TRUNCATE                       = 200
	SYS_FTRUNCATE                      = 201
	SYS_SYSCTL                         = 202
	SYS_MLOCK                          = 203
	SYS_MUNLOCK                        = 204
	SYS_UNDELETE                       = 205
	SYS_OPEN_DPROTECTED_NP             = 216
	SYS_GETATTRLIST                    = 220
	SYS_SETATTRLIST                    = 221
	SYS_GETDIRENTRIESATTR              = 222
	SYS_EXCHANGEDATA                   = 223
	SYS_SEARCHFS                       = 225
	SYS_DELETE                         = 226
	SYS_COPYFILE                       = 227
	SYS_FGETATTRLIST                   = 228
	SYS_FSETATTRLIST                   = 229
	SYS_POLL                           = 230
	SYS_WATCHEVENT                     = 231
	SYS_WAITEVENT                      = 232
	SYS_MODWATCH                       = 233
	SYS_GETXATTR                       = 234
	SYS_FGETXATTR                      = 235
	SYS_SETXATTR                       = 236
	SYS_FSETXATTR                      = 237
	SYS_REMOVEXATTR                    = 238
	SYS_FREMOVEXATTR                   = 239
	SYS_LISTXATTR                      = 240
	SYS_FLISTXATTR                     = 241
	SYS_FSCTL                          = 242
	SYS_INITGROUPS                     = 243
	SYS_POSIX_SPAWN                    = 244
	SYS_FFSCTL                         = 245
	SYS_NFSCLNT                        = 247
	SYS_FHOPEN                         = 248
	SYS_MINHERIT                       = 250
	SYS_SEMSYS                         = 251
	SYS_MSGSYS                         = 252
	SYS_SHMSYS                         = 253
	SYS_SEMCTL                         = 254
	SYS_SEMGET                         = 255
	SYS_SEMOP                          = 256
	SYS_MSGCTL                         = 258
	SYS_MSGGET                         = 259
	SYS_MSGSND                         = 260
	SYS_MSGRCV                         = 261
	SYS_SHMAT                          = 262
	SYS_SHMCTL                         = 263
	SYS_SHMDT                          = 264
	SYS_SHMGET                         = 265
	SYS_SHM_OPEN                       = 266
	SYS_SHM_UNLINK                     = 267
	SYS_SEM_OPEN                       = 268
	SYS_SEM_CLOSE                      = 269
	SYS_SEM_UNLINK                     = 270
	SYS_SEM_WAIT                       = 271
	SYS_SEM_TRYWAIT                    = 272
	SYS_SEM_POST                       = 273
	SYS_SYSCTLBYNAME                   = 274
	SYS_OPEN_EXTENDED                  = 277
	SYS_UMASK_EXTENDED                 = 278
	SYS_STAT_EXTENDED                  = 279
	SYS_LSTAT_EXTENDED                 = 280
	SYS_FSTAT_EXTENDED                 = 281
	SYS_CHMOD_EXTENDED                 = 282
	SYS_FCHMOD_EXTENDED                = 283
	SYS_ACCESS_EXTENDED                = 284
	SYS_SETTID                         = 285
	SYS_GETTID                         = 286
	SYS_SETSGROUPS                     = 287
	SYS_GETSGROUPS                     = 288
	SYS_SETWGROUPS                     = 289
	SYS_GETWGROUPS                     = 290
	SYS_MKFIFO_EXTENDED                = 291
	SYS_MKDIR_EXTENDED                 = 292
	SYS_IDENTITYSVC                    = 293
	SYS_SHARED_REGION_CHECK_NP         = 294
	SYS_VM_PRESSURE_MONITOR            = 296
	SYS_PSYNCH_RW_LONGRDLOCK           = 297
	SYS_PSYNCH_RW_YIELDWRLOCK          = 298
	SYS_PSYNCH_RW_DOWNGRADE            = 299
	SYS_PSYNCH_RW_UPGRADE              = 300
	SYS_PSYNCH_MUTEXWAIT               = 301
	SYS_PSYNCH_MUTEXDROP               = 302
	SYS_PSYNCH_CVBROAD                 = 303
	SYS_PSYNCH_CVSIGNAL                = 304
	SYS_PSYNCH_CVWAIT                  = 305
	SYS_PSYNCH_RW_RDLOCK               = 306
	SYS_PSYNCH_RW_WRLOCK               = 307
	SYS_PSYNCH_RW_UNLOCK               = 308
	SYS_PSYNCH_RW_UNLOCK2              = 309
	SYS_GETSID                         = 310
	SYS_SETTID_WITH_PID                = 311
	SYS_PSYNCH_CVCLRPREPOST            = 312
	SYS_AIO_FSYNC                      = 313
	SYS_AIO_RETURN                     = 314
	SYS_AIO_SUSPEND                    = 315
	SYS_AIO_CANCEL                     = 316
	SYS_AIO_ERROR                      = 317
	SYS_AIO_READ                       = 318
	SYS_AIO_WRITE                      = 319
	SYS_LIO_LISTIO                     = 320
	SYS_IOPOLICYSYS                    = 322
	SYS_PROCESS_POLICY                 = 323
	SYS_MLOCKALL                       = 324
	SYS_MUNLOCKALL                     = 325
	SYS_ISSETUGID                      = 327
	SYS___PTHREAD_KILL                 = 328
	SYS___PTHREAD_SIGMASK              = 329
	SYS___SIGWAIT                      = 330
	SYS___DISABLE_THREADSIGNAL         = 331
	SYS___PTHREAD_MARKCANCEL           = 332
	SYS___PTHREAD_CANCELED             = 333
	SYS___SEMWAIT_SIGNAL               = 334
	SYS_PROC_INFO                      = 336
	SYS_SENDFILE                       = 337
	SYS_STAT64                         = 338
	SYS_FSTAT64                        = 339
	SYS_LSTAT64                        = 340
	SYS_STAT64_EXTENDED                = 341
	SYS_LSTAT64_EXTENDED               = 342
	SYS_FSTAT64_EXTENDED               = 343
	SYS_GETDIRENTRIES64                = 344
	SYS_STATFS64                       = 345
	SYS_FSTATFS64                      = 346
	SYS_GETFSSTAT64                    = 347
	SYS___PTHREAD_CHDIR                = 348
	SYS___PTHREAD_FCHDIR               = 349
	SYS_AUDIT                          = 350
	SYS_AUDITON                        = 351
	SYS_GETAUID                        = 353
	SYS_SETAUID                        = 354
	SYS_GETAUDIT_ADDR                  = 357
	SYS_SETAUDIT_ADDR                  = 358
	SYS_AUDITCTL                       = 359
	SYS_BSDTHREAD_CREATE               = 360
	SYS_BSDTHREAD_TERMINATE            = 361
	SYS_KQUEUE                         = 362
	SYS_KEVENT                         = 363
	SYS_LCHOWN                         = 364
	SYS_BSDTHREAD_REGISTER             = 366
	SYS_WORKQ_OPEN                     = 367
	SYS_WORKQ_KERNRETURN               = 368
	SYS_KEVENT64                       = 369
	SYS___OLD_SEMWAIT_SIGNAL           = 370
	SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL  = 371
	SYS_THREAD_SELFID                  = 372
	SYS_LEDGER                         = 373
	SYS_KEVENT_QOS                     = 374
	SYS_KEVENT_ID                      = 375
	SYS___MAC_EXECVE                   = 380
	SYS___MAC_SYSCALL                  = 381
	SYS___MAC_GET_FILE                 = 382
	SYS___MAC_SET_FILE                 = 383
	SYS___MAC_GET_LINK                 = 384
	SYS___MAC_SET_LINK                 = 385
	SYS___MAC_GET_PROC                 = 386
	SYS___MAC_SET_PROC                 = 387
	SYS___MAC_GET_FD                   = 388
	SYS___MAC_SET_FD                   = 389
	SYS___MAC_GET_PID                  = 390
	SYS_PSELECT                        = 394
	SYS_PSELECT_NOCANCEL               = 395
	SYS_READ_NOCANCEL                  = 396
	SYS_WRITE_NOCANCEL                 = 397
	SYS_OPEN_NOCANCEL                  = 398
	SYS_CLOSE_NOCANCEL                 = 399
	SYS_WAIT4_NOCANCEL                 = 400
	SYS_RECVMSG_NOCANCEL               = 401
	SYS_SENDMSG_NOCANCEL               = 402
	SYS_RECVFROM_NOCANCEL              = 403
	SYS_ACCEPT_NOCANCEL                = 404
	SYS_MSYNC_NOCANCEL                 = 405
	SYS_FCNTL_NOCANCEL                 = 406
	SYS_SELECT_NOCANCEL                = 407
	SYS_FSYNC_NOCANCEL                 = 408
	SYS_CONNECT_NOCANCEL               = 409
	SYS_SIGSUSPEND_NOCANCEL            = 410
	SYS_READV_NOCANCEL                 = 411
	SYS_WRITEV_NOCANCEL                = 412
	SYS_SENDTO_NOCANCEL                = 413
	SYS_PREAD_NOCANCEL                 = 414
	SYS_PWRITE_NOCANCEL                = 415
	SYS_WAITID_NOCANCEL                = 416
	SYS_POLL_NOCANCEL                  = 417
	SYS_MSGSND_NOCANCEL                = 418
	SYS_MSGRCV_NOCANCEL                = 419
	SYS_SEM_WAIT_NOCANCEL              = 420
	SYS_AIO_SUSPEND_NOCANCEL           = 421
	SYS___SIGWAIT_NOCANCEL             = 422
	SYS___SEMWAIT_SIGNAL_NOCANCEL      = 423
	SYS___MAC_MOUNT                    = 424
	SYS___MAC_GET_MOUNT                = 425
	SYS___MAC_GETFSSTAT                = 426
	SYS_FSGETPATH                      = 427
	SYS_AUDIT_SESSION_SELF             = 428
	SYS_AUDIT_SESSION_JOIN             = 429
	SYS_FILEPORT_MAKEPORT              = 430
	SYS_FILEPORT_MAKEFD                = 431
	SYS_AUDIT_SESSION_PORT             = 432
	SYS_PID_SUSPEND                    = 433
	SYS_PID_RESUME                     = 434
	SYS_PID_HIBERNATE                  = 435
	SYS_PID_SHUTDOWN_SOCKETS           = 436
	SYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438
	SYS_KAS_INFO                       = 439
	SYS_MEMORYSTATUS_CONTROL           = 440
	SYS_GUARDED_OPEN_NP                = 441
	SYS_GUARDED_CLOSE_NP               = 442
	SYS_GUARDED_KQUEUE_NP              = 443
	SYS_CHANGE_FDGUARD_NP              = 444
	SYS_USRCTL                         = 445
	SYS_PROC_RLIMIT_CONTROL            = 446
	SYS_CONNECTX                       = 447
	SYS_DISCONNECTX                    = 448
	SYS_PEELOFF                        = 449
	SYS_SOCKET_DELEGATE                = 450
	SYS_TELEMETRY                      = 451
	SYS_PROC_UUID_POLICY               = 452
	SYS_MEMORYSTATUS_GET_LEVEL         = 453
	SYS_SYSTEM_OVERRIDE                = 454
	SYS_VFS_PURGE                      = 455
	SYS_SFI_CTL                        = 456
	SYS_SFI_PIDCTL                     = 457
	SYS_COALITION                      = 458
	SYS_COALITION_INFO                 = 459
	SYS_NECP_MATCH_POLICY              = 460
	SYS_GETATTRLISTBULK                = 461
	SYS_CLONEFILEAT                    = 462
	SYS_OPENAT                         = 463
	SYS_OPENAT_NOCANCEL                = 464
	SYS_RENAMEAT                       = 465
	SYS_FACCESSAT                      = 466
	SYS_FCHMODAT                       = 467
	SYS_FCHOWNAT                       = 468
	SYS_FSTATAT                        = 469
	SYS_FSTATAT64                      = 470
	SYS_LINKAT                         = 471
	SYS_UNLINKAT                       = 472
	SYS_READLINKAT                     = 473
	SYS_SYMLINKAT                      = 474
	SYS_MKDIRAT                        = 475
	SYS_GETATTRLISTAT                  = 476
	SYS_PROC_TRACE_LOG                 = 477
	SYS_BSDTHREAD_CTL                  = 478
	SYS_OPENBYID_NP                    = 479
	SYS_RECVMSG_X                      = 480
	SYS_SENDMSG_X                      = 481
	SYS_THREAD_SELFUSAGE               = 482
	SYS_CSRCTL                         = 483
	SYS_GUARDED_OPEN_DPROTECTED_NP     = 484
	SYS_GUARDED_WRITE_NP               = 485
	SYS_GUARDED_PWRITE_NP              = 486
	SYS_GUARDED_WRITEV_NP              = 487
	SYS_RENAMEATX_NP                   = 488
	SYS_MREMAP_ENCRYPTED               = 489
	SYS_NETAGENT_TRIGGER               = 490
	SYS_STACK_SNAPSHOT_WITH_CONFIG     = 491
	SYS_MICROSTACKSHOT                 = 492
	SYS_GRAB_PGO_DATA                  = 493
	SYS_PERSONA                        = 494
	SYS_WORK_INTERVAL_CTL              = 499
	SYS_GETENTROPY                     = 500
	SYS_NECP_OPEN                      = 501
	SYS_NECP_CLIENT_ACTION             = 502
	SYS___NEXUS_OPEN                   = 503
	SYS___NEXUS_REGISTER               = 504
	SYS___NEXUS_DEREGISTER             = 505
	SYS___NEXUS_CREATE                 = 506
	SYS___NEXUS_DESTROY                = 507
	SYS___NEXUS_GET_OPT                = 508
	SYS___NEXUS_SET_OPT                = 509
	SYS___CHANNEL_OPEN                 = 510
	SYS___CHANNEL_GET_INFO             = 511
	SYS___CHANNEL_SYNC                 = 512
	SYS___CHANNEL_GET_OPT              = 513
	SYS___CHANNEL_SET_OPT              = 514
	SYS_ULOCK_WAIT                     = 515
	SYS_ULOCK_WAKE                     = 516
	SYS_FCLONEFILEAT                   = 517
	SYS_FS_SNAPSHOT                    = 518
	SYS_TERMINATE_WITH_PAYLOAD         = 520
	SYS_ABORT_WITH_PAYLOAD             = 521
	SYS_NECP_SESSION_OPEN              = 522
	SYS_NECP_SESSION_ACTION            = 523
	SYS_SETATTRLISTAT                  = 524
	SYS_NET_QOS_GUIDELINE              = 525
	SYS_FMOUNT                         = 526
	SYS_NTP_ADJTIME                    = 527
	SYS_NTP_GETTIME                    = 528
	SYS_OS_FAULT_WITH_PAYLOAD          = 529
	SYS_MAXSYSCALL                     = 530
	SYS_INVALID                        = 63
)
07070100000E88000081A4000000000000000000000001645E367C00006E8A000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go   // go run mksysnum.go https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/sys/kern/syscalls.master
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build amd64 && dragonfly
// +build amd64,dragonfly

package unix

const (
	SYS_EXIT  = 1 // { void exit(int rval); }
	SYS_FORK  = 2 // { int fork(void); }
	SYS_READ  = 3 // { ssize_t read(int fd, void *buf, size_t nbyte); }
	SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); }
	SYS_OPEN  = 5 // { int open(char *path, int flags, int mode); }
	SYS_CLOSE = 6 // { int close(int fd); }
	SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, struct rusage *rusage); } wait4 wait_args int
	// SYS_NOSYS = 8;  // { int nosys(void); } __nosys nosys_args int
	SYS_LINK                   = 9   // { int link(char *path, char *link); }
	SYS_UNLINK                 = 10  // { int unlink(char *path); }
	SYS_CHDIR                  = 12  // { int chdir(char *path); }
	SYS_FCHDIR                 = 13  // { int fchdir(int fd); }
	SYS_MKNOD                  = 14  // { int mknod(char *path, int mode, int dev); }
	SYS_CHMOD                  = 15  // { int chmod(char *path, int mode); }
	SYS_CHOWN                  = 16  // { int chown(char *path, int uid, int gid); }
	SYS_OBREAK                 = 17  // { int obreak(char *nsize); } break obreak_args int
	SYS_GETFSSTAT              = 18  // { int getfsstat(struct statfs *buf, long bufsize, int flags); }
	SYS_GETPID                 = 20  // { pid_t getpid(void); }
	SYS_MOUNT                  = 21  // { int mount(char *type, char *path, int flags, caddr_t data); }
	SYS_UNMOUNT                = 22  // { int unmount(char *path, int flags); }
	SYS_SETUID                 = 23  // { int setuid(uid_t uid); }
	SYS_GETUID                 = 24  // { uid_t getuid(void); }
	SYS_GETEUID                = 25  // { uid_t geteuid(void); }
	SYS_PTRACE                 = 26  // { int ptrace(int req, pid_t pid, caddr_t addr, int data); }
	SYS_RECVMSG                = 27  // { int recvmsg(int s, struct msghdr *msg, int flags); }
	SYS_SENDMSG                = 28  // { int sendmsg(int s, caddr_t msg, int flags); }
	SYS_RECVFROM               = 29  // { int recvfrom(int s, caddr_t buf, size_t len, int flags, caddr_t from, int *fromlenaddr); }
	SYS_ACCEPT                 = 30  // { int accept(int s, caddr_t name, int *anamelen); }
	SYS_GETPEERNAME            = 31  // { int getpeername(int fdes, caddr_t asa, int *alen); }
	SYS_GETSOCKNAME            = 32  // { int getsockname(int fdes, caddr_t asa, int *alen); }
	SYS_ACCESS                 = 33  // { int access(char *path, int flags); }
	SYS_CHFLAGS                = 34  // { int chflags(const char *path, u_long flags); }
	SYS_FCHFLAGS               = 35  // { int fchflags(int fd, u_long flags); }
	SYS_SYNC                   = 36  // { int sync(void); }
	SYS_KILL                   = 37  // { int kill(int pid, int signum); }
	SYS_GETPPID                = 39  // { pid_t getppid(void); }
	SYS_DUP                    = 41  // { int dup(int fd); }
	SYS_PIPE                   = 42  // { int pipe(void); }
	SYS_GETEGID                = 43  // { gid_t getegid(void); }
	SYS_PROFIL                 = 44  // { int profil(caddr_t samples, size_t size, u_long offset, u_int scale); }
	SYS_KTRACE                 = 45  // { int ktrace(const char *fname, int ops, int facs, int pid); }
	SYS_GETGID                 = 47  // { gid_t getgid(void); }
	SYS_GETLOGIN               = 49  // { int getlogin(char *namebuf, size_t namelen); }
	SYS_SETLOGIN               = 50  // { int setlogin(char *namebuf); }
	SYS_ACCT                   = 51  // { int acct(char *path); }
	SYS_SIGALTSTACK            = 53  // { int sigaltstack(stack_t *ss, stack_t *oss); }
	SYS_IOCTL                  = 54  // { int ioctl(int fd, u_long com, caddr_t data); }
	SYS_REBOOT                 = 55  // { int reboot(int opt); }
	SYS_REVOKE                 = 56  // { int revoke(char *path); }
	SYS_SYMLINK                = 57  // { int symlink(char *path, char *link); }
	SYS_READLINK               = 58  // { int readlink(char *path, char *buf, int count); }
	SYS_EXECVE                 = 59  // { int execve(char *fname, char **argv, char **envv); }
	SYS_UMASK                  = 60  // { int umask(int newmask); } umask umask_args int
	SYS_CHROOT                 = 61  // { int chroot(char *path); }
	SYS_MSYNC                  = 65  // { int msync(void *addr, size_t len, int flags); }
	SYS_VFORK                  = 66  // { pid_t vfork(void); }
	SYS_SBRK                   = 69  // { caddr_t sbrk(size_t incr); }
	SYS_SSTK                   = 70  // { int sstk(size_t incr); }
	SYS_MUNMAP                 = 73  // { int munmap(void *addr, size_t len); }
	SYS_MPROTECT               = 74  // { int mprotect(void *addr, size_t len, int prot); }
	SYS_MADVISE                = 75  // { int madvise(void *addr, size_t len, int behav); }
	SYS_MINCORE                = 78  // { int mincore(const void *addr, size_t len, char *vec); }
	SYS_GETGROUPS              = 79  // { int getgroups(u_int gidsetsize, gid_t *gidset); }
	SYS_SETGROUPS              = 80  // { int setgroups(u_int gidsetsize, gid_t *gidset); }
	SYS_GETPGRP                = 81  // { int getpgrp(void); }
	SYS_SETPGID                = 82  // { int setpgid(int pid, int pgid); }
	SYS_SETITIMER              = 83  // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); }
	SYS_SWAPON                 = 85  // { int swapon(char *name); }
	SYS_GETITIMER              = 86  // { int getitimer(u_int which, struct itimerval *itv); }
	SYS_GETDTABLESIZE          = 89  // { int getdtablesize(void); }
	SYS_DUP2                   = 90  // { int dup2(int from, int to); }
	SYS_FCNTL                  = 92  // { int fcntl(int fd, int cmd, long arg); }
	SYS_SELECT                 = 93  // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
	SYS_FSYNC                  = 95  // { int fsync(int fd); }
	SYS_SETPRIORITY            = 96  // { int setpriority(int which, int who, int prio); }
	SYS_SOCKET                 = 97  // { int socket(int domain, int type, int protocol); }
	SYS_CONNECT                = 98  // { int connect(int s, caddr_t name, int namelen); }
	SYS_GETPRIORITY            = 100 // { int getpriority(int which, int who); }
	SYS_BIND                   = 104 // { int bind(int s, caddr_t name, int namelen); }
	SYS_SETSOCKOPT             = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); }
	SYS_LISTEN                 = 106 // { int listen(int s, int backlog); }
	SYS_GETTIMEOFDAY           = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); }
	SYS_GETRUSAGE              = 117 // { int getrusage(int who, struct rusage *rusage); }
	SYS_GETSOCKOPT             = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); }
	SYS_READV                  = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); }
	SYS_WRITEV                 = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); }
	SYS_SETTIMEOFDAY           = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); }
	SYS_FCHOWN                 = 123 // { int fchown(int fd, int uid, int gid); }
	SYS_FCHMOD                 = 124 // { int fchmod(int fd, int mode); }
	SYS_SETREUID               = 126 // { int setreuid(int ruid, int euid); }
	SYS_SETREGID               = 127 // { int setregid(int rgid, int egid); }
	SYS_RENAME                 = 128 // { int rename(char *from, char *to); }
	SYS_FLOCK                  = 131 // { int flock(int fd, int how); }
	SYS_MKFIFO                 = 132 // { int mkfifo(char *path, int mode); }
	SYS_SENDTO                 = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); }
	SYS_SHUTDOWN               = 134 // { int shutdown(int s, int how); }
	SYS_SOCKETPAIR             = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); }
	SYS_MKDIR                  = 136 // { int mkdir(char *path, int mode); }
	SYS_RMDIR                  = 137 // { int rmdir(char *path); }
	SYS_UTIMES                 = 138 // { int utimes(char *path, struct timeval *tptr); }
	SYS_ADJTIME                = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); }
	SYS_SETSID                 = 147 // { int setsid(void); }
	SYS_QUOTACTL               = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); }
	SYS_STATFS                 = 157 // { int statfs(char *path, struct statfs *buf); }
	SYS_FSTATFS                = 158 // { int fstatfs(int fd, struct statfs *buf); }
	SYS_GETFH                  = 161 // { int getfh(char *fname, struct fhandle *fhp); }
	SYS_SYSARCH                = 165 // { int sysarch(int op, char *parms); }
	SYS_RTPRIO                 = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); }
	SYS_EXTPREAD               = 173 // { ssize_t extpread(int fd, void *buf, size_t nbyte, int flags, off_t offset); }
	SYS_EXTPWRITE              = 174 // { ssize_t extpwrite(int fd, const void *buf, size_t nbyte, int flags, off_t offset); }
	SYS_NTP_ADJTIME            = 176 // { int ntp_adjtime(struct timex *tp); }
	SYS_SETGID                 = 181 // { int setgid(gid_t gid); }
	SYS_SETEGID                = 182 // { int setegid(gid_t egid); }
	SYS_SETEUID                = 183 // { int seteuid(uid_t euid); }
	SYS_PATHCONF               = 191 // { int pathconf(char *path, int name); }
	SYS_FPATHCONF              = 192 // { int fpathconf(int fd, int name); }
	SYS_GETRLIMIT              = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int
	SYS_SETRLIMIT              = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int
	SYS_MMAP                   = 197 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, int pad, off_t pos); }
	SYS_LSEEK                  = 199 // { off_t lseek(int fd, int pad, off_t offset, int whence); }
	SYS_TRUNCATE               = 200 // { int truncate(char *path, int pad, off_t length); }
	SYS_FTRUNCATE              = 201 // { int ftruncate(int fd, int pad, off_t length); }
	SYS___SYSCTL               = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int
	SYS_MLOCK                  = 203 // { int mlock(const void *addr, size_t len); }
	SYS_MUNLOCK                = 204 // { int munlock(const void *addr, size_t len); }
	SYS_UNDELETE               = 205 // { int undelete(char *path); }
	SYS_FUTIMES                = 206 // { int futimes(int fd, struct timeval *tptr); }
	SYS_GETPGID                = 207 // { int getpgid(pid_t pid); }
	SYS_POLL                   = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); }
	SYS___SEMCTL               = 220 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); }
	SYS_SEMGET                 = 221 // { int semget(key_t key, int nsems, int semflg); }
	SYS_SEMOP                  = 222 // { int semop(int semid, struct sembuf *sops, u_int nsops); }
	SYS_MSGCTL                 = 224 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); }
	SYS_MSGGET                 = 225 // { int msgget(key_t key, int msgflg); }
	SYS_MSGSND                 = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
	SYS_MSGRCV                 = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
	SYS_SHMAT                  = 228 // { caddr_t shmat(int shmid, const void *shmaddr, int shmflg); }
	SYS_SHMCTL                 = 229 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); }
	SYS_SHMDT                  = 230 // { int shmdt(const void *shmaddr); }
	SYS_SHMGET                 = 231 // { int shmget(key_t key, size_t size, int shmflg); }
	SYS_CLOCK_GETTIME          = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); }
	SYS_CLOCK_SETTIME          = 233 // { int clock_settime(clockid_t clock_id, const struct timespec *tp); }
	SYS_CLOCK_GETRES           = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); }
	SYS_NANOSLEEP              = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
	SYS_MINHERIT               = 250 // { int minherit(void *addr, size_t len, int inherit); }
	SYS_RFORK                  = 251 // { int rfork(int flags); }
	SYS_OPENBSD_POLL           = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, int timeout); }
	SYS_ISSETUGID              = 253 // { int issetugid(void); }
	SYS_LCHOWN                 = 254 // { int lchown(char *path, int uid, int gid); }
	SYS_LCHMOD                 = 274 // { int lchmod(char *path, mode_t mode); }
	SYS_LUTIMES                = 276 // { int lutimes(char *path, struct timeval *tptr); }
	SYS_EXTPREADV              = 289 // { ssize_t extpreadv(int fd, const struct iovec *iovp, int iovcnt, int flags, off_t offset); }
	SYS_EXTPWRITEV             = 290 // { ssize_t extpwritev(int fd, const struct iovec *iovp, int iovcnt, int flags, off_t offset); }
	SYS_FHSTATFS               = 297 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); }
	SYS_FHOPEN                 = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); }
	SYS_MODNEXT                = 300 // { int modnext(int modid); }
	SYS_MODSTAT                = 301 // { int modstat(int modid, struct module_stat* stat); }
	SYS_MODFNEXT               = 302 // { int modfnext(int modid); }
	SYS_MODFIND                = 303 // { int modfind(const char *name); }
	SYS_KLDLOAD                = 304 // { int kldload(const char *file); }
	SYS_KLDUNLOAD              = 305 // { int kldunload(int fileid); }
	SYS_KLDFIND                = 306 // { int kldfind(const char *file); }
	SYS_KLDNEXT                = 307 // { int kldnext(int fileid); }
	SYS_KLDSTAT                = 308 // { int kldstat(int fileid, struct kld_file_stat* stat); }
	SYS_KLDFIRSTMOD            = 309 // { int kldfirstmod(int fileid); }
	SYS_GETSID                 = 310 // { int getsid(pid_t pid); }
	SYS_SETRESUID              = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); }
	SYS_SETRESGID              = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
	SYS_AIO_RETURN             = 314 // { int aio_return(struct aiocb *aiocbp); }
	SYS_AIO_SUSPEND            = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); }
	SYS_AIO_CANCEL             = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); }
	SYS_AIO_ERROR              = 317 // { int aio_error(struct aiocb *aiocbp); }
	SYS_AIO_READ               = 318 // { int aio_read(struct aiocb *aiocbp); }
	SYS_AIO_WRITE              = 319 // { int aio_write(struct aiocb *aiocbp); }
	SYS_LIO_LISTIO             = 320 // { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); }
	SYS_YIELD                  = 321 // { int yield(void); }
	SYS_MLOCKALL               = 324 // { int mlockall(int how); }
	SYS_MUNLOCKALL             = 325 // { int munlockall(void); }
	SYS___GETCWD               = 326 // { int __getcwd(u_char *buf, u_int buflen); }
	SYS_SCHED_SETPARAM         = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); }
	SYS_SCHED_GETPARAM         = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); }
	SYS_SCHED_SETSCHEDULER     = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); }
	SYS_SCHED_GETSCHEDULER     = 330 // { int sched_getscheduler (pid_t pid); }
	SYS_SCHED_YIELD            = 331 // { int sched_yield (void); }
	SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); }
	SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); }
	SYS_SCHED_RR_GET_INTERVAL  = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); }
	SYS_UTRACE                 = 335 // { int utrace(const void *addr, size_t len); }
	SYS_KLDSYM                 = 337 // { int kldsym(int fileid, int cmd, void *data); }
	SYS_JAIL                   = 338 // { int jail(struct jail *jail); }
	SYS_SIGPROCMASK            = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); }
	SYS_SIGSUSPEND             = 341 // { int sigsuspend(const sigset_t *sigmask); }
	SYS_SIGACTION              = 342 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); }
	SYS_SIGPENDING             = 343 // { int sigpending(sigset_t *set); }
	SYS_SIGRETURN              = 344 // { int sigreturn(ucontext_t *sigcntxp); }
	SYS_SIGTIMEDWAIT           = 345 // { int sigtimedwait(const sigset_t *set,siginfo_t *info, const struct timespec *timeout); }
	SYS_SIGWAITINFO            = 346 // { int sigwaitinfo(const sigset_t *set,siginfo_t *info); }
	SYS___ACL_GET_FILE         = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_SET_FILE         = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_GET_FD           = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); }
	SYS___ACL_SET_FD           = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); }
	SYS___ACL_DELETE_FILE      = 351 // { int __acl_delete_file(const char *path, acl_type_t type); }
	SYS___ACL_DELETE_FD        = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); }
	SYS___ACL_ACLCHECK_FILE    = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_ACLCHECK_FD      = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); }
	SYS_EXTATTRCTL             = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }
	SYS_EXTATTR_SET_FILE       = 356 // { int extattr_set_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_GET_FILE       = 357 // { int extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_FILE    = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }
	SYS_AIO_WAITCOMPLETE       = 359 // { int aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); }
	SYS_GETRESUID              = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
	SYS_GETRESGID              = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
	SYS_KQUEUE                 = 362 // { int kqueue(void); }
	SYS_KEVENT                 = 363 // { int kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
	SYS_KENV                   = 390 // { int kenv(int what, const char *name, char *value, int len); }
	SYS_LCHFLAGS               = 391 // { int lchflags(const char *path, u_long flags); }
	SYS_UUIDGEN                = 392 // { int uuidgen(struct uuid *store, int count); }
	SYS_SENDFILE               = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); }
	SYS_VARSYM_SET             = 450 // { int varsym_set(int level, const char *name, const char *data); }
	SYS_VARSYM_GET             = 451 // { int varsym_get(int mask, const char *wild, char *buf, int bufsize); }
	SYS_VARSYM_LIST            = 452 // { int varsym_list(int level, char *buf, int maxsize, int *marker); }
	SYS_EXEC_SYS_REGISTER      = 465 // { int exec_sys_register(void *entry); }
	SYS_EXEC_SYS_UNREGISTER    = 466 // { int exec_sys_unregister(int id); }
	SYS_SYS_CHECKPOINT         = 467 // { int sys_checkpoint(int type, int fd, pid_t pid, int retval); }
	SYS_MOUNTCTL               = 468 // { int mountctl(const char *path, int op, int fd, const void *ctl, int ctllen, void *buf, int buflen); }
	SYS_UMTX_SLEEP             = 469 // { int umtx_sleep(volatile const int *ptr, int value, int timeout); }
	SYS_UMTX_WAKEUP            = 470 // { int umtx_wakeup(volatile const int *ptr, int count); }
	SYS_JAIL_ATTACH            = 471 // { int jail_attach(int jid); }
	SYS_SET_TLS_AREA           = 472 // { int set_tls_area(int which, struct tls_info *info, size_t infosize); }
	SYS_GET_TLS_AREA           = 473 // { int get_tls_area(int which, struct tls_info *info, size_t infosize); }
	SYS_CLOSEFROM              = 474 // { int closefrom(int fd); }
	SYS_STAT                   = 475 // { int stat(const char *path, struct stat *ub); }
	SYS_FSTAT                  = 476 // { int fstat(int fd, struct stat *sb); }
	SYS_LSTAT                  = 477 // { int lstat(const char *path, struct stat *ub); }
	SYS_FHSTAT                 = 478 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); }
	SYS_GETDIRENTRIES          = 479 // { int getdirentries(int fd, char *buf, u_int count, long *basep); }
	SYS_GETDENTS               = 480 // { int getdents(int fd, char *buf, size_t count); }
	SYS_USCHED_SET             = 481 // { int usched_set(pid_t pid, int cmd, void *data, int bytes); }
	SYS_EXTACCEPT              = 482 // { int extaccept(int s, int flags, caddr_t name, int *anamelen); }
	SYS_EXTCONNECT             = 483 // { int extconnect(int s, int flags, caddr_t name, int namelen); }
	SYS_MCONTROL               = 485 // { int mcontrol(void *addr, size_t len, int behav, off_t value); }
	SYS_VMSPACE_CREATE         = 486 // { int vmspace_create(void *id, int type, void *data); }
	SYS_VMSPACE_DESTROY        = 487 // { int vmspace_destroy(void *id); }
	SYS_VMSPACE_CTL            = 488 // { int vmspace_ctl(void *id, int cmd, 		struct trapframe *tframe,	struct vextframe *vframe); }
	SYS_VMSPACE_MMAP           = 489 // { int vmspace_mmap(void *id, void *addr, size_t len, int prot, int flags, int fd, off_t offset); }
	SYS_VMSPACE_MUNMAP         = 490 // { int vmspace_munmap(void *id, void *addr,	size_t len); }
	SYS_VMSPACE_MCONTROL       = 491 // { int vmspace_mcontrol(void *id, void *addr, 	size_t len, int behav, off_t value); }
	SYS_VMSPACE_PREAD          = 492 // { ssize_t vmspace_pread(void *id, void *buf, size_t nbyte, int flags, off_t offset); }
	SYS_VMSPACE_PWRITE         = 493 // { ssize_t vmspace_pwrite(void *id, const void *buf, size_t nbyte, int flags, off_t offset); }
	SYS_EXTEXIT                = 494 // { void extexit(int how, int status, void *addr); }
	SYS_LWP_CREATE             = 495 // { int lwp_create(struct lwp_params *params); }
	SYS_LWP_GETTID             = 496 // { lwpid_t lwp_gettid(void); }
	SYS_LWP_KILL               = 497 // { int lwp_kill(pid_t pid, lwpid_t tid, int signum); }
	SYS_LWP_RTPRIO             = 498 // { int lwp_rtprio(int function, pid_t pid, lwpid_t tid, struct rtprio *rtp); }
	SYS_PSELECT                = 499 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts,    const sigset_t *sigmask); }
	SYS_STATVFS                = 500 // { int statvfs(const char *path, struct statvfs *buf); }
	SYS_FSTATVFS               = 501 // { int fstatvfs(int fd, struct statvfs *buf); }
	SYS_FHSTATVFS              = 502 // { int fhstatvfs(const struct fhandle *u_fhp, struct statvfs *buf); }
	SYS_GETVFSSTAT             = 503 // { int getvfsstat(struct statfs *buf,          struct statvfs *vbuf, long vbufsize, int flags); }
	SYS_OPENAT                 = 504 // { int openat(int fd, char *path, int flags, int mode); }
	SYS_FSTATAT                = 505 // { int fstatat(int fd, char *path, 	struct stat *sb, int flags); }
	SYS_FCHMODAT               = 506 // { int fchmodat(int fd, char *path, int mode, int flags); }
	SYS_FCHOWNAT               = 507 // { int fchownat(int fd, char *path, int uid, int gid, int flags); }
	SYS_UNLINKAT               = 508 // { int unlinkat(int fd, char *path, int flags); }
	SYS_FACCESSAT              = 509 // { int faccessat(int fd, char *path, int amode, int flags); }
	SYS_MQ_OPEN                = 510 // { mqd_t mq_open(const char * name, int oflag, mode_t mode, struct mq_attr *attr); }
	SYS_MQ_CLOSE               = 511 // { int mq_close(mqd_t mqdes); }
	SYS_MQ_UNLINK              = 512 // { int mq_unlink(const char *name); }
	SYS_MQ_GETATTR             = 513 // { int mq_getattr(mqd_t mqdes, struct mq_attr *mqstat); }
	SYS_MQ_SETATTR             = 514 // { int mq_setattr(mqd_t mqdes, const struct mq_attr *mqstat, struct mq_attr *omqstat); }
	SYS_MQ_NOTIFY              = 515 // { int mq_notify(mqd_t mqdes, const struct sigevent *notification); }
	SYS_MQ_SEND                = 516 // { int mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned msg_prio); }
	SYS_MQ_RECEIVE             = 517 // { ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned *msg_prio); }
	SYS_MQ_TIMEDSEND           = 518 // { int mq_timedsend(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned msg_prio, const struct timespec *abs_timeout); }
	SYS_MQ_TIMEDRECEIVE        = 519 // { ssize_t mq_timedreceive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); }
	SYS_IOPRIO_SET             = 520 // { int ioprio_set(int which, int who, int prio); }
	SYS_IOPRIO_GET             = 521 // { int ioprio_get(int which, int who); }
	SYS_CHROOT_KERNEL          = 522 // { int chroot_kernel(char *path); }
	SYS_RENAMEAT               = 523 // { int renameat(int oldfd, char *old, int newfd, char *new); }
	SYS_MKDIRAT                = 524 // { int mkdirat(int fd, char *path, mode_t mode); }
	SYS_MKFIFOAT               = 525 // { int mkfifoat(int fd, char *path, mode_t mode); }
	SYS_MKNODAT                = 526 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); }
	SYS_READLINKAT             = 527 // { int readlinkat(int fd, char *path, char *buf, size_t bufsize); }
	SYS_SYMLINKAT              = 528 // { int symlinkat(char *path1, int fd, char *path2); }
	SYS_SWAPOFF                = 529 // { int swapoff(char *name); }
	SYS_VQUOTACTL              = 530 // { int vquotactl(const char *path, struct plistref *pref); }
	SYS_LINKAT                 = 531 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flags); }
	SYS_EACCESS                = 532 // { int eaccess(char *path, int flags); }
	SYS_LPATHCONF              = 533 // { int lpathconf(char *path, int name); }
	SYS_VMM_GUEST_CTL          = 534 // { int vmm_guest_ctl(int op, struct vmm_guest_options *options); }
	SYS_VMM_GUEST_SYNC_ADDR    = 535 // { int vmm_guest_sync_addr(long *dstaddr, long *srcaddr); }
	SYS_PROCCTL                = 536 // { int procctl(idtype_t idtype, id_t id, int cmd, void *data); }
	SYS_CHFLAGSAT              = 537 // { int chflagsat(int fd, const char *path, u_long flags, int atflags);}
	SYS_PIPE2                  = 538 // { int pipe2(int *fildes, int flags); }
	SYS_UTIMENSAT              = 539 // { int utimensat(int fd, const char *path, const struct timespec *ts, int flags); }
	SYS_FUTIMENS               = 540 // { int futimens(int fd, const struct timespec *ts); }
	SYS_ACCEPT4                = 541 // { int accept4(int s, caddr_t name, int *anamelen, int flags); }
	SYS_LWP_SETNAME            = 542 // { int lwp_setname(lwpid_t tid, const char *name); }
	SYS_PPOLL                  = 543 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *sigmask); }
	SYS_LWP_SETAFFINITY        = 544 // { int lwp_setaffinity(pid_t pid, lwpid_t tid, const cpumask_t *mask); }
	SYS_LWP_GETAFFINITY        = 545 // { int lwp_getaffinity(pid_t pid, lwpid_t tid, cpumask_t *mask); }
	SYS_LWP_CREATE2            = 546 // { int lwp_create2(struct lwp_params *params, const cpumask_t *mask); }
	SYS_GETCPUCLOCKID          = 547 // { int getcpuclockid(pid_t pid, lwpid_t lwp_id, clockid_t *clock_id); }
	SYS_WAIT6                  = 548 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); }
	SYS_LWP_GETNAME            = 549 // { int lwp_getname(lwpid_t tid, char *name, size_t len); }
	SYS_GETRANDOM              = 550 // { ssize_t getrandom(void *buf, size_t len, unsigned flags); }
	SYS___REALPATH             = 551 // { ssize_t __realpath(const char *path, char *buf, size_t len); }
)
  07070100000E89000081A4000000000000000000000001645E367C00009076000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go   // go run mksysnum.go https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build 386 && freebsd
// +build 386,freebsd

package unix

const (
	// SYS_NOSYS = 0;  // { int nosys(void); } syscall nosys_args int
	SYS_EXIT                     = 1   // { void sys_exit(int rval); } exit sys_exit_args void
	SYS_FORK                     = 2   // { int fork(void); }
	SYS_READ                     = 3   // { ssize_t read(int fd, void *buf, size_t nbyte); }
	SYS_WRITE                    = 4   // { ssize_t write(int fd, const void *buf, size_t nbyte); }
	SYS_OPEN                     = 5   // { int open(char *path, int flags, int mode); }
	SYS_CLOSE                    = 6   // { int close(int fd); }
	SYS_WAIT4                    = 7   // { int wait4(int pid, int *status, int options, struct rusage *rusage); }
	SYS_LINK                     = 9   // { int link(char *path, char *link); }
	SYS_UNLINK                   = 10  // { int unlink(char *path); }
	SYS_CHDIR                    = 12  // { int chdir(char *path); }
	SYS_FCHDIR                   = 13  // { int fchdir(int fd); }
	SYS_CHMOD                    = 15  // { int chmod(char *path, int mode); }
	SYS_CHOWN                    = 16  // { int chown(char *path, int uid, int gid); }
	SYS_BREAK                    = 17  // { caddr_t break(char *nsize); }
	SYS_GETPID                   = 20  // { pid_t getpid(void); }
	SYS_MOUNT                    = 21  // { int mount(char *type, char *path, int flags, caddr_t data); }
	SYS_UNMOUNT                  = 22  // { int unmount(char *path, int flags); }
	SYS_SETUID                   = 23  // { int setuid(uid_t uid); }
	SYS_GETUID                   = 24  // { uid_t getuid(void); }
	SYS_GETEUID                  = 25  // { uid_t geteuid(void); }
	SYS_PTRACE                   = 26  // { int ptrace(int req, pid_t pid, caddr_t addr, int data); }
	SYS_RECVMSG                  = 27  // { int recvmsg(int s, struct msghdr *msg, int flags); }
	SYS_SENDMSG                  = 28  // { int sendmsg(int s, struct msghdr *msg, int flags); }
	SYS_RECVFROM                 = 29  // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); }
	SYS_ACCEPT                   = 30  // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); }
	SYS_GETPEERNAME              = 31  // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }
	SYS_GETSOCKNAME              = 32  // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }
	SYS_ACCESS                   = 33  // { int access(char *path, int amode); }
	SYS_CHFLAGS                  = 34  // { int chflags(const char *path, u_long flags); }
	SYS_FCHFLAGS                 = 35  // { int fchflags(int fd, u_long flags); }
	SYS_SYNC                     = 36  // { int sync(void); }
	SYS_KILL                     = 37  // { int kill(int pid, int signum); }
	SYS_GETPPID                  = 39  // { pid_t getppid(void); }
	SYS_DUP                      = 41  // { int dup(u_int fd); }
	SYS_GETEGID                  = 43  // { gid_t getegid(void); }
	SYS_PROFIL                   = 44  // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); }
	SYS_KTRACE                   = 45  // { int ktrace(const char *fname, int ops, int facs, int pid); }
	SYS_GETGID                   = 47  // { gid_t getgid(void); }
	SYS_GETLOGIN                 = 49  // { int getlogin(char *namebuf, u_int namelen); }
	SYS_SETLOGIN                 = 50  // { int setlogin(char *namebuf); }
	SYS_ACCT                     = 51  // { int acct(char *path); }
	SYS_SIGALTSTACK              = 53  // { int sigaltstack(stack_t *ss, stack_t *oss); }
	SYS_IOCTL                    = 54  // { int ioctl(int fd, u_long com, caddr_t data); }
	SYS_REBOOT                   = 55  // { int reboot(int opt); }
	SYS_REVOKE                   = 56  // { int revoke(char *path); }
	SYS_SYMLINK                  = 57  // { int symlink(char *path, char *link); }
	SYS_READLINK                 = 58  // { ssize_t readlink(char *path, char *buf, size_t count); }
	SYS_EXECVE                   = 59  // { int execve(char *fname, char **argv, char **envv); }
	SYS_UMASK                    = 60  // { int umask(int newmask); }
	SYS_CHROOT                   = 61  // { int chroot(char *path); }
	SYS_MSYNC                    = 65  // { int msync(void *addr, size_t len, int flags); }
	SYS_VFORK                    = 66  // { int vfork(void); }
	SYS_SBRK                     = 69  // { int sbrk(int incr); }
	SYS_SSTK                     = 70  // { int sstk(int incr); }
	SYS_MUNMAP                   = 73  // { int munmap(void *addr, size_t len); }
	SYS_MPROTECT                 = 74  // { int mprotect(void *addr, size_t len, int prot); }
	SYS_MADVISE                  = 75  // { int madvise(void *addr, size_t len, int behav); }
	SYS_MINCORE                  = 78  // { int mincore(const void *addr, size_t len, char *vec); }
	SYS_GETGROUPS                = 79  // { int getgroups(u_int gidsetsize, gid_t *gidset); }
	SYS_SETGROUPS                = 80  // { int setgroups(u_int gidsetsize, gid_t *gidset); }
	SYS_GETPGRP                  = 81  // { int getpgrp(void); }
	SYS_SETPGID                  = 82  // { int setpgid(int pid, int pgid); }
	SYS_SETITIMER                = 83  // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); }
	SYS_SWAPON                   = 85  // { int swapon(char *name); }
	SYS_GETITIMER                = 86  // { int getitimer(u_int which, struct itimerval *itv); }
	SYS_GETDTABLESIZE            = 89  // { int getdtablesize(void); }
	SYS_DUP2                     = 90  // { int dup2(u_int from, u_int to); }
	SYS_FCNTL                    = 92  // { int fcntl(int fd, int cmd, long arg); }
	SYS_SELECT                   = 93  // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
	SYS_FSYNC                    = 95  // { int fsync(int fd); }
	SYS_SETPRIORITY              = 96  // { int setpriority(int which, int who, int prio); }
	SYS_SOCKET                   = 97  // { int socket(int domain, int type, int protocol); }
	SYS_CONNECT                  = 98  // { int connect(int s, caddr_t name, int namelen); }
	SYS_GETPRIORITY              = 100 // { int getpriority(int which, int who); }
	SYS_BIND                     = 104 // { int bind(int s, caddr_t name, int namelen); }
	SYS_SETSOCKOPT               = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); }
	SYS_LISTEN                   = 106 // { int listen(int s, int backlog); }
	SYS_GETTIMEOFDAY             = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); }
	SYS_GETRUSAGE                = 117 // { int getrusage(int who, struct rusage *rusage); }
	SYS_GETSOCKOPT               = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); }
	SYS_READV                    = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); }
	SYS_WRITEV                   = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); }
	SYS_SETTIMEOFDAY             = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); }
	SYS_FCHOWN                   = 123 // { int fchown(int fd, int uid, int gid); }
	SYS_FCHMOD                   = 124 // { int fchmod(int fd, int mode); }
	SYS_SETREUID                 = 126 // { int setreuid(int ruid, int euid); }
	SYS_SETREGID                 = 127 // { int setregid(int rgid, int egid); }
	SYS_RENAME                   = 128 // { int rename(char *from, char *to); }
	SYS_FLOCK                    = 131 // { int flock(int fd, int how); }
	SYS_MKFIFO                   = 132 // { int mkfifo(char *path, int mode); }
	SYS_SENDTO                   = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); }
	SYS_SHUTDOWN                 = 134 // { int shutdown(int s, int how); }
	SYS_SOCKETPAIR               = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); }
	SYS_MKDIR                    = 136 // { int mkdir(char *path, int mode); }
	SYS_RMDIR                    = 137 // { int rmdir(char *path); }
	SYS_UTIMES                   = 138 // { int utimes(char *path, struct timeval *tptr); }
	SYS_ADJTIME                  = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); }
	SYS_SETSID                   = 147 // { int setsid(void); }
	SYS_QUOTACTL                 = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); }
	SYS_NLM_SYSCALL              = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); }
	SYS_NFSSVC                   = 155 // { int nfssvc(int flag, caddr_t argp); }
	SYS_LGETFH                   = 160 // { int lgetfh(char *fname, struct fhandle *fhp); }
	SYS_GETFH                    = 161 // { int getfh(char *fname, struct fhandle *fhp); }
	SYS_SYSARCH                  = 165 // { int sysarch(int op, char *parms); }
	SYS_RTPRIO                   = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); }
	SYS_SEMSYS                   = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); }
	SYS_MSGSYS                   = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); }
	SYS_SHMSYS                   = 171 // { int shmsys(int which, int a2, int a3, int a4); }
	SYS_SETFIB                   = 175 // { int setfib(int fibnum); }
	SYS_NTP_ADJTIME              = 176 // { int ntp_adjtime(struct timex *tp); }
	SYS_SETGID                   = 181 // { int setgid(gid_t gid); }
	SYS_SETEGID                  = 182 // { int setegid(gid_t egid); }
	SYS_SETEUID                  = 183 // { int seteuid(uid_t euid); }
	SYS_PATHCONF                 = 191 // { int pathconf(char *path, int name); }
	SYS_FPATHCONF                = 192 // { int fpathconf(int fd, int name); }
	SYS_GETRLIMIT                = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int
	SYS_SETRLIMIT                = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int
	SYS___SYSCTL                 = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int
	SYS_MLOCK                    = 203 // { int mlock(const void *addr, size_t len); }
	SYS_MUNLOCK                  = 204 // { int munlock(const void *addr, size_t len); }
	SYS_UNDELETE                 = 205 // { int undelete(char *path); }
	SYS_FUTIMES                  = 206 // { int futimes(int fd, struct timeval *tptr); }
	SYS_GETPGID                  = 207 // { int getpgid(pid_t pid); }
	SYS_POLL                     = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); }
	SYS_SEMGET                   = 221 // { int semget(key_t key, int nsems, int semflg); }
	SYS_SEMOP                    = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); }
	SYS_MSGGET                   = 225 // { int msgget(key_t key, int msgflg); }
	SYS_MSGSND                   = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
	SYS_MSGRCV                   = 227 // { ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
	SYS_SHMAT                    = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); }
	SYS_SHMDT                    = 230 // { int shmdt(const void *shmaddr); }
	SYS_SHMGET                   = 231 // { int shmget(key_t key, size_t size, int shmflg); }
	SYS_CLOCK_GETTIME            = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); }
	SYS_CLOCK_SETTIME            = 233 // { int clock_settime(clockid_t clock_id, const struct timespec *tp); }
	SYS_CLOCK_GETRES             = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); }
	SYS_KTIMER_CREATE            = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); }
	SYS_KTIMER_DELETE            = 236 // { int ktimer_delete(int timerid); }
	SYS_KTIMER_SETTIME           = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }
	SYS_KTIMER_GETTIME           = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); }
	SYS_KTIMER_GETOVERRUN        = 239 // { int ktimer_getoverrun(int timerid); }
	SYS_NANOSLEEP                = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
	SYS_FFCLOCK_GETCOUNTER       = 241 // { int ffclock_getcounter(ffcounter *ffcount); }
	SYS_FFCLOCK_SETESTIMATE      = 242 // { int ffclock_setestimate(struct ffclock_estimate *cest); }
	SYS_FFCLOCK_GETESTIMATE      = 243 // { int ffclock_getestimate(struct ffclock_estimate *cest); }
	SYS_CLOCK_NANOSLEEP          = 244 // { int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); }
	SYS_CLOCK_GETCPUCLOCKID2     = 247 // { int clock_getcpuclockid2(id_t id, int which, clockid_t *clock_id); }
	SYS_NTP_GETTIME              = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }
	SYS_MINHERIT                 = 250 // { int minherit(void *addr, size_t len, int inherit); }
	SYS_RFORK                    = 251 // { int rfork(int flags); }
	SYS_ISSETUGID                = 253 // { int issetugid(void); }
	SYS_LCHOWN                   = 254 // { int lchown(char *path, int uid, int gid); }
	SYS_AIO_READ                 = 255 // { int aio_read(struct aiocb *aiocbp); }
	SYS_AIO_WRITE                = 256 // { int aio_write(struct aiocb *aiocbp); }
	SYS_LIO_LISTIO               = 257 // { int lio_listio(int mode, struct aiocb* const *acb_list, int nent, struct sigevent *sig); }
	SYS_LCHMOD                   = 274 // { int lchmod(char *path, mode_t mode); }
	SYS_LUTIMES                  = 276 // { int lutimes(char *path, struct timeval *tptr); }
	SYS_PREADV                   = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }
	SYS_PWRITEV                  = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }
	SYS_FHOPEN                   = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); }
	SYS_MODNEXT                  = 300 // { int modnext(int modid); }
	SYS_MODSTAT                  = 301 // { int modstat(int modid, struct module_stat* stat); }
	SYS_MODFNEXT                 = 302 // { int modfnext(int modid); }
	SYS_MODFIND                  = 303 // { int modfind(const char *name); }
	SYS_KLDLOAD                  = 304 // { int kldload(const char *file); }
	SYS_KLDUNLOAD                = 305 // { int kldunload(int fileid); }
	SYS_KLDFIND                  = 306 // { int kldfind(const char *file); }
	SYS_KLDNEXT                  = 307 // { int kldnext(int fileid); }
	SYS_KLDSTAT                  = 308 // { int kldstat(int fileid, struct kld_file_stat *stat); }
	SYS_KLDFIRSTMOD              = 309 // { int kldfirstmod(int fileid); }
	SYS_GETSID                   = 310 // { int getsid(pid_t pid); }
	SYS_SETRESUID                = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); }
	SYS_SETRESGID                = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
	SYS_AIO_RETURN               = 314 // { ssize_t aio_return(struct aiocb *aiocbp); }
	SYS_AIO_SUSPEND              = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); }
	SYS_AIO_CANCEL               = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); }
	SYS_AIO_ERROR                = 317 // { int aio_error(struct aiocb *aiocbp); }
	SYS_YIELD                    = 321 // { int yield(void); }
	SYS_MLOCKALL                 = 324 // { int mlockall(int how); }
	SYS_MUNLOCKALL               = 325 // { int munlockall(void); }
	SYS___GETCWD                 = 326 // { int __getcwd(char *buf, size_t buflen); }
	SYS_SCHED_SETPARAM           = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); }
	SYS_SCHED_GETPARAM           = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); }
	SYS_SCHED_SETSCHEDULER       = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); }
	SYS_SCHED_GETSCHEDULER       = 330 // { int sched_getscheduler (pid_t pid); }
	SYS_SCHED_YIELD              = 331 // { int sched_yield (void); }
	SYS_SCHED_GET_PRIORITY_MAX   = 332 // { int sched_get_priority_max (int policy); }
	SYS_SCHED_GET_PRIORITY_MIN   = 333 // { int sched_get_priority_min (int policy); }
	SYS_SCHED_RR_GET_INTERVAL    = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); }
	SYS_UTRACE                   = 335 // { int utrace(const void *addr, size_t len); }
	SYS_KLDSYM                   = 337 // { int kldsym(int fileid, int cmd, void *data); }
	SYS_JAIL                     = 338 // { int jail(struct jail *jail); }
	SYS_SIGPROCMASK              = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); }
	SYS_SIGSUSPEND               = 341 // { int sigsuspend(const sigset_t *sigmask); }
	SYS_SIGPENDING               = 343 // { int sigpending(sigset_t *set); }
	SYS_SIGTIMEDWAIT             = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); }
	SYS_SIGWAITINFO              = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); }
	SYS___ACL_GET_FILE           = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_SET_FILE           = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_GET_FD             = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); }
	SYS___ACL_SET_FD             = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); }
	SYS___ACL_DELETE_FILE        = 351 // { int __acl_delete_file(const char *path, acl_type_t type); }
	SYS___ACL_DELETE_FD          = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); }
	SYS___ACL_ACLCHECK_FILE      = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_ACLCHECK_FD        = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); }
	SYS_EXTATTRCTL               = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }
	SYS_EXTATTR_SET_FILE         = 356 // { ssize_t extattr_set_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_GET_FILE         = 357 // { ssize_t extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_FILE      = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }
	SYS_AIO_WAITCOMPLETE         = 359 // { ssize_t aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); }
	SYS_GETRESUID                = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
	SYS_GETRESGID                = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
	SYS_KQUEUE                   = 362 // { int kqueue(void); }
	SYS_EXTATTR_SET_FD           = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_GET_FD           = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_FD        = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }
	SYS___SETUGID                = 374 // { int __setugid(int flag); }
	SYS_EACCESS                  = 376 // { int eaccess(char *path, int amode); }
	SYS_NMOUNT                   = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); }
	SYS___MAC_GET_PROC           = 384 // { int __mac_get_proc(struct mac *mac_p); }
	SYS___MAC_SET_PROC           = 385 // { int __mac_set_proc(struct mac *mac_p); }
	SYS___MAC_GET_FD             = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); }
	SYS___MAC_GET_FILE           = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); }
	SYS___MAC_SET_FD             = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); }
	SYS___MAC_SET_FILE           = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); }
	SYS_KENV                     = 390 // { int kenv(int what, const char *name, char *value, int len); }
	SYS_LCHFLAGS                 = 391 // { int lchflags(const char *path, u_long flags); }
	SYS_UUIDGEN                  = 392 // { int uuidgen(struct uuid *store, int count); }
	SYS_SENDFILE                 = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); }
	SYS_MAC_SYSCALL              = 394 // { int mac_syscall(const char *policy, int call, void *arg); }
	SYS_KSEM_CLOSE               = 400 // { int ksem_close(semid_t id); }
	SYS_KSEM_POST                = 401 // { int ksem_post(semid_t id); }
	SYS_KSEM_WAIT                = 402 // { int ksem_wait(semid_t id); }
	SYS_KSEM_TRYWAIT             = 403 // { int ksem_trywait(semid_t id); }
	SYS_KSEM_INIT                = 404 // { int ksem_init(semid_t *idp, unsigned int value); }
	SYS_KSEM_OPEN                = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); }
	SYS_KSEM_UNLINK              = 406 // { int ksem_unlink(const char *name); }
	SYS_KSEM_GETVALUE            = 407 // { int ksem_getvalue(semid_t id, int *val); }
	SYS_KSEM_DESTROY             = 408 // { int ksem_destroy(semid_t id); }
	SYS___MAC_GET_PID            = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); }
	SYS___MAC_GET_LINK           = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); }
	SYS___MAC_SET_LINK           = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); }
	SYS_EXTATTR_SET_LINK         = 412 // { ssize_t extattr_set_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_GET_LINK         = 413 // { ssize_t extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_LINK      = 414 // { int extattr_delete_link(const char *path, int attrnamespace, const char *attrname); }
	SYS___MAC_EXECVE             = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); }
	SYS_SIGACTION                = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); }
	SYS_SIGRETURN                = 417 // { int sigreturn(const struct __ucontext *sigcntxp); }
	SYS_GETCONTEXT               = 421 // { int getcontext(struct __ucontext *ucp); }
	SYS_SETCONTEXT               = 422 // { int setcontext(const struct __ucontext *ucp); }
	SYS_SWAPCONTEXT              = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); }
	SYS_SWAPOFF                  = 424 // { int swapoff(const char *name); }
	SYS___ACL_GET_LINK           = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_SET_LINK           = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_DELETE_LINK        = 427 // { int __acl_delete_link(const char *path, acl_type_t type); }
	SYS___ACL_ACLCHECK_LINK      = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); }
	SYS_SIGWAIT                  = 429 // { int sigwait(const sigset_t *set, int *sig); }
	SYS_THR_CREATE               = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); }
	SYS_THR_EXIT                 = 431 // { void thr_exit(long *state); }
	SYS_THR_SELF                 = 432 // { int thr_self(long *id); }
	SYS_THR_KILL                 = 433 // { int thr_kill(long id, int sig); }
	SYS_JAIL_ATTACH              = 436 // { int jail_attach(int jid); }
	SYS_EXTATTR_LIST_FD          = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }
	SYS_EXTATTR_LIST_FILE        = 438 // { ssize_t extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); }
	SYS_EXTATTR_LIST_LINK        = 439 // { ssize_t extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); }
	SYS_KSEM_TIMEDWAIT           = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); }
	SYS_THR_SUSPEND              = 442 // { int thr_suspend(const struct timespec *timeout); }
	SYS_THR_WAKE                 = 443 // { int thr_wake(long id); }
	SYS_KLDUNLOADF               = 444 // { int kldunloadf(int fileid, int flags); }
	SYS_AUDIT                    = 445 // { int audit(const void *record, u_int length); }
	SYS_AUDITON                  = 446 // { int auditon(int cmd, void *data, u_int length); }
	SYS_GETAUID                  = 447 // { int getauid(uid_t *auid); }
	SYS_SETAUID                  = 448 // { int setauid(uid_t *auid); }
	SYS_GETAUDIT                 = 449 // { int getaudit(struct auditinfo *auditinfo); }
	SYS_SETAUDIT                 = 450 // { int setaudit(struct auditinfo *auditinfo); }
	SYS_GETAUDIT_ADDR            = 451 // { int getaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); }
	SYS_SETAUDIT_ADDR            = 452 // { int setaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); }
	SYS_AUDITCTL                 = 453 // { int auditctl(char *path); }
	SYS__UMTX_OP                 = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); }
	SYS_THR_NEW                  = 455 // { int thr_new(struct thr_param *param, int param_size); }
	SYS_SIGQUEUE                 = 456 // { int sigqueue(pid_t pid, int signum, void *value); }
	SYS_KMQ_OPEN                 = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); }
	SYS_KMQ_SETATTR              = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); }
	SYS_KMQ_TIMEDRECEIVE         = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); }
	SYS_KMQ_TIMEDSEND            = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len, unsigned msg_prio, const struct timespec *abs_timeout); }
	SYS_KMQ_NOTIFY               = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); }
	SYS_KMQ_UNLINK               = 462 // { int kmq_unlink(const char *path); }
	SYS_ABORT2                   = 463 // { int abort2(const char *why, int nargs, void **args); }
	SYS_THR_SET_NAME             = 464 // { int thr_set_name(long id, const char *name); }
	SYS_AIO_FSYNC                = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); }
	SYS_RTPRIO_THREAD            = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); }
	SYS_SCTP_PEELOFF             = 471 // { int sctp_peeloff(int sd, uint32_t name); }
	SYS_SCTP_GENERIC_SENDMSG     = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }
	SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }
	SYS_SCTP_GENERIC_RECVMSG     = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr *from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); }
	SYS_PREAD                    = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); }
	SYS_PWRITE                   = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); }
	SYS_MMAP                     = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); }
	SYS_LSEEK                    = 478 // { off_t lseek(int fd, off_t offset, int whence); }
	SYS_TRUNCATE                 = 479 // { int truncate(char *path, off_t length); }
	SYS_FTRUNCATE                = 480 // { int ftruncate(int fd, off_t length); }
	SYS_THR_KILL2                = 481 // { int thr_kill2(pid_t pid, long id, int sig); }
	SYS_SHM_OPEN                 = 482 // { int shm_open(const char *path, int flags, mode_t mode); }
	SYS_SHM_UNLINK               = 483 // { int shm_unlink(const char *path); }
	SYS_CPUSET                   = 484 // { int cpuset(cpusetid_t *setid); }
	SYS_CPUSET_SETID             = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); }
	SYS_CPUSET_GETID             = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); }
	SYS_CPUSET_GETAFFINITY       = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); }
	SYS_CPUSET_SETAFFINITY       = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); }
	SYS_FACCESSAT                = 489 // { int faccessat(int fd, char *path, int amode, int flag); }
	SYS_FCHMODAT                 = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); }
	SYS_FCHOWNAT                 = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); }
	SYS_FEXECVE                  = 492 // { int fexecve(int fd, char **argv, char **envv); }
	SYS_FUTIMESAT                = 494 // { int futimesat(int fd, char *path, struct timeval *times); }
	SYS_LINKAT                   = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); }
	SYS_MKDIRAT                  = 496 // { int mkdirat(int fd, char *path, mode_t mode); }
	SYS_MKFIFOAT                 = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }
	SYS_OPENAT                   = 499 // { int openat(int fd, char *path, int flag, mode_t mode); }
	SYS_READLINKAT               = 500 // { ssize_t readlinkat(int fd, char *path, char *buf, size_t bufsize); }
	SYS_RENAMEAT                 = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); }
	SYS_SYMLINKAT                = 502 // { int symlinkat(char *path1, int fd, char *path2); }
	SYS_UNLINKAT                 = 503 // { int unlinkat(int fd, char *path, int flag); }
	SYS_POSIX_OPENPT             = 504 // { int posix_openpt(int flags); }
	SYS_GSSD_SYSCALL             = 505 // { int gssd_syscall(char *path); }
	SYS_JAIL_GET                 = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); }
	SYS_JAIL_SET                 = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); }
	SYS_JAIL_REMOVE              = 508 // { int jail_remove(int jid); }
	SYS_CLOSEFROM                = 509 // { int closefrom(int lowfd); }
	SYS___SEMCTL                 = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); }
	SYS_MSGCTL                   = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); }
	SYS_SHMCTL                   = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); }
	SYS_LPATHCONF                = 513 // { int lpathconf(char *path, int name); }
	SYS___CAP_RIGHTS_GET         = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); }
	SYS_CAP_ENTER                = 516 // { int cap_enter(void); }
	SYS_CAP_GETMODE              = 517 // { int cap_getmode(u_int *modep); }
	SYS_PDFORK                   = 518 // { int pdfork(int *fdp, int flags); }
	SYS_PDKILL                   = 519 // { int pdkill(int fd, int signum); }
	SYS_PDGETPID                 = 520 // { int pdgetpid(int fd, pid_t *pidp); }
	SYS_PSELECT                  = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); }
	SYS_GETLOGINCLASS            = 523 // { int getloginclass(char *namebuf, size_t namelen); }
	SYS_SETLOGINCLASS            = 524 // { int setloginclass(const char *namebuf); }
	SYS_RCTL_GET_RACCT           = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
	SYS_RCTL_GET_RULES           = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
	SYS_RCTL_GET_LIMITS          = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
	SYS_RCTL_ADD_RULE            = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
	SYS_RCTL_REMOVE_RULE         = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
	SYS_POSIX_FALLOCATE          = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); }
	SYS_POSIX_FADVISE            = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); }
	SYS_WAIT6                    = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); }
	SYS_CAP_RIGHTS_LIMIT         = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); }
	SYS_CAP_IOCTLS_LIMIT         = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); }
	SYS_CAP_IOCTLS_GET           = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); }
	SYS_CAP_FCNTLS_LIMIT         = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); }
	SYS_CAP_FCNTLS_GET           = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); }
	SYS_BINDAT                   = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); }
	SYS_CONNECTAT                = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); }
	SYS_CHFLAGSAT                = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); }
	SYS_ACCEPT4                  = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); }
	SYS_PIPE2                    = 542 // { int pipe2(int *fildes, int flags); }
	SYS_AIO_MLOCK                = 543 // { int aio_mlock(struct aiocb *aiocbp); }
	SYS_PROCCTL                  = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); }
	SYS_PPOLL                    = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); }
	SYS_FUTIMENS                 = 546 // { int futimens(int fd, struct timespec *times); }
	SYS_UTIMENSAT                = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); }
	SYS_FDATASYNC                = 550 // { int fdatasync(int fd); }
	SYS_FSTAT                    = 551 // { int fstat(int fd, struct stat *sb); }
	SYS_FSTATAT                  = 552 // { int fstatat(int fd, char *path, struct stat *buf, int flag); }
	SYS_FHSTAT                   = 553 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); }
	SYS_GETDIRENTRIES            = 554 // { ssize_t getdirentries(int fd, char *buf, size_t count, off_t *basep); }
	SYS_STATFS                   = 555 // { int statfs(char *path, struct statfs *buf); }
	SYS_FSTATFS                  = 556 // { int fstatfs(int fd, struct statfs *buf); }
	SYS_GETFSSTAT                = 557 // { int getfsstat(struct statfs *buf, long bufsize, int mode); }
	SYS_FHSTATFS                 = 558 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); }
	SYS_MKNODAT                  = 559 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); }
	SYS_KEVENT                   = 560 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
	SYS_CPUSET_GETDOMAIN         = 561 // { int cpuset_getdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int *policy); }
	SYS_CPUSET_SETDOMAIN         = 562 // { int cpuset_setdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int policy); }
	SYS_GETRANDOM                = 563 // { int getrandom(void *buf, size_t buflen, unsigned int flags); }
	SYS_GETFHAT                  = 564 // { int getfhat(int fd, char *path, struct fhandle *fhp, int flags); }
	SYS_FHLINK                   = 565 // { int fhlink(struct fhandle *fhp, const char *to); }
	SYS_FHLINKAT                 = 566 // { int fhlinkat(struct fhandle *fhp, int tofd, const char *to,); }
	SYS_FHREADLINK               = 567 // { int fhreadlink(struct fhandle *fhp, char *buf, size_t bufsize); }
	SYS___SYSCTLBYNAME           = 570 // { int __sysctlbyname(const char *name, size_t namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }
	SYS_CLOSE_RANGE              = 575 // { int close_range(u_int lowfd, u_int highfd, int flags); }
)
  07070100000E8A000081A4000000000000000000000001645E367C0000907A000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go // go run mksysnum.go https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build amd64 && freebsd
// +build amd64,freebsd

package unix

const (
	// SYS_NOSYS = 0;  // { int nosys(void); } syscall nosys_args int
	SYS_EXIT                     = 1   // { void sys_exit(int rval); } exit sys_exit_args void
	SYS_FORK                     = 2   // { int fork(void); }
	SYS_READ                     = 3   // { ssize_t read(int fd, void *buf, size_t nbyte); }
	SYS_WRITE                    = 4   // { ssize_t write(int fd, const void *buf, size_t nbyte); }
	SYS_OPEN                     = 5   // { int open(char *path, int flags, int mode); }
	SYS_CLOSE                    = 6   // { int close(int fd); }
	SYS_WAIT4                    = 7   // { int wait4(int pid, int *status, int options, struct rusage *rusage); }
	SYS_LINK                     = 9   // { int link(char *path, char *link); }
	SYS_UNLINK                   = 10  // { int unlink(char *path); }
	SYS_CHDIR                    = 12  // { int chdir(char *path); }
	SYS_FCHDIR                   = 13  // { int fchdir(int fd); }
	SYS_CHMOD                    = 15  // { int chmod(char *path, int mode); }
	SYS_CHOWN                    = 16  // { int chown(char *path, int uid, int gid); }
	SYS_BREAK                    = 17  // { caddr_t break(char *nsize); }
	SYS_GETPID                   = 20  // { pid_t getpid(void); }
	SYS_MOUNT                    = 21  // { int mount(char *type, char *path, int flags, caddr_t data); }
	SYS_UNMOUNT                  = 22  // { int unmount(char *path, int flags); }
	SYS_SETUID                   = 23  // { int setuid(uid_t uid); }
	SYS_GETUID                   = 24  // { uid_t getuid(void); }
	SYS_GETEUID                  = 25  // { uid_t geteuid(void); }
	SYS_PTRACE                   = 26  // { int ptrace(int req, pid_t pid, caddr_t addr, int data); }
	SYS_RECVMSG                  = 27  // { int recvmsg(int s, struct msghdr *msg, int flags); }
	SYS_SENDMSG                  = 28  // { int sendmsg(int s, struct msghdr *msg, int flags); }
	SYS_RECVFROM                 = 29  // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); }
	SYS_ACCEPT                   = 30  // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); }
	SYS_GETPEERNAME              = 31  // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }
	SYS_GETSOCKNAME              = 32  // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }
	SYS_ACCESS                   = 33  // { int access(char *path, int amode); }
	SYS_CHFLAGS                  = 34  // { int chflags(const char *path, u_long flags); }
	SYS_FCHFLAGS                 = 35  // { int fchflags(int fd, u_long flags); }
	SYS_SYNC                     = 36  // { int sync(void); }
	SYS_KILL                     = 37  // { int kill(int pid, int signum); }
	SYS_GETPPID                  = 39  // { pid_t getppid(void); }
	SYS_DUP                      = 41  // { int dup(u_int fd); }
	SYS_GETEGID                  = 43  // { gid_t getegid(void); }
	SYS_PROFIL                   = 44  // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); }
	SYS_KTRACE                   = 45  // { int ktrace(const char *fname, int ops, int facs, int pid); }
	SYS_GETGID                   = 47  // { gid_t getgid(void); }
	SYS_GETLOGIN                 = 49  // { int getlogin(char *namebuf, u_int namelen); }
	SYS_SETLOGIN                 = 50  // { int setlogin(char *namebuf); }
	SYS_ACCT                     = 51  // { int acct(char *path); }
	SYS_SIGALTSTACK              = 53  // { int sigaltstack(stack_t *ss, stack_t *oss); }
	SYS_IOCTL                    = 54  // { int ioctl(int fd, u_long com, caddr_t data); }
	SYS_REBOOT                   = 55  // { int reboot(int opt); }
	SYS_REVOKE                   = 56  // { int revoke(char *path); }
	SYS_SYMLINK                  = 57  // { int symlink(char *path, char *link); }
	SYS_READLINK                 = 58  // { ssize_t readlink(char *path, char *buf, size_t count); }
	SYS_EXECVE                   = 59  // { int execve(char *fname, char **argv, char **envv); }
	SYS_UMASK                    = 60  // { int umask(int newmask); }
	SYS_CHROOT                   = 61  // { int chroot(char *path); }
	SYS_MSYNC                    = 65  // { int msync(void *addr, size_t len, int flags); }
	SYS_VFORK                    = 66  // { int vfork(void); }
	SYS_SBRK                     = 69  // { int sbrk(int incr); }
	SYS_SSTK                     = 70  // { int sstk(int incr); }
	SYS_MUNMAP                   = 73  // { int munmap(void *addr, size_t len); }
	SYS_MPROTECT                 = 74  // { int mprotect(void *addr, size_t len, int prot); }
	SYS_MADVISE                  = 75  // { int madvise(void *addr, size_t len, int behav); }
	SYS_MINCORE                  = 78  // { int mincore(const void *addr, size_t len, char *vec); }
	SYS_GETGROUPS                = 79  // { int getgroups(u_int gidsetsize, gid_t *gidset); }
	SYS_SETGROUPS                = 80  // { int setgroups(u_int gidsetsize, gid_t *gidset); }
	SYS_GETPGRP                  = 81  // { int getpgrp(void); }
	SYS_SETPGID                  = 82  // { int setpgid(int pid, int pgid); }
	SYS_SETITIMER                = 83  // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); }
	SYS_SWAPON                   = 85  // { int swapon(char *name); }
	SYS_GETITIMER                = 86  // { int getitimer(u_int which, struct itimerval *itv); }
	SYS_GETDTABLESIZE            = 89  // { int getdtablesize(void); }
	SYS_DUP2                     = 90  // { int dup2(u_int from, u_int to); }
	SYS_FCNTL                    = 92  // { int fcntl(int fd, int cmd, long arg); }
	SYS_SELECT                   = 93  // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
	SYS_FSYNC                    = 95  // { int fsync(int fd); }
	SYS_SETPRIORITY              = 96  // { int setpriority(int which, int who, int prio); }
	SYS_SOCKET                   = 97  // { int socket(int domain, int type, int protocol); }
	SYS_CONNECT                  = 98  // { int connect(int s, caddr_t name, int namelen); }
	SYS_GETPRIORITY              = 100 // { int getpriority(int which, int who); }
	SYS_BIND                     = 104 // { int bind(int s, caddr_t name, int namelen); }
	SYS_SETSOCKOPT               = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); }
	SYS_LISTEN                   = 106 // { int listen(int s, int backlog); }
	SYS_GETTIMEOFDAY             = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); }
	SYS_GETRUSAGE                = 117 // { int getrusage(int who, struct rusage *rusage); }
	SYS_GETSOCKOPT               = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); }
	SYS_READV                    = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); }
	SYS_WRITEV                   = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); }
	SYS_SETTIMEOFDAY             = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); }
	SYS_FCHOWN                   = 123 // { int fchown(int fd, int uid, int gid); }
	SYS_FCHMOD                   = 124 // { int fchmod(int fd, int mode); }
	SYS_SETREUID                 = 126 // { int setreuid(int ruid, int euid); }
	SYS_SETREGID                 = 127 // { int setregid(int rgid, int egid); }
	SYS_RENAME                   = 128 // { int rename(char *from, char *to); }
	SYS_FLOCK                    = 131 // { int flock(int fd, int how); }
	SYS_MKFIFO                   = 132 // { int mkfifo(char *path, int mode); }
	SYS_SENDTO                   = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); }
	SYS_SHUTDOWN                 = 134 // { int shutdown(int s, int how); }
	SYS_SOCKETPAIR               = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); }
	SYS_MKDIR                    = 136 // { int mkdir(char *path, int mode); }
	SYS_RMDIR                    = 137 // { int rmdir(char *path); }
	SYS_UTIMES                   = 138 // { int utimes(char *path, struct timeval *tptr); }
	SYS_ADJTIME                  = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); }
	SYS_SETSID                   = 147 // { int setsid(void); }
	SYS_QUOTACTL                 = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); }
	SYS_NLM_SYSCALL              = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); }
	SYS_NFSSVC                   = 155 // { int nfssvc(int flag, caddr_t argp); }
	SYS_LGETFH                   = 160 // { int lgetfh(char *fname, struct fhandle *fhp); }
	SYS_GETFH                    = 161 // { int getfh(char *fname, struct fhandle *fhp); }
	SYS_SYSARCH                  = 165 // { int sysarch(int op, char *parms); }
	SYS_RTPRIO                   = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); }
	SYS_SEMSYS                   = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); }
	SYS_MSGSYS                   = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); }
	SYS_SHMSYS                   = 171 // { int shmsys(int which, int a2, int a3, int a4); }
	SYS_SETFIB                   = 175 // { int setfib(int fibnum); }
	SYS_NTP_ADJTIME              = 176 // { int ntp_adjtime(struct timex *tp); }
	SYS_SETGID                   = 181 // { int setgid(gid_t gid); }
	SYS_SETEGID                  = 182 // { int setegid(gid_t egid); }
	SYS_SETEUID                  = 183 // { int seteuid(uid_t euid); }
	SYS_PATHCONF                 = 191 // { int pathconf(char *path, int name); }
	SYS_FPATHCONF                = 192 // { int fpathconf(int fd, int name); }
	SYS_GETRLIMIT                = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int
	SYS_SETRLIMIT                = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int
	SYS___SYSCTL                 = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int
	SYS_MLOCK                    = 203 // { int mlock(const void *addr, size_t len); }
	SYS_MUNLOCK                  = 204 // { int munlock(const void *addr, size_t len); }
	SYS_UNDELETE                 = 205 // { int undelete(char *path); }
	SYS_FUTIMES                  = 206 // { int futimes(int fd, struct timeval *tptr); }
	SYS_GETPGID                  = 207 // { int getpgid(pid_t pid); }
	SYS_POLL                     = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); }
	SYS_SEMGET                   = 221 // { int semget(key_t key, int nsems, int semflg); }
	SYS_SEMOP                    = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); }
	SYS_MSGGET                   = 225 // { int msgget(key_t key, int msgflg); }
	SYS_MSGSND                   = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
	SYS_MSGRCV                   = 227 // { ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
	SYS_SHMAT                    = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); }
	SYS_SHMDT                    = 230 // { int shmdt(const void *shmaddr); }
	SYS_SHMGET                   = 231 // { int shmget(key_t key, size_t size, int shmflg); }
	SYS_CLOCK_GETTIME            = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); }
	SYS_CLOCK_SETTIME            = 233 // { int clock_settime(clockid_t clock_id, const struct timespec *tp); }
	SYS_CLOCK_GETRES             = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); }
	SYS_KTIMER_CREATE            = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); }
	SYS_KTIMER_DELETE            = 236 // { int ktimer_delete(int timerid); }
	SYS_KTIMER_SETTIME           = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }
	SYS_KTIMER_GETTIME           = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); }
	SYS_KTIMER_GETOVERRUN        = 239 // { int ktimer_getoverrun(int timerid); }
	SYS_NANOSLEEP                = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
	SYS_FFCLOCK_GETCOUNTER       = 241 // { int ffclock_getcounter(ffcounter *ffcount); }
	SYS_FFCLOCK_SETESTIMATE      = 242 // { int ffclock_setestimate(struct ffclock_estimate *cest); }
	SYS_FFCLOCK_GETESTIMATE      = 243 // { int ffclock_getestimate(struct ffclock_estimate *cest); }
	SYS_CLOCK_NANOSLEEP          = 244 // { int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); }
	SYS_CLOCK_GETCPUCLOCKID2     = 247 // { int clock_getcpuclockid2(id_t id, int which, clockid_t *clock_id); }
	SYS_NTP_GETTIME              = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }
	SYS_MINHERIT                 = 250 // { int minherit(void *addr, size_t len, int inherit); }
	SYS_RFORK                    = 251 // { int rfork(int flags); }
	SYS_ISSETUGID                = 253 // { int issetugid(void); }
	SYS_LCHOWN                   = 254 // { int lchown(char *path, int uid, int gid); }
	SYS_AIO_READ                 = 255 // { int aio_read(struct aiocb *aiocbp); }
	SYS_AIO_WRITE                = 256 // { int aio_write(struct aiocb *aiocbp); }
	SYS_LIO_LISTIO               = 257 // { int lio_listio(int mode, struct aiocb* const *acb_list, int nent, struct sigevent *sig); }
	SYS_LCHMOD                   = 274 // { int lchmod(char *path, mode_t mode); }
	SYS_LUTIMES                  = 276 // { int lutimes(char *path, struct timeval *tptr); }
	SYS_PREADV                   = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }
	SYS_PWRITEV                  = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }
	SYS_FHOPEN                   = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); }
	SYS_MODNEXT                  = 300 // { int modnext(int modid); }
	SYS_MODSTAT                  = 301 // { int modstat(int modid, struct module_stat* stat); }
	SYS_MODFNEXT                 = 302 // { int modfnext(int modid); }
	SYS_MODFIND                  = 303 // { int modfind(const char *name); }
	SYS_KLDLOAD                  = 304 // { int kldload(const char *file); }
	SYS_KLDUNLOAD                = 305 // { int kldunload(int fileid); }
	SYS_KLDFIND                  = 306 // { int kldfind(const char *file); }
	SYS_KLDNEXT                  = 307 // { int kldnext(int fileid); }
	SYS_KLDSTAT                  = 308 // { int kldstat(int fileid, struct kld_file_stat *stat); }
	SYS_KLDFIRSTMOD              = 309 // { int kldfirstmod(int fileid); }
	SYS_GETSID                   = 310 // { int getsid(pid_t pid); }
	SYS_SETRESUID                = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); }
	SYS_SETRESGID                = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
	SYS_AIO_RETURN               = 314 // { ssize_t aio_return(struct aiocb *aiocbp); }
	SYS_AIO_SUSPEND              = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); }
	SYS_AIO_CANCEL               = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); }
	SYS_AIO_ERROR                = 317 // { int aio_error(struct aiocb *aiocbp); }
	SYS_YIELD                    = 321 // { int yield(void); }
	SYS_MLOCKALL                 = 324 // { int mlockall(int how); }
	SYS_MUNLOCKALL               = 325 // { int munlockall(void); }
	SYS___GETCWD                 = 326 // { int __getcwd(char *buf, size_t buflen); }
	SYS_SCHED_SETPARAM           = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); }
	SYS_SCHED_GETPARAM           = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); }
	SYS_SCHED_SETSCHEDULER       = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); }
	SYS_SCHED_GETSCHEDULER       = 330 // { int sched_getscheduler (pid_t pid); }
	SYS_SCHED_YIELD              = 331 // { int sched_yield (void); }
	SYS_SCHED_GET_PRIORITY_MAX   = 332 // { int sched_get_priority_max (int policy); }
	SYS_SCHED_GET_PRIORITY_MIN   = 333 // { int sched_get_priority_min (int policy); }
	SYS_SCHED_RR_GET_INTERVAL    = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); }
	SYS_UTRACE                   = 335 // { int utrace(const void *addr, size_t len); }
	SYS_KLDSYM                   = 337 // { int kldsym(int fileid, int cmd, void *data); }
	SYS_JAIL                     = 338 // { int jail(struct jail *jail); }
	SYS_SIGPROCMASK              = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); }
	SYS_SIGSUSPEND               = 341 // { int sigsuspend(const sigset_t *sigmask); }
	SYS_SIGPENDING               = 343 // { int sigpending(sigset_t *set); }
	SYS_SIGTIMEDWAIT             = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); }
	SYS_SIGWAITINFO              = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); }
	SYS___ACL_GET_FILE           = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_SET_FILE           = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_GET_FD             = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); }
	SYS___ACL_SET_FD             = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); }
	SYS___ACL_DELETE_FILE        = 351 // { int __acl_delete_file(const char *path, acl_type_t type); }
	SYS___ACL_DELETE_FD          = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); }
	SYS___ACL_ACLCHECK_FILE      = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_ACLCHECK_FD        = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); }
	SYS_EXTATTRCTL               = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }
	SYS_EXTATTR_SET_FILE         = 356 // { ssize_t extattr_set_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_GET_FILE         = 357 // { ssize_t extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_FILE      = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }
	SYS_AIO_WAITCOMPLETE         = 359 // { ssize_t aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); }
	SYS_GETRESUID                = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
	SYS_GETRESGID                = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
	SYS_KQUEUE                   = 362 // { int kqueue(void); }
	SYS_EXTATTR_SET_FD           = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_GET_FD           = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_FD        = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }
	SYS___SETUGID                = 374 // { int __setugid(int flag); }
	SYS_EACCESS                  = 376 // { int eaccess(char *path, int amode); }
	SYS_NMOUNT                   = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); }
	SYS___MAC_GET_PROC           = 384 // { int __mac_get_proc(struct mac *mac_p); }
	SYS___MAC_SET_PROC           = 385 // { int __mac_set_proc(struct mac *mac_p); }
	SYS___MAC_GET_FD             = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); }
	SYS___MAC_GET_FILE           = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); }
	SYS___MAC_SET_FD             = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); }
	SYS___MAC_SET_FILE           = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); }
	SYS_KENV                     = 390 // { int kenv(int what, const char *name, char *value, int len); }
	SYS_LCHFLAGS                 = 391 // { int lchflags(const char *path, u_long flags); }
	SYS_UUIDGEN                  = 392 // { int uuidgen(struct uuid *store, int count); }
	SYS_SENDFILE                 = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); }
	SYS_MAC_SYSCALL              = 394 // { int mac_syscall(const char *policy, int call, void *arg); }
	SYS_KSEM_CLOSE               = 400 // { int ksem_close(semid_t id); }
	SYS_KSEM_POST                = 401 // { int ksem_post(semid_t id); }
	SYS_KSEM_WAIT                = 402 // { int ksem_wait(semid_t id); }
	SYS_KSEM_TRYWAIT             = 403 // { int ksem_trywait(semid_t id); }
	SYS_KSEM_INIT                = 404 // { int ksem_init(semid_t *idp, unsigned int value); }
	SYS_KSEM_OPEN                = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); }
	SYS_KSEM_UNLINK              = 406 // { int ksem_unlink(const char *name); }
	SYS_KSEM_GETVALUE            = 407 // { int ksem_getvalue(semid_t id, int *val); }
	SYS_KSEM_DESTROY             = 408 // { int ksem_destroy(semid_t id); }
	SYS___MAC_GET_PID            = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); }
	SYS___MAC_GET_LINK           = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); }
	SYS___MAC_SET_LINK           = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); }
	SYS_EXTATTR_SET_LINK         = 412 // { ssize_t extattr_set_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_GET_LINK         = 413 // { ssize_t extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_LINK      = 414 // { int extattr_delete_link(const char *path, int attrnamespace, const char *attrname); }
	SYS___MAC_EXECVE             = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); }
	SYS_SIGACTION                = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); }
	SYS_SIGRETURN                = 417 // { int sigreturn(const struct __ucontext *sigcntxp); }
	SYS_GETCONTEXT               = 421 // { int getcontext(struct __ucontext *ucp); }
	SYS_SETCONTEXT               = 422 // { int setcontext(const struct __ucontext *ucp); }
	SYS_SWAPCONTEXT              = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); }
	SYS_SWAPOFF                  = 424 // { int swapoff(const char *name); }
	SYS___ACL_GET_LINK           = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_SET_LINK           = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_DELETE_LINK        = 427 // { int __acl_delete_link(const char *path, acl_type_t type); }
	SYS___ACL_ACLCHECK_LINK      = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); }
	SYS_SIGWAIT                  = 429 // { int sigwait(const sigset_t *set, int *sig); }
	SYS_THR_CREATE               = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); }
	SYS_THR_EXIT                 = 431 // { void thr_exit(long *state); }
	SYS_THR_SELF                 = 432 // { int thr_self(long *id); }
	SYS_THR_KILL                 = 433 // { int thr_kill(long id, int sig); }
	SYS_JAIL_ATTACH              = 436 // { int jail_attach(int jid); }
	SYS_EXTATTR_LIST_FD          = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }
	SYS_EXTATTR_LIST_FILE        = 438 // { ssize_t extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); }
	SYS_EXTATTR_LIST_LINK        = 439 // { ssize_t extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); }
	SYS_KSEM_TIMEDWAIT           = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); }
	SYS_THR_SUSPEND              = 442 // { int thr_suspend(const struct timespec *timeout); }
	SYS_THR_WAKE                 = 443 // { int thr_wake(long id); }
	SYS_KLDUNLOADF               = 444 // { int kldunloadf(int fileid, int flags); }
	SYS_AUDIT                    = 445 // { int audit(const void *record, u_int length); }
	SYS_AUDITON                  = 446 // { int auditon(int cmd, void *data, u_int length); }
	SYS_GETAUID                  = 447 // { int getauid(uid_t *auid); }
	SYS_SETAUID                  = 448 // { int setauid(uid_t *auid); }
	SYS_GETAUDIT                 = 449 // { int getaudit(struct auditinfo *auditinfo); }
	SYS_SETAUDIT                 = 450 // { int setaudit(struct auditinfo *auditinfo); }
	SYS_GETAUDIT_ADDR            = 451 // { int getaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); }
	SYS_SETAUDIT_ADDR            = 452 // { int setaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); }
	SYS_AUDITCTL                 = 453 // { int auditctl(char *path); }
	SYS__UMTX_OP                 = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); }
	SYS_THR_NEW                  = 455 // { int thr_new(struct thr_param *param, int param_size); }
	SYS_SIGQUEUE                 = 456 // { int sigqueue(pid_t pid, int signum, void *value); }
	SYS_KMQ_OPEN                 = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); }
	SYS_KMQ_SETATTR              = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); }
	SYS_KMQ_TIMEDRECEIVE         = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); }
	SYS_KMQ_TIMEDSEND            = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len, unsigned msg_prio, const struct timespec *abs_timeout); }
	SYS_KMQ_NOTIFY               = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); }
	SYS_KMQ_UNLINK               = 462 // { int kmq_unlink(const char *path); }
	SYS_ABORT2                   = 463 // { int abort2(const char *why, int nargs, void **args); }
	SYS_THR_SET_NAME             = 464 // { int thr_set_name(long id, const char *name); }
	SYS_AIO_FSYNC                = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); }
	SYS_RTPRIO_THREAD            = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); }
	SYS_SCTP_PEELOFF             = 471 // { int sctp_peeloff(int sd, uint32_t name); }
	SYS_SCTP_GENERIC_SENDMSG     = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }
	SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }
	SYS_SCTP_GENERIC_RECVMSG     = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr *from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); }
	SYS_PREAD                    = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); }
	SYS_PWRITE                   = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); }
	SYS_MMAP                     = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); }
	SYS_LSEEK                    = 478 // { off_t lseek(int fd, off_t offset, int whence); }
	SYS_TRUNCATE                 = 479 // { int truncate(char *path, off_t length); }
	SYS_FTRUNCATE                = 480 // { int ftruncate(int fd, off_t length); }
	SYS_THR_KILL2                = 481 // { int thr_kill2(pid_t pid, long id, int sig); }
	SYS_SHM_OPEN                 = 482 // { int shm_open(const char *path, int flags, mode_t mode); }
	SYS_SHM_UNLINK               = 483 // { int shm_unlink(const char *path); }
	SYS_CPUSET                   = 484 // { int cpuset(cpusetid_t *setid); }
	SYS_CPUSET_SETID             = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); }
	SYS_CPUSET_GETID             = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); }
	SYS_CPUSET_GETAFFINITY       = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); }
	SYS_CPUSET_SETAFFINITY       = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); }
	SYS_FACCESSAT                = 489 // { int faccessat(int fd, char *path, int amode, int flag); }
	SYS_FCHMODAT                 = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); }
	SYS_FCHOWNAT                 = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); }
	SYS_FEXECVE                  = 492 // { int fexecve(int fd, char **argv, char **envv); }
	SYS_FUTIMESAT                = 494 // { int futimesat(int fd, char *path, struct timeval *times); }
	SYS_LINKAT                   = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); }
	SYS_MKDIRAT                  = 496 // { int mkdirat(int fd, char *path, mode_t mode); }
	SYS_MKFIFOAT                 = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }
	SYS_OPENAT                   = 499 // { int openat(int fd, char *path, int flag, mode_t mode); }
	SYS_READLINKAT               = 500 // { ssize_t readlinkat(int fd, char *path, char *buf, size_t bufsize); }
	SYS_RENAMEAT                 = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); }
	SYS_SYMLINKAT                = 502 // { int symlinkat(char *path1, int fd, char *path2); }
	SYS_UNLINKAT                 = 503 // { int unlinkat(int fd, char *path, int flag); }
	SYS_POSIX_OPENPT             = 504 // { int posix_openpt(int flags); }
	SYS_GSSD_SYSCALL             = 505 // { int gssd_syscall(char *path); }
	SYS_JAIL_GET                 = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); }
	SYS_JAIL_SET                 = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); }
	SYS_JAIL_REMOVE              = 508 // { int jail_remove(int jid); }
	SYS_CLOSEFROM                = 509 // { int closefrom(int lowfd); }
	SYS___SEMCTL                 = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); }
	SYS_MSGCTL                   = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); }
	SYS_SHMCTL                   = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); }
	SYS_LPATHCONF                = 513 // { int lpathconf(char *path, int name); }
	SYS___CAP_RIGHTS_GET         = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); }
	SYS_CAP_ENTER                = 516 // { int cap_enter(void); }
	SYS_CAP_GETMODE              = 517 // { int cap_getmode(u_int *modep); }
	SYS_PDFORK                   = 518 // { int pdfork(int *fdp, int flags); }
	SYS_PDKILL                   = 519 // { int pdkill(int fd, int signum); }
	SYS_PDGETPID                 = 520 // { int pdgetpid(int fd, pid_t *pidp); }
	SYS_PSELECT                  = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); }
	SYS_GETLOGINCLASS            = 523 // { int getloginclass(char *namebuf, size_t namelen); }
	SYS_SETLOGINCLASS            = 524 // { int setloginclass(const char *namebuf); }
	SYS_RCTL_GET_RACCT           = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
	SYS_RCTL_GET_RULES           = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
	SYS_RCTL_GET_LIMITS          = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
	SYS_RCTL_ADD_RULE            = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
	SYS_RCTL_REMOVE_RULE         = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
	SYS_POSIX_FALLOCATE          = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); }
	SYS_POSIX_FADVISE            = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); }
	SYS_WAIT6                    = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); }
	SYS_CAP_RIGHTS_LIMIT         = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); }
	SYS_CAP_IOCTLS_LIMIT         = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); }
	SYS_CAP_IOCTLS_GET           = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); }
	SYS_CAP_FCNTLS_LIMIT         = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); }
	SYS_CAP_FCNTLS_GET           = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); }
	SYS_BINDAT                   = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); }
	SYS_CONNECTAT                = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); }
	SYS_CHFLAGSAT                = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); }
	SYS_ACCEPT4                  = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); }
	SYS_PIPE2                    = 542 // { int pipe2(int *fildes, int flags); }
	SYS_AIO_MLOCK                = 543 // { int aio_mlock(struct aiocb *aiocbp); }
	SYS_PROCCTL                  = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); }
	SYS_PPOLL                    = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); }
	SYS_FUTIMENS                 = 546 // { int futimens(int fd, struct timespec *times); }
	SYS_UTIMENSAT                = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); }
	SYS_FDATASYNC                = 550 // { int fdatasync(int fd); }
	SYS_FSTAT                    = 551 // { int fstat(int fd, struct stat *sb); }
	SYS_FSTATAT                  = 552 // { int fstatat(int fd, char *path, struct stat *buf, int flag); }
	SYS_FHSTAT                   = 553 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); }
	SYS_GETDIRENTRIES            = 554 // { ssize_t getdirentries(int fd, char *buf, size_t count, off_t *basep); }
	SYS_STATFS                   = 555 // { int statfs(char *path, struct statfs *buf); }
	SYS_FSTATFS                  = 556 // { int fstatfs(int fd, struct statfs *buf); }
	SYS_GETFSSTAT                = 557 // { int getfsstat(struct statfs *buf, long bufsize, int mode); }
	SYS_FHSTATFS                 = 558 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); }
	SYS_MKNODAT                  = 559 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); }
	SYS_KEVENT                   = 560 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
	SYS_CPUSET_GETDOMAIN         = 561 // { int cpuset_getdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int *policy); }
	SYS_CPUSET_SETDOMAIN         = 562 // { int cpuset_setdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int policy); }
	SYS_GETRANDOM                = 563 // { int getrandom(void *buf, size_t buflen, unsigned int flags); }
	SYS_GETFHAT                  = 564 // { int getfhat(int fd, char *path, struct fhandle *fhp, int flags); }
	SYS_FHLINK                   = 565 // { int fhlink(struct fhandle *fhp, const char *to); }
	SYS_FHLINKAT                 = 566 // { int fhlinkat(struct fhandle *fhp, int tofd, const char *to,); }
	SYS_FHREADLINK               = 567 // { int fhreadlink(struct fhandle *fhp, char *buf, size_t bufsize); }
	SYS___SYSCTLBYNAME           = 570 // { int __sysctlbyname(const char *name, size_t namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }
	SYS_CLOSE_RANGE              = 575 // { int close_range(u_int lowfd, u_int highfd, int flags); }
)
  07070100000E8B000081A4000000000000000000000001645E367C00009076000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go   // go run mksysnum.go https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build arm && freebsd
// +build arm,freebsd

package unix

const (
	// SYS_NOSYS = 0;  // { int nosys(void); } syscall nosys_args int
	SYS_EXIT                     = 1   // { void sys_exit(int rval); } exit sys_exit_args void
	SYS_FORK                     = 2   // { int fork(void); }
	SYS_READ                     = 3   // { ssize_t read(int fd, void *buf, size_t nbyte); }
	SYS_WRITE                    = 4   // { ssize_t write(int fd, const void *buf, size_t nbyte); }
	SYS_OPEN                     = 5   // { int open(char *path, int flags, int mode); }
	SYS_CLOSE                    = 6   // { int close(int fd); }
	SYS_WAIT4                    = 7   // { int wait4(int pid, int *status, int options, struct rusage *rusage); }
	SYS_LINK                     = 9   // { int link(char *path, char *link); }
	SYS_UNLINK                   = 10  // { int unlink(char *path); }
	SYS_CHDIR                    = 12  // { int chdir(char *path); }
	SYS_FCHDIR                   = 13  // { int fchdir(int fd); }
	SYS_CHMOD                    = 15  // { int chmod(char *path, int mode); }
	SYS_CHOWN                    = 16  // { int chown(char *path, int uid, int gid); }
	SYS_BREAK                    = 17  // { caddr_t break(char *nsize); }
	SYS_GETPID                   = 20  // { pid_t getpid(void); }
	SYS_MOUNT                    = 21  // { int mount(char *type, char *path, int flags, caddr_t data); }
	SYS_UNMOUNT                  = 22  // { int unmount(char *path, int flags); }
	SYS_SETUID                   = 23  // { int setuid(uid_t uid); }
	SYS_GETUID                   = 24  // { uid_t getuid(void); }
	SYS_GETEUID                  = 25  // { uid_t geteuid(void); }
	SYS_PTRACE                   = 26  // { int ptrace(int req, pid_t pid, caddr_t addr, int data); }
	SYS_RECVMSG                  = 27  // { int recvmsg(int s, struct msghdr *msg, int flags); }
	SYS_SENDMSG                  = 28  // { int sendmsg(int s, struct msghdr *msg, int flags); }
	SYS_RECVFROM                 = 29  // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); }
	SYS_ACCEPT                   = 30  // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); }
	SYS_GETPEERNAME              = 31  // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }
	SYS_GETSOCKNAME              = 32  // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }
	SYS_ACCESS                   = 33  // { int access(char *path, int amode); }
	SYS_CHFLAGS                  = 34  // { int chflags(const char *path, u_long flags); }
	SYS_FCHFLAGS                 = 35  // { int fchflags(int fd, u_long flags); }
	SYS_SYNC                     = 36  // { int sync(void); }
	SYS_KILL                     = 37  // { int kill(int pid, int signum); }
	SYS_GETPPID                  = 39  // { pid_t getppid(void); }
	SYS_DUP                      = 41  // { int dup(u_int fd); }
	SYS_GETEGID                  = 43  // { gid_t getegid(void); }
	SYS_PROFIL                   = 44  // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); }
	SYS_KTRACE                   = 45  // { int ktrace(const char *fname, int ops, int facs, int pid); }
	SYS_GETGID                   = 47  // { gid_t getgid(void); }
	SYS_GETLOGIN                 = 49  // { int getlogin(char *namebuf, u_int namelen); }
	SYS_SETLOGIN                 = 50  // { int setlogin(char *namebuf); }
	SYS_ACCT                     = 51  // { int acct(char *path); }
	SYS_SIGALTSTACK              = 53  // { int sigaltstack(stack_t *ss, stack_t *oss); }
	SYS_IOCTL                    = 54  // { int ioctl(int fd, u_long com, caddr_t data); }
	SYS_REBOOT                   = 55  // { int reboot(int opt); }
	SYS_REVOKE                   = 56  // { int revoke(char *path); }
	SYS_SYMLINK                  = 57  // { int symlink(char *path, char *link); }
	SYS_READLINK                 = 58  // { ssize_t readlink(char *path, char *buf, size_t count); }
	SYS_EXECVE                   = 59  // { int execve(char *fname, char **argv, char **envv); }
	SYS_UMASK                    = 60  // { int umask(int newmask); }
	SYS_CHROOT                   = 61  // { int chroot(char *path); }
	SYS_MSYNC                    = 65  // { int msync(void *addr, size_t len, int flags); }
	SYS_VFORK                    = 66  // { int vfork(void); }
	SYS_SBRK                     = 69  // { int sbrk(int incr); }
	SYS_SSTK                     = 70  // { int sstk(int incr); }
	SYS_MUNMAP                   = 73  // { int munmap(void *addr, size_t len); }
	SYS_MPROTECT                 = 74  // { int mprotect(void *addr, size_t len, int prot); }
	SYS_MADVISE                  = 75  // { int madvise(void *addr, size_t len, int behav); }
	SYS_MINCORE                  = 78  // { int mincore(const void *addr, size_t len, char *vec); }
	SYS_GETGROUPS                = 79  // { int getgroups(u_int gidsetsize, gid_t *gidset); }
	SYS_SETGROUPS                = 80  // { int setgroups(u_int gidsetsize, gid_t *gidset); }
	SYS_GETPGRP                  = 81  // { int getpgrp(void); }
	SYS_SETPGID                  = 82  // { int setpgid(int pid, int pgid); }
	SYS_SETITIMER                = 83  // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); }
	SYS_SWAPON                   = 85  // { int swapon(char *name); }
	SYS_GETITIMER                = 86  // { int getitimer(u_int which, struct itimerval *itv); }
	SYS_GETDTABLESIZE            = 89  // { int getdtablesize(void); }
	SYS_DUP2                     = 90  // { int dup2(u_int from, u_int to); }
	SYS_FCNTL                    = 92  // { int fcntl(int fd, int cmd, long arg); }
	SYS_SELECT                   = 93  // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
	SYS_FSYNC                    = 95  // { int fsync(int fd); }
	SYS_SETPRIORITY              = 96  // { int setpriority(int which, int who, int prio); }
	SYS_SOCKET                   = 97  // { int socket(int domain, int type, int protocol); }
	SYS_CONNECT                  = 98  // { int connect(int s, caddr_t name, int namelen); }
	SYS_GETPRIORITY              = 100 // { int getpriority(int which, int who); }
	SYS_BIND                     = 104 // { int bind(int s, caddr_t name, int namelen); }
	SYS_SETSOCKOPT               = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); }
	SYS_LISTEN                   = 106 // { int listen(int s, int backlog); }
	SYS_GETTIMEOFDAY             = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); }
	SYS_GETRUSAGE                = 117 // { int getrusage(int who, struct rusage *rusage); }
	SYS_GETSOCKOPT               = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); }
	SYS_READV                    = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); }
	SYS_WRITEV                   = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); }
	SYS_SETTIMEOFDAY             = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); }
	SYS_FCHOWN                   = 123 // { int fchown(int fd, int uid, int gid); }
	SYS_FCHMOD                   = 124 // { int fchmod(int fd, int mode); }
	SYS_SETREUID                 = 126 // { int setreuid(int ruid, int euid); }
	SYS_SETREGID                 = 127 // { int setregid(int rgid, int egid); }
	SYS_RENAME                   = 128 // { int rename(char *from, char *to); }
	SYS_FLOCK                    = 131 // { int flock(int fd, int how); }
	SYS_MKFIFO                   = 132 // { int mkfifo(char *path, int mode); }
	SYS_SENDTO                   = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); }
	SYS_SHUTDOWN                 = 134 // { int shutdown(int s, int how); }
	SYS_SOCKETPAIR               = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); }
	SYS_MKDIR                    = 136 // { int mkdir(char *path, int mode); }
	SYS_RMDIR                    = 137 // { int rmdir(char *path); }
	SYS_UTIMES                   = 138 // { int utimes(char *path, struct timeval *tptr); }
	SYS_ADJTIME                  = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); }
	SYS_SETSID                   = 147 // { int setsid(void); }
	SYS_QUOTACTL                 = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); }
	SYS_NLM_SYSCALL              = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); }
	SYS_NFSSVC                   = 155 // { int nfssvc(int flag, caddr_t argp); }
	SYS_LGETFH                   = 160 // { int lgetfh(char *fname, struct fhandle *fhp); }
	SYS_GETFH                    = 161 // { int getfh(char *fname, struct fhandle *fhp); }
	SYS_SYSARCH                  = 165 // { int sysarch(int op, char *parms); }
	SYS_RTPRIO                   = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); }
	SYS_SEMSYS                   = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); }
	SYS_MSGSYS                   = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); }
	SYS_SHMSYS                   = 171 // { int shmsys(int which, int a2, int a3, int a4); }
	SYS_SETFIB                   = 175 // { int setfib(int fibnum); }
	SYS_NTP_ADJTIME              = 176 // { int ntp_adjtime(struct timex *tp); }
	SYS_SETGID                   = 181 // { int setgid(gid_t gid); }
	SYS_SETEGID                  = 182 // { int setegid(gid_t egid); }
	SYS_SETEUID                  = 183 // { int seteuid(uid_t euid); }
	SYS_PATHCONF                 = 191 // { int pathconf(char *path, int name); }
	SYS_FPATHCONF                = 192 // { int fpathconf(int fd, int name); }
	SYS_GETRLIMIT                = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int
	SYS_SETRLIMIT                = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int
	SYS___SYSCTL                 = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int
	SYS_MLOCK                    = 203 // { int mlock(const void *addr, size_t len); }
	SYS_MUNLOCK                  = 204 // { int munlock(const void *addr, size_t len); }
	SYS_UNDELETE                 = 205 // { int undelete(char *path); }
	SYS_FUTIMES                  = 206 // { int futimes(int fd, struct timeval *tptr); }
	SYS_GETPGID                  = 207 // { int getpgid(pid_t pid); }
	SYS_POLL                     = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); }
	SYS_SEMGET                   = 221 // { int semget(key_t key, int nsems, int semflg); }
	SYS_SEMOP                    = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); }
	SYS_MSGGET                   = 225 // { int msgget(key_t key, int msgflg); }
	SYS_MSGSND                   = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
	SYS_MSGRCV                   = 227 // { ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
	SYS_SHMAT                    = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); }
	SYS_SHMDT                    = 230 // { int shmdt(const void *shmaddr); }
	SYS_SHMGET                   = 231 // { int shmget(key_t key, size_t size, int shmflg); }
	SYS_CLOCK_GETTIME            = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); }
	SYS_CLOCK_SETTIME            = 233 // { int clock_settime(clockid_t clock_id, const struct timespec *tp); }
	SYS_CLOCK_GETRES             = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); }
	SYS_KTIMER_CREATE            = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); }
	SYS_KTIMER_DELETE            = 236 // { int ktimer_delete(int timerid); }
	SYS_KTIMER_SETTIME           = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }
	SYS_KTIMER_GETTIME           = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); }
	SYS_KTIMER_GETOVERRUN        = 239 // { int ktimer_getoverrun(int timerid); }
	SYS_NANOSLEEP                = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
	SYS_FFCLOCK_GETCOUNTER       = 241 // { int ffclock_getcounter(ffcounter *ffcount); }
	SYS_FFCLOCK_SETESTIMATE      = 242 // { int ffclock_setestimate(struct ffclock_estimate *cest); }
	SYS_FFCLOCK_GETESTIMATE      = 243 // { int ffclock_getestimate(struct ffclock_estimate *cest); }
	SYS_CLOCK_NANOSLEEP          = 244 // { int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); }
	SYS_CLOCK_GETCPUCLOCKID2     = 247 // { int clock_getcpuclockid2(id_t id, int which, clockid_t *clock_id); }
	SYS_NTP_GETTIME              = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }
	SYS_MINHERIT                 = 250 // { int minherit(void *addr, size_t len, int inherit); }
	SYS_RFORK                    = 251 // { int rfork(int flags); }
	SYS_ISSETUGID                = 253 // { int issetugid(void); }
	SYS_LCHOWN                   = 254 // { int lchown(char *path, int uid, int gid); }
	SYS_AIO_READ                 = 255 // { int aio_read(struct aiocb *aiocbp); }
	SYS_AIO_WRITE                = 256 // { int aio_write(struct aiocb *aiocbp); }
	SYS_LIO_LISTIO               = 257 // { int lio_listio(int mode, struct aiocb* const *acb_list, int nent, struct sigevent *sig); }
	SYS_LCHMOD                   = 274 // { int lchmod(char *path, mode_t mode); }
	SYS_LUTIMES                  = 276 // { int lutimes(char *path, struct timeval *tptr); }
	SYS_PREADV                   = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }
	SYS_PWRITEV                  = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }
	SYS_FHOPEN                   = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); }
	SYS_MODNEXT                  = 300 // { int modnext(int modid); }
	SYS_MODSTAT                  = 301 // { int modstat(int modid, struct module_stat* stat); }
	SYS_MODFNEXT                 = 302 // { int modfnext(int modid); }
	SYS_MODFIND                  = 303 // { int modfind(const char *name); }
	SYS_KLDLOAD                  = 304 // { int kldload(const char *file); }
	SYS_KLDUNLOAD                = 305 // { int kldunload(int fileid); }
	SYS_KLDFIND                  = 306 // { int kldfind(const char *file); }
	SYS_KLDNEXT                  = 307 // { int kldnext(int fileid); }
	SYS_KLDSTAT                  = 308 // { int kldstat(int fileid, struct kld_file_stat *stat); }
	SYS_KLDFIRSTMOD              = 309 // { int kldfirstmod(int fileid); }
	SYS_GETSID                   = 310 // { int getsid(pid_t pid); }
	SYS_SETRESUID                = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); }
	SYS_SETRESGID                = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
	SYS_AIO_RETURN               = 314 // { ssize_t aio_return(struct aiocb *aiocbp); }
	SYS_AIO_SUSPEND              = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); }
	SYS_AIO_CANCEL               = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); }
	SYS_AIO_ERROR                = 317 // { int aio_error(struct aiocb *aiocbp); }
	SYS_YIELD                    = 321 // { int yield(void); }
	SYS_MLOCKALL                 = 324 // { int mlockall(int how); }
	SYS_MUNLOCKALL               = 325 // { int munlockall(void); }
	SYS___GETCWD                 = 326 // { int __getcwd(char *buf, size_t buflen); }
	SYS_SCHED_SETPARAM           = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); }
	SYS_SCHED_GETPARAM           = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); }
	SYS_SCHED_SETSCHEDULER       = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); }
	SYS_SCHED_GETSCHEDULER       = 330 // { int sched_getscheduler (pid_t pid); }
	SYS_SCHED_YIELD              = 331 // { int sched_yield (void); }
	SYS_SCHED_GET_PRIORITY_MAX   = 332 // { int sched_get_priority_max (int policy); }
	SYS_SCHED_GET_PRIORITY_MIN   = 333 // { int sched_get_priority_min (int policy); }
	SYS_SCHED_RR_GET_INTERVAL    = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); }
	SYS_UTRACE                   = 335 // { int utrace(const void *addr, size_t len); }
	SYS_KLDSYM                   = 337 // { int kldsym(int fileid, int cmd, void *data); }
	SYS_JAIL                     = 338 // { int jail(struct jail *jail); }
	SYS_SIGPROCMASK              = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); }
	SYS_SIGSUSPEND               = 341 // { int sigsuspend(const sigset_t *sigmask); }
	SYS_SIGPENDING               = 343 // { int sigpending(sigset_t *set); }
	SYS_SIGTIMEDWAIT             = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); }
	SYS_SIGWAITINFO              = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); }
	SYS___ACL_GET_FILE           = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_SET_FILE           = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_GET_FD             = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); }
	SYS___ACL_SET_FD             = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); }
	SYS___ACL_DELETE_FILE        = 351 // { int __acl_delete_file(const char *path, acl_type_t type); }
	SYS___ACL_DELETE_FD          = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); }
	SYS___ACL_ACLCHECK_FILE      = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_ACLCHECK_FD        = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); }
	SYS_EXTATTRCTL               = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }
	SYS_EXTATTR_SET_FILE         = 356 // { ssize_t extattr_set_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_GET_FILE         = 357 // { ssize_t extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_FILE      = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }
	SYS_AIO_WAITCOMPLETE         = 359 // { ssize_t aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); }
	SYS_GETRESUID                = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
	SYS_GETRESGID                = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
	SYS_KQUEUE                   = 362 // { int kqueue(void); }
	SYS_EXTATTR_SET_FD           = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_GET_FD           = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_FD        = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }
	SYS___SETUGID                = 374 // { int __setugid(int flag); }
	SYS_EACCESS                  = 376 // { int eaccess(char *path, int amode); }
	SYS_NMOUNT                   = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); }
	SYS___MAC_GET_PROC           = 384 // { int __mac_get_proc(struct mac *mac_p); }
	SYS___MAC_SET_PROC           = 385 // { int __mac_set_proc(struct mac *mac_p); }
	SYS___MAC_GET_FD             = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); }
	SYS___MAC_GET_FILE           = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); }
	SYS___MAC_SET_FD             = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); }
	SYS___MAC_SET_FILE           = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); }
	SYS_KENV                     = 390 // { int kenv(int what, const char *name, char *value, int len); }
	SYS_LCHFLAGS                 = 391 // { int lchflags(const char *path, u_long flags); }
	SYS_UUIDGEN                  = 392 // { int uuidgen(struct uuid *store, int count); }
	SYS_SENDFILE                 = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); }
	SYS_MAC_SYSCALL              = 394 // { int mac_syscall(const char *policy, int call, void *arg); }
	SYS_KSEM_CLOSE               = 400 // { int ksem_close(semid_t id); }
	SYS_KSEM_POST                = 401 // { int ksem_post(semid_t id); }
	SYS_KSEM_WAIT                = 402 // { int ksem_wait(semid_t id); }
	SYS_KSEM_TRYWAIT             = 403 // { int ksem_trywait(semid_t id); }
	SYS_KSEM_INIT                = 404 // { int ksem_init(semid_t *idp, unsigned int value); }
	SYS_KSEM_OPEN                = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); }
	SYS_KSEM_UNLINK              = 406 // { int ksem_unlink(const char *name); }
	SYS_KSEM_GETVALUE            = 407 // { int ksem_getvalue(semid_t id, int *val); }
	SYS_KSEM_DESTROY             = 408 // { int ksem_destroy(semid_t id); }
	SYS___MAC_GET_PID            = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); }
	SYS___MAC_GET_LINK           = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); }
	SYS___MAC_SET_LINK           = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); }
	SYS_EXTATTR_SET_LINK         = 412 // { ssize_t extattr_set_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_GET_LINK         = 413 // { ssize_t extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_LINK      = 414 // { int extattr_delete_link(const char *path, int attrnamespace, const char *attrname); }
	SYS___MAC_EXECVE             = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); }
	SYS_SIGACTION                = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); }
	SYS_SIGRETURN                = 417 // { int sigreturn(const struct __ucontext *sigcntxp); }
	SYS_GETCONTEXT               = 421 // { int getcontext(struct __ucontext *ucp); }
	SYS_SETCONTEXT               = 422 // { int setcontext(const struct __ucontext *ucp); }
	SYS_SWAPCONTEXT              = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); }
	SYS_SWAPOFF                  = 424 // { int swapoff(const char *name); }
	SYS___ACL_GET_LINK           = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_SET_LINK           = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_DELETE_LINK        = 427 // { int __acl_delete_link(const char *path, acl_type_t type); }
	SYS___ACL_ACLCHECK_LINK      = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); }
	SYS_SIGWAIT                  = 429 // { int sigwait(const sigset_t *set, int *sig); }
	SYS_THR_CREATE               = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); }
	SYS_THR_EXIT                 = 431 // { void thr_exit(long *state); }
	SYS_THR_SELF                 = 432 // { int thr_self(long *id); }
	SYS_THR_KILL                 = 433 // { int thr_kill(long id, int sig); }
	SYS_JAIL_ATTACH              = 436 // { int jail_attach(int jid); }
	SYS_EXTATTR_LIST_FD          = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }
	SYS_EXTATTR_LIST_FILE        = 438 // { ssize_t extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); }
	SYS_EXTATTR_LIST_LINK        = 439 // { ssize_t extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); }
	SYS_KSEM_TIMEDWAIT           = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); }
	SYS_THR_SUSPEND              = 442 // { int thr_suspend(const struct timespec *timeout); }
	SYS_THR_WAKE                 = 443 // { int thr_wake(long id); }
	SYS_KLDUNLOADF               = 444 // { int kldunloadf(int fileid, int flags); }
	SYS_AUDIT                    = 445 // { int audit(const void *record, u_int length); }
	SYS_AUDITON                  = 446 // { int auditon(int cmd, void *data, u_int length); }
	SYS_GETAUID                  = 447 // { int getauid(uid_t *auid); }
	SYS_SETAUID                  = 448 // { int setauid(uid_t *auid); }
	SYS_GETAUDIT                 = 449 // { int getaudit(struct auditinfo *auditinfo); }
	SYS_SETAUDIT                 = 450 // { int setaudit(struct auditinfo *auditinfo); }
	SYS_GETAUDIT_ADDR            = 451 // { int getaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); }
	SYS_SETAUDIT_ADDR            = 452 // { int setaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); }
	SYS_AUDITCTL                 = 453 // { int auditctl(char *path); }
	SYS__UMTX_OP                 = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); }
	SYS_THR_NEW                  = 455 // { int thr_new(struct thr_param *param, int param_size); }
	SYS_SIGQUEUE                 = 456 // { int sigqueue(pid_t pid, int signum, void *value); }
	SYS_KMQ_OPEN                 = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); }
	SYS_KMQ_SETATTR              = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); }
	SYS_KMQ_TIMEDRECEIVE         = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); }
	SYS_KMQ_TIMEDSEND            = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len, unsigned msg_prio, const struct timespec *abs_timeout); }
	SYS_KMQ_NOTIFY               = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); }
	SYS_KMQ_UNLINK               = 462 // { int kmq_unlink(const char *path); }
	SYS_ABORT2                   = 463 // { int abort2(const char *why, int nargs, void **args); }
	SYS_THR_SET_NAME             = 464 // { int thr_set_name(long id, const char *name); }
	SYS_AIO_FSYNC                = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); }
	SYS_RTPRIO_THREAD            = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); }
	SYS_SCTP_PEELOFF             = 471 // { int sctp_peeloff(int sd, uint32_t name); }
	SYS_SCTP_GENERIC_SENDMSG     = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }
	SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }
	SYS_SCTP_GENERIC_RECVMSG     = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr *from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); }
	SYS_PREAD                    = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); }
	SYS_PWRITE                   = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); }
	SYS_MMAP                     = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); }
	SYS_LSEEK                    = 478 // { off_t lseek(int fd, off_t offset, int whence); }
	SYS_TRUNCATE                 = 479 // { int truncate(char *path, off_t length); }
	SYS_FTRUNCATE                = 480 // { int ftruncate(int fd, off_t length); }
	SYS_THR_KILL2                = 481 // { int thr_kill2(pid_t pid, long id, int sig); }
	SYS_SHM_OPEN                 = 482 // { int shm_open(const char *path, int flags, mode_t mode); }
	SYS_SHM_UNLINK               = 483 // { int shm_unlink(const char *path); }
	SYS_CPUSET                   = 484 // { int cpuset(cpusetid_t *setid); }
	SYS_CPUSET_SETID             = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); }
	SYS_CPUSET_GETID             = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); }
	SYS_CPUSET_GETAFFINITY       = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); }
	SYS_CPUSET_SETAFFINITY       = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); }
	SYS_FACCESSAT                = 489 // { int faccessat(int fd, char *path, int amode, int flag); }
	SYS_FCHMODAT                 = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); }
	SYS_FCHOWNAT                 = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); }
	SYS_FEXECVE                  = 492 // { int fexecve(int fd, char **argv, char **envv); }
	SYS_FUTIMESAT                = 494 // { int futimesat(int fd, char *path, struct timeval *times); }
	SYS_LINKAT                   = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); }
	SYS_MKDIRAT                  = 496 // { int mkdirat(int fd, char *path, mode_t mode); }
	SYS_MKFIFOAT                 = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }
	SYS_OPENAT                   = 499 // { int openat(int fd, char *path, int flag, mode_t mode); }
	SYS_READLINKAT               = 500 // { ssize_t readlinkat(int fd, char *path, char *buf, size_t bufsize); }
	SYS_RENAMEAT                 = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); }
	SYS_SYMLINKAT                = 502 // { int symlinkat(char *path1, int fd, char *path2); }
	SYS_UNLINKAT                 = 503 // { int unlinkat(int fd, char *path, int flag); }
	SYS_POSIX_OPENPT             = 504 // { int posix_openpt(int flags); }
	SYS_GSSD_SYSCALL             = 505 // { int gssd_syscall(char *path); }
	SYS_JAIL_GET                 = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); }
	SYS_JAIL_SET                 = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); }
	SYS_JAIL_REMOVE              = 508 // { int jail_remove(int jid); }
	SYS_CLOSEFROM                = 509 // { int closefrom(int lowfd); }
	SYS___SEMCTL                 = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); }
	SYS_MSGCTL                   = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); }
	SYS_SHMCTL                   = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); }
	SYS_LPATHCONF                = 513 // { int lpathconf(char *path, int name); }
	SYS___CAP_RIGHTS_GET         = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); }
	SYS_CAP_ENTER                = 516 // { int cap_enter(void); }
	SYS_CAP_GETMODE              = 517 // { int cap_getmode(u_int *modep); }
	SYS_PDFORK                   = 518 // { int pdfork(int *fdp, int flags); }
	SYS_PDKILL                   = 519 // { int pdkill(int fd, int signum); }
	SYS_PDGETPID                 = 520 // { int pdgetpid(int fd, pid_t *pidp); }
	SYS_PSELECT                  = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); }
	SYS_GETLOGINCLASS            = 523 // { int getloginclass(char *namebuf, size_t namelen); }
	SYS_SETLOGINCLASS            = 524 // { int setloginclass(const char *namebuf); }
	SYS_RCTL_GET_RACCT           = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
	SYS_RCTL_GET_RULES           = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
	SYS_RCTL_GET_LIMITS          = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
	SYS_RCTL_ADD_RULE            = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
	SYS_RCTL_REMOVE_RULE         = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
	SYS_POSIX_FALLOCATE          = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); }
	SYS_POSIX_FADVISE            = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); }
	SYS_WAIT6                    = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); }
	SYS_CAP_RIGHTS_LIMIT         = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); }
	SYS_CAP_IOCTLS_LIMIT         = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); }
	SYS_CAP_IOCTLS_GET           = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); }
	SYS_CAP_FCNTLS_LIMIT         = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); }
	SYS_CAP_FCNTLS_GET           = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); }
	SYS_BINDAT                   = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); }
	SYS_CONNECTAT                = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); }
	SYS_CHFLAGSAT                = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); }
	SYS_ACCEPT4                  = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); }
	SYS_PIPE2                    = 542 // { int pipe2(int *fildes, int flags); }
	SYS_AIO_MLOCK                = 543 // { int aio_mlock(struct aiocb *aiocbp); }
	SYS_PROCCTL                  = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); }
	SYS_PPOLL                    = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); }
	SYS_FUTIMENS                 = 546 // { int futimens(int fd, struct timespec *times); }
	SYS_UTIMENSAT                = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); }
	SYS_FDATASYNC                = 550 // { int fdatasync(int fd); }
	SYS_FSTAT                    = 551 // { int fstat(int fd, struct stat *sb); }
	SYS_FSTATAT                  = 552 // { int fstatat(int fd, char *path, struct stat *buf, int flag); }
	SYS_FHSTAT                   = 553 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); }
	SYS_GETDIRENTRIES            = 554 // { ssize_t getdirentries(int fd, char *buf, size_t count, off_t *basep); }
	SYS_STATFS                   = 555 // { int statfs(char *path, struct statfs *buf); }
	SYS_FSTATFS                  = 556 // { int fstatfs(int fd, struct statfs *buf); }
	SYS_GETFSSTAT                = 557 // { int getfsstat(struct statfs *buf, long bufsize, int mode); }
	SYS_FHSTATFS                 = 558 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); }
	SYS_MKNODAT                  = 559 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); }
	SYS_KEVENT                   = 560 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
	SYS_CPUSET_GETDOMAIN         = 561 // { int cpuset_getdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int *policy); }
	SYS_CPUSET_SETDOMAIN         = 562 // { int cpuset_setdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int policy); }
	SYS_GETRANDOM                = 563 // { int getrandom(void *buf, size_t buflen, unsigned int flags); }
	SYS_GETFHAT                  = 564 // { int getfhat(int fd, char *path, struct fhandle *fhp, int flags); }
	SYS_FHLINK                   = 565 // { int fhlink(struct fhandle *fhp, const char *to); }
	SYS_FHLINKAT                 = 566 // { int fhlinkat(struct fhandle *fhp, int tofd, const char *to,); }
	SYS_FHREADLINK               = 567 // { int fhreadlink(struct fhandle *fhp, char *buf, size_t bufsize); }
	SYS___SYSCTLBYNAME           = 570 // { int __sysctlbyname(const char *name, size_t namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }
	SYS_CLOSE_RANGE              = 575 // { int close_range(u_int lowfd, u_int highfd, int flags); }
)
  07070100000E8C000081A4000000000000000000000001645E367C0000907A000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go // go run mksysnum.go https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build arm64 && freebsd
// +build arm64,freebsd

package unix

const (
	// SYS_NOSYS = 0;  // { int nosys(void); } syscall nosys_args int
	SYS_EXIT                     = 1   // { void sys_exit(int rval); } exit sys_exit_args void
	SYS_FORK                     = 2   // { int fork(void); }
	SYS_READ                     = 3   // { ssize_t read(int fd, void *buf, size_t nbyte); }
	SYS_WRITE                    = 4   // { ssize_t write(int fd, const void *buf, size_t nbyte); }
	SYS_OPEN                     = 5   // { int open(char *path, int flags, int mode); }
	SYS_CLOSE                    = 6   // { int close(int fd); }
	SYS_WAIT4                    = 7   // { int wait4(int pid, int *status, int options, struct rusage *rusage); }
	SYS_LINK                     = 9   // { int link(char *path, char *link); }
	SYS_UNLINK                   = 10  // { int unlink(char *path); }
	SYS_CHDIR                    = 12  // { int chdir(char *path); }
	SYS_FCHDIR                   = 13  // { int fchdir(int fd); }
	SYS_CHMOD                    = 15  // { int chmod(char *path, int mode); }
	SYS_CHOWN                    = 16  // { int chown(char *path, int uid, int gid); }
	SYS_BREAK                    = 17  // { caddr_t break(char *nsize); }
	SYS_GETPID                   = 20  // { pid_t getpid(void); }
	SYS_MOUNT                    = 21  // { int mount(char *type, char *path, int flags, caddr_t data); }
	SYS_UNMOUNT                  = 22  // { int unmount(char *path, int flags); }
	SYS_SETUID                   = 23  // { int setuid(uid_t uid); }
	SYS_GETUID                   = 24  // { uid_t getuid(void); }
	SYS_GETEUID                  = 25  // { uid_t geteuid(void); }
	SYS_PTRACE                   = 26  // { int ptrace(int req, pid_t pid, caddr_t addr, int data); }
	SYS_RECVMSG                  = 27  // { int recvmsg(int s, struct msghdr *msg, int flags); }
	SYS_SENDMSG                  = 28  // { int sendmsg(int s, struct msghdr *msg, int flags); }
	SYS_RECVFROM                 = 29  // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); }
	SYS_ACCEPT                   = 30  // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); }
	SYS_GETPEERNAME              = 31  // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }
	SYS_GETSOCKNAME              = 32  // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }
	SYS_ACCESS                   = 33  // { int access(char *path, int amode); }
	SYS_CHFLAGS                  = 34  // { int chflags(const char *path, u_long flags); }
	SYS_FCHFLAGS                 = 35  // { int fchflags(int fd, u_long flags); }
	SYS_SYNC                     = 36  // { int sync(void); }
	SYS_KILL                     = 37  // { int kill(int pid, int signum); }
	SYS_GETPPID                  = 39  // { pid_t getppid(void); }
	SYS_DUP                      = 41  // { int dup(u_int fd); }
	SYS_GETEGID                  = 43  // { gid_t getegid(void); }
	SYS_PROFIL                   = 44  // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); }
	SYS_KTRACE                   = 45  // { int ktrace(const char *fname, int ops, int facs, int pid); }
	SYS_GETGID                   = 47  // { gid_t getgid(void); }
	SYS_GETLOGIN                 = 49  // { int getlogin(char *namebuf, u_int namelen); }
	SYS_SETLOGIN                 = 50  // { int setlogin(char *namebuf); }
	SYS_ACCT                     = 51  // { int acct(char *path); }
	SYS_SIGALTSTACK              = 53  // { int sigaltstack(stack_t *ss, stack_t *oss); }
	SYS_IOCTL                    = 54  // { int ioctl(int fd, u_long com, caddr_t data); }
	SYS_REBOOT                   = 55  // { int reboot(int opt); }
	SYS_REVOKE                   = 56  // { int revoke(char *path); }
	SYS_SYMLINK                  = 57  // { int symlink(char *path, char *link); }
	SYS_READLINK                 = 58  // { ssize_t readlink(char *path, char *buf, size_t count); }
	SYS_EXECVE                   = 59  // { int execve(char *fname, char **argv, char **envv); }
	SYS_UMASK                    = 60  // { int umask(int newmask); }
	SYS_CHROOT                   = 61  // { int chroot(char *path); }
	SYS_MSYNC                    = 65  // { int msync(void *addr, size_t len, int flags); }
	SYS_VFORK                    = 66  // { int vfork(void); }
	SYS_SBRK                     = 69  // { int sbrk(int incr); }
	SYS_SSTK                     = 70  // { int sstk(int incr); }
	SYS_MUNMAP                   = 73  // { int munmap(void *addr, size_t len); }
	SYS_MPROTECT                 = 74  // { int mprotect(void *addr, size_t len, int prot); }
	SYS_MADVISE                  = 75  // { int madvise(void *addr, size_t len, int behav); }
	SYS_MINCORE                  = 78  // { int mincore(const void *addr, size_t len, char *vec); }
	SYS_GETGROUPS                = 79  // { int getgroups(u_int gidsetsize, gid_t *gidset); }
	SYS_SETGROUPS                = 80  // { int setgroups(u_int gidsetsize, gid_t *gidset); }
	SYS_GETPGRP                  = 81  // { int getpgrp(void); }
	SYS_SETPGID                  = 82  // { int setpgid(int pid, int pgid); }
	SYS_SETITIMER                = 83  // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); }
	SYS_SWAPON                   = 85  // { int swapon(char *name); }
	SYS_GETITIMER                = 86  // { int getitimer(u_int which, struct itimerval *itv); }
	SYS_GETDTABLESIZE            = 89  // { int getdtablesize(void); }
	SYS_DUP2                     = 90  // { int dup2(u_int from, u_int to); }
	SYS_FCNTL                    = 92  // { int fcntl(int fd, int cmd, long arg); }
	SYS_SELECT                   = 93  // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
	SYS_FSYNC                    = 95  // { int fsync(int fd); }
	SYS_SETPRIORITY              = 96  // { int setpriority(int which, int who, int prio); }
	SYS_SOCKET                   = 97  // { int socket(int domain, int type, int protocol); }
	SYS_CONNECT                  = 98  // { int connect(int s, caddr_t name, int namelen); }
	SYS_GETPRIORITY              = 100 // { int getpriority(int which, int who); }
	SYS_BIND                     = 104 // { int bind(int s, caddr_t name, int namelen); }
	SYS_SETSOCKOPT               = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); }
	SYS_LISTEN                   = 106 // { int listen(int s, int backlog); }
	SYS_GETTIMEOFDAY             = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); }
	SYS_GETRUSAGE                = 117 // { int getrusage(int who, struct rusage *rusage); }
	SYS_GETSOCKOPT               = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); }
	SYS_READV                    = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); }
	SYS_WRITEV                   = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); }
	SYS_SETTIMEOFDAY             = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); }
	SYS_FCHOWN                   = 123 // { int fchown(int fd, int uid, int gid); }
	SYS_FCHMOD                   = 124 // { int fchmod(int fd, int mode); }
	SYS_SETREUID                 = 126 // { int setreuid(int ruid, int euid); }
	SYS_SETREGID                 = 127 // { int setregid(int rgid, int egid); }
	SYS_RENAME                   = 128 // { int rename(char *from, char *to); }
	SYS_FLOCK                    = 131 // { int flock(int fd, int how); }
	SYS_MKFIFO                   = 132 // { int mkfifo(char *path, int mode); }
	SYS_SENDTO                   = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); }
	SYS_SHUTDOWN                 = 134 // { int shutdown(int s, int how); }
	SYS_SOCKETPAIR               = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); }
	SYS_MKDIR                    = 136 // { int mkdir(char *path, int mode); }
	SYS_RMDIR                    = 137 // { int rmdir(char *path); }
	SYS_UTIMES                   = 138 // { int utimes(char *path, struct timeval *tptr); }
	SYS_ADJTIME                  = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); }
	SYS_SETSID                   = 147 // { int setsid(void); }
	SYS_QUOTACTL                 = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); }
	SYS_NLM_SYSCALL              = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); }
	SYS_NFSSVC                   = 155 // { int nfssvc(int flag, caddr_t argp); }
	SYS_LGETFH                   = 160 // { int lgetfh(char *fname, struct fhandle *fhp); }
	SYS_GETFH                    = 161 // { int getfh(char *fname, struct fhandle *fhp); }
	SYS_SYSARCH                  = 165 // { int sysarch(int op, char *parms); }
	SYS_RTPRIO                   = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); }
	SYS_SEMSYS                   = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); }
	SYS_MSGSYS                   = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); }
	SYS_SHMSYS                   = 171 // { int shmsys(int which, int a2, int a3, int a4); }
	SYS_SETFIB                   = 175 // { int setfib(int fibnum); }
	SYS_NTP_ADJTIME              = 176 // { int ntp_adjtime(struct timex *tp); }
	SYS_SETGID                   = 181 // { int setgid(gid_t gid); }
	SYS_SETEGID                  = 182 // { int setegid(gid_t egid); }
	SYS_SETEUID                  = 183 // { int seteuid(uid_t euid); }
	SYS_PATHCONF                 = 191 // { int pathconf(char *path, int name); }
	SYS_FPATHCONF                = 192 // { int fpathconf(int fd, int name); }
	SYS_GETRLIMIT                = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int
	SYS_SETRLIMIT                = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int
	SYS___SYSCTL                 = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int
	SYS_MLOCK                    = 203 // { int mlock(const void *addr, size_t len); }
	SYS_MUNLOCK                  = 204 // { int munlock(const void *addr, size_t len); }
	SYS_UNDELETE                 = 205 // { int undelete(char *path); }
	SYS_FUTIMES                  = 206 // { int futimes(int fd, struct timeval *tptr); }
	SYS_GETPGID                  = 207 // { int getpgid(pid_t pid); }
	SYS_POLL                     = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); }
	SYS_SEMGET                   = 221 // { int semget(key_t key, int nsems, int semflg); }
	SYS_SEMOP                    = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); }
	SYS_MSGGET                   = 225 // { int msgget(key_t key, int msgflg); }
	SYS_MSGSND                   = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
	SYS_MSGRCV                   = 227 // { ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
	SYS_SHMAT                    = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); }
	SYS_SHMDT                    = 230 // { int shmdt(const void *shmaddr); }
	SYS_SHMGET                   = 231 // { int shmget(key_t key, size_t size, int shmflg); }
	SYS_CLOCK_GETTIME            = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); }
	SYS_CLOCK_SETTIME            = 233 // { int clock_settime(clockid_t clock_id, const struct timespec *tp); }
	SYS_CLOCK_GETRES             = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); }
	SYS_KTIMER_CREATE            = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); }
	SYS_KTIMER_DELETE            = 236 // { int ktimer_delete(int timerid); }
	SYS_KTIMER_SETTIME           = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }
	SYS_KTIMER_GETTIME           = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); }
	SYS_KTIMER_GETOVERRUN        = 239 // { int ktimer_getoverrun(int timerid); }
	SYS_NANOSLEEP                = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
	SYS_FFCLOCK_GETCOUNTER       = 241 // { int ffclock_getcounter(ffcounter *ffcount); }
	SYS_FFCLOCK_SETESTIMATE      = 242 // { int ffclock_setestimate(struct ffclock_estimate *cest); }
	SYS_FFCLOCK_GETESTIMATE      = 243 // { int ffclock_getestimate(struct ffclock_estimate *cest); }
	SYS_CLOCK_NANOSLEEP          = 244 // { int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); }
	SYS_CLOCK_GETCPUCLOCKID2     = 247 // { int clock_getcpuclockid2(id_t id, int which, clockid_t *clock_id); }
	SYS_NTP_GETTIME              = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }
	SYS_MINHERIT                 = 250 // { int minherit(void *addr, size_t len, int inherit); }
	SYS_RFORK                    = 251 // { int rfork(int flags); }
	SYS_ISSETUGID                = 253 // { int issetugid(void); }
	SYS_LCHOWN                   = 254 // { int lchown(char *path, int uid, int gid); }
	SYS_AIO_READ                 = 255 // { int aio_read(struct aiocb *aiocbp); }
	SYS_AIO_WRITE                = 256 // { int aio_write(struct aiocb *aiocbp); }
	SYS_LIO_LISTIO               = 257 // { int lio_listio(int mode, struct aiocb* const *acb_list, int nent, struct sigevent *sig); }
	SYS_LCHMOD                   = 274 // { int lchmod(char *path, mode_t mode); }
	SYS_LUTIMES                  = 276 // { int lutimes(char *path, struct timeval *tptr); }
	SYS_PREADV                   = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }
	SYS_PWRITEV                  = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }
	SYS_FHOPEN                   = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); }
	SYS_MODNEXT                  = 300 // { int modnext(int modid); }
	SYS_MODSTAT                  = 301 // { int modstat(int modid, struct module_stat* stat); }
	SYS_MODFNEXT                 = 302 // { int modfnext(int modid); }
	SYS_MODFIND                  = 303 // { int modfind(const char *name); }
	SYS_KLDLOAD                  = 304 // { int kldload(const char *file); }
	SYS_KLDUNLOAD                = 305 // { int kldunload(int fileid); }
	SYS_KLDFIND                  = 306 // { int kldfind(const char *file); }
	SYS_KLDNEXT                  = 307 // { int kldnext(int fileid); }
	SYS_KLDSTAT                  = 308 // { int kldstat(int fileid, struct kld_file_stat *stat); }
	SYS_KLDFIRSTMOD              = 309 // { int kldfirstmod(int fileid); }
	SYS_GETSID                   = 310 // { int getsid(pid_t pid); }
	SYS_SETRESUID                = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); }
	SYS_SETRESGID                = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
	SYS_AIO_RETURN               = 314 // { ssize_t aio_return(struct aiocb *aiocbp); }
	SYS_AIO_SUSPEND              = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); }
	SYS_AIO_CANCEL               = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); }
	SYS_AIO_ERROR                = 317 // { int aio_error(struct aiocb *aiocbp); }
	SYS_YIELD                    = 321 // { int yield(void); }
	SYS_MLOCKALL                 = 324 // { int mlockall(int how); }
	SYS_MUNLOCKALL               = 325 // { int munlockall(void); }
	SYS___GETCWD                 = 326 // { int __getcwd(char *buf, size_t buflen); }
	SYS_SCHED_SETPARAM           = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); }
	SYS_SCHED_GETPARAM           = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); }
	SYS_SCHED_SETSCHEDULER       = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); }
	SYS_SCHED_GETSCHEDULER       = 330 // { int sched_getscheduler (pid_t pid); }
	SYS_SCHED_YIELD              = 331 // { int sched_yield (void); }
	SYS_SCHED_GET_PRIORITY_MAX   = 332 // { int sched_get_priority_max (int policy); }
	SYS_SCHED_GET_PRIORITY_MIN   = 333 // { int sched_get_priority_min (int policy); }
	SYS_SCHED_RR_GET_INTERVAL    = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); }
	SYS_UTRACE                   = 335 // { int utrace(const void *addr, size_t len); }
	SYS_KLDSYM                   = 337 // { int kldsym(int fileid, int cmd, void *data); }
	SYS_JAIL                     = 338 // { int jail(struct jail *jail); }
	SYS_SIGPROCMASK              = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); }
	SYS_SIGSUSPEND               = 341 // { int sigsuspend(const sigset_t *sigmask); }
	SYS_SIGPENDING               = 343 // { int sigpending(sigset_t *set); }
	SYS_SIGTIMEDWAIT             = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); }
	SYS_SIGWAITINFO              = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); }
	SYS___ACL_GET_FILE           = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_SET_FILE           = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_GET_FD             = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); }
	SYS___ACL_SET_FD             = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); }
	SYS___ACL_DELETE_FILE        = 351 // { int __acl_delete_file(const char *path, acl_type_t type); }
	SYS___ACL_DELETE_FD          = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); }
	SYS___ACL_ACLCHECK_FILE      = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_ACLCHECK_FD        = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); }
	SYS_EXTATTRCTL               = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }
	SYS_EXTATTR_SET_FILE         = 356 // { ssize_t extattr_set_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_GET_FILE         = 357 // { ssize_t extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_FILE      = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }
	SYS_AIO_WAITCOMPLETE         = 359 // { ssize_t aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); }
	SYS_GETRESUID                = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
	SYS_GETRESGID                = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
	SYS_KQUEUE                   = 362 // { int kqueue(void); }
	SYS_EXTATTR_SET_FD           = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_GET_FD           = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_FD        = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }
	SYS___SETUGID                = 374 // { int __setugid(int flag); }
	SYS_EACCESS                  = 376 // { int eaccess(char *path, int amode); }
	SYS_NMOUNT                   = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); }
	SYS___MAC_GET_PROC           = 384 // { int __mac_get_proc(struct mac *mac_p); }
	SYS___MAC_SET_PROC           = 385 // { int __mac_set_proc(struct mac *mac_p); }
	SYS___MAC_GET_FD             = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); }
	SYS___MAC_GET_FILE           = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); }
	SYS___MAC_SET_FD             = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); }
	SYS___MAC_SET_FILE           = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); }
	SYS_KENV                     = 390 // { int kenv(int what, const char *name, char *value, int len); }
	SYS_LCHFLAGS                 = 391 // { int lchflags(const char *path, u_long flags); }
	SYS_UUIDGEN                  = 392 // { int uuidgen(struct uuid *store, int count); }
	SYS_SENDFILE                 = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); }
	SYS_MAC_SYSCALL              = 394 // { int mac_syscall(const char *policy, int call, void *arg); }
	SYS_KSEM_CLOSE               = 400 // { int ksem_close(semid_t id); }
	SYS_KSEM_POST                = 401 // { int ksem_post(semid_t id); }
	SYS_KSEM_WAIT                = 402 // { int ksem_wait(semid_t id); }
	SYS_KSEM_TRYWAIT             = 403 // { int ksem_trywait(semid_t id); }
	SYS_KSEM_INIT                = 404 // { int ksem_init(semid_t *idp, unsigned int value); }
	SYS_KSEM_OPEN                = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); }
	SYS_KSEM_UNLINK              = 406 // { int ksem_unlink(const char *name); }
	SYS_KSEM_GETVALUE            = 407 // { int ksem_getvalue(semid_t id, int *val); }
	SYS_KSEM_DESTROY             = 408 // { int ksem_destroy(semid_t id); }
	SYS___MAC_GET_PID            = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); }
	SYS___MAC_GET_LINK           = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); }
	SYS___MAC_SET_LINK           = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); }
	SYS_EXTATTR_SET_LINK         = 412 // { ssize_t extattr_set_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_GET_LINK         = 413 // { ssize_t extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_LINK      = 414 // { int extattr_delete_link(const char *path, int attrnamespace, const char *attrname); }
	SYS___MAC_EXECVE             = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); }
	SYS_SIGACTION                = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); }
	SYS_SIGRETURN                = 417 // { int sigreturn(const struct __ucontext *sigcntxp); }
	SYS_GETCONTEXT               = 421 // { int getcontext(struct __ucontext *ucp); }
	SYS_SETCONTEXT               = 422 // { int setcontext(const struct __ucontext *ucp); }
	SYS_SWAPCONTEXT              = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); }
	SYS_SWAPOFF                  = 424 // { int swapoff(const char *name); }
	SYS___ACL_GET_LINK           = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_SET_LINK           = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_DELETE_LINK        = 427 // { int __acl_delete_link(const char *path, acl_type_t type); }
	SYS___ACL_ACLCHECK_LINK      = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); }
	SYS_SIGWAIT                  = 429 // { int sigwait(const sigset_t *set, int *sig); }
	SYS_THR_CREATE               = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); }
	SYS_THR_EXIT                 = 431 // { void thr_exit(long *state); }
	SYS_THR_SELF                 = 432 // { int thr_self(long *id); }
	SYS_THR_KILL                 = 433 // { int thr_kill(long id, int sig); }
	SYS_JAIL_ATTACH              = 436 // { int jail_attach(int jid); }
	SYS_EXTATTR_LIST_FD          = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }
	SYS_EXTATTR_LIST_FILE        = 438 // { ssize_t extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); }
	SYS_EXTATTR_LIST_LINK        = 439 // { ssize_t extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); }
	SYS_KSEM_TIMEDWAIT           = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); }
	SYS_THR_SUSPEND              = 442 // { int thr_suspend(const struct timespec *timeout); }
	SYS_THR_WAKE                 = 443 // { int thr_wake(long id); }
	SYS_KLDUNLOADF               = 444 // { int kldunloadf(int fileid, int flags); }
	SYS_AUDIT                    = 445 // { int audit(const void *record, u_int length); }
	SYS_AUDITON                  = 446 // { int auditon(int cmd, void *data, u_int length); }
	SYS_GETAUID                  = 447 // { int getauid(uid_t *auid); }
	SYS_SETAUID                  = 448 // { int setauid(uid_t *auid); }
	SYS_GETAUDIT                 = 449 // { int getaudit(struct auditinfo *auditinfo); }
	SYS_SETAUDIT                 = 450 // { int setaudit(struct auditinfo *auditinfo); }
	SYS_GETAUDIT_ADDR            = 451 // { int getaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); }
	SYS_SETAUDIT_ADDR            = 452 // { int setaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); }
	SYS_AUDITCTL                 = 453 // { int auditctl(char *path); }
	SYS__UMTX_OP                 = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); }
	SYS_THR_NEW                  = 455 // { int thr_new(struct thr_param *param, int param_size); }
	SYS_SIGQUEUE                 = 456 // { int sigqueue(pid_t pid, int signum, void *value); }
	SYS_KMQ_OPEN                 = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); }
	SYS_KMQ_SETATTR              = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); }
	SYS_KMQ_TIMEDRECEIVE         = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); }
	SYS_KMQ_TIMEDSEND            = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len, unsigned msg_prio, const struct timespec *abs_timeout); }
	SYS_KMQ_NOTIFY               = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); }
	SYS_KMQ_UNLINK               = 462 // { int kmq_unlink(const char *path); }
	SYS_ABORT2                   = 463 // { int abort2(const char *why, int nargs, void **args); }
	SYS_THR_SET_NAME             = 464 // { int thr_set_name(long id, const char *name); }
	SYS_AIO_FSYNC                = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); }
	SYS_RTPRIO_THREAD            = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); }
	SYS_SCTP_PEELOFF             = 471 // { int sctp_peeloff(int sd, uint32_t name); }
	SYS_SCTP_GENERIC_SENDMSG     = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }
	SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }
	SYS_SCTP_GENERIC_RECVMSG     = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr *from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); }
	SYS_PREAD                    = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); }
	SYS_PWRITE                   = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); }
	SYS_MMAP                     = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); }
	SYS_LSEEK                    = 478 // { off_t lseek(int fd, off_t offset, int whence); }
	SYS_TRUNCATE                 = 479 // { int truncate(char *path, off_t length); }
	SYS_FTRUNCATE                = 480 // { int ftruncate(int fd, off_t length); }
	SYS_THR_KILL2                = 481 // { int thr_kill2(pid_t pid, long id, int sig); }
	SYS_SHM_OPEN                 = 482 // { int shm_open(const char *path, int flags, mode_t mode); }
	SYS_SHM_UNLINK               = 483 // { int shm_unlink(const char *path); }
	SYS_CPUSET                   = 484 // { int cpuset(cpusetid_t *setid); }
	SYS_CPUSET_SETID             = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); }
	SYS_CPUSET_GETID             = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); }
	SYS_CPUSET_GETAFFINITY       = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); }
	SYS_CPUSET_SETAFFINITY       = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); }
	SYS_FACCESSAT                = 489 // { int faccessat(int fd, char *path, int amode, int flag); }
	SYS_FCHMODAT                 = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); }
	SYS_FCHOWNAT                 = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); }
	SYS_FEXECVE                  = 492 // { int fexecve(int fd, char **argv, char **envv); }
	SYS_FUTIMESAT                = 494 // { int futimesat(int fd, char *path, struct timeval *times); }
	SYS_LINKAT                   = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); }
	SYS_MKDIRAT                  = 496 // { int mkdirat(int fd, char *path, mode_t mode); }
	SYS_MKFIFOAT                 = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }
	SYS_OPENAT                   = 499 // { int openat(int fd, char *path, int flag, mode_t mode); }
	SYS_READLINKAT               = 500 // { ssize_t readlinkat(int fd, char *path, char *buf, size_t bufsize); }
	SYS_RENAMEAT                 = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); }
	SYS_SYMLINKAT                = 502 // { int symlinkat(char *path1, int fd, char *path2); }
	SYS_UNLINKAT                 = 503 // { int unlinkat(int fd, char *path, int flag); }
	SYS_POSIX_OPENPT             = 504 // { int posix_openpt(int flags); }
	SYS_GSSD_SYSCALL             = 505 // { int gssd_syscall(char *path); }
	SYS_JAIL_GET                 = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); }
	SYS_JAIL_SET                 = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); }
	SYS_JAIL_REMOVE              = 508 // { int jail_remove(int jid); }
	SYS_CLOSEFROM                = 509 // { int closefrom(int lowfd); }
	SYS___SEMCTL                 = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); }
	SYS_MSGCTL                   = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); }
	SYS_SHMCTL                   = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); }
	SYS_LPATHCONF                = 513 // { int lpathconf(char *path, int name); }
	SYS___CAP_RIGHTS_GET         = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); }
	SYS_CAP_ENTER                = 516 // { int cap_enter(void); }
	SYS_CAP_GETMODE              = 517 // { int cap_getmode(u_int *modep); }
	SYS_PDFORK                   = 518 // { int pdfork(int *fdp, int flags); }
	SYS_PDKILL                   = 519 // { int pdkill(int fd, int signum); }
	SYS_PDGETPID                 = 520 // { int pdgetpid(int fd, pid_t *pidp); }
	SYS_PSELECT                  = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); }
	SYS_GETLOGINCLASS            = 523 // { int getloginclass(char *namebuf, size_t namelen); }
	SYS_SETLOGINCLASS            = 524 // { int setloginclass(const char *namebuf); }
	SYS_RCTL_GET_RACCT           = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
	SYS_RCTL_GET_RULES           = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
	SYS_RCTL_GET_LIMITS          = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
	SYS_RCTL_ADD_RULE            = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
	SYS_RCTL_REMOVE_RULE         = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
	SYS_POSIX_FALLOCATE          = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); }
	SYS_POSIX_FADVISE            = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); }
	SYS_WAIT6                    = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); }
	SYS_CAP_RIGHTS_LIMIT         = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); }
	SYS_CAP_IOCTLS_LIMIT         = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); }
	SYS_CAP_IOCTLS_GET           = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); }
	SYS_CAP_FCNTLS_LIMIT         = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); }
	SYS_CAP_FCNTLS_GET           = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); }
	SYS_BINDAT                   = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); }
	SYS_CONNECTAT                = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); }
	SYS_CHFLAGSAT                = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); }
	SYS_ACCEPT4                  = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); }
	SYS_PIPE2                    = 542 // { int pipe2(int *fildes, int flags); }
	SYS_AIO_MLOCK                = 543 // { int aio_mlock(struct aiocb *aiocbp); }
	SYS_PROCCTL                  = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); }
	SYS_PPOLL                    = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); }
	SYS_FUTIMENS                 = 546 // { int futimens(int fd, struct timespec *times); }
	SYS_UTIMENSAT                = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); }
	SYS_FDATASYNC                = 550 // { int fdatasync(int fd); }
	SYS_FSTAT                    = 551 // { int fstat(int fd, struct stat *sb); }
	SYS_FSTATAT                  = 552 // { int fstatat(int fd, char *path, struct stat *buf, int flag); }
	SYS_FHSTAT                   = 553 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); }
	SYS_GETDIRENTRIES            = 554 // { ssize_t getdirentries(int fd, char *buf, size_t count, off_t *basep); }
	SYS_STATFS                   = 555 // { int statfs(char *path, struct statfs *buf); }
	SYS_FSTATFS                  = 556 // { int fstatfs(int fd, struct statfs *buf); }
	SYS_GETFSSTAT                = 557 // { int getfsstat(struct statfs *buf, long bufsize, int mode); }
	SYS_FHSTATFS                 = 558 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); }
	SYS_MKNODAT                  = 559 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); }
	SYS_KEVENT                   = 560 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
	SYS_CPUSET_GETDOMAIN         = 561 // { int cpuset_getdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int *policy); }
	SYS_CPUSET_SETDOMAIN         = 562 // { int cpuset_setdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int policy); }
	SYS_GETRANDOM                = 563 // { int getrandom(void *buf, size_t buflen, unsigned int flags); }
	SYS_GETFHAT                  = 564 // { int getfhat(int fd, char *path, struct fhandle *fhp, int flags); }
	SYS_FHLINK                   = 565 // { int fhlink(struct fhandle *fhp, const char *to); }
	SYS_FHLINKAT                 = 566 // { int fhlinkat(struct fhandle *fhp, int tofd, const char *to,); }
	SYS_FHREADLINK               = 567 // { int fhreadlink(struct fhandle *fhp, char *buf, size_t bufsize); }
	SYS___SYSCTLBYNAME           = 570 // { int __sysctlbyname(const char *name, size_t namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }
	SYS_CLOSE_RANGE              = 575 // { int close_range(u_int lowfd, u_int highfd, int flags); }
)
  07070100000E8D000081A4000000000000000000000001645E367C0000907E000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_freebsd_riscv64.go   // go run mksysnum.go https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build riscv64 && freebsd
// +build riscv64,freebsd

package unix

const (
	// SYS_NOSYS = 0;  // { int nosys(void); } syscall nosys_args int
	SYS_EXIT                     = 1   // { void sys_exit(int rval); } exit sys_exit_args void
	SYS_FORK                     = 2   // { int fork(void); }
	SYS_READ                     = 3   // { ssize_t read(int fd, void *buf, size_t nbyte); }
	SYS_WRITE                    = 4   // { ssize_t write(int fd, const void *buf, size_t nbyte); }
	SYS_OPEN                     = 5   // { int open(char *path, int flags, int mode); }
	SYS_CLOSE                    = 6   // { int close(int fd); }
	SYS_WAIT4                    = 7   // { int wait4(int pid, int *status, int options, struct rusage *rusage); }
	SYS_LINK                     = 9   // { int link(char *path, char *link); }
	SYS_UNLINK                   = 10  // { int unlink(char *path); }
	SYS_CHDIR                    = 12  // { int chdir(char *path); }
	SYS_FCHDIR                   = 13  // { int fchdir(int fd); }
	SYS_CHMOD                    = 15  // { int chmod(char *path, int mode); }
	SYS_CHOWN                    = 16  // { int chown(char *path, int uid, int gid); }
	SYS_BREAK                    = 17  // { caddr_t break(char *nsize); }
	SYS_GETPID                   = 20  // { pid_t getpid(void); }
	SYS_MOUNT                    = 21  // { int mount(char *type, char *path, int flags, caddr_t data); }
	SYS_UNMOUNT                  = 22  // { int unmount(char *path, int flags); }
	SYS_SETUID                   = 23  // { int setuid(uid_t uid); }
	SYS_GETUID                   = 24  // { uid_t getuid(void); }
	SYS_GETEUID                  = 25  // { uid_t geteuid(void); }
	SYS_PTRACE                   = 26  // { int ptrace(int req, pid_t pid, caddr_t addr, int data); }
	SYS_RECVMSG                  = 27  // { int recvmsg(int s, struct msghdr *msg, int flags); }
	SYS_SENDMSG                  = 28  // { int sendmsg(int s, struct msghdr *msg, int flags); }
	SYS_RECVFROM                 = 29  // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); }
	SYS_ACCEPT                   = 30  // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); }
	SYS_GETPEERNAME              = 31  // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }
	SYS_GETSOCKNAME              = 32  // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }
	SYS_ACCESS                   = 33  // { int access(char *path, int amode); }
	SYS_CHFLAGS                  = 34  // { int chflags(const char *path, u_long flags); }
	SYS_FCHFLAGS                 = 35  // { int fchflags(int fd, u_long flags); }
	SYS_SYNC                     = 36  // { int sync(void); }
	SYS_KILL                     = 37  // { int kill(int pid, int signum); }
	SYS_GETPPID                  = 39  // { pid_t getppid(void); }
	SYS_DUP                      = 41  // { int dup(u_int fd); }
	SYS_GETEGID                  = 43  // { gid_t getegid(void); }
	SYS_PROFIL                   = 44  // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); }
	SYS_KTRACE                   = 45  // { int ktrace(const char *fname, int ops, int facs, int pid); }
	SYS_GETGID                   = 47  // { gid_t getgid(void); }
	SYS_GETLOGIN                 = 49  // { int getlogin(char *namebuf, u_int namelen); }
	SYS_SETLOGIN                 = 50  // { int setlogin(char *namebuf); }
	SYS_ACCT                     = 51  // { int acct(char *path); }
	SYS_SIGALTSTACK              = 53  // { int sigaltstack(stack_t *ss, stack_t *oss); }
	SYS_IOCTL                    = 54  // { int ioctl(int fd, u_long com, caddr_t data); }
	SYS_REBOOT                   = 55  // { int reboot(int opt); }
	SYS_REVOKE                   = 56  // { int revoke(char *path); }
	SYS_SYMLINK                  = 57  // { int symlink(char *path, char *link); }
	SYS_READLINK                 = 58  // { ssize_t readlink(char *path, char *buf, size_t count); }
	SYS_EXECVE                   = 59  // { int execve(char *fname, char **argv, char **envv); }
	SYS_UMASK                    = 60  // { int umask(int newmask); }
	SYS_CHROOT                   = 61  // { int chroot(char *path); }
	SYS_MSYNC                    = 65  // { int msync(void *addr, size_t len, int flags); }
	SYS_VFORK                    = 66  // { int vfork(void); }
	SYS_SBRK                     = 69  // { int sbrk(int incr); }
	SYS_SSTK                     = 70  // { int sstk(int incr); }
	SYS_MUNMAP                   = 73  // { int munmap(void *addr, size_t len); }
	SYS_MPROTECT                 = 74  // { int mprotect(void *addr, size_t len, int prot); }
	SYS_MADVISE                  = 75  // { int madvise(void *addr, size_t len, int behav); }
	SYS_MINCORE                  = 78  // { int mincore(const void *addr, size_t len, char *vec); }
	SYS_GETGROUPS                = 79  // { int getgroups(u_int gidsetsize, gid_t *gidset); }
	SYS_SETGROUPS                = 80  // { int setgroups(u_int gidsetsize, gid_t *gidset); }
	SYS_GETPGRP                  = 81  // { int getpgrp(void); }
	SYS_SETPGID                  = 82  // { int setpgid(int pid, int pgid); }
	SYS_SETITIMER                = 83  // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); }
	SYS_SWAPON                   = 85  // { int swapon(char *name); }
	SYS_GETITIMER                = 86  // { int getitimer(u_int which, struct itimerval *itv); }
	SYS_GETDTABLESIZE            = 89  // { int getdtablesize(void); }
	SYS_DUP2                     = 90  // { int dup2(u_int from, u_int to); }
	SYS_FCNTL                    = 92  // { int fcntl(int fd, int cmd, long arg); }
	SYS_SELECT                   = 93  // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
	SYS_FSYNC                    = 95  // { int fsync(int fd); }
	SYS_SETPRIORITY              = 96  // { int setpriority(int which, int who, int prio); }
	SYS_SOCKET                   = 97  // { int socket(int domain, int type, int protocol); }
	SYS_CONNECT                  = 98  // { int connect(int s, caddr_t name, int namelen); }
	SYS_GETPRIORITY              = 100 // { int getpriority(int which, int who); }
	SYS_BIND                     = 104 // { int bind(int s, caddr_t name, int namelen); }
	SYS_SETSOCKOPT               = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); }
	SYS_LISTEN                   = 106 // { int listen(int s, int backlog); }
	SYS_GETTIMEOFDAY             = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); }
	SYS_GETRUSAGE                = 117 // { int getrusage(int who, struct rusage *rusage); }
	SYS_GETSOCKOPT               = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); }
	SYS_READV                    = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); }
	SYS_WRITEV                   = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); }
	SYS_SETTIMEOFDAY             = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); }
	SYS_FCHOWN                   = 123 // { int fchown(int fd, int uid, int gid); }
	SYS_FCHMOD                   = 124 // { int fchmod(int fd, int mode); }
	SYS_SETREUID                 = 126 // { int setreuid(int ruid, int euid); }
	SYS_SETREGID                 = 127 // { int setregid(int rgid, int egid); }
	SYS_RENAME                   = 128 // { int rename(char *from, char *to); }
	SYS_FLOCK                    = 131 // { int flock(int fd, int how); }
	SYS_MKFIFO                   = 132 // { int mkfifo(char *path, int mode); }
	SYS_SENDTO                   = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); }
	SYS_SHUTDOWN                 = 134 // { int shutdown(int s, int how); }
	SYS_SOCKETPAIR               = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); }
	SYS_MKDIR                    = 136 // { int mkdir(char *path, int mode); }
	SYS_RMDIR                    = 137 // { int rmdir(char *path); }
	SYS_UTIMES                   = 138 // { int utimes(char *path, struct timeval *tptr); }
	SYS_ADJTIME                  = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); }
	SYS_SETSID                   = 147 // { int setsid(void); }
	SYS_QUOTACTL                 = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); }
	SYS_NLM_SYSCALL              = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); }
	SYS_NFSSVC                   = 155 // { int nfssvc(int flag, caddr_t argp); }
	SYS_LGETFH                   = 160 // { int lgetfh(char *fname, struct fhandle *fhp); }
	SYS_GETFH                    = 161 // { int getfh(char *fname, struct fhandle *fhp); }
	SYS_SYSARCH                  = 165 // { int sysarch(int op, char *parms); }
	SYS_RTPRIO                   = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); }
	SYS_SEMSYS                   = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); }
	SYS_MSGSYS                   = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); }
	SYS_SHMSYS                   = 171 // { int shmsys(int which, int a2, int a3, int a4); }
	SYS_SETFIB                   = 175 // { int setfib(int fibnum); }
	SYS_NTP_ADJTIME              = 176 // { int ntp_adjtime(struct timex *tp); }
	SYS_SETGID                   = 181 // { int setgid(gid_t gid); }
	SYS_SETEGID                  = 182 // { int setegid(gid_t egid); }
	SYS_SETEUID                  = 183 // { int seteuid(uid_t euid); }
	SYS_PATHCONF                 = 191 // { int pathconf(char *path, int name); }
	SYS_FPATHCONF                = 192 // { int fpathconf(int fd, int name); }
	SYS_GETRLIMIT                = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int
	SYS_SETRLIMIT                = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int
	SYS___SYSCTL                 = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int
	SYS_MLOCK                    = 203 // { int mlock(const void *addr, size_t len); }
	SYS_MUNLOCK                  = 204 // { int munlock(const void *addr, size_t len); }
	SYS_UNDELETE                 = 205 // { int undelete(char *path); }
	SYS_FUTIMES                  = 206 // { int futimes(int fd, struct timeval *tptr); }
	SYS_GETPGID                  = 207 // { int getpgid(pid_t pid); }
	SYS_POLL                     = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); }
	SYS_SEMGET                   = 221 // { int semget(key_t key, int nsems, int semflg); }
	SYS_SEMOP                    = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); }
	SYS_MSGGET                   = 225 // { int msgget(key_t key, int msgflg); }
	SYS_MSGSND                   = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
	SYS_MSGRCV                   = 227 // { ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
	SYS_SHMAT                    = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); }
	SYS_SHMDT                    = 230 // { int shmdt(const void *shmaddr); }
	SYS_SHMGET                   = 231 // { int shmget(key_t key, size_t size, int shmflg); }
	SYS_CLOCK_GETTIME            = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); }
	SYS_CLOCK_SETTIME            = 233 // { int clock_settime(clockid_t clock_id, const struct timespec *tp); }
	SYS_CLOCK_GETRES             = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); }
	SYS_KTIMER_CREATE            = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); }
	SYS_KTIMER_DELETE            = 236 // { int ktimer_delete(int timerid); }
	SYS_KTIMER_SETTIME           = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }
	SYS_KTIMER_GETTIME           = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); }
	SYS_KTIMER_GETOVERRUN        = 239 // { int ktimer_getoverrun(int timerid); }
	SYS_NANOSLEEP                = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
	SYS_FFCLOCK_GETCOUNTER       = 241 // { int ffclock_getcounter(ffcounter *ffcount); }
	SYS_FFCLOCK_SETESTIMATE      = 242 // { int ffclock_setestimate(struct ffclock_estimate *cest); }
	SYS_FFCLOCK_GETESTIMATE      = 243 // { int ffclock_getestimate(struct ffclock_estimate *cest); }
	SYS_CLOCK_NANOSLEEP          = 244 // { int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); }
	SYS_CLOCK_GETCPUCLOCKID2     = 247 // { int clock_getcpuclockid2(id_t id, int which, clockid_t *clock_id); }
	SYS_NTP_GETTIME              = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }
	SYS_MINHERIT                 = 250 // { int minherit(void *addr, size_t len, int inherit); }
	SYS_RFORK                    = 251 // { int rfork(int flags); }
	SYS_ISSETUGID                = 253 // { int issetugid(void); }
	SYS_LCHOWN                   = 254 // { int lchown(char *path, int uid, int gid); }
	SYS_AIO_READ                 = 255 // { int aio_read(struct aiocb *aiocbp); }
	SYS_AIO_WRITE                = 256 // { int aio_write(struct aiocb *aiocbp); }
	SYS_LIO_LISTIO               = 257 // { int lio_listio(int mode, struct aiocb* const *acb_list, int nent, struct sigevent *sig); }
	SYS_LCHMOD                   = 274 // { int lchmod(char *path, mode_t mode); }
	SYS_LUTIMES                  = 276 // { int lutimes(char *path, struct timeval *tptr); }
	SYS_PREADV                   = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }
	SYS_PWRITEV                  = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }
	SYS_FHOPEN                   = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); }
	SYS_MODNEXT                  = 300 // { int modnext(int modid); }
	SYS_MODSTAT                  = 301 // { int modstat(int modid, struct module_stat* stat); }
	SYS_MODFNEXT                 = 302 // { int modfnext(int modid); }
	SYS_MODFIND                  = 303 // { int modfind(const char *name); }
	SYS_KLDLOAD                  = 304 // { int kldload(const char *file); }
	SYS_KLDUNLOAD                = 305 // { int kldunload(int fileid); }
	SYS_KLDFIND                  = 306 // { int kldfind(const char *file); }
	SYS_KLDNEXT                  = 307 // { int kldnext(int fileid); }
	SYS_KLDSTAT                  = 308 // { int kldstat(int fileid, struct kld_file_stat *stat); }
	SYS_KLDFIRSTMOD              = 309 // { int kldfirstmod(int fileid); }
	SYS_GETSID                   = 310 // { int getsid(pid_t pid); }
	SYS_SETRESUID                = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); }
	SYS_SETRESGID                = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
	SYS_AIO_RETURN               = 314 // { ssize_t aio_return(struct aiocb *aiocbp); }
	SYS_AIO_SUSPEND              = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); }
	SYS_AIO_CANCEL               = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); }
	SYS_AIO_ERROR                = 317 // { int aio_error(struct aiocb *aiocbp); }
	SYS_YIELD                    = 321 // { int yield(void); }
	SYS_MLOCKALL                 = 324 // { int mlockall(int how); }
	SYS_MUNLOCKALL               = 325 // { int munlockall(void); }
	SYS___GETCWD                 = 326 // { int __getcwd(char *buf, size_t buflen); }
	SYS_SCHED_SETPARAM           = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); }
	SYS_SCHED_GETPARAM           = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); }
	SYS_SCHED_SETSCHEDULER       = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); }
	SYS_SCHED_GETSCHEDULER       = 330 // { int sched_getscheduler (pid_t pid); }
	SYS_SCHED_YIELD              = 331 // { int sched_yield (void); }
	SYS_SCHED_GET_PRIORITY_MAX   = 332 // { int sched_get_priority_max (int policy); }
	SYS_SCHED_GET_PRIORITY_MIN   = 333 // { int sched_get_priority_min (int policy); }
	SYS_SCHED_RR_GET_INTERVAL    = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); }
	SYS_UTRACE                   = 335 // { int utrace(const void *addr, size_t len); }
	SYS_KLDSYM                   = 337 // { int kldsym(int fileid, int cmd, void *data); }
	SYS_JAIL                     = 338 // { int jail(struct jail *jail); }
	SYS_SIGPROCMASK              = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); }
	SYS_SIGSUSPEND               = 341 // { int sigsuspend(const sigset_t *sigmask); }
	SYS_SIGPENDING               = 343 // { int sigpending(sigset_t *set); }
	SYS_SIGTIMEDWAIT             = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); }
	SYS_SIGWAITINFO              = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); }
	SYS___ACL_GET_FILE           = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_SET_FILE           = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_GET_FD             = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); }
	SYS___ACL_SET_FD             = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); }
	SYS___ACL_DELETE_FILE        = 351 // { int __acl_delete_file(const char *path, acl_type_t type); }
	SYS___ACL_DELETE_FD          = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); }
	SYS___ACL_ACLCHECK_FILE      = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_ACLCHECK_FD        = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); }
	SYS_EXTATTRCTL               = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }
	SYS_EXTATTR_SET_FILE         = 356 // { ssize_t extattr_set_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_GET_FILE         = 357 // { ssize_t extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_FILE      = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }
	SYS_AIO_WAITCOMPLETE         = 359 // { ssize_t aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); }
	SYS_GETRESUID                = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
	SYS_GETRESGID                = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
	SYS_KQUEUE                   = 362 // { int kqueue(void); }
	SYS_EXTATTR_SET_FD           = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_GET_FD           = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_FD        = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }
	SYS___SETUGID                = 374 // { int __setugid(int flag); }
	SYS_EACCESS                  = 376 // { int eaccess(char *path, int amode); }
	SYS_NMOUNT                   = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); }
	SYS___MAC_GET_PROC           = 384 // { int __mac_get_proc(struct mac *mac_p); }
	SYS___MAC_SET_PROC           = 385 // { int __mac_set_proc(struct mac *mac_p); }
	SYS___MAC_GET_FD             = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); }
	SYS___MAC_GET_FILE           = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); }
	SYS___MAC_SET_FD             = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); }
	SYS___MAC_SET_FILE           = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); }
	SYS_KENV                     = 390 // { int kenv(int what, const char *name, char *value, int len); }
	SYS_LCHFLAGS                 = 391 // { int lchflags(const char *path, u_long flags); }
	SYS_UUIDGEN                  = 392 // { int uuidgen(struct uuid *store, int count); }
	SYS_SENDFILE                 = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); }
	SYS_MAC_SYSCALL              = 394 // { int mac_syscall(const char *policy, int call, void *arg); }
	SYS_KSEM_CLOSE               = 400 // { int ksem_close(semid_t id); }
	SYS_KSEM_POST                = 401 // { int ksem_post(semid_t id); }
	SYS_KSEM_WAIT                = 402 // { int ksem_wait(semid_t id); }
	SYS_KSEM_TRYWAIT             = 403 // { int ksem_trywait(semid_t id); }
	SYS_KSEM_INIT                = 404 // { int ksem_init(semid_t *idp, unsigned int value); }
	SYS_KSEM_OPEN                = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); }
	SYS_KSEM_UNLINK              = 406 // { int ksem_unlink(const char *name); }
	SYS_KSEM_GETVALUE            = 407 // { int ksem_getvalue(semid_t id, int *val); }
	SYS_KSEM_DESTROY             = 408 // { int ksem_destroy(semid_t id); }
	SYS___MAC_GET_PID            = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); }
	SYS___MAC_GET_LINK           = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); }
	SYS___MAC_SET_LINK           = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); }
	SYS_EXTATTR_SET_LINK         = 412 // { ssize_t extattr_set_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_GET_LINK         = 413 // { ssize_t extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_LINK      = 414 // { int extattr_delete_link(const char *path, int attrnamespace, const char *attrname); }
	SYS___MAC_EXECVE             = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); }
	SYS_SIGACTION                = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); }
	SYS_SIGRETURN                = 417 // { int sigreturn(const struct __ucontext *sigcntxp); }
	SYS_GETCONTEXT               = 421 // { int getcontext(struct __ucontext *ucp); }
	SYS_SETCONTEXT               = 422 // { int setcontext(const struct __ucontext *ucp); }
	SYS_SWAPCONTEXT              = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); }
	SYS_SWAPOFF                  = 424 // { int swapoff(const char *name); }
	SYS___ACL_GET_LINK           = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_SET_LINK           = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); }
	SYS___ACL_DELETE_LINK        = 427 // { int __acl_delete_link(const char *path, acl_type_t type); }
	SYS___ACL_ACLCHECK_LINK      = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); }
	SYS_SIGWAIT                  = 429 // { int sigwait(const sigset_t *set, int *sig); }
	SYS_THR_CREATE               = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); }
	SYS_THR_EXIT                 = 431 // { void thr_exit(long *state); }
	SYS_THR_SELF                 = 432 // { int thr_self(long *id); }
	SYS_THR_KILL                 = 433 // { int thr_kill(long id, int sig); }
	SYS_JAIL_ATTACH              = 436 // { int jail_attach(int jid); }
	SYS_EXTATTR_LIST_FD          = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }
	SYS_EXTATTR_LIST_FILE        = 438 // { ssize_t extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); }
	SYS_EXTATTR_LIST_LINK        = 439 // { ssize_t extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); }
	SYS_KSEM_TIMEDWAIT           = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); }
	SYS_THR_SUSPEND              = 442 // { int thr_suspend(const struct timespec *timeout); }
	SYS_THR_WAKE                 = 443 // { int thr_wake(long id); }
	SYS_KLDUNLOADF               = 444 // { int kldunloadf(int fileid, int flags); }
	SYS_AUDIT                    = 445 // { int audit(const void *record, u_int length); }
	SYS_AUDITON                  = 446 // { int auditon(int cmd, void *data, u_int length); }
	SYS_GETAUID                  = 447 // { int getauid(uid_t *auid); }
	SYS_SETAUID                  = 448 // { int setauid(uid_t *auid); }
	SYS_GETAUDIT                 = 449 // { int getaudit(struct auditinfo *auditinfo); }
	SYS_SETAUDIT                 = 450 // { int setaudit(struct auditinfo *auditinfo); }
	SYS_GETAUDIT_ADDR            = 451 // { int getaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); }
	SYS_SETAUDIT_ADDR            = 452 // { int setaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); }
	SYS_AUDITCTL                 = 453 // { int auditctl(char *path); }
	SYS__UMTX_OP                 = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); }
	SYS_THR_NEW                  = 455 // { int thr_new(struct thr_param *param, int param_size); }
	SYS_SIGQUEUE                 = 456 // { int sigqueue(pid_t pid, int signum, void *value); }
	SYS_KMQ_OPEN                 = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); }
	SYS_KMQ_SETATTR              = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); }
	SYS_KMQ_TIMEDRECEIVE         = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); }
	SYS_KMQ_TIMEDSEND            = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len, unsigned msg_prio, const struct timespec *abs_timeout); }
	SYS_KMQ_NOTIFY               = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); }
	SYS_KMQ_UNLINK               = 462 // { int kmq_unlink(const char *path); }
	SYS_ABORT2                   = 463 // { int abort2(const char *why, int nargs, void **args); }
	SYS_THR_SET_NAME             = 464 // { int thr_set_name(long id, const char *name); }
	SYS_AIO_FSYNC                = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); }
	SYS_RTPRIO_THREAD            = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); }
	SYS_SCTP_PEELOFF             = 471 // { int sctp_peeloff(int sd, uint32_t name); }
	SYS_SCTP_GENERIC_SENDMSG     = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }
	SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }
	SYS_SCTP_GENERIC_RECVMSG     = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr *from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); }
	SYS_PREAD                    = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); }
	SYS_PWRITE                   = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); }
	SYS_MMAP                     = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); }
	SYS_LSEEK                    = 478 // { off_t lseek(int fd, off_t offset, int whence); }
	SYS_TRUNCATE                 = 479 // { int truncate(char *path, off_t length); }
	SYS_FTRUNCATE                = 480 // { int ftruncate(int fd, off_t length); }
	SYS_THR_KILL2                = 481 // { int thr_kill2(pid_t pid, long id, int sig); }
	SYS_SHM_OPEN                 = 482 // { int shm_open(const char *path, int flags, mode_t mode); }
	SYS_SHM_UNLINK               = 483 // { int shm_unlink(const char *path); }
	SYS_CPUSET                   = 484 // { int cpuset(cpusetid_t *setid); }
	SYS_CPUSET_SETID             = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); }
	SYS_CPUSET_GETID             = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); }
	SYS_CPUSET_GETAFFINITY       = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); }
	SYS_CPUSET_SETAFFINITY       = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); }
	SYS_FACCESSAT                = 489 // { int faccessat(int fd, char *path, int amode, int flag); }
	SYS_FCHMODAT                 = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); }
	SYS_FCHOWNAT                 = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); }
	SYS_FEXECVE                  = 492 // { int fexecve(int fd, char **argv, char **envv); }
	SYS_FUTIMESAT                = 494 // { int futimesat(int fd, char *path, struct timeval *times); }
	SYS_LINKAT                   = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); }
	SYS_MKDIRAT                  = 496 // { int mkdirat(int fd, char *path, mode_t mode); }
	SYS_MKFIFOAT                 = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }
	SYS_OPENAT                   = 499 // { int openat(int fd, char *path, int flag, mode_t mode); }
	SYS_READLINKAT               = 500 // { ssize_t readlinkat(int fd, char *path, char *buf, size_t bufsize); }
	SYS_RENAMEAT                 = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); }
	SYS_SYMLINKAT                = 502 // { int symlinkat(char *path1, int fd, char *path2); }
	SYS_UNLINKAT                 = 503 // { int unlinkat(int fd, char *path, int flag); }
	SYS_POSIX_OPENPT             = 504 // { int posix_openpt(int flags); }
	SYS_GSSD_SYSCALL             = 505 // { int gssd_syscall(char *path); }
	SYS_JAIL_GET                 = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); }
	SYS_JAIL_SET                 = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); }
	SYS_JAIL_REMOVE              = 508 // { int jail_remove(int jid); }
	SYS_CLOSEFROM                = 509 // { int closefrom(int lowfd); }
	SYS___SEMCTL                 = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); }
	SYS_MSGCTL                   = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); }
	SYS_SHMCTL                   = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); }
	SYS_LPATHCONF                = 513 // { int lpathconf(char *path, int name); }
	SYS___CAP_RIGHTS_GET         = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); }
	SYS_CAP_ENTER                = 516 // { int cap_enter(void); }
	SYS_CAP_GETMODE              = 517 // { int cap_getmode(u_int *modep); }
	SYS_PDFORK                   = 518 // { int pdfork(int *fdp, int flags); }
	SYS_PDKILL                   = 519 // { int pdkill(int fd, int signum); }
	SYS_PDGETPID                 = 520 // { int pdgetpid(int fd, pid_t *pidp); }
	SYS_PSELECT                  = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); }
	SYS_GETLOGINCLASS            = 523 // { int getloginclass(char *namebuf, size_t namelen); }
	SYS_SETLOGINCLASS            = 524 // { int setloginclass(const char *namebuf); }
	SYS_RCTL_GET_RACCT           = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
	SYS_RCTL_GET_RULES           = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
	SYS_RCTL_GET_LIMITS          = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
	SYS_RCTL_ADD_RULE            = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
	SYS_RCTL_REMOVE_RULE         = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
	SYS_POSIX_FALLOCATE          = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); }
	SYS_POSIX_FADVISE            = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); }
	SYS_WAIT6                    = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); }
	SYS_CAP_RIGHTS_LIMIT         = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); }
	SYS_CAP_IOCTLS_LIMIT         = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); }
	SYS_CAP_IOCTLS_GET           = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); }
	SYS_CAP_FCNTLS_LIMIT         = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); }
	SYS_CAP_FCNTLS_GET           = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); }
	SYS_BINDAT                   = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); }
	SYS_CONNECTAT                = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); }
	SYS_CHFLAGSAT                = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); }
	SYS_ACCEPT4                  = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); }
	SYS_PIPE2                    = 542 // { int pipe2(int *fildes, int flags); }
	SYS_AIO_MLOCK                = 543 // { int aio_mlock(struct aiocb *aiocbp); }
	SYS_PROCCTL                  = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); }
	SYS_PPOLL                    = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); }
	SYS_FUTIMENS                 = 546 // { int futimens(int fd, struct timespec *times); }
	SYS_UTIMENSAT                = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); }
	SYS_FDATASYNC                = 550 // { int fdatasync(int fd); }
	SYS_FSTAT                    = 551 // { int fstat(int fd, struct stat *sb); }
	SYS_FSTATAT                  = 552 // { int fstatat(int fd, char *path, struct stat *buf, int flag); }
	SYS_FHSTAT                   = 553 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); }
	SYS_GETDIRENTRIES            = 554 // { ssize_t getdirentries(int fd, char *buf, size_t count, off_t *basep); }
	SYS_STATFS                   = 555 // { int statfs(char *path, struct statfs *buf); }
	SYS_FSTATFS                  = 556 // { int fstatfs(int fd, struct statfs *buf); }
	SYS_GETFSSTAT                = 557 // { int getfsstat(struct statfs *buf, long bufsize, int mode); }
	SYS_FHSTATFS                 = 558 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); }
	SYS_MKNODAT                  = 559 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); }
	SYS_KEVENT                   = 560 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
	SYS_CPUSET_GETDOMAIN         = 561 // { int cpuset_getdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int *policy); }
	SYS_CPUSET_SETDOMAIN         = 562 // { int cpuset_setdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int policy); }
	SYS_GETRANDOM                = 563 // { int getrandom(void *buf, size_t buflen, unsigned int flags); }
	SYS_GETFHAT                  = 564 // { int getfhat(int fd, char *path, struct fhandle *fhp, int flags); }
	SYS_FHLINK                   = 565 // { int fhlink(struct fhandle *fhp, const char *to); }
	SYS_FHLINKAT                 = 566 // { int fhlinkat(struct fhandle *fhp, int tofd, const char *to,); }
	SYS_FHREADLINK               = 567 // { int fhreadlink(struct fhandle *fhp, char *buf, size_t bufsize); }
	SYS___SYSCTLBYNAME           = 570 // { int __sysctlbyname(const char *name, size_t namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }
	SYS_CLOSE_RANGE              = 575 // { int close_range(u_int lowfd, u_int highfd, int flags); }
)
  07070100000E8E000081A4000000000000000000000001645E367C00004544000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go // go run linux/mksysnum.go -Wall -Werror -static -I/tmp/386/include -m32 /tmp/386/include/asm/unistd.h
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build 386 && linux
// +build 386,linux

package unix

const (
	SYS_RESTART_SYSCALL              = 0
	SYS_EXIT                         = 1
	SYS_FORK                         = 2
	SYS_READ                         = 3
	SYS_WRITE                        = 4
	SYS_OPEN                         = 5
	SYS_CLOSE                        = 6
	SYS_WAITPID                      = 7
	SYS_CREAT                        = 8
	SYS_LINK                         = 9
	SYS_UNLINK                       = 10
	SYS_EXECVE                       = 11
	SYS_CHDIR                        = 12
	SYS_TIME                         = 13
	SYS_MKNOD                        = 14
	SYS_CHMOD                        = 15
	SYS_LCHOWN                       = 16
	SYS_BREAK                        = 17
	SYS_OLDSTAT                      = 18
	SYS_LSEEK                        = 19
	SYS_GETPID                       = 20
	SYS_MOUNT                        = 21
	SYS_UMOUNT                       = 22
	SYS_SETUID                       = 23
	SYS_GETUID                       = 24
	SYS_STIME                        = 25
	SYS_PTRACE                       = 26
	SYS_ALARM                        = 27
	SYS_OLDFSTAT                     = 28
	SYS_PAUSE                        = 29
	SYS_UTIME                        = 30
	SYS_STTY                         = 31
	SYS_GTTY                         = 32
	SYS_ACCESS                       = 33
	SYS_NICE                         = 34
	SYS_FTIME                        = 35
	SYS_SYNC                         = 36
	SYS_KILL                         = 37
	SYS_RENAME                       = 38
	SYS_MKDIR                        = 39
	SYS_RMDIR                        = 40
	SYS_DUP                          = 41
	SYS_PIPE                         = 42
	SYS_TIMES                        = 43
	SYS_PROF                         = 44
	SYS_BRK                          = 45
	SYS_SETGID                       = 46
	SYS_GETGID                       = 47
	SYS_SIGNAL                       = 48
	SYS_GETEUID                      = 49
	SYS_GETEGID                      = 50
	SYS_ACCT                         = 51
	SYS_UMOUNT2                      = 52
	SYS_LOCK                         = 53
	SYS_IOCTL                        = 54
	SYS_FCNTL                        = 55
	SYS_MPX                          = 56
	SYS_SETPGID                      = 57
	SYS_ULIMIT                       = 58
	SYS_OLDOLDUNAME                  = 59
	SYS_UMASK                        = 60
	SYS_CHROOT                       = 61
	SYS_USTAT                        = 62
	SYS_DUP2                         = 63
	SYS_GETPPID                      = 64
	SYS_GETPGRP                      = 65
	SYS_SETSID                       = 66
	SYS_SIGACTION                    = 67
	SYS_SGETMASK                     = 68
	SYS_SSETMASK                     = 69
	SYS_SETREUID                     = 70
	SYS_SETREGID                     = 71
	SYS_SIGSUSPEND                   = 72
	SYS_SIGPENDING                   = 73
	SYS_SETHOSTNAME                  = 74
	SYS_SETRLIMIT                    = 75
	SYS_GETRLIMIT                    = 76
	SYS_GETRUSAGE                    = 77
	SYS_GETTIMEOFDAY                 = 78
	SYS_SETTIMEOFDAY                 = 79
	SYS_GETGROUPS                    = 80
	SYS_SETGROUPS                    = 81
	SYS_SELECT                       = 82
	SYS_SYMLINK                      = 83
	SYS_OLDLSTAT                     = 84
	SYS_READLINK                     = 85
	SYS_USELIB                       = 86
	SYS_SWAPON                       = 87
	SYS_REBOOT                       = 88
	SYS_READDIR                      = 89
	SYS_MMAP                         = 90
	SYS_MUNMAP                       = 91
	SYS_TRUNCATE                     = 92
	SYS_FTRUNCATE                    = 93
	SYS_FCHMOD                       = 94
	SYS_FCHOWN                       = 95
	SYS_GETPRIORITY                  = 96
	SYS_SETPRIORITY                  = 97
	SYS_PROFIL                       = 98
	SYS_STATFS                       = 99
	SYS_FSTATFS                      = 100
	SYS_IOPERM                       = 101
	SYS_SOCKETCALL                   = 102
	SYS_SYSLOG                       = 103
	SYS_SETITIMER                    = 104
	SYS_GETITIMER                    = 105
	SYS_STAT                         = 106
	SYS_LSTAT                        = 107
	SYS_FSTAT                        = 108
	SYS_OLDUNAME                     = 109
	SYS_IOPL                         = 110
	SYS_VHANGUP                      = 111
	SYS_IDLE                         = 112
	SYS_VM86OLD                      = 113
	SYS_WAIT4                        = 114
	SYS_SWAPOFF                      = 115
	SYS_SYSINFO                      = 116
	SYS_IPC                          = 117
	SYS_FSYNC                        = 118
	SYS_SIGRETURN                    = 119
	SYS_CLONE                        = 120
	SYS_SETDOMAINNAME                = 121
	SYS_UNAME                        = 122
	SYS_MODIFY_LDT                   = 123
	SYS_ADJTIMEX                     = 124
	SYS_MPROTECT                     = 125
	SYS_SIGPROCMASK                  = 126
	SYS_CREATE_MODULE                = 127
	SYS_INIT_MODULE                  = 128
	SYS_DELETE_MODULE                = 129
	SYS_GET_KERNEL_SYMS              = 130
	SYS_QUOTACTL                     = 131
	SYS_GETPGID                      = 132
	SYS_FCHDIR                       = 133
	SYS_BDFLUSH                      = 134
	SYS_SYSFS                        = 135
	SYS_PERSONALITY                  = 136
	SYS_AFS_SYSCALL                  = 137
	SYS_SETFSUID                     = 138
	SYS_SETFSGID                     = 139
	SYS__LLSEEK                      = 140
	SYS_GETDENTS                     = 141
	SYS__NEWSELECT                   = 142
	SYS_FLOCK                        = 143
	SYS_MSYNC                        = 144
	SYS_READV                        = 145
	SYS_WRITEV                       = 146
	SYS_GETSID                       = 147
	SYS_FDATASYNC                    = 148
	SYS__SYSCTL                      = 149
	SYS_MLOCK                        = 150
	SYS_MUNLOCK                      = 151
	SYS_MLOCKALL                     = 152
	SYS_MUNLOCKALL                   = 153
	SYS_SCHED_SETPARAM               = 154
	SYS_SCHED_GETPARAM               = 155
	SYS_SCHED_SETSCHEDULER           = 156
	SYS_SCHED_GETSCHEDULER           = 157
	SYS_SCHED_YIELD                  = 158
	SYS_SCHED_GET_PRIORITY_MAX       = 159
	SYS_SCHED_GET_PRIORITY_MIN       = 160
	SYS_SCHED_RR_GET_INTERVAL        = 161
	SYS_NANOSLEEP                    = 162
	SYS_MREMAP                       = 163
	SYS_SETRESUID                    = 164
	SYS_GETRESUID                    = 165
	SYS_VM86                         = 166
	SYS_QUERY_MODULE                 = 167
	SYS_POLL                         = 168
	SYS_NFSSERVCTL                   = 169
	SYS_SETRESGID                    = 170
	SYS_GETRESGID                    = 171
	SYS_PRCTL                        = 172
	SYS_RT_SIGRETURN                 = 173
	SYS_RT_SIGACTION                 = 174
	SYS_RT_SIGPROCMASK               = 175
	SYS_RT_SIGPENDING                = 176
	SYS_RT_SIGTIMEDWAIT              = 177
	SYS_RT_SIGQUEUEINFO              = 178
	SYS_RT_SIGSUSPEND                = 179
	SYS_PREAD64                      = 180
	SYS_PWRITE64                     = 181
	SYS_CHOWN                        = 182
	SYS_GETCWD                       = 183
	SYS_CAPGET                       = 184
	SYS_CAPSET                       = 185
	SYS_SIGALTSTACK                  = 186
	SYS_SENDFILE                     = 187
	SYS_GETPMSG                      = 188
	SYS_PUTPMSG                      = 189
	SYS_VFORK                        = 190
	SYS_UGETRLIMIT                   = 191
	SYS_MMAP2                        = 192
	SYS_TRUNCATE64                   = 193
	SYS_FTRUNCATE64                  = 194
	SYS_STAT64                       = 195
	SYS_LSTAT64                      = 196
	SYS_FSTAT64                      = 197
	SYS_LCHOWN32                     = 198
	SYS_GETUID32                     = 199
	SYS_GETGID32                     = 200
	SYS_GETEUID32                    = 201
	SYS_GETEGID32                    = 202
	SYS_SETREUID32                   = 203
	SYS_SETREGID32                   = 204
	SYS_GETGROUPS32                  = 205
	SYS_SETGROUPS32                  = 206
	SYS_FCHOWN32                     = 207
	SYS_SETRESUID32                  = 208
	SYS_GETRESUID32                  = 209
	SYS_SETRESGID32                  = 210
	SYS_GETRESGID32                  = 211
	SYS_CHOWN32                      = 212
	SYS_SETUID32                     = 213
	SYS_SETGID32                     = 214
	SYS_SETFSUID32                   = 215
	SYS_SETFSGID32                   = 216
	SYS_PIVOT_ROOT                   = 217
	SYS_MINCORE                      = 218
	SYS_MADVISE                      = 219
	SYS_GETDENTS64                   = 220
	SYS_FCNTL64                      = 221
	SYS_GETTID                       = 224
	SYS_READAHEAD                    = 225
	SYS_SETXATTR                     = 226
	SYS_LSETXATTR                    = 227
	SYS_FSETXATTR                    = 228
	SYS_GETXATTR                     = 229
	SYS_LGETXATTR                    = 230
	SYS_FGETXATTR                    = 231
	SYS_LISTXATTR                    = 232
	SYS_LLISTXATTR                   = 233
	SYS_FLISTXATTR                   = 234
	SYS_REMOVEXATTR                  = 235
	SYS_LREMOVEXATTR                 = 236
	SYS_FREMOVEXATTR                 = 237
	SYS_TKILL                        = 238
	SYS_SENDFILE64                   = 239
	SYS_FUTEX                        = 240
	SYS_SCHED_SETAFFINITY            = 241
	SYS_SCHED_GETAFFINITY            = 242
	SYS_SET_THREAD_AREA              = 243
	SYS_GET_THREAD_AREA              = 244
	SYS_IO_SETUP                     = 245
	SYS_IO_DESTROY                   = 246
	SYS_IO_GETEVENTS                 = 247
	SYS_IO_SUBMIT                    = 248
	SYS_IO_CANCEL                    = 249
	SYS_FADVISE64                    = 250
	SYS_EXIT_GROUP                   = 252
	SYS_LOOKUP_DCOOKIE               = 253
	SYS_EPOLL_CREATE                 = 254
	SYS_EPOLL_CTL                    = 255
	SYS_EPOLL_WAIT                   = 256
	SYS_REMAP_FILE_PAGES             = 257
	SYS_SET_TID_ADDRESS              = 258
	SYS_TIMER_CREATE                 = 259
	SYS_TIMER_SETTIME                = 260
	SYS_TIMER_GETTIME                = 261
	SYS_TIMER_GETOVERRUN             = 262
	SYS_TIMER_DELETE                 = 263
	SYS_CLOCK_SETTIME                = 264
	SYS_CLOCK_GETTIME                = 265
	SYS_CLOCK_GETRES                 = 266
	SYS_CLOCK_NANOSLEEP              = 267
	SYS_STATFS64                     = 268
	SYS_FSTATFS64                    = 269
	SYS_TGKILL                       = 270
	SYS_UTIMES                       = 271
	SYS_FADVISE64_64                 = 272
	SYS_VSERVER                      = 273
	SYS_MBIND                        = 274
	SYS_GET_MEMPOLICY                = 275
	SYS_SET_MEMPOLICY                = 276
	SYS_MQ_OPEN                      = 277
	SYS_MQ_UNLINK                    = 278
	SYS_MQ_TIMEDSEND                 = 279
	SYS_MQ_TIMEDRECEIVE              = 280
	SYS_MQ_NOTIFY                    = 281
	SYS_MQ_GETSETATTR                = 282
	SYS_KEXEC_LOAD                   = 283
	SYS_WAITID                       = 284
	SYS_ADD_KEY                      = 286
	SYS_REQUEST_KEY                  = 287
	SYS_KEYCTL                       = 288
	SYS_IOPRIO_SET                   = 289
	SYS_IOPRIO_GET                   = 290
	SYS_INOTIFY_INIT                 = 291
	SYS_INOTIFY_ADD_WATCH            = 292
	SYS_INOTIFY_RM_WATCH             = 293
	SYS_MIGRATE_PAGES                = 294
	SYS_OPENAT                       = 295
	SYS_MKDIRAT                      = 296
	SYS_MKNODAT                      = 297
	SYS_FCHOWNAT                     = 298
	SYS_FUTIMESAT                    = 299
	SYS_FSTATAT64                    = 300
	SYS_UNLINKAT                     = 301
	SYS_RENAMEAT                     = 302
	SYS_LINKAT                       = 303
	SYS_SYMLINKAT                    = 304
	SYS_READLINKAT                   = 305
	SYS_FCHMODAT                     = 306
	SYS_FACCESSAT                    = 307
	SYS_PSELECT6                     = 308
	SYS_PPOLL                        = 309
	SYS_UNSHARE                      = 310
	SYS_SET_ROBUST_LIST              = 311
	SYS_GET_ROBUST_LIST              = 312
	SYS_SPLICE                       = 313
	SYS_SYNC_FILE_RANGE              = 314
	SYS_TEE                          = 315
	SYS_VMSPLICE                     = 316
	SYS_MOVE_PAGES                   = 317
	SYS_GETCPU                       = 318
	SYS_EPOLL_PWAIT                  = 319
	SYS_UTIMENSAT                    = 320
	SYS_SIGNALFD                     = 321
	SYS_TIMERFD_CREATE               = 322
	SYS_EVENTFD                      = 323
	SYS_FALLOCATE                    = 324
	SYS_TIMERFD_SETTIME              = 325
	SYS_TIMERFD_GETTIME              = 326
	SYS_SIGNALFD4                    = 327
	SYS_EVENTFD2                     = 328
	SYS_EPOLL_CREATE1                = 329
	SYS_DUP3                         = 330
	SYS_PIPE2                        = 331
	SYS_INOTIFY_INIT1                = 332
	SYS_PREADV                       = 333
	SYS_PWRITEV                      = 334
	SYS_RT_TGSIGQUEUEINFO            = 335
	SYS_PERF_EVENT_OPEN              = 336
	SYS_RECVMMSG                     = 337
	SYS_FANOTIFY_INIT                = 338
	SYS_FANOTIFY_MARK                = 339
	SYS_PRLIMIT64                    = 340
	SYS_NAME_TO_HANDLE_AT            = 341
	SYS_OPEN_BY_HANDLE_AT            = 342
	SYS_CLOCK_ADJTIME                = 343
	SYS_SYNCFS                       = 344
	SYS_SENDMMSG                     = 345
	SYS_SETNS                        = 346
	SYS_PROCESS_VM_READV             = 347
	SYS_PROCESS_VM_WRITEV            = 348
	SYS_KCMP                         = 349
	SYS_FINIT_MODULE                 = 350
	SYS_SCHED_SETATTR                = 351
	SYS_SCHED_GETATTR                = 352
	SYS_RENAMEAT2                    = 353
	SYS_SECCOMP                      = 354
	SYS_GETRANDOM                    = 355
	SYS_MEMFD_CREATE                 = 356
	SYS_BPF                          = 357
	SYS_EXECVEAT                     = 358
	SYS_SOCKET                       = 359
	SYS_SOCKETPAIR                   = 360
	SYS_BIND                         = 361
	SYS_CONNECT                      = 362
	SYS_LISTEN                       = 363
	SYS_ACCEPT4                      = 364
	SYS_GETSOCKOPT                   = 365
	SYS_SETSOCKOPT                   = 366
	SYS_GETSOCKNAME                  = 367
	SYS_GETPEERNAME                  = 368
	SYS_SENDTO                       = 369
	SYS_SENDMSG                      = 370
	SYS_RECVFROM                     = 371
	SYS_RECVMSG                      = 372
	SYS_SHUTDOWN                     = 373
	SYS_USERFAULTFD                  = 374
	SYS_MEMBARRIER                   = 375
	SYS_MLOCK2                       = 376
	SYS_COPY_FILE_RANGE              = 377
	SYS_PREADV2                      = 378
	SYS_PWRITEV2                     = 379
	SYS_PKEY_MPROTECT                = 380
	SYS_PKEY_ALLOC                   = 381
	SYS_PKEY_FREE                    = 382
	SYS_STATX                        = 383
	SYS_ARCH_PRCTL                   = 384
	SYS_IO_PGETEVENTS                = 385
	SYS_RSEQ                         = 386
	SYS_SEMGET                       = 393
	SYS_SEMCTL                       = 394
	SYS_SHMGET                       = 395
	SYS_SHMCTL                       = 396
	SYS_SHMAT                        = 397
	SYS_SHMDT                        = 398
	SYS_MSGGET                       = 399
	SYS_MSGSND                       = 400
	SYS_MSGRCV                       = 401
	SYS_MSGCTL                       = 402
	SYS_CLOCK_GETTIME64              = 403
	SYS_CLOCK_SETTIME64              = 404
	SYS_CLOCK_ADJTIME64              = 405
	SYS_CLOCK_GETRES_TIME64          = 406
	SYS_CLOCK_NANOSLEEP_TIME64       = 407
	SYS_TIMER_GETTIME64              = 408
	SYS_TIMER_SETTIME64              = 409
	SYS_TIMERFD_GETTIME64            = 410
	SYS_TIMERFD_SETTIME64            = 411
	SYS_UTIMENSAT_TIME64             = 412
	SYS_PSELECT6_TIME64              = 413
	SYS_PPOLL_TIME64                 = 414
	SYS_IO_PGETEVENTS_TIME64         = 416
	SYS_RECVMMSG_TIME64              = 417
	SYS_MQ_TIMEDSEND_TIME64          = 418
	SYS_MQ_TIMEDRECEIVE_TIME64       = 419
	SYS_SEMTIMEDOP_TIME64            = 420
	SYS_RT_SIGTIMEDWAIT_TIME64       = 421
	SYS_FUTEX_TIME64                 = 422
	SYS_SCHED_RR_GET_INTERVAL_TIME64 = 423
	SYS_PIDFD_SEND_SIGNAL            = 424
	SYS_IO_URING_SETUP               = 425
	SYS_IO_URING_ENTER               = 426
	SYS_IO_URING_REGISTER            = 427
	SYS_OPEN_TREE                    = 428
	SYS_MOVE_MOUNT                   = 429
	SYS_FSOPEN                       = 430
	SYS_FSCONFIG                     = 431
	SYS_FSMOUNT                      = 432
	SYS_FSPICK                       = 433
	SYS_PIDFD_OPEN                   = 434
	SYS_CLONE3                       = 435
	SYS_CLOSE_RANGE                  = 436
	SYS_OPENAT2                      = 437
	SYS_PIDFD_GETFD                  = 438
	SYS_FACCESSAT2                   = 439
	SYS_PROCESS_MADVISE              = 440
	SYS_EPOLL_PWAIT2                 = 441
	SYS_MOUNT_SETATTR                = 442
	SYS_QUOTACTL_FD                  = 443
	SYS_LANDLOCK_CREATE_RULESET      = 444
	SYS_LANDLOCK_ADD_RULE            = 445
	SYS_LANDLOCK_RESTRICT_SELF       = 446
	SYS_MEMFD_SECRET                 = 447
	SYS_PROCESS_MRELEASE             = 448
	SYS_FUTEX_WAITV                  = 449
	SYS_SET_MEMPOLICY_HOME_NODE      = 450
)
07070100000E8F000081A4000000000000000000000001645E367C0000320A000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go   // go run linux/mksysnum.go -Wall -Werror -static -I/tmp/amd64/include -m64 /tmp/amd64/include/asm/unistd.h
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build amd64 && linux
// +build amd64,linux

package unix

const (
	SYS_READ                    = 0
	SYS_WRITE                   = 1
	SYS_OPEN                    = 2
	SYS_CLOSE                   = 3
	SYS_STAT                    = 4
	SYS_FSTAT                   = 5
	SYS_LSTAT                   = 6
	SYS_POLL                    = 7
	SYS_LSEEK                   = 8
	SYS_MMAP                    = 9
	SYS_MPROTECT                = 10
	SYS_MUNMAP                  = 11
	SYS_BRK                     = 12
	SYS_RT_SIGACTION            = 13
	SYS_RT_SIGPROCMASK          = 14
	SYS_RT_SIGRETURN            = 15
	SYS_IOCTL                   = 16
	SYS_PREAD64                 = 17
	SYS_PWRITE64                = 18
	SYS_READV                   = 19
	SYS_WRITEV                  = 20
	SYS_ACCESS                  = 21
	SYS_PIPE                    = 22
	SYS_SELECT                  = 23
	SYS_SCHED_YIELD             = 24
	SYS_MREMAP                  = 25
	SYS_MSYNC                   = 26
	SYS_MINCORE                 = 27
	SYS_MADVISE                 = 28
	SYS_SHMGET                  = 29
	SYS_SHMAT                   = 30
	SYS_SHMCTL                  = 31
	SYS_DUP                     = 32
	SYS_DUP2                    = 33
	SYS_PAUSE                   = 34
	SYS_NANOSLEEP               = 35
	SYS_GETITIMER               = 36
	SYS_ALARM                   = 37
	SYS_SETITIMER               = 38
	SYS_GETPID                  = 39
	SYS_SENDFILE                = 40
	SYS_SOCKET                  = 41
	SYS_CONNECT                 = 42
	SYS_ACCEPT                  = 43
	SYS_SENDTO                  = 44
	SYS_RECVFROM                = 45
	SYS_SENDMSG                 = 46
	SYS_RECVMSG                 = 47
	SYS_SHUTDOWN                = 48
	SYS_BIND                    = 49
	SYS_LISTEN                  = 50
	SYS_GETSOCKNAME             = 51
	SYS_GETPEERNAME             = 52
	SYS_SOCKETPAIR              = 53
	SYS_SETSOCKOPT              = 54
	SYS_GETSOCKOPT              = 55
	SYS_CLONE                   = 56
	SYS_FORK                    = 57
	SYS_VFORK                   = 58
	SYS_EXECVE                  = 59
	SYS_EXIT                    = 60
	SYS_WAIT4                   = 61
	SYS_KILL                    = 62
	SYS_UNAME                   = 63
	SYS_SEMGET                  = 64
	SYS_SEMOP                   = 65
	SYS_SEMCTL                  = 66
	SYS_SHMDT                   = 67
	SYS_MSGGET                  = 68
	SYS_MSGSND                  = 69
	SYS_MSGRCV                  = 70
	SYS_MSGCTL                  = 71
	SYS_FCNTL                   = 72
	SYS_FLOCK                   = 73
	SYS_FSYNC                   = 74
	SYS_FDATASYNC               = 75
	SYS_TRUNCATE                = 76
	SYS_FTRUNCATE               = 77
	SYS_GETDENTS                = 78
	SYS_GETCWD                  = 79
	SYS_CHDIR                   = 80
	SYS_FCHDIR                  = 81
	SYS_RENAME                  = 82
	SYS_MKDIR                   = 83
	SYS_RMDIR                   = 84
	SYS_CREAT                   = 85
	SYS_LINK                    = 86
	SYS_UNLINK                  = 87
	SYS_SYMLINK                 = 88
	SYS_READLINK                = 89
	SYS_CHMOD                   = 90
	SYS_FCHMOD                  = 91
	SYS_CHOWN                   = 92
	SYS_FCHOWN                  = 93
	SYS_LCHOWN                  = 94
	SYS_UMASK                   = 95
	SYS_GETTIMEOFDAY            = 96
	SYS_GETRLIMIT               = 97
	SYS_GETRUSAGE               = 98
	SYS_SYSINFO                 = 99
	SYS_TIMES                   = 100
	SYS_PTRACE                  = 101
	SYS_GETUID                  = 102
	SYS_SYSLOG                  = 103
	SYS_GETGID                  = 104
	SYS_SETUID                  = 105
	SYS_SETGID                  = 106
	SYS_GETEUID                 = 107
	SYS_GETEGID                 = 108
	SYS_SETPGID                 = 109
	SYS_GETPPID                 = 110
	SYS_GETPGRP                 = 111
	SYS_SETSID                  = 112
	SYS_SETREUID                = 113
	SYS_SETREGID                = 114
	SYS_GETGROUPS               = 115
	SYS_SETGROUPS               = 116
	SYS_SETRESUID               = 117
	SYS_GETRESUID               = 118
	SYS_SETRESGID               = 119
	SYS_GETRESGID               = 120
	SYS_GETPGID                 = 121
	SYS_SETFSUID                = 122
	SYS_SETFSGID                = 123
	SYS_GETSID                  = 124
	SYS_CAPGET                  = 125
	SYS_CAPSET                  = 126
	SYS_RT_SIGPENDING           = 127
	SYS_RT_SIGTIMEDWAIT         = 128
	SYS_RT_SIGQUEUEINFO         = 129
	SYS_RT_SIGSUSPEND           = 130
	SYS_SIGALTSTACK             = 131
	SYS_UTIME                   = 132
	SYS_MKNOD                   = 133
	SYS_USELIB                  = 134
	SYS_PERSONALITY             = 135
	SYS_USTAT                   = 136
	SYS_STATFS                  = 137
	SYS_FSTATFS                 = 138
	SYS_SYSFS                   = 139
	SYS_GETPRIORITY             = 140
	SYS_SETPRIORITY             = 141
	SYS_SCHED_SETPARAM          = 142
	SYS_SCHED_GETPARAM          = 143
	SYS_SCHED_SETSCHEDULER      = 144
	SYS_SCHED_GETSCHEDULER      = 145
	SYS_SCHED_GET_PRIORITY_MAX  = 146
	SYS_SCHED_GET_PRIORITY_MIN  = 147
	SYS_SCHED_RR_GET_INTERVAL   = 148
	SYS_MLOCK                   = 149
	SYS_MUNLOCK                 = 150
	SYS_MLOCKALL                = 151
	SYS_MUNLOCKALL              = 152
	SYS_VHANGUP                 = 153
	SYS_MODIFY_LDT              = 154
	SYS_PIVOT_ROOT              = 155
	SYS__SYSCTL                 = 156
	SYS_PRCTL                   = 157
	SYS_ARCH_PRCTL              = 158
	SYS_ADJTIMEX                = 159
	SYS_SETRLIMIT               = 160
	SYS_CHROOT                  = 161
	SYS_SYNC                    = 162
	SYS_ACCT                    = 163
	SYS_SETTIMEOFDAY            = 164
	SYS_MOUNT                   = 165
	SYS_UMOUNT2                 = 166
	SYS_SWAPON                  = 167
	SYS_SWAPOFF                 = 168
	SYS_REBOOT                  = 169
	SYS_SETHOSTNAME             = 170
	SYS_SETDOMAINNAME           = 171
	SYS_IOPL                    = 172
	SYS_IOPERM                  = 173
	SYS_CREATE_MODULE           = 174
	SYS_INIT_MODULE             = 175
	SYS_DELETE_MODULE           = 176
	SYS_GET_KERNEL_SYMS         = 177
	SYS_QUERY_MODULE            = 178
	SYS_QUOTACTL                = 179
	SYS_NFSSERVCTL              = 180
	SYS_GETPMSG                 = 181
	SYS_PUTPMSG                 = 182
	SYS_AFS_SYSCALL             = 183
	SYS_TUXCALL                 = 184
	SYS_SECURITY                = 185
	SYS_GETTID                  = 186
	SYS_READAHEAD               = 187
	SYS_SETXATTR                = 188
	SYS_LSETXATTR               = 189
	SYS_FSETXATTR               = 190
	SYS_GETXATTR                = 191
	SYS_LGETXATTR               = 192
	SYS_FGETXATTR               = 193
	SYS_LISTXATTR               = 194
	SYS_LLISTXATTR              = 195
	SYS_FLISTXATTR              = 196
	SYS_REMOVEXATTR             = 197
	SYS_LREMOVEXATTR            = 198
	SYS_FREMOVEXATTR            = 199
	SYS_TKILL                   = 200
	SYS_TIME                    = 201
	SYS_FUTEX                   = 202
	SYS_SCHED_SETAFFINITY       = 203
	SYS_SCHED_GETAFFINITY       = 204
	SYS_SET_THREAD_AREA         = 205
	SYS_IO_SETUP                = 206
	SYS_IO_DESTROY              = 207
	SYS_IO_GETEVENTS            = 208
	SYS_IO_SUBMIT               = 209
	SYS_IO_CANCEL               = 210
	SYS_GET_THREAD_AREA         = 211
	SYS_LOOKUP_DCOOKIE          = 212
	SYS_EPOLL_CREATE            = 213
	SYS_EPOLL_CTL_OLD           = 214
	SYS_EPOLL_WAIT_OLD          = 215
	SYS_REMAP_FILE_PAGES        = 216
	SYS_GETDENTS64              = 217
	SYS_SET_TID_ADDRESS         = 218
	SYS_RESTART_SYSCALL         = 219
	SYS_SEMTIMEDOP              = 220
	SYS_FADVISE64               = 221
	SYS_TIMER_CREATE            = 222
	SYS_TIMER_SETTIME           = 223
	SYS_TIMER_GETTIME           = 224
	SYS_TIMER_GETOVERRUN        = 225
	SYS_TIMER_DELETE            = 226
	SYS_CLOCK_SETTIME           = 227
	SYS_CLOCK_GETTIME           = 228
	SYS_CLOCK_GETRES            = 229
	SYS_CLOCK_NANOSLEEP         = 230
	SYS_EXIT_GROUP              = 231
	SYS_EPOLL_WAIT              = 232
	SYS_EPOLL_CTL               = 233
	SYS_TGKILL                  = 234
	SYS_UTIMES                  = 235
	SYS_VSERVER                 = 236
	SYS_MBIND                   = 237
	SYS_SET_MEMPOLICY           = 238
	SYS_GET_MEMPOLICY           = 239
	SYS_MQ_OPEN                 = 240
	SYS_MQ_UNLINK               = 241
	SYS_MQ_TIMEDSEND            = 242
	SYS_MQ_TIMEDRECEIVE         = 243
	SYS_MQ_NOTIFY               = 244
	SYS_MQ_GETSETATTR           = 245
	SYS_KEXEC_LOAD              = 246
	SYS_WAITID                  = 247
	SYS_ADD_KEY                 = 248
	SYS_REQUEST_KEY             = 249
	SYS_KEYCTL                  = 250
	SYS_IOPRIO_SET              = 251
	SYS_IOPRIO_GET              = 252
	SYS_INOTIFY_INIT            = 253
	SYS_INOTIFY_ADD_WATCH       = 254
	SYS_INOTIFY_RM_WATCH        = 255
	SYS_MIGRATE_PAGES           = 256
	SYS_OPENAT                  = 257
	SYS_MKDIRAT                 = 258
	SYS_MKNODAT                 = 259
	SYS_FCHOWNAT                = 260
	SYS_FUTIMESAT               = 261
	SYS_NEWFSTATAT              = 262
	SYS_UNLINKAT                = 263
	SYS_RENAMEAT                = 264
	SYS_LINKAT                  = 265
	SYS_SYMLINKAT               = 266
	SYS_READLINKAT              = 267
	SYS_FCHMODAT                = 268
	SYS_FACCESSAT               = 269
	SYS_PSELECT6                = 270
	SYS_PPOLL                   = 271
	SYS_UNSHARE                 = 272
	SYS_SET_ROBUST_LIST         = 273
	SYS_GET_ROBUST_LIST         = 274
	SYS_SPLICE                  = 275
	SYS_TEE                     = 276
	SYS_SYNC_FILE_RANGE         = 277
	SYS_VMSPLICE                = 278
	SYS_MOVE_PAGES              = 279
	SYS_UTIMENSAT               = 280
	SYS_EPOLL_PWAIT             = 281
	SYS_SIGNALFD                = 282
	SYS_TIMERFD_CREATE          = 283
	SYS_EVENTFD                 = 284
	SYS_FALLOCATE               = 285
	SYS_TIMERFD_SETTIME         = 286
	SYS_TIMERFD_GETTIME         = 287
	SYS_ACCEPT4                 = 288
	SYS_SIGNALFD4               = 289
	SYS_EVENTFD2                = 290
	SYS_EPOLL_CREATE1           = 291
	SYS_DUP3                    = 292
	SYS_PIPE2                   = 293
	SYS_INOTIFY_INIT1           = 294
	SYS_PREADV                  = 295
	SYS_PWRITEV                 = 296
	SYS_RT_TGSIGQUEUEINFO       = 297
	SYS_PERF_EVENT_OPEN         = 298
	SYS_RECVMMSG                = 299
	SYS_FANOTIFY_INIT           = 300
	SYS_FANOTIFY_MARK           = 301
	SYS_PRLIMIT64               = 302
	SYS_NAME_TO_HANDLE_AT       = 303
	SYS_OPEN_BY_HANDLE_AT       = 304
	SYS_CLOCK_ADJTIME           = 305
	SYS_SYNCFS                  = 306
	SYS_SENDMMSG                = 307
	SYS_SETNS                   = 308
	SYS_GETCPU                  = 309
	SYS_PROCESS_VM_READV        = 310
	SYS_PROCESS_VM_WRITEV       = 311
	SYS_KCMP                    = 312
	SYS_FINIT_MODULE            = 313
	SYS_SCHED_SETATTR           = 314
	SYS_SCHED_GETATTR           = 315
	SYS_RENAMEAT2               = 316
	SYS_SECCOMP                 = 317
	SYS_GETRANDOM               = 318
	SYS_MEMFD_CREATE            = 319
	SYS_KEXEC_FILE_LOAD         = 320
	SYS_BPF                     = 321
	SYS_EXECVEAT                = 322
	SYS_USERFAULTFD             = 323
	SYS_MEMBARRIER              = 324
	SYS_MLOCK2                  = 325
	SYS_COPY_FILE_RANGE         = 326
	SYS_PREADV2                 = 327
	SYS_PWRITEV2                = 328
	SYS_PKEY_MPROTECT           = 329
	SYS_PKEY_ALLOC              = 330
	SYS_PKEY_FREE               = 331
	SYS_STATX                   = 332
	SYS_IO_PGETEVENTS           = 333
	SYS_RSEQ                    = 334
	SYS_PIDFD_SEND_SIGNAL       = 424
	SYS_IO_URING_SETUP          = 425
	SYS_IO_URING_ENTER          = 426
	SYS_IO_URING_REGISTER       = 427
	SYS_OPEN_TREE               = 428
	SYS_MOVE_MOUNT              = 429
	SYS_FSOPEN                  = 430
	SYS_FSCONFIG                = 431
	SYS_FSMOUNT                 = 432
	SYS_FSPICK                  = 433
	SYS_PIDFD_OPEN              = 434
	SYS_CLONE3                  = 435
	SYS_CLOSE_RANGE             = 436
	SYS_OPENAT2                 = 437
	SYS_PIDFD_GETFD             = 438
	SYS_FACCESSAT2              = 439
	SYS_PROCESS_MADVISE         = 440
	SYS_EPOLL_PWAIT2            = 441
	SYS_MOUNT_SETATTR           = 442
	SYS_QUOTACTL_FD             = 443
	SYS_LANDLOCK_CREATE_RULESET = 444
	SYS_LANDLOCK_ADD_RULE       = 445
	SYS_LANDLOCK_RESTRICT_SELF  = 446
	SYS_MEMFD_SECRET            = 447
	SYS_PROCESS_MRELEASE        = 448
	SYS_FUTEX_WAITV             = 449
	SYS_SET_MEMPOLICY_HOME_NODE = 450
)
  07070100000E90000081A4000000000000000000000001645E367C00003FB8000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go // go run linux/mksysnum.go -Wall -Werror -static -I/tmp/arm/include /tmp/arm/include/asm/unistd.h
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build arm && linux
// +build arm,linux

package unix

const (
	SYS_SYSCALL_MASK                 = 0
	SYS_RESTART_SYSCALL              = 0
	SYS_EXIT                         = 1
	SYS_FORK                         = 2
	SYS_READ                         = 3
	SYS_WRITE                        = 4
	SYS_OPEN                         = 5
	SYS_CLOSE                        = 6
	SYS_CREAT                        = 8
	SYS_LINK                         = 9
	SYS_UNLINK                       = 10
	SYS_EXECVE                       = 11
	SYS_CHDIR                        = 12
	SYS_MKNOD                        = 14
	SYS_CHMOD                        = 15
	SYS_LCHOWN                       = 16
	SYS_LSEEK                        = 19
	SYS_GETPID                       = 20
	SYS_MOUNT                        = 21
	SYS_SETUID                       = 23
	SYS_GETUID                       = 24
	SYS_PTRACE                       = 26
	SYS_PAUSE                        = 29
	SYS_ACCESS                       = 33
	SYS_NICE                         = 34
	SYS_SYNC                         = 36
	SYS_KILL                         = 37
	SYS_RENAME                       = 38
	SYS_MKDIR                        = 39
	SYS_RMDIR                        = 40
	SYS_DUP                          = 41
	SYS_PIPE                         = 42
	SYS_TIMES                        = 43
	SYS_BRK                          = 45
	SYS_SETGID                       = 46
	SYS_GETGID                       = 47
	SYS_GETEUID                      = 49
	SYS_GETEGID                      = 50
	SYS_ACCT                         = 51
	SYS_UMOUNT2                      = 52
	SYS_IOCTL                        = 54
	SYS_FCNTL                        = 55
	SYS_SETPGID                      = 57
	SYS_UMASK                        = 60
	SYS_CHROOT                       = 61
	SYS_USTAT                        = 62
	SYS_DUP2                         = 63
	SYS_GETPPID                      = 64
	SYS_GETPGRP                      = 65
	SYS_SETSID                       = 66
	SYS_SIGACTION                    = 67
	SYS_SETREUID                     = 70
	SYS_SETREGID                     = 71
	SYS_SIGSUSPEND                   = 72
	SYS_SIGPENDING                   = 73
	SYS_SETHOSTNAME                  = 74
	SYS_SETRLIMIT                    = 75
	SYS_GETRUSAGE                    = 77
	SYS_GETTIMEOFDAY                 = 78
	SYS_SETTIMEOFDAY                 = 79
	SYS_GETGROUPS                    = 80
	SYS_SETGROUPS                    = 81
	SYS_SYMLINK                      = 83
	SYS_READLINK                     = 85
	SYS_USELIB                       = 86
	SYS_SWAPON                       = 87
	SYS_REBOOT                       = 88
	SYS_MUNMAP                       = 91
	SYS_TRUNCATE                     = 92
	SYS_FTRUNCATE                    = 93
	SYS_FCHMOD                       = 94
	SYS_FCHOWN                       = 95
	SYS_GETPRIORITY                  = 96
	SYS_SETPRIORITY                  = 97
	SYS_STATFS                       = 99
	SYS_FSTATFS                      = 100
	SYS_SYSLOG                       = 103
	SYS_SETITIMER                    = 104
	SYS_GETITIMER                    = 105
	SYS_STAT                         = 106
	SYS_LSTAT                        = 107
	SYS_FSTAT                        = 108
	SYS_VHANGUP                      = 111
	SYS_WAIT4                        = 114
	SYS_SWAPOFF                      = 115
	SYS_SYSINFO                      = 116
	SYS_FSYNC                        = 118
	SYS_SIGRETURN                    = 119
	SYS_CLONE                        = 120
	SYS_SETDOMAINNAME                = 121
	SYS_UNAME                        = 122
	SYS_ADJTIMEX                     = 124
	SYS_MPROTECT                     = 125
	SYS_SIGPROCMASK                  = 126
	SYS_INIT_MODULE                  = 128
	SYS_DELETE_MODULE                = 129
	SYS_QUOTACTL                     = 131
	SYS_GETPGID                      = 132
	SYS_FCHDIR                       = 133
	SYS_BDFLUSH                      = 134
	SYS_SYSFS                        = 135
	SYS_PERSONALITY                  = 136
	SYS_SETFSUID                     = 138
	SYS_SETFSGID                     = 139
	SYS__LLSEEK                      = 140
	SYS_GETDENTS                     = 141
	SYS__NEWSELECT                   = 142
	SYS_FLOCK                        = 143
	SYS_MSYNC                        = 144
	SYS_READV                        = 145
	SYS_WRITEV                       = 146
	SYS_GETSID                       = 147
	SYS_FDATASYNC                    = 148
	SYS__SYSCTL                      = 149
	SYS_MLOCK                        = 150
	SYS_MUNLOCK                      = 151
	SYS_MLOCKALL                     = 152
	SYS_MUNLOCKALL                   = 153
	SYS_SCHED_SETPARAM               = 154
	SYS_SCHED_GETPARAM               = 155
	SYS_SCHED_SETSCHEDULER           = 156
	SYS_SCHED_GETSCHEDULER           = 157
	SYS_SCHED_YIELD                  = 158
	SYS_SCHED_GET_PRIORITY_MAX       = 159
	SYS_SCHED_GET_PRIORITY_MIN       = 160
	SYS_SCHED_RR_GET_INTERVAL        = 161
	SYS_NANOSLEEP                    = 162
	SYS_MREMAP                       = 163
	SYS_SETRESUID                    = 164
	SYS_GETRESUID                    = 165
	SYS_POLL                         = 168
	SYS_NFSSERVCTL                   = 169
	SYS_SETRESGID                    = 170
	SYS_GETRESGID                    = 171
	SYS_PRCTL                        = 172
	SYS_RT_SIGRETURN                 = 173
	SYS_RT_SIGACTION                 = 174
	SYS_RT_SIGPROCMASK               = 175
	SYS_RT_SIGPENDING                = 176
	SYS_RT_SIGTIMEDWAIT              = 177
	SYS_RT_SIGQUEUEINFO              = 178
	SYS_RT_SIGSUSPEND                = 179
	SYS_PREAD64                      = 180
	SYS_PWRITE64                     = 181
	SYS_CHOWN                        = 182
	SYS_GETCWD                       = 183
	SYS_CAPGET                       = 184
	SYS_CAPSET                       = 185
	SYS_SIGALTSTACK                  = 186
	SYS_SENDFILE                     = 187
	SYS_VFORK                        = 190
	SYS_UGETRLIMIT                   = 191
	SYS_MMAP2                        = 192
	SYS_TRUNCATE64                   = 193
	SYS_FTRUNCATE64                  = 194
	SYS_STAT64                       = 195
	SYS_LSTAT64                      = 196
	SYS_FSTAT64                      = 197
	SYS_LCHOWN32                     = 198
	SYS_GETUID32                     = 199
	SYS_GETGID32                     = 200
	SYS_GETEUID32                    = 201
	SYS_GETEGID32                    = 202
	SYS_SETREUID32                   = 203
	SYS_SETREGID32                   = 204
	SYS_GETGROUPS32                  = 205
	SYS_SETGROUPS32                  = 206
	SYS_FCHOWN32                     = 207
	SYS_SETRESUID32                  = 208
	SYS_GETRESUID32                  = 209
	SYS_SETRESGID32                  = 210
	SYS_GETRESGID32                  = 211
	SYS_CHOWN32                      = 212
	SYS_SETUID32                     = 213
	SYS_SETGID32                     = 214
	SYS_SETFSUID32                   = 215
	SYS_SETFSGID32                   = 216
	SYS_GETDENTS64                   = 217
	SYS_PIVOT_ROOT                   = 218
	SYS_MINCORE                      = 219
	SYS_MADVISE                      = 220
	SYS_FCNTL64                      = 221
	SYS_GETTID                       = 224
	SYS_READAHEAD                    = 225
	SYS_SETXATTR                     = 226
	SYS_LSETXATTR                    = 227
	SYS_FSETXATTR                    = 228
	SYS_GETXATTR                     = 229
	SYS_LGETXATTR                    = 230
	SYS_FGETXATTR                    = 231
	SYS_LISTXATTR                    = 232
	SYS_LLISTXATTR                   = 233
	SYS_FLISTXATTR                   = 234
	SYS_REMOVEXATTR                  = 235
	SYS_LREMOVEXATTR                 = 236
	SYS_FREMOVEXATTR                 = 237
	SYS_TKILL                        = 238
	SYS_SENDFILE64                   = 239
	SYS_FUTEX                        = 240
	SYS_SCHED_SETAFFINITY            = 241
	SYS_SCHED_GETAFFINITY            = 242
	SYS_IO_SETUP                     = 243
	SYS_IO_DESTROY                   = 244
	SYS_IO_GETEVENTS                 = 245
	SYS_IO_SUBMIT                    = 246
	SYS_IO_CANCEL                    = 247
	SYS_EXIT_GROUP                   = 248
	SYS_LOOKUP_DCOOKIE               = 249
	SYS_EPOLL_CREATE                 = 250
	SYS_EPOLL_CTL                    = 251
	SYS_EPOLL_WAIT                   = 252
	SYS_REMAP_FILE_PAGES             = 253
	SYS_SET_TID_ADDRESS              = 256
	SYS_TIMER_CREATE                 = 257
	SYS_TIMER_SETTIME                = 258
	SYS_TIMER_GETTIME                = 259
	SYS_TIMER_GETOVERRUN             = 260
	SYS_TIMER_DELETE                 = 261
	SYS_CLOCK_SETTIME                = 262
	SYS_CLOCK_GETTIME                = 263
	SYS_CLOCK_GETRES                 = 264
	SYS_CLOCK_NANOSLEEP              = 265
	SYS_STATFS64                     = 266
	SYS_FSTATFS64                    = 267
	SYS_TGKILL                       = 268
	SYS_UTIMES                       = 269
	SYS_ARM_FADVISE64_64             = 270
	SYS_PCICONFIG_IOBASE             = 271
	SYS_PCICONFIG_READ               = 272
	SYS_PCICONFIG_WRITE              = 273
	SYS_MQ_OPEN                      = 274
	SYS_MQ_UNLINK                    = 275
	SYS_MQ_TIMEDSEND                 = 276
	SYS_MQ_TIMEDRECEIVE              = 277
	SYS_MQ_NOTIFY                    = 278
	SYS_MQ_GETSETATTR                = 279
	SYS_WAITID                       = 280
	SYS_SOCKET                       = 281
	SYS_BIND                         = 282
	SYS_CONNECT                      = 283
	SYS_LISTEN                       = 284
	SYS_ACCEPT                       = 285
	SYS_GETSOCKNAME                  = 286
	SYS_GETPEERNAME                  = 287
	SYS_SOCKETPAIR                   = 288
	SYS_SEND                         = 289
	SYS_SENDTO                       = 290
	SYS_RECV                         = 291
	SYS_RECVFROM                     = 292
	SYS_SHUTDOWN                     = 293
	SYS_SETSOCKOPT                   = 294
	SYS_GETSOCKOPT                   = 295
	SYS_SENDMSG                      = 296
	SYS_RECVMSG                      = 297
	SYS_SEMOP                        = 298
	SYS_SEMGET                       = 299
	SYS_SEMCTL                       = 300
	SYS_MSGSND                       = 301
	SYS_MSGRCV                       = 302
	SYS_MSGGET                       = 303
	SYS_MSGCTL                       = 304
	SYS_SHMAT                        = 305
	SYS_SHMDT                        = 306
	SYS_SHMGET                       = 307
	SYS_SHMCTL                       = 308
	SYS_ADD_KEY                      = 309
	SYS_REQUEST_KEY                  = 310
	SYS_KEYCTL                       = 311
	SYS_SEMTIMEDOP                   = 312
	SYS_VSERVER                      = 313
	SYS_IOPRIO_SET                   = 314
	SYS_IOPRIO_GET                   = 315
	SYS_INOTIFY_INIT                 = 316
	SYS_INOTIFY_ADD_WATCH            = 317
	SYS_INOTIFY_RM_WATCH             = 318
	SYS_MBIND                        = 319
	SYS_GET_MEMPOLICY                = 320
	SYS_SET_MEMPOLICY                = 321
	SYS_OPENAT                       = 322
	SYS_MKDIRAT                      = 323
	SYS_MKNODAT                      = 324
	SYS_FCHOWNAT                     = 325
	SYS_FUTIMESAT                    = 326
	SYS_FSTATAT64                    = 327
	SYS_UNLINKAT                     = 328
	SYS_RENAMEAT                     = 329
	SYS_LINKAT                       = 330
	SYS_SYMLINKAT                    = 331
	SYS_READLINKAT                   = 332
	SYS_FCHMODAT                     = 333
	SYS_FACCESSAT                    = 334
	SYS_PSELECT6                     = 335
	SYS_PPOLL                        = 336
	SYS_UNSHARE                      = 337
	SYS_SET_ROBUST_LIST              = 338
	SYS_GET_ROBUST_LIST              = 339
	SYS_SPLICE                       = 340
	SYS_ARM_SYNC_FILE_RANGE          = 341
	SYS_TEE                          = 342
	SYS_VMSPLICE                     = 343
	SYS_MOVE_PAGES                   = 344
	SYS_GETCPU                       = 345
	SYS_EPOLL_PWAIT                  = 346
	SYS_KEXEC_LOAD                   = 347
	SYS_UTIMENSAT                    = 348
	SYS_SIGNALFD                     = 349
	SYS_TIMERFD_CREATE               = 350
	SYS_EVENTFD                      = 351
	SYS_FALLOCATE                    = 352
	SYS_TIMERFD_SETTIME              = 353
	SYS_TIMERFD_GETTIME              = 354
	SYS_SIGNALFD4                    = 355
	SYS_EVENTFD2                     = 356
	SYS_EPOLL_CREATE1                = 357
	SYS_DUP3                         = 358
	SYS_PIPE2                        = 359
	SYS_INOTIFY_INIT1                = 360
	SYS_PREADV                       = 361
	SYS_PWRITEV                      = 362
	SYS_RT_TGSIGQUEUEINFO            = 363
	SYS_PERF_EVENT_OPEN              = 364
	SYS_RECVMMSG                     = 365
	SYS_ACCEPT4                      = 366
	SYS_FANOTIFY_INIT                = 367
	SYS_FANOTIFY_MARK                = 368
	SYS_PRLIMIT64                    = 369
	SYS_NAME_TO_HANDLE_AT            = 370
	SYS_OPEN_BY_HANDLE_AT            = 371
	SYS_CLOCK_ADJTIME                = 372
	SYS_SYNCFS                       = 373
	SYS_SENDMMSG                     = 374
	SYS_SETNS                        = 375
	SYS_PROCESS_VM_READV             = 376
	SYS_PROCESS_VM_WRITEV            = 377
	SYS_KCMP                         = 378
	SYS_FINIT_MODULE                 = 379
	SYS_SCHED_SETATTR                = 380
	SYS_SCHED_GETATTR                = 381
	SYS_RENAMEAT2                    = 382
	SYS_SECCOMP                      = 383
	SYS_GETRANDOM                    = 384
	SYS_MEMFD_CREATE                 = 385
	SYS_BPF                          = 386
	SYS_EXECVEAT                     = 387
	SYS_USERFAULTFD                  = 388
	SYS_MEMBARRIER                   = 389
	SYS_MLOCK2                       = 390
	SYS_COPY_FILE_RANGE              = 391
	SYS_PREADV2                      = 392
	SYS_PWRITEV2                     = 393
	SYS_PKEY_MPROTECT                = 394
	SYS_PKEY_ALLOC                   = 395
	SYS_PKEY_FREE                    = 396
	SYS_STATX                        = 397
	SYS_RSEQ                         = 398
	SYS_IO_PGETEVENTS                = 399
	SYS_MIGRATE_PAGES                = 400
	SYS_KEXEC_FILE_LOAD              = 401
	SYS_CLOCK_GETTIME64              = 403
	SYS_CLOCK_SETTIME64              = 404
	SYS_CLOCK_ADJTIME64              = 405
	SYS_CLOCK_GETRES_TIME64          = 406
	SYS_CLOCK_NANOSLEEP_TIME64       = 407
	SYS_TIMER_GETTIME64              = 408
	SYS_TIMER_SETTIME64              = 409
	SYS_TIMERFD_GETTIME64            = 410
	SYS_TIMERFD_SETTIME64            = 411
	SYS_UTIMENSAT_TIME64             = 412
	SYS_PSELECT6_TIME64              = 413
	SYS_PPOLL_TIME64                 = 414
	SYS_IO_PGETEVENTS_TIME64         = 416
	SYS_RECVMMSG_TIME64              = 417
	SYS_MQ_TIMEDSEND_TIME64          = 418
	SYS_MQ_TIMEDRECEIVE_TIME64       = 419
	SYS_SEMTIMEDOP_TIME64            = 420
	SYS_RT_SIGTIMEDWAIT_TIME64       = 421
	SYS_FUTEX_TIME64                 = 422
	SYS_SCHED_RR_GET_INTERVAL_TIME64 = 423
	SYS_PIDFD_SEND_SIGNAL            = 424
	SYS_IO_URING_SETUP               = 425
	SYS_IO_URING_ENTER               = 426
	SYS_IO_URING_REGISTER            = 427
	SYS_OPEN_TREE                    = 428
	SYS_MOVE_MOUNT                   = 429
	SYS_FSOPEN                       = 430
	SYS_FSCONFIG                     = 431
	SYS_FSMOUNT                      = 432
	SYS_FSPICK                       = 433
	SYS_PIDFD_OPEN                   = 434
	SYS_CLONE3                       = 435
	SYS_CLOSE_RANGE                  = 436
	SYS_OPENAT2                      = 437
	SYS_PIDFD_GETFD                  = 438
	SYS_FACCESSAT2                   = 439
	SYS_PROCESS_MADVISE              = 440
	SYS_EPOLL_PWAIT2                 = 441
	SYS_MOUNT_SETATTR                = 442
	SYS_QUOTACTL_FD                  = 443
	SYS_LANDLOCK_CREATE_RULESET      = 444
	SYS_LANDLOCK_ADD_RULE            = 445
	SYS_LANDLOCK_RESTRICT_SELF       = 446
	SYS_PROCESS_MRELEASE             = 448
	SYS_FUTEX_WAITV                  = 449
	SYS_SET_MEMPOLICY_HOME_NODE      = 450
)
07070100000E91000081A4000000000000000000000001645E367C00002A8E000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go   // go run linux/mksysnum.go -Wall -Werror -static -I/tmp/arm64/include -fsigned-char /tmp/arm64/include/asm/unistd.h
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build arm64 && linux
// +build arm64,linux

package unix

const (
	SYS_IO_SETUP                = 0
	SYS_IO_DESTROY              = 1
	SYS_IO_SUBMIT               = 2
	SYS_IO_CANCEL               = 3
	SYS_IO_GETEVENTS            = 4
	SYS_SETXATTR                = 5
	SYS_LSETXATTR               = 6
	SYS_FSETXATTR               = 7
	SYS_GETXATTR                = 8
	SYS_LGETXATTR               = 9
	SYS_FGETXATTR               = 10
	SYS_LISTXATTR               = 11
	SYS_LLISTXATTR              = 12
	SYS_FLISTXATTR              = 13
	SYS_REMOVEXATTR             = 14
	SYS_LREMOVEXATTR            = 15
	SYS_FREMOVEXATTR            = 16
	SYS_GETCWD                  = 17
	SYS_LOOKUP_DCOOKIE          = 18
	SYS_EVENTFD2                = 19
	SYS_EPOLL_CREATE1           = 20
	SYS_EPOLL_CTL               = 21
	SYS_EPOLL_PWAIT             = 22
	SYS_DUP                     = 23
	SYS_DUP3                    = 24
	SYS_FCNTL                   = 25
	SYS_INOTIFY_INIT1           = 26
	SYS_INOTIFY_ADD_WATCH       = 27
	SYS_INOTIFY_RM_WATCH        = 28
	SYS_IOCTL                   = 29
	SYS_IOPRIO_SET              = 30
	SYS_IOPRIO_GET              = 31
	SYS_FLOCK                   = 32
	SYS_MKNODAT                 = 33
	SYS_MKDIRAT                 = 34
	SYS_UNLINKAT                = 35
	SYS_SYMLINKAT               = 36
	SYS_LINKAT                  = 37
	SYS_RENAMEAT                = 38
	SYS_UMOUNT2                 = 39
	SYS_MOUNT                   = 40
	SYS_PIVOT_ROOT              = 41
	SYS_NFSSERVCTL              = 42
	SYS_STATFS                  = 43
	SYS_FSTATFS                 = 44
	SYS_TRUNCATE                = 45
	SYS_FTRUNCATE               = 46
	SYS_FALLOCATE               = 47
	SYS_FACCESSAT               = 48
	SYS_CHDIR                   = 49
	SYS_FCHDIR                  = 50
	SYS_CHROOT                  = 51
	SYS_FCHMOD                  = 52
	SYS_FCHMODAT                = 53
	SYS_FCHOWNAT                = 54
	SYS_FCHOWN                  = 55
	SYS_OPENAT                  = 56
	SYS_CLOSE                   = 57
	SYS_VHANGUP                 = 58
	SYS_PIPE2                   = 59
	SYS_QUOTACTL                = 60
	SYS_GETDENTS64              = 61
	SYS_LSEEK                   = 62
	SYS_READ                    = 63
	SYS_WRITE                   = 64
	SYS_READV                   = 65
	SYS_WRITEV                  = 66
	SYS_PREAD64                 = 67
	SYS_PWRITE64                = 68
	SYS_PREADV                  = 69
	SYS_PWRITEV                 = 70
	SYS_SENDFILE                = 71
	SYS_PSELECT6                = 72
	SYS_PPOLL                   = 73
	SYS_SIGNALFD4               = 74
	SYS_VMSPLICE                = 75
	SYS_SPLICE                  = 76
	SYS_TEE                     = 77
	SYS_READLINKAT              = 78
	SYS_FSTATAT                 = 79
	SYS_FSTAT                   = 80
	SYS_SYNC                    = 81
	SYS_FSYNC                   = 82
	SYS_FDATASYNC               = 83
	SYS_SYNC_FILE_RANGE         = 84
	SYS_TIMERFD_CREATE          = 85
	SYS_TIMERFD_SETTIME         = 86
	SYS_TIMERFD_GETTIME         = 87
	SYS_UTIMENSAT               = 88
	SYS_ACCT                    = 89
	SYS_CAPGET                  = 90
	SYS_CAPSET                  = 91
	SYS_PERSONALITY             = 92
	SYS_EXIT                    = 93
	SYS_EXIT_GROUP              = 94
	SYS_WAITID                  = 95
	SYS_SET_TID_ADDRESS         = 96
	SYS_UNSHARE                 = 97
	SYS_FUTEX                   = 98
	SYS_SET_ROBUST_LIST         = 99
	SYS_GET_ROBUST_LIST         = 100
	SYS_NANOSLEEP               = 101
	SYS_GETITIMER               = 102
	SYS_SETITIMER               = 103
	SYS_KEXEC_LOAD              = 104
	SYS_INIT_MODULE             = 105
	SYS_DELETE_MODULE           = 106
	SYS_TIMER_CREATE            = 107
	SYS_TIMER_GETTIME           = 108
	SYS_TIMER_GETOVERRUN        = 109
	SYS_TIMER_SETTIME           = 110
	SYS_TIMER_DELETE            = 111
	SYS_CLOCK_SETTIME           = 112
	SYS_CLOCK_GETTIME           = 113
	SYS_CLOCK_GETRES            = 114
	SYS_CLOCK_NANOSLEEP         = 115
	SYS_SYSLOG                  = 116
	SYS_PTRACE                  = 117
	SYS_SCHED_SETPARAM          = 118
	SYS_SCHED_SETSCHEDULER      = 119
	SYS_SCHED_GETSCHEDULER      = 120
	SYS_SCHED_GETPARAM          = 121
	SYS_SCHED_SETAFFINITY       = 122
	SYS_SCHED_GETAFFINITY       = 123
	SYS_SCHED_YIELD             = 124
	SYS_SCHED_GET_PRIORITY_MAX  = 125
	SYS_SCHED_GET_PRIORITY_MIN  = 126
	SYS_SCHED_RR_GET_INTERVAL   = 127
	SYS_RESTART_SYSCALL         = 128
	SYS_KILL                    = 129
	SYS_TKILL                   = 130
	SYS_TGKILL                  = 131
	SYS_SIGALTSTACK             = 132
	SYS_RT_SIGSUSPEND           = 133
	SYS_RT_SIGACTION            = 134
	SYS_RT_SIGPROCMASK          = 135
	SYS_RT_SIGPENDING           = 136
	SYS_RT_SIGTIMEDWAIT         = 137
	SYS_RT_SIGQUEUEINFO         = 138
	SYS_RT_SIGRETURN            = 139
	SYS_SETPRIORITY             = 140
	SYS_GETPRIORITY             = 141
	SYS_REBOOT                  = 142
	SYS_SETREGID                = 143
	SYS_SETGID                  = 144
	SYS_SETREUID                = 145
	SYS_SETUID                  = 146
	SYS_SETRESUID               = 147
	SYS_GETRESUID               = 148
	SYS_SETRESGID               = 149
	SYS_GETRESGID               = 150
	SYS_SETFSUID                = 151
	SYS_SETFSGID                = 152
	SYS_TIMES                   = 153
	SYS_SETPGID                 = 154
	SYS_GETPGID                 = 155
	SYS_GETSID                  = 156
	SYS_SETSID                  = 157
	SYS_GETGROUPS               = 158
	SYS_SETGROUPS               = 159
	SYS_UNAME                   = 160
	SYS_SETHOSTNAME             = 161
	SYS_SETDOMAINNAME           = 162
	SYS_GETRLIMIT               = 163
	SYS_SETRLIMIT               = 164
	SYS_GETRUSAGE               = 165
	SYS_UMASK                   = 166
	SYS_PRCTL                   = 167
	SYS_GETCPU                  = 168
	SYS_GETTIMEOFDAY            = 169
	SYS_SETTIMEOFDAY            = 170
	SYS_ADJTIMEX                = 171
	SYS_GETPID                  = 172
	SYS_GETPPID                 = 173
	SYS_GETUID                  = 174
	SYS_GETEUID                 = 175
	SYS_GETGID                  = 176
	SYS_GETEGID                 = 177
	SYS_GETTID                  = 178
	SYS_SYSINFO                 = 179
	SYS_MQ_OPEN                 = 180
	SYS_MQ_UNLINK               = 181
	SYS_MQ_TIMEDSEND            = 182
	SYS_MQ_TIMEDRECEIVE         = 183
	SYS_MQ_NOTIFY               = 184
	SYS_MQ_GETSETATTR           = 185
	SYS_MSGGET                  = 186
	SYS_MSGCTL                  = 187
	SYS_MSGRCV                  = 188
	SYS_MSGSND                  = 189
	SYS_SEMGET                  = 190
	SYS_SEMCTL                  = 191
	SYS_SEMTIMEDOP              = 192
	SYS_SEMOP                   = 193
	SYS_SHMGET                  = 194
	SYS_SHMCTL                  = 195
	SYS_SHMAT                   = 196
	SYS_SHMDT                   = 197
	SYS_SOCKET                  = 198
	SYS_SOCKETPAIR              = 199
	SYS_BIND                    = 200
	SYS_LISTEN                  = 201
	SYS_ACCEPT                  = 202
	SYS_CONNECT                 = 203
	SYS_GETSOCKNAME             = 204
	SYS_GETPEERNAME             = 205
	SYS_SENDTO                  = 206
	SYS_RECVFROM                = 207
	SYS_SETSOCKOPT              = 208
	SYS_GETSOCKOPT              = 209
	SYS_SHUTDOWN                = 210
	SYS_SENDMSG                 = 211
	SYS_RECVMSG                 = 212
	SYS_READAHEAD               = 213
	SYS_BRK                     = 214
	SYS_MUNMAP                  = 215
	SYS_MREMAP                  = 216
	SYS_ADD_KEY                 = 217
	SYS_REQUEST_KEY             = 218
	SYS_KEYCTL                  = 219
	SYS_CLONE                   = 220
	SYS_EXECVE                  = 221
	SYS_MMAP                    = 222
	SYS_FADVISE64               = 223
	SYS_SWAPON                  = 224
	SYS_SWAPOFF                 = 225
	SYS_MPROTECT                = 226
	SYS_MSYNC                   = 227
	SYS_MLOCK                   = 228
	SYS_MUNLOCK                 = 229
	SYS_MLOCKALL                = 230
	SYS_MUNLOCKALL              = 231
	SYS_MINCORE                 = 232
	SYS_MADVISE                 = 233
	SYS_REMAP_FILE_PAGES        = 234
	SYS_MBIND                   = 235
	SYS_GET_MEMPOLICY           = 236
	SYS_SET_MEMPOLICY           = 237
	SYS_MIGRATE_PAGES           = 238
	SYS_MOVE_PAGES              = 239
	SYS_RT_TGSIGQUEUEINFO       = 240
	SYS_PERF_EVENT_OPEN         = 241
	SYS_ACCEPT4                 = 242
	SYS_RECVMMSG                = 243
	SYS_ARCH_SPECIFIC_SYSCALL   = 244
	SYS_WAIT4                   = 260
	SYS_PRLIMIT64               = 261
	SYS_FANOTIFY_INIT           = 262
	SYS_FANOTIFY_MARK           = 263
	SYS_NAME_TO_HANDLE_AT       = 264
	SYS_OPEN_BY_HANDLE_AT       = 265
	SYS_CLOCK_ADJTIME           = 266
	SYS_SYNCFS                  = 267
	SYS_SETNS                   = 268
	SYS_SENDMMSG                = 269
	SYS_PROCESS_VM_READV        = 270
	SYS_PROCESS_VM_WRITEV       = 271
	SYS_KCMP                    = 272
	SYS_FINIT_MODULE            = 273
	SYS_SCHED_SETATTR           = 274
	SYS_SCHED_GETATTR           = 275
	SYS_RENAMEAT2               = 276
	SYS_SECCOMP                 = 277
	SYS_GETRANDOM               = 278
	SYS_MEMFD_CREATE            = 279
	SYS_BPF                     = 280
	SYS_EXECVEAT                = 281
	SYS_USERFAULTFD             = 282
	SYS_MEMBARRIER              = 283
	SYS_MLOCK2                  = 284
	SYS_COPY_FILE_RANGE         = 285
	SYS_PREADV2                 = 286
	SYS_PWRITEV2                = 287
	SYS_PKEY_MPROTECT           = 288
	SYS_PKEY_ALLOC              = 289
	SYS_PKEY_FREE               = 290
	SYS_STATX                   = 291
	SYS_IO_PGETEVENTS           = 292
	SYS_RSEQ                    = 293
	SYS_KEXEC_FILE_LOAD         = 294
	SYS_PIDFD_SEND_SIGNAL       = 424
	SYS_IO_URING_SETUP          = 425
	SYS_IO_URING_ENTER          = 426
	SYS_IO_URING_REGISTER       = 427
	SYS_OPEN_TREE               = 428
	SYS_MOVE_MOUNT              = 429
	SYS_FSOPEN                  = 430
	SYS_FSCONFIG                = 431
	SYS_FSMOUNT                 = 432
	SYS_FSPICK                  = 433
	SYS_PIDFD_OPEN              = 434
	SYS_CLONE3                  = 435
	SYS_CLOSE_RANGE             = 436
	SYS_OPENAT2                 = 437
	SYS_PIDFD_GETFD             = 438
	SYS_FACCESSAT2              = 439
	SYS_PROCESS_MADVISE         = 440
	SYS_EPOLL_PWAIT2            = 441
	SYS_MOUNT_SETATTR           = 442
	SYS_QUOTACTL_FD             = 443
	SYS_LANDLOCK_CREATE_RULESET = 444
	SYS_LANDLOCK_ADD_RULE       = 445
	SYS_LANDLOCK_RESTRICT_SELF  = 446
	SYS_MEMFD_SECRET            = 447
	SYS_PROCESS_MRELEASE        = 448
	SYS_FUTEX_WAITV             = 449
	SYS_SET_MEMPOLICY_HOME_NODE = 450
)
  07070100000E92000081A4000000000000000000000001645E367C000029B9000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go // go run linux/mksysnum.go -Wall -Werror -static -I/tmp/loong64/include /tmp/loong64/include/asm/unistd.h
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build loong64 && linux
// +build loong64,linux

package unix

const (
	SYS_IO_SETUP                = 0
	SYS_IO_DESTROY              = 1
	SYS_IO_SUBMIT               = 2
	SYS_IO_CANCEL               = 3
	SYS_IO_GETEVENTS            = 4
	SYS_SETXATTR                = 5
	SYS_LSETXATTR               = 6
	SYS_FSETXATTR               = 7
	SYS_GETXATTR                = 8
	SYS_LGETXATTR               = 9
	SYS_FGETXATTR               = 10
	SYS_LISTXATTR               = 11
	SYS_LLISTXATTR              = 12
	SYS_FLISTXATTR              = 13
	SYS_REMOVEXATTR             = 14
	SYS_LREMOVEXATTR            = 15
	SYS_FREMOVEXATTR            = 16
	SYS_GETCWD                  = 17
	SYS_LOOKUP_DCOOKIE          = 18
	SYS_EVENTFD2                = 19
	SYS_EPOLL_CREATE1           = 20
	SYS_EPOLL_CTL               = 21
	SYS_EPOLL_PWAIT             = 22
	SYS_DUP                     = 23
	SYS_DUP3                    = 24
	SYS_FCNTL                   = 25
	SYS_INOTIFY_INIT1           = 26
	SYS_INOTIFY_ADD_WATCH       = 27
	SYS_INOTIFY_RM_WATCH        = 28
	SYS_IOCTL                   = 29
	SYS_IOPRIO_SET              = 30
	SYS_IOPRIO_GET              = 31
	SYS_FLOCK                   = 32
	SYS_MKNODAT                 = 33
	SYS_MKDIRAT                 = 34
	SYS_UNLINKAT                = 35
	SYS_SYMLINKAT               = 36
	SYS_LINKAT                  = 37
	SYS_UMOUNT2                 = 39
	SYS_MOUNT                   = 40
	SYS_PIVOT_ROOT              = 41
	SYS_NFSSERVCTL              = 42
	SYS_STATFS                  = 43
	SYS_FSTATFS                 = 44
	SYS_TRUNCATE                = 45
	SYS_FTRUNCATE               = 46
	SYS_FALLOCATE               = 47
	SYS_FACCESSAT               = 48
	SYS_CHDIR                   = 49
	SYS_FCHDIR                  = 50
	SYS_CHROOT                  = 51
	SYS_FCHMOD                  = 52
	SYS_FCHMODAT                = 53
	SYS_FCHOWNAT                = 54
	SYS_FCHOWN                  = 55
	SYS_OPENAT                  = 56
	SYS_CLOSE                   = 57
	SYS_VHANGUP                 = 58
	SYS_PIPE2                   = 59
	SYS_QUOTACTL                = 60
	SYS_GETDENTS64              = 61
	SYS_LSEEK                   = 62
	SYS_READ                    = 63
	SYS_WRITE                   = 64
	SYS_READV                   = 65
	SYS_WRITEV                  = 66
	SYS_PREAD64                 = 67
	SYS_PWRITE64                = 68
	SYS_PREADV                  = 69
	SYS_PWRITEV                 = 70
	SYS_SENDFILE                = 71
	SYS_PSELECT6                = 72
	SYS_PPOLL                   = 73
	SYS_SIGNALFD4               = 74
	SYS_VMSPLICE                = 75
	SYS_SPLICE                  = 76
	SYS_TEE                     = 77
	SYS_READLINKAT              = 78
	SYS_SYNC                    = 81
	SYS_FSYNC                   = 82
	SYS_FDATASYNC               = 83
	SYS_SYNC_FILE_RANGE         = 84
	SYS_TIMERFD_CREATE          = 85
	SYS_TIMERFD_SETTIME         = 86
	SYS_TIMERFD_GETTIME         = 87
	SYS_UTIMENSAT               = 88
	SYS_ACCT                    = 89
	SYS_CAPGET                  = 90
	SYS_CAPSET                  = 91
	SYS_PERSONALITY             = 92
	SYS_EXIT                    = 93
	SYS_EXIT_GROUP              = 94
	SYS_WAITID                  = 95
	SYS_SET_TID_ADDRESS         = 96
	SYS_UNSHARE                 = 97
	SYS_FUTEX                   = 98
	SYS_SET_ROBUST_LIST         = 99
	SYS_GET_ROBUST_LIST         = 100
	SYS_NANOSLEEP               = 101
	SYS_GETITIMER               = 102
	SYS_SETITIMER               = 103
	SYS_KEXEC_LOAD              = 104
	SYS_INIT_MODULE             = 105
	SYS_DELETE_MODULE           = 106
	SYS_TIMER_CREATE            = 107
	SYS_TIMER_GETTIME           = 108
	SYS_TIMER_GETOVERRUN        = 109
	SYS_TIMER_SETTIME           = 110
	SYS_TIMER_DELETE            = 111
	SYS_CLOCK_SETTIME           = 112
	SYS_CLOCK_GETTIME           = 113
	SYS_CLOCK_GETRES            = 114
	SYS_CLOCK_NANOSLEEP         = 115
	SYS_SYSLOG                  = 116
	SYS_PTRACE                  = 117
	SYS_SCHED_SETPARAM          = 118
	SYS_SCHED_SETSCHEDULER      = 119
	SYS_SCHED_GETSCHEDULER      = 120
	SYS_SCHED_GETPARAM          = 121
	SYS_SCHED_SETAFFINITY       = 122
	SYS_SCHED_GETAFFINITY       = 123
	SYS_SCHED_YIELD             = 124
	SYS_SCHED_GET_PRIORITY_MAX  = 125
	SYS_SCHED_GET_PRIORITY_MIN  = 126
	SYS_SCHED_RR_GET_INTERVAL   = 127
	SYS_RESTART_SYSCALL         = 128
	SYS_KILL                    = 129
	SYS_TKILL                   = 130
	SYS_TGKILL                  = 131
	SYS_SIGALTSTACK             = 132
	SYS_RT_SIGSUSPEND           = 133
	SYS_RT_SIGACTION            = 134
	SYS_RT_SIGPROCMASK          = 135
	SYS_RT_SIGPENDING           = 136
	SYS_RT_SIGTIMEDWAIT         = 137
	SYS_RT_SIGQUEUEINFO         = 138
	SYS_RT_SIGRETURN            = 139
	SYS_SETPRIORITY             = 140
	SYS_GETPRIORITY             = 141
	SYS_REBOOT                  = 142
	SYS_SETREGID                = 143
	SYS_SETGID                  = 144
	SYS_SETREUID                = 145
	SYS_SETUID                  = 146
	SYS_SETRESUID               = 147
	SYS_GETRESUID               = 148
	SYS_SETRESGID               = 149
	SYS_GETRESGID               = 150
	SYS_SETFSUID                = 151
	SYS_SETFSGID                = 152
	SYS_TIMES                   = 153
	SYS_SETPGID                 = 154
	SYS_GETPGID                 = 155
	SYS_GETSID                  = 156
	SYS_SETSID                  = 157
	SYS_GETGROUPS               = 158
	SYS_SETGROUPS               = 159
	SYS_UNAME                   = 160
	SYS_SETHOSTNAME             = 161
	SYS_SETDOMAINNAME           = 162
	SYS_GETRUSAGE               = 165
	SYS_UMASK                   = 166
	SYS_PRCTL                   = 167
	SYS_GETCPU                  = 168
	SYS_GETTIMEOFDAY            = 169
	SYS_SETTIMEOFDAY            = 170
	SYS_ADJTIMEX                = 171
	SYS_GETPID                  = 172
	SYS_GETPPID                 = 173
	SYS_GETUID                  = 174
	SYS_GETEUID                 = 175
	SYS_GETGID                  = 176
	SYS_GETEGID                 = 177
	SYS_GETTID                  = 178
	SYS_SYSINFO                 = 179
	SYS_MQ_OPEN                 = 180
	SYS_MQ_UNLINK               = 181
	SYS_MQ_TIMEDSEND            = 182
	SYS_MQ_TIMEDRECEIVE         = 183
	SYS_MQ_NOTIFY               = 184
	SYS_MQ_GETSETATTR           = 185
	SYS_MSGGET                  = 186
	SYS_MSGCTL                  = 187
	SYS_MSGRCV                  = 188
	SYS_MSGSND                  = 189
	SYS_SEMGET                  = 190
	SYS_SEMCTL                  = 191
	SYS_SEMTIMEDOP              = 192
	SYS_SEMOP                   = 193
	SYS_SHMGET                  = 194
	SYS_SHMCTL                  = 195
	SYS_SHMAT                   = 196
	SYS_SHMDT                   = 197
	SYS_SOCKET                  = 198
	SYS_SOCKETPAIR              = 199
	SYS_BIND                    = 200
	SYS_LISTEN                  = 201
	SYS_ACCEPT                  = 202
	SYS_CONNECT                 = 203
	SYS_GETSOCKNAME             = 204
	SYS_GETPEERNAME             = 205
	SYS_SENDTO                  = 206
	SYS_RECVFROM                = 207
	SYS_SETSOCKOPT              = 208
	SYS_GETSOCKOPT              = 209
	SYS_SHUTDOWN                = 210
	SYS_SENDMSG                 = 211
	SYS_RECVMSG                 = 212
	SYS_READAHEAD               = 213
	SYS_BRK                     = 214
	SYS_MUNMAP                  = 215
	SYS_MREMAP                  = 216
	SYS_ADD_KEY                 = 217
	SYS_REQUEST_KEY             = 218
	SYS_KEYCTL                  = 219
	SYS_CLONE                   = 220
	SYS_EXECVE                  = 221
	SYS_MMAP                    = 222
	SYS_FADVISE64               = 223
	SYS_SWAPON                  = 224
	SYS_SWAPOFF                 = 225
	SYS_MPROTECT                = 226
	SYS_MSYNC                   = 227
	SYS_MLOCK                   = 228
	SYS_MUNLOCK                 = 229
	SYS_MLOCKALL                = 230
	SYS_MUNLOCKALL              = 231
	SYS_MINCORE                 = 232
	SYS_MADVISE                 = 233
	SYS_REMAP_FILE_PAGES        = 234
	SYS_MBIND                   = 235
	SYS_GET_MEMPOLICY           = 236
	SYS_SET_MEMPOLICY           = 237
	SYS_MIGRATE_PAGES           = 238
	SYS_MOVE_PAGES              = 239
	SYS_RT_TGSIGQUEUEINFO       = 240
	SYS_PERF_EVENT_OPEN         = 241
	SYS_ACCEPT4                 = 242
	SYS_RECVMMSG                = 243
	SYS_ARCH_SPECIFIC_SYSCALL   = 244
	SYS_WAIT4                   = 260
	SYS_PRLIMIT64               = 261
	SYS_FANOTIFY_INIT           = 262
	SYS_FANOTIFY_MARK           = 263
	SYS_NAME_TO_HANDLE_AT       = 264
	SYS_OPEN_BY_HANDLE_AT       = 265
	SYS_CLOCK_ADJTIME           = 266
	SYS_SYNCFS                  = 267
	SYS_SETNS                   = 268
	SYS_SENDMMSG                = 269
	SYS_PROCESS_VM_READV        = 270
	SYS_PROCESS_VM_WRITEV       = 271
	SYS_KCMP                    = 272
	SYS_FINIT_MODULE            = 273
	SYS_SCHED_SETATTR           = 274
	SYS_SCHED_GETATTR           = 275
	SYS_RENAMEAT2               = 276
	SYS_SECCOMP                 = 277
	SYS_GETRANDOM               = 278
	SYS_MEMFD_CREATE            = 279
	SYS_BPF                     = 280
	SYS_EXECVEAT                = 281
	SYS_USERFAULTFD             = 282
	SYS_MEMBARRIER              = 283
	SYS_MLOCK2                  = 284
	SYS_COPY_FILE_RANGE         = 285
	SYS_PREADV2                 = 286
	SYS_PWRITEV2                = 287
	SYS_PKEY_MPROTECT           = 288
	SYS_PKEY_ALLOC              = 289
	SYS_PKEY_FREE               = 290
	SYS_STATX                   = 291
	SYS_IO_PGETEVENTS           = 292
	SYS_RSEQ                    = 293
	SYS_KEXEC_FILE_LOAD         = 294
	SYS_PIDFD_SEND_SIGNAL       = 424
	SYS_IO_URING_SETUP          = 425
	SYS_IO_URING_ENTER          = 426
	SYS_IO_URING_REGISTER       = 427
	SYS_OPEN_TREE               = 428
	SYS_MOVE_MOUNT              = 429
	SYS_FSOPEN                  = 430
	SYS_FSCONFIG                = 431
	SYS_FSMOUNT                 = 432
	SYS_FSPICK                  = 433
	SYS_PIDFD_OPEN              = 434
	SYS_CLONE3                  = 435
	SYS_CLOSE_RANGE             = 436
	SYS_OPENAT2                 = 437
	SYS_PIDFD_GETFD             = 438
	SYS_FACCESSAT2              = 439
	SYS_PROCESS_MADVISE         = 440
	SYS_EPOLL_PWAIT2            = 441
	SYS_MOUNT_SETATTR           = 442
	SYS_QUOTACTL_FD             = 443
	SYS_LANDLOCK_CREATE_RULESET = 444
	SYS_LANDLOCK_ADD_RULE       = 445
	SYS_LANDLOCK_RESTRICT_SELF  = 446
	SYS_PROCESS_MRELEASE        = 448
	SYS_FUTEX_WAITV             = 449
	SYS_SET_MEMPOLICY_HOME_NODE = 450
)
   07070100000E93000081A4000000000000000000000001645E367C000044D9000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go    // go run linux/mksysnum.go -Wall -Werror -static -I/tmp/mips/include /tmp/mips/include/asm/unistd.h
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build mips && linux
// +build mips,linux

package unix

const (
	SYS_SYSCALL                      = 4000
	SYS_EXIT                         = 4001
	SYS_FORK                         = 4002
	SYS_READ                         = 4003
	SYS_WRITE                        = 4004
	SYS_OPEN                         = 4005
	SYS_CLOSE                        = 4006
	SYS_WAITPID                      = 4007
	SYS_CREAT                        = 4008
	SYS_LINK                         = 4009
	SYS_UNLINK                       = 4010
	SYS_EXECVE                       = 4011
	SYS_CHDIR                        = 4012
	SYS_TIME                         = 4013
	SYS_MKNOD                        = 4014
	SYS_CHMOD                        = 4015
	SYS_LCHOWN                       = 4016
	SYS_BREAK                        = 4017
	SYS_UNUSED18                     = 4018
	SYS_LSEEK                        = 4019
	SYS_GETPID                       = 4020
	SYS_MOUNT                        = 4021
	SYS_UMOUNT                       = 4022
	SYS_SETUID                       = 4023
	SYS_GETUID                       = 4024
	SYS_STIME                        = 4025
	SYS_PTRACE                       = 4026
	SYS_ALARM                        = 4027
	SYS_UNUSED28                     = 4028
	SYS_PAUSE                        = 4029
	SYS_UTIME                        = 4030
	SYS_STTY                         = 4031
	SYS_GTTY                         = 4032
	SYS_ACCESS                       = 4033
	SYS_NICE                         = 4034
	SYS_FTIME                        = 4035
	SYS_SYNC                         = 4036
	SYS_KILL                         = 4037
	SYS_RENAME                       = 4038
	SYS_MKDIR                        = 4039
	SYS_RMDIR                        = 4040
	SYS_DUP                          = 4041
	SYS_PIPE                         = 4042
	SYS_TIMES                        = 4043
	SYS_PROF                         = 4044
	SYS_BRK                          = 4045
	SYS_SETGID                       = 4046
	SYS_GETGID                       = 4047
	SYS_SIGNAL                       = 4048
	SYS_GETEUID                      = 4049
	SYS_GETEGID                      = 4050
	SYS_ACCT                         = 4051
	SYS_UMOUNT2                      = 4052
	SYS_LOCK                         = 4053
	SYS_IOCTL                        = 4054
	SYS_FCNTL                        = 4055
	SYS_MPX                          = 4056
	SYS_SETPGID                      = 4057
	SYS_ULIMIT                       = 4058
	SYS_UNUSED59                     = 4059
	SYS_UMASK                        = 4060
	SYS_CHROOT                       = 4061
	SYS_USTAT                        = 4062
	SYS_DUP2                         = 4063
	SYS_GETPPID                      = 4064
	SYS_GETPGRP                      = 4065
	SYS_SETSID                       = 4066
	SYS_SIGACTION                    = 4067
	SYS_SGETMASK                     = 4068
	SYS_SSETMASK                     = 4069
	SYS_SETREUID                     = 4070
	SYS_SETREGID                     = 4071
	SYS_SIGSUSPEND                   = 4072
	SYS_SIGPENDING                   = 4073
	SYS_SETHOSTNAME                  = 4074
	SYS_SETRLIMIT                    = 4075
	SYS_GETRLIMIT                    = 4076
	SYS_GETRUSAGE                    = 4077
	SYS_GETTIMEOFDAY                 = 4078
	SYS_SETTIMEOFDAY                 = 4079
	SYS_GETGROUPS                    = 4080
	SYS_SETGROUPS                    = 4081
	SYS_RESERVED82                   = 4082
	SYS_SYMLINK                      = 4083
	SYS_UNUSED84                     = 4084
	SYS_READLINK                     = 4085
	SYS_USELIB                       = 4086
	SYS_SWAPON                       = 4087
	SYS_REBOOT                       = 4088
	SYS_READDIR                      = 4089
	SYS_MMAP                         = 4090
	SYS_MUNMAP                       = 4091
	SYS_TRUNCATE                     = 4092
	SYS_FTRUNCATE                    = 4093
	SYS_FCHMOD                       = 4094
	SYS_FCHOWN                       = 4095
	SYS_GETPRIORITY                  = 4096
	SYS_SETPRIORITY                  = 4097
	SYS_PROFIL                       = 4098
	SYS_STATFS                       = 4099
	SYS_FSTATFS                      = 4100
	SYS_IOPERM                       = 4101
	SYS_SOCKETCALL                   = 4102
	SYS_SYSLOG                       = 4103
	SYS_SETITIMER                    = 4104
	SYS_GETITIMER                    = 4105
	SYS_STAT                         = 4106
	SYS_LSTAT                        = 4107
	SYS_FSTAT                        = 4108
	SYS_UNUSED109                    = 4109
	SYS_IOPL                         = 4110
	SYS_VHANGUP                      = 4111
	SYS_IDLE                         = 4112
	SYS_VM86                         = 4113
	SYS_WAIT4                        = 4114
	SYS_SWAPOFF                      = 4115
	SYS_SYSINFO                      = 4116
	SYS_IPC                          = 4117
	SYS_FSYNC                        = 4118
	SYS_SIGRETURN                    = 4119
	SYS_CLONE                        = 4120
	SYS_SETDOMAINNAME                = 4121
	SYS_UNAME                        = 4122
	SYS_MODIFY_LDT                   = 4123
	SYS_ADJTIMEX                     = 4124
	SYS_MPROTECT                     = 4125
	SYS_SIGPROCMASK                  = 4126
	SYS_CREATE_MODULE                = 4127
	SYS_INIT_MODULE                  = 4128
	SYS_DELETE_MODULE                = 4129
	SYS_GET_KERNEL_SYMS              = 4130
	SYS_QUOTACTL                     = 4131
	SYS_GETPGID                      = 4132
	SYS_FCHDIR                       = 4133
	SYS_BDFLUSH                      = 4134
	SYS_SYSFS                        = 4135
	SYS_PERSONALITY                  = 4136
	SYS_AFS_SYSCALL                  = 4137
	SYS_SETFSUID                     = 4138
	SYS_SETFSGID                     = 4139
	SYS__LLSEEK                      = 4140
	SYS_GETDENTS                     = 4141
	SYS__NEWSELECT                   = 4142
	SYS_FLOCK                        = 4143
	SYS_MSYNC                        = 4144
	SYS_READV                        = 4145
	SYS_WRITEV                       = 4146
	SYS_CACHEFLUSH                   = 4147
	SYS_CACHECTL                     = 4148
	SYS_SYSMIPS                      = 4149
	SYS_UNUSED150                    = 4150
	SYS_GETSID                       = 4151
	SYS_FDATASYNC                    = 4152
	SYS__SYSCTL                      = 4153
	SYS_MLOCK                        = 4154
	SYS_MUNLOCK                      = 4155
	SYS_MLOCKALL                     = 4156
	SYS_MUNLOCKALL                   = 4157
	SYS_SCHED_SETPARAM               = 4158
	SYS_SCHED_GETPARAM               = 4159
	SYS_SCHED_SETSCHEDULER           = 4160
	SYS_SCHED_GETSCHEDULER           = 4161
	SYS_SCHED_YIELD                  = 4162
	SYS_SCHED_GET_PRIORITY_MAX       = 4163
	SYS_SCHED_GET_PRIORITY_MIN       = 4164
	SYS_SCHED_RR_GET_INTERVAL        = 4165
	SYS_NANOSLEEP                    = 4166
	SYS_MREMAP                       = 4167
	SYS_ACCEPT                       = 4168
	SYS_BIND                         = 4169
	SYS_CONNECT                      = 4170
	SYS_GETPEERNAME                  = 4171
	SYS_GETSOCKNAME                  = 4172
	SYS_GETSOCKOPT                   = 4173
	SYS_LISTEN                       = 4174
	SYS_RECV                         = 4175
	SYS_RECVFROM                     = 4176
	SYS_RECVMSG                      = 4177
	SYS_SEND                         = 4178
	SYS_SENDMSG                      = 4179
	SYS_SENDTO                       = 4180
	SYS_SETSOCKOPT                   = 4181
	SYS_SHUTDOWN                     = 4182
	SYS_SOCKET                       = 4183
	SYS_SOCKETPAIR                   = 4184
	SYS_SETRESUID                    = 4185
	SYS_GETRESUID                    = 4186
	SYS_QUERY_MODULE                 = 4187
	SYS_POLL                         = 4188
	SYS_NFSSERVCTL                   = 4189
	SYS_SETRESGID                    = 4190
	SYS_GETRESGID                    = 4191
	SYS_PRCTL                        = 4192
	SYS_RT_SIGRETURN                 = 4193
	SYS_RT_SIGACTION                 = 4194
	SYS_RT_SIGPROCMASK               = 4195
	SYS_RT_SIGPENDING                = 4196
	SYS_RT_SIGTIMEDWAIT              = 4197
	SYS_RT_SIGQUEUEINFO              = 4198
	SYS_RT_SIGSUSPEND                = 4199
	SYS_PREAD64                      = 4200
	SYS_PWRITE64                     = 4201
	SYS_CHOWN                        = 4202
	SYS_GETCWD                       = 4203
	SYS_CAPGET                       = 4204
	SYS_CAPSET                       = 4205
	SYS_SIGALTSTACK                  = 4206
	SYS_SENDFILE                     = 4207
	SYS_GETPMSG                      = 4208
	SYS_PUTPMSG                      = 4209
	SYS_MMAP2                        = 4210
	SYS_TRUNCATE64                   = 4211
	SYS_FTRUNCATE64                  = 4212
	SYS_STAT64                       = 4213
	SYS_LSTAT64                      = 4214
	SYS_FSTAT64                      = 4215
	SYS_PIVOT_ROOT                   = 4216
	SYS_MINCORE                      = 4217
	SYS_MADVISE                      = 4218
	SYS_GETDENTS64                   = 4219
	SYS_FCNTL64                      = 4220
	SYS_RESERVED221                  = 4221
	SYS_GETTID                       = 4222
	SYS_READAHEAD                    = 4223
	SYS_SETXATTR                     = 4224
	SYS_LSETXATTR                    = 4225
	SYS_FSETXATTR                    = 4226
	SYS_GETXATTR                     = 4227
	SYS_LGETXATTR                    = 4228
	SYS_FGETXATTR                    = 4229
	SYS_LISTXATTR                    = 4230
	SYS_LLISTXATTR                   = 4231
	SYS_FLISTXATTR                   = 4232
	SYS_REMOVEXATTR                  = 4233
	SYS_LREMOVEXATTR                 = 4234
	SYS_FREMOVEXATTR                 = 4235
	SYS_TKILL                        = 4236
	SYS_SENDFILE64                   = 4237
	SYS_FUTEX                        = 4238
	SYS_SCHED_SETAFFINITY            = 4239
	SYS_SCHED_GETAFFINITY            = 4240
	SYS_IO_SETUP                     = 4241
	SYS_IO_DESTROY                   = 4242
	SYS_IO_GETEVENTS                 = 4243
	SYS_IO_SUBMIT                    = 4244
	SYS_IO_CANCEL                    = 4245
	SYS_EXIT_GROUP                   = 4246
	SYS_LOOKUP_DCOOKIE               = 4247
	SYS_EPOLL_CREATE                 = 4248
	SYS_EPOLL_CTL                    = 4249
	SYS_EPOLL_WAIT                   = 4250
	SYS_REMAP_FILE_PAGES             = 4251
	SYS_SET_TID_ADDRESS              = 4252
	SYS_RESTART_SYSCALL              = 4253
	SYS_FADVISE64                    = 4254
	SYS_STATFS64                     = 4255
	SYS_FSTATFS64                    = 4256
	SYS_TIMER_CREATE                 = 4257
	SYS_TIMER_SETTIME                = 4258
	SYS_TIMER_GETTIME                = 4259
	SYS_TIMER_GETOVERRUN             = 4260
	SYS_TIMER_DELETE                 = 4261
	SYS_CLOCK_SETTIME                = 4262
	SYS_CLOCK_GETTIME                = 4263
	SYS_CLOCK_GETRES                 = 4264
	SYS_CLOCK_NANOSLEEP              = 4265
	SYS_TGKILL                       = 4266
	SYS_UTIMES                       = 4267
	SYS_MBIND                        = 4268
	SYS_GET_MEMPOLICY                = 4269
	SYS_SET_MEMPOLICY                = 4270
	SYS_MQ_OPEN                      = 4271
	SYS_MQ_UNLINK                    = 4272
	SYS_MQ_TIMEDSEND                 = 4273
	SYS_MQ_TIMEDRECEIVE              = 4274
	SYS_MQ_NOTIFY                    = 4275
	SYS_MQ_GETSETATTR                = 4276
	SYS_VSERVER                      = 4277
	SYS_WAITID                       = 4278
	SYS_ADD_KEY                      = 4280
	SYS_REQUEST_KEY                  = 4281
	SYS_KEYCTL                       = 4282
	SYS_SET_THREAD_AREA              = 4283
	SYS_INOTIFY_INIT                 = 4284
	SYS_INOTIFY_ADD_WATCH            = 4285
	SYS_INOTIFY_RM_WATCH             = 4286
	SYS_MIGRATE_PAGES                = 4287
	SYS_OPENAT                       = 4288
	SYS_MKDIRAT                      = 4289
	SYS_MKNODAT                      = 4290
	SYS_FCHOWNAT                     = 4291
	SYS_FUTIMESAT                    = 4292
	SYS_FSTATAT64                    = 4293
	SYS_UNLINKAT                     = 4294
	SYS_RENAMEAT                     = 4295
	SYS_LINKAT                       = 4296
	SYS_SYMLINKAT                    = 4297
	SYS_READLINKAT                   = 4298
	SYS_FCHMODAT                     = 4299
	SYS_FACCESSAT                    = 4300
	SYS_PSELECT6                     = 4301
	SYS_PPOLL                        = 4302
	SYS_UNSHARE                      = 4303
	SYS_SPLICE                       = 4304
	SYS_SYNC_FILE_RANGE              = 4305
	SYS_TEE                          = 4306
	SYS_VMSPLICE                     = 4307
	SYS_MOVE_PAGES                   = 4308
	SYS_SET_ROBUST_LIST              = 4309
	SYS_GET_ROBUST_LIST              = 4310
	SYS_KEXEC_LOAD                   = 4311
	SYS_GETCPU                       = 4312
	SYS_EPOLL_PWAIT                  = 4313
	SYS_IOPRIO_SET                   = 4314
	SYS_IOPRIO_GET                   = 4315
	SYS_UTIMENSAT                    = 4316
	SYS_SIGNALFD                     = 4317
	SYS_TIMERFD                      = 4318
	SYS_EVENTFD                      = 4319
	SYS_FALLOCATE                    = 4320
	SYS_TIMERFD_CREATE               = 4321
	SYS_TIMERFD_GETTIME              = 4322
	SYS_TIMERFD_SETTIME              = 4323
	SYS_SIGNALFD4                    = 4324
	SYS_EVENTFD2                     = 4325
	SYS_EPOLL_CREATE1                = 4326
	SYS_DUP3                         = 4327
	SYS_PIPE2                        = 4328
	SYS_INOTIFY_INIT1                = 4329
	SYS_PREADV                       = 4330
	SYS_PWRITEV                      = 4331
	SYS_RT_TGSIGQUEUEINFO            = 4332
	SYS_PERF_EVENT_OPEN              = 4333
	SYS_ACCEPT4                      = 4334
	SYS_RECVMMSG                     = 4335
	SYS_FANOTIFY_INIT                = 4336
	SYS_FANOTIFY_MARK                = 4337
	SYS_PRLIMIT64                    = 4338
	SYS_NAME_TO_HANDLE_AT            = 4339
	SYS_OPEN_BY_HANDLE_AT            = 4340
	SYS_CLOCK_ADJTIME                = 4341
	SYS_SYNCFS                       = 4342
	SYS_SENDMMSG                     = 4343
	SYS_SETNS                        = 4344
	SYS_PROCESS_VM_READV             = 4345
	SYS_PROCESS_VM_WRITEV            = 4346
	SYS_KCMP                         = 4347
	SYS_FINIT_MODULE                 = 4348
	SYS_SCHED_SETATTR                = 4349
	SYS_SCHED_GETATTR                = 4350
	SYS_RENAMEAT2                    = 4351
	SYS_SECCOMP                      = 4352
	SYS_GETRANDOM                    = 4353
	SYS_MEMFD_CREATE                 = 4354
	SYS_BPF                          = 4355
	SYS_EXECVEAT                     = 4356
	SYS_USERFAULTFD                  = 4357
	SYS_MEMBARRIER                   = 4358
	SYS_MLOCK2                       = 4359
	SYS_COPY_FILE_RANGE              = 4360
	SYS_PREADV2                      = 4361
	SYS_PWRITEV2                     = 4362
	SYS_PKEY_MPROTECT                = 4363
	SYS_PKEY_ALLOC                   = 4364
	SYS_PKEY_FREE                    = 4365
	SYS_STATX                        = 4366
	SYS_RSEQ                         = 4367
	SYS_IO_PGETEVENTS                = 4368
	SYS_SEMGET                       = 4393
	SYS_SEMCTL                       = 4394
	SYS_SHMGET                       = 4395
	SYS_SHMCTL                       = 4396
	SYS_SHMAT                        = 4397
	SYS_SHMDT                        = 4398
	SYS_MSGGET                       = 4399
	SYS_MSGSND                       = 4400
	SYS_MSGRCV                       = 4401
	SYS_MSGCTL                       = 4402
	SYS_CLOCK_GETTIME64              = 4403
	SYS_CLOCK_SETTIME64              = 4404
	SYS_CLOCK_ADJTIME64              = 4405
	SYS_CLOCK_GETRES_TIME64          = 4406
	SYS_CLOCK_NANOSLEEP_TIME64       = 4407
	SYS_TIMER_GETTIME64              = 4408
	SYS_TIMER_SETTIME64              = 4409
	SYS_TIMERFD_GETTIME64            = 4410
	SYS_TIMERFD_SETTIME64            = 4411
	SYS_UTIMENSAT_TIME64             = 4412
	SYS_PSELECT6_TIME64              = 4413
	SYS_PPOLL_TIME64                 = 4414
	SYS_IO_PGETEVENTS_TIME64         = 4416
	SYS_RECVMMSG_TIME64              = 4417
	SYS_MQ_TIMEDSEND_TIME64          = 4418
	SYS_MQ_TIMEDRECEIVE_TIME64       = 4419
	SYS_SEMTIMEDOP_TIME64            = 4420
	SYS_RT_SIGTIMEDWAIT_TIME64       = 4421
	SYS_FUTEX_TIME64                 = 4422
	SYS_SCHED_RR_GET_INTERVAL_TIME64 = 4423
	SYS_PIDFD_SEND_SIGNAL            = 4424
	SYS_IO_URING_SETUP               = 4425
	SYS_IO_URING_ENTER               = 4426
	SYS_IO_URING_REGISTER            = 4427
	SYS_OPEN_TREE                    = 4428
	SYS_MOVE_MOUNT                   = 4429
	SYS_FSOPEN                       = 4430
	SYS_FSCONFIG                     = 4431
	SYS_FSMOUNT                      = 4432
	SYS_FSPICK                       = 4433
	SYS_PIDFD_OPEN                   = 4434
	SYS_CLONE3                       = 4435
	SYS_CLOSE_RANGE                  = 4436
	SYS_OPENAT2                      = 4437
	SYS_PIDFD_GETFD                  = 4438
	SYS_FACCESSAT2                   = 4439
	SYS_PROCESS_MADVISE              = 4440
	SYS_EPOLL_PWAIT2                 = 4441
	SYS_MOUNT_SETATTR                = 4442
	SYS_QUOTACTL_FD                  = 4443
	SYS_LANDLOCK_CREATE_RULESET      = 4444
	SYS_LANDLOCK_ADD_RULE            = 4445
	SYS_LANDLOCK_RESTRICT_SELF       = 4446
	SYS_PROCESS_MRELEASE             = 4448
	SYS_FUTEX_WAITV                  = 4449
	SYS_SET_MEMPOLICY_HOME_NODE      = 4450
)
   07070100000E94000081A4000000000000000000000001645E367C000032C1000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go  // go run linux/mksysnum.go -Wall -Werror -static -I/tmp/mips64/include /tmp/mips64/include/asm/unistd.h
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build mips64 && linux
// +build mips64,linux

package unix

const (
	SYS_READ                    = 5000
	SYS_WRITE                   = 5001
	SYS_OPEN                    = 5002
	SYS_CLOSE                   = 5003
	SYS_STAT                    = 5004
	SYS_FSTAT                   = 5005
	SYS_LSTAT                   = 5006
	SYS_POLL                    = 5007
	SYS_LSEEK                   = 5008
	SYS_MMAP                    = 5009
	SYS_MPROTECT                = 5010
	SYS_MUNMAP                  = 5011
	SYS_BRK                     = 5012
	SYS_RT_SIGACTION            = 5013
	SYS_RT_SIGPROCMASK          = 5014
	SYS_IOCTL                   = 5015
	SYS_PREAD64                 = 5016
	SYS_PWRITE64                = 5017
	SYS_READV                   = 5018
	SYS_WRITEV                  = 5019
	SYS_ACCESS                  = 5020
	SYS_PIPE                    = 5021
	SYS__NEWSELECT              = 5022
	SYS_SCHED_YIELD             = 5023
	SYS_MREMAP                  = 5024
	SYS_MSYNC                   = 5025
	SYS_MINCORE                 = 5026
	SYS_MADVISE                 = 5027
	SYS_SHMGET                  = 5028
	SYS_SHMAT                   = 5029
	SYS_SHMCTL                  = 5030
	SYS_DUP                     = 5031
	SYS_DUP2                    = 5032
	SYS_PAUSE                   = 5033
	SYS_NANOSLEEP               = 5034
	SYS_GETITIMER               = 5035
	SYS_SETITIMER               = 5036
	SYS_ALARM                   = 5037
	SYS_GETPID                  = 5038
	SYS_SENDFILE                = 5039
	SYS_SOCKET                  = 5040
	SYS_CONNECT                 = 5041
	SYS_ACCEPT                  = 5042
	SYS_SENDTO                  = 5043
	SYS_RECVFROM                = 5044
	SYS_SENDMSG                 = 5045
	SYS_RECVMSG                 = 5046
	SYS_SHUTDOWN                = 5047
	SYS_BIND                    = 5048
	SYS_LISTEN                  = 5049
	SYS_GETSOCKNAME             = 5050
	SYS_GETPEERNAME             = 5051
	SYS_SOCKETPAIR              = 5052
	SYS_SETSOCKOPT              = 5053
	SYS_GETSOCKOPT              = 5054
	SYS_CLONE                   = 5055
	SYS_FORK                    = 5056
	SYS_EXECVE                  = 5057
	SYS_EXIT                    = 5058
	SYS_WAIT4                   = 5059
	SYS_KILL                    = 5060
	SYS_UNAME                   = 5061
	SYS_SEMGET                  = 5062
	SYS_SEMOP                   = 5063
	SYS_SEMCTL                  = 5064
	SYS_SHMDT                   = 5065
	SYS_MSGGET                  = 5066
	SYS_MSGSND                  = 5067
	SYS_MSGRCV                  = 5068
	SYS_MSGCTL                  = 5069
	SYS_FCNTL                   = 5070
	SYS_FLOCK                   = 5071
	SYS_FSYNC                   = 5072
	SYS_FDATASYNC               = 5073
	SYS_TRUNCATE                = 5074
	SYS_FTRUNCATE               = 5075
	SYS_GETDENTS                = 5076
	SYS_GETCWD                  = 5077
	SYS_CHDIR                   = 5078
	SYS_FCHDIR                  = 5079
	SYS_RENAME                  = 5080
	SYS_MKDIR                   = 5081
	SYS_RMDIR                   = 5082
	SYS_CREAT                   = 5083
	SYS_LINK                    = 5084
	SYS_UNLINK                  = 5085
	SYS_SYMLINK                 = 5086
	SYS_READLINK                = 5087
	SYS_CHMOD                   = 5088
	SYS_FCHMOD                  = 5089
	SYS_CHOWN                   = 5090
	SYS_FCHOWN                  = 5091
	SYS_LCHOWN                  = 5092
	SYS_UMASK                   = 5093
	SYS_GETTIMEOFDAY            = 5094
	SYS_GETRLIMIT               = 5095
	SYS_GETRUSAGE               = 5096
	SYS_SYSINFO                 = 5097
	SYS_TIMES                   = 5098
	SYS_PTRACE                  = 5099
	SYS_GETUID                  = 5100
	SYS_SYSLOG                  = 5101
	SYS_GETGID                  = 5102
	SYS_SETUID                  = 5103
	SYS_SETGID                  = 5104
	SYS_GETEUID                 = 5105
	SYS_GETEGID                 = 5106
	SYS_SETPGID                 = 5107
	SYS_GETPPID                 = 5108
	SYS_GETPGRP                 = 5109
	SYS_SETSID                  = 5110
	SYS_SETREUID                = 5111
	SYS_SETREGID                = 5112
	SYS_GETGROUPS               = 5113
	SYS_SETGROUPS               = 5114
	SYS_SETRESUID               = 5115
	SYS_GETRESUID               = 5116
	SYS_SETRESGID               = 5117
	SYS_GETRESGID               = 5118
	SYS_GETPGID                 = 5119
	SYS_SETFSUID                = 5120
	SYS_SETFSGID                = 5121
	SYS_GETSID                  = 5122
	SYS_CAPGET                  = 5123
	SYS_CAPSET                  = 5124
	SYS_RT_SIGPENDING           = 5125
	SYS_RT_SIGTIMEDWAIT         = 5126
	SYS_RT_SIGQUEUEINFO         = 5127
	SYS_RT_SIGSUSPEND           = 5128
	SYS_SIGALTSTACK             = 5129
	SYS_UTIME                   = 5130
	SYS_MKNOD                   = 5131
	SYS_PERSONALITY             = 5132
	SYS_USTAT                   = 5133
	SYS_STATFS                  = 5134
	SYS_FSTATFS                 = 5135
	SYS_SYSFS                   = 5136
	SYS_GETPRIORITY             = 5137
	SYS_SETPRIORITY             = 5138
	SYS_SCHED_SETPARAM          = 5139
	SYS_SCHED_GETPARAM          = 5140
	SYS_SCHED_SETSCHEDULER      = 5141
	SYS_SCHED_GETSCHEDULER      = 5142
	SYS_SCHED_GET_PRIORITY_MAX  = 5143
	SYS_SCHED_GET_PRIORITY_MIN  = 5144
	SYS_SCHED_RR_GET_INTERVAL   = 5145
	SYS_MLOCK                   = 5146
	SYS_MUNLOCK                 = 5147
	SYS_MLOCKALL                = 5148
	SYS_MUNLOCKALL              = 5149
	SYS_VHANGUP                 = 5150
	SYS_PIVOT_ROOT              = 5151
	SYS__SYSCTL                 = 5152
	SYS_PRCTL                   = 5153
	SYS_ADJTIMEX                = 5154
	SYS_SETRLIMIT               = 5155
	SYS_CHROOT                  = 5156
	SYS_SYNC                    = 5157
	SYS_ACCT                    = 5158
	SYS_SETTIMEOFDAY            = 5159
	SYS_MOUNT                   = 5160
	SYS_UMOUNT2                 = 5161
	SYS_SWAPON                  = 5162
	SYS_SWAPOFF                 = 5163
	SYS_REBOOT                  = 5164
	SYS_SETHOSTNAME             = 5165
	SYS_SETDOMAINNAME           = 5166
	SYS_CREATE_MODULE           = 5167
	SYS_INIT_MODULE             = 5168
	SYS_DELETE_MODULE           = 5169
	SYS_GET_KERNEL_SYMS         = 5170
	SYS_QUERY_MODULE            = 5171
	SYS_QUOTACTL                = 5172
	SYS_NFSSERVCTL              = 5173
	SYS_GETPMSG                 = 5174
	SYS_PUTPMSG                 = 5175
	SYS_AFS_SYSCALL             = 5176
	SYS_RESERVED177             = 5177
	SYS_GETTID                  = 5178
	SYS_READAHEAD               = 5179
	SYS_SETXATTR                = 5180
	SYS_LSETXATTR               = 5181
	SYS_FSETXATTR               = 5182
	SYS_GETXATTR                = 5183
	SYS_LGETXATTR               = 5184
	SYS_FGETXATTR               = 5185
	SYS_LISTXATTR               = 5186
	SYS_LLISTXATTR              = 5187
	SYS_FLISTXATTR              = 5188
	SYS_REMOVEXATTR             = 5189
	SYS_LREMOVEXATTR            = 5190
	SYS_FREMOVEXATTR            = 5191
	SYS_TKILL                   = 5192
	SYS_RESERVED193             = 5193
	SYS_FUTEX                   = 5194
	SYS_SCHED_SETAFFINITY       = 5195
	SYS_SCHED_GETAFFINITY       = 5196
	SYS_CACHEFLUSH              = 5197
	SYS_CACHECTL                = 5198
	SYS_SYSMIPS                 = 5199
	SYS_IO_SETUP                = 5200
	SYS_IO_DESTROY              = 5201
	SYS_IO_GETEVENTS            = 5202
	SYS_IO_SUBMIT               = 5203
	SYS_IO_CANCEL               = 5204
	SYS_EXIT_GROUP              = 5205
	SYS_LOOKUP_DCOOKIE          = 5206
	SYS_EPOLL_CREATE            = 5207
	SYS_EPOLL_CTL               = 5208
	SYS_EPOLL_WAIT              = 5209
	SYS_REMAP_FILE_PAGES        = 5210
	SYS_RT_SIGRETURN            = 5211
	SYS_SET_TID_ADDRESS         = 5212
	SYS_RESTART_SYSCALL         = 5213
	SYS_SEMTIMEDOP              = 5214
	SYS_FADVISE64               = 5215
	SYS_TIMER_CREATE            = 5216
	SYS_TIMER_SETTIME           = 5217
	SYS_TIMER_GETTIME           = 5218
	SYS_TIMER_GETOVERRUN        = 5219
	SYS_TIMER_DELETE            = 5220
	SYS_CLOCK_SETTIME           = 5221
	SYS_CLOCK_GETTIME           = 5222
	SYS_CLOCK_GETRES            = 5223
	SYS_CLOCK_NANOSLEEP         = 5224
	SYS_TGKILL                  = 5225
	SYS_UTIMES                  = 5226
	SYS_MBIND                   = 5227
	SYS_GET_MEMPOLICY           = 5228
	SYS_SET_MEMPOLICY           = 5229
	SYS_MQ_OPEN                 = 5230
	SYS_MQ_UNLINK               = 5231
	SYS_MQ_TIMEDSEND            = 5232
	SYS_MQ_TIMEDRECEIVE         = 5233
	SYS_MQ_NOTIFY               = 5234
	SYS_MQ_GETSETATTR           = 5235
	SYS_VSERVER                 = 5236
	SYS_WAITID                  = 5237
	SYS_ADD_KEY                 = 5239
	SYS_REQUEST_KEY             = 5240
	SYS_KEYCTL                  = 5241
	SYS_SET_THREAD_AREA         = 5242
	SYS_INOTIFY_INIT            = 5243
	SYS_INOTIFY_ADD_WATCH       = 5244
	SYS_INOTIFY_RM_WATCH        = 5245
	SYS_MIGRATE_PAGES           = 5246
	SYS_OPENAT                  = 5247
	SYS_MKDIRAT                 = 5248
	SYS_MKNODAT                 = 5249
	SYS_FCHOWNAT                = 5250
	SYS_FUTIMESAT               = 5251
	SYS_NEWFSTATAT              = 5252
	SYS_UNLINKAT                = 5253
	SYS_RENAMEAT                = 5254
	SYS_LINKAT                  = 5255
	SYS_SYMLINKAT               = 5256
	SYS_READLINKAT              = 5257
	SYS_FCHMODAT                = 5258
	SYS_FACCESSAT               = 5259
	SYS_PSELECT6                = 5260
	SYS_PPOLL                   = 5261
	SYS_UNSHARE                 = 5262
	SYS_SPLICE                  = 5263
	SYS_SYNC_FILE_RANGE         = 5264
	SYS_TEE                     = 5265
	SYS_VMSPLICE                = 5266
	SYS_MOVE_PAGES              = 5267
	SYS_SET_ROBUST_LIST         = 5268
	SYS_GET_ROBUST_LIST         = 5269
	SYS_KEXEC_LOAD              = 5270
	SYS_GETCPU                  = 5271
	SYS_EPOLL_PWAIT             = 5272
	SYS_IOPRIO_SET              = 5273
	SYS_IOPRIO_GET              = 5274
	SYS_UTIMENSAT               = 5275
	SYS_SIGNALFD                = 5276
	SYS_TIMERFD                 = 5277
	SYS_EVENTFD                 = 5278
	SYS_FALLOCATE               = 5279
	SYS_TIMERFD_CREATE          = 5280
	SYS_TIMERFD_GETTIME         = 5281
	SYS_TIMERFD_SETTIME         = 5282
	SYS_SIGNALFD4               = 5283
	SYS_EVENTFD2                = 5284
	SYS_EPOLL_CREATE1           = 5285
	SYS_DUP3                    = 5286
	SYS_PIPE2                   = 5287
	SYS_INOTIFY_INIT1           = 5288
	SYS_PREADV                  = 5289
	SYS_PWRITEV                 = 5290
	SYS_RT_TGSIGQUEUEINFO       = 5291
	SYS_PERF_EVENT_OPEN         = 5292
	SYS_ACCEPT4                 = 5293
	SYS_RECVMMSG                = 5294
	SYS_FANOTIFY_INIT           = 5295
	SYS_FANOTIFY_MARK           = 5296
	SYS_PRLIMIT64               = 5297
	SYS_NAME_TO_HANDLE_AT       = 5298
	SYS_OPEN_BY_HANDLE_AT       = 5299
	SYS_CLOCK_ADJTIME           = 5300
	SYS_SYNCFS                  = 5301
	SYS_SENDMMSG                = 5302
	SYS_SETNS                   = 5303
	SYS_PROCESS_VM_READV        = 5304
	SYS_PROCESS_VM_WRITEV       = 5305
	SYS_KCMP                    = 5306
	SYS_FINIT_MODULE            = 5307
	SYS_GETDENTS64              = 5308
	SYS_SCHED_SETATTR           = 5309
	SYS_SCHED_GETATTR           = 5310
	SYS_RENAMEAT2               = 5311
	SYS_SECCOMP                 = 5312
	SYS_GETRANDOM               = 5313
	SYS_MEMFD_CREATE            = 5314
	SYS_BPF                     = 5315
	SYS_EXECVEAT                = 5316
	SYS_USERFAULTFD             = 5317
	SYS_MEMBARRIER              = 5318
	SYS_MLOCK2                  = 5319
	SYS_COPY_FILE_RANGE         = 5320
	SYS_PREADV2                 = 5321
	SYS_PWRITEV2                = 5322
	SYS_PKEY_MPROTECT           = 5323
	SYS_PKEY_ALLOC              = 5324
	SYS_PKEY_FREE               = 5325
	SYS_STATX                   = 5326
	SYS_RSEQ                    = 5327
	SYS_IO_PGETEVENTS           = 5328
	SYS_PIDFD_SEND_SIGNAL       = 5424
	SYS_IO_URING_SETUP          = 5425
	SYS_IO_URING_ENTER          = 5426
	SYS_IO_URING_REGISTER       = 5427
	SYS_OPEN_TREE               = 5428
	SYS_MOVE_MOUNT              = 5429
	SYS_FSOPEN                  = 5430
	SYS_FSCONFIG                = 5431
	SYS_FSMOUNT                 = 5432
	SYS_FSPICK                  = 5433
	SYS_PIDFD_OPEN              = 5434
	SYS_CLONE3                  = 5435
	SYS_CLOSE_RANGE             = 5436
	SYS_OPENAT2                 = 5437
	SYS_PIDFD_GETFD             = 5438
	SYS_FACCESSAT2              = 5439
	SYS_PROCESS_MADVISE         = 5440
	SYS_EPOLL_PWAIT2            = 5441
	SYS_MOUNT_SETATTR           = 5442
	SYS_QUOTACTL_FD             = 5443
	SYS_LANDLOCK_CREATE_RULESET = 5444
	SYS_LANDLOCK_ADD_RULE       = 5445
	SYS_LANDLOCK_RESTRICT_SELF  = 5446
	SYS_PROCESS_MRELEASE        = 5448
	SYS_FUTEX_WAITV             = 5449
	SYS_SET_MEMPOLICY_HOME_NODE = 5450
)
   07070100000E95000081A4000000000000000000000001645E367C000032C9000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go    // go run linux/mksysnum.go -Wall -Werror -static -I/tmp/mips64le/include /tmp/mips64le/include/asm/unistd.h
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build mips64le && linux
// +build mips64le,linux

package unix

const (
	SYS_READ                    = 5000
	SYS_WRITE                   = 5001
	SYS_OPEN                    = 5002
	SYS_CLOSE                   = 5003
	SYS_STAT                    = 5004
	SYS_FSTAT                   = 5005
	SYS_LSTAT                   = 5006
	SYS_POLL                    = 5007
	SYS_LSEEK                   = 5008
	SYS_MMAP                    = 5009
	SYS_MPROTECT                = 5010
	SYS_MUNMAP                  = 5011
	SYS_BRK                     = 5012
	SYS_RT_SIGACTION            = 5013
	SYS_RT_SIGPROCMASK          = 5014
	SYS_IOCTL                   = 5015
	SYS_PREAD64                 = 5016
	SYS_PWRITE64                = 5017
	SYS_READV                   = 5018
	SYS_WRITEV                  = 5019
	SYS_ACCESS                  = 5020
	SYS_PIPE                    = 5021
	SYS__NEWSELECT              = 5022
	SYS_SCHED_YIELD             = 5023
	SYS_MREMAP                  = 5024
	SYS_MSYNC                   = 5025
	SYS_MINCORE                 = 5026
	SYS_MADVISE                 = 5027
	SYS_SHMGET                  = 5028
	SYS_SHMAT                   = 5029
	SYS_SHMCTL                  = 5030
	SYS_DUP                     = 5031
	SYS_DUP2                    = 5032
	SYS_PAUSE                   = 5033
	SYS_NANOSLEEP               = 5034
	SYS_GETITIMER               = 5035
	SYS_SETITIMER               = 5036
	SYS_ALARM                   = 5037
	SYS_GETPID                  = 5038
	SYS_SENDFILE                = 5039
	SYS_SOCKET                  = 5040
	SYS_CONNECT                 = 5041
	SYS_ACCEPT                  = 5042
	SYS_SENDTO                  = 5043
	SYS_RECVFROM                = 5044
	SYS_SENDMSG                 = 5045
	SYS_RECVMSG                 = 5046
	SYS_SHUTDOWN                = 5047
	SYS_BIND                    = 5048
	SYS_LISTEN                  = 5049
	SYS_GETSOCKNAME             = 5050
	SYS_GETPEERNAME             = 5051
	SYS_SOCKETPAIR              = 5052
	SYS_SETSOCKOPT              = 5053
	SYS_GETSOCKOPT              = 5054
	SYS_CLONE                   = 5055
	SYS_FORK                    = 5056
	SYS_EXECVE                  = 5057
	SYS_EXIT                    = 5058
	SYS_WAIT4                   = 5059
	SYS_KILL                    = 5060
	SYS_UNAME                   = 5061
	SYS_SEMGET                  = 5062
	SYS_SEMOP                   = 5063
	SYS_SEMCTL                  = 5064
	SYS_SHMDT                   = 5065
	SYS_MSGGET                  = 5066
	SYS_MSGSND                  = 5067
	SYS_MSGRCV                  = 5068
	SYS_MSGCTL                  = 5069
	SYS_FCNTL                   = 5070
	SYS_FLOCK                   = 5071
	SYS_FSYNC                   = 5072
	SYS_FDATASYNC               = 5073
	SYS_TRUNCATE                = 5074
	SYS_FTRUNCATE               = 5075
	SYS_GETDENTS                = 5076
	SYS_GETCWD                  = 5077
	SYS_CHDIR                   = 5078
	SYS_FCHDIR                  = 5079
	SYS_RENAME                  = 5080
	SYS_MKDIR                   = 5081
	SYS_RMDIR                   = 5082
	SYS_CREAT                   = 5083
	SYS_LINK                    = 5084
	SYS_UNLINK                  = 5085
	SYS_SYMLINK                 = 5086
	SYS_READLINK                = 5087
	SYS_CHMOD                   = 5088
	SYS_FCHMOD                  = 5089
	SYS_CHOWN                   = 5090
	SYS_FCHOWN                  = 5091
	SYS_LCHOWN                  = 5092
	SYS_UMASK                   = 5093
	SYS_GETTIMEOFDAY            = 5094
	SYS_GETRLIMIT               = 5095
	SYS_GETRUSAGE               = 5096
	SYS_SYSINFO                 = 5097
	SYS_TIMES                   = 5098
	SYS_PTRACE                  = 5099
	SYS_GETUID                  = 5100
	SYS_SYSLOG                  = 5101
	SYS_GETGID                  = 5102
	SYS_SETUID                  = 5103
	SYS_SETGID                  = 5104
	SYS_GETEUID                 = 5105
	SYS_GETEGID                 = 5106
	SYS_SETPGID                 = 5107
	SYS_GETPPID                 = 5108
	SYS_GETPGRP                 = 5109
	SYS_SETSID                  = 5110
	SYS_SETREUID                = 5111
	SYS_SETREGID                = 5112
	SYS_GETGROUPS               = 5113
	SYS_SETGROUPS               = 5114
	SYS_SETRESUID               = 5115
	SYS_GETRESUID               = 5116
	SYS_SETRESGID               = 5117
	SYS_GETRESGID               = 5118
	SYS_GETPGID                 = 5119
	SYS_SETFSUID                = 5120
	SYS_SETFSGID                = 5121
	SYS_GETSID                  = 5122
	SYS_CAPGET                  = 5123
	SYS_CAPSET                  = 5124
	SYS_RT_SIGPENDING           = 5125
	SYS_RT_SIGTIMEDWAIT         = 5126
	SYS_RT_SIGQUEUEINFO         = 5127
	SYS_RT_SIGSUSPEND           = 5128
	SYS_SIGALTSTACK             = 5129
	SYS_UTIME                   = 5130
	SYS_MKNOD                   = 5131
	SYS_PERSONALITY             = 5132
	SYS_USTAT                   = 5133
	SYS_STATFS                  = 5134
	SYS_FSTATFS                 = 5135
	SYS_SYSFS                   = 5136
	SYS_GETPRIORITY             = 5137
	SYS_SETPRIORITY             = 5138
	SYS_SCHED_SETPARAM          = 5139
	SYS_SCHED_GETPARAM          = 5140
	SYS_SCHED_SETSCHEDULER      = 5141
	SYS_SCHED_GETSCHEDULER      = 5142
	SYS_SCHED_GET_PRIORITY_MAX  = 5143
	SYS_SCHED_GET_PRIORITY_MIN  = 5144
	SYS_SCHED_RR_GET_INTERVAL   = 5145
	SYS_MLOCK                   = 5146
	SYS_MUNLOCK                 = 5147
	SYS_MLOCKALL                = 5148
	SYS_MUNLOCKALL              = 5149
	SYS_VHANGUP                 = 5150
	SYS_PIVOT_ROOT              = 5151
	SYS__SYSCTL                 = 5152
	SYS_PRCTL                   = 5153
	SYS_ADJTIMEX                = 5154
	SYS_SETRLIMIT               = 5155
	SYS_CHROOT                  = 5156
	SYS_SYNC                    = 5157
	SYS_ACCT                    = 5158
	SYS_SETTIMEOFDAY            = 5159
	SYS_MOUNT                   = 5160
	SYS_UMOUNT2                 = 5161
	SYS_SWAPON                  = 5162
	SYS_SWAPOFF                 = 5163
	SYS_REBOOT                  = 5164
	SYS_SETHOSTNAME             = 5165
	SYS_SETDOMAINNAME           = 5166
	SYS_CREATE_MODULE           = 5167
	SYS_INIT_MODULE             = 5168
	SYS_DELETE_MODULE           = 5169
	SYS_GET_KERNEL_SYMS         = 5170
	SYS_QUERY_MODULE            = 5171
	SYS_QUOTACTL                = 5172
	SYS_NFSSERVCTL              = 5173
	SYS_GETPMSG                 = 5174
	SYS_PUTPMSG                 = 5175
	SYS_AFS_SYSCALL             = 5176
	SYS_RESERVED177             = 5177
	SYS_GETTID                  = 5178
	SYS_READAHEAD               = 5179
	SYS_SETXATTR                = 5180
	SYS_LSETXATTR               = 5181
	SYS_FSETXATTR               = 5182
	SYS_GETXATTR                = 5183
	SYS_LGETXATTR               = 5184
	SYS_FGETXATTR               = 5185
	SYS_LISTXATTR               = 5186
	SYS_LLISTXATTR              = 5187
	SYS_FLISTXATTR              = 5188
	SYS_REMOVEXATTR             = 5189
	SYS_LREMOVEXATTR            = 5190
	SYS_FREMOVEXATTR            = 5191
	SYS_TKILL                   = 5192
	SYS_RESERVED193             = 5193
	SYS_FUTEX                   = 5194
	SYS_SCHED_SETAFFINITY       = 5195
	SYS_SCHED_GETAFFINITY       = 5196
	SYS_CACHEFLUSH              = 5197
	SYS_CACHECTL                = 5198
	SYS_SYSMIPS                 = 5199
	SYS_IO_SETUP                = 5200
	SYS_IO_DESTROY              = 5201
	SYS_IO_GETEVENTS            = 5202
	SYS_IO_SUBMIT               = 5203
	SYS_IO_CANCEL               = 5204
	SYS_EXIT_GROUP              = 5205
	SYS_LOOKUP_DCOOKIE          = 5206
	SYS_EPOLL_CREATE            = 5207
	SYS_EPOLL_CTL               = 5208
	SYS_EPOLL_WAIT              = 5209
	SYS_REMAP_FILE_PAGES        = 5210
	SYS_RT_SIGRETURN            = 5211
	SYS_SET_TID_ADDRESS         = 5212
	SYS_RESTART_SYSCALL         = 5213
	SYS_SEMTIMEDOP              = 5214
	SYS_FADVISE64               = 5215
	SYS_TIMER_CREATE            = 5216
	SYS_TIMER_SETTIME           = 5217
	SYS_TIMER_GETTIME           = 5218
	SYS_TIMER_GETOVERRUN        = 5219
	SYS_TIMER_DELETE            = 5220
	SYS_CLOCK_SETTIME           = 5221
	SYS_CLOCK_GETTIME           = 5222
	SYS_CLOCK_GETRES            = 5223
	SYS_CLOCK_NANOSLEEP         = 5224
	SYS_TGKILL                  = 5225
	SYS_UTIMES                  = 5226
	SYS_MBIND                   = 5227
	SYS_GET_MEMPOLICY           = 5228
	SYS_SET_MEMPOLICY           = 5229
	SYS_MQ_OPEN                 = 5230
	SYS_MQ_UNLINK               = 5231
	SYS_MQ_TIMEDSEND            = 5232
	SYS_MQ_TIMEDRECEIVE         = 5233
	SYS_MQ_NOTIFY               = 5234
	SYS_MQ_GETSETATTR           = 5235
	SYS_VSERVER                 = 5236
	SYS_WAITID                  = 5237
	SYS_ADD_KEY                 = 5239
	SYS_REQUEST_KEY             = 5240
	SYS_KEYCTL                  = 5241
	SYS_SET_THREAD_AREA         = 5242
	SYS_INOTIFY_INIT            = 5243
	SYS_INOTIFY_ADD_WATCH       = 5244
	SYS_INOTIFY_RM_WATCH        = 5245
	SYS_MIGRATE_PAGES           = 5246
	SYS_OPENAT                  = 5247
	SYS_MKDIRAT                 = 5248
	SYS_MKNODAT                 = 5249
	SYS_FCHOWNAT                = 5250
	SYS_FUTIMESAT               = 5251
	SYS_NEWFSTATAT              = 5252
	SYS_UNLINKAT                = 5253
	SYS_RENAMEAT                = 5254
	SYS_LINKAT                  = 5255
	SYS_SYMLINKAT               = 5256
	SYS_READLINKAT              = 5257
	SYS_FCHMODAT                = 5258
	SYS_FACCESSAT               = 5259
	SYS_PSELECT6                = 5260
	SYS_PPOLL                   = 5261
	SYS_UNSHARE                 = 5262
	SYS_SPLICE                  = 5263
	SYS_SYNC_FILE_RANGE         = 5264
	SYS_TEE                     = 5265
	SYS_VMSPLICE                = 5266
	SYS_MOVE_PAGES              = 5267
	SYS_SET_ROBUST_LIST         = 5268
	SYS_GET_ROBUST_LIST         = 5269
	SYS_KEXEC_LOAD              = 5270
	SYS_GETCPU                  = 5271
	SYS_EPOLL_PWAIT             = 5272
	SYS_IOPRIO_SET              = 5273
	SYS_IOPRIO_GET              = 5274
	SYS_UTIMENSAT               = 5275
	SYS_SIGNALFD                = 5276
	SYS_TIMERFD                 = 5277
	SYS_EVENTFD                 = 5278
	SYS_FALLOCATE               = 5279
	SYS_TIMERFD_CREATE          = 5280
	SYS_TIMERFD_GETTIME         = 5281
	SYS_TIMERFD_SETTIME         = 5282
	SYS_SIGNALFD4               = 5283
	SYS_EVENTFD2                = 5284
	SYS_EPOLL_CREATE1           = 5285
	SYS_DUP3                    = 5286
	SYS_PIPE2                   = 5287
	SYS_INOTIFY_INIT1           = 5288
	SYS_PREADV                  = 5289
	SYS_PWRITEV                 = 5290
	SYS_RT_TGSIGQUEUEINFO       = 5291
	SYS_PERF_EVENT_OPEN         = 5292
	SYS_ACCEPT4                 = 5293
	SYS_RECVMMSG                = 5294
	SYS_FANOTIFY_INIT           = 5295
	SYS_FANOTIFY_MARK           = 5296
	SYS_PRLIMIT64               = 5297
	SYS_NAME_TO_HANDLE_AT       = 5298
	SYS_OPEN_BY_HANDLE_AT       = 5299
	SYS_CLOCK_ADJTIME           = 5300
	SYS_SYNCFS                  = 5301
	SYS_SENDMMSG                = 5302
	SYS_SETNS                   = 5303
	SYS_PROCESS_VM_READV        = 5304
	SYS_PROCESS_VM_WRITEV       = 5305
	SYS_KCMP                    = 5306
	SYS_FINIT_MODULE            = 5307
	SYS_GETDENTS64              = 5308
	SYS_SCHED_SETATTR           = 5309
	SYS_SCHED_GETATTR           = 5310
	SYS_RENAMEAT2               = 5311
	SYS_SECCOMP                 = 5312
	SYS_GETRANDOM               = 5313
	SYS_MEMFD_CREATE            = 5314
	SYS_BPF                     = 5315
	SYS_EXECVEAT                = 5316
	SYS_USERFAULTFD             = 5317
	SYS_MEMBARRIER              = 5318
	SYS_MLOCK2                  = 5319
	SYS_COPY_FILE_RANGE         = 5320
	SYS_PREADV2                 = 5321
	SYS_PWRITEV2                = 5322
	SYS_PKEY_MPROTECT           = 5323
	SYS_PKEY_ALLOC              = 5324
	SYS_PKEY_FREE               = 5325
	SYS_STATX                   = 5326
	SYS_RSEQ                    = 5327
	SYS_IO_PGETEVENTS           = 5328
	SYS_PIDFD_SEND_SIGNAL       = 5424
	SYS_IO_URING_SETUP          = 5425
	SYS_IO_URING_ENTER          = 5426
	SYS_IO_URING_REGISTER       = 5427
	SYS_OPEN_TREE               = 5428
	SYS_MOVE_MOUNT              = 5429
	SYS_FSOPEN                  = 5430
	SYS_FSCONFIG                = 5431
	SYS_FSMOUNT                 = 5432
	SYS_FSPICK                  = 5433
	SYS_PIDFD_OPEN              = 5434
	SYS_CLONE3                  = 5435
	SYS_CLOSE_RANGE             = 5436
	SYS_OPENAT2                 = 5437
	SYS_PIDFD_GETFD             = 5438
	SYS_FACCESSAT2              = 5439
	SYS_PROCESS_MADVISE         = 5440
	SYS_EPOLL_PWAIT2            = 5441
	SYS_MOUNT_SETATTR           = 5442
	SYS_QUOTACTL_FD             = 5443
	SYS_LANDLOCK_CREATE_RULESET = 5444
	SYS_LANDLOCK_ADD_RULE       = 5445
	SYS_LANDLOCK_RESTRICT_SELF  = 5446
	SYS_PROCESS_MRELEASE        = 5448
	SYS_FUTEX_WAITV             = 5449
	SYS_SET_MEMPOLICY_HOME_NODE = 5450
)
   07070100000E96000081A4000000000000000000000001645E367C000044E1000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go  // go run linux/mksysnum.go -Wall -Werror -static -I/tmp/mipsle/include /tmp/mipsle/include/asm/unistd.h
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build mipsle && linux
// +build mipsle,linux

package unix

const (
	SYS_SYSCALL                      = 4000
	SYS_EXIT                         = 4001
	SYS_FORK                         = 4002
	SYS_READ                         = 4003
	SYS_WRITE                        = 4004
	SYS_OPEN                         = 4005
	SYS_CLOSE                        = 4006
	SYS_WAITPID                      = 4007
	SYS_CREAT                        = 4008
	SYS_LINK                         = 4009
	SYS_UNLINK                       = 4010
	SYS_EXECVE                       = 4011
	SYS_CHDIR                        = 4012
	SYS_TIME                         = 4013
	SYS_MKNOD                        = 4014
	SYS_CHMOD                        = 4015
	SYS_LCHOWN                       = 4016
	SYS_BREAK                        = 4017
	SYS_UNUSED18                     = 4018
	SYS_LSEEK                        = 4019
	SYS_GETPID                       = 4020
	SYS_MOUNT                        = 4021
	SYS_UMOUNT                       = 4022
	SYS_SETUID                       = 4023
	SYS_GETUID                       = 4024
	SYS_STIME                        = 4025
	SYS_PTRACE                       = 4026
	SYS_ALARM                        = 4027
	SYS_UNUSED28                     = 4028
	SYS_PAUSE                        = 4029
	SYS_UTIME                        = 4030
	SYS_STTY                         = 4031
	SYS_GTTY                         = 4032
	SYS_ACCESS                       = 4033
	SYS_NICE                         = 4034
	SYS_FTIME                        = 4035
	SYS_SYNC                         = 4036
	SYS_KILL                         = 4037
	SYS_RENAME                       = 4038
	SYS_MKDIR                        = 4039
	SYS_RMDIR                        = 4040
	SYS_DUP                          = 4041
	SYS_PIPE                         = 4042
	SYS_TIMES                        = 4043
	SYS_PROF                         = 4044
	SYS_BRK                          = 4045
	SYS_SETGID                       = 4046
	SYS_GETGID                       = 4047
	SYS_SIGNAL                       = 4048
	SYS_GETEUID                      = 4049
	SYS_GETEGID                      = 4050
	SYS_ACCT                         = 4051
	SYS_UMOUNT2                      = 4052
	SYS_LOCK                         = 4053
	SYS_IOCTL                        = 4054
	SYS_FCNTL                        = 4055
	SYS_MPX                          = 4056
	SYS_SETPGID                      = 4057
	SYS_ULIMIT                       = 4058
	SYS_UNUSED59                     = 4059
	SYS_UMASK                        = 4060
	SYS_CHROOT                       = 4061
	SYS_USTAT                        = 4062
	SYS_DUP2                         = 4063
	SYS_GETPPID                      = 4064
	SYS_GETPGRP                      = 4065
	SYS_SETSID                       = 4066
	SYS_SIGACTION                    = 4067
	SYS_SGETMASK                     = 4068
	SYS_SSETMASK                     = 4069
	SYS_SETREUID                     = 4070
	SYS_SETREGID                     = 4071
	SYS_SIGSUSPEND                   = 4072
	SYS_SIGPENDING                   = 4073
	SYS_SETHOSTNAME                  = 4074
	SYS_SETRLIMIT                    = 4075
	SYS_GETRLIMIT                    = 4076
	SYS_GETRUSAGE                    = 4077
	SYS_GETTIMEOFDAY                 = 4078
	SYS_SETTIMEOFDAY                 = 4079
	SYS_GETGROUPS                    = 4080
	SYS_SETGROUPS                    = 4081
	SYS_RESERVED82                   = 4082
	SYS_SYMLINK                      = 4083
	SYS_UNUSED84                     = 4084
	SYS_READLINK                     = 4085
	SYS_USELIB                       = 4086
	SYS_SWAPON                       = 4087
	SYS_REBOOT                       = 4088
	SYS_READDIR                      = 4089
	SYS_MMAP                         = 4090
	SYS_MUNMAP                       = 4091
	SYS_TRUNCATE                     = 4092
	SYS_FTRUNCATE                    = 4093
	SYS_FCHMOD                       = 4094
	SYS_FCHOWN                       = 4095
	SYS_GETPRIORITY                  = 4096
	SYS_SETPRIORITY                  = 4097
	SYS_PROFIL                       = 4098
	SYS_STATFS                       = 4099
	SYS_FSTATFS                      = 4100
	SYS_IOPERM                       = 4101
	SYS_SOCKETCALL                   = 4102
	SYS_SYSLOG                       = 4103
	SYS_SETITIMER                    = 4104
	SYS_GETITIMER                    = 4105
	SYS_STAT                         = 4106
	SYS_LSTAT                        = 4107
	SYS_FSTAT                        = 4108
	SYS_UNUSED109                    = 4109
	SYS_IOPL                         = 4110
	SYS_VHANGUP                      = 4111
	SYS_IDLE                         = 4112
	SYS_VM86                         = 4113
	SYS_WAIT4                        = 4114
	SYS_SWAPOFF                      = 4115
	SYS_SYSINFO                      = 4116
	SYS_IPC                          = 4117
	SYS_FSYNC                        = 4118
	SYS_SIGRETURN                    = 4119
	SYS_CLONE                        = 4120
	SYS_SETDOMAINNAME                = 4121
	SYS_UNAME                        = 4122
	SYS_MODIFY_LDT                   = 4123
	SYS_ADJTIMEX                     = 4124
	SYS_MPROTECT                     = 4125
	SYS_SIGPROCMASK                  = 4126
	SYS_CREATE_MODULE                = 4127
	SYS_INIT_MODULE                  = 4128
	SYS_DELETE_MODULE                = 4129
	SYS_GET_KERNEL_SYMS              = 4130
	SYS_QUOTACTL                     = 4131
	SYS_GETPGID                      = 4132
	SYS_FCHDIR                       = 4133
	SYS_BDFLUSH                      = 4134
	SYS_SYSFS                        = 4135
	SYS_PERSONALITY                  = 4136
	SYS_AFS_SYSCALL                  = 4137
	SYS_SETFSUID                     = 4138
	SYS_SETFSGID                     = 4139
	SYS__LLSEEK                      = 4140
	SYS_GETDENTS                     = 4141
	SYS__NEWSELECT                   = 4142
	SYS_FLOCK                        = 4143
	SYS_MSYNC                        = 4144
	SYS_READV                        = 4145
	SYS_WRITEV                       = 4146
	SYS_CACHEFLUSH                   = 4147
	SYS_CACHECTL                     = 4148
	SYS_SYSMIPS                      = 4149
	SYS_UNUSED150                    = 4150
	SYS_GETSID                       = 4151
	SYS_FDATASYNC                    = 4152
	SYS__SYSCTL                      = 4153
	SYS_MLOCK                        = 4154
	SYS_MUNLOCK                      = 4155
	SYS_MLOCKALL                     = 4156
	SYS_MUNLOCKALL                   = 4157
	SYS_SCHED_SETPARAM               = 4158
	SYS_SCHED_GETPARAM               = 4159
	SYS_SCHED_SETSCHEDULER           = 4160
	SYS_SCHED_GETSCHEDULER           = 4161
	SYS_SCHED_YIELD                  = 4162
	SYS_SCHED_GET_PRIORITY_MAX       = 4163
	SYS_SCHED_GET_PRIORITY_MIN       = 4164
	SYS_SCHED_RR_GET_INTERVAL        = 4165
	SYS_NANOSLEEP                    = 4166
	SYS_MREMAP                       = 4167
	SYS_ACCEPT                       = 4168
	SYS_BIND                         = 4169
	SYS_CONNECT                      = 4170
	SYS_GETPEERNAME                  = 4171
	SYS_GETSOCKNAME                  = 4172
	SYS_GETSOCKOPT                   = 4173
	SYS_LISTEN                       = 4174
	SYS_RECV                         = 4175
	SYS_RECVFROM                     = 4176
	SYS_RECVMSG                      = 4177
	SYS_SEND                         = 4178
	SYS_SENDMSG                      = 4179
	SYS_SENDTO                       = 4180
	SYS_SETSOCKOPT                   = 4181
	SYS_SHUTDOWN                     = 4182
	SYS_SOCKET                       = 4183
	SYS_SOCKETPAIR                   = 4184
	SYS_SETRESUID                    = 4185
	SYS_GETRESUID                    = 4186
	SYS_QUERY_MODULE                 = 4187
	SYS_POLL                         = 4188
	SYS_NFSSERVCTL                   = 4189
	SYS_SETRESGID                    = 4190
	SYS_GETRESGID                    = 4191
	SYS_PRCTL                        = 4192
	SYS_RT_SIGRETURN                 = 4193
	SYS_RT_SIGACTION                 = 4194
	SYS_RT_SIGPROCMASK               = 4195
	SYS_RT_SIGPENDING                = 4196
	SYS_RT_SIGTIMEDWAIT              = 4197
	SYS_RT_SIGQUEUEINFO              = 4198
	SYS_RT_SIGSUSPEND                = 4199
	SYS_PREAD64                      = 4200
	SYS_PWRITE64                     = 4201
	SYS_CHOWN                        = 4202
	SYS_GETCWD                       = 4203
	SYS_CAPGET                       = 4204
	SYS_CAPSET                       = 4205
	SYS_SIGALTSTACK                  = 4206
	SYS_SENDFILE                     = 4207
	SYS_GETPMSG                      = 4208
	SYS_PUTPMSG                      = 4209
	SYS_MMAP2                        = 4210
	SYS_TRUNCATE64                   = 4211
	SYS_FTRUNCATE64                  = 4212
	SYS_STAT64                       = 4213
	SYS_LSTAT64                      = 4214
	SYS_FSTAT64                      = 4215
	SYS_PIVOT_ROOT                   = 4216
	SYS_MINCORE                      = 4217
	SYS_MADVISE                      = 4218
	SYS_GETDENTS64                   = 4219
	SYS_FCNTL64                      = 4220
	SYS_RESERVED221                  = 4221
	SYS_GETTID                       = 4222
	SYS_READAHEAD                    = 4223
	SYS_SETXATTR                     = 4224
	SYS_LSETXATTR                    = 4225
	SYS_FSETXATTR                    = 4226
	SYS_GETXATTR                     = 4227
	SYS_LGETXATTR                    = 4228
	SYS_FGETXATTR                    = 4229
	SYS_LISTXATTR                    = 4230
	SYS_LLISTXATTR                   = 4231
	SYS_FLISTXATTR                   = 4232
	SYS_REMOVEXATTR                  = 4233
	SYS_LREMOVEXATTR                 = 4234
	SYS_FREMOVEXATTR                 = 4235
	SYS_TKILL                        = 4236
	SYS_SENDFILE64                   = 4237
	SYS_FUTEX                        = 4238
	SYS_SCHED_SETAFFINITY            = 4239
	SYS_SCHED_GETAFFINITY            = 4240
	SYS_IO_SETUP                     = 4241
	SYS_IO_DESTROY                   = 4242
	SYS_IO_GETEVENTS                 = 4243
	SYS_IO_SUBMIT                    = 4244
	SYS_IO_CANCEL                    = 4245
	SYS_EXIT_GROUP                   = 4246
	SYS_LOOKUP_DCOOKIE               = 4247
	SYS_EPOLL_CREATE                 = 4248
	SYS_EPOLL_CTL                    = 4249
	SYS_EPOLL_WAIT                   = 4250
	SYS_REMAP_FILE_PAGES             = 4251
	SYS_SET_TID_ADDRESS              = 4252
	SYS_RESTART_SYSCALL              = 4253
	SYS_FADVISE64                    = 4254
	SYS_STATFS64                     = 4255
	SYS_FSTATFS64                    = 4256
	SYS_TIMER_CREATE                 = 4257
	SYS_TIMER_SETTIME                = 4258
	SYS_TIMER_GETTIME                = 4259
	SYS_TIMER_GETOVERRUN             = 4260
	SYS_TIMER_DELETE                 = 4261
	SYS_CLOCK_SETTIME                = 4262
	SYS_CLOCK_GETTIME                = 4263
	SYS_CLOCK_GETRES                 = 4264
	SYS_CLOCK_NANOSLEEP              = 4265
	SYS_TGKILL                       = 4266
	SYS_UTIMES                       = 4267
	SYS_MBIND                        = 4268
	SYS_GET_MEMPOLICY                = 4269
	SYS_SET_MEMPOLICY                = 4270
	SYS_MQ_OPEN                      = 4271
	SYS_MQ_UNLINK                    = 4272
	SYS_MQ_TIMEDSEND                 = 4273
	SYS_MQ_TIMEDRECEIVE              = 4274
	SYS_MQ_NOTIFY                    = 4275
	SYS_MQ_GETSETATTR                = 4276
	SYS_VSERVER                      = 4277
	SYS_WAITID                       = 4278
	SYS_ADD_KEY                      = 4280
	SYS_REQUEST_KEY                  = 4281
	SYS_KEYCTL                       = 4282
	SYS_SET_THREAD_AREA              = 4283
	SYS_INOTIFY_INIT                 = 4284
	SYS_INOTIFY_ADD_WATCH            = 4285
	SYS_INOTIFY_RM_WATCH             = 4286
	SYS_MIGRATE_PAGES                = 4287
	SYS_OPENAT                       = 4288
	SYS_MKDIRAT                      = 4289
	SYS_MKNODAT                      = 4290
	SYS_FCHOWNAT                     = 4291
	SYS_FUTIMESAT                    = 4292
	SYS_FSTATAT64                    = 4293
	SYS_UNLINKAT                     = 4294
	SYS_RENAMEAT                     = 4295
	SYS_LINKAT                       = 4296
	SYS_SYMLINKAT                    = 4297
	SYS_READLINKAT                   = 4298
	SYS_FCHMODAT                     = 4299
	SYS_FACCESSAT                    = 4300
	SYS_PSELECT6                     = 4301
	SYS_PPOLL                        = 4302
	SYS_UNSHARE                      = 4303
	SYS_SPLICE                       = 4304
	SYS_SYNC_FILE_RANGE              = 4305
	SYS_TEE                          = 4306
	SYS_VMSPLICE                     = 4307
	SYS_MOVE_PAGES                   = 4308
	SYS_SET_ROBUST_LIST              = 4309
	SYS_GET_ROBUST_LIST              = 4310
	SYS_KEXEC_LOAD                   = 4311
	SYS_GETCPU                       = 4312
	SYS_EPOLL_PWAIT                  = 4313
	SYS_IOPRIO_SET                   = 4314
	SYS_IOPRIO_GET                   = 4315
	SYS_UTIMENSAT                    = 4316
	SYS_SIGNALFD                     = 4317
	SYS_TIMERFD                      = 4318
	SYS_EVENTFD                      = 4319
	SYS_FALLOCATE                    = 4320
	SYS_TIMERFD_CREATE               = 4321
	SYS_TIMERFD_GETTIME              = 4322
	SYS_TIMERFD_SETTIME              = 4323
	SYS_SIGNALFD4                    = 4324
	SYS_EVENTFD2                     = 4325
	SYS_EPOLL_CREATE1                = 4326
	SYS_DUP3                         = 4327
	SYS_PIPE2                        = 4328
	SYS_INOTIFY_INIT1                = 4329
	SYS_PREADV                       = 4330
	SYS_PWRITEV                      = 4331
	SYS_RT_TGSIGQUEUEINFO            = 4332
	SYS_PERF_EVENT_OPEN              = 4333
	SYS_ACCEPT4                      = 4334
	SYS_RECVMMSG                     = 4335
	SYS_FANOTIFY_INIT                = 4336
	SYS_FANOTIFY_MARK                = 4337
	SYS_PRLIMIT64                    = 4338
	SYS_NAME_TO_HANDLE_AT            = 4339
	SYS_OPEN_BY_HANDLE_AT            = 4340
	SYS_CLOCK_ADJTIME                = 4341
	SYS_SYNCFS                       = 4342
	SYS_SENDMMSG                     = 4343
	SYS_SETNS                        = 4344
	SYS_PROCESS_VM_READV             = 4345
	SYS_PROCESS_VM_WRITEV            = 4346
	SYS_KCMP                         = 4347
	SYS_FINIT_MODULE                 = 4348
	SYS_SCHED_SETATTR                = 4349
	SYS_SCHED_GETATTR                = 4350
	SYS_RENAMEAT2                    = 4351
	SYS_SECCOMP                      = 4352
	SYS_GETRANDOM                    = 4353
	SYS_MEMFD_CREATE                 = 4354
	SYS_BPF                          = 4355
	SYS_EXECVEAT                     = 4356
	SYS_USERFAULTFD                  = 4357
	SYS_MEMBARRIER                   = 4358
	SYS_MLOCK2                       = 4359
	SYS_COPY_FILE_RANGE              = 4360
	SYS_PREADV2                      = 4361
	SYS_PWRITEV2                     = 4362
	SYS_PKEY_MPROTECT                = 4363
	SYS_PKEY_ALLOC                   = 4364
	SYS_PKEY_FREE                    = 4365
	SYS_STATX                        = 4366
	SYS_RSEQ                         = 4367
	SYS_IO_PGETEVENTS                = 4368
	SYS_SEMGET                       = 4393
	SYS_SEMCTL                       = 4394
	SYS_SHMGET                       = 4395
	SYS_SHMCTL                       = 4396
	SYS_SHMAT                        = 4397
	SYS_SHMDT                        = 4398
	SYS_MSGGET                       = 4399
	SYS_MSGSND                       = 4400
	SYS_MSGRCV                       = 4401
	SYS_MSGCTL                       = 4402
	SYS_CLOCK_GETTIME64              = 4403
	SYS_CLOCK_SETTIME64              = 4404
	SYS_CLOCK_ADJTIME64              = 4405
	SYS_CLOCK_GETRES_TIME64          = 4406
	SYS_CLOCK_NANOSLEEP_TIME64       = 4407
	SYS_TIMER_GETTIME64              = 4408
	SYS_TIMER_SETTIME64              = 4409
	SYS_TIMERFD_GETTIME64            = 4410
	SYS_TIMERFD_SETTIME64            = 4411
	SYS_UTIMENSAT_TIME64             = 4412
	SYS_PSELECT6_TIME64              = 4413
	SYS_PPOLL_TIME64                 = 4414
	SYS_IO_PGETEVENTS_TIME64         = 4416
	SYS_RECVMMSG_TIME64              = 4417
	SYS_MQ_TIMEDSEND_TIME64          = 4418
	SYS_MQ_TIMEDRECEIVE_TIME64       = 4419
	SYS_SEMTIMEDOP_TIME64            = 4420
	SYS_RT_SIGTIMEDWAIT_TIME64       = 4421
	SYS_FUTEX_TIME64                 = 4422
	SYS_SCHED_RR_GET_INTERVAL_TIME64 = 4423
	SYS_PIDFD_SEND_SIGNAL            = 4424
	SYS_IO_URING_SETUP               = 4425
	SYS_IO_URING_ENTER               = 4426
	SYS_IO_URING_REGISTER            = 4427
	SYS_OPEN_TREE                    = 4428
	SYS_MOVE_MOUNT                   = 4429
	SYS_FSOPEN                       = 4430
	SYS_FSCONFIG                     = 4431
	SYS_FSMOUNT                      = 4432
	SYS_FSPICK                       = 4433
	SYS_PIDFD_OPEN                   = 4434
	SYS_CLONE3                       = 4435
	SYS_CLOSE_RANGE                  = 4436
	SYS_OPENAT2                      = 4437
	SYS_PIDFD_GETFD                  = 4438
	SYS_FACCESSAT2                   = 4439
	SYS_PROCESS_MADVISE              = 4440
	SYS_EPOLL_PWAIT2                 = 4441
	SYS_MOUNT_SETATTR                = 4442
	SYS_QUOTACTL_FD                  = 4443
	SYS_LANDLOCK_CREATE_RULESET      = 4444
	SYS_LANDLOCK_ADD_RULE            = 4445
	SYS_LANDLOCK_RESTRICT_SELF       = 4446
	SYS_PROCESS_MRELEASE             = 4448
	SYS_FUTEX_WAITV                  = 4449
	SYS_SET_MEMPOLICY_HOME_NODE      = 4450
)
   07070100000E97000081A4000000000000000000000001645E367C000043D7000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go // go run linux/mksysnum.go -Wall -Werror -static -I/tmp/ppc/include /tmp/ppc/include/asm/unistd.h
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build ppc && linux
// +build ppc,linux

package unix

const (
	SYS_RESTART_SYSCALL              = 0
	SYS_EXIT                         = 1
	SYS_FORK                         = 2
	SYS_READ                         = 3
	SYS_WRITE                        = 4
	SYS_OPEN                         = 5
	SYS_CLOSE                        = 6
	SYS_WAITPID                      = 7
	SYS_CREAT                        = 8
	SYS_LINK                         = 9
	SYS_UNLINK                       = 10
	SYS_EXECVE                       = 11
	SYS_CHDIR                        = 12
	SYS_TIME                         = 13
	SYS_MKNOD                        = 14
	SYS_CHMOD                        = 15
	SYS_LCHOWN                       = 16
	SYS_BREAK                        = 17
	SYS_OLDSTAT                      = 18
	SYS_LSEEK                        = 19
	SYS_GETPID                       = 20
	SYS_MOUNT                        = 21
	SYS_UMOUNT                       = 22
	SYS_SETUID                       = 23
	SYS_GETUID                       = 24
	SYS_STIME                        = 25
	SYS_PTRACE                       = 26
	SYS_ALARM                        = 27
	SYS_OLDFSTAT                     = 28
	SYS_PAUSE                        = 29
	SYS_UTIME                        = 30
	SYS_STTY                         = 31
	SYS_GTTY                         = 32
	SYS_ACCESS                       = 33
	SYS_NICE                         = 34
	SYS_FTIME                        = 35
	SYS_SYNC                         = 36
	SYS_KILL                         = 37
	SYS_RENAME                       = 38
	SYS_MKDIR                        = 39
	SYS_RMDIR                        = 40
	SYS_DUP                          = 41
	SYS_PIPE                         = 42
	SYS_TIMES                        = 43
	SYS_PROF                         = 44
	SYS_BRK                          = 45
	SYS_SETGID                       = 46
	SYS_GETGID                       = 47
	SYS_SIGNAL                       = 48
	SYS_GETEUID                      = 49
	SYS_GETEGID                      = 50
	SYS_ACCT                         = 51
	SYS_UMOUNT2                      = 52
	SYS_LOCK                         = 53
	SYS_IOCTL                        = 54
	SYS_FCNTL                        = 55
	SYS_MPX                          = 56
	SYS_SETPGID                      = 57
	SYS_ULIMIT                       = 58
	SYS_OLDOLDUNAME                  = 59
	SYS_UMASK                        = 60
	SYS_CHROOT                       = 61
	SYS_USTAT                        = 62
	SYS_DUP2                         = 63
	SYS_GETPPID                      = 64
	SYS_GETPGRP                      = 65
	SYS_SETSID                       = 66
	SYS_SIGACTION                    = 67
	SYS_SGETMASK                     = 68
	SYS_SSETMASK                     = 69
	SYS_SETREUID                     = 70
	SYS_SETREGID                     = 71
	SYS_SIGSUSPEND                   = 72
	SYS_SIGPENDING                   = 73
	SYS_SETHOSTNAME                  = 74
	SYS_SETRLIMIT                    = 75
	SYS_GETRLIMIT                    = 76
	SYS_GETRUSAGE                    = 77
	SYS_GETTIMEOFDAY                 = 78
	SYS_SETTIMEOFDAY                 = 79
	SYS_GETGROUPS                    = 80
	SYS_SETGROUPS                    = 81
	SYS_SELECT                       = 82
	SYS_SYMLINK                      = 83
	SYS_OLDLSTAT                     = 84
	SYS_READLINK                     = 85
	SYS_USELIB                       = 86
	SYS_SWAPON                       = 87
	SYS_REBOOT                       = 88
	SYS_READDIR                      = 89
	SYS_MMAP                         = 90
	SYS_MUNMAP                       = 91
	SYS_TRUNCATE                     = 92
	SYS_FTRUNCATE                    = 93
	SYS_FCHMOD                       = 94
	SYS_FCHOWN                       = 95
	SYS_GETPRIORITY                  = 96
	SYS_SETPRIORITY                  = 97
	SYS_PROFIL                       = 98
	SYS_STATFS                       = 99
	SYS_FSTATFS                      = 100
	SYS_IOPERM                       = 101
	SYS_SOCKETCALL                   = 102
	SYS_SYSLOG                       = 103
	SYS_SETITIMER                    = 104
	SYS_GETITIMER                    = 105
	SYS_STAT                         = 106
	SYS_LSTAT                        = 107
	SYS_FSTAT                        = 108
	SYS_OLDUNAME                     = 109
	SYS_IOPL                         = 110
	SYS_VHANGUP                      = 111
	SYS_IDLE                         = 112
	SYS_VM86                         = 113
	SYS_WAIT4                        = 114
	SYS_SWAPOFF                      = 115
	SYS_SYSINFO                      = 116
	SYS_IPC                          = 117
	SYS_FSYNC                        = 118
	SYS_SIGRETURN                    = 119
	SYS_CLONE                        = 120
	SYS_SETDOMAINNAME                = 121
	SYS_UNAME                        = 122
	SYS_MODIFY_LDT                   = 123
	SYS_ADJTIMEX                     = 124
	SYS_MPROTECT                     = 125
	SYS_SIGPROCMASK                  = 126
	SYS_CREATE_MODULE                = 127
	SYS_INIT_MODULE                  = 128
	SYS_DELETE_MODULE                = 129
	SYS_GET_KERNEL_SYMS              = 130
	SYS_QUOTACTL                     = 131
	SYS_GETPGID                      = 132
	SYS_FCHDIR                       = 133
	SYS_BDFLUSH                      = 134
	SYS_SYSFS                        = 135
	SYS_PERSONALITY                  = 136
	SYS_AFS_SYSCALL                  = 137
	SYS_SETFSUID                     = 138
	SYS_SETFSGID                     = 139
	SYS__LLSEEK                      = 140
	SYS_GETDENTS                     = 141
	SYS__NEWSELECT                   = 142
	SYS_FLOCK                        = 143
	SYS_MSYNC                        = 144
	SYS_READV                        = 145
	SYS_WRITEV                       = 146
	SYS_GETSID                       = 147
	SYS_FDATASYNC                    = 148
	SYS__SYSCTL                      = 149
	SYS_MLOCK                        = 150
	SYS_MUNLOCK                      = 151
	SYS_MLOCKALL                     = 152
	SYS_MUNLOCKALL                   = 153
	SYS_SCHED_SETPARAM               = 154
	SYS_SCHED_GETPARAM               = 155
	SYS_SCHED_SETSCHEDULER           = 156
	SYS_SCHED_GETSCHEDULER           = 157
	SYS_SCHED_YIELD                  = 158
	SYS_SCHED_GET_PRIORITY_MAX       = 159
	SYS_SCHED_GET_PRIORITY_MIN       = 160
	SYS_SCHED_RR_GET_INTERVAL        = 161
	SYS_NANOSLEEP                    = 162
	SYS_MREMAP                       = 163
	SYS_SETRESUID                    = 164
	SYS_GETRESUID                    = 165
	SYS_QUERY_MODULE                 = 166
	SYS_POLL                         = 167
	SYS_NFSSERVCTL                   = 168
	SYS_SETRESGID                    = 169
	SYS_GETRESGID                    = 170
	SYS_PRCTL                        = 171
	SYS_RT_SIGRETURN                 = 172
	SYS_RT_SIGACTION                 = 173
	SYS_RT_SIGPROCMASK               = 174
	SYS_RT_SIGPENDING                = 175
	SYS_RT_SIGTIMEDWAIT              = 176
	SYS_RT_SIGQUEUEINFO              = 177
	SYS_RT_SIGSUSPEND                = 178
	SYS_PREAD64                      = 179
	SYS_PWRITE64                     = 180
	SYS_CHOWN                        = 181
	SYS_GETCWD                       = 182
	SYS_CAPGET                       = 183
	SYS_CAPSET                       = 184
	SYS_SIGALTSTACK                  = 185
	SYS_SENDFILE                     = 186
	SYS_GETPMSG                      = 187
	SYS_PUTPMSG                      = 188
	SYS_VFORK                        = 189
	SYS_UGETRLIMIT                   = 190
	SYS_READAHEAD                    = 191
	SYS_MMAP2                        = 192
	SYS_TRUNCATE64                   = 193
	SYS_FTRUNCATE64                  = 194
	SYS_STAT64                       = 195
	SYS_LSTAT64                      = 196
	SYS_FSTAT64                      = 197
	SYS_PCICONFIG_READ               = 198
	SYS_PCICONFIG_WRITE              = 199
	SYS_PCICONFIG_IOBASE             = 200
	SYS_MULTIPLEXER                  = 201
	SYS_GETDENTS64                   = 202
	SYS_PIVOT_ROOT                   = 203
	SYS_FCNTL64                      = 204
	SYS_MADVISE                      = 205
	SYS_MINCORE                      = 206
	SYS_GETTID                       = 207
	SYS_TKILL                        = 208
	SYS_SETXATTR                     = 209
	SYS_LSETXATTR                    = 210
	SYS_FSETXATTR                    = 211
	SYS_GETXATTR                     = 212
	SYS_LGETXATTR                    = 213
	SYS_FGETXATTR                    = 214
	SYS_LISTXATTR                    = 215
	SYS_LLISTXATTR                   = 216
	SYS_FLISTXATTR                   = 217
	SYS_REMOVEXATTR                  = 218
	SYS_LREMOVEXATTR                 = 219
	SYS_FREMOVEXATTR                 = 220
	SYS_FUTEX                        = 221
	SYS_SCHED_SETAFFINITY            = 222
	SYS_SCHED_GETAFFINITY            = 223
	SYS_TUXCALL                      = 225
	SYS_SENDFILE64                   = 226
	SYS_IO_SETUP                     = 227
	SYS_IO_DESTROY                   = 228
	SYS_IO_GETEVENTS                 = 229
	SYS_IO_SUBMIT                    = 230
	SYS_IO_CANCEL                    = 231
	SYS_SET_TID_ADDRESS              = 232
	SYS_FADVISE64                    = 233
	SYS_EXIT_GROUP                   = 234
	SYS_LOOKUP_DCOOKIE               = 235
	SYS_EPOLL_CREATE                 = 236
	SYS_EPOLL_CTL                    = 237
	SYS_EPOLL_WAIT                   = 238
	SYS_REMAP_FILE_PAGES             = 239
	SYS_TIMER_CREATE                 = 240
	SYS_TIMER_SETTIME                = 241
	SYS_TIMER_GETTIME                = 242
	SYS_TIMER_GETOVERRUN             = 243
	SYS_TIMER_DELETE                 = 244
	SYS_CLOCK_SETTIME                = 245
	SYS_CLOCK_GETTIME                = 246
	SYS_CLOCK_GETRES                 = 247
	SYS_CLOCK_NANOSLEEP              = 248
	SYS_SWAPCONTEXT                  = 249
	SYS_TGKILL                       = 250
	SYS_UTIMES                       = 251
	SYS_STATFS64                     = 252
	SYS_FSTATFS64                    = 253
	SYS_FADVISE64_64                 = 254
	SYS_RTAS                         = 255
	SYS_SYS_DEBUG_SETCONTEXT         = 256
	SYS_MIGRATE_PAGES                = 258
	SYS_MBIND                        = 259
	SYS_GET_MEMPOLICY                = 260
	SYS_SET_MEMPOLICY                = 261
	SYS_MQ_OPEN                      = 262
	SYS_MQ_UNLINK                    = 263
	SYS_MQ_TIMEDSEND                 = 264
	SYS_MQ_TIMEDRECEIVE              = 265
	SYS_MQ_NOTIFY                    = 266
	SYS_MQ_GETSETATTR                = 267
	SYS_KEXEC_LOAD                   = 268
	SYS_ADD_KEY                      = 269
	SYS_REQUEST_KEY                  = 270
	SYS_KEYCTL                       = 271
	SYS_WAITID                       = 272
	SYS_IOPRIO_SET                   = 273
	SYS_IOPRIO_GET                   = 274
	SYS_INOTIFY_INIT                 = 275
	SYS_INOTIFY_ADD_WATCH            = 276
	SYS_INOTIFY_RM_WATCH             = 277
	SYS_SPU_RUN                      = 278
	SYS_SPU_CREATE                   = 279
	SYS_PSELECT6                     = 280
	SYS_PPOLL                        = 281
	SYS_UNSHARE                      = 282
	SYS_SPLICE                       = 283
	SYS_TEE                          = 284
	SYS_VMSPLICE                     = 285
	SYS_OPENAT                       = 286
	SYS_MKDIRAT                      = 287
	SYS_MKNODAT                      = 288
	SYS_FCHOWNAT                     = 289
	SYS_FUTIMESAT                    = 290
	SYS_FSTATAT64                    = 291
	SYS_UNLINKAT                     = 292
	SYS_RENAMEAT                     = 293
	SYS_LINKAT                       = 294
	SYS_SYMLINKAT                    = 295
	SYS_READLINKAT                   = 296
	SYS_FCHMODAT                     = 297
	SYS_FACCESSAT                    = 298
	SYS_GET_ROBUST_LIST              = 299
	SYS_SET_ROBUST_LIST              = 300
	SYS_MOVE_PAGES                   = 301
	SYS_GETCPU                       = 302
	SYS_EPOLL_PWAIT                  = 303
	SYS_UTIMENSAT                    = 304
	SYS_SIGNALFD                     = 305
	SYS_TIMERFD_CREATE               = 306
	SYS_EVENTFD                      = 307
	SYS_SYNC_FILE_RANGE2             = 308
	SYS_FALLOCATE                    = 309
	SYS_SUBPAGE_PROT                 = 310
	SYS_TIMERFD_SETTIME              = 311
	SYS_TIMERFD_GETTIME              = 312
	SYS_SIGNALFD4                    = 313
	SYS_EVENTFD2                     = 314
	SYS_EPOLL_CREATE1                = 315
	SYS_DUP3                         = 316
	SYS_PIPE2                        = 317
	SYS_INOTIFY_INIT1                = 318
	SYS_PERF_EVENT_OPEN              = 319
	SYS_PREADV                       = 320
	SYS_PWRITEV                      = 321
	SYS_RT_TGSIGQUEUEINFO            = 322
	SYS_FANOTIFY_INIT                = 323
	SYS_FANOTIFY_MARK                = 324
	SYS_PRLIMIT64                    = 325
	SYS_SOCKET                       = 326
	SYS_BIND                         = 327
	SYS_CONNECT                      = 328
	SYS_LISTEN                       = 329
	SYS_ACCEPT                       = 330
	SYS_GETSOCKNAME                  = 331
	SYS_GETPEERNAME                  = 332
	SYS_SOCKETPAIR                   = 333
	SYS_SEND                         = 334
	SYS_SENDTO                       = 335
	SYS_RECV                         = 336
	SYS_RECVFROM                     = 337
	SYS_SHUTDOWN                     = 338
	SYS_SETSOCKOPT                   = 339
	SYS_GETSOCKOPT                   = 340
	SYS_SENDMSG                      = 341
	SYS_RECVMSG                      = 342
	SYS_RECVMMSG                     = 343
	SYS_ACCEPT4                      = 344
	SYS_NAME_TO_HANDLE_AT            = 345
	SYS_OPEN_BY_HANDLE_AT            = 346
	SYS_CLOCK_ADJTIME                = 347
	SYS_SYNCFS                       = 348
	SYS_SENDMMSG                     = 349
	SYS_SETNS                        = 350
	SYS_PROCESS_VM_READV             = 351
	SYS_PROCESS_VM_WRITEV            = 352
	SYS_FINIT_MODULE                 = 353
	SYS_KCMP                         = 354
	SYS_SCHED_SETATTR                = 355
	SYS_SCHED_GETATTR                = 356
	SYS_RENAMEAT2                    = 357
	SYS_SECCOMP                      = 358
	SYS_GETRANDOM                    = 359
	SYS_MEMFD_CREATE                 = 360
	SYS_BPF                          = 361
	SYS_EXECVEAT                     = 362
	SYS_SWITCH_ENDIAN                = 363
	SYS_USERFAULTFD                  = 364
	SYS_MEMBARRIER                   = 365
	SYS_MLOCK2                       = 378
	SYS_COPY_FILE_RANGE              = 379
	SYS_PREADV2                      = 380
	SYS_PWRITEV2                     = 381
	SYS_KEXEC_FILE_LOAD              = 382
	SYS_STATX                        = 383
	SYS_PKEY_ALLOC                   = 384
	SYS_PKEY_FREE                    = 385
	SYS_PKEY_MPROTECT                = 386
	SYS_RSEQ                         = 387
	SYS_IO_PGETEVENTS                = 388
	SYS_SEMGET                       = 393
	SYS_SEMCTL                       = 394
	SYS_SHMGET                       = 395
	SYS_SHMCTL                       = 396
	SYS_SHMAT                        = 397
	SYS_SHMDT                        = 398
	SYS_MSGGET                       = 399
	SYS_MSGSND                       = 400
	SYS_MSGRCV                       = 401
	SYS_MSGCTL                       = 402
	SYS_CLOCK_GETTIME64              = 403
	SYS_CLOCK_SETTIME64              = 404
	SYS_CLOCK_ADJTIME64              = 405
	SYS_CLOCK_GETRES_TIME64          = 406
	SYS_CLOCK_NANOSLEEP_TIME64       = 407
	SYS_TIMER_GETTIME64              = 408
	SYS_TIMER_SETTIME64              = 409
	SYS_TIMERFD_GETTIME64            = 410
	SYS_TIMERFD_SETTIME64            = 411
	SYS_UTIMENSAT_TIME64             = 412
	SYS_PSELECT6_TIME64              = 413
	SYS_PPOLL_TIME64                 = 414
	SYS_IO_PGETEVENTS_TIME64         = 416
	SYS_RECVMMSG_TIME64              = 417
	SYS_MQ_TIMEDSEND_TIME64          = 418
	SYS_MQ_TIMEDRECEIVE_TIME64       = 419
	SYS_SEMTIMEDOP_TIME64            = 420
	SYS_RT_SIGTIMEDWAIT_TIME64       = 421
	SYS_FUTEX_TIME64                 = 422
	SYS_SCHED_RR_GET_INTERVAL_TIME64 = 423
	SYS_PIDFD_SEND_SIGNAL            = 424
	SYS_IO_URING_SETUP               = 425
	SYS_IO_URING_ENTER               = 426
	SYS_IO_URING_REGISTER            = 427
	SYS_OPEN_TREE                    = 428
	SYS_MOVE_MOUNT                   = 429
	SYS_FSOPEN                       = 430
	SYS_FSCONFIG                     = 431
	SYS_FSMOUNT                      = 432
	SYS_FSPICK                       = 433
	SYS_PIDFD_OPEN                   = 434
	SYS_CLONE3                       = 435
	SYS_CLOSE_RANGE                  = 436
	SYS_OPENAT2                      = 437
	SYS_PIDFD_GETFD                  = 438
	SYS_FACCESSAT2                   = 439
	SYS_PROCESS_MADVISE              = 440
	SYS_EPOLL_PWAIT2                 = 441
	SYS_MOUNT_SETATTR                = 442
	SYS_QUOTACTL_FD                  = 443
	SYS_LANDLOCK_CREATE_RULESET      = 444
	SYS_LANDLOCK_ADD_RULE            = 445
	SYS_LANDLOCK_RESTRICT_SELF       = 446
	SYS_PROCESS_MRELEASE             = 448
	SYS_FUTEX_WAITV                  = 449
	SYS_SET_MEMPOLICY_HOME_NODE      = 450
)
 07070100000E98000081A4000000000000000000000001645E367C000037A0000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go   // go run linux/mksysnum.go -Wall -Werror -static -I/tmp/ppc64/include /tmp/ppc64/include/asm/unistd.h
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build ppc64 && linux
// +build ppc64,linux

package unix

const (
	SYS_RESTART_SYSCALL         = 0
	SYS_EXIT                    = 1
	SYS_FORK                    = 2
	SYS_READ                    = 3
	SYS_WRITE                   = 4
	SYS_OPEN                    = 5
	SYS_CLOSE                   = 6
	SYS_WAITPID                 = 7
	SYS_CREAT                   = 8
	SYS_LINK                    = 9
	SYS_UNLINK                  = 10
	SYS_EXECVE                  = 11
	SYS_CHDIR                   = 12
	SYS_TIME                    = 13
	SYS_MKNOD                   = 14
	SYS_CHMOD                   = 15
	SYS_LCHOWN                  = 16
	SYS_BREAK                   = 17
	SYS_OLDSTAT                 = 18
	SYS_LSEEK                   = 19
	SYS_GETPID                  = 20
	SYS_MOUNT                   = 21
	SYS_UMOUNT                  = 22
	SYS_SETUID                  = 23
	SYS_GETUID                  = 24
	SYS_STIME                   = 25
	SYS_PTRACE                  = 26
	SYS_ALARM                   = 27
	SYS_OLDFSTAT                = 28
	SYS_PAUSE                   = 29
	SYS_UTIME                   = 30
	SYS_STTY                    = 31
	SYS_GTTY                    = 32
	SYS_ACCESS                  = 33
	SYS_NICE                    = 34
	SYS_FTIME                   = 35
	SYS_SYNC                    = 36
	SYS_KILL                    = 37
	SYS_RENAME                  = 38
	SYS_MKDIR                   = 39
	SYS_RMDIR                   = 40
	SYS_DUP                     = 41
	SYS_PIPE                    = 42
	SYS_TIMES                   = 43
	SYS_PROF                    = 44
	SYS_BRK                     = 45
	SYS_SETGID                  = 46
	SYS_GETGID                  = 47
	SYS_SIGNAL                  = 48
	SYS_GETEUID                 = 49
	SYS_GETEGID                 = 50
	SYS_ACCT                    = 51
	SYS_UMOUNT2                 = 52
	SYS_LOCK                    = 53
	SYS_IOCTL                   = 54
	SYS_FCNTL                   = 55
	SYS_MPX                     = 56
	SYS_SETPGID                 = 57
	SYS_ULIMIT                  = 58
	SYS_OLDOLDUNAME             = 59
	SYS_UMASK                   = 60
	SYS_CHROOT                  = 61
	SYS_USTAT                   = 62
	SYS_DUP2                    = 63
	SYS_GETPPID                 = 64
	SYS_GETPGRP                 = 65
	SYS_SETSID                  = 66
	SYS_SIGACTION               = 67
	SYS_SGETMASK                = 68
	SYS_SSETMASK                = 69
	SYS_SETREUID                = 70
	SYS_SETREGID                = 71
	SYS_SIGSUSPEND              = 72
	SYS_SIGPENDING              = 73
	SYS_SETHOSTNAME             = 74
	SYS_SETRLIMIT               = 75
	SYS_GETRLIMIT               = 76
	SYS_GETRUSAGE               = 77
	SYS_GETTIMEOFDAY            = 78
	SYS_SETTIMEOFDAY            = 79
	SYS_GETGROUPS               = 80
	SYS_SETGROUPS               = 81
	SYS_SELECT                  = 82
	SYS_SYMLINK                 = 83
	SYS_OLDLSTAT                = 84
	SYS_READLINK                = 85
	SYS_USELIB                  = 86
	SYS_SWAPON                  = 87
	SYS_REBOOT                  = 88
	SYS_READDIR                 = 89
	SYS_MMAP                    = 90
	SYS_MUNMAP                  = 91
	SYS_TRUNCATE                = 92
	SYS_FTRUNCATE               = 93
	SYS_FCHMOD                  = 94
	SYS_FCHOWN                  = 95
	SYS_GETPRIORITY             = 96
	SYS_SETPRIORITY             = 97
	SYS_PROFIL                  = 98
	SYS_STATFS                  = 99
	SYS_FSTATFS                 = 100
	SYS_IOPERM                  = 101
	SYS_SOCKETCALL              = 102
	SYS_SYSLOG                  = 103
	SYS_SETITIMER               = 104
	SYS_GETITIMER               = 105
	SYS_STAT                    = 106
	SYS_LSTAT                   = 107
	SYS_FSTAT                   = 108
	SYS_OLDUNAME                = 109
	SYS_IOPL                    = 110
	SYS_VHANGUP                 = 111
	SYS_IDLE                    = 112
	SYS_VM86                    = 113
	SYS_WAIT4                   = 114
	SYS_SWAPOFF                 = 115
	SYS_SYSINFO                 = 116
	SYS_IPC                     = 117
	SYS_FSYNC                   = 118
	SYS_SIGRETURN               = 119
	SYS_CLONE                   = 120
	SYS_SETDOMAINNAME           = 121
	SYS_UNAME                   = 122
	SYS_MODIFY_LDT              = 123
	SYS_ADJTIMEX                = 124
	SYS_MPROTECT                = 125
	SYS_SIGPROCMASK             = 126
	SYS_CREATE_MODULE           = 127
	SYS_INIT_MODULE             = 128
	SYS_DELETE_MODULE           = 129
	SYS_GET_KERNEL_SYMS         = 130
	SYS_QUOTACTL                = 131
	SYS_GETPGID                 = 132
	SYS_FCHDIR                  = 133
	SYS_BDFLUSH                 = 134
	SYS_SYSFS                   = 135
	SYS_PERSONALITY             = 136
	SYS_AFS_SYSCALL             = 137
	SYS_SETFSUID                = 138
	SYS_SETFSGID                = 139
	SYS__LLSEEK                 = 140
	SYS_GETDENTS                = 141
	SYS__NEWSELECT              = 142
	SYS_FLOCK                   = 143
	SYS_MSYNC                   = 144
	SYS_READV                   = 145
	SYS_WRITEV                  = 146
	SYS_GETSID                  = 147
	SYS_FDATASYNC               = 148
	SYS__SYSCTL                 = 149
	SYS_MLOCK                   = 150
	SYS_MUNLOCK                 = 151
	SYS_MLOCKALL                = 152
	SYS_MUNLOCKALL              = 153
	SYS_SCHED_SETPARAM          = 154
	SYS_SCHED_GETPARAM          = 155
	SYS_SCHED_SETSCHEDULER      = 156
	SYS_SCHED_GETSCHEDULER      = 157
	SYS_SCHED_YIELD             = 158
	SYS_SCHED_GET_PRIORITY_MAX  = 159
	SYS_SCHED_GET_PRIORITY_MIN  = 160
	SYS_SCHED_RR_GET_INTERVAL   = 161
	SYS_NANOSLEEP               = 162
	SYS_MREMAP                  = 163
	SYS_SETRESUID               = 164
	SYS_GETRESUID               = 165
	SYS_QUERY_MODULE            = 166
	SYS_POLL                    = 167
	SYS_NFSSERVCTL              = 168
	SYS_SETRESGID               = 169
	SYS_GETRESGID               = 170
	SYS_PRCTL                   = 171
	SYS_RT_SIGRETURN            = 172
	SYS_RT_SIGACTION            = 173
	SYS_RT_SIGPROCMASK          = 174
	SYS_RT_SIGPENDING           = 175
	SYS_RT_SIGTIMEDWAIT         = 176
	SYS_RT_SIGQUEUEINFO         = 177
	SYS_RT_SIGSUSPEND           = 178
	SYS_PREAD64                 = 179
	SYS_PWRITE64                = 180
	SYS_CHOWN                   = 181
	SYS_GETCWD                  = 182
	SYS_CAPGET                  = 183
	SYS_CAPSET                  = 184
	SYS_SIGALTSTACK             = 185
	SYS_SENDFILE                = 186
	SYS_GETPMSG                 = 187
	SYS_PUTPMSG                 = 188
	SYS_VFORK                   = 189
	SYS_UGETRLIMIT              = 190
	SYS_READAHEAD               = 191
	SYS_PCICONFIG_READ          = 198
	SYS_PCICONFIG_WRITE         = 199
	SYS_PCICONFIG_IOBASE        = 200
	SYS_MULTIPLEXER             = 201
	SYS_GETDENTS64              = 202
	SYS_PIVOT_ROOT              = 203
	SYS_MADVISE                 = 205
	SYS_MINCORE                 = 206
	SYS_GETTID                  = 207
	SYS_TKILL                   = 208
	SYS_SETXATTR                = 209
	SYS_LSETXATTR               = 210
	SYS_FSETXATTR               = 211
	SYS_GETXATTR                = 212
	SYS_LGETXATTR               = 213
	SYS_FGETXATTR               = 214
	SYS_LISTXATTR               = 215
	SYS_LLISTXATTR              = 216
	SYS_FLISTXATTR              = 217
	SYS_REMOVEXATTR             = 218
	SYS_LREMOVEXATTR            = 219
	SYS_FREMOVEXATTR            = 220
	SYS_FUTEX                   = 221
	SYS_SCHED_SETAFFINITY       = 222
	SYS_SCHED_GETAFFINITY       = 223
	SYS_TUXCALL                 = 225
	SYS_IO_SETUP                = 227
	SYS_IO_DESTROY              = 228
	SYS_IO_GETEVENTS            = 229
	SYS_IO_SUBMIT               = 230
	SYS_IO_CANCEL               = 231
	SYS_SET_TID_ADDRESS         = 232
	SYS_FADVISE64               = 233
	SYS_EXIT_GROUP              = 234
	SYS_LOOKUP_DCOOKIE          = 235
	SYS_EPOLL_CREATE            = 236
	SYS_EPOLL_CTL               = 237
	SYS_EPOLL_WAIT              = 238
	SYS_REMAP_FILE_PAGES        = 239
	SYS_TIMER_CREATE            = 240
	SYS_TIMER_SETTIME           = 241
	SYS_TIMER_GETTIME           = 242
	SYS_TIMER_GETOVERRUN        = 243
	SYS_TIMER_DELETE            = 244
	SYS_CLOCK_SETTIME           = 245
	SYS_CLOCK_GETTIME           = 246
	SYS_CLOCK_GETRES            = 247
	SYS_CLOCK_NANOSLEEP         = 248
	SYS_SWAPCONTEXT             = 249
	SYS_TGKILL                  = 250
	SYS_UTIMES                  = 251
	SYS_STATFS64                = 252
	SYS_FSTATFS64               = 253
	SYS_RTAS                    = 255
	SYS_SYS_DEBUG_SETCONTEXT    = 256
	SYS_MIGRATE_PAGES           = 258
	SYS_MBIND                   = 259
	SYS_GET_MEMPOLICY           = 260
	SYS_SET_MEMPOLICY           = 261
	SYS_MQ_OPEN                 = 262
	SYS_MQ_UNLINK               = 263
	SYS_MQ_TIMEDSEND            = 264
	SYS_MQ_TIMEDRECEIVE         = 265
	SYS_MQ_NOTIFY               = 266
	SYS_MQ_GETSETATTR           = 267
	SYS_KEXEC_LOAD              = 268
	SYS_ADD_KEY                 = 269
	SYS_REQUEST_KEY             = 270
	SYS_KEYCTL                  = 271
	SYS_WAITID                  = 272
	SYS_IOPRIO_SET              = 273
	SYS_IOPRIO_GET              = 274
	SYS_INOTIFY_INIT            = 275
	SYS_INOTIFY_ADD_WATCH       = 276
	SYS_INOTIFY_RM_WATCH        = 277
	SYS_SPU_RUN                 = 278
	SYS_SPU_CREATE              = 279
	SYS_PSELECT6                = 280
	SYS_PPOLL                   = 281
	SYS_UNSHARE                 = 282
	SYS_SPLICE                  = 283
	SYS_TEE                     = 284
	SYS_VMSPLICE                = 285
	SYS_OPENAT                  = 286
	SYS_MKDIRAT                 = 287
	SYS_MKNODAT                 = 288
	SYS_FCHOWNAT                = 289
	SYS_FUTIMESAT               = 290
	SYS_NEWFSTATAT              = 291
	SYS_UNLINKAT                = 292
	SYS_RENAMEAT                = 293
	SYS_LINKAT                  = 294
	SYS_SYMLINKAT               = 295
	SYS_READLINKAT              = 296
	SYS_FCHMODAT                = 297
	SYS_FACCESSAT               = 298
	SYS_GET_ROBUST_LIST         = 299
	SYS_SET_ROBUST_LIST         = 300
	SYS_MOVE_PAGES              = 301
	SYS_GETCPU                  = 302
	SYS_EPOLL_PWAIT             = 303
	SYS_UTIMENSAT               = 304
	SYS_SIGNALFD                = 305
	SYS_TIMERFD_CREATE          = 306
	SYS_EVENTFD                 = 307
	SYS_SYNC_FILE_RANGE2        = 308
	SYS_FALLOCATE               = 309
	SYS_SUBPAGE_PROT            = 310
	SYS_TIMERFD_SETTIME         = 311
	SYS_TIMERFD_GETTIME         = 312
	SYS_SIGNALFD4               = 313
	SYS_EVENTFD2                = 314
	SYS_EPOLL_CREATE1           = 315
	SYS_DUP3                    = 316
	SYS_PIPE2                   = 317
	SYS_INOTIFY_INIT1           = 318
	SYS_PERF_EVENT_OPEN         = 319
	SYS_PREADV                  = 320
	SYS_PWRITEV                 = 321
	SYS_RT_TGSIGQUEUEINFO       = 322
	SYS_FANOTIFY_INIT           = 323
	SYS_FANOTIFY_MARK           = 324
	SYS_PRLIMIT64               = 325
	SYS_SOCKET                  = 326
	SYS_BIND                    = 327
	SYS_CONNECT                 = 328
	SYS_LISTEN                  = 329
	SYS_ACCEPT                  = 330
	SYS_GETSOCKNAME             = 331
	SYS_GETPEERNAME             = 332
	SYS_SOCKETPAIR              = 333
	SYS_SEND                    = 334
	SYS_SENDTO                  = 335
	SYS_RECV                    = 336
	SYS_RECVFROM                = 337
	SYS_SHUTDOWN                = 338
	SYS_SETSOCKOPT              = 339
	SYS_GETSOCKOPT              = 340
	SYS_SENDMSG                 = 341
	SYS_RECVMSG                 = 342
	SYS_RECVMMSG                = 343
	SYS_ACCEPT4                 = 344
	SYS_NAME_TO_HANDLE_AT       = 345
	SYS_OPEN_BY_HANDLE_AT       = 346
	SYS_CLOCK_ADJTIME           = 347
	SYS_SYNCFS                  = 348
	SYS_SENDMMSG                = 349
	SYS_SETNS                   = 350
	SYS_PROCESS_VM_READV        = 351
	SYS_PROCESS_VM_WRITEV       = 352
	SYS_FINIT_MODULE            = 353
	SYS_KCMP                    = 354
	SYS_SCHED_SETATTR           = 355
	SYS_SCHED_GETATTR           = 356
	SYS_RENAMEAT2               = 357
	SYS_SECCOMP                 = 358
	SYS_GETRANDOM               = 359
	SYS_MEMFD_CREATE            = 360
	SYS_BPF                     = 361
	SYS_EXECVEAT                = 362
	SYS_SWITCH_ENDIAN           = 363
	SYS_USERFAULTFD             = 364
	SYS_MEMBARRIER              = 365
	SYS_MLOCK2                  = 378
	SYS_COPY_FILE_RANGE         = 379
	SYS_PREADV2                 = 380
	SYS_PWRITEV2                = 381
	SYS_KEXEC_FILE_LOAD         = 382
	SYS_STATX                   = 383
	SYS_PKEY_ALLOC              = 384
	SYS_PKEY_FREE               = 385
	SYS_PKEY_MPROTECT           = 386
	SYS_RSEQ                    = 387
	SYS_IO_PGETEVENTS           = 388
	SYS_SEMTIMEDOP              = 392
	SYS_SEMGET                  = 393
	SYS_SEMCTL                  = 394
	SYS_SHMGET                  = 395
	SYS_SHMCTL                  = 396
	SYS_SHMAT                   = 397
	SYS_SHMDT                   = 398
	SYS_MSGGET                  = 399
	SYS_MSGSND                  = 400
	SYS_MSGRCV                  = 401
	SYS_MSGCTL                  = 402
	SYS_PIDFD_SEND_SIGNAL       = 424
	SYS_IO_URING_SETUP          = 425
	SYS_IO_URING_ENTER          = 426
	SYS_IO_URING_REGISTER       = 427
	SYS_OPEN_TREE               = 428
	SYS_MOVE_MOUNT              = 429
	SYS_FSOPEN                  = 430
	SYS_FSCONFIG                = 431
	SYS_FSMOUNT                 = 432
	SYS_FSPICK                  = 433
	SYS_PIDFD_OPEN              = 434
	SYS_CLONE3                  = 435
	SYS_CLOSE_RANGE             = 436
	SYS_OPENAT2                 = 437
	SYS_PIDFD_GETFD             = 438
	SYS_FACCESSAT2              = 439
	SYS_PROCESS_MADVISE         = 440
	SYS_EPOLL_PWAIT2            = 441
	SYS_MOUNT_SETATTR           = 442
	SYS_QUOTACTL_FD             = 443
	SYS_LANDLOCK_CREATE_RULESET = 444
	SYS_LANDLOCK_ADD_RULE       = 445
	SYS_LANDLOCK_RESTRICT_SELF  = 446
	SYS_PROCESS_MRELEASE        = 448
	SYS_FUTEX_WAITV             = 449
	SYS_SET_MEMPOLICY_HOME_NODE = 450
)
07070100000E99000081A4000000000000000000000001645E367C000037A8000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go // go run linux/mksysnum.go -Wall -Werror -static -I/tmp/ppc64le/include /tmp/ppc64le/include/asm/unistd.h
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build ppc64le && linux
// +build ppc64le,linux

package unix

const (
	SYS_RESTART_SYSCALL         = 0
	SYS_EXIT                    = 1
	SYS_FORK                    = 2
	SYS_READ                    = 3
	SYS_WRITE                   = 4
	SYS_OPEN                    = 5
	SYS_CLOSE                   = 6
	SYS_WAITPID                 = 7
	SYS_CREAT                   = 8
	SYS_LINK                    = 9
	SYS_UNLINK                  = 10
	SYS_EXECVE                  = 11
	SYS_CHDIR                   = 12
	SYS_TIME                    = 13
	SYS_MKNOD                   = 14
	SYS_CHMOD                   = 15
	SYS_LCHOWN                  = 16
	SYS_BREAK                   = 17
	SYS_OLDSTAT                 = 18
	SYS_LSEEK                   = 19
	SYS_GETPID                  = 20
	SYS_MOUNT                   = 21
	SYS_UMOUNT                  = 22
	SYS_SETUID                  = 23
	SYS_GETUID                  = 24
	SYS_STIME                   = 25
	SYS_PTRACE                  = 26
	SYS_ALARM                   = 27
	SYS_OLDFSTAT                = 28
	SYS_PAUSE                   = 29
	SYS_UTIME                   = 30
	SYS_STTY                    = 31
	SYS_GTTY                    = 32
	SYS_ACCESS                  = 33
	SYS_NICE                    = 34
	SYS_FTIME                   = 35
	SYS_SYNC                    = 36
	SYS_KILL                    = 37
	SYS_RENAME                  = 38
	SYS_MKDIR                   = 39
	SYS_RMDIR                   = 40
	SYS_DUP                     = 41
	SYS_PIPE                    = 42
	SYS_TIMES                   = 43
	SYS_PROF                    = 44
	SYS_BRK                     = 45
	SYS_SETGID                  = 46
	SYS_GETGID                  = 47
	SYS_SIGNAL                  = 48
	SYS_GETEUID                 = 49
	SYS_GETEGID                 = 50
	SYS_ACCT                    = 51
	SYS_UMOUNT2                 = 52
	SYS_LOCK                    = 53
	SYS_IOCTL                   = 54
	SYS_FCNTL                   = 55
	SYS_MPX                     = 56
	SYS_SETPGID                 = 57
	SYS_ULIMIT                  = 58
	SYS_OLDOLDUNAME             = 59
	SYS_UMASK                   = 60
	SYS_CHROOT                  = 61
	SYS_USTAT                   = 62
	SYS_DUP2                    = 63
	SYS_GETPPID                 = 64
	SYS_GETPGRP                 = 65
	SYS_SETSID                  = 66
	SYS_SIGACTION               = 67
	SYS_SGETMASK                = 68
	SYS_SSETMASK                = 69
	SYS_SETREUID                = 70
	SYS_SETREGID                = 71
	SYS_SIGSUSPEND              = 72
	SYS_SIGPENDING              = 73
	SYS_SETHOSTNAME             = 74
	SYS_SETRLIMIT               = 75
	SYS_GETRLIMIT               = 76
	SYS_GETRUSAGE               = 77
	SYS_GETTIMEOFDAY            = 78
	SYS_SETTIMEOFDAY            = 79
	SYS_GETGROUPS               = 80
	SYS_SETGROUPS               = 81
	SYS_SELECT                  = 82
	SYS_SYMLINK                 = 83
	SYS_OLDLSTAT                = 84
	SYS_READLINK                = 85
	SYS_USELIB                  = 86
	SYS_SWAPON                  = 87
	SYS_REBOOT                  = 88
	SYS_READDIR                 = 89
	SYS_MMAP                    = 90
	SYS_MUNMAP                  = 91
	SYS_TRUNCATE                = 92
	SYS_FTRUNCATE               = 93
	SYS_FCHMOD                  = 94
	SYS_FCHOWN                  = 95
	SYS_GETPRIORITY             = 96
	SYS_SETPRIORITY             = 97
	SYS_PROFIL                  = 98
	SYS_STATFS                  = 99
	SYS_FSTATFS                 = 100
	SYS_IOPERM                  = 101
	SYS_SOCKETCALL              = 102
	SYS_SYSLOG                  = 103
	SYS_SETITIMER               = 104
	SYS_GETITIMER               = 105
	SYS_STAT                    = 106
	SYS_LSTAT                   = 107
	SYS_FSTAT                   = 108
	SYS_OLDUNAME                = 109
	SYS_IOPL                    = 110
	SYS_VHANGUP                 = 111
	SYS_IDLE                    = 112
	SYS_VM86                    = 113
	SYS_WAIT4                   = 114
	SYS_SWAPOFF                 = 115
	SYS_SYSINFO                 = 116
	SYS_IPC                     = 117
	SYS_FSYNC                   = 118
	SYS_SIGRETURN               = 119
	SYS_CLONE                   = 120
	SYS_SETDOMAINNAME           = 121
	SYS_UNAME                   = 122
	SYS_MODIFY_LDT              = 123
	SYS_ADJTIMEX                = 124
	SYS_MPROTECT                = 125
	SYS_SIGPROCMASK             = 126
	SYS_CREATE_MODULE           = 127
	SYS_INIT_MODULE             = 128
	SYS_DELETE_MODULE           = 129
	SYS_GET_KERNEL_SYMS         = 130
	SYS_QUOTACTL                = 131
	SYS_GETPGID                 = 132
	SYS_FCHDIR                  = 133
	SYS_BDFLUSH                 = 134
	SYS_SYSFS                   = 135
	SYS_PERSONALITY             = 136
	SYS_AFS_SYSCALL             = 137
	SYS_SETFSUID                = 138
	SYS_SETFSGID                = 139
	SYS__LLSEEK                 = 140
	SYS_GETDENTS                = 141
	SYS__NEWSELECT              = 142
	SYS_FLOCK                   = 143
	SYS_MSYNC                   = 144
	SYS_READV                   = 145
	SYS_WRITEV                  = 146
	SYS_GETSID                  = 147
	SYS_FDATASYNC               = 148
	SYS__SYSCTL                 = 149
	SYS_MLOCK                   = 150
	SYS_MUNLOCK                 = 151
	SYS_MLOCKALL                = 152
	SYS_MUNLOCKALL              = 153
	SYS_SCHED_SETPARAM          = 154
	SYS_SCHED_GETPARAM          = 155
	SYS_SCHED_SETSCHEDULER      = 156
	SYS_SCHED_GETSCHEDULER      = 157
	SYS_SCHED_YIELD             = 158
	SYS_SCHED_GET_PRIORITY_MAX  = 159
	SYS_SCHED_GET_PRIORITY_MIN  = 160
	SYS_SCHED_RR_GET_INTERVAL   = 161
	SYS_NANOSLEEP               = 162
	SYS_MREMAP                  = 163
	SYS_SETRESUID               = 164
	SYS_GETRESUID               = 165
	SYS_QUERY_MODULE            = 166
	SYS_POLL                    = 167
	SYS_NFSSERVCTL              = 168
	SYS_SETRESGID               = 169
	SYS_GETRESGID               = 170
	SYS_PRCTL                   = 171
	SYS_RT_SIGRETURN            = 172
	SYS_RT_SIGACTION            = 173
	SYS_RT_SIGPROCMASK          = 174
	SYS_RT_SIGPENDING           = 175
	SYS_RT_SIGTIMEDWAIT         = 176
	SYS_RT_SIGQUEUEINFO         = 177
	SYS_RT_SIGSUSPEND           = 178
	SYS_PREAD64                 = 179
	SYS_PWRITE64                = 180
	SYS_CHOWN                   = 181
	SYS_GETCWD                  = 182
	SYS_CAPGET                  = 183
	SYS_CAPSET                  = 184
	SYS_SIGALTSTACK             = 185
	SYS_SENDFILE                = 186
	SYS_GETPMSG                 = 187
	SYS_PUTPMSG                 = 188
	SYS_VFORK                   = 189
	SYS_UGETRLIMIT              = 190
	SYS_READAHEAD               = 191
	SYS_PCICONFIG_READ          = 198
	SYS_PCICONFIG_WRITE         = 199
	SYS_PCICONFIG_IOBASE        = 200
	SYS_MULTIPLEXER             = 201
	SYS_GETDENTS64              = 202
	SYS_PIVOT_ROOT              = 203
	SYS_MADVISE                 = 205
	SYS_MINCORE                 = 206
	SYS_GETTID                  = 207
	SYS_TKILL                   = 208
	SYS_SETXATTR                = 209
	SYS_LSETXATTR               = 210
	SYS_FSETXATTR               = 211
	SYS_GETXATTR                = 212
	SYS_LGETXATTR               = 213
	SYS_FGETXATTR               = 214
	SYS_LISTXATTR               = 215
	SYS_LLISTXATTR              = 216
	SYS_FLISTXATTR              = 217
	SYS_REMOVEXATTR             = 218
	SYS_LREMOVEXATTR            = 219
	SYS_FREMOVEXATTR            = 220
	SYS_FUTEX                   = 221
	SYS_SCHED_SETAFFINITY       = 222
	SYS_SCHED_GETAFFINITY       = 223
	SYS_TUXCALL                 = 225
	SYS_IO_SETUP                = 227
	SYS_IO_DESTROY              = 228
	SYS_IO_GETEVENTS            = 229
	SYS_IO_SUBMIT               = 230
	SYS_IO_CANCEL               = 231
	SYS_SET_TID_ADDRESS         = 232
	SYS_FADVISE64               = 233
	SYS_EXIT_GROUP              = 234
	SYS_LOOKUP_DCOOKIE          = 235
	SYS_EPOLL_CREATE            = 236
	SYS_EPOLL_CTL               = 237
	SYS_EPOLL_WAIT              = 238
	SYS_REMAP_FILE_PAGES        = 239
	SYS_TIMER_CREATE            = 240
	SYS_TIMER_SETTIME           = 241
	SYS_TIMER_GETTIME           = 242
	SYS_TIMER_GETOVERRUN        = 243
	SYS_TIMER_DELETE            = 244
	SYS_CLOCK_SETTIME           = 245
	SYS_CLOCK_GETTIME           = 246
	SYS_CLOCK_GETRES            = 247
	SYS_CLOCK_NANOSLEEP         = 248
	SYS_SWAPCONTEXT             = 249
	SYS_TGKILL                  = 250
	SYS_UTIMES                  = 251
	SYS_STATFS64                = 252
	SYS_FSTATFS64               = 253
	SYS_RTAS                    = 255
	SYS_SYS_DEBUG_SETCONTEXT    = 256
	SYS_MIGRATE_PAGES           = 258
	SYS_MBIND                   = 259
	SYS_GET_MEMPOLICY           = 260
	SYS_SET_MEMPOLICY           = 261
	SYS_MQ_OPEN                 = 262
	SYS_MQ_UNLINK               = 263
	SYS_MQ_TIMEDSEND            = 264
	SYS_MQ_TIMEDRECEIVE         = 265
	SYS_MQ_NOTIFY               = 266
	SYS_MQ_GETSETATTR           = 267
	SYS_KEXEC_LOAD              = 268
	SYS_ADD_KEY                 = 269
	SYS_REQUEST_KEY             = 270
	SYS_KEYCTL                  = 271
	SYS_WAITID                  = 272
	SYS_IOPRIO_SET              = 273
	SYS_IOPRIO_GET              = 274
	SYS_INOTIFY_INIT            = 275
	SYS_INOTIFY_ADD_WATCH       = 276
	SYS_INOTIFY_RM_WATCH        = 277
	SYS_SPU_RUN                 = 278
	SYS_SPU_CREATE              = 279
	SYS_PSELECT6                = 280
	SYS_PPOLL                   = 281
	SYS_UNSHARE                 = 282
	SYS_SPLICE                  = 283
	SYS_TEE                     = 284
	SYS_VMSPLICE                = 285
	SYS_OPENAT                  = 286
	SYS_MKDIRAT                 = 287
	SYS_MKNODAT                 = 288
	SYS_FCHOWNAT                = 289
	SYS_FUTIMESAT               = 290
	SYS_NEWFSTATAT              = 291
	SYS_UNLINKAT                = 292
	SYS_RENAMEAT                = 293
	SYS_LINKAT                  = 294
	SYS_SYMLINKAT               = 295
	SYS_READLINKAT              = 296
	SYS_FCHMODAT                = 297
	SYS_FACCESSAT               = 298
	SYS_GET_ROBUST_LIST         = 299
	SYS_SET_ROBUST_LIST         = 300
	SYS_MOVE_PAGES              = 301
	SYS_GETCPU                  = 302
	SYS_EPOLL_PWAIT             = 303
	SYS_UTIMENSAT               = 304
	SYS_SIGNALFD                = 305
	SYS_TIMERFD_CREATE          = 306
	SYS_EVENTFD                 = 307
	SYS_SYNC_FILE_RANGE2        = 308
	SYS_FALLOCATE               = 309
	SYS_SUBPAGE_PROT            = 310
	SYS_TIMERFD_SETTIME         = 311
	SYS_TIMERFD_GETTIME         = 312
	SYS_SIGNALFD4               = 313
	SYS_EVENTFD2                = 314
	SYS_EPOLL_CREATE1           = 315
	SYS_DUP3                    = 316
	SYS_PIPE2                   = 317
	SYS_INOTIFY_INIT1           = 318
	SYS_PERF_EVENT_OPEN         = 319
	SYS_PREADV                  = 320
	SYS_PWRITEV                 = 321
	SYS_RT_TGSIGQUEUEINFO       = 322
	SYS_FANOTIFY_INIT           = 323
	SYS_FANOTIFY_MARK           = 324
	SYS_PRLIMIT64               = 325
	SYS_SOCKET                  = 326
	SYS_BIND                    = 327
	SYS_CONNECT                 = 328
	SYS_LISTEN                  = 329
	SYS_ACCEPT                  = 330
	SYS_GETSOCKNAME             = 331
	SYS_GETPEERNAME             = 332
	SYS_SOCKETPAIR              = 333
	SYS_SEND                    = 334
	SYS_SENDTO                  = 335
	SYS_RECV                    = 336
	SYS_RECVFROM                = 337
	SYS_SHUTDOWN                = 338
	SYS_SETSOCKOPT              = 339
	SYS_GETSOCKOPT              = 340
	SYS_SENDMSG                 = 341
	SYS_RECVMSG                 = 342
	SYS_RECVMMSG                = 343
	SYS_ACCEPT4                 = 344
	SYS_NAME_TO_HANDLE_AT       = 345
	SYS_OPEN_BY_HANDLE_AT       = 346
	SYS_CLOCK_ADJTIME           = 347
	SYS_SYNCFS                  = 348
	SYS_SENDMMSG                = 349
	SYS_SETNS                   = 350
	SYS_PROCESS_VM_READV        = 351
	SYS_PROCESS_VM_WRITEV       = 352
	SYS_FINIT_MODULE            = 353
	SYS_KCMP                    = 354
	SYS_SCHED_SETATTR           = 355
	SYS_SCHED_GETATTR           = 356
	SYS_RENAMEAT2               = 357
	SYS_SECCOMP                 = 358
	SYS_GETRANDOM               = 359
	SYS_MEMFD_CREATE            = 360
	SYS_BPF                     = 361
	SYS_EXECVEAT                = 362
	SYS_SWITCH_ENDIAN           = 363
	SYS_USERFAULTFD             = 364
	SYS_MEMBARRIER              = 365
	SYS_MLOCK2                  = 378
	SYS_COPY_FILE_RANGE         = 379
	SYS_PREADV2                 = 380
	SYS_PWRITEV2                = 381
	SYS_KEXEC_FILE_LOAD         = 382
	SYS_STATX                   = 383
	SYS_PKEY_ALLOC              = 384
	SYS_PKEY_FREE               = 385
	SYS_PKEY_MPROTECT           = 386
	SYS_RSEQ                    = 387
	SYS_IO_PGETEVENTS           = 388
	SYS_SEMTIMEDOP              = 392
	SYS_SEMGET                  = 393
	SYS_SEMCTL                  = 394
	SYS_SHMGET                  = 395
	SYS_SHMCTL                  = 396
	SYS_SHMAT                   = 397
	SYS_SHMDT                   = 398
	SYS_MSGGET                  = 399
	SYS_MSGSND                  = 400
	SYS_MSGRCV                  = 401
	SYS_MSGCTL                  = 402
	SYS_PIDFD_SEND_SIGNAL       = 424
	SYS_IO_URING_SETUP          = 425
	SYS_IO_URING_ENTER          = 426
	SYS_IO_URING_REGISTER       = 427
	SYS_OPEN_TREE               = 428
	SYS_MOVE_MOUNT              = 429
	SYS_FSOPEN                  = 430
	SYS_FSCONFIG                = 431
	SYS_FSMOUNT                 = 432
	SYS_FSPICK                  = 433
	SYS_PIDFD_OPEN              = 434
	SYS_CLONE3                  = 435
	SYS_CLOSE_RANGE             = 436
	SYS_OPENAT2                 = 437
	SYS_PIDFD_GETFD             = 438
	SYS_FACCESSAT2              = 439
	SYS_PROCESS_MADVISE         = 440
	SYS_EPOLL_PWAIT2            = 441
	SYS_MOUNT_SETATTR           = 442
	SYS_QUOTACTL_FD             = 443
	SYS_LANDLOCK_CREATE_RULESET = 444
	SYS_LANDLOCK_ADD_RULE       = 445
	SYS_LANDLOCK_RESTRICT_SELF  = 446
	SYS_PROCESS_MRELEASE        = 448
	SYS_FUTEX_WAITV             = 449
	SYS_SET_MEMPOLICY_HOME_NODE = 450
)
07070100000E9A000081A4000000000000000000000001645E367C00002A66000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go // go run linux/mksysnum.go -Wall -Werror -static -I/tmp/riscv64/include /tmp/riscv64/include/asm/unistd.h
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build riscv64 && linux
// +build riscv64,linux

package unix

const (
	SYS_IO_SETUP                = 0
	SYS_IO_DESTROY              = 1
	SYS_IO_SUBMIT               = 2
	SYS_IO_CANCEL               = 3
	SYS_IO_GETEVENTS            = 4
	SYS_SETXATTR                = 5
	SYS_LSETXATTR               = 6
	SYS_FSETXATTR               = 7
	SYS_GETXATTR                = 8
	SYS_LGETXATTR               = 9
	SYS_FGETXATTR               = 10
	SYS_LISTXATTR               = 11
	SYS_LLISTXATTR              = 12
	SYS_FLISTXATTR              = 13
	SYS_REMOVEXATTR             = 14
	SYS_LREMOVEXATTR            = 15
	SYS_FREMOVEXATTR            = 16
	SYS_GETCWD                  = 17
	SYS_LOOKUP_DCOOKIE          = 18
	SYS_EVENTFD2                = 19
	SYS_EPOLL_CREATE1           = 20
	SYS_EPOLL_CTL               = 21
	SYS_EPOLL_PWAIT             = 22
	SYS_DUP                     = 23
	SYS_DUP3                    = 24
	SYS_FCNTL                   = 25
	SYS_INOTIFY_INIT1           = 26
	SYS_INOTIFY_ADD_WATCH       = 27
	SYS_INOTIFY_RM_WATCH        = 28
	SYS_IOCTL                   = 29
	SYS_IOPRIO_SET              = 30
	SYS_IOPRIO_GET              = 31
	SYS_FLOCK                   = 32
	SYS_MKNODAT                 = 33
	SYS_MKDIRAT                 = 34
	SYS_UNLINKAT                = 35
	SYS_SYMLINKAT               = 36
	SYS_LINKAT                  = 37
	SYS_UMOUNT2                 = 39
	SYS_MOUNT                   = 40
	SYS_PIVOT_ROOT              = 41
	SYS_NFSSERVCTL              = 42
	SYS_STATFS                  = 43
	SYS_FSTATFS                 = 44
	SYS_TRUNCATE                = 45
	SYS_FTRUNCATE               = 46
	SYS_FALLOCATE               = 47
	SYS_FACCESSAT               = 48
	SYS_CHDIR                   = 49
	SYS_FCHDIR                  = 50
	SYS_CHROOT                  = 51
	SYS_FCHMOD                  = 52
	SYS_FCHMODAT                = 53
	SYS_FCHOWNAT                = 54
	SYS_FCHOWN                  = 55
	SYS_OPENAT                  = 56
	SYS_CLOSE                   = 57
	SYS_VHANGUP                 = 58
	SYS_PIPE2                   = 59
	SYS_QUOTACTL                = 60
	SYS_GETDENTS64              = 61
	SYS_LSEEK                   = 62
	SYS_READ                    = 63
	SYS_WRITE                   = 64
	SYS_READV                   = 65
	SYS_WRITEV                  = 66
	SYS_PREAD64                 = 67
	SYS_PWRITE64                = 68
	SYS_PREADV                  = 69
	SYS_PWRITEV                 = 70
	SYS_SENDFILE                = 71
	SYS_PSELECT6                = 72
	SYS_PPOLL                   = 73
	SYS_SIGNALFD4               = 74
	SYS_VMSPLICE                = 75
	SYS_SPLICE                  = 76
	SYS_TEE                     = 77
	SYS_READLINKAT              = 78
	SYS_FSTATAT                 = 79
	SYS_FSTAT                   = 80
	SYS_SYNC                    = 81
	SYS_FSYNC                   = 82
	SYS_FDATASYNC               = 83
	SYS_SYNC_FILE_RANGE         = 84
	SYS_TIMERFD_CREATE          = 85
	SYS_TIMERFD_SETTIME         = 86
	SYS_TIMERFD_GETTIME         = 87
	SYS_UTIMENSAT               = 88
	SYS_ACCT                    = 89
	SYS_CAPGET                  = 90
	SYS_CAPSET                  = 91
	SYS_PERSONALITY             = 92
	SYS_EXIT                    = 93
	SYS_EXIT_GROUP              = 94
	SYS_WAITID                  = 95
	SYS_SET_TID_ADDRESS         = 96
	SYS_UNSHARE                 = 97
	SYS_FUTEX                   = 98
	SYS_SET_ROBUST_LIST         = 99
	SYS_GET_ROBUST_LIST         = 100
	SYS_NANOSLEEP               = 101
	SYS_GETITIMER               = 102
	SYS_SETITIMER               = 103
	SYS_KEXEC_LOAD              = 104
	SYS_INIT_MODULE             = 105
	SYS_DELETE_MODULE           = 106
	SYS_TIMER_CREATE            = 107
	SYS_TIMER_GETTIME           = 108
	SYS_TIMER_GETOVERRUN        = 109
	SYS_TIMER_SETTIME           = 110
	SYS_TIMER_DELETE            = 111
	SYS_CLOCK_SETTIME           = 112
	SYS_CLOCK_GETTIME           = 113
	SYS_CLOCK_GETRES            = 114
	SYS_CLOCK_NANOSLEEP         = 115
	SYS_SYSLOG                  = 116
	SYS_PTRACE                  = 117
	SYS_SCHED_SETPARAM          = 118
	SYS_SCHED_SETSCHEDULER      = 119
	SYS_SCHED_GETSCHEDULER      = 120
	SYS_SCHED_GETPARAM          = 121
	SYS_SCHED_SETAFFINITY       = 122
	SYS_SCHED_GETAFFINITY       = 123
	SYS_SCHED_YIELD             = 124
	SYS_SCHED_GET_PRIORITY_MAX  = 125
	SYS_SCHED_GET_PRIORITY_MIN  = 126
	SYS_SCHED_RR_GET_INTERVAL   = 127
	SYS_RESTART_SYSCALL         = 128
	SYS_KILL                    = 129
	SYS_TKILL                   = 130
	SYS_TGKILL                  = 131
	SYS_SIGALTSTACK             = 132
	SYS_RT_SIGSUSPEND           = 133
	SYS_RT_SIGACTION            = 134
	SYS_RT_SIGPROCMASK          = 135
	SYS_RT_SIGPENDING           = 136
	SYS_RT_SIGTIMEDWAIT         = 137
	SYS_RT_SIGQUEUEINFO         = 138
	SYS_RT_SIGRETURN            = 139
	SYS_SETPRIORITY             = 140
	SYS_GETPRIORITY             = 141
	SYS_REBOOT                  = 142
	SYS_SETREGID                = 143
	SYS_SETGID                  = 144
	SYS_SETREUID                = 145
	SYS_SETUID                  = 146
	SYS_SETRESUID               = 147
	SYS_GETRESUID               = 148
	SYS_SETRESGID               = 149
	SYS_GETRESGID               = 150
	SYS_SETFSUID                = 151
	SYS_SETFSGID                = 152
	SYS_TIMES                   = 153
	SYS_SETPGID                 = 154
	SYS_GETPGID                 = 155
	SYS_GETSID                  = 156
	SYS_SETSID                  = 157
	SYS_GETGROUPS               = 158
	SYS_SETGROUPS               = 159
	SYS_UNAME                   = 160
	SYS_SETHOSTNAME             = 161
	SYS_SETDOMAINNAME           = 162
	SYS_GETRLIMIT               = 163
	SYS_SETRLIMIT               = 164
	SYS_GETRUSAGE               = 165
	SYS_UMASK                   = 166
	SYS_PRCTL                   = 167
	SYS_GETCPU                  = 168
	SYS_GETTIMEOFDAY            = 169
	SYS_SETTIMEOFDAY            = 170
	SYS_ADJTIMEX                = 171
	SYS_GETPID                  = 172
	SYS_GETPPID                 = 173
	SYS_GETUID                  = 174
	SYS_GETEUID                 = 175
	SYS_GETGID                  = 176
	SYS_GETEGID                 = 177
	SYS_GETTID                  = 178
	SYS_SYSINFO                 = 179
	SYS_MQ_OPEN                 = 180
	SYS_MQ_UNLINK               = 181
	SYS_MQ_TIMEDSEND            = 182
	SYS_MQ_TIMEDRECEIVE         = 183
	SYS_MQ_NOTIFY               = 184
	SYS_MQ_GETSETATTR           = 185
	SYS_MSGGET                  = 186
	SYS_MSGCTL                  = 187
	SYS_MSGRCV                  = 188
	SYS_MSGSND                  = 189
	SYS_SEMGET                  = 190
	SYS_SEMCTL                  = 191
	SYS_SEMTIMEDOP              = 192
	SYS_SEMOP                   = 193
	SYS_SHMGET                  = 194
	SYS_SHMCTL                  = 195
	SYS_SHMAT                   = 196
	SYS_SHMDT                   = 197
	SYS_SOCKET                  = 198
	SYS_SOCKETPAIR              = 199
	SYS_BIND                    = 200
	SYS_LISTEN                  = 201
	SYS_ACCEPT                  = 202
	SYS_CONNECT                 = 203
	SYS_GETSOCKNAME             = 204
	SYS_GETPEERNAME             = 205
	SYS_SENDTO                  = 206
	SYS_RECVFROM                = 207
	SYS_SETSOCKOPT              = 208
	SYS_GETSOCKOPT              = 209
	SYS_SHUTDOWN                = 210
	SYS_SENDMSG                 = 211
	SYS_RECVMSG                 = 212
	SYS_READAHEAD               = 213
	SYS_BRK                     = 214
	SYS_MUNMAP                  = 215
	SYS_MREMAP                  = 216
	SYS_ADD_KEY                 = 217
	SYS_REQUEST_KEY             = 218
	SYS_KEYCTL                  = 219
	SYS_CLONE                   = 220
	SYS_EXECVE                  = 221
	SYS_MMAP                    = 222
	SYS_FADVISE64               = 223
	SYS_SWAPON                  = 224
	SYS_SWAPOFF                 = 225
	SYS_MPROTECT                = 226
	SYS_MSYNC                   = 227
	SYS_MLOCK                   = 228
	SYS_MUNLOCK                 = 229
	SYS_MLOCKALL                = 230
	SYS_MUNLOCKALL              = 231
	SYS_MINCORE                 = 232
	SYS_MADVISE                 = 233
	SYS_REMAP_FILE_PAGES        = 234
	SYS_MBIND                   = 235
	SYS_GET_MEMPOLICY           = 236
	SYS_SET_MEMPOLICY           = 237
	SYS_MIGRATE_PAGES           = 238
	SYS_MOVE_PAGES              = 239
	SYS_RT_TGSIGQUEUEINFO       = 240
	SYS_PERF_EVENT_OPEN         = 241
	SYS_ACCEPT4                 = 242
	SYS_RECVMMSG                = 243
	SYS_ARCH_SPECIFIC_SYSCALL   = 244
	SYS_WAIT4                   = 260
	SYS_PRLIMIT64               = 261
	SYS_FANOTIFY_INIT           = 262
	SYS_FANOTIFY_MARK           = 263
	SYS_NAME_TO_HANDLE_AT       = 264
	SYS_OPEN_BY_HANDLE_AT       = 265
	SYS_CLOCK_ADJTIME           = 266
	SYS_SYNCFS                  = 267
	SYS_SETNS                   = 268
	SYS_SENDMMSG                = 269
	SYS_PROCESS_VM_READV        = 270
	SYS_PROCESS_VM_WRITEV       = 271
	SYS_KCMP                    = 272
	SYS_FINIT_MODULE            = 273
	SYS_SCHED_SETATTR           = 274
	SYS_SCHED_GETATTR           = 275
	SYS_RENAMEAT2               = 276
	SYS_SECCOMP                 = 277
	SYS_GETRANDOM               = 278
	SYS_MEMFD_CREATE            = 279
	SYS_BPF                     = 280
	SYS_EXECVEAT                = 281
	SYS_USERFAULTFD             = 282
	SYS_MEMBARRIER              = 283
	SYS_MLOCK2                  = 284
	SYS_COPY_FILE_RANGE         = 285
	SYS_PREADV2                 = 286
	SYS_PWRITEV2                = 287
	SYS_PKEY_MPROTECT           = 288
	SYS_PKEY_ALLOC              = 289
	SYS_PKEY_FREE               = 290
	SYS_STATX                   = 291
	SYS_IO_PGETEVENTS           = 292
	SYS_RSEQ                    = 293
	SYS_KEXEC_FILE_LOAD         = 294
	SYS_PIDFD_SEND_SIGNAL       = 424
	SYS_IO_URING_SETUP          = 425
	SYS_IO_URING_ENTER          = 426
	SYS_IO_URING_REGISTER       = 427
	SYS_OPEN_TREE               = 428
	SYS_MOVE_MOUNT              = 429
	SYS_FSOPEN                  = 430
	SYS_FSCONFIG                = 431
	SYS_FSMOUNT                 = 432
	SYS_FSPICK                  = 433
	SYS_PIDFD_OPEN              = 434
	SYS_CLONE3                  = 435
	SYS_CLOSE_RANGE             = 436
	SYS_OPENAT2                 = 437
	SYS_PIDFD_GETFD             = 438
	SYS_FACCESSAT2              = 439
	SYS_PROCESS_MADVISE         = 440
	SYS_EPOLL_PWAIT2            = 441
	SYS_MOUNT_SETATTR           = 442
	SYS_QUOTACTL_FD             = 443
	SYS_LANDLOCK_CREATE_RULESET = 444
	SYS_LANDLOCK_ADD_RULE       = 445
	SYS_LANDLOCK_RESTRICT_SELF  = 446
	SYS_MEMFD_SECRET            = 447
	SYS_PROCESS_MRELEASE        = 448
	SYS_FUTEX_WAITV             = 449
	SYS_SET_MEMPOLICY_HOME_NODE = 450
)
  07070100000E9B000081A4000000000000000000000001645E367C00003306000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go   // go run linux/mksysnum.go -Wall -Werror -static -I/tmp/s390x/include -fsigned-char /tmp/s390x/include/asm/unistd.h
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build s390x && linux
// +build s390x,linux

package unix

const (
	SYS_EXIT                    = 1
	SYS_FORK                    = 2
	SYS_READ                    = 3
	SYS_WRITE                   = 4
	SYS_OPEN                    = 5
	SYS_CLOSE                   = 6
	SYS_RESTART_SYSCALL         = 7
	SYS_CREAT                   = 8
	SYS_LINK                    = 9
	SYS_UNLINK                  = 10
	SYS_EXECVE                  = 11
	SYS_CHDIR                   = 12
	SYS_MKNOD                   = 14
	SYS_CHMOD                   = 15
	SYS_LSEEK                   = 19
	SYS_GETPID                  = 20
	SYS_MOUNT                   = 21
	SYS_UMOUNT                  = 22
	SYS_PTRACE                  = 26
	SYS_ALARM                   = 27
	SYS_PAUSE                   = 29
	SYS_UTIME                   = 30
	SYS_ACCESS                  = 33
	SYS_NICE                    = 34
	SYS_SYNC                    = 36
	SYS_KILL                    = 37
	SYS_RENAME                  = 38
	SYS_MKDIR                   = 39
	SYS_RMDIR                   = 40
	SYS_DUP                     = 41
	SYS_PIPE                    = 42
	SYS_TIMES                   = 43
	SYS_BRK                     = 45
	SYS_SIGNAL                  = 48
	SYS_ACCT                    = 51
	SYS_UMOUNT2                 = 52
	SYS_IOCTL                   = 54
	SYS_FCNTL                   = 55
	SYS_SETPGID                 = 57
	SYS_UMASK                   = 60
	SYS_CHROOT                  = 61
	SYS_USTAT                   = 62
	SYS_DUP2                    = 63
	SYS_GETPPID                 = 64
	SYS_GETPGRP                 = 65
	SYS_SETSID                  = 66
	SYS_SIGACTION               = 67
	SYS_SIGSUSPEND              = 72
	SYS_SIGPENDING              = 73
	SYS_SETHOSTNAME             = 74
	SYS_SETRLIMIT               = 75
	SYS_GETRUSAGE               = 77
	SYS_GETTIMEOFDAY            = 78
	SYS_SETTIMEOFDAY            = 79
	SYS_SYMLINK                 = 83
	SYS_READLINK                = 85
	SYS_USELIB                  = 86
	SYS_SWAPON                  = 87
	SYS_REBOOT                  = 88
	SYS_READDIR                 = 89
	SYS_MMAP                    = 90
	SYS_MUNMAP                  = 91
	SYS_TRUNCATE                = 92
	SYS_FTRUNCATE               = 93
	SYS_FCHMOD                  = 94
	SYS_GETPRIORITY             = 96
	SYS_SETPRIORITY             = 97
	SYS_STATFS                  = 99
	SYS_FSTATFS                 = 100
	SYS_SOCKETCALL              = 102
	SYS_SYSLOG                  = 103
	SYS_SETITIMER               = 104
	SYS_GETITIMER               = 105
	SYS_STAT                    = 106
	SYS_LSTAT                   = 107
	SYS_FSTAT                   = 108
	SYS_LOOKUP_DCOOKIE          = 110
	SYS_VHANGUP                 = 111
	SYS_IDLE                    = 112
	SYS_WAIT4                   = 114
	SYS_SWAPOFF                 = 115
	SYS_SYSINFO                 = 116
	SYS_IPC                     = 117
	SYS_FSYNC                   = 118
	SYS_SIGRETURN               = 119
	SYS_CLONE                   = 120
	SYS_SETDOMAINNAME           = 121
	SYS_UNAME                   = 122
	SYS_ADJTIMEX                = 124
	SYS_MPROTECT                = 125
	SYS_SIGPROCMASK             = 126
	SYS_CREATE_MODULE           = 127
	SYS_INIT_MODULE             = 128
	SYS_DELETE_MODULE           = 129
	SYS_GET_KERNEL_SYMS         = 130
	SYS_QUOTACTL                = 131
	SYS_GETPGID                 = 132
	SYS_FCHDIR                  = 133
	SYS_BDFLUSH                 = 134
	SYS_SYSFS                   = 135
	SYS_PERSONALITY             = 136
	SYS_AFS_SYSCALL             = 137
	SYS_GETDENTS                = 141
	SYS_SELECT                  = 142
	SYS_FLOCK                   = 143
	SYS_MSYNC                   = 144
	SYS_READV                   = 145
	SYS_WRITEV                  = 146
	SYS_GETSID                  = 147
	SYS_FDATASYNC               = 148
	SYS__SYSCTL                 = 149
	SYS_MLOCK                   = 150
	SYS_MUNLOCK                 = 151
	SYS_MLOCKALL                = 152
	SYS_MUNLOCKALL              = 153
	SYS_SCHED_SETPARAM          = 154
	SYS_SCHED_GETPARAM          = 155
	SYS_SCHED_SETSCHEDULER      = 156
	SYS_SCHED_GETSCHEDULER      = 157
	SYS_SCHED_YIELD             = 158
	SYS_SCHED_GET_PRIORITY_MAX  = 159
	SYS_SCHED_GET_PRIORITY_MIN  = 160
	SYS_SCHED_RR_GET_INTERVAL   = 161
	SYS_NANOSLEEP               = 162
	SYS_MREMAP                  = 163
	SYS_QUERY_MODULE            = 167
	SYS_POLL                    = 168
	SYS_NFSSERVCTL              = 169
	SYS_PRCTL                   = 172
	SYS_RT_SIGRETURN            = 173
	SYS_RT_SIGACTION            = 174
	SYS_RT_SIGPROCMASK          = 175
	SYS_RT_SIGPENDING           = 176
	SYS_RT_SIGTIMEDWAIT         = 177
	SYS_RT_SIGQUEUEINFO         = 178
	SYS_RT_SIGSUSPEND           = 179
	SYS_PREAD64                 = 180
	SYS_PWRITE64                = 181
	SYS_GETCWD                  = 183
	SYS_CAPGET                  = 184
	SYS_CAPSET                  = 185
	SYS_SIGALTSTACK             = 186
	SYS_SENDFILE                = 187
	SYS_GETPMSG                 = 188
	SYS_PUTPMSG                 = 189
	SYS_VFORK                   = 190
	SYS_GETRLIMIT               = 191
	SYS_LCHOWN                  = 198
	SYS_GETUID                  = 199
	SYS_GETGID                  = 200
	SYS_GETEUID                 = 201
	SYS_GETEGID                 = 202
	SYS_SETREUID                = 203
	SYS_SETREGID                = 204
	SYS_GETGROUPS               = 205
	SYS_SETGROUPS               = 206
	SYS_FCHOWN                  = 207
	SYS_SETRESUID               = 208
	SYS_GETRESUID               = 209
	SYS_SETRESGID               = 210
	SYS_GETRESGID               = 211
	SYS_CHOWN                   = 212
	SYS_SETUID                  = 213
	SYS_SETGID                  = 214
	SYS_SETFSUID                = 215
	SYS_SETFSGID                = 216
	SYS_PIVOT_ROOT              = 217
	SYS_MINCORE                 = 218
	SYS_MADVISE                 = 219
	SYS_GETDENTS64              = 220
	SYS_READAHEAD               = 222
	SYS_SETXATTR                = 224
	SYS_LSETXATTR               = 225
	SYS_FSETXATTR               = 226
	SYS_GETXATTR                = 227
	SYS_LGETXATTR               = 228
	SYS_FGETXATTR               = 229
	SYS_LISTXATTR               = 230
	SYS_LLISTXATTR              = 231
	SYS_FLISTXATTR              = 232
	SYS_REMOVEXATTR             = 233
	SYS_LREMOVEXATTR            = 234
	SYS_FREMOVEXATTR            = 235
	SYS_GETTID                  = 236
	SYS_TKILL                   = 237
	SYS_FUTEX                   = 238
	SYS_SCHED_SETAFFINITY       = 239
	SYS_SCHED_GETAFFINITY       = 240
	SYS_TGKILL                  = 241
	SYS_IO_SETUP                = 243
	SYS_IO_DESTROY              = 244
	SYS_IO_GETEVENTS            = 245
	SYS_IO_SUBMIT               = 246
	SYS_IO_CANCEL               = 247
	SYS_EXIT_GROUP              = 248
	SYS_EPOLL_CREATE            = 249
	SYS_EPOLL_CTL               = 250
	SYS_EPOLL_WAIT              = 251
	SYS_SET_TID_ADDRESS         = 252
	SYS_FADVISE64               = 253
	SYS_TIMER_CREATE            = 254
	SYS_TIMER_SETTIME           = 255
	SYS_TIMER_GETTIME           = 256
	SYS_TIMER_GETOVERRUN        = 257
	SYS_TIMER_DELETE            = 258
	SYS_CLOCK_SETTIME           = 259
	SYS_CLOCK_GETTIME           = 260
	SYS_CLOCK_GETRES            = 261
	SYS_CLOCK_NANOSLEEP         = 262
	SYS_STATFS64                = 265
	SYS_FSTATFS64               = 266
	SYS_REMAP_FILE_PAGES        = 267
	SYS_MBIND                   = 268
	SYS_GET_MEMPOLICY           = 269
	SYS_SET_MEMPOLICY           = 270
	SYS_MQ_OPEN                 = 271
	SYS_MQ_UNLINK               = 272
	SYS_MQ_TIMEDSEND            = 273
	SYS_MQ_TIMEDRECEIVE         = 274
	SYS_MQ_NOTIFY               = 275
	SYS_MQ_GETSETATTR           = 276
	SYS_KEXEC_LOAD              = 277
	SYS_ADD_KEY                 = 278
	SYS_REQUEST_KEY             = 279
	SYS_KEYCTL                  = 280
	SYS_WAITID                  = 281
	SYS_IOPRIO_SET              = 282
	SYS_IOPRIO_GET              = 283
	SYS_INOTIFY_INIT            = 284
	SYS_INOTIFY_ADD_WATCH       = 285
	SYS_INOTIFY_RM_WATCH        = 286
	SYS_MIGRATE_PAGES           = 287
	SYS_OPENAT                  = 288
	SYS_MKDIRAT                 = 289
	SYS_MKNODAT                 = 290
	SYS_FCHOWNAT                = 291
	SYS_FUTIMESAT               = 292
	SYS_NEWFSTATAT              = 293
	SYS_UNLINKAT                = 294
	SYS_RENAMEAT                = 295
	SYS_LINKAT                  = 296
	SYS_SYMLINKAT               = 297
	SYS_READLINKAT              = 298
	SYS_FCHMODAT                = 299
	SYS_FACCESSAT               = 300
	SYS_PSELECT6                = 301
	SYS_PPOLL                   = 302
	SYS_UNSHARE                 = 303
	SYS_SET_ROBUST_LIST         = 304
	SYS_GET_ROBUST_LIST         = 305
	SYS_SPLICE                  = 306
	SYS_SYNC_FILE_RANGE         = 307
	SYS_TEE                     = 308
	SYS_VMSPLICE                = 309
	SYS_MOVE_PAGES              = 310
	SYS_GETCPU                  = 311
	SYS_EPOLL_PWAIT             = 312
	SYS_UTIMES                  = 313
	SYS_FALLOCATE               = 314
	SYS_UTIMENSAT               = 315
	SYS_SIGNALFD                = 316
	SYS_TIMERFD                 = 317
	SYS_EVENTFD                 = 318
	SYS_TIMERFD_CREATE          = 319
	SYS_TIMERFD_SETTIME         = 320
	SYS_TIMERFD_GETTIME         = 321
	SYS_SIGNALFD4               = 322
	SYS_EVENTFD2                = 323
	SYS_INOTIFY_INIT1           = 324
	SYS_PIPE2                   = 325
	SYS_DUP3                    = 326
	SYS_EPOLL_CREATE1           = 327
	SYS_PREADV                  = 328
	SYS_PWRITEV                 = 329
	SYS_RT_TGSIGQUEUEINFO       = 330
	SYS_PERF_EVENT_OPEN         = 331
	SYS_FANOTIFY_INIT           = 332
	SYS_FANOTIFY_MARK           = 333
	SYS_PRLIMIT64               = 334
	SYS_NAME_TO_HANDLE_AT       = 335
	SYS_OPEN_BY_HANDLE_AT       = 336
	SYS_CLOCK_ADJTIME           = 337
	SYS_SYNCFS                  = 338
	SYS_SETNS                   = 339
	SYS_PROCESS_VM_READV        = 340
	SYS_PROCESS_VM_WRITEV       = 341
	SYS_S390_RUNTIME_INSTR      = 342
	SYS_KCMP                    = 343
	SYS_FINIT_MODULE            = 344
	SYS_SCHED_SETATTR           = 345
	SYS_SCHED_GETATTR           = 346
	SYS_RENAMEAT2               = 347
	SYS_SECCOMP                 = 348
	SYS_GETRANDOM               = 349
	SYS_MEMFD_CREATE            = 350
	SYS_BPF                     = 351
	SYS_S390_PCI_MMIO_WRITE     = 352
	SYS_S390_PCI_MMIO_READ      = 353
	SYS_EXECVEAT                = 354
	SYS_USERFAULTFD             = 355
	SYS_MEMBARRIER              = 356
	SYS_RECVMMSG                = 357
	SYS_SENDMMSG                = 358
	SYS_SOCKET                  = 359
	SYS_SOCKETPAIR              = 360
	SYS_BIND                    = 361
	SYS_CONNECT                 = 362
	SYS_LISTEN                  = 363
	SYS_ACCEPT4                 = 364
	SYS_GETSOCKOPT              = 365
	SYS_SETSOCKOPT              = 366
	SYS_GETSOCKNAME             = 367
	SYS_GETPEERNAME             = 368
	SYS_SENDTO                  = 369
	SYS_SENDMSG                 = 370
	SYS_RECVFROM                = 371
	SYS_RECVMSG                 = 372
	SYS_SHUTDOWN                = 373
	SYS_MLOCK2                  = 374
	SYS_COPY_FILE_RANGE         = 375
	SYS_PREADV2                 = 376
	SYS_PWRITEV2                = 377
	SYS_S390_GUARDED_STORAGE    = 378
	SYS_STATX                   = 379
	SYS_S390_STHYI              = 380
	SYS_KEXEC_FILE_LOAD         = 381
	SYS_IO_PGETEVENTS           = 382
	SYS_RSEQ                    = 383
	SYS_PKEY_MPROTECT           = 384
	SYS_PKEY_ALLOC              = 385
	SYS_PKEY_FREE               = 386
	SYS_SEMTIMEDOP              = 392
	SYS_SEMGET                  = 393
	SYS_SEMCTL                  = 394
	SYS_SHMGET                  = 395
	SYS_SHMCTL                  = 396
	SYS_SHMAT                   = 397
	SYS_SHMDT                   = 398
	SYS_MSGGET                  = 399
	SYS_MSGSND                  = 400
	SYS_MSGRCV                  = 401
	SYS_MSGCTL                  = 402
	SYS_PIDFD_SEND_SIGNAL       = 424
	SYS_IO_URING_SETUP          = 425
	SYS_IO_URING_ENTER          = 426
	SYS_IO_URING_REGISTER       = 427
	SYS_OPEN_TREE               = 428
	SYS_MOVE_MOUNT              = 429
	SYS_FSOPEN                  = 430
	SYS_FSCONFIG                = 431
	SYS_FSMOUNT                 = 432
	SYS_FSPICK                  = 433
	SYS_PIDFD_OPEN              = 434
	SYS_CLONE3                  = 435
	SYS_CLOSE_RANGE             = 436
	SYS_OPENAT2                 = 437
	SYS_PIDFD_GETFD             = 438
	SYS_FACCESSAT2              = 439
	SYS_PROCESS_MADVISE         = 440
	SYS_EPOLL_PWAIT2            = 441
	SYS_MOUNT_SETATTR           = 442
	SYS_QUOTACTL_FD             = 443
	SYS_LANDLOCK_CREATE_RULESET = 444
	SYS_LANDLOCK_ADD_RULE       = 445
	SYS_LANDLOCK_RESTRICT_SELF  = 446
	SYS_PROCESS_MRELEASE        = 448
	SYS_FUTEX_WAITV             = 449
	SYS_SET_MEMPOLICY_HOME_NODE = 450
)
  07070100000E9C000081A4000000000000000000000001645E367C000034D9000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go // go run linux/mksysnum.go -Wall -Werror -static -I/tmp/sparc64/include /tmp/sparc64/include/asm/unistd.h
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build sparc64 && linux
// +build sparc64,linux

package unix

const (
	SYS_RESTART_SYSCALL         = 0
	SYS_EXIT                    = 1
	SYS_FORK                    = 2
	SYS_READ                    = 3
	SYS_WRITE                   = 4
	SYS_OPEN                    = 5
	SYS_CLOSE                   = 6
	SYS_WAIT4                   = 7
	SYS_CREAT                   = 8
	SYS_LINK                    = 9
	SYS_UNLINK                  = 10
	SYS_EXECV                   = 11
	SYS_CHDIR                   = 12
	SYS_CHOWN                   = 13
	SYS_MKNOD                   = 14
	SYS_CHMOD                   = 15
	SYS_LCHOWN                  = 16
	SYS_BRK                     = 17
	SYS_PERFCTR                 = 18
	SYS_LSEEK                   = 19
	SYS_GETPID                  = 20
	SYS_CAPGET                  = 21
	SYS_CAPSET                  = 22
	SYS_SETUID                  = 23
	SYS_GETUID                  = 24
	SYS_VMSPLICE                = 25
	SYS_PTRACE                  = 26
	SYS_ALARM                   = 27
	SYS_SIGALTSTACK             = 28
	SYS_PAUSE                   = 29
	SYS_UTIME                   = 30
	SYS_ACCESS                  = 33
	SYS_NICE                    = 34
	SYS_SYNC                    = 36
	SYS_KILL                    = 37
	SYS_STAT                    = 38
	SYS_SENDFILE                = 39
	SYS_LSTAT                   = 40
	SYS_DUP                     = 41
	SYS_PIPE                    = 42
	SYS_TIMES                   = 43
	SYS_UMOUNT2                 = 45
	SYS_SETGID                  = 46
	SYS_GETGID                  = 47
	SYS_SIGNAL                  = 48
	SYS_GETEUID                 = 49
	SYS_GETEGID                 = 50
	SYS_ACCT                    = 51
	SYS_MEMORY_ORDERING         = 52
	SYS_IOCTL                   = 54
	SYS_REBOOT                  = 55
	SYS_SYMLINK                 = 57
	SYS_READLINK                = 58
	SYS_EXECVE                  = 59
	SYS_UMASK                   = 60
	SYS_CHROOT                  = 61
	SYS_FSTAT                   = 62
	SYS_FSTAT64                 = 63
	SYS_GETPAGESIZE             = 64
	SYS_MSYNC                   = 65
	SYS_VFORK                   = 66
	SYS_PREAD64                 = 67
	SYS_PWRITE64                = 68
	SYS_MMAP                    = 71
	SYS_MUNMAP                  = 73
	SYS_MPROTECT                = 74
	SYS_MADVISE                 = 75
	SYS_VHANGUP                 = 76
	SYS_MINCORE                 = 78
	SYS_GETGROUPS               = 79
	SYS_SETGROUPS               = 80
	SYS_GETPGRP                 = 81
	SYS_SETITIMER               = 83
	SYS_SWAPON                  = 85
	SYS_GETITIMER               = 86
	SYS_SETHOSTNAME             = 88
	SYS_DUP2                    = 90
	SYS_FCNTL                   = 92
	SYS_SELECT                  = 93
	SYS_FSYNC                   = 95
	SYS_SETPRIORITY             = 96
	SYS_SOCKET                  = 97
	SYS_CONNECT                 = 98
	SYS_ACCEPT                  = 99
	SYS_GETPRIORITY             = 100
	SYS_RT_SIGRETURN            = 101
	SYS_RT_SIGACTION            = 102
	SYS_RT_SIGPROCMASK          = 103
	SYS_RT_SIGPENDING           = 104
	SYS_RT_SIGTIMEDWAIT         = 105
	SYS_RT_SIGQUEUEINFO         = 106
	SYS_RT_SIGSUSPEND           = 107
	SYS_SETRESUID               = 108
	SYS_GETRESUID               = 109
	SYS_SETRESGID               = 110
	SYS_GETRESGID               = 111
	SYS_RECVMSG                 = 113
	SYS_SENDMSG                 = 114
	SYS_GETTIMEOFDAY            = 116
	SYS_GETRUSAGE               = 117
	SYS_GETSOCKOPT              = 118
	SYS_GETCWD                  = 119
	SYS_READV                   = 120
	SYS_WRITEV                  = 121
	SYS_SETTIMEOFDAY            = 122
	SYS_FCHOWN                  = 123
	SYS_FCHMOD                  = 124
	SYS_RECVFROM                = 125
	SYS_SETREUID                = 126
	SYS_SETREGID                = 127
	SYS_RENAME                  = 128
	SYS_TRUNCATE                = 129
	SYS_FTRUNCATE               = 130
	SYS_FLOCK                   = 131
	SYS_LSTAT64                 = 132
	SYS_SENDTO                  = 133
	SYS_SHUTDOWN                = 134
	SYS_SOCKETPAIR              = 135
	SYS_MKDIR                   = 136
	SYS_RMDIR                   = 137
	SYS_UTIMES                  = 138
	SYS_STAT64                  = 139
	SYS_SENDFILE64              = 140
	SYS_GETPEERNAME             = 141
	SYS_FUTEX                   = 142
	SYS_GETTID                  = 143
	SYS_GETRLIMIT               = 144
	SYS_SETRLIMIT               = 145
	SYS_PIVOT_ROOT              = 146
	SYS_PRCTL                   = 147
	SYS_PCICONFIG_READ          = 148
	SYS_PCICONFIG_WRITE         = 149
	SYS_GETSOCKNAME             = 150
	SYS_INOTIFY_INIT            = 151
	SYS_INOTIFY_ADD_WATCH       = 152
	SYS_POLL                    = 153
	SYS_GETDENTS64              = 154
	SYS_INOTIFY_RM_WATCH        = 156
	SYS_STATFS                  = 157
	SYS_FSTATFS                 = 158
	SYS_UMOUNT                  = 159
	SYS_SCHED_SET_AFFINITY      = 160
	SYS_SCHED_GET_AFFINITY      = 161
	SYS_GETDOMAINNAME           = 162
	SYS_SETDOMAINNAME           = 163
	SYS_UTRAP_INSTALL           = 164
	SYS_QUOTACTL                = 165
	SYS_SET_TID_ADDRESS         = 166
	SYS_MOUNT                   = 167
	SYS_USTAT                   = 168
	SYS_SETXATTR                = 169
	SYS_LSETXATTR               = 170
	SYS_FSETXATTR               = 171
	SYS_GETXATTR                = 172
	SYS_LGETXATTR               = 173
	SYS_GETDENTS                = 174
	SYS_SETSID                  = 175
	SYS_FCHDIR                  = 176
	SYS_FGETXATTR               = 177
	SYS_LISTXATTR               = 178
	SYS_LLISTXATTR              = 179
	SYS_FLISTXATTR              = 180
	SYS_REMOVEXATTR             = 181
	SYS_LREMOVEXATTR            = 182
	SYS_SIGPENDING              = 183
	SYS_QUERY_MODULE            = 184
	SYS_SETPGID                 = 185
	SYS_FREMOVEXATTR            = 186
	SYS_TKILL                   = 187
	SYS_EXIT_GROUP              = 188
	SYS_UNAME                   = 189
	SYS_INIT_MODULE             = 190
	SYS_PERSONALITY             = 191
	SYS_REMAP_FILE_PAGES        = 192
	SYS_EPOLL_CREATE            = 193
	SYS_EPOLL_CTL               = 194
	SYS_EPOLL_WAIT              = 195
	SYS_IOPRIO_SET              = 196
	SYS_GETPPID                 = 197
	SYS_SIGACTION               = 198
	SYS_SGETMASK                = 199
	SYS_SSETMASK                = 200
	SYS_SIGSUSPEND              = 201
	SYS_OLDLSTAT                = 202
	SYS_USELIB                  = 203
	SYS_READDIR                 = 204
	SYS_READAHEAD               = 205
	SYS_SOCKETCALL              = 206
	SYS_SYSLOG                  = 207
	SYS_LOOKUP_DCOOKIE          = 208
	SYS_FADVISE64               = 209
	SYS_FADVISE64_64            = 210
	SYS_TGKILL                  = 211
	SYS_WAITPID                 = 212
	SYS_SWAPOFF                 = 213
	SYS_SYSINFO                 = 214
	SYS_IPC                     = 215
	SYS_SIGRETURN               = 216
	SYS_CLONE                   = 217
	SYS_IOPRIO_GET              = 218
	SYS_ADJTIMEX                = 219
	SYS_SIGPROCMASK             = 220
	SYS_CREATE_MODULE           = 221
	SYS_DELETE_MODULE           = 222
	SYS_GET_KERNEL_SYMS         = 223
	SYS_GETPGID                 = 224
	SYS_BDFLUSH                 = 225
	SYS_SYSFS                   = 226
	SYS_AFS_SYSCALL             = 227
	SYS_SETFSUID                = 228
	SYS_SETFSGID                = 229
	SYS__NEWSELECT              = 230
	SYS_SPLICE                  = 232
	SYS_STIME                   = 233
	SYS_STATFS64                = 234
	SYS_FSTATFS64               = 235
	SYS__LLSEEK                 = 236
	SYS_MLOCK                   = 237
	SYS_MUNLOCK                 = 238
	SYS_MLOCKALL                = 239
	SYS_MUNLOCKALL              = 240
	SYS_SCHED_SETPARAM          = 241
	SYS_SCHED_GETPARAM          = 242
	SYS_SCHED_SETSCHEDULER      = 243
	SYS_SCHED_GETSCHEDULER      = 244
	SYS_SCHED_YIELD             = 245
	SYS_SCHED_GET_PRIORITY_MAX  = 246
	SYS_SCHED_GET_PRIORITY_MIN  = 247
	SYS_SCHED_RR_GET_INTERVAL   = 248
	SYS_NANOSLEEP               = 249
	SYS_MREMAP                  = 250
	SYS__SYSCTL                 = 251
	SYS_GETSID                  = 252
	SYS_FDATASYNC               = 253
	SYS_NFSSERVCTL              = 254
	SYS_SYNC_FILE_RANGE         = 255
	SYS_CLOCK_SETTIME           = 256
	SYS_CLOCK_GETTIME           = 257
	SYS_CLOCK_GETRES            = 258
	SYS_CLOCK_NANOSLEEP         = 259
	SYS_SCHED_GETAFFINITY       = 260
	SYS_SCHED_SETAFFINITY       = 261
	SYS_TIMER_SETTIME           = 262
	SYS_TIMER_GETTIME           = 263
	SYS_TIMER_GETOVERRUN        = 264
	SYS_TIMER_DELETE            = 265
	SYS_TIMER_CREATE            = 266
	SYS_VSERVER                 = 267
	SYS_IO_SETUP                = 268
	SYS_IO_DESTROY              = 269
	SYS_IO_SUBMIT               = 270
	SYS_IO_CANCEL               = 271
	SYS_IO_GETEVENTS            = 272
	SYS_MQ_OPEN                 = 273
	SYS_MQ_UNLINK               = 274
	SYS_MQ_TIMEDSEND            = 275
	SYS_MQ_TIMEDRECEIVE         = 276
	SYS_MQ_NOTIFY               = 277
	SYS_MQ_GETSETATTR           = 278
	SYS_WAITID                  = 279
	SYS_TEE                     = 280
	SYS_ADD_KEY                 = 281
	SYS_REQUEST_KEY             = 282
	SYS_KEYCTL                  = 283
	SYS_OPENAT                  = 284
	SYS_MKDIRAT                 = 285
	SYS_MKNODAT                 = 286
	SYS_FCHOWNAT                = 287
	SYS_FUTIMESAT               = 288
	SYS_FSTATAT64               = 289
	SYS_UNLINKAT                = 290
	SYS_RENAMEAT                = 291
	SYS_LINKAT                  = 292
	SYS_SYMLINKAT               = 293
	SYS_READLINKAT              = 294
	SYS_FCHMODAT                = 295
	SYS_FACCESSAT               = 296
	SYS_PSELECT6                = 297
	SYS_PPOLL                   = 298
	SYS_UNSHARE                 = 299
	SYS_SET_ROBUST_LIST         = 300
	SYS_GET_ROBUST_LIST         = 301
	SYS_MIGRATE_PAGES           = 302
	SYS_MBIND                   = 303
	SYS_GET_MEMPOLICY           = 304
	SYS_SET_MEMPOLICY           = 305
	SYS_KEXEC_LOAD              = 306
	SYS_MOVE_PAGES              = 307
	SYS_GETCPU                  = 308
	SYS_EPOLL_PWAIT             = 309
	SYS_UTIMENSAT               = 310
	SYS_SIGNALFD                = 311
	SYS_TIMERFD_CREATE          = 312
	SYS_EVENTFD                 = 313
	SYS_FALLOCATE               = 314
	SYS_TIMERFD_SETTIME         = 315
	SYS_TIMERFD_GETTIME         = 316
	SYS_SIGNALFD4               = 317
	SYS_EVENTFD2                = 318
	SYS_EPOLL_CREATE1           = 319
	SYS_DUP3                    = 320
	SYS_PIPE2                   = 321
	SYS_INOTIFY_INIT1           = 322
	SYS_ACCEPT4                 = 323
	SYS_PREADV                  = 324
	SYS_PWRITEV                 = 325
	SYS_RT_TGSIGQUEUEINFO       = 326
	SYS_PERF_EVENT_OPEN         = 327
	SYS_RECVMMSG                = 328
	SYS_FANOTIFY_INIT           = 329
	SYS_FANOTIFY_MARK           = 330
	SYS_PRLIMIT64               = 331
	SYS_NAME_TO_HANDLE_AT       = 332
	SYS_OPEN_BY_HANDLE_AT       = 333
	SYS_CLOCK_ADJTIME           = 334
	SYS_SYNCFS                  = 335
	SYS_SENDMMSG                = 336
	SYS_SETNS                   = 337
	SYS_PROCESS_VM_READV        = 338
	SYS_PROCESS_VM_WRITEV       = 339
	SYS_KERN_FEATURES           = 340
	SYS_KCMP                    = 341
	SYS_FINIT_MODULE            = 342
	SYS_SCHED_SETATTR           = 343
	SYS_SCHED_GETATTR           = 344
	SYS_RENAMEAT2               = 345
	SYS_SECCOMP                 = 346
	SYS_GETRANDOM               = 347
	SYS_MEMFD_CREATE            = 348
	SYS_BPF                     = 349
	SYS_EXECVEAT                = 350
	SYS_MEMBARRIER              = 351
	SYS_USERFAULTFD             = 352
	SYS_BIND                    = 353
	SYS_LISTEN                  = 354
	SYS_SETSOCKOPT              = 355
	SYS_MLOCK2                  = 356
	SYS_COPY_FILE_RANGE         = 357
	SYS_PREADV2                 = 358
	SYS_PWRITEV2                = 359
	SYS_STATX                   = 360
	SYS_IO_PGETEVENTS           = 361
	SYS_PKEY_MPROTECT           = 362
	SYS_PKEY_ALLOC              = 363
	SYS_PKEY_FREE               = 364
	SYS_RSEQ                    = 365
	SYS_SEMTIMEDOP              = 392
	SYS_SEMGET                  = 393
	SYS_SEMCTL                  = 394
	SYS_SHMGET                  = 395
	SYS_SHMCTL                  = 396
	SYS_SHMAT                   = 397
	SYS_SHMDT                   = 398
	SYS_MSGGET                  = 399
	SYS_MSGSND                  = 400
	SYS_MSGRCV                  = 401
	SYS_MSGCTL                  = 402
	SYS_PIDFD_SEND_SIGNAL       = 424
	SYS_IO_URING_SETUP          = 425
	SYS_IO_URING_ENTER          = 426
	SYS_IO_URING_REGISTER       = 427
	SYS_OPEN_TREE               = 428
	SYS_MOVE_MOUNT              = 429
	SYS_FSOPEN                  = 430
	SYS_FSCONFIG                = 431
	SYS_FSMOUNT                 = 432
	SYS_FSPICK                  = 433
	SYS_PIDFD_OPEN              = 434
	SYS_CLOSE_RANGE             = 436
	SYS_OPENAT2                 = 437
	SYS_PIDFD_GETFD             = 438
	SYS_FACCESSAT2              = 439
	SYS_PROCESS_MADVISE         = 440
	SYS_EPOLL_PWAIT2            = 441
	SYS_MOUNT_SETATTR           = 442
	SYS_QUOTACTL_FD             = 443
	SYS_LANDLOCK_CREATE_RULESET = 444
	SYS_LANDLOCK_ADD_RULE       = 445
	SYS_LANDLOCK_RESTRICT_SELF  = 446
	SYS_PROCESS_MRELEASE        = 448
	SYS_FUTEX_WAITV             = 449
	SYS_SET_MEMPOLICY_HOME_NODE = 450
)
   07070100000E9D000081A4000000000000000000000001645E367C000066FB000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go    // go run mksysnum.go http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build 386 && netbsd
// +build 386,netbsd

package unix

const (
	SYS_EXIT                 = 1   // { void|sys||exit(int rval); }
	SYS_FORK                 = 2   // { int|sys||fork(void); }
	SYS_READ                 = 3   // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); }
	SYS_WRITE                = 4   // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); }
	SYS_OPEN                 = 5   // { int|sys||open(const char *path, int flags, ... mode_t mode); }
	SYS_CLOSE                = 6   // { int|sys||close(int fd); }
	SYS_LINK                 = 9   // { int|sys||link(const char *path, const char *link); }
	SYS_UNLINK               = 10  // { int|sys||unlink(const char *path); }
	SYS_CHDIR                = 12  // { int|sys||chdir(const char *path); }
	SYS_FCHDIR               = 13  // { int|sys||fchdir(int fd); }
	SYS_CHMOD                = 15  // { int|sys||chmod(const char *path, mode_t mode); }
	SYS_CHOWN                = 16  // { int|sys||chown(const char *path, uid_t uid, gid_t gid); }
	SYS_BREAK                = 17  // { int|sys||obreak(char *nsize); }
	SYS_GETPID               = 20  // { pid_t|sys||getpid_with_ppid(void); }
	SYS_UNMOUNT              = 22  // { int|sys||unmount(const char *path, int flags); }
	SYS_SETUID               = 23  // { int|sys||setuid(uid_t uid); }
	SYS_GETUID               = 24  // { uid_t|sys||getuid_with_euid(void); }
	SYS_GETEUID              = 25  // { uid_t|sys||geteuid(void); }
	SYS_PTRACE               = 26  // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); }
	SYS_RECVMSG              = 27  // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); }
	SYS_SENDMSG              = 28  // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); }
	SYS_RECVFROM             = 29  // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }
	SYS_ACCEPT               = 30  // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); }
	SYS_GETPEERNAME          = 31  // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }
	SYS_GETSOCKNAME          = 32  // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }
	SYS_ACCESS               = 33  // { int|sys||access(const char *path, int flags); }
	SYS_CHFLAGS              = 34  // { int|sys||chflags(const char *path, u_long flags); }
	SYS_FCHFLAGS             = 35  // { int|sys||fchflags(int fd, u_long flags); }
	SYS_SYNC                 = 36  // { void|sys||sync(void); }
	SYS_KILL                 = 37  // { int|sys||kill(pid_t pid, int signum); }
	SYS_GETPPID              = 39  // { pid_t|sys||getppid(void); }
	SYS_DUP                  = 41  // { int|sys||dup(int fd); }
	SYS_PIPE                 = 42  // { int|sys||pipe(void); }
	SYS_GETEGID              = 43  // { gid_t|sys||getegid(void); }
	SYS_PROFIL               = 44  // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); }
	SYS_KTRACE               = 45  // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); }
	SYS_GETGID               = 47  // { gid_t|sys||getgid_with_egid(void); }
	SYS___GETLOGIN           = 49  // { int|sys||__getlogin(char *namebuf, size_t namelen); }
	SYS___SETLOGIN           = 50  // { int|sys||__setlogin(const char *namebuf); }
	SYS_ACCT                 = 51  // { int|sys||acct(const char *path); }
	SYS_IOCTL                = 54  // { int|sys||ioctl(int fd, u_long com, ... void *data); }
	SYS_REVOKE               = 56  // { int|sys||revoke(const char *path); }
	SYS_SYMLINK              = 57  // { int|sys||symlink(const char *path, const char *link); }
	SYS_READLINK             = 58  // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); }
	SYS_EXECVE               = 59  // { int|sys||execve(const char *path, char * const *argp, char * const *envp); }
	SYS_UMASK                = 60  // { mode_t|sys||umask(mode_t newmask); }
	SYS_CHROOT               = 61  // { int|sys||chroot(const char *path); }
	SYS_VFORK                = 66  // { int|sys||vfork(void); }
	SYS_SBRK                 = 69  // { int|sys||sbrk(intptr_t incr); }
	SYS_SSTK                 = 70  // { int|sys||sstk(int incr); }
	SYS_VADVISE              = 72  // { int|sys||ovadvise(int anom); }
	SYS_MUNMAP               = 73  // { int|sys||munmap(void *addr, size_t len); }
	SYS_MPROTECT             = 74  // { int|sys||mprotect(void *addr, size_t len, int prot); }
	SYS_MADVISE              = 75  // { int|sys||madvise(void *addr, size_t len, int behav); }
	SYS_MINCORE              = 78  // { int|sys||mincore(void *addr, size_t len, char *vec); }
	SYS_GETGROUPS            = 79  // { int|sys||getgroups(int gidsetsize, gid_t *gidset); }
	SYS_SETGROUPS            = 80  // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); }
	SYS_GETPGRP              = 81  // { int|sys||getpgrp(void); }
	SYS_SETPGID              = 82  // { int|sys||setpgid(pid_t pid, pid_t pgid); }
	SYS_DUP2                 = 90  // { int|sys||dup2(int from, int to); }
	SYS_FCNTL                = 92  // { int|sys||fcntl(int fd, int cmd, ... void *arg); }
	SYS_FSYNC                = 95  // { int|sys||fsync(int fd); }
	SYS_SETPRIORITY          = 96  // { int|sys||setpriority(int which, id_t who, int prio); }
	SYS_CONNECT              = 98  // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); }
	SYS_GETPRIORITY          = 100 // { int|sys||getpriority(int which, id_t who); }
	SYS_BIND                 = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); }
	SYS_SETSOCKOPT           = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }
	SYS_LISTEN               = 106 // { int|sys||listen(int s, int backlog); }
	SYS_GETSOCKOPT           = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }
	SYS_READV                = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); }
	SYS_WRITEV               = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); }
	SYS_FCHOWN               = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); }
	SYS_FCHMOD               = 124 // { int|sys||fchmod(int fd, mode_t mode); }
	SYS_SETREUID             = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); }
	SYS_SETREGID             = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); }
	SYS_RENAME               = 128 // { int|sys||rename(const char *from, const char *to); }
	SYS_FLOCK                = 131 // { int|sys||flock(int fd, int how); }
	SYS_MKFIFO               = 132 // { int|sys||mkfifo(const char *path, mode_t mode); }
	SYS_SENDTO               = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }
	SYS_SHUTDOWN             = 134 // { int|sys||shutdown(int s, int how); }
	SYS_SOCKETPAIR           = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); }
	SYS_MKDIR                = 136 // { int|sys||mkdir(const char *path, mode_t mode); }
	SYS_RMDIR                = 137 // { int|sys||rmdir(const char *path); }
	SYS_SETSID               = 147 // { int|sys||setsid(void); }
	SYS_SYSARCH              = 165 // { int|sys||sysarch(int op, void *parms); }
	SYS_PREAD                = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); }
	SYS_PWRITE               = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); }
	SYS_NTP_ADJTIME          = 176 // { int|sys||ntp_adjtime(struct timex *tp); }
	SYS_SETGID               = 181 // { int|sys||setgid(gid_t gid); }
	SYS_SETEGID              = 182 // { int|sys||setegid(gid_t egid); }
	SYS_SETEUID              = 183 // { int|sys||seteuid(uid_t euid); }
	SYS_PATHCONF             = 191 // { long|sys||pathconf(const char *path, int name); }
	SYS_FPATHCONF            = 192 // { long|sys||fpathconf(int fd, int name); }
	SYS_GETRLIMIT            = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); }
	SYS_SETRLIMIT            = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); }
	SYS_MMAP                 = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); }
	SYS_LSEEK                = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); }
	SYS_TRUNCATE             = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); }
	SYS_FTRUNCATE            = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); }
	SYS___SYSCTL             = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); }
	SYS_MLOCK                = 203 // { int|sys||mlock(const void *addr, size_t len); }
	SYS_MUNLOCK              = 204 // { int|sys||munlock(const void *addr, size_t len); }
	SYS_UNDELETE             = 205 // { int|sys||undelete(const char *path); }
	SYS_GETPGID              = 207 // { pid_t|sys||getpgid(pid_t pid); }
	SYS_REBOOT               = 208 // { int|sys||reboot(int opt, char *bootstr); }
	SYS_POLL                 = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); }
	SYS_SEMGET               = 221 // { int|sys||semget(key_t key, int nsems, int semflg); }
	SYS_SEMOP                = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); }
	SYS_SEMCONFIG            = 223 // { int|sys||semconfig(int flag); }
	SYS_MSGGET               = 225 // { int|sys||msgget(key_t key, int msgflg); }
	SYS_MSGSND               = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
	SYS_MSGRCV               = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
	SYS_SHMAT                = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); }
	SYS_SHMDT                = 230 // { int|sys||shmdt(const void *shmaddr); }
	SYS_SHMGET               = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); }
	SYS_TIMER_CREATE         = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); }
	SYS_TIMER_DELETE         = 236 // { int|sys||timer_delete(timer_t timerid); }
	SYS_TIMER_GETOVERRUN     = 239 // { int|sys||timer_getoverrun(timer_t timerid); }
	SYS_FDATASYNC            = 241 // { int|sys||fdatasync(int fd); }
	SYS_MLOCKALL             = 242 // { int|sys||mlockall(int flags); }
	SYS_MUNLOCKALL           = 243 // { int|sys||munlockall(void); }
	SYS_SIGQUEUEINFO         = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); }
	SYS_MODCTL               = 246 // { int|sys||modctl(int cmd, void *arg); }
	SYS___POSIX_RENAME       = 270 // { int|sys||__posix_rename(const char *from, const char *to); }
	SYS_SWAPCTL              = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); }
	SYS_MINHERIT             = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); }
	SYS_LCHMOD               = 274 // { int|sys||lchmod(const char *path, mode_t mode); }
	SYS_LCHOWN               = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); }
	SYS_MSYNC                = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); }
	SYS___POSIX_CHOWN        = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); }
	SYS___POSIX_FCHOWN       = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); }
	SYS___POSIX_LCHOWN       = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); }
	SYS_GETSID               = 286 // { pid_t|sys||getsid(pid_t pid); }
	SYS___CLONE              = 287 // { pid_t|sys||__clone(int flags, void *stack); }
	SYS_FKTRACE              = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); }
	SYS_PREADV               = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); }
	SYS_PWRITEV              = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); }
	SYS___GETCWD             = 296 // { int|sys||__getcwd(char *bufp, size_t length); }
	SYS_FCHROOT              = 297 // { int|sys||fchroot(int fd); }
	SYS_LCHFLAGS             = 304 // { int|sys||lchflags(const char *path, u_long flags); }
	SYS_ISSETUGID            = 305 // { int|sys||issetugid(void); }
	SYS_UTRACE               = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); }
	SYS_GETCONTEXT           = 307 // { int|sys||getcontext(struct __ucontext *ucp); }
	SYS_SETCONTEXT           = 308 // { int|sys||setcontext(const struct __ucontext *ucp); }
	SYS__LWP_CREATE          = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); }
	SYS__LWP_EXIT            = 310 // { int|sys||_lwp_exit(void); }
	SYS__LWP_SELF            = 311 // { lwpid_t|sys||_lwp_self(void); }
	SYS__LWP_WAIT            = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); }
	SYS__LWP_SUSPEND         = 313 // { int|sys||_lwp_suspend(lwpid_t target); }
	SYS__LWP_CONTINUE        = 314 // { int|sys||_lwp_continue(lwpid_t target); }
	SYS__LWP_WAKEUP          = 315 // { int|sys||_lwp_wakeup(lwpid_t target); }
	SYS__LWP_GETPRIVATE      = 316 // { void *|sys||_lwp_getprivate(void); }
	SYS__LWP_SETPRIVATE      = 317 // { void|sys||_lwp_setprivate(void *ptr); }
	SYS__LWP_KILL            = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); }
	SYS__LWP_DETACH          = 319 // { int|sys||_lwp_detach(lwpid_t target); }
	SYS__LWP_UNPARK          = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); }
	SYS__LWP_UNPARK_ALL      = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); }
	SYS__LWP_SETNAME         = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); }
	SYS__LWP_GETNAME         = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); }
	SYS__LWP_CTL             = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); }
	SYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); }
	SYS_PMC_GET_INFO         = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); }
	SYS_PMC_CONTROL          = 342 // { int|sys||pmc_control(int ctr, int op, void *args); }
	SYS_RASCTL               = 343 // { int|sys||rasctl(void *addr, size_t len, int op); }
	SYS_KQUEUE               = 344 // { int|sys||kqueue(void); }
	SYS__SCHED_SETPARAM      = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); }
	SYS__SCHED_GETPARAM      = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); }
	SYS__SCHED_SETAFFINITY   = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); }
	SYS__SCHED_GETAFFINITY   = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); }
	SYS_SCHED_YIELD          = 350 // { int|sys||sched_yield(void); }
	SYS_FSYNC_RANGE          = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); }
	SYS_UUIDGEN              = 355 // { int|sys||uuidgen(struct uuid *store, int count); }
	SYS_GETVFSSTAT           = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); }
	SYS_STATVFS1             = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); }
	SYS_FSTATVFS1            = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); }
	SYS_EXTATTRCTL           = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }
	SYS_EXTATTR_SET_FILE     = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }
	SYS_EXTATTR_GET_FILE     = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_FILE  = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }
	SYS_EXTATTR_SET_FD       = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }
	SYS_EXTATTR_GET_FD       = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_FD    = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }
	SYS_EXTATTR_SET_LINK     = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }
	SYS_EXTATTR_GET_LINK     = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_LINK  = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); }
	SYS_EXTATTR_LIST_FD      = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }
	SYS_EXTATTR_LIST_FILE    = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); }
	SYS_EXTATTR_LIST_LINK    = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); }
	SYS_SETXATTR             = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); }
	SYS_LSETXATTR            = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); }
	SYS_FSETXATTR            = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); }
	SYS_GETXATTR             = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); }
	SYS_LGETXATTR            = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); }
	SYS_FGETXATTR            = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); }
	SYS_LISTXATTR            = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); }
	SYS_LLISTXATTR           = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); }
	SYS_FLISTXATTR           = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); }
	SYS_REMOVEXATTR          = 384 // { int|sys||removexattr(const char *path, const char *name); }
	SYS_LREMOVEXATTR         = 385 // { int|sys||lremovexattr(const char *path, const char *name); }
	SYS_FREMOVEXATTR         = 386 // { int|sys||fremovexattr(int fd, const char *name); }
	SYS_GETDENTS             = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); }
	SYS_SOCKET               = 394 // { int|sys|30|socket(int domain, int type, int protocol); }
	SYS_GETFH                = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); }
	SYS_MOUNT                = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); }
	SYS_MREMAP               = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); }
	SYS_PSET_CREATE          = 412 // { int|sys||pset_create(psetid_t *psid); }
	SYS_PSET_DESTROY         = 413 // { int|sys||pset_destroy(psetid_t psid); }
	SYS_PSET_ASSIGN          = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); }
	SYS__PSET_BIND           = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); }
	SYS_POSIX_FADVISE        = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); }
	SYS_SELECT               = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
	SYS_GETTIMEOFDAY         = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); }
	SYS_SETTIMEOFDAY         = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); }
	SYS_UTIMES               = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); }
	SYS_ADJTIME              = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); }
	SYS_FUTIMES              = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); }
	SYS_LUTIMES              = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); }
	SYS_SETITIMER            = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }
	SYS_GETITIMER            = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); }
	SYS_CLOCK_GETTIME        = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); }
	SYS_CLOCK_SETTIME        = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); }
	SYS_CLOCK_GETRES         = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); }
	SYS_NANOSLEEP            = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
	SYS___SIGTIMEDWAIT       = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); }
	SYS__LWP_PARK            = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); }
	SYS_KEVENT               = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); }
	SYS_PSELECT              = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }
	SYS_POLLTS               = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }
	SYS_STAT                 = 439 // { int|sys|50|stat(const char *path, struct stat *ub); }
	SYS_FSTAT                = 440 // { int|sys|50|fstat(int fd, struct stat *sb); }
	SYS_LSTAT                = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); }
	SYS___SEMCTL             = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); }
	SYS_SHMCTL               = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); }
	SYS_MSGCTL               = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); }
	SYS_GETRUSAGE            = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); }
	SYS_TIMER_SETTIME        = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }
	SYS_TIMER_GETTIME        = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); }
	SYS_NTP_GETTIME          = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); }
	SYS_WAIT4                = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); }
	SYS_MKNOD                = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); }
	SYS_FHSTAT               = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); }
	SYS_PIPE2                = 453 // { int|sys||pipe2(int *fildes, int flags); }
	SYS_DUP3                 = 454 // { int|sys||dup3(int from, int to, int flags); }
	SYS_KQUEUE1              = 455 // { int|sys||kqueue1(int flags); }
	SYS_PACCEPT              = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); }
	SYS_LINKAT               = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); }
	SYS_RENAMEAT             = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); }
	SYS_MKFIFOAT             = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); }
	SYS_MKNODAT              = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); }
	SYS_MKDIRAT              = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); }
	SYS_FACCESSAT            = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); }
	SYS_FCHMODAT             = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); }
	SYS_FCHOWNAT             = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); }
	SYS_FEXECVE              = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); }
	SYS_FSTATAT              = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); }
	SYS_UTIMENSAT            = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); }
	SYS_OPENAT               = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); }
	SYS_READLINKAT           = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); }
	SYS_SYMLINKAT            = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); }
	SYS_UNLINKAT             = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); }
	SYS_FUTIMENS             = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); }
	SYS___QUOTACTL           = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); }
	SYS_POSIX_SPAWN          = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); }
	SYS_RECVMMSG             = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); }
	SYS_SENDMMSG             = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); }
)
 07070100000E9E000081A4000000000000000000000001645E367C000066FF000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go  // go run mksysnum.go http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build amd64 && netbsd
// +build amd64,netbsd

package unix

const (
	SYS_EXIT                 = 1   // { void|sys||exit(int rval); }
	SYS_FORK                 = 2   // { int|sys||fork(void); }
	SYS_READ                 = 3   // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); }
	SYS_WRITE                = 4   // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); }
	SYS_OPEN                 = 5   // { int|sys||open(const char *path, int flags, ... mode_t mode); }
	SYS_CLOSE                = 6   // { int|sys||close(int fd); }
	SYS_LINK                 = 9   // { int|sys||link(const char *path, const char *link); }
	SYS_UNLINK               = 10  // { int|sys||unlink(const char *path); }
	SYS_CHDIR                = 12  // { int|sys||chdir(const char *path); }
	SYS_FCHDIR               = 13  // { int|sys||fchdir(int fd); }
	SYS_CHMOD                = 15  // { int|sys||chmod(const char *path, mode_t mode); }
	SYS_CHOWN                = 16  // { int|sys||chown(const char *path, uid_t uid, gid_t gid); }
	SYS_BREAK                = 17  // { int|sys||obreak(char *nsize); }
	SYS_GETPID               = 20  // { pid_t|sys||getpid_with_ppid(void); }
	SYS_UNMOUNT              = 22  // { int|sys||unmount(const char *path, int flags); }
	SYS_SETUID               = 23  // { int|sys||setuid(uid_t uid); }
	SYS_GETUID               = 24  // { uid_t|sys||getuid_with_euid(void); }
	SYS_GETEUID              = 25  // { uid_t|sys||geteuid(void); }
	SYS_PTRACE               = 26  // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); }
	SYS_RECVMSG              = 27  // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); }
	SYS_SENDMSG              = 28  // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); }
	SYS_RECVFROM             = 29  // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }
	SYS_ACCEPT               = 30  // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); }
	SYS_GETPEERNAME          = 31  // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }
	SYS_GETSOCKNAME          = 32  // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }
	SYS_ACCESS               = 33  // { int|sys||access(const char *path, int flags); }
	SYS_CHFLAGS              = 34  // { int|sys||chflags(const char *path, u_long flags); }
	SYS_FCHFLAGS             = 35  // { int|sys||fchflags(int fd, u_long flags); }
	SYS_SYNC                 = 36  // { void|sys||sync(void); }
	SYS_KILL                 = 37  // { int|sys||kill(pid_t pid, int signum); }
	SYS_GETPPID              = 39  // { pid_t|sys||getppid(void); }
	SYS_DUP                  = 41  // { int|sys||dup(int fd); }
	SYS_PIPE                 = 42  // { int|sys||pipe(void); }
	SYS_GETEGID              = 43  // { gid_t|sys||getegid(void); }
	SYS_PROFIL               = 44  // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); }
	SYS_KTRACE               = 45  // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); }
	SYS_GETGID               = 47  // { gid_t|sys||getgid_with_egid(void); }
	SYS___GETLOGIN           = 49  // { int|sys||__getlogin(char *namebuf, size_t namelen); }
	SYS___SETLOGIN           = 50  // { int|sys||__setlogin(const char *namebuf); }
	SYS_ACCT                 = 51  // { int|sys||acct(const char *path); }
	SYS_IOCTL                = 54  // { int|sys||ioctl(int fd, u_long com, ... void *data); }
	SYS_REVOKE               = 56  // { int|sys||revoke(const char *path); }
	SYS_SYMLINK              = 57  // { int|sys||symlink(const char *path, const char *link); }
	SYS_READLINK             = 58  // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); }
	SYS_EXECVE               = 59  // { int|sys||execve(const char *path, char * const *argp, char * const *envp); }
	SYS_UMASK                = 60  // { mode_t|sys||umask(mode_t newmask); }
	SYS_CHROOT               = 61  // { int|sys||chroot(const char *path); }
	SYS_VFORK                = 66  // { int|sys||vfork(void); }
	SYS_SBRK                 = 69  // { int|sys||sbrk(intptr_t incr); }
	SYS_SSTK                 = 70  // { int|sys||sstk(int incr); }
	SYS_VADVISE              = 72  // { int|sys||ovadvise(int anom); }
	SYS_MUNMAP               = 73  // { int|sys||munmap(void *addr, size_t len); }
	SYS_MPROTECT             = 74  // { int|sys||mprotect(void *addr, size_t len, int prot); }
	SYS_MADVISE              = 75  // { int|sys||madvise(void *addr, size_t len, int behav); }
	SYS_MINCORE              = 78  // { int|sys||mincore(void *addr, size_t len, char *vec); }
	SYS_GETGROUPS            = 79  // { int|sys||getgroups(int gidsetsize, gid_t *gidset); }
	SYS_SETGROUPS            = 80  // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); }
	SYS_GETPGRP              = 81  // { int|sys||getpgrp(void); }
	SYS_SETPGID              = 82  // { int|sys||setpgid(pid_t pid, pid_t pgid); }
	SYS_DUP2                 = 90  // { int|sys||dup2(int from, int to); }
	SYS_FCNTL                = 92  // { int|sys||fcntl(int fd, int cmd, ... void *arg); }
	SYS_FSYNC                = 95  // { int|sys||fsync(int fd); }
	SYS_SETPRIORITY          = 96  // { int|sys||setpriority(int which, id_t who, int prio); }
	SYS_CONNECT              = 98  // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); }
	SYS_GETPRIORITY          = 100 // { int|sys||getpriority(int which, id_t who); }
	SYS_BIND                 = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); }
	SYS_SETSOCKOPT           = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }
	SYS_LISTEN               = 106 // { int|sys||listen(int s, int backlog); }
	SYS_GETSOCKOPT           = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }
	SYS_READV                = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); }
	SYS_WRITEV               = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); }
	SYS_FCHOWN               = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); }
	SYS_FCHMOD               = 124 // { int|sys||fchmod(int fd, mode_t mode); }
	SYS_SETREUID             = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); }
	SYS_SETREGID             = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); }
	SYS_RENAME               = 128 // { int|sys||rename(const char *from, const char *to); }
	SYS_FLOCK                = 131 // { int|sys||flock(int fd, int how); }
	SYS_MKFIFO               = 132 // { int|sys||mkfifo(const char *path, mode_t mode); }
	SYS_SENDTO               = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }
	SYS_SHUTDOWN             = 134 // { int|sys||shutdown(int s, int how); }
	SYS_SOCKETPAIR           = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); }
	SYS_MKDIR                = 136 // { int|sys||mkdir(const char *path, mode_t mode); }
	SYS_RMDIR                = 137 // { int|sys||rmdir(const char *path); }
	SYS_SETSID               = 147 // { int|sys||setsid(void); }
	SYS_SYSARCH              = 165 // { int|sys||sysarch(int op, void *parms); }
	SYS_PREAD                = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); }
	SYS_PWRITE               = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); }
	SYS_NTP_ADJTIME          = 176 // { int|sys||ntp_adjtime(struct timex *tp); }
	SYS_SETGID               = 181 // { int|sys||setgid(gid_t gid); }
	SYS_SETEGID              = 182 // { int|sys||setegid(gid_t egid); }
	SYS_SETEUID              = 183 // { int|sys||seteuid(uid_t euid); }
	SYS_PATHCONF             = 191 // { long|sys||pathconf(const char *path, int name); }
	SYS_FPATHCONF            = 192 // { long|sys||fpathconf(int fd, int name); }
	SYS_GETRLIMIT            = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); }
	SYS_SETRLIMIT            = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); }
	SYS_MMAP                 = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); }
	SYS_LSEEK                = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); }
	SYS_TRUNCATE             = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); }
	SYS_FTRUNCATE            = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); }
	SYS___SYSCTL             = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); }
	SYS_MLOCK                = 203 // { int|sys||mlock(const void *addr, size_t len); }
	SYS_MUNLOCK              = 204 // { int|sys||munlock(const void *addr, size_t len); }
	SYS_UNDELETE             = 205 // { int|sys||undelete(const char *path); }
	SYS_GETPGID              = 207 // { pid_t|sys||getpgid(pid_t pid); }
	SYS_REBOOT               = 208 // { int|sys||reboot(int opt, char *bootstr); }
	SYS_POLL                 = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); }
	SYS_SEMGET               = 221 // { int|sys||semget(key_t key, int nsems, int semflg); }
	SYS_SEMOP                = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); }
	SYS_SEMCONFIG            = 223 // { int|sys||semconfig(int flag); }
	SYS_MSGGET               = 225 // { int|sys||msgget(key_t key, int msgflg); }
	SYS_MSGSND               = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
	SYS_MSGRCV               = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
	SYS_SHMAT                = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); }
	SYS_SHMDT                = 230 // { int|sys||shmdt(const void *shmaddr); }
	SYS_SHMGET               = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); }
	SYS_TIMER_CREATE         = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); }
	SYS_TIMER_DELETE         = 236 // { int|sys||timer_delete(timer_t timerid); }
	SYS_TIMER_GETOVERRUN     = 239 // { int|sys||timer_getoverrun(timer_t timerid); }
	SYS_FDATASYNC            = 241 // { int|sys||fdatasync(int fd); }
	SYS_MLOCKALL             = 242 // { int|sys||mlockall(int flags); }
	SYS_MUNLOCKALL           = 243 // { int|sys||munlockall(void); }
	SYS_SIGQUEUEINFO         = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); }
	SYS_MODCTL               = 246 // { int|sys||modctl(int cmd, void *arg); }
	SYS___POSIX_RENAME       = 270 // { int|sys||__posix_rename(const char *from, const char *to); }
	SYS_SWAPCTL              = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); }
	SYS_MINHERIT             = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); }
	SYS_LCHMOD               = 274 // { int|sys||lchmod(const char *path, mode_t mode); }
	SYS_LCHOWN               = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); }
	SYS_MSYNC                = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); }
	SYS___POSIX_CHOWN        = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); }
	SYS___POSIX_FCHOWN       = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); }
	SYS___POSIX_LCHOWN       = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); }
	SYS_GETSID               = 286 // { pid_t|sys||getsid(pid_t pid); }
	SYS___CLONE              = 287 // { pid_t|sys||__clone(int flags, void *stack); }
	SYS_FKTRACE              = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); }
	SYS_PREADV               = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); }
	SYS_PWRITEV              = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); }
	SYS___GETCWD             = 296 // { int|sys||__getcwd(char *bufp, size_t length); }
	SYS_FCHROOT              = 297 // { int|sys||fchroot(int fd); }
	SYS_LCHFLAGS             = 304 // { int|sys||lchflags(const char *path, u_long flags); }
	SYS_ISSETUGID            = 305 // { int|sys||issetugid(void); }
	SYS_UTRACE               = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); }
	SYS_GETCONTEXT           = 307 // { int|sys||getcontext(struct __ucontext *ucp); }
	SYS_SETCONTEXT           = 308 // { int|sys||setcontext(const struct __ucontext *ucp); }
	SYS__LWP_CREATE          = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); }
	SYS__LWP_EXIT            = 310 // { int|sys||_lwp_exit(void); }
	SYS__LWP_SELF            = 311 // { lwpid_t|sys||_lwp_self(void); }
	SYS__LWP_WAIT            = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); }
	SYS__LWP_SUSPEND         = 313 // { int|sys||_lwp_suspend(lwpid_t target); }
	SYS__LWP_CONTINUE        = 314 // { int|sys||_lwp_continue(lwpid_t target); }
	SYS__LWP_WAKEUP          = 315 // { int|sys||_lwp_wakeup(lwpid_t target); }
	SYS__LWP_GETPRIVATE      = 316 // { void *|sys||_lwp_getprivate(void); }
	SYS__LWP_SETPRIVATE      = 317 // { void|sys||_lwp_setprivate(void *ptr); }
	SYS__LWP_KILL            = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); }
	SYS__LWP_DETACH          = 319 // { int|sys||_lwp_detach(lwpid_t target); }
	SYS__LWP_UNPARK          = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); }
	SYS__LWP_UNPARK_ALL      = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); }
	SYS__LWP_SETNAME         = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); }
	SYS__LWP_GETNAME         = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); }
	SYS__LWP_CTL             = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); }
	SYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); }
	SYS_PMC_GET_INFO         = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); }
	SYS_PMC_CONTROL          = 342 // { int|sys||pmc_control(int ctr, int op, void *args); }
	SYS_RASCTL               = 343 // { int|sys||rasctl(void *addr, size_t len, int op); }
	SYS_KQUEUE               = 344 // { int|sys||kqueue(void); }
	SYS__SCHED_SETPARAM      = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); }
	SYS__SCHED_GETPARAM      = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); }
	SYS__SCHED_SETAFFINITY   = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); }
	SYS__SCHED_GETAFFINITY   = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); }
	SYS_SCHED_YIELD          = 350 // { int|sys||sched_yield(void); }
	SYS_FSYNC_RANGE          = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); }
	SYS_UUIDGEN              = 355 // { int|sys||uuidgen(struct uuid *store, int count); }
	SYS_GETVFSSTAT           = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); }
	SYS_STATVFS1             = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); }
	SYS_FSTATVFS1            = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); }
	SYS_EXTATTRCTL           = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }
	SYS_EXTATTR_SET_FILE     = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }
	SYS_EXTATTR_GET_FILE     = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_FILE  = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }
	SYS_EXTATTR_SET_FD       = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }
	SYS_EXTATTR_GET_FD       = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_FD    = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }
	SYS_EXTATTR_SET_LINK     = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }
	SYS_EXTATTR_GET_LINK     = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_LINK  = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); }
	SYS_EXTATTR_LIST_FD      = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }
	SYS_EXTATTR_LIST_FILE    = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); }
	SYS_EXTATTR_LIST_LINK    = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); }
	SYS_SETXATTR             = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); }
	SYS_LSETXATTR            = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); }
	SYS_FSETXATTR            = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); }
	SYS_GETXATTR             = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); }
	SYS_LGETXATTR            = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); }
	SYS_FGETXATTR            = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); }
	SYS_LISTXATTR            = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); }
	SYS_LLISTXATTR           = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); }
	SYS_FLISTXATTR           = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); }
	SYS_REMOVEXATTR          = 384 // { int|sys||removexattr(const char *path, const char *name); }
	SYS_LREMOVEXATTR         = 385 // { int|sys||lremovexattr(const char *path, const char *name); }
	SYS_FREMOVEXATTR         = 386 // { int|sys||fremovexattr(int fd, const char *name); }
	SYS_GETDENTS             = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); }
	SYS_SOCKET               = 394 // { int|sys|30|socket(int domain, int type, int protocol); }
	SYS_GETFH                = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); }
	SYS_MOUNT                = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); }
	SYS_MREMAP               = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); }
	SYS_PSET_CREATE          = 412 // { int|sys||pset_create(psetid_t *psid); }
	SYS_PSET_DESTROY         = 413 // { int|sys||pset_destroy(psetid_t psid); }
	SYS_PSET_ASSIGN          = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); }
	SYS__PSET_BIND           = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); }
	SYS_POSIX_FADVISE        = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); }
	SYS_SELECT               = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
	SYS_GETTIMEOFDAY         = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); }
	SYS_SETTIMEOFDAY         = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); }
	SYS_UTIMES               = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); }
	SYS_ADJTIME              = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); }
	SYS_FUTIMES              = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); }
	SYS_LUTIMES              = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); }
	SYS_SETITIMER            = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }
	SYS_GETITIMER            = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); }
	SYS_CLOCK_GETTIME        = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); }
	SYS_CLOCK_SETTIME        = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); }
	SYS_CLOCK_GETRES         = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); }
	SYS_NANOSLEEP            = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
	SYS___SIGTIMEDWAIT       = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); }
	SYS__LWP_PARK            = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); }
	SYS_KEVENT               = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); }
	SYS_PSELECT              = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }
	SYS_POLLTS               = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }
	SYS_STAT                 = 439 // { int|sys|50|stat(const char *path, struct stat *ub); }
	SYS_FSTAT                = 440 // { int|sys|50|fstat(int fd, struct stat *sb); }
	SYS_LSTAT                = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); }
	SYS___SEMCTL             = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); }
	SYS_SHMCTL               = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); }
	SYS_MSGCTL               = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); }
	SYS_GETRUSAGE            = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); }
	SYS_TIMER_SETTIME        = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }
	SYS_TIMER_GETTIME        = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); }
	SYS_NTP_GETTIME          = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); }
	SYS_WAIT4                = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); }
	SYS_MKNOD                = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); }
	SYS_FHSTAT               = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); }
	SYS_PIPE2                = 453 // { int|sys||pipe2(int *fildes, int flags); }
	SYS_DUP3                 = 454 // { int|sys||dup3(int from, int to, int flags); }
	SYS_KQUEUE1              = 455 // { int|sys||kqueue1(int flags); }
	SYS_PACCEPT              = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); }
	SYS_LINKAT               = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); }
	SYS_RENAMEAT             = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); }
	SYS_MKFIFOAT             = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); }
	SYS_MKNODAT              = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); }
	SYS_MKDIRAT              = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); }
	SYS_FACCESSAT            = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); }
	SYS_FCHMODAT             = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); }
	SYS_FCHOWNAT             = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); }
	SYS_FEXECVE              = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); }
	SYS_FSTATAT              = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); }
	SYS_UTIMENSAT            = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); }
	SYS_OPENAT               = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); }
	SYS_READLINKAT           = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); }
	SYS_SYMLINKAT            = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); }
	SYS_UNLINKAT             = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); }
	SYS_FUTIMENS             = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); }
	SYS___QUOTACTL           = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); }
	SYS_POSIX_SPAWN          = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); }
	SYS_RECVMMSG             = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); }
	SYS_SENDMMSG             = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); }
)
 07070100000E9F000081A4000000000000000000000001645E367C000066FB000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go    // go run mksysnum.go http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build arm && netbsd
// +build arm,netbsd

package unix

const (
	SYS_EXIT                 = 1   // { void|sys||exit(int rval); }
	SYS_FORK                 = 2   // { int|sys||fork(void); }
	SYS_READ                 = 3   // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); }
	SYS_WRITE                = 4   // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); }
	SYS_OPEN                 = 5   // { int|sys||open(const char *path, int flags, ... mode_t mode); }
	SYS_CLOSE                = 6   // { int|sys||close(int fd); }
	SYS_LINK                 = 9   // { int|sys||link(const char *path, const char *link); }
	SYS_UNLINK               = 10  // { int|sys||unlink(const char *path); }
	SYS_CHDIR                = 12  // { int|sys||chdir(const char *path); }
	SYS_FCHDIR               = 13  // { int|sys||fchdir(int fd); }
	SYS_CHMOD                = 15  // { int|sys||chmod(const char *path, mode_t mode); }
	SYS_CHOWN                = 16  // { int|sys||chown(const char *path, uid_t uid, gid_t gid); }
	SYS_BREAK                = 17  // { int|sys||obreak(char *nsize); }
	SYS_GETPID               = 20  // { pid_t|sys||getpid_with_ppid(void); }
	SYS_UNMOUNT              = 22  // { int|sys||unmount(const char *path, int flags); }
	SYS_SETUID               = 23  // { int|sys||setuid(uid_t uid); }
	SYS_GETUID               = 24  // { uid_t|sys||getuid_with_euid(void); }
	SYS_GETEUID              = 25  // { uid_t|sys||geteuid(void); }
	SYS_PTRACE               = 26  // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); }
	SYS_RECVMSG              = 27  // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); }
	SYS_SENDMSG              = 28  // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); }
	SYS_RECVFROM             = 29  // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }
	SYS_ACCEPT               = 30  // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); }
	SYS_GETPEERNAME          = 31  // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }
	SYS_GETSOCKNAME          = 32  // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }
	SYS_ACCESS               = 33  // { int|sys||access(const char *path, int flags); }
	SYS_CHFLAGS              = 34  // { int|sys||chflags(const char *path, u_long flags); }
	SYS_FCHFLAGS             = 35  // { int|sys||fchflags(int fd, u_long flags); }
	SYS_SYNC                 = 36  // { void|sys||sync(void); }
	SYS_KILL                 = 37  // { int|sys||kill(pid_t pid, int signum); }
	SYS_GETPPID              = 39  // { pid_t|sys||getppid(void); }
	SYS_DUP                  = 41  // { int|sys||dup(int fd); }
	SYS_PIPE                 = 42  // { int|sys||pipe(void); }
	SYS_GETEGID              = 43  // { gid_t|sys||getegid(void); }
	SYS_PROFIL               = 44  // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); }
	SYS_KTRACE               = 45  // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); }
	SYS_GETGID               = 47  // { gid_t|sys||getgid_with_egid(void); }
	SYS___GETLOGIN           = 49  // { int|sys||__getlogin(char *namebuf, size_t namelen); }
	SYS___SETLOGIN           = 50  // { int|sys||__setlogin(const char *namebuf); }
	SYS_ACCT                 = 51  // { int|sys||acct(const char *path); }
	SYS_IOCTL                = 54  // { int|sys||ioctl(int fd, u_long com, ... void *data); }
	SYS_REVOKE               = 56  // { int|sys||revoke(const char *path); }
	SYS_SYMLINK              = 57  // { int|sys||symlink(const char *path, const char *link); }
	SYS_READLINK             = 58  // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); }
	SYS_EXECVE               = 59  // { int|sys||execve(const char *path, char * const *argp, char * const *envp); }
	SYS_UMASK                = 60  // { mode_t|sys||umask(mode_t newmask); }
	SYS_CHROOT               = 61  // { int|sys||chroot(const char *path); }
	SYS_VFORK                = 66  // { int|sys||vfork(void); }
	SYS_SBRK                 = 69  // { int|sys||sbrk(intptr_t incr); }
	SYS_SSTK                 = 70  // { int|sys||sstk(int incr); }
	SYS_VADVISE              = 72  // { int|sys||ovadvise(int anom); }
	SYS_MUNMAP               = 73  // { int|sys||munmap(void *addr, size_t len); }
	SYS_MPROTECT             = 74  // { int|sys||mprotect(void *addr, size_t len, int prot); }
	SYS_MADVISE              = 75  // { int|sys||madvise(void *addr, size_t len, int behav); }
	SYS_MINCORE              = 78  // { int|sys||mincore(void *addr, size_t len, char *vec); }
	SYS_GETGROUPS            = 79  // { int|sys||getgroups(int gidsetsize, gid_t *gidset); }
	SYS_SETGROUPS            = 80  // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); }
	SYS_GETPGRP              = 81  // { int|sys||getpgrp(void); }
	SYS_SETPGID              = 82  // { int|sys||setpgid(pid_t pid, pid_t pgid); }
	SYS_DUP2                 = 90  // { int|sys||dup2(int from, int to); }
	SYS_FCNTL                = 92  // { int|sys||fcntl(int fd, int cmd, ... void *arg); }
	SYS_FSYNC                = 95  // { int|sys||fsync(int fd); }
	SYS_SETPRIORITY          = 96  // { int|sys||setpriority(int which, id_t who, int prio); }
	SYS_CONNECT              = 98  // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); }
	SYS_GETPRIORITY          = 100 // { int|sys||getpriority(int which, id_t who); }
	SYS_BIND                 = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); }
	SYS_SETSOCKOPT           = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }
	SYS_LISTEN               = 106 // { int|sys||listen(int s, int backlog); }
	SYS_GETSOCKOPT           = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }
	SYS_READV                = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); }
	SYS_WRITEV               = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); }
	SYS_FCHOWN               = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); }
	SYS_FCHMOD               = 124 // { int|sys||fchmod(int fd, mode_t mode); }
	SYS_SETREUID             = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); }
	SYS_SETREGID             = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); }
	SYS_RENAME               = 128 // { int|sys||rename(const char *from, const char *to); }
	SYS_FLOCK                = 131 // { int|sys||flock(int fd, int how); }
	SYS_MKFIFO               = 132 // { int|sys||mkfifo(const char *path, mode_t mode); }
	SYS_SENDTO               = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }
	SYS_SHUTDOWN             = 134 // { int|sys||shutdown(int s, int how); }
	SYS_SOCKETPAIR           = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); }
	SYS_MKDIR                = 136 // { int|sys||mkdir(const char *path, mode_t mode); }
	SYS_RMDIR                = 137 // { int|sys||rmdir(const char *path); }
	SYS_SETSID               = 147 // { int|sys||setsid(void); }
	SYS_SYSARCH              = 165 // { int|sys||sysarch(int op, void *parms); }
	SYS_PREAD                = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); }
	SYS_PWRITE               = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); }
	SYS_NTP_ADJTIME          = 176 // { int|sys||ntp_adjtime(struct timex *tp); }
	SYS_SETGID               = 181 // { int|sys||setgid(gid_t gid); }
	SYS_SETEGID              = 182 // { int|sys||setegid(gid_t egid); }
	SYS_SETEUID              = 183 // { int|sys||seteuid(uid_t euid); }
	SYS_PATHCONF             = 191 // { long|sys||pathconf(const char *path, int name); }
	SYS_FPATHCONF            = 192 // { long|sys||fpathconf(int fd, int name); }
	SYS_GETRLIMIT            = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); }
	SYS_SETRLIMIT            = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); }
	SYS_MMAP                 = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); }
	SYS_LSEEK                = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); }
	SYS_TRUNCATE             = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); }
	SYS_FTRUNCATE            = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); }
	SYS___SYSCTL             = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); }
	SYS_MLOCK                = 203 // { int|sys||mlock(const void *addr, size_t len); }
	SYS_MUNLOCK              = 204 // { int|sys||munlock(const void *addr, size_t len); }
	SYS_UNDELETE             = 205 // { int|sys||undelete(const char *path); }
	SYS_GETPGID              = 207 // { pid_t|sys||getpgid(pid_t pid); }
	SYS_REBOOT               = 208 // { int|sys||reboot(int opt, char *bootstr); }
	SYS_POLL                 = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); }
	SYS_SEMGET               = 221 // { int|sys||semget(key_t key, int nsems, int semflg); }
	SYS_SEMOP                = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); }
	SYS_SEMCONFIG            = 223 // { int|sys||semconfig(int flag); }
	SYS_MSGGET               = 225 // { int|sys||msgget(key_t key, int msgflg); }
	SYS_MSGSND               = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
	SYS_MSGRCV               = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
	SYS_SHMAT                = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); }
	SYS_SHMDT                = 230 // { int|sys||shmdt(const void *shmaddr); }
	SYS_SHMGET               = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); }
	SYS_TIMER_CREATE         = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); }
	SYS_TIMER_DELETE         = 236 // { int|sys||timer_delete(timer_t timerid); }
	SYS_TIMER_GETOVERRUN     = 239 // { int|sys||timer_getoverrun(timer_t timerid); }
	SYS_FDATASYNC            = 241 // { int|sys||fdatasync(int fd); }
	SYS_MLOCKALL             = 242 // { int|sys||mlockall(int flags); }
	SYS_MUNLOCKALL           = 243 // { int|sys||munlockall(void); }
	SYS_SIGQUEUEINFO         = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); }
	SYS_MODCTL               = 246 // { int|sys||modctl(int cmd, void *arg); }
	SYS___POSIX_RENAME       = 270 // { int|sys||__posix_rename(const char *from, const char *to); }
	SYS_SWAPCTL              = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); }
	SYS_MINHERIT             = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); }
	SYS_LCHMOD               = 274 // { int|sys||lchmod(const char *path, mode_t mode); }
	SYS_LCHOWN               = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); }
	SYS_MSYNC                = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); }
	SYS___POSIX_CHOWN        = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); }
	SYS___POSIX_FCHOWN       = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); }
	SYS___POSIX_LCHOWN       = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); }
	SYS_GETSID               = 286 // { pid_t|sys||getsid(pid_t pid); }
	SYS___CLONE              = 287 // { pid_t|sys||__clone(int flags, void *stack); }
	SYS_FKTRACE              = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); }
	SYS_PREADV               = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); }
	SYS_PWRITEV              = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); }
	SYS___GETCWD             = 296 // { int|sys||__getcwd(char *bufp, size_t length); }
	SYS_FCHROOT              = 297 // { int|sys||fchroot(int fd); }
	SYS_LCHFLAGS             = 304 // { int|sys||lchflags(const char *path, u_long flags); }
	SYS_ISSETUGID            = 305 // { int|sys||issetugid(void); }
	SYS_UTRACE               = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); }
	SYS_GETCONTEXT           = 307 // { int|sys||getcontext(struct __ucontext *ucp); }
	SYS_SETCONTEXT           = 308 // { int|sys||setcontext(const struct __ucontext *ucp); }
	SYS__LWP_CREATE          = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); }
	SYS__LWP_EXIT            = 310 // { int|sys||_lwp_exit(void); }
	SYS__LWP_SELF            = 311 // { lwpid_t|sys||_lwp_self(void); }
	SYS__LWP_WAIT            = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); }
	SYS__LWP_SUSPEND         = 313 // { int|sys||_lwp_suspend(lwpid_t target); }
	SYS__LWP_CONTINUE        = 314 // { int|sys||_lwp_continue(lwpid_t target); }
	SYS__LWP_WAKEUP          = 315 // { int|sys||_lwp_wakeup(lwpid_t target); }
	SYS__LWP_GETPRIVATE      = 316 // { void *|sys||_lwp_getprivate(void); }
	SYS__LWP_SETPRIVATE      = 317 // { void|sys||_lwp_setprivate(void *ptr); }
	SYS__LWP_KILL            = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); }
	SYS__LWP_DETACH          = 319 // { int|sys||_lwp_detach(lwpid_t target); }
	SYS__LWP_UNPARK          = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); }
	SYS__LWP_UNPARK_ALL      = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); }
	SYS__LWP_SETNAME         = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); }
	SYS__LWP_GETNAME         = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); }
	SYS__LWP_CTL             = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); }
	SYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); }
	SYS_PMC_GET_INFO         = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); }
	SYS_PMC_CONTROL          = 342 // { int|sys||pmc_control(int ctr, int op, void *args); }
	SYS_RASCTL               = 343 // { int|sys||rasctl(void *addr, size_t len, int op); }
	SYS_KQUEUE               = 344 // { int|sys||kqueue(void); }
	SYS__SCHED_SETPARAM      = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); }
	SYS__SCHED_GETPARAM      = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); }
	SYS__SCHED_SETAFFINITY   = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); }
	SYS__SCHED_GETAFFINITY   = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); }
	SYS_SCHED_YIELD          = 350 // { int|sys||sched_yield(void); }
	SYS_FSYNC_RANGE          = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); }
	SYS_UUIDGEN              = 355 // { int|sys||uuidgen(struct uuid *store, int count); }
	SYS_GETVFSSTAT           = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); }
	SYS_STATVFS1             = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); }
	SYS_FSTATVFS1            = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); }
	SYS_EXTATTRCTL           = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }
	SYS_EXTATTR_SET_FILE     = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }
	SYS_EXTATTR_GET_FILE     = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_FILE  = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }
	SYS_EXTATTR_SET_FD       = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }
	SYS_EXTATTR_GET_FD       = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_FD    = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }
	SYS_EXTATTR_SET_LINK     = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }
	SYS_EXTATTR_GET_LINK     = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_LINK  = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); }
	SYS_EXTATTR_LIST_FD      = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }
	SYS_EXTATTR_LIST_FILE    = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); }
	SYS_EXTATTR_LIST_LINK    = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); }
	SYS_SETXATTR             = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); }
	SYS_LSETXATTR            = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); }
	SYS_FSETXATTR            = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); }
	SYS_GETXATTR             = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); }
	SYS_LGETXATTR            = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); }
	SYS_FGETXATTR            = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); }
	SYS_LISTXATTR            = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); }
	SYS_LLISTXATTR           = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); }
	SYS_FLISTXATTR           = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); }
	SYS_REMOVEXATTR          = 384 // { int|sys||removexattr(const char *path, const char *name); }
	SYS_LREMOVEXATTR         = 385 // { int|sys||lremovexattr(const char *path, const char *name); }
	SYS_FREMOVEXATTR         = 386 // { int|sys||fremovexattr(int fd, const char *name); }
	SYS_GETDENTS             = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); }
	SYS_SOCKET               = 394 // { int|sys|30|socket(int domain, int type, int protocol); }
	SYS_GETFH                = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); }
	SYS_MOUNT                = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); }
	SYS_MREMAP               = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); }
	SYS_PSET_CREATE          = 412 // { int|sys||pset_create(psetid_t *psid); }
	SYS_PSET_DESTROY         = 413 // { int|sys||pset_destroy(psetid_t psid); }
	SYS_PSET_ASSIGN          = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); }
	SYS__PSET_BIND           = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); }
	SYS_POSIX_FADVISE        = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); }
	SYS_SELECT               = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
	SYS_GETTIMEOFDAY         = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); }
	SYS_SETTIMEOFDAY         = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); }
	SYS_UTIMES               = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); }
	SYS_ADJTIME              = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); }
	SYS_FUTIMES              = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); }
	SYS_LUTIMES              = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); }
	SYS_SETITIMER            = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }
	SYS_GETITIMER            = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); }
	SYS_CLOCK_GETTIME        = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); }
	SYS_CLOCK_SETTIME        = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); }
	SYS_CLOCK_GETRES         = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); }
	SYS_NANOSLEEP            = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
	SYS___SIGTIMEDWAIT       = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); }
	SYS__LWP_PARK            = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); }
	SYS_KEVENT               = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); }
	SYS_PSELECT              = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }
	SYS_POLLTS               = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }
	SYS_STAT                 = 439 // { int|sys|50|stat(const char *path, struct stat *ub); }
	SYS_FSTAT                = 440 // { int|sys|50|fstat(int fd, struct stat *sb); }
	SYS_LSTAT                = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); }
	SYS___SEMCTL             = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); }
	SYS_SHMCTL               = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); }
	SYS_MSGCTL               = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); }
	SYS_GETRUSAGE            = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); }
	SYS_TIMER_SETTIME        = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }
	SYS_TIMER_GETTIME        = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); }
	SYS_NTP_GETTIME          = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); }
	SYS_WAIT4                = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); }
	SYS_MKNOD                = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); }
	SYS_FHSTAT               = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); }
	SYS_PIPE2                = 453 // { int|sys||pipe2(int *fildes, int flags); }
	SYS_DUP3                 = 454 // { int|sys||dup3(int from, int to, int flags); }
	SYS_KQUEUE1              = 455 // { int|sys||kqueue1(int flags); }
	SYS_PACCEPT              = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); }
	SYS_LINKAT               = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); }
	SYS_RENAMEAT             = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); }
	SYS_MKFIFOAT             = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); }
	SYS_MKNODAT              = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); }
	SYS_MKDIRAT              = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); }
	SYS_FACCESSAT            = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); }
	SYS_FCHMODAT             = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); }
	SYS_FCHOWNAT             = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); }
	SYS_FEXECVE              = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); }
	SYS_FSTATAT              = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); }
	SYS_UTIMENSAT            = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); }
	SYS_OPENAT               = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); }
	SYS_READLINKAT           = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); }
	SYS_SYMLINKAT            = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); }
	SYS_UNLINKAT             = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); }
	SYS_FUTIMENS             = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); }
	SYS___QUOTACTL           = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); }
	SYS_POSIX_SPAWN          = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); }
	SYS_RECVMMSG             = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); }
	SYS_SENDMMSG             = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); }
)
 07070100000EA0000081A4000000000000000000000001645E367C000066F0000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm64.go  // go run mksysnum.go http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master
// Code generated by the command above; DO NOT EDIT.

//go:build arm64 && netbsd
// +build arm64,netbsd

package unix

const (
	SYS_EXIT                 = 1   // { void|sys||exit(int rval); }
	SYS_FORK                 = 2   // { int|sys||fork(void); }
	SYS_READ                 = 3   // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); }
	SYS_WRITE                = 4   // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); }
	SYS_OPEN                 = 5   // { int|sys||open(const char *path, int flags, ... mode_t mode); }
	SYS_CLOSE                = 6   // { int|sys||close(int fd); }
	SYS_LINK                 = 9   // { int|sys||link(const char *path, const char *link); }
	SYS_UNLINK               = 10  // { int|sys||unlink(const char *path); }
	SYS_CHDIR                = 12  // { int|sys||chdir(const char *path); }
	SYS_FCHDIR               = 13  // { int|sys||fchdir(int fd); }
	SYS_CHMOD                = 15  // { int|sys||chmod(const char *path, mode_t mode); }
	SYS_CHOWN                = 16  // { int|sys||chown(const char *path, uid_t uid, gid_t gid); }
	SYS_BREAK                = 17  // { int|sys||obreak(char *nsize); }
	SYS_GETPID               = 20  // { pid_t|sys||getpid_with_ppid(void); }
	SYS_UNMOUNT              = 22  // { int|sys||unmount(const char *path, int flags); }
	SYS_SETUID               = 23  // { int|sys||setuid(uid_t uid); }
	SYS_GETUID               = 24  // { uid_t|sys||getuid_with_euid(void); }
	SYS_GETEUID              = 25  // { uid_t|sys||geteuid(void); }
	SYS_PTRACE               = 26  // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); }
	SYS_RECVMSG              = 27  // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); }
	SYS_SENDMSG              = 28  // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); }
	SYS_RECVFROM             = 29  // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }
	SYS_ACCEPT               = 30  // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); }
	SYS_GETPEERNAME          = 31  // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }
	SYS_GETSOCKNAME          = 32  // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }
	SYS_ACCESS               = 33  // { int|sys||access(const char *path, int flags); }
	SYS_CHFLAGS              = 34  // { int|sys||chflags(const char *path, u_long flags); }
	SYS_FCHFLAGS             = 35  // { int|sys||fchflags(int fd, u_long flags); }
	SYS_SYNC                 = 36  // { void|sys||sync(void); }
	SYS_KILL                 = 37  // { int|sys||kill(pid_t pid, int signum); }
	SYS_GETPPID              = 39  // { pid_t|sys||getppid(void); }
	SYS_DUP                  = 41  // { int|sys||dup(int fd); }
	SYS_PIPE                 = 42  // { int|sys||pipe(void); }
	SYS_GETEGID              = 43  // { gid_t|sys||getegid(void); }
	SYS_PROFIL               = 44  // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); }
	SYS_KTRACE               = 45  // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); }
	SYS_GETGID               = 47  // { gid_t|sys||getgid_with_egid(void); }
	SYS___GETLOGIN           = 49  // { int|sys||__getlogin(char *namebuf, size_t namelen); }
	SYS___SETLOGIN           = 50  // { int|sys||__setlogin(const char *namebuf); }
	SYS_ACCT                 = 51  // { int|sys||acct(const char *path); }
	SYS_IOCTL                = 54  // { int|sys||ioctl(int fd, u_long com, ... void *data); }
	SYS_REVOKE               = 56  // { int|sys||revoke(const char *path); }
	SYS_SYMLINK              = 57  // { int|sys||symlink(const char *path, const char *link); }
	SYS_READLINK             = 58  // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); }
	SYS_EXECVE               = 59  // { int|sys||execve(const char *path, char * const *argp, char * const *envp); }
	SYS_UMASK                = 60  // { mode_t|sys||umask(mode_t newmask); }
	SYS_CHROOT               = 61  // { int|sys||chroot(const char *path); }
	SYS_VFORK                = 66  // { int|sys||vfork(void); }
	SYS_SBRK                 = 69  // { int|sys||sbrk(intptr_t incr); }
	SYS_SSTK                 = 70  // { int|sys||sstk(int incr); }
	SYS_VADVISE              = 72  // { int|sys||ovadvise(int anom); }
	SYS_MUNMAP               = 73  // { int|sys||munmap(void *addr, size_t len); }
	SYS_MPROTECT             = 74  // { int|sys||mprotect(void *addr, size_t len, int prot); }
	SYS_MADVISE              = 75  // { int|sys||madvise(void *addr, size_t len, int behav); }
	SYS_MINCORE              = 78  // { int|sys||mincore(void *addr, size_t len, char *vec); }
	SYS_GETGROUPS            = 79  // { int|sys||getgroups(int gidsetsize, gid_t *gidset); }
	SYS_SETGROUPS            = 80  // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); }
	SYS_GETPGRP              = 81  // { int|sys||getpgrp(void); }
	SYS_SETPGID              = 82  // { int|sys||setpgid(pid_t pid, pid_t pgid); }
	SYS_DUP2                 = 90  // { int|sys||dup2(int from, int to); }
	SYS_FCNTL                = 92  // { int|sys||fcntl(int fd, int cmd, ... void *arg); }
	SYS_FSYNC                = 95  // { int|sys||fsync(int fd); }
	SYS_SETPRIORITY          = 96  // { int|sys||setpriority(int which, id_t who, int prio); }
	SYS_CONNECT              = 98  // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); }
	SYS_GETPRIORITY          = 100 // { int|sys||getpriority(int which, id_t who); }
	SYS_BIND                 = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); }
	SYS_SETSOCKOPT           = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }
	SYS_LISTEN               = 106 // { int|sys||listen(int s, int backlog); }
	SYS_GETSOCKOPT           = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }
	SYS_READV                = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); }
	SYS_WRITEV               = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); }
	SYS_FCHOWN               = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); }
	SYS_FCHMOD               = 124 // { int|sys||fchmod(int fd, mode_t mode); }
	SYS_SETREUID             = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); }
	SYS_SETREGID             = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); }
	SYS_RENAME               = 128 // { int|sys||rename(const char *from, const char *to); }
	SYS_FLOCK                = 131 // { int|sys||flock(int fd, int how); }
	SYS_MKFIFO               = 132 // { int|sys||mkfifo(const char *path, mode_t mode); }
	SYS_SENDTO               = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }
	SYS_SHUTDOWN             = 134 // { int|sys||shutdown(int s, int how); }
	SYS_SOCKETPAIR           = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); }
	SYS_MKDIR                = 136 // { int|sys||mkdir(const char *path, mode_t mode); }
	SYS_RMDIR                = 137 // { int|sys||rmdir(const char *path); }
	SYS_SETSID               = 147 // { int|sys||setsid(void); }
	SYS_SYSARCH              = 165 // { int|sys||sysarch(int op, void *parms); }
	SYS_PREAD                = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); }
	SYS_PWRITE               = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); }
	SYS_NTP_ADJTIME          = 176 // { int|sys||ntp_adjtime(struct timex *tp); }
	SYS_SETGID               = 181 // { int|sys||setgid(gid_t gid); }
	SYS_SETEGID              = 182 // { int|sys||setegid(gid_t egid); }
	SYS_SETEUID              = 183 // { int|sys||seteuid(uid_t euid); }
	SYS_PATHCONF             = 191 // { long|sys||pathconf(const char *path, int name); }
	SYS_FPATHCONF            = 192 // { long|sys||fpathconf(int fd, int name); }
	SYS_GETRLIMIT            = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); }
	SYS_SETRLIMIT            = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); }
	SYS_MMAP                 = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); }
	SYS_LSEEK                = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); }
	SYS_TRUNCATE             = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); }
	SYS_FTRUNCATE            = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); }
	SYS___SYSCTL             = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); }
	SYS_MLOCK                = 203 // { int|sys||mlock(const void *addr, size_t len); }
	SYS_MUNLOCK              = 204 // { int|sys||munlock(const void *addr, size_t len); }
	SYS_UNDELETE             = 205 // { int|sys||undelete(const char *path); }
	SYS_GETPGID              = 207 // { pid_t|sys||getpgid(pid_t pid); }
	SYS_REBOOT               = 208 // { int|sys||reboot(int opt, char *bootstr); }
	SYS_POLL                 = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); }
	SYS_SEMGET               = 221 // { int|sys||semget(key_t key, int nsems, int semflg); }
	SYS_SEMOP                = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); }
	SYS_SEMCONFIG            = 223 // { int|sys||semconfig(int flag); }
	SYS_MSGGET               = 225 // { int|sys||msgget(key_t key, int msgflg); }
	SYS_MSGSND               = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
	SYS_MSGRCV               = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
	SYS_SHMAT                = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); }
	SYS_SHMDT                = 230 // { int|sys||shmdt(const void *shmaddr); }
	SYS_SHMGET               = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); }
	SYS_TIMER_CREATE         = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); }
	SYS_TIMER_DELETE         = 236 // { int|sys||timer_delete(timer_t timerid); }
	SYS_TIMER_GETOVERRUN     = 239 // { int|sys||timer_getoverrun(timer_t timerid); }
	SYS_FDATASYNC            = 241 // { int|sys||fdatasync(int fd); }
	SYS_MLOCKALL             = 242 // { int|sys||mlockall(int flags); }
	SYS_MUNLOCKALL           = 243 // { int|sys||munlockall(void); }
	SYS_SIGQUEUEINFO         = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); }
	SYS_MODCTL               = 246 // { int|sys||modctl(int cmd, void *arg); }
	SYS___POSIX_RENAME       = 270 // { int|sys||__posix_rename(const char *from, const char *to); }
	SYS_SWAPCTL              = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); }
	SYS_MINHERIT             = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); }
	SYS_LCHMOD               = 274 // { int|sys||lchmod(const char *path, mode_t mode); }
	SYS_LCHOWN               = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); }
	SYS_MSYNC                = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); }
	SYS___POSIX_CHOWN        = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); }
	SYS___POSIX_FCHOWN       = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); }
	SYS___POSIX_LCHOWN       = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); }
	SYS_GETSID               = 286 // { pid_t|sys||getsid(pid_t pid); }
	SYS___CLONE              = 287 // { pid_t|sys||__clone(int flags, void *stack); }
	SYS_FKTRACE              = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); }
	SYS_PREADV               = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); }
	SYS_PWRITEV              = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); }
	SYS___GETCWD             = 296 // { int|sys||__getcwd(char *bufp, size_t length); }
	SYS_FCHROOT              = 297 // { int|sys||fchroot(int fd); }
	SYS_LCHFLAGS             = 304 // { int|sys||lchflags(const char *path, u_long flags); }
	SYS_ISSETUGID            = 305 // { int|sys||issetugid(void); }
	SYS_UTRACE               = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); }
	SYS_GETCONTEXT           = 307 // { int|sys||getcontext(struct __ucontext *ucp); }
	SYS_SETCONTEXT           = 308 // { int|sys||setcontext(const struct __ucontext *ucp); }
	SYS__LWP_CREATE          = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); }
	SYS__LWP_EXIT            = 310 // { int|sys||_lwp_exit(void); }
	SYS__LWP_SELF            = 311 // { lwpid_t|sys||_lwp_self(void); }
	SYS__LWP_WAIT            = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); }
	SYS__LWP_SUSPEND         = 313 // { int|sys||_lwp_suspend(lwpid_t target); }
	SYS__LWP_CONTINUE        = 314 // { int|sys||_lwp_continue(lwpid_t target); }
	SYS__LWP_WAKEUP          = 315 // { int|sys||_lwp_wakeup(lwpid_t target); }
	SYS__LWP_GETPRIVATE      = 316 // { void *|sys||_lwp_getprivate(void); }
	SYS__LWP_SETPRIVATE      = 317 // { void|sys||_lwp_setprivate(void *ptr); }
	SYS__LWP_KILL            = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); }
	SYS__LWP_DETACH          = 319 // { int|sys||_lwp_detach(lwpid_t target); }
	SYS__LWP_UNPARK          = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); }
	SYS__LWP_UNPARK_ALL      = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); }
	SYS__LWP_SETNAME         = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); }
	SYS__LWP_GETNAME         = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); }
	SYS__LWP_CTL             = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); }
	SYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); }
	SYS_PMC_GET_INFO         = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); }
	SYS_PMC_CONTROL          = 342 // { int|sys||pmc_control(int ctr, int op, void *args); }
	SYS_RASCTL               = 343 // { int|sys||rasctl(void *addr, size_t len, int op); }
	SYS_KQUEUE               = 344 // { int|sys||kqueue(void); }
	SYS__SCHED_SETPARAM      = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); }
	SYS__SCHED_GETPARAM      = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); }
	SYS__SCHED_SETAFFINITY   = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); }
	SYS__SCHED_GETAFFINITY   = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); }
	SYS_SCHED_YIELD          = 350 // { int|sys||sched_yield(void); }
	SYS_FSYNC_RANGE          = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); }
	SYS_UUIDGEN              = 355 // { int|sys||uuidgen(struct uuid *store, int count); }
	SYS_GETVFSSTAT           = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); }
	SYS_STATVFS1             = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); }
	SYS_FSTATVFS1            = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); }
	SYS_EXTATTRCTL           = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }
	SYS_EXTATTR_SET_FILE     = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }
	SYS_EXTATTR_GET_FILE     = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_FILE  = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }
	SYS_EXTATTR_SET_FD       = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }
	SYS_EXTATTR_GET_FD       = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_FD    = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }
	SYS_EXTATTR_SET_LINK     = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }
	SYS_EXTATTR_GET_LINK     = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
	SYS_EXTATTR_DELETE_LINK  = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); }
	SYS_EXTATTR_LIST_FD      = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }
	SYS_EXTATTR_LIST_FILE    = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); }
	SYS_EXTATTR_LIST_LINK    = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); }
	SYS_SETXATTR             = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); }
	SYS_LSETXATTR            = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); }
	SYS_FSETXATTR            = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); }
	SYS_GETXATTR             = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); }
	SYS_LGETXATTR            = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); }
	SYS_FGETXATTR            = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); }
	SYS_LISTXATTR            = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); }
	SYS_LLISTXATTR           = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); }
	SYS_FLISTXATTR           = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); }
	SYS_REMOVEXATTR          = 384 // { int|sys||removexattr(const char *path, const char *name); }
	SYS_LREMOVEXATTR         = 385 // { int|sys||lremovexattr(const char *path, const char *name); }
	SYS_FREMOVEXATTR         = 386 // { int|sys||fremovexattr(int fd, const char *name); }
	SYS_GETDENTS             = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); }
	SYS_SOCKET               = 394 // { int|sys|30|socket(int domain, int type, int protocol); }
	SYS_GETFH                = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); }
	SYS_MOUNT                = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); }
	SYS_MREMAP               = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); }
	SYS_PSET_CREATE          = 412 // { int|sys||pset_create(psetid_t *psid); }
	SYS_PSET_DESTROY         = 413 // { int|sys||pset_destroy(psetid_t psid); }
	SYS_PSET_ASSIGN          = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); }
	SYS__PSET_BIND           = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); }
	SYS_POSIX_FADVISE        = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); }
	SYS_SELECT               = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
	SYS_GETTIMEOFDAY         = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); }
	SYS_SETTIMEOFDAY         = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); }
	SYS_UTIMES               = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); }
	SYS_ADJTIME              = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); }
	SYS_FUTIMES              = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); }
	SYS_LUTIMES              = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); }
	SYS_SETITIMER            = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }
	SYS_GETITIMER            = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); }
	SYS_CLOCK_GETTIME        = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); }
	SYS_CLOCK_SETTIME        = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); }
	SYS_CLOCK_GETRES         = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); }
	SYS_NANOSLEEP            = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
	SYS___SIGTIMEDWAIT       = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); }
	SYS__LWP_PARK            = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); }
	SYS_KEVENT               = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); }
	SYS_PSELECT              = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }
	SYS_POLLTS               = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }
	SYS_STAT                 = 439 // { int|sys|50|stat(const char *path, struct stat *ub); }
	SYS_FSTAT                = 440 // { int|sys|50|fstat(int fd, struct stat *sb); }
	SYS_LSTAT                = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); }
	SYS___SEMCTL             = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); }
	SYS_SHMCTL               = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); }
	SYS_MSGCTL               = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); }
	SYS_GETRUSAGE            = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); }
	SYS_TIMER_SETTIME        = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }
	SYS_TIMER_GETTIME        = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); }
	SYS_NTP_GETTIME          = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); }
	SYS_WAIT4                = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); }
	SYS_MKNOD                = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); }
	SYS_FHSTAT               = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); }
	SYS_PIPE2                = 453 // { int|sys||pipe2(int *fildes, int flags); }
	SYS_DUP3                 = 454 // { int|sys||dup3(int from, int to, int flags); }
	SYS_KQUEUE1              = 455 // { int|sys||kqueue1(int flags); }
	SYS_PACCEPT              = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); }
	SYS_LINKAT               = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); }
	SYS_RENAMEAT             = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); }
	SYS_MKFIFOAT             = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); }
	SYS_MKNODAT              = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); }
	SYS_MKDIRAT              = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); }
	SYS_FACCESSAT            = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); }
	SYS_FCHMODAT             = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); }
	SYS_FCHOWNAT             = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); }
	SYS_FEXECVE              = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); }
	SYS_FSTATAT              = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); }
	SYS_UTIMENSAT            = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); }
	SYS_OPENAT               = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); }
	SYS_READLINKAT           = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); }
	SYS_SYMLINKAT            = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); }
	SYS_UNLINKAT             = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); }
	SYS_FUTIMENS             = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); }
	SYS___QUOTACTL           = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); }
	SYS_POSIX_SPAWN          = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); }
	SYS_RECVMMSG             = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); }
	SYS_SENDMMSG             = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); }
)
07070100000EA1000081A4000000000000000000000001645E367C000047B5000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go   // go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build 386 && openbsd
// +build 386,openbsd

package unix

// Deprecated: Use libc wrappers instead of direct syscalls.
const (
	SYS_EXIT           = 1   // { void sys_exit(int rval); }
	SYS_FORK           = 2   // { int sys_fork(void); }
	SYS_READ           = 3   // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }
	SYS_WRITE          = 4   // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); }
	SYS_OPEN           = 5   // { int sys_open(const char *path, int flags, ... mode_t mode); }
	SYS_CLOSE          = 6   // { int sys_close(int fd); }
	SYS_GETENTROPY     = 7   // { int sys_getentropy(void *buf, size_t nbyte); }
	SYS___TFORK        = 8   // { int sys___tfork(const struct __tfork *param, size_t psize); }
	SYS_LINK           = 9   // { int sys_link(const char *path, const char *link); }
	SYS_UNLINK         = 10  // { int sys_unlink(const char *path); }
	SYS_WAIT4          = 11  // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); }
	SYS_CHDIR          = 12  // { int sys_chdir(const char *path); }
	SYS_FCHDIR         = 13  // { int sys_fchdir(int fd); }
	SYS_MKNOD          = 14  // { int sys_mknod(const char *path, mode_t mode, dev_t dev); }
	SYS_CHMOD          = 15  // { int sys_chmod(const char *path, mode_t mode); }
	SYS_CHOWN          = 16  // { int sys_chown(const char *path, uid_t uid, gid_t gid); }
	SYS_OBREAK         = 17  // { int sys_obreak(char *nsize); } break
	SYS_GETDTABLECOUNT = 18  // { int sys_getdtablecount(void); }
	SYS_GETRUSAGE      = 19  // { int sys_getrusage(int who, struct rusage *rusage); }
	SYS_GETPID         = 20  // { pid_t sys_getpid(void); }
	SYS_MOUNT          = 21  // { int sys_mount(const char *type, const char *path, int flags, void *data); }
	SYS_UNMOUNT        = 22  // { int sys_unmount(const char *path, int flags); }
	SYS_SETUID         = 23  // { int sys_setuid(uid_t uid); }
	SYS_GETUID         = 24  // { uid_t sys_getuid(void); }
	SYS_GETEUID        = 25  // { uid_t sys_geteuid(void); }
	SYS_PTRACE         = 26  // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); }
	SYS_RECVMSG        = 27  // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); }
	SYS_SENDMSG        = 28  // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); }
	SYS_RECVFROM       = 29  // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }
	SYS_ACCEPT         = 30  // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); }
	SYS_GETPEERNAME    = 31  // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }
	SYS_GETSOCKNAME    = 32  // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }
	SYS_ACCESS         = 33  // { int sys_access(const char *path, int amode); }
	SYS_CHFLAGS        = 34  // { int sys_chflags(const char *path, u_int flags); }
	SYS_FCHFLAGS       = 35  // { int sys_fchflags(int fd, u_int flags); }
	SYS_SYNC           = 36  // { void sys_sync(void); }
	SYS_STAT           = 38  // { int sys_stat(const char *path, struct stat *ub); }
	SYS_GETPPID        = 39  // { pid_t sys_getppid(void); }
	SYS_LSTAT          = 40  // { int sys_lstat(const char *path, struct stat *ub); }
	SYS_DUP            = 41  // { int sys_dup(int fd); }
	SYS_FSTATAT        = 42  // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); }
	SYS_GETEGID        = 43  // { gid_t sys_getegid(void); }
	SYS_PROFIL         = 44  // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); }
	SYS_KTRACE         = 45  // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); }
	SYS_SIGACTION      = 46  // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); }
	SYS_GETGID         = 47  // { gid_t sys_getgid(void); }
	SYS_SIGPROCMASK    = 48  // { int sys_sigprocmask(int how, sigset_t mask); }
	SYS_SETLOGIN       = 50  // { int sys_setlogin(const char *namebuf); }
	SYS_ACCT           = 51  // { int sys_acct(const char *path); }
	SYS_SIGPENDING     = 52  // { int sys_sigpending(void); }
	SYS_FSTAT          = 53  // { int sys_fstat(int fd, struct stat *sb); }
	SYS_IOCTL          = 54  // { int sys_ioctl(int fd, u_long com, ... void *data); }
	SYS_REBOOT         = 55  // { int sys_reboot(int opt); }
	SYS_REVOKE         = 56  // { int sys_revoke(const char *path); }
	SYS_SYMLINK        = 57  // { int sys_symlink(const char *path, const char *link); }
	SYS_READLINK       = 58  // { ssize_t sys_readlink(const char *path, char *buf, size_t count); }
	SYS_EXECVE         = 59  // { int sys_execve(const char *path, char * const *argp, char * const *envp); }
	SYS_UMASK          = 60  // { mode_t sys_umask(mode_t newmask); }
	SYS_CHROOT         = 61  // { int sys_chroot(const char *path); }
	SYS_GETFSSTAT      = 62  // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); }
	SYS_STATFS         = 63  // { int sys_statfs(const char *path, struct statfs *buf); }
	SYS_FSTATFS        = 64  // { int sys_fstatfs(int fd, struct statfs *buf); }
	SYS_FHSTATFS       = 65  // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); }
	SYS_VFORK          = 66  // { int sys_vfork(void); }
	SYS_GETTIMEOFDAY   = 67  // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); }
	SYS_SETTIMEOFDAY   = 68  // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); }
	SYS_SETITIMER      = 69  // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }
	SYS_GETITIMER      = 70  // { int sys_getitimer(int which, struct itimerval *itv); }
	SYS_SELECT         = 71  // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
	SYS_KEVENT         = 72  // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
	SYS_MUNMAP         = 73  // { int sys_munmap(void *addr, size_t len); }
	SYS_MPROTECT       = 74  // { int sys_mprotect(void *addr, size_t len, int prot); }
	SYS_MADVISE        = 75  // { int sys_madvise(void *addr, size_t len, int behav); }
	SYS_UTIMES         = 76  // { int sys_utimes(const char *path, const struct timeval *tptr); }
	SYS_FUTIMES        = 77  // { int sys_futimes(int fd, const struct timeval *tptr); }
	SYS_MINCORE        = 78  // { int sys_mincore(void *addr, size_t len, char *vec); }
	SYS_GETGROUPS      = 79  // { int sys_getgroups(int gidsetsize, gid_t *gidset); }
	SYS_SETGROUPS      = 80  // { int sys_setgroups(int gidsetsize, const gid_t *gidset); }
	SYS_GETPGRP        = 81  // { int sys_getpgrp(void); }
	SYS_SETPGID        = 82  // { int sys_setpgid(pid_t pid, pid_t pgid); }
	SYS_FUTEX          = 83  // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); }
	SYS_UTIMENSAT      = 84  // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); }
	SYS_FUTIMENS       = 85  // { int sys_futimens(int fd, const struct timespec *times); }
	SYS_KBIND          = 86  // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); }
	SYS_CLOCK_GETTIME  = 87  // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); }
	SYS_CLOCK_SETTIME  = 88  // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); }
	SYS_CLOCK_GETRES   = 89  // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); }
	SYS_DUP2           = 90  // { int sys_dup2(int from, int to); }
	SYS_NANOSLEEP      = 91  // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
	SYS_FCNTL          = 92  // { int sys_fcntl(int fd, int cmd, ... void *arg); }
	SYS_ACCEPT4        = 93  // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); }
	SYS___THRSLEEP     = 94  // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); }
	SYS_FSYNC          = 95  // { int sys_fsync(int fd); }
	SYS_SETPRIORITY    = 96  // { int sys_setpriority(int which, id_t who, int prio); }
	SYS_SOCKET         = 97  // { int sys_socket(int domain, int type, int protocol); }
	SYS_CONNECT        = 98  // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); }
	SYS_GETDENTS       = 99  // { int sys_getdents(int fd, void *buf, size_t buflen); }
	SYS_GETPRIORITY    = 100 // { int sys_getpriority(int which, id_t who); }
	SYS_PIPE2          = 101 // { int sys_pipe2(int *fdp, int flags); }
	SYS_DUP3           = 102 // { int sys_dup3(int from, int to, int flags); }
	SYS_SIGRETURN      = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }
	SYS_BIND           = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); }
	SYS_SETSOCKOPT     = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }
	SYS_LISTEN         = 106 // { int sys_listen(int s, int backlog); }
	SYS_CHFLAGSAT      = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); }
	SYS_PLEDGE         = 108 // { int sys_pledge(const char *promises, const char *execpromises); }
	SYS_PPOLL          = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }
	SYS_PSELECT        = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }
	SYS_SIGSUSPEND     = 111 // { int sys_sigsuspend(int mask); }
	SYS_SENDSYSLOG     = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); }
	SYS_UNVEIL         = 114 // { int sys_unveil(const char *path, const char *permissions); }
	SYS_GETSOCKOPT     = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }
	SYS_THRKILL        = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); }
	SYS_READV          = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); }
	SYS_WRITEV         = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); }
	SYS_KILL           = 122 // { int sys_kill(int pid, int signum); }
	SYS_FCHOWN         = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }
	SYS_FCHMOD         = 124 // { int sys_fchmod(int fd, mode_t mode); }
	SYS_SETREUID       = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); }
	SYS_SETREGID       = 127 // { int sys_setregid(gid_t rgid, gid_t egid); }
	SYS_RENAME         = 128 // { int sys_rename(const char *from, const char *to); }
	SYS_FLOCK          = 131 // { int sys_flock(int fd, int how); }
	SYS_MKFIFO         = 132 // { int sys_mkfifo(const char *path, mode_t mode); }
	SYS_SENDTO         = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }
	SYS_SHUTDOWN       = 134 // { int sys_shutdown(int s, int how); }
	SYS_SOCKETPAIR     = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); }
	SYS_MKDIR          = 136 // { int sys_mkdir(const char *path, mode_t mode); }
	SYS_RMDIR          = 137 // { int sys_rmdir(const char *path); }
	SYS_ADJTIME        = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); }
	SYS_GETLOGIN_R     = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); }
	SYS_SETSID         = 147 // { int sys_setsid(void); }
	SYS_QUOTACTL       = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); }
	SYS_NFSSVC         = 155 // { int sys_nfssvc(int flag, void *argp); }
	SYS_GETFH          = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }
	SYS_SYSARCH        = 165 // { int sys_sysarch(int op, void *parms); }
	SYS_PREAD          = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }
	SYS_PWRITE         = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }
	SYS_SETGID         = 181 // { int sys_setgid(gid_t gid); }
	SYS_SETEGID        = 182 // { int sys_setegid(gid_t egid); }
	SYS_SETEUID        = 183 // { int sys_seteuid(uid_t euid); }
	SYS_PATHCONF       = 191 // { long sys_pathconf(const char *path, int name); }
	SYS_FPATHCONF      = 192 // { long sys_fpathconf(int fd, int name); }
	SYS_SWAPCTL        = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }
	SYS_GETRLIMIT      = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); }
	SYS_SETRLIMIT      = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); }
	SYS_MMAP           = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
	SYS_LSEEK          = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); }
	SYS_TRUNCATE       = 200 // { int sys_truncate(const char *path, int pad, off_t length); }
	SYS_FTRUNCATE      = 201 // { int sys_ftruncate(int fd, int pad, off_t length); }
	SYS_SYSCTL         = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }
	SYS_MLOCK          = 203 // { int sys_mlock(const void *addr, size_t len); }
	SYS_MUNLOCK        = 204 // { int sys_munlock(const void *addr, size_t len); }
	SYS_GETPGID        = 207 // { pid_t sys_getpgid(pid_t pid); }
	SYS_UTRACE         = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); }
	SYS_SEMGET         = 221 // { int sys_semget(key_t key, int nsems, int semflg); }
	SYS_MSGGET         = 225 // { int sys_msgget(key_t key, int msgflg); }
	SYS_MSGSND         = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
	SYS_MSGRCV         = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
	SYS_SHMAT          = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); }
	SYS_SHMDT          = 230 // { int sys_shmdt(const void *shmaddr); }
	SYS_MINHERIT       = 250 // { int sys_minherit(void *addr, size_t len, int inherit); }
	SYS_POLL           = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); }
	SYS_ISSETUGID      = 253 // { int sys_issetugid(void); }
	SYS_LCHOWN         = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }
	SYS_GETSID         = 255 // { pid_t sys_getsid(pid_t pid); }
	SYS_MSYNC          = 256 // { int sys_msync(void *addr, size_t len, int flags); }
	SYS_PIPE           = 263 // { int sys_pipe(int *fdp); }
	SYS_FHOPEN         = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }
	SYS_PREADV         = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
	SYS_PWRITEV        = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
	SYS_KQUEUE         = 269 // { int sys_kqueue(void); }
	SYS_MLOCKALL       = 271 // { int sys_mlockall(int flags); }
	SYS_MUNLOCKALL     = 272 // { int sys_munlockall(void); }
	SYS_GETRESUID      = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
	SYS_SETRESUID      = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); }
	SYS_GETRESGID      = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
	SYS_SETRESGID      = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
	SYS_MQUERY         = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
	SYS_CLOSEFROM      = 287 // { int sys_closefrom(int fd); }
	SYS_SIGALTSTACK    = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); }
	SYS_SHMGET         = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }
	SYS_SEMOP          = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); }
	SYS_FHSTAT         = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); }
	SYS___SEMCTL       = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); }
	SYS_SHMCTL         = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); }
	SYS_MSGCTL         = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); }
	SYS_SCHED_YIELD    = 298 // { int sys_sched_yield(void); }
	SYS_GETTHRID       = 299 // { pid_t sys_getthrid(void); }
	SYS___THRWAKEUP    = 301 // { int sys___thrwakeup(const volatile void *ident, int n); }
	SYS___THREXIT      = 302 // { void sys___threxit(pid_t *notdead); }
	SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); }
	SYS___GETCWD       = 304 // { int sys___getcwd(char *buf, size_t len); }
	SYS_ADJFREQ        = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); }
	SYS_SETRTABLE      = 310 // { int sys_setrtable(int rtableid); }
	SYS_GETRTABLE      = 311 // { int sys_getrtable(void); }
	SYS_FACCESSAT      = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); }
	SYS_FCHMODAT       = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); }
	SYS_FCHOWNAT       = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); }
	SYS_LINKAT         = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); }
	SYS_MKDIRAT        = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); }
	SYS_MKFIFOAT       = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); }
	SYS_MKNODAT        = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); }
	SYS_OPENAT         = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); }
	SYS_READLINKAT     = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); }
	SYS_RENAMEAT       = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); }
	SYS_SYMLINKAT      = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); }
	SYS_UNLINKAT       = 325 // { int sys_unlinkat(int fd, const char *path, int flag); }
	SYS___SET_TCB      = 329 // { void sys___set_tcb(void *tcb); }
	SYS___GET_TCB      = 330 // { void *sys___get_tcb(void); }
)
   07070100000EA2000081A4000000000000000000000001645E367C000047B9000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go // go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build amd64 && openbsd
// +build amd64,openbsd

package unix

// Deprecated: Use libc wrappers instead of direct syscalls.
const (
	SYS_EXIT           = 1   // { void sys_exit(int rval); }
	SYS_FORK           = 2   // { int sys_fork(void); }
	SYS_READ           = 3   // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }
	SYS_WRITE          = 4   // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); }
	SYS_OPEN           = 5   // { int sys_open(const char *path, int flags, ... mode_t mode); }
	SYS_CLOSE          = 6   // { int sys_close(int fd); }
	SYS_GETENTROPY     = 7   // { int sys_getentropy(void *buf, size_t nbyte); }
	SYS___TFORK        = 8   // { int sys___tfork(const struct __tfork *param, size_t psize); }
	SYS_LINK           = 9   // { int sys_link(const char *path, const char *link); }
	SYS_UNLINK         = 10  // { int sys_unlink(const char *path); }
	SYS_WAIT4          = 11  // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); }
	SYS_CHDIR          = 12  // { int sys_chdir(const char *path); }
	SYS_FCHDIR         = 13  // { int sys_fchdir(int fd); }
	SYS_MKNOD          = 14  // { int sys_mknod(const char *path, mode_t mode, dev_t dev); }
	SYS_CHMOD          = 15  // { int sys_chmod(const char *path, mode_t mode); }
	SYS_CHOWN          = 16  // { int sys_chown(const char *path, uid_t uid, gid_t gid); }
	SYS_OBREAK         = 17  // { int sys_obreak(char *nsize); } break
	SYS_GETDTABLECOUNT = 18  // { int sys_getdtablecount(void); }
	SYS_GETRUSAGE      = 19  // { int sys_getrusage(int who, struct rusage *rusage); }
	SYS_GETPID         = 20  // { pid_t sys_getpid(void); }
	SYS_MOUNT          = 21  // { int sys_mount(const char *type, const char *path, int flags, void *data); }
	SYS_UNMOUNT        = 22  // { int sys_unmount(const char *path, int flags); }
	SYS_SETUID         = 23  // { int sys_setuid(uid_t uid); }
	SYS_GETUID         = 24  // { uid_t sys_getuid(void); }
	SYS_GETEUID        = 25  // { uid_t sys_geteuid(void); }
	SYS_PTRACE         = 26  // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); }
	SYS_RECVMSG        = 27  // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); }
	SYS_SENDMSG        = 28  // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); }
	SYS_RECVFROM       = 29  // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }
	SYS_ACCEPT         = 30  // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); }
	SYS_GETPEERNAME    = 31  // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }
	SYS_GETSOCKNAME    = 32  // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }
	SYS_ACCESS         = 33  // { int sys_access(const char *path, int amode); }
	SYS_CHFLAGS        = 34  // { int sys_chflags(const char *path, u_int flags); }
	SYS_FCHFLAGS       = 35  // { int sys_fchflags(int fd, u_int flags); }
	SYS_SYNC           = 36  // { void sys_sync(void); }
	SYS_STAT           = 38  // { int sys_stat(const char *path, struct stat *ub); }
	SYS_GETPPID        = 39  // { pid_t sys_getppid(void); }
	SYS_LSTAT          = 40  // { int sys_lstat(const char *path, struct stat *ub); }
	SYS_DUP            = 41  // { int sys_dup(int fd); }
	SYS_FSTATAT        = 42  // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); }
	SYS_GETEGID        = 43  // { gid_t sys_getegid(void); }
	SYS_PROFIL         = 44  // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); }
	SYS_KTRACE         = 45  // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); }
	SYS_SIGACTION      = 46  // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); }
	SYS_GETGID         = 47  // { gid_t sys_getgid(void); }
	SYS_SIGPROCMASK    = 48  // { int sys_sigprocmask(int how, sigset_t mask); }
	SYS_SETLOGIN       = 50  // { int sys_setlogin(const char *namebuf); }
	SYS_ACCT           = 51  // { int sys_acct(const char *path); }
	SYS_SIGPENDING     = 52  // { int sys_sigpending(void); }
	SYS_FSTAT          = 53  // { int sys_fstat(int fd, struct stat *sb); }
	SYS_IOCTL          = 54  // { int sys_ioctl(int fd, u_long com, ... void *data); }
	SYS_REBOOT         = 55  // { int sys_reboot(int opt); }
	SYS_REVOKE         = 56  // { int sys_revoke(const char *path); }
	SYS_SYMLINK        = 57  // { int sys_symlink(const char *path, const char *link); }
	SYS_READLINK       = 58  // { ssize_t sys_readlink(const char *path, char *buf, size_t count); }
	SYS_EXECVE         = 59  // { int sys_execve(const char *path, char * const *argp, char * const *envp); }
	SYS_UMASK          = 60  // { mode_t sys_umask(mode_t newmask); }
	SYS_CHROOT         = 61  // { int sys_chroot(const char *path); }
	SYS_GETFSSTAT      = 62  // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); }
	SYS_STATFS         = 63  // { int sys_statfs(const char *path, struct statfs *buf); }
	SYS_FSTATFS        = 64  // { int sys_fstatfs(int fd, struct statfs *buf); }
	SYS_FHSTATFS       = 65  // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); }
	SYS_VFORK          = 66  // { int sys_vfork(void); }
	SYS_GETTIMEOFDAY   = 67  // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); }
	SYS_SETTIMEOFDAY   = 68  // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); }
	SYS_SETITIMER      = 69  // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }
	SYS_GETITIMER      = 70  // { int sys_getitimer(int which, struct itimerval *itv); }
	SYS_SELECT         = 71  // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
	SYS_KEVENT         = 72  // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
	SYS_MUNMAP         = 73  // { int sys_munmap(void *addr, size_t len); }
	SYS_MPROTECT       = 74  // { int sys_mprotect(void *addr, size_t len, int prot); }
	SYS_MADVISE        = 75  // { int sys_madvise(void *addr, size_t len, int behav); }
	SYS_UTIMES         = 76  // { int sys_utimes(const char *path, const struct timeval *tptr); }
	SYS_FUTIMES        = 77  // { int sys_futimes(int fd, const struct timeval *tptr); }
	SYS_MINCORE        = 78  // { int sys_mincore(void *addr, size_t len, char *vec); }
	SYS_GETGROUPS      = 79  // { int sys_getgroups(int gidsetsize, gid_t *gidset); }
	SYS_SETGROUPS      = 80  // { int sys_setgroups(int gidsetsize, const gid_t *gidset); }
	SYS_GETPGRP        = 81  // { int sys_getpgrp(void); }
	SYS_SETPGID        = 82  // { int sys_setpgid(pid_t pid, pid_t pgid); }
	SYS_FUTEX          = 83  // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); }
	SYS_UTIMENSAT      = 84  // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); }
	SYS_FUTIMENS       = 85  // { int sys_futimens(int fd, const struct timespec *times); }
	SYS_KBIND          = 86  // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); }
	SYS_CLOCK_GETTIME  = 87  // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); }
	SYS_CLOCK_SETTIME  = 88  // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); }
	SYS_CLOCK_GETRES   = 89  // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); }
	SYS_DUP2           = 90  // { int sys_dup2(int from, int to); }
	SYS_NANOSLEEP      = 91  // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
	SYS_FCNTL          = 92  // { int sys_fcntl(int fd, int cmd, ... void *arg); }
	SYS_ACCEPT4        = 93  // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); }
	SYS___THRSLEEP     = 94  // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); }
	SYS_FSYNC          = 95  // { int sys_fsync(int fd); }
	SYS_SETPRIORITY    = 96  // { int sys_setpriority(int which, id_t who, int prio); }
	SYS_SOCKET         = 97  // { int sys_socket(int domain, int type, int protocol); }
	SYS_CONNECT        = 98  // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); }
	SYS_GETDENTS       = 99  // { int sys_getdents(int fd, void *buf, size_t buflen); }
	SYS_GETPRIORITY    = 100 // { int sys_getpriority(int which, id_t who); }
	SYS_PIPE2          = 101 // { int sys_pipe2(int *fdp, int flags); }
	SYS_DUP3           = 102 // { int sys_dup3(int from, int to, int flags); }
	SYS_SIGRETURN      = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }
	SYS_BIND           = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); }
	SYS_SETSOCKOPT     = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }
	SYS_LISTEN         = 106 // { int sys_listen(int s, int backlog); }
	SYS_CHFLAGSAT      = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); }
	SYS_PLEDGE         = 108 // { int sys_pledge(const char *promises, const char *execpromises); }
	SYS_PPOLL          = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }
	SYS_PSELECT        = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }
	SYS_SIGSUSPEND     = 111 // { int sys_sigsuspend(int mask); }
	SYS_SENDSYSLOG     = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); }
	SYS_UNVEIL         = 114 // { int sys_unveil(const char *path, const char *permissions); }
	SYS_GETSOCKOPT     = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }
	SYS_THRKILL        = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); }
	SYS_READV          = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); }
	SYS_WRITEV         = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); }
	SYS_KILL           = 122 // { int sys_kill(int pid, int signum); }
	SYS_FCHOWN         = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }
	SYS_FCHMOD         = 124 // { int sys_fchmod(int fd, mode_t mode); }
	SYS_SETREUID       = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); }
	SYS_SETREGID       = 127 // { int sys_setregid(gid_t rgid, gid_t egid); }
	SYS_RENAME         = 128 // { int sys_rename(const char *from, const char *to); }
	SYS_FLOCK          = 131 // { int sys_flock(int fd, int how); }
	SYS_MKFIFO         = 132 // { int sys_mkfifo(const char *path, mode_t mode); }
	SYS_SENDTO         = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }
	SYS_SHUTDOWN       = 134 // { int sys_shutdown(int s, int how); }
	SYS_SOCKETPAIR     = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); }
	SYS_MKDIR          = 136 // { int sys_mkdir(const char *path, mode_t mode); }
	SYS_RMDIR          = 137 // { int sys_rmdir(const char *path); }
	SYS_ADJTIME        = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); }
	SYS_GETLOGIN_R     = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); }
	SYS_SETSID         = 147 // { int sys_setsid(void); }
	SYS_QUOTACTL       = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); }
	SYS_NFSSVC         = 155 // { int sys_nfssvc(int flag, void *argp); }
	SYS_GETFH          = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }
	SYS_SYSARCH        = 165 // { int sys_sysarch(int op, void *parms); }
	SYS_PREAD          = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }
	SYS_PWRITE         = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }
	SYS_SETGID         = 181 // { int sys_setgid(gid_t gid); }
	SYS_SETEGID        = 182 // { int sys_setegid(gid_t egid); }
	SYS_SETEUID        = 183 // { int sys_seteuid(uid_t euid); }
	SYS_PATHCONF       = 191 // { long sys_pathconf(const char *path, int name); }
	SYS_FPATHCONF      = 192 // { long sys_fpathconf(int fd, int name); }
	SYS_SWAPCTL        = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }
	SYS_GETRLIMIT      = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); }
	SYS_SETRLIMIT      = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); }
	SYS_MMAP           = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
	SYS_LSEEK          = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); }
	SYS_TRUNCATE       = 200 // { int sys_truncate(const char *path, int pad, off_t length); }
	SYS_FTRUNCATE      = 201 // { int sys_ftruncate(int fd, int pad, off_t length); }
	SYS_SYSCTL         = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }
	SYS_MLOCK          = 203 // { int sys_mlock(const void *addr, size_t len); }
	SYS_MUNLOCK        = 204 // { int sys_munlock(const void *addr, size_t len); }
	SYS_GETPGID        = 207 // { pid_t sys_getpgid(pid_t pid); }
	SYS_UTRACE         = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); }
	SYS_SEMGET         = 221 // { int sys_semget(key_t key, int nsems, int semflg); }
	SYS_MSGGET         = 225 // { int sys_msgget(key_t key, int msgflg); }
	SYS_MSGSND         = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
	SYS_MSGRCV         = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
	SYS_SHMAT          = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); }
	SYS_SHMDT          = 230 // { int sys_shmdt(const void *shmaddr); }
	SYS_MINHERIT       = 250 // { int sys_minherit(void *addr, size_t len, int inherit); }
	SYS_POLL           = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); }
	SYS_ISSETUGID      = 253 // { int sys_issetugid(void); }
	SYS_LCHOWN         = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }
	SYS_GETSID         = 255 // { pid_t sys_getsid(pid_t pid); }
	SYS_MSYNC          = 256 // { int sys_msync(void *addr, size_t len, int flags); }
	SYS_PIPE           = 263 // { int sys_pipe(int *fdp); }
	SYS_FHOPEN         = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }
	SYS_PREADV         = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
	SYS_PWRITEV        = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
	SYS_KQUEUE         = 269 // { int sys_kqueue(void); }
	SYS_MLOCKALL       = 271 // { int sys_mlockall(int flags); }
	SYS_MUNLOCKALL     = 272 // { int sys_munlockall(void); }
	SYS_GETRESUID      = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
	SYS_SETRESUID      = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); }
	SYS_GETRESGID      = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
	SYS_SETRESGID      = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
	SYS_MQUERY         = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
	SYS_CLOSEFROM      = 287 // { int sys_closefrom(int fd); }
	SYS_SIGALTSTACK    = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); }
	SYS_SHMGET         = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }
	SYS_SEMOP          = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); }
	SYS_FHSTAT         = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); }
	SYS___SEMCTL       = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); }
	SYS_SHMCTL         = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); }
	SYS_MSGCTL         = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); }
	SYS_SCHED_YIELD    = 298 // { int sys_sched_yield(void); }
	SYS_GETTHRID       = 299 // { pid_t sys_getthrid(void); }
	SYS___THRWAKEUP    = 301 // { int sys___thrwakeup(const volatile void *ident, int n); }
	SYS___THREXIT      = 302 // { void sys___threxit(pid_t *notdead); }
	SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); }
	SYS___GETCWD       = 304 // { int sys___getcwd(char *buf, size_t len); }
	SYS_ADJFREQ        = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); }
	SYS_SETRTABLE      = 310 // { int sys_setrtable(int rtableid); }
	SYS_GETRTABLE      = 311 // { int sys_getrtable(void); }
	SYS_FACCESSAT      = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); }
	SYS_FCHMODAT       = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); }
	SYS_FCHOWNAT       = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); }
	SYS_LINKAT         = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); }
	SYS_MKDIRAT        = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); }
	SYS_MKFIFOAT       = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); }
	SYS_MKNODAT        = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); }
	SYS_OPENAT         = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); }
	SYS_READLINKAT     = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); }
	SYS_RENAMEAT       = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); }
	SYS_SYMLINKAT      = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); }
	SYS_UNLINKAT       = 325 // { int sys_unlinkat(int fd, const char *path, int flag); }
	SYS___SET_TCB      = 329 // { void sys___set_tcb(void *tcb); }
	SYS___GET_TCB      = 330 // { void *sys___get_tcb(void); }
)
   07070100000EA3000081A4000000000000000000000001645E367C000047B5000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go   // go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build arm && openbsd
// +build arm,openbsd

package unix

// Deprecated: Use libc wrappers instead of direct syscalls.
const (
	SYS_EXIT           = 1   // { void sys_exit(int rval); }
	SYS_FORK           = 2   // { int sys_fork(void); }
	SYS_READ           = 3   // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }
	SYS_WRITE          = 4   // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); }
	SYS_OPEN           = 5   // { int sys_open(const char *path, int flags, ... mode_t mode); }
	SYS_CLOSE          = 6   // { int sys_close(int fd); }
	SYS_GETENTROPY     = 7   // { int sys_getentropy(void *buf, size_t nbyte); }
	SYS___TFORK        = 8   // { int sys___tfork(const struct __tfork *param, size_t psize); }
	SYS_LINK           = 9   // { int sys_link(const char *path, const char *link); }
	SYS_UNLINK         = 10  // { int sys_unlink(const char *path); }
	SYS_WAIT4          = 11  // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); }
	SYS_CHDIR          = 12  // { int sys_chdir(const char *path); }
	SYS_FCHDIR         = 13  // { int sys_fchdir(int fd); }
	SYS_MKNOD          = 14  // { int sys_mknod(const char *path, mode_t mode, dev_t dev); }
	SYS_CHMOD          = 15  // { int sys_chmod(const char *path, mode_t mode); }
	SYS_CHOWN          = 16  // { int sys_chown(const char *path, uid_t uid, gid_t gid); }
	SYS_OBREAK         = 17  // { int sys_obreak(char *nsize); } break
	SYS_GETDTABLECOUNT = 18  // { int sys_getdtablecount(void); }
	SYS_GETRUSAGE      = 19  // { int sys_getrusage(int who, struct rusage *rusage); }
	SYS_GETPID         = 20  // { pid_t sys_getpid(void); }
	SYS_MOUNT          = 21  // { int sys_mount(const char *type, const char *path, int flags, void *data); }
	SYS_UNMOUNT        = 22  // { int sys_unmount(const char *path, int flags); }
	SYS_SETUID         = 23  // { int sys_setuid(uid_t uid); }
	SYS_GETUID         = 24  // { uid_t sys_getuid(void); }
	SYS_GETEUID        = 25  // { uid_t sys_geteuid(void); }
	SYS_PTRACE         = 26  // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); }
	SYS_RECVMSG        = 27  // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); }
	SYS_SENDMSG        = 28  // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); }
	SYS_RECVFROM       = 29  // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }
	SYS_ACCEPT         = 30  // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); }
	SYS_GETPEERNAME    = 31  // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }
	SYS_GETSOCKNAME    = 32  // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }
	SYS_ACCESS         = 33  // { int sys_access(const char *path, int amode); }
	SYS_CHFLAGS        = 34  // { int sys_chflags(const char *path, u_int flags); }
	SYS_FCHFLAGS       = 35  // { int sys_fchflags(int fd, u_int flags); }
	SYS_SYNC           = 36  // { void sys_sync(void); }
	SYS_STAT           = 38  // { int sys_stat(const char *path, struct stat *ub); }
	SYS_GETPPID        = 39  // { pid_t sys_getppid(void); }
	SYS_LSTAT          = 40  // { int sys_lstat(const char *path, struct stat *ub); }
	SYS_DUP            = 41  // { int sys_dup(int fd); }
	SYS_FSTATAT        = 42  // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); }
	SYS_GETEGID        = 43  // { gid_t sys_getegid(void); }
	SYS_PROFIL         = 44  // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); }
	SYS_KTRACE         = 45  // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); }
	SYS_SIGACTION      = 46  // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); }
	SYS_GETGID         = 47  // { gid_t sys_getgid(void); }
	SYS_SIGPROCMASK    = 48  // { int sys_sigprocmask(int how, sigset_t mask); }
	SYS_SETLOGIN       = 50  // { int sys_setlogin(const char *namebuf); }
	SYS_ACCT           = 51  // { int sys_acct(const char *path); }
	SYS_SIGPENDING     = 52  // { int sys_sigpending(void); }
	SYS_FSTAT          = 53  // { int sys_fstat(int fd, struct stat *sb); }
	SYS_IOCTL          = 54  // { int sys_ioctl(int fd, u_long com, ... void *data); }
	SYS_REBOOT         = 55  // { int sys_reboot(int opt); }
	SYS_REVOKE         = 56  // { int sys_revoke(const char *path); }
	SYS_SYMLINK        = 57  // { int sys_symlink(const char *path, const char *link); }
	SYS_READLINK       = 58  // { ssize_t sys_readlink(const char *path, char *buf, size_t count); }
	SYS_EXECVE         = 59  // { int sys_execve(const char *path, char * const *argp, char * const *envp); }
	SYS_UMASK          = 60  // { mode_t sys_umask(mode_t newmask); }
	SYS_CHROOT         = 61  // { int sys_chroot(const char *path); }
	SYS_GETFSSTAT      = 62  // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); }
	SYS_STATFS         = 63  // { int sys_statfs(const char *path, struct statfs *buf); }
	SYS_FSTATFS        = 64  // { int sys_fstatfs(int fd, struct statfs *buf); }
	SYS_FHSTATFS       = 65  // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); }
	SYS_VFORK          = 66  // { int sys_vfork(void); }
	SYS_GETTIMEOFDAY   = 67  // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); }
	SYS_SETTIMEOFDAY   = 68  // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); }
	SYS_SETITIMER      = 69  // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }
	SYS_GETITIMER      = 70  // { int sys_getitimer(int which, struct itimerval *itv); }
	SYS_SELECT         = 71  // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
	SYS_KEVENT         = 72  // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
	SYS_MUNMAP         = 73  // { int sys_munmap(void *addr, size_t len); }
	SYS_MPROTECT       = 74  // { int sys_mprotect(void *addr, size_t len, int prot); }
	SYS_MADVISE        = 75  // { int sys_madvise(void *addr, size_t len, int behav); }
	SYS_UTIMES         = 76  // { int sys_utimes(const char *path, const struct timeval *tptr); }
	SYS_FUTIMES        = 77  // { int sys_futimes(int fd, const struct timeval *tptr); }
	SYS_MINCORE        = 78  // { int sys_mincore(void *addr, size_t len, char *vec); }
	SYS_GETGROUPS      = 79  // { int sys_getgroups(int gidsetsize, gid_t *gidset); }
	SYS_SETGROUPS      = 80  // { int sys_setgroups(int gidsetsize, const gid_t *gidset); }
	SYS_GETPGRP        = 81  // { int sys_getpgrp(void); }
	SYS_SETPGID        = 82  // { int sys_setpgid(pid_t pid, pid_t pgid); }
	SYS_FUTEX          = 83  // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); }
	SYS_UTIMENSAT      = 84  // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); }
	SYS_FUTIMENS       = 85  // { int sys_futimens(int fd, const struct timespec *times); }
	SYS_KBIND          = 86  // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); }
	SYS_CLOCK_GETTIME  = 87  // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); }
	SYS_CLOCK_SETTIME  = 88  // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); }
	SYS_CLOCK_GETRES   = 89  // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); }
	SYS_DUP2           = 90  // { int sys_dup2(int from, int to); }
	SYS_NANOSLEEP      = 91  // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
	SYS_FCNTL          = 92  // { int sys_fcntl(int fd, int cmd, ... void *arg); }
	SYS_ACCEPT4        = 93  // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); }
	SYS___THRSLEEP     = 94  // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); }
	SYS_FSYNC          = 95  // { int sys_fsync(int fd); }
	SYS_SETPRIORITY    = 96  // { int sys_setpriority(int which, id_t who, int prio); }
	SYS_SOCKET         = 97  // { int sys_socket(int domain, int type, int protocol); }
	SYS_CONNECT        = 98  // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); }
	SYS_GETDENTS       = 99  // { int sys_getdents(int fd, void *buf, size_t buflen); }
	SYS_GETPRIORITY    = 100 // { int sys_getpriority(int which, id_t who); }
	SYS_PIPE2          = 101 // { int sys_pipe2(int *fdp, int flags); }
	SYS_DUP3           = 102 // { int sys_dup3(int from, int to, int flags); }
	SYS_SIGRETURN      = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }
	SYS_BIND           = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); }
	SYS_SETSOCKOPT     = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }
	SYS_LISTEN         = 106 // { int sys_listen(int s, int backlog); }
	SYS_CHFLAGSAT      = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); }
	SYS_PLEDGE         = 108 // { int sys_pledge(const char *promises, const char *execpromises); }
	SYS_PPOLL          = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }
	SYS_PSELECT        = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }
	SYS_SIGSUSPEND     = 111 // { int sys_sigsuspend(int mask); }
	SYS_SENDSYSLOG     = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); }
	SYS_UNVEIL         = 114 // { int sys_unveil(const char *path, const char *permissions); }
	SYS_GETSOCKOPT     = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }
	SYS_THRKILL        = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); }
	SYS_READV          = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); }
	SYS_WRITEV         = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); }
	SYS_KILL           = 122 // { int sys_kill(int pid, int signum); }
	SYS_FCHOWN         = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }
	SYS_FCHMOD         = 124 // { int sys_fchmod(int fd, mode_t mode); }
	SYS_SETREUID       = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); }
	SYS_SETREGID       = 127 // { int sys_setregid(gid_t rgid, gid_t egid); }
	SYS_RENAME         = 128 // { int sys_rename(const char *from, const char *to); }
	SYS_FLOCK          = 131 // { int sys_flock(int fd, int how); }
	SYS_MKFIFO         = 132 // { int sys_mkfifo(const char *path, mode_t mode); }
	SYS_SENDTO         = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }
	SYS_SHUTDOWN       = 134 // { int sys_shutdown(int s, int how); }
	SYS_SOCKETPAIR     = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); }
	SYS_MKDIR          = 136 // { int sys_mkdir(const char *path, mode_t mode); }
	SYS_RMDIR          = 137 // { int sys_rmdir(const char *path); }
	SYS_ADJTIME        = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); }
	SYS_GETLOGIN_R     = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); }
	SYS_SETSID         = 147 // { int sys_setsid(void); }
	SYS_QUOTACTL       = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); }
	SYS_NFSSVC         = 155 // { int sys_nfssvc(int flag, void *argp); }
	SYS_GETFH          = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }
	SYS_SYSARCH        = 165 // { int sys_sysarch(int op, void *parms); }
	SYS_PREAD          = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }
	SYS_PWRITE         = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }
	SYS_SETGID         = 181 // { int sys_setgid(gid_t gid); }
	SYS_SETEGID        = 182 // { int sys_setegid(gid_t egid); }
	SYS_SETEUID        = 183 // { int sys_seteuid(uid_t euid); }
	SYS_PATHCONF       = 191 // { long sys_pathconf(const char *path, int name); }
	SYS_FPATHCONF      = 192 // { long sys_fpathconf(int fd, int name); }
	SYS_SWAPCTL        = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }
	SYS_GETRLIMIT      = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); }
	SYS_SETRLIMIT      = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); }
	SYS_MMAP           = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
	SYS_LSEEK          = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); }
	SYS_TRUNCATE       = 200 // { int sys_truncate(const char *path, int pad, off_t length); }
	SYS_FTRUNCATE      = 201 // { int sys_ftruncate(int fd, int pad, off_t length); }
	SYS_SYSCTL         = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }
	SYS_MLOCK          = 203 // { int sys_mlock(const void *addr, size_t len); }
	SYS_MUNLOCK        = 204 // { int sys_munlock(const void *addr, size_t len); }
	SYS_GETPGID        = 207 // { pid_t sys_getpgid(pid_t pid); }
	SYS_UTRACE         = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); }
	SYS_SEMGET         = 221 // { int sys_semget(key_t key, int nsems, int semflg); }
	SYS_MSGGET         = 225 // { int sys_msgget(key_t key, int msgflg); }
	SYS_MSGSND         = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
	SYS_MSGRCV         = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
	SYS_SHMAT          = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); }
	SYS_SHMDT          = 230 // { int sys_shmdt(const void *shmaddr); }
	SYS_MINHERIT       = 250 // { int sys_minherit(void *addr, size_t len, int inherit); }
	SYS_POLL           = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); }
	SYS_ISSETUGID      = 253 // { int sys_issetugid(void); }
	SYS_LCHOWN         = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }
	SYS_GETSID         = 255 // { pid_t sys_getsid(pid_t pid); }
	SYS_MSYNC          = 256 // { int sys_msync(void *addr, size_t len, int flags); }
	SYS_PIPE           = 263 // { int sys_pipe(int *fdp); }
	SYS_FHOPEN         = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }
	SYS_PREADV         = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
	SYS_PWRITEV        = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
	SYS_KQUEUE         = 269 // { int sys_kqueue(void); }
	SYS_MLOCKALL       = 271 // { int sys_mlockall(int flags); }
	SYS_MUNLOCKALL     = 272 // { int sys_munlockall(void); }
	SYS_GETRESUID      = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
	SYS_SETRESUID      = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); }
	SYS_GETRESGID      = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
	SYS_SETRESGID      = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
	SYS_MQUERY         = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
	SYS_CLOSEFROM      = 287 // { int sys_closefrom(int fd); }
	SYS_SIGALTSTACK    = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); }
	SYS_SHMGET         = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }
	SYS_SEMOP          = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); }
	SYS_FHSTAT         = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); }
	SYS___SEMCTL       = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); }
	SYS_SHMCTL         = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); }
	SYS_MSGCTL         = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); }
	SYS_SCHED_YIELD    = 298 // { int sys_sched_yield(void); }
	SYS_GETTHRID       = 299 // { pid_t sys_getthrid(void); }
	SYS___THRWAKEUP    = 301 // { int sys___thrwakeup(const volatile void *ident, int n); }
	SYS___THREXIT      = 302 // { void sys___threxit(pid_t *notdead); }
	SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); }
	SYS___GETCWD       = 304 // { int sys___getcwd(char *buf, size_t len); }
	SYS_ADJFREQ        = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); }
	SYS_SETRTABLE      = 310 // { int sys_setrtable(int rtableid); }
	SYS_GETRTABLE      = 311 // { int sys_getrtable(void); }
	SYS_FACCESSAT      = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); }
	SYS_FCHMODAT       = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); }
	SYS_FCHOWNAT       = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); }
	SYS_LINKAT         = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); }
	SYS_MKDIRAT        = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); }
	SYS_MKFIFOAT       = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); }
	SYS_MKNODAT        = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); }
	SYS_OPENAT         = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); }
	SYS_READLINKAT     = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); }
	SYS_RENAMEAT       = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); }
	SYS_SYMLINKAT      = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); }
	SYS_UNLINKAT       = 325 // { int sys_unlinkat(int fd, const char *path, int flag); }
	SYS___SET_TCB      = 329 // { void sys___set_tcb(void *tcb); }
	SYS___GET_TCB      = 330 // { void *sys___get_tcb(void); }
)
   07070100000EA4000081A4000000000000000000000001645E367C00004764000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go // go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build arm64 && openbsd
// +build arm64,openbsd

package unix

// Deprecated: Use libc wrappers instead of direct syscalls.
const (
	SYS_EXIT           = 1   // { void sys_exit(int rval); }
	SYS_FORK           = 2   // { int sys_fork(void); }
	SYS_READ           = 3   // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }
	SYS_WRITE          = 4   // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); }
	SYS_OPEN           = 5   // { int sys_open(const char *path, int flags, ... mode_t mode); }
	SYS_CLOSE          = 6   // { int sys_close(int fd); }
	SYS_GETENTROPY     = 7   // { int sys_getentropy(void *buf, size_t nbyte); }
	SYS___TFORK        = 8   // { int sys___tfork(const struct __tfork *param, size_t psize); }
	SYS_LINK           = 9   // { int sys_link(const char *path, const char *link); }
	SYS_UNLINK         = 10  // { int sys_unlink(const char *path); }
	SYS_WAIT4          = 11  // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); }
	SYS_CHDIR          = 12  // { int sys_chdir(const char *path); }
	SYS_FCHDIR         = 13  // { int sys_fchdir(int fd); }
	SYS_MKNOD          = 14  // { int sys_mknod(const char *path, mode_t mode, dev_t dev); }
	SYS_CHMOD          = 15  // { int sys_chmod(const char *path, mode_t mode); }
	SYS_CHOWN          = 16  // { int sys_chown(const char *path, uid_t uid, gid_t gid); }
	SYS_OBREAK         = 17  // { int sys_obreak(char *nsize); } break
	SYS_GETDTABLECOUNT = 18  // { int sys_getdtablecount(void); }
	SYS_GETRUSAGE      = 19  // { int sys_getrusage(int who, struct rusage *rusage); }
	SYS_GETPID         = 20  // { pid_t sys_getpid(void); }
	SYS_MOUNT          = 21  // { int sys_mount(const char *type, const char *path, int flags, void *data); }
	SYS_UNMOUNT        = 22  // { int sys_unmount(const char *path, int flags); }
	SYS_SETUID         = 23  // { int sys_setuid(uid_t uid); }
	SYS_GETUID         = 24  // { uid_t sys_getuid(void); }
	SYS_GETEUID        = 25  // { uid_t sys_geteuid(void); }
	SYS_PTRACE         = 26  // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); }
	SYS_RECVMSG        = 27  // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); }
	SYS_SENDMSG        = 28  // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); }
	SYS_RECVFROM       = 29  // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }
	SYS_ACCEPT         = 30  // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); }
	SYS_GETPEERNAME    = 31  // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }
	SYS_GETSOCKNAME    = 32  // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }
	SYS_ACCESS         = 33  // { int sys_access(const char *path, int amode); }
	SYS_CHFLAGS        = 34  // { int sys_chflags(const char *path, u_int flags); }
	SYS_FCHFLAGS       = 35  // { int sys_fchflags(int fd, u_int flags); }
	SYS_SYNC           = 36  // { void sys_sync(void); }
	SYS_STAT           = 38  // { int sys_stat(const char *path, struct stat *ub); }
	SYS_GETPPID        = 39  // { pid_t sys_getppid(void); }
	SYS_LSTAT          = 40  // { int sys_lstat(const char *path, struct stat *ub); }
	SYS_DUP            = 41  // { int sys_dup(int fd); }
	SYS_FSTATAT        = 42  // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); }
	SYS_GETEGID        = 43  // { gid_t sys_getegid(void); }
	SYS_PROFIL         = 44  // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); }
	SYS_KTRACE         = 45  // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); }
	SYS_SIGACTION      = 46  // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); }
	SYS_GETGID         = 47  // { gid_t sys_getgid(void); }
	SYS_SIGPROCMASK    = 48  // { int sys_sigprocmask(int how, sigset_t mask); }
	SYS_SETLOGIN       = 50  // { int sys_setlogin(const char *namebuf); }
	SYS_ACCT           = 51  // { int sys_acct(const char *path); }
	SYS_SIGPENDING     = 52  // { int sys_sigpending(void); }
	SYS_FSTAT          = 53  // { int sys_fstat(int fd, struct stat *sb); }
	SYS_IOCTL          = 54  // { int sys_ioctl(int fd, u_long com, ... void *data); }
	SYS_REBOOT         = 55  // { int sys_reboot(int opt); }
	SYS_REVOKE         = 56  // { int sys_revoke(const char *path); }
	SYS_SYMLINK        = 57  // { int sys_symlink(const char *path, const char *link); }
	SYS_READLINK       = 58  // { ssize_t sys_readlink(const char *path, char *buf, size_t count); }
	SYS_EXECVE         = 59  // { int sys_execve(const char *path, char * const *argp, char * const *envp); }
	SYS_UMASK          = 60  // { mode_t sys_umask(mode_t newmask); }
	SYS_CHROOT         = 61  // { int sys_chroot(const char *path); }
	SYS_GETFSSTAT      = 62  // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); }
	SYS_STATFS         = 63  // { int sys_statfs(const char *path, struct statfs *buf); }
	SYS_FSTATFS        = 64  // { int sys_fstatfs(int fd, struct statfs *buf); }
	SYS_FHSTATFS       = 65  // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); }
	SYS_VFORK          = 66  // { int sys_vfork(void); }
	SYS_GETTIMEOFDAY   = 67  // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); }
	SYS_SETTIMEOFDAY   = 68  // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); }
	SYS_SETITIMER      = 69  // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }
	SYS_GETITIMER      = 70  // { int sys_getitimer(int which, struct itimerval *itv); }
	SYS_SELECT         = 71  // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
	SYS_KEVENT         = 72  // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
	SYS_MUNMAP         = 73  // { int sys_munmap(void *addr, size_t len); }
	SYS_MPROTECT       = 74  // { int sys_mprotect(void *addr, size_t len, int prot); }
	SYS_MADVISE        = 75  // { int sys_madvise(void *addr, size_t len, int behav); }
	SYS_UTIMES         = 76  // { int sys_utimes(const char *path, const struct timeval *tptr); }
	SYS_FUTIMES        = 77  // { int sys_futimes(int fd, const struct timeval *tptr); }
	SYS_GETGROUPS      = 79  // { int sys_getgroups(int gidsetsize, gid_t *gidset); }
	SYS_SETGROUPS      = 80  // { int sys_setgroups(int gidsetsize, const gid_t *gidset); }
	SYS_GETPGRP        = 81  // { int sys_getpgrp(void); }
	SYS_SETPGID        = 82  // { int sys_setpgid(pid_t pid, pid_t pgid); }
	SYS_FUTEX          = 83  // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); }
	SYS_UTIMENSAT      = 84  // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); }
	SYS_FUTIMENS       = 85  // { int sys_futimens(int fd, const struct timespec *times); }
	SYS_KBIND          = 86  // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); }
	SYS_CLOCK_GETTIME  = 87  // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); }
	SYS_CLOCK_SETTIME  = 88  // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); }
	SYS_CLOCK_GETRES   = 89  // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); }
	SYS_DUP2           = 90  // { int sys_dup2(int from, int to); }
	SYS_NANOSLEEP      = 91  // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
	SYS_FCNTL          = 92  // { int sys_fcntl(int fd, int cmd, ... void *arg); }
	SYS_ACCEPT4        = 93  // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); }
	SYS___THRSLEEP     = 94  // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); }
	SYS_FSYNC          = 95  // { int sys_fsync(int fd); }
	SYS_SETPRIORITY    = 96  // { int sys_setpriority(int which, id_t who, int prio); }
	SYS_SOCKET         = 97  // { int sys_socket(int domain, int type, int protocol); }
	SYS_CONNECT        = 98  // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); }
	SYS_GETDENTS       = 99  // { int sys_getdents(int fd, void *buf, size_t buflen); }
	SYS_GETPRIORITY    = 100 // { int sys_getpriority(int which, id_t who); }
	SYS_PIPE2          = 101 // { int sys_pipe2(int *fdp, int flags); }
	SYS_DUP3           = 102 // { int sys_dup3(int from, int to, int flags); }
	SYS_SIGRETURN      = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }
	SYS_BIND           = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); }
	SYS_SETSOCKOPT     = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }
	SYS_LISTEN         = 106 // { int sys_listen(int s, int backlog); }
	SYS_CHFLAGSAT      = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); }
	SYS_PLEDGE         = 108 // { int sys_pledge(const char *promises, const char *execpromises); }
	SYS_PPOLL          = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }
	SYS_PSELECT        = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }
	SYS_SIGSUSPEND     = 111 // { int sys_sigsuspend(int mask); }
	SYS_SENDSYSLOG     = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); }
	SYS_UNVEIL         = 114 // { int sys_unveil(const char *path, const char *permissions); }
	SYS_GETSOCKOPT     = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }
	SYS_THRKILL        = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); }
	SYS_READV          = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); }
	SYS_WRITEV         = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); }
	SYS_KILL           = 122 // { int sys_kill(int pid, int signum); }
	SYS_FCHOWN         = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }
	SYS_FCHMOD         = 124 // { int sys_fchmod(int fd, mode_t mode); }
	SYS_SETREUID       = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); }
	SYS_SETREGID       = 127 // { int sys_setregid(gid_t rgid, gid_t egid); }
	SYS_RENAME         = 128 // { int sys_rename(const char *from, const char *to); }
	SYS_FLOCK          = 131 // { int sys_flock(int fd, int how); }
	SYS_MKFIFO         = 132 // { int sys_mkfifo(const char *path, mode_t mode); }
	SYS_SENDTO         = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }
	SYS_SHUTDOWN       = 134 // { int sys_shutdown(int s, int how); }
	SYS_SOCKETPAIR     = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); }
	SYS_MKDIR          = 136 // { int sys_mkdir(const char *path, mode_t mode); }
	SYS_RMDIR          = 137 // { int sys_rmdir(const char *path); }
	SYS_ADJTIME        = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); }
	SYS_GETLOGIN_R     = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); }
	SYS_SETSID         = 147 // { int sys_setsid(void); }
	SYS_QUOTACTL       = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); }
	SYS_NFSSVC         = 155 // { int sys_nfssvc(int flag, void *argp); }
	SYS_GETFH          = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }
	SYS_SYSARCH        = 165 // { int sys_sysarch(int op, void *parms); }
	SYS_PREAD          = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }
	SYS_PWRITE         = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }
	SYS_SETGID         = 181 // { int sys_setgid(gid_t gid); }
	SYS_SETEGID        = 182 // { int sys_setegid(gid_t egid); }
	SYS_SETEUID        = 183 // { int sys_seteuid(uid_t euid); }
	SYS_PATHCONF       = 191 // { long sys_pathconf(const char *path, int name); }
	SYS_FPATHCONF      = 192 // { long sys_fpathconf(int fd, int name); }
	SYS_SWAPCTL        = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }
	SYS_GETRLIMIT      = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); }
	SYS_SETRLIMIT      = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); }
	SYS_MMAP           = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
	SYS_LSEEK          = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); }
	SYS_TRUNCATE       = 200 // { int sys_truncate(const char *path, int pad, off_t length); }
	SYS_FTRUNCATE      = 201 // { int sys_ftruncate(int fd, int pad, off_t length); }
	SYS_SYSCTL         = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }
	SYS_MLOCK          = 203 // { int sys_mlock(const void *addr, size_t len); }
	SYS_MUNLOCK        = 204 // { int sys_munlock(const void *addr, size_t len); }
	SYS_GETPGID        = 207 // { pid_t sys_getpgid(pid_t pid); }
	SYS_UTRACE         = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); }
	SYS_SEMGET         = 221 // { int sys_semget(key_t key, int nsems, int semflg); }
	SYS_MSGGET         = 225 // { int sys_msgget(key_t key, int msgflg); }
	SYS_MSGSND         = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
	SYS_MSGRCV         = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
	SYS_SHMAT          = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); }
	SYS_SHMDT          = 230 // { int sys_shmdt(const void *shmaddr); }
	SYS_MINHERIT       = 250 // { int sys_minherit(void *addr, size_t len, int inherit); }
	SYS_POLL           = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); }
	SYS_ISSETUGID      = 253 // { int sys_issetugid(void); }
	SYS_LCHOWN         = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }
	SYS_GETSID         = 255 // { pid_t sys_getsid(pid_t pid); }
	SYS_MSYNC          = 256 // { int sys_msync(void *addr, size_t len, int flags); }
	SYS_PIPE           = 263 // { int sys_pipe(int *fdp); }
	SYS_FHOPEN         = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }
	SYS_PREADV         = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
	SYS_PWRITEV        = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
	SYS_KQUEUE         = 269 // { int sys_kqueue(void); }
	SYS_MLOCKALL       = 271 // { int sys_mlockall(int flags); }
	SYS_MUNLOCKALL     = 272 // { int sys_munlockall(void); }
	SYS_GETRESUID      = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
	SYS_SETRESUID      = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); }
	SYS_GETRESGID      = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
	SYS_SETRESGID      = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
	SYS_MQUERY         = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
	SYS_CLOSEFROM      = 287 // { int sys_closefrom(int fd); }
	SYS_SIGALTSTACK    = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); }
	SYS_SHMGET         = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }
	SYS_SEMOP          = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); }
	SYS_FHSTAT         = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); }
	SYS___SEMCTL       = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); }
	SYS_SHMCTL         = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); }
	SYS_MSGCTL         = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); }
	SYS_SCHED_YIELD    = 298 // { int sys_sched_yield(void); }
	SYS_GETTHRID       = 299 // { pid_t sys_getthrid(void); }
	SYS___THRWAKEUP    = 301 // { int sys___thrwakeup(const volatile void *ident, int n); }
	SYS___THREXIT      = 302 // { void sys___threxit(pid_t *notdead); }
	SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); }
	SYS___GETCWD       = 304 // { int sys___getcwd(char *buf, size_t len); }
	SYS_ADJFREQ        = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); }
	SYS_SETRTABLE      = 310 // { int sys_setrtable(int rtableid); }
	SYS_GETRTABLE      = 311 // { int sys_getrtable(void); }
	SYS_FACCESSAT      = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); }
	SYS_FCHMODAT       = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); }
	SYS_FCHOWNAT       = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); }
	SYS_LINKAT         = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); }
	SYS_MKDIRAT        = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); }
	SYS_MKFIFOAT       = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); }
	SYS_MKNODAT        = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); }
	SYS_OPENAT         = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); }
	SYS_READLINKAT     = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); }
	SYS_RENAMEAT       = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); }
	SYS_SYMLINKAT      = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); }
	SYS_UNLINKAT       = 325 // { int sys_unlinkat(int fd, const char *path, int flag); }
	SYS___SET_TCB      = 329 // { void sys___set_tcb(void *tcb); }
	SYS___GET_TCB      = 330 // { void *sys___get_tcb(void); }
)
07070100000EA5000081A4000000000000000000000001645E367C00004849000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go    // go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build mips64 && openbsd
// +build mips64,openbsd

package unix

// Deprecated: Use libc wrappers instead of direct syscalls.
const (
	SYS_EXIT           = 1   // { void sys_exit(int rval); }
	SYS_FORK           = 2   // { int sys_fork(void); }
	SYS_READ           = 3   // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }
	SYS_WRITE          = 4   // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); }
	SYS_OPEN           = 5   // { int sys_open(const char *path, int flags, ... mode_t mode); }
	SYS_CLOSE          = 6   // { int sys_close(int fd); }
	SYS_GETENTROPY     = 7   // { int sys_getentropy(void *buf, size_t nbyte); }
	SYS___TFORK        = 8   // { int sys___tfork(const struct __tfork *param, size_t psize); }
	SYS_LINK           = 9   // { int sys_link(const char *path, const char *link); }
	SYS_UNLINK         = 10  // { int sys_unlink(const char *path); }
	SYS_WAIT4          = 11  // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); }
	SYS_CHDIR          = 12  // { int sys_chdir(const char *path); }
	SYS_FCHDIR         = 13  // { int sys_fchdir(int fd); }
	SYS_MKNOD          = 14  // { int sys_mknod(const char *path, mode_t mode, dev_t dev); }
	SYS_CHMOD          = 15  // { int sys_chmod(const char *path, mode_t mode); }
	SYS_CHOWN          = 16  // { int sys_chown(const char *path, uid_t uid, gid_t gid); }
	SYS_OBREAK         = 17  // { int sys_obreak(char *nsize); } break
	SYS_GETDTABLECOUNT = 18  // { int sys_getdtablecount(void); }
	SYS_GETRUSAGE      = 19  // { int sys_getrusage(int who, struct rusage *rusage); }
	SYS_GETPID         = 20  // { pid_t sys_getpid(void); }
	SYS_MOUNT          = 21  // { int sys_mount(const char *type, const char *path, int flags, void *data); }
	SYS_UNMOUNT        = 22  // { int sys_unmount(const char *path, int flags); }
	SYS_SETUID         = 23  // { int sys_setuid(uid_t uid); }
	SYS_GETUID         = 24  // { uid_t sys_getuid(void); }
	SYS_GETEUID        = 25  // { uid_t sys_geteuid(void); }
	SYS_PTRACE         = 26  // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); }
	SYS_RECVMSG        = 27  // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); }
	SYS_SENDMSG        = 28  // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); }
	SYS_RECVFROM       = 29  // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }
	SYS_ACCEPT         = 30  // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); }
	SYS_GETPEERNAME    = 31  // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }
	SYS_GETSOCKNAME    = 32  // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }
	SYS_ACCESS         = 33  // { int sys_access(const char *path, int amode); }
	SYS_CHFLAGS        = 34  // { int sys_chflags(const char *path, u_int flags); }
	SYS_FCHFLAGS       = 35  // { int sys_fchflags(int fd, u_int flags); }
	SYS_SYNC           = 36  // { void sys_sync(void); }
	SYS_MSYSCALL       = 37  // { int sys_msyscall(void *addr, size_t len); }
	SYS_STAT           = 38  // { int sys_stat(const char *path, struct stat *ub); }
	SYS_GETPPID        = 39  // { pid_t sys_getppid(void); }
	SYS_LSTAT          = 40  // { int sys_lstat(const char *path, struct stat *ub); }
	SYS_DUP            = 41  // { int sys_dup(int fd); }
	SYS_FSTATAT        = 42  // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); }
	SYS_GETEGID        = 43  // { gid_t sys_getegid(void); }
	SYS_PROFIL         = 44  // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); }
	SYS_KTRACE         = 45  // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); }
	SYS_SIGACTION      = 46  // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); }
	SYS_GETGID         = 47  // { gid_t sys_getgid(void); }
	SYS_SIGPROCMASK    = 48  // { int sys_sigprocmask(int how, sigset_t mask); }
	SYS_SETLOGIN       = 50  // { int sys_setlogin(const char *namebuf); }
	SYS_ACCT           = 51  // { int sys_acct(const char *path); }
	SYS_SIGPENDING     = 52  // { int sys_sigpending(void); }
	SYS_FSTAT          = 53  // { int sys_fstat(int fd, struct stat *sb); }
	SYS_IOCTL          = 54  // { int sys_ioctl(int fd, u_long com, ... void *data); }
	SYS_REBOOT         = 55  // { int sys_reboot(int opt); }
	SYS_REVOKE         = 56  // { int sys_revoke(const char *path); }
	SYS_SYMLINK        = 57  // { int sys_symlink(const char *path, const char *link); }
	SYS_READLINK       = 58  // { ssize_t sys_readlink(const char *path, char *buf, size_t count); }
	SYS_EXECVE         = 59  // { int sys_execve(const char *path, char * const *argp, char * const *envp); }
	SYS_UMASK          = 60  // { mode_t sys_umask(mode_t newmask); }
	SYS_CHROOT         = 61  // { int sys_chroot(const char *path); }
	SYS_GETFSSTAT      = 62  // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); }
	SYS_STATFS         = 63  // { int sys_statfs(const char *path, struct statfs *buf); }
	SYS_FSTATFS        = 64  // { int sys_fstatfs(int fd, struct statfs *buf); }
	SYS_FHSTATFS       = 65  // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); }
	SYS_VFORK          = 66  // { int sys_vfork(void); }
	SYS_GETTIMEOFDAY   = 67  // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); }
	SYS_SETTIMEOFDAY   = 68  // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); }
	SYS_SETITIMER      = 69  // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }
	SYS_GETITIMER      = 70  // { int sys_getitimer(int which, struct itimerval *itv); }
	SYS_SELECT         = 71  // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
	SYS_KEVENT         = 72  // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
	SYS_MUNMAP         = 73  // { int sys_munmap(void *addr, size_t len); }
	SYS_MPROTECT       = 74  // { int sys_mprotect(void *addr, size_t len, int prot); }
	SYS_MADVISE        = 75  // { int sys_madvise(void *addr, size_t len, int behav); }
	SYS_UTIMES         = 76  // { int sys_utimes(const char *path, const struct timeval *tptr); }
	SYS_FUTIMES        = 77  // { int sys_futimes(int fd, const struct timeval *tptr); }
	SYS_GETGROUPS      = 79  // { int sys_getgroups(int gidsetsize, gid_t *gidset); }
	SYS_SETGROUPS      = 80  // { int sys_setgroups(int gidsetsize, const gid_t *gidset); }
	SYS_GETPGRP        = 81  // { int sys_getpgrp(void); }
	SYS_SETPGID        = 82  // { int sys_setpgid(pid_t pid, pid_t pgid); }
	SYS_FUTEX          = 83  // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); }
	SYS_UTIMENSAT      = 84  // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); }
	SYS_FUTIMENS       = 85  // { int sys_futimens(int fd, const struct timespec *times); }
	SYS_KBIND          = 86  // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); }
	SYS_CLOCK_GETTIME  = 87  // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); }
	SYS_CLOCK_SETTIME  = 88  // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); }
	SYS_CLOCK_GETRES   = 89  // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); }
	SYS_DUP2           = 90  // { int sys_dup2(int from, int to); }
	SYS_NANOSLEEP      = 91  // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
	SYS_FCNTL          = 92  // { int sys_fcntl(int fd, int cmd, ... void *arg); }
	SYS_ACCEPT4        = 93  // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); }
	SYS___THRSLEEP     = 94  // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); }
	SYS_FSYNC          = 95  // { int sys_fsync(int fd); }
	SYS_SETPRIORITY    = 96  // { int sys_setpriority(int which, id_t who, int prio); }
	SYS_SOCKET         = 97  // { int sys_socket(int domain, int type, int protocol); }
	SYS_CONNECT        = 98  // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); }
	SYS_GETDENTS       = 99  // { int sys_getdents(int fd, void *buf, size_t buflen); }
	SYS_GETPRIORITY    = 100 // { int sys_getpriority(int which, id_t who); }
	SYS_PIPE2          = 101 // { int sys_pipe2(int *fdp, int flags); }
	SYS_DUP3           = 102 // { int sys_dup3(int from, int to, int flags); }
	SYS_SIGRETURN      = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }
	SYS_BIND           = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); }
	SYS_SETSOCKOPT     = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }
	SYS_LISTEN         = 106 // { int sys_listen(int s, int backlog); }
	SYS_CHFLAGSAT      = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); }
	SYS_PLEDGE         = 108 // { int sys_pledge(const char *promises, const char *execpromises); }
	SYS_PPOLL          = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }
	SYS_PSELECT        = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }
	SYS_SIGSUSPEND     = 111 // { int sys_sigsuspend(int mask); }
	SYS_SENDSYSLOG     = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); }
	SYS_UNVEIL         = 114 // { int sys_unveil(const char *path, const char *permissions); }
	SYS___REALPATH     = 115 // { int sys___realpath(const char *pathname, char *resolved); }
	SYS_GETSOCKOPT     = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }
	SYS_THRKILL        = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); }
	SYS_READV          = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); }
	SYS_WRITEV         = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); }
	SYS_KILL           = 122 // { int sys_kill(int pid, int signum); }
	SYS_FCHOWN         = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }
	SYS_FCHMOD         = 124 // { int sys_fchmod(int fd, mode_t mode); }
	SYS_SETREUID       = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); }
	SYS_SETREGID       = 127 // { int sys_setregid(gid_t rgid, gid_t egid); }
	SYS_RENAME         = 128 // { int sys_rename(const char *from, const char *to); }
	SYS_FLOCK          = 131 // { int sys_flock(int fd, int how); }
	SYS_MKFIFO         = 132 // { int sys_mkfifo(const char *path, mode_t mode); }
	SYS_SENDTO         = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }
	SYS_SHUTDOWN       = 134 // { int sys_shutdown(int s, int how); }
	SYS_SOCKETPAIR     = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); }
	SYS_MKDIR          = 136 // { int sys_mkdir(const char *path, mode_t mode); }
	SYS_RMDIR          = 137 // { int sys_rmdir(const char *path); }
	SYS_ADJTIME        = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); }
	SYS_GETLOGIN_R     = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); }
	SYS_SETSID         = 147 // { int sys_setsid(void); }
	SYS_QUOTACTL       = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); }
	SYS_NFSSVC         = 155 // { int sys_nfssvc(int flag, void *argp); }
	SYS_GETFH          = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }
	SYS___TMPFD        = 164 // { int sys___tmpfd(int flags); }
	SYS_SYSARCH        = 165 // { int sys_sysarch(int op, void *parms); }
	SYS_PREAD          = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }
	SYS_PWRITE         = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }
	SYS_SETGID         = 181 // { int sys_setgid(gid_t gid); }
	SYS_SETEGID        = 182 // { int sys_setegid(gid_t egid); }
	SYS_SETEUID        = 183 // { int sys_seteuid(uid_t euid); }
	SYS_PATHCONF       = 191 // { long sys_pathconf(const char *path, int name); }
	SYS_FPATHCONF      = 192 // { long sys_fpathconf(int fd, int name); }
	SYS_SWAPCTL        = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }
	SYS_GETRLIMIT      = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); }
	SYS_SETRLIMIT      = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); }
	SYS_MMAP           = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
	SYS_LSEEK          = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); }
	SYS_TRUNCATE       = 200 // { int sys_truncate(const char *path, int pad, off_t length); }
	SYS_FTRUNCATE      = 201 // { int sys_ftruncate(int fd, int pad, off_t length); }
	SYS_SYSCTL         = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }
	SYS_MLOCK          = 203 // { int sys_mlock(const void *addr, size_t len); }
	SYS_MUNLOCK        = 204 // { int sys_munlock(const void *addr, size_t len); }
	SYS_GETPGID        = 207 // { pid_t sys_getpgid(pid_t pid); }
	SYS_UTRACE         = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); }
	SYS_SEMGET         = 221 // { int sys_semget(key_t key, int nsems, int semflg); }
	SYS_MSGGET         = 225 // { int sys_msgget(key_t key, int msgflg); }
	SYS_MSGSND         = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
	SYS_MSGRCV         = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
	SYS_SHMAT          = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); }
	SYS_SHMDT          = 230 // { int sys_shmdt(const void *shmaddr); }
	SYS_MINHERIT       = 250 // { int sys_minherit(void *addr, size_t len, int inherit); }
	SYS_POLL           = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); }
	SYS_ISSETUGID      = 253 // { int sys_issetugid(void); }
	SYS_LCHOWN         = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }
	SYS_GETSID         = 255 // { pid_t sys_getsid(pid_t pid); }
	SYS_MSYNC          = 256 // { int sys_msync(void *addr, size_t len, int flags); }
	SYS_PIPE           = 263 // { int sys_pipe(int *fdp); }
	SYS_FHOPEN         = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }
	SYS_PREADV         = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
	SYS_PWRITEV        = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
	SYS_KQUEUE         = 269 // { int sys_kqueue(void); }
	SYS_MLOCKALL       = 271 // { int sys_mlockall(int flags); }
	SYS_MUNLOCKALL     = 272 // { int sys_munlockall(void); }
	SYS_GETRESUID      = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
	SYS_SETRESUID      = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); }
	SYS_GETRESGID      = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
	SYS_SETRESGID      = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
	SYS_MQUERY         = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
	SYS_CLOSEFROM      = 287 // { int sys_closefrom(int fd); }
	SYS_SIGALTSTACK    = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); }
	SYS_SHMGET         = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }
	SYS_SEMOP          = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); }
	SYS_FHSTAT         = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); }
	SYS___SEMCTL       = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); }
	SYS_SHMCTL         = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); }
	SYS_MSGCTL         = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); }
	SYS_SCHED_YIELD    = 298 // { int sys_sched_yield(void); }
	SYS_GETTHRID       = 299 // { pid_t sys_getthrid(void); }
	SYS___THRWAKEUP    = 301 // { int sys___thrwakeup(const volatile void *ident, int n); }
	SYS___THREXIT      = 302 // { void sys___threxit(pid_t *notdead); }
	SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); }
	SYS___GETCWD       = 304 // { int sys___getcwd(char *buf, size_t len); }
	SYS_ADJFREQ        = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); }
	SYS_SETRTABLE      = 310 // { int sys_setrtable(int rtableid); }
	SYS_GETRTABLE      = 311 // { int sys_getrtable(void); }
	SYS_FACCESSAT      = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); }
	SYS_FCHMODAT       = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); }
	SYS_FCHOWNAT       = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); }
	SYS_LINKAT         = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); }
	SYS_MKDIRAT        = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); }
	SYS_MKFIFOAT       = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); }
	SYS_MKNODAT        = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); }
	SYS_OPENAT         = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); }
	SYS_READLINKAT     = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); }
	SYS_RENAMEAT       = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); }
	SYS_SYMLINKAT      = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); }
	SYS_UNLINKAT       = 325 // { int sys_unlinkat(int fd, const char *path, int flag); }
	SYS___SET_TCB      = 329 // { void sys___set_tcb(void *tcb); }
	SYS___GET_TCB      = 330 // { void *sys___get_tcb(void); }
)
   07070100000EA6000081A4000000000000000000000001645E367C00004727000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_openbsd_ppc64.go // go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build ppc64 && openbsd
// +build ppc64,openbsd

package unix

const (
	SYS_EXIT           = 1   // { void sys_exit(int rval); }
	SYS_FORK           = 2   // { int sys_fork(void); }
	SYS_READ           = 3   // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }
	SYS_WRITE          = 4   // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); }
	SYS_OPEN           = 5   // { int sys_open(const char *path, int flags, ... mode_t mode); }
	SYS_CLOSE          = 6   // { int sys_close(int fd); }
	SYS_GETENTROPY     = 7   // { int sys_getentropy(void *buf, size_t nbyte); }
	SYS___TFORK        = 8   // { int sys___tfork(const struct __tfork *param, size_t psize); }
	SYS_LINK           = 9   // { int sys_link(const char *path, const char *link); }
	SYS_UNLINK         = 10  // { int sys_unlink(const char *path); }
	SYS_WAIT4          = 11  // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); }
	SYS_CHDIR          = 12  // { int sys_chdir(const char *path); }
	SYS_FCHDIR         = 13  // { int sys_fchdir(int fd); }
	SYS_MKNOD          = 14  // { int sys_mknod(const char *path, mode_t mode, dev_t dev); }
	SYS_CHMOD          = 15  // { int sys_chmod(const char *path, mode_t mode); }
	SYS_CHOWN          = 16  // { int sys_chown(const char *path, uid_t uid, gid_t gid); }
	SYS_OBREAK         = 17  // { int sys_obreak(char *nsize); } break
	SYS_GETDTABLECOUNT = 18  // { int sys_getdtablecount(void); }
	SYS_GETRUSAGE      = 19  // { int sys_getrusage(int who, struct rusage *rusage); }
	SYS_GETPID         = 20  // { pid_t sys_getpid(void); }
	SYS_MOUNT          = 21  // { int sys_mount(const char *type, const char *path, int flags, void *data); }
	SYS_UNMOUNT        = 22  // { int sys_unmount(const char *path, int flags); }
	SYS_SETUID         = 23  // { int sys_setuid(uid_t uid); }
	SYS_GETUID         = 24  // { uid_t sys_getuid(void); }
	SYS_GETEUID        = 25  // { uid_t sys_geteuid(void); }
	SYS_PTRACE         = 26  // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); }
	SYS_RECVMSG        = 27  // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); }
	SYS_SENDMSG        = 28  // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); }
	SYS_RECVFROM       = 29  // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }
	SYS_ACCEPT         = 30  // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); }
	SYS_GETPEERNAME    = 31  // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }
	SYS_GETSOCKNAME    = 32  // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }
	SYS_ACCESS         = 33  // { int sys_access(const char *path, int amode); }
	SYS_CHFLAGS        = 34  // { int sys_chflags(const char *path, u_int flags); }
	SYS_FCHFLAGS       = 35  // { int sys_fchflags(int fd, u_int flags); }
	SYS_SYNC           = 36  // { void sys_sync(void); }
	SYS_STAT           = 38  // { int sys_stat(const char *path, struct stat *ub); }
	SYS_GETPPID        = 39  // { pid_t sys_getppid(void); }
	SYS_LSTAT          = 40  // { int sys_lstat(const char *path, struct stat *ub); }
	SYS_DUP            = 41  // { int sys_dup(int fd); }
	SYS_FSTATAT        = 42  // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); }
	SYS_GETEGID        = 43  // { gid_t sys_getegid(void); }
	SYS_PROFIL         = 44  // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); }
	SYS_KTRACE         = 45  // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); }
	SYS_SIGACTION      = 46  // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); }
	SYS_GETGID         = 47  // { gid_t sys_getgid(void); }
	SYS_SIGPROCMASK    = 48  // { int sys_sigprocmask(int how, sigset_t mask); }
	SYS_SETLOGIN       = 50  // { int sys_setlogin(const char *namebuf); }
	SYS_ACCT           = 51  // { int sys_acct(const char *path); }
	SYS_SIGPENDING     = 52  // { int sys_sigpending(void); }
	SYS_FSTAT          = 53  // { int sys_fstat(int fd, struct stat *sb); }
	SYS_IOCTL          = 54  // { int sys_ioctl(int fd, u_long com, ... void *data); }
	SYS_REBOOT         = 55  // { int sys_reboot(int opt); }
	SYS_REVOKE         = 56  // { int sys_revoke(const char *path); }
	SYS_SYMLINK        = 57  // { int sys_symlink(const char *path, const char *link); }
	SYS_READLINK       = 58  // { ssize_t sys_readlink(const char *path, char *buf, size_t count); }
	SYS_EXECVE         = 59  // { int sys_execve(const char *path, char * const *argp, char * const *envp); }
	SYS_UMASK          = 60  // { mode_t sys_umask(mode_t newmask); }
	SYS_CHROOT         = 61  // { int sys_chroot(const char *path); }
	SYS_GETFSSTAT      = 62  // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); }
	SYS_STATFS         = 63  // { int sys_statfs(const char *path, struct statfs *buf); }
	SYS_FSTATFS        = 64  // { int sys_fstatfs(int fd, struct statfs *buf); }
	SYS_FHSTATFS       = 65  // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); }
	SYS_VFORK          = 66  // { int sys_vfork(void); }
	SYS_GETTIMEOFDAY   = 67  // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); }
	SYS_SETTIMEOFDAY   = 68  // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); }
	SYS_SETITIMER      = 69  // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }
	SYS_GETITIMER      = 70  // { int sys_getitimer(int which, struct itimerval *itv); }
	SYS_SELECT         = 71  // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
	SYS_KEVENT         = 72  // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
	SYS_MUNMAP         = 73  // { int sys_munmap(void *addr, size_t len); }
	SYS_MPROTECT       = 74  // { int sys_mprotect(void *addr, size_t len, int prot); }
	SYS_MADVISE        = 75  // { int sys_madvise(void *addr, size_t len, int behav); }
	SYS_UTIMES         = 76  // { int sys_utimes(const char *path, const struct timeval *tptr); }
	SYS_FUTIMES        = 77  // { int sys_futimes(int fd, const struct timeval *tptr); }
	SYS_GETGROUPS      = 79  // { int sys_getgroups(int gidsetsize, gid_t *gidset); }
	SYS_SETGROUPS      = 80  // { int sys_setgroups(int gidsetsize, const gid_t *gidset); }
	SYS_GETPGRP        = 81  // { int sys_getpgrp(void); }
	SYS_SETPGID        = 82  // { int sys_setpgid(pid_t pid, pid_t pgid); }
	SYS_FUTEX          = 83  // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); }
	SYS_UTIMENSAT      = 84  // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); }
	SYS_FUTIMENS       = 85  // { int sys_futimens(int fd, const struct timespec *times); }
	SYS_KBIND          = 86  // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); }
	SYS_CLOCK_GETTIME  = 87  // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); }
	SYS_CLOCK_SETTIME  = 88  // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); }
	SYS_CLOCK_GETRES   = 89  // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); }
	SYS_DUP2           = 90  // { int sys_dup2(int from, int to); }
	SYS_NANOSLEEP      = 91  // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
	SYS_FCNTL          = 92  // { int sys_fcntl(int fd, int cmd, ... void *arg); }
	SYS_ACCEPT4        = 93  // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); }
	SYS___THRSLEEP     = 94  // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); }
	SYS_FSYNC          = 95  // { int sys_fsync(int fd); }
	SYS_SETPRIORITY    = 96  // { int sys_setpriority(int which, id_t who, int prio); }
	SYS_SOCKET         = 97  // { int sys_socket(int domain, int type, int protocol); }
	SYS_CONNECT        = 98  // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); }
	SYS_GETDENTS       = 99  // { int sys_getdents(int fd, void *buf, size_t buflen); }
	SYS_GETPRIORITY    = 100 // { int sys_getpriority(int which, id_t who); }
	SYS_PIPE2          = 101 // { int sys_pipe2(int *fdp, int flags); }
	SYS_DUP3           = 102 // { int sys_dup3(int from, int to, int flags); }
	SYS_SIGRETURN      = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }
	SYS_BIND           = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); }
	SYS_SETSOCKOPT     = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }
	SYS_LISTEN         = 106 // { int sys_listen(int s, int backlog); }
	SYS_CHFLAGSAT      = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); }
	SYS_PLEDGE         = 108 // { int sys_pledge(const char *promises, const char *execpromises); }
	SYS_PPOLL          = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }
	SYS_PSELECT        = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }
	SYS_SIGSUSPEND     = 111 // { int sys_sigsuspend(int mask); }
	SYS_SENDSYSLOG     = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); }
	SYS_UNVEIL         = 114 // { int sys_unveil(const char *path, const char *permissions); }
	SYS_GETSOCKOPT     = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }
	SYS_THRKILL        = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); }
	SYS_READV          = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); }
	SYS_WRITEV         = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); }
	SYS_KILL           = 122 // { int sys_kill(int pid, int signum); }
	SYS_FCHOWN         = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }
	SYS_FCHMOD         = 124 // { int sys_fchmod(int fd, mode_t mode); }
	SYS_SETREUID       = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); }
	SYS_SETREGID       = 127 // { int sys_setregid(gid_t rgid, gid_t egid); }
	SYS_RENAME         = 128 // { int sys_rename(const char *from, const char *to); }
	SYS_FLOCK          = 131 // { int sys_flock(int fd, int how); }
	SYS_MKFIFO         = 132 // { int sys_mkfifo(const char *path, mode_t mode); }
	SYS_SENDTO         = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }
	SYS_SHUTDOWN       = 134 // { int sys_shutdown(int s, int how); }
	SYS_SOCKETPAIR     = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); }
	SYS_MKDIR          = 136 // { int sys_mkdir(const char *path, mode_t mode); }
	SYS_RMDIR          = 137 // { int sys_rmdir(const char *path); }
	SYS_ADJTIME        = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); }
	SYS_GETLOGIN_R     = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); }
	SYS_SETSID         = 147 // { int sys_setsid(void); }
	SYS_QUOTACTL       = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); }
	SYS_NFSSVC         = 155 // { int sys_nfssvc(int flag, void *argp); }
	SYS_GETFH          = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }
	SYS_SYSARCH        = 165 // { int sys_sysarch(int op, void *parms); }
	SYS_PREAD          = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }
	SYS_PWRITE         = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }
	SYS_SETGID         = 181 // { int sys_setgid(gid_t gid); }
	SYS_SETEGID        = 182 // { int sys_setegid(gid_t egid); }
	SYS_SETEUID        = 183 // { int sys_seteuid(uid_t euid); }
	SYS_PATHCONF       = 191 // { long sys_pathconf(const char *path, int name); }
	SYS_FPATHCONF      = 192 // { long sys_fpathconf(int fd, int name); }
	SYS_SWAPCTL        = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }
	SYS_GETRLIMIT      = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); }
	SYS_SETRLIMIT      = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); }
	SYS_MMAP           = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
	SYS_LSEEK          = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); }
	SYS_TRUNCATE       = 200 // { int sys_truncate(const char *path, int pad, off_t length); }
	SYS_FTRUNCATE      = 201 // { int sys_ftruncate(int fd, int pad, off_t length); }
	SYS_SYSCTL         = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }
	SYS_MLOCK          = 203 // { int sys_mlock(const void *addr, size_t len); }
	SYS_MUNLOCK        = 204 // { int sys_munlock(const void *addr, size_t len); }
	SYS_GETPGID        = 207 // { pid_t sys_getpgid(pid_t pid); }
	SYS_UTRACE         = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); }
	SYS_SEMGET         = 221 // { int sys_semget(key_t key, int nsems, int semflg); }
	SYS_MSGGET         = 225 // { int sys_msgget(key_t key, int msgflg); }
	SYS_MSGSND         = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
	SYS_MSGRCV         = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
	SYS_SHMAT          = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); }
	SYS_SHMDT          = 230 // { int sys_shmdt(const void *shmaddr); }
	SYS_MINHERIT       = 250 // { int sys_minherit(void *addr, size_t len, int inherit); }
	SYS_POLL           = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); }
	SYS_ISSETUGID      = 253 // { int sys_issetugid(void); }
	SYS_LCHOWN         = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }
	SYS_GETSID         = 255 // { pid_t sys_getsid(pid_t pid); }
	SYS_MSYNC          = 256 // { int sys_msync(void *addr, size_t len, int flags); }
	SYS_PIPE           = 263 // { int sys_pipe(int *fdp); }
	SYS_FHOPEN         = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }
	SYS_PREADV         = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
	SYS_PWRITEV        = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
	SYS_KQUEUE         = 269 // { int sys_kqueue(void); }
	SYS_MLOCKALL       = 271 // { int sys_mlockall(int flags); }
	SYS_MUNLOCKALL     = 272 // { int sys_munlockall(void); }
	SYS_GETRESUID      = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
	SYS_SETRESUID      = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); }
	SYS_GETRESGID      = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
	SYS_SETRESGID      = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
	SYS_MQUERY         = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
	SYS_CLOSEFROM      = 287 // { int sys_closefrom(int fd); }
	SYS_SIGALTSTACK    = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); }
	SYS_SHMGET         = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }
	SYS_SEMOP          = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); }
	SYS_FHSTAT         = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); }
	SYS___SEMCTL       = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); }
	SYS_SHMCTL         = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); }
	SYS_MSGCTL         = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); }
	SYS_SCHED_YIELD    = 298 // { int sys_sched_yield(void); }
	SYS_GETTHRID       = 299 // { pid_t sys_getthrid(void); }
	SYS___THRWAKEUP    = 301 // { int sys___thrwakeup(const volatile void *ident, int n); }
	SYS___THREXIT      = 302 // { void sys___threxit(pid_t *notdead); }
	SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); }
	SYS___GETCWD       = 304 // { int sys___getcwd(char *buf, size_t len); }
	SYS_ADJFREQ        = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); }
	SYS_SETRTABLE      = 310 // { int sys_setrtable(int rtableid); }
	SYS_GETRTABLE      = 311 // { int sys_getrtable(void); }
	SYS_FACCESSAT      = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); }
	SYS_FCHMODAT       = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); }
	SYS_FCHOWNAT       = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); }
	SYS_LINKAT         = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); }
	SYS_MKDIRAT        = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); }
	SYS_MKFIFOAT       = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); }
	SYS_MKNODAT        = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); }
	SYS_OPENAT         = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); }
	SYS_READLINKAT     = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); }
	SYS_RENAMEAT       = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); }
	SYS_SYMLINKAT      = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); }
	SYS_UNLINKAT       = 325 // { int sys_unlinkat(int fd, const char *path, int flag); }
	SYS___SET_TCB      = 329 // { void sys___set_tcb(void *tcb); }
	SYS___GET_TCB      = 330 // { void *sys___get_tcb(void); }
)
 07070100000EA7000081A4000000000000000000000001645E367C00004768000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_openbsd_riscv64.go   // go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build riscv64 && openbsd
// +build riscv64,openbsd

package unix

// Deprecated: Use libc wrappers instead of direct syscalls.
const (
	SYS_EXIT           = 1   // { void sys_exit(int rval); }
	SYS_FORK           = 2   // { int sys_fork(void); }
	SYS_READ           = 3   // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }
	SYS_WRITE          = 4   // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); }
	SYS_OPEN           = 5   // { int sys_open(const char *path, int flags, ... mode_t mode); }
	SYS_CLOSE          = 6   // { int sys_close(int fd); }
	SYS_GETENTROPY     = 7   // { int sys_getentropy(void *buf, size_t nbyte); }
	SYS___TFORK        = 8   // { int sys___tfork(const struct __tfork *param, size_t psize); }
	SYS_LINK           = 9   // { int sys_link(const char *path, const char *link); }
	SYS_UNLINK         = 10  // { int sys_unlink(const char *path); }
	SYS_WAIT4          = 11  // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); }
	SYS_CHDIR          = 12  // { int sys_chdir(const char *path); }
	SYS_FCHDIR         = 13  // { int sys_fchdir(int fd); }
	SYS_MKNOD          = 14  // { int sys_mknod(const char *path, mode_t mode, dev_t dev); }
	SYS_CHMOD          = 15  // { int sys_chmod(const char *path, mode_t mode); }
	SYS_CHOWN          = 16  // { int sys_chown(const char *path, uid_t uid, gid_t gid); }
	SYS_OBREAK         = 17  // { int sys_obreak(char *nsize); } break
	SYS_GETDTABLECOUNT = 18  // { int sys_getdtablecount(void); }
	SYS_GETRUSAGE      = 19  // { int sys_getrusage(int who, struct rusage *rusage); }
	SYS_GETPID         = 20  // { pid_t sys_getpid(void); }
	SYS_MOUNT          = 21  // { int sys_mount(const char *type, const char *path, int flags, void *data); }
	SYS_UNMOUNT        = 22  // { int sys_unmount(const char *path, int flags); }
	SYS_SETUID         = 23  // { int sys_setuid(uid_t uid); }
	SYS_GETUID         = 24  // { uid_t sys_getuid(void); }
	SYS_GETEUID        = 25  // { uid_t sys_geteuid(void); }
	SYS_PTRACE         = 26  // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); }
	SYS_RECVMSG        = 27  // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); }
	SYS_SENDMSG        = 28  // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); }
	SYS_RECVFROM       = 29  // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }
	SYS_ACCEPT         = 30  // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); }
	SYS_GETPEERNAME    = 31  // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }
	SYS_GETSOCKNAME    = 32  // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }
	SYS_ACCESS         = 33  // { int sys_access(const char *path, int amode); }
	SYS_CHFLAGS        = 34  // { int sys_chflags(const char *path, u_int flags); }
	SYS_FCHFLAGS       = 35  // { int sys_fchflags(int fd, u_int flags); }
	SYS_SYNC           = 36  // { void sys_sync(void); }
	SYS_STAT           = 38  // { int sys_stat(const char *path, struct stat *ub); }
	SYS_GETPPID        = 39  // { pid_t sys_getppid(void); }
	SYS_LSTAT          = 40  // { int sys_lstat(const char *path, struct stat *ub); }
	SYS_DUP            = 41  // { int sys_dup(int fd); }
	SYS_FSTATAT        = 42  // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); }
	SYS_GETEGID        = 43  // { gid_t sys_getegid(void); }
	SYS_PROFIL         = 44  // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); }
	SYS_KTRACE         = 45  // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); }
	SYS_SIGACTION      = 46  // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); }
	SYS_GETGID         = 47  // { gid_t sys_getgid(void); }
	SYS_SIGPROCMASK    = 48  // { int sys_sigprocmask(int how, sigset_t mask); }
	SYS_SETLOGIN       = 50  // { int sys_setlogin(const char *namebuf); }
	SYS_ACCT           = 51  // { int sys_acct(const char *path); }
	SYS_SIGPENDING     = 52  // { int sys_sigpending(void); }
	SYS_FSTAT          = 53  // { int sys_fstat(int fd, struct stat *sb); }
	SYS_IOCTL          = 54  // { int sys_ioctl(int fd, u_long com, ... void *data); }
	SYS_REBOOT         = 55  // { int sys_reboot(int opt); }
	SYS_REVOKE         = 56  // { int sys_revoke(const char *path); }
	SYS_SYMLINK        = 57  // { int sys_symlink(const char *path, const char *link); }
	SYS_READLINK       = 58  // { ssize_t sys_readlink(const char *path, char *buf, size_t count); }
	SYS_EXECVE         = 59  // { int sys_execve(const char *path, char * const *argp, char * const *envp); }
	SYS_UMASK          = 60  // { mode_t sys_umask(mode_t newmask); }
	SYS_CHROOT         = 61  // { int sys_chroot(const char *path); }
	SYS_GETFSSTAT      = 62  // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); }
	SYS_STATFS         = 63  // { int sys_statfs(const char *path, struct statfs *buf); }
	SYS_FSTATFS        = 64  // { int sys_fstatfs(int fd, struct statfs *buf); }
	SYS_FHSTATFS       = 65  // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); }
	SYS_VFORK          = 66  // { int sys_vfork(void); }
	SYS_GETTIMEOFDAY   = 67  // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); }
	SYS_SETTIMEOFDAY   = 68  // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); }
	SYS_SETITIMER      = 69  // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }
	SYS_GETITIMER      = 70  // { int sys_getitimer(int which, struct itimerval *itv); }
	SYS_SELECT         = 71  // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
	SYS_KEVENT         = 72  // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
	SYS_MUNMAP         = 73  // { int sys_munmap(void *addr, size_t len); }
	SYS_MPROTECT       = 74  // { int sys_mprotect(void *addr, size_t len, int prot); }
	SYS_MADVISE        = 75  // { int sys_madvise(void *addr, size_t len, int behav); }
	SYS_UTIMES         = 76  // { int sys_utimes(const char *path, const struct timeval *tptr); }
	SYS_FUTIMES        = 77  // { int sys_futimes(int fd, const struct timeval *tptr); }
	SYS_GETGROUPS      = 79  // { int sys_getgroups(int gidsetsize, gid_t *gidset); }
	SYS_SETGROUPS      = 80  // { int sys_setgroups(int gidsetsize, const gid_t *gidset); }
	SYS_GETPGRP        = 81  // { int sys_getpgrp(void); }
	SYS_SETPGID        = 82  // { int sys_setpgid(pid_t pid, pid_t pgid); }
	SYS_FUTEX          = 83  // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); }
	SYS_UTIMENSAT      = 84  // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); }
	SYS_FUTIMENS       = 85  // { int sys_futimens(int fd, const struct timespec *times); }
	SYS_KBIND          = 86  // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); }
	SYS_CLOCK_GETTIME  = 87  // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); }
	SYS_CLOCK_SETTIME  = 88  // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); }
	SYS_CLOCK_GETRES   = 89  // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); }
	SYS_DUP2           = 90  // { int sys_dup2(int from, int to); }
	SYS_NANOSLEEP      = 91  // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
	SYS_FCNTL          = 92  // { int sys_fcntl(int fd, int cmd, ... void *arg); }
	SYS_ACCEPT4        = 93  // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); }
	SYS___THRSLEEP     = 94  // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); }
	SYS_FSYNC          = 95  // { int sys_fsync(int fd); }
	SYS_SETPRIORITY    = 96  // { int sys_setpriority(int which, id_t who, int prio); }
	SYS_SOCKET         = 97  // { int sys_socket(int domain, int type, int protocol); }
	SYS_CONNECT        = 98  // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); }
	SYS_GETDENTS       = 99  // { int sys_getdents(int fd, void *buf, size_t buflen); }
	SYS_GETPRIORITY    = 100 // { int sys_getpriority(int which, id_t who); }
	SYS_PIPE2          = 101 // { int sys_pipe2(int *fdp, int flags); }
	SYS_DUP3           = 102 // { int sys_dup3(int from, int to, int flags); }
	SYS_SIGRETURN      = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }
	SYS_BIND           = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); }
	SYS_SETSOCKOPT     = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }
	SYS_LISTEN         = 106 // { int sys_listen(int s, int backlog); }
	SYS_CHFLAGSAT      = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); }
	SYS_PLEDGE         = 108 // { int sys_pledge(const char *promises, const char *execpromises); }
	SYS_PPOLL          = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }
	SYS_PSELECT        = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }
	SYS_SIGSUSPEND     = 111 // { int sys_sigsuspend(int mask); }
	SYS_SENDSYSLOG     = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); }
	SYS_UNVEIL         = 114 // { int sys_unveil(const char *path, const char *permissions); }
	SYS_GETSOCKOPT     = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }
	SYS_THRKILL        = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); }
	SYS_READV          = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); }
	SYS_WRITEV         = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); }
	SYS_KILL           = 122 // { int sys_kill(int pid, int signum); }
	SYS_FCHOWN         = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }
	SYS_FCHMOD         = 124 // { int sys_fchmod(int fd, mode_t mode); }
	SYS_SETREUID       = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); }
	SYS_SETREGID       = 127 // { int sys_setregid(gid_t rgid, gid_t egid); }
	SYS_RENAME         = 128 // { int sys_rename(const char *from, const char *to); }
	SYS_FLOCK          = 131 // { int sys_flock(int fd, int how); }
	SYS_MKFIFO         = 132 // { int sys_mkfifo(const char *path, mode_t mode); }
	SYS_SENDTO         = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }
	SYS_SHUTDOWN       = 134 // { int sys_shutdown(int s, int how); }
	SYS_SOCKETPAIR     = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); }
	SYS_MKDIR          = 136 // { int sys_mkdir(const char *path, mode_t mode); }
	SYS_RMDIR          = 137 // { int sys_rmdir(const char *path); }
	SYS_ADJTIME        = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); }
	SYS_GETLOGIN_R     = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); }
	SYS_SETSID         = 147 // { int sys_setsid(void); }
	SYS_QUOTACTL       = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); }
	SYS_NFSSVC         = 155 // { int sys_nfssvc(int flag, void *argp); }
	SYS_GETFH          = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }
	SYS_SYSARCH        = 165 // { int sys_sysarch(int op, void *parms); }
	SYS_PREAD          = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }
	SYS_PWRITE         = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }
	SYS_SETGID         = 181 // { int sys_setgid(gid_t gid); }
	SYS_SETEGID        = 182 // { int sys_setegid(gid_t egid); }
	SYS_SETEUID        = 183 // { int sys_seteuid(uid_t euid); }
	SYS_PATHCONF       = 191 // { long sys_pathconf(const char *path, int name); }
	SYS_FPATHCONF      = 192 // { long sys_fpathconf(int fd, int name); }
	SYS_SWAPCTL        = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }
	SYS_GETRLIMIT      = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); }
	SYS_SETRLIMIT      = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); }
	SYS_MMAP           = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
	SYS_LSEEK          = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); }
	SYS_TRUNCATE       = 200 // { int sys_truncate(const char *path, int pad, off_t length); }
	SYS_FTRUNCATE      = 201 // { int sys_ftruncate(int fd, int pad, off_t length); }
	SYS_SYSCTL         = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }
	SYS_MLOCK          = 203 // { int sys_mlock(const void *addr, size_t len); }
	SYS_MUNLOCK        = 204 // { int sys_munlock(const void *addr, size_t len); }
	SYS_GETPGID        = 207 // { pid_t sys_getpgid(pid_t pid); }
	SYS_UTRACE         = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); }
	SYS_SEMGET         = 221 // { int sys_semget(key_t key, int nsems, int semflg); }
	SYS_MSGGET         = 225 // { int sys_msgget(key_t key, int msgflg); }
	SYS_MSGSND         = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
	SYS_MSGRCV         = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
	SYS_SHMAT          = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); }
	SYS_SHMDT          = 230 // { int sys_shmdt(const void *shmaddr); }
	SYS_MINHERIT       = 250 // { int sys_minherit(void *addr, size_t len, int inherit); }
	SYS_POLL           = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); }
	SYS_ISSETUGID      = 253 // { int sys_issetugid(void); }
	SYS_LCHOWN         = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }
	SYS_GETSID         = 255 // { pid_t sys_getsid(pid_t pid); }
	SYS_MSYNC          = 256 // { int sys_msync(void *addr, size_t len, int flags); }
	SYS_PIPE           = 263 // { int sys_pipe(int *fdp); }
	SYS_FHOPEN         = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }
	SYS_PREADV         = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
	SYS_PWRITEV        = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
	SYS_KQUEUE         = 269 // { int sys_kqueue(void); }
	SYS_MLOCKALL       = 271 // { int sys_mlockall(int flags); }
	SYS_MUNLOCKALL     = 272 // { int sys_munlockall(void); }
	SYS_GETRESUID      = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
	SYS_SETRESUID      = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); }
	SYS_GETRESGID      = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
	SYS_SETRESGID      = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
	SYS_MQUERY         = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
	SYS_CLOSEFROM      = 287 // { int sys_closefrom(int fd); }
	SYS_SIGALTSTACK    = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); }
	SYS_SHMGET         = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }
	SYS_SEMOP          = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); }
	SYS_FHSTAT         = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); }
	SYS___SEMCTL       = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); }
	SYS_SHMCTL         = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); }
	SYS_MSGCTL         = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); }
	SYS_SCHED_YIELD    = 298 // { int sys_sched_yield(void); }
	SYS_GETTHRID       = 299 // { pid_t sys_getthrid(void); }
	SYS___THRWAKEUP    = 301 // { int sys___thrwakeup(const volatile void *ident, int n); }
	SYS___THREXIT      = 302 // { void sys___threxit(pid_t *notdead); }
	SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); }
	SYS___GETCWD       = 304 // { int sys___getcwd(char *buf, size_t len); }
	SYS_ADJFREQ        = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); }
	SYS_SETRTABLE      = 310 // { int sys_setrtable(int rtableid); }
	SYS_GETRTABLE      = 311 // { int sys_getrtable(void); }
	SYS_FACCESSAT      = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); }
	SYS_FCHMODAT       = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); }
	SYS_FCHOWNAT       = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); }
	SYS_LINKAT         = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); }
	SYS_MKDIRAT        = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); }
	SYS_MKFIFOAT       = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); }
	SYS_MKNODAT        = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); }
	SYS_OPENAT         = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); }
	SYS_READLINKAT     = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); }
	SYS_RENAMEAT       = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); }
	SYS_SYMLINKAT      = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); }
	SYS_UNLINKAT       = 325 // { int sys_unlinkat(int fd, const char *path, int flag); }
	SYS___SET_TCB      = 329 // { void sys___set_tcb(void *tcb); }
	SYS___GET_TCB      = 330 // { void *sys___get_tcb(void); }
)
07070100000EA8000081A4000000000000000000000001645E367C0001D40B000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build zos && s390x
// +build zos,s390x

package unix

// TODO: auto-generate.

const (
	SYS_ACOSD128                        = 0xB80
	SYS_ACOSD32                         = 0xB7E
	SYS_ACOSD64                         = 0xB7F
	SYS_ACOSHD128                       = 0xB83
	SYS_ACOSHD32                        = 0xB81
	SYS_ACOSHD64                        = 0xB82
	SYS_AIO_FSYNC                       = 0xC69
	SYS_ASCTIME                         = 0x0AE
	SYS_ASCTIME64                       = 0xCD7
	SYS_ASCTIME64_R                     = 0xCD8
	SYS_ASIND128                        = 0xB86
	SYS_ASIND32                         = 0xB84
	SYS_ASIND64                         = 0xB85
	SYS_ASINHD128                       = 0xB89
	SYS_ASINHD32                        = 0xB87
	SYS_ASINHD64                        = 0xB88
	SYS_ATAN2D128                       = 0xB8F
	SYS_ATAN2D32                        = 0xB8D
	SYS_ATAN2D64                        = 0xB8E
	SYS_ATAND128                        = 0xB8C
	SYS_ATAND32                         = 0xB8A
	SYS_ATAND64                         = 0xB8B
	SYS_ATANHD128                       = 0xB92
	SYS_ATANHD32                        = 0xB90
	SYS_ATANHD64                        = 0xB91
	SYS_BIND2ADDRSEL                    = 0xD59
	SYS_C16RTOMB                        = 0xD40
	SYS_C32RTOMB                        = 0xD41
	SYS_CBRTD128                        = 0xB95
	SYS_CBRTD32                         = 0xB93
	SYS_CBRTD64                         = 0xB94
	SYS_CEILD128                        = 0xB98
	SYS_CEILD32                         = 0xB96
	SYS_CEILD64                         = 0xB97
	SYS_CLEARENV                        = 0x0C9
	SYS_CLEARERR_UNLOCKED               = 0xCA1
	SYS_CLOCK                           = 0x0AA
	SYS_CLOGL                           = 0xA00
	SYS_CLRMEMF                         = 0x0BD
	SYS_CONJ                            = 0xA03
	SYS_CONJF                           = 0xA06
	SYS_CONJL                           = 0xA09
	SYS_COPYSIGND128                    = 0xB9E
	SYS_COPYSIGND32                     = 0xB9C
	SYS_COPYSIGND64                     = 0xB9D
	SYS_COSD128                         = 0xBA1
	SYS_COSD32                          = 0xB9F
	SYS_COSD64                          = 0xBA0
	SYS_COSHD128                        = 0xBA4
	SYS_COSHD32                         = 0xBA2
	SYS_COSHD64                         = 0xBA3
	SYS_CPOW                            = 0xA0C
	SYS_CPOWF                           = 0xA0F
	SYS_CPOWL                           = 0xA12
	SYS_CPROJ                           = 0xA15
	SYS_CPROJF                          = 0xA18
	SYS_CPROJL                          = 0xA1B
	SYS_CREAL                           = 0xA1E
	SYS_CREALF                          = 0xA21
	SYS_CREALL                          = 0xA24
	SYS_CSIN                            = 0xA27
	SYS_CSINF                           = 0xA2A
	SYS_CSINH                           = 0xA30
	SYS_CSINHF                          = 0xA33
	SYS_CSINHL                          = 0xA36
	SYS_CSINL                           = 0xA2D
	SYS_CSNAP                           = 0x0C5
	SYS_CSQRT                           = 0xA39
	SYS_CSQRTF                          = 0xA3C
	SYS_CSQRTL                          = 0xA3F
	SYS_CTAN                            = 0xA42
	SYS_CTANF                           = 0xA45
	SYS_CTANH                           = 0xA4B
	SYS_CTANHF                          = 0xA4E
	SYS_CTANHL                          = 0xA51
	SYS_CTANL                           = 0xA48
	SYS_CTIME                           = 0x0AB
	SYS_CTIME64                         = 0xCD9
	SYS_CTIME64_R                       = 0xCDA
	SYS_CTRACE                          = 0x0C6
	SYS_DIFFTIME                        = 0x0A7
	SYS_DIFFTIME64                      = 0xCDB
	SYS_DLADDR                          = 0xC82
	SYS_DYNALLOC                        = 0x0C3
	SYS_DYNFREE                         = 0x0C2
	SYS_ERFCD128                        = 0xBAA
	SYS_ERFCD32                         = 0xBA8
	SYS_ERFCD64                         = 0xBA9
	SYS_ERFD128                         = 0xBA7
	SYS_ERFD32                          = 0xBA5
	SYS_ERFD64                          = 0xBA6
	SYS_EXP2D128                        = 0xBB0
	SYS_EXP2D32                         = 0xBAE
	SYS_EXP2D64                         = 0xBAF
	SYS_EXPD128                         = 0xBAD
	SYS_EXPD32                          = 0xBAB
	SYS_EXPD64                          = 0xBAC
	SYS_EXPM1D128                       = 0xBB3
	SYS_EXPM1D32                        = 0xBB1
	SYS_EXPM1D64                        = 0xBB2
	SYS_FABSD128                        = 0xBB6
	SYS_FABSD32                         = 0xBB4
	SYS_FABSD64                         = 0xBB5
	SYS_FDELREC_UNLOCKED                = 0xCA2
	SYS_FDIMD128                        = 0xBB9
	SYS_FDIMD32                         = 0xBB7
	SYS_FDIMD64                         = 0xBB8
	SYS_FDOPEN_UNLOCKED                 = 0xCFC
	SYS_FECLEAREXCEPT                   = 0xAEA
	SYS_FEGETENV                        = 0xAEB
	SYS_FEGETEXCEPTFLAG                 = 0xAEC
	SYS_FEGETROUND                      = 0xAED
	SYS_FEHOLDEXCEPT                    = 0xAEE
	SYS_FEOF_UNLOCKED                   = 0xCA3
	SYS_FERAISEEXCEPT                   = 0xAEF
	SYS_FERROR_UNLOCKED                 = 0xCA4
	SYS_FESETENV                        = 0xAF0
	SYS_FESETEXCEPTFLAG                 = 0xAF1
	SYS_FESETROUND                      = 0xAF2
	SYS_FETCHEP                         = 0x0BF
	SYS_FETESTEXCEPT                    = 0xAF3
	SYS_FEUPDATEENV                     = 0xAF4
	SYS_FE_DEC_GETROUND                 = 0xBBA
	SYS_FE_DEC_SETROUND                 = 0xBBB
	SYS_FFLUSH_UNLOCKED                 = 0xCA5
	SYS_FGETC_UNLOCKED                  = 0xC80
	SYS_FGETPOS64                       = 0xCEE
	SYS_FGETPOS64_UNLOCKED              = 0xCF4
	SYS_FGETPOS_UNLOCKED                = 0xCA6
	SYS_FGETS_UNLOCKED                  = 0xC7C
	SYS_FGETWC_UNLOCKED                 = 0xCA7
	SYS_FGETWS_UNLOCKED                 = 0xCA8
	SYS_FILENO_UNLOCKED                 = 0xCA9
	SYS_FLDATA                          = 0x0C1
	SYS_FLDATA_UNLOCKED                 = 0xCAA
	SYS_FLOCATE_UNLOCKED                = 0xCAB
	SYS_FLOORD128                       = 0xBBE
	SYS_FLOORD32                        = 0xBBC
	SYS_FLOORD64                        = 0xBBD
	SYS_FMA                             = 0xA63
	SYS_FMAD128                         = 0xBC1
	SYS_FMAD32                          = 0xBBF
	SYS_FMAD64                          = 0xBC0
	SYS_FMAF                            = 0xA66
	SYS_FMAL                            = 0xA69
	SYS_FMAX                            = 0xA6C
	SYS_FMAXD128                        = 0xBC4
	SYS_FMAXD32                         = 0xBC2
	SYS_FMAXD64                         = 0xBC3
	SYS_FMAXF                           = 0xA6F
	SYS_FMAXL                           = 0xA72
	SYS_FMIN                            = 0xA75
	SYS_FMIND128                        = 0xBC7
	SYS_FMIND32                         = 0xBC5
	SYS_FMIND64                         = 0xBC6
	SYS_FMINF                           = 0xA78
	SYS_FMINL                           = 0xA7B
	SYS_FMODD128                        = 0xBCA
	SYS_FMODD32                         = 0xBC8
	SYS_FMODD64                         = 0xBC9
	SYS_FOPEN64                         = 0xD49
	SYS_FOPEN64_UNLOCKED                = 0xD4A
	SYS_FOPEN_UNLOCKED                  = 0xCFA
	SYS_FPRINTF_UNLOCKED                = 0xCAC
	SYS_FPUTC_UNLOCKED                  = 0xC81
	SYS_FPUTS_UNLOCKED                  = 0xC7E
	SYS_FPUTWC_UNLOCKED                 = 0xCAD
	SYS_FPUTWS_UNLOCKED                 = 0xCAE
	SYS_FREAD_NOUPDATE                  = 0xCEC
	SYS_FREAD_NOUPDATE_UNLOCKED         = 0xCED
	SYS_FREAD_UNLOCKED                  = 0xC7B
	SYS_FREEIFADDRS                     = 0xCE6
	SYS_FREOPEN64                       = 0xD4B
	SYS_FREOPEN64_UNLOCKED              = 0xD4C
	SYS_FREOPEN_UNLOCKED                = 0xCFB
	SYS_FREXPD128                       = 0xBCE
	SYS_FREXPD32                        = 0xBCC
	SYS_FREXPD64                        = 0xBCD
	SYS_FSCANF_UNLOCKED                 = 0xCAF
	SYS_FSEEK64                         = 0xCEF
	SYS_FSEEK64_UNLOCKED                = 0xCF5
	SYS_FSEEKO64                        = 0xCF0
	SYS_FSEEKO64_UNLOCKED               = 0xCF6
	SYS_FSEEKO_UNLOCKED                 = 0xCB1
	SYS_FSEEK_UNLOCKED                  = 0xCB0
	SYS_FSETPOS64                       = 0xCF1
	SYS_FSETPOS64_UNLOCKED              = 0xCF7
	SYS_FSETPOS_UNLOCKED                = 0xCB3
	SYS_FTELL64                         = 0xCF2
	SYS_FTELL64_UNLOCKED                = 0xCF8
	SYS_FTELLO64                        = 0xCF3
	SYS_FTELLO64_UNLOCKED               = 0xCF9
	SYS_FTELLO_UNLOCKED                 = 0xCB5
	SYS_FTELL_UNLOCKED                  = 0xCB4
	SYS_FUPDATE                         = 0x0B5
	SYS_FUPDATE_UNLOCKED                = 0xCB7
	SYS_FWIDE_UNLOCKED                  = 0xCB8
	SYS_FWPRINTF_UNLOCKED               = 0xCB9
	SYS_FWRITE_UNLOCKED                 = 0xC7A
	SYS_FWSCANF_UNLOCKED                = 0xCBA
	SYS_GETDATE64                       = 0xD4F
	SYS_GETIFADDRS                      = 0xCE7
	SYS_GETIPV4SOURCEFILTER             = 0xC77
	SYS_GETSOURCEFILTER                 = 0xC79
	SYS_GETSYNTX                        = 0x0FD
	SYS_GETS_UNLOCKED                   = 0xC7D
	SYS_GETTIMEOFDAY64                  = 0xD50
	SYS_GETWCHAR_UNLOCKED               = 0xCBC
	SYS_GETWC_UNLOCKED                  = 0xCBB
	SYS_GMTIME                          = 0x0B0
	SYS_GMTIME64                        = 0xCDC
	SYS_GMTIME64_R                      = 0xCDD
	SYS_HYPOTD128                       = 0xBD1
	SYS_HYPOTD32                        = 0xBCF
	SYS_HYPOTD64                        = 0xBD0
	SYS_ILOGBD128                       = 0xBD4
	SYS_ILOGBD32                        = 0xBD2
	SYS_ILOGBD64                        = 0xBD3
	SYS_ILOGBF                          = 0xA7E
	SYS_ILOGBL                          = 0xA81
	SYS_INET6_IS_SRCADDR                = 0xD5A
	SYS_ISBLANK                         = 0x0FE
	SYS_ISWALNUM                        = 0x0FF
	SYS_LDEXPD128                       = 0xBD7
	SYS_LDEXPD32                        = 0xBD5
	SYS_LDEXPD64                        = 0xBD6
	SYS_LGAMMAD128                      = 0xBDA
	SYS_LGAMMAD32                       = 0xBD8
	SYS_LGAMMAD64                       = 0xBD9
	SYS_LIO_LISTIO                      = 0xC6A
	SYS_LLRINT                          = 0xA84
	SYS_LLRINTD128                      = 0xBDD
	SYS_LLRINTD32                       = 0xBDB
	SYS_LLRINTD64                       = 0xBDC
	SYS_LLRINTF                         = 0xA87
	SYS_LLRINTL                         = 0xA8A
	SYS_LLROUND                         = 0xA8D
	SYS_LLROUNDD128                     = 0xBE0
	SYS_LLROUNDD32                      = 0xBDE
	SYS_LLROUNDD64                      = 0xBDF
	SYS_LLROUNDF                        = 0xA90
	SYS_LLROUNDL                        = 0xA93
	SYS_LOCALTIM                        = 0x0B1
	SYS_LOCALTIME                       = 0x0B1
	SYS_LOCALTIME64                     = 0xCDE
	SYS_LOCALTIME64_R                   = 0xCDF
	SYS_LOG10D128                       = 0xBE6
	SYS_LOG10D32                        = 0xBE4
	SYS_LOG10D64                        = 0xBE5
	SYS_LOG1PD128                       = 0xBE9
	SYS_LOG1PD32                        = 0xBE7
	SYS_LOG1PD64                        = 0xBE8
	SYS_LOG2D128                        = 0xBEC
	SYS_LOG2D32                         = 0xBEA
	SYS_LOG2D64                         = 0xBEB
	SYS_LOGBD128                        = 0xBEF
	SYS_LOGBD32                         = 0xBED
	SYS_LOGBD64                         = 0xBEE
	SYS_LOGBF                           = 0xA96
	SYS_LOGBL                           = 0xA99
	SYS_LOGD128                         = 0xBE3
	SYS_LOGD32                          = 0xBE1
	SYS_LOGD64                          = 0xBE2
	SYS_LRINT                           = 0xA9C
	SYS_LRINTD128                       = 0xBF2
	SYS_LRINTD32                        = 0xBF0
	SYS_LRINTD64                        = 0xBF1
	SYS_LRINTF                          = 0xA9F
	SYS_LRINTL                          = 0xAA2
	SYS_LROUNDD128                      = 0xBF5
	SYS_LROUNDD32                       = 0xBF3
	SYS_LROUNDD64                       = 0xBF4
	SYS_LROUNDL                         = 0xAA5
	SYS_MBLEN                           = 0x0AF
	SYS_MBRTOC16                        = 0xD42
	SYS_MBRTOC32                        = 0xD43
	SYS_MEMSET                          = 0x0A3
	SYS_MKTIME                          = 0x0AC
	SYS_MKTIME64                        = 0xCE0
	SYS_MODFD128                        = 0xBF8
	SYS_MODFD32                         = 0xBF6
	SYS_MODFD64                         = 0xBF7
	SYS_NAN                             = 0xAA8
	SYS_NAND128                         = 0xBFB
	SYS_NAND32                          = 0xBF9
	SYS_NAND64                          = 0xBFA
	SYS_NANF                            = 0xAAA
	SYS_NANL                            = 0xAAC
	SYS_NEARBYINT                       = 0xAAE
	SYS_NEARBYINTD128                   = 0xBFE
	SYS_NEARBYINTD32                    = 0xBFC
	SYS_NEARBYINTD64                    = 0xBFD
	SYS_NEARBYINTF                      = 0xAB1
	SYS_NEARBYINTL                      = 0xAB4
	SYS_NEXTAFTERD128                   = 0xC01
	SYS_NEXTAFTERD32                    = 0xBFF
	SYS_NEXTAFTERD64                    = 0xC00
	SYS_NEXTAFTERF                      = 0xAB7
	SYS_NEXTAFTERL                      = 0xABA
	SYS_NEXTTOWARD                      = 0xABD
	SYS_NEXTTOWARDD128                  = 0xC04
	SYS_NEXTTOWARDD32                   = 0xC02
	SYS_NEXTTOWARDD64                   = 0xC03
	SYS_NEXTTOWARDF                     = 0xAC0
	SYS_NEXTTOWARDL                     = 0xAC3
	SYS_NL_LANGINFO                     = 0x0FC
	SYS_PERROR_UNLOCKED                 = 0xCBD
	SYS_POSIX_FALLOCATE                 = 0xCE8
	SYS_POSIX_MEMALIGN                  = 0xCE9
	SYS_POSIX_OPENPT                    = 0xC66
	SYS_POWD128                         = 0xC07
	SYS_POWD32                          = 0xC05
	SYS_POWD64                          = 0xC06
	SYS_PRINTF_UNLOCKED                 = 0xCBE
	SYS_PSELECT                         = 0xC67
	SYS_PTHREAD_ATTR_GETSTACK           = 0xB3E
	SYS_PTHREAD_ATTR_SETSTACK           = 0xB3F
	SYS_PTHREAD_SECURITY_APPLID_NP      = 0xCE4
	SYS_PUTS_UNLOCKED                   = 0xC7F
	SYS_PUTWCHAR_UNLOCKED               = 0xCC0
	SYS_PUTWC_UNLOCKED                  = 0xCBF
	SYS_QUANTEXPD128                    = 0xD46
	SYS_QUANTEXPD32                     = 0xD44
	SYS_QUANTEXPD64                     = 0xD45
	SYS_QUANTIZED128                    = 0xC0A
	SYS_QUANTIZED32                     = 0xC08
	SYS_QUANTIZED64                     = 0xC09
	SYS_REMAINDERD128                   = 0xC0D
	SYS_REMAINDERD32                    = 0xC0B
	SYS_REMAINDERD64                    = 0xC0C
	SYS_RESIZE_ALLOC                    = 0xCEB
	SYS_REWIND_UNLOCKED                 = 0xCC1
	SYS_RINTD128                        = 0xC13
	SYS_RINTD32                         = 0xC11
	SYS_RINTD64                         = 0xC12
	SYS_RINTF                           = 0xACB
	SYS_RINTL                           = 0xACD
	SYS_ROUND                           = 0xACF
	SYS_ROUNDD128                       = 0xC16
	SYS_ROUNDD32                        = 0xC14
	SYS_ROUNDD64                        = 0xC15
	SYS_ROUNDF                          = 0xAD2
	SYS_ROUNDL                          = 0xAD5
	SYS_SAMEQUANTUMD128                 = 0xC19
	SYS_SAMEQUANTUMD32                  = 0xC17
	SYS_SAMEQUANTUMD64                  = 0xC18
	SYS_SCALBLN                         = 0xAD8
	SYS_SCALBLND128                     = 0xC1C
	SYS_SCALBLND32                      = 0xC1A
	SYS_SCALBLND64                      = 0xC1B
	SYS_SCALBLNF                        = 0xADB
	SYS_SCALBLNL                        = 0xADE
	SYS_SCALBND128                      = 0xC1F
	SYS_SCALBND32                       = 0xC1D
	SYS_SCALBND64                       = 0xC1E
	SYS_SCALBNF                         = 0xAE3
	SYS_SCALBNL                         = 0xAE6
	SYS_SCANF_UNLOCKED                  = 0xCC2
	SYS_SCHED_YIELD                     = 0xB32
	SYS_SETENV                          = 0x0C8
	SYS_SETIPV4SOURCEFILTER             = 0xC76
	SYS_SETSOURCEFILTER                 = 0xC78
	SYS_SHM_OPEN                        = 0xC8C
	SYS_SHM_UNLINK                      = 0xC8D
	SYS_SIND128                         = 0xC22
	SYS_SIND32                          = 0xC20
	SYS_SIND64                          = 0xC21
	SYS_SINHD128                        = 0xC25
	SYS_SINHD32                         = 0xC23
	SYS_SINHD64                         = 0xC24
	SYS_SIZEOF_ALLOC                    = 0xCEA
	SYS_SOCKATMARK                      = 0xC68
	SYS_SQRTD128                        = 0xC28
	SYS_SQRTD32                         = 0xC26
	SYS_SQRTD64                         = 0xC27
	SYS_STRCHR                          = 0x0A0
	SYS_STRCSPN                         = 0x0A1
	SYS_STRERROR                        = 0x0A8
	SYS_STRERROR_R                      = 0xB33
	SYS_STRFTIME                        = 0x0B2
	SYS_STRLEN                          = 0x0A9
	SYS_STRPBRK                         = 0x0A2
	SYS_STRSPN                          = 0x0A4
	SYS_STRSTR                          = 0x0A5
	SYS_STRTOD128                       = 0xC2B
	SYS_STRTOD32                        = 0xC29
	SYS_STRTOD64                        = 0xC2A
	SYS_STRTOK                          = 0x0A6
	SYS_TAND128                         = 0xC2E
	SYS_TAND32                          = 0xC2C
	SYS_TAND64                          = 0xC2D
	SYS_TANHD128                        = 0xC31
	SYS_TANHD32                         = 0xC2F
	SYS_TANHD64                         = 0xC30
	SYS_TGAMMAD128                      = 0xC34
	SYS_TGAMMAD32                       = 0xC32
	SYS_TGAMMAD64                       = 0xC33
	SYS_TIME                            = 0x0AD
	SYS_TIME64                          = 0xCE1
	SYS_TMPFILE64                       = 0xD4D
	SYS_TMPFILE64_UNLOCKED              = 0xD4E
	SYS_TMPFILE_UNLOCKED                = 0xCFD
	SYS_TRUNCD128                       = 0xC40
	SYS_TRUNCD32                        = 0xC3E
	SYS_TRUNCD64                        = 0xC3F
	SYS_UNGETC_UNLOCKED                 = 0xCC3
	SYS_UNGETWC_UNLOCKED                = 0xCC4
	SYS_UNSETENV                        = 0xB34
	SYS_VFPRINTF_UNLOCKED               = 0xCC5
	SYS_VFSCANF_UNLOCKED                = 0xCC7
	SYS_VFWPRINTF_UNLOCKED              = 0xCC9
	SYS_VFWSCANF_UNLOCKED               = 0xCCB
	SYS_VPRINTF_UNLOCKED                = 0xCCD
	SYS_VSCANF_UNLOCKED                 = 0xCCF
	SYS_VWPRINTF_UNLOCKED               = 0xCD1
	SYS_VWSCANF_UNLOCKED                = 0xCD3
	SYS_WCSTOD128                       = 0xC43
	SYS_WCSTOD32                        = 0xC41
	SYS_WCSTOD64                        = 0xC42
	SYS_WPRINTF_UNLOCKED                = 0xCD5
	SYS_WSCANF_UNLOCKED                 = 0xCD6
	SYS__FLUSHLBF                       = 0xD68
	SYS__FLUSHLBF_UNLOCKED              = 0xD6F
	SYS___ACOSHF_H                      = 0xA54
	SYS___ACOSHL_H                      = 0xA55
	SYS___ASINHF_H                      = 0xA56
	SYS___ASINHL_H                      = 0xA57
	SYS___ATANPID128                    = 0xC6D
	SYS___ATANPID32                     = 0xC6B
	SYS___ATANPID64                     = 0xC6C
	SYS___CBRTF_H                       = 0xA58
	SYS___CBRTL_H                       = 0xA59
	SYS___CDUMP                         = 0x0C4
	SYS___CLASS                         = 0xAFA
	SYS___CLASS2                        = 0xB99
	SYS___CLASS2D128                    = 0xC99
	SYS___CLASS2D32                     = 0xC97
	SYS___CLASS2D64                     = 0xC98
	SYS___CLASS2F                       = 0xC91
	SYS___CLASS2F_B                     = 0xC93
	SYS___CLASS2F_H                     = 0xC94
	SYS___CLASS2L                       = 0xC92
	SYS___CLASS2L_B                     = 0xC95
	SYS___CLASS2L_H                     = 0xC96
	SYS___CLASS2_B                      = 0xB9A
	SYS___CLASS2_H                      = 0xB9B
	SYS___CLASS_B                       = 0xAFB
	SYS___CLASS_H                       = 0xAFC
	SYS___CLOGL_B                       = 0xA01
	SYS___CLOGL_H                       = 0xA02
	SYS___CLRENV                        = 0x0C9
	SYS___CLRMF                         = 0x0BD
	SYS___CODEPAGE_INFO                 = 0xC64
	SYS___CONJF_B                       = 0xA07
	SYS___CONJF_H                       = 0xA08
	SYS___CONJL_B                       = 0xA0A
	SYS___CONJL_H                       = 0xA0B
	SYS___CONJ_B                        = 0xA04
	SYS___CONJ_H                        = 0xA05
	SYS___COPYSIGN_B                    = 0xA5A
	SYS___COPYSIGN_H                    = 0xAF5
	SYS___COSPID128                     = 0xC70
	SYS___COSPID32                      = 0xC6E
	SYS___COSPID64                      = 0xC6F
	SYS___CPOWF_B                       = 0xA10
	SYS___CPOWF_H                       = 0xA11
	SYS___CPOWL_B                       = 0xA13
	SYS___CPOWL_H                       = 0xA14
	SYS___CPOW_B                        = 0xA0D
	SYS___CPOW_H                        = 0xA0E
	SYS___CPROJF_B                      = 0xA19
	SYS___CPROJF_H                      = 0xA1A
	SYS___CPROJL_B                      = 0xA1C
	SYS___CPROJL_H                      = 0xA1D
	SYS___CPROJ_B                       = 0xA16
	SYS___CPROJ_H                       = 0xA17
	SYS___CREALF_B                      = 0xA22
	SYS___CREALF_H                      = 0xA23
	SYS___CREALL_B                      = 0xA25
	SYS___CREALL_H                      = 0xA26
	SYS___CREAL_B                       = 0xA1F
	SYS___CREAL_H                       = 0xA20
	SYS___CSINF_B                       = 0xA2B
	SYS___CSINF_H                       = 0xA2C
	SYS___CSINHF_B                      = 0xA34
	SYS___CSINHF_H                      = 0xA35
	SYS___CSINHL_B                      = 0xA37
	SYS___CSINHL_H                      = 0xA38
	SYS___CSINH_B                       = 0xA31
	SYS___CSINH_H                       = 0xA32
	SYS___CSINL_B                       = 0xA2E
	SYS___CSINL_H                       = 0xA2F
	SYS___CSIN_B                        = 0xA28
	SYS___CSIN_H                        = 0xA29
	SYS___CSNAP                         = 0x0C5
	SYS___CSQRTF_B                      = 0xA3D
	SYS___CSQRTF_H                      = 0xA3E
	SYS___CSQRTL_B                      = 0xA40
	SYS___CSQRTL_H                      = 0xA41
	SYS___CSQRT_B                       = 0xA3A
	SYS___CSQRT_H                       = 0xA3B
	SYS___CTANF_B                       = 0xA46
	SYS___CTANF_H                       = 0xA47
	SYS___CTANHF_B                      = 0xA4F
	SYS___CTANHF_H                      = 0xA50
	SYS___CTANHL_B                      = 0xA52
	SYS___CTANHL_H                      = 0xA53
	SYS___CTANH_B                       = 0xA4C
	SYS___CTANH_H                       = 0xA4D
	SYS___CTANL_B                       = 0xA49
	SYS___CTANL_H                       = 0xA4A
	SYS___CTAN_B                        = 0xA43
	SYS___CTAN_H                        = 0xA44
	SYS___CTEST                         = 0x0C7
	SYS___CTRACE                        = 0x0C6
	SYS___D1TOP                         = 0xC9B
	SYS___D2TOP                         = 0xC9C
	SYS___D4TOP                         = 0xC9D
	SYS___DYNALL                        = 0x0C3
	SYS___DYNFRE                        = 0x0C2
	SYS___EXP2F_H                       = 0xA5E
	SYS___EXP2L_H                       = 0xA5F
	SYS___EXP2_H                        = 0xA5D
	SYS___EXPM1F_H                      = 0xA5B
	SYS___EXPM1L_H                      = 0xA5C
	SYS___FBUFSIZE                      = 0xD60
	SYS___FLBF                          = 0xD62
	SYS___FLDATA                        = 0x0C1
	SYS___FMAF_B                        = 0xA67
	SYS___FMAF_H                        = 0xA68
	SYS___FMAL_B                        = 0xA6A
	SYS___FMAL_H                        = 0xA6B
	SYS___FMAXF_B                       = 0xA70
	SYS___FMAXF_H                       = 0xA71
	SYS___FMAXL_B                       = 0xA73
	SYS___FMAXL_H                       = 0xA74
	SYS___FMAX_B                        = 0xA6D
	SYS___FMAX_H                        = 0xA6E
	SYS___FMA_B                         = 0xA64
	SYS___FMA_H                         = 0xA65
	SYS___FMINF_B                       = 0xA79
	SYS___FMINF_H                       = 0xA7A
	SYS___FMINL_B                       = 0xA7C
	SYS___FMINL_H                       = 0xA7D
	SYS___FMIN_B                        = 0xA76
	SYS___FMIN_H                        = 0xA77
	SYS___FPENDING                      = 0xD61
	SYS___FPENDING_UNLOCKED             = 0xD6C
	SYS___FPURGE                        = 0xD69
	SYS___FPURGE_UNLOCKED               = 0xD70
	SYS___FP_CAST_D                     = 0xBCB
	SYS___FREADABLE                     = 0xD63
	SYS___FREADAHEAD                    = 0xD6A
	SYS___FREADAHEAD_UNLOCKED           = 0xD71
	SYS___FREADING                      = 0xD65
	SYS___FREADING_UNLOCKED             = 0xD6D
	SYS___FSEEK2                        = 0xB3C
	SYS___FSETERR                       = 0xD6B
	SYS___FSETLOCKING                   = 0xD67
	SYS___FTCHEP                        = 0x0BF
	SYS___FTELL2                        = 0xB3B
	SYS___FUPDT                         = 0x0B5
	SYS___FWRITABLE                     = 0xD64
	SYS___FWRITING                      = 0xD66
	SYS___FWRITING_UNLOCKED             = 0xD6E
	SYS___GETCB                         = 0x0B4
	SYS___GETGRGID1                     = 0xD5B
	SYS___GETGRNAM1                     = 0xD5C
	SYS___GETTHENT                      = 0xCE5
	SYS___GETTOD                        = 0xD3E
	SYS___HYPOTF_H                      = 0xAF6
	SYS___HYPOTL_H                      = 0xAF7
	SYS___ILOGBF_B                      = 0xA7F
	SYS___ILOGBF_H                      = 0xA80
	SYS___ILOGBL_B                      = 0xA82
	SYS___ILOGBL_H                      = 0xA83
	SYS___ISBLANK_A                     = 0xB2E
	SYS___ISBLNK                        = 0x0FE
	SYS___ISWBLANK_A                    = 0xB2F
	SYS___LE_CEEGTJS                    = 0xD72
	SYS___LE_TRACEBACK                  = 0xB7A
	SYS___LGAMMAL_H                     = 0xA62
	SYS___LGAMMA_B_C99                  = 0xB39
	SYS___LGAMMA_H_C99                  = 0xB38
	SYS___LGAMMA_R_C99                  = 0xB3A
	SYS___LLRINTF_B                     = 0xA88
	SYS___LLRINTF_H                     = 0xA89
	SYS___LLRINTL_B                     = 0xA8B
	SYS___LLRINTL_H                     = 0xA8C
	SYS___LLRINT_B                      = 0xA85
	SYS___LLRINT_H                      = 0xA86
	SYS___LLROUNDF_B                    = 0xA91
	SYS___LLROUNDF_H                    = 0xA92
	SYS___LLROUNDL_B                    = 0xA94
	SYS___LLROUNDL_H                    = 0xA95
	SYS___LLROUND_B                     = 0xA8E
	SYS___LLROUND_H                     = 0xA8F
	SYS___LOCALE_CTL                    = 0xD47
	SYS___LOG1PF_H                      = 0xA60
	SYS___LOG1PL_H                      = 0xA61
	SYS___LOGBF_B                       = 0xA97
	SYS___LOGBF_H                       = 0xA98
	SYS___LOGBL_B                       = 0xA9A
	SYS___LOGBL_H                       = 0xA9B
	SYS___LOGIN_APPLID                  = 0xCE2
	SYS___LRINTF_B                      = 0xAA0
	SYS___LRINTF_H                      = 0xAA1
	SYS___LRINTL_B                      = 0xAA3
	SYS___LRINTL_H                      = 0xAA4
	SYS___LRINT_B                       = 0xA9D
	SYS___LRINT_H                       = 0xA9E
	SYS___LROUNDF_FIXUP                 = 0xB31
	SYS___LROUNDL_B                     = 0xAA6
	SYS___LROUNDL_H                     = 0xAA7
	SYS___LROUND_FIXUP                  = 0xB30
	SYS___MOSERVICES                    = 0xD3D
	SYS___MUST_STAY_CLEAN               = 0xB7C
	SYS___NANF_B                        = 0xAAB
	SYS___NANL_B                        = 0xAAD
	SYS___NAN_B                         = 0xAA9
	SYS___NEARBYINTF_B                  = 0xAB2
	SYS___NEARBYINTF_H                  = 0xAB3
	SYS___NEARBYINTL_B                  = 0xAB5
	SYS___NEARBYINTL_H                  = 0xAB6
	SYS___NEARBYINT_B                   = 0xAAF
	SYS___NEARBYINT_H                   = 0xAB0
	SYS___NEXTAFTERF_B                  = 0xAB8
	SYS___NEXTAFTERF_H                  = 0xAB9
	SYS___NEXTAFTERL_B                  = 0xABB
	SYS___NEXTAFTERL_H                  = 0xABC
	SYS___NEXTTOWARDF_B                 = 0xAC1
	SYS___NEXTTOWARDF_H                 = 0xAC2
	SYS___NEXTTOWARDL_B                 = 0xAC4
	SYS___NEXTTOWARDL_H                 = 0xAC5
	SYS___NEXTTOWARD_B                  = 0xABE
	SYS___NEXTTOWARD_H                  = 0xABF
	SYS___O_ENV                         = 0xB7D
	SYS___PASSWD_APPLID                 = 0xCE3
	SYS___PTOD1                         = 0xC9E
	SYS___PTOD2                         = 0xC9F
	SYS___PTOD4                         = 0xCA0
	SYS___REGCOMP_STD                   = 0x0EA
	SYS___REMAINDERF_H                  = 0xAC6
	SYS___REMAINDERL_H                  = 0xAC7
	SYS___REMQUOD128                    = 0xC10
	SYS___REMQUOD32                     = 0xC0E
	SYS___REMQUOD64                     = 0xC0F
	SYS___REMQUOF_H                     = 0xAC9
	SYS___REMQUOL_H                     = 0xACA
	SYS___REMQUO_H                      = 0xAC8
	SYS___RINTF_B                       = 0xACC
	SYS___RINTL_B                       = 0xACE
	SYS___ROUNDF_B                      = 0xAD3
	SYS___ROUNDF_H                      = 0xAD4
	SYS___ROUNDL_B                      = 0xAD6
	SYS___ROUNDL_H                      = 0xAD7
	SYS___ROUND_B                       = 0xAD0
	SYS___ROUND_H                       = 0xAD1
	SYS___SCALBLNF_B                    = 0xADC
	SYS___SCALBLNF_H                    = 0xADD
	SYS___SCALBLNL_B                    = 0xADF
	SYS___SCALBLNL_H                    = 0xAE0
	SYS___SCALBLN_B                     = 0xAD9
	SYS___SCALBLN_H                     = 0xADA
	SYS___SCALBNF_B                     = 0xAE4
	SYS___SCALBNF_H                     = 0xAE5
	SYS___SCALBNL_B                     = 0xAE7
	SYS___SCALBNL_H                     = 0xAE8
	SYS___SCALBN_B                      = 0xAE1
	SYS___SCALBN_H                      = 0xAE2
	SYS___SETENV                        = 0x0C8
	SYS___SINPID128                     = 0xC73
	SYS___SINPID32                      = 0xC71
	SYS___SINPID64                      = 0xC72
	SYS___SMF_RECORD2                   = 0xD48
	SYS___STATIC_REINIT                 = 0xB3D
	SYS___TGAMMAF_H_C99                 = 0xB79
	SYS___TGAMMAL_H                     = 0xAE9
	SYS___TGAMMA_H_C99                  = 0xB78
	SYS___TOCSNAME2                     = 0xC9A
	SYS_CEIL                            = 0x01F
	SYS_CHAUDIT                         = 0x1E0
	SYS_EXP                             = 0x01A
	SYS_FCHAUDIT                        = 0x1E1
	SYS_FREXP                           = 0x01D
	SYS_GETGROUPSBYNAME                 = 0x1E2
	SYS_GETPWUID                        = 0x1A0
	SYS_GETUID                          = 0x1A1
	SYS_ISATTY                          = 0x1A3
	SYS_KILL                            = 0x1A4
	SYS_LDEXP                           = 0x01E
	SYS_LINK                            = 0x1A5
	SYS_LOG10                           = 0x01C
	SYS_LSEEK                           = 0x1A6
	SYS_LSTAT                           = 0x1A7
	SYS_MKDIR                           = 0x1A8
	SYS_MKFIFO                          = 0x1A9
	SYS_MKNOD                           = 0x1AA
	SYS_MODF                            = 0x01B
	SYS_MOUNT                           = 0x1AB
	SYS_OPEN                            = 0x1AC
	SYS_OPENDIR                         = 0x1AD
	SYS_PATHCONF                        = 0x1AE
	SYS_PAUSE                           = 0x1AF
	SYS_PIPE                            = 0x1B0
	SYS_PTHREAD_ATTR_DESTROY            = 0x1E7
	SYS_PTHREAD_ATTR_GETDETACHSTATE     = 0x1EB
	SYS_PTHREAD_ATTR_GETSTACKSIZE       = 0x1E9
	SYS_PTHREAD_ATTR_GETWEIGHT_NP       = 0x1ED
	SYS_PTHREAD_ATTR_INIT               = 0x1E6
	SYS_PTHREAD_ATTR_SETDETACHSTATE     = 0x1EA
	SYS_PTHREAD_ATTR_SETSTACKSIZE       = 0x1E8
	SYS_PTHREAD_ATTR_SETWEIGHT_NP       = 0x1EC
	SYS_PTHREAD_CANCEL                  = 0x1EE
	SYS_PTHREAD_CLEANUP_POP             = 0x1F0
	SYS_PTHREAD_CLEANUP_PUSH            = 0x1EF
	SYS_PTHREAD_CONDATTR_DESTROY        = 0x1F2
	SYS_PTHREAD_CONDATTR_INIT           = 0x1F1
	SYS_PTHREAD_COND_BROADCAST          = 0x1F6
	SYS_PTHREAD_COND_DESTROY            = 0x1F4
	SYS_PTHREAD_COND_INIT               = 0x1F3
	SYS_PTHREAD_COND_SIGNAL             = 0x1F5
	SYS_PTHREAD_COND_TIMEDWAIT          = 0x1F8
	SYS_PTHREAD_COND_WAIT               = 0x1F7
	SYS_PTHREAD_CREATE                  = 0x1F9
	SYS_PTHREAD_DETACH                  = 0x1FA
	SYS_PTHREAD_EQUAL                   = 0x1FB
	SYS_PTHREAD_EXIT                    = 0x1E4
	SYS_PTHREAD_GETSPECIFIC             = 0x1FC
	SYS_PTHREAD_JOIN                    = 0x1FD
	SYS_PTHREAD_KEY_CREATE              = 0x1FE
	SYS_PTHREAD_KILL                    = 0x1E5
	SYS_PTHREAD_MUTEXATTR_INIT          = 0x1FF
	SYS_READ                            = 0x1B2
	SYS_READDIR                         = 0x1B3
	SYS_READLINK                        = 0x1B4
	SYS_REWINDDIR                       = 0x1B5
	SYS_RMDIR                           = 0x1B6
	SYS_SETEGID                         = 0x1B7
	SYS_SETEUID                         = 0x1B8
	SYS_SETGID                          = 0x1B9
	SYS_SETPGID                         = 0x1BA
	SYS_SETSID                          = 0x1BB
	SYS_SETUID                          = 0x1BC
	SYS_SIGACTION                       = 0x1BD
	SYS_SIGADDSET                       = 0x1BE
	SYS_SIGDELSET                       = 0x1BF
	SYS_SIGEMPTYSET                     = 0x1C0
	SYS_SIGFILLSET                      = 0x1C1
	SYS_SIGISMEMBER                     = 0x1C2
	SYS_SIGLONGJMP                      = 0x1C3
	SYS_SIGPENDING                      = 0x1C4
	SYS_SIGPROCMASK                     = 0x1C5
	SYS_SIGSETJMP                       = 0x1C6
	SYS_SIGSUSPEND                      = 0x1C7
	SYS_SIGWAIT                         = 0x1E3
	SYS_SLEEP                           = 0x1C8
	SYS_STAT                            = 0x1C9
	SYS_SYMLINK                         = 0x1CB
	SYS_SYSCONF                         = 0x1CC
	SYS_TCDRAIN                         = 0x1CD
	SYS_TCFLOW                          = 0x1CE
	SYS_TCFLUSH                         = 0x1CF
	SYS_TCGETATTR                       = 0x1D0
	SYS_TCGETPGRP                       = 0x1D1
	SYS_TCSENDBREAK                     = 0x1D2
	SYS_TCSETATTR                       = 0x1D3
	SYS_TCSETPGRP                       = 0x1D4
	SYS_TIMES                           = 0x1D5
	SYS_TTYNAME                         = 0x1D6
	SYS_TZSET                           = 0x1D7
	SYS_UMASK                           = 0x1D8
	SYS_UMOUNT                          = 0x1D9
	SYS_UNAME                           = 0x1DA
	SYS_UNLINK                          = 0x1DB
	SYS_UTIME                           = 0x1DC
	SYS_WAIT                            = 0x1DD
	SYS_WAITPID                         = 0x1DE
	SYS_WRITE                           = 0x1DF
	SYS_W_GETPSENT                      = 0x1B1
	SYS_W_IOCTL                         = 0x1A2
	SYS_W_STATFS                        = 0x1CA
	SYS_A64L                            = 0x2EF
	SYS_BCMP                            = 0x2B9
	SYS_BCOPY                           = 0x2BA
	SYS_BZERO                           = 0x2BB
	SYS_CATCLOSE                        = 0x2B6
	SYS_CATGETS                         = 0x2B7
	SYS_CATOPEN                         = 0x2B8
	SYS_CRYPT                           = 0x2AC
	SYS_DBM_CLEARERR                    = 0x2F7
	SYS_DBM_CLOSE                       = 0x2F8
	SYS_DBM_DELETE                      = 0x2F9
	SYS_DBM_ERROR                       = 0x2FA
	SYS_DBM_FETCH                       = 0x2FB
	SYS_DBM_FIRSTKEY                    = 0x2FC
	SYS_DBM_NEXTKEY                     = 0x2FD
	SYS_DBM_OPEN                        = 0x2FE
	SYS_DBM_STORE                       = 0x2FF
	SYS_DRAND48                         = 0x2B2
	SYS_ENCRYPT                         = 0x2AD
	SYS_ENDUTXENT                       = 0x2E1
	SYS_ERAND48                         = 0x2B3
	SYS_ERF                             = 0x02C
	SYS_ERFC                            = 0x02D
	SYS_FCHDIR                          = 0x2D9
	SYS_FFS                             = 0x2BC
	SYS_FMTMSG                          = 0x2E5
	SYS_FSTATVFS                        = 0x2B4
	SYS_FTIME                           = 0x2F5
	SYS_GAMMA                           = 0x02E
	SYS_GETDATE                         = 0x2A6
	SYS_GETPAGESIZE                     = 0x2D8
	SYS_GETTIMEOFDAY                    = 0x2F6
	SYS_GETUTXENT                       = 0x2E0
	SYS_GETUTXID                        = 0x2E2
	SYS_GETUTXLINE                      = 0x2E3
	SYS_HCREATE                         = 0x2C6
	SYS_HDESTROY                        = 0x2C7
	SYS_HSEARCH                         = 0x2C8
	SYS_HYPOT                           = 0x02B
	SYS_INDEX                           = 0x2BD
	SYS_INITSTATE                       = 0x2C2
	SYS_INSQUE                          = 0x2CF
	SYS_ISASCII                         = 0x2ED
	SYS_JRAND48                         = 0x2E6
	SYS_L64A                            = 0x2F0
	SYS_LCONG48                         = 0x2EA
	SYS_LFIND                           = 0x2C9
	SYS_LRAND48                         = 0x2E7
	SYS_LSEARCH                         = 0x2CA
	SYS_MEMCCPY                         = 0x2D4
	SYS_MRAND48                         = 0x2E8
	SYS_NRAND48                         = 0x2E9
	SYS_PCLOSE                          = 0x2D2
	SYS_POPEN                           = 0x2D1
	SYS_PUTUTXLINE                      = 0x2E4
	SYS_RANDOM                          = 0x2C4
	SYS_REMQUE                          = 0x2D0
	SYS_RINDEX                          = 0x2BE
	SYS_SEED48                          = 0x2EC
	SYS_SETKEY                          = 0x2AE
	SYS_SETSTATE                        = 0x2C3
	SYS_SETUTXENT                       = 0x2DF
	SYS_SRAND48                         = 0x2EB
	SYS_SRANDOM                         = 0x2C5
	SYS_STATVFS                         = 0x2B5
	SYS_STRCASECMP                      = 0x2BF
	SYS_STRDUP                          = 0x2C0
	SYS_STRNCASECMP                     = 0x2C1
	SYS_SWAB                            = 0x2D3
	SYS_TDELETE                         = 0x2CB
	SYS_TFIND                           = 0x2CC
	SYS_TOASCII                         = 0x2EE
	SYS_TSEARCH                         = 0x2CD
	SYS_TWALK                           = 0x2CE
	SYS_UALARM                          = 0x2F1
	SYS_USLEEP                          = 0x2F2
	SYS_WAIT3                           = 0x2A7
	SYS_WAITID                          = 0x2A8
	SYS_Y1                              = 0x02A
	SYS___ATOE                          = 0x2DB
	SYS___ATOE_L                        = 0x2DC
	SYS___CATTRM                        = 0x2A9
	SYS___CNVBLK                        = 0x2AF
	SYS___CRYTRM                        = 0x2B0
	SYS___DLGHT                         = 0x2A1
	SYS___ECRTRM                        = 0x2B1
	SYS___ETOA                          = 0x2DD
	SYS___ETOA_L                        = 0x2DE
	SYS___GDTRM                         = 0x2AA
	SYS___OCLCK                         = 0x2DA
	SYS___OPARGF                        = 0x2A2
	SYS___OPERRF                        = 0x2A5
	SYS___OPINDF                        = 0x2A4
	SYS___OPOPTF                        = 0x2A3
	SYS___RNDTRM                        = 0x2AB
	SYS___SRCTRM                        = 0x2F4
	SYS___TZONE                         = 0x2A0
	SYS___UTXTRM                        = 0x2F3
	SYS_ASIN                            = 0x03E
	SYS_ISXDIGIT                        = 0x03B
	SYS_SETLOCAL                        = 0x03A
	SYS_SETLOCALE                       = 0x03A
	SYS_SIN                             = 0x03F
	SYS_TOLOWER                         = 0x03C
	SYS_TOUPPER                         = 0x03D
	SYS_ACCEPT_AND_RECV                 = 0x4F7
	SYS_ATOL                            = 0x04E
	SYS_CHECKSCH                        = 0x4BC
	SYS_CHECKSCHENV                     = 0x4BC
	SYS_CLEARERR                        = 0x04C
	SYS_CONNECTS                        = 0x4B5
	SYS_CONNECTSERVER                   = 0x4B5
	SYS_CONNECTW                        = 0x4B4
	SYS_CONNECTWORKMGR                  = 0x4B4
	SYS_CONTINUE                        = 0x4B3
	SYS_CONTINUEWORKUNIT                = 0x4B3
	SYS_COPYSIGN                        = 0x4C2
	SYS_CREATEWO                        = 0x4B2
	SYS_CREATEWORKUNIT                  = 0x4B2
	SYS_DELETEWO                        = 0x4B9
	SYS_DELETEWORKUNIT                  = 0x4B9
	SYS_DISCONNE                        = 0x4B6
	SYS_DISCONNECTSERVER                = 0x4B6
	SYS_FEOF                            = 0x04D
	SYS_FERROR                          = 0x04A
	SYS_FINITE                          = 0x4C8
	SYS_GAMMA_R                         = 0x4E2
	SYS_JOINWORK                        = 0x4B7
	SYS_JOINWORKUNIT                    = 0x4B7
	SYS_LEAVEWOR                        = 0x4B8
	SYS_LEAVEWORKUNIT                   = 0x4B8
	SYS_LGAMMA_R                        = 0x4EB
	SYS_MATHERR                         = 0x4D0
	SYS_PERROR                          = 0x04F
	SYS_QUERYMET                        = 0x4BA
	SYS_QUERYMETRICS                    = 0x4BA
	SYS_QUERYSCH                        = 0x4BB
	SYS_QUERYSCHENV                     = 0x4BB
	SYS_REWIND                          = 0x04B
	SYS_SCALBN                          = 0x4D4
	SYS_SIGNIFIC                        = 0x4D5
	SYS_SIGNIFICAND                     = 0x4D5
	SYS___ACOSH_B                       = 0x4DA
	SYS___ACOS_B                        = 0x4D9
	SYS___ASINH_B                       = 0x4BE
	SYS___ASIN_B                        = 0x4DB
	SYS___ATAN2_B                       = 0x4DC
	SYS___ATANH_B                       = 0x4DD
	SYS___ATAN_B                        = 0x4BF
	SYS___CBRT_B                        = 0x4C0
	SYS___CEIL_B                        = 0x4C1
	SYS___COSH_B                        = 0x4DE
	SYS___COS_B                         = 0x4C3
	SYS___DGHT                          = 0x4A8
	SYS___ENVN                          = 0x4B0
	SYS___ERFC_B                        = 0x4C5
	SYS___ERF_B                         = 0x4C4
	SYS___EXPM1_B                       = 0x4C6
	SYS___EXP_B                         = 0x4DF
	SYS___FABS_B                        = 0x4C7
	SYS___FLOOR_B                       = 0x4C9
	SYS___FMOD_B                        = 0x4E0
	SYS___FP_SETMODE                    = 0x4F8
	SYS___FREXP_B                       = 0x4CA
	SYS___GAMMA_B                       = 0x4E1
	SYS___GDRR                          = 0x4A1
	SYS___HRRNO                         = 0x4A2
	SYS___HYPOT_B                       = 0x4E3
	SYS___ILOGB_B                       = 0x4CB
	SYS___ISNAN_B                       = 0x4CC
	SYS___J0_B                          = 0x4E4
	SYS___J1_B                          = 0x4E6
	SYS___JN_B                          = 0x4E8
	SYS___LDEXP_B                       = 0x4CD
	SYS___LGAMMA_B                      = 0x4EA
	SYS___LOG10_B                       = 0x4ED
	SYS___LOG1P_B                       = 0x4CE
	SYS___LOGB_B                        = 0x4CF
	SYS___LOGIN                         = 0x4F5
	SYS___LOG_B                         = 0x4EC
	SYS___MLOCKALL                      = 0x4B1
	SYS___MODF_B                        = 0x4D1
	SYS___NEXTAFTER_B                   = 0x4D2
	SYS___OPENDIR2                      = 0x4F3
	SYS___OPEN_STAT                     = 0x4F6
	SYS___OPND                          = 0x4A5
	SYS___OPPT                          = 0x4A6
	SYS___OPRG                          = 0x4A3
	SYS___OPRR                          = 0x4A4
	SYS___PID_AFFINITY                  = 0x4BD
	SYS___POW_B                         = 0x4EE
	SYS___READDIR2                      = 0x4F4
	SYS___REMAINDER_B                   = 0x4EF
	SYS___RINT_B                        = 0x4D3
	SYS___SCALB_B                       = 0x4F0
	SYS___SIGACTIONSET                  = 0x4FB
	SYS___SIGGM                         = 0x4A7
	SYS___SINH_B                        = 0x4F1
	SYS___SIN_B                         = 0x4D6
	SYS___SQRT_B                        = 0x4F2
	SYS___TANH_B                        = 0x4D8
	SYS___TAN_B                         = 0x4D7
	SYS___TRRNO                         = 0x4AF
	SYS___TZNE                          = 0x4A9
	SYS___TZZN                          = 0x4AA
	SYS___UCREATE                       = 0x4FC
	SYS___UFREE                         = 0x4FE
	SYS___UHEAPREPORT                   = 0x4FF
	SYS___UMALLOC                       = 0x4FD
	SYS___Y0_B                          = 0x4E5
	SYS___Y1_B                          = 0x4E7
	SYS___YN_B                          = 0x4E9
	SYS_ABORT                           = 0x05C
	SYS_ASCTIME_R                       = 0x5E0
	SYS_ATEXIT                          = 0x05D
	SYS_CONNECTE                        = 0x5AE
	SYS_CONNECTEXPORTIMPORT             = 0x5AE
	SYS_CTIME_R                         = 0x5E1
	SYS_DN_COMP                         = 0x5DF
	SYS_DN_EXPAND                       = 0x5DD
	SYS_DN_SKIPNAME                     = 0x5DE
	SYS_EXIT                            = 0x05A
	SYS_EXPORTWO                        = 0x5A1
	SYS_EXPORTWORKUNIT                  = 0x5A1
	SYS_EXTRACTW                        = 0x5A5
	SYS_EXTRACTWORKUNIT                 = 0x5A5
	SYS_FSEEKO                          = 0x5C9
	SYS_FTELLO                          = 0x5C8
	SYS_GETGRGID_R                      = 0x5E7
	SYS_GETGRNAM_R                      = 0x5E8
	SYS_GETLOGIN_R                      = 0x5E9
	SYS_GETPWNAM_R                      = 0x5EA
	SYS_GETPWUID_R                      = 0x5EB
	SYS_GMTIME_R                        = 0x5E2
	SYS_IMPORTWO                        = 0x5A3
	SYS_IMPORTWORKUNIT                  = 0x5A3
	SYS_INET_NTOP                       = 0x5D3
	SYS_INET_PTON                       = 0x5D4
	SYS_LLABS                           = 0x5CE
	SYS_LLDIV                           = 0x5CB
	SYS_LOCALTIME_R                     = 0x5E3
	SYS_PTHREAD_ATFORK                  = 0x5ED
	SYS_PTHREAD_ATTR_GETDETACHSTATE_U98 = 0x5FB
	SYS_PTHREAD_ATTR_GETGUARDSIZE       = 0x5EE
	SYS_PTHREAD_ATTR_GETSCHEDPARAM      = 0x5F9
	SYS_PTHREAD_ATTR_GETSTACKADDR       = 0x5EF
	SYS_PTHREAD_ATTR_SETDETACHSTATE_U98 = 0x5FC
	SYS_PTHREAD_ATTR_SETGUARDSIZE       = 0x5F0
	SYS_PTHREAD_ATTR_SETSCHEDPARAM      = 0x5FA
	SYS_PTHREAD_ATTR_SETSTACKADDR       = 0x5F1
	SYS_PTHREAD_CONDATTR_GETPSHARED     = 0x5F2
	SYS_PTHREAD_CONDATTR_SETPSHARED     = 0x5F3
	SYS_PTHREAD_DETACH_U98              = 0x5FD
	SYS_PTHREAD_GETCONCURRENCY          = 0x5F4
	SYS_PTHREAD_GETSPECIFIC_U98         = 0x5FE
	SYS_PTHREAD_KEY_DELETE              = 0x5F5
	SYS_PTHREAD_SETCANCELSTATE          = 0x5FF
	SYS_PTHREAD_SETCONCURRENCY          = 0x5F6
	SYS_PTHREAD_SIGMASK                 = 0x5F7
	SYS_QUERYENC                        = 0x5AD
	SYS_QUERYWORKUNITCLASSIFICATION     = 0x5AD
	SYS_RAISE                           = 0x05E
	SYS_RAND_R                          = 0x5E4
	SYS_READDIR_R                       = 0x5E6
	SYS_REALLOC                         = 0x05B
	SYS_RES_INIT                        = 0x5D8
	SYS_RES_MKQUERY                     = 0x5D7
	SYS_RES_QUERY                       = 0x5D9
	SYS_RES_QUERYDOMAIN                 = 0x5DC
	SYS_RES_SEARCH                      = 0x5DA
	SYS_RES_SEND                        = 0x5DB
	SYS_SETJMP                          = 0x05F
	SYS_SIGQUEUE                        = 0x5A9
	SYS_STRTOK_R                        = 0x5E5
	SYS_STRTOLL                         = 0x5B0
	SYS_STRTOULL                        = 0x5B1
	SYS_TTYNAME_R                       = 0x5EC
	SYS_UNDOEXPO                        = 0x5A2
	SYS_UNDOEXPORTWORKUNIT              = 0x5A2
	SYS_UNDOIMPO                        = 0x5A4
	SYS_UNDOIMPORTWORKUNIT              = 0x5A4
	SYS_WCSTOLL                         = 0x5CC
	SYS_WCSTOULL                        = 0x5CD
	SYS___ABORT                         = 0x05C
	SYS___CONSOLE2                      = 0x5D2
	SYS___CPL                           = 0x5A6
	SYS___DISCARDDATA                   = 0x5F8
	SYS___DSA_PREV                      = 0x5B2
	SYS___EP_FIND                       = 0x5B3
	SYS___FP_SWAPMODE                   = 0x5AF
	SYS___GETUSERID                     = 0x5AB
	SYS___GET_CPUID                     = 0x5B9
	SYS___GET_SYSTEM_SETTINGS           = 0x5BA
	SYS___IPDOMAINNAME                  = 0x5AC
	SYS___MAP_INIT                      = 0x5A7
	SYS___MAP_SERVICE                   = 0x5A8
	SYS___MOUNT                         = 0x5AA
	SYS___MSGRCV_TIMED                  = 0x5B7
	SYS___RES                           = 0x5D6
	SYS___SEMOP_TIMED                   = 0x5B8
	SYS___SERVER_THREADS_QUERY          = 0x5B4
	SYS_FPRINTF                         = 0x06D
	SYS_FSCANF                          = 0x06A
	SYS_PRINTF                          = 0x06F
	SYS_SETBUF                          = 0x06B
	SYS_SETVBUF                         = 0x06C
	SYS_SSCANF                          = 0x06E
	SYS___CATGETS_A                     = 0x6C0
	SYS___CHAUDIT_A                     = 0x6F4
	SYS___CHMOD_A                       = 0x6E8
	SYS___COLLATE_INIT_A                = 0x6AC
	SYS___CREAT_A                       = 0x6F6
	SYS___CTYPE_INIT_A                  = 0x6AF
	SYS___DLLLOAD_A                     = 0x6DF
	SYS___DLLQUERYFN_A                  = 0x6E0
	SYS___DLLQUERYVAR_A                 = 0x6E1
	SYS___E2A_L                         = 0x6E3
	SYS___EXECLE_A                      = 0x6A0
	SYS___EXECLP_A                      = 0x6A4
	SYS___EXECVE_A                      = 0x6C1
	SYS___EXECVP_A                      = 0x6C2
	SYS___EXECV_A                       = 0x6B1
	SYS___FPRINTF_A                     = 0x6FA
	SYS___GETADDRINFO_A                 = 0x6BF
	SYS___GETNAMEINFO_A                 = 0x6C4
	SYS___GET_WCTYPE_STD_A              = 0x6AE
	SYS___ICONV_OPEN_A                  = 0x6DE
	SYS___IF_INDEXTONAME_A              = 0x6DC
	SYS___IF_NAMETOINDEX_A              = 0x6DB
	SYS___ISWCTYPE_A                    = 0x6B0
	SYS___IS_WCTYPE_STD_A               = 0x6B2
	SYS___LOCALECONV_A                  = 0x6B8
	SYS___LOCALECONV_STD_A              = 0x6B9
	SYS___LOCALE_INIT_A                 = 0x6B7
	SYS___LSTAT_A                       = 0x6EE
	SYS___LSTAT_O_A                     = 0x6EF
	SYS___MKDIR_A                       = 0x6E9
	SYS___MKFIFO_A                      = 0x6EC
	SYS___MKNOD_A                       = 0x6F0
	SYS___MONETARY_INIT_A               = 0x6BC
	SYS___MOUNT_A                       = 0x6F1
	SYS___NL_CSINFO_A                   = 0x6D6
	SYS___NL_LANGINFO_A                 = 0x6BA
	SYS___NL_LNAGINFO_STD_A             = 0x6BB
	SYS___NL_MONINFO_A                  = 0x6D7
	SYS___NL_NUMINFO_A                  = 0x6D8
	SYS___NL_RESPINFO_A                 = 0x6D9
	SYS___NL_TIMINFO_A                  = 0x6DA
	SYS___NUMERIC_INIT_A                = 0x6C6
	SYS___OPEN_A                        = 0x6F7
	SYS___PRINTF_A                      = 0x6DD
	SYS___RESP_INIT_A                   = 0x6C7
	SYS___RPMATCH_A                     = 0x6C8
	SYS___RPMATCH_C_A                   = 0x6C9
	SYS___RPMATCH_STD_A                 = 0x6CA
	SYS___SETLOCALE_A                   = 0x6F9
	SYS___SPAWNP_A                      = 0x6C5
	SYS___SPAWN_A                       = 0x6C3
	SYS___SPRINTF_A                     = 0x6FB
	SYS___STAT_A                        = 0x6EA
	SYS___STAT_O_A                      = 0x6EB
	SYS___STRCOLL_STD_A                 = 0x6A1
	SYS___STRFMON_A                     = 0x6BD
	SYS___STRFMON_STD_A                 = 0x6BE
	SYS___STRFTIME_A                    = 0x6CC
	SYS___STRFTIME_STD_A                = 0x6CD
	SYS___STRPTIME_A                    = 0x6CE
	SYS___STRPTIME_STD_A                = 0x6CF
	SYS___STRXFRM_A                     = 0x6A2
	SYS___STRXFRM_C_A                   = 0x6A3
	SYS___STRXFRM_STD_A                 = 0x6A5
	SYS___SYNTAX_INIT_A                 = 0x6D4
	SYS___TIME_INIT_A                   = 0x6CB
	SYS___TOD_INIT_A                    = 0x6D5
	SYS___TOWLOWER_A                    = 0x6B3
	SYS___TOWLOWER_STD_A                = 0x6B4
	SYS___TOWUPPER_A                    = 0x6B5
	SYS___TOWUPPER_STD_A                = 0x6B6
	SYS___UMOUNT_A                      = 0x6F2
	SYS___VFPRINTF_A                    = 0x6FC
	SYS___VPRINTF_A                     = 0x6FD
	SYS___VSPRINTF_A                    = 0x6FE
	SYS___VSWPRINTF_A                   = 0x6FF
	SYS___WCSCOLL_A                     = 0x6A6
	SYS___WCSCOLL_C_A                   = 0x6A7
	SYS___WCSCOLL_STD_A                 = 0x6A8
	SYS___WCSFTIME_A                    = 0x6D0
	SYS___WCSFTIME_STD_A                = 0x6D1
	SYS___WCSXFRM_A                     = 0x6A9
	SYS___WCSXFRM_C_A                   = 0x6AA
	SYS___WCSXFRM_STD_A                 = 0x6AB
	SYS___WCTYPE_A                      = 0x6AD
	SYS___W_GETMNTENT_A                 = 0x6F5
	SYS_____CCSIDTYPE_A                 = 0x6E6
	SYS_____CHATTR_A                    = 0x6E2
	SYS_____CSNAMETYPE_A                = 0x6E7
	SYS_____OPEN_STAT_A                 = 0x6ED
	SYS_____SPAWN2_A                    = 0x6D2
	SYS_____SPAWNP2_A                   = 0x6D3
	SYS_____TOCCSID_A                   = 0x6E4
	SYS_____TOCSNAME_A                  = 0x6E5
	SYS_ACL_FREE                        = 0x7FF
	SYS_ACL_INIT                        = 0x7FE
	SYS_FWIDE                           = 0x7DF
	SYS_FWPRINTF                        = 0x7D1
	SYS_FWRITE                          = 0x07E
	SYS_FWSCANF                         = 0x7D5
	SYS_GETCHAR                         = 0x07B
	SYS_GETS                            = 0x07C
	SYS_M_CREATE_LAYOUT                 = 0x7C9
	SYS_M_DESTROY_LAYOUT                = 0x7CA
	SYS_M_GETVALUES_LAYOUT              = 0x7CB
	SYS_M_SETVALUES_LAYOUT              = 0x7CC
	SYS_M_TRANSFORM_LAYOUT              = 0x7CD
	SYS_M_WTRANSFORM_LAYOUT             = 0x7CE
	SYS_PREAD                           = 0x7C7
	SYS_PUTC                            = 0x07D
	SYS_PUTCHAR                         = 0x07A
	SYS_PUTS                            = 0x07F
	SYS_PWRITE                          = 0x7C8
	SYS_TOWCTRAN                        = 0x7D8
	SYS_TOWCTRANS                       = 0x7D8
	SYS_UNATEXIT                        = 0x7B5
	SYS_VFWPRINT                        = 0x7D3
	SYS_VFWPRINTF                       = 0x7D3
	SYS_VWPRINTF                        = 0x7D4
	SYS_WCTRANS                         = 0x7D7
	SYS_WPRINTF                         = 0x7D2
	SYS_WSCANF                          = 0x7D6
	SYS___ASCTIME_R_A                   = 0x7A1
	SYS___BASENAME_A                    = 0x7DC
	SYS___BTOWC_A                       = 0x7E4
	SYS___CDUMP_A                       = 0x7B7
	SYS___CEE3DMP_A                     = 0x7B6
	SYS___CEILF_H                       = 0x7F4
	SYS___CEILL_H                       = 0x7F5
	SYS___CEIL_H                        = 0x7EA
	SYS___CRYPT_A                       = 0x7BE
	SYS___CSNAP_A                       = 0x7B8
	SYS___CTEST_A                       = 0x7B9
	SYS___CTIME_R_A                     = 0x7A2
	SYS___CTRACE_A                      = 0x7BA
	SYS___DBM_OPEN_A                    = 0x7E6
	SYS___DIRNAME_A                     = 0x7DD
	SYS___FABSF_H                       = 0x7FA
	SYS___FABSL_H                       = 0x7FB
	SYS___FABS_H                        = 0x7ED
	SYS___FGETWC_A                      = 0x7AA
	SYS___FGETWS_A                      = 0x7AD
	SYS___FLOORF_H                      = 0x7F6
	SYS___FLOORL_H                      = 0x7F7
	SYS___FLOOR_H                       = 0x7EB
	SYS___FPUTWC_A                      = 0x7A5
	SYS___FPUTWS_A                      = 0x7A8
	SYS___GETTIMEOFDAY_A                = 0x7AE
	SYS___GETWCHAR_A                    = 0x7AC
	SYS___GETWC_A                       = 0x7AB
	SYS___GLOB_A                        = 0x7DE
	SYS___GMTIME_A                      = 0x7AF
	SYS___GMTIME_R_A                    = 0x7B0
	SYS___INET_PTON_A                   = 0x7BC
	SYS___J0_H                          = 0x7EE
	SYS___J1_H                          = 0x7EF
	SYS___JN_H                          = 0x7F0
	SYS___LOCALTIME_A                   = 0x7B1
	SYS___LOCALTIME_R_A                 = 0x7B2
	SYS___MALLOC24                      = 0x7FC
	SYS___MALLOC31                      = 0x7FD
	SYS___MKTIME_A                      = 0x7B3
	SYS___MODFF_H                       = 0x7F8
	SYS___MODFL_H                       = 0x7F9
	SYS___MODF_H                        = 0x7EC
	SYS___OPENDIR_A                     = 0x7C2
	SYS___OSNAME                        = 0x7E0
	SYS___PUTWCHAR_A                    = 0x7A7
	SYS___PUTWC_A                       = 0x7A6
	SYS___READDIR_A                     = 0x7C3
	SYS___STRTOLL_A                     = 0x7A3
	SYS___STRTOULL_A                    = 0x7A4
	SYS___SYSLOG_A                      = 0x7BD
	SYS___TZZNA                         = 0x7B4
	SYS___UNGETWC_A                     = 0x7A9
	SYS___UTIME_A                       = 0x7A0
	SYS___VFPRINTF2_A                   = 0x7E7
	SYS___VPRINTF2_A                    = 0x7E8
	SYS___VSPRINTF2_A                   = 0x7E9
	SYS___VSWPRNTF2_A                   = 0x7BB
	SYS___WCSTOD_A                      = 0x7D9
	SYS___WCSTOL_A                      = 0x7DA
	SYS___WCSTOUL_A                     = 0x7DB
	SYS___WCTOB_A                       = 0x7E5
	SYS___Y0_H                          = 0x7F1
	SYS___Y1_H                          = 0x7F2
	SYS___YN_H                          = 0x7F3
	SYS_____OPENDIR2_A                  = 0x7BF
	SYS_____OSNAME_A                    = 0x7E1
	SYS_____READDIR2_A                  = 0x7C0
	SYS_DLCLOSE                         = 0x8DF
	SYS_DLERROR                         = 0x8E0
	SYS_DLOPEN                          = 0x8DD
	SYS_DLSYM                           = 0x8DE
	SYS_FLOCKFILE                       = 0x8D3
	SYS_FTRYLOCKFILE                    = 0x8D4
	SYS_FUNLOCKFILE                     = 0x8D5
	SYS_GETCHAR_UNLOCKED                = 0x8D7
	SYS_GETC_UNLOCKED                   = 0x8D6
	SYS_PUTCHAR_UNLOCKED                = 0x8D9
	SYS_PUTC_UNLOCKED                   = 0x8D8
	SYS_SNPRINTF                        = 0x8DA
	SYS_VSNPRINTF                       = 0x8DB
	SYS_WCSCSPN                         = 0x08B
	SYS_WCSLEN                          = 0x08C
	SYS_WCSNCAT                         = 0x08D
	SYS_WCSNCMP                         = 0x08A
	SYS_WCSNCPY                         = 0x08F
	SYS_WCSSPN                          = 0x08E
	SYS___ABSF_H                        = 0x8E7
	SYS___ABSL_H                        = 0x8E8
	SYS___ABS_H                         = 0x8E6
	SYS___ACOSF_H                       = 0x8EA
	SYS___ACOSH_H                       = 0x8EC
	SYS___ACOSL_H                       = 0x8EB
	SYS___ACOS_H                        = 0x8E9
	SYS___ASINF_H                       = 0x8EE
	SYS___ASINH_H                       = 0x8F0
	SYS___ASINL_H                       = 0x8EF
	SYS___ASIN_H                        = 0x8ED
	SYS___ATAN2F_H                      = 0x8F8
	SYS___ATAN2L_H                      = 0x8F9
	SYS___ATAN2_H                       = 0x8F7
	SYS___ATANF_H                       = 0x8F2
	SYS___ATANHF_H                      = 0x8F5
	SYS___ATANHL_H                      = 0x8F6
	SYS___ATANH_H                       = 0x8F4
	SYS___ATANL_H                       = 0x8F3
	SYS___ATAN_H                        = 0x8F1
	SYS___CBRT_H                        = 0x8FA
	SYS___COPYSIGNF_H                   = 0x8FB
	SYS___COPYSIGNL_H                   = 0x8FC
	SYS___COSF_H                        = 0x8FE
	SYS___COSL_H                        = 0x8FF
	SYS___COS_H                         = 0x8FD
	SYS___DLERROR_A                     = 0x8D2
	SYS___DLOPEN_A                      = 0x8D0
	SYS___DLSYM_A                       = 0x8D1
	SYS___GETUTXENT_A                   = 0x8C6
	SYS___GETUTXID_A                    = 0x8C7
	SYS___GETUTXLINE_A                  = 0x8C8
	SYS___ITOA                          = 0x8AA
	SYS___ITOA_A                        = 0x8B0
	SYS___LE_CONDITION_TOKEN_BUILD      = 0x8A5
	SYS___LE_MSG_ADD_INSERT             = 0x8A6
	SYS___LE_MSG_GET                    = 0x8A7
	SYS___LE_MSG_GET_AND_WRITE          = 0x8A8
	SYS___LE_MSG_WRITE                  = 0x8A9
	SYS___LLTOA                         = 0x8AE
	SYS___LLTOA_A                       = 0x8B4
	SYS___LTOA                          = 0x8AC
	SYS___LTOA_A                        = 0x8B2
	SYS___PUTCHAR_UNLOCKED_A            = 0x8CC
	SYS___PUTC_UNLOCKED_A               = 0x8CB
	SYS___PUTUTXLINE_A                  = 0x8C9
	SYS___RESET_EXCEPTION_HANDLER       = 0x8E3
	SYS___REXEC_A                       = 0x8C4
	SYS___REXEC_AF_A                    = 0x8C5
	SYS___SET_EXCEPTION_HANDLER         = 0x8E2
	SYS___SNPRINTF_A                    = 0x8CD
	SYS___SUPERKILL                     = 0x8A4
	SYS___TCGETATTR_A                   = 0x8A1
	SYS___TCSETATTR_A                   = 0x8A2
	SYS___ULLTOA                        = 0x8AF
	SYS___ULLTOA_A                      = 0x8B5
	SYS___ULTOA                         = 0x8AD
	SYS___ULTOA_A                       = 0x8B3
	SYS___UTOA                          = 0x8AB
	SYS___UTOA_A                        = 0x8B1
	SYS___VHM_EVENT                     = 0x8E4
	SYS___VSNPRINTF_A                   = 0x8CE
	SYS_____GETENV_A                    = 0x8C3
	SYS_____UTMPXNAME_A                 = 0x8CA
	SYS_CACOSH                          = 0x9A0
	SYS_CACOSHF                         = 0x9A3
	SYS_CACOSHL                         = 0x9A6
	SYS_CARG                            = 0x9A9
	SYS_CARGF                           = 0x9AC
	SYS_CARGL                           = 0x9AF
	SYS_CASIN                           = 0x9B2
	SYS_CASINF                          = 0x9B5
	SYS_CASINH                          = 0x9BB
	SYS_CASINHF                         = 0x9BE
	SYS_CASINHL                         = 0x9C1
	SYS_CASINL                          = 0x9B8
	SYS_CATAN                           = 0x9C4
	SYS_CATANF                          = 0x9C7
	SYS_CATANH                          = 0x9CD
	SYS_CATANHF                         = 0x9D0
	SYS_CATANHL                         = 0x9D3
	SYS_CATANL                          = 0x9CA
	SYS_CCOS                            = 0x9D6
	SYS_CCOSF                           = 0x9D9
	SYS_CCOSH                           = 0x9DF
	SYS_CCOSHF                          = 0x9E2
	SYS_CCOSHL                          = 0x9E5
	SYS_CCOSL                           = 0x9DC
	SYS_CEXP                            = 0x9E8
	SYS_CEXPF                           = 0x9EB
	SYS_CEXPL                           = 0x9EE
	SYS_CIMAG                           = 0x9F1
	SYS_CIMAGF                          = 0x9F4
	SYS_CIMAGL                          = 0x9F7
	SYS_CLOGF                           = 0x9FD
	SYS_MEMCHR                          = 0x09B
	SYS_MEMCMP                          = 0x09A
	SYS_STRCOLL                         = 0x09C
	SYS_STRNCMP                         = 0x09D
	SYS_STRRCHR                         = 0x09F
	SYS_STRXFRM                         = 0x09E
	SYS___CACOSHF_B                     = 0x9A4
	SYS___CACOSHF_H                     = 0x9A5
	SYS___CACOSHL_B                     = 0x9A7
	SYS___CACOSHL_H                     = 0x9A8
	SYS___CACOSH_B                      = 0x9A1
	SYS___CACOSH_H                      = 0x9A2
	SYS___CARGF_B                       = 0x9AD
	SYS___CARGF_H                       = 0x9AE
	SYS___CARGL_B                       = 0x9B0
	SYS___CARGL_H                       = 0x9B1
	SYS___CARG_B                        = 0x9AA
	SYS___CARG_H                        = 0x9AB
	SYS___CASINF_B                      = 0x9B6
	SYS___CASINF_H                      = 0x9B7
	SYS___CASINHF_B                     = 0x9BF
	SYS___CASINHF_H                     = 0x9C0
	SYS___CASINHL_B                     = 0x9C2
	SYS___CASINHL_H                     = 0x9C3
	SYS___CASINH_B                      = 0x9BC
	SYS___CASINH_H                      = 0x9BD
	SYS___CASINL_B                      = 0x9B9
	SYS___CASINL_H                      = 0x9BA
	SYS___CASIN_B                       = 0x9B3
	SYS___CASIN_H                       = 0x9B4
	SYS___CATANF_B                      = 0x9C8
	SYS___CATANF_H                      = 0x9C9
	SYS___CATANHF_B                     = 0x9D1
	SYS___CATANHF_H                     = 0x9D2
	SYS___CATANHL_B                     = 0x9D4
	SYS___CATANHL_H                     = 0x9D5
	SYS___CATANH_B                      = 0x9CE
	SYS___CATANH_H                      = 0x9CF
	SYS___CATANL_B                      = 0x9CB
	SYS___CATANL_H                      = 0x9CC
	SYS___CATAN_B                       = 0x9C5
	SYS___CATAN_H                       = 0x9C6
	SYS___CCOSF_B                       = 0x9DA
	SYS___CCOSF_H                       = 0x9DB
	SYS___CCOSHF_B                      = 0x9E3
	SYS___CCOSHF_H                      = 0x9E4
	SYS___CCOSHL_B                      = 0x9E6
	SYS___CCOSHL_H                      = 0x9E7
	SYS___CCOSH_B                       = 0x9E0
	SYS___CCOSH_H                       = 0x9E1
	SYS___CCOSL_B                       = 0x9DD
	SYS___CCOSL_H                       = 0x9DE
	SYS___CCOS_B                        = 0x9D7
	SYS___CCOS_H                        = 0x9D8
	SYS___CEXPF_B                       = 0x9EC
	SYS___CEXPF_H                       = 0x9ED
	SYS___CEXPL_B                       = 0x9EF
	SYS___CEXPL_H                       = 0x9F0
	SYS___CEXP_B                        = 0x9E9
	SYS___CEXP_H                        = 0x9EA
	SYS___CIMAGF_B                      = 0x9F5
	SYS___CIMAGF_H                      = 0x9F6
	SYS___CIMAGL_B                      = 0x9F8
	SYS___CIMAGL_H                      = 0x9F9
	SYS___CIMAG_B                       = 0x9F2
	SYS___CIMAG_H                       = 0x9F3
	SYS___CLOG                          = 0x9FA
	SYS___CLOGF_B                       = 0x9FE
	SYS___CLOGF_H                       = 0x9FF
	SYS___CLOG_B                        = 0x9FB
	SYS___CLOG_H                        = 0x9FC
	SYS_ISWCTYPE                        = 0x10C
	SYS_ISWXDIGI                        = 0x10A
	SYS_ISWXDIGIT                       = 0x10A
	SYS_MBSINIT                         = 0x10F
	SYS_TOWLOWER                        = 0x10D
	SYS_TOWUPPER                        = 0x10E
	SYS_WCTYPE                          = 0x10B
	SYS_WCSSTR                          = 0x11B
	SYS___RPMTCH                        = 0x11A
	SYS_WCSTOD                          = 0x12E
	SYS_WCSTOK                          = 0x12C
	SYS_WCSTOL                          = 0x12D
	SYS_WCSTOUL                         = 0x12F
	SYS_FGETWC                          = 0x13C
	SYS_FGETWS                          = 0x13D
	SYS_FPUTWC                          = 0x13E
	SYS_FPUTWS                          = 0x13F
	SYS_REGERROR                        = 0x13B
	SYS_REGFREE                         = 0x13A
	SYS_COLLEQUIV                       = 0x14F
	SYS_COLLTOSTR                       = 0x14E
	SYS_ISMCCOLLEL                      = 0x14C
	SYS_STRTOCOLL                       = 0x14D
	SYS_DLLFREE                         = 0x16F
	SYS_DLLQUERYFN                      = 0x16D
	SYS_DLLQUERYVAR                     = 0x16E
	SYS_GETMCCOLL                       = 0x16A
	SYS_GETWMCCOLL                      = 0x16B
	SYS___ERR2AD                        = 0x16C
	SYS_CFSETOSPEED                     = 0x17A
	SYS_CHDIR                           = 0x17B
	SYS_CHMOD                           = 0x17C
	SYS_CHOWN                           = 0x17D
	SYS_CLOSE                           = 0x17E
	SYS_CLOSEDIR                        = 0x17F
	SYS_LOG                             = 0x017
	SYS_COSH                            = 0x018
	SYS_FCHMOD                          = 0x18A
	SYS_FCHOWN                          = 0x18B
	SYS_FCNTL                           = 0x18C
	SYS_FILENO                          = 0x18D
	SYS_FORK                            = 0x18E
	SYS_FPATHCONF                       = 0x18F
	SYS_GETLOGIN                        = 0x19A
	SYS_GETPGRP                         = 0x19C
	SYS_GETPID                          = 0x19D
	SYS_GETPPID                         = 0x19E
	SYS_GETPWNAM                        = 0x19F
	SYS_TANH                            = 0x019
	SYS_W_GETMNTENT                     = 0x19B
	SYS_POW                             = 0x020
	SYS_PTHREAD_SELF                    = 0x20A
	SYS_PTHREAD_SETINTR                 = 0x20B
	SYS_PTHREAD_SETINTRTYPE             = 0x20C
	SYS_PTHREAD_SETSPECIFIC             = 0x20D
	SYS_PTHREAD_TESTINTR                = 0x20E
	SYS_PTHREAD_YIELD                   = 0x20F
	SYS_SQRT                            = 0x021
	SYS_FLOOR                           = 0x022
	SYS_J1                              = 0x023
	SYS_WCSPBRK                         = 0x23F
	SYS_BSEARCH                         = 0x24C
	SYS_FABS                            = 0x024
	SYS_GETENV                          = 0x24A
	SYS_LDIV                            = 0x24D
	SYS_SYSTEM                          = 0x24B
	SYS_FMOD                            = 0x025
	SYS___RETHROW                       = 0x25F
	SYS___THROW                         = 0x25E
	SYS_J0                              = 0x026
	SYS_PUTENV                          = 0x26A
	SYS___GETENV                        = 0x26F
	SYS_SEMCTL                          = 0x27A
	SYS_SEMGET                          = 0x27B
	SYS_SEMOP                           = 0x27C
	SYS_SHMAT                           = 0x27D
	SYS_SHMCTL                          = 0x27E
	SYS_SHMDT                           = 0x27F
	SYS_YN                              = 0x027
	SYS_JN                              = 0x028
	SYS_SIGALTSTACK                     = 0x28A
	SYS_SIGHOLD                         = 0x28B
	SYS_SIGIGNORE                       = 0x28C
	SYS_SIGINTERRUPT                    = 0x28D
	SYS_SIGPAUSE                        = 0x28E
	SYS_SIGRELSE                        = 0x28F
	SYS_GETOPT                          = 0x29A
	SYS_GETSUBOPT                       = 0x29D
	SYS_LCHOWN                          = 0x29B
	SYS_SETPGRP                         = 0x29E
	SYS_TRUNCATE                        = 0x29C
	SYS_Y0                              = 0x029
	SYS___GDERR                         = 0x29F
	SYS_ISALPHA                         = 0x030
	SYS_VFORK                           = 0x30F
	SYS__LONGJMP                        = 0x30D
	SYS__SETJMP                         = 0x30E
	SYS_GLOB                            = 0x31A
	SYS_GLOBFREE                        = 0x31B
	SYS_ISALNUM                         = 0x031
	SYS_PUTW                            = 0x31C
	SYS_SEEKDIR                         = 0x31D
	SYS_TELLDIR                         = 0x31E
	SYS_TEMPNAM                         = 0x31F
	SYS_GETTIMEOFDAY_R                  = 0x32E
	SYS_ISLOWER                         = 0x032
	SYS_LGAMMA                          = 0x32C
	SYS_REMAINDER                       = 0x32A
	SYS_SCALB                           = 0x32B
	SYS_SYNC                            = 0x32F
	SYS_TTYSLOT                         = 0x32D
	SYS_ENDPROTOENT                     = 0x33A
	SYS_ENDSERVENT                      = 0x33B
	SYS_GETHOSTBYADDR                   = 0x33D
	SYS_GETHOSTBYADDR_R                 = 0x33C
	SYS_GETHOSTBYNAME                   = 0x33F
	SYS_GETHOSTBYNAME_R                 = 0x33E
	SYS_ISCNTRL                         = 0x033
	SYS_GETSERVBYNAME                   = 0x34A
	SYS_GETSERVBYPORT                   = 0x34B
	SYS_GETSERVENT                      = 0x34C
	SYS_GETSOCKNAME                     = 0x34D
	SYS_GETSOCKOPT                      = 0x34E
	SYS_INET_ADDR                       = 0x34F
	SYS_ISDIGIT                         = 0x034
	SYS_ISGRAPH                         = 0x035
	SYS_SELECT                          = 0x35B
	SYS_SELECTEX                        = 0x35C
	SYS_SEND                            = 0x35D
	SYS_SENDTO                          = 0x35F
	SYS_CHROOT                          = 0x36A
	SYS_ISNAN                           = 0x36D
	SYS_ISUPPER                         = 0x036
	SYS_ULIMIT                          = 0x36C
	SYS_UTIMES                          = 0x36E
	SYS_W_STATVFS                       = 0x36B
	SYS___H_ERRNO                       = 0x36F
	SYS_GRANTPT                         = 0x37A
	SYS_ISPRINT                         = 0x037
	SYS_TCGETSID                        = 0x37C
	SYS_UNLOCKPT                        = 0x37B
	SYS___TCGETCP                       = 0x37D
	SYS___TCSETCP                       = 0x37E
	SYS___TCSETTABLES                   = 0x37F
	SYS_ISPUNCT                         = 0x038
	SYS_NLIST                           = 0x38C
	SYS___IPDBCS                        = 0x38D
	SYS___IPDSPX                        = 0x38E
	SYS___IPMSGC                        = 0x38F
	SYS___STHOSTENT                     = 0x38B
	SYS___STSERVENT                     = 0x38A
	SYS_ISSPACE                         = 0x039
	SYS_COS                             = 0x040
	SYS_T_ALLOC                         = 0x40A
	SYS_T_BIND                          = 0x40B
	SYS_T_CLOSE                         = 0x40C
	SYS_T_CONNECT                       = 0x40D
	SYS_T_ERROR                         = 0x40E
	SYS_T_FREE                          = 0x40F
	SYS_TAN                             = 0x041
	SYS_T_RCVREL                        = 0x41A
	SYS_T_RCVUDATA                      = 0x41B
	SYS_T_RCVUDERR                      = 0x41C
	SYS_T_SND                           = 0x41D
	SYS_T_SNDDIS                        = 0x41E
	SYS_T_SNDREL                        = 0x41F
	SYS_GETPMSG                         = 0x42A
	SYS_ISASTREAM                       = 0x42B
	SYS_PUTMSG                          = 0x42C
	SYS_PUTPMSG                         = 0x42D
	SYS_SINH                            = 0x042
	SYS___ISPOSIXON                     = 0x42E
	SYS___OPENMVSREL                    = 0x42F
	SYS_ACOS                            = 0x043
	SYS_ATAN                            = 0x044
	SYS_ATAN2                           = 0x045
	SYS_FTELL                           = 0x046
	SYS_FGETPOS                         = 0x047
	SYS_SOCK_DEBUG                      = 0x47A
	SYS_SOCK_DO_TESTSTOR                = 0x47D
	SYS_TAKESOCKET                      = 0x47E
	SYS___SERVER_INIT                   = 0x47F
	SYS_FSEEK                           = 0x048
	SYS___IPHOST                        = 0x48B
	SYS___IPNODE                        = 0x48C
	SYS___SERVER_CLASSIFY_CREATE        = 0x48D
	SYS___SERVER_CLASSIFY_DESTROY       = 0x48E
	SYS___SERVER_CLASSIFY_RESET         = 0x48F
	SYS___SMF_RECORD                    = 0x48A
	SYS_FSETPOS                         = 0x049
	SYS___FNWSA                         = 0x49B
	SYS___SPAWN2                        = 0x49D
	SYS___SPAWNP2                       = 0x49E
	SYS_ATOF                            = 0x050
	SYS_PTHREAD_MUTEXATTR_GETPSHARED    = 0x50A
	SYS_PTHREAD_MUTEXATTR_SETPSHARED    = 0x50B
	SYS_PTHREAD_RWLOCK_DESTROY          = 0x50C
	SYS_PTHREAD_RWLOCK_INIT             = 0x50D
	SYS_PTHREAD_RWLOCK_RDLOCK           = 0x50E
	SYS_PTHREAD_RWLOCK_TRYRDLOCK        = 0x50F
	SYS_ATOI                            = 0x051
	SYS___FP_CLASS                      = 0x51D
	SYS___FP_CLR_FLAG                   = 0x51A
	SYS___FP_FINITE                     = 0x51E
	SYS___FP_ISNAN                      = 0x51F
	SYS___FP_RAISE_XCP                  = 0x51C
	SYS___FP_READ_FLAG                  = 0x51B
	SYS_RAND                            = 0x052
	SYS_SIGTIMEDWAIT                    = 0x52D
	SYS_SIGWAITINFO                     = 0x52E
	SYS___CHKBFP                        = 0x52F
	SYS___FPC_RS                        = 0x52C
	SYS___FPC_RW                        = 0x52A
	SYS___FPC_SM                        = 0x52B
	SYS_STRTOD                          = 0x053
	SYS_STRTOL                          = 0x054
	SYS_STRTOUL                         = 0x055
	SYS_MALLOC                          = 0x056
	SYS_SRAND                           = 0x057
	SYS_CALLOC                          = 0x058
	SYS_FREE                            = 0x059
	SYS___OSENV                         = 0x59F
	SYS___W_PIOCTL                      = 0x59E
	SYS_LONGJMP                         = 0x060
	SYS___FLOORF_B                      = 0x60A
	SYS___FLOORL_B                      = 0x60B
	SYS___FREXPF_B                      = 0x60C
	SYS___FREXPL_B                      = 0x60D
	SYS___LDEXPF_B                      = 0x60E
	SYS___LDEXPL_B                      = 0x60F
	SYS_SIGNAL                          = 0x061
	SYS___ATAN2F_B                      = 0x61A
	SYS___ATAN2L_B                      = 0x61B
	SYS___COSHF_B                       = 0x61C
	SYS___COSHL_B                       = 0x61D
	SYS___EXPF_B                        = 0x61E
	SYS___EXPL_B                        = 0x61F
	SYS_TMPNAM                          = 0x062
	SYS___ABSF_B                        = 0x62A
	SYS___ABSL_B                        = 0x62C
	SYS___ABS_B                         = 0x62B
	SYS___FMODF_B                       = 0x62D
	SYS___FMODL_B                       = 0x62E
	SYS___MODFF_B                       = 0x62F
	SYS_ATANL                           = 0x63A
	SYS_CEILF                           = 0x63B
	SYS_CEILL                           = 0x63C
	SYS_COSF                            = 0x63D
	SYS_COSHF                           = 0x63F
	SYS_COSL                            = 0x63E
	SYS_REMOVE                          = 0x063
	SYS_POWL                            = 0x64A
	SYS_RENAME                          = 0x064
	SYS_SINF                            = 0x64B
	SYS_SINHF                           = 0x64F
	SYS_SINL                            = 0x64C
	SYS_SQRTF                           = 0x64D
	SYS_SQRTL                           = 0x64E
	SYS_BTOWC                           = 0x65F
	SYS_FREXPL                          = 0x65A
	SYS_LDEXPF                          = 0x65B
	SYS_LDEXPL                          = 0x65C
	SYS_MODFF                           = 0x65D
	SYS_MODFL                           = 0x65E
	SYS_TMPFILE                         = 0x065
	SYS_FREOPEN                         = 0x066
	SYS___CHARMAP_INIT_A                = 0x66E
	SYS___GETHOSTBYADDR_R_A             = 0x66C
	SYS___GETHOSTBYNAME_A               = 0x66A
	SYS___GETHOSTBYNAME_R_A             = 0x66D
	SYS___MBLEN_A                       = 0x66F
	SYS___RES_INIT_A                    = 0x66B
	SYS_FCLOSE                          = 0x067
	SYS___GETGRGID_R_A                  = 0x67D
	SYS___WCSTOMBS_A                    = 0x67A
	SYS___WCSTOMBS_STD_A                = 0x67B
	SYS___WCSWIDTH_A                    = 0x67C
	SYS___WCSWIDTH_ASIA                 = 0x67F
	SYS___WCSWIDTH_STD_A                = 0x67E
	SYS_FFLUSH                          = 0x068
	SYS___GETLOGIN_R_A                  = 0x68E
	SYS___GETPWNAM_R_A                  = 0x68C
	SYS___GETPWUID_R_A                  = 0x68D
	SYS___TTYNAME_R_A                   = 0x68F
	SYS___WCWIDTH_ASIA                  = 0x68B
	SYS___WCWIDTH_STD_A                 = 0x68A
	SYS_FOPEN                           = 0x069
	SYS___REGEXEC_A                     = 0x69A
	SYS___REGEXEC_STD_A                 = 0x69B
	SYS___REGFREE_A                     = 0x69C
	SYS___REGFREE_STD_A                 = 0x69D
	SYS___STRCOLL_A                     = 0x69E
	SYS___STRCOLL_C_A                   = 0x69F
	SYS_SCANF                           = 0x070
	SYS___A64L_A                        = 0x70C
	SYS___ECVT_A                        = 0x70D
	SYS___FCVT_A                        = 0x70E
	SYS___GCVT_A                        = 0x70F
	SYS___STRTOUL_A                     = 0x70A
	SYS_____AE_CORRESTBL_QUERY_A        = 0x70B
	SYS_SPRINTF                         = 0x071
	SYS___ACCESS_A                      = 0x71F
	SYS___CATOPEN_A                     = 0x71E
	SYS___GETOPT_A                      = 0x71D
	SYS___REALPATH_A                    = 0x71A
	SYS___SETENV_A                      = 0x71B
	SYS___SYSTEM_A                      = 0x71C
	SYS_FGETC                           = 0x072
	SYS___GAI_STRERROR_A                = 0x72F
	SYS___RMDIR_A                       = 0x72A
	SYS___STATVFS_A                     = 0x72B
	SYS___SYMLINK_A                     = 0x72C
	SYS___TRUNCATE_A                    = 0x72D
	SYS___UNLINK_A                      = 0x72E
	SYS_VFPRINTF                        = 0x073
	SYS___ISSPACE_A                     = 0x73A
	SYS___ISUPPER_A                     = 0x73B
	SYS___ISWALNUM_A                    = 0x73F
	SYS___ISXDIGIT_A                    = 0x73C
	SYS___TOLOWER_A                     = 0x73D
	SYS___TOUPPER_A                     = 0x73E
	SYS_VPRINTF                         = 0x074
	SYS___CONFSTR_A                     = 0x74B
	SYS___FDOPEN_A                      = 0x74E
	SYS___FLDATA_A                      = 0x74F
	SYS___FTOK_A                        = 0x74C
	SYS___ISWXDIGIT_A                   = 0x74A
	SYS___MKTEMP_A                      = 0x74D
	SYS_VSPRINTF                        = 0x075
	SYS___GETGRGID_A                    = 0x75A
	SYS___GETGRNAM_A                    = 0x75B
	SYS___GETGROUPSBYNAME_A             = 0x75C
	SYS___GETHOSTENT_A                  = 0x75D
	SYS___GETHOSTNAME_A                 = 0x75E
	SYS___GETLOGIN_A                    = 0x75F
	SYS_GETC                            = 0x076
	SYS___CREATEWORKUNIT_A              = 0x76A
	SYS___CTERMID_A                     = 0x76B
	SYS___FMTMSG_A                      = 0x76C
	SYS___INITGROUPS_A                  = 0x76D
	SYS___MSGRCV_A                      = 0x76F
	SYS_____LOGIN_A                     = 0x76E
	SYS_FGETS                           = 0x077
	SYS___STRCASECMP_A                  = 0x77B
	SYS___STRNCASECMP_A                 = 0x77C
	SYS___TTYNAME_A                     = 0x77D
	SYS___UNAME_A                       = 0x77E
	SYS___UTIMES_A                      = 0x77F
	SYS_____SERVER_PWU_A                = 0x77A
	SYS_FPUTC                           = 0x078
	SYS___CREAT_O_A                     = 0x78E
	SYS___ENVNA                         = 0x78F
	SYS___FREAD_A                       = 0x78A
	SYS___FWRITE_A                      = 0x78B
	SYS___ISASCII                       = 0x78D
	SYS___OPEN_O_A                      = 0x78C
	SYS_FPUTS                           = 0x079
	SYS___ASCTIME_A                     = 0x79C
	SYS___CTIME_A                       = 0x79D
	SYS___GETDATE_A                     = 0x79E
	SYS___GETSERVBYPORT_A               = 0x79A
	SYS___GETSERVENT_A                  = 0x79B
	SYS___TZSET_A                       = 0x79F
	SYS_ACL_FROM_TEXT                   = 0x80C
	SYS_ACL_SET_FD                      = 0x80A
	SYS_ACL_SET_FILE                    = 0x80B
	SYS_ACL_SORT                        = 0x80E
	SYS_ACL_TO_TEXT                     = 0x80D
	SYS_UNGETC                          = 0x080
	SYS___SHUTDOWN_REGISTRATION         = 0x80F
	SYS_FREAD                           = 0x081
	SYS_FREEADDRINFO                    = 0x81A
	SYS_GAI_STRERROR                    = 0x81B
	SYS_REXEC_AF                        = 0x81C
	SYS___DYNALLOC_A                    = 0x81F
	SYS___POE                           = 0x81D
	SYS_WCSTOMBS                        = 0x082
	SYS___INET_ADDR_A                   = 0x82F
	SYS___NLIST_A                       = 0x82A
	SYS_____TCGETCP_A                   = 0x82B
	SYS_____TCSETCP_A                   = 0x82C
	SYS_____W_PIOCTL_A                  = 0x82E
	SYS_MBTOWC                          = 0x083
	SYS___CABEND                        = 0x83D
	SYS___LE_CIB_GET                    = 0x83E
	SYS___RECVMSG_A                     = 0x83B
	SYS___SENDMSG_A                     = 0x83A
	SYS___SET_LAA_FOR_JIT               = 0x83F
	SYS_____LCHATTR_A                   = 0x83C
	SYS_WCTOMB                          = 0x084
	SYS___CBRTL_B                       = 0x84A
	SYS___COPYSIGNF_B                   = 0x84B
	SYS___COPYSIGNL_B                   = 0x84C
	SYS___COTANF_B                      = 0x84D
	SYS___COTANL_B                      = 0x84F
	SYS___COTAN_B                       = 0x84E
	SYS_MBSTOWCS                        = 0x085
	SYS___LOG1PL_B                      = 0x85A
	SYS___LOG2F_B                       = 0x85B
	SYS___LOG2L_B                       = 0x85D
	SYS___LOG2_B                        = 0x85C
	SYS___REMAINDERF_B                  = 0x85E
	SYS___REMAINDERL_B                  = 0x85F
	SYS_ACOSHF                          = 0x86E
	SYS_ACOSHL                          = 0x86F
	SYS_WCSCPY                          = 0x086
	SYS___ERFCF_B                       = 0x86D
	SYS___ERFF_B                        = 0x86C
	SYS___LROUNDF_B                     = 0x86A
	SYS___LROUND_B                      = 0x86B
	SYS_COTANL                          = 0x87A
	SYS_EXP2F                           = 0x87B
	SYS_EXP2L                           = 0x87C
	SYS_EXPM1F                          = 0x87D
	SYS_EXPM1L                          = 0x87E
	SYS_FDIMF                           = 0x87F
	SYS_WCSCAT                          = 0x087
	SYS___COTANL                        = 0x87A
	SYS_REMAINDERF                      = 0x88A
	SYS_REMAINDERL                      = 0x88B
	SYS_REMAINDF                        = 0x88A
	SYS_REMAINDL                        = 0x88B
	SYS_REMQUO                          = 0x88D
	SYS_REMQUOF                         = 0x88C
	SYS_REMQUOL                         = 0x88E
	SYS_TGAMMAF                         = 0x88F
	SYS_WCSCHR                          = 0x088
	SYS_ERFCF                           = 0x89B
	SYS_ERFCL                           = 0x89C
	SYS_ERFL                            = 0x89A
	SYS_EXP2                            = 0x89E
	SYS_WCSCMP                          = 0x089
	SYS___EXP2_B                        = 0x89D
	SYS___FAR_JUMP                      = 0x89F
	SYS_ABS                             = 0x090
	SYS___ERFCL_H                       = 0x90A
	SYS___EXPF_H                        = 0x90C
	SYS___EXPL_H                        = 0x90D
	SYS___EXPM1_H                       = 0x90E
	SYS___EXP_H                         = 0x90B
	SYS___FDIM_H                        = 0x90F
	SYS_DIV                             = 0x091
	SYS___LOG2F_H                       = 0x91F
	SYS___LOG2_H                        = 0x91E
	SYS___LOGB_H                        = 0x91D
	SYS___LOGF_H                        = 0x91B
	SYS___LOGL_H                        = 0x91C
	SYS___LOG_H                         = 0x91A
	SYS_LABS                            = 0x092
	SYS___POWL_H                        = 0x92A
	SYS___REMAINDER_H                   = 0x92B
	SYS___RINT_H                        = 0x92C
	SYS___SCALB_H                       = 0x92D
	SYS___SINF_H                        = 0x92F
	SYS___SIN_H                         = 0x92E
	SYS_STRNCPY                         = 0x093
	SYS___TANHF_H                       = 0x93B
	SYS___TANHL_H                       = 0x93C
	SYS___TANH_H                        = 0x93A
	SYS___TGAMMAF_H                     = 0x93E
	SYS___TGAMMA_H                      = 0x93D
	SYS___TRUNC_H                       = 0x93F
	SYS_MEMCPY                          = 0x094
	SYS_VFWSCANF                        = 0x94A
	SYS_VSWSCANF                        = 0x94E
	SYS_VWSCANF                         = 0x94C
	SYS_INET6_RTH_ADD                   = 0x95D
	SYS_INET6_RTH_INIT                  = 0x95C
	SYS_INET6_RTH_REVERSE               = 0x95E
	SYS_INET6_RTH_SEGMENTS              = 0x95F
	SYS_INET6_RTH_SPACE                 = 0x95B
	SYS_MEMMOVE                         = 0x095
	SYS_WCSTOLD                         = 0x95A
	SYS_STRCPY                          = 0x096
	SYS_STRCMP                          = 0x097
	SYS_CABS                            = 0x98E
	SYS_STRCAT                          = 0x098
	SYS___CABS_B                        = 0x98F
	SYS___POW_II                        = 0x98A
	SYS___POW_II_B                      = 0x98B
	SYS___POW_II_H                      = 0x98C
	SYS_CACOSF                          = 0x99A
	SYS_CACOSL                          = 0x99D
	SYS_STRNCAT                         = 0x099
	SYS___CACOSF_B                      = 0x99B
	SYS___CACOSF_H                      = 0x99C
	SYS___CACOSL_B                      = 0x99E
	SYS___CACOSL_H                      = 0x99F
	SYS_ISWALPHA                        = 0x100
	SYS_ISWBLANK                        = 0x101
	SYS___ISWBLK                        = 0x101
	SYS_ISWCNTRL                        = 0x102
	SYS_ISWDIGIT                        = 0x103
	SYS_ISWGRAPH                        = 0x104
	SYS_ISWLOWER                        = 0x105
	SYS_ISWPRINT                        = 0x106
	SYS_ISWPUNCT                        = 0x107
	SYS_ISWSPACE                        = 0x108
	SYS_ISWUPPER                        = 0x109
	SYS_WCTOB                           = 0x110
	SYS_MBRLEN                          = 0x111
	SYS_MBRTOWC                         = 0x112
	SYS_MBSRTOWC                        = 0x113
	SYS_MBSRTOWCS                       = 0x113
	SYS_WCRTOMB                         = 0x114
	SYS_WCSRTOMB                        = 0x115
	SYS_WCSRTOMBS                       = 0x115
	SYS___CSID                          = 0x116
	SYS___WCSID                         = 0x117
	SYS_STRPTIME                        = 0x118
	SYS___STRPTM                        = 0x118
	SYS_STRFMON                         = 0x119
	SYS_WCSCOLL                         = 0x130
	SYS_WCSXFRM                         = 0x131
	SYS_WCSWIDTH                        = 0x132
	SYS_WCWIDTH                         = 0x133
	SYS_WCSFTIME                        = 0x134
	SYS_SWPRINTF                        = 0x135
	SYS_VSWPRINT                        = 0x136
	SYS_VSWPRINTF                       = 0x136
	SYS_SWSCANF                         = 0x137
	SYS_REGCOMP                         = 0x138
	SYS_REGEXEC                         = 0x139
	SYS_GETWC                           = 0x140
	SYS_GETWCHAR                        = 0x141
	SYS_PUTWC                           = 0x142
	SYS_PUTWCHAR                        = 0x143
	SYS_UNGETWC                         = 0x144
	SYS_ICONV_OPEN                      = 0x145
	SYS_ICONV                           = 0x146
	SYS_ICONV_CLOSE                     = 0x147
	SYS_COLLRANGE                       = 0x150
	SYS_CCLASS                          = 0x151
	SYS_COLLORDER                       = 0x152
	SYS___DEMANGLE                      = 0x154
	SYS_FDOPEN                          = 0x155
	SYS___ERRNO                         = 0x156
	SYS___ERRNO2                        = 0x157
	SYS___TERROR                        = 0x158
	SYS_MAXCOLL                         = 0x169
	SYS_DLLLOAD                         = 0x170
	SYS__EXIT                           = 0x174
	SYS_ACCESS                          = 0x175
	SYS_ALARM                           = 0x176
	SYS_CFGETISPEED                     = 0x177
	SYS_CFGETOSPEED                     = 0x178
	SYS_CFSETISPEED                     = 0x179
	SYS_CREAT                           = 0x180
	SYS_CTERMID                         = 0x181
	SYS_DUP                             = 0x182
	SYS_DUP2                            = 0x183
	SYS_EXECL                           = 0x184
	SYS_EXECLE                          = 0x185
	SYS_EXECLP                          = 0x186
	SYS_EXECV                           = 0x187
	SYS_EXECVE                          = 0x188
	SYS_EXECVP                          = 0x189
	SYS_FSTAT                           = 0x190
	SYS_FSYNC                           = 0x191
	SYS_FTRUNCATE                       = 0x192
	SYS_GETCWD                          = 0x193
	SYS_GETEGID                         = 0x194
	SYS_GETEUID                         = 0x195
	SYS_GETGID                          = 0x196
	SYS_GETGRGID                        = 0x197
	SYS_GETGRNAM                        = 0x198
	SYS_GETGROUPS                       = 0x199
	SYS_PTHREAD_MUTEXATTR_DESTROY       = 0x200
	SYS_PTHREAD_MUTEXATTR_SETKIND_NP    = 0x201
	SYS_PTHREAD_MUTEXATTR_GETKIND_NP    = 0x202
	SYS_PTHREAD_MUTEX_INIT              = 0x203
	SYS_PTHREAD_MUTEX_DESTROY           = 0x204
	SYS_PTHREAD_MUTEX_LOCK              = 0x205
	SYS_PTHREAD_MUTEX_TRYLOCK           = 0x206
	SYS_PTHREAD_MUTEX_UNLOCK            = 0x207
	SYS_PTHREAD_ONCE                    = 0x209
	SYS_TW_OPEN                         = 0x210
	SYS_TW_FCNTL                        = 0x211
	SYS_PTHREAD_JOIN_D4_NP              = 0x212
	SYS_PTHREAD_CONDATTR_SETKIND_NP     = 0x213
	SYS_PTHREAD_CONDATTR_GETKIND_NP     = 0x214
	SYS_EXTLINK_NP                      = 0x215
	SYS___PASSWD                        = 0x216
	SYS_SETGROUPS                       = 0x217
	SYS_INITGROUPS                      = 0x218
	SYS_WCSRCHR                         = 0x240
	SYS_SVC99                           = 0x241
	SYS___SVC99                         = 0x241
	SYS_WCSWCS                          = 0x242
	SYS_LOCALECO                        = 0x243
	SYS_LOCALECONV                      = 0x243
	SYS___LIBREL                        = 0x244
	SYS_RELEASE                         = 0x245
	SYS___RLSE                          = 0x245
	SYS_FLOCATE                         = 0x246
	SYS___FLOCT                         = 0x246
	SYS_FDELREC                         = 0x247
	SYS___FDLREC                        = 0x247
	SYS_FETCH                           = 0x248
	SYS___FETCH                         = 0x248
	SYS_QSORT                           = 0x249
	SYS___CLEANUPCATCH                  = 0x260
	SYS___CATCHMATCH                    = 0x261
	SYS___CLEAN2UPCATCH                 = 0x262
	SYS_GETPRIORITY                     = 0x270
	SYS_NICE                            = 0x271
	SYS_SETPRIORITY                     = 0x272
	SYS_GETITIMER                       = 0x273
	SYS_SETITIMER                       = 0x274
	SYS_MSGCTL                          = 0x275
	SYS_MSGGET                          = 0x276
	SYS_MSGRCV                          = 0x277
	SYS_MSGSND                          = 0x278
	SYS_MSGXRCV                         = 0x279
	SYS___MSGXR                         = 0x279
	SYS_SHMGET                          = 0x280
	SYS___GETIPC                        = 0x281
	SYS_SETGRENT                        = 0x282
	SYS_GETGRENT                        = 0x283
	SYS_ENDGRENT                        = 0x284
	SYS_SETPWENT                        = 0x285
	SYS_GETPWENT                        = 0x286
	SYS_ENDPWENT                        = 0x287
	SYS_BSD_SIGNAL                      = 0x288
	SYS_KILLPG                          = 0x289
	SYS_SIGSET                          = 0x290
	SYS_SIGSTACK                        = 0x291
	SYS_GETRLIMIT                       = 0x292
	SYS_SETRLIMIT                       = 0x293
	SYS_GETRUSAGE                       = 0x294
	SYS_MMAP                            = 0x295
	SYS_MPROTECT                        = 0x296
	SYS_MSYNC                           = 0x297
	SYS_MUNMAP                          = 0x298
	SYS_CONFSTR                         = 0x299
	SYS___NDMTRM                        = 0x300
	SYS_FTOK                            = 0x301
	SYS_BASENAME                        = 0x302
	SYS_DIRNAME                         = 0x303
	SYS_GETDTABLESIZE                   = 0x304
	SYS_MKSTEMP                         = 0x305
	SYS_MKTEMP                          = 0x306
	SYS_NFTW                            = 0x307
	SYS_GETWD                           = 0x308
	SYS_LOCKF                           = 0x309
	SYS_WORDEXP                         = 0x310
	SYS_WORDFREE                        = 0x311
	SYS_GETPGID                         = 0x312
	SYS_GETSID                          = 0x313
	SYS___UTMPXNAME                     = 0x314
	SYS_CUSERID                         = 0x315
	SYS_GETPASS                         = 0x316
	SYS_FNMATCH                         = 0x317
	SYS_FTW                             = 0x318
	SYS_GETW                            = 0x319
	SYS_ACOSH                           = 0x320
	SYS_ASINH                           = 0x321
	SYS_ATANH                           = 0x322
	SYS_CBRT                            = 0x323
	SYS_EXPM1                           = 0x324
	SYS_ILOGB                           = 0x325
	SYS_LOGB                            = 0x326
	SYS_LOG1P                           = 0x327
	SYS_NEXTAFTER                       = 0x328
	SYS_RINT                            = 0x329
	SYS_SPAWN                           = 0x330
	SYS_SPAWNP                          = 0x331
	SYS_GETLOGIN_UU                     = 0x332
	SYS_ECVT                            = 0x333
	SYS_FCVT                            = 0x334
	SYS_GCVT                            = 0x335
	SYS_ACCEPT                          = 0x336
	SYS_BIND                            = 0x337
	SYS_CONNECT                         = 0x338
	SYS_ENDHOSTENT                      = 0x339
	SYS_GETHOSTENT                      = 0x340
	SYS_GETHOSTID                       = 0x341
	SYS_GETHOSTNAME                     = 0x342
	SYS_GETNETBYADDR                    = 0x343
	SYS_GETNETBYNAME                    = 0x344
	SYS_GETNETENT                       = 0x345
	SYS_GETPEERNAME                     = 0x346
	SYS_GETPROTOBYNAME                  = 0x347
	SYS_GETPROTOBYNUMBER                = 0x348
	SYS_GETPROTOENT                     = 0x349
	SYS_INET_LNAOF                      = 0x350
	SYS_INET_MAKEADDR                   = 0x351
	SYS_INET_NETOF                      = 0x352
	SYS_INET_NETWORK                    = 0x353
	SYS_INET_NTOA                       = 0x354
	SYS_IOCTL                           = 0x355
	SYS_LISTEN                          = 0x356
	SYS_READV                           = 0x357
	SYS_RECV                            = 0x358
	SYS_RECVFROM                        = 0x359
	SYS_SETHOSTENT                      = 0x360
	SYS_SETNETENT                       = 0x361
	SYS_SETPEER                         = 0x362
	SYS_SETPROTOENT                     = 0x363
	SYS_SETSERVENT                      = 0x364
	SYS_SETSOCKOPT                      = 0x365
	SYS_SHUTDOWN                        = 0x366
	SYS_SOCKET                          = 0x367
	SYS_SOCKETPAIR                      = 0x368
	SYS_WRITEV                          = 0x369
	SYS_ENDNETENT                       = 0x370
	SYS_CLOSELOG                        = 0x371
	SYS_OPENLOG                         = 0x372
	SYS_SETLOGMASK                      = 0x373
	SYS_SYSLOG                          = 0x374
	SYS_PTSNAME                         = 0x375
	SYS_SETREUID                        = 0x376
	SYS_SETREGID                        = 0x377
	SYS_REALPATH                        = 0x378
	SYS___SIGNGAM                       = 0x379
	SYS_POLL                            = 0x380
	SYS_REXEC                           = 0x381
	SYS___ISASCII2                      = 0x382
	SYS___TOASCII2                      = 0x383
	SYS_CHPRIORITY                      = 0x384
	SYS_PTHREAD_ATTR_SETSYNCTYPE_NP     = 0x385
	SYS_PTHREAD_ATTR_GETSYNCTYPE_NP     = 0x386
	SYS_PTHREAD_SET_LIMIT_NP            = 0x387
	SYS___STNETENT                      = 0x388
	SYS___STPROTOENT                    = 0x389
	SYS___SELECT1                       = 0x390
	SYS_PTHREAD_SECURITY_NP             = 0x391
	SYS___CHECK_RESOURCE_AUTH_NP        = 0x392
	SYS___CONVERT_ID_NP                 = 0x393
	SYS___OPENVMREL                     = 0x394
	SYS_WMEMCHR                         = 0x395
	SYS_WMEMCMP                         = 0x396
	SYS_WMEMCPY                         = 0x397
	SYS_WMEMMOVE                        = 0x398
	SYS_WMEMSET                         = 0x399
	SYS___FPUTWC                        = 0x400
	SYS___PUTWC                         = 0x401
	SYS___PWCHAR                        = 0x402
	SYS___WCSFTM                        = 0x403
	SYS___WCSTOK                        = 0x404
	SYS___WCWDTH                        = 0x405
	SYS_T_ACCEPT                        = 0x409
	SYS_T_GETINFO                       = 0x410
	SYS_T_GETPROTADDR                   = 0x411
	SYS_T_GETSTATE                      = 0x412
	SYS_T_LISTEN                        = 0x413
	SYS_T_LOOK                          = 0x414
	SYS_T_OPEN                          = 0x415
	SYS_T_OPTMGMT                       = 0x416
	SYS_T_RCV                           = 0x417
	SYS_T_RCVCONNECT                    = 0x418
	SYS_T_RCVDIS                        = 0x419
	SYS_T_SNDUDATA                      = 0x420
	SYS_T_STRERROR                      = 0x421
	SYS_T_SYNC                          = 0x422
	SYS_T_UNBIND                        = 0x423
	SYS___T_ERRNO                       = 0x424
	SYS___RECVMSG2                      = 0x425
	SYS___SENDMSG2                      = 0x426
	SYS_FATTACH                         = 0x427
	SYS_FDETACH                         = 0x428
	SYS_GETMSG                          = 0x429
	SYS_GETCONTEXT                      = 0x430
	SYS_SETCONTEXT                      = 0x431
	SYS_MAKECONTEXT                     = 0x432
	SYS_SWAPCONTEXT                     = 0x433
	SYS_PTHREAD_GETSPECIFIC_D8_NP       = 0x434
	SYS_GETCLIENTID                     = 0x470
	SYS___GETCLIENTID                   = 0x471
	SYS_GETSTABLESIZE                   = 0x472
	SYS_GETIBMOPT                       = 0x473
	SYS_GETIBMSOCKOPT                   = 0x474
	SYS_GIVESOCKET                      = 0x475
	SYS_IBMSFLUSH                       = 0x476
	SYS_MAXDESC                         = 0x477
	SYS_SETIBMOPT                       = 0x478
	SYS_SETIBMSOCKOPT                   = 0x479
	SYS___SERVER_PWU                    = 0x480
	SYS_PTHREAD_TAG_NP                  = 0x481
	SYS___CONSOLE                       = 0x482
	SYS___WSINIT                        = 0x483
	SYS___IPTCPN                        = 0x489
	SYS___SERVER_CLASSIFY               = 0x490
	SYS___HEAPRPT                       = 0x496
	SYS___ISBFP                         = 0x500
	SYS___FP_CAST                       = 0x501
	SYS___CERTIFICATE                   = 0x502
	SYS_SEND_FILE                       = 0x503
	SYS_AIO_CANCEL                      = 0x504
	SYS_AIO_ERROR                       = 0x505
	SYS_AIO_READ                        = 0x506
	SYS_AIO_RETURN                      = 0x507
	SYS_AIO_SUSPEND                     = 0x508
	SYS_AIO_WRITE                       = 0x509
	SYS_PTHREAD_RWLOCK_TRYWRLOCK        = 0x510
	SYS_PTHREAD_RWLOCK_UNLOCK           = 0x511
	SYS_PTHREAD_RWLOCK_WRLOCK           = 0x512
	SYS_PTHREAD_RWLOCKATTR_GETPSHARED   = 0x513
	SYS_PTHREAD_RWLOCKATTR_SETPSHARED   = 0x514
	SYS_PTHREAD_RWLOCKATTR_INIT         = 0x515
	SYS_PTHREAD_RWLOCKATTR_DESTROY      = 0x516
	SYS___CTTBL                         = 0x517
	SYS_PTHREAD_MUTEXATTR_SETTYPE       = 0x518
	SYS_PTHREAD_MUTEXATTR_GETTYPE       = 0x519
	SYS___FP_UNORDERED                  = 0x520
	SYS___FP_READ_RND                   = 0x521
	SYS___FP_READ_RND_B                 = 0x522
	SYS___FP_SWAP_RND                   = 0x523
	SYS___FP_SWAP_RND_B                 = 0x524
	SYS___FP_LEVEL                      = 0x525
	SYS___FP_BTOH                       = 0x526
	SYS___FP_HTOB                       = 0x527
	SYS___FPC_RD                        = 0x528
	SYS___FPC_WR                        = 0x529
	SYS_PTHREAD_SETCANCELTYPE           = 0x600
	SYS_PTHREAD_TESTCANCEL              = 0x601
	SYS___ATANF_B                       = 0x602
	SYS___ATANL_B                       = 0x603
	SYS___CEILF_B                       = 0x604
	SYS___CEILL_B                       = 0x605
	SYS___COSF_B                        = 0x606
	SYS___COSL_B                        = 0x607
	SYS___FABSF_B                       = 0x608
	SYS___FABSL_B                       = 0x609
	SYS___SINF_B                        = 0x610
	SYS___SINL_B                        = 0x611
	SYS___TANF_B                        = 0x612
	SYS___TANL_B                        = 0x613
	SYS___TANHF_B                       = 0x614
	SYS___TANHL_B                       = 0x615
	SYS___ACOSF_B                       = 0x616
	SYS___ACOSL_B                       = 0x617
	SYS___ASINF_B                       = 0x618
	SYS___ASINL_B                       = 0x619
	SYS___LOGF_B                        = 0x620
	SYS___LOGL_B                        = 0x621
	SYS___LOG10F_B                      = 0x622
	SYS___LOG10L_B                      = 0x623
	SYS___POWF_B                        = 0x624
	SYS___POWL_B                        = 0x625
	SYS___SINHF_B                       = 0x626
	SYS___SINHL_B                       = 0x627
	SYS___SQRTF_B                       = 0x628
	SYS___SQRTL_B                       = 0x629
	SYS___MODFL_B                       = 0x630
	SYS_ABSF                            = 0x631
	SYS_ABSL                            = 0x632
	SYS_ACOSF                           = 0x633
	SYS_ACOSL                           = 0x634
	SYS_ASINF                           = 0x635
	SYS_ASINL                           = 0x636
	SYS_ATAN2F                          = 0x637
	SYS_ATAN2L                          = 0x638
	SYS_ATANF                           = 0x639
	SYS_COSHL                           = 0x640
	SYS_EXPF                            = 0x641
	SYS_EXPL                            = 0x642
	SYS_TANHF                           = 0x643
	SYS_TANHL                           = 0x644
	SYS_LOG10F                          = 0x645
	SYS_LOG10L                          = 0x646
	SYS_LOGF                            = 0x647
	SYS_LOGL                            = 0x648
	SYS_POWF                            = 0x649
	SYS_SINHL                           = 0x650
	SYS_TANF                            = 0x651
	SYS_TANL                            = 0x652
	SYS_FABSF                           = 0x653
	SYS_FABSL                           = 0x654
	SYS_FLOORF                          = 0x655
	SYS_FLOORL                          = 0x656
	SYS_FMODF                           = 0x657
	SYS_FMODL                           = 0x658
	SYS_FREXPF                          = 0x659
	SYS___CHATTR                        = 0x660
	SYS___FCHATTR                       = 0x661
	SYS___TOCCSID                       = 0x662
	SYS___CSNAMETYPE                    = 0x663
	SYS___TOCSNAME                      = 0x664
	SYS___CCSIDTYPE                     = 0x665
	SYS___AE_CORRESTBL_QUERY            = 0x666
	SYS___AE_AUTOCONVERT_STATE          = 0x667
	SYS_DN_FIND                         = 0x668
	SYS___GETHOSTBYADDR_A               = 0x669
	SYS___MBLEN_SB_A                    = 0x670
	SYS___MBLEN_STD_A                   = 0x671
	SYS___MBLEN_UTF                     = 0x672
	SYS___MBSTOWCS_A                    = 0x673
	SYS___MBSTOWCS_STD_A                = 0x674
	SYS___MBTOWC_A                      = 0x675
	SYS___MBTOWC_ISO1                   = 0x676
	SYS___MBTOWC_SBCS                   = 0x677
	SYS___MBTOWC_MBCS                   = 0x678
	SYS___MBTOWC_UTF                    = 0x679
	SYS___CSID_A                        = 0x680
	SYS___CSID_STD_A                    = 0x681
	SYS___WCSID_A                       = 0x682
	SYS___WCSID_STD_A                   = 0x683
	SYS___WCTOMB_A                      = 0x684
	SYS___WCTOMB_ISO1                   = 0x685
	SYS___WCTOMB_STD_A                  = 0x686
	SYS___WCTOMB_UTF                    = 0x687
	SYS___WCWIDTH_A                     = 0x688
	SYS___GETGRNAM_R_A                  = 0x689
	SYS___READDIR_R_A                   = 0x690
	SYS___E2A_S                         = 0x691
	SYS___FNMATCH_A                     = 0x692
	SYS___FNMATCH_C_A                   = 0x693
	SYS___EXECL_A                       = 0x694
	SYS___FNMATCH_STD_A                 = 0x695
	SYS___REGCOMP_A                     = 0x696
	SYS___REGCOMP_STD_A                 = 0x697
	SYS___REGERROR_A                    = 0x698
	SYS___REGERROR_STD_A                = 0x699
	SYS___SWPRINTF_A                    = 0x700
	SYS___FSCANF_A                      = 0x701
	SYS___SCANF_A                       = 0x702
	SYS___SSCANF_A                      = 0x703
	SYS___SWSCANF_A                     = 0x704
	SYS___ATOF_A                        = 0x705
	SYS___ATOI_A                        = 0x706
	SYS___ATOL_A                        = 0x707
	SYS___STRTOD_A                      = 0x708
	SYS___STRTOL_A                      = 0x709
	SYS___L64A_A                        = 0x710
	SYS___STRERROR_A                    = 0x711
	SYS___PERROR_A                      = 0x712
	SYS___FETCH_A                       = 0x713
	SYS___GETENV_A                      = 0x714
	SYS___MKSTEMP_A                     = 0x717
	SYS___PTSNAME_A                     = 0x718
	SYS___PUTENV_A                      = 0x719
	SYS___CHDIR_A                       = 0x720
	SYS___CHOWN_A                       = 0x721
	SYS___CHROOT_A                      = 0x722
	SYS___GETCWD_A                      = 0x723
	SYS___GETWD_A                       = 0x724
	SYS___LCHOWN_A                      = 0x725
	SYS___LINK_A                        = 0x726
	SYS___PATHCONF_A                    = 0x727
	SYS___IF_NAMEINDEX_A                = 0x728
	SYS___READLINK_A                    = 0x729
	SYS___EXTLINK_NP_A                  = 0x730
	SYS___ISALNUM_A                     = 0x731
	SYS___ISALPHA_A                     = 0x732
	SYS___A2E_S                         = 0x733
	SYS___ISCNTRL_A                     = 0x734
	SYS___ISDIGIT_A                     = 0x735
	SYS___ISGRAPH_A                     = 0x736
	SYS___ISLOWER_A                     = 0x737
	SYS___ISPRINT_A                     = 0x738
	SYS___ISPUNCT_A                     = 0x739
	SYS___ISWALPHA_A                    = 0x740
	SYS___A2E_L                         = 0x741
	SYS___ISWCNTRL_A                    = 0x742
	SYS___ISWDIGIT_A                    = 0x743
	SYS___ISWGRAPH_A                    = 0x744
	SYS___ISWLOWER_A                    = 0x745
	SYS___ISWPRINT_A                    = 0x746
	SYS___ISWPUNCT_A                    = 0x747
	SYS___ISWSPACE_A                    = 0x748
	SYS___ISWUPPER_A                    = 0x749
	SYS___REMOVE_A                      = 0x750
	SYS___RENAME_A                      = 0x751
	SYS___TMPNAM_A                      = 0x752
	SYS___FOPEN_A                       = 0x753
	SYS___FREOPEN_A                     = 0x754
	SYS___CUSERID_A                     = 0x755
	SYS___POPEN_A                       = 0x756
	SYS___TEMPNAM_A                     = 0x757
	SYS___FTW_A                         = 0x758
	SYS___GETGRENT_A                    = 0x759
	SYS___INET_NTOP_A                   = 0x760
	SYS___GETPASS_A                     = 0x761
	SYS___GETPWENT_A                    = 0x762
	SYS___GETPWNAM_A                    = 0x763
	SYS___GETPWUID_A                    = 0x764
	SYS_____CHECK_RESOURCE_AUTH_NP_A    = 0x765
	SYS___CHECKSCHENV_A                 = 0x766
	SYS___CONNECTSERVER_A               = 0x767
	SYS___CONNECTWORKMGR_A              = 0x768
	SYS_____CONSOLE_A                   = 0x769
	SYS___MSGSND_A                      = 0x770
	SYS___MSGXRCV_A                     = 0x771
	SYS___NFTW_A                        = 0x772
	SYS_____PASSWD_A                    = 0x773
	SYS___PTHREAD_SECURITY_NP_A         = 0x774
	SYS___QUERYMETRICS_A                = 0x775
	SYS___QUERYSCHENV                   = 0x776
	SYS___READV_A                       = 0x777
	SYS_____SERVER_CLASSIFY_A           = 0x778
	SYS_____SERVER_INIT_A               = 0x779
	SYS___W_GETPSENT_A                  = 0x780
	SYS___WRITEV_A                      = 0x781
	SYS___W_STATFS_A                    = 0x782
	SYS___W_STATVFS_A                   = 0x783
	SYS___FPUTC_A                       = 0x784
	SYS___PUTCHAR_A                     = 0x785
	SYS___PUTS_A                        = 0x786
	SYS___FGETS_A                       = 0x787
	SYS___GETS_A                        = 0x788
	SYS___FPUTS_A                       = 0x789
	SYS___PUTC_A                        = 0x790
	SYS___AE_THREAD_SETMODE             = 0x791
	SYS___AE_THREAD_SWAPMODE            = 0x792
	SYS___GETNETBYADDR_A                = 0x793
	SYS___GETNETBYNAME_A                = 0x794
	SYS___GETNETENT_A                   = 0x795
	SYS___GETPROTOBYNAME_A              = 0x796
	SYS___GETPROTOBYNUMBER_A            = 0x797
	SYS___GETPROTOENT_A                 = 0x798
	SYS___GETSERVBYNAME_A               = 0x799
	SYS_ACL_FIRST_ENTRY                 = 0x800
	SYS_ACL_GET_ENTRY                   = 0x801
	SYS_ACL_VALID                       = 0x802
	SYS_ACL_CREATE_ENTRY                = 0x803
	SYS_ACL_DELETE_ENTRY                = 0x804
	SYS_ACL_UPDATE_ENTRY                = 0x805
	SYS_ACL_DELETE_FD                   = 0x806
	SYS_ACL_DELETE_FILE                 = 0x807
	SYS_ACL_GET_FD                      = 0x808
	SYS_ACL_GET_FILE                    = 0x809
	SYS___ERFL_B                        = 0x810
	SYS___ERFCL_B                       = 0x811
	SYS___LGAMMAL_B                     = 0x812
	SYS___SETHOOKEVENTS                 = 0x813
	SYS_IF_NAMETOINDEX                  = 0x814
	SYS_IF_INDEXTONAME                  = 0x815
	SYS_IF_NAMEINDEX                    = 0x816
	SYS_IF_FREENAMEINDEX                = 0x817
	SYS_GETADDRINFO                     = 0x818
	SYS_GETNAMEINFO                     = 0x819
	SYS___DYNFREE_A                     = 0x820
	SYS___RES_QUERY_A                   = 0x821
	SYS___RES_SEARCH_A                  = 0x822
	SYS___RES_QUERYDOMAIN_A             = 0x823
	SYS___RES_MKQUERY_A                 = 0x824
	SYS___RES_SEND_A                    = 0x825
	SYS___DN_EXPAND_A                   = 0x826
	SYS___DN_SKIPNAME_A                 = 0x827
	SYS___DN_COMP_A                     = 0x828
	SYS___DN_FIND_A                     = 0x829
	SYS___INET_NTOA_A                   = 0x830
	SYS___INET_NETWORK_A                = 0x831
	SYS___ACCEPT_A                      = 0x832
	SYS___ACCEPT_AND_RECV_A             = 0x833
	SYS___BIND_A                        = 0x834
	SYS___CONNECT_A                     = 0x835
	SYS___GETPEERNAME_A                 = 0x836
	SYS___GETSOCKNAME_A                 = 0x837
	SYS___RECVFROM_A                    = 0x838
	SYS___SENDTO_A                      = 0x839
	SYS___LCHATTR                       = 0x840
	SYS___WRITEDOWN                     = 0x841
	SYS_PTHREAD_MUTEX_INIT2             = 0x842
	SYS___ACOSHF_B                      = 0x843
	SYS___ACOSHL_B                      = 0x844
	SYS___ASINHF_B                      = 0x845
	SYS___ASINHL_B                      = 0x846
	SYS___ATANHF_B                      = 0x847
	SYS___ATANHL_B                      = 0x848
	SYS___CBRTF_B                       = 0x849
	SYS___EXP2F_B                       = 0x850
	SYS___EXP2L_B                       = 0x851
	SYS___EXPM1F_B                      = 0x852
	SYS___EXPM1L_B                      = 0x853
	SYS___FDIMF_B                       = 0x854
	SYS___FDIM_B                        = 0x855
	SYS___FDIML_B                       = 0x856
	SYS___HYPOTF_B                      = 0x857
	SYS___HYPOTL_B                      = 0x858
	SYS___LOG1PF_B                      = 0x859
	SYS___REMQUOF_B                     = 0x860
	SYS___REMQUO_B                      = 0x861
	SYS___REMQUOL_B                     = 0x862
	SYS___TGAMMAF_B                     = 0x863
	SYS___TGAMMA_B                      = 0x864
	SYS___TGAMMAL_B                     = 0x865
	SYS___TRUNCF_B                      = 0x866
	SYS___TRUNC_B                       = 0x867
	SYS___TRUNCL_B                      = 0x868
	SYS___LGAMMAF_B                     = 0x869
	SYS_ASINHF                          = 0x870
	SYS_ASINHL                          = 0x871
	SYS_ATANHF                          = 0x872
	SYS_ATANHL                          = 0x873
	SYS_CBRTF                           = 0x874
	SYS_CBRTL                           = 0x875
	SYS_COPYSIGNF                       = 0x876
	SYS_CPYSIGNF                        = 0x876
	SYS_COPYSIGNL                       = 0x877
	SYS_CPYSIGNL                        = 0x877
	SYS_COTANF                          = 0x878
	SYS___COTANF                        = 0x878
	SYS_COTAN                           = 0x879
	SYS___COTAN                         = 0x879
	SYS_FDIM                            = 0x881
	SYS_FDIML                           = 0x882
	SYS_HYPOTF                          = 0x883
	SYS_HYPOTL                          = 0x884
	SYS_LOG1PF                          = 0x885
	SYS_LOG1PL                          = 0x886
	SYS_LOG2F                           = 0x887
	SYS_LOG2                            = 0x888
	SYS_LOG2L                           = 0x889
	SYS_TGAMMA                          = 0x890
	SYS_TGAMMAL                         = 0x891
	SYS_TRUNCF                          = 0x892
	SYS_TRUNC                           = 0x893
	SYS_TRUNCL                          = 0x894
	SYS_LGAMMAF                         = 0x895
	SYS_LGAMMAL                         = 0x896
	SYS_LROUNDF                         = 0x897
	SYS_LROUND                          = 0x898
	SYS_ERFF                            = 0x899
	SYS___COSHF_H                       = 0x900
	SYS___COSHL_H                       = 0x901
	SYS___COTAN_H                       = 0x902
	SYS___COTANF_H                      = 0x903
	SYS___COTANL_H                      = 0x904
	SYS___ERF_H                         = 0x905
	SYS___ERFF_H                        = 0x906
	SYS___ERFL_H                        = 0x907
	SYS___ERFC_H                        = 0x908
	SYS___ERFCF_H                       = 0x909
	SYS___FDIMF_H                       = 0x910
	SYS___FDIML_H                       = 0x911
	SYS___FMOD_H                        = 0x912
	SYS___FMODF_H                       = 0x913
	SYS___FMODL_H                       = 0x914
	SYS___GAMMA_H                       = 0x915
	SYS___HYPOT_H                       = 0x916
	SYS___ILOGB_H                       = 0x917
	SYS___LGAMMA_H                      = 0x918
	SYS___LGAMMAF_H                     = 0x919
	SYS___LOG2L_H                       = 0x920
	SYS___LOG1P_H                       = 0x921
	SYS___LOG10_H                       = 0x922
	SYS___LOG10F_H                      = 0x923
	SYS___LOG10L_H                      = 0x924
	SYS___LROUND_H                      = 0x925
	SYS___LROUNDF_H                     = 0x926
	SYS___NEXTAFTER_H                   = 0x927
	SYS___POW_H                         = 0x928
	SYS___POWF_H                        = 0x929
	SYS___SINL_H                        = 0x930
	SYS___SINH_H                        = 0x931
	SYS___SINHF_H                       = 0x932
	SYS___SINHL_H                       = 0x933
	SYS___SQRT_H                        = 0x934
	SYS___SQRTF_H                       = 0x935
	SYS___SQRTL_H                       = 0x936
	SYS___TAN_H                         = 0x937
	SYS___TANF_H                        = 0x938
	SYS___TANL_H                        = 0x939
	SYS___TRUNCF_H                      = 0x940
	SYS___TRUNCL_H                      = 0x941
	SYS___COSH_H                        = 0x942
	SYS___LE_DEBUG_SET_RESUME_MCH       = 0x943
	SYS_VFSCANF                         = 0x944
	SYS_VSCANF                          = 0x946
	SYS_VSSCANF                         = 0x948
	SYS_IMAXABS                         = 0x950
	SYS_IMAXDIV                         = 0x951
	SYS_STRTOIMAX                       = 0x952
	SYS_STRTOUMAX                       = 0x953
	SYS_WCSTOIMAX                       = 0x954
	SYS_WCSTOUMAX                       = 0x955
	SYS_ATOLL                           = 0x956
	SYS_STRTOF                          = 0x957
	SYS_STRTOLD                         = 0x958
	SYS_WCSTOF                          = 0x959
	SYS_INET6_RTH_GETADDR               = 0x960
	SYS_INET6_OPT_INIT                  = 0x961
	SYS_INET6_OPT_APPEND                = 0x962
	SYS_INET6_OPT_FINISH                = 0x963
	SYS_INET6_OPT_SET_VAL               = 0x964
	SYS_INET6_OPT_NEXT                  = 0x965
	SYS_INET6_OPT_FIND                  = 0x966
	SYS_INET6_OPT_GET_VAL               = 0x967
	SYS___POW_I                         = 0x987
	SYS___POW_I_B                       = 0x988
	SYS___POW_I_H                       = 0x989
	SYS___CABS_H                        = 0x990
	SYS_CABSF                           = 0x991
	SYS___CABSF_B                       = 0x992
	SYS___CABSF_H                       = 0x993
	SYS_CABSL                           = 0x994
	SYS___CABSL_B                       = 0x995
	SYS___CABSL_H                       = 0x996
	SYS_CACOS                           = 0x997
	SYS___CACOS_B                       = 0x998
	SYS___CACOS_H                       = 0x999
)
 07070100000EA9000081A4000000000000000000000001645E367C000013B9000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go    // cgo -godefs types_aix.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build ppc && aix
// +build ppc,aix

package unix

const (
	SizeofPtr      = 0x4
	SizeofShort    = 0x2
	SizeofInt      = 0x4
	SizeofLong     = 0x4
	SizeofLongLong = 0x8
	PathMax        = 0x3ff
)

type (
	_C_short     int16
	_C_int       int32
	_C_long      int32
	_C_long_long int64
)

type off64 int64
type off int32
type Mode_t uint32

type Timespec struct {
	Sec  int32
	Nsec int32
}

type Timeval struct {
	Sec  int32
	Usec int32
}

type Timeval32 struct {
	Sec  int32
	Usec int32
}

type Timex struct{}

type Time_t int32

type Tms struct{}

type Utimbuf struct {
	Actime  int32
	Modtime int32
}

type Timezone struct {
	Minuteswest int32
	Dsttime     int32
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int32
	Ixrss    int32
	Idrss    int32
	Isrss    int32
	Minflt   int32
	Majflt   int32
	Nswap    int32
	Inblock  int32
	Oublock  int32
	Msgsnd   int32
	Msgrcv   int32
	Nsignals int32
	Nvcsw    int32
	Nivcsw   int32
}

type Rlimit struct {
	Cur uint64
	Max uint64
}

type Pid_t int32

type _Gid_t uint32

type dev_t uint32

type Stat_t struct {
	Dev      uint32
	Ino      uint32
	Mode     uint32
	Nlink    int16
	Flag     uint16
	Uid      uint32
	Gid      uint32
	Rdev     uint32
	Size     int32
	Atim     Timespec
	Mtim     Timespec
	Ctim     Timespec
	Blksize  int32
	Blocks   int32
	Vfstype  int32
	Vfs      uint32
	Type     uint32
	Gen      uint32
	Reserved [9]uint32
}

type StatxTimestamp struct{}

type Statx_t struct{}

type Dirent struct {
	Offset uint32
	Ino    uint32
	Reclen uint16
	Namlen uint16
	Name   [256]uint8
}

type RawSockaddrInet4 struct {
	Len    uint8
	Family uint8
	Port   uint16
	Addr   [4]byte /* in_addr */
	Zero   [8]uint8
}

type RawSockaddrInet6 struct {
	Len      uint8
	Family   uint8
	Port     uint16
	Flowinfo uint32
	Addr     [16]byte /* in6_addr */
	Scope_id uint32
}

type RawSockaddrUnix struct {
	Len    uint8
	Family uint8
	Path   [1023]uint8
}

type RawSockaddrDatalink struct {
	Len    uint8
	Family uint8
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [120]uint8
}

type RawSockaddr struct {
	Len    uint8
	Family uint8
	Data   [14]uint8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [1012]uint8
}

type _Socklen uint32

type Cmsghdr struct {
	Len   uint32
	Level int32
	Type  int32
}

type ICMPv6Filter struct {
	Filt [8]uint32
}

type Iovec struct {
	Base *byte
	Len  uint32
}

type IPMreq struct {
	Multiaddr [4]byte /* in_addr */
	Interface [4]byte /* in_addr */
}

type IPv6Mreq struct {
	Multiaddr [16]byte /* in6_addr */
	Interface uint32
}

type IPv6MTUInfo struct {
	Addr RawSockaddrInet6
	Mtu  uint32
}

type Linger struct {
	Onoff  int32
	Linger int32
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     int32
	Control    *byte
	Controllen uint32
	Flags      int32
}

const (
	SizeofSockaddrInet4    = 0x10
	SizeofSockaddrInet6    = 0x1c
	SizeofSockaddrAny      = 0x404
	SizeofSockaddrUnix     = 0x401
	SizeofSockaddrDatalink = 0x80
	SizeofLinger           = 0x8
	SizeofIovec            = 0x8
	SizeofIPMreq           = 0x8
	SizeofIPv6Mreq         = 0x14
	SizeofIPv6MTUInfo      = 0x20
	SizeofMsghdr           = 0x1c
	SizeofCmsghdr          = 0xc
	SizeofICMPv6Filter     = 0x20
)

const (
	SizeofIfMsghdr = 0x10
)

type IfMsgHdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	Addrlen uint8
	_       [1]byte
}

type FdSet struct {
	Bits [2048]int32
}

type Utsname struct {
	Sysname  [32]byte
	Nodename [32]byte
	Release  [32]byte
	Version  [32]byte
	Machine  [32]byte
}

type Ustat_t struct{}

type Sigset_t struct {
	Losigs uint32
	Hisigs uint32
}

const (
	AT_FDCWD            = -0x2
	AT_REMOVEDIR        = 0x1
	AT_SYMLINK_NOFOLLOW = 0x1
)

type Termios struct {
	Iflag uint32
	Oflag uint32
	Cflag uint32
	Lflag uint32
	Cc    [16]uint8
}

type Termio struct {
	Iflag uint16
	Oflag uint16
	Cflag uint16
	Lflag uint16
	Line  uint8
	Cc    [8]uint8
	_     [1]byte
}

type Winsize struct {
	Row    uint16
	Col    uint16
	Xpixel uint16
	Ypixel uint16
}

type PollFd struct {
	Fd      int32
	Events  uint16
	Revents uint16
}

const (
	POLLERR    = 0x4000
	POLLHUP    = 0x2000
	POLLIN     = 0x1
	POLLNVAL   = 0x8000
	POLLOUT    = 0x2
	POLLPRI    = 0x4
	POLLRDBAND = 0x20
	POLLRDNORM = 0x10
	POLLWRBAND = 0x40
	POLLWRNORM = 0x2
)

type Flock_t struct {
	Type   int16
	Whence int16
	Sysid  uint32
	Pid    int32
	Vfs    int32
	Start  int64
	Len    int64
}

type Fsid_t struct {
	Val [2]uint32
}
type Fsid64_t struct {
	Val [2]uint64
}

type Statfs_t struct {
	Version   int32
	Type      int32
	Bsize     uint32
	Blocks    uint32
	Bfree     uint32
	Bavail    uint32
	Files     uint32
	Ffree     uint32
	Fsid      Fsid_t
	Vfstype   int32
	Fsize     uint32
	Vfsnumber int32
	Vfsoff    int32
	Vfslen    int32
	Vfsvers   int32
	Fname     [32]uint8
	Fpack     [32]uint8
	Name_max  int32
}

const RNDGETENTCNT = 0x80045200
   07070100000EAA000081A4000000000000000000000001645E367C00001403000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go  // cgo -godefs types_aix.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build ppc64 && aix
// +build ppc64,aix

package unix

const (
	SizeofPtr      = 0x8
	SizeofShort    = 0x2
	SizeofInt      = 0x4
	SizeofLong     = 0x8
	SizeofLongLong = 0x8
	PathMax        = 0x3ff
)

type (
	_C_short     int16
	_C_int       int32
	_C_long      int64
	_C_long_long int64
)

type off64 int64
type off int64
type Mode_t uint32

type Timespec struct {
	Sec  int64
	Nsec int64
}

type Timeval struct {
	Sec  int64
	Usec int32
	_    [4]byte
}

type Timeval32 struct {
	Sec  int32
	Usec int32
}

type Timex struct{}

type Time_t int64

type Tms struct{}

type Utimbuf struct {
	Actime  int64
	Modtime int64
}

type Timezone struct {
	Minuteswest int32
	Dsttime     int32
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int64
	Ixrss    int64
	Idrss    int64
	Isrss    int64
	Minflt   int64
	Majflt   int64
	Nswap    int64
	Inblock  int64
	Oublock  int64
	Msgsnd   int64
	Msgrcv   int64
	Nsignals int64
	Nvcsw    int64
	Nivcsw   int64
}

type Rlimit struct {
	Cur uint64
	Max uint64
}

type Pid_t int32

type _Gid_t uint32

type dev_t uint64

type Stat_t struct {
	Dev      uint64
	Ino      uint64
	Mode     uint32
	Nlink    int16
	Flag     uint16
	Uid      uint32
	Gid      uint32
	Rdev     uint64
	Ssize    int32
	Atim     Timespec
	Mtim     Timespec
	Ctim     Timespec
	Blksize  int64
	Blocks   int64
	Vfstype  int32
	Vfs      uint32
	Type     uint32
	Gen      uint32
	Reserved [9]uint32
	Padto_ll uint32
	Size     int64
}

type StatxTimestamp struct{}

type Statx_t struct{}

type Dirent struct {
	Offset uint64
	Ino    uint64
	Reclen uint16
	Namlen uint16
	Name   [256]uint8
	_      [4]byte
}

type RawSockaddrInet4 struct {
	Len    uint8
	Family uint8
	Port   uint16
	Addr   [4]byte /* in_addr */
	Zero   [8]uint8
}

type RawSockaddrInet6 struct {
	Len      uint8
	Family   uint8
	Port     uint16
	Flowinfo uint32
	Addr     [16]byte /* in6_addr */
	Scope_id uint32
}

type RawSockaddrUnix struct {
	Len    uint8
	Family uint8
	Path   [1023]uint8
}

type RawSockaddrDatalink struct {
	Len    uint8
	Family uint8
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [120]uint8
}

type RawSockaddr struct {
	Len    uint8
	Family uint8
	Data   [14]uint8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [1012]uint8
}

type _Socklen uint32

type Cmsghdr struct {
	Len   uint32
	Level int32
	Type  int32
}

type ICMPv6Filter struct {
	Filt [8]uint32
}

type Iovec struct {
	Base *byte
	Len  uint64
}

type IPMreq struct {
	Multiaddr [4]byte /* in_addr */
	Interface [4]byte /* in_addr */
}

type IPv6Mreq struct {
	Multiaddr [16]byte /* in6_addr */
	Interface uint32
}

type IPv6MTUInfo struct {
	Addr RawSockaddrInet6
	Mtu  uint32
}

type Linger struct {
	Onoff  int32
	Linger int32
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     int32
	Control    *byte
	Controllen uint32
	Flags      int32
}

const (
	SizeofSockaddrInet4    = 0x10
	SizeofSockaddrInet6    = 0x1c
	SizeofSockaddrAny      = 0x404
	SizeofSockaddrUnix     = 0x401
	SizeofSockaddrDatalink = 0x80
	SizeofLinger           = 0x8
	SizeofIovec            = 0x10
	SizeofIPMreq           = 0x8
	SizeofIPv6Mreq         = 0x14
	SizeofIPv6MTUInfo      = 0x20
	SizeofMsghdr           = 0x30
	SizeofCmsghdr          = 0xc
	SizeofICMPv6Filter     = 0x20
)

const (
	SizeofIfMsghdr = 0x10
)

type IfMsgHdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	Addrlen uint8
	_       [1]byte
}

type FdSet struct {
	Bits [1024]int64
}

type Utsname struct {
	Sysname  [32]byte
	Nodename [32]byte
	Release  [32]byte
	Version  [32]byte
	Machine  [32]byte
}

type Ustat_t struct{}

type Sigset_t struct {
	Set [4]uint64
}

const (
	AT_FDCWD            = -0x2
	AT_REMOVEDIR        = 0x1
	AT_SYMLINK_NOFOLLOW = 0x1
)

type Termios struct {
	Iflag uint32
	Oflag uint32
	Cflag uint32
	Lflag uint32
	Cc    [16]uint8
}

type Termio struct {
	Iflag uint16
	Oflag uint16
	Cflag uint16
	Lflag uint16
	Line  uint8
	Cc    [8]uint8
	_     [1]byte
}

type Winsize struct {
	Row    uint16
	Col    uint16
	Xpixel uint16
	Ypixel uint16
}

type PollFd struct {
	Fd      int32
	Events  uint16
	Revents uint16
}

const (
	POLLERR    = 0x4000
	POLLHUP    = 0x2000
	POLLIN     = 0x1
	POLLNVAL   = 0x8000
	POLLOUT    = 0x2
	POLLPRI    = 0x4
	POLLRDBAND = 0x20
	POLLRDNORM = 0x10
	POLLWRBAND = 0x40
	POLLWRNORM = 0x2
)

type Flock_t struct {
	Type   int16
	Whence int16
	Sysid  uint32
	Pid    int32
	Vfs    int32
	Start  int64
	Len    int64
}

type Fsid_t struct {
	Val [2]uint32
}
type Fsid64_t struct {
	Val [2]uint64
}

type Statfs_t struct {
	Version   int32
	Type      int32
	Bsize     uint64
	Blocks    uint64
	Bfree     uint64
	Bavail    uint64
	Files     uint64
	Ffree     uint64
	Fsid      Fsid64_t
	Vfstype   int32
	Fsize     uint64
	Vfsnumber int32
	Vfsoff    int32
	Vfslen    int32
	Vfsvers   int32
	Fname     [32]uint8
	Fpack     [32]uint8
	Name_max  int32
	_         [4]byte
}

const RNDGETENTCNT = 0x80045200
 07070100000EAB000081A4000000000000000000000001645E367C000031B4000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go   // cgo -godefs types_darwin.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build amd64 && darwin
// +build amd64,darwin

package unix

const (
	SizeofPtr      = 0x8
	SizeofShort    = 0x2
	SizeofInt      = 0x4
	SizeofLong     = 0x8
	SizeofLongLong = 0x8
)

type (
	_C_short     int16
	_C_int       int32
	_C_long      int64
	_C_long_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int64
}

type Timeval struct {
	Sec  int64
	Usec int32
	_    [4]byte
}

type Timeval32 struct {
	Sec  int32
	Usec int32
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int64
	Ixrss    int64
	Idrss    int64
	Isrss    int64
	Minflt   int64
	Majflt   int64
	Nswap    int64
	Inblock  int64
	Oublock  int64
	Msgsnd   int64
	Msgrcv   int64
	Nsignals int64
	Nvcsw    int64
	Nivcsw   int64
}

type Rlimit struct {
	Cur uint64
	Max uint64
}

type _Gid_t uint32

type Stat_t struct {
	Dev     int32
	Mode    uint16
	Nlink   uint16
	Ino     uint64
	Uid     uint32
	Gid     uint32
	Rdev    int32
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	Btim    Timespec
	Size    int64
	Blocks  int64
	Blksize int32
	Flags   uint32
	Gen     uint32
	Lspare  int32
	Qspare  [2]int64
}

type Statfs_t struct {
	Bsize       uint32
	Iosize      int32
	Blocks      uint64
	Bfree       uint64
	Bavail      uint64
	Files       uint64
	Ffree       uint64
	Fsid        Fsid
	Owner       uint32
	Type        uint32
	Flags       uint32
	Fssubtype   uint32
	Fstypename  [16]byte
	Mntonname   [1024]byte
	Mntfromname [1024]byte
	Flags_ext   uint32
	Reserved    [7]uint32
}

type Flock_t struct {
	Start  int64
	Len    int64
	Pid    int32
	Type   int16
	Whence int16
}

type Fstore_t struct {
	Flags      uint32
	Posmode    int32
	Offset     int64
	Length     int64
	Bytesalloc int64
}

type Radvisory_t struct {
	Offset int64
	Count  int32
	_      [4]byte
}

type Fbootstraptransfer_t struct {
	Offset int64
	Length uint64
	Buffer *byte
}

type Log2phys_t struct {
	Flags uint32
	_     [16]byte
}

type Fsid struct {
	Val [2]int32
}

type Dirent struct {
	Ino     uint64
	Seekoff uint64
	Reclen  uint16
	Namlen  uint16
	Type    uint8
	Name    [1024]int8
	_       [3]byte
}

type Attrlist struct {
	Bitmapcount uint16
	Reserved    uint16
	Commonattr  uint32
	Volattr     uint32
	Dirattr     uint32
	Fileattr    uint32
	Forkattr    uint32
}

const (
	PathMax = 0x400
)

type RawSockaddrInet4 struct {
	Len    uint8
	Family uint8
	Port   uint16
	Addr   [4]byte /* in_addr */
	Zero   [8]int8
}

type RawSockaddrInet6 struct {
	Len      uint8
	Family   uint8
	Port     uint16
	Flowinfo uint32
	Addr     [16]byte /* in6_addr */
	Scope_id uint32
}

type RawSockaddrUnix struct {
	Len    uint8
	Family uint8
	Path   [104]int8
}

type RawSockaddrDatalink struct {
	Len    uint8
	Family uint8
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [12]int8
}

type RawSockaddr struct {
	Len    uint8
	Family uint8
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [92]int8
}

type RawSockaddrCtl struct {
	Sc_len      uint8
	Sc_family   uint8
	Ss_sysaddr  uint16
	Sc_id       uint32
	Sc_unit     uint32
	Sc_reserved [5]uint32
}

type RawSockaddrVM struct {
	Len       uint8
	Family    uint8
	Reserved1 uint16
	Port      uint32
	Cid       uint32
}

type XVSockPCB struct {
	Xv_len           uint32
	Xv_vsockpp       uint64
	Xvp_local_cid    uint32
	Xvp_local_port   uint32
	Xvp_remote_cid   uint32
	Xvp_remote_port  uint32
	Xvp_rxcnt        uint32
	Xvp_txcnt        uint32
	Xvp_peer_rxhiwat uint32
	Xvp_peer_rxcnt   uint32
	Xvp_last_pid     int32
	Xvp_gencnt       uint64
	Xv_socket        XSocket
	_                [4]byte
}

type XSocket struct {
	Xso_len      uint32
	Xso_so       uint32
	So_type      int16
	So_options   int16
	So_linger    int16
	So_state     int16
	So_pcb       uint32
	Xso_protocol int32
	Xso_family   int32
	So_qlen      int16
	So_incqlen   int16
	So_qlimit    int16
	So_timeo     int16
	So_error     uint16
	So_pgid      int32
	So_oobmark   uint32
	So_rcv       XSockbuf
	So_snd       XSockbuf
	So_uid       uint32
}

type XSocket64 struct {
	Xso_len      uint32
	_            [8]byte
	So_type      int16
	So_options   int16
	So_linger    int16
	So_state     int16
	_            [8]byte
	Xso_protocol int32
	Xso_family   int32
	So_qlen      int16
	So_incqlen   int16
	So_qlimit    int16
	So_timeo     int16
	So_error     uint16
	So_pgid      int32
	So_oobmark   uint32
	So_rcv       XSockbuf
	So_snd       XSockbuf
	So_uid       uint32
}

type XSockbuf struct {
	Cc    uint32
	Hiwat uint32
	Mbcnt uint32
	Mbmax uint32
	Lowat int32
	Flags int16
	Timeo int16
}

type XVSockPgen struct {
	Len   uint32
	Count uint64
	Gen   uint64
	Sogen uint64
}

type _Socklen uint32

type Xucred struct {
	Version uint32
	Uid     uint32
	Ngroups int16
	Groups  [16]uint32
}

type Linger struct {
	Onoff  int32
	Linger int32
}

type Iovec struct {
	Base *byte
	Len  uint64
}

type IPMreq struct {
	Multiaddr [4]byte /* in_addr */
	Interface [4]byte /* in_addr */
}

type IPMreqn struct {
	Multiaddr [4]byte /* in_addr */
	Address   [4]byte /* in_addr */
	Ifindex   int32
}

type IPv6Mreq struct {
	Multiaddr [16]byte /* in6_addr */
	Interface uint32
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     int32
	Control    *byte
	Controllen uint32
	Flags      int32
}

type Cmsghdr struct {
	Len   uint32
	Level int32
	Type  int32
}

type Inet4Pktinfo struct {
	Ifindex  uint32
	Spec_dst [4]byte /* in_addr */
	Addr     [4]byte /* in_addr */
}

type Inet6Pktinfo struct {
	Addr    [16]byte /* in6_addr */
	Ifindex uint32
}

type IPv6MTUInfo struct {
	Addr RawSockaddrInet6
	Mtu  uint32
}

type ICMPv6Filter struct {
	Filt [8]uint32
}

type TCPConnectionInfo struct {
	State               uint8
	Snd_wscale          uint8
	Rcv_wscale          uint8
	_                   uint8
	Options             uint32
	Flags               uint32
	Rto                 uint32
	Maxseg              uint32
	Snd_ssthresh        uint32
	Snd_cwnd            uint32
	Snd_wnd             uint32
	Snd_sbbytes         uint32
	Rcv_wnd             uint32
	Rttcur              uint32
	Srtt                uint32
	Rttvar              uint32
	Txpackets           uint64
	Txbytes             uint64
	Txretransmitbytes   uint64
	Rxpackets           uint64
	Rxbytes             uint64
	Rxoutoforderbytes   uint64
	Txretransmitpackets uint64
}

const (
	SizeofSockaddrInet4     = 0x10
	SizeofSockaddrInet6     = 0x1c
	SizeofSockaddrAny       = 0x6c
	SizeofSockaddrUnix      = 0x6a
	SizeofSockaddrDatalink  = 0x14
	SizeofSockaddrCtl       = 0x20
	SizeofSockaddrVM        = 0xc
	SizeofXvsockpcb         = 0xa8
	SizeofXSocket           = 0x64
	SizeofXSockbuf          = 0x18
	SizeofXVSockPgen        = 0x20
	SizeofXucred            = 0x4c
	SizeofLinger            = 0x8
	SizeofIovec             = 0x10
	SizeofIPMreq            = 0x8
	SizeofIPMreqn           = 0xc
	SizeofIPv6Mreq          = 0x14
	SizeofMsghdr            = 0x30
	SizeofCmsghdr           = 0xc
	SizeofInet4Pktinfo      = 0xc
	SizeofInet6Pktinfo      = 0x14
	SizeofIPv6MTUInfo       = 0x20
	SizeofICMPv6Filter      = 0x20
	SizeofTCPConnectionInfo = 0x70
)

const (
	PTRACE_TRACEME = 0x0
	PTRACE_CONT    = 0x7
	PTRACE_KILL    = 0x8
)

type Kevent_t struct {
	Ident  uint64
	Filter int16
	Flags  uint16
	Fflags uint32
	Data   int64
	Udata  *byte
}

type FdSet struct {
	Bits [32]int32
}

const (
	SizeofIfMsghdr    = 0x70
	SizeofIfData      = 0x60
	SizeofIfaMsghdr   = 0x14
	SizeofIfmaMsghdr  = 0x10
	SizeofIfmaMsghdr2 = 0x14
	SizeofRtMsghdr    = 0x5c
	SizeofRtMetrics   = 0x38
)

type IfMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	Data    IfData
}

type IfData struct {
	Type       uint8
	Typelen    uint8
	Physical   uint8
	Addrlen    uint8
	Hdrlen     uint8
	Recvquota  uint8
	Xmitquota  uint8
	Unused1    uint8
	Mtu        uint32
	Metric     uint32
	Baudrate   uint32
	Ipackets   uint32
	Ierrors    uint32
	Opackets   uint32
	Oerrors    uint32
	Collisions uint32
	Ibytes     uint32
	Obytes     uint32
	Imcasts    uint32
	Omcasts    uint32
	Iqdrops    uint32
	Noproto    uint32
	Recvtiming uint32
	Xmittiming uint32
	Lastchange Timeval32
	Unused2    uint32
	Hwassist   uint32
	Reserved1  uint32
	Reserved2  uint32
}

type IfaMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	Metric  int32
}

type IfmaMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	_       [2]byte
}

type IfmaMsghdr2 struct {
	Msglen   uint16
	Version  uint8
	Type     uint8
	Addrs    int32
	Flags    int32
	Index    uint16
	Refcount int32
}

type RtMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Index   uint16
	Flags   int32
	Addrs   int32
	Pid     int32
	Seq     int32
	Errno   int32
	Use     int32
	Inits   uint32
	Rmx     RtMetrics
}

type RtMetrics struct {
	Locks    uint32
	Mtu      uint32
	Hopcount uint32
	Expire   int32
	Recvpipe uint32
	Sendpipe uint32
	Ssthresh uint32
	Rtt      uint32
	Rttvar   uint32
	Pksent   uint32
	State    uint32
	Filler   [3]uint32
}

const (
	SizeofBpfVersion = 0x4
	SizeofBpfStat    = 0x8
	SizeofBpfProgram = 0x10
	SizeofBpfInsn    = 0x8
	SizeofBpfHdr     = 0x14
)

type BpfVersion struct {
	Major uint16
	Minor uint16
}

type BpfStat struct {
	Recv uint32
	Drop uint32
}

type BpfProgram struct {
	Len   uint32
	Insns *BpfInsn
}

type BpfInsn struct {
	Code uint16
	Jt   uint8
	Jf   uint8
	K    uint32
}

type BpfHdr struct {
	Tstamp  Timeval32
	Caplen  uint32
	Datalen uint32
	Hdrlen  uint16
	_       [2]byte
}

type Termios struct {
	Iflag  uint64
	Oflag  uint64
	Cflag  uint64
	Lflag  uint64
	Cc     [20]uint8
	Ispeed uint64
	Ospeed uint64
}

type Winsize struct {
	Row    uint16
	Col    uint16
	Xpixel uint16
	Ypixel uint16
}

const (
	AT_FDCWD            = -0x2
	AT_REMOVEDIR        = 0x80
	AT_SYMLINK_FOLLOW   = 0x40
	AT_SYMLINK_NOFOLLOW = 0x20
	AT_EACCESS          = 0x10
)

type PollFd struct {
	Fd      int32
	Events  int16
	Revents int16
}

const (
	POLLERR    = 0x8
	POLLHUP    = 0x10
	POLLIN     = 0x1
	POLLNVAL   = 0x20
	POLLOUT    = 0x4
	POLLPRI    = 0x2
	POLLRDBAND = 0x80
	POLLRDNORM = 0x40
	POLLWRBAND = 0x100
	POLLWRNORM = 0x4
)

type Utsname struct {
	Sysname  [256]byte
	Nodename [256]byte
	Release  [256]byte
	Version  [256]byte
	Machine  [256]byte
}

const SizeofClockinfo = 0x14

type Clockinfo struct {
	Hz      int32
	Tick    int32
	Tickadj int32
	Stathz  int32
	Profhz  int32
}

type CtlInfo struct {
	Id   uint32
	Name [96]byte
}

const SizeofKinfoProc = 0x288

type Eproc struct {
	Paddr   uintptr
	Sess    uintptr
	Pcred   Pcred
	Ucred   Ucred
	Vm      Vmspace
	Ppid    int32
	Pgid    int32
	Jobc    int16
	Tdev    int32
	Tpgid   int32
	Tsess   uintptr
	Wmesg   [8]byte
	Xsize   int32
	Xrssize int16
	Xccount int16
	Xswrss  int16
	Flag    int32
	Login   [12]byte
	Spare   [4]int32
	_       [4]byte
}

type ExternProc struct {
	P_starttime Timeval
	P_vmspace   *Vmspace
	P_sigacts   uintptr
	P_flag      int32
	P_stat      int8
	P_pid       int32
	P_oppid     int32
	P_dupfd     int32
	User_stack  *int8
	Exit_thread *byte
	P_debugger  int32
	Sigwait     int32
	P_estcpu    uint32
	P_cpticks   int32
	P_pctcpu    uint32
	P_wchan     *byte
	P_wmesg     *int8
	P_swtime    uint32
	P_slptime   uint32
	P_realtimer Itimerval
	P_rtime     Timeval
	P_uticks    uint64
	P_sticks    uint64
	P_iticks    uint64
	P_traceflag int32
	P_tracep    uintptr
	P_siglist   int32
	P_textvp    uintptr
	P_holdcnt   int32
	P_sigmask   uint32
	P_sigignore uint32
	P_sigcatch  uint32
	P_priority  uint8
	P_usrpri    uint8
	P_nice      int8
	P_comm      [17]byte
	P_pgrp      uintptr
	P_addr      uintptr
	P_xstat     uint16
	P_acflag    uint16
	P_ru        *Rusage
}

type Itimerval struct {
	Interval Timeval
	Value    Timeval
}

type KinfoProc struct {
	Proc  ExternProc
	Eproc Eproc
}

type Vmspace struct {
	Dummy  int32
	Dummy2 *int8
	Dummy3 [5]int32
	Dummy4 [3]*int8
}

type Pcred struct {
	Pc_lock  [72]int8
	Pc_ucred uintptr
	P_ruid   uint32
	P_svuid  uint32
	P_rgid   uint32
	P_svgid  uint32
	P_refcnt int32
	_        [4]byte
}

type Ucred struct {
	Ref     int32
	Uid     uint32
	Ngroups int16
	Groups  [16]uint32
}

type SysvIpcPerm struct {
	Uid  uint32
	Gid  uint32
	Cuid uint32
	Cgid uint32
	Mode uint16
	_    uint16
	_    int32
}
type SysvShmDesc struct {
	Perm   SysvIpcPerm
	Segsz  uint64
	Lpid   int32
	Cpid   int32
	Nattch uint16
	_      [34]byte
}

const (
	IPC_CREAT   = 0x200
	IPC_EXCL    = 0x400
	IPC_NOWAIT  = 0x800
	IPC_PRIVATE = 0x0
)

const (
	IPC_RMID = 0x0
	IPC_SET  = 0x1
	IPC_STAT = 0x2
)

const (
	SHM_RDONLY = 0x1000
	SHM_RND    = 0x2000
)
07070100000EAC000081A4000000000000000000000001645E367C000031B4000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go   // cgo -godefs types_darwin.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build arm64 && darwin
// +build arm64,darwin

package unix

const (
	SizeofPtr      = 0x8
	SizeofShort    = 0x2
	SizeofInt      = 0x4
	SizeofLong     = 0x8
	SizeofLongLong = 0x8
)

type (
	_C_short     int16
	_C_int       int32
	_C_long      int64
	_C_long_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int64
}

type Timeval struct {
	Sec  int64
	Usec int32
	_    [4]byte
}

type Timeval32 struct {
	Sec  int32
	Usec int32
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int64
	Ixrss    int64
	Idrss    int64
	Isrss    int64
	Minflt   int64
	Majflt   int64
	Nswap    int64
	Inblock  int64
	Oublock  int64
	Msgsnd   int64
	Msgrcv   int64
	Nsignals int64
	Nvcsw    int64
	Nivcsw   int64
}

type Rlimit struct {
	Cur uint64
	Max uint64
}

type _Gid_t uint32

type Stat_t struct {
	Dev     int32
	Mode    uint16
	Nlink   uint16
	Ino     uint64
	Uid     uint32
	Gid     uint32
	Rdev    int32
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	Btim    Timespec
	Size    int64
	Blocks  int64
	Blksize int32
	Flags   uint32
	Gen     uint32
	Lspare  int32
	Qspare  [2]int64
}

type Statfs_t struct {
	Bsize       uint32
	Iosize      int32
	Blocks      uint64
	Bfree       uint64
	Bavail      uint64
	Files       uint64
	Ffree       uint64
	Fsid        Fsid
	Owner       uint32
	Type        uint32
	Flags       uint32
	Fssubtype   uint32
	Fstypename  [16]byte
	Mntonname   [1024]byte
	Mntfromname [1024]byte
	Flags_ext   uint32
	Reserved    [7]uint32
}

type Flock_t struct {
	Start  int64
	Len    int64
	Pid    int32
	Type   int16
	Whence int16
}

type Fstore_t struct {
	Flags      uint32
	Posmode    int32
	Offset     int64
	Length     int64
	Bytesalloc int64
}

type Radvisory_t struct {
	Offset int64
	Count  int32
	_      [4]byte
}

type Fbootstraptransfer_t struct {
	Offset int64
	Length uint64
	Buffer *byte
}

type Log2phys_t struct {
	Flags uint32
	_     [16]byte
}

type Fsid struct {
	Val [2]int32
}

type Dirent struct {
	Ino     uint64
	Seekoff uint64
	Reclen  uint16
	Namlen  uint16
	Type    uint8
	Name    [1024]int8
	_       [3]byte
}

type Attrlist struct {
	Bitmapcount uint16
	Reserved    uint16
	Commonattr  uint32
	Volattr     uint32
	Dirattr     uint32
	Fileattr    uint32
	Forkattr    uint32
}

const (
	PathMax = 0x400
)

type RawSockaddrInet4 struct {
	Len    uint8
	Family uint8
	Port   uint16
	Addr   [4]byte /* in_addr */
	Zero   [8]int8
}

type RawSockaddrInet6 struct {
	Len      uint8
	Family   uint8
	Port     uint16
	Flowinfo uint32
	Addr     [16]byte /* in6_addr */
	Scope_id uint32
}

type RawSockaddrUnix struct {
	Len    uint8
	Family uint8
	Path   [104]int8
}

type RawSockaddrDatalink struct {
	Len    uint8
	Family uint8
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [12]int8
}

type RawSockaddr struct {
	Len    uint8
	Family uint8
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [92]int8
}

type RawSockaddrCtl struct {
	Sc_len      uint8
	Sc_family   uint8
	Ss_sysaddr  uint16
	Sc_id       uint32
	Sc_unit     uint32
	Sc_reserved [5]uint32
}

type RawSockaddrVM struct {
	Len       uint8
	Family    uint8
	Reserved1 uint16
	Port      uint32
	Cid       uint32
}

type XVSockPCB struct {
	Xv_len           uint32
	Xv_vsockpp       uint64
	Xvp_local_cid    uint32
	Xvp_local_port   uint32
	Xvp_remote_cid   uint32
	Xvp_remote_port  uint32
	Xvp_rxcnt        uint32
	Xvp_txcnt        uint32
	Xvp_peer_rxhiwat uint32
	Xvp_peer_rxcnt   uint32
	Xvp_last_pid     int32
	Xvp_gencnt       uint64
	Xv_socket        XSocket
	_                [4]byte
}

type XSocket struct {
	Xso_len      uint32
	Xso_so       uint32
	So_type      int16
	So_options   int16
	So_linger    int16
	So_state     int16
	So_pcb       uint32
	Xso_protocol int32
	Xso_family   int32
	So_qlen      int16
	So_incqlen   int16
	So_qlimit    int16
	So_timeo     int16
	So_error     uint16
	So_pgid      int32
	So_oobmark   uint32
	So_rcv       XSockbuf
	So_snd       XSockbuf
	So_uid       uint32
}

type XSocket64 struct {
	Xso_len      uint32
	_            [8]byte
	So_type      int16
	So_options   int16
	So_linger    int16
	So_state     int16
	_            [8]byte
	Xso_protocol int32
	Xso_family   int32
	So_qlen      int16
	So_incqlen   int16
	So_qlimit    int16
	So_timeo     int16
	So_error     uint16
	So_pgid      int32
	So_oobmark   uint32
	So_rcv       XSockbuf
	So_snd       XSockbuf
	So_uid       uint32
}

type XSockbuf struct {
	Cc    uint32
	Hiwat uint32
	Mbcnt uint32
	Mbmax uint32
	Lowat int32
	Flags int16
	Timeo int16
}

type XVSockPgen struct {
	Len   uint32
	Count uint64
	Gen   uint64
	Sogen uint64
}

type _Socklen uint32

type Xucred struct {
	Version uint32
	Uid     uint32
	Ngroups int16
	Groups  [16]uint32
}

type Linger struct {
	Onoff  int32
	Linger int32
}

type Iovec struct {
	Base *byte
	Len  uint64
}

type IPMreq struct {
	Multiaddr [4]byte /* in_addr */
	Interface [4]byte /* in_addr */
}

type IPMreqn struct {
	Multiaddr [4]byte /* in_addr */
	Address   [4]byte /* in_addr */
	Ifindex   int32
}

type IPv6Mreq struct {
	Multiaddr [16]byte /* in6_addr */
	Interface uint32
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     int32
	Control    *byte
	Controllen uint32
	Flags      int32
}

type Cmsghdr struct {
	Len   uint32
	Level int32
	Type  int32
}

type Inet4Pktinfo struct {
	Ifindex  uint32
	Spec_dst [4]byte /* in_addr */
	Addr     [4]byte /* in_addr */
}

type Inet6Pktinfo struct {
	Addr    [16]byte /* in6_addr */
	Ifindex uint32
}

type IPv6MTUInfo struct {
	Addr RawSockaddrInet6
	Mtu  uint32
}

type ICMPv6Filter struct {
	Filt [8]uint32
}

type TCPConnectionInfo struct {
	State               uint8
	Snd_wscale          uint8
	Rcv_wscale          uint8
	_                   uint8
	Options             uint32
	Flags               uint32
	Rto                 uint32
	Maxseg              uint32
	Snd_ssthresh        uint32
	Snd_cwnd            uint32
	Snd_wnd             uint32
	Snd_sbbytes         uint32
	Rcv_wnd             uint32
	Rttcur              uint32
	Srtt                uint32
	Rttvar              uint32
	Txpackets           uint64
	Txbytes             uint64
	Txretransmitbytes   uint64
	Rxpackets           uint64
	Rxbytes             uint64
	Rxoutoforderbytes   uint64
	Txretransmitpackets uint64
}

const (
	SizeofSockaddrInet4     = 0x10
	SizeofSockaddrInet6     = 0x1c
	SizeofSockaddrAny       = 0x6c
	SizeofSockaddrUnix      = 0x6a
	SizeofSockaddrDatalink  = 0x14
	SizeofSockaddrCtl       = 0x20
	SizeofSockaddrVM        = 0xc
	SizeofXvsockpcb         = 0xa8
	SizeofXSocket           = 0x64
	SizeofXSockbuf          = 0x18
	SizeofXVSockPgen        = 0x20
	SizeofXucred            = 0x4c
	SizeofLinger            = 0x8
	SizeofIovec             = 0x10
	SizeofIPMreq            = 0x8
	SizeofIPMreqn           = 0xc
	SizeofIPv6Mreq          = 0x14
	SizeofMsghdr            = 0x30
	SizeofCmsghdr           = 0xc
	SizeofInet4Pktinfo      = 0xc
	SizeofInet6Pktinfo      = 0x14
	SizeofIPv6MTUInfo       = 0x20
	SizeofICMPv6Filter      = 0x20
	SizeofTCPConnectionInfo = 0x70
)

const (
	PTRACE_TRACEME = 0x0
	PTRACE_CONT    = 0x7
	PTRACE_KILL    = 0x8
)

type Kevent_t struct {
	Ident  uint64
	Filter int16
	Flags  uint16
	Fflags uint32
	Data   int64
	Udata  *byte
}

type FdSet struct {
	Bits [32]int32
}

const (
	SizeofIfMsghdr    = 0x70
	SizeofIfData      = 0x60
	SizeofIfaMsghdr   = 0x14
	SizeofIfmaMsghdr  = 0x10
	SizeofIfmaMsghdr2 = 0x14
	SizeofRtMsghdr    = 0x5c
	SizeofRtMetrics   = 0x38
)

type IfMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	Data    IfData
}

type IfData struct {
	Type       uint8
	Typelen    uint8
	Physical   uint8
	Addrlen    uint8
	Hdrlen     uint8
	Recvquota  uint8
	Xmitquota  uint8
	Unused1    uint8
	Mtu        uint32
	Metric     uint32
	Baudrate   uint32
	Ipackets   uint32
	Ierrors    uint32
	Opackets   uint32
	Oerrors    uint32
	Collisions uint32
	Ibytes     uint32
	Obytes     uint32
	Imcasts    uint32
	Omcasts    uint32
	Iqdrops    uint32
	Noproto    uint32
	Recvtiming uint32
	Xmittiming uint32
	Lastchange Timeval32
	Unused2    uint32
	Hwassist   uint32
	Reserved1  uint32
	Reserved2  uint32
}

type IfaMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	Metric  int32
}

type IfmaMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	_       [2]byte
}

type IfmaMsghdr2 struct {
	Msglen   uint16
	Version  uint8
	Type     uint8
	Addrs    int32
	Flags    int32
	Index    uint16
	Refcount int32
}

type RtMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Index   uint16
	Flags   int32
	Addrs   int32
	Pid     int32
	Seq     int32
	Errno   int32
	Use     int32
	Inits   uint32
	Rmx     RtMetrics
}

type RtMetrics struct {
	Locks    uint32
	Mtu      uint32
	Hopcount uint32
	Expire   int32
	Recvpipe uint32
	Sendpipe uint32
	Ssthresh uint32
	Rtt      uint32
	Rttvar   uint32
	Pksent   uint32
	State    uint32
	Filler   [3]uint32
}

const (
	SizeofBpfVersion = 0x4
	SizeofBpfStat    = 0x8
	SizeofBpfProgram = 0x10
	SizeofBpfInsn    = 0x8
	SizeofBpfHdr     = 0x14
)

type BpfVersion struct {
	Major uint16
	Minor uint16
}

type BpfStat struct {
	Recv uint32
	Drop uint32
}

type BpfProgram struct {
	Len   uint32
	Insns *BpfInsn
}

type BpfInsn struct {
	Code uint16
	Jt   uint8
	Jf   uint8
	K    uint32
}

type BpfHdr struct {
	Tstamp  Timeval32
	Caplen  uint32
	Datalen uint32
	Hdrlen  uint16
	_       [2]byte
}

type Termios struct {
	Iflag  uint64
	Oflag  uint64
	Cflag  uint64
	Lflag  uint64
	Cc     [20]uint8
	Ispeed uint64
	Ospeed uint64
}

type Winsize struct {
	Row    uint16
	Col    uint16
	Xpixel uint16
	Ypixel uint16
}

const (
	AT_FDCWD            = -0x2
	AT_REMOVEDIR        = 0x80
	AT_SYMLINK_FOLLOW   = 0x40
	AT_SYMLINK_NOFOLLOW = 0x20
	AT_EACCESS          = 0x10
)

type PollFd struct {
	Fd      int32
	Events  int16
	Revents int16
}

const (
	POLLERR    = 0x8
	POLLHUP    = 0x10
	POLLIN     = 0x1
	POLLNVAL   = 0x20
	POLLOUT    = 0x4
	POLLPRI    = 0x2
	POLLRDBAND = 0x80
	POLLRDNORM = 0x40
	POLLWRBAND = 0x100
	POLLWRNORM = 0x4
)

type Utsname struct {
	Sysname  [256]byte
	Nodename [256]byte
	Release  [256]byte
	Version  [256]byte
	Machine  [256]byte
}

const SizeofClockinfo = 0x14

type Clockinfo struct {
	Hz      int32
	Tick    int32
	Tickadj int32
	Stathz  int32
	Profhz  int32
}

type CtlInfo struct {
	Id   uint32
	Name [96]byte
}

const SizeofKinfoProc = 0x288

type Eproc struct {
	Paddr   uintptr
	Sess    uintptr
	Pcred   Pcred
	Ucred   Ucred
	Vm      Vmspace
	Ppid    int32
	Pgid    int32
	Jobc    int16
	Tdev    int32
	Tpgid   int32
	Tsess   uintptr
	Wmesg   [8]byte
	Xsize   int32
	Xrssize int16
	Xccount int16
	Xswrss  int16
	Flag    int32
	Login   [12]byte
	Spare   [4]int32
	_       [4]byte
}

type ExternProc struct {
	P_starttime Timeval
	P_vmspace   *Vmspace
	P_sigacts   uintptr
	P_flag      int32
	P_stat      int8
	P_pid       int32
	P_oppid     int32
	P_dupfd     int32
	User_stack  *int8
	Exit_thread *byte
	P_debugger  int32
	Sigwait     int32
	P_estcpu    uint32
	P_cpticks   int32
	P_pctcpu    uint32
	P_wchan     *byte
	P_wmesg     *int8
	P_swtime    uint32
	P_slptime   uint32
	P_realtimer Itimerval
	P_rtime     Timeval
	P_uticks    uint64
	P_sticks    uint64
	P_iticks    uint64
	P_traceflag int32
	P_tracep    uintptr
	P_siglist   int32
	P_textvp    uintptr
	P_holdcnt   int32
	P_sigmask   uint32
	P_sigignore uint32
	P_sigcatch  uint32
	P_priority  uint8
	P_usrpri    uint8
	P_nice      int8
	P_comm      [17]byte
	P_pgrp      uintptr
	P_addr      uintptr
	P_xstat     uint16
	P_acflag    uint16
	P_ru        *Rusage
}

type Itimerval struct {
	Interval Timeval
	Value    Timeval
}

type KinfoProc struct {
	Proc  ExternProc
	Eproc Eproc
}

type Vmspace struct {
	Dummy  int32
	Dummy2 *int8
	Dummy3 [5]int32
	Dummy4 [3]*int8
}

type Pcred struct {
	Pc_lock  [72]int8
	Pc_ucred uintptr
	P_ruid   uint32
	P_svuid  uint32
	P_rgid   uint32
	P_svgid  uint32
	P_refcnt int32
	_        [4]byte
}

type Ucred struct {
	Ref     int32
	Uid     uint32
	Ngroups int16
	Groups  [16]uint32
}

type SysvIpcPerm struct {
	Uid  uint32
	Gid  uint32
	Cuid uint32
	Cgid uint32
	Mode uint16
	_    uint16
	_    int32
}
type SysvShmDesc struct {
	Perm   SysvIpcPerm
	Segsz  uint64
	Lpid   int32
	Cpid   int32
	Nattch uint16
	_      [34]byte
}

const (
	IPC_CREAT   = 0x200
	IPC_EXCL    = 0x400
	IPC_NOWAIT  = 0x800
	IPC_PRIVATE = 0x0
)

const (
	IPC_RMID = 0x0
	IPC_SET  = 0x1
	IPC_STAT = 0x2
)

const (
	SHM_RDONLY = 0x1000
	SHM_RND    = 0x2000
)
07070100000EAD000081A4000000000000000000000001645E367C00001BB9000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go    // cgo -godefs types_dragonfly.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build amd64 && dragonfly
// +build amd64,dragonfly

package unix

const (
	SizeofPtr      = 0x8
	SizeofShort    = 0x2
	SizeofInt      = 0x4
	SizeofLong     = 0x8
	SizeofLongLong = 0x8
)

type (
	_C_short     int16
	_C_int       int32
	_C_long      int64
	_C_long_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int64
}

type Timeval struct {
	Sec  int64
	Usec int64
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int64
	Ixrss    int64
	Idrss    int64
	Isrss    int64
	Minflt   int64
	Majflt   int64
	Nswap    int64
	Inblock  int64
	Oublock  int64
	Msgsnd   int64
	Msgrcv   int64
	Nsignals int64
	Nvcsw    int64
	Nivcsw   int64
}

type Rlimit struct {
	Cur int64
	Max int64
}

type _Gid_t uint32

type Stat_t struct {
	Ino     uint64
	Nlink   uint32
	Dev     uint32
	Mode    uint16
	_1      uint16
	Uid     uint32
	Gid     uint32
	Rdev    uint32
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	Size    int64
	Blocks  int64
	_       uint32
	Flags   uint32
	Gen     uint32
	Lspare  int32
	Blksize int64
	Qspare2 int64
}

type Statfs_t struct {
	Spare2      int64
	Bsize       int64
	Iosize      int64
	Blocks      int64
	Bfree       int64
	Bavail      int64
	Files       int64
	Ffree       int64
	Fsid        Fsid
	Owner       uint32
	Type        int32
	Flags       int32
	Syncwrites  int64
	Asyncwrites int64
	Fstypename  [16]byte
	Mntonname   [80]byte
	Syncreads   int64
	Asyncreads  int64
	Spares1     int16
	Mntfromname [80]byte
	Spares2     int16
	Spare       [2]int64
}

type Flock_t struct {
	Start  int64
	Len    int64
	Pid    int32
	Type   int16
	Whence int16
}

type Dirent struct {
	Fileno  uint64
	Namlen  uint16
	Type    uint8
	Unused1 uint8
	Unused2 uint32
	Name    [256]int8
}

type Fsid struct {
	Val [2]int32
}

const (
	PathMax = 0x400
)

type RawSockaddrInet4 struct {
	Len    uint8
	Family uint8
	Port   uint16
	Addr   [4]byte /* in_addr */
	Zero   [8]int8
}

type RawSockaddrInet6 struct {
	Len      uint8
	Family   uint8
	Port     uint16
	Flowinfo uint32
	Addr     [16]byte /* in6_addr */
	Scope_id uint32
}

type RawSockaddrUnix struct {
	Len    uint8
	Family uint8
	Path   [104]int8
}

type RawSockaddrDatalink struct {
	Len    uint8
	Family uint8
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [12]int8
	Rcf    uint16
	Route  [16]uint16
}

type RawSockaddr struct {
	Len    uint8
	Family uint8
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [92]int8
}

type _Socklen uint32

type Linger struct {
	Onoff  int32
	Linger int32
}

type Iovec struct {
	Base *byte
	Len  uint64
}

type IPMreq struct {
	Multiaddr [4]byte /* in_addr */
	Interface [4]byte /* in_addr */
}

type IPv6Mreq struct {
	Multiaddr [16]byte /* in6_addr */
	Interface uint32
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     int32
	Control    *byte
	Controllen uint32
	Flags      int32
}

type Cmsghdr struct {
	Len   uint32
	Level int32
	Type  int32
}

type Inet6Pktinfo struct {
	Addr    [16]byte /* in6_addr */
	Ifindex uint32
}

type IPv6MTUInfo struct {
	Addr RawSockaddrInet6
	Mtu  uint32
}

type ICMPv6Filter struct {
	Filt [8]uint32
}

const (
	SizeofSockaddrInet4    = 0x10
	SizeofSockaddrInet6    = 0x1c
	SizeofSockaddrAny      = 0x6c
	SizeofSockaddrUnix     = 0x6a
	SizeofSockaddrDatalink = 0x36
	SizeofLinger           = 0x8
	SizeofIovec            = 0x10
	SizeofIPMreq           = 0x8
	SizeofIPv6Mreq         = 0x14
	SizeofMsghdr           = 0x30
	SizeofCmsghdr          = 0xc
	SizeofInet6Pktinfo     = 0x14
	SizeofIPv6MTUInfo      = 0x20
	SizeofICMPv6Filter     = 0x20
)

const (
	PTRACE_TRACEME = 0x0
	PTRACE_CONT    = 0x7
	PTRACE_KILL    = 0x8
)

type Kevent_t struct {
	Ident  uint64
	Filter int16
	Flags  uint16
	Fflags uint32
	Data   int64
	Udata  *byte
}

type FdSet struct {
	Bits [16]uint64
}

const (
	SizeofIfMsghdr         = 0xb0
	SizeofIfData           = 0xa0
	SizeofIfaMsghdr        = 0x18
	SizeofIfmaMsghdr       = 0x10
	SizeofIfAnnounceMsghdr = 0x18
	SizeofRtMsghdr         = 0x98
	SizeofRtMetrics        = 0x70
)

type IfMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Index   uint16
	Flags   int32
	Addrs   int32
	Data    IfData
}

type IfData struct {
	Type       uint8
	Physical   uint8
	Addrlen    uint8
	Hdrlen     uint8
	Recvquota  uint8
	Xmitquota  uint8
	Mtu        uint64
	Metric     uint64
	Link_state uint64
	Baudrate   uint64
	Ipackets   uint64
	Ierrors    uint64
	Opackets   uint64
	Oerrors    uint64
	Collisions uint64
	Ibytes     uint64
	Obytes     uint64
	Imcasts    uint64
	Omcasts    uint64
	Iqdrops    uint64
	Noproto    uint64
	Hwassist   uint64
	Oqdrops    uint64
	Lastchange Timeval
}

type IfaMsghdr struct {
	Msglen    uint16
	Version   uint8
	Type      uint8
	Index     uint16
	Flags     int32
	Addrs     int32
	Addrflags int32
	Metric    int32
}

type IfmaMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Index   uint16
	Flags   int32
	Addrs   int32
}

type IfAnnounceMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Index   uint16
	Name    [16]int8
	What    uint16
}

type RtMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Index   uint16
	Flags   int32
	Addrs   int32
	Pid     int32
	Seq     int32
	Errno   int32
	Use     int32
	Inits   uint64
	Rmx     RtMetrics
}

type RtMetrics struct {
	Locks     uint64
	Mtu       uint64
	Pksent    uint64
	Expire    uint64
	Sendpipe  uint64
	Ssthresh  uint64
	Rtt       uint64
	Rttvar    uint64
	Recvpipe  uint64
	Hopcount  uint64
	Mssopt    uint16
	Pad       uint16
	Msl       uint64
	Iwmaxsegs uint64
	Iwcapsegs uint64
}

const (
	SizeofBpfVersion = 0x4
	SizeofBpfStat    = 0x8
	SizeofBpfProgram = 0x10
	SizeofBpfInsn    = 0x8
	SizeofBpfHdr     = 0x20
)

type BpfVersion struct {
	Major uint16
	Minor uint16
}

type BpfStat struct {
	Recv uint32
	Drop uint32
}

type BpfProgram struct {
	Len   uint32
	Insns *BpfInsn
}

type BpfInsn struct {
	Code uint16
	Jt   uint8
	Jf   uint8
	K    uint32
}

type BpfHdr struct {
	Tstamp  Timeval
	Caplen  uint32
	Datalen uint32
	Hdrlen  uint16
	_       [6]byte
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Cc     [20]uint8
	Ispeed uint32
	Ospeed uint32
}

type Winsize struct {
	Row    uint16
	Col    uint16
	Xpixel uint16
	Ypixel uint16
}

const (
	AT_FDCWD            = 0xfffafdcd
	AT_SYMLINK_NOFOLLOW = 0x1
	AT_REMOVEDIR        = 0x2
	AT_EACCESS          = 0x4
	AT_SYMLINK_FOLLOW   = 0x8
)

type PollFd struct {
	Fd      int32
	Events  int16
	Revents int16
}

const (
	POLLERR    = 0x8
	POLLHUP    = 0x10
	POLLIN     = 0x1
	POLLNVAL   = 0x20
	POLLOUT    = 0x4
	POLLPRI    = 0x2
	POLLRDBAND = 0x80
	POLLRDNORM = 0x40
	POLLWRBAND = 0x100
	POLLWRNORM = 0x4
)

type Utsname struct {
	Sysname  [32]byte
	Nodename [32]byte
	Release  [32]byte
	Version  [32]byte
	Machine  [32]byte
}

const SizeofClockinfo = 0x14

type Clockinfo struct {
	Hz      int32
	Tick    int32
	Tickadj int32
	Stathz  int32
	Profhz  int32
}
   07070100000EAE000081A4000000000000000000000001645E367C00002698000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go    // cgo -godefs types_freebsd.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build 386 && freebsd
// +build 386,freebsd

package unix

const (
	SizeofPtr      = 0x4
	SizeofShort    = 0x2
	SizeofInt      = 0x4
	SizeofLong     = 0x4
	SizeofLongLong = 0x8
)

type (
	_C_short     int16
	_C_int       int32
	_C_long      int32
	_C_long_long int64
)

type Timespec struct {
	Sec  int32
	Nsec int32
}

type Timeval struct {
	Sec  int32
	Usec int32
}

type Time_t int32

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int32
	Ixrss    int32
	Idrss    int32
	Isrss    int32
	Minflt   int32
	Majflt   int32
	Nswap    int32
	Inblock  int32
	Oublock  int32
	Msgsnd   int32
	Msgrcv   int32
	Nsignals int32
	Nvcsw    int32
	Nivcsw   int32
}

type Rlimit struct {
	Cur int64
	Max int64
}

type _Gid_t uint32

const (
	_statfsVersion = 0x20140518
	_dirblksiz     = 0x400
)

type Stat_t struct {
	Dev     uint64
	Ino     uint64
	Nlink   uint64
	Mode    uint16
	_0      int16
	Uid     uint32
	Gid     uint32
	_1      int32
	Rdev    uint64
	_       int32
	Atim    Timespec
	_       int32
	Mtim    Timespec
	_       int32
	Ctim    Timespec
	_       int32
	Btim    Timespec
	Size    int64
	Blocks  int64
	Blksize int32
	Flags   uint32
	Gen     uint64
	Spare   [10]uint64
}

type Statfs_t struct {
	Version     uint32
	Type        uint32
	Flags       uint64
	Bsize       uint64
	Iosize      uint64
	Blocks      uint64
	Bfree       uint64
	Bavail      int64
	Files       uint64
	Ffree       int64
	Syncwrites  uint64
	Asyncwrites uint64
	Syncreads   uint64
	Asyncreads  uint64
	Spare       [10]uint64
	Namemax     uint32
	Owner       uint32
	Fsid        Fsid
	Charspare   [80]int8
	Fstypename  [16]byte
	Mntfromname [1024]byte
	Mntonname   [1024]byte
}

type Flock_t struct {
	Start  int64
	Len    int64
	Pid    int32
	Type   int16
	Whence int16
	Sysid  int32
}

type Dirent struct {
	Fileno uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Pad0   uint8
	Namlen uint16
	Pad1   uint16
	Name   [256]int8
}

type Fsid struct {
	Val [2]int32
}

const (
	PathMax = 0x400
)

const (
	FADV_NORMAL     = 0x0
	FADV_RANDOM     = 0x1
	FADV_SEQUENTIAL = 0x2
	FADV_WILLNEED   = 0x3
	FADV_DONTNEED   = 0x4
	FADV_NOREUSE    = 0x5
)

type RawSockaddrInet4 struct {
	Len    uint8
	Family uint8
	Port   uint16
	Addr   [4]byte /* in_addr */
	Zero   [8]int8
}

type RawSockaddrInet6 struct {
	Len      uint8
	Family   uint8
	Port     uint16
	Flowinfo uint32
	Addr     [16]byte /* in6_addr */
	Scope_id uint32
}

type RawSockaddrUnix struct {
	Len    uint8
	Family uint8
	Path   [104]int8
}

type RawSockaddrDatalink struct {
	Len    uint8
	Family uint8
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [46]int8
}

type RawSockaddr struct {
	Len    uint8
	Family uint8
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [92]int8
}

type _Socklen uint32

type Xucred struct {
	Version uint32
	Uid     uint32
	Ngroups int16
	Groups  [16]uint32
	_       *byte
}

type Linger struct {
	Onoff  int32
	Linger int32
}

type Iovec struct {
	Base *byte
	Len  uint32
}

type IPMreq struct {
	Multiaddr [4]byte /* in_addr */
	Interface [4]byte /* in_addr */
}

type IPMreqn struct {
	Multiaddr [4]byte /* in_addr */
	Address   [4]byte /* in_addr */
	Ifindex   int32
}

type IPv6Mreq struct {
	Multiaddr [16]byte /* in6_addr */
	Interface uint32
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     int32
	Control    *byte
	Controllen uint32
	Flags      int32
}

type Cmsghdr struct {
	Len   uint32
	Level int32
	Type  int32
}

type Inet6Pktinfo struct {
	Addr    [16]byte /* in6_addr */
	Ifindex uint32
}

type IPv6MTUInfo struct {
	Addr RawSockaddrInet6
	Mtu  uint32
}

type ICMPv6Filter struct {
	Filt [8]uint32
}

const (
	SizeofSockaddrInet4    = 0x10
	SizeofSockaddrInet6    = 0x1c
	SizeofSockaddrAny      = 0x6c
	SizeofSockaddrUnix     = 0x6a
	SizeofSockaddrDatalink = 0x36
	SizeofXucred           = 0x50
	SizeofLinger           = 0x8
	SizeofIovec            = 0x8
	SizeofIPMreq           = 0x8
	SizeofIPMreqn          = 0xc
	SizeofIPv6Mreq         = 0x14
	SizeofMsghdr           = 0x1c
	SizeofCmsghdr          = 0xc
	SizeofInet6Pktinfo     = 0x14
	SizeofIPv6MTUInfo      = 0x20
	SizeofICMPv6Filter     = 0x20
)

const (
	PTRACE_TRACEME = 0x0
	PTRACE_CONT    = 0x7
	PTRACE_KILL    = 0x8
)

type PtraceLwpInfoStruct struct {
	Lwpid        int32
	Event        int32
	Flags        int32
	Sigmask      Sigset_t
	Siglist      Sigset_t
	Siginfo      __PtraceSiginfo
	Tdname       [20]int8
	Child_pid    int32
	Syscall_code uint32
	Syscall_narg uint32
}

type __Siginfo struct {
	Signo  int32
	Errno  int32
	Code   int32
	Pid    int32
	Uid    uint32
	Status int32
	Addr   *byte
	Value  [4]byte
	_      [32]byte
}
type __PtraceSiginfo struct {
	Signo  int32
	Errno  int32
	Code   int32
	Pid    int32
	Uid    uint32
	Status int32
	Addr   uintptr
	Value  [4]byte
	_      [32]byte
}

type Sigset_t struct {
	Val [4]uint32
}

type Reg struct {
	Fs     uint32
	Es     uint32
	Ds     uint32
	Edi    uint32
	Esi    uint32
	Ebp    uint32
	Isp    uint32
	Ebx    uint32
	Edx    uint32
	Ecx    uint32
	Eax    uint32
	Trapno uint32
	Err    uint32
	Eip    uint32
	Cs     uint32
	Eflags uint32
	Esp    uint32
	Ss     uint32
	Gs     uint32
}

type FpReg struct {
	Env   [7]uint32
	Acc   [8][10]uint8
	Ex_sw uint32
	Pad   [64]uint8
}

type FpExtendedPrecision struct{}

type PtraceIoDesc struct {
	Op   int32
	Offs uintptr
	Addr *byte
	Len  uint32
}

type Kevent_t struct {
	Ident  uint32
	Filter int16
	Flags  uint16
	Fflags uint32
	Data   int64
	Udata  *byte
	Ext    [4]uint64
}

type FdSet struct {
	Bits [32]uint32
}

const (
	sizeofIfMsghdr         = 0xa8
	SizeofIfMsghdr         = 0x60
	sizeofIfData           = 0x98
	SizeofIfData           = 0x50
	SizeofIfaMsghdr        = 0x14
	SizeofIfmaMsghdr       = 0x10
	SizeofIfAnnounceMsghdr = 0x18
	SizeofRtMsghdr         = 0x5c
	SizeofRtMetrics        = 0x38
)

type ifMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	_       uint16
	Data    ifData
}

type IfMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	Data    IfData
}

type ifData struct {
	Type       uint8
	Physical   uint8
	Addrlen    uint8
	Hdrlen     uint8
	Link_state uint8
	Vhid       uint8
	Datalen    uint16
	Mtu        uint32
	Metric     uint32
	Baudrate   uint64
	Ipackets   uint64
	Ierrors    uint64
	Opackets   uint64
	Oerrors    uint64
	Collisions uint64
	Ibytes     uint64
	Obytes     uint64
	Imcasts    uint64
	Omcasts    uint64
	Iqdrops    uint64
	Oqdrops    uint64
	Noproto    uint64
	Hwassist   uint64
	_          [8]byte
	_          [16]byte
}

type IfData struct {
	Type        uint8
	Physical    uint8
	Addrlen     uint8
	Hdrlen      uint8
	Link_state  uint8
	Spare_char1 uint8
	Spare_char2 uint8
	Datalen     uint8
	Mtu         uint32
	Metric      uint32
	Baudrate    uint32
	Ipackets    uint32
	Ierrors     uint32
	Opackets    uint32
	Oerrors     uint32
	Collisions  uint32
	Ibytes      uint32
	Obytes      uint32
	Imcasts     uint32
	Omcasts     uint32
	Iqdrops     uint32
	Noproto     uint32
	Hwassist    uint32
	Epoch       int32
	Lastchange  Timeval
}

type IfaMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	_       uint16
	Metric  int32
}

type IfmaMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	_       uint16
}

type IfAnnounceMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Index   uint16
	Name    [16]int8
	What    uint16
}

type RtMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Index   uint16
	_       uint16
	Flags   int32
	Addrs   int32
	Pid     int32
	Seq     int32
	Errno   int32
	Fmask   int32
	Inits   uint32
	Rmx     RtMetrics
}

type RtMetrics struct {
	Locks    uint32
	Mtu      uint32
	Hopcount uint32
	Expire   uint32
	Recvpipe uint32
	Sendpipe uint32
	Ssthresh uint32
	Rtt      uint32
	Rttvar   uint32
	Pksent   uint32
	Weight   uint32
	Filler   [3]uint32
}

const (
	SizeofBpfVersion    = 0x4
	SizeofBpfStat       = 0x8
	SizeofBpfZbuf       = 0xc
	SizeofBpfProgram    = 0x8
	SizeofBpfInsn       = 0x8
	SizeofBpfHdr        = 0x14
	SizeofBpfZbufHeader = 0x20
)

type BpfVersion struct {
	Major uint16
	Minor uint16
}

type BpfStat struct {
	Recv uint32
	Drop uint32
}

type BpfZbuf struct {
	Bufa   *byte
	Bufb   *byte
	Buflen uint32
}

type BpfProgram struct {
	Len   uint32
	Insns *BpfInsn
}

type BpfInsn struct {
	Code uint16
	Jt   uint8
	Jf   uint8
	K    uint32
}

type BpfHdr struct {
	Tstamp  Timeval
	Caplen  uint32
	Datalen uint32
	Hdrlen  uint16
	_       [2]byte
}

type BpfZbufHeader struct {
	Kernel_gen uint32
	Kernel_len uint32
	User_gen   uint32
	_          [5]uint32
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Cc     [20]uint8
	Ispeed uint32
	Ospeed uint32
}

type Winsize struct {
	Row    uint16
	Col    uint16
	Xpixel uint16
	Ypixel uint16
}

const (
	AT_FDCWD            = -0x64
	AT_EACCESS          = 0x100
	AT_SYMLINK_NOFOLLOW = 0x200
	AT_SYMLINK_FOLLOW   = 0x400
	AT_REMOVEDIR        = 0x800
)

type PollFd struct {
	Fd      int32
	Events  int16
	Revents int16
}

const (
	POLLERR      = 0x8
	POLLHUP      = 0x10
	POLLIN       = 0x1
	POLLINIGNEOF = 0x2000
	POLLNVAL     = 0x20
	POLLOUT      = 0x4
	POLLPRI      = 0x2
	POLLRDBAND   = 0x80
	POLLRDNORM   = 0x40
	POLLWRBAND   = 0x100
	POLLWRNORM   = 0x4
)

type CapRights struct {
	Rights [2]uint64
}

type Utsname struct {
	Sysname  [256]byte
	Nodename [256]byte
	Release  [256]byte
	Version  [256]byte
	Machine  [256]byte
}

const SizeofClockinfo = 0x14

type Clockinfo struct {
	Hz     int32
	Tick   int32
	Spare  int32
	Stathz int32
	Profhz int32
}
07070100000EAF000081A4000000000000000000000001645E367C000026D1000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go  // cgo -godefs types_freebsd.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build amd64 && freebsd
// +build amd64,freebsd

package unix

const (
	SizeofPtr      = 0x8
	SizeofShort    = 0x2
	SizeofInt      = 0x4
	SizeofLong     = 0x8
	SizeofLongLong = 0x8
)

type (
	_C_short     int16
	_C_int       int32
	_C_long      int64
	_C_long_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int64
}

type Timeval struct {
	Sec  int64
	Usec int64
}

type Time_t int64

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int64
	Ixrss    int64
	Idrss    int64
	Isrss    int64
	Minflt   int64
	Majflt   int64
	Nswap    int64
	Inblock  int64
	Oublock  int64
	Msgsnd   int64
	Msgrcv   int64
	Nsignals int64
	Nvcsw    int64
	Nivcsw   int64
}

type Rlimit struct {
	Cur int64
	Max int64
}

type _Gid_t uint32

const (
	_statfsVersion = 0x20140518
	_dirblksiz     = 0x400
)

type Stat_t struct {
	Dev     uint64
	Ino     uint64
	Nlink   uint64
	Mode    uint16
	_0      int16
	Uid     uint32
	Gid     uint32
	_1      int32
	Rdev    uint64
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	Btim    Timespec
	Size    int64
	Blocks  int64
	Blksize int32
	Flags   uint32
	Gen     uint64
	Spare   [10]uint64
}

type Statfs_t struct {
	Version     uint32
	Type        uint32
	Flags       uint64
	Bsize       uint64
	Iosize      uint64
	Blocks      uint64
	Bfree       uint64
	Bavail      int64
	Files       uint64
	Ffree       int64
	Syncwrites  uint64
	Asyncwrites uint64
	Syncreads   uint64
	Asyncreads  uint64
	Spare       [10]uint64
	Namemax     uint32
	Owner       uint32
	Fsid        Fsid
	Charspare   [80]int8
	Fstypename  [16]byte
	Mntfromname [1024]byte
	Mntonname   [1024]byte
}

type Flock_t struct {
	Start  int64
	Len    int64
	Pid    int32
	Type   int16
	Whence int16
	Sysid  int32
	_      [4]byte
}

type Dirent struct {
	Fileno uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Pad0   uint8
	Namlen uint16
	Pad1   uint16
	Name   [256]int8
}

type Fsid struct {
	Val [2]int32
}

const (
	PathMax = 0x400
)

const (
	FADV_NORMAL     = 0x0
	FADV_RANDOM     = 0x1
	FADV_SEQUENTIAL = 0x2
	FADV_WILLNEED   = 0x3
	FADV_DONTNEED   = 0x4
	FADV_NOREUSE    = 0x5
)

type RawSockaddrInet4 struct {
	Len    uint8
	Family uint8
	Port   uint16
	Addr   [4]byte /* in_addr */
	Zero   [8]int8
}

type RawSockaddrInet6 struct {
	Len      uint8
	Family   uint8
	Port     uint16
	Flowinfo uint32
	Addr     [16]byte /* in6_addr */
	Scope_id uint32
}

type RawSockaddrUnix struct {
	Len    uint8
	Family uint8
	Path   [104]int8
}

type RawSockaddrDatalink struct {
	Len    uint8
	Family uint8
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [46]int8
}

type RawSockaddr struct {
	Len    uint8
	Family uint8
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [92]int8
}

type _Socklen uint32

type Xucred struct {
	Version uint32
	Uid     uint32
	Ngroups int16
	Groups  [16]uint32
	_       *byte
}

type Linger struct {
	Onoff  int32
	Linger int32
}

type Iovec struct {
	Base *byte
	Len  uint64
}

type IPMreq struct {
	Multiaddr [4]byte /* in_addr */
	Interface [4]byte /* in_addr */
}

type IPMreqn struct {
	Multiaddr [4]byte /* in_addr */
	Address   [4]byte /* in_addr */
	Ifindex   int32
}

type IPv6Mreq struct {
	Multiaddr [16]byte /* in6_addr */
	Interface uint32
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     int32
	Control    *byte
	Controllen uint32
	Flags      int32
}

type Cmsghdr struct {
	Len   uint32
	Level int32
	Type  int32
}

type Inet6Pktinfo struct {
	Addr    [16]byte /* in6_addr */
	Ifindex uint32
}

type IPv6MTUInfo struct {
	Addr RawSockaddrInet6
	Mtu  uint32
}

type ICMPv6Filter struct {
	Filt [8]uint32
}

const (
	SizeofSockaddrInet4    = 0x10
	SizeofSockaddrInet6    = 0x1c
	SizeofSockaddrAny      = 0x6c
	SizeofSockaddrUnix     = 0x6a
	SizeofSockaddrDatalink = 0x36
	SizeofXucred           = 0x58
	SizeofLinger           = 0x8
	SizeofIovec            = 0x10
	SizeofIPMreq           = 0x8
	SizeofIPMreqn          = 0xc
	SizeofIPv6Mreq         = 0x14
	SizeofMsghdr           = 0x30
	SizeofCmsghdr          = 0xc
	SizeofInet6Pktinfo     = 0x14
	SizeofIPv6MTUInfo      = 0x20
	SizeofICMPv6Filter     = 0x20
)

const (
	PTRACE_TRACEME = 0x0
	PTRACE_CONT    = 0x7
	PTRACE_KILL    = 0x8
)

type PtraceLwpInfoStruct struct {
	Lwpid        int32
	Event        int32
	Flags        int32
	Sigmask      Sigset_t
	Siglist      Sigset_t
	Siginfo      __PtraceSiginfo
	Tdname       [20]int8
	Child_pid    int32
	Syscall_code uint32
	Syscall_narg uint32
}

type __Siginfo struct {
	Signo  int32
	Errno  int32
	Code   int32
	Pid    int32
	Uid    uint32
	Status int32
	Addr   *byte
	Value  [8]byte
	_      [40]byte
}

type __PtraceSiginfo struct {
	Signo  int32
	Errno  int32
	Code   int32
	Pid    int32
	Uid    uint32
	Status int32
	Addr   uintptr
	Value  [8]byte
	_      [40]byte
}

type Sigset_t struct {
	Val [4]uint32
}

type Reg struct {
	R15    int64
	R14    int64
	R13    int64
	R12    int64
	R11    int64
	R10    int64
	R9     int64
	R8     int64
	Rdi    int64
	Rsi    int64
	Rbp    int64
	Rbx    int64
	Rdx    int64
	Rcx    int64
	Rax    int64
	Trapno uint32
	Fs     uint16
	Gs     uint16
	Err    uint32
	Es     uint16
	Ds     uint16
	Rip    int64
	Cs     int64
	Rflags int64
	Rsp    int64
	Ss     int64
}

type FpReg struct {
	Env   [4]uint64
	Acc   [8][16]uint8
	Xacc  [16][16]uint8
	Spare [12]uint64
}

type FpExtendedPrecision struct{}

type PtraceIoDesc struct {
	Op   int32
	Offs uintptr
	Addr *byte
	Len  uint64
}

type Kevent_t struct {
	Ident  uint64
	Filter int16
	Flags  uint16
	Fflags uint32
	Data   int64
	Udata  *byte
	Ext    [4]uint64
}

type FdSet struct {
	Bits [16]uint64
}

const (
	sizeofIfMsghdr         = 0xa8
	SizeofIfMsghdr         = 0xa8
	sizeofIfData           = 0x98
	SizeofIfData           = 0x98
	SizeofIfaMsghdr        = 0x14
	SizeofIfmaMsghdr       = 0x10
	SizeofIfAnnounceMsghdr = 0x18
	SizeofRtMsghdr         = 0x98
	SizeofRtMetrics        = 0x70
)

type ifMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	_       uint16
	Data    ifData
}

type IfMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	Data    IfData
}

type ifData struct {
	Type       uint8
	Physical   uint8
	Addrlen    uint8
	Hdrlen     uint8
	Link_state uint8
	Vhid       uint8
	Datalen    uint16
	Mtu        uint32
	Metric     uint32
	Baudrate   uint64
	Ipackets   uint64
	Ierrors    uint64
	Opackets   uint64
	Oerrors    uint64
	Collisions uint64
	Ibytes     uint64
	Obytes     uint64
	Imcasts    uint64
	Omcasts    uint64
	Iqdrops    uint64
	Oqdrops    uint64
	Noproto    uint64
	Hwassist   uint64
	_          [8]byte
	_          [16]byte
}

type IfData struct {
	Type        uint8
	Physical    uint8
	Addrlen     uint8
	Hdrlen      uint8
	Link_state  uint8
	Spare_char1 uint8
	Spare_char2 uint8
	Datalen     uint8
	Mtu         uint64
	Metric      uint64
	Baudrate    uint64
	Ipackets    uint64
	Ierrors     uint64
	Opackets    uint64
	Oerrors     uint64
	Collisions  uint64
	Ibytes      uint64
	Obytes      uint64
	Imcasts     uint64
	Omcasts     uint64
	Iqdrops     uint64
	Noproto     uint64
	Hwassist    uint64
	Epoch       int64
	Lastchange  Timeval
}

type IfaMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	_       uint16
	Metric  int32
}

type IfmaMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	_       uint16
}

type IfAnnounceMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Index   uint16
	Name    [16]int8
	What    uint16
}

type RtMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Index   uint16
	_       uint16
	Flags   int32
	Addrs   int32
	Pid     int32
	Seq     int32
	Errno   int32
	Fmask   int32
	Inits   uint64
	Rmx     RtMetrics
}

type RtMetrics struct {
	Locks    uint64
	Mtu      uint64
	Hopcount uint64
	Expire   uint64
	Recvpipe uint64
	Sendpipe uint64
	Ssthresh uint64
	Rtt      uint64
	Rttvar   uint64
	Pksent   uint64
	Weight   uint64
	Filler   [3]uint64
}

const (
	SizeofBpfVersion    = 0x4
	SizeofBpfStat       = 0x8
	SizeofBpfZbuf       = 0x18
	SizeofBpfProgram    = 0x10
	SizeofBpfInsn       = 0x8
	SizeofBpfHdr        = 0x20
	SizeofBpfZbufHeader = 0x20
)

type BpfVersion struct {
	Major uint16
	Minor uint16
}

type BpfStat struct {
	Recv uint32
	Drop uint32
}

type BpfZbuf struct {
	Bufa   *byte
	Bufb   *byte
	Buflen uint64
}

type BpfProgram struct {
	Len   uint32
	Insns *BpfInsn
}

type BpfInsn struct {
	Code uint16
	Jt   uint8
	Jf   uint8
	K    uint32
}

type BpfHdr struct {
	Tstamp  Timeval
	Caplen  uint32
	Datalen uint32
	Hdrlen  uint16
	_       [6]byte
}

type BpfZbufHeader struct {
	Kernel_gen uint32
	Kernel_len uint32
	User_gen   uint32
	_          [5]uint32
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Cc     [20]uint8
	Ispeed uint32
	Ospeed uint32
}

type Winsize struct {
	Row    uint16
	Col    uint16
	Xpixel uint16
	Ypixel uint16
}

const (
	AT_FDCWD            = -0x64
	AT_EACCESS          = 0x100
	AT_SYMLINK_NOFOLLOW = 0x200
	AT_SYMLINK_FOLLOW   = 0x400
	AT_REMOVEDIR        = 0x800
)

type PollFd struct {
	Fd      int32
	Events  int16
	Revents int16
}

const (
	POLLERR      = 0x8
	POLLHUP      = 0x10
	POLLIN       = 0x1
	POLLINIGNEOF = 0x2000
	POLLNVAL     = 0x20
	POLLOUT      = 0x4
	POLLPRI      = 0x2
	POLLRDBAND   = 0x80
	POLLRDNORM   = 0x40
	POLLWRBAND   = 0x100
	POLLWRNORM   = 0x4
)

type CapRights struct {
	Rights [2]uint64
}

type Utsname struct {
	Sysname  [256]byte
	Nodename [256]byte
	Release  [256]byte
	Version  [256]byte
	Machine  [256]byte
}

const SizeofClockinfo = 0x14

type Clockinfo struct {
	Hz     int32
	Tick   int32
	Spare  int32
	Stathz int32
	Profhz int32
}
   07070100000EB0000081A4000000000000000000000001645E367C0000261B000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go    // cgo -godefs -- -fsigned-char types_freebsd.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build arm && freebsd
// +build arm,freebsd

package unix

const (
	SizeofPtr      = 0x4
	SizeofShort    = 0x2
	SizeofInt      = 0x4
	SizeofLong     = 0x4
	SizeofLongLong = 0x8
)

type (
	_C_short     int16
	_C_int       int32
	_C_long      int32
	_C_long_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int32
	_    [4]byte
}

type Timeval struct {
	Sec  int64
	Usec int32
	_    [4]byte
}

type Time_t int64

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int32
	Ixrss    int32
	Idrss    int32
	Isrss    int32
	Minflt   int32
	Majflt   int32
	Nswap    int32
	Inblock  int32
	Oublock  int32
	Msgsnd   int32
	Msgrcv   int32
	Nsignals int32
	Nvcsw    int32
	Nivcsw   int32
}

type Rlimit struct {
	Cur int64
	Max int64
}

type _Gid_t uint32

const (
	_statfsVersion = 0x20140518
	_dirblksiz     = 0x400
)

type Stat_t struct {
	Dev     uint64
	Ino     uint64
	Nlink   uint64
	Mode    uint16
	_0      int16
	Uid     uint32
	Gid     uint32
	_1      int32
	Rdev    uint64
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	Btim    Timespec
	Size    int64
	Blocks  int64
	Blksize int32
	Flags   uint32
	Gen     uint64
	Spare   [10]uint64
}

type Statfs_t struct {
	Version     uint32
	Type        uint32
	Flags       uint64
	Bsize       uint64
	Iosize      uint64
	Blocks      uint64
	Bfree       uint64
	Bavail      int64
	Files       uint64
	Ffree       int64
	Syncwrites  uint64
	Asyncwrites uint64
	Syncreads   uint64
	Asyncreads  uint64
	Spare       [10]uint64
	Namemax     uint32
	Owner       uint32
	Fsid        Fsid
	Charspare   [80]int8
	Fstypename  [16]byte
	Mntfromname [1024]byte
	Mntonname   [1024]byte
}

type Flock_t struct {
	Start  int64
	Len    int64
	Pid    int32
	Type   int16
	Whence int16
	Sysid  int32
	_      [4]byte
}

type Dirent struct {
	Fileno uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Pad0   uint8
	Namlen uint16
	Pad1   uint16
	Name   [256]int8
}

type Fsid struct {
	Val [2]int32
}

const (
	PathMax = 0x400
)

const (
	FADV_NORMAL     = 0x0
	FADV_RANDOM     = 0x1
	FADV_SEQUENTIAL = 0x2
	FADV_WILLNEED   = 0x3
	FADV_DONTNEED   = 0x4
	FADV_NOREUSE    = 0x5
)

type RawSockaddrInet4 struct {
	Len    uint8
	Family uint8
	Port   uint16
	Addr   [4]byte /* in_addr */
	Zero   [8]int8
}

type RawSockaddrInet6 struct {
	Len      uint8
	Family   uint8
	Port     uint16
	Flowinfo uint32
	Addr     [16]byte /* in6_addr */
	Scope_id uint32
}

type RawSockaddrUnix struct {
	Len    uint8
	Family uint8
	Path   [104]int8
}

type RawSockaddrDatalink struct {
	Len    uint8
	Family uint8
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [46]int8
}

type RawSockaddr struct {
	Len    uint8
	Family uint8
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [92]int8
}

type _Socklen uint32

type Xucred struct {
	Version uint32
	Uid     uint32
	Ngroups int16
	Groups  [16]uint32
	_       *byte
}

type Linger struct {
	Onoff  int32
	Linger int32
}

type Iovec struct {
	Base *byte
	Len  uint32
}

type IPMreq struct {
	Multiaddr [4]byte /* in_addr */
	Interface [4]byte /* in_addr */
}

type IPMreqn struct {
	Multiaddr [4]byte /* in_addr */
	Address   [4]byte /* in_addr */
	Ifindex   int32
}

type IPv6Mreq struct {
	Multiaddr [16]byte /* in6_addr */
	Interface uint32
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     int32
	Control    *byte
	Controllen uint32
	Flags      int32
}

type Cmsghdr struct {
	Len   uint32
	Level int32
	Type  int32
}

type Inet6Pktinfo struct {
	Addr    [16]byte /* in6_addr */
	Ifindex uint32
}

type IPv6MTUInfo struct {
	Addr RawSockaddrInet6
	Mtu  uint32
}

type ICMPv6Filter struct {
	Filt [8]uint32
}

const (
	SizeofSockaddrInet4    = 0x10
	SizeofSockaddrInet6    = 0x1c
	SizeofSockaddrAny      = 0x6c
	SizeofSockaddrUnix     = 0x6a
	SizeofSockaddrDatalink = 0x36
	SizeofXucred           = 0x50
	SizeofLinger           = 0x8
	SizeofIovec            = 0x8
	SizeofIPMreq           = 0x8
	SizeofIPMreqn          = 0xc
	SizeofIPv6Mreq         = 0x14
	SizeofMsghdr           = 0x1c
	SizeofCmsghdr          = 0xc
	SizeofInet6Pktinfo     = 0x14
	SizeofIPv6MTUInfo      = 0x20
	SizeofICMPv6Filter     = 0x20
)

const (
	PTRACE_TRACEME = 0x0
	PTRACE_CONT    = 0x7
	PTRACE_KILL    = 0x8
)

type PtraceLwpInfoStruct struct {
	Lwpid        int32
	Event        int32
	Flags        int32
	Sigmask      Sigset_t
	Siglist      Sigset_t
	Siginfo      __PtraceSiginfo
	Tdname       [20]int8
	Child_pid    int32
	Syscall_code uint32
	Syscall_narg uint32
}

type __Siginfo struct {
	Signo  int32
	Errno  int32
	Code   int32
	Pid    int32
	Uid    uint32
	Status int32
	Addr   *byte
	Value  [4]byte
	_      [32]byte
}

type __PtraceSiginfo struct {
	Signo  int32
	Errno  int32
	Code   int32
	Pid    int32
	Uid    uint32
	Status int32
	Addr   uintptr
	Value  [4]byte
	_      [32]byte
}

type Sigset_t struct {
	Val [4]uint32
}

type Reg struct {
	R    [13]uint32
	Sp   uint32
	Lr   uint32
	Pc   uint32
	Cpsr uint32
}

type FpReg struct {
	Fpsr uint32
	Fpr  [8]FpExtendedPrecision
}

type FpExtendedPrecision struct {
	Exponent    uint32
	Mantissa_hi uint32
	Mantissa_lo uint32
}

type PtraceIoDesc struct {
	Op   int32
	Offs uintptr
	Addr *byte
	Len  uint32
}

type Kevent_t struct {
	Ident  uint32
	Filter int16
	Flags  uint16
	Fflags uint32
	_      [4]byte
	Data   int64
	Udata  *byte
	_      [4]byte
	Ext    [4]uint64
}

type FdSet struct {
	Bits [32]uint32
}

const (
	sizeofIfMsghdr         = 0xa8
	SizeofIfMsghdr         = 0x70
	sizeofIfData           = 0x98
	SizeofIfData           = 0x60
	SizeofIfaMsghdr        = 0x14
	SizeofIfmaMsghdr       = 0x10
	SizeofIfAnnounceMsghdr = 0x18
	SizeofRtMsghdr         = 0x5c
	SizeofRtMetrics        = 0x38
)

type ifMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	_       uint16
	Data    ifData
}

type IfMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	Data    IfData
}

type ifData struct {
	Type       uint8
	Physical   uint8
	Addrlen    uint8
	Hdrlen     uint8
	Link_state uint8
	Vhid       uint8
	Datalen    uint16
	Mtu        uint32
	Metric     uint32
	Baudrate   uint64
	Ipackets   uint64
	Ierrors    uint64
	Opackets   uint64
	Oerrors    uint64
	Collisions uint64
	Ibytes     uint64
	Obytes     uint64
	Imcasts    uint64
	Omcasts    uint64
	Iqdrops    uint64
	Oqdrops    uint64
	Noproto    uint64
	Hwassist   uint64
	_          [8]byte
	_          [16]byte
}

type IfData struct {
	Type        uint8
	Physical    uint8
	Addrlen     uint8
	Hdrlen      uint8
	Link_state  uint8
	Spare_char1 uint8
	Spare_char2 uint8
	Datalen     uint8
	Mtu         uint32
	Metric      uint32
	Baudrate    uint32
	Ipackets    uint32
	Ierrors     uint32
	Opackets    uint32
	Oerrors     uint32
	Collisions  uint32
	Ibytes      uint32
	Obytes      uint32
	Imcasts     uint32
	Omcasts     uint32
	Iqdrops     uint32
	Noproto     uint32
	Hwassist    uint32
	_           [4]byte
	Epoch       int64
	Lastchange  Timeval
}

type IfaMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	_       uint16
	Metric  int32
}

type IfmaMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	_       uint16
}

type IfAnnounceMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Index   uint16
	Name    [16]int8
	What    uint16
}

type RtMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Index   uint16
	_       uint16
	Flags   int32
	Addrs   int32
	Pid     int32
	Seq     int32
	Errno   int32
	Fmask   int32
	Inits   uint32
	Rmx     RtMetrics
}

type RtMetrics struct {
	Locks    uint32
	Mtu      uint32
	Hopcount uint32
	Expire   uint32
	Recvpipe uint32
	Sendpipe uint32
	Ssthresh uint32
	Rtt      uint32
	Rttvar   uint32
	Pksent   uint32
	Weight   uint32
	Filler   [3]uint32
}

const (
	SizeofBpfVersion    = 0x4
	SizeofBpfStat       = 0x8
	SizeofBpfZbuf       = 0xc
	SizeofBpfProgram    = 0x8
	SizeofBpfInsn       = 0x8
	SizeofBpfHdr        = 0x20
	SizeofBpfZbufHeader = 0x20
)

type BpfVersion struct {
	Major uint16
	Minor uint16
}

type BpfStat struct {
	Recv uint32
	Drop uint32
}

type BpfZbuf struct {
	Bufa   *byte
	Bufb   *byte
	Buflen uint32
}

type BpfProgram struct {
	Len   uint32
	Insns *BpfInsn
}

type BpfInsn struct {
	Code uint16
	Jt   uint8
	Jf   uint8
	K    uint32
}

type BpfHdr struct {
	Tstamp  Timeval
	Caplen  uint32
	Datalen uint32
	Hdrlen  uint16
	_       [6]byte
}

type BpfZbufHeader struct {
	Kernel_gen uint32
	Kernel_len uint32
	User_gen   uint32
	_          [5]uint32
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Cc     [20]uint8
	Ispeed uint32
	Ospeed uint32
}

type Winsize struct {
	Row    uint16
	Col    uint16
	Xpixel uint16
	Ypixel uint16
}

const (
	AT_FDCWD            = -0x64
	AT_EACCESS          = 0x100
	AT_SYMLINK_NOFOLLOW = 0x200
	AT_SYMLINK_FOLLOW   = 0x400
	AT_REMOVEDIR        = 0x800
)

type PollFd struct {
	Fd      int32
	Events  int16
	Revents int16
}

const (
	POLLERR      = 0x8
	POLLHUP      = 0x10
	POLLIN       = 0x1
	POLLINIGNEOF = 0x2000
	POLLNVAL     = 0x20
	POLLOUT      = 0x4
	POLLPRI      = 0x2
	POLLRDBAND   = 0x80
	POLLRDNORM   = 0x40
	POLLWRBAND   = 0x100
	POLLWRNORM   = 0x4
)

type CapRights struct {
	Rights [2]uint64
}

type Utsname struct {
	Sysname  [256]byte
	Nodename [256]byte
	Release  [256]byte
	Version  [256]byte
	Machine  [256]byte
}

const SizeofClockinfo = 0x14

type Clockinfo struct {
	Hz     int32
	Tick   int32
	Spare  int32
	Stathz int32
	Profhz int32
}
 07070100000EB1000081A4000000000000000000000001645E367C000025AB000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go  // cgo -godefs -- -fsigned-char types_freebsd.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build arm64 && freebsd
// +build arm64,freebsd

package unix

const (
	SizeofPtr      = 0x8
	SizeofShort    = 0x2
	SizeofInt      = 0x4
	SizeofLong     = 0x8
	SizeofLongLong = 0x8
)

type (
	_C_short     int16
	_C_int       int32
	_C_long      int64
	_C_long_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int64
}

type Timeval struct {
	Sec  int64
	Usec int64
}

type Time_t int64

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int64
	Ixrss    int64
	Idrss    int64
	Isrss    int64
	Minflt   int64
	Majflt   int64
	Nswap    int64
	Inblock  int64
	Oublock  int64
	Msgsnd   int64
	Msgrcv   int64
	Nsignals int64
	Nvcsw    int64
	Nivcsw   int64
}

type Rlimit struct {
	Cur int64
	Max int64
}

type _Gid_t uint32

const (
	_statfsVersion = 0x20140518
	_dirblksiz     = 0x400
)

type Stat_t struct {
	Dev     uint64
	Ino     uint64
	Nlink   uint64
	Mode    uint16
	_0      int16
	Uid     uint32
	Gid     uint32
	_1      int32
	Rdev    uint64
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	Btim    Timespec
	Size    int64
	Blocks  int64
	Blksize int32
	Flags   uint32
	Gen     uint64
	Spare   [10]uint64
}

type Statfs_t struct {
	Version     uint32
	Type        uint32
	Flags       uint64
	Bsize       uint64
	Iosize      uint64
	Blocks      uint64
	Bfree       uint64
	Bavail      int64
	Files       uint64
	Ffree       int64
	Syncwrites  uint64
	Asyncwrites uint64
	Syncreads   uint64
	Asyncreads  uint64
	Spare       [10]uint64
	Namemax     uint32
	Owner       uint32
	Fsid        Fsid
	Charspare   [80]int8
	Fstypename  [16]byte
	Mntfromname [1024]byte
	Mntonname   [1024]byte
}

type Flock_t struct {
	Start  int64
	Len    int64
	Pid    int32
	Type   int16
	Whence int16
	Sysid  int32
	_      [4]byte
}

type Dirent struct {
	Fileno uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Pad0   uint8
	Namlen uint16
	Pad1   uint16
	Name   [256]int8
}

type Fsid struct {
	Val [2]int32
}

const (
	PathMax = 0x400
)

const (
	FADV_NORMAL     = 0x0
	FADV_RANDOM     = 0x1
	FADV_SEQUENTIAL = 0x2
	FADV_WILLNEED   = 0x3
	FADV_DONTNEED   = 0x4
	FADV_NOREUSE    = 0x5
)

type RawSockaddrInet4 struct {
	Len    uint8
	Family uint8
	Port   uint16
	Addr   [4]byte /* in_addr */
	Zero   [8]int8
}

type RawSockaddrInet6 struct {
	Len      uint8
	Family   uint8
	Port     uint16
	Flowinfo uint32
	Addr     [16]byte /* in6_addr */
	Scope_id uint32
}

type RawSockaddrUnix struct {
	Len    uint8
	Family uint8
	Path   [104]int8
}

type RawSockaddrDatalink struct {
	Len    uint8
	Family uint8
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [46]int8
}

type RawSockaddr struct {
	Len    uint8
	Family uint8
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [92]int8
}

type _Socklen uint32

type Xucred struct {
	Version uint32
	Uid     uint32
	Ngroups int16
	Groups  [16]uint32
	_       *byte
}

type Linger struct {
	Onoff  int32
	Linger int32
}

type Iovec struct {
	Base *byte
	Len  uint64
}

type IPMreq struct {
	Multiaddr [4]byte /* in_addr */
	Interface [4]byte /* in_addr */
}

type IPMreqn struct {
	Multiaddr [4]byte /* in_addr */
	Address   [4]byte /* in_addr */
	Ifindex   int32
}

type IPv6Mreq struct {
	Multiaddr [16]byte /* in6_addr */
	Interface uint32
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     int32
	Control    *byte
	Controllen uint32
	Flags      int32
}

type Cmsghdr struct {
	Len   uint32
	Level int32
	Type  int32
}

type Inet6Pktinfo struct {
	Addr    [16]byte /* in6_addr */
	Ifindex uint32
}

type IPv6MTUInfo struct {
	Addr RawSockaddrInet6
	Mtu  uint32
}

type ICMPv6Filter struct {
	Filt [8]uint32
}

const (
	SizeofSockaddrInet4    = 0x10
	SizeofSockaddrInet6    = 0x1c
	SizeofSockaddrAny      = 0x6c
	SizeofSockaddrUnix     = 0x6a
	SizeofSockaddrDatalink = 0x36
	SizeofXucred           = 0x58
	SizeofLinger           = 0x8
	SizeofIovec            = 0x10
	SizeofIPMreq           = 0x8
	SizeofIPMreqn          = 0xc
	SizeofIPv6Mreq         = 0x14
	SizeofMsghdr           = 0x30
	SizeofCmsghdr          = 0xc
	SizeofInet6Pktinfo     = 0x14
	SizeofIPv6MTUInfo      = 0x20
	SizeofICMPv6Filter     = 0x20
)

const (
	PTRACE_TRACEME = 0x0
	PTRACE_CONT    = 0x7
	PTRACE_KILL    = 0x8
)

type PtraceLwpInfoStruct struct {
	Lwpid        int32
	Event        int32
	Flags        int32
	Sigmask      Sigset_t
	Siglist      Sigset_t
	Siginfo      __PtraceSiginfo
	Tdname       [20]int8
	Child_pid    int32
	Syscall_code uint32
	Syscall_narg uint32
}

type __Siginfo struct {
	Signo  int32
	Errno  int32
	Code   int32
	Pid    int32
	Uid    uint32
	Status int32
	Addr   *byte
	Value  [8]byte
	_      [40]byte
}

type __PtraceSiginfo struct {
	Signo  int32
	Errno  int32
	Code   int32
	Pid    int32
	Uid    uint32
	Status int32
	Addr   uintptr
	Value  [8]byte
	_      [40]byte
}

type Sigset_t struct {
	Val [4]uint32
}

type Reg struct {
	X    [30]uint64
	Lr   uint64
	Sp   uint64
	Elr  uint64
	Spsr uint32
	_    [4]byte
}

type FpReg struct {
	Q  [32][16]uint8
	Sr uint32
	Cr uint32
	_  [8]byte
}

type FpExtendedPrecision struct{}

type PtraceIoDesc struct {
	Op   int32
	Offs uintptr
	Addr *byte
	Len  uint64
}

type Kevent_t struct {
	Ident  uint64
	Filter int16
	Flags  uint16
	Fflags uint32
	Data   int64
	Udata  *byte
	Ext    [4]uint64
}

type FdSet struct {
	Bits [16]uint64
}

const (
	sizeofIfMsghdr         = 0xa8
	SizeofIfMsghdr         = 0xa8
	sizeofIfData           = 0x98
	SizeofIfData           = 0x98
	SizeofIfaMsghdr        = 0x14
	SizeofIfmaMsghdr       = 0x10
	SizeofIfAnnounceMsghdr = 0x18
	SizeofRtMsghdr         = 0x98
	SizeofRtMetrics        = 0x70
)

type ifMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	_       uint16
	Data    ifData
}

type IfMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	Data    IfData
}

type ifData struct {
	Type       uint8
	Physical   uint8
	Addrlen    uint8
	Hdrlen     uint8
	Link_state uint8
	Vhid       uint8
	Datalen    uint16
	Mtu        uint32
	Metric     uint32
	Baudrate   uint64
	Ipackets   uint64
	Ierrors    uint64
	Opackets   uint64
	Oerrors    uint64
	Collisions uint64
	Ibytes     uint64
	Obytes     uint64
	Imcasts    uint64
	Omcasts    uint64
	Iqdrops    uint64
	Oqdrops    uint64
	Noproto    uint64
	Hwassist   uint64
	_          [8]byte
	_          [16]byte
}

type IfData struct {
	Type        uint8
	Physical    uint8
	Addrlen     uint8
	Hdrlen      uint8
	Link_state  uint8
	Spare_char1 uint8
	Spare_char2 uint8
	Datalen     uint8
	Mtu         uint64
	Metric      uint64
	Baudrate    uint64
	Ipackets    uint64
	Ierrors     uint64
	Opackets    uint64
	Oerrors     uint64
	Collisions  uint64
	Ibytes      uint64
	Obytes      uint64
	Imcasts     uint64
	Omcasts     uint64
	Iqdrops     uint64
	Noproto     uint64
	Hwassist    uint64
	Epoch       int64
	Lastchange  Timeval
}

type IfaMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	_       uint16
	Metric  int32
}

type IfmaMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	_       uint16
}

type IfAnnounceMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Index   uint16
	Name    [16]int8
	What    uint16
}

type RtMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Index   uint16
	_       uint16
	Flags   int32
	Addrs   int32
	Pid     int32
	Seq     int32
	Errno   int32
	Fmask   int32
	Inits   uint64
	Rmx     RtMetrics
}

type RtMetrics struct {
	Locks    uint64
	Mtu      uint64
	Hopcount uint64
	Expire   uint64
	Recvpipe uint64
	Sendpipe uint64
	Ssthresh uint64
	Rtt      uint64
	Rttvar   uint64
	Pksent   uint64
	Weight   uint64
	Filler   [3]uint64
}

const (
	SizeofBpfVersion    = 0x4
	SizeofBpfStat       = 0x8
	SizeofBpfZbuf       = 0x18
	SizeofBpfProgram    = 0x10
	SizeofBpfInsn       = 0x8
	SizeofBpfHdr        = 0x20
	SizeofBpfZbufHeader = 0x20
)

type BpfVersion struct {
	Major uint16
	Minor uint16
}

type BpfStat struct {
	Recv uint32
	Drop uint32
}

type BpfZbuf struct {
	Bufa   *byte
	Bufb   *byte
	Buflen uint64
}

type BpfProgram struct {
	Len   uint32
	Insns *BpfInsn
}

type BpfInsn struct {
	Code uint16
	Jt   uint8
	Jf   uint8
	K    uint32
}

type BpfHdr struct {
	Tstamp  Timeval
	Caplen  uint32
	Datalen uint32
	Hdrlen  uint16
	_       [6]byte
}

type BpfZbufHeader struct {
	Kernel_gen uint32
	Kernel_len uint32
	User_gen   uint32
	_          [5]uint32
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Cc     [20]uint8
	Ispeed uint32
	Ospeed uint32
}

type Winsize struct {
	Row    uint16
	Col    uint16
	Xpixel uint16
	Ypixel uint16
}

const (
	AT_FDCWD            = -0x64
	AT_EACCESS          = 0x100
	AT_SYMLINK_NOFOLLOW = 0x200
	AT_SYMLINK_FOLLOW   = 0x400
	AT_REMOVEDIR        = 0x800
)

type PollFd struct {
	Fd      int32
	Events  int16
	Revents int16
}

const (
	POLLERR      = 0x8
	POLLHUP      = 0x10
	POLLIN       = 0x1
	POLLINIGNEOF = 0x2000
	POLLNVAL     = 0x20
	POLLOUT      = 0x4
	POLLPRI      = 0x2
	POLLRDBAND   = 0x80
	POLLRDNORM   = 0x40
	POLLWRBAND   = 0x100
	POLLWRNORM   = 0x4
)

type CapRights struct {
	Rights [2]uint64
}

type Utsname struct {
	Sysname  [256]byte
	Nodename [256]byte
	Release  [256]byte
	Version  [256]byte
	Machine  [256]byte
}

const SizeofClockinfo = 0x14

type Clockinfo struct {
	Hz     int32
	Tick   int32
	Spare  int32
	Stathz int32
	Profhz int32
}
 07070100000EB2000081A4000000000000000000000001645E367C000025F4000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go    // cgo -godefs -- -fsigned-char types_freebsd.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build riscv64 && freebsd
// +build riscv64,freebsd

package unix

const (
	SizeofPtr      = 0x8
	SizeofShort    = 0x2
	SizeofInt      = 0x4
	SizeofLong     = 0x8
	SizeofLongLong = 0x8
)

type (
	_C_short     int16
	_C_int       int32
	_C_long      int64
	_C_long_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int64
}

type Timeval struct {
	Sec  int64
	Usec int64
}

type Time_t int64

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int64
	Ixrss    int64
	Idrss    int64
	Isrss    int64
	Minflt   int64
	Majflt   int64
	Nswap    int64
	Inblock  int64
	Oublock  int64
	Msgsnd   int64
	Msgrcv   int64
	Nsignals int64
	Nvcsw    int64
	Nivcsw   int64
}

type Rlimit struct {
	Cur int64
	Max int64
}

type _Gid_t uint32

const (
	_statfsVersion = 0x20140518
	_dirblksiz     = 0x400
)

type Stat_t struct {
	Dev     uint64
	Ino     uint64
	Nlink   uint64
	Mode    uint16
	_0      int16
	Uid     uint32
	Gid     uint32
	_1      int32
	Rdev    uint64
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	Btim    Timespec
	Size    int64
	Blocks  int64
	Blksize int32
	Flags   uint32
	Gen     uint64
	Spare   [10]uint64
}

type Statfs_t struct {
	Version     uint32
	Type        uint32
	Flags       uint64
	Bsize       uint64
	Iosize      uint64
	Blocks      uint64
	Bfree       uint64
	Bavail      int64
	Files       uint64
	Ffree       int64
	Syncwrites  uint64
	Asyncwrites uint64
	Syncreads   uint64
	Asyncreads  uint64
	Spare       [10]uint64
	Namemax     uint32
	Owner       uint32
	Fsid        Fsid
	Charspare   [80]int8
	Fstypename  [16]byte
	Mntfromname [1024]byte
	Mntonname   [1024]byte
}

type Flock_t struct {
	Start  int64
	Len    int64
	Pid    int32
	Type   int16
	Whence int16
	Sysid  int32
	_      [4]byte
}

type Dirent struct {
	Fileno uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Pad0   uint8
	Namlen uint16
	Pad1   uint16
	Name   [256]int8
}

type Fsid struct {
	Val [2]int32
}

const (
	PathMax = 0x400
)

const (
	FADV_NORMAL     = 0x0
	FADV_RANDOM     = 0x1
	FADV_SEQUENTIAL = 0x2
	FADV_WILLNEED   = 0x3
	FADV_DONTNEED   = 0x4
	FADV_NOREUSE    = 0x5
)

type RawSockaddrInet4 struct {
	Len    uint8
	Family uint8
	Port   uint16
	Addr   [4]byte /* in_addr */
	Zero   [8]int8
}

type RawSockaddrInet6 struct {
	Len      uint8
	Family   uint8
	Port     uint16
	Flowinfo uint32
	Addr     [16]byte /* in6_addr */
	Scope_id uint32
}

type RawSockaddrUnix struct {
	Len    uint8
	Family uint8
	Path   [104]int8
}

type RawSockaddrDatalink struct {
	Len    uint8
	Family uint8
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [46]int8
}

type RawSockaddr struct {
	Len    uint8
	Family uint8
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [92]int8
}

type _Socklen uint32

type Xucred struct {
	Version uint32
	Uid     uint32
	Ngroups int16
	Groups  [16]uint32
	_       *byte
}

type Linger struct {
	Onoff  int32
	Linger int32
}

type Iovec struct {
	Base *byte
	Len  uint64
}

type IPMreq struct {
	Multiaddr [4]byte /* in_addr */
	Interface [4]byte /* in_addr */
}

type IPMreqn struct {
	Multiaddr [4]byte /* in_addr */
	Address   [4]byte /* in_addr */
	Ifindex   int32
}

type IPv6Mreq struct {
	Multiaddr [16]byte /* in6_addr */
	Interface uint32
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     int32
	Control    *byte
	Controllen uint32
	Flags      int32
}

type Cmsghdr struct {
	Len   uint32
	Level int32
	Type  int32
}

type Inet6Pktinfo struct {
	Addr    [16]byte /* in6_addr */
	Ifindex uint32
}

type IPv6MTUInfo struct {
	Addr RawSockaddrInet6
	Mtu  uint32
}

type ICMPv6Filter struct {
	Filt [8]uint32
}

const (
	SizeofSockaddrInet4    = 0x10
	SizeofSockaddrInet6    = 0x1c
	SizeofSockaddrAny      = 0x6c
	SizeofSockaddrUnix     = 0x6a
	SizeofSockaddrDatalink = 0x36
	SizeofXucred           = 0x58
	SizeofLinger           = 0x8
	SizeofIovec            = 0x10
	SizeofIPMreq           = 0x8
	SizeofIPMreqn          = 0xc
	SizeofIPv6Mreq         = 0x14
	SizeofMsghdr           = 0x30
	SizeofCmsghdr          = 0xc
	SizeofInet6Pktinfo     = 0x14
	SizeofIPv6MTUInfo      = 0x20
	SizeofICMPv6Filter     = 0x20
)

const (
	PTRACE_TRACEME = 0x0
	PTRACE_CONT    = 0x7
	PTRACE_KILL    = 0x8
)

type PtraceLwpInfoStruct struct {
	Lwpid        int32
	Event        int32
	Flags        int32
	Sigmask      Sigset_t
	Siglist      Sigset_t
	Siginfo      __PtraceSiginfo
	Tdname       [20]int8
	Child_pid    int32
	Syscall_code uint32
	Syscall_narg uint32
}

type __Siginfo struct {
	Signo  int32
	Errno  int32
	Code   int32
	Pid    int32
	Uid    uint32
	Status int32
	Addr   *byte
	Value  [8]byte
	_      [40]byte
}

type __PtraceSiginfo struct {
	Signo  int32
	Errno  int32
	Code   int32
	Pid    int32
	Uid    uint32
	Status int32
	Addr   uintptr
	Value  [8]byte
	_      [40]byte
}

type Sigset_t struct {
	Val [4]uint32
}

type Reg struct {
	Ra      uint64
	Sp      uint64
	Gp      uint64
	Tp      uint64
	T       [7]uint64
	S       [12]uint64
	A       [8]uint64
	Sepc    uint64
	Sstatus uint64
}

type FpReg struct {
	X    [32][2]uint64
	Fcsr uint64
}

type FpExtendedPrecision struct{}

type PtraceIoDesc struct {
	Op   int32
	Offs uintptr
	Addr *byte
	Len  uint64
}

type Kevent_t struct {
	Ident  uint64
	Filter int16
	Flags  uint16
	Fflags uint32
	Data   int64
	Udata  *byte
	Ext    [4]uint64
}

type FdSet struct {
	Bits [16]uint64
}

const (
	sizeofIfMsghdr         = 0xa8
	SizeofIfMsghdr         = 0xa8
	sizeofIfData           = 0x98
	SizeofIfData           = 0x98
	SizeofIfaMsghdr        = 0x14
	SizeofIfmaMsghdr       = 0x10
	SizeofIfAnnounceMsghdr = 0x18
	SizeofRtMsghdr         = 0x98
	SizeofRtMetrics        = 0x70
)

type ifMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	_       uint16
	Data    ifData
}

type IfMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	Data    IfData
}

type ifData struct {
	Type       uint8
	Physical   uint8
	Addrlen    uint8
	Hdrlen     uint8
	Link_state uint8
	Vhid       uint8
	Datalen    uint16
	Mtu        uint32
	Metric     uint32
	Baudrate   uint64
	Ipackets   uint64
	Ierrors    uint64
	Opackets   uint64
	Oerrors    uint64
	Collisions uint64
	Ibytes     uint64
	Obytes     uint64
	Imcasts    uint64
	Omcasts    uint64
	Iqdrops    uint64
	Oqdrops    uint64
	Noproto    uint64
	Hwassist   uint64
	_          [8]byte
	_          [16]byte
}

type IfData struct {
	Type        uint8
	Physical    uint8
	Addrlen     uint8
	Hdrlen      uint8
	Link_state  uint8
	Spare_char1 uint8
	Spare_char2 uint8
	Datalen     uint8
	Mtu         uint64
	Metric      uint64
	Baudrate    uint64
	Ipackets    uint64
	Ierrors     uint64
	Opackets    uint64
	Oerrors     uint64
	Collisions  uint64
	Ibytes      uint64
	Obytes      uint64
	Imcasts     uint64
	Omcasts     uint64
	Iqdrops     uint64
	Noproto     uint64
	Hwassist    uint64
	Epoch       int64
	Lastchange  Timeval
}

type IfaMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	_       uint16
	Metric  int32
}

type IfmaMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	_       uint16
}

type IfAnnounceMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Index   uint16
	Name    [16]int8
	What    uint16
}

type RtMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Index   uint16
	_       uint16
	Flags   int32
	Addrs   int32
	Pid     int32
	Seq     int32
	Errno   int32
	Fmask   int32
	Inits   uint64
	Rmx     RtMetrics
}

type RtMetrics struct {
	Locks    uint64
	Mtu      uint64
	Hopcount uint64
	Expire   uint64
	Recvpipe uint64
	Sendpipe uint64
	Ssthresh uint64
	Rtt      uint64
	Rttvar   uint64
	Pksent   uint64
	Weight   uint64
	Nhidx    uint64
	Filler   [2]uint64
}

const (
	SizeofBpfVersion    = 0x4
	SizeofBpfStat       = 0x8
	SizeofBpfZbuf       = 0x18
	SizeofBpfProgram    = 0x10
	SizeofBpfInsn       = 0x8
	SizeofBpfHdr        = 0x20
	SizeofBpfZbufHeader = 0x20
)

type BpfVersion struct {
	Major uint16
	Minor uint16
}

type BpfStat struct {
	Recv uint32
	Drop uint32
}

type BpfZbuf struct {
	Bufa   *byte
	Bufb   *byte
	Buflen uint64
}

type BpfProgram struct {
	Len   uint32
	Insns *BpfInsn
}

type BpfInsn struct {
	Code uint16
	Jt   uint8
	Jf   uint8
	K    uint32
}

type BpfHdr struct {
	Tstamp  Timeval
	Caplen  uint32
	Datalen uint32
	Hdrlen  uint16
	_       [6]byte
}

type BpfZbufHeader struct {
	Kernel_gen uint32
	Kernel_len uint32
	User_gen   uint32
	_          [5]uint32
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Cc     [20]uint8
	Ispeed uint32
	Ospeed uint32
}

type Winsize struct {
	Row    uint16
	Col    uint16
	Xpixel uint16
	Ypixel uint16
}

const (
	AT_FDCWD            = -0x64
	AT_EACCESS          = 0x100
	AT_SYMLINK_NOFOLLOW = 0x200
	AT_SYMLINK_FOLLOW   = 0x400
	AT_REMOVEDIR        = 0x800
)

type PollFd struct {
	Fd      int32
	Events  int16
	Revents int16
}

const (
	POLLERR      = 0x8
	POLLHUP      = 0x10
	POLLIN       = 0x1
	POLLINIGNEOF = 0x2000
	POLLNVAL     = 0x20
	POLLOUT      = 0x4
	POLLPRI      = 0x2
	POLLRDBAND   = 0x80
	POLLRDNORM   = 0x40
	POLLWRBAND   = 0x100
	POLLWRNORM   = 0x4
)

type CapRights struct {
	Rights [2]uint64
}

type Utsname struct {
	Sysname  [256]byte
	Nodename [256]byte
	Release  [256]byte
	Version  [256]byte
	Machine  [256]byte
}

const SizeofClockinfo = 0x14

type Clockinfo struct {
	Hz     int32
	Tick   int32
	Spare  int32
	Stathz int32
	Profhz int32
}
07070100000EB3000081A4000000000000000000000001645E367C0003C912000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_linux.go  // Code generated by mkmerge; DO NOT EDIT.

//go:build linux
// +build linux

package unix

const (
	SizeofShort    = 0x2
	SizeofInt      = 0x4
	SizeofLongLong = 0x8
	PathMax        = 0x1000
)

type (
	_C_short int16
	_C_int   int32

	_C_long_long int64
)

type ItimerSpec struct {
	Interval Timespec
	Value    Timespec
}

type Itimerval struct {
	Interval Timeval
	Value    Timeval
}

const (
	ADJ_OFFSET            = 0x1
	ADJ_FREQUENCY         = 0x2
	ADJ_MAXERROR          = 0x4
	ADJ_ESTERROR          = 0x8
	ADJ_STATUS            = 0x10
	ADJ_TIMECONST         = 0x20
	ADJ_TAI               = 0x80
	ADJ_SETOFFSET         = 0x100
	ADJ_MICRO             = 0x1000
	ADJ_NANO              = 0x2000
	ADJ_TICK              = 0x4000
	ADJ_OFFSET_SINGLESHOT = 0x8001
	ADJ_OFFSET_SS_READ    = 0xa001
)

const (
	STA_PLL       = 0x1
	STA_PPSFREQ   = 0x2
	STA_PPSTIME   = 0x4
	STA_FLL       = 0x8
	STA_INS       = 0x10
	STA_DEL       = 0x20
	STA_UNSYNC    = 0x40
	STA_FREQHOLD  = 0x80
	STA_PPSSIGNAL = 0x100
	STA_PPSJITTER = 0x200
	STA_PPSWANDER = 0x400
	STA_PPSERROR  = 0x800
	STA_CLOCKERR  = 0x1000
	STA_NANO      = 0x2000
	STA_MODE      = 0x4000
	STA_CLK       = 0x8000
)

const (
	TIME_OK    = 0x0
	TIME_INS   = 0x1
	TIME_DEL   = 0x2
	TIME_OOP   = 0x3
	TIME_WAIT  = 0x4
	TIME_ERROR = 0x5
	TIME_BAD   = 0x5
)

type Rlimit struct {
	Cur uint64
	Max uint64
}

type _Gid_t uint32

type StatxTimestamp struct {
	Sec  int64
	Nsec uint32
	_    int32
}

type Statx_t struct {
	Mask             uint32
	Blksize          uint32
	Attributes       uint64
	Nlink            uint32
	Uid              uint32
	Gid              uint32
	Mode             uint16
	_                [1]uint16
	Ino              uint64
	Size             uint64
	Blocks           uint64
	Attributes_mask  uint64
	Atime            StatxTimestamp
	Btime            StatxTimestamp
	Ctime            StatxTimestamp
	Mtime            StatxTimestamp
	Rdev_major       uint32
	Rdev_minor       uint32
	Dev_major        uint32
	Dev_minor        uint32
	Mnt_id           uint64
	Dio_mem_align    uint32
	Dio_offset_align uint32
	_                [12]uint64
}

type Fsid struct {
	Val [2]int32
}

type FileCloneRange struct {
	Src_fd      int64
	Src_offset  uint64
	Src_length  uint64
	Dest_offset uint64
}

type RawFileDedupeRange struct {
	Src_offset uint64
	Src_length uint64
	Dest_count uint16
	Reserved1  uint16
	Reserved2  uint32
}

type RawFileDedupeRangeInfo struct {
	Dest_fd       int64
	Dest_offset   uint64
	Bytes_deduped uint64
	Status        int32
	Reserved      uint32
}

const (
	SizeofRawFileDedupeRange     = 0x18
	SizeofRawFileDedupeRangeInfo = 0x20
	FILE_DEDUPE_RANGE_SAME       = 0x0
	FILE_DEDUPE_RANGE_DIFFERS    = 0x1
)

type FscryptPolicy struct {
	Version                   uint8
	Contents_encryption_mode  uint8
	Filenames_encryption_mode uint8
	Flags                     uint8
	Master_key_descriptor     [8]uint8
}

type FscryptKey struct {
	Mode uint32
	Raw  [64]uint8
	Size uint32
}

type FscryptPolicyV1 struct {
	Version                   uint8
	Contents_encryption_mode  uint8
	Filenames_encryption_mode uint8
	Flags                     uint8
	Master_key_descriptor     [8]uint8
}

type FscryptPolicyV2 struct {
	Version                   uint8
	Contents_encryption_mode  uint8
	Filenames_encryption_mode uint8
	Flags                     uint8
	_                         [4]uint8
	Master_key_identifier     [16]uint8
}

type FscryptGetPolicyExArg struct {
	Size   uint64
	Policy [24]byte
}

type FscryptKeySpecifier struct {
	Type uint32
	_    uint32
	U    [32]byte
}

type FscryptAddKeyArg struct {
	Key_spec FscryptKeySpecifier
	Raw_size uint32
	Key_id   uint32
	_        [8]uint32
}

type FscryptRemoveKeyArg struct {
	Key_spec             FscryptKeySpecifier
	Removal_status_flags uint32
	_                    [5]uint32
}

type FscryptGetKeyStatusArg struct {
	Key_spec     FscryptKeySpecifier
	_            [6]uint32
	Status       uint32
	Status_flags uint32
	User_count   uint32
	_            [13]uint32
}

type DmIoctl struct {
	Version      [3]uint32
	Data_size    uint32
	Data_start   uint32
	Target_count uint32
	Open_count   int32
	Flags        uint32
	Event_nr     uint32
	_            uint32
	Dev          uint64
	Name         [128]byte
	Uuid         [129]byte
	Data         [7]byte
}

type DmTargetSpec struct {
	Sector_start uint64
	Length       uint64
	Status       int32
	Next         uint32
	Target_type  [16]byte
}

type DmTargetDeps struct {
	Count uint32
	_     uint32
}

type DmTargetVersions struct {
	Next    uint32
	Version [3]uint32
}

type DmTargetMsg struct {
	Sector uint64
}

const (
	SizeofDmIoctl      = 0x138
	SizeofDmTargetSpec = 0x28
)

type KeyctlDHParams struct {
	Private int32
	Prime   int32
	Base    int32
}

const (
	FADV_NORMAL     = 0x0
	FADV_RANDOM     = 0x1
	FADV_SEQUENTIAL = 0x2
	FADV_WILLNEED   = 0x3
)

type RawSockaddrInet4 struct {
	Family uint16
	Port   uint16
	Addr   [4]byte /* in_addr */
	Zero   [8]uint8
}

type RawSockaddrInet6 struct {
	Family   uint16
	Port     uint16
	Flowinfo uint32
	Addr     [16]byte /* in6_addr */
	Scope_id uint32
}

type RawSockaddrUnix struct {
	Family uint16
	Path   [108]int8
}

type RawSockaddrLinklayer struct {
	Family   uint16
	Protocol uint16
	Ifindex  int32
	Hatype   uint16
	Pkttype  uint8
	Halen    uint8
	Addr     [8]uint8
}

type RawSockaddrNetlink struct {
	Family uint16
	Pad    uint16
	Pid    uint32
	Groups uint32
}

type RawSockaddrHCI struct {
	Family  uint16
	Dev     uint16
	Channel uint16
}

type RawSockaddrL2 struct {
	Family      uint16
	Psm         uint16
	Bdaddr      [6]uint8
	Cid         uint16
	Bdaddr_type uint8
	_           [1]byte
}

type RawSockaddrRFCOMM struct {
	Family  uint16
	Bdaddr  [6]uint8
	Channel uint8
	_       [1]byte
}

type RawSockaddrCAN struct {
	Family  uint16
	Ifindex int32
	Addr    [16]byte
}

type RawSockaddrALG struct {
	Family uint16
	Type   [14]uint8
	Feat   uint32
	Mask   uint32
	Name   [64]uint8
}

type RawSockaddrVM struct {
	Family    uint16
	Reserved1 uint16
	Port      uint32
	Cid       uint32
	Flags     uint8
	Zero      [3]uint8
}

type RawSockaddrXDP struct {
	Family         uint16
	Flags          uint16
	Ifindex        uint32
	Queue_id       uint32
	Shared_umem_fd uint32
}

type RawSockaddrPPPoX [0x1e]byte

type RawSockaddrTIPC struct {
	Family   uint16
	Addrtype uint8
	Scope    int8
	Addr     [12]byte
}

type RawSockaddrL2TPIP struct {
	Family  uint16
	Unused  uint16
	Addr    [4]byte /* in_addr */
	Conn_id uint32
	_       [4]uint8
}

type RawSockaddrL2TPIP6 struct {
	Family   uint16
	Unused   uint16
	Flowinfo uint32
	Addr     [16]byte /* in6_addr */
	Scope_id uint32
	Conn_id  uint32
}

type RawSockaddrIUCV struct {
	Family  uint16
	Port    uint16
	Addr    uint32
	Nodeid  [8]int8
	User_id [8]int8
	Name    [8]int8
}

type RawSockaddrNFC struct {
	Sa_family    uint16
	Dev_idx      uint32
	Target_idx   uint32
	Nfc_protocol uint32
}

type _Socklen uint32

type Linger struct {
	Onoff  int32
	Linger int32
}

type IPMreq struct {
	Multiaddr [4]byte /* in_addr */
	Interface [4]byte /* in_addr */
}

type IPMreqn struct {
	Multiaddr [4]byte /* in_addr */
	Address   [4]byte /* in_addr */
	Ifindex   int32
}

type IPv6Mreq struct {
	Multiaddr [16]byte /* in6_addr */
	Interface uint32
}

type PacketMreq struct {
	Ifindex int32
	Type    uint16
	Alen    uint16
	Address [8]uint8
}

type Inet4Pktinfo struct {
	Ifindex  int32
	Spec_dst [4]byte /* in_addr */
	Addr     [4]byte /* in_addr */
}

type Inet6Pktinfo struct {
	Addr    [16]byte /* in6_addr */
	Ifindex uint32
}

type IPv6MTUInfo struct {
	Addr RawSockaddrInet6
	Mtu  uint32
}

type ICMPv6Filter struct {
	Data [8]uint32
}

type Ucred struct {
	Pid int32
	Uid uint32
	Gid uint32
}

type TCPInfo struct {
	State           uint8
	Ca_state        uint8
	Retransmits     uint8
	Probes          uint8
	Backoff         uint8
	Options         uint8
	Rto             uint32
	Ato             uint32
	Snd_mss         uint32
	Rcv_mss         uint32
	Unacked         uint32
	Sacked          uint32
	Lost            uint32
	Retrans         uint32
	Fackets         uint32
	Last_data_sent  uint32
	Last_ack_sent   uint32
	Last_data_recv  uint32
	Last_ack_recv   uint32
	Pmtu            uint32
	Rcv_ssthresh    uint32
	Rtt             uint32
	Rttvar          uint32
	Snd_ssthresh    uint32
	Snd_cwnd        uint32
	Advmss          uint32
	Reordering      uint32
	Rcv_rtt         uint32
	Rcv_space       uint32
	Total_retrans   uint32
	Pacing_rate     uint64
	Max_pacing_rate uint64
	Bytes_acked     uint64
	Bytes_received  uint64
	Segs_out        uint32
	Segs_in         uint32
	Notsent_bytes   uint32
	Min_rtt         uint32
	Data_segs_in    uint32
	Data_segs_out   uint32
	Delivery_rate   uint64
	Busy_time       uint64
	Rwnd_limited    uint64
	Sndbuf_limited  uint64
	Delivered       uint32
	Delivered_ce    uint32
	Bytes_sent      uint64
	Bytes_retrans   uint64
	Dsack_dups      uint32
	Reord_seen      uint32
	Rcv_ooopack     uint32
	Snd_wnd         uint32
	Rcv_wnd         uint32
	Rehash          uint32
}

type CanFilter struct {
	Id   uint32
	Mask uint32
}

type TCPRepairOpt struct {
	Code uint32
	Val  uint32
}

const (
	SizeofSockaddrInet4     = 0x10
	SizeofSockaddrInet6     = 0x1c
	SizeofSockaddrAny       = 0x70
	SizeofSockaddrUnix      = 0x6e
	SizeofSockaddrLinklayer = 0x14
	SizeofSockaddrNetlink   = 0xc
	SizeofSockaddrHCI       = 0x6
	SizeofSockaddrL2        = 0xe
	SizeofSockaddrRFCOMM    = 0xa
	SizeofSockaddrCAN       = 0x18
	SizeofSockaddrALG       = 0x58
	SizeofSockaddrVM        = 0x10
	SizeofSockaddrXDP       = 0x10
	SizeofSockaddrPPPoX     = 0x1e
	SizeofSockaddrTIPC      = 0x10
	SizeofSockaddrL2TPIP    = 0x10
	SizeofSockaddrL2TPIP6   = 0x20
	SizeofSockaddrIUCV      = 0x20
	SizeofSockaddrNFC       = 0x10
	SizeofLinger            = 0x8
	SizeofIPMreq            = 0x8
	SizeofIPMreqn           = 0xc
	SizeofIPv6Mreq          = 0x14
	SizeofPacketMreq        = 0x10
	SizeofInet4Pktinfo      = 0xc
	SizeofInet6Pktinfo      = 0x14
	SizeofIPv6MTUInfo       = 0x20
	SizeofICMPv6Filter      = 0x20
	SizeofUcred             = 0xc
	SizeofTCPInfo           = 0xf0
	SizeofCanFilter         = 0x8
	SizeofTCPRepairOpt      = 0x8
)

const (
	NDA_UNSPEC         = 0x0
	NDA_DST            = 0x1
	NDA_LLADDR         = 0x2
	NDA_CACHEINFO      = 0x3
	NDA_PROBES         = 0x4
	NDA_VLAN           = 0x5
	NDA_PORT           = 0x6
	NDA_VNI            = 0x7
	NDA_IFINDEX        = 0x8
	NDA_MASTER         = 0x9
	NDA_LINK_NETNSID   = 0xa
	NDA_SRC_VNI        = 0xb
	NTF_USE            = 0x1
	NTF_SELF           = 0x2
	NTF_MASTER         = 0x4
	NTF_PROXY          = 0x8
	NTF_EXT_LEARNED    = 0x10
	NTF_OFFLOADED      = 0x20
	NTF_ROUTER         = 0x80
	NUD_INCOMPLETE     = 0x1
	NUD_REACHABLE      = 0x2
	NUD_STALE          = 0x4
	NUD_DELAY          = 0x8
	NUD_PROBE          = 0x10
	NUD_FAILED         = 0x20
	NUD_NOARP          = 0x40
	NUD_PERMANENT      = 0x80
	NUD_NONE           = 0x0
	IFA_UNSPEC         = 0x0
	IFA_ADDRESS        = 0x1
	IFA_LOCAL          = 0x2
	IFA_LABEL          = 0x3
	IFA_BROADCAST      = 0x4
	IFA_ANYCAST        = 0x5
	IFA_CACHEINFO      = 0x6
	IFA_MULTICAST      = 0x7
	IFA_FLAGS          = 0x8
	IFA_RT_PRIORITY    = 0x9
	IFA_TARGET_NETNSID = 0xa
	RT_SCOPE_UNIVERSE  = 0x0
	RT_SCOPE_SITE      = 0xc8
	RT_SCOPE_LINK      = 0xfd
	RT_SCOPE_HOST      = 0xfe
	RT_SCOPE_NOWHERE   = 0xff
	RT_TABLE_UNSPEC    = 0x0
	RT_TABLE_COMPAT    = 0xfc
	RT_TABLE_DEFAULT   = 0xfd
	RT_TABLE_MAIN      = 0xfe
	RT_TABLE_LOCAL     = 0xff
	RT_TABLE_MAX       = 0xffffffff
	RTA_UNSPEC         = 0x0
	RTA_DST            = 0x1
	RTA_SRC            = 0x2
	RTA_IIF            = 0x3
	RTA_OIF            = 0x4
	RTA_GATEWAY        = 0x5
	RTA_PRIORITY       = 0x6
	RTA_PREFSRC        = 0x7
	RTA_METRICS        = 0x8
	RTA_MULTIPATH      = 0x9
	RTA_FLOW           = 0xb
	RTA_CACHEINFO      = 0xc
	RTA_TABLE          = 0xf
	RTA_MARK           = 0x10
	RTA_MFC_STATS      = 0x11
	RTA_VIA            = 0x12
	RTA_NEWDST         = 0x13
	RTA_PREF           = 0x14
	RTA_ENCAP_TYPE     = 0x15
	RTA_ENCAP          = 0x16
	RTA_EXPIRES        = 0x17
	RTA_PAD            = 0x18
	RTA_UID            = 0x19
	RTA_TTL_PROPAGATE  = 0x1a
	RTA_IP_PROTO       = 0x1b
	RTA_SPORT          = 0x1c
	RTA_DPORT          = 0x1d
	RTN_UNSPEC         = 0x0
	RTN_UNICAST        = 0x1
	RTN_LOCAL          = 0x2
	RTN_BROADCAST      = 0x3
	RTN_ANYCAST        = 0x4
	RTN_MULTICAST      = 0x5
	RTN_BLACKHOLE      = 0x6
	RTN_UNREACHABLE    = 0x7
	RTN_PROHIBIT       = 0x8
	RTN_THROW          = 0x9
	RTN_NAT            = 0xa
	RTN_XRESOLVE       = 0xb
	SizeofNlMsghdr     = 0x10
	SizeofNlMsgerr     = 0x14
	SizeofRtGenmsg     = 0x1
	SizeofNlAttr       = 0x4
	SizeofRtAttr       = 0x4
	SizeofIfInfomsg    = 0x10
	SizeofIfAddrmsg    = 0x8
	SizeofIfaCacheinfo = 0x10
	SizeofRtMsg        = 0xc
	SizeofRtNexthop    = 0x8
	SizeofNdUseroptmsg = 0x10
	SizeofNdMsg        = 0xc
)

type NlMsghdr struct {
	Len   uint32
	Type  uint16
	Flags uint16
	Seq   uint32
	Pid   uint32
}

type NlMsgerr struct {
	Error int32
	Msg   NlMsghdr
}

type RtGenmsg struct {
	Family uint8
}

type NlAttr struct {
	Len  uint16
	Type uint16
}

type RtAttr struct {
	Len  uint16
	Type uint16
}

type IfInfomsg struct {
	Family uint8
	_      uint8
	Type   uint16
	Index  int32
	Flags  uint32
	Change uint32
}

type IfAddrmsg struct {
	Family    uint8
	Prefixlen uint8
	Flags     uint8
	Scope     uint8
	Index     uint32
}

type IfaCacheinfo struct {
	Prefered uint32
	Valid    uint32
	Cstamp   uint32
	Tstamp   uint32
}

type RtMsg struct {
	Family   uint8
	Dst_len  uint8
	Src_len  uint8
	Tos      uint8
	Table    uint8
	Protocol uint8
	Scope    uint8
	Type     uint8
	Flags    uint32
}

type RtNexthop struct {
	Len     uint16
	Flags   uint8
	Hops    uint8
	Ifindex int32
}

type NdUseroptmsg struct {
	Family    uint8
	Pad1      uint8
	Opts_len  uint16
	Ifindex   int32
	Icmp_type uint8
	Icmp_code uint8
	Pad2      uint16
	Pad3      uint32
}

type NdMsg struct {
	Family  uint8
	Pad1    uint8
	Pad2    uint16
	Ifindex int32
	State   uint16
	Flags   uint8
	Type    uint8
}

const (
	ICMP_FILTER = 0x1

	ICMPV6_FILTER             = 0x1
	ICMPV6_FILTER_BLOCK       = 0x1
	ICMPV6_FILTER_BLOCKOTHERS = 0x3
	ICMPV6_FILTER_PASS        = 0x2
	ICMPV6_FILTER_PASSONLY    = 0x4
)

const (
	SizeofSockFilter = 0x8
)

type SockFilter struct {
	Code uint16
	Jt   uint8
	Jf   uint8
	K    uint32
}

type SockFprog struct {
	Len    uint16
	Filter *SockFilter
}

type InotifyEvent struct {
	Wd     int32
	Mask   uint32
	Cookie uint32
	Len    uint32
}

const SizeofInotifyEvent = 0x10

const SI_LOAD_SHIFT = 0x10

type Utsname struct {
	Sysname    [65]byte
	Nodename   [65]byte
	Release    [65]byte
	Version    [65]byte
	Machine    [65]byte
	Domainname [65]byte
}

const (
	AT_EMPTY_PATH   = 0x1000
	AT_FDCWD        = -0x64
	AT_NO_AUTOMOUNT = 0x800
	AT_REMOVEDIR    = 0x200

	AT_STATX_SYNC_AS_STAT = 0x0
	AT_STATX_FORCE_SYNC   = 0x2000
	AT_STATX_DONT_SYNC    = 0x4000

	AT_RECURSIVE = 0x8000

	AT_SYMLINK_FOLLOW   = 0x400
	AT_SYMLINK_NOFOLLOW = 0x100

	AT_EACCESS = 0x200

	OPEN_TREE_CLONE = 0x1

	MOVE_MOUNT_F_SYMLINKS   = 0x1
	MOVE_MOUNT_F_AUTOMOUNTS = 0x2
	MOVE_MOUNT_F_EMPTY_PATH = 0x4
	MOVE_MOUNT_T_SYMLINKS   = 0x10
	MOVE_MOUNT_T_AUTOMOUNTS = 0x20
	MOVE_MOUNT_T_EMPTY_PATH = 0x40
	MOVE_MOUNT_SET_GROUP    = 0x100

	FSOPEN_CLOEXEC = 0x1

	FSPICK_CLOEXEC          = 0x1
	FSPICK_SYMLINK_NOFOLLOW = 0x2
	FSPICK_NO_AUTOMOUNT     = 0x4
	FSPICK_EMPTY_PATH       = 0x8

	FSMOUNT_CLOEXEC = 0x1
)

type OpenHow struct {
	Flags   uint64
	Mode    uint64
	Resolve uint64
}

const SizeofOpenHow = 0x18

const (
	RESOLVE_BENEATH       = 0x8
	RESOLVE_IN_ROOT       = 0x10
	RESOLVE_NO_MAGICLINKS = 0x2
	RESOLVE_NO_SYMLINKS   = 0x4
	RESOLVE_NO_XDEV       = 0x1
)

type PollFd struct {
	Fd      int32
	Events  int16
	Revents int16
}

const (
	POLLIN   = 0x1
	POLLPRI  = 0x2
	POLLOUT  = 0x4
	POLLERR  = 0x8
	POLLHUP  = 0x10
	POLLNVAL = 0x20
)

type SignalfdSiginfo struct {
	Signo     uint32
	Errno     int32
	Code      int32
	Pid       uint32
	Uid       uint32
	Fd        int32
	Tid       uint32
	Band      uint32
	Overrun   uint32
	Trapno    uint32
	Status    int32
	Int       int32
	Ptr       uint64
	Utime     uint64
	Stime     uint64
	Addr      uint64
	Addr_lsb  uint16
	_         uint16
	Syscall   int32
	Call_addr uint64
	Arch      uint32
	_         [28]uint8
}

type Winsize struct {
	Row    uint16
	Col    uint16
	Xpixel uint16
	Ypixel uint16
}

const (
	TASKSTATS_CMD_UNSPEC                  = 0x0
	TASKSTATS_CMD_GET                     = 0x1
	TASKSTATS_CMD_NEW                     = 0x2
	TASKSTATS_TYPE_UNSPEC                 = 0x0
	TASKSTATS_TYPE_PID                    = 0x1
	TASKSTATS_TYPE_TGID                   = 0x2
	TASKSTATS_TYPE_STATS                  = 0x3
	TASKSTATS_TYPE_AGGR_PID               = 0x4
	TASKSTATS_TYPE_AGGR_TGID              = 0x5
	TASKSTATS_TYPE_NULL                   = 0x6
	TASKSTATS_CMD_ATTR_UNSPEC             = 0x0
	TASKSTATS_CMD_ATTR_PID                = 0x1
	TASKSTATS_CMD_ATTR_TGID               = 0x2
	TASKSTATS_CMD_ATTR_REGISTER_CPUMASK   = 0x3
	TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4
)

type CGroupStats struct {
	Sleeping        uint64
	Running         uint64
	Stopped         uint64
	Uninterruptible uint64
	Io_wait         uint64
}

const (
	CGROUPSTATS_CMD_UNSPEC        = 0x3
	CGROUPSTATS_CMD_GET           = 0x4
	CGROUPSTATS_CMD_NEW           = 0x5
	CGROUPSTATS_TYPE_UNSPEC       = 0x0
	CGROUPSTATS_TYPE_CGROUP_STATS = 0x1
	CGROUPSTATS_CMD_ATTR_UNSPEC   = 0x0
	CGROUPSTATS_CMD_ATTR_FD       = 0x1
)

type Genlmsghdr struct {
	Cmd      uint8
	Version  uint8
	Reserved uint16
}

const (
	CTRL_CMD_UNSPEC            = 0x0
	CTRL_CMD_NEWFAMILY         = 0x1
	CTRL_CMD_DELFAMILY         = 0x2
	CTRL_CMD_GETFAMILY         = 0x3
	CTRL_CMD_NEWOPS            = 0x4
	CTRL_CMD_DELOPS            = 0x5
	CTRL_CMD_GETOPS            = 0x6
	CTRL_CMD_NEWMCAST_GRP      = 0x7
	CTRL_CMD_DELMCAST_GRP      = 0x8
	CTRL_CMD_GETMCAST_GRP      = 0x9
	CTRL_CMD_GETPOLICY         = 0xa
	CTRL_ATTR_UNSPEC           = 0x0
	CTRL_ATTR_FAMILY_ID        = 0x1
	CTRL_ATTR_FAMILY_NAME      = 0x2
	CTRL_ATTR_VERSION          = 0x3
	CTRL_ATTR_HDRSIZE          = 0x4
	CTRL_ATTR_MAXATTR          = 0x5
	CTRL_ATTR_OPS              = 0x6
	CTRL_ATTR_MCAST_GROUPS     = 0x7
	CTRL_ATTR_POLICY           = 0x8
	CTRL_ATTR_OP_POLICY        = 0x9
	CTRL_ATTR_OP               = 0xa
	CTRL_ATTR_OP_UNSPEC        = 0x0
	CTRL_ATTR_OP_ID            = 0x1
	CTRL_ATTR_OP_FLAGS         = 0x2
	CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0
	CTRL_ATTR_MCAST_GRP_NAME   = 0x1
	CTRL_ATTR_MCAST_GRP_ID     = 0x2
	CTRL_ATTR_POLICY_UNSPEC    = 0x0
	CTRL_ATTR_POLICY_DO        = 0x1
	CTRL_ATTR_POLICY_DUMP      = 0x2
	CTRL_ATTR_POLICY_DUMP_MAX  = 0x2
)

const (
	_CPU_SETSIZE = 0x400
)

const (
	BDADDR_BREDR     = 0x0
	BDADDR_LE_PUBLIC = 0x1
	BDADDR_LE_RANDOM = 0x2
)

type PerfEventAttr struct {
	Type               uint32
	Size               uint32
	Config             uint64
	Sample             uint64
	Sample_type        uint64
	Read_format        uint64
	Bits               uint64
	Wakeup             uint32
	Bp_type            uint32
	Ext1               uint64
	Ext2               uint64
	Branch_sample_type uint64
	Sample_regs_user   uint64
	Sample_stack_user  uint32
	Clockid            int32
	Sample_regs_intr   uint64
	Aux_watermark      uint32
	Sample_max_stack   uint16
	_                  uint16
	Aux_sample_size    uint32
	_                  uint32
	Sig_data           uint64
}

type PerfEventMmapPage struct {
	Version        uint32
	Compat_version uint32
	Lock           uint32
	Index          uint32
	Offset         int64
	Time_enabled   uint64
	Time_running   uint64
	Capabilities   uint64
	Pmc_width      uint16
	Time_shift     uint16
	Time_mult      uint32
	Time_offset    uint64
	Time_zero      uint64
	Size           uint32
	_              uint32
	Time_cycles    uint64
	Time_mask      uint64
	_              [928]uint8
	Data_head      uint64
	Data_tail      uint64
	Data_offset    uint64
	Data_size      uint64
	Aux_head       uint64
	Aux_tail       uint64
	Aux_offset     uint64
	Aux_size       uint64
}

const (
	PerfBitDisabled               uint64 = CBitFieldMaskBit0
	PerfBitInherit                       = CBitFieldMaskBit1
	PerfBitPinned                        = CBitFieldMaskBit2
	PerfBitExclusive                     = CBitFieldMaskBit3
	PerfBitExcludeUser                   = CBitFieldMaskBit4
	PerfBitExcludeKernel                 = CBitFieldMaskBit5
	PerfBitExcludeHv                     = CBitFieldMaskBit6
	PerfBitExcludeIdle                   = CBitFieldMaskBit7
	PerfBitMmap                          = CBitFieldMaskBit8
	PerfBitComm                          = CBitFieldMaskBit9
	PerfBitFreq                          = CBitFieldMaskBit10
	PerfBitInheritStat                   = CBitFieldMaskBit11
	PerfBitEnableOnExec                  = CBitFieldMaskBit12
	PerfBitTask                          = CBitFieldMaskBit13
	PerfBitWatermark                     = CBitFieldMaskBit14
	PerfBitPreciseIPBit1                 = CBitFieldMaskBit15
	PerfBitPreciseIPBit2                 = CBitFieldMaskBit16
	PerfBitMmapData                      = CBitFieldMaskBit17
	PerfBitSampleIDAll                   = CBitFieldMaskBit18
	PerfBitExcludeHost                   = CBitFieldMaskBit19
	PerfBitExcludeGuest                  = CBitFieldMaskBit20
	PerfBitExcludeCallchainKernel        = CBitFieldMaskBit21
	PerfBitExcludeCallchainUser          = CBitFieldMaskBit22
	PerfBitMmap2                         = CBitFieldMaskBit23
	PerfBitCommExec                      = CBitFieldMaskBit24
	PerfBitUseClockID                    = CBitFieldMaskBit25
	PerfBitContextSwitch                 = CBitFieldMaskBit26
	PerfBitWriteBackward                 = CBitFieldMaskBit27
)

const (
	PERF_TYPE_HARDWARE                    = 0x0
	PERF_TYPE_SOFTWARE                    = 0x1
	PERF_TYPE_TRACEPOINT                  = 0x2
	PERF_TYPE_HW_CACHE                    = 0x3
	PERF_TYPE_RAW                         = 0x4
	PERF_TYPE_BREAKPOINT                  = 0x5
	PERF_TYPE_MAX                         = 0x6
	PERF_COUNT_HW_CPU_CYCLES              = 0x0
	PERF_COUNT_HW_INSTRUCTIONS            = 0x1
	PERF_COUNT_HW_CACHE_REFERENCES        = 0x2
	PERF_COUNT_HW_CACHE_MISSES            = 0x3
	PERF_COUNT_HW_BRANCH_INSTRUCTIONS     = 0x4
	PERF_COUNT_HW_BRANCH_MISSES           = 0x5
	PERF_COUNT_HW_BUS_CYCLES              = 0x6
	PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7
	PERF_COUNT_HW_STALLED_CYCLES_BACKEND  = 0x8
	PERF_COUNT_HW_REF_CPU_CYCLES          = 0x9
	PERF_COUNT_HW_MAX                     = 0xa
	PERF_COUNT_HW_CACHE_L1D               = 0x0
	PERF_COUNT_HW_CACHE_L1I               = 0x1
	PERF_COUNT_HW_CACHE_LL                = 0x2
	PERF_COUNT_HW_CACHE_DTLB              = 0x3
	PERF_COUNT_HW_CACHE_ITLB              = 0x4
	PERF_COUNT_HW_CACHE_BPU               = 0x5
	PERF_COUNT_HW_CACHE_NODE              = 0x6
	PERF_COUNT_HW_CACHE_MAX               = 0x7
	PERF_COUNT_HW_CACHE_OP_READ           = 0x0
	PERF_COUNT_HW_CACHE_OP_WRITE          = 0x1
	PERF_COUNT_HW_CACHE_OP_PREFETCH       = 0x2
	PERF_COUNT_HW_CACHE_OP_MAX            = 0x3
	PERF_COUNT_HW_CACHE_RESULT_ACCESS     = 0x0
	PERF_COUNT_HW_CACHE_RESULT_MISS       = 0x1
	PERF_COUNT_HW_CACHE_RESULT_MAX        = 0x2
	PERF_COUNT_SW_CPU_CLOCK               = 0x0
	PERF_COUNT_SW_TASK_CLOCK              = 0x1
	PERF_COUNT_SW_PAGE_FAULTS             = 0x2
	PERF_COUNT_SW_CONTEXT_SWITCHES        = 0x3
	PERF_COUNT_SW_CPU_MIGRATIONS          = 0x4
	PERF_COUNT_SW_PAGE_FAULTS_MIN         = 0x5
	PERF_COUNT_SW_PAGE_FAULTS_MAJ         = 0x6
	PERF_COUNT_SW_ALIGNMENT_FAULTS        = 0x7
	PERF_COUNT_SW_EMULATION_FAULTS        = 0x8
	PERF_COUNT_SW_DUMMY                   = 0x9
	PERF_COUNT_SW_BPF_OUTPUT              = 0xa
	PERF_COUNT_SW_MAX                     = 0xc
	PERF_SAMPLE_IP                        = 0x1
	PERF_SAMPLE_TID                       = 0x2
	PERF_SAMPLE_TIME                      = 0x4
	PERF_SAMPLE_ADDR                      = 0x8
	PERF_SAMPLE_READ                      = 0x10
	PERF_SAMPLE_CALLCHAIN                 = 0x20
	PERF_SAMPLE_ID                        = 0x40
	PERF_SAMPLE_CPU                       = 0x80
	PERF_SAMPLE_PERIOD                    = 0x100
	PERF_SAMPLE_STREAM_ID                 = 0x200
	PERF_SAMPLE_RAW                       = 0x400
	PERF_SAMPLE_BRANCH_STACK              = 0x800
	PERF_SAMPLE_REGS_USER                 = 0x1000
	PERF_SAMPLE_STACK_USER                = 0x2000
	PERF_SAMPLE_WEIGHT                    = 0x4000
	PERF_SAMPLE_DATA_SRC                  = 0x8000
	PERF_SAMPLE_IDENTIFIER                = 0x10000
	PERF_SAMPLE_TRANSACTION               = 0x20000
	PERF_SAMPLE_REGS_INTR                 = 0x40000
	PERF_SAMPLE_PHYS_ADDR                 = 0x80000
	PERF_SAMPLE_AUX                       = 0x100000
	PERF_SAMPLE_CGROUP                    = 0x200000
	PERF_SAMPLE_DATA_PAGE_SIZE            = 0x400000
	PERF_SAMPLE_CODE_PAGE_SIZE            = 0x800000
	PERF_SAMPLE_WEIGHT_STRUCT             = 0x1000000
	PERF_SAMPLE_MAX                       = 0x2000000
	PERF_SAMPLE_BRANCH_USER_SHIFT         = 0x0
	PERF_SAMPLE_BRANCH_KERNEL_SHIFT       = 0x1
	PERF_SAMPLE_BRANCH_HV_SHIFT           = 0x2
	PERF_SAMPLE_BRANCH_ANY_SHIFT          = 0x3
	PERF_SAMPLE_BRANCH_ANY_CALL_SHIFT     = 0x4
	PERF_SAMPLE_BRANCH_ANY_RETURN_SHIFT   = 0x5
	PERF_SAMPLE_BRANCH_IND_CALL_SHIFT     = 0x6
	PERF_SAMPLE_BRANCH_ABORT_TX_SHIFT     = 0x7
	PERF_SAMPLE_BRANCH_IN_TX_SHIFT        = 0x8
	PERF_SAMPLE_BRANCH_NO_TX_SHIFT        = 0x9
	PERF_SAMPLE_BRANCH_COND_SHIFT         = 0xa
	PERF_SAMPLE_BRANCH_CALL_STACK_SHIFT   = 0xb
	PERF_SAMPLE_BRANCH_IND_JUMP_SHIFT     = 0xc
	PERF_SAMPLE_BRANCH_CALL_SHIFT         = 0xd
	PERF_SAMPLE_BRANCH_NO_FLAGS_SHIFT     = 0xe
	PERF_SAMPLE_BRANCH_NO_CYCLES_SHIFT    = 0xf
	PERF_SAMPLE_BRANCH_TYPE_SAVE_SHIFT    = 0x10
	PERF_SAMPLE_BRANCH_HW_INDEX_SHIFT     = 0x11
	PERF_SAMPLE_BRANCH_PRIV_SAVE_SHIFT    = 0x12
	PERF_SAMPLE_BRANCH_MAX_SHIFT          = 0x13
	PERF_SAMPLE_BRANCH_USER               = 0x1
	PERF_SAMPLE_BRANCH_KERNEL             = 0x2
	PERF_SAMPLE_BRANCH_HV                 = 0x4
	PERF_SAMPLE_BRANCH_ANY                = 0x8
	PERF_SAMPLE_BRANCH_ANY_CALL           = 0x10
	PERF_SAMPLE_BRANCH_ANY_RETURN         = 0x20
	PERF_SAMPLE_BRANCH_IND_CALL           = 0x40
	PERF_SAMPLE_BRANCH_ABORT_TX           = 0x80
	PERF_SAMPLE_BRANCH_IN_TX              = 0x100
	PERF_SAMPLE_BRANCH_NO_TX              = 0x200
	PERF_SAMPLE_BRANCH_COND               = 0x400
	PERF_SAMPLE_BRANCH_CALL_STACK         = 0x800
	PERF_SAMPLE_BRANCH_IND_JUMP           = 0x1000
	PERF_SAMPLE_BRANCH_CALL               = 0x2000
	PERF_SAMPLE_BRANCH_NO_FLAGS           = 0x4000
	PERF_SAMPLE_BRANCH_NO_CYCLES          = 0x8000
	PERF_SAMPLE_BRANCH_TYPE_SAVE          = 0x10000
	PERF_SAMPLE_BRANCH_HW_INDEX           = 0x20000
	PERF_SAMPLE_BRANCH_PRIV_SAVE          = 0x40000
	PERF_SAMPLE_BRANCH_MAX                = 0x80000
	PERF_BR_UNKNOWN                       = 0x0
	PERF_BR_COND                          = 0x1
	PERF_BR_UNCOND                        = 0x2
	PERF_BR_IND                           = 0x3
	PERF_BR_CALL                          = 0x4
	PERF_BR_IND_CALL                      = 0x5
	PERF_BR_RET                           = 0x6
	PERF_BR_SYSCALL                       = 0x7
	PERF_BR_SYSRET                        = 0x8
	PERF_BR_COND_CALL                     = 0x9
	PERF_BR_COND_RET                      = 0xa
	PERF_BR_ERET                          = 0xb
	PERF_BR_IRQ                           = 0xc
	PERF_BR_SERROR                        = 0xd
	PERF_BR_NO_TX                         = 0xe
	PERF_BR_EXTEND_ABI                    = 0xf
	PERF_BR_MAX                           = 0x10
	PERF_SAMPLE_REGS_ABI_NONE             = 0x0
	PERF_SAMPLE_REGS_ABI_32               = 0x1
	PERF_SAMPLE_REGS_ABI_64               = 0x2
	PERF_TXN_ELISION                      = 0x1
	PERF_TXN_TRANSACTION                  = 0x2
	PERF_TXN_SYNC                         = 0x4
	PERF_TXN_ASYNC                        = 0x8
	PERF_TXN_RETRY                        = 0x10
	PERF_TXN_CONFLICT                     = 0x20
	PERF_TXN_CAPACITY_WRITE               = 0x40
	PERF_TXN_CAPACITY_READ                = 0x80
	PERF_TXN_MAX                          = 0x100
	PERF_TXN_ABORT_MASK                   = -0x100000000
	PERF_TXN_ABORT_SHIFT                  = 0x20
	PERF_FORMAT_TOTAL_TIME_ENABLED        = 0x1
	PERF_FORMAT_TOTAL_TIME_RUNNING        = 0x2
	PERF_FORMAT_ID                        = 0x4
	PERF_FORMAT_GROUP                     = 0x8
	PERF_FORMAT_LOST                      = 0x10
	PERF_FORMAT_MAX                       = 0x20
	PERF_IOC_FLAG_GROUP                   = 0x1
	PERF_RECORD_MMAP                      = 0x1
	PERF_RECORD_LOST                      = 0x2
	PERF_RECORD_COMM                      = 0x3
	PERF_RECORD_EXIT                      = 0x4
	PERF_RECORD_THROTTLE                  = 0x5
	PERF_RECORD_UNTHROTTLE                = 0x6
	PERF_RECORD_FORK                      = 0x7
	PERF_RECORD_READ                      = 0x8
	PERF_RECORD_SAMPLE                    = 0x9
	PERF_RECORD_MMAP2                     = 0xa
	PERF_RECORD_AUX                       = 0xb
	PERF_RECORD_ITRACE_START              = 0xc
	PERF_RECORD_LOST_SAMPLES              = 0xd
	PERF_RECORD_SWITCH                    = 0xe
	PERF_RECORD_SWITCH_CPU_WIDE           = 0xf
	PERF_RECORD_NAMESPACES                = 0x10
	PERF_RECORD_KSYMBOL                   = 0x11
	PERF_RECORD_BPF_EVENT                 = 0x12
	PERF_RECORD_CGROUP                    = 0x13
	PERF_RECORD_TEXT_POKE                 = 0x14
	PERF_RECORD_AUX_OUTPUT_HW_ID          = 0x15
	PERF_RECORD_MAX                       = 0x16
	PERF_RECORD_KSYMBOL_TYPE_UNKNOWN      = 0x0
	PERF_RECORD_KSYMBOL_TYPE_BPF          = 0x1
	PERF_RECORD_KSYMBOL_TYPE_OOL          = 0x2
	PERF_RECORD_KSYMBOL_TYPE_MAX          = 0x3
	PERF_BPF_EVENT_UNKNOWN                = 0x0
	PERF_BPF_EVENT_PROG_LOAD              = 0x1
	PERF_BPF_EVENT_PROG_UNLOAD            = 0x2
	PERF_BPF_EVENT_MAX                    = 0x3
	PERF_CONTEXT_HV                       = -0x20
	PERF_CONTEXT_KERNEL                   = -0x80
	PERF_CONTEXT_USER                     = -0x200
	PERF_CONTEXT_GUEST                    = -0x800
	PERF_CONTEXT_GUEST_KERNEL             = -0x880
	PERF_CONTEXT_GUEST_USER               = -0xa00
	PERF_CONTEXT_MAX                      = -0xfff
)

type TCPMD5Sig struct {
	Addr      SockaddrStorage
	Flags     uint8
	Prefixlen uint8
	Keylen    uint16
	Ifindex   int32
	Key       [80]uint8
}

type HDDriveCmdHdr struct {
	Command uint8
	Number  uint8
	Feature uint8
	Count   uint8
}

type HDDriveID struct {
	Config         uint16
	Cyls           uint16
	Reserved2      uint16
	Heads          uint16
	Track_bytes    uint16
	Sector_bytes   uint16
	Sectors        uint16
	Vendor0        uint16
	Vendor1        uint16
	Vendor2        uint16
	Serial_no      [20]uint8
	Buf_type       uint16
	Buf_size       uint16
	Ecc_bytes      uint16
	Fw_rev         [8]uint8
	Model          [40]uint8
	Max_multsect   uint8
	Vendor3        uint8
	Dword_io       uint16
	Vendor4        uint8
	Capability     uint8
	Reserved50     uint16
	Vendor5        uint8
	TPIO           uint8
	Vendor6        uint8
	TDMA           uint8
	Field_valid    uint16
	Cur_cyls       uint16
	Cur_heads      uint16
	Cur_sectors    uint16
	Cur_capacity0  uint16
	Cur_capacity1  uint16
	Multsect       uint8
	Multsect_valid uint8
	Lba_capacity   uint32
	Dma_1word      uint16
	Dma_mword      uint16
	Eide_pio_modes uint16
	Eide_dma_min   uint16
	Eide_dma_time  uint16
	Eide_pio       uint16
	Eide_pio_iordy uint16
	Words69_70     [2]uint16
	Words71_74     [4]uint16
	Queue_depth    uint16
	Words76_79     [4]uint16
	Major_rev_num  uint16
	Minor_rev_num  uint16
	Command_set_1  uint16
	Command_set_2  uint16
	Cfsse          uint16
	Cfs_enable_1   uint16
	Cfs_enable_2   uint16
	Csf_default    uint16
	Dma_ultra      uint16
	Trseuc         uint16
	TrsEuc         uint16
	CurAPMvalues   uint16
	Mprc           uint16
	Hw_config      uint16
	Acoustic       uint16
	Msrqs          uint16
	Sxfert         uint16
	Sal            uint16
	Spg            uint32
	Lba_capacity_2 uint64
	Words104_125   [22]uint16
	Last_lun       uint16
	Word127        uint16
	Dlf            uint16
	Csfo           uint16
	Words130_155   [26]uint16
	Word156        uint16
	Words157_159   [3]uint16
	Cfa_power      uint16
	Words161_175   [15]uint16
	Words176_205   [30]uint16
	Words206_254   [49]uint16
	Integrity_word uint16
}

const (
	ST_MANDLOCK    = 0x40
	ST_NOATIME     = 0x400
	ST_NODEV       = 0x4
	ST_NODIRATIME  = 0x800
	ST_NOEXEC      = 0x8
	ST_NOSUID      = 0x2
	ST_RDONLY      = 0x1
	ST_RELATIME    = 0x1000
	ST_SYNCHRONOUS = 0x10
)

type Tpacket2Hdr struct {
	Status    uint32
	Len       uint32
	Snaplen   uint32
	Mac       uint16
	Net       uint16
	Sec       uint32
	Nsec      uint32
	Vlan_tci  uint16
	Vlan_tpid uint16
	_         [4]uint8
}

type Tpacket3Hdr struct {
	Next_offset uint32
	Sec         uint32
	Nsec        uint32
	Snaplen     uint32
	Len         uint32
	Status      uint32
	Mac         uint16
	Net         uint16
	Hv1         TpacketHdrVariant1
	_           [8]uint8
}

type TpacketHdrVariant1 struct {
	Rxhash    uint32
	Vlan_tci  uint32
	Vlan_tpid uint16
	_         uint16
}

type TpacketBlockDesc struct {
	Version uint32
	To_priv uint32
	Hdr     [40]byte
}

type TpacketBDTS struct {
	Sec  uint32
	Usec uint32
}

type TpacketHdrV1 struct {
	Block_status        uint32
	Num_pkts            uint32
	Offset_to_first_pkt uint32
	Blk_len             uint32
	Seq_num             uint64
	Ts_first_pkt        TpacketBDTS
	Ts_last_pkt         TpacketBDTS
}

type TpacketReq struct {
	Block_size uint32
	Block_nr   uint32
	Frame_size uint32
	Frame_nr   uint32
}

type TpacketReq3 struct {
	Block_size       uint32
	Block_nr         uint32
	Frame_size       uint32
	Frame_nr         uint32
	Retire_blk_tov   uint32
	Sizeof_priv      uint32
	Feature_req_word uint32
}

type TpacketStats struct {
	Packets uint32
	Drops   uint32
}

type TpacketStatsV3 struct {
	Packets      uint32
	Drops        uint32
	Freeze_q_cnt uint32
}

type TpacketAuxdata struct {
	Status    uint32
	Len       uint32
	Snaplen   uint32
	Mac       uint16
	Net       uint16
	Vlan_tci  uint16
	Vlan_tpid uint16
}

const (
	TPACKET_V1 = 0x0
	TPACKET_V2 = 0x1
	TPACKET_V3 = 0x2
)

const (
	SizeofTpacket2Hdr = 0x20
	SizeofTpacket3Hdr = 0x30

	SizeofTpacketStats   = 0x8
	SizeofTpacketStatsV3 = 0xc
)

const (
	IFLA_UNSPEC                                = 0x0
	IFLA_ADDRESS                               = 0x1
	IFLA_BROADCAST                             = 0x2
	IFLA_IFNAME                                = 0x3
	IFLA_MTU                                   = 0x4
	IFLA_LINK                                  = 0x5
	IFLA_QDISC                                 = 0x6
	IFLA_STATS                                 = 0x7
	IFLA_COST                                  = 0x8
	IFLA_PRIORITY                              = 0x9
	IFLA_MASTER                                = 0xa
	IFLA_WIRELESS                              = 0xb
	IFLA_PROTINFO                              = 0xc
	IFLA_TXQLEN                                = 0xd
	IFLA_MAP                                   = 0xe
	IFLA_WEIGHT                                = 0xf
	IFLA_OPERSTATE                             = 0x10
	IFLA_LINKMODE                              = 0x11
	IFLA_LINKINFO                              = 0x12
	IFLA_NET_NS_PID                            = 0x13
	IFLA_IFALIAS                               = 0x14
	IFLA_NUM_VF                                = 0x15
	IFLA_VFINFO_LIST                           = 0x16
	IFLA_STATS64                               = 0x17
	IFLA_VF_PORTS                              = 0x18
	IFLA_PORT_SELF                             = 0x19
	IFLA_AF_SPEC                               = 0x1a
	IFLA_GROUP                                 = 0x1b
	IFLA_NET_NS_FD                             = 0x1c
	IFLA_EXT_MASK                              = 0x1d
	IFLA_PROMISCUITY                           = 0x1e
	IFLA_NUM_TX_QUEUES                         = 0x1f
	IFLA_NUM_RX_QUEUES                         = 0x20
	IFLA_CARRIER                               = 0x21
	IFLA_PHYS_PORT_ID                          = 0x22
	IFLA_CARRIER_CHANGES                       = 0x23
	IFLA_PHYS_SWITCH_ID                        = 0x24
	IFLA_LINK_NETNSID                          = 0x25
	IFLA_PHYS_PORT_NAME                        = 0x26
	IFLA_PROTO_DOWN                            = 0x27
	IFLA_GSO_MAX_SEGS                          = 0x28
	IFLA_GSO_MAX_SIZE                          = 0x29
	IFLA_PAD                                   = 0x2a
	IFLA_XDP                                   = 0x2b
	IFLA_EVENT                                 = 0x2c
	IFLA_NEW_NETNSID                           = 0x2d
	IFLA_IF_NETNSID                            = 0x2e
	IFLA_TARGET_NETNSID                        = 0x2e
	IFLA_CARRIER_UP_COUNT                      = 0x2f
	IFLA_CARRIER_DOWN_COUNT                    = 0x30
	IFLA_NEW_IFINDEX                           = 0x31
	IFLA_MIN_MTU                               = 0x32
	IFLA_MAX_MTU                               = 0x33
	IFLA_PROP_LIST                             = 0x34
	IFLA_ALT_IFNAME                            = 0x35
	IFLA_PERM_ADDRESS                          = 0x36
	IFLA_PROTO_DOWN_REASON                     = 0x37
	IFLA_PARENT_DEV_NAME                       = 0x38
	IFLA_PARENT_DEV_BUS_NAME                   = 0x39
	IFLA_GRO_MAX_SIZE                          = 0x3a
	IFLA_TSO_MAX_SIZE                          = 0x3b
	IFLA_TSO_MAX_SEGS                          = 0x3c
	IFLA_PROTO_DOWN_REASON_UNSPEC              = 0x0
	IFLA_PROTO_DOWN_REASON_MASK                = 0x1
	IFLA_PROTO_DOWN_REASON_VALUE               = 0x2
	IFLA_PROTO_DOWN_REASON_MAX                 = 0x2
	IFLA_INET_UNSPEC                           = 0x0
	IFLA_INET_CONF                             = 0x1
	IFLA_INET6_UNSPEC                          = 0x0
	IFLA_INET6_FLAGS                           = 0x1
	IFLA_INET6_CONF                            = 0x2
	IFLA_INET6_STATS                           = 0x3
	IFLA_INET6_MCAST                           = 0x4
	IFLA_INET6_CACHEINFO                       = 0x5
	IFLA_INET6_ICMP6STATS                      = 0x6
	IFLA_INET6_TOKEN                           = 0x7
	IFLA_INET6_ADDR_GEN_MODE                   = 0x8
	IFLA_BR_UNSPEC                             = 0x0
	IFLA_BR_FORWARD_DELAY                      = 0x1
	IFLA_BR_HELLO_TIME                         = 0x2
	IFLA_BR_MAX_AGE                            = 0x3
	IFLA_BR_AGEING_TIME                        = 0x4
	IFLA_BR_STP_STATE                          = 0x5
	IFLA_BR_PRIORITY                           = 0x6
	IFLA_BR_VLAN_FILTERING                     = 0x7
	IFLA_BR_VLAN_PROTOCOL                      = 0x8
	IFLA_BR_GROUP_FWD_MASK                     = 0x9
	IFLA_BR_ROOT_ID                            = 0xa
	IFLA_BR_BRIDGE_ID                          = 0xb
	IFLA_BR_ROOT_PORT                          = 0xc
	IFLA_BR_ROOT_PATH_COST                     = 0xd
	IFLA_BR_TOPOLOGY_CHANGE                    = 0xe
	IFLA_BR_TOPOLOGY_CHANGE_DETECTED           = 0xf
	IFLA_BR_HELLO_TIMER                        = 0x10
	IFLA_BR_TCN_TIMER                          = 0x11
	IFLA_BR_TOPOLOGY_CHANGE_TIMER              = 0x12
	IFLA_BR_GC_TIMER                           = 0x13
	IFLA_BR_GROUP_ADDR                         = 0x14
	IFLA_BR_FDB_FLUSH                          = 0x15
	IFLA_BR_MCAST_ROUTER                       = 0x16
	IFLA_BR_MCAST_SNOOPING                     = 0x17
	IFLA_BR_MCAST_QUERY_USE_IFADDR             = 0x18
	IFLA_BR_MCAST_QUERIER                      = 0x19
	IFLA_BR_MCAST_HASH_ELASTICITY              = 0x1a
	IFLA_BR_MCAST_HASH_MAX                     = 0x1b
	IFLA_BR_MCAST_LAST_MEMBER_CNT              = 0x1c
	IFLA_BR_MCAST_STARTUP_QUERY_CNT            = 0x1d
	IFLA_BR_MCAST_LAST_MEMBER_INTVL            = 0x1e
	IFLA_BR_MCAST_MEMBERSHIP_INTVL             = 0x1f
	IFLA_BR_MCAST_QUERIER_INTVL                = 0x20
	IFLA_BR_MCAST_QUERY_INTVL                  = 0x21
	IFLA_BR_MCAST_QUERY_RESPONSE_INTVL         = 0x22
	IFLA_BR_MCAST_STARTUP_QUERY_INTVL          = 0x23
	IFLA_BR_NF_CALL_IPTABLES                   = 0x24
	IFLA_BR_NF_CALL_IP6TABLES                  = 0x25
	IFLA_BR_NF_CALL_ARPTABLES                  = 0x26
	IFLA_BR_VLAN_DEFAULT_PVID                  = 0x27
	IFLA_BR_PAD                                = 0x28
	IFLA_BR_VLAN_STATS_ENABLED                 = 0x29
	IFLA_BR_MCAST_STATS_ENABLED                = 0x2a
	IFLA_BR_MCAST_IGMP_VERSION                 = 0x2b
	IFLA_BR_MCAST_MLD_VERSION                  = 0x2c
	IFLA_BR_VLAN_STATS_PER_PORT                = 0x2d
	IFLA_BR_MULTI_BOOLOPT                      = 0x2e
	IFLA_BRPORT_UNSPEC                         = 0x0
	IFLA_BRPORT_STATE                          = 0x1
	IFLA_BRPORT_PRIORITY                       = 0x2
	IFLA_BRPORT_COST                           = 0x3
	IFLA_BRPORT_MODE                           = 0x4
	IFLA_BRPORT_GUARD                          = 0x5
	IFLA_BRPORT_PROTECT                        = 0x6
	IFLA_BRPORT_FAST_LEAVE                     = 0x7
	IFLA_BRPORT_LEARNING                       = 0x8
	IFLA_BRPORT_UNICAST_FLOOD                  = 0x9
	IFLA_BRPORT_PROXYARP                       = 0xa
	IFLA_BRPORT_LEARNING_SYNC                  = 0xb
	IFLA_BRPORT_PROXYARP_WIFI                  = 0xc
	IFLA_BRPORT_ROOT_ID                        = 0xd
	IFLA_BRPORT_BRIDGE_ID                      = 0xe
	IFLA_BRPORT_DESIGNATED_PORT                = 0xf
	IFLA_BRPORT_DESIGNATED_COST                = 0x10
	IFLA_BRPORT_ID                             = 0x11
	IFLA_BRPORT_NO                             = 0x12
	IFLA_BRPORT_TOPOLOGY_CHANGE_ACK            = 0x13
	IFLA_BRPORT_CONFIG_PENDING                 = 0x14
	IFLA_BRPORT_MESSAGE_AGE_TIMER              = 0x15
	IFLA_BRPORT_FORWARD_DELAY_TIMER            = 0x16
	IFLA_BRPORT_HOLD_TIMER                     = 0x17
	IFLA_BRPORT_FLUSH                          = 0x18
	IFLA_BRPORT_MULTICAST_ROUTER               = 0x19
	IFLA_BRPORT_PAD                            = 0x1a
	IFLA_BRPORT_MCAST_FLOOD                    = 0x1b
	IFLA_BRPORT_MCAST_TO_UCAST                 = 0x1c
	IFLA_BRPORT_VLAN_TUNNEL                    = 0x1d
	IFLA_BRPORT_BCAST_FLOOD                    = 0x1e
	IFLA_BRPORT_GROUP_FWD_MASK                 = 0x1f
	IFLA_BRPORT_NEIGH_SUPPRESS                 = 0x20
	IFLA_BRPORT_ISOLATED                       = 0x21
	IFLA_BRPORT_BACKUP_PORT                    = 0x22
	IFLA_BRPORT_MRP_RING_OPEN                  = 0x23
	IFLA_BRPORT_MRP_IN_OPEN                    = 0x24
	IFLA_INFO_UNSPEC                           = 0x0
	IFLA_INFO_KIND                             = 0x1
	IFLA_INFO_DATA                             = 0x2
	IFLA_INFO_XSTATS                           = 0x3
	IFLA_INFO_SLAVE_KIND                       = 0x4
	IFLA_INFO_SLAVE_DATA                       = 0x5
	IFLA_VLAN_UNSPEC                           = 0x0
	IFLA_VLAN_ID                               = 0x1
	IFLA_VLAN_FLAGS                            = 0x2
	IFLA_VLAN_EGRESS_QOS                       = 0x3
	IFLA_VLAN_INGRESS_QOS                      = 0x4
	IFLA_VLAN_PROTOCOL                         = 0x5
	IFLA_VLAN_QOS_UNSPEC                       = 0x0
	IFLA_VLAN_QOS_MAPPING                      = 0x1
	IFLA_MACVLAN_UNSPEC                        = 0x0
	IFLA_MACVLAN_MODE                          = 0x1
	IFLA_MACVLAN_FLAGS                         = 0x2
	IFLA_MACVLAN_MACADDR_MODE                  = 0x3
	IFLA_MACVLAN_MACADDR                       = 0x4
	IFLA_MACVLAN_MACADDR_DATA                  = 0x5
	IFLA_MACVLAN_MACADDR_COUNT                 = 0x6
	IFLA_VRF_UNSPEC                            = 0x0
	IFLA_VRF_TABLE                             = 0x1
	IFLA_VRF_PORT_UNSPEC                       = 0x0
	IFLA_VRF_PORT_TABLE                        = 0x1
	IFLA_MACSEC_UNSPEC                         = 0x0
	IFLA_MACSEC_SCI                            = 0x1
	IFLA_MACSEC_PORT                           = 0x2
	IFLA_MACSEC_ICV_LEN                        = 0x3
	IFLA_MACSEC_CIPHER_SUITE                   = 0x4
	IFLA_MACSEC_WINDOW                         = 0x5
	IFLA_MACSEC_ENCODING_SA                    = 0x6
	IFLA_MACSEC_ENCRYPT                        = 0x7
	IFLA_MACSEC_PROTECT                        = 0x8
	IFLA_MACSEC_INC_SCI                        = 0x9
	IFLA_MACSEC_ES                             = 0xa
	IFLA_MACSEC_SCB                            = 0xb
	IFLA_MACSEC_REPLAY_PROTECT                 = 0xc
	IFLA_MACSEC_VALIDATION                     = 0xd
	IFLA_MACSEC_PAD                            = 0xe
	IFLA_MACSEC_OFFLOAD                        = 0xf
	IFLA_XFRM_UNSPEC                           = 0x0
	IFLA_XFRM_LINK                             = 0x1
	IFLA_XFRM_IF_ID                            = 0x2
	IFLA_IPVLAN_UNSPEC                         = 0x0
	IFLA_IPVLAN_MODE                           = 0x1
	IFLA_IPVLAN_FLAGS                          = 0x2
	IFLA_VXLAN_UNSPEC                          = 0x0
	IFLA_VXLAN_ID                              = 0x1
	IFLA_VXLAN_GROUP                           = 0x2
	IFLA_VXLAN_LINK                            = 0x3
	IFLA_VXLAN_LOCAL                           = 0x4
	IFLA_VXLAN_TTL                             = 0x5
	IFLA_VXLAN_TOS                             = 0x6
	IFLA_VXLAN_LEARNING                        = 0x7
	IFLA_VXLAN_AGEING                          = 0x8
	IFLA_VXLAN_LIMIT                           = 0x9
	IFLA_VXLAN_PORT_RANGE                      = 0xa
	IFLA_VXLAN_PROXY                           = 0xb
	IFLA_VXLAN_RSC                             = 0xc
	IFLA_VXLAN_L2MISS                          = 0xd
	IFLA_VXLAN_L3MISS                          = 0xe
	IFLA_VXLAN_PORT                            = 0xf
	IFLA_VXLAN_GROUP6                          = 0x10
	IFLA_VXLAN_LOCAL6                          = 0x11
	IFLA_VXLAN_UDP_CSUM                        = 0x12
	IFLA_VXLAN_UDP_ZERO_CSUM6_TX               = 0x13
	IFLA_VXLAN_UDP_ZERO_CSUM6_RX               = 0x14
	IFLA_VXLAN_REMCSUM_TX                      = 0x15
	IFLA_VXLAN_REMCSUM_RX                      = 0x16
	IFLA_VXLAN_GBP                             = 0x17
	IFLA_VXLAN_REMCSUM_NOPARTIAL               = 0x18
	IFLA_VXLAN_COLLECT_METADATA                = 0x19
	IFLA_VXLAN_LABEL                           = 0x1a
	IFLA_VXLAN_GPE                             = 0x1b
	IFLA_VXLAN_TTL_INHERIT                     = 0x1c
	IFLA_VXLAN_DF                              = 0x1d
	IFLA_GENEVE_UNSPEC                         = 0x0
	IFLA_GENEVE_ID                             = 0x1
	IFLA_GENEVE_REMOTE                         = 0x2
	IFLA_GENEVE_TTL                            = 0x3
	IFLA_GENEVE_TOS                            = 0x4
	IFLA_GENEVE_PORT                           = 0x5
	IFLA_GENEVE_COLLECT_METADATA               = 0x6
	IFLA_GENEVE_REMOTE6                        = 0x7
	IFLA_GENEVE_UDP_CSUM                       = 0x8
	IFLA_GENEVE_UDP_ZERO_CSUM6_TX              = 0x9
	IFLA_GENEVE_UDP_ZERO_CSUM6_RX              = 0xa
	IFLA_GENEVE_LABEL                          = 0xb
	IFLA_GENEVE_TTL_INHERIT                    = 0xc
	IFLA_GENEVE_DF                             = 0xd
	IFLA_BAREUDP_UNSPEC                        = 0x0
	IFLA_BAREUDP_PORT                          = 0x1
	IFLA_BAREUDP_ETHERTYPE                     = 0x2
	IFLA_BAREUDP_SRCPORT_MIN                   = 0x3
	IFLA_BAREUDP_MULTIPROTO_MODE               = 0x4
	IFLA_PPP_UNSPEC                            = 0x0
	IFLA_PPP_DEV_FD                            = 0x1
	IFLA_GTP_UNSPEC                            = 0x0
	IFLA_GTP_FD0                               = 0x1
	IFLA_GTP_FD1                               = 0x2
	IFLA_GTP_PDP_HASHSIZE                      = 0x3
	IFLA_GTP_ROLE                              = 0x4
	IFLA_BOND_UNSPEC                           = 0x0
	IFLA_BOND_MODE                             = 0x1
	IFLA_BOND_ACTIVE_SLAVE                     = 0x2
	IFLA_BOND_MIIMON                           = 0x3
	IFLA_BOND_UPDELAY                          = 0x4
	IFLA_BOND_DOWNDELAY                        = 0x5
	IFLA_BOND_USE_CARRIER                      = 0x6
	IFLA_BOND_ARP_INTERVAL                     = 0x7
	IFLA_BOND_ARP_IP_TARGET                    = 0x8
	IFLA_BOND_ARP_VALIDATE                     = 0x9
	IFLA_BOND_ARP_ALL_TARGETS                  = 0xa
	IFLA_BOND_PRIMARY                          = 0xb
	IFLA_BOND_PRIMARY_RESELECT                 = 0xc
	IFLA_BOND_FAIL_OVER_MAC                    = 0xd
	IFLA_BOND_XMIT_HASH_POLICY                 = 0xe
	IFLA_BOND_RESEND_IGMP                      = 0xf
	IFLA_BOND_NUM_PEER_NOTIF                   = 0x10
	IFLA_BOND_ALL_SLAVES_ACTIVE                = 0x11
	IFLA_BOND_MIN_LINKS                        = 0x12
	IFLA_BOND_LP_INTERVAL                      = 0x13
	IFLA_BOND_PACKETS_PER_SLAVE                = 0x14
	IFLA_BOND_AD_LACP_RATE                     = 0x15
	IFLA_BOND_AD_SELECT                        = 0x16
	IFLA_BOND_AD_INFO                          = 0x17
	IFLA_BOND_AD_ACTOR_SYS_PRIO                = 0x18
	IFLA_BOND_AD_USER_PORT_KEY                 = 0x19
	IFLA_BOND_AD_ACTOR_SYSTEM                  = 0x1a
	IFLA_BOND_TLB_DYNAMIC_LB                   = 0x1b
	IFLA_BOND_PEER_NOTIF_DELAY                 = 0x1c
	IFLA_BOND_AD_INFO_UNSPEC                   = 0x0
	IFLA_BOND_AD_INFO_AGGREGATOR               = 0x1
	IFLA_BOND_AD_INFO_NUM_PORTS                = 0x2
	IFLA_BOND_AD_INFO_ACTOR_KEY                = 0x3
	IFLA_BOND_AD_INFO_PARTNER_KEY              = 0x4
	IFLA_BOND_AD_INFO_PARTNER_MAC              = 0x5
	IFLA_BOND_SLAVE_UNSPEC                     = 0x0
	IFLA_BOND_SLAVE_STATE                      = 0x1
	IFLA_BOND_SLAVE_MII_STATUS                 = 0x2
	IFLA_BOND_SLAVE_LINK_FAILURE_COUNT         = 0x3
	IFLA_BOND_SLAVE_PERM_HWADDR                = 0x4
	IFLA_BOND_SLAVE_QUEUE_ID                   = 0x5
	IFLA_BOND_SLAVE_AD_AGGREGATOR_ID           = 0x6
	IFLA_BOND_SLAVE_AD_ACTOR_OPER_PORT_STATE   = 0x7
	IFLA_BOND_SLAVE_AD_PARTNER_OPER_PORT_STATE = 0x8
	IFLA_VF_INFO_UNSPEC                        = 0x0
	IFLA_VF_INFO                               = 0x1
	IFLA_VF_UNSPEC                             = 0x0
	IFLA_VF_MAC                                = 0x1
	IFLA_VF_VLAN                               = 0x2
	IFLA_VF_TX_RATE                            = 0x3
	IFLA_VF_SPOOFCHK                           = 0x4
	IFLA_VF_LINK_STATE                         = 0x5
	IFLA_VF_RATE                               = 0x6
	IFLA_VF_RSS_QUERY_EN                       = 0x7
	IFLA_VF_STATS                              = 0x8
	IFLA_VF_TRUST                              = 0x9
	IFLA_VF_IB_NODE_GUID                       = 0xa
	IFLA_VF_IB_PORT_GUID                       = 0xb
	IFLA_VF_VLAN_LIST                          = 0xc
	IFLA_VF_BROADCAST                          = 0xd
	IFLA_VF_VLAN_INFO_UNSPEC                   = 0x0
	IFLA_VF_VLAN_INFO                          = 0x1
	IFLA_VF_LINK_STATE_AUTO                    = 0x0
	IFLA_VF_LINK_STATE_ENABLE                  = 0x1
	IFLA_VF_LINK_STATE_DISABLE                 = 0x2
	IFLA_VF_STATS_RX_PACKETS                   = 0x0
	IFLA_VF_STATS_TX_PACKETS                   = 0x1
	IFLA_VF_STATS_RX_BYTES                     = 0x2
	IFLA_VF_STATS_TX_BYTES                     = 0x3
	IFLA_VF_STATS_BROADCAST                    = 0x4
	IFLA_VF_STATS_MULTICAST                    = 0x5
	IFLA_VF_STATS_PAD                          = 0x6
	IFLA_VF_STATS_RX_DROPPED                   = 0x7
	IFLA_VF_STATS_TX_DROPPED                   = 0x8
	IFLA_VF_PORT_UNSPEC                        = 0x0
	IFLA_VF_PORT                               = 0x1
	IFLA_PORT_UNSPEC                           = 0x0
	IFLA_PORT_VF                               = 0x1
	IFLA_PORT_PROFILE                          = 0x2
	IFLA_PORT_VSI_TYPE                         = 0x3
	IFLA_PORT_INSTANCE_UUID                    = 0x4
	IFLA_PORT_HOST_UUID                        = 0x5
	IFLA_PORT_REQUEST                          = 0x6
	IFLA_PORT_RESPONSE                         = 0x7
	IFLA_IPOIB_UNSPEC                          = 0x0
	IFLA_IPOIB_PKEY                            = 0x1
	IFLA_IPOIB_MODE                            = 0x2
	IFLA_IPOIB_UMCAST                          = 0x3
	IFLA_HSR_UNSPEC                            = 0x0
	IFLA_HSR_SLAVE1                            = 0x1
	IFLA_HSR_SLAVE2                            = 0x2
	IFLA_HSR_MULTICAST_SPEC                    = 0x3
	IFLA_HSR_SUPERVISION_ADDR                  = 0x4
	IFLA_HSR_SEQ_NR                            = 0x5
	IFLA_HSR_VERSION                           = 0x6
	IFLA_HSR_PROTOCOL                          = 0x7
	IFLA_STATS_UNSPEC                          = 0x0
	IFLA_STATS_LINK_64                         = 0x1
	IFLA_STATS_LINK_XSTATS                     = 0x2
	IFLA_STATS_LINK_XSTATS_SLAVE               = 0x3
	IFLA_STATS_LINK_OFFLOAD_XSTATS             = 0x4
	IFLA_STATS_AF_SPEC                         = 0x5
	IFLA_OFFLOAD_XSTATS_UNSPEC                 = 0x0
	IFLA_OFFLOAD_XSTATS_CPU_HIT                = 0x1
	IFLA_XDP_UNSPEC                            = 0x0
	IFLA_XDP_FD                                = 0x1
	IFLA_XDP_ATTACHED                          = 0x2
	IFLA_XDP_FLAGS                             = 0x3
	IFLA_XDP_PROG_ID                           = 0x4
	IFLA_XDP_DRV_PROG_ID                       = 0x5
	IFLA_XDP_SKB_PROG_ID                       = 0x6
	IFLA_XDP_HW_PROG_ID                        = 0x7
	IFLA_XDP_EXPECTED_FD                       = 0x8
	IFLA_EVENT_NONE                            = 0x0
	IFLA_EVENT_REBOOT                          = 0x1
	IFLA_EVENT_FEATURES                        = 0x2
	IFLA_EVENT_BONDING_FAILOVER                = 0x3
	IFLA_EVENT_NOTIFY_PEERS                    = 0x4
	IFLA_EVENT_IGMP_RESEND                     = 0x5
	IFLA_EVENT_BONDING_OPTIONS                 = 0x6
	IFLA_TUN_UNSPEC                            = 0x0
	IFLA_TUN_OWNER                             = 0x1
	IFLA_TUN_GROUP                             = 0x2
	IFLA_TUN_TYPE                              = 0x3
	IFLA_TUN_PI                                = 0x4
	IFLA_TUN_VNET_HDR                          = 0x5
	IFLA_TUN_PERSIST                           = 0x6
	IFLA_TUN_MULTI_QUEUE                       = 0x7
	IFLA_TUN_NUM_QUEUES                        = 0x8
	IFLA_TUN_NUM_DISABLED_QUEUES               = 0x9
	IFLA_RMNET_UNSPEC                          = 0x0
	IFLA_RMNET_MUX_ID                          = 0x1
	IFLA_RMNET_FLAGS                           = 0x2
)

const (
	NF_INET_PRE_ROUTING  = 0x0
	NF_INET_LOCAL_IN     = 0x1
	NF_INET_FORWARD      = 0x2
	NF_INET_LOCAL_OUT    = 0x3
	NF_INET_POST_ROUTING = 0x4
	NF_INET_NUMHOOKS     = 0x5
)

const (
	NF_NETDEV_INGRESS  = 0x0
	NF_NETDEV_EGRESS   = 0x1
	NF_NETDEV_NUMHOOKS = 0x2
)

const (
	NFPROTO_UNSPEC   = 0x0
	NFPROTO_INET     = 0x1
	NFPROTO_IPV4     = 0x2
	NFPROTO_ARP      = 0x3
	NFPROTO_NETDEV   = 0x5
	NFPROTO_BRIDGE   = 0x7
	NFPROTO_IPV6     = 0xa
	NFPROTO_DECNET   = 0xc
	NFPROTO_NUMPROTO = 0xd
)

const SO_ORIGINAL_DST = 0x50

type Nfgenmsg struct {
	Nfgen_family uint8
	Version      uint8
	Res_id       uint16
}

const (
	NFNL_BATCH_UNSPEC = 0x0
	NFNL_BATCH_GENID  = 0x1
)

const (
	NFT_REG_VERDICT                   = 0x0
	NFT_REG_1                         = 0x1
	NFT_REG_2                         = 0x2
	NFT_REG_3                         = 0x3
	NFT_REG_4                         = 0x4
	NFT_REG32_00                      = 0x8
	NFT_REG32_01                      = 0x9
	NFT_REG32_02                      = 0xa
	NFT_REG32_03                      = 0xb
	NFT_REG32_04                      = 0xc
	NFT_REG32_05                      = 0xd
	NFT_REG32_06                      = 0xe
	NFT_REG32_07                      = 0xf
	NFT_REG32_08                      = 0x10
	NFT_REG32_09                      = 0x11
	NFT_REG32_10                      = 0x12
	NFT_REG32_11                      = 0x13
	NFT_REG32_12                      = 0x14
	NFT_REG32_13                      = 0x15
	NFT_REG32_14                      = 0x16
	NFT_REG32_15                      = 0x17
	NFT_CONTINUE                      = -0x1
	NFT_BREAK                         = -0x2
	NFT_JUMP                          = -0x3
	NFT_GOTO                          = -0x4
	NFT_RETURN                        = -0x5
	NFT_MSG_NEWTABLE                  = 0x0
	NFT_MSG_GETTABLE                  = 0x1
	NFT_MSG_DELTABLE                  = 0x2
	NFT_MSG_NEWCHAIN                  = 0x3
	NFT_MSG_GETCHAIN                  = 0x4
	NFT_MSG_DELCHAIN                  = 0x5
	NFT_MSG_NEWRULE                   = 0x6
	NFT_MSG_GETRULE                   = 0x7
	NFT_MSG_DELRULE                   = 0x8
	NFT_MSG_NEWSET                    = 0x9
	NFT_MSG_GETSET                    = 0xa
	NFT_MSG_DELSET                    = 0xb
	NFT_MSG_NEWSETELEM                = 0xc
	NFT_MSG_GETSETELEM                = 0xd
	NFT_MSG_DELSETELEM                = 0xe
	NFT_MSG_NEWGEN                    = 0xf
	NFT_MSG_GETGEN                    = 0x10
	NFT_MSG_TRACE                     = 0x11
	NFT_MSG_NEWOBJ                    = 0x12
	NFT_MSG_GETOBJ                    = 0x13
	NFT_MSG_DELOBJ                    = 0x14
	NFT_MSG_GETOBJ_RESET              = 0x15
	NFT_MSG_NEWFLOWTABLE              = 0x16
	NFT_MSG_GETFLOWTABLE              = 0x17
	NFT_MSG_DELFLOWTABLE              = 0x18
	NFT_MSG_GETRULE_RESET             = 0x19
	NFT_MSG_MAX                       = 0x1a
	NFTA_LIST_UNSPEC                  = 0x0
	NFTA_LIST_ELEM                    = 0x1
	NFTA_HOOK_UNSPEC                  = 0x0
	NFTA_HOOK_HOOKNUM                 = 0x1
	NFTA_HOOK_PRIORITY                = 0x2
	NFTA_HOOK_DEV                     = 0x3
	NFT_TABLE_F_DORMANT               = 0x1
	NFTA_TABLE_UNSPEC                 = 0x0
	NFTA_TABLE_NAME                   = 0x1
	NFTA_TABLE_FLAGS                  = 0x2
	NFTA_TABLE_USE                    = 0x3
	NFTA_CHAIN_UNSPEC                 = 0x0
	NFTA_CHAIN_TABLE                  = 0x1
	NFTA_CHAIN_HANDLE                 = 0x2
	NFTA_CHAIN_NAME                   = 0x3
	NFTA_CHAIN_HOOK                   = 0x4
	NFTA_CHAIN_POLICY                 = 0x5
	NFTA_CHAIN_USE                    = 0x6
	NFTA_CHAIN_TYPE                   = 0x7
	NFTA_CHAIN_COUNTERS               = 0x8
	NFTA_CHAIN_PAD                    = 0x9
	NFTA_RULE_UNSPEC                  = 0x0
	NFTA_RULE_TABLE                   = 0x1
	NFTA_RULE_CHAIN                   = 0x2
	NFTA_RULE_HANDLE                  = 0x3
	NFTA_RULE_EXPRESSIONS             = 0x4
	NFTA_RULE_COMPAT                  = 0x5
	NFTA_RULE_POSITION                = 0x6
	NFTA_RULE_USERDATA                = 0x7
	NFTA_RULE_PAD                     = 0x8
	NFTA_RULE_ID                      = 0x9
	NFT_RULE_COMPAT_F_INV             = 0x2
	NFT_RULE_COMPAT_F_MASK            = 0x2
	NFTA_RULE_COMPAT_UNSPEC           = 0x0
	NFTA_RULE_COMPAT_PROTO            = 0x1
	NFTA_RULE_COMPAT_FLAGS            = 0x2
	NFT_SET_ANONYMOUS                 = 0x1
	NFT_SET_CONSTANT                  = 0x2
	NFT_SET_INTERVAL                  = 0x4
	NFT_SET_MAP                       = 0x8
	NFT_SET_TIMEOUT                   = 0x10
	NFT_SET_EVAL                      = 0x20
	NFT_SET_OBJECT                    = 0x40
	NFT_SET_POL_PERFORMANCE           = 0x0
	NFT_SET_POL_MEMORY                = 0x1
	NFTA_SET_DESC_UNSPEC              = 0x0
	NFTA_SET_DESC_SIZE                = 0x1
	NFTA_SET_UNSPEC                   = 0x0
	NFTA_SET_TABLE                    = 0x1
	NFTA_SET_NAME                     = 0x2
	NFTA_SET_FLAGS                    = 0x3
	NFTA_SET_KEY_TYPE                 = 0x4
	NFTA_SET_KEY_LEN                  = 0x5
	NFTA_SET_DATA_TYPE                = 0x6
	NFTA_SET_DATA_LEN                 = 0x7
	NFTA_SET_POLICY                   = 0x8
	NFTA_SET_DESC                     = 0x9
	NFTA_SET_ID                       = 0xa
	NFTA_SET_TIMEOUT                  = 0xb
	NFTA_SET_GC_INTERVAL              = 0xc
	NFTA_SET_USERDATA                 = 0xd
	NFTA_SET_PAD                      = 0xe
	NFTA_SET_OBJ_TYPE                 = 0xf
	NFT_SET_ELEM_INTERVAL_END         = 0x1
	NFTA_SET_ELEM_UNSPEC              = 0x0
	NFTA_SET_ELEM_KEY                 = 0x1
	NFTA_SET_ELEM_DATA                = 0x2
	NFTA_SET_ELEM_FLAGS               = 0x3
	NFTA_SET_ELEM_TIMEOUT             = 0x4
	NFTA_SET_ELEM_EXPIRATION          = 0x5
	NFTA_SET_ELEM_USERDATA            = 0x6
	NFTA_SET_ELEM_EXPR                = 0x7
	NFTA_SET_ELEM_PAD                 = 0x8
	NFTA_SET_ELEM_OBJREF              = 0x9
	NFTA_SET_ELEM_LIST_UNSPEC         = 0x0
	NFTA_SET_ELEM_LIST_TABLE          = 0x1
	NFTA_SET_ELEM_LIST_SET            = 0x2
	NFTA_SET_ELEM_LIST_ELEMENTS       = 0x3
	NFTA_SET_ELEM_LIST_SET_ID         = 0x4
	NFT_DATA_VALUE                    = 0x0
	NFT_DATA_VERDICT                  = 0xffffff00
	NFTA_DATA_UNSPEC                  = 0x0
	NFTA_DATA_VALUE                   = 0x1
	NFTA_DATA_VERDICT                 = 0x2
	NFTA_VERDICT_UNSPEC               = 0x0
	NFTA_VERDICT_CODE                 = 0x1
	NFTA_VERDICT_CHAIN                = 0x2
	NFTA_EXPR_UNSPEC                  = 0x0
	NFTA_EXPR_NAME                    = 0x1
	NFTA_EXPR_DATA                    = 0x2
	NFTA_IMMEDIATE_UNSPEC             = 0x0
	NFTA_IMMEDIATE_DREG               = 0x1
	NFTA_IMMEDIATE_DATA               = 0x2
	NFTA_BITWISE_UNSPEC               = 0x0
	NFTA_BITWISE_SREG                 = 0x1
	NFTA_BITWISE_DREG                 = 0x2
	NFTA_BITWISE_LEN                  = 0x3
	NFTA_BITWISE_MASK                 = 0x4
	NFTA_BITWISE_XOR                  = 0x5
	NFT_BYTEORDER_NTOH                = 0x0
	NFT_BYTEORDER_HTON                = 0x1
	NFTA_BYTEORDER_UNSPEC             = 0x0
	NFTA_BYTEORDER_SREG               = 0x1
	NFTA_BYTEORDER_DREG               = 0x2
	NFTA_BYTEORDER_OP                 = 0x3
	NFTA_BYTEORDER_LEN                = 0x4
	NFTA_BYTEORDER_SIZE               = 0x5
	NFT_CMP_EQ                        = 0x0
	NFT_CMP_NEQ                       = 0x1
	NFT_CMP_LT                        = 0x2
	NFT_CMP_LTE                       = 0x3
	NFT_CMP_GT                        = 0x4
	NFT_CMP_GTE                       = 0x5
	NFTA_CMP_UNSPEC                   = 0x0
	NFTA_CMP_SREG                     = 0x1
	NFTA_CMP_OP                       = 0x2
	NFTA_CMP_DATA                     = 0x3
	NFT_RANGE_EQ                      = 0x0
	NFT_RANGE_NEQ                     = 0x1
	NFTA_RANGE_UNSPEC                 = 0x0
	NFTA_RANGE_SREG                   = 0x1
	NFTA_RANGE_OP                     = 0x2
	NFTA_RANGE_FROM_DATA              = 0x3
	NFTA_RANGE_TO_DATA                = 0x4
	NFT_LOOKUP_F_INV                  = 0x1
	NFTA_LOOKUP_UNSPEC                = 0x0
	NFTA_LOOKUP_SET                   = 0x1
	NFTA_LOOKUP_SREG                  = 0x2
	NFTA_LOOKUP_DREG                  = 0x3
	NFTA_LOOKUP_SET_ID                = 0x4
	NFTA_LOOKUP_FLAGS                 = 0x5
	NFT_DYNSET_OP_ADD                 = 0x0
	NFT_DYNSET_OP_UPDATE              = 0x1
	NFT_DYNSET_F_INV                  = 0x1
	NFTA_DYNSET_UNSPEC                = 0x0
	NFTA_DYNSET_SET_NAME              = 0x1
	NFTA_DYNSET_SET_ID                = 0x2
	NFTA_DYNSET_OP                    = 0x3
	NFTA_DYNSET_SREG_KEY              = 0x4
	NFTA_DYNSET_SREG_DATA             = 0x5
	NFTA_DYNSET_TIMEOUT               = 0x6
	NFTA_DYNSET_EXPR                  = 0x7
	NFTA_DYNSET_PAD                   = 0x8
	NFTA_DYNSET_FLAGS                 = 0x9
	NFT_PAYLOAD_LL_HEADER             = 0x0
	NFT_PAYLOAD_NETWORK_HEADER        = 0x1
	NFT_PAYLOAD_TRANSPORT_HEADER      = 0x2
	NFT_PAYLOAD_CSUM_NONE             = 0x0
	NFT_PAYLOAD_CSUM_INET             = 0x1
	NFT_PAYLOAD_L4CSUM_PSEUDOHDR      = 0x1
	NFTA_PAYLOAD_UNSPEC               = 0x0
	NFTA_PAYLOAD_DREG                 = 0x1
	NFTA_PAYLOAD_BASE                 = 0x2
	NFTA_PAYLOAD_OFFSET               = 0x3
	NFTA_PAYLOAD_LEN                  = 0x4
	NFTA_PAYLOAD_SREG                 = 0x5
	NFTA_PAYLOAD_CSUM_TYPE            = 0x6
	NFTA_PAYLOAD_CSUM_OFFSET          = 0x7
	NFTA_PAYLOAD_CSUM_FLAGS           = 0x8
	NFT_EXTHDR_F_PRESENT              = 0x1
	NFT_EXTHDR_OP_IPV6                = 0x0
	NFT_EXTHDR_OP_TCPOPT              = 0x1
	NFTA_EXTHDR_UNSPEC                = 0x0
	NFTA_EXTHDR_DREG                  = 0x1
	NFTA_EXTHDR_TYPE                  = 0x2
	NFTA_EXTHDR_OFFSET                = 0x3
	NFTA_EXTHDR_LEN                   = 0x4
	NFTA_EXTHDR_FLAGS                 = 0x5
	NFTA_EXTHDR_OP                    = 0x6
	NFTA_EXTHDR_SREG                  = 0x7
	NFT_META_LEN                      = 0x0
	NFT_META_PROTOCOL                 = 0x1
	NFT_META_PRIORITY                 = 0x2
	NFT_META_MARK                     = 0x3
	NFT_META_IIF                      = 0x4
	NFT_META_OIF                      = 0x5
	NFT_META_IIFNAME                  = 0x6
	NFT_META_OIFNAME                  = 0x7
	NFT_META_IIFTYPE                  = 0x8
	NFT_META_OIFTYPE                  = 0x9
	NFT_META_SKUID                    = 0xa
	NFT_META_SKGID                    = 0xb
	NFT_META_NFTRACE                  = 0xc
	NFT_META_RTCLASSID                = 0xd
	NFT_META_SECMARK                  = 0xe
	NFT_META_NFPROTO                  = 0xf
	NFT_META_L4PROTO                  = 0x10
	NFT_META_BRI_IIFNAME              = 0x11
	NFT_META_BRI_OIFNAME              = 0x12
	NFT_META_PKTTYPE                  = 0x13
	NFT_META_CPU                      = 0x14
	NFT_META_IIFGROUP                 = 0x15
	NFT_META_OIFGROUP                 = 0x16
	NFT_META_CGROUP                   = 0x17
	NFT_META_PRANDOM                  = 0x18
	NFT_RT_CLASSID                    = 0x0
	NFT_RT_NEXTHOP4                   = 0x1
	NFT_RT_NEXTHOP6                   = 0x2
	NFT_RT_TCPMSS                     = 0x3
	NFT_HASH_JENKINS                  = 0x0
	NFT_HASH_SYM                      = 0x1
	NFTA_HASH_UNSPEC                  = 0x0
	NFTA_HASH_SREG                    = 0x1
	NFTA_HASH_DREG                    = 0x2
	NFTA_HASH_LEN                     = 0x3
	NFTA_HASH_MODULUS                 = 0x4
	NFTA_HASH_SEED                    = 0x5
	NFTA_HASH_OFFSET                  = 0x6
	NFTA_HASH_TYPE                    = 0x7
	NFTA_META_UNSPEC                  = 0x0
	NFTA_META_DREG                    = 0x1
	NFTA_META_KEY                     = 0x2
	NFTA_META_SREG                    = 0x3
	NFTA_RT_UNSPEC                    = 0x0
	NFTA_RT_DREG                      = 0x1
	NFTA_RT_KEY                       = 0x2
	NFT_CT_STATE                      = 0x0
	NFT_CT_DIRECTION                  = 0x1
	NFT_CT_STATUS                     = 0x2
	NFT_CT_MARK                       = 0x3
	NFT_CT_SECMARK                    = 0x4
	NFT_CT_EXPIRATION                 = 0x5
	NFT_CT_HELPER                     = 0x6
	NFT_CT_L3PROTOCOL                 = 0x7
	NFT_CT_SRC                        = 0x8
	NFT_CT_DST                        = 0x9
	NFT_CT_PROTOCOL                   = 0xa
	NFT_CT_PROTO_SRC                  = 0xb
	NFT_CT_PROTO_DST                  = 0xc
	NFT_CT_LABELS                     = 0xd
	NFT_CT_PKTS                       = 0xe
	NFT_CT_BYTES                      = 0xf
	NFT_CT_AVGPKT                     = 0x10
	NFT_CT_ZONE                       = 0x11
	NFT_CT_EVENTMASK                  = 0x12
	NFTA_CT_UNSPEC                    = 0x0
	NFTA_CT_DREG                      = 0x1
	NFTA_CT_KEY                       = 0x2
	NFTA_CT_DIRECTION                 = 0x3
	NFTA_CT_SREG                      = 0x4
	NFT_LIMIT_PKTS                    = 0x0
	NFT_LIMIT_PKT_BYTES               = 0x1
	NFT_LIMIT_F_INV                   = 0x1
	NFTA_LIMIT_UNSPEC                 = 0x0
	NFTA_LIMIT_RATE                   = 0x1
	NFTA_LIMIT_UNIT                   = 0x2
	NFTA_LIMIT_BURST                  = 0x3
	NFTA_LIMIT_TYPE                   = 0x4
	NFTA_LIMIT_FLAGS                  = 0x5
	NFTA_LIMIT_PAD                    = 0x6
	NFTA_COUNTER_UNSPEC               = 0x0
	NFTA_COUNTER_BYTES                = 0x1
	NFTA_COUNTER_PACKETS              = 0x2
	NFTA_COUNTER_PAD                  = 0x3
	NFTA_LOG_UNSPEC                   = 0x0
	NFTA_LOG_GROUP                    = 0x1
	NFTA_LOG_PREFIX                   = 0x2
	NFTA_LOG_SNAPLEN                  = 0x3
	NFTA_LOG_QTHRESHOLD               = 0x4
	NFTA_LOG_LEVEL                    = 0x5
	NFTA_LOG_FLAGS                    = 0x6
	NFTA_QUEUE_UNSPEC                 = 0x0
	NFTA_QUEUE_NUM                    = 0x1
	NFTA_QUEUE_TOTAL                  = 0x2
	NFTA_QUEUE_FLAGS                  = 0x3
	NFTA_QUEUE_SREG_QNUM              = 0x4
	NFT_QUOTA_F_INV                   = 0x1
	NFT_QUOTA_F_DEPLETED              = 0x2
	NFTA_QUOTA_UNSPEC                 = 0x0
	NFTA_QUOTA_BYTES                  = 0x1
	NFTA_QUOTA_FLAGS                  = 0x2
	NFTA_QUOTA_PAD                    = 0x3
	NFTA_QUOTA_CONSUMED               = 0x4
	NFT_REJECT_ICMP_UNREACH           = 0x0
	NFT_REJECT_TCP_RST                = 0x1
	NFT_REJECT_ICMPX_UNREACH          = 0x2
	NFT_REJECT_ICMPX_NO_ROUTE         = 0x0
	NFT_REJECT_ICMPX_PORT_UNREACH     = 0x1
	NFT_REJECT_ICMPX_HOST_UNREACH     = 0x2
	NFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3
	NFTA_REJECT_UNSPEC                = 0x0
	NFTA_REJECT_TYPE                  = 0x1
	NFTA_REJECT_ICMP_CODE             = 0x2
	NFT_NAT_SNAT                      = 0x0
	NFT_NAT_DNAT                      = 0x1
	NFTA_NAT_UNSPEC                   = 0x0
	NFTA_NAT_TYPE                     = 0x1
	NFTA_NAT_FAMILY                   = 0x2
	NFTA_NAT_REG_ADDR_MIN             = 0x3
	NFTA_NAT_REG_ADDR_MAX             = 0x4
	NFTA_NAT_REG_PROTO_MIN            = 0x5
	NFTA_NAT_REG_PROTO_MAX            = 0x6
	NFTA_NAT_FLAGS                    = 0x7
	NFTA_MASQ_UNSPEC                  = 0x0
	NFTA_MASQ_FLAGS                   = 0x1
	NFTA_MASQ_REG_PROTO_MIN           = 0x2
	NFTA_MASQ_REG_PROTO_MAX           = 0x3
	NFTA_REDIR_UNSPEC                 = 0x0
	NFTA_REDIR_REG_PROTO_MIN          = 0x1
	NFTA_REDIR_REG_PROTO_MAX          = 0x2
	NFTA_REDIR_FLAGS                  = 0x3
	NFTA_DUP_UNSPEC                   = 0x0
	NFTA_DUP_SREG_ADDR                = 0x1
	NFTA_DUP_SREG_DEV                 = 0x2
	NFTA_FWD_UNSPEC                   = 0x0
	NFTA_FWD_SREG_DEV                 = 0x1
	NFTA_OBJREF_UNSPEC                = 0x0
	NFTA_OBJREF_IMM_TYPE              = 0x1
	NFTA_OBJREF_IMM_NAME              = 0x2
	NFTA_OBJREF_SET_SREG              = 0x3
	NFTA_OBJREF_SET_NAME              = 0x4
	NFTA_OBJREF_SET_ID                = 0x5
	NFTA_GEN_UNSPEC                   = 0x0
	NFTA_GEN_ID                       = 0x1
	NFTA_GEN_PROC_PID                 = 0x2
	NFTA_GEN_PROC_NAME                = 0x3
	NFTA_FIB_UNSPEC                   = 0x0
	NFTA_FIB_DREG                     = 0x1
	NFTA_FIB_RESULT                   = 0x2
	NFTA_FIB_FLAGS                    = 0x3
	NFT_FIB_RESULT_UNSPEC             = 0x0
	NFT_FIB_RESULT_OIF                = 0x1
	NFT_FIB_RESULT_OIFNAME            = 0x2
	NFT_FIB_RESULT_ADDRTYPE           = 0x3
	NFTA_FIB_F_SADDR                  = 0x1
	NFTA_FIB_F_DADDR                  = 0x2
	NFTA_FIB_F_MARK                   = 0x4
	NFTA_FIB_F_IIF                    = 0x8
	NFTA_FIB_F_OIF                    = 0x10
	NFTA_FIB_F_PRESENT                = 0x20
	NFTA_CT_HELPER_UNSPEC             = 0x0
	NFTA_CT_HELPER_NAME               = 0x1
	NFTA_CT_HELPER_L3PROTO            = 0x2
	NFTA_CT_HELPER_L4PROTO            = 0x3
	NFTA_OBJ_UNSPEC                   = 0x0
	NFTA_OBJ_TABLE                    = 0x1
	NFTA_OBJ_NAME                     = 0x2
	NFTA_OBJ_TYPE                     = 0x3
	NFTA_OBJ_DATA                     = 0x4
	NFTA_OBJ_USE                      = 0x5
	NFTA_TRACE_UNSPEC                 = 0x0
	NFTA_TRACE_TABLE                  = 0x1
	NFTA_TRACE_CHAIN                  = 0x2
	NFTA_TRACE_RULE_HANDLE            = 0x3
	NFTA_TRACE_TYPE                   = 0x4
	NFTA_TRACE_VERDICT                = 0x5
	NFTA_TRACE_ID                     = 0x6
	NFTA_TRACE_LL_HEADER              = 0x7
	NFTA_TRACE_NETWORK_HEADER         = 0x8
	NFTA_TRACE_TRANSPORT_HEADER       = 0x9
	NFTA_TRACE_IIF                    = 0xa
	NFTA_TRACE_IIFTYPE                = 0xb
	NFTA_TRACE_OIF                    = 0xc
	NFTA_TRACE_OIFTYPE                = 0xd
	NFTA_TRACE_MARK                   = 0xe
	NFTA_TRACE_NFPROTO                = 0xf
	NFTA_TRACE_POLICY                 = 0x10
	NFTA_TRACE_PAD                    = 0x11
	NFT_TRACETYPE_UNSPEC              = 0x0
	NFT_TRACETYPE_POLICY              = 0x1
	NFT_TRACETYPE_RETURN              = 0x2
	NFT_TRACETYPE_RULE                = 0x3
	NFTA_NG_UNSPEC                    = 0x0
	NFTA_NG_DREG                      = 0x1
	NFTA_NG_MODULUS                   = 0x2
	NFTA_NG_TYPE                      = 0x3
	NFTA_NG_OFFSET                    = 0x4
	NFT_NG_INCREMENTAL                = 0x0
	NFT_NG_RANDOM                     = 0x1
)

const (
	NFTA_TARGET_UNSPEC = 0x0
	NFTA_TARGET_NAME   = 0x1
	NFTA_TARGET_REV    = 0x2
	NFTA_TARGET_INFO   = 0x3
	NFTA_MATCH_UNSPEC  = 0x0
	NFTA_MATCH_NAME    = 0x1
	NFTA_MATCH_REV     = 0x2
	NFTA_MATCH_INFO    = 0x3
	NFTA_COMPAT_UNSPEC = 0x0
	NFTA_COMPAT_NAME   = 0x1
	NFTA_COMPAT_REV    = 0x2
	NFTA_COMPAT_TYPE   = 0x3
)

type RTCTime struct {
	Sec   int32
	Min   int32
	Hour  int32
	Mday  int32
	Mon   int32
	Year  int32
	Wday  int32
	Yday  int32
	Isdst int32
}

type RTCWkAlrm struct {
	Enabled uint8
	Pending uint8
	Time    RTCTime
}

type BlkpgIoctlArg struct {
	Op      int32
	Flags   int32
	Datalen int32
	Data    *byte
}

const (
	BLKPG_ADD_PARTITION    = 0x1
	BLKPG_DEL_PARTITION    = 0x2
	BLKPG_RESIZE_PARTITION = 0x3
)

const (
	NETNSA_NONE         = 0x0
	NETNSA_NSID         = 0x1
	NETNSA_PID          = 0x2
	NETNSA_FD           = 0x3
	NETNSA_TARGET_NSID  = 0x4
	NETNSA_CURRENT_NSID = 0x5
)

type XDPRingOffset struct {
	Producer uint64
	Consumer uint64
	Desc     uint64
	Flags    uint64
}

type XDPMmapOffsets struct {
	Rx XDPRingOffset
	Tx XDPRingOffset
	Fr XDPRingOffset
	Cr XDPRingOffset
}

type XDPStatistics struct {
	Rx_dropped               uint64
	Rx_invalid_descs         uint64
	Tx_invalid_descs         uint64
	Rx_ring_full             uint64
	Rx_fill_ring_empty_descs uint64
	Tx_ring_empty_descs      uint64
}

type XDPDesc struct {
	Addr    uint64
	Len     uint32
	Options uint32
}

const (
	NCSI_CMD_UNSPEC                 = 0x0
	NCSI_CMD_PKG_INFO               = 0x1
	NCSI_CMD_SET_INTERFACE          = 0x2
	NCSI_CMD_CLEAR_INTERFACE        = 0x3
	NCSI_ATTR_UNSPEC                = 0x0
	NCSI_ATTR_IFINDEX               = 0x1
	NCSI_ATTR_PACKAGE_LIST          = 0x2
	NCSI_ATTR_PACKAGE_ID            = 0x3
	NCSI_ATTR_CHANNEL_ID            = 0x4
	NCSI_PKG_ATTR_UNSPEC            = 0x0
	NCSI_PKG_ATTR                   = 0x1
	NCSI_PKG_ATTR_ID                = 0x2
	NCSI_PKG_ATTR_FORCED            = 0x3
	NCSI_PKG_ATTR_CHANNEL_LIST      = 0x4
	NCSI_CHANNEL_ATTR_UNSPEC        = 0x0
	NCSI_CHANNEL_ATTR               = 0x1
	NCSI_CHANNEL_ATTR_ID            = 0x2
	NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3
	NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4
	NCSI_CHANNEL_ATTR_VERSION_STR   = 0x5
	NCSI_CHANNEL_ATTR_LINK_STATE    = 0x6
	NCSI_CHANNEL_ATTR_ACTIVE        = 0x7
	NCSI_CHANNEL_ATTR_FORCED        = 0x8
	NCSI_CHANNEL_ATTR_VLAN_LIST     = 0x9
	NCSI_CHANNEL_ATTR_VLAN_ID       = 0xa
)

type ScmTimestamping struct {
	Ts [3]Timespec
}

const (
	SOF_TIMESTAMPING_TX_HARDWARE  = 0x1
	SOF_TIMESTAMPING_TX_SOFTWARE  = 0x2
	SOF_TIMESTAMPING_RX_HARDWARE  = 0x4
	SOF_TIMESTAMPING_RX_SOFTWARE  = 0x8
	SOF_TIMESTAMPING_SOFTWARE     = 0x10
	SOF_TIMESTAMPING_SYS_HARDWARE = 0x20
	SOF_TIMESTAMPING_RAW_HARDWARE = 0x40
	SOF_TIMESTAMPING_OPT_ID       = 0x80
	SOF_TIMESTAMPING_TX_SCHED     = 0x100
	SOF_TIMESTAMPING_TX_ACK       = 0x200
	SOF_TIMESTAMPING_OPT_CMSG     = 0x400
	SOF_TIMESTAMPING_OPT_TSONLY   = 0x800
	SOF_TIMESTAMPING_OPT_STATS    = 0x1000
	SOF_TIMESTAMPING_OPT_PKTINFO  = 0x2000
	SOF_TIMESTAMPING_OPT_TX_SWHW  = 0x4000
	SOF_TIMESTAMPING_BIND_PHC     = 0x8000
	SOF_TIMESTAMPING_OPT_ID_TCP   = 0x10000

	SOF_TIMESTAMPING_LAST = 0x10000
	SOF_TIMESTAMPING_MASK = 0x1ffff

	SCM_TSTAMP_SND   = 0x0
	SCM_TSTAMP_SCHED = 0x1
	SCM_TSTAMP_ACK   = 0x2
)

type SockExtendedErr struct {
	Errno  uint32
	Origin uint8
	Type   uint8
	Code   uint8
	Pad    uint8
	Info   uint32
	Data   uint32
}

type FanotifyEventMetadata struct {
	Event_len    uint32
	Vers         uint8
	Reserved     uint8
	Metadata_len uint16
	Mask         uint64
	Fd           int32
	Pid          int32
}

type FanotifyResponse struct {
	Fd       int32
	Response uint32
}

const (
	CRYPTO_MSG_BASE      = 0x10
	CRYPTO_MSG_NEWALG    = 0x10
	CRYPTO_MSG_DELALG    = 0x11
	CRYPTO_MSG_UPDATEALG = 0x12
	CRYPTO_MSG_GETALG    = 0x13
	CRYPTO_MSG_DELRNG    = 0x14
	CRYPTO_MSG_GETSTAT   = 0x15
)

const (
	CRYPTOCFGA_UNSPEC           = 0x0
	CRYPTOCFGA_PRIORITY_VAL     = 0x1
	CRYPTOCFGA_REPORT_LARVAL    = 0x2
	CRYPTOCFGA_REPORT_HASH      = 0x3
	CRYPTOCFGA_REPORT_BLKCIPHER = 0x4
	CRYPTOCFGA_REPORT_AEAD      = 0x5
	CRYPTOCFGA_REPORT_COMPRESS  = 0x6
	CRYPTOCFGA_REPORT_RNG       = 0x7
	CRYPTOCFGA_REPORT_CIPHER    = 0x8
	CRYPTOCFGA_REPORT_AKCIPHER  = 0x9
	CRYPTOCFGA_REPORT_KPP       = 0xa
	CRYPTOCFGA_REPORT_ACOMP     = 0xb
	CRYPTOCFGA_STAT_LARVAL      = 0xc
	CRYPTOCFGA_STAT_HASH        = 0xd
	CRYPTOCFGA_STAT_BLKCIPHER   = 0xe
	CRYPTOCFGA_STAT_AEAD        = 0xf
	CRYPTOCFGA_STAT_COMPRESS    = 0x10
	CRYPTOCFGA_STAT_RNG         = 0x11
	CRYPTOCFGA_STAT_CIPHER      = 0x12
	CRYPTOCFGA_STAT_AKCIPHER    = 0x13
	CRYPTOCFGA_STAT_KPP         = 0x14
	CRYPTOCFGA_STAT_ACOMP       = 0x15
)

const (
	BPF_REG_0                                  = 0x0
	BPF_REG_1                                  = 0x1
	BPF_REG_2                                  = 0x2
	BPF_REG_3                                  = 0x3
	BPF_REG_4                                  = 0x4
	BPF_REG_5                                  = 0x5
	BPF_REG_6                                  = 0x6
	BPF_REG_7                                  = 0x7
	BPF_REG_8                                  = 0x8
	BPF_REG_9                                  = 0x9
	BPF_REG_10                                 = 0xa
	BPF_MAP_CREATE                             = 0x0
	BPF_MAP_LOOKUP_ELEM                        = 0x1
	BPF_MAP_UPDATE_ELEM                        = 0x2
	BPF_MAP_DELETE_ELEM                        = 0x3
	BPF_MAP_GET_NEXT_KEY                       = 0x4
	BPF_PROG_LOAD                              = 0x5
	BPF_OBJ_PIN                                = 0x6
	BPF_OBJ_GET                                = 0x7
	BPF_PROG_ATTACH                            = 0x8
	BPF_PROG_DETACH                            = 0x9
	BPF_PROG_TEST_RUN                          = 0xa
	BPF_PROG_GET_NEXT_ID                       = 0xb
	BPF_MAP_GET_NEXT_ID                        = 0xc
	BPF_PROG_GET_FD_BY_ID                      = 0xd
	BPF_MAP_GET_FD_BY_ID                       = 0xe
	BPF_OBJ_GET_INFO_BY_FD                     = 0xf
	BPF_PROG_QUERY                             = 0x10
	BPF_RAW_TRACEPOINT_OPEN                    = 0x11
	BPF_BTF_LOAD                               = 0x12
	BPF_BTF_GET_FD_BY_ID                       = 0x13
	BPF_TASK_FD_QUERY                          = 0x14
	BPF_MAP_LOOKUP_AND_DELETE_ELEM             = 0x15
	BPF_MAP_FREEZE                             = 0x16
	BPF_BTF_GET_NEXT_ID                        = 0x17
	BPF_MAP_LOOKUP_BATCH                       = 0x18
	BPF_MAP_LOOKUP_AND_DELETE_BATCH            = 0x19
	BPF_MAP_UPDATE_BATCH                       = 0x1a
	BPF_MAP_DELETE_BATCH                       = 0x1b
	BPF_LINK_CREATE                            = 0x1c
	BPF_LINK_UPDATE                            = 0x1d
	BPF_LINK_GET_FD_BY_ID                      = 0x1e
	BPF_LINK_GET_NEXT_ID                       = 0x1f
	BPF_ENABLE_STATS                           = 0x20
	BPF_ITER_CREATE                            = 0x21
	BPF_LINK_DETACH                            = 0x22
	BPF_PROG_BIND_MAP                          = 0x23
	BPF_MAP_TYPE_UNSPEC                        = 0x0
	BPF_MAP_TYPE_HASH                          = 0x1
	BPF_MAP_TYPE_ARRAY                         = 0x2
	BPF_MAP_TYPE_PROG_ARRAY                    = 0x3
	BPF_MAP_TYPE_PERF_EVENT_ARRAY              = 0x4
	BPF_MAP_TYPE_PERCPU_HASH                   = 0x5
	BPF_MAP_TYPE_PERCPU_ARRAY                  = 0x6
	BPF_MAP_TYPE_STACK_TRACE                   = 0x7
	BPF_MAP_TYPE_CGROUP_ARRAY                  = 0x8
	BPF_MAP_TYPE_LRU_HASH                      = 0x9
	BPF_MAP_TYPE_LRU_PERCPU_HASH               = 0xa
	BPF_MAP_TYPE_LPM_TRIE                      = 0xb
	BPF_MAP_TYPE_ARRAY_OF_MAPS                 = 0xc
	BPF_MAP_TYPE_HASH_OF_MAPS                  = 0xd
	BPF_MAP_TYPE_DEVMAP                        = 0xe
	BPF_MAP_TYPE_SOCKMAP                       = 0xf
	BPF_MAP_TYPE_CPUMAP                        = 0x10
	BPF_MAP_TYPE_XSKMAP                        = 0x11
	BPF_MAP_TYPE_SOCKHASH                      = 0x12
	BPF_MAP_TYPE_CGROUP_STORAGE                = 0x13
	BPF_MAP_TYPE_REUSEPORT_SOCKARRAY           = 0x14
	BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE         = 0x15
	BPF_MAP_TYPE_QUEUE                         = 0x16
	BPF_MAP_TYPE_STACK                         = 0x17
	BPF_MAP_TYPE_SK_STORAGE                    = 0x18
	BPF_MAP_TYPE_DEVMAP_HASH                   = 0x19
	BPF_MAP_TYPE_STRUCT_OPS                    = 0x1a
	BPF_MAP_TYPE_RINGBUF                       = 0x1b
	BPF_MAP_TYPE_INODE_STORAGE                 = 0x1c
	BPF_PROG_TYPE_UNSPEC                       = 0x0
	BPF_PROG_TYPE_SOCKET_FILTER                = 0x1
	BPF_PROG_TYPE_KPROBE                       = 0x2
	BPF_PROG_TYPE_SCHED_CLS                    = 0x3
	BPF_PROG_TYPE_SCHED_ACT                    = 0x4
	BPF_PROG_TYPE_TRACEPOINT                   = 0x5
	BPF_PROG_TYPE_XDP                          = 0x6
	BPF_PROG_TYPE_PERF_EVENT                   = 0x7
	BPF_PROG_TYPE_CGROUP_SKB                   = 0x8
	BPF_PROG_TYPE_CGROUP_SOCK                  = 0x9
	BPF_PROG_TYPE_LWT_IN                       = 0xa
	BPF_PROG_TYPE_LWT_OUT                      = 0xb
	BPF_PROG_TYPE_LWT_XMIT                     = 0xc
	BPF_PROG_TYPE_SOCK_OPS                     = 0xd
	BPF_PROG_TYPE_SK_SKB                       = 0xe
	BPF_PROG_TYPE_CGROUP_DEVICE                = 0xf
	BPF_PROG_TYPE_SK_MSG                       = 0x10
	BPF_PROG_TYPE_RAW_TRACEPOINT               = 0x11
	BPF_PROG_TYPE_CGROUP_SOCK_ADDR             = 0x12
	BPF_PROG_TYPE_LWT_SEG6LOCAL                = 0x13
	BPF_PROG_TYPE_LIRC_MODE2                   = 0x14
	BPF_PROG_TYPE_SK_REUSEPORT                 = 0x15
	BPF_PROG_TYPE_FLOW_DISSECTOR               = 0x16
	BPF_PROG_TYPE_CGROUP_SYSCTL                = 0x17
	BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE      = 0x18
	BPF_PROG_TYPE_CGROUP_SOCKOPT               = 0x19
	BPF_PROG_TYPE_TRACING                      = 0x1a
	BPF_PROG_TYPE_STRUCT_OPS                   = 0x1b
	BPF_PROG_TYPE_EXT                          = 0x1c
	BPF_PROG_TYPE_LSM                          = 0x1d
	BPF_PROG_TYPE_SK_LOOKUP                    = 0x1e
	BPF_CGROUP_INET_INGRESS                    = 0x0
	BPF_CGROUP_INET_EGRESS                     = 0x1
	BPF_CGROUP_INET_SOCK_CREATE                = 0x2
	BPF_CGROUP_SOCK_OPS                        = 0x3
	BPF_SK_SKB_STREAM_PARSER                   = 0x4
	BPF_SK_SKB_STREAM_VERDICT                  = 0x5
	BPF_CGROUP_DEVICE                          = 0x6
	BPF_SK_MSG_VERDICT                         = 0x7
	BPF_CGROUP_INET4_BIND                      = 0x8
	BPF_CGROUP_INET6_BIND                      = 0x9
	BPF_CGROUP_INET4_CONNECT                   = 0xa
	BPF_CGROUP_INET6_CONNECT                   = 0xb
	BPF_CGROUP_INET4_POST_BIND                 = 0xc
	BPF_CGROUP_INET6_POST_BIND                 = 0xd
	BPF_CGROUP_UDP4_SENDMSG                    = 0xe
	BPF_CGROUP_UDP6_SENDMSG                    = 0xf
	BPF_LIRC_MODE2                             = 0x10
	BPF_FLOW_DISSECTOR                         = 0x11
	BPF_CGROUP_SYSCTL                          = 0x12
	BPF_CGROUP_UDP4_RECVMSG                    = 0x13
	BPF_CGROUP_UDP6_RECVMSG                    = 0x14
	BPF_CGROUP_GETSOCKOPT                      = 0x15
	BPF_CGROUP_SETSOCKOPT                      = 0x16
	BPF_TRACE_RAW_TP                           = 0x17
	BPF_TRACE_FENTRY                           = 0x18
	BPF_TRACE_FEXIT                            = 0x19
	BPF_MODIFY_RETURN                          = 0x1a
	BPF_LSM_MAC                                = 0x1b
	BPF_TRACE_ITER                             = 0x1c
	BPF_CGROUP_INET4_GETPEERNAME               = 0x1d
	BPF_CGROUP_INET6_GETPEERNAME               = 0x1e
	BPF_CGROUP_INET4_GETSOCKNAME               = 0x1f
	BPF_CGROUP_INET6_GETSOCKNAME               = 0x20
	BPF_XDP_DEVMAP                             = 0x21
	BPF_CGROUP_INET_SOCK_RELEASE               = 0x22
	BPF_XDP_CPUMAP                             = 0x23
	BPF_SK_LOOKUP                              = 0x24
	BPF_XDP                                    = 0x25
	BPF_LINK_TYPE_UNSPEC                       = 0x0
	BPF_LINK_TYPE_RAW_TRACEPOINT               = 0x1
	BPF_LINK_TYPE_TRACING                      = 0x2
	BPF_LINK_TYPE_CGROUP                       = 0x3
	BPF_LINK_TYPE_ITER                         = 0x4
	BPF_LINK_TYPE_NETNS                        = 0x5
	BPF_LINK_TYPE_XDP                          = 0x6
	BPF_ANY                                    = 0x0
	BPF_NOEXIST                                = 0x1
	BPF_EXIST                                  = 0x2
	BPF_F_LOCK                                 = 0x4
	BPF_F_NO_PREALLOC                          = 0x1
	BPF_F_NO_COMMON_LRU                        = 0x2
	BPF_F_NUMA_NODE                            = 0x4
	BPF_F_RDONLY                               = 0x8
	BPF_F_WRONLY                               = 0x10
	BPF_F_STACK_BUILD_ID                       = 0x20
	BPF_F_ZERO_SEED                            = 0x40
	BPF_F_RDONLY_PROG                          = 0x80
	BPF_F_WRONLY_PROG                          = 0x100
	BPF_F_CLONE                                = 0x200
	BPF_F_MMAPABLE                             = 0x400
	BPF_F_PRESERVE_ELEMS                       = 0x800
	BPF_F_INNER_MAP                            = 0x1000
	BPF_STATS_RUN_TIME                         = 0x0
	BPF_STACK_BUILD_ID_EMPTY                   = 0x0
	BPF_STACK_BUILD_ID_VALID                   = 0x1
	BPF_STACK_BUILD_ID_IP                      = 0x2
	BPF_F_RECOMPUTE_CSUM                       = 0x1
	BPF_F_INVALIDATE_HASH                      = 0x2
	BPF_F_HDR_FIELD_MASK                       = 0xf
	BPF_F_PSEUDO_HDR                           = 0x10
	BPF_F_MARK_MANGLED_0                       = 0x20
	BPF_F_MARK_ENFORCE                         = 0x40
	BPF_F_INGRESS                              = 0x1
	BPF_F_TUNINFO_IPV6                         = 0x1
	BPF_F_SKIP_FIELD_MASK                      = 0xff
	BPF_F_USER_STACK                           = 0x100
	BPF_F_FAST_STACK_CMP                       = 0x200
	BPF_F_REUSE_STACKID                        = 0x400
	BPF_F_USER_BUILD_ID                        = 0x800
	BPF_F_ZERO_CSUM_TX                         = 0x2
	BPF_F_DONT_FRAGMENT                        = 0x4
	BPF_F_SEQ_NUMBER                           = 0x8
	BPF_F_INDEX_MASK                           = 0xffffffff
	BPF_F_CURRENT_CPU                          = 0xffffffff
	BPF_F_CTXLEN_MASK                          = 0xfffff00000000
	BPF_F_CURRENT_NETNS                        = -0x1
	BPF_CSUM_LEVEL_QUERY                       = 0x0
	BPF_CSUM_LEVEL_INC                         = 0x1
	BPF_CSUM_LEVEL_DEC                         = 0x2
	BPF_CSUM_LEVEL_RESET                       = 0x3
	BPF_F_ADJ_ROOM_FIXED_GSO                   = 0x1
	BPF_F_ADJ_ROOM_ENCAP_L3_IPV4               = 0x2
	BPF_F_ADJ_ROOM_ENCAP_L3_IPV6               = 0x4
	BPF_F_ADJ_ROOM_ENCAP_L4_GRE                = 0x8
	BPF_F_ADJ_ROOM_ENCAP_L4_UDP                = 0x10
	BPF_F_ADJ_ROOM_NO_CSUM_RESET               = 0x20
	BPF_ADJ_ROOM_ENCAP_L2_MASK                 = 0xff
	BPF_ADJ_ROOM_ENCAP_L2_SHIFT                = 0x38
	BPF_F_SYSCTL_BASE_NAME                     = 0x1
	BPF_LOCAL_STORAGE_GET_F_CREATE             = 0x1
	BPF_SK_STORAGE_GET_F_CREATE                = 0x1
	BPF_F_GET_BRANCH_RECORDS_SIZE              = 0x1
	BPF_RB_NO_WAKEUP                           = 0x1
	BPF_RB_FORCE_WAKEUP                        = 0x2
	BPF_RB_AVAIL_DATA                          = 0x0
	BPF_RB_RING_SIZE                           = 0x1
	BPF_RB_CONS_POS                            = 0x2
	BPF_RB_PROD_POS                            = 0x3
	BPF_RINGBUF_BUSY_BIT                       = 0x80000000
	BPF_RINGBUF_DISCARD_BIT                    = 0x40000000
	BPF_RINGBUF_HDR_SZ                         = 0x8
	BPF_SK_LOOKUP_F_REPLACE                    = 0x1
	BPF_SK_LOOKUP_F_NO_REUSEPORT               = 0x2
	BPF_ADJ_ROOM_NET                           = 0x0
	BPF_ADJ_ROOM_MAC                           = 0x1
	BPF_HDR_START_MAC                          = 0x0
	BPF_HDR_START_NET                          = 0x1
	BPF_LWT_ENCAP_SEG6                         = 0x0
	BPF_LWT_ENCAP_SEG6_INLINE                  = 0x1
	BPF_LWT_ENCAP_IP                           = 0x2
	BPF_OK                                     = 0x0
	BPF_DROP                                   = 0x2
	BPF_REDIRECT                               = 0x7
	BPF_LWT_REROUTE                            = 0x80
	BPF_SOCK_OPS_RTO_CB_FLAG                   = 0x1
	BPF_SOCK_OPS_RETRANS_CB_FLAG               = 0x2
	BPF_SOCK_OPS_STATE_CB_FLAG                 = 0x4
	BPF_SOCK_OPS_RTT_CB_FLAG                   = 0x8
	BPF_SOCK_OPS_PARSE_ALL_HDR_OPT_CB_FLAG     = 0x10
	BPF_SOCK_OPS_PARSE_UNKNOWN_HDR_OPT_CB_FLAG = 0x20
	BPF_SOCK_OPS_WRITE_HDR_OPT_CB_FLAG         = 0x40
	BPF_SOCK_OPS_ALL_CB_FLAGS                  = 0x7f
	BPF_SOCK_OPS_VOID                          = 0x0
	BPF_SOCK_OPS_TIMEOUT_INIT                  = 0x1
	BPF_SOCK_OPS_RWND_INIT                     = 0x2
	BPF_SOCK_OPS_TCP_CONNECT_CB                = 0x3
	BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB         = 0x4
	BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB        = 0x5
	BPF_SOCK_OPS_NEEDS_ECN                     = 0x6
	BPF_SOCK_OPS_BASE_RTT                      = 0x7
	BPF_SOCK_OPS_RTO_CB                        = 0x8
	BPF_SOCK_OPS_RETRANS_CB                    = 0x9
	BPF_SOCK_OPS_STATE_CB                      = 0xa
	BPF_SOCK_OPS_TCP_LISTEN_CB                 = 0xb
	BPF_SOCK_OPS_RTT_CB                        = 0xc
	BPF_SOCK_OPS_PARSE_HDR_OPT_CB              = 0xd
	BPF_SOCK_OPS_HDR_OPT_LEN_CB                = 0xe
	BPF_SOCK_OPS_WRITE_HDR_OPT_CB              = 0xf
	BPF_TCP_ESTABLISHED                        = 0x1
	BPF_TCP_SYN_SENT                           = 0x2
	BPF_TCP_SYN_RECV                           = 0x3
	BPF_TCP_FIN_WAIT1                          = 0x4
	BPF_TCP_FIN_WAIT2                          = 0x5
	BPF_TCP_TIME_WAIT                          = 0x6
	BPF_TCP_CLOSE                              = 0x7
	BPF_TCP_CLOSE_WAIT                         = 0x8
	BPF_TCP_LAST_ACK                           = 0x9
	BPF_TCP_LISTEN                             = 0xa
	BPF_TCP_CLOSING                            = 0xb
	BPF_TCP_NEW_SYN_RECV                       = 0xc
	BPF_TCP_MAX_STATES                         = 0xd
	TCP_BPF_IW                                 = 0x3e9
	TCP_BPF_SNDCWND_CLAMP                      = 0x3ea
	TCP_BPF_DELACK_MAX                         = 0x3eb
	TCP_BPF_RTO_MIN                            = 0x3ec
	TCP_BPF_SYN                                = 0x3ed
	TCP_BPF_SYN_IP                             = 0x3ee
	TCP_BPF_SYN_MAC                            = 0x3ef
	BPF_LOAD_HDR_OPT_TCP_SYN                   = 0x1
	BPF_WRITE_HDR_TCP_CURRENT_MSS              = 0x1
	BPF_WRITE_HDR_TCP_SYNACK_COOKIE            = 0x2
	BPF_DEVCG_ACC_MKNOD                        = 0x1
	BPF_DEVCG_ACC_READ                         = 0x2
	BPF_DEVCG_ACC_WRITE                        = 0x4
	BPF_DEVCG_DEV_BLOCK                        = 0x1
	BPF_DEVCG_DEV_CHAR                         = 0x2
	BPF_FIB_LOOKUP_DIRECT                      = 0x1
	BPF_FIB_LOOKUP_OUTPUT                      = 0x2
	BPF_FIB_LKUP_RET_SUCCESS                   = 0x0
	BPF_FIB_LKUP_RET_BLACKHOLE                 = 0x1
	BPF_FIB_LKUP_RET_UNREACHABLE               = 0x2
	BPF_FIB_LKUP_RET_PROHIBIT                  = 0x3
	BPF_FIB_LKUP_RET_NOT_FWDED                 = 0x4
	BPF_FIB_LKUP_RET_FWD_DISABLED              = 0x5
	BPF_FIB_LKUP_RET_UNSUPP_LWT                = 0x6
	BPF_FIB_LKUP_RET_NO_NEIGH                  = 0x7
	BPF_FIB_LKUP_RET_FRAG_NEEDED               = 0x8
	BPF_FD_TYPE_RAW_TRACEPOINT                 = 0x0
	BPF_FD_TYPE_TRACEPOINT                     = 0x1
	BPF_FD_TYPE_KPROBE                         = 0x2
	BPF_FD_TYPE_KRETPROBE                      = 0x3
	BPF_FD_TYPE_UPROBE                         = 0x4
	BPF_FD_TYPE_URETPROBE                      = 0x5
	BPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG        = 0x1
	BPF_FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL    = 0x2
	BPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP         = 0x4
)

const (
	RTNLGRP_NONE          = 0x0
	RTNLGRP_LINK          = 0x1
	RTNLGRP_NOTIFY        = 0x2
	RTNLGRP_NEIGH         = 0x3
	RTNLGRP_TC            = 0x4
	RTNLGRP_IPV4_IFADDR   = 0x5
	RTNLGRP_IPV4_MROUTE   = 0x6
	RTNLGRP_IPV4_ROUTE    = 0x7
	RTNLGRP_IPV4_RULE     = 0x8
	RTNLGRP_IPV6_IFADDR   = 0x9
	RTNLGRP_IPV6_MROUTE   = 0xa
	RTNLGRP_IPV6_ROUTE    = 0xb
	RTNLGRP_IPV6_IFINFO   = 0xc
	RTNLGRP_DECnet_IFADDR = 0xd
	RTNLGRP_NOP2          = 0xe
	RTNLGRP_DECnet_ROUTE  = 0xf
	RTNLGRP_DECnet_RULE   = 0x10
	RTNLGRP_NOP4          = 0x11
	RTNLGRP_IPV6_PREFIX   = 0x12
	RTNLGRP_IPV6_RULE     = 0x13
	RTNLGRP_ND_USEROPT    = 0x14
	RTNLGRP_PHONET_IFADDR = 0x15
	RTNLGRP_PHONET_ROUTE  = 0x16
	RTNLGRP_DCB           = 0x17
	RTNLGRP_IPV4_NETCONF  = 0x18
	RTNLGRP_IPV6_NETCONF  = 0x19
	RTNLGRP_MDB           = 0x1a
	RTNLGRP_MPLS_ROUTE    = 0x1b
	RTNLGRP_NSID          = 0x1c
	RTNLGRP_MPLS_NETCONF  = 0x1d
	RTNLGRP_IPV4_MROUTE_R = 0x1e
	RTNLGRP_IPV6_MROUTE_R = 0x1f
	RTNLGRP_NEXTHOP       = 0x20
	RTNLGRP_BRVLAN        = 0x21
)

type CapUserHeader struct {
	Version uint32
	Pid     int32
}

type CapUserData struct {
	Effective   uint32
	Permitted   uint32
	Inheritable uint32
}

const (
	LINUX_CAPABILITY_VERSION_1 = 0x19980330
	LINUX_CAPABILITY_VERSION_2 = 0x20071026
	LINUX_CAPABILITY_VERSION_3 = 0x20080522
)

const (
	LO_FLAGS_READ_ONLY = 0x1
	LO_FLAGS_AUTOCLEAR = 0x4
	LO_FLAGS_PARTSCAN  = 0x8
	LO_FLAGS_DIRECT_IO = 0x10
)

type LoopInfo64 struct {
	Device           uint64
	Inode            uint64
	Rdevice          uint64
	Offset           uint64
	Sizelimit        uint64
	Number           uint32
	Encrypt_type     uint32
	Encrypt_key_size uint32
	Flags            uint32
	File_name        [64]uint8
	Crypt_name       [64]uint8
	Encrypt_key      [32]uint8
	Init             [2]uint64
}

type TIPCSocketAddr struct {
	Ref  uint32
	Node uint32
}

type TIPCServiceRange struct {
	Type  uint32
	Lower uint32
	Upper uint32
}

type TIPCServiceName struct {
	Type     uint32
	Instance uint32
	Domain   uint32
}

type TIPCEvent struct {
	Event uint32
	Lower uint32
	Upper uint32
	Port  TIPCSocketAddr
	S     TIPCSubscr
}

type TIPCGroupReq struct {
	Type     uint32
	Instance uint32
	Scope    uint32
	Flags    uint32
}

const (
	TIPC_CLUSTER_SCOPE = 0x2
	TIPC_NODE_SCOPE    = 0x3
)

const (
	SYSLOG_ACTION_CLOSE         = 0
	SYSLOG_ACTION_OPEN          = 1
	SYSLOG_ACTION_READ          = 2
	SYSLOG_ACTION_READ_ALL      = 3
	SYSLOG_ACTION_READ_CLEAR    = 4
	SYSLOG_ACTION_CLEAR         = 5
	SYSLOG_ACTION_CONSOLE_OFF   = 6
	SYSLOG_ACTION_CONSOLE_ON    = 7
	SYSLOG_ACTION_CONSOLE_LEVEL = 8
	SYSLOG_ACTION_SIZE_UNREAD   = 9
	SYSLOG_ACTION_SIZE_BUFFER   = 10
)

const (
	DEVLINK_CMD_UNSPEC                                 = 0x0
	DEVLINK_CMD_GET                                    = 0x1
	DEVLINK_CMD_SET                                    = 0x2
	DEVLINK_CMD_NEW                                    = 0x3
	DEVLINK_CMD_DEL                                    = 0x4
	DEVLINK_CMD_PORT_GET                               = 0x5
	DEVLINK_CMD_PORT_SET                               = 0x6
	DEVLINK_CMD_PORT_NEW                               = 0x7
	DEVLINK_CMD_PORT_DEL                               = 0x8
	DEVLINK_CMD_PORT_SPLIT                             = 0x9
	DEVLINK_CMD_PORT_UNSPLIT                           = 0xa
	DEVLINK_CMD_SB_GET                                 = 0xb
	DEVLINK_CMD_SB_SET                                 = 0xc
	DEVLINK_CMD_SB_NEW                                 = 0xd
	DEVLINK_CMD_SB_DEL                                 = 0xe
	DEVLINK_CMD_SB_POOL_GET                            = 0xf
	DEVLINK_CMD_SB_POOL_SET                            = 0x10
	DEVLINK_CMD_SB_POOL_NEW                            = 0x11
	DEVLINK_CMD_SB_POOL_DEL                            = 0x12
	DEVLINK_CMD_SB_PORT_POOL_GET                       = 0x13
	DEVLINK_CMD_SB_PORT_POOL_SET                       = 0x14
	DEVLINK_CMD_SB_PORT_POOL_NEW                       = 0x15
	DEVLINK_CMD_SB_PORT_POOL_DEL                       = 0x16
	DEVLINK_CMD_SB_TC_POOL_BIND_GET                    = 0x17
	DEVLINK_CMD_SB_TC_POOL_BIND_SET                    = 0x18
	DEVLINK_CMD_SB_TC_POOL_BIND_NEW                    = 0x19
	DEVLINK_CMD_SB_TC_POOL_BIND_DEL                    = 0x1a
	DEVLINK_CMD_SB_OCC_SNAPSHOT                        = 0x1b
	DEVLINK_CMD_SB_OCC_MAX_CLEAR                       = 0x1c
	DEVLINK_CMD_ESWITCH_GET                            = 0x1d
	DEVLINK_CMD_ESWITCH_SET                            = 0x1e
	DEVLINK_CMD_DPIPE_TABLE_GET                        = 0x1f
	DEVLINK_CMD_DPIPE_ENTRIES_GET                      = 0x20
	DEVLINK_CMD_DPIPE_HEADERS_GET                      = 0x21
	DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET               = 0x22
	DEVLINK_CMD_RESOURCE_SET                           = 0x23
	DEVLINK_CMD_RESOURCE_DUMP                          = 0x24
	DEVLINK_CMD_RELOAD                                 = 0x25
	DEVLINK_CMD_PARAM_GET                              = 0x26
	DEVLINK_CMD_PARAM_SET                              = 0x27
	DEVLINK_CMD_PARAM_NEW                              = 0x28
	DEVLINK_CMD_PARAM_DEL                              = 0x29
	DEVLINK_CMD_REGION_GET                             = 0x2a
	DEVLINK_CMD_REGION_SET                             = 0x2b
	DEVLINK_CMD_REGION_NEW                             = 0x2c
	DEVLINK_CMD_REGION_DEL                             = 0x2d
	DEVLINK_CMD_REGION_READ                            = 0x2e
	DEVLINK_CMD_PORT_PARAM_GET                         = 0x2f
	DEVLINK_CMD_PORT_PARAM_SET                         = 0x30
	DEVLINK_CMD_PORT_PARAM_NEW                         = 0x31
	DEVLINK_CMD_PORT_PARAM_DEL                         = 0x32
	DEVLINK_CMD_INFO_GET                               = 0x33
	DEVLINK_CMD_HEALTH_REPORTER_GET                    = 0x34
	DEVLINK_CMD_HEALTH_REPORTER_SET                    = 0x35
	DEVLINK_CMD_HEALTH_REPORTER_RECOVER                = 0x36
	DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE               = 0x37
	DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET               = 0x38
	DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR             = 0x39
	DEVLINK_CMD_FLASH_UPDATE                           = 0x3a
	DEVLINK_CMD_FLASH_UPDATE_END                       = 0x3b
	DEVLINK_CMD_FLASH_UPDATE_STATUS                    = 0x3c
	DEVLINK_CMD_TRAP_GET                               = 0x3d
	DEVLINK_CMD_TRAP_SET                               = 0x3e
	DEVLINK_CMD_TRAP_NEW                               = 0x3f
	DEVLINK_CMD_TRAP_DEL                               = 0x40
	DEVLINK_CMD_TRAP_GROUP_GET                         = 0x41
	DEVLINK_CMD_TRAP_GROUP_SET                         = 0x42
	DEVLINK_CMD_TRAP_GROUP_NEW                         = 0x43
	DEVLINK_CMD_TRAP_GROUP_DEL                         = 0x44
	DEVLINK_CMD_TRAP_POLICER_GET                       = 0x45
	DEVLINK_CMD_TRAP_POLICER_SET                       = 0x46
	DEVLINK_CMD_TRAP_POLICER_NEW                       = 0x47
	DEVLINK_CMD_TRAP_POLICER_DEL                       = 0x48
	DEVLINK_CMD_HEALTH_REPORTER_TEST                   = 0x49
	DEVLINK_CMD_RATE_GET                               = 0x4a
	DEVLINK_CMD_RATE_SET                               = 0x4b
	DEVLINK_CMD_RATE_NEW                               = 0x4c
	DEVLINK_CMD_RATE_DEL                               = 0x4d
	DEVLINK_CMD_LINECARD_GET                           = 0x4e
	DEVLINK_CMD_LINECARD_SET                           = 0x4f
	DEVLINK_CMD_LINECARD_NEW                           = 0x50
	DEVLINK_CMD_LINECARD_DEL                           = 0x51
	DEVLINK_CMD_SELFTESTS_GET                          = 0x52
	DEVLINK_CMD_MAX                                    = 0x53
	DEVLINK_PORT_TYPE_NOTSET                           = 0x0
	DEVLINK_PORT_TYPE_AUTO                             = 0x1
	DEVLINK_PORT_TYPE_ETH                              = 0x2
	DEVLINK_PORT_TYPE_IB                               = 0x3
	DEVLINK_SB_POOL_TYPE_INGRESS                       = 0x0
	DEVLINK_SB_POOL_TYPE_EGRESS                        = 0x1
	DEVLINK_SB_THRESHOLD_TYPE_STATIC                   = 0x0
	DEVLINK_SB_THRESHOLD_TYPE_DYNAMIC                  = 0x1
	DEVLINK_ESWITCH_MODE_LEGACY                        = 0x0
	DEVLINK_ESWITCH_MODE_SWITCHDEV                     = 0x1
	DEVLINK_ESWITCH_INLINE_MODE_NONE                   = 0x0
	DEVLINK_ESWITCH_INLINE_MODE_LINK                   = 0x1
	DEVLINK_ESWITCH_INLINE_MODE_NETWORK                = 0x2
	DEVLINK_ESWITCH_INLINE_MODE_TRANSPORT              = 0x3
	DEVLINK_ESWITCH_ENCAP_MODE_NONE                    = 0x0
	DEVLINK_ESWITCH_ENCAP_MODE_BASIC                   = 0x1
	DEVLINK_PORT_FLAVOUR_PHYSICAL                      = 0x0
	DEVLINK_PORT_FLAVOUR_CPU                           = 0x1
	DEVLINK_PORT_FLAVOUR_DSA                           = 0x2
	DEVLINK_PORT_FLAVOUR_PCI_PF                        = 0x3
	DEVLINK_PORT_FLAVOUR_PCI_VF                        = 0x4
	DEVLINK_PORT_FLAVOUR_VIRTUAL                       = 0x5
	DEVLINK_PORT_FLAVOUR_UNUSED                        = 0x6
	DEVLINK_PARAM_CMODE_RUNTIME                        = 0x0
	DEVLINK_PARAM_CMODE_DRIVERINIT                     = 0x1
	DEVLINK_PARAM_CMODE_PERMANENT                      = 0x2
	DEVLINK_PARAM_CMODE_MAX                            = 0x2
	DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DRIVER          = 0x0
	DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_FLASH           = 0x1
	DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DISK            = 0x2
	DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_UNKNOWN         = 0x3
	DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_UNKNOWN = 0x0
	DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_ALWAYS  = 0x1
	DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_NEVER   = 0x2
	DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_DISK    = 0x3
	DEVLINK_ATTR_STATS_RX_PACKETS                      = 0x0
	DEVLINK_ATTR_STATS_RX_BYTES                        = 0x1
	DEVLINK_ATTR_STATS_RX_DROPPED                      = 0x2
	DEVLINK_ATTR_STATS_MAX                             = 0x2
	DEVLINK_FLASH_OVERWRITE_SETTINGS_BIT               = 0x0
	DEVLINK_FLASH_OVERWRITE_IDENTIFIERS_BIT            = 0x1
	DEVLINK_FLASH_OVERWRITE_MAX_BIT                    = 0x1
	DEVLINK_TRAP_ACTION_DROP                           = 0x0
	DEVLINK_TRAP_ACTION_TRAP                           = 0x1
	DEVLINK_TRAP_ACTION_MIRROR                         = 0x2
	DEVLINK_TRAP_TYPE_DROP                             = 0x0
	DEVLINK_TRAP_TYPE_EXCEPTION                        = 0x1
	DEVLINK_TRAP_TYPE_CONTROL                          = 0x2
	DEVLINK_ATTR_TRAP_METADATA_TYPE_IN_PORT            = 0x0
	DEVLINK_ATTR_TRAP_METADATA_TYPE_FA_COOKIE          = 0x1
	DEVLINK_RELOAD_ACTION_UNSPEC                       = 0x0
	DEVLINK_RELOAD_ACTION_DRIVER_REINIT                = 0x1
	DEVLINK_RELOAD_ACTION_FW_ACTIVATE                  = 0x2
	DEVLINK_RELOAD_ACTION_MAX                          = 0x2
	DEVLINK_RELOAD_LIMIT_UNSPEC                        = 0x0
	DEVLINK_RELOAD_LIMIT_NO_RESET                      = 0x1
	DEVLINK_RELOAD_LIMIT_MAX                           = 0x1
	DEVLINK_ATTR_UNSPEC                                = 0x0
	DEVLINK_ATTR_BUS_NAME                              = 0x1
	DEVLINK_ATTR_DEV_NAME                              = 0x2
	DEVLINK_ATTR_PORT_INDEX                            = 0x3
	DEVLINK_ATTR_PORT_TYPE                             = 0x4
	DEVLINK_ATTR_PORT_DESIRED_TYPE                     = 0x5
	DEVLINK_ATTR_PORT_NETDEV_IFINDEX                   = 0x6
	DEVLINK_ATTR_PORT_NETDEV_NAME                      = 0x7
	DEVLINK_ATTR_PORT_IBDEV_NAME                       = 0x8
	DEVLINK_ATTR_PORT_SPLIT_COUNT                      = 0x9
	DEVLINK_ATTR_PORT_SPLIT_GROUP                      = 0xa
	DEVLINK_ATTR_SB_INDEX                              = 0xb
	DEVLINK_ATTR_SB_SIZE                               = 0xc
	DEVLINK_ATTR_SB_INGRESS_POOL_COUNT                 = 0xd
	DEVLINK_ATTR_SB_EGRESS_POOL_COUNT                  = 0xe
	DEVLINK_ATTR_SB_INGRESS_TC_COUNT                   = 0xf
	DEVLINK_ATTR_SB_EGRESS_TC_COUNT                    = 0x10
	DEVLINK_ATTR_SB_POOL_INDEX                         = 0x11
	DEVLINK_ATTR_SB_POOL_TYPE                          = 0x12
	DEVLINK_ATTR_SB_POOL_SIZE                          = 0x13
	DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE                = 0x14
	DEVLINK_ATTR_SB_THRESHOLD                          = 0x15
	DEVLINK_ATTR_SB_TC_INDEX                           = 0x16
	DEVLINK_ATTR_SB_OCC_CUR                            = 0x17
	DEVLINK_ATTR_SB_OCC_MAX                            = 0x18
	DEVLINK_ATTR_ESWITCH_MODE                          = 0x19
	DEVLINK_ATTR_ESWITCH_INLINE_MODE                   = 0x1a
	DEVLINK_ATTR_DPIPE_TABLES                          = 0x1b
	DEVLINK_ATTR_DPIPE_TABLE                           = 0x1c
	DEVLINK_ATTR_DPIPE_TABLE_NAME                      = 0x1d
	DEVLINK_ATTR_DPIPE_TABLE_SIZE                      = 0x1e
	DEVLINK_ATTR_DPIPE_TABLE_MATCHES                   = 0x1f
	DEVLINK_ATTR_DPIPE_TABLE_ACTIONS                   = 0x20
	DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED          = 0x21
	DEVLINK_ATTR_DPIPE_ENTRIES                         = 0x22
	DEVLINK_ATTR_DPIPE_ENTRY                           = 0x23
	DEVLINK_ATTR_DPIPE_ENTRY_INDEX                     = 0x24
	DEVLINK_ATTR_DPIPE_ENTRY_MATCH_VALUES              = 0x25
	DEVLINK_ATTR_DPIPE_ENTRY_ACTION_VALUES             = 0x26
	DEVLINK_ATTR_DPIPE_ENTRY_COUNTER                   = 0x27
	DEVLINK_ATTR_DPIPE_MATCH                           = 0x28
	DEVLINK_ATTR_DPIPE_MATCH_VALUE                     = 0x29
	DEVLINK_ATTR_DPIPE_MATCH_TYPE                      = 0x2a
	DEVLINK_ATTR_DPIPE_ACTION                          = 0x2b
	DEVLINK_ATTR_DPIPE_ACTION_VALUE                    = 0x2c
	DEVLINK_ATTR_DPIPE_ACTION_TYPE                     = 0x2d
	DEVLINK_ATTR_DPIPE_VALUE                           = 0x2e
	DEVLINK_ATTR_DPIPE_VALUE_MASK                      = 0x2f
	DEVLINK_ATTR_DPIPE_VALUE_MAPPING                   = 0x30
	DEVLINK_ATTR_DPIPE_HEADERS                         = 0x31
	DEVLINK_ATTR_DPIPE_HEADER                          = 0x32
	DEVLINK_ATTR_DPIPE_HEADER_NAME                     = 0x33
	DEVLINK_ATTR_DPIPE_HEADER_ID                       = 0x34
	DEVLINK_ATTR_DPIPE_HEADER_FIELDS                   = 0x35
	DEVLINK_ATTR_DPIPE_HEADER_GLOBAL                   = 0x36
	DEVLINK_ATTR_DPIPE_HEADER_INDEX                    = 0x37
	DEVLINK_ATTR_DPIPE_FIELD                           = 0x38
	DEVLINK_ATTR_DPIPE_FIELD_NAME                      = 0x39
	DEVLINK_ATTR_DPIPE_FIELD_ID                        = 0x3a
	DEVLINK_ATTR_DPIPE_FIELD_BITWIDTH                  = 0x3b
	DEVLINK_ATTR_DPIPE_FIELD_MAPPING_TYPE              = 0x3c
	DEVLINK_ATTR_PAD                                   = 0x3d
	DEVLINK_ATTR_ESWITCH_ENCAP_MODE                    = 0x3e
	DEVLINK_ATTR_RESOURCE_LIST                         = 0x3f
	DEVLINK_ATTR_RESOURCE                              = 0x40
	DEVLINK_ATTR_RESOURCE_NAME                         = 0x41
	DEVLINK_ATTR_RESOURCE_ID                           = 0x42
	DEVLINK_ATTR_RESOURCE_SIZE                         = 0x43
	DEVLINK_ATTR_RESOURCE_SIZE_NEW                     = 0x44
	DEVLINK_ATTR_RESOURCE_SIZE_VALID                   = 0x45
	DEVLINK_ATTR_RESOURCE_SIZE_MIN                     = 0x46
	DEVLINK_ATTR_RESOURCE_SIZE_MAX                     = 0x47
	DEVLINK_ATTR_RESOURCE_SIZE_GRAN                    = 0x48
	DEVLINK_ATTR_RESOURCE_UNIT                         = 0x49
	DEVLINK_ATTR_RESOURCE_OCC                          = 0x4a
	DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID               = 0x4b
	DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS            = 0x4c
	DEVLINK_ATTR_PORT_FLAVOUR                          = 0x4d
	DEVLINK_ATTR_PORT_NUMBER                           = 0x4e
	DEVLINK_ATTR_PORT_SPLIT_SUBPORT_NUMBER             = 0x4f
	DEVLINK_ATTR_PARAM                                 = 0x50
	DEVLINK_ATTR_PARAM_NAME                            = 0x51
	DEVLINK_ATTR_PARAM_GENERIC                         = 0x52
	DEVLINK_ATTR_PARAM_TYPE                            = 0x53
	DEVLINK_ATTR_PARAM_VALUES_LIST                     = 0x54
	DEVLINK_ATTR_PARAM_VALUE                           = 0x55
	DEVLINK_ATTR_PARAM_VALUE_DATA                      = 0x56
	DEVLINK_ATTR_PARAM_VALUE_CMODE                     = 0x57
	DEVLINK_ATTR_REGION_NAME                           = 0x58
	DEVLINK_ATTR_REGION_SIZE                           = 0x59
	DEVLINK_ATTR_REGION_SNAPSHOTS                      = 0x5a
	DEVLINK_ATTR_REGION_SNAPSHOT                       = 0x5b
	DEVLINK_ATTR_REGION_SNAPSHOT_ID                    = 0x5c
	DEVLINK_ATTR_REGION_CHUNKS                         = 0x5d
	DEVLINK_ATTR_REGION_CHUNK                          = 0x5e
	DEVLINK_ATTR_REGION_CHUNK_DATA                     = 0x5f
	DEVLINK_ATTR_REGION_CHUNK_ADDR                     = 0x60
	DEVLINK_ATTR_REGION_CHUNK_LEN                      = 0x61
	DEVLINK_ATTR_INFO_DRIVER_NAME                      = 0x62
	DEVLINK_ATTR_INFO_SERIAL_NUMBER                    = 0x63
	DEVLINK_ATTR_INFO_VERSION_FIXED                    = 0x64
	DEVLINK_ATTR_INFO_VERSION_RUNNING                  = 0x65
	DEVLINK_ATTR_INFO_VERSION_STORED                   = 0x66
	DEVLINK_ATTR_INFO_VERSION_NAME                     = 0x67
	DEVLINK_ATTR_INFO_VERSION_VALUE                    = 0x68
	DEVLINK_ATTR_SB_POOL_CELL_SIZE                     = 0x69
	DEVLINK_ATTR_FMSG                                  = 0x6a
	DEVLINK_ATTR_FMSG_OBJ_NEST_START                   = 0x6b
	DEVLINK_ATTR_FMSG_PAIR_NEST_START                  = 0x6c
	DEVLINK_ATTR_FMSG_ARR_NEST_START                   = 0x6d
	DEVLINK_ATTR_FMSG_NEST_END                         = 0x6e
	DEVLINK_ATTR_FMSG_OBJ_NAME                         = 0x6f
	DEVLINK_ATTR_FMSG_OBJ_VALUE_TYPE                   = 0x70
	DEVLINK_ATTR_FMSG_OBJ_VALUE_DATA                   = 0x71
	DEVLINK_ATTR_HEALTH_REPORTER                       = 0x72
	DEVLINK_ATTR_HEALTH_REPORTER_NAME                  = 0x73
	DEVLINK_ATTR_HEALTH_REPORTER_STATE                 = 0x74
	DEVLINK_ATTR_HEALTH_REPORTER_ERR_COUNT             = 0x75
	DEVLINK_ATTR_HEALTH_REPORTER_RECOVER_COUNT         = 0x76
	DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS               = 0x77
	DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD       = 0x78
	DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER          = 0x79
	DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME                = 0x7a
	DEVLINK_ATTR_FLASH_UPDATE_COMPONENT                = 0x7b
	DEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG               = 0x7c
	DEVLINK_ATTR_FLASH_UPDATE_STATUS_DONE              = 0x7d
	DEVLINK_ATTR_FLASH_UPDATE_STATUS_TOTAL             = 0x7e
	DEVLINK_ATTR_PORT_PCI_PF_NUMBER                    = 0x7f
	DEVLINK_ATTR_PORT_PCI_VF_NUMBER                    = 0x80
	DEVLINK_ATTR_STATS                                 = 0x81
	DEVLINK_ATTR_TRAP_NAME                             = 0x82
	DEVLINK_ATTR_TRAP_ACTION                           = 0x83
	DEVLINK_ATTR_TRAP_TYPE                             = 0x84
	DEVLINK_ATTR_TRAP_GENERIC                          = 0x85
	DEVLINK_ATTR_TRAP_METADATA                         = 0x86
	DEVLINK_ATTR_TRAP_GROUP_NAME                       = 0x87
	DEVLINK_ATTR_RELOAD_FAILED                         = 0x88
	DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS_NS            = 0x89
	DEVLINK_ATTR_NETNS_FD                              = 0x8a
	DEVLINK_ATTR_NETNS_PID                             = 0x8b
	DEVLINK_ATTR_NETNS_ID                              = 0x8c
	DEVLINK_ATTR_HEALTH_REPORTER_AUTO_DUMP             = 0x8d
	DEVLINK_ATTR_TRAP_POLICER_ID                       = 0x8e
	DEVLINK_ATTR_TRAP_POLICER_RATE                     = 0x8f
	DEVLINK_ATTR_TRAP_POLICER_BURST                    = 0x90
	DEVLINK_ATTR_PORT_FUNCTION                         = 0x91
	DEVLINK_ATTR_INFO_BOARD_SERIAL_NUMBER              = 0x92
	DEVLINK_ATTR_PORT_LANES                            = 0x93
	DEVLINK_ATTR_PORT_SPLITTABLE                       = 0x94
	DEVLINK_ATTR_PORT_EXTERNAL                         = 0x95
	DEVLINK_ATTR_PORT_CONTROLLER_NUMBER                = 0x96
	DEVLINK_ATTR_FLASH_UPDATE_STATUS_TIMEOUT           = 0x97
	DEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK           = 0x98
	DEVLINK_ATTR_RELOAD_ACTION                         = 0x99
	DEVLINK_ATTR_RELOAD_ACTIONS_PERFORMED              = 0x9a
	DEVLINK_ATTR_RELOAD_LIMITS                         = 0x9b
	DEVLINK_ATTR_DEV_STATS                             = 0x9c
	DEVLINK_ATTR_RELOAD_STATS                          = 0x9d
	DEVLINK_ATTR_RELOAD_STATS_ENTRY                    = 0x9e
	DEVLINK_ATTR_RELOAD_STATS_LIMIT                    = 0x9f
	DEVLINK_ATTR_RELOAD_STATS_VALUE                    = 0xa0
	DEVLINK_ATTR_REMOTE_RELOAD_STATS                   = 0xa1
	DEVLINK_ATTR_RELOAD_ACTION_INFO                    = 0xa2
	DEVLINK_ATTR_RELOAD_ACTION_STATS                   = 0xa3
	DEVLINK_ATTR_PORT_PCI_SF_NUMBER                    = 0xa4
	DEVLINK_ATTR_RATE_TYPE                             = 0xa5
	DEVLINK_ATTR_RATE_TX_SHARE                         = 0xa6
	DEVLINK_ATTR_RATE_TX_MAX                           = 0xa7
	DEVLINK_ATTR_RATE_NODE_NAME                        = 0xa8
	DEVLINK_ATTR_RATE_PARENT_NODE_NAME                 = 0xa9
	DEVLINK_ATTR_REGION_MAX_SNAPSHOTS                  = 0xaa
	DEVLINK_ATTR_LINECARD_INDEX                        = 0xab
	DEVLINK_ATTR_LINECARD_STATE                        = 0xac
	DEVLINK_ATTR_LINECARD_TYPE                         = 0xad
	DEVLINK_ATTR_LINECARD_SUPPORTED_TYPES              = 0xae
	DEVLINK_ATTR_NESTED_DEVLINK                        = 0xaf
	DEVLINK_ATTR_SELFTESTS                             = 0xb0
	DEVLINK_ATTR_MAX                                   = 0xb3
	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE              = 0x0
	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX           = 0x1
	DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT               = 0x0
	DEVLINK_DPIPE_ACTION_TYPE_FIELD_MODIFY             = 0x0
	DEVLINK_DPIPE_FIELD_ETHERNET_DST_MAC               = 0x0
	DEVLINK_DPIPE_FIELD_IPV4_DST_IP                    = 0x0
	DEVLINK_DPIPE_FIELD_IPV6_DST_IP                    = 0x0
	DEVLINK_DPIPE_HEADER_ETHERNET                      = 0x0
	DEVLINK_DPIPE_HEADER_IPV4                          = 0x1
	DEVLINK_DPIPE_HEADER_IPV6                          = 0x2
	DEVLINK_RESOURCE_UNIT_ENTRY                        = 0x0
	DEVLINK_PORT_FUNCTION_ATTR_UNSPEC                  = 0x0
	DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR                 = 0x1
	DEVLINK_PORT_FN_ATTR_STATE                         = 0x2
	DEVLINK_PORT_FN_ATTR_OPSTATE                       = 0x3
	DEVLINK_PORT_FN_ATTR_CAPS                          = 0x4
	DEVLINK_PORT_FUNCTION_ATTR_MAX                     = 0x4
)

type FsverityDigest struct {
	Algorithm uint16
	Size      uint16
}

type FsverityEnableArg struct {
	Version        uint32
	Hash_algorithm uint32
	Block_size     uint32
	Salt_size      uint32
	Salt_ptr       uint64
	Sig_size       uint32
	_              uint32
	Sig_ptr        uint64
	_              [11]uint64
}

type Nhmsg struct {
	Family   uint8
	Scope    uint8
	Protocol uint8
	Resvd    uint8
	Flags    uint32
}

type NexthopGrp struct {
	Id     uint32
	Weight uint8
	Resvd1 uint8
	Resvd2 uint16
}

const (
	NHA_UNSPEC     = 0x0
	NHA_ID         = 0x1
	NHA_GROUP      = 0x2
	NHA_GROUP_TYPE = 0x3
	NHA_BLACKHOLE  = 0x4
	NHA_OIF        = 0x5
	NHA_GATEWAY    = 0x6
	NHA_ENCAP_TYPE = 0x7
	NHA_ENCAP      = 0x8
	NHA_GROUPS     = 0x9
	NHA_MASTER     = 0xa
)

const (
	CAN_RAW_FILTER        = 0x1
	CAN_RAW_ERR_FILTER    = 0x2
	CAN_RAW_LOOPBACK      = 0x3
	CAN_RAW_RECV_OWN_MSGS = 0x4
	CAN_RAW_FD_FRAMES     = 0x5
	CAN_RAW_JOIN_FILTERS  = 0x6
)

type WatchdogInfo struct {
	Options  uint32
	Version  uint32
	Identity [32]uint8
}

type PPSFData struct {
	Info    PPSKInfo
	Timeout PPSKTime
}

type PPSKParams struct {
	Api_version   int32
	Mode          int32
	Assert_off_tu PPSKTime
	Clear_off_tu  PPSKTime
}

type PPSKTime struct {
	Sec   int64
	Nsec  int32
	Flags uint32
}

const (
	LWTUNNEL_ENCAP_NONE       = 0x0
	LWTUNNEL_ENCAP_MPLS       = 0x1
	LWTUNNEL_ENCAP_IP         = 0x2
	LWTUNNEL_ENCAP_ILA        = 0x3
	LWTUNNEL_ENCAP_IP6        = 0x4
	LWTUNNEL_ENCAP_SEG6       = 0x5
	LWTUNNEL_ENCAP_BPF        = 0x6
	LWTUNNEL_ENCAP_SEG6_LOCAL = 0x7
	LWTUNNEL_ENCAP_RPL        = 0x8
	LWTUNNEL_ENCAP_IOAM6      = 0x9
	LWTUNNEL_ENCAP_XFRM       = 0xa
	LWTUNNEL_ENCAP_MAX        = 0xa

	MPLS_IPTUNNEL_UNSPEC = 0x0
	MPLS_IPTUNNEL_DST    = 0x1
	MPLS_IPTUNNEL_TTL    = 0x2
	MPLS_IPTUNNEL_MAX    = 0x2
)

const (
	ETHTOOL_ID_UNSPEC                                                       = 0x0
	ETHTOOL_RX_COPYBREAK                                                    = 0x1
	ETHTOOL_TX_COPYBREAK                                                    = 0x2
	ETHTOOL_PFC_PREVENTION_TOUT                                             = 0x3
	ETHTOOL_TUNABLE_UNSPEC                                                  = 0x0
	ETHTOOL_TUNABLE_U8                                                      = 0x1
	ETHTOOL_TUNABLE_U16                                                     = 0x2
	ETHTOOL_TUNABLE_U32                                                     = 0x3
	ETHTOOL_TUNABLE_U64                                                     = 0x4
	ETHTOOL_TUNABLE_STRING                                                  = 0x5
	ETHTOOL_TUNABLE_S8                                                      = 0x6
	ETHTOOL_TUNABLE_S16                                                     = 0x7
	ETHTOOL_TUNABLE_S32                                                     = 0x8
	ETHTOOL_TUNABLE_S64                                                     = 0x9
	ETHTOOL_PHY_ID_UNSPEC                                                   = 0x0
	ETHTOOL_PHY_DOWNSHIFT                                                   = 0x1
	ETHTOOL_PHY_FAST_LINK_DOWN                                              = 0x2
	ETHTOOL_PHY_EDPD                                                        = 0x3
	ETHTOOL_LINK_EXT_STATE_AUTONEG                                          = 0x0
	ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE                            = 0x1
	ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH                            = 0x2
	ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY                             = 0x3
	ETHTOOL_LINK_EXT_STATE_NO_CABLE                                         = 0x4
	ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE                                      = 0x5
	ETHTOOL_LINK_EXT_STATE_EEPROM_ISSUE                                     = 0x6
	ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE                              = 0x7
	ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED                            = 0x8
	ETHTOOL_LINK_EXT_STATE_OVERHEAT                                         = 0x9
	ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED                        = 0x1
	ETHTOOL_LINK_EXT_SUBSTATE_AN_ACK_NOT_RECEIVED                           = 0x2
	ETHTOOL_LINK_EXT_SUBSTATE_AN_NEXT_PAGE_EXCHANGE_FAILED                  = 0x3
	ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED_FORCE_MODE             = 0x4
	ETHTOOL_LINK_EXT_SUBSTATE_AN_FEC_MISMATCH_DURING_OVERRIDE               = 0x5
	ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_HCD                                     = 0x6
	ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_FRAME_LOCK_NOT_ACQUIRED                 = 0x1
	ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_INHIBIT_TIMEOUT                    = 0x2
	ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_PARTNER_DID_NOT_SET_RECEIVER_READY = 0x3
	ETHTOOL_LINK_EXT_SUBSTATE_LT_REMOTE_FAULT                               = 0x4
	ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_BLOCK_LOCK            = 0x1
	ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_AM_LOCK               = 0x2
	ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_GET_ALIGN_STATUS              = 0x3
	ETHTOOL_LINK_EXT_SUBSTATE_LLM_FC_FEC_IS_NOT_LOCKED                      = 0x4
	ETHTOOL_LINK_EXT_SUBSTATE_LLM_RS_FEC_IS_NOT_LOCKED                      = 0x5
	ETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS           = 0x1
	ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE                          = 0x2
	ETHTOOL_LINK_EXT_SUBSTATE_CI_UNSUPPORTED_CABLE                          = 0x1
	ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE                         = 0x2
	ETHTOOL_FLASH_ALL_REGIONS                                               = 0x0
	ETHTOOL_F_UNSUPPORTED__BIT                                              = 0x0
	ETHTOOL_F_WISH__BIT                                                     = 0x1
	ETHTOOL_F_COMPAT__BIT                                                   = 0x2
	ETHTOOL_FEC_NONE_BIT                                                    = 0x0
	ETHTOOL_FEC_AUTO_BIT                                                    = 0x1
	ETHTOOL_FEC_OFF_BIT                                                     = 0x2
	ETHTOOL_FEC_RS_BIT                                                      = 0x3
	ETHTOOL_FEC_BASER_BIT                                                   = 0x4
	ETHTOOL_FEC_LLRS_BIT                                                    = 0x5
	ETHTOOL_LINK_MODE_10baseT_Half_BIT                                      = 0x0
	ETHTOOL_LINK_MODE_10baseT_Full_BIT                                      = 0x1
	ETHTOOL_LINK_MODE_100baseT_Half_BIT                                     = 0x2
	ETHTOOL_LINK_MODE_100baseT_Full_BIT                                     = 0x3
	ETHTOOL_LINK_MODE_1000baseT_Half_BIT                                    = 0x4
	ETHTOOL_LINK_MODE_1000baseT_Full_BIT                                    = 0x5
	ETHTOOL_LINK_MODE_Autoneg_BIT                                           = 0x6
	ETHTOOL_LINK_MODE_TP_BIT                                                = 0x7
	ETHTOOL_LINK_MODE_AUI_BIT                                               = 0x8
	ETHTOOL_LINK_MODE_MII_BIT                                               = 0x9
	ETHTOOL_LINK_MODE_FIBRE_BIT                                             = 0xa
	ETHTOOL_LINK_MODE_BNC_BIT                                               = 0xb
	ETHTOOL_LINK_MODE_10000baseT_Full_BIT                                   = 0xc
	ETHTOOL_LINK_MODE_Pause_BIT                                             = 0xd
	ETHTOOL_LINK_MODE_Asym_Pause_BIT                                        = 0xe
	ETHTOOL_LINK_MODE_2500baseX_Full_BIT                                    = 0xf
	ETHTOOL_LINK_MODE_Backplane_BIT                                         = 0x10
	ETHTOOL_LINK_MODE_1000baseKX_Full_BIT                                   = 0x11
	ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT                                 = 0x12
	ETHTOOL_LINK_MODE_10000baseKR_Full_BIT                                  = 0x13
	ETHTOOL_LINK_MODE_10000baseR_FEC_BIT                                    = 0x14
	ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT                                = 0x15
	ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT                                 = 0x16
	ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT                                 = 0x17
	ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT                                 = 0x18
	ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT                                 = 0x19
	ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT                                 = 0x1a
	ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT                                 = 0x1b
	ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT                                 = 0x1c
	ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT                                 = 0x1d
	ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT                                 = 0x1e
	ETHTOOL_LINK_MODE_25000baseCR_Full_BIT                                  = 0x1f
	ETHTOOL_LINK_MODE_25000baseKR_Full_BIT                                  = 0x20
	ETHTOOL_LINK_MODE_25000baseSR_Full_BIT                                  = 0x21
	ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT                                 = 0x22
	ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT                                 = 0x23
	ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT                                = 0x24
	ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT                                = 0x25
	ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT                                = 0x26
	ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT                            = 0x27
	ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT                                 = 0x28
	ETHTOOL_LINK_MODE_1000baseX_Full_BIT                                    = 0x29
	ETHTOOL_LINK_MODE_10000baseCR_Full_BIT                                  = 0x2a
	ETHTOOL_LINK_MODE_10000baseSR_Full_BIT                                  = 0x2b
	ETHTOOL_LINK_MODE_10000baseLR_Full_BIT                                  = 0x2c
	ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT                                 = 0x2d
	ETHTOOL_LINK_MODE_10000baseER_Full_BIT                                  = 0x2e
	ETHTOOL_LINK_MODE_2500baseT_Full_BIT                                    = 0x2f
	ETHTOOL_LINK_MODE_5000baseT_Full_BIT                                    = 0x30
	ETHTOOL_LINK_MODE_FEC_NONE_BIT                                          = 0x31
	ETHTOOL_LINK_MODE_FEC_RS_BIT                                            = 0x32
	ETHTOOL_LINK_MODE_FEC_BASER_BIT                                         = 0x33
	ETHTOOL_LINK_MODE_50000baseKR_Full_BIT                                  = 0x34
	ETHTOOL_LINK_MODE_50000baseSR_Full_BIT                                  = 0x35
	ETHTOOL_LINK_MODE_50000baseCR_Full_BIT                                  = 0x36
	ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT                            = 0x37
	ETHTOOL_LINK_MODE_50000baseDR_Full_BIT                                  = 0x38
	ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT                                = 0x39
	ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT                                = 0x3a
	ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT                                = 0x3b
	ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT                        = 0x3c
	ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT                                = 0x3d
	ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT                                = 0x3e
	ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT                                = 0x3f
	ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT                        = 0x40
	ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT                                = 0x41
	ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT                                = 0x42
	ETHTOOL_LINK_MODE_100baseT1_Full_BIT                                    = 0x43
	ETHTOOL_LINK_MODE_1000baseT1_Full_BIT                                   = 0x44
	ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT                                = 0x45
	ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT                                = 0x46
	ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT                        = 0x47
	ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT                                = 0x48
	ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT                                = 0x49
	ETHTOOL_LINK_MODE_FEC_LLRS_BIT                                          = 0x4a
	ETHTOOL_LINK_MODE_100000baseKR_Full_BIT                                 = 0x4b
	ETHTOOL_LINK_MODE_100000baseSR_Full_BIT                                 = 0x4c
	ETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT                           = 0x4d
	ETHTOOL_LINK_MODE_100000baseCR_Full_BIT                                 = 0x4e
	ETHTOOL_LINK_MODE_100000baseDR_Full_BIT                                 = 0x4f
	ETHTOOL_LINK_MODE_200000baseKR2_Full_BIT                                = 0x50
	ETHTOOL_LINK_MODE_200000baseSR2_Full_BIT                                = 0x51
	ETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT                        = 0x52
	ETHTOOL_LINK_MODE_200000baseDR2_Full_BIT                                = 0x53
	ETHTOOL_LINK_MODE_200000baseCR2_Full_BIT                                = 0x54
	ETHTOOL_LINK_MODE_400000baseKR4_Full_BIT                                = 0x55
	ETHTOOL_LINK_MODE_400000baseSR4_Full_BIT                                = 0x56
	ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT                        = 0x57
	ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT                                = 0x58
	ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT                                = 0x59
	ETHTOOL_LINK_MODE_100baseFX_Half_BIT                                    = 0x5a
	ETHTOOL_LINK_MODE_100baseFX_Full_BIT                                    = 0x5b

	ETHTOOL_MSG_USER_NONE                     = 0x0
	ETHTOOL_MSG_STRSET_GET                    = 0x1
	ETHTOOL_MSG_LINKINFO_GET                  = 0x2
	ETHTOOL_MSG_LINKINFO_SET                  = 0x3
	ETHTOOL_MSG_LINKMODES_GET                 = 0x4
	ETHTOOL_MSG_LINKMODES_SET                 = 0x5
	ETHTOOL_MSG_LINKSTATE_GET                 = 0x6
	ETHTOOL_MSG_DEBUG_GET                     = 0x7
	ETHTOOL_MSG_DEBUG_SET                     = 0x8
	ETHTOOL_MSG_WOL_GET                       = 0x9
	ETHTOOL_MSG_WOL_SET                       = 0xa
	ETHTOOL_MSG_FEATURES_GET                  = 0xb
	ETHTOOL_MSG_FEATURES_SET                  = 0xc
	ETHTOOL_MSG_PRIVFLAGS_GET                 = 0xd
	ETHTOOL_MSG_PRIVFLAGS_SET                 = 0xe
	ETHTOOL_MSG_RINGS_GET                     = 0xf
	ETHTOOL_MSG_RINGS_SET                     = 0x10
	ETHTOOL_MSG_CHANNELS_GET                  = 0x11
	ETHTOOL_MSG_CHANNELS_SET                  = 0x12
	ETHTOOL_MSG_COALESCE_GET                  = 0x13
	ETHTOOL_MSG_COALESCE_SET                  = 0x14
	ETHTOOL_MSG_PAUSE_GET                     = 0x15
	ETHTOOL_MSG_PAUSE_SET                     = 0x16
	ETHTOOL_MSG_EEE_GET                       = 0x17
	ETHTOOL_MSG_EEE_SET                       = 0x18
	ETHTOOL_MSG_TSINFO_GET                    = 0x19
	ETHTOOL_MSG_CABLE_TEST_ACT                = 0x1a
	ETHTOOL_MSG_CABLE_TEST_TDR_ACT            = 0x1b
	ETHTOOL_MSG_TUNNEL_INFO_GET               = 0x1c
	ETHTOOL_MSG_FEC_GET                       = 0x1d
	ETHTOOL_MSG_FEC_SET                       = 0x1e
	ETHTOOL_MSG_MODULE_EEPROM_GET             = 0x1f
	ETHTOOL_MSG_STATS_GET                     = 0x20
	ETHTOOL_MSG_PHC_VCLOCKS_GET               = 0x21
	ETHTOOL_MSG_MODULE_GET                    = 0x22
	ETHTOOL_MSG_MODULE_SET                    = 0x23
	ETHTOOL_MSG_PSE_GET                       = 0x24
	ETHTOOL_MSG_PSE_SET                       = 0x25
	ETHTOOL_MSG_RSS_GET                       = 0x26
	ETHTOOL_MSG_USER_MAX                      = 0x26
	ETHTOOL_MSG_KERNEL_NONE                   = 0x0
	ETHTOOL_MSG_STRSET_GET_REPLY              = 0x1
	ETHTOOL_MSG_LINKINFO_GET_REPLY            = 0x2
	ETHTOOL_MSG_LINKINFO_NTF                  = 0x3
	ETHTOOL_MSG_LINKMODES_GET_REPLY           = 0x4
	ETHTOOL_MSG_LINKMODES_NTF                 = 0x5
	ETHTOOL_MSG_LINKSTATE_GET_REPLY           = 0x6
	ETHTOOL_MSG_DEBUG_GET_REPLY               = 0x7
	ETHTOOL_MSG_DEBUG_NTF                     = 0x8
	ETHTOOL_MSG_WOL_GET_REPLY                 = 0x9
	ETHTOOL_MSG_WOL_NTF                       = 0xa
	ETHTOOL_MSG_FEATURES_GET_REPLY            = 0xb
	ETHTOOL_MSG_FEATURES_SET_REPLY            = 0xc
	ETHTOOL_MSG_FEATURES_NTF                  = 0xd
	ETHTOOL_MSG_PRIVFLAGS_GET_REPLY           = 0xe
	ETHTOOL_MSG_PRIVFLAGS_NTF                 = 0xf
	ETHTOOL_MSG_RINGS_GET_REPLY               = 0x10
	ETHTOOL_MSG_RINGS_NTF                     = 0x11
	ETHTOOL_MSG_CHANNELS_GET_REPLY            = 0x12
	ETHTOOL_MSG_CHANNELS_NTF                  = 0x13
	ETHTOOL_MSG_COALESCE_GET_REPLY            = 0x14
	ETHTOOL_MSG_COALESCE_NTF                  = 0x15
	ETHTOOL_MSG_PAUSE_GET_REPLY               = 0x16
	ETHTOOL_MSG_PAUSE_NTF                     = 0x17
	ETHTOOL_MSG_EEE_GET_REPLY                 = 0x18
	ETHTOOL_MSG_EEE_NTF                       = 0x19
	ETHTOOL_MSG_TSINFO_GET_REPLY              = 0x1a
	ETHTOOL_MSG_CABLE_TEST_NTF                = 0x1b
	ETHTOOL_MSG_CABLE_TEST_TDR_NTF            = 0x1c
	ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY         = 0x1d
	ETHTOOL_MSG_FEC_GET_REPLY                 = 0x1e
	ETHTOOL_MSG_FEC_NTF                       = 0x1f
	ETHTOOL_MSG_MODULE_EEPROM_GET_REPLY       = 0x20
	ETHTOOL_MSG_STATS_GET_REPLY               = 0x21
	ETHTOOL_MSG_PHC_VCLOCKS_GET_REPLY         = 0x22
	ETHTOOL_MSG_MODULE_GET_REPLY              = 0x23
	ETHTOOL_MSG_MODULE_NTF                    = 0x24
	ETHTOOL_MSG_PSE_GET_REPLY                 = 0x25
	ETHTOOL_MSG_RSS_GET_REPLY                 = 0x26
	ETHTOOL_MSG_KERNEL_MAX                    = 0x26
	ETHTOOL_A_HEADER_UNSPEC                   = 0x0
	ETHTOOL_A_HEADER_DEV_INDEX                = 0x1
	ETHTOOL_A_HEADER_DEV_NAME                 = 0x2
	ETHTOOL_A_HEADER_FLAGS                    = 0x3
	ETHTOOL_A_HEADER_MAX                      = 0x3
	ETHTOOL_A_BITSET_BIT_UNSPEC               = 0x0
	ETHTOOL_A_BITSET_BIT_INDEX                = 0x1
	ETHTOOL_A_BITSET_BIT_NAME                 = 0x2
	ETHTOOL_A_BITSET_BIT_VALUE                = 0x3
	ETHTOOL_A_BITSET_BIT_MAX                  = 0x3
	ETHTOOL_A_BITSET_BITS_UNSPEC              = 0x0
	ETHTOOL_A_BITSET_BITS_BIT                 = 0x1
	ETHTOOL_A_BITSET_BITS_MAX                 = 0x1
	ETHTOOL_A_BITSET_UNSPEC                   = 0x0
	ETHTOOL_A_BITSET_NOMASK                   = 0x1
	ETHTOOL_A_BITSET_SIZE                     = 0x2
	ETHTOOL_A_BITSET_BITS                     = 0x3
	ETHTOOL_A_BITSET_VALUE                    = 0x4
	ETHTOOL_A_BITSET_MASK                     = 0x5
	ETHTOOL_A_BITSET_MAX                      = 0x5
	ETHTOOL_A_STRING_UNSPEC                   = 0x0
	ETHTOOL_A_STRING_INDEX                    = 0x1
	ETHTOOL_A_STRING_VALUE                    = 0x2
	ETHTOOL_A_STRING_MAX                      = 0x2
	ETHTOOL_A_STRINGS_UNSPEC                  = 0x0
	ETHTOOL_A_STRINGS_STRING                  = 0x1
	ETHTOOL_A_STRINGS_MAX                     = 0x1
	ETHTOOL_A_STRINGSET_UNSPEC                = 0x0
	ETHTOOL_A_STRINGSET_ID                    = 0x1
	ETHTOOL_A_STRINGSET_COUNT                 = 0x2
	ETHTOOL_A_STRINGSET_STRINGS               = 0x3
	ETHTOOL_A_STRINGSET_MAX                   = 0x3
	ETHTOOL_A_STRINGSETS_UNSPEC               = 0x0
	ETHTOOL_A_STRINGSETS_STRINGSET            = 0x1
	ETHTOOL_A_STRINGSETS_MAX                  = 0x1
	ETHTOOL_A_STRSET_UNSPEC                   = 0x0
	ETHTOOL_A_STRSET_HEADER                   = 0x1
	ETHTOOL_A_STRSET_STRINGSETS               = 0x2
	ETHTOOL_A_STRSET_COUNTS_ONLY              = 0x3
	ETHTOOL_A_STRSET_MAX                      = 0x3
	ETHTOOL_A_LINKINFO_UNSPEC                 = 0x0
	ETHTOOL_A_LINKINFO_HEADER                 = 0x1
	ETHTOOL_A_LINKINFO_PORT                   = 0x2
	ETHTOOL_A_LINKINFO_PHYADDR                = 0x3
	ETHTOOL_A_LINKINFO_TP_MDIX                = 0x4
	ETHTOOL_A_LINKINFO_TP_MDIX_CTRL           = 0x5
	ETHTOOL_A_LINKINFO_TRANSCEIVER            = 0x6
	ETHTOOL_A_LINKINFO_MAX                    = 0x6
	ETHTOOL_A_LINKMODES_UNSPEC                = 0x0
	ETHTOOL_A_LINKMODES_HEADER                = 0x1
	ETHTOOL_A_LINKMODES_AUTONEG               = 0x2
	ETHTOOL_A_LINKMODES_OURS                  = 0x3
	ETHTOOL_A_LINKMODES_PEER                  = 0x4
	ETHTOOL_A_LINKMODES_SPEED                 = 0x5
	ETHTOOL_A_LINKMODES_DUPLEX                = 0x6
	ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG      = 0x7
	ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE    = 0x8
	ETHTOOL_A_LINKMODES_LANES                 = 0x9
	ETHTOOL_A_LINKMODES_RATE_MATCHING         = 0xa
	ETHTOOL_A_LINKMODES_MAX                   = 0xa
	ETHTOOL_A_LINKSTATE_UNSPEC                = 0x0
	ETHTOOL_A_LINKSTATE_HEADER                = 0x1
	ETHTOOL_A_LINKSTATE_LINK                  = 0x2
	ETHTOOL_A_LINKSTATE_SQI                   = 0x3
	ETHTOOL_A_LINKSTATE_SQI_MAX               = 0x4
	ETHTOOL_A_LINKSTATE_EXT_STATE             = 0x5
	ETHTOOL_A_LINKSTATE_EXT_SUBSTATE          = 0x6
	ETHTOOL_A_LINKSTATE_EXT_DOWN_CNT          = 0x7
	ETHTOOL_A_LINKSTATE_MAX                   = 0x7
	ETHTOOL_A_DEBUG_UNSPEC                    = 0x0
	ETHTOOL_A_DEBUG_HEADER                    = 0x1
	ETHTOOL_A_DEBUG_MSGMASK                   = 0x2
	ETHTOOL_A_DEBUG_MAX                       = 0x2
	ETHTOOL_A_WOL_UNSPEC                      = 0x0
	ETHTOOL_A_WOL_HEADER                      = 0x1
	ETHTOOL_A_WOL_MODES                       = 0x2
	ETHTOOL_A_WOL_SOPASS                      = 0x3
	ETHTOOL_A_WOL_MAX                         = 0x3
	ETHTOOL_A_FEATURES_UNSPEC                 = 0x0
	ETHTOOL_A_FEATURES_HEADER                 = 0x1
	ETHTOOL_A_FEATURES_HW                     = 0x2
	ETHTOOL_A_FEATURES_WANTED                 = 0x3
	ETHTOOL_A_FEATURES_ACTIVE                 = 0x4
	ETHTOOL_A_FEATURES_NOCHANGE               = 0x5
	ETHTOOL_A_FEATURES_MAX                    = 0x5
	ETHTOOL_A_PRIVFLAGS_UNSPEC                = 0x0
	ETHTOOL_A_PRIVFLAGS_HEADER                = 0x1
	ETHTOOL_A_PRIVFLAGS_FLAGS                 = 0x2
	ETHTOOL_A_PRIVFLAGS_MAX                   = 0x2
	ETHTOOL_A_RINGS_UNSPEC                    = 0x0
	ETHTOOL_A_RINGS_HEADER                    = 0x1
	ETHTOOL_A_RINGS_RX_MAX                    = 0x2
	ETHTOOL_A_RINGS_RX_MINI_MAX               = 0x3
	ETHTOOL_A_RINGS_RX_JUMBO_MAX              = 0x4
	ETHTOOL_A_RINGS_TX_MAX                    = 0x5
	ETHTOOL_A_RINGS_RX                        = 0x6
	ETHTOOL_A_RINGS_RX_MINI                   = 0x7
	ETHTOOL_A_RINGS_RX_JUMBO                  = 0x8
	ETHTOOL_A_RINGS_TX                        = 0x9
	ETHTOOL_A_RINGS_RX_BUF_LEN                = 0xa
	ETHTOOL_A_RINGS_TCP_DATA_SPLIT            = 0xb
	ETHTOOL_A_RINGS_CQE_SIZE                  = 0xc
	ETHTOOL_A_RINGS_TX_PUSH                   = 0xd
	ETHTOOL_A_RINGS_MAX                       = 0xd
	ETHTOOL_A_CHANNELS_UNSPEC                 = 0x0
	ETHTOOL_A_CHANNELS_HEADER                 = 0x1
	ETHTOOL_A_CHANNELS_RX_MAX                 = 0x2
	ETHTOOL_A_CHANNELS_TX_MAX                 = 0x3
	ETHTOOL_A_CHANNELS_OTHER_MAX              = 0x4
	ETHTOOL_A_CHANNELS_COMBINED_MAX           = 0x5
	ETHTOOL_A_CHANNELS_RX_COUNT               = 0x6
	ETHTOOL_A_CHANNELS_TX_COUNT               = 0x7
	ETHTOOL_A_CHANNELS_OTHER_COUNT            = 0x8
	ETHTOOL_A_CHANNELS_COMBINED_COUNT         = 0x9
	ETHTOOL_A_CHANNELS_MAX                    = 0x9
	ETHTOOL_A_COALESCE_UNSPEC                 = 0x0
	ETHTOOL_A_COALESCE_HEADER                 = 0x1
	ETHTOOL_A_COALESCE_RX_USECS               = 0x2
	ETHTOOL_A_COALESCE_RX_MAX_FRAMES          = 0x3
	ETHTOOL_A_COALESCE_RX_USECS_IRQ           = 0x4
	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ      = 0x5
	ETHTOOL_A_COALESCE_TX_USECS               = 0x6
	ETHTOOL_A_COALESCE_TX_MAX_FRAMES          = 0x7
	ETHTOOL_A_COALESCE_TX_USECS_IRQ           = 0x8
	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ      = 0x9
	ETHTOOL_A_COALESCE_STATS_BLOCK_USECS      = 0xa
	ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX        = 0xb
	ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX        = 0xc
	ETHTOOL_A_COALESCE_PKT_RATE_LOW           = 0xd
	ETHTOOL_A_COALESCE_RX_USECS_LOW           = 0xe
	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW      = 0xf
	ETHTOOL_A_COALESCE_TX_USECS_LOW           = 0x10
	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW      = 0x11
	ETHTOOL_A_COALESCE_PKT_RATE_HIGH          = 0x12
	ETHTOOL_A_COALESCE_RX_USECS_HIGH          = 0x13
	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH     = 0x14
	ETHTOOL_A_COALESCE_TX_USECS_HIGH          = 0x15
	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH     = 0x16
	ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL   = 0x17
	ETHTOOL_A_COALESCE_USE_CQE_MODE_TX        = 0x18
	ETHTOOL_A_COALESCE_USE_CQE_MODE_RX        = 0x19
	ETHTOOL_A_COALESCE_MAX                    = 0x19
	ETHTOOL_A_PAUSE_UNSPEC                    = 0x0
	ETHTOOL_A_PAUSE_HEADER                    = 0x1
	ETHTOOL_A_PAUSE_AUTONEG                   = 0x2
	ETHTOOL_A_PAUSE_RX                        = 0x3
	ETHTOOL_A_PAUSE_TX                        = 0x4
	ETHTOOL_A_PAUSE_STATS                     = 0x5
	ETHTOOL_A_PAUSE_MAX                       = 0x5
	ETHTOOL_A_PAUSE_STAT_UNSPEC               = 0x0
	ETHTOOL_A_PAUSE_STAT_PAD                  = 0x1
	ETHTOOL_A_PAUSE_STAT_TX_FRAMES            = 0x2
	ETHTOOL_A_PAUSE_STAT_RX_FRAMES            = 0x3
	ETHTOOL_A_PAUSE_STAT_MAX                  = 0x3
	ETHTOOL_A_EEE_UNSPEC                      = 0x0
	ETHTOOL_A_EEE_HEADER                      = 0x1
	ETHTOOL_A_EEE_MODES_OURS                  = 0x2
	ETHTOOL_A_EEE_MODES_PEER                  = 0x3
	ETHTOOL_A_EEE_ACTIVE                      = 0x4
	ETHTOOL_A_EEE_ENABLED                     = 0x5
	ETHTOOL_A_EEE_TX_LPI_ENABLED              = 0x6
	ETHTOOL_A_EEE_TX_LPI_TIMER                = 0x7
	ETHTOOL_A_EEE_MAX                         = 0x7
	ETHTOOL_A_TSINFO_UNSPEC                   = 0x0
	ETHTOOL_A_TSINFO_HEADER                   = 0x1
	ETHTOOL_A_TSINFO_TIMESTAMPING             = 0x2
	ETHTOOL_A_TSINFO_TX_TYPES                 = 0x3
	ETHTOOL_A_TSINFO_RX_FILTERS               = 0x4
	ETHTOOL_A_TSINFO_PHC_INDEX                = 0x5
	ETHTOOL_A_TSINFO_MAX                      = 0x5
	ETHTOOL_A_CABLE_TEST_UNSPEC               = 0x0
	ETHTOOL_A_CABLE_TEST_HEADER               = 0x1
	ETHTOOL_A_CABLE_TEST_MAX                  = 0x1
	ETHTOOL_A_CABLE_RESULT_CODE_UNSPEC        = 0x0
	ETHTOOL_A_CABLE_RESULT_CODE_OK            = 0x1
	ETHTOOL_A_CABLE_RESULT_CODE_OPEN          = 0x2
	ETHTOOL_A_CABLE_RESULT_CODE_SAME_SHORT    = 0x3
	ETHTOOL_A_CABLE_RESULT_CODE_CROSS_SHORT   = 0x4
	ETHTOOL_A_CABLE_PAIR_A                    = 0x0
	ETHTOOL_A_CABLE_PAIR_B                    = 0x1
	ETHTOOL_A_CABLE_PAIR_C                    = 0x2
	ETHTOOL_A_CABLE_PAIR_D                    = 0x3
	ETHTOOL_A_CABLE_RESULT_UNSPEC             = 0x0
	ETHTOOL_A_CABLE_RESULT_PAIR               = 0x1
	ETHTOOL_A_CABLE_RESULT_CODE               = 0x2
	ETHTOOL_A_CABLE_RESULT_MAX                = 0x2
	ETHTOOL_A_CABLE_FAULT_LENGTH_UNSPEC       = 0x0
	ETHTOOL_A_CABLE_FAULT_LENGTH_PAIR         = 0x1
	ETHTOOL_A_CABLE_FAULT_LENGTH_CM           = 0x2
	ETHTOOL_A_CABLE_FAULT_LENGTH_MAX          = 0x2
	ETHTOOL_A_CABLE_TEST_NTF_STATUS_UNSPEC    = 0x0
	ETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED   = 0x1
	ETHTOOL_A_CABLE_TEST_NTF_STATUS_COMPLETED = 0x2
	ETHTOOL_A_CABLE_NEST_UNSPEC               = 0x0
	ETHTOOL_A_CABLE_NEST_RESULT               = 0x1
	ETHTOOL_A_CABLE_NEST_FAULT_LENGTH         = 0x2
	ETHTOOL_A_CABLE_NEST_MAX                  = 0x2
	ETHTOOL_A_CABLE_TEST_NTF_UNSPEC           = 0x0
	ETHTOOL_A_CABLE_TEST_NTF_HEADER           = 0x1
	ETHTOOL_A_CABLE_TEST_NTF_STATUS           = 0x2
	ETHTOOL_A_CABLE_TEST_NTF_NEST             = 0x3
	ETHTOOL_A_CABLE_TEST_NTF_MAX              = 0x3
	ETHTOOL_A_CABLE_TEST_TDR_CFG_UNSPEC       = 0x0
	ETHTOOL_A_CABLE_TEST_TDR_CFG_FIRST        = 0x1
	ETHTOOL_A_CABLE_TEST_TDR_CFG_LAST         = 0x2
	ETHTOOL_A_CABLE_TEST_TDR_CFG_STEP         = 0x3
	ETHTOOL_A_CABLE_TEST_TDR_CFG_PAIR         = 0x4
	ETHTOOL_A_CABLE_TEST_TDR_CFG_MAX          = 0x4
	ETHTOOL_A_CABLE_TEST_TDR_UNSPEC           = 0x0
	ETHTOOL_A_CABLE_TEST_TDR_HEADER           = 0x1
	ETHTOOL_A_CABLE_TEST_TDR_CFG              = 0x2
	ETHTOOL_A_CABLE_TEST_TDR_MAX              = 0x2
	ETHTOOL_A_CABLE_AMPLITUDE_UNSPEC          = 0x0
	ETHTOOL_A_CABLE_AMPLITUDE_PAIR            = 0x1
	ETHTOOL_A_CABLE_AMPLITUDE_mV              = 0x2
	ETHTOOL_A_CABLE_AMPLITUDE_MAX             = 0x2
	ETHTOOL_A_CABLE_PULSE_UNSPEC              = 0x0
	ETHTOOL_A_CABLE_PULSE_mV                  = 0x1
	ETHTOOL_A_CABLE_PULSE_MAX                 = 0x1
	ETHTOOL_A_CABLE_STEP_UNSPEC               = 0x0
	ETHTOOL_A_CABLE_STEP_FIRST_DISTANCE       = 0x1
	ETHTOOL_A_CABLE_STEP_LAST_DISTANCE        = 0x2
	ETHTOOL_A_CABLE_STEP_STEP_DISTANCE        = 0x3
	ETHTOOL_A_CABLE_STEP_MAX                  = 0x3
	ETHTOOL_A_CABLE_TDR_NEST_UNSPEC           = 0x0
	ETHTOOL_A_CABLE_TDR_NEST_STEP             = 0x1
	ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE        = 0x2
	ETHTOOL_A_CABLE_TDR_NEST_PULSE            = 0x3
	ETHTOOL_A_CABLE_TDR_NEST_MAX              = 0x3
	ETHTOOL_A_CABLE_TEST_TDR_NTF_UNSPEC       = 0x0
	ETHTOOL_A_CABLE_TEST_TDR_NTF_HEADER       = 0x1
	ETHTOOL_A_CABLE_TEST_TDR_NTF_STATUS       = 0x2
	ETHTOOL_A_CABLE_TEST_TDR_NTF_NEST         = 0x3
	ETHTOOL_A_CABLE_TEST_TDR_NTF_MAX          = 0x3
	ETHTOOL_UDP_TUNNEL_TYPE_VXLAN             = 0x0
	ETHTOOL_UDP_TUNNEL_TYPE_GENEVE            = 0x1
	ETHTOOL_UDP_TUNNEL_TYPE_VXLAN_GPE         = 0x2
	ETHTOOL_A_TUNNEL_UDP_ENTRY_UNSPEC         = 0x0
	ETHTOOL_A_TUNNEL_UDP_ENTRY_PORT           = 0x1
	ETHTOOL_A_TUNNEL_UDP_ENTRY_TYPE           = 0x2
	ETHTOOL_A_TUNNEL_UDP_ENTRY_MAX            = 0x2
	ETHTOOL_A_TUNNEL_UDP_TABLE_UNSPEC         = 0x0
	ETHTOOL_A_TUNNEL_UDP_TABLE_SIZE           = 0x1
	ETHTOOL_A_TUNNEL_UDP_TABLE_TYPES          = 0x2
	ETHTOOL_A_TUNNEL_UDP_TABLE_ENTRY          = 0x3
	ETHTOOL_A_TUNNEL_UDP_TABLE_MAX            = 0x3
	ETHTOOL_A_TUNNEL_UDP_UNSPEC               = 0x0
	ETHTOOL_A_TUNNEL_UDP_TABLE                = 0x1
	ETHTOOL_A_TUNNEL_UDP_MAX                  = 0x1
	ETHTOOL_A_TUNNEL_INFO_UNSPEC              = 0x0
	ETHTOOL_A_TUNNEL_INFO_HEADER              = 0x1
	ETHTOOL_A_TUNNEL_INFO_UDP_PORTS           = 0x2
	ETHTOOL_A_TUNNEL_INFO_MAX                 = 0x2
)

const SPEED_UNKNOWN = -0x1

type EthtoolDrvinfo struct {
	Cmd          uint32
	Driver       [32]byte
	Version      [32]byte
	Fw_version   [32]byte
	Bus_info     [32]byte
	Erom_version [32]byte
	Reserved2    [12]byte
	N_priv_flags uint32
	N_stats      uint32
	Testinfo_len uint32
	Eedump_len   uint32
	Regdump_len  uint32
}

type (
	HIDRawReportDescriptor struct {
		Size  uint32
		Value [4096]uint8
	}
	HIDRawDevInfo struct {
		Bustype uint32
		Vendor  int16
		Product int16
	}
)

const (
	CLOSE_RANGE_UNSHARE = 0x2
	CLOSE_RANGE_CLOEXEC = 0x4
)

const (
	NLMSGERR_ATTR_MSG    = 0x1
	NLMSGERR_ATTR_OFFS   = 0x2
	NLMSGERR_ATTR_COOKIE = 0x3
)

type (
	EraseInfo struct {
		Start  uint32
		Length uint32
	}
	EraseInfo64 struct {
		Start  uint64
		Length uint64
	}
	MtdOobBuf struct {
		Start  uint32
		Length uint32
		Ptr    *uint8
	}
	MtdOobBuf64 struct {
		Start  uint64
		Pad    uint32
		Length uint32
		Ptr    uint64
	}
	MtdWriteReq struct {
		Start  uint64
		Len    uint64
		Ooblen uint64
		Data   uint64
		Oob    uint64
		Mode   uint8
		_      [7]uint8
	}
	MtdInfo struct {
		Type      uint8
		Flags     uint32
		Size      uint32
		Erasesize uint32
		Writesize uint32
		Oobsize   uint32
		_         uint64
	}
	RegionInfo struct {
		Offset      uint32
		Erasesize   uint32
		Numblocks   uint32
		Regionindex uint32
	}
	OtpInfo struct {
		Start  uint32
		Length uint32
		Locked uint32
	}
	NandOobinfo struct {
		Useecc   uint32
		Eccbytes uint32
		Oobfree  [8][2]uint32
		Eccpos   [32]uint32
	}
	NandOobfree struct {
		Offset uint32
		Length uint32
	}
	NandEcclayout struct {
		Eccbytes uint32
		Eccpos   [64]uint32
		Oobavail uint32
		Oobfree  [8]NandOobfree
	}
	MtdEccStats struct {
		Corrected uint32
		Failed    uint32
		Badblocks uint32
		Bbtblocks uint32
	}
)

const (
	MTD_OPS_PLACE_OOB = 0x0
	MTD_OPS_AUTO_OOB  = 0x1
	MTD_OPS_RAW       = 0x2
)

const (
	MTD_FILE_MODE_NORMAL      = 0x0
	MTD_FILE_MODE_OTP_FACTORY = 0x1
	MTD_FILE_MODE_OTP_USER    = 0x2
	MTD_FILE_MODE_RAW         = 0x3
)

const (
	NFC_CMD_UNSPEC                    = 0x0
	NFC_CMD_GET_DEVICE                = 0x1
	NFC_CMD_DEV_UP                    = 0x2
	NFC_CMD_DEV_DOWN                  = 0x3
	NFC_CMD_DEP_LINK_UP               = 0x4
	NFC_CMD_DEP_LINK_DOWN             = 0x5
	NFC_CMD_START_POLL                = 0x6
	NFC_CMD_STOP_POLL                 = 0x7
	NFC_CMD_GET_TARGET                = 0x8
	NFC_EVENT_TARGETS_FOUND           = 0x9
	NFC_EVENT_DEVICE_ADDED            = 0xa
	NFC_EVENT_DEVICE_REMOVED          = 0xb
	NFC_EVENT_TARGET_LOST             = 0xc
	NFC_EVENT_TM_ACTIVATED            = 0xd
	NFC_EVENT_TM_DEACTIVATED          = 0xe
	NFC_CMD_LLC_GET_PARAMS            = 0xf
	NFC_CMD_LLC_SET_PARAMS            = 0x10
	NFC_CMD_ENABLE_SE                 = 0x11
	NFC_CMD_DISABLE_SE                = 0x12
	NFC_CMD_LLC_SDREQ                 = 0x13
	NFC_EVENT_LLC_SDRES               = 0x14
	NFC_CMD_FW_DOWNLOAD               = 0x15
	NFC_EVENT_SE_ADDED                = 0x16
	NFC_EVENT_SE_REMOVED              = 0x17
	NFC_EVENT_SE_CONNECTIVITY         = 0x18
	NFC_EVENT_SE_TRANSACTION          = 0x19
	NFC_CMD_GET_SE                    = 0x1a
	NFC_CMD_SE_IO                     = 0x1b
	NFC_CMD_ACTIVATE_TARGET           = 0x1c
	NFC_CMD_VENDOR                    = 0x1d
	NFC_CMD_DEACTIVATE_TARGET         = 0x1e
	NFC_ATTR_UNSPEC                   = 0x0
	NFC_ATTR_DEVICE_INDEX             = 0x1
	NFC_ATTR_DEVICE_NAME              = 0x2
	NFC_ATTR_PROTOCOLS                = 0x3
	NFC_ATTR_TARGET_INDEX             = 0x4
	NFC_ATTR_TARGET_SENS_RES          = 0x5
	NFC_ATTR_TARGET_SEL_RES           = 0x6
	NFC_ATTR_TARGET_NFCID1            = 0x7
	NFC_ATTR_TARGET_SENSB_RES         = 0x8
	NFC_ATTR_TARGET_SENSF_RES         = 0x9
	NFC_ATTR_COMM_MODE                = 0xa
	NFC_ATTR_RF_MODE                  = 0xb
	NFC_ATTR_DEVICE_POWERED           = 0xc
	NFC_ATTR_IM_PROTOCOLS             = 0xd
	NFC_ATTR_TM_PROTOCOLS             = 0xe
	NFC_ATTR_LLC_PARAM_LTO            = 0xf
	NFC_ATTR_LLC_PARAM_RW             = 0x10
	NFC_ATTR_LLC_PARAM_MIUX           = 0x11
	NFC_ATTR_SE                       = 0x12
	NFC_ATTR_LLC_SDP                  = 0x13
	NFC_ATTR_FIRMWARE_NAME            = 0x14
	NFC_ATTR_SE_INDEX                 = 0x15
	NFC_ATTR_SE_TYPE                  = 0x16
	NFC_ATTR_SE_AID                   = 0x17
	NFC_ATTR_FIRMWARE_DOWNLOAD_STATUS = 0x18
	NFC_ATTR_SE_APDU                  = 0x19
	NFC_ATTR_TARGET_ISO15693_DSFID    = 0x1a
	NFC_ATTR_TARGET_ISO15693_UID      = 0x1b
	NFC_ATTR_SE_PARAMS                = 0x1c
	NFC_ATTR_VENDOR_ID                = 0x1d
	NFC_ATTR_VENDOR_SUBCMD            = 0x1e
	NFC_ATTR_VENDOR_DATA              = 0x1f
	NFC_SDP_ATTR_UNSPEC               = 0x0
	NFC_SDP_ATTR_URI                  = 0x1
	NFC_SDP_ATTR_SAP                  = 0x2
)

type LandlockRulesetAttr struct {
	Access_fs uint64
}

type LandlockPathBeneathAttr struct {
	Allowed_access uint64
	Parent_fd      int32
}

const (
	LANDLOCK_RULE_PATH_BENEATH = 0x1
)

const (
	IPC_CREAT   = 0x200
	IPC_EXCL    = 0x400
	IPC_NOWAIT  = 0x800
	IPC_PRIVATE = 0x0

	ipc_64 = 0x100
)

const (
	IPC_RMID = 0x0
	IPC_SET  = 0x1
	IPC_STAT = 0x2
)

const (
	SHM_RDONLY = 0x1000
	SHM_RND    = 0x2000
)

type MountAttr struct {
	Attr_set    uint64
	Attr_clr    uint64
	Propagation uint64
	Userns_fd   uint64
}

const (
	WG_CMD_GET_DEVICE                      = 0x0
	WG_CMD_SET_DEVICE                      = 0x1
	WGDEVICE_F_REPLACE_PEERS               = 0x1
	WGDEVICE_A_UNSPEC                      = 0x0
	WGDEVICE_A_IFINDEX                     = 0x1
	WGDEVICE_A_IFNAME                      = 0x2
	WGDEVICE_A_PRIVATE_KEY                 = 0x3
	WGDEVICE_A_PUBLIC_KEY                  = 0x4
	WGDEVICE_A_FLAGS                       = 0x5
	WGDEVICE_A_LISTEN_PORT                 = 0x6
	WGDEVICE_A_FWMARK                      = 0x7
	WGDEVICE_A_PEERS                       = 0x8
	WGPEER_F_REMOVE_ME                     = 0x1
	WGPEER_F_REPLACE_ALLOWEDIPS            = 0x2
	WGPEER_F_UPDATE_ONLY                   = 0x4
	WGPEER_A_UNSPEC                        = 0x0
	WGPEER_A_PUBLIC_KEY                    = 0x1
	WGPEER_A_PRESHARED_KEY                 = 0x2
	WGPEER_A_FLAGS                         = 0x3
	WGPEER_A_ENDPOINT                      = 0x4
	WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL = 0x5
	WGPEER_A_LAST_HANDSHAKE_TIME           = 0x6
	WGPEER_A_RX_BYTES                      = 0x7
	WGPEER_A_TX_BYTES                      = 0x8
	WGPEER_A_ALLOWEDIPS                    = 0x9
	WGPEER_A_PROTOCOL_VERSION              = 0xa
	WGALLOWEDIP_A_UNSPEC                   = 0x0
	WGALLOWEDIP_A_FAMILY                   = 0x1
	WGALLOWEDIP_A_IPADDR                   = 0x2
	WGALLOWEDIP_A_CIDR_MASK                = 0x3
)

const (
	NL_ATTR_TYPE_INVALID      = 0x0
	NL_ATTR_TYPE_FLAG         = 0x1
	NL_ATTR_TYPE_U8           = 0x2
	NL_ATTR_TYPE_U16          = 0x3
	NL_ATTR_TYPE_U32          = 0x4
	NL_ATTR_TYPE_U64          = 0x5
	NL_ATTR_TYPE_S8           = 0x6
	NL_ATTR_TYPE_S16          = 0x7
	NL_ATTR_TYPE_S32          = 0x8
	NL_ATTR_TYPE_S64          = 0x9
	NL_ATTR_TYPE_BINARY       = 0xa
	NL_ATTR_TYPE_STRING       = 0xb
	NL_ATTR_TYPE_NUL_STRING   = 0xc
	NL_ATTR_TYPE_NESTED       = 0xd
	NL_ATTR_TYPE_NESTED_ARRAY = 0xe
	NL_ATTR_TYPE_BITFIELD32   = 0xf

	NL_POLICY_TYPE_ATTR_UNSPEC          = 0x0
	NL_POLICY_TYPE_ATTR_TYPE            = 0x1
	NL_POLICY_TYPE_ATTR_MIN_VALUE_S     = 0x2
	NL_POLICY_TYPE_ATTR_MAX_VALUE_S     = 0x3
	NL_POLICY_TYPE_ATTR_MIN_VALUE_U     = 0x4
	NL_POLICY_TYPE_ATTR_MAX_VALUE_U     = 0x5
	NL_POLICY_TYPE_ATTR_MIN_LENGTH      = 0x6
	NL_POLICY_TYPE_ATTR_MAX_LENGTH      = 0x7
	NL_POLICY_TYPE_ATTR_POLICY_IDX      = 0x8
	NL_POLICY_TYPE_ATTR_POLICY_MAXTYPE  = 0x9
	NL_POLICY_TYPE_ATTR_BITFIELD32_MASK = 0xa
	NL_POLICY_TYPE_ATTR_PAD             = 0xb
	NL_POLICY_TYPE_ATTR_MASK            = 0xc
	NL_POLICY_TYPE_ATTR_MAX             = 0xc
)

type CANBitTiming struct {
	Bitrate      uint32
	Sample_point uint32
	Tq           uint32
	Prop_seg     uint32
	Phase_seg1   uint32
	Phase_seg2   uint32
	Sjw          uint32
	Brp          uint32
}

type CANBitTimingConst struct {
	Name      [16]uint8
	Tseg1_min uint32
	Tseg1_max uint32
	Tseg2_min uint32
	Tseg2_max uint32
	Sjw_max   uint32
	Brp_min   uint32
	Brp_max   uint32
	Brp_inc   uint32
}

type CANClock struct {
	Freq uint32
}

type CANBusErrorCounters struct {
	Txerr uint16
	Rxerr uint16
}

type CANCtrlMode struct {
	Mask  uint32
	Flags uint32
}

type CANDeviceStats struct {
	Bus_error        uint32
	Error_warning    uint32
	Error_passive    uint32
	Bus_off          uint32
	Arbitration_lost uint32
	Restarts         uint32
}

const (
	CAN_STATE_ERROR_ACTIVE  = 0x0
	CAN_STATE_ERROR_WARNING = 0x1
	CAN_STATE_ERROR_PASSIVE = 0x2
	CAN_STATE_BUS_OFF       = 0x3
	CAN_STATE_STOPPED       = 0x4
	CAN_STATE_SLEEPING      = 0x5
	CAN_STATE_MAX           = 0x6
)

const (
	IFLA_CAN_UNSPEC               = 0x0
	IFLA_CAN_BITTIMING            = 0x1
	IFLA_CAN_BITTIMING_CONST      = 0x2
	IFLA_CAN_CLOCK                = 0x3
	IFLA_CAN_STATE                = 0x4
	IFLA_CAN_CTRLMODE             = 0x5
	IFLA_CAN_RESTART_MS           = 0x6
	IFLA_CAN_RESTART              = 0x7
	IFLA_CAN_BERR_COUNTER         = 0x8
	IFLA_CAN_DATA_BITTIMING       = 0x9
	IFLA_CAN_DATA_BITTIMING_CONST = 0xa
	IFLA_CAN_TERMINATION          = 0xb
	IFLA_CAN_TERMINATION_CONST    = 0xc
	IFLA_CAN_BITRATE_CONST        = 0xd
	IFLA_CAN_DATA_BITRATE_CONST   = 0xe
	IFLA_CAN_BITRATE_MAX          = 0xf
)

type KCMAttach struct {
	Fd     int32
	Bpf_fd int32
}

type KCMUnattach struct {
	Fd int32
}

type KCMClone struct {
	Fd int32
}

const (
	NL80211_AC_BE                                           = 0x2
	NL80211_AC_BK                                           = 0x3
	NL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED                 = 0x0
	NL80211_ACL_POLICY_DENY_UNLESS_LISTED                   = 0x1
	NL80211_AC_VI                                           = 0x1
	NL80211_AC_VO                                           = 0x0
	NL80211_AP_SETTINGS_EXTERNAL_AUTH_SUPPORT               = 0x1
	NL80211_AP_SETTINGS_SA_QUERY_OFFLOAD_SUPPORT            = 0x2
	NL80211_AP_SME_SA_QUERY_OFFLOAD                         = 0x1
	NL80211_ATTR_4ADDR                                      = 0x53
	NL80211_ATTR_ACK                                        = 0x5c
	NL80211_ATTR_ACK_SIGNAL                                 = 0x107
	NL80211_ATTR_ACL_POLICY                                 = 0xa5
	NL80211_ATTR_ADMITTED_TIME                              = 0xd4
	NL80211_ATTR_AIRTIME_WEIGHT                             = 0x112
	NL80211_ATTR_AKM_SUITES                                 = 0x4c
	NL80211_ATTR_AP_ISOLATE                                 = 0x60
	NL80211_ATTR_AP_SETTINGS_FLAGS                          = 0x135
	NL80211_ATTR_AUTH_DATA                                  = 0x9c
	NL80211_ATTR_AUTH_TYPE                                  = 0x35
	NL80211_ATTR_BANDS                                      = 0xef
	NL80211_ATTR_BEACON_HEAD                                = 0xe
	NL80211_ATTR_BEACON_INTERVAL                            = 0xc
	NL80211_ATTR_BEACON_TAIL                                = 0xf
	NL80211_ATTR_BG_SCAN_PERIOD                             = 0x98
	NL80211_ATTR_BSS_BASIC_RATES                            = 0x24
	NL80211_ATTR_BSS                                        = 0x2f
	NL80211_ATTR_BSS_CTS_PROT                               = 0x1c
	NL80211_ATTR_BSS_HT_OPMODE                              = 0x6d
	NL80211_ATTR_BSSID                                      = 0xf5
	NL80211_ATTR_BSS_SELECT                                 = 0xe3
	NL80211_ATTR_BSS_SHORT_PREAMBLE                         = 0x1d
	NL80211_ATTR_BSS_SHORT_SLOT_TIME                        = 0x1e
	NL80211_ATTR_CENTER_FREQ1                               = 0xa0
	NL80211_ATTR_CENTER_FREQ1_OFFSET                        = 0x123
	NL80211_ATTR_CENTER_FREQ2                               = 0xa1
	NL80211_ATTR_CHANNEL_WIDTH                              = 0x9f
	NL80211_ATTR_CH_SWITCH_BLOCK_TX                         = 0xb8
	NL80211_ATTR_CH_SWITCH_COUNT                            = 0xb7
	NL80211_ATTR_CIPHER_SUITE_GROUP                         = 0x4a
	NL80211_ATTR_CIPHER_SUITES                              = 0x39
	NL80211_ATTR_CIPHER_SUITES_PAIRWISE                     = 0x49
	NL80211_ATTR_CNTDWN_OFFS_BEACON                         = 0xba
	NL80211_ATTR_CNTDWN_OFFS_PRESP                          = 0xbb
	NL80211_ATTR_COALESCE_RULE                              = 0xb6
	NL80211_ATTR_COALESCE_RULE_CONDITION                    = 0x2
	NL80211_ATTR_COALESCE_RULE_DELAY                        = 0x1
	NL80211_ATTR_COALESCE_RULE_MAX                          = 0x3
	NL80211_ATTR_COALESCE_RULE_PKT_PATTERN                  = 0x3
	NL80211_ATTR_COLOR_CHANGE_COLOR                         = 0x130
	NL80211_ATTR_COLOR_CHANGE_COUNT                         = 0x12f
	NL80211_ATTR_COLOR_CHANGE_ELEMS                         = 0x131
	NL80211_ATTR_CONN_FAILED_REASON                         = 0x9b
	NL80211_ATTR_CONTROL_PORT                               = 0x44
	NL80211_ATTR_CONTROL_PORT_ETHERTYPE                     = 0x66
	NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT                    = 0x67
	NL80211_ATTR_CONTROL_PORT_NO_PREAUTH                    = 0x11e
	NL80211_ATTR_CONTROL_PORT_OVER_NL80211                  = 0x108
	NL80211_ATTR_COOKIE                                     = 0x58
	NL80211_ATTR_CQM_BEACON_LOSS_EVENT                      = 0x8
	NL80211_ATTR_CQM                                        = 0x5e
	NL80211_ATTR_CQM_MAX                                    = 0x9
	NL80211_ATTR_CQM_PKT_LOSS_EVENT                         = 0x4
	NL80211_ATTR_CQM_RSSI_HYST                              = 0x2
	NL80211_ATTR_CQM_RSSI_LEVEL                             = 0x9
	NL80211_ATTR_CQM_RSSI_THOLD                             = 0x1
	NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT                   = 0x3
	NL80211_ATTR_CQM_TXE_INTVL                              = 0x7
	NL80211_ATTR_CQM_TXE_PKTS                               = 0x6
	NL80211_ATTR_CQM_TXE_RATE                               = 0x5
	NL80211_ATTR_CRIT_PROT_ID                               = 0xb3
	NL80211_ATTR_CSA_C_OFF_BEACON                           = 0xba
	NL80211_ATTR_CSA_C_OFF_PRESP                            = 0xbb
	NL80211_ATTR_CSA_C_OFFSETS_TX                           = 0xcd
	NL80211_ATTR_CSA_IES                                    = 0xb9
	NL80211_ATTR_DEVICE_AP_SME                              = 0x8d
	NL80211_ATTR_DFS_CAC_TIME                               = 0x7
	NL80211_ATTR_DFS_REGION                                 = 0x92
	NL80211_ATTR_DISABLE_EHT                                = 0x137
	NL80211_ATTR_DISABLE_HE                                 = 0x12d
	NL80211_ATTR_DISABLE_HT                                 = 0x93
	NL80211_ATTR_DISABLE_VHT                                = 0xaf
	NL80211_ATTR_DISCONNECTED_BY_AP                         = 0x47
	NL80211_ATTR_DONT_WAIT_FOR_ACK                          = 0x8e
	NL80211_ATTR_DTIM_PERIOD                                = 0xd
	NL80211_ATTR_DURATION                                   = 0x57
	NL80211_ATTR_EHT_CAPABILITY                             = 0x136
	NL80211_ATTR_EML_CAPABILITY                             = 0x13d
	NL80211_ATTR_EXT_CAPA                                   = 0xa9
	NL80211_ATTR_EXT_CAPA_MASK                              = 0xaa
	NL80211_ATTR_EXTERNAL_AUTH_ACTION                       = 0x104
	NL80211_ATTR_EXTERNAL_AUTH_SUPPORT                      = 0x105
	NL80211_ATTR_EXT_FEATURES                               = 0xd9
	NL80211_ATTR_FEATURE_FLAGS                              = 0x8f
	NL80211_ATTR_FILS_CACHE_ID                              = 0xfd
	NL80211_ATTR_FILS_DISCOVERY                             = 0x126
	NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM                      = 0xfb
	NL80211_ATTR_FILS_ERP_REALM                             = 0xfa
	NL80211_ATTR_FILS_ERP_RRK                               = 0xfc
	NL80211_ATTR_FILS_ERP_USERNAME                          = 0xf9
	NL80211_ATTR_FILS_KEK                                   = 0xf2
	NL80211_ATTR_FILS_NONCES                                = 0xf3
	NL80211_ATTR_FRAME                                      = 0x33
	NL80211_ATTR_FRAME_MATCH                                = 0x5b
	NL80211_ATTR_FRAME_TYPE                                 = 0x65
	NL80211_ATTR_FREQ_AFTER                                 = 0x3b
	NL80211_ATTR_FREQ_BEFORE                                = 0x3a
	NL80211_ATTR_FREQ_FIXED                                 = 0x3c
	NL80211_ATTR_FREQ_RANGE_END                             = 0x3
	NL80211_ATTR_FREQ_RANGE_MAX_BW                          = 0x4
	NL80211_ATTR_FREQ_RANGE_START                           = 0x2
	NL80211_ATTR_FTM_RESPONDER                              = 0x10e
	NL80211_ATTR_FTM_RESPONDER_STATS                        = 0x10f
	NL80211_ATTR_GENERATION                                 = 0x2e
	NL80211_ATTR_HANDLE_DFS                                 = 0xbf
	NL80211_ATTR_HE_6GHZ_CAPABILITY                         = 0x125
	NL80211_ATTR_HE_BSS_COLOR                               = 0x11b
	NL80211_ATTR_HE_CAPABILITY                              = 0x10d
	NL80211_ATTR_HE_OBSS_PD                                 = 0x117
	NL80211_ATTR_HIDDEN_SSID                                = 0x7e
	NL80211_ATTR_HT_CAPABILITY                              = 0x1f
	NL80211_ATTR_HT_CAPABILITY_MASK                         = 0x94
	NL80211_ATTR_IE_ASSOC_RESP                              = 0x80
	NL80211_ATTR_IE                                         = 0x2a
	NL80211_ATTR_IE_PROBE_RESP                              = 0x7f
	NL80211_ATTR_IE_RIC                                     = 0xb2
	NL80211_ATTR_IFACE_SOCKET_OWNER                         = 0xcc
	NL80211_ATTR_IFINDEX                                    = 0x3
	NL80211_ATTR_IFNAME                                     = 0x4
	NL80211_ATTR_IFTYPE_AKM_SUITES                          = 0x11c
	NL80211_ATTR_IFTYPE                                     = 0x5
	NL80211_ATTR_IFTYPE_EXT_CAPA                            = 0xe6
	NL80211_ATTR_INACTIVITY_TIMEOUT                         = 0x96
	NL80211_ATTR_INTERFACE_COMBINATIONS                     = 0x78
	NL80211_ATTR_KEY_CIPHER                                 = 0x9
	NL80211_ATTR_KEY                                        = 0x50
	NL80211_ATTR_KEY_DATA                                   = 0x7
	NL80211_ATTR_KEY_DEFAULT                                = 0xb
	NL80211_ATTR_KEY_DEFAULT_MGMT                           = 0x28
	NL80211_ATTR_KEY_DEFAULT_TYPES                          = 0x6e
	NL80211_ATTR_KEY_IDX                                    = 0x8
	NL80211_ATTR_KEYS                                       = 0x51
	NL80211_ATTR_KEY_SEQ                                    = 0xa
	NL80211_ATTR_KEY_TYPE                                   = 0x37
	NL80211_ATTR_LOCAL_MESH_POWER_MODE                      = 0xa4
	NL80211_ATTR_LOCAL_STATE_CHANGE                         = 0x5f
	NL80211_ATTR_MAC_ACL_MAX                                = 0xa7
	NL80211_ATTR_MAC_ADDRS                                  = 0xa6
	NL80211_ATTR_MAC                                        = 0x6
	NL80211_ATTR_MAC_HINT                                   = 0xc8
	NL80211_ATTR_MAC_MASK                                   = 0xd7
	NL80211_ATTR_MAX_AP_ASSOC_STA                           = 0xca
	NL80211_ATTR_MAX                                        = 0x141
	NL80211_ATTR_MAX_CRIT_PROT_DURATION                     = 0xb4
	NL80211_ATTR_MAX_CSA_COUNTERS                           = 0xce
	NL80211_ATTR_MAX_MATCH_SETS                             = 0x85
	NL80211_ATTR_MAX_NUM_AKM_SUITES                         = 0x13c
	NL80211_ATTR_MAX_NUM_PMKIDS                             = 0x56
	NL80211_ATTR_MAX_NUM_SCAN_SSIDS                         = 0x2b
	NL80211_ATTR_MAX_NUM_SCHED_SCAN_PLANS                   = 0xde
	NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS                   = 0x7b
	NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION             = 0x6f
	NL80211_ATTR_MAX_SCAN_IE_LEN                            = 0x38
	NL80211_ATTR_MAX_SCAN_PLAN_INTERVAL                     = 0xdf
	NL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS                   = 0xe0
	NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN                      = 0x7c
	NL80211_ATTR_MBSSID_CONFIG                              = 0x132
	NL80211_ATTR_MBSSID_ELEMS                               = 0x133
	NL80211_ATTR_MCAST_RATE                                 = 0x6b
	NL80211_ATTR_MDID                                       = 0xb1
	NL80211_ATTR_MEASUREMENT_DURATION                       = 0xeb
	NL80211_ATTR_MEASUREMENT_DURATION_MANDATORY             = 0xec
	NL80211_ATTR_MESH_CONFIG                                = 0x23
	NL80211_ATTR_MESH_ID                                    = 0x18
	NL80211_ATTR_MESH_PEER_AID                              = 0xed
	NL80211_ATTR_MESH_SETUP                                 = 0x70
	NL80211_ATTR_MGMT_SUBTYPE                               = 0x29
	NL80211_ATTR_MLD_ADDR                                   = 0x13a
	NL80211_ATTR_MLD_CAPA_AND_OPS                           = 0x13e
	NL80211_ATTR_MLO_LINK_ID                                = 0x139
	NL80211_ATTR_MLO_LINKS                                  = 0x138
	NL80211_ATTR_MLO_SUPPORT                                = 0x13b
	NL80211_ATTR_MNTR_FLAGS                                 = 0x17
	NL80211_ATTR_MPATH_INFO                                 = 0x1b
	NL80211_ATTR_MPATH_NEXT_HOP                             = 0x1a
	NL80211_ATTR_MULTICAST_TO_UNICAST_ENABLED               = 0xf4
	NL80211_ATTR_MU_MIMO_FOLLOW_MAC_ADDR                    = 0xe8
	NL80211_ATTR_MU_MIMO_GROUP_DATA                         = 0xe7
	NL80211_ATTR_NAN_FUNC                                   = 0xf0
	NL80211_ATTR_NAN_MASTER_PREF                            = 0xee
	NL80211_ATTR_NAN_MATCH                                  = 0xf1
	NL80211_ATTR_NETNS_FD                                   = 0xdb
	NL80211_ATTR_NOACK_MAP                                  = 0x95
	NL80211_ATTR_NSS                                        = 0x106
	NL80211_ATTR_OBSS_COLOR_BITMAP                          = 0x12e
	NL80211_ATTR_OFFCHANNEL_TX_OK                           = 0x6c
	NL80211_ATTR_OPER_CLASS                                 = 0xd6
	NL80211_ATTR_OPMODE_NOTIF                               = 0xc2
	NL80211_ATTR_P2P_CTWINDOW                               = 0xa2
	NL80211_ATTR_P2P_OPPPS                                  = 0xa3
	NL80211_ATTR_PAD                                        = 0xe5
	NL80211_ATTR_PBSS                                       = 0xe2
	NL80211_ATTR_PEER_AID                                   = 0xb5
	NL80211_ATTR_PEER_MEASUREMENTS                          = 0x111
	NL80211_ATTR_PID                                        = 0x52
	NL80211_ATTR_PMK                                        = 0xfe
	NL80211_ATTR_PMKID                                      = 0x55
	NL80211_ATTR_PMK_LIFETIME                               = 0x11f
	NL80211_ATTR_PMKR0_NAME                                 = 0x102
	NL80211_ATTR_PMK_REAUTH_THRESHOLD                       = 0x120
	NL80211_ATTR_PMKSA_CANDIDATE                            = 0x86
	NL80211_ATTR_PORT_AUTHORIZED                            = 0x103
	NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN                    = 0x5
	NL80211_ATTR_POWER_RULE_MAX_EIRP                        = 0x6
	NL80211_ATTR_PREV_BSSID                                 = 0x4f
	NL80211_ATTR_PRIVACY                                    = 0x46
	NL80211_ATTR_PROBE_RESP                                 = 0x91
	NL80211_ATTR_PROBE_RESP_OFFLOAD                         = 0x90
	NL80211_ATTR_PROTOCOL_FEATURES                          = 0xad
	NL80211_ATTR_PS_STATE                                   = 0x5d
	NL80211_ATTR_QOS_MAP                                    = 0xc7
	NL80211_ATTR_RADAR_BACKGROUND                           = 0x134
	NL80211_ATTR_RADAR_EVENT                                = 0xa8
	NL80211_ATTR_REASON_CODE                                = 0x36
	NL80211_ATTR_RECEIVE_MULTICAST                          = 0x121
	NL80211_ATTR_RECONNECT_REQUESTED                        = 0x12b
	NL80211_ATTR_REG_ALPHA2                                 = 0x21
	NL80211_ATTR_REG_INDOOR                                 = 0xdd
	NL80211_ATTR_REG_INITIATOR                              = 0x30
	NL80211_ATTR_REG_RULE_FLAGS                             = 0x1
	NL80211_ATTR_REG_RULES                                  = 0x22
	NL80211_ATTR_REG_TYPE                                   = 0x31
	NL80211_ATTR_REKEY_DATA                                 = 0x7a
	NL80211_ATTR_REQ_IE                                     = 0x4d
	NL80211_ATTR_RESP_IE                                    = 0x4e
	NL80211_ATTR_ROAM_SUPPORT                               = 0x83
	NL80211_ATTR_RX_FRAME_TYPES                             = 0x64
	NL80211_ATTR_RX_HW_TIMESTAMP                            = 0x140
	NL80211_ATTR_RXMGMT_FLAGS                               = 0xbc
	NL80211_ATTR_RX_SIGNAL_DBM                              = 0x97
	NL80211_ATTR_S1G_CAPABILITY                             = 0x128
	NL80211_ATTR_S1G_CAPABILITY_MASK                        = 0x129
	NL80211_ATTR_SAE_DATA                                   = 0x9c
	NL80211_ATTR_SAE_PASSWORD                               = 0x115
	NL80211_ATTR_SAE_PWE                                    = 0x12a
	NL80211_ATTR_SAR_SPEC                                   = 0x12c
	NL80211_ATTR_SCAN_FLAGS                                 = 0x9e
	NL80211_ATTR_SCAN_FREQ_KHZ                              = 0x124
	NL80211_ATTR_SCAN_FREQUENCIES                           = 0x2c
	NL80211_ATTR_SCAN_GENERATION                            = 0x2e
	NL80211_ATTR_SCAN_SSIDS                                 = 0x2d
	NL80211_ATTR_SCAN_START_TIME_TSF_BSSID                  = 0xea
	NL80211_ATTR_SCAN_START_TIME_TSF                        = 0xe9
	NL80211_ATTR_SCAN_SUPP_RATES                            = 0x7d
	NL80211_ATTR_SCHED_SCAN_DELAY                           = 0xdc
	NL80211_ATTR_SCHED_SCAN_INTERVAL                        = 0x77
	NL80211_ATTR_SCHED_SCAN_MATCH                           = 0x84
	NL80211_ATTR_SCHED_SCAN_MATCH_SSID                      = 0x1
	NL80211_ATTR_SCHED_SCAN_MAX_REQS                        = 0x100
	NL80211_ATTR_SCHED_SCAN_MULTI                           = 0xff
	NL80211_ATTR_SCHED_SCAN_PLANS                           = 0xe1
	NL80211_ATTR_SCHED_SCAN_RELATIVE_RSSI                   = 0xf6
	NL80211_ATTR_SCHED_SCAN_RSSI_ADJUST                     = 0xf7
	NL80211_ATTR_SMPS_MODE                                  = 0xd5
	NL80211_ATTR_SOCKET_OWNER                               = 0xcc
	NL80211_ATTR_SOFTWARE_IFTYPES                           = 0x79
	NL80211_ATTR_SPLIT_WIPHY_DUMP                           = 0xae
	NL80211_ATTR_SSID                                       = 0x34
	NL80211_ATTR_STA_AID                                    = 0x10
	NL80211_ATTR_STA_CAPABILITY                             = 0xab
	NL80211_ATTR_STA_EXT_CAPABILITY                         = 0xac
	NL80211_ATTR_STA_FLAGS2                                 = 0x43
	NL80211_ATTR_STA_FLAGS                                  = 0x11
	NL80211_ATTR_STA_INFO                                   = 0x15
	NL80211_ATTR_STA_LISTEN_INTERVAL                        = 0x12
	NL80211_ATTR_STA_PLINK_ACTION                           = 0x19
	NL80211_ATTR_STA_PLINK_STATE                            = 0x74
	NL80211_ATTR_STA_SUPPORTED_CHANNELS                     = 0xbd
	NL80211_ATTR_STA_SUPPORTED_OPER_CLASSES                 = 0xbe
	NL80211_ATTR_STA_SUPPORTED_RATES                        = 0x13
	NL80211_ATTR_STA_SUPPORT_P2P_PS                         = 0xe4
	NL80211_ATTR_STATUS_CODE                                = 0x48
	NL80211_ATTR_STA_TX_POWER                               = 0x114
	NL80211_ATTR_STA_TX_POWER_SETTING                       = 0x113
	NL80211_ATTR_STA_VLAN                                   = 0x14
	NL80211_ATTR_STA_WME                                    = 0x81
	NL80211_ATTR_SUPPORT_10_MHZ                             = 0xc1
	NL80211_ATTR_SUPPORT_5_MHZ                              = 0xc0
	NL80211_ATTR_SUPPORT_AP_UAPSD                           = 0x82
	NL80211_ATTR_SUPPORTED_COMMANDS                         = 0x32
	NL80211_ATTR_SUPPORTED_IFTYPES                          = 0x20
	NL80211_ATTR_SUPPORT_IBSS_RSN                           = 0x68
	NL80211_ATTR_SUPPORT_MESH_AUTH                          = 0x73
	NL80211_ATTR_SURVEY_INFO                                = 0x54
	NL80211_ATTR_SURVEY_RADIO_STATS                         = 0xda
	NL80211_ATTR_TD_BITMAP                                  = 0x141
	NL80211_ATTR_TDLS_ACTION                                = 0x88
	NL80211_ATTR_TDLS_DIALOG_TOKEN                          = 0x89
	NL80211_ATTR_TDLS_EXTERNAL_SETUP                        = 0x8c
	NL80211_ATTR_TDLS_INITIATOR                             = 0xcf
	NL80211_ATTR_TDLS_OPERATION                             = 0x8a
	NL80211_ATTR_TDLS_PEER_CAPABILITY                       = 0xcb
	NL80211_ATTR_TDLS_SUPPORT                               = 0x8b
	NL80211_ATTR_TESTDATA                                   = 0x45
	NL80211_ATTR_TID_CONFIG                                 = 0x11d
	NL80211_ATTR_TIMED_OUT                                  = 0x41
	NL80211_ATTR_TIMEOUT                                    = 0x110
	NL80211_ATTR_TIMEOUT_REASON                             = 0xf8
	NL80211_ATTR_TSID                                       = 0xd2
	NL80211_ATTR_TWT_RESPONDER                              = 0x116
	NL80211_ATTR_TX_FRAME_TYPES                             = 0x63
	NL80211_ATTR_TX_HW_TIMESTAMP                            = 0x13f
	NL80211_ATTR_TX_NO_CCK_RATE                             = 0x87
	NL80211_ATTR_TXQ_LIMIT                                  = 0x10a
	NL80211_ATTR_TXQ_MEMORY_LIMIT                           = 0x10b
	NL80211_ATTR_TXQ_QUANTUM                                = 0x10c
	NL80211_ATTR_TXQ_STATS                                  = 0x109
	NL80211_ATTR_TX_RATES                                   = 0x5a
	NL80211_ATTR_UNSOL_BCAST_PROBE_RESP                     = 0x127
	NL80211_ATTR_UNSPEC                                     = 0x0
	NL80211_ATTR_USE_MFP                                    = 0x42
	NL80211_ATTR_USER_PRIO                                  = 0xd3
	NL80211_ATTR_USER_REG_HINT_TYPE                         = 0x9a
	NL80211_ATTR_USE_RRM                                    = 0xd0
	NL80211_ATTR_VENDOR_DATA                                = 0xc5
	NL80211_ATTR_VENDOR_EVENTS                              = 0xc6
	NL80211_ATTR_VENDOR_ID                                  = 0xc3
	NL80211_ATTR_VENDOR_SUBCMD                              = 0xc4
	NL80211_ATTR_VHT_CAPABILITY                             = 0x9d
	NL80211_ATTR_VHT_CAPABILITY_MASK                        = 0xb0
	NL80211_ATTR_VLAN_ID                                    = 0x11a
	NL80211_ATTR_WANT_1X_4WAY_HS                            = 0x101
	NL80211_ATTR_WDEV                                       = 0x99
	NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX                     = 0x72
	NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX                     = 0x71
	NL80211_ATTR_WIPHY_ANTENNA_RX                           = 0x6a
	NL80211_ATTR_WIPHY_ANTENNA_TX                           = 0x69
	NL80211_ATTR_WIPHY_BANDS                                = 0x16
	NL80211_ATTR_WIPHY_CHANNEL_TYPE                         = 0x27
	NL80211_ATTR_WIPHY                                      = 0x1
	NL80211_ATTR_WIPHY_COVERAGE_CLASS                       = 0x59
	NL80211_ATTR_WIPHY_DYN_ACK                              = 0xd1
	NL80211_ATTR_WIPHY_EDMG_BW_CONFIG                       = 0x119
	NL80211_ATTR_WIPHY_EDMG_CHANNELS                        = 0x118
	NL80211_ATTR_WIPHY_FRAG_THRESHOLD                       = 0x3f
	NL80211_ATTR_WIPHY_FREQ                                 = 0x26
	NL80211_ATTR_WIPHY_FREQ_HINT                            = 0xc9
	NL80211_ATTR_WIPHY_FREQ_OFFSET                          = 0x122
	NL80211_ATTR_WIPHY_NAME                                 = 0x2
	NL80211_ATTR_WIPHY_RETRY_LONG                           = 0x3e
	NL80211_ATTR_WIPHY_RETRY_SHORT                          = 0x3d
	NL80211_ATTR_WIPHY_RTS_THRESHOLD                        = 0x40
	NL80211_ATTR_WIPHY_SELF_MANAGED_REG                     = 0xd8
	NL80211_ATTR_WIPHY_TX_POWER_LEVEL                       = 0x62
	NL80211_ATTR_WIPHY_TX_POWER_SETTING                     = 0x61
	NL80211_ATTR_WIPHY_TXQ_PARAMS                           = 0x25
	NL80211_ATTR_WOWLAN_TRIGGERS                            = 0x75
	NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED                  = 0x76
	NL80211_ATTR_WPA_VERSIONS                               = 0x4b
	NL80211_AUTHTYPE_AUTOMATIC                              = 0x8
	NL80211_AUTHTYPE_FILS_PK                                = 0x7
	NL80211_AUTHTYPE_FILS_SK                                = 0x5
	NL80211_AUTHTYPE_FILS_SK_PFS                            = 0x6
	NL80211_AUTHTYPE_FT                                     = 0x2
	NL80211_AUTHTYPE_MAX                                    = 0x7
	NL80211_AUTHTYPE_NETWORK_EAP                            = 0x3
	NL80211_AUTHTYPE_OPEN_SYSTEM                            = 0x0
	NL80211_AUTHTYPE_SAE                                    = 0x4
	NL80211_AUTHTYPE_SHARED_KEY                             = 0x1
	NL80211_BAND_2GHZ                                       = 0x0
	NL80211_BAND_5GHZ                                       = 0x1
	NL80211_BAND_60GHZ                                      = 0x2
	NL80211_BAND_6GHZ                                       = 0x3
	NL80211_BAND_ATTR_EDMG_BW_CONFIG                        = 0xb
	NL80211_BAND_ATTR_EDMG_CHANNELS                         = 0xa
	NL80211_BAND_ATTR_FREQS                                 = 0x1
	NL80211_BAND_ATTR_HT_AMPDU_DENSITY                      = 0x6
	NL80211_BAND_ATTR_HT_AMPDU_FACTOR                       = 0x5
	NL80211_BAND_ATTR_HT_CAPA                               = 0x4
	NL80211_BAND_ATTR_HT_MCS_SET                            = 0x3
	NL80211_BAND_ATTR_IFTYPE_DATA                           = 0x9
	NL80211_BAND_ATTR_MAX                                   = 0xb
	NL80211_BAND_ATTR_RATES                                 = 0x2
	NL80211_BAND_ATTR_VHT_CAPA                              = 0x8
	NL80211_BAND_ATTR_VHT_MCS_SET                           = 0x7
	NL80211_BAND_IFTYPE_ATTR_EHT_CAP_MAC                    = 0x8
	NL80211_BAND_IFTYPE_ATTR_EHT_CAP_MCS_SET                = 0xa
	NL80211_BAND_IFTYPE_ATTR_EHT_CAP_PHY                    = 0x9
	NL80211_BAND_IFTYPE_ATTR_EHT_CAP_PPE                    = 0xb
	NL80211_BAND_IFTYPE_ATTR_HE_6GHZ_CAPA                   = 0x6
	NL80211_BAND_IFTYPE_ATTR_HE_CAP_MAC                     = 0x2
	NL80211_BAND_IFTYPE_ATTR_HE_CAP_MCS_SET                 = 0x4
	NL80211_BAND_IFTYPE_ATTR_HE_CAP_PHY                     = 0x3
	NL80211_BAND_IFTYPE_ATTR_HE_CAP_PPE                     = 0x5
	NL80211_BAND_IFTYPE_ATTR_IFTYPES                        = 0x1
	NL80211_BAND_IFTYPE_ATTR_MAX                            = 0xb
	NL80211_BAND_IFTYPE_ATTR_VENDOR_ELEMS                   = 0x7
	NL80211_BAND_LC                                         = 0x5
	NL80211_BAND_S1GHZ                                      = 0x4
	NL80211_BITRATE_ATTR_2GHZ_SHORTPREAMBLE                 = 0x2
	NL80211_BITRATE_ATTR_MAX                                = 0x2
	NL80211_BITRATE_ATTR_RATE                               = 0x1
	NL80211_BSS_BEACON_IES                                  = 0xb
	NL80211_BSS_BEACON_INTERVAL                             = 0x4
	NL80211_BSS_BEACON_TSF                                  = 0xd
	NL80211_BSS_BSSID                                       = 0x1
	NL80211_BSS_CAPABILITY                                  = 0x5
	NL80211_BSS_CHAIN_SIGNAL                                = 0x13
	NL80211_BSS_CHAN_WIDTH_10                               = 0x1
	NL80211_BSS_CHAN_WIDTH_1                                = 0x3
	NL80211_BSS_CHAN_WIDTH_20                               = 0x0
	NL80211_BSS_CHAN_WIDTH_2                                = 0x4
	NL80211_BSS_CHAN_WIDTH_5                                = 0x2
	NL80211_BSS_CHAN_WIDTH                                  = 0xc
	NL80211_BSS_FREQUENCY                                   = 0x2
	NL80211_BSS_FREQUENCY_OFFSET                            = 0x14
	NL80211_BSS_INFORMATION_ELEMENTS                        = 0x6
	NL80211_BSS_LAST_SEEN_BOOTTIME                          = 0xf
	NL80211_BSS_MAX                                         = 0x16
	NL80211_BSS_MLD_ADDR                                    = 0x16
	NL80211_BSS_MLO_LINK_ID                                 = 0x15
	NL80211_BSS_PAD                                         = 0x10
	NL80211_BSS_PARENT_BSSID                                = 0x12
	NL80211_BSS_PARENT_TSF                                  = 0x11
	NL80211_BSS_PRESP_DATA                                  = 0xe
	NL80211_BSS_SEEN_MS_AGO                                 = 0xa
	NL80211_BSS_SELECT_ATTR_BAND_PREF                       = 0x2
	NL80211_BSS_SELECT_ATTR_MAX                             = 0x3
	NL80211_BSS_SELECT_ATTR_RSSI_ADJUST                     = 0x3
	NL80211_BSS_SELECT_ATTR_RSSI                            = 0x1
	NL80211_BSS_SIGNAL_MBM                                  = 0x7
	NL80211_BSS_SIGNAL_UNSPEC                               = 0x8
	NL80211_BSS_STATUS_ASSOCIATED                           = 0x1
	NL80211_BSS_STATUS_AUTHENTICATED                        = 0x0
	NL80211_BSS_STATUS                                      = 0x9
	NL80211_BSS_STATUS_IBSS_JOINED                          = 0x2
	NL80211_BSS_TSF                                         = 0x3
	NL80211_CHAN_HT20                                       = 0x1
	NL80211_CHAN_HT40MINUS                                  = 0x2
	NL80211_CHAN_HT40PLUS                                   = 0x3
	NL80211_CHAN_NO_HT                                      = 0x0
	NL80211_CHAN_WIDTH_10                                   = 0x7
	NL80211_CHAN_WIDTH_160                                  = 0x5
	NL80211_CHAN_WIDTH_16                                   = 0xc
	NL80211_CHAN_WIDTH_1                                    = 0x8
	NL80211_CHAN_WIDTH_20                                   = 0x1
	NL80211_CHAN_WIDTH_20_NOHT                              = 0x0
	NL80211_CHAN_WIDTH_2                                    = 0x9
	NL80211_CHAN_WIDTH_320                                  = 0xd
	NL80211_CHAN_WIDTH_40                                   = 0x2
	NL80211_CHAN_WIDTH_4                                    = 0xa
	NL80211_CHAN_WIDTH_5                                    = 0x6
	NL80211_CHAN_WIDTH_80                                   = 0x3
	NL80211_CHAN_WIDTH_80P80                                = 0x4
	NL80211_CHAN_WIDTH_8                                    = 0xb
	NL80211_CMD_ABORT_SCAN                                  = 0x72
	NL80211_CMD_ACTION                                      = 0x3b
	NL80211_CMD_ACTION_TX_STATUS                            = 0x3c
	NL80211_CMD_ADD_LINK                                    = 0x94
	NL80211_CMD_ADD_LINK_STA                                = 0x96
	NL80211_CMD_ADD_NAN_FUNCTION                            = 0x75
	NL80211_CMD_ADD_TX_TS                                   = 0x69
	NL80211_CMD_ASSOC_COMEBACK                              = 0x93
	NL80211_CMD_ASSOCIATE                                   = 0x26
	NL80211_CMD_AUTHENTICATE                                = 0x25
	NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL                    = 0x38
	NL80211_CMD_CHANGE_NAN_CONFIG                           = 0x77
	NL80211_CMD_CHANNEL_SWITCH                              = 0x66
	NL80211_CMD_CH_SWITCH_NOTIFY                            = 0x58
	NL80211_CMD_CH_SWITCH_STARTED_NOTIFY                    = 0x6e
	NL80211_CMD_COLOR_CHANGE_ABORTED                        = 0x90
	NL80211_CMD_COLOR_CHANGE_COMPLETED                      = 0x91
	NL80211_CMD_COLOR_CHANGE_REQUEST                        = 0x8e
	NL80211_CMD_COLOR_CHANGE_STARTED                        = 0x8f
	NL80211_CMD_CONNECT                                     = 0x2e
	NL80211_CMD_CONN_FAILED                                 = 0x5b
	NL80211_CMD_CONTROL_PORT_FRAME                          = 0x81
	NL80211_CMD_CONTROL_PORT_FRAME_TX_STATUS                = 0x8b
	NL80211_CMD_CRIT_PROTOCOL_START                         = 0x62
	NL80211_CMD_CRIT_PROTOCOL_STOP                          = 0x63
	NL80211_CMD_DEAUTHENTICATE                              = 0x27
	NL80211_CMD_DEL_BEACON                                  = 0x10
	NL80211_CMD_DEL_INTERFACE                               = 0x8
	NL80211_CMD_DEL_KEY                                     = 0xc
	NL80211_CMD_DEL_MPATH                                   = 0x18
	NL80211_CMD_DEL_NAN_FUNCTION                            = 0x76
	NL80211_CMD_DEL_PMK                                     = 0x7c
	NL80211_CMD_DEL_PMKSA                                   = 0x35
	NL80211_CMD_DEL_STATION                                 = 0x14
	NL80211_CMD_DEL_TX_TS                                   = 0x6a
	NL80211_CMD_DEL_WIPHY                                   = 0x4
	NL80211_CMD_DISASSOCIATE                                = 0x28
	NL80211_CMD_DISCONNECT                                  = 0x30
	NL80211_CMD_EXTERNAL_AUTH                               = 0x7f
	NL80211_CMD_FLUSH_PMKSA                                 = 0x36
	NL80211_CMD_FRAME                                       = 0x3b
	NL80211_CMD_FRAME_TX_STATUS                             = 0x3c
	NL80211_CMD_FRAME_WAIT_CANCEL                           = 0x43
	NL80211_CMD_FT_EVENT                                    = 0x61
	NL80211_CMD_GET_BEACON                                  = 0xd
	NL80211_CMD_GET_COALESCE                                = 0x64
	NL80211_CMD_GET_FTM_RESPONDER_STATS                     = 0x82
	NL80211_CMD_GET_INTERFACE                               = 0x5
	NL80211_CMD_GET_KEY                                     = 0x9
	NL80211_CMD_GET_MESH_CONFIG                             = 0x1c
	NL80211_CMD_GET_MESH_PARAMS                             = 0x1c
	NL80211_CMD_GET_MPATH                                   = 0x15
	NL80211_CMD_GET_MPP                                     = 0x6b
	NL80211_CMD_GET_POWER_SAVE                              = 0x3e
	NL80211_CMD_GET_PROTOCOL_FEATURES                       = 0x5f
	NL80211_CMD_GET_REG                                     = 0x1f
	NL80211_CMD_GET_SCAN                                    = 0x20
	NL80211_CMD_GET_STATION                                 = 0x11
	NL80211_CMD_GET_SURVEY                                  = 0x32
	NL80211_CMD_GET_WIPHY                                   = 0x1
	NL80211_CMD_GET_WOWLAN                                  = 0x49
	NL80211_CMD_JOIN_IBSS                                   = 0x2b
	NL80211_CMD_JOIN_MESH                                   = 0x44
	NL80211_CMD_JOIN_OCB                                    = 0x6c
	NL80211_CMD_LEAVE_IBSS                                  = 0x2c
	NL80211_CMD_LEAVE_MESH                                  = 0x45
	NL80211_CMD_LEAVE_OCB                                   = 0x6d
	NL80211_CMD_MAX                                         = 0x98
	NL80211_CMD_MICHAEL_MIC_FAILURE                         = 0x29
	NL80211_CMD_MODIFY_LINK_STA                             = 0x97
	NL80211_CMD_NAN_MATCH                                   = 0x78
	NL80211_CMD_NEW_BEACON                                  = 0xf
	NL80211_CMD_NEW_INTERFACE                               = 0x7
	NL80211_CMD_NEW_KEY                                     = 0xb
	NL80211_CMD_NEW_MPATH                                   = 0x17
	NL80211_CMD_NEW_PEER_CANDIDATE                          = 0x48
	NL80211_CMD_NEW_SCAN_RESULTS                            = 0x22
	NL80211_CMD_NEW_STATION                                 = 0x13
	NL80211_CMD_NEW_SURVEY_RESULTS                          = 0x33
	NL80211_CMD_NEW_WIPHY                                   = 0x3
	NL80211_CMD_NOTIFY_CQM                                  = 0x40
	NL80211_CMD_NOTIFY_RADAR                                = 0x86
	NL80211_CMD_OBSS_COLOR_COLLISION                        = 0x8d
	NL80211_CMD_PEER_MEASUREMENT_COMPLETE                   = 0x85
	NL80211_CMD_PEER_MEASUREMENT_RESULT                     = 0x84
	NL80211_CMD_PEER_MEASUREMENT_START                      = 0x83
	NL80211_CMD_PMKSA_CANDIDATE                             = 0x50
	NL80211_CMD_PORT_AUTHORIZED                             = 0x7d
	NL80211_CMD_PROBE_CLIENT                                = 0x54
	NL80211_CMD_PROBE_MESH_LINK                             = 0x88
	NL80211_CMD_RADAR_DETECT                                = 0x5e
	NL80211_CMD_REG_BEACON_HINT                             = 0x2a
	NL80211_CMD_REG_CHANGE                                  = 0x24
	NL80211_CMD_REGISTER_ACTION                             = 0x3a
	NL80211_CMD_REGISTER_BEACONS                            = 0x55
	NL80211_CMD_REGISTER_FRAME                              = 0x3a
	NL80211_CMD_RELOAD_REGDB                                = 0x7e
	NL80211_CMD_REMAIN_ON_CHANNEL                           = 0x37
	NL80211_CMD_REMOVE_LINK                                 = 0x95
	NL80211_CMD_REMOVE_LINK_STA                             = 0x98
	NL80211_CMD_REQ_SET_REG                                 = 0x1b
	NL80211_CMD_ROAM                                        = 0x2f
	NL80211_CMD_SCAN_ABORTED                                = 0x23
	NL80211_CMD_SCHED_SCAN_RESULTS                          = 0x4d
	NL80211_CMD_SCHED_SCAN_STOPPED                          = 0x4e
	NL80211_CMD_SET_BEACON                                  = 0xe
	NL80211_CMD_SET_BSS                                     = 0x19
	NL80211_CMD_SET_CHANNEL                                 = 0x41
	NL80211_CMD_SET_COALESCE                                = 0x65
	NL80211_CMD_SET_CQM                                     = 0x3f
	NL80211_CMD_SET_FILS_AAD                                = 0x92
	NL80211_CMD_SET_INTERFACE                               = 0x6
	NL80211_CMD_SET_KEY                                     = 0xa
	NL80211_CMD_SET_MAC_ACL                                 = 0x5d
	NL80211_CMD_SET_MCAST_RATE                              = 0x5c
	NL80211_CMD_SET_MESH_CONFIG                             = 0x1d
	NL80211_CMD_SET_MESH_PARAMS                             = 0x1d
	NL80211_CMD_SET_MGMT_EXTRA_IE                           = 0x1e
	NL80211_CMD_SET_MPATH                                   = 0x16
	NL80211_CMD_SET_MULTICAST_TO_UNICAST                    = 0x79
	NL80211_CMD_SET_NOACK_MAP                               = 0x57
	NL80211_CMD_SET_PMK                                     = 0x7b
	NL80211_CMD_SET_PMKSA                                   = 0x34
	NL80211_CMD_SET_POWER_SAVE                              = 0x3d
	NL80211_CMD_SET_QOS_MAP                                 = 0x68
	NL80211_CMD_SET_REG                                     = 0x1a
	NL80211_CMD_SET_REKEY_OFFLOAD                           = 0x4f
	NL80211_CMD_SET_SAR_SPECS                               = 0x8c
	NL80211_CMD_SET_STATION                                 = 0x12
	NL80211_CMD_SET_TID_CONFIG                              = 0x89
	NL80211_CMD_SET_TX_BITRATE_MASK                         = 0x39
	NL80211_CMD_SET_WDS_PEER                                = 0x42
	NL80211_CMD_SET_WIPHY                                   = 0x2
	NL80211_CMD_SET_WIPHY_NETNS                             = 0x31
	NL80211_CMD_SET_WOWLAN                                  = 0x4a
	NL80211_CMD_STA_OPMODE_CHANGED                          = 0x80
	NL80211_CMD_START_AP                                    = 0xf
	NL80211_CMD_START_NAN                                   = 0x73
	NL80211_CMD_START_P2P_DEVICE                            = 0x59
	NL80211_CMD_START_SCHED_SCAN                            = 0x4b
	NL80211_CMD_STOP_AP                                     = 0x10
	NL80211_CMD_STOP_NAN                                    = 0x74
	NL80211_CMD_STOP_P2P_DEVICE                             = 0x5a
	NL80211_CMD_STOP_SCHED_SCAN                             = 0x4c
	NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH                  = 0x70
	NL80211_CMD_TDLS_CHANNEL_SWITCH                         = 0x6f
	NL80211_CMD_TDLS_MGMT                                   = 0x52
	NL80211_CMD_TDLS_OPER                                   = 0x51
	NL80211_CMD_TESTMODE                                    = 0x2d
	NL80211_CMD_TRIGGER_SCAN                                = 0x21
	NL80211_CMD_UNEXPECTED_4ADDR_FRAME                      = 0x56
	NL80211_CMD_UNEXPECTED_FRAME                            = 0x53
	NL80211_CMD_UNPROT_BEACON                               = 0x8a
	NL80211_CMD_UNPROT_DEAUTHENTICATE                       = 0x46
	NL80211_CMD_UNPROT_DISASSOCIATE                         = 0x47
	NL80211_CMD_UNSPEC                                      = 0x0
	NL80211_CMD_UPDATE_CONNECT_PARAMS                       = 0x7a
	NL80211_CMD_UPDATE_FT_IES                               = 0x60
	NL80211_CMD_UPDATE_OWE_INFO                             = 0x87
	NL80211_CMD_VENDOR                                      = 0x67
	NL80211_CMD_WIPHY_REG_CHANGE                            = 0x71
	NL80211_COALESCE_CONDITION_MATCH                        = 0x0
	NL80211_COALESCE_CONDITION_NO_MATCH                     = 0x1
	NL80211_CONN_FAIL_BLOCKED_CLIENT                        = 0x1
	NL80211_CONN_FAIL_MAX_CLIENTS                           = 0x0
	NL80211_CQM_RSSI_BEACON_LOSS_EVENT                      = 0x2
	NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH                   = 0x1
	NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW                    = 0x0
	NL80211_CQM_TXE_MAX_INTVL                               = 0x708
	NL80211_CRIT_PROTO_APIPA                                = 0x3
	NL80211_CRIT_PROTO_DHCP                                 = 0x1
	NL80211_CRIT_PROTO_EAPOL                                = 0x2
	NL80211_CRIT_PROTO_MAX_DURATION                         = 0x1388
	NL80211_CRIT_PROTO_UNSPEC                               = 0x0
	NL80211_DFS_AVAILABLE                                   = 0x2
	NL80211_DFS_ETSI                                        = 0x2
	NL80211_DFS_FCC                                         = 0x1
	NL80211_DFS_JP                                          = 0x3
	NL80211_DFS_UNAVAILABLE                                 = 0x1
	NL80211_DFS_UNSET                                       = 0x0
	NL80211_DFS_USABLE                                      = 0x0
	NL80211_EDMG_BW_CONFIG_MAX                              = 0xf
	NL80211_EDMG_BW_CONFIG_MIN                              = 0x4
	NL80211_EDMG_CHANNELS_MAX                               = 0x3c
	NL80211_EDMG_CHANNELS_MIN                               = 0x1
	NL80211_EHT_MAX_CAPABILITY_LEN                          = 0x33
	NL80211_EHT_MIN_CAPABILITY_LEN                          = 0xd
	NL80211_EXTERNAL_AUTH_ABORT                             = 0x1
	NL80211_EXTERNAL_AUTH_START                             = 0x0
	NL80211_EXT_FEATURE_4WAY_HANDSHAKE_AP_PSK               = 0x32
	NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_1X               = 0x10
	NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_PSK              = 0xf
	NL80211_EXT_FEATURE_ACCEPT_BCAST_PROBE_RESP             = 0x12
	NL80211_EXT_FEATURE_ACK_SIGNAL_SUPPORT                  = 0x1b
	NL80211_EXT_FEATURE_AIRTIME_FAIRNESS                    = 0x21
	NL80211_EXT_FEATURE_AP_PMKSA_CACHING                    = 0x22
	NL80211_EXT_FEATURE_AQL                                 = 0x28
	NL80211_EXT_FEATURE_BEACON_PROTECTION_CLIENT            = 0x2e
	NL80211_EXT_FEATURE_BEACON_PROTECTION                   = 0x29
	NL80211_EXT_FEATURE_BEACON_RATE_HE                      = 0x36
	NL80211_EXT_FEATURE_BEACON_RATE_HT                      = 0x7
	NL80211_EXT_FEATURE_BEACON_RATE_LEGACY                  = 0x6
	NL80211_EXT_FEATURE_BEACON_RATE_VHT                     = 0x8
	NL80211_EXT_FEATURE_BSS_COLOR                           = 0x3a
	NL80211_EXT_FEATURE_BSS_PARENT_TSF                      = 0x4
	NL80211_EXT_FEATURE_CAN_REPLACE_PTK0                    = 0x1f
	NL80211_EXT_FEATURE_CONTROL_PORT_NO_PREAUTH             = 0x2a
	NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211           = 0x1a
	NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211_TX_STATUS = 0x30
	NL80211_EXT_FEATURE_CQM_RSSI_LIST                       = 0xd
	NL80211_EXT_FEATURE_DATA_ACK_SIGNAL_SUPPORT             = 0x1b
	NL80211_EXT_FEATURE_DEL_IBSS_STA                        = 0x2c
	NL80211_EXT_FEATURE_DFS_OFFLOAD                         = 0x19
	NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER                = 0x20
	NL80211_EXT_FEATURE_EXT_KEY_ID                          = 0x24
	NL80211_EXT_FEATURE_FILS_CRYPTO_OFFLOAD                 = 0x3b
	NL80211_EXT_FEATURE_FILS_DISCOVERY                      = 0x34
	NL80211_EXT_FEATURE_FILS_MAX_CHANNEL_TIME               = 0x11
	NL80211_EXT_FEATURE_FILS_SK_OFFLOAD                     = 0xe
	NL80211_EXT_FEATURE_FILS_STA                            = 0x9
	NL80211_EXT_FEATURE_HIGH_ACCURACY_SCAN                  = 0x18
	NL80211_EXT_FEATURE_LOW_POWER_SCAN                      = 0x17
	NL80211_EXT_FEATURE_LOW_SPAN_SCAN                       = 0x16
	NL80211_EXT_FEATURE_MFP_OPTIONAL                        = 0x15
	NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA                   = 0xa
	NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA_CONNECTED         = 0xb
	NL80211_EXT_FEATURE_MULTICAST_REGISTRATIONS             = 0x2d
	NL80211_EXT_FEATURE_MU_MIMO_AIR_SNIFFER                 = 0x2
	NL80211_EXT_FEATURE_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION  = 0x14
	NL80211_EXT_FEATURE_OCE_PROBE_REQ_HIGH_TX_RATE          = 0x13
	NL80211_EXT_FEATURE_OPERATING_CHANNEL_VALIDATION        = 0x31
	NL80211_EXT_FEATURE_POWERED_ADDR_CHANGE                 = 0x3d
	NL80211_EXT_FEATURE_PROTECTED_TWT                       = 0x2b
	NL80211_EXT_FEATURE_PROT_RANGE_NEGO_AND_MEASURE         = 0x39
	NL80211_EXT_FEATURE_RADAR_BACKGROUND                    = 0x3c
	NL80211_EXT_FEATURE_RRM                                 = 0x1
	NL80211_EXT_FEATURE_SAE_OFFLOAD_AP                      = 0x33
	NL80211_EXT_FEATURE_SAE_OFFLOAD                         = 0x26
	NL80211_EXT_FEATURE_SCAN_FREQ_KHZ                       = 0x2f
	NL80211_EXT_FEATURE_SCAN_MIN_PREQ_CONTENT               = 0x1e
	NL80211_EXT_FEATURE_SCAN_RANDOM_SN                      = 0x1d
	NL80211_EXT_FEATURE_SCAN_START_TIME                     = 0x3
	NL80211_EXT_FEATURE_SCHED_SCAN_BAND_SPECIFIC_RSSI_THOLD = 0x23
	NL80211_EXT_FEATURE_SCHED_SCAN_RELATIVE_RSSI            = 0xc
	NL80211_EXT_FEATURE_SECURE_LTF                          = 0x37
	NL80211_EXT_FEATURE_SECURE_RTT                          = 0x38
	NL80211_EXT_FEATURE_SET_SCAN_DWELL                      = 0x5
	NL80211_EXT_FEATURE_STA_TX_PWR                          = 0x25
	NL80211_EXT_FEATURE_TXQS                                = 0x1c
	NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP              = 0x35
	NL80211_EXT_FEATURE_VHT_IBSS                            = 0x0
	NL80211_EXT_FEATURE_VLAN_OFFLOAD                        = 0x27
	NL80211_FEATURE_ACKTO_ESTIMATION                        = 0x800000
	NL80211_FEATURE_ACTIVE_MONITOR                          = 0x20000
	NL80211_FEATURE_ADVERTISE_CHAN_LIMITS                   = 0x4000
	NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE               = 0x40000
	NL80211_FEATURE_AP_SCAN                                 = 0x100
	NL80211_FEATURE_CELL_BASE_REG_HINTS                     = 0x8
	NL80211_FEATURE_DS_PARAM_SET_IE_IN_PROBES               = 0x80000
	NL80211_FEATURE_DYNAMIC_SMPS                            = 0x2000000
	NL80211_FEATURE_FULL_AP_CLIENT_STATE                    = 0x8000
	NL80211_FEATURE_HT_IBSS                                 = 0x2
	NL80211_FEATURE_INACTIVITY_TIMER                        = 0x4
	NL80211_FEATURE_LOW_PRIORITY_SCAN                       = 0x40
	NL80211_FEATURE_MAC_ON_CREATE                           = 0x8000000
	NL80211_FEATURE_ND_RANDOM_MAC_ADDR                      = 0x80000000
	NL80211_FEATURE_NEED_OBSS_SCAN                          = 0x400
	NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL                = 0x10
	NL80211_FEATURE_P2P_GO_CTWIN                            = 0x800
	NL80211_FEATURE_P2P_GO_OPPPS                            = 0x1000
	NL80211_FEATURE_QUIET                                   = 0x200000
	NL80211_FEATURE_SAE                                     = 0x20
	NL80211_FEATURE_SCAN_FLUSH                              = 0x80
	NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR                    = 0x20000000
	NL80211_FEATURE_SCHED_SCAN_RANDOM_MAC_ADDR              = 0x40000000
	NL80211_FEATURE_SK_TX_STATUS                            = 0x1
	NL80211_FEATURE_STATIC_SMPS                             = 0x1000000
	NL80211_FEATURE_SUPPORTS_WMM_ADMISSION                  = 0x4000000
	NL80211_FEATURE_TDLS_CHANNEL_SWITCH                     = 0x10000000
	NL80211_FEATURE_TX_POWER_INSERTION                      = 0x400000
	NL80211_FEATURE_USERSPACE_MPM                           = 0x10000
	NL80211_FEATURE_VIF_TXPOWER                             = 0x200
	NL80211_FEATURE_WFA_TPC_IE_IN_PROBES                    = 0x100000
	NL80211_FILS_DISCOVERY_ATTR_INT_MAX                     = 0x2
	NL80211_FILS_DISCOVERY_ATTR_INT_MIN                     = 0x1
	NL80211_FILS_DISCOVERY_ATTR_MAX                         = 0x3
	NL80211_FILS_DISCOVERY_ATTR_TMPL                        = 0x3
	NL80211_FILS_DISCOVERY_TMPL_MIN_LEN                     = 0x2a
	NL80211_FREQUENCY_ATTR_16MHZ                            = 0x19
	NL80211_FREQUENCY_ATTR_1MHZ                             = 0x15
	NL80211_FREQUENCY_ATTR_2MHZ                             = 0x16
	NL80211_FREQUENCY_ATTR_4MHZ                             = 0x17
	NL80211_FREQUENCY_ATTR_8MHZ                             = 0x18
	NL80211_FREQUENCY_ATTR_DFS_CAC_TIME                     = 0xd
	NL80211_FREQUENCY_ATTR_DFS_STATE                        = 0x7
	NL80211_FREQUENCY_ATTR_DFS_TIME                         = 0x8
	NL80211_FREQUENCY_ATTR_DISABLED                         = 0x2
	NL80211_FREQUENCY_ATTR_FREQ                             = 0x1
	NL80211_FREQUENCY_ATTR_GO_CONCURRENT                    = 0xf
	NL80211_FREQUENCY_ATTR_INDOOR_ONLY                      = 0xe
	NL80211_FREQUENCY_ATTR_IR_CONCURRENT                    = 0xf
	NL80211_FREQUENCY_ATTR_MAX                              = 0x1b
	NL80211_FREQUENCY_ATTR_MAX_TX_POWER                     = 0x6
	NL80211_FREQUENCY_ATTR_NO_10MHZ                         = 0x11
	NL80211_FREQUENCY_ATTR_NO_160MHZ                        = 0xc
	NL80211_FREQUENCY_ATTR_NO_20MHZ                         = 0x10
	NL80211_FREQUENCY_ATTR_NO_320MHZ                        = 0x1a
	NL80211_FREQUENCY_ATTR_NO_80MHZ                         = 0xb
	NL80211_FREQUENCY_ATTR_NO_EHT                           = 0x1b
	NL80211_FREQUENCY_ATTR_NO_HE                            = 0x13
	NL80211_FREQUENCY_ATTR_NO_HT40_MINUS                    = 0x9
	NL80211_FREQUENCY_ATTR_NO_HT40_PLUS                     = 0xa
	NL80211_FREQUENCY_ATTR_NO_IBSS                          = 0x3
	NL80211_FREQUENCY_ATTR_NO_IR                            = 0x3
	NL80211_FREQUENCY_ATTR_OFFSET                           = 0x14
	NL80211_FREQUENCY_ATTR_PASSIVE_SCAN                     = 0x3
	NL80211_FREQUENCY_ATTR_RADAR                            = 0x5
	NL80211_FREQUENCY_ATTR_WMM                              = 0x12
	NL80211_FTM_RESP_ATTR_CIVICLOC                          = 0x3
	NL80211_FTM_RESP_ATTR_ENABLED                           = 0x1
	NL80211_FTM_RESP_ATTR_LCI                               = 0x2
	NL80211_FTM_RESP_ATTR_MAX                               = 0x3
	NL80211_FTM_STATS_ASAP_NUM                              = 0x4
	NL80211_FTM_STATS_FAILED_NUM                            = 0x3
	NL80211_FTM_STATS_MAX                                   = 0xa
	NL80211_FTM_STATS_NON_ASAP_NUM                          = 0x5
	NL80211_FTM_STATS_OUT_OF_WINDOW_TRIGGERS_NUM            = 0x9
	NL80211_FTM_STATS_PAD                                   = 0xa
	NL80211_FTM_STATS_PARTIAL_NUM                           = 0x2
	NL80211_FTM_STATS_RESCHEDULE_REQUESTS_NUM               = 0x8
	NL80211_FTM_STATS_SUCCESS_NUM                           = 0x1
	NL80211_FTM_STATS_TOTAL_DURATION_MSEC                   = 0x6
	NL80211_FTM_STATS_UNKNOWN_TRIGGERS_NUM                  = 0x7
	NL80211_GENL_NAME                                       = "nl80211"
	NL80211_HE_BSS_COLOR_ATTR_COLOR                         = 0x1
	NL80211_HE_BSS_COLOR_ATTR_DISABLED                      = 0x2
	NL80211_HE_BSS_COLOR_ATTR_MAX                           = 0x3
	NL80211_HE_BSS_COLOR_ATTR_PARTIAL                       = 0x3
	NL80211_HE_MAX_CAPABILITY_LEN                           = 0x36
	NL80211_HE_MIN_CAPABILITY_LEN                           = 0x10
	NL80211_HE_NSS_MAX                                      = 0x8
	NL80211_HE_OBSS_PD_ATTR_BSS_COLOR_BITMAP                = 0x4
	NL80211_HE_OBSS_PD_ATTR_MAX                             = 0x6
	NL80211_HE_OBSS_PD_ATTR_MAX_OFFSET                      = 0x2
	NL80211_HE_OBSS_PD_ATTR_MIN_OFFSET                      = 0x1
	NL80211_HE_OBSS_PD_ATTR_NON_SRG_MAX_OFFSET              = 0x3
	NL80211_HE_OBSS_PD_ATTR_PARTIAL_BSSID_BITMAP            = 0x5
	NL80211_HE_OBSS_PD_ATTR_SR_CTRL                         = 0x6
	NL80211_HIDDEN_SSID_NOT_IN_USE                          = 0x0
	NL80211_HIDDEN_SSID_ZERO_CONTENTS                       = 0x2
	NL80211_HIDDEN_SSID_ZERO_LEN                            = 0x1
	NL80211_HT_CAPABILITY_LEN                               = 0x1a
	NL80211_IFACE_COMB_BI_MIN_GCD                           = 0x7
	NL80211_IFACE_COMB_LIMITS                               = 0x1
	NL80211_IFACE_COMB_MAXNUM                               = 0x2
	NL80211_IFACE_COMB_NUM_CHANNELS                         = 0x4
	NL80211_IFACE_COMB_RADAR_DETECT_REGIONS                 = 0x6
	NL80211_IFACE_COMB_RADAR_DETECT_WIDTHS                  = 0x5
	NL80211_IFACE_COMB_STA_AP_BI_MATCH                      = 0x3
	NL80211_IFACE_COMB_UNSPEC                               = 0x0
	NL80211_IFACE_LIMIT_MAX                                 = 0x1
	NL80211_IFACE_LIMIT_TYPES                               = 0x2
	NL80211_IFACE_LIMIT_UNSPEC                              = 0x0
	NL80211_IFTYPE_ADHOC                                    = 0x1
	NL80211_IFTYPE_AKM_ATTR_IFTYPES                         = 0x1
	NL80211_IFTYPE_AKM_ATTR_MAX                             = 0x2
	NL80211_IFTYPE_AKM_ATTR_SUITES                          = 0x2
	NL80211_IFTYPE_AP                                       = 0x3
	NL80211_IFTYPE_AP_VLAN                                  = 0x4
	NL80211_IFTYPE_MAX                                      = 0xc
	NL80211_IFTYPE_MESH_POINT                               = 0x7
	NL80211_IFTYPE_MONITOR                                  = 0x6
	NL80211_IFTYPE_NAN                                      = 0xc
	NL80211_IFTYPE_OCB                                      = 0xb
	NL80211_IFTYPE_P2P_CLIENT                               = 0x8
	NL80211_IFTYPE_P2P_DEVICE                               = 0xa
	NL80211_IFTYPE_P2P_GO                                   = 0x9
	NL80211_IFTYPE_STATION                                  = 0x2
	NL80211_IFTYPE_UNSPECIFIED                              = 0x0
	NL80211_IFTYPE_WDS                                      = 0x5
	NL80211_KCK_EXT_LEN                                     = 0x18
	NL80211_KCK_LEN                                         = 0x10
	NL80211_KEK_EXT_LEN                                     = 0x20
	NL80211_KEK_LEN                                         = 0x10
	NL80211_KEY_CIPHER                                      = 0x3
	NL80211_KEY_DATA                                        = 0x1
	NL80211_KEY_DEFAULT_BEACON                              = 0xa
	NL80211_KEY_DEFAULT                                     = 0x5
	NL80211_KEY_DEFAULT_MGMT                                = 0x6
	NL80211_KEY_DEFAULT_TYPE_MULTICAST                      = 0x2
	NL80211_KEY_DEFAULT_TYPES                               = 0x8
	NL80211_KEY_DEFAULT_TYPE_UNICAST                        = 0x1
	NL80211_KEY_IDX                                         = 0x2
	NL80211_KEY_MAX                                         = 0xa
	NL80211_KEY_MODE                                        = 0x9
	NL80211_KEY_NO_TX                                       = 0x1
	NL80211_KEY_RX_TX                                       = 0x0
	NL80211_KEY_SEQ                                         = 0x4
	NL80211_KEY_SET_TX                                      = 0x2
	NL80211_KEY_TYPE                                        = 0x7
	NL80211_KEYTYPE_GROUP                                   = 0x0
	NL80211_KEYTYPE_PAIRWISE                                = 0x1
	NL80211_KEYTYPE_PEERKEY                                 = 0x2
	NL80211_MAX_NR_AKM_SUITES                               = 0x2
	NL80211_MAX_NR_CIPHER_SUITES                            = 0x5
	NL80211_MAX_SUPP_HT_RATES                               = 0x4d
	NL80211_MAX_SUPP_RATES                                  = 0x20
	NL80211_MAX_SUPP_REG_RULES                              = 0x80
	NL80211_MBSSID_CONFIG_ATTR_EMA                          = 0x5
	NL80211_MBSSID_CONFIG_ATTR_INDEX                        = 0x3
	NL80211_MBSSID_CONFIG_ATTR_MAX                          = 0x5
	NL80211_MBSSID_CONFIG_ATTR_MAX_EMA_PROFILE_PERIODICITY  = 0x2
	NL80211_MBSSID_CONFIG_ATTR_MAX_INTERFACES               = 0x1
	NL80211_MBSSID_CONFIG_ATTR_TX_IFINDEX                   = 0x4
	NL80211_MESHCONF_ATTR_MAX                               = 0x1f
	NL80211_MESHCONF_AUTO_OPEN_PLINKS                       = 0x7
	NL80211_MESHCONF_AWAKE_WINDOW                           = 0x1b
	NL80211_MESHCONF_CONFIRM_TIMEOUT                        = 0x2
	NL80211_MESHCONF_CONNECTED_TO_AS                        = 0x1f
	NL80211_MESHCONF_CONNECTED_TO_GATE                      = 0x1d
	NL80211_MESHCONF_ELEMENT_TTL                            = 0xf
	NL80211_MESHCONF_FORWARDING                             = 0x13
	NL80211_MESHCONF_GATE_ANNOUNCEMENTS                     = 0x11
	NL80211_MESHCONF_HOLDING_TIMEOUT                        = 0x3
	NL80211_MESHCONF_HT_OPMODE                              = 0x16
	NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT               = 0xb
	NL80211_MESHCONF_HWMP_CONFIRMATION_INTERVAL             = 0x19
	NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES                  = 0x8
	NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME                = 0xd
	NL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT              = 0x17
	NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL                 = 0x12
	NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL                 = 0xc
	NL80211_MESHCONF_HWMP_RANN_INTERVAL                     = 0x10
	NL80211_MESHCONF_HWMP_ROOT_INTERVAL                     = 0x18
	NL80211_MESHCONF_HWMP_ROOTMODE                          = 0xe
	NL80211_MESHCONF_MAX_PEER_LINKS                         = 0x4
	NL80211_MESHCONF_MAX_RETRIES                            = 0x5
	NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT                  = 0xa
	NL80211_MESHCONF_NOLEARN                                = 0x1e
	NL80211_MESHCONF_PATH_REFRESH_TIME                      = 0x9
	NL80211_MESHCONF_PLINK_TIMEOUT                          = 0x1c
	NL80211_MESHCONF_POWER_MODE                             = 0x1a
	NL80211_MESHCONF_RETRY_TIMEOUT                          = 0x1
	NL80211_MESHCONF_RSSI_THRESHOLD                         = 0x14
	NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR               = 0x15
	NL80211_MESHCONF_TTL                                    = 0x6
	NL80211_MESH_POWER_ACTIVE                               = 0x1
	NL80211_MESH_POWER_DEEP_SLEEP                           = 0x3
	NL80211_MESH_POWER_LIGHT_SLEEP                          = 0x2
	NL80211_MESH_POWER_MAX                                  = 0x3
	NL80211_MESH_POWER_UNKNOWN                              = 0x0
	NL80211_MESH_SETUP_ATTR_MAX                             = 0x8
	NL80211_MESH_SETUP_AUTH_PROTOCOL                        = 0x8
	NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC                 = 0x2
	NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL               = 0x1
	NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC                   = 0x6
	NL80211_MESH_SETUP_IE                                   = 0x3
	NL80211_MESH_SETUP_USERSPACE_AMPE                       = 0x5
	NL80211_MESH_SETUP_USERSPACE_AUTH                       = 0x4
	NL80211_MESH_SETUP_USERSPACE_MPM                        = 0x7
	NL80211_MESH_SETUP_VENDOR_PATH_SEL_IE                   = 0x3
	NL80211_MFP_NO                                          = 0x0
	NL80211_MFP_OPTIONAL                                    = 0x2
	NL80211_MFP_REQUIRED                                    = 0x1
	NL80211_MIN_REMAIN_ON_CHANNEL_TIME                      = 0xa
	NL80211_MNTR_FLAG_ACTIVE                                = 0x6
	NL80211_MNTR_FLAG_CONTROL                               = 0x3
	NL80211_MNTR_FLAG_COOK_FRAMES                           = 0x5
	NL80211_MNTR_FLAG_FCSFAIL                               = 0x1
	NL80211_MNTR_FLAG_MAX                                   = 0x6
	NL80211_MNTR_FLAG_OTHER_BSS                             = 0x4
	NL80211_MNTR_FLAG_PLCPFAIL                              = 0x2
	NL80211_MPATH_FLAG_ACTIVE                               = 0x1
	NL80211_MPATH_FLAG_FIXED                                = 0x8
	NL80211_MPATH_FLAG_RESOLVED                             = 0x10
	NL80211_MPATH_FLAG_RESOLVING                            = 0x2
	NL80211_MPATH_FLAG_SN_VALID                             = 0x4
	NL80211_MPATH_INFO_DISCOVERY_RETRIES                    = 0x7
	NL80211_MPATH_INFO_DISCOVERY_TIMEOUT                    = 0x6
	NL80211_MPATH_INFO_EXPTIME                              = 0x4
	NL80211_MPATH_INFO_FLAGS                                = 0x5
	NL80211_MPATH_INFO_FRAME_QLEN                           = 0x1
	NL80211_MPATH_INFO_HOP_COUNT                            = 0x8
	NL80211_MPATH_INFO_MAX                                  = 0x9
	NL80211_MPATH_INFO_METRIC                               = 0x3
	NL80211_MPATH_INFO_PATH_CHANGE                          = 0x9
	NL80211_MPATH_INFO_SN                                   = 0x2
	NL80211_MULTICAST_GROUP_CONFIG                          = "config"
	NL80211_MULTICAST_GROUP_MLME                            = "mlme"
	NL80211_MULTICAST_GROUP_NAN                             = "nan"
	NL80211_MULTICAST_GROUP_REG                             = "regulatory"
	NL80211_MULTICAST_GROUP_SCAN                            = "scan"
	NL80211_MULTICAST_GROUP_TESTMODE                        = "testmode"
	NL80211_MULTICAST_GROUP_VENDOR                          = "vendor"
	NL80211_NAN_FUNC_ATTR_MAX                               = 0x10
	NL80211_NAN_FUNC_CLOSE_RANGE                            = 0x9
	NL80211_NAN_FUNC_FOLLOW_UP                              = 0x2
	NL80211_NAN_FUNC_FOLLOW_UP_DEST                         = 0x8
	NL80211_NAN_FUNC_FOLLOW_UP_ID                           = 0x6
	NL80211_NAN_FUNC_FOLLOW_UP_REQ_ID                       = 0x7
	NL80211_NAN_FUNC_INSTANCE_ID                            = 0xf
	NL80211_NAN_FUNC_MAX_TYPE                               = 0x2
	NL80211_NAN_FUNC_PUBLISH_BCAST                          = 0x4
	NL80211_NAN_FUNC_PUBLISH                                = 0x0
	NL80211_NAN_FUNC_PUBLISH_TYPE                           = 0x3
	NL80211_NAN_FUNC_RX_MATCH_FILTER                        = 0xd
	NL80211_NAN_FUNC_SERVICE_ID                             = 0x2
	NL80211_NAN_FUNC_SERVICE_ID_LEN                         = 0x6
	NL80211_NAN_FUNC_SERVICE_INFO                           = 0xb
	NL80211_NAN_FUNC_SERVICE_SPEC_INFO_MAX_LEN              = 0xff
	NL80211_NAN_FUNC_SRF                                    = 0xc
	NL80211_NAN_FUNC_SRF_MAX_LEN                            = 0xff
	NL80211_NAN_FUNC_SUBSCRIBE_ACTIVE                       = 0x5
	NL80211_NAN_FUNC_SUBSCRIBE                              = 0x1
	NL80211_NAN_FUNC_TERM_REASON                            = 0x10
	NL80211_NAN_FUNC_TERM_REASON_ERROR                      = 0x2
	NL80211_NAN_FUNC_TERM_REASON_TTL_EXPIRED                = 0x1
	NL80211_NAN_FUNC_TERM_REASON_USER_REQUEST               = 0x0
	NL80211_NAN_FUNC_TTL                                    = 0xa
	NL80211_NAN_FUNC_TX_MATCH_FILTER                        = 0xe
	NL80211_NAN_FUNC_TYPE                                   = 0x1
	NL80211_NAN_MATCH_ATTR_MAX                              = 0x2
	NL80211_NAN_MATCH_FUNC_LOCAL                            = 0x1
	NL80211_NAN_MATCH_FUNC_PEER                             = 0x2
	NL80211_NAN_SOLICITED_PUBLISH                           = 0x1
	NL80211_NAN_SRF_ATTR_MAX                                = 0x4
	NL80211_NAN_SRF_BF                                      = 0x2
	NL80211_NAN_SRF_BF_IDX                                  = 0x3
	NL80211_NAN_SRF_INCLUDE                                 = 0x1
	NL80211_NAN_SRF_MAC_ADDRS                               = 0x4
	NL80211_NAN_UNSOLICITED_PUBLISH                         = 0x2
	NL80211_NUM_ACS                                         = 0x4
	NL80211_P2P_PS_SUPPORTED                                = 0x1
	NL80211_P2P_PS_UNSUPPORTED                              = 0x0
	NL80211_PKTPAT_MASK                                     = 0x1
	NL80211_PKTPAT_OFFSET                                   = 0x3
	NL80211_PKTPAT_PATTERN                                  = 0x2
	NL80211_PLINK_ACTION_BLOCK                              = 0x2
	NL80211_PLINK_ACTION_NO_ACTION                          = 0x0
	NL80211_PLINK_ACTION_OPEN                               = 0x1
	NL80211_PLINK_BLOCKED                                   = 0x6
	NL80211_PLINK_CNF_RCVD                                  = 0x3
	NL80211_PLINK_ESTAB                                     = 0x4
	NL80211_PLINK_HOLDING                                   = 0x5
	NL80211_PLINK_LISTEN                                    = 0x0
	NL80211_PLINK_OPN_RCVD                                  = 0x2
	NL80211_PLINK_OPN_SNT                                   = 0x1
	NL80211_PMKSA_CANDIDATE_BSSID                           = 0x2
	NL80211_PMKSA_CANDIDATE_INDEX                           = 0x1
	NL80211_PMKSA_CANDIDATE_PREAUTH                         = 0x3
	NL80211_PMSR_ATTR_MAX                                   = 0x5
	NL80211_PMSR_ATTR_MAX_PEERS                             = 0x1
	NL80211_PMSR_ATTR_PEERS                                 = 0x5
	NL80211_PMSR_ATTR_RANDOMIZE_MAC_ADDR                    = 0x3
	NL80211_PMSR_ATTR_REPORT_AP_TSF                         = 0x2
	NL80211_PMSR_ATTR_TYPE_CAPA                             = 0x4
	NL80211_PMSR_FTM_CAPA_ATTR_ASAP                         = 0x1
	NL80211_PMSR_FTM_CAPA_ATTR_BANDWIDTHS                   = 0x6
	NL80211_PMSR_FTM_CAPA_ATTR_MAX_BURSTS_EXPONENT          = 0x7
	NL80211_PMSR_FTM_CAPA_ATTR_MAX                          = 0xa
	NL80211_PMSR_FTM_CAPA_ATTR_MAX_FTMS_PER_BURST           = 0x8
	NL80211_PMSR_FTM_CAPA_ATTR_NON_ASAP                     = 0x2
	NL80211_PMSR_FTM_CAPA_ATTR_NON_TRIGGER_BASED            = 0xa
	NL80211_PMSR_FTM_CAPA_ATTR_PREAMBLES                    = 0x5
	NL80211_PMSR_FTM_CAPA_ATTR_REQ_CIVICLOC                 = 0x4
	NL80211_PMSR_FTM_CAPA_ATTR_REQ_LCI                      = 0x3
	NL80211_PMSR_FTM_CAPA_ATTR_TRIGGER_BASED                = 0x9
	NL80211_PMSR_FTM_FAILURE_BAD_CHANGED_PARAMS             = 0x7
	NL80211_PMSR_FTM_FAILURE_INVALID_TIMESTAMP              = 0x5
	NL80211_PMSR_FTM_FAILURE_NO_RESPONSE                    = 0x1
	NL80211_PMSR_FTM_FAILURE_PEER_BUSY                      = 0x6
	NL80211_PMSR_FTM_FAILURE_PEER_NOT_CAPABLE               = 0x4
	NL80211_PMSR_FTM_FAILURE_REJECTED                       = 0x2
	NL80211_PMSR_FTM_FAILURE_UNSPECIFIED                    = 0x0
	NL80211_PMSR_FTM_FAILURE_WRONG_CHANNEL                  = 0x3
	NL80211_PMSR_FTM_REQ_ATTR_ASAP                          = 0x1
	NL80211_PMSR_FTM_REQ_ATTR_BSS_COLOR                     = 0xd
	NL80211_PMSR_FTM_REQ_ATTR_BURST_DURATION                = 0x5
	NL80211_PMSR_FTM_REQ_ATTR_BURST_PERIOD                  = 0x4
	NL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST                = 0x6
	NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK                  = 0xc
	NL80211_PMSR_FTM_REQ_ATTR_MAX                           = 0xd
	NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED             = 0xb
	NL80211_PMSR_FTM_REQ_ATTR_NUM_BURSTS_EXP                = 0x3
	NL80211_PMSR_FTM_REQ_ATTR_NUM_FTMR_RETRIES              = 0x7
	NL80211_PMSR_FTM_REQ_ATTR_PREAMBLE                      = 0x2
	NL80211_PMSR_FTM_REQ_ATTR_REQUEST_CIVICLOC              = 0x9
	NL80211_PMSR_FTM_REQ_ATTR_REQUEST_LCI                   = 0x8
	NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED                 = 0xa
	NL80211_PMSR_FTM_RESP_ATTR_BURST_DURATION               = 0x7
	NL80211_PMSR_FTM_RESP_ATTR_BURST_INDEX                  = 0x2
	NL80211_PMSR_FTM_RESP_ATTR_BUSY_RETRY_TIME              = 0x5
	NL80211_PMSR_FTM_RESP_ATTR_CIVICLOC                     = 0x14
	NL80211_PMSR_FTM_RESP_ATTR_DIST_AVG                     = 0x10
	NL80211_PMSR_FTM_RESP_ATTR_DIST_SPREAD                  = 0x12
	NL80211_PMSR_FTM_RESP_ATTR_DIST_VARIANCE                = 0x11
	NL80211_PMSR_FTM_RESP_ATTR_FAIL_REASON                  = 0x1
	NL80211_PMSR_FTM_RESP_ATTR_FTMS_PER_BURST               = 0x8
	NL80211_PMSR_FTM_RESP_ATTR_LCI                          = 0x13
	NL80211_PMSR_FTM_RESP_ATTR_MAX                          = 0x15
	NL80211_PMSR_FTM_RESP_ATTR_NUM_BURSTS_EXP               = 0x6
	NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_ATTEMPTS            = 0x3
	NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_SUCCESSES           = 0x4
	NL80211_PMSR_FTM_RESP_ATTR_PAD                          = 0x15
	NL80211_PMSR_FTM_RESP_ATTR_RSSI_AVG                     = 0x9
	NL80211_PMSR_FTM_RESP_ATTR_RSSI_SPREAD                  = 0xa
	NL80211_PMSR_FTM_RESP_ATTR_RTT_AVG                      = 0xd
	NL80211_PMSR_FTM_RESP_ATTR_RTT_SPREAD                   = 0xf
	NL80211_PMSR_FTM_RESP_ATTR_RTT_VARIANCE                 = 0xe
	NL80211_PMSR_FTM_RESP_ATTR_RX_RATE                      = 0xc
	NL80211_PMSR_FTM_RESP_ATTR_TX_RATE                      = 0xb
	NL80211_PMSR_PEER_ATTR_ADDR                             = 0x1
	NL80211_PMSR_PEER_ATTR_CHAN                             = 0x2
	NL80211_PMSR_PEER_ATTR_MAX                              = 0x4
	NL80211_PMSR_PEER_ATTR_REQ                              = 0x3
	NL80211_PMSR_PEER_ATTR_RESP                             = 0x4
	NL80211_PMSR_REQ_ATTR_DATA                              = 0x1
	NL80211_PMSR_REQ_ATTR_GET_AP_TSF                        = 0x2
	NL80211_PMSR_REQ_ATTR_MAX                               = 0x2
	NL80211_PMSR_RESP_ATTR_AP_TSF                           = 0x4
	NL80211_PMSR_RESP_ATTR_DATA                             = 0x1
	NL80211_PMSR_RESP_ATTR_FINAL                            = 0x5
	NL80211_PMSR_RESP_ATTR_HOST_TIME                        = 0x3
	NL80211_PMSR_RESP_ATTR_MAX                              = 0x6
	NL80211_PMSR_RESP_ATTR_PAD                              = 0x6
	NL80211_PMSR_RESP_ATTR_STATUS                           = 0x2
	NL80211_PMSR_STATUS_FAILURE                             = 0x3
	NL80211_PMSR_STATUS_REFUSED                             = 0x1
	NL80211_PMSR_STATUS_SUCCESS                             = 0x0
	NL80211_PMSR_STATUS_TIMEOUT                             = 0x2
	NL80211_PMSR_TYPE_FTM                                   = 0x1
	NL80211_PMSR_TYPE_INVALID                               = 0x0
	NL80211_PMSR_TYPE_MAX                                   = 0x1
	NL80211_PREAMBLE_DMG                                    = 0x3
	NL80211_PREAMBLE_HE                                     = 0x4
	NL80211_PREAMBLE_HT                                     = 0x1
	NL80211_PREAMBLE_LEGACY                                 = 0x0
	NL80211_PREAMBLE_VHT                                    = 0x2
	NL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U               = 0x8
	NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P                  = 0x4
	NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2                 = 0x2
	NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS                  = 0x1
	NL80211_PROTOCOL_FEATURE_SPLIT_WIPHY_DUMP               = 0x1
	NL80211_PS_DISABLED                                     = 0x0
	NL80211_PS_ENABLED                                      = 0x1
	NL80211_RADAR_CAC_ABORTED                               = 0x2
	NL80211_RADAR_CAC_FINISHED                              = 0x1
	NL80211_RADAR_CAC_STARTED                               = 0x5
	NL80211_RADAR_DETECTED                                  = 0x0
	NL80211_RADAR_NOP_FINISHED                              = 0x3
	NL80211_RADAR_PRE_CAC_EXPIRED                           = 0x4
	NL80211_RATE_INFO_10_MHZ_WIDTH                          = 0xb
	NL80211_RATE_INFO_160_MHZ_WIDTH                         = 0xa
	NL80211_RATE_INFO_320_MHZ_WIDTH                         = 0x12
	NL80211_RATE_INFO_40_MHZ_WIDTH                          = 0x3
	NL80211_RATE_INFO_5_MHZ_WIDTH                           = 0xc
	NL80211_RATE_INFO_80_MHZ_WIDTH                          = 0x8
	NL80211_RATE_INFO_80P80_MHZ_WIDTH                       = 0x9
	NL80211_RATE_INFO_BITRATE32                             = 0x5
	NL80211_RATE_INFO_BITRATE                               = 0x1
	NL80211_RATE_INFO_EHT_GI_0_8                            = 0x0
	NL80211_RATE_INFO_EHT_GI_1_6                            = 0x1
	NL80211_RATE_INFO_EHT_GI_3_2                            = 0x2
	NL80211_RATE_INFO_EHT_GI                                = 0x15
	NL80211_RATE_INFO_EHT_MCS                               = 0x13
	NL80211_RATE_INFO_EHT_NSS                               = 0x14
	NL80211_RATE_INFO_EHT_RU_ALLOC_106                      = 0x3
	NL80211_RATE_INFO_EHT_RU_ALLOC_106P26                   = 0x4
	NL80211_RATE_INFO_EHT_RU_ALLOC_242                      = 0x5
	NL80211_RATE_INFO_EHT_RU_ALLOC_26                       = 0x0
	NL80211_RATE_INFO_EHT_RU_ALLOC_2x996                    = 0xb
	NL80211_RATE_INFO_EHT_RU_ALLOC_2x996P484                = 0xc
	NL80211_RATE_INFO_EHT_RU_ALLOC_3x996                    = 0xd
	NL80211_RATE_INFO_EHT_RU_ALLOC_3x996P484                = 0xe
	NL80211_RATE_INFO_EHT_RU_ALLOC_484                      = 0x6
	NL80211_RATE_INFO_EHT_RU_ALLOC_484P242                  = 0x7
	NL80211_RATE_INFO_EHT_RU_ALLOC_4x996                    = 0xf
	NL80211_RATE_INFO_EHT_RU_ALLOC_52                       = 0x1
	NL80211_RATE_INFO_EHT_RU_ALLOC_52P26                    = 0x2
	NL80211_RATE_INFO_EHT_RU_ALLOC_996                      = 0x8
	NL80211_RATE_INFO_EHT_RU_ALLOC_996P484                  = 0x9
	NL80211_RATE_INFO_EHT_RU_ALLOC_996P484P242              = 0xa
	NL80211_RATE_INFO_EHT_RU_ALLOC                          = 0x16
	NL80211_RATE_INFO_HE_1XLTF                              = 0x0
	NL80211_RATE_INFO_HE_2XLTF                              = 0x1
	NL80211_RATE_INFO_HE_4XLTF                              = 0x2
	NL80211_RATE_INFO_HE_DCM                                = 0x10
	NL80211_RATE_INFO_HE_GI_0_8                             = 0x0
	NL80211_RATE_INFO_HE_GI_1_6                             = 0x1
	NL80211_RATE_INFO_HE_GI_3_2                             = 0x2
	NL80211_RATE_INFO_HE_GI                                 = 0xf
	NL80211_RATE_INFO_HE_MCS                                = 0xd
	NL80211_RATE_INFO_HE_NSS                                = 0xe
	NL80211_RATE_INFO_HE_RU_ALLOC_106                       = 0x2
	NL80211_RATE_INFO_HE_RU_ALLOC_242                       = 0x3
	NL80211_RATE_INFO_HE_RU_ALLOC_26                        = 0x0
	NL80211_RATE_INFO_HE_RU_ALLOC_2x996                     = 0x6
	NL80211_RATE_INFO_HE_RU_ALLOC_484                       = 0x4
	NL80211_RATE_INFO_HE_RU_ALLOC_52                        = 0x1
	NL80211_RATE_INFO_HE_RU_ALLOC_996                       = 0x5
	NL80211_RATE_INFO_HE_RU_ALLOC                           = 0x11
	NL80211_RATE_INFO_MAX                                   = 0x16
	NL80211_RATE_INFO_MCS                                   = 0x2
	NL80211_RATE_INFO_SHORT_GI                              = 0x4
	NL80211_RATE_INFO_VHT_MCS                               = 0x6
	NL80211_RATE_INFO_VHT_NSS                               = 0x7
	NL80211_REGDOM_SET_BY_CORE                              = 0x0
	NL80211_REGDOM_SET_BY_COUNTRY_IE                        = 0x3
	NL80211_REGDOM_SET_BY_DRIVER                            = 0x2
	NL80211_REGDOM_SET_BY_USER                              = 0x1
	NL80211_REGDOM_TYPE_COUNTRY                             = 0x0
	NL80211_REGDOM_TYPE_CUSTOM_WORLD                        = 0x2
	NL80211_REGDOM_TYPE_INTERSECTION                        = 0x3
	NL80211_REGDOM_TYPE_WORLD                               = 0x1
	NL80211_REG_RULE_ATTR_MAX                               = 0x7
	NL80211_REKEY_DATA_AKM                                  = 0x4
	NL80211_REKEY_DATA_KCK                                  = 0x2
	NL80211_REKEY_DATA_KEK                                  = 0x1
	NL80211_REKEY_DATA_REPLAY_CTR                           = 0x3
	NL80211_REPLAY_CTR_LEN                                  = 0x8
	NL80211_RRF_AUTO_BW                                     = 0x800
	NL80211_RRF_DFS                                         = 0x10
	NL80211_RRF_GO_CONCURRENT                               = 0x1000
	NL80211_RRF_IR_CONCURRENT                               = 0x1000
	NL80211_RRF_NO_160MHZ                                   = 0x10000
	NL80211_RRF_NO_320MHZ                                   = 0x40000
	NL80211_RRF_NO_80MHZ                                    = 0x8000
	NL80211_RRF_NO_CCK                                      = 0x2
	NL80211_RRF_NO_HE                                       = 0x20000
	NL80211_RRF_NO_HT40                                     = 0x6000
	NL80211_RRF_NO_HT40MINUS                                = 0x2000
	NL80211_RRF_NO_HT40PLUS                                 = 0x4000
	NL80211_RRF_NO_IBSS                                     = 0x80
	NL80211_RRF_NO_INDOOR                                   = 0x4
	NL80211_RRF_NO_IR_ALL                                   = 0x180
	NL80211_RRF_NO_IR                                       = 0x80
	NL80211_RRF_NO_OFDM                                     = 0x1
	NL80211_RRF_NO_OUTDOOR                                  = 0x8
	NL80211_RRF_PASSIVE_SCAN                                = 0x80
	NL80211_RRF_PTMP_ONLY                                   = 0x40
	NL80211_RRF_PTP_ONLY                                    = 0x20
	NL80211_RXMGMT_FLAG_ANSWERED                            = 0x1
	NL80211_RXMGMT_FLAG_EXTERNAL_AUTH                       = 0x2
	NL80211_SAE_PWE_BOTH                                    = 0x3
	NL80211_SAE_PWE_HASH_TO_ELEMENT                         = 0x2
	NL80211_SAE_PWE_HUNT_AND_PECK                           = 0x1
	NL80211_SAE_PWE_UNSPECIFIED                             = 0x0
	NL80211_SAR_ATTR_MAX                                    = 0x2
	NL80211_SAR_ATTR_SPECS                                  = 0x2
	NL80211_SAR_ATTR_SPECS_END_FREQ                         = 0x4
	NL80211_SAR_ATTR_SPECS_MAX                              = 0x4
	NL80211_SAR_ATTR_SPECS_POWER                            = 0x1
	NL80211_SAR_ATTR_SPECS_RANGE_INDEX                      = 0x2
	NL80211_SAR_ATTR_SPECS_START_FREQ                       = 0x3
	NL80211_SAR_ATTR_TYPE                                   = 0x1
	NL80211_SAR_TYPE_POWER                                  = 0x0
	NL80211_SCAN_FLAG_ACCEPT_BCAST_PROBE_RESP               = 0x20
	NL80211_SCAN_FLAG_AP                                    = 0x4
	NL80211_SCAN_FLAG_COLOCATED_6GHZ                        = 0x4000
	NL80211_SCAN_FLAG_FILS_MAX_CHANNEL_TIME                 = 0x10
	NL80211_SCAN_FLAG_FLUSH                                 = 0x2
	NL80211_SCAN_FLAG_FREQ_KHZ                              = 0x2000
	NL80211_SCAN_FLAG_HIGH_ACCURACY                         = 0x400
	NL80211_SCAN_FLAG_LOW_POWER                             = 0x200
	NL80211_SCAN_FLAG_LOW_PRIORITY                          = 0x1
	NL80211_SCAN_FLAG_LOW_SPAN                              = 0x100
	NL80211_SCAN_FLAG_MIN_PREQ_CONTENT                      = 0x1000
	NL80211_SCAN_FLAG_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION    = 0x80
	NL80211_SCAN_FLAG_OCE_PROBE_REQ_HIGH_TX_RATE            = 0x40
	NL80211_SCAN_FLAG_RANDOM_ADDR                           = 0x8
	NL80211_SCAN_FLAG_RANDOM_SN                             = 0x800
	NL80211_SCAN_RSSI_THOLD_OFF                             = -0x12c
	NL80211_SCHED_SCAN_MATCH_ATTR_BSSID                     = 0x5
	NL80211_SCHED_SCAN_MATCH_ATTR_MAX                       = 0x6
	NL80211_SCHED_SCAN_MATCH_ATTR_RELATIVE_RSSI             = 0x3
	NL80211_SCHED_SCAN_MATCH_ATTR_RSSI_ADJUST               = 0x4
	NL80211_SCHED_SCAN_MATCH_ATTR_RSSI                      = 0x2
	NL80211_SCHED_SCAN_MATCH_ATTR_SSID                      = 0x1
	NL80211_SCHED_SCAN_MATCH_PER_BAND_RSSI                  = 0x6
	NL80211_SCHED_SCAN_PLAN_INTERVAL                        = 0x1
	NL80211_SCHED_SCAN_PLAN_ITERATIONS                      = 0x2
	NL80211_SCHED_SCAN_PLAN_MAX                             = 0x2
	NL80211_SMPS_DYNAMIC                                    = 0x2
	NL80211_SMPS_MAX                                        = 0x2
	NL80211_SMPS_OFF                                        = 0x0
	NL80211_SMPS_STATIC                                     = 0x1
	NL80211_STA_BSS_PARAM_BEACON_INTERVAL                   = 0x5
	NL80211_STA_BSS_PARAM_CTS_PROT                          = 0x1
	NL80211_STA_BSS_PARAM_DTIM_PERIOD                       = 0x4
	NL80211_STA_BSS_PARAM_MAX                               = 0x5
	NL80211_STA_BSS_PARAM_SHORT_PREAMBLE                    = 0x2
	NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME                   = 0x3
	NL80211_STA_FLAG_ASSOCIATED                             = 0x7
	NL80211_STA_FLAG_AUTHENTICATED                          = 0x5
	NL80211_STA_FLAG_AUTHORIZED                             = 0x1
	NL80211_STA_FLAG_MAX                                    = 0x7
	NL80211_STA_FLAG_MAX_OLD_API                            = 0x6
	NL80211_STA_FLAG_MFP                                    = 0x4
	NL80211_STA_FLAG_SHORT_PREAMBLE                         = 0x2
	NL80211_STA_FLAG_TDLS_PEER                              = 0x6
	NL80211_STA_FLAG_WME                                    = 0x3
	NL80211_STA_INFO_ACK_SIGNAL_AVG                         = 0x23
	NL80211_STA_INFO_ACK_SIGNAL                             = 0x22
	NL80211_STA_INFO_AIRTIME_LINK_METRIC                    = 0x29
	NL80211_STA_INFO_AIRTIME_WEIGHT                         = 0x28
	NL80211_STA_INFO_ASSOC_AT_BOOTTIME                      = 0x2a
	NL80211_STA_INFO_BEACON_LOSS                            = 0x12
	NL80211_STA_INFO_BEACON_RX                              = 0x1d
	NL80211_STA_INFO_BEACON_SIGNAL_AVG                      = 0x1e
	NL80211_STA_INFO_BSS_PARAM                              = 0xf
	NL80211_STA_INFO_CHAIN_SIGNAL_AVG                       = 0x1a
	NL80211_STA_INFO_CHAIN_SIGNAL                           = 0x19
	NL80211_STA_INFO_CONNECTED_TIME                         = 0x10
	NL80211_STA_INFO_CONNECTED_TO_AS                        = 0x2b
	NL80211_STA_INFO_CONNECTED_TO_GATE                      = 0x26
	NL80211_STA_INFO_DATA_ACK_SIGNAL_AVG                    = 0x23
	NL80211_STA_INFO_EXPECTED_THROUGHPUT                    = 0x1b
	NL80211_STA_INFO_FCS_ERROR_COUNT                        = 0x25
	NL80211_STA_INFO_INACTIVE_TIME                          = 0x1
	NL80211_STA_INFO_LLID                                   = 0x4
	NL80211_STA_INFO_LOCAL_PM                               = 0x14
	NL80211_STA_INFO_MAX                                    = 0x2b
	NL80211_STA_INFO_NONPEER_PM                             = 0x16
	NL80211_STA_INFO_PAD                                    = 0x21
	NL80211_STA_INFO_PEER_PM                                = 0x15
	NL80211_STA_INFO_PLID                                   = 0x5
	NL80211_STA_INFO_PLINK_STATE                            = 0x6
	NL80211_STA_INFO_RX_BITRATE                             = 0xe
	NL80211_STA_INFO_RX_BYTES64                             = 0x17
	NL80211_STA_INFO_RX_BYTES                               = 0x2
	NL80211_STA_INFO_RX_DROP_MISC                           = 0x1c
	NL80211_STA_INFO_RX_DURATION                            = 0x20
	NL80211_STA_INFO_RX_MPDUS                               = 0x24
	NL80211_STA_INFO_RX_PACKETS                             = 0x9
	NL80211_STA_INFO_SIGNAL_AVG                             = 0xd
	NL80211_STA_INFO_SIGNAL                                 = 0x7
	NL80211_STA_INFO_STA_FLAGS                              = 0x11
	NL80211_STA_INFO_TID_STATS                              = 0x1f
	NL80211_STA_INFO_T_OFFSET                               = 0x13
	NL80211_STA_INFO_TX_BITRATE                             = 0x8
	NL80211_STA_INFO_TX_BYTES64                             = 0x18
	NL80211_STA_INFO_TX_BYTES                               = 0x3
	NL80211_STA_INFO_TX_DURATION                            = 0x27
	NL80211_STA_INFO_TX_FAILED                              = 0xc
	NL80211_STA_INFO_TX_PACKETS                             = 0xa
	NL80211_STA_INFO_TX_RETRIES                             = 0xb
	NL80211_STA_WME_MAX                                     = 0x2
	NL80211_STA_WME_MAX_SP                                  = 0x2
	NL80211_STA_WME_UAPSD_QUEUES                            = 0x1
	NL80211_SURVEY_INFO_CHANNEL_TIME_BUSY                   = 0x5
	NL80211_SURVEY_INFO_CHANNEL_TIME                        = 0x4
	NL80211_SURVEY_INFO_CHANNEL_TIME_EXT_BUSY               = 0x6
	NL80211_SURVEY_INFO_CHANNEL_TIME_RX                     = 0x7
	NL80211_SURVEY_INFO_CHANNEL_TIME_TX                     = 0x8
	NL80211_SURVEY_INFO_FREQUENCY                           = 0x1
	NL80211_SURVEY_INFO_FREQUENCY_OFFSET                    = 0xc
	NL80211_SURVEY_INFO_IN_USE                              = 0x3
	NL80211_SURVEY_INFO_MAX                                 = 0xc
	NL80211_SURVEY_INFO_NOISE                               = 0x2
	NL80211_SURVEY_INFO_PAD                                 = 0xa
	NL80211_SURVEY_INFO_TIME_BSS_RX                         = 0xb
	NL80211_SURVEY_INFO_TIME_BUSY                           = 0x5
	NL80211_SURVEY_INFO_TIME                                = 0x4
	NL80211_SURVEY_INFO_TIME_EXT_BUSY                       = 0x6
	NL80211_SURVEY_INFO_TIME_RX                             = 0x7
	NL80211_SURVEY_INFO_TIME_SCAN                           = 0x9
	NL80211_SURVEY_INFO_TIME_TX                             = 0x8
	NL80211_TDLS_DISABLE_LINK                               = 0x4
	NL80211_TDLS_DISCOVERY_REQ                              = 0x0
	NL80211_TDLS_ENABLE_LINK                                = 0x3
	NL80211_TDLS_PEER_HE                                    = 0x8
	NL80211_TDLS_PEER_HT                                    = 0x1
	NL80211_TDLS_PEER_VHT                                   = 0x2
	NL80211_TDLS_PEER_WMM                                   = 0x4
	NL80211_TDLS_SETUP                                      = 0x1
	NL80211_TDLS_TEARDOWN                                   = 0x2
	NL80211_TID_CONFIG_ATTR_AMPDU_CTRL                      = 0x9
	NL80211_TID_CONFIG_ATTR_AMSDU_CTRL                      = 0xb
	NL80211_TID_CONFIG_ATTR_MAX                             = 0xd
	NL80211_TID_CONFIG_ATTR_NOACK                           = 0x6
	NL80211_TID_CONFIG_ATTR_OVERRIDE                        = 0x4
	NL80211_TID_CONFIG_ATTR_PAD                             = 0x1
	NL80211_TID_CONFIG_ATTR_PEER_SUPP                       = 0x3
	NL80211_TID_CONFIG_ATTR_RETRY_LONG                      = 0x8
	NL80211_TID_CONFIG_ATTR_RETRY_SHORT                     = 0x7
	NL80211_TID_CONFIG_ATTR_RTSCTS_CTRL                     = 0xa
	NL80211_TID_CONFIG_ATTR_TIDS                            = 0x5
	NL80211_TID_CONFIG_ATTR_TX_RATE                         = 0xd
	NL80211_TID_CONFIG_ATTR_TX_RATE_TYPE                    = 0xc
	NL80211_TID_CONFIG_ATTR_VIF_SUPP                        = 0x2
	NL80211_TID_CONFIG_DISABLE                              = 0x1
	NL80211_TID_CONFIG_ENABLE                               = 0x0
	NL80211_TID_STATS_MAX                                   = 0x6
	NL80211_TID_STATS_PAD                                   = 0x5
	NL80211_TID_STATS_RX_MSDU                               = 0x1
	NL80211_TID_STATS_TX_MSDU                               = 0x2
	NL80211_TID_STATS_TX_MSDU_FAILED                        = 0x4
	NL80211_TID_STATS_TX_MSDU_RETRIES                       = 0x3
	NL80211_TID_STATS_TXQ_STATS                             = 0x6
	NL80211_TIMEOUT_ASSOC                                   = 0x3
	NL80211_TIMEOUT_AUTH                                    = 0x2
	NL80211_TIMEOUT_SCAN                                    = 0x1
	NL80211_TIMEOUT_UNSPECIFIED                             = 0x0
	NL80211_TKIP_DATA_OFFSET_ENCR_KEY                       = 0x0
	NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY                     = 0x18
	NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY                     = 0x10
	NL80211_TX_POWER_AUTOMATIC                              = 0x0
	NL80211_TX_POWER_FIXED                                  = 0x2
	NL80211_TX_POWER_LIMITED                                = 0x1
	NL80211_TXQ_ATTR_AC                                     = 0x1
	NL80211_TXQ_ATTR_AIFS                                   = 0x5
	NL80211_TXQ_ATTR_CWMAX                                  = 0x4
	NL80211_TXQ_ATTR_CWMIN                                  = 0x3
	NL80211_TXQ_ATTR_MAX                                    = 0x5
	NL80211_TXQ_ATTR_QUEUE                                  = 0x1
	NL80211_TXQ_ATTR_TXOP                                   = 0x2
	NL80211_TXQ_Q_BE                                        = 0x2
	NL80211_TXQ_Q_BK                                        = 0x3
	NL80211_TXQ_Q_VI                                        = 0x1
	NL80211_TXQ_Q_VO                                        = 0x0
	NL80211_TXQ_STATS_BACKLOG_BYTES                         = 0x1
	NL80211_TXQ_STATS_BACKLOG_PACKETS                       = 0x2
	NL80211_TXQ_STATS_COLLISIONS                            = 0x8
	NL80211_TXQ_STATS_DROPS                                 = 0x4
	NL80211_TXQ_STATS_ECN_MARKS                             = 0x5
	NL80211_TXQ_STATS_FLOWS                                 = 0x3
	NL80211_TXQ_STATS_MAX                                   = 0xb
	NL80211_TXQ_STATS_MAX_FLOWS                             = 0xb
	NL80211_TXQ_STATS_OVERLIMIT                             = 0x6
	NL80211_TXQ_STATS_OVERMEMORY                            = 0x7
	NL80211_TXQ_STATS_TX_BYTES                              = 0x9
	NL80211_TXQ_STATS_TX_PACKETS                            = 0xa
	NL80211_TX_RATE_AUTOMATIC                               = 0x0
	NL80211_TXRATE_DEFAULT_GI                               = 0x0
	NL80211_TX_RATE_FIXED                                   = 0x2
	NL80211_TXRATE_FORCE_LGI                                = 0x2
	NL80211_TXRATE_FORCE_SGI                                = 0x1
	NL80211_TXRATE_GI                                       = 0x4
	NL80211_TXRATE_HE                                       = 0x5
	NL80211_TXRATE_HE_GI                                    = 0x6
	NL80211_TXRATE_HE_LTF                                   = 0x7
	NL80211_TXRATE_HT                                       = 0x2
	NL80211_TXRATE_LEGACY                                   = 0x1
	NL80211_TX_RATE_LIMITED                                 = 0x1
	NL80211_TXRATE_MAX                                      = 0x7
	NL80211_TXRATE_MCS                                      = 0x2
	NL80211_TXRATE_VHT                                      = 0x3
	NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_INT                 = 0x1
	NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_MAX                 = 0x2
	NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_TMPL                = 0x2
	NL80211_USER_REG_HINT_CELL_BASE                         = 0x1
	NL80211_USER_REG_HINT_INDOOR                            = 0x2
	NL80211_USER_REG_HINT_USER                              = 0x0
	NL80211_VENDOR_ID_IS_LINUX                              = 0x80000000
	NL80211_VHT_CAPABILITY_LEN                              = 0xc
	NL80211_VHT_NSS_MAX                                     = 0x8
	NL80211_WIPHY_NAME_MAXLEN                               = 0x40
	NL80211_WMMR_AIFSN                                      = 0x3
	NL80211_WMMR_CW_MAX                                     = 0x2
	NL80211_WMMR_CW_MIN                                     = 0x1
	NL80211_WMMR_MAX                                        = 0x4
	NL80211_WMMR_TXOP                                       = 0x4
	NL80211_WOWLAN_PKTPAT_MASK                              = 0x1
	NL80211_WOWLAN_PKTPAT_OFFSET                            = 0x3
	NL80211_WOWLAN_PKTPAT_PATTERN                           = 0x2
	NL80211_WOWLAN_TCP_DATA_INTERVAL                        = 0x9
	NL80211_WOWLAN_TCP_DATA_PAYLOAD                         = 0x6
	NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ                     = 0x7
	NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN                   = 0x8
	NL80211_WOWLAN_TCP_DST_IPV4                             = 0x2
	NL80211_WOWLAN_TCP_DST_MAC                              = 0x3
	NL80211_WOWLAN_TCP_DST_PORT                             = 0x5
	NL80211_WOWLAN_TCP_SRC_IPV4                             = 0x1
	NL80211_WOWLAN_TCP_SRC_PORT                             = 0x4
	NL80211_WOWLAN_TCP_WAKE_MASK                            = 0xb
	NL80211_WOWLAN_TCP_WAKE_PAYLOAD                         = 0xa
	NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE                      = 0x8
	NL80211_WOWLAN_TRIG_ANY                                 = 0x1
	NL80211_WOWLAN_TRIG_DISCONNECT                          = 0x2
	NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST                   = 0x7
	NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE                   = 0x6
	NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED                 = 0x5
	NL80211_WOWLAN_TRIG_MAGIC_PKT                           = 0x3
	NL80211_WOWLAN_TRIG_NET_DETECT                          = 0x12
	NL80211_WOWLAN_TRIG_NET_DETECT_RESULTS                  = 0x13
	NL80211_WOWLAN_TRIG_PKT_PATTERN                         = 0x4
	NL80211_WOWLAN_TRIG_RFKILL_RELEASE                      = 0x9
	NL80211_WOWLAN_TRIG_TCP_CONNECTION                      = 0xe
	NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211                    = 0xa
	NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211_LEN                = 0xb
	NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023                     = 0xc
	NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023_LEN                 = 0xd
	NL80211_WOWLAN_TRIG_WAKEUP_TCP_CONNLOST                 = 0x10
	NL80211_WOWLAN_TRIG_WAKEUP_TCP_MATCH                    = 0xf
	NL80211_WOWLAN_TRIG_WAKEUP_TCP_NOMORETOKENS             = 0x11
	NL80211_WPA_VERSION_1                                   = 0x1
	NL80211_WPA_VERSION_2                                   = 0x2
	NL80211_WPA_VERSION_3                                   = 0x4
)

const (
	FRA_UNSPEC             = 0x0
	FRA_DST                = 0x1
	FRA_SRC                = 0x2
	FRA_IIFNAME            = 0x3
	FRA_GOTO               = 0x4
	FRA_UNUSED2            = 0x5
	FRA_PRIORITY           = 0x6
	FRA_UNUSED3            = 0x7
	FRA_UNUSED4            = 0x8
	FRA_UNUSED5            = 0x9
	FRA_FWMARK             = 0xa
	FRA_FLOW               = 0xb
	FRA_TUN_ID             = 0xc
	FRA_SUPPRESS_IFGROUP   = 0xd
	FRA_SUPPRESS_PREFIXLEN = 0xe
	FRA_TABLE              = 0xf
	FRA_FWMASK             = 0x10
	FRA_OIFNAME            = 0x11
	FRA_PAD                = 0x12
	FRA_L3MDEV             = 0x13
	FRA_UID_RANGE          = 0x14
	FRA_PROTOCOL           = 0x15
	FRA_IP_PROTO           = 0x16
	FRA_SPORT_RANGE        = 0x17
	FRA_DPORT_RANGE        = 0x18
	FR_ACT_UNSPEC          = 0x0
	FR_ACT_TO_TBL          = 0x1
	FR_ACT_GOTO            = 0x2
	FR_ACT_NOP             = 0x3
	FR_ACT_RES3            = 0x4
	FR_ACT_RES4            = 0x5
	FR_ACT_BLACKHOLE       = 0x6
	FR_ACT_UNREACHABLE     = 0x7
	FR_ACT_PROHIBIT        = 0x8
)

const (
	AUDIT_NLGRP_NONE    = 0x0
	AUDIT_NLGRP_READLOG = 0x1
)

const (
	TUN_F_CSUM    = 0x1
	TUN_F_TSO4    = 0x2
	TUN_F_TSO6    = 0x4
	TUN_F_TSO_ECN = 0x8
	TUN_F_UFO     = 0x10
)

const (
	VIRTIO_NET_HDR_F_NEEDS_CSUM = 0x1
	VIRTIO_NET_HDR_F_DATA_VALID = 0x2
	VIRTIO_NET_HDR_F_RSC_INFO   = 0x4
)

const (
	VIRTIO_NET_HDR_GSO_NONE  = 0x0
	VIRTIO_NET_HDR_GSO_TCPV4 = 0x1
	VIRTIO_NET_HDR_GSO_UDP   = 0x3
	VIRTIO_NET_HDR_GSO_TCPV6 = 0x4
	VIRTIO_NET_HDR_GSO_ECN   = 0x80
)
  07070100000EB4000081A4000000000000000000000001645E367C0000314A000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_linux_386.go  // cgo -godefs -objdir=/tmp/386/cgo -- -Wall -Werror -static -I/tmp/386/include -m32 linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build 386 && linux
// +build 386,linux

package unix

const (
	SizeofPtr  = 0x4
	SizeofLong = 0x4
)

type (
	_C_long int32
)

type Timespec struct {
	Sec  int32
	Nsec int32
}

type Timeval struct {
	Sec  int32
	Usec int32
}

type Timex struct {
	Modes     uint32
	Offset    int32
	Freq      int32
	Maxerror  int32
	Esterror  int32
	Status    int32
	Constant  int32
	Precision int32
	Tolerance int32
	Time      Timeval
	Tick      int32
	Ppsfreq   int32
	Jitter    int32
	Shift     int32
	Stabil    int32
	Jitcnt    int32
	Calcnt    int32
	Errcnt    int32
	Stbcnt    int32
	Tai       int32
	_         [44]byte
}

type Time_t int32

type Tms struct {
	Utime  int32
	Stime  int32
	Cutime int32
	Cstime int32
}

type Utimbuf struct {
	Actime  int32
	Modtime int32
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int32
	Ixrss    int32
	Idrss    int32
	Isrss    int32
	Minflt   int32
	Majflt   int32
	Nswap    int32
	Inblock  int32
	Oublock  int32
	Msgsnd   int32
	Msgrcv   int32
	Nsignals int32
	Nvcsw    int32
	Nivcsw   int32
}

type Stat_t struct {
	Dev     uint64
	_       uint16
	_       uint32
	Mode    uint32
	Nlink   uint32
	Uid     uint32
	Gid     uint32
	Rdev    uint64
	_       uint16
	Size    int64
	Blksize int32
	Blocks  int64
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	Ino     uint64
}

type Dirent struct {
	Ino    uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Name   [256]int8
	_      [1]byte
}

type Flock_t struct {
	Type   int16
	Whence int16
	Start  int64
	Len    int64
	Pid    int32
}

type DmNameList struct {
	Dev  uint64
	Next uint32
}

const (
	FADV_DONTNEED = 0x4
	FADV_NOREUSE  = 0x5
)

type RawSockaddrNFCLLCP struct {
	Sa_family        uint16
	Dev_idx          uint32
	Target_idx       uint32
	Nfc_protocol     uint32
	Dsap             uint8
	Ssap             uint8
	Service_name     [63]uint8
	Service_name_len uint32
}

type RawSockaddr struct {
	Family uint16
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [96]int8
}

type Iovec struct {
	Base *byte
	Len  uint32
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     uint32
	Control    *byte
	Controllen uint32
	Flags      int32
}

type Cmsghdr struct {
	Len   uint32
	Level int32
	Type  int32
}

type ifreq struct {
	Ifrn [16]byte
	Ifru [16]byte
}

const (
	SizeofSockaddrNFCLLCP = 0x58
	SizeofIovec           = 0x8
	SizeofMsghdr          = 0x1c
	SizeofCmsghdr         = 0xc
)

const (
	SizeofSockFprog = 0x8
)

type PtraceRegs struct {
	Ebx      int32
	Ecx      int32
	Edx      int32
	Esi      int32
	Edi      int32
	Ebp      int32
	Eax      int32
	Xds      int32
	Xes      int32
	Xfs      int32
	Xgs      int32
	Orig_eax int32
	Eip      int32
	Xcs      int32
	Eflags   int32
	Esp      int32
	Xss      int32
}

type FdSet struct {
	Bits [32]int32
}

type Sysinfo_t struct {
	Uptime    int32
	Loads     [3]uint32
	Totalram  uint32
	Freeram   uint32
	Sharedram uint32
	Bufferram uint32
	Totalswap uint32
	Freeswap  uint32
	Procs     uint16
	Pad       uint16
	Totalhigh uint32
	Freehigh  uint32
	Unit      uint32
	_         [8]int8
}

type Ustat_t struct {
	Tfree  int32
	Tinode uint32
	Fname  [6]int8
	Fpack  [6]int8
}

type EpollEvent struct {
	Events uint32
	Fd     int32
	Pad    int32
}

const (
	OPEN_TREE_CLOEXEC = 0x80000
)

const (
	POLLRDHUP = 0x2000
)

type Sigset_t struct {
	Val [32]uint32
}

const _C__NSIG = 0x41

const (
	SIG_BLOCK   = 0x0
	SIG_UNBLOCK = 0x1
	SIG_SETMASK = 0x2
)

type Siginfo struct {
	Signo int32
	Errno int32
	Code  int32
	_     [116]byte
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Line   uint8
	Cc     [19]uint8
	Ispeed uint32
	Ospeed uint32
}

type Taskstats struct {
	Version                   uint16
	Ac_exitcode               uint32
	Ac_flag                   uint8
	Ac_nice                   uint8
	_                         [4]byte
	Cpu_count                 uint64
	Cpu_delay_total           uint64
	Blkio_count               uint64
	Blkio_delay_total         uint64
	Swapin_count              uint64
	Swapin_delay_total        uint64
	Cpu_run_real_total        uint64
	Cpu_run_virtual_total     uint64
	Ac_comm                   [32]int8
	Ac_sched                  uint8
	Ac_pad                    [3]uint8
	_                         [4]byte
	Ac_uid                    uint32
	Ac_gid                    uint32
	Ac_pid                    uint32
	Ac_ppid                   uint32
	Ac_btime                  uint32
	_                         [4]byte
	Ac_etime                  uint64
	Ac_utime                  uint64
	Ac_stime                  uint64
	Ac_minflt                 uint64
	Ac_majflt                 uint64
	Coremem                   uint64
	Virtmem                   uint64
	Hiwater_rss               uint64
	Hiwater_vm                uint64
	Read_char                 uint64
	Write_char                uint64
	Read_syscalls             uint64
	Write_syscalls            uint64
	Read_bytes                uint64
	Write_bytes               uint64
	Cancelled_write_bytes     uint64
	Nvcsw                     uint64
	Nivcsw                    uint64
	Ac_utimescaled            uint64
	Ac_stimescaled            uint64
	Cpu_scaled_run_real_total uint64
	Freepages_count           uint64
	Freepages_delay_total     uint64
	Thrashing_count           uint64
	Thrashing_delay_total     uint64
	Ac_btime64                uint64
	Compact_count             uint64
	Compact_delay_total       uint64
	Ac_tgid                   uint32
	_                         [4]byte
	Ac_tgetime                uint64
	Ac_exe_dev                uint64
	Ac_exe_inode              uint64
	Wpcopy_count              uint64
	Wpcopy_delay_total        uint64
}

type cpuMask uint32

const (
	_NCPUBITS = 0x20
)

const (
	CBitFieldMaskBit0  = 0x1
	CBitFieldMaskBit1  = 0x2
	CBitFieldMaskBit2  = 0x4
	CBitFieldMaskBit3  = 0x8
	CBitFieldMaskBit4  = 0x10
	CBitFieldMaskBit5  = 0x20
	CBitFieldMaskBit6  = 0x40
	CBitFieldMaskBit7  = 0x80
	CBitFieldMaskBit8  = 0x100
	CBitFieldMaskBit9  = 0x200
	CBitFieldMaskBit10 = 0x400
	CBitFieldMaskBit11 = 0x800
	CBitFieldMaskBit12 = 0x1000
	CBitFieldMaskBit13 = 0x2000
	CBitFieldMaskBit14 = 0x4000
	CBitFieldMaskBit15 = 0x8000
	CBitFieldMaskBit16 = 0x10000
	CBitFieldMaskBit17 = 0x20000
	CBitFieldMaskBit18 = 0x40000
	CBitFieldMaskBit19 = 0x80000
	CBitFieldMaskBit20 = 0x100000
	CBitFieldMaskBit21 = 0x200000
	CBitFieldMaskBit22 = 0x400000
	CBitFieldMaskBit23 = 0x800000
	CBitFieldMaskBit24 = 0x1000000
	CBitFieldMaskBit25 = 0x2000000
	CBitFieldMaskBit26 = 0x4000000
	CBitFieldMaskBit27 = 0x8000000
	CBitFieldMaskBit28 = 0x10000000
	CBitFieldMaskBit29 = 0x20000000
	CBitFieldMaskBit30 = 0x40000000
	CBitFieldMaskBit31 = 0x80000000
	CBitFieldMaskBit32 = 0x100000000
	CBitFieldMaskBit33 = 0x200000000
	CBitFieldMaskBit34 = 0x400000000
	CBitFieldMaskBit35 = 0x800000000
	CBitFieldMaskBit36 = 0x1000000000
	CBitFieldMaskBit37 = 0x2000000000
	CBitFieldMaskBit38 = 0x4000000000
	CBitFieldMaskBit39 = 0x8000000000
	CBitFieldMaskBit40 = 0x10000000000
	CBitFieldMaskBit41 = 0x20000000000
	CBitFieldMaskBit42 = 0x40000000000
	CBitFieldMaskBit43 = 0x80000000000
	CBitFieldMaskBit44 = 0x100000000000
	CBitFieldMaskBit45 = 0x200000000000
	CBitFieldMaskBit46 = 0x400000000000
	CBitFieldMaskBit47 = 0x800000000000
	CBitFieldMaskBit48 = 0x1000000000000
	CBitFieldMaskBit49 = 0x2000000000000
	CBitFieldMaskBit50 = 0x4000000000000
	CBitFieldMaskBit51 = 0x8000000000000
	CBitFieldMaskBit52 = 0x10000000000000
	CBitFieldMaskBit53 = 0x20000000000000
	CBitFieldMaskBit54 = 0x40000000000000
	CBitFieldMaskBit55 = 0x80000000000000
	CBitFieldMaskBit56 = 0x100000000000000
	CBitFieldMaskBit57 = 0x200000000000000
	CBitFieldMaskBit58 = 0x400000000000000
	CBitFieldMaskBit59 = 0x800000000000000
	CBitFieldMaskBit60 = 0x1000000000000000
	CBitFieldMaskBit61 = 0x2000000000000000
	CBitFieldMaskBit62 = 0x4000000000000000
	CBitFieldMaskBit63 = 0x8000000000000000
)

type SockaddrStorage struct {
	Family uint16
	Data   [122]byte
	_      uint32
}

type HDGeometry struct {
	Heads     uint8
	Sectors   uint8
	Cylinders uint16
	Start     uint32
}

type Statfs_t struct {
	Type    int32
	Bsize   int32
	Blocks  uint64
	Bfree   uint64
	Bavail  uint64
	Files   uint64
	Ffree   uint64
	Fsid    Fsid
	Namelen int32
	Frsize  int32
	Flags   int32
	Spare   [4]int32
}

type TpacketHdr struct {
	Status  uint32
	Len     uint32
	Snaplen uint32
	Mac     uint16
	Net     uint16
	Sec     uint32
	Usec    uint32
}

const (
	SizeofTpacketHdr = 0x18
)

type RTCPLLInfo struct {
	Ctrl    int32
	Value   int32
	Max     int32
	Min     int32
	Posmult int32
	Negmult int32
	Clock   int32
}

type BlkpgPartition struct {
	Start   int64
	Length  int64
	Pno     int32
	Devname [64]uint8
	Volname [64]uint8
}

const (
	BLKPG = 0x1269
)

type XDPUmemReg struct {
	Addr     uint64
	Len      uint64
	Size     uint32
	Headroom uint32
	Flags    uint32
}

type CryptoUserAlg struct {
	Name        [64]int8
	Driver_name [64]int8
	Module_name [64]int8
	Type        uint32
	Mask        uint32
	Refcnt      uint32
	Flags       uint32
}

type CryptoStatAEAD struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatAKCipher struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Verify_cnt   uint64
	Sign_cnt     uint64
	Err_cnt      uint64
}

type CryptoStatCipher struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatCompress struct {
	Type            [64]int8
	Compress_cnt    uint64
	Compress_tlen   uint64
	Decompress_cnt  uint64
	Decompress_tlen uint64
	Err_cnt         uint64
}

type CryptoStatHash struct {
	Type      [64]int8
	Hash_cnt  uint64
	Hash_tlen uint64
	Err_cnt   uint64
}

type CryptoStatKPP struct {
	Type                      [64]int8
	Setsecret_cnt             uint64
	Generate_public_key_cnt   uint64
	Compute_shared_secret_cnt uint64
	Err_cnt                   uint64
}

type CryptoStatRNG struct {
	Type          [64]int8
	Generate_cnt  uint64
	Generate_tlen uint64
	Seed_cnt      uint64
	Err_cnt       uint64
}

type CryptoStatLarval struct {
	Type [64]int8
}

type CryptoReportLarval struct {
	Type [64]int8
}

type CryptoReportHash struct {
	Type       [64]int8
	Blocksize  uint32
	Digestsize uint32
}

type CryptoReportCipher struct {
	Type        [64]int8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
}

type CryptoReportBlkCipher struct {
	Type        [64]int8
	Geniv       [64]int8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
	Ivsize      uint32
}

type CryptoReportAEAD struct {
	Type        [64]int8
	Geniv       [64]int8
	Blocksize   uint32
	Maxauthsize uint32
	Ivsize      uint32
}

type CryptoReportComp struct {
	Type [64]int8
}

type CryptoReportRNG struct {
	Type     [64]int8
	Seedsize uint32
}

type CryptoReportAKCipher struct {
	Type [64]int8
}

type CryptoReportKPP struct {
	Type [64]int8
}

type CryptoReportAcomp struct {
	Type [64]int8
}

type LoopInfo struct {
	Number           int32
	Device           uint16
	Inode            uint32
	Rdevice          uint16
	Offset           int32
	Encrypt_type     int32
	Encrypt_key_size int32
	Flags            int32
	Name             [64]int8
	Encrypt_key      [32]uint8
	Init             [2]uint32
	Reserved         [4]int8
}

type TIPCSubscr struct {
	Seq     TIPCServiceRange
	Timeout uint32
	Filter  uint32
	Handle  [8]int8
}

type TIPCSIOCLNReq struct {
	Peer     uint32
	Id       uint32
	Linkname [68]int8
}

type TIPCSIOCNodeIDReq struct {
	Peer uint32
	Id   [16]int8
}

type PPSKInfo struct {
	Assert_sequence uint32
	Clear_sequence  uint32
	Assert_tu       PPSKTime
	Clear_tu        PPSKTime
	Current_mode    int32
}

const (
	PPS_GETPARAMS = 0x800470a1
	PPS_SETPARAMS = 0x400470a2
	PPS_GETCAP    = 0x800470a3
	PPS_FETCH     = 0xc00470a4
)

const (
	PIDFD_NONBLOCK = 0x800
)

type SysvIpcPerm struct {
	Key  int32
	Uid  uint32
	Gid  uint32
	Cuid uint32
	Cgid uint32
	Mode uint16
	_    [2]uint8
	Seq  uint16
	_    uint16
	_    uint32
	_    uint32
}
type SysvShmDesc struct {
	Perm       SysvIpcPerm
	Segsz      uint32
	Atime      uint32
	Atime_high uint32
	Dtime      uint32
	Dtime_high uint32
	Ctime      uint32
	Ctime_high uint32
	Cpid       int32
	Lpid       int32
	Nattch     uint32
	_          uint32
	_          uint32
}
  07070100000EB5000081A4000000000000000000000001645E367C0000320B000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go    // cgo -godefs -objdir=/tmp/amd64/cgo -- -Wall -Werror -static -I/tmp/amd64/include -m64 linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build amd64 && linux
// +build amd64,linux

package unix

const (
	SizeofPtr  = 0x8
	SizeofLong = 0x8
)

type (
	_C_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int64
}

type Timeval struct {
	Sec  int64
	Usec int64
}

type Timex struct {
	Modes     uint32
	Offset    int64
	Freq      int64
	Maxerror  int64
	Esterror  int64
	Status    int32
	Constant  int64
	Precision int64
	Tolerance int64
	Time      Timeval
	Tick      int64
	Ppsfreq   int64
	Jitter    int64
	Shift     int32
	Stabil    int64
	Jitcnt    int64
	Calcnt    int64
	Errcnt    int64
	Stbcnt    int64
	Tai       int32
	_         [44]byte
}

type Time_t int64

type Tms struct {
	Utime  int64
	Stime  int64
	Cutime int64
	Cstime int64
}

type Utimbuf struct {
	Actime  int64
	Modtime int64
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int64
	Ixrss    int64
	Idrss    int64
	Isrss    int64
	Minflt   int64
	Majflt   int64
	Nswap    int64
	Inblock  int64
	Oublock  int64
	Msgsnd   int64
	Msgrcv   int64
	Nsignals int64
	Nvcsw    int64
	Nivcsw   int64
}

type Stat_t struct {
	Dev     uint64
	Ino     uint64
	Nlink   uint64
	Mode    uint32
	Uid     uint32
	Gid     uint32
	_       int32
	Rdev    uint64
	Size    int64
	Blksize int64
	Blocks  int64
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	_       [3]int64
}

type Dirent struct {
	Ino    uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Name   [256]int8
	_      [5]byte
}

type Flock_t struct {
	Type   int16
	Whence int16
	Start  int64
	Len    int64
	Pid    int32
	_      [4]byte
}

type DmNameList struct {
	Dev  uint64
	Next uint32
	Name [0]byte
	_    [4]byte
}

const (
	FADV_DONTNEED = 0x4
	FADV_NOREUSE  = 0x5
)

type RawSockaddrNFCLLCP struct {
	Sa_family        uint16
	Dev_idx          uint32
	Target_idx       uint32
	Nfc_protocol     uint32
	Dsap             uint8
	Ssap             uint8
	Service_name     [63]uint8
	Service_name_len uint64
}

type RawSockaddr struct {
	Family uint16
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [96]int8
}

type Iovec struct {
	Base *byte
	Len  uint64
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     uint64
	Control    *byte
	Controllen uint64
	Flags      int32
	_          [4]byte
}

type Cmsghdr struct {
	Len   uint64
	Level int32
	Type  int32
}

type ifreq struct {
	Ifrn [16]byte
	Ifru [24]byte
}

const (
	SizeofSockaddrNFCLLCP = 0x60
	SizeofIovec           = 0x10
	SizeofMsghdr          = 0x38
	SizeofCmsghdr         = 0x10
)

const (
	SizeofSockFprog = 0x10
)

type PtraceRegs struct {
	R15      uint64
	R14      uint64
	R13      uint64
	R12      uint64
	Rbp      uint64
	Rbx      uint64
	R11      uint64
	R10      uint64
	R9       uint64
	R8       uint64
	Rax      uint64
	Rcx      uint64
	Rdx      uint64
	Rsi      uint64
	Rdi      uint64
	Orig_rax uint64
	Rip      uint64
	Cs       uint64
	Eflags   uint64
	Rsp      uint64
	Ss       uint64
	Fs_base  uint64
	Gs_base  uint64
	Ds       uint64
	Es       uint64
	Fs       uint64
	Gs       uint64
}

type FdSet struct {
	Bits [16]int64
}

type Sysinfo_t struct {
	Uptime    int64
	Loads     [3]uint64
	Totalram  uint64
	Freeram   uint64
	Sharedram uint64
	Bufferram uint64
	Totalswap uint64
	Freeswap  uint64
	Procs     uint16
	Pad       uint16
	Totalhigh uint64
	Freehigh  uint64
	Unit      uint32
	_         [0]int8
	_         [4]byte
}

type Ustat_t struct {
	Tfree  int32
	Tinode uint64
	Fname  [6]int8
	Fpack  [6]int8
	_      [4]byte
}

type EpollEvent struct {
	Events uint32
	Fd     int32
	Pad    int32
}

const (
	OPEN_TREE_CLOEXEC = 0x80000
)

const (
	POLLRDHUP = 0x2000
)

type Sigset_t struct {
	Val [16]uint64
}

const _C__NSIG = 0x41

const (
	SIG_BLOCK   = 0x0
	SIG_UNBLOCK = 0x1
	SIG_SETMASK = 0x2
)

type Siginfo struct {
	Signo int32
	Errno int32
	Code  int32
	_     int32
	_     [112]byte
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Line   uint8
	Cc     [19]uint8
	Ispeed uint32
	Ospeed uint32
}

type Taskstats struct {
	Version                   uint16
	Ac_exitcode               uint32
	Ac_flag                   uint8
	Ac_nice                   uint8
	Cpu_count                 uint64
	Cpu_delay_total           uint64
	Blkio_count               uint64
	Blkio_delay_total         uint64
	Swapin_count              uint64
	Swapin_delay_total        uint64
	Cpu_run_real_total        uint64
	Cpu_run_virtual_total     uint64
	Ac_comm                   [32]int8
	Ac_sched                  uint8
	Ac_pad                    [3]uint8
	_                         [4]byte
	Ac_uid                    uint32
	Ac_gid                    uint32
	Ac_pid                    uint32
	Ac_ppid                   uint32
	Ac_btime                  uint32
	Ac_etime                  uint64
	Ac_utime                  uint64
	Ac_stime                  uint64
	Ac_minflt                 uint64
	Ac_majflt                 uint64
	Coremem                   uint64
	Virtmem                   uint64
	Hiwater_rss               uint64
	Hiwater_vm                uint64
	Read_char                 uint64
	Write_char                uint64
	Read_syscalls             uint64
	Write_syscalls            uint64
	Read_bytes                uint64
	Write_bytes               uint64
	Cancelled_write_bytes     uint64
	Nvcsw                     uint64
	Nivcsw                    uint64
	Ac_utimescaled            uint64
	Ac_stimescaled            uint64
	Cpu_scaled_run_real_total uint64
	Freepages_count           uint64
	Freepages_delay_total     uint64
	Thrashing_count           uint64
	Thrashing_delay_total     uint64
	Ac_btime64                uint64
	Compact_count             uint64
	Compact_delay_total       uint64
	Ac_tgid                   uint32
	Ac_tgetime                uint64
	Ac_exe_dev                uint64
	Ac_exe_inode              uint64
	Wpcopy_count              uint64
	Wpcopy_delay_total        uint64
}

type cpuMask uint64

const (
	_NCPUBITS = 0x40
)

const (
	CBitFieldMaskBit0  = 0x1
	CBitFieldMaskBit1  = 0x2
	CBitFieldMaskBit2  = 0x4
	CBitFieldMaskBit3  = 0x8
	CBitFieldMaskBit4  = 0x10
	CBitFieldMaskBit5  = 0x20
	CBitFieldMaskBit6  = 0x40
	CBitFieldMaskBit7  = 0x80
	CBitFieldMaskBit8  = 0x100
	CBitFieldMaskBit9  = 0x200
	CBitFieldMaskBit10 = 0x400
	CBitFieldMaskBit11 = 0x800
	CBitFieldMaskBit12 = 0x1000
	CBitFieldMaskBit13 = 0x2000
	CBitFieldMaskBit14 = 0x4000
	CBitFieldMaskBit15 = 0x8000
	CBitFieldMaskBit16 = 0x10000
	CBitFieldMaskBit17 = 0x20000
	CBitFieldMaskBit18 = 0x40000
	CBitFieldMaskBit19 = 0x80000
	CBitFieldMaskBit20 = 0x100000
	CBitFieldMaskBit21 = 0x200000
	CBitFieldMaskBit22 = 0x400000
	CBitFieldMaskBit23 = 0x800000
	CBitFieldMaskBit24 = 0x1000000
	CBitFieldMaskBit25 = 0x2000000
	CBitFieldMaskBit26 = 0x4000000
	CBitFieldMaskBit27 = 0x8000000
	CBitFieldMaskBit28 = 0x10000000
	CBitFieldMaskBit29 = 0x20000000
	CBitFieldMaskBit30 = 0x40000000
	CBitFieldMaskBit31 = 0x80000000
	CBitFieldMaskBit32 = 0x100000000
	CBitFieldMaskBit33 = 0x200000000
	CBitFieldMaskBit34 = 0x400000000
	CBitFieldMaskBit35 = 0x800000000
	CBitFieldMaskBit36 = 0x1000000000
	CBitFieldMaskBit37 = 0x2000000000
	CBitFieldMaskBit38 = 0x4000000000
	CBitFieldMaskBit39 = 0x8000000000
	CBitFieldMaskBit40 = 0x10000000000
	CBitFieldMaskBit41 = 0x20000000000
	CBitFieldMaskBit42 = 0x40000000000
	CBitFieldMaskBit43 = 0x80000000000
	CBitFieldMaskBit44 = 0x100000000000
	CBitFieldMaskBit45 = 0x200000000000
	CBitFieldMaskBit46 = 0x400000000000
	CBitFieldMaskBit47 = 0x800000000000
	CBitFieldMaskBit48 = 0x1000000000000
	CBitFieldMaskBit49 = 0x2000000000000
	CBitFieldMaskBit50 = 0x4000000000000
	CBitFieldMaskBit51 = 0x8000000000000
	CBitFieldMaskBit52 = 0x10000000000000
	CBitFieldMaskBit53 = 0x20000000000000
	CBitFieldMaskBit54 = 0x40000000000000
	CBitFieldMaskBit55 = 0x80000000000000
	CBitFieldMaskBit56 = 0x100000000000000
	CBitFieldMaskBit57 = 0x200000000000000
	CBitFieldMaskBit58 = 0x400000000000000
	CBitFieldMaskBit59 = 0x800000000000000
	CBitFieldMaskBit60 = 0x1000000000000000
	CBitFieldMaskBit61 = 0x2000000000000000
	CBitFieldMaskBit62 = 0x4000000000000000
	CBitFieldMaskBit63 = 0x8000000000000000
)

type SockaddrStorage struct {
	Family uint16
	Data   [118]byte
	_      uint64
}

type HDGeometry struct {
	Heads     uint8
	Sectors   uint8
	Cylinders uint16
	Start     uint64
}

type Statfs_t struct {
	Type    int64
	Bsize   int64
	Blocks  uint64
	Bfree   uint64
	Bavail  uint64
	Files   uint64
	Ffree   uint64
	Fsid    Fsid
	Namelen int64
	Frsize  int64
	Flags   int64
	Spare   [4]int64
}

type TpacketHdr struct {
	Status  uint64
	Len     uint32
	Snaplen uint32
	Mac     uint16
	Net     uint16
	Sec     uint32
	Usec    uint32
	_       [4]byte
}

const (
	SizeofTpacketHdr = 0x20
)

type RTCPLLInfo struct {
	Ctrl    int32
	Value   int32
	Max     int32
	Min     int32
	Posmult int32
	Negmult int32
	Clock   int64
}

type BlkpgPartition struct {
	Start   int64
	Length  int64
	Pno     int32
	Devname [64]uint8
	Volname [64]uint8
	_       [4]byte
}

const (
	BLKPG = 0x1269
)

type XDPUmemReg struct {
	Addr     uint64
	Len      uint64
	Size     uint32
	Headroom uint32
	Flags    uint32
	_        [4]byte
}

type CryptoUserAlg struct {
	Name        [64]int8
	Driver_name [64]int8
	Module_name [64]int8
	Type        uint32
	Mask        uint32
	Refcnt      uint32
	Flags       uint32
}

type CryptoStatAEAD struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatAKCipher struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Verify_cnt   uint64
	Sign_cnt     uint64
	Err_cnt      uint64
}

type CryptoStatCipher struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatCompress struct {
	Type            [64]int8
	Compress_cnt    uint64
	Compress_tlen   uint64
	Decompress_cnt  uint64
	Decompress_tlen uint64
	Err_cnt         uint64
}

type CryptoStatHash struct {
	Type      [64]int8
	Hash_cnt  uint64
	Hash_tlen uint64
	Err_cnt   uint64
}

type CryptoStatKPP struct {
	Type                      [64]int8
	Setsecret_cnt             uint64
	Generate_public_key_cnt   uint64
	Compute_shared_secret_cnt uint64
	Err_cnt                   uint64
}

type CryptoStatRNG struct {
	Type          [64]int8
	Generate_cnt  uint64
	Generate_tlen uint64
	Seed_cnt      uint64
	Err_cnt       uint64
}

type CryptoStatLarval struct {
	Type [64]int8
}

type CryptoReportLarval struct {
	Type [64]int8
}

type CryptoReportHash struct {
	Type       [64]int8
	Blocksize  uint32
	Digestsize uint32
}

type CryptoReportCipher struct {
	Type        [64]int8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
}

type CryptoReportBlkCipher struct {
	Type        [64]int8
	Geniv       [64]int8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
	Ivsize      uint32
}

type CryptoReportAEAD struct {
	Type        [64]int8
	Geniv       [64]int8
	Blocksize   uint32
	Maxauthsize uint32
	Ivsize      uint32
}

type CryptoReportComp struct {
	Type [64]int8
}

type CryptoReportRNG struct {
	Type     [64]int8
	Seedsize uint32
}

type CryptoReportAKCipher struct {
	Type [64]int8
}

type CryptoReportKPP struct {
	Type [64]int8
}

type CryptoReportAcomp struct {
	Type [64]int8
}

type LoopInfo struct {
	Number           int32
	Device           uint64
	Inode            uint64
	Rdevice          uint64
	Offset           int32
	Encrypt_type     int32
	Encrypt_key_size int32
	Flags            int32
	Name             [64]int8
	Encrypt_key      [32]uint8
	Init             [2]uint64
	Reserved         [4]int8
	_                [4]byte
}

type TIPCSubscr struct {
	Seq     TIPCServiceRange
	Timeout uint32
	Filter  uint32
	Handle  [8]int8
}

type TIPCSIOCLNReq struct {
	Peer     uint32
	Id       uint32
	Linkname [68]int8
}

type TIPCSIOCNodeIDReq struct {
	Peer uint32
	Id   [16]int8
}

type PPSKInfo struct {
	Assert_sequence uint32
	Clear_sequence  uint32
	Assert_tu       PPSKTime
	Clear_tu        PPSKTime
	Current_mode    int32
	_               [4]byte
}

const (
	PPS_GETPARAMS = 0x800870a1
	PPS_SETPARAMS = 0x400870a2
	PPS_GETCAP    = 0x800870a3
	PPS_FETCH     = 0xc00870a4
)

const (
	PIDFD_NONBLOCK = 0x800
)

type SysvIpcPerm struct {
	Key  int32
	Uid  uint32
	Gid  uint32
	Cuid uint32
	Cgid uint32
	Mode uint32
	_    [0]uint8
	Seq  uint16
	_    uint16
	_    uint64
	_    uint64
}
type SysvShmDesc struct {
	Perm   SysvIpcPerm
	Segsz  uint64
	Atime  int64
	Dtime  int64
	Ctime  int64
	Cpid   int32
	Lpid   int32
	Nattch uint64
	_      uint64
	_      uint64
}
 07070100000EB6000081A4000000000000000000000001645E367C00003123000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go  // cgo -godefs -objdir=/tmp/arm/cgo -- -Wall -Werror -static -I/tmp/arm/include linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build arm && linux
// +build arm,linux

package unix

const (
	SizeofPtr  = 0x4
	SizeofLong = 0x4
)

type (
	_C_long int32
)

type Timespec struct {
	Sec  int32
	Nsec int32
}

type Timeval struct {
	Sec  int32
	Usec int32
}

type Timex struct {
	Modes     uint32
	Offset    int32
	Freq      int32
	Maxerror  int32
	Esterror  int32
	Status    int32
	Constant  int32
	Precision int32
	Tolerance int32
	Time      Timeval
	Tick      int32
	Ppsfreq   int32
	Jitter    int32
	Shift     int32
	Stabil    int32
	Jitcnt    int32
	Calcnt    int32
	Errcnt    int32
	Stbcnt    int32
	Tai       int32
	_         [44]byte
}

type Time_t int32

type Tms struct {
	Utime  int32
	Stime  int32
	Cutime int32
	Cstime int32
}

type Utimbuf struct {
	Actime  int32
	Modtime int32
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int32
	Ixrss    int32
	Idrss    int32
	Isrss    int32
	Minflt   int32
	Majflt   int32
	Nswap    int32
	Inblock  int32
	Oublock  int32
	Msgsnd   int32
	Msgrcv   int32
	Nsignals int32
	Nvcsw    int32
	Nivcsw   int32
}

type Stat_t struct {
	Dev     uint64
	_       uint16
	_       uint32
	Mode    uint32
	Nlink   uint32
	Uid     uint32
	Gid     uint32
	Rdev    uint64
	_       uint16
	_       [4]byte
	Size    int64
	Blksize int32
	_       [4]byte
	Blocks  int64
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	Ino     uint64
}

type Dirent struct {
	Ino    uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Name   [256]uint8
	_      [5]byte
}

type Flock_t struct {
	Type   int16
	Whence int16
	_      [4]byte
	Start  int64
	Len    int64
	Pid    int32
	_      [4]byte
}

type DmNameList struct {
	Dev  uint64
	Next uint32
	Name [0]byte
	_    [4]byte
}

const (
	FADV_DONTNEED = 0x4
	FADV_NOREUSE  = 0x5
)

type RawSockaddrNFCLLCP struct {
	Sa_family        uint16
	Dev_idx          uint32
	Target_idx       uint32
	Nfc_protocol     uint32
	Dsap             uint8
	Ssap             uint8
	Service_name     [63]uint8
	Service_name_len uint32
}

type RawSockaddr struct {
	Family uint16
	Data   [14]uint8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [96]uint8
}

type Iovec struct {
	Base *byte
	Len  uint32
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     uint32
	Control    *byte
	Controllen uint32
	Flags      int32
}

type Cmsghdr struct {
	Len   uint32
	Level int32
	Type  int32
}

type ifreq struct {
	Ifrn [16]byte
	Ifru [16]byte
}

const (
	SizeofSockaddrNFCLLCP = 0x58
	SizeofIovec           = 0x8
	SizeofMsghdr          = 0x1c
	SizeofCmsghdr         = 0xc
)

const (
	SizeofSockFprog = 0x8
)

type PtraceRegs struct {
	Uregs [18]uint32
}

type FdSet struct {
	Bits [32]int32
}

type Sysinfo_t struct {
	Uptime    int32
	Loads     [3]uint32
	Totalram  uint32
	Freeram   uint32
	Sharedram uint32
	Bufferram uint32
	Totalswap uint32
	Freeswap  uint32
	Procs     uint16
	Pad       uint16
	Totalhigh uint32
	Freehigh  uint32
	Unit      uint32
	_         [8]uint8
}

type Ustat_t struct {
	Tfree  int32
	Tinode uint32
	Fname  [6]uint8
	Fpack  [6]uint8
}

type EpollEvent struct {
	Events uint32
	PadFd  int32
	Fd     int32
	Pad    int32
}

const (
	OPEN_TREE_CLOEXEC = 0x80000
)

const (
	POLLRDHUP = 0x2000
)

type Sigset_t struct {
	Val [32]uint32
}

const _C__NSIG = 0x41

const (
	SIG_BLOCK   = 0x0
	SIG_UNBLOCK = 0x1
	SIG_SETMASK = 0x2
)

type Siginfo struct {
	Signo int32
	Errno int32
	Code  int32
	_     [116]byte
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Line   uint8
	Cc     [19]uint8
	Ispeed uint32
	Ospeed uint32
}

type Taskstats struct {
	Version                   uint16
	Ac_exitcode               uint32
	Ac_flag                   uint8
	Ac_nice                   uint8
	_                         [4]byte
	Cpu_count                 uint64
	Cpu_delay_total           uint64
	Blkio_count               uint64
	Blkio_delay_total         uint64
	Swapin_count              uint64
	Swapin_delay_total        uint64
	Cpu_run_real_total        uint64
	Cpu_run_virtual_total     uint64
	Ac_comm                   [32]uint8
	Ac_sched                  uint8
	Ac_pad                    [3]uint8
	_                         [4]byte
	Ac_uid                    uint32
	Ac_gid                    uint32
	Ac_pid                    uint32
	Ac_ppid                   uint32
	Ac_btime                  uint32
	_                         [4]byte
	Ac_etime                  uint64
	Ac_utime                  uint64
	Ac_stime                  uint64
	Ac_minflt                 uint64
	Ac_majflt                 uint64
	Coremem                   uint64
	Virtmem                   uint64
	Hiwater_rss               uint64
	Hiwater_vm                uint64
	Read_char                 uint64
	Write_char                uint64
	Read_syscalls             uint64
	Write_syscalls            uint64
	Read_bytes                uint64
	Write_bytes               uint64
	Cancelled_write_bytes     uint64
	Nvcsw                     uint64
	Nivcsw                    uint64
	Ac_utimescaled            uint64
	Ac_stimescaled            uint64
	Cpu_scaled_run_real_total uint64
	Freepages_count           uint64
	Freepages_delay_total     uint64
	Thrashing_count           uint64
	Thrashing_delay_total     uint64
	Ac_btime64                uint64
	Compact_count             uint64
	Compact_delay_total       uint64
	Ac_tgid                   uint32
	_                         [4]byte
	Ac_tgetime                uint64
	Ac_exe_dev                uint64
	Ac_exe_inode              uint64
	Wpcopy_count              uint64
	Wpcopy_delay_total        uint64
}

type cpuMask uint32

const (
	_NCPUBITS = 0x20
)

const (
	CBitFieldMaskBit0  = 0x1
	CBitFieldMaskBit1  = 0x2
	CBitFieldMaskBit2  = 0x4
	CBitFieldMaskBit3  = 0x8
	CBitFieldMaskBit4  = 0x10
	CBitFieldMaskBit5  = 0x20
	CBitFieldMaskBit6  = 0x40
	CBitFieldMaskBit7  = 0x80
	CBitFieldMaskBit8  = 0x100
	CBitFieldMaskBit9  = 0x200
	CBitFieldMaskBit10 = 0x400
	CBitFieldMaskBit11 = 0x800
	CBitFieldMaskBit12 = 0x1000
	CBitFieldMaskBit13 = 0x2000
	CBitFieldMaskBit14 = 0x4000
	CBitFieldMaskBit15 = 0x8000
	CBitFieldMaskBit16 = 0x10000
	CBitFieldMaskBit17 = 0x20000
	CBitFieldMaskBit18 = 0x40000
	CBitFieldMaskBit19 = 0x80000
	CBitFieldMaskBit20 = 0x100000
	CBitFieldMaskBit21 = 0x200000
	CBitFieldMaskBit22 = 0x400000
	CBitFieldMaskBit23 = 0x800000
	CBitFieldMaskBit24 = 0x1000000
	CBitFieldMaskBit25 = 0x2000000
	CBitFieldMaskBit26 = 0x4000000
	CBitFieldMaskBit27 = 0x8000000
	CBitFieldMaskBit28 = 0x10000000
	CBitFieldMaskBit29 = 0x20000000
	CBitFieldMaskBit30 = 0x40000000
	CBitFieldMaskBit31 = 0x80000000
	CBitFieldMaskBit32 = 0x100000000
	CBitFieldMaskBit33 = 0x200000000
	CBitFieldMaskBit34 = 0x400000000
	CBitFieldMaskBit35 = 0x800000000
	CBitFieldMaskBit36 = 0x1000000000
	CBitFieldMaskBit37 = 0x2000000000
	CBitFieldMaskBit38 = 0x4000000000
	CBitFieldMaskBit39 = 0x8000000000
	CBitFieldMaskBit40 = 0x10000000000
	CBitFieldMaskBit41 = 0x20000000000
	CBitFieldMaskBit42 = 0x40000000000
	CBitFieldMaskBit43 = 0x80000000000
	CBitFieldMaskBit44 = 0x100000000000
	CBitFieldMaskBit45 = 0x200000000000
	CBitFieldMaskBit46 = 0x400000000000
	CBitFieldMaskBit47 = 0x800000000000
	CBitFieldMaskBit48 = 0x1000000000000
	CBitFieldMaskBit49 = 0x2000000000000
	CBitFieldMaskBit50 = 0x4000000000000
	CBitFieldMaskBit51 = 0x8000000000000
	CBitFieldMaskBit52 = 0x10000000000000
	CBitFieldMaskBit53 = 0x20000000000000
	CBitFieldMaskBit54 = 0x40000000000000
	CBitFieldMaskBit55 = 0x80000000000000
	CBitFieldMaskBit56 = 0x100000000000000
	CBitFieldMaskBit57 = 0x200000000000000
	CBitFieldMaskBit58 = 0x400000000000000
	CBitFieldMaskBit59 = 0x800000000000000
	CBitFieldMaskBit60 = 0x1000000000000000
	CBitFieldMaskBit61 = 0x2000000000000000
	CBitFieldMaskBit62 = 0x4000000000000000
	CBitFieldMaskBit63 = 0x8000000000000000
)

type SockaddrStorage struct {
	Family uint16
	Data   [122]byte
	_      uint32
}

type HDGeometry struct {
	Heads     uint8
	Sectors   uint8
	Cylinders uint16
	Start     uint32
}

type Statfs_t struct {
	Type    int32
	Bsize   int32
	Blocks  uint64
	Bfree   uint64
	Bavail  uint64
	Files   uint64
	Ffree   uint64
	Fsid    Fsid
	Namelen int32
	Frsize  int32
	Flags   int32
	Spare   [4]int32
	_       [4]byte
}

type TpacketHdr struct {
	Status  uint32
	Len     uint32
	Snaplen uint32
	Mac     uint16
	Net     uint16
	Sec     uint32
	Usec    uint32
}

const (
	SizeofTpacketHdr = 0x18
)

type RTCPLLInfo struct {
	Ctrl    int32
	Value   int32
	Max     int32
	Min     int32
	Posmult int32
	Negmult int32
	Clock   int32
}

type BlkpgPartition struct {
	Start   int64
	Length  int64
	Pno     int32
	Devname [64]uint8
	Volname [64]uint8
	_       [4]byte
}

const (
	BLKPG = 0x1269
)

type XDPUmemReg struct {
	Addr     uint64
	Len      uint64
	Size     uint32
	Headroom uint32
	Flags    uint32
	_        [4]byte
}

type CryptoUserAlg struct {
	Name        [64]uint8
	Driver_name [64]uint8
	Module_name [64]uint8
	Type        uint32
	Mask        uint32
	Refcnt      uint32
	Flags       uint32
}

type CryptoStatAEAD struct {
	Type         [64]uint8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatAKCipher struct {
	Type         [64]uint8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Verify_cnt   uint64
	Sign_cnt     uint64
	Err_cnt      uint64
}

type CryptoStatCipher struct {
	Type         [64]uint8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatCompress struct {
	Type            [64]uint8
	Compress_cnt    uint64
	Compress_tlen   uint64
	Decompress_cnt  uint64
	Decompress_tlen uint64
	Err_cnt         uint64
}

type CryptoStatHash struct {
	Type      [64]uint8
	Hash_cnt  uint64
	Hash_tlen uint64
	Err_cnt   uint64
}

type CryptoStatKPP struct {
	Type                      [64]uint8
	Setsecret_cnt             uint64
	Generate_public_key_cnt   uint64
	Compute_shared_secret_cnt uint64
	Err_cnt                   uint64
}

type CryptoStatRNG struct {
	Type          [64]uint8
	Generate_cnt  uint64
	Generate_tlen uint64
	Seed_cnt      uint64
	Err_cnt       uint64
}

type CryptoStatLarval struct {
	Type [64]uint8
}

type CryptoReportLarval struct {
	Type [64]uint8
}

type CryptoReportHash struct {
	Type       [64]uint8
	Blocksize  uint32
	Digestsize uint32
}

type CryptoReportCipher struct {
	Type        [64]uint8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
}

type CryptoReportBlkCipher struct {
	Type        [64]uint8
	Geniv       [64]uint8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
	Ivsize      uint32
}

type CryptoReportAEAD struct {
	Type        [64]uint8
	Geniv       [64]uint8
	Blocksize   uint32
	Maxauthsize uint32
	Ivsize      uint32
}

type CryptoReportComp struct {
	Type [64]uint8
}

type CryptoReportRNG struct {
	Type     [64]uint8
	Seedsize uint32
}

type CryptoReportAKCipher struct {
	Type [64]uint8
}

type CryptoReportKPP struct {
	Type [64]uint8
}

type CryptoReportAcomp struct {
	Type [64]uint8
}

type LoopInfo struct {
	Number           int32
	Device           uint16
	Inode            uint32
	Rdevice          uint16
	Offset           int32
	Encrypt_type     int32
	Encrypt_key_size int32
	Flags            int32
	Name             [64]uint8
	Encrypt_key      [32]uint8
	Init             [2]uint32
	Reserved         [4]uint8
}

type TIPCSubscr struct {
	Seq     TIPCServiceRange
	Timeout uint32
	Filter  uint32
	Handle  [8]uint8
}

type TIPCSIOCLNReq struct {
	Peer     uint32
	Id       uint32
	Linkname [68]uint8
}

type TIPCSIOCNodeIDReq struct {
	Peer uint32
	Id   [16]uint8
}

type PPSKInfo struct {
	Assert_sequence uint32
	Clear_sequence  uint32
	Assert_tu       PPSKTime
	Clear_tu        PPSKTime
	Current_mode    int32
	_               [4]byte
}

const (
	PPS_GETPARAMS = 0x800470a1
	PPS_SETPARAMS = 0x400470a2
	PPS_GETCAP    = 0x800470a3
	PPS_FETCH     = 0xc00470a4
)

const (
	PIDFD_NONBLOCK = 0x800
)

type SysvIpcPerm struct {
	Key  int32
	Uid  uint32
	Gid  uint32
	Cuid uint32
	Cgid uint32
	Mode uint16
	_    [2]uint8
	Seq  uint16
	_    uint16
	_    uint32
	_    uint32
}
type SysvShmDesc struct {
	Perm       SysvIpcPerm
	Segsz      uint32
	Atime      uint32
	Atime_high uint32
	Dtime      uint32
	Dtime_high uint32
	Ctime      uint32
	Ctime_high uint32
	Cpid       int32
	Lpid       int32
	Nattch     uint32
	_          uint32
	_          uint32
}
 07070100000EB7000081A4000000000000000000000001645E367C000030A7000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go    // cgo -godefs -objdir=/tmp/arm64/cgo -- -Wall -Werror -static -I/tmp/arm64/include -fsigned-char linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build arm64 && linux
// +build arm64,linux

package unix

const (
	SizeofPtr  = 0x8
	SizeofLong = 0x8
)

type (
	_C_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int64
}

type Timeval struct {
	Sec  int64
	Usec int64
}

type Timex struct {
	Modes     uint32
	Offset    int64
	Freq      int64
	Maxerror  int64
	Esterror  int64
	Status    int32
	Constant  int64
	Precision int64
	Tolerance int64
	Time      Timeval
	Tick      int64
	Ppsfreq   int64
	Jitter    int64
	Shift     int32
	Stabil    int64
	Jitcnt    int64
	Calcnt    int64
	Errcnt    int64
	Stbcnt    int64
	Tai       int32
	_         [44]byte
}

type Time_t int64

type Tms struct {
	Utime  int64
	Stime  int64
	Cutime int64
	Cstime int64
}

type Utimbuf struct {
	Actime  int64
	Modtime int64
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int64
	Ixrss    int64
	Idrss    int64
	Isrss    int64
	Minflt   int64
	Majflt   int64
	Nswap    int64
	Inblock  int64
	Oublock  int64
	Msgsnd   int64
	Msgrcv   int64
	Nsignals int64
	Nvcsw    int64
	Nivcsw   int64
}

type Stat_t struct {
	Dev     uint64
	Ino     uint64
	Mode    uint32
	Nlink   uint32
	Uid     uint32
	Gid     uint32
	Rdev    uint64
	_       uint64
	Size    int64
	Blksize int32
	_       int32
	Blocks  int64
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	_       [2]int32
}

type Dirent struct {
	Ino    uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Name   [256]int8
	_      [5]byte
}

type Flock_t struct {
	Type   int16
	Whence int16
	Start  int64
	Len    int64
	Pid    int32
	_      [4]byte
}

type DmNameList struct {
	Dev  uint64
	Next uint32
	Name [0]byte
	_    [4]byte
}

const (
	FADV_DONTNEED = 0x4
	FADV_NOREUSE  = 0x5
)

type RawSockaddrNFCLLCP struct {
	Sa_family        uint16
	Dev_idx          uint32
	Target_idx       uint32
	Nfc_protocol     uint32
	Dsap             uint8
	Ssap             uint8
	Service_name     [63]uint8
	Service_name_len uint64
}

type RawSockaddr struct {
	Family uint16
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [96]int8
}

type Iovec struct {
	Base *byte
	Len  uint64
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     uint64
	Control    *byte
	Controllen uint64
	Flags      int32
	_          [4]byte
}

type Cmsghdr struct {
	Len   uint64
	Level int32
	Type  int32
}

type ifreq struct {
	Ifrn [16]byte
	Ifru [24]byte
}

const (
	SizeofSockaddrNFCLLCP = 0x60
	SizeofIovec           = 0x10
	SizeofMsghdr          = 0x38
	SizeofCmsghdr         = 0x10
)

const (
	SizeofSockFprog = 0x10
)

type PtraceRegs struct {
	Regs   [31]uint64
	Sp     uint64
	Pc     uint64
	Pstate uint64
}

type FdSet struct {
	Bits [16]int64
}

type Sysinfo_t struct {
	Uptime    int64
	Loads     [3]uint64
	Totalram  uint64
	Freeram   uint64
	Sharedram uint64
	Bufferram uint64
	Totalswap uint64
	Freeswap  uint64
	Procs     uint16
	Pad       uint16
	Totalhigh uint64
	Freehigh  uint64
	Unit      uint32
	_         [0]int8
	_         [4]byte
}

type Ustat_t struct {
	Tfree  int32
	Tinode uint64
	Fname  [6]int8
	Fpack  [6]int8
	_      [4]byte
}

type EpollEvent struct {
	Events uint32
	PadFd  int32
	Fd     int32
	Pad    int32
}

const (
	OPEN_TREE_CLOEXEC = 0x80000
)

const (
	POLLRDHUP = 0x2000
)

type Sigset_t struct {
	Val [16]uint64
}

const _C__NSIG = 0x41

const (
	SIG_BLOCK   = 0x0
	SIG_UNBLOCK = 0x1
	SIG_SETMASK = 0x2
)

type Siginfo struct {
	Signo int32
	Errno int32
	Code  int32
	_     int32
	_     [112]byte
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Line   uint8
	Cc     [19]uint8
	Ispeed uint32
	Ospeed uint32
}

type Taskstats struct {
	Version                   uint16
	Ac_exitcode               uint32
	Ac_flag                   uint8
	Ac_nice                   uint8
	Cpu_count                 uint64
	Cpu_delay_total           uint64
	Blkio_count               uint64
	Blkio_delay_total         uint64
	Swapin_count              uint64
	Swapin_delay_total        uint64
	Cpu_run_real_total        uint64
	Cpu_run_virtual_total     uint64
	Ac_comm                   [32]int8
	Ac_sched                  uint8
	Ac_pad                    [3]uint8
	_                         [4]byte
	Ac_uid                    uint32
	Ac_gid                    uint32
	Ac_pid                    uint32
	Ac_ppid                   uint32
	Ac_btime                  uint32
	Ac_etime                  uint64
	Ac_utime                  uint64
	Ac_stime                  uint64
	Ac_minflt                 uint64
	Ac_majflt                 uint64
	Coremem                   uint64
	Virtmem                   uint64
	Hiwater_rss               uint64
	Hiwater_vm                uint64
	Read_char                 uint64
	Write_char                uint64
	Read_syscalls             uint64
	Write_syscalls            uint64
	Read_bytes                uint64
	Write_bytes               uint64
	Cancelled_write_bytes     uint64
	Nvcsw                     uint64
	Nivcsw                    uint64
	Ac_utimescaled            uint64
	Ac_stimescaled            uint64
	Cpu_scaled_run_real_total uint64
	Freepages_count           uint64
	Freepages_delay_total     uint64
	Thrashing_count           uint64
	Thrashing_delay_total     uint64
	Ac_btime64                uint64
	Compact_count             uint64
	Compact_delay_total       uint64
	Ac_tgid                   uint32
	Ac_tgetime                uint64
	Ac_exe_dev                uint64
	Ac_exe_inode              uint64
	Wpcopy_count              uint64
	Wpcopy_delay_total        uint64
}

type cpuMask uint64

const (
	_NCPUBITS = 0x40
)

const (
	CBitFieldMaskBit0  = 0x1
	CBitFieldMaskBit1  = 0x2
	CBitFieldMaskBit2  = 0x4
	CBitFieldMaskBit3  = 0x8
	CBitFieldMaskBit4  = 0x10
	CBitFieldMaskBit5  = 0x20
	CBitFieldMaskBit6  = 0x40
	CBitFieldMaskBit7  = 0x80
	CBitFieldMaskBit8  = 0x100
	CBitFieldMaskBit9  = 0x200
	CBitFieldMaskBit10 = 0x400
	CBitFieldMaskBit11 = 0x800
	CBitFieldMaskBit12 = 0x1000
	CBitFieldMaskBit13 = 0x2000
	CBitFieldMaskBit14 = 0x4000
	CBitFieldMaskBit15 = 0x8000
	CBitFieldMaskBit16 = 0x10000
	CBitFieldMaskBit17 = 0x20000
	CBitFieldMaskBit18 = 0x40000
	CBitFieldMaskBit19 = 0x80000
	CBitFieldMaskBit20 = 0x100000
	CBitFieldMaskBit21 = 0x200000
	CBitFieldMaskBit22 = 0x400000
	CBitFieldMaskBit23 = 0x800000
	CBitFieldMaskBit24 = 0x1000000
	CBitFieldMaskBit25 = 0x2000000
	CBitFieldMaskBit26 = 0x4000000
	CBitFieldMaskBit27 = 0x8000000
	CBitFieldMaskBit28 = 0x10000000
	CBitFieldMaskBit29 = 0x20000000
	CBitFieldMaskBit30 = 0x40000000
	CBitFieldMaskBit31 = 0x80000000
	CBitFieldMaskBit32 = 0x100000000
	CBitFieldMaskBit33 = 0x200000000
	CBitFieldMaskBit34 = 0x400000000
	CBitFieldMaskBit35 = 0x800000000
	CBitFieldMaskBit36 = 0x1000000000
	CBitFieldMaskBit37 = 0x2000000000
	CBitFieldMaskBit38 = 0x4000000000
	CBitFieldMaskBit39 = 0x8000000000
	CBitFieldMaskBit40 = 0x10000000000
	CBitFieldMaskBit41 = 0x20000000000
	CBitFieldMaskBit42 = 0x40000000000
	CBitFieldMaskBit43 = 0x80000000000
	CBitFieldMaskBit44 = 0x100000000000
	CBitFieldMaskBit45 = 0x200000000000
	CBitFieldMaskBit46 = 0x400000000000
	CBitFieldMaskBit47 = 0x800000000000
	CBitFieldMaskBit48 = 0x1000000000000
	CBitFieldMaskBit49 = 0x2000000000000
	CBitFieldMaskBit50 = 0x4000000000000
	CBitFieldMaskBit51 = 0x8000000000000
	CBitFieldMaskBit52 = 0x10000000000000
	CBitFieldMaskBit53 = 0x20000000000000
	CBitFieldMaskBit54 = 0x40000000000000
	CBitFieldMaskBit55 = 0x80000000000000
	CBitFieldMaskBit56 = 0x100000000000000
	CBitFieldMaskBit57 = 0x200000000000000
	CBitFieldMaskBit58 = 0x400000000000000
	CBitFieldMaskBit59 = 0x800000000000000
	CBitFieldMaskBit60 = 0x1000000000000000
	CBitFieldMaskBit61 = 0x2000000000000000
	CBitFieldMaskBit62 = 0x4000000000000000
	CBitFieldMaskBit63 = 0x8000000000000000
)

type SockaddrStorage struct {
	Family uint16
	Data   [118]byte
	_      uint64
}

type HDGeometry struct {
	Heads     uint8
	Sectors   uint8
	Cylinders uint16
	Start     uint64
}

type Statfs_t struct {
	Type    int64
	Bsize   int64
	Blocks  uint64
	Bfree   uint64
	Bavail  uint64
	Files   uint64
	Ffree   uint64
	Fsid    Fsid
	Namelen int64
	Frsize  int64
	Flags   int64
	Spare   [4]int64
}

type TpacketHdr struct {
	Status  uint64
	Len     uint32
	Snaplen uint32
	Mac     uint16
	Net     uint16
	Sec     uint32
	Usec    uint32
	_       [4]byte
}

const (
	SizeofTpacketHdr = 0x20
)

type RTCPLLInfo struct {
	Ctrl    int32
	Value   int32
	Max     int32
	Min     int32
	Posmult int32
	Negmult int32
	Clock   int64
}

type BlkpgPartition struct {
	Start   int64
	Length  int64
	Pno     int32
	Devname [64]uint8
	Volname [64]uint8
	_       [4]byte
}

const (
	BLKPG = 0x1269
)

type XDPUmemReg struct {
	Addr     uint64
	Len      uint64
	Size     uint32
	Headroom uint32
	Flags    uint32
	_        [4]byte
}

type CryptoUserAlg struct {
	Name        [64]int8
	Driver_name [64]int8
	Module_name [64]int8
	Type        uint32
	Mask        uint32
	Refcnt      uint32
	Flags       uint32
}

type CryptoStatAEAD struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatAKCipher struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Verify_cnt   uint64
	Sign_cnt     uint64
	Err_cnt      uint64
}

type CryptoStatCipher struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatCompress struct {
	Type            [64]int8
	Compress_cnt    uint64
	Compress_tlen   uint64
	Decompress_cnt  uint64
	Decompress_tlen uint64
	Err_cnt         uint64
}

type CryptoStatHash struct {
	Type      [64]int8
	Hash_cnt  uint64
	Hash_tlen uint64
	Err_cnt   uint64
}

type CryptoStatKPP struct {
	Type                      [64]int8
	Setsecret_cnt             uint64
	Generate_public_key_cnt   uint64
	Compute_shared_secret_cnt uint64
	Err_cnt                   uint64
}

type CryptoStatRNG struct {
	Type          [64]int8
	Generate_cnt  uint64
	Generate_tlen uint64
	Seed_cnt      uint64
	Err_cnt       uint64
}

type CryptoStatLarval struct {
	Type [64]int8
}

type CryptoReportLarval struct {
	Type [64]int8
}

type CryptoReportHash struct {
	Type       [64]int8
	Blocksize  uint32
	Digestsize uint32
}

type CryptoReportCipher struct {
	Type        [64]int8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
}

type CryptoReportBlkCipher struct {
	Type        [64]int8
	Geniv       [64]int8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
	Ivsize      uint32
}

type CryptoReportAEAD struct {
	Type        [64]int8
	Geniv       [64]int8
	Blocksize   uint32
	Maxauthsize uint32
	Ivsize      uint32
}

type CryptoReportComp struct {
	Type [64]int8
}

type CryptoReportRNG struct {
	Type     [64]int8
	Seedsize uint32
}

type CryptoReportAKCipher struct {
	Type [64]int8
}

type CryptoReportKPP struct {
	Type [64]int8
}

type CryptoReportAcomp struct {
	Type [64]int8
}

type LoopInfo struct {
	Number           int32
	Device           uint32
	Inode            uint64
	Rdevice          uint32
	Offset           int32
	Encrypt_type     int32
	Encrypt_key_size int32
	Flags            int32
	Name             [64]int8
	Encrypt_key      [32]uint8
	Init             [2]uint64
	Reserved         [4]int8
	_                [4]byte
}

type TIPCSubscr struct {
	Seq     TIPCServiceRange
	Timeout uint32
	Filter  uint32
	Handle  [8]int8
}

type TIPCSIOCLNReq struct {
	Peer     uint32
	Id       uint32
	Linkname [68]int8
}

type TIPCSIOCNodeIDReq struct {
	Peer uint32
	Id   [16]int8
}

type PPSKInfo struct {
	Assert_sequence uint32
	Clear_sequence  uint32
	Assert_tu       PPSKTime
	Clear_tu        PPSKTime
	Current_mode    int32
	_               [4]byte
}

const (
	PPS_GETPARAMS = 0x800870a1
	PPS_SETPARAMS = 0x400870a2
	PPS_GETCAP    = 0x800870a3
	PPS_FETCH     = 0xc00870a4
)

const (
	PIDFD_NONBLOCK = 0x800
)

type SysvIpcPerm struct {
	Key  int32
	Uid  uint32
	Gid  uint32
	Cuid uint32
	Cgid uint32
	Mode uint32
	_    [0]uint8
	Seq  uint16
	_    uint16
	_    uint64
	_    uint64
}
type SysvShmDesc struct {
	Perm   SysvIpcPerm
	Segsz  uint64
	Atime  int64
	Dtime  int64
	Ctime  int64
	Cpid   int32
	Lpid   int32
	Nattch uint64
	_      uint64
	_      uint64
}
 07070100000EB8000081A4000000000000000000000001645E367C000030BE000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go  // cgo -godefs -objdir=/tmp/loong64/cgo -- -Wall -Werror -static -I/tmp/loong64/include linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build loong64 && linux
// +build loong64,linux

package unix

const (
	SizeofPtr  = 0x8
	SizeofLong = 0x8
)

type (
	_C_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int64
}

type Timeval struct {
	Sec  int64
	Usec int64
}

type Timex struct {
	Modes     uint32
	Offset    int64
	Freq      int64
	Maxerror  int64
	Esterror  int64
	Status    int32
	Constant  int64
	Precision int64
	Tolerance int64
	Time      Timeval
	Tick      int64
	Ppsfreq   int64
	Jitter    int64
	Shift     int32
	Stabil    int64
	Jitcnt    int64
	Calcnt    int64
	Errcnt    int64
	Stbcnt    int64
	Tai       int32
	_         [44]byte
}

type Time_t int64

type Tms struct {
	Utime  int64
	Stime  int64
	Cutime int64
	Cstime int64
}

type Utimbuf struct {
	Actime  int64
	Modtime int64
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int64
	Ixrss    int64
	Idrss    int64
	Isrss    int64
	Minflt   int64
	Majflt   int64
	Nswap    int64
	Inblock  int64
	Oublock  int64
	Msgsnd   int64
	Msgrcv   int64
	Nsignals int64
	Nvcsw    int64
	Nivcsw   int64
}

type Stat_t struct {
	Dev     uint64
	Ino     uint64
	Mode    uint32
	Nlink   uint32
	Uid     uint32
	Gid     uint32
	Rdev    uint64
	_       uint64
	Size    int64
	Blksize int32
	_       int32
	Blocks  int64
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	_       [2]int32
}

type Dirent struct {
	Ino    uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Name   [256]int8
	_      [5]byte
}

type Flock_t struct {
	Type   int16
	Whence int16
	Start  int64
	Len    int64
	Pid    int32
	_      [4]byte
}

type DmNameList struct {
	Dev  uint64
	Next uint32
	Name [0]byte
	_    [4]byte
}

const (
	FADV_DONTNEED = 0x4
	FADV_NOREUSE  = 0x5
)

type RawSockaddrNFCLLCP struct {
	Sa_family        uint16
	Dev_idx          uint32
	Target_idx       uint32
	Nfc_protocol     uint32
	Dsap             uint8
	Ssap             uint8
	Service_name     [63]uint8
	Service_name_len uint64
}

type RawSockaddr struct {
	Family uint16
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [96]int8
}

type Iovec struct {
	Base *byte
	Len  uint64
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     uint64
	Control    *byte
	Controllen uint64
	Flags      int32
	_          [4]byte
}

type Cmsghdr struct {
	Len   uint64
	Level int32
	Type  int32
}

type ifreq struct {
	Ifrn [16]byte
	Ifru [24]byte
}

const (
	SizeofSockaddrNFCLLCP = 0x60
	SizeofIovec           = 0x10
	SizeofMsghdr          = 0x38
	SizeofCmsghdr         = 0x10
)

const (
	SizeofSockFprog = 0x10
)

type PtraceRegs struct {
	Regs     [32]uint64
	Orig_a0  uint64
	Era      uint64
	Badv     uint64
	Reserved [10]uint64
}

type FdSet struct {
	Bits [16]int64
}

type Sysinfo_t struct {
	Uptime    int64
	Loads     [3]uint64
	Totalram  uint64
	Freeram   uint64
	Sharedram uint64
	Bufferram uint64
	Totalswap uint64
	Freeswap  uint64
	Procs     uint16
	Pad       uint16
	Totalhigh uint64
	Freehigh  uint64
	Unit      uint32
	_         [0]int8
	_         [4]byte
}

type Ustat_t struct {
	Tfree  int32
	Tinode uint64
	Fname  [6]int8
	Fpack  [6]int8
	_      [4]byte
}

type EpollEvent struct {
	Events uint32
	_      int32
	Fd     int32
	Pad    int32
}

const (
	OPEN_TREE_CLOEXEC = 0x80000
)

const (
	POLLRDHUP = 0x2000
)

type Sigset_t struct {
	Val [16]uint64
}

const _C__NSIG = 0x41

const (
	SIG_BLOCK   = 0x0
	SIG_UNBLOCK = 0x1
	SIG_SETMASK = 0x2
)

type Siginfo struct {
	Signo int32
	Errno int32
	Code  int32
	_     int32
	_     [112]byte
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Line   uint8
	Cc     [19]uint8
	Ispeed uint32
	Ospeed uint32
}

type Taskstats struct {
	Version                   uint16
	Ac_exitcode               uint32
	Ac_flag                   uint8
	Ac_nice                   uint8
	Cpu_count                 uint64
	Cpu_delay_total           uint64
	Blkio_count               uint64
	Blkio_delay_total         uint64
	Swapin_count              uint64
	Swapin_delay_total        uint64
	Cpu_run_real_total        uint64
	Cpu_run_virtual_total     uint64
	Ac_comm                   [32]int8
	Ac_sched                  uint8
	Ac_pad                    [3]uint8
	_                         [4]byte
	Ac_uid                    uint32
	Ac_gid                    uint32
	Ac_pid                    uint32
	Ac_ppid                   uint32
	Ac_btime                  uint32
	Ac_etime                  uint64
	Ac_utime                  uint64
	Ac_stime                  uint64
	Ac_minflt                 uint64
	Ac_majflt                 uint64
	Coremem                   uint64
	Virtmem                   uint64
	Hiwater_rss               uint64
	Hiwater_vm                uint64
	Read_char                 uint64
	Write_char                uint64
	Read_syscalls             uint64
	Write_syscalls            uint64
	Read_bytes                uint64
	Write_bytes               uint64
	Cancelled_write_bytes     uint64
	Nvcsw                     uint64
	Nivcsw                    uint64
	Ac_utimescaled            uint64
	Ac_stimescaled            uint64
	Cpu_scaled_run_real_total uint64
	Freepages_count           uint64
	Freepages_delay_total     uint64
	Thrashing_count           uint64
	Thrashing_delay_total     uint64
	Ac_btime64                uint64
	Compact_count             uint64
	Compact_delay_total       uint64
	Ac_tgid                   uint32
	Ac_tgetime                uint64
	Ac_exe_dev                uint64
	Ac_exe_inode              uint64
	Wpcopy_count              uint64
	Wpcopy_delay_total        uint64
}

type cpuMask uint64

const (
	_NCPUBITS = 0x40
)

const (
	CBitFieldMaskBit0  = 0x1
	CBitFieldMaskBit1  = 0x2
	CBitFieldMaskBit2  = 0x4
	CBitFieldMaskBit3  = 0x8
	CBitFieldMaskBit4  = 0x10
	CBitFieldMaskBit5  = 0x20
	CBitFieldMaskBit6  = 0x40
	CBitFieldMaskBit7  = 0x80
	CBitFieldMaskBit8  = 0x100
	CBitFieldMaskBit9  = 0x200
	CBitFieldMaskBit10 = 0x400
	CBitFieldMaskBit11 = 0x800
	CBitFieldMaskBit12 = 0x1000
	CBitFieldMaskBit13 = 0x2000
	CBitFieldMaskBit14 = 0x4000
	CBitFieldMaskBit15 = 0x8000
	CBitFieldMaskBit16 = 0x10000
	CBitFieldMaskBit17 = 0x20000
	CBitFieldMaskBit18 = 0x40000
	CBitFieldMaskBit19 = 0x80000
	CBitFieldMaskBit20 = 0x100000
	CBitFieldMaskBit21 = 0x200000
	CBitFieldMaskBit22 = 0x400000
	CBitFieldMaskBit23 = 0x800000
	CBitFieldMaskBit24 = 0x1000000
	CBitFieldMaskBit25 = 0x2000000
	CBitFieldMaskBit26 = 0x4000000
	CBitFieldMaskBit27 = 0x8000000
	CBitFieldMaskBit28 = 0x10000000
	CBitFieldMaskBit29 = 0x20000000
	CBitFieldMaskBit30 = 0x40000000
	CBitFieldMaskBit31 = 0x80000000
	CBitFieldMaskBit32 = 0x100000000
	CBitFieldMaskBit33 = 0x200000000
	CBitFieldMaskBit34 = 0x400000000
	CBitFieldMaskBit35 = 0x800000000
	CBitFieldMaskBit36 = 0x1000000000
	CBitFieldMaskBit37 = 0x2000000000
	CBitFieldMaskBit38 = 0x4000000000
	CBitFieldMaskBit39 = 0x8000000000
	CBitFieldMaskBit40 = 0x10000000000
	CBitFieldMaskBit41 = 0x20000000000
	CBitFieldMaskBit42 = 0x40000000000
	CBitFieldMaskBit43 = 0x80000000000
	CBitFieldMaskBit44 = 0x100000000000
	CBitFieldMaskBit45 = 0x200000000000
	CBitFieldMaskBit46 = 0x400000000000
	CBitFieldMaskBit47 = 0x800000000000
	CBitFieldMaskBit48 = 0x1000000000000
	CBitFieldMaskBit49 = 0x2000000000000
	CBitFieldMaskBit50 = 0x4000000000000
	CBitFieldMaskBit51 = 0x8000000000000
	CBitFieldMaskBit52 = 0x10000000000000
	CBitFieldMaskBit53 = 0x20000000000000
	CBitFieldMaskBit54 = 0x40000000000000
	CBitFieldMaskBit55 = 0x80000000000000
	CBitFieldMaskBit56 = 0x100000000000000
	CBitFieldMaskBit57 = 0x200000000000000
	CBitFieldMaskBit58 = 0x400000000000000
	CBitFieldMaskBit59 = 0x800000000000000
	CBitFieldMaskBit60 = 0x1000000000000000
	CBitFieldMaskBit61 = 0x2000000000000000
	CBitFieldMaskBit62 = 0x4000000000000000
	CBitFieldMaskBit63 = 0x8000000000000000
)

type SockaddrStorage struct {
	Family uint16
	Data   [118]byte
	_      uint64
}

type HDGeometry struct {
	Heads     uint8
	Sectors   uint8
	Cylinders uint16
	Start     uint64
}

type Statfs_t struct {
	Type    int64
	Bsize   int64
	Blocks  uint64
	Bfree   uint64
	Bavail  uint64
	Files   uint64
	Ffree   uint64
	Fsid    Fsid
	Namelen int64
	Frsize  int64
	Flags   int64
	Spare   [4]int64
}

type TpacketHdr struct {
	Status  uint64
	Len     uint32
	Snaplen uint32
	Mac     uint16
	Net     uint16
	Sec     uint32
	Usec    uint32
	_       [4]byte
}

const (
	SizeofTpacketHdr = 0x20
)

type RTCPLLInfo struct {
	Ctrl    int32
	Value   int32
	Max     int32
	Min     int32
	Posmult int32
	Negmult int32
	Clock   int64
}

type BlkpgPartition struct {
	Start   int64
	Length  int64
	Pno     int32
	Devname [64]uint8
	Volname [64]uint8
	_       [4]byte
}

const (
	BLKPG = 0x1269
)

type XDPUmemReg struct {
	Addr     uint64
	Len      uint64
	Size     uint32
	Headroom uint32
	Flags    uint32
	_        [4]byte
}

type CryptoUserAlg struct {
	Name        [64]int8
	Driver_name [64]int8
	Module_name [64]int8
	Type        uint32
	Mask        uint32
	Refcnt      uint32
	Flags       uint32
}

type CryptoStatAEAD struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatAKCipher struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Verify_cnt   uint64
	Sign_cnt     uint64
	Err_cnt      uint64
}

type CryptoStatCipher struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatCompress struct {
	Type            [64]int8
	Compress_cnt    uint64
	Compress_tlen   uint64
	Decompress_cnt  uint64
	Decompress_tlen uint64
	Err_cnt         uint64
}

type CryptoStatHash struct {
	Type      [64]int8
	Hash_cnt  uint64
	Hash_tlen uint64
	Err_cnt   uint64
}

type CryptoStatKPP struct {
	Type                      [64]int8
	Setsecret_cnt             uint64
	Generate_public_key_cnt   uint64
	Compute_shared_secret_cnt uint64
	Err_cnt                   uint64
}

type CryptoStatRNG struct {
	Type          [64]int8
	Generate_cnt  uint64
	Generate_tlen uint64
	Seed_cnt      uint64
	Err_cnt       uint64
}

type CryptoStatLarval struct {
	Type [64]int8
}

type CryptoReportLarval struct {
	Type [64]int8
}

type CryptoReportHash struct {
	Type       [64]int8
	Blocksize  uint32
	Digestsize uint32
}

type CryptoReportCipher struct {
	Type        [64]int8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
}

type CryptoReportBlkCipher struct {
	Type        [64]int8
	Geniv       [64]int8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
	Ivsize      uint32
}

type CryptoReportAEAD struct {
	Type        [64]int8
	Geniv       [64]int8
	Blocksize   uint32
	Maxauthsize uint32
	Ivsize      uint32
}

type CryptoReportComp struct {
	Type [64]int8
}

type CryptoReportRNG struct {
	Type     [64]int8
	Seedsize uint32
}

type CryptoReportAKCipher struct {
	Type [64]int8
}

type CryptoReportKPP struct {
	Type [64]int8
}

type CryptoReportAcomp struct {
	Type [64]int8
}

type LoopInfo struct {
	Number           int32
	Device           uint32
	Inode            uint64
	Rdevice          uint32
	Offset           int32
	Encrypt_type     int32
	Encrypt_key_size int32
	Flags            int32
	Name             [64]int8
	Encrypt_key      [32]uint8
	Init             [2]uint64
	Reserved         [4]int8
	_                [4]byte
}

type TIPCSubscr struct {
	Seq     TIPCServiceRange
	Timeout uint32
	Filter  uint32
	Handle  [8]int8
}

type TIPCSIOCLNReq struct {
	Peer     uint32
	Id       uint32
	Linkname [68]int8
}

type TIPCSIOCNodeIDReq struct {
	Peer uint32
	Id   [16]int8
}

type PPSKInfo struct {
	Assert_sequence uint32
	Clear_sequence  uint32
	Assert_tu       PPSKTime
	Clear_tu        PPSKTime
	Current_mode    int32
	_               [4]byte
}

const (
	PPS_GETPARAMS = 0x800870a1
	PPS_SETPARAMS = 0x400870a2
	PPS_GETCAP    = 0x800870a3
	PPS_FETCH     = 0xc00870a4
)

const (
	PIDFD_NONBLOCK = 0x800
)

type SysvIpcPerm struct {
	Key  int32
	Uid  uint32
	Gid  uint32
	Cuid uint32
	Cgid uint32
	Mode uint32
	_    [0]uint8
	Seq  uint16
	_    uint16
	_    uint64
	_    uint64
}
type SysvShmDesc struct {
	Perm   SysvIpcPerm
	Segsz  uint64
	Atime  int64
	Dtime  int64
	Ctime  int64
	Cpid   int32
	Lpid   int32
	Nattch uint64
	_      uint64
	_      uint64
}
  07070100000EB9000081A4000000000000000000000001645E367C00003162000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go // cgo -godefs -objdir=/tmp/mips/cgo -- -Wall -Werror -static -I/tmp/mips/include linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build mips && linux
// +build mips,linux

package unix

const (
	SizeofPtr  = 0x4
	SizeofLong = 0x4
)

type (
	_C_long int32
)

type Timespec struct {
	Sec  int32
	Nsec int32
}

type Timeval struct {
	Sec  int32
	Usec int32
}

type Timex struct {
	Modes     uint32
	Offset    int32
	Freq      int32
	Maxerror  int32
	Esterror  int32
	Status    int32
	Constant  int32
	Precision int32
	Tolerance int32
	Time      Timeval
	Tick      int32
	Ppsfreq   int32
	Jitter    int32
	Shift     int32
	Stabil    int32
	Jitcnt    int32
	Calcnt    int32
	Errcnt    int32
	Stbcnt    int32
	Tai       int32
	_         [44]byte
}

type Time_t int32

type Tms struct {
	Utime  int32
	Stime  int32
	Cutime int32
	Cstime int32
}

type Utimbuf struct {
	Actime  int32
	Modtime int32
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int32
	Ixrss    int32
	Idrss    int32
	Isrss    int32
	Minflt   int32
	Majflt   int32
	Nswap    int32
	Inblock  int32
	Oublock  int32
	Msgsnd   int32
	Msgrcv   int32
	Nsignals int32
	Nvcsw    int32
	Nivcsw   int32
}

type Stat_t struct {
	Dev     uint32
	Pad1    [3]int32
	Ino     uint64
	Mode    uint32
	Nlink   uint32
	Uid     uint32
	Gid     uint32
	Rdev    uint32
	Pad2    [3]int32
	Size    int64
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	Blksize int32
	Pad4    int32
	Blocks  int64
	Pad5    [14]int32
}

type Dirent struct {
	Ino    uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Name   [256]int8
	_      [5]byte
}

type Flock_t struct {
	Type   int16
	Whence int16
	_      [4]byte
	Start  int64
	Len    int64
	Pid    int32
	_      [4]byte
}

type DmNameList struct {
	Dev  uint64
	Next uint32
	Name [0]byte
	_    [4]byte
}

const (
	FADV_DONTNEED = 0x4
	FADV_NOREUSE  = 0x5
)

type RawSockaddrNFCLLCP struct {
	Sa_family        uint16
	Dev_idx          uint32
	Target_idx       uint32
	Nfc_protocol     uint32
	Dsap             uint8
	Ssap             uint8
	Service_name     [63]uint8
	Service_name_len uint32
}

type RawSockaddr struct {
	Family uint16
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [96]int8
}

type Iovec struct {
	Base *byte
	Len  uint32
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     uint32
	Control    *byte
	Controllen uint32
	Flags      int32
}

type Cmsghdr struct {
	Len   uint32
	Level int32
	Type  int32
}

type ifreq struct {
	Ifrn [16]byte
	Ifru [16]byte
}

const (
	SizeofSockaddrNFCLLCP = 0x58
	SizeofIovec           = 0x8
	SizeofMsghdr          = 0x1c
	SizeofCmsghdr         = 0xc
)

const (
	SizeofSockFprog = 0x8
)

type PtraceRegs struct {
	Regs     [32]uint64
	Lo       uint64
	Hi       uint64
	Epc      uint64
	Badvaddr uint64
	Status   uint64
	Cause    uint64
}

type FdSet struct {
	Bits [32]int32
}

type Sysinfo_t struct {
	Uptime    int32
	Loads     [3]uint32
	Totalram  uint32
	Freeram   uint32
	Sharedram uint32
	Bufferram uint32
	Totalswap uint32
	Freeswap  uint32
	Procs     uint16
	Pad       uint16
	Totalhigh uint32
	Freehigh  uint32
	Unit      uint32
	_         [8]int8
}

type Ustat_t struct {
	Tfree  int32
	Tinode uint32
	Fname  [6]int8
	Fpack  [6]int8
}

type EpollEvent struct {
	Events uint32
	PadFd  int32
	Fd     int32
	Pad    int32
}

const (
	OPEN_TREE_CLOEXEC = 0x80000
)

const (
	POLLRDHUP = 0x2000
)

type Sigset_t struct {
	Val [32]uint32
}

const _C__NSIG = 0x80

const (
	SIG_BLOCK   = 0x1
	SIG_UNBLOCK = 0x2
	SIG_SETMASK = 0x3
)

type Siginfo struct {
	Signo int32
	Code  int32
	Errno int32
	_     [116]byte
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Line   uint8
	Cc     [23]uint8
	Ispeed uint32
	Ospeed uint32
}

type Taskstats struct {
	Version                   uint16
	Ac_exitcode               uint32
	Ac_flag                   uint8
	Ac_nice                   uint8
	_                         [4]byte
	Cpu_count                 uint64
	Cpu_delay_total           uint64
	Blkio_count               uint64
	Blkio_delay_total         uint64
	Swapin_count              uint64
	Swapin_delay_total        uint64
	Cpu_run_real_total        uint64
	Cpu_run_virtual_total     uint64
	Ac_comm                   [32]int8
	Ac_sched                  uint8
	Ac_pad                    [3]uint8
	_                         [4]byte
	Ac_uid                    uint32
	Ac_gid                    uint32
	Ac_pid                    uint32
	Ac_ppid                   uint32
	Ac_btime                  uint32
	_                         [4]byte
	Ac_etime                  uint64
	Ac_utime                  uint64
	Ac_stime                  uint64
	Ac_minflt                 uint64
	Ac_majflt                 uint64
	Coremem                   uint64
	Virtmem                   uint64
	Hiwater_rss               uint64
	Hiwater_vm                uint64
	Read_char                 uint64
	Write_char                uint64
	Read_syscalls             uint64
	Write_syscalls            uint64
	Read_bytes                uint64
	Write_bytes               uint64
	Cancelled_write_bytes     uint64
	Nvcsw                     uint64
	Nivcsw                    uint64
	Ac_utimescaled            uint64
	Ac_stimescaled            uint64
	Cpu_scaled_run_real_total uint64
	Freepages_count           uint64
	Freepages_delay_total     uint64
	Thrashing_count           uint64
	Thrashing_delay_total     uint64
	Ac_btime64                uint64
	Compact_count             uint64
	Compact_delay_total       uint64
	Ac_tgid                   uint32
	_                         [4]byte
	Ac_tgetime                uint64
	Ac_exe_dev                uint64
	Ac_exe_inode              uint64
	Wpcopy_count              uint64
	Wpcopy_delay_total        uint64
}

type cpuMask uint32

const (
	_NCPUBITS = 0x20
)

const (
	CBitFieldMaskBit0  = 0x8000000000000000
	CBitFieldMaskBit1  = 0x4000000000000000
	CBitFieldMaskBit2  = 0x2000000000000000
	CBitFieldMaskBit3  = 0x1000000000000000
	CBitFieldMaskBit4  = 0x800000000000000
	CBitFieldMaskBit5  = 0x400000000000000
	CBitFieldMaskBit6  = 0x200000000000000
	CBitFieldMaskBit7  = 0x100000000000000
	CBitFieldMaskBit8  = 0x80000000000000
	CBitFieldMaskBit9  = 0x40000000000000
	CBitFieldMaskBit10 = 0x20000000000000
	CBitFieldMaskBit11 = 0x10000000000000
	CBitFieldMaskBit12 = 0x8000000000000
	CBitFieldMaskBit13 = 0x4000000000000
	CBitFieldMaskBit14 = 0x2000000000000
	CBitFieldMaskBit15 = 0x1000000000000
	CBitFieldMaskBit16 = 0x800000000000
	CBitFieldMaskBit17 = 0x400000000000
	CBitFieldMaskBit18 = 0x200000000000
	CBitFieldMaskBit19 = 0x100000000000
	CBitFieldMaskBit20 = 0x80000000000
	CBitFieldMaskBit21 = 0x40000000000
	CBitFieldMaskBit22 = 0x20000000000
	CBitFieldMaskBit23 = 0x10000000000
	CBitFieldMaskBit24 = 0x8000000000
	CBitFieldMaskBit25 = 0x4000000000
	CBitFieldMaskBit26 = 0x2000000000
	CBitFieldMaskBit27 = 0x1000000000
	CBitFieldMaskBit28 = 0x800000000
	CBitFieldMaskBit29 = 0x400000000
	CBitFieldMaskBit30 = 0x200000000
	CBitFieldMaskBit31 = 0x100000000
	CBitFieldMaskBit32 = 0x80000000
	CBitFieldMaskBit33 = 0x40000000
	CBitFieldMaskBit34 = 0x20000000
	CBitFieldMaskBit35 = 0x10000000
	CBitFieldMaskBit36 = 0x8000000
	CBitFieldMaskBit37 = 0x4000000
	CBitFieldMaskBit38 = 0x2000000
	CBitFieldMaskBit39 = 0x1000000
	CBitFieldMaskBit40 = 0x800000
	CBitFieldMaskBit41 = 0x400000
	CBitFieldMaskBit42 = 0x200000
	CBitFieldMaskBit43 = 0x100000
	CBitFieldMaskBit44 = 0x80000
	CBitFieldMaskBit45 = 0x40000
	CBitFieldMaskBit46 = 0x20000
	CBitFieldMaskBit47 = 0x10000
	CBitFieldMaskBit48 = 0x8000
	CBitFieldMaskBit49 = 0x4000
	CBitFieldMaskBit50 = 0x2000
	CBitFieldMaskBit51 = 0x1000
	CBitFieldMaskBit52 = 0x800
	CBitFieldMaskBit53 = 0x400
	CBitFieldMaskBit54 = 0x200
	CBitFieldMaskBit55 = 0x100
	CBitFieldMaskBit56 = 0x80
	CBitFieldMaskBit57 = 0x40
	CBitFieldMaskBit58 = 0x20
	CBitFieldMaskBit59 = 0x10
	CBitFieldMaskBit60 = 0x8
	CBitFieldMaskBit61 = 0x4
	CBitFieldMaskBit62 = 0x2
	CBitFieldMaskBit63 = 0x1
)

type SockaddrStorage struct {
	Family uint16
	Data   [122]byte
	_      uint32
}

type HDGeometry struct {
	Heads     uint8
	Sectors   uint8
	Cylinders uint16
	Start     uint32
}

type Statfs_t struct {
	Type    int32
	Bsize   int32
	Frsize  int32
	_       [4]byte
	Blocks  uint64
	Bfree   uint64
	Files   uint64
	Ffree   uint64
	Bavail  uint64
	Fsid    Fsid
	Namelen int32
	Flags   int32
	Spare   [5]int32
	_       [4]byte
}

type TpacketHdr struct {
	Status  uint32
	Len     uint32
	Snaplen uint32
	Mac     uint16
	Net     uint16
	Sec     uint32
	Usec    uint32
}

const (
	SizeofTpacketHdr = 0x18
)

type RTCPLLInfo struct {
	Ctrl    int32
	Value   int32
	Max     int32
	Min     int32
	Posmult int32
	Negmult int32
	Clock   int32
}

type BlkpgPartition struct {
	Start   int64
	Length  int64
	Pno     int32
	Devname [64]uint8
	Volname [64]uint8
	_       [4]byte
}

const (
	BLKPG = 0x20001269
)

type XDPUmemReg struct {
	Addr     uint64
	Len      uint64
	Size     uint32
	Headroom uint32
	Flags    uint32
	_        [4]byte
}

type CryptoUserAlg struct {
	Name        [64]int8
	Driver_name [64]int8
	Module_name [64]int8
	Type        uint32
	Mask        uint32
	Refcnt      uint32
	Flags       uint32
}

type CryptoStatAEAD struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatAKCipher struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Verify_cnt   uint64
	Sign_cnt     uint64
	Err_cnt      uint64
}

type CryptoStatCipher struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatCompress struct {
	Type            [64]int8
	Compress_cnt    uint64
	Compress_tlen   uint64
	Decompress_cnt  uint64
	Decompress_tlen uint64
	Err_cnt         uint64
}

type CryptoStatHash struct {
	Type      [64]int8
	Hash_cnt  uint64
	Hash_tlen uint64
	Err_cnt   uint64
}

type CryptoStatKPP struct {
	Type                      [64]int8
	Setsecret_cnt             uint64
	Generate_public_key_cnt   uint64
	Compute_shared_secret_cnt uint64
	Err_cnt                   uint64
}

type CryptoStatRNG struct {
	Type          [64]int8
	Generate_cnt  uint64
	Generate_tlen uint64
	Seed_cnt      uint64
	Err_cnt       uint64
}

type CryptoStatLarval struct {
	Type [64]int8
}

type CryptoReportLarval struct {
	Type [64]int8
}

type CryptoReportHash struct {
	Type       [64]int8
	Blocksize  uint32
	Digestsize uint32
}

type CryptoReportCipher struct {
	Type        [64]int8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
}

type CryptoReportBlkCipher struct {
	Type        [64]int8
	Geniv       [64]int8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
	Ivsize      uint32
}

type CryptoReportAEAD struct {
	Type        [64]int8
	Geniv       [64]int8
	Blocksize   uint32
	Maxauthsize uint32
	Ivsize      uint32
}

type CryptoReportComp struct {
	Type [64]int8
}

type CryptoReportRNG struct {
	Type     [64]int8
	Seedsize uint32
}

type CryptoReportAKCipher struct {
	Type [64]int8
}

type CryptoReportKPP struct {
	Type [64]int8
}

type CryptoReportAcomp struct {
	Type [64]int8
}

type LoopInfo struct {
	Number           int32
	Device           uint32
	Inode            uint32
	Rdevice          uint32
	Offset           int32
	Encrypt_type     int32
	Encrypt_key_size int32
	Flags            int32
	Name             [64]int8
	Encrypt_key      [32]uint8
	Init             [2]uint32
	Reserved         [4]int8
}

type TIPCSubscr struct {
	Seq     TIPCServiceRange
	Timeout uint32
	Filter  uint32
	Handle  [8]int8
}

type TIPCSIOCLNReq struct {
	Peer     uint32
	Id       uint32
	Linkname [68]int8
}

type TIPCSIOCNodeIDReq struct {
	Peer uint32
	Id   [16]int8
}

type PPSKInfo struct {
	Assert_sequence uint32
	Clear_sequence  uint32
	Assert_tu       PPSKTime
	Clear_tu        PPSKTime
	Current_mode    int32
	_               [4]byte
}

const (
	PPS_GETPARAMS = 0x400470a1
	PPS_SETPARAMS = 0x800470a2
	PPS_GETCAP    = 0x400470a3
	PPS_FETCH     = 0xc00470a4
)

const (
	PIDFD_NONBLOCK = 0x80
)

type SysvIpcPerm struct {
	Key  int32
	Uid  uint32
	Gid  uint32
	Cuid uint32
	Cgid uint32
	Mode uint32
	_    [0]uint8
	Seq  uint16
	_    uint16
	_    uint32
	_    uint32
}
type SysvShmDesc struct {
	Perm       SysvIpcPerm
	Segsz      uint32
	Atime      uint32
	Dtime      uint32
	Ctime      uint32
	Cpid       int32
	Lpid       int32
	Nattch     uint32
	Atime_high uint16
	Dtime_high uint16
	Ctime_high uint16
	_          uint16
}
  07070100000EBA000081A4000000000000000000000001645E367C000030E1000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go   // cgo -godefs -objdir=/tmp/mips64/cgo -- -Wall -Werror -static -I/tmp/mips64/include linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build mips64 && linux
// +build mips64,linux

package unix

const (
	SizeofPtr  = 0x8
	SizeofLong = 0x8
)

type (
	_C_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int64
}

type Timeval struct {
	Sec  int64
	Usec int64
}

type Timex struct {
	Modes     uint32
	Offset    int64
	Freq      int64
	Maxerror  int64
	Esterror  int64
	Status    int32
	Constant  int64
	Precision int64
	Tolerance int64
	Time      Timeval
	Tick      int64
	Ppsfreq   int64
	Jitter    int64
	Shift     int32
	Stabil    int64
	Jitcnt    int64
	Calcnt    int64
	Errcnt    int64
	Stbcnt    int64
	Tai       int32
	_         [44]byte
}

type Time_t int64

type Tms struct {
	Utime  int64
	Stime  int64
	Cutime int64
	Cstime int64
}

type Utimbuf struct {
	Actime  int64
	Modtime int64
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int64
	Ixrss    int64
	Idrss    int64
	Isrss    int64
	Minflt   int64
	Majflt   int64
	Nswap    int64
	Inblock  int64
	Oublock  int64
	Msgsnd   int64
	Msgrcv   int64
	Nsignals int64
	Nvcsw    int64
	Nivcsw   int64
}

type Stat_t struct {
	Dev     uint32
	Pad1    [3]uint32
	Ino     uint64
	Mode    uint32
	Nlink   uint32
	Uid     uint32
	Gid     uint32
	Rdev    uint32
	Pad2    [3]uint32
	Size    int64
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	Blksize uint32
	Pad4    uint32
	Blocks  int64
}

type Dirent struct {
	Ino    uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Name   [256]int8
	_      [5]byte
}

type Flock_t struct {
	Type   int16
	Whence int16
	Start  int64
	Len    int64
	Pid    int32
	_      [4]byte
}

type DmNameList struct {
	Dev  uint64
	Next uint32
	Name [0]byte
	_    [4]byte
}

const (
	FADV_DONTNEED = 0x4
	FADV_NOREUSE  = 0x5
)

type RawSockaddrNFCLLCP struct {
	Sa_family        uint16
	Dev_idx          uint32
	Target_idx       uint32
	Nfc_protocol     uint32
	Dsap             uint8
	Ssap             uint8
	Service_name     [63]uint8
	Service_name_len uint64
}

type RawSockaddr struct {
	Family uint16
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [96]int8
}

type Iovec struct {
	Base *byte
	Len  uint64
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     uint64
	Control    *byte
	Controllen uint64
	Flags      int32
	_          [4]byte
}

type Cmsghdr struct {
	Len   uint64
	Level int32
	Type  int32
}

type ifreq struct {
	Ifrn [16]byte
	Ifru [24]byte
}

const (
	SizeofSockaddrNFCLLCP = 0x60
	SizeofIovec           = 0x10
	SizeofMsghdr          = 0x38
	SizeofCmsghdr         = 0x10
)

const (
	SizeofSockFprog = 0x10
)

type PtraceRegs struct {
	Regs     [32]uint64
	Lo       uint64
	Hi       uint64
	Epc      uint64
	Badvaddr uint64
	Status   uint64
	Cause    uint64
}

type FdSet struct {
	Bits [16]int64
}

type Sysinfo_t struct {
	Uptime    int64
	Loads     [3]uint64
	Totalram  uint64
	Freeram   uint64
	Sharedram uint64
	Bufferram uint64
	Totalswap uint64
	Freeswap  uint64
	Procs     uint16
	Pad       uint16
	Totalhigh uint64
	Freehigh  uint64
	Unit      uint32
	_         [0]int8
	_         [4]byte
}

type Ustat_t struct {
	Tfree  int32
	Tinode uint64
	Fname  [6]int8
	Fpack  [6]int8
	_      [4]byte
}

type EpollEvent struct {
	Events uint32
	_      int32
	Fd     int32
	Pad    int32
}

const (
	OPEN_TREE_CLOEXEC = 0x80000
)

const (
	POLLRDHUP = 0x2000
)

type Sigset_t struct {
	Val [16]uint64
}

const _C__NSIG = 0x80

const (
	SIG_BLOCK   = 0x1
	SIG_UNBLOCK = 0x2
	SIG_SETMASK = 0x3
)

type Siginfo struct {
	Signo int32
	Code  int32
	Errno int32
	_     int32
	_     [112]byte
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Line   uint8
	Cc     [23]uint8
	Ispeed uint32
	Ospeed uint32
}

type Taskstats struct {
	Version                   uint16
	Ac_exitcode               uint32
	Ac_flag                   uint8
	Ac_nice                   uint8
	Cpu_count                 uint64
	Cpu_delay_total           uint64
	Blkio_count               uint64
	Blkio_delay_total         uint64
	Swapin_count              uint64
	Swapin_delay_total        uint64
	Cpu_run_real_total        uint64
	Cpu_run_virtual_total     uint64
	Ac_comm                   [32]int8
	Ac_sched                  uint8
	Ac_pad                    [3]uint8
	_                         [4]byte
	Ac_uid                    uint32
	Ac_gid                    uint32
	Ac_pid                    uint32
	Ac_ppid                   uint32
	Ac_btime                  uint32
	Ac_etime                  uint64
	Ac_utime                  uint64
	Ac_stime                  uint64
	Ac_minflt                 uint64
	Ac_majflt                 uint64
	Coremem                   uint64
	Virtmem                   uint64
	Hiwater_rss               uint64
	Hiwater_vm                uint64
	Read_char                 uint64
	Write_char                uint64
	Read_syscalls             uint64
	Write_syscalls            uint64
	Read_bytes                uint64
	Write_bytes               uint64
	Cancelled_write_bytes     uint64
	Nvcsw                     uint64
	Nivcsw                    uint64
	Ac_utimescaled            uint64
	Ac_stimescaled            uint64
	Cpu_scaled_run_real_total uint64
	Freepages_count           uint64
	Freepages_delay_total     uint64
	Thrashing_count           uint64
	Thrashing_delay_total     uint64
	Ac_btime64                uint64
	Compact_count             uint64
	Compact_delay_total       uint64
	Ac_tgid                   uint32
	Ac_tgetime                uint64
	Ac_exe_dev                uint64
	Ac_exe_inode              uint64
	Wpcopy_count              uint64
	Wpcopy_delay_total        uint64
}

type cpuMask uint64

const (
	_NCPUBITS = 0x40
)

const (
	CBitFieldMaskBit0  = 0x8000000000000000
	CBitFieldMaskBit1  = 0x4000000000000000
	CBitFieldMaskBit2  = 0x2000000000000000
	CBitFieldMaskBit3  = 0x1000000000000000
	CBitFieldMaskBit4  = 0x800000000000000
	CBitFieldMaskBit5  = 0x400000000000000
	CBitFieldMaskBit6  = 0x200000000000000
	CBitFieldMaskBit7  = 0x100000000000000
	CBitFieldMaskBit8  = 0x80000000000000
	CBitFieldMaskBit9  = 0x40000000000000
	CBitFieldMaskBit10 = 0x20000000000000
	CBitFieldMaskBit11 = 0x10000000000000
	CBitFieldMaskBit12 = 0x8000000000000
	CBitFieldMaskBit13 = 0x4000000000000
	CBitFieldMaskBit14 = 0x2000000000000
	CBitFieldMaskBit15 = 0x1000000000000
	CBitFieldMaskBit16 = 0x800000000000
	CBitFieldMaskBit17 = 0x400000000000
	CBitFieldMaskBit18 = 0x200000000000
	CBitFieldMaskBit19 = 0x100000000000
	CBitFieldMaskBit20 = 0x80000000000
	CBitFieldMaskBit21 = 0x40000000000
	CBitFieldMaskBit22 = 0x20000000000
	CBitFieldMaskBit23 = 0x10000000000
	CBitFieldMaskBit24 = 0x8000000000
	CBitFieldMaskBit25 = 0x4000000000
	CBitFieldMaskBit26 = 0x2000000000
	CBitFieldMaskBit27 = 0x1000000000
	CBitFieldMaskBit28 = 0x800000000
	CBitFieldMaskBit29 = 0x400000000
	CBitFieldMaskBit30 = 0x200000000
	CBitFieldMaskBit31 = 0x100000000
	CBitFieldMaskBit32 = 0x80000000
	CBitFieldMaskBit33 = 0x40000000
	CBitFieldMaskBit34 = 0x20000000
	CBitFieldMaskBit35 = 0x10000000
	CBitFieldMaskBit36 = 0x8000000
	CBitFieldMaskBit37 = 0x4000000
	CBitFieldMaskBit38 = 0x2000000
	CBitFieldMaskBit39 = 0x1000000
	CBitFieldMaskBit40 = 0x800000
	CBitFieldMaskBit41 = 0x400000
	CBitFieldMaskBit42 = 0x200000
	CBitFieldMaskBit43 = 0x100000
	CBitFieldMaskBit44 = 0x80000
	CBitFieldMaskBit45 = 0x40000
	CBitFieldMaskBit46 = 0x20000
	CBitFieldMaskBit47 = 0x10000
	CBitFieldMaskBit48 = 0x8000
	CBitFieldMaskBit49 = 0x4000
	CBitFieldMaskBit50 = 0x2000
	CBitFieldMaskBit51 = 0x1000
	CBitFieldMaskBit52 = 0x800
	CBitFieldMaskBit53 = 0x400
	CBitFieldMaskBit54 = 0x200
	CBitFieldMaskBit55 = 0x100
	CBitFieldMaskBit56 = 0x80
	CBitFieldMaskBit57 = 0x40
	CBitFieldMaskBit58 = 0x20
	CBitFieldMaskBit59 = 0x10
	CBitFieldMaskBit60 = 0x8
	CBitFieldMaskBit61 = 0x4
	CBitFieldMaskBit62 = 0x2
	CBitFieldMaskBit63 = 0x1
)

type SockaddrStorage struct {
	Family uint16
	Data   [118]byte
	_      uint64
}

type HDGeometry struct {
	Heads     uint8
	Sectors   uint8
	Cylinders uint16
	Start     uint64
}

type Statfs_t struct {
	Type    int64
	Bsize   int64
	Frsize  int64
	Blocks  uint64
	Bfree   uint64
	Files   uint64
	Ffree   uint64
	Bavail  uint64
	Fsid    Fsid
	Namelen int64
	Flags   int64
	Spare   [5]int64
}

type TpacketHdr struct {
	Status  uint64
	Len     uint32
	Snaplen uint32
	Mac     uint16
	Net     uint16
	Sec     uint32
	Usec    uint32
	_       [4]byte
}

const (
	SizeofTpacketHdr = 0x20
)

type RTCPLLInfo struct {
	Ctrl    int32
	Value   int32
	Max     int32
	Min     int32
	Posmult int32
	Negmult int32
	Clock   int64
}

type BlkpgPartition struct {
	Start   int64
	Length  int64
	Pno     int32
	Devname [64]uint8
	Volname [64]uint8
	_       [4]byte
}

const (
	BLKPG = 0x20001269
)

type XDPUmemReg struct {
	Addr     uint64
	Len      uint64
	Size     uint32
	Headroom uint32
	Flags    uint32
	_        [4]byte
}

type CryptoUserAlg struct {
	Name        [64]int8
	Driver_name [64]int8
	Module_name [64]int8
	Type        uint32
	Mask        uint32
	Refcnt      uint32
	Flags       uint32
}

type CryptoStatAEAD struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatAKCipher struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Verify_cnt   uint64
	Sign_cnt     uint64
	Err_cnt      uint64
}

type CryptoStatCipher struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatCompress struct {
	Type            [64]int8
	Compress_cnt    uint64
	Compress_tlen   uint64
	Decompress_cnt  uint64
	Decompress_tlen uint64
	Err_cnt         uint64
}

type CryptoStatHash struct {
	Type      [64]int8
	Hash_cnt  uint64
	Hash_tlen uint64
	Err_cnt   uint64
}

type CryptoStatKPP struct {
	Type                      [64]int8
	Setsecret_cnt             uint64
	Generate_public_key_cnt   uint64
	Compute_shared_secret_cnt uint64
	Err_cnt                   uint64
}

type CryptoStatRNG struct {
	Type          [64]int8
	Generate_cnt  uint64
	Generate_tlen uint64
	Seed_cnt      uint64
	Err_cnt       uint64
}

type CryptoStatLarval struct {
	Type [64]int8
}

type CryptoReportLarval struct {
	Type [64]int8
}

type CryptoReportHash struct {
	Type       [64]int8
	Blocksize  uint32
	Digestsize uint32
}

type CryptoReportCipher struct {
	Type        [64]int8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
}

type CryptoReportBlkCipher struct {
	Type        [64]int8
	Geniv       [64]int8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
	Ivsize      uint32
}

type CryptoReportAEAD struct {
	Type        [64]int8
	Geniv       [64]int8
	Blocksize   uint32
	Maxauthsize uint32
	Ivsize      uint32
}

type CryptoReportComp struct {
	Type [64]int8
}

type CryptoReportRNG struct {
	Type     [64]int8
	Seedsize uint32
}

type CryptoReportAKCipher struct {
	Type [64]int8
}

type CryptoReportKPP struct {
	Type [64]int8
}

type CryptoReportAcomp struct {
	Type [64]int8
}

type LoopInfo struct {
	Number           int32
	Device           uint32
	Inode            uint64
	Rdevice          uint32
	Offset           int32
	Encrypt_type     int32
	Encrypt_key_size int32
	Flags            int32
	Name             [64]int8
	Encrypt_key      [32]uint8
	Init             [2]uint64
	Reserved         [4]int8
	_                [4]byte
}

type TIPCSubscr struct {
	Seq     TIPCServiceRange
	Timeout uint32
	Filter  uint32
	Handle  [8]int8
}

type TIPCSIOCLNReq struct {
	Peer     uint32
	Id       uint32
	Linkname [68]int8
}

type TIPCSIOCNodeIDReq struct {
	Peer uint32
	Id   [16]int8
}

type PPSKInfo struct {
	Assert_sequence uint32
	Clear_sequence  uint32
	Assert_tu       PPSKTime
	Clear_tu        PPSKTime
	Current_mode    int32
	_               [4]byte
}

const (
	PPS_GETPARAMS = 0x400870a1
	PPS_SETPARAMS = 0x800870a2
	PPS_GETCAP    = 0x400870a3
	PPS_FETCH     = 0xc00870a4
)

const (
	PIDFD_NONBLOCK = 0x80
)

type SysvIpcPerm struct {
	Key  int32
	Uid  uint32
	Gid  uint32
	Cuid uint32
	Cgid uint32
	Mode uint32
	_    [0]uint8
	Seq  uint16
	_    uint16
	_    uint64
	_    uint64
}
type SysvShmDesc struct {
	Perm   SysvIpcPerm
	Segsz  uint64
	Atime  int64
	Dtime  int64
	Ctime  int64
	Cpid   int32
	Lpid   int32
	Nattch uint64
	_      uint64
	_      uint64
}
   07070100000EBB000081A4000000000000000000000001645E367C000030E9000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go // cgo -godefs -objdir=/tmp/mips64le/cgo -- -Wall -Werror -static -I/tmp/mips64le/include linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build mips64le && linux
// +build mips64le,linux

package unix

const (
	SizeofPtr  = 0x8
	SizeofLong = 0x8
)

type (
	_C_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int64
}

type Timeval struct {
	Sec  int64
	Usec int64
}

type Timex struct {
	Modes     uint32
	Offset    int64
	Freq      int64
	Maxerror  int64
	Esterror  int64
	Status    int32
	Constant  int64
	Precision int64
	Tolerance int64
	Time      Timeval
	Tick      int64
	Ppsfreq   int64
	Jitter    int64
	Shift     int32
	Stabil    int64
	Jitcnt    int64
	Calcnt    int64
	Errcnt    int64
	Stbcnt    int64
	Tai       int32
	_         [44]byte
}

type Time_t int64

type Tms struct {
	Utime  int64
	Stime  int64
	Cutime int64
	Cstime int64
}

type Utimbuf struct {
	Actime  int64
	Modtime int64
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int64
	Ixrss    int64
	Idrss    int64
	Isrss    int64
	Minflt   int64
	Majflt   int64
	Nswap    int64
	Inblock  int64
	Oublock  int64
	Msgsnd   int64
	Msgrcv   int64
	Nsignals int64
	Nvcsw    int64
	Nivcsw   int64
}

type Stat_t struct {
	Dev     uint32
	Pad1    [3]uint32
	Ino     uint64
	Mode    uint32
	Nlink   uint32
	Uid     uint32
	Gid     uint32
	Rdev    uint32
	Pad2    [3]uint32
	Size    int64
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	Blksize uint32
	Pad4    uint32
	Blocks  int64
}

type Dirent struct {
	Ino    uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Name   [256]int8
	_      [5]byte
}

type Flock_t struct {
	Type   int16
	Whence int16
	Start  int64
	Len    int64
	Pid    int32
	_      [4]byte
}

type DmNameList struct {
	Dev  uint64
	Next uint32
	Name [0]byte
	_    [4]byte
}

const (
	FADV_DONTNEED = 0x4
	FADV_NOREUSE  = 0x5
)

type RawSockaddrNFCLLCP struct {
	Sa_family        uint16
	Dev_idx          uint32
	Target_idx       uint32
	Nfc_protocol     uint32
	Dsap             uint8
	Ssap             uint8
	Service_name     [63]uint8
	Service_name_len uint64
}

type RawSockaddr struct {
	Family uint16
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [96]int8
}

type Iovec struct {
	Base *byte
	Len  uint64
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     uint64
	Control    *byte
	Controllen uint64
	Flags      int32
	_          [4]byte
}

type Cmsghdr struct {
	Len   uint64
	Level int32
	Type  int32
}

type ifreq struct {
	Ifrn [16]byte
	Ifru [24]byte
}

const (
	SizeofSockaddrNFCLLCP = 0x60
	SizeofIovec           = 0x10
	SizeofMsghdr          = 0x38
	SizeofCmsghdr         = 0x10
)

const (
	SizeofSockFprog = 0x10
)

type PtraceRegs struct {
	Regs     [32]uint64
	Lo       uint64
	Hi       uint64
	Epc      uint64
	Badvaddr uint64
	Status   uint64
	Cause    uint64
}

type FdSet struct {
	Bits [16]int64
}

type Sysinfo_t struct {
	Uptime    int64
	Loads     [3]uint64
	Totalram  uint64
	Freeram   uint64
	Sharedram uint64
	Bufferram uint64
	Totalswap uint64
	Freeswap  uint64
	Procs     uint16
	Pad       uint16
	Totalhigh uint64
	Freehigh  uint64
	Unit      uint32
	_         [0]int8
	_         [4]byte
}

type Ustat_t struct {
	Tfree  int32
	Tinode uint64
	Fname  [6]int8
	Fpack  [6]int8
	_      [4]byte
}

type EpollEvent struct {
	Events uint32
	_      int32
	Fd     int32
	Pad    int32
}

const (
	OPEN_TREE_CLOEXEC = 0x80000
)

const (
	POLLRDHUP = 0x2000
)

type Sigset_t struct {
	Val [16]uint64
}

const _C__NSIG = 0x80

const (
	SIG_BLOCK   = 0x1
	SIG_UNBLOCK = 0x2
	SIG_SETMASK = 0x3
)

type Siginfo struct {
	Signo int32
	Code  int32
	Errno int32
	_     int32
	_     [112]byte
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Line   uint8
	Cc     [23]uint8
	Ispeed uint32
	Ospeed uint32
}

type Taskstats struct {
	Version                   uint16
	Ac_exitcode               uint32
	Ac_flag                   uint8
	Ac_nice                   uint8
	Cpu_count                 uint64
	Cpu_delay_total           uint64
	Blkio_count               uint64
	Blkio_delay_total         uint64
	Swapin_count              uint64
	Swapin_delay_total        uint64
	Cpu_run_real_total        uint64
	Cpu_run_virtual_total     uint64
	Ac_comm                   [32]int8
	Ac_sched                  uint8
	Ac_pad                    [3]uint8
	_                         [4]byte
	Ac_uid                    uint32
	Ac_gid                    uint32
	Ac_pid                    uint32
	Ac_ppid                   uint32
	Ac_btime                  uint32
	Ac_etime                  uint64
	Ac_utime                  uint64
	Ac_stime                  uint64
	Ac_minflt                 uint64
	Ac_majflt                 uint64
	Coremem                   uint64
	Virtmem                   uint64
	Hiwater_rss               uint64
	Hiwater_vm                uint64
	Read_char                 uint64
	Write_char                uint64
	Read_syscalls             uint64
	Write_syscalls            uint64
	Read_bytes                uint64
	Write_bytes               uint64
	Cancelled_write_bytes     uint64
	Nvcsw                     uint64
	Nivcsw                    uint64
	Ac_utimescaled            uint64
	Ac_stimescaled            uint64
	Cpu_scaled_run_real_total uint64
	Freepages_count           uint64
	Freepages_delay_total     uint64
	Thrashing_count           uint64
	Thrashing_delay_total     uint64
	Ac_btime64                uint64
	Compact_count             uint64
	Compact_delay_total       uint64
	Ac_tgid                   uint32
	Ac_tgetime                uint64
	Ac_exe_dev                uint64
	Ac_exe_inode              uint64
	Wpcopy_count              uint64
	Wpcopy_delay_total        uint64
}

type cpuMask uint64

const (
	_NCPUBITS = 0x40
)

const (
	CBitFieldMaskBit0  = 0x1
	CBitFieldMaskBit1  = 0x2
	CBitFieldMaskBit2  = 0x4
	CBitFieldMaskBit3  = 0x8
	CBitFieldMaskBit4  = 0x10
	CBitFieldMaskBit5  = 0x20
	CBitFieldMaskBit6  = 0x40
	CBitFieldMaskBit7  = 0x80
	CBitFieldMaskBit8  = 0x100
	CBitFieldMaskBit9  = 0x200
	CBitFieldMaskBit10 = 0x400
	CBitFieldMaskBit11 = 0x800
	CBitFieldMaskBit12 = 0x1000
	CBitFieldMaskBit13 = 0x2000
	CBitFieldMaskBit14 = 0x4000
	CBitFieldMaskBit15 = 0x8000
	CBitFieldMaskBit16 = 0x10000
	CBitFieldMaskBit17 = 0x20000
	CBitFieldMaskBit18 = 0x40000
	CBitFieldMaskBit19 = 0x80000
	CBitFieldMaskBit20 = 0x100000
	CBitFieldMaskBit21 = 0x200000
	CBitFieldMaskBit22 = 0x400000
	CBitFieldMaskBit23 = 0x800000
	CBitFieldMaskBit24 = 0x1000000
	CBitFieldMaskBit25 = 0x2000000
	CBitFieldMaskBit26 = 0x4000000
	CBitFieldMaskBit27 = 0x8000000
	CBitFieldMaskBit28 = 0x10000000
	CBitFieldMaskBit29 = 0x20000000
	CBitFieldMaskBit30 = 0x40000000
	CBitFieldMaskBit31 = 0x80000000
	CBitFieldMaskBit32 = 0x100000000
	CBitFieldMaskBit33 = 0x200000000
	CBitFieldMaskBit34 = 0x400000000
	CBitFieldMaskBit35 = 0x800000000
	CBitFieldMaskBit36 = 0x1000000000
	CBitFieldMaskBit37 = 0x2000000000
	CBitFieldMaskBit38 = 0x4000000000
	CBitFieldMaskBit39 = 0x8000000000
	CBitFieldMaskBit40 = 0x10000000000
	CBitFieldMaskBit41 = 0x20000000000
	CBitFieldMaskBit42 = 0x40000000000
	CBitFieldMaskBit43 = 0x80000000000
	CBitFieldMaskBit44 = 0x100000000000
	CBitFieldMaskBit45 = 0x200000000000
	CBitFieldMaskBit46 = 0x400000000000
	CBitFieldMaskBit47 = 0x800000000000
	CBitFieldMaskBit48 = 0x1000000000000
	CBitFieldMaskBit49 = 0x2000000000000
	CBitFieldMaskBit50 = 0x4000000000000
	CBitFieldMaskBit51 = 0x8000000000000
	CBitFieldMaskBit52 = 0x10000000000000
	CBitFieldMaskBit53 = 0x20000000000000
	CBitFieldMaskBit54 = 0x40000000000000
	CBitFieldMaskBit55 = 0x80000000000000
	CBitFieldMaskBit56 = 0x100000000000000
	CBitFieldMaskBit57 = 0x200000000000000
	CBitFieldMaskBit58 = 0x400000000000000
	CBitFieldMaskBit59 = 0x800000000000000
	CBitFieldMaskBit60 = 0x1000000000000000
	CBitFieldMaskBit61 = 0x2000000000000000
	CBitFieldMaskBit62 = 0x4000000000000000
	CBitFieldMaskBit63 = 0x8000000000000000
)

type SockaddrStorage struct {
	Family uint16
	Data   [118]byte
	_      uint64
}

type HDGeometry struct {
	Heads     uint8
	Sectors   uint8
	Cylinders uint16
	Start     uint64
}

type Statfs_t struct {
	Type    int64
	Bsize   int64
	Frsize  int64
	Blocks  uint64
	Bfree   uint64
	Files   uint64
	Ffree   uint64
	Bavail  uint64
	Fsid    Fsid
	Namelen int64
	Flags   int64
	Spare   [5]int64
}

type TpacketHdr struct {
	Status  uint64
	Len     uint32
	Snaplen uint32
	Mac     uint16
	Net     uint16
	Sec     uint32
	Usec    uint32
	_       [4]byte
}

const (
	SizeofTpacketHdr = 0x20
)

type RTCPLLInfo struct {
	Ctrl    int32
	Value   int32
	Max     int32
	Min     int32
	Posmult int32
	Negmult int32
	Clock   int64
}

type BlkpgPartition struct {
	Start   int64
	Length  int64
	Pno     int32
	Devname [64]uint8
	Volname [64]uint8
	_       [4]byte
}

const (
	BLKPG = 0x20001269
)

type XDPUmemReg struct {
	Addr     uint64
	Len      uint64
	Size     uint32
	Headroom uint32
	Flags    uint32
	_        [4]byte
}

type CryptoUserAlg struct {
	Name        [64]int8
	Driver_name [64]int8
	Module_name [64]int8
	Type        uint32
	Mask        uint32
	Refcnt      uint32
	Flags       uint32
}

type CryptoStatAEAD struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatAKCipher struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Verify_cnt   uint64
	Sign_cnt     uint64
	Err_cnt      uint64
}

type CryptoStatCipher struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatCompress struct {
	Type            [64]int8
	Compress_cnt    uint64
	Compress_tlen   uint64
	Decompress_cnt  uint64
	Decompress_tlen uint64
	Err_cnt         uint64
}

type CryptoStatHash struct {
	Type      [64]int8
	Hash_cnt  uint64
	Hash_tlen uint64
	Err_cnt   uint64
}

type CryptoStatKPP struct {
	Type                      [64]int8
	Setsecret_cnt             uint64
	Generate_public_key_cnt   uint64
	Compute_shared_secret_cnt uint64
	Err_cnt                   uint64
}

type CryptoStatRNG struct {
	Type          [64]int8
	Generate_cnt  uint64
	Generate_tlen uint64
	Seed_cnt      uint64
	Err_cnt       uint64
}

type CryptoStatLarval struct {
	Type [64]int8
}

type CryptoReportLarval struct {
	Type [64]int8
}

type CryptoReportHash struct {
	Type       [64]int8
	Blocksize  uint32
	Digestsize uint32
}

type CryptoReportCipher struct {
	Type        [64]int8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
}

type CryptoReportBlkCipher struct {
	Type        [64]int8
	Geniv       [64]int8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
	Ivsize      uint32
}

type CryptoReportAEAD struct {
	Type        [64]int8
	Geniv       [64]int8
	Blocksize   uint32
	Maxauthsize uint32
	Ivsize      uint32
}

type CryptoReportComp struct {
	Type [64]int8
}

type CryptoReportRNG struct {
	Type     [64]int8
	Seedsize uint32
}

type CryptoReportAKCipher struct {
	Type [64]int8
}

type CryptoReportKPP struct {
	Type [64]int8
}

type CryptoReportAcomp struct {
	Type [64]int8
}

type LoopInfo struct {
	Number           int32
	Device           uint32
	Inode            uint64
	Rdevice          uint32
	Offset           int32
	Encrypt_type     int32
	Encrypt_key_size int32
	Flags            int32
	Name             [64]int8
	Encrypt_key      [32]uint8
	Init             [2]uint64
	Reserved         [4]int8
	_                [4]byte
}

type TIPCSubscr struct {
	Seq     TIPCServiceRange
	Timeout uint32
	Filter  uint32
	Handle  [8]int8
}

type TIPCSIOCLNReq struct {
	Peer     uint32
	Id       uint32
	Linkname [68]int8
}

type TIPCSIOCNodeIDReq struct {
	Peer uint32
	Id   [16]int8
}

type PPSKInfo struct {
	Assert_sequence uint32
	Clear_sequence  uint32
	Assert_tu       PPSKTime
	Clear_tu        PPSKTime
	Current_mode    int32
	_               [4]byte
}

const (
	PPS_GETPARAMS = 0x400870a1
	PPS_SETPARAMS = 0x800870a2
	PPS_GETCAP    = 0x400870a3
	PPS_FETCH     = 0xc00870a4
)

const (
	PIDFD_NONBLOCK = 0x80
)

type SysvIpcPerm struct {
	Key  int32
	Uid  uint32
	Gid  uint32
	Cuid uint32
	Cgid uint32
	Mode uint32
	_    [0]uint8
	Seq  uint16
	_    uint16
	_    uint64
	_    uint64
}
type SysvShmDesc struct {
	Perm   SysvIpcPerm
	Segsz  uint64
	Atime  int64
	Dtime  int64
	Ctime  int64
	Cpid   int32
	Lpid   int32
	Nattch uint64
	_      uint64
	_      uint64
}
   07070100000EBC000081A4000000000000000000000001645E367C0000316A000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go   // cgo -godefs -objdir=/tmp/mipsle/cgo -- -Wall -Werror -static -I/tmp/mipsle/include linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build mipsle && linux
// +build mipsle,linux

package unix

const (
	SizeofPtr  = 0x4
	SizeofLong = 0x4
)

type (
	_C_long int32
)

type Timespec struct {
	Sec  int32
	Nsec int32
}

type Timeval struct {
	Sec  int32
	Usec int32
}

type Timex struct {
	Modes     uint32
	Offset    int32
	Freq      int32
	Maxerror  int32
	Esterror  int32
	Status    int32
	Constant  int32
	Precision int32
	Tolerance int32
	Time      Timeval
	Tick      int32
	Ppsfreq   int32
	Jitter    int32
	Shift     int32
	Stabil    int32
	Jitcnt    int32
	Calcnt    int32
	Errcnt    int32
	Stbcnt    int32
	Tai       int32
	_         [44]byte
}

type Time_t int32

type Tms struct {
	Utime  int32
	Stime  int32
	Cutime int32
	Cstime int32
}

type Utimbuf struct {
	Actime  int32
	Modtime int32
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int32
	Ixrss    int32
	Idrss    int32
	Isrss    int32
	Minflt   int32
	Majflt   int32
	Nswap    int32
	Inblock  int32
	Oublock  int32
	Msgsnd   int32
	Msgrcv   int32
	Nsignals int32
	Nvcsw    int32
	Nivcsw   int32
}

type Stat_t struct {
	Dev     uint32
	Pad1    [3]int32
	Ino     uint64
	Mode    uint32
	Nlink   uint32
	Uid     uint32
	Gid     uint32
	Rdev    uint32
	Pad2    [3]int32
	Size    int64
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	Blksize int32
	Pad4    int32
	Blocks  int64
	Pad5    [14]int32
}

type Dirent struct {
	Ino    uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Name   [256]int8
	_      [5]byte
}

type Flock_t struct {
	Type   int16
	Whence int16
	_      [4]byte
	Start  int64
	Len    int64
	Pid    int32
	_      [4]byte
}

type DmNameList struct {
	Dev  uint64
	Next uint32
	Name [0]byte
	_    [4]byte
}

const (
	FADV_DONTNEED = 0x4
	FADV_NOREUSE  = 0x5
)

type RawSockaddrNFCLLCP struct {
	Sa_family        uint16
	Dev_idx          uint32
	Target_idx       uint32
	Nfc_protocol     uint32
	Dsap             uint8
	Ssap             uint8
	Service_name     [63]uint8
	Service_name_len uint32
}

type RawSockaddr struct {
	Family uint16
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [96]int8
}

type Iovec struct {
	Base *byte
	Len  uint32
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     uint32
	Control    *byte
	Controllen uint32
	Flags      int32
}

type Cmsghdr struct {
	Len   uint32
	Level int32
	Type  int32
}

type ifreq struct {
	Ifrn [16]byte
	Ifru [16]byte
}

const (
	SizeofSockaddrNFCLLCP = 0x58
	SizeofIovec           = 0x8
	SizeofMsghdr          = 0x1c
	SizeofCmsghdr         = 0xc
)

const (
	SizeofSockFprog = 0x8
)

type PtraceRegs struct {
	Regs     [32]uint64
	Lo       uint64
	Hi       uint64
	Epc      uint64
	Badvaddr uint64
	Status   uint64
	Cause    uint64
}

type FdSet struct {
	Bits [32]int32
}

type Sysinfo_t struct {
	Uptime    int32
	Loads     [3]uint32
	Totalram  uint32
	Freeram   uint32
	Sharedram uint32
	Bufferram uint32
	Totalswap uint32
	Freeswap  uint32
	Procs     uint16
	Pad       uint16
	Totalhigh uint32
	Freehigh  uint32
	Unit      uint32
	_         [8]int8
}

type Ustat_t struct {
	Tfree  int32
	Tinode uint32
	Fname  [6]int8
	Fpack  [6]int8
}

type EpollEvent struct {
	Events uint32
	PadFd  int32
	Fd     int32
	Pad    int32
}

const (
	OPEN_TREE_CLOEXEC = 0x80000
)

const (
	POLLRDHUP = 0x2000
)

type Sigset_t struct {
	Val [32]uint32
}

const _C__NSIG = 0x80

const (
	SIG_BLOCK   = 0x1
	SIG_UNBLOCK = 0x2
	SIG_SETMASK = 0x3
)

type Siginfo struct {
	Signo int32
	Code  int32
	Errno int32
	_     [116]byte
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Line   uint8
	Cc     [23]uint8
	Ispeed uint32
	Ospeed uint32
}

type Taskstats struct {
	Version                   uint16
	Ac_exitcode               uint32
	Ac_flag                   uint8
	Ac_nice                   uint8
	_                         [4]byte
	Cpu_count                 uint64
	Cpu_delay_total           uint64
	Blkio_count               uint64
	Blkio_delay_total         uint64
	Swapin_count              uint64
	Swapin_delay_total        uint64
	Cpu_run_real_total        uint64
	Cpu_run_virtual_total     uint64
	Ac_comm                   [32]int8
	Ac_sched                  uint8
	Ac_pad                    [3]uint8
	_                         [4]byte
	Ac_uid                    uint32
	Ac_gid                    uint32
	Ac_pid                    uint32
	Ac_ppid                   uint32
	Ac_btime                  uint32
	_                         [4]byte
	Ac_etime                  uint64
	Ac_utime                  uint64
	Ac_stime                  uint64
	Ac_minflt                 uint64
	Ac_majflt                 uint64
	Coremem                   uint64
	Virtmem                   uint64
	Hiwater_rss               uint64
	Hiwater_vm                uint64
	Read_char                 uint64
	Write_char                uint64
	Read_syscalls             uint64
	Write_syscalls            uint64
	Read_bytes                uint64
	Write_bytes               uint64
	Cancelled_write_bytes     uint64
	Nvcsw                     uint64
	Nivcsw                    uint64
	Ac_utimescaled            uint64
	Ac_stimescaled            uint64
	Cpu_scaled_run_real_total uint64
	Freepages_count           uint64
	Freepages_delay_total     uint64
	Thrashing_count           uint64
	Thrashing_delay_total     uint64
	Ac_btime64                uint64
	Compact_count             uint64
	Compact_delay_total       uint64
	Ac_tgid                   uint32
	_                         [4]byte
	Ac_tgetime                uint64
	Ac_exe_dev                uint64
	Ac_exe_inode              uint64
	Wpcopy_count              uint64
	Wpcopy_delay_total        uint64
}

type cpuMask uint32

const (
	_NCPUBITS = 0x20
)

const (
	CBitFieldMaskBit0  = 0x1
	CBitFieldMaskBit1  = 0x2
	CBitFieldMaskBit2  = 0x4
	CBitFieldMaskBit3  = 0x8
	CBitFieldMaskBit4  = 0x10
	CBitFieldMaskBit5  = 0x20
	CBitFieldMaskBit6  = 0x40
	CBitFieldMaskBit7  = 0x80
	CBitFieldMaskBit8  = 0x100
	CBitFieldMaskBit9  = 0x200
	CBitFieldMaskBit10 = 0x400
	CBitFieldMaskBit11 = 0x800
	CBitFieldMaskBit12 = 0x1000
	CBitFieldMaskBit13 = 0x2000
	CBitFieldMaskBit14 = 0x4000
	CBitFieldMaskBit15 = 0x8000
	CBitFieldMaskBit16 = 0x10000
	CBitFieldMaskBit17 = 0x20000
	CBitFieldMaskBit18 = 0x40000
	CBitFieldMaskBit19 = 0x80000
	CBitFieldMaskBit20 = 0x100000
	CBitFieldMaskBit21 = 0x200000
	CBitFieldMaskBit22 = 0x400000
	CBitFieldMaskBit23 = 0x800000
	CBitFieldMaskBit24 = 0x1000000
	CBitFieldMaskBit25 = 0x2000000
	CBitFieldMaskBit26 = 0x4000000
	CBitFieldMaskBit27 = 0x8000000
	CBitFieldMaskBit28 = 0x10000000
	CBitFieldMaskBit29 = 0x20000000
	CBitFieldMaskBit30 = 0x40000000
	CBitFieldMaskBit31 = 0x80000000
	CBitFieldMaskBit32 = 0x100000000
	CBitFieldMaskBit33 = 0x200000000
	CBitFieldMaskBit34 = 0x400000000
	CBitFieldMaskBit35 = 0x800000000
	CBitFieldMaskBit36 = 0x1000000000
	CBitFieldMaskBit37 = 0x2000000000
	CBitFieldMaskBit38 = 0x4000000000
	CBitFieldMaskBit39 = 0x8000000000
	CBitFieldMaskBit40 = 0x10000000000
	CBitFieldMaskBit41 = 0x20000000000
	CBitFieldMaskBit42 = 0x40000000000
	CBitFieldMaskBit43 = 0x80000000000
	CBitFieldMaskBit44 = 0x100000000000
	CBitFieldMaskBit45 = 0x200000000000
	CBitFieldMaskBit46 = 0x400000000000
	CBitFieldMaskBit47 = 0x800000000000
	CBitFieldMaskBit48 = 0x1000000000000
	CBitFieldMaskBit49 = 0x2000000000000
	CBitFieldMaskBit50 = 0x4000000000000
	CBitFieldMaskBit51 = 0x8000000000000
	CBitFieldMaskBit52 = 0x10000000000000
	CBitFieldMaskBit53 = 0x20000000000000
	CBitFieldMaskBit54 = 0x40000000000000
	CBitFieldMaskBit55 = 0x80000000000000
	CBitFieldMaskBit56 = 0x100000000000000
	CBitFieldMaskBit57 = 0x200000000000000
	CBitFieldMaskBit58 = 0x400000000000000
	CBitFieldMaskBit59 = 0x800000000000000
	CBitFieldMaskBit60 = 0x1000000000000000
	CBitFieldMaskBit61 = 0x2000000000000000
	CBitFieldMaskBit62 = 0x4000000000000000
	CBitFieldMaskBit63 = 0x8000000000000000
)

type SockaddrStorage struct {
	Family uint16
	Data   [122]byte
	_      uint32
}

type HDGeometry struct {
	Heads     uint8
	Sectors   uint8
	Cylinders uint16
	Start     uint32
}

type Statfs_t struct {
	Type    int32
	Bsize   int32
	Frsize  int32
	_       [4]byte
	Blocks  uint64
	Bfree   uint64
	Files   uint64
	Ffree   uint64
	Bavail  uint64
	Fsid    Fsid
	Namelen int32
	Flags   int32
	Spare   [5]int32
	_       [4]byte
}

type TpacketHdr struct {
	Status  uint32
	Len     uint32
	Snaplen uint32
	Mac     uint16
	Net     uint16
	Sec     uint32
	Usec    uint32
}

const (
	SizeofTpacketHdr = 0x18
)

type RTCPLLInfo struct {
	Ctrl    int32
	Value   int32
	Max     int32
	Min     int32
	Posmult int32
	Negmult int32
	Clock   int32
}

type BlkpgPartition struct {
	Start   int64
	Length  int64
	Pno     int32
	Devname [64]uint8
	Volname [64]uint8
	_       [4]byte
}

const (
	BLKPG = 0x20001269
)

type XDPUmemReg struct {
	Addr     uint64
	Len      uint64
	Size     uint32
	Headroom uint32
	Flags    uint32
	_        [4]byte
}

type CryptoUserAlg struct {
	Name        [64]int8
	Driver_name [64]int8
	Module_name [64]int8
	Type        uint32
	Mask        uint32
	Refcnt      uint32
	Flags       uint32
}

type CryptoStatAEAD struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatAKCipher struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Verify_cnt   uint64
	Sign_cnt     uint64
	Err_cnt      uint64
}

type CryptoStatCipher struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatCompress struct {
	Type            [64]int8
	Compress_cnt    uint64
	Compress_tlen   uint64
	Decompress_cnt  uint64
	Decompress_tlen uint64
	Err_cnt         uint64
}

type CryptoStatHash struct {
	Type      [64]int8
	Hash_cnt  uint64
	Hash_tlen uint64
	Err_cnt   uint64
}

type CryptoStatKPP struct {
	Type                      [64]int8
	Setsecret_cnt             uint64
	Generate_public_key_cnt   uint64
	Compute_shared_secret_cnt uint64
	Err_cnt                   uint64
}

type CryptoStatRNG struct {
	Type          [64]int8
	Generate_cnt  uint64
	Generate_tlen uint64
	Seed_cnt      uint64
	Err_cnt       uint64
}

type CryptoStatLarval struct {
	Type [64]int8
}

type CryptoReportLarval struct {
	Type [64]int8
}

type CryptoReportHash struct {
	Type       [64]int8
	Blocksize  uint32
	Digestsize uint32
}

type CryptoReportCipher struct {
	Type        [64]int8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
}

type CryptoReportBlkCipher struct {
	Type        [64]int8
	Geniv       [64]int8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
	Ivsize      uint32
}

type CryptoReportAEAD struct {
	Type        [64]int8
	Geniv       [64]int8
	Blocksize   uint32
	Maxauthsize uint32
	Ivsize      uint32
}

type CryptoReportComp struct {
	Type [64]int8
}

type CryptoReportRNG struct {
	Type     [64]int8
	Seedsize uint32
}

type CryptoReportAKCipher struct {
	Type [64]int8
}

type CryptoReportKPP struct {
	Type [64]int8
}

type CryptoReportAcomp struct {
	Type [64]int8
}

type LoopInfo struct {
	Number           int32
	Device           uint32
	Inode            uint32
	Rdevice          uint32
	Offset           int32
	Encrypt_type     int32
	Encrypt_key_size int32
	Flags            int32
	Name             [64]int8
	Encrypt_key      [32]uint8
	Init             [2]uint32
	Reserved         [4]int8
}

type TIPCSubscr struct {
	Seq     TIPCServiceRange
	Timeout uint32
	Filter  uint32
	Handle  [8]int8
}

type TIPCSIOCLNReq struct {
	Peer     uint32
	Id       uint32
	Linkname [68]int8
}

type TIPCSIOCNodeIDReq struct {
	Peer uint32
	Id   [16]int8
}

type PPSKInfo struct {
	Assert_sequence uint32
	Clear_sequence  uint32
	Assert_tu       PPSKTime
	Clear_tu        PPSKTime
	Current_mode    int32
	_               [4]byte
}

const (
	PPS_GETPARAMS = 0x400470a1
	PPS_SETPARAMS = 0x800470a2
	PPS_GETCAP    = 0x400470a3
	PPS_FETCH     = 0xc00470a4
)

const (
	PIDFD_NONBLOCK = 0x80
)

type SysvIpcPerm struct {
	Key  int32
	Uid  uint32
	Gid  uint32
	Cuid uint32
	Cgid uint32
	Mode uint32
	_    [0]uint8
	Seq  uint16
	_    uint16
	_    uint32
	_    uint32
}
type SysvShmDesc struct {
	Perm       SysvIpcPerm
	Segsz      uint32
	Atime      uint32
	Dtime      uint32
	Ctime      uint32
	Cpid       int32
	Lpid       int32
	Nattch     uint32
	Atime_high uint16
	Dtime_high uint16
	Ctime_high uint16
	_          uint16
}
  07070100000EBD000081A4000000000000000000000001645E367C0000321B000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go  // cgo -godefs -objdir=/tmp/ppc/cgo -- -Wall -Werror -static -I/tmp/ppc/include linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build ppc && linux
// +build ppc,linux

package unix

const (
	SizeofPtr  = 0x4
	SizeofLong = 0x4
)

type (
	_C_long int32
)

type Timespec struct {
	Sec  int32
	Nsec int32
}

type Timeval struct {
	Sec  int32
	Usec int32
}

type Timex struct {
	Modes     uint32
	Offset    int32
	Freq      int32
	Maxerror  int32
	Esterror  int32
	Status    int32
	Constant  int32
	Precision int32
	Tolerance int32
	Time      Timeval
	Tick      int32
	Ppsfreq   int32
	Jitter    int32
	Shift     int32
	Stabil    int32
	Jitcnt    int32
	Calcnt    int32
	Errcnt    int32
	Stbcnt    int32
	Tai       int32
	_         [44]byte
}

type Time_t int32

type Tms struct {
	Utime  int32
	Stime  int32
	Cutime int32
	Cstime int32
}

type Utimbuf struct {
	Actime  int32
	Modtime int32
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int32
	Ixrss    int32
	Idrss    int32
	Isrss    int32
	Minflt   int32
	Majflt   int32
	Nswap    int32
	Inblock  int32
	Oublock  int32
	Msgsnd   int32
	Msgrcv   int32
	Nsignals int32
	Nvcsw    int32
	Nivcsw   int32
}

type Stat_t struct {
	Dev     uint64
	Ino     uint64
	Mode    uint32
	Nlink   uint32
	Uid     uint32
	Gid     uint32
	Rdev    uint64
	_       uint16
	_       [4]byte
	Size    int64
	Blksize int32
	_       [4]byte
	Blocks  int64
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	_       uint32
	_       uint32
}

type Dirent struct {
	Ino    uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Name   [256]uint8
	_      [5]byte
}

type Flock_t struct {
	Type   int16
	Whence int16
	_      [4]byte
	Start  int64
	Len    int64
	Pid    int32
	_      [4]byte
}

type DmNameList struct {
	Dev  uint64
	Next uint32
	Name [0]byte
	_    [4]byte
}

const (
	FADV_DONTNEED = 0x4
	FADV_NOREUSE  = 0x5
)

type RawSockaddrNFCLLCP struct {
	Sa_family        uint16
	Dev_idx          uint32
	Target_idx       uint32
	Nfc_protocol     uint32
	Dsap             uint8
	Ssap             uint8
	Service_name     [63]uint8
	Service_name_len uint32
}

type RawSockaddr struct {
	Family uint16
	Data   [14]uint8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [96]uint8
}

type Iovec struct {
	Base *byte
	Len  uint32
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     uint32
	Control    *byte
	Controllen uint32
	Flags      int32
}

type Cmsghdr struct {
	Len   uint32
	Level int32
	Type  int32
}

type ifreq struct {
	Ifrn [16]byte
	Ifru [16]byte
}

const (
	SizeofSockaddrNFCLLCP = 0x58
	SizeofIovec           = 0x8
	SizeofMsghdr          = 0x1c
	SizeofCmsghdr         = 0xc
)

const (
	SizeofSockFprog = 0x8
)

type PtraceRegs struct {
	Gpr       [32]uint32
	Nip       uint32
	Msr       uint32
	Orig_gpr3 uint32
	Ctr       uint32
	Link      uint32
	Xer       uint32
	Ccr       uint32
	Mq        uint32
	Trap      uint32
	Dar       uint32
	Dsisr     uint32
	Result    uint32
}

type FdSet struct {
	Bits [32]int32
}

type Sysinfo_t struct {
	Uptime    int32
	Loads     [3]uint32
	Totalram  uint32
	Freeram   uint32
	Sharedram uint32
	Bufferram uint32
	Totalswap uint32
	Freeswap  uint32
	Procs     uint16
	Pad       uint16
	Totalhigh uint32
	Freehigh  uint32
	Unit      uint32
	_         [8]uint8
}

type Ustat_t struct {
	Tfree  int32
	Tinode uint32
	Fname  [6]uint8
	Fpack  [6]uint8
}

type EpollEvent struct {
	Events uint32
	_      int32
	Fd     int32
	Pad    int32
}

const (
	OPEN_TREE_CLOEXEC = 0x80000
)

const (
	POLLRDHUP = 0x2000
)

type Sigset_t struct {
	Val [32]uint32
}

const _C__NSIG = 0x41

const (
	SIG_BLOCK   = 0x0
	SIG_UNBLOCK = 0x1
	SIG_SETMASK = 0x2
)

type Siginfo struct {
	Signo int32
	Errno int32
	Code  int32
	_     [116]byte
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Cc     [19]uint8
	Line   uint8
	Ispeed uint32
	Ospeed uint32
}

type Taskstats struct {
	Version                   uint16
	Ac_exitcode               uint32
	Ac_flag                   uint8
	Ac_nice                   uint8
	_                         [4]byte
	Cpu_count                 uint64
	Cpu_delay_total           uint64
	Blkio_count               uint64
	Blkio_delay_total         uint64
	Swapin_count              uint64
	Swapin_delay_total        uint64
	Cpu_run_real_total        uint64
	Cpu_run_virtual_total     uint64
	Ac_comm                   [32]uint8
	Ac_sched                  uint8
	Ac_pad                    [3]uint8
	_                         [4]byte
	Ac_uid                    uint32
	Ac_gid                    uint32
	Ac_pid                    uint32
	Ac_ppid                   uint32
	Ac_btime                  uint32
	_                         [4]byte
	Ac_etime                  uint64
	Ac_utime                  uint64
	Ac_stime                  uint64
	Ac_minflt                 uint64
	Ac_majflt                 uint64
	Coremem                   uint64
	Virtmem                   uint64
	Hiwater_rss               uint64
	Hiwater_vm                uint64
	Read_char                 uint64
	Write_char                uint64
	Read_syscalls             uint64
	Write_syscalls            uint64
	Read_bytes                uint64
	Write_bytes               uint64
	Cancelled_write_bytes     uint64
	Nvcsw                     uint64
	Nivcsw                    uint64
	Ac_utimescaled            uint64
	Ac_stimescaled            uint64
	Cpu_scaled_run_real_total uint64
	Freepages_count           uint64
	Freepages_delay_total     uint64
	Thrashing_count           uint64
	Thrashing_delay_total     uint64
	Ac_btime64                uint64
	Compact_count             uint64
	Compact_delay_total       uint64
	Ac_tgid                   uint32
	_                         [4]byte
	Ac_tgetime                uint64
	Ac_exe_dev                uint64
	Ac_exe_inode              uint64
	Wpcopy_count              uint64
	Wpcopy_delay_total        uint64
}

type cpuMask uint32

const (
	_NCPUBITS = 0x20
)

const (
	CBitFieldMaskBit0  = 0x8000000000000000
	CBitFieldMaskBit1  = 0x4000000000000000
	CBitFieldMaskBit2  = 0x2000000000000000
	CBitFieldMaskBit3  = 0x1000000000000000
	CBitFieldMaskBit4  = 0x800000000000000
	CBitFieldMaskBit5  = 0x400000000000000
	CBitFieldMaskBit6  = 0x200000000000000
	CBitFieldMaskBit7  = 0x100000000000000
	CBitFieldMaskBit8  = 0x80000000000000
	CBitFieldMaskBit9  = 0x40000000000000
	CBitFieldMaskBit10 = 0x20000000000000
	CBitFieldMaskBit11 = 0x10000000000000
	CBitFieldMaskBit12 = 0x8000000000000
	CBitFieldMaskBit13 = 0x4000000000000
	CBitFieldMaskBit14 = 0x2000000000000
	CBitFieldMaskBit15 = 0x1000000000000
	CBitFieldMaskBit16 = 0x800000000000
	CBitFieldMaskBit17 = 0x400000000000
	CBitFieldMaskBit18 = 0x200000000000
	CBitFieldMaskBit19 = 0x100000000000
	CBitFieldMaskBit20 = 0x80000000000
	CBitFieldMaskBit21 = 0x40000000000
	CBitFieldMaskBit22 = 0x20000000000
	CBitFieldMaskBit23 = 0x10000000000
	CBitFieldMaskBit24 = 0x8000000000
	CBitFieldMaskBit25 = 0x4000000000
	CBitFieldMaskBit26 = 0x2000000000
	CBitFieldMaskBit27 = 0x1000000000
	CBitFieldMaskBit28 = 0x800000000
	CBitFieldMaskBit29 = 0x400000000
	CBitFieldMaskBit30 = 0x200000000
	CBitFieldMaskBit31 = 0x100000000
	CBitFieldMaskBit32 = 0x80000000
	CBitFieldMaskBit33 = 0x40000000
	CBitFieldMaskBit34 = 0x20000000
	CBitFieldMaskBit35 = 0x10000000
	CBitFieldMaskBit36 = 0x8000000
	CBitFieldMaskBit37 = 0x4000000
	CBitFieldMaskBit38 = 0x2000000
	CBitFieldMaskBit39 = 0x1000000
	CBitFieldMaskBit40 = 0x800000
	CBitFieldMaskBit41 = 0x400000
	CBitFieldMaskBit42 = 0x200000
	CBitFieldMaskBit43 = 0x100000
	CBitFieldMaskBit44 = 0x80000
	CBitFieldMaskBit45 = 0x40000
	CBitFieldMaskBit46 = 0x20000
	CBitFieldMaskBit47 = 0x10000
	CBitFieldMaskBit48 = 0x8000
	CBitFieldMaskBit49 = 0x4000
	CBitFieldMaskBit50 = 0x2000
	CBitFieldMaskBit51 = 0x1000
	CBitFieldMaskBit52 = 0x800
	CBitFieldMaskBit53 = 0x400
	CBitFieldMaskBit54 = 0x200
	CBitFieldMaskBit55 = 0x100
	CBitFieldMaskBit56 = 0x80
	CBitFieldMaskBit57 = 0x40
	CBitFieldMaskBit58 = 0x20
	CBitFieldMaskBit59 = 0x10
	CBitFieldMaskBit60 = 0x8
	CBitFieldMaskBit61 = 0x4
	CBitFieldMaskBit62 = 0x2
	CBitFieldMaskBit63 = 0x1
)

type SockaddrStorage struct {
	Family uint16
	Data   [122]byte
	_      uint32
}

type HDGeometry struct {
	Heads     uint8
	Sectors   uint8
	Cylinders uint16
	Start     uint32
}

type Statfs_t struct {
	Type    int32
	Bsize   int32
	Blocks  uint64
	Bfree   uint64
	Bavail  uint64
	Files   uint64
	Ffree   uint64
	Fsid    Fsid
	Namelen int32
	Frsize  int32
	Flags   int32
	Spare   [4]int32
	_       [4]byte
}

type TpacketHdr struct {
	Status  uint32
	Len     uint32
	Snaplen uint32
	Mac     uint16
	Net     uint16
	Sec     uint32
	Usec    uint32
}

const (
	SizeofTpacketHdr = 0x18
)

type RTCPLLInfo struct {
	Ctrl    int32
	Value   int32
	Max     int32
	Min     int32
	Posmult int32
	Negmult int32
	Clock   int32
}

type BlkpgPartition struct {
	Start   int64
	Length  int64
	Pno     int32
	Devname [64]uint8
	Volname [64]uint8
	_       [4]byte
}

const (
	BLKPG = 0x20001269
)

type XDPUmemReg struct {
	Addr     uint64
	Len      uint64
	Size     uint32
	Headroom uint32
	Flags    uint32
	_        [4]byte
}

type CryptoUserAlg struct {
	Name        [64]uint8
	Driver_name [64]uint8
	Module_name [64]uint8
	Type        uint32
	Mask        uint32
	Refcnt      uint32
	Flags       uint32
}

type CryptoStatAEAD struct {
	Type         [64]uint8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatAKCipher struct {
	Type         [64]uint8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Verify_cnt   uint64
	Sign_cnt     uint64
	Err_cnt      uint64
}

type CryptoStatCipher struct {
	Type         [64]uint8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatCompress struct {
	Type            [64]uint8
	Compress_cnt    uint64
	Compress_tlen   uint64
	Decompress_cnt  uint64
	Decompress_tlen uint64
	Err_cnt         uint64
}

type CryptoStatHash struct {
	Type      [64]uint8
	Hash_cnt  uint64
	Hash_tlen uint64
	Err_cnt   uint64
}

type CryptoStatKPP struct {
	Type                      [64]uint8
	Setsecret_cnt             uint64
	Generate_public_key_cnt   uint64
	Compute_shared_secret_cnt uint64
	Err_cnt                   uint64
}

type CryptoStatRNG struct {
	Type          [64]uint8
	Generate_cnt  uint64
	Generate_tlen uint64
	Seed_cnt      uint64
	Err_cnt       uint64
}

type CryptoStatLarval struct {
	Type [64]uint8
}

type CryptoReportLarval struct {
	Type [64]uint8
}

type CryptoReportHash struct {
	Type       [64]uint8
	Blocksize  uint32
	Digestsize uint32
}

type CryptoReportCipher struct {
	Type        [64]uint8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
}

type CryptoReportBlkCipher struct {
	Type        [64]uint8
	Geniv       [64]uint8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
	Ivsize      uint32
}

type CryptoReportAEAD struct {
	Type        [64]uint8
	Geniv       [64]uint8
	Blocksize   uint32
	Maxauthsize uint32
	Ivsize      uint32
}

type CryptoReportComp struct {
	Type [64]uint8
}

type CryptoReportRNG struct {
	Type     [64]uint8
	Seedsize uint32
}

type CryptoReportAKCipher struct {
	Type [64]uint8
}

type CryptoReportKPP struct {
	Type [64]uint8
}

type CryptoReportAcomp struct {
	Type [64]uint8
}

type LoopInfo struct {
	Number           int32
	Device           uint32
	Inode            uint32
	Rdevice          uint32
	Offset           int32
	Encrypt_type     int32
	Encrypt_key_size int32
	Flags            int32
	Name             [64]uint8
	Encrypt_key      [32]uint8
	Init             [2]uint32
	Reserved         [4]uint8
}

type TIPCSubscr struct {
	Seq     TIPCServiceRange
	Timeout uint32
	Filter  uint32
	Handle  [8]uint8
}

type TIPCSIOCLNReq struct {
	Peer     uint32
	Id       uint32
	Linkname [68]uint8
}

type TIPCSIOCNodeIDReq struct {
	Peer uint32
	Id   [16]uint8
}

type PPSKInfo struct {
	Assert_sequence uint32
	Clear_sequence  uint32
	Assert_tu       PPSKTime
	Clear_tu        PPSKTime
	Current_mode    int32
	_               [4]byte
}

const (
	PPS_GETPARAMS = 0x400470a1
	PPS_SETPARAMS = 0x800470a2
	PPS_GETCAP    = 0x400470a3
	PPS_FETCH     = 0xc00470a4
)

const (
	PIDFD_NONBLOCK = 0x800
)

type SysvIpcPerm struct {
	Key  int32
	Uid  uint32
	Gid  uint32
	Cuid uint32
	Cgid uint32
	Mode uint32
	Seq  uint32
	_    uint32
	_    uint64
	_    uint64
}
type SysvShmDesc struct {
	Perm       SysvIpcPerm
	Atime_high uint32
	Atime      uint32
	Dtime_high uint32
	Dtime      uint32
	Ctime_high uint32
	Ctime      uint32
	_          uint32
	Segsz      uint32
	Cpid       int32
	Lpid       int32
	Nattch     uint32
	_          uint32
	_          uint32
	_          [4]byte
}
 07070100000EBE000081A4000000000000000000000001645E367C0000316D000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go    // cgo -godefs -objdir=/tmp/ppc64/cgo -- -Wall -Werror -static -I/tmp/ppc64/include linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build ppc64 && linux
// +build ppc64,linux

package unix

const (
	SizeofPtr  = 0x8
	SizeofLong = 0x8
)

type (
	_C_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int64
}

type Timeval struct {
	Sec  int64
	Usec int64
}

type Timex struct {
	Modes     uint32
	Offset    int64
	Freq      int64
	Maxerror  int64
	Esterror  int64
	Status    int32
	Constant  int64
	Precision int64
	Tolerance int64
	Time      Timeval
	Tick      int64
	Ppsfreq   int64
	Jitter    int64
	Shift     int32
	Stabil    int64
	Jitcnt    int64
	Calcnt    int64
	Errcnt    int64
	Stbcnt    int64
	Tai       int32
	_         [44]byte
}

type Time_t int64

type Tms struct {
	Utime  int64
	Stime  int64
	Cutime int64
	Cstime int64
}

type Utimbuf struct {
	Actime  int64
	Modtime int64
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int64
	Ixrss    int64
	Idrss    int64
	Isrss    int64
	Minflt   int64
	Majflt   int64
	Nswap    int64
	Inblock  int64
	Oublock  int64
	Msgsnd   int64
	Msgrcv   int64
	Nsignals int64
	Nvcsw    int64
	Nivcsw   int64
}

type Stat_t struct {
	Dev     uint64
	Ino     uint64
	Nlink   uint64
	Mode    uint32
	Uid     uint32
	Gid     uint32
	_       int32
	Rdev    uint64
	Size    int64
	Blksize int64
	Blocks  int64
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	_       uint64
	_       uint64
	_       uint64
}

type Dirent struct {
	Ino    uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Name   [256]uint8
	_      [5]byte
}

type Flock_t struct {
	Type   int16
	Whence int16
	Start  int64
	Len    int64
	Pid    int32
	_      [4]byte
}

type DmNameList struct {
	Dev  uint64
	Next uint32
	Name [0]byte
	_    [4]byte
}

const (
	FADV_DONTNEED = 0x4
	FADV_NOREUSE  = 0x5
)

type RawSockaddrNFCLLCP struct {
	Sa_family        uint16
	Dev_idx          uint32
	Target_idx       uint32
	Nfc_protocol     uint32
	Dsap             uint8
	Ssap             uint8
	Service_name     [63]uint8
	Service_name_len uint64
}

type RawSockaddr struct {
	Family uint16
	Data   [14]uint8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [96]uint8
}

type Iovec struct {
	Base *byte
	Len  uint64
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     uint64
	Control    *byte
	Controllen uint64
	Flags      int32
	_          [4]byte
}

type Cmsghdr struct {
	Len   uint64
	Level int32
	Type  int32
}

type ifreq struct {
	Ifrn [16]byte
	Ifru [24]byte
}

const (
	SizeofSockaddrNFCLLCP = 0x60
	SizeofIovec           = 0x10
	SizeofMsghdr          = 0x38
	SizeofCmsghdr         = 0x10
)

const (
	SizeofSockFprog = 0x10
)

type PtraceRegs struct {
	Gpr       [32]uint64
	Nip       uint64
	Msr       uint64
	Orig_gpr3 uint64
	Ctr       uint64
	Link      uint64
	Xer       uint64
	Ccr       uint64
	Softe     uint64
	Trap      uint64
	Dar       uint64
	Dsisr     uint64
	Result    uint64
}

type FdSet struct {
	Bits [16]int64
}

type Sysinfo_t struct {
	Uptime    int64
	Loads     [3]uint64
	Totalram  uint64
	Freeram   uint64
	Sharedram uint64
	Bufferram uint64
	Totalswap uint64
	Freeswap  uint64
	Procs     uint16
	Pad       uint16
	Totalhigh uint64
	Freehigh  uint64
	Unit      uint32
	_         [0]uint8
	_         [4]byte
}

type Ustat_t struct {
	Tfree  int32
	Tinode uint64
	Fname  [6]uint8
	Fpack  [6]uint8
	_      [4]byte
}

type EpollEvent struct {
	Events uint32
	_      int32
	Fd     int32
	Pad    int32
}

const (
	OPEN_TREE_CLOEXEC = 0x80000
)

const (
	POLLRDHUP = 0x2000
)

type Sigset_t struct {
	Val [16]uint64
}

const _C__NSIG = 0x41

const (
	SIG_BLOCK   = 0x0
	SIG_UNBLOCK = 0x1
	SIG_SETMASK = 0x2
)

type Siginfo struct {
	Signo int32
	Errno int32
	Code  int32
	_     int32
	_     [112]byte
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Cc     [19]uint8
	Line   uint8
	Ispeed uint32
	Ospeed uint32
}

type Taskstats struct {
	Version                   uint16
	Ac_exitcode               uint32
	Ac_flag                   uint8
	Ac_nice                   uint8
	Cpu_count                 uint64
	Cpu_delay_total           uint64
	Blkio_count               uint64
	Blkio_delay_total         uint64
	Swapin_count              uint64
	Swapin_delay_total        uint64
	Cpu_run_real_total        uint64
	Cpu_run_virtual_total     uint64
	Ac_comm                   [32]uint8
	Ac_sched                  uint8
	Ac_pad                    [3]uint8
	_                         [4]byte
	Ac_uid                    uint32
	Ac_gid                    uint32
	Ac_pid                    uint32
	Ac_ppid                   uint32
	Ac_btime                  uint32
	Ac_etime                  uint64
	Ac_utime                  uint64
	Ac_stime                  uint64
	Ac_minflt                 uint64
	Ac_majflt                 uint64
	Coremem                   uint64
	Virtmem                   uint64
	Hiwater_rss               uint64
	Hiwater_vm                uint64
	Read_char                 uint64
	Write_char                uint64
	Read_syscalls             uint64
	Write_syscalls            uint64
	Read_bytes                uint64
	Write_bytes               uint64
	Cancelled_write_bytes     uint64
	Nvcsw                     uint64
	Nivcsw                    uint64
	Ac_utimescaled            uint64
	Ac_stimescaled            uint64
	Cpu_scaled_run_real_total uint64
	Freepages_count           uint64
	Freepages_delay_total     uint64
	Thrashing_count           uint64
	Thrashing_delay_total     uint64
	Ac_btime64                uint64
	Compact_count             uint64
	Compact_delay_total       uint64
	Ac_tgid                   uint32
	Ac_tgetime                uint64
	Ac_exe_dev                uint64
	Ac_exe_inode              uint64
	Wpcopy_count              uint64
	Wpcopy_delay_total        uint64
}

type cpuMask uint64

const (
	_NCPUBITS = 0x40
)

const (
	CBitFieldMaskBit0  = 0x8000000000000000
	CBitFieldMaskBit1  = 0x4000000000000000
	CBitFieldMaskBit2  = 0x2000000000000000
	CBitFieldMaskBit3  = 0x1000000000000000
	CBitFieldMaskBit4  = 0x800000000000000
	CBitFieldMaskBit5  = 0x400000000000000
	CBitFieldMaskBit6  = 0x200000000000000
	CBitFieldMaskBit7  = 0x100000000000000
	CBitFieldMaskBit8  = 0x80000000000000
	CBitFieldMaskBit9  = 0x40000000000000
	CBitFieldMaskBit10 = 0x20000000000000
	CBitFieldMaskBit11 = 0x10000000000000
	CBitFieldMaskBit12 = 0x8000000000000
	CBitFieldMaskBit13 = 0x4000000000000
	CBitFieldMaskBit14 = 0x2000000000000
	CBitFieldMaskBit15 = 0x1000000000000
	CBitFieldMaskBit16 = 0x800000000000
	CBitFieldMaskBit17 = 0x400000000000
	CBitFieldMaskBit18 = 0x200000000000
	CBitFieldMaskBit19 = 0x100000000000
	CBitFieldMaskBit20 = 0x80000000000
	CBitFieldMaskBit21 = 0x40000000000
	CBitFieldMaskBit22 = 0x20000000000
	CBitFieldMaskBit23 = 0x10000000000
	CBitFieldMaskBit24 = 0x8000000000
	CBitFieldMaskBit25 = 0x4000000000
	CBitFieldMaskBit26 = 0x2000000000
	CBitFieldMaskBit27 = 0x1000000000
	CBitFieldMaskBit28 = 0x800000000
	CBitFieldMaskBit29 = 0x400000000
	CBitFieldMaskBit30 = 0x200000000
	CBitFieldMaskBit31 = 0x100000000
	CBitFieldMaskBit32 = 0x80000000
	CBitFieldMaskBit33 = 0x40000000
	CBitFieldMaskBit34 = 0x20000000
	CBitFieldMaskBit35 = 0x10000000
	CBitFieldMaskBit36 = 0x8000000
	CBitFieldMaskBit37 = 0x4000000
	CBitFieldMaskBit38 = 0x2000000
	CBitFieldMaskBit39 = 0x1000000
	CBitFieldMaskBit40 = 0x800000
	CBitFieldMaskBit41 = 0x400000
	CBitFieldMaskBit42 = 0x200000
	CBitFieldMaskBit43 = 0x100000
	CBitFieldMaskBit44 = 0x80000
	CBitFieldMaskBit45 = 0x40000
	CBitFieldMaskBit46 = 0x20000
	CBitFieldMaskBit47 = 0x10000
	CBitFieldMaskBit48 = 0x8000
	CBitFieldMaskBit49 = 0x4000
	CBitFieldMaskBit50 = 0x2000
	CBitFieldMaskBit51 = 0x1000
	CBitFieldMaskBit52 = 0x800
	CBitFieldMaskBit53 = 0x400
	CBitFieldMaskBit54 = 0x200
	CBitFieldMaskBit55 = 0x100
	CBitFieldMaskBit56 = 0x80
	CBitFieldMaskBit57 = 0x40
	CBitFieldMaskBit58 = 0x20
	CBitFieldMaskBit59 = 0x10
	CBitFieldMaskBit60 = 0x8
	CBitFieldMaskBit61 = 0x4
	CBitFieldMaskBit62 = 0x2
	CBitFieldMaskBit63 = 0x1
)

type SockaddrStorage struct {
	Family uint16
	Data   [118]byte
	_      uint64
}

type HDGeometry struct {
	Heads     uint8
	Sectors   uint8
	Cylinders uint16
	Start     uint64
}

type Statfs_t struct {
	Type    int64
	Bsize   int64
	Blocks  uint64
	Bfree   uint64
	Bavail  uint64
	Files   uint64
	Ffree   uint64
	Fsid    Fsid
	Namelen int64
	Frsize  int64
	Flags   int64
	Spare   [4]int64
}

type TpacketHdr struct {
	Status  uint64
	Len     uint32
	Snaplen uint32
	Mac     uint16
	Net     uint16
	Sec     uint32
	Usec    uint32
	_       [4]byte
}

const (
	SizeofTpacketHdr = 0x20
)

type RTCPLLInfo struct {
	Ctrl    int32
	Value   int32
	Max     int32
	Min     int32
	Posmult int32
	Negmult int32
	Clock   int64
}

type BlkpgPartition struct {
	Start   int64
	Length  int64
	Pno     int32
	Devname [64]uint8
	Volname [64]uint8
	_       [4]byte
}

const (
	BLKPG = 0x20001269
)

type XDPUmemReg struct {
	Addr     uint64
	Len      uint64
	Size     uint32
	Headroom uint32
	Flags    uint32
	_        [4]byte
}

type CryptoUserAlg struct {
	Name        [64]uint8
	Driver_name [64]uint8
	Module_name [64]uint8
	Type        uint32
	Mask        uint32
	Refcnt      uint32
	Flags       uint32
}

type CryptoStatAEAD struct {
	Type         [64]uint8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatAKCipher struct {
	Type         [64]uint8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Verify_cnt   uint64
	Sign_cnt     uint64
	Err_cnt      uint64
}

type CryptoStatCipher struct {
	Type         [64]uint8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatCompress struct {
	Type            [64]uint8
	Compress_cnt    uint64
	Compress_tlen   uint64
	Decompress_cnt  uint64
	Decompress_tlen uint64
	Err_cnt         uint64
}

type CryptoStatHash struct {
	Type      [64]uint8
	Hash_cnt  uint64
	Hash_tlen uint64
	Err_cnt   uint64
}

type CryptoStatKPP struct {
	Type                      [64]uint8
	Setsecret_cnt             uint64
	Generate_public_key_cnt   uint64
	Compute_shared_secret_cnt uint64
	Err_cnt                   uint64
}

type CryptoStatRNG struct {
	Type          [64]uint8
	Generate_cnt  uint64
	Generate_tlen uint64
	Seed_cnt      uint64
	Err_cnt       uint64
}

type CryptoStatLarval struct {
	Type [64]uint8
}

type CryptoReportLarval struct {
	Type [64]uint8
}

type CryptoReportHash struct {
	Type       [64]uint8
	Blocksize  uint32
	Digestsize uint32
}

type CryptoReportCipher struct {
	Type        [64]uint8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
}

type CryptoReportBlkCipher struct {
	Type        [64]uint8
	Geniv       [64]uint8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
	Ivsize      uint32
}

type CryptoReportAEAD struct {
	Type        [64]uint8
	Geniv       [64]uint8
	Blocksize   uint32
	Maxauthsize uint32
	Ivsize      uint32
}

type CryptoReportComp struct {
	Type [64]uint8
}

type CryptoReportRNG struct {
	Type     [64]uint8
	Seedsize uint32
}

type CryptoReportAKCipher struct {
	Type [64]uint8
}

type CryptoReportKPP struct {
	Type [64]uint8
}

type CryptoReportAcomp struct {
	Type [64]uint8
}

type LoopInfo struct {
	Number           int32
	Device           uint64
	Inode            uint64
	Rdevice          uint64
	Offset           int32
	Encrypt_type     int32
	Encrypt_key_size int32
	Flags            int32
	Name             [64]uint8
	Encrypt_key      [32]uint8
	Init             [2]uint64
	Reserved         [4]uint8
	_                [4]byte
}

type TIPCSubscr struct {
	Seq     TIPCServiceRange
	Timeout uint32
	Filter  uint32
	Handle  [8]uint8
}

type TIPCSIOCLNReq struct {
	Peer     uint32
	Id       uint32
	Linkname [68]uint8
}

type TIPCSIOCNodeIDReq struct {
	Peer uint32
	Id   [16]uint8
}

type PPSKInfo struct {
	Assert_sequence uint32
	Clear_sequence  uint32
	Assert_tu       PPSKTime
	Clear_tu        PPSKTime
	Current_mode    int32
	_               [4]byte
}

const (
	PPS_GETPARAMS = 0x400870a1
	PPS_SETPARAMS = 0x800870a2
	PPS_GETCAP    = 0x400870a3
	PPS_FETCH     = 0xc00870a4
)

const (
	PIDFD_NONBLOCK = 0x800
)

type SysvIpcPerm struct {
	Key  int32
	Uid  uint32
	Gid  uint32
	Cuid uint32
	Cgid uint32
	Mode uint32
	Seq  uint32
	_    uint32
	_    uint64
	_    uint64
}
type SysvShmDesc struct {
	Perm   SysvIpcPerm
	Atime  int64
	Dtime  int64
	Ctime  int64
	Segsz  uint64
	Cpid   int32
	Lpid   int32
	Nattch uint64
	_      uint64
	_      uint64
}
   07070100000EBF000081A4000000000000000000000001645E367C00003175000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go  // cgo -godefs -objdir=/tmp/ppc64le/cgo -- -Wall -Werror -static -I/tmp/ppc64le/include linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build ppc64le && linux
// +build ppc64le,linux

package unix

const (
	SizeofPtr  = 0x8
	SizeofLong = 0x8
)

type (
	_C_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int64
}

type Timeval struct {
	Sec  int64
	Usec int64
}

type Timex struct {
	Modes     uint32
	Offset    int64
	Freq      int64
	Maxerror  int64
	Esterror  int64
	Status    int32
	Constant  int64
	Precision int64
	Tolerance int64
	Time      Timeval
	Tick      int64
	Ppsfreq   int64
	Jitter    int64
	Shift     int32
	Stabil    int64
	Jitcnt    int64
	Calcnt    int64
	Errcnt    int64
	Stbcnt    int64
	Tai       int32
	_         [44]byte
}

type Time_t int64

type Tms struct {
	Utime  int64
	Stime  int64
	Cutime int64
	Cstime int64
}

type Utimbuf struct {
	Actime  int64
	Modtime int64
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int64
	Ixrss    int64
	Idrss    int64
	Isrss    int64
	Minflt   int64
	Majflt   int64
	Nswap    int64
	Inblock  int64
	Oublock  int64
	Msgsnd   int64
	Msgrcv   int64
	Nsignals int64
	Nvcsw    int64
	Nivcsw   int64
}

type Stat_t struct {
	Dev     uint64
	Ino     uint64
	Nlink   uint64
	Mode    uint32
	Uid     uint32
	Gid     uint32
	_       int32
	Rdev    uint64
	Size    int64
	Blksize int64
	Blocks  int64
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	_       uint64
	_       uint64
	_       uint64
}

type Dirent struct {
	Ino    uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Name   [256]uint8
	_      [5]byte
}

type Flock_t struct {
	Type   int16
	Whence int16
	Start  int64
	Len    int64
	Pid    int32
	_      [4]byte
}

type DmNameList struct {
	Dev  uint64
	Next uint32
	Name [0]byte
	_    [4]byte
}

const (
	FADV_DONTNEED = 0x4
	FADV_NOREUSE  = 0x5
)

type RawSockaddrNFCLLCP struct {
	Sa_family        uint16
	Dev_idx          uint32
	Target_idx       uint32
	Nfc_protocol     uint32
	Dsap             uint8
	Ssap             uint8
	Service_name     [63]uint8
	Service_name_len uint64
}

type RawSockaddr struct {
	Family uint16
	Data   [14]uint8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [96]uint8
}

type Iovec struct {
	Base *byte
	Len  uint64
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     uint64
	Control    *byte
	Controllen uint64
	Flags      int32
	_          [4]byte
}

type Cmsghdr struct {
	Len   uint64
	Level int32
	Type  int32
}

type ifreq struct {
	Ifrn [16]byte
	Ifru [24]byte
}

const (
	SizeofSockaddrNFCLLCP = 0x60
	SizeofIovec           = 0x10
	SizeofMsghdr          = 0x38
	SizeofCmsghdr         = 0x10
)

const (
	SizeofSockFprog = 0x10
)

type PtraceRegs struct {
	Gpr       [32]uint64
	Nip       uint64
	Msr       uint64
	Orig_gpr3 uint64
	Ctr       uint64
	Link      uint64
	Xer       uint64
	Ccr       uint64
	Softe     uint64
	Trap      uint64
	Dar       uint64
	Dsisr     uint64
	Result    uint64
}

type FdSet struct {
	Bits [16]int64
}

type Sysinfo_t struct {
	Uptime    int64
	Loads     [3]uint64
	Totalram  uint64
	Freeram   uint64
	Sharedram uint64
	Bufferram uint64
	Totalswap uint64
	Freeswap  uint64
	Procs     uint16
	Pad       uint16
	Totalhigh uint64
	Freehigh  uint64
	Unit      uint32
	_         [0]uint8
	_         [4]byte
}

type Ustat_t struct {
	Tfree  int32
	Tinode uint64
	Fname  [6]uint8
	Fpack  [6]uint8
	_      [4]byte
}

type EpollEvent struct {
	Events uint32
	_      int32
	Fd     int32
	Pad    int32
}

const (
	OPEN_TREE_CLOEXEC = 0x80000
)

const (
	POLLRDHUP = 0x2000
)

type Sigset_t struct {
	Val [16]uint64
}

const _C__NSIG = 0x41

const (
	SIG_BLOCK   = 0x0
	SIG_UNBLOCK = 0x1
	SIG_SETMASK = 0x2
)

type Siginfo struct {
	Signo int32
	Errno int32
	Code  int32
	_     int32
	_     [112]byte
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Cc     [19]uint8
	Line   uint8
	Ispeed uint32
	Ospeed uint32
}

type Taskstats struct {
	Version                   uint16
	Ac_exitcode               uint32
	Ac_flag                   uint8
	Ac_nice                   uint8
	Cpu_count                 uint64
	Cpu_delay_total           uint64
	Blkio_count               uint64
	Blkio_delay_total         uint64
	Swapin_count              uint64
	Swapin_delay_total        uint64
	Cpu_run_real_total        uint64
	Cpu_run_virtual_total     uint64
	Ac_comm                   [32]uint8
	Ac_sched                  uint8
	Ac_pad                    [3]uint8
	_                         [4]byte
	Ac_uid                    uint32
	Ac_gid                    uint32
	Ac_pid                    uint32
	Ac_ppid                   uint32
	Ac_btime                  uint32
	Ac_etime                  uint64
	Ac_utime                  uint64
	Ac_stime                  uint64
	Ac_minflt                 uint64
	Ac_majflt                 uint64
	Coremem                   uint64
	Virtmem                   uint64
	Hiwater_rss               uint64
	Hiwater_vm                uint64
	Read_char                 uint64
	Write_char                uint64
	Read_syscalls             uint64
	Write_syscalls            uint64
	Read_bytes                uint64
	Write_bytes               uint64
	Cancelled_write_bytes     uint64
	Nvcsw                     uint64
	Nivcsw                    uint64
	Ac_utimescaled            uint64
	Ac_stimescaled            uint64
	Cpu_scaled_run_real_total uint64
	Freepages_count           uint64
	Freepages_delay_total     uint64
	Thrashing_count           uint64
	Thrashing_delay_total     uint64
	Ac_btime64                uint64
	Compact_count             uint64
	Compact_delay_total       uint64
	Ac_tgid                   uint32
	Ac_tgetime                uint64
	Ac_exe_dev                uint64
	Ac_exe_inode              uint64
	Wpcopy_count              uint64
	Wpcopy_delay_total        uint64
}

type cpuMask uint64

const (
	_NCPUBITS = 0x40
)

const (
	CBitFieldMaskBit0  = 0x1
	CBitFieldMaskBit1  = 0x2
	CBitFieldMaskBit2  = 0x4
	CBitFieldMaskBit3  = 0x8
	CBitFieldMaskBit4  = 0x10
	CBitFieldMaskBit5  = 0x20
	CBitFieldMaskBit6  = 0x40
	CBitFieldMaskBit7  = 0x80
	CBitFieldMaskBit8  = 0x100
	CBitFieldMaskBit9  = 0x200
	CBitFieldMaskBit10 = 0x400
	CBitFieldMaskBit11 = 0x800
	CBitFieldMaskBit12 = 0x1000
	CBitFieldMaskBit13 = 0x2000
	CBitFieldMaskBit14 = 0x4000
	CBitFieldMaskBit15 = 0x8000
	CBitFieldMaskBit16 = 0x10000
	CBitFieldMaskBit17 = 0x20000
	CBitFieldMaskBit18 = 0x40000
	CBitFieldMaskBit19 = 0x80000
	CBitFieldMaskBit20 = 0x100000
	CBitFieldMaskBit21 = 0x200000
	CBitFieldMaskBit22 = 0x400000
	CBitFieldMaskBit23 = 0x800000
	CBitFieldMaskBit24 = 0x1000000
	CBitFieldMaskBit25 = 0x2000000
	CBitFieldMaskBit26 = 0x4000000
	CBitFieldMaskBit27 = 0x8000000
	CBitFieldMaskBit28 = 0x10000000
	CBitFieldMaskBit29 = 0x20000000
	CBitFieldMaskBit30 = 0x40000000
	CBitFieldMaskBit31 = 0x80000000
	CBitFieldMaskBit32 = 0x100000000
	CBitFieldMaskBit33 = 0x200000000
	CBitFieldMaskBit34 = 0x400000000
	CBitFieldMaskBit35 = 0x800000000
	CBitFieldMaskBit36 = 0x1000000000
	CBitFieldMaskBit37 = 0x2000000000
	CBitFieldMaskBit38 = 0x4000000000
	CBitFieldMaskBit39 = 0x8000000000
	CBitFieldMaskBit40 = 0x10000000000
	CBitFieldMaskBit41 = 0x20000000000
	CBitFieldMaskBit42 = 0x40000000000
	CBitFieldMaskBit43 = 0x80000000000
	CBitFieldMaskBit44 = 0x100000000000
	CBitFieldMaskBit45 = 0x200000000000
	CBitFieldMaskBit46 = 0x400000000000
	CBitFieldMaskBit47 = 0x800000000000
	CBitFieldMaskBit48 = 0x1000000000000
	CBitFieldMaskBit49 = 0x2000000000000
	CBitFieldMaskBit50 = 0x4000000000000
	CBitFieldMaskBit51 = 0x8000000000000
	CBitFieldMaskBit52 = 0x10000000000000
	CBitFieldMaskBit53 = 0x20000000000000
	CBitFieldMaskBit54 = 0x40000000000000
	CBitFieldMaskBit55 = 0x80000000000000
	CBitFieldMaskBit56 = 0x100000000000000
	CBitFieldMaskBit57 = 0x200000000000000
	CBitFieldMaskBit58 = 0x400000000000000
	CBitFieldMaskBit59 = 0x800000000000000
	CBitFieldMaskBit60 = 0x1000000000000000
	CBitFieldMaskBit61 = 0x2000000000000000
	CBitFieldMaskBit62 = 0x4000000000000000
	CBitFieldMaskBit63 = 0x8000000000000000
)

type SockaddrStorage struct {
	Family uint16
	Data   [118]byte
	_      uint64
}

type HDGeometry struct {
	Heads     uint8
	Sectors   uint8
	Cylinders uint16
	Start     uint64
}

type Statfs_t struct {
	Type    int64
	Bsize   int64
	Blocks  uint64
	Bfree   uint64
	Bavail  uint64
	Files   uint64
	Ffree   uint64
	Fsid    Fsid
	Namelen int64
	Frsize  int64
	Flags   int64
	Spare   [4]int64
}

type TpacketHdr struct {
	Status  uint64
	Len     uint32
	Snaplen uint32
	Mac     uint16
	Net     uint16
	Sec     uint32
	Usec    uint32
	_       [4]byte
}

const (
	SizeofTpacketHdr = 0x20
)

type RTCPLLInfo struct {
	Ctrl    int32
	Value   int32
	Max     int32
	Min     int32
	Posmult int32
	Negmult int32
	Clock   int64
}

type BlkpgPartition struct {
	Start   int64
	Length  int64
	Pno     int32
	Devname [64]uint8
	Volname [64]uint8
	_       [4]byte
}

const (
	BLKPG = 0x20001269
)

type XDPUmemReg struct {
	Addr     uint64
	Len      uint64
	Size     uint32
	Headroom uint32
	Flags    uint32
	_        [4]byte
}

type CryptoUserAlg struct {
	Name        [64]uint8
	Driver_name [64]uint8
	Module_name [64]uint8
	Type        uint32
	Mask        uint32
	Refcnt      uint32
	Flags       uint32
}

type CryptoStatAEAD struct {
	Type         [64]uint8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatAKCipher struct {
	Type         [64]uint8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Verify_cnt   uint64
	Sign_cnt     uint64
	Err_cnt      uint64
}

type CryptoStatCipher struct {
	Type         [64]uint8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatCompress struct {
	Type            [64]uint8
	Compress_cnt    uint64
	Compress_tlen   uint64
	Decompress_cnt  uint64
	Decompress_tlen uint64
	Err_cnt         uint64
}

type CryptoStatHash struct {
	Type      [64]uint8
	Hash_cnt  uint64
	Hash_tlen uint64
	Err_cnt   uint64
}

type CryptoStatKPP struct {
	Type                      [64]uint8
	Setsecret_cnt             uint64
	Generate_public_key_cnt   uint64
	Compute_shared_secret_cnt uint64
	Err_cnt                   uint64
}

type CryptoStatRNG struct {
	Type          [64]uint8
	Generate_cnt  uint64
	Generate_tlen uint64
	Seed_cnt      uint64
	Err_cnt       uint64
}

type CryptoStatLarval struct {
	Type [64]uint8
}

type CryptoReportLarval struct {
	Type [64]uint8
}

type CryptoReportHash struct {
	Type       [64]uint8
	Blocksize  uint32
	Digestsize uint32
}

type CryptoReportCipher struct {
	Type        [64]uint8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
}

type CryptoReportBlkCipher struct {
	Type        [64]uint8
	Geniv       [64]uint8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
	Ivsize      uint32
}

type CryptoReportAEAD struct {
	Type        [64]uint8
	Geniv       [64]uint8
	Blocksize   uint32
	Maxauthsize uint32
	Ivsize      uint32
}

type CryptoReportComp struct {
	Type [64]uint8
}

type CryptoReportRNG struct {
	Type     [64]uint8
	Seedsize uint32
}

type CryptoReportAKCipher struct {
	Type [64]uint8
}

type CryptoReportKPP struct {
	Type [64]uint8
}

type CryptoReportAcomp struct {
	Type [64]uint8
}

type LoopInfo struct {
	Number           int32
	Device           uint64
	Inode            uint64
	Rdevice          uint64
	Offset           int32
	Encrypt_type     int32
	Encrypt_key_size int32
	Flags            int32
	Name             [64]uint8
	Encrypt_key      [32]uint8
	Init             [2]uint64
	Reserved         [4]uint8
	_                [4]byte
}

type TIPCSubscr struct {
	Seq     TIPCServiceRange
	Timeout uint32
	Filter  uint32
	Handle  [8]uint8
}

type TIPCSIOCLNReq struct {
	Peer     uint32
	Id       uint32
	Linkname [68]uint8
}

type TIPCSIOCNodeIDReq struct {
	Peer uint32
	Id   [16]uint8
}

type PPSKInfo struct {
	Assert_sequence uint32
	Clear_sequence  uint32
	Assert_tu       PPSKTime
	Clear_tu        PPSKTime
	Current_mode    int32
	_               [4]byte
}

const (
	PPS_GETPARAMS = 0x400870a1
	PPS_SETPARAMS = 0x800870a2
	PPS_GETCAP    = 0x400870a3
	PPS_FETCH     = 0xc00870a4
)

const (
	PIDFD_NONBLOCK = 0x800
)

type SysvIpcPerm struct {
	Key  int32
	Uid  uint32
	Gid  uint32
	Cuid uint32
	Cgid uint32
	Mode uint32
	Seq  uint32
	_    uint32
	_    uint64
	_    uint64
}
type SysvShmDesc struct {
	Perm   SysvIpcPerm
	Atime  int64
	Dtime  int64
	Ctime  int64
	Segsz  uint64
	Cpid   int32
	Lpid   int32
	Nattch uint64
	_      uint64
	_      uint64
}
   07070100000EC0000081A4000000000000000000000001645E367C00003204000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go  // cgo -godefs -objdir=/tmp/riscv64/cgo -- -Wall -Werror -static -I/tmp/riscv64/include linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build riscv64 && linux
// +build riscv64,linux

package unix

const (
	SizeofPtr  = 0x8
	SizeofLong = 0x8
)

type (
	_C_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int64
}

type Timeval struct {
	Sec  int64
	Usec int64
}

type Timex struct {
	Modes     uint32
	Offset    int64
	Freq      int64
	Maxerror  int64
	Esterror  int64
	Status    int32
	Constant  int64
	Precision int64
	Tolerance int64
	Time      Timeval
	Tick      int64
	Ppsfreq   int64
	Jitter    int64
	Shift     int32
	Stabil    int64
	Jitcnt    int64
	Calcnt    int64
	Errcnt    int64
	Stbcnt    int64
	Tai       int32
	_         [44]byte
}

type Time_t int64

type Tms struct {
	Utime  int64
	Stime  int64
	Cutime int64
	Cstime int64
}

type Utimbuf struct {
	Actime  int64
	Modtime int64
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int64
	Ixrss    int64
	Idrss    int64
	Isrss    int64
	Minflt   int64
	Majflt   int64
	Nswap    int64
	Inblock  int64
	Oublock  int64
	Msgsnd   int64
	Msgrcv   int64
	Nsignals int64
	Nvcsw    int64
	Nivcsw   int64
}

type Stat_t struct {
	Dev     uint64
	Ino     uint64
	Mode    uint32
	Nlink   uint32
	Uid     uint32
	Gid     uint32
	Rdev    uint64
	_       uint64
	Size    int64
	Blksize int32
	_       int32
	Blocks  int64
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	_       [2]int32
}

type Dirent struct {
	Ino    uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Name   [256]uint8
	_      [5]byte
}

type Flock_t struct {
	Type   int16
	Whence int16
	Start  int64
	Len    int64
	Pid    int32
	_      [4]byte
}

type DmNameList struct {
	Dev  uint64
	Next uint32
	Name [0]byte
	_    [4]byte
}

const (
	FADV_DONTNEED = 0x4
	FADV_NOREUSE  = 0x5
)

type RawSockaddrNFCLLCP struct {
	Sa_family        uint16
	Dev_idx          uint32
	Target_idx       uint32
	Nfc_protocol     uint32
	Dsap             uint8
	Ssap             uint8
	Service_name     [63]uint8
	Service_name_len uint64
}

type RawSockaddr struct {
	Family uint16
	Data   [14]uint8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [96]uint8
}

type Iovec struct {
	Base *byte
	Len  uint64
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     uint64
	Control    *byte
	Controllen uint64
	Flags      int32
	_          [4]byte
}

type Cmsghdr struct {
	Len   uint64
	Level int32
	Type  int32
}

type ifreq struct {
	Ifrn [16]byte
	Ifru [24]byte
}

const (
	SizeofSockaddrNFCLLCP = 0x60
	SizeofIovec           = 0x10
	SizeofMsghdr          = 0x38
	SizeofCmsghdr         = 0x10
)

const (
	SizeofSockFprog = 0x10
)

type PtraceRegs struct {
	Pc  uint64
	Ra  uint64
	Sp  uint64
	Gp  uint64
	Tp  uint64
	T0  uint64
	T1  uint64
	T2  uint64
	S0  uint64
	S1  uint64
	A0  uint64
	A1  uint64
	A2  uint64
	A3  uint64
	A4  uint64
	A5  uint64
	A6  uint64
	A7  uint64
	S2  uint64
	S3  uint64
	S4  uint64
	S5  uint64
	S6  uint64
	S7  uint64
	S8  uint64
	S9  uint64
	S10 uint64
	S11 uint64
	T3  uint64
	T4  uint64
	T5  uint64
	T6  uint64
}

type FdSet struct {
	Bits [16]int64
}

type Sysinfo_t struct {
	Uptime    int64
	Loads     [3]uint64
	Totalram  uint64
	Freeram   uint64
	Sharedram uint64
	Bufferram uint64
	Totalswap uint64
	Freeswap  uint64
	Procs     uint16
	Pad       uint16
	Totalhigh uint64
	Freehigh  uint64
	Unit      uint32
	_         [0]uint8
	_         [4]byte
}

type Ustat_t struct {
	Tfree  int32
	Tinode uint64
	Fname  [6]uint8
	Fpack  [6]uint8
	_      [4]byte
}

type EpollEvent struct {
	Events uint32
	_      int32
	Fd     int32
	Pad    int32
}

const (
	OPEN_TREE_CLOEXEC = 0x80000
)

const (
	POLLRDHUP = 0x2000
)

type Sigset_t struct {
	Val [16]uint64
}

const _C__NSIG = 0x41

const (
	SIG_BLOCK   = 0x0
	SIG_UNBLOCK = 0x1
	SIG_SETMASK = 0x2
)

type Siginfo struct {
	Signo int32
	Errno int32
	Code  int32
	_     int32
	_     [112]byte
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Line   uint8
	Cc     [19]uint8
	Ispeed uint32
	Ospeed uint32
}

type Taskstats struct {
	Version                   uint16
	Ac_exitcode               uint32
	Ac_flag                   uint8
	Ac_nice                   uint8
	Cpu_count                 uint64
	Cpu_delay_total           uint64
	Blkio_count               uint64
	Blkio_delay_total         uint64
	Swapin_count              uint64
	Swapin_delay_total        uint64
	Cpu_run_real_total        uint64
	Cpu_run_virtual_total     uint64
	Ac_comm                   [32]uint8
	Ac_sched                  uint8
	Ac_pad                    [3]uint8
	_                         [4]byte
	Ac_uid                    uint32
	Ac_gid                    uint32
	Ac_pid                    uint32
	Ac_ppid                   uint32
	Ac_btime                  uint32
	Ac_etime                  uint64
	Ac_utime                  uint64
	Ac_stime                  uint64
	Ac_minflt                 uint64
	Ac_majflt                 uint64
	Coremem                   uint64
	Virtmem                   uint64
	Hiwater_rss               uint64
	Hiwater_vm                uint64
	Read_char                 uint64
	Write_char                uint64
	Read_syscalls             uint64
	Write_syscalls            uint64
	Read_bytes                uint64
	Write_bytes               uint64
	Cancelled_write_bytes     uint64
	Nvcsw                     uint64
	Nivcsw                    uint64
	Ac_utimescaled            uint64
	Ac_stimescaled            uint64
	Cpu_scaled_run_real_total uint64
	Freepages_count           uint64
	Freepages_delay_total     uint64
	Thrashing_count           uint64
	Thrashing_delay_total     uint64
	Ac_btime64                uint64
	Compact_count             uint64
	Compact_delay_total       uint64
	Ac_tgid                   uint32
	Ac_tgetime                uint64
	Ac_exe_dev                uint64
	Ac_exe_inode              uint64
	Wpcopy_count              uint64
	Wpcopy_delay_total        uint64
}

type cpuMask uint64

const (
	_NCPUBITS = 0x40
)

const (
	CBitFieldMaskBit0  = 0x1
	CBitFieldMaskBit1  = 0x2
	CBitFieldMaskBit2  = 0x4
	CBitFieldMaskBit3  = 0x8
	CBitFieldMaskBit4  = 0x10
	CBitFieldMaskBit5  = 0x20
	CBitFieldMaskBit6  = 0x40
	CBitFieldMaskBit7  = 0x80
	CBitFieldMaskBit8  = 0x100
	CBitFieldMaskBit9  = 0x200
	CBitFieldMaskBit10 = 0x400
	CBitFieldMaskBit11 = 0x800
	CBitFieldMaskBit12 = 0x1000
	CBitFieldMaskBit13 = 0x2000
	CBitFieldMaskBit14 = 0x4000
	CBitFieldMaskBit15 = 0x8000
	CBitFieldMaskBit16 = 0x10000
	CBitFieldMaskBit17 = 0x20000
	CBitFieldMaskBit18 = 0x40000
	CBitFieldMaskBit19 = 0x80000
	CBitFieldMaskBit20 = 0x100000
	CBitFieldMaskBit21 = 0x200000
	CBitFieldMaskBit22 = 0x400000
	CBitFieldMaskBit23 = 0x800000
	CBitFieldMaskBit24 = 0x1000000
	CBitFieldMaskBit25 = 0x2000000
	CBitFieldMaskBit26 = 0x4000000
	CBitFieldMaskBit27 = 0x8000000
	CBitFieldMaskBit28 = 0x10000000
	CBitFieldMaskBit29 = 0x20000000
	CBitFieldMaskBit30 = 0x40000000
	CBitFieldMaskBit31 = 0x80000000
	CBitFieldMaskBit32 = 0x100000000
	CBitFieldMaskBit33 = 0x200000000
	CBitFieldMaskBit34 = 0x400000000
	CBitFieldMaskBit35 = 0x800000000
	CBitFieldMaskBit36 = 0x1000000000
	CBitFieldMaskBit37 = 0x2000000000
	CBitFieldMaskBit38 = 0x4000000000
	CBitFieldMaskBit39 = 0x8000000000
	CBitFieldMaskBit40 = 0x10000000000
	CBitFieldMaskBit41 = 0x20000000000
	CBitFieldMaskBit42 = 0x40000000000
	CBitFieldMaskBit43 = 0x80000000000
	CBitFieldMaskBit44 = 0x100000000000
	CBitFieldMaskBit45 = 0x200000000000
	CBitFieldMaskBit46 = 0x400000000000
	CBitFieldMaskBit47 = 0x800000000000
	CBitFieldMaskBit48 = 0x1000000000000
	CBitFieldMaskBit49 = 0x2000000000000
	CBitFieldMaskBit50 = 0x4000000000000
	CBitFieldMaskBit51 = 0x8000000000000
	CBitFieldMaskBit52 = 0x10000000000000
	CBitFieldMaskBit53 = 0x20000000000000
	CBitFieldMaskBit54 = 0x40000000000000
	CBitFieldMaskBit55 = 0x80000000000000
	CBitFieldMaskBit56 = 0x100000000000000
	CBitFieldMaskBit57 = 0x200000000000000
	CBitFieldMaskBit58 = 0x400000000000000
	CBitFieldMaskBit59 = 0x800000000000000
	CBitFieldMaskBit60 = 0x1000000000000000
	CBitFieldMaskBit61 = 0x2000000000000000
	CBitFieldMaskBit62 = 0x4000000000000000
	CBitFieldMaskBit63 = 0x8000000000000000
)

type SockaddrStorage struct {
	Family uint16
	Data   [118]byte
	_      uint64
}

type HDGeometry struct {
	Heads     uint8
	Sectors   uint8
	Cylinders uint16
	Start     uint64
}

type Statfs_t struct {
	Type    int64
	Bsize   int64
	Blocks  uint64
	Bfree   uint64
	Bavail  uint64
	Files   uint64
	Ffree   uint64
	Fsid    Fsid
	Namelen int64
	Frsize  int64
	Flags   int64
	Spare   [4]int64
}

type TpacketHdr struct {
	Status  uint64
	Len     uint32
	Snaplen uint32
	Mac     uint16
	Net     uint16
	Sec     uint32
	Usec    uint32
	_       [4]byte
}

const (
	SizeofTpacketHdr = 0x20
)

type RTCPLLInfo struct {
	Ctrl    int32
	Value   int32
	Max     int32
	Min     int32
	Posmult int32
	Negmult int32
	Clock   int64
}

type BlkpgPartition struct {
	Start   int64
	Length  int64
	Pno     int32
	Devname [64]uint8
	Volname [64]uint8
	_       [4]byte
}

const (
	BLKPG = 0x1269
)

type XDPUmemReg struct {
	Addr     uint64
	Len      uint64
	Size     uint32
	Headroom uint32
	Flags    uint32
	_        [4]byte
}

type CryptoUserAlg struct {
	Name        [64]uint8
	Driver_name [64]uint8
	Module_name [64]uint8
	Type        uint32
	Mask        uint32
	Refcnt      uint32
	Flags       uint32
}

type CryptoStatAEAD struct {
	Type         [64]uint8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatAKCipher struct {
	Type         [64]uint8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Verify_cnt   uint64
	Sign_cnt     uint64
	Err_cnt      uint64
}

type CryptoStatCipher struct {
	Type         [64]uint8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatCompress struct {
	Type            [64]uint8
	Compress_cnt    uint64
	Compress_tlen   uint64
	Decompress_cnt  uint64
	Decompress_tlen uint64
	Err_cnt         uint64
}

type CryptoStatHash struct {
	Type      [64]uint8
	Hash_cnt  uint64
	Hash_tlen uint64
	Err_cnt   uint64
}

type CryptoStatKPP struct {
	Type                      [64]uint8
	Setsecret_cnt             uint64
	Generate_public_key_cnt   uint64
	Compute_shared_secret_cnt uint64
	Err_cnt                   uint64
}

type CryptoStatRNG struct {
	Type          [64]uint8
	Generate_cnt  uint64
	Generate_tlen uint64
	Seed_cnt      uint64
	Err_cnt       uint64
}

type CryptoStatLarval struct {
	Type [64]uint8
}

type CryptoReportLarval struct {
	Type [64]uint8
}

type CryptoReportHash struct {
	Type       [64]uint8
	Blocksize  uint32
	Digestsize uint32
}

type CryptoReportCipher struct {
	Type        [64]uint8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
}

type CryptoReportBlkCipher struct {
	Type        [64]uint8
	Geniv       [64]uint8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
	Ivsize      uint32
}

type CryptoReportAEAD struct {
	Type        [64]uint8
	Geniv       [64]uint8
	Blocksize   uint32
	Maxauthsize uint32
	Ivsize      uint32
}

type CryptoReportComp struct {
	Type [64]uint8
}

type CryptoReportRNG struct {
	Type     [64]uint8
	Seedsize uint32
}

type CryptoReportAKCipher struct {
	Type [64]uint8
}

type CryptoReportKPP struct {
	Type [64]uint8
}

type CryptoReportAcomp struct {
	Type [64]uint8
}

type LoopInfo struct {
	Number           int32
	Device           uint32
	Inode            uint64
	Rdevice          uint32
	Offset           int32
	Encrypt_type     int32
	Encrypt_key_size int32
	Flags            int32
	Name             [64]uint8
	Encrypt_key      [32]uint8
	Init             [2]uint64
	Reserved         [4]uint8
	_                [4]byte
}

type TIPCSubscr struct {
	Seq     TIPCServiceRange
	Timeout uint32
	Filter  uint32
	Handle  [8]uint8
}

type TIPCSIOCLNReq struct {
	Peer     uint32
	Id       uint32
	Linkname [68]uint8
}

type TIPCSIOCNodeIDReq struct {
	Peer uint32
	Id   [16]uint8
}

type PPSKInfo struct {
	Assert_sequence uint32
	Clear_sequence  uint32
	Assert_tu       PPSKTime
	Clear_tu        PPSKTime
	Current_mode    int32
	_               [4]byte
}

const (
	PPS_GETPARAMS = 0x800870a1
	PPS_SETPARAMS = 0x400870a2
	PPS_GETCAP    = 0x800870a3
	PPS_FETCH     = 0xc00870a4
)

const (
	PIDFD_NONBLOCK = 0x800
)

type SysvIpcPerm struct {
	Key  int32
	Uid  uint32
	Gid  uint32
	Cuid uint32
	Cgid uint32
	Mode uint32
	_    [0]uint8
	Seq  uint16
	_    uint16
	_    uint64
	_    uint64
}
type SysvShmDesc struct {
	Perm   SysvIpcPerm
	Segsz  uint64
	Atime  int64
	Dtime  int64
	Ctime  int64
	Cpid   int32
	Lpid   int32
	Nattch uint64
	_      uint64
	_      uint64
}
07070100000EC1000081A4000000000000000000000001645E367C0000329B000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go    // cgo -godefs -objdir=/tmp/s390x/cgo -- -Wall -Werror -static -I/tmp/s390x/include -fsigned-char linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build s390x && linux
// +build s390x,linux

package unix

const (
	SizeofPtr  = 0x8
	SizeofLong = 0x8
)

type (
	_C_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int64
}

type Timeval struct {
	Sec  int64
	Usec int64
}

type Timex struct {
	Modes     uint32
	Offset    int64
	Freq      int64
	Maxerror  int64
	Esterror  int64
	Status    int32
	Constant  int64
	Precision int64
	Tolerance int64
	Time      Timeval
	Tick      int64
	Ppsfreq   int64
	Jitter    int64
	Shift     int32
	Stabil    int64
	Jitcnt    int64
	Calcnt    int64
	Errcnt    int64
	Stbcnt    int64
	Tai       int32
	_         [44]byte
}

type Time_t int64

type Tms struct {
	Utime  int64
	Stime  int64
	Cutime int64
	Cstime int64
}

type Utimbuf struct {
	Actime  int64
	Modtime int64
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int64
	Ixrss    int64
	Idrss    int64
	Isrss    int64
	Minflt   int64
	Majflt   int64
	Nswap    int64
	Inblock  int64
	Oublock  int64
	Msgsnd   int64
	Msgrcv   int64
	Nsignals int64
	Nvcsw    int64
	Nivcsw   int64
}

type Stat_t struct {
	Dev     uint64
	Ino     uint64
	Nlink   uint64
	Mode    uint32
	Uid     uint32
	Gid     uint32
	_       int32
	Rdev    uint64
	Size    int64
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	Blksize int64
	Blocks  int64
	_       [3]int64
}

type Dirent struct {
	Ino    uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Name   [256]int8
	_      [5]byte
}

type Flock_t struct {
	Type   int16
	Whence int16
	Start  int64
	Len    int64
	Pid    int32
	_      [4]byte
}

type DmNameList struct {
	Dev  uint64
	Next uint32
	Name [0]byte
	_    [4]byte
}

const (
	FADV_DONTNEED = 0x6
	FADV_NOREUSE  = 0x7
)

type RawSockaddrNFCLLCP struct {
	Sa_family        uint16
	Dev_idx          uint32
	Target_idx       uint32
	Nfc_protocol     uint32
	Dsap             uint8
	Ssap             uint8
	Service_name     [63]uint8
	Service_name_len uint64
}

type RawSockaddr struct {
	Family uint16
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [96]int8
}

type Iovec struct {
	Base *byte
	Len  uint64
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     uint64
	Control    *byte
	Controllen uint64
	Flags      int32
	_          [4]byte
}

type Cmsghdr struct {
	Len   uint64
	Level int32
	Type  int32
}

type ifreq struct {
	Ifrn [16]byte
	Ifru [24]byte
}

const (
	SizeofSockaddrNFCLLCP = 0x60
	SizeofIovec           = 0x10
	SizeofMsghdr          = 0x38
	SizeofCmsghdr         = 0x10
)

const (
	SizeofSockFprog = 0x10
)

type PtraceRegs struct {
	Psw                      PtracePsw
	Gprs                     [16]uint64
	Acrs                     [16]uint32
	Orig_gpr2                uint64
	Fp_regs                  PtraceFpregs
	Per_info                 PtracePer
	Ieee_instruction_pointer uint64
}

type PtracePsw struct {
	Mask uint64
	Addr uint64
}

type PtraceFpregs struct {
	Fpc  uint32
	Fprs [16]float64
}

type PtracePer struct {
	Control_regs  [3]uint64
	_             [8]byte
	Starting_addr uint64
	Ending_addr   uint64
	Perc_atmid    uint16
	Address       uint64
	Access_id     uint8
	_             [7]byte
}

type FdSet struct {
	Bits [16]int64
}

type Sysinfo_t struct {
	Uptime    int64
	Loads     [3]uint64
	Totalram  uint64
	Freeram   uint64
	Sharedram uint64
	Bufferram uint64
	Totalswap uint64
	Freeswap  uint64
	Procs     uint16
	Pad       uint16
	Totalhigh uint64
	Freehigh  uint64
	Unit      uint32
	_         [0]int8
	_         [4]byte
}

type Ustat_t struct {
	Tfree  int32
	Tinode uint64
	Fname  [6]int8
	Fpack  [6]int8
	_      [4]byte
}

type EpollEvent struct {
	Events uint32
	_      int32
	Fd     int32
	Pad    int32
}

const (
	OPEN_TREE_CLOEXEC = 0x80000
)

const (
	POLLRDHUP = 0x2000
)

type Sigset_t struct {
	Val [16]uint64
}

const _C__NSIG = 0x41

const (
	SIG_BLOCK   = 0x0
	SIG_UNBLOCK = 0x1
	SIG_SETMASK = 0x2
)

type Siginfo struct {
	Signo int32
	Errno int32
	Code  int32
	_     int32
	_     [112]byte
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Line   uint8
	Cc     [19]uint8
	Ispeed uint32
	Ospeed uint32
}

type Taskstats struct {
	Version                   uint16
	Ac_exitcode               uint32
	Ac_flag                   uint8
	Ac_nice                   uint8
	Cpu_count                 uint64
	Cpu_delay_total           uint64
	Blkio_count               uint64
	Blkio_delay_total         uint64
	Swapin_count              uint64
	Swapin_delay_total        uint64
	Cpu_run_real_total        uint64
	Cpu_run_virtual_total     uint64
	Ac_comm                   [32]int8
	Ac_sched                  uint8
	Ac_pad                    [3]uint8
	_                         [4]byte
	Ac_uid                    uint32
	Ac_gid                    uint32
	Ac_pid                    uint32
	Ac_ppid                   uint32
	Ac_btime                  uint32
	Ac_etime                  uint64
	Ac_utime                  uint64
	Ac_stime                  uint64
	Ac_minflt                 uint64
	Ac_majflt                 uint64
	Coremem                   uint64
	Virtmem                   uint64
	Hiwater_rss               uint64
	Hiwater_vm                uint64
	Read_char                 uint64
	Write_char                uint64
	Read_syscalls             uint64
	Write_syscalls            uint64
	Read_bytes                uint64
	Write_bytes               uint64
	Cancelled_write_bytes     uint64
	Nvcsw                     uint64
	Nivcsw                    uint64
	Ac_utimescaled            uint64
	Ac_stimescaled            uint64
	Cpu_scaled_run_real_total uint64
	Freepages_count           uint64
	Freepages_delay_total     uint64
	Thrashing_count           uint64
	Thrashing_delay_total     uint64
	Ac_btime64                uint64
	Compact_count             uint64
	Compact_delay_total       uint64
	Ac_tgid                   uint32
	Ac_tgetime                uint64
	Ac_exe_dev                uint64
	Ac_exe_inode              uint64
	Wpcopy_count              uint64
	Wpcopy_delay_total        uint64
}

type cpuMask uint64

const (
	_NCPUBITS = 0x40
)

const (
	CBitFieldMaskBit0  = 0x8000000000000000
	CBitFieldMaskBit1  = 0x4000000000000000
	CBitFieldMaskBit2  = 0x2000000000000000
	CBitFieldMaskBit3  = 0x1000000000000000
	CBitFieldMaskBit4  = 0x800000000000000
	CBitFieldMaskBit5  = 0x400000000000000
	CBitFieldMaskBit6  = 0x200000000000000
	CBitFieldMaskBit7  = 0x100000000000000
	CBitFieldMaskBit8  = 0x80000000000000
	CBitFieldMaskBit9  = 0x40000000000000
	CBitFieldMaskBit10 = 0x20000000000000
	CBitFieldMaskBit11 = 0x10000000000000
	CBitFieldMaskBit12 = 0x8000000000000
	CBitFieldMaskBit13 = 0x4000000000000
	CBitFieldMaskBit14 = 0x2000000000000
	CBitFieldMaskBit15 = 0x1000000000000
	CBitFieldMaskBit16 = 0x800000000000
	CBitFieldMaskBit17 = 0x400000000000
	CBitFieldMaskBit18 = 0x200000000000
	CBitFieldMaskBit19 = 0x100000000000
	CBitFieldMaskBit20 = 0x80000000000
	CBitFieldMaskBit21 = 0x40000000000
	CBitFieldMaskBit22 = 0x20000000000
	CBitFieldMaskBit23 = 0x10000000000
	CBitFieldMaskBit24 = 0x8000000000
	CBitFieldMaskBit25 = 0x4000000000
	CBitFieldMaskBit26 = 0x2000000000
	CBitFieldMaskBit27 = 0x1000000000
	CBitFieldMaskBit28 = 0x800000000
	CBitFieldMaskBit29 = 0x400000000
	CBitFieldMaskBit30 = 0x200000000
	CBitFieldMaskBit31 = 0x100000000
	CBitFieldMaskBit32 = 0x80000000
	CBitFieldMaskBit33 = 0x40000000
	CBitFieldMaskBit34 = 0x20000000
	CBitFieldMaskBit35 = 0x10000000
	CBitFieldMaskBit36 = 0x8000000
	CBitFieldMaskBit37 = 0x4000000
	CBitFieldMaskBit38 = 0x2000000
	CBitFieldMaskBit39 = 0x1000000
	CBitFieldMaskBit40 = 0x800000
	CBitFieldMaskBit41 = 0x400000
	CBitFieldMaskBit42 = 0x200000
	CBitFieldMaskBit43 = 0x100000
	CBitFieldMaskBit44 = 0x80000
	CBitFieldMaskBit45 = 0x40000
	CBitFieldMaskBit46 = 0x20000
	CBitFieldMaskBit47 = 0x10000
	CBitFieldMaskBit48 = 0x8000
	CBitFieldMaskBit49 = 0x4000
	CBitFieldMaskBit50 = 0x2000
	CBitFieldMaskBit51 = 0x1000
	CBitFieldMaskBit52 = 0x800
	CBitFieldMaskBit53 = 0x400
	CBitFieldMaskBit54 = 0x200
	CBitFieldMaskBit55 = 0x100
	CBitFieldMaskBit56 = 0x80
	CBitFieldMaskBit57 = 0x40
	CBitFieldMaskBit58 = 0x20
	CBitFieldMaskBit59 = 0x10
	CBitFieldMaskBit60 = 0x8
	CBitFieldMaskBit61 = 0x4
	CBitFieldMaskBit62 = 0x2
	CBitFieldMaskBit63 = 0x1
)

type SockaddrStorage struct {
	Family uint16
	Data   [118]byte
	_      uint64
}

type HDGeometry struct {
	Heads     uint8
	Sectors   uint8
	Cylinders uint16
	Start     uint64
}

type Statfs_t struct {
	Type    uint32
	Bsize   uint32
	Blocks  uint64
	Bfree   uint64
	Bavail  uint64
	Files   uint64
	Ffree   uint64
	Fsid    Fsid
	Namelen uint32
	Frsize  uint32
	Flags   uint32
	Spare   [4]uint32
	_       [4]byte
}

type TpacketHdr struct {
	Status  uint64
	Len     uint32
	Snaplen uint32
	Mac     uint16
	Net     uint16
	Sec     uint32
	Usec    uint32
	_       [4]byte
}

const (
	SizeofTpacketHdr = 0x20
)

type RTCPLLInfo struct {
	Ctrl    int32
	Value   int32
	Max     int32
	Min     int32
	Posmult int32
	Negmult int32
	Clock   int64
}

type BlkpgPartition struct {
	Start   int64
	Length  int64
	Pno     int32
	Devname [64]uint8
	Volname [64]uint8
	_       [4]byte
}

const (
	BLKPG = 0x1269
)

type XDPUmemReg struct {
	Addr     uint64
	Len      uint64
	Size     uint32
	Headroom uint32
	Flags    uint32
	_        [4]byte
}

type CryptoUserAlg struct {
	Name        [64]int8
	Driver_name [64]int8
	Module_name [64]int8
	Type        uint32
	Mask        uint32
	Refcnt      uint32
	Flags       uint32
}

type CryptoStatAEAD struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatAKCipher struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Verify_cnt   uint64
	Sign_cnt     uint64
	Err_cnt      uint64
}

type CryptoStatCipher struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatCompress struct {
	Type            [64]int8
	Compress_cnt    uint64
	Compress_tlen   uint64
	Decompress_cnt  uint64
	Decompress_tlen uint64
	Err_cnt         uint64
}

type CryptoStatHash struct {
	Type      [64]int8
	Hash_cnt  uint64
	Hash_tlen uint64
	Err_cnt   uint64
}

type CryptoStatKPP struct {
	Type                      [64]int8
	Setsecret_cnt             uint64
	Generate_public_key_cnt   uint64
	Compute_shared_secret_cnt uint64
	Err_cnt                   uint64
}

type CryptoStatRNG struct {
	Type          [64]int8
	Generate_cnt  uint64
	Generate_tlen uint64
	Seed_cnt      uint64
	Err_cnt       uint64
}

type CryptoStatLarval struct {
	Type [64]int8
}

type CryptoReportLarval struct {
	Type [64]int8
}

type CryptoReportHash struct {
	Type       [64]int8
	Blocksize  uint32
	Digestsize uint32
}

type CryptoReportCipher struct {
	Type        [64]int8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
}

type CryptoReportBlkCipher struct {
	Type        [64]int8
	Geniv       [64]int8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
	Ivsize      uint32
}

type CryptoReportAEAD struct {
	Type        [64]int8
	Geniv       [64]int8
	Blocksize   uint32
	Maxauthsize uint32
	Ivsize      uint32
}

type CryptoReportComp struct {
	Type [64]int8
}

type CryptoReportRNG struct {
	Type     [64]int8
	Seedsize uint32
}

type CryptoReportAKCipher struct {
	Type [64]int8
}

type CryptoReportKPP struct {
	Type [64]int8
}

type CryptoReportAcomp struct {
	Type [64]int8
}

type LoopInfo struct {
	Number           int32
	Device           uint16
	Inode            uint64
	Rdevice          uint16
	Offset           int32
	Encrypt_type     int32
	Encrypt_key_size int32
	Flags            int32
	Name             [64]int8
	Encrypt_key      [32]uint8
	Init             [2]uint64
	Reserved         [4]int8
	_                [4]byte
}

type TIPCSubscr struct {
	Seq     TIPCServiceRange
	Timeout uint32
	Filter  uint32
	Handle  [8]int8
}

type TIPCSIOCLNReq struct {
	Peer     uint32
	Id       uint32
	Linkname [68]int8
}

type TIPCSIOCNodeIDReq struct {
	Peer uint32
	Id   [16]int8
}

type PPSKInfo struct {
	Assert_sequence uint32
	Clear_sequence  uint32
	Assert_tu       PPSKTime
	Clear_tu        PPSKTime
	Current_mode    int32
	_               [4]byte
}

const (
	PPS_GETPARAMS = 0x800870a1
	PPS_SETPARAMS = 0x400870a2
	PPS_GETCAP    = 0x800870a3
	PPS_FETCH     = 0xc00870a4
)

const (
	PIDFD_NONBLOCK = 0x800
)

type SysvIpcPerm struct {
	Key  int32
	Uid  uint32
	Gid  uint32
	Cuid uint32
	Cgid uint32
	Mode uint32
	_    uint16
	Seq  uint16
	_    uint64
	_    uint64
}
type SysvShmDesc struct {
	Perm   SysvIpcPerm
	Segsz  uint64
	Atime  int64
	Dtime  int64
	Ctime  int64
	Cpid   int32
	Lpid   int32
	Nattch uint64
	_      uint64
	_      uint64
}
 07070100000EC2000081A4000000000000000000000001645E367C000030E0000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go  // cgo -godefs -objdir=/tmp/sparc64/cgo -- -Wall -Werror -static -I/tmp/sparc64/include linux/types.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build sparc64 && linux
// +build sparc64,linux

package unix

const (
	SizeofPtr  = 0x8
	SizeofLong = 0x8
)

type (
	_C_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int64
}

type Timeval struct {
	Sec  int64
	Usec int32
	_    [4]byte
}

type Timex struct {
	Modes     uint32
	Offset    int64
	Freq      int64
	Maxerror  int64
	Esterror  int64
	Status    int32
	Constant  int64
	Precision int64
	Tolerance int64
	Time      Timeval
	Tick      int64
	Ppsfreq   int64
	Jitter    int64
	Shift     int32
	Stabil    int64
	Jitcnt    int64
	Calcnt    int64
	Errcnt    int64
	Stbcnt    int64
	Tai       int32
	_         [44]byte
}

type Time_t int64

type Tms struct {
	Utime  int64
	Stime  int64
	Cutime int64
	Cstime int64
}

type Utimbuf struct {
	Actime  int64
	Modtime int64
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int64
	Ixrss    int64
	Idrss    int64
	Isrss    int64
	Minflt   int64
	Majflt   int64
	Nswap    int64
	Inblock  int64
	Oublock  int64
	Msgsnd   int64
	Msgrcv   int64
	Nsignals int64
	Nvcsw    int64
	Nivcsw   int64
}

type Stat_t struct {
	Dev     uint64
	_       uint16
	Ino     uint64
	Mode    uint32
	Nlink   uint32
	Uid     uint32
	Gid     uint32
	Rdev    uint64
	_       uint16
	Size    int64
	Blksize int64
	Blocks  int64
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	_       uint64
	_       uint64
}

type Dirent struct {
	Ino    uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Name   [256]int8
	_      [5]byte
}

type Flock_t struct {
	Type   int16
	Whence int16
	Start  int64
	Len    int64
	Pid    int32
	_      int16
	_      [2]byte
}

type DmNameList struct {
	Dev  uint64
	Next uint32
	Name [0]byte
	_    [4]byte
}

const (
	FADV_DONTNEED = 0x4
	FADV_NOREUSE  = 0x5
)

type RawSockaddrNFCLLCP struct {
	Sa_family        uint16
	Dev_idx          uint32
	Target_idx       uint32
	Nfc_protocol     uint32
	Dsap             uint8
	Ssap             uint8
	Service_name     [63]uint8
	Service_name_len uint64
}

type RawSockaddr struct {
	Family uint16
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [96]int8
}

type Iovec struct {
	Base *byte
	Len  uint64
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     uint64
	Control    *byte
	Controllen uint64
	Flags      int32
	_          [4]byte
}

type Cmsghdr struct {
	Len   uint64
	Level int32
	Type  int32
}

type ifreq struct {
	Ifrn [16]byte
	Ifru [24]byte
}

const (
	SizeofSockaddrNFCLLCP = 0x60
	SizeofIovec           = 0x10
	SizeofMsghdr          = 0x38
	SizeofCmsghdr         = 0x10
)

const (
	SizeofSockFprog = 0x10
)

type PtraceRegs struct {
	Regs   [16]uint64
	Tstate uint64
	Tpc    uint64
	Tnpc   uint64
	Y      uint32
	Magic  uint32
}

type FdSet struct {
	Bits [16]int64
}

type Sysinfo_t struct {
	Uptime    int64
	Loads     [3]uint64
	Totalram  uint64
	Freeram   uint64
	Sharedram uint64
	Bufferram uint64
	Totalswap uint64
	Freeswap  uint64
	Procs     uint16
	Pad       uint16
	Totalhigh uint64
	Freehigh  uint64
	Unit      uint32
	_         [0]int8
	_         [4]byte
}

type Ustat_t struct {
	Tfree  int32
	Tinode uint64
	Fname  [6]int8
	Fpack  [6]int8
	_      [4]byte
}

type EpollEvent struct {
	Events uint32
	_      int32
	Fd     int32
	Pad    int32
}

const (
	OPEN_TREE_CLOEXEC = 0x400000
)

const (
	POLLRDHUP = 0x800
)

type Sigset_t struct {
	Val [16]uint64
}

const _C__NSIG = 0x41

const (
	SIG_BLOCK   = 0x1
	SIG_UNBLOCK = 0x2
	SIG_SETMASK = 0x4
)

type Siginfo struct {
	Signo int32
	Errno int32
	Code  int32
	_     int32
	_     [112]byte
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Line   uint8
	Cc     [19]uint8
	Ispeed uint32
	Ospeed uint32
}

type Taskstats struct {
	Version                   uint16
	Ac_exitcode               uint32
	Ac_flag                   uint8
	Ac_nice                   uint8
	Cpu_count                 uint64
	Cpu_delay_total           uint64
	Blkio_count               uint64
	Blkio_delay_total         uint64
	Swapin_count              uint64
	Swapin_delay_total        uint64
	Cpu_run_real_total        uint64
	Cpu_run_virtual_total     uint64
	Ac_comm                   [32]int8
	Ac_sched                  uint8
	Ac_pad                    [3]uint8
	_                         [4]byte
	Ac_uid                    uint32
	Ac_gid                    uint32
	Ac_pid                    uint32
	Ac_ppid                   uint32
	Ac_btime                  uint32
	Ac_etime                  uint64
	Ac_utime                  uint64
	Ac_stime                  uint64
	Ac_minflt                 uint64
	Ac_majflt                 uint64
	Coremem                   uint64
	Virtmem                   uint64
	Hiwater_rss               uint64
	Hiwater_vm                uint64
	Read_char                 uint64
	Write_char                uint64
	Read_syscalls             uint64
	Write_syscalls            uint64
	Read_bytes                uint64
	Write_bytes               uint64
	Cancelled_write_bytes     uint64
	Nvcsw                     uint64
	Nivcsw                    uint64
	Ac_utimescaled            uint64
	Ac_stimescaled            uint64
	Cpu_scaled_run_real_total uint64
	Freepages_count           uint64
	Freepages_delay_total     uint64
	Thrashing_count           uint64
	Thrashing_delay_total     uint64
	Ac_btime64                uint64
	Compact_count             uint64
	Compact_delay_total       uint64
	Ac_tgid                   uint32
	Ac_tgetime                uint64
	Ac_exe_dev                uint64
	Ac_exe_inode              uint64
	Wpcopy_count              uint64
	Wpcopy_delay_total        uint64
}

type cpuMask uint64

const (
	_NCPUBITS = 0x40
)

const (
	CBitFieldMaskBit0  = 0x8000000000000000
	CBitFieldMaskBit1  = 0x4000000000000000
	CBitFieldMaskBit2  = 0x2000000000000000
	CBitFieldMaskBit3  = 0x1000000000000000
	CBitFieldMaskBit4  = 0x800000000000000
	CBitFieldMaskBit5  = 0x400000000000000
	CBitFieldMaskBit6  = 0x200000000000000
	CBitFieldMaskBit7  = 0x100000000000000
	CBitFieldMaskBit8  = 0x80000000000000
	CBitFieldMaskBit9  = 0x40000000000000
	CBitFieldMaskBit10 = 0x20000000000000
	CBitFieldMaskBit11 = 0x10000000000000
	CBitFieldMaskBit12 = 0x8000000000000
	CBitFieldMaskBit13 = 0x4000000000000
	CBitFieldMaskBit14 = 0x2000000000000
	CBitFieldMaskBit15 = 0x1000000000000
	CBitFieldMaskBit16 = 0x800000000000
	CBitFieldMaskBit17 = 0x400000000000
	CBitFieldMaskBit18 = 0x200000000000
	CBitFieldMaskBit19 = 0x100000000000
	CBitFieldMaskBit20 = 0x80000000000
	CBitFieldMaskBit21 = 0x40000000000
	CBitFieldMaskBit22 = 0x20000000000
	CBitFieldMaskBit23 = 0x10000000000
	CBitFieldMaskBit24 = 0x8000000000
	CBitFieldMaskBit25 = 0x4000000000
	CBitFieldMaskBit26 = 0x2000000000
	CBitFieldMaskBit27 = 0x1000000000
	CBitFieldMaskBit28 = 0x800000000
	CBitFieldMaskBit29 = 0x400000000
	CBitFieldMaskBit30 = 0x200000000
	CBitFieldMaskBit31 = 0x100000000
	CBitFieldMaskBit32 = 0x80000000
	CBitFieldMaskBit33 = 0x40000000
	CBitFieldMaskBit34 = 0x20000000
	CBitFieldMaskBit35 = 0x10000000
	CBitFieldMaskBit36 = 0x8000000
	CBitFieldMaskBit37 = 0x4000000
	CBitFieldMaskBit38 = 0x2000000
	CBitFieldMaskBit39 = 0x1000000
	CBitFieldMaskBit40 = 0x800000
	CBitFieldMaskBit41 = 0x400000
	CBitFieldMaskBit42 = 0x200000
	CBitFieldMaskBit43 = 0x100000
	CBitFieldMaskBit44 = 0x80000
	CBitFieldMaskBit45 = 0x40000
	CBitFieldMaskBit46 = 0x20000
	CBitFieldMaskBit47 = 0x10000
	CBitFieldMaskBit48 = 0x8000
	CBitFieldMaskBit49 = 0x4000
	CBitFieldMaskBit50 = 0x2000
	CBitFieldMaskBit51 = 0x1000
	CBitFieldMaskBit52 = 0x800
	CBitFieldMaskBit53 = 0x400
	CBitFieldMaskBit54 = 0x200
	CBitFieldMaskBit55 = 0x100
	CBitFieldMaskBit56 = 0x80
	CBitFieldMaskBit57 = 0x40
	CBitFieldMaskBit58 = 0x20
	CBitFieldMaskBit59 = 0x10
	CBitFieldMaskBit60 = 0x8
	CBitFieldMaskBit61 = 0x4
	CBitFieldMaskBit62 = 0x2
	CBitFieldMaskBit63 = 0x1
)

type SockaddrStorage struct {
	Family uint16
	Data   [118]byte
	_      uint64
}

type HDGeometry struct {
	Heads     uint8
	Sectors   uint8
	Cylinders uint16
	Start     uint64
}

type Statfs_t struct {
	Type    int64
	Bsize   int64
	Blocks  uint64
	Bfree   uint64
	Bavail  uint64
	Files   uint64
	Ffree   uint64
	Fsid    Fsid
	Namelen int64
	Frsize  int64
	Flags   int64
	Spare   [4]int64
}

type TpacketHdr struct {
	Status  uint64
	Len     uint32
	Snaplen uint32
	Mac     uint16
	Net     uint16
	Sec     uint32
	Usec    uint32
	_       [4]byte
}

const (
	SizeofTpacketHdr = 0x20
)

type RTCPLLInfo struct {
	Ctrl    int32
	Value   int32
	Max     int32
	Min     int32
	Posmult int32
	Negmult int32
	Clock   int64
}

type BlkpgPartition struct {
	Start   int64
	Length  int64
	Pno     int32
	Devname [64]uint8
	Volname [64]uint8
	_       [4]byte
}

const (
	BLKPG = 0x20001269
)

type XDPUmemReg struct {
	Addr     uint64
	Len      uint64
	Size     uint32
	Headroom uint32
	Flags    uint32
	_        [4]byte
}

type CryptoUserAlg struct {
	Name        [64]int8
	Driver_name [64]int8
	Module_name [64]int8
	Type        uint32
	Mask        uint32
	Refcnt      uint32
	Flags       uint32
}

type CryptoStatAEAD struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatAKCipher struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Verify_cnt   uint64
	Sign_cnt     uint64
	Err_cnt      uint64
}

type CryptoStatCipher struct {
	Type         [64]int8
	Encrypt_cnt  uint64
	Encrypt_tlen uint64
	Decrypt_cnt  uint64
	Decrypt_tlen uint64
	Err_cnt      uint64
}

type CryptoStatCompress struct {
	Type            [64]int8
	Compress_cnt    uint64
	Compress_tlen   uint64
	Decompress_cnt  uint64
	Decompress_tlen uint64
	Err_cnt         uint64
}

type CryptoStatHash struct {
	Type      [64]int8
	Hash_cnt  uint64
	Hash_tlen uint64
	Err_cnt   uint64
}

type CryptoStatKPP struct {
	Type                      [64]int8
	Setsecret_cnt             uint64
	Generate_public_key_cnt   uint64
	Compute_shared_secret_cnt uint64
	Err_cnt                   uint64
}

type CryptoStatRNG struct {
	Type          [64]int8
	Generate_cnt  uint64
	Generate_tlen uint64
	Seed_cnt      uint64
	Err_cnt       uint64
}

type CryptoStatLarval struct {
	Type [64]int8
}

type CryptoReportLarval struct {
	Type [64]int8
}

type CryptoReportHash struct {
	Type       [64]int8
	Blocksize  uint32
	Digestsize uint32
}

type CryptoReportCipher struct {
	Type        [64]int8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
}

type CryptoReportBlkCipher struct {
	Type        [64]int8
	Geniv       [64]int8
	Blocksize   uint32
	Min_keysize uint32
	Max_keysize uint32
	Ivsize      uint32
}

type CryptoReportAEAD struct {
	Type        [64]int8
	Geniv       [64]int8
	Blocksize   uint32
	Maxauthsize uint32
	Ivsize      uint32
}

type CryptoReportComp struct {
	Type [64]int8
}

type CryptoReportRNG struct {
	Type     [64]int8
	Seedsize uint32
}

type CryptoReportAKCipher struct {
	Type [64]int8
}

type CryptoReportKPP struct {
	Type [64]int8
}

type CryptoReportAcomp struct {
	Type [64]int8
}

type LoopInfo struct {
	Number           int32
	Device           uint32
	Inode            uint64
	Rdevice          uint32
	Offset           int32
	Encrypt_type     int32
	Encrypt_key_size int32
	Flags            int32
	Name             [64]int8
	Encrypt_key      [32]uint8
	Init             [2]uint64
	Reserved         [4]int8
	_                [4]byte
}

type TIPCSubscr struct {
	Seq     TIPCServiceRange
	Timeout uint32
	Filter  uint32
	Handle  [8]int8
}

type TIPCSIOCLNReq struct {
	Peer     uint32
	Id       uint32
	Linkname [68]int8
}

type TIPCSIOCNodeIDReq struct {
	Peer uint32
	Id   [16]int8
}

type PPSKInfo struct {
	Assert_sequence uint32
	Clear_sequence  uint32
	Assert_tu       PPSKTime
	Clear_tu        PPSKTime
	Current_mode    int32
	_               [4]byte
}

const (
	PPS_GETPARAMS = 0x400870a1
	PPS_SETPARAMS = 0x800870a2
	PPS_GETCAP    = 0x400870a3
	PPS_FETCH     = 0xc00870a4
)

const (
	PIDFD_NONBLOCK = 0x4000
)

type SysvIpcPerm struct {
	Key  int32
	Uid  uint32
	Gid  uint32
	Cuid uint32
	Cgid uint32
	Mode uint32
	_    uint16
	Seq  uint16
	_    uint64
	_    uint64
}
type SysvShmDesc struct {
	Perm   SysvIpcPerm
	Atime  int64
	Dtime  int64
	Ctime  int64
	Segsz  uint64
	Cpid   int32
	Lpid   int32
	Nattch uint64
	_      uint64
	_      uint64
}
07070100000EC3000081A4000000000000000000000001645E367C000025F0000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go // cgo -godefs types_netbsd.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build 386 && netbsd
// +build 386,netbsd

package unix

const (
	SizeofPtr      = 0x4
	SizeofShort    = 0x2
	SizeofInt      = 0x4
	SizeofLong     = 0x4
	SizeofLongLong = 0x8
)

type (
	_C_short     int16
	_C_int       int32
	_C_long      int32
	_C_long_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int32
}

type Timeval struct {
	Sec  int64
	Usec int32
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int32
	Ixrss    int32
	Idrss    int32
	Isrss    int32
	Minflt   int32
	Majflt   int32
	Nswap    int32
	Inblock  int32
	Oublock  int32
	Msgsnd   int32
	Msgrcv   int32
	Nsignals int32
	Nvcsw    int32
	Nivcsw   int32
}

type Rlimit struct {
	Cur uint64
	Max uint64
}

type _Gid_t uint32

type Stat_t struct {
	Dev     uint64
	Mode    uint32
	Ino     uint64
	Nlink   uint32
	Uid     uint32
	Gid     uint32
	Rdev    uint64
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	Btim    Timespec
	Size    int64
	Blocks  int64
	Blksize uint32
	Flags   uint32
	Gen     uint32
	Spare   [2]uint32
}

type Statfs_t [0]byte

type Statvfs_t struct {
	Flag        uint32
	Bsize       uint32
	Frsize      uint32
	Iosize      uint32
	Blocks      uint64
	Bfree       uint64
	Bavail      uint64
	Bresvd      uint64
	Files       uint64
	Ffree       uint64
	Favail      uint64
	Fresvd      uint64
	Syncreads   uint64
	Syncwrites  uint64
	Asyncreads  uint64
	Asyncwrites uint64
	Fsidx       Fsid
	Fsid        uint32
	Namemax     uint32
	Owner       uint32
	Spare       [4]uint32
	Fstypename  [32]byte
	Mntonname   [1024]byte
	Mntfromname [1024]byte
}

type Flock_t struct {
	Start  int64
	Len    int64
	Pid    int32
	Type   int16
	Whence int16
}

type Dirent struct {
	Fileno    uint64
	Reclen    uint16
	Namlen    uint16
	Type      uint8
	Name      [512]int8
	Pad_cgo_0 [3]byte
}

type Fsid struct {
	X__fsid_val [2]int32
}

const (
	PathMax = 0x400
)

const (
	ST_WAIT   = 0x1
	ST_NOWAIT = 0x2
)

const (
	FADV_NORMAL     = 0x0
	FADV_RANDOM     = 0x1
	FADV_SEQUENTIAL = 0x2
	FADV_WILLNEED   = 0x3
	FADV_DONTNEED   = 0x4
	FADV_NOREUSE    = 0x5
)

type RawSockaddrInet4 struct {
	Len    uint8
	Family uint8
	Port   uint16
	Addr   [4]byte /* in_addr */
	Zero   [8]int8
}

type RawSockaddrInet6 struct {
	Len      uint8
	Family   uint8
	Port     uint16
	Flowinfo uint32
	Addr     [16]byte /* in6_addr */
	Scope_id uint32
}

type RawSockaddrUnix struct {
	Len    uint8
	Family uint8
	Path   [104]int8
}

type RawSockaddrDatalink struct {
	Len    uint8
	Family uint8
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [12]int8
}

type RawSockaddr struct {
	Len    uint8
	Family uint8
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [92]int8
}

type _Socklen uint32

type Linger struct {
	Onoff  int32
	Linger int32
}

type Iovec struct {
	Base *byte
	Len  uint32
}

type IPMreq struct {
	Multiaddr [4]byte /* in_addr */
	Interface [4]byte /* in_addr */
}

type IPv6Mreq struct {
	Multiaddr [16]byte /* in6_addr */
	Interface uint32
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     int32
	Control    *byte
	Controllen uint32
	Flags      int32
}

type Cmsghdr struct {
	Len   uint32
	Level int32
	Type  int32
}

type Inet6Pktinfo struct {
	Addr    [16]byte /* in6_addr */
	Ifindex uint32
}

type IPv6MTUInfo struct {
	Addr RawSockaddrInet6
	Mtu  uint32
}

type ICMPv6Filter struct {
	Filt [8]uint32
}

const (
	SizeofSockaddrInet4    = 0x10
	SizeofSockaddrInet6    = 0x1c
	SizeofSockaddrAny      = 0x6c
	SizeofSockaddrUnix     = 0x6a
	SizeofSockaddrDatalink = 0x14
	SizeofLinger           = 0x8
	SizeofIovec            = 0x8
	SizeofIPMreq           = 0x8
	SizeofIPv6Mreq         = 0x14
	SizeofMsghdr           = 0x1c
	SizeofCmsghdr          = 0xc
	SizeofInet6Pktinfo     = 0x14
	SizeofIPv6MTUInfo      = 0x20
	SizeofICMPv6Filter     = 0x20
)

const (
	PTRACE_TRACEME = 0x0
	PTRACE_CONT    = 0x7
	PTRACE_KILL    = 0x8
)

type Kevent_t struct {
	Ident  uint32
	Filter uint32
	Flags  uint32
	Fflags uint32
	Data   int64
	Udata  int32
}

type FdSet struct {
	Bits [8]uint32
}

const (
	SizeofIfMsghdr         = 0x98
	SizeofIfData           = 0x84
	SizeofIfaMsghdr        = 0x18
	SizeofIfAnnounceMsghdr = 0x18
	SizeofRtMsghdr         = 0x78
	SizeofRtMetrics        = 0x50
)

type IfMsghdr struct {
	Msglen    uint16
	Version   uint8
	Type      uint8
	Addrs     int32
	Flags     int32
	Index     uint16
	Pad_cgo_0 [2]byte
	Data      IfData
	Pad_cgo_1 [4]byte
}

type IfData struct {
	Type       uint8
	Addrlen    uint8
	Hdrlen     uint8
	Pad_cgo_0  [1]byte
	Link_state int32
	Mtu        uint64
	Metric     uint64
	Baudrate   uint64
	Ipackets   uint64
	Ierrors    uint64
	Opackets   uint64
	Oerrors    uint64
	Collisions uint64
	Ibytes     uint64
	Obytes     uint64
	Imcasts    uint64
	Omcasts    uint64
	Iqdrops    uint64
	Noproto    uint64
	Lastchange Timespec
}

type IfaMsghdr struct {
	Msglen    uint16
	Version   uint8
	Type      uint8
	Addrs     int32
	Flags     int32
	Metric    int32
	Index     uint16
	Pad_cgo_0 [6]byte
}

type IfAnnounceMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Index   uint16
	Name    [16]int8
	What    uint16
}

type RtMsghdr struct {
	Msglen    uint16
	Version   uint8
	Type      uint8
	Index     uint16
	Pad_cgo_0 [2]byte
	Flags     int32
	Addrs     int32
	Pid       int32
	Seq       int32
	Errno     int32
	Use       int32
	Inits     int32
	Pad_cgo_1 [4]byte
	Rmx       RtMetrics
}

type RtMetrics struct {
	Locks    uint64
	Mtu      uint64
	Hopcount uint64
	Recvpipe uint64
	Sendpipe uint64
	Ssthresh uint64
	Rtt      uint64
	Rttvar   uint64
	Expire   int64
	Pksent   int64
}

type Mclpool [0]byte

const (
	SizeofBpfVersion = 0x4
	SizeofBpfStat    = 0x80
	SizeofBpfProgram = 0x8
	SizeofBpfInsn    = 0x8
	SizeofBpfHdr     = 0x14
)

type BpfVersion struct {
	Major uint16
	Minor uint16
}

type BpfStat struct {
	Recv    uint64
	Drop    uint64
	Capt    uint64
	Padding [13]uint64
}

type BpfProgram struct {
	Len   uint32
	Insns *BpfInsn
}

type BpfInsn struct {
	Code uint16
	Jt   uint8
	Jf   uint8
	K    uint32
}

type BpfHdr struct {
	Tstamp    BpfTimeval
	Caplen    uint32
	Datalen   uint32
	Hdrlen    uint16
	Pad_cgo_0 [2]byte
}

type BpfTimeval struct {
	Sec  int32
	Usec int32
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Cc     [20]uint8
	Ispeed int32
	Ospeed int32
}

type Winsize struct {
	Row    uint16
	Col    uint16
	Xpixel uint16
	Ypixel uint16
}

type Ptmget struct {
	Cfd int32
	Sfd int32
	Cn  [1024]byte
	Sn  [1024]byte
}

const (
	AT_FDCWD            = -0x64
	AT_EACCESS          = 0x100
	AT_SYMLINK_NOFOLLOW = 0x200
	AT_SYMLINK_FOLLOW   = 0x400
	AT_REMOVEDIR        = 0x800
)

type PollFd struct {
	Fd      int32
	Events  int16
	Revents int16
}

const (
	POLLERR    = 0x8
	POLLHUP    = 0x10
	POLLIN     = 0x1
	POLLNVAL   = 0x20
	POLLOUT    = 0x4
	POLLPRI    = 0x2
	POLLRDBAND = 0x80
	POLLRDNORM = 0x40
	POLLWRBAND = 0x100
	POLLWRNORM = 0x4
)

type Sysctlnode struct {
	Flags           uint32
	Num             int32
	Name            [32]int8
	Ver             uint32
	X__rsvd         uint32
	Un              [16]byte
	X_sysctl_size   [8]byte
	X_sysctl_func   [8]byte
	X_sysctl_parent [8]byte
	X_sysctl_desc   [8]byte
}

type Utsname struct {
	Sysname  [256]byte
	Nodename [256]byte
	Release  [256]byte
	Version  [256]byte
	Machine  [256]byte
}

const SizeofUvmexp = 0x278

type Uvmexp struct {
	Pagesize           int64
	Pagemask           int64
	Pageshift          int64
	Npages             int64
	Free               int64
	Active             int64
	Inactive           int64
	Paging             int64
	Wired              int64
	Zeropages          int64
	Reserve_pagedaemon int64
	Reserve_kernel     int64
	Freemin            int64
	Freetarg           int64
	Inactarg           int64
	Wiredmax           int64
	Nswapdev           int64
	Swpages            int64
	Swpginuse          int64
	Swpgonly           int64
	Nswget             int64
	Unused1            int64
	Cpuhit             int64
	Cpumiss            int64
	Faults             int64
	Traps              int64
	Intrs              int64
	Swtch              int64
	Softs              int64
	Syscalls           int64
	Pageins            int64
	Swapins            int64
	Swapouts           int64
	Pgswapin           int64
	Pgswapout          int64
	Forks              int64
	Forks_ppwait       int64
	Forks_sharevm      int64
	Pga_zerohit        int64
	Pga_zeromiss       int64
	Zeroaborts         int64
	Fltnoram           int64
	Fltnoanon          int64
	Fltpgwait          int64
	Fltpgrele          int64
	Fltrelck           int64
	Fltrelckok         int64
	Fltanget           int64
	Fltanretry         int64
	Fltamcopy          int64
	Fltnamap           int64
	Fltnomap           int64
	Fltlget            int64
	Fltget             int64
	Flt_anon           int64
	Flt_acow           int64
	Flt_obj            int64
	Flt_prcopy         int64
	Flt_przero         int64
	Pdwoke             int64
	Pdrevs             int64
	Unused4            int64
	Pdfreed            int64
	Pdscans            int64
	Pdanscan           int64
	Pdobscan           int64
	Pdreact            int64
	Pdbusy             int64
	Pdpageouts         int64
	Pdpending          int64
	Pddeact            int64
	Anonpages          int64
	Filepages          int64
	Execpages          int64
	Colorhit           int64
	Colormiss          int64
	Ncolors            int64
	Bootpages          int64
	Poolpages          int64
}

const SizeofClockinfo = 0x14

type Clockinfo struct {
	Hz      int32
	Tick    int32
	Tickadj int32
	Stathz  int32
	Profhz  int32
}
07070100000EC4000081A4000000000000000000000001645E367C000026B0000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go   // cgo -godefs types_netbsd.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build amd64 && netbsd
// +build amd64,netbsd

package unix

const (
	SizeofPtr      = 0x8
	SizeofShort    = 0x2
	SizeofInt      = 0x4
	SizeofLong     = 0x8
	SizeofLongLong = 0x8
)

type (
	_C_short     int16
	_C_int       int32
	_C_long      int64
	_C_long_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int64
}

type Timeval struct {
	Sec       int64
	Usec      int32
	Pad_cgo_0 [4]byte
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int64
	Ixrss    int64
	Idrss    int64
	Isrss    int64
	Minflt   int64
	Majflt   int64
	Nswap    int64
	Inblock  int64
	Oublock  int64
	Msgsnd   int64
	Msgrcv   int64
	Nsignals int64
	Nvcsw    int64
	Nivcsw   int64
}

type Rlimit struct {
	Cur uint64
	Max uint64
}

type _Gid_t uint32

type Stat_t struct {
	Dev     uint64
	Mode    uint32
	_       [4]byte
	Ino     uint64
	Nlink   uint32
	Uid     uint32
	Gid     uint32
	_       [4]byte
	Rdev    uint64
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	Btim    Timespec
	Size    int64
	Blocks  int64
	Blksize uint32
	Flags   uint32
	Gen     uint32
	Spare   [2]uint32
	_       [4]byte
}

type Statfs_t [0]byte

type Statvfs_t struct {
	Flag        uint64
	Bsize       uint64
	Frsize      uint64
	Iosize      uint64
	Blocks      uint64
	Bfree       uint64
	Bavail      uint64
	Bresvd      uint64
	Files       uint64
	Ffree       uint64
	Favail      uint64
	Fresvd      uint64
	Syncreads   uint64
	Syncwrites  uint64
	Asyncreads  uint64
	Asyncwrites uint64
	Fsidx       Fsid
	Fsid        uint64
	Namemax     uint64
	Owner       uint32
	Spare       [4]uint32
	Fstypename  [32]byte
	Mntonname   [1024]byte
	Mntfromname [1024]byte
	_           [4]byte
}

type Flock_t struct {
	Start  int64
	Len    int64
	Pid    int32
	Type   int16
	Whence int16
}

type Dirent struct {
	Fileno    uint64
	Reclen    uint16
	Namlen    uint16
	Type      uint8
	Name      [512]int8
	Pad_cgo_0 [3]byte
}

type Fsid struct {
	X__fsid_val [2]int32
}

const (
	PathMax = 0x400
)

const (
	ST_WAIT   = 0x1
	ST_NOWAIT = 0x2
)

const (
	FADV_NORMAL     = 0x0
	FADV_RANDOM     = 0x1
	FADV_SEQUENTIAL = 0x2
	FADV_WILLNEED   = 0x3
	FADV_DONTNEED   = 0x4
	FADV_NOREUSE    = 0x5
)

type RawSockaddrInet4 struct {
	Len    uint8
	Family uint8
	Port   uint16
	Addr   [4]byte /* in_addr */
	Zero   [8]int8
}

type RawSockaddrInet6 struct {
	Len      uint8
	Family   uint8
	Port     uint16
	Flowinfo uint32
	Addr     [16]byte /* in6_addr */
	Scope_id uint32
}

type RawSockaddrUnix struct {
	Len    uint8
	Family uint8
	Path   [104]int8
}

type RawSockaddrDatalink struct {
	Len    uint8
	Family uint8
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [12]int8
}

type RawSockaddr struct {
	Len    uint8
	Family uint8
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [92]int8
}

type _Socklen uint32

type Linger struct {
	Onoff  int32
	Linger int32
}

type Iovec struct {
	Base *byte
	Len  uint64
}

type IPMreq struct {
	Multiaddr [4]byte /* in_addr */
	Interface [4]byte /* in_addr */
}

type IPv6Mreq struct {
	Multiaddr [16]byte /* in6_addr */
	Interface uint32
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Pad_cgo_0  [4]byte
	Iov        *Iovec
	Iovlen     int32
	Pad_cgo_1  [4]byte
	Control    *byte
	Controllen uint32
	Flags      int32
}

type Cmsghdr struct {
	Len   uint32
	Level int32
	Type  int32
}

type Inet6Pktinfo struct {
	Addr    [16]byte /* in6_addr */
	Ifindex uint32
}

type IPv6MTUInfo struct {
	Addr RawSockaddrInet6
	Mtu  uint32
}

type ICMPv6Filter struct {
	Filt [8]uint32
}

const (
	SizeofSockaddrInet4    = 0x10
	SizeofSockaddrInet6    = 0x1c
	SizeofSockaddrAny      = 0x6c
	SizeofSockaddrUnix     = 0x6a
	SizeofSockaddrDatalink = 0x14
	SizeofLinger           = 0x8
	SizeofIovec            = 0x10
	SizeofIPMreq           = 0x8
	SizeofIPv6Mreq         = 0x14
	SizeofMsghdr           = 0x30
	SizeofCmsghdr          = 0xc
	SizeofInet6Pktinfo     = 0x14
	SizeofIPv6MTUInfo      = 0x20
	SizeofICMPv6Filter     = 0x20
)

const (
	PTRACE_TRACEME = 0x0
	PTRACE_CONT    = 0x7
	PTRACE_KILL    = 0x8
)

type Kevent_t struct {
	Ident     uint64
	Filter    uint32
	Flags     uint32
	Fflags    uint32
	Pad_cgo_0 [4]byte
	Data      int64
	Udata     int64
}

type FdSet struct {
	Bits [8]uint32
}

const (
	SizeofIfMsghdr         = 0x98
	SizeofIfData           = 0x88
	SizeofIfaMsghdr        = 0x18
	SizeofIfAnnounceMsghdr = 0x18
	SizeofRtMsghdr         = 0x78
	SizeofRtMetrics        = 0x50
)

type IfMsghdr struct {
	Msglen    uint16
	Version   uint8
	Type      uint8
	Addrs     int32
	Flags     int32
	Index     uint16
	Pad_cgo_0 [2]byte
	Data      IfData
}

type IfData struct {
	Type       uint8
	Addrlen    uint8
	Hdrlen     uint8
	Pad_cgo_0  [1]byte
	Link_state int32
	Mtu        uint64
	Metric     uint64
	Baudrate   uint64
	Ipackets   uint64
	Ierrors    uint64
	Opackets   uint64
	Oerrors    uint64
	Collisions uint64
	Ibytes     uint64
	Obytes     uint64
	Imcasts    uint64
	Omcasts    uint64
	Iqdrops    uint64
	Noproto    uint64
	Lastchange Timespec
}

type IfaMsghdr struct {
	Msglen    uint16
	Version   uint8
	Type      uint8
	Addrs     int32
	Flags     int32
	Metric    int32
	Index     uint16
	Pad_cgo_0 [6]byte
}

type IfAnnounceMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Index   uint16
	Name    [16]int8
	What    uint16
}

type RtMsghdr struct {
	Msglen    uint16
	Version   uint8
	Type      uint8
	Index     uint16
	Pad_cgo_0 [2]byte
	Flags     int32
	Addrs     int32
	Pid       int32
	Seq       int32
	Errno     int32
	Use       int32
	Inits     int32
	Pad_cgo_1 [4]byte
	Rmx       RtMetrics
}

type RtMetrics struct {
	Locks    uint64
	Mtu      uint64
	Hopcount uint64
	Recvpipe uint64
	Sendpipe uint64
	Ssthresh uint64
	Rtt      uint64
	Rttvar   uint64
	Expire   int64
	Pksent   int64
}

type Mclpool [0]byte

const (
	SizeofBpfVersion = 0x4
	SizeofBpfStat    = 0x80
	SizeofBpfProgram = 0x10
	SizeofBpfInsn    = 0x8
	SizeofBpfHdr     = 0x20
)

type BpfVersion struct {
	Major uint16
	Minor uint16
}

type BpfStat struct {
	Recv    uint64
	Drop    uint64
	Capt    uint64
	Padding [13]uint64
}

type BpfProgram struct {
	Len       uint32
	Pad_cgo_0 [4]byte
	Insns     *BpfInsn
}

type BpfInsn struct {
	Code uint16
	Jt   uint8
	Jf   uint8
	K    uint32
}

type BpfHdr struct {
	Tstamp    BpfTimeval
	Caplen    uint32
	Datalen   uint32
	Hdrlen    uint16
	Pad_cgo_0 [6]byte
}

type BpfTimeval struct {
	Sec  int64
	Usec int64
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Cc     [20]uint8
	Ispeed int32
	Ospeed int32
}

type Winsize struct {
	Row    uint16
	Col    uint16
	Xpixel uint16
	Ypixel uint16
}

type Ptmget struct {
	Cfd int32
	Sfd int32
	Cn  [1024]byte
	Sn  [1024]byte
}

const (
	AT_FDCWD            = -0x64
	AT_EACCESS          = 0x100
	AT_SYMLINK_NOFOLLOW = 0x200
	AT_SYMLINK_FOLLOW   = 0x400
	AT_REMOVEDIR        = 0x800
)

type PollFd struct {
	Fd      int32
	Events  int16
	Revents int16
}

const (
	POLLERR    = 0x8
	POLLHUP    = 0x10
	POLLIN     = 0x1
	POLLNVAL   = 0x20
	POLLOUT    = 0x4
	POLLPRI    = 0x2
	POLLRDBAND = 0x80
	POLLRDNORM = 0x40
	POLLWRBAND = 0x100
	POLLWRNORM = 0x4
)

type Sysctlnode struct {
	Flags           uint32
	Num             int32
	Name            [32]int8
	Ver             uint32
	X__rsvd         uint32
	Un              [16]byte
	X_sysctl_size   [8]byte
	X_sysctl_func   [8]byte
	X_sysctl_parent [8]byte
	X_sysctl_desc   [8]byte
}

type Utsname struct {
	Sysname  [256]byte
	Nodename [256]byte
	Release  [256]byte
	Version  [256]byte
	Machine  [256]byte
}

const SizeofUvmexp = 0x278

type Uvmexp struct {
	Pagesize           int64
	Pagemask           int64
	Pageshift          int64
	Npages             int64
	Free               int64
	Active             int64
	Inactive           int64
	Paging             int64
	Wired              int64
	Zeropages          int64
	Reserve_pagedaemon int64
	Reserve_kernel     int64
	Freemin            int64
	Freetarg           int64
	Inactarg           int64
	Wiredmax           int64
	Nswapdev           int64
	Swpages            int64
	Swpginuse          int64
	Swpgonly           int64
	Nswget             int64
	Unused1            int64
	Cpuhit             int64
	Cpumiss            int64
	Faults             int64
	Traps              int64
	Intrs              int64
	Swtch              int64
	Softs              int64
	Syscalls           int64
	Pageins            int64
	Swapins            int64
	Swapouts           int64
	Pgswapin           int64
	Pgswapout          int64
	Forks              int64
	Forks_ppwait       int64
	Forks_sharevm      int64
	Pga_zerohit        int64
	Pga_zeromiss       int64
	Zeroaborts         int64
	Fltnoram           int64
	Fltnoanon          int64
	Fltpgwait          int64
	Fltpgrele          int64
	Fltrelck           int64
	Fltrelckok         int64
	Fltanget           int64
	Fltanretry         int64
	Fltamcopy          int64
	Fltnamap           int64
	Fltnomap           int64
	Fltlget            int64
	Fltget             int64
	Flt_anon           int64
	Flt_acow           int64
	Flt_obj            int64
	Flt_prcopy         int64
	Flt_przero         int64
	Pdwoke             int64
	Pdrevs             int64
	Unused4            int64
	Pdfreed            int64
	Pdscans            int64
	Pdanscan           int64
	Pdobscan           int64
	Pdreact            int64
	Pdbusy             int64
	Pdpageouts         int64
	Pdpending          int64
	Pddeact            int64
	Anonpages          int64
	Filepages          int64
	Execpages          int64
	Colorhit           int64
	Colormiss          int64
	Ncolors            int64
	Bootpages          int64
	Poolpages          int64
}

const SizeofClockinfo = 0x14

type Clockinfo struct {
	Hz      int32
	Tick    int32
	Tickadj int32
	Stathz  int32
	Profhz  int32
}
07070100000EC5000081A4000000000000000000000001645E367C0000266F000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go // cgo -godefs types_netbsd.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build arm && netbsd
// +build arm,netbsd

package unix

const (
	SizeofPtr      = 0x4
	SizeofShort    = 0x2
	SizeofInt      = 0x4
	SizeofLong     = 0x4
	SizeofLongLong = 0x8
)

type (
	_C_short     int16
	_C_int       int32
	_C_long      int32
	_C_long_long int64
)

type Timespec struct {
	Sec       int64
	Nsec      int32
	Pad_cgo_0 [4]byte
}

type Timeval struct {
	Sec       int64
	Usec      int32
	Pad_cgo_0 [4]byte
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int32
	Ixrss    int32
	Idrss    int32
	Isrss    int32
	Minflt   int32
	Majflt   int32
	Nswap    int32
	Inblock  int32
	Oublock  int32
	Msgsnd   int32
	Msgrcv   int32
	Nsignals int32
	Nvcsw    int32
	Nivcsw   int32
}

type Rlimit struct {
	Cur uint64
	Max uint64
}

type _Gid_t uint32

type Stat_t struct {
	Dev     uint64
	Mode    uint32
	_       [4]byte
	Ino     uint64
	Nlink   uint32
	Uid     uint32
	Gid     uint32
	_       [4]byte
	Rdev    uint64
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	Btim    Timespec
	Size    int64
	Blocks  int64
	Blksize uint32
	Flags   uint32
	Gen     uint32
	Spare   [2]uint32
	_       [4]byte
}

type Statfs_t [0]byte

type Statvfs_t struct {
	Flag        uint32
	Bsize       uint32
	Frsize      uint32
	Iosize      uint32
	Blocks      uint64
	Bfree       uint64
	Bavail      uint64
	Bresvd      uint64
	Files       uint64
	Ffree       uint64
	Favail      uint64
	Fresvd      uint64
	Syncreads   uint64
	Syncwrites  uint64
	Asyncreads  uint64
	Asyncwrites uint64
	Fsidx       Fsid
	Fsid        uint32
	Namemax     uint32
	Owner       uint32
	Spare       [4]uint32
	Fstypename  [32]byte
	Mntonname   [1024]byte
	Mntfromname [1024]byte
}

type Flock_t struct {
	Start  int64
	Len    int64
	Pid    int32
	Type   int16
	Whence int16
}

type Dirent struct {
	Fileno    uint64
	Reclen    uint16
	Namlen    uint16
	Type      uint8
	Name      [512]int8
	Pad_cgo_0 [3]byte
}

type Fsid struct {
	X__fsid_val [2]int32
}

const (
	PathMax = 0x400
)

const (
	ST_WAIT   = 0x1
	ST_NOWAIT = 0x2
)

const (
	FADV_NORMAL     = 0x0
	FADV_RANDOM     = 0x1
	FADV_SEQUENTIAL = 0x2
	FADV_WILLNEED   = 0x3
	FADV_DONTNEED   = 0x4
	FADV_NOREUSE    = 0x5
)

type RawSockaddrInet4 struct {
	Len    uint8
	Family uint8
	Port   uint16
	Addr   [4]byte /* in_addr */
	Zero   [8]int8
}

type RawSockaddrInet6 struct {
	Len      uint8
	Family   uint8
	Port     uint16
	Flowinfo uint32
	Addr     [16]byte /* in6_addr */
	Scope_id uint32
}

type RawSockaddrUnix struct {
	Len    uint8
	Family uint8
	Path   [104]int8
}

type RawSockaddrDatalink struct {
	Len    uint8
	Family uint8
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [12]int8
}

type RawSockaddr struct {
	Len    uint8
	Family uint8
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [92]int8
}

type _Socklen uint32

type Linger struct {
	Onoff  int32
	Linger int32
}

type Iovec struct {
	Base *byte
	Len  uint32
}

type IPMreq struct {
	Multiaddr [4]byte /* in_addr */
	Interface [4]byte /* in_addr */
}

type IPv6Mreq struct {
	Multiaddr [16]byte /* in6_addr */
	Interface uint32
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     int32
	Control    *byte
	Controllen uint32
	Flags      int32
}

type Cmsghdr struct {
	Len   uint32
	Level int32
	Type  int32
}

type Inet6Pktinfo struct {
	Addr    [16]byte /* in6_addr */
	Ifindex uint32
}

type IPv6MTUInfo struct {
	Addr RawSockaddrInet6
	Mtu  uint32
}

type ICMPv6Filter struct {
	Filt [8]uint32
}

const (
	SizeofSockaddrInet4    = 0x10
	SizeofSockaddrInet6    = 0x1c
	SizeofSockaddrAny      = 0x6c
	SizeofSockaddrUnix     = 0x6a
	SizeofSockaddrDatalink = 0x14
	SizeofLinger           = 0x8
	SizeofIovec            = 0x8
	SizeofIPMreq           = 0x8
	SizeofIPv6Mreq         = 0x14
	SizeofMsghdr           = 0x1c
	SizeofCmsghdr          = 0xc
	SizeofInet6Pktinfo     = 0x14
	SizeofIPv6MTUInfo      = 0x20
	SizeofICMPv6Filter     = 0x20
)

const (
	PTRACE_TRACEME = 0x0
	PTRACE_CONT    = 0x7
	PTRACE_KILL    = 0x8
)

type Kevent_t struct {
	Ident     uint32
	Filter    uint32
	Flags     uint32
	Fflags    uint32
	Data      int64
	Udata     int32
	Pad_cgo_0 [4]byte
}

type FdSet struct {
	Bits [8]uint32
}

const (
	SizeofIfMsghdr         = 0x98
	SizeofIfData           = 0x88
	SizeofIfaMsghdr        = 0x18
	SizeofIfAnnounceMsghdr = 0x18
	SizeofRtMsghdr         = 0x78
	SizeofRtMetrics        = 0x50
)

type IfMsghdr struct {
	Msglen    uint16
	Version   uint8
	Type      uint8
	Addrs     int32
	Flags     int32
	Index     uint16
	Pad_cgo_0 [2]byte
	Data      IfData
}

type IfData struct {
	Type       uint8
	Addrlen    uint8
	Hdrlen     uint8
	Pad_cgo_0  [1]byte
	Link_state int32
	Mtu        uint64
	Metric     uint64
	Baudrate   uint64
	Ipackets   uint64
	Ierrors    uint64
	Opackets   uint64
	Oerrors    uint64
	Collisions uint64
	Ibytes     uint64
	Obytes     uint64
	Imcasts    uint64
	Omcasts    uint64
	Iqdrops    uint64
	Noproto    uint64
	Lastchange Timespec
}

type IfaMsghdr struct {
	Msglen    uint16
	Version   uint8
	Type      uint8
	Addrs     int32
	Flags     int32
	Metric    int32
	Index     uint16
	Pad_cgo_0 [6]byte
}

type IfAnnounceMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Index   uint16
	Name    [16]int8
	What    uint16
}

type RtMsghdr struct {
	Msglen    uint16
	Version   uint8
	Type      uint8
	Index     uint16
	Pad_cgo_0 [2]byte
	Flags     int32
	Addrs     int32
	Pid       int32
	Seq       int32
	Errno     int32
	Use       int32
	Inits     int32
	Pad_cgo_1 [4]byte
	Rmx       RtMetrics
}

type RtMetrics struct {
	Locks    uint64
	Mtu      uint64
	Hopcount uint64
	Recvpipe uint64
	Sendpipe uint64
	Ssthresh uint64
	Rtt      uint64
	Rttvar   uint64
	Expire   int64
	Pksent   int64
}

type Mclpool [0]byte

const (
	SizeofBpfVersion = 0x4
	SizeofBpfStat    = 0x80
	SizeofBpfProgram = 0x8
	SizeofBpfInsn    = 0x8
	SizeofBpfHdr     = 0x14
)

type BpfVersion struct {
	Major uint16
	Minor uint16
}

type BpfStat struct {
	Recv    uint64
	Drop    uint64
	Capt    uint64
	Padding [13]uint64
}

type BpfProgram struct {
	Len   uint32
	Insns *BpfInsn
}

type BpfInsn struct {
	Code uint16
	Jt   uint8
	Jf   uint8
	K    uint32
}

type BpfHdr struct {
	Tstamp    BpfTimeval
	Caplen    uint32
	Datalen   uint32
	Hdrlen    uint16
	Pad_cgo_0 [2]byte
}

type BpfTimeval struct {
	Sec  int32
	Usec int32
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Cc     [20]uint8
	Ispeed int32
	Ospeed int32
}

type Winsize struct {
	Row    uint16
	Col    uint16
	Xpixel uint16
	Ypixel uint16
}

type Ptmget struct {
	Cfd int32
	Sfd int32
	Cn  [1024]byte
	Sn  [1024]byte
}

const (
	AT_FDCWD            = -0x64
	AT_EACCESS          = 0x100
	AT_SYMLINK_NOFOLLOW = 0x200
	AT_SYMLINK_FOLLOW   = 0x400
	AT_REMOVEDIR        = 0x800
)

type PollFd struct {
	Fd      int32
	Events  int16
	Revents int16
}

const (
	POLLERR    = 0x8
	POLLHUP    = 0x10
	POLLIN     = 0x1
	POLLNVAL   = 0x20
	POLLOUT    = 0x4
	POLLPRI    = 0x2
	POLLRDBAND = 0x80
	POLLRDNORM = 0x40
	POLLWRBAND = 0x100
	POLLWRNORM = 0x4
)

type Sysctlnode struct {
	Flags           uint32
	Num             int32
	Name            [32]int8
	Ver             uint32
	X__rsvd         uint32
	Un              [16]byte
	X_sysctl_size   [8]byte
	X_sysctl_func   [8]byte
	X_sysctl_parent [8]byte
	X_sysctl_desc   [8]byte
}

type Utsname struct {
	Sysname  [256]byte
	Nodename [256]byte
	Release  [256]byte
	Version  [256]byte
	Machine  [256]byte
}

const SizeofUvmexp = 0x278

type Uvmexp struct {
	Pagesize           int64
	Pagemask           int64
	Pageshift          int64
	Npages             int64
	Free               int64
	Active             int64
	Inactive           int64
	Paging             int64
	Wired              int64
	Zeropages          int64
	Reserve_pagedaemon int64
	Reserve_kernel     int64
	Freemin            int64
	Freetarg           int64
	Inactarg           int64
	Wiredmax           int64
	Nswapdev           int64
	Swpages            int64
	Swpginuse          int64
	Swpgonly           int64
	Nswget             int64
	Unused1            int64
	Cpuhit             int64
	Cpumiss            int64
	Faults             int64
	Traps              int64
	Intrs              int64
	Swtch              int64
	Softs              int64
	Syscalls           int64
	Pageins            int64
	Swapins            int64
	Swapouts           int64
	Pgswapin           int64
	Pgswapout          int64
	Forks              int64
	Forks_ppwait       int64
	Forks_sharevm      int64
	Pga_zerohit        int64
	Pga_zeromiss       int64
	Zeroaborts         int64
	Fltnoram           int64
	Fltnoanon          int64
	Fltpgwait          int64
	Fltpgrele          int64
	Fltrelck           int64
	Fltrelckok         int64
	Fltanget           int64
	Fltanretry         int64
	Fltamcopy          int64
	Fltnamap           int64
	Fltnomap           int64
	Fltlget            int64
	Fltget             int64
	Flt_anon           int64
	Flt_acow           int64
	Flt_obj            int64
	Flt_prcopy         int64
	Flt_przero         int64
	Pdwoke             int64
	Pdrevs             int64
	Unused4            int64
	Pdfreed            int64
	Pdscans            int64
	Pdanscan           int64
	Pdobscan           int64
	Pdreact            int64
	Pdbusy             int64
	Pdpageouts         int64
	Pdpending          int64
	Pddeact            int64
	Anonpages          int64
	Filepages          int64
	Execpages          int64
	Colorhit           int64
	Colormiss          int64
	Ncolors            int64
	Bootpages          int64
	Poolpages          int64
}

const SizeofClockinfo = 0x14

type Clockinfo struct {
	Hz      int32
	Tick    int32
	Tickadj int32
	Stathz  int32
	Profhz  int32
}
 07070100000EC6000081A4000000000000000000000001645E367C000026B0000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go   // cgo -godefs types_netbsd.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build arm64 && netbsd
// +build arm64,netbsd

package unix

const (
	SizeofPtr      = 0x8
	SizeofShort    = 0x2
	SizeofInt      = 0x4
	SizeofLong     = 0x8
	SizeofLongLong = 0x8
)

type (
	_C_short     int16
	_C_int       int32
	_C_long      int64
	_C_long_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int64
}

type Timeval struct {
	Sec       int64
	Usec      int32
	Pad_cgo_0 [4]byte
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int64
	Ixrss    int64
	Idrss    int64
	Isrss    int64
	Minflt   int64
	Majflt   int64
	Nswap    int64
	Inblock  int64
	Oublock  int64
	Msgsnd   int64
	Msgrcv   int64
	Nsignals int64
	Nvcsw    int64
	Nivcsw   int64
}

type Rlimit struct {
	Cur uint64
	Max uint64
}

type _Gid_t uint32

type Stat_t struct {
	Dev     uint64
	Mode    uint32
	_       [4]byte
	Ino     uint64
	Nlink   uint32
	Uid     uint32
	Gid     uint32
	_       [4]byte
	Rdev    uint64
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	Btim    Timespec
	Size    int64
	Blocks  int64
	Blksize uint32
	Flags   uint32
	Gen     uint32
	Spare   [2]uint32
	_       [4]byte
}

type Statfs_t [0]byte

type Statvfs_t struct {
	Flag        uint64
	Bsize       uint64
	Frsize      uint64
	Iosize      uint64
	Blocks      uint64
	Bfree       uint64
	Bavail      uint64
	Bresvd      uint64
	Files       uint64
	Ffree       uint64
	Favail      uint64
	Fresvd      uint64
	Syncreads   uint64
	Syncwrites  uint64
	Asyncreads  uint64
	Asyncwrites uint64
	Fsidx       Fsid
	Fsid        uint64
	Namemax     uint64
	Owner       uint32
	Spare       [4]uint32
	Fstypename  [32]byte
	Mntonname   [1024]byte
	Mntfromname [1024]byte
	_           [4]byte
}

type Flock_t struct {
	Start  int64
	Len    int64
	Pid    int32
	Type   int16
	Whence int16
}

type Dirent struct {
	Fileno    uint64
	Reclen    uint16
	Namlen    uint16
	Type      uint8
	Name      [512]int8
	Pad_cgo_0 [3]byte
}

type Fsid struct {
	X__fsid_val [2]int32
}

const (
	PathMax = 0x400
)

const (
	ST_WAIT   = 0x1
	ST_NOWAIT = 0x2
)

const (
	FADV_NORMAL     = 0x0
	FADV_RANDOM     = 0x1
	FADV_SEQUENTIAL = 0x2
	FADV_WILLNEED   = 0x3
	FADV_DONTNEED   = 0x4
	FADV_NOREUSE    = 0x5
)

type RawSockaddrInet4 struct {
	Len    uint8
	Family uint8
	Port   uint16
	Addr   [4]byte /* in_addr */
	Zero   [8]int8
}

type RawSockaddrInet6 struct {
	Len      uint8
	Family   uint8
	Port     uint16
	Flowinfo uint32
	Addr     [16]byte /* in6_addr */
	Scope_id uint32
}

type RawSockaddrUnix struct {
	Len    uint8
	Family uint8
	Path   [104]int8
}

type RawSockaddrDatalink struct {
	Len    uint8
	Family uint8
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [12]int8
}

type RawSockaddr struct {
	Len    uint8
	Family uint8
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [92]int8
}

type _Socklen uint32

type Linger struct {
	Onoff  int32
	Linger int32
}

type Iovec struct {
	Base *byte
	Len  uint64
}

type IPMreq struct {
	Multiaddr [4]byte /* in_addr */
	Interface [4]byte /* in_addr */
}

type IPv6Mreq struct {
	Multiaddr [16]byte /* in6_addr */
	Interface uint32
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Pad_cgo_0  [4]byte
	Iov        *Iovec
	Iovlen     int32
	Pad_cgo_1  [4]byte
	Control    *byte
	Controllen uint32
	Flags      int32
}

type Cmsghdr struct {
	Len   uint32
	Level int32
	Type  int32
}

type Inet6Pktinfo struct {
	Addr    [16]byte /* in6_addr */
	Ifindex uint32
}

type IPv6MTUInfo struct {
	Addr RawSockaddrInet6
	Mtu  uint32
}

type ICMPv6Filter struct {
	Filt [8]uint32
}

const (
	SizeofSockaddrInet4    = 0x10
	SizeofSockaddrInet6    = 0x1c
	SizeofSockaddrAny      = 0x6c
	SizeofSockaddrUnix     = 0x6a
	SizeofSockaddrDatalink = 0x14
	SizeofLinger           = 0x8
	SizeofIovec            = 0x10
	SizeofIPMreq           = 0x8
	SizeofIPv6Mreq         = 0x14
	SizeofMsghdr           = 0x30
	SizeofCmsghdr          = 0xc
	SizeofInet6Pktinfo     = 0x14
	SizeofIPv6MTUInfo      = 0x20
	SizeofICMPv6Filter     = 0x20
)

const (
	PTRACE_TRACEME = 0x0
	PTRACE_CONT    = 0x7
	PTRACE_KILL    = 0x8
)

type Kevent_t struct {
	Ident     uint64
	Filter    uint32
	Flags     uint32
	Fflags    uint32
	Pad_cgo_0 [4]byte
	Data      int64
	Udata     int64
}

type FdSet struct {
	Bits [8]uint32
}

const (
	SizeofIfMsghdr         = 0x98
	SizeofIfData           = 0x88
	SizeofIfaMsghdr        = 0x18
	SizeofIfAnnounceMsghdr = 0x18
	SizeofRtMsghdr         = 0x78
	SizeofRtMetrics        = 0x50
)

type IfMsghdr struct {
	Msglen    uint16
	Version   uint8
	Type      uint8
	Addrs     int32
	Flags     int32
	Index     uint16
	Pad_cgo_0 [2]byte
	Data      IfData
}

type IfData struct {
	Type       uint8
	Addrlen    uint8
	Hdrlen     uint8
	Pad_cgo_0  [1]byte
	Link_state int32
	Mtu        uint64
	Metric     uint64
	Baudrate   uint64
	Ipackets   uint64
	Ierrors    uint64
	Opackets   uint64
	Oerrors    uint64
	Collisions uint64
	Ibytes     uint64
	Obytes     uint64
	Imcasts    uint64
	Omcasts    uint64
	Iqdrops    uint64
	Noproto    uint64
	Lastchange Timespec
}

type IfaMsghdr struct {
	Msglen    uint16
	Version   uint8
	Type      uint8
	Addrs     int32
	Flags     int32
	Metric    int32
	Index     uint16
	Pad_cgo_0 [6]byte
}

type IfAnnounceMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Index   uint16
	Name    [16]int8
	What    uint16
}

type RtMsghdr struct {
	Msglen    uint16
	Version   uint8
	Type      uint8
	Index     uint16
	Pad_cgo_0 [2]byte
	Flags     int32
	Addrs     int32
	Pid       int32
	Seq       int32
	Errno     int32
	Use       int32
	Inits     int32
	Pad_cgo_1 [4]byte
	Rmx       RtMetrics
}

type RtMetrics struct {
	Locks    uint64
	Mtu      uint64
	Hopcount uint64
	Recvpipe uint64
	Sendpipe uint64
	Ssthresh uint64
	Rtt      uint64
	Rttvar   uint64
	Expire   int64
	Pksent   int64
}

type Mclpool [0]byte

const (
	SizeofBpfVersion = 0x4
	SizeofBpfStat    = 0x80
	SizeofBpfProgram = 0x10
	SizeofBpfInsn    = 0x8
	SizeofBpfHdr     = 0x20
)

type BpfVersion struct {
	Major uint16
	Minor uint16
}

type BpfStat struct {
	Recv    uint64
	Drop    uint64
	Capt    uint64
	Padding [13]uint64
}

type BpfProgram struct {
	Len       uint32
	Pad_cgo_0 [4]byte
	Insns     *BpfInsn
}

type BpfInsn struct {
	Code uint16
	Jt   uint8
	Jf   uint8
	K    uint32
}

type BpfHdr struct {
	Tstamp    BpfTimeval
	Caplen    uint32
	Datalen   uint32
	Hdrlen    uint16
	Pad_cgo_0 [6]byte
}

type BpfTimeval struct {
	Sec  int64
	Usec int64
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Cc     [20]uint8
	Ispeed int32
	Ospeed int32
}

type Winsize struct {
	Row    uint16
	Col    uint16
	Xpixel uint16
	Ypixel uint16
}

type Ptmget struct {
	Cfd int32
	Sfd int32
	Cn  [1024]byte
	Sn  [1024]byte
}

const (
	AT_FDCWD            = -0x64
	AT_EACCESS          = 0x100
	AT_SYMLINK_NOFOLLOW = 0x200
	AT_SYMLINK_FOLLOW   = 0x400
	AT_REMOVEDIR        = 0x800
)

type PollFd struct {
	Fd      int32
	Events  int16
	Revents int16
}

const (
	POLLERR    = 0x8
	POLLHUP    = 0x10
	POLLIN     = 0x1
	POLLNVAL   = 0x20
	POLLOUT    = 0x4
	POLLPRI    = 0x2
	POLLRDBAND = 0x80
	POLLRDNORM = 0x40
	POLLWRBAND = 0x100
	POLLWRNORM = 0x4
)

type Sysctlnode struct {
	Flags           uint32
	Num             int32
	Name            [32]int8
	Ver             uint32
	X__rsvd         uint32
	Un              [16]byte
	X_sysctl_size   [8]byte
	X_sysctl_func   [8]byte
	X_sysctl_parent [8]byte
	X_sysctl_desc   [8]byte
}

type Utsname struct {
	Sysname  [256]byte
	Nodename [256]byte
	Release  [256]byte
	Version  [256]byte
	Machine  [256]byte
}

const SizeofUvmexp = 0x278

type Uvmexp struct {
	Pagesize           int64
	Pagemask           int64
	Pageshift          int64
	Npages             int64
	Free               int64
	Active             int64
	Inactive           int64
	Paging             int64
	Wired              int64
	Zeropages          int64
	Reserve_pagedaemon int64
	Reserve_kernel     int64
	Freemin            int64
	Freetarg           int64
	Inactarg           int64
	Wiredmax           int64
	Nswapdev           int64
	Swpages            int64
	Swpginuse          int64
	Swpgonly           int64
	Nswget             int64
	Unused1            int64
	Cpuhit             int64
	Cpumiss            int64
	Faults             int64
	Traps              int64
	Intrs              int64
	Swtch              int64
	Softs              int64
	Syscalls           int64
	Pageins            int64
	Swapins            int64
	Swapouts           int64
	Pgswapin           int64
	Pgswapout          int64
	Forks              int64
	Forks_ppwait       int64
	Forks_sharevm      int64
	Pga_zerohit        int64
	Pga_zeromiss       int64
	Zeroaborts         int64
	Fltnoram           int64
	Fltnoanon          int64
	Fltpgwait          int64
	Fltpgrele          int64
	Fltrelck           int64
	Fltrelckok         int64
	Fltanget           int64
	Fltanretry         int64
	Fltamcopy          int64
	Fltnamap           int64
	Fltnomap           int64
	Fltlget            int64
	Fltget             int64
	Flt_anon           int64
	Flt_acow           int64
	Flt_obj            int64
	Flt_prcopy         int64
	Flt_przero         int64
	Pdwoke             int64
	Pdrevs             int64
	Unused4            int64
	Pdfreed            int64
	Pdscans            int64
	Pdanscan           int64
	Pdobscan           int64
	Pdreact            int64
	Pdbusy             int64
	Pdpageouts         int64
	Pdpending          int64
	Pddeact            int64
	Anonpages          int64
	Filepages          int64
	Execpages          int64
	Colorhit           int64
	Colormiss          int64
	Ncolors            int64
	Bootpages          int64
	Poolpages          int64
}

const SizeofClockinfo = 0x14

type Clockinfo struct {
	Hz      int32
	Tick    int32
	Tickadj int32
	Stathz  int32
	Profhz  int32
}
07070100000EC7000081A4000000000000000000000001645E367C0000250D000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go    // cgo -godefs types_openbsd.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build 386 && openbsd
// +build 386,openbsd

package unix

const (
	SizeofPtr      = 0x4
	SizeofShort    = 0x2
	SizeofInt      = 0x4
	SizeofLong     = 0x4
	SizeofLongLong = 0x8
)

type (
	_C_short     int16
	_C_int       int32
	_C_long      int32
	_C_long_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int32
}

type Timeval struct {
	Sec  int64
	Usec int32
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int32
	Ixrss    int32
	Idrss    int32
	Isrss    int32
	Minflt   int32
	Majflt   int32
	Nswap    int32
	Inblock  int32
	Oublock  int32
	Msgsnd   int32
	Msgrcv   int32
	Nsignals int32
	Nvcsw    int32
	Nivcsw   int32
}

type Rlimit struct {
	Cur uint64
	Max uint64
}

type _Gid_t uint32

type Stat_t struct {
	Mode    uint32
	Dev     int32
	Ino     uint64
	Nlink   uint32
	Uid     uint32
	Gid     uint32
	Rdev    int32
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	Size    int64
	Blocks  int64
	Blksize int32
	Flags   uint32
	Gen     uint32
	_       Timespec
}

type Statfs_t struct {
	F_flags       uint32
	F_bsize       uint32
	F_iosize      uint32
	F_blocks      uint64
	F_bfree       uint64
	F_bavail      int64
	F_files       uint64
	F_ffree       uint64
	F_favail      int64
	F_syncwrites  uint64
	F_syncreads   uint64
	F_asyncwrites uint64
	F_asyncreads  uint64
	F_fsid        Fsid
	F_namemax     uint32
	F_owner       uint32
	F_ctime       uint64
	F_fstypename  [16]byte
	F_mntonname   [90]byte
	F_mntfromname [90]byte
	F_mntfromspec [90]byte
	_             [2]byte
	Mount_info    [160]byte
}

type Flock_t struct {
	Start  int64
	Len    int64
	Pid    int32
	Type   int16
	Whence int16
}

type Dirent struct {
	Fileno uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Namlen uint8
	_      [4]uint8
	Name   [256]int8
}

type Fsid struct {
	Val [2]int32
}

const (
	PathMax = 0x400
)

type RawSockaddrInet4 struct {
	Len    uint8
	Family uint8
	Port   uint16
	Addr   [4]byte /* in_addr */
	Zero   [8]int8
}

type RawSockaddrInet6 struct {
	Len      uint8
	Family   uint8
	Port     uint16
	Flowinfo uint32
	Addr     [16]byte /* in6_addr */
	Scope_id uint32
}

type RawSockaddrUnix struct {
	Len    uint8
	Family uint8
	Path   [104]int8
}

type RawSockaddrDatalink struct {
	Len    uint8
	Family uint8
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [24]int8
}

type RawSockaddr struct {
	Len    uint8
	Family uint8
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [92]int8
}

type _Socklen uint32

type Linger struct {
	Onoff  int32
	Linger int32
}

type Iovec struct {
	Base *byte
	Len  uint32
}

type IPMreq struct {
	Multiaddr [4]byte /* in_addr */
	Interface [4]byte /* in_addr */
}

type IPv6Mreq struct {
	Multiaddr [16]byte /* in6_addr */
	Interface uint32
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     uint32
	Control    *byte
	Controllen uint32
	Flags      int32
}

type Cmsghdr struct {
	Len   uint32
	Level int32
	Type  int32
}

type Inet6Pktinfo struct {
	Addr    [16]byte /* in6_addr */
	Ifindex uint32
}

type IPv6MTUInfo struct {
	Addr RawSockaddrInet6
	Mtu  uint32
}

type ICMPv6Filter struct {
	Filt [8]uint32
}

const (
	SizeofSockaddrInet4    = 0x10
	SizeofSockaddrInet6    = 0x1c
	SizeofSockaddrAny      = 0x6c
	SizeofSockaddrUnix     = 0x6a
	SizeofSockaddrDatalink = 0x20
	SizeofLinger           = 0x8
	SizeofIovec            = 0x8
	SizeofIPMreq           = 0x8
	SizeofIPv6Mreq         = 0x14
	SizeofMsghdr           = 0x1c
	SizeofCmsghdr          = 0xc
	SizeofInet6Pktinfo     = 0x14
	SizeofIPv6MTUInfo      = 0x20
	SizeofICMPv6Filter     = 0x20
)

const (
	PTRACE_TRACEME = 0x0
	PTRACE_CONT    = 0x7
	PTRACE_KILL    = 0x8
)

type Kevent_t struct {
	Ident  uint32
	Filter int16
	Flags  uint16
	Fflags uint32
	Data   int64
	Udata  *byte
}

type FdSet struct {
	Bits [32]uint32
}

const (
	SizeofIfMsghdr         = 0xa0
	SizeofIfData           = 0x88
	SizeofIfaMsghdr        = 0x18
	SizeofIfAnnounceMsghdr = 0x1a
	SizeofRtMsghdr         = 0x60
	SizeofRtMetrics        = 0x38
)

type IfMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Hdrlen  uint16
	Index   uint16
	Tableid uint16
	Pad1    uint8
	Pad2    uint8
	Addrs   int32
	Flags   int32
	Xflags  int32
	Data    IfData
}

type IfData struct {
	Type         uint8
	Addrlen      uint8
	Hdrlen       uint8
	Link_state   uint8
	Mtu          uint32
	Metric       uint32
	Rdomain      uint32
	Baudrate     uint64
	Ipackets     uint64
	Ierrors      uint64
	Opackets     uint64
	Oerrors      uint64
	Collisions   uint64
	Ibytes       uint64
	Obytes       uint64
	Imcasts      uint64
	Omcasts      uint64
	Iqdrops      uint64
	Oqdrops      uint64
	Noproto      uint64
	Capabilities uint32
	Lastchange   Timeval
}

type IfaMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Hdrlen  uint16
	Index   uint16
	Tableid uint16
	Pad1    uint8
	Pad2    uint8
	Addrs   int32
	Flags   int32
	Metric  int32
}

type IfAnnounceMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Hdrlen  uint16
	Index   uint16
	What    uint16
	Name    [16]int8
}

type RtMsghdr struct {
	Msglen   uint16
	Version  uint8
	Type     uint8
	Hdrlen   uint16
	Index    uint16
	Tableid  uint16
	Priority uint8
	Mpls     uint8
	Addrs    int32
	Flags    int32
	Fmask    int32
	Pid      int32
	Seq      int32
	Errno    int32
	Inits    uint32
	Rmx      RtMetrics
}

type RtMetrics struct {
	Pksent   uint64
	Expire   int64
	Locks    uint32
	Mtu      uint32
	Refcnt   uint32
	Hopcount uint32
	Recvpipe uint32
	Sendpipe uint32
	Ssthresh uint32
	Rtt      uint32
	Rttvar   uint32
	Pad      uint32
}

const (
	SizeofBpfVersion = 0x4
	SizeofBpfStat    = 0x8
	SizeofBpfProgram = 0x8
	SizeofBpfInsn    = 0x8
	SizeofBpfHdr     = 0x18
)

type BpfVersion struct {
	Major uint16
	Minor uint16
}

type BpfStat struct {
	Recv uint32
	Drop uint32
}

type BpfProgram struct {
	Len   uint32
	Insns *BpfInsn
}

type BpfInsn struct {
	Code uint16
	Jt   uint8
	Jf   uint8
	K    uint32
}

type BpfHdr struct {
	Tstamp  BpfTimeval
	Caplen  uint32
	Datalen uint32
	Hdrlen  uint16
	Ifidx   uint16
	Flowid  uint16
	Flags   uint8
	Drops   uint8
}

type BpfTimeval struct {
	Sec  uint32
	Usec uint32
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Cc     [20]uint8
	Ispeed int32
	Ospeed int32
}

type Winsize struct {
	Row    uint16
	Col    uint16
	Xpixel uint16
	Ypixel uint16
}

const (
	AT_FDCWD            = -0x64
	AT_EACCESS          = 0x1
	AT_SYMLINK_NOFOLLOW = 0x2
	AT_SYMLINK_FOLLOW   = 0x4
	AT_REMOVEDIR        = 0x8
)

type PollFd struct {
	Fd      int32
	Events  int16
	Revents int16
}

const (
	POLLERR    = 0x8
	POLLHUP    = 0x10
	POLLIN     = 0x1
	POLLNVAL   = 0x20
	POLLOUT    = 0x4
	POLLPRI    = 0x2
	POLLRDBAND = 0x80
	POLLRDNORM = 0x40
	POLLWRBAND = 0x100
	POLLWRNORM = 0x4
)

type Sigset_t uint32

type Utsname struct {
	Sysname  [256]byte
	Nodename [256]byte
	Release  [256]byte
	Version  [256]byte
	Machine  [256]byte
}

const SizeofUvmexp = 0x158

type Uvmexp struct {
	Pagesize           int32
	Pagemask           int32
	Pageshift          int32
	Npages             int32
	Free               int32
	Active             int32
	Inactive           int32
	Paging             int32
	Wired              int32
	Zeropages          int32
	Reserve_pagedaemon int32
	Reserve_kernel     int32
	Unused01           int32
	Vnodepages         int32
	Vtextpages         int32
	Freemin            int32
	Freetarg           int32
	Inactarg           int32
	Wiredmax           int32
	Anonmin            int32
	Vtextmin           int32
	Vnodemin           int32
	Anonminpct         int32
	Vtextminpct        int32
	Vnodeminpct        int32
	Nswapdev           int32
	Swpages            int32
	Swpginuse          int32
	Swpgonly           int32
	Nswget             int32
	Nanon              int32
	Unused05           int32
	Unused06           int32
	Faults             int32
	Traps              int32
	Intrs              int32
	Swtch              int32
	Softs              int32
	Syscalls           int32
	Pageins            int32
	Unused07           int32
	Unused08           int32
	Pgswapin           int32
	Pgswapout          int32
	Forks              int32
	Forks_ppwait       int32
	Forks_sharevm      int32
	Pga_zerohit        int32
	Pga_zeromiss       int32
	Unused09           int32
	Fltnoram           int32
	Fltnoanon          int32
	Fltnoamap          int32
	Fltpgwait          int32
	Fltpgrele          int32
	Fltrelck           int32
	Fltrelckok         int32
	Fltanget           int32
	Fltanretry         int32
	Fltamcopy          int32
	Fltnamap           int32
	Fltnomap           int32
	Fltlget            int32
	Fltget             int32
	Flt_anon           int32
	Flt_acow           int32
	Flt_obj            int32
	Flt_prcopy         int32
	Flt_przero         int32
	Pdwoke             int32
	Pdrevs             int32
	Pdswout            int32
	Pdfreed            int32
	Pdscans            int32
	Pdanscan           int32
	Pdobscan           int32
	Pdreact            int32
	Pdbusy             int32
	Pdpageouts         int32
	Pdpending          int32
	Pddeact            int32
	Unused11           int32
	Unused12           int32
	Unused13           int32
	Fpswtch            int32
	Kmapent            int32
}

const SizeofClockinfo = 0x10

type Clockinfo struct {
	Hz     int32
	Tick   int32
	Stathz int32
	Profhz int32
}
   07070100000EC8000081A4000000000000000000000001645E367C00002513000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go  // cgo -godefs types_openbsd.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build amd64 && openbsd
// +build amd64,openbsd

package unix

const (
	SizeofPtr      = 0x8
	SizeofShort    = 0x2
	SizeofInt      = 0x4
	SizeofLong     = 0x8
	SizeofLongLong = 0x8
)

type (
	_C_short     int16
	_C_int       int32
	_C_long      int64
	_C_long_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int64
}

type Timeval struct {
	Sec  int64
	Usec int64
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int64
	Ixrss    int64
	Idrss    int64
	Isrss    int64
	Minflt   int64
	Majflt   int64
	Nswap    int64
	Inblock  int64
	Oublock  int64
	Msgsnd   int64
	Msgrcv   int64
	Nsignals int64
	Nvcsw    int64
	Nivcsw   int64
}

type Rlimit struct {
	Cur uint64
	Max uint64
}

type _Gid_t uint32

type Stat_t struct {
	Mode    uint32
	Dev     int32
	Ino     uint64
	Nlink   uint32
	Uid     uint32
	Gid     uint32
	Rdev    int32
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	Size    int64
	Blocks  int64
	Blksize int32
	Flags   uint32
	Gen     uint32
	_       Timespec
}

type Statfs_t struct {
	F_flags       uint32
	F_bsize       uint32
	F_iosize      uint32
	F_blocks      uint64
	F_bfree       uint64
	F_bavail      int64
	F_files       uint64
	F_ffree       uint64
	F_favail      int64
	F_syncwrites  uint64
	F_syncreads   uint64
	F_asyncwrites uint64
	F_asyncreads  uint64
	F_fsid        Fsid
	F_namemax     uint32
	F_owner       uint32
	F_ctime       uint64
	F_fstypename  [16]byte
	F_mntonname   [90]byte
	F_mntfromname [90]byte
	F_mntfromspec [90]byte
	_             [2]byte
	Mount_info    [160]byte
}

type Flock_t struct {
	Start  int64
	Len    int64
	Pid    int32
	Type   int16
	Whence int16
}

type Dirent struct {
	Fileno uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Namlen uint8
	_      [4]uint8
	Name   [256]int8
}

type Fsid struct {
	Val [2]int32
}

const (
	PathMax = 0x400
)

type RawSockaddrInet4 struct {
	Len    uint8
	Family uint8
	Port   uint16
	Addr   [4]byte /* in_addr */
	Zero   [8]int8
}

type RawSockaddrInet6 struct {
	Len      uint8
	Family   uint8
	Port     uint16
	Flowinfo uint32
	Addr     [16]byte /* in6_addr */
	Scope_id uint32
}

type RawSockaddrUnix struct {
	Len    uint8
	Family uint8
	Path   [104]int8
}

type RawSockaddrDatalink struct {
	Len    uint8
	Family uint8
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [24]int8
}

type RawSockaddr struct {
	Len    uint8
	Family uint8
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [92]int8
}

type _Socklen uint32

type Linger struct {
	Onoff  int32
	Linger int32
}

type Iovec struct {
	Base *byte
	Len  uint64
}

type IPMreq struct {
	Multiaddr [4]byte /* in_addr */
	Interface [4]byte /* in_addr */
}

type IPv6Mreq struct {
	Multiaddr [16]byte /* in6_addr */
	Interface uint32
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     uint32
	Control    *byte
	Controllen uint32
	Flags      int32
}

type Cmsghdr struct {
	Len   uint32
	Level int32
	Type  int32
}

type Inet6Pktinfo struct {
	Addr    [16]byte /* in6_addr */
	Ifindex uint32
}

type IPv6MTUInfo struct {
	Addr RawSockaddrInet6
	Mtu  uint32
}

type ICMPv6Filter struct {
	Filt [8]uint32
}

const (
	SizeofSockaddrInet4    = 0x10
	SizeofSockaddrInet6    = 0x1c
	SizeofSockaddrAny      = 0x6c
	SizeofSockaddrUnix     = 0x6a
	SizeofSockaddrDatalink = 0x20
	SizeofLinger           = 0x8
	SizeofIovec            = 0x10
	SizeofIPMreq           = 0x8
	SizeofIPv6Mreq         = 0x14
	SizeofMsghdr           = 0x30
	SizeofCmsghdr          = 0xc
	SizeofInet6Pktinfo     = 0x14
	SizeofIPv6MTUInfo      = 0x20
	SizeofICMPv6Filter     = 0x20
)

const (
	PTRACE_TRACEME = 0x0
	PTRACE_CONT    = 0x7
	PTRACE_KILL    = 0x8
)

type Kevent_t struct {
	Ident  uint64
	Filter int16
	Flags  uint16
	Fflags uint32
	Data   int64
	Udata  *byte
}

type FdSet struct {
	Bits [32]uint32
}

const (
	SizeofIfMsghdr         = 0xa8
	SizeofIfData           = 0x90
	SizeofIfaMsghdr        = 0x18
	SizeofIfAnnounceMsghdr = 0x1a
	SizeofRtMsghdr         = 0x60
	SizeofRtMetrics        = 0x38
)

type IfMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Hdrlen  uint16
	Index   uint16
	Tableid uint16
	Pad1    uint8
	Pad2    uint8
	Addrs   int32
	Flags   int32
	Xflags  int32
	Data    IfData
}

type IfData struct {
	Type         uint8
	Addrlen      uint8
	Hdrlen       uint8
	Link_state   uint8
	Mtu          uint32
	Metric       uint32
	Rdomain      uint32
	Baudrate     uint64
	Ipackets     uint64
	Ierrors      uint64
	Opackets     uint64
	Oerrors      uint64
	Collisions   uint64
	Ibytes       uint64
	Obytes       uint64
	Imcasts      uint64
	Omcasts      uint64
	Iqdrops      uint64
	Oqdrops      uint64
	Noproto      uint64
	Capabilities uint32
	Lastchange   Timeval
}

type IfaMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Hdrlen  uint16
	Index   uint16
	Tableid uint16
	Pad1    uint8
	Pad2    uint8
	Addrs   int32
	Flags   int32
	Metric  int32
}

type IfAnnounceMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Hdrlen  uint16
	Index   uint16
	What    uint16
	Name    [16]int8
}

type RtMsghdr struct {
	Msglen   uint16
	Version  uint8
	Type     uint8
	Hdrlen   uint16
	Index    uint16
	Tableid  uint16
	Priority uint8
	Mpls     uint8
	Addrs    int32
	Flags    int32
	Fmask    int32
	Pid      int32
	Seq      int32
	Errno    int32
	Inits    uint32
	Rmx      RtMetrics
}

type RtMetrics struct {
	Pksent   uint64
	Expire   int64
	Locks    uint32
	Mtu      uint32
	Refcnt   uint32
	Hopcount uint32
	Recvpipe uint32
	Sendpipe uint32
	Ssthresh uint32
	Rtt      uint32
	Rttvar   uint32
	Pad      uint32
}

const (
	SizeofBpfVersion = 0x4
	SizeofBpfStat    = 0x8
	SizeofBpfProgram = 0x10
	SizeofBpfInsn    = 0x8
	SizeofBpfHdr     = 0x18
)

type BpfVersion struct {
	Major uint16
	Minor uint16
}

type BpfStat struct {
	Recv uint32
	Drop uint32
}

type BpfProgram struct {
	Len   uint32
	Insns *BpfInsn
}

type BpfInsn struct {
	Code uint16
	Jt   uint8
	Jf   uint8
	K    uint32
}

type BpfHdr struct {
	Tstamp  BpfTimeval
	Caplen  uint32
	Datalen uint32
	Hdrlen  uint16
	Ifidx   uint16
	Flowid  uint16
	Flags   uint8
	Drops   uint8
}

type BpfTimeval struct {
	Sec  uint32
	Usec uint32
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Cc     [20]uint8
	Ispeed int32
	Ospeed int32
}

type Winsize struct {
	Row    uint16
	Col    uint16
	Xpixel uint16
	Ypixel uint16
}

const (
	AT_FDCWD            = -0x64
	AT_EACCESS          = 0x1
	AT_SYMLINK_NOFOLLOW = 0x2
	AT_SYMLINK_FOLLOW   = 0x4
	AT_REMOVEDIR        = 0x8
)

type PollFd struct {
	Fd      int32
	Events  int16
	Revents int16
}

const (
	POLLERR    = 0x8
	POLLHUP    = 0x10
	POLLIN     = 0x1
	POLLNVAL   = 0x20
	POLLOUT    = 0x4
	POLLPRI    = 0x2
	POLLRDBAND = 0x80
	POLLRDNORM = 0x40
	POLLWRBAND = 0x100
	POLLWRNORM = 0x4
)

type Sigset_t uint32

type Utsname struct {
	Sysname  [256]byte
	Nodename [256]byte
	Release  [256]byte
	Version  [256]byte
	Machine  [256]byte
}

const SizeofUvmexp = 0x158

type Uvmexp struct {
	Pagesize           int32
	Pagemask           int32
	Pageshift          int32
	Npages             int32
	Free               int32
	Active             int32
	Inactive           int32
	Paging             int32
	Wired              int32
	Zeropages          int32
	Reserve_pagedaemon int32
	Reserve_kernel     int32
	Unused01           int32
	Vnodepages         int32
	Vtextpages         int32
	Freemin            int32
	Freetarg           int32
	Inactarg           int32
	Wiredmax           int32
	Anonmin            int32
	Vtextmin           int32
	Vnodemin           int32
	Anonminpct         int32
	Vtextminpct        int32
	Vnodeminpct        int32
	Nswapdev           int32
	Swpages            int32
	Swpginuse          int32
	Swpgonly           int32
	Nswget             int32
	Nanon              int32
	Unused05           int32
	Unused06           int32
	Faults             int32
	Traps              int32
	Intrs              int32
	Swtch              int32
	Softs              int32
	Syscalls           int32
	Pageins            int32
	Unused07           int32
	Unused08           int32
	Pgswapin           int32
	Pgswapout          int32
	Forks              int32
	Forks_ppwait       int32
	Forks_sharevm      int32
	Pga_zerohit        int32
	Pga_zeromiss       int32
	Unused09           int32
	Fltnoram           int32
	Fltnoanon          int32
	Fltnoamap          int32
	Fltpgwait          int32
	Fltpgrele          int32
	Fltrelck           int32
	Fltrelckok         int32
	Fltanget           int32
	Fltanretry         int32
	Fltamcopy          int32
	Fltnamap           int32
	Fltnomap           int32
	Fltlget            int32
	Fltget             int32
	Flt_anon           int32
	Flt_acow           int32
	Flt_obj            int32
	Flt_prcopy         int32
	Flt_przero         int32
	Pdwoke             int32
	Pdrevs             int32
	Pdswout            int32
	Pdfreed            int32
	Pdscans            int32
	Pdanscan           int32
	Pdobscan           int32
	Pdreact            int32
	Pdbusy             int32
	Pdpageouts         int32
	Pdpending          int32
	Pddeact            int32
	Unused11           int32
	Unused12           int32
	Unused13           int32
	Fpswtch            int32
	Kmapent            int32
}

const SizeofClockinfo = 0x10

type Clockinfo struct {
	Hz     int32
	Tick   int32
	Stathz int32
	Profhz int32
}
 07070100000EC9000081A4000000000000000000000001645E367C00002598000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go    // cgo -godefs -- -fsigned-char types_openbsd.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build arm && openbsd
// +build arm,openbsd

package unix

const (
	SizeofPtr      = 0x4
	SizeofShort    = 0x2
	SizeofInt      = 0x4
	SizeofLong     = 0x4
	SizeofLongLong = 0x8
)

type (
	_C_short     int16
	_C_int       int32
	_C_long      int32
	_C_long_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int32
	_    [4]byte
}

type Timeval struct {
	Sec  int64
	Usec int32
	_    [4]byte
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int32
	Ixrss    int32
	Idrss    int32
	Isrss    int32
	Minflt   int32
	Majflt   int32
	Nswap    int32
	Inblock  int32
	Oublock  int32
	Msgsnd   int32
	Msgrcv   int32
	Nsignals int32
	Nvcsw    int32
	Nivcsw   int32
}

type Rlimit struct {
	Cur uint64
	Max uint64
}

type _Gid_t uint32

type Stat_t struct {
	Mode    uint32
	Dev     int32
	Ino     uint64
	Nlink   uint32
	Uid     uint32
	Gid     uint32
	Rdev    int32
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	Size    int64
	Blocks  int64
	Blksize int32
	Flags   uint32
	Gen     uint32
	_       [4]byte
	_       Timespec
}

type Statfs_t struct {
	F_flags       uint32
	F_bsize       uint32
	F_iosize      uint32
	_             [4]byte
	F_blocks      uint64
	F_bfree       uint64
	F_bavail      int64
	F_files       uint64
	F_ffree       uint64
	F_favail      int64
	F_syncwrites  uint64
	F_syncreads   uint64
	F_asyncwrites uint64
	F_asyncreads  uint64
	F_fsid        Fsid
	F_namemax     uint32
	F_owner       uint32
	F_ctime       uint64
	F_fstypename  [16]byte
	F_mntonname   [90]byte
	F_mntfromname [90]byte
	F_mntfromspec [90]byte
	_             [2]byte
	Mount_info    [160]byte
}

type Flock_t struct {
	Start  int64
	Len    int64
	Pid    int32
	Type   int16
	Whence int16
}

type Dirent struct {
	Fileno uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Namlen uint8
	_      [4]uint8
	Name   [256]int8
}

type Fsid struct {
	Val [2]int32
}

const (
	PathMax = 0x400
)

type RawSockaddrInet4 struct {
	Len    uint8
	Family uint8
	Port   uint16
	Addr   [4]byte /* in_addr */
	Zero   [8]int8
}

type RawSockaddrInet6 struct {
	Len      uint8
	Family   uint8
	Port     uint16
	Flowinfo uint32
	Addr     [16]byte /* in6_addr */
	Scope_id uint32
}

type RawSockaddrUnix struct {
	Len    uint8
	Family uint8
	Path   [104]int8
}

type RawSockaddrDatalink struct {
	Len    uint8
	Family uint8
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [24]int8
}

type RawSockaddr struct {
	Len    uint8
	Family uint8
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [92]int8
}

type _Socklen uint32

type Linger struct {
	Onoff  int32
	Linger int32
}

type Iovec struct {
	Base *byte
	Len  uint32
}

type IPMreq struct {
	Multiaddr [4]byte /* in_addr */
	Interface [4]byte /* in_addr */
}

type IPv6Mreq struct {
	Multiaddr [16]byte /* in6_addr */
	Interface uint32
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     uint32
	Control    *byte
	Controllen uint32
	Flags      int32
}

type Cmsghdr struct {
	Len   uint32
	Level int32
	Type  int32
}

type Inet6Pktinfo struct {
	Addr    [16]byte /* in6_addr */
	Ifindex uint32
}

type IPv6MTUInfo struct {
	Addr RawSockaddrInet6
	Mtu  uint32
}

type ICMPv6Filter struct {
	Filt [8]uint32
}

const (
	SizeofSockaddrInet4    = 0x10
	SizeofSockaddrInet6    = 0x1c
	SizeofSockaddrAny      = 0x6c
	SizeofSockaddrUnix     = 0x6a
	SizeofSockaddrDatalink = 0x20
	SizeofLinger           = 0x8
	SizeofIovec            = 0x8
	SizeofIPMreq           = 0x8
	SizeofIPv6Mreq         = 0x14
	SizeofMsghdr           = 0x1c
	SizeofCmsghdr          = 0xc
	SizeofInet6Pktinfo     = 0x14
	SizeofIPv6MTUInfo      = 0x20
	SizeofICMPv6Filter     = 0x20
)

const (
	PTRACE_TRACEME = 0x0
	PTRACE_CONT    = 0x7
	PTRACE_KILL    = 0x8
)

type Kevent_t struct {
	Ident  uint32
	Filter int16
	Flags  uint16
	Fflags uint32
	_      [4]byte
	Data   int64
	Udata  *byte
	_      [4]byte
}

type FdSet struct {
	Bits [32]uint32
}

const (
	SizeofIfMsghdr         = 0xa8
	SizeofIfData           = 0x90
	SizeofIfaMsghdr        = 0x18
	SizeofIfAnnounceMsghdr = 0x1a
	SizeofRtMsghdr         = 0x60
	SizeofRtMetrics        = 0x38
)

type IfMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Hdrlen  uint16
	Index   uint16
	Tableid uint16
	Pad1    uint8
	Pad2    uint8
	Addrs   int32
	Flags   int32
	Xflags  int32
	Data    IfData
}

type IfData struct {
	Type         uint8
	Addrlen      uint8
	Hdrlen       uint8
	Link_state   uint8
	Mtu          uint32
	Metric       uint32
	Rdomain      uint32
	Baudrate     uint64
	Ipackets     uint64
	Ierrors      uint64
	Opackets     uint64
	Oerrors      uint64
	Collisions   uint64
	Ibytes       uint64
	Obytes       uint64
	Imcasts      uint64
	Omcasts      uint64
	Iqdrops      uint64
	Oqdrops      uint64
	Noproto      uint64
	Capabilities uint32
	_            [4]byte
	Lastchange   Timeval
}

type IfaMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Hdrlen  uint16
	Index   uint16
	Tableid uint16
	Pad1    uint8
	Pad2    uint8
	Addrs   int32
	Flags   int32
	Metric  int32
}

type IfAnnounceMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Hdrlen  uint16
	Index   uint16
	What    uint16
	Name    [16]int8
}

type RtMsghdr struct {
	Msglen   uint16
	Version  uint8
	Type     uint8
	Hdrlen   uint16
	Index    uint16
	Tableid  uint16
	Priority uint8
	Mpls     uint8
	Addrs    int32
	Flags    int32
	Fmask    int32
	Pid      int32
	Seq      int32
	Errno    int32
	Inits    uint32
	Rmx      RtMetrics
}

type RtMetrics struct {
	Pksent   uint64
	Expire   int64
	Locks    uint32
	Mtu      uint32
	Refcnt   uint32
	Hopcount uint32
	Recvpipe uint32
	Sendpipe uint32
	Ssthresh uint32
	Rtt      uint32
	Rttvar   uint32
	Pad      uint32
}

const (
	SizeofBpfVersion = 0x4
	SizeofBpfStat    = 0x8
	SizeofBpfProgram = 0x8
	SizeofBpfInsn    = 0x8
	SizeofBpfHdr     = 0x18
)

type BpfVersion struct {
	Major uint16
	Minor uint16
}

type BpfStat struct {
	Recv uint32
	Drop uint32
}

type BpfProgram struct {
	Len   uint32
	Insns *BpfInsn
}

type BpfInsn struct {
	Code uint16
	Jt   uint8
	Jf   uint8
	K    uint32
}

type BpfHdr struct {
	Tstamp  BpfTimeval
	Caplen  uint32
	Datalen uint32
	Hdrlen  uint16
	Ifidx   uint16
	Flowid  uint16
	Flags   uint8
	Drops   uint8
}

type BpfTimeval struct {
	Sec  uint32
	Usec uint32
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Cc     [20]uint8
	Ispeed int32
	Ospeed int32
}

type Winsize struct {
	Row    uint16
	Col    uint16
	Xpixel uint16
	Ypixel uint16
}

const (
	AT_FDCWD            = -0x64
	AT_EACCESS          = 0x1
	AT_SYMLINK_NOFOLLOW = 0x2
	AT_SYMLINK_FOLLOW   = 0x4
	AT_REMOVEDIR        = 0x8
)

type PollFd struct {
	Fd      int32
	Events  int16
	Revents int16
}

const (
	POLLERR    = 0x8
	POLLHUP    = 0x10
	POLLIN     = 0x1
	POLLNVAL   = 0x20
	POLLOUT    = 0x4
	POLLPRI    = 0x2
	POLLRDBAND = 0x80
	POLLRDNORM = 0x40
	POLLWRBAND = 0x100
	POLLWRNORM = 0x4
)

type Sigset_t uint32

type Utsname struct {
	Sysname  [256]byte
	Nodename [256]byte
	Release  [256]byte
	Version  [256]byte
	Machine  [256]byte
}

const SizeofUvmexp = 0x158

type Uvmexp struct {
	Pagesize           int32
	Pagemask           int32
	Pageshift          int32
	Npages             int32
	Free               int32
	Active             int32
	Inactive           int32
	Paging             int32
	Wired              int32
	Zeropages          int32
	Reserve_pagedaemon int32
	Reserve_kernel     int32
	Unused01           int32
	Vnodepages         int32
	Vtextpages         int32
	Freemin            int32
	Freetarg           int32
	Inactarg           int32
	Wiredmax           int32
	Anonmin            int32
	Vtextmin           int32
	Vnodemin           int32
	Anonminpct         int32
	Vtextminpct        int32
	Vnodeminpct        int32
	Nswapdev           int32
	Swpages            int32
	Swpginuse          int32
	Swpgonly           int32
	Nswget             int32
	Nanon              int32
	Unused05           int32
	Unused06           int32
	Faults             int32
	Traps              int32
	Intrs              int32
	Swtch              int32
	Softs              int32
	Syscalls           int32
	Pageins            int32
	Unused07           int32
	Unused08           int32
	Pgswapin           int32
	Pgswapout          int32
	Forks              int32
	Forks_ppwait       int32
	Forks_sharevm      int32
	Pga_zerohit        int32
	Pga_zeromiss       int32
	Unused09           int32
	Fltnoram           int32
	Fltnoanon          int32
	Fltnoamap          int32
	Fltpgwait          int32
	Fltpgrele          int32
	Fltrelck           int32
	Fltrelckok         int32
	Fltanget           int32
	Fltanretry         int32
	Fltamcopy          int32
	Fltnamap           int32
	Fltnomap           int32
	Fltlget            int32
	Fltget             int32
	Flt_anon           int32
	Flt_acow           int32
	Flt_obj            int32
	Flt_prcopy         int32
	Flt_przero         int32
	Pdwoke             int32
	Pdrevs             int32
	Pdswout            int32
	Pdfreed            int32
	Pdscans            int32
	Pdanscan           int32
	Pdobscan           int32
	Pdreact            int32
	Pdbusy             int32
	Pdpageouts         int32
	Pdpending          int32
	Pddeact            int32
	Unused11           int32
	Unused12           int32
	Unused13           int32
	Fpswtch            int32
	Kmapent            int32
}

const SizeofClockinfo = 0x10

type Clockinfo struct {
	Hz     int32
	Tick   int32
	Stathz int32
	Profhz int32
}
07070100000ECA000081A4000000000000000000000001645E367C00002524000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go  // cgo -godefs -- -fsigned-char types_openbsd.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build arm64 && openbsd
// +build arm64,openbsd

package unix

const (
	SizeofPtr      = 0x8
	SizeofShort    = 0x2
	SizeofInt      = 0x4
	SizeofLong     = 0x8
	SizeofLongLong = 0x8
)

type (
	_C_short     int16
	_C_int       int32
	_C_long      int64
	_C_long_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int64
}

type Timeval struct {
	Sec  int64
	Usec int64
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int64
	Ixrss    int64
	Idrss    int64
	Isrss    int64
	Minflt   int64
	Majflt   int64
	Nswap    int64
	Inblock  int64
	Oublock  int64
	Msgsnd   int64
	Msgrcv   int64
	Nsignals int64
	Nvcsw    int64
	Nivcsw   int64
}

type Rlimit struct {
	Cur uint64
	Max uint64
}

type _Gid_t uint32

type Stat_t struct {
	Mode    uint32
	Dev     int32
	Ino     uint64
	Nlink   uint32
	Uid     uint32
	Gid     uint32
	Rdev    int32
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	Size    int64
	Blocks  int64
	Blksize int32
	Flags   uint32
	Gen     uint32
	_       Timespec
}

type Statfs_t struct {
	F_flags       uint32
	F_bsize       uint32
	F_iosize      uint32
	F_blocks      uint64
	F_bfree       uint64
	F_bavail      int64
	F_files       uint64
	F_ffree       uint64
	F_favail      int64
	F_syncwrites  uint64
	F_syncreads   uint64
	F_asyncwrites uint64
	F_asyncreads  uint64
	F_fsid        Fsid
	F_namemax     uint32
	F_owner       uint32
	F_ctime       uint64
	F_fstypename  [16]byte
	F_mntonname   [90]byte
	F_mntfromname [90]byte
	F_mntfromspec [90]byte
	_             [2]byte
	Mount_info    [160]byte
}

type Flock_t struct {
	Start  int64
	Len    int64
	Pid    int32
	Type   int16
	Whence int16
}

type Dirent struct {
	Fileno uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Namlen uint8
	_      [4]uint8
	Name   [256]int8
}

type Fsid struct {
	Val [2]int32
}

const (
	PathMax = 0x400
)

type RawSockaddrInet4 struct {
	Len    uint8
	Family uint8
	Port   uint16
	Addr   [4]byte /* in_addr */
	Zero   [8]int8
}

type RawSockaddrInet6 struct {
	Len      uint8
	Family   uint8
	Port     uint16
	Flowinfo uint32
	Addr     [16]byte /* in6_addr */
	Scope_id uint32
}

type RawSockaddrUnix struct {
	Len    uint8
	Family uint8
	Path   [104]int8
}

type RawSockaddrDatalink struct {
	Len    uint8
	Family uint8
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [24]int8
}

type RawSockaddr struct {
	Len    uint8
	Family uint8
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [92]int8
}

type _Socklen uint32

type Linger struct {
	Onoff  int32
	Linger int32
}

type Iovec struct {
	Base *byte
	Len  uint64
}

type IPMreq struct {
	Multiaddr [4]byte /* in_addr */
	Interface [4]byte /* in_addr */
}

type IPv6Mreq struct {
	Multiaddr [16]byte /* in6_addr */
	Interface uint32
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     uint32
	Control    *byte
	Controllen uint32
	Flags      int32
}

type Cmsghdr struct {
	Len   uint32
	Level int32
	Type  int32
}

type Inet6Pktinfo struct {
	Addr    [16]byte /* in6_addr */
	Ifindex uint32
}

type IPv6MTUInfo struct {
	Addr RawSockaddrInet6
	Mtu  uint32
}

type ICMPv6Filter struct {
	Filt [8]uint32
}

const (
	SizeofSockaddrInet4    = 0x10
	SizeofSockaddrInet6    = 0x1c
	SizeofSockaddrAny      = 0x6c
	SizeofSockaddrUnix     = 0x6a
	SizeofSockaddrDatalink = 0x20
	SizeofLinger           = 0x8
	SizeofIovec            = 0x10
	SizeofIPMreq           = 0x8
	SizeofIPv6Mreq         = 0x14
	SizeofMsghdr           = 0x30
	SizeofCmsghdr          = 0xc
	SizeofInet6Pktinfo     = 0x14
	SizeofIPv6MTUInfo      = 0x20
	SizeofICMPv6Filter     = 0x20
)

const (
	PTRACE_TRACEME = 0x0
	PTRACE_CONT    = 0x7
	PTRACE_KILL    = 0x8
)

type Kevent_t struct {
	Ident  uint64
	Filter int16
	Flags  uint16
	Fflags uint32
	Data   int64
	Udata  *byte
}

type FdSet struct {
	Bits [32]uint32
}

const (
	SizeofIfMsghdr         = 0xa8
	SizeofIfData           = 0x90
	SizeofIfaMsghdr        = 0x18
	SizeofIfAnnounceMsghdr = 0x1a
	SizeofRtMsghdr         = 0x60
	SizeofRtMetrics        = 0x38
)

type IfMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Hdrlen  uint16
	Index   uint16
	Tableid uint16
	Pad1    uint8
	Pad2    uint8
	Addrs   int32
	Flags   int32
	Xflags  int32
	Data    IfData
}

type IfData struct {
	Type         uint8
	Addrlen      uint8
	Hdrlen       uint8
	Link_state   uint8
	Mtu          uint32
	Metric       uint32
	Rdomain      uint32
	Baudrate     uint64
	Ipackets     uint64
	Ierrors      uint64
	Opackets     uint64
	Oerrors      uint64
	Collisions   uint64
	Ibytes       uint64
	Obytes       uint64
	Imcasts      uint64
	Omcasts      uint64
	Iqdrops      uint64
	Oqdrops      uint64
	Noproto      uint64
	Capabilities uint32
	Lastchange   Timeval
}

type IfaMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Hdrlen  uint16
	Index   uint16
	Tableid uint16
	Pad1    uint8
	Pad2    uint8
	Addrs   int32
	Flags   int32
	Metric  int32
}

type IfAnnounceMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Hdrlen  uint16
	Index   uint16
	What    uint16
	Name    [16]int8
}

type RtMsghdr struct {
	Msglen   uint16
	Version  uint8
	Type     uint8
	Hdrlen   uint16
	Index    uint16
	Tableid  uint16
	Priority uint8
	Mpls     uint8
	Addrs    int32
	Flags    int32
	Fmask    int32
	Pid      int32
	Seq      int32
	Errno    int32
	Inits    uint32
	Rmx      RtMetrics
}

type RtMetrics struct {
	Pksent   uint64
	Expire   int64
	Locks    uint32
	Mtu      uint32
	Refcnt   uint32
	Hopcount uint32
	Recvpipe uint32
	Sendpipe uint32
	Ssthresh uint32
	Rtt      uint32
	Rttvar   uint32
	Pad      uint32
}

const (
	SizeofBpfVersion = 0x4
	SizeofBpfStat    = 0x8
	SizeofBpfProgram = 0x10
	SizeofBpfInsn    = 0x8
	SizeofBpfHdr     = 0x18
)

type BpfVersion struct {
	Major uint16
	Minor uint16
}

type BpfStat struct {
	Recv uint32
	Drop uint32
}

type BpfProgram struct {
	Len   uint32
	Insns *BpfInsn
}

type BpfInsn struct {
	Code uint16
	Jt   uint8
	Jf   uint8
	K    uint32
}

type BpfHdr struct {
	Tstamp  BpfTimeval
	Caplen  uint32
	Datalen uint32
	Hdrlen  uint16
	Ifidx   uint16
	Flowid  uint16
	Flags   uint8
	Drops   uint8
}

type BpfTimeval struct {
	Sec  uint32
	Usec uint32
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Cc     [20]uint8
	Ispeed int32
	Ospeed int32
}

type Winsize struct {
	Row    uint16
	Col    uint16
	Xpixel uint16
	Ypixel uint16
}

const (
	AT_FDCWD            = -0x64
	AT_EACCESS          = 0x1
	AT_SYMLINK_NOFOLLOW = 0x2
	AT_SYMLINK_FOLLOW   = 0x4
	AT_REMOVEDIR        = 0x8
)

type PollFd struct {
	Fd      int32
	Events  int16
	Revents int16
}

const (
	POLLERR    = 0x8
	POLLHUP    = 0x10
	POLLIN     = 0x1
	POLLNVAL   = 0x20
	POLLOUT    = 0x4
	POLLPRI    = 0x2
	POLLRDBAND = 0x80
	POLLRDNORM = 0x40
	POLLWRBAND = 0x100
	POLLWRNORM = 0x4
)

type Sigset_t uint32

type Utsname struct {
	Sysname  [256]byte
	Nodename [256]byte
	Release  [256]byte
	Version  [256]byte
	Machine  [256]byte
}

const SizeofUvmexp = 0x158

type Uvmexp struct {
	Pagesize           int32
	Pagemask           int32
	Pageshift          int32
	Npages             int32
	Free               int32
	Active             int32
	Inactive           int32
	Paging             int32
	Wired              int32
	Zeropages          int32
	Reserve_pagedaemon int32
	Reserve_kernel     int32
	Unused01           int32
	Vnodepages         int32
	Vtextpages         int32
	Freemin            int32
	Freetarg           int32
	Inactarg           int32
	Wiredmax           int32
	Anonmin            int32
	Vtextmin           int32
	Vnodemin           int32
	Anonminpct         int32
	Vtextminpct        int32
	Vnodeminpct        int32
	Nswapdev           int32
	Swpages            int32
	Swpginuse          int32
	Swpgonly           int32
	Nswget             int32
	Nanon              int32
	Unused05           int32
	Unused06           int32
	Faults             int32
	Traps              int32
	Intrs              int32
	Swtch              int32
	Softs              int32
	Syscalls           int32
	Pageins            int32
	Unused07           int32
	Unused08           int32
	Pgswapin           int32
	Pgswapout          int32
	Forks              int32
	Forks_ppwait       int32
	Forks_sharevm      int32
	Pga_zerohit        int32
	Pga_zeromiss       int32
	Unused09           int32
	Fltnoram           int32
	Fltnoanon          int32
	Fltnoamap          int32
	Fltpgwait          int32
	Fltpgrele          int32
	Fltrelck           int32
	Fltrelckok         int32
	Fltanget           int32
	Fltanretry         int32
	Fltamcopy          int32
	Fltnamap           int32
	Fltnomap           int32
	Fltlget            int32
	Fltget             int32
	Flt_anon           int32
	Flt_acow           int32
	Flt_obj            int32
	Flt_prcopy         int32
	Flt_przero         int32
	Pdwoke             int32
	Pdrevs             int32
	Pdswout            int32
	Pdfreed            int32
	Pdscans            int32
	Pdanscan           int32
	Pdobscan           int32
	Pdreact            int32
	Pdbusy             int32
	Pdpageouts         int32
	Pdpending          int32
	Pddeact            int32
	Unused11           int32
	Unused12           int32
	Unused13           int32
	Fpswtch            int32
	Kmapent            int32
}

const SizeofClockinfo = 0x10

type Clockinfo struct {
	Hz     int32
	Tick   int32
	Stathz int32
	Profhz int32
}
07070100000ECB000081A4000000000000000000000001645E367C00002526000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go // cgo -godefs -- -fsigned-char types_openbsd.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build mips64 && openbsd
// +build mips64,openbsd

package unix

const (
	SizeofPtr      = 0x8
	SizeofShort    = 0x2
	SizeofInt      = 0x4
	SizeofLong     = 0x8
	SizeofLongLong = 0x8
)

type (
	_C_short     int16
	_C_int       int32
	_C_long      int64
	_C_long_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int64
}

type Timeval struct {
	Sec  int64
	Usec int64
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int64
	Ixrss    int64
	Idrss    int64
	Isrss    int64
	Minflt   int64
	Majflt   int64
	Nswap    int64
	Inblock  int64
	Oublock  int64
	Msgsnd   int64
	Msgrcv   int64
	Nsignals int64
	Nvcsw    int64
	Nivcsw   int64
}

type Rlimit struct {
	Cur uint64
	Max uint64
}

type _Gid_t uint32

type Stat_t struct {
	Mode    uint32
	Dev     int32
	Ino     uint64
	Nlink   uint32
	Uid     uint32
	Gid     uint32
	Rdev    int32
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	Size    int64
	Blocks  int64
	Blksize int32
	Flags   uint32
	Gen     uint32
	_       Timespec
}

type Statfs_t struct {
	F_flags       uint32
	F_bsize       uint32
	F_iosize      uint32
	F_blocks      uint64
	F_bfree       uint64
	F_bavail      int64
	F_files       uint64
	F_ffree       uint64
	F_favail      int64
	F_syncwrites  uint64
	F_syncreads   uint64
	F_asyncwrites uint64
	F_asyncreads  uint64
	F_fsid        Fsid
	F_namemax     uint32
	F_owner       uint32
	F_ctime       uint64
	F_fstypename  [16]byte
	F_mntonname   [90]byte
	F_mntfromname [90]byte
	F_mntfromspec [90]byte
	_             [2]byte
	Mount_info    [160]byte
}

type Flock_t struct {
	Start  int64
	Len    int64
	Pid    int32
	Type   int16
	Whence int16
}

type Dirent struct {
	Fileno uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Namlen uint8
	_      [4]uint8
	Name   [256]int8
}

type Fsid struct {
	Val [2]int32
}

const (
	PathMax = 0x400
)

type RawSockaddrInet4 struct {
	Len    uint8
	Family uint8
	Port   uint16
	Addr   [4]byte /* in_addr */
	Zero   [8]int8
}

type RawSockaddrInet6 struct {
	Len      uint8
	Family   uint8
	Port     uint16
	Flowinfo uint32
	Addr     [16]byte /* in6_addr */
	Scope_id uint32
}

type RawSockaddrUnix struct {
	Len    uint8
	Family uint8
	Path   [104]int8
}

type RawSockaddrDatalink struct {
	Len    uint8
	Family uint8
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [24]int8
}

type RawSockaddr struct {
	Len    uint8
	Family uint8
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [92]int8
}

type _Socklen uint32

type Linger struct {
	Onoff  int32
	Linger int32
}

type Iovec struct {
	Base *byte
	Len  uint64
}

type IPMreq struct {
	Multiaddr [4]byte /* in_addr */
	Interface [4]byte /* in_addr */
}

type IPv6Mreq struct {
	Multiaddr [16]byte /* in6_addr */
	Interface uint32
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     uint32
	Control    *byte
	Controllen uint32
	Flags      int32
}

type Cmsghdr struct {
	Len   uint32
	Level int32
	Type  int32
}

type Inet6Pktinfo struct {
	Addr    [16]byte /* in6_addr */
	Ifindex uint32
}

type IPv6MTUInfo struct {
	Addr RawSockaddrInet6
	Mtu  uint32
}

type ICMPv6Filter struct {
	Filt [8]uint32
}

const (
	SizeofSockaddrInet4    = 0x10
	SizeofSockaddrInet6    = 0x1c
	SizeofSockaddrAny      = 0x6c
	SizeofSockaddrUnix     = 0x6a
	SizeofSockaddrDatalink = 0x20
	SizeofLinger           = 0x8
	SizeofIovec            = 0x10
	SizeofIPMreq           = 0x8
	SizeofIPv6Mreq         = 0x14
	SizeofMsghdr           = 0x30
	SizeofCmsghdr          = 0xc
	SizeofInet6Pktinfo     = 0x14
	SizeofIPv6MTUInfo      = 0x20
	SizeofICMPv6Filter     = 0x20
)

const (
	PTRACE_TRACEME = 0x0
	PTRACE_CONT    = 0x7
	PTRACE_KILL    = 0x8
)

type Kevent_t struct {
	Ident  uint64
	Filter int16
	Flags  uint16
	Fflags uint32
	Data   int64
	Udata  *byte
}

type FdSet struct {
	Bits [32]uint32
}

const (
	SizeofIfMsghdr         = 0xa8
	SizeofIfData           = 0x90
	SizeofIfaMsghdr        = 0x18
	SizeofIfAnnounceMsghdr = 0x1a
	SizeofRtMsghdr         = 0x60
	SizeofRtMetrics        = 0x38
)

type IfMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Hdrlen  uint16
	Index   uint16
	Tableid uint16
	Pad1    uint8
	Pad2    uint8
	Addrs   int32
	Flags   int32
	Xflags  int32
	Data    IfData
}

type IfData struct {
	Type         uint8
	Addrlen      uint8
	Hdrlen       uint8
	Link_state   uint8
	Mtu          uint32
	Metric       uint32
	Rdomain      uint32
	Baudrate     uint64
	Ipackets     uint64
	Ierrors      uint64
	Opackets     uint64
	Oerrors      uint64
	Collisions   uint64
	Ibytes       uint64
	Obytes       uint64
	Imcasts      uint64
	Omcasts      uint64
	Iqdrops      uint64
	Oqdrops      uint64
	Noproto      uint64
	Capabilities uint32
	Lastchange   Timeval
}

type IfaMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Hdrlen  uint16
	Index   uint16
	Tableid uint16
	Pad1    uint8
	Pad2    uint8
	Addrs   int32
	Flags   int32
	Metric  int32
}

type IfAnnounceMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Hdrlen  uint16
	Index   uint16
	What    uint16
	Name    [16]int8
}

type RtMsghdr struct {
	Msglen   uint16
	Version  uint8
	Type     uint8
	Hdrlen   uint16
	Index    uint16
	Tableid  uint16
	Priority uint8
	Mpls     uint8
	Addrs    int32
	Flags    int32
	Fmask    int32
	Pid      int32
	Seq      int32
	Errno    int32
	Inits    uint32
	Rmx      RtMetrics
}

type RtMetrics struct {
	Pksent   uint64
	Expire   int64
	Locks    uint32
	Mtu      uint32
	Refcnt   uint32
	Hopcount uint32
	Recvpipe uint32
	Sendpipe uint32
	Ssthresh uint32
	Rtt      uint32
	Rttvar   uint32
	Pad      uint32
}

const (
	SizeofBpfVersion = 0x4
	SizeofBpfStat    = 0x8
	SizeofBpfProgram = 0x10
	SizeofBpfInsn    = 0x8
	SizeofBpfHdr     = 0x18
)

type BpfVersion struct {
	Major uint16
	Minor uint16
}

type BpfStat struct {
	Recv uint32
	Drop uint32
}

type BpfProgram struct {
	Len   uint32
	Insns *BpfInsn
}

type BpfInsn struct {
	Code uint16
	Jt   uint8
	Jf   uint8
	K    uint32
}

type BpfHdr struct {
	Tstamp  BpfTimeval
	Caplen  uint32
	Datalen uint32
	Hdrlen  uint16
	Ifidx   uint16
	Flowid  uint16
	Flags   uint8
	Drops   uint8
}

type BpfTimeval struct {
	Sec  uint32
	Usec uint32
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Cc     [20]uint8
	Ispeed int32
	Ospeed int32
}

type Winsize struct {
	Row    uint16
	Col    uint16
	Xpixel uint16
	Ypixel uint16
}

const (
	AT_FDCWD            = -0x64
	AT_EACCESS          = 0x1
	AT_SYMLINK_NOFOLLOW = 0x2
	AT_SYMLINK_FOLLOW   = 0x4
	AT_REMOVEDIR        = 0x8
)

type PollFd struct {
	Fd      int32
	Events  int16
	Revents int16
}

const (
	POLLERR    = 0x8
	POLLHUP    = 0x10
	POLLIN     = 0x1
	POLLNVAL   = 0x20
	POLLOUT    = 0x4
	POLLPRI    = 0x2
	POLLRDBAND = 0x80
	POLLRDNORM = 0x40
	POLLWRBAND = 0x100
	POLLWRNORM = 0x4
)

type Sigset_t uint32

type Utsname struct {
	Sysname  [256]byte
	Nodename [256]byte
	Release  [256]byte
	Version  [256]byte
	Machine  [256]byte
}

const SizeofUvmexp = 0x158

type Uvmexp struct {
	Pagesize           int32
	Pagemask           int32
	Pageshift          int32
	Npages             int32
	Free               int32
	Active             int32
	Inactive           int32
	Paging             int32
	Wired              int32
	Zeropages          int32
	Reserve_pagedaemon int32
	Reserve_kernel     int32
	Unused01           int32
	Vnodepages         int32
	Vtextpages         int32
	Freemin            int32
	Freetarg           int32
	Inactarg           int32
	Wiredmax           int32
	Anonmin            int32
	Vtextmin           int32
	Vnodemin           int32
	Anonminpct         int32
	Vtextminpct        int32
	Vnodeminpct        int32
	Nswapdev           int32
	Swpages            int32
	Swpginuse          int32
	Swpgonly           int32
	Nswget             int32
	Nanon              int32
	Unused05           int32
	Unused06           int32
	Faults             int32
	Traps              int32
	Intrs              int32
	Swtch              int32
	Softs              int32
	Syscalls           int32
	Pageins            int32
	Unused07           int32
	Unused08           int32
	Pgswapin           int32
	Pgswapout          int32
	Forks              int32
	Forks_ppwait       int32
	Forks_sharevm      int32
	Pga_zerohit        int32
	Pga_zeromiss       int32
	Unused09           int32
	Fltnoram           int32
	Fltnoanon          int32
	Fltnoamap          int32
	Fltpgwait          int32
	Fltpgrele          int32
	Fltrelck           int32
	Fltrelckok         int32
	Fltanget           int32
	Fltanretry         int32
	Fltamcopy          int32
	Fltnamap           int32
	Fltnomap           int32
	Fltlget            int32
	Fltget             int32
	Flt_anon           int32
	Flt_acow           int32
	Flt_obj            int32
	Flt_prcopy         int32
	Flt_przero         int32
	Pdwoke             int32
	Pdrevs             int32
	Pdswout            int32
	Pdfreed            int32
	Pdscans            int32
	Pdanscan           int32
	Pdobscan           int32
	Pdreact            int32
	Pdbusy             int32
	Pdpageouts         int32
	Pdpending          int32
	Pddeact            int32
	Unused11           int32
	Unused12           int32
	Unused13           int32
	Fpswtch            int32
	Kmapent            int32
}

const SizeofClockinfo = 0x10

type Clockinfo struct {
	Hz     int32
	Tick   int32
	Stathz int32
	Profhz int32
}
  07070100000ECC000081A4000000000000000000000001645E367C0000253B000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_openbsd_ppc64.go  // cgo -godefs -- -fsigned-char types_openbsd.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build ppc64 && openbsd
// +build ppc64,openbsd

package unix

const (
	SizeofPtr      = 0x8
	SizeofShort    = 0x2
	SizeofInt      = 0x4
	SizeofLong     = 0x8
	SizeofLongLong = 0x8
)

type (
	_C_short     int16
	_C_int       int32
	_C_long      int64
	_C_long_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int64
}

type Timeval struct {
	Sec  int64
	Usec int64
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int64
	Ixrss    int64
	Idrss    int64
	Isrss    int64
	Minflt   int64
	Majflt   int64
	Nswap    int64
	Inblock  int64
	Oublock  int64
	Msgsnd   int64
	Msgrcv   int64
	Nsignals int64
	Nvcsw    int64
	Nivcsw   int64
}

type Rlimit struct {
	Cur uint64
	Max uint64
}

type _Gid_t uint32

type Stat_t struct {
	Mode    uint32
	Dev     int32
	Ino     uint64
	Nlink   uint32
	Uid     uint32
	Gid     uint32
	Rdev    int32
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	Size    int64
	Blocks  int64
	Blksize int32
	Flags   uint32
	Gen     uint32
	_       Timespec
}

type Statfs_t struct {
	F_flags       uint32
	F_bsize       uint32
	F_iosize      uint32
	F_blocks      uint64
	F_bfree       uint64
	F_bavail      int64
	F_files       uint64
	F_ffree       uint64
	F_favail      int64
	F_syncwrites  uint64
	F_syncreads   uint64
	F_asyncwrites uint64
	F_asyncreads  uint64
	F_fsid        Fsid
	F_namemax     uint32
	F_owner       uint32
	F_ctime       uint64
	F_fstypename  [16]byte
	F_mntonname   [90]byte
	F_mntfromname [90]byte
	F_mntfromspec [90]byte
	_             [2]byte
	Mount_info    [160]byte
}

type Flock_t struct {
	Start  int64
	Len    int64
	Pid    int32
	Type   int16
	Whence int16
}

type Dirent struct {
	Fileno uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Namlen uint8
	_      [4]uint8
	Name   [256]int8
}

type Fsid struct {
	Val [2]int32
}

const (
	PathMax = 0x400
)

type RawSockaddrInet4 struct {
	Len    uint8
	Family uint8
	Port   uint16
	Addr   [4]byte /* in_addr */
	Zero   [8]int8
}

type RawSockaddrInet6 struct {
	Len      uint8
	Family   uint8
	Port     uint16
	Flowinfo uint32
	Addr     [16]byte /* in6_addr */
	Scope_id uint32
}

type RawSockaddrUnix struct {
	Len    uint8
	Family uint8
	Path   [104]int8
}

type RawSockaddrDatalink struct {
	Len    uint8
	Family uint8
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [24]int8
}

type RawSockaddr struct {
	Len    uint8
	Family uint8
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [92]int8
}

type _Socklen uint32

type Linger struct {
	Onoff  int32
	Linger int32
}

type Iovec struct {
	Base *byte
	Len  uint64
}

type IPMreq struct {
	Multiaddr [4]byte /* in_addr */
	Interface [4]byte /* in_addr */
}

type IPv6Mreq struct {
	Multiaddr [16]byte /* in6_addr */
	Interface uint32
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     uint32
	Control    *byte
	Controllen uint32
	Flags      int32
}

type Cmsghdr struct {
	Len   uint32
	Level int32
	Type  int32
}

type Inet6Pktinfo struct {
	Addr    [16]byte /* in6_addr */
	Ifindex uint32
}

type IPv6MTUInfo struct {
	Addr RawSockaddrInet6
	Mtu  uint32
}

type ICMPv6Filter struct {
	Filt [8]uint32
}

const (
	SizeofSockaddrInet4    = 0x10
	SizeofSockaddrInet6    = 0x1c
	SizeofSockaddrAny      = 0x6c
	SizeofSockaddrUnix     = 0x6a
	SizeofSockaddrDatalink = 0x20
	SizeofLinger           = 0x8
	SizeofIovec            = 0x10
	SizeofIPMreq           = 0x8
	SizeofIPv6Mreq         = 0x14
	SizeofMsghdr           = 0x30
	SizeofCmsghdr          = 0xc
	SizeofInet6Pktinfo     = 0x14
	SizeofIPv6MTUInfo      = 0x20
	SizeofICMPv6Filter     = 0x20
)

const (
	PTRACE_TRACEME = 0x0
	PTRACE_CONT    = 0x7
	PTRACE_KILL    = 0x8
)

type Kevent_t struct {
	Ident  uint64
	Filter int16
	Flags  uint16
	Fflags uint32
	Data   int64
	Udata  *byte
}

type FdSet struct {
	Bits [32]uint32
}

const (
	SizeofIfMsghdr         = 0xa8
	SizeofIfData           = 0x90
	SizeofIfaMsghdr        = 0x18
	SizeofIfAnnounceMsghdr = 0x1a
	SizeofRtMsghdr         = 0x60
	SizeofRtMetrics        = 0x38
)

type IfMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Hdrlen  uint16
	Index   uint16
	Tableid uint16
	Pad1    uint8
	Pad2    uint8
	Addrs   int32
	Flags   int32
	Xflags  int32
	Data    IfData
}

type IfData struct {
	Type         uint8
	Addrlen      uint8
	Hdrlen       uint8
	Link_state   uint8
	Mtu          uint32
	Metric       uint32
	Rdomain      uint32
	Baudrate     uint64
	Ipackets     uint64
	Ierrors      uint64
	Opackets     uint64
	Oerrors      uint64
	Collisions   uint64
	Ibytes       uint64
	Obytes       uint64
	Imcasts      uint64
	Omcasts      uint64
	Iqdrops      uint64
	Oqdrops      uint64
	Noproto      uint64
	Capabilities uint32
	Lastchange   Timeval
}

type IfaMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Hdrlen  uint16
	Index   uint16
	Tableid uint16
	Pad1    uint8
	Pad2    uint8
	Addrs   int32
	Flags   int32
	Metric  int32
}

type IfAnnounceMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Hdrlen  uint16
	Index   uint16
	What    uint16
	Name    [16]int8
}

type RtMsghdr struct {
	Msglen   uint16
	Version  uint8
	Type     uint8
	Hdrlen   uint16
	Index    uint16
	Tableid  uint16
	Priority uint8
	Mpls     uint8
	Addrs    int32
	Flags    int32
	Fmask    int32
	Pid      int32
	Seq      int32
	Errno    int32
	Inits    uint32
	Rmx      RtMetrics
}

type RtMetrics struct {
	Pksent   uint64
	Expire   int64
	Locks    uint32
	Mtu      uint32
	Refcnt   uint32
	Hopcount uint32
	Recvpipe uint32
	Sendpipe uint32
	Ssthresh uint32
	Rtt      uint32
	Rttvar   uint32
	Pad      uint32
}

type Mclpool struct{}

const (
	SizeofBpfVersion = 0x4
	SizeofBpfStat    = 0x8
	SizeofBpfProgram = 0x10
	SizeofBpfInsn    = 0x8
	SizeofBpfHdr     = 0x18
)

type BpfVersion struct {
	Major uint16
	Minor uint16
}

type BpfStat struct {
	Recv uint32
	Drop uint32
}

type BpfProgram struct {
	Len   uint32
	Insns *BpfInsn
}

type BpfInsn struct {
	Code uint16
	Jt   uint8
	Jf   uint8
	K    uint32
}

type BpfHdr struct {
	Tstamp  BpfTimeval
	Caplen  uint32
	Datalen uint32
	Hdrlen  uint16
	Ifidx   uint16
	Flowid  uint16
	Flags   uint8
	Drops   uint8
}

type BpfTimeval struct {
	Sec  uint32
	Usec uint32
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Cc     [20]uint8
	Ispeed int32
	Ospeed int32
}

type Winsize struct {
	Row    uint16
	Col    uint16
	Xpixel uint16
	Ypixel uint16
}

const (
	AT_FDCWD            = -0x64
	AT_EACCESS          = 0x1
	AT_SYMLINK_NOFOLLOW = 0x2
	AT_SYMLINK_FOLLOW   = 0x4
	AT_REMOVEDIR        = 0x8
)

type PollFd struct {
	Fd      int32
	Events  int16
	Revents int16
}

const (
	POLLERR    = 0x8
	POLLHUP    = 0x10
	POLLIN     = 0x1
	POLLNVAL   = 0x20
	POLLOUT    = 0x4
	POLLPRI    = 0x2
	POLLRDBAND = 0x80
	POLLRDNORM = 0x40
	POLLWRBAND = 0x100
	POLLWRNORM = 0x4
)

type Sigset_t uint32

type Utsname struct {
	Sysname  [256]byte
	Nodename [256]byte
	Release  [256]byte
	Version  [256]byte
	Machine  [256]byte
}

const SizeofUvmexp = 0x158

type Uvmexp struct {
	Pagesize           int32
	Pagemask           int32
	Pageshift          int32
	Npages             int32
	Free               int32
	Active             int32
	Inactive           int32
	Paging             int32
	Wired              int32
	Zeropages          int32
	Reserve_pagedaemon int32
	Reserve_kernel     int32
	Unused01           int32
	Vnodepages         int32
	Vtextpages         int32
	Freemin            int32
	Freetarg           int32
	Inactarg           int32
	Wiredmax           int32
	Anonmin            int32
	Vtextmin           int32
	Vnodemin           int32
	Anonminpct         int32
	Vtextminpct        int32
	Vnodeminpct        int32
	Nswapdev           int32
	Swpages            int32
	Swpginuse          int32
	Swpgonly           int32
	Nswget             int32
	Nanon              int32
	Unused05           int32
	Unused06           int32
	Faults             int32
	Traps              int32
	Intrs              int32
	Swtch              int32
	Softs              int32
	Syscalls           int32
	Pageins            int32
	Unused07           int32
	Unused08           int32
	Pgswapin           int32
	Pgswapout          int32
	Forks              int32
	Forks_ppwait       int32
	Forks_sharevm      int32
	Pga_zerohit        int32
	Pga_zeromiss       int32
	Unused09           int32
	Fltnoram           int32
	Fltnoanon          int32
	Fltnoamap          int32
	Fltpgwait          int32
	Fltpgrele          int32
	Fltrelck           int32
	Fltrelckok         int32
	Fltanget           int32
	Fltanretry         int32
	Fltamcopy          int32
	Fltnamap           int32
	Fltnomap           int32
	Fltlget            int32
	Fltget             int32
	Flt_anon           int32
	Flt_acow           int32
	Flt_obj            int32
	Flt_prcopy         int32
	Flt_przero         int32
	Pdwoke             int32
	Pdrevs             int32
	Pdswout            int32
	Pdfreed            int32
	Pdscans            int32
	Pdanscan           int32
	Pdobscan           int32
	Pdreact            int32
	Pdbusy             int32
	Pdpageouts         int32
	Pdpending          int32
	Pddeact            int32
	Unused11           int32
	Unused12           int32
	Unused13           int32
	Fpswtch            int32
	Kmapent            int32
}

const SizeofClockinfo = 0x10

type Clockinfo struct {
	Hz     int32
	Tick   int32
	Stathz int32
	Profhz int32
}
 07070100000ECD000081A4000000000000000000000001645E367C0000253F000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_openbsd_riscv64.go    // cgo -godefs -- -fsigned-char types_openbsd.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build riscv64 && openbsd
// +build riscv64,openbsd

package unix

const (
	SizeofPtr      = 0x8
	SizeofShort    = 0x2
	SizeofInt      = 0x4
	SizeofLong     = 0x8
	SizeofLongLong = 0x8
)

type (
	_C_short     int16
	_C_int       int32
	_C_long      int64
	_C_long_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int64
}

type Timeval struct {
	Sec  int64
	Usec int64
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int64
	Ixrss    int64
	Idrss    int64
	Isrss    int64
	Minflt   int64
	Majflt   int64
	Nswap    int64
	Inblock  int64
	Oublock  int64
	Msgsnd   int64
	Msgrcv   int64
	Nsignals int64
	Nvcsw    int64
	Nivcsw   int64
}

type Rlimit struct {
	Cur uint64
	Max uint64
}

type _Gid_t uint32

type Stat_t struct {
	Mode    uint32
	Dev     int32
	Ino     uint64
	Nlink   uint32
	Uid     uint32
	Gid     uint32
	Rdev    int32
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	Size    int64
	Blocks  int64
	Blksize int32
	Flags   uint32
	Gen     uint32
	_       Timespec
}

type Statfs_t struct {
	F_flags       uint32
	F_bsize       uint32
	F_iosize      uint32
	F_blocks      uint64
	F_bfree       uint64
	F_bavail      int64
	F_files       uint64
	F_ffree       uint64
	F_favail      int64
	F_syncwrites  uint64
	F_syncreads   uint64
	F_asyncwrites uint64
	F_asyncreads  uint64
	F_fsid        Fsid
	F_namemax     uint32
	F_owner       uint32
	F_ctime       uint64
	F_fstypename  [16]byte
	F_mntonname   [90]byte
	F_mntfromname [90]byte
	F_mntfromspec [90]byte
	_             [2]byte
	Mount_info    [160]byte
}

type Flock_t struct {
	Start  int64
	Len    int64
	Pid    int32
	Type   int16
	Whence int16
}

type Dirent struct {
	Fileno uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Namlen uint8
	_      [4]uint8
	Name   [256]int8
}

type Fsid struct {
	Val [2]int32
}

const (
	PathMax = 0x400
)

type RawSockaddrInet4 struct {
	Len    uint8
	Family uint8
	Port   uint16
	Addr   [4]byte /* in_addr */
	Zero   [8]int8
}

type RawSockaddrInet6 struct {
	Len      uint8
	Family   uint8
	Port     uint16
	Flowinfo uint32
	Addr     [16]byte /* in6_addr */
	Scope_id uint32
}

type RawSockaddrUnix struct {
	Len    uint8
	Family uint8
	Path   [104]int8
}

type RawSockaddrDatalink struct {
	Len    uint8
	Family uint8
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [24]int8
}

type RawSockaddr struct {
	Len    uint8
	Family uint8
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [92]int8
}

type _Socklen uint32

type Linger struct {
	Onoff  int32
	Linger int32
}

type Iovec struct {
	Base *byte
	Len  uint64
}

type IPMreq struct {
	Multiaddr [4]byte /* in_addr */
	Interface [4]byte /* in_addr */
}

type IPv6Mreq struct {
	Multiaddr [16]byte /* in6_addr */
	Interface uint32
}

type Msghdr struct {
	Name       *byte
	Namelen    uint32
	Iov        *Iovec
	Iovlen     uint32
	Control    *byte
	Controllen uint32
	Flags      int32
}

type Cmsghdr struct {
	Len   uint32
	Level int32
	Type  int32
}

type Inet6Pktinfo struct {
	Addr    [16]byte /* in6_addr */
	Ifindex uint32
}

type IPv6MTUInfo struct {
	Addr RawSockaddrInet6
	Mtu  uint32
}

type ICMPv6Filter struct {
	Filt [8]uint32
}

const (
	SizeofSockaddrInet4    = 0x10
	SizeofSockaddrInet6    = 0x1c
	SizeofSockaddrAny      = 0x6c
	SizeofSockaddrUnix     = 0x6a
	SizeofSockaddrDatalink = 0x20
	SizeofLinger           = 0x8
	SizeofIovec            = 0x10
	SizeofIPMreq           = 0x8
	SizeofIPv6Mreq         = 0x14
	SizeofMsghdr           = 0x30
	SizeofCmsghdr          = 0xc
	SizeofInet6Pktinfo     = 0x14
	SizeofIPv6MTUInfo      = 0x20
	SizeofICMPv6Filter     = 0x20
)

const (
	PTRACE_TRACEME = 0x0
	PTRACE_CONT    = 0x7
	PTRACE_KILL    = 0x8
)

type Kevent_t struct {
	Ident  uint64
	Filter int16
	Flags  uint16
	Fflags uint32
	Data   int64
	Udata  *byte
}

type FdSet struct {
	Bits [32]uint32
}

const (
	SizeofIfMsghdr         = 0xa8
	SizeofIfData           = 0x90
	SizeofIfaMsghdr        = 0x18
	SizeofIfAnnounceMsghdr = 0x1a
	SizeofRtMsghdr         = 0x60
	SizeofRtMetrics        = 0x38
)

type IfMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Hdrlen  uint16
	Index   uint16
	Tableid uint16
	Pad1    uint8
	Pad2    uint8
	Addrs   int32
	Flags   int32
	Xflags  int32
	Data    IfData
}

type IfData struct {
	Type         uint8
	Addrlen      uint8
	Hdrlen       uint8
	Link_state   uint8
	Mtu          uint32
	Metric       uint32
	Rdomain      uint32
	Baudrate     uint64
	Ipackets     uint64
	Ierrors      uint64
	Opackets     uint64
	Oerrors      uint64
	Collisions   uint64
	Ibytes       uint64
	Obytes       uint64
	Imcasts      uint64
	Omcasts      uint64
	Iqdrops      uint64
	Oqdrops      uint64
	Noproto      uint64
	Capabilities uint32
	Lastchange   Timeval
}

type IfaMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Hdrlen  uint16
	Index   uint16
	Tableid uint16
	Pad1    uint8
	Pad2    uint8
	Addrs   int32
	Flags   int32
	Metric  int32
}

type IfAnnounceMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Hdrlen  uint16
	Index   uint16
	What    uint16
	Name    [16]int8
}

type RtMsghdr struct {
	Msglen   uint16
	Version  uint8
	Type     uint8
	Hdrlen   uint16
	Index    uint16
	Tableid  uint16
	Priority uint8
	Mpls     uint8
	Addrs    int32
	Flags    int32
	Fmask    int32
	Pid      int32
	Seq      int32
	Errno    int32
	Inits    uint32
	Rmx      RtMetrics
}

type RtMetrics struct {
	Pksent   uint64
	Expire   int64
	Locks    uint32
	Mtu      uint32
	Refcnt   uint32
	Hopcount uint32
	Recvpipe uint32
	Sendpipe uint32
	Ssthresh uint32
	Rtt      uint32
	Rttvar   uint32
	Pad      uint32
}

type Mclpool struct{}

const (
	SizeofBpfVersion = 0x4
	SizeofBpfStat    = 0x8
	SizeofBpfProgram = 0x10
	SizeofBpfInsn    = 0x8
	SizeofBpfHdr     = 0x18
)

type BpfVersion struct {
	Major uint16
	Minor uint16
}

type BpfStat struct {
	Recv uint32
	Drop uint32
}

type BpfProgram struct {
	Len   uint32
	Insns *BpfInsn
}

type BpfInsn struct {
	Code uint16
	Jt   uint8
	Jf   uint8
	K    uint32
}

type BpfHdr struct {
	Tstamp  BpfTimeval
	Caplen  uint32
	Datalen uint32
	Hdrlen  uint16
	Ifidx   uint16
	Flowid  uint16
	Flags   uint8
	Drops   uint8
}

type BpfTimeval struct {
	Sec  uint32
	Usec uint32
}

type Termios struct {
	Iflag  uint32
	Oflag  uint32
	Cflag  uint32
	Lflag  uint32
	Cc     [20]uint8
	Ispeed int32
	Ospeed int32
}

type Winsize struct {
	Row    uint16
	Col    uint16
	Xpixel uint16
	Ypixel uint16
}

const (
	AT_FDCWD            = -0x64
	AT_EACCESS          = 0x1
	AT_SYMLINK_NOFOLLOW = 0x2
	AT_SYMLINK_FOLLOW   = 0x4
	AT_REMOVEDIR        = 0x8
)

type PollFd struct {
	Fd      int32
	Events  int16
	Revents int16
}

const (
	POLLERR    = 0x8
	POLLHUP    = 0x10
	POLLIN     = 0x1
	POLLNVAL   = 0x20
	POLLOUT    = 0x4
	POLLPRI    = 0x2
	POLLRDBAND = 0x80
	POLLRDNORM = 0x40
	POLLWRBAND = 0x100
	POLLWRNORM = 0x4
)

type Sigset_t uint32

type Utsname struct {
	Sysname  [256]byte
	Nodename [256]byte
	Release  [256]byte
	Version  [256]byte
	Machine  [256]byte
}

const SizeofUvmexp = 0x158

type Uvmexp struct {
	Pagesize           int32
	Pagemask           int32
	Pageshift          int32
	Npages             int32
	Free               int32
	Active             int32
	Inactive           int32
	Paging             int32
	Wired              int32
	Zeropages          int32
	Reserve_pagedaemon int32
	Reserve_kernel     int32
	Unused01           int32
	Vnodepages         int32
	Vtextpages         int32
	Freemin            int32
	Freetarg           int32
	Inactarg           int32
	Wiredmax           int32
	Anonmin            int32
	Vtextmin           int32
	Vnodemin           int32
	Anonminpct         int32
	Vtextminpct        int32
	Vnodeminpct        int32
	Nswapdev           int32
	Swpages            int32
	Swpginuse          int32
	Swpgonly           int32
	Nswget             int32
	Nanon              int32
	Unused05           int32
	Unused06           int32
	Faults             int32
	Traps              int32
	Intrs              int32
	Swtch              int32
	Softs              int32
	Syscalls           int32
	Pageins            int32
	Unused07           int32
	Unused08           int32
	Pgswapin           int32
	Pgswapout          int32
	Forks              int32
	Forks_ppwait       int32
	Forks_sharevm      int32
	Pga_zerohit        int32
	Pga_zeromiss       int32
	Unused09           int32
	Fltnoram           int32
	Fltnoanon          int32
	Fltnoamap          int32
	Fltpgwait          int32
	Fltpgrele          int32
	Fltrelck           int32
	Fltrelckok         int32
	Fltanget           int32
	Fltanretry         int32
	Fltamcopy          int32
	Fltnamap           int32
	Fltnomap           int32
	Fltlget            int32
	Fltget             int32
	Flt_anon           int32
	Flt_acow           int32
	Flt_obj            int32
	Flt_prcopy         int32
	Flt_przero         int32
	Pdwoke             int32
	Pdrevs             int32
	Pdswout            int32
	Pdfreed            int32
	Pdscans            int32
	Pdanscan           int32
	Pdobscan           int32
	Pdreact            int32
	Pdbusy             int32
	Pdpageouts         int32
	Pdpending          int32
	Pddeact            int32
	Unused11           int32
	Unused12           int32
	Unused13           int32
	Fpswtch            int32
	Kmapent            int32
}

const SizeofClockinfo = 0x10

type Clockinfo struct {
	Hz     int32
	Tick   int32
	Stathz int32
	Profhz int32
}
 07070100000ECE000081A4000000000000000000000001645E367C00001E37000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go  // cgo -godefs types_solaris.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.

//go:build amd64 && solaris
// +build amd64,solaris

package unix

const (
	SizeofPtr      = 0x8
	SizeofShort    = 0x2
	SizeofInt      = 0x4
	SizeofLong     = 0x8
	SizeofLongLong = 0x8
	PathMax        = 0x400
	MaxHostNameLen = 0x100
)

type (
	_C_short     int16
	_C_int       int32
	_C_long      int64
	_C_long_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int64
}

type Timeval struct {
	Sec  int64
	Usec int64
}

type Timeval32 struct {
	Sec  int32
	Usec int32
}

type Tms struct {
	Utime  int64
	Stime  int64
	Cutime int64
	Cstime int64
}

type Utimbuf struct {
	Actime  int64
	Modtime int64
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int64
	Ixrss    int64
	Idrss    int64
	Isrss    int64
	Minflt   int64
	Majflt   int64
	Nswap    int64
	Inblock  int64
	Oublock  int64
	Msgsnd   int64
	Msgrcv   int64
	Nsignals int64
	Nvcsw    int64
	Nivcsw   int64
}

type Rlimit struct {
	Cur uint64
	Max uint64
}

type _Gid_t uint32

type Stat_t struct {
	Dev     uint64
	Ino     uint64
	Mode    uint32
	Nlink   uint32
	Uid     uint32
	Gid     uint32
	Rdev    uint64
	Size    int64
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	Blksize int32
	Blocks  int64
	Fstype  [16]int8
}

type Flock_t struct {
	Type   int16
	Whence int16
	Start  int64
	Len    int64
	Sysid  int32
	Pid    int32
	Pad    [4]int64
}

type Dirent struct {
	Ino    uint64
	Off    int64
	Reclen uint16
	Name   [1]int8
	_      [5]byte
}

type _Fsblkcnt_t uint64

type Statvfs_t struct {
	Bsize    uint64
	Frsize   uint64
	Blocks   uint64
	Bfree    uint64
	Bavail   uint64
	Files    uint64
	Ffree    uint64
	Favail   uint64
	Fsid     uint64
	Basetype [16]int8
	Flag     uint64
	Namemax  uint64
	Fstr     [32]int8
}

type RawSockaddrInet4 struct {
	Family uint16
	Port   uint16
	Addr   [4]byte /* in_addr */
	Zero   [8]int8
}

type RawSockaddrInet6 struct {
	Family   uint16
	Port     uint16
	Flowinfo uint32
	Addr     [16]byte /* in6_addr */
	Scope_id uint32
	_        uint32
}

type RawSockaddrUnix struct {
	Family uint16
	Path   [108]int8
}

type RawSockaddrDatalink struct {
	Family uint16
	Index  uint16
	Type   uint8
	Nlen   uint8
	Alen   uint8
	Slen   uint8
	Data   [244]int8
}

type RawSockaddr struct {
	Family uint16
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [236]int8
}

type _Socklen uint32

type Linger struct {
	Onoff  int32
	Linger int32
}

type Iovec struct {
	Base *byte
	Len  uint64
}

type IPMreq struct {
	Multiaddr [4]byte /* in_addr */
	Interface [4]byte /* in_addr */
}

type IPv6Mreq struct {
	Multiaddr [16]byte /* in6_addr */
	Interface uint32
}

type Msghdr struct {
	Name         *byte
	Namelen      uint32
	Iov          *Iovec
	Iovlen       int32
	Accrights    *int8
	Accrightslen int32
	_            [4]byte
}

type Cmsghdr struct {
	Len   uint32
	Level int32
	Type  int32
}

type Inet4Pktinfo struct {
	Ifindex  uint32
	Spec_dst [4]byte /* in_addr */
	Addr     [4]byte /* in_addr */
}

type Inet6Pktinfo struct {
	Addr    [16]byte /* in6_addr */
	Ifindex uint32
}

type IPv6MTUInfo struct {
	Addr RawSockaddrInet6
	Mtu  uint32
}

type ICMPv6Filter struct {
	Filt [8]uint32
}

const (
	SizeofSockaddrInet4    = 0x10
	SizeofSockaddrInet6    = 0x20
	SizeofSockaddrAny      = 0xfc
	SizeofSockaddrUnix     = 0x6e
	SizeofSockaddrDatalink = 0xfc
	SizeofLinger           = 0x8
	SizeofIovec            = 0x10
	SizeofIPMreq           = 0x8
	SizeofIPv6Mreq         = 0x14
	SizeofMsghdr           = 0x30
	SizeofCmsghdr          = 0xc
	SizeofInet4Pktinfo     = 0xc
	SizeofInet6Pktinfo     = 0x14
	SizeofIPv6MTUInfo      = 0x24
	SizeofICMPv6Filter     = 0x20
)

type FdSet struct {
	Bits [1024]int64
}

type Utsname struct {
	Sysname  [257]byte
	Nodename [257]byte
	Release  [257]byte
	Version  [257]byte
	Machine  [257]byte
}

type Ustat_t struct {
	Tfree  int64
	Tinode uint64
	Fname  [6]int8
	Fpack  [6]int8
	_      [4]byte
}

const (
	AT_FDCWD            = 0xffd19553
	AT_SYMLINK_NOFOLLOW = 0x1000
	AT_SYMLINK_FOLLOW   = 0x2000
	AT_REMOVEDIR        = 0x1
	AT_EACCESS          = 0x4
)

const (
	SizeofIfMsghdr  = 0x54
	SizeofIfData    = 0x44
	SizeofIfaMsghdr = 0x14
	SizeofRtMsghdr  = 0x4c
	SizeofRtMetrics = 0x28
)

type IfMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	Data    IfData
}

type IfData struct {
	Type       uint8
	Addrlen    uint8
	Hdrlen     uint8
	Mtu        uint32
	Metric     uint32
	Baudrate   uint32
	Ipackets   uint32
	Ierrors    uint32
	Opackets   uint32
	Oerrors    uint32
	Collisions uint32
	Ibytes     uint32
	Obytes     uint32
	Imcasts    uint32
	Omcasts    uint32
	Iqdrops    uint32
	Noproto    uint32
	Lastchange Timeval32
}

type IfaMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Addrs   int32
	Flags   int32
	Index   uint16
	Metric  int32
}

type RtMsghdr struct {
	Msglen  uint16
	Version uint8
	Type    uint8
	Index   uint16
	Flags   int32
	Addrs   int32
	Pid     int32
	Seq     int32
	Errno   int32
	Use     int32
	Inits   uint32
	Rmx     RtMetrics
}

type RtMetrics struct {
	Locks    uint32
	Mtu      uint32
	Hopcount uint32
	Expire   uint32
	Recvpipe uint32
	Sendpipe uint32
	Ssthresh uint32
	Rtt      uint32
	Rttvar   uint32
	Pksent   uint32
}

const (
	SizeofBpfVersion = 0x4
	SizeofBpfStat    = 0x80
	SizeofBpfProgram = 0x10
	SizeofBpfInsn    = 0x8
	SizeofBpfHdr     = 0x14
)

type BpfVersion struct {
	Major uint16
	Minor uint16
}

type BpfStat struct {
	Recv uint64
	Drop uint64
	Capt uint64
	_    [13]uint64
}

type BpfProgram struct {
	Len   uint32
	Insns *BpfInsn
}

type BpfInsn struct {
	Code uint16
	Jt   uint8
	Jf   uint8
	K    uint32
}

type BpfTimeval struct {
	Sec  int32
	Usec int32
}

type BpfHdr struct {
	Tstamp  BpfTimeval
	Caplen  uint32
	Datalen uint32
	Hdrlen  uint16
	_       [2]byte
}

type Termios struct {
	Iflag uint32
	Oflag uint32
	Cflag uint32
	Lflag uint32
	Cc    [19]uint8
	_     [1]byte
}

type Termio struct {
	Iflag uint16
	Oflag uint16
	Cflag uint16
	Lflag uint16
	Line  int8
	Cc    [8]uint8
	_     [1]byte
}

type Winsize struct {
	Row    uint16
	Col    uint16
	Xpixel uint16
	Ypixel uint16
}

type PollFd struct {
	Fd      int32
	Events  int16
	Revents int16
}

const (
	POLLERR    = 0x8
	POLLHUP    = 0x10
	POLLIN     = 0x1
	POLLNVAL   = 0x20
	POLLOUT    = 0x4
	POLLPRI    = 0x2
	POLLRDBAND = 0x80
	POLLRDNORM = 0x40
	POLLWRBAND = 0x100
	POLLWRNORM = 0x4
)

type fileObj struct {
	Atim Timespec
	Mtim Timespec
	Ctim Timespec
	Pad  [3]uint64
	Name *int8
}

type portEvent struct {
	Events int32
	Source uint16
	Pad    uint16
	Object uint64
	User   *byte
}

const (
	PORT_SOURCE_AIO    = 0x1
	PORT_SOURCE_TIMER  = 0x2
	PORT_SOURCE_USER   = 0x3
	PORT_SOURCE_FD     = 0x4
	PORT_SOURCE_ALERT  = 0x5
	PORT_SOURCE_MQ     = 0x6
	PORT_SOURCE_FILE   = 0x7
	PORT_ALERT_SET     = 0x1
	PORT_ALERT_UPDATE  = 0x2
	PORT_ALERT_INVALID = 0x3
	FILE_ACCESS        = 0x1
	FILE_MODIFIED      = 0x2
	FILE_ATTRIB        = 0x4
	FILE_TRUNC         = 0x100000
	FILE_NOFOLLOW      = 0x10000000
	FILE_DELETE        = 0x10
	FILE_RENAME_TO     = 0x20
	FILE_RENAME_FROM   = 0x40
	UNMOUNTED          = 0x20000000
	MOUNTEDOVER        = 0x40000000
	FILE_EXCEPTION     = 0x60000070
)

const (
	TUNNEWPPA = 0x540001
	TUNSETPPA = 0x540002

	I_STR     = 0x5308
	I_POP     = 0x5303
	I_PUSH    = 0x5302
	I_LINK    = 0x530c
	I_UNLINK  = 0x530d
	I_PLINK   = 0x5316
	I_PUNLINK = 0x5317

	IF_UNITSEL = -0x7ffb8cca
)

type strbuf struct {
	Maxlen int32
	Len    int32
	Buf    *int8
}

type Strioctl struct {
	Cmd    int32
	Timout int32
	Len    int32
	Dp     *int8
}

type Lifreq struct {
	Name   [32]int8
	Lifru1 [4]byte
	Type   uint32
	Lifru  [336]byte
}
 07070100000ECF000081A4000000000000000000000001645E367C00001ABB000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go  // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build zos && s390x
// +build zos,s390x

// Hand edited based on ztypes_linux_s390x.go
// TODO: auto-generate.

package unix

const (
	SizeofPtr      = 0x8
	SizeofShort    = 0x2
	SizeofInt      = 0x4
	SizeofLong     = 0x8
	SizeofLongLong = 0x8
	PathMax        = 0x1000
)

const (
	SizeofSockaddrAny   = 128
	SizeofCmsghdr       = 12
	SizeofIPMreq        = 8
	SizeofIPv6Mreq      = 20
	SizeofICMPv6Filter  = 32
	SizeofIPv6MTUInfo   = 32
	SizeofLinger        = 8
	SizeofSockaddrInet4 = 16
	SizeofSockaddrInet6 = 28
	SizeofTCPInfo       = 0x68
)

type (
	_C_short     int16
	_C_int       int32
	_C_long      int64
	_C_long_long int64
)

type Timespec struct {
	Sec  int64
	Nsec int64
}

type Timeval struct {
	Sec  int64
	Usec int64
}

type timeval_zos struct { //correct (with padding and all)
	Sec  int64
	_    [4]byte // pad
	Usec int32
}

type Tms struct { //clock_t is 4-byte unsigned int in zos
	Utime  uint32
	Stime  uint32
	Cutime uint32
	Cstime uint32
}

type Time_t int64

type Utimbuf struct {
	Actime  int64
	Modtime int64
}

type Utsname struct {
	Sysname    [65]byte
	Nodename   [65]byte
	Release    [65]byte
	Version    [65]byte
	Machine    [65]byte
	Domainname [65]byte
}

type RawSockaddrInet4 struct {
	Len    uint8
	Family uint8
	Port   uint16
	Addr   [4]byte /* in_addr */
	Zero   [8]uint8
}

type RawSockaddrInet6 struct {
	Len      uint8
	Family   uint8
	Port     uint16
	Flowinfo uint32
	Addr     [16]byte /* in6_addr */
	Scope_id uint32
}

type RawSockaddrUnix struct {
	Len    uint8
	Family uint8
	Path   [108]int8
}

type RawSockaddr struct {
	Len    uint8
	Family uint8
	Data   [14]uint8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	_    [112]uint8 // pad
}

type _Socklen uint32

type Linger struct {
	Onoff  int32
	Linger int32
}

type Iovec struct {
	Base *byte
	Len  uint64
}

type IPMreq struct {
	Multiaddr [4]byte /* in_addr */
	Interface [4]byte /* in_addr */
}

type IPv6Mreq struct {
	Multiaddr [16]byte /* in6_addr */
	Interface uint32
}

type Msghdr struct {
	Name       *byte
	Iov        *Iovec
	Control    *byte
	Flags      int32
	Namelen    int32
	Iovlen     int32
	Controllen int32
}

type Cmsghdr struct {
	Len   int32
	Level int32
	Type  int32
}

type Inet4Pktinfo struct {
	Addr    [4]byte /* in_addr */
	Ifindex uint32
}

type Inet6Pktinfo struct {
	Addr    [16]byte /* in6_addr */
	Ifindex uint32
}

type IPv6MTUInfo struct {
	Addr RawSockaddrInet6
	Mtu  uint32
}

type ICMPv6Filter struct {
	Data [8]uint32
}

type TCPInfo struct {
	State          uint8
	Ca_state       uint8
	Retransmits    uint8
	Probes         uint8
	Backoff        uint8
	Options        uint8
	Rto            uint32
	Ato            uint32
	Snd_mss        uint32
	Rcv_mss        uint32
	Unacked        uint32
	Sacked         uint32
	Lost           uint32
	Retrans        uint32
	Fackets        uint32
	Last_data_sent uint32
	Last_ack_sent  uint32
	Last_data_recv uint32
	Last_ack_recv  uint32
	Pmtu           uint32
	Rcv_ssthresh   uint32
	Rtt            uint32
	Rttvar         uint32
	Snd_ssthresh   uint32
	Snd_cwnd       uint32
	Advmss         uint32
	Reordering     uint32
	Rcv_rtt        uint32
	Rcv_space      uint32
	Total_retrans  uint32
}

type _Gid_t uint32

type rusage_zos struct {
	Utime timeval_zos
	Stime timeval_zos
}

type Rusage struct {
	Utime    Timeval
	Stime    Timeval
	Maxrss   int64
	Ixrss    int64
	Idrss    int64
	Isrss    int64
	Minflt   int64
	Majflt   int64
	Nswap    int64
	Inblock  int64
	Oublock  int64
	Msgsnd   int64
	Msgrcv   int64
	Nsignals int64
	Nvcsw    int64
	Nivcsw   int64
}

type Rlimit struct {
	Cur uint64
	Max uint64
}

// { int, short, short } in poll.h
type PollFd struct {
	Fd      int32
	Events  int16
	Revents int16
}

type Stat_t struct { //Linux Definition
	Dev     uint64
	Ino     uint64
	Nlink   uint64
	Mode    uint32
	Uid     uint32
	Gid     uint32
	_       int32
	Rdev    uint64
	Size    int64
	Atim    Timespec
	Mtim    Timespec
	Ctim    Timespec
	Blksize int64
	Blocks  int64
	_       [3]int64
}

type Stat_LE_t struct {
	_            [4]byte // eye catcher
	Length       uint16
	Version      uint16
	Mode         int32
	Ino          uint32
	Dev          uint32
	Nlink        int32
	Uid          int32
	Gid          int32
	Size         int64
	Atim31       [4]byte
	Mtim31       [4]byte
	Ctim31       [4]byte
	Rdev         uint32
	Auditoraudit uint32
	Useraudit    uint32
	Blksize      int32
	Creatim31    [4]byte
	AuditID      [16]byte
	_            [4]byte // rsrvd1
	File_tag     struct {
		Ccsid   uint16
		Txtflag uint16 // aggregating Txflag:1 deferred:1 rsvflags:14
	}
	CharsetID [8]byte
	Blocks    int64
	Genvalue  uint32
	Reftim31  [4]byte
	Fid       [8]byte
	Filefmt   byte
	Fspflag2  byte
	_         [2]byte // rsrvd2
	Ctimemsec int32
	Seclabel  [8]byte
	_         [4]byte // rsrvd3
	_         [4]byte // rsrvd4
	Atim      Time_t
	Mtim      Time_t
	Ctim      Time_t
	Creatim   Time_t
	Reftim    Time_t
	_         [24]byte // rsrvd5
}

type Statvfs_t struct {
	ID          [4]byte
	Len         int32
	Bsize       uint64
	Blocks      uint64
	Usedspace   uint64
	Bavail      uint64
	Flag        uint64
	Maxfilesize int64
	_           [16]byte
	Frsize      uint64
	Bfree       uint64
	Files       uint32
	Ffree       uint32
	Favail      uint32
	Namemax31   uint32
	Invarsec    uint32
	_           [4]byte
	Fsid        uint64
	Namemax     uint64
}

type Statfs_t struct {
	Type    uint32
	Bsize   uint64
	Blocks  uint64
	Bfree   uint64
	Bavail  uint64
	Files   uint32
	Ffree   uint32
	Fsid    uint64
	Namelen uint64
	Frsize  uint64
	Flags   uint64
}

type direntLE struct {
	Reclen uint16
	Namlen uint16
	Ino    uint32
	Extra  uintptr
	Name   [256]byte
}

type Dirent struct {
	Ino    uint64
	Off    int64
	Reclen uint16
	Type   uint8
	Name   [256]uint8
	_      [5]byte
}

type FdSet struct {
	Bits [64]int32
}

// This struct is packed on z/OS so it can't be used directly.
type Flock_t struct {
	Type   int16
	Whence int16
	Start  int64
	Len    int64
	Pid    int32
}

type Termios struct {
	Cflag uint32
	Iflag uint32
	Lflag uint32
	Oflag uint32
	Cc    [11]uint8
}

type Winsize struct {
	Row    uint16
	Col    uint16
	Xpixel uint16
	Ypixel uint16
}

type W_Mnth struct {
	Hid   [4]byte
	Size  int32
	Cur1  int32 //32bit pointer
	Cur2  int32 //^
	Devno uint32
	_     [4]byte
}

type W_Mntent struct {
	Fstype       uint32
	Mode         uint32
	Dev          uint32
	Parentdev    uint32
	Rootino      uint32
	Status       byte
	Ddname       [9]byte
	Fstname      [9]byte
	Fsname       [45]byte
	Pathlen      uint32
	Mountpoint   [1024]byte
	Jobname      [8]byte
	PID          int32
	Parmoffset   int32
	Parmlen      int16
	Owner        [8]byte
	Quiesceowner [8]byte
	_            [38]byte
}
 07070100000ED0000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows   07070100000ED1000081A4000000000000000000000001645E367C0000013A000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/aliases.go    // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build windows && go1.9
// +build windows,go1.9

package windows

import "syscall"

type Errno = syscall.Errno
type SysProcAttr = syscall.SysProcAttr
  07070100000ED2000081A4000000000000000000000001645E367C00003018000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/dll_windows.go    // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package windows

import (
	"sync"
	"sync/atomic"
	"syscall"
	"unsafe"
)

// We need to use LoadLibrary and GetProcAddress from the Go runtime, because
// the these symbols are loaded by the system linker and are required to
// dynamically load additional symbols. Note that in the Go runtime, these
// return syscall.Handle and syscall.Errno, but these are the same, in fact,
// as windows.Handle and windows.Errno, and we intend to keep these the same.

//go:linkname syscall_loadlibrary syscall.loadlibrary
func syscall_loadlibrary(filename *uint16) (handle Handle, err Errno)

//go:linkname syscall_getprocaddress syscall.getprocaddress
func syscall_getprocaddress(handle Handle, procname *uint8) (proc uintptr, err Errno)

// DLLError describes reasons for DLL load failures.
type DLLError struct {
	Err     error
	ObjName string
	Msg     string
}

func (e *DLLError) Error() string { return e.Msg }

func (e *DLLError) Unwrap() error { return e.Err }

// A DLL implements access to a single DLL.
type DLL struct {
	Name   string
	Handle Handle
}

// LoadDLL loads DLL file into memory.
//
// Warning: using LoadDLL without an absolute path name is subject to
// DLL preloading attacks. To safely load a system DLL, use LazyDLL
// with System set to true, or use LoadLibraryEx directly.
func LoadDLL(name string) (dll *DLL, err error) {
	namep, err := UTF16PtrFromString(name)
	if err != nil {
		return nil, err
	}
	h, e := syscall_loadlibrary(namep)
	if e != 0 {
		return nil, &DLLError{
			Err:     e,
			ObjName: name,
			Msg:     "Failed to load " + name + ": " + e.Error(),
		}
	}
	d := &DLL{
		Name:   name,
		Handle: h,
	}
	return d, nil
}

// MustLoadDLL is like LoadDLL but panics if load operation failes.
func MustLoadDLL(name string) *DLL {
	d, e := LoadDLL(name)
	if e != nil {
		panic(e)
	}
	return d
}

// FindProc searches DLL d for procedure named name and returns *Proc
// if found. It returns an error if search fails.
func (d *DLL) FindProc(name string) (proc *Proc, err error) {
	namep, err := BytePtrFromString(name)
	if err != nil {
		return nil, err
	}
	a, e := syscall_getprocaddress(d.Handle, namep)
	if e != 0 {
		return nil, &DLLError{
			Err:     e,
			ObjName: name,
			Msg:     "Failed to find " + name + " procedure in " + d.Name + ": " + e.Error(),
		}
	}
	p := &Proc{
		Dll:  d,
		Name: name,
		addr: a,
	}
	return p, nil
}

// MustFindProc is like FindProc but panics if search fails.
func (d *DLL) MustFindProc(name string) *Proc {
	p, e := d.FindProc(name)
	if e != nil {
		panic(e)
	}
	return p
}

// FindProcByOrdinal searches DLL d for procedure by ordinal and returns *Proc
// if found. It returns an error if search fails.
func (d *DLL) FindProcByOrdinal(ordinal uintptr) (proc *Proc, err error) {
	a, e := GetProcAddressByOrdinal(d.Handle, ordinal)
	name := "#" + itoa(int(ordinal))
	if e != nil {
		return nil, &DLLError{
			Err:     e,
			ObjName: name,
			Msg:     "Failed to find " + name + " procedure in " + d.Name + ": " + e.Error(),
		}
	}
	p := &Proc{
		Dll:  d,
		Name: name,
		addr: a,
	}
	return p, nil
}

// MustFindProcByOrdinal is like FindProcByOrdinal but panics if search fails.
func (d *DLL) MustFindProcByOrdinal(ordinal uintptr) *Proc {
	p, e := d.FindProcByOrdinal(ordinal)
	if e != nil {
		panic(e)
	}
	return p
}

// Release unloads DLL d from memory.
func (d *DLL) Release() (err error) {
	return FreeLibrary(d.Handle)
}

// A Proc implements access to a procedure inside a DLL.
type Proc struct {
	Dll  *DLL
	Name string
	addr uintptr
}

// Addr returns the address of the procedure represented by p.
// The return value can be passed to Syscall to run the procedure.
func (p *Proc) Addr() uintptr {
	return p.addr
}

//go:uintptrescapes

// Call executes procedure p with arguments a. It will panic, if more than 15 arguments
// are supplied.
//
// The returned error is always non-nil, constructed from the result of GetLastError.
// Callers must inspect the primary return value to decide whether an error occurred
// (according to the semantics of the specific function being called) before consulting
// the error. The error will be guaranteed to contain windows.Errno.
func (p *Proc) Call(a ...uintptr) (r1, r2 uintptr, lastErr error) {
	switch len(a) {
	case 0:
		return syscall.Syscall(p.Addr(), uintptr(len(a)), 0, 0, 0)
	case 1:
		return syscall.Syscall(p.Addr(), uintptr(len(a)), a[0], 0, 0)
	case 2:
		return syscall.Syscall(p.Addr(), uintptr(len(a)), a[0], a[1], 0)
	case 3:
		return syscall.Syscall(p.Addr(), uintptr(len(a)), a[0], a[1], a[2])
	case 4:
		return syscall.Syscall6(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], 0, 0)
	case 5:
		return syscall.Syscall6(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], 0)
	case 6:
		return syscall.Syscall6(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5])
	case 7:
		return syscall.Syscall9(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], 0, 0)
	case 8:
		return syscall.Syscall9(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], 0)
	case 9:
		return syscall.Syscall9(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8])
	case 10:
		return syscall.Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], 0, 0)
	case 11:
		return syscall.Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], 0)
	case 12:
		return syscall.Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11])
	case 13:
		return syscall.Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], 0, 0)
	case 14:
		return syscall.Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], 0)
	case 15:
		return syscall.Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14])
	default:
		panic("Call " + p.Name + " with too many arguments " + itoa(len(a)) + ".")
	}
}

// A LazyDLL implements access to a single DLL.
// It will delay the load of the DLL until the first
// call to its Handle method or to one of its
// LazyProc's Addr method.
type LazyDLL struct {
	Name string

	// System determines whether the DLL must be loaded from the
	// Windows System directory, bypassing the normal DLL search
	// path.
	System bool

	mu  sync.Mutex
	dll *DLL // non nil once DLL is loaded
}

// Load loads DLL file d.Name into memory. It returns an error if fails.
// Load will not try to load DLL, if it is already loaded into memory.
func (d *LazyDLL) Load() error {
	// Non-racy version of:
	// if d.dll != nil {
	if atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&d.dll))) != nil {
		return nil
	}
	d.mu.Lock()
	defer d.mu.Unlock()
	if d.dll != nil {
		return nil
	}

	// kernel32.dll is special, since it's where LoadLibraryEx comes from.
	// The kernel already special-cases its name, so it's always
	// loaded from system32.
	var dll *DLL
	var err error
	if d.Name == "kernel32.dll" {
		dll, err = LoadDLL(d.Name)
	} else {
		dll, err = loadLibraryEx(d.Name, d.System)
	}
	if err != nil {
		return err
	}

	// Non-racy version of:
	// d.dll = dll
	atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(&d.dll)), unsafe.Pointer(dll))
	return nil
}

// mustLoad is like Load but panics if search fails.
func (d *LazyDLL) mustLoad() {
	e := d.Load()
	if e != nil {
		panic(e)
	}
}

// Handle returns d's module handle.
func (d *LazyDLL) Handle() uintptr {
	d.mustLoad()
	return uintptr(d.dll.Handle)
}

// NewProc returns a LazyProc for accessing the named procedure in the DLL d.
func (d *LazyDLL) NewProc(name string) *LazyProc {
	return &LazyProc{l: d, Name: name}
}

// NewLazyDLL creates new LazyDLL associated with DLL file.
func NewLazyDLL(name string) *LazyDLL {
	return &LazyDLL{Name: name}
}

// NewLazySystemDLL is like NewLazyDLL, but will only
// search Windows System directory for the DLL if name is
// a base name (like "advapi32.dll").
func NewLazySystemDLL(name string) *LazyDLL {
	return &LazyDLL{Name: name, System: true}
}

// A LazyProc implements access to a procedure inside a LazyDLL.
// It delays the lookup until the Addr method is called.
type LazyProc struct {
	Name string

	mu   sync.Mutex
	l    *LazyDLL
	proc *Proc
}

// Find searches DLL for procedure named p.Name. It returns
// an error if search fails. Find will not search procedure,
// if it is already found and loaded into memory.
func (p *LazyProc) Find() error {
	// Non-racy version of:
	// if p.proc == nil {
	if atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&p.proc))) == nil {
		p.mu.Lock()
		defer p.mu.Unlock()
		if p.proc == nil {
			e := p.l.Load()
			if e != nil {
				return e
			}
			proc, e := p.l.dll.FindProc(p.Name)
			if e != nil {
				return e
			}
			// Non-racy version of:
			// p.proc = proc
			atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(&p.proc)), unsafe.Pointer(proc))
		}
	}
	return nil
}

// mustFind is like Find but panics if search fails.
func (p *LazyProc) mustFind() {
	e := p.Find()
	if e != nil {
		panic(e)
	}
}

// Addr returns the address of the procedure represented by p.
// The return value can be passed to Syscall to run the procedure.
// It will panic if the procedure cannot be found.
func (p *LazyProc) Addr() uintptr {
	p.mustFind()
	return p.proc.Addr()
}

//go:uintptrescapes

// Call executes procedure p with arguments a. It will panic, if more than 15 arguments
// are supplied. It will also panic if the procedure cannot be found.
//
// The returned error is always non-nil, constructed from the result of GetLastError.
// Callers must inspect the primary return value to decide whether an error occurred
// (according to the semantics of the specific function being called) before consulting
// the error. The error will be guaranteed to contain windows.Errno.
func (p *LazyProc) Call(a ...uintptr) (r1, r2 uintptr, lastErr error) {
	p.mustFind()
	return p.proc.Call(a...)
}

var canDoSearchSystem32Once struct {
	sync.Once
	v bool
}

func initCanDoSearchSystem32() {
	// https://msdn.microsoft.com/en-us/library/ms684179(v=vs.85).aspx says:
	// "Windows 7, Windows Server 2008 R2, Windows Vista, and Windows
	// Server 2008: The LOAD_LIBRARY_SEARCH_* flags are available on
	// systems that have KB2533623 installed. To determine whether the
	// flags are available, use GetProcAddress to get the address of the
	// AddDllDirectory, RemoveDllDirectory, or SetDefaultDllDirectories
	// function. If GetProcAddress succeeds, the LOAD_LIBRARY_SEARCH_*
	// flags can be used with LoadLibraryEx."
	canDoSearchSystem32Once.v = (modkernel32.NewProc("AddDllDirectory").Find() == nil)
}

func canDoSearchSystem32() bool {
	canDoSearchSystem32Once.Do(initCanDoSearchSystem32)
	return canDoSearchSystem32Once.v
}

func isBaseName(name string) bool {
	for _, c := range name {
		if c == ':' || c == '/' || c == '\\' {
			return false
		}
	}
	return true
}

// loadLibraryEx wraps the Windows LoadLibraryEx function.
//
// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms684179(v=vs.85).aspx
//
// If name is not an absolute path, LoadLibraryEx searches for the DLL
// in a variety of automatic locations unless constrained by flags.
// See: https://msdn.microsoft.com/en-us/library/ff919712%28VS.85%29.aspx
func loadLibraryEx(name string, system bool) (*DLL, error) {
	loadDLL := name
	var flags uintptr
	if system {
		if canDoSearchSystem32() {
			flags = LOAD_LIBRARY_SEARCH_SYSTEM32
		} else if isBaseName(name) {
			// WindowsXP or unpatched Windows machine
			// trying to load "foo.dll" out of the system
			// folder, but LoadLibraryEx doesn't support
			// that yet on their system, so emulate it.
			systemdir, err := GetSystemDirectory()
			if err != nil {
				return nil, err
			}
			loadDLL = systemdir + "\\" + name
		}
	}
	h, err := LoadLibraryEx(loadDLL, 0, flags)
	if err != nil {
		return nil, err
	}
	return &DLL{Name: name, Handle: h}, nil
}

type errString string

func (s errString) Error() string { return string(s) }
07070100000ED3000081A4000000000000000000000001645E367C00000149000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/empty.s   // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build !go1.12
// +build !go1.12

// This file is here to allow bodyless functions with go:linkname for Go 1.11
// and earlier (see https://golang.org/issue/23311).
   07070100000ED4000081A4000000000000000000000001645E367C000004CA000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/env_windows.go    // Copyright 2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Windows environment variables.

package windows

import (
	"syscall"
	"unsafe"
)

func Getenv(key string) (value string, found bool) {
	return syscall.Getenv(key)
}

func Setenv(key, value string) error {
	return syscall.Setenv(key, value)
}

func Clearenv() {
	syscall.Clearenv()
}

func Environ() []string {
	return syscall.Environ()
}

// Returns a default environment associated with the token, rather than the current
// process. If inheritExisting is true, then this environment also inherits the
// environment of the current process.
func (token Token) Environ(inheritExisting bool) (env []string, err error) {
	var block *uint16
	err = CreateEnvironmentBlock(&block, token, inheritExisting)
	if err != nil {
		return nil, err
	}
	defer DestroyEnvironmentBlock(block)
	blockp := unsafe.Pointer(block)
	for {
		entry := UTF16PtrToString((*uint16)(blockp))
		if len(entry) == 0 {
			break
		}
		env = append(env, entry)
		blockp = unsafe.Add(blockp, 2*(len(entry)+1))
	}
	return env, nil
}

func Unsetenv(key string) error {
	return syscall.Unsetenv(key)
}
  07070100000ED5000081A4000000000000000000000001645E367C0000034B000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/eventlog.go   // Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build windows
// +build windows

package windows

const (
	EVENTLOG_SUCCESS          = 0
	EVENTLOG_ERROR_TYPE       = 1
	EVENTLOG_WARNING_TYPE     = 2
	EVENTLOG_INFORMATION_TYPE = 4
	EVENTLOG_AUDIT_SUCCESS    = 8
	EVENTLOG_AUDIT_FAILURE    = 16
)

//sys	RegisterEventSource(uncServerName *uint16, sourceName *uint16) (handle Handle, err error) [failretval==0] = advapi32.RegisterEventSourceW
//sys	DeregisterEventSource(handle Handle) (err error) = advapi32.DeregisterEventSource
//sys	ReportEvent(log Handle, etype uint16, category uint16, eventId uint32, usrSId uintptr, numStrings uint16, dataSize uint32, strings **uint16, rawData *byte) (err error) = advapi32.ReportEventW
 07070100000ED6000081A4000000000000000000000001645E367C00001350000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/exec_windows.go   // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Fork, exec, wait, etc.

package windows

import (
	errorspkg "errors"
	"unsafe"
)

// EscapeArg rewrites command line argument s as prescribed
// in http://msdn.microsoft.com/en-us/library/ms880421.
// This function returns "" (2 double quotes) if s is empty.
// Alternatively, these transformations are done:
//   - every back slash (\) is doubled, but only if immediately
//     followed by double quote (");
//   - every double quote (") is escaped by back slash (\);
//   - finally, s is wrapped with double quotes (arg -> "arg"),
//     but only if there is space or tab inside s.
func EscapeArg(s string) string {
	if len(s) == 0 {
		return "\"\""
	}
	n := len(s)
	hasSpace := false
	for i := 0; i < len(s); i++ {
		switch s[i] {
		case '"', '\\':
			n++
		case ' ', '\t':
			hasSpace = true
		}
	}
	if hasSpace {
		n += 2
	}
	if n == len(s) {
		return s
	}

	qs := make([]byte, n)
	j := 0
	if hasSpace {
		qs[j] = '"'
		j++
	}
	slashes := 0
	for i := 0; i < len(s); i++ {
		switch s[i] {
		default:
			slashes = 0
			qs[j] = s[i]
		case '\\':
			slashes++
			qs[j] = s[i]
		case '"':
			for ; slashes > 0; slashes-- {
				qs[j] = '\\'
				j++
			}
			qs[j] = '\\'
			j++
			qs[j] = s[i]
		}
		j++
	}
	if hasSpace {
		for ; slashes > 0; slashes-- {
			qs[j] = '\\'
			j++
		}
		qs[j] = '"'
		j++
	}
	return string(qs[:j])
}

// ComposeCommandLine escapes and joins the given arguments suitable for use as a Windows command line,
// in CreateProcess's CommandLine argument, CreateService/ChangeServiceConfig's BinaryPathName argument,
// or any program that uses CommandLineToArgv.
func ComposeCommandLine(args []string) string {
	var commandLine string
	for i := range args {
		if i > 0 {
			commandLine += " "
		}
		commandLine += EscapeArg(args[i])
	}
	return commandLine
}

// DecomposeCommandLine breaks apart its argument command line into unescaped parts using CommandLineToArgv,
// as gathered from GetCommandLine, QUERY_SERVICE_CONFIG's BinaryPathName argument, or elsewhere that
// command lines are passed around.
// DecomposeCommandLine returns error if commandLine contains NUL.
func DecomposeCommandLine(commandLine string) ([]string, error) {
	if len(commandLine) == 0 {
		return []string{}, nil
	}
	utf16CommandLine, err := UTF16FromString(commandLine)
	if err != nil {
		return nil, errorspkg.New("string with NUL passed to DecomposeCommandLine")
	}
	var argc int32
	argv, err := CommandLineToArgv(&utf16CommandLine[0], &argc)
	if err != nil {
		return nil, err
	}
	defer LocalFree(Handle(unsafe.Pointer(argv)))
	var args []string
	for _, v := range (*argv)[:argc] {
		args = append(args, UTF16ToString((*v)[:]))
	}
	return args, nil
}

func CloseOnExec(fd Handle) {
	SetHandleInformation(Handle(fd), HANDLE_FLAG_INHERIT, 0)
}

// FullPath retrieves the full path of the specified file.
func FullPath(name string) (path string, err error) {
	p, err := UTF16PtrFromString(name)
	if err != nil {
		return "", err
	}
	n := uint32(100)
	for {
		buf := make([]uint16, n)
		n, err = GetFullPathName(p, uint32(len(buf)), &buf[0], nil)
		if err != nil {
			return "", err
		}
		if n <= uint32(len(buf)) {
			return UTF16ToString(buf[:n]), nil
		}
	}
}

// NewProcThreadAttributeList allocates a new ProcThreadAttributeListContainer, with the requested maximum number of attributes.
func NewProcThreadAttributeList(maxAttrCount uint32) (*ProcThreadAttributeListContainer, error) {
	var size uintptr
	err := initializeProcThreadAttributeList(nil, maxAttrCount, 0, &size)
	if err != ERROR_INSUFFICIENT_BUFFER {
		if err == nil {
			return nil, errorspkg.New("unable to query buffer size from InitializeProcThreadAttributeList")
		}
		return nil, err
	}
	alloc, err := LocalAlloc(LMEM_FIXED, uint32(size))
	if err != nil {
		return nil, err
	}
	// size is guaranteed to be ≥1 by InitializeProcThreadAttributeList.
	al := &ProcThreadAttributeListContainer{data: (*ProcThreadAttributeList)(unsafe.Pointer(alloc))}
	err = initializeProcThreadAttributeList(al.data, maxAttrCount, 0, &size)
	if err != nil {
		return nil, err
	}
	return al, err
}

// Update modifies the ProcThreadAttributeList using UpdateProcThreadAttribute.
func (al *ProcThreadAttributeListContainer) Update(attribute uintptr, value unsafe.Pointer, size uintptr) error {
	al.pointers = append(al.pointers, value)
	return updateProcThreadAttribute(al.data, 0, attribute, value, size, nil, nil)
}

// Delete frees ProcThreadAttributeList's resources.
func (al *ProcThreadAttributeListContainer) Delete() {
	deleteProcThreadAttributeList(al.data)
	LocalFree(Handle(unsafe.Pointer(al.data)))
	al.data = nil
	al.pointers = nil
}

// List returns the actual ProcThreadAttributeList to be passed to StartupInfoEx.
func (al *ProcThreadAttributeListContainer) List() *ProcThreadAttributeList {
	return al.data
}
07070100000ED7000081A4000000000000000000000001645E367C0000057D000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/memory_windows.go // Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package windows

const (
	MEM_COMMIT      = 0x00001000
	MEM_RESERVE     = 0x00002000
	MEM_DECOMMIT    = 0x00004000
	MEM_RELEASE     = 0x00008000
	MEM_RESET       = 0x00080000
	MEM_TOP_DOWN    = 0x00100000
	MEM_WRITE_WATCH = 0x00200000
	MEM_PHYSICAL    = 0x00400000
	MEM_RESET_UNDO  = 0x01000000
	MEM_LARGE_PAGES = 0x20000000

	PAGE_NOACCESS          = 0x00000001
	PAGE_READONLY          = 0x00000002
	PAGE_READWRITE         = 0x00000004
	PAGE_WRITECOPY         = 0x00000008
	PAGE_EXECUTE           = 0x00000010
	PAGE_EXECUTE_READ      = 0x00000020
	PAGE_EXECUTE_READWRITE = 0x00000040
	PAGE_EXECUTE_WRITECOPY = 0x00000080
	PAGE_GUARD             = 0x00000100
	PAGE_NOCACHE           = 0x00000200
	PAGE_WRITECOMBINE      = 0x00000400
	PAGE_TARGETS_INVALID   = 0x40000000
	PAGE_TARGETS_NO_UPDATE = 0x40000000

	QUOTA_LIMITS_HARDWS_MIN_DISABLE = 0x00000002
	QUOTA_LIMITS_HARDWS_MIN_ENABLE  = 0x00000001
	QUOTA_LIMITS_HARDWS_MAX_DISABLE = 0x00000008
	QUOTA_LIMITS_HARDWS_MAX_ENABLE  = 0x00000004
)

type MemoryBasicInformation struct {
	BaseAddress       uintptr
	AllocationBase    uintptr
	AllocationProtect uint32
	PartitionId       uint16
	RegionSize        uintptr
	State             uint32
	Protect           uint32
	Type              uint32
}
   07070100000ED8000081A4000000000000000000000001645E367C00000878000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/mkerrors.bash #!/bin/bash

# Copyright 2019 The Go Authors. All rights reserved.
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.

set -e
shopt -s nullglob

winerror="$(printf '%s\n' "/mnt/c/Program Files (x86)/Windows Kits/"/*/Include/*/shared/winerror.h | sort -Vr | head -n 1)"
[[ -n $winerror ]] || { echo "Unable to find winerror.h" >&2; exit 1; }
ntstatus="$(printf '%s\n' "/mnt/c/Program Files (x86)/Windows Kits/"/*/Include/*/shared/ntstatus.h | sort -Vr | head -n 1)"
[[ -n $ntstatus ]] || { echo "Unable to find ntstatus.h" >&2; exit 1; }

declare -A errors

{
	echo "// Code generated by 'mkerrors.bash'; DO NOT EDIT."
	echo
	echo "package windows"
	echo "import \"syscall\""
	echo "const ("

	while read -r line; do
		unset vtype
		if [[ $line =~ ^#define\ +([A-Z0-9_]+k?)\ +([A-Z0-9_]+\()?([A-Z][A-Z0-9_]+k?)\)? ]]; then
			key="${BASH_REMATCH[1]}"
			value="${BASH_REMATCH[3]}"
		elif [[ $line =~ ^#define\ +([A-Z0-9_]+k?)\ +([A-Z0-9_]+\()?((0x)?[0-9A-Fa-f]+)L?\)? ]]; then
			key="${BASH_REMATCH[1]}"
			value="${BASH_REMATCH[3]}"
			vtype="${BASH_REMATCH[2]}"
		elif [[ $line =~ ^#define\ +([A-Z0-9_]+k?)\ +\(\(([A-Z]+)\)((0x)?[0-9A-Fa-f]+)L?\) ]]; then
			key="${BASH_REMATCH[1]}"
			value="${BASH_REMATCH[3]}"
			vtype="${BASH_REMATCH[2]}"
		else
			continue
		fi
		[[ -n $key && -n $value ]] || continue
		[[ -z ${errors["$key"]} ]] || continue
		errors["$key"]="$value"
		if [[ -v vtype ]]; then
			if [[ $key == FACILITY_* || $key == NO_ERROR ]]; then
				vtype=""
			elif [[ $vtype == *HANDLE* || $vtype == *HRESULT* ]]; then
				vtype="Handle"
			else
				vtype="syscall.Errno"
			fi
			last_vtype="$vtype"
		else
			vtype=""
			if [[ $last_vtype == Handle && $value == NO_ERROR ]]; then
				value="S_OK"
			elif [[ $last_vtype == syscall.Errno && $value == NO_ERROR ]]; then
				value="ERROR_SUCCESS"
			fi
		fi

		echo "$key $vtype = $value"
	done < "$winerror"

	while read -r line; do
		[[ $line =~ ^#define\ (STATUS_[^\s]+)\ +\(\(NTSTATUS\)((0x)?[0-9a-fA-F]+)L?\) ]] || continue
		echo "${BASH_REMATCH[1]} NTStatus = ${BASH_REMATCH[2]}"
	done < "$ntstatus"

	echo ")"
} | gofmt > "zerrors_windows.go"
07070100000ED9000081A4000000000000000000000001645E367C00000566000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/mkknownfolderids.bash #!/bin/bash

# Copyright 2019 The Go Authors. All rights reserved.
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.

set -e
shopt -s nullglob

knownfolders="$(printf '%s\n' "/mnt/c/Program Files (x86)/Windows Kits/"/*/Include/*/um/KnownFolders.h | sort -Vr | head -n 1)"
[[ -n $knownfolders ]] || { echo "Unable to find KnownFolders.h" >&2; exit 1; }

{
	echo "// Code generated by 'mkknownfolderids.bash'; DO NOT EDIT."
	echo
	echo "package windows"
	echo "type KNOWNFOLDERID GUID"
	echo "var ("
	while read -r line; do
		[[ $line =~ DEFINE_KNOWN_FOLDER\((FOLDERID_[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+)\) ]] || continue
		printf "%s = &KNOWNFOLDERID{0x%08x, 0x%04x, 0x%04x, [8]byte{0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x}}\n" \
			"${BASH_REMATCH[1]}" $(( "${BASH_REMATCH[2]}" )) $(( "${BASH_REMATCH[3]}" )) $(( "${BASH_REMATCH[4]}" )) \
			$(( "${BASH_REMATCH[5]}" )) $(( "${BASH_REMATCH[6]}" )) $(( "${BASH_REMATCH[7]}" )) $(( "${BASH_REMATCH[8]}" )) \
			$(( "${BASH_REMATCH[9]}" )) $(( "${BASH_REMATCH[10]}" )) $(( "${BASH_REMATCH[11]}" )) $(( "${BASH_REMATCH[12]}" ))
	done < "$knownfolders"
	echo ")"
} | gofmt > "zknownfolderids_windows.go"
  07070100000EDA000081A4000000000000000000000001645E367C00000182000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/mksyscall.go  // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build generate
// +build generate

package windows

//go:generate go run golang.org/x/sys/windows/mkwinsyscall -output zsyscall_windows.go eventlog.go service.go syscall_windows.go security_windows.go setupapi_windows.go
  07070100000EDB000081A4000000000000000000000001645E367C00000266000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/race.go   // Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build windows && race
// +build windows,race

package windows

import (
	"runtime"
	"unsafe"
)

const raceenabled = true

func raceAcquire(addr unsafe.Pointer) {
	runtime.RaceAcquire(addr)
}

func raceReleaseMerge(addr unsafe.Pointer) {
	runtime.RaceReleaseMerge(addr)
}

func raceReadRange(addr unsafe.Pointer, len int) {
	runtime.RaceReadRange(addr, len)
}

func raceWriteRange(addr unsafe.Pointer, len int) {
	runtime.RaceWriteRange(addr, len)
}
  07070100000EDC000081A4000000000000000000000001645E367C000001DE000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/race0.go  // Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build windows && !race
// +build windows,!race

package windows

import (
	"unsafe"
)

const raceenabled = false

func raceAcquire(addr unsafe.Pointer) {
}

func raceReleaseMerge(addr unsafe.Pointer) {
}

func raceReadRange(addr unsafe.Pointer, len int) {
}

func raceWriteRange(addr unsafe.Pointer, len int) {
}
  07070100000EDD000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/registry  07070100000EDE000081A4000000000000000000000001645E367C00001966000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/registry/key.go   // Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build windows
// +build windows

// Package registry provides access to the Windows registry.
//
// Here is a simple example, opening a registry key and reading a string value from it.
//
//	k, err := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\Microsoft\Windows NT\CurrentVersion`, registry.QUERY_VALUE)
//	if err != nil {
//		log.Fatal(err)
//	}
//	defer k.Close()
//
//	s, _, err := k.GetStringValue("SystemRoot")
//	if err != nil {
//		log.Fatal(err)
//	}
//	fmt.Printf("Windows system root is %q\n", s)
package registry

import (
	"io"
	"runtime"
	"syscall"
	"time"
)

const (
	// Registry key security and access rights.
	// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms724878.aspx
	// for details.
	ALL_ACCESS         = 0xf003f
	CREATE_LINK        = 0x00020
	CREATE_SUB_KEY     = 0x00004
	ENUMERATE_SUB_KEYS = 0x00008
	EXECUTE            = 0x20019
	NOTIFY             = 0x00010
	QUERY_VALUE        = 0x00001
	READ               = 0x20019
	SET_VALUE          = 0x00002
	WOW64_32KEY        = 0x00200
	WOW64_64KEY        = 0x00100
	WRITE              = 0x20006
)

// Key is a handle to an open Windows registry key.
// Keys can be obtained by calling OpenKey; there are
// also some predefined root keys such as CURRENT_USER.
// Keys can be used directly in the Windows API.
type Key syscall.Handle

const (
	// Windows defines some predefined root keys that are always open.
	// An application can use these keys as entry points to the registry.
	// Normally these keys are used in OpenKey to open new keys,
	// but they can also be used anywhere a Key is required.
	CLASSES_ROOT     = Key(syscall.HKEY_CLASSES_ROOT)
	CURRENT_USER     = Key(syscall.HKEY_CURRENT_USER)
	LOCAL_MACHINE    = Key(syscall.HKEY_LOCAL_MACHINE)
	USERS            = Key(syscall.HKEY_USERS)
	CURRENT_CONFIG   = Key(syscall.HKEY_CURRENT_CONFIG)
	PERFORMANCE_DATA = Key(syscall.HKEY_PERFORMANCE_DATA)
)

// Close closes open key k.
func (k Key) Close() error {
	return syscall.RegCloseKey(syscall.Handle(k))
}

// OpenKey opens a new key with path name relative to key k.
// It accepts any open key, including CURRENT_USER and others,
// and returns the new key and an error.
// The access parameter specifies desired access rights to the
// key to be opened.
func OpenKey(k Key, path string, access uint32) (Key, error) {
	p, err := syscall.UTF16PtrFromString(path)
	if err != nil {
		return 0, err
	}
	var subkey syscall.Handle
	err = syscall.RegOpenKeyEx(syscall.Handle(k), p, 0, access, &subkey)
	if err != nil {
		return 0, err
	}
	return Key(subkey), nil
}

// OpenRemoteKey opens a predefined registry key on another
// computer pcname. The key to be opened is specified by k, but
// can only be one of LOCAL_MACHINE, PERFORMANCE_DATA or USERS.
// If pcname is "", OpenRemoteKey returns local computer key.
func OpenRemoteKey(pcname string, k Key) (Key, error) {
	var err error
	var p *uint16
	if pcname != "" {
		p, err = syscall.UTF16PtrFromString(`\\` + pcname)
		if err != nil {
			return 0, err
		}
	}
	var remoteKey syscall.Handle
	err = regConnectRegistry(p, syscall.Handle(k), &remoteKey)
	if err != nil {
		return 0, err
	}
	return Key(remoteKey), nil
}

// ReadSubKeyNames returns the names of subkeys of key k.
// The parameter n controls the number of returned names,
// analogous to the way os.File.Readdirnames works.
func (k Key) ReadSubKeyNames(n int) ([]string, error) {
	// RegEnumKeyEx must be called repeatedly and to completion.
	// During this time, this goroutine cannot migrate away from
	// its current thread. See https://golang.org/issue/49320 and
	// https://golang.org/issue/49466.
	runtime.LockOSThread()
	defer runtime.UnlockOSThread()

	names := make([]string, 0)
	// Registry key size limit is 255 bytes and described there:
	// https://msdn.microsoft.com/library/windows/desktop/ms724872.aspx
	buf := make([]uint16, 256) //plus extra room for terminating zero byte
loopItems:
	for i := uint32(0); ; i++ {
		if n > 0 {
			if len(names) == n {
				return names, nil
			}
		}
		l := uint32(len(buf))
		for {
			err := syscall.RegEnumKeyEx(syscall.Handle(k), i, &buf[0], &l, nil, nil, nil, nil)
			if err == nil {
				break
			}
			if err == syscall.ERROR_MORE_DATA {
				// Double buffer size and try again.
				l = uint32(2 * len(buf))
				buf = make([]uint16, l)
				continue
			}
			if err == _ERROR_NO_MORE_ITEMS {
				break loopItems
			}
			return names, err
		}
		names = append(names, syscall.UTF16ToString(buf[:l]))
	}
	if n > len(names) {
		return names, io.EOF
	}
	return names, nil
}

// CreateKey creates a key named path under open key k.
// CreateKey returns the new key and a boolean flag that reports
// whether the key already existed.
// The access parameter specifies the access rights for the key
// to be created.
func CreateKey(k Key, path string, access uint32) (newk Key, openedExisting bool, err error) {
	var h syscall.Handle
	var d uint32
	err = regCreateKeyEx(syscall.Handle(k), syscall.StringToUTF16Ptr(path),
		0, nil, _REG_OPTION_NON_VOLATILE, access, nil, &h, &d)
	if err != nil {
		return 0, false, err
	}
	return Key(h), d == _REG_OPENED_EXISTING_KEY, nil
}

// DeleteKey deletes the subkey path of key k and its values.
func DeleteKey(k Key, path string) error {
	return regDeleteKey(syscall.Handle(k), syscall.StringToUTF16Ptr(path))
}

// A KeyInfo describes the statistics of a key. It is returned by Stat.
type KeyInfo struct {
	SubKeyCount     uint32
	MaxSubKeyLen    uint32 // size of the key's subkey with the longest name, in Unicode characters, not including the terminating zero byte
	ValueCount      uint32
	MaxValueNameLen uint32 // size of the key's longest value name, in Unicode characters, not including the terminating zero byte
	MaxValueLen     uint32 // longest data component among the key's values, in bytes
	lastWriteTime   syscall.Filetime
}

// ModTime returns the key's last write time.
func (ki *KeyInfo) ModTime() time.Time {
	return time.Unix(0, ki.lastWriteTime.Nanoseconds())
}

// Stat retrieves information about the open key k.
func (k Key) Stat() (*KeyInfo, error) {
	var ki KeyInfo
	err := syscall.RegQueryInfoKey(syscall.Handle(k), nil, nil, nil,
		&ki.SubKeyCount, &ki.MaxSubKeyLen, nil, &ki.ValueCount,
		&ki.MaxValueNameLen, &ki.MaxValueLen, nil, &ki.lastWriteTime)
	if err != nil {
		return nil, err
	}
	return &ki, nil
}
  07070100000EDF000081A4000000000000000000000001645E367C0000013C000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/registry/mksyscall.go // Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build generate
// +build generate

package registry

//go:generate go run golang.org/x/sys/windows/mkwinsyscall -output zsyscall_windows.go syscall.go
07070100000EE0000081A4000000000000000000000001645E367C0000069B000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/registry/syscall.go   // Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build windows
// +build windows

package registry

import "syscall"

const (
	_REG_OPTION_NON_VOLATILE = 0

	_REG_CREATED_NEW_KEY     = 1
	_REG_OPENED_EXISTING_KEY = 2

	_ERROR_NO_MORE_ITEMS syscall.Errno = 259
)

func LoadRegLoadMUIString() error {
	return procRegLoadMUIStringW.Find()
}

//sys	regCreateKeyEx(key syscall.Handle, subkey *uint16, reserved uint32, class *uint16, options uint32, desired uint32, sa *syscall.SecurityAttributes, result *syscall.Handle, disposition *uint32) (regerrno error) = advapi32.RegCreateKeyExW
//sys	regDeleteKey(key syscall.Handle, subkey *uint16) (regerrno error) = advapi32.RegDeleteKeyW
//sys	regSetValueEx(key syscall.Handle, valueName *uint16, reserved uint32, vtype uint32, buf *byte, bufsize uint32) (regerrno error) = advapi32.RegSetValueExW
//sys	regEnumValue(key syscall.Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) = advapi32.RegEnumValueW
//sys	regDeleteValue(key syscall.Handle, name *uint16) (regerrno error) = advapi32.RegDeleteValueW
//sys   regLoadMUIString(key syscall.Handle, name *uint16, buf *uint16, buflen uint32, buflenCopied *uint32, flags uint32, dir *uint16) (regerrno error) = advapi32.RegLoadMUIStringW
//sys	regConnectRegistry(machinename *uint16, key syscall.Handle, result *syscall.Handle) (regerrno error) = advapi32.RegConnectRegistryW

//sys	expandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, err error) = kernel32.ExpandEnvironmentStringsW
 07070100000EE1000081A4000000000000000000000001645E367C00002DDF000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/registry/value.go // Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build windows
// +build windows

package registry

import (
	"errors"
	"io"
	"syscall"
	"unicode/utf16"
	"unsafe"
)

const (
	// Registry value types.
	NONE                       = 0
	SZ                         = 1
	EXPAND_SZ                  = 2
	BINARY                     = 3
	DWORD                      = 4
	DWORD_BIG_ENDIAN           = 5
	LINK                       = 6
	MULTI_SZ                   = 7
	RESOURCE_LIST              = 8
	FULL_RESOURCE_DESCRIPTOR   = 9
	RESOURCE_REQUIREMENTS_LIST = 10
	QWORD                      = 11
)

var (
	// ErrShortBuffer is returned when the buffer was too short for the operation.
	ErrShortBuffer = syscall.ERROR_MORE_DATA

	// ErrNotExist is returned when a registry key or value does not exist.
	ErrNotExist = syscall.ERROR_FILE_NOT_FOUND

	// ErrUnexpectedType is returned by Get*Value when the value's type was unexpected.
	ErrUnexpectedType = errors.New("unexpected key value type")
)

// GetValue retrieves the type and data for the specified value associated
// with an open key k. It fills up buffer buf and returns the retrieved
// byte count n. If buf is too small to fit the stored value it returns
// ErrShortBuffer error along with the required buffer size n.
// If no buffer is provided, it returns true and actual buffer size n.
// If no buffer is provided, GetValue returns the value's type only.
// If the value does not exist, the error returned is ErrNotExist.
//
// GetValue is a low level function. If value's type is known, use the appropriate
// Get*Value function instead.
func (k Key) GetValue(name string, buf []byte) (n int, valtype uint32, err error) {
	pname, err := syscall.UTF16PtrFromString(name)
	if err != nil {
		return 0, 0, err
	}
	var pbuf *byte
	if len(buf) > 0 {
		pbuf = (*byte)(unsafe.Pointer(&buf[0]))
	}
	l := uint32(len(buf))
	err = syscall.RegQueryValueEx(syscall.Handle(k), pname, nil, &valtype, pbuf, &l)
	if err != nil {
		return int(l), valtype, err
	}
	return int(l), valtype, nil
}

func (k Key) getValue(name string, buf []byte) (data []byte, valtype uint32, err error) {
	p, err := syscall.UTF16PtrFromString(name)
	if err != nil {
		return nil, 0, err
	}
	var t uint32
	n := uint32(len(buf))
	for {
		err = syscall.RegQueryValueEx(syscall.Handle(k), p, nil, &t, (*byte)(unsafe.Pointer(&buf[0])), &n)
		if err == nil {
			return buf[:n], t, nil
		}
		if err != syscall.ERROR_MORE_DATA {
			return nil, 0, err
		}
		if n <= uint32(len(buf)) {
			return nil, 0, err
		}
		buf = make([]byte, n)
	}
}

// GetStringValue retrieves the string value for the specified
// value name associated with an open key k. It also returns the value's type.
// If value does not exist, GetStringValue returns ErrNotExist.
// If value is not SZ or EXPAND_SZ, it will return the correct value
// type and ErrUnexpectedType.
func (k Key) GetStringValue(name string) (val string, valtype uint32, err error) {
	data, typ, err2 := k.getValue(name, make([]byte, 64))
	if err2 != nil {
		return "", typ, err2
	}
	switch typ {
	case SZ, EXPAND_SZ:
	default:
		return "", typ, ErrUnexpectedType
	}
	if len(data) == 0 {
		return "", typ, nil
	}
	u := (*[1 << 29]uint16)(unsafe.Pointer(&data[0]))[: len(data)/2 : len(data)/2]
	return syscall.UTF16ToString(u), typ, nil
}

// GetMUIStringValue retrieves the localized string value for
// the specified value name associated with an open key k.
// If the value name doesn't exist or the localized string value
// can't be resolved, GetMUIStringValue returns ErrNotExist.
// GetMUIStringValue panics if the system doesn't support
// regLoadMUIString; use LoadRegLoadMUIString to check if
// regLoadMUIString is supported before calling this function.
func (k Key) GetMUIStringValue(name string) (string, error) {
	pname, err := syscall.UTF16PtrFromString(name)
	if err != nil {
		return "", err
	}

	buf := make([]uint16, 1024)
	var buflen uint32
	var pdir *uint16

	err = regLoadMUIString(syscall.Handle(k), pname, &buf[0], uint32(len(buf)), &buflen, 0, pdir)
	if err == syscall.ERROR_FILE_NOT_FOUND { // Try fallback path

		// Try to resolve the string value using the system directory as
		// a DLL search path; this assumes the string value is of the form
		// @[path]\dllname,-strID but with no path given, e.g. @tzres.dll,-320.

		// This approach works with tzres.dll but may have to be revised
		// in the future to allow callers to provide custom search paths.

		var s string
		s, err = ExpandString("%SystemRoot%\\system32\\")
		if err != nil {
			return "", err
		}
		pdir, err = syscall.UTF16PtrFromString(s)
		if err != nil {
			return "", err
		}

		err = regLoadMUIString(syscall.Handle(k), pname, &buf[0], uint32(len(buf)), &buflen, 0, pdir)
	}

	for err == syscall.ERROR_MORE_DATA { // Grow buffer if needed
		if buflen <= uint32(len(buf)) {
			break // Buffer not growing, assume race; break
		}
		buf = make([]uint16, buflen)
		err = regLoadMUIString(syscall.Handle(k), pname, &buf[0], uint32(len(buf)), &buflen, 0, pdir)
	}

	if err != nil {
		return "", err
	}

	return syscall.UTF16ToString(buf), nil
}

// ExpandString expands environment-variable strings and replaces
// them with the values defined for the current user.
// Use ExpandString to expand EXPAND_SZ strings.
func ExpandString(value string) (string, error) {
	if value == "" {
		return "", nil
	}
	p, err := syscall.UTF16PtrFromString(value)
	if err != nil {
		return "", err
	}
	r := make([]uint16, 100)
	for {
		n, err := expandEnvironmentStrings(p, &r[0], uint32(len(r)))
		if err != nil {
			return "", err
		}
		if n <= uint32(len(r)) {
			return syscall.UTF16ToString(r[:n]), nil
		}
		r = make([]uint16, n)
	}
}

// GetStringsValue retrieves the []string value for the specified
// value name associated with an open key k. It also returns the value's type.
// If value does not exist, GetStringsValue returns ErrNotExist.
// If value is not MULTI_SZ, it will return the correct value
// type and ErrUnexpectedType.
func (k Key) GetStringsValue(name string) (val []string, valtype uint32, err error) {
	data, typ, err2 := k.getValue(name, make([]byte, 64))
	if err2 != nil {
		return nil, typ, err2
	}
	if typ != MULTI_SZ {
		return nil, typ, ErrUnexpectedType
	}
	if len(data) == 0 {
		return nil, typ, nil
	}
	p := (*[1 << 29]uint16)(unsafe.Pointer(&data[0]))[: len(data)/2 : len(data)/2]
	if len(p) == 0 {
		return nil, typ, nil
	}
	if p[len(p)-1] == 0 {
		p = p[:len(p)-1] // remove terminating null
	}
	val = make([]string, 0, 5)
	from := 0
	for i, c := range p {
		if c == 0 {
			val = append(val, string(utf16.Decode(p[from:i])))
			from = i + 1
		}
	}
	return val, typ, nil
}

// GetIntegerValue retrieves the integer value for the specified
// value name associated with an open key k. It also returns the value's type.
// If value does not exist, GetIntegerValue returns ErrNotExist.
// If value is not DWORD or QWORD, it will return the correct value
// type and ErrUnexpectedType.
func (k Key) GetIntegerValue(name string) (val uint64, valtype uint32, err error) {
	data, typ, err2 := k.getValue(name, make([]byte, 8))
	if err2 != nil {
		return 0, typ, err2
	}
	switch typ {
	case DWORD:
		if len(data) != 4 {
			return 0, typ, errors.New("DWORD value is not 4 bytes long")
		}
		var val32 uint32
		copy((*[4]byte)(unsafe.Pointer(&val32))[:], data)
		return uint64(val32), DWORD, nil
	case QWORD:
		if len(data) != 8 {
			return 0, typ, errors.New("QWORD value is not 8 bytes long")
		}
		copy((*[8]byte)(unsafe.Pointer(&val))[:], data)
		return val, QWORD, nil
	default:
		return 0, typ, ErrUnexpectedType
	}
}

// GetBinaryValue retrieves the binary value for the specified
// value name associated with an open key k. It also returns the value's type.
// If value does not exist, GetBinaryValue returns ErrNotExist.
// If value is not BINARY, it will return the correct value
// type and ErrUnexpectedType.
func (k Key) GetBinaryValue(name string) (val []byte, valtype uint32, err error) {
	data, typ, err2 := k.getValue(name, make([]byte, 64))
	if err2 != nil {
		return nil, typ, err2
	}
	if typ != BINARY {
		return nil, typ, ErrUnexpectedType
	}
	return data, typ, nil
}

func (k Key) setValue(name string, valtype uint32, data []byte) error {
	p, err := syscall.UTF16PtrFromString(name)
	if err != nil {
		return err
	}
	if len(data) == 0 {
		return regSetValueEx(syscall.Handle(k), p, 0, valtype, nil, 0)
	}
	return regSetValueEx(syscall.Handle(k), p, 0, valtype, &data[0], uint32(len(data)))
}

// SetDWordValue sets the data and type of a name value
// under key k to value and DWORD.
func (k Key) SetDWordValue(name string, value uint32) error {
	return k.setValue(name, DWORD, (*[4]byte)(unsafe.Pointer(&value))[:])
}

// SetQWordValue sets the data and type of a name value
// under key k to value and QWORD.
func (k Key) SetQWordValue(name string, value uint64) error {
	return k.setValue(name, QWORD, (*[8]byte)(unsafe.Pointer(&value))[:])
}

func (k Key) setStringValue(name string, valtype uint32, value string) error {
	v, err := syscall.UTF16FromString(value)
	if err != nil {
		return err
	}
	buf := (*[1 << 29]byte)(unsafe.Pointer(&v[0]))[: len(v)*2 : len(v)*2]
	return k.setValue(name, valtype, buf)
}

// SetStringValue sets the data and type of a name value
// under key k to value and SZ. The value must not contain a zero byte.
func (k Key) SetStringValue(name, value string) error {
	return k.setStringValue(name, SZ, value)
}

// SetExpandStringValue sets the data and type of a name value
// under key k to value and EXPAND_SZ. The value must not contain a zero byte.
func (k Key) SetExpandStringValue(name, value string) error {
	return k.setStringValue(name, EXPAND_SZ, value)
}

// SetStringsValue sets the data and type of a name value
// under key k to value and MULTI_SZ. The value strings
// must not contain a zero byte.
func (k Key) SetStringsValue(name string, value []string) error {
	ss := ""
	for _, s := range value {
		for i := 0; i < len(s); i++ {
			if s[i] == 0 {
				return errors.New("string cannot have 0 inside")
			}
		}
		ss += s + "\x00"
	}
	v := utf16.Encode([]rune(ss + "\x00"))
	buf := (*[1 << 29]byte)(unsafe.Pointer(&v[0]))[: len(v)*2 : len(v)*2]
	return k.setValue(name, MULTI_SZ, buf)
}

// SetBinaryValue sets the data and type of a name value
// under key k to value and BINARY.
func (k Key) SetBinaryValue(name string, value []byte) error {
	return k.setValue(name, BINARY, value)
}

// DeleteValue removes a named value from the key k.
func (k Key) DeleteValue(name string) error {
	return regDeleteValue(syscall.Handle(k), syscall.StringToUTF16Ptr(name))
}

// ReadValueNames returns the value names of key k.
// The parameter n controls the number of returned names,
// analogous to the way os.File.Readdirnames works.
func (k Key) ReadValueNames(n int) ([]string, error) {
	ki, err := k.Stat()
	if err != nil {
		return nil, err
	}
	names := make([]string, 0, ki.ValueCount)
	buf := make([]uint16, ki.MaxValueNameLen+1) // extra room for terminating null character
loopItems:
	for i := uint32(0); ; i++ {
		if n > 0 {
			if len(names) == n {
				return names, nil
			}
		}
		l := uint32(len(buf))
		for {
			err := regEnumValue(syscall.Handle(k), i, &buf[0], &l, nil, nil, nil, nil)
			if err == nil {
				break
			}
			if err == syscall.ERROR_MORE_DATA {
				// Double buffer size and try again.
				l = uint32(2 * len(buf))
				buf = make([]uint16, l)
				continue
			}
			if err == _ERROR_NO_MORE_ITEMS {
				break loopItems
			}
			return names, err
		}
		names = append(names, syscall.UTF16ToString(buf[:l]))
	}
	if n > len(names) {
		return names, io.EOF
	}
	return names, nil
}
 07070100000EE2000081A4000000000000000000000001645E367C00001188000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/registry/zsyscall_windows.go  // Code generated by 'go generate'; DO NOT EDIT.

package registry

import (
	"syscall"
	"unsafe"

	"golang.org/x/sys/windows"
)

var _ unsafe.Pointer

// Do the interface allocations only once for common
// Errno values.
const (
	errnoERROR_IO_PENDING = 997
)

var (
	errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING)
	errERROR_EINVAL     error = syscall.EINVAL
)

// errnoErr returns common boxed Errno values, to prevent
// allocations at runtime.
func errnoErr(e syscall.Errno) error {
	switch e {
	case 0:
		return errERROR_EINVAL
	case errnoERROR_IO_PENDING:
		return errERROR_IO_PENDING
	}
	// TODO: add more here, after collecting data on the common
	// error values see on Windows. (perhaps when running
	// all.bat?)
	return e
}

var (
	modadvapi32 = windows.NewLazySystemDLL("advapi32.dll")
	modkernel32 = windows.NewLazySystemDLL("kernel32.dll")

	procRegConnectRegistryW       = modadvapi32.NewProc("RegConnectRegistryW")
	procRegCreateKeyExW           = modadvapi32.NewProc("RegCreateKeyExW")
	procRegDeleteKeyW             = modadvapi32.NewProc("RegDeleteKeyW")
	procRegDeleteValueW           = modadvapi32.NewProc("RegDeleteValueW")
	procRegEnumValueW             = modadvapi32.NewProc("RegEnumValueW")
	procRegLoadMUIStringW         = modadvapi32.NewProc("RegLoadMUIStringW")
	procRegSetValueExW            = modadvapi32.NewProc("RegSetValueExW")
	procExpandEnvironmentStringsW = modkernel32.NewProc("ExpandEnvironmentStringsW")
)

func regConnectRegistry(machinename *uint16, key syscall.Handle, result *syscall.Handle) (regerrno error) {
	r0, _, _ := syscall.Syscall(procRegConnectRegistryW.Addr(), 3, uintptr(unsafe.Pointer(machinename)), uintptr(key), uintptr(unsafe.Pointer(result)))
	if r0 != 0 {
		regerrno = syscall.Errno(r0)
	}
	return
}

func regCreateKeyEx(key syscall.Handle, subkey *uint16, reserved uint32, class *uint16, options uint32, desired uint32, sa *syscall.SecurityAttributes, result *syscall.Handle, disposition *uint32) (regerrno error) {
	r0, _, _ := syscall.Syscall9(procRegCreateKeyExW.Addr(), 9, uintptr(key), uintptr(unsafe.Pointer(subkey)), uintptr(reserved), uintptr(unsafe.Pointer(class)), uintptr(options), uintptr(desired), uintptr(unsafe.Pointer(sa)), uintptr(unsafe.Pointer(result)), uintptr(unsafe.Pointer(disposition)))
	if r0 != 0 {
		regerrno = syscall.Errno(r0)
	}
	return
}

func regDeleteKey(key syscall.Handle, subkey *uint16) (regerrno error) {
	r0, _, _ := syscall.Syscall(procRegDeleteKeyW.Addr(), 2, uintptr(key), uintptr(unsafe.Pointer(subkey)), 0)
	if r0 != 0 {
		regerrno = syscall.Errno(r0)
	}
	return
}

func regDeleteValue(key syscall.Handle, name *uint16) (regerrno error) {
	r0, _, _ := syscall.Syscall(procRegDeleteValueW.Addr(), 2, uintptr(key), uintptr(unsafe.Pointer(name)), 0)
	if r0 != 0 {
		regerrno = syscall.Errno(r0)
	}
	return
}

func regEnumValue(key syscall.Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) {
	r0, _, _ := syscall.Syscall9(procRegEnumValueW.Addr(), 8, uintptr(key), uintptr(index), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(valtype)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(buflen)), 0)
	if r0 != 0 {
		regerrno = syscall.Errno(r0)
	}
	return
}

func regLoadMUIString(key syscall.Handle, name *uint16, buf *uint16, buflen uint32, buflenCopied *uint32, flags uint32, dir *uint16) (regerrno error) {
	r0, _, _ := syscall.Syscall9(procRegLoadMUIStringW.Addr(), 7, uintptr(key), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buf)), uintptr(buflen), uintptr(unsafe.Pointer(buflenCopied)), uintptr(flags), uintptr(unsafe.Pointer(dir)), 0, 0)
	if r0 != 0 {
		regerrno = syscall.Errno(r0)
	}
	return
}

func regSetValueEx(key syscall.Handle, valueName *uint16, reserved uint32, vtype uint32, buf *byte, bufsize uint32) (regerrno error) {
	r0, _, _ := syscall.Syscall6(procRegSetValueExW.Addr(), 6, uintptr(key), uintptr(unsafe.Pointer(valueName)), uintptr(reserved), uintptr(vtype), uintptr(unsafe.Pointer(buf)), uintptr(bufsize))
	if r0 != 0 {
		regerrno = syscall.Errno(r0)
	}
	return
}

func expandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, err error) {
	r0, _, e1 := syscall.Syscall(procExpandEnvironmentStringsW.Addr(), 3, uintptr(unsafe.Pointer(src)), uintptr(unsafe.Pointer(dst)), uintptr(size))
	n = uint32(r0)
	if n == 0 {
		err = errnoErr(e1)
	}
	return
}
07070100000EE3000081A4000000000000000000000001645E367C0000D0F5000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/security_windows.go   // Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package windows

import (
	"syscall"
	"unsafe"

	"golang.org/x/sys/internal/unsafeheader"
)

const (
	NameUnknown          = 0
	NameFullyQualifiedDN = 1
	NameSamCompatible    = 2
	NameDisplay          = 3
	NameUniqueId         = 6
	NameCanonical        = 7
	NameUserPrincipal    = 8
	NameCanonicalEx      = 9
	NameServicePrincipal = 10
	NameDnsDomain        = 12
)

// This function returns 1 byte BOOLEAN rather than the 4 byte BOOL.
// http://blogs.msdn.com/b/drnick/archive/2007/12/19/windows-and-upn-format-credentials.aspx
//sys	TranslateName(accName *uint16, accNameFormat uint32, desiredNameFormat uint32, translatedName *uint16, nSize *uint32) (err error) [failretval&0xff==0] = secur32.TranslateNameW
//sys	GetUserNameEx(nameFormat uint32, nameBuffre *uint16, nSize *uint32) (err error) [failretval&0xff==0] = secur32.GetUserNameExW

// TranslateAccountName converts a directory service
// object name from one format to another.
func TranslateAccountName(username string, from, to uint32, initSize int) (string, error) {
	u, e := UTF16PtrFromString(username)
	if e != nil {
		return "", e
	}
	n := uint32(50)
	for {
		b := make([]uint16, n)
		e = TranslateName(u, from, to, &b[0], &n)
		if e == nil {
			return UTF16ToString(b[:n]), nil
		}
		if e != ERROR_INSUFFICIENT_BUFFER {
			return "", e
		}
		if n <= uint32(len(b)) {
			return "", e
		}
	}
}

const (
	// do not reorder
	NetSetupUnknownStatus = iota
	NetSetupUnjoined
	NetSetupWorkgroupName
	NetSetupDomainName
)

type UserInfo10 struct {
	Name       *uint16
	Comment    *uint16
	UsrComment *uint16
	FullName   *uint16
}

//sys	NetUserGetInfo(serverName *uint16, userName *uint16, level uint32, buf **byte) (neterr error) = netapi32.NetUserGetInfo
//sys	NetGetJoinInformation(server *uint16, name **uint16, bufType *uint32) (neterr error) = netapi32.NetGetJoinInformation
//sys	NetApiBufferFree(buf *byte) (neterr error) = netapi32.NetApiBufferFree

const (
	// do not reorder
	SidTypeUser = 1 + iota
	SidTypeGroup
	SidTypeDomain
	SidTypeAlias
	SidTypeWellKnownGroup
	SidTypeDeletedAccount
	SidTypeInvalid
	SidTypeUnknown
	SidTypeComputer
	SidTypeLabel
)

type SidIdentifierAuthority struct {
	Value [6]byte
}

var (
	SECURITY_NULL_SID_AUTHORITY        = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 0}}
	SECURITY_WORLD_SID_AUTHORITY       = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 1}}
	SECURITY_LOCAL_SID_AUTHORITY       = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 2}}
	SECURITY_CREATOR_SID_AUTHORITY     = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 3}}
	SECURITY_NON_UNIQUE_AUTHORITY      = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 4}}
	SECURITY_NT_AUTHORITY              = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 5}}
	SECURITY_MANDATORY_LABEL_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 16}}
)

const (
	SECURITY_NULL_RID                   = 0
	SECURITY_WORLD_RID                  = 0
	SECURITY_LOCAL_RID                  = 0
	SECURITY_CREATOR_OWNER_RID          = 0
	SECURITY_CREATOR_GROUP_RID          = 1
	SECURITY_DIALUP_RID                 = 1
	SECURITY_NETWORK_RID                = 2
	SECURITY_BATCH_RID                  = 3
	SECURITY_INTERACTIVE_RID            = 4
	SECURITY_LOGON_IDS_RID              = 5
	SECURITY_SERVICE_RID                = 6
	SECURITY_LOCAL_SYSTEM_RID           = 18
	SECURITY_BUILTIN_DOMAIN_RID         = 32
	SECURITY_PRINCIPAL_SELF_RID         = 10
	SECURITY_CREATOR_OWNER_SERVER_RID   = 0x2
	SECURITY_CREATOR_GROUP_SERVER_RID   = 0x3
	SECURITY_LOGON_IDS_RID_COUNT        = 0x3
	SECURITY_ANONYMOUS_LOGON_RID        = 0x7
	SECURITY_PROXY_RID                  = 0x8
	SECURITY_ENTERPRISE_CONTROLLERS_RID = 0x9
	SECURITY_SERVER_LOGON_RID           = SECURITY_ENTERPRISE_CONTROLLERS_RID
	SECURITY_AUTHENTICATED_USER_RID     = 0xb
	SECURITY_RESTRICTED_CODE_RID        = 0xc
	SECURITY_NT_NON_UNIQUE_RID          = 0x15
)

// Predefined domain-relative RIDs for local groups.
// See https://msdn.microsoft.com/en-us/library/windows/desktop/aa379649(v=vs.85).aspx
const (
	DOMAIN_ALIAS_RID_ADMINS                         = 0x220
	DOMAIN_ALIAS_RID_USERS                          = 0x221
	DOMAIN_ALIAS_RID_GUESTS                         = 0x222
	DOMAIN_ALIAS_RID_POWER_USERS                    = 0x223
	DOMAIN_ALIAS_RID_ACCOUNT_OPS                    = 0x224
	DOMAIN_ALIAS_RID_SYSTEM_OPS                     = 0x225
	DOMAIN_ALIAS_RID_PRINT_OPS                      = 0x226
	DOMAIN_ALIAS_RID_BACKUP_OPS                     = 0x227
	DOMAIN_ALIAS_RID_REPLICATOR                     = 0x228
	DOMAIN_ALIAS_RID_RAS_SERVERS                    = 0x229
	DOMAIN_ALIAS_RID_PREW2KCOMPACCESS               = 0x22a
	DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS           = 0x22b
	DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS      = 0x22c
	DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS = 0x22d
	DOMAIN_ALIAS_RID_MONITORING_USERS               = 0x22e
	DOMAIN_ALIAS_RID_LOGGING_USERS                  = 0x22f
	DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS            = 0x230
	DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS             = 0x231
	DOMAIN_ALIAS_RID_DCOM_USERS                     = 0x232
	DOMAIN_ALIAS_RID_IUSERS                         = 0x238
	DOMAIN_ALIAS_RID_CRYPTO_OPERATORS               = 0x239
	DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP     = 0x23b
	DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP = 0x23c
	DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP        = 0x23d
	DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP      = 0x23e
)

//sys	LookupAccountSid(systemName *uint16, sid *SID, name *uint16, nameLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) = advapi32.LookupAccountSidW
//sys	LookupAccountName(systemName *uint16, accountName *uint16, sid *SID, sidLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) = advapi32.LookupAccountNameW
//sys	ConvertSidToStringSid(sid *SID, stringSid **uint16) (err error) = advapi32.ConvertSidToStringSidW
//sys	ConvertStringSidToSid(stringSid *uint16, sid **SID) (err error) = advapi32.ConvertStringSidToSidW
//sys	GetLengthSid(sid *SID) (len uint32) = advapi32.GetLengthSid
//sys	CopySid(destSidLen uint32, destSid *SID, srcSid *SID) (err error) = advapi32.CopySid
//sys	AllocateAndInitializeSid(identAuth *SidIdentifierAuthority, subAuth byte, subAuth0 uint32, subAuth1 uint32, subAuth2 uint32, subAuth3 uint32, subAuth4 uint32, subAuth5 uint32, subAuth6 uint32, subAuth7 uint32, sid **SID) (err error) = advapi32.AllocateAndInitializeSid
//sys	createWellKnownSid(sidType WELL_KNOWN_SID_TYPE, domainSid *SID, sid *SID, sizeSid *uint32) (err error) = advapi32.CreateWellKnownSid
//sys	isWellKnownSid(sid *SID, sidType WELL_KNOWN_SID_TYPE) (isWellKnown bool) = advapi32.IsWellKnownSid
//sys	FreeSid(sid *SID) (err error) [failretval!=0] = advapi32.FreeSid
//sys	EqualSid(sid1 *SID, sid2 *SID) (isEqual bool) = advapi32.EqualSid
//sys	getSidIdentifierAuthority(sid *SID) (authority *SidIdentifierAuthority) = advapi32.GetSidIdentifierAuthority
//sys	getSidSubAuthorityCount(sid *SID) (count *uint8) = advapi32.GetSidSubAuthorityCount
//sys	getSidSubAuthority(sid *SID, index uint32) (subAuthority *uint32) = advapi32.GetSidSubAuthority
//sys	isValidSid(sid *SID) (isValid bool) = advapi32.IsValidSid

// The security identifier (SID) structure is a variable-length
// structure used to uniquely identify users or groups.
type SID struct{}

// StringToSid converts a string-format security identifier
// SID into a valid, functional SID.
func StringToSid(s string) (*SID, error) {
	var sid *SID
	p, e := UTF16PtrFromString(s)
	if e != nil {
		return nil, e
	}
	e = ConvertStringSidToSid(p, &sid)
	if e != nil {
		return nil, e
	}
	defer LocalFree((Handle)(unsafe.Pointer(sid)))
	return sid.Copy()
}

// LookupSID retrieves a security identifier SID for the account
// and the name of the domain on which the account was found.
// System specify target computer to search.
func LookupSID(system, account string) (sid *SID, domain string, accType uint32, err error) {
	if len(account) == 0 {
		return nil, "", 0, syscall.EINVAL
	}
	acc, e := UTF16PtrFromString(account)
	if e != nil {
		return nil, "", 0, e
	}
	var sys *uint16
	if len(system) > 0 {
		sys, e = UTF16PtrFromString(system)
		if e != nil {
			return nil, "", 0, e
		}
	}
	n := uint32(50)
	dn := uint32(50)
	for {
		b := make([]byte, n)
		db := make([]uint16, dn)
		sid = (*SID)(unsafe.Pointer(&b[0]))
		e = LookupAccountName(sys, acc, sid, &n, &db[0], &dn, &accType)
		if e == nil {
			return sid, UTF16ToString(db), accType, nil
		}
		if e != ERROR_INSUFFICIENT_BUFFER {
			return nil, "", 0, e
		}
		if n <= uint32(len(b)) {
			return nil, "", 0, e
		}
	}
}

// String converts SID to a string format suitable for display, storage, or transmission.
func (sid *SID) String() string {
	var s *uint16
	e := ConvertSidToStringSid(sid, &s)
	if e != nil {
		return ""
	}
	defer LocalFree((Handle)(unsafe.Pointer(s)))
	return UTF16ToString((*[256]uint16)(unsafe.Pointer(s))[:])
}

// Len returns the length, in bytes, of a valid security identifier SID.
func (sid *SID) Len() int {
	return int(GetLengthSid(sid))
}

// Copy creates a duplicate of security identifier SID.
func (sid *SID) Copy() (*SID, error) {
	b := make([]byte, sid.Len())
	sid2 := (*SID)(unsafe.Pointer(&b[0]))
	e := CopySid(uint32(len(b)), sid2, sid)
	if e != nil {
		return nil, e
	}
	return sid2, nil
}

// IdentifierAuthority returns the identifier authority of the SID.
func (sid *SID) IdentifierAuthority() SidIdentifierAuthority {
	return *getSidIdentifierAuthority(sid)
}

// SubAuthorityCount returns the number of sub-authorities in the SID.
func (sid *SID) SubAuthorityCount() uint8 {
	return *getSidSubAuthorityCount(sid)
}

// SubAuthority returns the sub-authority of the SID as specified by
// the index, which must be less than sid.SubAuthorityCount().
func (sid *SID) SubAuthority(idx uint32) uint32 {
	if idx >= uint32(sid.SubAuthorityCount()) {
		panic("sub-authority index out of range")
	}
	return *getSidSubAuthority(sid, idx)
}

// IsValid returns whether the SID has a valid revision and length.
func (sid *SID) IsValid() bool {
	return isValidSid(sid)
}

// Equals compares two SIDs for equality.
func (sid *SID) Equals(sid2 *SID) bool {
	return EqualSid(sid, sid2)
}

// IsWellKnown determines whether the SID matches the well-known sidType.
func (sid *SID) IsWellKnown(sidType WELL_KNOWN_SID_TYPE) bool {
	return isWellKnownSid(sid, sidType)
}

// LookupAccount retrieves the name of the account for this SID
// and the name of the first domain on which this SID is found.
// System specify target computer to search for.
func (sid *SID) LookupAccount(system string) (account, domain string, accType uint32, err error) {
	var sys *uint16
	if len(system) > 0 {
		sys, err = UTF16PtrFromString(system)
		if err != nil {
			return "", "", 0, err
		}
	}
	n := uint32(50)
	dn := uint32(50)
	for {
		b := make([]uint16, n)
		db := make([]uint16, dn)
		e := LookupAccountSid(sys, sid, &b[0], &n, &db[0], &dn, &accType)
		if e == nil {
			return UTF16ToString(b), UTF16ToString(db), accType, nil
		}
		if e != ERROR_INSUFFICIENT_BUFFER {
			return "", "", 0, e
		}
		if n <= uint32(len(b)) {
			return "", "", 0, e
		}
	}
}

// Various types of pre-specified SIDs that can be synthesized and compared at runtime.
type WELL_KNOWN_SID_TYPE uint32

const (
	WinNullSid                                    = 0
	WinWorldSid                                   = 1
	WinLocalSid                                   = 2
	WinCreatorOwnerSid                            = 3
	WinCreatorGroupSid                            = 4
	WinCreatorOwnerServerSid                      = 5
	WinCreatorGroupServerSid                      = 6
	WinNtAuthoritySid                             = 7
	WinDialupSid                                  = 8
	WinNetworkSid                                 = 9
	WinBatchSid                                   = 10
	WinInteractiveSid                             = 11
	WinServiceSid                                 = 12
	WinAnonymousSid                               = 13
	WinProxySid                                   = 14
	WinEnterpriseControllersSid                   = 15
	WinSelfSid                                    = 16
	WinAuthenticatedUserSid                       = 17
	WinRestrictedCodeSid                          = 18
	WinTerminalServerSid                          = 19
	WinRemoteLogonIdSid                           = 20
	WinLogonIdsSid                                = 21
	WinLocalSystemSid                             = 22
	WinLocalServiceSid                            = 23
	WinNetworkServiceSid                          = 24
	WinBuiltinDomainSid                           = 25
	WinBuiltinAdministratorsSid                   = 26
	WinBuiltinUsersSid                            = 27
	WinBuiltinGuestsSid                           = 28
	WinBuiltinPowerUsersSid                       = 29
	WinBuiltinAccountOperatorsSid                 = 30
	WinBuiltinSystemOperatorsSid                  = 31
	WinBuiltinPrintOperatorsSid                   = 32
	WinBuiltinBackupOperatorsSid                  = 33
	WinBuiltinReplicatorSid                       = 34
	WinBuiltinPreWindows2000CompatibleAccessSid   = 35
	WinBuiltinRemoteDesktopUsersSid               = 36
	WinBuiltinNetworkConfigurationOperatorsSid    = 37
	WinAccountAdministratorSid                    = 38
	WinAccountGuestSid                            = 39
	WinAccountKrbtgtSid                           = 40
	WinAccountDomainAdminsSid                     = 41
	WinAccountDomainUsersSid                      = 42
	WinAccountDomainGuestsSid                     = 43
	WinAccountComputersSid                        = 44
	WinAccountControllersSid                      = 45
	WinAccountCertAdminsSid                       = 46
	WinAccountSchemaAdminsSid                     = 47
	WinAccountEnterpriseAdminsSid                 = 48
	WinAccountPolicyAdminsSid                     = 49
	WinAccountRasAndIasServersSid                 = 50
	WinNTLMAuthenticationSid                      = 51
	WinDigestAuthenticationSid                    = 52
	WinSChannelAuthenticationSid                  = 53
	WinThisOrganizationSid                        = 54
	WinOtherOrganizationSid                       = 55
	WinBuiltinIncomingForestTrustBuildersSid      = 56
	WinBuiltinPerfMonitoringUsersSid              = 57
	WinBuiltinPerfLoggingUsersSid                 = 58
	WinBuiltinAuthorizationAccessSid              = 59
	WinBuiltinTerminalServerLicenseServersSid     = 60
	WinBuiltinDCOMUsersSid                        = 61
	WinBuiltinIUsersSid                           = 62
	WinIUserSid                                   = 63
	WinBuiltinCryptoOperatorsSid                  = 64
	WinUntrustedLabelSid                          = 65
	WinLowLabelSid                                = 66
	WinMediumLabelSid                             = 67
	WinHighLabelSid                               = 68
	WinSystemLabelSid                             = 69
	WinWriteRestrictedCodeSid                     = 70
	WinCreatorOwnerRightsSid                      = 71
	WinCacheablePrincipalsGroupSid                = 72
	WinNonCacheablePrincipalsGroupSid             = 73
	WinEnterpriseReadonlyControllersSid           = 74
	WinAccountReadonlyControllersSid              = 75
	WinBuiltinEventLogReadersGroup                = 76
	WinNewEnterpriseReadonlyControllersSid        = 77
	WinBuiltinCertSvcDComAccessGroup              = 78
	WinMediumPlusLabelSid                         = 79
	WinLocalLogonSid                              = 80
	WinConsoleLogonSid                            = 81
	WinThisOrganizationCertificateSid             = 82
	WinApplicationPackageAuthoritySid             = 83
	WinBuiltinAnyPackageSid                       = 84
	WinCapabilityInternetClientSid                = 85
	WinCapabilityInternetClientServerSid          = 86
	WinCapabilityPrivateNetworkClientServerSid    = 87
	WinCapabilityPicturesLibrarySid               = 88
	WinCapabilityVideosLibrarySid                 = 89
	WinCapabilityMusicLibrarySid                  = 90
	WinCapabilityDocumentsLibrarySid              = 91
	WinCapabilitySharedUserCertificatesSid        = 92
	WinCapabilityEnterpriseAuthenticationSid      = 93
	WinCapabilityRemovableStorageSid              = 94
	WinBuiltinRDSRemoteAccessServersSid           = 95
	WinBuiltinRDSEndpointServersSid               = 96
	WinBuiltinRDSManagementServersSid             = 97
	WinUserModeDriversSid                         = 98
	WinBuiltinHyperVAdminsSid                     = 99
	WinAccountCloneableControllersSid             = 100
	WinBuiltinAccessControlAssistanceOperatorsSid = 101
	WinBuiltinRemoteManagementUsersSid            = 102
	WinAuthenticationAuthorityAssertedSid         = 103
	WinAuthenticationServiceAssertedSid           = 104
	WinLocalAccountSid                            = 105
	WinLocalAccountAndAdministratorSid            = 106
	WinAccountProtectedUsersSid                   = 107
	WinCapabilityAppointmentsSid                  = 108
	WinCapabilityContactsSid                      = 109
	WinAccountDefaultSystemManagedSid             = 110
	WinBuiltinDefaultSystemManagedGroupSid        = 111
	WinBuiltinStorageReplicaAdminsSid             = 112
	WinAccountKeyAdminsSid                        = 113
	WinAccountEnterpriseKeyAdminsSid              = 114
	WinAuthenticationKeyTrustSid                  = 115
	WinAuthenticationKeyPropertyMFASid            = 116
	WinAuthenticationKeyPropertyAttestationSid    = 117
	WinAuthenticationFreshKeyAuthSid              = 118
	WinBuiltinDeviceOwnersSid                     = 119
)

// Creates a SID for a well-known predefined alias, generally using the constants of the form
// Win*Sid, for the local machine.
func CreateWellKnownSid(sidType WELL_KNOWN_SID_TYPE) (*SID, error) {
	return CreateWellKnownDomainSid(sidType, nil)
}

// Creates a SID for a well-known predefined alias, generally using the constants of the form
// Win*Sid, for the domain specified by the domainSid parameter.
func CreateWellKnownDomainSid(sidType WELL_KNOWN_SID_TYPE, domainSid *SID) (*SID, error) {
	n := uint32(50)
	for {
		b := make([]byte, n)
		sid := (*SID)(unsafe.Pointer(&b[0]))
		err := createWellKnownSid(sidType, domainSid, sid, &n)
		if err == nil {
			return sid, nil
		}
		if err != ERROR_INSUFFICIENT_BUFFER {
			return nil, err
		}
		if n <= uint32(len(b)) {
			return nil, err
		}
	}
}

const (
	// do not reorder
	TOKEN_ASSIGN_PRIMARY = 1 << iota
	TOKEN_DUPLICATE
	TOKEN_IMPERSONATE
	TOKEN_QUERY
	TOKEN_QUERY_SOURCE
	TOKEN_ADJUST_PRIVILEGES
	TOKEN_ADJUST_GROUPS
	TOKEN_ADJUST_DEFAULT
	TOKEN_ADJUST_SESSIONID

	TOKEN_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED |
		TOKEN_ASSIGN_PRIMARY |
		TOKEN_DUPLICATE |
		TOKEN_IMPERSONATE |
		TOKEN_QUERY |
		TOKEN_QUERY_SOURCE |
		TOKEN_ADJUST_PRIVILEGES |
		TOKEN_ADJUST_GROUPS |
		TOKEN_ADJUST_DEFAULT |
		TOKEN_ADJUST_SESSIONID
	TOKEN_READ  = STANDARD_RIGHTS_READ | TOKEN_QUERY
	TOKEN_WRITE = STANDARD_RIGHTS_WRITE |
		TOKEN_ADJUST_PRIVILEGES |
		TOKEN_ADJUST_GROUPS |
		TOKEN_ADJUST_DEFAULT
	TOKEN_EXECUTE = STANDARD_RIGHTS_EXECUTE
)

const (
	// do not reorder
	TokenUser = 1 + iota
	TokenGroups
	TokenPrivileges
	TokenOwner
	TokenPrimaryGroup
	TokenDefaultDacl
	TokenSource
	TokenType
	TokenImpersonationLevel
	TokenStatistics
	TokenRestrictedSids
	TokenSessionId
	TokenGroupsAndPrivileges
	TokenSessionReference
	TokenSandBoxInert
	TokenAuditPolicy
	TokenOrigin
	TokenElevationType
	TokenLinkedToken
	TokenElevation
	TokenHasRestrictions
	TokenAccessInformation
	TokenVirtualizationAllowed
	TokenVirtualizationEnabled
	TokenIntegrityLevel
	TokenUIAccess
	TokenMandatoryPolicy
	TokenLogonSid
	MaxTokenInfoClass
)

// Group attributes inside of Tokengroups.Groups[i].Attributes
const (
	SE_GROUP_MANDATORY          = 0x00000001
	SE_GROUP_ENABLED_BY_DEFAULT = 0x00000002
	SE_GROUP_ENABLED            = 0x00000004
	SE_GROUP_OWNER              = 0x00000008
	SE_GROUP_USE_FOR_DENY_ONLY  = 0x00000010
	SE_GROUP_INTEGRITY          = 0x00000020
	SE_GROUP_INTEGRITY_ENABLED  = 0x00000040
	SE_GROUP_LOGON_ID           = 0xC0000000
	SE_GROUP_RESOURCE           = 0x20000000
	SE_GROUP_VALID_ATTRIBUTES   = SE_GROUP_MANDATORY | SE_GROUP_ENABLED_BY_DEFAULT | SE_GROUP_ENABLED | SE_GROUP_OWNER | SE_GROUP_USE_FOR_DENY_ONLY | SE_GROUP_LOGON_ID | SE_GROUP_RESOURCE | SE_GROUP_INTEGRITY | SE_GROUP_INTEGRITY_ENABLED
)

// Privilege attributes
const (
	SE_PRIVILEGE_ENABLED_BY_DEFAULT = 0x00000001
	SE_PRIVILEGE_ENABLED            = 0x00000002
	SE_PRIVILEGE_REMOVED            = 0x00000004
	SE_PRIVILEGE_USED_FOR_ACCESS    = 0x80000000
	SE_PRIVILEGE_VALID_ATTRIBUTES   = SE_PRIVILEGE_ENABLED_BY_DEFAULT | SE_PRIVILEGE_ENABLED | SE_PRIVILEGE_REMOVED | SE_PRIVILEGE_USED_FOR_ACCESS
)

// Token types
const (
	TokenPrimary       = 1
	TokenImpersonation = 2
)

// Impersonation levels
const (
	SecurityAnonymous      = 0
	SecurityIdentification = 1
	SecurityImpersonation  = 2
	SecurityDelegation     = 3
)

type LUID struct {
	LowPart  uint32
	HighPart int32
}

type LUIDAndAttributes struct {
	Luid       LUID
	Attributes uint32
}

type SIDAndAttributes struct {
	Sid        *SID
	Attributes uint32
}

type Tokenuser struct {
	User SIDAndAttributes
}

type Tokenprimarygroup struct {
	PrimaryGroup *SID
}

type Tokengroups struct {
	GroupCount uint32
	Groups     [1]SIDAndAttributes // Use AllGroups() for iterating.
}

// AllGroups returns a slice that can be used to iterate over the groups in g.
func (g *Tokengroups) AllGroups() []SIDAndAttributes {
	return (*[(1 << 28) - 1]SIDAndAttributes)(unsafe.Pointer(&g.Groups[0]))[:g.GroupCount:g.GroupCount]
}

type Tokenprivileges struct {
	PrivilegeCount uint32
	Privileges     [1]LUIDAndAttributes // Use AllPrivileges() for iterating.
}

// AllPrivileges returns a slice that can be used to iterate over the privileges in p.
func (p *Tokenprivileges) AllPrivileges() []LUIDAndAttributes {
	return (*[(1 << 27) - 1]LUIDAndAttributes)(unsafe.Pointer(&p.Privileges[0]))[:p.PrivilegeCount:p.PrivilegeCount]
}

type Tokenmandatorylabel struct {
	Label SIDAndAttributes
}

func (tml *Tokenmandatorylabel) Size() uint32 {
	return uint32(unsafe.Sizeof(Tokenmandatorylabel{})) + GetLengthSid(tml.Label.Sid)
}

// Authorization Functions
//sys	checkTokenMembership(tokenHandle Token, sidToCheck *SID, isMember *int32) (err error) = advapi32.CheckTokenMembership
//sys	isTokenRestricted(tokenHandle Token) (ret bool, err error) [!failretval] = advapi32.IsTokenRestricted
//sys	OpenProcessToken(process Handle, access uint32, token *Token) (err error) = advapi32.OpenProcessToken
//sys	OpenThreadToken(thread Handle, access uint32, openAsSelf bool, token *Token) (err error) = advapi32.OpenThreadToken
//sys	ImpersonateSelf(impersonationlevel uint32) (err error) = advapi32.ImpersonateSelf
//sys	RevertToSelf() (err error) = advapi32.RevertToSelf
//sys	SetThreadToken(thread *Handle, token Token) (err error) = advapi32.SetThreadToken
//sys	LookupPrivilegeValue(systemname *uint16, name *uint16, luid *LUID) (err error) = advapi32.LookupPrivilegeValueW
//sys	AdjustTokenPrivileges(token Token, disableAllPrivileges bool, newstate *Tokenprivileges, buflen uint32, prevstate *Tokenprivileges, returnlen *uint32) (err error) = advapi32.AdjustTokenPrivileges
//sys	AdjustTokenGroups(token Token, resetToDefault bool, newstate *Tokengroups, buflen uint32, prevstate *Tokengroups, returnlen *uint32) (err error) = advapi32.AdjustTokenGroups
//sys	GetTokenInformation(token Token, infoClass uint32, info *byte, infoLen uint32, returnedLen *uint32) (err error) = advapi32.GetTokenInformation
//sys	SetTokenInformation(token Token, infoClass uint32, info *byte, infoLen uint32) (err error) = advapi32.SetTokenInformation
//sys	DuplicateTokenEx(existingToken Token, desiredAccess uint32, tokenAttributes *SecurityAttributes, impersonationLevel uint32, tokenType uint32, newToken *Token) (err error) = advapi32.DuplicateTokenEx
//sys	GetUserProfileDirectory(t Token, dir *uint16, dirLen *uint32) (err error) = userenv.GetUserProfileDirectoryW
//sys	getSystemDirectory(dir *uint16, dirLen uint32) (len uint32, err error) = kernel32.GetSystemDirectoryW
//sys	getWindowsDirectory(dir *uint16, dirLen uint32) (len uint32, err error) = kernel32.GetWindowsDirectoryW
//sys	getSystemWindowsDirectory(dir *uint16, dirLen uint32) (len uint32, err error) = kernel32.GetSystemWindowsDirectoryW

// An access token contains the security information for a logon session.
// The system creates an access token when a user logs on, and every
// process executed on behalf of the user has a copy of the token.
// The token identifies the user, the user's groups, and the user's
// privileges. The system uses the token to control access to securable
// objects and to control the ability of the user to perform various
// system-related operations on the local computer.
type Token Handle

// OpenCurrentProcessToken opens an access token associated with current
// process with TOKEN_QUERY access. It is a real token that needs to be closed.
//
// Deprecated: Explicitly call OpenProcessToken(CurrentProcess(), ...)
// with the desired access instead, or use GetCurrentProcessToken for a
// TOKEN_QUERY token.
func OpenCurrentProcessToken() (Token, error) {
	var token Token
	err := OpenProcessToken(CurrentProcess(), TOKEN_QUERY, &token)
	return token, err
}

// GetCurrentProcessToken returns the access token associated with
// the current process. It is a pseudo token that does not need
// to be closed.
func GetCurrentProcessToken() Token {
	return Token(^uintptr(4 - 1))
}

// GetCurrentThreadToken return the access token associated with
// the current thread. It is a pseudo token that does not need
// to be closed.
func GetCurrentThreadToken() Token {
	return Token(^uintptr(5 - 1))
}

// GetCurrentThreadEffectiveToken returns the effective access token
// associated with the current thread. It is a pseudo token that does
// not need to be closed.
func GetCurrentThreadEffectiveToken() Token {
	return Token(^uintptr(6 - 1))
}

// Close releases access to access token.
func (t Token) Close() error {
	return CloseHandle(Handle(t))
}

// getInfo retrieves a specified type of information about an access token.
func (t Token) getInfo(class uint32, initSize int) (unsafe.Pointer, error) {
	n := uint32(initSize)
	for {
		b := make([]byte, n)
		e := GetTokenInformation(t, class, &b[0], uint32(len(b)), &n)
		if e == nil {
			return unsafe.Pointer(&b[0]), nil
		}
		if e != ERROR_INSUFFICIENT_BUFFER {
			return nil, e
		}
		if n <= uint32(len(b)) {
			return nil, e
		}
	}
}

// GetTokenUser retrieves access token t user account information.
func (t Token) GetTokenUser() (*Tokenuser, error) {
	i, e := t.getInfo(TokenUser, 50)
	if e != nil {
		return nil, e
	}
	return (*Tokenuser)(i), nil
}

// GetTokenGroups retrieves group accounts associated with access token t.
func (t Token) GetTokenGroups() (*Tokengroups, error) {
	i, e := t.getInfo(TokenGroups, 50)
	if e != nil {
		return nil, e
	}
	return (*Tokengroups)(i), nil
}

// GetTokenPrimaryGroup retrieves access token t primary group information.
// A pointer to a SID structure representing a group that will become
// the primary group of any objects created by a process using this access token.
func (t Token) GetTokenPrimaryGroup() (*Tokenprimarygroup, error) {
	i, e := t.getInfo(TokenPrimaryGroup, 50)
	if e != nil {
		return nil, e
	}
	return (*Tokenprimarygroup)(i), nil
}

// GetUserProfileDirectory retrieves path to the
// root directory of the access token t user's profile.
func (t Token) GetUserProfileDirectory() (string, error) {
	n := uint32(100)
	for {
		b := make([]uint16, n)
		e := GetUserProfileDirectory(t, &b[0], &n)
		if e == nil {
			return UTF16ToString(b), nil
		}
		if e != ERROR_INSUFFICIENT_BUFFER {
			return "", e
		}
		if n <= uint32(len(b)) {
			return "", e
		}
	}
}

// IsElevated returns whether the current token is elevated from a UAC perspective.
func (token Token) IsElevated() bool {
	var isElevated uint32
	var outLen uint32
	err := GetTokenInformation(token, TokenElevation, (*byte)(unsafe.Pointer(&isElevated)), uint32(unsafe.Sizeof(isElevated)), &outLen)
	if err != nil {
		return false
	}
	return outLen == uint32(unsafe.Sizeof(isElevated)) && isElevated != 0
}

// GetLinkedToken returns the linked token, which may be an elevated UAC token.
func (token Token) GetLinkedToken() (Token, error) {
	var linkedToken Token
	var outLen uint32
	err := GetTokenInformation(token, TokenLinkedToken, (*byte)(unsafe.Pointer(&linkedToken)), uint32(unsafe.Sizeof(linkedToken)), &outLen)
	if err != nil {
		return Token(0), err
	}
	return linkedToken, nil
}

// GetSystemDirectory retrieves the path to current location of the system
// directory, which is typically, though not always, `C:\Windows\System32`.
func GetSystemDirectory() (string, error) {
	n := uint32(MAX_PATH)
	for {
		b := make([]uint16, n)
		l, e := getSystemDirectory(&b[0], n)
		if e != nil {
			return "", e
		}
		if l <= n {
			return UTF16ToString(b[:l]), nil
		}
		n = l
	}
}

// GetWindowsDirectory retrieves the path to current location of the Windows
// directory, which is typically, though not always, `C:\Windows`. This may
// be a private user directory in the case that the application is running
// under a terminal server.
func GetWindowsDirectory() (string, error) {
	n := uint32(MAX_PATH)
	for {
		b := make([]uint16, n)
		l, e := getWindowsDirectory(&b[0], n)
		if e != nil {
			return "", e
		}
		if l <= n {
			return UTF16ToString(b[:l]), nil
		}
		n = l
	}
}

// GetSystemWindowsDirectory retrieves the path to current location of the
// Windows directory, which is typically, though not always, `C:\Windows`.
func GetSystemWindowsDirectory() (string, error) {
	n := uint32(MAX_PATH)
	for {
		b := make([]uint16, n)
		l, e := getSystemWindowsDirectory(&b[0], n)
		if e != nil {
			return "", e
		}
		if l <= n {
			return UTF16ToString(b[:l]), nil
		}
		n = l
	}
}

// IsMember reports whether the access token t is a member of the provided SID.
func (t Token) IsMember(sid *SID) (bool, error) {
	var b int32
	if e := checkTokenMembership(t, sid, &b); e != nil {
		return false, e
	}
	return b != 0, nil
}

// IsRestricted reports whether the access token t is a restricted token.
func (t Token) IsRestricted() (isRestricted bool, err error) {
	isRestricted, err = isTokenRestricted(t)
	if !isRestricted && err == syscall.EINVAL {
		// If err is EINVAL, this returned ERROR_SUCCESS indicating a non-restricted token.
		err = nil
	}
	return
}

const (
	WTS_CONSOLE_CONNECT        = 0x1
	WTS_CONSOLE_DISCONNECT     = 0x2
	WTS_REMOTE_CONNECT         = 0x3
	WTS_REMOTE_DISCONNECT      = 0x4
	WTS_SESSION_LOGON          = 0x5
	WTS_SESSION_LOGOFF         = 0x6
	WTS_SESSION_LOCK           = 0x7
	WTS_SESSION_UNLOCK         = 0x8
	WTS_SESSION_REMOTE_CONTROL = 0x9
	WTS_SESSION_CREATE         = 0xa
	WTS_SESSION_TERMINATE      = 0xb
)

const (
	WTSActive       = 0
	WTSConnected    = 1
	WTSConnectQuery = 2
	WTSShadow       = 3
	WTSDisconnected = 4
	WTSIdle         = 5
	WTSListen       = 6
	WTSReset        = 7
	WTSDown         = 8
	WTSInit         = 9
)

type WTSSESSION_NOTIFICATION struct {
	Size      uint32
	SessionID uint32
}

type WTS_SESSION_INFO struct {
	SessionID         uint32
	WindowStationName *uint16
	State             uint32
}

//sys WTSQueryUserToken(session uint32, token *Token) (err error) = wtsapi32.WTSQueryUserToken
//sys WTSEnumerateSessions(handle Handle, reserved uint32, version uint32, sessions **WTS_SESSION_INFO, count *uint32) (err error) = wtsapi32.WTSEnumerateSessionsW
//sys WTSFreeMemory(ptr uintptr) = wtsapi32.WTSFreeMemory
//sys WTSGetActiveConsoleSessionId() (sessionID uint32)

type ACL struct {
	aclRevision byte
	sbz1        byte
	aclSize     uint16
	aceCount    uint16
	sbz2        uint16
}

type SECURITY_DESCRIPTOR struct {
	revision byte
	sbz1     byte
	control  SECURITY_DESCRIPTOR_CONTROL
	owner    *SID
	group    *SID
	sacl     *ACL
	dacl     *ACL
}

type SECURITY_QUALITY_OF_SERVICE struct {
	Length              uint32
	ImpersonationLevel  uint32
	ContextTrackingMode byte
	EffectiveOnly       byte
}

// Constants for the ContextTrackingMode field of SECURITY_QUALITY_OF_SERVICE.
const (
	SECURITY_STATIC_TRACKING  = 0
	SECURITY_DYNAMIC_TRACKING = 1
)

type SecurityAttributes struct {
	Length             uint32
	SecurityDescriptor *SECURITY_DESCRIPTOR
	InheritHandle      uint32
}

type SE_OBJECT_TYPE uint32

// Constants for type SE_OBJECT_TYPE
const (
	SE_UNKNOWN_OBJECT_TYPE     = 0
	SE_FILE_OBJECT             = 1
	SE_SERVICE                 = 2
	SE_PRINTER                 = 3
	SE_REGISTRY_KEY            = 4
	SE_LMSHARE                 = 5
	SE_KERNEL_OBJECT           = 6
	SE_WINDOW_OBJECT           = 7
	SE_DS_OBJECT               = 8
	SE_DS_OBJECT_ALL           = 9
	SE_PROVIDER_DEFINED_OBJECT = 10
	SE_WMIGUID_OBJECT          = 11
	SE_REGISTRY_WOW64_32KEY    = 12
	SE_REGISTRY_WOW64_64KEY    = 13
)

type SECURITY_INFORMATION uint32

// Constants for type SECURITY_INFORMATION
const (
	OWNER_SECURITY_INFORMATION            = 0x00000001
	GROUP_SECURITY_INFORMATION            = 0x00000002
	DACL_SECURITY_INFORMATION             = 0x00000004
	SACL_SECURITY_INFORMATION             = 0x00000008
	LABEL_SECURITY_INFORMATION            = 0x00000010
	ATTRIBUTE_SECURITY_INFORMATION        = 0x00000020
	SCOPE_SECURITY_INFORMATION            = 0x00000040
	BACKUP_SECURITY_INFORMATION           = 0x00010000
	PROTECTED_DACL_SECURITY_INFORMATION   = 0x80000000
	PROTECTED_SACL_SECURITY_INFORMATION   = 0x40000000
	UNPROTECTED_DACL_SECURITY_INFORMATION = 0x20000000
	UNPROTECTED_SACL_SECURITY_INFORMATION = 0x10000000
)

type SECURITY_DESCRIPTOR_CONTROL uint16

// Constants for type SECURITY_DESCRIPTOR_CONTROL
const (
	SE_OWNER_DEFAULTED       = 0x0001
	SE_GROUP_DEFAULTED       = 0x0002
	SE_DACL_PRESENT          = 0x0004
	SE_DACL_DEFAULTED        = 0x0008
	SE_SACL_PRESENT          = 0x0010
	SE_SACL_DEFAULTED        = 0x0020
	SE_DACL_AUTO_INHERIT_REQ = 0x0100
	SE_SACL_AUTO_INHERIT_REQ = 0x0200
	SE_DACL_AUTO_INHERITED   = 0x0400
	SE_SACL_AUTO_INHERITED   = 0x0800
	SE_DACL_PROTECTED        = 0x1000
	SE_SACL_PROTECTED        = 0x2000
	SE_RM_CONTROL_VALID      = 0x4000
	SE_SELF_RELATIVE         = 0x8000
)

type ACCESS_MASK uint32

// Constants for type ACCESS_MASK
const (
	DELETE                   = 0x00010000
	READ_CONTROL             = 0x00020000
	WRITE_DAC                = 0x00040000
	WRITE_OWNER              = 0x00080000
	SYNCHRONIZE              = 0x00100000
	STANDARD_RIGHTS_REQUIRED = 0x000F0000
	STANDARD_RIGHTS_READ     = READ_CONTROL
	STANDARD_RIGHTS_WRITE    = READ_CONTROL
	STANDARD_RIGHTS_EXECUTE  = READ_CONTROL
	STANDARD_RIGHTS_ALL      = 0x001F0000
	SPECIFIC_RIGHTS_ALL      = 0x0000FFFF
	ACCESS_SYSTEM_SECURITY   = 0x01000000
	MAXIMUM_ALLOWED          = 0x02000000
	GENERIC_READ             = 0x80000000
	GENERIC_WRITE            = 0x40000000
	GENERIC_EXECUTE          = 0x20000000
	GENERIC_ALL              = 0x10000000
)

type ACCESS_MODE uint32

// Constants for type ACCESS_MODE
const (
	NOT_USED_ACCESS   = 0
	GRANT_ACCESS      = 1
	SET_ACCESS        = 2
	DENY_ACCESS       = 3
	REVOKE_ACCESS     = 4
	SET_AUDIT_SUCCESS = 5
	SET_AUDIT_FAILURE = 6
)

// Constants for AceFlags and Inheritance fields
const (
	NO_INHERITANCE                     = 0x0
	SUB_OBJECTS_ONLY_INHERIT           = 0x1
	SUB_CONTAINERS_ONLY_INHERIT        = 0x2
	SUB_CONTAINERS_AND_OBJECTS_INHERIT = 0x3
	INHERIT_NO_PROPAGATE               = 0x4
	INHERIT_ONLY                       = 0x8
	INHERITED_ACCESS_ENTRY             = 0x10
	INHERITED_PARENT                   = 0x10000000
	INHERITED_GRANDPARENT              = 0x20000000
	OBJECT_INHERIT_ACE                 = 0x1
	CONTAINER_INHERIT_ACE              = 0x2
	NO_PROPAGATE_INHERIT_ACE           = 0x4
	INHERIT_ONLY_ACE                   = 0x8
	INHERITED_ACE                      = 0x10
	VALID_INHERIT_FLAGS                = 0x1F
)

type MULTIPLE_TRUSTEE_OPERATION uint32

// Constants for MULTIPLE_TRUSTEE_OPERATION
const (
	NO_MULTIPLE_TRUSTEE    = 0
	TRUSTEE_IS_IMPERSONATE = 1
)

type TRUSTEE_FORM uint32

// Constants for TRUSTEE_FORM
const (
	TRUSTEE_IS_SID              = 0
	TRUSTEE_IS_NAME             = 1
	TRUSTEE_BAD_FORM            = 2
	TRUSTEE_IS_OBJECTS_AND_SID  = 3
	TRUSTEE_IS_OBJECTS_AND_NAME = 4
)

type TRUSTEE_TYPE uint32

// Constants for TRUSTEE_TYPE
const (
	TRUSTEE_IS_UNKNOWN          = 0
	TRUSTEE_IS_USER             = 1
	TRUSTEE_IS_GROUP            = 2
	TRUSTEE_IS_DOMAIN           = 3
	TRUSTEE_IS_ALIAS            = 4
	TRUSTEE_IS_WELL_KNOWN_GROUP = 5
	TRUSTEE_IS_DELETED          = 6
	TRUSTEE_IS_INVALID          = 7
	TRUSTEE_IS_COMPUTER         = 8
)

// Constants for ObjectsPresent field
const (
	ACE_OBJECT_TYPE_PRESENT           = 0x1
	ACE_INHERITED_OBJECT_TYPE_PRESENT = 0x2
)

type EXPLICIT_ACCESS struct {
	AccessPermissions ACCESS_MASK
	AccessMode        ACCESS_MODE
	Inheritance       uint32
	Trustee           TRUSTEE
}

// This type is the union inside of TRUSTEE and must be created using one of the TrusteeValueFrom* functions.
type TrusteeValue uintptr

func TrusteeValueFromString(str string) TrusteeValue {
	return TrusteeValue(unsafe.Pointer(StringToUTF16Ptr(str)))
}
func TrusteeValueFromSID(sid *SID) TrusteeValue {
	return TrusteeValue(unsafe.Pointer(sid))
}
func TrusteeValueFromObjectsAndSid(objectsAndSid *OBJECTS_AND_SID) TrusteeValue {
	return TrusteeValue(unsafe.Pointer(objectsAndSid))
}
func TrusteeValueFromObjectsAndName(objectsAndName *OBJECTS_AND_NAME) TrusteeValue {
	return TrusteeValue(unsafe.Pointer(objectsAndName))
}

type TRUSTEE struct {
	MultipleTrustee          *TRUSTEE
	MultipleTrusteeOperation MULTIPLE_TRUSTEE_OPERATION
	TrusteeForm              TRUSTEE_FORM
	TrusteeType              TRUSTEE_TYPE
	TrusteeValue             TrusteeValue
}

type OBJECTS_AND_SID struct {
	ObjectsPresent          uint32
	ObjectTypeGuid          GUID
	InheritedObjectTypeGuid GUID
	Sid                     *SID
}

type OBJECTS_AND_NAME struct {
	ObjectsPresent          uint32
	ObjectType              SE_OBJECT_TYPE
	ObjectTypeName          *uint16
	InheritedObjectTypeName *uint16
	Name                    *uint16
}

//sys	getSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner **SID, group **SID, dacl **ACL, sacl **ACL, sd **SECURITY_DESCRIPTOR) (ret error) = advapi32.GetSecurityInfo
//sys	SetSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner *SID, group *SID, dacl *ACL, sacl *ACL) (ret error) = advapi32.SetSecurityInfo
//sys	getNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner **SID, group **SID, dacl **ACL, sacl **ACL, sd **SECURITY_DESCRIPTOR) (ret error) = advapi32.GetNamedSecurityInfoW
//sys	SetNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner *SID, group *SID, dacl *ACL, sacl *ACL) (ret error) = advapi32.SetNamedSecurityInfoW
//sys	SetKernelObjectSecurity(handle Handle, securityInformation SECURITY_INFORMATION, securityDescriptor *SECURITY_DESCRIPTOR) (err error) = advapi32.SetKernelObjectSecurity

//sys	buildSecurityDescriptor(owner *TRUSTEE, group *TRUSTEE, countAccessEntries uint32, accessEntries *EXPLICIT_ACCESS, countAuditEntries uint32, auditEntries *EXPLICIT_ACCESS, oldSecurityDescriptor *SECURITY_DESCRIPTOR, sizeNewSecurityDescriptor *uint32, newSecurityDescriptor **SECURITY_DESCRIPTOR) (ret error) = advapi32.BuildSecurityDescriptorW
//sys	initializeSecurityDescriptor(absoluteSD *SECURITY_DESCRIPTOR, revision uint32) (err error) = advapi32.InitializeSecurityDescriptor

//sys	getSecurityDescriptorControl(sd *SECURITY_DESCRIPTOR, control *SECURITY_DESCRIPTOR_CONTROL, revision *uint32) (err error) = advapi32.GetSecurityDescriptorControl
//sys	getSecurityDescriptorDacl(sd *SECURITY_DESCRIPTOR, daclPresent *bool, dacl **ACL, daclDefaulted *bool) (err error) = advapi32.GetSecurityDescriptorDacl
//sys	getSecurityDescriptorSacl(sd *SECURITY_DESCRIPTOR, saclPresent *bool, sacl **ACL, saclDefaulted *bool) (err error) = advapi32.GetSecurityDescriptorSacl
//sys	getSecurityDescriptorOwner(sd *SECURITY_DESCRIPTOR, owner **SID, ownerDefaulted *bool) (err error) = advapi32.GetSecurityDescriptorOwner
//sys	getSecurityDescriptorGroup(sd *SECURITY_DESCRIPTOR, group **SID, groupDefaulted *bool) (err error) = advapi32.GetSecurityDescriptorGroup
//sys	getSecurityDescriptorLength(sd *SECURITY_DESCRIPTOR) (len uint32) = advapi32.GetSecurityDescriptorLength
//sys	getSecurityDescriptorRMControl(sd *SECURITY_DESCRIPTOR, rmControl *uint8) (ret error) [failretval!=0] = advapi32.GetSecurityDescriptorRMControl
//sys	isValidSecurityDescriptor(sd *SECURITY_DESCRIPTOR) (isValid bool) = advapi32.IsValidSecurityDescriptor

//sys	setSecurityDescriptorControl(sd *SECURITY_DESCRIPTOR, controlBitsOfInterest SECURITY_DESCRIPTOR_CONTROL, controlBitsToSet SECURITY_DESCRIPTOR_CONTROL) (err error) = advapi32.SetSecurityDescriptorControl
//sys	setSecurityDescriptorDacl(sd *SECURITY_DESCRIPTOR, daclPresent bool, dacl *ACL, daclDefaulted bool) (err error) = advapi32.SetSecurityDescriptorDacl
//sys	setSecurityDescriptorSacl(sd *SECURITY_DESCRIPTOR, saclPresent bool, sacl *ACL, saclDefaulted bool) (err error) = advapi32.SetSecurityDescriptorSacl
//sys	setSecurityDescriptorOwner(sd *SECURITY_DESCRIPTOR, owner *SID, ownerDefaulted bool) (err error) = advapi32.SetSecurityDescriptorOwner
//sys	setSecurityDescriptorGroup(sd *SECURITY_DESCRIPTOR, group *SID, groupDefaulted bool) (err error) = advapi32.SetSecurityDescriptorGroup
//sys	setSecurityDescriptorRMControl(sd *SECURITY_DESCRIPTOR, rmControl *uint8) = advapi32.SetSecurityDescriptorRMControl

//sys	convertStringSecurityDescriptorToSecurityDescriptor(str string, revision uint32, sd **SECURITY_DESCRIPTOR, size *uint32) (err error) = advapi32.ConvertStringSecurityDescriptorToSecurityDescriptorW
//sys	convertSecurityDescriptorToStringSecurityDescriptor(sd *SECURITY_DESCRIPTOR, revision uint32, securityInformation SECURITY_INFORMATION, str **uint16, strLen *uint32) (err error) = advapi32.ConvertSecurityDescriptorToStringSecurityDescriptorW

//sys	makeAbsoluteSD(selfRelativeSD *SECURITY_DESCRIPTOR, absoluteSD *SECURITY_DESCRIPTOR, absoluteSDSize *uint32, dacl *ACL, daclSize *uint32, sacl *ACL, saclSize *uint32, owner *SID, ownerSize *uint32, group *SID, groupSize *uint32) (err error) = advapi32.MakeAbsoluteSD
//sys	makeSelfRelativeSD(absoluteSD *SECURITY_DESCRIPTOR, selfRelativeSD *SECURITY_DESCRIPTOR, selfRelativeSDSize *uint32) (err error) = advapi32.MakeSelfRelativeSD

//sys	setEntriesInAcl(countExplicitEntries uint32, explicitEntries *EXPLICIT_ACCESS, oldACL *ACL, newACL **ACL) (ret error) = advapi32.SetEntriesInAclW

// Control returns the security descriptor control bits.
func (sd *SECURITY_DESCRIPTOR) Control() (control SECURITY_DESCRIPTOR_CONTROL, revision uint32, err error) {
	err = getSecurityDescriptorControl(sd, &control, &revision)
	return
}

// SetControl sets the security descriptor control bits.
func (sd *SECURITY_DESCRIPTOR) SetControl(controlBitsOfInterest SECURITY_DESCRIPTOR_CONTROL, controlBitsToSet SECURITY_DESCRIPTOR_CONTROL) error {
	return setSecurityDescriptorControl(sd, controlBitsOfInterest, controlBitsToSet)
}

// RMControl returns the security descriptor resource manager control bits.
func (sd *SECURITY_DESCRIPTOR) RMControl() (control uint8, err error) {
	err = getSecurityDescriptorRMControl(sd, &control)
	return
}

// SetRMControl sets the security descriptor resource manager control bits.
func (sd *SECURITY_DESCRIPTOR) SetRMControl(rmControl uint8) {
	setSecurityDescriptorRMControl(sd, &rmControl)
}

// DACL returns the security descriptor DACL and whether it was defaulted. The dacl return value may be nil
// if a DACL exists but is an "empty DACL", meaning fully permissive. If the DACL does not exist, err returns
// ERROR_OBJECT_NOT_FOUND.
func (sd *SECURITY_DESCRIPTOR) DACL() (dacl *ACL, defaulted bool, err error) {
	var present bool
	err = getSecurityDescriptorDacl(sd, &present, &dacl, &defaulted)
	if !present {
		err = ERROR_OBJECT_NOT_FOUND
	}
	return
}

// SetDACL sets the absolute security descriptor DACL.
func (absoluteSD *SECURITY_DESCRIPTOR) SetDACL(dacl *ACL, present, defaulted bool) error {
	return setSecurityDescriptorDacl(absoluteSD, present, dacl, defaulted)
}

// SACL returns the security descriptor SACL and whether it was defaulted. The sacl return value may be nil
// if a SACL exists but is an "empty SACL", meaning fully permissive. If the SACL does not exist, err returns
// ERROR_OBJECT_NOT_FOUND.
func (sd *SECURITY_DESCRIPTOR) SACL() (sacl *ACL, defaulted bool, err error) {
	var present bool
	err = getSecurityDescriptorSacl(sd, &present, &sacl, &defaulted)
	if !present {
		err = ERROR_OBJECT_NOT_FOUND
	}
	return
}

// SetSACL sets the absolute security descriptor SACL.
func (absoluteSD *SECURITY_DESCRIPTOR) SetSACL(sacl *ACL, present, defaulted bool) error {
	return setSecurityDescriptorSacl(absoluteSD, present, sacl, defaulted)
}

// Owner returns the security descriptor owner and whether it was defaulted.
func (sd *SECURITY_DESCRIPTOR) Owner() (owner *SID, defaulted bool, err error) {
	err = getSecurityDescriptorOwner(sd, &owner, &defaulted)
	return
}

// SetOwner sets the absolute security descriptor owner.
func (absoluteSD *SECURITY_DESCRIPTOR) SetOwner(owner *SID, defaulted bool) error {
	return setSecurityDescriptorOwner(absoluteSD, owner, defaulted)
}

// Group returns the security descriptor group and whether it was defaulted.
func (sd *SECURITY_DESCRIPTOR) Group() (group *SID, defaulted bool, err error) {
	err = getSecurityDescriptorGroup(sd, &group, &defaulted)
	return
}

// SetGroup sets the absolute security descriptor owner.
func (absoluteSD *SECURITY_DESCRIPTOR) SetGroup(group *SID, defaulted bool) error {
	return setSecurityDescriptorGroup(absoluteSD, group, defaulted)
}

// Length returns the length of the security descriptor.
func (sd *SECURITY_DESCRIPTOR) Length() uint32 {
	return getSecurityDescriptorLength(sd)
}

// IsValid returns whether the security descriptor is valid.
func (sd *SECURITY_DESCRIPTOR) IsValid() bool {
	return isValidSecurityDescriptor(sd)
}

// String returns the SDDL form of the security descriptor, with a function signature that can be
// used with %v formatting directives.
func (sd *SECURITY_DESCRIPTOR) String() string {
	var sddl *uint16
	err := convertSecurityDescriptorToStringSecurityDescriptor(sd, 1, 0xff, &sddl, nil)
	if err != nil {
		return ""
	}
	defer LocalFree(Handle(unsafe.Pointer(sddl)))
	return UTF16PtrToString(sddl)
}

// ToAbsolute converts a self-relative security descriptor into an absolute one.
func (selfRelativeSD *SECURITY_DESCRIPTOR) ToAbsolute() (absoluteSD *SECURITY_DESCRIPTOR, err error) {
	control, _, err := selfRelativeSD.Control()
	if err != nil {
		return
	}
	if control&SE_SELF_RELATIVE == 0 {
		err = ERROR_INVALID_PARAMETER
		return
	}
	var absoluteSDSize, daclSize, saclSize, ownerSize, groupSize uint32
	err = makeAbsoluteSD(selfRelativeSD, nil, &absoluteSDSize,
		nil, &daclSize, nil, &saclSize, nil, &ownerSize, nil, &groupSize)
	switch err {
	case ERROR_INSUFFICIENT_BUFFER:
	case nil:
		// makeAbsoluteSD is expected to fail, but it succeeds.
		return nil, ERROR_INTERNAL_ERROR
	default:
		return nil, err
	}
	if absoluteSDSize > 0 {
		absoluteSD = (*SECURITY_DESCRIPTOR)(unsafe.Pointer(&make([]byte, absoluteSDSize)[0]))
	}
	var (
		dacl  *ACL
		sacl  *ACL
		owner *SID
		group *SID
	)
	if daclSize > 0 {
		dacl = (*ACL)(unsafe.Pointer(&make([]byte, daclSize)[0]))
	}
	if saclSize > 0 {
		sacl = (*ACL)(unsafe.Pointer(&make([]byte, saclSize)[0]))
	}
	if ownerSize > 0 {
		owner = (*SID)(unsafe.Pointer(&make([]byte, ownerSize)[0]))
	}
	if groupSize > 0 {
		group = (*SID)(unsafe.Pointer(&make([]byte, groupSize)[0]))
	}
	err = makeAbsoluteSD(selfRelativeSD, absoluteSD, &absoluteSDSize,
		dacl, &daclSize, sacl, &saclSize, owner, &ownerSize, group, &groupSize)
	return
}

// ToSelfRelative converts an absolute security descriptor into a self-relative one.
func (absoluteSD *SECURITY_DESCRIPTOR) ToSelfRelative() (selfRelativeSD *SECURITY_DESCRIPTOR, err error) {
	control, _, err := absoluteSD.Control()
	if err != nil {
		return
	}
	if control&SE_SELF_RELATIVE != 0 {
		err = ERROR_INVALID_PARAMETER
		return
	}
	var selfRelativeSDSize uint32
	err = makeSelfRelativeSD(absoluteSD, nil, &selfRelativeSDSize)
	switch err {
	case ERROR_INSUFFICIENT_BUFFER:
	case nil:
		// makeSelfRelativeSD is expected to fail, but it succeeds.
		return nil, ERROR_INTERNAL_ERROR
	default:
		return nil, err
	}
	if selfRelativeSDSize > 0 {
		selfRelativeSD = (*SECURITY_DESCRIPTOR)(unsafe.Pointer(&make([]byte, selfRelativeSDSize)[0]))
	}
	err = makeSelfRelativeSD(absoluteSD, selfRelativeSD, &selfRelativeSDSize)
	return
}

func (selfRelativeSD *SECURITY_DESCRIPTOR) copySelfRelativeSecurityDescriptor() *SECURITY_DESCRIPTOR {
	sdLen := int(selfRelativeSD.Length())
	const min = int(unsafe.Sizeof(SECURITY_DESCRIPTOR{}))
	if sdLen < min {
		sdLen = min
	}

	var src []byte
	h := (*unsafeheader.Slice)(unsafe.Pointer(&src))
	h.Data = unsafe.Pointer(selfRelativeSD)
	h.Len = sdLen
	h.Cap = sdLen

	const psize = int(unsafe.Sizeof(uintptr(0)))

	var dst []byte
	h = (*unsafeheader.Slice)(unsafe.Pointer(&dst))
	alloc := make([]uintptr, (sdLen+psize-1)/psize)
	h.Data = (*unsafeheader.Slice)(unsafe.Pointer(&alloc)).Data
	h.Len = sdLen
	h.Cap = sdLen

	copy(dst, src)
	return (*SECURITY_DESCRIPTOR)(unsafe.Pointer(&dst[0]))
}

// SecurityDescriptorFromString converts an SDDL string describing a security descriptor into a
// self-relative security descriptor object allocated on the Go heap.
func SecurityDescriptorFromString(sddl string) (sd *SECURITY_DESCRIPTOR, err error) {
	var winHeapSD *SECURITY_DESCRIPTOR
	err = convertStringSecurityDescriptorToSecurityDescriptor(sddl, 1, &winHeapSD, nil)
	if err != nil {
		return
	}
	defer LocalFree(Handle(unsafe.Pointer(winHeapSD)))
	return winHeapSD.copySelfRelativeSecurityDescriptor(), nil
}

// GetSecurityInfo queries the security information for a given handle and returns the self-relative security
// descriptor result on the Go heap.
func GetSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION) (sd *SECURITY_DESCRIPTOR, err error) {
	var winHeapSD *SECURITY_DESCRIPTOR
	err = getSecurityInfo(handle, objectType, securityInformation, nil, nil, nil, nil, &winHeapSD)
	if err != nil {
		return
	}
	defer LocalFree(Handle(unsafe.Pointer(winHeapSD)))
	return winHeapSD.copySelfRelativeSecurityDescriptor(), nil
}

// GetNamedSecurityInfo queries the security information for a given named object and returns the self-relative security
// descriptor result on the Go heap.
func GetNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION) (sd *SECURITY_DESCRIPTOR, err error) {
	var winHeapSD *SECURITY_DESCRIPTOR
	err = getNamedSecurityInfo(objectName, objectType, securityInformation, nil, nil, nil, nil, &winHeapSD)
	if err != nil {
		return
	}
	defer LocalFree(Handle(unsafe.Pointer(winHeapSD)))
	return winHeapSD.copySelfRelativeSecurityDescriptor(), nil
}

// BuildSecurityDescriptor makes a new security descriptor using the input trustees, explicit access lists, and
// prior security descriptor to be merged, any of which can be nil, returning the self-relative security descriptor
// result on the Go heap.
func BuildSecurityDescriptor(owner *TRUSTEE, group *TRUSTEE, accessEntries []EXPLICIT_ACCESS, auditEntries []EXPLICIT_ACCESS, mergedSecurityDescriptor *SECURITY_DESCRIPTOR) (sd *SECURITY_DESCRIPTOR, err error) {
	var winHeapSD *SECURITY_DESCRIPTOR
	var winHeapSDSize uint32
	var firstAccessEntry *EXPLICIT_ACCESS
	if len(accessEntries) > 0 {
		firstAccessEntry = &accessEntries[0]
	}
	var firstAuditEntry *EXPLICIT_ACCESS
	if len(auditEntries) > 0 {
		firstAuditEntry = &auditEntries[0]
	}
	err = buildSecurityDescriptor(owner, group, uint32(len(accessEntries)), firstAccessEntry, uint32(len(auditEntries)), firstAuditEntry, mergedSecurityDescriptor, &winHeapSDSize, &winHeapSD)
	if err != nil {
		return
	}
	defer LocalFree(Handle(unsafe.Pointer(winHeapSD)))
	return winHeapSD.copySelfRelativeSecurityDescriptor(), nil
}

// NewSecurityDescriptor creates and initializes a new absolute security descriptor.
func NewSecurityDescriptor() (absoluteSD *SECURITY_DESCRIPTOR, err error) {
	absoluteSD = &SECURITY_DESCRIPTOR{}
	err = initializeSecurityDescriptor(absoluteSD, 1)
	return
}

// ACLFromEntries returns a new ACL on the Go heap containing a list of explicit entries as well as those of another ACL.
// Both explicitEntries and mergedACL are optional and can be nil.
func ACLFromEntries(explicitEntries []EXPLICIT_ACCESS, mergedACL *ACL) (acl *ACL, err error) {
	var firstExplicitEntry *EXPLICIT_ACCESS
	if len(explicitEntries) > 0 {
		firstExplicitEntry = &explicitEntries[0]
	}
	var winHeapACL *ACL
	err = setEntriesInAcl(uint32(len(explicitEntries)), firstExplicitEntry, mergedACL, &winHeapACL)
	if err != nil {
		return
	}
	defer LocalFree(Handle(unsafe.Pointer(winHeapACL)))
	aclBytes := make([]byte, winHeapACL.aclSize)
	copy(aclBytes, (*[(1 << 31) - 1]byte)(unsafe.Pointer(winHeapACL))[:len(aclBytes):len(aclBytes)])
	return (*ACL)(unsafe.Pointer(&aclBytes[0])), nil
}
   07070100000EE4000081A4000000000000000000000001645E367C000028C3000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/service.go    // Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build windows
// +build windows

package windows

const (
	SC_MANAGER_CONNECT            = 1
	SC_MANAGER_CREATE_SERVICE     = 2
	SC_MANAGER_ENUMERATE_SERVICE  = 4
	SC_MANAGER_LOCK               = 8
	SC_MANAGER_QUERY_LOCK_STATUS  = 16
	SC_MANAGER_MODIFY_BOOT_CONFIG = 32
	SC_MANAGER_ALL_ACCESS         = 0xf003f
)

const (
	SERVICE_KERNEL_DRIVER       = 1
	SERVICE_FILE_SYSTEM_DRIVER  = 2
	SERVICE_ADAPTER             = 4
	SERVICE_RECOGNIZER_DRIVER   = 8
	SERVICE_WIN32_OWN_PROCESS   = 16
	SERVICE_WIN32_SHARE_PROCESS = 32
	SERVICE_WIN32               = SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS
	SERVICE_INTERACTIVE_PROCESS = 256
	SERVICE_DRIVER              = SERVICE_KERNEL_DRIVER | SERVICE_FILE_SYSTEM_DRIVER | SERVICE_RECOGNIZER_DRIVER
	SERVICE_TYPE_ALL            = SERVICE_WIN32 | SERVICE_ADAPTER | SERVICE_DRIVER | SERVICE_INTERACTIVE_PROCESS

	SERVICE_BOOT_START   = 0
	SERVICE_SYSTEM_START = 1
	SERVICE_AUTO_START   = 2
	SERVICE_DEMAND_START = 3
	SERVICE_DISABLED     = 4

	SERVICE_ERROR_IGNORE   = 0
	SERVICE_ERROR_NORMAL   = 1
	SERVICE_ERROR_SEVERE   = 2
	SERVICE_ERROR_CRITICAL = 3

	SC_STATUS_PROCESS_INFO = 0

	SC_ACTION_NONE        = 0
	SC_ACTION_RESTART     = 1
	SC_ACTION_REBOOT      = 2
	SC_ACTION_RUN_COMMAND = 3

	SERVICE_STOPPED          = 1
	SERVICE_START_PENDING    = 2
	SERVICE_STOP_PENDING     = 3
	SERVICE_RUNNING          = 4
	SERVICE_CONTINUE_PENDING = 5
	SERVICE_PAUSE_PENDING    = 6
	SERVICE_PAUSED           = 7
	SERVICE_NO_CHANGE        = 0xffffffff

	SERVICE_ACCEPT_STOP                  = 1
	SERVICE_ACCEPT_PAUSE_CONTINUE        = 2
	SERVICE_ACCEPT_SHUTDOWN              = 4
	SERVICE_ACCEPT_PARAMCHANGE           = 8
	SERVICE_ACCEPT_NETBINDCHANGE         = 16
	SERVICE_ACCEPT_HARDWAREPROFILECHANGE = 32
	SERVICE_ACCEPT_POWEREVENT            = 64
	SERVICE_ACCEPT_SESSIONCHANGE         = 128
	SERVICE_ACCEPT_PRESHUTDOWN           = 256

	SERVICE_CONTROL_STOP                  = 1
	SERVICE_CONTROL_PAUSE                 = 2
	SERVICE_CONTROL_CONTINUE              = 3
	SERVICE_CONTROL_INTERROGATE           = 4
	SERVICE_CONTROL_SHUTDOWN              = 5
	SERVICE_CONTROL_PARAMCHANGE           = 6
	SERVICE_CONTROL_NETBINDADD            = 7
	SERVICE_CONTROL_NETBINDREMOVE         = 8
	SERVICE_CONTROL_NETBINDENABLE         = 9
	SERVICE_CONTROL_NETBINDDISABLE        = 10
	SERVICE_CONTROL_DEVICEEVENT           = 11
	SERVICE_CONTROL_HARDWAREPROFILECHANGE = 12
	SERVICE_CONTROL_POWEREVENT            = 13
	SERVICE_CONTROL_SESSIONCHANGE         = 14
	SERVICE_CONTROL_PRESHUTDOWN           = 15

	SERVICE_ACTIVE    = 1
	SERVICE_INACTIVE  = 2
	SERVICE_STATE_ALL = 3

	SERVICE_QUERY_CONFIG         = 1
	SERVICE_CHANGE_CONFIG        = 2
	SERVICE_QUERY_STATUS         = 4
	SERVICE_ENUMERATE_DEPENDENTS = 8
	SERVICE_START                = 16
	SERVICE_STOP                 = 32
	SERVICE_PAUSE_CONTINUE       = 64
	SERVICE_INTERROGATE          = 128
	SERVICE_USER_DEFINED_CONTROL = 256
	SERVICE_ALL_ACCESS           = STANDARD_RIGHTS_REQUIRED | SERVICE_QUERY_CONFIG | SERVICE_CHANGE_CONFIG | SERVICE_QUERY_STATUS | SERVICE_ENUMERATE_DEPENDENTS | SERVICE_START | SERVICE_STOP | SERVICE_PAUSE_CONTINUE | SERVICE_INTERROGATE | SERVICE_USER_DEFINED_CONTROL

	SERVICE_RUNS_IN_SYSTEM_PROCESS = 1

	SERVICE_CONFIG_DESCRIPTION              = 1
	SERVICE_CONFIG_FAILURE_ACTIONS          = 2
	SERVICE_CONFIG_DELAYED_AUTO_START_INFO  = 3
	SERVICE_CONFIG_FAILURE_ACTIONS_FLAG     = 4
	SERVICE_CONFIG_SERVICE_SID_INFO         = 5
	SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO = 6
	SERVICE_CONFIG_PRESHUTDOWN_INFO         = 7
	SERVICE_CONFIG_TRIGGER_INFO             = 8
	SERVICE_CONFIG_PREFERRED_NODE           = 9
	SERVICE_CONFIG_LAUNCH_PROTECTED         = 12

	SERVICE_SID_TYPE_NONE         = 0
	SERVICE_SID_TYPE_UNRESTRICTED = 1
	SERVICE_SID_TYPE_RESTRICTED   = 2 | SERVICE_SID_TYPE_UNRESTRICTED

	SC_ENUM_PROCESS_INFO = 0

	SERVICE_NOTIFY_STATUS_CHANGE    = 2
	SERVICE_NOTIFY_STOPPED          = 0x00000001
	SERVICE_NOTIFY_START_PENDING    = 0x00000002
	SERVICE_NOTIFY_STOP_PENDING     = 0x00000004
	SERVICE_NOTIFY_RUNNING          = 0x00000008
	SERVICE_NOTIFY_CONTINUE_PENDING = 0x00000010
	SERVICE_NOTIFY_PAUSE_PENDING    = 0x00000020
	SERVICE_NOTIFY_PAUSED           = 0x00000040
	SERVICE_NOTIFY_CREATED          = 0x00000080
	SERVICE_NOTIFY_DELETED          = 0x00000100
	SERVICE_NOTIFY_DELETE_PENDING   = 0x00000200

	SC_EVENT_DATABASE_CHANGE = 0
	SC_EVENT_PROPERTY_CHANGE = 1
	SC_EVENT_STATUS_CHANGE   = 2

	SERVICE_START_REASON_DEMAND             = 0x00000001
	SERVICE_START_REASON_AUTO               = 0x00000002
	SERVICE_START_REASON_TRIGGER            = 0x00000004
	SERVICE_START_REASON_RESTART_ON_FAILURE = 0x00000008
	SERVICE_START_REASON_DELAYEDAUTO        = 0x00000010

	SERVICE_DYNAMIC_INFORMATION_LEVEL_START_REASON = 1
)

type ENUM_SERVICE_STATUS struct {
	ServiceName   *uint16
	DisplayName   *uint16
	ServiceStatus SERVICE_STATUS
}

type SERVICE_STATUS struct {
	ServiceType             uint32
	CurrentState            uint32
	ControlsAccepted        uint32
	Win32ExitCode           uint32
	ServiceSpecificExitCode uint32
	CheckPoint              uint32
	WaitHint                uint32
}

type SERVICE_TABLE_ENTRY struct {
	ServiceName *uint16
	ServiceProc uintptr
}

type QUERY_SERVICE_CONFIG struct {
	ServiceType      uint32
	StartType        uint32
	ErrorControl     uint32
	BinaryPathName   *uint16
	LoadOrderGroup   *uint16
	TagId            uint32
	Dependencies     *uint16
	ServiceStartName *uint16
	DisplayName      *uint16
}

type SERVICE_DESCRIPTION struct {
	Description *uint16
}

type SERVICE_DELAYED_AUTO_START_INFO struct {
	IsDelayedAutoStartUp uint32
}

type SERVICE_STATUS_PROCESS struct {
	ServiceType             uint32
	CurrentState            uint32
	ControlsAccepted        uint32
	Win32ExitCode           uint32
	ServiceSpecificExitCode uint32
	CheckPoint              uint32
	WaitHint                uint32
	ProcessId               uint32
	ServiceFlags            uint32
}

type ENUM_SERVICE_STATUS_PROCESS struct {
	ServiceName          *uint16
	DisplayName          *uint16
	ServiceStatusProcess SERVICE_STATUS_PROCESS
}

type SERVICE_NOTIFY struct {
	Version               uint32
	NotifyCallback        uintptr
	Context               uintptr
	NotificationStatus    uint32
	ServiceStatus         SERVICE_STATUS_PROCESS
	NotificationTriggered uint32
	ServiceNames          *uint16
}

type SERVICE_FAILURE_ACTIONS struct {
	ResetPeriod  uint32
	RebootMsg    *uint16
	Command      *uint16
	ActionsCount uint32
	Actions      *SC_ACTION
}

type SC_ACTION struct {
	Type  uint32
	Delay uint32
}

type QUERY_SERVICE_LOCK_STATUS struct {
	IsLocked     uint32
	LockOwner    *uint16
	LockDuration uint32
}

//sys	OpenSCManager(machineName *uint16, databaseName *uint16, access uint32) (handle Handle, err error) [failretval==0] = advapi32.OpenSCManagerW
//sys	CloseServiceHandle(handle Handle) (err error) = advapi32.CloseServiceHandle
//sys	CreateService(mgr Handle, serviceName *uint16, displayName *uint16, access uint32, srvType uint32, startType uint32, errCtl uint32, pathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16) (handle Handle, err error) [failretval==0] = advapi32.CreateServiceW
//sys	OpenService(mgr Handle, serviceName *uint16, access uint32) (handle Handle, err error) [failretval==0] = advapi32.OpenServiceW
//sys	DeleteService(service Handle) (err error) = advapi32.DeleteService
//sys	StartService(service Handle, numArgs uint32, argVectors **uint16) (err error) = advapi32.StartServiceW
//sys	QueryServiceStatus(service Handle, status *SERVICE_STATUS) (err error) = advapi32.QueryServiceStatus
//sys	QueryServiceLockStatus(mgr Handle, lockStatus *QUERY_SERVICE_LOCK_STATUS, bufSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceLockStatusW
//sys	ControlService(service Handle, control uint32, status *SERVICE_STATUS) (err error) = advapi32.ControlService
//sys	StartServiceCtrlDispatcher(serviceTable *SERVICE_TABLE_ENTRY) (err error) = advapi32.StartServiceCtrlDispatcherW
//sys	SetServiceStatus(service Handle, serviceStatus *SERVICE_STATUS) (err error) = advapi32.SetServiceStatus
//sys	ChangeServiceConfig(service Handle, serviceType uint32, startType uint32, errorControl uint32, binaryPathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16, displayName *uint16) (err error) = advapi32.ChangeServiceConfigW
//sys	QueryServiceConfig(service Handle, serviceConfig *QUERY_SERVICE_CONFIG, bufSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceConfigW
//sys	ChangeServiceConfig2(service Handle, infoLevel uint32, info *byte) (err error) = advapi32.ChangeServiceConfig2W
//sys	QueryServiceConfig2(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceConfig2W
//sys	EnumServicesStatusEx(mgr Handle, infoLevel uint32, serviceType uint32, serviceState uint32, services *byte, bufSize uint32, bytesNeeded *uint32, servicesReturned *uint32, resumeHandle *uint32, groupName *uint16) (err error) = advapi32.EnumServicesStatusExW
//sys	QueryServiceStatusEx(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceStatusEx
//sys	NotifyServiceStatusChange(service Handle, notifyMask uint32, notifier *SERVICE_NOTIFY) (ret error) = advapi32.NotifyServiceStatusChangeW
//sys	SubscribeServiceChangeNotifications(service Handle, eventType uint32, callback uintptr, callbackCtx uintptr, subscription *uintptr) (ret error) = sechost.SubscribeServiceChangeNotifications?
//sys	UnsubscribeServiceChangeNotifications(subscription uintptr) = sechost.UnsubscribeServiceChangeNotifications?
//sys	RegisterServiceCtrlHandlerEx(serviceName *uint16, handlerProc uintptr, context uintptr) (handle Handle, err error) = advapi32.RegisterServiceCtrlHandlerExW
//sys	QueryServiceDynamicInformation(service Handle, infoLevel uint32, dynamicInfo unsafe.Pointer) (err error) = advapi32.QueryServiceDynamicInformation?
//sys	EnumDependentServices(service Handle, activityState uint32, services *ENUM_SERVICE_STATUS, buffSize uint32, bytesNeeded *uint32, servicesReturned *uint32) (err error) = advapi32.EnumDependentServicesW
 07070100000EE5000081A4000000000000000000000001645E367C00010CF6000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/setupapi_windows.go   // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package windows

import (
	"encoding/binary"
	"errors"
	"fmt"
	"runtime"
	"strings"
	"syscall"
	"unsafe"
)

// This file contains functions that wrap SetupAPI.dll and CfgMgr32.dll,
// core system functions for managing hardware devices, drivers, and the PnP tree.
// Information about these APIs can be found at:
//     https://docs.microsoft.com/en-us/windows-hardware/drivers/install/setupapi
//     https://docs.microsoft.com/en-us/windows/win32/devinst/cfgmgr32-

const (
	ERROR_EXPECTED_SECTION_NAME                  Errno = 0x20000000 | 0xC0000000 | 0
	ERROR_BAD_SECTION_NAME_LINE                  Errno = 0x20000000 | 0xC0000000 | 1
	ERROR_SECTION_NAME_TOO_LONG                  Errno = 0x20000000 | 0xC0000000 | 2
	ERROR_GENERAL_SYNTAX                         Errno = 0x20000000 | 0xC0000000 | 3
	ERROR_WRONG_INF_STYLE                        Errno = 0x20000000 | 0xC0000000 | 0x100
	ERROR_SECTION_NOT_FOUND                      Errno = 0x20000000 | 0xC0000000 | 0x101
	ERROR_LINE_NOT_FOUND                         Errno = 0x20000000 | 0xC0000000 | 0x102
	ERROR_NO_BACKUP                              Errno = 0x20000000 | 0xC0000000 | 0x103
	ERROR_NO_ASSOCIATED_CLASS                    Errno = 0x20000000 | 0xC0000000 | 0x200
	ERROR_CLASS_MISMATCH                         Errno = 0x20000000 | 0xC0000000 | 0x201
	ERROR_DUPLICATE_FOUND                        Errno = 0x20000000 | 0xC0000000 | 0x202
	ERROR_NO_DRIVER_SELECTED                     Errno = 0x20000000 | 0xC0000000 | 0x203
	ERROR_KEY_DOES_NOT_EXIST                     Errno = 0x20000000 | 0xC0000000 | 0x204
	ERROR_INVALID_DEVINST_NAME                   Errno = 0x20000000 | 0xC0000000 | 0x205
	ERROR_INVALID_CLASS                          Errno = 0x20000000 | 0xC0000000 | 0x206
	ERROR_DEVINST_ALREADY_EXISTS                 Errno = 0x20000000 | 0xC0000000 | 0x207
	ERROR_DEVINFO_NOT_REGISTERED                 Errno = 0x20000000 | 0xC0000000 | 0x208
	ERROR_INVALID_REG_PROPERTY                   Errno = 0x20000000 | 0xC0000000 | 0x209
	ERROR_NO_INF                                 Errno = 0x20000000 | 0xC0000000 | 0x20A
	ERROR_NO_SUCH_DEVINST                        Errno = 0x20000000 | 0xC0000000 | 0x20B
	ERROR_CANT_LOAD_CLASS_ICON                   Errno = 0x20000000 | 0xC0000000 | 0x20C
	ERROR_INVALID_CLASS_INSTALLER                Errno = 0x20000000 | 0xC0000000 | 0x20D
	ERROR_DI_DO_DEFAULT                          Errno = 0x20000000 | 0xC0000000 | 0x20E
	ERROR_DI_NOFILECOPY                          Errno = 0x20000000 | 0xC0000000 | 0x20F
	ERROR_INVALID_HWPROFILE                      Errno = 0x20000000 | 0xC0000000 | 0x210
	ERROR_NO_DEVICE_SELECTED                     Errno = 0x20000000 | 0xC0000000 | 0x211
	ERROR_DEVINFO_LIST_LOCKED                    Errno = 0x20000000 | 0xC0000000 | 0x212
	ERROR_DEVINFO_DATA_LOCKED                    Errno = 0x20000000 | 0xC0000000 | 0x213
	ERROR_DI_BAD_PATH                            Errno = 0x20000000 | 0xC0000000 | 0x214
	ERROR_NO_CLASSINSTALL_PARAMS                 Errno = 0x20000000 | 0xC0000000 | 0x215
	ERROR_FILEQUEUE_LOCKED                       Errno = 0x20000000 | 0xC0000000 | 0x216
	ERROR_BAD_SERVICE_INSTALLSECT                Errno = 0x20000000 | 0xC0000000 | 0x217
	ERROR_NO_CLASS_DRIVER_LIST                   Errno = 0x20000000 | 0xC0000000 | 0x218
	ERROR_NO_ASSOCIATED_SERVICE                  Errno = 0x20000000 | 0xC0000000 | 0x219
	ERROR_NO_DEFAULT_DEVICE_INTERFACE            Errno = 0x20000000 | 0xC0000000 | 0x21A
	ERROR_DEVICE_INTERFACE_ACTIVE                Errno = 0x20000000 | 0xC0000000 | 0x21B
	ERROR_DEVICE_INTERFACE_REMOVED               Errno = 0x20000000 | 0xC0000000 | 0x21C
	ERROR_BAD_INTERFACE_INSTALLSECT              Errno = 0x20000000 | 0xC0000000 | 0x21D
	ERROR_NO_SUCH_INTERFACE_CLASS                Errno = 0x20000000 | 0xC0000000 | 0x21E
	ERROR_INVALID_REFERENCE_STRING               Errno = 0x20000000 | 0xC0000000 | 0x21F
	ERROR_INVALID_MACHINENAME                    Errno = 0x20000000 | 0xC0000000 | 0x220
	ERROR_REMOTE_COMM_FAILURE                    Errno = 0x20000000 | 0xC0000000 | 0x221
	ERROR_MACHINE_UNAVAILABLE                    Errno = 0x20000000 | 0xC0000000 | 0x222
	ERROR_NO_CONFIGMGR_SERVICES                  Errno = 0x20000000 | 0xC0000000 | 0x223
	ERROR_INVALID_PROPPAGE_PROVIDER              Errno = 0x20000000 | 0xC0000000 | 0x224
	ERROR_NO_SUCH_DEVICE_INTERFACE               Errno = 0x20000000 | 0xC0000000 | 0x225
	ERROR_DI_POSTPROCESSING_REQUIRED             Errno = 0x20000000 | 0xC0000000 | 0x226
	ERROR_INVALID_COINSTALLER                    Errno = 0x20000000 | 0xC0000000 | 0x227
	ERROR_NO_COMPAT_DRIVERS                      Errno = 0x20000000 | 0xC0000000 | 0x228
	ERROR_NO_DEVICE_ICON                         Errno = 0x20000000 | 0xC0000000 | 0x229
	ERROR_INVALID_INF_LOGCONFIG                  Errno = 0x20000000 | 0xC0000000 | 0x22A
	ERROR_DI_DONT_INSTALL                        Errno = 0x20000000 | 0xC0000000 | 0x22B
	ERROR_INVALID_FILTER_DRIVER                  Errno = 0x20000000 | 0xC0000000 | 0x22C
	ERROR_NON_WINDOWS_NT_DRIVER                  Errno = 0x20000000 | 0xC0000000 | 0x22D
	ERROR_NON_WINDOWS_DRIVER                     Errno = 0x20000000 | 0xC0000000 | 0x22E
	ERROR_NO_CATALOG_FOR_OEM_INF                 Errno = 0x20000000 | 0xC0000000 | 0x22F
	ERROR_DEVINSTALL_QUEUE_NONNATIVE             Errno = 0x20000000 | 0xC0000000 | 0x230
	ERROR_NOT_DISABLEABLE                        Errno = 0x20000000 | 0xC0000000 | 0x231
	ERROR_CANT_REMOVE_DEVINST                    Errno = 0x20000000 | 0xC0000000 | 0x232
	ERROR_INVALID_TARGET                         Errno = 0x20000000 | 0xC0000000 | 0x233
	ERROR_DRIVER_NONNATIVE                       Errno = 0x20000000 | 0xC0000000 | 0x234
	ERROR_IN_WOW64                               Errno = 0x20000000 | 0xC0000000 | 0x235
	ERROR_SET_SYSTEM_RESTORE_POINT               Errno = 0x20000000 | 0xC0000000 | 0x236
	ERROR_SCE_DISABLED                           Errno = 0x20000000 | 0xC0000000 | 0x238
	ERROR_UNKNOWN_EXCEPTION                      Errno = 0x20000000 | 0xC0000000 | 0x239
	ERROR_PNP_REGISTRY_ERROR                     Errno = 0x20000000 | 0xC0000000 | 0x23A
	ERROR_REMOTE_REQUEST_UNSUPPORTED             Errno = 0x20000000 | 0xC0000000 | 0x23B
	ERROR_NOT_AN_INSTALLED_OEM_INF               Errno = 0x20000000 | 0xC0000000 | 0x23C
	ERROR_INF_IN_USE_BY_DEVICES                  Errno = 0x20000000 | 0xC0000000 | 0x23D
	ERROR_DI_FUNCTION_OBSOLETE                   Errno = 0x20000000 | 0xC0000000 | 0x23E
	ERROR_NO_AUTHENTICODE_CATALOG                Errno = 0x20000000 | 0xC0000000 | 0x23F
	ERROR_AUTHENTICODE_DISALLOWED                Errno = 0x20000000 | 0xC0000000 | 0x240
	ERROR_AUTHENTICODE_TRUSTED_PUBLISHER         Errno = 0x20000000 | 0xC0000000 | 0x241
	ERROR_AUTHENTICODE_TRUST_NOT_ESTABLISHED     Errno = 0x20000000 | 0xC0000000 | 0x242
	ERROR_AUTHENTICODE_PUBLISHER_NOT_TRUSTED     Errno = 0x20000000 | 0xC0000000 | 0x243
	ERROR_SIGNATURE_OSATTRIBUTE_MISMATCH         Errno = 0x20000000 | 0xC0000000 | 0x244
	ERROR_ONLY_VALIDATE_VIA_AUTHENTICODE         Errno = 0x20000000 | 0xC0000000 | 0x245
	ERROR_DEVICE_INSTALLER_NOT_READY             Errno = 0x20000000 | 0xC0000000 | 0x246
	ERROR_DRIVER_STORE_ADD_FAILED                Errno = 0x20000000 | 0xC0000000 | 0x247
	ERROR_DEVICE_INSTALL_BLOCKED                 Errno = 0x20000000 | 0xC0000000 | 0x248
	ERROR_DRIVER_INSTALL_BLOCKED                 Errno = 0x20000000 | 0xC0000000 | 0x249
	ERROR_WRONG_INF_TYPE                         Errno = 0x20000000 | 0xC0000000 | 0x24A
	ERROR_FILE_HASH_NOT_IN_CATALOG               Errno = 0x20000000 | 0xC0000000 | 0x24B
	ERROR_DRIVER_STORE_DELETE_FAILED             Errno = 0x20000000 | 0xC0000000 | 0x24C
	ERROR_UNRECOVERABLE_STACK_OVERFLOW           Errno = 0x20000000 | 0xC0000000 | 0x300
	EXCEPTION_SPAPI_UNRECOVERABLE_STACK_OVERFLOW Errno = ERROR_UNRECOVERABLE_STACK_OVERFLOW
	ERROR_NO_DEFAULT_INTERFACE_DEVICE            Errno = ERROR_NO_DEFAULT_DEVICE_INTERFACE
	ERROR_INTERFACE_DEVICE_ACTIVE                Errno = ERROR_DEVICE_INTERFACE_ACTIVE
	ERROR_INTERFACE_DEVICE_REMOVED               Errno = ERROR_DEVICE_INTERFACE_REMOVED
	ERROR_NO_SUCH_INTERFACE_DEVICE               Errno = ERROR_NO_SUCH_DEVICE_INTERFACE
)

const (
	MAX_DEVICE_ID_LEN   = 200
	MAX_DEVNODE_ID_LEN  = MAX_DEVICE_ID_LEN
	MAX_GUID_STRING_LEN = 39 // 38 chars + terminator null
	MAX_CLASS_NAME_LEN  = 32
	MAX_PROFILE_LEN     = 80
	MAX_CONFIG_VALUE    = 9999
	MAX_INSTANCE_VALUE  = 9999
	CONFIGMG_VERSION    = 0x0400
)

// Maximum string length constants
const (
	LINE_LEN                    = 256  // Windows 9x-compatible maximum for displayable strings coming from a device INF.
	MAX_INF_STRING_LENGTH       = 4096 // Actual maximum size of an INF string (including string substitutions).
	MAX_INF_SECTION_NAME_LENGTH = 255  // For Windows 9x compatibility, INF section names should be constrained to 32 characters.
	MAX_TITLE_LEN               = 60
	MAX_INSTRUCTION_LEN         = 256
	MAX_LABEL_LEN               = 30
	MAX_SERVICE_NAME_LEN        = 256
	MAX_SUBTITLE_LEN            = 256
)

const (
	// SP_MAX_MACHINENAME_LENGTH defines maximum length of a machine name in the format expected by ConfigMgr32 CM_Connect_Machine (i.e., "\\\\MachineName\0").
	SP_MAX_MACHINENAME_LENGTH = MAX_PATH + 3
)

// HSPFILEQ is type for setup file queue
type HSPFILEQ uintptr

// DevInfo holds reference to device information set
type DevInfo Handle

// DEVINST is a handle usually recognized by cfgmgr32 APIs
type DEVINST uint32

// DevInfoData is a device information structure (references a device instance that is a member of a device information set)
type DevInfoData struct {
	size      uint32
	ClassGUID GUID
	DevInst   DEVINST
	_         uintptr
}

// DevInfoListDetailData is a structure for detailed information on a device information set (used for SetupDiGetDeviceInfoListDetail which supersedes the functionality of SetupDiGetDeviceInfoListClass).
type DevInfoListDetailData struct {
	size                uint32 // Use unsafeSizeOf method
	ClassGUID           GUID
	RemoteMachineHandle Handle
	remoteMachineName   [SP_MAX_MACHINENAME_LENGTH]uint16
}

func (*DevInfoListDetailData) unsafeSizeOf() uint32 {
	if unsafe.Sizeof(uintptr(0)) == 4 {
		// Windows declares this with pshpack1.h
		return uint32(unsafe.Offsetof(DevInfoListDetailData{}.remoteMachineName) + unsafe.Sizeof(DevInfoListDetailData{}.remoteMachineName))
	}
	return uint32(unsafe.Sizeof(DevInfoListDetailData{}))
}

func (data *DevInfoListDetailData) RemoteMachineName() string {
	return UTF16ToString(data.remoteMachineName[:])
}

func (data *DevInfoListDetailData) SetRemoteMachineName(remoteMachineName string) error {
	str, err := UTF16FromString(remoteMachineName)
	if err != nil {
		return err
	}
	copy(data.remoteMachineName[:], str)
	return nil
}

// DI_FUNCTION is function type for device installer
type DI_FUNCTION uint32

const (
	DIF_SELECTDEVICE                   DI_FUNCTION = 0x00000001
	DIF_INSTALLDEVICE                  DI_FUNCTION = 0x00000002
	DIF_ASSIGNRESOURCES                DI_FUNCTION = 0x00000003
	DIF_PROPERTIES                     DI_FUNCTION = 0x00000004
	DIF_REMOVE                         DI_FUNCTION = 0x00000005
	DIF_FIRSTTIMESETUP                 DI_FUNCTION = 0x00000006
	DIF_FOUNDDEVICE                    DI_FUNCTION = 0x00000007
	DIF_SELECTCLASSDRIVERS             DI_FUNCTION = 0x00000008
	DIF_VALIDATECLASSDRIVERS           DI_FUNCTION = 0x00000009
	DIF_INSTALLCLASSDRIVERS            DI_FUNCTION = 0x0000000A
	DIF_CALCDISKSPACE                  DI_FUNCTION = 0x0000000B
	DIF_DESTROYPRIVATEDATA             DI_FUNCTION = 0x0000000C
	DIF_VALIDATEDRIVER                 DI_FUNCTION = 0x0000000D
	DIF_DETECT                         DI_FUNCTION = 0x0000000F
	DIF_INSTALLWIZARD                  DI_FUNCTION = 0x00000010
	DIF_DESTROYWIZARDDATA              DI_FUNCTION = 0x00000011
	DIF_PROPERTYCHANGE                 DI_FUNCTION = 0x00000012
	DIF_ENABLECLASS                    DI_FUNCTION = 0x00000013
	DIF_DETECTVERIFY                   DI_FUNCTION = 0x00000014
	DIF_INSTALLDEVICEFILES             DI_FUNCTION = 0x00000015
	DIF_UNREMOVE                       DI_FUNCTION = 0x00000016
	DIF_SELECTBESTCOMPATDRV            DI_FUNCTION = 0x00000017
	DIF_ALLOW_INSTALL                  DI_FUNCTION = 0x00000018
	DIF_REGISTERDEVICE                 DI_FUNCTION = 0x00000019
	DIF_NEWDEVICEWIZARD_PRESELECT      DI_FUNCTION = 0x0000001A
	DIF_NEWDEVICEWIZARD_SELECT         DI_FUNCTION = 0x0000001B
	DIF_NEWDEVICEWIZARD_PREANALYZE     DI_FUNCTION = 0x0000001C
	DIF_NEWDEVICEWIZARD_POSTANALYZE    DI_FUNCTION = 0x0000001D
	DIF_NEWDEVICEWIZARD_FINISHINSTALL  DI_FUNCTION = 0x0000001E
	DIF_INSTALLINTERFACES              DI_FUNCTION = 0x00000020
	DIF_DETECTCANCEL                   DI_FUNCTION = 0x00000021
	DIF_REGISTER_COINSTALLERS          DI_FUNCTION = 0x00000022
	DIF_ADDPROPERTYPAGE_ADVANCED       DI_FUNCTION = 0x00000023
	DIF_ADDPROPERTYPAGE_BASIC          DI_FUNCTION = 0x00000024
	DIF_TROUBLESHOOTER                 DI_FUNCTION = 0x00000026
	DIF_POWERMESSAGEWAKE               DI_FUNCTION = 0x00000027
	DIF_ADDREMOTEPROPERTYPAGE_ADVANCED DI_FUNCTION = 0x00000028
	DIF_UPDATEDRIVER_UI                DI_FUNCTION = 0x00000029
	DIF_FINISHINSTALL_ACTION           DI_FUNCTION = 0x0000002A
)

// DevInstallParams is device installation parameters structure (associated with a particular device information element, or globally with a device information set)
type DevInstallParams struct {
	size                     uint32
	Flags                    DI_FLAGS
	FlagsEx                  DI_FLAGSEX
	hwndParent               uintptr
	InstallMsgHandler        uintptr
	InstallMsgHandlerContext uintptr
	FileQueue                HSPFILEQ
	_                        uintptr
	_                        uint32
	driverPath               [MAX_PATH]uint16
}

func (params *DevInstallParams) DriverPath() string {
	return UTF16ToString(params.driverPath[:])
}

func (params *DevInstallParams) SetDriverPath(driverPath string) error {
	str, err := UTF16FromString(driverPath)
	if err != nil {
		return err
	}
	copy(params.driverPath[:], str)
	return nil
}

// DI_FLAGS is SP_DEVINSTALL_PARAMS.Flags values
type DI_FLAGS uint32

const (
	// Flags for choosing a device
	DI_SHOWOEM       DI_FLAGS = 0x00000001 // support Other... button
	DI_SHOWCOMPAT    DI_FLAGS = 0x00000002 // show compatibility list
	DI_SHOWCLASS     DI_FLAGS = 0x00000004 // show class list
	DI_SHOWALL       DI_FLAGS = 0x00000007 // both class & compat list shown
	DI_NOVCP         DI_FLAGS = 0x00000008 // don't create a new copy queue--use caller-supplied FileQueue
	DI_DIDCOMPAT     DI_FLAGS = 0x00000010 // Searched for compatible devices
	DI_DIDCLASS      DI_FLAGS = 0x00000020 // Searched for class devices
	DI_AUTOASSIGNRES DI_FLAGS = 0x00000040 // No UI for resources if possible

	// Flags returned by DiInstallDevice to indicate need to reboot/restart
	DI_NEEDRESTART DI_FLAGS = 0x00000080 // Reboot required to take effect
	DI_NEEDREBOOT  DI_FLAGS = 0x00000100 // ""

	// Flags for device installation
	DI_NOBROWSE DI_FLAGS = 0x00000200 // no Browse... in InsertDisk

	// Flags set by DiBuildDriverInfoList
	DI_MULTMFGS DI_FLAGS = 0x00000400 // Set if multiple manufacturers in class driver list

	// Flag indicates that device is disabled
	DI_DISABLED DI_FLAGS = 0x00000800 // Set if device disabled

	// Flags for Device/Class Properties
	DI_GENERALPAGE_ADDED  DI_FLAGS = 0x00001000
	DI_RESOURCEPAGE_ADDED DI_FLAGS = 0x00002000

	// Flag to indicate the setting properties for this Device (or class) caused a change so the Dev Mgr UI probably needs to be updated.
	DI_PROPERTIES_CHANGE DI_FLAGS = 0x00004000

	// Flag to indicate that the sorting from the INF file should be used.
	DI_INF_IS_SORTED DI_FLAGS = 0x00008000

	// Flag to indicate that only the INF specified by SP_DEVINSTALL_PARAMS.DriverPath should be searched.
	DI_ENUMSINGLEINF DI_FLAGS = 0x00010000

	// Flag that prevents ConfigMgr from removing/re-enumerating devices during device
	// registration, installation, and deletion.
	DI_DONOTCALLCONFIGMG DI_FLAGS = 0x00020000

	// The following flag can be used to install a device disabled
	DI_INSTALLDISABLED DI_FLAGS = 0x00040000

	// Flag that causes SetupDiBuildDriverInfoList to build a device's compatible driver
	// list from its existing class driver list, instead of the normal INF search.
	DI_COMPAT_FROM_CLASS DI_FLAGS = 0x00080000

	// This flag is set if the Class Install params should be used.
	DI_CLASSINSTALLPARAMS DI_FLAGS = 0x00100000

	// This flag is set if the caller of DiCallClassInstaller does NOT want the internal default action performed if the Class installer returns ERROR_DI_DO_DEFAULT.
	DI_NODI_DEFAULTACTION DI_FLAGS = 0x00200000

	// Flags for device installation
	DI_QUIETINSTALL        DI_FLAGS = 0x00800000 // don't confuse the user with questions or excess info
	DI_NOFILECOPY          DI_FLAGS = 0x01000000 // No file Copy necessary
	DI_FORCECOPY           DI_FLAGS = 0x02000000 // Force files to be copied from install path
	DI_DRIVERPAGE_ADDED    DI_FLAGS = 0x04000000 // Prop provider added Driver page.
	DI_USECI_SELECTSTRINGS DI_FLAGS = 0x08000000 // Use Class Installer Provided strings in the Select Device Dlg
	DI_OVERRIDE_INFFLAGS   DI_FLAGS = 0x10000000 // Override INF flags
	DI_PROPS_NOCHANGEUSAGE DI_FLAGS = 0x20000000 // No Enable/Disable in General Props

	DI_NOSELECTICONS DI_FLAGS = 0x40000000 // No small icons in select device dialogs

	DI_NOWRITE_IDS DI_FLAGS = 0x80000000 // Don't write HW & Compat IDs on install
)

// DI_FLAGSEX is SP_DEVINSTALL_PARAMS.FlagsEx values
type DI_FLAGSEX uint32

const (
	DI_FLAGSEX_CI_FAILED                DI_FLAGSEX = 0x00000004 // Failed to Load/Call class installer
	DI_FLAGSEX_FINISHINSTALL_ACTION     DI_FLAGSEX = 0x00000008 // Class/co-installer wants to get a DIF_FINISH_INSTALL action in client context.
	DI_FLAGSEX_DIDINFOLIST              DI_FLAGSEX = 0x00000010 // Did the Class Info List
	DI_FLAGSEX_DIDCOMPATINFO            DI_FLAGSEX = 0x00000020 // Did the Compat Info List
	DI_FLAGSEX_FILTERCLASSES            DI_FLAGSEX = 0x00000040
	DI_FLAGSEX_SETFAILEDINSTALL         DI_FLAGSEX = 0x00000080
	DI_FLAGSEX_DEVICECHANGE             DI_FLAGSEX = 0x00000100
	DI_FLAGSEX_ALWAYSWRITEIDS           DI_FLAGSEX = 0x00000200
	DI_FLAGSEX_PROPCHANGE_PENDING       DI_FLAGSEX = 0x00000400 // One or more device property sheets have had changes made to them, and need to have a DIF_PROPERTYCHANGE occur.
	DI_FLAGSEX_ALLOWEXCLUDEDDRVS        DI_FLAGSEX = 0x00000800
	DI_FLAGSEX_NOUIONQUERYREMOVE        DI_FLAGSEX = 0x00001000
	DI_FLAGSEX_USECLASSFORCOMPAT        DI_FLAGSEX = 0x00002000 // Use the device's class when building compat drv list. (Ignored if DI_COMPAT_FROM_CLASS flag is specified.)
	DI_FLAGSEX_NO_DRVREG_MODIFY         DI_FLAGSEX = 0x00008000 // Don't run AddReg and DelReg for device's software (driver) key.
	DI_FLAGSEX_IN_SYSTEM_SETUP          DI_FLAGSEX = 0x00010000 // Installation is occurring during initial system setup.
	DI_FLAGSEX_INET_DRIVER              DI_FLAGSEX = 0x00020000 // Driver came from Windows Update
	DI_FLAGSEX_APPENDDRIVERLIST         DI_FLAGSEX = 0x00040000 // Cause SetupDiBuildDriverInfoList to append a new driver list to an existing list.
	DI_FLAGSEX_PREINSTALLBACKUP         DI_FLAGSEX = 0x00080000 // not used
	DI_FLAGSEX_BACKUPONREPLACE          DI_FLAGSEX = 0x00100000 // not used
	DI_FLAGSEX_DRIVERLIST_FROM_URL      DI_FLAGSEX = 0x00200000 // build driver list from INF(s) retrieved from URL specified in SP_DEVINSTALL_PARAMS.DriverPath (empty string means Windows Update website)
	DI_FLAGSEX_EXCLUDE_OLD_INET_DRIVERS DI_FLAGSEX = 0x00800000 // Don't include old Internet drivers when building a driver list. Ignored on Windows Vista and later.
	DI_FLAGSEX_POWERPAGE_ADDED          DI_FLAGSEX = 0x01000000 // class installer added their own power page
	DI_FLAGSEX_FILTERSIMILARDRIVERS     DI_FLAGSEX = 0x02000000 // only include similar drivers in class list
	DI_FLAGSEX_INSTALLEDDRIVER          DI_FLAGSEX = 0x04000000 // only add the installed driver to the class or compat driver list.  Used in calls to SetupDiBuildDriverInfoList
	DI_FLAGSEX_NO_CLASSLIST_NODE_MERGE  DI_FLAGSEX = 0x08000000 // Don't remove identical driver nodes from the class list
	DI_FLAGSEX_ALTPLATFORM_DRVSEARCH    DI_FLAGSEX = 0x10000000 // Build driver list based on alternate platform information specified in associated file queue
	DI_FLAGSEX_RESTART_DEVICE_ONLY      DI_FLAGSEX = 0x20000000 // only restart the device drivers are being installed on as opposed to restarting all devices using those drivers.
	DI_FLAGSEX_RECURSIVESEARCH          DI_FLAGSEX = 0x40000000 // Tell SetupDiBuildDriverInfoList to do a recursive search
	DI_FLAGSEX_SEARCH_PUBLISHED_INFS    DI_FLAGSEX = 0x80000000 // Tell SetupDiBuildDriverInfoList to do a "published INF" search
)

// ClassInstallHeader is the first member of any class install parameters structure. It contains the device installation request code that defines the format of the rest of the install parameters structure.
type ClassInstallHeader struct {
	size            uint32
	InstallFunction DI_FUNCTION
}

func MakeClassInstallHeader(installFunction DI_FUNCTION) *ClassInstallHeader {
	hdr := &ClassInstallHeader{InstallFunction: installFunction}
	hdr.size = uint32(unsafe.Sizeof(*hdr))
	return hdr
}

// DICS_STATE specifies values indicating a change in a device's state
type DICS_STATE uint32

const (
	DICS_ENABLE     DICS_STATE = 0x00000001 // The device is being enabled.
	DICS_DISABLE    DICS_STATE = 0x00000002 // The device is being disabled.
	DICS_PROPCHANGE DICS_STATE = 0x00000003 // The properties of the device have changed.
	DICS_START      DICS_STATE = 0x00000004 // The device is being started (if the request is for the currently active hardware profile).
	DICS_STOP       DICS_STATE = 0x00000005 // The device is being stopped. The driver stack will be unloaded and the CSCONFIGFLAG_DO_NOT_START flag will be set for the device.
)

// DICS_FLAG specifies the scope of a device property change
type DICS_FLAG uint32

const (
	DICS_FLAG_GLOBAL         DICS_FLAG = 0x00000001 // make change in all hardware profiles
	DICS_FLAG_CONFIGSPECIFIC DICS_FLAG = 0x00000002 // make change in specified profile only
	DICS_FLAG_CONFIGGENERAL  DICS_FLAG = 0x00000004 // 1 or more hardware profile-specific changes to follow (obsolete)
)

// PropChangeParams is a structure corresponding to a DIF_PROPERTYCHANGE install function.
type PropChangeParams struct {
	ClassInstallHeader ClassInstallHeader
	StateChange        DICS_STATE
	Scope              DICS_FLAG
	HwProfile          uint32
}

// DI_REMOVEDEVICE specifies the scope of the device removal
type DI_REMOVEDEVICE uint32

const (
	DI_REMOVEDEVICE_GLOBAL         DI_REMOVEDEVICE = 0x00000001 // Make this change in all hardware profiles. Remove information about the device from the registry.
	DI_REMOVEDEVICE_CONFIGSPECIFIC DI_REMOVEDEVICE = 0x00000002 // Make this change to only the hardware profile specified by HwProfile. this flag only applies to root-enumerated devices. When Windows removes the device from the last hardware profile in which it was configured, Windows performs a global removal.
)

// RemoveDeviceParams is a structure corresponding to a DIF_REMOVE install function.
type RemoveDeviceParams struct {
	ClassInstallHeader ClassInstallHeader
	Scope              DI_REMOVEDEVICE
	HwProfile          uint32
}

// DrvInfoData is driver information structure (member of a driver info list that may be associated with a particular device instance, or (globally) with a device information set)
type DrvInfoData struct {
	size          uint32
	DriverType    uint32
	_             uintptr
	description   [LINE_LEN]uint16
	mfgName       [LINE_LEN]uint16
	providerName  [LINE_LEN]uint16
	DriverDate    Filetime
	DriverVersion uint64
}

func (data *DrvInfoData) Description() string {
	return UTF16ToString(data.description[:])
}

func (data *DrvInfoData) SetDescription(description string) error {
	str, err := UTF16FromString(description)
	if err != nil {
		return err
	}
	copy(data.description[:], str)
	return nil
}

func (data *DrvInfoData) MfgName() string {
	return UTF16ToString(data.mfgName[:])
}

func (data *DrvInfoData) SetMfgName(mfgName string) error {
	str, err := UTF16FromString(mfgName)
	if err != nil {
		return err
	}
	copy(data.mfgName[:], str)
	return nil
}

func (data *DrvInfoData) ProviderName() string {
	return UTF16ToString(data.providerName[:])
}

func (data *DrvInfoData) SetProviderName(providerName string) error {
	str, err := UTF16FromString(providerName)
	if err != nil {
		return err
	}
	copy(data.providerName[:], str)
	return nil
}

// IsNewer method returns true if DrvInfoData date and version is newer than supplied parameters.
func (data *DrvInfoData) IsNewer(driverDate Filetime, driverVersion uint64) bool {
	if data.DriverDate.HighDateTime > driverDate.HighDateTime {
		return true
	}
	if data.DriverDate.HighDateTime < driverDate.HighDateTime {
		return false
	}

	if data.DriverDate.LowDateTime > driverDate.LowDateTime {
		return true
	}
	if data.DriverDate.LowDateTime < driverDate.LowDateTime {
		return false
	}

	if data.DriverVersion > driverVersion {
		return true
	}
	if data.DriverVersion < driverVersion {
		return false
	}

	return false
}

// DrvInfoDetailData is driver information details structure (provides detailed information about a particular driver information structure)
type DrvInfoDetailData struct {
	size            uint32 // Use unsafeSizeOf method
	InfDate         Filetime
	compatIDsOffset uint32
	compatIDsLength uint32
	_               uintptr
	sectionName     [LINE_LEN]uint16
	infFileName     [MAX_PATH]uint16
	drvDescription  [LINE_LEN]uint16
	hardwareID      [1]uint16
}

func (*DrvInfoDetailData) unsafeSizeOf() uint32 {
	if unsafe.Sizeof(uintptr(0)) == 4 {
		// Windows declares this with pshpack1.h
		return uint32(unsafe.Offsetof(DrvInfoDetailData{}.hardwareID) + unsafe.Sizeof(DrvInfoDetailData{}.hardwareID))
	}
	return uint32(unsafe.Sizeof(DrvInfoDetailData{}))
}

func (data *DrvInfoDetailData) SectionName() string {
	return UTF16ToString(data.sectionName[:])
}

func (data *DrvInfoDetailData) InfFileName() string {
	return UTF16ToString(data.infFileName[:])
}

func (data *DrvInfoDetailData) DrvDescription() string {
	return UTF16ToString(data.drvDescription[:])
}

func (data *DrvInfoDetailData) HardwareID() string {
	if data.compatIDsOffset > 1 {
		bufW := data.getBuf()
		return UTF16ToString(bufW[:wcslen(bufW)])
	}

	return ""
}

func (data *DrvInfoDetailData) CompatIDs() []string {
	a := make([]string, 0)

	if data.compatIDsLength > 0 {
		bufW := data.getBuf()
		bufW = bufW[data.compatIDsOffset : data.compatIDsOffset+data.compatIDsLength]
		for i := 0; i < len(bufW); {
			j := i + wcslen(bufW[i:])
			if i < j {
				a = append(a, UTF16ToString(bufW[i:j]))
			}
			i = j + 1
		}
	}

	return a
}

func (data *DrvInfoDetailData) getBuf() []uint16 {
	len := (data.size - uint32(unsafe.Offsetof(data.hardwareID))) / 2
	sl := struct {
		addr *uint16
		len  int
		cap  int
	}{&data.hardwareID[0], int(len), int(len)}
	return *(*[]uint16)(unsafe.Pointer(&sl))
}

// IsCompatible method tests if given hardware ID matches the driver or is listed on the compatible ID list.
func (data *DrvInfoDetailData) IsCompatible(hwid string) bool {
	hwidLC := strings.ToLower(hwid)
	if strings.ToLower(data.HardwareID()) == hwidLC {
		return true
	}
	a := data.CompatIDs()
	for i := range a {
		if strings.ToLower(a[i]) == hwidLC {
			return true
		}
	}

	return false
}

// DICD flags control SetupDiCreateDeviceInfo
type DICD uint32

const (
	DICD_GENERATE_ID       DICD = 0x00000001
	DICD_INHERIT_CLASSDRVS DICD = 0x00000002
)

// SUOI flags control SetupUninstallOEMInf
type SUOI uint32

const (
	SUOI_FORCEDELETE SUOI = 0x0001
)

// SPDIT flags to distinguish between class drivers and
// device drivers. (Passed in 'DriverType' parameter of
// driver information list APIs)
type SPDIT uint32

const (
	SPDIT_NODRIVER     SPDIT = 0x00000000
	SPDIT_CLASSDRIVER  SPDIT = 0x00000001
	SPDIT_COMPATDRIVER SPDIT = 0x00000002
)

// DIGCF flags control what is included in the device information set built by SetupDiGetClassDevs
type DIGCF uint32

const (
	DIGCF_DEFAULT         DIGCF = 0x00000001 // only valid with DIGCF_DEVICEINTERFACE
	DIGCF_PRESENT         DIGCF = 0x00000002
	DIGCF_ALLCLASSES      DIGCF = 0x00000004
	DIGCF_PROFILE         DIGCF = 0x00000008
	DIGCF_DEVICEINTERFACE DIGCF = 0x00000010
)

// DIREG specifies values for SetupDiCreateDevRegKey, SetupDiOpenDevRegKey, and SetupDiDeleteDevRegKey.
type DIREG uint32

const (
	DIREG_DEV  DIREG = 0x00000001 // Open/Create/Delete device key
	DIREG_DRV  DIREG = 0x00000002 // Open/Create/Delete driver key
	DIREG_BOTH DIREG = 0x00000004 // Delete both driver and Device key
)

// SPDRP specifies device registry property codes
// (Codes marked as read-only (R) may only be used for
// SetupDiGetDeviceRegistryProperty)
//
// These values should cover the same set of registry properties
// as defined by the CM_DRP codes in cfgmgr32.h.
//
// Note that SPDRP codes are zero based while CM_DRP codes are one based!
type SPDRP uint32

const (
	SPDRP_DEVICEDESC                  SPDRP = 0x00000000 // DeviceDesc (R/W)
	SPDRP_HARDWAREID                  SPDRP = 0x00000001 // HardwareID (R/W)
	SPDRP_COMPATIBLEIDS               SPDRP = 0x00000002 // CompatibleIDs (R/W)
	SPDRP_SERVICE                     SPDRP = 0x00000004 // Service (R/W)
	SPDRP_CLASS                       SPDRP = 0x00000007 // Class (R--tied to ClassGUID)
	SPDRP_CLASSGUID                   SPDRP = 0x00000008 // ClassGUID (R/W)
	SPDRP_DRIVER                      SPDRP = 0x00000009 // Driver (R/W)
	SPDRP_CONFIGFLAGS                 SPDRP = 0x0000000A // ConfigFlags (R/W)
	SPDRP_MFG                         SPDRP = 0x0000000B // Mfg (R/W)
	SPDRP_FRIENDLYNAME                SPDRP = 0x0000000C // FriendlyName (R/W)
	SPDRP_LOCATION_INFORMATION        SPDRP = 0x0000000D // LocationInformation (R/W)
	SPDRP_PHYSICAL_DEVICE_OBJECT_NAME SPDRP = 0x0000000E // PhysicalDeviceObjectName (R)
	SPDRP_CAPABILITIES                SPDRP = 0x0000000F // Capabilities (R)
	SPDRP_UI_NUMBER                   SPDRP = 0x00000010 // UiNumber (R)
	SPDRP_UPPERFILTERS                SPDRP = 0x00000011 // UpperFilters (R/W)
	SPDRP_LOWERFILTERS                SPDRP = 0x00000012 // LowerFilters (R/W)
	SPDRP_BUSTYPEGUID                 SPDRP = 0x00000013 // BusTypeGUID (R)
	SPDRP_LEGACYBUSTYPE               SPDRP = 0x00000014 // LegacyBusType (R)
	SPDRP_BUSNUMBER                   SPDRP = 0x00000015 // BusNumber (R)
	SPDRP_ENUMERATOR_NAME             SPDRP = 0x00000016 // Enumerator Name (R)
	SPDRP_SECURITY                    SPDRP = 0x00000017 // Security (R/W, binary form)
	SPDRP_SECURITY_SDS                SPDRP = 0x00000018 // Security (W, SDS form)
	SPDRP_DEVTYPE                     SPDRP = 0x00000019 // Device Type (R/W)
	SPDRP_EXCLUSIVE                   SPDRP = 0x0000001A // Device is exclusive-access (R/W)
	SPDRP_CHARACTERISTICS             SPDRP = 0x0000001B // Device Characteristics (R/W)
	SPDRP_ADDRESS                     SPDRP = 0x0000001C // Device Address (R)
	SPDRP_UI_NUMBER_DESC_FORMAT       SPDRP = 0x0000001D // UiNumberDescFormat (R/W)
	SPDRP_DEVICE_POWER_DATA           SPDRP = 0x0000001E // Device Power Data (R)
	SPDRP_REMOVAL_POLICY              SPDRP = 0x0000001F // Removal Policy (R)
	SPDRP_REMOVAL_POLICY_HW_DEFAULT   SPDRP = 0x00000020 // Hardware Removal Policy (R)
	SPDRP_REMOVAL_POLICY_OVERRIDE     SPDRP = 0x00000021 // Removal Policy Override (RW)
	SPDRP_INSTALL_STATE               SPDRP = 0x00000022 // Device Install State (R)
	SPDRP_LOCATION_PATHS              SPDRP = 0x00000023 // Device Location Paths (R)
	SPDRP_BASE_CONTAINERID            SPDRP = 0x00000024 // Base ContainerID (R)

	SPDRP_MAXIMUM_PROPERTY SPDRP = 0x00000025 // Upper bound on ordinals
)

// DEVPROPTYPE represents the property-data-type identifier that specifies the
// data type of a device property value in the unified device property model.
type DEVPROPTYPE uint32

const (
	DEVPROP_TYPEMOD_ARRAY DEVPROPTYPE = 0x00001000
	DEVPROP_TYPEMOD_LIST  DEVPROPTYPE = 0x00002000

	DEVPROP_TYPE_EMPTY                      DEVPROPTYPE = 0x00000000
	DEVPROP_TYPE_NULL                       DEVPROPTYPE = 0x00000001
	DEVPROP_TYPE_SBYTE                      DEVPROPTYPE = 0x00000002
	DEVPROP_TYPE_BYTE                       DEVPROPTYPE = 0x00000003
	DEVPROP_TYPE_INT16                      DEVPROPTYPE = 0x00000004
	DEVPROP_TYPE_UINT16                     DEVPROPTYPE = 0x00000005
	DEVPROP_TYPE_INT32                      DEVPROPTYPE = 0x00000006
	DEVPROP_TYPE_UINT32                     DEVPROPTYPE = 0x00000007
	DEVPROP_TYPE_INT64                      DEVPROPTYPE = 0x00000008
	DEVPROP_TYPE_UINT64                     DEVPROPTYPE = 0x00000009
	DEVPROP_TYPE_FLOAT                      DEVPROPTYPE = 0x0000000A
	DEVPROP_TYPE_DOUBLE                     DEVPROPTYPE = 0x0000000B
	DEVPROP_TYPE_DECIMAL                    DEVPROPTYPE = 0x0000000C
	DEVPROP_TYPE_GUID                       DEVPROPTYPE = 0x0000000D
	DEVPROP_TYPE_CURRENCY                   DEVPROPTYPE = 0x0000000E
	DEVPROP_TYPE_DATE                       DEVPROPTYPE = 0x0000000F
	DEVPROP_TYPE_FILETIME                   DEVPROPTYPE = 0x00000010
	DEVPROP_TYPE_BOOLEAN                    DEVPROPTYPE = 0x00000011
	DEVPROP_TYPE_STRING                     DEVPROPTYPE = 0x00000012
	DEVPROP_TYPE_STRING_LIST                DEVPROPTYPE = DEVPROP_TYPE_STRING | DEVPROP_TYPEMOD_LIST
	DEVPROP_TYPE_SECURITY_DESCRIPTOR        DEVPROPTYPE = 0x00000013
	DEVPROP_TYPE_SECURITY_DESCRIPTOR_STRING DEVPROPTYPE = 0x00000014
	DEVPROP_TYPE_DEVPROPKEY                 DEVPROPTYPE = 0x00000015
	DEVPROP_TYPE_DEVPROPTYPE                DEVPROPTYPE = 0x00000016
	DEVPROP_TYPE_BINARY                     DEVPROPTYPE = DEVPROP_TYPE_BYTE | DEVPROP_TYPEMOD_ARRAY
	DEVPROP_TYPE_ERROR                      DEVPROPTYPE = 0x00000017
	DEVPROP_TYPE_NTSTATUS                   DEVPROPTYPE = 0x00000018
	DEVPROP_TYPE_STRING_INDIRECT            DEVPROPTYPE = 0x00000019

	MAX_DEVPROP_TYPE    DEVPROPTYPE = 0x00000019
	MAX_DEVPROP_TYPEMOD DEVPROPTYPE = 0x00002000

	DEVPROP_MASK_TYPE    DEVPROPTYPE = 0x00000FFF
	DEVPROP_MASK_TYPEMOD DEVPROPTYPE = 0x0000F000
)

// DEVPROPGUID specifies a property category.
type DEVPROPGUID GUID

// DEVPROPID uniquely identifies the property within the property category.
type DEVPROPID uint32

const DEVPROPID_FIRST_USABLE DEVPROPID = 2

// DEVPROPKEY represents a device property key for a device property in the
// unified device property model.
type DEVPROPKEY struct {
	FmtID DEVPROPGUID
	PID   DEVPROPID
}

// CONFIGRET is a return value or error code from cfgmgr32 APIs
type CONFIGRET uint32

func (ret CONFIGRET) Error() string {
	if win32Error, ok := ret.Unwrap().(Errno); ok {
		return fmt.Sprintf("%s (CfgMgr error: 0x%08x)", win32Error.Error(), uint32(ret))
	}
	return fmt.Sprintf("CfgMgr error: 0x%08x", uint32(ret))
}

func (ret CONFIGRET) Win32Error(defaultError Errno) Errno {
	return cm_MapCrToWin32Err(ret, defaultError)
}

func (ret CONFIGRET) Unwrap() error {
	const noMatch = Errno(^uintptr(0))
	win32Error := ret.Win32Error(noMatch)
	if win32Error == noMatch {
		return nil
	}
	return win32Error
}

const (
	CR_SUCCESS                  CONFIGRET = 0x00000000
	CR_DEFAULT                  CONFIGRET = 0x00000001
	CR_OUT_OF_MEMORY            CONFIGRET = 0x00000002
	CR_INVALID_POINTER          CONFIGRET = 0x00000003
	CR_INVALID_FLAG             CONFIGRET = 0x00000004
	CR_INVALID_DEVNODE          CONFIGRET = 0x00000005
	CR_INVALID_DEVINST                    = CR_INVALID_DEVNODE
	CR_INVALID_RES_DES          CONFIGRET = 0x00000006
	CR_INVALID_LOG_CONF         CONFIGRET = 0x00000007
	CR_INVALID_ARBITRATOR       CONFIGRET = 0x00000008
	CR_INVALID_NODELIST         CONFIGRET = 0x00000009
	CR_DEVNODE_HAS_REQS         CONFIGRET = 0x0000000A
	CR_DEVINST_HAS_REQS                   = CR_DEVNODE_HAS_REQS
	CR_INVALID_RESOURCEID       CONFIGRET = 0x0000000B
	CR_DLVXD_NOT_FOUND          CONFIGRET = 0x0000000C
	CR_NO_SUCH_DEVNODE          CONFIGRET = 0x0000000D
	CR_NO_SUCH_DEVINST                    = CR_NO_SUCH_DEVNODE
	CR_NO_MORE_LOG_CONF         CONFIGRET = 0x0000000E
	CR_NO_MORE_RES_DES          CONFIGRET = 0x0000000F
	CR_ALREADY_SUCH_DEVNODE     CONFIGRET = 0x00000010
	CR_ALREADY_SUCH_DEVINST               = CR_ALREADY_SUCH_DEVNODE
	CR_INVALID_RANGE_LIST       CONFIGRET = 0x00000011
	CR_INVALID_RANGE            CONFIGRET = 0x00000012
	CR_FAILURE                  CONFIGRET = 0x00000013
	CR_NO_SUCH_LOGICAL_DEV      CONFIGRET = 0x00000014
	CR_CREATE_BLOCKED           CONFIGRET = 0x00000015
	CR_NOT_SYSTEM_VM            CONFIGRET = 0x00000016
	CR_REMOVE_VETOED            CONFIGRET = 0x00000017
	CR_APM_VETOED               CONFIGRET = 0x00000018
	CR_INVALID_LOAD_TYPE        CONFIGRET = 0x00000019
	CR_BUFFER_SMALL             CONFIGRET = 0x0000001A
	CR_NO_ARBITRATOR            CONFIGRET = 0x0000001B
	CR_NO_REGISTRY_HANDLE       CONFIGRET = 0x0000001C
	CR_REGISTRY_ERROR           CONFIGRET = 0x0000001D
	CR_INVALID_DEVICE_ID        CONFIGRET = 0x0000001E
	CR_INVALID_DATA             CONFIGRET = 0x0000001F
	CR_INVALID_API              CONFIGRET = 0x00000020
	CR_DEVLOADER_NOT_READY      CONFIGRET = 0x00000021
	CR_NEED_RESTART             CONFIGRET = 0x00000022
	CR_NO_MORE_HW_PROFILES      CONFIGRET = 0x00000023
	CR_DEVICE_NOT_THERE         CONFIGRET = 0x00000024
	CR_NO_SUCH_VALUE            CONFIGRET = 0x00000025
	CR_WRONG_TYPE               CONFIGRET = 0x00000026
	CR_INVALID_PRIORITY         CONFIGRET = 0x00000027
	CR_NOT_DISABLEABLE          CONFIGRET = 0x00000028
	CR_FREE_RESOURCES           CONFIGRET = 0x00000029
	CR_QUERY_VETOED             CONFIGRET = 0x0000002A
	CR_CANT_SHARE_IRQ           CONFIGRET = 0x0000002B
	CR_NO_DEPENDENT             CONFIGRET = 0x0000002C
	CR_SAME_RESOURCES           CONFIGRET = 0x0000002D
	CR_NO_SUCH_REGISTRY_KEY     CONFIGRET = 0x0000002E
	CR_INVALID_MACHINENAME      CONFIGRET = 0x0000002F
	CR_REMOTE_COMM_FAILURE      CONFIGRET = 0x00000030
	CR_MACHINE_UNAVAILABLE      CONFIGRET = 0x00000031
	CR_NO_CM_SERVICES           CONFIGRET = 0x00000032
	CR_ACCESS_DENIED            CONFIGRET = 0x00000033
	CR_CALL_NOT_IMPLEMENTED     CONFIGRET = 0x00000034
	CR_INVALID_PROPERTY         CONFIGRET = 0x00000035
	CR_DEVICE_INTERFACE_ACTIVE  CONFIGRET = 0x00000036
	CR_NO_SUCH_DEVICE_INTERFACE CONFIGRET = 0x00000037
	CR_INVALID_REFERENCE_STRING CONFIGRET = 0x00000038
	CR_INVALID_CONFLICT_LIST    CONFIGRET = 0x00000039
	CR_INVALID_INDEX            CONFIGRET = 0x0000003A
	CR_INVALID_STRUCTURE_SIZE   CONFIGRET = 0x0000003B
	NUM_CR_RESULTS              CONFIGRET = 0x0000003C
)

const (
	CM_GET_DEVICE_INTERFACE_LIST_PRESENT     = 0 // only currently 'live' device interfaces
	CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES = 1 // all registered device interfaces, live or not
)

const (
	DN_ROOT_ENUMERATED       = 0x00000001        // Was enumerated by ROOT
	DN_DRIVER_LOADED         = 0x00000002        // Has Register_Device_Driver
	DN_ENUM_LOADED           = 0x00000004        // Has Register_Enumerator
	DN_STARTED               = 0x00000008        // Is currently configured
	DN_MANUAL                = 0x00000010        // Manually installed
	DN_NEED_TO_ENUM          = 0x00000020        // May need reenumeration
	DN_NOT_FIRST_TIME        = 0x00000040        // Has received a config
	DN_HARDWARE_ENUM         = 0x00000080        // Enum generates hardware ID
	DN_LIAR                  = 0x00000100        // Lied about can reconfig once
	DN_HAS_MARK              = 0x00000200        // Not CM_Create_DevInst lately
	DN_HAS_PROBLEM           = 0x00000400        // Need device installer
	DN_FILTERED              = 0x00000800        // Is filtered
	DN_MOVED                 = 0x00001000        // Has been moved
	DN_DISABLEABLE           = 0x00002000        // Can be disabled
	DN_REMOVABLE             = 0x00004000        // Can be removed
	DN_PRIVATE_PROBLEM       = 0x00008000        // Has a private problem
	DN_MF_PARENT             = 0x00010000        // Multi function parent
	DN_MF_CHILD              = 0x00020000        // Multi function child
	DN_WILL_BE_REMOVED       = 0x00040000        // DevInst is being removed
	DN_NOT_FIRST_TIMEE       = 0x00080000        // Has received a config enumerate
	DN_STOP_FREE_RES         = 0x00100000        // When child is stopped, free resources
	DN_REBAL_CANDIDATE       = 0x00200000        // Don't skip during rebalance
	DN_BAD_PARTIAL           = 0x00400000        // This devnode's log_confs do not have same resources
	DN_NT_ENUMERATOR         = 0x00800000        // This devnode's is an NT enumerator
	DN_NT_DRIVER             = 0x01000000        // This devnode's is an NT driver
	DN_NEEDS_LOCKING         = 0x02000000        // Devnode need lock resume processing
	DN_ARM_WAKEUP            = 0x04000000        // Devnode can be the wakeup device
	DN_APM_ENUMERATOR        = 0x08000000        // APM aware enumerator
	DN_APM_DRIVER            = 0x10000000        // APM aware driver
	DN_SILENT_INSTALL        = 0x20000000        // Silent install
	DN_NO_SHOW_IN_DM         = 0x40000000        // No show in device manager
	DN_BOOT_LOG_PROB         = 0x80000000        // Had a problem during preassignment of boot log conf
	DN_NEED_RESTART          = DN_LIAR           // System needs to be restarted for this Devnode to work properly
	DN_DRIVER_BLOCKED        = DN_NOT_FIRST_TIME // One or more drivers are blocked from loading for this Devnode
	DN_LEGACY_DRIVER         = DN_MOVED          // This device is using a legacy driver
	DN_CHILD_WITH_INVALID_ID = DN_HAS_MARK       // One or more children have invalid IDs
	DN_DEVICE_DISCONNECTED   = DN_NEEDS_LOCKING  // The function driver for a device reported that the device is not connected.  Typically this means a wireless device is out of range.
	DN_QUERY_REMOVE_PENDING  = DN_MF_PARENT      // Device is part of a set of related devices collectively pending query-removal
	DN_QUERY_REMOVE_ACTIVE   = DN_MF_CHILD       // Device is actively engaged in a query-remove IRP
	DN_CHANGEABLE_FLAGS      = DN_NOT_FIRST_TIME | DN_HARDWARE_ENUM | DN_HAS_MARK | DN_DISABLEABLE | DN_REMOVABLE | DN_MF_CHILD | DN_MF_PARENT | DN_NOT_FIRST_TIMEE | DN_STOP_FREE_RES | DN_REBAL_CANDIDATE | DN_NT_ENUMERATOR | DN_NT_DRIVER | DN_SILENT_INSTALL | DN_NO_SHOW_IN_DM
)

//sys	setupDiCreateDeviceInfoListEx(classGUID *GUID, hwndParent uintptr, machineName *uint16, reserved uintptr) (handle DevInfo, err error) [failretval==DevInfo(InvalidHandle)] = setupapi.SetupDiCreateDeviceInfoListExW

// SetupDiCreateDeviceInfoListEx function creates an empty device information set on a remote or a local computer and optionally associates the set with a device setup class.
func SetupDiCreateDeviceInfoListEx(classGUID *GUID, hwndParent uintptr, machineName string) (deviceInfoSet DevInfo, err error) {
	var machineNameUTF16 *uint16
	if machineName != "" {
		machineNameUTF16, err = UTF16PtrFromString(machineName)
		if err != nil {
			return
		}
	}
	return setupDiCreateDeviceInfoListEx(classGUID, hwndParent, machineNameUTF16, 0)
}

//sys	setupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo, deviceInfoSetDetailData *DevInfoListDetailData) (err error) = setupapi.SetupDiGetDeviceInfoListDetailW

// SetupDiGetDeviceInfoListDetail function retrieves information associated with a device information set including the class GUID, remote computer handle, and remote computer name.
func SetupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo) (deviceInfoSetDetailData *DevInfoListDetailData, err error) {
	data := &DevInfoListDetailData{}
	data.size = data.unsafeSizeOf()

	return data, setupDiGetDeviceInfoListDetail(deviceInfoSet, data)
}

// DeviceInfoListDetail method retrieves information associated with a device information set including the class GUID, remote computer handle, and remote computer name.
func (deviceInfoSet DevInfo) DeviceInfoListDetail() (*DevInfoListDetailData, error) {
	return SetupDiGetDeviceInfoListDetail(deviceInfoSet)
}

//sys	setupDiCreateDeviceInfo(deviceInfoSet DevInfo, DeviceName *uint16, classGUID *GUID, DeviceDescription *uint16, hwndParent uintptr, CreationFlags DICD, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiCreateDeviceInfoW

// SetupDiCreateDeviceInfo function creates a new device information element and adds it as a new member to the specified device information set.
func SetupDiCreateDeviceInfo(deviceInfoSet DevInfo, deviceName string, classGUID *GUID, deviceDescription string, hwndParent uintptr, creationFlags DICD) (deviceInfoData *DevInfoData, err error) {
	deviceNameUTF16, err := UTF16PtrFromString(deviceName)
	if err != nil {
		return
	}

	var deviceDescriptionUTF16 *uint16
	if deviceDescription != "" {
		deviceDescriptionUTF16, err = UTF16PtrFromString(deviceDescription)
		if err != nil {
			return
		}
	}

	data := &DevInfoData{}
	data.size = uint32(unsafe.Sizeof(*data))

	return data, setupDiCreateDeviceInfo(deviceInfoSet, deviceNameUTF16, classGUID, deviceDescriptionUTF16, hwndParent, creationFlags, data)
}

// CreateDeviceInfo method creates a new device information element and adds it as a new member to the specified device information set.
func (deviceInfoSet DevInfo) CreateDeviceInfo(deviceName string, classGUID *GUID, deviceDescription string, hwndParent uintptr, creationFlags DICD) (*DevInfoData, error) {
	return SetupDiCreateDeviceInfo(deviceInfoSet, deviceName, classGUID, deviceDescription, hwndParent, creationFlags)
}

//sys	setupDiEnumDeviceInfo(deviceInfoSet DevInfo, memberIndex uint32, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiEnumDeviceInfo

// SetupDiEnumDeviceInfo function returns a DevInfoData structure that specifies a device information element in a device information set.
func SetupDiEnumDeviceInfo(deviceInfoSet DevInfo, memberIndex int) (*DevInfoData, error) {
	data := &DevInfoData{}
	data.size = uint32(unsafe.Sizeof(*data))

	return data, setupDiEnumDeviceInfo(deviceInfoSet, uint32(memberIndex), data)
}

// EnumDeviceInfo method returns a DevInfoData structure that specifies a device information element in a device information set.
func (deviceInfoSet DevInfo) EnumDeviceInfo(memberIndex int) (*DevInfoData, error) {
	return SetupDiEnumDeviceInfo(deviceInfoSet, memberIndex)
}

// SetupDiDestroyDeviceInfoList function deletes a device information set and frees all associated memory.
//sys	SetupDiDestroyDeviceInfoList(deviceInfoSet DevInfo) (err error) = setupapi.SetupDiDestroyDeviceInfoList

// Close method deletes a device information set and frees all associated memory.
func (deviceInfoSet DevInfo) Close() error {
	return SetupDiDestroyDeviceInfoList(deviceInfoSet)
}

//sys	SetupDiBuildDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) = setupapi.SetupDiBuildDriverInfoList

// BuildDriverInfoList method builds a list of drivers that is associated with a specific device or with the global class driver list for a device information set.
func (deviceInfoSet DevInfo) BuildDriverInfoList(deviceInfoData *DevInfoData, driverType SPDIT) error {
	return SetupDiBuildDriverInfoList(deviceInfoSet, deviceInfoData, driverType)
}

//sys	SetupDiCancelDriverInfoSearch(deviceInfoSet DevInfo) (err error) = setupapi.SetupDiCancelDriverInfoSearch

// CancelDriverInfoSearch method cancels a driver list search that is currently in progress in a different thread.
func (deviceInfoSet DevInfo) CancelDriverInfoSearch() error {
	return SetupDiCancelDriverInfoSearch(deviceInfoSet)
}

//sys	setupDiEnumDriverInfo(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT, memberIndex uint32, driverInfoData *DrvInfoData) (err error) = setupapi.SetupDiEnumDriverInfoW

// SetupDiEnumDriverInfo function enumerates the members of a driver list.
func SetupDiEnumDriverInfo(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT, memberIndex int) (*DrvInfoData, error) {
	data := &DrvInfoData{}
	data.size = uint32(unsafe.Sizeof(*data))

	return data, setupDiEnumDriverInfo(deviceInfoSet, deviceInfoData, driverType, uint32(memberIndex), data)
}

// EnumDriverInfo method enumerates the members of a driver list.
func (deviceInfoSet DevInfo) EnumDriverInfo(deviceInfoData *DevInfoData, driverType SPDIT, memberIndex int) (*DrvInfoData, error) {
	return SetupDiEnumDriverInfo(deviceInfoSet, deviceInfoData, driverType, memberIndex)
}

//sys	setupDiGetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) = setupapi.SetupDiGetSelectedDriverW

// SetupDiGetSelectedDriver function retrieves the selected driver for a device information set or a particular device information element.
func SetupDiGetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (*DrvInfoData, error) {
	data := &DrvInfoData{}
	data.size = uint32(unsafe.Sizeof(*data))

	return data, setupDiGetSelectedDriver(deviceInfoSet, deviceInfoData, data)
}

// SelectedDriver method retrieves the selected driver for a device information set or a particular device information element.
func (deviceInfoSet DevInfo) SelectedDriver(deviceInfoData *DevInfoData) (*DrvInfoData, error) {
	return SetupDiGetSelectedDriver(deviceInfoSet, deviceInfoData)
}

//sys	SetupDiSetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) = setupapi.SetupDiSetSelectedDriverW

// SetSelectedDriver method sets, or resets, the selected driver for a device information element or the selected class driver for a device information set.
func (deviceInfoSet DevInfo) SetSelectedDriver(deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) error {
	return SetupDiSetSelectedDriver(deviceInfoSet, deviceInfoData, driverInfoData)
}

//sys	setupDiGetDriverInfoDetail(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData, driverInfoDetailData *DrvInfoDetailData, driverInfoDetailDataSize uint32, requiredSize *uint32) (err error) = setupapi.SetupDiGetDriverInfoDetailW

// SetupDiGetDriverInfoDetail function retrieves driver information detail for a device information set or a particular device information element in the device information set.
func SetupDiGetDriverInfoDetail(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (*DrvInfoDetailData, error) {
	reqSize := uint32(2048)
	for {
		buf := make([]byte, reqSize)
		data := (*DrvInfoDetailData)(unsafe.Pointer(&buf[0]))
		data.size = data.unsafeSizeOf()
		err := setupDiGetDriverInfoDetail(deviceInfoSet, deviceInfoData, driverInfoData, data, uint32(len(buf)), &reqSize)
		if err == ERROR_INSUFFICIENT_BUFFER {
			continue
		}
		if err != nil {
			return nil, err
		}
		data.size = reqSize
		return data, nil
	}
}

// DriverInfoDetail method retrieves driver information detail for a device information set or a particular device information element in the device information set.
func (deviceInfoSet DevInfo) DriverInfoDetail(deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (*DrvInfoDetailData, error) {
	return SetupDiGetDriverInfoDetail(deviceInfoSet, deviceInfoData, driverInfoData)
}

//sys	SetupDiDestroyDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) = setupapi.SetupDiDestroyDriverInfoList

// DestroyDriverInfoList method deletes a driver list.
func (deviceInfoSet DevInfo) DestroyDriverInfoList(deviceInfoData *DevInfoData, driverType SPDIT) error {
	return SetupDiDestroyDriverInfoList(deviceInfoSet, deviceInfoData, driverType)
}

//sys	setupDiGetClassDevsEx(classGUID *GUID, Enumerator *uint16, hwndParent uintptr, Flags DIGCF, deviceInfoSet DevInfo, machineName *uint16, reserved uintptr) (handle DevInfo, err error) [failretval==DevInfo(InvalidHandle)] = setupapi.SetupDiGetClassDevsExW

// SetupDiGetClassDevsEx function returns a handle to a device information set that contains requested device information elements for a local or a remote computer.
func SetupDiGetClassDevsEx(classGUID *GUID, enumerator string, hwndParent uintptr, flags DIGCF, deviceInfoSet DevInfo, machineName string) (handle DevInfo, err error) {
	var enumeratorUTF16 *uint16
	if enumerator != "" {
		enumeratorUTF16, err = UTF16PtrFromString(enumerator)
		if err != nil {
			return
		}
	}
	var machineNameUTF16 *uint16
	if machineName != "" {
		machineNameUTF16, err = UTF16PtrFromString(machineName)
		if err != nil {
			return
		}
	}
	return setupDiGetClassDevsEx(classGUID, enumeratorUTF16, hwndParent, flags, deviceInfoSet, machineNameUTF16, 0)
}

// SetupDiCallClassInstaller function calls the appropriate class installer, and any registered co-installers, with the specified installation request (DIF code).
//sys	SetupDiCallClassInstaller(installFunction DI_FUNCTION, deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiCallClassInstaller

// CallClassInstaller member calls the appropriate class installer, and any registered co-installers, with the specified installation request (DIF code).
func (deviceInfoSet DevInfo) CallClassInstaller(installFunction DI_FUNCTION, deviceInfoData *DevInfoData) error {
	return SetupDiCallClassInstaller(installFunction, deviceInfoSet, deviceInfoData)
}

// SetupDiOpenDevRegKey function opens a registry key for device-specific configuration information.
//sys	SetupDiOpenDevRegKey(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, Scope DICS_FLAG, HwProfile uint32, KeyType DIREG, samDesired uint32) (key Handle, err error) [failretval==InvalidHandle] = setupapi.SetupDiOpenDevRegKey

// OpenDevRegKey method opens a registry key for device-specific configuration information.
func (deviceInfoSet DevInfo) OpenDevRegKey(DeviceInfoData *DevInfoData, Scope DICS_FLAG, HwProfile uint32, KeyType DIREG, samDesired uint32) (Handle, error) {
	return SetupDiOpenDevRegKey(deviceInfoSet, DeviceInfoData, Scope, HwProfile, KeyType, samDesired)
}

//sys	setupDiGetDeviceProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, propertyKey *DEVPROPKEY, propertyType *DEVPROPTYPE, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32, flags uint32) (err error) = setupapi.SetupDiGetDevicePropertyW

// SetupDiGetDeviceProperty function retrieves a specified device instance property.
func SetupDiGetDeviceProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, propertyKey *DEVPROPKEY) (value interface{}, err error) {
	reqSize := uint32(256)
	for {
		var dataType DEVPROPTYPE
		buf := make([]byte, reqSize)
		err = setupDiGetDeviceProperty(deviceInfoSet, deviceInfoData, propertyKey, &dataType, &buf[0], uint32(len(buf)), &reqSize, 0)
		if err == ERROR_INSUFFICIENT_BUFFER {
			continue
		}
		if err != nil {
			return
		}
		switch dataType {
		case DEVPROP_TYPE_STRING:
			ret := UTF16ToString(bufToUTF16(buf))
			runtime.KeepAlive(buf)
			return ret, nil
		}
		return nil, errors.New("unimplemented property type")
	}
}

//sys	setupDiGetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyRegDataType *uint32, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32) (err error) = setupapi.SetupDiGetDeviceRegistryPropertyW

// SetupDiGetDeviceRegistryProperty function retrieves a specified Plug and Play device property.
func SetupDiGetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP) (value interface{}, err error) {
	reqSize := uint32(256)
	for {
		var dataType uint32
		buf := make([]byte, reqSize)
		err = setupDiGetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property, &dataType, &buf[0], uint32(len(buf)), &reqSize)
		if err == ERROR_INSUFFICIENT_BUFFER {
			continue
		}
		if err != nil {
			return
		}
		return getRegistryValue(buf[:reqSize], dataType)
	}
}

func getRegistryValue(buf []byte, dataType uint32) (interface{}, error) {
	switch dataType {
	case REG_SZ:
		ret := UTF16ToString(bufToUTF16(buf))
		runtime.KeepAlive(buf)
		return ret, nil
	case REG_EXPAND_SZ:
		value := UTF16ToString(bufToUTF16(buf))
		if value == "" {
			return "", nil
		}
		p, err := syscall.UTF16PtrFromString(value)
		if err != nil {
			return "", err
		}
		ret := make([]uint16, 100)
		for {
			n, err := ExpandEnvironmentStrings(p, &ret[0], uint32(len(ret)))
			if err != nil {
				return "", err
			}
			if n <= uint32(len(ret)) {
				return UTF16ToString(ret[:n]), nil
			}
			ret = make([]uint16, n)
		}
	case REG_BINARY:
		return buf, nil
	case REG_DWORD_LITTLE_ENDIAN:
		return binary.LittleEndian.Uint32(buf), nil
	case REG_DWORD_BIG_ENDIAN:
		return binary.BigEndian.Uint32(buf), nil
	case REG_MULTI_SZ:
		bufW := bufToUTF16(buf)
		a := []string{}
		for i := 0; i < len(bufW); {
			j := i + wcslen(bufW[i:])
			if i < j {
				a = append(a, UTF16ToString(bufW[i:j]))
			}
			i = j + 1
		}
		runtime.KeepAlive(buf)
		return a, nil
	case REG_QWORD_LITTLE_ENDIAN:
		return binary.LittleEndian.Uint64(buf), nil
	default:
		return nil, fmt.Errorf("Unsupported registry value type: %v", dataType)
	}
}

// bufToUTF16 function reinterprets []byte buffer as []uint16
func bufToUTF16(buf []byte) []uint16 {
	sl := struct {
		addr *uint16
		len  int
		cap  int
	}{(*uint16)(unsafe.Pointer(&buf[0])), len(buf) / 2, cap(buf) / 2}
	return *(*[]uint16)(unsafe.Pointer(&sl))
}

// utf16ToBuf function reinterprets []uint16 as []byte
func utf16ToBuf(buf []uint16) []byte {
	sl := struct {
		addr *byte
		len  int
		cap  int
	}{(*byte)(unsafe.Pointer(&buf[0])), len(buf) * 2, cap(buf) * 2}
	return *(*[]byte)(unsafe.Pointer(&sl))
}

func wcslen(str []uint16) int {
	for i := 0; i < len(str); i++ {
		if str[i] == 0 {
			return i
		}
	}
	return len(str)
}

// DeviceRegistryProperty method retrieves a specified Plug and Play device property.
func (deviceInfoSet DevInfo) DeviceRegistryProperty(deviceInfoData *DevInfoData, property SPDRP) (interface{}, error) {
	return SetupDiGetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property)
}

//sys	setupDiSetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyBuffer *byte, propertyBufferSize uint32) (err error) = setupapi.SetupDiSetDeviceRegistryPropertyW

// SetupDiSetDeviceRegistryProperty function sets a Plug and Play device property for a device.
func SetupDiSetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyBuffers []byte) error {
	return setupDiSetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property, &propertyBuffers[0], uint32(len(propertyBuffers)))
}

// SetDeviceRegistryProperty function sets a Plug and Play device property for a device.
func (deviceInfoSet DevInfo) SetDeviceRegistryProperty(deviceInfoData *DevInfoData, property SPDRP, propertyBuffers []byte) error {
	return SetupDiSetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property, propertyBuffers)
}

// SetDeviceRegistryPropertyString method sets a Plug and Play device property string for a device.
func (deviceInfoSet DevInfo) SetDeviceRegistryPropertyString(deviceInfoData *DevInfoData, property SPDRP, str string) error {
	str16, err := UTF16FromString(str)
	if err != nil {
		return err
	}
	err = SetupDiSetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property, utf16ToBuf(append(str16, 0)))
	runtime.KeepAlive(str16)
	return err
}

//sys	setupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) = setupapi.SetupDiGetDeviceInstallParamsW

// SetupDiGetDeviceInstallParams function retrieves device installation parameters for a device information set or a particular device information element.
func SetupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (*DevInstallParams, error) {
	params := &DevInstallParams{}
	params.size = uint32(unsafe.Sizeof(*params))

	return params, setupDiGetDeviceInstallParams(deviceInfoSet, deviceInfoData, params)
}

// DeviceInstallParams method retrieves device installation parameters for a device information set or a particular device information element.
func (deviceInfoSet DevInfo) DeviceInstallParams(deviceInfoData *DevInfoData) (*DevInstallParams, error) {
	return SetupDiGetDeviceInstallParams(deviceInfoSet, deviceInfoData)
}

//sys	setupDiGetDeviceInstanceId(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, instanceId *uint16, instanceIdSize uint32, instanceIdRequiredSize *uint32) (err error) = setupapi.SetupDiGetDeviceInstanceIdW

// SetupDiGetDeviceInstanceId function retrieves the instance ID of the device.
func SetupDiGetDeviceInstanceId(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (string, error) {
	reqSize := uint32(1024)
	for {
		buf := make([]uint16, reqSize)
		err := setupDiGetDeviceInstanceId(deviceInfoSet, deviceInfoData, &buf[0], uint32(len(buf)), &reqSize)
		if err == ERROR_INSUFFICIENT_BUFFER {
			continue
		}
		if err != nil {
			return "", err
		}
		return UTF16ToString(buf), nil
	}
}

// DeviceInstanceID method retrieves the instance ID of the device.
func (deviceInfoSet DevInfo) DeviceInstanceID(deviceInfoData *DevInfoData) (string, error) {
	return SetupDiGetDeviceInstanceId(deviceInfoSet, deviceInfoData)
}

// SetupDiGetClassInstallParams function retrieves class installation parameters for a device information set or a particular device information element.
//sys	SetupDiGetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32, requiredSize *uint32) (err error) = setupapi.SetupDiGetClassInstallParamsW

// ClassInstallParams method retrieves class installation parameters for a device information set or a particular device information element.
func (deviceInfoSet DevInfo) ClassInstallParams(deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32, requiredSize *uint32) error {
	return SetupDiGetClassInstallParams(deviceInfoSet, deviceInfoData, classInstallParams, classInstallParamsSize, requiredSize)
}

//sys	SetupDiSetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) = setupapi.SetupDiSetDeviceInstallParamsW

// SetDeviceInstallParams member sets device installation parameters for a device information set or a particular device information element.
func (deviceInfoSet DevInfo) SetDeviceInstallParams(deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) error {
	return SetupDiSetDeviceInstallParams(deviceInfoSet, deviceInfoData, deviceInstallParams)
}

// SetupDiSetClassInstallParams function sets or clears class install parameters for a device information set or a particular device information element.
//sys	SetupDiSetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32) (err error) = setupapi.SetupDiSetClassInstallParamsW

// SetClassInstallParams method sets or clears class install parameters for a device information set or a particular device information element.
func (deviceInfoSet DevInfo) SetClassInstallParams(deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32) error {
	return SetupDiSetClassInstallParams(deviceInfoSet, deviceInfoData, classInstallParams, classInstallParamsSize)
}

//sys	setupDiClassNameFromGuidEx(classGUID *GUID, className *uint16, classNameSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) = setupapi.SetupDiClassNameFromGuidExW

// SetupDiClassNameFromGuidEx function retrieves the class name associated with a class GUID. The class can be installed on a local or remote computer.
func SetupDiClassNameFromGuidEx(classGUID *GUID, machineName string) (className string, err error) {
	var classNameUTF16 [MAX_CLASS_NAME_LEN]uint16

	var machineNameUTF16 *uint16
	if machineName != "" {
		machineNameUTF16, err = UTF16PtrFromString(machineName)
		if err != nil {
			return
		}
	}

	err = setupDiClassNameFromGuidEx(classGUID, &classNameUTF16[0], MAX_CLASS_NAME_LEN, nil, machineNameUTF16, 0)
	if err != nil {
		return
	}

	className = UTF16ToString(classNameUTF16[:])
	return
}

//sys	setupDiClassGuidsFromNameEx(className *uint16, classGuidList *GUID, classGuidListSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) = setupapi.SetupDiClassGuidsFromNameExW

// SetupDiClassGuidsFromNameEx function retrieves the GUIDs associated with the specified class name. This resulting list contains the classes currently installed on a local or remote computer.
func SetupDiClassGuidsFromNameEx(className string, machineName string) ([]GUID, error) {
	classNameUTF16, err := UTF16PtrFromString(className)
	if err != nil {
		return nil, err
	}

	var machineNameUTF16 *uint16
	if machineName != "" {
		machineNameUTF16, err = UTF16PtrFromString(machineName)
		if err != nil {
			return nil, err
		}
	}

	reqSize := uint32(4)
	for {
		buf := make([]GUID, reqSize)
		err = setupDiClassGuidsFromNameEx(classNameUTF16, &buf[0], uint32(len(buf)), &reqSize, machineNameUTF16, 0)
		if err == ERROR_INSUFFICIENT_BUFFER {
			continue
		}
		if err != nil {
			return nil, err
		}
		return buf[:reqSize], nil
	}
}

//sys	setupDiGetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiGetSelectedDevice

// SetupDiGetSelectedDevice function retrieves the selected device information element in a device information set.
func SetupDiGetSelectedDevice(deviceInfoSet DevInfo) (*DevInfoData, error) {
	data := &DevInfoData{}
	data.size = uint32(unsafe.Sizeof(*data))

	return data, setupDiGetSelectedDevice(deviceInfoSet, data)
}

// SelectedDevice method retrieves the selected device information element in a device information set.
func (deviceInfoSet DevInfo) SelectedDevice() (*DevInfoData, error) {
	return SetupDiGetSelectedDevice(deviceInfoSet)
}

// SetupDiSetSelectedDevice function sets a device information element as the selected member of a device information set. This function is typically used by an installation wizard.
//sys	SetupDiSetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiSetSelectedDevice

// SetSelectedDevice method sets a device information element as the selected member of a device information set. This function is typically used by an installation wizard.
func (deviceInfoSet DevInfo) SetSelectedDevice(deviceInfoData *DevInfoData) error {
	return SetupDiSetSelectedDevice(deviceInfoSet, deviceInfoData)
}

//sys	setupUninstallOEMInf(infFileName *uint16, flags SUOI, reserved uintptr) (err error) = setupapi.SetupUninstallOEMInfW

// SetupUninstallOEMInf uninstalls the specified driver.
func SetupUninstallOEMInf(infFileName string, flags SUOI) error {
	infFileName16, err := UTF16PtrFromString(infFileName)
	if err != nil {
		return err
	}
	return setupUninstallOEMInf(infFileName16, flags, 0)
}

//sys cm_MapCrToWin32Err(configRet CONFIGRET, defaultWin32Error Errno) (ret Errno) = CfgMgr32.CM_MapCrToWin32Err

//sys cm_Get_Device_Interface_List_Size(len *uint32, interfaceClass *GUID, deviceID *uint16, flags uint32) (ret CONFIGRET) = CfgMgr32.CM_Get_Device_Interface_List_SizeW
//sys cm_Get_Device_Interface_List(interfaceClass *GUID, deviceID *uint16, buffer *uint16, bufferLen uint32, flags uint32) (ret CONFIGRET) = CfgMgr32.CM_Get_Device_Interface_ListW

func CM_Get_Device_Interface_List(deviceID string, interfaceClass *GUID, flags uint32) ([]string, error) {
	deviceID16, err := UTF16PtrFromString(deviceID)
	if err != nil {
		return nil, err
	}
	var buf []uint16
	var buflen uint32
	for {
		if ret := cm_Get_Device_Interface_List_Size(&buflen, interfaceClass, deviceID16, flags); ret != CR_SUCCESS {
			return nil, ret
		}
		buf = make([]uint16, buflen)
		if ret := cm_Get_Device_Interface_List(interfaceClass, deviceID16, &buf[0], buflen, flags); ret == CR_SUCCESS {
			break
		} else if ret != CR_BUFFER_SMALL {
			return nil, ret
		}
	}
	var interfaces []string
	for i := 0; i < len(buf); {
		j := i + wcslen(buf[i:])
		if i < j {
			interfaces = append(interfaces, UTF16ToString(buf[i:j]))
		}
		i = j + 1
	}
	if interfaces == nil {
		return nil, ERROR_NO_SUCH_DEVICE_INTERFACE
	}
	return interfaces, nil
}

//sys cm_Get_DevNode_Status(status *uint32, problemNumber *uint32, devInst DEVINST, flags uint32) (ret CONFIGRET) = CfgMgr32.CM_Get_DevNode_Status

func CM_Get_DevNode_Status(status *uint32, problemNumber *uint32, devInst DEVINST, flags uint32) error {
	ret := cm_Get_DevNode_Status(status, problemNumber, devInst, flags)
	if ret == CR_SUCCESS {
		return nil
	}
	return ret
}
  07070100000EE6000081A4000000000000000000000001645E367C0000020A000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/str.go    // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build windows
// +build windows

package windows

func itoa(val int) string { // do it here rather than with fmt to avoid dependency
	if val < 0 {
		return "-" + itoa(-val)
	}
	var buf [32]byte // big enough for int64
	i := len(buf) - 1
	for val >= 10 {
		buf[i] = byte(val%10 + '0')
		i--
		val /= 10
	}
	buf[i] = byte(val + '0')
	return string(buf[i:])
}
  07070100000EE7000081A4000000000000000000000001645E367C00000CB8000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/syscall.go    // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build windows
// +build windows

// Package windows contains an interface to the low-level operating system
// primitives. OS details vary depending on the underlying system, and
// by default, godoc will display the OS-specific documentation for the current
// system. If you want godoc to display syscall documentation for another
// system, set $GOOS and $GOARCH to the desired system. For example, if
// you want to view documentation for freebsd/arm on linux/amd64, set $GOOS
// to freebsd and $GOARCH to arm.
//
// The primary use of this package is inside other packages that provide a more
// portable interface to the system, such as "os", "time" and "net".  Use
// those packages rather than this one if you can.
//
// For details of the functions and data types in this package consult
// the manuals for the appropriate operating system.
//
// These calls return err == nil to indicate success; otherwise
// err represents an operating system error describing the failure and
// holds a value of type syscall.Errno.
package windows // import "golang.org/x/sys/windows"

import (
	"bytes"
	"strings"
	"syscall"
	"unsafe"
)

// ByteSliceFromString returns a NUL-terminated slice of bytes
// containing the text of s. If s contains a NUL byte at any
// location, it returns (nil, syscall.EINVAL).
func ByteSliceFromString(s string) ([]byte, error) {
	if strings.IndexByte(s, 0) != -1 {
		return nil, syscall.EINVAL
	}
	a := make([]byte, len(s)+1)
	copy(a, s)
	return a, nil
}

// BytePtrFromString returns a pointer to a NUL-terminated array of
// bytes containing the text of s. If s contains a NUL byte at any
// location, it returns (nil, syscall.EINVAL).
func BytePtrFromString(s string) (*byte, error) {
	a, err := ByteSliceFromString(s)
	if err != nil {
		return nil, err
	}
	return &a[0], nil
}

// ByteSliceToString returns a string form of the text represented by the slice s, with a terminating NUL and any
// bytes after the NUL removed.
func ByteSliceToString(s []byte) string {
	if i := bytes.IndexByte(s, 0); i != -1 {
		s = s[:i]
	}
	return string(s)
}

// BytePtrToString takes a pointer to a sequence of text and returns the corresponding string.
// If the pointer is nil, it returns the empty string. It assumes that the text sequence is terminated
// at a zero byte; if the zero byte is not present, the program may crash.
func BytePtrToString(p *byte) string {
	if p == nil {
		return ""
	}
	if *p == 0 {
		return ""
	}

	// Find NUL terminator.
	n := 0
	for ptr := unsafe.Pointer(p); *(*byte)(ptr) != 0; n++ {
		ptr = unsafe.Pointer(uintptr(ptr) + 1)
	}

	return string(unsafe.Slice(p, n))
}

// Single-word zero for use when we need a valid pointer to 0 bytes.
// See mksyscall.pl.
var _zero uintptr

func (ts *Timespec) Unix() (sec int64, nsec int64) {
	return int64(ts.Sec), int64(ts.Nsec)
}

func (tv *Timeval) Unix() (sec int64, nsec int64) {
	return int64(tv.Sec), int64(tv.Usec) * 1000
}

func (ts *Timespec) Nano() int64 {
	return int64(ts.Sec)*1e9 + int64(ts.Nsec)
}

func (tv *Timeval) Nano() int64 {
	return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000
}
07070100000EE8000081A4000000000000000000000001645E367C00013A4A000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/syscall_windows.go    // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Windows system calls.

package windows

import (
	errorspkg "errors"
	"fmt"
	"runtime"
	"sync"
	"syscall"
	"time"
	"unicode/utf16"
	"unsafe"

	"golang.org/x/sys/internal/unsafeheader"
)

type Handle uintptr
type HWND uintptr

const (
	InvalidHandle = ^Handle(0)
	InvalidHWND   = ^HWND(0)

	// Flags for DefineDosDevice.
	DDD_EXACT_MATCH_ON_REMOVE = 0x00000004
	DDD_NO_BROADCAST_SYSTEM   = 0x00000008
	DDD_RAW_TARGET_PATH       = 0x00000001
	DDD_REMOVE_DEFINITION     = 0x00000002

	// Return values for GetDriveType.
	DRIVE_UNKNOWN     = 0
	DRIVE_NO_ROOT_DIR = 1
	DRIVE_REMOVABLE   = 2
	DRIVE_FIXED       = 3
	DRIVE_REMOTE      = 4
	DRIVE_CDROM       = 5
	DRIVE_RAMDISK     = 6

	// File system flags from GetVolumeInformation and GetVolumeInformationByHandle.
	FILE_CASE_SENSITIVE_SEARCH        = 0x00000001
	FILE_CASE_PRESERVED_NAMES         = 0x00000002
	FILE_FILE_COMPRESSION             = 0x00000010
	FILE_DAX_VOLUME                   = 0x20000000
	FILE_NAMED_STREAMS                = 0x00040000
	FILE_PERSISTENT_ACLS              = 0x00000008
	FILE_READ_ONLY_VOLUME             = 0x00080000
	FILE_SEQUENTIAL_WRITE_ONCE        = 0x00100000
	FILE_SUPPORTS_ENCRYPTION          = 0x00020000
	FILE_SUPPORTS_EXTENDED_ATTRIBUTES = 0x00800000
	FILE_SUPPORTS_HARD_LINKS          = 0x00400000
	FILE_SUPPORTS_OBJECT_IDS          = 0x00010000
	FILE_SUPPORTS_OPEN_BY_FILE_ID     = 0x01000000
	FILE_SUPPORTS_REPARSE_POINTS      = 0x00000080
	FILE_SUPPORTS_SPARSE_FILES        = 0x00000040
	FILE_SUPPORTS_TRANSACTIONS        = 0x00200000
	FILE_SUPPORTS_USN_JOURNAL         = 0x02000000
	FILE_UNICODE_ON_DISK              = 0x00000004
	FILE_VOLUME_IS_COMPRESSED         = 0x00008000
	FILE_VOLUME_QUOTAS                = 0x00000020

	// Flags for LockFileEx.
	LOCKFILE_FAIL_IMMEDIATELY = 0x00000001
	LOCKFILE_EXCLUSIVE_LOCK   = 0x00000002

	// Return value of SleepEx and other APC functions
	WAIT_IO_COMPLETION = 0x000000C0
)

// StringToUTF16 is deprecated. Use UTF16FromString instead.
// If s contains a NUL byte this function panics instead of
// returning an error.
func StringToUTF16(s string) []uint16 {
	a, err := UTF16FromString(s)
	if err != nil {
		panic("windows: string with NUL passed to StringToUTF16")
	}
	return a
}

// UTF16FromString returns the UTF-16 encoding of the UTF-8 string
// s, with a terminating NUL added. If s contains a NUL byte at any
// location, it returns (nil, syscall.EINVAL).
func UTF16FromString(s string) ([]uint16, error) {
	return syscall.UTF16FromString(s)
}

// UTF16ToString returns the UTF-8 encoding of the UTF-16 sequence s,
// with a terminating NUL and any bytes after the NUL removed.
func UTF16ToString(s []uint16) string {
	return syscall.UTF16ToString(s)
}

// StringToUTF16Ptr is deprecated. Use UTF16PtrFromString instead.
// If s contains a NUL byte this function panics instead of
// returning an error.
func StringToUTF16Ptr(s string) *uint16 { return &StringToUTF16(s)[0] }

// UTF16PtrFromString returns pointer to the UTF-16 encoding of
// the UTF-8 string s, with a terminating NUL added. If s
// contains a NUL byte at any location, it returns (nil, syscall.EINVAL).
func UTF16PtrFromString(s string) (*uint16, error) {
	a, err := UTF16FromString(s)
	if err != nil {
		return nil, err
	}
	return &a[0], nil
}

// UTF16PtrToString takes a pointer to a UTF-16 sequence and returns the corresponding UTF-8 encoded string.
// If the pointer is nil, it returns the empty string. It assumes that the UTF-16 sequence is terminated
// at a zero word; if the zero word is not present, the program may crash.
func UTF16PtrToString(p *uint16) string {
	if p == nil {
		return ""
	}
	if *p == 0 {
		return ""
	}

	// Find NUL terminator.
	n := 0
	for ptr := unsafe.Pointer(p); *(*uint16)(ptr) != 0; n++ {
		ptr = unsafe.Pointer(uintptr(ptr) + unsafe.Sizeof(*p))
	}

	return string(utf16.Decode(unsafe.Slice(p, n)))
}

func Getpagesize() int { return 4096 }

// NewCallback converts a Go function to a function pointer conforming to the stdcall calling convention.
// This is useful when interoperating with Windows code requiring callbacks.
// The argument is expected to be a function with with one uintptr-sized result. The function must not have arguments with size larger than the size of uintptr.
func NewCallback(fn interface{}) uintptr {
	return syscall.NewCallback(fn)
}

// NewCallbackCDecl converts a Go function to a function pointer conforming to the cdecl calling convention.
// This is useful when interoperating with Windows code requiring callbacks.
// The argument is expected to be a function with with one uintptr-sized result. The function must not have arguments with size larger than the size of uintptr.
func NewCallbackCDecl(fn interface{}) uintptr {
	return syscall.NewCallbackCDecl(fn)
}

// windows api calls

//sys	GetLastError() (lasterr error)
//sys	LoadLibrary(libname string) (handle Handle, err error) = LoadLibraryW
//sys	LoadLibraryEx(libname string, zero Handle, flags uintptr) (handle Handle, err error) = LoadLibraryExW
//sys	FreeLibrary(handle Handle) (err error)
//sys	GetProcAddress(module Handle, procname string) (proc uintptr, err error)
//sys	GetModuleFileName(module Handle, filename *uint16, size uint32) (n uint32, err error) = kernel32.GetModuleFileNameW
//sys	GetModuleHandleEx(flags uint32, moduleName *uint16, module *Handle) (err error) = kernel32.GetModuleHandleExW
//sys	SetDefaultDllDirectories(directoryFlags uint32) (err error)
//sys	SetDllDirectory(path string) (err error) = kernel32.SetDllDirectoryW
//sys	GetVersion() (ver uint32, err error)
//sys	FormatMessage(flags uint32, msgsrc uintptr, msgid uint32, langid uint32, buf []uint16, args *byte) (n uint32, err error) = FormatMessageW
//sys	ExitProcess(exitcode uint32)
//sys	IsWow64Process(handle Handle, isWow64 *bool) (err error) = IsWow64Process
//sys	IsWow64Process2(handle Handle, processMachine *uint16, nativeMachine *uint16) (err error) = IsWow64Process2?
//sys	CreateFile(name *uint16, access uint32, mode uint32, sa *SecurityAttributes, createmode uint32, attrs uint32, templatefile Handle) (handle Handle, err error) [failretval==InvalidHandle] = CreateFileW
//sys	CreateNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *SecurityAttributes) (handle Handle, err error)  [failretval==InvalidHandle] = CreateNamedPipeW
//sys	ConnectNamedPipe(pipe Handle, overlapped *Overlapped) (err error)
//sys	GetNamedPipeInfo(pipe Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error)
//sys	GetNamedPipeHandleState(pipe Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) = GetNamedPipeHandleStateW
//sys	SetNamedPipeHandleState(pipe Handle, state *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32) (err error) = SetNamedPipeHandleState
//sys	readFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) = ReadFile
//sys	writeFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) = WriteFile
//sys	GetOverlappedResult(handle Handle, overlapped *Overlapped, done *uint32, wait bool) (err error)
//sys	SetFilePointer(handle Handle, lowoffset int32, highoffsetptr *int32, whence uint32) (newlowoffset uint32, err error) [failretval==0xffffffff]
//sys	CloseHandle(handle Handle) (err error)
//sys	GetStdHandle(stdhandle uint32) (handle Handle, err error) [failretval==InvalidHandle]
//sys	SetStdHandle(stdhandle uint32, handle Handle) (err error)
//sys	findFirstFile1(name *uint16, data *win32finddata1) (handle Handle, err error) [failretval==InvalidHandle] = FindFirstFileW
//sys	findNextFile1(handle Handle, data *win32finddata1) (err error) = FindNextFileW
//sys	FindClose(handle Handle) (err error)
//sys	GetFileInformationByHandle(handle Handle, data *ByHandleFileInformation) (err error)
//sys	GetFileInformationByHandleEx(handle Handle, class uint32, outBuffer *byte, outBufferLen uint32) (err error)
//sys	SetFileInformationByHandle(handle Handle, class uint32, inBuffer *byte, inBufferLen uint32) (err error)
//sys	GetCurrentDirectory(buflen uint32, buf *uint16) (n uint32, err error) = GetCurrentDirectoryW
//sys	SetCurrentDirectory(path *uint16) (err error) = SetCurrentDirectoryW
//sys	CreateDirectory(path *uint16, sa *SecurityAttributes) (err error) = CreateDirectoryW
//sys	RemoveDirectory(path *uint16) (err error) = RemoveDirectoryW
//sys	DeleteFile(path *uint16) (err error) = DeleteFileW
//sys	MoveFile(from *uint16, to *uint16) (err error) = MoveFileW
//sys	MoveFileEx(from *uint16, to *uint16, flags uint32) (err error) = MoveFileExW
//sys	LockFileEx(file Handle, flags uint32, reserved uint32, bytesLow uint32, bytesHigh uint32, overlapped *Overlapped) (err error)
//sys	UnlockFileEx(file Handle, reserved uint32, bytesLow uint32, bytesHigh uint32, overlapped *Overlapped) (err error)
//sys	GetComputerName(buf *uint16, n *uint32) (err error) = GetComputerNameW
//sys	GetComputerNameEx(nametype uint32, buf *uint16, n *uint32) (err error) = GetComputerNameExW
//sys	SetEndOfFile(handle Handle) (err error)
//sys	GetSystemTimeAsFileTime(time *Filetime)
//sys	GetSystemTimePreciseAsFileTime(time *Filetime)
//sys	GetTimeZoneInformation(tzi *Timezoneinformation) (rc uint32, err error) [failretval==0xffffffff]
//sys	CreateIoCompletionPort(filehandle Handle, cphandle Handle, key uintptr, threadcnt uint32) (handle Handle, err error)
//sys	GetQueuedCompletionStatus(cphandle Handle, qty *uint32, key *uintptr, overlapped **Overlapped, timeout uint32) (err error)
//sys	PostQueuedCompletionStatus(cphandle Handle, qty uint32, key uintptr, overlapped *Overlapped) (err error)
//sys	CancelIo(s Handle) (err error)
//sys	CancelIoEx(s Handle, o *Overlapped) (err error)
//sys	CreateProcess(appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) = CreateProcessW
//sys	CreateProcessAsUser(token Token, appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) = advapi32.CreateProcessAsUserW
//sys   initializeProcThreadAttributeList(attrlist *ProcThreadAttributeList, attrcount uint32, flags uint32, size *uintptr) (err error) = InitializeProcThreadAttributeList
//sys   deleteProcThreadAttributeList(attrlist *ProcThreadAttributeList) = DeleteProcThreadAttributeList
//sys   updateProcThreadAttribute(attrlist *ProcThreadAttributeList, flags uint32, attr uintptr, value unsafe.Pointer, size uintptr, prevvalue unsafe.Pointer, returnedsize *uintptr) (err error) = UpdateProcThreadAttribute
//sys	OpenProcess(desiredAccess uint32, inheritHandle bool, processId uint32) (handle Handle, err error)
//sys	ShellExecute(hwnd Handle, verb *uint16, file *uint16, args *uint16, cwd *uint16, showCmd int32) (err error) [failretval<=32] = shell32.ShellExecuteW
//sys	GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32, err error) = user32.GetWindowThreadProcessId
//sys	GetShellWindow() (shellWindow HWND) = user32.GetShellWindow
//sys	MessageBox(hwnd HWND, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) [failretval==0] = user32.MessageBoxW
//sys	ExitWindowsEx(flags uint32, reason uint32) (err error) = user32.ExitWindowsEx
//sys	shGetKnownFolderPath(id *KNOWNFOLDERID, flags uint32, token Token, path **uint16) (ret error) = shell32.SHGetKnownFolderPath
//sys	TerminateProcess(handle Handle, exitcode uint32) (err error)
//sys	GetExitCodeProcess(handle Handle, exitcode *uint32) (err error)
//sys	GetStartupInfo(startupInfo *StartupInfo) (err error) = GetStartupInfoW
//sys	GetProcessTimes(handle Handle, creationTime *Filetime, exitTime *Filetime, kernelTime *Filetime, userTime *Filetime) (err error)
//sys	DuplicateHandle(hSourceProcessHandle Handle, hSourceHandle Handle, hTargetProcessHandle Handle, lpTargetHandle *Handle, dwDesiredAccess uint32, bInheritHandle bool, dwOptions uint32) (err error)
//sys	WaitForSingleObject(handle Handle, waitMilliseconds uint32) (event uint32, err error) [failretval==0xffffffff]
//sys	waitForMultipleObjects(count uint32, handles uintptr, waitAll bool, waitMilliseconds uint32) (event uint32, err error) [failretval==0xffffffff] = WaitForMultipleObjects
//sys	GetTempPath(buflen uint32, buf *uint16) (n uint32, err error) = GetTempPathW
//sys	CreatePipe(readhandle *Handle, writehandle *Handle, sa *SecurityAttributes, size uint32) (err error)
//sys	GetFileType(filehandle Handle) (n uint32, err error)
//sys	CryptAcquireContext(provhandle *Handle, container *uint16, provider *uint16, provtype uint32, flags uint32) (err error) = advapi32.CryptAcquireContextW
//sys	CryptReleaseContext(provhandle Handle, flags uint32) (err error) = advapi32.CryptReleaseContext
//sys	CryptGenRandom(provhandle Handle, buflen uint32, buf *byte) (err error) = advapi32.CryptGenRandom
//sys	GetEnvironmentStrings() (envs *uint16, err error) [failretval==nil] = kernel32.GetEnvironmentStringsW
//sys	FreeEnvironmentStrings(envs *uint16) (err error) = kernel32.FreeEnvironmentStringsW
//sys	GetEnvironmentVariable(name *uint16, buffer *uint16, size uint32) (n uint32, err error) = kernel32.GetEnvironmentVariableW
//sys	SetEnvironmentVariable(name *uint16, value *uint16) (err error) = kernel32.SetEnvironmentVariableW
//sys	ExpandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, err error) = kernel32.ExpandEnvironmentStringsW
//sys	CreateEnvironmentBlock(block **uint16, token Token, inheritExisting bool) (err error) = userenv.CreateEnvironmentBlock
//sys	DestroyEnvironmentBlock(block *uint16) (err error) = userenv.DestroyEnvironmentBlock
//sys	getTickCount64() (ms uint64) = kernel32.GetTickCount64
//sys	SetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetime) (err error)
//sys	GetFileAttributes(name *uint16) (attrs uint32, err error) [failretval==INVALID_FILE_ATTRIBUTES] = kernel32.GetFileAttributesW
//sys	SetFileAttributes(name *uint16, attrs uint32) (err error) = kernel32.SetFileAttributesW
//sys	GetFileAttributesEx(name *uint16, level uint32, info *byte) (err error) = kernel32.GetFileAttributesExW
//sys	GetCommandLine() (cmd *uint16) = kernel32.GetCommandLineW
//sys	CommandLineToArgv(cmd *uint16, argc *int32) (argv *[8192]*[8192]uint16, err error) [failretval==nil] = shell32.CommandLineToArgvW
//sys	LocalFree(hmem Handle) (handle Handle, err error) [failretval!=0]
//sys	LocalAlloc(flags uint32, length uint32) (ptr uintptr, err error)
//sys	SetHandleInformation(handle Handle, mask uint32, flags uint32) (err error)
//sys	FlushFileBuffers(handle Handle) (err error)
//sys	GetFullPathName(path *uint16, buflen uint32, buf *uint16, fname **uint16) (n uint32, err error) = kernel32.GetFullPathNameW
//sys	GetLongPathName(path *uint16, buf *uint16, buflen uint32) (n uint32, err error) = kernel32.GetLongPathNameW
//sys	GetShortPathName(longpath *uint16, shortpath *uint16, buflen uint32) (n uint32, err error) = kernel32.GetShortPathNameW
//sys	GetFinalPathNameByHandle(file Handle, filePath *uint16, filePathSize uint32, flags uint32) (n uint32, err error) = kernel32.GetFinalPathNameByHandleW
//sys	CreateFileMapping(fhandle Handle, sa *SecurityAttributes, prot uint32, maxSizeHigh uint32, maxSizeLow uint32, name *uint16) (handle Handle, err error) [failretval == 0 || e1 == ERROR_ALREADY_EXISTS] = kernel32.CreateFileMappingW
//sys	MapViewOfFile(handle Handle, access uint32, offsetHigh uint32, offsetLow uint32, length uintptr) (addr uintptr, err error)
//sys	UnmapViewOfFile(addr uintptr) (err error)
//sys	FlushViewOfFile(addr uintptr, length uintptr) (err error)
//sys	VirtualLock(addr uintptr, length uintptr) (err error)
//sys	VirtualUnlock(addr uintptr, length uintptr) (err error)
//sys	VirtualAlloc(address uintptr, size uintptr, alloctype uint32, protect uint32) (value uintptr, err error) = kernel32.VirtualAlloc
//sys	VirtualFree(address uintptr, size uintptr, freetype uint32) (err error) = kernel32.VirtualFree
//sys	VirtualProtect(address uintptr, size uintptr, newprotect uint32, oldprotect *uint32) (err error) = kernel32.VirtualProtect
//sys	VirtualProtectEx(process Handle, address uintptr, size uintptr, newProtect uint32, oldProtect *uint32) (err error) = kernel32.VirtualProtectEx
//sys	VirtualQuery(address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) = kernel32.VirtualQuery
//sys	VirtualQueryEx(process Handle, address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) = kernel32.VirtualQueryEx
//sys	ReadProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesRead *uintptr) (err error) = kernel32.ReadProcessMemory
//sys	WriteProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesWritten *uintptr) (err error) = kernel32.WriteProcessMemory
//sys	TransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint32, overlapped *Overlapped, transmitFileBuf *TransmitFileBuffers, flags uint32) (err error) = mswsock.TransmitFile
//sys	ReadDirectoryChanges(handle Handle, buf *byte, buflen uint32, watchSubTree bool, mask uint32, retlen *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) = kernel32.ReadDirectoryChangesW
//sys	FindFirstChangeNotification(path string, watchSubtree bool, notifyFilter uint32) (handle Handle, err error) [failretval==InvalidHandle] = kernel32.FindFirstChangeNotificationW
//sys	FindNextChangeNotification(handle Handle) (err error)
//sys	FindCloseChangeNotification(handle Handle) (err error)
//sys	CertOpenSystemStore(hprov Handle, name *uint16) (store Handle, err error) = crypt32.CertOpenSystemStoreW
//sys	CertOpenStore(storeProvider uintptr, msgAndCertEncodingType uint32, cryptProv uintptr, flags uint32, para uintptr) (handle Handle, err error) = crypt32.CertOpenStore
//sys	CertEnumCertificatesInStore(store Handle, prevContext *CertContext) (context *CertContext, err error) [failretval==nil] = crypt32.CertEnumCertificatesInStore
//sys	CertAddCertificateContextToStore(store Handle, certContext *CertContext, addDisposition uint32, storeContext **CertContext) (err error) = crypt32.CertAddCertificateContextToStore
//sys	CertCloseStore(store Handle, flags uint32) (err error) = crypt32.CertCloseStore
//sys	CertDeleteCertificateFromStore(certContext *CertContext) (err error) = crypt32.CertDeleteCertificateFromStore
//sys	CertDuplicateCertificateContext(certContext *CertContext) (dupContext *CertContext) = crypt32.CertDuplicateCertificateContext
//sys	PFXImportCertStore(pfx *CryptDataBlob, password *uint16, flags uint32) (store Handle, err error) = crypt32.PFXImportCertStore
//sys	CertGetCertificateChain(engine Handle, leaf *CertContext, time *Filetime, additionalStore Handle, para *CertChainPara, flags uint32, reserved uintptr, chainCtx **CertChainContext) (err error) = crypt32.CertGetCertificateChain
//sys	CertFreeCertificateChain(ctx *CertChainContext) = crypt32.CertFreeCertificateChain
//sys	CertCreateCertificateContext(certEncodingType uint32, certEncoded *byte, encodedLen uint32) (context *CertContext, err error) [failretval==nil] = crypt32.CertCreateCertificateContext
//sys	CertFreeCertificateContext(ctx *CertContext) (err error) = crypt32.CertFreeCertificateContext
//sys	CertVerifyCertificateChainPolicy(policyOID uintptr, chain *CertChainContext, para *CertChainPolicyPara, status *CertChainPolicyStatus) (err error) = crypt32.CertVerifyCertificateChainPolicy
//sys	CertGetNameString(certContext *CertContext, nameType uint32, flags uint32, typePara unsafe.Pointer, name *uint16, size uint32) (chars uint32) = crypt32.CertGetNameStringW
//sys	CertFindExtension(objId *byte, countExtensions uint32, extensions *CertExtension) (ret *CertExtension) = crypt32.CertFindExtension
//sys   CertFindCertificateInStore(store Handle, certEncodingType uint32, findFlags uint32, findType uint32, findPara unsafe.Pointer, prevCertContext *CertContext) (cert *CertContext, err error) [failretval==nil] = crypt32.CertFindCertificateInStore
//sys   CertFindChainInStore(store Handle, certEncodingType uint32, findFlags uint32, findType uint32, findPara unsafe.Pointer, prevChainContext *CertChainContext) (certchain *CertChainContext, err error) [failretval==nil] = crypt32.CertFindChainInStore
//sys   CryptAcquireCertificatePrivateKey(cert *CertContext, flags uint32, parameters unsafe.Pointer, cryptProvOrNCryptKey *Handle, keySpec *uint32, callerFreeProvOrNCryptKey *bool) (err error) = crypt32.CryptAcquireCertificatePrivateKey
//sys	CryptQueryObject(objectType uint32, object unsafe.Pointer, expectedContentTypeFlags uint32, expectedFormatTypeFlags uint32, flags uint32, msgAndCertEncodingType *uint32, contentType *uint32, formatType *uint32, certStore *Handle, msg *Handle, context *unsafe.Pointer) (err error) = crypt32.CryptQueryObject
//sys	CryptDecodeObject(encodingType uint32, structType *byte, encodedBytes *byte, lenEncodedBytes uint32, flags uint32, decoded unsafe.Pointer, decodedLen *uint32) (err error) = crypt32.CryptDecodeObject
//sys	CryptProtectData(dataIn *DataBlob, name *uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) = crypt32.CryptProtectData
//sys	CryptUnprotectData(dataIn *DataBlob, name **uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) = crypt32.CryptUnprotectData
//sys	WinVerifyTrustEx(hwnd HWND, actionId *GUID, data *WinTrustData) (ret error) = wintrust.WinVerifyTrustEx
//sys	RegOpenKeyEx(key Handle, subkey *uint16, options uint32, desiredAccess uint32, result *Handle) (regerrno error) = advapi32.RegOpenKeyExW
//sys	RegCloseKey(key Handle) (regerrno error) = advapi32.RegCloseKey
//sys	RegQueryInfoKey(key Handle, class *uint16, classLen *uint32, reserved *uint32, subkeysLen *uint32, maxSubkeyLen *uint32, maxClassLen *uint32, valuesLen *uint32, maxValueNameLen *uint32, maxValueLen *uint32, saLen *uint32, lastWriteTime *Filetime) (regerrno error) = advapi32.RegQueryInfoKeyW
//sys	RegEnumKeyEx(key Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, class *uint16, classLen *uint32, lastWriteTime *Filetime) (regerrno error) = advapi32.RegEnumKeyExW
//sys	RegQueryValueEx(key Handle, name *uint16, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) = advapi32.RegQueryValueExW
//sys	RegNotifyChangeKeyValue(key Handle, watchSubtree bool, notifyFilter uint32, event Handle, asynchronous bool) (regerrno error) = advapi32.RegNotifyChangeKeyValue
//sys	GetCurrentProcessId() (pid uint32) = kernel32.GetCurrentProcessId
//sys	ProcessIdToSessionId(pid uint32, sessionid *uint32) (err error) = kernel32.ProcessIdToSessionId
//sys	GetConsoleMode(console Handle, mode *uint32) (err error) = kernel32.GetConsoleMode
//sys	SetConsoleMode(console Handle, mode uint32) (err error) = kernel32.SetConsoleMode
//sys	GetConsoleScreenBufferInfo(console Handle, info *ConsoleScreenBufferInfo) (err error) = kernel32.GetConsoleScreenBufferInfo
//sys	setConsoleCursorPosition(console Handle, position uint32) (err error) = kernel32.SetConsoleCursorPosition
//sys	WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, reserved *byte) (err error) = kernel32.WriteConsoleW
//sys	ReadConsole(console Handle, buf *uint16, toread uint32, read *uint32, inputControl *byte) (err error) = kernel32.ReadConsoleW
//sys	CreateToolhelp32Snapshot(flags uint32, processId uint32) (handle Handle, err error) [failretval==InvalidHandle] = kernel32.CreateToolhelp32Snapshot
//sys	Module32First(snapshot Handle, moduleEntry *ModuleEntry32) (err error) = kernel32.Module32FirstW
//sys	Module32Next(snapshot Handle, moduleEntry *ModuleEntry32) (err error) = kernel32.Module32NextW
//sys	Process32First(snapshot Handle, procEntry *ProcessEntry32) (err error) = kernel32.Process32FirstW
//sys	Process32Next(snapshot Handle, procEntry *ProcessEntry32) (err error) = kernel32.Process32NextW
//sys	Thread32First(snapshot Handle, threadEntry *ThreadEntry32) (err error)
//sys	Thread32Next(snapshot Handle, threadEntry *ThreadEntry32) (err error)
//sys	DeviceIoControl(handle Handle, ioControlCode uint32, inBuffer *byte, inBufferSize uint32, outBuffer *byte, outBufferSize uint32, bytesReturned *uint32, overlapped *Overlapped) (err error)
// This function returns 1 byte BOOLEAN rather than the 4 byte BOOL.
//sys	CreateSymbolicLink(symlinkfilename *uint16, targetfilename *uint16, flags uint32) (err error) [failretval&0xff==0] = CreateSymbolicLinkW
//sys	CreateHardLink(filename *uint16, existingfilename *uint16, reserved uintptr) (err error) [failretval&0xff==0] = CreateHardLinkW
//sys	GetCurrentThreadId() (id uint32)
//sys	CreateEvent(eventAttrs *SecurityAttributes, manualReset uint32, initialState uint32, name *uint16) (handle Handle, err error) [failretval == 0 || e1 == ERROR_ALREADY_EXISTS] = kernel32.CreateEventW
//sys	CreateEventEx(eventAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) [failretval == 0 || e1 == ERROR_ALREADY_EXISTS] = kernel32.CreateEventExW
//sys	OpenEvent(desiredAccess uint32, inheritHandle bool, name *uint16) (handle Handle, err error) = kernel32.OpenEventW
//sys	SetEvent(event Handle) (err error) = kernel32.SetEvent
//sys	ResetEvent(event Handle) (err error) = kernel32.ResetEvent
//sys	PulseEvent(event Handle) (err error) = kernel32.PulseEvent
//sys	CreateMutex(mutexAttrs *SecurityAttributes, initialOwner bool, name *uint16) (handle Handle, err error) [failretval == 0 || e1 == ERROR_ALREADY_EXISTS] = kernel32.CreateMutexW
//sys	CreateMutexEx(mutexAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) [failretval == 0 || e1 == ERROR_ALREADY_EXISTS] = kernel32.CreateMutexExW
//sys	OpenMutex(desiredAccess uint32, inheritHandle bool, name *uint16) (handle Handle, err error) = kernel32.OpenMutexW
//sys	ReleaseMutex(mutex Handle) (err error) = kernel32.ReleaseMutex
//sys	SleepEx(milliseconds uint32, alertable bool) (ret uint32) = kernel32.SleepEx
//sys	CreateJobObject(jobAttr *SecurityAttributes, name *uint16) (handle Handle, err error) = kernel32.CreateJobObjectW
//sys	AssignProcessToJobObject(job Handle, process Handle) (err error) = kernel32.AssignProcessToJobObject
//sys	TerminateJobObject(job Handle, exitCode uint32) (err error) = kernel32.TerminateJobObject
//sys	SetErrorMode(mode uint32) (ret uint32) = kernel32.SetErrorMode
//sys	ResumeThread(thread Handle) (ret uint32, err error) [failretval==0xffffffff] = kernel32.ResumeThread
//sys	SetPriorityClass(process Handle, priorityClass uint32) (err error) = kernel32.SetPriorityClass
//sys	GetPriorityClass(process Handle) (ret uint32, err error) = kernel32.GetPriorityClass
//sys	QueryInformationJobObject(job Handle, JobObjectInformationClass int32, JobObjectInformation uintptr, JobObjectInformationLength uint32, retlen *uint32) (err error) = kernel32.QueryInformationJobObject
//sys	SetInformationJobObject(job Handle, JobObjectInformationClass uint32, JobObjectInformation uintptr, JobObjectInformationLength uint32) (ret int, err error)
//sys	GenerateConsoleCtrlEvent(ctrlEvent uint32, processGroupID uint32) (err error)
//sys	GetProcessId(process Handle) (id uint32, err error)
//sys	QueryFullProcessImageName(proc Handle, flags uint32, exeName *uint16, size *uint32) (err error) = kernel32.QueryFullProcessImageNameW
//sys	OpenThread(desiredAccess uint32, inheritHandle bool, threadId uint32) (handle Handle, err error)
//sys	SetProcessPriorityBoost(process Handle, disable bool) (err error) = kernel32.SetProcessPriorityBoost
//sys	GetProcessWorkingSetSizeEx(hProcess Handle, lpMinimumWorkingSetSize *uintptr, lpMaximumWorkingSetSize *uintptr, flags *uint32)
//sys	SetProcessWorkingSetSizeEx(hProcess Handle, dwMinimumWorkingSetSize uintptr, dwMaximumWorkingSetSize uintptr, flags uint32) (err error)
//sys	GetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error)
//sys	SetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error)
//sys	GetActiveProcessorCount(groupNumber uint16) (ret uint32)
//sys	GetMaximumProcessorCount(groupNumber uint16) (ret uint32)
//sys	EnumWindows(enumFunc uintptr, param unsafe.Pointer) (err error) = user32.EnumWindows
//sys	EnumChildWindows(hwnd HWND, enumFunc uintptr, param unsafe.Pointer) = user32.EnumChildWindows
//sys	GetClassName(hwnd HWND, className *uint16, maxCount int32) (copied int32, err error) = user32.GetClassNameW
//sys	GetDesktopWindow() (hwnd HWND) = user32.GetDesktopWindow
//sys	GetForegroundWindow() (hwnd HWND) = user32.GetForegroundWindow
//sys	IsWindow(hwnd HWND) (isWindow bool) = user32.IsWindow
//sys	IsWindowUnicode(hwnd HWND) (isUnicode bool) = user32.IsWindowUnicode
//sys	IsWindowVisible(hwnd HWND) (isVisible bool) = user32.IsWindowVisible
//sys	GetGUIThreadInfo(thread uint32, info *GUIThreadInfo) (err error) = user32.GetGUIThreadInfo
//sys	GetLargePageMinimum() (size uintptr)

// Volume Management Functions
//sys	DefineDosDevice(flags uint32, deviceName *uint16, targetPath *uint16) (err error) = DefineDosDeviceW
//sys	DeleteVolumeMountPoint(volumeMountPoint *uint16) (err error) = DeleteVolumeMountPointW
//sys	FindFirstVolume(volumeName *uint16, bufferLength uint32) (handle Handle, err error) [failretval==InvalidHandle] = FindFirstVolumeW
//sys	FindFirstVolumeMountPoint(rootPathName *uint16, volumeMountPoint *uint16, bufferLength uint32) (handle Handle, err error) [failretval==InvalidHandle] = FindFirstVolumeMountPointW
//sys	FindNextVolume(findVolume Handle, volumeName *uint16, bufferLength uint32) (err error) = FindNextVolumeW
//sys	FindNextVolumeMountPoint(findVolumeMountPoint Handle, volumeMountPoint *uint16, bufferLength uint32) (err error) = FindNextVolumeMountPointW
//sys	FindVolumeClose(findVolume Handle) (err error)
//sys	FindVolumeMountPointClose(findVolumeMountPoint Handle) (err error)
//sys	GetDiskFreeSpaceEx(directoryName *uint16, freeBytesAvailableToCaller *uint64, totalNumberOfBytes *uint64, totalNumberOfFreeBytes *uint64) (err error) = GetDiskFreeSpaceExW
//sys	GetDriveType(rootPathName *uint16) (driveType uint32) = GetDriveTypeW
//sys	GetLogicalDrives() (drivesBitMask uint32, err error) [failretval==0]
//sys	GetLogicalDriveStrings(bufferLength uint32, buffer *uint16) (n uint32, err error) [failretval==0] = GetLogicalDriveStringsW
//sys	GetVolumeInformation(rootPathName *uint16, volumeNameBuffer *uint16, volumeNameSize uint32, volumeNameSerialNumber *uint32, maximumComponentLength *uint32, fileSystemFlags *uint32, fileSystemNameBuffer *uint16, fileSystemNameSize uint32) (err error) = GetVolumeInformationW
//sys	GetVolumeInformationByHandle(file Handle, volumeNameBuffer *uint16, volumeNameSize uint32, volumeNameSerialNumber *uint32, maximumComponentLength *uint32, fileSystemFlags *uint32, fileSystemNameBuffer *uint16, fileSystemNameSize uint32) (err error) = GetVolumeInformationByHandleW
//sys	GetVolumeNameForVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16, bufferlength uint32) (err error) = GetVolumeNameForVolumeMountPointW
//sys	GetVolumePathName(fileName *uint16, volumePathName *uint16, bufferLength uint32) (err error) = GetVolumePathNameW
//sys	GetVolumePathNamesForVolumeName(volumeName *uint16, volumePathNames *uint16, bufferLength uint32, returnLength *uint32) (err error) = GetVolumePathNamesForVolumeNameW
//sys	QueryDosDevice(deviceName *uint16, targetPath *uint16, max uint32) (n uint32, err error) [failretval==0] = QueryDosDeviceW
//sys	SetVolumeLabel(rootPathName *uint16, volumeName *uint16) (err error) = SetVolumeLabelW
//sys	SetVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16) (err error) = SetVolumeMountPointW
//sys	InitiateSystemShutdownEx(machineName *uint16, message *uint16, timeout uint32, forceAppsClosed bool, rebootAfterShutdown bool, reason uint32) (err error) = advapi32.InitiateSystemShutdownExW
//sys	SetProcessShutdownParameters(level uint32, flags uint32) (err error) = kernel32.SetProcessShutdownParameters
//sys	GetProcessShutdownParameters(level *uint32, flags *uint32) (err error) = kernel32.GetProcessShutdownParameters
//sys	clsidFromString(lpsz *uint16, pclsid *GUID) (ret error) = ole32.CLSIDFromString
//sys	stringFromGUID2(rguid *GUID, lpsz *uint16, cchMax int32) (chars int32) = ole32.StringFromGUID2
//sys	coCreateGuid(pguid *GUID) (ret error) = ole32.CoCreateGuid
//sys	CoTaskMemFree(address unsafe.Pointer) = ole32.CoTaskMemFree
//sys	CoInitializeEx(reserved uintptr, coInit uint32) (ret error) = ole32.CoInitializeEx
//sys	CoUninitialize() = ole32.CoUninitialize
//sys	CoGetObject(name *uint16, bindOpts *BIND_OPTS3, guid *GUID, functionTable **uintptr) (ret error) = ole32.CoGetObject
//sys	getProcessPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) = kernel32.GetProcessPreferredUILanguages
//sys	getThreadPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) = kernel32.GetThreadPreferredUILanguages
//sys	getUserPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) = kernel32.GetUserPreferredUILanguages
//sys	getSystemPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) = kernel32.GetSystemPreferredUILanguages
//sys	findResource(module Handle, name uintptr, resType uintptr) (resInfo Handle, err error) = kernel32.FindResourceW
//sys	SizeofResource(module Handle, resInfo Handle) (size uint32, err error) = kernel32.SizeofResource
//sys	LoadResource(module Handle, resInfo Handle) (resData Handle, err error) = kernel32.LoadResource
//sys	LockResource(resData Handle) (addr uintptr, err error) = kernel32.LockResource

// Version APIs
//sys	GetFileVersionInfoSize(filename string, zeroHandle *Handle) (bufSize uint32, err error) = version.GetFileVersionInfoSizeW
//sys	GetFileVersionInfo(filename string, handle uint32, bufSize uint32, buffer unsafe.Pointer) (err error) = version.GetFileVersionInfoW
//sys	VerQueryValue(block unsafe.Pointer, subBlock string, pointerToBufferPointer unsafe.Pointer, bufSize *uint32) (err error) = version.VerQueryValueW

// Process Status API (PSAPI)
//sys	EnumProcesses(processIds []uint32, bytesReturned *uint32) (err error) = psapi.EnumProcesses
//sys	EnumProcessModules(process Handle, module *Handle, cb uint32, cbNeeded *uint32) (err error) = psapi.EnumProcessModules
//sys	EnumProcessModulesEx(process Handle, module *Handle, cb uint32, cbNeeded *uint32, filterFlag uint32) (err error) = psapi.EnumProcessModulesEx
//sys	GetModuleInformation(process Handle, module Handle, modinfo *ModuleInfo, cb uint32) (err error) = psapi.GetModuleInformation
//sys	GetModuleFileNameEx(process Handle, module Handle, filename *uint16, size uint32) (err error) = psapi.GetModuleFileNameExW
//sys	GetModuleBaseName(process Handle, module Handle, baseName *uint16, size uint32) (err error) = psapi.GetModuleBaseNameW
//sys   QueryWorkingSetEx(process Handle, pv uintptr, cb uint32) (err error) = psapi.QueryWorkingSetEx

// NT Native APIs
//sys	rtlNtStatusToDosErrorNoTeb(ntstatus NTStatus) (ret syscall.Errno) = ntdll.RtlNtStatusToDosErrorNoTeb
//sys	rtlGetVersion(info *OsVersionInfoEx) (ntstatus error) = ntdll.RtlGetVersion
//sys	rtlGetNtVersionNumbers(majorVersion *uint32, minorVersion *uint32, buildNumber *uint32) = ntdll.RtlGetNtVersionNumbers
//sys	RtlGetCurrentPeb() (peb *PEB) = ntdll.RtlGetCurrentPeb
//sys	RtlInitUnicodeString(destinationString *NTUnicodeString, sourceString *uint16) = ntdll.RtlInitUnicodeString
//sys	RtlInitString(destinationString *NTString, sourceString *byte) = ntdll.RtlInitString
//sys	NtCreateFile(handle *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, allocationSize *int64, attributes uint32, share uint32, disposition uint32, options uint32, eabuffer uintptr, ealength uint32) (ntstatus error) = ntdll.NtCreateFile
//sys	NtCreateNamedPipeFile(pipe *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, share uint32, disposition uint32, options uint32, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (ntstatus error) = ntdll.NtCreateNamedPipeFile
//sys	NtSetInformationFile(handle Handle, iosb *IO_STATUS_BLOCK, inBuffer *byte, inBufferLen uint32, class uint32) (ntstatus error) = ntdll.NtSetInformationFile
//sys	RtlDosPathNameToNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) = ntdll.RtlDosPathNameToNtPathName_U_WithStatus
//sys	RtlDosPathNameToRelativeNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) = ntdll.RtlDosPathNameToRelativeNtPathName_U_WithStatus
//sys	RtlDefaultNpAcl(acl **ACL) (ntstatus error) = ntdll.RtlDefaultNpAcl
//sys	NtQueryInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32, retLen *uint32) (ntstatus error) = ntdll.NtQueryInformationProcess
//sys	NtSetInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32) (ntstatus error) = ntdll.NtSetInformationProcess
//sys	NtQuerySystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32, retLen *uint32) (ntstatus error) = ntdll.NtQuerySystemInformation
//sys	NtSetSystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32) (ntstatus error) = ntdll.NtSetSystemInformation
//sys	RtlAddFunctionTable(functionTable *RUNTIME_FUNCTION, entryCount uint32, baseAddress uintptr) (ret bool) = ntdll.RtlAddFunctionTable
//sys	RtlDeleteFunctionTable(functionTable *RUNTIME_FUNCTION) (ret bool) = ntdll.RtlDeleteFunctionTable

// Desktop Window Manager API (Dwmapi)
//sys	DwmGetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) = dwmapi.DwmGetWindowAttribute
//sys	DwmSetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) = dwmapi.DwmSetWindowAttribute

// syscall interface implementation for other packages

// GetCurrentProcess returns the handle for the current process.
// It is a pseudo handle that does not need to be closed.
// The returned error is always nil.
//
// Deprecated: use CurrentProcess for the same Handle without the nil
// error.
func GetCurrentProcess() (Handle, error) {
	return CurrentProcess(), nil
}

// CurrentProcess returns the handle for the current process.
// It is a pseudo handle that does not need to be closed.
func CurrentProcess() Handle { return Handle(^uintptr(1 - 1)) }

// GetCurrentThread returns the handle for the current thread.
// It is a pseudo handle that does not need to be closed.
// The returned error is always nil.
//
// Deprecated: use CurrentThread for the same Handle without the nil
// error.
func GetCurrentThread() (Handle, error) {
	return CurrentThread(), nil
}

// CurrentThread returns the handle for the current thread.
// It is a pseudo handle that does not need to be closed.
func CurrentThread() Handle { return Handle(^uintptr(2 - 1)) }

// GetProcAddressByOrdinal retrieves the address of the exported
// function from module by ordinal.
func GetProcAddressByOrdinal(module Handle, ordinal uintptr) (proc uintptr, err error) {
	r0, _, e1 := syscall.Syscall(procGetProcAddress.Addr(), 2, uintptr(module), ordinal, 0)
	proc = uintptr(r0)
	if proc == 0 {
		err = errnoErr(e1)
	}
	return
}

func Exit(code int) { ExitProcess(uint32(code)) }

func makeInheritSa() *SecurityAttributes {
	var sa SecurityAttributes
	sa.Length = uint32(unsafe.Sizeof(sa))
	sa.InheritHandle = 1
	return &sa
}

func Open(path string, mode int, perm uint32) (fd Handle, err error) {
	if len(path) == 0 {
		return InvalidHandle, ERROR_FILE_NOT_FOUND
	}
	pathp, err := UTF16PtrFromString(path)
	if err != nil {
		return InvalidHandle, err
	}
	var access uint32
	switch mode & (O_RDONLY | O_WRONLY | O_RDWR) {
	case O_RDONLY:
		access = GENERIC_READ
	case O_WRONLY:
		access = GENERIC_WRITE
	case O_RDWR:
		access = GENERIC_READ | GENERIC_WRITE
	}
	if mode&O_CREAT != 0 {
		access |= GENERIC_WRITE
	}
	if mode&O_APPEND != 0 {
		access &^= GENERIC_WRITE
		access |= FILE_APPEND_DATA
	}
	sharemode := uint32(FILE_SHARE_READ | FILE_SHARE_WRITE)
	var sa *SecurityAttributes
	if mode&O_CLOEXEC == 0 {
		sa = makeInheritSa()
	}
	var createmode uint32
	switch {
	case mode&(O_CREAT|O_EXCL) == (O_CREAT | O_EXCL):
		createmode = CREATE_NEW
	case mode&(O_CREAT|O_TRUNC) == (O_CREAT | O_TRUNC):
		createmode = CREATE_ALWAYS
	case mode&O_CREAT == O_CREAT:
		createmode = OPEN_ALWAYS
	case mode&O_TRUNC == O_TRUNC:
		createmode = TRUNCATE_EXISTING
	default:
		createmode = OPEN_EXISTING
	}
	var attrs uint32 = FILE_ATTRIBUTE_NORMAL
	if perm&S_IWRITE == 0 {
		attrs = FILE_ATTRIBUTE_READONLY
	}
	h, e := CreateFile(pathp, access, sharemode, sa, createmode, attrs, 0)
	return h, e
}

func Read(fd Handle, p []byte) (n int, err error) {
	var done uint32
	e := ReadFile(fd, p, &done, nil)
	if e != nil {
		if e == ERROR_BROKEN_PIPE {
			// NOTE(brainman): work around ERROR_BROKEN_PIPE is returned on reading EOF from stdin
			return 0, nil
		}
		return 0, e
	}
	return int(done), nil
}

func Write(fd Handle, p []byte) (n int, err error) {
	if raceenabled {
		raceReleaseMerge(unsafe.Pointer(&ioSync))
	}
	var done uint32
	e := WriteFile(fd, p, &done, nil)
	if e != nil {
		return 0, e
	}
	return int(done), nil
}

func ReadFile(fd Handle, p []byte, done *uint32, overlapped *Overlapped) error {
	err := readFile(fd, p, done, overlapped)
	if raceenabled {
		if *done > 0 {
			raceWriteRange(unsafe.Pointer(&p[0]), int(*done))
		}
		raceAcquire(unsafe.Pointer(&ioSync))
	}
	return err
}

func WriteFile(fd Handle, p []byte, done *uint32, overlapped *Overlapped) error {
	if raceenabled {
		raceReleaseMerge(unsafe.Pointer(&ioSync))
	}
	err := writeFile(fd, p, done, overlapped)
	if raceenabled && *done > 0 {
		raceReadRange(unsafe.Pointer(&p[0]), int(*done))
	}
	return err
}

var ioSync int64

func Seek(fd Handle, offset int64, whence int) (newoffset int64, err error) {
	var w uint32
	switch whence {
	case 0:
		w = FILE_BEGIN
	case 1:
		w = FILE_CURRENT
	case 2:
		w = FILE_END
	}
	hi := int32(offset >> 32)
	lo := int32(offset)
	// use GetFileType to check pipe, pipe can't do seek
	ft, _ := GetFileType(fd)
	if ft == FILE_TYPE_PIPE {
		return 0, syscall.EPIPE
	}
	rlo, e := SetFilePointer(fd, lo, &hi, w)
	if e != nil {
		return 0, e
	}
	return int64(hi)<<32 + int64(rlo), nil
}

func Close(fd Handle) (err error) {
	return CloseHandle(fd)
}

var (
	Stdin  = getStdHandle(STD_INPUT_HANDLE)
	Stdout = getStdHandle(STD_OUTPUT_HANDLE)
	Stderr = getStdHandle(STD_ERROR_HANDLE)
)

func getStdHandle(stdhandle uint32) (fd Handle) {
	r, _ := GetStdHandle(stdhandle)
	return r
}

const ImplementsGetwd = true

func Getwd() (wd string, err error) {
	b := make([]uint16, 300)
	n, e := GetCurrentDirectory(uint32(len(b)), &b[0])
	if e != nil {
		return "", e
	}
	return string(utf16.Decode(b[0:n])), nil
}

func Chdir(path string) (err error) {
	pathp, err := UTF16PtrFromString(path)
	if err != nil {
		return err
	}
	return SetCurrentDirectory(pathp)
}

func Mkdir(path string, mode uint32) (err error) {
	pathp, err := UTF16PtrFromString(path)
	if err != nil {
		return err
	}
	return CreateDirectory(pathp, nil)
}

func Rmdir(path string) (err error) {
	pathp, err := UTF16PtrFromString(path)
	if err != nil {
		return err
	}
	return RemoveDirectory(pathp)
}

func Unlink(path string) (err error) {
	pathp, err := UTF16PtrFromString(path)
	if err != nil {
		return err
	}
	return DeleteFile(pathp)
}

func Rename(oldpath, newpath string) (err error) {
	from, err := UTF16PtrFromString(oldpath)
	if err != nil {
		return err
	}
	to, err := UTF16PtrFromString(newpath)
	if err != nil {
		return err
	}
	return MoveFileEx(from, to, MOVEFILE_REPLACE_EXISTING)
}

func ComputerName() (name string, err error) {
	var n uint32 = MAX_COMPUTERNAME_LENGTH + 1
	b := make([]uint16, n)
	e := GetComputerName(&b[0], &n)
	if e != nil {
		return "", e
	}
	return string(utf16.Decode(b[0:n])), nil
}

func DurationSinceBoot() time.Duration {
	return time.Duration(getTickCount64()) * time.Millisecond
}

func Ftruncate(fd Handle, length int64) (err error) {
	curoffset, e := Seek(fd, 0, 1)
	if e != nil {
		return e
	}
	defer Seek(fd, curoffset, 0)
	_, e = Seek(fd, length, 0)
	if e != nil {
		return e
	}
	e = SetEndOfFile(fd)
	if e != nil {
		return e
	}
	return nil
}

func Gettimeofday(tv *Timeval) (err error) {
	var ft Filetime
	GetSystemTimeAsFileTime(&ft)
	*tv = NsecToTimeval(ft.Nanoseconds())
	return nil
}

func Pipe(p []Handle) (err error) {
	if len(p) != 2 {
		return syscall.EINVAL
	}
	var r, w Handle
	e := CreatePipe(&r, &w, makeInheritSa(), 0)
	if e != nil {
		return e
	}
	p[0] = r
	p[1] = w
	return nil
}

func Utimes(path string, tv []Timeval) (err error) {
	if len(tv) != 2 {
		return syscall.EINVAL
	}
	pathp, e := UTF16PtrFromString(path)
	if e != nil {
		return e
	}
	h, e := CreateFile(pathp,
		FILE_WRITE_ATTRIBUTES, FILE_SHARE_WRITE, nil,
		OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)
	if e != nil {
		return e
	}
	defer CloseHandle(h)
	a := NsecToFiletime(tv[0].Nanoseconds())
	w := NsecToFiletime(tv[1].Nanoseconds())
	return SetFileTime(h, nil, &a, &w)
}

func UtimesNano(path string, ts []Timespec) (err error) {
	if len(ts) != 2 {
		return syscall.EINVAL
	}
	pathp, e := UTF16PtrFromString(path)
	if e != nil {
		return e
	}
	h, e := CreateFile(pathp,
		FILE_WRITE_ATTRIBUTES, FILE_SHARE_WRITE, nil,
		OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)
	if e != nil {
		return e
	}
	defer CloseHandle(h)
	a := NsecToFiletime(TimespecToNsec(ts[0]))
	w := NsecToFiletime(TimespecToNsec(ts[1]))
	return SetFileTime(h, nil, &a, &w)
}

func Fsync(fd Handle) (err error) {
	return FlushFileBuffers(fd)
}

func Chmod(path string, mode uint32) (err error) {
	p, e := UTF16PtrFromString(path)
	if e != nil {
		return e
	}
	attrs, e := GetFileAttributes(p)
	if e != nil {
		return e
	}
	if mode&S_IWRITE != 0 {
		attrs &^= FILE_ATTRIBUTE_READONLY
	} else {
		attrs |= FILE_ATTRIBUTE_READONLY
	}
	return SetFileAttributes(p, attrs)
}

func LoadGetSystemTimePreciseAsFileTime() error {
	return procGetSystemTimePreciseAsFileTime.Find()
}

func LoadCancelIoEx() error {
	return procCancelIoEx.Find()
}

func LoadSetFileCompletionNotificationModes() error {
	return procSetFileCompletionNotificationModes.Find()
}

func WaitForMultipleObjects(handles []Handle, waitAll bool, waitMilliseconds uint32) (event uint32, err error) {
	// Every other win32 array API takes arguments as "pointer, count", except for this function. So we
	// can't declare it as a usual [] type, because mksyscall will use the opposite order. We therefore
	// trivially stub this ourselves.

	var handlePtr *Handle
	if len(handles) > 0 {
		handlePtr = &handles[0]
	}
	return waitForMultipleObjects(uint32(len(handles)), uintptr(unsafe.Pointer(handlePtr)), waitAll, waitMilliseconds)
}

// net api calls

const socket_error = uintptr(^uint32(0))

//sys	WSAStartup(verreq uint32, data *WSAData) (sockerr error) = ws2_32.WSAStartup
//sys	WSACleanup() (err error) [failretval==socket_error] = ws2_32.WSACleanup
//sys	WSAIoctl(s Handle, iocc uint32, inbuf *byte, cbif uint32, outbuf *byte, cbob uint32, cbbr *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) [failretval==socket_error] = ws2_32.WSAIoctl
//sys	WSALookupServiceBegin(querySet *WSAQUERYSET, flags uint32, handle *Handle) (err error) [failretval==socket_error] = ws2_32.WSALookupServiceBeginW
//sys	WSALookupServiceNext(handle Handle, flags uint32, size *int32, querySet *WSAQUERYSET) (err error) [failretval==socket_error] = ws2_32.WSALookupServiceNextW
//sys	WSALookupServiceEnd(handle Handle) (err error) [failretval==socket_error] = ws2_32.WSALookupServiceEnd
//sys	socket(af int32, typ int32, protocol int32) (handle Handle, err error) [failretval==InvalidHandle] = ws2_32.socket
//sys	sendto(s Handle, buf []byte, flags int32, to unsafe.Pointer, tolen int32) (err error) [failretval==socket_error] = ws2_32.sendto
//sys	recvfrom(s Handle, buf []byte, flags int32, from *RawSockaddrAny, fromlen *int32) (n int32, err error) [failretval==-1] = ws2_32.recvfrom
//sys	Setsockopt(s Handle, level int32, optname int32, optval *byte, optlen int32) (err error) [failretval==socket_error] = ws2_32.setsockopt
//sys	Getsockopt(s Handle, level int32, optname int32, optval *byte, optlen *int32) (err error) [failretval==socket_error] = ws2_32.getsockopt
//sys	bind(s Handle, name unsafe.Pointer, namelen int32) (err error) [failretval==socket_error] = ws2_32.bind
//sys	connect(s Handle, name unsafe.Pointer, namelen int32) (err error) [failretval==socket_error] = ws2_32.connect
//sys	getsockname(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) [failretval==socket_error] = ws2_32.getsockname
//sys	getpeername(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) [failretval==socket_error] = ws2_32.getpeername
//sys	listen(s Handle, backlog int32) (err error) [failretval==socket_error] = ws2_32.listen
//sys	shutdown(s Handle, how int32) (err error) [failretval==socket_error] = ws2_32.shutdown
//sys	Closesocket(s Handle) (err error) [failretval==socket_error] = ws2_32.closesocket
//sys	AcceptEx(ls Handle, as Handle, buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, recvd *uint32, overlapped *Overlapped) (err error) = mswsock.AcceptEx
//sys	GetAcceptExSockaddrs(buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, lrsa **RawSockaddrAny, lrsalen *int32, rrsa **RawSockaddrAny, rrsalen *int32) = mswsock.GetAcceptExSockaddrs
//sys	WSARecv(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSARecv
//sys	WSASend(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSASend
//sys	WSARecvFrom(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32,  from *RawSockaddrAny, fromlen *int32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSARecvFrom
//sys	WSASendTo(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to *RawSockaddrAny, tolen int32,  overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSASendTo
//sys	WSASocket(af int32, typ int32, protocol int32, protoInfo *WSAProtocolInfo, group uint32, flags uint32) (handle Handle, err error) [failretval==InvalidHandle] = ws2_32.WSASocketW
//sys	GetHostByName(name string) (h *Hostent, err error) [failretval==nil] = ws2_32.gethostbyname
//sys	GetServByName(name string, proto string) (s *Servent, err error) [failretval==nil] = ws2_32.getservbyname
//sys	Ntohs(netshort uint16) (u uint16) = ws2_32.ntohs
//sys	GetProtoByName(name string) (p *Protoent, err error) [failretval==nil] = ws2_32.getprotobyname
//sys	DnsQuery(name string, qtype uint16, options uint32, extra *byte, qrs **DNSRecord, pr *byte) (status error) = dnsapi.DnsQuery_W
//sys	DnsRecordListFree(rl *DNSRecord, freetype uint32) = dnsapi.DnsRecordListFree
//sys	DnsNameCompare(name1 *uint16, name2 *uint16) (same bool) = dnsapi.DnsNameCompare_W
//sys	GetAddrInfoW(nodename *uint16, servicename *uint16, hints *AddrinfoW, result **AddrinfoW) (sockerr error) = ws2_32.GetAddrInfoW
//sys	FreeAddrInfoW(addrinfo *AddrinfoW) = ws2_32.FreeAddrInfoW
//sys	GetIfEntry(pIfRow *MibIfRow) (errcode error) = iphlpapi.GetIfEntry
//sys	GetAdaptersInfo(ai *IpAdapterInfo, ol *uint32) (errcode error) = iphlpapi.GetAdaptersInfo
//sys	SetFileCompletionNotificationModes(handle Handle, flags uint8) (err error) = kernel32.SetFileCompletionNotificationModes
//sys	WSAEnumProtocols(protocols *int32, protocolBuffer *WSAProtocolInfo, bufferLength *uint32) (n int32, err error) [failretval==-1] = ws2_32.WSAEnumProtocolsW
//sys	WSAGetOverlappedResult(h Handle, o *Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) = ws2_32.WSAGetOverlappedResult
//sys	GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizePointer *uint32) (errcode error) = iphlpapi.GetAdaptersAddresses
//sys	GetACP() (acp uint32) = kernel32.GetACP
//sys	MultiByteToWideChar(codePage uint32, dwFlags uint32, str *byte, nstr int32, wchar *uint16, nwchar int32) (nwrite int32, err error) = kernel32.MultiByteToWideChar
//sys	getBestInterfaceEx(sockaddr unsafe.Pointer, pdwBestIfIndex *uint32) (errcode error) = iphlpapi.GetBestInterfaceEx

// For testing: clients can set this flag to force
// creation of IPv6 sockets to return EAFNOSUPPORT.
var SocketDisableIPv6 bool

type RawSockaddrInet4 struct {
	Family uint16
	Port   uint16
	Addr   [4]byte /* in_addr */
	Zero   [8]uint8
}

type RawSockaddrInet6 struct {
	Family   uint16
	Port     uint16
	Flowinfo uint32
	Addr     [16]byte /* in6_addr */
	Scope_id uint32
}

type RawSockaddr struct {
	Family uint16
	Data   [14]int8
}

type RawSockaddrAny struct {
	Addr RawSockaddr
	Pad  [100]int8
}

type Sockaddr interface {
	sockaddr() (ptr unsafe.Pointer, len int32, err error) // lowercase; only we can define Sockaddrs
}

type SockaddrInet4 struct {
	Port int
	Addr [4]byte
	raw  RawSockaddrInet4
}

func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, int32, error) {
	if sa.Port < 0 || sa.Port > 0xFFFF {
		return nil, 0, syscall.EINVAL
	}
	sa.raw.Family = AF_INET
	p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
	p[0] = byte(sa.Port >> 8)
	p[1] = byte(sa.Port)
	sa.raw.Addr = sa.Addr
	return unsafe.Pointer(&sa.raw), int32(unsafe.Sizeof(sa.raw)), nil
}

type SockaddrInet6 struct {
	Port   int
	ZoneId uint32
	Addr   [16]byte
	raw    RawSockaddrInet6
}

func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, int32, error) {
	if sa.Port < 0 || sa.Port > 0xFFFF {
		return nil, 0, syscall.EINVAL
	}
	sa.raw.Family = AF_INET6
	p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
	p[0] = byte(sa.Port >> 8)
	p[1] = byte(sa.Port)
	sa.raw.Scope_id = sa.ZoneId
	sa.raw.Addr = sa.Addr
	return unsafe.Pointer(&sa.raw), int32(unsafe.Sizeof(sa.raw)), nil
}

type RawSockaddrUnix struct {
	Family uint16
	Path   [UNIX_PATH_MAX]int8
}

type SockaddrUnix struct {
	Name string
	raw  RawSockaddrUnix
}

func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, int32, error) {
	name := sa.Name
	n := len(name)
	if n > len(sa.raw.Path) {
		return nil, 0, syscall.EINVAL
	}
	if n == len(sa.raw.Path) && name[0] != '@' {
		return nil, 0, syscall.EINVAL
	}
	sa.raw.Family = AF_UNIX
	for i := 0; i < n; i++ {
		sa.raw.Path[i] = int8(name[i])
	}
	// length is family (uint16), name, NUL.
	sl := int32(2)
	if n > 0 {
		sl += int32(n) + 1
	}
	if sa.raw.Path[0] == '@' {
		sa.raw.Path[0] = 0
		// Don't count trailing NUL for abstract address.
		sl--
	}

	return unsafe.Pointer(&sa.raw), sl, nil
}

type RawSockaddrBth struct {
	AddressFamily  [2]byte
	BtAddr         [8]byte
	ServiceClassId [16]byte
	Port           [4]byte
}

type SockaddrBth struct {
	BtAddr         uint64
	ServiceClassId GUID
	Port           uint32

	raw RawSockaddrBth
}

func (sa *SockaddrBth) sockaddr() (unsafe.Pointer, int32, error) {
	family := AF_BTH
	sa.raw = RawSockaddrBth{
		AddressFamily:  *(*[2]byte)(unsafe.Pointer(&family)),
		BtAddr:         *(*[8]byte)(unsafe.Pointer(&sa.BtAddr)),
		Port:           *(*[4]byte)(unsafe.Pointer(&sa.Port)),
		ServiceClassId: *(*[16]byte)(unsafe.Pointer(&sa.ServiceClassId)),
	}
	return unsafe.Pointer(&sa.raw), int32(unsafe.Sizeof(sa.raw)), nil
}

func (rsa *RawSockaddrAny) Sockaddr() (Sockaddr, error) {
	switch rsa.Addr.Family {
	case AF_UNIX:
		pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))
		sa := new(SockaddrUnix)
		if pp.Path[0] == 0 {
			// "Abstract" Unix domain socket.
			// Rewrite leading NUL as @ for textual display.
			// (This is the standard convention.)
			// Not friendly to overwrite in place,
			// but the callers below don't care.
			pp.Path[0] = '@'
		}

		// Assume path ends at NUL.
		// This is not technically the Linux semantics for
		// abstract Unix domain sockets--they are supposed
		// to be uninterpreted fixed-size binary blobs--but
		// everyone uses this convention.
		n := 0
		for n < len(pp.Path) && pp.Path[n] != 0 {
			n++
		}
		sa.Name = string(unsafe.Slice((*byte)(unsafe.Pointer(&pp.Path[0])), n))
		return sa, nil

	case AF_INET:
		pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))
		sa := new(SockaddrInet4)
		p := (*[2]byte)(unsafe.Pointer(&pp.Port))
		sa.Port = int(p[0])<<8 + int(p[1])
		sa.Addr = pp.Addr
		return sa, nil

	case AF_INET6:
		pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))
		sa := new(SockaddrInet6)
		p := (*[2]byte)(unsafe.Pointer(&pp.Port))
		sa.Port = int(p[0])<<8 + int(p[1])
		sa.ZoneId = pp.Scope_id
		sa.Addr = pp.Addr
		return sa, nil
	}
	return nil, syscall.EAFNOSUPPORT
}

func Socket(domain, typ, proto int) (fd Handle, err error) {
	if domain == AF_INET6 && SocketDisableIPv6 {
		return InvalidHandle, syscall.EAFNOSUPPORT
	}
	return socket(int32(domain), int32(typ), int32(proto))
}

func SetsockoptInt(fd Handle, level, opt int, value int) (err error) {
	v := int32(value)
	return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&v)), int32(unsafe.Sizeof(v)))
}

func Bind(fd Handle, sa Sockaddr) (err error) {
	ptr, n, err := sa.sockaddr()
	if err != nil {
		return err
	}
	return bind(fd, ptr, n)
}

func Connect(fd Handle, sa Sockaddr) (err error) {
	ptr, n, err := sa.sockaddr()
	if err != nil {
		return err
	}
	return connect(fd, ptr, n)
}

func GetBestInterfaceEx(sa Sockaddr, pdwBestIfIndex *uint32) (err error) {
	ptr, _, err := sa.sockaddr()
	if err != nil {
		return err
	}
	return getBestInterfaceEx(ptr, pdwBestIfIndex)
}

func Getsockname(fd Handle) (sa Sockaddr, err error) {
	var rsa RawSockaddrAny
	l := int32(unsafe.Sizeof(rsa))
	if err = getsockname(fd, &rsa, &l); err != nil {
		return
	}
	return rsa.Sockaddr()
}

func Getpeername(fd Handle) (sa Sockaddr, err error) {
	var rsa RawSockaddrAny
	l := int32(unsafe.Sizeof(rsa))
	if err = getpeername(fd, &rsa, &l); err != nil {
		return
	}
	return rsa.Sockaddr()
}

func Listen(s Handle, n int) (err error) {
	return listen(s, int32(n))
}

func Shutdown(fd Handle, how int) (err error) {
	return shutdown(fd, int32(how))
}

func WSASendto(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to Sockaddr, overlapped *Overlapped, croutine *byte) (err error) {
	var rsa unsafe.Pointer
	var l int32
	if to != nil {
		rsa, l, err = to.sockaddr()
		if err != nil {
			return err
		}
	}
	return WSASendTo(s, bufs, bufcnt, sent, flags, (*RawSockaddrAny)(unsafe.Pointer(rsa)), l, overlapped, croutine)
}

func LoadGetAddrInfo() error {
	return procGetAddrInfoW.Find()
}

var connectExFunc struct {
	once sync.Once
	addr uintptr
	err  error
}

func LoadConnectEx() error {
	connectExFunc.once.Do(func() {
		var s Handle
		s, connectExFunc.err = Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)
		if connectExFunc.err != nil {
			return
		}
		defer CloseHandle(s)
		var n uint32
		connectExFunc.err = WSAIoctl(s,
			SIO_GET_EXTENSION_FUNCTION_POINTER,
			(*byte)(unsafe.Pointer(&WSAID_CONNECTEX)),
			uint32(unsafe.Sizeof(WSAID_CONNECTEX)),
			(*byte)(unsafe.Pointer(&connectExFunc.addr)),
			uint32(unsafe.Sizeof(connectExFunc.addr)),
			&n, nil, 0)
	})
	return connectExFunc.err
}

func connectEx(s Handle, name unsafe.Pointer, namelen int32, sendBuf *byte, sendDataLen uint32, bytesSent *uint32, overlapped *Overlapped) (err error) {
	r1, _, e1 := syscall.Syscall9(connectExFunc.addr, 7, uintptr(s), uintptr(name), uintptr(namelen), uintptr(unsafe.Pointer(sendBuf)), uintptr(sendDataLen), uintptr(unsafe.Pointer(bytesSent)), uintptr(unsafe.Pointer(overlapped)), 0, 0)
	if r1 == 0 {
		if e1 != 0 {
			err = error(e1)
		} else {
			err = syscall.EINVAL
		}
	}
	return
}

func ConnectEx(fd Handle, sa Sockaddr, sendBuf *byte, sendDataLen uint32, bytesSent *uint32, overlapped *Overlapped) error {
	err := LoadConnectEx()
	if err != nil {
		return errorspkg.New("failed to find ConnectEx: " + err.Error())
	}
	ptr, n, err := sa.sockaddr()
	if err != nil {
		return err
	}
	return connectEx(fd, ptr, n, sendBuf, sendDataLen, bytesSent, overlapped)
}

var sendRecvMsgFunc struct {
	once     sync.Once
	sendAddr uintptr
	recvAddr uintptr
	err      error
}

func loadWSASendRecvMsg() error {
	sendRecvMsgFunc.once.Do(func() {
		var s Handle
		s, sendRecvMsgFunc.err = Socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
		if sendRecvMsgFunc.err != nil {
			return
		}
		defer CloseHandle(s)
		var n uint32
		sendRecvMsgFunc.err = WSAIoctl(s,
			SIO_GET_EXTENSION_FUNCTION_POINTER,
			(*byte)(unsafe.Pointer(&WSAID_WSARECVMSG)),
			uint32(unsafe.Sizeof(WSAID_WSARECVMSG)),
			(*byte)(unsafe.Pointer(&sendRecvMsgFunc.recvAddr)),
			uint32(unsafe.Sizeof(sendRecvMsgFunc.recvAddr)),
			&n, nil, 0)
		if sendRecvMsgFunc.err != nil {
			return
		}
		sendRecvMsgFunc.err = WSAIoctl(s,
			SIO_GET_EXTENSION_FUNCTION_POINTER,
			(*byte)(unsafe.Pointer(&WSAID_WSASENDMSG)),
			uint32(unsafe.Sizeof(WSAID_WSASENDMSG)),
			(*byte)(unsafe.Pointer(&sendRecvMsgFunc.sendAddr)),
			uint32(unsafe.Sizeof(sendRecvMsgFunc.sendAddr)),
			&n, nil, 0)
	})
	return sendRecvMsgFunc.err
}

func WSASendMsg(fd Handle, msg *WSAMsg, flags uint32, bytesSent *uint32, overlapped *Overlapped, croutine *byte) error {
	err := loadWSASendRecvMsg()
	if err != nil {
		return err
	}
	r1, _, e1 := syscall.Syscall6(sendRecvMsgFunc.sendAddr, 6, uintptr(fd), uintptr(unsafe.Pointer(msg)), uintptr(flags), uintptr(unsafe.Pointer(bytesSent)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)))
	if r1 == socket_error {
		err = errnoErr(e1)
	}
	return err
}

func WSARecvMsg(fd Handle, msg *WSAMsg, bytesReceived *uint32, overlapped *Overlapped, croutine *byte) error {
	err := loadWSASendRecvMsg()
	if err != nil {
		return err
	}
	r1, _, e1 := syscall.Syscall6(sendRecvMsgFunc.recvAddr, 5, uintptr(fd), uintptr(unsafe.Pointer(msg)), uintptr(unsafe.Pointer(bytesReceived)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)), 0)
	if r1 == socket_error {
		err = errnoErr(e1)
	}
	return err
}

// Invented structures to support what package os expects.
type Rusage struct {
	CreationTime Filetime
	ExitTime     Filetime
	KernelTime   Filetime
	UserTime     Filetime
}

type WaitStatus struct {
	ExitCode uint32
}

func (w WaitStatus) Exited() bool { return true }

func (w WaitStatus) ExitStatus() int { return int(w.ExitCode) }

func (w WaitStatus) Signal() Signal { return -1 }

func (w WaitStatus) CoreDump() bool { return false }

func (w WaitStatus) Stopped() bool { return false }

func (w WaitStatus) Continued() bool { return false }

func (w WaitStatus) StopSignal() Signal { return -1 }

func (w WaitStatus) Signaled() bool { return false }

func (w WaitStatus) TrapCause() int { return -1 }

// Timespec is an invented structure on Windows, but here for
// consistency with the corresponding package for other operating systems.
type Timespec struct {
	Sec  int64
	Nsec int64
}

func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }

func NsecToTimespec(nsec int64) (ts Timespec) {
	ts.Sec = nsec / 1e9
	ts.Nsec = nsec % 1e9
	return
}

// TODO(brainman): fix all needed for net

func Accept(fd Handle) (nfd Handle, sa Sockaddr, err error) { return 0, nil, syscall.EWINDOWS }

func Recvfrom(fd Handle, p []byte, flags int) (n int, from Sockaddr, err error) {
	var rsa RawSockaddrAny
	l := int32(unsafe.Sizeof(rsa))
	n32, err := recvfrom(fd, p, int32(flags), &rsa, &l)
	n = int(n32)
	if err != nil {
		return
	}
	from, err = rsa.Sockaddr()
	return
}

func Sendto(fd Handle, p []byte, flags int, to Sockaddr) (err error) {
	ptr, l, err := to.sockaddr()
	if err != nil {
		return err
	}
	return sendto(fd, p, int32(flags), ptr, l)
}

func SetsockoptTimeval(fd Handle, level, opt int, tv *Timeval) (err error) { return syscall.EWINDOWS }

// The Linger struct is wrong but we only noticed after Go 1.
// sysLinger is the real system call structure.

// BUG(brainman): The definition of Linger is not appropriate for direct use
// with Setsockopt and Getsockopt.
// Use SetsockoptLinger instead.

type Linger struct {
	Onoff  int32
	Linger int32
}

type sysLinger struct {
	Onoff  uint16
	Linger uint16
}

type IPMreq struct {
	Multiaddr [4]byte /* in_addr */
	Interface [4]byte /* in_addr */
}

type IPv6Mreq struct {
	Multiaddr [16]byte /* in6_addr */
	Interface uint32
}

func GetsockoptInt(fd Handle, level, opt int) (int, error) {
	v := int32(0)
	l := int32(unsafe.Sizeof(v))
	err := Getsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&v)), &l)
	return int(v), err
}

func SetsockoptLinger(fd Handle, level, opt int, l *Linger) (err error) {
	sys := sysLinger{Onoff: uint16(l.Onoff), Linger: uint16(l.Linger)}
	return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&sys)), int32(unsafe.Sizeof(sys)))
}

func SetsockoptInet4Addr(fd Handle, level, opt int, value [4]byte) (err error) {
	return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&value[0])), 4)
}
func SetsockoptIPMreq(fd Handle, level, opt int, mreq *IPMreq) (err error) {
	return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(mreq)), int32(unsafe.Sizeof(*mreq)))
}
func SetsockoptIPv6Mreq(fd Handle, level, opt int, mreq *IPv6Mreq) (err error) {
	return syscall.EWINDOWS
}

func Getpid() (pid int) { return int(GetCurrentProcessId()) }

func FindFirstFile(name *uint16, data *Win32finddata) (handle Handle, err error) {
	// NOTE(rsc): The Win32finddata struct is wrong for the system call:
	// the two paths are each one uint16 short. Use the correct struct,
	// a win32finddata1, and then copy the results out.
	// There is no loss of expressivity here, because the final
	// uint16, if it is used, is supposed to be a NUL, and Go doesn't need that.
	// For Go 1.1, we might avoid the allocation of win32finddata1 here
	// by adding a final Bug [2]uint16 field to the struct and then
	// adjusting the fields in the result directly.
	var data1 win32finddata1
	handle, err = findFirstFile1(name, &data1)
	if err == nil {
		copyFindData(data, &data1)
	}
	return
}

func FindNextFile(handle Handle, data *Win32finddata) (err error) {
	var data1 win32finddata1
	err = findNextFile1(handle, &data1)
	if err == nil {
		copyFindData(data, &data1)
	}
	return
}

func getProcessEntry(pid int) (*ProcessEntry32, error) {
	snapshot, err := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
	if err != nil {
		return nil, err
	}
	defer CloseHandle(snapshot)
	var procEntry ProcessEntry32
	procEntry.Size = uint32(unsafe.Sizeof(procEntry))
	if err = Process32First(snapshot, &procEntry); err != nil {
		return nil, err
	}
	for {
		if procEntry.ProcessID == uint32(pid) {
			return &procEntry, nil
		}
		err = Process32Next(snapshot, &procEntry)
		if err != nil {
			return nil, err
		}
	}
}

func Getppid() (ppid int) {
	pe, err := getProcessEntry(Getpid())
	if err != nil {
		return -1
	}
	return int(pe.ParentProcessID)
}

// TODO(brainman): fix all needed for os
func Fchdir(fd Handle) (err error)             { return syscall.EWINDOWS }
func Link(oldpath, newpath string) (err error) { return syscall.EWINDOWS }
func Symlink(path, link string) (err error)    { return syscall.EWINDOWS }

func Fchmod(fd Handle, mode uint32) (err error)        { return syscall.EWINDOWS }
func Chown(path string, uid int, gid int) (err error)  { return syscall.EWINDOWS }
func Lchown(path string, uid int, gid int) (err error) { return syscall.EWINDOWS }
func Fchown(fd Handle, uid int, gid int) (err error)   { return syscall.EWINDOWS }

func Getuid() (uid int)                  { return -1 }
func Geteuid() (euid int)                { return -1 }
func Getgid() (gid int)                  { return -1 }
func Getegid() (egid int)                { return -1 }
func Getgroups() (gids []int, err error) { return nil, syscall.EWINDOWS }

type Signal int

func (s Signal) Signal() {}

func (s Signal) String() string {
	if 0 <= s && int(s) < len(signals) {
		str := signals[s]
		if str != "" {
			return str
		}
	}
	return "signal " + itoa(int(s))
}

func LoadCreateSymbolicLink() error {
	return procCreateSymbolicLinkW.Find()
}

// Readlink returns the destination of the named symbolic link.
func Readlink(path string, buf []byte) (n int, err error) {
	fd, err := CreateFile(StringToUTF16Ptr(path), GENERIC_READ, 0, nil, OPEN_EXISTING,
		FILE_FLAG_OPEN_REPARSE_POINT|FILE_FLAG_BACKUP_SEMANTICS, 0)
	if err != nil {
		return -1, err
	}
	defer CloseHandle(fd)

	rdbbuf := make([]byte, MAXIMUM_REPARSE_DATA_BUFFER_SIZE)
	var bytesReturned uint32
	err = DeviceIoControl(fd, FSCTL_GET_REPARSE_POINT, nil, 0, &rdbbuf[0], uint32(len(rdbbuf)), &bytesReturned, nil)
	if err != nil {
		return -1, err
	}

	rdb := (*reparseDataBuffer)(unsafe.Pointer(&rdbbuf[0]))
	var s string
	switch rdb.ReparseTag {
	case IO_REPARSE_TAG_SYMLINK:
		data := (*symbolicLinkReparseBuffer)(unsafe.Pointer(&rdb.reparseBuffer))
		p := (*[0xffff]uint16)(unsafe.Pointer(&data.PathBuffer[0]))
		s = UTF16ToString(p[data.PrintNameOffset/2 : (data.PrintNameLength-data.PrintNameOffset)/2])
	case IO_REPARSE_TAG_MOUNT_POINT:
		data := (*mountPointReparseBuffer)(unsafe.Pointer(&rdb.reparseBuffer))
		p := (*[0xffff]uint16)(unsafe.Pointer(&data.PathBuffer[0]))
		s = UTF16ToString(p[data.PrintNameOffset/2 : (data.PrintNameLength-data.PrintNameOffset)/2])
	default:
		// the path is not a symlink or junction but another type of reparse
		// point
		return -1, syscall.ENOENT
	}
	n = copy(buf, []byte(s))

	return n, nil
}

// GUIDFromString parses a string in the form of
// "{XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" into a GUID.
func GUIDFromString(str string) (GUID, error) {
	guid := GUID{}
	str16, err := syscall.UTF16PtrFromString(str)
	if err != nil {
		return guid, err
	}
	err = clsidFromString(str16, &guid)
	if err != nil {
		return guid, err
	}
	return guid, nil
}

// GenerateGUID creates a new random GUID.
func GenerateGUID() (GUID, error) {
	guid := GUID{}
	err := coCreateGuid(&guid)
	if err != nil {
		return guid, err
	}
	return guid, nil
}

// String returns the canonical string form of the GUID,
// in the form of "{XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}".
func (guid GUID) String() string {
	var str [100]uint16
	chars := stringFromGUID2(&guid, &str[0], int32(len(str)))
	if chars <= 1 {
		return ""
	}
	return string(utf16.Decode(str[:chars-1]))
}

// KnownFolderPath returns a well-known folder path for the current user, specified by one of
// the FOLDERID_ constants, and chosen and optionally created based on a KF_ flag.
func KnownFolderPath(folderID *KNOWNFOLDERID, flags uint32) (string, error) {
	return Token(0).KnownFolderPath(folderID, flags)
}

// KnownFolderPath returns a well-known folder path for the user token, specified by one of
// the FOLDERID_ constants, and chosen and optionally created based on a KF_ flag.
func (t Token) KnownFolderPath(folderID *KNOWNFOLDERID, flags uint32) (string, error) {
	var p *uint16
	err := shGetKnownFolderPath(folderID, flags, t, &p)
	if err != nil {
		return "", err
	}
	defer CoTaskMemFree(unsafe.Pointer(p))
	return UTF16PtrToString(p), nil
}

// RtlGetVersion returns the version of the underlying operating system, ignoring
// manifest semantics but is affected by the application compatibility layer.
func RtlGetVersion() *OsVersionInfoEx {
	info := &OsVersionInfoEx{}
	info.osVersionInfoSize = uint32(unsafe.Sizeof(*info))
	// According to documentation, this function always succeeds.
	// The function doesn't even check the validity of the
	// osVersionInfoSize member. Disassembling ntdll.dll indicates
	// that the documentation is indeed correct about that.
	_ = rtlGetVersion(info)
	return info
}

// RtlGetNtVersionNumbers returns the version of the underlying operating system,
// ignoring manifest semantics and the application compatibility layer.
func RtlGetNtVersionNumbers() (majorVersion, minorVersion, buildNumber uint32) {
	rtlGetNtVersionNumbers(&majorVersion, &minorVersion, &buildNumber)
	buildNumber &= 0xffff
	return
}

// GetProcessPreferredUILanguages retrieves the process preferred UI languages.
func GetProcessPreferredUILanguages(flags uint32) ([]string, error) {
	return getUILanguages(flags, getProcessPreferredUILanguages)
}

// GetThreadPreferredUILanguages retrieves the thread preferred UI languages for the current thread.
func GetThreadPreferredUILanguages(flags uint32) ([]string, error) {
	return getUILanguages(flags, getThreadPreferredUILanguages)
}

// GetUserPreferredUILanguages retrieves information about the user preferred UI languages.
func GetUserPreferredUILanguages(flags uint32) ([]string, error) {
	return getUILanguages(flags, getUserPreferredUILanguages)
}

// GetSystemPreferredUILanguages retrieves the system preferred UI languages.
func GetSystemPreferredUILanguages(flags uint32) ([]string, error) {
	return getUILanguages(flags, getSystemPreferredUILanguages)
}

func getUILanguages(flags uint32, f func(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) error) ([]string, error) {
	size := uint32(128)
	for {
		var numLanguages uint32
		buf := make([]uint16, size)
		err := f(flags, &numLanguages, &buf[0], &size)
		if err == ERROR_INSUFFICIENT_BUFFER {
			continue
		}
		if err != nil {
			return nil, err
		}
		buf = buf[:size]
		if numLanguages == 0 || len(buf) == 0 { // GetProcessPreferredUILanguages may return numLanguages==0 with "\0\0"
			return []string{}, nil
		}
		if buf[len(buf)-1] == 0 {
			buf = buf[:len(buf)-1] // remove terminating null
		}
		languages := make([]string, 0, numLanguages)
		from := 0
		for i, c := range buf {
			if c == 0 {
				languages = append(languages, string(utf16.Decode(buf[from:i])))
				from = i + 1
			}
		}
		return languages, nil
	}
}

func SetConsoleCursorPosition(console Handle, position Coord) error {
	return setConsoleCursorPosition(console, *((*uint32)(unsafe.Pointer(&position))))
}

func (s NTStatus) Errno() syscall.Errno {
	return rtlNtStatusToDosErrorNoTeb(s)
}

func langID(pri, sub uint16) uint32 { return uint32(sub)<<10 | uint32(pri) }

func (s NTStatus) Error() string {
	b := make([]uint16, 300)
	n, err := FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_FROM_HMODULE|FORMAT_MESSAGE_ARGUMENT_ARRAY, modntdll.Handle(), uint32(s), langID(LANG_ENGLISH, SUBLANG_ENGLISH_US), b, nil)
	if err != nil {
		return fmt.Sprintf("NTSTATUS 0x%08x", uint32(s))
	}
	// trim terminating \r and \n
	for ; n > 0 && (b[n-1] == '\n' || b[n-1] == '\r'); n-- {
	}
	return string(utf16.Decode(b[:n]))
}

// NewNTUnicodeString returns a new NTUnicodeString structure for use with native
// NT APIs that work over the NTUnicodeString type. Note that most Windows APIs
// do not use NTUnicodeString, and instead UTF16PtrFromString should be used for
// the more common *uint16 string type.
func NewNTUnicodeString(s string) (*NTUnicodeString, error) {
	var u NTUnicodeString
	s16, err := UTF16PtrFromString(s)
	if err != nil {
		return nil, err
	}
	RtlInitUnicodeString(&u, s16)
	return &u, nil
}

// Slice returns a uint16 slice that aliases the data in the NTUnicodeString.
func (s *NTUnicodeString) Slice() []uint16 {
	var slice []uint16
	hdr := (*unsafeheader.Slice)(unsafe.Pointer(&slice))
	hdr.Data = unsafe.Pointer(s.Buffer)
	hdr.Len = int(s.Length)
	hdr.Cap = int(s.MaximumLength)
	return slice
}

func (s *NTUnicodeString) String() string {
	return UTF16ToString(s.Slice())
}

// NewNTString returns a new NTString structure for use with native
// NT APIs that work over the NTString type. Note that most Windows APIs
// do not use NTString, and instead UTF16PtrFromString should be used for
// the more common *uint16 string type.
func NewNTString(s string) (*NTString, error) {
	var nts NTString
	s8, err := BytePtrFromString(s)
	if err != nil {
		return nil, err
	}
	RtlInitString(&nts, s8)
	return &nts, nil
}

// Slice returns a byte slice that aliases the data in the NTString.
func (s *NTString) Slice() []byte {
	var slice []byte
	hdr := (*unsafeheader.Slice)(unsafe.Pointer(&slice))
	hdr.Data = unsafe.Pointer(s.Buffer)
	hdr.Len = int(s.Length)
	hdr.Cap = int(s.MaximumLength)
	return slice
}

func (s *NTString) String() string {
	return ByteSliceToString(s.Slice())
}

// FindResource resolves a resource of the given name and resource type.
func FindResource(module Handle, name, resType ResourceIDOrString) (Handle, error) {
	var namePtr, resTypePtr uintptr
	var name16, resType16 *uint16
	var err error
	resolvePtr := func(i interface{}, keep **uint16) (uintptr, error) {
		switch v := i.(type) {
		case string:
			*keep, err = UTF16PtrFromString(v)
			if err != nil {
				return 0, err
			}
			return uintptr(unsafe.Pointer(*keep)), nil
		case ResourceID:
			return uintptr(v), nil
		}
		return 0, errorspkg.New("parameter must be a ResourceID or a string")
	}
	namePtr, err = resolvePtr(name, &name16)
	if err != nil {
		return 0, err
	}
	resTypePtr, err = resolvePtr(resType, &resType16)
	if err != nil {
		return 0, err
	}
	resInfo, err := findResource(module, namePtr, resTypePtr)
	runtime.KeepAlive(name16)
	runtime.KeepAlive(resType16)
	return resInfo, err
}

func LoadResourceData(module, resInfo Handle) (data []byte, err error) {
	size, err := SizeofResource(module, resInfo)
	if err != nil {
		return
	}
	resData, err := LoadResource(module, resInfo)
	if err != nil {
		return
	}
	ptr, err := LockResource(resData)
	if err != nil {
		return
	}
	h := (*unsafeheader.Slice)(unsafe.Pointer(&data))
	h.Data = unsafe.Pointer(ptr)
	h.Len = int(size)
	h.Cap = int(size)
	return
}

// PSAPI_WORKING_SET_EX_BLOCK contains extended working set information for a page.
type PSAPI_WORKING_SET_EX_BLOCK uint64

// Valid returns the validity of this page.
// If this bit is 1, the subsequent members are valid; otherwise they should be ignored.
func (b PSAPI_WORKING_SET_EX_BLOCK) Valid() bool {
	return (b & 1) == 1
}

// ShareCount is the number of processes that share this page. The maximum value of this member is 7.
func (b PSAPI_WORKING_SET_EX_BLOCK) ShareCount() uint64 {
	return b.intField(1, 3)
}

// Win32Protection is the memory protection attributes of the page. For a list of values, see
// https://docs.microsoft.com/en-us/windows/win32/memory/memory-protection-constants
func (b PSAPI_WORKING_SET_EX_BLOCK) Win32Protection() uint64 {
	return b.intField(4, 11)
}

// Shared returns the shared status of this page.
// If this bit is 1, the page can be shared.
func (b PSAPI_WORKING_SET_EX_BLOCK) Shared() bool {
	return (b & (1 << 15)) == 1
}

// Node is the NUMA node. The maximum value of this member is 63.
func (b PSAPI_WORKING_SET_EX_BLOCK) Node() uint64 {
	return b.intField(16, 6)
}

// Locked returns the locked status of this page.
// If this bit is 1, the virtual page is locked in physical memory.
func (b PSAPI_WORKING_SET_EX_BLOCK) Locked() bool {
	return (b & (1 << 22)) == 1
}

// LargePage returns the large page status of this page.
// If this bit is 1, the page is a large page.
func (b PSAPI_WORKING_SET_EX_BLOCK) LargePage() bool {
	return (b & (1 << 23)) == 1
}

// Bad returns the bad status of this page.
// If this bit is 1, the page is has been reported as bad.
func (b PSAPI_WORKING_SET_EX_BLOCK) Bad() bool {
	return (b & (1 << 31)) == 1
}

// intField extracts an integer field in the PSAPI_WORKING_SET_EX_BLOCK union.
func (b PSAPI_WORKING_SET_EX_BLOCK) intField(start, length int) uint64 {
	var mask PSAPI_WORKING_SET_EX_BLOCK
	for pos := start; pos < start+length; pos++ {
		mask |= (1 << pos)
	}

	masked := b & mask
	return uint64(masked >> start)
}

// PSAPI_WORKING_SET_EX_INFORMATION contains extended working set information for a process.
type PSAPI_WORKING_SET_EX_INFORMATION struct {
	// The virtual address.
	VirtualAddress Pointer
	// A PSAPI_WORKING_SET_EX_BLOCK union that indicates the attributes of the page at VirtualAddress.
	VirtualAttributes PSAPI_WORKING_SET_EX_BLOCK
}
  07070100000EE9000081A4000000000000000000000001645E367C00019A4E000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/types_windows.go  // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package windows

import (
	"net"
	"syscall"
	"unsafe"
)

// NTStatus corresponds with NTSTATUS, error values returned by ntdll.dll and
// other native functions.
type NTStatus uint32

const (
	// Invented values to support what package os expects.
	O_RDONLY   = 0x00000
	O_WRONLY   = 0x00001
	O_RDWR     = 0x00002
	O_CREAT    = 0x00040
	O_EXCL     = 0x00080
	O_NOCTTY   = 0x00100
	O_TRUNC    = 0x00200
	O_NONBLOCK = 0x00800
	O_APPEND   = 0x00400
	O_SYNC     = 0x01000
	O_ASYNC    = 0x02000
	O_CLOEXEC  = 0x80000
)

const (
	// More invented values for signals
	SIGHUP  = Signal(0x1)
	SIGINT  = Signal(0x2)
	SIGQUIT = Signal(0x3)
	SIGILL  = Signal(0x4)
	SIGTRAP = Signal(0x5)
	SIGABRT = Signal(0x6)
	SIGBUS  = Signal(0x7)
	SIGFPE  = Signal(0x8)
	SIGKILL = Signal(0x9)
	SIGSEGV = Signal(0xb)
	SIGPIPE = Signal(0xd)
	SIGALRM = Signal(0xe)
	SIGTERM = Signal(0xf)
)

var signals = [...]string{
	1:  "hangup",
	2:  "interrupt",
	3:  "quit",
	4:  "illegal instruction",
	5:  "trace/breakpoint trap",
	6:  "aborted",
	7:  "bus error",
	8:  "floating point exception",
	9:  "killed",
	10: "user defined signal 1",
	11: "segmentation fault",
	12: "user defined signal 2",
	13: "broken pipe",
	14: "alarm clock",
	15: "terminated",
}

const (
	FILE_READ_DATA        = 0x00000001
	FILE_READ_ATTRIBUTES  = 0x00000080
	FILE_READ_EA          = 0x00000008
	FILE_WRITE_DATA       = 0x00000002
	FILE_WRITE_ATTRIBUTES = 0x00000100
	FILE_WRITE_EA         = 0x00000010
	FILE_APPEND_DATA      = 0x00000004
	FILE_EXECUTE          = 0x00000020

	FILE_GENERIC_READ    = STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE
	FILE_GENERIC_WRITE   = STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE
	FILE_GENERIC_EXECUTE = STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES | FILE_EXECUTE | SYNCHRONIZE

	FILE_LIST_DIRECTORY = 0x00000001
	FILE_TRAVERSE       = 0x00000020

	FILE_SHARE_READ   = 0x00000001
	FILE_SHARE_WRITE  = 0x00000002
	FILE_SHARE_DELETE = 0x00000004

	FILE_ATTRIBUTE_READONLY              = 0x00000001
	FILE_ATTRIBUTE_HIDDEN                = 0x00000002
	FILE_ATTRIBUTE_SYSTEM                = 0x00000004
	FILE_ATTRIBUTE_DIRECTORY             = 0x00000010
	FILE_ATTRIBUTE_ARCHIVE               = 0x00000020
	FILE_ATTRIBUTE_DEVICE                = 0x00000040
	FILE_ATTRIBUTE_NORMAL                = 0x00000080
	FILE_ATTRIBUTE_TEMPORARY             = 0x00000100
	FILE_ATTRIBUTE_SPARSE_FILE           = 0x00000200
	FILE_ATTRIBUTE_REPARSE_POINT         = 0x00000400
	FILE_ATTRIBUTE_COMPRESSED            = 0x00000800
	FILE_ATTRIBUTE_OFFLINE               = 0x00001000
	FILE_ATTRIBUTE_NOT_CONTENT_INDEXED   = 0x00002000
	FILE_ATTRIBUTE_ENCRYPTED             = 0x00004000
	FILE_ATTRIBUTE_INTEGRITY_STREAM      = 0x00008000
	FILE_ATTRIBUTE_VIRTUAL               = 0x00010000
	FILE_ATTRIBUTE_NO_SCRUB_DATA         = 0x00020000
	FILE_ATTRIBUTE_RECALL_ON_OPEN        = 0x00040000
	FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS = 0x00400000

	INVALID_FILE_ATTRIBUTES = 0xffffffff

	CREATE_NEW        = 1
	CREATE_ALWAYS     = 2
	OPEN_EXISTING     = 3
	OPEN_ALWAYS       = 4
	TRUNCATE_EXISTING = 5

	FILE_FLAG_OPEN_REQUIRING_OPLOCK = 0x00040000
	FILE_FLAG_FIRST_PIPE_INSTANCE   = 0x00080000
	FILE_FLAG_OPEN_NO_RECALL        = 0x00100000
	FILE_FLAG_OPEN_REPARSE_POINT    = 0x00200000
	FILE_FLAG_SESSION_AWARE         = 0x00800000
	FILE_FLAG_POSIX_SEMANTICS       = 0x01000000
	FILE_FLAG_BACKUP_SEMANTICS      = 0x02000000
	FILE_FLAG_DELETE_ON_CLOSE       = 0x04000000
	FILE_FLAG_SEQUENTIAL_SCAN       = 0x08000000
	FILE_FLAG_RANDOM_ACCESS         = 0x10000000
	FILE_FLAG_NO_BUFFERING          = 0x20000000
	FILE_FLAG_OVERLAPPED            = 0x40000000
	FILE_FLAG_WRITE_THROUGH         = 0x80000000

	HANDLE_FLAG_INHERIT    = 0x00000001
	STARTF_USESTDHANDLES   = 0x00000100
	STARTF_USESHOWWINDOW   = 0x00000001
	DUPLICATE_CLOSE_SOURCE = 0x00000001
	DUPLICATE_SAME_ACCESS  = 0x00000002

	STD_INPUT_HANDLE  = -10 & (1<<32 - 1)
	STD_OUTPUT_HANDLE = -11 & (1<<32 - 1)
	STD_ERROR_HANDLE  = -12 & (1<<32 - 1)

	FILE_BEGIN   = 0
	FILE_CURRENT = 1
	FILE_END     = 2

	LANG_ENGLISH       = 0x09
	SUBLANG_ENGLISH_US = 0x01

	FORMAT_MESSAGE_ALLOCATE_BUFFER = 256
	FORMAT_MESSAGE_IGNORE_INSERTS  = 512
	FORMAT_MESSAGE_FROM_STRING     = 1024
	FORMAT_MESSAGE_FROM_HMODULE    = 2048
	FORMAT_MESSAGE_FROM_SYSTEM     = 4096
	FORMAT_MESSAGE_ARGUMENT_ARRAY  = 8192
	FORMAT_MESSAGE_MAX_WIDTH_MASK  = 255

	MAX_PATH      = 260
	MAX_LONG_PATH = 32768

	MAX_MODULE_NAME32 = 255

	MAX_COMPUTERNAME_LENGTH = 15

	MAX_DHCPV6_DUID_LENGTH = 130

	MAX_DNS_SUFFIX_STRING_LENGTH = 256

	TIME_ZONE_ID_UNKNOWN  = 0
	TIME_ZONE_ID_STANDARD = 1

	TIME_ZONE_ID_DAYLIGHT = 2
	IGNORE                = 0
	INFINITE              = 0xffffffff

	WAIT_ABANDONED = 0x00000080
	WAIT_OBJECT_0  = 0x00000000
	WAIT_FAILED    = 0xFFFFFFFF

	// Access rights for process.
	PROCESS_CREATE_PROCESS            = 0x0080
	PROCESS_CREATE_THREAD             = 0x0002
	PROCESS_DUP_HANDLE                = 0x0040
	PROCESS_QUERY_INFORMATION         = 0x0400
	PROCESS_QUERY_LIMITED_INFORMATION = 0x1000
	PROCESS_SET_INFORMATION           = 0x0200
	PROCESS_SET_QUOTA                 = 0x0100
	PROCESS_SUSPEND_RESUME            = 0x0800
	PROCESS_TERMINATE                 = 0x0001
	PROCESS_VM_OPERATION              = 0x0008
	PROCESS_VM_READ                   = 0x0010
	PROCESS_VM_WRITE                  = 0x0020

	// Access rights for thread.
	THREAD_DIRECT_IMPERSONATION      = 0x0200
	THREAD_GET_CONTEXT               = 0x0008
	THREAD_IMPERSONATE               = 0x0100
	THREAD_QUERY_INFORMATION         = 0x0040
	THREAD_QUERY_LIMITED_INFORMATION = 0x0800
	THREAD_SET_CONTEXT               = 0x0010
	THREAD_SET_INFORMATION           = 0x0020
	THREAD_SET_LIMITED_INFORMATION   = 0x0400
	THREAD_SET_THREAD_TOKEN          = 0x0080
	THREAD_SUSPEND_RESUME            = 0x0002
	THREAD_TERMINATE                 = 0x0001

	FILE_MAP_COPY    = 0x01
	FILE_MAP_WRITE   = 0x02
	FILE_MAP_READ    = 0x04
	FILE_MAP_EXECUTE = 0x20

	CTRL_C_EVENT        = 0
	CTRL_BREAK_EVENT    = 1
	CTRL_CLOSE_EVENT    = 2
	CTRL_LOGOFF_EVENT   = 5
	CTRL_SHUTDOWN_EVENT = 6

	// Windows reserves errors >= 1<<29 for application use.
	APPLICATION_ERROR = 1 << 29
)

const (
	// Process creation flags.
	CREATE_BREAKAWAY_FROM_JOB        = 0x01000000
	CREATE_DEFAULT_ERROR_MODE        = 0x04000000
	CREATE_NEW_CONSOLE               = 0x00000010
	CREATE_NEW_PROCESS_GROUP         = 0x00000200
	CREATE_NO_WINDOW                 = 0x08000000
	CREATE_PROTECTED_PROCESS         = 0x00040000
	CREATE_PRESERVE_CODE_AUTHZ_LEVEL = 0x02000000
	CREATE_SEPARATE_WOW_VDM          = 0x00000800
	CREATE_SHARED_WOW_VDM            = 0x00001000
	CREATE_SUSPENDED                 = 0x00000004
	CREATE_UNICODE_ENVIRONMENT       = 0x00000400
	DEBUG_ONLY_THIS_PROCESS          = 0x00000002
	DEBUG_PROCESS                    = 0x00000001
	DETACHED_PROCESS                 = 0x00000008
	EXTENDED_STARTUPINFO_PRESENT     = 0x00080000
	INHERIT_PARENT_AFFINITY          = 0x00010000
)

const (
	// attributes for ProcThreadAttributeList
	PROC_THREAD_ATTRIBUTE_PARENT_PROCESS    = 0x00020000
	PROC_THREAD_ATTRIBUTE_HANDLE_LIST       = 0x00020002
	PROC_THREAD_ATTRIBUTE_GROUP_AFFINITY    = 0x00030003
	PROC_THREAD_ATTRIBUTE_PREFERRED_NODE    = 0x00020004
	PROC_THREAD_ATTRIBUTE_IDEAL_PROCESSOR   = 0x00030005
	PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY = 0x00020007
	PROC_THREAD_ATTRIBUTE_UMS_THREAD        = 0x00030006
	PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL  = 0x0002000b
)

const (
	// flags for CreateToolhelp32Snapshot
	TH32CS_SNAPHEAPLIST = 0x01
	TH32CS_SNAPPROCESS  = 0x02
	TH32CS_SNAPTHREAD   = 0x04
	TH32CS_SNAPMODULE   = 0x08
	TH32CS_SNAPMODULE32 = 0x10
	TH32CS_SNAPALL      = TH32CS_SNAPHEAPLIST | TH32CS_SNAPMODULE | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD
	TH32CS_INHERIT      = 0x80000000
)

const (
	// flags for EnumProcessModulesEx
	LIST_MODULES_32BIT   = 0x01
	LIST_MODULES_64BIT   = 0x02
	LIST_MODULES_ALL     = 0x03
	LIST_MODULES_DEFAULT = 0x00
)

const (
	// filters for ReadDirectoryChangesW and FindFirstChangeNotificationW
	FILE_NOTIFY_CHANGE_FILE_NAME   = 0x001
	FILE_NOTIFY_CHANGE_DIR_NAME    = 0x002
	FILE_NOTIFY_CHANGE_ATTRIBUTES  = 0x004
	FILE_NOTIFY_CHANGE_SIZE        = 0x008
	FILE_NOTIFY_CHANGE_LAST_WRITE  = 0x010
	FILE_NOTIFY_CHANGE_LAST_ACCESS = 0x020
	FILE_NOTIFY_CHANGE_CREATION    = 0x040
	FILE_NOTIFY_CHANGE_SECURITY    = 0x100
)

const (
	// do not reorder
	FILE_ACTION_ADDED = iota + 1
	FILE_ACTION_REMOVED
	FILE_ACTION_MODIFIED
	FILE_ACTION_RENAMED_OLD_NAME
	FILE_ACTION_RENAMED_NEW_NAME
)

const (
	// wincrypt.h
	/* certenrolld_begin -- PROV_RSA_*/
	PROV_RSA_FULL      = 1
	PROV_RSA_SIG       = 2
	PROV_DSS           = 3
	PROV_FORTEZZA      = 4
	PROV_MS_EXCHANGE   = 5
	PROV_SSL           = 6
	PROV_RSA_SCHANNEL  = 12
	PROV_DSS_DH        = 13
	PROV_EC_ECDSA_SIG  = 14
	PROV_EC_ECNRA_SIG  = 15
	PROV_EC_ECDSA_FULL = 16
	PROV_EC_ECNRA_FULL = 17
	PROV_DH_SCHANNEL   = 18
	PROV_SPYRUS_LYNKS  = 20
	PROV_RNG           = 21
	PROV_INTEL_SEC     = 22
	PROV_REPLACE_OWF   = 23
	PROV_RSA_AES       = 24

	/* dwFlags definitions for CryptAcquireContext */
	CRYPT_VERIFYCONTEXT              = 0xF0000000
	CRYPT_NEWKEYSET                  = 0x00000008
	CRYPT_DELETEKEYSET               = 0x00000010
	CRYPT_MACHINE_KEYSET             = 0x00000020
	CRYPT_SILENT                     = 0x00000040
	CRYPT_DEFAULT_CONTAINER_OPTIONAL = 0x00000080

	/* Flags for PFXImportCertStore */
	CRYPT_EXPORTABLE                   = 0x00000001
	CRYPT_USER_PROTECTED               = 0x00000002
	CRYPT_USER_KEYSET                  = 0x00001000
	PKCS12_PREFER_CNG_KSP              = 0x00000100
	PKCS12_ALWAYS_CNG_KSP              = 0x00000200
	PKCS12_ALLOW_OVERWRITE_KEY         = 0x00004000
	PKCS12_NO_PERSIST_KEY              = 0x00008000
	PKCS12_INCLUDE_EXTENDED_PROPERTIES = 0x00000010

	/* Flags for CryptAcquireCertificatePrivateKey */
	CRYPT_ACQUIRE_CACHE_FLAG             = 0x00000001
	CRYPT_ACQUIRE_USE_PROV_INFO_FLAG     = 0x00000002
	CRYPT_ACQUIRE_COMPARE_KEY_FLAG       = 0x00000004
	CRYPT_ACQUIRE_NO_HEALING             = 0x00000008
	CRYPT_ACQUIRE_SILENT_FLAG            = 0x00000040
	CRYPT_ACQUIRE_WINDOW_HANDLE_FLAG     = 0x00000080
	CRYPT_ACQUIRE_NCRYPT_KEY_FLAGS_MASK  = 0x00070000
	CRYPT_ACQUIRE_ALLOW_NCRYPT_KEY_FLAG  = 0x00010000
	CRYPT_ACQUIRE_PREFER_NCRYPT_KEY_FLAG = 0x00020000
	CRYPT_ACQUIRE_ONLY_NCRYPT_KEY_FLAG   = 0x00040000

	/* pdwKeySpec for CryptAcquireCertificatePrivateKey */
	AT_KEYEXCHANGE       = 1
	AT_SIGNATURE         = 2
	CERT_NCRYPT_KEY_SPEC = 0xFFFFFFFF

	/* Default usage match type is AND with value zero */
	USAGE_MATCH_TYPE_AND = 0
	USAGE_MATCH_TYPE_OR  = 1

	/* msgAndCertEncodingType values for CertOpenStore function */
	X509_ASN_ENCODING   = 0x00000001
	PKCS_7_ASN_ENCODING = 0x00010000

	/* storeProvider values for CertOpenStore function */
	CERT_STORE_PROV_MSG               = 1
	CERT_STORE_PROV_MEMORY            = 2
	CERT_STORE_PROV_FILE              = 3
	CERT_STORE_PROV_REG               = 4
	CERT_STORE_PROV_PKCS7             = 5
	CERT_STORE_PROV_SERIALIZED        = 6
	CERT_STORE_PROV_FILENAME_A        = 7
	CERT_STORE_PROV_FILENAME_W        = 8
	CERT_STORE_PROV_FILENAME          = CERT_STORE_PROV_FILENAME_W
	CERT_STORE_PROV_SYSTEM_A          = 9
	CERT_STORE_PROV_SYSTEM_W          = 10
	CERT_STORE_PROV_SYSTEM            = CERT_STORE_PROV_SYSTEM_W
	CERT_STORE_PROV_COLLECTION        = 11
	CERT_STORE_PROV_SYSTEM_REGISTRY_A = 12
	CERT_STORE_PROV_SYSTEM_REGISTRY_W = 13
	CERT_STORE_PROV_SYSTEM_REGISTRY   = CERT_STORE_PROV_SYSTEM_REGISTRY_W
	CERT_STORE_PROV_PHYSICAL_W        = 14
	CERT_STORE_PROV_PHYSICAL          = CERT_STORE_PROV_PHYSICAL_W
	CERT_STORE_PROV_SMART_CARD_W      = 15
	CERT_STORE_PROV_SMART_CARD        = CERT_STORE_PROV_SMART_CARD_W
	CERT_STORE_PROV_LDAP_W            = 16
	CERT_STORE_PROV_LDAP              = CERT_STORE_PROV_LDAP_W
	CERT_STORE_PROV_PKCS12            = 17

	/* store characteristics (low WORD of flag) for CertOpenStore function */
	CERT_STORE_NO_CRYPT_RELEASE_FLAG            = 0x00000001
	CERT_STORE_SET_LOCALIZED_NAME_FLAG          = 0x00000002
	CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG = 0x00000004
	CERT_STORE_DELETE_FLAG                      = 0x00000010
	CERT_STORE_UNSAFE_PHYSICAL_FLAG             = 0x00000020
	CERT_STORE_SHARE_STORE_FLAG                 = 0x00000040
	CERT_STORE_SHARE_CONTEXT_FLAG               = 0x00000080
	CERT_STORE_MANIFOLD_FLAG                    = 0x00000100
	CERT_STORE_ENUM_ARCHIVED_FLAG               = 0x00000200
	CERT_STORE_UPDATE_KEYID_FLAG                = 0x00000400
	CERT_STORE_BACKUP_RESTORE_FLAG              = 0x00000800
	CERT_STORE_MAXIMUM_ALLOWED_FLAG             = 0x00001000
	CERT_STORE_CREATE_NEW_FLAG                  = 0x00002000
	CERT_STORE_OPEN_EXISTING_FLAG               = 0x00004000
	CERT_STORE_READONLY_FLAG                    = 0x00008000

	/* store locations (high WORD of flag) for CertOpenStore function */
	CERT_SYSTEM_STORE_CURRENT_USER               = 0x00010000
	CERT_SYSTEM_STORE_LOCAL_MACHINE              = 0x00020000
	CERT_SYSTEM_STORE_CURRENT_SERVICE            = 0x00040000
	CERT_SYSTEM_STORE_SERVICES                   = 0x00050000
	CERT_SYSTEM_STORE_USERS                      = 0x00060000
	CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY  = 0x00070000
	CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY = 0x00080000
	CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE   = 0x00090000
	CERT_SYSTEM_STORE_UNPROTECTED_FLAG           = 0x40000000
	CERT_SYSTEM_STORE_RELOCATE_FLAG              = 0x80000000

	/* Miscellaneous high-WORD flags for CertOpenStore function */
	CERT_REGISTRY_STORE_REMOTE_FLAG      = 0x00010000
	CERT_REGISTRY_STORE_SERIALIZED_FLAG  = 0x00020000
	CERT_REGISTRY_STORE_ROAMING_FLAG     = 0x00040000
	CERT_REGISTRY_STORE_MY_IE_DIRTY_FLAG = 0x00080000
	CERT_REGISTRY_STORE_LM_GPT_FLAG      = 0x01000000
	CERT_REGISTRY_STORE_CLIENT_GPT_FLAG  = 0x80000000
	CERT_FILE_STORE_COMMIT_ENABLE_FLAG   = 0x00010000
	CERT_LDAP_STORE_SIGN_FLAG            = 0x00010000
	CERT_LDAP_STORE_AREC_EXCLUSIVE_FLAG  = 0x00020000
	CERT_LDAP_STORE_OPENED_FLAG          = 0x00040000
	CERT_LDAP_STORE_UNBIND_FLAG          = 0x00080000

	/* addDisposition values for CertAddCertificateContextToStore function */
	CERT_STORE_ADD_NEW                                 = 1
	CERT_STORE_ADD_USE_EXISTING                        = 2
	CERT_STORE_ADD_REPLACE_EXISTING                    = 3
	CERT_STORE_ADD_ALWAYS                              = 4
	CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES = 5
	CERT_STORE_ADD_NEWER                               = 6
	CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES            = 7

	/* ErrorStatus values for CertTrustStatus struct */
	CERT_TRUST_NO_ERROR                          = 0x00000000
	CERT_TRUST_IS_NOT_TIME_VALID                 = 0x00000001
	CERT_TRUST_IS_REVOKED                        = 0x00000004
	CERT_TRUST_IS_NOT_SIGNATURE_VALID            = 0x00000008
	CERT_TRUST_IS_NOT_VALID_FOR_USAGE            = 0x00000010
	CERT_TRUST_IS_UNTRUSTED_ROOT                 = 0x00000020
	CERT_TRUST_REVOCATION_STATUS_UNKNOWN         = 0x00000040
	CERT_TRUST_IS_CYCLIC                         = 0x00000080
	CERT_TRUST_INVALID_EXTENSION                 = 0x00000100
	CERT_TRUST_INVALID_POLICY_CONSTRAINTS        = 0x00000200
	CERT_TRUST_INVALID_BASIC_CONSTRAINTS         = 0x00000400
	CERT_TRUST_INVALID_NAME_CONSTRAINTS          = 0x00000800
	CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT = 0x00001000
	CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT   = 0x00002000
	CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT = 0x00004000
	CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT      = 0x00008000
	CERT_TRUST_IS_PARTIAL_CHAIN                  = 0x00010000
	CERT_TRUST_CTL_IS_NOT_TIME_VALID             = 0x00020000
	CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID        = 0x00040000
	CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE        = 0x00080000
	CERT_TRUST_HAS_WEAK_SIGNATURE                = 0x00100000
	CERT_TRUST_IS_OFFLINE_REVOCATION             = 0x01000000
	CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY          = 0x02000000
	CERT_TRUST_IS_EXPLICIT_DISTRUST              = 0x04000000
	CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT    = 0x08000000

	/* InfoStatus values for CertTrustStatus struct */
	CERT_TRUST_HAS_EXACT_MATCH_ISSUER        = 0x00000001
	CERT_TRUST_HAS_KEY_MATCH_ISSUER          = 0x00000002
	CERT_TRUST_HAS_NAME_MATCH_ISSUER         = 0x00000004
	CERT_TRUST_IS_SELF_SIGNED                = 0x00000008
	CERT_TRUST_HAS_PREFERRED_ISSUER          = 0x00000100
	CERT_TRUST_HAS_ISSUANCE_CHAIN_POLICY     = 0x00000400
	CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS    = 0x00000400
	CERT_TRUST_IS_PEER_TRUSTED               = 0x00000800
	CERT_TRUST_HAS_CRL_VALIDITY_EXTENDED     = 0x00001000
	CERT_TRUST_IS_FROM_EXCLUSIVE_TRUST_STORE = 0x00002000
	CERT_TRUST_IS_CA_TRUSTED                 = 0x00004000
	CERT_TRUST_IS_COMPLEX_CHAIN              = 0x00010000

	/* Certificate Information Flags */
	CERT_INFO_VERSION_FLAG                 = 1
	CERT_INFO_SERIAL_NUMBER_FLAG           = 2
	CERT_INFO_SIGNATURE_ALGORITHM_FLAG     = 3
	CERT_INFO_ISSUER_FLAG                  = 4
	CERT_INFO_NOT_BEFORE_FLAG              = 5
	CERT_INFO_NOT_AFTER_FLAG               = 6
	CERT_INFO_SUBJECT_FLAG                 = 7
	CERT_INFO_SUBJECT_PUBLIC_KEY_INFO_FLAG = 8
	CERT_INFO_ISSUER_UNIQUE_ID_FLAG        = 9
	CERT_INFO_SUBJECT_UNIQUE_ID_FLAG       = 10
	CERT_INFO_EXTENSION_FLAG               = 11

	/* dwFindType for CertFindCertificateInStore  */
	CERT_COMPARE_MASK                     = 0xFFFF
	CERT_COMPARE_SHIFT                    = 16
	CERT_COMPARE_ANY                      = 0
	CERT_COMPARE_SHA1_HASH                = 1
	CERT_COMPARE_NAME                     = 2
	CERT_COMPARE_ATTR                     = 3
	CERT_COMPARE_MD5_HASH                 = 4
	CERT_COMPARE_PROPERTY                 = 5
	CERT_COMPARE_PUBLIC_KEY               = 6
	CERT_COMPARE_HASH                     = CERT_COMPARE_SHA1_HASH
	CERT_COMPARE_NAME_STR_A               = 7
	CERT_COMPARE_NAME_STR_W               = 8
	CERT_COMPARE_KEY_SPEC                 = 9
	CERT_COMPARE_ENHKEY_USAGE             = 10
	CERT_COMPARE_CTL_USAGE                = CERT_COMPARE_ENHKEY_USAGE
	CERT_COMPARE_SUBJECT_CERT             = 11
	CERT_COMPARE_ISSUER_OF                = 12
	CERT_COMPARE_EXISTING                 = 13
	CERT_COMPARE_SIGNATURE_HASH           = 14
	CERT_COMPARE_KEY_IDENTIFIER           = 15
	CERT_COMPARE_CERT_ID                  = 16
	CERT_COMPARE_CROSS_CERT_DIST_POINTS   = 17
	CERT_COMPARE_PUBKEY_MD5_HASH          = 18
	CERT_COMPARE_SUBJECT_INFO_ACCESS      = 19
	CERT_COMPARE_HASH_STR                 = 20
	CERT_COMPARE_HAS_PRIVATE_KEY          = 21
	CERT_FIND_ANY                         = (CERT_COMPARE_ANY << CERT_COMPARE_SHIFT)
	CERT_FIND_SHA1_HASH                   = (CERT_COMPARE_SHA1_HASH << CERT_COMPARE_SHIFT)
	CERT_FIND_MD5_HASH                    = (CERT_COMPARE_MD5_HASH << CERT_COMPARE_SHIFT)
	CERT_FIND_SIGNATURE_HASH              = (CERT_COMPARE_SIGNATURE_HASH << CERT_COMPARE_SHIFT)
	CERT_FIND_KEY_IDENTIFIER              = (CERT_COMPARE_KEY_IDENTIFIER << CERT_COMPARE_SHIFT)
	CERT_FIND_HASH                        = CERT_FIND_SHA1_HASH
	CERT_FIND_PROPERTY                    = (CERT_COMPARE_PROPERTY << CERT_COMPARE_SHIFT)
	CERT_FIND_PUBLIC_KEY                  = (CERT_COMPARE_PUBLIC_KEY << CERT_COMPARE_SHIFT)
	CERT_FIND_SUBJECT_NAME                = (CERT_COMPARE_NAME<<CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
	CERT_FIND_SUBJECT_ATTR                = (CERT_COMPARE_ATTR<<CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
	CERT_FIND_ISSUER_NAME                 = (CERT_COMPARE_NAME<<CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
	CERT_FIND_ISSUER_ATTR                 = (CERT_COMPARE_ATTR<<CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
	CERT_FIND_SUBJECT_STR_A               = (CERT_COMPARE_NAME_STR_A<<CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
	CERT_FIND_SUBJECT_STR_W               = (CERT_COMPARE_NAME_STR_W<<CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
	CERT_FIND_SUBJECT_STR                 = CERT_FIND_SUBJECT_STR_W
	CERT_FIND_ISSUER_STR_A                = (CERT_COMPARE_NAME_STR_A<<CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
	CERT_FIND_ISSUER_STR_W                = (CERT_COMPARE_NAME_STR_W<<CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
	CERT_FIND_ISSUER_STR                  = CERT_FIND_ISSUER_STR_W
	CERT_FIND_KEY_SPEC                    = (CERT_COMPARE_KEY_SPEC << CERT_COMPARE_SHIFT)
	CERT_FIND_ENHKEY_USAGE                = (CERT_COMPARE_ENHKEY_USAGE << CERT_COMPARE_SHIFT)
	CERT_FIND_CTL_USAGE                   = CERT_FIND_ENHKEY_USAGE
	CERT_FIND_SUBJECT_CERT                = (CERT_COMPARE_SUBJECT_CERT << CERT_COMPARE_SHIFT)
	CERT_FIND_ISSUER_OF                   = (CERT_COMPARE_ISSUER_OF << CERT_COMPARE_SHIFT)
	CERT_FIND_EXISTING                    = (CERT_COMPARE_EXISTING << CERT_COMPARE_SHIFT)
	CERT_FIND_CERT_ID                     = (CERT_COMPARE_CERT_ID << CERT_COMPARE_SHIFT)
	CERT_FIND_CROSS_CERT_DIST_POINTS      = (CERT_COMPARE_CROSS_CERT_DIST_POINTS << CERT_COMPARE_SHIFT)
	CERT_FIND_PUBKEY_MD5_HASH             = (CERT_COMPARE_PUBKEY_MD5_HASH << CERT_COMPARE_SHIFT)
	CERT_FIND_SUBJECT_INFO_ACCESS         = (CERT_COMPARE_SUBJECT_INFO_ACCESS << CERT_COMPARE_SHIFT)
	CERT_FIND_HASH_STR                    = (CERT_COMPARE_HASH_STR << CERT_COMPARE_SHIFT)
	CERT_FIND_HAS_PRIVATE_KEY             = (CERT_COMPARE_HAS_PRIVATE_KEY << CERT_COMPARE_SHIFT)
	CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG  = 0x1
	CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG  = 0x2
	CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG = 0x4
	CERT_FIND_NO_ENHKEY_USAGE_FLAG        = 0x8
	CERT_FIND_OR_ENHKEY_USAGE_FLAG        = 0x10
	CERT_FIND_VALID_ENHKEY_USAGE_FLAG     = 0x20
	CERT_FIND_OPTIONAL_CTL_USAGE_FLAG     = CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG
	CERT_FIND_EXT_ONLY_CTL_USAGE_FLAG     = CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG
	CERT_FIND_PROP_ONLY_CTL_USAGE_FLAG    = CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG
	CERT_FIND_NO_CTL_USAGE_FLAG           = CERT_FIND_NO_ENHKEY_USAGE_FLAG
	CERT_FIND_OR_CTL_USAGE_FLAG           = CERT_FIND_OR_ENHKEY_USAGE_FLAG
	CERT_FIND_VALID_CTL_USAGE_FLAG        = CERT_FIND_VALID_ENHKEY_USAGE_FLAG

	/* policyOID values for CertVerifyCertificateChainPolicy function */
	CERT_CHAIN_POLICY_BASE              = 1
	CERT_CHAIN_POLICY_AUTHENTICODE      = 2
	CERT_CHAIN_POLICY_AUTHENTICODE_TS   = 3
	CERT_CHAIN_POLICY_SSL               = 4
	CERT_CHAIN_POLICY_BASIC_CONSTRAINTS = 5
	CERT_CHAIN_POLICY_NT_AUTH           = 6
	CERT_CHAIN_POLICY_MICROSOFT_ROOT    = 7
	CERT_CHAIN_POLICY_EV                = 8
	CERT_CHAIN_POLICY_SSL_F12           = 9

	/* flag for dwFindType CertFindChainInStore  */
	CERT_CHAIN_FIND_BY_ISSUER = 1

	/* dwFindFlags for CertFindChainInStore when dwFindType == CERT_CHAIN_FIND_BY_ISSUER */
	CERT_CHAIN_FIND_BY_ISSUER_COMPARE_KEY_FLAG    = 0x0001
	CERT_CHAIN_FIND_BY_ISSUER_COMPLEX_CHAIN_FLAG  = 0x0002
	CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_URL_FLAG = 0x0004
	CERT_CHAIN_FIND_BY_ISSUER_LOCAL_MACHINE_FLAG  = 0x0008
	CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG         = 0x4000
	CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_FLAG     = 0x8000

	/* Certificate Store close flags */
	CERT_CLOSE_STORE_FORCE_FLAG = 0x00000001
	CERT_CLOSE_STORE_CHECK_FLAG = 0x00000002

	/* CryptQueryObject object type */
	CERT_QUERY_OBJECT_FILE = 1
	CERT_QUERY_OBJECT_BLOB = 2

	/* CryptQueryObject content type flags */
	CERT_QUERY_CONTENT_CERT                    = 1
	CERT_QUERY_CONTENT_CTL                     = 2
	CERT_QUERY_CONTENT_CRL                     = 3
	CERT_QUERY_CONTENT_SERIALIZED_STORE        = 4
	CERT_QUERY_CONTENT_SERIALIZED_CERT         = 5
	CERT_QUERY_CONTENT_SERIALIZED_CTL          = 6
	CERT_QUERY_CONTENT_SERIALIZED_CRL          = 7
	CERT_QUERY_CONTENT_PKCS7_SIGNED            = 8
	CERT_QUERY_CONTENT_PKCS7_UNSIGNED          = 9
	CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED      = 10
	CERT_QUERY_CONTENT_PKCS10                  = 11
	CERT_QUERY_CONTENT_PFX                     = 12
	CERT_QUERY_CONTENT_CERT_PAIR               = 13
	CERT_QUERY_CONTENT_PFX_AND_LOAD            = 14
	CERT_QUERY_CONTENT_FLAG_CERT               = (1 << CERT_QUERY_CONTENT_CERT)
	CERT_QUERY_CONTENT_FLAG_CTL                = (1 << CERT_QUERY_CONTENT_CTL)
	CERT_QUERY_CONTENT_FLAG_CRL                = (1 << CERT_QUERY_CONTENT_CRL)
	CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE   = (1 << CERT_QUERY_CONTENT_SERIALIZED_STORE)
	CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT    = (1 << CERT_QUERY_CONTENT_SERIALIZED_CERT)
	CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL     = (1 << CERT_QUERY_CONTENT_SERIALIZED_CTL)
	CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL     = (1 << CERT_QUERY_CONTENT_SERIALIZED_CRL)
	CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED       = (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED)
	CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED     = (1 << CERT_QUERY_CONTENT_PKCS7_UNSIGNED)
	CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED = (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED)
	CERT_QUERY_CONTENT_FLAG_PKCS10             = (1 << CERT_QUERY_CONTENT_PKCS10)
	CERT_QUERY_CONTENT_FLAG_PFX                = (1 << CERT_QUERY_CONTENT_PFX)
	CERT_QUERY_CONTENT_FLAG_CERT_PAIR          = (1 << CERT_QUERY_CONTENT_CERT_PAIR)
	CERT_QUERY_CONTENT_FLAG_PFX_AND_LOAD       = (1 << CERT_QUERY_CONTENT_PFX_AND_LOAD)
	CERT_QUERY_CONTENT_FLAG_ALL                = (CERT_QUERY_CONTENT_FLAG_CERT | CERT_QUERY_CONTENT_FLAG_CTL | CERT_QUERY_CONTENT_FLAG_CRL | CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED | CERT_QUERY_CONTENT_FLAG_PKCS10 | CERT_QUERY_CONTENT_FLAG_PFX | CERT_QUERY_CONTENT_FLAG_CERT_PAIR)
	CERT_QUERY_CONTENT_FLAG_ALL_ISSUER_CERT    = (CERT_QUERY_CONTENT_FLAG_CERT | CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED)

	/* CryptQueryObject format type flags */
	CERT_QUERY_FORMAT_BINARY                     = 1
	CERT_QUERY_FORMAT_BASE64_ENCODED             = 2
	CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED      = 3
	CERT_QUERY_FORMAT_FLAG_BINARY                = (1 << CERT_QUERY_FORMAT_BINARY)
	CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED        = (1 << CERT_QUERY_FORMAT_BASE64_ENCODED)
	CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED = (1 << CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED)
	CERT_QUERY_FORMAT_FLAG_ALL                   = (CERT_QUERY_FORMAT_FLAG_BINARY | CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED | CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED)

	/* CertGetNameString name types */
	CERT_NAME_EMAIL_TYPE            = 1
	CERT_NAME_RDN_TYPE              = 2
	CERT_NAME_ATTR_TYPE             = 3
	CERT_NAME_SIMPLE_DISPLAY_TYPE   = 4
	CERT_NAME_FRIENDLY_DISPLAY_TYPE = 5
	CERT_NAME_DNS_TYPE              = 6
	CERT_NAME_URL_TYPE              = 7
	CERT_NAME_UPN_TYPE              = 8

	/* CertGetNameString flags */
	CERT_NAME_ISSUER_FLAG              = 0x1
	CERT_NAME_DISABLE_IE4_UTF8_FLAG    = 0x10000
	CERT_NAME_SEARCH_ALL_NAMES_FLAG    = 0x2
	CERT_NAME_STR_ENABLE_PUNYCODE_FLAG = 0x00200000

	/* AuthType values for SSLExtraCertChainPolicyPara struct */
	AUTHTYPE_CLIENT = 1
	AUTHTYPE_SERVER = 2

	/* Checks values for SSLExtraCertChainPolicyPara struct */
	SECURITY_FLAG_IGNORE_REVOCATION        = 0x00000080
	SECURITY_FLAG_IGNORE_UNKNOWN_CA        = 0x00000100
	SECURITY_FLAG_IGNORE_WRONG_USAGE       = 0x00000200
	SECURITY_FLAG_IGNORE_CERT_CN_INVALID   = 0x00001000
	SECURITY_FLAG_IGNORE_CERT_DATE_INVALID = 0x00002000

	/* Flags for Crypt[Un]ProtectData */
	CRYPTPROTECT_UI_FORBIDDEN      = 0x1
	CRYPTPROTECT_LOCAL_MACHINE     = 0x4
	CRYPTPROTECT_CRED_SYNC         = 0x8
	CRYPTPROTECT_AUDIT             = 0x10
	CRYPTPROTECT_NO_RECOVERY       = 0x20
	CRYPTPROTECT_VERIFY_PROTECTION = 0x40
	CRYPTPROTECT_CRED_REGENERATE   = 0x80

	/* Flags for CryptProtectPromptStruct */
	CRYPTPROTECT_PROMPT_ON_UNPROTECT   = 1
	CRYPTPROTECT_PROMPT_ON_PROTECT     = 2
	CRYPTPROTECT_PROMPT_RESERVED       = 4
	CRYPTPROTECT_PROMPT_STRONG         = 8
	CRYPTPROTECT_PROMPT_REQUIRE_STRONG = 16
)

const (
	// flags for SetErrorMode
	SEM_FAILCRITICALERRORS     = 0x0001
	SEM_NOALIGNMENTFAULTEXCEPT = 0x0004
	SEM_NOGPFAULTERRORBOX      = 0x0002
	SEM_NOOPENFILEERRORBOX     = 0x8000
)

const (
	// Priority class.
	ABOVE_NORMAL_PRIORITY_CLASS   = 0x00008000
	BELOW_NORMAL_PRIORITY_CLASS   = 0x00004000
	HIGH_PRIORITY_CLASS           = 0x00000080
	IDLE_PRIORITY_CLASS           = 0x00000040
	NORMAL_PRIORITY_CLASS         = 0x00000020
	PROCESS_MODE_BACKGROUND_BEGIN = 0x00100000
	PROCESS_MODE_BACKGROUND_END   = 0x00200000
	REALTIME_PRIORITY_CLASS       = 0x00000100
)

/* wintrust.h constants for WinVerifyTrustEx */
const (
	WTD_UI_ALL    = 1
	WTD_UI_NONE   = 2
	WTD_UI_NOBAD  = 3
	WTD_UI_NOGOOD = 4

	WTD_REVOKE_NONE       = 0
	WTD_REVOKE_WHOLECHAIN = 1

	WTD_CHOICE_FILE    = 1
	WTD_CHOICE_CATALOG = 2
	WTD_CHOICE_BLOB    = 3
	WTD_CHOICE_SIGNER  = 4
	WTD_CHOICE_CERT    = 5

	WTD_STATEACTION_IGNORE           = 0x00000000
	WTD_STATEACTION_VERIFY           = 0x00000001
	WTD_STATEACTION_CLOSE            = 0x00000002
	WTD_STATEACTION_AUTO_CACHE       = 0x00000003
	WTD_STATEACTION_AUTO_CACHE_FLUSH = 0x00000004

	WTD_USE_IE4_TRUST_FLAG                  = 0x1
	WTD_NO_IE4_CHAIN_FLAG                   = 0x2
	WTD_NO_POLICY_USAGE_FLAG                = 0x4
	WTD_REVOCATION_CHECK_NONE               = 0x10
	WTD_REVOCATION_CHECK_END_CERT           = 0x20
	WTD_REVOCATION_CHECK_CHAIN              = 0x40
	WTD_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT = 0x80
	WTD_SAFER_FLAG                          = 0x100
	WTD_HASH_ONLY_FLAG                      = 0x200
	WTD_USE_DEFAULT_OSVER_CHECK             = 0x400
	WTD_LIFETIME_SIGNING_FLAG               = 0x800
	WTD_CACHE_ONLY_URL_RETRIEVAL            = 0x1000
	WTD_DISABLE_MD2_MD4                     = 0x2000
	WTD_MOTW                                = 0x4000

	WTD_UICONTEXT_EXECUTE = 0
	WTD_UICONTEXT_INSTALL = 1
)

var (
	OID_PKIX_KP_SERVER_AUTH = []byte("1.3.6.1.5.5.7.3.1\x00")
	OID_SERVER_GATED_CRYPTO = []byte("1.3.6.1.4.1.311.10.3.3\x00")
	OID_SGC_NETSCAPE        = []byte("2.16.840.1.113730.4.1\x00")

	WINTRUST_ACTION_GENERIC_VERIFY_V2 = GUID{
		Data1: 0xaac56b,
		Data2: 0xcd44,
		Data3: 0x11d0,
		Data4: [8]byte{0x8c, 0xc2, 0x0, 0xc0, 0x4f, 0xc2, 0x95, 0xee},
	}
)

// Pointer represents a pointer to an arbitrary Windows type.
//
// Pointer-typed fields may point to one of many different types. It's
// up to the caller to provide a pointer to the appropriate type, cast
// to Pointer. The caller must obey the unsafe.Pointer rules while
// doing so.
type Pointer *struct{}

// Invented values to support what package os expects.
type Timeval struct {
	Sec  int32
	Usec int32
}

func (tv *Timeval) Nanoseconds() int64 {
	return (int64(tv.Sec)*1e6 + int64(tv.Usec)) * 1e3
}

func NsecToTimeval(nsec int64) (tv Timeval) {
	tv.Sec = int32(nsec / 1e9)
	tv.Usec = int32(nsec % 1e9 / 1e3)
	return
}

type Overlapped struct {
	Internal     uintptr
	InternalHigh uintptr
	Offset       uint32
	OffsetHigh   uint32
	HEvent       Handle
}

type FileNotifyInformation struct {
	NextEntryOffset uint32
	Action          uint32
	FileNameLength  uint32
	FileName        uint16
}

type Filetime struct {
	LowDateTime  uint32
	HighDateTime uint32
}

// Nanoseconds returns Filetime ft in nanoseconds
// since Epoch (00:00:00 UTC, January 1, 1970).
func (ft *Filetime) Nanoseconds() int64 {
	// 100-nanosecond intervals since January 1, 1601
	nsec := int64(ft.HighDateTime)<<32 + int64(ft.LowDateTime)
	// change starting time to the Epoch (00:00:00 UTC, January 1, 1970)
	nsec -= 116444736000000000
	// convert into nanoseconds
	nsec *= 100
	return nsec
}

func NsecToFiletime(nsec int64) (ft Filetime) {
	// convert into 100-nanosecond
	nsec /= 100
	// change starting time to January 1, 1601
	nsec += 116444736000000000
	// split into high / low
	ft.LowDateTime = uint32(nsec & 0xffffffff)
	ft.HighDateTime = uint32(nsec >> 32 & 0xffffffff)
	return ft
}

type Win32finddata struct {
	FileAttributes    uint32
	CreationTime      Filetime
	LastAccessTime    Filetime
	LastWriteTime     Filetime
	FileSizeHigh      uint32
	FileSizeLow       uint32
	Reserved0         uint32
	Reserved1         uint32
	FileName          [MAX_PATH - 1]uint16
	AlternateFileName [13]uint16
}

// This is the actual system call structure.
// Win32finddata is what we committed to in Go 1.
type win32finddata1 struct {
	FileAttributes    uint32
	CreationTime      Filetime
	LastAccessTime    Filetime
	LastWriteTime     Filetime
	FileSizeHigh      uint32
	FileSizeLow       uint32
	Reserved0         uint32
	Reserved1         uint32
	FileName          [MAX_PATH]uint16
	AlternateFileName [14]uint16

	// The Microsoft documentation for this struct¹ describes three additional
	// fields: dwFileType, dwCreatorType, and wFinderFlags. However, those fields
	// are empirically only present in the macOS port of the Win32 API,² and thus
	// not needed for binaries built for Windows.
	//
	// ¹ https://docs.microsoft.com/en-us/windows/win32/api/minwinbase/ns-minwinbase-win32_find_dataw describe
	// ² https://golang.org/issue/42637#issuecomment-760715755.
}

func copyFindData(dst *Win32finddata, src *win32finddata1) {
	dst.FileAttributes = src.FileAttributes
	dst.CreationTime = src.CreationTime
	dst.LastAccessTime = src.LastAccessTime
	dst.LastWriteTime = src.LastWriteTime
	dst.FileSizeHigh = src.FileSizeHigh
	dst.FileSizeLow = src.FileSizeLow
	dst.Reserved0 = src.Reserved0
	dst.Reserved1 = src.Reserved1

	// The src is 1 element bigger than dst, but it must be NUL.
	copy(dst.FileName[:], src.FileName[:])
	copy(dst.AlternateFileName[:], src.AlternateFileName[:])
}

type ByHandleFileInformation struct {
	FileAttributes     uint32
	CreationTime       Filetime
	LastAccessTime     Filetime
	LastWriteTime      Filetime
	VolumeSerialNumber uint32
	FileSizeHigh       uint32
	FileSizeLow        uint32
	NumberOfLinks      uint32
	FileIndexHigh      uint32
	FileIndexLow       uint32
}

const (
	GetFileExInfoStandard = 0
	GetFileExMaxInfoLevel = 1
)

type Win32FileAttributeData struct {
	FileAttributes uint32
	CreationTime   Filetime
	LastAccessTime Filetime
	LastWriteTime  Filetime
	FileSizeHigh   uint32
	FileSizeLow    uint32
}

// ShowWindow constants
const (
	// winuser.h
	SW_HIDE            = 0
	SW_NORMAL          = 1
	SW_SHOWNORMAL      = 1
	SW_SHOWMINIMIZED   = 2
	SW_SHOWMAXIMIZED   = 3
	SW_MAXIMIZE        = 3
	SW_SHOWNOACTIVATE  = 4
	SW_SHOW            = 5
	SW_MINIMIZE        = 6
	SW_SHOWMINNOACTIVE = 7
	SW_SHOWNA          = 8
	SW_RESTORE         = 9
	SW_SHOWDEFAULT     = 10
	SW_FORCEMINIMIZE   = 11
)

type StartupInfo struct {
	Cb            uint32
	_             *uint16
	Desktop       *uint16
	Title         *uint16
	X             uint32
	Y             uint32
	XSize         uint32
	YSize         uint32
	XCountChars   uint32
	YCountChars   uint32
	FillAttribute uint32
	Flags         uint32
	ShowWindow    uint16
	_             uint16
	_             *byte
	StdInput      Handle
	StdOutput     Handle
	StdErr        Handle
}

type StartupInfoEx struct {
	StartupInfo
	ProcThreadAttributeList *ProcThreadAttributeList
}

// ProcThreadAttributeList is a placeholder type to represent a PROC_THREAD_ATTRIBUTE_LIST.
//
// To create a *ProcThreadAttributeList, use NewProcThreadAttributeList, update
// it with ProcThreadAttributeListContainer.Update, free its memory using
// ProcThreadAttributeListContainer.Delete, and access the list itself using
// ProcThreadAttributeListContainer.List.
type ProcThreadAttributeList struct{}

type ProcThreadAttributeListContainer struct {
	data     *ProcThreadAttributeList
	pointers []unsafe.Pointer
}

type ProcessInformation struct {
	Process   Handle
	Thread    Handle
	ProcessId uint32
	ThreadId  uint32
}

type ProcessEntry32 struct {
	Size            uint32
	Usage           uint32
	ProcessID       uint32
	DefaultHeapID   uintptr
	ModuleID        uint32
	Threads         uint32
	ParentProcessID uint32
	PriClassBase    int32
	Flags           uint32
	ExeFile         [MAX_PATH]uint16
}

type ThreadEntry32 struct {
	Size           uint32
	Usage          uint32
	ThreadID       uint32
	OwnerProcessID uint32
	BasePri        int32
	DeltaPri       int32
	Flags          uint32
}

type ModuleEntry32 struct {
	Size         uint32
	ModuleID     uint32
	ProcessID    uint32
	GlblcntUsage uint32
	ProccntUsage uint32
	ModBaseAddr  uintptr
	ModBaseSize  uint32
	ModuleHandle Handle
	Module       [MAX_MODULE_NAME32 + 1]uint16
	ExePath      [MAX_PATH]uint16
}

const SizeofModuleEntry32 = unsafe.Sizeof(ModuleEntry32{})

type Systemtime struct {
	Year         uint16
	Month        uint16
	DayOfWeek    uint16
	Day          uint16
	Hour         uint16
	Minute       uint16
	Second       uint16
	Milliseconds uint16
}

type Timezoneinformation struct {
	Bias         int32
	StandardName [32]uint16
	StandardDate Systemtime
	StandardBias int32
	DaylightName [32]uint16
	DaylightDate Systemtime
	DaylightBias int32
}

// Socket related.

const (
	AF_UNSPEC  = 0
	AF_UNIX    = 1
	AF_INET    = 2
	AF_NETBIOS = 17
	AF_INET6   = 23
	AF_IRDA    = 26
	AF_BTH     = 32

	SOCK_STREAM    = 1
	SOCK_DGRAM     = 2
	SOCK_RAW       = 3
	SOCK_RDM       = 4
	SOCK_SEQPACKET = 5

	IPPROTO_IP      = 0
	IPPROTO_ICMP    = 1
	IPPROTO_IGMP    = 2
	BTHPROTO_RFCOMM = 3
	IPPROTO_TCP     = 6
	IPPROTO_UDP     = 17
	IPPROTO_IPV6    = 41
	IPPROTO_ICMPV6  = 58
	IPPROTO_RM      = 113

	SOL_SOCKET                = 0xffff
	SO_REUSEADDR              = 4
	SO_KEEPALIVE              = 8
	SO_DONTROUTE              = 16
	SO_BROADCAST              = 32
	SO_LINGER                 = 128
	SO_RCVBUF                 = 0x1002
	SO_RCVTIMEO               = 0x1006
	SO_SNDBUF                 = 0x1001
	SO_UPDATE_ACCEPT_CONTEXT  = 0x700b
	SO_UPDATE_CONNECT_CONTEXT = 0x7010

	IOC_OUT                            = 0x40000000
	IOC_IN                             = 0x80000000
	IOC_VENDOR                         = 0x18000000
	IOC_INOUT                          = IOC_IN | IOC_OUT
	IOC_WS2                            = 0x08000000
	SIO_GET_EXTENSION_FUNCTION_POINTER = IOC_INOUT | IOC_WS2 | 6
	SIO_KEEPALIVE_VALS                 = IOC_IN | IOC_VENDOR | 4
	SIO_UDP_CONNRESET                  = IOC_IN | IOC_VENDOR | 12

	// cf. http://support.microsoft.com/default.aspx?scid=kb;en-us;257460

	IP_HDRINCL         = 0x2
	IP_TOS             = 0x3
	IP_TTL             = 0x4
	IP_MULTICAST_IF    = 0x9
	IP_MULTICAST_TTL   = 0xa
	IP_MULTICAST_LOOP  = 0xb
	IP_ADD_MEMBERSHIP  = 0xc
	IP_DROP_MEMBERSHIP = 0xd
	IP_PKTINFO         = 0x13

	IPV6_V6ONLY         = 0x1b
	IPV6_UNICAST_HOPS   = 0x4
	IPV6_MULTICAST_IF   = 0x9
	IPV6_MULTICAST_HOPS = 0xa
	IPV6_MULTICAST_LOOP = 0xb
	IPV6_JOIN_GROUP     = 0xc
	IPV6_LEAVE_GROUP    = 0xd
	IPV6_PKTINFO        = 0x13

	MSG_OOB       = 0x1
	MSG_PEEK      = 0x2
	MSG_DONTROUTE = 0x4
	MSG_WAITALL   = 0x8

	MSG_TRUNC  = 0x0100
	MSG_CTRUNC = 0x0200
	MSG_BCAST  = 0x0400
	MSG_MCAST  = 0x0800

	SOMAXCONN = 0x7fffffff

	TCP_NODELAY = 1

	SHUT_RD   = 0
	SHUT_WR   = 1
	SHUT_RDWR = 2

	WSADESCRIPTION_LEN = 256
	WSASYS_STATUS_LEN  = 128
)

type WSABuf struct {
	Len uint32
	Buf *byte
}

type WSAMsg struct {
	Name        *syscall.RawSockaddrAny
	Namelen     int32
	Buffers     *WSABuf
	BufferCount uint32
	Control     WSABuf
	Flags       uint32
}

// Flags for WSASocket
const (
	WSA_FLAG_OVERLAPPED             = 0x01
	WSA_FLAG_MULTIPOINT_C_ROOT      = 0x02
	WSA_FLAG_MULTIPOINT_C_LEAF      = 0x04
	WSA_FLAG_MULTIPOINT_D_ROOT      = 0x08
	WSA_FLAG_MULTIPOINT_D_LEAF      = 0x10
	WSA_FLAG_ACCESS_SYSTEM_SECURITY = 0x40
	WSA_FLAG_NO_HANDLE_INHERIT      = 0x80
	WSA_FLAG_REGISTERED_IO          = 0x100
)

// Invented values to support what package os expects.
const (
	S_IFMT   = 0x1f000
	S_IFIFO  = 0x1000
	S_IFCHR  = 0x2000
	S_IFDIR  = 0x4000
	S_IFBLK  = 0x6000
	S_IFREG  = 0x8000
	S_IFLNK  = 0xa000
	S_IFSOCK = 0xc000
	S_ISUID  = 0x800
	S_ISGID  = 0x400
	S_ISVTX  = 0x200
	S_IRUSR  = 0x100
	S_IWRITE = 0x80
	S_IWUSR  = 0x80
	S_IXUSR  = 0x40
)

const (
	FILE_TYPE_CHAR    = 0x0002
	FILE_TYPE_DISK    = 0x0001
	FILE_TYPE_PIPE    = 0x0003
	FILE_TYPE_REMOTE  = 0x8000
	FILE_TYPE_UNKNOWN = 0x0000
)

type Hostent struct {
	Name     *byte
	Aliases  **byte
	AddrType uint16
	Length   uint16
	AddrList **byte
}

type Protoent struct {
	Name    *byte
	Aliases **byte
	Proto   uint16
}

const (
	DNS_TYPE_A       = 0x0001
	DNS_TYPE_NS      = 0x0002
	DNS_TYPE_MD      = 0x0003
	DNS_TYPE_MF      = 0x0004
	DNS_TYPE_CNAME   = 0x0005
	DNS_TYPE_SOA     = 0x0006
	DNS_TYPE_MB      = 0x0007
	DNS_TYPE_MG      = 0x0008
	DNS_TYPE_MR      = 0x0009
	DNS_TYPE_NULL    = 0x000a
	DNS_TYPE_WKS     = 0x000b
	DNS_TYPE_PTR     = 0x000c
	DNS_TYPE_HINFO   = 0x000d
	DNS_TYPE_MINFO   = 0x000e
	DNS_TYPE_MX      = 0x000f
	DNS_TYPE_TEXT    = 0x0010
	DNS_TYPE_RP      = 0x0011
	DNS_TYPE_AFSDB   = 0x0012
	DNS_TYPE_X25     = 0x0013
	DNS_TYPE_ISDN    = 0x0014
	DNS_TYPE_RT      = 0x0015
	DNS_TYPE_NSAP    = 0x0016
	DNS_TYPE_NSAPPTR = 0x0017
	DNS_TYPE_SIG     = 0x0018
	DNS_TYPE_KEY     = 0x0019
	DNS_TYPE_PX      = 0x001a
	DNS_TYPE_GPOS    = 0x001b
	DNS_TYPE_AAAA    = 0x001c
	DNS_TYPE_LOC     = 0x001d
	DNS_TYPE_NXT     = 0x001e
	DNS_TYPE_EID     = 0x001f
	DNS_TYPE_NIMLOC  = 0x0020
	DNS_TYPE_SRV     = 0x0021
	DNS_TYPE_ATMA    = 0x0022
	DNS_TYPE_NAPTR   = 0x0023
	DNS_TYPE_KX      = 0x0024
	DNS_TYPE_CERT    = 0x0025
	DNS_TYPE_A6      = 0x0026
	DNS_TYPE_DNAME   = 0x0027
	DNS_TYPE_SINK    = 0x0028
	DNS_TYPE_OPT     = 0x0029
	DNS_TYPE_DS      = 0x002B
	DNS_TYPE_RRSIG   = 0x002E
	DNS_TYPE_NSEC    = 0x002F
	DNS_TYPE_DNSKEY  = 0x0030
	DNS_TYPE_DHCID   = 0x0031
	DNS_TYPE_UINFO   = 0x0064
	DNS_TYPE_UID     = 0x0065
	DNS_TYPE_GID     = 0x0066
	DNS_TYPE_UNSPEC  = 0x0067
	DNS_TYPE_ADDRS   = 0x00f8
	DNS_TYPE_TKEY    = 0x00f9
	DNS_TYPE_TSIG    = 0x00fa
	DNS_TYPE_IXFR    = 0x00fb
	DNS_TYPE_AXFR    = 0x00fc
	DNS_TYPE_MAILB   = 0x00fd
	DNS_TYPE_MAILA   = 0x00fe
	DNS_TYPE_ALL     = 0x00ff
	DNS_TYPE_ANY     = 0x00ff
	DNS_TYPE_WINS    = 0xff01
	DNS_TYPE_WINSR   = 0xff02
	DNS_TYPE_NBSTAT  = 0xff01
)

const (
	// flags inside DNSRecord.Dw
	DnsSectionQuestion   = 0x0000
	DnsSectionAnswer     = 0x0001
	DnsSectionAuthority  = 0x0002
	DnsSectionAdditional = 0x0003
)

const (
	// flags of WSALookupService
	LUP_DEEP                = 0x0001
	LUP_CONTAINERS          = 0x0002
	LUP_NOCONTAINERS        = 0x0004
	LUP_NEAREST             = 0x0008
	LUP_RETURN_NAME         = 0x0010
	LUP_RETURN_TYPE         = 0x0020
	LUP_RETURN_VERSION      = 0x0040
	LUP_RETURN_COMMENT      = 0x0080
	LUP_RETURN_ADDR         = 0x0100
	LUP_RETURN_BLOB         = 0x0200
	LUP_RETURN_ALIASES      = 0x0400
	LUP_RETURN_QUERY_STRING = 0x0800
	LUP_RETURN_ALL          = 0x0FF0
	LUP_RES_SERVICE         = 0x8000

	LUP_FLUSHCACHE    = 0x1000
	LUP_FLUSHPREVIOUS = 0x2000

	LUP_NON_AUTHORITATIVE      = 0x4000
	LUP_SECURE                 = 0x8000
	LUP_RETURN_PREFERRED_NAMES = 0x10000
	LUP_DNS_ONLY               = 0x20000

	LUP_ADDRCONFIG           = 0x100000
	LUP_DUAL_ADDR            = 0x200000
	LUP_FILESERVER           = 0x400000
	LUP_DISABLE_IDN_ENCODING = 0x00800000
	LUP_API_ANSI             = 0x01000000

	LUP_RESOLUTION_HANDLE = 0x80000000
)

const (
	// values of WSAQUERYSET's namespace
	NS_ALL       = 0
	NS_DNS       = 12
	NS_NLA       = 15
	NS_BTH       = 16
	NS_EMAIL     = 37
	NS_PNRPNAME  = 38
	NS_PNRPCLOUD = 39
)

type DNSSRVData struct {
	Target   *uint16
	Priority uint16
	Weight   uint16
	Port     uint16
	Pad      uint16
}

type DNSPTRData struct {
	Host *uint16
}

type DNSMXData struct {
	NameExchange *uint16
	Preference   uint16
	Pad          uint16
}

type DNSTXTData struct {
	StringCount uint16
	StringArray [1]*uint16
}

type DNSRecord struct {
	Next     *DNSRecord
	Name     *uint16
	Type     uint16
	Length   uint16
	Dw       uint32
	Ttl      uint32
	Reserved uint32
	Data     [40]byte
}

const (
	TF_DISCONNECT         = 1
	TF_REUSE_SOCKET       = 2
	TF_WRITE_BEHIND       = 4
	TF_USE_DEFAULT_WORKER = 0
	TF_USE_SYSTEM_THREAD  = 16
	TF_USE_KERNEL_APC     = 32
)

type TransmitFileBuffers struct {
	Head       uintptr
	HeadLength uint32
	Tail       uintptr
	TailLength uint32
}

const (
	IFF_UP           = 1
	IFF_BROADCAST    = 2
	IFF_LOOPBACK     = 4
	IFF_POINTTOPOINT = 8
	IFF_MULTICAST    = 16
)

const SIO_GET_INTERFACE_LIST = 0x4004747F

// TODO(mattn): SockaddrGen is union of sockaddr/sockaddr_in/sockaddr_in6_old.
// will be fixed to change variable type as suitable.

type SockaddrGen [24]byte

type InterfaceInfo struct {
	Flags            uint32
	Address          SockaddrGen
	BroadcastAddress SockaddrGen
	Netmask          SockaddrGen
}

type IpAddressString struct {
	String [16]byte
}

type IpMaskString IpAddressString

type IpAddrString struct {
	Next      *IpAddrString
	IpAddress IpAddressString
	IpMask    IpMaskString
	Context   uint32
}

const MAX_ADAPTER_NAME_LENGTH = 256
const MAX_ADAPTER_DESCRIPTION_LENGTH = 128
const MAX_ADAPTER_ADDRESS_LENGTH = 8

type IpAdapterInfo struct {
	Next                *IpAdapterInfo
	ComboIndex          uint32
	AdapterName         [MAX_ADAPTER_NAME_LENGTH + 4]byte
	Description         [MAX_ADAPTER_DESCRIPTION_LENGTH + 4]byte
	AddressLength       uint32
	Address             [MAX_ADAPTER_ADDRESS_LENGTH]byte
	Index               uint32
	Type                uint32
	DhcpEnabled         uint32
	CurrentIpAddress    *IpAddrString
	IpAddressList       IpAddrString
	GatewayList         IpAddrString
	DhcpServer          IpAddrString
	HaveWins            bool
	PrimaryWinsServer   IpAddrString
	SecondaryWinsServer IpAddrString
	LeaseObtained       int64
	LeaseExpires        int64
}

const MAXLEN_PHYSADDR = 8
const MAX_INTERFACE_NAME_LEN = 256
const MAXLEN_IFDESCR = 256

type MibIfRow struct {
	Name            [MAX_INTERFACE_NAME_LEN]uint16
	Index           uint32
	Type            uint32
	Mtu             uint32
	Speed           uint32
	PhysAddrLen     uint32
	PhysAddr        [MAXLEN_PHYSADDR]byte
	AdminStatus     uint32
	OperStatus      uint32
	LastChange      uint32
	InOctets        uint32
	InUcastPkts     uint32
	InNUcastPkts    uint32
	InDiscards      uint32
	InErrors        uint32
	InUnknownProtos uint32
	OutOctets       uint32
	OutUcastPkts    uint32
	OutNUcastPkts   uint32
	OutDiscards     uint32
	OutErrors       uint32
	OutQLen         uint32
	DescrLen        uint32
	Descr           [MAXLEN_IFDESCR]byte
}

type CertInfo struct {
	Version              uint32
	SerialNumber         CryptIntegerBlob
	SignatureAlgorithm   CryptAlgorithmIdentifier
	Issuer               CertNameBlob
	NotBefore            Filetime
	NotAfter             Filetime
	Subject              CertNameBlob
	SubjectPublicKeyInfo CertPublicKeyInfo
	IssuerUniqueId       CryptBitBlob
	SubjectUniqueId      CryptBitBlob
	CountExtensions      uint32
	Extensions           *CertExtension
}

type CertExtension struct {
	ObjId    *byte
	Critical int32
	Value    CryptObjidBlob
}

type CryptAlgorithmIdentifier struct {
	ObjId      *byte
	Parameters CryptObjidBlob
}

type CertPublicKeyInfo struct {
	Algorithm CryptAlgorithmIdentifier
	PublicKey CryptBitBlob
}

type DataBlob struct {
	Size uint32
	Data *byte
}
type CryptIntegerBlob DataBlob
type CryptUintBlob DataBlob
type CryptObjidBlob DataBlob
type CertNameBlob DataBlob
type CertRdnValueBlob DataBlob
type CertBlob DataBlob
type CrlBlob DataBlob
type CryptDataBlob DataBlob
type CryptHashBlob DataBlob
type CryptDigestBlob DataBlob
type CryptDerBlob DataBlob
type CryptAttrBlob DataBlob

type CryptBitBlob struct {
	Size       uint32
	Data       *byte
	UnusedBits uint32
}

type CertContext struct {
	EncodingType uint32
	EncodedCert  *byte
	Length       uint32
	CertInfo     *CertInfo
	Store        Handle
}

type CertChainContext struct {
	Size                       uint32
	TrustStatus                CertTrustStatus
	ChainCount                 uint32
	Chains                     **CertSimpleChain
	LowerQualityChainCount     uint32
	LowerQualityChains         **CertChainContext
	HasRevocationFreshnessTime uint32
	RevocationFreshnessTime    uint32
}

type CertTrustListInfo struct {
	// Not implemented
}

type CertSimpleChain struct {
	Size                       uint32
	TrustStatus                CertTrustStatus
	NumElements                uint32
	Elements                   **CertChainElement
	TrustListInfo              *CertTrustListInfo
	HasRevocationFreshnessTime uint32
	RevocationFreshnessTime    uint32
}

type CertChainElement struct {
	Size              uint32
	CertContext       *CertContext
	TrustStatus       CertTrustStatus
	RevocationInfo    *CertRevocationInfo
	IssuanceUsage     *CertEnhKeyUsage
	ApplicationUsage  *CertEnhKeyUsage
	ExtendedErrorInfo *uint16
}

type CertRevocationCrlInfo struct {
	// Not implemented
}

type CertRevocationInfo struct {
	Size             uint32
	RevocationResult uint32
	RevocationOid    *byte
	OidSpecificInfo  Pointer
	HasFreshnessTime uint32
	FreshnessTime    uint32
	CrlInfo          *CertRevocationCrlInfo
}

type CertTrustStatus struct {
	ErrorStatus uint32
	InfoStatus  uint32
}

type CertUsageMatch struct {
	Type  uint32
	Usage CertEnhKeyUsage
}

type CertEnhKeyUsage struct {
	Length           uint32
	UsageIdentifiers **byte
}

type CertChainPara struct {
	Size                         uint32
	RequestedUsage               CertUsageMatch
	RequstedIssuancePolicy       CertUsageMatch
	URLRetrievalTimeout          uint32
	CheckRevocationFreshnessTime uint32
	RevocationFreshnessTime      uint32
	CacheResync                  *Filetime
}

type CertChainPolicyPara struct {
	Size            uint32
	Flags           uint32
	ExtraPolicyPara Pointer
}

type SSLExtraCertChainPolicyPara struct {
	Size       uint32
	AuthType   uint32
	Checks     uint32
	ServerName *uint16
}

type CertChainPolicyStatus struct {
	Size              uint32
	Error             uint32
	ChainIndex        uint32
	ElementIndex      uint32
	ExtraPolicyStatus Pointer
}

type CertPolicyInfo struct {
	Identifier      *byte
	CountQualifiers uint32
	Qualifiers      *CertPolicyQualifierInfo
}

type CertPoliciesInfo struct {
	Count       uint32
	PolicyInfos *CertPolicyInfo
}

type CertPolicyQualifierInfo struct {
	// Not implemented
}

type CertStrongSignPara struct {
	Size                      uint32
	InfoChoice                uint32
	InfoOrSerializedInfoOrOID unsafe.Pointer
}

type CryptProtectPromptStruct struct {
	Size        uint32
	PromptFlags uint32
	App         HWND
	Prompt      *uint16
}

type CertChainFindByIssuerPara struct {
	Size                   uint32
	UsageIdentifier        *byte
	KeySpec                uint32
	AcquirePrivateKeyFlags uint32
	IssuerCount            uint32
	Issuer                 Pointer
	FindCallback           Pointer
	FindArg                Pointer
	IssuerChainIndex       *uint32
	IssuerElementIndex     *uint32
}

type WinTrustData struct {
	Size                            uint32
	PolicyCallbackData              uintptr
	SIPClientData                   uintptr
	UIChoice                        uint32
	RevocationChecks                uint32
	UnionChoice                     uint32
	FileOrCatalogOrBlobOrSgnrOrCert unsafe.Pointer
	StateAction                     uint32
	StateData                       Handle
	URLReference                    *uint16
	ProvFlags                       uint32
	UIContext                       uint32
	SignatureSettings               *WinTrustSignatureSettings
}

type WinTrustFileInfo struct {
	Size         uint32
	FilePath     *uint16
	File         Handle
	KnownSubject *GUID
}

type WinTrustSignatureSettings struct {
	Size             uint32
	Index            uint32
	Flags            uint32
	SecondarySigs    uint32
	VerifiedSigIndex uint32
	CryptoPolicy     *CertStrongSignPara
}

const (
	// do not reorder
	HKEY_CLASSES_ROOT = 0x80000000 + iota
	HKEY_CURRENT_USER
	HKEY_LOCAL_MACHINE
	HKEY_USERS
	HKEY_PERFORMANCE_DATA
	HKEY_CURRENT_CONFIG
	HKEY_DYN_DATA

	KEY_QUERY_VALUE        = 1
	KEY_SET_VALUE          = 2
	KEY_CREATE_SUB_KEY     = 4
	KEY_ENUMERATE_SUB_KEYS = 8
	KEY_NOTIFY             = 16
	KEY_CREATE_LINK        = 32
	KEY_WRITE              = 0x20006
	KEY_EXECUTE            = 0x20019
	KEY_READ               = 0x20019
	KEY_WOW64_64KEY        = 0x0100
	KEY_WOW64_32KEY        = 0x0200
	KEY_ALL_ACCESS         = 0xf003f
)

const (
	// do not reorder
	REG_NONE = iota
	REG_SZ
	REG_EXPAND_SZ
	REG_BINARY
	REG_DWORD_LITTLE_ENDIAN
	REG_DWORD_BIG_ENDIAN
	REG_LINK
	REG_MULTI_SZ
	REG_RESOURCE_LIST
	REG_FULL_RESOURCE_DESCRIPTOR
	REG_RESOURCE_REQUIREMENTS_LIST
	REG_QWORD_LITTLE_ENDIAN
	REG_DWORD = REG_DWORD_LITTLE_ENDIAN
	REG_QWORD = REG_QWORD_LITTLE_ENDIAN
)

const (
	EVENT_MODIFY_STATE = 0x0002
	EVENT_ALL_ACCESS   = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3

	MUTANT_QUERY_STATE = 0x0001
	MUTANT_ALL_ACCESS  = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | MUTANT_QUERY_STATE

	SEMAPHORE_MODIFY_STATE = 0x0002
	SEMAPHORE_ALL_ACCESS   = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3

	TIMER_QUERY_STATE  = 0x0001
	TIMER_MODIFY_STATE = 0x0002
	TIMER_ALL_ACCESS   = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | TIMER_QUERY_STATE | TIMER_MODIFY_STATE

	MUTEX_MODIFY_STATE = MUTANT_QUERY_STATE
	MUTEX_ALL_ACCESS   = MUTANT_ALL_ACCESS

	CREATE_EVENT_MANUAL_RESET  = 0x1
	CREATE_EVENT_INITIAL_SET   = 0x2
	CREATE_MUTEX_INITIAL_OWNER = 0x1
)

type AddrinfoW struct {
	Flags     int32
	Family    int32
	Socktype  int32
	Protocol  int32
	Addrlen   uintptr
	Canonname *uint16
	Addr      uintptr
	Next      *AddrinfoW
}

const (
	AI_PASSIVE     = 1
	AI_CANONNAME   = 2
	AI_NUMERICHOST = 4
)

type GUID struct {
	Data1 uint32
	Data2 uint16
	Data3 uint16
	Data4 [8]byte
}

var WSAID_CONNECTEX = GUID{
	0x25a207b9,
	0xddf3,
	0x4660,
	[8]byte{0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e},
}

var WSAID_WSASENDMSG = GUID{
	0xa441e712,
	0x754f,
	0x43ca,
	[8]byte{0x84, 0xa7, 0x0d, 0xee, 0x44, 0xcf, 0x60, 0x6d},
}

var WSAID_WSARECVMSG = GUID{
	0xf689d7c8,
	0x6f1f,
	0x436b,
	[8]byte{0x8a, 0x53, 0xe5, 0x4f, 0xe3, 0x51, 0xc3, 0x22},
}

const (
	FILE_SKIP_COMPLETION_PORT_ON_SUCCESS = 1
	FILE_SKIP_SET_EVENT_ON_HANDLE        = 2
)

const (
	WSAPROTOCOL_LEN    = 255
	MAX_PROTOCOL_CHAIN = 7
	BASE_PROTOCOL      = 1
	LAYERED_PROTOCOL   = 0

	XP1_CONNECTIONLESS           = 0x00000001
	XP1_GUARANTEED_DELIVERY      = 0x00000002
	XP1_GUARANTEED_ORDER         = 0x00000004
	XP1_MESSAGE_ORIENTED         = 0x00000008
	XP1_PSEUDO_STREAM            = 0x00000010
	XP1_GRACEFUL_CLOSE           = 0x00000020
	XP1_EXPEDITED_DATA           = 0x00000040
	XP1_CONNECT_DATA             = 0x00000080
	XP1_DISCONNECT_DATA          = 0x00000100
	XP1_SUPPORT_BROADCAST        = 0x00000200
	XP1_SUPPORT_MULTIPOINT       = 0x00000400
	XP1_MULTIPOINT_CONTROL_PLANE = 0x00000800
	XP1_MULTIPOINT_DATA_PLANE    = 0x00001000
	XP1_QOS_SUPPORTED            = 0x00002000
	XP1_UNI_SEND                 = 0x00008000
	XP1_UNI_RECV                 = 0x00010000
	XP1_IFS_HANDLES              = 0x00020000
	XP1_PARTIAL_MESSAGE          = 0x00040000
	XP1_SAN_SUPPORT_SDP          = 0x00080000

	PFL_MULTIPLE_PROTO_ENTRIES  = 0x00000001
	PFL_RECOMMENDED_PROTO_ENTRY = 0x00000002
	PFL_HIDDEN                  = 0x00000004
	PFL_MATCHES_PROTOCOL_ZERO   = 0x00000008
	PFL_NETWORKDIRECT_PROVIDER  = 0x00000010
)

type WSAProtocolInfo struct {
	ServiceFlags1     uint32
	ServiceFlags2     uint32
	ServiceFlags3     uint32
	ServiceFlags4     uint32
	ProviderFlags     uint32
	ProviderId        GUID
	CatalogEntryId    uint32
	ProtocolChain     WSAProtocolChain
	Version           int32
	AddressFamily     int32
	MaxSockAddr       int32
	MinSockAddr       int32
	SocketType        int32
	Protocol          int32
	ProtocolMaxOffset int32
	NetworkByteOrder  int32
	SecurityScheme    int32
	MessageSize       uint32
	ProviderReserved  uint32
	ProtocolName      [WSAPROTOCOL_LEN + 1]uint16
}

type WSAProtocolChain struct {
	ChainLen     int32
	ChainEntries [MAX_PROTOCOL_CHAIN]uint32
}

type TCPKeepalive struct {
	OnOff    uint32
	Time     uint32
	Interval uint32
}

type symbolicLinkReparseBuffer struct {
	SubstituteNameOffset uint16
	SubstituteNameLength uint16
	PrintNameOffset      uint16
	PrintNameLength      uint16
	Flags                uint32
	PathBuffer           [1]uint16
}

type mountPointReparseBuffer struct {
	SubstituteNameOffset uint16
	SubstituteNameLength uint16
	PrintNameOffset      uint16
	PrintNameLength      uint16
	PathBuffer           [1]uint16
}

type reparseDataBuffer struct {
	ReparseTag        uint32
	ReparseDataLength uint16
	Reserved          uint16

	// GenericReparseBuffer
	reparseBuffer byte
}

const (
	FSCTL_CREATE_OR_GET_OBJECT_ID             = 0x0900C0
	FSCTL_DELETE_OBJECT_ID                    = 0x0900A0
	FSCTL_DELETE_REPARSE_POINT                = 0x0900AC
	FSCTL_DUPLICATE_EXTENTS_TO_FILE           = 0x098344
	FSCTL_DUPLICATE_EXTENTS_TO_FILE_EX        = 0x0983E8
	FSCTL_FILESYSTEM_GET_STATISTICS           = 0x090060
	FSCTL_FILE_LEVEL_TRIM                     = 0x098208
	FSCTL_FIND_FILES_BY_SID                   = 0x09008F
	FSCTL_GET_COMPRESSION                     = 0x09003C
	FSCTL_GET_INTEGRITY_INFORMATION           = 0x09027C
	FSCTL_GET_NTFS_VOLUME_DATA                = 0x090064
	FSCTL_GET_REFS_VOLUME_DATA                = 0x0902D8
	FSCTL_GET_OBJECT_ID                       = 0x09009C
	FSCTL_GET_REPARSE_POINT                   = 0x0900A8
	FSCTL_GET_RETRIEVAL_POINTER_COUNT         = 0x09042B
	FSCTL_GET_RETRIEVAL_POINTERS              = 0x090073
	FSCTL_GET_RETRIEVAL_POINTERS_AND_REFCOUNT = 0x0903D3
	FSCTL_IS_PATHNAME_VALID                   = 0x09002C
	FSCTL_LMR_SET_LINK_TRACKING_INFORMATION   = 0x1400EC
	FSCTL_MARK_HANDLE                         = 0x0900FC
	FSCTL_OFFLOAD_READ                        = 0x094264
	FSCTL_OFFLOAD_WRITE                       = 0x098268
	FSCTL_PIPE_PEEK                           = 0x11400C
	FSCTL_PIPE_TRANSCEIVE                     = 0x11C017
	FSCTL_PIPE_WAIT                           = 0x110018
	FSCTL_QUERY_ALLOCATED_RANGES              = 0x0940CF
	FSCTL_QUERY_FAT_BPB                       = 0x090058
	FSCTL_QUERY_FILE_REGIONS                  = 0x090284
	FSCTL_QUERY_ON_DISK_VOLUME_INFO           = 0x09013C
	FSCTL_QUERY_SPARING_INFO                  = 0x090138
	FSCTL_READ_FILE_USN_DATA                  = 0x0900EB
	FSCTL_RECALL_FILE                         = 0x090117
	FSCTL_REFS_STREAM_SNAPSHOT_MANAGEMENT     = 0x090440
	FSCTL_SET_COMPRESSION                     = 0x09C040
	FSCTL_SET_DEFECT_MANAGEMENT               = 0x098134
	FSCTL_SET_ENCRYPTION                      = 0x0900D7
	FSCTL_SET_INTEGRITY_INFORMATION           = 0x09C280
	FSCTL_SET_INTEGRITY_INFORMATION_EX        = 0x090380
	FSCTL_SET_OBJECT_ID                       = 0x090098
	FSCTL_SET_OBJECT_ID_EXTENDED              = 0x0900BC
	FSCTL_SET_REPARSE_POINT                   = 0x0900A4
	FSCTL_SET_SPARSE                          = 0x0900C4
	FSCTL_SET_ZERO_DATA                       = 0x0980C8
	FSCTL_SET_ZERO_ON_DEALLOCATION            = 0x090194
	FSCTL_SIS_COPYFILE                        = 0x090100
	FSCTL_WRITE_USN_CLOSE_RECORD              = 0x0900EF

	MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16 * 1024
	IO_REPARSE_TAG_MOUNT_POINT       = 0xA0000003
	IO_REPARSE_TAG_SYMLINK           = 0xA000000C
	SYMBOLIC_LINK_FLAG_DIRECTORY     = 0x1
)

const (
	ComputerNameNetBIOS                   = 0
	ComputerNameDnsHostname               = 1
	ComputerNameDnsDomain                 = 2
	ComputerNameDnsFullyQualified         = 3
	ComputerNamePhysicalNetBIOS           = 4
	ComputerNamePhysicalDnsHostname       = 5
	ComputerNamePhysicalDnsDomain         = 6
	ComputerNamePhysicalDnsFullyQualified = 7
	ComputerNameMax                       = 8
)

// For MessageBox()
const (
	MB_OK                   = 0x00000000
	MB_OKCANCEL             = 0x00000001
	MB_ABORTRETRYIGNORE     = 0x00000002
	MB_YESNOCANCEL          = 0x00000003
	MB_YESNO                = 0x00000004
	MB_RETRYCANCEL          = 0x00000005
	MB_CANCELTRYCONTINUE    = 0x00000006
	MB_ICONHAND             = 0x00000010
	MB_ICONQUESTION         = 0x00000020
	MB_ICONEXCLAMATION      = 0x00000030
	MB_ICONASTERISK         = 0x00000040
	MB_USERICON             = 0x00000080
	MB_ICONWARNING          = MB_ICONEXCLAMATION
	MB_ICONERROR            = MB_ICONHAND
	MB_ICONINFORMATION      = MB_ICONASTERISK
	MB_ICONSTOP             = MB_ICONHAND
	MB_DEFBUTTON1           = 0x00000000
	MB_DEFBUTTON2           = 0x00000100
	MB_DEFBUTTON3           = 0x00000200
	MB_DEFBUTTON4           = 0x00000300
	MB_APPLMODAL            = 0x00000000
	MB_SYSTEMMODAL          = 0x00001000
	MB_TASKMODAL            = 0x00002000
	MB_HELP                 = 0x00004000
	MB_NOFOCUS              = 0x00008000
	MB_SETFOREGROUND        = 0x00010000
	MB_DEFAULT_DESKTOP_ONLY = 0x00020000
	MB_TOPMOST              = 0x00040000
	MB_RIGHT                = 0x00080000
	MB_RTLREADING           = 0x00100000
	MB_SERVICE_NOTIFICATION = 0x00200000
)

const (
	MOVEFILE_REPLACE_EXISTING      = 0x1
	MOVEFILE_COPY_ALLOWED          = 0x2
	MOVEFILE_DELAY_UNTIL_REBOOT    = 0x4
	MOVEFILE_WRITE_THROUGH         = 0x8
	MOVEFILE_CREATE_HARDLINK       = 0x10
	MOVEFILE_FAIL_IF_NOT_TRACKABLE = 0x20
)

const GAA_FLAG_INCLUDE_PREFIX = 0x00000010

const (
	IF_TYPE_OTHER              = 1
	IF_TYPE_ETHERNET_CSMACD    = 6
	IF_TYPE_ISO88025_TOKENRING = 9
	IF_TYPE_PPP                = 23
	IF_TYPE_SOFTWARE_LOOPBACK  = 24
	IF_TYPE_ATM                = 37
	IF_TYPE_IEEE80211          = 71
	IF_TYPE_TUNNEL             = 131
	IF_TYPE_IEEE1394           = 144
)

type SocketAddress struct {
	Sockaddr       *syscall.RawSockaddrAny
	SockaddrLength int32
}

// IP returns an IPv4 or IPv6 address, or nil if the underlying SocketAddress is neither.
func (addr *SocketAddress) IP() net.IP {
	if uintptr(addr.SockaddrLength) >= unsafe.Sizeof(RawSockaddrInet4{}) && addr.Sockaddr.Addr.Family == AF_INET {
		return (*RawSockaddrInet4)(unsafe.Pointer(addr.Sockaddr)).Addr[:]
	} else if uintptr(addr.SockaddrLength) >= unsafe.Sizeof(RawSockaddrInet6{}) && addr.Sockaddr.Addr.Family == AF_INET6 {
		return (*RawSockaddrInet6)(unsafe.Pointer(addr.Sockaddr)).Addr[:]
	}
	return nil
}

type IpAdapterUnicastAddress struct {
	Length             uint32
	Flags              uint32
	Next               *IpAdapterUnicastAddress
	Address            SocketAddress
	PrefixOrigin       int32
	SuffixOrigin       int32
	DadState           int32
	ValidLifetime      uint32
	PreferredLifetime  uint32
	LeaseLifetime      uint32
	OnLinkPrefixLength uint8
}

type IpAdapterAnycastAddress struct {
	Length  uint32
	Flags   uint32
	Next    *IpAdapterAnycastAddress
	Address SocketAddress
}

type IpAdapterMulticastAddress struct {
	Length  uint32
	Flags   uint32
	Next    *IpAdapterMulticastAddress
	Address SocketAddress
}

type IpAdapterDnsServerAdapter struct {
	Length   uint32
	Reserved uint32
	Next     *IpAdapterDnsServerAdapter
	Address  SocketAddress
}

type IpAdapterPrefix struct {
	Length       uint32
	Flags        uint32
	Next         *IpAdapterPrefix
	Address      SocketAddress
	PrefixLength uint32
}

type IpAdapterAddresses struct {
	Length                 uint32
	IfIndex                uint32
	Next                   *IpAdapterAddresses
	AdapterName            *byte
	FirstUnicastAddress    *IpAdapterUnicastAddress
	FirstAnycastAddress    *IpAdapterAnycastAddress
	FirstMulticastAddress  *IpAdapterMulticastAddress
	FirstDnsServerAddress  *IpAdapterDnsServerAdapter
	DnsSuffix              *uint16
	Description            *uint16
	FriendlyName           *uint16
	PhysicalAddress        [syscall.MAX_ADAPTER_ADDRESS_LENGTH]byte
	PhysicalAddressLength  uint32
	Flags                  uint32
	Mtu                    uint32
	IfType                 uint32
	OperStatus             uint32
	Ipv6IfIndex            uint32
	ZoneIndices            [16]uint32
	FirstPrefix            *IpAdapterPrefix
	TransmitLinkSpeed      uint64
	ReceiveLinkSpeed       uint64
	FirstWinsServerAddress *IpAdapterWinsServerAddress
	FirstGatewayAddress    *IpAdapterGatewayAddress
	Ipv4Metric             uint32
	Ipv6Metric             uint32
	Luid                   uint64
	Dhcpv4Server           SocketAddress
	CompartmentId          uint32
	NetworkGuid            GUID
	ConnectionType         uint32
	TunnelType             uint32
	Dhcpv6Server           SocketAddress
	Dhcpv6ClientDuid       [MAX_DHCPV6_DUID_LENGTH]byte
	Dhcpv6ClientDuidLength uint32
	Dhcpv6Iaid             uint32
	FirstDnsSuffix         *IpAdapterDNSSuffix
}

type IpAdapterWinsServerAddress struct {
	Length   uint32
	Reserved uint32
	Next     *IpAdapterWinsServerAddress
	Address  SocketAddress
}

type IpAdapterGatewayAddress struct {
	Length   uint32
	Reserved uint32
	Next     *IpAdapterGatewayAddress
	Address  SocketAddress
}

type IpAdapterDNSSuffix struct {
	Next   *IpAdapterDNSSuffix
	String [MAX_DNS_SUFFIX_STRING_LENGTH]uint16
}

const (
	IfOperStatusUp             = 1
	IfOperStatusDown           = 2
	IfOperStatusTesting        = 3
	IfOperStatusUnknown        = 4
	IfOperStatusDormant        = 5
	IfOperStatusNotPresent     = 6
	IfOperStatusLowerLayerDown = 7
)

// Console related constants used for the mode parameter to SetConsoleMode. See
// https://docs.microsoft.com/en-us/windows/console/setconsolemode for details.

const (
	ENABLE_PROCESSED_INPUT        = 0x1
	ENABLE_LINE_INPUT             = 0x2
	ENABLE_ECHO_INPUT             = 0x4
	ENABLE_WINDOW_INPUT           = 0x8
	ENABLE_MOUSE_INPUT            = 0x10
	ENABLE_INSERT_MODE            = 0x20
	ENABLE_QUICK_EDIT_MODE        = 0x40
	ENABLE_EXTENDED_FLAGS         = 0x80
	ENABLE_AUTO_POSITION          = 0x100
	ENABLE_VIRTUAL_TERMINAL_INPUT = 0x200

	ENABLE_PROCESSED_OUTPUT            = 0x1
	ENABLE_WRAP_AT_EOL_OUTPUT          = 0x2
	ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x4
	DISABLE_NEWLINE_AUTO_RETURN        = 0x8
	ENABLE_LVB_GRID_WORLDWIDE          = 0x10
)

type Coord struct {
	X int16
	Y int16
}

type SmallRect struct {
	Left   int16
	Top    int16
	Right  int16
	Bottom int16
}

// Used with GetConsoleScreenBuffer to retrieve information about a console
// screen buffer. See
// https://docs.microsoft.com/en-us/windows/console/console-screen-buffer-info-str
// for details.

type ConsoleScreenBufferInfo struct {
	Size              Coord
	CursorPosition    Coord
	Attributes        uint16
	Window            SmallRect
	MaximumWindowSize Coord
}

const UNIX_PATH_MAX = 108 // defined in afunix.h

const (
	// flags for JOBOBJECT_BASIC_LIMIT_INFORMATION.LimitFlags
	JOB_OBJECT_LIMIT_ACTIVE_PROCESS             = 0x00000008
	JOB_OBJECT_LIMIT_AFFINITY                   = 0x00000010
	JOB_OBJECT_LIMIT_BREAKAWAY_OK               = 0x00000800
	JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION = 0x00000400
	JOB_OBJECT_LIMIT_JOB_MEMORY                 = 0x00000200
	JOB_OBJECT_LIMIT_JOB_TIME                   = 0x00000004
	JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE          = 0x00002000
	JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME          = 0x00000040
	JOB_OBJECT_LIMIT_PRIORITY_CLASS             = 0x00000020
	JOB_OBJECT_LIMIT_PROCESS_MEMORY             = 0x00000100
	JOB_OBJECT_LIMIT_PROCESS_TIME               = 0x00000002
	JOB_OBJECT_LIMIT_SCHEDULING_CLASS           = 0x00000080
	JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK        = 0x00001000
	JOB_OBJECT_LIMIT_SUBSET_AFFINITY            = 0x00004000
	JOB_OBJECT_LIMIT_WORKINGSET                 = 0x00000001
)

type IO_COUNTERS struct {
	ReadOperationCount  uint64
	WriteOperationCount uint64
	OtherOperationCount uint64
	ReadTransferCount   uint64
	WriteTransferCount  uint64
	OtherTransferCount  uint64
}

type JOBOBJECT_EXTENDED_LIMIT_INFORMATION struct {
	BasicLimitInformation JOBOBJECT_BASIC_LIMIT_INFORMATION
	IoInfo                IO_COUNTERS
	ProcessMemoryLimit    uintptr
	JobMemoryLimit        uintptr
	PeakProcessMemoryUsed uintptr
	PeakJobMemoryUsed     uintptr
}

const (
	// UIRestrictionsClass
	JOB_OBJECT_UILIMIT_DESKTOP          = 0x00000040
	JOB_OBJECT_UILIMIT_DISPLAYSETTINGS  = 0x00000010
	JOB_OBJECT_UILIMIT_EXITWINDOWS      = 0x00000080
	JOB_OBJECT_UILIMIT_GLOBALATOMS      = 0x00000020
	JOB_OBJECT_UILIMIT_HANDLES          = 0x00000001
	JOB_OBJECT_UILIMIT_READCLIPBOARD    = 0x00000002
	JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS = 0x00000008
	JOB_OBJECT_UILIMIT_WRITECLIPBOARD   = 0x00000004
)

type JOBOBJECT_BASIC_UI_RESTRICTIONS struct {
	UIRestrictionsClass uint32
}

const (
	// JobObjectInformationClass for QueryInformationJobObject and SetInformationJobObject
	JobObjectAssociateCompletionPortInformation = 7
	JobObjectBasicAccountingInformation         = 1
	JobObjectBasicAndIoAccountingInformation    = 8
	JobObjectBasicLimitInformation              = 2
	JobObjectBasicProcessIdList                 = 3
	JobObjectBasicUIRestrictions                = 4
	JobObjectCpuRateControlInformation          = 15
	JobObjectEndOfJobTimeInformation            = 6
	JobObjectExtendedLimitInformation           = 9
	JobObjectGroupInformation                   = 11
	JobObjectGroupInformationEx                 = 14
	JobObjectLimitViolationInformation          = 13
	JobObjectLimitViolationInformation2         = 34
	JobObjectNetRateControlInformation          = 32
	JobObjectNotificationLimitInformation       = 12
	JobObjectNotificationLimitInformation2      = 33
	JobObjectSecurityLimitInformation           = 5
)

const (
	KF_FLAG_DEFAULT                          = 0x00000000
	KF_FLAG_FORCE_APP_DATA_REDIRECTION       = 0x00080000
	KF_FLAG_RETURN_FILTER_REDIRECTION_TARGET = 0x00040000
	KF_FLAG_FORCE_PACKAGE_REDIRECTION        = 0x00020000
	KF_FLAG_NO_PACKAGE_REDIRECTION           = 0x00010000
	KF_FLAG_FORCE_APPCONTAINER_REDIRECTION   = 0x00020000
	KF_FLAG_NO_APPCONTAINER_REDIRECTION      = 0x00010000
	KF_FLAG_CREATE                           = 0x00008000
	KF_FLAG_DONT_VERIFY                      = 0x00004000
	KF_FLAG_DONT_UNEXPAND                    = 0x00002000
	KF_FLAG_NO_ALIAS                         = 0x00001000
	KF_FLAG_INIT                             = 0x00000800
	KF_FLAG_DEFAULT_PATH                     = 0x00000400
	KF_FLAG_NOT_PARENT_RELATIVE              = 0x00000200
	KF_FLAG_SIMPLE_IDLIST                    = 0x00000100
	KF_FLAG_ALIAS_ONLY                       = 0x80000000
)

type OsVersionInfoEx struct {
	osVersionInfoSize uint32
	MajorVersion      uint32
	MinorVersion      uint32
	BuildNumber       uint32
	PlatformId        uint32
	CsdVersion        [128]uint16
	ServicePackMajor  uint16
	ServicePackMinor  uint16
	SuiteMask         uint16
	ProductType       byte
	_                 byte
}

const (
	EWX_LOGOFF          = 0x00000000
	EWX_SHUTDOWN        = 0x00000001
	EWX_REBOOT          = 0x00000002
	EWX_FORCE           = 0x00000004
	EWX_POWEROFF        = 0x00000008
	EWX_FORCEIFHUNG     = 0x00000010
	EWX_QUICKRESOLVE    = 0x00000020
	EWX_RESTARTAPPS     = 0x00000040
	EWX_HYBRID_SHUTDOWN = 0x00400000
	EWX_BOOTOPTIONS     = 0x01000000

	SHTDN_REASON_FLAG_COMMENT_REQUIRED          = 0x01000000
	SHTDN_REASON_FLAG_DIRTY_PROBLEM_ID_REQUIRED = 0x02000000
	SHTDN_REASON_FLAG_CLEAN_UI                  = 0x04000000
	SHTDN_REASON_FLAG_DIRTY_UI                  = 0x08000000
	SHTDN_REASON_FLAG_USER_DEFINED              = 0x40000000
	SHTDN_REASON_FLAG_PLANNED                   = 0x80000000
	SHTDN_REASON_MAJOR_OTHER                    = 0x00000000
	SHTDN_REASON_MAJOR_NONE                     = 0x00000000
	SHTDN_REASON_MAJOR_HARDWARE                 = 0x00010000
	SHTDN_REASON_MAJOR_OPERATINGSYSTEM          = 0x00020000
	SHTDN_REASON_MAJOR_SOFTWARE                 = 0x00030000
	SHTDN_REASON_MAJOR_APPLICATION              = 0x00040000
	SHTDN_REASON_MAJOR_SYSTEM                   = 0x00050000
	SHTDN_REASON_MAJOR_POWER                    = 0x00060000
	SHTDN_REASON_MAJOR_LEGACY_API               = 0x00070000
	SHTDN_REASON_MINOR_OTHER                    = 0x00000000
	SHTDN_REASON_MINOR_NONE                     = 0x000000ff
	SHTDN_REASON_MINOR_MAINTENANCE              = 0x00000001
	SHTDN_REASON_MINOR_INSTALLATION             = 0x00000002
	SHTDN_REASON_MINOR_UPGRADE                  = 0x00000003
	SHTDN_REASON_MINOR_RECONFIG                 = 0x00000004
	SHTDN_REASON_MINOR_HUNG                     = 0x00000005
	SHTDN_REASON_MINOR_UNSTABLE                 = 0x00000006
	SHTDN_REASON_MINOR_DISK                     = 0x00000007
	SHTDN_REASON_MINOR_PROCESSOR                = 0x00000008
	SHTDN_REASON_MINOR_NETWORKCARD              = 0x00000009
	SHTDN_REASON_MINOR_POWER_SUPPLY             = 0x0000000a
	SHTDN_REASON_MINOR_CORDUNPLUGGED            = 0x0000000b
	SHTDN_REASON_MINOR_ENVIRONMENT              = 0x0000000c
	SHTDN_REASON_MINOR_HARDWARE_DRIVER          = 0x0000000d
	SHTDN_REASON_MINOR_OTHERDRIVER              = 0x0000000e
	SHTDN_REASON_MINOR_BLUESCREEN               = 0x0000000F
	SHTDN_REASON_MINOR_SERVICEPACK              = 0x00000010
	SHTDN_REASON_MINOR_HOTFIX                   = 0x00000011
	SHTDN_REASON_MINOR_SECURITYFIX              = 0x00000012
	SHTDN_REASON_MINOR_SECURITY                 = 0x00000013
	SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY     = 0x00000014
	SHTDN_REASON_MINOR_WMI                      = 0x00000015
	SHTDN_REASON_MINOR_SERVICEPACK_UNINSTALL    = 0x00000016
	SHTDN_REASON_MINOR_HOTFIX_UNINSTALL         = 0x00000017
	SHTDN_REASON_MINOR_SECURITYFIX_UNINSTALL    = 0x00000018
	SHTDN_REASON_MINOR_MMC                      = 0x00000019
	SHTDN_REASON_MINOR_SYSTEMRESTORE            = 0x0000001a
	SHTDN_REASON_MINOR_TERMSRV                  = 0x00000020
	SHTDN_REASON_MINOR_DC_PROMOTION             = 0x00000021
	SHTDN_REASON_MINOR_DC_DEMOTION              = 0x00000022
	SHTDN_REASON_UNKNOWN                        = SHTDN_REASON_MINOR_NONE
	SHTDN_REASON_LEGACY_API                     = SHTDN_REASON_MAJOR_LEGACY_API | SHTDN_REASON_FLAG_PLANNED
	SHTDN_REASON_VALID_BIT_MASK                 = 0xc0ffffff

	SHUTDOWN_NORETRY = 0x1
)

// Flags used for GetModuleHandleEx
const (
	GET_MODULE_HANDLE_EX_FLAG_PIN                = 1
	GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT = 2
	GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS       = 4
)

// MUI function flag values
const (
	MUI_LANGUAGE_ID                    = 0x4
	MUI_LANGUAGE_NAME                  = 0x8
	MUI_MERGE_SYSTEM_FALLBACK          = 0x10
	MUI_MERGE_USER_FALLBACK            = 0x20
	MUI_UI_FALLBACK                    = MUI_MERGE_SYSTEM_FALLBACK | MUI_MERGE_USER_FALLBACK
	MUI_THREAD_LANGUAGES               = 0x40
	MUI_CONSOLE_FILTER                 = 0x100
	MUI_COMPLEX_SCRIPT_FILTER          = 0x200
	MUI_RESET_FILTERS                  = 0x001
	MUI_USER_PREFERRED_UI_LANGUAGES    = 0x10
	MUI_USE_INSTALLED_LANGUAGES        = 0x20
	MUI_USE_SEARCH_ALL_LANGUAGES       = 0x40
	MUI_LANG_NEUTRAL_PE_FILE           = 0x100
	MUI_NON_LANG_NEUTRAL_FILE          = 0x200
	MUI_MACHINE_LANGUAGE_SETTINGS      = 0x400
	MUI_FILETYPE_NOT_LANGUAGE_NEUTRAL  = 0x001
	MUI_FILETYPE_LANGUAGE_NEUTRAL_MAIN = 0x002
	MUI_FILETYPE_LANGUAGE_NEUTRAL_MUI  = 0x004
	MUI_QUERY_TYPE                     = 0x001
	MUI_QUERY_CHECKSUM                 = 0x002
	MUI_QUERY_LANGUAGE_NAME            = 0x004
	MUI_QUERY_RESOURCE_TYPES           = 0x008
	MUI_FILEINFO_VERSION               = 0x001

	MUI_FULL_LANGUAGE      = 0x01
	MUI_PARTIAL_LANGUAGE   = 0x02
	MUI_LIP_LANGUAGE       = 0x04
	MUI_LANGUAGE_INSTALLED = 0x20
	MUI_LANGUAGE_LICENSED  = 0x40
)

// FILE_INFO_BY_HANDLE_CLASS constants for SetFileInformationByHandle/GetFileInformationByHandleEx
const (
	FileBasicInfo                  = 0
	FileStandardInfo               = 1
	FileNameInfo                   = 2
	FileRenameInfo                 = 3
	FileDispositionInfo            = 4
	FileAllocationInfo             = 5
	FileEndOfFileInfo              = 6
	FileStreamInfo                 = 7
	FileCompressionInfo            = 8
	FileAttributeTagInfo           = 9
	FileIdBothDirectoryInfo        = 10
	FileIdBothDirectoryRestartInfo = 11
	FileIoPriorityHintInfo         = 12
	FileRemoteProtocolInfo         = 13
	FileFullDirectoryInfo          = 14
	FileFullDirectoryRestartInfo   = 15
	FileStorageInfo                = 16
	FileAlignmentInfo              = 17
	FileIdInfo                     = 18
	FileIdExtdDirectoryInfo        = 19
	FileIdExtdDirectoryRestartInfo = 20
	FileDispositionInfoEx          = 21
	FileRenameInfoEx               = 22
	FileCaseSensitiveInfo          = 23
	FileNormalizedNameInfo         = 24
)

// LoadLibrary flags for determining from where to search for a DLL
const (
	DONT_RESOLVE_DLL_REFERENCES               = 0x1
	LOAD_LIBRARY_AS_DATAFILE                  = 0x2
	LOAD_WITH_ALTERED_SEARCH_PATH             = 0x8
	LOAD_IGNORE_CODE_AUTHZ_LEVEL              = 0x10
	LOAD_LIBRARY_AS_IMAGE_RESOURCE            = 0x20
	LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE        = 0x40
	LOAD_LIBRARY_REQUIRE_SIGNED_TARGET        = 0x80
	LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR          = 0x100
	LOAD_LIBRARY_SEARCH_APPLICATION_DIR       = 0x200
	LOAD_LIBRARY_SEARCH_USER_DIRS             = 0x400
	LOAD_LIBRARY_SEARCH_SYSTEM32              = 0x800
	LOAD_LIBRARY_SEARCH_DEFAULT_DIRS          = 0x1000
	LOAD_LIBRARY_SAFE_CURRENT_DIRS            = 0x00002000
	LOAD_LIBRARY_SEARCH_SYSTEM32_NO_FORWARDER = 0x00004000
	LOAD_LIBRARY_OS_INTEGRITY_CONTINUITY      = 0x00008000
)

// RegNotifyChangeKeyValue notifyFilter flags.
const (
	// REG_NOTIFY_CHANGE_NAME notifies the caller if a subkey is added or deleted.
	REG_NOTIFY_CHANGE_NAME = 0x00000001

	// REG_NOTIFY_CHANGE_ATTRIBUTES notifies the caller of changes to the attributes of the key, such as the security descriptor information.
	REG_NOTIFY_CHANGE_ATTRIBUTES = 0x00000002

	// REG_NOTIFY_CHANGE_LAST_SET notifies the caller of changes to a value of the key. This can include adding or deleting a value, or changing an existing value.
	REG_NOTIFY_CHANGE_LAST_SET = 0x00000004

	// REG_NOTIFY_CHANGE_SECURITY notifies the caller of changes to the security descriptor of the key.
	REG_NOTIFY_CHANGE_SECURITY = 0x00000008

	// REG_NOTIFY_THREAD_AGNOSTIC indicates that the lifetime of the registration must not be tied to the lifetime of the thread issuing the RegNotifyChangeKeyValue call. Note: This flag value is only supported in Windows 8 and later.
	REG_NOTIFY_THREAD_AGNOSTIC = 0x10000000
)

type CommTimeouts struct {
	ReadIntervalTimeout         uint32
	ReadTotalTimeoutMultiplier  uint32
	ReadTotalTimeoutConstant    uint32
	WriteTotalTimeoutMultiplier uint32
	WriteTotalTimeoutConstant   uint32
}

// NTUnicodeString is a UTF-16 string for NT native APIs, corresponding to UNICODE_STRING.
type NTUnicodeString struct {
	Length        uint16
	MaximumLength uint16
	Buffer        *uint16
}

// NTString is an ANSI string for NT native APIs, corresponding to STRING.
type NTString struct {
	Length        uint16
	MaximumLength uint16
	Buffer        *byte
}

type LIST_ENTRY struct {
	Flink *LIST_ENTRY
	Blink *LIST_ENTRY
}

type RUNTIME_FUNCTION struct {
	BeginAddress uint32
	EndAddress   uint32
	UnwindData   uint32
}

type LDR_DATA_TABLE_ENTRY struct {
	reserved1          [2]uintptr
	InMemoryOrderLinks LIST_ENTRY
	reserved2          [2]uintptr
	DllBase            uintptr
	reserved3          [2]uintptr
	FullDllName        NTUnicodeString
	reserved4          [8]byte
	reserved5          [3]uintptr
	reserved6          uintptr
	TimeDateStamp      uint32
}

type PEB_LDR_DATA struct {
	reserved1               [8]byte
	reserved2               [3]uintptr
	InMemoryOrderModuleList LIST_ENTRY
}

type CURDIR struct {
	DosPath NTUnicodeString
	Handle  Handle
}

type RTL_DRIVE_LETTER_CURDIR struct {
	Flags     uint16
	Length    uint16
	TimeStamp uint32
	DosPath   NTString
}

type RTL_USER_PROCESS_PARAMETERS struct {
	MaximumLength, Length uint32

	Flags, DebugFlags uint32

	ConsoleHandle                                Handle
	ConsoleFlags                                 uint32
	StandardInput, StandardOutput, StandardError Handle

	CurrentDirectory CURDIR
	DllPath          NTUnicodeString
	ImagePathName    NTUnicodeString
	CommandLine      NTUnicodeString
	Environment      unsafe.Pointer

	StartingX, StartingY, CountX, CountY, CountCharsX, CountCharsY, FillAttribute uint32

	WindowFlags, ShowWindowFlags                     uint32
	WindowTitle, DesktopInfo, ShellInfo, RuntimeData NTUnicodeString
	CurrentDirectories                               [32]RTL_DRIVE_LETTER_CURDIR

	EnvironmentSize, EnvironmentVersion uintptr

	PackageDependencyData unsafe.Pointer
	ProcessGroupId        uint32
	LoaderThreads         uint32

	RedirectionDllName               NTUnicodeString
	HeapPartitionName                NTUnicodeString
	DefaultThreadpoolCpuSetMasks     uintptr
	DefaultThreadpoolCpuSetMaskCount uint32
}

type PEB struct {
	reserved1              [2]byte
	BeingDebugged          byte
	BitField               byte
	reserved3              uintptr
	ImageBaseAddress       uintptr
	Ldr                    *PEB_LDR_DATA
	ProcessParameters      *RTL_USER_PROCESS_PARAMETERS
	reserved4              [3]uintptr
	AtlThunkSListPtr       uintptr
	reserved5              uintptr
	reserved6              uint32
	reserved7              uintptr
	reserved8              uint32
	AtlThunkSListPtr32     uint32
	reserved9              [45]uintptr
	reserved10             [96]byte
	PostProcessInitRoutine uintptr
	reserved11             [128]byte
	reserved12             [1]uintptr
	SessionId              uint32
}

type OBJECT_ATTRIBUTES struct {
	Length             uint32
	RootDirectory      Handle
	ObjectName         *NTUnicodeString
	Attributes         uint32
	SecurityDescriptor *SECURITY_DESCRIPTOR
	SecurityQoS        *SECURITY_QUALITY_OF_SERVICE
}

// Values for the Attributes member of OBJECT_ATTRIBUTES.
const (
	OBJ_INHERIT                       = 0x00000002
	OBJ_PERMANENT                     = 0x00000010
	OBJ_EXCLUSIVE                     = 0x00000020
	OBJ_CASE_INSENSITIVE              = 0x00000040
	OBJ_OPENIF                        = 0x00000080
	OBJ_OPENLINK                      = 0x00000100
	OBJ_KERNEL_HANDLE                 = 0x00000200
	OBJ_FORCE_ACCESS_CHECK            = 0x00000400
	OBJ_IGNORE_IMPERSONATED_DEVICEMAP = 0x00000800
	OBJ_DONT_REPARSE                  = 0x00001000
	OBJ_VALID_ATTRIBUTES              = 0x00001FF2
)

type IO_STATUS_BLOCK struct {
	Status      NTStatus
	Information uintptr
}

type RTLP_CURDIR_REF struct {
	RefCount int32
	Handle   Handle
}

type RTL_RELATIVE_NAME struct {
	RelativeName        NTUnicodeString
	ContainingDirectory Handle
	CurDirRef           *RTLP_CURDIR_REF
}

const (
	// CreateDisposition flags for NtCreateFile and NtCreateNamedPipeFile.
	FILE_SUPERSEDE           = 0x00000000
	FILE_OPEN                = 0x00000001
	FILE_CREATE              = 0x00000002
	FILE_OPEN_IF             = 0x00000003
	FILE_OVERWRITE           = 0x00000004
	FILE_OVERWRITE_IF        = 0x00000005
	FILE_MAXIMUM_DISPOSITION = 0x00000005

	// CreateOptions flags for NtCreateFile and NtCreateNamedPipeFile.
	FILE_DIRECTORY_FILE            = 0x00000001
	FILE_WRITE_THROUGH             = 0x00000002
	FILE_SEQUENTIAL_ONLY           = 0x00000004
	FILE_NO_INTERMEDIATE_BUFFERING = 0x00000008
	FILE_SYNCHRONOUS_IO_ALERT      = 0x00000010
	FILE_SYNCHRONOUS_IO_NONALERT   = 0x00000020
	FILE_NON_DIRECTORY_FILE        = 0x00000040
	FILE_CREATE_TREE_CONNECTION    = 0x00000080
	FILE_COMPLETE_IF_OPLOCKED      = 0x00000100
	FILE_NO_EA_KNOWLEDGE           = 0x00000200
	FILE_OPEN_REMOTE_INSTANCE      = 0x00000400
	FILE_RANDOM_ACCESS             = 0x00000800
	FILE_DELETE_ON_CLOSE           = 0x00001000
	FILE_OPEN_BY_FILE_ID           = 0x00002000
	FILE_OPEN_FOR_BACKUP_INTENT    = 0x00004000
	FILE_NO_COMPRESSION            = 0x00008000
	FILE_OPEN_REQUIRING_OPLOCK     = 0x00010000
	FILE_DISALLOW_EXCLUSIVE        = 0x00020000
	FILE_RESERVE_OPFILTER          = 0x00100000
	FILE_OPEN_REPARSE_POINT        = 0x00200000
	FILE_OPEN_NO_RECALL            = 0x00400000
	FILE_OPEN_FOR_FREE_SPACE_QUERY = 0x00800000

	// Parameter constants for NtCreateNamedPipeFile.

	FILE_PIPE_BYTE_STREAM_TYPE = 0x00000000
	FILE_PIPE_MESSAGE_TYPE     = 0x00000001

	FILE_PIPE_ACCEPT_REMOTE_CLIENTS = 0x00000000
	FILE_PIPE_REJECT_REMOTE_CLIENTS = 0x00000002

	FILE_PIPE_TYPE_VALID_MASK = 0x00000003

	FILE_PIPE_BYTE_STREAM_MODE = 0x00000000
	FILE_PIPE_MESSAGE_MODE     = 0x00000001

	FILE_PIPE_QUEUE_OPERATION    = 0x00000000
	FILE_PIPE_COMPLETE_OPERATION = 0x00000001

	FILE_PIPE_INBOUND     = 0x00000000
	FILE_PIPE_OUTBOUND    = 0x00000001
	FILE_PIPE_FULL_DUPLEX = 0x00000002

	FILE_PIPE_DISCONNECTED_STATE = 0x00000001
	FILE_PIPE_LISTENING_STATE    = 0x00000002
	FILE_PIPE_CONNECTED_STATE    = 0x00000003
	FILE_PIPE_CLOSING_STATE      = 0x00000004

	FILE_PIPE_CLIENT_END = 0x00000000
	FILE_PIPE_SERVER_END = 0x00000001
)

const (
	// FileInformationClass for NtSetInformationFile
	FileBasicInformation                         = 4
	FileRenameInformation                        = 10
	FileDispositionInformation                   = 13
	FilePositionInformation                      = 14
	FileEndOfFileInformation                     = 20
	FileValidDataLengthInformation               = 39
	FileShortNameInformation                     = 40
	FileIoPriorityHintInformation                = 43
	FileReplaceCompletionInformation             = 61
	FileDispositionInformationEx                 = 64
	FileCaseSensitiveInformation                 = 71
	FileLinkInformation                          = 72
	FileCaseSensitiveInformationForceAccessCheck = 75
	FileKnownFolderInformation                   = 76

	// Flags for FILE_RENAME_INFORMATION
	FILE_RENAME_REPLACE_IF_EXISTS                    = 0x00000001
	FILE_RENAME_POSIX_SEMANTICS                      = 0x00000002
	FILE_RENAME_SUPPRESS_PIN_STATE_INHERITANCE       = 0x00000004
	FILE_RENAME_SUPPRESS_STORAGE_RESERVE_INHERITANCE = 0x00000008
	FILE_RENAME_NO_INCREASE_AVAILABLE_SPACE          = 0x00000010
	FILE_RENAME_NO_DECREASE_AVAILABLE_SPACE          = 0x00000020
	FILE_RENAME_PRESERVE_AVAILABLE_SPACE             = 0x00000030
	FILE_RENAME_IGNORE_READONLY_ATTRIBUTE            = 0x00000040
	FILE_RENAME_FORCE_RESIZE_TARGET_SR               = 0x00000080
	FILE_RENAME_FORCE_RESIZE_SOURCE_SR               = 0x00000100
	FILE_RENAME_FORCE_RESIZE_SR                      = 0x00000180

	// Flags for FILE_DISPOSITION_INFORMATION_EX
	FILE_DISPOSITION_DO_NOT_DELETE             = 0x00000000
	FILE_DISPOSITION_DELETE                    = 0x00000001
	FILE_DISPOSITION_POSIX_SEMANTICS           = 0x00000002
	FILE_DISPOSITION_FORCE_IMAGE_SECTION_CHECK = 0x00000004
	FILE_DISPOSITION_ON_CLOSE                  = 0x00000008
	FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE = 0x00000010

	// Flags for FILE_CASE_SENSITIVE_INFORMATION
	FILE_CS_FLAG_CASE_SENSITIVE_DIR = 0x00000001

	// Flags for FILE_LINK_INFORMATION
	FILE_LINK_REPLACE_IF_EXISTS                    = 0x00000001
	FILE_LINK_POSIX_SEMANTICS                      = 0x00000002
	FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE = 0x00000008
	FILE_LINK_NO_INCREASE_AVAILABLE_SPACE          = 0x00000010
	FILE_LINK_NO_DECREASE_AVAILABLE_SPACE          = 0x00000020
	FILE_LINK_PRESERVE_AVAILABLE_SPACE             = 0x00000030
	FILE_LINK_IGNORE_READONLY_ATTRIBUTE            = 0x00000040
	FILE_LINK_FORCE_RESIZE_TARGET_SR               = 0x00000080
	FILE_LINK_FORCE_RESIZE_SOURCE_SR               = 0x00000100
	FILE_LINK_FORCE_RESIZE_SR                      = 0x00000180
)

// ProcessInformationClasses for NtQueryInformationProcess and NtSetInformationProcess.
const (
	ProcessBasicInformation = iota
	ProcessQuotaLimits
	ProcessIoCounters
	ProcessVmCounters
	ProcessTimes
	ProcessBasePriority
	ProcessRaisePriority
	ProcessDebugPort
	ProcessExceptionPort
	ProcessAccessToken
	ProcessLdtInformation
	ProcessLdtSize
	ProcessDefaultHardErrorMode
	ProcessIoPortHandlers
	ProcessPooledUsageAndLimits
	ProcessWorkingSetWatch
	ProcessUserModeIOPL
	ProcessEnableAlignmentFaultFixup
	ProcessPriorityClass
	ProcessWx86Information
	ProcessHandleCount
	ProcessAffinityMask
	ProcessPriorityBoost
	ProcessDeviceMap
	ProcessSessionInformation
	ProcessForegroundInformation
	ProcessWow64Information
	ProcessImageFileName
	ProcessLUIDDeviceMapsEnabled
	ProcessBreakOnTermination
	ProcessDebugObjectHandle
	ProcessDebugFlags
	ProcessHandleTracing
	ProcessIoPriority
	ProcessExecuteFlags
	ProcessTlsInformation
	ProcessCookie
	ProcessImageInformation
	ProcessCycleTime
	ProcessPagePriority
	ProcessInstrumentationCallback
	ProcessThreadStackAllocation
	ProcessWorkingSetWatchEx
	ProcessImageFileNameWin32
	ProcessImageFileMapping
	ProcessAffinityUpdateMode
	ProcessMemoryAllocationMode
	ProcessGroupInformation
	ProcessTokenVirtualizationEnabled
	ProcessConsoleHostProcess
	ProcessWindowInformation
	ProcessHandleInformation
	ProcessMitigationPolicy
	ProcessDynamicFunctionTableInformation
	ProcessHandleCheckingMode
	ProcessKeepAliveCount
	ProcessRevokeFileHandles
	ProcessWorkingSetControl
	ProcessHandleTable
	ProcessCheckStackExtentsMode
	ProcessCommandLineInformation
	ProcessProtectionInformation
	ProcessMemoryExhaustion
	ProcessFaultInformation
	ProcessTelemetryIdInformation
	ProcessCommitReleaseInformation
	ProcessDefaultCpuSetsInformation
	ProcessAllowedCpuSetsInformation
	ProcessSubsystemProcess
	ProcessJobMemoryInformation
	ProcessInPrivate
	ProcessRaiseUMExceptionOnInvalidHandleClose
	ProcessIumChallengeResponse
	ProcessChildProcessInformation
	ProcessHighGraphicsPriorityInformation
	ProcessSubsystemInformation
	ProcessEnergyValues
	ProcessActivityThrottleState
	ProcessActivityThrottlePolicy
	ProcessWin32kSyscallFilterInformation
	ProcessDisableSystemAllowedCpuSets
	ProcessWakeInformation
	ProcessEnergyTrackingState
	ProcessManageWritesToExecutableMemory
	ProcessCaptureTrustletLiveDump
	ProcessTelemetryCoverage
	ProcessEnclaveInformation
	ProcessEnableReadWriteVmLogging
	ProcessUptimeInformation
	ProcessImageSection
	ProcessDebugAuthInformation
	ProcessSystemResourceManagement
	ProcessSequenceNumber
	ProcessLoaderDetour
	ProcessSecurityDomainInformation
	ProcessCombineSecurityDomainsInformation
	ProcessEnableLogging
	ProcessLeapSecondInformation
	ProcessFiberShadowStackAllocation
	ProcessFreeFiberShadowStackAllocation
	ProcessAltSystemCallInformation
	ProcessDynamicEHContinuationTargets
	ProcessDynamicEnforcedCetCompatibleRanges
)

type PROCESS_BASIC_INFORMATION struct {
	ExitStatus                   NTStatus
	PebBaseAddress               *PEB
	AffinityMask                 uintptr
	BasePriority                 int32
	UniqueProcessId              uintptr
	InheritedFromUniqueProcessId uintptr
}

type SYSTEM_PROCESS_INFORMATION struct {
	NextEntryOffset              uint32
	NumberOfThreads              uint32
	WorkingSetPrivateSize        int64
	HardFaultCount               uint32
	NumberOfThreadsHighWatermark uint32
	CycleTime                    uint64
	CreateTime                   int64
	UserTime                     int64
	KernelTime                   int64
	ImageName                    NTUnicodeString
	BasePriority                 int32
	UniqueProcessID              uintptr
	InheritedFromUniqueProcessID uintptr
	HandleCount                  uint32
	SessionID                    uint32
	UniqueProcessKey             *uint32
	PeakVirtualSize              uintptr
	VirtualSize                  uintptr
	PageFaultCount               uint32
	PeakWorkingSetSize           uintptr
	WorkingSetSize               uintptr
	QuotaPeakPagedPoolUsage      uintptr
	QuotaPagedPoolUsage          uintptr
	QuotaPeakNonPagedPoolUsage   uintptr
	QuotaNonPagedPoolUsage       uintptr
	PagefileUsage                uintptr
	PeakPagefileUsage            uintptr
	PrivatePageCount             uintptr
	ReadOperationCount           int64
	WriteOperationCount          int64
	OtherOperationCount          int64
	ReadTransferCount            int64
	WriteTransferCount           int64
	OtherTransferCount           int64
}

// SystemInformationClasses for NtQuerySystemInformation and NtSetSystemInformation
const (
	SystemBasicInformation = iota
	SystemProcessorInformation
	SystemPerformanceInformation
	SystemTimeOfDayInformation
	SystemPathInformation
	SystemProcessInformation
	SystemCallCountInformation
	SystemDeviceInformation
	SystemProcessorPerformanceInformation
	SystemFlagsInformation
	SystemCallTimeInformation
	SystemModuleInformation
	SystemLocksInformation
	SystemStackTraceInformation
	SystemPagedPoolInformation
	SystemNonPagedPoolInformation
	SystemHandleInformation
	SystemObjectInformation
	SystemPageFileInformation
	SystemVdmInstemulInformation
	SystemVdmBopInformation
	SystemFileCacheInformation
	SystemPoolTagInformation
	SystemInterruptInformation
	SystemDpcBehaviorInformation
	SystemFullMemoryInformation
	SystemLoadGdiDriverInformation
	SystemUnloadGdiDriverInformation
	SystemTimeAdjustmentInformation
	SystemSummaryMemoryInformation
	SystemMirrorMemoryInformation
	SystemPerformanceTraceInformation
	systemObsolete0
	SystemExceptionInformation
	SystemCrashDumpStateInformation
	SystemKernelDebuggerInformation
	SystemContextSwitchInformation
	SystemRegistryQuotaInformation
	SystemExtendServiceTableInformation
	SystemPrioritySeperation
	SystemVerifierAddDriverInformation
	SystemVerifierRemoveDriverInformation
	SystemProcessorIdleInformation
	SystemLegacyDriverInformation
	SystemCurrentTimeZoneInformation
	SystemLookasideInformation
	SystemTimeSlipNotification
	SystemSessionCreate
	SystemSessionDetach
	SystemSessionInformation
	SystemRangeStartInformation
	SystemVerifierInformation
	SystemVerifierThunkExtend
	SystemSessionProcessInformation
	SystemLoadGdiDriverInSystemSpace
	SystemNumaProcessorMap
	SystemPrefetcherInformation
	SystemExtendedProcessInformation
	SystemRecommendedSharedDataAlignment
	SystemComPlusPackage
	SystemNumaAvailableMemory
	SystemProcessorPowerInformation
	SystemEmulationBasicInformation
	SystemEmulationProcessorInformation
	SystemExtendedHandleInformation
	SystemLostDelayedWriteInformation
	SystemBigPoolInformation
	SystemSessionPoolTagInformation
	SystemSessionMappedViewInformation
	SystemHotpatchInformation
	SystemObjectSecurityMode
	SystemWatchdogTimerHandler
	SystemWatchdogTimerInformation
	SystemLogicalProcessorInformation
	SystemWow64SharedInformationObsolete
	SystemRegisterFirmwareTableInformationHandler
	SystemFirmwareTableInformation
	SystemModuleInformationEx
	SystemVerifierTriageInformation
	SystemSuperfetchInformation
	SystemMemoryListInformation
	SystemFileCacheInformationEx
	SystemThreadPriorityClientIdInformation
	SystemProcessorIdleCycleTimeInformation
	SystemVerifierCancellationInformation
	SystemProcessorPowerInformationEx
	SystemRefTraceInformation
	SystemSpecialPoolInformation
	SystemProcessIdInformation
	SystemErrorPortInformation
	SystemBootEnvironmentInformation
	SystemHypervisorInformation
	SystemVerifierInformationEx
	SystemTimeZoneInformation
	SystemImageFileExecutionOptionsInformation
	SystemCoverageInformation
	SystemPrefetchPatchInformation
	SystemVerifierFaultsInformation
	SystemSystemPartitionInformation
	SystemSystemDiskInformation
	SystemProcessorPerformanceDistribution
	SystemNumaProximityNodeInformation
	SystemDynamicTimeZoneInformation
	SystemCodeIntegrityInformation
	SystemProcessorMicrocodeUpdateInformation
	SystemProcessorBrandString
	SystemVirtualAddressInformation
	SystemLogicalProcessorAndGroupInformation
	SystemProcessorCycleTimeInformation
	SystemStoreInformation
	SystemRegistryAppendString
	SystemAitSamplingValue
	SystemVhdBootInformation
	SystemCpuQuotaInformation
	SystemNativeBasicInformation
	systemSpare1
	SystemLowPriorityIoInformation
	SystemTpmBootEntropyInformation
	SystemVerifierCountersInformation
	SystemPagedPoolInformationEx
	SystemSystemPtesInformationEx
	SystemNodeDistanceInformation
	SystemAcpiAuditInformation
	SystemBasicPerformanceInformation
	SystemQueryPerformanceCounterInformation
	SystemSessionBigPoolInformation
	SystemBootGraphicsInformation
	SystemScrubPhysicalMemoryInformation
	SystemBadPageInformation
	SystemProcessorProfileControlArea
	SystemCombinePhysicalMemoryInformation
	SystemEntropyInterruptTimingCallback
	SystemConsoleInformation
	SystemPlatformBinaryInformation
	SystemThrottleNotificationInformation
	SystemHypervisorProcessorCountInformation
	SystemDeviceDataInformation
	SystemDeviceDataEnumerationInformation
	SystemMemoryTopologyInformation
	SystemMemoryChannelInformation
	SystemBootLogoInformation
	SystemProcessorPerformanceInformationEx
	systemSpare0
	SystemSecureBootPolicyInformation
	SystemPageFileInformationEx
	SystemSecureBootInformation
	SystemEntropyInterruptTimingRawInformation
	SystemPortableWorkspaceEfiLauncherInformation
	SystemFullProcessInformation
	SystemKernelDebuggerInformationEx
	SystemBootMetadataInformation
	SystemSoftRebootInformation
	SystemElamCertificateInformation
	SystemOfflineDumpConfigInformation
	SystemProcessorFeaturesInformation
	SystemRegistryReconciliationInformation
	SystemEdidInformation
	SystemManufacturingInformation
	SystemEnergyEstimationConfigInformation
	SystemHypervisorDetailInformation
	SystemProcessorCycleStatsInformation
	SystemVmGenerationCountInformation
	SystemTrustedPlatformModuleInformation
	SystemKernelDebuggerFlags
	SystemCodeIntegrityPolicyInformation
	SystemIsolatedUserModeInformation
	SystemHardwareSecurityTestInterfaceResultsInformation
	SystemSingleModuleInformation
	SystemAllowedCpuSetsInformation
	SystemDmaProtectionInformation
	SystemInterruptCpuSetsInformation
	SystemSecureBootPolicyFullInformation
	SystemCodeIntegrityPolicyFullInformation
	SystemAffinitizedInterruptProcessorInformation
	SystemRootSiloInformation
)

type RTL_PROCESS_MODULE_INFORMATION struct {
	Section          Handle
	MappedBase       uintptr
	ImageBase        uintptr
	ImageSize        uint32
	Flags            uint32
	LoadOrderIndex   uint16
	InitOrderIndex   uint16
	LoadCount        uint16
	OffsetToFileName uint16
	FullPathName     [256]byte
}

type RTL_PROCESS_MODULES struct {
	NumberOfModules uint32
	Modules         [1]RTL_PROCESS_MODULE_INFORMATION
}

// Constants for LocalAlloc flags.
const (
	LMEM_FIXED          = 0x0
	LMEM_MOVEABLE       = 0x2
	LMEM_NOCOMPACT      = 0x10
	LMEM_NODISCARD      = 0x20
	LMEM_ZEROINIT       = 0x40
	LMEM_MODIFY         = 0x80
	LMEM_DISCARDABLE    = 0xf00
	LMEM_VALID_FLAGS    = 0xf72
	LMEM_INVALID_HANDLE = 0x8000
	LHND                = LMEM_MOVEABLE | LMEM_ZEROINIT
	LPTR                = LMEM_FIXED | LMEM_ZEROINIT
	NONZEROLHND         = LMEM_MOVEABLE
	NONZEROLPTR         = LMEM_FIXED
)

// Constants for the CreateNamedPipe-family of functions.
const (
	PIPE_ACCESS_INBOUND  = 0x1
	PIPE_ACCESS_OUTBOUND = 0x2
	PIPE_ACCESS_DUPLEX   = 0x3

	PIPE_CLIENT_END = 0x0
	PIPE_SERVER_END = 0x1

	PIPE_WAIT                  = 0x0
	PIPE_NOWAIT                = 0x1
	PIPE_READMODE_BYTE         = 0x0
	PIPE_READMODE_MESSAGE      = 0x2
	PIPE_TYPE_BYTE             = 0x0
	PIPE_TYPE_MESSAGE          = 0x4
	PIPE_ACCEPT_REMOTE_CLIENTS = 0x0
	PIPE_REJECT_REMOTE_CLIENTS = 0x8

	PIPE_UNLIMITED_INSTANCES = 255
)

// Constants for security attributes when opening named pipes.
const (
	SECURITY_ANONYMOUS      = SecurityAnonymous << 16
	SECURITY_IDENTIFICATION = SecurityIdentification << 16
	SECURITY_IMPERSONATION  = SecurityImpersonation << 16
	SECURITY_DELEGATION     = SecurityDelegation << 16

	SECURITY_CONTEXT_TRACKING = 0x40000
	SECURITY_EFFECTIVE_ONLY   = 0x80000

	SECURITY_SQOS_PRESENT     = 0x100000
	SECURITY_VALID_SQOS_FLAGS = 0x1f0000
)

// ResourceID represents a 16-bit resource identifier, traditionally created with the MAKEINTRESOURCE macro.
type ResourceID uint16

// ResourceIDOrString must be either a ResourceID, to specify a resource or resource type by ID,
// or a string, to specify a resource or resource type by name.
type ResourceIDOrString interface{}

// Predefined resource names and types.
var (
	// Predefined names.
	CREATEPROCESS_MANIFEST_RESOURCE_ID                 ResourceID = 1
	ISOLATIONAWARE_MANIFEST_RESOURCE_ID                ResourceID = 2
	ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID ResourceID = 3
	ISOLATIONPOLICY_MANIFEST_RESOURCE_ID               ResourceID = 4
	ISOLATIONPOLICY_BROWSER_MANIFEST_RESOURCE_ID       ResourceID = 5
	MINIMUM_RESERVED_MANIFEST_RESOURCE_ID              ResourceID = 1  // inclusive
	MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID              ResourceID = 16 // inclusive

	// Predefined types.
	RT_CURSOR       ResourceID = 1
	RT_BITMAP       ResourceID = 2
	RT_ICON         ResourceID = 3
	RT_MENU         ResourceID = 4
	RT_DIALOG       ResourceID = 5
	RT_STRING       ResourceID = 6
	RT_FONTDIR      ResourceID = 7
	RT_FONT         ResourceID = 8
	RT_ACCELERATOR  ResourceID = 9
	RT_RCDATA       ResourceID = 10
	RT_MESSAGETABLE ResourceID = 11
	RT_GROUP_CURSOR ResourceID = 12
	RT_GROUP_ICON   ResourceID = 14
	RT_VERSION      ResourceID = 16
	RT_DLGINCLUDE   ResourceID = 17
	RT_PLUGPLAY     ResourceID = 19
	RT_VXD          ResourceID = 20
	RT_ANICURSOR    ResourceID = 21
	RT_ANIICON      ResourceID = 22
	RT_HTML         ResourceID = 23
	RT_MANIFEST     ResourceID = 24
)

type VS_FIXEDFILEINFO struct {
	Signature        uint32
	StrucVersion     uint32
	FileVersionMS    uint32
	FileVersionLS    uint32
	ProductVersionMS uint32
	ProductVersionLS uint32
	FileFlagsMask    uint32
	FileFlags        uint32
	FileOS           uint32
	FileType         uint32
	FileSubtype      uint32
	FileDateMS       uint32
	FileDateLS       uint32
}

type COAUTHIDENTITY struct {
	User           *uint16
	UserLength     uint32
	Domain         *uint16
	DomainLength   uint32
	Password       *uint16
	PasswordLength uint32
	Flags          uint32
}

type COAUTHINFO struct {
	AuthnSvc           uint32
	AuthzSvc           uint32
	ServerPrincName    *uint16
	AuthnLevel         uint32
	ImpersonationLevel uint32
	AuthIdentityData   *COAUTHIDENTITY
	Capabilities       uint32
}

type COSERVERINFO struct {
	Reserved1 uint32
	Aame      *uint16
	AuthInfo  *COAUTHINFO
	Reserved2 uint32
}

type BIND_OPTS3 struct {
	CbStruct          uint32
	Flags             uint32
	Mode              uint32
	TickCountDeadline uint32
	TrackFlags        uint32
	ClassContext      uint32
	Locale            uint32
	ServerInfo        *COSERVERINFO
	Hwnd              HWND
}

const (
	CLSCTX_INPROC_SERVER          = 0x1
	CLSCTX_INPROC_HANDLER         = 0x2
	CLSCTX_LOCAL_SERVER           = 0x4
	CLSCTX_INPROC_SERVER16        = 0x8
	CLSCTX_REMOTE_SERVER          = 0x10
	CLSCTX_INPROC_HANDLER16       = 0x20
	CLSCTX_RESERVED1              = 0x40
	CLSCTX_RESERVED2              = 0x80
	CLSCTX_RESERVED3              = 0x100
	CLSCTX_RESERVED4              = 0x200
	CLSCTX_NO_CODE_DOWNLOAD       = 0x400
	CLSCTX_RESERVED5              = 0x800
	CLSCTX_NO_CUSTOM_MARSHAL      = 0x1000
	CLSCTX_ENABLE_CODE_DOWNLOAD   = 0x2000
	CLSCTX_NO_FAILURE_LOG         = 0x4000
	CLSCTX_DISABLE_AAA            = 0x8000
	CLSCTX_ENABLE_AAA             = 0x10000
	CLSCTX_FROM_DEFAULT_CONTEXT   = 0x20000
	CLSCTX_ACTIVATE_32_BIT_SERVER = 0x40000
	CLSCTX_ACTIVATE_64_BIT_SERVER = 0x80000
	CLSCTX_ENABLE_CLOAKING        = 0x100000
	CLSCTX_APPCONTAINER           = 0x400000
	CLSCTX_ACTIVATE_AAA_AS_IU     = 0x800000
	CLSCTX_PS_DLL                 = 0x80000000

	COINIT_MULTITHREADED     = 0x0
	COINIT_APARTMENTTHREADED = 0x2
	COINIT_DISABLE_OLE1DDE   = 0x4
	COINIT_SPEED_OVER_MEMORY = 0x8
)

// Flag for QueryFullProcessImageName.
const PROCESS_NAME_NATIVE = 1

type ModuleInfo struct {
	BaseOfDll   uintptr
	SizeOfImage uint32
	EntryPoint  uintptr
}

const ALL_PROCESSOR_GROUPS = 0xFFFF

type Rect struct {
	Left   int32
	Top    int32
	Right  int32
	Bottom int32
}

type GUIThreadInfo struct {
	Size        uint32
	Flags       uint32
	Active      HWND
	Focus       HWND
	Capture     HWND
	MenuOwner   HWND
	MoveSize    HWND
	CaretHandle HWND
	CaretRect   Rect
}

const (
	DWMWA_NCRENDERING_ENABLED            = 1
	DWMWA_NCRENDERING_POLICY             = 2
	DWMWA_TRANSITIONS_FORCEDISABLED      = 3
	DWMWA_ALLOW_NCPAINT                  = 4
	DWMWA_CAPTION_BUTTON_BOUNDS          = 5
	DWMWA_NONCLIENT_RTL_LAYOUT           = 6
	DWMWA_FORCE_ICONIC_REPRESENTATION    = 7
	DWMWA_FLIP3D_POLICY                  = 8
	DWMWA_EXTENDED_FRAME_BOUNDS          = 9
	DWMWA_HAS_ICONIC_BITMAP              = 10
	DWMWA_DISALLOW_PEEK                  = 11
	DWMWA_EXCLUDED_FROM_PEEK             = 12
	DWMWA_CLOAK                          = 13
	DWMWA_CLOAKED                        = 14
	DWMWA_FREEZE_REPRESENTATION          = 15
	DWMWA_PASSIVE_UPDATE_MODE            = 16
	DWMWA_USE_HOSTBACKDROPBRUSH          = 17
	DWMWA_USE_IMMERSIVE_DARK_MODE        = 20
	DWMWA_WINDOW_CORNER_PREFERENCE       = 33
	DWMWA_BORDER_COLOR                   = 34
	DWMWA_CAPTION_COLOR                  = 35
	DWMWA_TEXT_COLOR                     = 36
	DWMWA_VISIBLE_FRAME_BORDER_THICKNESS = 37
)

type WSAQUERYSET struct {
	Size                uint32
	ServiceInstanceName *uint16
	ServiceClassId      *GUID
	Version             *WSAVersion
	Comment             *uint16
	NameSpace           uint32
	NSProviderId        *GUID
	Context             *uint16
	NumberOfProtocols   uint32
	AfpProtocols        *AFProtocols
	QueryString         *uint16
	NumberOfCsAddrs     uint32
	SaBuffer            *CSAddrInfo
	OutputFlags         uint32
	Blob                *BLOB
}

type WSAVersion struct {
	Version                 uint32
	EnumerationOfComparison int32
}

type AFProtocols struct {
	AddressFamily int32
	Protocol      int32
}

type CSAddrInfo struct {
	LocalAddr  SocketAddress
	RemoteAddr SocketAddress
	SocketType int32
	Protocol   int32
}

type BLOB struct {
	Size     uint32
	BlobData *byte
}
  07070100000EEA000081A4000000000000000000000001645E367C0000036B000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/types_windows_386.go  // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package windows

type WSAData struct {
	Version      uint16
	HighVersion  uint16
	Description  [WSADESCRIPTION_LEN + 1]byte
	SystemStatus [WSASYS_STATUS_LEN + 1]byte
	MaxSockets   uint16
	MaxUdpDg     uint16
	VendorInfo   *byte
}

type Servent struct {
	Name    *byte
	Aliases **byte
	Port    uint16
	Proto   *byte
}

type JOBOBJECT_BASIC_LIMIT_INFORMATION struct {
	PerProcessUserTimeLimit int64
	PerJobUserTimeLimit     int64
	LimitFlags              uint32
	MinimumWorkingSetSize   uintptr
	MaximumWorkingSetSize   uintptr
	ActiveProcessLimit      uint32
	Affinity                uintptr
	PriorityClass           uint32
	SchedulingClass         uint32
	_                       uint32 // pad to 8 byte boundary
}
 07070100000EEB000081A4000000000000000000000001645E367C00000331000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/types_windows_amd64.go    // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package windows

type WSAData struct {
	Version      uint16
	HighVersion  uint16
	MaxSockets   uint16
	MaxUdpDg     uint16
	VendorInfo   *byte
	Description  [WSADESCRIPTION_LEN + 1]byte
	SystemStatus [WSASYS_STATUS_LEN + 1]byte
}

type Servent struct {
	Name    *byte
	Aliases **byte
	Proto   *byte
	Port    uint16
}

type JOBOBJECT_BASIC_LIMIT_INFORMATION struct {
	PerProcessUserTimeLimit int64
	PerJobUserTimeLimit     int64
	LimitFlags              uint32
	MinimumWorkingSetSize   uintptr
	MaximumWorkingSetSize   uintptr
	ActiveProcessLimit      uint32
	Affinity                uintptr
	PriorityClass           uint32
	SchedulingClass         uint32
}
   07070100000EEC000081A4000000000000000000000001645E367C0000036B000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/types_windows_arm.go  // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package windows

type WSAData struct {
	Version      uint16
	HighVersion  uint16
	Description  [WSADESCRIPTION_LEN + 1]byte
	SystemStatus [WSASYS_STATUS_LEN + 1]byte
	MaxSockets   uint16
	MaxUdpDg     uint16
	VendorInfo   *byte
}

type Servent struct {
	Name    *byte
	Aliases **byte
	Port    uint16
	Proto   *byte
}

type JOBOBJECT_BASIC_LIMIT_INFORMATION struct {
	PerProcessUserTimeLimit int64
	PerJobUserTimeLimit     int64
	LimitFlags              uint32
	MinimumWorkingSetSize   uintptr
	MaximumWorkingSetSize   uintptr
	ActiveProcessLimit      uint32
	Affinity                uintptr
	PriorityClass           uint32
	SchedulingClass         uint32
	_                       uint32 // pad to 8 byte boundary
}
 07070100000EED000081A4000000000000000000000001645E367C00000331000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/types_windows_arm64.go    // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package windows

type WSAData struct {
	Version      uint16
	HighVersion  uint16
	MaxSockets   uint16
	MaxUdpDg     uint16
	VendorInfo   *byte
	Description  [WSADESCRIPTION_LEN + 1]byte
	SystemStatus [WSASYS_STATUS_LEN + 1]byte
}

type Servent struct {
	Name    *byte
	Aliases **byte
	Proto   *byte
	Port    uint16
}

type JOBOBJECT_BASIC_LIMIT_INFORMATION struct {
	PerProcessUserTimeLimit int64
	PerJobUserTimeLimit     int64
	LimitFlags              uint32
	MinimumWorkingSetSize   uintptr
	MaximumWorkingSetSize   uintptr
	ActiveProcessLimit      uint32
	Affinity                uintptr
	PriorityClass           uint32
	SchedulingClass         uint32
}
   07070100000EEE000081A4000000000000000000000001645E367C000E6D5E000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/zerrors_windows.go    // Code generated by 'mkerrors.bash'; DO NOT EDIT.

package windows

import "syscall"

const (
	FACILITY_NULL                                                                           = 0
	FACILITY_RPC                                                                            = 1
	FACILITY_DISPATCH                                                                       = 2
	FACILITY_STORAGE                                                                        = 3
	FACILITY_ITF                                                                            = 4
	FACILITY_WIN32                                                                          = 7
	FACILITY_WINDOWS                                                                        = 8
	FACILITY_SSPI                                                                           = 9
	FACILITY_SECURITY                                                                       = 9
	FACILITY_CONTROL                                                                        = 10
	FACILITY_CERT                                                                           = 11
	FACILITY_INTERNET                                                                       = 12
	FACILITY_MEDIASERVER                                                                    = 13
	FACILITY_MSMQ                                                                           = 14
	FACILITY_SETUPAPI                                                                       = 15
	FACILITY_SCARD                                                                          = 16
	FACILITY_COMPLUS                                                                        = 17
	FACILITY_AAF                                                                            = 18
	FACILITY_URT                                                                            = 19
	FACILITY_ACS                                                                            = 20
	FACILITY_DPLAY                                                                          = 21
	FACILITY_UMI                                                                            = 22
	FACILITY_SXS                                                                            = 23
	FACILITY_WINDOWS_CE                                                                     = 24
	FACILITY_HTTP                                                                           = 25
	FACILITY_USERMODE_COMMONLOG                                                             = 26
	FACILITY_WER                                                                            = 27
	FACILITY_USERMODE_FILTER_MANAGER                                                        = 31
	FACILITY_BACKGROUNDCOPY                                                                 = 32
	FACILITY_CONFIGURATION                                                                  = 33
	FACILITY_WIA                                                                            = 33
	FACILITY_STATE_MANAGEMENT                                                               = 34
	FACILITY_METADIRECTORY                                                                  = 35
	FACILITY_WINDOWSUPDATE                                                                  = 36
	FACILITY_DIRECTORYSERVICE                                                               = 37
	FACILITY_GRAPHICS                                                                       = 38
	FACILITY_SHELL                                                                          = 39
	FACILITY_NAP                                                                            = 39
	FACILITY_TPM_SERVICES                                                                   = 40
	FACILITY_TPM_SOFTWARE                                                                   = 41
	FACILITY_UI                                                                             = 42
	FACILITY_XAML                                                                           = 43
	FACILITY_ACTION_QUEUE                                                                   = 44
	FACILITY_PLA                                                                            = 48
	FACILITY_WINDOWS_SETUP                                                                  = 48
	FACILITY_FVE                                                                            = 49
	FACILITY_FWP                                                                            = 50
	FACILITY_WINRM                                                                          = 51
	FACILITY_NDIS                                                                           = 52
	FACILITY_USERMODE_HYPERVISOR                                                            = 53
	FACILITY_CMI                                                                            = 54
	FACILITY_USERMODE_VIRTUALIZATION                                                        = 55
	FACILITY_USERMODE_VOLMGR                                                                = 56
	FACILITY_BCD                                                                            = 57
	FACILITY_USERMODE_VHD                                                                   = 58
	FACILITY_USERMODE_HNS                                                                   = 59
	FACILITY_SDIAG                                                                          = 60
	FACILITY_WEBSERVICES                                                                    = 61
	FACILITY_WINPE                                                                          = 61
	FACILITY_WPN                                                                            = 62
	FACILITY_WINDOWS_STORE                                                                  = 63
	FACILITY_INPUT                                                                          = 64
	FACILITY_EAP                                                                            = 66
	FACILITY_WINDOWS_DEFENDER                                                               = 80
	FACILITY_OPC                                                                            = 81
	FACILITY_XPS                                                                            = 82
	FACILITY_MBN                                                                            = 84
	FACILITY_POWERSHELL                                                                     = 84
	FACILITY_RAS                                                                            = 83
	FACILITY_P2P_INT                                                                        = 98
	FACILITY_P2P                                                                            = 99
	FACILITY_DAF                                                                            = 100
	FACILITY_BLUETOOTH_ATT                                                                  = 101
	FACILITY_AUDIO                                                                          = 102
	FACILITY_STATEREPOSITORY                                                                = 103
	FACILITY_VISUALCPP                                                                      = 109
	FACILITY_SCRIPT                                                                         = 112
	FACILITY_PARSE                                                                          = 113
	FACILITY_BLB                                                                            = 120
	FACILITY_BLB_CLI                                                                        = 121
	FACILITY_WSBAPP                                                                         = 122
	FACILITY_BLBUI                                                                          = 128
	FACILITY_USN                                                                            = 129
	FACILITY_USERMODE_VOLSNAP                                                               = 130
	FACILITY_TIERING                                                                        = 131
	FACILITY_WSB_ONLINE                                                                     = 133
	FACILITY_ONLINE_ID                                                                      = 134
	FACILITY_DEVICE_UPDATE_AGENT                                                            = 135
	FACILITY_DRVSERVICING                                                                   = 136
	FACILITY_DLS                                                                            = 153
	FACILITY_DELIVERY_OPTIMIZATION                                                          = 208
	FACILITY_USERMODE_SPACES                                                                = 231
	FACILITY_USER_MODE_SECURITY_CORE                                                        = 232
	FACILITY_USERMODE_LICENSING                                                             = 234
	FACILITY_SOS                                                                            = 160
	FACILITY_DEBUGGERS                                                                      = 176
	FACILITY_SPP                                                                            = 256
	FACILITY_RESTORE                                                                        = 256
	FACILITY_DMSERVER                                                                       = 256
	FACILITY_DEPLOYMENT_SERVICES_SERVER                                                     = 257
	FACILITY_DEPLOYMENT_SERVICES_IMAGING                                                    = 258
	FACILITY_DEPLOYMENT_SERVICES_MANAGEMENT                                                 = 259
	FACILITY_DEPLOYMENT_SERVICES_UTIL                                                       = 260
	FACILITY_DEPLOYMENT_SERVICES_BINLSVC                                                    = 261
	FACILITY_DEPLOYMENT_SERVICES_PXE                                                        = 263
	FACILITY_DEPLOYMENT_SERVICES_TFTP                                                       = 264
	FACILITY_DEPLOYMENT_SERVICES_TRANSPORT_MANAGEMENT                                       = 272
	FACILITY_DEPLOYMENT_SERVICES_DRIVER_PROVISIONING                                        = 278
	FACILITY_DEPLOYMENT_SERVICES_MULTICAST_SERVER                                           = 289
	FACILITY_DEPLOYMENT_SERVICES_MULTICAST_CLIENT                                           = 290
	FACILITY_DEPLOYMENT_SERVICES_CONTENT_PROVIDER                                           = 293
	FACILITY_LINGUISTIC_SERVICES                                                            = 305
	FACILITY_AUDIOSTREAMING                                                                 = 1094
	FACILITY_ACCELERATOR                                                                    = 1536
	FACILITY_WMAAECMA                                                                       = 1996
	FACILITY_DIRECTMUSIC                                                                    = 2168
	FACILITY_DIRECT3D10                                                                     = 2169
	FACILITY_DXGI                                                                           = 2170
	FACILITY_DXGI_DDI                                                                       = 2171
	FACILITY_DIRECT3D11                                                                     = 2172
	FACILITY_DIRECT3D11_DEBUG                                                               = 2173
	FACILITY_DIRECT3D12                                                                     = 2174
	FACILITY_DIRECT3D12_DEBUG                                                               = 2175
	FACILITY_LEAP                                                                           = 2184
	FACILITY_AUDCLNT                                                                        = 2185
	FACILITY_WINCODEC_DWRITE_DWM                                                            = 2200
	FACILITY_WINML                                                                          = 2192
	FACILITY_DIRECT2D                                                                       = 2201
	FACILITY_DEFRAG                                                                         = 2304
	FACILITY_USERMODE_SDBUS                                                                 = 2305
	FACILITY_JSCRIPT                                                                        = 2306
	FACILITY_PIDGENX                                                                        = 2561
	FACILITY_EAS                                                                            = 85
	FACILITY_WEB                                                                            = 885
	FACILITY_WEB_SOCKET                                                                     = 886
	FACILITY_MOBILE                                                                         = 1793
	FACILITY_SQLITE                                                                         = 1967
	FACILITY_UTC                                                                            = 1989
	FACILITY_WEP                                                                            = 2049
	FACILITY_SYNCENGINE                                                                     = 2050
	FACILITY_XBOX                                                                           = 2339
	FACILITY_GAME                                                                           = 2340
	FACILITY_PIX                                                                            = 2748
	ERROR_SUCCESS                                                             syscall.Errno = 0
	NO_ERROR                                                                                = 0
	SEC_E_OK                                                                  Handle        = 0x00000000
	ERROR_INVALID_FUNCTION                                                    syscall.Errno = 1
	ERROR_FILE_NOT_FOUND                                                      syscall.Errno = 2
	ERROR_PATH_NOT_FOUND                                                      syscall.Errno = 3
	ERROR_TOO_MANY_OPEN_FILES                                                 syscall.Errno = 4
	ERROR_ACCESS_DENIED                                                       syscall.Errno = 5
	ERROR_INVALID_HANDLE                                                      syscall.Errno = 6
	ERROR_ARENA_TRASHED                                                       syscall.Errno = 7
	ERROR_NOT_ENOUGH_MEMORY                                                   syscall.Errno = 8
	ERROR_INVALID_BLOCK                                                       syscall.Errno = 9
	ERROR_BAD_ENVIRONMENT                                                     syscall.Errno = 10
	ERROR_BAD_FORMAT                                                          syscall.Errno = 11
	ERROR_INVALID_ACCESS                                                      syscall.Errno = 12
	ERROR_INVALID_DATA                                                        syscall.Errno = 13
	ERROR_OUTOFMEMORY                                                         syscall.Errno = 14
	ERROR_INVALID_DRIVE                                                       syscall.Errno = 15
	ERROR_CURRENT_DIRECTORY                                                   syscall.Errno = 16
	ERROR_NOT_SAME_DEVICE                                                     syscall.Errno = 17
	ERROR_NO_MORE_FILES                                                       syscall.Errno = 18
	ERROR_WRITE_PROTECT                                                       syscall.Errno = 19
	ERROR_BAD_UNIT                                                            syscall.Errno = 20
	ERROR_NOT_READY                                                           syscall.Errno = 21
	ERROR_BAD_COMMAND                                                         syscall.Errno = 22
	ERROR_CRC                                                                 syscall.Errno = 23
	ERROR_BAD_LENGTH                                                          syscall.Errno = 24
	ERROR_SEEK                                                                syscall.Errno = 25
	ERROR_NOT_DOS_DISK                                                        syscall.Errno = 26
	ERROR_SECTOR_NOT_FOUND                                                    syscall.Errno = 27
	ERROR_OUT_OF_PAPER                                                        syscall.Errno = 28
	ERROR_WRITE_FAULT                                                         syscall.Errno = 29
	ERROR_READ_FAULT                                                          syscall.Errno = 30
	ERROR_GEN_FAILURE                                                         syscall.Errno = 31
	ERROR_SHARING_VIOLATION                                                   syscall.Errno = 32
	ERROR_LOCK_VIOLATION                                                      syscall.Errno = 33
	ERROR_WRONG_DISK                                                          syscall.Errno = 34
	ERROR_SHARING_BUFFER_EXCEEDED                                             syscall.Errno = 36
	ERROR_HANDLE_EOF                                                          syscall.Errno = 38
	ERROR_HANDLE_DISK_FULL                                                    syscall.Errno = 39
	ERROR_NOT_SUPPORTED                                                       syscall.Errno = 50
	ERROR_REM_NOT_LIST                                                        syscall.Errno = 51
	ERROR_DUP_NAME                                                            syscall.Errno = 52
	ERROR_BAD_NETPATH                                                         syscall.Errno = 53
	ERROR_NETWORK_BUSY                                                        syscall.Errno = 54
	ERROR_DEV_NOT_EXIST                                                       syscall.Errno = 55
	ERROR_TOO_MANY_CMDS                                                       syscall.Errno = 56
	ERROR_ADAP_HDW_ERR                                                        syscall.Errno = 57
	ERROR_BAD_NET_RESP                                                        syscall.Errno = 58
	ERROR_UNEXP_NET_ERR                                                       syscall.Errno = 59
	ERROR_BAD_REM_ADAP                                                        syscall.Errno = 60
	ERROR_PRINTQ_FULL                                                         syscall.Errno = 61
	ERROR_NO_SPOOL_SPACE                                                      syscall.Errno = 62
	ERROR_PRINT_CANCELLED                                                     syscall.Errno = 63
	ERROR_NETNAME_DELETED                                                     syscall.Errno = 64
	ERROR_NETWORK_ACCESS_DENIED                                               syscall.Errno = 65
	ERROR_BAD_DEV_TYPE                                                        syscall.Errno = 66
	ERROR_BAD_NET_NAME                                                        syscall.Errno = 67
	ERROR_TOO_MANY_NAMES                                                      syscall.Errno = 68
	ERROR_TOO_MANY_SESS                                                       syscall.Errno = 69
	ERROR_SHARING_PAUSED                                                      syscall.Errno = 70
	ERROR_REQ_NOT_ACCEP                                                       syscall.Errno = 71
	ERROR_REDIR_PAUSED                                                        syscall.Errno = 72
	ERROR_FILE_EXISTS                                                         syscall.Errno = 80
	ERROR_CANNOT_MAKE                                                         syscall.Errno = 82
	ERROR_FAIL_I24                                                            syscall.Errno = 83
	ERROR_OUT_OF_STRUCTURES                                                   syscall.Errno = 84
	ERROR_ALREADY_ASSIGNED                                                    syscall.Errno = 85
	ERROR_INVALID_PASSWORD                                                    syscall.Errno = 86
	ERROR_INVALID_PARAMETER                                                   syscall.Errno = 87
	ERROR_NET_WRITE_FAULT                                                     syscall.Errno = 88
	ERROR_NO_PROC_SLOTS                                                       syscall.Errno = 89
	ERROR_TOO_MANY_SEMAPHORES                                                 syscall.Errno = 100
	ERROR_EXCL_SEM_ALREADY_OWNED                                              syscall.Errno = 101
	ERROR_SEM_IS_SET                                                          syscall.Errno = 102
	ERROR_TOO_MANY_SEM_REQUESTS                                               syscall.Errno = 103
	ERROR_INVALID_AT_INTERRUPT_TIME                                           syscall.Errno = 104
	ERROR_SEM_OWNER_DIED                                                      syscall.Errno = 105
	ERROR_SEM_USER_LIMIT                                                      syscall.Errno = 106
	ERROR_DISK_CHANGE                                                         syscall.Errno = 107
	ERROR_DRIVE_LOCKED                                                        syscall.Errno = 108
	ERROR_BROKEN_PIPE                                                         syscall.Errno = 109
	ERROR_OPEN_FAILED                                                         syscall.Errno = 110
	ERROR_BUFFER_OVERFLOW                                                     syscall.Errno = 111
	ERROR_DISK_FULL                                                           syscall.Errno = 112
	ERROR_NO_MORE_SEARCH_HANDLES                                              syscall.Errno = 113
	ERROR_INVALID_TARGET_HANDLE                                               syscall.Errno = 114
	ERROR_INVALID_CATEGORY                                                    syscall.Errno = 117
	ERROR_INVALID_VERIFY_SWITCH                                               syscall.Errno = 118
	ERROR_BAD_DRIVER_LEVEL                                                    syscall.Errno = 119
	ERROR_CALL_NOT_IMPLEMENTED                                                syscall.Errno = 120
	ERROR_SEM_TIMEOUT                                                         syscall.Errno = 121
	ERROR_INSUFFICIENT_BUFFER                                                 syscall.Errno = 122
	ERROR_INVALID_NAME                                                        syscall.Errno = 123
	ERROR_INVALID_LEVEL                                                       syscall.Errno = 124
	ERROR_NO_VOLUME_LABEL                                                     syscall.Errno = 125
	ERROR_MOD_NOT_FOUND                                                       syscall.Errno = 126
	ERROR_PROC_NOT_FOUND                                                      syscall.Errno = 127
	ERROR_WAIT_NO_CHILDREN                                                    syscall.Errno = 128
	ERROR_CHILD_NOT_COMPLETE                                                  syscall.Errno = 129
	ERROR_DIRECT_ACCESS_HANDLE                                                syscall.Errno = 130
	ERROR_NEGATIVE_SEEK                                                       syscall.Errno = 131
	ERROR_SEEK_ON_DEVICE                                                      syscall.Errno = 132
	ERROR_IS_JOIN_TARGET                                                      syscall.Errno = 133
	ERROR_IS_JOINED                                                           syscall.Errno = 134
	ERROR_IS_SUBSTED                                                          syscall.Errno = 135
	ERROR_NOT_JOINED                                                          syscall.Errno = 136
	ERROR_NOT_SUBSTED                                                         syscall.Errno = 137
	ERROR_JOIN_TO_JOIN                                                        syscall.Errno = 138
	ERROR_SUBST_TO_SUBST                                                      syscall.Errno = 139
	ERROR_JOIN_TO_SUBST                                                       syscall.Errno = 140
	ERROR_SUBST_TO_JOIN                                                       syscall.Errno = 141
	ERROR_BUSY_DRIVE                                                          syscall.Errno = 142
	ERROR_SAME_DRIVE                                                          syscall.Errno = 143
	ERROR_DIR_NOT_ROOT                                                        syscall.Errno = 144
	ERROR_DIR_NOT_EMPTY                                                       syscall.Errno = 145
	ERROR_IS_SUBST_PATH                                                       syscall.Errno = 146
	ERROR_IS_JOIN_PATH                                                        syscall.Errno = 147
	ERROR_PATH_BUSY                                                           syscall.Errno = 148
	ERROR_IS_SUBST_TARGET                                                     syscall.Errno = 149
	ERROR_SYSTEM_TRACE                                                        syscall.Errno = 150
	ERROR_INVALID_EVENT_COUNT                                                 syscall.Errno = 151
	ERROR_TOO_MANY_MUXWAITERS                                                 syscall.Errno = 152
	ERROR_INVALID_LIST_FORMAT                                                 syscall.Errno = 153
	ERROR_LABEL_TOO_LONG                                                      syscall.Errno = 154
	ERROR_TOO_MANY_TCBS                                                       syscall.Errno = 155
	ERROR_SIGNAL_REFUSED                                                      syscall.Errno = 156
	ERROR_DISCARDED                                                           syscall.Errno = 157
	ERROR_NOT_LOCKED                                                          syscall.Errno = 158
	ERROR_BAD_THREADID_ADDR                                                   syscall.Errno = 159
	ERROR_BAD_ARGUMENTS                                                       syscall.Errno = 160
	ERROR_BAD_PATHNAME                                                        syscall.Errno = 161
	ERROR_SIGNAL_PENDING                                                      syscall.Errno = 162
	ERROR_MAX_THRDS_REACHED                                                   syscall.Errno = 164
	ERROR_LOCK_FAILED                                                         syscall.Errno = 167
	ERROR_BUSY                                                                syscall.Errno = 170
	ERROR_DEVICE_SUPPORT_IN_PROGRESS                                          syscall.Errno = 171
	ERROR_CANCEL_VIOLATION                                                    syscall.Errno = 173
	ERROR_ATOMIC_LOCKS_NOT_SUPPORTED                                          syscall.Errno = 174
	ERROR_INVALID_SEGMENT_NUMBER                                              syscall.Errno = 180
	ERROR_INVALID_ORDINAL                                                     syscall.Errno = 182
	ERROR_ALREADY_EXISTS                                                      syscall.Errno = 183
	ERROR_INVALID_FLAG_NUMBER                                                 syscall.Errno = 186
	ERROR_SEM_NOT_FOUND                                                       syscall.Errno = 187
	ERROR_INVALID_STARTING_CODESEG                                            syscall.Errno = 188
	ERROR_INVALID_STACKSEG                                                    syscall.Errno = 189
	ERROR_INVALID_MODULETYPE                                                  syscall.Errno = 190
	ERROR_INVALID_EXE_SIGNATURE                                               syscall.Errno = 191
	ERROR_EXE_MARKED_INVALID                                                  syscall.Errno = 192
	ERROR_BAD_EXE_FORMAT                                                      syscall.Errno = 193
	ERROR_ITERATED_DATA_EXCEEDS_64k                                           syscall.Errno = 194
	ERROR_INVALID_MINALLOCSIZE                                                syscall.Errno = 195
	ERROR_DYNLINK_FROM_INVALID_RING                                           syscall.Errno = 196
	ERROR_IOPL_NOT_ENABLED                                                    syscall.Errno = 197
	ERROR_INVALID_SEGDPL                                                      syscall.Errno = 198
	ERROR_AUTODATASEG_EXCEEDS_64k                                             syscall.Errno = 199
	ERROR_RING2SEG_MUST_BE_MOVABLE                                            syscall.Errno = 200
	ERROR_RELOC_CHAIN_XEEDS_SEGLIM                                            syscall.Errno = 201
	ERROR_INFLOOP_IN_RELOC_CHAIN                                              syscall.Errno = 202
	ERROR_ENVVAR_NOT_FOUND                                                    syscall.Errno = 203
	ERROR_NO_SIGNAL_SENT                                                      syscall.Errno = 205
	ERROR_FILENAME_EXCED_RANGE                                                syscall.Errno = 206
	ERROR_RING2_STACK_IN_USE                                                  syscall.Errno = 207
	ERROR_META_EXPANSION_TOO_LONG                                             syscall.Errno = 208
	ERROR_INVALID_SIGNAL_NUMBER                                               syscall.Errno = 209
	ERROR_THREAD_1_INACTIVE                                                   syscall.Errno = 210
	ERROR_LOCKED                                                              syscall.Errno = 212
	ERROR_TOO_MANY_MODULES                                                    syscall.Errno = 214
	ERROR_NESTING_NOT_ALLOWED                                                 syscall.Errno = 215
	ERROR_EXE_MACHINE_TYPE_MISMATCH                                           syscall.Errno = 216
	ERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY                                     syscall.Errno = 217
	ERROR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY                              syscall.Errno = 218
	ERROR_FILE_CHECKED_OUT                                                    syscall.Errno = 220
	ERROR_CHECKOUT_REQUIRED                                                   syscall.Errno = 221
	ERROR_BAD_FILE_TYPE                                                       syscall.Errno = 222
	ERROR_FILE_TOO_LARGE                                                      syscall.Errno = 223
	ERROR_FORMS_AUTH_REQUIRED                                                 syscall.Errno = 224
	ERROR_VIRUS_INFECTED                                                      syscall.Errno = 225
	ERROR_VIRUS_DELETED                                                       syscall.Errno = 226
	ERROR_PIPE_LOCAL                                                          syscall.Errno = 229
	ERROR_BAD_PIPE                                                            syscall.Errno = 230
	ERROR_PIPE_BUSY                                                           syscall.Errno = 231
	ERROR_NO_DATA                                                             syscall.Errno = 232
	ERROR_PIPE_NOT_CONNECTED                                                  syscall.Errno = 233
	ERROR_MORE_DATA                                                           syscall.Errno = 234
	ERROR_NO_WORK_DONE                                                        syscall.Errno = 235
	ERROR_VC_DISCONNECTED                                                     syscall.Errno = 240
	ERROR_INVALID_EA_NAME                                                     syscall.Errno = 254
	ERROR_EA_LIST_INCONSISTENT                                                syscall.Errno = 255
	WAIT_TIMEOUT                                                              syscall.Errno = 258
	ERROR_NO_MORE_ITEMS                                                       syscall.Errno = 259
	ERROR_CANNOT_COPY                                                         syscall.Errno = 266
	ERROR_DIRECTORY                                                           syscall.Errno = 267
	ERROR_EAS_DIDNT_FIT                                                       syscall.Errno = 275
	ERROR_EA_FILE_CORRUPT                                                     syscall.Errno = 276
	ERROR_EA_TABLE_FULL                                                       syscall.Errno = 277
	ERROR_INVALID_EA_HANDLE                                                   syscall.Errno = 278
	ERROR_EAS_NOT_SUPPORTED                                                   syscall.Errno = 282
	ERROR_NOT_OWNER                                                           syscall.Errno = 288
	ERROR_TOO_MANY_POSTS                                                      syscall.Errno = 298
	ERROR_PARTIAL_COPY                                                        syscall.Errno = 299
	ERROR_OPLOCK_NOT_GRANTED                                                  syscall.Errno = 300
	ERROR_INVALID_OPLOCK_PROTOCOL                                             syscall.Errno = 301
	ERROR_DISK_TOO_FRAGMENTED                                                 syscall.Errno = 302
	ERROR_DELETE_PENDING                                                      syscall.Errno = 303
	ERROR_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING                syscall.Errno = 304
	ERROR_SHORT_NAMES_NOT_ENABLED_ON_VOLUME                                   syscall.Errno = 305
	ERROR_SECURITY_STREAM_IS_INCONSISTENT                                     syscall.Errno = 306
	ERROR_INVALID_LOCK_RANGE                                                  syscall.Errno = 307
	ERROR_IMAGE_SUBSYSTEM_NOT_PRESENT                                         syscall.Errno = 308
	ERROR_NOTIFICATION_GUID_ALREADY_DEFINED                                   syscall.Errno = 309
	ERROR_INVALID_EXCEPTION_HANDLER                                           syscall.Errno = 310
	ERROR_DUPLICATE_PRIVILEGES                                                syscall.Errno = 311
	ERROR_NO_RANGES_PROCESSED                                                 syscall.Errno = 312
	ERROR_NOT_ALLOWED_ON_SYSTEM_FILE                                          syscall.Errno = 313
	ERROR_DISK_RESOURCES_EXHAUSTED                                            syscall.Errno = 314
	ERROR_INVALID_TOKEN                                                       syscall.Errno = 315
	ERROR_DEVICE_FEATURE_NOT_SUPPORTED                                        syscall.Errno = 316
	ERROR_MR_MID_NOT_FOUND                                                    syscall.Errno = 317
	ERROR_SCOPE_NOT_FOUND                                                     syscall.Errno = 318
	ERROR_UNDEFINED_SCOPE                                                     syscall.Errno = 319
	ERROR_INVALID_CAP                                                         syscall.Errno = 320
	ERROR_DEVICE_UNREACHABLE                                                  syscall.Errno = 321
	ERROR_DEVICE_NO_RESOURCES                                                 syscall.Errno = 322
	ERROR_DATA_CHECKSUM_ERROR                                                 syscall.Errno = 323
	ERROR_INTERMIXED_KERNEL_EA_OPERATION                                      syscall.Errno = 324
	ERROR_FILE_LEVEL_TRIM_NOT_SUPPORTED                                       syscall.Errno = 326
	ERROR_OFFSET_ALIGNMENT_VIOLATION                                          syscall.Errno = 327
	ERROR_INVALID_FIELD_IN_PARAMETER_LIST                                     syscall.Errno = 328
	ERROR_OPERATION_IN_PROGRESS                                               syscall.Errno = 329
	ERROR_BAD_DEVICE_PATH                                                     syscall.Errno = 330
	ERROR_TOO_MANY_DESCRIPTORS                                                syscall.Errno = 331
	ERROR_SCRUB_DATA_DISABLED                                                 syscall.Errno = 332
	ERROR_NOT_REDUNDANT_STORAGE                                               syscall.Errno = 333
	ERROR_RESIDENT_FILE_NOT_SUPPORTED                                         syscall.Errno = 334
	ERROR_COMPRESSED_FILE_NOT_SUPPORTED                                       syscall.Errno = 335
	ERROR_DIRECTORY_NOT_SUPPORTED                                             syscall.Errno = 336
	ERROR_NOT_READ_FROM_COPY                                                  syscall.Errno = 337
	ERROR_FT_WRITE_FAILURE                                                    syscall.Errno = 338
	ERROR_FT_DI_SCAN_REQUIRED                                                 syscall.Errno = 339
	ERROR_INVALID_KERNEL_INFO_VERSION                                         syscall.Errno = 340
	ERROR_INVALID_PEP_INFO_VERSION                                            syscall.Errno = 341
	ERROR_OBJECT_NOT_EXTERNALLY_BACKED                                        syscall.Errno = 342
	ERROR_EXTERNAL_BACKING_PROVIDER_UNKNOWN                                   syscall.Errno = 343
	ERROR_COMPRESSION_NOT_BENEFICIAL                                          syscall.Errno = 344
	ERROR_STORAGE_TOPOLOGY_ID_MISMATCH                                        syscall.Errno = 345
	ERROR_BLOCKED_BY_PARENTAL_CONTROLS                                        syscall.Errno = 346
	ERROR_BLOCK_TOO_MANY_REFERENCES                                           syscall.Errno = 347
	ERROR_MARKED_TO_DISALLOW_WRITES                                           syscall.Errno = 348
	ERROR_ENCLAVE_FAILURE                                                     syscall.Errno = 349
	ERROR_FAIL_NOACTION_REBOOT                                                syscall.Errno = 350
	ERROR_FAIL_SHUTDOWN                                                       syscall.Errno = 351
	ERROR_FAIL_RESTART                                                        syscall.Errno = 352
	ERROR_MAX_SESSIONS_REACHED                                                syscall.Errno = 353
	ERROR_NETWORK_ACCESS_DENIED_EDP                                           syscall.Errno = 354
	ERROR_DEVICE_HINT_NAME_BUFFER_TOO_SMALL                                   syscall.Errno = 355
	ERROR_EDP_POLICY_DENIES_OPERATION                                         syscall.Errno = 356
	ERROR_EDP_DPL_POLICY_CANT_BE_SATISFIED                                    syscall.Errno = 357
	ERROR_CLOUD_FILE_SYNC_ROOT_METADATA_CORRUPT                               syscall.Errno = 358
	ERROR_DEVICE_IN_MAINTENANCE                                               syscall.Errno = 359
	ERROR_NOT_SUPPORTED_ON_DAX                                                syscall.Errno = 360
	ERROR_DAX_MAPPING_EXISTS                                                  syscall.Errno = 361
	ERROR_CLOUD_FILE_PROVIDER_NOT_RUNNING                                     syscall.Errno = 362
	ERROR_CLOUD_FILE_METADATA_CORRUPT                                         syscall.Errno = 363
	ERROR_CLOUD_FILE_METADATA_TOO_LARGE                                       syscall.Errno = 364
	ERROR_CLOUD_FILE_PROPERTY_BLOB_TOO_LARGE                                  syscall.Errno = 365
	ERROR_CLOUD_FILE_PROPERTY_BLOB_CHECKSUM_MISMATCH                          syscall.Errno = 366
	ERROR_CHILD_PROCESS_BLOCKED                                               syscall.Errno = 367
	ERROR_STORAGE_LOST_DATA_PERSISTENCE                                       syscall.Errno = 368
	ERROR_FILE_SYSTEM_VIRTUALIZATION_UNAVAILABLE                              syscall.Errno = 369
	ERROR_FILE_SYSTEM_VIRTUALIZATION_METADATA_CORRUPT                         syscall.Errno = 370
	ERROR_FILE_SYSTEM_VIRTUALIZATION_BUSY                                     syscall.Errno = 371
	ERROR_FILE_SYSTEM_VIRTUALIZATION_PROVIDER_UNKNOWN                         syscall.Errno = 372
	ERROR_GDI_HANDLE_LEAK                                                     syscall.Errno = 373
	ERROR_CLOUD_FILE_TOO_MANY_PROPERTY_BLOBS                                  syscall.Errno = 374
	ERROR_CLOUD_FILE_PROPERTY_VERSION_NOT_SUPPORTED                           syscall.Errno = 375
	ERROR_NOT_A_CLOUD_FILE                                                    syscall.Errno = 376
	ERROR_CLOUD_FILE_NOT_IN_SYNC                                              syscall.Errno = 377
	ERROR_CLOUD_FILE_ALREADY_CONNECTED                                        syscall.Errno = 378
	ERROR_CLOUD_FILE_NOT_SUPPORTED                                            syscall.Errno = 379
	ERROR_CLOUD_FILE_INVALID_REQUEST                                          syscall.Errno = 380
	ERROR_CLOUD_FILE_READ_ONLY_VOLUME                                         syscall.Errno = 381
	ERROR_CLOUD_FILE_CONNECTED_PROVIDER_ONLY                                  syscall.Errno = 382
	ERROR_CLOUD_FILE_VALIDATION_FAILED                                        syscall.Errno = 383
	ERROR_SMB1_NOT_AVAILABLE                                                  syscall.Errno = 384
	ERROR_FILE_SYSTEM_VIRTUALIZATION_INVALID_OPERATION                        syscall.Errno = 385
	ERROR_CLOUD_FILE_AUTHENTICATION_FAILED                                    syscall.Errno = 386
	ERROR_CLOUD_FILE_INSUFFICIENT_RESOURCES                                   syscall.Errno = 387
	ERROR_CLOUD_FILE_NETWORK_UNAVAILABLE                                      syscall.Errno = 388
	ERROR_CLOUD_FILE_UNSUCCESSFUL                                             syscall.Errno = 389
	ERROR_CLOUD_FILE_NOT_UNDER_SYNC_ROOT                                      syscall.Errno = 390
	ERROR_CLOUD_FILE_IN_USE                                                   syscall.Errno = 391
	ERROR_CLOUD_FILE_PINNED                                                   syscall.Errno = 392
	ERROR_CLOUD_FILE_REQUEST_ABORTED                                          syscall.Errno = 393
	ERROR_CLOUD_FILE_PROPERTY_CORRUPT                                         syscall.Errno = 394
	ERROR_CLOUD_FILE_ACCESS_DENIED                                            syscall.Errno = 395
	ERROR_CLOUD_FILE_INCOMPATIBLE_HARDLINKS                                   syscall.Errno = 396
	ERROR_CLOUD_FILE_PROPERTY_LOCK_CONFLICT                                   syscall.Errno = 397
	ERROR_CLOUD_FILE_REQUEST_CANCELED                                         syscall.Errno = 398
	ERROR_EXTERNAL_SYSKEY_NOT_SUPPORTED                                       syscall.Errno = 399
	ERROR_THREAD_MODE_ALREADY_BACKGROUND                                      syscall.Errno = 400
	ERROR_THREAD_MODE_NOT_BACKGROUND                                          syscall.Errno = 401
	ERROR_PROCESS_MODE_ALREADY_BACKGROUND                                     syscall.Errno = 402
	ERROR_PROCESS_MODE_NOT_BACKGROUND                                         syscall.Errno = 403
	ERROR_CLOUD_FILE_PROVIDER_TERMINATED                                      syscall.Errno = 404
	ERROR_NOT_A_CLOUD_SYNC_ROOT                                               syscall.Errno = 405
	ERROR_FILE_PROTECTED_UNDER_DPL                                            syscall.Errno = 406
	ERROR_VOLUME_NOT_CLUSTER_ALIGNED                                          syscall.Errno = 407
	ERROR_NO_PHYSICALLY_ALIGNED_FREE_SPACE_FOUND                              syscall.Errno = 408
	ERROR_APPX_FILE_NOT_ENCRYPTED                                             syscall.Errno = 409
	ERROR_RWRAW_ENCRYPTED_FILE_NOT_ENCRYPTED                                  syscall.Errno = 410
	ERROR_RWRAW_ENCRYPTED_INVALID_EDATAINFO_FILEOFFSET                        syscall.Errno = 411
	ERROR_RWRAW_ENCRYPTED_INVALID_EDATAINFO_FILERANGE                         syscall.Errno = 412
	ERROR_RWRAW_ENCRYPTED_INVALID_EDATAINFO_PARAMETER                         syscall.Errno = 413
	ERROR_LINUX_SUBSYSTEM_NOT_PRESENT                                         syscall.Errno = 414
	ERROR_FT_READ_FAILURE                                                     syscall.Errno = 415
	ERROR_STORAGE_RESERVE_ID_INVALID                                          syscall.Errno = 416
	ERROR_STORAGE_RESERVE_DOES_NOT_EXIST                                      syscall.Errno = 417
	ERROR_STORAGE_RESERVE_ALREADY_EXISTS                                      syscall.Errno = 418
	ERROR_STORAGE_RESERVE_NOT_EMPTY                                           syscall.Errno = 419
	ERROR_NOT_A_DAX_VOLUME                                                    syscall.Errno = 420
	ERROR_NOT_DAX_MAPPABLE                                                    syscall.Errno = 421
	ERROR_TIME_SENSITIVE_THREAD                                               syscall.Errno = 422
	ERROR_DPL_NOT_SUPPORTED_FOR_USER                                          syscall.Errno = 423
	ERROR_CASE_DIFFERING_NAMES_IN_DIR                                         syscall.Errno = 424
	ERROR_FILE_NOT_SUPPORTED                                                  syscall.Errno = 425
	ERROR_CLOUD_FILE_REQUEST_TIMEOUT                                          syscall.Errno = 426
	ERROR_NO_TASK_QUEUE                                                       syscall.Errno = 427
	ERROR_SRC_SRV_DLL_LOAD_FAILED                                             syscall.Errno = 428
	ERROR_NOT_SUPPORTED_WITH_BTT                                              syscall.Errno = 429
	ERROR_ENCRYPTION_DISABLED                                                 syscall.Errno = 430
	ERROR_ENCRYPTING_METADATA_DISALLOWED                                      syscall.Errno = 431
	ERROR_CANT_CLEAR_ENCRYPTION_FLAG                                          syscall.Errno = 432
	ERROR_NO_SUCH_DEVICE                                                      syscall.Errno = 433
	ERROR_CAPAUTHZ_NOT_DEVUNLOCKED                                            syscall.Errno = 450
	ERROR_CAPAUTHZ_CHANGE_TYPE                                                syscall.Errno = 451
	ERROR_CAPAUTHZ_NOT_PROVISIONED                                            syscall.Errno = 452
	ERROR_CAPAUTHZ_NOT_AUTHORIZED                                             syscall.Errno = 453
	ERROR_CAPAUTHZ_NO_POLICY                                                  syscall.Errno = 454
	ERROR_CAPAUTHZ_DB_CORRUPTED                                               syscall.Errno = 455
	ERROR_CAPAUTHZ_SCCD_INVALID_CATALOG                                       syscall.Errno = 456
	ERROR_CAPAUTHZ_SCCD_NO_AUTH_ENTITY                                        syscall.Errno = 457
	ERROR_CAPAUTHZ_SCCD_PARSE_ERROR                                           syscall.Errno = 458
	ERROR_CAPAUTHZ_SCCD_DEV_MODE_REQUIRED                                     syscall.Errno = 459
	ERROR_CAPAUTHZ_SCCD_NO_CAPABILITY_MATCH                                   syscall.Errno = 460
	ERROR_PNP_QUERY_REMOVE_DEVICE_TIMEOUT                                     syscall.Errno = 480
	ERROR_PNP_QUERY_REMOVE_RELATED_DEVICE_TIMEOUT                             syscall.Errno = 481
	ERROR_PNP_QUERY_REMOVE_UNRELATED_DEVICE_TIMEOUT                           syscall.Errno = 482
	ERROR_DEVICE_HARDWARE_ERROR                                               syscall.Errno = 483
	ERROR_INVALID_ADDRESS                                                     syscall.Errno = 487
	ERROR_VRF_CFG_ENABLED                                                     syscall.Errno = 1183
	ERROR_PARTITION_TERMINATING                                               syscall.Errno = 1184
	ERROR_USER_PROFILE_LOAD                                                   syscall.Errno = 500
	ERROR_ARITHMETIC_OVERFLOW                                                 syscall.Errno = 534
	ERROR_PIPE_CONNECTED                                                      syscall.Errno = 535
	ERROR_PIPE_LISTENING                                                      syscall.Errno = 536
	ERROR_VERIFIER_STOP                                                       syscall.Errno = 537
	ERROR_ABIOS_ERROR                                                         syscall.Errno = 538
	ERROR_WX86_WARNING                                                        syscall.Errno = 539
	ERROR_WX86_ERROR                                                          syscall.Errno = 540
	ERROR_TIMER_NOT_CANCELED                                                  syscall.Errno = 541
	ERROR_UNWIND                                                              syscall.Errno = 542
	ERROR_BAD_STACK                                                           syscall.Errno = 543
	ERROR_INVALID_UNWIND_TARGET                                               syscall.Errno = 544
	ERROR_INVALID_PORT_ATTRIBUTES                                             syscall.Errno = 545
	ERROR_PORT_MESSAGE_TOO_LONG                                               syscall.Errno = 546
	ERROR_INVALID_QUOTA_LOWER                                                 syscall.Errno = 547
	ERROR_DEVICE_ALREADY_ATTACHED                                             syscall.Errno = 548
	ERROR_INSTRUCTION_MISALIGNMENT                                            syscall.Errno = 549
	ERROR_PROFILING_NOT_STARTED                                               syscall.Errno = 550
	ERROR_PROFILING_NOT_STOPPED                                               syscall.Errno = 551
	ERROR_COULD_NOT_INTERPRET                                                 syscall.Errno = 552
	ERROR_PROFILING_AT_LIMIT                                                  syscall.Errno = 553
	ERROR_CANT_WAIT                                                           syscall.Errno = 554
	ERROR_CANT_TERMINATE_SELF                                                 syscall.Errno = 555
	ERROR_UNEXPECTED_MM_CREATE_ERR                                            syscall.Errno = 556
	ERROR_UNEXPECTED_MM_MAP_ERROR                                             syscall.Errno = 557
	ERROR_UNEXPECTED_MM_EXTEND_ERR                                            syscall.Errno = 558
	ERROR_BAD_FUNCTION_TABLE                                                  syscall.Errno = 559
	ERROR_NO_GUID_TRANSLATION                                                 syscall.Errno = 560
	ERROR_INVALID_LDT_SIZE                                                    syscall.Errno = 561
	ERROR_INVALID_LDT_OFFSET                                                  syscall.Errno = 563
	ERROR_INVALID_LDT_DESCRIPTOR                                              syscall.Errno = 564
	ERROR_TOO_MANY_THREADS                                                    syscall.Errno = 565
	ERROR_THREAD_NOT_IN_PROCESS                                               syscall.Errno = 566
	ERROR_PAGEFILE_QUOTA_EXCEEDED                                             syscall.Errno = 567
	ERROR_LOGON_SERVER_CONFLICT                                               syscall.Errno = 568
	ERROR_SYNCHRONIZATION_REQUIRED                                            syscall.Errno = 569
	ERROR_NET_OPEN_FAILED                                                     syscall.Errno = 570
	ERROR_IO_PRIVILEGE_FAILED                                                 syscall.Errno = 571
	ERROR_CONTROL_C_EXIT                                                      syscall.Errno = 572
	ERROR_MISSING_SYSTEMFILE                                                  syscall.Errno = 573
	ERROR_UNHANDLED_EXCEPTION                                                 syscall.Errno = 574
	ERROR_APP_INIT_FAILURE                                                    syscall.Errno = 575
	ERROR_PAGEFILE_CREATE_FAILED                                              syscall.Errno = 576
	ERROR_INVALID_IMAGE_HASH                                                  syscall.Errno = 577
	ERROR_NO_PAGEFILE                                                         syscall.Errno = 578
	ERROR_ILLEGAL_FLOAT_CONTEXT                                               syscall.Errno = 579
	ERROR_NO_EVENT_PAIR                                                       syscall.Errno = 580
	ERROR_DOMAIN_CTRLR_CONFIG_ERROR                                           syscall.Errno = 581
	ERROR_ILLEGAL_CHARACTER                                                   syscall.Errno = 582
	ERROR_UNDEFINED_CHARACTER                                                 syscall.Errno = 583
	ERROR_FLOPPY_VOLUME                                                       syscall.Errno = 584
	ERROR_BIOS_FAILED_TO_CONNECT_INTERRUPT                                    syscall.Errno = 585
	ERROR_BACKUP_CONTROLLER                                                   syscall.Errno = 586
	ERROR_MUTANT_LIMIT_EXCEEDED                                               syscall.Errno = 587
	ERROR_FS_DRIVER_REQUIRED                                                  syscall.Errno = 588
	ERROR_CANNOT_LOAD_REGISTRY_FILE                                           syscall.Errno = 589
	ERROR_DEBUG_ATTACH_FAILED                                                 syscall.Errno = 590
	ERROR_SYSTEM_PROCESS_TERMINATED                                           syscall.Errno = 591
	ERROR_DATA_NOT_ACCEPTED                                                   syscall.Errno = 592
	ERROR_VDM_HARD_ERROR                                                      syscall.Errno = 593
	ERROR_DRIVER_CANCEL_TIMEOUT                                               syscall.Errno = 594
	ERROR_REPLY_MESSAGE_MISMATCH                                              syscall.Errno = 595
	ERROR_LOST_WRITEBEHIND_DATA                                               syscall.Errno = 596
	ERROR_CLIENT_SERVER_PARAMETERS_INVALID                                    syscall.Errno = 597
	ERROR_NOT_TINY_STREAM                                                     syscall.Errno = 598
	ERROR_STACK_OVERFLOW_READ                                                 syscall.Errno = 599
	ERROR_CONVERT_TO_LARGE                                                    syscall.Errno = 600
	ERROR_FOUND_OUT_OF_SCOPE                                                  syscall.Errno = 601
	ERROR_ALLOCATE_BUCKET                                                     syscall.Errno = 602
	ERROR_MARSHALL_OVERFLOW                                                   syscall.Errno = 603
	ERROR_INVALID_VARIANT                                                     syscall.Errno = 604
	ERROR_BAD_COMPRESSION_BUFFER                                              syscall.Errno = 605
	ERROR_AUDIT_FAILED                                                        syscall.Errno = 606
	ERROR_TIMER_RESOLUTION_NOT_SET                                            syscall.Errno = 607
	ERROR_INSUFFICIENT_LOGON_INFO                                             syscall.Errno = 608
	ERROR_BAD_DLL_ENTRYPOINT                                                  syscall.Errno = 609
	ERROR_BAD_SERVICE_ENTRYPOINT                                              syscall.Errno = 610
	ERROR_IP_ADDRESS_CONFLICT1                                                syscall.Errno = 611
	ERROR_IP_ADDRESS_CONFLICT2                                                syscall.Errno = 612
	ERROR_REGISTRY_QUOTA_LIMIT                                                syscall.Errno = 613
	ERROR_NO_CALLBACK_ACTIVE                                                  syscall.Errno = 614
	ERROR_PWD_TOO_SHORT                                                       syscall.Errno = 615
	ERROR_PWD_TOO_RECENT                                                      syscall.Errno = 616
	ERROR_PWD_HISTORY_CONFLICT                                                syscall.Errno = 617
	ERROR_UNSUPPORTED_COMPRESSION                                             syscall.Errno = 618
	ERROR_INVALID_HW_PROFILE                                                  syscall.Errno = 619
	ERROR_INVALID_PLUGPLAY_DEVICE_PATH                                        syscall.Errno = 620
	ERROR_QUOTA_LIST_INCONSISTENT                                             syscall.Errno = 621
	ERROR_EVALUATION_EXPIRATION                                               syscall.Errno = 622
	ERROR_ILLEGAL_DLL_RELOCATION                                              syscall.Errno = 623
	ERROR_DLL_INIT_FAILED_LOGOFF                                              syscall.Errno = 624
	ERROR_VALIDATE_CONTINUE                                                   syscall.Errno = 625
	ERROR_NO_MORE_MATCHES                                                     syscall.Errno = 626
	ERROR_RANGE_LIST_CONFLICT                                                 syscall.Errno = 627
	ERROR_SERVER_SID_MISMATCH                                                 syscall.Errno = 628
	ERROR_CANT_ENABLE_DENY_ONLY                                               syscall.Errno = 629
	ERROR_FLOAT_MULTIPLE_FAULTS                                               syscall.Errno = 630
	ERROR_FLOAT_MULTIPLE_TRAPS                                                syscall.Errno = 631
	ERROR_NOINTERFACE                                                         syscall.Errno = 632
	ERROR_DRIVER_FAILED_SLEEP                                                 syscall.Errno = 633
	ERROR_CORRUPT_SYSTEM_FILE                                                 syscall.Errno = 634
	ERROR_COMMITMENT_MINIMUM                                                  syscall.Errno = 635
	ERROR_PNP_RESTART_ENUMERATION                                             syscall.Errno = 636
	ERROR_SYSTEM_IMAGE_BAD_SIGNATURE                                          syscall.Errno = 637
	ERROR_PNP_REBOOT_REQUIRED                                                 syscall.Errno = 638
	ERROR_INSUFFICIENT_POWER                                                  syscall.Errno = 639
	ERROR_MULTIPLE_FAULT_VIOLATION                                            syscall.Errno = 640
	ERROR_SYSTEM_SHUTDOWN                                                     syscall.Errno = 641
	ERROR_PORT_NOT_SET                                                        syscall.Errno = 642
	ERROR_DS_VERSION_CHECK_FAILURE                                            syscall.Errno = 643
	ERROR_RANGE_NOT_FOUND                                                     syscall.Errno = 644
	ERROR_NOT_SAFE_MODE_DRIVER                                                syscall.Errno = 646
	ERROR_FAILED_DRIVER_ENTRY                                                 syscall.Errno = 647
	ERROR_DEVICE_ENUMERATION_ERROR                                            syscall.Errno = 648
	ERROR_MOUNT_POINT_NOT_RESOLVED                                            syscall.Errno = 649
	ERROR_INVALID_DEVICE_OBJECT_PARAMETER                                     syscall.Errno = 650
	ERROR_MCA_OCCURED                                                         syscall.Errno = 651
	ERROR_DRIVER_DATABASE_ERROR                                               syscall.Errno = 652
	ERROR_SYSTEM_HIVE_TOO_LARGE                                               syscall.Errno = 653
	ERROR_DRIVER_FAILED_PRIOR_UNLOAD                                          syscall.Errno = 654
	ERROR_VOLSNAP_PREPARE_HIBERNATE                                           syscall.Errno = 655
	ERROR_HIBERNATION_FAILURE                                                 syscall.Errno = 656
	ERROR_PWD_TOO_LONG                                                        syscall.Errno = 657
	ERROR_FILE_SYSTEM_LIMITATION                                              syscall.Errno = 665
	ERROR_ASSERTION_FAILURE                                                   syscall.Errno = 668
	ERROR_ACPI_ERROR                                                          syscall.Errno = 669
	ERROR_WOW_ASSERTION                                                       syscall.Errno = 670
	ERROR_PNP_BAD_MPS_TABLE                                                   syscall.Errno = 671
	ERROR_PNP_TRANSLATION_FAILED                                              syscall.Errno = 672
	ERROR_PNP_IRQ_TRANSLATION_FAILED                                          syscall.Errno = 673
	ERROR_PNP_INVALID_ID                                                      syscall.Errno = 674
	ERROR_WAKE_SYSTEM_DEBUGGER                                                syscall.Errno = 675
	ERROR_HANDLES_CLOSED                                                      syscall.Errno = 676
	ERROR_EXTRANEOUS_INFORMATION                                              syscall.Errno = 677
	ERROR_RXACT_COMMIT_NECESSARY                                              syscall.Errno = 678
	ERROR_MEDIA_CHECK                                                         syscall.Errno = 679
	ERROR_GUID_SUBSTITUTION_MADE                                              syscall.Errno = 680
	ERROR_STOPPED_ON_SYMLINK                                                  syscall.Errno = 681
	ERROR_LONGJUMP                                                            syscall.Errno = 682
	ERROR_PLUGPLAY_QUERY_VETOED                                               syscall.Errno = 683
	ERROR_UNWIND_CONSOLIDATE                                                  syscall.Errno = 684
	ERROR_REGISTRY_HIVE_RECOVERED                                             syscall.Errno = 685
	ERROR_DLL_MIGHT_BE_INSECURE                                               syscall.Errno = 686
	ERROR_DLL_MIGHT_BE_INCOMPATIBLE                                           syscall.Errno = 687
	ERROR_DBG_EXCEPTION_NOT_HANDLED                                           syscall.Errno = 688
	ERROR_DBG_REPLY_LATER                                                     syscall.Errno = 689
	ERROR_DBG_UNABLE_TO_PROVIDE_HANDLE                                        syscall.Errno = 690
	ERROR_DBG_TERMINATE_THREAD                                                syscall.Errno = 691
	ERROR_DBG_TERMINATE_PROCESS                                               syscall.Errno = 692
	ERROR_DBG_CONTROL_C                                                       syscall.Errno = 693
	ERROR_DBG_PRINTEXCEPTION_C                                                syscall.Errno = 694
	ERROR_DBG_RIPEXCEPTION                                                    syscall.Errno = 695
	ERROR_DBG_CONTROL_BREAK                                                   syscall.Errno = 696
	ERROR_DBG_COMMAND_EXCEPTION                                               syscall.Errno = 697
	ERROR_OBJECT_NAME_EXISTS                                                  syscall.Errno = 698
	ERROR_THREAD_WAS_SUSPENDED                                                syscall.Errno = 699
	ERROR_IMAGE_NOT_AT_BASE                                                   syscall.Errno = 700
	ERROR_RXACT_STATE_CREATED                                                 syscall.Errno = 701
	ERROR_SEGMENT_NOTIFICATION                                                syscall.Errno = 702
	ERROR_BAD_CURRENT_DIRECTORY                                               syscall.Errno = 703
	ERROR_FT_READ_RECOVERY_FROM_BACKUP                                        syscall.Errno = 704
	ERROR_FT_WRITE_RECOVERY                                                   syscall.Errno = 705
	ERROR_IMAGE_MACHINE_TYPE_MISMATCH                                         syscall.Errno = 706
	ERROR_RECEIVE_PARTIAL                                                     syscall.Errno = 707
	ERROR_RECEIVE_EXPEDITED                                                   syscall.Errno = 708
	ERROR_RECEIVE_PARTIAL_EXPEDITED                                           syscall.Errno = 709
	ERROR_EVENT_DONE                                                          syscall.Errno = 710
	ERROR_EVENT_PENDING                                                       syscall.Errno = 711
	ERROR_CHECKING_FILE_SYSTEM                                                syscall.Errno = 712
	ERROR_FATAL_APP_EXIT                                                      syscall.Errno = 713
	ERROR_PREDEFINED_HANDLE                                                   syscall.Errno = 714
	ERROR_WAS_UNLOCKED                                                        syscall.Errno = 715
	ERROR_SERVICE_NOTIFICATION                                                syscall.Errno = 716
	ERROR_WAS_LOCKED                                                          syscall.Errno = 717
	ERROR_LOG_HARD_ERROR                                                      syscall.Errno = 718
	ERROR_ALREADY_WIN32                                                       syscall.Errno = 719
	ERROR_IMAGE_MACHINE_TYPE_MISMATCH_EXE                                     syscall.Errno = 720
	ERROR_NO_YIELD_PERFORMED                                                  syscall.Errno = 721
	ERROR_TIMER_RESUME_IGNORED                                                syscall.Errno = 722
	ERROR_ARBITRATION_UNHANDLED                                               syscall.Errno = 723
	ERROR_CARDBUS_NOT_SUPPORTED                                               syscall.Errno = 724
	ERROR_MP_PROCESSOR_MISMATCH                                               syscall.Errno = 725
	ERROR_HIBERNATED                                                          syscall.Errno = 726
	ERROR_RESUME_HIBERNATION                                                  syscall.Errno = 727
	ERROR_FIRMWARE_UPDATED                                                    syscall.Errno = 728
	ERROR_DRIVERS_LEAKING_LOCKED_PAGES                                        syscall.Errno = 729
	ERROR_WAKE_SYSTEM                                                         syscall.Errno = 730
	ERROR_WAIT_1                                                              syscall.Errno = 731
	ERROR_WAIT_2                                                              syscall.Errno = 732
	ERROR_WAIT_3                                                              syscall.Errno = 733
	ERROR_WAIT_63                                                             syscall.Errno = 734
	ERROR_ABANDONED_WAIT_0                                                    syscall.Errno = 735
	ERROR_ABANDONED_WAIT_63                                                   syscall.Errno = 736
	ERROR_USER_APC                                                            syscall.Errno = 737
	ERROR_KERNEL_APC                                                          syscall.Errno = 738
	ERROR_ALERTED                                                             syscall.Errno = 739
	ERROR_ELEVATION_REQUIRED                                                  syscall.Errno = 740
	ERROR_REPARSE                                                             syscall.Errno = 741
	ERROR_OPLOCK_BREAK_IN_PROGRESS                                            syscall.Errno = 742
	ERROR_VOLUME_MOUNTED                                                      syscall.Errno = 743
	ERROR_RXACT_COMMITTED                                                     syscall.Errno = 744
	ERROR_NOTIFY_CLEANUP                                                      syscall.Errno = 745
	ERROR_PRIMARY_TRANSPORT_CONNECT_FAILED                                    syscall.Errno = 746
	ERROR_PAGE_FAULT_TRANSITION                                               syscall.Errno = 747
	ERROR_PAGE_FAULT_DEMAND_ZERO                                              syscall.Errno = 748
	ERROR_PAGE_FAULT_COPY_ON_WRITE                                            syscall.Errno = 749
	ERROR_PAGE_FAULT_GUARD_PAGE                                               syscall.Errno = 750
	ERROR_PAGE_FAULT_PAGING_FILE                                              syscall.Errno = 751
	ERROR_CACHE_PAGE_LOCKED                                                   syscall.Errno = 752
	ERROR_CRASH_DUMP                                                          syscall.Errno = 753
	ERROR_BUFFER_ALL_ZEROS                                                    syscall.Errno = 754
	ERROR_REPARSE_OBJECT                                                      syscall.Errno = 755
	ERROR_RESOURCE_REQUIREMENTS_CHANGED                                       syscall.Errno = 756
	ERROR_TRANSLATION_COMPLETE                                                syscall.Errno = 757
	ERROR_NOTHING_TO_TERMINATE                                                syscall.Errno = 758
	ERROR_PROCESS_NOT_IN_JOB                                                  syscall.Errno = 759
	ERROR_PROCESS_IN_JOB                                                      syscall.Errno = 760
	ERROR_VOLSNAP_HIBERNATE_READY                                             syscall.Errno = 761
	ERROR_FSFILTER_OP_COMPLETED_SUCCESSFULLY                                  syscall.Errno = 762
	ERROR_INTERRUPT_VECTOR_ALREADY_CONNECTED                                  syscall.Errno = 763
	ERROR_INTERRUPT_STILL_CONNECTED                                           syscall.Errno = 764
	ERROR_WAIT_FOR_OPLOCK                                                     syscall.Errno = 765
	ERROR_DBG_EXCEPTION_HANDLED                                               syscall.Errno = 766
	ERROR_DBG_CONTINUE                                                        syscall.Errno = 767
	ERROR_CALLBACK_POP_STACK                                                  syscall.Errno = 768
	ERROR_COMPRESSION_DISABLED                                                syscall.Errno = 769
	ERROR_CANTFETCHBACKWARDS                                                  syscall.Errno = 770
	ERROR_CANTSCROLLBACKWARDS                                                 syscall.Errno = 771
	ERROR_ROWSNOTRELEASED                                                     syscall.Errno = 772
	ERROR_BAD_ACCESSOR_FLAGS                                                  syscall.Errno = 773
	ERROR_ERRORS_ENCOUNTERED                                                  syscall.Errno = 774
	ERROR_NOT_CAPABLE                                                         syscall.Errno = 775
	ERROR_REQUEST_OUT_OF_SEQUENCE                                             syscall.Errno = 776
	ERROR_VERSION_PARSE_ERROR                                                 syscall.Errno = 777
	ERROR_BADSTARTPOSITION                                                    syscall.Errno = 778
	ERROR_MEMORY_HARDWARE                                                     syscall.Errno = 779
	ERROR_DISK_REPAIR_DISABLED                                                syscall.Errno = 780
	ERROR_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE             syscall.Errno = 781
	ERROR_SYSTEM_POWERSTATE_TRANSITION                                        syscall.Errno = 782
	ERROR_SYSTEM_POWERSTATE_COMPLEX_TRANSITION                                syscall.Errno = 783
	ERROR_MCA_EXCEPTION                                                       syscall.Errno = 784
	ERROR_ACCESS_AUDIT_BY_POLICY                                              syscall.Errno = 785
	ERROR_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY                               syscall.Errno = 786
	ERROR_ABANDON_HIBERFILE                                                   syscall.Errno = 787
	ERROR_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED                          syscall.Errno = 788
	ERROR_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR                          syscall.Errno = 789
	ERROR_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR                              syscall.Errno = 790
	ERROR_BAD_MCFG_TABLE                                                      syscall.Errno = 791
	ERROR_DISK_REPAIR_REDIRECTED                                              syscall.Errno = 792
	ERROR_DISK_REPAIR_UNSUCCESSFUL                                            syscall.Errno = 793
	ERROR_CORRUPT_LOG_OVERFULL                                                syscall.Errno = 794
	ERROR_CORRUPT_LOG_CORRUPTED                                               syscall.Errno = 795
	ERROR_CORRUPT_LOG_UNAVAILABLE                                             syscall.Errno = 796
	ERROR_CORRUPT_LOG_DELETED_FULL                                            syscall.Errno = 797
	ERROR_CORRUPT_LOG_CLEARED                                                 syscall.Errno = 798
	ERROR_ORPHAN_NAME_EXHAUSTED                                               syscall.Errno = 799
	ERROR_OPLOCK_SWITCHED_TO_NEW_HANDLE                                       syscall.Errno = 800
	ERROR_CANNOT_GRANT_REQUESTED_OPLOCK                                       syscall.Errno = 801
	ERROR_CANNOT_BREAK_OPLOCK                                                 syscall.Errno = 802
	ERROR_OPLOCK_HANDLE_CLOSED                                                syscall.Errno = 803
	ERROR_NO_ACE_CONDITION                                                    syscall.Errno = 804
	ERROR_INVALID_ACE_CONDITION                                               syscall.Errno = 805
	ERROR_FILE_HANDLE_REVOKED                                                 syscall.Errno = 806
	ERROR_IMAGE_AT_DIFFERENT_BASE                                             syscall.Errno = 807
	ERROR_ENCRYPTED_IO_NOT_POSSIBLE                                           syscall.Errno = 808
	ERROR_FILE_METADATA_OPTIMIZATION_IN_PROGRESS                              syscall.Errno = 809
	ERROR_QUOTA_ACTIVITY                                                      syscall.Errno = 810
	ERROR_HANDLE_REVOKED                                                      syscall.Errno = 811
	ERROR_CALLBACK_INVOKE_INLINE                                              syscall.Errno = 812
	ERROR_CPU_SET_INVALID                                                     syscall.Errno = 813
	ERROR_ENCLAVE_NOT_TERMINATED                                              syscall.Errno = 814
	ERROR_ENCLAVE_VIOLATION                                                   syscall.Errno = 815
	ERROR_EA_ACCESS_DENIED                                                    syscall.Errno = 994
	ERROR_OPERATION_ABORTED                                                   syscall.Errno = 995
	ERROR_IO_INCOMPLETE                                                       syscall.Errno = 996
	ERROR_IO_PENDING                                                          syscall.Errno = 997
	ERROR_NOACCESS                                                            syscall.Errno = 998
	ERROR_SWAPERROR                                                           syscall.Errno = 999
	ERROR_STACK_OVERFLOW                                                      syscall.Errno = 1001
	ERROR_INVALID_MESSAGE                                                     syscall.Errno = 1002
	ERROR_CAN_NOT_COMPLETE                                                    syscall.Errno = 1003
	ERROR_INVALID_FLAGS                                                       syscall.Errno = 1004
	ERROR_UNRECOGNIZED_VOLUME                                                 syscall.Errno = 1005
	ERROR_FILE_INVALID                                                        syscall.Errno = 1006
	ERROR_FULLSCREEN_MODE                                                     syscall.Errno = 1007
	ERROR_NO_TOKEN                                                            syscall.Errno = 1008
	ERROR_BADDB                                                               syscall.Errno = 1009
	ERROR_BADKEY                                                              syscall.Errno = 1010
	ERROR_CANTOPEN                                                            syscall.Errno = 1011
	ERROR_CANTREAD                                                            syscall.Errno = 1012
	ERROR_CANTWRITE                                                           syscall.Errno = 1013
	ERROR_REGISTRY_RECOVERED                                                  syscall.Errno = 1014
	ERROR_REGISTRY_CORRUPT                                                    syscall.Errno = 1015
	ERROR_REGISTRY_IO_FAILED                                                  syscall.Errno = 1016
	ERROR_NOT_REGISTRY_FILE                                                   syscall.Errno = 1017
	ERROR_KEY_DELETED                                                         syscall.Errno = 1018
	ERROR_NO_LOG_SPACE                                                        syscall.Errno = 1019
	ERROR_KEY_HAS_CHILDREN                                                    syscall.Errno = 1020
	ERROR_CHILD_MUST_BE_VOLATILE                                              syscall.Errno = 1021
	ERROR_NOTIFY_ENUM_DIR                                                     syscall.Errno = 1022
	ERROR_DEPENDENT_SERVICES_RUNNING                                          syscall.Errno = 1051
	ERROR_INVALID_SERVICE_CONTROL                                             syscall.Errno = 1052
	ERROR_SERVICE_REQUEST_TIMEOUT                                             syscall.Errno = 1053
	ERROR_SERVICE_NO_THREAD                                                   syscall.Errno = 1054
	ERROR_SERVICE_DATABASE_LOCKED                                             syscall.Errno = 1055
	ERROR_SERVICE_ALREADY_RUNNING                                             syscall.Errno = 1056
	ERROR_INVALID_SERVICE_ACCOUNT                                             syscall.Errno = 1057
	ERROR_SERVICE_DISABLED                                                    syscall.Errno = 1058
	ERROR_CIRCULAR_DEPENDENCY                                                 syscall.Errno = 1059
	ERROR_SERVICE_DOES_NOT_EXIST                                              syscall.Errno = 1060
	ERROR_SERVICE_CANNOT_ACCEPT_CTRL                                          syscall.Errno = 1061
	ERROR_SERVICE_NOT_ACTIVE                                                  syscall.Errno = 1062
	ERROR_FAILED_SERVICE_CONTROLLER_CONNECT                                   syscall.Errno = 1063
	ERROR_EXCEPTION_IN_SERVICE                                                syscall.Errno = 1064
	ERROR_DATABASE_DOES_NOT_EXIST                                             syscall.Errno = 1065
	ERROR_SERVICE_SPECIFIC_ERROR                                              syscall.Errno = 1066
	ERROR_PROCESS_ABORTED                                                     syscall.Errno = 1067
	ERROR_SERVICE_DEPENDENCY_FAIL                                             syscall.Errno = 1068
	ERROR_SERVICE_LOGON_FAILED                                                syscall.Errno = 1069
	ERROR_SERVICE_START_HANG                                                  syscall.Errno = 1070
	ERROR_INVALID_SERVICE_LOCK                                                syscall.Errno = 1071
	ERROR_SERVICE_MARKED_FOR_DELETE                                           syscall.Errno = 1072
	ERROR_SERVICE_EXISTS                                                      syscall.Errno = 1073
	ERROR_ALREADY_RUNNING_LKG                                                 syscall.Errno = 1074
	ERROR_SERVICE_DEPENDENCY_DELETED                                          syscall.Errno = 1075
	ERROR_BOOT_ALREADY_ACCEPTED                                               syscall.Errno = 1076
	ERROR_SERVICE_NEVER_STARTED                                               syscall.Errno = 1077
	ERROR_DUPLICATE_SERVICE_NAME                                              syscall.Errno = 1078
	ERROR_DIFFERENT_SERVICE_ACCOUNT                                           syscall.Errno = 1079
	ERROR_CANNOT_DETECT_DRIVER_FAILURE                                        syscall.Errno = 1080
	ERROR_CANNOT_DETECT_PROCESS_ABORT                                         syscall.Errno = 1081
	ERROR_NO_RECOVERY_PROGRAM                                                 syscall.Errno = 1082
	ERROR_SERVICE_NOT_IN_EXE                                                  syscall.Errno = 1083
	ERROR_NOT_SAFEBOOT_SERVICE                                                syscall.Errno = 1084
	ERROR_END_OF_MEDIA                                                        syscall.Errno = 1100
	ERROR_FILEMARK_DETECTED                                                   syscall.Errno = 1101
	ERROR_BEGINNING_OF_MEDIA                                                  syscall.Errno = 1102
	ERROR_SETMARK_DETECTED                                                    syscall.Errno = 1103
	ERROR_NO_DATA_DETECTED                                                    syscall.Errno = 1104
	ERROR_PARTITION_FAILURE                                                   syscall.Errno = 1105
	ERROR_INVALID_BLOCK_LENGTH                                                syscall.Errno = 1106
	ERROR_DEVICE_NOT_PARTITIONED                                              syscall.Errno = 1107
	ERROR_UNABLE_TO_LOCK_MEDIA                                                syscall.Errno = 1108
	ERROR_UNABLE_TO_UNLOAD_MEDIA                                              syscall.Errno = 1109
	ERROR_MEDIA_CHANGED                                                       syscall.Errno = 1110
	ERROR_BUS_RESET                                                           syscall.Errno = 1111
	ERROR_NO_MEDIA_IN_DRIVE                                                   syscall.Errno = 1112
	ERROR_NO_UNICODE_TRANSLATION                                              syscall.Errno = 1113
	ERROR_DLL_INIT_FAILED                                                     syscall.Errno = 1114
	ERROR_SHUTDOWN_IN_PROGRESS                                                syscall.Errno = 1115
	ERROR_NO_SHUTDOWN_IN_PROGRESS                                             syscall.Errno = 1116
	ERROR_IO_DEVICE                                                           syscall.Errno = 1117
	ERROR_SERIAL_NO_DEVICE                                                    syscall.Errno = 1118
	ERROR_IRQ_BUSY                                                            syscall.Errno = 1119
	ERROR_MORE_WRITES                                                         syscall.Errno = 1120
	ERROR_COUNTER_TIMEOUT                                                     syscall.Errno = 1121
	ERROR_FLOPPY_ID_MARK_NOT_FOUND                                            syscall.Errno = 1122
	ERROR_FLOPPY_WRONG_CYLINDER                                               syscall.Errno = 1123
	ERROR_FLOPPY_UNKNOWN_ERROR                                                syscall.Errno = 1124
	ERROR_FLOPPY_BAD_REGISTERS                                                syscall.Errno = 1125
	ERROR_DISK_RECALIBRATE_FAILED                                             syscall.Errno = 1126
	ERROR_DISK_OPERATION_FAILED                                               syscall.Errno = 1127
	ERROR_DISK_RESET_FAILED                                                   syscall.Errno = 1128
	ERROR_EOM_OVERFLOW                                                        syscall.Errno = 1129
	ERROR_NOT_ENOUGH_SERVER_MEMORY                                            syscall.Errno = 1130
	ERROR_POSSIBLE_DEADLOCK                                                   syscall.Errno = 1131
	ERROR_MAPPED_ALIGNMENT                                                    syscall.Errno = 1132
	ERROR_SET_POWER_STATE_VETOED                                              syscall.Errno = 1140
	ERROR_SET_POWER_STATE_FAILED                                              syscall.Errno = 1141
	ERROR_TOO_MANY_LINKS                                                      syscall.Errno = 1142
	ERROR_OLD_WIN_VERSION                                                     syscall.Errno = 1150
	ERROR_APP_WRONG_OS                                                        syscall.Errno = 1151
	ERROR_SINGLE_INSTANCE_APP                                                 syscall.Errno = 1152
	ERROR_RMODE_APP                                                           syscall.Errno = 1153
	ERROR_INVALID_DLL                                                         syscall.Errno = 1154
	ERROR_NO_ASSOCIATION                                                      syscall.Errno = 1155
	ERROR_DDE_FAIL                                                            syscall.Errno = 1156
	ERROR_DLL_NOT_FOUND                                                       syscall.Errno = 1157
	ERROR_NO_MORE_USER_HANDLES                                                syscall.Errno = 1158
	ERROR_MESSAGE_SYNC_ONLY                                                   syscall.Errno = 1159
	ERROR_SOURCE_ELEMENT_EMPTY                                                syscall.Errno = 1160
	ERROR_DESTINATION_ELEMENT_FULL                                            syscall.Errno = 1161
	ERROR_ILLEGAL_ELEMENT_ADDRESS                                             syscall.Errno = 1162
	ERROR_MAGAZINE_NOT_PRESENT                                                syscall.Errno = 1163
	ERROR_DEVICE_REINITIALIZATION_NEEDED                                      syscall.Errno = 1164
	ERROR_DEVICE_REQUIRES_CLEANING                                            syscall.Errno = 1165
	ERROR_DEVICE_DOOR_OPEN                                                    syscall.Errno = 1166
	ERROR_DEVICE_NOT_CONNECTED                                                syscall.Errno = 1167
	ERROR_NOT_FOUND                                                           syscall.Errno = 1168
	ERROR_NO_MATCH                                                            syscall.Errno = 1169
	ERROR_SET_NOT_FOUND                                                       syscall.Errno = 1170
	ERROR_POINT_NOT_FOUND                                                     syscall.Errno = 1171
	ERROR_NO_TRACKING_SERVICE                                                 syscall.Errno = 1172
	ERROR_NO_VOLUME_ID                                                        syscall.Errno = 1173
	ERROR_UNABLE_TO_REMOVE_REPLACED                                           syscall.Errno = 1175
	ERROR_UNABLE_TO_MOVE_REPLACEMENT                                          syscall.Errno = 1176
	ERROR_UNABLE_TO_MOVE_REPLACEMENT_2                                        syscall.Errno = 1177
	ERROR_JOURNAL_DELETE_IN_PROGRESS                                          syscall.Errno = 1178
	ERROR_JOURNAL_NOT_ACTIVE                                                  syscall.Errno = 1179
	ERROR_POTENTIAL_FILE_FOUND                                                syscall.Errno = 1180
	ERROR_JOURNAL_ENTRY_DELETED                                               syscall.Errno = 1181
	ERROR_SHUTDOWN_IS_SCHEDULED                                               syscall.Errno = 1190
	ERROR_SHUTDOWN_USERS_LOGGED_ON                                            syscall.Errno = 1191
	ERROR_BAD_DEVICE                                                          syscall.Errno = 1200
	ERROR_CONNECTION_UNAVAIL                                                  syscall.Errno = 1201
	ERROR_DEVICE_ALREADY_REMEMBERED                                           syscall.Errno = 1202
	ERROR_NO_NET_OR_BAD_PATH                                                  syscall.Errno = 1203
	ERROR_BAD_PROVIDER                                                        syscall.Errno = 1204
	ERROR_CANNOT_OPEN_PROFILE                                                 syscall.Errno = 1205
	ERROR_BAD_PROFILE                                                         syscall.Errno = 1206
	ERROR_NOT_CONTAINER                                                       syscall.Errno = 1207
	ERROR_EXTENDED_ERROR                                                      syscall.Errno = 1208
	ERROR_INVALID_GROUPNAME                                                   syscall.Errno = 1209
	ERROR_INVALID_COMPUTERNAME                                                syscall.Errno = 1210
	ERROR_INVALID_EVENTNAME                                                   syscall.Errno = 1211
	ERROR_INVALID_DOMAINNAME                                                  syscall.Errno = 1212
	ERROR_INVALID_SERVICENAME                                                 syscall.Errno = 1213
	ERROR_INVALID_NETNAME                                                     syscall.Errno = 1214
	ERROR_INVALID_SHARENAME                                                   syscall.Errno = 1215
	ERROR_INVALID_PASSWORDNAME                                                syscall.Errno = 1216
	ERROR_INVALID_MESSAGENAME                                                 syscall.Errno = 1217
	ERROR_INVALID_MESSAGEDEST                                                 syscall.Errno = 1218
	ERROR_SESSION_CREDENTIAL_CONFLICT                                         syscall.Errno = 1219
	ERROR_REMOTE_SESSION_LIMIT_EXCEEDED                                       syscall.Errno = 1220
	ERROR_DUP_DOMAINNAME                                                      syscall.Errno = 1221
	ERROR_NO_NETWORK                                                          syscall.Errno = 1222
	ERROR_CANCELLED                                                           syscall.Errno = 1223
	ERROR_USER_MAPPED_FILE                                                    syscall.Errno = 1224
	ERROR_CONNECTION_REFUSED                                                  syscall.Errno = 1225
	ERROR_GRACEFUL_DISCONNECT                                                 syscall.Errno = 1226
	ERROR_ADDRESS_ALREADY_ASSOCIATED                                          syscall.Errno = 1227
	ERROR_ADDRESS_NOT_ASSOCIATED                                              syscall.Errno = 1228
	ERROR_CONNECTION_INVALID                                                  syscall.Errno = 1229
	ERROR_CONNECTION_ACTIVE                                                   syscall.Errno = 1230
	ERROR_NETWORK_UNREACHABLE                                                 syscall.Errno = 1231
	ERROR_HOST_UNREACHABLE                                                    syscall.Errno = 1232
	ERROR_PROTOCOL_UNREACHABLE                                                syscall.Errno = 1233
	ERROR_PORT_UNREACHABLE                                                    syscall.Errno = 1234
	ERROR_REQUEST_ABORTED                                                     syscall.Errno = 1235
	ERROR_CONNECTION_ABORTED                                                  syscall.Errno = 1236
	ERROR_RETRY                                                               syscall.Errno = 1237
	ERROR_CONNECTION_COUNT_LIMIT                                              syscall.Errno = 1238
	ERROR_LOGIN_TIME_RESTRICTION                                              syscall.Errno = 1239
	ERROR_LOGIN_WKSTA_RESTRICTION                                             syscall.Errno = 1240
	ERROR_INCORRECT_ADDRESS                                                   syscall.Errno = 1241
	ERROR_ALREADY_REGISTERED                                                  syscall.Errno = 1242
	ERROR_SERVICE_NOT_FOUND                                                   syscall.Errno = 1243
	ERROR_NOT_AUTHENTICATED                                                   syscall.Errno = 1244
	ERROR_NOT_LOGGED_ON                                                       syscall.Errno = 1245
	ERROR_CONTINUE                                                            syscall.Errno = 1246
	ERROR_ALREADY_INITIALIZED                                                 syscall.Errno = 1247
	ERROR_NO_MORE_DEVICES                                                     syscall.Errno = 1248
	ERROR_NO_SUCH_SITE                                                        syscall.Errno = 1249
	ERROR_DOMAIN_CONTROLLER_EXISTS                                            syscall.Errno = 1250
	ERROR_ONLY_IF_CONNECTED                                                   syscall.Errno = 1251
	ERROR_OVERRIDE_NOCHANGES                                                  syscall.Errno = 1252
	ERROR_BAD_USER_PROFILE                                                    syscall.Errno = 1253
	ERROR_NOT_SUPPORTED_ON_SBS                                                syscall.Errno = 1254
	ERROR_SERVER_SHUTDOWN_IN_PROGRESS                                         syscall.Errno = 1255
	ERROR_HOST_DOWN                                                           syscall.Errno = 1256
	ERROR_NON_ACCOUNT_SID                                                     syscall.Errno = 1257
	ERROR_NON_DOMAIN_SID                                                      syscall.Errno = 1258
	ERROR_APPHELP_BLOCK                                                       syscall.Errno = 1259
	ERROR_ACCESS_DISABLED_BY_POLICY                                           syscall.Errno = 1260
	ERROR_REG_NAT_CONSUMPTION                                                 syscall.Errno = 1261
	ERROR_CSCSHARE_OFFLINE                                                    syscall.Errno = 1262
	ERROR_PKINIT_FAILURE                                                      syscall.Errno = 1263
	ERROR_SMARTCARD_SUBSYSTEM_FAILURE                                         syscall.Errno = 1264
	ERROR_DOWNGRADE_DETECTED                                                  syscall.Errno = 1265
	ERROR_MACHINE_LOCKED                                                      syscall.Errno = 1271
	ERROR_SMB_GUEST_LOGON_BLOCKED                                             syscall.Errno = 1272
	ERROR_CALLBACK_SUPPLIED_INVALID_DATA                                      syscall.Errno = 1273
	ERROR_SYNC_FOREGROUND_REFRESH_REQUIRED                                    syscall.Errno = 1274
	ERROR_DRIVER_BLOCKED                                                      syscall.Errno = 1275
	ERROR_INVALID_IMPORT_OF_NON_DLL                                           syscall.Errno = 1276
	ERROR_ACCESS_DISABLED_WEBBLADE                                            syscall.Errno = 1277
	ERROR_ACCESS_DISABLED_WEBBLADE_TAMPER                                     syscall.Errno = 1278
	ERROR_RECOVERY_FAILURE                                                    syscall.Errno = 1279
	ERROR_ALREADY_FIBER                                                       syscall.Errno = 1280
	ERROR_ALREADY_THREAD                                                      syscall.Errno = 1281
	ERROR_STACK_BUFFER_OVERRUN                                                syscall.Errno = 1282
	ERROR_PARAMETER_QUOTA_EXCEEDED                                            syscall.Errno = 1283
	ERROR_DEBUGGER_INACTIVE                                                   syscall.Errno = 1284
	ERROR_DELAY_LOAD_FAILED                                                   syscall.Errno = 1285
	ERROR_VDM_DISALLOWED                                                      syscall.Errno = 1286
	ERROR_UNIDENTIFIED_ERROR                                                  syscall.Errno = 1287
	ERROR_INVALID_CRUNTIME_PARAMETER                                          syscall.Errno = 1288
	ERROR_BEYOND_VDL                                                          syscall.Errno = 1289
	ERROR_INCOMPATIBLE_SERVICE_SID_TYPE                                       syscall.Errno = 1290
	ERROR_DRIVER_PROCESS_TERMINATED                                           syscall.Errno = 1291
	ERROR_IMPLEMENTATION_LIMIT                                                syscall.Errno = 1292
	ERROR_PROCESS_IS_PROTECTED                                                syscall.Errno = 1293
	ERROR_SERVICE_NOTIFY_CLIENT_LAGGING                                       syscall.Errno = 1294
	ERROR_DISK_QUOTA_EXCEEDED                                                 syscall.Errno = 1295
	ERROR_CONTENT_BLOCKED                                                     syscall.Errno = 1296
	ERROR_INCOMPATIBLE_SERVICE_PRIVILEGE                                      syscall.Errno = 1297
	ERROR_APP_HANG                                                            syscall.Errno = 1298
	ERROR_INVALID_LABEL                                                       syscall.Errno = 1299
	ERROR_NOT_ALL_ASSIGNED                                                    syscall.Errno = 1300
	ERROR_SOME_NOT_MAPPED                                                     syscall.Errno = 1301
	ERROR_NO_QUOTAS_FOR_ACCOUNT                                               syscall.Errno = 1302
	ERROR_LOCAL_USER_SESSION_KEY                                              syscall.Errno = 1303
	ERROR_NULL_LM_PASSWORD                                                    syscall.Errno = 1304
	ERROR_UNKNOWN_REVISION                                                    syscall.Errno = 1305
	ERROR_REVISION_MISMATCH                                                   syscall.Errno = 1306
	ERROR_INVALID_OWNER                                                       syscall.Errno = 1307
	ERROR_INVALID_PRIMARY_GROUP                                               syscall.Errno = 1308
	ERROR_NO_IMPERSONATION_TOKEN                                              syscall.Errno = 1309
	ERROR_CANT_DISABLE_MANDATORY                                              syscall.Errno = 1310
	ERROR_NO_LOGON_SERVERS                                                    syscall.Errno = 1311
	ERROR_NO_SUCH_LOGON_SESSION                                               syscall.Errno = 1312
	ERROR_NO_SUCH_PRIVILEGE                                                   syscall.Errno = 1313
	ERROR_PRIVILEGE_NOT_HELD                                                  syscall.Errno = 1314
	ERROR_INVALID_ACCOUNT_NAME                                                syscall.Errno = 1315
	ERROR_USER_EXISTS                                                         syscall.Errno = 1316
	ERROR_NO_SUCH_USER                                                        syscall.Errno = 1317
	ERROR_GROUP_EXISTS                                                        syscall.Errno = 1318
	ERROR_NO_SUCH_GROUP                                                       syscall.Errno = 1319
	ERROR_MEMBER_IN_GROUP                                                     syscall.Errno = 1320
	ERROR_MEMBER_NOT_IN_GROUP                                                 syscall.Errno = 1321
	ERROR_LAST_ADMIN                                                          syscall.Errno = 1322
	ERROR_WRONG_PASSWORD                                                      syscall.Errno = 1323
	ERROR_ILL_FORMED_PASSWORD                                                 syscall.Errno = 1324
	ERROR_PASSWORD_RESTRICTION                                                syscall.Errno = 1325
	ERROR_LOGON_FAILURE                                                       syscall.Errno = 1326
	ERROR_ACCOUNT_RESTRICTION                                                 syscall.Errno = 1327
	ERROR_INVALID_LOGON_HOURS                                                 syscall.Errno = 1328
	ERROR_INVALID_WORKSTATION                                                 syscall.Errno = 1329
	ERROR_PASSWORD_EXPIRED                                                    syscall.Errno = 1330
	ERROR_ACCOUNT_DISABLED                                                    syscall.Errno = 1331
	ERROR_NONE_MAPPED                                                         syscall.Errno = 1332
	ERROR_TOO_MANY_LUIDS_REQUESTED                                            syscall.Errno = 1333
	ERROR_LUIDS_EXHAUSTED                                                     syscall.Errno = 1334
	ERROR_INVALID_SUB_AUTHORITY                                               syscall.Errno = 1335
	ERROR_INVALID_ACL                                                         syscall.Errno = 1336
	ERROR_INVALID_SID                                                         syscall.Errno = 1337
	ERROR_INVALID_SECURITY_DESCR                                              syscall.Errno = 1338
	ERROR_BAD_INHERITANCE_ACL                                                 syscall.Errno = 1340
	ERROR_SERVER_DISABLED                                                     syscall.Errno = 1341
	ERROR_SERVER_NOT_DISABLED                                                 syscall.Errno = 1342
	ERROR_INVALID_ID_AUTHORITY                                                syscall.Errno = 1343
	ERROR_ALLOTTED_SPACE_EXCEEDED                                             syscall.Errno = 1344
	ERROR_INVALID_GROUP_ATTRIBUTES                                            syscall.Errno = 1345
	ERROR_BAD_IMPERSONATION_LEVEL                                             syscall.Errno = 1346
	ERROR_CANT_OPEN_ANONYMOUS                                                 syscall.Errno = 1347
	ERROR_BAD_VALIDATION_CLASS                                                syscall.Errno = 1348
	ERROR_BAD_TOKEN_TYPE                                                      syscall.Errno = 1349
	ERROR_NO_SECURITY_ON_OBJECT                                               syscall.Errno = 1350
	ERROR_CANT_ACCESS_DOMAIN_INFO                                             syscall.Errno = 1351
	ERROR_INVALID_SERVER_STATE                                                syscall.Errno = 1352
	ERROR_INVALID_DOMAIN_STATE                                                syscall.Errno = 1353
	ERROR_INVALID_DOMAIN_ROLE                                                 syscall.Errno = 1354
	ERROR_NO_SUCH_DOMAIN                                                      syscall.Errno = 1355
	ERROR_DOMAIN_EXISTS                                                       syscall.Errno = 1356
	ERROR_DOMAIN_LIMIT_EXCEEDED                                               syscall.Errno = 1357
	ERROR_INTERNAL_DB_CORRUPTION                                              syscall.Errno = 1358
	ERROR_INTERNAL_ERROR                                                      syscall.Errno = 1359
	ERROR_GENERIC_NOT_MAPPED                                                  syscall.Errno = 1360
	ERROR_BAD_DESCRIPTOR_FORMAT                                               syscall.Errno = 1361
	ERROR_NOT_LOGON_PROCESS                                                   syscall.Errno = 1362
	ERROR_LOGON_SESSION_EXISTS                                                syscall.Errno = 1363
	ERROR_NO_SUCH_PACKAGE                                                     syscall.Errno = 1364
	ERROR_BAD_LOGON_SESSION_STATE                                             syscall.Errno = 1365
	ERROR_LOGON_SESSION_COLLISION                                             syscall.Errno = 1366
	ERROR_INVALID_LOGON_TYPE                                                  syscall.Errno = 1367
	ERROR_CANNOT_IMPERSONATE                                                  syscall.Errno = 1368
	ERROR_RXACT_INVALID_STATE                                                 syscall.Errno = 1369
	ERROR_RXACT_COMMIT_FAILURE                                                syscall.Errno = 1370
	ERROR_SPECIAL_ACCOUNT                                                     syscall.Errno = 1371
	ERROR_SPECIAL_GROUP                                                       syscall.Errno = 1372
	ERROR_SPECIAL_USER                                                        syscall.Errno = 1373
	ERROR_MEMBERS_PRIMARY_GROUP                                               syscall.Errno = 1374
	ERROR_TOKEN_ALREADY_IN_USE                                                syscall.Errno = 1375
	ERROR_NO_SUCH_ALIAS                                                       syscall.Errno = 1376
	ERROR_MEMBER_NOT_IN_ALIAS                                                 syscall.Errno = 1377
	ERROR_MEMBER_IN_ALIAS                                                     syscall.Errno = 1378
	ERROR_ALIAS_EXISTS                                                        syscall.Errno = 1379
	ERROR_LOGON_NOT_GRANTED                                                   syscall.Errno = 1380
	ERROR_TOO_MANY_SECRETS                                                    syscall.Errno = 1381
	ERROR_SECRET_TOO_LONG                                                     syscall.Errno = 1382
	ERROR_INTERNAL_DB_ERROR                                                   syscall.Errno = 1383
	ERROR_TOO_MANY_CONTEXT_IDS                                                syscall.Errno = 1384
	ERROR_LOGON_TYPE_NOT_GRANTED                                              syscall.Errno = 1385
	ERROR_NT_CROSS_ENCRYPTION_REQUIRED                                        syscall.Errno = 1386
	ERROR_NO_SUCH_MEMBER                                                      syscall.Errno = 1387
	ERROR_INVALID_MEMBER                                                      syscall.Errno = 1388
	ERROR_TOO_MANY_SIDS                                                       syscall.Errno = 1389
	ERROR_LM_CROSS_ENCRYPTION_REQUIRED                                        syscall.Errno = 1390
	ERROR_NO_INHERITANCE                                                      syscall.Errno = 1391
	ERROR_FILE_CORRUPT                                                        syscall.Errno = 1392
	ERROR_DISK_CORRUPT                                                        syscall.Errno = 1393
	ERROR_NO_USER_SESSION_KEY                                                 syscall.Errno = 1394
	ERROR_LICENSE_QUOTA_EXCEEDED                                              syscall.Errno = 1395
	ERROR_WRONG_TARGET_NAME                                                   syscall.Errno = 1396
	ERROR_MUTUAL_AUTH_FAILED                                                  syscall.Errno = 1397
	ERROR_TIME_SKEW                                                           syscall.Errno = 1398
	ERROR_CURRENT_DOMAIN_NOT_ALLOWED                                          syscall.Errno = 1399
	ERROR_INVALID_WINDOW_HANDLE                                               syscall.Errno = 1400
	ERROR_INVALID_MENU_HANDLE                                                 syscall.Errno = 1401
	ERROR_INVALID_CURSOR_HANDLE                                               syscall.Errno = 1402
	ERROR_INVALID_ACCEL_HANDLE                                                syscall.Errno = 1403
	ERROR_INVALID_HOOK_HANDLE                                                 syscall.Errno = 1404
	ERROR_INVALID_DWP_HANDLE                                                  syscall.Errno = 1405
	ERROR_TLW_WITH_WSCHILD                                                    syscall.Errno = 1406
	ERROR_CANNOT_FIND_WND_CLASS                                               syscall.Errno = 1407
	ERROR_WINDOW_OF_OTHER_THREAD                                              syscall.Errno = 1408
	ERROR_HOTKEY_ALREADY_REGISTERED                                           syscall.Errno = 1409
	ERROR_CLASS_ALREADY_EXISTS                                                syscall.Errno = 1410
	ERROR_CLASS_DOES_NOT_EXIST                                                syscall.Errno = 1411
	ERROR_CLASS_HAS_WINDOWS                                                   syscall.Errno = 1412
	ERROR_INVALID_INDEX                                                       syscall.Errno = 1413
	ERROR_INVALID_ICON_HANDLE                                                 syscall.Errno = 1414
	ERROR_PRIVATE_DIALOG_INDEX                                                syscall.Errno = 1415
	ERROR_LISTBOX_ID_NOT_FOUND                                                syscall.Errno = 1416
	ERROR_NO_WILDCARD_CHARACTERS                                              syscall.Errno = 1417
	ERROR_CLIPBOARD_NOT_OPEN                                                  syscall.Errno = 1418
	ERROR_HOTKEY_NOT_REGISTERED                                               syscall.Errno = 1419
	ERROR_WINDOW_NOT_DIALOG                                                   syscall.Errno = 1420
	ERROR_CONTROL_ID_NOT_FOUND                                                syscall.Errno = 1421
	ERROR_INVALID_COMBOBOX_MESSAGE                                            syscall.Errno = 1422
	ERROR_WINDOW_NOT_COMBOBOX                                                 syscall.Errno = 1423
	ERROR_INVALID_EDIT_HEIGHT                                                 syscall.Errno = 1424
	ERROR_DC_NOT_FOUND                                                        syscall.Errno = 1425
	ERROR_INVALID_HOOK_FILTER                                                 syscall.Errno = 1426
	ERROR_INVALID_FILTER_PROC                                                 syscall.Errno = 1427
	ERROR_HOOK_NEEDS_HMOD                                                     syscall.Errno = 1428
	ERROR_GLOBAL_ONLY_HOOK                                                    syscall.Errno = 1429
	ERROR_JOURNAL_HOOK_SET                                                    syscall.Errno = 1430
	ERROR_HOOK_NOT_INSTALLED                                                  syscall.Errno = 1431
	ERROR_INVALID_LB_MESSAGE                                                  syscall.Errno = 1432
	ERROR_SETCOUNT_ON_BAD_LB                                                  syscall.Errno = 1433
	ERROR_LB_WITHOUT_TABSTOPS                                                 syscall.Errno = 1434
	ERROR_DESTROY_OBJECT_OF_OTHER_THREAD                                      syscall.Errno = 1435
	ERROR_CHILD_WINDOW_MENU                                                   syscall.Errno = 1436
	ERROR_NO_SYSTEM_MENU                                                      syscall.Errno = 1437
	ERROR_INVALID_MSGBOX_STYLE                                                syscall.Errno = 1438
	ERROR_INVALID_SPI_VALUE                                                   syscall.Errno = 1439
	ERROR_SCREEN_ALREADY_LOCKED                                               syscall.Errno = 1440
	ERROR_HWNDS_HAVE_DIFF_PARENT                                              syscall.Errno = 1441
	ERROR_NOT_CHILD_WINDOW                                                    syscall.Errno = 1442
	ERROR_INVALID_GW_COMMAND                                                  syscall.Errno = 1443
	ERROR_INVALID_THREAD_ID                                                   syscall.Errno = 1444
	ERROR_NON_MDICHILD_WINDOW                                                 syscall.Errno = 1445
	ERROR_POPUP_ALREADY_ACTIVE                                                syscall.Errno = 1446
	ERROR_NO_SCROLLBARS                                                       syscall.Errno = 1447
	ERROR_INVALID_SCROLLBAR_RANGE                                             syscall.Errno = 1448
	ERROR_INVALID_SHOWWIN_COMMAND                                             syscall.Errno = 1449
	ERROR_NO_SYSTEM_RESOURCES                                                 syscall.Errno = 1450
	ERROR_NONPAGED_SYSTEM_RESOURCES                                           syscall.Errno = 1451
	ERROR_PAGED_SYSTEM_RESOURCES                                              syscall.Errno = 1452
	ERROR_WORKING_SET_QUOTA                                                   syscall.Errno = 1453
	ERROR_PAGEFILE_QUOTA                                                      syscall.Errno = 1454
	ERROR_COMMITMENT_LIMIT                                                    syscall.Errno = 1455
	ERROR_MENU_ITEM_NOT_FOUND                                                 syscall.Errno = 1456
	ERROR_INVALID_KEYBOARD_HANDLE                                             syscall.Errno = 1457
	ERROR_HOOK_TYPE_NOT_ALLOWED                                               syscall.Errno = 1458
	ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION                                  syscall.Errno = 1459
	ERROR_TIMEOUT                                                             syscall.Errno = 1460
	ERROR_INVALID_MONITOR_HANDLE                                              syscall.Errno = 1461
	ERROR_INCORRECT_SIZE                                                      syscall.Errno = 1462
	ERROR_SYMLINK_CLASS_DISABLED                                              syscall.Errno = 1463
	ERROR_SYMLINK_NOT_SUPPORTED                                               syscall.Errno = 1464
	ERROR_XML_PARSE_ERROR                                                     syscall.Errno = 1465
	ERROR_XMLDSIG_ERROR                                                       syscall.Errno = 1466
	ERROR_RESTART_APPLICATION                                                 syscall.Errno = 1467
	ERROR_WRONG_COMPARTMENT                                                   syscall.Errno = 1468
	ERROR_AUTHIP_FAILURE                                                      syscall.Errno = 1469
	ERROR_NO_NVRAM_RESOURCES                                                  syscall.Errno = 1470
	ERROR_NOT_GUI_PROCESS                                                     syscall.Errno = 1471
	ERROR_EVENTLOG_FILE_CORRUPT                                               syscall.Errno = 1500
	ERROR_EVENTLOG_CANT_START                                                 syscall.Errno = 1501
	ERROR_LOG_FILE_FULL                                                       syscall.Errno = 1502
	ERROR_EVENTLOG_FILE_CHANGED                                               syscall.Errno = 1503
	ERROR_CONTAINER_ASSIGNED                                                  syscall.Errno = 1504
	ERROR_JOB_NO_CONTAINER                                                    syscall.Errno = 1505
	ERROR_INVALID_TASK_NAME                                                   syscall.Errno = 1550
	ERROR_INVALID_TASK_INDEX                                                  syscall.Errno = 1551
	ERROR_THREAD_ALREADY_IN_TASK                                              syscall.Errno = 1552
	ERROR_INSTALL_SERVICE_FAILURE                                             syscall.Errno = 1601
	ERROR_INSTALL_USEREXIT                                                    syscall.Errno = 1602
	ERROR_INSTALL_FAILURE                                                     syscall.Errno = 1603
	ERROR_INSTALL_SUSPEND                                                     syscall.Errno = 1604
	ERROR_UNKNOWN_PRODUCT                                                     syscall.Errno = 1605
	ERROR_UNKNOWN_FEATURE                                                     syscall.Errno = 1606
	ERROR_UNKNOWN_COMPONENT                                                   syscall.Errno = 1607
	ERROR_UNKNOWN_PROPERTY                                                    syscall.Errno = 1608
	ERROR_INVALID_HANDLE_STATE                                                syscall.Errno = 1609
	ERROR_BAD_CONFIGURATION                                                   syscall.Errno = 1610
	ERROR_INDEX_ABSENT                                                        syscall.Errno = 1611
	ERROR_INSTALL_SOURCE_ABSENT                                               syscall.Errno = 1612
	ERROR_INSTALL_PACKAGE_VERSION                                             syscall.Errno = 1613
	ERROR_PRODUCT_UNINSTALLED                                                 syscall.Errno = 1614
	ERROR_BAD_QUERY_SYNTAX                                                    syscall.Errno = 1615
	ERROR_INVALID_FIELD                                                       syscall.Errno = 1616
	ERROR_DEVICE_REMOVED                                                      syscall.Errno = 1617
	ERROR_INSTALL_ALREADY_RUNNING                                             syscall.Errno = 1618
	ERROR_INSTALL_PACKAGE_OPEN_FAILED                                         syscall.Errno = 1619
	ERROR_INSTALL_PACKAGE_INVALID                                             syscall.Errno = 1620
	ERROR_INSTALL_UI_FAILURE                                                  syscall.Errno = 1621
	ERROR_INSTALL_LOG_FAILURE                                                 syscall.Errno = 1622
	ERROR_INSTALL_LANGUAGE_UNSUPPORTED                                        syscall.Errno = 1623
	ERROR_INSTALL_TRANSFORM_FAILURE                                           syscall.Errno = 1624
	ERROR_INSTALL_PACKAGE_REJECTED                                            syscall.Errno = 1625
	ERROR_FUNCTION_NOT_CALLED                                                 syscall.Errno = 1626
	ERROR_FUNCTION_FAILED                                                     syscall.Errno = 1627
	ERROR_INVALID_TABLE                                                       syscall.Errno = 1628
	ERROR_DATATYPE_MISMATCH                                                   syscall.Errno = 1629
	ERROR_UNSUPPORTED_TYPE                                                    syscall.Errno = 1630
	ERROR_CREATE_FAILED                                                       syscall.Errno = 1631
	ERROR_INSTALL_TEMP_UNWRITABLE                                             syscall.Errno = 1632
	ERROR_INSTALL_PLATFORM_UNSUPPORTED                                        syscall.Errno = 1633
	ERROR_INSTALL_NOTUSED                                                     syscall.Errno = 1634
	ERROR_PATCH_PACKAGE_OPEN_FAILED                                           syscall.Errno = 1635
	ERROR_PATCH_PACKAGE_INVALID                                               syscall.Errno = 1636
	ERROR_PATCH_PACKAGE_UNSUPPORTED                                           syscall.Errno = 1637
	ERROR_PRODUCT_VERSION                                                     syscall.Errno = 1638
	ERROR_INVALID_COMMAND_LINE                                                syscall.Errno = 1639
	ERROR_INSTALL_REMOTE_DISALLOWED                                           syscall.Errno = 1640
	ERROR_SUCCESS_REBOOT_INITIATED                                            syscall.Errno = 1641
	ERROR_PATCH_TARGET_NOT_FOUND                                              syscall.Errno = 1642
	ERROR_PATCH_PACKAGE_REJECTED                                              syscall.Errno = 1643
	ERROR_INSTALL_TRANSFORM_REJECTED                                          syscall.Errno = 1644
	ERROR_INSTALL_REMOTE_PROHIBITED                                           syscall.Errno = 1645
	ERROR_PATCH_REMOVAL_UNSUPPORTED                                           syscall.Errno = 1646
	ERROR_UNKNOWN_PATCH                                                       syscall.Errno = 1647
	ERROR_PATCH_NO_SEQUENCE                                                   syscall.Errno = 1648
	ERROR_PATCH_REMOVAL_DISALLOWED                                            syscall.Errno = 1649
	ERROR_INVALID_PATCH_XML                                                   syscall.Errno = 1650
	ERROR_PATCH_MANAGED_ADVERTISED_PRODUCT                                    syscall.Errno = 1651
	ERROR_INSTALL_SERVICE_SAFEBOOT                                            syscall.Errno = 1652
	ERROR_FAIL_FAST_EXCEPTION                                                 syscall.Errno = 1653
	ERROR_INSTALL_REJECTED                                                    syscall.Errno = 1654
	ERROR_DYNAMIC_CODE_BLOCKED                                                syscall.Errno = 1655
	ERROR_NOT_SAME_OBJECT                                                     syscall.Errno = 1656
	ERROR_STRICT_CFG_VIOLATION                                                syscall.Errno = 1657
	ERROR_SET_CONTEXT_DENIED                                                  syscall.Errno = 1660
	ERROR_CROSS_PARTITION_VIOLATION                                           syscall.Errno = 1661
	RPC_S_INVALID_STRING_BINDING                                              syscall.Errno = 1700
	RPC_S_WRONG_KIND_OF_BINDING                                               syscall.Errno = 1701
	RPC_S_INVALID_BINDING                                                     syscall.Errno = 1702
	RPC_S_PROTSEQ_NOT_SUPPORTED                                               syscall.Errno = 1703
	RPC_S_INVALID_RPC_PROTSEQ                                                 syscall.Errno = 1704
	RPC_S_INVALID_STRING_UUID                                                 syscall.Errno = 1705
	RPC_S_INVALID_ENDPOINT_FORMAT                                             syscall.Errno = 1706
	RPC_S_INVALID_NET_ADDR                                                    syscall.Errno = 1707
	RPC_S_NO_ENDPOINT_FOUND                                                   syscall.Errno = 1708
	RPC_S_INVALID_TIMEOUT                                                     syscall.Errno = 1709
	RPC_S_OBJECT_NOT_FOUND                                                    syscall.Errno = 1710
	RPC_S_ALREADY_REGISTERED                                                  syscall.Errno = 1711
	RPC_S_TYPE_ALREADY_REGISTERED                                             syscall.Errno = 1712
	RPC_S_ALREADY_LISTENING                                                   syscall.Errno = 1713
	RPC_S_NO_PROTSEQS_REGISTERED                                              syscall.Errno = 1714
	RPC_S_NOT_LISTENING                                                       syscall.Errno = 1715
	RPC_S_UNKNOWN_MGR_TYPE                                                    syscall.Errno = 1716
	RPC_S_UNKNOWN_IF                                                          syscall.Errno = 1717
	RPC_S_NO_BINDINGS                                                         syscall.Errno = 1718
	RPC_S_NO_PROTSEQS                                                         syscall.Errno = 1719
	RPC_S_CANT_CREATE_ENDPOINT                                                syscall.Errno = 1720
	RPC_S_OUT_OF_RESOURCES                                                    syscall.Errno = 1721
	RPC_S_SERVER_UNAVAILABLE                                                  syscall.Errno = 1722
	RPC_S_SERVER_TOO_BUSY                                                     syscall.Errno = 1723
	RPC_S_INVALID_NETWORK_OPTIONS                                             syscall.Errno = 1724
	RPC_S_NO_CALL_ACTIVE                                                      syscall.Errno = 1725
	RPC_S_CALL_FAILED                                                         syscall.Errno = 1726
	RPC_S_CALL_FAILED_DNE                                                     syscall.Errno = 1727
	RPC_S_PROTOCOL_ERROR                                                      syscall.Errno = 1728
	RPC_S_PROXY_ACCESS_DENIED                                                 syscall.Errno = 1729
	RPC_S_UNSUPPORTED_TRANS_SYN                                               syscall.Errno = 1730
	RPC_S_UNSUPPORTED_TYPE                                                    syscall.Errno = 1732
	RPC_S_INVALID_TAG                                                         syscall.Errno = 1733
	RPC_S_INVALID_BOUND                                                       syscall.Errno = 1734
	RPC_S_NO_ENTRY_NAME                                                       syscall.Errno = 1735
	RPC_S_INVALID_NAME_SYNTAX                                                 syscall.Errno = 1736
	RPC_S_UNSUPPORTED_NAME_SYNTAX                                             syscall.Errno = 1737
	RPC_S_UUID_NO_ADDRESS                                                     syscall.Errno = 1739
	RPC_S_DUPLICATE_ENDPOINT                                                  syscall.Errno = 1740
	RPC_S_UNKNOWN_AUTHN_TYPE                                                  syscall.Errno = 1741
	RPC_S_MAX_CALLS_TOO_SMALL                                                 syscall.Errno = 1742
	RPC_S_STRING_TOO_LONG                                                     syscall.Errno = 1743
	RPC_S_PROTSEQ_NOT_FOUND                                                   syscall.Errno = 1744
	RPC_S_PROCNUM_OUT_OF_RANGE                                                syscall.Errno = 1745
	RPC_S_BINDING_HAS_NO_AUTH                                                 syscall.Errno = 1746
	RPC_S_UNKNOWN_AUTHN_SERVICE                                               syscall.Errno = 1747
	RPC_S_UNKNOWN_AUTHN_LEVEL                                                 syscall.Errno = 1748
	RPC_S_INVALID_AUTH_IDENTITY                                               syscall.Errno = 1749
	RPC_S_UNKNOWN_AUTHZ_SERVICE                                               syscall.Errno = 1750
	EPT_S_INVALID_ENTRY                                                       syscall.Errno = 1751
	EPT_S_CANT_PERFORM_OP                                                     syscall.Errno = 1752
	EPT_S_NOT_REGISTERED                                                      syscall.Errno = 1753
	RPC_S_NOTHING_TO_EXPORT                                                   syscall.Errno = 1754
	RPC_S_INCOMPLETE_NAME                                                     syscall.Errno = 1755
	RPC_S_INVALID_VERS_OPTION                                                 syscall.Errno = 1756
	RPC_S_NO_MORE_MEMBERS                                                     syscall.Errno = 1757
	RPC_S_NOT_ALL_OBJS_UNEXPORTED                                             syscall.Errno = 1758
	RPC_S_INTERFACE_NOT_FOUND                                                 syscall.Errno = 1759
	RPC_S_ENTRY_ALREADY_EXISTS                                                syscall.Errno = 1760
	RPC_S_ENTRY_NOT_FOUND                                                     syscall.Errno = 1761
	RPC_S_NAME_SERVICE_UNAVAILABLE                                            syscall.Errno = 1762
	RPC_S_INVALID_NAF_ID                                                      syscall.Errno = 1763
	RPC_S_CANNOT_SUPPORT                                                      syscall.Errno = 1764
	RPC_S_NO_CONTEXT_AVAILABLE                                                syscall.Errno = 1765
	RPC_S_INTERNAL_ERROR                                                      syscall.Errno = 1766
	RPC_S_ZERO_DIVIDE                                                         syscall.Errno = 1767
	RPC_S_ADDRESS_ERROR                                                       syscall.Errno = 1768
	RPC_S_FP_DIV_ZERO                                                         syscall.Errno = 1769
	RPC_S_FP_UNDERFLOW                                                        syscall.Errno = 1770
	RPC_S_FP_OVERFLOW                                                         syscall.Errno = 1771
	RPC_X_NO_MORE_ENTRIES                                                     syscall.Errno = 1772
	RPC_X_SS_CHAR_TRANS_OPEN_FAIL                                             syscall.Errno = 1773
	RPC_X_SS_CHAR_TRANS_SHORT_FILE                                            syscall.Errno = 1774
	RPC_X_SS_IN_NULL_CONTEXT                                                  syscall.Errno = 1775
	RPC_X_SS_CONTEXT_DAMAGED                                                  syscall.Errno = 1777
	RPC_X_SS_HANDLES_MISMATCH                                                 syscall.Errno = 1778
	RPC_X_SS_CANNOT_GET_CALL_HANDLE                                           syscall.Errno = 1779
	RPC_X_NULL_REF_POINTER                                                    syscall.Errno = 1780
	RPC_X_ENUM_VALUE_OUT_OF_RANGE                                             syscall.Errno = 1781
	RPC_X_BYTE_COUNT_TOO_SMALL                                                syscall.Errno = 1782
	RPC_X_BAD_STUB_DATA                                                       syscall.Errno = 1783
	ERROR_INVALID_USER_BUFFER                                                 syscall.Errno = 1784
	ERROR_UNRECOGNIZED_MEDIA                                                  syscall.Errno = 1785
	ERROR_NO_TRUST_LSA_SECRET                                                 syscall.Errno = 1786
	ERROR_NO_TRUST_SAM_ACCOUNT                                                syscall.Errno = 1787
	ERROR_TRUSTED_DOMAIN_FAILURE                                              syscall.Errno = 1788
	ERROR_TRUSTED_RELATIONSHIP_FAILURE                                        syscall.Errno = 1789
	ERROR_TRUST_FAILURE                                                       syscall.Errno = 1790
	RPC_S_CALL_IN_PROGRESS                                                    syscall.Errno = 1791
	ERROR_NETLOGON_NOT_STARTED                                                syscall.Errno = 1792
	ERROR_ACCOUNT_EXPIRED                                                     syscall.Errno = 1793
	ERROR_REDIRECTOR_HAS_OPEN_HANDLES                                         syscall.Errno = 1794
	ERROR_PRINTER_DRIVER_ALREADY_INSTALLED                                    syscall.Errno = 1795
	ERROR_UNKNOWN_PORT                                                        syscall.Errno = 1796
	ERROR_UNKNOWN_PRINTER_DRIVER                                              syscall.Errno = 1797
	ERROR_UNKNOWN_PRINTPROCESSOR                                              syscall.Errno = 1798
	ERROR_INVALID_SEPARATOR_FILE                                              syscall.Errno = 1799
	ERROR_INVALID_PRIORITY                                                    syscall.Errno = 1800
	ERROR_INVALID_PRINTER_NAME                                                syscall.Errno = 1801
	ERROR_PRINTER_ALREADY_EXISTS                                              syscall.Errno = 1802
	ERROR_INVALID_PRINTER_COMMAND                                             syscall.Errno = 1803
	ERROR_INVALID_DATATYPE                                                    syscall.Errno = 1804
	ERROR_INVALID_ENVIRONMENT                                                 syscall.Errno = 1805
	RPC_S_NO_MORE_BINDINGS                                                    syscall.Errno = 1806
	ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT                                   syscall.Errno = 1807
	ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT                                   syscall.Errno = 1808
	ERROR_NOLOGON_SERVER_TRUST_ACCOUNT                                        syscall.Errno = 1809
	ERROR_DOMAIN_TRUST_INCONSISTENT                                           syscall.Errno = 1810
	ERROR_SERVER_HAS_OPEN_HANDLES                                             syscall.Errno = 1811
	ERROR_RESOURCE_DATA_NOT_FOUND                                             syscall.Errno = 1812
	ERROR_RESOURCE_TYPE_NOT_FOUND                                             syscall.Errno = 1813
	ERROR_RESOURCE_NAME_NOT_FOUND                                             syscall.Errno = 1814
	ERROR_RESOURCE_LANG_NOT_FOUND                                             syscall.Errno = 1815
	ERROR_NOT_ENOUGH_QUOTA                                                    syscall.Errno = 1816
	RPC_S_NO_INTERFACES                                                       syscall.Errno = 1817
	RPC_S_CALL_CANCELLED                                                      syscall.Errno = 1818
	RPC_S_BINDING_INCOMPLETE                                                  syscall.Errno = 1819
	RPC_S_COMM_FAILURE                                                        syscall.Errno = 1820
	RPC_S_UNSUPPORTED_AUTHN_LEVEL                                             syscall.Errno = 1821
	RPC_S_NO_PRINC_NAME                                                       syscall.Errno = 1822
	RPC_S_NOT_RPC_ERROR                                                       syscall.Errno = 1823
	RPC_S_UUID_LOCAL_ONLY                                                     syscall.Errno = 1824
	RPC_S_SEC_PKG_ERROR                                                       syscall.Errno = 1825
	RPC_S_NOT_CANCELLED                                                       syscall.Errno = 1826
	RPC_X_INVALID_ES_ACTION                                                   syscall.Errno = 1827
	RPC_X_WRONG_ES_VERSION                                                    syscall.Errno = 1828
	RPC_X_WRONG_STUB_VERSION                                                  syscall.Errno = 1829
	RPC_X_INVALID_PIPE_OBJECT                                                 syscall.Errno = 1830
	RPC_X_WRONG_PIPE_ORDER                                                    syscall.Errno = 1831
	RPC_X_WRONG_PIPE_VERSION                                                  syscall.Errno = 1832
	RPC_S_COOKIE_AUTH_FAILED                                                  syscall.Errno = 1833
	RPC_S_DO_NOT_DISTURB                                                      syscall.Errno = 1834
	RPC_S_SYSTEM_HANDLE_COUNT_EXCEEDED                                        syscall.Errno = 1835
	RPC_S_SYSTEM_HANDLE_TYPE_MISMATCH                                         syscall.Errno = 1836
	RPC_S_GROUP_MEMBER_NOT_FOUND                                              syscall.Errno = 1898
	EPT_S_CANT_CREATE                                                         syscall.Errno = 1899
	RPC_S_INVALID_OBJECT                                                      syscall.Errno = 1900
	ERROR_INVALID_TIME                                                        syscall.Errno = 1901
	ERROR_INVALID_FORM_NAME                                                   syscall.Errno = 1902
	ERROR_INVALID_FORM_SIZE                                                   syscall.Errno = 1903
	ERROR_ALREADY_WAITING                                                     syscall.Errno = 1904
	ERROR_PRINTER_DELETED                                                     syscall.Errno = 1905
	ERROR_INVALID_PRINTER_STATE                                               syscall.Errno = 1906
	ERROR_PASSWORD_MUST_CHANGE                                                syscall.Errno = 1907
	ERROR_DOMAIN_CONTROLLER_NOT_FOUND                                         syscall.Errno = 1908
	ERROR_ACCOUNT_LOCKED_OUT                                                  syscall.Errno = 1909
	OR_INVALID_OXID                                                           syscall.Errno = 1910
	OR_INVALID_OID                                                            syscall.Errno = 1911
	OR_INVALID_SET                                                            syscall.Errno = 1912
	RPC_S_SEND_INCOMPLETE                                                     syscall.Errno = 1913
	RPC_S_INVALID_ASYNC_HANDLE                                                syscall.Errno = 1914
	RPC_S_INVALID_ASYNC_CALL                                                  syscall.Errno = 1915
	RPC_X_PIPE_CLOSED                                                         syscall.Errno = 1916
	RPC_X_PIPE_DISCIPLINE_ERROR                                               syscall.Errno = 1917
	RPC_X_PIPE_EMPTY                                                          syscall.Errno = 1918
	ERROR_NO_SITENAME                                                         syscall.Errno = 1919
	ERROR_CANT_ACCESS_FILE                                                    syscall.Errno = 1920
	ERROR_CANT_RESOLVE_FILENAME                                               syscall.Errno = 1921
	RPC_S_ENTRY_TYPE_MISMATCH                                                 syscall.Errno = 1922
	RPC_S_NOT_ALL_OBJS_EXPORTED                                               syscall.Errno = 1923
	RPC_S_INTERFACE_NOT_EXPORTED                                              syscall.Errno = 1924
	RPC_S_PROFILE_NOT_ADDED                                                   syscall.Errno = 1925
	RPC_S_PRF_ELT_NOT_ADDED                                                   syscall.Errno = 1926
	RPC_S_PRF_ELT_NOT_REMOVED                                                 syscall.Errno = 1927
	RPC_S_GRP_ELT_NOT_ADDED                                                   syscall.Errno = 1928
	RPC_S_GRP_ELT_NOT_REMOVED                                                 syscall.Errno = 1929
	ERROR_KM_DRIVER_BLOCKED                                                   syscall.Errno = 1930
	ERROR_CONTEXT_EXPIRED                                                     syscall.Errno = 1931
	ERROR_PER_USER_TRUST_QUOTA_EXCEEDED                                       syscall.Errno = 1932
	ERROR_ALL_USER_TRUST_QUOTA_EXCEEDED                                       syscall.Errno = 1933
	ERROR_USER_DELETE_TRUST_QUOTA_EXCEEDED                                    syscall.Errno = 1934
	ERROR_AUTHENTICATION_FIREWALL_FAILED                                      syscall.Errno = 1935
	ERROR_REMOTE_PRINT_CONNECTIONS_BLOCKED                                    syscall.Errno = 1936
	ERROR_NTLM_BLOCKED                                                        syscall.Errno = 1937
	ERROR_PASSWORD_CHANGE_REQUIRED                                            syscall.Errno = 1938
	ERROR_LOST_MODE_LOGON_RESTRICTION                                         syscall.Errno = 1939
	ERROR_INVALID_PIXEL_FORMAT                                                syscall.Errno = 2000
	ERROR_BAD_DRIVER                                                          syscall.Errno = 2001
	ERROR_INVALID_WINDOW_STYLE                                                syscall.Errno = 2002
	ERROR_METAFILE_NOT_SUPPORTED                                              syscall.Errno = 2003
	ERROR_TRANSFORM_NOT_SUPPORTED                                             syscall.Errno = 2004
	ERROR_CLIPPING_NOT_SUPPORTED                                              syscall.Errno = 2005
	ERROR_INVALID_CMM                                                         syscall.Errno = 2010
	ERROR_INVALID_PROFILE                                                     syscall.Errno = 2011
	ERROR_TAG_NOT_FOUND                                                       syscall.Errno = 2012
	ERROR_TAG_NOT_PRESENT                                                     syscall.Errno = 2013
	ERROR_DUPLICATE_TAG                                                       syscall.Errno = 2014
	ERROR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE                                  syscall.Errno = 2015
	ERROR_PROFILE_NOT_FOUND                                                   syscall.Errno = 2016
	ERROR_INVALID_COLORSPACE                                                  syscall.Errno = 2017
	ERROR_ICM_NOT_ENABLED                                                     syscall.Errno = 2018
	ERROR_DELETING_ICM_XFORM                                                  syscall.Errno = 2019
	ERROR_INVALID_TRANSFORM                                                   syscall.Errno = 2020
	ERROR_COLORSPACE_MISMATCH                                                 syscall.Errno = 2021
	ERROR_INVALID_COLORINDEX                                                  syscall.Errno = 2022
	ERROR_PROFILE_DOES_NOT_MATCH_DEVICE                                       syscall.Errno = 2023
	ERROR_CONNECTED_OTHER_PASSWORD                                            syscall.Errno = 2108
	ERROR_CONNECTED_OTHER_PASSWORD_DEFAULT                                    syscall.Errno = 2109
	ERROR_BAD_USERNAME                                                        syscall.Errno = 2202
	ERROR_NOT_CONNECTED                                                       syscall.Errno = 2250
	ERROR_OPEN_FILES                                                          syscall.Errno = 2401
	ERROR_ACTIVE_CONNECTIONS                                                  syscall.Errno = 2402
	ERROR_DEVICE_IN_USE                                                       syscall.Errno = 2404
	ERROR_UNKNOWN_PRINT_MONITOR                                               syscall.Errno = 3000
	ERROR_PRINTER_DRIVER_IN_USE                                               syscall.Errno = 3001
	ERROR_SPOOL_FILE_NOT_FOUND                                                syscall.Errno = 3002
	ERROR_SPL_NO_STARTDOC                                                     syscall.Errno = 3003
	ERROR_SPL_NO_ADDJOB                                                       syscall.Errno = 3004
	ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED                                   syscall.Errno = 3005
	ERROR_PRINT_MONITOR_ALREADY_INSTALLED                                     syscall.Errno = 3006
	ERROR_INVALID_PRINT_MONITOR                                               syscall.Errno = 3007
	ERROR_PRINT_MONITOR_IN_USE                                                syscall.Errno = 3008
	ERROR_PRINTER_HAS_JOBS_QUEUED                                             syscall.Errno = 3009
	ERROR_SUCCESS_REBOOT_REQUIRED                                             syscall.Errno = 3010
	ERROR_SUCCESS_RESTART_REQUIRED                                            syscall.Errno = 3011
	ERROR_PRINTER_NOT_FOUND                                                   syscall.Errno = 3012
	ERROR_PRINTER_DRIVER_WARNED                                               syscall.Errno = 3013
	ERROR_PRINTER_DRIVER_BLOCKED                                              syscall.Errno = 3014
	ERROR_PRINTER_DRIVER_PACKAGE_IN_USE                                       syscall.Errno = 3015
	ERROR_CORE_DRIVER_PACKAGE_NOT_FOUND                                       syscall.Errno = 3016
	ERROR_FAIL_REBOOT_REQUIRED                                                syscall.Errno = 3017
	ERROR_FAIL_REBOOT_INITIATED                                               syscall.Errno = 3018
	ERROR_PRINTER_DRIVER_DOWNLOAD_NEEDED                                      syscall.Errno = 3019
	ERROR_PRINT_JOB_RESTART_REQUIRED                                          syscall.Errno = 3020
	ERROR_INVALID_PRINTER_DRIVER_MANIFEST                                     syscall.Errno = 3021
	ERROR_PRINTER_NOT_SHAREABLE                                               syscall.Errno = 3022
	ERROR_REQUEST_PAUSED                                                      syscall.Errno = 3050
	ERROR_APPEXEC_CONDITION_NOT_SATISFIED                                     syscall.Errno = 3060
	ERROR_APPEXEC_HANDLE_INVALIDATED                                          syscall.Errno = 3061
	ERROR_APPEXEC_INVALID_HOST_GENERATION                                     syscall.Errno = 3062
	ERROR_APPEXEC_UNEXPECTED_PROCESS_REGISTRATION                             syscall.Errno = 3063
	ERROR_APPEXEC_INVALID_HOST_STATE                                          syscall.Errno = 3064
	ERROR_APPEXEC_NO_DONOR                                                    syscall.Errno = 3065
	ERROR_APPEXEC_HOST_ID_MISMATCH                                            syscall.Errno = 3066
	ERROR_APPEXEC_UNKNOWN_USER                                                syscall.Errno = 3067
	ERROR_IO_REISSUE_AS_CACHED                                                syscall.Errno = 3950
	ERROR_WINS_INTERNAL                                                       syscall.Errno = 4000
	ERROR_CAN_NOT_DEL_LOCAL_WINS                                              syscall.Errno = 4001
	ERROR_STATIC_INIT                                                         syscall.Errno = 4002
	ERROR_INC_BACKUP                                                          syscall.Errno = 4003
	ERROR_FULL_BACKUP                                                         syscall.Errno = 4004
	ERROR_REC_NON_EXISTENT                                                    syscall.Errno = 4005
	ERROR_RPL_NOT_ALLOWED                                                     syscall.Errno = 4006
	PEERDIST_ERROR_CONTENTINFO_VERSION_UNSUPPORTED                            syscall.Errno = 4050
	PEERDIST_ERROR_CANNOT_PARSE_CONTENTINFO                                   syscall.Errno = 4051
	PEERDIST_ERROR_MISSING_DATA                                               syscall.Errno = 4052
	PEERDIST_ERROR_NO_MORE                                                    syscall.Errno = 4053
	PEERDIST_ERROR_NOT_INITIALIZED                                            syscall.Errno = 4054
	PEERDIST_ERROR_ALREADY_INITIALIZED                                        syscall.Errno = 4055
	PEERDIST_ERROR_SHUTDOWN_IN_PROGRESS                                       syscall.Errno = 4056
	PEERDIST_ERROR_INVALIDATED                                                syscall.Errno = 4057
	PEERDIST_ERROR_ALREADY_EXISTS                                             syscall.Errno = 4058
	PEERDIST_ERROR_OPERATION_NOTFOUND                                         syscall.Errno = 4059
	PEERDIST_ERROR_ALREADY_COMPLETED                                          syscall.Errno = 4060
	PEERDIST_ERROR_OUT_OF_BOUNDS                                              syscall.Errno = 4061
	PEERDIST_ERROR_VERSION_UNSUPPORTED                                        syscall.Errno = 4062
	PEERDIST_ERROR_INVALID_CONFIGURATION                                      syscall.Errno = 4063
	PEERDIST_ERROR_NOT_LICENSED                                               syscall.Errno = 4064
	PEERDIST_ERROR_SERVICE_UNAVAILABLE                                        syscall.Errno = 4065
	PEERDIST_ERROR_TRUST_FAILURE                                              syscall.Errno = 4066
	ERROR_DHCP_ADDRESS_CONFLICT                                               syscall.Errno = 4100
	ERROR_WMI_GUID_NOT_FOUND                                                  syscall.Errno = 4200
	ERROR_WMI_INSTANCE_NOT_FOUND                                              syscall.Errno = 4201
	ERROR_WMI_ITEMID_NOT_FOUND                                                syscall.Errno = 4202
	ERROR_WMI_TRY_AGAIN                                                       syscall.Errno = 4203
	ERROR_WMI_DP_NOT_FOUND                                                    syscall.Errno = 4204
	ERROR_WMI_UNRESOLVED_INSTANCE_REF                                         syscall.Errno = 4205
	ERROR_WMI_ALREADY_ENABLED                                                 syscall.Errno = 4206
	ERROR_WMI_GUID_DISCONNECTED                                               syscall.Errno = 4207
	ERROR_WMI_SERVER_UNAVAILABLE                                              syscall.Errno = 4208
	ERROR_WMI_DP_FAILED                                                       syscall.Errno = 4209
	ERROR_WMI_INVALID_MOF                                                     syscall.Errno = 4210
	ERROR_WMI_INVALID_REGINFO                                                 syscall.Errno = 4211
	ERROR_WMI_ALREADY_DISABLED                                                syscall.Errno = 4212
	ERROR_WMI_READ_ONLY                                                       syscall.Errno = 4213
	ERROR_WMI_SET_FAILURE                                                     syscall.Errno = 4214
	ERROR_NOT_APPCONTAINER                                                    syscall.Errno = 4250
	ERROR_APPCONTAINER_REQUIRED                                               syscall.Errno = 4251
	ERROR_NOT_SUPPORTED_IN_APPCONTAINER                                       syscall.Errno = 4252
	ERROR_INVALID_PACKAGE_SID_LENGTH                                          syscall.Errno = 4253
	ERROR_INVALID_MEDIA                                                       syscall.Errno = 4300
	ERROR_INVALID_LIBRARY                                                     syscall.Errno = 4301
	ERROR_INVALID_MEDIA_POOL                                                  syscall.Errno = 4302
	ERROR_DRIVE_MEDIA_MISMATCH                                                syscall.Errno = 4303
	ERROR_MEDIA_OFFLINE                                                       syscall.Errno = 4304
	ERROR_LIBRARY_OFFLINE                                                     syscall.Errno = 4305
	ERROR_EMPTY                                                               syscall.Errno = 4306
	ERROR_NOT_EMPTY                                                           syscall.Errno = 4307
	ERROR_MEDIA_UNAVAILABLE                                                   syscall.Errno = 4308
	ERROR_RESOURCE_DISABLED                                                   syscall.Errno = 4309
	ERROR_INVALID_CLEANER                                                     syscall.Errno = 4310
	ERROR_UNABLE_TO_CLEAN                                                     syscall.Errno = 4311
	ERROR_OBJECT_NOT_FOUND                                                    syscall.Errno = 4312
	ERROR_DATABASE_FAILURE                                                    syscall.Errno = 4313
	ERROR_DATABASE_FULL                                                       syscall.Errno = 4314
	ERROR_MEDIA_INCOMPATIBLE                                                  syscall.Errno = 4315
	ERROR_RESOURCE_NOT_PRESENT                                                syscall.Errno = 4316
	ERROR_INVALID_OPERATION                                                   syscall.Errno = 4317
	ERROR_MEDIA_NOT_AVAILABLE                                                 syscall.Errno = 4318
	ERROR_DEVICE_NOT_AVAILABLE                                                syscall.Errno = 4319
	ERROR_REQUEST_REFUSED                                                     syscall.Errno = 4320
	ERROR_INVALID_DRIVE_OBJECT                                                syscall.Errno = 4321
	ERROR_LIBRARY_FULL                                                        syscall.Errno = 4322
	ERROR_MEDIUM_NOT_ACCESSIBLE                                               syscall.Errno = 4323
	ERROR_UNABLE_TO_LOAD_MEDIUM                                               syscall.Errno = 4324
	ERROR_UNABLE_TO_INVENTORY_DRIVE                                           syscall.Errno = 4325
	ERROR_UNABLE_TO_INVENTORY_SLOT                                            syscall.Errno = 4326
	ERROR_UNABLE_TO_INVENTORY_TRANSPORT                                       syscall.Errno = 4327
	ERROR_TRANSPORT_FULL                                                      syscall.Errno = 4328
	ERROR_CONTROLLING_IEPORT                                                  syscall.Errno = 4329
	ERROR_UNABLE_TO_EJECT_MOUNTED_MEDIA                                       syscall.Errno = 4330
	ERROR_CLEANER_SLOT_SET                                                    syscall.Errno = 4331
	ERROR_CLEANER_SLOT_NOT_SET                                                syscall.Errno = 4332
	ERROR_CLEANER_CARTRIDGE_SPENT                                             syscall.Errno = 4333
	ERROR_UNEXPECTED_OMID                                                     syscall.Errno = 4334
	ERROR_CANT_DELETE_LAST_ITEM                                               syscall.Errno = 4335
	ERROR_MESSAGE_EXCEEDS_MAX_SIZE                                            syscall.Errno = 4336
	ERROR_VOLUME_CONTAINS_SYS_FILES                                           syscall.Errno = 4337
	ERROR_INDIGENOUS_TYPE                                                     syscall.Errno = 4338
	ERROR_NO_SUPPORTING_DRIVES                                                syscall.Errno = 4339
	ERROR_CLEANER_CARTRIDGE_INSTALLED                                         syscall.Errno = 4340
	ERROR_IEPORT_FULL                                                         syscall.Errno = 4341
	ERROR_FILE_OFFLINE                                                        syscall.Errno = 4350
	ERROR_REMOTE_STORAGE_NOT_ACTIVE                                           syscall.Errno = 4351
	ERROR_REMOTE_STORAGE_MEDIA_ERROR                                          syscall.Errno = 4352
	ERROR_NOT_A_REPARSE_POINT                                                 syscall.Errno = 4390
	ERROR_REPARSE_ATTRIBUTE_CONFLICT                                          syscall.Errno = 4391
	ERROR_INVALID_REPARSE_DATA                                                syscall.Errno = 4392
	ERROR_REPARSE_TAG_INVALID                                                 syscall.Errno = 4393
	ERROR_REPARSE_TAG_MISMATCH                                                syscall.Errno = 4394
	ERROR_REPARSE_POINT_ENCOUNTERED                                           syscall.Errno = 4395
	ERROR_APP_DATA_NOT_FOUND                                                  syscall.Errno = 4400
	ERROR_APP_DATA_EXPIRED                                                    syscall.Errno = 4401
	ERROR_APP_DATA_CORRUPT                                                    syscall.Errno = 4402
	ERROR_APP_DATA_LIMIT_EXCEEDED                                             syscall.Errno = 4403
	ERROR_APP_DATA_REBOOT_REQUIRED                                            syscall.Errno = 4404
	ERROR_SECUREBOOT_ROLLBACK_DETECTED                                        syscall.Errno = 4420
	ERROR_SECUREBOOT_POLICY_VIOLATION                                         syscall.Errno = 4421
	ERROR_SECUREBOOT_INVALID_POLICY                                           syscall.Errno = 4422
	ERROR_SECUREBOOT_POLICY_PUBLISHER_NOT_FOUND                               syscall.Errno = 4423
	ERROR_SECUREBOOT_POLICY_NOT_SIGNED                                        syscall.Errno = 4424
	ERROR_SECUREBOOT_NOT_ENABLED                                              syscall.Errno = 4425
	ERROR_SECUREBOOT_FILE_REPLACED                                            syscall.Errno = 4426
	ERROR_SECUREBOOT_POLICY_NOT_AUTHORIZED                                    syscall.Errno = 4427
	ERROR_SECUREBOOT_POLICY_UNKNOWN                                           syscall.Errno = 4428
	ERROR_SECUREBOOT_POLICY_MISSING_ANTIROLLBACKVERSION                       syscall.Errno = 4429
	ERROR_SECUREBOOT_PLATFORM_ID_MISMATCH                                     syscall.Errno = 4430
	ERROR_SECUREBOOT_POLICY_ROLLBACK_DETECTED                                 syscall.Errno = 4431
	ERROR_SECUREBOOT_POLICY_UPGRADE_MISMATCH                                  syscall.Errno = 4432
	ERROR_SECUREBOOT_REQUIRED_POLICY_FILE_MISSING                             syscall.Errno = 4433
	ERROR_SECUREBOOT_NOT_BASE_POLICY                                          syscall.Errno = 4434
	ERROR_SECUREBOOT_NOT_SUPPLEMENTAL_POLICY                                  syscall.Errno = 4435
	ERROR_OFFLOAD_READ_FLT_NOT_SUPPORTED                                      syscall.Errno = 4440
	ERROR_OFFLOAD_WRITE_FLT_NOT_SUPPORTED                                     syscall.Errno = 4441
	ERROR_OFFLOAD_READ_FILE_NOT_SUPPORTED                                     syscall.Errno = 4442
	ERROR_OFFLOAD_WRITE_FILE_NOT_SUPPORTED                                    syscall.Errno = 4443
	ERROR_ALREADY_HAS_STREAM_ID                                               syscall.Errno = 4444
	ERROR_SMR_GARBAGE_COLLECTION_REQUIRED                                     syscall.Errno = 4445
	ERROR_WOF_WIM_HEADER_CORRUPT                                              syscall.Errno = 4446
	ERROR_WOF_WIM_RESOURCE_TABLE_CORRUPT                                      syscall.Errno = 4447
	ERROR_WOF_FILE_RESOURCE_TABLE_CORRUPT                                     syscall.Errno = 4448
	ERROR_VOLUME_NOT_SIS_ENABLED                                              syscall.Errno = 4500
	ERROR_SYSTEM_INTEGRITY_ROLLBACK_DETECTED                                  syscall.Errno = 4550
	ERROR_SYSTEM_INTEGRITY_POLICY_VIOLATION                                   syscall.Errno = 4551
	ERROR_SYSTEM_INTEGRITY_INVALID_POLICY                                     syscall.Errno = 4552
	ERROR_SYSTEM_INTEGRITY_POLICY_NOT_SIGNED                                  syscall.Errno = 4553
	ERROR_SYSTEM_INTEGRITY_TOO_MANY_POLICIES                                  syscall.Errno = 4554
	ERROR_SYSTEM_INTEGRITY_SUPPLEMENTAL_POLICY_NOT_AUTHORIZED                 syscall.Errno = 4555
	ERROR_VSM_NOT_INITIALIZED                                                 syscall.Errno = 4560
	ERROR_VSM_DMA_PROTECTION_NOT_IN_USE                                       syscall.Errno = 4561
	ERROR_PLATFORM_MANIFEST_NOT_AUTHORIZED                                    syscall.Errno = 4570
	ERROR_PLATFORM_MANIFEST_INVALID                                           syscall.Errno = 4571
	ERROR_PLATFORM_MANIFEST_FILE_NOT_AUTHORIZED                               syscall.Errno = 4572
	ERROR_PLATFORM_MANIFEST_CATALOG_NOT_AUTHORIZED                            syscall.Errno = 4573
	ERROR_PLATFORM_MANIFEST_BINARY_ID_NOT_FOUND                               syscall.Errno = 4574
	ERROR_PLATFORM_MANIFEST_NOT_ACTIVE                                        syscall.Errno = 4575
	ERROR_PLATFORM_MANIFEST_NOT_SIGNED                                        syscall.Errno = 4576
	ERROR_DEPENDENT_RESOURCE_EXISTS                                           syscall.Errno = 5001
	ERROR_DEPENDENCY_NOT_FOUND                                                syscall.Errno = 5002
	ERROR_DEPENDENCY_ALREADY_EXISTS                                           syscall.Errno = 5003
	ERROR_RESOURCE_NOT_ONLINE                                                 syscall.Errno = 5004
	ERROR_HOST_NODE_NOT_AVAILABLE                                             syscall.Errno = 5005
	ERROR_RESOURCE_NOT_AVAILABLE                                              syscall.Errno = 5006
	ERROR_RESOURCE_NOT_FOUND                                                  syscall.Errno = 5007
	ERROR_SHUTDOWN_CLUSTER                                                    syscall.Errno = 5008
	ERROR_CANT_EVICT_ACTIVE_NODE                                              syscall.Errno = 5009
	ERROR_OBJECT_ALREADY_EXISTS                                               syscall.Errno = 5010
	ERROR_OBJECT_IN_LIST                                                      syscall.Errno = 5011
	ERROR_GROUP_NOT_AVAILABLE                                                 syscall.Errno = 5012
	ERROR_GROUP_NOT_FOUND                                                     syscall.Errno = 5013
	ERROR_GROUP_NOT_ONLINE                                                    syscall.Errno = 5014
	ERROR_HOST_NODE_NOT_RESOURCE_OWNER                                        syscall.Errno = 5015
	ERROR_HOST_NODE_NOT_GROUP_OWNER                                           syscall.Errno = 5016
	ERROR_RESMON_CREATE_FAILED                                                syscall.Errno = 5017
	ERROR_RESMON_ONLINE_FAILED                                                syscall.Errno = 5018
	ERROR_RESOURCE_ONLINE                                                     syscall.Errno = 5019
	ERROR_QUORUM_RESOURCE                                                     syscall.Errno = 5020
	ERROR_NOT_QUORUM_CAPABLE                                                  syscall.Errno = 5021
	ERROR_CLUSTER_SHUTTING_DOWN                                               syscall.Errno = 5022
	ERROR_INVALID_STATE                                                       syscall.Errno = 5023
	ERROR_RESOURCE_PROPERTIES_STORED                                          syscall.Errno = 5024
	ERROR_NOT_QUORUM_CLASS                                                    syscall.Errno = 5025
	ERROR_CORE_RESOURCE                                                       syscall.Errno = 5026
	ERROR_QUORUM_RESOURCE_ONLINE_FAILED                                       syscall.Errno = 5027
	ERROR_QUORUMLOG_OPEN_FAILED                                               syscall.Errno = 5028
	ERROR_CLUSTERLOG_CORRUPT                                                  syscall.Errno = 5029
	ERROR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE                                   syscall.Errno = 5030
	ERROR_CLUSTERLOG_EXCEEDS_MAXSIZE                                          syscall.Errno = 5031
	ERROR_CLUSTERLOG_CHKPOINT_NOT_FOUND                                       syscall.Errno = 5032
	ERROR_CLUSTERLOG_NOT_ENOUGH_SPACE                                         syscall.Errno = 5033
	ERROR_QUORUM_OWNER_ALIVE                                                  syscall.Errno = 5034
	ERROR_NETWORK_NOT_AVAILABLE                                               syscall.Errno = 5035
	ERROR_NODE_NOT_AVAILABLE                                                  syscall.Errno = 5036
	ERROR_ALL_NODES_NOT_AVAILABLE                                             syscall.Errno = 5037
	ERROR_RESOURCE_FAILED                                                     syscall.Errno = 5038
	ERROR_CLUSTER_INVALID_NODE                                                syscall.Errno = 5039
	ERROR_CLUSTER_NODE_EXISTS                                                 syscall.Errno = 5040
	ERROR_CLUSTER_JOIN_IN_PROGRESS                                            syscall.Errno = 5041
	ERROR_CLUSTER_NODE_NOT_FOUND                                              syscall.Errno = 5042
	ERROR_CLUSTER_LOCAL_NODE_NOT_FOUND                                        syscall.Errno = 5043
	ERROR_CLUSTER_NETWORK_EXISTS                                              syscall.Errno = 5044
	ERROR_CLUSTER_NETWORK_NOT_FOUND                                           syscall.Errno = 5045
	ERROR_CLUSTER_NETINTERFACE_EXISTS                                         syscall.Errno = 5046
	ERROR_CLUSTER_NETINTERFACE_NOT_FOUND                                      syscall.Errno = 5047
	ERROR_CLUSTER_INVALID_REQUEST                                             syscall.Errno = 5048
	ERROR_CLUSTER_INVALID_NETWORK_PROVIDER                                    syscall.Errno = 5049
	ERROR_CLUSTER_NODE_DOWN                                                   syscall.Errno = 5050
	ERROR_CLUSTER_NODE_UNREACHABLE                                            syscall.Errno = 5051
	ERROR_CLUSTER_NODE_NOT_MEMBER                                             syscall.Errno = 5052
	ERROR_CLUSTER_JOIN_NOT_IN_PROGRESS                                        syscall.Errno = 5053
	ERROR_CLUSTER_INVALID_NETWORK                                             syscall.Errno = 5054
	ERROR_CLUSTER_NODE_UP                                                     syscall.Errno = 5056
	ERROR_CLUSTER_IPADDR_IN_USE                                               syscall.Errno = 5057
	ERROR_CLUSTER_NODE_NOT_PAUSED                                             syscall.Errno = 5058
	ERROR_CLUSTER_NO_SECURITY_CONTEXT                                         syscall.Errno = 5059
	ERROR_CLUSTER_NETWORK_NOT_INTERNAL                                        syscall.Errno = 5060
	ERROR_CLUSTER_NODE_ALREADY_UP                                             syscall.Errno = 5061
	ERROR_CLUSTER_NODE_ALREADY_DOWN                                           syscall.Errno = 5062
	ERROR_CLUSTER_NETWORK_ALREADY_ONLINE                                      syscall.Errno = 5063
	ERROR_CLUSTER_NETWORK_ALREADY_OFFLINE                                     syscall.Errno = 5064
	ERROR_CLUSTER_NODE_ALREADY_MEMBER                                         syscall.Errno = 5065
	ERROR_CLUSTER_LAST_INTERNAL_NETWORK                                       syscall.Errno = 5066
	ERROR_CLUSTER_NETWORK_HAS_DEPENDENTS                                      syscall.Errno = 5067
	ERROR_INVALID_OPERATION_ON_QUORUM                                         syscall.Errno = 5068
	ERROR_DEPENDENCY_NOT_ALLOWED                                              syscall.Errno = 5069
	ERROR_CLUSTER_NODE_PAUSED                                                 syscall.Errno = 5070
	ERROR_NODE_CANT_HOST_RESOURCE                                             syscall.Errno = 5071
	ERROR_CLUSTER_NODE_NOT_READY                                              syscall.Errno = 5072
	ERROR_CLUSTER_NODE_SHUTTING_DOWN                                          syscall.Errno = 5073
	ERROR_CLUSTER_JOIN_ABORTED                                                syscall.Errno = 5074
	ERROR_CLUSTER_INCOMPATIBLE_VERSIONS                                       syscall.Errno = 5075
	ERROR_CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED                                syscall.Errno = 5076
	ERROR_CLUSTER_SYSTEM_CONFIG_CHANGED                                       syscall.Errno = 5077
	ERROR_CLUSTER_RESOURCE_TYPE_NOT_FOUND                                     syscall.Errno = 5078
	ERROR_CLUSTER_RESTYPE_NOT_SUPPORTED                                       syscall.Errno = 5079
	ERROR_CLUSTER_RESNAME_NOT_FOUND                                           syscall.Errno = 5080
	ERROR_CLUSTER_NO_RPC_PACKAGES_REGISTERED                                  syscall.Errno = 5081
	ERROR_CLUSTER_OWNER_NOT_IN_PREFLIST                                       syscall.Errno = 5082
	ERROR_CLUSTER_DATABASE_SEQMISMATCH                                        syscall.Errno = 5083
	ERROR_RESMON_INVALID_STATE                                                syscall.Errno = 5084
	ERROR_CLUSTER_GUM_NOT_LOCKER                                              syscall.Errno = 5085
	ERROR_QUORUM_DISK_NOT_FOUND                                               syscall.Errno = 5086
	ERROR_DATABASE_BACKUP_CORRUPT                                             syscall.Errno = 5087
	ERROR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT                                   syscall.Errno = 5088
	ERROR_RESOURCE_PROPERTY_UNCHANGEABLE                                      syscall.Errno = 5089
	ERROR_NO_ADMIN_ACCESS_POINT                                               syscall.Errno = 5090
	ERROR_CLUSTER_MEMBERSHIP_INVALID_STATE                                    syscall.Errno = 5890
	ERROR_CLUSTER_QUORUMLOG_NOT_FOUND                                         syscall.Errno = 5891
	ERROR_CLUSTER_MEMBERSHIP_HALT                                             syscall.Errno = 5892
	ERROR_CLUSTER_INSTANCE_ID_MISMATCH                                        syscall.Errno = 5893
	ERROR_CLUSTER_NETWORK_NOT_FOUND_FOR_IP                                    syscall.Errno = 5894
	ERROR_CLUSTER_PROPERTY_DATA_TYPE_MISMATCH                                 syscall.Errno = 5895
	ERROR_CLUSTER_EVICT_WITHOUT_CLEANUP                                       syscall.Errno = 5896
	ERROR_CLUSTER_PARAMETER_MISMATCH                                          syscall.Errno = 5897
	ERROR_NODE_CANNOT_BE_CLUSTERED                                            syscall.Errno = 5898
	ERROR_CLUSTER_WRONG_OS_VERSION                                            syscall.Errno = 5899
	ERROR_CLUSTER_CANT_CREATE_DUP_CLUSTER_NAME                                syscall.Errno = 5900
	ERROR_CLUSCFG_ALREADY_COMMITTED                                           syscall.Errno = 5901
	ERROR_CLUSCFG_ROLLBACK_FAILED                                             syscall.Errno = 5902
	ERROR_CLUSCFG_SYSTEM_DISK_DRIVE_LETTER_CONFLICT                           syscall.Errno = 5903
	ERROR_CLUSTER_OLD_VERSION                                                 syscall.Errno = 5904
	ERROR_CLUSTER_MISMATCHED_COMPUTER_ACCT_NAME                               syscall.Errno = 5905
	ERROR_CLUSTER_NO_NET_ADAPTERS                                             syscall.Errno = 5906
	ERROR_CLUSTER_POISONED                                                    syscall.Errno = 5907
	ERROR_CLUSTER_GROUP_MOVING                                                syscall.Errno = 5908
	ERROR_CLUSTER_RESOURCE_TYPE_BUSY                                          syscall.Errno = 5909
	ERROR_RESOURCE_CALL_TIMED_OUT                                             syscall.Errno = 5910
	ERROR_INVALID_CLUSTER_IPV6_ADDRESS                                        syscall.Errno = 5911
	ERROR_CLUSTER_INTERNAL_INVALID_FUNCTION                                   syscall.Errno = 5912
	ERROR_CLUSTER_PARAMETER_OUT_OF_BOUNDS                                     syscall.Errno = 5913
	ERROR_CLUSTER_PARTIAL_SEND                                                syscall.Errno = 5914
	ERROR_CLUSTER_REGISTRY_INVALID_FUNCTION                                   syscall.Errno = 5915
	ERROR_CLUSTER_INVALID_STRING_TERMINATION                                  syscall.Errno = 5916
	ERROR_CLUSTER_INVALID_STRING_FORMAT                                       syscall.Errno = 5917
	ERROR_CLUSTER_DATABASE_TRANSACTION_IN_PROGRESS                            syscall.Errno = 5918
	ERROR_CLUSTER_DATABASE_TRANSACTION_NOT_IN_PROGRESS                        syscall.Errno = 5919
	ERROR_CLUSTER_NULL_DATA                                                   syscall.Errno = 5920
	ERROR_CLUSTER_PARTIAL_READ                                                syscall.Errno = 5921
	ERROR_CLUSTER_PARTIAL_WRITE                                               syscall.Errno = 5922
	ERROR_CLUSTER_CANT_DESERIALIZE_DATA                                       syscall.Errno = 5923
	ERROR_DEPENDENT_RESOURCE_PROPERTY_CONFLICT                                syscall.Errno = 5924
	ERROR_CLUSTER_NO_QUORUM                                                   syscall.Errno = 5925
	ERROR_CLUSTER_INVALID_IPV6_NETWORK                                        syscall.Errno = 5926
	ERROR_CLUSTER_INVALID_IPV6_TUNNEL_NETWORK                                 syscall.Errno = 5927
	ERROR_QUORUM_NOT_ALLOWED_IN_THIS_GROUP                                    syscall.Errno = 5928
	ERROR_DEPENDENCY_TREE_TOO_COMPLEX                                         syscall.Errno = 5929
	ERROR_EXCEPTION_IN_RESOURCE_CALL                                          syscall.Errno = 5930
	ERROR_CLUSTER_RHS_FAILED_INITIALIZATION                                   syscall.Errno = 5931
	ERROR_CLUSTER_NOT_INSTALLED                                               syscall.Errno = 5932
	ERROR_CLUSTER_RESOURCES_MUST_BE_ONLINE_ON_THE_SAME_NODE                   syscall.Errno = 5933
	ERROR_CLUSTER_MAX_NODES_IN_CLUSTER                                        syscall.Errno = 5934
	ERROR_CLUSTER_TOO_MANY_NODES                                              syscall.Errno = 5935
	ERROR_CLUSTER_OBJECT_ALREADY_USED                                         syscall.Errno = 5936
	ERROR_NONCORE_GROUPS_FOUND                                                syscall.Errno = 5937
	ERROR_FILE_SHARE_RESOURCE_CONFLICT                                        syscall.Errno = 5938
	ERROR_CLUSTER_EVICT_INVALID_REQUEST                                       syscall.Errno = 5939
	ERROR_CLUSTER_SINGLETON_RESOURCE                                          syscall.Errno = 5940
	ERROR_CLUSTER_GROUP_SINGLETON_RESOURCE                                    syscall.Errno = 5941
	ERROR_CLUSTER_RESOURCE_PROVIDER_FAILED                                    syscall.Errno = 5942
	ERROR_CLUSTER_RESOURCE_CONFIGURATION_ERROR                                syscall.Errno = 5943
	ERROR_CLUSTER_GROUP_BUSY                                                  syscall.Errno = 5944
	ERROR_CLUSTER_NOT_SHARED_VOLUME                                           syscall.Errno = 5945
	ERROR_CLUSTER_INVALID_SECURITY_DESCRIPTOR                                 syscall.Errno = 5946
	ERROR_CLUSTER_SHARED_VOLUMES_IN_USE                                       syscall.Errno = 5947
	ERROR_CLUSTER_USE_SHARED_VOLUMES_API                                      syscall.Errno = 5948
	ERROR_CLUSTER_BACKUP_IN_PROGRESS                                          syscall.Errno = 5949
	ERROR_NON_CSV_PATH                                                        syscall.Errno = 5950
	ERROR_CSV_VOLUME_NOT_LOCAL                                                syscall.Errno = 5951
	ERROR_CLUSTER_WATCHDOG_TERMINATING                                        syscall.Errno = 5952
	ERROR_CLUSTER_RESOURCE_VETOED_MOVE_INCOMPATIBLE_NODES                     syscall.Errno = 5953
	ERROR_CLUSTER_INVALID_NODE_WEIGHT                                         syscall.Errno = 5954
	ERROR_CLUSTER_RESOURCE_VETOED_CALL                                        syscall.Errno = 5955
	ERROR_RESMON_SYSTEM_RESOURCES_LACKING                                     syscall.Errno = 5956
	ERROR_CLUSTER_RESOURCE_VETOED_MOVE_NOT_ENOUGH_RESOURCES_ON_DESTINATION    syscall.Errno = 5957
	ERROR_CLUSTER_RESOURCE_VETOED_MOVE_NOT_ENOUGH_RESOURCES_ON_SOURCE         syscall.Errno = 5958
	ERROR_CLUSTER_GROUP_QUEUED                                                syscall.Errno = 5959
	ERROR_CLUSTER_RESOURCE_LOCKED_STATUS                                      syscall.Errno = 5960
	ERROR_CLUSTER_SHARED_VOLUME_FAILOVER_NOT_ALLOWED                          syscall.Errno = 5961
	ERROR_CLUSTER_NODE_DRAIN_IN_PROGRESS                                      syscall.Errno = 5962
	ERROR_CLUSTER_DISK_NOT_CONNECTED                                          syscall.Errno = 5963
	ERROR_DISK_NOT_CSV_CAPABLE                                                syscall.Errno = 5964
	ERROR_RESOURCE_NOT_IN_AVAILABLE_STORAGE                                   syscall.Errno = 5965
	ERROR_CLUSTER_SHARED_VOLUME_REDIRECTED                                    syscall.Errno = 5966
	ERROR_CLUSTER_SHARED_VOLUME_NOT_REDIRECTED                                syscall.Errno = 5967
	ERROR_CLUSTER_CANNOT_RETURN_PROPERTIES                                    syscall.Errno = 5968
	ERROR_CLUSTER_RESOURCE_CONTAINS_UNSUPPORTED_DIFF_AREA_FOR_SHARED_VOLUMES  syscall.Errno = 5969
	ERROR_CLUSTER_RESOURCE_IS_IN_MAINTENANCE_MODE                             syscall.Errno = 5970
	ERROR_CLUSTER_AFFINITY_CONFLICT                                           syscall.Errno = 5971
	ERROR_CLUSTER_RESOURCE_IS_REPLICA_VIRTUAL_MACHINE                         syscall.Errno = 5972
	ERROR_CLUSTER_UPGRADE_INCOMPATIBLE_VERSIONS                               syscall.Errno = 5973
	ERROR_CLUSTER_UPGRADE_FIX_QUORUM_NOT_SUPPORTED                            syscall.Errno = 5974
	ERROR_CLUSTER_UPGRADE_RESTART_REQUIRED                                    syscall.Errno = 5975
	ERROR_CLUSTER_UPGRADE_IN_PROGRESS                                         syscall.Errno = 5976
	ERROR_CLUSTER_UPGRADE_INCOMPLETE                                          syscall.Errno = 5977
	ERROR_CLUSTER_NODE_IN_GRACE_PERIOD                                        syscall.Errno = 5978
	ERROR_CLUSTER_CSV_IO_PAUSE_TIMEOUT                                        syscall.Errno = 5979
	ERROR_NODE_NOT_ACTIVE_CLUSTER_MEMBER                                      syscall.Errno = 5980
	ERROR_CLUSTER_RESOURCE_NOT_MONITORED                                      syscall.Errno = 5981
	ERROR_CLUSTER_RESOURCE_DOES_NOT_SUPPORT_UNMONITORED                       syscall.Errno = 5982
	ERROR_CLUSTER_RESOURCE_IS_REPLICATED                                      syscall.Errno = 5983
	ERROR_CLUSTER_NODE_ISOLATED                                               syscall.Errno = 5984
	ERROR_CLUSTER_NODE_QUARANTINED                                            syscall.Errno = 5985
	ERROR_CLUSTER_DATABASE_UPDATE_CONDITION_FAILED                            syscall.Errno = 5986
	ERROR_CLUSTER_SPACE_DEGRADED                                              syscall.Errno = 5987
	ERROR_CLUSTER_TOKEN_DELEGATION_NOT_SUPPORTED                              syscall.Errno = 5988
	ERROR_CLUSTER_CSV_INVALID_HANDLE                                          syscall.Errno = 5989
	ERROR_CLUSTER_CSV_SUPPORTED_ONLY_ON_COORDINATOR                           syscall.Errno = 5990
	ERROR_GROUPSET_NOT_AVAILABLE                                              syscall.Errno = 5991
	ERROR_GROUPSET_NOT_FOUND                                                  syscall.Errno = 5992
	ERROR_GROUPSET_CANT_PROVIDE                                               syscall.Errno = 5993
	ERROR_CLUSTER_FAULT_DOMAIN_PARENT_NOT_FOUND                               syscall.Errno = 5994
	ERROR_CLUSTER_FAULT_DOMAIN_INVALID_HIERARCHY                              syscall.Errno = 5995
	ERROR_CLUSTER_FAULT_DOMAIN_FAILED_S2D_VALIDATION                          syscall.Errno = 5996
	ERROR_CLUSTER_FAULT_DOMAIN_S2D_CONNECTIVITY_LOSS                          syscall.Errno = 5997
	ERROR_CLUSTER_INVALID_INFRASTRUCTURE_FILESERVER_NAME                      syscall.Errno = 5998
	ERROR_CLUSTERSET_MANAGEMENT_CLUSTER_UNREACHABLE                           syscall.Errno = 5999
	ERROR_ENCRYPTION_FAILED                                                   syscall.Errno = 6000
	ERROR_DECRYPTION_FAILED                                                   syscall.Errno = 6001
	ERROR_FILE_ENCRYPTED                                                      syscall.Errno = 6002
	ERROR_NO_RECOVERY_POLICY                                                  syscall.Errno = 6003
	ERROR_NO_EFS                                                              syscall.Errno = 6004
	ERROR_WRONG_EFS                                                           syscall.Errno = 6005
	ERROR_NO_USER_KEYS                                                        syscall.Errno = 6006
	ERROR_FILE_NOT_ENCRYPTED                                                  syscall.Errno = 6007
	ERROR_NOT_EXPORT_FORMAT                                                   syscall.Errno = 6008
	ERROR_FILE_READ_ONLY                                                      syscall.Errno = 6009
	ERROR_DIR_EFS_DISALLOWED                                                  syscall.Errno = 6010
	ERROR_EFS_SERVER_NOT_TRUSTED                                              syscall.Errno = 6011
	ERROR_BAD_RECOVERY_POLICY                                                 syscall.Errno = 6012
	ERROR_EFS_ALG_BLOB_TOO_BIG                                                syscall.Errno = 6013
	ERROR_VOLUME_NOT_SUPPORT_EFS                                              syscall.Errno = 6014
	ERROR_EFS_DISABLED                                                        syscall.Errno = 6015
	ERROR_EFS_VERSION_NOT_SUPPORT                                             syscall.Errno = 6016
	ERROR_CS_ENCRYPTION_INVALID_SERVER_RESPONSE                               syscall.Errno = 6017
	ERROR_CS_ENCRYPTION_UNSUPPORTED_SERVER                                    syscall.Errno = 6018
	ERROR_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE                               syscall.Errno = 6019
	ERROR_CS_ENCRYPTION_NEW_ENCRYPTED_FILE                                    syscall.Errno = 6020
	ERROR_CS_ENCRYPTION_FILE_NOT_CSE                                          syscall.Errno = 6021
	ERROR_ENCRYPTION_POLICY_DENIES_OPERATION                                  syscall.Errno = 6022
	ERROR_WIP_ENCRYPTION_FAILED                                               syscall.Errno = 6023
	ERROR_NO_BROWSER_SERVERS_FOUND                                            syscall.Errno = 6118
	SCHED_E_SERVICE_NOT_LOCALSYSTEM                                           syscall.Errno = 6200
	ERROR_LOG_SECTOR_INVALID                                                  syscall.Errno = 6600
	ERROR_LOG_SECTOR_PARITY_INVALID                                           syscall.Errno = 6601
	ERROR_LOG_SECTOR_REMAPPED                                                 syscall.Errno = 6602
	ERROR_LOG_BLOCK_INCOMPLETE                                                syscall.Errno = 6603
	ERROR_LOG_INVALID_RANGE                                                   syscall.Errno = 6604
	ERROR_LOG_BLOCKS_EXHAUSTED                                                syscall.Errno = 6605
	ERROR_LOG_READ_CONTEXT_INVALID                                            syscall.Errno = 6606
	ERROR_LOG_RESTART_INVALID                                                 syscall.Errno = 6607
	ERROR_LOG_BLOCK_VERSION                                                   syscall.Errno = 6608
	ERROR_LOG_BLOCK_INVALID                                                   syscall.Errno = 6609
	ERROR_LOG_READ_MODE_INVALID                                               syscall.Errno = 6610
	ERROR_LOG_NO_RESTART                                                      syscall.Errno = 6611
	ERROR_LOG_METADATA_CORRUPT                                                syscall.Errno = 6612
	ERROR_LOG_METADATA_INVALID                                                syscall.Errno = 6613
	ERROR_LOG_METADATA_INCONSISTENT                                           syscall.Errno = 6614
	ERROR_LOG_RESERVATION_INVALID                                             syscall.Errno = 6615
	ERROR_LOG_CANT_DELETE                                                     syscall.Errno = 6616
	ERROR_LOG_CONTAINER_LIMIT_EXCEEDED                                        syscall.Errno = 6617
	ERROR_LOG_START_OF_LOG                                                    syscall.Errno = 6618
	ERROR_LOG_POLICY_ALREADY_INSTALLED                                        syscall.Errno = 6619
	ERROR_LOG_POLICY_NOT_INSTALLED                                            syscall.Errno = 6620
	ERROR_LOG_POLICY_INVALID                                                  syscall.Errno = 6621
	ERROR_LOG_POLICY_CONFLICT                                                 syscall.Errno = 6622
	ERROR_LOG_PINNED_ARCHIVE_TAIL                                             syscall.Errno = 6623
	ERROR_LOG_RECORD_NONEXISTENT                                              syscall.Errno = 6624
	ERROR_LOG_RECORDS_RESERVED_INVALID                                        syscall.Errno = 6625
	ERROR_LOG_SPACE_RESERVED_INVALID                                          syscall.Errno = 6626
	ERROR_LOG_TAIL_INVALID                                                    syscall.Errno = 6627
	ERROR_LOG_FULL                                                            syscall.Errno = 6628
	ERROR_COULD_NOT_RESIZE_LOG                                                syscall.Errno = 6629
	ERROR_LOG_MULTIPLEXED                                                     syscall.Errno = 6630
	ERROR_LOG_DEDICATED                                                       syscall.Errno = 6631
	ERROR_LOG_ARCHIVE_NOT_IN_PROGRESS                                         syscall.Errno = 6632
	ERROR_LOG_ARCHIVE_IN_PROGRESS                                             syscall.Errno = 6633
	ERROR_LOG_EPHEMERAL                                                       syscall.Errno = 6634
	ERROR_LOG_NOT_ENOUGH_CONTAINERS                                           syscall.Errno = 6635
	ERROR_LOG_CLIENT_ALREADY_REGISTERED                                       syscall.Errno = 6636
	ERROR_LOG_CLIENT_NOT_REGISTERED                                           syscall.Errno = 6637
	ERROR_LOG_FULL_HANDLER_IN_PROGRESS                                        syscall.Errno = 6638
	ERROR_LOG_CONTAINER_READ_FAILED                                           syscall.Errno = 6639
	ERROR_LOG_CONTAINER_WRITE_FAILED                                          syscall.Errno = 6640
	ERROR_LOG_CONTAINER_OPEN_FAILED                                           syscall.Errno = 6641
	ERROR_LOG_CONTAINER_STATE_INVALID                                         syscall.Errno = 6642
	ERROR_LOG_STATE_INVALID                                                   syscall.Errno = 6643
	ERROR_LOG_PINNED                                                          syscall.Errno = 6644
	ERROR_LOG_METADATA_FLUSH_FAILED                                           syscall.Errno = 6645
	ERROR_LOG_INCONSISTENT_SECURITY                                           syscall.Errno = 6646
	ERROR_LOG_APPENDED_FLUSH_FAILED                                           syscall.Errno = 6647
	ERROR_LOG_PINNED_RESERVATION                                              syscall.Errno = 6648
	ERROR_INVALID_TRANSACTION                                                 syscall.Errno = 6700
	ERROR_TRANSACTION_NOT_ACTIVE                                              syscall.Errno = 6701
	ERROR_TRANSACTION_REQUEST_NOT_VALID                                       syscall.Errno = 6702
	ERROR_TRANSACTION_NOT_REQUESTED                                           syscall.Errno = 6703
	ERROR_TRANSACTION_ALREADY_ABORTED                                         syscall.Errno = 6704
	ERROR_TRANSACTION_ALREADY_COMMITTED                                       syscall.Errno = 6705
	ERROR_TM_INITIALIZATION_FAILED                                            syscall.Errno = 6706
	ERROR_RESOURCEMANAGER_READ_ONLY                                           syscall.Errno = 6707
	ERROR_TRANSACTION_NOT_JOINED                                              syscall.Errno = 6708
	ERROR_TRANSACTION_SUPERIOR_EXISTS                                         syscall.Errno = 6709
	ERROR_CRM_PROTOCOL_ALREADY_EXISTS                                         syscall.Errno = 6710
	ERROR_TRANSACTION_PROPAGATION_FAILED                                      syscall.Errno = 6711
	ERROR_CRM_PROTOCOL_NOT_FOUND                                              syscall.Errno = 6712
	ERROR_TRANSACTION_INVALID_MARSHALL_BUFFER                                 syscall.Errno = 6713
	ERROR_CURRENT_TRANSACTION_NOT_VALID                                       syscall.Errno = 6714
	ERROR_TRANSACTION_NOT_FOUND                                               syscall.Errno = 6715
	ERROR_RESOURCEMANAGER_NOT_FOUND                                           syscall.Errno = 6716
	ERROR_ENLISTMENT_NOT_FOUND                                                syscall.Errno = 6717
	ERROR_TRANSACTIONMANAGER_NOT_FOUND                                        syscall.Errno = 6718
	ERROR_TRANSACTIONMANAGER_NOT_ONLINE                                       syscall.Errno = 6719
	ERROR_TRANSACTIONMANAGER_RECOVERY_NAME_COLLISION                          syscall.Errno = 6720
	ERROR_TRANSACTION_NOT_ROOT                                                syscall.Errno = 6721
	ERROR_TRANSACTION_OBJECT_EXPIRED                                          syscall.Errno = 6722
	ERROR_TRANSACTION_RESPONSE_NOT_ENLISTED                                   syscall.Errno = 6723
	ERROR_TRANSACTION_RECORD_TOO_LONG                                         syscall.Errno = 6724
	ERROR_IMPLICIT_TRANSACTION_NOT_SUPPORTED                                  syscall.Errno = 6725
	ERROR_TRANSACTION_INTEGRITY_VIOLATED                                      syscall.Errno = 6726
	ERROR_TRANSACTIONMANAGER_IDENTITY_MISMATCH                                syscall.Errno = 6727
	ERROR_RM_CANNOT_BE_FROZEN_FOR_SNAPSHOT                                    syscall.Errno = 6728
	ERROR_TRANSACTION_MUST_WRITETHROUGH                                       syscall.Errno = 6729
	ERROR_TRANSACTION_NO_SUPERIOR                                             syscall.Errno = 6730
	ERROR_HEURISTIC_DAMAGE_POSSIBLE                                           syscall.Errno = 6731
	ERROR_TRANSACTIONAL_CONFLICT                                              syscall.Errno = 6800
	ERROR_RM_NOT_ACTIVE                                                       syscall.Errno = 6801
	ERROR_RM_METADATA_CORRUPT                                                 syscall.Errno = 6802
	ERROR_DIRECTORY_NOT_RM                                                    syscall.Errno = 6803
	ERROR_TRANSACTIONS_UNSUPPORTED_REMOTE                                     syscall.Errno = 6805
	ERROR_LOG_RESIZE_INVALID_SIZE                                             syscall.Errno = 6806
	ERROR_OBJECT_NO_LONGER_EXISTS                                             syscall.Errno = 6807
	ERROR_STREAM_MINIVERSION_NOT_FOUND                                        syscall.Errno = 6808
	ERROR_STREAM_MINIVERSION_NOT_VALID                                        syscall.Errno = 6809
	ERROR_MINIVERSION_INACCESSIBLE_FROM_SPECIFIED_TRANSACTION                 syscall.Errno = 6810
	ERROR_CANT_OPEN_MINIVERSION_WITH_MODIFY_INTENT                            syscall.Errno = 6811
	ERROR_CANT_CREATE_MORE_STREAM_MINIVERSIONS                                syscall.Errno = 6812
	ERROR_REMOTE_FILE_VERSION_MISMATCH                                        syscall.Errno = 6814
	ERROR_HANDLE_NO_LONGER_VALID                                              syscall.Errno = 6815
	ERROR_NO_TXF_METADATA                                                     syscall.Errno = 6816
	ERROR_LOG_CORRUPTION_DETECTED                                             syscall.Errno = 6817
	ERROR_CANT_RECOVER_WITH_HANDLE_OPEN                                       syscall.Errno = 6818
	ERROR_RM_DISCONNECTED                                                     syscall.Errno = 6819
	ERROR_ENLISTMENT_NOT_SUPERIOR                                             syscall.Errno = 6820
	ERROR_RECOVERY_NOT_NEEDED                                                 syscall.Errno = 6821
	ERROR_RM_ALREADY_STARTED                                                  syscall.Errno = 6822
	ERROR_FILE_IDENTITY_NOT_PERSISTENT                                        syscall.Errno = 6823
	ERROR_CANT_BREAK_TRANSACTIONAL_DEPENDENCY                                 syscall.Errno = 6824
	ERROR_CANT_CROSS_RM_BOUNDARY                                              syscall.Errno = 6825
	ERROR_TXF_DIR_NOT_EMPTY                                                   syscall.Errno = 6826
	ERROR_INDOUBT_TRANSACTIONS_EXIST                                          syscall.Errno = 6827
	ERROR_TM_VOLATILE                                                         syscall.Errno = 6828
	ERROR_ROLLBACK_TIMER_EXPIRED                                              syscall.Errno = 6829
	ERROR_TXF_ATTRIBUTE_CORRUPT                                               syscall.Errno = 6830
	ERROR_EFS_NOT_ALLOWED_IN_TRANSACTION                                      syscall.Errno = 6831
	ERROR_TRANSACTIONAL_OPEN_NOT_ALLOWED                                      syscall.Errno = 6832
	ERROR_LOG_GROWTH_FAILED                                                   syscall.Errno = 6833
	ERROR_TRANSACTED_MAPPING_UNSUPPORTED_REMOTE                               syscall.Errno = 6834
	ERROR_TXF_METADATA_ALREADY_PRESENT                                        syscall.Errno = 6835
	ERROR_TRANSACTION_SCOPE_CALLBACKS_NOT_SET                                 syscall.Errno = 6836
	ERROR_TRANSACTION_REQUIRED_PROMOTION                                      syscall.Errno = 6837
	ERROR_CANNOT_EXECUTE_FILE_IN_TRANSACTION                                  syscall.Errno = 6838
	ERROR_TRANSACTIONS_NOT_FROZEN                                             syscall.Errno = 6839
	ERROR_TRANSACTION_FREEZE_IN_PROGRESS                                      syscall.Errno = 6840
	ERROR_NOT_SNAPSHOT_VOLUME                                                 syscall.Errno = 6841
	ERROR_NO_SAVEPOINT_WITH_OPEN_FILES                                        syscall.Errno = 6842
	ERROR_DATA_LOST_REPAIR                                                    syscall.Errno = 6843
	ERROR_SPARSE_NOT_ALLOWED_IN_TRANSACTION                                   syscall.Errno = 6844
	ERROR_TM_IDENTITY_MISMATCH                                                syscall.Errno = 6845
	ERROR_FLOATED_SECTION                                                     syscall.Errno = 6846
	ERROR_CANNOT_ACCEPT_TRANSACTED_WORK                                       syscall.Errno = 6847
	ERROR_CANNOT_ABORT_TRANSACTIONS                                           syscall.Errno = 6848
	ERROR_BAD_CLUSTERS                                                        syscall.Errno = 6849
	ERROR_COMPRESSION_NOT_ALLOWED_IN_TRANSACTION                              syscall.Errno = 6850
	ERROR_VOLUME_DIRTY                                                        syscall.Errno = 6851
	ERROR_NO_LINK_TRACKING_IN_TRANSACTION                                     syscall.Errno = 6852
	ERROR_OPERATION_NOT_SUPPORTED_IN_TRANSACTION                              syscall.Errno = 6853
	ERROR_EXPIRED_HANDLE                                                      syscall.Errno = 6854
	ERROR_TRANSACTION_NOT_ENLISTED                                            syscall.Errno = 6855
	ERROR_CTX_WINSTATION_NAME_INVALID                                         syscall.Errno = 7001
	ERROR_CTX_INVALID_PD                                                      syscall.Errno = 7002
	ERROR_CTX_PD_NOT_FOUND                                                    syscall.Errno = 7003
	ERROR_CTX_WD_NOT_FOUND                                                    syscall.Errno = 7004
	ERROR_CTX_CANNOT_MAKE_EVENTLOG_ENTRY                                      syscall.Errno = 7005
	ERROR_CTX_SERVICE_NAME_COLLISION                                          syscall.Errno = 7006
	ERROR_CTX_CLOSE_PENDING                                                   syscall.Errno = 7007
	ERROR_CTX_NO_OUTBUF                                                       syscall.Errno = 7008
	ERROR_CTX_MODEM_INF_NOT_FOUND                                             syscall.Errno = 7009
	ERROR_CTX_INVALID_MODEMNAME                                               syscall.Errno = 7010
	ERROR_CTX_MODEM_RESPONSE_ERROR                                            syscall.Errno = 7011
	ERROR_CTX_MODEM_RESPONSE_TIMEOUT                                          syscall.Errno = 7012
	ERROR_CTX_MODEM_RESPONSE_NO_CARRIER                                       syscall.Errno = 7013
	ERROR_CTX_MODEM_RESPONSE_NO_DIALTONE                                      syscall.Errno = 7014
	ERROR_CTX_MODEM_RESPONSE_BUSY                                             syscall.Errno = 7015
	ERROR_CTX_MODEM_RESPONSE_VOICE                                            syscall.Errno = 7016
	ERROR_CTX_TD_ERROR                                                        syscall.Errno = 7017
	ERROR_CTX_WINSTATION_NOT_FOUND                                            syscall.Errno = 7022
	ERROR_CTX_WINSTATION_ALREADY_EXISTS                                       syscall.Errno = 7023
	ERROR_CTX_WINSTATION_BUSY                                                 syscall.Errno = 7024
	ERROR_CTX_BAD_VIDEO_MODE                                                  syscall.Errno = 7025
	ERROR_CTX_GRAPHICS_INVALID                                                syscall.Errno = 7035
	ERROR_CTX_LOGON_DISABLED                                                  syscall.Errno = 7037
	ERROR_CTX_NOT_CONSOLE                                                     syscall.Errno = 7038
	ERROR_CTX_CLIENT_QUERY_TIMEOUT                                            syscall.Errno = 7040
	ERROR_CTX_CONSOLE_DISCONNECT                                              syscall.Errno = 7041
	ERROR_CTX_CONSOLE_CONNECT                                                 syscall.Errno = 7042
	ERROR_CTX_SHADOW_DENIED                                                   syscall.Errno = 7044
	ERROR_CTX_WINSTATION_ACCESS_DENIED                                        syscall.Errno = 7045
	ERROR_CTX_INVALID_WD                                                      syscall.Errno = 7049
	ERROR_CTX_SHADOW_INVALID                                                  syscall.Errno = 7050
	ERROR_CTX_SHADOW_DISABLED                                                 syscall.Errno = 7051
	ERROR_CTX_CLIENT_LICENSE_IN_USE                                           syscall.Errno = 7052
	ERROR_CTX_CLIENT_LICENSE_NOT_SET                                          syscall.Errno = 7053
	ERROR_CTX_LICENSE_NOT_AVAILABLE                                           syscall.Errno = 7054
	ERROR_CTX_LICENSE_CLIENT_INVALID                                          syscall.Errno = 7055
	ERROR_CTX_LICENSE_EXPIRED                                                 syscall.Errno = 7056
	ERROR_CTX_SHADOW_NOT_RUNNING                                              syscall.Errno = 7057
	ERROR_CTX_SHADOW_ENDED_BY_MODE_CHANGE                                     syscall.Errno = 7058
	ERROR_ACTIVATION_COUNT_EXCEEDED                                           syscall.Errno = 7059
	ERROR_CTX_WINSTATIONS_DISABLED                                            syscall.Errno = 7060
	ERROR_CTX_ENCRYPTION_LEVEL_REQUIRED                                       syscall.Errno = 7061
	ERROR_CTX_SESSION_IN_USE                                                  syscall.Errno = 7062
	ERROR_CTX_NO_FORCE_LOGOFF                                                 syscall.Errno = 7063
	ERROR_CTX_ACCOUNT_RESTRICTION                                             syscall.Errno = 7064
	ERROR_RDP_PROTOCOL_ERROR                                                  syscall.Errno = 7065
	ERROR_CTX_CDM_CONNECT                                                     syscall.Errno = 7066
	ERROR_CTX_CDM_DISCONNECT                                                  syscall.Errno = 7067
	ERROR_CTX_SECURITY_LAYER_ERROR                                            syscall.Errno = 7068
	ERROR_TS_INCOMPATIBLE_SESSIONS                                            syscall.Errno = 7069
	ERROR_TS_VIDEO_SUBSYSTEM_ERROR                                            syscall.Errno = 7070
	FRS_ERR_INVALID_API_SEQUENCE                                              syscall.Errno = 8001
	FRS_ERR_STARTING_SERVICE                                                  syscall.Errno = 8002
	FRS_ERR_STOPPING_SERVICE                                                  syscall.Errno = 8003
	FRS_ERR_INTERNAL_API                                                      syscall.Errno = 8004
	FRS_ERR_INTERNAL                                                          syscall.Errno = 8005
	FRS_ERR_SERVICE_COMM                                                      syscall.Errno = 8006
	FRS_ERR_INSUFFICIENT_PRIV                                                 syscall.Errno = 8007
	FRS_ERR_AUTHENTICATION                                                    syscall.Errno = 8008
	FRS_ERR_PARENT_INSUFFICIENT_PRIV                                          syscall.Errno = 8009
	FRS_ERR_PARENT_AUTHENTICATION                                             syscall.Errno = 8010
	FRS_ERR_CHILD_TO_PARENT_COMM                                              syscall.Errno = 8011
	FRS_ERR_PARENT_TO_CHILD_COMM                                              syscall.Errno = 8012
	FRS_ERR_SYSVOL_POPULATE                                                   syscall.Errno = 8013
	FRS_ERR_SYSVOL_POPULATE_TIMEOUT                                           syscall.Errno = 8014
	FRS_ERR_SYSVOL_IS_BUSY                                                    syscall.Errno = 8015
	FRS_ERR_SYSVOL_DEMOTE                                                     syscall.Errno = 8016
	FRS_ERR_INVALID_SERVICE_PARAMETER                                         syscall.Errno = 8017
	DS_S_SUCCESS                                                                            = ERROR_SUCCESS
	ERROR_DS_NOT_INSTALLED                                                    syscall.Errno = 8200
	ERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY                                     syscall.Errno = 8201
	ERROR_DS_NO_ATTRIBUTE_OR_VALUE                                            syscall.Errno = 8202
	ERROR_DS_INVALID_ATTRIBUTE_SYNTAX                                         syscall.Errno = 8203
	ERROR_DS_ATTRIBUTE_TYPE_UNDEFINED                                         syscall.Errno = 8204
	ERROR_DS_ATTRIBUTE_OR_VALUE_EXISTS                                        syscall.Errno = 8205
	ERROR_DS_BUSY                                                             syscall.Errno = 8206
	ERROR_DS_UNAVAILABLE                                                      syscall.Errno = 8207
	ERROR_DS_NO_RIDS_ALLOCATED                                                syscall.Errno = 8208
	ERROR_DS_NO_MORE_RIDS                                                     syscall.Errno = 8209
	ERROR_DS_INCORRECT_ROLE_OWNER                                             syscall.Errno = 8210
	ERROR_DS_RIDMGR_INIT_ERROR                                                syscall.Errno = 8211
	ERROR_DS_OBJ_CLASS_VIOLATION                                              syscall.Errno = 8212
	ERROR_DS_CANT_ON_NON_LEAF                                                 syscall.Errno = 8213
	ERROR_DS_CANT_ON_RDN                                                      syscall.Errno = 8214
	ERROR_DS_CANT_MOD_OBJ_CLASS                                               syscall.Errno = 8215
	ERROR_DS_CROSS_DOM_MOVE_ERROR                                             syscall.Errno = 8216
	ERROR_DS_GC_NOT_AVAILABLE                                                 syscall.Errno = 8217
	ERROR_SHARED_POLICY                                                       syscall.Errno = 8218
	ERROR_POLICY_OBJECT_NOT_FOUND                                             syscall.Errno = 8219
	ERROR_POLICY_ONLY_IN_DS                                                   syscall.Errno = 8220
	ERROR_PROMOTION_ACTIVE                                                    syscall.Errno = 8221
	ERROR_NO_PROMOTION_ACTIVE                                                 syscall.Errno = 8222
	ERROR_DS_OPERATIONS_ERROR                                                 syscall.Errno = 8224
	ERROR_DS_PROTOCOL_ERROR                                                   syscall.Errno = 8225
	ERROR_DS_TIMELIMIT_EXCEEDED                                               syscall.Errno = 8226
	ERROR_DS_SIZELIMIT_EXCEEDED                                               syscall.Errno = 8227
	ERROR_DS_ADMIN_LIMIT_EXCEEDED                                             syscall.Errno = 8228
	ERROR_DS_COMPARE_FALSE                                                    syscall.Errno = 8229
	ERROR_DS_COMPARE_TRUE                                                     syscall.Errno = 8230
	ERROR_DS_AUTH_METHOD_NOT_SUPPORTED                                        syscall.Errno = 8231
	ERROR_DS_STRONG_AUTH_REQUIRED                                             syscall.Errno = 8232
	ERROR_DS_INAPPROPRIATE_AUTH                                               syscall.Errno = 8233
	ERROR_DS_AUTH_UNKNOWN                                                     syscall.Errno = 8234
	ERROR_DS_REFERRAL                                                         syscall.Errno = 8235
	ERROR_DS_UNAVAILABLE_CRIT_EXTENSION                                       syscall.Errno = 8236
	ERROR_DS_CONFIDENTIALITY_REQUIRED                                         syscall.Errno = 8237
	ERROR_DS_INAPPROPRIATE_MATCHING                                           syscall.Errno = 8238
	ERROR_DS_CONSTRAINT_VIOLATION                                             syscall.Errno = 8239
	ERROR_DS_NO_SUCH_OBJECT                                                   syscall.Errno = 8240
	ERROR_DS_ALIAS_PROBLEM                                                    syscall.Errno = 8241
	ERROR_DS_INVALID_DN_SYNTAX                                                syscall.Errno = 8242
	ERROR_DS_IS_LEAF                                                          syscall.Errno = 8243
	ERROR_DS_ALIAS_DEREF_PROBLEM                                              syscall.Errno = 8244
	ERROR_DS_UNWILLING_TO_PERFORM                                             syscall.Errno = 8245
	ERROR_DS_LOOP_DETECT                                                      syscall.Errno = 8246
	ERROR_DS_NAMING_VIOLATION                                                 syscall.Errno = 8247
	ERROR_DS_OBJECT_RESULTS_TOO_LARGE                                         syscall.Errno = 8248
	ERROR_DS_AFFECTS_MULTIPLE_DSAS                                            syscall.Errno = 8249
	ERROR_DS_SERVER_DOWN                                                      syscall.Errno = 8250
	ERROR_DS_LOCAL_ERROR                                                      syscall.Errno = 8251
	ERROR_DS_ENCODING_ERROR                                                   syscall.Errno = 8252
	ERROR_DS_DECODING_ERROR                                                   syscall.Errno = 8253
	ERROR_DS_FILTER_UNKNOWN                                                   syscall.Errno = 8254
	ERROR_DS_PARAM_ERROR                                                      syscall.Errno = 8255
	ERROR_DS_NOT_SUPPORTED                                                    syscall.Errno = 8256
	ERROR_DS_NO_RESULTS_RETURNED                                              syscall.Errno = 8257
	ERROR_DS_CONTROL_NOT_FOUND                                                syscall.Errno = 8258
	ERROR_DS_CLIENT_LOOP                                                      syscall.Errno = 8259
	ERROR_DS_REFERRAL_LIMIT_EXCEEDED                                          syscall.Errno = 8260
	ERROR_DS_SORT_CONTROL_MISSING                                             syscall.Errno = 8261
	ERROR_DS_OFFSET_RANGE_ERROR                                               syscall.Errno = 8262
	ERROR_DS_RIDMGR_DISABLED                                                  syscall.Errno = 8263
	ERROR_DS_ROOT_MUST_BE_NC                                                  syscall.Errno = 8301
	ERROR_DS_ADD_REPLICA_INHIBITED                                            syscall.Errno = 8302
	ERROR_DS_ATT_NOT_DEF_IN_SCHEMA                                            syscall.Errno = 8303
	ERROR_DS_MAX_OBJ_SIZE_EXCEEDED                                            syscall.Errno = 8304
	ERROR_DS_OBJ_STRING_NAME_EXISTS                                           syscall.Errno = 8305
	ERROR_DS_NO_RDN_DEFINED_IN_SCHEMA                                         syscall.Errno = 8306
	ERROR_DS_RDN_DOESNT_MATCH_SCHEMA                                          syscall.Errno = 8307
	ERROR_DS_NO_REQUESTED_ATTS_FOUND                                          syscall.Errno = 8308
	ERROR_DS_USER_BUFFER_TO_SMALL                                             syscall.Errno = 8309
	ERROR_DS_ATT_IS_NOT_ON_OBJ                                                syscall.Errno = 8310
	ERROR_DS_ILLEGAL_MOD_OPERATION                                            syscall.Errno = 8311
	ERROR_DS_OBJ_TOO_LARGE                                                    syscall.Errno = 8312
	ERROR_DS_BAD_INSTANCE_TYPE                                                syscall.Errno = 8313
	ERROR_DS_MASTERDSA_REQUIRED                                               syscall.Errno = 8314
	ERROR_DS_OBJECT_CLASS_REQUIRED                                            syscall.Errno = 8315
	ERROR_DS_MISSING_REQUIRED_ATT                                             syscall.Errno = 8316
	ERROR_DS_ATT_NOT_DEF_FOR_CLASS                                            syscall.Errno = 8317
	ERROR_DS_ATT_ALREADY_EXISTS                                               syscall.Errno = 8318
	ERROR_DS_CANT_ADD_ATT_VALUES                                              syscall.Errno = 8320
	ERROR_DS_SINGLE_VALUE_CONSTRAINT                                          syscall.Errno = 8321
	ERROR_DS_RANGE_CONSTRAINT                                                 syscall.Errno = 8322
	ERROR_DS_ATT_VAL_ALREADY_EXISTS                                           syscall.Errno = 8323
	ERROR_DS_CANT_REM_MISSING_ATT                                             syscall.Errno = 8324
	ERROR_DS_CANT_REM_MISSING_ATT_VAL                                         syscall.Errno = 8325
	ERROR_DS_ROOT_CANT_BE_SUBREF                                              syscall.Errno = 8326
	ERROR_DS_NO_CHAINING                                                      syscall.Errno = 8327
	ERROR_DS_NO_CHAINED_EVAL                                                  syscall.Errno = 8328
	ERROR_DS_NO_PARENT_OBJECT                                                 syscall.Errno = 8329
	ERROR_DS_PARENT_IS_AN_ALIAS                                               syscall.Errno = 8330
	ERROR_DS_CANT_MIX_MASTER_AND_REPS                                         syscall.Errno = 8331
	ERROR_DS_CHILDREN_EXIST                                                   syscall.Errno = 8332
	ERROR_DS_OBJ_NOT_FOUND                                                    syscall.Errno = 8333
	ERROR_DS_ALIASED_OBJ_MISSING                                              syscall.Errno = 8334
	ERROR_DS_BAD_NAME_SYNTAX                                                  syscall.Errno = 8335
	ERROR_DS_ALIAS_POINTS_TO_ALIAS                                            syscall.Errno = 8336
	ERROR_DS_CANT_DEREF_ALIAS                                                 syscall.Errno = 8337
	ERROR_DS_OUT_OF_SCOPE                                                     syscall.Errno = 8338
	ERROR_DS_OBJECT_BEING_REMOVED                                             syscall.Errno = 8339
	ERROR_DS_CANT_DELETE_DSA_OBJ                                              syscall.Errno = 8340
	ERROR_DS_GENERIC_ERROR                                                    syscall.Errno = 8341
	ERROR_DS_DSA_MUST_BE_INT_MASTER                                           syscall.Errno = 8342
	ERROR_DS_CLASS_NOT_DSA                                                    syscall.Errno = 8343
	ERROR_DS_INSUFF_ACCESS_RIGHTS                                             syscall.Errno = 8344
	ERROR_DS_ILLEGAL_SUPERIOR                                                 syscall.Errno = 8345
	ERROR_DS_ATTRIBUTE_OWNED_BY_SAM                                           syscall.Errno = 8346
	ERROR_DS_NAME_TOO_MANY_PARTS                                              syscall.Errno = 8347
	ERROR_DS_NAME_TOO_LONG                                                    syscall.Errno = 8348
	ERROR_DS_NAME_VALUE_TOO_LONG                                              syscall.Errno = 8349
	ERROR_DS_NAME_UNPARSEABLE                                                 syscall.Errno = 8350
	ERROR_DS_NAME_TYPE_UNKNOWN                                                syscall.Errno = 8351
	ERROR_DS_NOT_AN_OBJECT                                                    syscall.Errno = 8352
	ERROR_DS_SEC_DESC_TOO_SHORT                                               syscall.Errno = 8353
	ERROR_DS_SEC_DESC_INVALID                                                 syscall.Errno = 8354
	ERROR_DS_NO_DELETED_NAME                                                  syscall.Errno = 8355
	ERROR_DS_SUBREF_MUST_HAVE_PARENT                                          syscall.Errno = 8356
	ERROR_DS_NCNAME_MUST_BE_NC                                                syscall.Errno = 8357
	ERROR_DS_CANT_ADD_SYSTEM_ONLY                                             syscall.Errno = 8358
	ERROR_DS_CLASS_MUST_BE_CONCRETE                                           syscall.Errno = 8359
	ERROR_DS_INVALID_DMD                                                      syscall.Errno = 8360
	ERROR_DS_OBJ_GUID_EXISTS                                                  syscall.Errno = 8361
	ERROR_DS_NOT_ON_BACKLINK                                                  syscall.Errno = 8362
	ERROR_DS_NO_CROSSREF_FOR_NC                                               syscall.Errno = 8363
	ERROR_DS_SHUTTING_DOWN                                                    syscall.Errno = 8364
	ERROR_DS_UNKNOWN_OPERATION                                                syscall.Errno = 8365
	ERROR_DS_INVALID_ROLE_OWNER                                               syscall.Errno = 8366
	ERROR_DS_COULDNT_CONTACT_FSMO                                             syscall.Errno = 8367
	ERROR_DS_CROSS_NC_DN_RENAME                                               syscall.Errno = 8368
	ERROR_DS_CANT_MOD_SYSTEM_ONLY                                             syscall.Errno = 8369
	ERROR_DS_REPLICATOR_ONLY                                                  syscall.Errno = 8370
	ERROR_DS_OBJ_CLASS_NOT_DEFINED                                            syscall.Errno = 8371
	ERROR_DS_OBJ_CLASS_NOT_SUBCLASS                                           syscall.Errno = 8372
	ERROR_DS_NAME_REFERENCE_INVALID                                           syscall.Errno = 8373
	ERROR_DS_CROSS_REF_EXISTS                                                 syscall.Errno = 8374
	ERROR_DS_CANT_DEL_MASTER_CROSSREF                                         syscall.Errno = 8375
	ERROR_DS_SUBTREE_NOTIFY_NOT_NC_HEAD                                       syscall.Errno = 8376
	ERROR_DS_NOTIFY_FILTER_TOO_COMPLEX                                        syscall.Errno = 8377
	ERROR_DS_DUP_RDN                                                          syscall.Errno = 8378
	ERROR_DS_DUP_OID                                                          syscall.Errno = 8379
	ERROR_DS_DUP_MAPI_ID                                                      syscall.Errno = 8380
	ERROR_DS_DUP_SCHEMA_ID_GUID                                               syscall.Errno = 8381
	ERROR_DS_DUP_LDAP_DISPLAY_NAME                                            syscall.Errno = 8382
	ERROR_DS_SEMANTIC_ATT_TEST                                                syscall.Errno = 8383
	ERROR_DS_SYNTAX_MISMATCH                                                  syscall.Errno = 8384
	ERROR_DS_EXISTS_IN_MUST_HAVE                                              syscall.Errno = 8385
	ERROR_DS_EXISTS_IN_MAY_HAVE                                               syscall.Errno = 8386
	ERROR_DS_NONEXISTENT_MAY_HAVE                                             syscall.Errno = 8387
	ERROR_DS_NONEXISTENT_MUST_HAVE                                            syscall.Errno = 8388
	ERROR_DS_AUX_CLS_TEST_FAIL                                                syscall.Errno = 8389
	ERROR_DS_NONEXISTENT_POSS_SUP                                             syscall.Errno = 8390
	ERROR_DS_SUB_CLS_TEST_FAIL                                                syscall.Errno = 8391
	ERROR_DS_BAD_RDN_ATT_ID_SYNTAX                                            syscall.Errno = 8392
	ERROR_DS_EXISTS_IN_AUX_CLS                                                syscall.Errno = 8393
	ERROR_DS_EXISTS_IN_SUB_CLS                                                syscall.Errno = 8394
	ERROR_DS_EXISTS_IN_POSS_SUP                                               syscall.Errno = 8395
	ERROR_DS_RECALCSCHEMA_FAILED                                              syscall.Errno = 8396
	ERROR_DS_TREE_DELETE_NOT_FINISHED                                         syscall.Errno = 8397
	ERROR_DS_CANT_DELETE                                                      syscall.Errno = 8398
	ERROR_DS_ATT_SCHEMA_REQ_ID                                                syscall.Errno = 8399
	ERROR_DS_BAD_ATT_SCHEMA_SYNTAX                                            syscall.Errno = 8400
	ERROR_DS_CANT_CACHE_ATT                                                   syscall.Errno = 8401
	ERROR_DS_CANT_CACHE_CLASS                                                 syscall.Errno = 8402
	ERROR_DS_CANT_REMOVE_ATT_CACHE                                            syscall.Errno = 8403
	ERROR_DS_CANT_REMOVE_CLASS_CACHE                                          syscall.Errno = 8404
	ERROR_DS_CANT_RETRIEVE_DN                                                 syscall.Errno = 8405
	ERROR_DS_MISSING_SUPREF                                                   syscall.Errno = 8406
	ERROR_DS_CANT_RETRIEVE_INSTANCE                                           syscall.Errno = 8407
	ERROR_DS_CODE_INCONSISTENCY                                               syscall.Errno = 8408
	ERROR_DS_DATABASE_ERROR                                                   syscall.Errno = 8409
	ERROR_DS_GOVERNSID_MISSING                                                syscall.Errno = 8410
	ERROR_DS_MISSING_EXPECTED_ATT                                             syscall.Errno = 8411
	ERROR_DS_NCNAME_MISSING_CR_REF                                            syscall.Errno = 8412
	ERROR_DS_SECURITY_CHECKING_ERROR                                          syscall.Errno = 8413
	ERROR_DS_SCHEMA_NOT_LOADED                                                syscall.Errno = 8414
	ERROR_DS_SCHEMA_ALLOC_FAILED                                              syscall.Errno = 8415
	ERROR_DS_ATT_SCHEMA_REQ_SYNTAX                                            syscall.Errno = 8416
	ERROR_DS_GCVERIFY_ERROR                                                   syscall.Errno = 8417
	ERROR_DS_DRA_SCHEMA_MISMATCH                                              syscall.Errno = 8418
	ERROR_DS_CANT_FIND_DSA_OBJ                                                syscall.Errno = 8419
	ERROR_DS_CANT_FIND_EXPECTED_NC                                            syscall.Errno = 8420
	ERROR_DS_CANT_FIND_NC_IN_CACHE                                            syscall.Errno = 8421
	ERROR_DS_CANT_RETRIEVE_CHILD                                              syscall.Errno = 8422
	ERROR_DS_SECURITY_ILLEGAL_MODIFY                                          syscall.Errno = 8423
	ERROR_DS_CANT_REPLACE_HIDDEN_REC                                          syscall.Errno = 8424
	ERROR_DS_BAD_HIERARCHY_FILE                                               syscall.Errno = 8425
	ERROR_DS_BUILD_HIERARCHY_TABLE_FAILED                                     syscall.Errno = 8426
	ERROR_DS_CONFIG_PARAM_MISSING                                             syscall.Errno = 8427
	ERROR_DS_COUNTING_AB_INDICES_FAILED                                       syscall.Errno = 8428
	ERROR_DS_HIERARCHY_TABLE_MALLOC_FAILED                                    syscall.Errno = 8429
	ERROR_DS_INTERNAL_FAILURE                                                 syscall.Errno = 8430
	ERROR_DS_UNKNOWN_ERROR                                                    syscall.Errno = 8431
	ERROR_DS_ROOT_REQUIRES_CLASS_TOP                                          syscall.Errno = 8432
	ERROR_DS_REFUSING_FSMO_ROLES                                              syscall.Errno = 8433
	ERROR_DS_MISSING_FSMO_SETTINGS                                            syscall.Errno = 8434
	ERROR_DS_UNABLE_TO_SURRENDER_ROLES                                        syscall.Errno = 8435
	ERROR_DS_DRA_GENERIC                                                      syscall.Errno = 8436
	ERROR_DS_DRA_INVALID_PARAMETER                                            syscall.Errno = 8437
	ERROR_DS_DRA_BUSY                                                         syscall.Errno = 8438
	ERROR_DS_DRA_BAD_DN                                                       syscall.Errno = 8439
	ERROR_DS_DRA_BAD_NC                                                       syscall.Errno = 8440
	ERROR_DS_DRA_DN_EXISTS                                                    syscall.Errno = 8441
	ERROR_DS_DRA_INTERNAL_ERROR                                               syscall.Errno = 8442
	ERROR_DS_DRA_INCONSISTENT_DIT                                             syscall.Errno = 8443
	ERROR_DS_DRA_CONNECTION_FAILED                                            syscall.Errno = 8444
	ERROR_DS_DRA_BAD_INSTANCE_TYPE                                            syscall.Errno = 8445
	ERROR_DS_DRA_OUT_OF_MEM                                                   syscall.Errno = 8446
	ERROR_DS_DRA_MAIL_PROBLEM                                                 syscall.Errno = 8447
	ERROR_DS_DRA_REF_ALREADY_EXISTS                                           syscall.Errno = 8448
	ERROR_DS_DRA_REF_NOT_FOUND                                                syscall.Errno = 8449
	ERROR_DS_DRA_OBJ_IS_REP_SOURCE                                            syscall.Errno = 8450
	ERROR_DS_DRA_DB_ERROR                                                     syscall.Errno = 8451
	ERROR_DS_DRA_NO_REPLICA                                                   syscall.Errno = 8452
	ERROR_DS_DRA_ACCESS_DENIED                                                syscall.Errno = 8453
	ERROR_DS_DRA_NOT_SUPPORTED                                                syscall.Errno = 8454
	ERROR_DS_DRA_RPC_CANCELLED                                                syscall.Errno = 8455
	ERROR_DS_DRA_SOURCE_DISABLED                                              syscall.Errno = 8456
	ERROR_DS_DRA_SINK_DISABLED                                                syscall.Errno = 8457
	ERROR_DS_DRA_NAME_COLLISION                                               syscall.Errno = 8458
	ERROR_DS_DRA_SOURCE_REINSTALLED                                           syscall.Errno = 8459
	ERROR_DS_DRA_MISSING_PARENT                                               syscall.Errno = 8460
	ERROR_DS_DRA_PREEMPTED                                                    syscall.Errno = 8461
	ERROR_DS_DRA_ABANDON_SYNC                                                 syscall.Errno = 8462
	ERROR_DS_DRA_SHUTDOWN                                                     syscall.Errno = 8463
	ERROR_DS_DRA_INCOMPATIBLE_PARTIAL_SET                                     syscall.Errno = 8464
	ERROR_DS_DRA_SOURCE_IS_PARTIAL_REPLICA                                    syscall.Errno = 8465
	ERROR_DS_DRA_EXTN_CONNECTION_FAILED                                       syscall.Errno = 8466
	ERROR_DS_INSTALL_SCHEMA_MISMATCH                                          syscall.Errno = 8467
	ERROR_DS_DUP_LINK_ID                                                      syscall.Errno = 8468
	ERROR_DS_NAME_ERROR_RESOLVING                                             syscall.Errno = 8469
	ERROR_DS_NAME_ERROR_NOT_FOUND                                             syscall.Errno = 8470
	ERROR_DS_NAME_ERROR_NOT_UNIQUE                                            syscall.Errno = 8471
	ERROR_DS_NAME_ERROR_NO_MAPPING                                            syscall.Errno = 8472
	ERROR_DS_NAME_ERROR_DOMAIN_ONLY                                           syscall.Errno = 8473
	ERROR_DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING                                syscall.Errno = 8474
	ERROR_DS_CONSTRUCTED_ATT_MOD                                              syscall.Errno = 8475
	ERROR_DS_WRONG_OM_OBJ_CLASS                                               syscall.Errno = 8476
	ERROR_DS_DRA_REPL_PENDING                                                 syscall.Errno = 8477
	ERROR_DS_DS_REQUIRED                                                      syscall.Errno = 8478
	ERROR_DS_INVALID_LDAP_DISPLAY_NAME                                        syscall.Errno = 8479
	ERROR_DS_NON_BASE_SEARCH                                                  syscall.Errno = 8480
	ERROR_DS_CANT_RETRIEVE_ATTS                                               syscall.Errno = 8481
	ERROR_DS_BACKLINK_WITHOUT_LINK                                            syscall.Errno = 8482
	ERROR_DS_EPOCH_MISMATCH                                                   syscall.Errno = 8483
	ERROR_DS_SRC_NAME_MISMATCH                                                syscall.Errno = 8484
	ERROR_DS_SRC_AND_DST_NC_IDENTICAL                                         syscall.Errno = 8485
	ERROR_DS_DST_NC_MISMATCH                                                  syscall.Errno = 8486
	ERROR_DS_NOT_AUTHORITIVE_FOR_DST_NC                                       syscall.Errno = 8487
	ERROR_DS_SRC_GUID_MISMATCH                                                syscall.Errno = 8488
	ERROR_DS_CANT_MOVE_DELETED_OBJECT                                         syscall.Errno = 8489
	ERROR_DS_PDC_OPERATION_IN_PROGRESS                                        syscall.Errno = 8490
	ERROR_DS_CROSS_DOMAIN_CLEANUP_REQD                                        syscall.Errno = 8491
	ERROR_DS_ILLEGAL_XDOM_MOVE_OPERATION                                      syscall.Errno = 8492
	ERROR_DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS                                  syscall.Errno = 8493
	ERROR_DS_NC_MUST_HAVE_NC_PARENT                                           syscall.Errno = 8494
	ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE                                        syscall.Errno = 8495
	ERROR_DS_DST_DOMAIN_NOT_NATIVE                                            syscall.Errno = 8496
	ERROR_DS_MISSING_INFRASTRUCTURE_CONTAINER                                 syscall.Errno = 8497
	ERROR_DS_CANT_MOVE_ACCOUNT_GROUP                                          syscall.Errno = 8498
	ERROR_DS_CANT_MOVE_RESOURCE_GROUP                                         syscall.Errno = 8499
	ERROR_DS_INVALID_SEARCH_FLAG                                              syscall.Errno = 8500
	ERROR_DS_NO_TREE_DELETE_ABOVE_NC                                          syscall.Errno = 8501
	ERROR_DS_COULDNT_LOCK_TREE_FOR_DELETE                                     syscall.Errno = 8502
	ERROR_DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE                         syscall.Errno = 8503
	ERROR_DS_SAM_INIT_FAILURE                                                 syscall.Errno = 8504
	ERROR_DS_SENSITIVE_GROUP_VIOLATION                                        syscall.Errno = 8505
	ERROR_DS_CANT_MOD_PRIMARYGROUPID                                          syscall.Errno = 8506
	ERROR_DS_ILLEGAL_BASE_SCHEMA_MOD                                          syscall.Errno = 8507
	ERROR_DS_NONSAFE_SCHEMA_CHANGE                                            syscall.Errno = 8508
	ERROR_DS_SCHEMA_UPDATE_DISALLOWED                                         syscall.Errno = 8509
	ERROR_DS_CANT_CREATE_UNDER_SCHEMA                                         syscall.Errno = 8510
	ERROR_DS_INSTALL_NO_SRC_SCH_VERSION                                       syscall.Errno = 8511
	ERROR_DS_INSTALL_NO_SCH_VERSION_IN_INIFILE                                syscall.Errno = 8512
	ERROR_DS_INVALID_GROUP_TYPE                                               syscall.Errno = 8513
	ERROR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN                               syscall.Errno = 8514
	ERROR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN                                syscall.Errno = 8515
	ERROR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER                                    syscall.Errno = 8516
	ERROR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER                                syscall.Errno = 8517
	ERROR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER                                 syscall.Errno = 8518
	ERROR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER                              syscall.Errno = 8519
	ERROR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER                         syscall.Errno = 8520
	ERROR_DS_HAVE_PRIMARY_MEMBERS                                             syscall.Errno = 8521
	ERROR_DS_STRING_SD_CONVERSION_FAILED                                      syscall.Errno = 8522
	ERROR_DS_NAMING_MASTER_GC                                                 syscall.Errno = 8523
	ERROR_DS_DNS_LOOKUP_FAILURE                                               syscall.Errno = 8524
	ERROR_DS_COULDNT_UPDATE_SPNS                                              syscall.Errno = 8525
	ERROR_DS_CANT_RETRIEVE_SD                                                 syscall.Errno = 8526
	ERROR_DS_KEY_NOT_UNIQUE                                                   syscall.Errno = 8527
	ERROR_DS_WRONG_LINKED_ATT_SYNTAX                                          syscall.Errno = 8528
	ERROR_DS_SAM_NEED_BOOTKEY_PASSWORD                                        syscall.Errno = 8529
	ERROR_DS_SAM_NEED_BOOTKEY_FLOPPY                                          syscall.Errno = 8530
	ERROR_DS_CANT_START                                                       syscall.Errno = 8531
	ERROR_DS_INIT_FAILURE                                                     syscall.Errno = 8532
	ERROR_DS_NO_PKT_PRIVACY_ON_CONNECTION                                     syscall.Errno = 8533
	ERROR_DS_SOURCE_DOMAIN_IN_FOREST                                          syscall.Errno = 8534
	ERROR_DS_DESTINATION_DOMAIN_NOT_IN_FOREST                                 syscall.Errno = 8535
	ERROR_DS_DESTINATION_AUDITING_NOT_ENABLED                                 syscall.Errno = 8536
	ERROR_DS_CANT_FIND_DC_FOR_SRC_DOMAIN                                      syscall.Errno = 8537
	ERROR_DS_SRC_OBJ_NOT_GROUP_OR_USER                                        syscall.Errno = 8538
	ERROR_DS_SRC_SID_EXISTS_IN_FOREST                                         syscall.Errno = 8539
	ERROR_DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH                                syscall.Errno = 8540
	ERROR_SAM_INIT_FAILURE                                                    syscall.Errno = 8541
	ERROR_DS_DRA_SCHEMA_INFO_SHIP                                             syscall.Errno = 8542
	ERROR_DS_DRA_SCHEMA_CONFLICT                                              syscall.Errno = 8543
	ERROR_DS_DRA_EARLIER_SCHEMA_CONFLICT                                      syscall.Errno = 8544
	ERROR_DS_DRA_OBJ_NC_MISMATCH                                              syscall.Errno = 8545
	ERROR_DS_NC_STILL_HAS_DSAS                                                syscall.Errno = 8546
	ERROR_DS_GC_REQUIRED                                                      syscall.Errno = 8547
	ERROR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY                                       syscall.Errno = 8548
	ERROR_DS_NO_FPO_IN_UNIVERSAL_GROUPS                                       syscall.Errno = 8549
	ERROR_DS_CANT_ADD_TO_GC                                                   syscall.Errno = 8550
	ERROR_DS_NO_CHECKPOINT_WITH_PDC                                           syscall.Errno = 8551
	ERROR_DS_SOURCE_AUDITING_NOT_ENABLED                                      syscall.Errno = 8552
	ERROR_DS_CANT_CREATE_IN_NONDOMAIN_NC                                      syscall.Errno = 8553
	ERROR_DS_INVALID_NAME_FOR_SPN                                             syscall.Errno = 8554
	ERROR_DS_FILTER_USES_CONTRUCTED_ATTRS                                     syscall.Errno = 8555
	ERROR_DS_UNICODEPWD_NOT_IN_QUOTES                                         syscall.Errno = 8556
	ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED                                   syscall.Errno = 8557
	ERROR_DS_MUST_BE_RUN_ON_DST_DC                                            syscall.Errno = 8558
	ERROR_DS_SRC_DC_MUST_BE_SP4_OR_GREATER                                    syscall.Errno = 8559
	ERROR_DS_CANT_TREE_DELETE_CRITICAL_OBJ                                    syscall.Errno = 8560
	ERROR_DS_INIT_FAILURE_CONSOLE                                             syscall.Errno = 8561
	ERROR_DS_SAM_INIT_FAILURE_CONSOLE                                         syscall.Errno = 8562
	ERROR_DS_FOREST_VERSION_TOO_HIGH                                          syscall.Errno = 8563
	ERROR_DS_DOMAIN_VERSION_TOO_HIGH                                          syscall.Errno = 8564
	ERROR_DS_FOREST_VERSION_TOO_LOW                                           syscall.Errno = 8565
	ERROR_DS_DOMAIN_VERSION_TOO_LOW                                           syscall.Errno = 8566
	ERROR_DS_INCOMPATIBLE_VERSION                                             syscall.Errno = 8567
	ERROR_DS_LOW_DSA_VERSION                                                  syscall.Errno = 8568
	ERROR_DS_NO_BEHAVIOR_VERSION_IN_MIXEDDOMAIN                               syscall.Errno = 8569
	ERROR_DS_NOT_SUPPORTED_SORT_ORDER                                         syscall.Errno = 8570
	ERROR_DS_NAME_NOT_UNIQUE                                                  syscall.Errno = 8571
	ERROR_DS_MACHINE_ACCOUNT_CREATED_PRENT4                                   syscall.Errno = 8572
	ERROR_DS_OUT_OF_VERSION_STORE                                             syscall.Errno = 8573
	ERROR_DS_INCOMPATIBLE_CONTROLS_USED                                       syscall.Errno = 8574
	ERROR_DS_NO_REF_DOMAIN                                                    syscall.Errno = 8575
	ERROR_DS_RESERVED_LINK_ID                                                 syscall.Errno = 8576
	ERROR_DS_LINK_ID_NOT_AVAILABLE                                            syscall.Errno = 8577
	ERROR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER                                    syscall.Errno = 8578
	ERROR_DS_MODIFYDN_DISALLOWED_BY_INSTANCE_TYPE                             syscall.Errno = 8579
	ERROR_DS_NO_OBJECT_MOVE_IN_SCHEMA_NC                                      syscall.Errno = 8580
	ERROR_DS_MODIFYDN_DISALLOWED_BY_FLAG                                      syscall.Errno = 8581
	ERROR_DS_MODIFYDN_WRONG_GRANDPARENT                                       syscall.Errno = 8582
	ERROR_DS_NAME_ERROR_TRUST_REFERRAL                                        syscall.Errno = 8583
	ERROR_NOT_SUPPORTED_ON_STANDARD_SERVER                                    syscall.Errno = 8584
	ERROR_DS_CANT_ACCESS_REMOTE_PART_OF_AD                                    syscall.Errno = 8585
	ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE_V2                                     syscall.Errno = 8586
	ERROR_DS_THREAD_LIMIT_EXCEEDED                                            syscall.Errno = 8587
	ERROR_DS_NOT_CLOSEST                                                      syscall.Errno = 8588
	ERROR_DS_CANT_DERIVE_SPN_WITHOUT_SERVER_REF                               syscall.Errno = 8589
	ERROR_DS_SINGLE_USER_MODE_FAILED                                          syscall.Errno = 8590
	ERROR_DS_NTDSCRIPT_SYNTAX_ERROR                                           syscall.Errno = 8591
	ERROR_DS_NTDSCRIPT_PROCESS_ERROR                                          syscall.Errno = 8592
	ERROR_DS_DIFFERENT_REPL_EPOCHS                                            syscall.Errno = 8593
	ERROR_DS_DRS_EXTENSIONS_CHANGED                                           syscall.Errno = 8594
	ERROR_DS_REPLICA_SET_CHANGE_NOT_ALLOWED_ON_DISABLED_CR                    syscall.Errno = 8595
	ERROR_DS_NO_MSDS_INTID                                                    syscall.Errno = 8596
	ERROR_DS_DUP_MSDS_INTID                                                   syscall.Errno = 8597
	ERROR_DS_EXISTS_IN_RDNATTID                                               syscall.Errno = 8598
	ERROR_DS_AUTHORIZATION_FAILED                                             syscall.Errno = 8599
	ERROR_DS_INVALID_SCRIPT                                                   syscall.Errno = 8600
	ERROR_DS_REMOTE_CROSSREF_OP_FAILED                                        syscall.Errno = 8601
	ERROR_DS_CROSS_REF_BUSY                                                   syscall.Errno = 8602
	ERROR_DS_CANT_DERIVE_SPN_FOR_DELETED_DOMAIN                               syscall.Errno = 8603
	ERROR_DS_CANT_DEMOTE_WITH_WRITEABLE_NC                                    syscall.Errno = 8604
	ERROR_DS_DUPLICATE_ID_FOUND                                               syscall.Errno = 8605
	ERROR_DS_INSUFFICIENT_ATTR_TO_CREATE_OBJECT                               syscall.Errno = 8606
	ERROR_DS_GROUP_CONVERSION_ERROR                                           syscall.Errno = 8607
	ERROR_DS_CANT_MOVE_APP_BASIC_GROUP                                        syscall.Errno = 8608
	ERROR_DS_CANT_MOVE_APP_QUERY_GROUP                                        syscall.Errno = 8609
	ERROR_DS_ROLE_NOT_VERIFIED                                                syscall.Errno = 8610
	ERROR_DS_WKO_CONTAINER_CANNOT_BE_SPECIAL                                  syscall.Errno = 8611
	ERROR_DS_DOMAIN_RENAME_IN_PROGRESS                                        syscall.Errno = 8612
	ERROR_DS_EXISTING_AD_CHILD_NC                                             syscall.Errno = 8613
	ERROR_DS_REPL_LIFETIME_EXCEEDED                                           syscall.Errno = 8614
	ERROR_DS_DISALLOWED_IN_SYSTEM_CONTAINER                                   syscall.Errno = 8615
	ERROR_DS_LDAP_SEND_QUEUE_FULL                                             syscall.Errno = 8616
	ERROR_DS_DRA_OUT_SCHEDULE_WINDOW                                          syscall.Errno = 8617
	ERROR_DS_POLICY_NOT_KNOWN                                                 syscall.Errno = 8618
	ERROR_NO_SITE_SETTINGS_OBJECT                                             syscall.Errno = 8619
	ERROR_NO_SECRETS                                                          syscall.Errno = 8620
	ERROR_NO_WRITABLE_DC_FOUND                                                syscall.Errno = 8621
	ERROR_DS_NO_SERVER_OBJECT                                                 syscall.Errno = 8622
	ERROR_DS_NO_NTDSA_OBJECT                                                  syscall.Errno = 8623
	ERROR_DS_NON_ASQ_SEARCH                                                   syscall.Errno = 8624
	ERROR_DS_AUDIT_FAILURE                                                    syscall.Errno = 8625
	ERROR_DS_INVALID_SEARCH_FLAG_SUBTREE                                      syscall.Errno = 8626
	ERROR_DS_INVALID_SEARCH_FLAG_TUPLE                                        syscall.Errno = 8627
	ERROR_DS_HIERARCHY_TABLE_TOO_DEEP                                         syscall.Errno = 8628
	ERROR_DS_DRA_CORRUPT_UTD_VECTOR                                           syscall.Errno = 8629
	ERROR_DS_DRA_SECRETS_DENIED                                               syscall.Errno = 8630
	ERROR_DS_RESERVED_MAPI_ID                                                 syscall.Errno = 8631
	ERROR_DS_MAPI_ID_NOT_AVAILABLE                                            syscall.Errno = 8632
	ERROR_DS_DRA_MISSING_KRBTGT_SECRET                                        syscall.Errno = 8633
	ERROR_DS_DOMAIN_NAME_EXISTS_IN_FOREST                                     syscall.Errno = 8634
	ERROR_DS_FLAT_NAME_EXISTS_IN_FOREST                                       syscall.Errno = 8635
	ERROR_INVALID_USER_PRINCIPAL_NAME                                         syscall.Errno = 8636
	ERROR_DS_OID_MAPPED_GROUP_CANT_HAVE_MEMBERS                               syscall.Errno = 8637
	ERROR_DS_OID_NOT_FOUND                                                    syscall.Errno = 8638
	ERROR_DS_DRA_RECYCLED_TARGET                                              syscall.Errno = 8639
	ERROR_DS_DISALLOWED_NC_REDIRECT                                           syscall.Errno = 8640
	ERROR_DS_HIGH_ADLDS_FFL                                                   syscall.Errno = 8641
	ERROR_DS_HIGH_DSA_VERSION                                                 syscall.Errno = 8642
	ERROR_DS_LOW_ADLDS_FFL                                                    syscall.Errno = 8643
	ERROR_DOMAIN_SID_SAME_AS_LOCAL_WORKSTATION                                syscall.Errno = 8644
	ERROR_DS_UNDELETE_SAM_VALIDATION_FAILED                                   syscall.Errno = 8645
	ERROR_INCORRECT_ACCOUNT_TYPE                                              syscall.Errno = 8646
	ERROR_DS_SPN_VALUE_NOT_UNIQUE_IN_FOREST                                   syscall.Errno = 8647
	ERROR_DS_UPN_VALUE_NOT_UNIQUE_IN_FOREST                                   syscall.Errno = 8648
	ERROR_DS_MISSING_FOREST_TRUST                                             syscall.Errno = 8649
	ERROR_DS_VALUE_KEY_NOT_UNIQUE                                             syscall.Errno = 8650
	DNS_ERROR_RESPONSE_CODES_BASE                                             syscall.Errno = 9000
	DNS_ERROR_RCODE_NO_ERROR                                                                = ERROR_SUCCESS
	DNS_ERROR_MASK                                                            syscall.Errno = 0x00002328
	DNS_ERROR_RCODE_FORMAT_ERROR                                              syscall.Errno = 9001
	DNS_ERROR_RCODE_SERVER_FAILURE                                            syscall.Errno = 9002
	DNS_ERROR_RCODE_NAME_ERROR                                                syscall.Errno = 9003
	DNS_ERROR_RCODE_NOT_IMPLEMENTED                                           syscall.Errno = 9004
	DNS_ERROR_RCODE_REFUSED                                                   syscall.Errno = 9005
	DNS_ERROR_RCODE_YXDOMAIN                                                  syscall.Errno = 9006
	DNS_ERROR_RCODE_YXRRSET                                                   syscall.Errno = 9007
	DNS_ERROR_RCODE_NXRRSET                                                   syscall.Errno = 9008
	DNS_ERROR_RCODE_NOTAUTH                                                   syscall.Errno = 9009
	DNS_ERROR_RCODE_NOTZONE                                                   syscall.Errno = 9010
	DNS_ERROR_RCODE_BADSIG                                                    syscall.Errno = 9016
	DNS_ERROR_RCODE_BADKEY                                                    syscall.Errno = 9017
	DNS_ERROR_RCODE_BADTIME                                                   syscall.Errno = 9018
	DNS_ERROR_RCODE_LAST                                                                    = DNS_ERROR_RCODE_BADTIME
	DNS_ERROR_DNSSEC_BASE                                                     syscall.Errno = 9100
	DNS_ERROR_KEYMASTER_REQUIRED                                              syscall.Errno = 9101
	DNS_ERROR_NOT_ALLOWED_ON_SIGNED_ZONE                                      syscall.Errno = 9102
	DNS_ERROR_NSEC3_INCOMPATIBLE_WITH_RSA_SHA1                                syscall.Errno = 9103
	DNS_ERROR_NOT_ENOUGH_SIGNING_KEY_DESCRIPTORS                              syscall.Errno = 9104
	DNS_ERROR_UNSUPPORTED_ALGORITHM                                           syscall.Errno = 9105
	DNS_ERROR_INVALID_KEY_SIZE                                                syscall.Errno = 9106
	DNS_ERROR_SIGNING_KEY_NOT_ACCESSIBLE                                      syscall.Errno = 9107
	DNS_ERROR_KSP_DOES_NOT_SUPPORT_PROTECTION                                 syscall.Errno = 9108
	DNS_ERROR_UNEXPECTED_DATA_PROTECTION_ERROR                                syscall.Errno = 9109
	DNS_ERROR_UNEXPECTED_CNG_ERROR                                            syscall.Errno = 9110
	DNS_ERROR_UNKNOWN_SIGNING_PARAMETER_VERSION                               syscall.Errno = 9111
	DNS_ERROR_KSP_NOT_ACCESSIBLE                                              syscall.Errno = 9112
	DNS_ERROR_TOO_MANY_SKDS                                                   syscall.Errno = 9113
	DNS_ERROR_INVALID_ROLLOVER_PERIOD                                         syscall.Errno = 9114
	DNS_ERROR_INVALID_INITIAL_ROLLOVER_OFFSET                                 syscall.Errno = 9115
	DNS_ERROR_ROLLOVER_IN_PROGRESS                                            syscall.Errno = 9116
	DNS_ERROR_STANDBY_KEY_NOT_PRESENT                                         syscall.Errno = 9117
	DNS_ERROR_NOT_ALLOWED_ON_ZSK                                              syscall.Errno = 9118
	DNS_ERROR_NOT_ALLOWED_ON_ACTIVE_SKD                                       syscall.Errno = 9119
	DNS_ERROR_ROLLOVER_ALREADY_QUEUED                                         syscall.Errno = 9120
	DNS_ERROR_NOT_ALLOWED_ON_UNSIGNED_ZONE                                    syscall.Errno = 9121
	DNS_ERROR_BAD_KEYMASTER                                                   syscall.Errno = 9122
	DNS_ERROR_INVALID_SIGNATURE_VALIDITY_PERIOD                               syscall.Errno = 9123
	DNS_ERROR_INVALID_NSEC3_ITERATION_COUNT                                   syscall.Errno = 9124
	DNS_ERROR_DNSSEC_IS_DISABLED                                              syscall.Errno = 9125
	DNS_ERROR_INVALID_XML                                                     syscall.Errno = 9126
	DNS_ERROR_NO_VALID_TRUST_ANCHORS                                          syscall.Errno = 9127
	DNS_ERROR_ROLLOVER_NOT_POKEABLE                                           syscall.Errno = 9128
	DNS_ERROR_NSEC3_NAME_COLLISION                                            syscall.Errno = 9129
	DNS_ERROR_NSEC_INCOMPATIBLE_WITH_NSEC3_RSA_SHA1                           syscall.Errno = 9130
	DNS_ERROR_PACKET_FMT_BASE                                                 syscall.Errno = 9500
	DNS_INFO_NO_RECORDS                                                       syscall.Errno = 9501
	DNS_ERROR_BAD_PACKET                                                      syscall.Errno = 9502
	DNS_ERROR_NO_PACKET                                                       syscall.Errno = 9503
	DNS_ERROR_RCODE                                                           syscall.Errno = 9504
	DNS_ERROR_UNSECURE_PACKET                                                 syscall.Errno = 9505
	DNS_STATUS_PACKET_UNSECURE                                                              = DNS_ERROR_UNSECURE_PACKET
	DNS_REQUEST_PENDING                                                       syscall.Errno = 9506
	DNS_ERROR_NO_MEMORY                                                                     = ERROR_OUTOFMEMORY
	DNS_ERROR_INVALID_NAME                                                                  = ERROR_INVALID_NAME
	DNS_ERROR_INVALID_DATA                                                                  = ERROR_INVALID_DATA
	DNS_ERROR_GENERAL_API_BASE                                                syscall.Errno = 9550
	DNS_ERROR_INVALID_TYPE                                                    syscall.Errno = 9551
	DNS_ERROR_INVALID_IP_ADDRESS                                              syscall.Errno = 9552
	DNS_ERROR_INVALID_PROPERTY                                                syscall.Errno = 9553
	DNS_ERROR_TRY_AGAIN_LATER                                                 syscall.Errno = 9554
	DNS_ERROR_NOT_UNIQUE                                                      syscall.Errno = 9555
	DNS_ERROR_NON_RFC_NAME                                                    syscall.Errno = 9556
	DNS_STATUS_FQDN                                                           syscall.Errno = 9557
	DNS_STATUS_DOTTED_NAME                                                    syscall.Errno = 9558
	DNS_STATUS_SINGLE_PART_NAME                                               syscall.Errno = 9559
	DNS_ERROR_INVALID_NAME_CHAR                                               syscall.Errno = 9560
	DNS_ERROR_NUMERIC_NAME                                                    syscall.Errno = 9561
	DNS_ERROR_NOT_ALLOWED_ON_ROOT_SERVER                                      syscall.Errno = 9562
	DNS_ERROR_NOT_ALLOWED_UNDER_DELEGATION                                    syscall.Errno = 9563
	DNS_ERROR_CANNOT_FIND_ROOT_HINTS                                          syscall.Errno = 9564
	DNS_ERROR_INCONSISTENT_ROOT_HINTS                                         syscall.Errno = 9565
	DNS_ERROR_DWORD_VALUE_TOO_SMALL                                           syscall.Errno = 9566
	DNS_ERROR_DWORD_VALUE_TOO_LARGE                                           syscall.Errno = 9567
	DNS_ERROR_BACKGROUND_LOADING                                              syscall.Errno = 9568
	DNS_ERROR_NOT_ALLOWED_ON_RODC                                             syscall.Errno = 9569
	DNS_ERROR_NOT_ALLOWED_UNDER_DNAME                                         syscall.Errno = 9570
	DNS_ERROR_DELEGATION_REQUIRED                                             syscall.Errno = 9571
	DNS_ERROR_INVALID_POLICY_TABLE                                            syscall.Errno = 9572
	DNS_ERROR_ADDRESS_REQUIRED                                                syscall.Errno = 9573
	DNS_ERROR_ZONE_BASE                                                       syscall.Errno = 9600
	DNS_ERROR_ZONE_DOES_NOT_EXIST                                             syscall.Errno = 9601
	DNS_ERROR_NO_ZONE_INFO                                                    syscall.Errno = 9602
	DNS_ERROR_INVALID_ZONE_OPERATION                                          syscall.Errno = 9603
	DNS_ERROR_ZONE_CONFIGURATION_ERROR                                        syscall.Errno = 9604
	DNS_ERROR_ZONE_HAS_NO_SOA_RECORD                                          syscall.Errno = 9605
	DNS_ERROR_ZONE_HAS_NO_NS_RECORDS                                          syscall.Errno = 9606
	DNS_ERROR_ZONE_LOCKED                                                     syscall.Errno = 9607
	DNS_ERROR_ZONE_CREATION_FAILED                                            syscall.Errno = 9608
	DNS_ERROR_ZONE_ALREADY_EXISTS                                             syscall.Errno = 9609
	DNS_ERROR_AUTOZONE_ALREADY_EXISTS                                         syscall.Errno = 9610
	DNS_ERROR_INVALID_ZONE_TYPE                                               syscall.Errno = 9611
	DNS_ERROR_SECONDARY_REQUIRES_MASTER_IP                                    syscall.Errno = 9612
	DNS_ERROR_ZONE_NOT_SECONDARY                                              syscall.Errno = 9613
	DNS_ERROR_NEED_SECONDARY_ADDRESSES                                        syscall.Errno = 9614
	DNS_ERROR_WINS_INIT_FAILED                                                syscall.Errno = 9615
	DNS_ERROR_NEED_WINS_SERVERS                                               syscall.Errno = 9616
	DNS_ERROR_NBSTAT_INIT_FAILED                                              syscall.Errno = 9617
	DNS_ERROR_SOA_DELETE_INVALID                                              syscall.Errno = 9618
	DNS_ERROR_FORWARDER_ALREADY_EXISTS                                        syscall.Errno = 9619
	DNS_ERROR_ZONE_REQUIRES_MASTER_IP                                         syscall.Errno = 9620
	DNS_ERROR_ZONE_IS_SHUTDOWN                                                syscall.Errno = 9621
	DNS_ERROR_ZONE_LOCKED_FOR_SIGNING                                         syscall.Errno = 9622
	DNS_ERROR_DATAFILE_BASE                                                   syscall.Errno = 9650
	DNS_ERROR_PRIMARY_REQUIRES_DATAFILE                                       syscall.Errno = 9651
	DNS_ERROR_INVALID_DATAFILE_NAME                                           syscall.Errno = 9652
	DNS_ERROR_DATAFILE_OPEN_FAILURE                                           syscall.Errno = 9653
	DNS_ERROR_FILE_WRITEBACK_FAILED                                           syscall.Errno = 9654
	DNS_ERROR_DATAFILE_PARSING                                                syscall.Errno = 9655
	DNS_ERROR_DATABASE_BASE                                                   syscall.Errno = 9700
	DNS_ERROR_RECORD_DOES_NOT_EXIST                                           syscall.Errno = 9701
	DNS_ERROR_RECORD_FORMAT                                                   syscall.Errno = 9702
	DNS_ERROR_NODE_CREATION_FAILED                                            syscall.Errno = 9703
	DNS_ERROR_UNKNOWN_RECORD_TYPE                                             syscall.Errno = 9704
	DNS_ERROR_RECORD_TIMED_OUT                                                syscall.Errno = 9705
	DNS_ERROR_NAME_NOT_IN_ZONE                                                syscall.Errno = 9706
	DNS_ERROR_CNAME_LOOP                                                      syscall.Errno = 9707
	DNS_ERROR_NODE_IS_CNAME                                                   syscall.Errno = 9708
	DNS_ERROR_CNAME_COLLISION                                                 syscall.Errno = 9709
	DNS_ERROR_RECORD_ONLY_AT_ZONE_ROOT                                        syscall.Errno = 9710
	DNS_ERROR_RECORD_ALREADY_EXISTS                                           syscall.Errno = 9711
	DNS_ERROR_SECONDARY_DATA                                                  syscall.Errno = 9712
	DNS_ERROR_NO_CREATE_CACHE_DATA                                            syscall.Errno = 9713
	DNS_ERROR_NAME_DOES_NOT_EXIST                                             syscall.Errno = 9714
	DNS_WARNING_PTR_CREATE_FAILED                                             syscall.Errno = 9715
	DNS_WARNING_DOMAIN_UNDELETED                                              syscall.Errno = 9716
	DNS_ERROR_DS_UNAVAILABLE                                                  syscall.Errno = 9717
	DNS_ERROR_DS_ZONE_ALREADY_EXISTS                                          syscall.Errno = 9718
	DNS_ERROR_NO_BOOTFILE_IF_DS_ZONE                                          syscall.Errno = 9719
	DNS_ERROR_NODE_IS_DNAME                                                   syscall.Errno = 9720
	DNS_ERROR_DNAME_COLLISION                                                 syscall.Errno = 9721
	DNS_ERROR_ALIAS_LOOP                                                      syscall.Errno = 9722
	DNS_ERROR_OPERATION_BASE                                                  syscall.Errno = 9750
	DNS_INFO_AXFR_COMPLETE                                                    syscall.Errno = 9751
	DNS_ERROR_AXFR                                                            syscall.Errno = 9752
	DNS_INFO_ADDED_LOCAL_WINS                                                 syscall.Errno = 9753
	DNS_ERROR_SECURE_BASE                                                     syscall.Errno = 9800
	DNS_STATUS_CONTINUE_NEEDED                                                syscall.Errno = 9801
	DNS_ERROR_SETUP_BASE                                                      syscall.Errno = 9850
	DNS_ERROR_NO_TCPIP                                                        syscall.Errno = 9851
	DNS_ERROR_NO_DNS_SERVERS                                                  syscall.Errno = 9852
	DNS_ERROR_DP_BASE                                                         syscall.Errno = 9900
	DNS_ERROR_DP_DOES_NOT_EXIST                                               syscall.Errno = 9901
	DNS_ERROR_DP_ALREADY_EXISTS                                               syscall.Errno = 9902
	DNS_ERROR_DP_NOT_ENLISTED                                                 syscall.Errno = 9903
	DNS_ERROR_DP_ALREADY_ENLISTED                                             syscall.Errno = 9904
	DNS_ERROR_DP_NOT_AVAILABLE                                                syscall.Errno = 9905
	DNS_ERROR_DP_FSMO_ERROR                                                   syscall.Errno = 9906
	DNS_ERROR_RRL_NOT_ENABLED                                                 syscall.Errno = 9911
	DNS_ERROR_RRL_INVALID_WINDOW_SIZE                                         syscall.Errno = 9912
	DNS_ERROR_RRL_INVALID_IPV4_PREFIX                                         syscall.Errno = 9913
	DNS_ERROR_RRL_INVALID_IPV6_PREFIX                                         syscall.Errno = 9914
	DNS_ERROR_RRL_INVALID_TC_RATE                                             syscall.Errno = 9915
	DNS_ERROR_RRL_INVALID_LEAK_RATE                                           syscall.Errno = 9916
	DNS_ERROR_RRL_LEAK_RATE_LESSTHAN_TC_RATE                                  syscall.Errno = 9917
	DNS_ERROR_VIRTUALIZATION_INSTANCE_ALREADY_EXISTS                          syscall.Errno = 9921
	DNS_ERROR_VIRTUALIZATION_INSTANCE_DOES_NOT_EXIST                          syscall.Errno = 9922
	DNS_ERROR_VIRTUALIZATION_TREE_LOCKED                                      syscall.Errno = 9923
	DNS_ERROR_INVAILD_VIRTUALIZATION_INSTANCE_NAME                            syscall.Errno = 9924
	DNS_ERROR_DEFAULT_VIRTUALIZATION_INSTANCE                                 syscall.Errno = 9925
	DNS_ERROR_ZONESCOPE_ALREADY_EXISTS                                        syscall.Errno = 9951
	DNS_ERROR_ZONESCOPE_DOES_NOT_EXIST                                        syscall.Errno = 9952
	DNS_ERROR_DEFAULT_ZONESCOPE                                               syscall.Errno = 9953
	DNS_ERROR_INVALID_ZONESCOPE_NAME                                          syscall.Errno = 9954
	DNS_ERROR_NOT_ALLOWED_WITH_ZONESCOPES                                     syscall.Errno = 9955
	DNS_ERROR_LOAD_ZONESCOPE_FAILED                                           syscall.Errno = 9956
	DNS_ERROR_ZONESCOPE_FILE_WRITEBACK_FAILED                                 syscall.Errno = 9957
	DNS_ERROR_INVALID_SCOPE_NAME                                              syscall.Errno = 9958
	DNS_ERROR_SCOPE_DOES_NOT_EXIST                                            syscall.Errno = 9959
	DNS_ERROR_DEFAULT_SCOPE                                                   syscall.Errno = 9960
	DNS_ERROR_INVALID_SCOPE_OPERATION                                         syscall.Errno = 9961
	DNS_ERROR_SCOPE_LOCKED                                                    syscall.Errno = 9962
	DNS_ERROR_SCOPE_ALREADY_EXISTS                                            syscall.Errno = 9963
	DNS_ERROR_POLICY_ALREADY_EXISTS                                           syscall.Errno = 9971
	DNS_ERROR_POLICY_DOES_NOT_EXIST                                           syscall.Errno = 9972
	DNS_ERROR_POLICY_INVALID_CRITERIA                                         syscall.Errno = 9973
	DNS_ERROR_POLICY_INVALID_SETTINGS                                         syscall.Errno = 9974
	DNS_ERROR_CLIENT_SUBNET_IS_ACCESSED                                       syscall.Errno = 9975
	DNS_ERROR_CLIENT_SUBNET_DOES_NOT_EXIST                                    syscall.Errno = 9976
	DNS_ERROR_CLIENT_SUBNET_ALREADY_EXISTS                                    syscall.Errno = 9977
	DNS_ERROR_SUBNET_DOES_NOT_EXIST                                           syscall.Errno = 9978
	DNS_ERROR_SUBNET_ALREADY_EXISTS                                           syscall.Errno = 9979
	DNS_ERROR_POLICY_LOCKED                                                   syscall.Errno = 9980
	DNS_ERROR_POLICY_INVALID_WEIGHT                                           syscall.Errno = 9981
	DNS_ERROR_POLICY_INVALID_NAME                                             syscall.Errno = 9982
	DNS_ERROR_POLICY_MISSING_CRITERIA                                         syscall.Errno = 9983
	DNS_ERROR_INVALID_CLIENT_SUBNET_NAME                                      syscall.Errno = 9984
	DNS_ERROR_POLICY_PROCESSING_ORDER_INVALID                                 syscall.Errno = 9985
	DNS_ERROR_POLICY_SCOPE_MISSING                                            syscall.Errno = 9986
	DNS_ERROR_POLICY_SCOPE_NOT_ALLOWED                                        syscall.Errno = 9987
	DNS_ERROR_SERVERSCOPE_IS_REFERENCED                                       syscall.Errno = 9988
	DNS_ERROR_ZONESCOPE_IS_REFERENCED                                         syscall.Errno = 9989
	DNS_ERROR_POLICY_INVALID_CRITERIA_CLIENT_SUBNET                           syscall.Errno = 9990
	DNS_ERROR_POLICY_INVALID_CRITERIA_TRANSPORT_PROTOCOL                      syscall.Errno = 9991
	DNS_ERROR_POLICY_INVALID_CRITERIA_NETWORK_PROTOCOL                        syscall.Errno = 9992
	DNS_ERROR_POLICY_INVALID_CRITERIA_INTERFACE                               syscall.Errno = 9993
	DNS_ERROR_POLICY_INVALID_CRITERIA_FQDN                                    syscall.Errno = 9994
	DNS_ERROR_POLICY_INVALID_CRITERIA_QUERY_TYPE                              syscall.Errno = 9995
	DNS_ERROR_POLICY_INVALID_CRITERIA_TIME_OF_DAY                             syscall.Errno = 9996
	WSABASEERR                                                                syscall.Errno = 10000
	WSAEINTR                                                                  syscall.Errno = 10004
	WSAEBADF                                                                  syscall.Errno = 10009
	WSAEACCES                                                                 syscall.Errno = 10013
	WSAEFAULT                                                                 syscall.Errno = 10014
	WSAEINVAL                                                                 syscall.Errno = 10022
	WSAEMFILE                                                                 syscall.Errno = 10024
	WSAEWOULDBLOCK                                                            syscall.Errno = 10035
	WSAEINPROGRESS                                                            syscall.Errno = 10036
	WSAEALREADY                                                               syscall.Errno = 10037
	WSAENOTSOCK                                                               syscall.Errno = 10038
	WSAEDESTADDRREQ                                                           syscall.Errno = 10039
	WSAEMSGSIZE                                                               syscall.Errno = 10040
	WSAEPROTOTYPE                                                             syscall.Errno = 10041
	WSAENOPROTOOPT                                                            syscall.Errno = 10042
	WSAEPROTONOSUPPORT                                                        syscall.Errno = 10043
	WSAESOCKTNOSUPPORT                                                        syscall.Errno = 10044
	WSAEOPNOTSUPP                                                             syscall.Errno = 10045
	WSAEPFNOSUPPORT                                                           syscall.Errno = 10046
	WSAEAFNOSUPPORT                                                           syscall.Errno = 10047
	WSAEADDRINUSE                                                             syscall.Errno = 10048
	WSAEADDRNOTAVAIL                                                          syscall.Errno = 10049
	WSAENETDOWN                                                               syscall.Errno = 10050
	WSAENETUNREACH                                                            syscall.Errno = 10051
	WSAENETRESET                                                              syscall.Errno = 10052
	WSAECONNABORTED                                                           syscall.Errno = 10053
	WSAECONNRESET                                                             syscall.Errno = 10054
	WSAENOBUFS                                                                syscall.Errno = 10055
	WSAEISCONN                                                                syscall.Errno = 10056
	WSAENOTCONN                                                               syscall.Errno = 10057
	WSAESHUTDOWN                                                              syscall.Errno = 10058
	WSAETOOMANYREFS                                                           syscall.Errno = 10059
	WSAETIMEDOUT                                                              syscall.Errno = 10060
	WSAECONNREFUSED                                                           syscall.Errno = 10061
	WSAELOOP                                                                  syscall.Errno = 10062
	WSAENAMETOOLONG                                                           syscall.Errno = 10063
	WSAEHOSTDOWN                                                              syscall.Errno = 10064
	WSAEHOSTUNREACH                                                           syscall.Errno = 10065
	WSAENOTEMPTY                                                              syscall.Errno = 10066
	WSAEPROCLIM                                                               syscall.Errno = 10067
	WSAEUSERS                                                                 syscall.Errno = 10068
	WSAEDQUOT                                                                 syscall.Errno = 10069
	WSAESTALE                                                                 syscall.Errno = 10070
	WSAEREMOTE                                                                syscall.Errno = 10071
	WSASYSNOTREADY                                                            syscall.Errno = 10091
	WSAVERNOTSUPPORTED                                                        syscall.Errno = 10092
	WSANOTINITIALISED                                                         syscall.Errno = 10093
	WSAEDISCON                                                                syscall.Errno = 10101
	WSAENOMORE                                                                syscall.Errno = 10102
	WSAECANCELLED                                                             syscall.Errno = 10103
	WSAEINVALIDPROCTABLE                                                      syscall.Errno = 10104
	WSAEINVALIDPROVIDER                                                       syscall.Errno = 10105
	WSAEPROVIDERFAILEDINIT                                                    syscall.Errno = 10106
	WSASYSCALLFAILURE                                                         syscall.Errno = 10107
	WSASERVICE_NOT_FOUND                                                      syscall.Errno = 10108
	WSATYPE_NOT_FOUND                                                         syscall.Errno = 10109
	WSA_E_NO_MORE                                                             syscall.Errno = 10110
	WSA_E_CANCELLED                                                           syscall.Errno = 10111
	WSAEREFUSED                                                               syscall.Errno = 10112
	WSAHOST_NOT_FOUND                                                         syscall.Errno = 11001
	WSATRY_AGAIN                                                              syscall.Errno = 11002
	WSANO_RECOVERY                                                            syscall.Errno = 11003
	WSANO_DATA                                                                syscall.Errno = 11004
	WSA_QOS_RECEIVERS                                                         syscall.Errno = 11005
	WSA_QOS_SENDERS                                                           syscall.Errno = 11006
	WSA_QOS_NO_SENDERS                                                        syscall.Errno = 11007
	WSA_QOS_NO_RECEIVERS                                                      syscall.Errno = 11008
	WSA_QOS_REQUEST_CONFIRMED                                                 syscall.Errno = 11009
	WSA_QOS_ADMISSION_FAILURE                                                 syscall.Errno = 11010
	WSA_QOS_POLICY_FAILURE                                                    syscall.Errno = 11011
	WSA_QOS_BAD_STYLE                                                         syscall.Errno = 11012
	WSA_QOS_BAD_OBJECT                                                        syscall.Errno = 11013
	WSA_QOS_TRAFFIC_CTRL_ERROR                                                syscall.Errno = 11014
	WSA_QOS_GENERIC_ERROR                                                     syscall.Errno = 11015
	WSA_QOS_ESERVICETYPE                                                      syscall.Errno = 11016
	WSA_QOS_EFLOWSPEC                                                         syscall.Errno = 11017
	WSA_QOS_EPROVSPECBUF                                                      syscall.Errno = 11018
	WSA_QOS_EFILTERSTYLE                                                      syscall.Errno = 11019
	WSA_QOS_EFILTERTYPE                                                       syscall.Errno = 11020
	WSA_QOS_EFILTERCOUNT                                                      syscall.Errno = 11021
	WSA_QOS_EOBJLENGTH                                                        syscall.Errno = 11022
	WSA_QOS_EFLOWCOUNT                                                        syscall.Errno = 11023
	WSA_QOS_EUNKOWNPSOBJ                                                      syscall.Errno = 11024
	WSA_QOS_EPOLICYOBJ                                                        syscall.Errno = 11025
	WSA_QOS_EFLOWDESC                                                         syscall.Errno = 11026
	WSA_QOS_EPSFLOWSPEC                                                       syscall.Errno = 11027
	WSA_QOS_EPSFILTERSPEC                                                     syscall.Errno = 11028
	WSA_QOS_ESDMODEOBJ                                                        syscall.Errno = 11029
	WSA_QOS_ESHAPERATEOBJ                                                     syscall.Errno = 11030
	WSA_QOS_RESERVED_PETYPE                                                   syscall.Errno = 11031
	WSA_SECURE_HOST_NOT_FOUND                                                 syscall.Errno = 11032
	WSA_IPSEC_NAME_POLICY_ERROR                                               syscall.Errno = 11033
	ERROR_IPSEC_QM_POLICY_EXISTS                                              syscall.Errno = 13000
	ERROR_IPSEC_QM_POLICY_NOT_FOUND                                           syscall.Errno = 13001
	ERROR_IPSEC_QM_POLICY_IN_USE                                              syscall.Errno = 13002
	ERROR_IPSEC_MM_POLICY_EXISTS                                              syscall.Errno = 13003
	ERROR_IPSEC_MM_POLICY_NOT_FOUND                                           syscall.Errno = 13004
	ERROR_IPSEC_MM_POLICY_IN_USE                                              syscall.Errno = 13005
	ERROR_IPSEC_MM_FILTER_EXISTS                                              syscall.Errno = 13006
	ERROR_IPSEC_MM_FILTER_NOT_FOUND                                           syscall.Errno = 13007
	ERROR_IPSEC_TRANSPORT_FILTER_EXISTS                                       syscall.Errno = 13008
	ERROR_IPSEC_TRANSPORT_FILTER_NOT_FOUND                                    syscall.Errno = 13009
	ERROR_IPSEC_MM_AUTH_EXISTS                                                syscall.Errno = 13010
	ERROR_IPSEC_MM_AUTH_NOT_FOUND                                             syscall.Errno = 13011
	ERROR_IPSEC_MM_AUTH_IN_USE                                                syscall.Errno = 13012
	ERROR_IPSEC_DEFAULT_MM_POLICY_NOT_FOUND                                   syscall.Errno = 13013
	ERROR_IPSEC_DEFAULT_MM_AUTH_NOT_FOUND                                     syscall.Errno = 13014
	ERROR_IPSEC_DEFAULT_QM_POLICY_NOT_FOUND                                   syscall.Errno = 13015
	ERROR_IPSEC_TUNNEL_FILTER_EXISTS                                          syscall.Errno = 13016
	ERROR_IPSEC_TUNNEL_FILTER_NOT_FOUND                                       syscall.Errno = 13017
	ERROR_IPSEC_MM_FILTER_PENDING_DELETION                                    syscall.Errno = 13018
	ERROR_IPSEC_TRANSPORT_FILTER_PENDING_DELETION                             syscall.Errno = 13019
	ERROR_IPSEC_TUNNEL_FILTER_PENDING_DELETION                                syscall.Errno = 13020
	ERROR_IPSEC_MM_POLICY_PENDING_DELETION                                    syscall.Errno = 13021
	ERROR_IPSEC_MM_AUTH_PENDING_DELETION                                      syscall.Errno = 13022
	ERROR_IPSEC_QM_POLICY_PENDING_DELETION                                    syscall.Errno = 13023
	WARNING_IPSEC_MM_POLICY_PRUNED                                            syscall.Errno = 13024
	WARNING_IPSEC_QM_POLICY_PRUNED                                            syscall.Errno = 13025
	ERROR_IPSEC_IKE_NEG_STATUS_BEGIN                                          syscall.Errno = 13800
	ERROR_IPSEC_IKE_AUTH_FAIL                                                 syscall.Errno = 13801
	ERROR_IPSEC_IKE_ATTRIB_FAIL                                               syscall.Errno = 13802
	ERROR_IPSEC_IKE_NEGOTIATION_PENDING                                       syscall.Errno = 13803
	ERROR_IPSEC_IKE_GENERAL_PROCESSING_ERROR                                  syscall.Errno = 13804
	ERROR_IPSEC_IKE_TIMED_OUT                                                 syscall.Errno = 13805
	ERROR_IPSEC_IKE_NO_CERT                                                   syscall.Errno = 13806
	ERROR_IPSEC_IKE_SA_DELETED                                                syscall.Errno = 13807
	ERROR_IPSEC_IKE_SA_REAPED                                                 syscall.Errno = 13808
	ERROR_IPSEC_IKE_MM_ACQUIRE_DROP                                           syscall.Errno = 13809
	ERROR_IPSEC_IKE_QM_ACQUIRE_DROP                                           syscall.Errno = 13810
	ERROR_IPSEC_IKE_QUEUE_DROP_MM                                             syscall.Errno = 13811
	ERROR_IPSEC_IKE_QUEUE_DROP_NO_MM                                          syscall.Errno = 13812
	ERROR_IPSEC_IKE_DROP_NO_RESPONSE                                          syscall.Errno = 13813
	ERROR_IPSEC_IKE_MM_DELAY_DROP                                             syscall.Errno = 13814
	ERROR_IPSEC_IKE_QM_DELAY_DROP                                             syscall.Errno = 13815
	ERROR_IPSEC_IKE_ERROR                                                     syscall.Errno = 13816
	ERROR_IPSEC_IKE_CRL_FAILED                                                syscall.Errno = 13817
	ERROR_IPSEC_IKE_INVALID_KEY_USAGE                                         syscall.Errno = 13818
	ERROR_IPSEC_IKE_INVALID_CERT_TYPE                                         syscall.Errno = 13819
	ERROR_IPSEC_IKE_NO_PRIVATE_KEY                                            syscall.Errno = 13820
	ERROR_IPSEC_IKE_SIMULTANEOUS_REKEY                                        syscall.Errno = 13821
	ERROR_IPSEC_IKE_DH_FAIL                                                   syscall.Errno = 13822
	ERROR_IPSEC_IKE_CRITICAL_PAYLOAD_NOT_RECOGNIZED                           syscall.Errno = 13823
	ERROR_IPSEC_IKE_INVALID_HEADER                                            syscall.Errno = 13824
	ERROR_IPSEC_IKE_NO_POLICY                                                 syscall.Errno = 13825
	ERROR_IPSEC_IKE_INVALID_SIGNATURE                                         syscall.Errno = 13826
	ERROR_IPSEC_IKE_KERBEROS_ERROR                                            syscall.Errno = 13827
	ERROR_IPSEC_IKE_NO_PUBLIC_KEY                                             syscall.Errno = 13828
	ERROR_IPSEC_IKE_PROCESS_ERR                                               syscall.Errno = 13829
	ERROR_IPSEC_IKE_PROCESS_ERR_SA                                            syscall.Errno = 13830
	ERROR_IPSEC_IKE_PROCESS_ERR_PROP                                          syscall.Errno = 13831
	ERROR_IPSEC_IKE_PROCESS_ERR_TRANS                                         syscall.Errno = 13832
	ERROR_IPSEC_IKE_PROCESS_ERR_KE                                            syscall.Errno = 13833
	ERROR_IPSEC_IKE_PROCESS_ERR_ID                                            syscall.Errno = 13834
	ERROR_IPSEC_IKE_PROCESS_ERR_CERT                                          syscall.Errno = 13835
	ERROR_IPSEC_IKE_PROCESS_ERR_CERT_REQ                                      syscall.Errno = 13836
	ERROR_IPSEC_IKE_PROCESS_ERR_HASH                                          syscall.Errno = 13837
	ERROR_IPSEC_IKE_PROCESS_ERR_SIG                                           syscall.Errno = 13838
	ERROR_IPSEC_IKE_PROCESS_ERR_NONCE                                         syscall.Errno = 13839
	ERROR_IPSEC_IKE_PROCESS_ERR_NOTIFY                                        syscall.Errno = 13840
	ERROR_IPSEC_IKE_PROCESS_ERR_DELETE                                        syscall.Errno = 13841
	ERROR_IPSEC_IKE_PROCESS_ERR_VENDOR                                        syscall.Errno = 13842
	ERROR_IPSEC_IKE_INVALID_PAYLOAD                                           syscall.Errno = 13843
	ERROR_IPSEC_IKE_LOAD_SOFT_SA                                              syscall.Errno = 13844
	ERROR_IPSEC_IKE_SOFT_SA_TORN_DOWN                                         syscall.Errno = 13845
	ERROR_IPSEC_IKE_INVALID_COOKIE                                            syscall.Errno = 13846
	ERROR_IPSEC_IKE_NO_PEER_CERT                                              syscall.Errno = 13847
	ERROR_IPSEC_IKE_PEER_CRL_FAILED                                           syscall.Errno = 13848
	ERROR_IPSEC_IKE_POLICY_CHANGE                                             syscall.Errno = 13849
	ERROR_IPSEC_IKE_NO_MM_POLICY                                              syscall.Errno = 13850
	ERROR_IPSEC_IKE_NOTCBPRIV                                                 syscall.Errno = 13851
	ERROR_IPSEC_IKE_SECLOADFAIL                                               syscall.Errno = 13852
	ERROR_IPSEC_IKE_FAILSSPINIT                                               syscall.Errno = 13853
	ERROR_IPSEC_IKE_FAILQUERYSSP                                              syscall.Errno = 13854
	ERROR_IPSEC_IKE_SRVACQFAIL                                                syscall.Errno = 13855
	ERROR_IPSEC_IKE_SRVQUERYCRED                                              syscall.Errno = 13856
	ERROR_IPSEC_IKE_GETSPIFAIL                                                syscall.Errno = 13857
	ERROR_IPSEC_IKE_INVALID_FILTER                                            syscall.Errno = 13858
	ERROR_IPSEC_IKE_OUT_OF_MEMORY                                             syscall.Errno = 13859
	ERROR_IPSEC_IKE_ADD_UPDATE_KEY_FAILED                                     syscall.Errno = 13860
	ERROR_IPSEC_IKE_INVALID_POLICY                                            syscall.Errno = 13861
	ERROR_IPSEC_IKE_UNKNOWN_DOI                                               syscall.Errno = 13862
	ERROR_IPSEC_IKE_INVALID_SITUATION                                         syscall.Errno = 13863
	ERROR_IPSEC_IKE_DH_FAILURE                                                syscall.Errno = 13864
	ERROR_IPSEC_IKE_INVALID_GROUP                                             syscall.Errno = 13865
	ERROR_IPSEC_IKE_ENCRYPT                                                   syscall.Errno = 13866
	ERROR_IPSEC_IKE_DECRYPT                                                   syscall.Errno = 13867
	ERROR_IPSEC_IKE_POLICY_MATCH                                              syscall.Errno = 13868
	ERROR_IPSEC_IKE_UNSUPPORTED_ID                                            syscall.Errno = 13869
	ERROR_IPSEC_IKE_INVALID_HASH                                              syscall.Errno = 13870
	ERROR_IPSEC_IKE_INVALID_HASH_ALG                                          syscall.Errno = 13871
	ERROR_IPSEC_IKE_INVALID_HASH_SIZE                                         syscall.Errno = 13872
	ERROR_IPSEC_IKE_INVALID_ENCRYPT_ALG                                       syscall.Errno = 13873
	ERROR_IPSEC_IKE_INVALID_AUTH_ALG                                          syscall.Errno = 13874
	ERROR_IPSEC_IKE_INVALID_SIG                                               syscall.Errno = 13875
	ERROR_IPSEC_IKE_LOAD_FAILED                                               syscall.Errno = 13876
	ERROR_IPSEC_IKE_RPC_DELETE                                                syscall.Errno = 13877
	ERROR_IPSEC_IKE_BENIGN_REINIT                                             syscall.Errno = 13878
	ERROR_IPSEC_IKE_INVALID_RESPONDER_LIFETIME_NOTIFY                         syscall.Errno = 13879
	ERROR_IPSEC_IKE_INVALID_MAJOR_VERSION                                     syscall.Errno = 13880
	ERROR_IPSEC_IKE_INVALID_CERT_KEYLEN                                       syscall.Errno = 13881
	ERROR_IPSEC_IKE_MM_LIMIT                                                  syscall.Errno = 13882
	ERROR_IPSEC_IKE_NEGOTIATION_DISABLED                                      syscall.Errno = 13883
	ERROR_IPSEC_IKE_QM_LIMIT                                                  syscall.Errno = 13884
	ERROR_IPSEC_IKE_MM_EXPIRED                                                syscall.Errno = 13885
	ERROR_IPSEC_IKE_PEER_MM_ASSUMED_INVALID                                   syscall.Errno = 13886
	ERROR_IPSEC_IKE_CERT_CHAIN_POLICY_MISMATCH                                syscall.Errno = 13887
	ERROR_IPSEC_IKE_UNEXPECTED_MESSAGE_ID                                     syscall.Errno = 13888
	ERROR_IPSEC_IKE_INVALID_AUTH_PAYLOAD                                      syscall.Errno = 13889
	ERROR_IPSEC_IKE_DOS_COOKIE_SENT                                           syscall.Errno = 13890
	ERROR_IPSEC_IKE_SHUTTING_DOWN                                             syscall.Errno = 13891
	ERROR_IPSEC_IKE_CGA_AUTH_FAILED                                           syscall.Errno = 13892
	ERROR_IPSEC_IKE_PROCESS_ERR_NATOA                                         syscall.Errno = 13893
	ERROR_IPSEC_IKE_INVALID_MM_FOR_QM                                         syscall.Errno = 13894
	ERROR_IPSEC_IKE_QM_EXPIRED                                                syscall.Errno = 13895
	ERROR_IPSEC_IKE_TOO_MANY_FILTERS                                          syscall.Errno = 13896
	ERROR_IPSEC_IKE_NEG_STATUS_END                                            syscall.Errno = 13897
	ERROR_IPSEC_IKE_KILL_DUMMY_NAP_TUNNEL                                     syscall.Errno = 13898
	ERROR_IPSEC_IKE_INNER_IP_ASSIGNMENT_FAILURE                               syscall.Errno = 13899
	ERROR_IPSEC_IKE_REQUIRE_CP_PAYLOAD_MISSING                                syscall.Errno = 13900
	ERROR_IPSEC_KEY_MODULE_IMPERSONATION_NEGOTIATION_PENDING                  syscall.Errno = 13901
	ERROR_IPSEC_IKE_COEXISTENCE_SUPPRESS                                      syscall.Errno = 13902
	ERROR_IPSEC_IKE_RATELIMIT_DROP                                            syscall.Errno = 13903
	ERROR_IPSEC_IKE_PEER_DOESNT_SUPPORT_MOBIKE                                syscall.Errno = 13904
	ERROR_IPSEC_IKE_AUTHORIZATION_FAILURE                                     syscall.Errno = 13905
	ERROR_IPSEC_IKE_STRONG_CRED_AUTHORIZATION_FAILURE                         syscall.Errno = 13906
	ERROR_IPSEC_IKE_AUTHORIZATION_FAILURE_WITH_OPTIONAL_RETRY                 syscall.Errno = 13907
	ERROR_IPSEC_IKE_STRONG_CRED_AUTHORIZATION_AND_CERTMAP_FAILURE             syscall.Errno = 13908
	ERROR_IPSEC_IKE_NEG_STATUS_EXTENDED_END                                   syscall.Errno = 13909
	ERROR_IPSEC_BAD_SPI                                                       syscall.Errno = 13910
	ERROR_IPSEC_SA_LIFETIME_EXPIRED                                           syscall.Errno = 13911
	ERROR_IPSEC_WRONG_SA                                                      syscall.Errno = 13912
	ERROR_IPSEC_REPLAY_CHECK_FAILED                                           syscall.Errno = 13913
	ERROR_IPSEC_INVALID_PACKET                                                syscall.Errno = 13914
	ERROR_IPSEC_INTEGRITY_CHECK_FAILED                                        syscall.Errno = 13915
	ERROR_IPSEC_CLEAR_TEXT_DROP                                               syscall.Errno = 13916
	ERROR_IPSEC_AUTH_FIREWALL_DROP                                            syscall.Errno = 13917
	ERROR_IPSEC_THROTTLE_DROP                                                 syscall.Errno = 13918
	ERROR_IPSEC_DOSP_BLOCK                                                    syscall.Errno = 13925
	ERROR_IPSEC_DOSP_RECEIVED_MULTICAST                                       syscall.Errno = 13926
	ERROR_IPSEC_DOSP_INVALID_PACKET                                           syscall.Errno = 13927
	ERROR_IPSEC_DOSP_STATE_LOOKUP_FAILED                                      syscall.Errno = 13928
	ERROR_IPSEC_DOSP_MAX_ENTRIES                                              syscall.Errno = 13929
	ERROR_IPSEC_DOSP_KEYMOD_NOT_ALLOWED                                       syscall.Errno = 13930
	ERROR_IPSEC_DOSP_NOT_INSTALLED                                            syscall.Errno = 13931
	ERROR_IPSEC_DOSP_MAX_PER_IP_RATELIMIT_QUEUES                              syscall.Errno = 13932
	ERROR_SXS_SECTION_NOT_FOUND                                               syscall.Errno = 14000
	ERROR_SXS_CANT_GEN_ACTCTX                                                 syscall.Errno = 14001
	ERROR_SXS_INVALID_ACTCTXDATA_FORMAT                                       syscall.Errno = 14002
	ERROR_SXS_ASSEMBLY_NOT_FOUND                                              syscall.Errno = 14003
	ERROR_SXS_MANIFEST_FORMAT_ERROR                                           syscall.Errno = 14004
	ERROR_SXS_MANIFEST_PARSE_ERROR                                            syscall.Errno = 14005
	ERROR_SXS_ACTIVATION_CONTEXT_DISABLED                                     syscall.Errno = 14006
	ERROR_SXS_KEY_NOT_FOUND                                                   syscall.Errno = 14007
	ERROR_SXS_VERSION_CONFLICT                                                syscall.Errno = 14008
	ERROR_SXS_WRONG_SECTION_TYPE                                              syscall.Errno = 14009
	ERROR_SXS_THREAD_QUERIES_DISABLED                                         syscall.Errno = 14010
	ERROR_SXS_PROCESS_DEFAULT_ALREADY_SET                                     syscall.Errno = 14011
	ERROR_SXS_UNKNOWN_ENCODING_GROUP                                          syscall.Errno = 14012
	ERROR_SXS_UNKNOWN_ENCODING                                                syscall.Errno = 14013
	ERROR_SXS_INVALID_XML_NAMESPACE_URI                                       syscall.Errno = 14014
	ERROR_SXS_ROOT_MANIFEST_DEPENDENCY_NOT_INSTALLED                          syscall.Errno = 14015
	ERROR_SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED                          syscall.Errno = 14016
	ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE                             syscall.Errno = 14017
	ERROR_SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE                     syscall.Errno = 14018
	ERROR_SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE                     syscall.Errno = 14019
	ERROR_SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT                  syscall.Errno = 14020
	ERROR_SXS_DUPLICATE_DLL_NAME                                              syscall.Errno = 14021
	ERROR_SXS_DUPLICATE_WINDOWCLASS_NAME                                      syscall.Errno = 14022
	ERROR_SXS_DUPLICATE_CLSID                                                 syscall.Errno = 14023
	ERROR_SXS_DUPLICATE_IID                                                   syscall.Errno = 14024
	ERROR_SXS_DUPLICATE_TLBID                                                 syscall.Errno = 14025
	ERROR_SXS_DUPLICATE_PROGID                                                syscall.Errno = 14026
	ERROR_SXS_DUPLICATE_ASSEMBLY_NAME                                         syscall.Errno = 14027
	ERROR_SXS_FILE_HASH_MISMATCH                                              syscall.Errno = 14028
	ERROR_SXS_POLICY_PARSE_ERROR                                              syscall.Errno = 14029
	ERROR_SXS_XML_E_MISSINGQUOTE                                              syscall.Errno = 14030
	ERROR_SXS_XML_E_COMMENTSYNTAX                                             syscall.Errno = 14031
	ERROR_SXS_XML_E_BADSTARTNAMECHAR                                          syscall.Errno = 14032
	ERROR_SXS_XML_E_BADNAMECHAR                                               syscall.Errno = 14033
	ERROR_SXS_XML_E_BADCHARINSTRING                                           syscall.Errno = 14034
	ERROR_SXS_XML_E_XMLDECLSYNTAX                                             syscall.Errno = 14035
	ERROR_SXS_XML_E_BADCHARDATA                                               syscall.Errno = 14036
	ERROR_SXS_XML_E_MISSINGWHITESPACE                                         syscall.Errno = 14037
	ERROR_SXS_XML_E_EXPECTINGTAGEND                                           syscall.Errno = 14038
	ERROR_SXS_XML_E_MISSINGSEMICOLON                                          syscall.Errno = 14039
	ERROR_SXS_XML_E_UNBALANCEDPAREN                                           syscall.Errno = 14040
	ERROR_SXS_XML_E_INTERNALERROR                                             syscall.Errno = 14041
	ERROR_SXS_XML_E_UNEXPECTED_WHITESPACE                                     syscall.Errno = 14042
	ERROR_SXS_XML_E_INCOMPLETE_ENCODING                                       syscall.Errno = 14043
	ERROR_SXS_XML_E_MISSING_PAREN                                             syscall.Errno = 14044
	ERROR_SXS_XML_E_EXPECTINGCLOSEQUOTE                                       syscall.Errno = 14045
	ERROR_SXS_XML_E_MULTIPLE_COLONS                                           syscall.Errno = 14046
	ERROR_SXS_XML_E_INVALID_DECIMAL                                           syscall.Errno = 14047
	ERROR_SXS_XML_E_INVALID_HEXIDECIMAL                                       syscall.Errno = 14048
	ERROR_SXS_XML_E_INVALID_UNICODE                                           syscall.Errno = 14049
	ERROR_SXS_XML_E_WHITESPACEORQUESTIONMARK                                  syscall.Errno = 14050
	ERROR_SXS_XML_E_UNEXPECTEDENDTAG                                          syscall.Errno = 14051
	ERROR_SXS_XML_E_UNCLOSEDTAG                                               syscall.Errno = 14052
	ERROR_SXS_XML_E_DUPLICATEATTRIBUTE                                        syscall.Errno = 14053
	ERROR_SXS_XML_E_MULTIPLEROOTS                                             syscall.Errno = 14054
	ERROR_SXS_XML_E_INVALIDATROOTLEVEL                                        syscall.Errno = 14055
	ERROR_SXS_XML_E_BADXMLDECL                                                syscall.Errno = 14056
	ERROR_SXS_XML_E_MISSINGROOT                                               syscall.Errno = 14057
	ERROR_SXS_XML_E_UNEXPECTEDEOF                                             syscall.Errno = 14058
	ERROR_SXS_XML_E_BADPEREFINSUBSET                                          syscall.Errno = 14059
	ERROR_SXS_XML_E_UNCLOSEDSTARTTAG                                          syscall.Errno = 14060
	ERROR_SXS_XML_E_UNCLOSEDENDTAG                                            syscall.Errno = 14061
	ERROR_SXS_XML_E_UNCLOSEDSTRING                                            syscall.Errno = 14062
	ERROR_SXS_XML_E_UNCLOSEDCOMMENT                                           syscall.Errno = 14063
	ERROR_SXS_XML_E_UNCLOSEDDECL                                              syscall.Errno = 14064
	ERROR_SXS_XML_E_UNCLOSEDCDATA                                             syscall.Errno = 14065
	ERROR_SXS_XML_E_RESERVEDNAMESPACE                                         syscall.Errno = 14066
	ERROR_SXS_XML_E_INVALIDENCODING                                           syscall.Errno = 14067
	ERROR_SXS_XML_E_INVALIDSWITCH                                             syscall.Errno = 14068
	ERROR_SXS_XML_E_BADXMLCASE                                                syscall.Errno = 14069
	ERROR_SXS_XML_E_INVALID_STANDALONE                                        syscall.Errno = 14070
	ERROR_SXS_XML_E_UNEXPECTED_STANDALONE                                     syscall.Errno = 14071
	ERROR_SXS_XML_E_INVALID_VERSION                                           syscall.Errno = 14072
	ERROR_SXS_XML_E_MISSINGEQUALS                                             syscall.Errno = 14073
	ERROR_SXS_PROTECTION_RECOVERY_FAILED                                      syscall.Errno = 14074
	ERROR_SXS_PROTECTION_PUBLIC_KEY_TOO_SHORT                                 syscall.Errno = 14075
	ERROR_SXS_PROTECTION_CATALOG_NOT_VALID                                    syscall.Errno = 14076
	ERROR_SXS_UNTRANSLATABLE_HRESULT                                          syscall.Errno = 14077
	ERROR_SXS_PROTECTION_CATALOG_FILE_MISSING                                 syscall.Errno = 14078
	ERROR_SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE                             syscall.Errno = 14079
	ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME                        syscall.Errno = 14080
	ERROR_SXS_ASSEMBLY_MISSING                                                syscall.Errno = 14081
	ERROR_SXS_CORRUPT_ACTIVATION_STACK                                        syscall.Errno = 14082
	ERROR_SXS_CORRUPTION                                                      syscall.Errno = 14083
	ERROR_SXS_EARLY_DEACTIVATION                                              syscall.Errno = 14084
	ERROR_SXS_INVALID_DEACTIVATION                                            syscall.Errno = 14085
	ERROR_SXS_MULTIPLE_DEACTIVATION                                           syscall.Errno = 14086
	ERROR_SXS_PROCESS_TERMINATION_REQUESTED                                   syscall.Errno = 14087
	ERROR_SXS_RELEASE_ACTIVATION_CONTEXT                                      syscall.Errno = 14088
	ERROR_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY                         syscall.Errno = 14089
	ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE                                syscall.Errno = 14090
	ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME                                 syscall.Errno = 14091
	ERROR_SXS_IDENTITY_DUPLICATE_ATTRIBUTE                                    syscall.Errno = 14092
	ERROR_SXS_IDENTITY_PARSE_ERROR                                            syscall.Errno = 14093
	ERROR_MALFORMED_SUBSTITUTION_STRING                                       syscall.Errno = 14094
	ERROR_SXS_INCORRECT_PUBLIC_KEY_TOKEN                                      syscall.Errno = 14095
	ERROR_UNMAPPED_SUBSTITUTION_STRING                                        syscall.Errno = 14096
	ERROR_SXS_ASSEMBLY_NOT_LOCKED                                             syscall.Errno = 14097
	ERROR_SXS_COMPONENT_STORE_CORRUPT                                         syscall.Errno = 14098
	ERROR_ADVANCED_INSTALLER_FAILED                                           syscall.Errno = 14099
	ERROR_XML_ENCODING_MISMATCH                                               syscall.Errno = 14100
	ERROR_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT                   syscall.Errno = 14101
	ERROR_SXS_IDENTITIES_DIFFERENT                                            syscall.Errno = 14102
	ERROR_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT                                    syscall.Errno = 14103
	ERROR_SXS_FILE_NOT_PART_OF_ASSEMBLY                                       syscall.Errno = 14104
	ERROR_SXS_MANIFEST_TOO_BIG                                                syscall.Errno = 14105
	ERROR_SXS_SETTING_NOT_REGISTERED                                          syscall.Errno = 14106
	ERROR_SXS_TRANSACTION_CLOSURE_INCOMPLETE                                  syscall.Errno = 14107
	ERROR_SMI_PRIMITIVE_INSTALLER_FAILED                                      syscall.Errno = 14108
	ERROR_GENERIC_COMMAND_FAILED                                              syscall.Errno = 14109
	ERROR_SXS_FILE_HASH_MISSING                                               syscall.Errno = 14110
	ERROR_SXS_DUPLICATE_ACTIVATABLE_CLASS                                     syscall.Errno = 14111
	ERROR_EVT_INVALID_CHANNEL_PATH                                            syscall.Errno = 15000
	ERROR_EVT_INVALID_QUERY                                                   syscall.Errno = 15001
	ERROR_EVT_PUBLISHER_METADATA_NOT_FOUND                                    syscall.Errno = 15002
	ERROR_EVT_EVENT_TEMPLATE_NOT_FOUND                                        syscall.Errno = 15003
	ERROR_EVT_INVALID_PUBLISHER_NAME                                          syscall.Errno = 15004
	ERROR_EVT_INVALID_EVENT_DATA                                              syscall.Errno = 15005
	ERROR_EVT_CHANNEL_NOT_FOUND                                               syscall.Errno = 15007
	ERROR_EVT_MALFORMED_XML_TEXT                                              syscall.Errno = 15008
	ERROR_EVT_SUBSCRIPTION_TO_DIRECT_CHANNEL                                  syscall.Errno = 15009
	ERROR_EVT_CONFIGURATION_ERROR                                             syscall.Errno = 15010
	ERROR_EVT_QUERY_RESULT_STALE                                              syscall.Errno = 15011
	ERROR_EVT_QUERY_RESULT_INVALID_POSITION                                   syscall.Errno = 15012
	ERROR_EVT_NON_VALIDATING_MSXML                                            syscall.Errno = 15013
	ERROR_EVT_FILTER_ALREADYSCOPED                                            syscall.Errno = 15014
	ERROR_EVT_FILTER_NOTELTSET                                                syscall.Errno = 15015
	ERROR_EVT_FILTER_INVARG                                                   syscall.Errno = 15016
	ERROR_EVT_FILTER_INVTEST                                                  syscall.Errno = 15017
	ERROR_EVT_FILTER_INVTYPE                                                  syscall.Errno = 15018
	ERROR_EVT_FILTER_PARSEERR                                                 syscall.Errno = 15019
	ERROR_EVT_FILTER_UNSUPPORTEDOP                                            syscall.Errno = 15020
	ERROR_EVT_FILTER_UNEXPECTEDTOKEN                                          syscall.Errno = 15021
	ERROR_EVT_INVALID_OPERATION_OVER_ENABLED_DIRECT_CHANNEL                   syscall.Errno = 15022
	ERROR_EVT_INVALID_CHANNEL_PROPERTY_VALUE                                  syscall.Errno = 15023
	ERROR_EVT_INVALID_PUBLISHER_PROPERTY_VALUE                                syscall.Errno = 15024
	ERROR_EVT_CHANNEL_CANNOT_ACTIVATE                                         syscall.Errno = 15025
	ERROR_EVT_FILTER_TOO_COMPLEX                                              syscall.Errno = 15026
	ERROR_EVT_MESSAGE_NOT_FOUND                                               syscall.Errno = 15027
	ERROR_EVT_MESSAGE_ID_NOT_FOUND                                            syscall.Errno = 15028
	ERROR_EVT_UNRESOLVED_VALUE_INSERT                                         syscall.Errno = 15029
	ERROR_EVT_UNRESOLVED_PARAMETER_INSERT                                     syscall.Errno = 15030
	ERROR_EVT_MAX_INSERTS_REACHED                                             syscall.Errno = 15031
	ERROR_EVT_EVENT_DEFINITION_NOT_FOUND                                      syscall.Errno = 15032
	ERROR_EVT_MESSAGE_LOCALE_NOT_FOUND                                        syscall.Errno = 15033
	ERROR_EVT_VERSION_TOO_OLD                                                 syscall.Errno = 15034
	ERROR_EVT_VERSION_TOO_NEW                                                 syscall.Errno = 15035
	ERROR_EVT_CANNOT_OPEN_CHANNEL_OF_QUERY                                    syscall.Errno = 15036
	ERROR_EVT_PUBLISHER_DISABLED                                              syscall.Errno = 15037
	ERROR_EVT_FILTER_OUT_OF_RANGE                                             syscall.Errno = 15038
	ERROR_EC_SUBSCRIPTION_CANNOT_ACTIVATE                                     syscall.Errno = 15080
	ERROR_EC_LOG_DISABLED                                                     syscall.Errno = 15081
	ERROR_EC_CIRCULAR_FORWARDING                                              syscall.Errno = 15082
	ERROR_EC_CREDSTORE_FULL                                                   syscall.Errno = 15083
	ERROR_EC_CRED_NOT_FOUND                                                   syscall.Errno = 15084
	ERROR_EC_NO_ACTIVE_CHANNEL                                                syscall.Errno = 15085
	ERROR_MUI_FILE_NOT_FOUND                                                  syscall.Errno = 15100
	ERROR_MUI_INVALID_FILE                                                    syscall.Errno = 15101
	ERROR_MUI_INVALID_RC_CONFIG                                               syscall.Errno = 15102
	ERROR_MUI_INVALID_LOCALE_NAME                                             syscall.Errno = 15103
	ERROR_MUI_INVALID_ULTIMATEFALLBACK_NAME                                   syscall.Errno = 15104
	ERROR_MUI_FILE_NOT_LOADED                                                 syscall.Errno = 15105
	ERROR_RESOURCE_ENUM_USER_STOP                                             syscall.Errno = 15106
	ERROR_MUI_INTLSETTINGS_UILANG_NOT_INSTALLED                               syscall.Errno = 15107
	ERROR_MUI_INTLSETTINGS_INVALID_LOCALE_NAME                                syscall.Errno = 15108
	ERROR_MRM_RUNTIME_NO_DEFAULT_OR_NEUTRAL_RESOURCE                          syscall.Errno = 15110
	ERROR_MRM_INVALID_PRICONFIG                                               syscall.Errno = 15111
	ERROR_MRM_INVALID_FILE_TYPE                                               syscall.Errno = 15112
	ERROR_MRM_UNKNOWN_QUALIFIER                                               syscall.Errno = 15113
	ERROR_MRM_INVALID_QUALIFIER_VALUE                                         syscall.Errno = 15114
	ERROR_MRM_NO_CANDIDATE                                                    syscall.Errno = 15115
	ERROR_MRM_NO_MATCH_OR_DEFAULT_CANDIDATE                                   syscall.Errno = 15116
	ERROR_MRM_RESOURCE_TYPE_MISMATCH                                          syscall.Errno = 15117
	ERROR_MRM_DUPLICATE_MAP_NAME                                              syscall.Errno = 15118
	ERROR_MRM_DUPLICATE_ENTRY                                                 syscall.Errno = 15119
	ERROR_MRM_INVALID_RESOURCE_IDENTIFIER                                     syscall.Errno = 15120
	ERROR_MRM_FILEPATH_TOO_LONG                                               syscall.Errno = 15121
	ERROR_MRM_UNSUPPORTED_DIRECTORY_TYPE                                      syscall.Errno = 15122
	ERROR_MRM_INVALID_PRI_FILE                                                syscall.Errno = 15126
	ERROR_MRM_NAMED_RESOURCE_NOT_FOUND                                        syscall.Errno = 15127
	ERROR_MRM_MAP_NOT_FOUND                                                   syscall.Errno = 15135
	ERROR_MRM_UNSUPPORTED_PROFILE_TYPE                                        syscall.Errno = 15136
	ERROR_MRM_INVALID_QUALIFIER_OPERATOR                                      syscall.Errno = 15137
	ERROR_MRM_INDETERMINATE_QUALIFIER_VALUE                                   syscall.Errno = 15138
	ERROR_MRM_AUTOMERGE_ENABLED                                               syscall.Errno = 15139
	ERROR_MRM_TOO_MANY_RESOURCES                                              syscall.Errno = 15140
	ERROR_MRM_UNSUPPORTED_FILE_TYPE_FOR_MERGE                                 syscall.Errno = 15141
	ERROR_MRM_UNSUPPORTED_FILE_TYPE_FOR_LOAD_UNLOAD_PRI_FILE                  syscall.Errno = 15142
	ERROR_MRM_NO_CURRENT_VIEW_ON_THREAD                                       syscall.Errno = 15143
	ERROR_DIFFERENT_PROFILE_RESOURCE_MANAGER_EXIST                            syscall.Errno = 15144
	ERROR_OPERATION_NOT_ALLOWED_FROM_SYSTEM_COMPONENT                         syscall.Errno = 15145
	ERROR_MRM_DIRECT_REF_TO_NON_DEFAULT_RESOURCE                              syscall.Errno = 15146
	ERROR_MRM_GENERATION_COUNT_MISMATCH                                       syscall.Errno = 15147
	ERROR_PRI_MERGE_VERSION_MISMATCH                                          syscall.Errno = 15148
	ERROR_PRI_MERGE_MISSING_SCHEMA                                            syscall.Errno = 15149
	ERROR_PRI_MERGE_LOAD_FILE_FAILED                                          syscall.Errno = 15150
	ERROR_PRI_MERGE_ADD_FILE_FAILED                                           syscall.Errno = 15151
	ERROR_PRI_MERGE_WRITE_FILE_FAILED                                         syscall.Errno = 15152
	ERROR_PRI_MERGE_MULTIPLE_PACKAGE_FAMILIES_NOT_ALLOWED                     syscall.Errno = 15153
	ERROR_PRI_MERGE_MULTIPLE_MAIN_PACKAGES_NOT_ALLOWED                        syscall.Errno = 15154
	ERROR_PRI_MERGE_BUNDLE_PACKAGES_NOT_ALLOWED                               syscall.Errno = 15155
	ERROR_PRI_MERGE_MAIN_PACKAGE_REQUIRED                                     syscall.Errno = 15156
	ERROR_PRI_MERGE_RESOURCE_PACKAGE_REQUIRED                                 syscall.Errno = 15157
	ERROR_PRI_MERGE_INVALID_FILE_NAME                                         syscall.Errno = 15158
	ERROR_MRM_PACKAGE_NOT_FOUND                                               syscall.Errno = 15159
	ERROR_MRM_MISSING_DEFAULT_LANGUAGE                                        syscall.Errno = 15160
	ERROR_MCA_INVALID_CAPABILITIES_STRING                                     syscall.Errno = 15200
	ERROR_MCA_INVALID_VCP_VERSION                                             syscall.Errno = 15201
	ERROR_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION                             syscall.Errno = 15202
	ERROR_MCA_MCCS_VERSION_MISMATCH                                           syscall.Errno = 15203
	ERROR_MCA_UNSUPPORTED_MCCS_VERSION                                        syscall.Errno = 15204
	ERROR_MCA_INTERNAL_ERROR                                                  syscall.Errno = 15205
	ERROR_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED                                syscall.Errno = 15206
	ERROR_MCA_UNSUPPORTED_COLOR_TEMPERATURE                                   syscall.Errno = 15207
	ERROR_AMBIGUOUS_SYSTEM_DEVICE                                             syscall.Errno = 15250
	ERROR_SYSTEM_DEVICE_NOT_FOUND                                             syscall.Errno = 15299
	ERROR_HASH_NOT_SUPPORTED                                                  syscall.Errno = 15300
	ERROR_HASH_NOT_PRESENT                                                    syscall.Errno = 15301
	ERROR_SECONDARY_IC_PROVIDER_NOT_REGISTERED                                syscall.Errno = 15321
	ERROR_GPIO_CLIENT_INFORMATION_INVALID                                     syscall.Errno = 15322
	ERROR_GPIO_VERSION_NOT_SUPPORTED                                          syscall.Errno = 15323
	ERROR_GPIO_INVALID_REGISTRATION_PACKET                                    syscall.Errno = 15324
	ERROR_GPIO_OPERATION_DENIED                                               syscall.Errno = 15325
	ERROR_GPIO_INCOMPATIBLE_CONNECT_MODE                                      syscall.Errno = 15326
	ERROR_GPIO_INTERRUPT_ALREADY_UNMASKED                                     syscall.Errno = 15327
	ERROR_CANNOT_SWITCH_RUNLEVEL                                              syscall.Errno = 15400
	ERROR_INVALID_RUNLEVEL_SETTING                                            syscall.Errno = 15401
	ERROR_RUNLEVEL_SWITCH_TIMEOUT                                             syscall.Errno = 15402
	ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT                                       syscall.Errno = 15403
	ERROR_RUNLEVEL_SWITCH_IN_PROGRESS                                         syscall.Errno = 15404
	ERROR_SERVICES_FAILED_AUTOSTART                                           syscall.Errno = 15405
	ERROR_COM_TASK_STOP_PENDING                                               syscall.Errno = 15501
	ERROR_INSTALL_OPEN_PACKAGE_FAILED                                         syscall.Errno = 15600
	ERROR_INSTALL_PACKAGE_NOT_FOUND                                           syscall.Errno = 15601
	ERROR_INSTALL_INVALID_PACKAGE                                             syscall.Errno = 15602
	ERROR_INSTALL_RESOLVE_DEPENDENCY_FAILED                                   syscall.Errno = 15603
	ERROR_INSTALL_OUT_OF_DISK_SPACE                                           syscall.Errno = 15604
	ERROR_INSTALL_NETWORK_FAILURE                                             syscall.Errno = 15605
	ERROR_INSTALL_REGISTRATION_FAILURE                                        syscall.Errno = 15606
	ERROR_INSTALL_DEREGISTRATION_FAILURE                                      syscall.Errno = 15607
	ERROR_INSTALL_CANCEL                                                      syscall.Errno = 15608
	ERROR_INSTALL_FAILED                                                      syscall.Errno = 15609
	ERROR_REMOVE_FAILED                                                       syscall.Errno = 15610
	ERROR_PACKAGE_ALREADY_EXISTS                                              syscall.Errno = 15611
	ERROR_NEEDS_REMEDIATION                                                   syscall.Errno = 15612
	ERROR_INSTALL_PREREQUISITE_FAILED                                         syscall.Errno = 15613
	ERROR_PACKAGE_REPOSITORY_CORRUPTED                                        syscall.Errno = 15614
	ERROR_INSTALL_POLICY_FAILURE                                              syscall.Errno = 15615
	ERROR_PACKAGE_UPDATING                                                    syscall.Errno = 15616
	ERROR_DEPLOYMENT_BLOCKED_BY_POLICY                                        syscall.Errno = 15617
	ERROR_PACKAGES_IN_USE                                                     syscall.Errno = 15618
	ERROR_RECOVERY_FILE_CORRUPT                                               syscall.Errno = 15619
	ERROR_INVALID_STAGED_SIGNATURE                                            syscall.Errno = 15620
	ERROR_DELETING_EXISTING_APPLICATIONDATA_STORE_FAILED                      syscall.Errno = 15621
	ERROR_INSTALL_PACKAGE_DOWNGRADE                                           syscall.Errno = 15622
	ERROR_SYSTEM_NEEDS_REMEDIATION                                            syscall.Errno = 15623
	ERROR_APPX_INTEGRITY_FAILURE_CLR_NGEN                                     syscall.Errno = 15624
	ERROR_RESILIENCY_FILE_CORRUPT                                             syscall.Errno = 15625
	ERROR_INSTALL_FIREWALL_SERVICE_NOT_RUNNING                                syscall.Errno = 15626
	ERROR_PACKAGE_MOVE_FAILED                                                 syscall.Errno = 15627
	ERROR_INSTALL_VOLUME_NOT_EMPTY                                            syscall.Errno = 15628
	ERROR_INSTALL_VOLUME_OFFLINE                                              syscall.Errno = 15629
	ERROR_INSTALL_VOLUME_CORRUPT                                              syscall.Errno = 15630
	ERROR_NEEDS_REGISTRATION                                                  syscall.Errno = 15631
	ERROR_INSTALL_WRONG_PROCESSOR_ARCHITECTURE                                syscall.Errno = 15632
	ERROR_DEV_SIDELOAD_LIMIT_EXCEEDED                                         syscall.Errno = 15633
	ERROR_INSTALL_OPTIONAL_PACKAGE_REQUIRES_MAIN_PACKAGE                      syscall.Errno = 15634
	ERROR_PACKAGE_NOT_SUPPORTED_ON_FILESYSTEM                                 syscall.Errno = 15635
	ERROR_PACKAGE_MOVE_BLOCKED_BY_STREAMING                                   syscall.Errno = 15636
	ERROR_INSTALL_OPTIONAL_PACKAGE_APPLICATIONID_NOT_UNIQUE                   syscall.Errno = 15637
	ERROR_PACKAGE_STAGING_ONHOLD                                              syscall.Errno = 15638
	ERROR_INSTALL_INVALID_RELATED_SET_UPDATE                                  syscall.Errno = 15639
	ERROR_INSTALL_OPTIONAL_PACKAGE_REQUIRES_MAIN_PACKAGE_FULLTRUST_CAPABILITY syscall.Errno = 15640
	ERROR_DEPLOYMENT_BLOCKED_BY_USER_LOG_OFF                                  syscall.Errno = 15641
	ERROR_PROVISION_OPTIONAL_PACKAGE_REQUIRES_MAIN_PACKAGE_PROVISIONED        syscall.Errno = 15642
	ERROR_PACKAGES_REPUTATION_CHECK_FAILED                                    syscall.Errno = 15643
	ERROR_PACKAGES_REPUTATION_CHECK_TIMEDOUT                                  syscall.Errno = 15644
	ERROR_DEPLOYMENT_OPTION_NOT_SUPPORTED                                     syscall.Errno = 15645
	ERROR_APPINSTALLER_ACTIVATION_BLOCKED                                     syscall.Errno = 15646
	ERROR_REGISTRATION_FROM_REMOTE_DRIVE_NOT_SUPPORTED                        syscall.Errno = 15647
	ERROR_APPX_RAW_DATA_WRITE_FAILED                                          syscall.Errno = 15648
	ERROR_DEPLOYMENT_BLOCKED_BY_VOLUME_POLICY_PACKAGE                         syscall.Errno = 15649
	ERROR_DEPLOYMENT_BLOCKED_BY_VOLUME_POLICY_MACHINE                         syscall.Errno = 15650
	ERROR_DEPLOYMENT_BLOCKED_BY_PROFILE_POLICY                                syscall.Errno = 15651
	ERROR_DEPLOYMENT_FAILED_CONFLICTING_MUTABLE_PACKAGE_DIRECTORY             syscall.Errno = 15652
	ERROR_SINGLETON_RESOURCE_INSTALLED_IN_ACTIVE_USER                         syscall.Errno = 15653
	ERROR_DIFFERENT_VERSION_OF_PACKAGED_SERVICE_INSTALLED                     syscall.Errno = 15654
	ERROR_SERVICE_EXISTS_AS_NON_PACKAGED_SERVICE                              syscall.Errno = 15655
	ERROR_PACKAGED_SERVICE_REQUIRES_ADMIN_PRIVILEGES                          syscall.Errno = 15656
	APPMODEL_ERROR_NO_PACKAGE                                                 syscall.Errno = 15700
	APPMODEL_ERROR_PACKAGE_RUNTIME_CORRUPT                                    syscall.Errno = 15701
	APPMODEL_ERROR_PACKAGE_IDENTITY_CORRUPT                                   syscall.Errno = 15702
	APPMODEL_ERROR_NO_APPLICATION                                             syscall.Errno = 15703
	APPMODEL_ERROR_DYNAMIC_PROPERTY_READ_FAILED                               syscall.Errno = 15704
	APPMODEL_ERROR_DYNAMIC_PROPERTY_INVALID                                   syscall.Errno = 15705
	APPMODEL_ERROR_PACKAGE_NOT_AVAILABLE                                      syscall.Errno = 15706
	APPMODEL_ERROR_NO_MUTABLE_DIRECTORY                                       syscall.Errno = 15707
	ERROR_STATE_LOAD_STORE_FAILED                                             syscall.Errno = 15800
	ERROR_STATE_GET_VERSION_FAILED                                            syscall.Errno = 15801
	ERROR_STATE_SET_VERSION_FAILED                                            syscall.Errno = 15802
	ERROR_STATE_STRUCTURED_RESET_FAILED                                       syscall.Errno = 15803
	ERROR_STATE_OPEN_CONTAINER_FAILED                                         syscall.Errno = 15804
	ERROR_STATE_CREATE_CONTAINER_FAILED                                       syscall.Errno = 15805
	ERROR_STATE_DELETE_CONTAINER_FAILED                                       syscall.Errno = 15806
	ERROR_STATE_READ_SETTING_FAILED                                           syscall.Errno = 15807
	ERROR_STATE_WRITE_SETTING_FAILED                                          syscall.Errno = 15808
	ERROR_STATE_DELETE_SETTING_FAILED                                         syscall.Errno = 15809
	ERROR_STATE_QUERY_SETTING_FAILED                                          syscall.Errno = 15810
	ERROR_STATE_READ_COMPOSITE_SETTING_FAILED                                 syscall.Errno = 15811
	ERROR_STATE_WRITE_COMPOSITE_SETTING_FAILED                                syscall.Errno = 15812
	ERROR_STATE_ENUMERATE_CONTAINER_FAILED                                    syscall.Errno = 15813
	ERROR_STATE_ENUMERATE_SETTINGS_FAILED                                     syscall.Errno = 15814
	ERROR_STATE_COMPOSITE_SETTING_VALUE_SIZE_LIMIT_EXCEEDED                   syscall.Errno = 15815
	ERROR_STATE_SETTING_VALUE_SIZE_LIMIT_EXCEEDED                             syscall.Errno = 15816
	ERROR_STATE_SETTING_NAME_SIZE_LIMIT_EXCEEDED                              syscall.Errno = 15817
	ERROR_STATE_CONTAINER_NAME_SIZE_LIMIT_EXCEEDED                            syscall.Errno = 15818
	ERROR_API_UNAVAILABLE                                                     syscall.Errno = 15841
	STORE_ERROR_UNLICENSED                                                    syscall.Errno = 15861
	STORE_ERROR_UNLICENSED_USER                                               syscall.Errno = 15862
	STORE_ERROR_PENDING_COM_TRANSACTION                                       syscall.Errno = 15863
	STORE_ERROR_LICENSE_REVOKED                                               syscall.Errno = 15864
	SEVERITY_SUCCESS                                                          syscall.Errno = 0
	SEVERITY_ERROR                                                            syscall.Errno = 1
	FACILITY_NT_BIT                                                                         = 0x10000000
	E_NOT_SET                                                                               = ERROR_NOT_FOUND
	E_NOT_VALID_STATE                                                                       = ERROR_INVALID_STATE
	E_NOT_SUFFICIENT_BUFFER                                                                 = ERROR_INSUFFICIENT_BUFFER
	E_TIME_SENSITIVE_THREAD                                                                 = ERROR_TIME_SENSITIVE_THREAD
	E_NO_TASK_QUEUE                                                                         = ERROR_NO_TASK_QUEUE
	NOERROR                                                                   syscall.Errno = 0
	E_UNEXPECTED                                                              Handle        = 0x8000FFFF
	E_NOTIMPL                                                                 Handle        = 0x80004001
	E_OUTOFMEMORY                                                             Handle        = 0x8007000E
	E_INVALIDARG                                                              Handle        = 0x80070057
	E_NOINTERFACE                                                             Handle        = 0x80004002
	E_POINTER                                                                 Handle        = 0x80004003
	E_HANDLE                                                                  Handle        = 0x80070006
	E_ABORT                                                                   Handle        = 0x80004004
	E_FAIL                                                                    Handle        = 0x80004005
	E_ACCESSDENIED                                                            Handle        = 0x80070005
	E_PENDING                                                                 Handle        = 0x8000000A
	E_BOUNDS                                                                  Handle        = 0x8000000B
	E_CHANGED_STATE                                                           Handle        = 0x8000000C
	E_ILLEGAL_STATE_CHANGE                                                    Handle        = 0x8000000D
	E_ILLEGAL_METHOD_CALL                                                     Handle        = 0x8000000E
	RO_E_METADATA_NAME_NOT_FOUND                                              Handle        = 0x8000000F
	RO_E_METADATA_NAME_IS_NAMESPACE                                           Handle        = 0x80000010
	RO_E_METADATA_INVALID_TYPE_FORMAT                                         Handle        = 0x80000011
	RO_E_INVALID_METADATA_FILE                                                Handle        = 0x80000012
	RO_E_CLOSED                                                               Handle        = 0x80000013
	RO_E_EXCLUSIVE_WRITE                                                      Handle        = 0x80000014
	RO_E_CHANGE_NOTIFICATION_IN_PROGRESS                                      Handle        = 0x80000015
	RO_E_ERROR_STRING_NOT_FOUND                                               Handle        = 0x80000016
	E_STRING_NOT_NULL_TERMINATED                                              Handle        = 0x80000017
	E_ILLEGAL_DELEGATE_ASSIGNMENT                                             Handle        = 0x80000018
	E_ASYNC_OPERATION_NOT_STARTED                                             Handle        = 0x80000019
	E_APPLICATION_EXITING                                                     Handle        = 0x8000001A
	E_APPLICATION_VIEW_EXITING                                                Handle        = 0x8000001B
	RO_E_MUST_BE_AGILE                                                        Handle        = 0x8000001C
	RO_E_UNSUPPORTED_FROM_MTA                                                 Handle        = 0x8000001D
	RO_E_COMMITTED                                                            Handle        = 0x8000001E
	RO_E_BLOCKED_CROSS_ASTA_CALL                                              Handle        = 0x8000001F
	RO_E_CANNOT_ACTIVATE_FULL_TRUST_SERVER                                    Handle        = 0x80000020
	RO_E_CANNOT_ACTIVATE_UNIVERSAL_APPLICATION_SERVER                         Handle        = 0x80000021
	CO_E_INIT_TLS                                                             Handle        = 0x80004006
	CO_E_INIT_SHARED_ALLOCATOR                                                Handle        = 0x80004007
	CO_E_INIT_MEMORY_ALLOCATOR                                                Handle        = 0x80004008
	CO_E_INIT_CLASS_CACHE                                                     Handle        = 0x80004009
	CO_E_INIT_RPC_CHANNEL                                                     Handle        = 0x8000400A
	CO_E_INIT_TLS_SET_CHANNEL_CONTROL                                         Handle        = 0x8000400B
	CO_E_INIT_TLS_CHANNEL_CONTROL                                             Handle        = 0x8000400C
	CO_E_INIT_UNACCEPTED_USER_ALLOCATOR                                       Handle        = 0x8000400D
	CO_E_INIT_SCM_MUTEX_EXISTS                                                Handle        = 0x8000400E
	CO_E_INIT_SCM_FILE_MAPPING_EXISTS                                         Handle        = 0x8000400F
	CO_E_INIT_SCM_MAP_VIEW_OF_FILE                                            Handle        = 0x80004010
	CO_E_INIT_SCM_EXEC_FAILURE                                                Handle        = 0x80004011
	CO_E_INIT_ONLY_SINGLE_THREADED                                            Handle        = 0x80004012
	CO_E_CANT_REMOTE                                                          Handle        = 0x80004013
	CO_E_BAD_SERVER_NAME                                                      Handle        = 0x80004014
	CO_E_WRONG_SERVER_IDENTITY                                                Handle        = 0x80004015
	CO_E_OLE1DDE_DISABLED                                                     Handle        = 0x80004016
	CO_E_RUNAS_SYNTAX                                                         Handle        = 0x80004017
	CO_E_CREATEPROCESS_FAILURE                                                Handle        = 0x80004018
	CO_E_RUNAS_CREATEPROCESS_FAILURE                                          Handle        = 0x80004019
	CO_E_RUNAS_LOGON_FAILURE                                                  Handle        = 0x8000401A
	CO_E_LAUNCH_PERMSSION_DENIED                                              Handle        = 0x8000401B
	CO_E_START_SERVICE_FAILURE                                                Handle        = 0x8000401C
	CO_E_REMOTE_COMMUNICATION_FAILURE                                         Handle        = 0x8000401D
	CO_E_SERVER_START_TIMEOUT                                                 Handle        = 0x8000401E
	CO_E_CLSREG_INCONSISTENT                                                  Handle        = 0x8000401F
	CO_E_IIDREG_INCONSISTENT                                                  Handle        = 0x80004020
	CO_E_NOT_SUPPORTED                                                        Handle        = 0x80004021
	CO_E_RELOAD_DLL                                                           Handle        = 0x80004022
	CO_E_MSI_ERROR                                                            Handle        = 0x80004023
	CO_E_ATTEMPT_TO_CREATE_OUTSIDE_CLIENT_CONTEXT                             Handle        = 0x80004024
	CO_E_SERVER_PAUSED                                                        Handle        = 0x80004025
	CO_E_SERVER_NOT_PAUSED                                                    Handle        = 0x80004026
	CO_E_CLASS_DISABLED                                                       Handle        = 0x80004027
	CO_E_CLRNOTAVAILABLE                                                      Handle        = 0x80004028
	CO_E_ASYNC_WORK_REJECTED                                                  Handle        = 0x80004029
	CO_E_SERVER_INIT_TIMEOUT                                                  Handle        = 0x8000402A
	CO_E_NO_SECCTX_IN_ACTIVATE                                                Handle        = 0x8000402B
	CO_E_TRACKER_CONFIG                                                       Handle        = 0x80004030
	CO_E_THREADPOOL_CONFIG                                                    Handle        = 0x80004031
	CO_E_SXS_CONFIG                                                           Handle        = 0x80004032
	CO_E_MALFORMED_SPN                                                        Handle        = 0x80004033
	CO_E_UNREVOKED_REGISTRATION_ON_APARTMENT_SHUTDOWN                         Handle        = 0x80004034
	CO_E_PREMATURE_STUB_RUNDOWN                                               Handle        = 0x80004035
	S_OK                                                                      Handle        = 0
	S_FALSE                                                                   Handle        = 1
	OLE_E_FIRST                                                               Handle        = 0x80040000
	OLE_E_LAST                                                                Handle        = 0x800400FF
	OLE_S_FIRST                                                               Handle        = 0x00040000
	OLE_S_LAST                                                                Handle        = 0x000400FF
	OLE_E_OLEVERB                                                             Handle        = 0x80040000
	OLE_E_ADVF                                                                Handle        = 0x80040001
	OLE_E_ENUM_NOMORE                                                         Handle        = 0x80040002
	OLE_E_ADVISENOTSUPPORTED                                                  Handle        = 0x80040003
	OLE_E_NOCONNECTION                                                        Handle        = 0x80040004
	OLE_E_NOTRUNNING                                                          Handle        = 0x80040005
	OLE_E_NOCACHE                                                             Handle        = 0x80040006
	OLE_E_BLANK                                                               Handle        = 0x80040007
	OLE_E_CLASSDIFF                                                           Handle        = 0x80040008
	OLE_E_CANT_GETMONIKER                                                     Handle        = 0x80040009
	OLE_E_CANT_BINDTOSOURCE                                                   Handle        = 0x8004000A
	OLE_E_STATIC                                                              Handle        = 0x8004000B
	OLE_E_PROMPTSAVECANCELLED                                                 Handle        = 0x8004000C
	OLE_E_INVALIDRECT                                                         Handle        = 0x8004000D
	OLE_E_WRONGCOMPOBJ                                                        Handle        = 0x8004000E
	OLE_E_INVALIDHWND                                                         Handle        = 0x8004000F
	OLE_E_NOT_INPLACEACTIVE                                                   Handle        = 0x80040010
	OLE_E_CANTCONVERT                                                         Handle        = 0x80040011
	OLE_E_NOSTORAGE                                                           Handle        = 0x80040012
	DV_E_FORMATETC                                                            Handle        = 0x80040064
	DV_E_DVTARGETDEVICE                                                       Handle        = 0x80040065
	DV_E_STGMEDIUM                                                            Handle        = 0x80040066
	DV_E_STATDATA                                                             Handle        = 0x80040067
	DV_E_LINDEX                                                               Handle        = 0x80040068
	DV_E_TYMED                                                                Handle        = 0x80040069
	DV_E_CLIPFORMAT                                                           Handle        = 0x8004006A
	DV_E_DVASPECT                                                             Handle        = 0x8004006B
	DV_E_DVTARGETDEVICE_SIZE                                                  Handle        = 0x8004006C
	DV_E_NOIVIEWOBJECT                                                        Handle        = 0x8004006D
	DRAGDROP_E_FIRST                                                          syscall.Errno = 0x80040100
	DRAGDROP_E_LAST                                                           syscall.Errno = 0x8004010F
	DRAGDROP_S_FIRST                                                          syscall.Errno = 0x00040100
	DRAGDROP_S_LAST                                                           syscall.Errno = 0x0004010F
	DRAGDROP_E_NOTREGISTERED                                                  Handle        = 0x80040100
	DRAGDROP_E_ALREADYREGISTERED                                              Handle        = 0x80040101
	DRAGDROP_E_INVALIDHWND                                                    Handle        = 0x80040102
	DRAGDROP_E_CONCURRENT_DRAG_ATTEMPTED                                      Handle        = 0x80040103
	CLASSFACTORY_E_FIRST                                                      syscall.Errno = 0x80040110
	CLASSFACTORY_E_LAST                                                       syscall.Errno = 0x8004011F
	CLASSFACTORY_S_FIRST                                                      syscall.Errno = 0x00040110
	CLASSFACTORY_S_LAST                                                       syscall.Errno = 0x0004011F
	CLASS_E_NOAGGREGATION                                                     Handle        = 0x80040110
	CLASS_E_CLASSNOTAVAILABLE                                                 Handle        = 0x80040111
	CLASS_E_NOTLICENSED                                                       Handle        = 0x80040112
	MARSHAL_E_FIRST                                                           syscall.Errno = 0x80040120
	MARSHAL_E_LAST                                                            syscall.Errno = 0x8004012F
	MARSHAL_S_FIRST                                                           syscall.Errno = 0x00040120
	MARSHAL_S_LAST                                                            syscall.Errno = 0x0004012F
	DATA_E_FIRST                                                              syscall.Errno = 0x80040130
	DATA_E_LAST                                                               syscall.Errno = 0x8004013F
	DATA_S_FIRST                                                              syscall.Errno = 0x00040130
	DATA_S_LAST                                                               syscall.Errno = 0x0004013F
	VIEW_E_FIRST                                                              syscall.Errno = 0x80040140
	VIEW_E_LAST                                                               syscall.Errno = 0x8004014F
	VIEW_S_FIRST                                                              syscall.Errno = 0x00040140
	VIEW_S_LAST                                                               syscall.Errno = 0x0004014F
	VIEW_E_DRAW                                                               Handle        = 0x80040140
	REGDB_E_FIRST                                                             syscall.Errno = 0x80040150
	REGDB_E_LAST                                                              syscall.Errno = 0x8004015F
	REGDB_S_FIRST                                                             syscall.Errno = 0x00040150
	REGDB_S_LAST                                                              syscall.Errno = 0x0004015F
	REGDB_E_READREGDB                                                         Handle        = 0x80040150
	REGDB_E_WRITEREGDB                                                        Handle        = 0x80040151
	REGDB_E_KEYMISSING                                                        Handle        = 0x80040152
	REGDB_E_INVALIDVALUE                                                      Handle        = 0x80040153
	REGDB_E_CLASSNOTREG                                                       Handle        = 0x80040154
	REGDB_E_IIDNOTREG                                                         Handle        = 0x80040155
	REGDB_E_BADTHREADINGMODEL                                                 Handle        = 0x80040156
	REGDB_E_PACKAGEPOLICYVIOLATION                                            Handle        = 0x80040157
	CAT_E_FIRST                                                               syscall.Errno = 0x80040160
	CAT_E_LAST                                                                syscall.Errno = 0x80040161
	CAT_E_CATIDNOEXIST                                                        Handle        = 0x80040160
	CAT_E_NODESCRIPTION                                                       Handle        = 0x80040161
	CS_E_FIRST                                                                syscall.Errno = 0x80040164
	CS_E_LAST                                                                 syscall.Errno = 0x8004016F
	CS_E_PACKAGE_NOTFOUND                                                     Handle        = 0x80040164
	CS_E_NOT_DELETABLE                                                        Handle        = 0x80040165
	CS_E_CLASS_NOTFOUND                                                       Handle        = 0x80040166
	CS_E_INVALID_VERSION                                                      Handle        = 0x80040167
	CS_E_NO_CLASSSTORE                                                        Handle        = 0x80040168
	CS_E_OBJECT_NOTFOUND                                                      Handle        = 0x80040169
	CS_E_OBJECT_ALREADY_EXISTS                                                Handle        = 0x8004016A
	CS_E_INVALID_PATH                                                         Handle        = 0x8004016B
	CS_E_NETWORK_ERROR                                                        Handle        = 0x8004016C
	CS_E_ADMIN_LIMIT_EXCEEDED                                                 Handle        = 0x8004016D
	CS_E_SCHEMA_MISMATCH                                                      Handle        = 0x8004016E
	CS_E_INTERNAL_ERROR                                                       Handle        = 0x8004016F
	CACHE_E_FIRST                                                             syscall.Errno = 0x80040170
	CACHE_E_LAST                                                              syscall.Errno = 0x8004017F
	CACHE_S_FIRST                                                             syscall.Errno = 0x00040170
	CACHE_S_LAST                                                              syscall.Errno = 0x0004017F
	CACHE_E_NOCACHE_UPDATED                                                   Handle        = 0x80040170
	OLEOBJ_E_FIRST                                                            syscall.Errno = 0x80040180
	OLEOBJ_E_LAST                                                             syscall.Errno = 0x8004018F
	OLEOBJ_S_FIRST                                                            syscall.Errno = 0x00040180
	OLEOBJ_S_LAST                                                             syscall.Errno = 0x0004018F
	OLEOBJ_E_NOVERBS                                                          Handle        = 0x80040180
	OLEOBJ_E_INVALIDVERB                                                      Handle        = 0x80040181
	CLIENTSITE_E_FIRST                                                        syscall.Errno = 0x80040190
	CLIENTSITE_E_LAST                                                         syscall.Errno = 0x8004019F
	CLIENTSITE_S_FIRST                                                        syscall.Errno = 0x00040190
	CLIENTSITE_S_LAST                                                         syscall.Errno = 0x0004019F
	INPLACE_E_NOTUNDOABLE                                                     Handle        = 0x800401A0
	INPLACE_E_NOTOOLSPACE                                                     Handle        = 0x800401A1
	INPLACE_E_FIRST                                                           syscall.Errno = 0x800401A0
	INPLACE_E_LAST                                                            syscall.Errno = 0x800401AF
	INPLACE_S_FIRST                                                           syscall.Errno = 0x000401A0
	INPLACE_S_LAST                                                            syscall.Errno = 0x000401AF
	ENUM_E_FIRST                                                              syscall.Errno = 0x800401B0
	ENUM_E_LAST                                                               syscall.Errno = 0x800401BF
	ENUM_S_FIRST                                                              syscall.Errno = 0x000401B0
	ENUM_S_LAST                                                               syscall.Errno = 0x000401BF
	CONVERT10_E_FIRST                                                         syscall.Errno = 0x800401C0
	CONVERT10_E_LAST                                                          syscall.Errno = 0x800401CF
	CONVERT10_S_FIRST                                                         syscall.Errno = 0x000401C0
	CONVERT10_S_LAST                                                          syscall.Errno = 0x000401CF
	CONVERT10_E_OLESTREAM_GET                                                 Handle        = 0x800401C0
	CONVERT10_E_OLESTREAM_PUT                                                 Handle        = 0x800401C1
	CONVERT10_E_OLESTREAM_FMT                                                 Handle        = 0x800401C2
	CONVERT10_E_OLESTREAM_BITMAP_TO_DIB                                       Handle        = 0x800401C3
	CONVERT10_E_STG_FMT                                                       Handle        = 0x800401C4
	CONVERT10_E_STG_NO_STD_STREAM                                             Handle        = 0x800401C5
	CONVERT10_E_STG_DIB_TO_BITMAP                                             Handle        = 0x800401C6
	CLIPBRD_E_FIRST                                                           syscall.Errno = 0x800401D0
	CLIPBRD_E_LAST                                                            syscall.Errno = 0x800401DF
	CLIPBRD_S_FIRST                                                           syscall.Errno = 0x000401D0
	CLIPBRD_S_LAST                                                            syscall.Errno = 0x000401DF
	CLIPBRD_E_CANT_OPEN                                                       Handle        = 0x800401D0
	CLIPBRD_E_CANT_EMPTY                                                      Handle        = 0x800401D1
	CLIPBRD_E_CANT_SET                                                        Handle        = 0x800401D2
	CLIPBRD_E_BAD_DATA                                                        Handle        = 0x800401D3
	CLIPBRD_E_CANT_CLOSE                                                      Handle        = 0x800401D4
	MK_E_FIRST                                                                syscall.Errno = 0x800401E0
	MK_E_LAST                                                                 syscall.Errno = 0x800401EF
	MK_S_FIRST                                                                syscall.Errno = 0x000401E0
	MK_S_LAST                                                                 syscall.Errno = 0x000401EF
	MK_E_CONNECTMANUALLY                                                      Handle        = 0x800401E0
	MK_E_EXCEEDEDDEADLINE                                                     Handle        = 0x800401E1
	MK_E_NEEDGENERIC                                                          Handle        = 0x800401E2
	MK_E_UNAVAILABLE                                                          Handle        = 0x800401E3
	MK_E_SYNTAX                                                               Handle        = 0x800401E4
	MK_E_NOOBJECT                                                             Handle        = 0x800401E5
	MK_E_INVALIDEXTENSION                                                     Handle        = 0x800401E6
	MK_E_INTERMEDIATEINTERFACENOTSUPPORTED                                    Handle        = 0x800401E7
	MK_E_NOTBINDABLE                                                          Handle        = 0x800401E8
	MK_E_NOTBOUND                                                             Handle        = 0x800401E9
	MK_E_CANTOPENFILE                                                         Handle        = 0x800401EA
	MK_E_MUSTBOTHERUSER                                                       Handle        = 0x800401EB
	MK_E_NOINVERSE                                                            Handle        = 0x800401EC
	MK_E_NOSTORAGE                                                            Handle        = 0x800401ED
	MK_E_NOPREFIX                                                             Handle        = 0x800401EE
	MK_E_ENUMERATION_FAILED                                                   Handle        = 0x800401EF
	CO_E_FIRST                                                                syscall.Errno = 0x800401F0
	CO_E_LAST                                                                 syscall.Errno = 0x800401FF
	CO_S_FIRST                                                                syscall.Errno = 0x000401F0
	CO_S_LAST                                                                 syscall.Errno = 0x000401FF
	CO_E_NOTINITIALIZED                                                       Handle        = 0x800401F0
	CO_E_ALREADYINITIALIZED                                                   Handle        = 0x800401F1
	CO_E_CANTDETERMINECLASS                                                   Handle        = 0x800401F2
	CO_E_CLASSSTRING                                                          Handle        = 0x800401F3
	CO_E_IIDSTRING                                                            Handle        = 0x800401F4
	CO_E_APPNOTFOUND                                                          Handle        = 0x800401F5
	CO_E_APPSINGLEUSE                                                         Handle        = 0x800401F6
	CO_E_ERRORINAPP                                                           Handle        = 0x800401F7
	CO_E_DLLNOTFOUND                                                          Handle        = 0x800401F8
	CO_E_ERRORINDLL                                                           Handle        = 0x800401F9
	CO_E_WRONGOSFORAPP                                                        Handle        = 0x800401FA
	CO_E_OBJNOTREG                                                            Handle        = 0x800401FB
	CO_E_OBJISREG                                                             Handle        = 0x800401FC
	CO_E_OBJNOTCONNECTED                                                      Handle        = 0x800401FD
	CO_E_APPDIDNTREG                                                          Handle        = 0x800401FE
	CO_E_RELEASED                                                             Handle        = 0x800401FF
	EVENT_E_FIRST                                                             syscall.Errno = 0x80040200
	EVENT_E_LAST                                                              syscall.Errno = 0x8004021F
	EVENT_S_FIRST                                                             syscall.Errno = 0x00040200
	EVENT_S_LAST                                                              syscall.Errno = 0x0004021F
	EVENT_S_SOME_SUBSCRIBERS_FAILED                                           Handle        = 0x00040200
	EVENT_E_ALL_SUBSCRIBERS_FAILED                                            Handle        = 0x80040201
	EVENT_S_NOSUBSCRIBERS                                                     Handle        = 0x00040202
	EVENT_E_QUERYSYNTAX                                                       Handle        = 0x80040203
	EVENT_E_QUERYFIELD                                                        Handle        = 0x80040204
	EVENT_E_INTERNALEXCEPTION                                                 Handle        = 0x80040205
	EVENT_E_INTERNALERROR                                                     Handle        = 0x80040206
	EVENT_E_INVALID_PER_USER_SID                                              Handle        = 0x80040207
	EVENT_E_USER_EXCEPTION                                                    Handle        = 0x80040208
	EVENT_E_TOO_MANY_METHODS                                                  Handle        = 0x80040209
	EVENT_E_MISSING_EVENTCLASS                                                Handle        = 0x8004020A
	EVENT_E_NOT_ALL_REMOVED                                                   Handle        = 0x8004020B
	EVENT_E_COMPLUS_NOT_INSTALLED                                             Handle        = 0x8004020C
	EVENT_E_CANT_MODIFY_OR_DELETE_UNCONFIGURED_OBJECT                         Handle        = 0x8004020D
	EVENT_E_CANT_MODIFY_OR_DELETE_CONFIGURED_OBJECT                           Handle        = 0x8004020E
	EVENT_E_INVALID_EVENT_CLASS_PARTITION                                     Handle        = 0x8004020F
	EVENT_E_PER_USER_SID_NOT_LOGGED_ON                                        Handle        = 0x80040210
	TPC_E_INVALID_PROPERTY                                                    Handle        = 0x80040241
	TPC_E_NO_DEFAULT_TABLET                                                   Handle        = 0x80040212
	TPC_E_UNKNOWN_PROPERTY                                                    Handle        = 0x8004021B
	TPC_E_INVALID_INPUT_RECT                                                  Handle        = 0x80040219
	TPC_E_INVALID_STROKE                                                      Handle        = 0x80040222
	TPC_E_INITIALIZE_FAIL                                                     Handle        = 0x80040223
	TPC_E_NOT_RELEVANT                                                        Handle        = 0x80040232
	TPC_E_INVALID_PACKET_DESCRIPTION                                          Handle        = 0x80040233
	TPC_E_RECOGNIZER_NOT_REGISTERED                                           Handle        = 0x80040235
	TPC_E_INVALID_RIGHTS                                                      Handle        = 0x80040236
	TPC_E_OUT_OF_ORDER_CALL                                                   Handle        = 0x80040237
	TPC_E_QUEUE_FULL                                                          Handle        = 0x80040238
	TPC_E_INVALID_CONFIGURATION                                               Handle        = 0x80040239
	TPC_E_INVALID_DATA_FROM_RECOGNIZER                                        Handle        = 0x8004023A
	TPC_S_TRUNCATED                                                           Handle        = 0x00040252
	TPC_S_INTERRUPTED                                                         Handle        = 0x00040253
	TPC_S_NO_DATA_TO_PROCESS                                                  Handle        = 0x00040254
	XACT_E_FIRST                                                              syscall.Errno = 0x8004D000
	XACT_E_LAST                                                               syscall.Errno = 0x8004D02B
	XACT_S_FIRST                                                              syscall.Errno = 0x0004D000
	XACT_S_LAST                                                               syscall.Errno = 0x0004D010
	XACT_E_ALREADYOTHERSINGLEPHASE                                            Handle        = 0x8004D000
	XACT_E_CANTRETAIN                                                         Handle        = 0x8004D001
	XACT_E_COMMITFAILED                                                       Handle        = 0x8004D002
	XACT_E_COMMITPREVENTED                                                    Handle        = 0x8004D003
	XACT_E_HEURISTICABORT                                                     Handle        = 0x8004D004
	XACT_E_HEURISTICCOMMIT                                                    Handle        = 0x8004D005
	XACT_E_HEURISTICDAMAGE                                                    Handle        = 0x8004D006
	XACT_E_HEURISTICDANGER                                                    Handle        = 0x8004D007
	XACT_E_ISOLATIONLEVEL                                                     Handle        = 0x8004D008
	XACT_E_NOASYNC                                                            Handle        = 0x8004D009
	XACT_E_NOENLIST                                                           Handle        = 0x8004D00A
	XACT_E_NOISORETAIN                                                        Handle        = 0x8004D00B
	XACT_E_NORESOURCE                                                         Handle        = 0x8004D00C
	XACT_E_NOTCURRENT                                                         Handle        = 0x8004D00D
	XACT_E_NOTRANSACTION                                                      Handle        = 0x8004D00E
	XACT_E_NOTSUPPORTED                                                       Handle        = 0x8004D00F
	XACT_E_UNKNOWNRMGRID                                                      Handle        = 0x8004D010
	XACT_E_WRONGSTATE                                                         Handle        = 0x8004D011
	XACT_E_WRONGUOW                                                           Handle        = 0x8004D012
	XACT_E_XTIONEXISTS                                                        Handle        = 0x8004D013
	XACT_E_NOIMPORTOBJECT                                                     Handle        = 0x8004D014
	XACT_E_INVALIDCOOKIE                                                      Handle        = 0x8004D015
	XACT_E_INDOUBT                                                            Handle        = 0x8004D016
	XACT_E_NOTIMEOUT                                                          Handle        = 0x8004D017
	XACT_E_ALREADYINPROGRESS                                                  Handle        = 0x8004D018
	XACT_E_ABORTED                                                            Handle        = 0x8004D019
	XACT_E_LOGFULL                                                            Handle        = 0x8004D01A
	XACT_E_TMNOTAVAILABLE                                                     Handle        = 0x8004D01B
	XACT_E_CONNECTION_DOWN                                                    Handle        = 0x8004D01C
	XACT_E_CONNECTION_DENIED                                                  Handle        = 0x8004D01D
	XACT_E_REENLISTTIMEOUT                                                    Handle        = 0x8004D01E
	XACT_E_TIP_CONNECT_FAILED                                                 Handle        = 0x8004D01F
	XACT_E_TIP_PROTOCOL_ERROR                                                 Handle        = 0x8004D020
	XACT_E_TIP_PULL_FAILED                                                    Handle        = 0x8004D021
	XACT_E_DEST_TMNOTAVAILABLE                                                Handle        = 0x8004D022
	XACT_E_TIP_DISABLED                                                       Handle        = 0x8004D023
	XACT_E_NETWORK_TX_DISABLED                                                Handle        = 0x8004D024
	XACT_E_PARTNER_NETWORK_TX_DISABLED                                        Handle        = 0x8004D025
	XACT_E_XA_TX_DISABLED                                                     Handle        = 0x8004D026
	XACT_E_UNABLE_TO_READ_DTC_CONFIG                                          Handle        = 0x8004D027
	XACT_E_UNABLE_TO_LOAD_DTC_PROXY                                           Handle        = 0x8004D028
	XACT_E_ABORTING                                                           Handle        = 0x8004D029
	XACT_E_PUSH_COMM_FAILURE                                                  Handle        = 0x8004D02A
	XACT_E_PULL_COMM_FAILURE                                                  Handle        = 0x8004D02B
	XACT_E_LU_TX_DISABLED                                                     Handle        = 0x8004D02C
	XACT_E_CLERKNOTFOUND                                                      Handle        = 0x8004D080
	XACT_E_CLERKEXISTS                                                        Handle        = 0x8004D081
	XACT_E_RECOVERYINPROGRESS                                                 Handle        = 0x8004D082
	XACT_E_TRANSACTIONCLOSED                                                  Handle        = 0x8004D083
	XACT_E_INVALIDLSN                                                         Handle        = 0x8004D084
	XACT_E_REPLAYREQUEST                                                      Handle        = 0x8004D085
	XACT_S_ASYNC                                                              Handle        = 0x0004D000
	XACT_S_DEFECT                                                             Handle        = 0x0004D001
	XACT_S_READONLY                                                           Handle        = 0x0004D002
	XACT_S_SOMENORETAIN                                                       Handle        = 0x0004D003
	XACT_S_OKINFORM                                                           Handle        = 0x0004D004
	XACT_S_MADECHANGESCONTENT                                                 Handle        = 0x0004D005
	XACT_S_MADECHANGESINFORM                                                  Handle        = 0x0004D006
	XACT_S_ALLNORETAIN                                                        Handle        = 0x0004D007
	XACT_S_ABORTING                                                           Handle        = 0x0004D008
	XACT_S_SINGLEPHASE                                                        Handle        = 0x0004D009
	XACT_S_LOCALLY_OK                                                         Handle        = 0x0004D00A
	XACT_S_LASTRESOURCEMANAGER                                                Handle        = 0x0004D010
	CONTEXT_E_FIRST                                                           syscall.Errno = 0x8004E000
	CONTEXT_E_LAST                                                            syscall.Errno = 0x8004E02F
	CONTEXT_S_FIRST                                                           syscall.Errno = 0x0004E000
	CONTEXT_S_LAST                                                            syscall.Errno = 0x0004E02F
	CONTEXT_E_ABORTED                                                         Handle        = 0x8004E002
	CONTEXT_E_ABORTING                                                        Handle        = 0x8004E003
	CONTEXT_E_NOCONTEXT                                                       Handle        = 0x8004E004
	CONTEXT_E_WOULD_DEADLOCK                                                  Handle        = 0x8004E005
	CONTEXT_E_SYNCH_TIMEOUT                                                   Handle        = 0x8004E006
	CONTEXT_E_OLDREF                                                          Handle        = 0x8004E007
	CONTEXT_E_ROLENOTFOUND                                                    Handle        = 0x8004E00C
	CONTEXT_E_TMNOTAVAILABLE                                                  Handle        = 0x8004E00F
	CO_E_ACTIVATIONFAILED                                                     Handle        = 0x8004E021
	CO_E_ACTIVATIONFAILED_EVENTLOGGED                                         Handle        = 0x8004E022
	CO_E_ACTIVATIONFAILED_CATALOGERROR                                        Handle        = 0x8004E023
	CO_E_ACTIVATIONFAILED_TIMEOUT                                             Handle        = 0x8004E024
	CO_E_INITIALIZATIONFAILED                                                 Handle        = 0x8004E025
	CONTEXT_E_NOJIT                                                           Handle        = 0x8004E026
	CONTEXT_E_NOTRANSACTION                                                   Handle        = 0x8004E027
	CO_E_THREADINGMODEL_CHANGED                                               Handle        = 0x8004E028
	CO_E_NOIISINTRINSICS                                                      Handle        = 0x8004E029
	CO_E_NOCOOKIES                                                            Handle        = 0x8004E02A
	CO_E_DBERROR                                                              Handle        = 0x8004E02B
	CO_E_NOTPOOLED                                                            Handle        = 0x8004E02C
	CO_E_NOTCONSTRUCTED                                                       Handle        = 0x8004E02D
	CO_E_NOSYNCHRONIZATION                                                    Handle        = 0x8004E02E
	CO_E_ISOLEVELMISMATCH                                                     Handle        = 0x8004E02F
	CO_E_CALL_OUT_OF_TX_SCOPE_NOT_ALLOWED                                     Handle        = 0x8004E030
	CO_E_EXIT_TRANSACTION_SCOPE_NOT_CALLED                                    Handle        = 0x8004E031
	OLE_S_USEREG                                                              Handle        = 0x00040000
	OLE_S_STATIC                                                              Handle        = 0x00040001
	OLE_S_MAC_CLIPFORMAT                                                      Handle        = 0x00040002
	DRAGDROP_S_DROP                                                           Handle        = 0x00040100
	DRAGDROP_S_CANCEL                                                         Handle        = 0x00040101
	DRAGDROP_S_USEDEFAULTCURSORS                                              Handle        = 0x00040102
	DATA_S_SAMEFORMATETC                                                      Handle        = 0x00040130
	VIEW_S_ALREADY_FROZEN                                                     Handle        = 0x00040140
	CACHE_S_FORMATETC_NOTSUPPORTED                                            Handle        = 0x00040170
	CACHE_S_SAMECACHE                                                         Handle        = 0x00040171
	CACHE_S_SOMECACHES_NOTUPDATED                                             Handle        = 0x00040172
	OLEOBJ_S_INVALIDVERB                                                      Handle        = 0x00040180
	OLEOBJ_S_CANNOT_DOVERB_NOW                                                Handle        = 0x00040181
	OLEOBJ_S_INVALIDHWND                                                      Handle        = 0x00040182
	INPLACE_S_TRUNCATED                                                       Handle        = 0x000401A0
	CONVERT10_S_NO_PRESENTATION                                               Handle        = 0x000401C0
	MK_S_REDUCED_TO_SELF                                                      Handle        = 0x000401E2
	MK_S_ME                                                                   Handle        = 0x000401E4
	MK_S_HIM                                                                  Handle        = 0x000401E5
	MK_S_US                                                                   Handle        = 0x000401E6
	MK_S_MONIKERALREADYREGISTERED                                             Handle        = 0x000401E7
	SCHED_S_TASK_READY                                                        Handle        = 0x00041300
	SCHED_S_TASK_RUNNING                                                      Handle        = 0x00041301
	SCHED_S_TASK_DISABLED                                                     Handle        = 0x00041302
	SCHED_S_TASK_HAS_NOT_RUN                                                  Handle        = 0x00041303
	SCHED_S_TASK_NO_MORE_RUNS                                                 Handle        = 0x00041304
	SCHED_S_TASK_NOT_SCHEDULED                                                Handle        = 0x00041305
	SCHED_S_TASK_TERMINATED                                                   Handle        = 0x00041306
	SCHED_S_TASK_NO_VALID_TRIGGERS                                            Handle        = 0x00041307
	SCHED_S_EVENT_TRIGGER                                                     Handle        = 0x00041308
	SCHED_E_TRIGGER_NOT_FOUND                                                 Handle        = 0x80041309
	SCHED_E_TASK_NOT_READY                                                    Handle        = 0x8004130A
	SCHED_E_TASK_NOT_RUNNING                                                  Handle        = 0x8004130B
	SCHED_E_SERVICE_NOT_INSTALLED                                             Handle        = 0x8004130C
	SCHED_E_CANNOT_OPEN_TASK                                                  Handle        = 0x8004130D
	SCHED_E_INVALID_TASK                                                      Handle        = 0x8004130E
	SCHED_E_ACCOUNT_INFORMATION_NOT_SET                                       Handle        = 0x8004130F
	SCHED_E_ACCOUNT_NAME_NOT_FOUND                                            Handle        = 0x80041310
	SCHED_E_ACCOUNT_DBASE_CORRUPT                                             Handle        = 0x80041311
	SCHED_E_NO_SECURITY_SERVICES                                              Handle        = 0x80041312
	SCHED_E_UNKNOWN_OBJECT_VERSION                                            Handle        = 0x80041313
	SCHED_E_UNSUPPORTED_ACCOUNT_OPTION                                        Handle        = 0x80041314
	SCHED_E_SERVICE_NOT_RUNNING                                               Handle        = 0x80041315
	SCHED_E_UNEXPECTEDNODE                                                    Handle        = 0x80041316
	SCHED_E_NAMESPACE                                                         Handle        = 0x80041317
	SCHED_E_INVALIDVALUE                                                      Handle        = 0x80041318
	SCHED_E_MISSINGNODE                                                       Handle        = 0x80041319
	SCHED_E_MALFORMEDXML                                                      Handle        = 0x8004131A
	SCHED_S_SOME_TRIGGERS_FAILED                                              Handle        = 0x0004131B
	SCHED_S_BATCH_LOGON_PROBLEM                                               Handle        = 0x0004131C
	SCHED_E_TOO_MANY_NODES                                                    Handle        = 0x8004131D
	SCHED_E_PAST_END_BOUNDARY                                                 Handle        = 0x8004131E
	SCHED_E_ALREADY_RUNNING                                                   Handle        = 0x8004131F
	SCHED_E_USER_NOT_LOGGED_ON                                                Handle        = 0x80041320
	SCHED_E_INVALID_TASK_HASH                                                 Handle        = 0x80041321
	SCHED_E_SERVICE_NOT_AVAILABLE                                             Handle        = 0x80041322
	SCHED_E_SERVICE_TOO_BUSY                                                  Handle        = 0x80041323
	SCHED_E_TASK_ATTEMPTED                                                    Handle        = 0x80041324
	SCHED_S_TASK_QUEUED                                                       Handle        = 0x00041325
	SCHED_E_TASK_DISABLED                                                     Handle        = 0x80041326
	SCHED_E_TASK_NOT_V1_COMPAT                                                Handle        = 0x80041327
	SCHED_E_START_ON_DEMAND                                                   Handle        = 0x80041328
	SCHED_E_TASK_NOT_UBPM_COMPAT                                              Handle        = 0x80041329
	SCHED_E_DEPRECATED_FEATURE_USED                                           Handle        = 0x80041330
	CO_E_CLASS_CREATE_FAILED                                                  Handle        = 0x80080001
	CO_E_SCM_ERROR                                                            Handle        = 0x80080002
	CO_E_SCM_RPC_FAILURE                                                      Handle        = 0x80080003
	CO_E_BAD_PATH                                                             Handle        = 0x80080004
	CO_E_SERVER_EXEC_FAILURE                                                  Handle        = 0x80080005
	CO_E_OBJSRV_RPC_FAILURE                                                   Handle        = 0x80080006
	MK_E_NO_NORMALIZED                                                        Handle        = 0x80080007
	CO_E_SERVER_STOPPING                                                      Handle        = 0x80080008
	MEM_E_INVALID_ROOT                                                        Handle        = 0x80080009
	MEM_E_INVALID_LINK                                                        Handle        = 0x80080010
	MEM_E_INVALID_SIZE                                                        Handle        = 0x80080011
	CO_S_NOTALLINTERFACES                                                     Handle        = 0x00080012
	CO_S_MACHINENAMENOTFOUND                                                  Handle        = 0x00080013
	CO_E_MISSING_DISPLAYNAME                                                  Handle        = 0x80080015
	CO_E_RUNAS_VALUE_MUST_BE_AAA                                              Handle        = 0x80080016
	CO_E_ELEVATION_DISABLED                                                   Handle        = 0x80080017
	APPX_E_PACKAGING_INTERNAL                                                 Handle        = 0x80080200
	APPX_E_INTERLEAVING_NOT_ALLOWED                                           Handle        = 0x80080201
	APPX_E_RELATIONSHIPS_NOT_ALLOWED                                          Handle        = 0x80080202
	APPX_E_MISSING_REQUIRED_FILE                                              Handle        = 0x80080203
	APPX_E_INVALID_MANIFEST                                                   Handle        = 0x80080204
	APPX_E_INVALID_BLOCKMAP                                                   Handle        = 0x80080205
	APPX_E_CORRUPT_CONTENT                                                    Handle        = 0x80080206
	APPX_E_BLOCK_HASH_INVALID                                                 Handle        = 0x80080207
	APPX_E_REQUESTED_RANGE_TOO_LARGE                                          Handle        = 0x80080208
	APPX_E_INVALID_SIP_CLIENT_DATA                                            Handle        = 0x80080209
	APPX_E_INVALID_KEY_INFO                                                   Handle        = 0x8008020A
	APPX_E_INVALID_CONTENTGROUPMAP                                            Handle        = 0x8008020B
	APPX_E_INVALID_APPINSTALLER                                               Handle        = 0x8008020C
	APPX_E_DELTA_BASELINE_VERSION_MISMATCH                                    Handle        = 0x8008020D
	APPX_E_DELTA_PACKAGE_MISSING_FILE                                         Handle        = 0x8008020E
	APPX_E_INVALID_DELTA_PACKAGE                                              Handle        = 0x8008020F
	APPX_E_DELTA_APPENDED_PACKAGE_NOT_ALLOWED                                 Handle        = 0x80080210
	APPX_E_INVALID_PACKAGING_LAYOUT                                           Handle        = 0x80080211
	APPX_E_INVALID_PACKAGESIGNCONFIG                                          Handle        = 0x80080212
	APPX_E_RESOURCESPRI_NOT_ALLOWED                                           Handle        = 0x80080213
	APPX_E_FILE_COMPRESSION_MISMATCH                                          Handle        = 0x80080214
	APPX_E_INVALID_PAYLOAD_PACKAGE_EXTENSION                                  Handle        = 0x80080215
	APPX_E_INVALID_ENCRYPTION_EXCLUSION_FILE_LIST                             Handle        = 0x80080216
	BT_E_SPURIOUS_ACTIVATION                                                  Handle        = 0x80080300
	DISP_E_UNKNOWNINTERFACE                                                   Handle        = 0x80020001
	DISP_E_MEMBERNOTFOUND                                                     Handle        = 0x80020003
	DISP_E_PARAMNOTFOUND                                                      Handle        = 0x80020004
	DISP_E_TYPEMISMATCH                                                       Handle        = 0x80020005
	DISP_E_UNKNOWNNAME                                                        Handle        = 0x80020006
	DISP_E_NONAMEDARGS                                                        Handle        = 0x80020007
	DISP_E_BADVARTYPE                                                         Handle        = 0x80020008
	DISP_E_EXCEPTION                                                          Handle        = 0x80020009
	DISP_E_OVERFLOW                                                           Handle        = 0x8002000A
	DISP_E_BADINDEX                                                           Handle        = 0x8002000B
	DISP_E_UNKNOWNLCID                                                        Handle        = 0x8002000C
	DISP_E_ARRAYISLOCKED                                                      Handle        = 0x8002000D
	DISP_E_BADPARAMCOUNT                                                      Handle        = 0x8002000E
	DISP_E_PARAMNOTOPTIONAL                                                   Handle        = 0x8002000F
	DISP_E_BADCALLEE                                                          Handle        = 0x80020010
	DISP_E_NOTACOLLECTION                                                     Handle        = 0x80020011
	DISP_E_DIVBYZERO                                                          Handle        = 0x80020012
	DISP_E_BUFFERTOOSMALL                                                     Handle        = 0x80020013
	TYPE_E_BUFFERTOOSMALL                                                     Handle        = 0x80028016
	TYPE_E_FIELDNOTFOUND                                                      Handle        = 0x80028017
	TYPE_E_INVDATAREAD                                                        Handle        = 0x80028018
	TYPE_E_UNSUPFORMAT                                                        Handle        = 0x80028019
	TYPE_E_REGISTRYACCESS                                                     Handle        = 0x8002801C
	TYPE_E_LIBNOTREGISTERED                                                   Handle        = 0x8002801D
	TYPE_E_UNDEFINEDTYPE                                                      Handle        = 0x80028027
	TYPE_E_QUALIFIEDNAMEDISALLOWED                                            Handle        = 0x80028028
	TYPE_E_INVALIDSTATE                                                       Handle        = 0x80028029
	TYPE_E_WRONGTYPEKIND                                                      Handle        = 0x8002802A
	TYPE_E_ELEMENTNOTFOUND                                                    Handle        = 0x8002802B
	TYPE_E_AMBIGUOUSNAME                                                      Handle        = 0x8002802C
	TYPE_E_NAMECONFLICT                                                       Handle        = 0x8002802D
	TYPE_E_UNKNOWNLCID                                                        Handle        = 0x8002802E
	TYPE_E_DLLFUNCTIONNOTFOUND                                                Handle        = 0x8002802F
	TYPE_E_BADMODULEKIND                                                      Handle        = 0x800288BD
	TYPE_E_SIZETOOBIG                                                         Handle        = 0x800288C5
	TYPE_E_DUPLICATEID                                                        Handle        = 0x800288C6
	TYPE_E_INVALIDID                                                          Handle        = 0x800288CF
	TYPE_E_TYPEMISMATCH                                                       Handle        = 0x80028CA0
	TYPE_E_OUTOFBOUNDS                                                        Handle        = 0x80028CA1
	TYPE_E_IOERROR                                                            Handle        = 0x80028CA2
	TYPE_E_CANTCREATETMPFILE                                                  Handle        = 0x80028CA3
	TYPE_E_CANTLOADLIBRARY                                                    Handle        = 0x80029C4A
	TYPE_E_INCONSISTENTPROPFUNCS                                              Handle        = 0x80029C83
	TYPE_E_CIRCULARTYPE                                                       Handle        = 0x80029C84
	STG_E_INVALIDFUNCTION                                                     Handle        = 0x80030001
	STG_E_FILENOTFOUND                                                        Handle        = 0x80030002
	STG_E_PATHNOTFOUND                                                        Handle        = 0x80030003
	STG_E_TOOMANYOPENFILES                                                    Handle        = 0x80030004
	STG_E_ACCESSDENIED                                                        Handle        = 0x80030005
	STG_E_INVALIDHANDLE                                                       Handle        = 0x80030006
	STG_E_INSUFFICIENTMEMORY                                                  Handle        = 0x80030008
	STG_E_INVALIDPOINTER                                                      Handle        = 0x80030009
	STG_E_NOMOREFILES                                                         Handle        = 0x80030012
	STG_E_DISKISWRITEPROTECTED                                                Handle        = 0x80030013
	STG_E_SEEKERROR                                                           Handle        = 0x80030019
	STG_E_WRITEFAULT                                                          Handle        = 0x8003001D
	STG_E_READFAULT                                                           Handle        = 0x8003001E
	STG_E_SHAREVIOLATION                                                      Handle        = 0x80030020
	STG_E_LOCKVIOLATION                                                       Handle        = 0x80030021
	STG_E_FILEALREADYEXISTS                                                   Handle        = 0x80030050
	STG_E_INVALIDPARAMETER                                                    Handle        = 0x80030057
	STG_E_MEDIUMFULL                                                          Handle        = 0x80030070
	STG_E_PROPSETMISMATCHED                                                   Handle        = 0x800300F0
	STG_E_ABNORMALAPIEXIT                                                     Handle        = 0x800300FA
	STG_E_INVALIDHEADER                                                       Handle        = 0x800300FB
	STG_E_INVALIDNAME                                                         Handle        = 0x800300FC
	STG_E_UNKNOWN                                                             Handle        = 0x800300FD
	STG_E_UNIMPLEMENTEDFUNCTION                                               Handle        = 0x800300FE
	STG_E_INVALIDFLAG                                                         Handle        = 0x800300FF
	STG_E_INUSE                                                               Handle        = 0x80030100
	STG_E_NOTCURRENT                                                          Handle        = 0x80030101
	STG_E_REVERTED                                                            Handle        = 0x80030102
	STG_E_CANTSAVE                                                            Handle        = 0x80030103
	STG_E_OLDFORMAT                                                           Handle        = 0x80030104
	STG_E_OLDDLL                                                              Handle        = 0x80030105
	STG_E_SHAREREQUIRED                                                       Handle        = 0x80030106
	STG_E_NOTFILEBASEDSTORAGE                                                 Handle        = 0x80030107
	STG_E_EXTANTMARSHALLINGS                                                  Handle        = 0x80030108
	STG_E_DOCFILECORRUPT                                                      Handle        = 0x80030109
	STG_E_BADBASEADDRESS                                                      Handle        = 0x80030110
	STG_E_DOCFILETOOLARGE                                                     Handle        = 0x80030111
	STG_E_NOTSIMPLEFORMAT                                                     Handle        = 0x80030112
	STG_E_INCOMPLETE                                                          Handle        = 0x80030201
	STG_E_TERMINATED                                                          Handle        = 0x80030202
	STG_S_CONVERTED                                                           Handle        = 0x00030200
	STG_S_BLOCK                                                               Handle        = 0x00030201
	STG_S_RETRYNOW                                                            Handle        = 0x00030202
	STG_S_MONITORING                                                          Handle        = 0x00030203
	STG_S_MULTIPLEOPENS                                                       Handle        = 0x00030204
	STG_S_CONSOLIDATIONFAILED                                                 Handle        = 0x00030205
	STG_S_CANNOTCONSOLIDATE                                                   Handle        = 0x00030206
	STG_S_POWER_CYCLE_REQUIRED                                                Handle        = 0x00030207
	STG_E_FIRMWARE_SLOT_INVALID                                               Handle        = 0x80030208
	STG_E_FIRMWARE_IMAGE_INVALID                                              Handle        = 0x80030209
	STG_E_DEVICE_UNRESPONSIVE                                                 Handle        = 0x8003020A
	STG_E_STATUS_COPY_PROTECTION_FAILURE                                      Handle        = 0x80030305
	STG_E_CSS_AUTHENTICATION_FAILURE                                          Handle        = 0x80030306
	STG_E_CSS_KEY_NOT_PRESENT                                                 Handle        = 0x80030307
	STG_E_CSS_KEY_NOT_ESTABLISHED                                             Handle        = 0x80030308
	STG_E_CSS_SCRAMBLED_SECTOR                                                Handle        = 0x80030309
	STG_E_CSS_REGION_MISMATCH                                                 Handle        = 0x8003030A
	STG_E_RESETS_EXHAUSTED                                                    Handle        = 0x8003030B
	RPC_E_CALL_REJECTED                                                       Handle        = 0x80010001
	RPC_E_CALL_CANCELED                                                       Handle        = 0x80010002
	RPC_E_CANTPOST_INSENDCALL                                                 Handle        = 0x80010003
	RPC_E_CANTCALLOUT_INASYNCCALL                                             Handle        = 0x80010004
	RPC_E_CANTCALLOUT_INEXTERNALCALL                                          Handle        = 0x80010005
	RPC_E_CONNECTION_TERMINATED                                               Handle        = 0x80010006
	RPC_E_SERVER_DIED                                                         Handle        = 0x80010007
	RPC_E_CLIENT_DIED                                                         Handle        = 0x80010008
	RPC_E_INVALID_DATAPACKET                                                  Handle        = 0x80010009
	RPC_E_CANTTRANSMIT_CALL                                                   Handle        = 0x8001000A
	RPC_E_CLIENT_CANTMARSHAL_DATA                                             Handle        = 0x8001000B
	RPC_E_CLIENT_CANTUNMARSHAL_DATA                                           Handle        = 0x8001000C
	RPC_E_SERVER_CANTMARSHAL_DATA                                             Handle        = 0x8001000D
	RPC_E_SERVER_CANTUNMARSHAL_DATA                                           Handle        = 0x8001000E
	RPC_E_INVALID_DATA                                                        Handle        = 0x8001000F
	RPC_E_INVALID_PARAMETER                                                   Handle        = 0x80010010
	RPC_E_CANTCALLOUT_AGAIN                                                   Handle        = 0x80010011
	RPC_E_SERVER_DIED_DNE                                                     Handle        = 0x80010012
	RPC_E_SYS_CALL_FAILED                                                     Handle        = 0x80010100
	RPC_E_OUT_OF_RESOURCES                                                    Handle        = 0x80010101
	RPC_E_ATTEMPTED_MULTITHREAD                                               Handle        = 0x80010102
	RPC_E_NOT_REGISTERED                                                      Handle        = 0x80010103
	RPC_E_FAULT                                                               Handle        = 0x80010104
	RPC_E_SERVERFAULT                                                         Handle        = 0x80010105
	RPC_E_CHANGED_MODE                                                        Handle        = 0x80010106
	RPC_E_INVALIDMETHOD                                                       Handle        = 0x80010107
	RPC_E_DISCONNECTED                                                        Handle        = 0x80010108
	RPC_E_RETRY                                                               Handle        = 0x80010109
	RPC_E_SERVERCALL_RETRYLATER                                               Handle        = 0x8001010A
	RPC_E_SERVERCALL_REJECTED                                                 Handle        = 0x8001010B
	RPC_E_INVALID_CALLDATA                                                    Handle        = 0x8001010C
	RPC_E_CANTCALLOUT_ININPUTSYNCCALL                                         Handle        = 0x8001010D
	RPC_E_WRONG_THREAD                                                        Handle        = 0x8001010E
	RPC_E_THREAD_NOT_INIT                                                     Handle        = 0x8001010F
	RPC_E_VERSION_MISMATCH                                                    Handle        = 0x80010110
	RPC_E_INVALID_HEADER                                                      Handle        = 0x80010111
	RPC_E_INVALID_EXTENSION                                                   Handle        = 0x80010112
	RPC_E_INVALID_IPID                                                        Handle        = 0x80010113
	RPC_E_INVALID_OBJECT                                                      Handle        = 0x80010114
	RPC_S_CALLPENDING                                                         Handle        = 0x80010115
	RPC_S_WAITONTIMER                                                         Handle        = 0x80010116
	RPC_E_CALL_COMPLETE                                                       Handle        = 0x80010117
	RPC_E_UNSECURE_CALL                                                       Handle        = 0x80010118
	RPC_E_TOO_LATE                                                            Handle        = 0x80010119
	RPC_E_NO_GOOD_SECURITY_PACKAGES                                           Handle        = 0x8001011A
	RPC_E_ACCESS_DENIED                                                       Handle        = 0x8001011B
	RPC_E_REMOTE_DISABLED                                                     Handle        = 0x8001011C
	RPC_E_INVALID_OBJREF                                                      Handle        = 0x8001011D
	RPC_E_NO_CONTEXT                                                          Handle        = 0x8001011E
	RPC_E_TIMEOUT                                                             Handle        = 0x8001011F
	RPC_E_NO_SYNC                                                             Handle        = 0x80010120
	RPC_E_FULLSIC_REQUIRED                                                    Handle        = 0x80010121
	RPC_E_INVALID_STD_NAME                                                    Handle        = 0x80010122
	CO_E_FAILEDTOIMPERSONATE                                                  Handle        = 0x80010123
	CO_E_FAILEDTOGETSECCTX                                                    Handle        = 0x80010124
	CO_E_FAILEDTOOPENTHREADTOKEN                                              Handle        = 0x80010125
	CO_E_FAILEDTOGETTOKENINFO                                                 Handle        = 0x80010126
	CO_E_TRUSTEEDOESNTMATCHCLIENT                                             Handle        = 0x80010127
	CO_E_FAILEDTOQUERYCLIENTBLANKET                                           Handle        = 0x80010128
	CO_E_FAILEDTOSETDACL                                                      Handle        = 0x80010129
	CO_E_ACCESSCHECKFAILED                                                    Handle        = 0x8001012A
	CO_E_NETACCESSAPIFAILED                                                   Handle        = 0x8001012B
	CO_E_WRONGTRUSTEENAMESYNTAX                                               Handle        = 0x8001012C
	CO_E_INVALIDSID                                                           Handle        = 0x8001012D
	CO_E_CONVERSIONFAILED                                                     Handle        = 0x8001012E
	CO_E_NOMATCHINGSIDFOUND                                                   Handle        = 0x8001012F
	CO_E_LOOKUPACCSIDFAILED                                                   Handle        = 0x80010130
	CO_E_NOMATCHINGNAMEFOUND                                                  Handle        = 0x80010131
	CO_E_LOOKUPACCNAMEFAILED                                                  Handle        = 0x80010132
	CO_E_SETSERLHNDLFAILED                                                    Handle        = 0x80010133
	CO_E_FAILEDTOGETWINDIR                                                    Handle        = 0x80010134
	CO_E_PATHTOOLONG                                                          Handle        = 0x80010135
	CO_E_FAILEDTOGENUUID                                                      Handle        = 0x80010136
	CO_E_FAILEDTOCREATEFILE                                                   Handle        = 0x80010137
	CO_E_FAILEDTOCLOSEHANDLE                                                  Handle        = 0x80010138
	CO_E_EXCEEDSYSACLLIMIT                                                    Handle        = 0x80010139
	CO_E_ACESINWRONGORDER                                                     Handle        = 0x8001013A
	CO_E_INCOMPATIBLESTREAMVERSION                                            Handle        = 0x8001013B
	CO_E_FAILEDTOOPENPROCESSTOKEN                                             Handle        = 0x8001013C
	CO_E_DECODEFAILED                                                         Handle        = 0x8001013D
	CO_E_ACNOTINITIALIZED                                                     Handle        = 0x8001013F
	CO_E_CANCEL_DISABLED                                                      Handle        = 0x80010140
	RPC_E_UNEXPECTED                                                          Handle        = 0x8001FFFF
	ERROR_AUDITING_DISABLED                                                   Handle        = 0xC0090001
	ERROR_ALL_SIDS_FILTERED                                                   Handle        = 0xC0090002
	ERROR_BIZRULES_NOT_ENABLED                                                Handle        = 0xC0090003
	NTE_BAD_UID                                                               Handle        = 0x80090001
	NTE_BAD_HASH                                                              Handle        = 0x80090002
	NTE_BAD_KEY                                                               Handle        = 0x80090003
	NTE_BAD_LEN                                                               Handle        = 0x80090004
	NTE_BAD_DATA                                                              Handle        = 0x80090005
	NTE_BAD_SIGNATURE                                                         Handle        = 0x80090006
	NTE_BAD_VER                                                               Handle        = 0x80090007
	NTE_BAD_ALGID                                                             Handle        = 0x80090008
	NTE_BAD_FLAGS                                                             Handle        = 0x80090009
	NTE_BAD_TYPE                                                              Handle        = 0x8009000A
	NTE_BAD_KEY_STATE                                                         Handle        = 0x8009000B
	NTE_BAD_HASH_STATE                                                        Handle        = 0x8009000C
	NTE_NO_KEY                                                                Handle        = 0x8009000D
	NTE_NO_MEMORY                                                             Handle        = 0x8009000E
	NTE_EXISTS                                                                Handle        = 0x8009000F
	NTE_PERM                                                                  Handle        = 0x80090010
	NTE_NOT_FOUND                                                             Handle        = 0x80090011
	NTE_DOUBLE_ENCRYPT                                                        Handle        = 0x80090012
	NTE_BAD_PROVIDER                                                          Handle        = 0x80090013
	NTE_BAD_PROV_TYPE                                                         Handle        = 0x80090014
	NTE_BAD_PUBLIC_KEY                                                        Handle        = 0x80090015
	NTE_BAD_KEYSET                                                            Handle        = 0x80090016
	NTE_PROV_TYPE_NOT_DEF                                                     Handle        = 0x80090017
	NTE_PROV_TYPE_ENTRY_BAD                                                   Handle        = 0x80090018
	NTE_KEYSET_NOT_DEF                                                        Handle        = 0x80090019
	NTE_KEYSET_ENTRY_BAD                                                      Handle        = 0x8009001A
	NTE_PROV_TYPE_NO_MATCH                                                    Handle        = 0x8009001B
	NTE_SIGNATURE_FILE_BAD                                                    Handle        = 0x8009001C
	NTE_PROVIDER_DLL_FAIL                                                     Handle        = 0x8009001D
	NTE_PROV_DLL_NOT_FOUND                                                    Handle        = 0x8009001E
	NTE_BAD_KEYSET_PARAM                                                      Handle        = 0x8009001F
	NTE_FAIL                                                                  Handle        = 0x80090020
	NTE_SYS_ERR                                                               Handle        = 0x80090021
	NTE_SILENT_CONTEXT                                                        Handle        = 0x80090022
	NTE_TOKEN_KEYSET_STORAGE_FULL                                             Handle        = 0x80090023
	NTE_TEMPORARY_PROFILE                                                     Handle        = 0x80090024
	NTE_FIXEDPARAMETER                                                        Handle        = 0x80090025
	NTE_INVALID_HANDLE                                                        Handle        = 0x80090026
	NTE_INVALID_PARAMETER                                                     Handle        = 0x80090027
	NTE_BUFFER_TOO_SMALL                                                      Handle        = 0x80090028
	NTE_NOT_SUPPORTED                                                         Handle        = 0x80090029
	NTE_NO_MORE_ITEMS                                                         Handle        = 0x8009002A
	NTE_BUFFERS_OVERLAP                                                       Handle        = 0x8009002B
	NTE_DECRYPTION_FAILURE                                                    Handle        = 0x8009002C
	NTE_INTERNAL_ERROR                                                        Handle        = 0x8009002D
	NTE_UI_REQUIRED                                                           Handle        = 0x8009002E
	NTE_HMAC_NOT_SUPPORTED                                                    Handle        = 0x8009002F
	NTE_DEVICE_NOT_READY                                                      Handle        = 0x80090030
	NTE_AUTHENTICATION_IGNORED                                                Handle        = 0x80090031
	NTE_VALIDATION_FAILED                                                     Handle        = 0x80090032
	NTE_INCORRECT_PASSWORD                                                    Handle        = 0x80090033
	NTE_ENCRYPTION_FAILURE                                                    Handle        = 0x80090034
	NTE_DEVICE_NOT_FOUND                                                      Handle        = 0x80090035
	NTE_USER_CANCELLED                                                        Handle        = 0x80090036
	NTE_PASSWORD_CHANGE_REQUIRED                                              Handle        = 0x80090037
	NTE_NOT_ACTIVE_CONSOLE                                                    Handle        = 0x80090038
	SEC_E_INSUFFICIENT_MEMORY                                                 Handle        = 0x80090300
	SEC_E_INVALID_HANDLE                                                      Handle        = 0x80090301
	SEC_E_UNSUPPORTED_FUNCTION                                                Handle        = 0x80090302
	SEC_E_TARGET_UNKNOWN                                                      Handle        = 0x80090303
	SEC_E_INTERNAL_ERROR                                                      Handle        = 0x80090304
	SEC_E_SECPKG_NOT_FOUND                                                    Handle        = 0x80090305
	SEC_E_NOT_OWNER                                                           Handle        = 0x80090306
	SEC_E_CANNOT_INSTALL                                                      Handle        = 0x80090307
	SEC_E_INVALID_TOKEN                                                       Handle        = 0x80090308
	SEC_E_CANNOT_PACK                                                         Handle        = 0x80090309
	SEC_E_QOP_NOT_SUPPORTED                                                   Handle        = 0x8009030A
	SEC_E_NO_IMPERSONATION                                                    Handle        = 0x8009030B
	SEC_E_LOGON_DENIED                                                        Handle        = 0x8009030C
	SEC_E_UNKNOWN_CREDENTIALS                                                 Handle        = 0x8009030D
	SEC_E_NO_CREDENTIALS                                                      Handle        = 0x8009030E
	SEC_E_MESSAGE_ALTERED                                                     Handle        = 0x8009030F
	SEC_E_OUT_OF_SEQUENCE                                                     Handle        = 0x80090310
	SEC_E_NO_AUTHENTICATING_AUTHORITY                                         Handle        = 0x80090311
	SEC_I_CONTINUE_NEEDED                                                     Handle        = 0x00090312
	SEC_I_COMPLETE_NEEDED                                                     Handle        = 0x00090313
	SEC_I_COMPLETE_AND_CONTINUE                                               Handle        = 0x00090314
	SEC_I_LOCAL_LOGON                                                         Handle        = 0x00090315
	SEC_I_GENERIC_EXTENSION_RECEIVED                                          Handle        = 0x00090316
	SEC_E_BAD_PKGID                                                           Handle        = 0x80090316
	SEC_E_CONTEXT_EXPIRED                                                     Handle        = 0x80090317
	SEC_I_CONTEXT_EXPIRED                                                     Handle        = 0x00090317
	SEC_E_INCOMPLETE_MESSAGE                                                  Handle        = 0x80090318
	SEC_E_INCOMPLETE_CREDENTIALS                                              Handle        = 0x80090320
	SEC_E_BUFFER_TOO_SMALL                                                    Handle        = 0x80090321
	SEC_I_INCOMPLETE_CREDENTIALS                                              Handle        = 0x00090320
	SEC_I_RENEGOTIATE                                                         Handle        = 0x00090321
	SEC_E_WRONG_PRINCIPAL                                                     Handle        = 0x80090322
	SEC_I_NO_LSA_CONTEXT                                                      Handle        = 0x00090323
	SEC_E_TIME_SKEW                                                           Handle        = 0x80090324
	SEC_E_UNTRUSTED_ROOT                                                      Handle        = 0x80090325
	SEC_E_ILLEGAL_MESSAGE                                                     Handle        = 0x80090326
	SEC_E_CERT_UNKNOWN                                                        Handle        = 0x80090327
	SEC_E_CERT_EXPIRED                                                        Handle        = 0x80090328
	SEC_E_ENCRYPT_FAILURE                                                     Handle        = 0x80090329
	SEC_E_DECRYPT_FAILURE                                                     Handle        = 0x80090330
	SEC_E_ALGORITHM_MISMATCH                                                  Handle        = 0x80090331
	SEC_E_SECURITY_QOS_FAILED                                                 Handle        = 0x80090332
	SEC_E_UNFINISHED_CONTEXT_DELETED                                          Handle        = 0x80090333
	SEC_E_NO_TGT_REPLY                                                        Handle        = 0x80090334
	SEC_E_NO_IP_ADDRESSES                                                     Handle        = 0x80090335
	SEC_E_WRONG_CREDENTIAL_HANDLE                                             Handle        = 0x80090336
	SEC_E_CRYPTO_SYSTEM_INVALID                                               Handle        = 0x80090337
	SEC_E_MAX_REFERRALS_EXCEEDED                                              Handle        = 0x80090338
	SEC_E_MUST_BE_KDC                                                         Handle        = 0x80090339
	SEC_E_STRONG_CRYPTO_NOT_SUPPORTED                                         Handle        = 0x8009033A
	SEC_E_TOO_MANY_PRINCIPALS                                                 Handle        = 0x8009033B
	SEC_E_NO_PA_DATA                                                          Handle        = 0x8009033C
	SEC_E_PKINIT_NAME_MISMATCH                                                Handle        = 0x8009033D
	SEC_E_SMARTCARD_LOGON_REQUIRED                                            Handle        = 0x8009033E
	SEC_E_SHUTDOWN_IN_PROGRESS                                                Handle        = 0x8009033F
	SEC_E_KDC_INVALID_REQUEST                                                 Handle        = 0x80090340
	SEC_E_KDC_UNABLE_TO_REFER                                                 Handle        = 0x80090341
	SEC_E_KDC_UNKNOWN_ETYPE                                                   Handle        = 0x80090342
	SEC_E_UNSUPPORTED_PREAUTH                                                 Handle        = 0x80090343
	SEC_E_DELEGATION_REQUIRED                                                 Handle        = 0x80090345
	SEC_E_BAD_BINDINGS                                                        Handle        = 0x80090346
	SEC_E_MULTIPLE_ACCOUNTS                                                   Handle        = 0x80090347
	SEC_E_NO_KERB_KEY                                                         Handle        = 0x80090348
	SEC_E_CERT_WRONG_USAGE                                                    Handle        = 0x80090349
	SEC_E_DOWNGRADE_DETECTED                                                  Handle        = 0x80090350
	SEC_E_SMARTCARD_CERT_REVOKED                                              Handle        = 0x80090351
	SEC_E_ISSUING_CA_UNTRUSTED                                                Handle        = 0x80090352
	SEC_E_REVOCATION_OFFLINE_C                                                Handle        = 0x80090353
	SEC_E_PKINIT_CLIENT_FAILURE                                               Handle        = 0x80090354
	SEC_E_SMARTCARD_CERT_EXPIRED                                              Handle        = 0x80090355
	SEC_E_NO_S4U_PROT_SUPPORT                                                 Handle        = 0x80090356
	SEC_E_CROSSREALM_DELEGATION_FAILURE                                       Handle        = 0x80090357
	SEC_E_REVOCATION_OFFLINE_KDC                                              Handle        = 0x80090358
	SEC_E_ISSUING_CA_UNTRUSTED_KDC                                            Handle        = 0x80090359
	SEC_E_KDC_CERT_EXPIRED                                                    Handle        = 0x8009035A
	SEC_E_KDC_CERT_REVOKED                                                    Handle        = 0x8009035B
	SEC_I_SIGNATURE_NEEDED                                                    Handle        = 0x0009035C
	SEC_E_INVALID_PARAMETER                                                   Handle        = 0x8009035D
	SEC_E_DELEGATION_POLICY                                                   Handle        = 0x8009035E
	SEC_E_POLICY_NLTM_ONLY                                                    Handle        = 0x8009035F
	SEC_I_NO_RENEGOTIATION                                                    Handle        = 0x00090360
	SEC_E_NO_CONTEXT                                                          Handle        = 0x80090361
	SEC_E_PKU2U_CERT_FAILURE                                                  Handle        = 0x80090362
	SEC_E_MUTUAL_AUTH_FAILED                                                  Handle        = 0x80090363
	SEC_I_MESSAGE_FRAGMENT                                                    Handle        = 0x00090364
	SEC_E_ONLY_HTTPS_ALLOWED                                                  Handle        = 0x80090365
	SEC_I_CONTINUE_NEEDED_MESSAGE_OK                                          Handle        = 0x00090366
	SEC_E_APPLICATION_PROTOCOL_MISMATCH                                       Handle        = 0x80090367
	SEC_I_ASYNC_CALL_PENDING                                                  Handle        = 0x00090368
	SEC_E_INVALID_UPN_NAME                                                    Handle        = 0x80090369
	SEC_E_EXT_BUFFER_TOO_SMALL                                                Handle        = 0x8009036A
	SEC_E_INSUFFICIENT_BUFFERS                                                Handle        = 0x8009036B
	SEC_E_NO_SPM                                                                            = SEC_E_INTERNAL_ERROR
	SEC_E_NOT_SUPPORTED                                                                     = SEC_E_UNSUPPORTED_FUNCTION
	CRYPT_E_MSG_ERROR                                                         Handle        = 0x80091001
	CRYPT_E_UNKNOWN_ALGO                                                      Handle        = 0x80091002
	CRYPT_E_OID_FORMAT                                                        Handle        = 0x80091003
	CRYPT_E_INVALID_MSG_TYPE                                                  Handle        = 0x80091004
	CRYPT_E_UNEXPECTED_ENCODING                                               Handle        = 0x80091005
	CRYPT_E_AUTH_ATTR_MISSING                                                 Handle        = 0x80091006
	CRYPT_E_HASH_VALUE                                                        Handle        = 0x80091007
	CRYPT_E_INVALID_INDEX                                                     Handle        = 0x80091008
	CRYPT_E_ALREADY_DECRYPTED                                                 Handle        = 0x80091009
	CRYPT_E_NOT_DECRYPTED                                                     Handle        = 0x8009100A
	CRYPT_E_RECIPIENT_NOT_FOUND                                               Handle        = 0x8009100B
	CRYPT_E_CONTROL_TYPE                                                      Handle        = 0x8009100C
	CRYPT_E_ISSUER_SERIALNUMBER                                               Handle        = 0x8009100D
	CRYPT_E_SIGNER_NOT_FOUND                                                  Handle        = 0x8009100E
	CRYPT_E_ATTRIBUTES_MISSING                                                Handle        = 0x8009100F
	CRYPT_E_STREAM_MSG_NOT_READY                                              Handle        = 0x80091010
	CRYPT_E_STREAM_INSUFFICIENT_DATA                                          Handle        = 0x80091011
	CRYPT_I_NEW_PROTECTION_REQUIRED                                           Handle        = 0x00091012
	CRYPT_E_BAD_LEN                                                           Handle        = 0x80092001
	CRYPT_E_BAD_ENCODE                                                        Handle        = 0x80092002
	CRYPT_E_FILE_ERROR                                                        Handle        = 0x80092003
	CRYPT_E_NOT_FOUND                                                         Handle        = 0x80092004
	CRYPT_E_EXISTS                                                            Handle        = 0x80092005
	CRYPT_E_NO_PROVIDER                                                       Handle        = 0x80092006
	CRYPT_E_SELF_SIGNED                                                       Handle        = 0x80092007
	CRYPT_E_DELETED_PREV                                                      Handle        = 0x80092008
	CRYPT_E_NO_MATCH                                                          Handle        = 0x80092009
	CRYPT_E_UNEXPECTED_MSG_TYPE                                               Handle        = 0x8009200A
	CRYPT_E_NO_KEY_PROPERTY                                                   Handle        = 0x8009200B
	CRYPT_E_NO_DECRYPT_CERT                                                   Handle        = 0x8009200C
	CRYPT_E_BAD_MSG                                                           Handle        = 0x8009200D
	CRYPT_E_NO_SIGNER                                                         Handle        = 0x8009200E
	CRYPT_E_PENDING_CLOSE                                                     Handle        = 0x8009200F
	CRYPT_E_REVOKED                                                           Handle        = 0x80092010
	CRYPT_E_NO_REVOCATION_DLL                                                 Handle        = 0x80092011
	CRYPT_E_NO_REVOCATION_CHECK                                               Handle        = 0x80092012
	CRYPT_E_REVOCATION_OFFLINE                                                Handle        = 0x80092013
	CRYPT_E_NOT_IN_REVOCATION_DATABASE                                        Handle        = 0x80092014
	CRYPT_E_INVALID_NUMERIC_STRING                                            Handle        = 0x80092020
	CRYPT_E_INVALID_PRINTABLE_STRING                                          Handle        = 0x80092021
	CRYPT_E_INVALID_IA5_STRING                                                Handle        = 0x80092022
	CRYPT_E_INVALID_X500_STRING                                               Handle        = 0x80092023
	CRYPT_E_NOT_CHAR_STRING                                                   Handle        = 0x80092024
	CRYPT_E_FILERESIZED                                                       Handle        = 0x80092025
	CRYPT_E_SECURITY_SETTINGS                                                 Handle        = 0x80092026
	CRYPT_E_NO_VERIFY_USAGE_DLL                                               Handle        = 0x80092027
	CRYPT_E_NO_VERIFY_USAGE_CHECK                                             Handle        = 0x80092028
	CRYPT_E_VERIFY_USAGE_OFFLINE                                              Handle        = 0x80092029
	CRYPT_E_NOT_IN_CTL                                                        Handle        = 0x8009202A
	CRYPT_E_NO_TRUSTED_SIGNER                                                 Handle        = 0x8009202B
	CRYPT_E_MISSING_PUBKEY_PARA                                               Handle        = 0x8009202C
	CRYPT_E_OBJECT_LOCATOR_OBJECT_NOT_FOUND                                   Handle        = 0x8009202D
	CRYPT_E_OSS_ERROR                                                         Handle        = 0x80093000
	OSS_MORE_BUF                                                              Handle        = 0x80093001
	OSS_NEGATIVE_UINTEGER                                                     Handle        = 0x80093002
	OSS_PDU_RANGE                                                             Handle        = 0x80093003
	OSS_MORE_INPUT                                                            Handle        = 0x80093004
	OSS_DATA_ERROR                                                            Handle        = 0x80093005
	OSS_BAD_ARG                                                               Handle        = 0x80093006
	OSS_BAD_VERSION                                                           Handle        = 0x80093007
	OSS_OUT_MEMORY                                                            Handle        = 0x80093008
	OSS_PDU_MISMATCH                                                          Handle        = 0x80093009
	OSS_LIMITED                                                               Handle        = 0x8009300A
	OSS_BAD_PTR                                                               Handle        = 0x8009300B
	OSS_BAD_TIME                                                              Handle        = 0x8009300C
	OSS_INDEFINITE_NOT_SUPPORTED                                              Handle        = 0x8009300D
	OSS_MEM_ERROR                                                             Handle        = 0x8009300E
	OSS_BAD_TABLE                                                             Handle        = 0x8009300F
	OSS_TOO_LONG                                                              Handle        = 0x80093010
	OSS_CONSTRAINT_VIOLATED                                                   Handle        = 0x80093011
	OSS_FATAL_ERROR                                                           Handle        = 0x80093012
	OSS_ACCESS_SERIALIZATION_ERROR                                            Handle        = 0x80093013
	OSS_NULL_TBL                                                              Handle        = 0x80093014
	OSS_NULL_FCN                                                              Handle        = 0x80093015
	OSS_BAD_ENCRULES                                                          Handle        = 0x80093016
	OSS_UNAVAIL_ENCRULES                                                      Handle        = 0x80093017
	OSS_CANT_OPEN_TRACE_WINDOW                                                Handle        = 0x80093018
	OSS_UNIMPLEMENTED                                                         Handle        = 0x80093019
	OSS_OID_DLL_NOT_LINKED                                                    Handle        = 0x8009301A
	OSS_CANT_OPEN_TRACE_FILE                                                  Handle        = 0x8009301B
	OSS_TRACE_FILE_ALREADY_OPEN                                               Handle        = 0x8009301C
	OSS_TABLE_MISMATCH                                                        Handle        = 0x8009301D
	OSS_TYPE_NOT_SUPPORTED                                                    Handle        = 0x8009301E
	OSS_REAL_DLL_NOT_LINKED                                                   Handle        = 0x8009301F
	OSS_REAL_CODE_NOT_LINKED                                                  Handle        = 0x80093020
	OSS_OUT_OF_RANGE                                                          Handle        = 0x80093021
	OSS_COPIER_DLL_NOT_LINKED                                                 Handle        = 0x80093022
	OSS_CONSTRAINT_DLL_NOT_LINKED                                             Handle        = 0x80093023
	OSS_COMPARATOR_DLL_NOT_LINKED                                             Handle        = 0x80093024
	OSS_COMPARATOR_CODE_NOT_LINKED                                            Handle        = 0x80093025
	OSS_MEM_MGR_DLL_NOT_LINKED                                                Handle        = 0x80093026
	OSS_PDV_DLL_NOT_LINKED                                                    Handle        = 0x80093027
	OSS_PDV_CODE_NOT_LINKED                                                   Handle        = 0x80093028
	OSS_API_DLL_NOT_LINKED                                                    Handle        = 0x80093029
	OSS_BERDER_DLL_NOT_LINKED                                                 Handle        = 0x8009302A
	OSS_PER_DLL_NOT_LINKED                                                    Handle        = 0x8009302B
	OSS_OPEN_TYPE_ERROR                                                       Handle        = 0x8009302C
	OSS_MUTEX_NOT_CREATED                                                     Handle        = 0x8009302D
	OSS_CANT_CLOSE_TRACE_FILE                                                 Handle        = 0x8009302E
	CRYPT_E_ASN1_ERROR                                                        Handle        = 0x80093100
	CRYPT_E_ASN1_INTERNAL                                                     Handle        = 0x80093101
	CRYPT_E_ASN1_EOD                                                          Handle        = 0x80093102
	CRYPT_E_ASN1_CORRUPT                                                      Handle        = 0x80093103
	CRYPT_E_ASN1_LARGE                                                        Handle        = 0x80093104
	CRYPT_E_ASN1_CONSTRAINT                                                   Handle        = 0x80093105
	CRYPT_E_ASN1_MEMORY                                                       Handle        = 0x80093106
	CRYPT_E_ASN1_OVERFLOW                                                     Handle        = 0x80093107
	CRYPT_E_ASN1_BADPDU                                                       Handle        = 0x80093108
	CRYPT_E_ASN1_BADARGS                                                      Handle        = 0x80093109
	CRYPT_E_ASN1_BADREAL                                                      Handle        = 0x8009310A
	CRYPT_E_ASN1_BADTAG                                                       Handle        = 0x8009310B
	CRYPT_E_ASN1_CHOICE                                                       Handle        = 0x8009310C
	CRYPT_E_ASN1_RULE                                                         Handle        = 0x8009310D
	CRYPT_E_ASN1_UTF8                                                         Handle        = 0x8009310E
	CRYPT_E_ASN1_PDU_TYPE                                                     Handle        = 0x80093133
	CRYPT_E_ASN1_NYI                                                          Handle        = 0x80093134
	CRYPT_E_ASN1_EXTENDED                                                     Handle        = 0x80093201
	CRYPT_E_ASN1_NOEOD                                                        Handle        = 0x80093202
	CERTSRV_E_BAD_REQUESTSUBJECT                                              Handle        = 0x80094001
	CERTSRV_E_NO_REQUEST                                                      Handle        = 0x80094002
	CERTSRV_E_BAD_REQUESTSTATUS                                               Handle        = 0x80094003
	CERTSRV_E_PROPERTY_EMPTY                                                  Handle        = 0x80094004
	CERTSRV_E_INVALID_CA_CERTIFICATE                                          Handle        = 0x80094005
	CERTSRV_E_SERVER_SUSPENDED                                                Handle        = 0x80094006
	CERTSRV_E_ENCODING_LENGTH                                                 Handle        = 0x80094007
	CERTSRV_E_ROLECONFLICT                                                    Handle        = 0x80094008
	CERTSRV_E_RESTRICTEDOFFICER                                               Handle        = 0x80094009
	CERTSRV_E_KEY_ARCHIVAL_NOT_CONFIGURED                                     Handle        = 0x8009400A
	CERTSRV_E_NO_VALID_KRA                                                    Handle        = 0x8009400B
	CERTSRV_E_BAD_REQUEST_KEY_ARCHIVAL                                        Handle        = 0x8009400C
	CERTSRV_E_NO_CAADMIN_DEFINED                                              Handle        = 0x8009400D
	CERTSRV_E_BAD_RENEWAL_CERT_ATTRIBUTE                                      Handle        = 0x8009400E
	CERTSRV_E_NO_DB_SESSIONS                                                  Handle        = 0x8009400F
	CERTSRV_E_ALIGNMENT_FAULT                                                 Handle        = 0x80094010
	CERTSRV_E_ENROLL_DENIED                                                   Handle        = 0x80094011
	CERTSRV_E_TEMPLATE_DENIED                                                 Handle        = 0x80094012
	CERTSRV_E_DOWNLEVEL_DC_SSL_OR_UPGRADE                                     Handle        = 0x80094013
	CERTSRV_E_ADMIN_DENIED_REQUEST                                            Handle        = 0x80094014
	CERTSRV_E_NO_POLICY_SERVER                                                Handle        = 0x80094015
	CERTSRV_E_WEAK_SIGNATURE_OR_KEY                                           Handle        = 0x80094016
	CERTSRV_E_KEY_ATTESTATION_NOT_SUPPORTED                                   Handle        = 0x80094017
	CERTSRV_E_ENCRYPTION_CERT_REQUIRED                                        Handle        = 0x80094018
	CERTSRV_E_UNSUPPORTED_CERT_TYPE                                           Handle        = 0x80094800
	CERTSRV_E_NO_CERT_TYPE                                                    Handle        = 0x80094801
	CERTSRV_E_TEMPLATE_CONFLICT                                               Handle        = 0x80094802
	CERTSRV_E_SUBJECT_ALT_NAME_REQUIRED                                       Handle        = 0x80094803
	CERTSRV_E_ARCHIVED_KEY_REQUIRED                                           Handle        = 0x80094804
	CERTSRV_E_SMIME_REQUIRED                                                  Handle        = 0x80094805
	CERTSRV_E_BAD_RENEWAL_SUBJECT                                             Handle        = 0x80094806
	CERTSRV_E_BAD_TEMPLATE_VERSION                                            Handle        = 0x80094807
	CERTSRV_E_TEMPLATE_POLICY_REQUIRED                                        Handle        = 0x80094808
	CERTSRV_E_SIGNATURE_POLICY_REQUIRED                                       Handle        = 0x80094809
	CERTSRV_E_SIGNATURE_COUNT                                                 Handle        = 0x8009480A
	CERTSRV_E_SIGNATURE_REJECTED                                              Handle        = 0x8009480B
	CERTSRV_E_ISSUANCE_POLICY_REQUIRED                                        Handle        = 0x8009480C
	CERTSRV_E_SUBJECT_UPN_REQUIRED                                            Handle        = 0x8009480D
	CERTSRV_E_SUBJECT_DIRECTORY_GUID_REQUIRED                                 Handle        = 0x8009480E
	CERTSRV_E_SUBJECT_DNS_REQUIRED                                            Handle        = 0x8009480F
	CERTSRV_E_ARCHIVED_KEY_UNEXPECTED                                         Handle        = 0x80094810
	CERTSRV_E_KEY_LENGTH                                                      Handle        = 0x80094811
	CERTSRV_E_SUBJECT_EMAIL_REQUIRED                                          Handle        = 0x80094812
	CERTSRV_E_UNKNOWN_CERT_TYPE                                               Handle        = 0x80094813
	CERTSRV_E_CERT_TYPE_OVERLAP                                               Handle        = 0x80094814
	CERTSRV_E_TOO_MANY_SIGNATURES                                             Handle        = 0x80094815
	CERTSRV_E_RENEWAL_BAD_PUBLIC_KEY                                          Handle        = 0x80094816
	CERTSRV_E_INVALID_EK                                                      Handle        = 0x80094817
	CERTSRV_E_INVALID_IDBINDING                                               Handle        = 0x80094818
	CERTSRV_E_INVALID_ATTESTATION                                             Handle        = 0x80094819
	CERTSRV_E_KEY_ATTESTATION                                                 Handle        = 0x8009481A
	CERTSRV_E_CORRUPT_KEY_ATTESTATION                                         Handle        = 0x8009481B
	CERTSRV_E_EXPIRED_CHALLENGE                                               Handle        = 0x8009481C
	CERTSRV_E_INVALID_RESPONSE                                                Handle        = 0x8009481D
	CERTSRV_E_INVALID_REQUESTID                                               Handle        = 0x8009481E
	CERTSRV_E_REQUEST_PRECERTIFICATE_MISMATCH                                 Handle        = 0x8009481F
	CERTSRV_E_PENDING_CLIENT_RESPONSE                                         Handle        = 0x80094820
	XENROLL_E_KEY_NOT_EXPORTABLE                                              Handle        = 0x80095000
	XENROLL_E_CANNOT_ADD_ROOT_CERT                                            Handle        = 0x80095001
	XENROLL_E_RESPONSE_KA_HASH_NOT_FOUND                                      Handle        = 0x80095002
	XENROLL_E_RESPONSE_UNEXPECTED_KA_HASH                                     Handle        = 0x80095003
	XENROLL_E_RESPONSE_KA_HASH_MISMATCH                                       Handle        = 0x80095004
	XENROLL_E_KEYSPEC_SMIME_MISMATCH                                          Handle        = 0x80095005
	TRUST_E_SYSTEM_ERROR                                                      Handle        = 0x80096001
	TRUST_E_NO_SIGNER_CERT                                                    Handle        = 0x80096002
	TRUST_E_COUNTER_SIGNER                                                    Handle        = 0x80096003
	TRUST_E_CERT_SIGNATURE                                                    Handle        = 0x80096004
	TRUST_E_TIME_STAMP                                                        Handle        = 0x80096005
	TRUST_E_BAD_DIGEST                                                        Handle        = 0x80096010
	TRUST_E_MALFORMED_SIGNATURE                                               Handle        = 0x80096011
	TRUST_E_BASIC_CONSTRAINTS                                                 Handle        = 0x80096019
	TRUST_E_FINANCIAL_CRITERIA                                                Handle        = 0x8009601E
	MSSIPOTF_E_OUTOFMEMRANGE                                                  Handle        = 0x80097001
	MSSIPOTF_E_CANTGETOBJECT                                                  Handle        = 0x80097002
	MSSIPOTF_E_NOHEADTABLE                                                    Handle        = 0x80097003
	MSSIPOTF_E_BAD_MAGICNUMBER                                                Handle        = 0x80097004
	MSSIPOTF_E_BAD_OFFSET_TABLE                                               Handle        = 0x80097005
	MSSIPOTF_E_TABLE_TAGORDER                                                 Handle        = 0x80097006
	MSSIPOTF_E_TABLE_LONGWORD                                                 Handle        = 0x80097007
	MSSIPOTF_E_BAD_FIRST_TABLE_PLACEMENT                                      Handle        = 0x80097008
	MSSIPOTF_E_TABLES_OVERLAP                                                 Handle        = 0x80097009
	MSSIPOTF_E_TABLE_PADBYTES                                                 Handle        = 0x8009700A
	MSSIPOTF_E_FILETOOSMALL                                                   Handle        = 0x8009700B
	MSSIPOTF_E_TABLE_CHECKSUM                                                 Handle        = 0x8009700C
	MSSIPOTF_E_FILE_CHECKSUM                                                  Handle        = 0x8009700D
	MSSIPOTF_E_FAILED_POLICY                                                  Handle        = 0x80097010
	MSSIPOTF_E_FAILED_HINTS_CHECK                                             Handle        = 0x80097011
	MSSIPOTF_E_NOT_OPENTYPE                                                   Handle        = 0x80097012
	MSSIPOTF_E_FILE                                                           Handle        = 0x80097013
	MSSIPOTF_E_CRYPT                                                          Handle        = 0x80097014
	MSSIPOTF_E_BADVERSION                                                     Handle        = 0x80097015
	MSSIPOTF_E_DSIG_STRUCTURE                                                 Handle        = 0x80097016
	MSSIPOTF_E_PCONST_CHECK                                                   Handle        = 0x80097017
	MSSIPOTF_E_STRUCTURE                                                      Handle        = 0x80097018
	ERROR_CRED_REQUIRES_CONFIRMATION                                          Handle        = 0x80097019
	NTE_OP_OK                                                                 syscall.Errno = 0
	TRUST_E_PROVIDER_UNKNOWN                                                  Handle        = 0x800B0001
	TRUST_E_ACTION_UNKNOWN                                                    Handle        = 0x800B0002
	TRUST_E_SUBJECT_FORM_UNKNOWN                                              Handle        = 0x800B0003
	TRUST_E_SUBJECT_NOT_TRUSTED                                               Handle        = 0x800B0004
	DIGSIG_E_ENCODE                                                           Handle        = 0x800B0005
	DIGSIG_E_DECODE                                                           Handle        = 0x800B0006
	DIGSIG_E_EXTENSIBILITY                                                    Handle        = 0x800B0007
	DIGSIG_E_CRYPTO                                                           Handle        = 0x800B0008
	PERSIST_E_SIZEDEFINITE                                                    Handle        = 0x800B0009
	PERSIST_E_SIZEINDEFINITE                                                  Handle        = 0x800B000A
	PERSIST_E_NOTSELFSIZING                                                   Handle        = 0x800B000B
	TRUST_E_NOSIGNATURE                                                       Handle        = 0x800B0100
	CERT_E_EXPIRED                                                            Handle        = 0x800B0101
	CERT_E_VALIDITYPERIODNESTING                                              Handle        = 0x800B0102
	CERT_E_ROLE                                                               Handle        = 0x800B0103
	CERT_E_PATHLENCONST                                                       Handle        = 0x800B0104
	CERT_E_CRITICAL                                                           Handle        = 0x800B0105
	CERT_E_PURPOSE                                                            Handle        = 0x800B0106
	CERT_E_ISSUERCHAINING                                                     Handle        = 0x800B0107
	CERT_E_MALFORMED                                                          Handle        = 0x800B0108
	CERT_E_UNTRUSTEDROOT                                                      Handle        = 0x800B0109
	CERT_E_CHAINING                                                           Handle        = 0x800B010A
	TRUST_E_FAIL                                                              Handle        = 0x800B010B
	CERT_E_REVOKED                                                            Handle        = 0x800B010C
	CERT_E_UNTRUSTEDTESTROOT                                                  Handle        = 0x800B010D
	CERT_E_REVOCATION_FAILURE                                                 Handle        = 0x800B010E
	CERT_E_CN_NO_MATCH                                                        Handle        = 0x800B010F
	CERT_E_WRONG_USAGE                                                        Handle        = 0x800B0110
	TRUST_E_EXPLICIT_DISTRUST                                                 Handle        = 0x800B0111
	CERT_E_UNTRUSTEDCA                                                        Handle        = 0x800B0112
	CERT_E_INVALID_POLICY                                                     Handle        = 0x800B0113
	CERT_E_INVALID_NAME                                                       Handle        = 0x800B0114
	SPAPI_E_EXPECTED_SECTION_NAME                                             Handle        = 0x800F0000
	SPAPI_E_BAD_SECTION_NAME_LINE                                             Handle        = 0x800F0001
	SPAPI_E_SECTION_NAME_TOO_LONG                                             Handle        = 0x800F0002
	SPAPI_E_GENERAL_SYNTAX                                                    Handle        = 0x800F0003
	SPAPI_E_WRONG_INF_STYLE                                                   Handle        = 0x800F0100
	SPAPI_E_SECTION_NOT_FOUND                                                 Handle        = 0x800F0101
	SPAPI_E_LINE_NOT_FOUND                                                    Handle        = 0x800F0102
	SPAPI_E_NO_BACKUP                                                         Handle        = 0x800F0103
	SPAPI_E_NO_ASSOCIATED_CLASS                                               Handle        = 0x800F0200
	SPAPI_E_CLASS_MISMATCH                                                    Handle        = 0x800F0201
	SPAPI_E_DUPLICATE_FOUND                                                   Handle        = 0x800F0202
	SPAPI_E_NO_DRIVER_SELECTED                                                Handle        = 0x800F0203
	SPAPI_E_KEY_DOES_NOT_EXIST                                                Handle        = 0x800F0204
	SPAPI_E_INVALID_DEVINST_NAME                                              Handle        = 0x800F0205
	SPAPI_E_INVALID_CLASS                                                     Handle        = 0x800F0206
	SPAPI_E_DEVINST_ALREADY_EXISTS                                            Handle        = 0x800F0207
	SPAPI_E_DEVINFO_NOT_REGISTERED                                            Handle        = 0x800F0208
	SPAPI_E_INVALID_REG_PROPERTY                                              Handle        = 0x800F0209
	SPAPI_E_NO_INF                                                            Handle        = 0x800F020A
	SPAPI_E_NO_SUCH_DEVINST                                                   Handle        = 0x800F020B
	SPAPI_E_CANT_LOAD_CLASS_ICON                                              Handle        = 0x800F020C
	SPAPI_E_INVALID_CLASS_INSTALLER                                           Handle        = 0x800F020D
	SPAPI_E_DI_DO_DEFAULT                                                     Handle        = 0x800F020E
	SPAPI_E_DI_NOFILECOPY                                                     Handle        = 0x800F020F
	SPAPI_E_INVALID_HWPROFILE                                                 Handle        = 0x800F0210
	SPAPI_E_NO_DEVICE_SELECTED                                                Handle        = 0x800F0211
	SPAPI_E_DEVINFO_LIST_LOCKED                                               Handle        = 0x800F0212
	SPAPI_E_DEVINFO_DATA_LOCKED                                               Handle        = 0x800F0213
	SPAPI_E_DI_BAD_PATH                                                       Handle        = 0x800F0214
	SPAPI_E_NO_CLASSINSTALL_PARAMS                                            Handle        = 0x800F0215
	SPAPI_E_FILEQUEUE_LOCKED                                                  Handle        = 0x800F0216
	SPAPI_E_BAD_SERVICE_INSTALLSECT                                           Handle        = 0x800F0217
	SPAPI_E_NO_CLASS_DRIVER_LIST                                              Handle        = 0x800F0218
	SPAPI_E_NO_ASSOCIATED_SERVICE                                             Handle        = 0x800F0219
	SPAPI_E_NO_DEFAULT_DEVICE_INTERFACE                                       Handle        = 0x800F021A
	SPAPI_E_DEVICE_INTERFACE_ACTIVE                                           Handle        = 0x800F021B
	SPAPI_E_DEVICE_INTERFACE_REMOVED                                          Handle        = 0x800F021C
	SPAPI_E_BAD_INTERFACE_INSTALLSECT                                         Handle        = 0x800F021D
	SPAPI_E_NO_SUCH_INTERFACE_CLASS                                           Handle        = 0x800F021E
	SPAPI_E_INVALID_REFERENCE_STRING                                          Handle        = 0x800F021F
	SPAPI_E_INVALID_MACHINENAME                                               Handle        = 0x800F0220
	SPAPI_E_REMOTE_COMM_FAILURE                                               Handle        = 0x800F0221
	SPAPI_E_MACHINE_UNAVAILABLE                                               Handle        = 0x800F0222
	SPAPI_E_NO_CONFIGMGR_SERVICES                                             Handle        = 0x800F0223
	SPAPI_E_INVALID_PROPPAGE_PROVIDER                                         Handle        = 0x800F0224
	SPAPI_E_NO_SUCH_DEVICE_INTERFACE                                          Handle        = 0x800F0225
	SPAPI_E_DI_POSTPROCESSING_REQUIRED                                        Handle        = 0x800F0226
	SPAPI_E_INVALID_COINSTALLER                                               Handle        = 0x800F0227
	SPAPI_E_NO_COMPAT_DRIVERS                                                 Handle        = 0x800F0228
	SPAPI_E_NO_DEVICE_ICON                                                    Handle        = 0x800F0229
	SPAPI_E_INVALID_INF_LOGCONFIG                                             Handle        = 0x800F022A
	SPAPI_E_DI_DONT_INSTALL                                                   Handle        = 0x800F022B
	SPAPI_E_INVALID_FILTER_DRIVER                                             Handle        = 0x800F022C
	SPAPI_E_NON_WINDOWS_NT_DRIVER                                             Handle        = 0x800F022D
	SPAPI_E_NON_WINDOWS_DRIVER                                                Handle        = 0x800F022E
	SPAPI_E_NO_CATALOG_FOR_OEM_INF                                            Handle        = 0x800F022F
	SPAPI_E_DEVINSTALL_QUEUE_NONNATIVE                                        Handle        = 0x800F0230
	SPAPI_E_NOT_DISABLEABLE                                                   Handle        = 0x800F0231
	SPAPI_E_CANT_REMOVE_DEVINST                                               Handle        = 0x800F0232
	SPAPI_E_INVALID_TARGET                                                    Handle        = 0x800F0233
	SPAPI_E_DRIVER_NONNATIVE                                                  Handle        = 0x800F0234
	SPAPI_E_IN_WOW64                                                          Handle        = 0x800F0235
	SPAPI_E_SET_SYSTEM_RESTORE_POINT                                          Handle        = 0x800F0236
	SPAPI_E_INCORRECTLY_COPIED_INF                                            Handle        = 0x800F0237
	SPAPI_E_SCE_DISABLED                                                      Handle        = 0x800F0238
	SPAPI_E_UNKNOWN_EXCEPTION                                                 Handle        = 0x800F0239
	SPAPI_E_PNP_REGISTRY_ERROR                                                Handle        = 0x800F023A
	SPAPI_E_REMOTE_REQUEST_UNSUPPORTED                                        Handle        = 0x800F023B
	SPAPI_E_NOT_AN_INSTALLED_OEM_INF                                          Handle        = 0x800F023C
	SPAPI_E_INF_IN_USE_BY_DEVICES                                             Handle        = 0x800F023D
	SPAPI_E_DI_FUNCTION_OBSOLETE                                              Handle        = 0x800F023E
	SPAPI_E_NO_AUTHENTICODE_CATALOG                                           Handle        = 0x800F023F
	SPAPI_E_AUTHENTICODE_DISALLOWED                                           Handle        = 0x800F0240
	SPAPI_E_AUTHENTICODE_TRUSTED_PUBLISHER                                    Handle        = 0x800F0241
	SPAPI_E_AUTHENTICODE_TRUST_NOT_ESTABLISHED                                Handle        = 0x800F0242
	SPAPI_E_AUTHENTICODE_PUBLISHER_NOT_TRUSTED                                Handle        = 0x800F0243
	SPAPI_E_SIGNATURE_OSATTRIBUTE_MISMATCH                                    Handle        = 0x800F0244
	SPAPI_E_ONLY_VALIDATE_VIA_AUTHENTICODE                                    Handle        = 0x800F0245
	SPAPI_E_DEVICE_INSTALLER_NOT_READY                                        Handle        = 0x800F0246
	SPAPI_E_DRIVER_STORE_ADD_FAILED                                           Handle        = 0x800F0247
	SPAPI_E_DEVICE_INSTALL_BLOCKED                                            Handle        = 0x800F0248
	SPAPI_E_DRIVER_INSTALL_BLOCKED                                            Handle        = 0x800F0249
	SPAPI_E_WRONG_INF_TYPE                                                    Handle        = 0x800F024A
	SPAPI_E_FILE_HASH_NOT_IN_CATALOG                                          Handle        = 0x800F024B
	SPAPI_E_DRIVER_STORE_DELETE_FAILED                                        Handle        = 0x800F024C
	SPAPI_E_UNRECOVERABLE_STACK_OVERFLOW                                      Handle        = 0x800F0300
	SPAPI_E_ERROR_NOT_INSTALLED                                               Handle        = 0x800F1000
	SCARD_S_SUCCESS                                                                         = S_OK
	SCARD_F_INTERNAL_ERROR                                                    Handle        = 0x80100001
	SCARD_E_CANCELLED                                                         Handle        = 0x80100002
	SCARD_E_INVALID_HANDLE                                                    Handle        = 0x80100003
	SCARD_E_INVALID_PARAMETER                                                 Handle        = 0x80100004
	SCARD_E_INVALID_TARGET                                                    Handle        = 0x80100005
	SCARD_E_NO_MEMORY                                                         Handle        = 0x80100006
	SCARD_F_WAITED_TOO_LONG                                                   Handle        = 0x80100007
	SCARD_E_INSUFFICIENT_BUFFER                                               Handle        = 0x80100008
	SCARD_E_UNKNOWN_READER                                                    Handle        = 0x80100009
	SCARD_E_TIMEOUT                                                           Handle        = 0x8010000A
	SCARD_E_SHARING_VIOLATION                                                 Handle        = 0x8010000B
	SCARD_E_NO_SMARTCARD                                                      Handle        = 0x8010000C
	SCARD_E_UNKNOWN_CARD                                                      Handle        = 0x8010000D
	SCARD_E_CANT_DISPOSE                                                      Handle        = 0x8010000E
	SCARD_E_PROTO_MISMATCH                                                    Handle        = 0x8010000F
	SCARD_E_NOT_READY                                                         Handle        = 0x80100010
	SCARD_E_INVALID_VALUE                                                     Handle        = 0x80100011
	SCARD_E_SYSTEM_CANCELLED                                                  Handle        = 0x80100012
	SCARD_F_COMM_ERROR                                                        Handle        = 0x80100013
	SCARD_F_UNKNOWN_ERROR                                                     Handle        = 0x80100014
	SCARD_E_INVALID_ATR                                                       Handle        = 0x80100015
	SCARD_E_NOT_TRANSACTED                                                    Handle        = 0x80100016
	SCARD_E_READER_UNAVAILABLE                                                Handle        = 0x80100017
	SCARD_P_SHUTDOWN                                                          Handle        = 0x80100018
	SCARD_E_PCI_TOO_SMALL                                                     Handle        = 0x80100019
	SCARD_E_READER_UNSUPPORTED                                                Handle        = 0x8010001A
	SCARD_E_DUPLICATE_READER                                                  Handle        = 0x8010001B
	SCARD_E_CARD_UNSUPPORTED                                                  Handle        = 0x8010001C
	SCARD_E_NO_SERVICE                                                        Handle        = 0x8010001D
	SCARD_E_SERVICE_STOPPED                                                   Handle        = 0x8010001E
	SCARD_E_UNEXPECTED                                                        Handle        = 0x8010001F
	SCARD_E_ICC_INSTALLATION                                                  Handle        = 0x80100020
	SCARD_E_ICC_CREATEORDER                                                   Handle        = 0x80100021
	SCARD_E_UNSUPPORTED_FEATURE                                               Handle        = 0x80100022
	SCARD_E_DIR_NOT_FOUND                                                     Handle        = 0x80100023
	SCARD_E_FILE_NOT_FOUND                                                    Handle        = 0x80100024
	SCARD_E_NO_DIR                                                            Handle        = 0x80100025
	SCARD_E_NO_FILE                                                           Handle        = 0x80100026
	SCARD_E_NO_ACCESS                                                         Handle        = 0x80100027
	SCARD_E_WRITE_TOO_MANY                                                    Handle        = 0x80100028
	SCARD_E_BAD_SEEK                                                          Handle        = 0x80100029
	SCARD_E_INVALID_CHV                                                       Handle        = 0x8010002A
	SCARD_E_UNKNOWN_RES_MNG                                                   Handle        = 0x8010002B
	SCARD_E_NO_SUCH_CERTIFICATE                                               Handle        = 0x8010002C
	SCARD_E_CERTIFICATE_UNAVAILABLE                                           Handle        = 0x8010002D
	SCARD_E_NO_READERS_AVAILABLE                                              Handle        = 0x8010002E
	SCARD_E_COMM_DATA_LOST                                                    Handle        = 0x8010002F
	SCARD_E_NO_KEY_CONTAINER                                                  Handle        = 0x80100030
	SCARD_E_SERVER_TOO_BUSY                                                   Handle        = 0x80100031
	SCARD_E_PIN_CACHE_EXPIRED                                                 Handle        = 0x80100032
	SCARD_E_NO_PIN_CACHE                                                      Handle        = 0x80100033
	SCARD_E_READ_ONLY_CARD                                                    Handle        = 0x80100034
	SCARD_W_UNSUPPORTED_CARD                                                  Handle        = 0x80100065
	SCARD_W_UNRESPONSIVE_CARD                                                 Handle        = 0x80100066
	SCARD_W_UNPOWERED_CARD                                                    Handle        = 0x80100067
	SCARD_W_RESET_CARD                                                        Handle        = 0x80100068
	SCARD_W_REMOVED_CARD                                                      Handle        = 0x80100069
	SCARD_W_SECURITY_VIOLATION                                                Handle        = 0x8010006A
	SCARD_W_WRONG_CHV                                                         Handle        = 0x8010006B
	SCARD_W_CHV_BLOCKED                                                       Handle        = 0x8010006C
	SCARD_W_EOF                                                               Handle        = 0x8010006D
	SCARD_W_CANCELLED_BY_USER                                                 Handle        = 0x8010006E
	SCARD_W_CARD_NOT_AUTHENTICATED                                            Handle        = 0x8010006F
	SCARD_W_CACHE_ITEM_NOT_FOUND                                              Handle        = 0x80100070
	SCARD_W_CACHE_ITEM_STALE                                                  Handle        = 0x80100071
	SCARD_W_CACHE_ITEM_TOO_BIG                                                Handle        = 0x80100072
	COMADMIN_E_OBJECTERRORS                                                   Handle        = 0x80110401
	COMADMIN_E_OBJECTINVALID                                                  Handle        = 0x80110402
	COMADMIN_E_KEYMISSING                                                     Handle        = 0x80110403
	COMADMIN_E_ALREADYINSTALLED                                               Handle        = 0x80110404
	COMADMIN_E_APP_FILE_WRITEFAIL                                             Handle        = 0x80110407
	COMADMIN_E_APP_FILE_READFAIL                                              Handle        = 0x80110408
	COMADMIN_E_APP_FILE_VERSION                                               Handle        = 0x80110409
	COMADMIN_E_BADPATH                                                        Handle        = 0x8011040A
	COMADMIN_E_APPLICATIONEXISTS                                              Handle        = 0x8011040B
	COMADMIN_E_ROLEEXISTS                                                     Handle        = 0x8011040C
	COMADMIN_E_CANTCOPYFILE                                                   Handle        = 0x8011040D
	COMADMIN_E_NOUSER                                                         Handle        = 0x8011040F
	COMADMIN_E_INVALIDUSERIDS                                                 Handle        = 0x80110410
	COMADMIN_E_NOREGISTRYCLSID                                                Handle        = 0x80110411
	COMADMIN_E_BADREGISTRYPROGID                                              Handle        = 0x80110412
	COMADMIN_E_AUTHENTICATIONLEVEL                                            Handle        = 0x80110413
	COMADMIN_E_USERPASSWDNOTVALID                                             Handle        = 0x80110414
	COMADMIN_E_CLSIDORIIDMISMATCH                                             Handle        = 0x80110418
	COMADMIN_E_REMOTEINTERFACE                                                Handle        = 0x80110419
	COMADMIN_E_DLLREGISTERSERVER                                              Handle        = 0x8011041A
	COMADMIN_E_NOSERVERSHARE                                                  Handle        = 0x8011041B
	COMADMIN_E_DLLLOADFAILED                                                  Handle        = 0x8011041D
	COMADMIN_E_BADREGISTRYLIBID                                               Handle        = 0x8011041E
	COMADMIN_E_APPDIRNOTFOUND                                                 Handle        = 0x8011041F
	COMADMIN_E_REGISTRARFAILED                                                Handle        = 0x80110423
	COMADMIN_E_COMPFILE_DOESNOTEXIST                                          Handle        = 0x80110424
	COMADMIN_E_COMPFILE_LOADDLLFAIL                                           Handle        = 0x80110425
	COMADMIN_E_COMPFILE_GETCLASSOBJ                                           Handle        = 0x80110426
	COMADMIN_E_COMPFILE_CLASSNOTAVAIL                                         Handle        = 0x80110427
	COMADMIN_E_COMPFILE_BADTLB                                                Handle        = 0x80110428
	COMADMIN_E_COMPFILE_NOTINSTALLABLE                                        Handle        = 0x80110429
	COMADMIN_E_NOTCHANGEABLE                                                  Handle        = 0x8011042A
	COMADMIN_E_NOTDELETEABLE                                                  Handle        = 0x8011042B
	COMADMIN_E_SESSION                                                        Handle        = 0x8011042C
	COMADMIN_E_COMP_MOVE_LOCKED                                               Handle        = 0x8011042D
	COMADMIN_E_COMP_MOVE_BAD_DEST                                             Handle        = 0x8011042E
	COMADMIN_E_REGISTERTLB                                                    Handle        = 0x80110430
	COMADMIN_E_SYSTEMAPP                                                      Handle        = 0x80110433
	COMADMIN_E_COMPFILE_NOREGISTRAR                                           Handle        = 0x80110434
	COMADMIN_E_COREQCOMPINSTALLED                                             Handle        = 0x80110435
	COMADMIN_E_SERVICENOTINSTALLED                                            Handle        = 0x80110436
	COMADMIN_E_PROPERTYSAVEFAILED                                             Handle        = 0x80110437
	COMADMIN_E_OBJECTEXISTS                                                   Handle        = 0x80110438
	COMADMIN_E_COMPONENTEXISTS                                                Handle        = 0x80110439
	COMADMIN_E_REGFILE_CORRUPT                                                Handle        = 0x8011043B
	COMADMIN_E_PROPERTY_OVERFLOW                                              Handle        = 0x8011043C
	COMADMIN_E_NOTINREGISTRY                                                  Handle        = 0x8011043E
	COMADMIN_E_OBJECTNOTPOOLABLE                                              Handle        = 0x8011043F
	COMADMIN_E_APPLID_MATCHES_CLSID                                           Handle        = 0x80110446
	COMADMIN_E_ROLE_DOES_NOT_EXIST                                            Handle        = 0x80110447
	COMADMIN_E_START_APP_NEEDS_COMPONENTS                                     Handle        = 0x80110448
	COMADMIN_E_REQUIRES_DIFFERENT_PLATFORM                                    Handle        = 0x80110449
	COMADMIN_E_CAN_NOT_EXPORT_APP_PROXY                                       Handle        = 0x8011044A
	COMADMIN_E_CAN_NOT_START_APP                                              Handle        = 0x8011044B
	COMADMIN_E_CAN_NOT_EXPORT_SYS_APP                                         Handle        = 0x8011044C
	COMADMIN_E_CANT_SUBSCRIBE_TO_COMPONENT                                    Handle        = 0x8011044D
	COMADMIN_E_EVENTCLASS_CANT_BE_SUBSCRIBER                                  Handle        = 0x8011044E
	COMADMIN_E_LIB_APP_PROXY_INCOMPATIBLE                                     Handle        = 0x8011044F
	COMADMIN_E_BASE_PARTITION_ONLY                                            Handle        = 0x80110450
	COMADMIN_E_START_APP_DISABLED                                             Handle        = 0x80110451
	COMADMIN_E_CAT_DUPLICATE_PARTITION_NAME                                   Handle        = 0x80110457
	COMADMIN_E_CAT_INVALID_PARTITION_NAME                                     Handle        = 0x80110458
	COMADMIN_E_CAT_PARTITION_IN_USE                                           Handle        = 0x80110459
	COMADMIN_E_FILE_PARTITION_DUPLICATE_FILES                                 Handle        = 0x8011045A
	COMADMIN_E_CAT_IMPORTED_COMPONENTS_NOT_ALLOWED                            Handle        = 0x8011045B
	COMADMIN_E_AMBIGUOUS_APPLICATION_NAME                                     Handle        = 0x8011045C
	COMADMIN_E_AMBIGUOUS_PARTITION_NAME                                       Handle        = 0x8011045D
	COMADMIN_E_REGDB_NOTINITIALIZED                                           Handle        = 0x80110472
	COMADMIN_E_REGDB_NOTOPEN                                                  Handle        = 0x80110473
	COMADMIN_E_REGDB_SYSTEMERR                                                Handle        = 0x80110474
	COMADMIN_E_REGDB_ALREADYRUNNING                                           Handle        = 0x80110475
	COMADMIN_E_MIG_VERSIONNOTSUPPORTED                                        Handle        = 0x80110480
	COMADMIN_E_MIG_SCHEMANOTFOUND                                             Handle        = 0x80110481
	COMADMIN_E_CAT_BITNESSMISMATCH                                            Handle        = 0x80110482
	COMADMIN_E_CAT_UNACCEPTABLEBITNESS                                        Handle        = 0x80110483
	COMADMIN_E_CAT_WRONGAPPBITNESS                                            Handle        = 0x80110484
	COMADMIN_E_CAT_PAUSE_RESUME_NOT_SUPPORTED                                 Handle        = 0x80110485
	COMADMIN_E_CAT_SERVERFAULT                                                Handle        = 0x80110486
	COMQC_E_APPLICATION_NOT_QUEUED                                            Handle        = 0x80110600
	COMQC_E_NO_QUEUEABLE_INTERFACES                                           Handle        = 0x80110601
	COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE                                     Handle        = 0x80110602
	COMQC_E_NO_IPERSISTSTREAM                                                 Handle        = 0x80110603
	COMQC_E_BAD_MESSAGE                                                       Handle        = 0x80110604
	COMQC_E_UNAUTHENTICATED                                                   Handle        = 0x80110605
	COMQC_E_UNTRUSTED_ENQUEUER                                                Handle        = 0x80110606
	MSDTC_E_DUPLICATE_RESOURCE                                                Handle        = 0x80110701
	COMADMIN_E_OBJECT_PARENT_MISSING                                          Handle        = 0x80110808
	COMADMIN_E_OBJECT_DOES_NOT_EXIST                                          Handle        = 0x80110809
	COMADMIN_E_APP_NOT_RUNNING                                                Handle        = 0x8011080A
	COMADMIN_E_INVALID_PARTITION                                              Handle        = 0x8011080B
	COMADMIN_E_SVCAPP_NOT_POOLABLE_OR_RECYCLABLE                              Handle        = 0x8011080D
	COMADMIN_E_USER_IN_SET                                                    Handle        = 0x8011080E
	COMADMIN_E_CANTRECYCLELIBRARYAPPS                                         Handle        = 0x8011080F
	COMADMIN_E_CANTRECYCLESERVICEAPPS                                         Handle        = 0x80110811
	COMADMIN_E_PROCESSALREADYRECYCLED                                         Handle        = 0x80110812
	COMADMIN_E_PAUSEDPROCESSMAYNOTBERECYCLED                                  Handle        = 0x80110813
	COMADMIN_E_CANTMAKEINPROCSERVICE                                          Handle        = 0x80110814
	COMADMIN_E_PROGIDINUSEBYCLSID                                             Handle        = 0x80110815
	COMADMIN_E_DEFAULT_PARTITION_NOT_IN_SET                                   Handle        = 0x80110816
	COMADMIN_E_RECYCLEDPROCESSMAYNOTBEPAUSED                                  Handle        = 0x80110817
	COMADMIN_E_PARTITION_ACCESSDENIED                                         Handle        = 0x80110818
	COMADMIN_E_PARTITION_MSI_ONLY                                             Handle        = 0x80110819
	COMADMIN_E_LEGACYCOMPS_NOT_ALLOWED_IN_1_0_FORMAT                          Handle        = 0x8011081A
	COMADMIN_E_LEGACYCOMPS_NOT_ALLOWED_IN_NONBASE_PARTITIONS                  Handle        = 0x8011081B
	COMADMIN_E_COMP_MOVE_SOURCE                                               Handle        = 0x8011081C
	COMADMIN_E_COMP_MOVE_DEST                                                 Handle        = 0x8011081D
	COMADMIN_E_COMP_MOVE_PRIVATE                                              Handle        = 0x8011081E
	COMADMIN_E_BASEPARTITION_REQUIRED_IN_SET                                  Handle        = 0x8011081F
	COMADMIN_E_CANNOT_ALIAS_EVENTCLASS                                        Handle        = 0x80110820
	COMADMIN_E_PRIVATE_ACCESSDENIED                                           Handle        = 0x80110821
	COMADMIN_E_SAFERINVALID                                                   Handle        = 0x80110822
	COMADMIN_E_REGISTRY_ACCESSDENIED                                          Handle        = 0x80110823
	COMADMIN_E_PARTITIONS_DISABLED                                            Handle        = 0x80110824
	WER_S_REPORT_DEBUG                                                        Handle        = 0x001B0000
	WER_S_REPORT_UPLOADED                                                     Handle        = 0x001B0001
	WER_S_REPORT_QUEUED                                                       Handle        = 0x001B0002
	WER_S_DISABLED                                                            Handle        = 0x001B0003
	WER_S_SUSPENDED_UPLOAD                                                    Handle        = 0x001B0004
	WER_S_DISABLED_QUEUE                                                      Handle        = 0x001B0005
	WER_S_DISABLED_ARCHIVE                                                    Handle        = 0x001B0006
	WER_S_REPORT_ASYNC                                                        Handle        = 0x001B0007
	WER_S_IGNORE_ASSERT_INSTANCE                                              Handle        = 0x001B0008
	WER_S_IGNORE_ALL_ASSERTS                                                  Handle        = 0x001B0009
	WER_S_ASSERT_CONTINUE                                                     Handle        = 0x001B000A
	WER_S_THROTTLED                                                           Handle        = 0x001B000B
	WER_S_REPORT_UPLOADED_CAB                                                 Handle        = 0x001B000C
	WER_E_CRASH_FAILURE                                                       Handle        = 0x801B8000
	WER_E_CANCELED                                                            Handle        = 0x801B8001
	WER_E_NETWORK_FAILURE                                                     Handle        = 0x801B8002
	WER_E_NOT_INITIALIZED                                                     Handle        = 0x801B8003
	WER_E_ALREADY_REPORTING                                                   Handle        = 0x801B8004
	WER_E_DUMP_THROTTLED                                                      Handle        = 0x801B8005
	WER_E_INSUFFICIENT_CONSENT                                                Handle        = 0x801B8006
	WER_E_TOO_HEAVY                                                           Handle        = 0x801B8007
	ERROR_FLT_IO_COMPLETE                                                     Handle        = 0x001F0001
	ERROR_FLT_NO_HANDLER_DEFINED                                              Handle        = 0x801F0001
	ERROR_FLT_CONTEXT_ALREADY_DEFINED                                         Handle        = 0x801F0002
	ERROR_FLT_INVALID_ASYNCHRONOUS_REQUEST                                    Handle        = 0x801F0003
	ERROR_FLT_DISALLOW_FAST_IO                                                Handle        = 0x801F0004
	ERROR_FLT_INVALID_NAME_REQUEST                                            Handle        = 0x801F0005
	ERROR_FLT_NOT_SAFE_TO_POST_OPERATION                                      Handle        = 0x801F0006
	ERROR_FLT_NOT_INITIALIZED                                                 Handle        = 0x801F0007
	ERROR_FLT_FILTER_NOT_READY                                                Handle        = 0x801F0008
	ERROR_FLT_POST_OPERATION_CLEANUP                                          Handle        = 0x801F0009
	ERROR_FLT_INTERNAL_ERROR                                                  Handle        = 0x801F000A
	ERROR_FLT_DELETING_OBJECT                                                 Handle        = 0x801F000B
	ERROR_FLT_MUST_BE_NONPAGED_POOL                                           Handle        = 0x801F000C
	ERROR_FLT_DUPLICATE_ENTRY                                                 Handle        = 0x801F000D
	ERROR_FLT_CBDQ_DISABLED                                                   Handle        = 0x801F000E
	ERROR_FLT_DO_NOT_ATTACH                                                   Handle        = 0x801F000F
	ERROR_FLT_DO_NOT_DETACH                                                   Handle        = 0x801F0010
	ERROR_FLT_INSTANCE_ALTITUDE_COLLISION                                     Handle        = 0x801F0011
	ERROR_FLT_INSTANCE_NAME_COLLISION                                         Handle        = 0x801F0012
	ERROR_FLT_FILTER_NOT_FOUND                                                Handle        = 0x801F0013
	ERROR_FLT_VOLUME_NOT_FOUND                                                Handle        = 0x801F0014
	ERROR_FLT_INSTANCE_NOT_FOUND                                              Handle        = 0x801F0015
	ERROR_FLT_CONTEXT_ALLOCATION_NOT_FOUND                                    Handle        = 0x801F0016
	ERROR_FLT_INVALID_CONTEXT_REGISTRATION                                    Handle        = 0x801F0017
	ERROR_FLT_NAME_CACHE_MISS                                                 Handle        = 0x801F0018
	ERROR_FLT_NO_DEVICE_OBJECT                                                Handle        = 0x801F0019
	ERROR_FLT_VOLUME_ALREADY_MOUNTED                                          Handle        = 0x801F001A
	ERROR_FLT_ALREADY_ENLISTED                                                Handle        = 0x801F001B
	ERROR_FLT_CONTEXT_ALREADY_LINKED                                          Handle        = 0x801F001C
	ERROR_FLT_NO_WAITER_FOR_REPLY                                             Handle        = 0x801F0020
	ERROR_FLT_REGISTRATION_BUSY                                               Handle        = 0x801F0023
	ERROR_HUNG_DISPLAY_DRIVER_THREAD                                          Handle        = 0x80260001
	DWM_E_COMPOSITIONDISABLED                                                 Handle        = 0x80263001
	DWM_E_REMOTING_NOT_SUPPORTED                                              Handle        = 0x80263002
	DWM_E_NO_REDIRECTION_SURFACE_AVAILABLE                                    Handle        = 0x80263003
	DWM_E_NOT_QUEUING_PRESENTS                                                Handle        = 0x80263004
	DWM_E_ADAPTER_NOT_FOUND                                                   Handle        = 0x80263005
	DWM_S_GDI_REDIRECTION_SURFACE                                             Handle        = 0x00263005
	DWM_E_TEXTURE_TOO_LARGE                                                   Handle        = 0x80263007
	DWM_S_GDI_REDIRECTION_SURFACE_BLT_VIA_GDI                                 Handle        = 0x00263008
	ERROR_MONITOR_NO_DESCRIPTOR                                               Handle        = 0x00261001
	ERROR_MONITOR_UNKNOWN_DESCRIPTOR_FORMAT                                   Handle        = 0x00261002
	ERROR_MONITOR_INVALID_DESCRIPTOR_CHECKSUM                                 Handle        = 0xC0261003
	ERROR_MONITOR_INVALID_STANDARD_TIMING_BLOCK                               Handle        = 0xC0261004
	ERROR_MONITOR_WMI_DATABLOCK_REGISTRATION_FAILED                           Handle        = 0xC0261005
	ERROR_MONITOR_INVALID_SERIAL_NUMBER_MONDSC_BLOCK                          Handle        = 0xC0261006
	ERROR_MONITOR_INVALID_USER_FRIENDLY_MONDSC_BLOCK                          Handle        = 0xC0261007
	ERROR_MONITOR_NO_MORE_DESCRIPTOR_DATA                                     Handle        = 0xC0261008
	ERROR_MONITOR_INVALID_DETAILED_TIMING_BLOCK                               Handle        = 0xC0261009
	ERROR_MONITOR_INVALID_MANUFACTURE_DATE                                    Handle        = 0xC026100A
	ERROR_GRAPHICS_NOT_EXCLUSIVE_MODE_OWNER                                   Handle        = 0xC0262000
	ERROR_GRAPHICS_INSUFFICIENT_DMA_BUFFER                                    Handle        = 0xC0262001
	ERROR_GRAPHICS_INVALID_DISPLAY_ADAPTER                                    Handle        = 0xC0262002
	ERROR_GRAPHICS_ADAPTER_WAS_RESET                                          Handle        = 0xC0262003
	ERROR_GRAPHICS_INVALID_DRIVER_MODEL                                       Handle        = 0xC0262004
	ERROR_GRAPHICS_PRESENT_MODE_CHANGED                                       Handle        = 0xC0262005
	ERROR_GRAPHICS_PRESENT_OCCLUDED                                           Handle        = 0xC0262006
	ERROR_GRAPHICS_PRESENT_DENIED                                             Handle        = 0xC0262007
	ERROR_GRAPHICS_CANNOTCOLORCONVERT                                         Handle        = 0xC0262008
	ERROR_GRAPHICS_DRIVER_MISMATCH                                            Handle        = 0xC0262009
	ERROR_GRAPHICS_PARTIAL_DATA_POPULATED                                     Handle        = 0x4026200A
	ERROR_GRAPHICS_PRESENT_REDIRECTION_DISABLED                               Handle        = 0xC026200B
	ERROR_GRAPHICS_PRESENT_UNOCCLUDED                                         Handle        = 0xC026200C
	ERROR_GRAPHICS_WINDOWDC_NOT_AVAILABLE                                     Handle        = 0xC026200D
	ERROR_GRAPHICS_WINDOWLESS_PRESENT_DISABLED                                Handle        = 0xC026200E
	ERROR_GRAPHICS_PRESENT_INVALID_WINDOW                                     Handle        = 0xC026200F
	ERROR_GRAPHICS_PRESENT_BUFFER_NOT_BOUND                                   Handle        = 0xC0262010
	ERROR_GRAPHICS_VAIL_STATE_CHANGED                                         Handle        = 0xC0262011
	ERROR_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN                         Handle        = 0xC0262012
	ERROR_GRAPHICS_INDIRECT_DISPLAY_DEVICE_STOPPED                            Handle        = 0xC0262013
	ERROR_GRAPHICS_NO_VIDEO_MEMORY                                            Handle        = 0xC0262100
	ERROR_GRAPHICS_CANT_LOCK_MEMORY                                           Handle        = 0xC0262101
	ERROR_GRAPHICS_ALLOCATION_BUSY                                            Handle        = 0xC0262102
	ERROR_GRAPHICS_TOO_MANY_REFERENCES                                        Handle        = 0xC0262103
	ERROR_GRAPHICS_TRY_AGAIN_LATER                                            Handle        = 0xC0262104
	ERROR_GRAPHICS_TRY_AGAIN_NOW                                              Handle        = 0xC0262105
	ERROR_GRAPHICS_ALLOCATION_INVALID                                         Handle        = 0xC0262106
	ERROR_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE                           Handle        = 0xC0262107
	ERROR_GRAPHICS_UNSWIZZLING_APERTURE_UNSUPPORTED                           Handle        = 0xC0262108
	ERROR_GRAPHICS_CANT_EVICT_PINNED_ALLOCATION                               Handle        = 0xC0262109
	ERROR_GRAPHICS_INVALID_ALLOCATION_USAGE                                   Handle        = 0xC0262110
	ERROR_GRAPHICS_CANT_RENDER_LOCKED_ALLOCATION                              Handle        = 0xC0262111
	ERROR_GRAPHICS_ALLOCATION_CLOSED                                          Handle        = 0xC0262112
	ERROR_GRAPHICS_INVALID_ALLOCATION_INSTANCE                                Handle        = 0xC0262113
	ERROR_GRAPHICS_INVALID_ALLOCATION_HANDLE                                  Handle        = 0xC0262114
	ERROR_GRAPHICS_WRONG_ALLOCATION_DEVICE                                    Handle        = 0xC0262115
	ERROR_GRAPHICS_ALLOCATION_CONTENT_LOST                                    Handle        = 0xC0262116
	ERROR_GRAPHICS_GPU_EXCEPTION_ON_DEVICE                                    Handle        = 0xC0262200
	ERROR_GRAPHICS_SKIP_ALLOCATION_PREPARATION                                Handle        = 0x40262201
	ERROR_GRAPHICS_INVALID_VIDPN_TOPOLOGY                                     Handle        = 0xC0262300
	ERROR_GRAPHICS_VIDPN_TOPOLOGY_NOT_SUPPORTED                               Handle        = 0xC0262301
	ERROR_GRAPHICS_VIDPN_TOPOLOGY_CURRENTLY_NOT_SUPPORTED                     Handle        = 0xC0262302
	ERROR_GRAPHICS_INVALID_VIDPN                                              Handle        = 0xC0262303
	ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE                               Handle        = 0xC0262304
	ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET                               Handle        = 0xC0262305
	ERROR_GRAPHICS_VIDPN_MODALITY_NOT_SUPPORTED                               Handle        = 0xC0262306
	ERROR_GRAPHICS_MODE_NOT_PINNED                                            Handle        = 0x00262307
	ERROR_GRAPHICS_INVALID_VIDPN_SOURCEMODESET                                Handle        = 0xC0262308
	ERROR_GRAPHICS_INVALID_VIDPN_TARGETMODESET                                Handle        = 0xC0262309
	ERROR_GRAPHICS_INVALID_FREQUENCY                                          Handle        = 0xC026230A
	ERROR_GRAPHICS_INVALID_ACTIVE_REGION                                      Handle        = 0xC026230B
	ERROR_GRAPHICS_INVALID_TOTAL_REGION                                       Handle        = 0xC026230C
	ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE_MODE                          Handle        = 0xC0262310
	ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET_MODE                          Handle        = 0xC0262311
	ERROR_GRAPHICS_PINNED_MODE_MUST_REMAIN_IN_SET                             Handle        = 0xC0262312
	ERROR_GRAPHICS_PATH_ALREADY_IN_TOPOLOGY                                   Handle        = 0xC0262313
	ERROR_GRAPHICS_MODE_ALREADY_IN_MODESET                                    Handle        = 0xC0262314
	ERROR_GRAPHICS_INVALID_VIDEOPRESENTSOURCESET                              Handle        = 0xC0262315
	ERROR_GRAPHICS_INVALID_VIDEOPRESENTTARGETSET                              Handle        = 0xC0262316
	ERROR_GRAPHICS_SOURCE_ALREADY_IN_SET                                      Handle        = 0xC0262317
	ERROR_GRAPHICS_TARGET_ALREADY_IN_SET                                      Handle        = 0xC0262318
	ERROR_GRAPHICS_INVALID_VIDPN_PRESENT_PATH                                 Handle        = 0xC0262319
	ERROR_GRAPHICS_NO_RECOMMENDED_VIDPN_TOPOLOGY                              Handle        = 0xC026231A
	ERROR_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGESET                          Handle        = 0xC026231B
	ERROR_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE                             Handle        = 0xC026231C
	ERROR_GRAPHICS_FREQUENCYRANGE_NOT_IN_SET                                  Handle        = 0xC026231D
	ERROR_GRAPHICS_NO_PREFERRED_MODE                                          Handle        = 0x0026231E
	ERROR_GRAPHICS_FREQUENCYRANGE_ALREADY_IN_SET                              Handle        = 0xC026231F
	ERROR_GRAPHICS_STALE_MODESET                                              Handle        = 0xC0262320
	ERROR_GRAPHICS_INVALID_MONITOR_SOURCEMODESET                              Handle        = 0xC0262321
	ERROR_GRAPHICS_INVALID_MONITOR_SOURCE_MODE                                Handle        = 0xC0262322
	ERROR_GRAPHICS_NO_RECOMMENDED_FUNCTIONAL_VIDPN                            Handle        = 0xC0262323
	ERROR_GRAPHICS_MODE_ID_MUST_BE_UNIQUE                                     Handle        = 0xC0262324
	ERROR_GRAPHICS_EMPTY_ADAPTER_MONITOR_MODE_SUPPORT_INTERSECTION            Handle        = 0xC0262325
	ERROR_GRAPHICS_VIDEO_PRESENT_TARGETS_LESS_THAN_SOURCES                    Handle        = 0xC0262326
	ERROR_GRAPHICS_PATH_NOT_IN_TOPOLOGY                                       Handle        = 0xC0262327
	ERROR_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_SOURCE                      Handle        = 0xC0262328
	ERROR_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_TARGET                      Handle        = 0xC0262329
	ERROR_GRAPHICS_INVALID_MONITORDESCRIPTORSET                               Handle        = 0xC026232A
	ERROR_GRAPHICS_INVALID_MONITORDESCRIPTOR                                  Handle        = 0xC026232B
	ERROR_GRAPHICS_MONITORDESCRIPTOR_NOT_IN_SET                               Handle        = 0xC026232C
	ERROR_GRAPHICS_MONITORDESCRIPTOR_ALREADY_IN_SET                           Handle        = 0xC026232D
	ERROR_GRAPHICS_MONITORDESCRIPTOR_ID_MUST_BE_UNIQUE                        Handle        = 0xC026232E
	ERROR_GRAPHICS_INVALID_VIDPN_TARGET_SUBSET_TYPE                           Handle        = 0xC026232F
	ERROR_GRAPHICS_RESOURCES_NOT_RELATED                                      Handle        = 0xC0262330
	ERROR_GRAPHICS_SOURCE_ID_MUST_BE_UNIQUE                                   Handle        = 0xC0262331
	ERROR_GRAPHICS_TARGET_ID_MUST_BE_UNIQUE                                   Handle        = 0xC0262332
	ERROR_GRAPHICS_NO_AVAILABLE_VIDPN_TARGET                                  Handle        = 0xC0262333
	ERROR_GRAPHICS_MONITOR_COULD_NOT_BE_ASSOCIATED_WITH_ADAPTER               Handle        = 0xC0262334
	ERROR_GRAPHICS_NO_VIDPNMGR                                                Handle        = 0xC0262335
	ERROR_GRAPHICS_NO_ACTIVE_VIDPN                                            Handle        = 0xC0262336
	ERROR_GRAPHICS_STALE_VIDPN_TOPOLOGY                                       Handle        = 0xC0262337
	ERROR_GRAPHICS_MONITOR_NOT_CONNECTED                                      Handle        = 0xC0262338
	ERROR_GRAPHICS_SOURCE_NOT_IN_TOPOLOGY                                     Handle        = 0xC0262339
	ERROR_GRAPHICS_INVALID_PRIMARYSURFACE_SIZE                                Handle        = 0xC026233A
	ERROR_GRAPHICS_INVALID_VISIBLEREGION_SIZE                                 Handle        = 0xC026233B
	ERROR_GRAPHICS_INVALID_STRIDE                                             Handle        = 0xC026233C
	ERROR_GRAPHICS_INVALID_PIXELFORMAT                                        Handle        = 0xC026233D
	ERROR_GRAPHICS_INVALID_COLORBASIS                                         Handle        = 0xC026233E
	ERROR_GRAPHICS_INVALID_PIXELVALUEACCESSMODE                               Handle        = 0xC026233F
	ERROR_GRAPHICS_TARGET_NOT_IN_TOPOLOGY                                     Handle        = 0xC0262340
	ERROR_GRAPHICS_NO_DISPLAY_MODE_MANAGEMENT_SUPPORT                         Handle        = 0xC0262341
	ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE                                        Handle        = 0xC0262342
	ERROR_GRAPHICS_CANT_ACCESS_ACTIVE_VIDPN                                   Handle        = 0xC0262343
	ERROR_GRAPHICS_INVALID_PATH_IMPORTANCE_ORDINAL                            Handle        = 0xC0262344
	ERROR_GRAPHICS_INVALID_PATH_CONTENT_GEOMETRY_TRANSFORMATION               Handle        = 0xC0262345
	ERROR_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_SUPPORTED         Handle        = 0xC0262346
	ERROR_GRAPHICS_INVALID_GAMMA_RAMP                                         Handle        = 0xC0262347
	ERROR_GRAPHICS_GAMMA_RAMP_NOT_SUPPORTED                                   Handle        = 0xC0262348
	ERROR_GRAPHICS_MULTISAMPLING_NOT_SUPPORTED                                Handle        = 0xC0262349
	ERROR_GRAPHICS_MODE_NOT_IN_MODESET                                        Handle        = 0xC026234A
	ERROR_GRAPHICS_DATASET_IS_EMPTY                                           Handle        = 0x0026234B
	ERROR_GRAPHICS_NO_MORE_ELEMENTS_IN_DATASET                                Handle        = 0x0026234C
	ERROR_GRAPHICS_INVALID_VIDPN_TOPOLOGY_RECOMMENDATION_REASON               Handle        = 0xC026234D
	ERROR_GRAPHICS_INVALID_PATH_CONTENT_TYPE                                  Handle        = 0xC026234E
	ERROR_GRAPHICS_INVALID_COPYPROTECTION_TYPE                                Handle        = 0xC026234F
	ERROR_GRAPHICS_UNASSIGNED_MODESET_ALREADY_EXISTS                          Handle        = 0xC0262350
	ERROR_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_PINNED            Handle        = 0x00262351
	ERROR_GRAPHICS_INVALID_SCANLINE_ORDERING                                  Handle        = 0xC0262352
	ERROR_GRAPHICS_TOPOLOGY_CHANGES_NOT_ALLOWED                               Handle        = 0xC0262353
	ERROR_GRAPHICS_NO_AVAILABLE_IMPORTANCE_ORDINALS                           Handle        = 0xC0262354
	ERROR_GRAPHICS_INCOMPATIBLE_PRIVATE_FORMAT                                Handle        = 0xC0262355
	ERROR_GRAPHICS_INVALID_MODE_PRUNING_ALGORITHM                             Handle        = 0xC0262356
	ERROR_GRAPHICS_INVALID_MONITOR_CAPABILITY_ORIGIN                          Handle        = 0xC0262357
	ERROR_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE_CONSTRAINT                  Handle        = 0xC0262358
	ERROR_GRAPHICS_MAX_NUM_PATHS_REACHED                                      Handle        = 0xC0262359
	ERROR_GRAPHICS_CANCEL_VIDPN_TOPOLOGY_AUGMENTATION                         Handle        = 0xC026235A
	ERROR_GRAPHICS_INVALID_CLIENT_TYPE                                        Handle        = 0xC026235B
	ERROR_GRAPHICS_CLIENTVIDPN_NOT_SET                                        Handle        = 0xC026235C
	ERROR_GRAPHICS_SPECIFIED_CHILD_ALREADY_CONNECTED                          Handle        = 0xC0262400
	ERROR_GRAPHICS_CHILD_DESCRIPTOR_NOT_SUPPORTED                             Handle        = 0xC0262401
	ERROR_GRAPHICS_UNKNOWN_CHILD_STATUS                                       Handle        = 0x4026242F
	ERROR_GRAPHICS_NOT_A_LINKED_ADAPTER                                       Handle        = 0xC0262430
	ERROR_GRAPHICS_LEADLINK_NOT_ENUMERATED                                    Handle        = 0xC0262431
	ERROR_GRAPHICS_CHAINLINKS_NOT_ENUMERATED                                  Handle        = 0xC0262432
	ERROR_GRAPHICS_ADAPTER_CHAIN_NOT_READY                                    Handle        = 0xC0262433
	ERROR_GRAPHICS_CHAINLINKS_NOT_STARTED                                     Handle        = 0xC0262434
	ERROR_GRAPHICS_CHAINLINKS_NOT_POWERED_ON                                  Handle        = 0xC0262435
	ERROR_GRAPHICS_INCONSISTENT_DEVICE_LINK_STATE                             Handle        = 0xC0262436
	ERROR_GRAPHICS_LEADLINK_START_DEFERRED                                    Handle        = 0x40262437
	ERROR_GRAPHICS_NOT_POST_DEVICE_DRIVER                                     Handle        = 0xC0262438
	ERROR_GRAPHICS_POLLING_TOO_FREQUENTLY                                     Handle        = 0x40262439
	ERROR_GRAPHICS_START_DEFERRED                                             Handle        = 0x4026243A
	ERROR_GRAPHICS_ADAPTER_ACCESS_NOT_EXCLUDED                                Handle        = 0xC026243B
	ERROR_GRAPHICS_DEPENDABLE_CHILD_STATUS                                    Handle        = 0x4026243C
	ERROR_GRAPHICS_OPM_NOT_SUPPORTED                                          Handle        = 0xC0262500
	ERROR_GRAPHICS_COPP_NOT_SUPPORTED                                         Handle        = 0xC0262501
	ERROR_GRAPHICS_UAB_NOT_SUPPORTED                                          Handle        = 0xC0262502
	ERROR_GRAPHICS_OPM_INVALID_ENCRYPTED_PARAMETERS                           Handle        = 0xC0262503
	ERROR_GRAPHICS_OPM_NO_VIDEO_OUTPUTS_EXIST                                 Handle        = 0xC0262505
	ERROR_GRAPHICS_OPM_INTERNAL_ERROR                                         Handle        = 0xC026250B
	ERROR_GRAPHICS_OPM_INVALID_HANDLE                                         Handle        = 0xC026250C
	ERROR_GRAPHICS_PVP_INVALID_CERTIFICATE_LENGTH                             Handle        = 0xC026250E
	ERROR_GRAPHICS_OPM_SPANNING_MODE_ENABLED                                  Handle        = 0xC026250F
	ERROR_GRAPHICS_OPM_THEATER_MODE_ENABLED                                   Handle        = 0xC0262510
	ERROR_GRAPHICS_PVP_HFS_FAILED                                             Handle        = 0xC0262511
	ERROR_GRAPHICS_OPM_INVALID_SRM                                            Handle        = 0xC0262512
	ERROR_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_HDCP                           Handle        = 0xC0262513
	ERROR_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_ACP                            Handle        = 0xC0262514
	ERROR_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_CGMSA                          Handle        = 0xC0262515
	ERROR_GRAPHICS_OPM_HDCP_SRM_NEVER_SET                                     Handle        = 0xC0262516
	ERROR_GRAPHICS_OPM_RESOLUTION_TOO_HIGH                                    Handle        = 0xC0262517
	ERROR_GRAPHICS_OPM_ALL_HDCP_HARDWARE_ALREADY_IN_USE                       Handle        = 0xC0262518
	ERROR_GRAPHICS_OPM_VIDEO_OUTPUT_NO_LONGER_EXISTS                          Handle        = 0xC026251A
	ERROR_GRAPHICS_OPM_SESSION_TYPE_CHANGE_IN_PROGRESS                        Handle        = 0xC026251B
	ERROR_GRAPHICS_OPM_VIDEO_OUTPUT_DOES_NOT_HAVE_COPP_SEMANTICS              Handle        = 0xC026251C
	ERROR_GRAPHICS_OPM_INVALID_INFORMATION_REQUEST                            Handle        = 0xC026251D
	ERROR_GRAPHICS_OPM_DRIVER_INTERNAL_ERROR                                  Handle        = 0xC026251E
	ERROR_GRAPHICS_OPM_VIDEO_OUTPUT_DOES_NOT_HAVE_OPM_SEMANTICS               Handle        = 0xC026251F
	ERROR_GRAPHICS_OPM_SIGNALING_NOT_SUPPORTED                                Handle        = 0xC0262520
	ERROR_GRAPHICS_OPM_INVALID_CONFIGURATION_REQUEST                          Handle        = 0xC0262521
	ERROR_GRAPHICS_I2C_NOT_SUPPORTED                                          Handle        = 0xC0262580
	ERROR_GRAPHICS_I2C_DEVICE_DOES_NOT_EXIST                                  Handle        = 0xC0262581
	ERROR_GRAPHICS_I2C_ERROR_TRANSMITTING_DATA                                Handle        = 0xC0262582
	ERROR_GRAPHICS_I2C_ERROR_RECEIVING_DATA                                   Handle        = 0xC0262583
	ERROR_GRAPHICS_DDCCI_VCP_NOT_SUPPORTED                                    Handle        = 0xC0262584
	ERROR_GRAPHICS_DDCCI_INVALID_DATA                                         Handle        = 0xC0262585
	ERROR_GRAPHICS_DDCCI_MONITOR_RETURNED_INVALID_TIMING_STATUS_BYTE          Handle        = 0xC0262586
	ERROR_GRAPHICS_MCA_INVALID_CAPABILITIES_STRING                            Handle        = 0xC0262587
	ERROR_GRAPHICS_MCA_INTERNAL_ERROR                                         Handle        = 0xC0262588
	ERROR_GRAPHICS_DDCCI_INVALID_MESSAGE_COMMAND                              Handle        = 0xC0262589
	ERROR_GRAPHICS_DDCCI_INVALID_MESSAGE_LENGTH                               Handle        = 0xC026258A
	ERROR_GRAPHICS_DDCCI_INVALID_MESSAGE_CHECKSUM                             Handle        = 0xC026258B
	ERROR_GRAPHICS_INVALID_PHYSICAL_MONITOR_HANDLE                            Handle        = 0xC026258C
	ERROR_GRAPHICS_MONITOR_NO_LONGER_EXISTS                                   Handle        = 0xC026258D
	ERROR_GRAPHICS_DDCCI_CURRENT_CURRENT_VALUE_GREATER_THAN_MAXIMUM_VALUE     Handle        = 0xC02625D8
	ERROR_GRAPHICS_MCA_INVALID_VCP_VERSION                                    Handle        = 0xC02625D9
	ERROR_GRAPHICS_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION                    Handle        = 0xC02625DA
	ERROR_GRAPHICS_MCA_MCCS_VERSION_MISMATCH                                  Handle        = 0xC02625DB
	ERROR_GRAPHICS_MCA_UNSUPPORTED_MCCS_VERSION                               Handle        = 0xC02625DC
	ERROR_GRAPHICS_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED                       Handle        = 0xC02625DE
	ERROR_GRAPHICS_MCA_UNSUPPORTED_COLOR_TEMPERATURE                          Handle        = 0xC02625DF
	ERROR_GRAPHICS_ONLY_CONSOLE_SESSION_SUPPORTED                             Handle        = 0xC02625E0
	ERROR_GRAPHICS_NO_DISPLAY_DEVICE_CORRESPONDS_TO_NAME                      Handle        = 0xC02625E1
	ERROR_GRAPHICS_DISPLAY_DEVICE_NOT_ATTACHED_TO_DESKTOP                     Handle        = 0xC02625E2
	ERROR_GRAPHICS_MIRRORING_DEVICES_NOT_SUPPORTED                            Handle        = 0xC02625E3
	ERROR_GRAPHICS_INVALID_POINTER                                            Handle        = 0xC02625E4
	ERROR_GRAPHICS_NO_MONITORS_CORRESPOND_TO_DISPLAY_DEVICE                   Handle        = 0xC02625E5
	ERROR_GRAPHICS_PARAMETER_ARRAY_TOO_SMALL                                  Handle        = 0xC02625E6
	ERROR_GRAPHICS_INTERNAL_ERROR                                             Handle        = 0xC02625E7
	ERROR_GRAPHICS_SESSION_TYPE_CHANGE_IN_PROGRESS                            Handle        = 0xC02605E8
	NAP_E_INVALID_PACKET                                                      Handle        = 0x80270001
	NAP_E_MISSING_SOH                                                         Handle        = 0x80270002
	NAP_E_CONFLICTING_ID                                                      Handle        = 0x80270003
	NAP_E_NO_CACHED_SOH                                                       Handle        = 0x80270004
	NAP_E_STILL_BOUND                                                         Handle        = 0x80270005
	NAP_E_NOT_REGISTERED                                                      Handle        = 0x80270006
	NAP_E_NOT_INITIALIZED                                                     Handle        = 0x80270007
	NAP_E_MISMATCHED_ID                                                       Handle        = 0x80270008
	NAP_E_NOT_PENDING                                                         Handle        = 0x80270009
	NAP_E_ID_NOT_FOUND                                                        Handle        = 0x8027000A
	NAP_E_MAXSIZE_TOO_SMALL                                                   Handle        = 0x8027000B
	NAP_E_SERVICE_NOT_RUNNING                                                 Handle        = 0x8027000C
	NAP_S_CERT_ALREADY_PRESENT                                                Handle        = 0x0027000D
	NAP_E_ENTITY_DISABLED                                                     Handle        = 0x8027000E
	NAP_E_NETSH_GROUPPOLICY_ERROR                                             Handle        = 0x8027000F
	NAP_E_TOO_MANY_CALLS                                                      Handle        = 0x80270010
	NAP_E_SHV_CONFIG_EXISTED                                                  Handle        = 0x80270011
	NAP_E_SHV_CONFIG_NOT_FOUND                                                Handle        = 0x80270012
	NAP_E_SHV_TIMEOUT                                                         Handle        = 0x80270013
	TPM_E_ERROR_MASK                                                          Handle        = 0x80280000
	TPM_E_AUTHFAIL                                                            Handle        = 0x80280001
	TPM_E_BADINDEX                                                            Handle        = 0x80280002
	TPM_E_BAD_PARAMETER                                                       Handle        = 0x80280003
	TPM_E_AUDITFAILURE                                                        Handle        = 0x80280004
	TPM_E_CLEAR_DISABLED                                                      Handle        = 0x80280005
	TPM_E_DEACTIVATED                                                         Handle        = 0x80280006
	TPM_E_DISABLED                                                            Handle        = 0x80280007
	TPM_E_DISABLED_CMD                                                        Handle        = 0x80280008
	TPM_E_FAIL                                                                Handle        = 0x80280009
	TPM_E_BAD_ORDINAL                                                         Handle        = 0x8028000A
	TPM_E_INSTALL_DISABLED                                                    Handle        = 0x8028000B
	TPM_E_INVALID_KEYHANDLE                                                   Handle        = 0x8028000C
	TPM_E_KEYNOTFOUND                                                         Handle        = 0x8028000D
	TPM_E_INAPPROPRIATE_ENC                                                   Handle        = 0x8028000E
	TPM_E_MIGRATEFAIL                                                         Handle        = 0x8028000F
	TPM_E_INVALID_PCR_INFO                                                    Handle        = 0x80280010
	TPM_E_NOSPACE                                                             Handle        = 0x80280011
	TPM_E_NOSRK                                                               Handle        = 0x80280012
	TPM_E_NOTSEALED_BLOB                                                      Handle        = 0x80280013
	TPM_E_OWNER_SET                                                           Handle        = 0x80280014
	TPM_E_RESOURCES                                                           Handle        = 0x80280015
	TPM_E_SHORTRANDOM                                                         Handle        = 0x80280016
	TPM_E_SIZE                                                                Handle        = 0x80280017
	TPM_E_WRONGPCRVAL                                                         Handle        = 0x80280018
	TPM_E_BAD_PARAM_SIZE                                                      Handle        = 0x80280019
	TPM_E_SHA_THREAD                                                          Handle        = 0x8028001A
	TPM_E_SHA_ERROR                                                           Handle        = 0x8028001B
	TPM_E_FAILEDSELFTEST                                                      Handle        = 0x8028001C
	TPM_E_AUTH2FAIL                                                           Handle        = 0x8028001D
	TPM_E_BADTAG                                                              Handle        = 0x8028001E
	TPM_E_IOERROR                                                             Handle        = 0x8028001F
	TPM_E_ENCRYPT_ERROR                                                       Handle        = 0x80280020
	TPM_E_DECRYPT_ERROR                                                       Handle        = 0x80280021
	TPM_E_INVALID_AUTHHANDLE                                                  Handle        = 0x80280022
	TPM_E_NO_ENDORSEMENT                                                      Handle        = 0x80280023
	TPM_E_INVALID_KEYUSAGE                                                    Handle        = 0x80280024
	TPM_E_WRONG_ENTITYTYPE                                                    Handle        = 0x80280025
	TPM_E_INVALID_POSTINIT                                                    Handle        = 0x80280026
	TPM_E_INAPPROPRIATE_SIG                                                   Handle        = 0x80280027
	TPM_E_BAD_KEY_PROPERTY                                                    Handle        = 0x80280028
	TPM_E_BAD_MIGRATION                                                       Handle        = 0x80280029
	TPM_E_BAD_SCHEME                                                          Handle        = 0x8028002A
	TPM_E_BAD_DATASIZE                                                        Handle        = 0x8028002B
	TPM_E_BAD_MODE                                                            Handle        = 0x8028002C
	TPM_E_BAD_PRESENCE                                                        Handle        = 0x8028002D
	TPM_E_BAD_VERSION                                                         Handle        = 0x8028002E
	TPM_E_NO_WRAP_TRANSPORT                                                   Handle        = 0x8028002F
	TPM_E_AUDITFAIL_UNSUCCESSFUL                                              Handle        = 0x80280030
	TPM_E_AUDITFAIL_SUCCESSFUL                                                Handle        = 0x80280031
	TPM_E_NOTRESETABLE                                                        Handle        = 0x80280032
	TPM_E_NOTLOCAL                                                            Handle        = 0x80280033
	TPM_E_BAD_TYPE                                                            Handle        = 0x80280034
	TPM_E_INVALID_RESOURCE                                                    Handle        = 0x80280035
	TPM_E_NOTFIPS                                                             Handle        = 0x80280036
	TPM_E_INVALID_FAMILY                                                      Handle        = 0x80280037
	TPM_E_NO_NV_PERMISSION                                                    Handle        = 0x80280038
	TPM_E_REQUIRES_SIGN                                                       Handle        = 0x80280039
	TPM_E_KEY_NOTSUPPORTED                                                    Handle        = 0x8028003A
	TPM_E_AUTH_CONFLICT                                                       Handle        = 0x8028003B
	TPM_E_AREA_LOCKED                                                         Handle        = 0x8028003C
	TPM_E_BAD_LOCALITY                                                        Handle        = 0x8028003D
	TPM_E_READ_ONLY                                                           Handle        = 0x8028003E
	TPM_E_PER_NOWRITE                                                         Handle        = 0x8028003F
	TPM_E_FAMILYCOUNT                                                         Handle        = 0x80280040
	TPM_E_WRITE_LOCKED                                                        Handle        = 0x80280041
	TPM_E_BAD_ATTRIBUTES                                                      Handle        = 0x80280042
	TPM_E_INVALID_STRUCTURE                                                   Handle        = 0x80280043
	TPM_E_KEY_OWNER_CONTROL                                                   Handle        = 0x80280044
	TPM_E_BAD_COUNTER                                                         Handle        = 0x80280045
	TPM_E_NOT_FULLWRITE                                                       Handle        = 0x80280046
	TPM_E_CONTEXT_GAP                                                         Handle        = 0x80280047
	TPM_E_MAXNVWRITES                                                         Handle        = 0x80280048
	TPM_E_NOOPERATOR                                                          Handle        = 0x80280049
	TPM_E_RESOURCEMISSING                                                     Handle        = 0x8028004A
	TPM_E_DELEGATE_LOCK                                                       Handle        = 0x8028004B
	TPM_E_DELEGATE_FAMILY                                                     Handle        = 0x8028004C
	TPM_E_DELEGATE_ADMIN                                                      Handle        = 0x8028004D
	TPM_E_TRANSPORT_NOTEXCLUSIVE                                              Handle        = 0x8028004E
	TPM_E_OWNER_CONTROL                                                       Handle        = 0x8028004F
	TPM_E_DAA_RESOURCES                                                       Handle        = 0x80280050
	TPM_E_DAA_INPUT_DATA0                                                     Handle        = 0x80280051
	TPM_E_DAA_INPUT_DATA1                                                     Handle        = 0x80280052
	TPM_E_DAA_ISSUER_SETTINGS                                                 Handle        = 0x80280053
	TPM_E_DAA_TPM_SETTINGS                                                    Handle        = 0x80280054
	TPM_E_DAA_STAGE                                                           Handle        = 0x80280055
	TPM_E_DAA_ISSUER_VALIDITY                                                 Handle        = 0x80280056
	TPM_E_DAA_WRONG_W                                                         Handle        = 0x80280057
	TPM_E_BAD_HANDLE                                                          Handle        = 0x80280058
	TPM_E_BAD_DELEGATE                                                        Handle        = 0x80280059
	TPM_E_BADCONTEXT                                                          Handle        = 0x8028005A
	TPM_E_TOOMANYCONTEXTS                                                     Handle        = 0x8028005B
	TPM_E_MA_TICKET_SIGNATURE                                                 Handle        = 0x8028005C
	TPM_E_MA_DESTINATION                                                      Handle        = 0x8028005D
	TPM_E_MA_SOURCE                                                           Handle        = 0x8028005E
	TPM_E_MA_AUTHORITY                                                        Handle        = 0x8028005F
	TPM_E_PERMANENTEK                                                         Handle        = 0x80280061
	TPM_E_BAD_SIGNATURE                                                       Handle        = 0x80280062
	TPM_E_NOCONTEXTSPACE                                                      Handle        = 0x80280063
	TPM_20_E_ASYMMETRIC                                                       Handle        = 0x80280081
	TPM_20_E_ATTRIBUTES                                                       Handle        = 0x80280082
	TPM_20_E_HASH                                                             Handle        = 0x80280083
	TPM_20_E_VALUE                                                            Handle        = 0x80280084
	TPM_20_E_HIERARCHY                                                        Handle        = 0x80280085
	TPM_20_E_KEY_SIZE                                                         Handle        = 0x80280087
	TPM_20_E_MGF                                                              Handle        = 0x80280088
	TPM_20_E_MODE                                                             Handle        = 0x80280089
	TPM_20_E_TYPE                                                             Handle        = 0x8028008A
	TPM_20_E_HANDLE                                                           Handle        = 0x8028008B
	TPM_20_E_KDF                                                              Handle        = 0x8028008C
	TPM_20_E_RANGE                                                            Handle        = 0x8028008D
	TPM_20_E_AUTH_FAIL                                                        Handle        = 0x8028008E
	TPM_20_E_NONCE                                                            Handle        = 0x8028008F
	TPM_20_E_PP                                                               Handle        = 0x80280090
	TPM_20_E_SCHEME                                                           Handle        = 0x80280092
	TPM_20_E_SIZE                                                             Handle        = 0x80280095
	TPM_20_E_SYMMETRIC                                                        Handle        = 0x80280096
	TPM_20_E_TAG                                                              Handle        = 0x80280097
	TPM_20_E_SELECTOR                                                         Handle        = 0x80280098
	TPM_20_E_INSUFFICIENT                                                     Handle        = 0x8028009A
	TPM_20_E_SIGNATURE                                                        Handle        = 0x8028009B
	TPM_20_E_KEY                                                              Handle        = 0x8028009C
	TPM_20_E_POLICY_FAIL                                                      Handle        = 0x8028009D
	TPM_20_E_INTEGRITY                                                        Handle        = 0x8028009F
	TPM_20_E_TICKET                                                           Handle        = 0x802800A0
	TPM_20_E_RESERVED_BITS                                                    Handle        = 0x802800A1
	TPM_20_E_BAD_AUTH                                                         Handle        = 0x802800A2
	TPM_20_E_EXPIRED                                                          Handle        = 0x802800A3
	TPM_20_E_POLICY_CC                                                        Handle        = 0x802800A4
	TPM_20_E_BINDING                                                          Handle        = 0x802800A5
	TPM_20_E_CURVE                                                            Handle        = 0x802800A6
	TPM_20_E_ECC_POINT                                                        Handle        = 0x802800A7
	TPM_20_E_INITIALIZE                                                       Handle        = 0x80280100
	TPM_20_E_FAILURE                                                          Handle        = 0x80280101
	TPM_20_E_SEQUENCE                                                         Handle        = 0x80280103
	TPM_20_E_PRIVATE                                                          Handle        = 0x8028010B
	TPM_20_E_HMAC                                                             Handle        = 0x80280119
	TPM_20_E_DISABLED                                                         Handle        = 0x80280120
	TPM_20_E_EXCLUSIVE                                                        Handle        = 0x80280121
	TPM_20_E_ECC_CURVE                                                        Handle        = 0x80280123
	TPM_20_E_AUTH_TYPE                                                        Handle        = 0x80280124
	TPM_20_E_AUTH_MISSING                                                     Handle        = 0x80280125
	TPM_20_E_POLICY                                                           Handle        = 0x80280126
	TPM_20_E_PCR                                                              Handle        = 0x80280127
	TPM_20_E_PCR_CHANGED                                                      Handle        = 0x80280128
	TPM_20_E_UPGRADE                                                          Handle        = 0x8028012D
	TPM_20_E_TOO_MANY_CONTEXTS                                                Handle        = 0x8028012E
	TPM_20_E_AUTH_UNAVAILABLE                                                 Handle        = 0x8028012F
	TPM_20_E_REBOOT                                                           Handle        = 0x80280130
	TPM_20_E_UNBALANCED                                                       Handle        = 0x80280131
	TPM_20_E_COMMAND_SIZE                                                     Handle        = 0x80280142
	TPM_20_E_COMMAND_CODE                                                     Handle        = 0x80280143
	TPM_20_E_AUTHSIZE                                                         Handle        = 0x80280144
	TPM_20_E_AUTH_CONTEXT                                                     Handle        = 0x80280145
	TPM_20_E_NV_RANGE                                                         Handle        = 0x80280146
	TPM_20_E_NV_SIZE                                                          Handle        = 0x80280147
	TPM_20_E_NV_LOCKED                                                        Handle        = 0x80280148
	TPM_20_E_NV_AUTHORIZATION                                                 Handle        = 0x80280149
	TPM_20_E_NV_UNINITIALIZED                                                 Handle        = 0x8028014A
	TPM_20_E_NV_SPACE                                                         Handle        = 0x8028014B
	TPM_20_E_NV_DEFINED                                                       Handle        = 0x8028014C
	TPM_20_E_BAD_CONTEXT                                                      Handle        = 0x80280150
	TPM_20_E_CPHASH                                                           Handle        = 0x80280151
	TPM_20_E_PARENT                                                           Handle        = 0x80280152
	TPM_20_E_NEEDS_TEST                                                       Handle        = 0x80280153
	TPM_20_E_NO_RESULT                                                        Handle        = 0x80280154
	TPM_20_E_SENSITIVE                                                        Handle        = 0x80280155
	TPM_E_COMMAND_BLOCKED                                                     Handle        = 0x80280400
	TPM_E_INVALID_HANDLE                                                      Handle        = 0x80280401
	TPM_E_DUPLICATE_VHANDLE                                                   Handle        = 0x80280402
	TPM_E_EMBEDDED_COMMAND_BLOCKED                                            Handle        = 0x80280403
	TPM_E_EMBEDDED_COMMAND_UNSUPPORTED                                        Handle        = 0x80280404
	TPM_E_RETRY                                                               Handle        = 0x80280800
	TPM_E_NEEDS_SELFTEST                                                      Handle        = 0x80280801
	TPM_E_DOING_SELFTEST                                                      Handle        = 0x80280802
	TPM_E_DEFEND_LOCK_RUNNING                                                 Handle        = 0x80280803
	TPM_20_E_CONTEXT_GAP                                                      Handle        = 0x80280901
	TPM_20_E_OBJECT_MEMORY                                                    Handle        = 0x80280902
	TPM_20_E_SESSION_MEMORY                                                   Handle        = 0x80280903
	TPM_20_E_MEMORY                                                           Handle        = 0x80280904
	TPM_20_E_SESSION_HANDLES                                                  Handle        = 0x80280905
	TPM_20_E_OBJECT_HANDLES                                                   Handle        = 0x80280906
	TPM_20_E_LOCALITY                                                         Handle        = 0x80280907
	TPM_20_E_YIELDED                                                          Handle        = 0x80280908
	TPM_20_E_CANCELED                                                         Handle        = 0x80280909
	TPM_20_E_TESTING                                                          Handle        = 0x8028090A
	TPM_20_E_NV_RATE                                                          Handle        = 0x80280920
	TPM_20_E_LOCKOUT                                                          Handle        = 0x80280921
	TPM_20_E_RETRY                                                            Handle        = 0x80280922
	TPM_20_E_NV_UNAVAILABLE                                                   Handle        = 0x80280923
	TBS_E_INTERNAL_ERROR                                                      Handle        = 0x80284001
	TBS_E_BAD_PARAMETER                                                       Handle        = 0x80284002
	TBS_E_INVALID_OUTPUT_POINTER                                              Handle        = 0x80284003
	TBS_E_INVALID_CONTEXT                                                     Handle        = 0x80284004
	TBS_E_INSUFFICIENT_BUFFER                                                 Handle        = 0x80284005
	TBS_E_IOERROR                                                             Handle        = 0x80284006
	TBS_E_INVALID_CONTEXT_PARAM                                               Handle        = 0x80284007
	TBS_E_SERVICE_NOT_RUNNING                                                 Handle        = 0x80284008
	TBS_E_TOO_MANY_TBS_CONTEXTS                                               Handle        = 0x80284009
	TBS_E_TOO_MANY_RESOURCES                                                  Handle        = 0x8028400A
	TBS_E_SERVICE_START_PENDING                                               Handle        = 0x8028400B
	TBS_E_PPI_NOT_SUPPORTED                                                   Handle        = 0x8028400C
	TBS_E_COMMAND_CANCELED                                                    Handle        = 0x8028400D
	TBS_E_BUFFER_TOO_LARGE                                                    Handle        = 0x8028400E
	TBS_E_TPM_NOT_FOUND                                                       Handle        = 0x8028400F
	TBS_E_SERVICE_DISABLED                                                    Handle        = 0x80284010
	TBS_E_NO_EVENT_LOG                                                        Handle        = 0x80284011
	TBS_E_ACCESS_DENIED                                                       Handle        = 0x80284012
	TBS_E_PROVISIONING_NOT_ALLOWED                                            Handle        = 0x80284013
	TBS_E_PPI_FUNCTION_UNSUPPORTED                                            Handle        = 0x80284014
	TBS_E_OWNERAUTH_NOT_FOUND                                                 Handle        = 0x80284015
	TBS_E_PROVISIONING_INCOMPLETE                                             Handle        = 0x80284016
	TPMAPI_E_INVALID_STATE                                                    Handle        = 0x80290100
	TPMAPI_E_NOT_ENOUGH_DATA                                                  Handle        = 0x80290101
	TPMAPI_E_TOO_MUCH_DATA                                                    Handle        = 0x80290102
	TPMAPI_E_INVALID_OUTPUT_POINTER                                           Handle        = 0x80290103
	TPMAPI_E_INVALID_PARAMETER                                                Handle        = 0x80290104
	TPMAPI_E_OUT_OF_MEMORY                                                    Handle        = 0x80290105
	TPMAPI_E_BUFFER_TOO_SMALL                                                 Handle        = 0x80290106
	TPMAPI_E_INTERNAL_ERROR                                                   Handle        = 0x80290107
	TPMAPI_E_ACCESS_DENIED                                                    Handle        = 0x80290108
	TPMAPI_E_AUTHORIZATION_FAILED                                             Handle        = 0x80290109
	TPMAPI_E_INVALID_CONTEXT_HANDLE                                           Handle        = 0x8029010A
	TPMAPI_E_TBS_COMMUNICATION_ERROR                                          Handle        = 0x8029010B
	TPMAPI_E_TPM_COMMAND_ERROR                                                Handle        = 0x8029010C
	TPMAPI_E_MESSAGE_TOO_LARGE                                                Handle        = 0x8029010D
	TPMAPI_E_INVALID_ENCODING                                                 Handle        = 0x8029010E
	TPMAPI_E_INVALID_KEY_SIZE                                                 Handle        = 0x8029010F
	TPMAPI_E_ENCRYPTION_FAILED                                                Handle        = 0x80290110
	TPMAPI_E_INVALID_KEY_PARAMS                                               Handle        = 0x80290111
	TPMAPI_E_INVALID_MIGRATION_AUTHORIZATION_BLOB                             Handle        = 0x80290112
	TPMAPI_E_INVALID_PCR_INDEX                                                Handle        = 0x80290113
	TPMAPI_E_INVALID_DELEGATE_BLOB                                            Handle        = 0x80290114
	TPMAPI_E_INVALID_CONTEXT_PARAMS                                           Handle        = 0x80290115
	TPMAPI_E_INVALID_KEY_BLOB                                                 Handle        = 0x80290116
	TPMAPI_E_INVALID_PCR_DATA                                                 Handle        = 0x80290117
	TPMAPI_E_INVALID_OWNER_AUTH                                               Handle        = 0x80290118
	TPMAPI_E_FIPS_RNG_CHECK_FAILED                                            Handle        = 0x80290119
	TPMAPI_E_EMPTY_TCG_LOG                                                    Handle        = 0x8029011A
	TPMAPI_E_INVALID_TCG_LOG_ENTRY                                            Handle        = 0x8029011B
	TPMAPI_E_TCG_SEPARATOR_ABSENT                                             Handle        = 0x8029011C
	TPMAPI_E_TCG_INVALID_DIGEST_ENTRY                                         Handle        = 0x8029011D
	TPMAPI_E_POLICY_DENIES_OPERATION                                          Handle        = 0x8029011E
	TPMAPI_E_NV_BITS_NOT_DEFINED                                              Handle        = 0x8029011F
	TPMAPI_E_NV_BITS_NOT_READY                                                Handle        = 0x80290120
	TPMAPI_E_SEALING_KEY_NOT_AVAILABLE                                        Handle        = 0x80290121
	TPMAPI_E_NO_AUTHORIZATION_CHAIN_FOUND                                     Handle        = 0x80290122
	TPMAPI_E_SVN_COUNTER_NOT_AVAILABLE                                        Handle        = 0x80290123
	TPMAPI_E_OWNER_AUTH_NOT_NULL                                              Handle        = 0x80290124
	TPMAPI_E_ENDORSEMENT_AUTH_NOT_NULL                                        Handle        = 0x80290125
	TPMAPI_E_AUTHORIZATION_REVOKED                                            Handle        = 0x80290126
	TPMAPI_E_MALFORMED_AUTHORIZATION_KEY                                      Handle        = 0x80290127
	TPMAPI_E_AUTHORIZING_KEY_NOT_SUPPORTED                                    Handle        = 0x80290128
	TPMAPI_E_INVALID_AUTHORIZATION_SIGNATURE                                  Handle        = 0x80290129
	TPMAPI_E_MALFORMED_AUTHORIZATION_POLICY                                   Handle        = 0x8029012A
	TPMAPI_E_MALFORMED_AUTHORIZATION_OTHER                                    Handle        = 0x8029012B
	TPMAPI_E_SEALING_KEY_CHANGED                                              Handle        = 0x8029012C
	TBSIMP_E_BUFFER_TOO_SMALL                                                 Handle        = 0x80290200
	TBSIMP_E_CLEANUP_FAILED                                                   Handle        = 0x80290201
	TBSIMP_E_INVALID_CONTEXT_HANDLE                                           Handle        = 0x80290202
	TBSIMP_E_INVALID_CONTEXT_PARAM                                            Handle        = 0x80290203
	TBSIMP_E_TPM_ERROR                                                        Handle        = 0x80290204
	TBSIMP_E_HASH_BAD_KEY                                                     Handle        = 0x80290205
	TBSIMP_E_DUPLICATE_VHANDLE                                                Handle        = 0x80290206
	TBSIMP_E_INVALID_OUTPUT_POINTER                                           Handle        = 0x80290207
	TBSIMP_E_INVALID_PARAMETER                                                Handle        = 0x80290208
	TBSIMP_E_RPC_INIT_FAILED                                                  Handle        = 0x80290209
	TBSIMP_E_SCHEDULER_NOT_RUNNING                                            Handle        = 0x8029020A
	TBSIMP_E_COMMAND_CANCELED                                                 Handle        = 0x8029020B
	TBSIMP_E_OUT_OF_MEMORY                                                    Handle        = 0x8029020C
	TBSIMP_E_LIST_NO_MORE_ITEMS                                               Handle        = 0x8029020D
	TBSIMP_E_LIST_NOT_FOUND                                                   Handle        = 0x8029020E
	TBSIMP_E_NOT_ENOUGH_SPACE                                                 Handle        = 0x8029020F
	TBSIMP_E_NOT_ENOUGH_TPM_CONTEXTS                                          Handle        = 0x80290210
	TBSIMP_E_COMMAND_FAILED                                                   Handle        = 0x80290211
	TBSIMP_E_UNKNOWN_ORDINAL                                                  Handle        = 0x80290212
	TBSIMP_E_RESOURCE_EXPIRED                                                 Handle        = 0x80290213
	TBSIMP_E_INVALID_RESOURCE                                                 Handle        = 0x80290214
	TBSIMP_E_NOTHING_TO_UNLOAD                                                Handle        = 0x80290215
	TBSIMP_E_HASH_TABLE_FULL                                                  Handle        = 0x80290216
	TBSIMP_E_TOO_MANY_TBS_CONTEXTS                                            Handle        = 0x80290217
	TBSIMP_E_TOO_MANY_RESOURCES                                               Handle        = 0x80290218
	TBSIMP_E_PPI_NOT_SUPPORTED                                                Handle        = 0x80290219
	TBSIMP_E_TPM_INCOMPATIBLE                                                 Handle        = 0x8029021A
	TBSIMP_E_NO_EVENT_LOG                                                     Handle        = 0x8029021B
	TPM_E_PPI_ACPI_FAILURE                                                    Handle        = 0x80290300
	TPM_E_PPI_USER_ABORT                                                      Handle        = 0x80290301
	TPM_E_PPI_BIOS_FAILURE                                                    Handle        = 0x80290302
	TPM_E_PPI_NOT_SUPPORTED                                                   Handle        = 0x80290303
	TPM_E_PPI_BLOCKED_IN_BIOS                                                 Handle        = 0x80290304
	TPM_E_PCP_ERROR_MASK                                                      Handle        = 0x80290400
	TPM_E_PCP_DEVICE_NOT_READY                                                Handle        = 0x80290401
	TPM_E_PCP_INVALID_HANDLE                                                  Handle        = 0x80290402
	TPM_E_PCP_INVALID_PARAMETER                                               Handle        = 0x80290403
	TPM_E_PCP_FLAG_NOT_SUPPORTED                                              Handle        = 0x80290404
	TPM_E_PCP_NOT_SUPPORTED                                                   Handle        = 0x80290405
	TPM_E_PCP_BUFFER_TOO_SMALL                                                Handle        = 0x80290406
	TPM_E_PCP_INTERNAL_ERROR                                                  Handle        = 0x80290407
	TPM_E_PCP_AUTHENTICATION_FAILED                                           Handle        = 0x80290408
	TPM_E_PCP_AUTHENTICATION_IGNORED                                          Handle        = 0x80290409
	TPM_E_PCP_POLICY_NOT_FOUND                                                Handle        = 0x8029040A
	TPM_E_PCP_PROFILE_NOT_FOUND                                               Handle        = 0x8029040B
	TPM_E_PCP_VALIDATION_FAILED                                               Handle        = 0x8029040C
	TPM_E_PCP_WRONG_PARENT                                                    Handle        = 0x8029040E
	TPM_E_KEY_NOT_LOADED                                                      Handle        = 0x8029040F
	TPM_E_NO_KEY_CERTIFICATION                                                Handle        = 0x80290410
	TPM_E_KEY_NOT_FINALIZED                                                   Handle        = 0x80290411
	TPM_E_ATTESTATION_CHALLENGE_NOT_SET                                       Handle        = 0x80290412
	TPM_E_NOT_PCR_BOUND                                                       Handle        = 0x80290413
	TPM_E_KEY_ALREADY_FINALIZED                                               Handle        = 0x80290414
	TPM_E_KEY_USAGE_POLICY_NOT_SUPPORTED                                      Handle        = 0x80290415
	TPM_E_KEY_USAGE_POLICY_INVALID                                            Handle        = 0x80290416
	TPM_E_SOFT_KEY_ERROR                                                      Handle        = 0x80290417
	TPM_E_KEY_NOT_AUTHENTICATED                                               Handle        = 0x80290418
	TPM_E_PCP_KEY_NOT_AIK                                                     Handle        = 0x80290419
	TPM_E_KEY_NOT_SIGNING_KEY                                                 Handle        = 0x8029041A
	TPM_E_LOCKED_OUT                                                          Handle        = 0x8029041B
	TPM_E_CLAIM_TYPE_NOT_SUPPORTED                                            Handle        = 0x8029041C
	TPM_E_VERSION_NOT_SUPPORTED                                               Handle        = 0x8029041D
	TPM_E_BUFFER_LENGTH_MISMATCH                                              Handle        = 0x8029041E
	TPM_E_PCP_IFX_RSA_KEY_CREATION_BLOCKED                                    Handle        = 0x8029041F
	TPM_E_PCP_TICKET_MISSING                                                  Handle        = 0x80290420
	TPM_E_PCP_RAW_POLICY_NOT_SUPPORTED                                        Handle        = 0x80290421
	TPM_E_PCP_KEY_HANDLE_INVALIDATED                                          Handle        = 0x80290422
	TPM_E_PCP_UNSUPPORTED_PSS_SALT                                            Handle        = 0x40290423
	TPM_E_ZERO_EXHAUST_ENABLED                                                Handle        = 0x80290500
	PLA_E_DCS_NOT_FOUND                                                       Handle        = 0x80300002
	PLA_E_DCS_IN_USE                                                          Handle        = 0x803000AA
	PLA_E_TOO_MANY_FOLDERS                                                    Handle        = 0x80300045
	PLA_E_NO_MIN_DISK                                                         Handle        = 0x80300070
	PLA_E_DCS_ALREADY_EXISTS                                                  Handle        = 0x803000B7
	PLA_S_PROPERTY_IGNORED                                                    Handle        = 0x00300100
	PLA_E_PROPERTY_CONFLICT                                                   Handle        = 0x80300101
	PLA_E_DCS_SINGLETON_REQUIRED                                              Handle        = 0x80300102
	PLA_E_CREDENTIALS_REQUIRED                                                Handle        = 0x80300103
	PLA_E_DCS_NOT_RUNNING                                                     Handle        = 0x80300104
	PLA_E_CONFLICT_INCL_EXCL_API                                              Handle        = 0x80300105
	PLA_E_NETWORK_EXE_NOT_VALID                                               Handle        = 0x80300106
	PLA_E_EXE_ALREADY_CONFIGURED                                              Handle        = 0x80300107
	PLA_E_EXE_PATH_NOT_VALID                                                  Handle        = 0x80300108
	PLA_E_DC_ALREADY_EXISTS                                                   Handle        = 0x80300109
	PLA_E_DCS_START_WAIT_TIMEOUT                                              Handle        = 0x8030010A
	PLA_E_DC_START_WAIT_TIMEOUT                                               Handle        = 0x8030010B
	PLA_E_REPORT_WAIT_TIMEOUT                                                 Handle        = 0x8030010C
	PLA_E_NO_DUPLICATES                                                       Handle        = 0x8030010D
	PLA_E_EXE_FULL_PATH_REQUIRED                                              Handle        = 0x8030010E
	PLA_E_INVALID_SESSION_NAME                                                Handle        = 0x8030010F
	PLA_E_PLA_CHANNEL_NOT_ENABLED                                             Handle        = 0x80300110
	PLA_E_TASKSCHED_CHANNEL_NOT_ENABLED                                       Handle        = 0x80300111
	PLA_E_RULES_MANAGER_FAILED                                                Handle        = 0x80300112
	PLA_E_CABAPI_FAILURE                                                      Handle        = 0x80300113
	FVE_E_LOCKED_VOLUME                                                       Handle        = 0x80310000
	FVE_E_NOT_ENCRYPTED                                                       Handle        = 0x80310001
	FVE_E_NO_TPM_BIOS                                                         Handle        = 0x80310002
	FVE_E_NO_MBR_METRIC                                                       Handle        = 0x80310003
	FVE_E_NO_BOOTSECTOR_METRIC                                                Handle        = 0x80310004
	FVE_E_NO_BOOTMGR_METRIC                                                   Handle        = 0x80310005
	FVE_E_WRONG_BOOTMGR                                                       Handle        = 0x80310006
	FVE_E_SECURE_KEY_REQUIRED                                                 Handle        = 0x80310007
	FVE_E_NOT_ACTIVATED                                                       Handle        = 0x80310008
	FVE_E_ACTION_NOT_ALLOWED                                                  Handle        = 0x80310009
	FVE_E_AD_SCHEMA_NOT_INSTALLED                                             Handle        = 0x8031000A
	FVE_E_AD_INVALID_DATATYPE                                                 Handle        = 0x8031000B
	FVE_E_AD_INVALID_DATASIZE                                                 Handle        = 0x8031000C
	FVE_E_AD_NO_VALUES                                                        Handle        = 0x8031000D
	FVE_E_AD_ATTR_NOT_SET                                                     Handle        = 0x8031000E
	FVE_E_AD_GUID_NOT_FOUND                                                   Handle        = 0x8031000F
	FVE_E_BAD_INFORMATION                                                     Handle        = 0x80310010
	FVE_E_TOO_SMALL                                                           Handle        = 0x80310011
	FVE_E_SYSTEM_VOLUME                                                       Handle        = 0x80310012
	FVE_E_FAILED_WRONG_FS                                                     Handle        = 0x80310013
	FVE_E_BAD_PARTITION_SIZE                                                  Handle        = 0x80310014
	FVE_E_NOT_SUPPORTED                                                       Handle        = 0x80310015
	FVE_E_BAD_DATA                                                            Handle        = 0x80310016
	FVE_E_VOLUME_NOT_BOUND                                                    Handle        = 0x80310017
	FVE_E_TPM_NOT_OWNED                                                       Handle        = 0x80310018
	FVE_E_NOT_DATA_VOLUME                                                     Handle        = 0x80310019
	FVE_E_AD_INSUFFICIENT_BUFFER                                              Handle        = 0x8031001A
	FVE_E_CONV_READ                                                           Handle        = 0x8031001B
	FVE_E_CONV_WRITE                                                          Handle        = 0x8031001C
	FVE_E_KEY_REQUIRED                                                        Handle        = 0x8031001D
	FVE_E_CLUSTERING_NOT_SUPPORTED                                            Handle        = 0x8031001E
	FVE_E_VOLUME_BOUND_ALREADY                                                Handle        = 0x8031001F
	FVE_E_OS_NOT_PROTECTED                                                    Handle        = 0x80310020
	FVE_E_PROTECTION_DISABLED                                                 Handle        = 0x80310021
	FVE_E_RECOVERY_KEY_REQUIRED                                               Handle        = 0x80310022
	FVE_E_FOREIGN_VOLUME                                                      Handle        = 0x80310023
	FVE_E_OVERLAPPED_UPDATE                                                   Handle        = 0x80310024
	FVE_E_TPM_SRK_AUTH_NOT_ZERO                                               Handle        = 0x80310025
	FVE_E_FAILED_SECTOR_SIZE                                                  Handle        = 0x80310026
	FVE_E_FAILED_AUTHENTICATION                                               Handle        = 0x80310027
	FVE_E_NOT_OS_VOLUME                                                       Handle        = 0x80310028
	FVE_E_AUTOUNLOCK_ENABLED                                                  Handle        = 0x80310029
	FVE_E_WRONG_BOOTSECTOR                                                    Handle        = 0x8031002A
	FVE_E_WRONG_SYSTEM_FS                                                     Handle        = 0x8031002B
	FVE_E_POLICY_PASSWORD_REQUIRED                                            Handle        = 0x8031002C
	FVE_E_CANNOT_SET_FVEK_ENCRYPTED                                           Handle        = 0x8031002D
	FVE_E_CANNOT_ENCRYPT_NO_KEY                                               Handle        = 0x8031002E
	FVE_E_BOOTABLE_CDDVD                                                      Handle        = 0x80310030
	FVE_E_PROTECTOR_EXISTS                                                    Handle        = 0x80310031
	FVE_E_RELATIVE_PATH                                                       Handle        = 0x80310032
	FVE_E_PROTECTOR_NOT_FOUND                                                 Handle        = 0x80310033
	FVE_E_INVALID_KEY_FORMAT                                                  Handle        = 0x80310034
	FVE_E_INVALID_PASSWORD_FORMAT                                             Handle        = 0x80310035
	FVE_E_FIPS_RNG_CHECK_FAILED                                               Handle        = 0x80310036
	FVE_E_FIPS_PREVENTS_RECOVERY_PASSWORD                                     Handle        = 0x80310037
	FVE_E_FIPS_PREVENTS_EXTERNAL_KEY_EXPORT                                   Handle        = 0x80310038
	FVE_E_NOT_DECRYPTED                                                       Handle        = 0x80310039
	FVE_E_INVALID_PROTECTOR_TYPE                                              Handle        = 0x8031003A
	FVE_E_NO_PROTECTORS_TO_TEST                                               Handle        = 0x8031003B
	FVE_E_KEYFILE_NOT_FOUND                                                   Handle        = 0x8031003C
	FVE_E_KEYFILE_INVALID                                                     Handle        = 0x8031003D
	FVE_E_KEYFILE_NO_VMK                                                      Handle        = 0x8031003E
	FVE_E_TPM_DISABLED                                                        Handle        = 0x8031003F
	FVE_E_NOT_ALLOWED_IN_SAFE_MODE                                            Handle        = 0x80310040
	FVE_E_TPM_INVALID_PCR                                                     Handle        = 0x80310041
	FVE_E_TPM_NO_VMK                                                          Handle        = 0x80310042
	FVE_E_PIN_INVALID                                                         Handle        = 0x80310043
	FVE_E_AUTH_INVALID_APPLICATION                                            Handle        = 0x80310044
	FVE_E_AUTH_INVALID_CONFIG                                                 Handle        = 0x80310045
	FVE_E_FIPS_DISABLE_PROTECTION_NOT_ALLOWED                                 Handle        = 0x80310046
	FVE_E_FS_NOT_EXTENDED                                                     Handle        = 0x80310047
	FVE_E_FIRMWARE_TYPE_NOT_SUPPORTED                                         Handle        = 0x80310048
	FVE_E_NO_LICENSE                                                          Handle        = 0x80310049
	FVE_E_NOT_ON_STACK                                                        Handle        = 0x8031004A
	FVE_E_FS_MOUNTED                                                          Handle        = 0x8031004B
	FVE_E_TOKEN_NOT_IMPERSONATED                                              Handle        = 0x8031004C
	FVE_E_DRY_RUN_FAILED                                                      Handle        = 0x8031004D
	FVE_E_REBOOT_REQUIRED                                                     Handle        = 0x8031004E
	FVE_E_DEBUGGER_ENABLED                                                    Handle        = 0x8031004F
	FVE_E_RAW_ACCESS                                                          Handle        = 0x80310050
	FVE_E_RAW_BLOCKED                                                         Handle        = 0x80310051
	FVE_E_BCD_APPLICATIONS_PATH_INCORRECT                                     Handle        = 0x80310052
	FVE_E_NOT_ALLOWED_IN_VERSION                                              Handle        = 0x80310053
	FVE_E_NO_AUTOUNLOCK_MASTER_KEY                                            Handle        = 0x80310054
	FVE_E_MOR_FAILED                                                          Handle        = 0x80310055
	FVE_E_HIDDEN_VOLUME                                                       Handle        = 0x80310056
	FVE_E_TRANSIENT_STATE                                                     Handle        = 0x80310057
	FVE_E_PUBKEY_NOT_ALLOWED                                                  Handle        = 0x80310058
	FVE_E_VOLUME_HANDLE_OPEN                                                  Handle        = 0x80310059
	FVE_E_NO_FEATURE_LICENSE                                                  Handle        = 0x8031005A
	FVE_E_INVALID_STARTUP_OPTIONS                                             Handle        = 0x8031005B
	FVE_E_POLICY_RECOVERY_PASSWORD_NOT_ALLOWED                                Handle        = 0x8031005C
	FVE_E_POLICY_RECOVERY_PASSWORD_REQUIRED                                   Handle        = 0x8031005D
	FVE_E_POLICY_RECOVERY_KEY_NOT_ALLOWED                                     Handle        = 0x8031005E
	FVE_E_POLICY_RECOVERY_KEY_REQUIRED                                        Handle        = 0x8031005F
	FVE_E_POLICY_STARTUP_PIN_NOT_ALLOWED                                      Handle        = 0x80310060
	FVE_E_POLICY_STARTUP_PIN_REQUIRED                                         Handle        = 0x80310061
	FVE_E_POLICY_STARTUP_KEY_NOT_ALLOWED                                      Handle        = 0x80310062
	FVE_E_POLICY_STARTUP_KEY_REQUIRED                                         Handle        = 0x80310063
	FVE_E_POLICY_STARTUP_PIN_KEY_NOT_ALLOWED                                  Handle        = 0x80310064
	FVE_E_POLICY_STARTUP_PIN_KEY_REQUIRED                                     Handle        = 0x80310065
	FVE_E_POLICY_STARTUP_TPM_NOT_ALLOWED                                      Handle        = 0x80310066
	FVE_E_POLICY_STARTUP_TPM_REQUIRED                                         Handle        = 0x80310067
	FVE_E_POLICY_INVALID_PIN_LENGTH                                           Handle        = 0x80310068
	FVE_E_KEY_PROTECTOR_NOT_SUPPORTED                                         Handle        = 0x80310069
	FVE_E_POLICY_PASSPHRASE_NOT_ALLOWED                                       Handle        = 0x8031006A
	FVE_E_POLICY_PASSPHRASE_REQUIRED                                          Handle        = 0x8031006B
	FVE_E_FIPS_PREVENTS_PASSPHRASE                                            Handle        = 0x8031006C
	FVE_E_OS_VOLUME_PASSPHRASE_NOT_ALLOWED                                    Handle        = 0x8031006D
	FVE_E_INVALID_BITLOCKER_OID                                               Handle        = 0x8031006E
	FVE_E_VOLUME_TOO_SMALL                                                    Handle        = 0x8031006F
	FVE_E_DV_NOT_SUPPORTED_ON_FS                                              Handle        = 0x80310070
	FVE_E_DV_NOT_ALLOWED_BY_GP                                                Handle        = 0x80310071
	FVE_E_POLICY_USER_CERTIFICATE_NOT_ALLOWED                                 Handle        = 0x80310072
	FVE_E_POLICY_USER_CERTIFICATE_REQUIRED                                    Handle        = 0x80310073
	FVE_E_POLICY_USER_CERT_MUST_BE_HW                                         Handle        = 0x80310074
	FVE_E_POLICY_USER_CONFIGURE_FDV_AUTOUNLOCK_NOT_ALLOWED                    Handle        = 0x80310075
	FVE_E_POLICY_USER_CONFIGURE_RDV_AUTOUNLOCK_NOT_ALLOWED                    Handle        = 0x80310076
	FVE_E_POLICY_USER_CONFIGURE_RDV_NOT_ALLOWED                               Handle        = 0x80310077
	FVE_E_POLICY_USER_ENABLE_RDV_NOT_ALLOWED                                  Handle        = 0x80310078
	FVE_E_POLICY_USER_DISABLE_RDV_NOT_ALLOWED                                 Handle        = 0x80310079
	FVE_E_POLICY_INVALID_PASSPHRASE_LENGTH                                    Handle        = 0x80310080
	FVE_E_POLICY_PASSPHRASE_TOO_SIMPLE                                        Handle        = 0x80310081
	FVE_E_RECOVERY_PARTITION                                                  Handle        = 0x80310082
	FVE_E_POLICY_CONFLICT_FDV_RK_OFF_AUK_ON                                   Handle        = 0x80310083
	FVE_E_POLICY_CONFLICT_RDV_RK_OFF_AUK_ON                                   Handle        = 0x80310084
	FVE_E_NON_BITLOCKER_OID                                                   Handle        = 0x80310085
	FVE_E_POLICY_PROHIBITS_SELFSIGNED                                         Handle        = 0x80310086
	FVE_E_POLICY_CONFLICT_RO_AND_STARTUP_KEY_REQUIRED                         Handle        = 0x80310087
	FVE_E_CONV_RECOVERY_FAILED                                                Handle        = 0x80310088
	FVE_E_VIRTUALIZED_SPACE_TOO_BIG                                           Handle        = 0x80310089
	FVE_E_POLICY_CONFLICT_OSV_RP_OFF_ADB_ON                                   Handle        = 0x80310090
	FVE_E_POLICY_CONFLICT_FDV_RP_OFF_ADB_ON                                   Handle        = 0x80310091
	FVE_E_POLICY_CONFLICT_RDV_RP_OFF_ADB_ON                                   Handle        = 0x80310092
	FVE_E_NON_BITLOCKER_KU                                                    Handle        = 0x80310093
	FVE_E_PRIVATEKEY_AUTH_FAILED                                              Handle        = 0x80310094
	FVE_E_REMOVAL_OF_DRA_FAILED                                               Handle        = 0x80310095
	FVE_E_OPERATION_NOT_SUPPORTED_ON_VISTA_VOLUME                             Handle        = 0x80310096
	FVE_E_CANT_LOCK_AUTOUNLOCK_ENABLED_VOLUME                                 Handle        = 0x80310097
	FVE_E_FIPS_HASH_KDF_NOT_ALLOWED                                           Handle        = 0x80310098
	FVE_E_ENH_PIN_INVALID                                                     Handle        = 0x80310099
	FVE_E_INVALID_PIN_CHARS                                                   Handle        = 0x8031009A
	FVE_E_INVALID_DATUM_TYPE                                                  Handle        = 0x8031009B
	FVE_E_EFI_ONLY                                                            Handle        = 0x8031009C
	FVE_E_MULTIPLE_NKP_CERTS                                                  Handle        = 0x8031009D
	FVE_E_REMOVAL_OF_NKP_FAILED                                               Handle        = 0x8031009E
	FVE_E_INVALID_NKP_CERT                                                    Handle        = 0x8031009F
	FVE_E_NO_EXISTING_PIN                                                     Handle        = 0x803100A0
	FVE_E_PROTECTOR_CHANGE_PIN_MISMATCH                                       Handle        = 0x803100A1
	FVE_E_PIN_PROTECTOR_CHANGE_BY_STD_USER_DISALLOWED                         Handle        = 0x803100A2
	FVE_E_PROTECTOR_CHANGE_MAX_PIN_CHANGE_ATTEMPTS_REACHED                    Handle        = 0x803100A3
	FVE_E_POLICY_PASSPHRASE_REQUIRES_ASCII                                    Handle        = 0x803100A4
	FVE_E_FULL_ENCRYPTION_NOT_ALLOWED_ON_TP_STORAGE                           Handle        = 0x803100A5
	FVE_E_WIPE_NOT_ALLOWED_ON_TP_STORAGE                                      Handle        = 0x803100A6
	FVE_E_KEY_LENGTH_NOT_SUPPORTED_BY_EDRIVE                                  Handle        = 0x803100A7
	FVE_E_NO_EXISTING_PASSPHRASE                                              Handle        = 0x803100A8
	FVE_E_PROTECTOR_CHANGE_PASSPHRASE_MISMATCH                                Handle        = 0x803100A9
	FVE_E_PASSPHRASE_TOO_LONG                                                 Handle        = 0x803100AA
	FVE_E_NO_PASSPHRASE_WITH_TPM                                              Handle        = 0x803100AB
	FVE_E_NO_TPM_WITH_PASSPHRASE                                              Handle        = 0x803100AC
	FVE_E_NOT_ALLOWED_ON_CSV_STACK                                            Handle        = 0x803100AD
	FVE_E_NOT_ALLOWED_ON_CLUSTER                                              Handle        = 0x803100AE
	FVE_E_EDRIVE_NO_FAILOVER_TO_SW                                            Handle        = 0x803100AF
	FVE_E_EDRIVE_BAND_IN_USE                                                  Handle        = 0x803100B0
	FVE_E_EDRIVE_DISALLOWED_BY_GP                                             Handle        = 0x803100B1
	FVE_E_EDRIVE_INCOMPATIBLE_VOLUME                                          Handle        = 0x803100B2
	FVE_E_NOT_ALLOWED_TO_UPGRADE_WHILE_CONVERTING                             Handle        = 0x803100B3
	FVE_E_EDRIVE_DV_NOT_SUPPORTED                                             Handle        = 0x803100B4
	FVE_E_NO_PREBOOT_KEYBOARD_DETECTED                                        Handle        = 0x803100B5
	FVE_E_NO_PREBOOT_KEYBOARD_OR_WINRE_DETECTED                               Handle        = 0x803100B6
	FVE_E_POLICY_REQUIRES_STARTUP_PIN_ON_TOUCH_DEVICE                         Handle        = 0x803100B7
	FVE_E_POLICY_REQUIRES_RECOVERY_PASSWORD_ON_TOUCH_DEVICE                   Handle        = 0x803100B8
	FVE_E_WIPE_CANCEL_NOT_APPLICABLE                                          Handle        = 0x803100B9
	FVE_E_SECUREBOOT_DISABLED                                                 Handle        = 0x803100BA
	FVE_E_SECUREBOOT_CONFIGURATION_INVALID                                    Handle        = 0x803100BB
	FVE_E_EDRIVE_DRY_RUN_FAILED                                               Handle        = 0x803100BC
	FVE_E_SHADOW_COPY_PRESENT                                                 Handle        = 0x803100BD
	FVE_E_POLICY_INVALID_ENHANCED_BCD_SETTINGS                                Handle        = 0x803100BE
	FVE_E_EDRIVE_INCOMPATIBLE_FIRMWARE                                        Handle        = 0x803100BF
	FVE_E_PROTECTOR_CHANGE_MAX_PASSPHRASE_CHANGE_ATTEMPTS_REACHED             Handle        = 0x803100C0
	FVE_E_PASSPHRASE_PROTECTOR_CHANGE_BY_STD_USER_DISALLOWED                  Handle        = 0x803100C1
	FVE_E_LIVEID_ACCOUNT_SUSPENDED                                            Handle        = 0x803100C2
	FVE_E_LIVEID_ACCOUNT_BLOCKED                                              Handle        = 0x803100C3
	FVE_E_NOT_PROVISIONED_ON_ALL_VOLUMES                                      Handle        = 0x803100C4
	FVE_E_DE_FIXED_DATA_NOT_SUPPORTED                                         Handle        = 0x803100C5
	FVE_E_DE_HARDWARE_NOT_COMPLIANT                                           Handle        = 0x803100C6
	FVE_E_DE_WINRE_NOT_CONFIGURED                                             Handle        = 0x803100C7
	FVE_E_DE_PROTECTION_SUSPENDED                                             Handle        = 0x803100C8
	FVE_E_DE_OS_VOLUME_NOT_PROTECTED                                          Handle        = 0x803100C9
	FVE_E_DE_DEVICE_LOCKEDOUT                                                 Handle        = 0x803100CA
	FVE_E_DE_PROTECTION_NOT_YET_ENABLED                                       Handle        = 0x803100CB
	FVE_E_INVALID_PIN_CHARS_DETAILED                                          Handle        = 0x803100CC
	FVE_E_DEVICE_LOCKOUT_COUNTER_UNAVAILABLE                                  Handle        = 0x803100CD
	FVE_E_DEVICELOCKOUT_COUNTER_MISMATCH                                      Handle        = 0x803100CE
	FVE_E_BUFFER_TOO_LARGE                                                    Handle        = 0x803100CF
	FVE_E_NO_SUCH_CAPABILITY_ON_TARGET                                        Handle        = 0x803100D0
	FVE_E_DE_PREVENTED_FOR_OS                                                 Handle        = 0x803100D1
	FVE_E_DE_VOLUME_OPTED_OUT                                                 Handle        = 0x803100D2
	FVE_E_DE_VOLUME_NOT_SUPPORTED                                             Handle        = 0x803100D3
	FVE_E_EOW_NOT_SUPPORTED_IN_VERSION                                        Handle        = 0x803100D4
	FVE_E_ADBACKUP_NOT_ENABLED                                                Handle        = 0x803100D5
	FVE_E_VOLUME_EXTEND_PREVENTS_EOW_DECRYPT                                  Handle        = 0x803100D6
	FVE_E_NOT_DE_VOLUME                                                       Handle        = 0x803100D7
	FVE_E_PROTECTION_CANNOT_BE_DISABLED                                       Handle        = 0x803100D8
	FVE_E_OSV_KSR_NOT_ALLOWED                                                 Handle        = 0x803100D9
	FVE_E_AD_BACKUP_REQUIRED_POLICY_NOT_SET_OS_DRIVE                          Handle        = 0x803100DA
	FVE_E_AD_BACKUP_REQUIRED_POLICY_NOT_SET_FIXED_DRIVE                       Handle        = 0x803100DB
	FVE_E_AD_BACKUP_REQUIRED_POLICY_NOT_SET_REMOVABLE_DRIVE                   Handle        = 0x803100DC
	FVE_E_KEY_ROTATION_NOT_SUPPORTED                                          Handle        = 0x803100DD
	FVE_E_EXECUTE_REQUEST_SENT_TOO_SOON                                       Handle        = 0x803100DE
	FVE_E_KEY_ROTATION_NOT_ENABLED                                            Handle        = 0x803100DF
	FVE_E_DEVICE_NOT_JOINED                                                   Handle        = 0x803100E0
	FWP_E_CALLOUT_NOT_FOUND                                                   Handle        = 0x80320001
	FWP_E_CONDITION_NOT_FOUND                                                 Handle        = 0x80320002
	FWP_E_FILTER_NOT_FOUND                                                    Handle        = 0x80320003
	FWP_E_LAYER_NOT_FOUND                                                     Handle        = 0x80320004
	FWP_E_PROVIDER_NOT_FOUND                                                  Handle        = 0x80320005
	FWP_E_PROVIDER_CONTEXT_NOT_FOUND                                          Handle        = 0x80320006
	FWP_E_SUBLAYER_NOT_FOUND                                                  Handle        = 0x80320007
	FWP_E_NOT_FOUND                                                           Handle        = 0x80320008
	FWP_E_ALREADY_EXISTS                                                      Handle        = 0x80320009
	FWP_E_IN_USE                                                              Handle        = 0x8032000A
	FWP_E_DYNAMIC_SESSION_IN_PROGRESS                                         Handle        = 0x8032000B
	FWP_E_WRONG_SESSION                                                       Handle        = 0x8032000C
	FWP_E_NO_TXN_IN_PROGRESS                                                  Handle        = 0x8032000D
	FWP_E_TXN_IN_PROGRESS                                                     Handle        = 0x8032000E
	FWP_E_TXN_ABORTED                                                         Handle        = 0x8032000F
	FWP_E_SESSION_ABORTED                                                     Handle        = 0x80320010
	FWP_E_INCOMPATIBLE_TXN                                                    Handle        = 0x80320011
	FWP_E_TIMEOUT                                                             Handle        = 0x80320012
	FWP_E_NET_EVENTS_DISABLED                                                 Handle        = 0x80320013
	FWP_E_INCOMPATIBLE_LAYER                                                  Handle        = 0x80320014
	FWP_E_KM_CLIENTS_ONLY                                                     Handle        = 0x80320015
	FWP_E_LIFETIME_MISMATCH                                                   Handle        = 0x80320016
	FWP_E_BUILTIN_OBJECT                                                      Handle        = 0x80320017
	FWP_E_TOO_MANY_CALLOUTS                                                   Handle        = 0x80320018
	FWP_E_NOTIFICATION_DROPPED                                                Handle        = 0x80320019
	FWP_E_TRAFFIC_MISMATCH                                                    Handle        = 0x8032001A
	FWP_E_INCOMPATIBLE_SA_STATE                                               Handle        = 0x8032001B
	FWP_E_NULL_POINTER                                                        Handle        = 0x8032001C
	FWP_E_INVALID_ENUMERATOR                                                  Handle        = 0x8032001D
	FWP_E_INVALID_FLAGS                                                       Handle        = 0x8032001E
	FWP_E_INVALID_NET_MASK                                                    Handle        = 0x8032001F
	FWP_E_INVALID_RANGE                                                       Handle        = 0x80320020
	FWP_E_INVALID_INTERVAL                                                    Handle        = 0x80320021
	FWP_E_ZERO_LENGTH_ARRAY                                                   Handle        = 0x80320022
	FWP_E_NULL_DISPLAY_NAME                                                   Handle        = 0x80320023
	FWP_E_INVALID_ACTION_TYPE                                                 Handle        = 0x80320024
	FWP_E_INVALID_WEIGHT                                                      Handle        = 0x80320025
	FWP_E_MATCH_TYPE_MISMATCH                                                 Handle        = 0x80320026
	FWP_E_TYPE_MISMATCH                                                       Handle        = 0x80320027
	FWP_E_OUT_OF_BOUNDS                                                       Handle        = 0x80320028
	FWP_E_RESERVED                                                            Handle        = 0x80320029
	FWP_E_DUPLICATE_CONDITION                                                 Handle        = 0x8032002A
	FWP_E_DUPLICATE_KEYMOD                                                    Handle        = 0x8032002B
	FWP_E_ACTION_INCOMPATIBLE_WITH_LAYER                                      Handle        = 0x8032002C
	FWP_E_ACTION_INCOMPATIBLE_WITH_SUBLAYER                                   Handle        = 0x8032002D
	FWP_E_CONTEXT_INCOMPATIBLE_WITH_LAYER                                     Handle        = 0x8032002E
	FWP_E_CONTEXT_INCOMPATIBLE_WITH_CALLOUT                                   Handle        = 0x8032002F
	FWP_E_INCOMPATIBLE_AUTH_METHOD                                            Handle        = 0x80320030
	FWP_E_INCOMPATIBLE_DH_GROUP                                               Handle        = 0x80320031
	FWP_E_EM_NOT_SUPPORTED                                                    Handle        = 0x80320032
	FWP_E_NEVER_MATCH                                                         Handle        = 0x80320033
	FWP_E_PROVIDER_CONTEXT_MISMATCH                                           Handle        = 0x80320034
	FWP_E_INVALID_PARAMETER                                                   Handle        = 0x80320035
	FWP_E_TOO_MANY_SUBLAYERS                                                  Handle        = 0x80320036
	FWP_E_CALLOUT_NOTIFICATION_FAILED                                         Handle        = 0x80320037
	FWP_E_INVALID_AUTH_TRANSFORM                                              Handle        = 0x80320038
	FWP_E_INVALID_CIPHER_TRANSFORM                                            Handle        = 0x80320039
	FWP_E_INCOMPATIBLE_CIPHER_TRANSFORM                                       Handle        = 0x8032003A
	FWP_E_INVALID_TRANSFORM_COMBINATION                                       Handle        = 0x8032003B
	FWP_E_DUPLICATE_AUTH_METHOD                                               Handle        = 0x8032003C
	FWP_E_INVALID_TUNNEL_ENDPOINT                                             Handle        = 0x8032003D
	FWP_E_L2_DRIVER_NOT_READY                                                 Handle        = 0x8032003E
	FWP_E_KEY_DICTATOR_ALREADY_REGISTERED                                     Handle        = 0x8032003F
	FWP_E_KEY_DICTATION_INVALID_KEYING_MATERIAL                               Handle        = 0x80320040
	FWP_E_CONNECTIONS_DISABLED                                                Handle        = 0x80320041
	FWP_E_INVALID_DNS_NAME                                                    Handle        = 0x80320042
	FWP_E_STILL_ON                                                            Handle        = 0x80320043
	FWP_E_IKEEXT_NOT_RUNNING                                                  Handle        = 0x80320044
	FWP_E_DROP_NOICMP                                                         Handle        = 0x80320104
	WS_S_ASYNC                                                                Handle        = 0x003D0000
	WS_S_END                                                                  Handle        = 0x003D0001
	WS_E_INVALID_FORMAT                                                       Handle        = 0x803D0000
	WS_E_OBJECT_FAULTED                                                       Handle        = 0x803D0001
	WS_E_NUMERIC_OVERFLOW                                                     Handle        = 0x803D0002
	WS_E_INVALID_OPERATION                                                    Handle        = 0x803D0003
	WS_E_OPERATION_ABORTED                                                    Handle        = 0x803D0004
	WS_E_ENDPOINT_ACCESS_DENIED                                               Handle        = 0x803D0005
	WS_E_OPERATION_TIMED_OUT                                                  Handle        = 0x803D0006
	WS_E_OPERATION_ABANDONED                                                  Handle        = 0x803D0007
	WS_E_QUOTA_EXCEEDED                                                       Handle        = 0x803D0008
	WS_E_NO_TRANSLATION_AVAILABLE                                             Handle        = 0x803D0009
	WS_E_SECURITY_VERIFICATION_FAILURE                                        Handle        = 0x803D000A
	WS_E_ADDRESS_IN_USE                                                       Handle        = 0x803D000B
	WS_E_ADDRESS_NOT_AVAILABLE                                                Handle        = 0x803D000C
	WS_E_ENDPOINT_NOT_FOUND                                                   Handle        = 0x803D000D
	WS_E_ENDPOINT_NOT_AVAILABLE                                               Handle        = 0x803D000E
	WS_E_ENDPOINT_FAILURE                                                     Handle        = 0x803D000F
	WS_E_ENDPOINT_UNREACHABLE                                                 Handle        = 0x803D0010
	WS_E_ENDPOINT_ACTION_NOT_SUPPORTED                                        Handle        = 0x803D0011
	WS_E_ENDPOINT_TOO_BUSY                                                    Handle        = 0x803D0012
	WS_E_ENDPOINT_FAULT_RECEIVED                                              Handle        = 0x803D0013
	WS_E_ENDPOINT_DISCONNECTED                                                Handle        = 0x803D0014
	WS_E_PROXY_FAILURE                                                        Handle        = 0x803D0015
	WS_E_PROXY_ACCESS_DENIED                                                  Handle        = 0x803D0016
	WS_E_NOT_SUPPORTED                                                        Handle        = 0x803D0017
	WS_E_PROXY_REQUIRES_BASIC_AUTH                                            Handle        = 0x803D0018
	WS_E_PROXY_REQUIRES_DIGEST_AUTH                                           Handle        = 0x803D0019
	WS_E_PROXY_REQUIRES_NTLM_AUTH                                             Handle        = 0x803D001A
	WS_E_PROXY_REQUIRES_NEGOTIATE_AUTH                                        Handle        = 0x803D001B
	WS_E_SERVER_REQUIRES_BASIC_AUTH                                           Handle        = 0x803D001C
	WS_E_SERVER_REQUIRES_DIGEST_AUTH                                          Handle        = 0x803D001D
	WS_E_SERVER_REQUIRES_NTLM_AUTH                                            Handle        = 0x803D001E
	WS_E_SERVER_REQUIRES_NEGOTIATE_AUTH                                       Handle        = 0x803D001F
	WS_E_INVALID_ENDPOINT_URL                                                 Handle        = 0x803D0020
	WS_E_OTHER                                                                Handle        = 0x803D0021
	WS_E_SECURITY_TOKEN_EXPIRED                                               Handle        = 0x803D0022
	WS_E_SECURITY_SYSTEM_FAILURE                                              Handle        = 0x803D0023
	ERROR_NDIS_INTERFACE_CLOSING                                              syscall.Errno = 0x80340002
	ERROR_NDIS_BAD_VERSION                                                    syscall.Errno = 0x80340004
	ERROR_NDIS_BAD_CHARACTERISTICS                                            syscall.Errno = 0x80340005
	ERROR_NDIS_ADAPTER_NOT_FOUND                                              syscall.Errno = 0x80340006
	ERROR_NDIS_OPEN_FAILED                                                    syscall.Errno = 0x80340007
	ERROR_NDIS_DEVICE_FAILED                                                  syscall.Errno = 0x80340008
	ERROR_NDIS_MULTICAST_FULL                                                 syscall.Errno = 0x80340009
	ERROR_NDIS_MULTICAST_EXISTS                                               syscall.Errno = 0x8034000A
	ERROR_NDIS_MULTICAST_NOT_FOUND                                            syscall.Errno = 0x8034000B
	ERROR_NDIS_REQUEST_ABORTED                                                syscall.Errno = 0x8034000C
	ERROR_NDIS_RESET_IN_PROGRESS                                              syscall.Errno = 0x8034000D
	ERROR_NDIS_NOT_SUPPORTED                                                  syscall.Errno = 0x803400BB
	ERROR_NDIS_INVALID_PACKET                                                 syscall.Errno = 0x8034000F
	ERROR_NDIS_ADAPTER_NOT_READY                                              syscall.Errno = 0x80340011
	ERROR_NDIS_INVALID_LENGTH                                                 syscall.Errno = 0x80340014
	ERROR_NDIS_INVALID_DATA                                                   syscall.Errno = 0x80340015
	ERROR_NDIS_BUFFER_TOO_SHORT                                               syscall.Errno = 0x80340016
	ERROR_NDIS_INVALID_OID                                                    syscall.Errno = 0x80340017
	ERROR_NDIS_ADAPTER_REMOVED                                                syscall.Errno = 0x80340018
	ERROR_NDIS_UNSUPPORTED_MEDIA                                              syscall.Errno = 0x80340019
	ERROR_NDIS_GROUP_ADDRESS_IN_USE                                           syscall.Errno = 0x8034001A
	ERROR_NDIS_FILE_NOT_FOUND                                                 syscall.Errno = 0x8034001B
	ERROR_NDIS_ERROR_READING_FILE                                             syscall.Errno = 0x8034001C
	ERROR_NDIS_ALREADY_MAPPED                                                 syscall.Errno = 0x8034001D
	ERROR_NDIS_RESOURCE_CONFLICT                                              syscall.Errno = 0x8034001E
	ERROR_NDIS_MEDIA_DISCONNECTED                                             syscall.Errno = 0x8034001F
	ERROR_NDIS_INVALID_ADDRESS                                                syscall.Errno = 0x80340022
	ERROR_NDIS_INVALID_DEVICE_REQUEST                                         syscall.Errno = 0x80340010
	ERROR_NDIS_PAUSED                                                         syscall.Errno = 0x8034002A
	ERROR_NDIS_INTERFACE_NOT_FOUND                                            syscall.Errno = 0x8034002B
	ERROR_NDIS_UNSUPPORTED_REVISION                                           syscall.Errno = 0x8034002C
	ERROR_NDIS_INVALID_PORT                                                   syscall.Errno = 0x8034002D
	ERROR_NDIS_INVALID_PORT_STATE                                             syscall.Errno = 0x8034002E
	ERROR_NDIS_LOW_POWER_STATE                                                syscall.Errno = 0x8034002F
	ERROR_NDIS_REINIT_REQUIRED                                                syscall.Errno = 0x80340030
	ERROR_NDIS_NO_QUEUES                                                      syscall.Errno = 0x80340031
	ERROR_NDIS_DOT11_AUTO_CONFIG_ENABLED                                      syscall.Errno = 0x80342000
	ERROR_NDIS_DOT11_MEDIA_IN_USE                                             syscall.Errno = 0x80342001
	ERROR_NDIS_DOT11_POWER_STATE_INVALID                                      syscall.Errno = 0x80342002
	ERROR_NDIS_PM_WOL_PATTERN_LIST_FULL                                       syscall.Errno = 0x80342003
	ERROR_NDIS_PM_PROTOCOL_OFFLOAD_LIST_FULL                                  syscall.Errno = 0x80342004
	ERROR_NDIS_DOT11_AP_CHANNEL_CURRENTLY_NOT_AVAILABLE                       syscall.Errno = 0x80342005
	ERROR_NDIS_DOT11_AP_BAND_CURRENTLY_NOT_AVAILABLE                          syscall.Errno = 0x80342006
	ERROR_NDIS_DOT11_AP_CHANNEL_NOT_ALLOWED                                   syscall.Errno = 0x80342007
	ERROR_NDIS_DOT11_AP_BAND_NOT_ALLOWED                                      syscall.Errno = 0x80342008
	ERROR_NDIS_INDICATION_REQUIRED                                            syscall.Errno = 0x00340001
	ERROR_NDIS_OFFLOAD_POLICY                                                 syscall.Errno = 0xC034100F
	ERROR_NDIS_OFFLOAD_CONNECTION_REJECTED                                    syscall.Errno = 0xC0341012
	ERROR_NDIS_OFFLOAD_PATH_REJECTED                                          syscall.Errno = 0xC0341013
	ERROR_HV_INVALID_HYPERCALL_CODE                                           syscall.Errno = 0xC0350002
	ERROR_HV_INVALID_HYPERCALL_INPUT                                          syscall.Errno = 0xC0350003
	ERROR_HV_INVALID_ALIGNMENT                                                syscall.Errno = 0xC0350004
	ERROR_HV_INVALID_PARAMETER                                                syscall.Errno = 0xC0350005
	ERROR_HV_ACCESS_DENIED                                                    syscall.Errno = 0xC0350006
	ERROR_HV_INVALID_PARTITION_STATE                                          syscall.Errno = 0xC0350007
	ERROR_HV_OPERATION_DENIED                                                 syscall.Errno = 0xC0350008
	ERROR_HV_UNKNOWN_PROPERTY                                                 syscall.Errno = 0xC0350009
	ERROR_HV_PROPERTY_VALUE_OUT_OF_RANGE                                      syscall.Errno = 0xC035000A
	ERROR_HV_INSUFFICIENT_MEMORY                                              syscall.Errno = 0xC035000B
	ERROR_HV_PARTITION_TOO_DEEP                                               syscall.Errno = 0xC035000C
	ERROR_HV_INVALID_PARTITION_ID                                             syscall.Errno = 0xC035000D
	ERROR_HV_INVALID_VP_INDEX                                                 syscall.Errno = 0xC035000E
	ERROR_HV_INVALID_PORT_ID                                                  syscall.Errno = 0xC0350011
	ERROR_HV_INVALID_CONNECTION_ID                                            syscall.Errno = 0xC0350012
	ERROR_HV_INSUFFICIENT_BUFFERS                                             syscall.Errno = 0xC0350013
	ERROR_HV_NOT_ACKNOWLEDGED                                                 syscall.Errno = 0xC0350014
	ERROR_HV_INVALID_VP_STATE                                                 syscall.Errno = 0xC0350015
	ERROR_HV_ACKNOWLEDGED                                                     syscall.Errno = 0xC0350016
	ERROR_HV_INVALID_SAVE_RESTORE_STATE                                       syscall.Errno = 0xC0350017
	ERROR_HV_INVALID_SYNIC_STATE                                              syscall.Errno = 0xC0350018
	ERROR_HV_OBJECT_IN_USE                                                    syscall.Errno = 0xC0350019
	ERROR_HV_INVALID_PROXIMITY_DOMAIN_INFO                                    syscall.Errno = 0xC035001A
	ERROR_HV_NO_DATA                                                          syscall.Errno = 0xC035001B
	ERROR_HV_INACTIVE                                                         syscall.Errno = 0xC035001C
	ERROR_HV_NO_RESOURCES                                                     syscall.Errno = 0xC035001D
	ERROR_HV_FEATURE_UNAVAILABLE                                              syscall.Errno = 0xC035001E
	ERROR_HV_INSUFFICIENT_BUFFER                                              syscall.Errno = 0xC0350033
	ERROR_HV_INSUFFICIENT_DEVICE_DOMAINS                                      syscall.Errno = 0xC0350038
	ERROR_HV_CPUID_FEATURE_VALIDATION                                         syscall.Errno = 0xC035003C
	ERROR_HV_CPUID_XSAVE_FEATURE_VALIDATION                                   syscall.Errno = 0xC035003D
	ERROR_HV_PROCESSOR_STARTUP_TIMEOUT                                        syscall.Errno = 0xC035003E
	ERROR_HV_SMX_ENABLED                                                      syscall.Errno = 0xC035003F
	ERROR_HV_INVALID_LP_INDEX                                                 syscall.Errno = 0xC0350041
	ERROR_HV_INVALID_REGISTER_VALUE                                           syscall.Errno = 0xC0350050
	ERROR_HV_INVALID_VTL_STATE                                                syscall.Errno = 0xC0350051
	ERROR_HV_NX_NOT_DETECTED                                                  syscall.Errno = 0xC0350055
	ERROR_HV_INVALID_DEVICE_ID                                                syscall.Errno = 0xC0350057
	ERROR_HV_INVALID_DEVICE_STATE                                             syscall.Errno = 0xC0350058
	ERROR_HV_PENDING_PAGE_REQUESTS                                            syscall.Errno = 0x00350059
	ERROR_HV_PAGE_REQUEST_INVALID                                             syscall.Errno = 0xC0350060
	ERROR_HV_INVALID_CPU_GROUP_ID                                             syscall.Errno = 0xC035006F
	ERROR_HV_INVALID_CPU_GROUP_STATE                                          syscall.Errno = 0xC0350070
	ERROR_HV_OPERATION_FAILED                                                 syscall.Errno = 0xC0350071
	ERROR_HV_NOT_ALLOWED_WITH_NESTED_VIRT_ACTIVE                              syscall.Errno = 0xC0350072
	ERROR_HV_INSUFFICIENT_ROOT_MEMORY                                         syscall.Errno = 0xC0350073
	ERROR_HV_NOT_PRESENT                                                      syscall.Errno = 0xC0351000
	ERROR_VID_DUPLICATE_HANDLER                                               syscall.Errno = 0xC0370001
	ERROR_VID_TOO_MANY_HANDLERS                                               syscall.Errno = 0xC0370002
	ERROR_VID_QUEUE_FULL                                                      syscall.Errno = 0xC0370003
	ERROR_VID_HANDLER_NOT_PRESENT                                             syscall.Errno = 0xC0370004
	ERROR_VID_INVALID_OBJECT_NAME                                             syscall.Errno = 0xC0370005
	ERROR_VID_PARTITION_NAME_TOO_LONG                                         syscall.Errno = 0xC0370006
	ERROR_VID_MESSAGE_QUEUE_NAME_TOO_LONG                                     syscall.Errno = 0xC0370007
	ERROR_VID_PARTITION_ALREADY_EXISTS                                        syscall.Errno = 0xC0370008
	ERROR_VID_PARTITION_DOES_NOT_EXIST                                        syscall.Errno = 0xC0370009
	ERROR_VID_PARTITION_NAME_NOT_FOUND                                        syscall.Errno = 0xC037000A
	ERROR_VID_MESSAGE_QUEUE_ALREADY_EXISTS                                    syscall.Errno = 0xC037000B
	ERROR_VID_EXCEEDED_MBP_ENTRY_MAP_LIMIT                                    syscall.Errno = 0xC037000C
	ERROR_VID_MB_STILL_REFERENCED                                             syscall.Errno = 0xC037000D
	ERROR_VID_CHILD_GPA_PAGE_SET_CORRUPTED                                    syscall.Errno = 0xC037000E
	ERROR_VID_INVALID_NUMA_SETTINGS                                           syscall.Errno = 0xC037000F
	ERROR_VID_INVALID_NUMA_NODE_INDEX                                         syscall.Errno = 0xC0370010
	ERROR_VID_NOTIFICATION_QUEUE_ALREADY_ASSOCIATED                           syscall.Errno = 0xC0370011
	ERROR_VID_INVALID_MEMORY_BLOCK_HANDLE                                     syscall.Errno = 0xC0370012
	ERROR_VID_PAGE_RANGE_OVERFLOW                                             syscall.Errno = 0xC0370013
	ERROR_VID_INVALID_MESSAGE_QUEUE_HANDLE                                    syscall.Errno = 0xC0370014
	ERROR_VID_INVALID_GPA_RANGE_HANDLE                                        syscall.Errno = 0xC0370015
	ERROR_VID_NO_MEMORY_BLOCK_NOTIFICATION_QUEUE                              syscall.Errno = 0xC0370016
	ERROR_VID_MEMORY_BLOCK_LOCK_COUNT_EXCEEDED                                syscall.Errno = 0xC0370017
	ERROR_VID_INVALID_PPM_HANDLE                                              syscall.Errno = 0xC0370018
	ERROR_VID_MBPS_ARE_LOCKED                                                 syscall.Errno = 0xC0370019
	ERROR_VID_MESSAGE_QUEUE_CLOSED                                            syscall.Errno = 0xC037001A
	ERROR_VID_VIRTUAL_PROCESSOR_LIMIT_EXCEEDED                                syscall.Errno = 0xC037001B
	ERROR_VID_STOP_PENDING                                                    syscall.Errno = 0xC037001C
	ERROR_VID_INVALID_PROCESSOR_STATE                                         syscall.Errno = 0xC037001D
	ERROR_VID_EXCEEDED_KM_CONTEXT_COUNT_LIMIT                                 syscall.Errno = 0xC037001E
	ERROR_VID_KM_INTERFACE_ALREADY_INITIALIZED                                syscall.Errno = 0xC037001F
	ERROR_VID_MB_PROPERTY_ALREADY_SET_RESET                                   syscall.Errno = 0xC0370020
	ERROR_VID_MMIO_RANGE_DESTROYED                                            syscall.Errno = 0xC0370021
	ERROR_VID_INVALID_CHILD_GPA_PAGE_SET                                      syscall.Errno = 0xC0370022
	ERROR_VID_RESERVE_PAGE_SET_IS_BEING_USED                                  syscall.Errno = 0xC0370023
	ERROR_VID_RESERVE_PAGE_SET_TOO_SMALL                                      syscall.Errno = 0xC0370024
	ERROR_VID_MBP_ALREADY_LOCKED_USING_RESERVED_PAGE                          syscall.Errno = 0xC0370025
	ERROR_VID_MBP_COUNT_EXCEEDED_LIMIT                                        syscall.Errno = 0xC0370026
	ERROR_VID_SAVED_STATE_CORRUPT                                             syscall.Errno = 0xC0370027
	ERROR_VID_SAVED_STATE_UNRECOGNIZED_ITEM                                   syscall.Errno = 0xC0370028
	ERROR_VID_SAVED_STATE_INCOMPATIBLE                                        syscall.Errno = 0xC0370029
	ERROR_VID_VTL_ACCESS_DENIED                                               syscall.Errno = 0xC037002A
	ERROR_VMCOMPUTE_TERMINATED_DURING_START                                   syscall.Errno = 0xC0370100
	ERROR_VMCOMPUTE_IMAGE_MISMATCH                                            syscall.Errno = 0xC0370101
	ERROR_VMCOMPUTE_HYPERV_NOT_INSTALLED                                      syscall.Errno = 0xC0370102
	ERROR_VMCOMPUTE_OPERATION_PENDING                                         syscall.Errno = 0xC0370103
	ERROR_VMCOMPUTE_TOO_MANY_NOTIFICATIONS                                    syscall.Errno = 0xC0370104
	ERROR_VMCOMPUTE_INVALID_STATE                                             syscall.Errno = 0xC0370105
	ERROR_VMCOMPUTE_UNEXPECTED_EXIT                                           syscall.Errno = 0xC0370106
	ERROR_VMCOMPUTE_TERMINATED                                                syscall.Errno = 0xC0370107
	ERROR_VMCOMPUTE_CONNECT_FAILED                                            syscall.Errno = 0xC0370108
	ERROR_VMCOMPUTE_TIMEOUT                                                   syscall.Errno = 0xC0370109
	ERROR_VMCOMPUTE_CONNECTION_CLOSED                                         syscall.Errno = 0xC037010A
	ERROR_VMCOMPUTE_UNKNOWN_MESSAGE                                           syscall.Errno = 0xC037010B
	ERROR_VMCOMPUTE_UNSUPPORTED_PROTOCOL_VERSION                              syscall.Errno = 0xC037010C
	ERROR_VMCOMPUTE_INVALID_JSON                                              syscall.Errno = 0xC037010D
	ERROR_VMCOMPUTE_SYSTEM_NOT_FOUND                                          syscall.Errno = 0xC037010E
	ERROR_VMCOMPUTE_SYSTEM_ALREADY_EXISTS                                     syscall.Errno = 0xC037010F
	ERROR_VMCOMPUTE_SYSTEM_ALREADY_STOPPED                                    syscall.Errno = 0xC0370110
	ERROR_VMCOMPUTE_PROTOCOL_ERROR                                            syscall.Errno = 0xC0370111
	ERROR_VMCOMPUTE_INVALID_LAYER                                             syscall.Errno = 0xC0370112
	ERROR_VMCOMPUTE_WINDOWS_INSIDER_REQUIRED                                  syscall.Errno = 0xC0370113
	HCS_E_TERMINATED_DURING_START                                             Handle        = 0x80370100
	HCS_E_IMAGE_MISMATCH                                                      Handle        = 0x80370101
	HCS_E_HYPERV_NOT_INSTALLED                                                Handle        = 0x80370102
	HCS_E_INVALID_STATE                                                       Handle        = 0x80370105
	HCS_E_UNEXPECTED_EXIT                                                     Handle        = 0x80370106
	HCS_E_TERMINATED                                                          Handle        = 0x80370107
	HCS_E_CONNECT_FAILED                                                      Handle        = 0x80370108
	HCS_E_CONNECTION_TIMEOUT                                                  Handle        = 0x80370109
	HCS_E_CONNECTION_CLOSED                                                   Handle        = 0x8037010A
	HCS_E_UNKNOWN_MESSAGE                                                     Handle        = 0x8037010B
	HCS_E_UNSUPPORTED_PROTOCOL_VERSION                                        Handle        = 0x8037010C
	HCS_E_INVALID_JSON                                                        Handle        = 0x8037010D
	HCS_E_SYSTEM_NOT_FOUND                                                    Handle        = 0x8037010E
	HCS_E_SYSTEM_ALREADY_EXISTS                                               Handle        = 0x8037010F
	HCS_E_SYSTEM_ALREADY_STOPPED                                              Handle        = 0x80370110
	HCS_E_PROTOCOL_ERROR                                                      Handle        = 0x80370111
	HCS_E_INVALID_LAYER                                                       Handle        = 0x80370112
	HCS_E_WINDOWS_INSIDER_REQUIRED                                            Handle        = 0x80370113
	HCS_E_SERVICE_NOT_AVAILABLE                                               Handle        = 0x80370114
	HCS_E_OPERATION_NOT_STARTED                                               Handle        = 0x80370115
	HCS_E_OPERATION_ALREADY_STARTED                                           Handle        = 0x80370116
	HCS_E_OPERATION_PENDING                                                   Handle        = 0x80370117
	HCS_E_OPERATION_TIMEOUT                                                   Handle        = 0x80370118
	HCS_E_OPERATION_SYSTEM_CALLBACK_ALREADY_SET                               Handle        = 0x80370119
	HCS_E_OPERATION_RESULT_ALLOCATION_FAILED                                  Handle        = 0x8037011A
	HCS_E_ACCESS_DENIED                                                       Handle        = 0x8037011B
	HCS_E_GUEST_CRITICAL_ERROR                                                Handle        = 0x8037011C
	ERROR_VNET_VIRTUAL_SWITCH_NAME_NOT_FOUND                                  syscall.Errno = 0xC0370200
	ERROR_VID_REMOTE_NODE_PARENT_GPA_PAGES_USED                               syscall.Errno = 0x80370001
	WHV_E_UNKNOWN_CAPABILITY                                                  Handle        = 0x80370300
	WHV_E_INSUFFICIENT_BUFFER                                                 Handle        = 0x80370301
	WHV_E_UNKNOWN_PROPERTY                                                    Handle        = 0x80370302
	WHV_E_UNSUPPORTED_HYPERVISOR_CONFIG                                       Handle        = 0x80370303
	WHV_E_INVALID_PARTITION_CONFIG                                            Handle        = 0x80370304
	WHV_E_GPA_RANGE_NOT_FOUND                                                 Handle        = 0x80370305
	WHV_E_VP_ALREADY_EXISTS                                                   Handle        = 0x80370306
	WHV_E_VP_DOES_NOT_EXIST                                                   Handle        = 0x80370307
	WHV_E_INVALID_VP_STATE                                                    Handle        = 0x80370308
	WHV_E_INVALID_VP_REGISTER_NAME                                            Handle        = 0x80370309
	ERROR_VSMB_SAVED_STATE_FILE_NOT_FOUND                                     syscall.Errno = 0xC0370400
	ERROR_VSMB_SAVED_STATE_CORRUPT                                            syscall.Errno = 0xC0370401
	ERROR_VOLMGR_INCOMPLETE_REGENERATION                                      syscall.Errno = 0x80380001
	ERROR_VOLMGR_INCOMPLETE_DISK_MIGRATION                                    syscall.Errno = 0x80380002
	ERROR_VOLMGR_DATABASE_FULL                                                syscall.Errno = 0xC0380001
	ERROR_VOLMGR_DISK_CONFIGURATION_CORRUPTED                                 syscall.Errno = 0xC0380002
	ERROR_VOLMGR_DISK_CONFIGURATION_NOT_IN_SYNC                               syscall.Errno = 0xC0380003
	ERROR_VOLMGR_PACK_CONFIG_UPDATE_FAILED                                    syscall.Errno = 0xC0380004
	ERROR_VOLMGR_DISK_CONTAINS_NON_SIMPLE_VOLUME                              syscall.Errno = 0xC0380005
	ERROR_VOLMGR_DISK_DUPLICATE                                               syscall.Errno = 0xC0380006
	ERROR_VOLMGR_DISK_DYNAMIC                                                 syscall.Errno = 0xC0380007
	ERROR_VOLMGR_DISK_ID_INVALID                                              syscall.Errno = 0xC0380008
	ERROR_VOLMGR_DISK_INVALID                                                 syscall.Errno = 0xC0380009
	ERROR_VOLMGR_DISK_LAST_VOTER                                              syscall.Errno = 0xC038000A
	ERROR_VOLMGR_DISK_LAYOUT_INVALID                                          syscall.Errno = 0xC038000B
	ERROR_VOLMGR_DISK_LAYOUT_NON_BASIC_BETWEEN_BASIC_PARTITIONS               syscall.Errno = 0xC038000C
	ERROR_VOLMGR_DISK_LAYOUT_NOT_CYLINDER_ALIGNED                             syscall.Errno = 0xC038000D
	ERROR_VOLMGR_DISK_LAYOUT_PARTITIONS_TOO_SMALL                             syscall.Errno = 0xC038000E
	ERROR_VOLMGR_DISK_LAYOUT_PRIMARY_BETWEEN_LOGICAL_PARTITIONS               syscall.Errno = 0xC038000F
	ERROR_VOLMGR_DISK_LAYOUT_TOO_MANY_PARTITIONS                              syscall.Errno = 0xC0380010
	ERROR_VOLMGR_DISK_MISSING                                                 syscall.Errno = 0xC0380011
	ERROR_VOLMGR_DISK_NOT_EMPTY                                               syscall.Errno = 0xC0380012
	ERROR_VOLMGR_DISK_NOT_ENOUGH_SPACE                                        syscall.Errno = 0xC0380013
	ERROR_VOLMGR_DISK_REVECTORING_FAILED                                      syscall.Errno = 0xC0380014
	ERROR_VOLMGR_DISK_SECTOR_SIZE_INVALID                                     syscall.Errno = 0xC0380015
	ERROR_VOLMGR_DISK_SET_NOT_CONTAINED                                       syscall.Errno = 0xC0380016
	ERROR_VOLMGR_DISK_USED_BY_MULTIPLE_MEMBERS                                syscall.Errno = 0xC0380017
	ERROR_VOLMGR_DISK_USED_BY_MULTIPLE_PLEXES                                 syscall.Errno = 0xC0380018
	ERROR_VOLMGR_DYNAMIC_DISK_NOT_SUPPORTED                                   syscall.Errno = 0xC0380019
	ERROR_VOLMGR_EXTENT_ALREADY_USED                                          syscall.Errno = 0xC038001A
	ERROR_VOLMGR_EXTENT_NOT_CONTIGUOUS                                        syscall.Errno = 0xC038001B
	ERROR_VOLMGR_EXTENT_NOT_IN_PUBLIC_REGION                                  syscall.Errno = 0xC038001C
	ERROR_VOLMGR_EXTENT_NOT_SECTOR_ALIGNED                                    syscall.Errno = 0xC038001D
	ERROR_VOLMGR_EXTENT_OVERLAPS_EBR_PARTITION                                syscall.Errno = 0xC038001E
	ERROR_VOLMGR_EXTENT_VOLUME_LENGTHS_DO_NOT_MATCH                           syscall.Errno = 0xC038001F
	ERROR_VOLMGR_FAULT_TOLERANT_NOT_SUPPORTED                                 syscall.Errno = 0xC0380020
	ERROR_VOLMGR_INTERLEAVE_LENGTH_INVALID                                    syscall.Errno = 0xC0380021
	ERROR_VOLMGR_MAXIMUM_REGISTERED_USERS                                     syscall.Errno = 0xC0380022
	ERROR_VOLMGR_MEMBER_IN_SYNC                                               syscall.Errno = 0xC0380023
	ERROR_VOLMGR_MEMBER_INDEX_DUPLICATE                                       syscall.Errno = 0xC0380024
	ERROR_VOLMGR_MEMBER_INDEX_INVALID                                         syscall.Errno = 0xC0380025
	ERROR_VOLMGR_MEMBER_MISSING                                               syscall.Errno = 0xC0380026
	ERROR_VOLMGR_MEMBER_NOT_DETACHED                                          syscall.Errno = 0xC0380027
	ERROR_VOLMGR_MEMBER_REGENERATING                                          syscall.Errno = 0xC0380028
	ERROR_VOLMGR_ALL_DISKS_FAILED                                             syscall.Errno = 0xC0380029
	ERROR_VOLMGR_NO_REGISTERED_USERS                                          syscall.Errno = 0xC038002A
	ERROR_VOLMGR_NO_SUCH_USER                                                 syscall.Errno = 0xC038002B
	ERROR_VOLMGR_NOTIFICATION_RESET                                           syscall.Errno = 0xC038002C
	ERROR_VOLMGR_NUMBER_OF_MEMBERS_INVALID                                    syscall.Errno = 0xC038002D
	ERROR_VOLMGR_NUMBER_OF_PLEXES_INVALID                                     syscall.Errno = 0xC038002E
	ERROR_VOLMGR_PACK_DUPLICATE                                               syscall.Errno = 0xC038002F
	ERROR_VOLMGR_PACK_ID_INVALID                                              syscall.Errno = 0xC0380030
	ERROR_VOLMGR_PACK_INVALID                                                 syscall.Errno = 0xC0380031
	ERROR_VOLMGR_PACK_NAME_INVALID                                            syscall.Errno = 0xC0380032
	ERROR_VOLMGR_PACK_OFFLINE                                                 syscall.Errno = 0xC0380033
	ERROR_VOLMGR_PACK_HAS_QUORUM                                              syscall.Errno = 0xC0380034
	ERROR_VOLMGR_PACK_WITHOUT_QUORUM                                          syscall.Errno = 0xC0380035
	ERROR_VOLMGR_PARTITION_STYLE_INVALID                                      syscall.Errno = 0xC0380036
	ERROR_VOLMGR_PARTITION_UPDATE_FAILED                                      syscall.Errno = 0xC0380037
	ERROR_VOLMGR_PLEX_IN_SYNC                                                 syscall.Errno = 0xC0380038
	ERROR_VOLMGR_PLEX_INDEX_DUPLICATE                                         syscall.Errno = 0xC0380039
	ERROR_VOLMGR_PLEX_INDEX_INVALID                                           syscall.Errno = 0xC038003A
	ERROR_VOLMGR_PLEX_LAST_ACTIVE                                             syscall.Errno = 0xC038003B
	ERROR_VOLMGR_PLEX_MISSING                                                 syscall.Errno = 0xC038003C
	ERROR_VOLMGR_PLEX_REGENERATING                                            syscall.Errno = 0xC038003D
	ERROR_VOLMGR_PLEX_TYPE_INVALID                                            syscall.Errno = 0xC038003E
	ERROR_VOLMGR_PLEX_NOT_RAID5                                               syscall.Errno = 0xC038003F
	ERROR_VOLMGR_PLEX_NOT_SIMPLE                                              syscall.Errno = 0xC0380040
	ERROR_VOLMGR_STRUCTURE_SIZE_INVALID                                       syscall.Errno = 0xC0380041
	ERROR_VOLMGR_TOO_MANY_NOTIFICATION_REQUESTS                               syscall.Errno = 0xC0380042
	ERROR_VOLMGR_TRANSACTION_IN_PROGRESS                                      syscall.Errno = 0xC0380043
	ERROR_VOLMGR_UNEXPECTED_DISK_LAYOUT_CHANGE                                syscall.Errno = 0xC0380044
	ERROR_VOLMGR_VOLUME_CONTAINS_MISSING_DISK                                 syscall.Errno = 0xC0380045
	ERROR_VOLMGR_VOLUME_ID_INVALID                                            syscall.Errno = 0xC0380046
	ERROR_VOLMGR_VOLUME_LENGTH_INVALID                                        syscall.Errno = 0xC0380047
	ERROR_VOLMGR_VOLUME_LENGTH_NOT_SECTOR_SIZE_MULTIPLE                       syscall.Errno = 0xC0380048
	ERROR_VOLMGR_VOLUME_NOT_MIRRORED                                          syscall.Errno = 0xC0380049
	ERROR_VOLMGR_VOLUME_NOT_RETAINED                                          syscall.Errno = 0xC038004A
	ERROR_VOLMGR_VOLUME_OFFLINE                                               syscall.Errno = 0xC038004B
	ERROR_VOLMGR_VOLUME_RETAINED                                              syscall.Errno = 0xC038004C
	ERROR_VOLMGR_NUMBER_OF_EXTENTS_INVALID                                    syscall.Errno = 0xC038004D
	ERROR_VOLMGR_DIFFERENT_SECTOR_SIZE                                        syscall.Errno = 0xC038004E
	ERROR_VOLMGR_BAD_BOOT_DISK                                                syscall.Errno = 0xC038004F
	ERROR_VOLMGR_PACK_CONFIG_OFFLINE                                          syscall.Errno = 0xC0380050
	ERROR_VOLMGR_PACK_CONFIG_ONLINE                                           syscall.Errno = 0xC0380051
	ERROR_VOLMGR_NOT_PRIMARY_PACK                                             syscall.Errno = 0xC0380052
	ERROR_VOLMGR_PACK_LOG_UPDATE_FAILED                                       syscall.Errno = 0xC0380053
	ERROR_VOLMGR_NUMBER_OF_DISKS_IN_PLEX_INVALID                              syscall.Errno = 0xC0380054
	ERROR_VOLMGR_NUMBER_OF_DISKS_IN_MEMBER_INVALID                            syscall.Errno = 0xC0380055
	ERROR_VOLMGR_VOLUME_MIRRORED                                              syscall.Errno = 0xC0380056
	ERROR_VOLMGR_PLEX_NOT_SIMPLE_SPANNED                                      syscall.Errno = 0xC0380057
	ERROR_VOLMGR_NO_VALID_LOG_COPIES                                          syscall.Errno = 0xC0380058
	ERROR_VOLMGR_PRIMARY_PACK_PRESENT                                         syscall.Errno = 0xC0380059
	ERROR_VOLMGR_NUMBER_OF_DISKS_INVALID                                      syscall.Errno = 0xC038005A
	ERROR_VOLMGR_MIRROR_NOT_SUPPORTED                                         syscall.Errno = 0xC038005B
	ERROR_VOLMGR_RAID5_NOT_SUPPORTED                                          syscall.Errno = 0xC038005C
	ERROR_BCD_NOT_ALL_ENTRIES_IMPORTED                                        syscall.Errno = 0x80390001
	ERROR_BCD_TOO_MANY_ELEMENTS                                               syscall.Errno = 0xC0390002
	ERROR_BCD_NOT_ALL_ENTRIES_SYNCHRONIZED                                    syscall.Errno = 0x80390003
	ERROR_VHD_DRIVE_FOOTER_MISSING                                            syscall.Errno = 0xC03A0001
	ERROR_VHD_DRIVE_FOOTER_CHECKSUM_MISMATCH                                  syscall.Errno = 0xC03A0002
	ERROR_VHD_DRIVE_FOOTER_CORRUPT                                            syscall.Errno = 0xC03A0003
	ERROR_VHD_FORMAT_UNKNOWN                                                  syscall.Errno = 0xC03A0004
	ERROR_VHD_FORMAT_UNSUPPORTED_VERSION                                      syscall.Errno = 0xC03A0005
	ERROR_VHD_SPARSE_HEADER_CHECKSUM_MISMATCH                                 syscall.Errno = 0xC03A0006
	ERROR_VHD_SPARSE_HEADER_UNSUPPORTED_VERSION                               syscall.Errno = 0xC03A0007
	ERROR_VHD_SPARSE_HEADER_CORRUPT                                           syscall.Errno = 0xC03A0008
	ERROR_VHD_BLOCK_ALLOCATION_FAILURE                                        syscall.Errno = 0xC03A0009
	ERROR_VHD_BLOCK_ALLOCATION_TABLE_CORRUPT                                  syscall.Errno = 0xC03A000A
	ERROR_VHD_INVALID_BLOCK_SIZE                                              syscall.Errno = 0xC03A000B
	ERROR_VHD_BITMAP_MISMATCH                                                 syscall.Errno = 0xC03A000C
	ERROR_VHD_PARENT_VHD_NOT_FOUND                                            syscall.Errno = 0xC03A000D
	ERROR_VHD_CHILD_PARENT_ID_MISMATCH                                        syscall.Errno = 0xC03A000E
	ERROR_VHD_CHILD_PARENT_TIMESTAMP_MISMATCH                                 syscall.Errno = 0xC03A000F
	ERROR_VHD_METADATA_READ_FAILURE                                           syscall.Errno = 0xC03A0010
	ERROR_VHD_METADATA_WRITE_FAILURE                                          syscall.Errno = 0xC03A0011
	ERROR_VHD_INVALID_SIZE                                                    syscall.Errno = 0xC03A0012
	ERROR_VHD_INVALID_FILE_SIZE                                               syscall.Errno = 0xC03A0013
	ERROR_VIRTDISK_PROVIDER_NOT_FOUND                                         syscall.Errno = 0xC03A0014
	ERROR_VIRTDISK_NOT_VIRTUAL_DISK                                           syscall.Errno = 0xC03A0015
	ERROR_VHD_PARENT_VHD_ACCESS_DENIED                                        syscall.Errno = 0xC03A0016
	ERROR_VHD_CHILD_PARENT_SIZE_MISMATCH                                      syscall.Errno = 0xC03A0017
	ERROR_VHD_DIFFERENCING_CHAIN_CYCLE_DETECTED                               syscall.Errno = 0xC03A0018
	ERROR_VHD_DIFFERENCING_CHAIN_ERROR_IN_PARENT                              syscall.Errno = 0xC03A0019
	ERROR_VIRTUAL_DISK_LIMITATION                                             syscall.Errno = 0xC03A001A
	ERROR_VHD_INVALID_TYPE                                                    syscall.Errno = 0xC03A001B
	ERROR_VHD_INVALID_STATE                                                   syscall.Errno = 0xC03A001C
	ERROR_VIRTDISK_UNSUPPORTED_DISK_SECTOR_SIZE                               syscall.Errno = 0xC03A001D
	ERROR_VIRTDISK_DISK_ALREADY_OWNED                                         syscall.Errno = 0xC03A001E
	ERROR_VIRTDISK_DISK_ONLINE_AND_WRITABLE                                   syscall.Errno = 0xC03A001F
	ERROR_CTLOG_TRACKING_NOT_INITIALIZED                                      syscall.Errno = 0xC03A0020
	ERROR_CTLOG_LOGFILE_SIZE_EXCEEDED_MAXSIZE                                 syscall.Errno = 0xC03A0021
	ERROR_CTLOG_VHD_CHANGED_OFFLINE                                           syscall.Errno = 0xC03A0022
	ERROR_CTLOG_INVALID_TRACKING_STATE                                        syscall.Errno = 0xC03A0023
	ERROR_CTLOG_INCONSISTENT_TRACKING_FILE                                    syscall.Errno = 0xC03A0024
	ERROR_VHD_RESIZE_WOULD_TRUNCATE_DATA                                      syscall.Errno = 0xC03A0025
	ERROR_VHD_COULD_NOT_COMPUTE_MINIMUM_VIRTUAL_SIZE                          syscall.Errno = 0xC03A0026
	ERROR_VHD_ALREADY_AT_OR_BELOW_MINIMUM_VIRTUAL_SIZE                        syscall.Errno = 0xC03A0027
	ERROR_VHD_METADATA_FULL                                                   syscall.Errno = 0xC03A0028
	ERROR_VHD_INVALID_CHANGE_TRACKING_ID                                      syscall.Errno = 0xC03A0029
	ERROR_VHD_CHANGE_TRACKING_DISABLED                                        syscall.Errno = 0xC03A002A
	ERROR_VHD_MISSING_CHANGE_TRACKING_INFORMATION                             syscall.Errno = 0xC03A0030
	ERROR_QUERY_STORAGE_ERROR                                                 syscall.Errno = 0x803A0001
	HCN_E_NETWORK_NOT_FOUND                                                   Handle        = 0x803B0001
	HCN_E_ENDPOINT_NOT_FOUND                                                  Handle        = 0x803B0002
	HCN_E_LAYER_NOT_FOUND                                                     Handle        = 0x803B0003
	HCN_E_SWITCH_NOT_FOUND                                                    Handle        = 0x803B0004
	HCN_E_SUBNET_NOT_FOUND                                                    Handle        = 0x803B0005
	HCN_E_ADAPTER_NOT_FOUND                                                   Handle        = 0x803B0006
	HCN_E_PORT_NOT_FOUND                                                      Handle        = 0x803B0007
	HCN_E_POLICY_NOT_FOUND                                                    Handle        = 0x803B0008
	HCN_E_VFP_PORTSETTING_NOT_FOUND                                           Handle        = 0x803B0009
	HCN_E_INVALID_NETWORK                                                     Handle        = 0x803B000A
	HCN_E_INVALID_NETWORK_TYPE                                                Handle        = 0x803B000B
	HCN_E_INVALID_ENDPOINT                                                    Handle        = 0x803B000C
	HCN_E_INVALID_POLICY                                                      Handle        = 0x803B000D
	HCN_E_INVALID_POLICY_TYPE                                                 Handle        = 0x803B000E
	HCN_E_INVALID_REMOTE_ENDPOINT_OPERATION                                   Handle        = 0x803B000F
	HCN_E_NETWORK_ALREADY_EXISTS                                              Handle        = 0x803B0010
	HCN_E_LAYER_ALREADY_EXISTS                                                Handle        = 0x803B0011
	HCN_E_POLICY_ALREADY_EXISTS                                               Handle        = 0x803B0012
	HCN_E_PORT_ALREADY_EXISTS                                                 Handle        = 0x803B0013
	HCN_E_ENDPOINT_ALREADY_ATTACHED                                           Handle        = 0x803B0014
	HCN_E_REQUEST_UNSUPPORTED                                                 Handle        = 0x803B0015
	HCN_E_MAPPING_NOT_SUPPORTED                                               Handle        = 0x803B0016
	HCN_E_DEGRADED_OPERATION                                                  Handle        = 0x803B0017
	HCN_E_SHARED_SWITCH_MODIFICATION                                          Handle        = 0x803B0018
	HCN_E_GUID_CONVERSION_FAILURE                                             Handle        = 0x803B0019
	HCN_E_REGKEY_FAILURE                                                      Handle        = 0x803B001A
	HCN_E_INVALID_JSON                                                        Handle        = 0x803B001B
	HCN_E_INVALID_JSON_REFERENCE                                              Handle        = 0x803B001C
	HCN_E_ENDPOINT_SHARING_DISABLED                                           Handle        = 0x803B001D
	HCN_E_INVALID_IP                                                          Handle        = 0x803B001E
	HCN_E_SWITCH_EXTENSION_NOT_FOUND                                          Handle        = 0x803B001F
	HCN_E_MANAGER_STOPPED                                                     Handle        = 0x803B0020
	GCN_E_MODULE_NOT_FOUND                                                    Handle        = 0x803B0021
	GCN_E_NO_REQUEST_HANDLERS                                                 Handle        = 0x803B0022
	GCN_E_REQUEST_UNSUPPORTED                                                 Handle        = 0x803B0023
	GCN_E_RUNTIMEKEYS_FAILED                                                  Handle        = 0x803B0024
	GCN_E_NETADAPTER_TIMEOUT                                                  Handle        = 0x803B0025
	GCN_E_NETADAPTER_NOT_FOUND                                                Handle        = 0x803B0026
	GCN_E_NETCOMPARTMENT_NOT_FOUND                                            Handle        = 0x803B0027
	GCN_E_NETINTERFACE_NOT_FOUND                                              Handle        = 0x803B0028
	GCN_E_DEFAULTNAMESPACE_EXISTS                                             Handle        = 0x803B0029
	HCN_E_ICS_DISABLED                                                        Handle        = 0x803B002A
	HCN_E_ENDPOINT_NAMESPACE_ALREADY_EXISTS                                   Handle        = 0x803B002B
	HCN_E_ENTITY_HAS_REFERENCES                                               Handle        = 0x803B002C
	HCN_E_INVALID_INTERNAL_PORT                                               Handle        = 0x803B002D
	HCN_E_NAMESPACE_ATTACH_FAILED                                             Handle        = 0x803B002E
	HCN_E_ADDR_INVALID_OR_RESERVED                                            Handle        = 0x803B002F
	SDIAG_E_CANCELLED                                                         syscall.Errno = 0x803C0100
	SDIAG_E_SCRIPT                                                            syscall.Errno = 0x803C0101
	SDIAG_E_POWERSHELL                                                        syscall.Errno = 0x803C0102
	SDIAG_E_MANAGEDHOST                                                       syscall.Errno = 0x803C0103
	SDIAG_E_NOVERIFIER                                                        syscall.Errno = 0x803C0104
	SDIAG_S_CANNOTRUN                                                         syscall.Errno = 0x003C0105
	SDIAG_E_DISABLED                                                          syscall.Errno = 0x803C0106
	SDIAG_E_TRUST                                                             syscall.Errno = 0x803C0107
	SDIAG_E_CANNOTRUN                                                         syscall.Errno = 0x803C0108
	SDIAG_E_VERSION                                                           syscall.Errno = 0x803C0109
	SDIAG_E_RESOURCE                                                          syscall.Errno = 0x803C010A
	SDIAG_E_ROOTCAUSE                                                         syscall.Errno = 0x803C010B
	WPN_E_CHANNEL_CLOSED                                                      Handle        = 0x803E0100
	WPN_E_CHANNEL_REQUEST_NOT_COMPLETE                                        Handle        = 0x803E0101
	WPN_E_INVALID_APP                                                         Handle        = 0x803E0102
	WPN_E_OUTSTANDING_CHANNEL_REQUEST                                         Handle        = 0x803E0103
	WPN_E_DUPLICATE_CHANNEL                                                   Handle        = 0x803E0104
	WPN_E_PLATFORM_UNAVAILABLE                                                Handle        = 0x803E0105
	WPN_E_NOTIFICATION_POSTED                                                 Handle        = 0x803E0106
	WPN_E_NOTIFICATION_HIDDEN                                                 Handle        = 0x803E0107
	WPN_E_NOTIFICATION_NOT_POSTED                                             Handle        = 0x803E0108
	WPN_E_CLOUD_DISABLED                                                      Handle        = 0x803E0109
	WPN_E_CLOUD_INCAPABLE                                                     Handle        = 0x803E0110
	WPN_E_CLOUD_AUTH_UNAVAILABLE                                              Handle        = 0x803E011A
	WPN_E_CLOUD_SERVICE_UNAVAILABLE                                           Handle        = 0x803E011B
	WPN_E_FAILED_LOCK_SCREEN_UPDATE_INTIALIZATION                             Handle        = 0x803E011C
	WPN_E_NOTIFICATION_DISABLED                                               Handle        = 0x803E0111
	WPN_E_NOTIFICATION_INCAPABLE                                              Handle        = 0x803E0112
	WPN_E_INTERNET_INCAPABLE                                                  Handle        = 0x803E0113
	WPN_E_NOTIFICATION_TYPE_DISABLED                                          Handle        = 0x803E0114
	WPN_E_NOTIFICATION_SIZE                                                   Handle        = 0x803E0115
	WPN_E_TAG_SIZE                                                            Handle        = 0x803E0116
	WPN_E_ACCESS_DENIED                                                       Handle        = 0x803E0117
	WPN_E_DUPLICATE_REGISTRATION                                              Handle        = 0x803E0118
	WPN_E_PUSH_NOTIFICATION_INCAPABLE                                         Handle        = 0x803E0119
	WPN_E_DEV_ID_SIZE                                                         Handle        = 0x803E0120
	WPN_E_TAG_ALPHANUMERIC                                                    Handle        = 0x803E012A
	WPN_E_INVALID_HTTP_STATUS_CODE                                            Handle        = 0x803E012B
	WPN_E_OUT_OF_SESSION                                                      Handle        = 0x803E0200
	WPN_E_POWER_SAVE                                                          Handle        = 0x803E0201
	WPN_E_IMAGE_NOT_FOUND_IN_CACHE                                            Handle        = 0x803E0202
	WPN_E_ALL_URL_NOT_COMPLETED                                               Handle        = 0x803E0203
	WPN_E_INVALID_CLOUD_IMAGE                                                 Handle        = 0x803E0204
	WPN_E_NOTIFICATION_ID_MATCHED                                             Handle        = 0x803E0205
	WPN_E_CALLBACK_ALREADY_REGISTERED                                         Handle        = 0x803E0206
	WPN_E_TOAST_NOTIFICATION_DROPPED                                          Handle        = 0x803E0207
	WPN_E_STORAGE_LOCKED                                                      Handle        = 0x803E0208
	WPN_E_GROUP_SIZE                                                          Handle        = 0x803E0209
	WPN_E_GROUP_ALPHANUMERIC                                                  Handle        = 0x803E020A
	WPN_E_CLOUD_DISABLED_FOR_APP                                              Handle        = 0x803E020B
	E_MBN_CONTEXT_NOT_ACTIVATED                                               Handle        = 0x80548201
	E_MBN_BAD_SIM                                                             Handle        = 0x80548202
	E_MBN_DATA_CLASS_NOT_AVAILABLE                                            Handle        = 0x80548203
	E_MBN_INVALID_ACCESS_STRING                                               Handle        = 0x80548204
	E_MBN_MAX_ACTIVATED_CONTEXTS                                              Handle        = 0x80548205
	E_MBN_PACKET_SVC_DETACHED                                                 Handle        = 0x80548206
	E_MBN_PROVIDER_NOT_VISIBLE                                                Handle        = 0x80548207
	E_MBN_RADIO_POWER_OFF                                                     Handle        = 0x80548208
	E_MBN_SERVICE_NOT_ACTIVATED                                               Handle        = 0x80548209
	E_MBN_SIM_NOT_INSERTED                                                    Handle        = 0x8054820A
	E_MBN_VOICE_CALL_IN_PROGRESS                                              Handle        = 0x8054820B
	E_MBN_INVALID_CACHE                                                       Handle        = 0x8054820C
	E_MBN_NOT_REGISTERED                                                      Handle        = 0x8054820D
	E_MBN_PROVIDERS_NOT_FOUND                                                 Handle        = 0x8054820E
	E_MBN_PIN_NOT_SUPPORTED                                                   Handle        = 0x8054820F
	E_MBN_PIN_REQUIRED                                                        Handle        = 0x80548210
	E_MBN_PIN_DISABLED                                                        Handle        = 0x80548211
	E_MBN_FAILURE                                                             Handle        = 0x80548212
	E_MBN_INVALID_PROFILE                                                     Handle        = 0x80548218
	E_MBN_DEFAULT_PROFILE_EXIST                                               Handle        = 0x80548219
	E_MBN_SMS_ENCODING_NOT_SUPPORTED                                          Handle        = 0x80548220
	E_MBN_SMS_FILTER_NOT_SUPPORTED                                            Handle        = 0x80548221
	E_MBN_SMS_INVALID_MEMORY_INDEX                                            Handle        = 0x80548222
	E_MBN_SMS_LANG_NOT_SUPPORTED                                              Handle        = 0x80548223
	E_MBN_SMS_MEMORY_FAILURE                                                  Handle        = 0x80548224
	E_MBN_SMS_NETWORK_TIMEOUT                                                 Handle        = 0x80548225
	E_MBN_SMS_UNKNOWN_SMSC_ADDRESS                                            Handle        = 0x80548226
	E_MBN_SMS_FORMAT_NOT_SUPPORTED                                            Handle        = 0x80548227
	E_MBN_SMS_OPERATION_NOT_ALLOWED                                           Handle        = 0x80548228
	E_MBN_SMS_MEMORY_FULL                                                     Handle        = 0x80548229
	PEER_E_IPV6_NOT_INSTALLED                                                 Handle        = 0x80630001
	PEER_E_NOT_INITIALIZED                                                    Handle        = 0x80630002
	PEER_E_CANNOT_START_SERVICE                                               Handle        = 0x80630003
	PEER_E_NOT_LICENSED                                                       Handle        = 0x80630004
	PEER_E_INVALID_GRAPH                                                      Handle        = 0x80630010
	PEER_E_DBNAME_CHANGED                                                     Handle        = 0x80630011
	PEER_E_DUPLICATE_GRAPH                                                    Handle        = 0x80630012
	PEER_E_GRAPH_NOT_READY                                                    Handle        = 0x80630013
	PEER_E_GRAPH_SHUTTING_DOWN                                                Handle        = 0x80630014
	PEER_E_GRAPH_IN_USE                                                       Handle        = 0x80630015
	PEER_E_INVALID_DATABASE                                                   Handle        = 0x80630016
	PEER_E_TOO_MANY_ATTRIBUTES                                                Handle        = 0x80630017
	PEER_E_CONNECTION_NOT_FOUND                                               Handle        = 0x80630103
	PEER_E_CONNECT_SELF                                                       Handle        = 0x80630106
	PEER_E_ALREADY_LISTENING                                                  Handle        = 0x80630107
	PEER_E_NODE_NOT_FOUND                                                     Handle        = 0x80630108
	PEER_E_CONNECTION_FAILED                                                  Handle        = 0x80630109
	PEER_E_CONNECTION_NOT_AUTHENTICATED                                       Handle        = 0x8063010A
	PEER_E_CONNECTION_REFUSED                                                 Handle        = 0x8063010B
	PEER_E_CLASSIFIER_TOO_LONG                                                Handle        = 0x80630201
	PEER_E_TOO_MANY_IDENTITIES                                                Handle        = 0x80630202
	PEER_E_NO_KEY_ACCESS                                                      Handle        = 0x80630203
	PEER_E_GROUPS_EXIST                                                       Handle        = 0x80630204
	PEER_E_RECORD_NOT_FOUND                                                   Handle        = 0x80630301
	PEER_E_DATABASE_ACCESSDENIED                                              Handle        = 0x80630302
	PEER_E_DBINITIALIZATION_FAILED                                            Handle        = 0x80630303
	PEER_E_MAX_RECORD_SIZE_EXCEEDED                                           Handle        = 0x80630304
	PEER_E_DATABASE_ALREADY_PRESENT                                           Handle        = 0x80630305
	PEER_E_DATABASE_NOT_PRESENT                                               Handle        = 0x80630306
	PEER_E_IDENTITY_NOT_FOUND                                                 Handle        = 0x80630401
	PEER_E_EVENT_HANDLE_NOT_FOUND                                             Handle        = 0x80630501
	PEER_E_INVALID_SEARCH                                                     Handle        = 0x80630601
	PEER_E_INVALID_ATTRIBUTES                                                 Handle        = 0x80630602
	PEER_E_INVITATION_NOT_TRUSTED                                             Handle        = 0x80630701
	PEER_E_CHAIN_TOO_LONG                                                     Handle        = 0x80630703
	PEER_E_INVALID_TIME_PERIOD                                                Handle        = 0x80630705
	PEER_E_CIRCULAR_CHAIN_DETECTED                                            Handle        = 0x80630706
	PEER_E_CERT_STORE_CORRUPTED                                               Handle        = 0x80630801
	PEER_E_NO_CLOUD                                                           Handle        = 0x80631001
	PEER_E_CLOUD_NAME_AMBIGUOUS                                               Handle        = 0x80631005
	PEER_E_INVALID_RECORD                                                     Handle        = 0x80632010
	PEER_E_NOT_AUTHORIZED                                                     Handle        = 0x80632020
	PEER_E_PASSWORD_DOES_NOT_MEET_POLICY                                      Handle        = 0x80632021
	PEER_E_DEFERRED_VALIDATION                                                Handle        = 0x80632030
	PEER_E_INVALID_GROUP_PROPERTIES                                           Handle        = 0x80632040
	PEER_E_INVALID_PEER_NAME                                                  Handle        = 0x80632050
	PEER_E_INVALID_CLASSIFIER                                                 Handle        = 0x80632060
	PEER_E_INVALID_FRIENDLY_NAME                                              Handle        = 0x80632070
	PEER_E_INVALID_ROLE_PROPERTY                                              Handle        = 0x80632071
	PEER_E_INVALID_CLASSIFIER_PROPERTY                                        Handle        = 0x80632072
	PEER_E_INVALID_RECORD_EXPIRATION                                          Handle        = 0x80632080
	PEER_E_INVALID_CREDENTIAL_INFO                                            Handle        = 0x80632081
	PEER_E_INVALID_CREDENTIAL                                                 Handle        = 0x80632082
	PEER_E_INVALID_RECORD_SIZE                                                Handle        = 0x80632083
	PEER_E_UNSUPPORTED_VERSION                                                Handle        = 0x80632090
	PEER_E_GROUP_NOT_READY                                                    Handle        = 0x80632091
	PEER_E_GROUP_IN_USE                                                       Handle        = 0x80632092
	PEER_E_INVALID_GROUP                                                      Handle        = 0x80632093
	PEER_E_NO_MEMBERS_FOUND                                                   Handle        = 0x80632094
	PEER_E_NO_MEMBER_CONNECTIONS                                              Handle        = 0x80632095
	PEER_E_UNABLE_TO_LISTEN                                                   Handle        = 0x80632096
	PEER_E_IDENTITY_DELETED                                                   Handle        = 0x806320A0
	PEER_E_SERVICE_NOT_AVAILABLE                                              Handle        = 0x806320A1
	PEER_E_CONTACT_NOT_FOUND                                                  Handle        = 0x80636001
	PEER_S_GRAPH_DATA_CREATED                                                 Handle        = 0x00630001
	PEER_S_NO_EVENT_DATA                                                      Handle        = 0x00630002
	PEER_S_ALREADY_CONNECTED                                                  Handle        = 0x00632000
	PEER_S_SUBSCRIPTION_EXISTS                                                Handle        = 0x00636000
	PEER_S_NO_CONNECTIVITY                                                    Handle        = 0x00630005
	PEER_S_ALREADY_A_MEMBER                                                   Handle        = 0x00630006
	PEER_E_CANNOT_CONVERT_PEER_NAME                                           Handle        = 0x80634001
	PEER_E_INVALID_PEER_HOST_NAME                                             Handle        = 0x80634002
	PEER_E_NO_MORE                                                            Handle        = 0x80634003
	PEER_E_PNRP_DUPLICATE_PEER_NAME                                           Handle        = 0x80634005
	PEER_E_INVITE_CANCELLED                                                   Handle        = 0x80637000
	PEER_E_INVITE_RESPONSE_NOT_AVAILABLE                                      Handle        = 0x80637001
	PEER_E_NOT_SIGNED_IN                                                      Handle        = 0x80637003
	PEER_E_PRIVACY_DECLINED                                                   Handle        = 0x80637004
	PEER_E_TIMEOUT                                                            Handle        = 0x80637005
	PEER_E_INVALID_ADDRESS                                                    Handle        = 0x80637007
	PEER_E_FW_EXCEPTION_DISABLED                                              Handle        = 0x80637008
	PEER_E_FW_BLOCKED_BY_POLICY                                               Handle        = 0x80637009
	PEER_E_FW_BLOCKED_BY_SHIELDS_UP                                           Handle        = 0x8063700A
	PEER_E_FW_DECLINED                                                        Handle        = 0x8063700B
	UI_E_CREATE_FAILED                                                        Handle        = 0x802A0001
	UI_E_SHUTDOWN_CALLED                                                      Handle        = 0x802A0002
	UI_E_ILLEGAL_REENTRANCY                                                   Handle        = 0x802A0003
	UI_E_OBJECT_SEALED                                                        Handle        = 0x802A0004
	UI_E_VALUE_NOT_SET                                                        Handle        = 0x802A0005
	UI_E_VALUE_NOT_DETERMINED                                                 Handle        = 0x802A0006
	UI_E_INVALID_OUTPUT                                                       Handle        = 0x802A0007
	UI_E_BOOLEAN_EXPECTED                                                     Handle        = 0x802A0008
	UI_E_DIFFERENT_OWNER                                                      Handle        = 0x802A0009
	UI_E_AMBIGUOUS_MATCH                                                      Handle        = 0x802A000A
	UI_E_FP_OVERFLOW                                                          Handle        = 0x802A000B
	UI_E_WRONG_THREAD                                                         Handle        = 0x802A000C
	UI_E_STORYBOARD_ACTIVE                                                    Handle        = 0x802A0101
	UI_E_STORYBOARD_NOT_PLAYING                                               Handle        = 0x802A0102
	UI_E_START_KEYFRAME_AFTER_END                                             Handle        = 0x802A0103
	UI_E_END_KEYFRAME_NOT_DETERMINED                                          Handle        = 0x802A0104
	UI_E_LOOPS_OVERLAP                                                        Handle        = 0x802A0105
	UI_E_TRANSITION_ALREADY_USED                                              Handle        = 0x802A0106
	UI_E_TRANSITION_NOT_IN_STORYBOARD                                         Handle        = 0x802A0107
	UI_E_TRANSITION_ECLIPSED                                                  Handle        = 0x802A0108
	UI_E_TIME_BEFORE_LAST_UPDATE                                              Handle        = 0x802A0109
	UI_E_TIMER_CLIENT_ALREADY_CONNECTED                                       Handle        = 0x802A010A
	UI_E_INVALID_DIMENSION                                                    Handle        = 0x802A010B
	UI_E_PRIMITIVE_OUT_OF_BOUNDS                                              Handle        = 0x802A010C
	UI_E_WINDOW_CLOSED                                                        Handle        = 0x802A0201
	E_BLUETOOTH_ATT_INVALID_HANDLE                                            Handle        = 0x80650001
	E_BLUETOOTH_ATT_READ_NOT_PERMITTED                                        Handle        = 0x80650002
	E_BLUETOOTH_ATT_WRITE_NOT_PERMITTED                                       Handle        = 0x80650003
	E_BLUETOOTH_ATT_INVALID_PDU                                               Handle        = 0x80650004
	E_BLUETOOTH_ATT_INSUFFICIENT_AUTHENTICATION                               Handle        = 0x80650005
	E_BLUETOOTH_ATT_REQUEST_NOT_SUPPORTED                                     Handle        = 0x80650006
	E_BLUETOOTH_ATT_INVALID_OFFSET                                            Handle        = 0x80650007
	E_BLUETOOTH_ATT_INSUFFICIENT_AUTHORIZATION                                Handle        = 0x80650008
	E_BLUETOOTH_ATT_PREPARE_QUEUE_FULL                                        Handle        = 0x80650009
	E_BLUETOOTH_ATT_ATTRIBUTE_NOT_FOUND                                       Handle        = 0x8065000A
	E_BLUETOOTH_ATT_ATTRIBUTE_NOT_LONG                                        Handle        = 0x8065000B
	E_BLUETOOTH_ATT_INSUFFICIENT_ENCRYPTION_KEY_SIZE                          Handle        = 0x8065000C
	E_BLUETOOTH_ATT_INVALID_ATTRIBUTE_VALUE_LENGTH                            Handle        = 0x8065000D
	E_BLUETOOTH_ATT_UNLIKELY                                                  Handle        = 0x8065000E
	E_BLUETOOTH_ATT_INSUFFICIENT_ENCRYPTION                                   Handle        = 0x8065000F
	E_BLUETOOTH_ATT_UNSUPPORTED_GROUP_TYPE                                    Handle        = 0x80650010
	E_BLUETOOTH_ATT_INSUFFICIENT_RESOURCES                                    Handle        = 0x80650011
	E_BLUETOOTH_ATT_UNKNOWN_ERROR                                             Handle        = 0x80651000
	E_AUDIO_ENGINE_NODE_NOT_FOUND                                             Handle        = 0x80660001
	E_HDAUDIO_EMPTY_CONNECTION_LIST                                           Handle        = 0x80660002
	E_HDAUDIO_CONNECTION_LIST_NOT_SUPPORTED                                   Handle        = 0x80660003
	E_HDAUDIO_NO_LOGICAL_DEVICES_CREATED                                      Handle        = 0x80660004
	E_HDAUDIO_NULL_LINKED_LIST_ENTRY                                          Handle        = 0x80660005
	STATEREPOSITORY_E_CONCURRENCY_LOCKING_FAILURE                             Handle        = 0x80670001
	STATEREPOSITORY_E_STATEMENT_INPROGRESS                                    Handle        = 0x80670002
	STATEREPOSITORY_E_CONFIGURATION_INVALID                                   Handle        = 0x80670003
	STATEREPOSITORY_E_UNKNOWN_SCHEMA_VERSION                                  Handle        = 0x80670004
	STATEREPOSITORY_ERROR_DICTIONARY_CORRUPTED                                Handle        = 0x80670005
	STATEREPOSITORY_E_BLOCKED                                                 Handle        = 0x80670006
	STATEREPOSITORY_E_BUSY_RETRY                                              Handle        = 0x80670007
	STATEREPOSITORY_E_BUSY_RECOVERY_RETRY                                     Handle        = 0x80670008
	STATEREPOSITORY_E_LOCKED_RETRY                                            Handle        = 0x80670009
	STATEREPOSITORY_E_LOCKED_SHAREDCACHE_RETRY                                Handle        = 0x8067000A
	STATEREPOSITORY_E_TRANSACTION_REQUIRED                                    Handle        = 0x8067000B
	STATEREPOSITORY_E_BUSY_TIMEOUT_EXCEEDED                                   Handle        = 0x8067000C
	STATEREPOSITORY_E_BUSY_RECOVERY_TIMEOUT_EXCEEDED                          Handle        = 0x8067000D
	STATEREPOSITORY_E_LOCKED_TIMEOUT_EXCEEDED                                 Handle        = 0x8067000E
	STATEREPOSITORY_E_LOCKED_SHAREDCACHE_TIMEOUT_EXCEEDED                     Handle        = 0x8067000F
	STATEREPOSITORY_E_SERVICE_STOP_IN_PROGRESS                                Handle        = 0x80670010
	STATEREPOSTORY_E_NESTED_TRANSACTION_NOT_SUPPORTED                         Handle        = 0x80670011
	STATEREPOSITORY_ERROR_CACHE_CORRUPTED                                     Handle        = 0x80670012
	STATEREPOSITORY_TRANSACTION_CALLER_ID_CHANGED                             Handle        = 0x00670013
	STATEREPOSITORY_TRANSACTION_IN_PROGRESS                                   Handle        = 0x00670014
	ERROR_SPACES_POOL_WAS_DELETED                                             Handle        = 0x00E70001
	ERROR_SPACES_FAULT_DOMAIN_TYPE_INVALID                                    Handle        = 0x80E70001
	ERROR_SPACES_INTERNAL_ERROR                                               Handle        = 0x80E70002
	ERROR_SPACES_RESILIENCY_TYPE_INVALID                                      Handle        = 0x80E70003
	ERROR_SPACES_DRIVE_SECTOR_SIZE_INVALID                                    Handle        = 0x80E70004
	ERROR_SPACES_DRIVE_REDUNDANCY_INVALID                                     Handle        = 0x80E70006
	ERROR_SPACES_NUMBER_OF_DATA_COPIES_INVALID                                Handle        = 0x80E70007
	ERROR_SPACES_PARITY_LAYOUT_INVALID                                        Handle        = 0x80E70008
	ERROR_SPACES_INTERLEAVE_LENGTH_INVALID                                    Handle        = 0x80E70009
	ERROR_SPACES_NUMBER_OF_COLUMNS_INVALID                                    Handle        = 0x80E7000A
	ERROR_SPACES_NOT_ENOUGH_DRIVES                                            Handle        = 0x80E7000B
	ERROR_SPACES_EXTENDED_ERROR                                               Handle        = 0x80E7000C
	ERROR_SPACES_PROVISIONING_TYPE_INVALID                                    Handle        = 0x80E7000D
	ERROR_SPACES_ALLOCATION_SIZE_INVALID                                      Handle        = 0x80E7000E
	ERROR_SPACES_ENCLOSURE_AWARE_INVALID                                      Handle        = 0x80E7000F
	ERROR_SPACES_WRITE_CACHE_SIZE_INVALID                                     Handle        = 0x80E70010
	ERROR_SPACES_NUMBER_OF_GROUPS_INVALID                                     Handle        = 0x80E70011
	ERROR_SPACES_DRIVE_OPERATIONAL_STATE_INVALID                              Handle        = 0x80E70012
	ERROR_SPACES_ENTRY_INCOMPLETE                                             Handle        = 0x80E70013
	ERROR_SPACES_ENTRY_INVALID                                                Handle        = 0x80E70014
	ERROR_VOLSNAP_BOOTFILE_NOT_VALID                                          Handle        = 0x80820001
	ERROR_VOLSNAP_ACTIVATION_TIMEOUT                                          Handle        = 0x80820002
	ERROR_TIERING_NOT_SUPPORTED_ON_VOLUME                                     Handle        = 0x80830001
	ERROR_TIERING_VOLUME_DISMOUNT_IN_PROGRESS                                 Handle        = 0x80830002
	ERROR_TIERING_STORAGE_TIER_NOT_FOUND                                      Handle        = 0x80830003
	ERROR_TIERING_INVALID_FILE_ID                                             Handle        = 0x80830004
	ERROR_TIERING_WRONG_CLUSTER_NODE                                          Handle        = 0x80830005
	ERROR_TIERING_ALREADY_PROCESSING                                          Handle        = 0x80830006
	ERROR_TIERING_CANNOT_PIN_OBJECT                                           Handle        = 0x80830007
	ERROR_TIERING_FILE_IS_NOT_PINNED                                          Handle        = 0x80830008
	ERROR_NOT_A_TIERED_VOLUME                                                 Handle        = 0x80830009
	ERROR_ATTRIBUTE_NOT_PRESENT                                               Handle        = 0x8083000A
	ERROR_SECCORE_INVALID_COMMAND                                             Handle        = 0xC0E80000
	ERROR_NO_APPLICABLE_APP_LICENSES_FOUND                                    Handle        = 0xC0EA0001
	ERROR_CLIP_LICENSE_NOT_FOUND                                              Handle        = 0xC0EA0002
	ERROR_CLIP_DEVICE_LICENSE_MISSING                                         Handle        = 0xC0EA0003
	ERROR_CLIP_LICENSE_INVALID_SIGNATURE                                      Handle        = 0xC0EA0004
	ERROR_CLIP_KEYHOLDER_LICENSE_MISSING_OR_INVALID                           Handle        = 0xC0EA0005
	ERROR_CLIP_LICENSE_EXPIRED                                                Handle        = 0xC0EA0006
	ERROR_CLIP_LICENSE_SIGNED_BY_UNKNOWN_SOURCE                               Handle        = 0xC0EA0007
	ERROR_CLIP_LICENSE_NOT_SIGNED                                             Handle        = 0xC0EA0008
	ERROR_CLIP_LICENSE_HARDWARE_ID_OUT_OF_TOLERANCE                           Handle        = 0xC0EA0009
	ERROR_CLIP_LICENSE_DEVICE_ID_MISMATCH                                     Handle        = 0xC0EA000A
	DXGI_STATUS_OCCLUDED                                                      Handle        = 0x087A0001
	DXGI_STATUS_CLIPPED                                                       Handle        = 0x087A0002
	DXGI_STATUS_NO_REDIRECTION                                                Handle        = 0x087A0004
	DXGI_STATUS_NO_DESKTOP_ACCESS                                             Handle        = 0x087A0005
	DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE                                  Handle        = 0x087A0006
	DXGI_STATUS_MODE_CHANGED                                                  Handle        = 0x087A0007
	DXGI_STATUS_MODE_CHANGE_IN_PROGRESS                                       Handle        = 0x087A0008
	DXGI_ERROR_INVALID_CALL                                                   Handle        = 0x887A0001
	DXGI_ERROR_NOT_FOUND                                                      Handle        = 0x887A0002
	DXGI_ERROR_MORE_DATA                                                      Handle        = 0x887A0003
	DXGI_ERROR_UNSUPPORTED                                                    Handle        = 0x887A0004
	DXGI_ERROR_DEVICE_REMOVED                                                 Handle        = 0x887A0005
	DXGI_ERROR_DEVICE_HUNG                                                    Handle        = 0x887A0006
	DXGI_ERROR_DEVICE_RESET                                                   Handle        = 0x887A0007
	DXGI_ERROR_WAS_STILL_DRAWING                                              Handle        = 0x887A000A
	DXGI_ERROR_FRAME_STATISTICS_DISJOINT                                      Handle        = 0x887A000B
	DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE                                   Handle        = 0x887A000C
	DXGI_ERROR_DRIVER_INTERNAL_ERROR                                          Handle        = 0x887A0020
	DXGI_ERROR_NONEXCLUSIVE                                                   Handle        = 0x887A0021
	DXGI_ERROR_NOT_CURRENTLY_AVAILABLE                                        Handle        = 0x887A0022
	DXGI_ERROR_REMOTE_CLIENT_DISCONNECTED                                     Handle        = 0x887A0023
	DXGI_ERROR_REMOTE_OUTOFMEMORY                                             Handle        = 0x887A0024
	DXGI_ERROR_ACCESS_LOST                                                    Handle        = 0x887A0026
	DXGI_ERROR_WAIT_TIMEOUT                                                   Handle        = 0x887A0027
	DXGI_ERROR_SESSION_DISCONNECTED                                           Handle        = 0x887A0028
	DXGI_ERROR_RESTRICT_TO_OUTPUT_STALE                                       Handle        = 0x887A0029
	DXGI_ERROR_CANNOT_PROTECT_CONTENT                                         Handle        = 0x887A002A
	DXGI_ERROR_ACCESS_DENIED                                                  Handle        = 0x887A002B
	DXGI_ERROR_NAME_ALREADY_EXISTS                                            Handle        = 0x887A002C
	DXGI_ERROR_SDK_COMPONENT_MISSING                                          Handle        = 0x887A002D
	DXGI_ERROR_NOT_CURRENT                                                    Handle        = 0x887A002E
	DXGI_ERROR_HW_PROTECTION_OUTOFMEMORY                                      Handle        = 0x887A0030
	DXGI_ERROR_DYNAMIC_CODE_POLICY_VIOLATION                                  Handle        = 0x887A0031
	DXGI_ERROR_NON_COMPOSITED_UI                                              Handle        = 0x887A0032
	DXGI_STATUS_UNOCCLUDED                                                    Handle        = 0x087A0009
	DXGI_STATUS_DDA_WAS_STILL_DRAWING                                         Handle        = 0x087A000A
	DXGI_ERROR_MODE_CHANGE_IN_PROGRESS                                        Handle        = 0x887A0025
	DXGI_STATUS_PRESENT_REQUIRED                                              Handle        = 0x087A002F
	DXGI_ERROR_CACHE_CORRUPT                                                  Handle        = 0x887A0033
	DXGI_ERROR_CACHE_FULL                                                     Handle        = 0x887A0034
	DXGI_ERROR_CACHE_HASH_COLLISION                                           Handle        = 0x887A0035
	DXGI_ERROR_ALREADY_EXISTS                                                 Handle        = 0x887A0036
	DXGI_DDI_ERR_WASSTILLDRAWING                                              Handle        = 0x887B0001
	DXGI_DDI_ERR_UNSUPPORTED                                                  Handle        = 0x887B0002
	DXGI_DDI_ERR_NONEXCLUSIVE                                                 Handle        = 0x887B0003
	D3D10_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS                                 Handle        = 0x88790001
	D3D10_ERROR_FILE_NOT_FOUND                                                Handle        = 0x88790002
	D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS                                 Handle        = 0x887C0001
	D3D11_ERROR_FILE_NOT_FOUND                                                Handle        = 0x887C0002
	D3D11_ERROR_TOO_MANY_UNIQUE_VIEW_OBJECTS                                  Handle        = 0x887C0003
	D3D11_ERROR_DEFERRED_CONTEXT_MAP_WITHOUT_INITIAL_DISCARD                  Handle        = 0x887C0004
	D3D12_ERROR_ADAPTER_NOT_FOUND                                             Handle        = 0x887E0001
	D3D12_ERROR_DRIVER_VERSION_MISMATCH                                       Handle        = 0x887E0002
	D2DERR_WRONG_STATE                                                        Handle        = 0x88990001
	D2DERR_NOT_INITIALIZED                                                    Handle        = 0x88990002
	D2DERR_UNSUPPORTED_OPERATION                                              Handle        = 0x88990003
	D2DERR_SCANNER_FAILED                                                     Handle        = 0x88990004
	D2DERR_SCREEN_ACCESS_DENIED                                               Handle        = 0x88990005
	D2DERR_DISPLAY_STATE_INVALID                                              Handle        = 0x88990006
	D2DERR_ZERO_VECTOR                                                        Handle        = 0x88990007
	D2DERR_INTERNAL_ERROR                                                     Handle        = 0x88990008
	D2DERR_DISPLAY_FORMAT_NOT_SUPPORTED                                       Handle        = 0x88990009
	D2DERR_INVALID_CALL                                                       Handle        = 0x8899000A
	D2DERR_NO_HARDWARE_DEVICE                                                 Handle        = 0x8899000B
	D2DERR_RECREATE_TARGET                                                    Handle        = 0x8899000C
	D2DERR_TOO_MANY_SHADER_ELEMENTS                                           Handle        = 0x8899000D
	D2DERR_SHADER_COMPILE_FAILED                                              Handle        = 0x8899000E
	D2DERR_MAX_TEXTURE_SIZE_EXCEEDED                                          Handle        = 0x8899000F
	D2DERR_UNSUPPORTED_VERSION                                                Handle        = 0x88990010
	D2DERR_BAD_NUMBER                                                         Handle        = 0x88990011
	D2DERR_WRONG_FACTORY                                                      Handle        = 0x88990012
	D2DERR_LAYER_ALREADY_IN_USE                                               Handle        = 0x88990013
	D2DERR_POP_CALL_DID_NOT_MATCH_PUSH                                        Handle        = 0x88990014
	D2DERR_WRONG_RESOURCE_DOMAIN                                              Handle        = 0x88990015
	D2DERR_PUSH_POP_UNBALANCED                                                Handle        = 0x88990016
	D2DERR_RENDER_TARGET_HAS_LAYER_OR_CLIPRECT                                Handle        = 0x88990017
	D2DERR_INCOMPATIBLE_BRUSH_TYPES                                           Handle        = 0x88990018
	D2DERR_WIN32_ERROR                                                        Handle        = 0x88990019
	D2DERR_TARGET_NOT_GDI_COMPATIBLE                                          Handle        = 0x8899001A
	D2DERR_TEXT_EFFECT_IS_WRONG_TYPE                                          Handle        = 0x8899001B
	D2DERR_TEXT_RENDERER_NOT_RELEASED                                         Handle        = 0x8899001C
	D2DERR_EXCEEDS_MAX_BITMAP_SIZE                                            Handle        = 0x8899001D
	D2DERR_INVALID_GRAPH_CONFIGURATION                                        Handle        = 0x8899001E
	D2DERR_INVALID_INTERNAL_GRAPH_CONFIGURATION                               Handle        = 0x8899001F
	D2DERR_CYCLIC_GRAPH                                                       Handle        = 0x88990020
	D2DERR_BITMAP_CANNOT_DRAW                                                 Handle        = 0x88990021
	D2DERR_OUTSTANDING_BITMAP_REFERENCES                                      Handle        = 0x88990022
	D2DERR_ORIGINAL_TARGET_NOT_BOUND                                          Handle        = 0x88990023
	D2DERR_INVALID_TARGET                                                     Handle        = 0x88990024
	D2DERR_BITMAP_BOUND_AS_TARGET                                             Handle        = 0x88990025
	D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES                                   Handle        = 0x88990026
	D2DERR_INTERMEDIATE_TOO_LARGE                                             Handle        = 0x88990027
	D2DERR_EFFECT_IS_NOT_REGISTERED                                           Handle        = 0x88990028
	D2DERR_INVALID_PROPERTY                                                   Handle        = 0x88990029
	D2DERR_NO_SUBPROPERTIES                                                   Handle        = 0x8899002A
	D2DERR_PRINT_JOB_CLOSED                                                   Handle        = 0x8899002B
	D2DERR_PRINT_FORMAT_NOT_SUPPORTED                                         Handle        = 0x8899002C
	D2DERR_TOO_MANY_TRANSFORM_INPUTS                                          Handle        = 0x8899002D
	D2DERR_INVALID_GLYPH_IMAGE                                                Handle        = 0x8899002E
	DWRITE_E_FILEFORMAT                                                       Handle        = 0x88985000
	DWRITE_E_UNEXPECTED                                                       Handle        = 0x88985001
	DWRITE_E_NOFONT                                                           Handle        = 0x88985002
	DWRITE_E_FILENOTFOUND                                                     Handle        = 0x88985003
	DWRITE_E_FILEACCESS                                                       Handle        = 0x88985004
	DWRITE_E_FONTCOLLECTIONOBSOLETE                                           Handle        = 0x88985005
	DWRITE_E_ALREADYREGISTERED                                                Handle        = 0x88985006
	DWRITE_E_CACHEFORMAT                                                      Handle        = 0x88985007
	DWRITE_E_CACHEVERSION                                                     Handle        = 0x88985008
	DWRITE_E_UNSUPPORTEDOPERATION                                             Handle        = 0x88985009
	DWRITE_E_TEXTRENDERERINCOMPATIBLE                                         Handle        = 0x8898500A
	DWRITE_E_FLOWDIRECTIONCONFLICTS                                           Handle        = 0x8898500B
	DWRITE_E_NOCOLOR                                                          Handle        = 0x8898500C
	DWRITE_E_REMOTEFONT                                                       Handle        = 0x8898500D
	DWRITE_E_DOWNLOADCANCELLED                                                Handle        = 0x8898500E
	DWRITE_E_DOWNLOADFAILED                                                   Handle        = 0x8898500F
	DWRITE_E_TOOMANYDOWNLOADS                                                 Handle        = 0x88985010
	WINCODEC_ERR_WRONGSTATE                                                   Handle        = 0x88982F04
	WINCODEC_ERR_VALUEOUTOFRANGE                                              Handle        = 0x88982F05
	WINCODEC_ERR_UNKNOWNIMAGEFORMAT                                           Handle        = 0x88982F07
	WINCODEC_ERR_UNSUPPORTEDVERSION                                           Handle        = 0x88982F0B
	WINCODEC_ERR_NOTINITIALIZED                                               Handle        = 0x88982F0C
	WINCODEC_ERR_ALREADYLOCKED                                                Handle        = 0x88982F0D
	WINCODEC_ERR_PROPERTYNOTFOUND                                             Handle        = 0x88982F40
	WINCODEC_ERR_PROPERTYNOTSUPPORTED                                         Handle        = 0x88982F41
	WINCODEC_ERR_PROPERTYSIZE                                                 Handle        = 0x88982F42
	WINCODEC_ERR_CODECPRESENT                                                 Handle        = 0x88982F43
	WINCODEC_ERR_CODECNOTHUMBNAIL                                             Handle        = 0x88982F44
	WINCODEC_ERR_PALETTEUNAVAILABLE                                           Handle        = 0x88982F45
	WINCODEC_ERR_CODECTOOMANYSCANLINES                                        Handle        = 0x88982F46
	WINCODEC_ERR_INTERNALERROR                                                Handle        = 0x88982F48
	WINCODEC_ERR_SOURCERECTDOESNOTMATCHDIMENSIONS                             Handle        = 0x88982F49
	WINCODEC_ERR_COMPONENTNOTFOUND                                            Handle        = 0x88982F50
	WINCODEC_ERR_IMAGESIZEOUTOFRANGE                                          Handle        = 0x88982F51
	WINCODEC_ERR_TOOMUCHMETADATA                                              Handle        = 0x88982F52
	WINCODEC_ERR_BADIMAGE                                                     Handle        = 0x88982F60
	WINCODEC_ERR_BADHEADER                                                    Handle        = 0x88982F61
	WINCODEC_ERR_FRAMEMISSING                                                 Handle        = 0x88982F62
	WINCODEC_ERR_BADMETADATAHEADER                                            Handle        = 0x88982F63
	WINCODEC_ERR_BADSTREAMDATA                                                Handle        = 0x88982F70
	WINCODEC_ERR_STREAMWRITE                                                  Handle        = 0x88982F71
	WINCODEC_ERR_STREAMREAD                                                   Handle        = 0x88982F72
	WINCODEC_ERR_STREAMNOTAVAILABLE                                           Handle        = 0x88982F73
	WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT                                       Handle        = 0x88982F80
	WINCODEC_ERR_UNSUPPORTEDOPERATION                                         Handle        = 0x88982F81
	WINCODEC_ERR_INVALIDREGISTRATION                                          Handle        = 0x88982F8A
	WINCODEC_ERR_COMPONENTINITIALIZEFAILURE                                   Handle        = 0x88982F8B
	WINCODEC_ERR_INSUFFICIENTBUFFER                                           Handle        = 0x88982F8C
	WINCODEC_ERR_DUPLICATEMETADATAPRESENT                                     Handle        = 0x88982F8D
	WINCODEC_ERR_PROPERTYUNEXPECTEDTYPE                                       Handle        = 0x88982F8E
	WINCODEC_ERR_UNEXPECTEDSIZE                                               Handle        = 0x88982F8F
	WINCODEC_ERR_INVALIDQUERYREQUEST                                          Handle        = 0x88982F90
	WINCODEC_ERR_UNEXPECTEDMETADATATYPE                                       Handle        = 0x88982F91
	WINCODEC_ERR_REQUESTONLYVALIDATMETADATAROOT                               Handle        = 0x88982F92
	WINCODEC_ERR_INVALIDQUERYCHARACTER                                        Handle        = 0x88982F93
	WINCODEC_ERR_WIN32ERROR                                                   Handle        = 0x88982F94
	WINCODEC_ERR_INVALIDPROGRESSIVELEVEL                                      Handle        = 0x88982F95
	WINCODEC_ERR_INVALIDJPEGSCANINDEX                                         Handle        = 0x88982F96
	MILERR_OBJECTBUSY                                                         Handle        = 0x88980001
	MILERR_INSUFFICIENTBUFFER                                                 Handle        = 0x88980002
	MILERR_WIN32ERROR                                                         Handle        = 0x88980003
	MILERR_SCANNER_FAILED                                                     Handle        = 0x88980004
	MILERR_SCREENACCESSDENIED                                                 Handle        = 0x88980005
	MILERR_DISPLAYSTATEINVALID                                                Handle        = 0x88980006
	MILERR_NONINVERTIBLEMATRIX                                                Handle        = 0x88980007
	MILERR_ZEROVECTOR                                                         Handle        = 0x88980008
	MILERR_TERMINATED                                                         Handle        = 0x88980009
	MILERR_BADNUMBER                                                          Handle        = 0x8898000A
	MILERR_INTERNALERROR                                                      Handle        = 0x88980080
	MILERR_DISPLAYFORMATNOTSUPPORTED                                          Handle        = 0x88980084
	MILERR_INVALIDCALL                                                        Handle        = 0x88980085
	MILERR_ALREADYLOCKED                                                      Handle        = 0x88980086
	MILERR_NOTLOCKED                                                          Handle        = 0x88980087
	MILERR_DEVICECANNOTRENDERTEXT                                             Handle        = 0x88980088
	MILERR_GLYPHBITMAPMISSED                                                  Handle        = 0x88980089
	MILERR_MALFORMEDGLYPHCACHE                                                Handle        = 0x8898008A
	MILERR_GENERIC_IGNORE                                                     Handle        = 0x8898008B
	MILERR_MALFORMED_GUIDELINE_DATA                                           Handle        = 0x8898008C
	MILERR_NO_HARDWARE_DEVICE                                                 Handle        = 0x8898008D
	MILERR_NEED_RECREATE_AND_PRESENT                                          Handle        = 0x8898008E
	MILERR_ALREADY_INITIALIZED                                                Handle        = 0x8898008F
	MILERR_MISMATCHED_SIZE                                                    Handle        = 0x88980090
	MILERR_NO_REDIRECTION_SURFACE_AVAILABLE                                   Handle        = 0x88980091
	MILERR_REMOTING_NOT_SUPPORTED                                             Handle        = 0x88980092
	MILERR_QUEUED_PRESENT_NOT_SUPPORTED                                       Handle        = 0x88980093
	MILERR_NOT_QUEUING_PRESENTS                                               Handle        = 0x88980094
	MILERR_NO_REDIRECTION_SURFACE_RETRY_LATER                                 Handle        = 0x88980095
	MILERR_TOOMANYSHADERELEMNTS                                               Handle        = 0x88980096
	MILERR_MROW_READLOCK_FAILED                                               Handle        = 0x88980097
	MILERR_MROW_UPDATE_FAILED                                                 Handle        = 0x88980098
	MILERR_SHADER_COMPILE_FAILED                                              Handle        = 0x88980099
	MILERR_MAX_TEXTURE_SIZE_EXCEEDED                                          Handle        = 0x8898009A
	MILERR_QPC_TIME_WENT_BACKWARD                                             Handle        = 0x8898009B
	MILERR_DXGI_ENUMERATION_OUT_OF_SYNC                                       Handle        = 0x8898009D
	MILERR_ADAPTER_NOT_FOUND                                                  Handle        = 0x8898009E
	MILERR_COLORSPACE_NOT_SUPPORTED                                           Handle        = 0x8898009F
	MILERR_PREFILTER_NOT_SUPPORTED                                            Handle        = 0x889800A0
	MILERR_DISPLAYID_ACCESS_DENIED                                            Handle        = 0x889800A1
	UCEERR_INVALIDPACKETHEADER                                                Handle        = 0x88980400
	UCEERR_UNKNOWNPACKET                                                      Handle        = 0x88980401
	UCEERR_ILLEGALPACKET                                                      Handle        = 0x88980402
	UCEERR_MALFORMEDPACKET                                                    Handle        = 0x88980403
	UCEERR_ILLEGALHANDLE                                                      Handle        = 0x88980404
	UCEERR_HANDLELOOKUPFAILED                                                 Handle        = 0x88980405
	UCEERR_RENDERTHREADFAILURE                                                Handle        = 0x88980406
	UCEERR_CTXSTACKFRSTTARGETNULL                                             Handle        = 0x88980407
	UCEERR_CONNECTIONIDLOOKUPFAILED                                           Handle        = 0x88980408
	UCEERR_BLOCKSFULL                                                         Handle        = 0x88980409
	UCEERR_MEMORYFAILURE                                                      Handle        = 0x8898040A
	UCEERR_PACKETRECORDOUTOFRANGE                                             Handle        = 0x8898040B
	UCEERR_ILLEGALRECORDTYPE                                                  Handle        = 0x8898040C
	UCEERR_OUTOFHANDLES                                                       Handle        = 0x8898040D
	UCEERR_UNCHANGABLE_UPDATE_ATTEMPTED                                       Handle        = 0x8898040E
	UCEERR_NO_MULTIPLE_WORKER_THREADS                                         Handle        = 0x8898040F
	UCEERR_REMOTINGNOTSUPPORTED                                               Handle        = 0x88980410
	UCEERR_MISSINGENDCOMMAND                                                  Handle        = 0x88980411
	UCEERR_MISSINGBEGINCOMMAND                                                Handle        = 0x88980412
	UCEERR_CHANNELSYNCTIMEDOUT                                                Handle        = 0x88980413
	UCEERR_CHANNELSYNCABANDONED                                               Handle        = 0x88980414
	UCEERR_UNSUPPORTEDTRANSPORTVERSION                                        Handle        = 0x88980415
	UCEERR_TRANSPORTUNAVAILABLE                                               Handle        = 0x88980416
	UCEERR_FEEDBACK_UNSUPPORTED                                               Handle        = 0x88980417
	UCEERR_COMMANDTRANSPORTDENIED                                             Handle        = 0x88980418
	UCEERR_GRAPHICSSTREAMUNAVAILABLE                                          Handle        = 0x88980419
	UCEERR_GRAPHICSSTREAMALREADYOPEN                                          Handle        = 0x88980420
	UCEERR_TRANSPORTDISCONNECTED                                              Handle        = 0x88980421
	UCEERR_TRANSPORTOVERLOADED                                                Handle        = 0x88980422
	UCEERR_PARTITION_ZOMBIED                                                  Handle        = 0x88980423
	MILAVERR_NOCLOCK                                                          Handle        = 0x88980500
	MILAVERR_NOMEDIATYPE                                                      Handle        = 0x88980501
	MILAVERR_NOVIDEOMIXER                                                     Handle        = 0x88980502
	MILAVERR_NOVIDEOPRESENTER                                                 Handle        = 0x88980503
	MILAVERR_NOREADYFRAMES                                                    Handle        = 0x88980504
	MILAVERR_MODULENOTLOADED                                                  Handle        = 0x88980505
	MILAVERR_WMPFACTORYNOTREGISTERED                                          Handle        = 0x88980506
	MILAVERR_INVALIDWMPVERSION                                                Handle        = 0x88980507
	MILAVERR_INSUFFICIENTVIDEORESOURCES                                       Handle        = 0x88980508
	MILAVERR_VIDEOACCELERATIONNOTAVAILABLE                                    Handle        = 0x88980509
	MILAVERR_REQUESTEDTEXTURETOOBIG                                           Handle        = 0x8898050A
	MILAVERR_SEEKFAILED                                                       Handle        = 0x8898050B
	MILAVERR_UNEXPECTEDWMPFAILURE                                             Handle        = 0x8898050C
	MILAVERR_MEDIAPLAYERCLOSED                                                Handle        = 0x8898050D
	MILAVERR_UNKNOWNHARDWAREERROR                                             Handle        = 0x8898050E
	MILEFFECTSERR_UNKNOWNPROPERTY                                             Handle        = 0x8898060E
	MILEFFECTSERR_EFFECTNOTPARTOFGROUP                                        Handle        = 0x8898060F
	MILEFFECTSERR_NOINPUTSOURCEATTACHED                                       Handle        = 0x88980610
	MILEFFECTSERR_CONNECTORNOTCONNECTED                                       Handle        = 0x88980611
	MILEFFECTSERR_CONNECTORNOTASSOCIATEDWITHEFFECT                            Handle        = 0x88980612
	MILEFFECTSERR_RESERVED                                                    Handle        = 0x88980613
	MILEFFECTSERR_CYCLEDETECTED                                               Handle        = 0x88980614
	MILEFFECTSERR_EFFECTINMORETHANONEGRAPH                                    Handle        = 0x88980615
	MILEFFECTSERR_EFFECTALREADYINAGRAPH                                       Handle        = 0x88980616
	MILEFFECTSERR_EFFECTHASNOCHILDREN                                         Handle        = 0x88980617
	MILEFFECTSERR_ALREADYATTACHEDTOLISTENER                                   Handle        = 0x88980618
	MILEFFECTSERR_NOTAFFINETRANSFORM                                          Handle        = 0x88980619
	MILEFFECTSERR_EMPTYBOUNDS                                                 Handle        = 0x8898061A
	MILEFFECTSERR_OUTPUTSIZETOOLARGE                                          Handle        = 0x8898061B
	DWMERR_STATE_TRANSITION_FAILED                                            Handle        = 0x88980700
	DWMERR_THEME_FAILED                                                       Handle        = 0x88980701
	DWMERR_CATASTROPHIC_FAILURE                                               Handle        = 0x88980702
	DCOMPOSITION_ERROR_WINDOW_ALREADY_COMPOSED                                Handle        = 0x88980800
	DCOMPOSITION_ERROR_SURFACE_BEING_RENDERED                                 Handle        = 0x88980801
	DCOMPOSITION_ERROR_SURFACE_NOT_BEING_RENDERED                             Handle        = 0x88980802
	ONL_E_INVALID_AUTHENTICATION_TARGET                                       Handle        = 0x80860001
	ONL_E_ACCESS_DENIED_BY_TOU                                                Handle        = 0x80860002
	ONL_E_INVALID_APPLICATION                                                 Handle        = 0x80860003
	ONL_E_PASSWORD_UPDATE_REQUIRED                                            Handle        = 0x80860004
	ONL_E_ACCOUNT_UPDATE_REQUIRED                                             Handle        = 0x80860005
	ONL_E_FORCESIGNIN                                                         Handle        = 0x80860006
	ONL_E_ACCOUNT_LOCKED                                                      Handle        = 0x80860007
	ONL_E_PARENTAL_CONSENT_REQUIRED                                           Handle        = 0x80860008
	ONL_E_EMAIL_VERIFICATION_REQUIRED                                         Handle        = 0x80860009
	ONL_E_ACCOUNT_SUSPENDED_COMPROIMISE                                       Handle        = 0x8086000A
	ONL_E_ACCOUNT_SUSPENDED_ABUSE                                             Handle        = 0x8086000B
	ONL_E_ACTION_REQUIRED                                                     Handle        = 0x8086000C
	ONL_CONNECTION_COUNT_LIMIT                                                Handle        = 0x8086000D
	ONL_E_CONNECTED_ACCOUNT_CAN_NOT_SIGNOUT                                   Handle        = 0x8086000E
	ONL_E_USER_AUTHENTICATION_REQUIRED                                        Handle        = 0x8086000F
	ONL_E_REQUEST_THROTTLED                                                   Handle        = 0x80860010
	FA_E_MAX_PERSISTED_ITEMS_REACHED                                          Handle        = 0x80270220
	FA_E_HOMEGROUP_NOT_AVAILABLE                                              Handle        = 0x80270222
	E_MONITOR_RESOLUTION_TOO_LOW                                              Handle        = 0x80270250
	E_ELEVATED_ACTIVATION_NOT_SUPPORTED                                       Handle        = 0x80270251
	E_UAC_DISABLED                                                            Handle        = 0x80270252
	E_FULL_ADMIN_NOT_SUPPORTED                                                Handle        = 0x80270253
	E_APPLICATION_NOT_REGISTERED                                              Handle        = 0x80270254
	E_MULTIPLE_EXTENSIONS_FOR_APPLICATION                                     Handle        = 0x80270255
	E_MULTIPLE_PACKAGES_FOR_FAMILY                                            Handle        = 0x80270256
	E_APPLICATION_MANAGER_NOT_RUNNING                                         Handle        = 0x80270257
	S_STORE_LAUNCHED_FOR_REMEDIATION                                          Handle        = 0x00270258
	S_APPLICATION_ACTIVATION_ERROR_HANDLED_BY_DIALOG                          Handle        = 0x00270259
	E_APPLICATION_ACTIVATION_TIMED_OUT                                        Handle        = 0x8027025A
	E_APPLICATION_ACTIVATION_EXEC_FAILURE                                     Handle        = 0x8027025B
	E_APPLICATION_TEMPORARY_LICENSE_ERROR                                     Handle        = 0x8027025C
	E_APPLICATION_TRIAL_LICENSE_EXPIRED                                       Handle        = 0x8027025D
	E_SKYDRIVE_ROOT_TARGET_FILE_SYSTEM_NOT_SUPPORTED                          Handle        = 0x80270260
	E_SKYDRIVE_ROOT_TARGET_OVERLAP                                            Handle        = 0x80270261
	E_SKYDRIVE_ROOT_TARGET_CANNOT_INDEX                                       Handle        = 0x80270262
	E_SKYDRIVE_FILE_NOT_UPLOADED                                              Handle        = 0x80270263
	E_SKYDRIVE_UPDATE_AVAILABILITY_FAIL                                       Handle        = 0x80270264
	E_SKYDRIVE_ROOT_TARGET_VOLUME_ROOT_NOT_SUPPORTED                          Handle        = 0x80270265
	E_SYNCENGINE_FILE_SIZE_OVER_LIMIT                                         Handle        = 0x8802B001
	E_SYNCENGINE_FILE_SIZE_EXCEEDS_REMAINING_QUOTA                            Handle        = 0x8802B002
	E_SYNCENGINE_UNSUPPORTED_FILE_NAME                                        Handle        = 0x8802B003
	E_SYNCENGINE_FOLDER_ITEM_COUNT_LIMIT_EXCEEDED                             Handle        = 0x8802B004
	E_SYNCENGINE_FILE_SYNC_PARTNER_ERROR                                      Handle        = 0x8802B005
	E_SYNCENGINE_SYNC_PAUSED_BY_SERVICE                                       Handle        = 0x8802B006
	E_SYNCENGINE_FILE_IDENTIFIER_UNKNOWN                                      Handle        = 0x8802C002
	E_SYNCENGINE_SERVICE_AUTHENTICATION_FAILED                                Handle        = 0x8802C003
	E_SYNCENGINE_UNKNOWN_SERVICE_ERROR                                        Handle        = 0x8802C004
	E_SYNCENGINE_SERVICE_RETURNED_UNEXPECTED_SIZE                             Handle        = 0x8802C005
	E_SYNCENGINE_REQUEST_BLOCKED_BY_SERVICE                                   Handle        = 0x8802C006
	E_SYNCENGINE_REQUEST_BLOCKED_DUE_TO_CLIENT_ERROR                          Handle        = 0x8802C007
	E_SYNCENGINE_FOLDER_INACCESSIBLE                                          Handle        = 0x8802D001
	E_SYNCENGINE_UNSUPPORTED_FOLDER_NAME                                      Handle        = 0x8802D002
	E_SYNCENGINE_UNSUPPORTED_MARKET                                           Handle        = 0x8802D003
	E_SYNCENGINE_PATH_LENGTH_LIMIT_EXCEEDED                                   Handle        = 0x8802D004
	E_SYNCENGINE_REMOTE_PATH_LENGTH_LIMIT_EXCEEDED                            Handle        = 0x8802D005
	E_SYNCENGINE_CLIENT_UPDATE_NEEDED                                         Handle        = 0x8802D006
	E_SYNCENGINE_PROXY_AUTHENTICATION_REQUIRED                                Handle        = 0x8802D007
	E_SYNCENGINE_STORAGE_SERVICE_PROVISIONING_FAILED                          Handle        = 0x8802D008
	E_SYNCENGINE_UNSUPPORTED_REPARSE_POINT                                    Handle        = 0x8802D009
	E_SYNCENGINE_STORAGE_SERVICE_BLOCKED                                      Handle        = 0x8802D00A
	E_SYNCENGINE_FOLDER_IN_REDIRECTION                                        Handle        = 0x8802D00B
	EAS_E_POLICY_NOT_MANAGED_BY_OS                                            Handle        = 0x80550001
	EAS_E_POLICY_COMPLIANT_WITH_ACTIONS                                       Handle        = 0x80550002
	EAS_E_REQUESTED_POLICY_NOT_ENFORCEABLE                                    Handle        = 0x80550003
	EAS_E_CURRENT_USER_HAS_BLANK_PASSWORD                                     Handle        = 0x80550004
	EAS_E_REQUESTED_POLICY_PASSWORD_EXPIRATION_INCOMPATIBLE                   Handle        = 0x80550005
	EAS_E_USER_CANNOT_CHANGE_PASSWORD                                         Handle        = 0x80550006
	EAS_E_ADMINS_HAVE_BLANK_PASSWORD                                          Handle        = 0x80550007
	EAS_E_ADMINS_CANNOT_CHANGE_PASSWORD                                       Handle        = 0x80550008
	EAS_E_LOCAL_CONTROLLED_USERS_CANNOT_CHANGE_PASSWORD                       Handle        = 0x80550009
	EAS_E_PASSWORD_POLICY_NOT_ENFORCEABLE_FOR_CONNECTED_ADMINS                Handle        = 0x8055000A
	EAS_E_CONNECTED_ADMINS_NEED_TO_CHANGE_PASSWORD                            Handle        = 0x8055000B
	EAS_E_PASSWORD_POLICY_NOT_ENFORCEABLE_FOR_CURRENT_CONNECTED_USER          Handle        = 0x8055000C
	EAS_E_CURRENT_CONNECTED_USER_NEED_TO_CHANGE_PASSWORD                      Handle        = 0x8055000D
	WEB_E_UNSUPPORTED_FORMAT                                                  Handle        = 0x83750001
	WEB_E_INVALID_XML                                                         Handle        = 0x83750002
	WEB_E_MISSING_REQUIRED_ELEMENT                                            Handle        = 0x83750003
	WEB_E_MISSING_REQUIRED_ATTRIBUTE                                          Handle        = 0x83750004
	WEB_E_UNEXPECTED_CONTENT                                                  Handle        = 0x83750005
	WEB_E_RESOURCE_TOO_LARGE                                                  Handle        = 0x83750006
	WEB_E_INVALID_JSON_STRING                                                 Handle        = 0x83750007
	WEB_E_INVALID_JSON_NUMBER                                                 Handle        = 0x83750008
	WEB_E_JSON_VALUE_NOT_FOUND                                                Handle        = 0x83750009
	HTTP_E_STATUS_UNEXPECTED                                                  Handle        = 0x80190001
	HTTP_E_STATUS_UNEXPECTED_REDIRECTION                                      Handle        = 0x80190003
	HTTP_E_STATUS_UNEXPECTED_CLIENT_ERROR                                     Handle        = 0x80190004
	HTTP_E_STATUS_UNEXPECTED_SERVER_ERROR                                     Handle        = 0x80190005
	HTTP_E_STATUS_AMBIGUOUS                                                   Handle        = 0x8019012C
	HTTP_E_STATUS_MOVED                                                       Handle        = 0x8019012D
	HTTP_E_STATUS_REDIRECT                                                    Handle        = 0x8019012E
	HTTP_E_STATUS_REDIRECT_METHOD                                             Handle        = 0x8019012F
	HTTP_E_STATUS_NOT_MODIFIED                                                Handle        = 0x80190130
	HTTP_E_STATUS_USE_PROXY                                                   Handle        = 0x80190131
	HTTP_E_STATUS_REDIRECT_KEEP_VERB                                          Handle        = 0x80190133
	HTTP_E_STATUS_BAD_REQUEST                                                 Handle        = 0x80190190
	HTTP_E_STATUS_DENIED                                                      Handle        = 0x80190191
	HTTP_E_STATUS_PAYMENT_REQ                                                 Handle        = 0x80190192
	HTTP_E_STATUS_FORBIDDEN                                                   Handle        = 0x80190193
	HTTP_E_STATUS_NOT_FOUND                                                   Handle        = 0x80190194
	HTTP_E_STATUS_BAD_METHOD                                                  Handle        = 0x80190195
	HTTP_E_STATUS_NONE_ACCEPTABLE                                             Handle        = 0x80190196
	HTTP_E_STATUS_PROXY_AUTH_REQ                                              Handle        = 0x80190197
	HTTP_E_STATUS_REQUEST_TIMEOUT                                             Handle        = 0x80190198
	HTTP_E_STATUS_CONFLICT                                                    Handle        = 0x80190199
	HTTP_E_STATUS_GONE                                                        Handle        = 0x8019019A
	HTTP_E_STATUS_LENGTH_REQUIRED                                             Handle        = 0x8019019B
	HTTP_E_STATUS_PRECOND_FAILED                                              Handle        = 0x8019019C
	HTTP_E_STATUS_REQUEST_TOO_LARGE                                           Handle        = 0x8019019D
	HTTP_E_STATUS_URI_TOO_LONG                                                Handle        = 0x8019019E
	HTTP_E_STATUS_UNSUPPORTED_MEDIA                                           Handle        = 0x8019019F
	HTTP_E_STATUS_RANGE_NOT_SATISFIABLE                                       Handle        = 0x801901A0
	HTTP_E_STATUS_EXPECTATION_FAILED                                          Handle        = 0x801901A1
	HTTP_E_STATUS_SERVER_ERROR                                                Handle        = 0x801901F4
	HTTP_E_STATUS_NOT_SUPPORTED                                               Handle        = 0x801901F5
	HTTP_E_STATUS_BAD_GATEWAY                                                 Handle        = 0x801901F6
	HTTP_E_STATUS_SERVICE_UNAVAIL                                             Handle        = 0x801901F7
	HTTP_E_STATUS_GATEWAY_TIMEOUT                                             Handle        = 0x801901F8
	HTTP_E_STATUS_VERSION_NOT_SUP                                             Handle        = 0x801901F9
	E_INVALID_PROTOCOL_OPERATION                                              Handle        = 0x83760001
	E_INVALID_PROTOCOL_FORMAT                                                 Handle        = 0x83760002
	E_PROTOCOL_EXTENSIONS_NOT_SUPPORTED                                       Handle        = 0x83760003
	E_SUBPROTOCOL_NOT_SUPPORTED                                               Handle        = 0x83760004
	E_PROTOCOL_VERSION_NOT_SUPPORTED                                          Handle        = 0x83760005
	INPUT_E_OUT_OF_ORDER                                                      Handle        = 0x80400000
	INPUT_E_REENTRANCY                                                        Handle        = 0x80400001
	INPUT_E_MULTIMODAL                                                        Handle        = 0x80400002
	INPUT_E_PACKET                                                            Handle        = 0x80400003
	INPUT_E_FRAME                                                             Handle        = 0x80400004
	INPUT_E_HISTORY                                                           Handle        = 0x80400005
	INPUT_E_DEVICE_INFO                                                       Handle        = 0x80400006
	INPUT_E_TRANSFORM                                                         Handle        = 0x80400007
	INPUT_E_DEVICE_PROPERTY                                                   Handle        = 0x80400008
	INET_E_INVALID_URL                                                        Handle        = 0x800C0002
	INET_E_NO_SESSION                                                         Handle        = 0x800C0003
	INET_E_CANNOT_CONNECT                                                     Handle        = 0x800C0004
	INET_E_RESOURCE_NOT_FOUND                                                 Handle        = 0x800C0005
	INET_E_OBJECT_NOT_FOUND                                                   Handle        = 0x800C0006
	INET_E_DATA_NOT_AVAILABLE                                                 Handle        = 0x800C0007
	INET_E_DOWNLOAD_FAILURE                                                   Handle        = 0x800C0008
	INET_E_AUTHENTICATION_REQUIRED                                            Handle        = 0x800C0009
	INET_E_NO_VALID_MEDIA                                                     Handle        = 0x800C000A
	INET_E_CONNECTION_TIMEOUT                                                 Handle        = 0x800C000B
	INET_E_INVALID_REQUEST                                                    Handle        = 0x800C000C
	INET_E_UNKNOWN_PROTOCOL                                                   Handle        = 0x800C000D
	INET_E_SECURITY_PROBLEM                                                   Handle        = 0x800C000E
	INET_E_CANNOT_LOAD_DATA                                                   Handle        = 0x800C000F
	INET_E_CANNOT_INSTANTIATE_OBJECT                                          Handle        = 0x800C0010
	INET_E_INVALID_CERTIFICATE                                                Handle        = 0x800C0019
	INET_E_REDIRECT_FAILED                                                    Handle        = 0x800C0014
	INET_E_REDIRECT_TO_DIR                                                    Handle        = 0x800C0015
	ERROR_DBG_CREATE_PROCESS_FAILURE_LOCKDOWN                                 Handle        = 0x80B00001
	ERROR_DBG_ATTACH_PROCESS_FAILURE_LOCKDOWN                                 Handle        = 0x80B00002
	ERROR_DBG_CONNECT_SERVER_FAILURE_LOCKDOWN                                 Handle        = 0x80B00003
	ERROR_DBG_START_SERVER_FAILURE_LOCKDOWN                                   Handle        = 0x80B00004
	ERROR_IO_PREEMPTED                                                        Handle        = 0x89010001
	JSCRIPT_E_CANTEXECUTE                                                     Handle        = 0x89020001
	WEP_E_NOT_PROVISIONED_ON_ALL_VOLUMES                                      Handle        = 0x88010001
	WEP_E_FIXED_DATA_NOT_SUPPORTED                                            Handle        = 0x88010002
	WEP_E_HARDWARE_NOT_COMPLIANT                                              Handle        = 0x88010003
	WEP_E_LOCK_NOT_CONFIGURED                                                 Handle        = 0x88010004
	WEP_E_PROTECTION_SUSPENDED                                                Handle        = 0x88010005
	WEP_E_NO_LICENSE                                                          Handle        = 0x88010006
	WEP_E_OS_NOT_PROTECTED                                                    Handle        = 0x88010007
	WEP_E_UNEXPECTED_FAIL                                                     Handle        = 0x88010008
	WEP_E_BUFFER_TOO_LARGE                                                    Handle        = 0x88010009
	ERROR_SVHDX_ERROR_STORED                                                  Handle        = 0xC05C0000
	ERROR_SVHDX_ERROR_NOT_AVAILABLE                                           Handle        = 0xC05CFF00
	ERROR_SVHDX_UNIT_ATTENTION_AVAILABLE                                      Handle        = 0xC05CFF01
	ERROR_SVHDX_UNIT_ATTENTION_CAPACITY_DATA_CHANGED                          Handle        = 0xC05CFF02
	ERROR_SVHDX_UNIT_ATTENTION_RESERVATIONS_PREEMPTED                         Handle        = 0xC05CFF03
	ERROR_SVHDX_UNIT_ATTENTION_RESERVATIONS_RELEASED                          Handle        = 0xC05CFF04
	ERROR_SVHDX_UNIT_ATTENTION_REGISTRATIONS_PREEMPTED                        Handle        = 0xC05CFF05
	ERROR_SVHDX_UNIT_ATTENTION_OPERATING_DEFINITION_CHANGED                   Handle        = 0xC05CFF06
	ERROR_SVHDX_RESERVATION_CONFLICT                                          Handle        = 0xC05CFF07
	ERROR_SVHDX_WRONG_FILE_TYPE                                               Handle        = 0xC05CFF08
	ERROR_SVHDX_VERSION_MISMATCH                                              Handle        = 0xC05CFF09
	ERROR_VHD_SHARED                                                          Handle        = 0xC05CFF0A
	ERROR_SVHDX_NO_INITIATOR                                                  Handle        = 0xC05CFF0B
	ERROR_VHDSET_BACKING_STORAGE_NOT_FOUND                                    Handle        = 0xC05CFF0C
	ERROR_SMB_NO_PREAUTH_INTEGRITY_HASH_OVERLAP                               Handle        = 0xC05D0000
	ERROR_SMB_BAD_CLUSTER_DIALECT                                             Handle        = 0xC05D0001
	WININET_E_OUT_OF_HANDLES                                                  Handle        = 0x80072EE1
	WININET_E_TIMEOUT                                                         Handle        = 0x80072EE2
	WININET_E_EXTENDED_ERROR                                                  Handle        = 0x80072EE3
	WININET_E_INTERNAL_ERROR                                                  Handle        = 0x80072EE4
	WININET_E_INVALID_URL                                                     Handle        = 0x80072EE5
	WININET_E_UNRECOGNIZED_SCHEME                                             Handle        = 0x80072EE6
	WININET_E_NAME_NOT_RESOLVED                                               Handle        = 0x80072EE7
	WININET_E_PROTOCOL_NOT_FOUND                                              Handle        = 0x80072EE8
	WININET_E_INVALID_OPTION                                                  Handle        = 0x80072EE9
	WININET_E_BAD_OPTION_LENGTH                                               Handle        = 0x80072EEA
	WININET_E_OPTION_NOT_SETTABLE                                             Handle        = 0x80072EEB
	WININET_E_SHUTDOWN                                                        Handle        = 0x80072EEC
	WININET_E_INCORRECT_USER_NAME                                             Handle        = 0x80072EED
	WININET_E_INCORRECT_PASSWORD                                              Handle        = 0x80072EEE
	WININET_E_LOGIN_FAILURE                                                   Handle        = 0x80072EEF
	WININET_E_INVALID_OPERATION                                               Handle        = 0x80072EF0
	WININET_E_OPERATION_CANCELLED                                             Handle        = 0x80072EF1
	WININET_E_INCORRECT_HANDLE_TYPE                                           Handle        = 0x80072EF2
	WININET_E_INCORRECT_HANDLE_STATE                                          Handle        = 0x80072EF3
	WININET_E_NOT_PROXY_REQUEST                                               Handle        = 0x80072EF4
	WININET_E_REGISTRY_VALUE_NOT_FOUND                                        Handle        = 0x80072EF5
	WININET_E_BAD_REGISTRY_PARAMETER                                          Handle        = 0x80072EF6
	WININET_E_NO_DIRECT_ACCESS                                                Handle        = 0x80072EF7
	WININET_E_NO_CONTEXT                                                      Handle        = 0x80072EF8
	WININET_E_NO_CALLBACK                                                     Handle        = 0x80072EF9
	WININET_E_REQUEST_PENDING                                                 Handle        = 0x80072EFA
	WININET_E_INCORRECT_FORMAT                                                Handle        = 0x80072EFB
	WININET_E_ITEM_NOT_FOUND                                                  Handle        = 0x80072EFC
	WININET_E_CANNOT_CONNECT                                                  Handle        = 0x80072EFD
	WININET_E_CONNECTION_ABORTED                                              Handle        = 0x80072EFE
	WININET_E_CONNECTION_RESET                                                Handle        = 0x80072EFF
	WININET_E_FORCE_RETRY                                                     Handle        = 0x80072F00
	WININET_E_INVALID_PROXY_REQUEST                                           Handle        = 0x80072F01
	WININET_E_NEED_UI                                                         Handle        = 0x80072F02
	WININET_E_HANDLE_EXISTS                                                   Handle        = 0x80072F04
	WININET_E_SEC_CERT_DATE_INVALID                                           Handle        = 0x80072F05
	WININET_E_SEC_CERT_CN_INVALID                                             Handle        = 0x80072F06
	WININET_E_HTTP_TO_HTTPS_ON_REDIR                                          Handle        = 0x80072F07
	WININET_E_HTTPS_TO_HTTP_ON_REDIR                                          Handle        = 0x80072F08
	WININET_E_MIXED_SECURITY                                                  Handle        = 0x80072F09
	WININET_E_CHG_POST_IS_NON_SECURE                                          Handle        = 0x80072F0A
	WININET_E_POST_IS_NON_SECURE                                              Handle        = 0x80072F0B
	WININET_E_CLIENT_AUTH_CERT_NEEDED                                         Handle        = 0x80072F0C
	WININET_E_INVALID_CA                                                      Handle        = 0x80072F0D
	WININET_E_CLIENT_AUTH_NOT_SETUP                                           Handle        = 0x80072F0E
	WININET_E_ASYNC_THREAD_FAILED                                             Handle        = 0x80072F0F
	WININET_E_REDIRECT_SCHEME_CHANGE                                          Handle        = 0x80072F10
	WININET_E_DIALOG_PENDING                                                  Handle        = 0x80072F11
	WININET_E_RETRY_DIALOG                                                    Handle        = 0x80072F12
	WININET_E_NO_NEW_CONTAINERS                                               Handle        = 0x80072F13
	WININET_E_HTTPS_HTTP_SUBMIT_REDIR                                         Handle        = 0x80072F14
	WININET_E_SEC_CERT_ERRORS                                                 Handle        = 0x80072F17
	WININET_E_SEC_CERT_REV_FAILED                                             Handle        = 0x80072F19
	WININET_E_HEADER_NOT_FOUND                                                Handle        = 0x80072F76
	WININET_E_DOWNLEVEL_SERVER                                                Handle        = 0x80072F77
	WININET_E_INVALID_SERVER_RESPONSE                                         Handle        = 0x80072F78
	WININET_E_INVALID_HEADER                                                  Handle        = 0x80072F79
	WININET_E_INVALID_QUERY_REQUEST                                           Handle        = 0x80072F7A
	WININET_E_HEADER_ALREADY_EXISTS                                           Handle        = 0x80072F7B
	WININET_E_REDIRECT_FAILED                                                 Handle        = 0x80072F7C
	WININET_E_SECURITY_CHANNEL_ERROR                                          Handle        = 0x80072F7D
	WININET_E_UNABLE_TO_CACHE_FILE                                            Handle        = 0x80072F7E
	WININET_E_TCPIP_NOT_INSTALLED                                             Handle        = 0x80072F7F
	WININET_E_DISCONNECTED                                                    Handle        = 0x80072F83
	WININET_E_SERVER_UNREACHABLE                                              Handle        = 0x80072F84
	WININET_E_PROXY_SERVER_UNREACHABLE                                        Handle        = 0x80072F85
	WININET_E_BAD_AUTO_PROXY_SCRIPT                                           Handle        = 0x80072F86
	WININET_E_UNABLE_TO_DOWNLOAD_SCRIPT                                       Handle        = 0x80072F87
	WININET_E_SEC_INVALID_CERT                                                Handle        = 0x80072F89
	WININET_E_SEC_CERT_REVOKED                                                Handle        = 0x80072F8A
	WININET_E_FAILED_DUETOSECURITYCHECK                                       Handle        = 0x80072F8B
	WININET_E_NOT_INITIALIZED                                                 Handle        = 0x80072F8C
	WININET_E_LOGIN_FAILURE_DISPLAY_ENTITY_BODY                               Handle        = 0x80072F8E
	WININET_E_DECODING_FAILED                                                 Handle        = 0x80072F8F
	WININET_E_NOT_REDIRECTED                                                  Handle        = 0x80072F80
	WININET_E_COOKIE_NEEDS_CONFIRMATION                                       Handle        = 0x80072F81
	WININET_E_COOKIE_DECLINED                                                 Handle        = 0x80072F82
	WININET_E_REDIRECT_NEEDS_CONFIRMATION                                     Handle        = 0x80072F88
	SQLITE_E_ERROR                                                            Handle        = 0x87AF0001
	SQLITE_E_INTERNAL                                                         Handle        = 0x87AF0002
	SQLITE_E_PERM                                                             Handle        = 0x87AF0003
	SQLITE_E_ABORT                                                            Handle        = 0x87AF0004
	SQLITE_E_BUSY                                                             Handle        = 0x87AF0005
	SQLITE_E_LOCKED                                                           Handle        = 0x87AF0006
	SQLITE_E_NOMEM                                                            Handle        = 0x87AF0007
	SQLITE_E_READONLY                                                         Handle        = 0x87AF0008
	SQLITE_E_INTERRUPT                                                        Handle        = 0x87AF0009
	SQLITE_E_IOERR                                                            Handle        = 0x87AF000A
	SQLITE_E_CORRUPT                                                          Handle        = 0x87AF000B
	SQLITE_E_NOTFOUND                                                         Handle        = 0x87AF000C
	SQLITE_E_FULL                                                             Handle        = 0x87AF000D
	SQLITE_E_CANTOPEN                                                         Handle        = 0x87AF000E
	SQLITE_E_PROTOCOL                                                         Handle        = 0x87AF000F
	SQLITE_E_EMPTY                                                            Handle        = 0x87AF0010
	SQLITE_E_SCHEMA                                                           Handle        = 0x87AF0011
	SQLITE_E_TOOBIG                                                           Handle        = 0x87AF0012
	SQLITE_E_CONSTRAINT                                                       Handle        = 0x87AF0013
	SQLITE_E_MISMATCH                                                         Handle        = 0x87AF0014
	SQLITE_E_MISUSE                                                           Handle        = 0x87AF0015
	SQLITE_E_NOLFS                                                            Handle        = 0x87AF0016
	SQLITE_E_AUTH                                                             Handle        = 0x87AF0017
	SQLITE_E_FORMAT                                                           Handle        = 0x87AF0018
	SQLITE_E_RANGE                                                            Handle        = 0x87AF0019
	SQLITE_E_NOTADB                                                           Handle        = 0x87AF001A
	SQLITE_E_NOTICE                                                           Handle        = 0x87AF001B
	SQLITE_E_WARNING                                                          Handle        = 0x87AF001C
	SQLITE_E_ROW                                                              Handle        = 0x87AF0064
	SQLITE_E_DONE                                                             Handle        = 0x87AF0065
	SQLITE_E_IOERR_READ                                                       Handle        = 0x87AF010A
	SQLITE_E_IOERR_SHORT_READ                                                 Handle        = 0x87AF020A
	SQLITE_E_IOERR_WRITE                                                      Handle        = 0x87AF030A
	SQLITE_E_IOERR_FSYNC                                                      Handle        = 0x87AF040A
	SQLITE_E_IOERR_DIR_FSYNC                                                  Handle        = 0x87AF050A
	SQLITE_E_IOERR_TRUNCATE                                                   Handle        = 0x87AF060A
	SQLITE_E_IOERR_FSTAT                                                      Handle        = 0x87AF070A
	SQLITE_E_IOERR_UNLOCK                                                     Handle        = 0x87AF080A
	SQLITE_E_IOERR_RDLOCK                                                     Handle        = 0x87AF090A
	SQLITE_E_IOERR_DELETE                                                     Handle        = 0x87AF0A0A
	SQLITE_E_IOERR_BLOCKED                                                    Handle        = 0x87AF0B0A
	SQLITE_E_IOERR_NOMEM                                                      Handle        = 0x87AF0C0A
	SQLITE_E_IOERR_ACCESS                                                     Handle        = 0x87AF0D0A
	SQLITE_E_IOERR_CHECKRESERVEDLOCK                                          Handle        = 0x87AF0E0A
	SQLITE_E_IOERR_LOCK                                                       Handle        = 0x87AF0F0A
	SQLITE_E_IOERR_CLOSE                                                      Handle        = 0x87AF100A
	SQLITE_E_IOERR_DIR_CLOSE                                                  Handle        = 0x87AF110A
	SQLITE_E_IOERR_SHMOPEN                                                    Handle        = 0x87AF120A
	SQLITE_E_IOERR_SHMSIZE                                                    Handle        = 0x87AF130A
	SQLITE_E_IOERR_SHMLOCK                                                    Handle        = 0x87AF140A
	SQLITE_E_IOERR_SHMMAP                                                     Handle        = 0x87AF150A
	SQLITE_E_IOERR_SEEK                                                       Handle        = 0x87AF160A
	SQLITE_E_IOERR_DELETE_NOENT                                               Handle        = 0x87AF170A
	SQLITE_E_IOERR_MMAP                                                       Handle        = 0x87AF180A
	SQLITE_E_IOERR_GETTEMPPATH                                                Handle        = 0x87AF190A
	SQLITE_E_IOERR_CONVPATH                                                   Handle        = 0x87AF1A0A
	SQLITE_E_IOERR_VNODE                                                      Handle        = 0x87AF1A02
	SQLITE_E_IOERR_AUTH                                                       Handle        = 0x87AF1A03
	SQLITE_E_LOCKED_SHAREDCACHE                                               Handle        = 0x87AF0106
	SQLITE_E_BUSY_RECOVERY                                                    Handle        = 0x87AF0105
	SQLITE_E_BUSY_SNAPSHOT                                                    Handle        = 0x87AF0205
	SQLITE_E_CANTOPEN_NOTEMPDIR                                               Handle        = 0x87AF010E
	SQLITE_E_CANTOPEN_ISDIR                                                   Handle        = 0x87AF020E
	SQLITE_E_CANTOPEN_FULLPATH                                                Handle        = 0x87AF030E
	SQLITE_E_CANTOPEN_CONVPATH                                                Handle        = 0x87AF040E
	SQLITE_E_CORRUPT_VTAB                                                     Handle        = 0x87AF010B
	SQLITE_E_READONLY_RECOVERY                                                Handle        = 0x87AF0108
	SQLITE_E_READONLY_CANTLOCK                                                Handle        = 0x87AF0208
	SQLITE_E_READONLY_ROLLBACK                                                Handle        = 0x87AF0308
	SQLITE_E_READONLY_DBMOVED                                                 Handle        = 0x87AF0408
	SQLITE_E_ABORT_ROLLBACK                                                   Handle        = 0x87AF0204
	SQLITE_E_CONSTRAINT_CHECK                                                 Handle        = 0x87AF0113
	SQLITE_E_CONSTRAINT_COMMITHOOK                                            Handle        = 0x87AF0213
	SQLITE_E_CONSTRAINT_FOREIGNKEY                                            Handle        = 0x87AF0313
	SQLITE_E_CONSTRAINT_FUNCTION                                              Handle        = 0x87AF0413
	SQLITE_E_CONSTRAINT_NOTNULL                                               Handle        = 0x87AF0513
	SQLITE_E_CONSTRAINT_PRIMARYKEY                                            Handle        = 0x87AF0613
	SQLITE_E_CONSTRAINT_TRIGGER                                               Handle        = 0x87AF0713
	SQLITE_E_CONSTRAINT_UNIQUE                                                Handle        = 0x87AF0813
	SQLITE_E_CONSTRAINT_VTAB                                                  Handle        = 0x87AF0913
	SQLITE_E_CONSTRAINT_ROWID                                                 Handle        = 0x87AF0A13
	SQLITE_E_NOTICE_RECOVER_WAL                                               Handle        = 0x87AF011B
	SQLITE_E_NOTICE_RECOVER_ROLLBACK                                          Handle        = 0x87AF021B
	SQLITE_E_WARNING_AUTOINDEX                                                Handle        = 0x87AF011C
	UTC_E_TOGGLE_TRACE_STARTED                                                Handle        = 0x87C51001
	UTC_E_ALTERNATIVE_TRACE_CANNOT_PREEMPT                                    Handle        = 0x87C51002
	UTC_E_AOT_NOT_RUNNING                                                     Handle        = 0x87C51003
	UTC_E_SCRIPT_TYPE_INVALID                                                 Handle        = 0x87C51004
	UTC_E_SCENARIODEF_NOT_FOUND                                               Handle        = 0x87C51005
	UTC_E_TRACEPROFILE_NOT_FOUND                                              Handle        = 0x87C51006
	UTC_E_FORWARDER_ALREADY_ENABLED                                           Handle        = 0x87C51007
	UTC_E_FORWARDER_ALREADY_DISABLED                                          Handle        = 0x87C51008
	UTC_E_EVENTLOG_ENTRY_MALFORMED                                            Handle        = 0x87C51009
	UTC_E_DIAGRULES_SCHEMAVERSION_MISMATCH                                    Handle        = 0x87C5100A
	UTC_E_SCRIPT_TERMINATED                                                   Handle        = 0x87C5100B
	UTC_E_INVALID_CUSTOM_FILTER                                               Handle        = 0x87C5100C
	UTC_E_TRACE_NOT_RUNNING                                                   Handle        = 0x87C5100D
	UTC_E_REESCALATED_TOO_QUICKLY                                             Handle        = 0x87C5100E
	UTC_E_ESCALATION_ALREADY_RUNNING                                          Handle        = 0x87C5100F
	UTC_E_PERFTRACK_ALREADY_TRACING                                           Handle        = 0x87C51010
	UTC_E_REACHED_MAX_ESCALATIONS                                             Handle        = 0x87C51011
	UTC_E_FORWARDER_PRODUCER_MISMATCH                                         Handle        = 0x87C51012
	UTC_E_INTENTIONAL_SCRIPT_FAILURE                                          Handle        = 0x87C51013
	UTC_E_SQM_INIT_FAILED                                                     Handle        = 0x87C51014
	UTC_E_NO_WER_LOGGER_SUPPORTED                                             Handle        = 0x87C51015
	UTC_E_TRACERS_DONT_EXIST                                                  Handle        = 0x87C51016
	UTC_E_WINRT_INIT_FAILED                                                   Handle        = 0x87C51017
	UTC_E_SCENARIODEF_SCHEMAVERSION_MISMATCH                                  Handle        = 0x87C51018
	UTC_E_INVALID_FILTER                                                      Handle        = 0x87C51019
	UTC_E_EXE_TERMINATED                                                      Handle        = 0x87C5101A
	UTC_E_ESCALATION_NOT_AUTHORIZED                                           Handle        = 0x87C5101B
	UTC_E_SETUP_NOT_AUTHORIZED                                                Handle        = 0x87C5101C
	UTC_E_CHILD_PROCESS_FAILED                                                Handle        = 0x87C5101D
	UTC_E_COMMAND_LINE_NOT_AUTHORIZED                                         Handle        = 0x87C5101E
	UTC_E_CANNOT_LOAD_SCENARIO_EDITOR_XML                                     Handle        = 0x87C5101F
	UTC_E_ESCALATION_TIMED_OUT                                                Handle        = 0x87C51020
	UTC_E_SETUP_TIMED_OUT                                                     Handle        = 0x87C51021
	UTC_E_TRIGGER_MISMATCH                                                    Handle        = 0x87C51022
	UTC_E_TRIGGER_NOT_FOUND                                                   Handle        = 0x87C51023
	UTC_E_SIF_NOT_SUPPORTED                                                   Handle        = 0x87C51024
	UTC_E_DELAY_TERMINATED                                                    Handle        = 0x87C51025
	UTC_E_DEVICE_TICKET_ERROR                                                 Handle        = 0x87C51026
	UTC_E_TRACE_BUFFER_LIMIT_EXCEEDED                                         Handle        = 0x87C51027
	UTC_E_API_RESULT_UNAVAILABLE                                              Handle        = 0x87C51028
	UTC_E_RPC_TIMEOUT                                                         Handle        = 0x87C51029
	UTC_E_RPC_WAIT_FAILED                                                     Handle        = 0x87C5102A
	UTC_E_API_BUSY                                                            Handle        = 0x87C5102B
	UTC_E_TRACE_MIN_DURATION_REQUIREMENT_NOT_MET                              Handle        = 0x87C5102C
	UTC_E_EXCLUSIVITY_NOT_AVAILABLE                                           Handle        = 0x87C5102D
	UTC_E_GETFILE_FILE_PATH_NOT_APPROVED                                      Handle        = 0x87C5102E
	UTC_E_ESCALATION_DIRECTORY_ALREADY_EXISTS                                 Handle        = 0x87C5102F
	UTC_E_TIME_TRIGGER_ON_START_INVALID                                       Handle        = 0x87C51030
	UTC_E_TIME_TRIGGER_ONLY_VALID_ON_SINGLE_TRANSITION                        Handle        = 0x87C51031
	UTC_E_TIME_TRIGGER_INVALID_TIME_RANGE                                     Handle        = 0x87C51032
	UTC_E_MULTIPLE_TIME_TRIGGER_ON_SINGLE_STATE                               Handle        = 0x87C51033
	UTC_E_BINARY_MISSING                                                      Handle        = 0x87C51034
	UTC_E_NETWORK_CAPTURE_NOT_ALLOWED                                         Handle        = 0x87C51035
	UTC_E_FAILED_TO_RESOLVE_CONTAINER_ID                                      Handle        = 0x87C51036
	UTC_E_UNABLE_TO_RESOLVE_SESSION                                           Handle        = 0x87C51037
	UTC_E_THROTTLED                                                           Handle        = 0x87C51038
	UTC_E_UNAPPROVED_SCRIPT                                                   Handle        = 0x87C51039
	UTC_E_SCRIPT_MISSING                                                      Handle        = 0x87C5103A
	UTC_E_SCENARIO_THROTTLED                                                  Handle        = 0x87C5103B
	UTC_E_API_NOT_SUPPORTED                                                   Handle        = 0x87C5103C
	UTC_E_GETFILE_EXTERNAL_PATH_NOT_APPROVED                                  Handle        = 0x87C5103D
	UTC_E_TRY_GET_SCENARIO_TIMEOUT_EXCEEDED                                   Handle        = 0x87C5103E
	UTC_E_CERT_REV_FAILED                                                     Handle        = 0x87C5103F
	UTC_E_FAILED_TO_START_NDISCAP                                             Handle        = 0x87C51040
	UTC_E_KERNELDUMP_LIMIT_REACHED                                            Handle        = 0x87C51041
	UTC_E_MISSING_AGGREGATE_EVENT_TAG                                         Handle        = 0x87C51042
	UTC_E_INVALID_AGGREGATION_STRUCT                                          Handle        = 0x87C51043
	UTC_E_ACTION_NOT_SUPPORTED_IN_DESTINATION                                 Handle        = 0x87C51044
	UTC_E_FILTER_MISSING_ATTRIBUTE                                            Handle        = 0x87C51045
	UTC_E_FILTER_INVALID_TYPE                                                 Handle        = 0x87C51046
	UTC_E_FILTER_VARIABLE_NOT_FOUND                                           Handle        = 0x87C51047
	UTC_E_FILTER_FUNCTION_RESTRICTED                                          Handle        = 0x87C51048
	UTC_E_FILTER_VERSION_MISMATCH                                             Handle        = 0x87C51049
	UTC_E_FILTER_INVALID_FUNCTION                                             Handle        = 0x87C51050
	UTC_E_FILTER_INVALID_FUNCTION_PARAMS                                      Handle        = 0x87C51051
	UTC_E_FILTER_INVALID_COMMAND                                              Handle        = 0x87C51052
	UTC_E_FILTER_ILLEGAL_EVAL                                                 Handle        = 0x87C51053
	UTC_E_TTTRACER_RETURNED_ERROR                                             Handle        = 0x87C51054
	UTC_E_AGENT_DIAGNOSTICS_TOO_LARGE                                         Handle        = 0x87C51055
	UTC_E_FAILED_TO_RECEIVE_AGENT_DIAGNOSTICS                                 Handle        = 0x87C51056
	UTC_E_SCENARIO_HAS_NO_ACTIONS                                             Handle        = 0x87C51057
	UTC_E_TTTRACER_STORAGE_FULL                                               Handle        = 0x87C51058
	UTC_E_INSUFFICIENT_SPACE_TO_START_TRACE                                   Handle        = 0x87C51059
	UTC_E_ESCALATION_CANCELLED_AT_SHUTDOWN                                    Handle        = 0x87C5105A
	UTC_E_GETFILEINFOACTION_FILE_NOT_APPROVED                                 Handle        = 0x87C5105B
	UTC_E_SETREGKEYACTION_TYPE_NOT_APPROVED                                   Handle        = 0x87C5105C
	WINML_ERR_INVALID_DEVICE                                                  Handle        = 0x88900001
	WINML_ERR_INVALID_BINDING                                                 Handle        = 0x88900002
	WINML_ERR_VALUE_NOTFOUND                                                  Handle        = 0x88900003
	WINML_ERR_SIZE_MISMATCH                                                   Handle        = 0x88900004
	STATUS_WAIT_0                                                             NTStatus      = 0x00000000
	STATUS_SUCCESS                                                            NTStatus      = 0x00000000
	STATUS_WAIT_1                                                             NTStatus      = 0x00000001
	STATUS_WAIT_2                                                             NTStatus      = 0x00000002
	STATUS_WAIT_3                                                             NTStatus      = 0x00000003
	STATUS_WAIT_63                                                            NTStatus      = 0x0000003F
	STATUS_ABANDONED                                                          NTStatus      = 0x00000080
	STATUS_ABANDONED_WAIT_0                                                   NTStatus      = 0x00000080
	STATUS_ABANDONED_WAIT_63                                                  NTStatus      = 0x000000BF
	STATUS_USER_APC                                                           NTStatus      = 0x000000C0
	STATUS_ALREADY_COMPLETE                                                   NTStatus      = 0x000000FF
	STATUS_KERNEL_APC                                                         NTStatus      = 0x00000100
	STATUS_ALERTED                                                            NTStatus      = 0x00000101
	STATUS_TIMEOUT                                                            NTStatus      = 0x00000102
	STATUS_PENDING                                                            NTStatus      = 0x00000103
	STATUS_REPARSE                                                            NTStatus      = 0x00000104
	STATUS_MORE_ENTRIES                                                       NTStatus      = 0x00000105
	STATUS_NOT_ALL_ASSIGNED                                                   NTStatus      = 0x00000106
	STATUS_SOME_NOT_MAPPED                                                    NTStatus      = 0x00000107
	STATUS_OPLOCK_BREAK_IN_PROGRESS                                           NTStatus      = 0x00000108
	STATUS_VOLUME_MOUNTED                                                     NTStatus      = 0x00000109
	STATUS_RXACT_COMMITTED                                                    NTStatus      = 0x0000010A
	STATUS_NOTIFY_CLEANUP                                                     NTStatus      = 0x0000010B
	STATUS_NOTIFY_ENUM_DIR                                                    NTStatus      = 0x0000010C
	STATUS_NO_QUOTAS_FOR_ACCOUNT                                              NTStatus      = 0x0000010D
	STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED                                   NTStatus      = 0x0000010E
	STATUS_PAGE_FAULT_TRANSITION                                              NTStatus      = 0x00000110
	STATUS_PAGE_FAULT_DEMAND_ZERO                                             NTStatus      = 0x00000111
	STATUS_PAGE_FAULT_COPY_ON_WRITE                                           NTStatus      = 0x00000112
	STATUS_PAGE_FAULT_GUARD_PAGE                                              NTStatus      = 0x00000113
	STATUS_PAGE_FAULT_PAGING_FILE                                             NTStatus      = 0x00000114
	STATUS_CACHE_PAGE_LOCKED                                                  NTStatus      = 0x00000115
	STATUS_CRASH_DUMP                                                         NTStatus      = 0x00000116
	STATUS_BUFFER_ALL_ZEROS                                                   NTStatus      = 0x00000117
	STATUS_REPARSE_OBJECT                                                     NTStatus      = 0x00000118
	STATUS_RESOURCE_REQUIREMENTS_CHANGED                                      NTStatus      = 0x00000119
	STATUS_TRANSLATION_COMPLETE                                               NTStatus      = 0x00000120
	STATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY                                    NTStatus      = 0x00000121
	STATUS_NOTHING_TO_TERMINATE                                               NTStatus      = 0x00000122
	STATUS_PROCESS_NOT_IN_JOB                                                 NTStatus      = 0x00000123
	STATUS_PROCESS_IN_JOB                                                     NTStatus      = 0x00000124
	STATUS_VOLSNAP_HIBERNATE_READY                                            NTStatus      = 0x00000125
	STATUS_FSFILTER_OP_COMPLETED_SUCCESSFULLY                                 NTStatus      = 0x00000126
	STATUS_INTERRUPT_VECTOR_ALREADY_CONNECTED                                 NTStatus      = 0x00000127
	STATUS_INTERRUPT_STILL_CONNECTED                                          NTStatus      = 0x00000128
	STATUS_PROCESS_CLONED                                                     NTStatus      = 0x00000129
	STATUS_FILE_LOCKED_WITH_ONLY_READERS                                      NTStatus      = 0x0000012A
	STATUS_FILE_LOCKED_WITH_WRITERS                                           NTStatus      = 0x0000012B
	STATUS_VALID_IMAGE_HASH                                                   NTStatus      = 0x0000012C
	STATUS_VALID_CATALOG_HASH                                                 NTStatus      = 0x0000012D
	STATUS_VALID_STRONG_CODE_HASH                                             NTStatus      = 0x0000012E
	STATUS_GHOSTED                                                            NTStatus      = 0x0000012F
	STATUS_DATA_OVERWRITTEN                                                   NTStatus      = 0x00000130
	STATUS_RESOURCEMANAGER_READ_ONLY                                          NTStatus      = 0x00000202
	STATUS_RING_PREVIOUSLY_EMPTY                                              NTStatus      = 0x00000210
	STATUS_RING_PREVIOUSLY_FULL                                               NTStatus      = 0x00000211
	STATUS_RING_PREVIOUSLY_ABOVE_QUOTA                                        NTStatus      = 0x00000212
	STATUS_RING_NEWLY_EMPTY                                                   NTStatus      = 0x00000213
	STATUS_RING_SIGNAL_OPPOSITE_ENDPOINT                                      NTStatus      = 0x00000214
	STATUS_OPLOCK_SWITCHED_TO_NEW_HANDLE                                      NTStatus      = 0x00000215
	STATUS_OPLOCK_HANDLE_CLOSED                                               NTStatus      = 0x00000216
	STATUS_WAIT_FOR_OPLOCK                                                    NTStatus      = 0x00000367
	STATUS_REPARSE_GLOBAL                                                     NTStatus      = 0x00000368
	STATUS_FLT_IO_COMPLETE                                                    NTStatus      = 0x001C0001
	STATUS_OBJECT_NAME_EXISTS                                                 NTStatus      = 0x40000000
	STATUS_THREAD_WAS_SUSPENDED                                               NTStatus      = 0x40000001
	STATUS_WORKING_SET_LIMIT_RANGE                                            NTStatus      = 0x40000002
	STATUS_IMAGE_NOT_AT_BASE                                                  NTStatus      = 0x40000003
	STATUS_RXACT_STATE_CREATED                                                NTStatus      = 0x40000004
	STATUS_SEGMENT_NOTIFICATION                                               NTStatus      = 0x40000005
	STATUS_LOCAL_USER_SESSION_KEY                                             NTStatus      = 0x40000006
	STATUS_BAD_CURRENT_DIRECTORY                                              NTStatus      = 0x40000007
	STATUS_SERIAL_MORE_WRITES                                                 NTStatus      = 0x40000008
	STATUS_REGISTRY_RECOVERED                                                 NTStatus      = 0x40000009
	STATUS_FT_READ_RECOVERY_FROM_BACKUP                                       NTStatus      = 0x4000000A
	STATUS_FT_WRITE_RECOVERY                                                  NTStatus      = 0x4000000B
	STATUS_SERIAL_COUNTER_TIMEOUT                                             NTStatus      = 0x4000000C
	STATUS_NULL_LM_PASSWORD                                                   NTStatus      = 0x4000000D
	STATUS_IMAGE_MACHINE_TYPE_MISMATCH                                        NTStatus      = 0x4000000E
	STATUS_RECEIVE_PARTIAL                                                    NTStatus      = 0x4000000F
	STATUS_RECEIVE_EXPEDITED                                                  NTStatus      = 0x40000010
	STATUS_RECEIVE_PARTIAL_EXPEDITED                                          NTStatus      = 0x40000011
	STATUS_EVENT_DONE                                                         NTStatus      = 0x40000012
	STATUS_EVENT_PENDING                                                      NTStatus      = 0x40000013
	STATUS_CHECKING_FILE_SYSTEM                                               NTStatus      = 0x40000014
	STATUS_FATAL_APP_EXIT                                                     NTStatus      = 0x40000015
	STATUS_PREDEFINED_HANDLE                                                  NTStatus      = 0x40000016
	STATUS_WAS_UNLOCKED                                                       NTStatus      = 0x40000017
	STATUS_SERVICE_NOTIFICATION                                               NTStatus      = 0x40000018
	STATUS_WAS_LOCKED                                                         NTStatus      = 0x40000019
	STATUS_LOG_HARD_ERROR                                                     NTStatus      = 0x4000001A
	STATUS_ALREADY_WIN32                                                      NTStatus      = 0x4000001B
	STATUS_WX86_UNSIMULATE                                                    NTStatus      = 0x4000001C
	STATUS_WX86_CONTINUE                                                      NTStatus      = 0x4000001D
	STATUS_WX86_SINGLE_STEP                                                   NTStatus      = 0x4000001E
	STATUS_WX86_BREAKPOINT                                                    NTStatus      = 0x4000001F
	STATUS_WX86_EXCEPTION_CONTINUE                                            NTStatus      = 0x40000020
	STATUS_WX86_EXCEPTION_LASTCHANCE                                          NTStatus      = 0x40000021
	STATUS_WX86_EXCEPTION_CHAIN                                               NTStatus      = 0x40000022
	STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE                                    NTStatus      = 0x40000023
	STATUS_NO_YIELD_PERFORMED                                                 NTStatus      = 0x40000024
	STATUS_TIMER_RESUME_IGNORED                                               NTStatus      = 0x40000025
	STATUS_ARBITRATION_UNHANDLED                                              NTStatus      = 0x40000026
	STATUS_CARDBUS_NOT_SUPPORTED                                              NTStatus      = 0x40000027
	STATUS_WX86_CREATEWX86TIB                                                 NTStatus      = 0x40000028
	STATUS_MP_PROCESSOR_MISMATCH                                              NTStatus      = 0x40000029
	STATUS_HIBERNATED                                                         NTStatus      = 0x4000002A
	STATUS_RESUME_HIBERNATION                                                 NTStatus      = 0x4000002B
	STATUS_FIRMWARE_UPDATED                                                   NTStatus      = 0x4000002C
	STATUS_DRIVERS_LEAKING_LOCKED_PAGES                                       NTStatus      = 0x4000002D
	STATUS_MESSAGE_RETRIEVED                                                  NTStatus      = 0x4000002E
	STATUS_SYSTEM_POWERSTATE_TRANSITION                                       NTStatus      = 0x4000002F
	STATUS_ALPC_CHECK_COMPLETION_LIST                                         NTStatus      = 0x40000030
	STATUS_SYSTEM_POWERSTATE_COMPLEX_TRANSITION                               NTStatus      = 0x40000031
	STATUS_ACCESS_AUDIT_BY_POLICY                                             NTStatus      = 0x40000032
	STATUS_ABANDON_HIBERFILE                                                  NTStatus      = 0x40000033
	STATUS_BIZRULES_NOT_ENABLED                                               NTStatus      = 0x40000034
	STATUS_FT_READ_FROM_COPY                                                  NTStatus      = 0x40000035
	STATUS_IMAGE_AT_DIFFERENT_BASE                                            NTStatus      = 0x40000036
	STATUS_PATCH_DEFERRED                                                     NTStatus      = 0x40000037
	STATUS_HEURISTIC_DAMAGE_POSSIBLE                                          NTStatus      = 0x40190001
	STATUS_GUARD_PAGE_VIOLATION                                               NTStatus      = 0x80000001
	STATUS_DATATYPE_MISALIGNMENT                                              NTStatus      = 0x80000002
	STATUS_BREAKPOINT                                                         NTStatus      = 0x80000003
	STATUS_SINGLE_STEP                                                        NTStatus      = 0x80000004
	STATUS_BUFFER_OVERFLOW                                                    NTStatus      = 0x80000005
	STATUS_NO_MORE_FILES                                                      NTStatus      = 0x80000006
	STATUS_WAKE_SYSTEM_DEBUGGER                                               NTStatus      = 0x80000007
	STATUS_HANDLES_CLOSED                                                     NTStatus      = 0x8000000A
	STATUS_NO_INHERITANCE                                                     NTStatus      = 0x8000000B
	STATUS_GUID_SUBSTITUTION_MADE                                             NTStatus      = 0x8000000C
	STATUS_PARTIAL_COPY                                                       NTStatus      = 0x8000000D
	STATUS_DEVICE_PAPER_EMPTY                                                 NTStatus      = 0x8000000E
	STATUS_DEVICE_POWERED_OFF                                                 NTStatus      = 0x8000000F
	STATUS_DEVICE_OFF_LINE                                                    NTStatus      = 0x80000010
	STATUS_DEVICE_BUSY                                                        NTStatus      = 0x80000011
	STATUS_NO_MORE_EAS                                                        NTStatus      = 0x80000012
	STATUS_INVALID_EA_NAME                                                    NTStatus      = 0x80000013
	STATUS_EA_LIST_INCONSISTENT                                               NTStatus      = 0x80000014
	STATUS_INVALID_EA_FLAG                                                    NTStatus      = 0x80000015
	STATUS_VERIFY_REQUIRED                                                    NTStatus      = 0x80000016
	STATUS_EXTRANEOUS_INFORMATION                                             NTStatus      = 0x80000017
	STATUS_RXACT_COMMIT_NECESSARY                                             NTStatus      = 0x80000018
	STATUS_NO_MORE_ENTRIES                                                    NTStatus      = 0x8000001A
	STATUS_FILEMARK_DETECTED                                                  NTStatus      = 0x8000001B
	STATUS_MEDIA_CHANGED                                                      NTStatus      = 0x8000001C
	STATUS_BUS_RESET                                                          NTStatus      = 0x8000001D
	STATUS_END_OF_MEDIA                                                       NTStatus      = 0x8000001E
	STATUS_BEGINNING_OF_MEDIA                                                 NTStatus      = 0x8000001F
	STATUS_MEDIA_CHECK                                                        NTStatus      = 0x80000020
	STATUS_SETMARK_DETECTED                                                   NTStatus      = 0x80000021
	STATUS_NO_DATA_DETECTED                                                   NTStatus      = 0x80000022
	STATUS_REDIRECTOR_HAS_OPEN_HANDLES                                        NTStatus      = 0x80000023
	STATUS_SERVER_HAS_OPEN_HANDLES                                            NTStatus      = 0x80000024
	STATUS_ALREADY_DISCONNECTED                                               NTStatus      = 0x80000025
	STATUS_LONGJUMP                                                           NTStatus      = 0x80000026
	STATUS_CLEANER_CARTRIDGE_INSTALLED                                        NTStatus      = 0x80000027
	STATUS_PLUGPLAY_QUERY_VETOED                                              NTStatus      = 0x80000028
	STATUS_UNWIND_CONSOLIDATE                                                 NTStatus      = 0x80000029
	STATUS_REGISTRY_HIVE_RECOVERED                                            NTStatus      = 0x8000002A
	STATUS_DLL_MIGHT_BE_INSECURE                                              NTStatus      = 0x8000002B
	STATUS_DLL_MIGHT_BE_INCOMPATIBLE                                          NTStatus      = 0x8000002C
	STATUS_STOPPED_ON_SYMLINK                                                 NTStatus      = 0x8000002D
	STATUS_CANNOT_GRANT_REQUESTED_OPLOCK                                      NTStatus      = 0x8000002E
	STATUS_NO_ACE_CONDITION                                                   NTStatus      = 0x8000002F
	STATUS_DEVICE_SUPPORT_IN_PROGRESS                                         NTStatus      = 0x80000030
	STATUS_DEVICE_POWER_CYCLE_REQUIRED                                        NTStatus      = 0x80000031
	STATUS_NO_WORK_DONE                                                       NTStatus      = 0x80000032
	STATUS_CLUSTER_NODE_ALREADY_UP                                            NTStatus      = 0x80130001
	STATUS_CLUSTER_NODE_ALREADY_DOWN                                          NTStatus      = 0x80130002
	STATUS_CLUSTER_NETWORK_ALREADY_ONLINE                                     NTStatus      = 0x80130003
	STATUS_CLUSTER_NETWORK_ALREADY_OFFLINE                                    NTStatus      = 0x80130004
	STATUS_CLUSTER_NODE_ALREADY_MEMBER                                        NTStatus      = 0x80130005
	STATUS_FLT_BUFFER_TOO_SMALL                                               NTStatus      = 0x801C0001
	STATUS_FVE_PARTIAL_METADATA                                               NTStatus      = 0x80210001
	STATUS_FVE_TRANSIENT_STATE                                                NTStatus      = 0x80210002
	STATUS_CLOUD_FILE_PROPERTY_BLOB_CHECKSUM_MISMATCH                         NTStatus      = 0x8000CF00
	STATUS_UNSUCCESSFUL                                                       NTStatus      = 0xC0000001
	STATUS_NOT_IMPLEMENTED                                                    NTStatus      = 0xC0000002
	STATUS_INVALID_INFO_CLASS                                                 NTStatus      = 0xC0000003
	STATUS_INFO_LENGTH_MISMATCH                                               NTStatus      = 0xC0000004
	STATUS_ACCESS_VIOLATION                                                   NTStatus      = 0xC0000005
	STATUS_IN_PAGE_ERROR                                                      NTStatus      = 0xC0000006
	STATUS_PAGEFILE_QUOTA                                                     NTStatus      = 0xC0000007
	STATUS_INVALID_HANDLE                                                     NTStatus      = 0xC0000008
	STATUS_BAD_INITIAL_STACK                                                  NTStatus      = 0xC0000009
	STATUS_BAD_INITIAL_PC                                                     NTStatus      = 0xC000000A
	STATUS_INVALID_CID                                                        NTStatus      = 0xC000000B
	STATUS_TIMER_NOT_CANCELED                                                 NTStatus      = 0xC000000C
	STATUS_INVALID_PARAMETER                                                  NTStatus      = 0xC000000D
	STATUS_NO_SUCH_DEVICE                                                     NTStatus      = 0xC000000E
	STATUS_NO_SUCH_FILE                                                       NTStatus      = 0xC000000F
	STATUS_INVALID_DEVICE_REQUEST                                             NTStatus      = 0xC0000010
	STATUS_END_OF_FILE                                                        NTStatus      = 0xC0000011
	STATUS_WRONG_VOLUME                                                       NTStatus      = 0xC0000012
	STATUS_NO_MEDIA_IN_DEVICE                                                 NTStatus      = 0xC0000013
	STATUS_UNRECOGNIZED_MEDIA                                                 NTStatus      = 0xC0000014
	STATUS_NONEXISTENT_SECTOR                                                 NTStatus      = 0xC0000015
	STATUS_MORE_PROCESSING_REQUIRED                                           NTStatus      = 0xC0000016
	STATUS_NO_MEMORY                                                          NTStatus      = 0xC0000017
	STATUS_CONFLICTING_ADDRESSES                                              NTStatus      = 0xC0000018
	STATUS_NOT_MAPPED_VIEW                                                    NTStatus      = 0xC0000019
	STATUS_UNABLE_TO_FREE_VM                                                  NTStatus      = 0xC000001A
	STATUS_UNABLE_TO_DELETE_SECTION                                           NTStatus      = 0xC000001B
	STATUS_INVALID_SYSTEM_SERVICE                                             NTStatus      = 0xC000001C
	STATUS_ILLEGAL_INSTRUCTION                                                NTStatus      = 0xC000001D
	STATUS_INVALID_LOCK_SEQUENCE                                              NTStatus      = 0xC000001E
	STATUS_INVALID_VIEW_SIZE                                                  NTStatus      = 0xC000001F
	STATUS_INVALID_FILE_FOR_SECTION                                           NTStatus      = 0xC0000020
	STATUS_ALREADY_COMMITTED                                                  NTStatus      = 0xC0000021
	STATUS_ACCESS_DENIED                                                      NTStatus      = 0xC0000022
	STATUS_BUFFER_TOO_SMALL                                                   NTStatus      = 0xC0000023
	STATUS_OBJECT_TYPE_MISMATCH                                               NTStatus      = 0xC0000024
	STATUS_NONCONTINUABLE_EXCEPTION                                           NTStatus      = 0xC0000025
	STATUS_INVALID_DISPOSITION                                                NTStatus      = 0xC0000026
	STATUS_UNWIND                                                             NTStatus      = 0xC0000027
	STATUS_BAD_STACK                                                          NTStatus      = 0xC0000028
	STATUS_INVALID_UNWIND_TARGET                                              NTStatus      = 0xC0000029
	STATUS_NOT_LOCKED                                                         NTStatus      = 0xC000002A
	STATUS_PARITY_ERROR                                                       NTStatus      = 0xC000002B
	STATUS_UNABLE_TO_DECOMMIT_VM                                              NTStatus      = 0xC000002C
	STATUS_NOT_COMMITTED                                                      NTStatus      = 0xC000002D
	STATUS_INVALID_PORT_ATTRIBUTES                                            NTStatus      = 0xC000002E
	STATUS_PORT_MESSAGE_TOO_LONG                                              NTStatus      = 0xC000002F
	STATUS_INVALID_PARAMETER_MIX                                              NTStatus      = 0xC0000030
	STATUS_INVALID_QUOTA_LOWER                                                NTStatus      = 0xC0000031
	STATUS_DISK_CORRUPT_ERROR                                                 NTStatus      = 0xC0000032
	STATUS_OBJECT_NAME_INVALID                                                NTStatus      = 0xC0000033
	STATUS_OBJECT_NAME_NOT_FOUND                                              NTStatus      = 0xC0000034
	STATUS_OBJECT_NAME_COLLISION                                              NTStatus      = 0xC0000035
	STATUS_PORT_DO_NOT_DISTURB                                                NTStatus      = 0xC0000036
	STATUS_PORT_DISCONNECTED                                                  NTStatus      = 0xC0000037
	STATUS_DEVICE_ALREADY_ATTACHED                                            NTStatus      = 0xC0000038
	STATUS_OBJECT_PATH_INVALID                                                NTStatus      = 0xC0000039
	STATUS_OBJECT_PATH_NOT_FOUND                                              NTStatus      = 0xC000003A
	STATUS_OBJECT_PATH_SYNTAX_BAD                                             NTStatus      = 0xC000003B
	STATUS_DATA_OVERRUN                                                       NTStatus      = 0xC000003C
	STATUS_DATA_LATE_ERROR                                                    NTStatus      = 0xC000003D
	STATUS_DATA_ERROR                                                         NTStatus      = 0xC000003E
	STATUS_CRC_ERROR                                                          NTStatus      = 0xC000003F
	STATUS_SECTION_TOO_BIG                                                    NTStatus      = 0xC0000040
	STATUS_PORT_CONNECTION_REFUSED                                            NTStatus      = 0xC0000041
	STATUS_INVALID_PORT_HANDLE                                                NTStatus      = 0xC0000042
	STATUS_SHARING_VIOLATION                                                  NTStatus      = 0xC0000043
	STATUS_QUOTA_EXCEEDED                                                     NTStatus      = 0xC0000044
	STATUS_INVALID_PAGE_PROTECTION                                            NTStatus      = 0xC0000045
	STATUS_MUTANT_NOT_OWNED                                                   NTStatus      = 0xC0000046
	STATUS_SEMAPHORE_LIMIT_EXCEEDED                                           NTStatus      = 0xC0000047
	STATUS_PORT_ALREADY_SET                                                   NTStatus      = 0xC0000048
	STATUS_SECTION_NOT_IMAGE                                                  NTStatus      = 0xC0000049
	STATUS_SUSPEND_COUNT_EXCEEDED                                             NTStatus      = 0xC000004A
	STATUS_THREAD_IS_TERMINATING                                              NTStatus      = 0xC000004B
	STATUS_BAD_WORKING_SET_LIMIT                                              NTStatus      = 0xC000004C
	STATUS_INCOMPATIBLE_FILE_MAP                                              NTStatus      = 0xC000004D
	STATUS_SECTION_PROTECTION                                                 NTStatus      = 0xC000004E
	STATUS_EAS_NOT_SUPPORTED                                                  NTStatus      = 0xC000004F
	STATUS_EA_TOO_LARGE                                                       NTStatus      = 0xC0000050
	STATUS_NONEXISTENT_EA_ENTRY                                               NTStatus      = 0xC0000051
	STATUS_NO_EAS_ON_FILE                                                     NTStatus      = 0xC0000052
	STATUS_EA_CORRUPT_ERROR                                                   NTStatus      = 0xC0000053
	STATUS_FILE_LOCK_CONFLICT                                                 NTStatus      = 0xC0000054
	STATUS_LOCK_NOT_GRANTED                                                   NTStatus      = 0xC0000055
	STATUS_DELETE_PENDING                                                     NTStatus      = 0xC0000056
	STATUS_CTL_FILE_NOT_SUPPORTED                                             NTStatus      = 0xC0000057
	STATUS_UNKNOWN_REVISION                                                   NTStatus      = 0xC0000058
	STATUS_REVISION_MISMATCH                                                  NTStatus      = 0xC0000059
	STATUS_INVALID_OWNER                                                      NTStatus      = 0xC000005A
	STATUS_INVALID_PRIMARY_GROUP                                              NTStatus      = 0xC000005B
	STATUS_NO_IMPERSONATION_TOKEN                                             NTStatus      = 0xC000005C
	STATUS_CANT_DISABLE_MANDATORY                                             NTStatus      = 0xC000005D
	STATUS_NO_LOGON_SERVERS                                                   NTStatus      = 0xC000005E
	STATUS_NO_SUCH_LOGON_SESSION                                              NTStatus      = 0xC000005F
	STATUS_NO_SUCH_PRIVILEGE                                                  NTStatus      = 0xC0000060
	STATUS_PRIVILEGE_NOT_HELD                                                 NTStatus      = 0xC0000061
	STATUS_INVALID_ACCOUNT_NAME                                               NTStatus      = 0xC0000062
	STATUS_USER_EXISTS                                                        NTStatus      = 0xC0000063
	STATUS_NO_SUCH_USER                                                       NTStatus      = 0xC0000064
	STATUS_GROUP_EXISTS                                                       NTStatus      = 0xC0000065
	STATUS_NO_SUCH_GROUP                                                      NTStatus      = 0xC0000066
	STATUS_MEMBER_IN_GROUP                                                    NTStatus      = 0xC0000067
	STATUS_MEMBER_NOT_IN_GROUP                                                NTStatus      = 0xC0000068
	STATUS_LAST_ADMIN                                                         NTStatus      = 0xC0000069
	STATUS_WRONG_PASSWORD                                                     NTStatus      = 0xC000006A
	STATUS_ILL_FORMED_PASSWORD                                                NTStatus      = 0xC000006B
	STATUS_PASSWORD_RESTRICTION                                               NTStatus      = 0xC000006C
	STATUS_LOGON_FAILURE                                                      NTStatus      = 0xC000006D
	STATUS_ACCOUNT_RESTRICTION                                                NTStatus      = 0xC000006E
	STATUS_INVALID_LOGON_HOURS                                                NTStatus      = 0xC000006F
	STATUS_INVALID_WORKSTATION                                                NTStatus      = 0xC0000070
	STATUS_PASSWORD_EXPIRED                                                   NTStatus      = 0xC0000071
	STATUS_ACCOUNT_DISABLED                                                   NTStatus      = 0xC0000072
	STATUS_NONE_MAPPED                                                        NTStatus      = 0xC0000073
	STATUS_TOO_MANY_LUIDS_REQUESTED                                           NTStatus      = 0xC0000074
	STATUS_LUIDS_EXHAUSTED                                                    NTStatus      = 0xC0000075
	STATUS_INVALID_SUB_AUTHORITY                                              NTStatus      = 0xC0000076
	STATUS_INVALID_ACL                                                        NTStatus      = 0xC0000077
	STATUS_INVALID_SID                                                        NTStatus      = 0xC0000078
	STATUS_INVALID_SECURITY_DESCR                                             NTStatus      = 0xC0000079
	STATUS_PROCEDURE_NOT_FOUND                                                NTStatus      = 0xC000007A
	STATUS_INVALID_IMAGE_FORMAT                                               NTStatus      = 0xC000007B
	STATUS_NO_TOKEN                                                           NTStatus      = 0xC000007C
	STATUS_BAD_INHERITANCE_ACL                                                NTStatus      = 0xC000007D
	STATUS_RANGE_NOT_LOCKED                                                   NTStatus      = 0xC000007E
	STATUS_DISK_FULL                                                          NTStatus      = 0xC000007F
	STATUS_SERVER_DISABLED                                                    NTStatus      = 0xC0000080
	STATUS_SERVER_NOT_DISABLED                                                NTStatus      = 0xC0000081
	STATUS_TOO_MANY_GUIDS_REQUESTED                                           NTStatus      = 0xC0000082
	STATUS_GUIDS_EXHAUSTED                                                    NTStatus      = 0xC0000083
	STATUS_INVALID_ID_AUTHORITY                                               NTStatus      = 0xC0000084
	STATUS_AGENTS_EXHAUSTED                                                   NTStatus      = 0xC0000085
	STATUS_INVALID_VOLUME_LABEL                                               NTStatus      = 0xC0000086
	STATUS_SECTION_NOT_EXTENDED                                               NTStatus      = 0xC0000087
	STATUS_NOT_MAPPED_DATA                                                    NTStatus      = 0xC0000088
	STATUS_RESOURCE_DATA_NOT_FOUND                                            NTStatus      = 0xC0000089
	STATUS_RESOURCE_TYPE_NOT_FOUND                                            NTStatus      = 0xC000008A
	STATUS_RESOURCE_NAME_NOT_FOUND                                            NTStatus      = 0xC000008B
	STATUS_ARRAY_BOUNDS_EXCEEDED                                              NTStatus      = 0xC000008C
	STATUS_FLOAT_DENORMAL_OPERAND                                             NTStatus      = 0xC000008D
	STATUS_FLOAT_DIVIDE_BY_ZERO                                               NTStatus      = 0xC000008E
	STATUS_FLOAT_INEXACT_RESULT                                               NTStatus      = 0xC000008F
	STATUS_FLOAT_INVALID_OPERATION                                            NTStatus      = 0xC0000090
	STATUS_FLOAT_OVERFLOW                                                     NTStatus      = 0xC0000091
	STATUS_FLOAT_STACK_CHECK                                                  NTStatus      = 0xC0000092
	STATUS_FLOAT_UNDERFLOW                                                    NTStatus      = 0xC0000093
	STATUS_INTEGER_DIVIDE_BY_ZERO                                             NTStatus      = 0xC0000094
	STATUS_INTEGER_OVERFLOW                                                   NTStatus      = 0xC0000095
	STATUS_PRIVILEGED_INSTRUCTION                                             NTStatus      = 0xC0000096
	STATUS_TOO_MANY_PAGING_FILES                                              NTStatus      = 0xC0000097
	STATUS_FILE_INVALID                                                       NTStatus      = 0xC0000098
	STATUS_ALLOTTED_SPACE_EXCEEDED                                            NTStatus      = 0xC0000099
	STATUS_INSUFFICIENT_RESOURCES                                             NTStatus      = 0xC000009A
	STATUS_DFS_EXIT_PATH_FOUND                                                NTStatus      = 0xC000009B
	STATUS_DEVICE_DATA_ERROR                                                  NTStatus      = 0xC000009C
	STATUS_DEVICE_NOT_CONNECTED                                               NTStatus      = 0xC000009D
	STATUS_DEVICE_POWER_FAILURE                                               NTStatus      = 0xC000009E
	STATUS_FREE_VM_NOT_AT_BASE                                                NTStatus      = 0xC000009F
	STATUS_MEMORY_NOT_ALLOCATED                                               NTStatus      = 0xC00000A0
	STATUS_WORKING_SET_QUOTA                                                  NTStatus      = 0xC00000A1
	STATUS_MEDIA_WRITE_PROTECTED                                              NTStatus      = 0xC00000A2
	STATUS_DEVICE_NOT_READY                                                   NTStatus      = 0xC00000A3
	STATUS_INVALID_GROUP_ATTRIBUTES                                           NTStatus      = 0xC00000A4
	STATUS_BAD_IMPERSONATION_LEVEL                                            NTStatus      = 0xC00000A5
	STATUS_CANT_OPEN_ANONYMOUS                                                NTStatus      = 0xC00000A6
	STATUS_BAD_VALIDATION_CLASS                                               NTStatus      = 0xC00000A7
	STATUS_BAD_TOKEN_TYPE                                                     NTStatus      = 0xC00000A8
	STATUS_BAD_MASTER_BOOT_RECORD                                             NTStatus      = 0xC00000A9
	STATUS_INSTRUCTION_MISALIGNMENT                                           NTStatus      = 0xC00000AA
	STATUS_INSTANCE_NOT_AVAILABLE                                             NTStatus      = 0xC00000AB
	STATUS_PIPE_NOT_AVAILABLE                                                 NTStatus      = 0xC00000AC
	STATUS_INVALID_PIPE_STATE                                                 NTStatus      = 0xC00000AD
	STATUS_PIPE_BUSY                                                          NTStatus      = 0xC00000AE
	STATUS_ILLEGAL_FUNCTION                                                   NTStatus      = 0xC00000AF
	STATUS_PIPE_DISCONNECTED                                                  NTStatus      = 0xC00000B0
	STATUS_PIPE_CLOSING                                                       NTStatus      = 0xC00000B1
	STATUS_PIPE_CONNECTED                                                     NTStatus      = 0xC00000B2
	STATUS_PIPE_LISTENING                                                     NTStatus      = 0xC00000B3
	STATUS_INVALID_READ_MODE                                                  NTStatus      = 0xC00000B4
	STATUS_IO_TIMEOUT                                                         NTStatus      = 0xC00000B5
	STATUS_FILE_FORCED_CLOSED                                                 NTStatus      = 0xC00000B6
	STATUS_PROFILING_NOT_STARTED                                              NTStatus      = 0xC00000B7
	STATUS_PROFILING_NOT_STOPPED                                              NTStatus      = 0xC00000B8
	STATUS_COULD_NOT_INTERPRET                                                NTStatus      = 0xC00000B9
	STATUS_FILE_IS_A_DIRECTORY                                                NTStatus      = 0xC00000BA
	STATUS_NOT_SUPPORTED                                                      NTStatus      = 0xC00000BB
	STATUS_REMOTE_NOT_LISTENING                                               NTStatus      = 0xC00000BC
	STATUS_DUPLICATE_NAME                                                     NTStatus      = 0xC00000BD
	STATUS_BAD_NETWORK_PATH                                                   NTStatus      = 0xC00000BE
	STATUS_NETWORK_BUSY                                                       NTStatus      = 0xC00000BF
	STATUS_DEVICE_DOES_NOT_EXIST                                              NTStatus      = 0xC00000C0
	STATUS_TOO_MANY_COMMANDS                                                  NTStatus      = 0xC00000C1
	STATUS_ADAPTER_HARDWARE_ERROR                                             NTStatus      = 0xC00000C2
	STATUS_INVALID_NETWORK_RESPONSE                                           NTStatus      = 0xC00000C3
	STATUS_UNEXPECTED_NETWORK_ERROR                                           NTStatus      = 0xC00000C4
	STATUS_BAD_REMOTE_ADAPTER                                                 NTStatus      = 0xC00000C5
	STATUS_PRINT_QUEUE_FULL                                                   NTStatus      = 0xC00000C6
	STATUS_NO_SPOOL_SPACE                                                     NTStatus      = 0xC00000C7
	STATUS_PRINT_CANCELLED                                                    NTStatus      = 0xC00000C8
	STATUS_NETWORK_NAME_DELETED                                               NTStatus      = 0xC00000C9
	STATUS_NETWORK_ACCESS_DENIED                                              NTStatus      = 0xC00000CA
	STATUS_BAD_DEVICE_TYPE                                                    NTStatus      = 0xC00000CB
	STATUS_BAD_NETWORK_NAME                                                   NTStatus      = 0xC00000CC
	STATUS_TOO_MANY_NAMES                                                     NTStatus      = 0xC00000CD
	STATUS_TOO_MANY_SESSIONS                                                  NTStatus      = 0xC00000CE
	STATUS_SHARING_PAUSED                                                     NTStatus      = 0xC00000CF
	STATUS_REQUEST_NOT_ACCEPTED                                               NTStatus      = 0xC00000D0
	STATUS_REDIRECTOR_PAUSED                                                  NTStatus      = 0xC00000D1
	STATUS_NET_WRITE_FAULT                                                    NTStatus      = 0xC00000D2
	STATUS_PROFILING_AT_LIMIT                                                 NTStatus      = 0xC00000D3
	STATUS_NOT_SAME_DEVICE                                                    NTStatus      = 0xC00000D4
	STATUS_FILE_RENAMED                                                       NTStatus      = 0xC00000D5
	STATUS_VIRTUAL_CIRCUIT_CLOSED                                             NTStatus      = 0xC00000D6
	STATUS_NO_SECURITY_ON_OBJECT                                              NTStatus      = 0xC00000D7
	STATUS_CANT_WAIT                                                          NTStatus      = 0xC00000D8
	STATUS_PIPE_EMPTY                                                         NTStatus      = 0xC00000D9
	STATUS_CANT_ACCESS_DOMAIN_INFO                                            NTStatus      = 0xC00000DA
	STATUS_CANT_TERMINATE_SELF                                                NTStatus      = 0xC00000DB
	STATUS_INVALID_SERVER_STATE                                               NTStatus      = 0xC00000DC
	STATUS_INVALID_DOMAIN_STATE                                               NTStatus      = 0xC00000DD
	STATUS_INVALID_DOMAIN_ROLE                                                NTStatus      = 0xC00000DE
	STATUS_NO_SUCH_DOMAIN                                                     NTStatus      = 0xC00000DF
	STATUS_DOMAIN_EXISTS                                                      NTStatus      = 0xC00000E0
	STATUS_DOMAIN_LIMIT_EXCEEDED                                              NTStatus      = 0xC00000E1
	STATUS_OPLOCK_NOT_GRANTED                                                 NTStatus      = 0xC00000E2
	STATUS_INVALID_OPLOCK_PROTOCOL                                            NTStatus      = 0xC00000E3
	STATUS_INTERNAL_DB_CORRUPTION                                             NTStatus      = 0xC00000E4
	STATUS_INTERNAL_ERROR                                                     NTStatus      = 0xC00000E5
	STATUS_GENERIC_NOT_MAPPED                                                 NTStatus      = 0xC00000E6
	STATUS_BAD_DESCRIPTOR_FORMAT                                              NTStatus      = 0xC00000E7
	STATUS_INVALID_USER_BUFFER                                                NTStatus      = 0xC00000E8
	STATUS_UNEXPECTED_IO_ERROR                                                NTStatus      = 0xC00000E9
	STATUS_UNEXPECTED_MM_CREATE_ERR                                           NTStatus      = 0xC00000EA
	STATUS_UNEXPECTED_MM_MAP_ERROR                                            NTStatus      = 0xC00000EB
	STATUS_UNEXPECTED_MM_EXTEND_ERR                                           NTStatus      = 0xC00000EC
	STATUS_NOT_LOGON_PROCESS                                                  NTStatus      = 0xC00000ED
	STATUS_LOGON_SESSION_EXISTS                                               NTStatus      = 0xC00000EE
	STATUS_INVALID_PARAMETER_1                                                NTStatus      = 0xC00000EF
	STATUS_INVALID_PARAMETER_2                                                NTStatus      = 0xC00000F0
	STATUS_INVALID_PARAMETER_3                                                NTStatus      = 0xC00000F1
	STATUS_INVALID_PARAMETER_4                                                NTStatus      = 0xC00000F2
	STATUS_INVALID_PARAMETER_5                                                NTStatus      = 0xC00000F3
	STATUS_INVALID_PARAMETER_6                                                NTStatus      = 0xC00000F4
	STATUS_INVALID_PARAMETER_7                                                NTStatus      = 0xC00000F5
	STATUS_INVALID_PARAMETER_8                                                NTStatus      = 0xC00000F6
	STATUS_INVALID_PARAMETER_9                                                NTStatus      = 0xC00000F7
	STATUS_INVALID_PARAMETER_10                                               NTStatus      = 0xC00000F8
	STATUS_INVALID_PARAMETER_11                                               NTStatus      = 0xC00000F9
	STATUS_INVALID_PARAMETER_12                                               NTStatus      = 0xC00000FA
	STATUS_REDIRECTOR_NOT_STARTED                                             NTStatus      = 0xC00000FB
	STATUS_REDIRECTOR_STARTED                                                 NTStatus      = 0xC00000FC
	STATUS_STACK_OVERFLOW                                                     NTStatus      = 0xC00000FD
	STATUS_NO_SUCH_PACKAGE                                                    NTStatus      = 0xC00000FE
	STATUS_BAD_FUNCTION_TABLE                                                 NTStatus      = 0xC00000FF
	STATUS_VARIABLE_NOT_FOUND                                                 NTStatus      = 0xC0000100
	STATUS_DIRECTORY_NOT_EMPTY                                                NTStatus      = 0xC0000101
	STATUS_FILE_CORRUPT_ERROR                                                 NTStatus      = 0xC0000102
	STATUS_NOT_A_DIRECTORY                                                    NTStatus      = 0xC0000103
	STATUS_BAD_LOGON_SESSION_STATE                                            NTStatus      = 0xC0000104
	STATUS_LOGON_SESSION_COLLISION                                            NTStatus      = 0xC0000105
	STATUS_NAME_TOO_LONG                                                      NTStatus      = 0xC0000106
	STATUS_FILES_OPEN                                                         NTStatus      = 0xC0000107
	STATUS_CONNECTION_IN_USE                                                  NTStatus      = 0xC0000108
	STATUS_MESSAGE_NOT_FOUND                                                  NTStatus      = 0xC0000109
	STATUS_PROCESS_IS_TERMINATING                                             NTStatus      = 0xC000010A
	STATUS_INVALID_LOGON_TYPE                                                 NTStatus      = 0xC000010B
	STATUS_NO_GUID_TRANSLATION                                                NTStatus      = 0xC000010C
	STATUS_CANNOT_IMPERSONATE                                                 NTStatus      = 0xC000010D
	STATUS_IMAGE_ALREADY_LOADED                                               NTStatus      = 0xC000010E
	STATUS_ABIOS_NOT_PRESENT                                                  NTStatus      = 0xC000010F
	STATUS_ABIOS_LID_NOT_EXIST                                                NTStatus      = 0xC0000110
	STATUS_ABIOS_LID_ALREADY_OWNED                                            NTStatus      = 0xC0000111
	STATUS_ABIOS_NOT_LID_OWNER                                                NTStatus      = 0xC0000112
	STATUS_ABIOS_INVALID_COMMAND                                              NTStatus      = 0xC0000113
	STATUS_ABIOS_INVALID_LID                                                  NTStatus      = 0xC0000114
	STATUS_ABIOS_SELECTOR_NOT_AVAILABLE                                       NTStatus      = 0xC0000115
	STATUS_ABIOS_INVALID_SELECTOR                                             NTStatus      = 0xC0000116
	STATUS_NO_LDT                                                             NTStatus      = 0xC0000117
	STATUS_INVALID_LDT_SIZE                                                   NTStatus      = 0xC0000118
	STATUS_INVALID_LDT_OFFSET                                                 NTStatus      = 0xC0000119
	STATUS_INVALID_LDT_DESCRIPTOR                                             NTStatus      = 0xC000011A
	STATUS_INVALID_IMAGE_NE_FORMAT                                            NTStatus      = 0xC000011B
	STATUS_RXACT_INVALID_STATE                                                NTStatus      = 0xC000011C
	STATUS_RXACT_COMMIT_FAILURE                                               NTStatus      = 0xC000011D
	STATUS_MAPPED_FILE_SIZE_ZERO                                              NTStatus      = 0xC000011E
	STATUS_TOO_MANY_OPENED_FILES                                              NTStatus      = 0xC000011F
	STATUS_CANCELLED                                                          NTStatus      = 0xC0000120
	STATUS_CANNOT_DELETE                                                      NTStatus      = 0xC0000121
	STATUS_INVALID_COMPUTER_NAME                                              NTStatus      = 0xC0000122
	STATUS_FILE_DELETED                                                       NTStatus      = 0xC0000123
	STATUS_SPECIAL_ACCOUNT                                                    NTStatus      = 0xC0000124
	STATUS_SPECIAL_GROUP                                                      NTStatus      = 0xC0000125
	STATUS_SPECIAL_USER                                                       NTStatus      = 0xC0000126
	STATUS_MEMBERS_PRIMARY_GROUP                                              NTStatus      = 0xC0000127
	STATUS_FILE_CLOSED                                                        NTStatus      = 0xC0000128
	STATUS_TOO_MANY_THREADS                                                   NTStatus      = 0xC0000129
	STATUS_THREAD_NOT_IN_PROCESS                                              NTStatus      = 0xC000012A
	STATUS_TOKEN_ALREADY_IN_USE                                               NTStatus      = 0xC000012B
	STATUS_PAGEFILE_QUOTA_EXCEEDED                                            NTStatus      = 0xC000012C
	STATUS_COMMITMENT_LIMIT                                                   NTStatus      = 0xC000012D
	STATUS_INVALID_IMAGE_LE_FORMAT                                            NTStatus      = 0xC000012E
	STATUS_INVALID_IMAGE_NOT_MZ                                               NTStatus      = 0xC000012F
	STATUS_INVALID_IMAGE_PROTECT                                              NTStatus      = 0xC0000130
	STATUS_INVALID_IMAGE_WIN_16                                               NTStatus      = 0xC0000131
	STATUS_LOGON_SERVER_CONFLICT                                              NTStatus      = 0xC0000132
	STATUS_TIME_DIFFERENCE_AT_DC                                              NTStatus      = 0xC0000133
	STATUS_SYNCHRONIZATION_REQUIRED                                           NTStatus      = 0xC0000134
	STATUS_DLL_NOT_FOUND                                                      NTStatus      = 0xC0000135
	STATUS_OPEN_FAILED                                                        NTStatus      = 0xC0000136
	STATUS_IO_PRIVILEGE_FAILED                                                NTStatus      = 0xC0000137
	STATUS_ORDINAL_NOT_FOUND                                                  NTStatus      = 0xC0000138
	STATUS_ENTRYPOINT_NOT_FOUND                                               NTStatus      = 0xC0000139
	STATUS_CONTROL_C_EXIT                                                     NTStatus      = 0xC000013A
	STATUS_LOCAL_DISCONNECT                                                   NTStatus      = 0xC000013B
	STATUS_REMOTE_DISCONNECT                                                  NTStatus      = 0xC000013C
	STATUS_REMOTE_RESOURCES                                                   NTStatus      = 0xC000013D
	STATUS_LINK_FAILED                                                        NTStatus      = 0xC000013E
	STATUS_LINK_TIMEOUT                                                       NTStatus      = 0xC000013F
	STATUS_INVALID_CONNECTION                                                 NTStatus      = 0xC0000140
	STATUS_INVALID_ADDRESS                                                    NTStatus      = 0xC0000141
	STATUS_DLL_INIT_FAILED                                                    NTStatus      = 0xC0000142
	STATUS_MISSING_SYSTEMFILE                                                 NTStatus      = 0xC0000143
	STATUS_UNHANDLED_EXCEPTION                                                NTStatus      = 0xC0000144
	STATUS_APP_INIT_FAILURE                                                   NTStatus      = 0xC0000145
	STATUS_PAGEFILE_CREATE_FAILED                                             NTStatus      = 0xC0000146
	STATUS_NO_PAGEFILE                                                        NTStatus      = 0xC0000147
	STATUS_INVALID_LEVEL                                                      NTStatus      = 0xC0000148
	STATUS_WRONG_PASSWORD_CORE                                                NTStatus      = 0xC0000149
	STATUS_ILLEGAL_FLOAT_CONTEXT                                              NTStatus      = 0xC000014A
	STATUS_PIPE_BROKEN                                                        NTStatus      = 0xC000014B
	STATUS_REGISTRY_CORRUPT                                                   NTStatus      = 0xC000014C
	STATUS_REGISTRY_IO_FAILED                                                 NTStatus      = 0xC000014D
	STATUS_NO_EVENT_PAIR                                                      NTStatus      = 0xC000014E
	STATUS_UNRECOGNIZED_VOLUME                                                NTStatus      = 0xC000014F
	STATUS_SERIAL_NO_DEVICE_INITED                                            NTStatus      = 0xC0000150
	STATUS_NO_SUCH_ALIAS                                                      NTStatus      = 0xC0000151
	STATUS_MEMBER_NOT_IN_ALIAS                                                NTStatus      = 0xC0000152
	STATUS_MEMBER_IN_ALIAS                                                    NTStatus      = 0xC0000153
	STATUS_ALIAS_EXISTS                                                       NTStatus      = 0xC0000154
	STATUS_LOGON_NOT_GRANTED                                                  NTStatus      = 0xC0000155
	STATUS_TOO_MANY_SECRETS                                                   NTStatus      = 0xC0000156
	STATUS_SECRET_TOO_LONG                                                    NTStatus      = 0xC0000157
	STATUS_INTERNAL_DB_ERROR                                                  NTStatus      = 0xC0000158
	STATUS_FULLSCREEN_MODE                                                    NTStatus      = 0xC0000159
	STATUS_TOO_MANY_CONTEXT_IDS                                               NTStatus      = 0xC000015A
	STATUS_LOGON_TYPE_NOT_GRANTED                                             NTStatus      = 0xC000015B
	STATUS_NOT_REGISTRY_FILE                                                  NTStatus      = 0xC000015C
	STATUS_NT_CROSS_ENCRYPTION_REQUIRED                                       NTStatus      = 0xC000015D
	STATUS_DOMAIN_CTRLR_CONFIG_ERROR                                          NTStatus      = 0xC000015E
	STATUS_FT_MISSING_MEMBER                                                  NTStatus      = 0xC000015F
	STATUS_ILL_FORMED_SERVICE_ENTRY                                           NTStatus      = 0xC0000160
	STATUS_ILLEGAL_CHARACTER                                                  NTStatus      = 0xC0000161
	STATUS_UNMAPPABLE_CHARACTER                                               NTStatus      = 0xC0000162
	STATUS_UNDEFINED_CHARACTER                                                NTStatus      = 0xC0000163
	STATUS_FLOPPY_VOLUME                                                      NTStatus      = 0xC0000164
	STATUS_FLOPPY_ID_MARK_NOT_FOUND                                           NTStatus      = 0xC0000165
	STATUS_FLOPPY_WRONG_CYLINDER                                              NTStatus      = 0xC0000166
	STATUS_FLOPPY_UNKNOWN_ERROR                                               NTStatus      = 0xC0000167
	STATUS_FLOPPY_BAD_REGISTERS                                               NTStatus      = 0xC0000168
	STATUS_DISK_RECALIBRATE_FAILED                                            NTStatus      = 0xC0000169
	STATUS_DISK_OPERATION_FAILED                                              NTStatus      = 0xC000016A
	STATUS_DISK_RESET_FAILED                                                  NTStatus      = 0xC000016B
	STATUS_SHARED_IRQ_BUSY                                                    NTStatus      = 0xC000016C
	STATUS_FT_ORPHANING                                                       NTStatus      = 0xC000016D
	STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT                                   NTStatus      = 0xC000016E
	STATUS_PARTITION_FAILURE                                                  NTStatus      = 0xC0000172
	STATUS_INVALID_BLOCK_LENGTH                                               NTStatus      = 0xC0000173
	STATUS_DEVICE_NOT_PARTITIONED                                             NTStatus      = 0xC0000174
	STATUS_UNABLE_TO_LOCK_MEDIA                                               NTStatus      = 0xC0000175
	STATUS_UNABLE_TO_UNLOAD_MEDIA                                             NTStatus      = 0xC0000176
	STATUS_EOM_OVERFLOW                                                       NTStatus      = 0xC0000177
	STATUS_NO_MEDIA                                                           NTStatus      = 0xC0000178
	STATUS_NO_SUCH_MEMBER                                                     NTStatus      = 0xC000017A
	STATUS_INVALID_MEMBER                                                     NTStatus      = 0xC000017B
	STATUS_KEY_DELETED                                                        NTStatus      = 0xC000017C
	STATUS_NO_LOG_SPACE                                                       NTStatus      = 0xC000017D
	STATUS_TOO_MANY_SIDS                                                      NTStatus      = 0xC000017E
	STATUS_LM_CROSS_ENCRYPTION_REQUIRED                                       NTStatus      = 0xC000017F
	STATUS_KEY_HAS_CHILDREN                                                   NTStatus      = 0xC0000180
	STATUS_CHILD_MUST_BE_VOLATILE                                             NTStatus      = 0xC0000181
	STATUS_DEVICE_CONFIGURATION_ERROR                                         NTStatus      = 0xC0000182
	STATUS_DRIVER_INTERNAL_ERROR                                              NTStatus      = 0xC0000183
	STATUS_INVALID_DEVICE_STATE                                               NTStatus      = 0xC0000184
	STATUS_IO_DEVICE_ERROR                                                    NTStatus      = 0xC0000185
	STATUS_DEVICE_PROTOCOL_ERROR                                              NTStatus      = 0xC0000186
	STATUS_BACKUP_CONTROLLER                                                  NTStatus      = 0xC0000187
	STATUS_LOG_FILE_FULL                                                      NTStatus      = 0xC0000188
	STATUS_TOO_LATE                                                           NTStatus      = 0xC0000189
	STATUS_NO_TRUST_LSA_SECRET                                                NTStatus      = 0xC000018A
	STATUS_NO_TRUST_SAM_ACCOUNT                                               NTStatus      = 0xC000018B
	STATUS_TRUSTED_DOMAIN_FAILURE                                             NTStatus      = 0xC000018C
	STATUS_TRUSTED_RELATIONSHIP_FAILURE                                       NTStatus      = 0xC000018D
	STATUS_EVENTLOG_FILE_CORRUPT                                              NTStatus      = 0xC000018E
	STATUS_EVENTLOG_CANT_START                                                NTStatus      = 0xC000018F
	STATUS_TRUST_FAILURE                                                      NTStatus      = 0xC0000190
	STATUS_MUTANT_LIMIT_EXCEEDED                                              NTStatus      = 0xC0000191
	STATUS_NETLOGON_NOT_STARTED                                               NTStatus      = 0xC0000192
	STATUS_ACCOUNT_EXPIRED                                                    NTStatus      = 0xC0000193
	STATUS_POSSIBLE_DEADLOCK                                                  NTStatus      = 0xC0000194
	STATUS_NETWORK_CREDENTIAL_CONFLICT                                        NTStatus      = 0xC0000195
	STATUS_REMOTE_SESSION_LIMIT                                               NTStatus      = 0xC0000196
	STATUS_EVENTLOG_FILE_CHANGED                                              NTStatus      = 0xC0000197
	STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT                                  NTStatus      = 0xC0000198
	STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT                                  NTStatus      = 0xC0000199
	STATUS_NOLOGON_SERVER_TRUST_ACCOUNT                                       NTStatus      = 0xC000019A
	STATUS_DOMAIN_TRUST_INCONSISTENT                                          NTStatus      = 0xC000019B
	STATUS_FS_DRIVER_REQUIRED                                                 NTStatus      = 0xC000019C
	STATUS_IMAGE_ALREADY_LOADED_AS_DLL                                        NTStatus      = 0xC000019D
	STATUS_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING               NTStatus      = 0xC000019E
	STATUS_SHORT_NAMES_NOT_ENABLED_ON_VOLUME                                  NTStatus      = 0xC000019F
	STATUS_SECURITY_STREAM_IS_INCONSISTENT                                    NTStatus      = 0xC00001A0
	STATUS_INVALID_LOCK_RANGE                                                 NTStatus      = 0xC00001A1
	STATUS_INVALID_ACE_CONDITION                                              NTStatus      = 0xC00001A2
	STATUS_IMAGE_SUBSYSTEM_NOT_PRESENT                                        NTStatus      = 0xC00001A3
	STATUS_NOTIFICATION_GUID_ALREADY_DEFINED                                  NTStatus      = 0xC00001A4
	STATUS_INVALID_EXCEPTION_HANDLER                                          NTStatus      = 0xC00001A5
	STATUS_DUPLICATE_PRIVILEGES                                               NTStatus      = 0xC00001A6
	STATUS_NOT_ALLOWED_ON_SYSTEM_FILE                                         NTStatus      = 0xC00001A7
	STATUS_REPAIR_NEEDED                                                      NTStatus      = 0xC00001A8
	STATUS_QUOTA_NOT_ENABLED                                                  NTStatus      = 0xC00001A9
	STATUS_NO_APPLICATION_PACKAGE                                             NTStatus      = 0xC00001AA
	STATUS_FILE_METADATA_OPTIMIZATION_IN_PROGRESS                             NTStatus      = 0xC00001AB
	STATUS_NOT_SAME_OBJECT                                                    NTStatus      = 0xC00001AC
	STATUS_FATAL_MEMORY_EXHAUSTION                                            NTStatus      = 0xC00001AD
	STATUS_ERROR_PROCESS_NOT_IN_JOB                                           NTStatus      = 0xC00001AE
	STATUS_CPU_SET_INVALID                                                    NTStatus      = 0xC00001AF
	STATUS_IO_DEVICE_INVALID_DATA                                             NTStatus      = 0xC00001B0
	STATUS_IO_UNALIGNED_WRITE                                                 NTStatus      = 0xC00001B1
	STATUS_NETWORK_OPEN_RESTRICTION                                           NTStatus      = 0xC0000201
	STATUS_NO_USER_SESSION_KEY                                                NTStatus      = 0xC0000202
	STATUS_USER_SESSION_DELETED                                               NTStatus      = 0xC0000203
	STATUS_RESOURCE_LANG_NOT_FOUND                                            NTStatus      = 0xC0000204
	STATUS_INSUFF_SERVER_RESOURCES                                            NTStatus      = 0xC0000205
	STATUS_INVALID_BUFFER_SIZE                                                NTStatus      = 0xC0000206
	STATUS_INVALID_ADDRESS_COMPONENT                                          NTStatus      = 0xC0000207
	STATUS_INVALID_ADDRESS_WILDCARD                                           NTStatus      = 0xC0000208
	STATUS_TOO_MANY_ADDRESSES                                                 NTStatus      = 0xC0000209
	STATUS_ADDRESS_ALREADY_EXISTS                                             NTStatus      = 0xC000020A
	STATUS_ADDRESS_CLOSED                                                     NTStatus      = 0xC000020B
	STATUS_CONNECTION_DISCONNECTED                                            NTStatus      = 0xC000020C
	STATUS_CONNECTION_RESET                                                   NTStatus      = 0xC000020D
	STATUS_TOO_MANY_NODES                                                     NTStatus      = 0xC000020E
	STATUS_TRANSACTION_ABORTED                                                NTStatus      = 0xC000020F
	STATUS_TRANSACTION_TIMED_OUT                                              NTStatus      = 0xC0000210
	STATUS_TRANSACTION_NO_RELEASE                                             NTStatus      = 0xC0000211
	STATUS_TRANSACTION_NO_MATCH                                               NTStatus      = 0xC0000212
	STATUS_TRANSACTION_RESPONDED                                              NTStatus      = 0xC0000213
	STATUS_TRANSACTION_INVALID_ID                                             NTStatus      = 0xC0000214
	STATUS_TRANSACTION_INVALID_TYPE                                           NTStatus      = 0xC0000215
	STATUS_NOT_SERVER_SESSION                                                 NTStatus      = 0xC0000216
	STATUS_NOT_CLIENT_SESSION                                                 NTStatus      = 0xC0000217
	STATUS_CANNOT_LOAD_REGISTRY_FILE                                          NTStatus      = 0xC0000218
	STATUS_DEBUG_ATTACH_FAILED                                                NTStatus      = 0xC0000219
	STATUS_SYSTEM_PROCESS_TERMINATED                                          NTStatus      = 0xC000021A
	STATUS_DATA_NOT_ACCEPTED                                                  NTStatus      = 0xC000021B
	STATUS_NO_BROWSER_SERVERS_FOUND                                           NTStatus      = 0xC000021C
	STATUS_VDM_HARD_ERROR                                                     NTStatus      = 0xC000021D
	STATUS_DRIVER_CANCEL_TIMEOUT                                              NTStatus      = 0xC000021E
	STATUS_REPLY_MESSAGE_MISMATCH                                             NTStatus      = 0xC000021F
	STATUS_MAPPED_ALIGNMENT                                                   NTStatus      = 0xC0000220
	STATUS_IMAGE_CHECKSUM_MISMATCH                                            NTStatus      = 0xC0000221
	STATUS_LOST_WRITEBEHIND_DATA                                              NTStatus      = 0xC0000222
	STATUS_CLIENT_SERVER_PARAMETERS_INVALID                                   NTStatus      = 0xC0000223
	STATUS_PASSWORD_MUST_CHANGE                                               NTStatus      = 0xC0000224
	STATUS_NOT_FOUND                                                          NTStatus      = 0xC0000225
	STATUS_NOT_TINY_STREAM                                                    NTStatus      = 0xC0000226
	STATUS_RECOVERY_FAILURE                                                   NTStatus      = 0xC0000227
	STATUS_STACK_OVERFLOW_READ                                                NTStatus      = 0xC0000228
	STATUS_FAIL_CHECK                                                         NTStatus      = 0xC0000229
	STATUS_DUPLICATE_OBJECTID                                                 NTStatus      = 0xC000022A
	STATUS_OBJECTID_EXISTS                                                    NTStatus      = 0xC000022B
	STATUS_CONVERT_TO_LARGE                                                   NTStatus      = 0xC000022C
	STATUS_RETRY                                                              NTStatus      = 0xC000022D
	STATUS_FOUND_OUT_OF_SCOPE                                                 NTStatus      = 0xC000022E
	STATUS_ALLOCATE_BUCKET                                                    NTStatus      = 0xC000022F
	STATUS_PROPSET_NOT_FOUND                                                  NTStatus      = 0xC0000230
	STATUS_MARSHALL_OVERFLOW                                                  NTStatus      = 0xC0000231
	STATUS_INVALID_VARIANT                                                    NTStatus      = 0xC0000232
	STATUS_DOMAIN_CONTROLLER_NOT_FOUND                                        NTStatus      = 0xC0000233
	STATUS_ACCOUNT_LOCKED_OUT                                                 NTStatus      = 0xC0000234
	STATUS_HANDLE_NOT_CLOSABLE                                                NTStatus      = 0xC0000235
	STATUS_CONNECTION_REFUSED                                                 NTStatus      = 0xC0000236
	STATUS_GRACEFUL_DISCONNECT                                                NTStatus      = 0xC0000237
	STATUS_ADDRESS_ALREADY_ASSOCIATED                                         NTStatus      = 0xC0000238
	STATUS_ADDRESS_NOT_ASSOCIATED                                             NTStatus      = 0xC0000239
	STATUS_CONNECTION_INVALID                                                 NTStatus      = 0xC000023A
	STATUS_CONNECTION_ACTIVE                                                  NTStatus      = 0xC000023B
	STATUS_NETWORK_UNREACHABLE                                                NTStatus      = 0xC000023C
	STATUS_HOST_UNREACHABLE                                                   NTStatus      = 0xC000023D
	STATUS_PROTOCOL_UNREACHABLE                                               NTStatus      = 0xC000023E
	STATUS_PORT_UNREACHABLE                                                   NTStatus      = 0xC000023F
	STATUS_REQUEST_ABORTED                                                    NTStatus      = 0xC0000240
	STATUS_CONNECTION_ABORTED                                                 NTStatus      = 0xC0000241
	STATUS_BAD_COMPRESSION_BUFFER                                             NTStatus      = 0xC0000242
	STATUS_USER_MAPPED_FILE                                                   NTStatus      = 0xC0000243
	STATUS_AUDIT_FAILED                                                       NTStatus      = 0xC0000244
	STATUS_TIMER_RESOLUTION_NOT_SET                                           NTStatus      = 0xC0000245
	STATUS_CONNECTION_COUNT_LIMIT                                             NTStatus      = 0xC0000246
	STATUS_LOGIN_TIME_RESTRICTION                                             NTStatus      = 0xC0000247
	STATUS_LOGIN_WKSTA_RESTRICTION                                            NTStatus      = 0xC0000248
	STATUS_IMAGE_MP_UP_MISMATCH                                               NTStatus      = 0xC0000249
	STATUS_INSUFFICIENT_LOGON_INFO                                            NTStatus      = 0xC0000250
	STATUS_BAD_DLL_ENTRYPOINT                                                 NTStatus      = 0xC0000251
	STATUS_BAD_SERVICE_ENTRYPOINT                                             NTStatus      = 0xC0000252
	STATUS_LPC_REPLY_LOST                                                     NTStatus      = 0xC0000253
	STATUS_IP_ADDRESS_CONFLICT1                                               NTStatus      = 0xC0000254
	STATUS_IP_ADDRESS_CONFLICT2                                               NTStatus      = 0xC0000255
	STATUS_REGISTRY_QUOTA_LIMIT                                               NTStatus      = 0xC0000256
	STATUS_PATH_NOT_COVERED                                                   NTStatus      = 0xC0000257
	STATUS_NO_CALLBACK_ACTIVE                                                 NTStatus      = 0xC0000258
	STATUS_LICENSE_QUOTA_EXCEEDED                                             NTStatus      = 0xC0000259
	STATUS_PWD_TOO_SHORT                                                      NTStatus      = 0xC000025A
	STATUS_PWD_TOO_RECENT                                                     NTStatus      = 0xC000025B
	STATUS_PWD_HISTORY_CONFLICT                                               NTStatus      = 0xC000025C
	STATUS_PLUGPLAY_NO_DEVICE                                                 NTStatus      = 0xC000025E
	STATUS_UNSUPPORTED_COMPRESSION                                            NTStatus      = 0xC000025F
	STATUS_INVALID_HW_PROFILE                                                 NTStatus      = 0xC0000260
	STATUS_INVALID_PLUGPLAY_DEVICE_PATH                                       NTStatus      = 0xC0000261
	STATUS_DRIVER_ORDINAL_NOT_FOUND                                           NTStatus      = 0xC0000262
	STATUS_DRIVER_ENTRYPOINT_NOT_FOUND                                        NTStatus      = 0xC0000263
	STATUS_RESOURCE_NOT_OWNED                                                 NTStatus      = 0xC0000264
	STATUS_TOO_MANY_LINKS                                                     NTStatus      = 0xC0000265
	STATUS_QUOTA_LIST_INCONSISTENT                                            NTStatus      = 0xC0000266
	STATUS_FILE_IS_OFFLINE                                                    NTStatus      = 0xC0000267
	STATUS_EVALUATION_EXPIRATION                                              NTStatus      = 0xC0000268
	STATUS_ILLEGAL_DLL_RELOCATION                                             NTStatus      = 0xC0000269
	STATUS_LICENSE_VIOLATION                                                  NTStatus      = 0xC000026A
	STATUS_DLL_INIT_FAILED_LOGOFF                                             NTStatus      = 0xC000026B
	STATUS_DRIVER_UNABLE_TO_LOAD                                              NTStatus      = 0xC000026C
	STATUS_DFS_UNAVAILABLE                                                    NTStatus      = 0xC000026D
	STATUS_VOLUME_DISMOUNTED                                                  NTStatus      = 0xC000026E
	STATUS_WX86_INTERNAL_ERROR                                                NTStatus      = 0xC000026F
	STATUS_WX86_FLOAT_STACK_CHECK                                             NTStatus      = 0xC0000270
	STATUS_VALIDATE_CONTINUE                                                  NTStatus      = 0xC0000271
	STATUS_NO_MATCH                                                           NTStatus      = 0xC0000272
	STATUS_NO_MORE_MATCHES                                                    NTStatus      = 0xC0000273
	STATUS_NOT_A_REPARSE_POINT                                                NTStatus      = 0xC0000275
	STATUS_IO_REPARSE_TAG_INVALID                                             NTStatus      = 0xC0000276
	STATUS_IO_REPARSE_TAG_MISMATCH                                            NTStatus      = 0xC0000277
	STATUS_IO_REPARSE_DATA_INVALID                                            NTStatus      = 0xC0000278
	STATUS_IO_REPARSE_TAG_NOT_HANDLED                                         NTStatus      = 0xC0000279
	STATUS_PWD_TOO_LONG                                                       NTStatus      = 0xC000027A
	STATUS_STOWED_EXCEPTION                                                   NTStatus      = 0xC000027B
	STATUS_CONTEXT_STOWED_EXCEPTION                                           NTStatus      = 0xC000027C
	STATUS_REPARSE_POINT_NOT_RESOLVED                                         NTStatus      = 0xC0000280
	STATUS_DIRECTORY_IS_A_REPARSE_POINT                                       NTStatus      = 0xC0000281
	STATUS_RANGE_LIST_CONFLICT                                                NTStatus      = 0xC0000282
	STATUS_SOURCE_ELEMENT_EMPTY                                               NTStatus      = 0xC0000283
	STATUS_DESTINATION_ELEMENT_FULL                                           NTStatus      = 0xC0000284
	STATUS_ILLEGAL_ELEMENT_ADDRESS                                            NTStatus      = 0xC0000285
	STATUS_MAGAZINE_NOT_PRESENT                                               NTStatus      = 0xC0000286
	STATUS_REINITIALIZATION_NEEDED                                            NTStatus      = 0xC0000287
	STATUS_DEVICE_REQUIRES_CLEANING                                           NTStatus      = 0x80000288
	STATUS_DEVICE_DOOR_OPEN                                                   NTStatus      = 0x80000289
	STATUS_ENCRYPTION_FAILED                                                  NTStatus      = 0xC000028A
	STATUS_DECRYPTION_FAILED                                                  NTStatus      = 0xC000028B
	STATUS_RANGE_NOT_FOUND                                                    NTStatus      = 0xC000028C
	STATUS_NO_RECOVERY_POLICY                                                 NTStatus      = 0xC000028D
	STATUS_NO_EFS                                                             NTStatus      = 0xC000028E
	STATUS_WRONG_EFS                                                          NTStatus      = 0xC000028F
	STATUS_NO_USER_KEYS                                                       NTStatus      = 0xC0000290
	STATUS_FILE_NOT_ENCRYPTED                                                 NTStatus      = 0xC0000291
	STATUS_NOT_EXPORT_FORMAT                                                  NTStatus      = 0xC0000292
	STATUS_FILE_ENCRYPTED                                                     NTStatus      = 0xC0000293
	STATUS_WAKE_SYSTEM                                                        NTStatus      = 0x40000294
	STATUS_WMI_GUID_NOT_FOUND                                                 NTStatus      = 0xC0000295
	STATUS_WMI_INSTANCE_NOT_FOUND                                             NTStatus      = 0xC0000296
	STATUS_WMI_ITEMID_NOT_FOUND                                               NTStatus      = 0xC0000297
	STATUS_WMI_TRY_AGAIN                                                      NTStatus      = 0xC0000298
	STATUS_SHARED_POLICY                                                      NTStatus      = 0xC0000299
	STATUS_POLICY_OBJECT_NOT_FOUND                                            NTStatus      = 0xC000029A
	STATUS_POLICY_ONLY_IN_DS                                                  NTStatus      = 0xC000029B
	STATUS_VOLUME_NOT_UPGRADED                                                NTStatus      = 0xC000029C
	STATUS_REMOTE_STORAGE_NOT_ACTIVE                                          NTStatus      = 0xC000029D
	STATUS_REMOTE_STORAGE_MEDIA_ERROR                                         NTStatus      = 0xC000029E
	STATUS_NO_TRACKING_SERVICE                                                NTStatus      = 0xC000029F
	STATUS_SERVER_SID_MISMATCH                                                NTStatus      = 0xC00002A0
	STATUS_DS_NO_ATTRIBUTE_OR_VALUE                                           NTStatus      = 0xC00002A1
	STATUS_DS_INVALID_ATTRIBUTE_SYNTAX                                        NTStatus      = 0xC00002A2
	STATUS_DS_ATTRIBUTE_TYPE_UNDEFINED                                        NTStatus      = 0xC00002A3
	STATUS_DS_ATTRIBUTE_OR_VALUE_EXISTS                                       NTStatus      = 0xC00002A4
	STATUS_DS_BUSY                                                            NTStatus      = 0xC00002A5
	STATUS_DS_UNAVAILABLE                                                     NTStatus      = 0xC00002A6
	STATUS_DS_NO_RIDS_ALLOCATED                                               NTStatus      = 0xC00002A7
	STATUS_DS_NO_MORE_RIDS                                                    NTStatus      = 0xC00002A8
	STATUS_DS_INCORRECT_ROLE_OWNER                                            NTStatus      = 0xC00002A9
	STATUS_DS_RIDMGR_INIT_ERROR                                               NTStatus      = 0xC00002AA
	STATUS_DS_OBJ_CLASS_VIOLATION                                             NTStatus      = 0xC00002AB
	STATUS_DS_CANT_ON_NON_LEAF                                                NTStatus      = 0xC00002AC
	STATUS_DS_CANT_ON_RDN                                                     NTStatus      = 0xC00002AD
	STATUS_DS_CANT_MOD_OBJ_CLASS                                              NTStatus      = 0xC00002AE
	STATUS_DS_CROSS_DOM_MOVE_FAILED                                           NTStatus      = 0xC00002AF
	STATUS_DS_GC_NOT_AVAILABLE                                                NTStatus      = 0xC00002B0
	STATUS_DIRECTORY_SERVICE_REQUIRED                                         NTStatus      = 0xC00002B1
	STATUS_REPARSE_ATTRIBUTE_CONFLICT                                         NTStatus      = 0xC00002B2
	STATUS_CANT_ENABLE_DENY_ONLY                                              NTStatus      = 0xC00002B3
	STATUS_FLOAT_MULTIPLE_FAULTS                                              NTStatus      = 0xC00002B4
	STATUS_FLOAT_MULTIPLE_TRAPS                                               NTStatus      = 0xC00002B5
	STATUS_DEVICE_REMOVED                                                     NTStatus      = 0xC00002B6
	STATUS_JOURNAL_DELETE_IN_PROGRESS                                         NTStatus      = 0xC00002B7
	STATUS_JOURNAL_NOT_ACTIVE                                                 NTStatus      = 0xC00002B8
	STATUS_NOINTERFACE                                                        NTStatus      = 0xC00002B9
	STATUS_DS_RIDMGR_DISABLED                                                 NTStatus      = 0xC00002BA
	STATUS_DS_ADMIN_LIMIT_EXCEEDED                                            NTStatus      = 0xC00002C1
	STATUS_DRIVER_FAILED_SLEEP                                                NTStatus      = 0xC00002C2
	STATUS_MUTUAL_AUTHENTICATION_FAILED                                       NTStatus      = 0xC00002C3
	STATUS_CORRUPT_SYSTEM_FILE                                                NTStatus      = 0xC00002C4
	STATUS_DATATYPE_MISALIGNMENT_ERROR                                        NTStatus      = 0xC00002C5
	STATUS_WMI_READ_ONLY                                                      NTStatus      = 0xC00002C6
	STATUS_WMI_SET_FAILURE                                                    NTStatus      = 0xC00002C7
	STATUS_COMMITMENT_MINIMUM                                                 NTStatus      = 0xC00002C8
	STATUS_REG_NAT_CONSUMPTION                                                NTStatus      = 0xC00002C9
	STATUS_TRANSPORT_FULL                                                     NTStatus      = 0xC00002CA
	STATUS_DS_SAM_INIT_FAILURE                                                NTStatus      = 0xC00002CB
	STATUS_ONLY_IF_CONNECTED                                                  NTStatus      = 0xC00002CC
	STATUS_DS_SENSITIVE_GROUP_VIOLATION                                       NTStatus      = 0xC00002CD
	STATUS_PNP_RESTART_ENUMERATION                                            NTStatus      = 0xC00002CE
	STATUS_JOURNAL_ENTRY_DELETED                                              NTStatus      = 0xC00002CF
	STATUS_DS_CANT_MOD_PRIMARYGROUPID                                         NTStatus      = 0xC00002D0
	STATUS_SYSTEM_IMAGE_BAD_SIGNATURE                                         NTStatus      = 0xC00002D1
	STATUS_PNP_REBOOT_REQUIRED                                                NTStatus      = 0xC00002D2
	STATUS_POWER_STATE_INVALID                                                NTStatus      = 0xC00002D3
	STATUS_DS_INVALID_GROUP_TYPE                                              NTStatus      = 0xC00002D4
	STATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN                              NTStatus      = 0xC00002D5
	STATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN                               NTStatus      = 0xC00002D6
	STATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER                                   NTStatus      = 0xC00002D7
	STATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER                               NTStatus      = 0xC00002D8
	STATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER                                NTStatus      = 0xC00002D9
	STATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER                             NTStatus      = 0xC00002DA
	STATUS_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER                        NTStatus      = 0xC00002DB
	STATUS_DS_HAVE_PRIMARY_MEMBERS                                            NTStatus      = 0xC00002DC
	STATUS_WMI_NOT_SUPPORTED                                                  NTStatus      = 0xC00002DD
	STATUS_INSUFFICIENT_POWER                                                 NTStatus      = 0xC00002DE
	STATUS_SAM_NEED_BOOTKEY_PASSWORD                                          NTStatus      = 0xC00002DF
	STATUS_SAM_NEED_BOOTKEY_FLOPPY                                            NTStatus      = 0xC00002E0
	STATUS_DS_CANT_START                                                      NTStatus      = 0xC00002E1
	STATUS_DS_INIT_FAILURE                                                    NTStatus      = 0xC00002E2
	STATUS_SAM_INIT_FAILURE                                                   NTStatus      = 0xC00002E3
	STATUS_DS_GC_REQUIRED                                                     NTStatus      = 0xC00002E4
	STATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY                                      NTStatus      = 0xC00002E5
	STATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS                                      NTStatus      = 0xC00002E6
	STATUS_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED                                  NTStatus      = 0xC00002E7
	STATUS_MULTIPLE_FAULT_VIOLATION                                           NTStatus      = 0xC00002E8
	STATUS_CURRENT_DOMAIN_NOT_ALLOWED                                         NTStatus      = 0xC00002E9
	STATUS_CANNOT_MAKE                                                        NTStatus      = 0xC00002EA
	STATUS_SYSTEM_SHUTDOWN                                                    NTStatus      = 0xC00002EB
	STATUS_DS_INIT_FAILURE_CONSOLE                                            NTStatus      = 0xC00002EC
	STATUS_DS_SAM_INIT_FAILURE_CONSOLE                                        NTStatus      = 0xC00002ED
	STATUS_UNFINISHED_CONTEXT_DELETED                                         NTStatus      = 0xC00002EE
	STATUS_NO_TGT_REPLY                                                       NTStatus      = 0xC00002EF
	STATUS_OBJECTID_NOT_FOUND                                                 NTStatus      = 0xC00002F0
	STATUS_NO_IP_ADDRESSES                                                    NTStatus      = 0xC00002F1
	STATUS_WRONG_CREDENTIAL_HANDLE                                            NTStatus      = 0xC00002F2
	STATUS_CRYPTO_SYSTEM_INVALID                                              NTStatus      = 0xC00002F3
	STATUS_MAX_REFERRALS_EXCEEDED                                             NTStatus      = 0xC00002F4
	STATUS_MUST_BE_KDC                                                        NTStatus      = 0xC00002F5
	STATUS_STRONG_CRYPTO_NOT_SUPPORTED                                        NTStatus      = 0xC00002F6
	STATUS_TOO_MANY_PRINCIPALS                                                NTStatus      = 0xC00002F7
	STATUS_NO_PA_DATA                                                         NTStatus      = 0xC00002F8
	STATUS_PKINIT_NAME_MISMATCH                                               NTStatus      = 0xC00002F9
	STATUS_SMARTCARD_LOGON_REQUIRED                                           NTStatus      = 0xC00002FA
	STATUS_KDC_INVALID_REQUEST                                                NTStatus      = 0xC00002FB
	STATUS_KDC_UNABLE_TO_REFER                                                NTStatus      = 0xC00002FC
	STATUS_KDC_UNKNOWN_ETYPE                                                  NTStatus      = 0xC00002FD
	STATUS_SHUTDOWN_IN_PROGRESS                                               NTStatus      = 0xC00002FE
	STATUS_SERVER_SHUTDOWN_IN_PROGRESS                                        NTStatus      = 0xC00002FF
	STATUS_NOT_SUPPORTED_ON_SBS                                               NTStatus      = 0xC0000300
	STATUS_WMI_GUID_DISCONNECTED                                              NTStatus      = 0xC0000301
	STATUS_WMI_ALREADY_DISABLED                                               NTStatus      = 0xC0000302
	STATUS_WMI_ALREADY_ENABLED                                                NTStatus      = 0xC0000303
	STATUS_MFT_TOO_FRAGMENTED                                                 NTStatus      = 0xC0000304
	STATUS_COPY_PROTECTION_FAILURE                                            NTStatus      = 0xC0000305
	STATUS_CSS_AUTHENTICATION_FAILURE                                         NTStatus      = 0xC0000306
	STATUS_CSS_KEY_NOT_PRESENT                                                NTStatus      = 0xC0000307
	STATUS_CSS_KEY_NOT_ESTABLISHED                                            NTStatus      = 0xC0000308
	STATUS_CSS_SCRAMBLED_SECTOR                                               NTStatus      = 0xC0000309
	STATUS_CSS_REGION_MISMATCH                                                NTStatus      = 0xC000030A
	STATUS_CSS_RESETS_EXHAUSTED                                               NTStatus      = 0xC000030B
	STATUS_PASSWORD_CHANGE_REQUIRED                                           NTStatus      = 0xC000030C
	STATUS_LOST_MODE_LOGON_RESTRICTION                                        NTStatus      = 0xC000030D
	STATUS_PKINIT_FAILURE                                                     NTStatus      = 0xC0000320
	STATUS_SMARTCARD_SUBSYSTEM_FAILURE                                        NTStatus      = 0xC0000321
	STATUS_NO_KERB_KEY                                                        NTStatus      = 0xC0000322
	STATUS_HOST_DOWN                                                          NTStatus      = 0xC0000350
	STATUS_UNSUPPORTED_PREAUTH                                                NTStatus      = 0xC0000351
	STATUS_EFS_ALG_BLOB_TOO_BIG                                               NTStatus      = 0xC0000352
	STATUS_PORT_NOT_SET                                                       NTStatus      = 0xC0000353
	STATUS_DEBUGGER_INACTIVE                                                  NTStatus      = 0xC0000354
	STATUS_DS_VERSION_CHECK_FAILURE                                           NTStatus      = 0xC0000355
	STATUS_AUDITING_DISABLED                                                  NTStatus      = 0xC0000356
	STATUS_PRENT4_MACHINE_ACCOUNT                                             NTStatus      = 0xC0000357
	STATUS_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER                                   NTStatus      = 0xC0000358
	STATUS_INVALID_IMAGE_WIN_32                                               NTStatus      = 0xC0000359
	STATUS_INVALID_IMAGE_WIN_64                                               NTStatus      = 0xC000035A
	STATUS_BAD_BINDINGS                                                       NTStatus      = 0xC000035B
	STATUS_NETWORK_SESSION_EXPIRED                                            NTStatus      = 0xC000035C
	STATUS_APPHELP_BLOCK                                                      NTStatus      = 0xC000035D
	STATUS_ALL_SIDS_FILTERED                                                  NTStatus      = 0xC000035E
	STATUS_NOT_SAFE_MODE_DRIVER                                               NTStatus      = 0xC000035F
	STATUS_ACCESS_DISABLED_BY_POLICY_DEFAULT                                  NTStatus      = 0xC0000361
	STATUS_ACCESS_DISABLED_BY_POLICY_PATH                                     NTStatus      = 0xC0000362
	STATUS_ACCESS_DISABLED_BY_POLICY_PUBLISHER                                NTStatus      = 0xC0000363
	STATUS_ACCESS_DISABLED_BY_POLICY_OTHER                                    NTStatus      = 0xC0000364
	STATUS_FAILED_DRIVER_ENTRY                                                NTStatus      = 0xC0000365
	STATUS_DEVICE_ENUMERATION_ERROR                                           NTStatus      = 0xC0000366
	STATUS_MOUNT_POINT_NOT_RESOLVED                                           NTStatus      = 0xC0000368
	STATUS_INVALID_DEVICE_OBJECT_PARAMETER                                    NTStatus      = 0xC0000369
	STATUS_MCA_OCCURED                                                        NTStatus      = 0xC000036A
	STATUS_DRIVER_BLOCKED_CRITICAL                                            NTStatus      = 0xC000036B
	STATUS_DRIVER_BLOCKED                                                     NTStatus      = 0xC000036C
	STATUS_DRIVER_DATABASE_ERROR                                              NTStatus      = 0xC000036D
	STATUS_SYSTEM_HIVE_TOO_LARGE                                              NTStatus      = 0xC000036E
	STATUS_INVALID_IMPORT_OF_NON_DLL                                          NTStatus      = 0xC000036F
	STATUS_DS_SHUTTING_DOWN                                                   NTStatus      = 0x40000370
	STATUS_NO_SECRETS                                                         NTStatus      = 0xC0000371
	STATUS_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY                              NTStatus      = 0xC0000372
	STATUS_FAILED_STACK_SWITCH                                                NTStatus      = 0xC0000373
	STATUS_HEAP_CORRUPTION                                                    NTStatus      = 0xC0000374
	STATUS_SMARTCARD_WRONG_PIN                                                NTStatus      = 0xC0000380
	STATUS_SMARTCARD_CARD_BLOCKED                                             NTStatus      = 0xC0000381
	STATUS_SMARTCARD_CARD_NOT_AUTHENTICATED                                   NTStatus      = 0xC0000382
	STATUS_SMARTCARD_NO_CARD                                                  NTStatus      = 0xC0000383
	STATUS_SMARTCARD_NO_KEY_CONTAINER                                         NTStatus      = 0xC0000384
	STATUS_SMARTCARD_NO_CERTIFICATE                                           NTStatus      = 0xC0000385
	STATUS_SMARTCARD_NO_KEYSET                                                NTStatus      = 0xC0000386
	STATUS_SMARTCARD_IO_ERROR                                                 NTStatus      = 0xC0000387
	STATUS_DOWNGRADE_DETECTED                                                 NTStatus      = 0xC0000388
	STATUS_SMARTCARD_CERT_REVOKED                                             NTStatus      = 0xC0000389
	STATUS_ISSUING_CA_UNTRUSTED                                               NTStatus      = 0xC000038A
	STATUS_REVOCATION_OFFLINE_C                                               NTStatus      = 0xC000038B
	STATUS_PKINIT_CLIENT_FAILURE                                              NTStatus      = 0xC000038C
	STATUS_SMARTCARD_CERT_EXPIRED                                             NTStatus      = 0xC000038D
	STATUS_DRIVER_FAILED_PRIOR_UNLOAD                                         NTStatus      = 0xC000038E
	STATUS_SMARTCARD_SILENT_CONTEXT                                           NTStatus      = 0xC000038F
	STATUS_PER_USER_TRUST_QUOTA_EXCEEDED                                      NTStatus      = 0xC0000401
	STATUS_ALL_USER_TRUST_QUOTA_EXCEEDED                                      NTStatus      = 0xC0000402
	STATUS_USER_DELETE_TRUST_QUOTA_EXCEEDED                                   NTStatus      = 0xC0000403
	STATUS_DS_NAME_NOT_UNIQUE                                                 NTStatus      = 0xC0000404
	STATUS_DS_DUPLICATE_ID_FOUND                                              NTStatus      = 0xC0000405
	STATUS_DS_GROUP_CONVERSION_ERROR                                          NTStatus      = 0xC0000406
	STATUS_VOLSNAP_PREPARE_HIBERNATE                                          NTStatus      = 0xC0000407
	STATUS_USER2USER_REQUIRED                                                 NTStatus      = 0xC0000408
	STATUS_STACK_BUFFER_OVERRUN                                               NTStatus      = 0xC0000409
	STATUS_NO_S4U_PROT_SUPPORT                                                NTStatus      = 0xC000040A
	STATUS_CROSSREALM_DELEGATION_FAILURE                                      NTStatus      = 0xC000040B
	STATUS_REVOCATION_OFFLINE_KDC                                             NTStatus      = 0xC000040C
	STATUS_ISSUING_CA_UNTRUSTED_KDC                                           NTStatus      = 0xC000040D
	STATUS_KDC_CERT_EXPIRED                                                   NTStatus      = 0xC000040E
	STATUS_KDC_CERT_REVOKED                                                   NTStatus      = 0xC000040F
	STATUS_PARAMETER_QUOTA_EXCEEDED                                           NTStatus      = 0xC0000410
	STATUS_HIBERNATION_FAILURE                                                NTStatus      = 0xC0000411
	STATUS_DELAY_LOAD_FAILED                                                  NTStatus      = 0xC0000412
	STATUS_AUTHENTICATION_FIREWALL_FAILED                                     NTStatus      = 0xC0000413
	STATUS_VDM_DISALLOWED                                                     NTStatus      = 0xC0000414
	STATUS_HUNG_DISPLAY_DRIVER_THREAD                                         NTStatus      = 0xC0000415
	STATUS_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE            NTStatus      = 0xC0000416
	STATUS_INVALID_CRUNTIME_PARAMETER                                         NTStatus      = 0xC0000417
	STATUS_NTLM_BLOCKED                                                       NTStatus      = 0xC0000418
	STATUS_DS_SRC_SID_EXISTS_IN_FOREST                                        NTStatus      = 0xC0000419
	STATUS_DS_DOMAIN_NAME_EXISTS_IN_FOREST                                    NTStatus      = 0xC000041A
	STATUS_DS_FLAT_NAME_EXISTS_IN_FOREST                                      NTStatus      = 0xC000041B
	STATUS_INVALID_USER_PRINCIPAL_NAME                                        NTStatus      = 0xC000041C
	STATUS_FATAL_USER_CALLBACK_EXCEPTION                                      NTStatus      = 0xC000041D
	STATUS_ASSERTION_FAILURE                                                  NTStatus      = 0xC0000420
	STATUS_VERIFIER_STOP                                                      NTStatus      = 0xC0000421
	STATUS_CALLBACK_POP_STACK                                                 NTStatus      = 0xC0000423
	STATUS_INCOMPATIBLE_DRIVER_BLOCKED                                        NTStatus      = 0xC0000424
	STATUS_HIVE_UNLOADED                                                      NTStatus      = 0xC0000425
	STATUS_COMPRESSION_DISABLED                                               NTStatus      = 0xC0000426
	STATUS_FILE_SYSTEM_LIMITATION                                             NTStatus      = 0xC0000427
	STATUS_INVALID_IMAGE_HASH                                                 NTStatus      = 0xC0000428
	STATUS_NOT_CAPABLE                                                        NTStatus      = 0xC0000429
	STATUS_REQUEST_OUT_OF_SEQUENCE                                            NTStatus      = 0xC000042A
	STATUS_IMPLEMENTATION_LIMIT                                               NTStatus      = 0xC000042B
	STATUS_ELEVATION_REQUIRED                                                 NTStatus      = 0xC000042C
	STATUS_NO_SECURITY_CONTEXT                                                NTStatus      = 0xC000042D
	STATUS_PKU2U_CERT_FAILURE                                                 NTStatus      = 0xC000042F
	STATUS_BEYOND_VDL                                                         NTStatus      = 0xC0000432
	STATUS_ENCOUNTERED_WRITE_IN_PROGRESS                                      NTStatus      = 0xC0000433
	STATUS_PTE_CHANGED                                                        NTStatus      = 0xC0000434
	STATUS_PURGE_FAILED                                                       NTStatus      = 0xC0000435
	STATUS_CRED_REQUIRES_CONFIRMATION                                         NTStatus      = 0xC0000440
	STATUS_CS_ENCRYPTION_INVALID_SERVER_RESPONSE                              NTStatus      = 0xC0000441
	STATUS_CS_ENCRYPTION_UNSUPPORTED_SERVER                                   NTStatus      = 0xC0000442
	STATUS_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE                              NTStatus      = 0xC0000443
	STATUS_CS_ENCRYPTION_NEW_ENCRYPTED_FILE                                   NTStatus      = 0xC0000444
	STATUS_CS_ENCRYPTION_FILE_NOT_CSE                                         NTStatus      = 0xC0000445
	STATUS_INVALID_LABEL                                                      NTStatus      = 0xC0000446
	STATUS_DRIVER_PROCESS_TERMINATED                                          NTStatus      = 0xC0000450
	STATUS_AMBIGUOUS_SYSTEM_DEVICE                                            NTStatus      = 0xC0000451
	STATUS_SYSTEM_DEVICE_NOT_FOUND                                            NTStatus      = 0xC0000452
	STATUS_RESTART_BOOT_APPLICATION                                           NTStatus      = 0xC0000453
	STATUS_INSUFFICIENT_NVRAM_RESOURCES                                       NTStatus      = 0xC0000454
	STATUS_INVALID_SESSION                                                    NTStatus      = 0xC0000455
	STATUS_THREAD_ALREADY_IN_SESSION                                          NTStatus      = 0xC0000456
	STATUS_THREAD_NOT_IN_SESSION                                              NTStatus      = 0xC0000457
	STATUS_INVALID_WEIGHT                                                     NTStatus      = 0xC0000458
	STATUS_REQUEST_PAUSED                                                     NTStatus      = 0xC0000459
	STATUS_NO_RANGES_PROCESSED                                                NTStatus      = 0xC0000460
	STATUS_DISK_RESOURCES_EXHAUSTED                                           NTStatus      = 0xC0000461
	STATUS_NEEDS_REMEDIATION                                                  NTStatus      = 0xC0000462
	STATUS_DEVICE_FEATURE_NOT_SUPPORTED                                       NTStatus      = 0xC0000463
	STATUS_DEVICE_UNREACHABLE                                                 NTStatus      = 0xC0000464
	STATUS_INVALID_TOKEN                                                      NTStatus      = 0xC0000465
	STATUS_SERVER_UNAVAILABLE                                                 NTStatus      = 0xC0000466
	STATUS_FILE_NOT_AVAILABLE                                                 NTStatus      = 0xC0000467
	STATUS_DEVICE_INSUFFICIENT_RESOURCES                                      NTStatus      = 0xC0000468
	STATUS_PACKAGE_UPDATING                                                   NTStatus      = 0xC0000469
	STATUS_NOT_READ_FROM_COPY                                                 NTStatus      = 0xC000046A
	STATUS_FT_WRITE_FAILURE                                                   NTStatus      = 0xC000046B
	STATUS_FT_DI_SCAN_REQUIRED                                                NTStatus      = 0xC000046C
	STATUS_OBJECT_NOT_EXTERNALLY_BACKED                                       NTStatus      = 0xC000046D
	STATUS_EXTERNAL_BACKING_PROVIDER_UNKNOWN                                  NTStatus      = 0xC000046E
	STATUS_COMPRESSION_NOT_BENEFICIAL                                         NTStatus      = 0xC000046F
	STATUS_DATA_CHECKSUM_ERROR                                                NTStatus      = 0xC0000470
	STATUS_INTERMIXED_KERNEL_EA_OPERATION                                     NTStatus      = 0xC0000471
	STATUS_TRIM_READ_ZERO_NOT_SUPPORTED                                       NTStatus      = 0xC0000472
	STATUS_TOO_MANY_SEGMENT_DESCRIPTORS                                       NTStatus      = 0xC0000473
	STATUS_INVALID_OFFSET_ALIGNMENT                                           NTStatus      = 0xC0000474
	STATUS_INVALID_FIELD_IN_PARAMETER_LIST                                    NTStatus      = 0xC0000475
	STATUS_OPERATION_IN_PROGRESS                                              NTStatus      = 0xC0000476
	STATUS_INVALID_INITIATOR_TARGET_PATH                                      NTStatus      = 0xC0000477
	STATUS_SCRUB_DATA_DISABLED                                                NTStatus      = 0xC0000478
	STATUS_NOT_REDUNDANT_STORAGE                                              NTStatus      = 0xC0000479
	STATUS_RESIDENT_FILE_NOT_SUPPORTED                                        NTStatus      = 0xC000047A
	STATUS_COMPRESSED_FILE_NOT_SUPPORTED                                      NTStatus      = 0xC000047B
	STATUS_DIRECTORY_NOT_SUPPORTED                                            NTStatus      = 0xC000047C
	STATUS_IO_OPERATION_TIMEOUT                                               NTStatus      = 0xC000047D
	STATUS_SYSTEM_NEEDS_REMEDIATION                                           NTStatus      = 0xC000047E
	STATUS_APPX_INTEGRITY_FAILURE_CLR_NGEN                                    NTStatus      = 0xC000047F
	STATUS_SHARE_UNAVAILABLE                                                  NTStatus      = 0xC0000480
	STATUS_APISET_NOT_HOSTED                                                  NTStatus      = 0xC0000481
	STATUS_APISET_NOT_PRESENT                                                 NTStatus      = 0xC0000482
	STATUS_DEVICE_HARDWARE_ERROR                                              NTStatus      = 0xC0000483
	STATUS_FIRMWARE_SLOT_INVALID                                              NTStatus      = 0xC0000484
	STATUS_FIRMWARE_IMAGE_INVALID                                             NTStatus      = 0xC0000485
	STATUS_STORAGE_TOPOLOGY_ID_MISMATCH                                       NTStatus      = 0xC0000486
	STATUS_WIM_NOT_BOOTABLE                                                   NTStatus      = 0xC0000487
	STATUS_BLOCKED_BY_PARENTAL_CONTROLS                                       NTStatus      = 0xC0000488
	STATUS_NEEDS_REGISTRATION                                                 NTStatus      = 0xC0000489
	STATUS_QUOTA_ACTIVITY                                                     NTStatus      = 0xC000048A
	STATUS_CALLBACK_INVOKE_INLINE                                             NTStatus      = 0xC000048B
	STATUS_BLOCK_TOO_MANY_REFERENCES                                          NTStatus      = 0xC000048C
	STATUS_MARKED_TO_DISALLOW_WRITES                                          NTStatus      = 0xC000048D
	STATUS_NETWORK_ACCESS_DENIED_EDP                                          NTStatus      = 0xC000048E
	STATUS_ENCLAVE_FAILURE                                                    NTStatus      = 0xC000048F
	STATUS_PNP_NO_COMPAT_DRIVERS                                              NTStatus      = 0xC0000490
	STATUS_PNP_DRIVER_PACKAGE_NOT_FOUND                                       NTStatus      = 0xC0000491
	STATUS_PNP_DRIVER_CONFIGURATION_NOT_FOUND                                 NTStatus      = 0xC0000492
	STATUS_PNP_DRIVER_CONFIGURATION_INCOMPLETE                                NTStatus      = 0xC0000493
	STATUS_PNP_FUNCTION_DRIVER_REQUIRED                                       NTStatus      = 0xC0000494
	STATUS_PNP_DEVICE_CONFIGURATION_PENDING                                   NTStatus      = 0xC0000495
	STATUS_DEVICE_HINT_NAME_BUFFER_TOO_SMALL                                  NTStatus      = 0xC0000496
	STATUS_PACKAGE_NOT_AVAILABLE                                              NTStatus      = 0xC0000497
	STATUS_DEVICE_IN_MAINTENANCE                                              NTStatus      = 0xC0000499
	STATUS_NOT_SUPPORTED_ON_DAX                                               NTStatus      = 0xC000049A
	STATUS_FREE_SPACE_TOO_FRAGMENTED                                          NTStatus      = 0xC000049B
	STATUS_DAX_MAPPING_EXISTS                                                 NTStatus      = 0xC000049C
	STATUS_CHILD_PROCESS_BLOCKED                                              NTStatus      = 0xC000049D
	STATUS_STORAGE_LOST_DATA_PERSISTENCE                                      NTStatus      = 0xC000049E
	STATUS_VRF_CFG_ENABLED                                                    NTStatus      = 0xC000049F
	STATUS_PARTITION_TERMINATING                                              NTStatus      = 0xC00004A0
	STATUS_EXTERNAL_SYSKEY_NOT_SUPPORTED                                      NTStatus      = 0xC00004A1
	STATUS_ENCLAVE_VIOLATION                                                  NTStatus      = 0xC00004A2
	STATUS_FILE_PROTECTED_UNDER_DPL                                           NTStatus      = 0xC00004A3
	STATUS_VOLUME_NOT_CLUSTER_ALIGNED                                         NTStatus      = 0xC00004A4
	STATUS_NO_PHYSICALLY_ALIGNED_FREE_SPACE_FOUND                             NTStatus      = 0xC00004A5
	STATUS_APPX_FILE_NOT_ENCRYPTED                                            NTStatus      = 0xC00004A6
	STATUS_RWRAW_ENCRYPTED_FILE_NOT_ENCRYPTED                                 NTStatus      = 0xC00004A7
	STATUS_RWRAW_ENCRYPTED_INVALID_EDATAINFO_FILEOFFSET                       NTStatus      = 0xC00004A8
	STATUS_RWRAW_ENCRYPTED_INVALID_EDATAINFO_FILERANGE                        NTStatus      = 0xC00004A9
	STATUS_RWRAW_ENCRYPTED_INVALID_EDATAINFO_PARAMETER                        NTStatus      = 0xC00004AA
	STATUS_FT_READ_FAILURE                                                    NTStatus      = 0xC00004AB
	STATUS_PATCH_CONFLICT                                                     NTStatus      = 0xC00004AC
	STATUS_STORAGE_RESERVE_ID_INVALID                                         NTStatus      = 0xC00004AD
	STATUS_STORAGE_RESERVE_DOES_NOT_EXIST                                     NTStatus      = 0xC00004AE
	STATUS_STORAGE_RESERVE_ALREADY_EXISTS                                     NTStatus      = 0xC00004AF
	STATUS_STORAGE_RESERVE_NOT_EMPTY                                          NTStatus      = 0xC00004B0
	STATUS_NOT_A_DAX_VOLUME                                                   NTStatus      = 0xC00004B1
	STATUS_NOT_DAX_MAPPABLE                                                   NTStatus      = 0xC00004B2
	STATUS_CASE_DIFFERING_NAMES_IN_DIR                                        NTStatus      = 0xC00004B3
	STATUS_FILE_NOT_SUPPORTED                                                 NTStatus      = 0xC00004B4
	STATUS_NOT_SUPPORTED_WITH_BTT                                             NTStatus      = 0xC00004B5
	STATUS_ENCRYPTION_DISABLED                                                NTStatus      = 0xC00004B6
	STATUS_ENCRYPTING_METADATA_DISALLOWED                                     NTStatus      = 0xC00004B7
	STATUS_CANT_CLEAR_ENCRYPTION_FLAG                                         NTStatus      = 0xC00004B8
	STATUS_INVALID_TASK_NAME                                                  NTStatus      = 0xC0000500
	STATUS_INVALID_TASK_INDEX                                                 NTStatus      = 0xC0000501
	STATUS_THREAD_ALREADY_IN_TASK                                             NTStatus      = 0xC0000502
	STATUS_CALLBACK_BYPASS                                                    NTStatus      = 0xC0000503
	STATUS_UNDEFINED_SCOPE                                                    NTStatus      = 0xC0000504
	STATUS_INVALID_CAP                                                        NTStatus      = 0xC0000505
	STATUS_NOT_GUI_PROCESS                                                    NTStatus      = 0xC0000506
	STATUS_DEVICE_HUNG                                                        NTStatus      = 0xC0000507
	STATUS_CONTAINER_ASSIGNED                                                 NTStatus      = 0xC0000508
	STATUS_JOB_NO_CONTAINER                                                   NTStatus      = 0xC0000509
	STATUS_DEVICE_UNRESPONSIVE                                                NTStatus      = 0xC000050A
	STATUS_REPARSE_POINT_ENCOUNTERED                                          NTStatus      = 0xC000050B
	STATUS_ATTRIBUTE_NOT_PRESENT                                              NTStatus      = 0xC000050C
	STATUS_NOT_A_TIERED_VOLUME                                                NTStatus      = 0xC000050D
	STATUS_ALREADY_HAS_STREAM_ID                                              NTStatus      = 0xC000050E
	STATUS_JOB_NOT_EMPTY                                                      NTStatus      = 0xC000050F
	STATUS_ALREADY_INITIALIZED                                                NTStatus      = 0xC0000510
	STATUS_ENCLAVE_NOT_TERMINATED                                             NTStatus      = 0xC0000511
	STATUS_ENCLAVE_IS_TERMINATING                                             NTStatus      = 0xC0000512
	STATUS_SMB1_NOT_AVAILABLE                                                 NTStatus      = 0xC0000513
	STATUS_SMR_GARBAGE_COLLECTION_REQUIRED                                    NTStatus      = 0xC0000514
	STATUS_INTERRUPTED                                                        NTStatus      = 0xC0000515
	STATUS_THREAD_NOT_RUNNING                                                 NTStatus      = 0xC0000516
	STATUS_FAIL_FAST_EXCEPTION                                                NTStatus      = 0xC0000602
	STATUS_IMAGE_CERT_REVOKED                                                 NTStatus      = 0xC0000603
	STATUS_DYNAMIC_CODE_BLOCKED                                               NTStatus      = 0xC0000604
	STATUS_IMAGE_CERT_EXPIRED                                                 NTStatus      = 0xC0000605
	STATUS_STRICT_CFG_VIOLATION                                               NTStatus      = 0xC0000606
	STATUS_SET_CONTEXT_DENIED                                                 NTStatus      = 0xC000060A
	STATUS_CROSS_PARTITION_VIOLATION                                          NTStatus      = 0xC000060B
	STATUS_PORT_CLOSED                                                        NTStatus      = 0xC0000700
	STATUS_MESSAGE_LOST                                                       NTStatus      = 0xC0000701
	STATUS_INVALID_MESSAGE                                                    NTStatus      = 0xC0000702
	STATUS_REQUEST_CANCELED                                                   NTStatus      = 0xC0000703
	STATUS_RECURSIVE_DISPATCH                                                 NTStatus      = 0xC0000704
	STATUS_LPC_RECEIVE_BUFFER_EXPECTED                                        NTStatus      = 0xC0000705
	STATUS_LPC_INVALID_CONNECTION_USAGE                                       NTStatus      = 0xC0000706
	STATUS_LPC_REQUESTS_NOT_ALLOWED                                           NTStatus      = 0xC0000707
	STATUS_RESOURCE_IN_USE                                                    NTStatus      = 0xC0000708
	STATUS_HARDWARE_MEMORY_ERROR                                              NTStatus      = 0xC0000709
	STATUS_THREADPOOL_HANDLE_EXCEPTION                                        NTStatus      = 0xC000070A
	STATUS_THREADPOOL_SET_EVENT_ON_COMPLETION_FAILED                          NTStatus      = 0xC000070B
	STATUS_THREADPOOL_RELEASE_SEMAPHORE_ON_COMPLETION_FAILED                  NTStatus      = 0xC000070C
	STATUS_THREADPOOL_RELEASE_MUTEX_ON_COMPLETION_FAILED                      NTStatus      = 0xC000070D
	STATUS_THREADPOOL_FREE_LIBRARY_ON_COMPLETION_FAILED                       NTStatus      = 0xC000070E
	STATUS_THREADPOOL_RELEASED_DURING_OPERATION                               NTStatus      = 0xC000070F
	STATUS_CALLBACK_RETURNED_WHILE_IMPERSONATING                              NTStatus      = 0xC0000710
	STATUS_APC_RETURNED_WHILE_IMPERSONATING                                   NTStatus      = 0xC0000711
	STATUS_PROCESS_IS_PROTECTED                                               NTStatus      = 0xC0000712
	STATUS_MCA_EXCEPTION                                                      NTStatus      = 0xC0000713
	STATUS_CERTIFICATE_MAPPING_NOT_UNIQUE                                     NTStatus      = 0xC0000714
	STATUS_SYMLINK_CLASS_DISABLED                                             NTStatus      = 0xC0000715
	STATUS_INVALID_IDN_NORMALIZATION                                          NTStatus      = 0xC0000716
	STATUS_NO_UNICODE_TRANSLATION                                             NTStatus      = 0xC0000717
	STATUS_ALREADY_REGISTERED                                                 NTStatus      = 0xC0000718
	STATUS_CONTEXT_MISMATCH                                                   NTStatus      = 0xC0000719
	STATUS_PORT_ALREADY_HAS_COMPLETION_LIST                                   NTStatus      = 0xC000071A
	STATUS_CALLBACK_RETURNED_THREAD_PRIORITY                                  NTStatus      = 0xC000071B
	STATUS_INVALID_THREAD                                                     NTStatus      = 0xC000071C
	STATUS_CALLBACK_RETURNED_TRANSACTION                                      NTStatus      = 0xC000071D
	STATUS_CALLBACK_RETURNED_LDR_LOCK                                         NTStatus      = 0xC000071E
	STATUS_CALLBACK_RETURNED_LANG                                             NTStatus      = 0xC000071F
	STATUS_CALLBACK_RETURNED_PRI_BACK                                         NTStatus      = 0xC0000720
	STATUS_CALLBACK_RETURNED_THREAD_AFFINITY                                  NTStatus      = 0xC0000721
	STATUS_LPC_HANDLE_COUNT_EXCEEDED                                          NTStatus      = 0xC0000722
	STATUS_EXECUTABLE_MEMORY_WRITE                                            NTStatus      = 0xC0000723
	STATUS_KERNEL_EXECUTABLE_MEMORY_WRITE                                     NTStatus      = 0xC0000724
	STATUS_ATTACHED_EXECUTABLE_MEMORY_WRITE                                   NTStatus      = 0xC0000725
	STATUS_TRIGGERED_EXECUTABLE_MEMORY_WRITE                                  NTStatus      = 0xC0000726
	STATUS_DISK_REPAIR_DISABLED                                               NTStatus      = 0xC0000800
	STATUS_DS_DOMAIN_RENAME_IN_PROGRESS                                       NTStatus      = 0xC0000801
	STATUS_DISK_QUOTA_EXCEEDED                                                NTStatus      = 0xC0000802
	STATUS_DATA_LOST_REPAIR                                                   NTStatus      = 0x80000803
	STATUS_CONTENT_BLOCKED                                                    NTStatus      = 0xC0000804
	STATUS_BAD_CLUSTERS                                                       NTStatus      = 0xC0000805
	STATUS_VOLUME_DIRTY                                                       NTStatus      = 0xC0000806
	STATUS_DISK_REPAIR_REDIRECTED                                             NTStatus      = 0x40000807
	STATUS_DISK_REPAIR_UNSUCCESSFUL                                           NTStatus      = 0xC0000808
	STATUS_CORRUPT_LOG_OVERFULL                                               NTStatus      = 0xC0000809
	STATUS_CORRUPT_LOG_CORRUPTED                                              NTStatus      = 0xC000080A
	STATUS_CORRUPT_LOG_UNAVAILABLE                                            NTStatus      = 0xC000080B
	STATUS_CORRUPT_LOG_DELETED_FULL                                           NTStatus      = 0xC000080C
	STATUS_CORRUPT_LOG_CLEARED                                                NTStatus      = 0xC000080D
	STATUS_ORPHAN_NAME_EXHAUSTED                                              NTStatus      = 0xC000080E
	STATUS_PROACTIVE_SCAN_IN_PROGRESS                                         NTStatus      = 0xC000080F
	STATUS_ENCRYPTED_IO_NOT_POSSIBLE                                          NTStatus      = 0xC0000810
	STATUS_CORRUPT_LOG_UPLEVEL_RECORDS                                        NTStatus      = 0xC0000811
	STATUS_FILE_CHECKED_OUT                                                   NTStatus      = 0xC0000901
	STATUS_CHECKOUT_REQUIRED                                                  NTStatus      = 0xC0000902
	STATUS_BAD_FILE_TYPE                                                      NTStatus      = 0xC0000903
	STATUS_FILE_TOO_LARGE                                                     NTStatus      = 0xC0000904
	STATUS_FORMS_AUTH_REQUIRED                                                NTStatus      = 0xC0000905
	STATUS_VIRUS_INFECTED                                                     NTStatus      = 0xC0000906
	STATUS_VIRUS_DELETED                                                      NTStatus      = 0xC0000907
	STATUS_BAD_MCFG_TABLE                                                     NTStatus      = 0xC0000908
	STATUS_CANNOT_BREAK_OPLOCK                                                NTStatus      = 0xC0000909
	STATUS_BAD_KEY                                                            NTStatus      = 0xC000090A
	STATUS_BAD_DATA                                                           NTStatus      = 0xC000090B
	STATUS_NO_KEY                                                             NTStatus      = 0xC000090C
	STATUS_FILE_HANDLE_REVOKED                                                NTStatus      = 0xC0000910
	STATUS_WOW_ASSERTION                                                      NTStatus      = 0xC0009898
	STATUS_INVALID_SIGNATURE                                                  NTStatus      = 0xC000A000
	STATUS_HMAC_NOT_SUPPORTED                                                 NTStatus      = 0xC000A001
	STATUS_AUTH_TAG_MISMATCH                                                  NTStatus      = 0xC000A002
	STATUS_INVALID_STATE_TRANSITION                                           NTStatus      = 0xC000A003
	STATUS_INVALID_KERNEL_INFO_VERSION                                        NTStatus      = 0xC000A004
	STATUS_INVALID_PEP_INFO_VERSION                                           NTStatus      = 0xC000A005
	STATUS_HANDLE_REVOKED                                                     NTStatus      = 0xC000A006
	STATUS_EOF_ON_GHOSTED_RANGE                                               NTStatus      = 0xC000A007
	STATUS_IPSEC_QUEUE_OVERFLOW                                               NTStatus      = 0xC000A010
	STATUS_ND_QUEUE_OVERFLOW                                                  NTStatus      = 0xC000A011
	STATUS_HOPLIMIT_EXCEEDED                                                  NTStatus      = 0xC000A012
	STATUS_PROTOCOL_NOT_SUPPORTED                                             NTStatus      = 0xC000A013
	STATUS_FASTPATH_REJECTED                                                  NTStatus      = 0xC000A014
	STATUS_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED                         NTStatus      = 0xC000A080
	STATUS_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR                         NTStatus      = 0xC000A081
	STATUS_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR                             NTStatus      = 0xC000A082
	STATUS_XML_PARSE_ERROR                                                    NTStatus      = 0xC000A083
	STATUS_XMLDSIG_ERROR                                                      NTStatus      = 0xC000A084
	STATUS_WRONG_COMPARTMENT                                                  NTStatus      = 0xC000A085
	STATUS_AUTHIP_FAILURE                                                     NTStatus      = 0xC000A086
	STATUS_DS_OID_MAPPED_GROUP_CANT_HAVE_MEMBERS                              NTStatus      = 0xC000A087
	STATUS_DS_OID_NOT_FOUND                                                   NTStatus      = 0xC000A088
	STATUS_INCORRECT_ACCOUNT_TYPE                                             NTStatus      = 0xC000A089
	STATUS_HASH_NOT_SUPPORTED                                                 NTStatus      = 0xC000A100
	STATUS_HASH_NOT_PRESENT                                                   NTStatus      = 0xC000A101
	STATUS_SECONDARY_IC_PROVIDER_NOT_REGISTERED                               NTStatus      = 0xC000A121
	STATUS_GPIO_CLIENT_INFORMATION_INVALID                                    NTStatus      = 0xC000A122
	STATUS_GPIO_VERSION_NOT_SUPPORTED                                         NTStatus      = 0xC000A123
	STATUS_GPIO_INVALID_REGISTRATION_PACKET                                   NTStatus      = 0xC000A124
	STATUS_GPIO_OPERATION_DENIED                                              NTStatus      = 0xC000A125
	STATUS_GPIO_INCOMPATIBLE_CONNECT_MODE                                     NTStatus      = 0xC000A126
	STATUS_GPIO_INTERRUPT_ALREADY_UNMASKED                                    NTStatus      = 0x8000A127
	STATUS_CANNOT_SWITCH_RUNLEVEL                                             NTStatus      = 0xC000A141
	STATUS_INVALID_RUNLEVEL_SETTING                                           NTStatus      = 0xC000A142
	STATUS_RUNLEVEL_SWITCH_TIMEOUT                                            NTStatus      = 0xC000A143
	STATUS_SERVICES_FAILED_AUTOSTART                                          NTStatus      = 0x4000A144
	STATUS_RUNLEVEL_SWITCH_AGENT_TIMEOUT                                      NTStatus      = 0xC000A145
	STATUS_RUNLEVEL_SWITCH_IN_PROGRESS                                        NTStatus      = 0xC000A146
	STATUS_NOT_APPCONTAINER                                                   NTStatus      = 0xC000A200
	STATUS_NOT_SUPPORTED_IN_APPCONTAINER                                      NTStatus      = 0xC000A201
	STATUS_INVALID_PACKAGE_SID_LENGTH                                         NTStatus      = 0xC000A202
	STATUS_LPAC_ACCESS_DENIED                                                 NTStatus      = 0xC000A203
	STATUS_ADMINLESS_ACCESS_DENIED                                            NTStatus      = 0xC000A204
	STATUS_APP_DATA_NOT_FOUND                                                 NTStatus      = 0xC000A281
	STATUS_APP_DATA_EXPIRED                                                   NTStatus      = 0xC000A282
	STATUS_APP_DATA_CORRUPT                                                   NTStatus      = 0xC000A283
	STATUS_APP_DATA_LIMIT_EXCEEDED                                            NTStatus      = 0xC000A284
	STATUS_APP_DATA_REBOOT_REQUIRED                                           NTStatus      = 0xC000A285
	STATUS_OFFLOAD_READ_FLT_NOT_SUPPORTED                                     NTStatus      = 0xC000A2A1
	STATUS_OFFLOAD_WRITE_FLT_NOT_SUPPORTED                                    NTStatus      = 0xC000A2A2
	STATUS_OFFLOAD_READ_FILE_NOT_SUPPORTED                                    NTStatus      = 0xC000A2A3
	STATUS_OFFLOAD_WRITE_FILE_NOT_SUPPORTED                                   NTStatus      = 0xC000A2A4
	STATUS_WOF_WIM_HEADER_CORRUPT                                             NTStatus      = 0xC000A2A5
	STATUS_WOF_WIM_RESOURCE_TABLE_CORRUPT                                     NTStatus      = 0xC000A2A6
	STATUS_WOF_FILE_RESOURCE_TABLE_CORRUPT                                    NTStatus      = 0xC000A2A7
	STATUS_FILE_SYSTEM_VIRTUALIZATION_UNAVAILABLE                             NTStatus      = 0xC000CE01
	STATUS_FILE_SYSTEM_VIRTUALIZATION_METADATA_CORRUPT                        NTStatus      = 0xC000CE02
	STATUS_FILE_SYSTEM_VIRTUALIZATION_BUSY                                    NTStatus      = 0xC000CE03
	STATUS_FILE_SYSTEM_VIRTUALIZATION_PROVIDER_UNKNOWN                        NTStatus      = 0xC000CE04
	STATUS_FILE_SYSTEM_VIRTUALIZATION_INVALID_OPERATION                       NTStatus      = 0xC000CE05
	STATUS_CLOUD_FILE_SYNC_ROOT_METADATA_CORRUPT                              NTStatus      = 0xC000CF00
	STATUS_CLOUD_FILE_PROVIDER_NOT_RUNNING                                    NTStatus      = 0xC000CF01
	STATUS_CLOUD_FILE_METADATA_CORRUPT                                        NTStatus      = 0xC000CF02
	STATUS_CLOUD_FILE_METADATA_TOO_LARGE                                      NTStatus      = 0xC000CF03
	STATUS_CLOUD_FILE_PROPERTY_BLOB_TOO_LARGE                                 NTStatus      = 0x8000CF04
	STATUS_CLOUD_FILE_TOO_MANY_PROPERTY_BLOBS                                 NTStatus      = 0x8000CF05
	STATUS_CLOUD_FILE_PROPERTY_VERSION_NOT_SUPPORTED                          NTStatus      = 0xC000CF06
	STATUS_NOT_A_CLOUD_FILE                                                   NTStatus      = 0xC000CF07
	STATUS_CLOUD_FILE_NOT_IN_SYNC                                             NTStatus      = 0xC000CF08
	STATUS_CLOUD_FILE_ALREADY_CONNECTED                                       NTStatus      = 0xC000CF09
	STATUS_CLOUD_FILE_NOT_SUPPORTED                                           NTStatus      = 0xC000CF0A
	STATUS_CLOUD_FILE_INVALID_REQUEST                                         NTStatus      = 0xC000CF0B
	STATUS_CLOUD_FILE_READ_ONLY_VOLUME                                        NTStatus      = 0xC000CF0C
	STATUS_CLOUD_FILE_CONNECTED_PROVIDER_ONLY                                 NTStatus      = 0xC000CF0D
	STATUS_CLOUD_FILE_VALIDATION_FAILED                                       NTStatus      = 0xC000CF0E
	STATUS_CLOUD_FILE_AUTHENTICATION_FAILED                                   NTStatus      = 0xC000CF0F
	STATUS_CLOUD_FILE_INSUFFICIENT_RESOURCES                                  NTStatus      = 0xC000CF10
	STATUS_CLOUD_FILE_NETWORK_UNAVAILABLE                                     NTStatus      = 0xC000CF11
	STATUS_CLOUD_FILE_UNSUCCESSFUL                                            NTStatus      = 0xC000CF12
	STATUS_CLOUD_FILE_NOT_UNDER_SYNC_ROOT                                     NTStatus      = 0xC000CF13
	STATUS_CLOUD_FILE_IN_USE                                                  NTStatus      = 0xC000CF14
	STATUS_CLOUD_FILE_PINNED                                                  NTStatus      = 0xC000CF15
	STATUS_CLOUD_FILE_REQUEST_ABORTED                                         NTStatus      = 0xC000CF16
	STATUS_CLOUD_FILE_PROPERTY_CORRUPT                                        NTStatus      = 0xC000CF17
	STATUS_CLOUD_FILE_ACCESS_DENIED                                           NTStatus      = 0xC000CF18
	STATUS_CLOUD_FILE_INCOMPATIBLE_HARDLINKS                                  NTStatus      = 0xC000CF19
	STATUS_CLOUD_FILE_PROPERTY_LOCK_CONFLICT                                  NTStatus      = 0xC000CF1A
	STATUS_CLOUD_FILE_REQUEST_CANCELED                                        NTStatus      = 0xC000CF1B
	STATUS_CLOUD_FILE_PROVIDER_TERMINATED                                     NTStatus      = 0xC000CF1D
	STATUS_NOT_A_CLOUD_SYNC_ROOT                                              NTStatus      = 0xC000CF1E
	STATUS_CLOUD_FILE_REQUEST_TIMEOUT                                         NTStatus      = 0xC000CF1F
	STATUS_ACPI_INVALID_OPCODE                                                NTStatus      = 0xC0140001
	STATUS_ACPI_STACK_OVERFLOW                                                NTStatus      = 0xC0140002
	STATUS_ACPI_ASSERT_FAILED                                                 NTStatus      = 0xC0140003
	STATUS_ACPI_INVALID_INDEX                                                 NTStatus      = 0xC0140004
	STATUS_ACPI_INVALID_ARGUMENT                                              NTStatus      = 0xC0140005
	STATUS_ACPI_FATAL                                                         NTStatus      = 0xC0140006
	STATUS_ACPI_INVALID_SUPERNAME                                             NTStatus      = 0xC0140007
	STATUS_ACPI_INVALID_ARGTYPE                                               NTStatus      = 0xC0140008
	STATUS_ACPI_INVALID_OBJTYPE                                               NTStatus      = 0xC0140009
	STATUS_ACPI_INVALID_TARGETTYPE                                            NTStatus      = 0xC014000A
	STATUS_ACPI_INCORRECT_ARGUMENT_COUNT                                      NTStatus      = 0xC014000B
	STATUS_ACPI_ADDRESS_NOT_MAPPED                                            NTStatus      = 0xC014000C
	STATUS_ACPI_INVALID_EVENTTYPE                                             NTStatus      = 0xC014000D
	STATUS_ACPI_HANDLER_COLLISION                                             NTStatus      = 0xC014000E
	STATUS_ACPI_INVALID_DATA                                                  NTStatus      = 0xC014000F
	STATUS_ACPI_INVALID_REGION                                                NTStatus      = 0xC0140010
	STATUS_ACPI_INVALID_ACCESS_SIZE                                           NTStatus      = 0xC0140011
	STATUS_ACPI_ACQUIRE_GLOBAL_LOCK                                           NTStatus      = 0xC0140012
	STATUS_ACPI_ALREADY_INITIALIZED                                           NTStatus      = 0xC0140013
	STATUS_ACPI_NOT_INITIALIZED                                               NTStatus      = 0xC0140014
	STATUS_ACPI_INVALID_MUTEX_LEVEL                                           NTStatus      = 0xC0140015
	STATUS_ACPI_MUTEX_NOT_OWNED                                               NTStatus      = 0xC0140016
	STATUS_ACPI_MUTEX_NOT_OWNER                                               NTStatus      = 0xC0140017
	STATUS_ACPI_RS_ACCESS                                                     NTStatus      = 0xC0140018
	STATUS_ACPI_INVALID_TABLE                                                 NTStatus      = 0xC0140019
	STATUS_ACPI_REG_HANDLER_FAILED                                            NTStatus      = 0xC0140020
	STATUS_ACPI_POWER_REQUEST_FAILED                                          NTStatus      = 0xC0140021
	STATUS_CTX_WINSTATION_NAME_INVALID                                        NTStatus      = 0xC00A0001
	STATUS_CTX_INVALID_PD                                                     NTStatus      = 0xC00A0002
	STATUS_CTX_PD_NOT_FOUND                                                   NTStatus      = 0xC00A0003
	STATUS_CTX_CDM_CONNECT                                                    NTStatus      = 0x400A0004
	STATUS_CTX_CDM_DISCONNECT                                                 NTStatus      = 0x400A0005
	STATUS_CTX_CLOSE_PENDING                                                  NTStatus      = 0xC00A0006
	STATUS_CTX_NO_OUTBUF                                                      NTStatus      = 0xC00A0007
	STATUS_CTX_MODEM_INF_NOT_FOUND                                            NTStatus      = 0xC00A0008
	STATUS_CTX_INVALID_MODEMNAME                                              NTStatus      = 0xC00A0009
	STATUS_CTX_RESPONSE_ERROR                                                 NTStatus      = 0xC00A000A
	STATUS_CTX_MODEM_RESPONSE_TIMEOUT                                         NTStatus      = 0xC00A000B
	STATUS_CTX_MODEM_RESPONSE_NO_CARRIER                                      NTStatus      = 0xC00A000C
	STATUS_CTX_MODEM_RESPONSE_NO_DIALTONE                                     NTStatus      = 0xC00A000D
	STATUS_CTX_MODEM_RESPONSE_BUSY                                            NTStatus      = 0xC00A000E
	STATUS_CTX_MODEM_RESPONSE_VOICE                                           NTStatus      = 0xC00A000F
	STATUS_CTX_TD_ERROR                                                       NTStatus      = 0xC00A0010
	STATUS_CTX_LICENSE_CLIENT_INVALID                                         NTStatus      = 0xC00A0012
	STATUS_CTX_LICENSE_NOT_AVAILABLE                                          NTStatus      = 0xC00A0013
	STATUS_CTX_LICENSE_EXPIRED                                                NTStatus      = 0xC00A0014
	STATUS_CTX_WINSTATION_NOT_FOUND                                           NTStatus      = 0xC00A0015
	STATUS_CTX_WINSTATION_NAME_COLLISION                                      NTStatus      = 0xC00A0016
	STATUS_CTX_WINSTATION_BUSY                                                NTStatus      = 0xC00A0017
	STATUS_CTX_BAD_VIDEO_MODE                                                 NTStatus      = 0xC00A0018
	STATUS_CTX_GRAPHICS_INVALID                                               NTStatus      = 0xC00A0022
	STATUS_CTX_NOT_CONSOLE                                                    NTStatus      = 0xC00A0024
	STATUS_CTX_CLIENT_QUERY_TIMEOUT                                           NTStatus      = 0xC00A0026
	STATUS_CTX_CONSOLE_DISCONNECT                                             NTStatus      = 0xC00A0027
	STATUS_CTX_CONSOLE_CONNECT                                                NTStatus      = 0xC00A0028
	STATUS_CTX_SHADOW_DENIED                                                  NTStatus      = 0xC00A002A
	STATUS_CTX_WINSTATION_ACCESS_DENIED                                       NTStatus      = 0xC00A002B
	STATUS_CTX_INVALID_WD                                                     NTStatus      = 0xC00A002E
	STATUS_CTX_WD_NOT_FOUND                                                   NTStatus      = 0xC00A002F
	STATUS_CTX_SHADOW_INVALID                                                 NTStatus      = 0xC00A0030
	STATUS_CTX_SHADOW_DISABLED                                                NTStatus      = 0xC00A0031
	STATUS_RDP_PROTOCOL_ERROR                                                 NTStatus      = 0xC00A0032
	STATUS_CTX_CLIENT_LICENSE_NOT_SET                                         NTStatus      = 0xC00A0033
	STATUS_CTX_CLIENT_LICENSE_IN_USE                                          NTStatus      = 0xC00A0034
	STATUS_CTX_SHADOW_ENDED_BY_MODE_CHANGE                                    NTStatus      = 0xC00A0035
	STATUS_CTX_SHADOW_NOT_RUNNING                                             NTStatus      = 0xC00A0036
	STATUS_CTX_LOGON_DISABLED                                                 NTStatus      = 0xC00A0037
	STATUS_CTX_SECURITY_LAYER_ERROR                                           NTStatus      = 0xC00A0038
	STATUS_TS_INCOMPATIBLE_SESSIONS                                           NTStatus      = 0xC00A0039
	STATUS_TS_VIDEO_SUBSYSTEM_ERROR                                           NTStatus      = 0xC00A003A
	STATUS_PNP_BAD_MPS_TABLE                                                  NTStatus      = 0xC0040035
	STATUS_PNP_TRANSLATION_FAILED                                             NTStatus      = 0xC0040036
	STATUS_PNP_IRQ_TRANSLATION_FAILED                                         NTStatus      = 0xC0040037
	STATUS_PNP_INVALID_ID                                                     NTStatus      = 0xC0040038
	STATUS_IO_REISSUE_AS_CACHED                                               NTStatus      = 0xC0040039
	STATUS_MUI_FILE_NOT_FOUND                                                 NTStatus      = 0xC00B0001
	STATUS_MUI_INVALID_FILE                                                   NTStatus      = 0xC00B0002
	STATUS_MUI_INVALID_RC_CONFIG                                              NTStatus      = 0xC00B0003
	STATUS_MUI_INVALID_LOCALE_NAME                                            NTStatus      = 0xC00B0004
	STATUS_MUI_INVALID_ULTIMATEFALLBACK_NAME                                  NTStatus      = 0xC00B0005
	STATUS_MUI_FILE_NOT_LOADED                                                NTStatus      = 0xC00B0006
	STATUS_RESOURCE_ENUM_USER_STOP                                            NTStatus      = 0xC00B0007
	STATUS_FLT_NO_HANDLER_DEFINED                                             NTStatus      = 0xC01C0001
	STATUS_FLT_CONTEXT_ALREADY_DEFINED                                        NTStatus      = 0xC01C0002
	STATUS_FLT_INVALID_ASYNCHRONOUS_REQUEST                                   NTStatus      = 0xC01C0003
	STATUS_FLT_DISALLOW_FAST_IO                                               NTStatus      = 0xC01C0004
	STATUS_FLT_INVALID_NAME_REQUEST                                           NTStatus      = 0xC01C0005
	STATUS_FLT_NOT_SAFE_TO_POST_OPERATION                                     NTStatus      = 0xC01C0006
	STATUS_FLT_NOT_INITIALIZED                                                NTStatus      = 0xC01C0007
	STATUS_FLT_FILTER_NOT_READY                                               NTStatus      = 0xC01C0008
	STATUS_FLT_POST_OPERATION_CLEANUP                                         NTStatus      = 0xC01C0009
	STATUS_FLT_INTERNAL_ERROR                                                 NTStatus      = 0xC01C000A
	STATUS_FLT_DELETING_OBJECT                                                NTStatus      = 0xC01C000B
	STATUS_FLT_MUST_BE_NONPAGED_POOL                                          NTStatus      = 0xC01C000C
	STATUS_FLT_DUPLICATE_ENTRY                                                NTStatus      = 0xC01C000D
	STATUS_FLT_CBDQ_DISABLED                                                  NTStatus      = 0xC01C000E
	STATUS_FLT_DO_NOT_ATTACH                                                  NTStatus      = 0xC01C000F
	STATUS_FLT_DO_NOT_DETACH                                                  NTStatus      = 0xC01C0010
	STATUS_FLT_INSTANCE_ALTITUDE_COLLISION                                    NTStatus      = 0xC01C0011
	STATUS_FLT_INSTANCE_NAME_COLLISION                                        NTStatus      = 0xC01C0012
	STATUS_FLT_FILTER_NOT_FOUND                                               NTStatus      = 0xC01C0013
	STATUS_FLT_VOLUME_NOT_FOUND                                               NTStatus      = 0xC01C0014
	STATUS_FLT_INSTANCE_NOT_FOUND                                             NTStatus      = 0xC01C0015
	STATUS_FLT_CONTEXT_ALLOCATION_NOT_FOUND                                   NTStatus      = 0xC01C0016
	STATUS_FLT_INVALID_CONTEXT_REGISTRATION                                   NTStatus      = 0xC01C0017
	STATUS_FLT_NAME_CACHE_MISS                                                NTStatus      = 0xC01C0018
	STATUS_FLT_NO_DEVICE_OBJECT                                               NTStatus      = 0xC01C0019
	STATUS_FLT_VOLUME_ALREADY_MOUNTED                                         NTStatus      = 0xC01C001A
	STATUS_FLT_ALREADY_ENLISTED                                               NTStatus      = 0xC01C001B
	STATUS_FLT_CONTEXT_ALREADY_LINKED                                         NTStatus      = 0xC01C001C
	STATUS_FLT_NO_WAITER_FOR_REPLY                                            NTStatus      = 0xC01C0020
	STATUS_FLT_REGISTRATION_BUSY                                              NTStatus      = 0xC01C0023
	STATUS_SXS_SECTION_NOT_FOUND                                              NTStatus      = 0xC0150001
	STATUS_SXS_CANT_GEN_ACTCTX                                                NTStatus      = 0xC0150002
	STATUS_SXS_INVALID_ACTCTXDATA_FORMAT                                      NTStatus      = 0xC0150003
	STATUS_SXS_ASSEMBLY_NOT_FOUND                                             NTStatus      = 0xC0150004
	STATUS_SXS_MANIFEST_FORMAT_ERROR                                          NTStatus      = 0xC0150005
	STATUS_SXS_MANIFEST_PARSE_ERROR                                           NTStatus      = 0xC0150006
	STATUS_SXS_ACTIVATION_CONTEXT_DISABLED                                    NTStatus      = 0xC0150007
	STATUS_SXS_KEY_NOT_FOUND                                                  NTStatus      = 0xC0150008
	STATUS_SXS_VERSION_CONFLICT                                               NTStatus      = 0xC0150009
	STATUS_SXS_WRONG_SECTION_TYPE                                             NTStatus      = 0xC015000A
	STATUS_SXS_THREAD_QUERIES_DISABLED                                        NTStatus      = 0xC015000B
	STATUS_SXS_ASSEMBLY_MISSING                                               NTStatus      = 0xC015000C
	STATUS_SXS_RELEASE_ACTIVATION_CONTEXT                                     NTStatus      = 0x4015000D
	STATUS_SXS_PROCESS_DEFAULT_ALREADY_SET                                    NTStatus      = 0xC015000E
	STATUS_SXS_EARLY_DEACTIVATION                                             NTStatus      = 0xC015000F
	STATUS_SXS_INVALID_DEACTIVATION                                           NTStatus      = 0xC0150010
	STATUS_SXS_MULTIPLE_DEACTIVATION                                          NTStatus      = 0xC0150011
	STATUS_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY                        NTStatus      = 0xC0150012
	STATUS_SXS_PROCESS_TERMINATION_REQUESTED                                  NTStatus      = 0xC0150013
	STATUS_SXS_CORRUPT_ACTIVATION_STACK                                       NTStatus      = 0xC0150014
	STATUS_SXS_CORRUPTION                                                     NTStatus      = 0xC0150015
	STATUS_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE                               NTStatus      = 0xC0150016
	STATUS_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME                                NTStatus      = 0xC0150017
	STATUS_SXS_IDENTITY_DUPLICATE_ATTRIBUTE                                   NTStatus      = 0xC0150018
	STATUS_SXS_IDENTITY_PARSE_ERROR                                           NTStatus      = 0xC0150019
	STATUS_SXS_COMPONENT_STORE_CORRUPT                                        NTStatus      = 0xC015001A
	STATUS_SXS_FILE_HASH_MISMATCH                                             NTStatus      = 0xC015001B
	STATUS_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT                  NTStatus      = 0xC015001C
	STATUS_SXS_IDENTITIES_DIFFERENT                                           NTStatus      = 0xC015001D
	STATUS_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT                                   NTStatus      = 0xC015001E
	STATUS_SXS_FILE_NOT_PART_OF_ASSEMBLY                                      NTStatus      = 0xC015001F
	STATUS_ADVANCED_INSTALLER_FAILED                                          NTStatus      = 0xC0150020
	STATUS_XML_ENCODING_MISMATCH                                              NTStatus      = 0xC0150021
	STATUS_SXS_MANIFEST_TOO_BIG                                               NTStatus      = 0xC0150022
	STATUS_SXS_SETTING_NOT_REGISTERED                                         NTStatus      = 0xC0150023
	STATUS_SXS_TRANSACTION_CLOSURE_INCOMPLETE                                 NTStatus      = 0xC0150024
	STATUS_SMI_PRIMITIVE_INSTALLER_FAILED                                     NTStatus      = 0xC0150025
	STATUS_GENERIC_COMMAND_FAILED                                             NTStatus      = 0xC0150026
	STATUS_SXS_FILE_HASH_MISSING                                              NTStatus      = 0xC0150027
	STATUS_CLUSTER_INVALID_NODE                                               NTStatus      = 0xC0130001
	STATUS_CLUSTER_NODE_EXISTS                                                NTStatus      = 0xC0130002
	STATUS_CLUSTER_JOIN_IN_PROGRESS                                           NTStatus      = 0xC0130003
	STATUS_CLUSTER_NODE_NOT_FOUND                                             NTStatus      = 0xC0130004
	STATUS_CLUSTER_LOCAL_NODE_NOT_FOUND                                       NTStatus      = 0xC0130005
	STATUS_CLUSTER_NETWORK_EXISTS                                             NTStatus      = 0xC0130006
	STATUS_CLUSTER_NETWORK_NOT_FOUND                                          NTStatus      = 0xC0130007
	STATUS_CLUSTER_NETINTERFACE_EXISTS                                        NTStatus      = 0xC0130008
	STATUS_CLUSTER_NETINTERFACE_NOT_FOUND                                     NTStatus      = 0xC0130009
	STATUS_CLUSTER_INVALID_REQUEST                                            NTStatus      = 0xC013000A
	STATUS_CLUSTER_INVALID_NETWORK_PROVIDER                                   NTStatus      = 0xC013000B
	STATUS_CLUSTER_NODE_DOWN                                                  NTStatus      = 0xC013000C
	STATUS_CLUSTER_NODE_UNREACHABLE                                           NTStatus      = 0xC013000D
	STATUS_CLUSTER_NODE_NOT_MEMBER                                            NTStatus      = 0xC013000E
	STATUS_CLUSTER_JOIN_NOT_IN_PROGRESS                                       NTStatus      = 0xC013000F
	STATUS_CLUSTER_INVALID_NETWORK                                            NTStatus      = 0xC0130010
	STATUS_CLUSTER_NO_NET_ADAPTERS                                            NTStatus      = 0xC0130011
	STATUS_CLUSTER_NODE_UP                                                    NTStatus      = 0xC0130012
	STATUS_CLUSTER_NODE_PAUSED                                                NTStatus      = 0xC0130013
	STATUS_CLUSTER_NODE_NOT_PAUSED                                            NTStatus      = 0xC0130014
	STATUS_CLUSTER_NO_SECURITY_CONTEXT                                        NTStatus      = 0xC0130015
	STATUS_CLUSTER_NETWORK_NOT_INTERNAL                                       NTStatus      = 0xC0130016
	STATUS_CLUSTER_POISONED                                                   NTStatus      = 0xC0130017
	STATUS_CLUSTER_NON_CSV_PATH                                               NTStatus      = 0xC0130018
	STATUS_CLUSTER_CSV_VOLUME_NOT_LOCAL                                       NTStatus      = 0xC0130019
	STATUS_CLUSTER_CSV_READ_OPLOCK_BREAK_IN_PROGRESS                          NTStatus      = 0xC0130020
	STATUS_CLUSTER_CSV_AUTO_PAUSE_ERROR                                       NTStatus      = 0xC0130021
	STATUS_CLUSTER_CSV_REDIRECTED                                             NTStatus      = 0xC0130022
	STATUS_CLUSTER_CSV_NOT_REDIRECTED                                         NTStatus      = 0xC0130023
	STATUS_CLUSTER_CSV_VOLUME_DRAINING                                        NTStatus      = 0xC0130024
	STATUS_CLUSTER_CSV_SNAPSHOT_CREATION_IN_PROGRESS                          NTStatus      = 0xC0130025
	STATUS_CLUSTER_CSV_VOLUME_DRAINING_SUCCEEDED_DOWNLEVEL                    NTStatus      = 0xC0130026
	STATUS_CLUSTER_CSV_NO_SNAPSHOTS                                           NTStatus      = 0xC0130027
	STATUS_CSV_IO_PAUSE_TIMEOUT                                               NTStatus      = 0xC0130028
	STATUS_CLUSTER_CSV_INVALID_HANDLE                                         NTStatus      = 0xC0130029
	STATUS_CLUSTER_CSV_SUPPORTED_ONLY_ON_COORDINATOR                          NTStatus      = 0xC0130030
	STATUS_CLUSTER_CAM_TICKET_REPLAY_DETECTED                                 NTStatus      = 0xC0130031
	STATUS_TRANSACTIONAL_CONFLICT                                             NTStatus      = 0xC0190001
	STATUS_INVALID_TRANSACTION                                                NTStatus      = 0xC0190002
	STATUS_TRANSACTION_NOT_ACTIVE                                             NTStatus      = 0xC0190003
	STATUS_TM_INITIALIZATION_FAILED                                           NTStatus      = 0xC0190004
	STATUS_RM_NOT_ACTIVE                                                      NTStatus      = 0xC0190005
	STATUS_RM_METADATA_CORRUPT                                                NTStatus      = 0xC0190006
	STATUS_TRANSACTION_NOT_JOINED                                             NTStatus      = 0xC0190007
	STATUS_DIRECTORY_NOT_RM                                                   NTStatus      = 0xC0190008
	STATUS_COULD_NOT_RESIZE_LOG                                               NTStatus      = 0x80190009
	STATUS_TRANSACTIONS_UNSUPPORTED_REMOTE                                    NTStatus      = 0xC019000A
	STATUS_LOG_RESIZE_INVALID_SIZE                                            NTStatus      = 0xC019000B
	STATUS_REMOTE_FILE_VERSION_MISMATCH                                       NTStatus      = 0xC019000C
	STATUS_CRM_PROTOCOL_ALREADY_EXISTS                                        NTStatus      = 0xC019000F
	STATUS_TRANSACTION_PROPAGATION_FAILED                                     NTStatus      = 0xC0190010
	STATUS_CRM_PROTOCOL_NOT_FOUND                                             NTStatus      = 0xC0190011
	STATUS_TRANSACTION_SUPERIOR_EXISTS                                        NTStatus      = 0xC0190012
	STATUS_TRANSACTION_REQUEST_NOT_VALID                                      NTStatus      = 0xC0190013
	STATUS_TRANSACTION_NOT_REQUESTED                                          NTStatus      = 0xC0190014
	STATUS_TRANSACTION_ALREADY_ABORTED                                        NTStatus      = 0xC0190015
	STATUS_TRANSACTION_ALREADY_COMMITTED                                      NTStatus      = 0xC0190016
	STATUS_TRANSACTION_INVALID_MARSHALL_BUFFER                                NTStatus      = 0xC0190017
	STATUS_CURRENT_TRANSACTION_NOT_VALID                                      NTStatus      = 0xC0190018
	STATUS_LOG_GROWTH_FAILED                                                  NTStatus      = 0xC0190019
	STATUS_OBJECT_NO_LONGER_EXISTS                                            NTStatus      = 0xC0190021
	STATUS_STREAM_MINIVERSION_NOT_FOUND                                       NTStatus      = 0xC0190022
	STATUS_STREAM_MINIVERSION_NOT_VALID                                       NTStatus      = 0xC0190023
	STATUS_MINIVERSION_INACCESSIBLE_FROM_SPECIFIED_TRANSACTION                NTStatus      = 0xC0190024
	STATUS_CANT_OPEN_MINIVERSION_WITH_MODIFY_INTENT                           NTStatus      = 0xC0190025
	STATUS_CANT_CREATE_MORE_STREAM_MINIVERSIONS                               NTStatus      = 0xC0190026
	STATUS_HANDLE_NO_LONGER_VALID                                             NTStatus      = 0xC0190028
	STATUS_NO_TXF_METADATA                                                    NTStatus      = 0x80190029
	STATUS_LOG_CORRUPTION_DETECTED                                            NTStatus      = 0xC0190030
	STATUS_CANT_RECOVER_WITH_HANDLE_OPEN                                      NTStatus      = 0x80190031
	STATUS_RM_DISCONNECTED                                                    NTStatus      = 0xC0190032
	STATUS_ENLISTMENT_NOT_SUPERIOR                                            NTStatus      = 0xC0190033
	STATUS_RECOVERY_NOT_NEEDED                                                NTStatus      = 0x40190034
	STATUS_RM_ALREADY_STARTED                                                 NTStatus      = 0x40190035
	STATUS_FILE_IDENTITY_NOT_PERSISTENT                                       NTStatus      = 0xC0190036
	STATUS_CANT_BREAK_TRANSACTIONAL_DEPENDENCY                                NTStatus      = 0xC0190037
	STATUS_CANT_CROSS_RM_BOUNDARY                                             NTStatus      = 0xC0190038
	STATUS_TXF_DIR_NOT_EMPTY                                                  NTStatus      = 0xC0190039
	STATUS_INDOUBT_TRANSACTIONS_EXIST                                         NTStatus      = 0xC019003A
	STATUS_TM_VOLATILE                                                        NTStatus      = 0xC019003B
	STATUS_ROLLBACK_TIMER_EXPIRED                                             NTStatus      = 0xC019003C
	STATUS_TXF_ATTRIBUTE_CORRUPT                                              NTStatus      = 0xC019003D
	STATUS_EFS_NOT_ALLOWED_IN_TRANSACTION                                     NTStatus      = 0xC019003E
	STATUS_TRANSACTIONAL_OPEN_NOT_ALLOWED                                     NTStatus      = 0xC019003F
	STATUS_TRANSACTED_MAPPING_UNSUPPORTED_REMOTE                              NTStatus      = 0xC0190040
	STATUS_TXF_METADATA_ALREADY_PRESENT                                       NTStatus      = 0x80190041
	STATUS_TRANSACTION_SCOPE_CALLBACKS_NOT_SET                                NTStatus      = 0x80190042
	STATUS_TRANSACTION_REQUIRED_PROMOTION                                     NTStatus      = 0xC0190043
	STATUS_CANNOT_EXECUTE_FILE_IN_TRANSACTION                                 NTStatus      = 0xC0190044
	STATUS_TRANSACTIONS_NOT_FROZEN                                            NTStatus      = 0xC0190045
	STATUS_TRANSACTION_FREEZE_IN_PROGRESS                                     NTStatus      = 0xC0190046
	STATUS_NOT_SNAPSHOT_VOLUME                                                NTStatus      = 0xC0190047
	STATUS_NO_SAVEPOINT_WITH_OPEN_FILES                                       NTStatus      = 0xC0190048
	STATUS_SPARSE_NOT_ALLOWED_IN_TRANSACTION                                  NTStatus      = 0xC0190049
	STATUS_TM_IDENTITY_MISMATCH                                               NTStatus      = 0xC019004A
	STATUS_FLOATED_SECTION                                                    NTStatus      = 0xC019004B
	STATUS_CANNOT_ACCEPT_TRANSACTED_WORK                                      NTStatus      = 0xC019004C
	STATUS_CANNOT_ABORT_TRANSACTIONS                                          NTStatus      = 0xC019004D
	STATUS_TRANSACTION_NOT_FOUND                                              NTStatus      = 0xC019004E
	STATUS_RESOURCEMANAGER_NOT_FOUND                                          NTStatus      = 0xC019004F
	STATUS_ENLISTMENT_NOT_FOUND                                               NTStatus      = 0xC0190050
	STATUS_TRANSACTIONMANAGER_NOT_FOUND                                       NTStatus      = 0xC0190051
	STATUS_TRANSACTIONMANAGER_NOT_ONLINE                                      NTStatus      = 0xC0190052
	STATUS_TRANSACTIONMANAGER_RECOVERY_NAME_COLLISION                         NTStatus      = 0xC0190053
	STATUS_TRANSACTION_NOT_ROOT                                               NTStatus      = 0xC0190054
	STATUS_TRANSACTION_OBJECT_EXPIRED                                         NTStatus      = 0xC0190055
	STATUS_COMPRESSION_NOT_ALLOWED_IN_TRANSACTION                             NTStatus      = 0xC0190056
	STATUS_TRANSACTION_RESPONSE_NOT_ENLISTED                                  NTStatus      = 0xC0190057
	STATUS_TRANSACTION_RECORD_TOO_LONG                                        NTStatus      = 0xC0190058
	STATUS_NO_LINK_TRACKING_IN_TRANSACTION                                    NTStatus      = 0xC0190059
	STATUS_OPERATION_NOT_SUPPORTED_IN_TRANSACTION                             NTStatus      = 0xC019005A
	STATUS_TRANSACTION_INTEGRITY_VIOLATED                                     NTStatus      = 0xC019005B
	STATUS_TRANSACTIONMANAGER_IDENTITY_MISMATCH                               NTStatus      = 0xC019005C
	STATUS_RM_CANNOT_BE_FROZEN_FOR_SNAPSHOT                                   NTStatus      = 0xC019005D
	STATUS_TRANSACTION_MUST_WRITETHROUGH                                      NTStatus      = 0xC019005E
	STATUS_TRANSACTION_NO_SUPERIOR                                            NTStatus      = 0xC019005F
	STATUS_EXPIRED_HANDLE                                                     NTStatus      = 0xC0190060
	STATUS_TRANSACTION_NOT_ENLISTED                                           NTStatus      = 0xC0190061
	STATUS_LOG_SECTOR_INVALID                                                 NTStatus      = 0xC01A0001
	STATUS_LOG_SECTOR_PARITY_INVALID                                          NTStatus      = 0xC01A0002
	STATUS_LOG_SECTOR_REMAPPED                                                NTStatus      = 0xC01A0003
	STATUS_LOG_BLOCK_INCOMPLETE                                               NTStatus      = 0xC01A0004
	STATUS_LOG_INVALID_RANGE                                                  NTStatus      = 0xC01A0005
	STATUS_LOG_BLOCKS_EXHAUSTED                                               NTStatus      = 0xC01A0006
	STATUS_LOG_READ_CONTEXT_INVALID                                           NTStatus      = 0xC01A0007
	STATUS_LOG_RESTART_INVALID                                                NTStatus      = 0xC01A0008
	STATUS_LOG_BLOCK_VERSION                                                  NTStatus      = 0xC01A0009
	STATUS_LOG_BLOCK_INVALID                                                  NTStatus      = 0xC01A000A
	STATUS_LOG_READ_MODE_INVALID                                              NTStatus      = 0xC01A000B
	STATUS_LOG_NO_RESTART                                                     NTStatus      = 0x401A000C
	STATUS_LOG_METADATA_CORRUPT                                               NTStatus      = 0xC01A000D
	STATUS_LOG_METADATA_INVALID                                               NTStatus      = 0xC01A000E
	STATUS_LOG_METADATA_INCONSISTENT                                          NTStatus      = 0xC01A000F
	STATUS_LOG_RESERVATION_INVALID                                            NTStatus      = 0xC01A0010
	STATUS_LOG_CANT_DELETE                                                    NTStatus      = 0xC01A0011
	STATUS_LOG_CONTAINER_LIMIT_EXCEEDED                                       NTStatus      = 0xC01A0012
	STATUS_LOG_START_OF_LOG                                                   NTStatus      = 0xC01A0013
	STATUS_LOG_POLICY_ALREADY_INSTALLED                                       NTStatus      = 0xC01A0014
	STATUS_LOG_POLICY_NOT_INSTALLED                                           NTStatus      = 0xC01A0015
	STATUS_LOG_POLICY_INVALID                                                 NTStatus      = 0xC01A0016
	STATUS_LOG_POLICY_CONFLICT                                                NTStatus      = 0xC01A0017
	STATUS_LOG_PINNED_ARCHIVE_TAIL                                            NTStatus      = 0xC01A0018
	STATUS_LOG_RECORD_NONEXISTENT                                             NTStatus      = 0xC01A0019
	STATUS_LOG_RECORDS_RESERVED_INVALID                                       NTStatus      = 0xC01A001A
	STATUS_LOG_SPACE_RESERVED_INVALID                                         NTStatus      = 0xC01A001B
	STATUS_LOG_TAIL_INVALID                                                   NTStatus      = 0xC01A001C
	STATUS_LOG_FULL                                                           NTStatus      = 0xC01A001D
	STATUS_LOG_MULTIPLEXED                                                    NTStatus      = 0xC01A001E
	STATUS_LOG_DEDICATED                                                      NTStatus      = 0xC01A001F
	STATUS_LOG_ARCHIVE_NOT_IN_PROGRESS                                        NTStatus      = 0xC01A0020
	STATUS_LOG_ARCHIVE_IN_PROGRESS                                            NTStatus      = 0xC01A0021
	STATUS_LOG_EPHEMERAL                                                      NTStatus      = 0xC01A0022
	STATUS_LOG_NOT_ENOUGH_CONTAINERS                                          NTStatus      = 0xC01A0023
	STATUS_LOG_CLIENT_ALREADY_REGISTERED                                      NTStatus      = 0xC01A0024
	STATUS_LOG_CLIENT_NOT_REGISTERED                                          NTStatus      = 0xC01A0025
	STATUS_LOG_FULL_HANDLER_IN_PROGRESS                                       NTStatus      = 0xC01A0026
	STATUS_LOG_CONTAINER_READ_FAILED                                          NTStatus      = 0xC01A0027
	STATUS_LOG_CONTAINER_WRITE_FAILED                                         NTStatus      = 0xC01A0028
	STATUS_LOG_CONTAINER_OPEN_FAILED                                          NTStatus      = 0xC01A0029
	STATUS_LOG_CONTAINER_STATE_INVALID                                        NTStatus      = 0xC01A002A
	STATUS_LOG_STATE_INVALID                                                  NTStatus      = 0xC01A002B
	STATUS_LOG_PINNED                                                         NTStatus      = 0xC01A002C
	STATUS_LOG_METADATA_FLUSH_FAILED                                          NTStatus      = 0xC01A002D
	STATUS_LOG_INCONSISTENT_SECURITY                                          NTStatus      = 0xC01A002E
	STATUS_LOG_APPENDED_FLUSH_FAILED                                          NTStatus      = 0xC01A002F
	STATUS_LOG_PINNED_RESERVATION                                             NTStatus      = 0xC01A0030
	STATUS_VIDEO_HUNG_DISPLAY_DRIVER_THREAD                                   NTStatus      = 0xC01B00EA
	STATUS_VIDEO_HUNG_DISPLAY_DRIVER_THREAD_RECOVERED                         NTStatus      = 0x801B00EB
	STATUS_VIDEO_DRIVER_DEBUG_REPORT_REQUEST                                  NTStatus      = 0x401B00EC
	STATUS_MONITOR_NO_DESCRIPTOR                                              NTStatus      = 0xC01D0001
	STATUS_MONITOR_UNKNOWN_DESCRIPTOR_FORMAT                                  NTStatus      = 0xC01D0002
	STATUS_MONITOR_INVALID_DESCRIPTOR_CHECKSUM                                NTStatus      = 0xC01D0003
	STATUS_MONITOR_INVALID_STANDARD_TIMING_BLOCK                              NTStatus      = 0xC01D0004
	STATUS_MONITOR_WMI_DATABLOCK_REGISTRATION_FAILED                          NTStatus      = 0xC01D0005
	STATUS_MONITOR_INVALID_SERIAL_NUMBER_MONDSC_BLOCK                         NTStatus      = 0xC01D0006
	STATUS_MONITOR_INVALID_USER_FRIENDLY_MONDSC_BLOCK                         NTStatus      = 0xC01D0007
	STATUS_MONITOR_NO_MORE_DESCRIPTOR_DATA                                    NTStatus      = 0xC01D0008
	STATUS_MONITOR_INVALID_DETAILED_TIMING_BLOCK                              NTStatus      = 0xC01D0009
	STATUS_MONITOR_INVALID_MANUFACTURE_DATE                                   NTStatus      = 0xC01D000A
	STATUS_GRAPHICS_NOT_EXCLUSIVE_MODE_OWNER                                  NTStatus      = 0xC01E0000
	STATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER                                   NTStatus      = 0xC01E0001
	STATUS_GRAPHICS_INVALID_DISPLAY_ADAPTER                                   NTStatus      = 0xC01E0002
	STATUS_GRAPHICS_ADAPTER_WAS_RESET                                         NTStatus      = 0xC01E0003
	STATUS_GRAPHICS_INVALID_DRIVER_MODEL                                      NTStatus      = 0xC01E0004
	STATUS_GRAPHICS_PRESENT_MODE_CHANGED                                      NTStatus      = 0xC01E0005
	STATUS_GRAPHICS_PRESENT_OCCLUDED                                          NTStatus      = 0xC01E0006
	STATUS_GRAPHICS_PRESENT_DENIED                                            NTStatus      = 0xC01E0007
	STATUS_GRAPHICS_CANNOTCOLORCONVERT                                        NTStatus      = 0xC01E0008
	STATUS_GRAPHICS_DRIVER_MISMATCH                                           NTStatus      = 0xC01E0009
	STATUS_GRAPHICS_PARTIAL_DATA_POPULATED                                    NTStatus      = 0x401E000A
	STATUS_GRAPHICS_PRESENT_REDIRECTION_DISABLED                              NTStatus      = 0xC01E000B
	STATUS_GRAPHICS_PRESENT_UNOCCLUDED                                        NTStatus      = 0xC01E000C
	STATUS_GRAPHICS_WINDOWDC_NOT_AVAILABLE                                    NTStatus      = 0xC01E000D
	STATUS_GRAPHICS_WINDOWLESS_PRESENT_DISABLED                               NTStatus      = 0xC01E000E
	STATUS_GRAPHICS_PRESENT_INVALID_WINDOW                                    NTStatus      = 0xC01E000F
	STATUS_GRAPHICS_PRESENT_BUFFER_NOT_BOUND                                  NTStatus      = 0xC01E0010
	STATUS_GRAPHICS_VAIL_STATE_CHANGED                                        NTStatus      = 0xC01E0011
	STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN                        NTStatus      = 0xC01E0012
	STATUS_GRAPHICS_INDIRECT_DISPLAY_DEVICE_STOPPED                           NTStatus      = 0xC01E0013
	STATUS_GRAPHICS_NO_VIDEO_MEMORY                                           NTStatus      = 0xC01E0100
	STATUS_GRAPHICS_CANT_LOCK_MEMORY                                          NTStatus      = 0xC01E0101
	STATUS_GRAPHICS_ALLOCATION_BUSY                                           NTStatus      = 0xC01E0102
	STATUS_GRAPHICS_TOO_MANY_REFERENCES                                       NTStatus      = 0xC01E0103
	STATUS_GRAPHICS_TRY_AGAIN_LATER                                           NTStatus      = 0xC01E0104
	STATUS_GRAPHICS_TRY_AGAIN_NOW                                             NTStatus      = 0xC01E0105
	STATUS_GRAPHICS_ALLOCATION_INVALID                                        NTStatus      = 0xC01E0106
	STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE                          NTStatus      = 0xC01E0107
	STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNSUPPORTED                          NTStatus      = 0xC01E0108
	STATUS_GRAPHICS_CANT_EVICT_PINNED_ALLOCATION                              NTStatus      = 0xC01E0109
	STATUS_GRAPHICS_INVALID_ALLOCATION_USAGE                                  NTStatus      = 0xC01E0110
	STATUS_GRAPHICS_CANT_RENDER_LOCKED_ALLOCATION                             NTStatus      = 0xC01E0111
	STATUS_GRAPHICS_ALLOCATION_CLOSED                                         NTStatus      = 0xC01E0112
	STATUS_GRAPHICS_INVALID_ALLOCATION_INSTANCE                               NTStatus      = 0xC01E0113
	STATUS_GRAPHICS_INVALID_ALLOCATION_HANDLE                                 NTStatus      = 0xC01E0114
	STATUS_GRAPHICS_WRONG_ALLOCATION_DEVICE                                   NTStatus      = 0xC01E0115
	STATUS_GRAPHICS_ALLOCATION_CONTENT_LOST                                   NTStatus      = 0xC01E0116
	STATUS_GRAPHICS_GPU_EXCEPTION_ON_DEVICE                                   NTStatus      = 0xC01E0200
	STATUS_GRAPHICS_SKIP_ALLOCATION_PREPARATION                               NTStatus      = 0x401E0201
	STATUS_GRAPHICS_INVALID_VIDPN_TOPOLOGY                                    NTStatus      = 0xC01E0300
	STATUS_GRAPHICS_VIDPN_TOPOLOGY_NOT_SUPPORTED                              NTStatus      = 0xC01E0301
	STATUS_GRAPHICS_VIDPN_TOPOLOGY_CURRENTLY_NOT_SUPPORTED                    NTStatus      = 0xC01E0302
	STATUS_GRAPHICS_INVALID_VIDPN                                             NTStatus      = 0xC01E0303
	STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE                              NTStatus      = 0xC01E0304
	STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET                              NTStatus      = 0xC01E0305
	STATUS_GRAPHICS_VIDPN_MODALITY_NOT_SUPPORTED                              NTStatus      = 0xC01E0306
	STATUS_GRAPHICS_MODE_NOT_PINNED                                           NTStatus      = 0x401E0307
	STATUS_GRAPHICS_INVALID_VIDPN_SOURCEMODESET                               NTStatus      = 0xC01E0308
	STATUS_GRAPHICS_INVALID_VIDPN_TARGETMODESET                               NTStatus      = 0xC01E0309
	STATUS_GRAPHICS_INVALID_FREQUENCY                                         NTStatus      = 0xC01E030A
	STATUS_GRAPHICS_INVALID_ACTIVE_REGION                                     NTStatus      = 0xC01E030B
	STATUS_GRAPHICS_INVALID_TOTAL_REGION                                      NTStatus      = 0xC01E030C
	STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE_MODE                         NTStatus      = 0xC01E0310
	STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET_MODE                         NTStatus      = 0xC01E0311
	STATUS_GRAPHICS_PINNED_MODE_MUST_REMAIN_IN_SET                            NTStatus      = 0xC01E0312
	STATUS_GRAPHICS_PATH_ALREADY_IN_TOPOLOGY                                  NTStatus      = 0xC01E0313
	STATUS_GRAPHICS_MODE_ALREADY_IN_MODESET                                   NTStatus      = 0xC01E0314
	STATUS_GRAPHICS_INVALID_VIDEOPRESENTSOURCESET                             NTStatus      = 0xC01E0315
	STATUS_GRAPHICS_INVALID_VIDEOPRESENTTARGETSET                             NTStatus      = 0xC01E0316
	STATUS_GRAPHICS_SOURCE_ALREADY_IN_SET                                     NTStatus      = 0xC01E0317
	STATUS_GRAPHICS_TARGET_ALREADY_IN_SET                                     NTStatus      = 0xC01E0318
	STATUS_GRAPHICS_INVALID_VIDPN_PRESENT_PATH                                NTStatus      = 0xC01E0319
	STATUS_GRAPHICS_NO_RECOMMENDED_VIDPN_TOPOLOGY                             NTStatus      = 0xC01E031A
	STATUS_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGESET                         NTStatus      = 0xC01E031B
	STATUS_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE                            NTStatus      = 0xC01E031C
	STATUS_GRAPHICS_FREQUENCYRANGE_NOT_IN_SET                                 NTStatus      = 0xC01E031D
	STATUS_GRAPHICS_NO_PREFERRED_MODE                                         NTStatus      = 0x401E031E
	STATUS_GRAPHICS_FREQUENCYRANGE_ALREADY_IN_SET                             NTStatus      = 0xC01E031F
	STATUS_GRAPHICS_STALE_MODESET                                             NTStatus      = 0xC01E0320
	STATUS_GRAPHICS_INVALID_MONITOR_SOURCEMODESET                             NTStatus      = 0xC01E0321
	STATUS_GRAPHICS_INVALID_MONITOR_SOURCE_MODE                               NTStatus      = 0xC01E0322
	STATUS_GRAPHICS_NO_RECOMMENDED_FUNCTIONAL_VIDPN                           NTStatus      = 0xC01E0323
	STATUS_GRAPHICS_MODE_ID_MUST_BE_UNIQUE                                    NTStatus      = 0xC01E0324
	STATUS_GRAPHICS_EMPTY_ADAPTER_MONITOR_MODE_SUPPORT_INTERSECTION           NTStatus      = 0xC01E0325
	STATUS_GRAPHICS_VIDEO_PRESENT_TARGETS_LESS_THAN_SOURCES                   NTStatus      = 0xC01E0326
	STATUS_GRAPHICS_PATH_NOT_IN_TOPOLOGY                                      NTStatus      = 0xC01E0327
	STATUS_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_SOURCE                     NTStatus      = 0xC01E0328
	STATUS_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_TARGET                     NTStatus      = 0xC01E0329
	STATUS_GRAPHICS_INVALID_MONITORDESCRIPTORSET                              NTStatus      = 0xC01E032A
	STATUS_GRAPHICS_INVALID_MONITORDESCRIPTOR                                 NTStatus      = 0xC01E032B
	STATUS_GRAPHICS_MONITORDESCRIPTOR_NOT_IN_SET                              NTStatus      = 0xC01E032C
	STATUS_GRAPHICS_MONITORDESCRIPTOR_ALREADY_IN_SET                          NTStatus      = 0xC01E032D
	STATUS_GRAPHICS_MONITORDESCRIPTOR_ID_MUST_BE_UNIQUE                       NTStatus      = 0xC01E032E
	STATUS_GRAPHICS_INVALID_VIDPN_TARGET_SUBSET_TYPE                          NTStatus      = 0xC01E032F
	STATUS_GRAPHICS_RESOURCES_NOT_RELATED                                     NTStatus      = 0xC01E0330
	STATUS_GRAPHICS_SOURCE_ID_MUST_BE_UNIQUE                                  NTStatus      = 0xC01E0331
	STATUS_GRAPHICS_TARGET_ID_MUST_BE_UNIQUE                                  NTStatus      = 0xC01E0332
	STATUS_GRAPHICS_NO_AVAILABLE_VIDPN_TARGET                                 NTStatus      = 0xC01E0333
	STATUS_GRAPHICS_MONITOR_COULD_NOT_BE_ASSOCIATED_WITH_ADAPTER              NTStatus      = 0xC01E0334
	STATUS_GRAPHICS_NO_VIDPNMGR                                               NTStatus      = 0xC01E0335
	STATUS_GRAPHICS_NO_ACTIVE_VIDPN                                           NTStatus      = 0xC01E0336
	STATUS_GRAPHICS_STALE_VIDPN_TOPOLOGY                                      NTStatus      = 0xC01E0337
	STATUS_GRAPHICS_MONITOR_NOT_CONNECTED                                     NTStatus      = 0xC01E0338
	STATUS_GRAPHICS_SOURCE_NOT_IN_TOPOLOGY                                    NTStatus      = 0xC01E0339
	STATUS_GRAPHICS_INVALID_PRIMARYSURFACE_SIZE                               NTStatus      = 0xC01E033A
	STATUS_GRAPHICS_INVALID_VISIBLEREGION_SIZE                                NTStatus      = 0xC01E033B
	STATUS_GRAPHICS_INVALID_STRIDE                                            NTStatus      = 0xC01E033C
	STATUS_GRAPHICS_INVALID_PIXELFORMAT                                       NTStatus      = 0xC01E033D
	STATUS_GRAPHICS_INVALID_COLORBASIS                                        NTStatus      = 0xC01E033E
	STATUS_GRAPHICS_INVALID_PIXELVALUEACCESSMODE                              NTStatus      = 0xC01E033F
	STATUS_GRAPHICS_TARGET_NOT_IN_TOPOLOGY                                    NTStatus      = 0xC01E0340
	STATUS_GRAPHICS_NO_DISPLAY_MODE_MANAGEMENT_SUPPORT                        NTStatus      = 0xC01E0341
	STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE                                       NTStatus      = 0xC01E0342
	STATUS_GRAPHICS_CANT_ACCESS_ACTIVE_VIDPN                                  NTStatus      = 0xC01E0343
	STATUS_GRAPHICS_INVALID_PATH_IMPORTANCE_ORDINAL                           NTStatus      = 0xC01E0344
	STATUS_GRAPHICS_INVALID_PATH_CONTENT_GEOMETRY_TRANSFORMATION              NTStatus      = 0xC01E0345
	STATUS_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_SUPPORTED        NTStatus      = 0xC01E0346
	STATUS_GRAPHICS_INVALID_GAMMA_RAMP                                        NTStatus      = 0xC01E0347
	STATUS_GRAPHICS_GAMMA_RAMP_NOT_SUPPORTED                                  NTStatus      = 0xC01E0348
	STATUS_GRAPHICS_MULTISAMPLING_NOT_SUPPORTED                               NTStatus      = 0xC01E0349
	STATUS_GRAPHICS_MODE_NOT_IN_MODESET                                       NTStatus      = 0xC01E034A
	STATUS_GRAPHICS_DATASET_IS_EMPTY                                          NTStatus      = 0x401E034B
	STATUS_GRAPHICS_NO_MORE_ELEMENTS_IN_DATASET                               NTStatus      = 0x401E034C
	STATUS_GRAPHICS_INVALID_VIDPN_TOPOLOGY_RECOMMENDATION_REASON              NTStatus      = 0xC01E034D
	STATUS_GRAPHICS_INVALID_PATH_CONTENT_TYPE                                 NTStatus      = 0xC01E034E
	STATUS_GRAPHICS_INVALID_COPYPROTECTION_TYPE                               NTStatus      = 0xC01E034F
	STATUS_GRAPHICS_UNASSIGNED_MODESET_ALREADY_EXISTS                         NTStatus      = 0xC01E0350
	STATUS_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_PINNED           NTStatus      = 0x401E0351
	STATUS_GRAPHICS_INVALID_SCANLINE_ORDERING                                 NTStatus      = 0xC01E0352
	STATUS_GRAPHICS_TOPOLOGY_CHANGES_NOT_ALLOWED                              NTStatus      = 0xC01E0353
	STATUS_GRAPHICS_NO_AVAILABLE_IMPORTANCE_ORDINALS                          NTStatus      = 0xC01E0354
	STATUS_GRAPHICS_INCOMPATIBLE_PRIVATE_FORMAT                               NTStatus      = 0xC01E0355
	STATUS_GRAPHICS_INVALID_MODE_PRUNING_ALGORITHM                            NTStatus      = 0xC01E0356
	STATUS_GRAPHICS_INVALID_MONITOR_CAPABILITY_ORIGIN                         NTStatus      = 0xC01E0357
	STATUS_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE_CONSTRAINT                 NTStatus      = 0xC01E0358
	STATUS_GRAPHICS_MAX_NUM_PATHS_REACHED                                     NTStatus      = 0xC01E0359
	STATUS_GRAPHICS_CANCEL_VIDPN_TOPOLOGY_AUGMENTATION                        NTStatus      = 0xC01E035A
	STATUS_GRAPHICS_INVALID_CLIENT_TYPE                                       NTStatus      = 0xC01E035B
	STATUS_GRAPHICS_CLIENTVIDPN_NOT_SET                                       NTStatus      = 0xC01E035C
	STATUS_GRAPHICS_SPECIFIED_CHILD_ALREADY_CONNECTED                         NTStatus      = 0xC01E0400
	STATUS_GRAPHICS_CHILD_DESCRIPTOR_NOT_SUPPORTED                            NTStatus      = 0xC01E0401
	STATUS_GRAPHICS_UNKNOWN_CHILD_STATUS                                      NTStatus      = 0x401E042F
	STATUS_GRAPHICS_NOT_A_LINKED_ADAPTER                                      NTStatus      = 0xC01E0430
	STATUS_GRAPHICS_LEADLINK_NOT_ENUMERATED                                   NTStatus      = 0xC01E0431
	STATUS_GRAPHICS_CHAINLINKS_NOT_ENUMERATED                                 NTStatus      = 0xC01E0432
	STATUS_GRAPHICS_ADAPTER_CHAIN_NOT_READY                                   NTStatus      = 0xC01E0433
	STATUS_GRAPHICS_CHAINLINKS_NOT_STARTED                                    NTStatus      = 0xC01E0434
	STATUS_GRAPHICS_CHAINLINKS_NOT_POWERED_ON                                 NTStatus      = 0xC01E0435
	STATUS_GRAPHICS_INCONSISTENT_DEVICE_LINK_STATE                            NTStatus      = 0xC01E0436
	STATUS_GRAPHICS_LEADLINK_START_DEFERRED                                   NTStatus      = 0x401E0437
	STATUS_GRAPHICS_NOT_POST_DEVICE_DRIVER                                    NTStatus      = 0xC01E0438
	STATUS_GRAPHICS_POLLING_TOO_FREQUENTLY                                    NTStatus      = 0x401E0439
	STATUS_GRAPHICS_START_DEFERRED                                            NTStatus      = 0x401E043A
	STATUS_GRAPHICS_ADAPTER_ACCESS_NOT_EXCLUDED                               NTStatus      = 0xC01E043B
	STATUS_GRAPHICS_DEPENDABLE_CHILD_STATUS                                   NTStatus      = 0x401E043C
	STATUS_GRAPHICS_OPM_NOT_SUPPORTED                                         NTStatus      = 0xC01E0500
	STATUS_GRAPHICS_COPP_NOT_SUPPORTED                                        NTStatus      = 0xC01E0501
	STATUS_GRAPHICS_UAB_NOT_SUPPORTED                                         NTStatus      = 0xC01E0502
	STATUS_GRAPHICS_OPM_INVALID_ENCRYPTED_PARAMETERS                          NTStatus      = 0xC01E0503
	STATUS_GRAPHICS_OPM_NO_PROTECTED_OUTPUTS_EXIST                            NTStatus      = 0xC01E0505
	STATUS_GRAPHICS_OPM_INTERNAL_ERROR                                        NTStatus      = 0xC01E050B
	STATUS_GRAPHICS_OPM_INVALID_HANDLE                                        NTStatus      = 0xC01E050C
	STATUS_GRAPHICS_PVP_INVALID_CERTIFICATE_LENGTH                            NTStatus      = 0xC01E050E
	STATUS_GRAPHICS_OPM_SPANNING_MODE_ENABLED                                 NTStatus      = 0xC01E050F
	STATUS_GRAPHICS_OPM_THEATER_MODE_ENABLED                                  NTStatus      = 0xC01E0510
	STATUS_GRAPHICS_PVP_HFS_FAILED                                            NTStatus      = 0xC01E0511
	STATUS_GRAPHICS_OPM_INVALID_SRM                                           NTStatus      = 0xC01E0512
	STATUS_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_HDCP                          NTStatus      = 0xC01E0513
	STATUS_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_ACP                           NTStatus      = 0xC01E0514
	STATUS_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_CGMSA                         NTStatus      = 0xC01E0515
	STATUS_GRAPHICS_OPM_HDCP_SRM_NEVER_SET                                    NTStatus      = 0xC01E0516
	STATUS_GRAPHICS_OPM_RESOLUTION_TOO_HIGH                                   NTStatus      = 0xC01E0517
	STATUS_GRAPHICS_OPM_ALL_HDCP_HARDWARE_ALREADY_IN_USE                      NTStatus      = 0xC01E0518
	STATUS_GRAPHICS_OPM_PROTECTED_OUTPUT_NO_LONGER_EXISTS                     NTStatus      = 0xC01E051A
	STATUS_GRAPHICS_OPM_PROTECTED_OUTPUT_DOES_NOT_HAVE_COPP_SEMANTICS         NTStatus      = 0xC01E051C
	STATUS_GRAPHICS_OPM_INVALID_INFORMATION_REQUEST                           NTStatus      = 0xC01E051D
	STATUS_GRAPHICS_OPM_DRIVER_INTERNAL_ERROR                                 NTStatus      = 0xC01E051E
	STATUS_GRAPHICS_OPM_PROTECTED_OUTPUT_DOES_NOT_HAVE_OPM_SEMANTICS          NTStatus      = 0xC01E051F
	STATUS_GRAPHICS_OPM_SIGNALING_NOT_SUPPORTED                               NTStatus      = 0xC01E0520
	STATUS_GRAPHICS_OPM_INVALID_CONFIGURATION_REQUEST                         NTStatus      = 0xC01E0521
	STATUS_GRAPHICS_I2C_NOT_SUPPORTED                                         NTStatus      = 0xC01E0580
	STATUS_GRAPHICS_I2C_DEVICE_DOES_NOT_EXIST                                 NTStatus      = 0xC01E0581
	STATUS_GRAPHICS_I2C_ERROR_TRANSMITTING_DATA                               NTStatus      = 0xC01E0582
	STATUS_GRAPHICS_I2C_ERROR_RECEIVING_DATA                                  NTStatus      = 0xC01E0583
	STATUS_GRAPHICS_DDCCI_VCP_NOT_SUPPORTED                                   NTStatus      = 0xC01E0584
	STATUS_GRAPHICS_DDCCI_INVALID_DATA                                        NTStatus      = 0xC01E0585
	STATUS_GRAPHICS_DDCCI_MONITOR_RETURNED_INVALID_TIMING_STATUS_BYTE         NTStatus      = 0xC01E0586
	STATUS_GRAPHICS_DDCCI_INVALID_CAPABILITIES_STRING                         NTStatus      = 0xC01E0587
	STATUS_GRAPHICS_MCA_INTERNAL_ERROR                                        NTStatus      = 0xC01E0588
	STATUS_GRAPHICS_DDCCI_INVALID_MESSAGE_COMMAND                             NTStatus      = 0xC01E0589
	STATUS_GRAPHICS_DDCCI_INVALID_MESSAGE_LENGTH                              NTStatus      = 0xC01E058A
	STATUS_GRAPHICS_DDCCI_INVALID_MESSAGE_CHECKSUM                            NTStatus      = 0xC01E058B
	STATUS_GRAPHICS_INVALID_PHYSICAL_MONITOR_HANDLE                           NTStatus      = 0xC01E058C
	STATUS_GRAPHICS_MONITOR_NO_LONGER_EXISTS                                  NTStatus      = 0xC01E058D
	STATUS_GRAPHICS_ONLY_CONSOLE_SESSION_SUPPORTED                            NTStatus      = 0xC01E05E0
	STATUS_GRAPHICS_NO_DISPLAY_DEVICE_CORRESPONDS_TO_NAME                     NTStatus      = 0xC01E05E1
	STATUS_GRAPHICS_DISPLAY_DEVICE_NOT_ATTACHED_TO_DESKTOP                    NTStatus      = 0xC01E05E2
	STATUS_GRAPHICS_MIRRORING_DEVICES_NOT_SUPPORTED                           NTStatus      = 0xC01E05E3
	STATUS_GRAPHICS_INVALID_POINTER                                           NTStatus      = 0xC01E05E4
	STATUS_GRAPHICS_NO_MONITORS_CORRESPOND_TO_DISPLAY_DEVICE                  NTStatus      = 0xC01E05E5
	STATUS_GRAPHICS_PARAMETER_ARRAY_TOO_SMALL                                 NTStatus      = 0xC01E05E6
	STATUS_GRAPHICS_INTERNAL_ERROR                                            NTStatus      = 0xC01E05E7
	STATUS_GRAPHICS_SESSION_TYPE_CHANGE_IN_PROGRESS                           NTStatus      = 0xC01E05E8
	STATUS_FVE_LOCKED_VOLUME                                                  NTStatus      = 0xC0210000
	STATUS_FVE_NOT_ENCRYPTED                                                  NTStatus      = 0xC0210001
	STATUS_FVE_BAD_INFORMATION                                                NTStatus      = 0xC0210002
	STATUS_FVE_TOO_SMALL                                                      NTStatus      = 0xC0210003
	STATUS_FVE_FAILED_WRONG_FS                                                NTStatus      = 0xC0210004
	STATUS_FVE_BAD_PARTITION_SIZE                                             NTStatus      = 0xC0210005
	STATUS_FVE_FS_NOT_EXTENDED                                                NTStatus      = 0xC0210006
	STATUS_FVE_FS_MOUNTED                                                     NTStatus      = 0xC0210007
	STATUS_FVE_NO_LICENSE                                                     NTStatus      = 0xC0210008
	STATUS_FVE_ACTION_NOT_ALLOWED                                             NTStatus      = 0xC0210009
	STATUS_FVE_BAD_DATA                                                       NTStatus      = 0xC021000A
	STATUS_FVE_VOLUME_NOT_BOUND                                               NTStatus      = 0xC021000B
	STATUS_FVE_NOT_DATA_VOLUME                                                NTStatus      = 0xC021000C
	STATUS_FVE_CONV_READ_ERROR                                                NTStatus      = 0xC021000D
	STATUS_FVE_CONV_WRITE_ERROR                                               NTStatus      = 0xC021000E
	STATUS_FVE_OVERLAPPED_UPDATE                                              NTStatus      = 0xC021000F
	STATUS_FVE_FAILED_SECTOR_SIZE                                             NTStatus      = 0xC0210010
	STATUS_FVE_FAILED_AUTHENTICATION                                          NTStatus      = 0xC0210011
	STATUS_FVE_NOT_OS_VOLUME                                                  NTStatus      = 0xC0210012
	STATUS_FVE_KEYFILE_NOT_FOUND                                              NTStatus      = 0xC0210013
	STATUS_FVE_KEYFILE_INVALID                                                NTStatus      = 0xC0210014
	STATUS_FVE_KEYFILE_NO_VMK                                                 NTStatus      = 0xC0210015
	STATUS_FVE_TPM_DISABLED                                                   NTStatus      = 0xC0210016
	STATUS_FVE_TPM_SRK_AUTH_NOT_ZERO                                          NTStatus      = 0xC0210017
	STATUS_FVE_TPM_INVALID_PCR                                                NTStatus      = 0xC0210018
	STATUS_FVE_TPM_NO_VMK                                                     NTStatus      = 0xC0210019
	STATUS_FVE_PIN_INVALID                                                    NTStatus      = 0xC021001A
	STATUS_FVE_AUTH_INVALID_APPLICATION                                       NTStatus      = 0xC021001B
	STATUS_FVE_AUTH_INVALID_CONFIG                                            NTStatus      = 0xC021001C
	STATUS_FVE_DEBUGGER_ENABLED                                               NTStatus      = 0xC021001D
	STATUS_FVE_DRY_RUN_FAILED                                                 NTStatus      = 0xC021001E
	STATUS_FVE_BAD_METADATA_POINTER                                           NTStatus      = 0xC021001F
	STATUS_FVE_OLD_METADATA_COPY                                              NTStatus      = 0xC0210020
	STATUS_FVE_REBOOT_REQUIRED                                                NTStatus      = 0xC0210021
	STATUS_FVE_RAW_ACCESS                                                     NTStatus      = 0xC0210022
	STATUS_FVE_RAW_BLOCKED                                                    NTStatus      = 0xC0210023
	STATUS_FVE_NO_AUTOUNLOCK_MASTER_KEY                                       NTStatus      = 0xC0210024
	STATUS_FVE_MOR_FAILED                                                     NTStatus      = 0xC0210025
	STATUS_FVE_NO_FEATURE_LICENSE                                             NTStatus      = 0xC0210026
	STATUS_FVE_POLICY_USER_DISABLE_RDV_NOT_ALLOWED                            NTStatus      = 0xC0210027
	STATUS_FVE_CONV_RECOVERY_FAILED                                           NTStatus      = 0xC0210028
	STATUS_FVE_VIRTUALIZED_SPACE_TOO_BIG                                      NTStatus      = 0xC0210029
	STATUS_FVE_INVALID_DATUM_TYPE                                             NTStatus      = 0xC021002A
	STATUS_FVE_VOLUME_TOO_SMALL                                               NTStatus      = 0xC0210030
	STATUS_FVE_ENH_PIN_INVALID                                                NTStatus      = 0xC0210031
	STATUS_FVE_FULL_ENCRYPTION_NOT_ALLOWED_ON_TP_STORAGE                      NTStatus      = 0xC0210032
	STATUS_FVE_WIPE_NOT_ALLOWED_ON_TP_STORAGE                                 NTStatus      = 0xC0210033
	STATUS_FVE_NOT_ALLOWED_ON_CSV_STACK                                       NTStatus      = 0xC0210034
	STATUS_FVE_NOT_ALLOWED_ON_CLUSTER                                         NTStatus      = 0xC0210035
	STATUS_FVE_NOT_ALLOWED_TO_UPGRADE_WHILE_CONVERTING                        NTStatus      = 0xC0210036
	STATUS_FVE_WIPE_CANCEL_NOT_APPLICABLE                                     NTStatus      = 0xC0210037
	STATUS_FVE_EDRIVE_DRY_RUN_FAILED                                          NTStatus      = 0xC0210038
	STATUS_FVE_SECUREBOOT_DISABLED                                            NTStatus      = 0xC0210039
	STATUS_FVE_SECUREBOOT_CONFIG_CHANGE                                       NTStatus      = 0xC021003A
	STATUS_FVE_DEVICE_LOCKEDOUT                                               NTStatus      = 0xC021003B
	STATUS_FVE_VOLUME_EXTEND_PREVENTS_EOW_DECRYPT                             NTStatus      = 0xC021003C
	STATUS_FVE_NOT_DE_VOLUME                                                  NTStatus      = 0xC021003D
	STATUS_FVE_PROTECTION_DISABLED                                            NTStatus      = 0xC021003E
	STATUS_FVE_PROTECTION_CANNOT_BE_DISABLED                                  NTStatus      = 0xC021003F
	STATUS_FVE_OSV_KSR_NOT_ALLOWED                                            NTStatus      = 0xC0210040
	STATUS_FWP_CALLOUT_NOT_FOUND                                              NTStatus      = 0xC0220001
	STATUS_FWP_CONDITION_NOT_FOUND                                            NTStatus      = 0xC0220002
	STATUS_FWP_FILTER_NOT_FOUND                                               NTStatus      = 0xC0220003
	STATUS_FWP_LAYER_NOT_FOUND                                                NTStatus      = 0xC0220004
	STATUS_FWP_PROVIDER_NOT_FOUND                                             NTStatus      = 0xC0220005
	STATUS_FWP_PROVIDER_CONTEXT_NOT_FOUND                                     NTStatus      = 0xC0220006
	STATUS_FWP_SUBLAYER_NOT_FOUND                                             NTStatus      = 0xC0220007
	STATUS_FWP_NOT_FOUND                                                      NTStatus      = 0xC0220008
	STATUS_FWP_ALREADY_EXISTS                                                 NTStatus      = 0xC0220009
	STATUS_FWP_IN_USE                                                         NTStatus      = 0xC022000A
	STATUS_FWP_DYNAMIC_SESSION_IN_PROGRESS                                    NTStatus      = 0xC022000B
	STATUS_FWP_WRONG_SESSION                                                  NTStatus      = 0xC022000C
	STATUS_FWP_NO_TXN_IN_PROGRESS                                             NTStatus      = 0xC022000D
	STATUS_FWP_TXN_IN_PROGRESS                                                NTStatus      = 0xC022000E
	STATUS_FWP_TXN_ABORTED                                                    NTStatus      = 0xC022000F
	STATUS_FWP_SESSION_ABORTED                                                NTStatus      = 0xC0220010
	STATUS_FWP_INCOMPATIBLE_TXN                                               NTStatus      = 0xC0220011
	STATUS_FWP_TIMEOUT                                                        NTStatus      = 0xC0220012
	STATUS_FWP_NET_EVENTS_DISABLED                                            NTStatus      = 0xC0220013
	STATUS_FWP_INCOMPATIBLE_LAYER                                             NTStatus      = 0xC0220014
	STATUS_FWP_KM_CLIENTS_ONLY                                                NTStatus      = 0xC0220015
	STATUS_FWP_LIFETIME_MISMATCH                                              NTStatus      = 0xC0220016
	STATUS_FWP_BUILTIN_OBJECT                                                 NTStatus      = 0xC0220017
	STATUS_FWP_TOO_MANY_CALLOUTS                                              NTStatus      = 0xC0220018
	STATUS_FWP_NOTIFICATION_DROPPED                                           NTStatus      = 0xC0220019
	STATUS_FWP_TRAFFIC_MISMATCH                                               NTStatus      = 0xC022001A
	STATUS_FWP_INCOMPATIBLE_SA_STATE                                          NTStatus      = 0xC022001B
	STATUS_FWP_NULL_POINTER                                                   NTStatus      = 0xC022001C
	STATUS_FWP_INVALID_ENUMERATOR                                             NTStatus      = 0xC022001D
	STATUS_FWP_INVALID_FLAGS                                                  NTStatus      = 0xC022001E
	STATUS_FWP_INVALID_NET_MASK                                               NTStatus      = 0xC022001F
	STATUS_FWP_INVALID_RANGE                                                  NTStatus      = 0xC0220020
	STATUS_FWP_INVALID_INTERVAL                                               NTStatus      = 0xC0220021
	STATUS_FWP_ZERO_LENGTH_ARRAY                                              NTStatus      = 0xC0220022
	STATUS_FWP_NULL_DISPLAY_NAME                                              NTStatus      = 0xC0220023
	STATUS_FWP_INVALID_ACTION_TYPE                                            NTStatus      = 0xC0220024
	STATUS_FWP_INVALID_WEIGHT                                                 NTStatus      = 0xC0220025
	STATUS_FWP_MATCH_TYPE_MISMATCH                                            NTStatus      = 0xC0220026
	STATUS_FWP_TYPE_MISMATCH                                                  NTStatus      = 0xC0220027
	STATUS_FWP_OUT_OF_BOUNDS                                                  NTStatus      = 0xC0220028
	STATUS_FWP_RESERVED                                                       NTStatus      = 0xC0220029
	STATUS_FWP_DUPLICATE_CONDITION                                            NTStatus      = 0xC022002A
	STATUS_FWP_DUPLICATE_KEYMOD                                               NTStatus      = 0xC022002B
	STATUS_FWP_ACTION_INCOMPATIBLE_WITH_LAYER                                 NTStatus      = 0xC022002C
	STATUS_FWP_ACTION_INCOMPATIBLE_WITH_SUBLAYER                              NTStatus      = 0xC022002D
	STATUS_FWP_CONTEXT_INCOMPATIBLE_WITH_LAYER                                NTStatus      = 0xC022002E
	STATUS_FWP_CONTEXT_INCOMPATIBLE_WITH_CALLOUT                              NTStatus      = 0xC022002F
	STATUS_FWP_INCOMPATIBLE_AUTH_METHOD                                       NTStatus      = 0xC0220030
	STATUS_FWP_INCOMPATIBLE_DH_GROUP                                          NTStatus      = 0xC0220031
	STATUS_FWP_EM_NOT_SUPPORTED                                               NTStatus      = 0xC0220032
	STATUS_FWP_NEVER_MATCH                                                    NTStatus      = 0xC0220033
	STATUS_FWP_PROVIDER_CONTEXT_MISMATCH                                      NTStatus      = 0xC0220034
	STATUS_FWP_INVALID_PARAMETER                                              NTStatus      = 0xC0220035
	STATUS_FWP_TOO_MANY_SUBLAYERS                                             NTStatus      = 0xC0220036
	STATUS_FWP_CALLOUT_NOTIFICATION_FAILED                                    NTStatus      = 0xC0220037
	STATUS_FWP_INVALID_AUTH_TRANSFORM                                         NTStatus      = 0xC0220038
	STATUS_FWP_INVALID_CIPHER_TRANSFORM                                       NTStatus      = 0xC0220039
	STATUS_FWP_INCOMPATIBLE_CIPHER_TRANSFORM                                  NTStatus      = 0xC022003A
	STATUS_FWP_INVALID_TRANSFORM_COMBINATION                                  NTStatus      = 0xC022003B
	STATUS_FWP_DUPLICATE_AUTH_METHOD                                          NTStatus      = 0xC022003C
	STATUS_FWP_INVALID_TUNNEL_ENDPOINT                                        NTStatus      = 0xC022003D
	STATUS_FWP_L2_DRIVER_NOT_READY                                            NTStatus      = 0xC022003E
	STATUS_FWP_KEY_DICTATOR_ALREADY_REGISTERED                                NTStatus      = 0xC022003F
	STATUS_FWP_KEY_DICTATION_INVALID_KEYING_MATERIAL                          NTStatus      = 0xC0220040
	STATUS_FWP_CONNECTIONS_DISABLED                                           NTStatus      = 0xC0220041
	STATUS_FWP_INVALID_DNS_NAME                                               NTStatus      = 0xC0220042
	STATUS_FWP_STILL_ON                                                       NTStatus      = 0xC0220043
	STATUS_FWP_IKEEXT_NOT_RUNNING                                             NTStatus      = 0xC0220044
	STATUS_FWP_TCPIP_NOT_READY                                                NTStatus      = 0xC0220100
	STATUS_FWP_INJECT_HANDLE_CLOSING                                          NTStatus      = 0xC0220101
	STATUS_FWP_INJECT_HANDLE_STALE                                            NTStatus      = 0xC0220102
	STATUS_FWP_CANNOT_PEND                                                    NTStatus      = 0xC0220103
	STATUS_FWP_DROP_NOICMP                                                    NTStatus      = 0xC0220104
	STATUS_NDIS_CLOSING                                                       NTStatus      = 0xC0230002
	STATUS_NDIS_BAD_VERSION                                                   NTStatus      = 0xC0230004
	STATUS_NDIS_BAD_CHARACTERISTICS                                           NTStatus      = 0xC0230005
	STATUS_NDIS_ADAPTER_NOT_FOUND                                             NTStatus      = 0xC0230006
	STATUS_NDIS_OPEN_FAILED                                                   NTStatus      = 0xC0230007
	STATUS_NDIS_DEVICE_FAILED                                                 NTStatus      = 0xC0230008
	STATUS_NDIS_MULTICAST_FULL                                                NTStatus      = 0xC0230009
	STATUS_NDIS_MULTICAST_EXISTS                                              NTStatus      = 0xC023000A
	STATUS_NDIS_MULTICAST_NOT_FOUND                                           NTStatus      = 0xC023000B
	STATUS_NDIS_REQUEST_ABORTED                                               NTStatus      = 0xC023000C
	STATUS_NDIS_RESET_IN_PROGRESS                                             NTStatus      = 0xC023000D
	STATUS_NDIS_NOT_SUPPORTED                                                 NTStatus      = 0xC02300BB
	STATUS_NDIS_INVALID_PACKET                                                NTStatus      = 0xC023000F
	STATUS_NDIS_ADAPTER_NOT_READY                                             NTStatus      = 0xC0230011
	STATUS_NDIS_INVALID_LENGTH                                                NTStatus      = 0xC0230014
	STATUS_NDIS_INVALID_DATA                                                  NTStatus      = 0xC0230015
	STATUS_NDIS_BUFFER_TOO_SHORT                                              NTStatus      = 0xC0230016
	STATUS_NDIS_INVALID_OID                                                   NTStatus      = 0xC0230017
	STATUS_NDIS_ADAPTER_REMOVED                                               NTStatus      = 0xC0230018
	STATUS_NDIS_UNSUPPORTED_MEDIA                                             NTStatus      = 0xC0230019
	STATUS_NDIS_GROUP_ADDRESS_IN_USE                                          NTStatus      = 0xC023001A
	STATUS_NDIS_FILE_NOT_FOUND                                                NTStatus      = 0xC023001B
	STATUS_NDIS_ERROR_READING_FILE                                            NTStatus      = 0xC023001C
	STATUS_NDIS_ALREADY_MAPPED                                                NTStatus      = 0xC023001D
	STATUS_NDIS_RESOURCE_CONFLICT                                             NTStatus      = 0xC023001E
	STATUS_NDIS_MEDIA_DISCONNECTED                                            NTStatus      = 0xC023001F
	STATUS_NDIS_INVALID_ADDRESS                                               NTStatus      = 0xC0230022
	STATUS_NDIS_INVALID_DEVICE_REQUEST                                        NTStatus      = 0xC0230010
	STATUS_NDIS_PAUSED                                                        NTStatus      = 0xC023002A
	STATUS_NDIS_INTERFACE_NOT_FOUND                                           NTStatus      = 0xC023002B
	STATUS_NDIS_UNSUPPORTED_REVISION                                          NTStatus      = 0xC023002C
	STATUS_NDIS_INVALID_PORT                                                  NTStatus      = 0xC023002D
	STATUS_NDIS_INVALID_PORT_STATE                                            NTStatus      = 0xC023002E
	STATUS_NDIS_LOW_POWER_STATE                                               NTStatus      = 0xC023002F
	STATUS_NDIS_REINIT_REQUIRED                                               NTStatus      = 0xC0230030
	STATUS_NDIS_NO_QUEUES                                                     NTStatus      = 0xC0230031
	STATUS_NDIS_DOT11_AUTO_CONFIG_ENABLED                                     NTStatus      = 0xC0232000
	STATUS_NDIS_DOT11_MEDIA_IN_USE                                            NTStatus      = 0xC0232001
	STATUS_NDIS_DOT11_POWER_STATE_INVALID                                     NTStatus      = 0xC0232002
	STATUS_NDIS_PM_WOL_PATTERN_LIST_FULL                                      NTStatus      = 0xC0232003
	STATUS_NDIS_PM_PROTOCOL_OFFLOAD_LIST_FULL                                 NTStatus      = 0xC0232004
	STATUS_NDIS_DOT11_AP_CHANNEL_CURRENTLY_NOT_AVAILABLE                      NTStatus      = 0xC0232005
	STATUS_NDIS_DOT11_AP_BAND_CURRENTLY_NOT_AVAILABLE                         NTStatus      = 0xC0232006
	STATUS_NDIS_DOT11_AP_CHANNEL_NOT_ALLOWED                                  NTStatus      = 0xC0232007
	STATUS_NDIS_DOT11_AP_BAND_NOT_ALLOWED                                     NTStatus      = 0xC0232008
	STATUS_NDIS_INDICATION_REQUIRED                                           NTStatus      = 0x40230001
	STATUS_NDIS_OFFLOAD_POLICY                                                NTStatus      = 0xC023100F
	STATUS_NDIS_OFFLOAD_CONNECTION_REJECTED                                   NTStatus      = 0xC0231012
	STATUS_NDIS_OFFLOAD_PATH_REJECTED                                         NTStatus      = 0xC0231013
	STATUS_TPM_ERROR_MASK                                                     NTStatus      = 0xC0290000
	STATUS_TPM_AUTHFAIL                                                       NTStatus      = 0xC0290001
	STATUS_TPM_BADINDEX                                                       NTStatus      = 0xC0290002
	STATUS_TPM_BAD_PARAMETER                                                  NTStatus      = 0xC0290003
	STATUS_TPM_AUDITFAILURE                                                   NTStatus      = 0xC0290004
	STATUS_TPM_CLEAR_DISABLED                                                 NTStatus      = 0xC0290005
	STATUS_TPM_DEACTIVATED                                                    NTStatus      = 0xC0290006
	STATUS_TPM_DISABLED                                                       NTStatus      = 0xC0290007
	STATUS_TPM_DISABLED_CMD                                                   NTStatus      = 0xC0290008
	STATUS_TPM_FAIL                                                           NTStatus      = 0xC0290009
	STATUS_TPM_BAD_ORDINAL                                                    NTStatus      = 0xC029000A
	STATUS_TPM_INSTALL_DISABLED                                               NTStatus      = 0xC029000B
	STATUS_TPM_INVALID_KEYHANDLE                                              NTStatus      = 0xC029000C
	STATUS_TPM_KEYNOTFOUND                                                    NTStatus      = 0xC029000D
	STATUS_TPM_INAPPROPRIATE_ENC                                              NTStatus      = 0xC029000E
	STATUS_TPM_MIGRATEFAIL                                                    NTStatus      = 0xC029000F
	STATUS_TPM_INVALID_PCR_INFO                                               NTStatus      = 0xC0290010
	STATUS_TPM_NOSPACE                                                        NTStatus      = 0xC0290011
	STATUS_TPM_NOSRK                                                          NTStatus      = 0xC0290012
	STATUS_TPM_NOTSEALED_BLOB                                                 NTStatus      = 0xC0290013
	STATUS_TPM_OWNER_SET                                                      NTStatus      = 0xC0290014
	STATUS_TPM_RESOURCES                                                      NTStatus      = 0xC0290015
	STATUS_TPM_SHORTRANDOM                                                    NTStatus      = 0xC0290016
	STATUS_TPM_SIZE                                                           NTStatus      = 0xC0290017
	STATUS_TPM_WRONGPCRVAL                                                    NTStatus      = 0xC0290018
	STATUS_TPM_BAD_PARAM_SIZE                                                 NTStatus      = 0xC0290019
	STATUS_TPM_SHA_THREAD                                                     NTStatus      = 0xC029001A
	STATUS_TPM_SHA_ERROR                                                      NTStatus      = 0xC029001B
	STATUS_TPM_FAILEDSELFTEST                                                 NTStatus      = 0xC029001C
	STATUS_TPM_AUTH2FAIL                                                      NTStatus      = 0xC029001D
	STATUS_TPM_BADTAG                                                         NTStatus      = 0xC029001E
	STATUS_TPM_IOERROR                                                        NTStatus      = 0xC029001F
	STATUS_TPM_ENCRYPT_ERROR                                                  NTStatus      = 0xC0290020
	STATUS_TPM_DECRYPT_ERROR                                                  NTStatus      = 0xC0290021
	STATUS_TPM_INVALID_AUTHHANDLE                                             NTStatus      = 0xC0290022
	STATUS_TPM_NO_ENDORSEMENT                                                 NTStatus      = 0xC0290023
	STATUS_TPM_INVALID_KEYUSAGE                                               NTStatus      = 0xC0290024
	STATUS_TPM_WRONG_ENTITYTYPE                                               NTStatus      = 0xC0290025
	STATUS_TPM_INVALID_POSTINIT                                               NTStatus      = 0xC0290026
	STATUS_TPM_INAPPROPRIATE_SIG                                              NTStatus      = 0xC0290027
	STATUS_TPM_BAD_KEY_PROPERTY                                               NTStatus      = 0xC0290028
	STATUS_TPM_BAD_MIGRATION                                                  NTStatus      = 0xC0290029
	STATUS_TPM_BAD_SCHEME                                                     NTStatus      = 0xC029002A
	STATUS_TPM_BAD_DATASIZE                                                   NTStatus      = 0xC029002B
	STATUS_TPM_BAD_MODE                                                       NTStatus      = 0xC029002C
	STATUS_TPM_BAD_PRESENCE                                                   NTStatus      = 0xC029002D
	STATUS_TPM_BAD_VERSION                                                    NTStatus      = 0xC029002E
	STATUS_TPM_NO_WRAP_TRANSPORT                                              NTStatus      = 0xC029002F
	STATUS_TPM_AUDITFAIL_UNSUCCESSFUL                                         NTStatus      = 0xC0290030
	STATUS_TPM_AUDITFAIL_SUCCESSFUL                                           NTStatus      = 0xC0290031
	STATUS_TPM_NOTRESETABLE                                                   NTStatus      = 0xC0290032
	STATUS_TPM_NOTLOCAL                                                       NTStatus      = 0xC0290033
	STATUS_TPM_BAD_TYPE                                                       NTStatus      = 0xC0290034
	STATUS_TPM_INVALID_RESOURCE                                               NTStatus      = 0xC0290035
	STATUS_TPM_NOTFIPS                                                        NTStatus      = 0xC0290036
	STATUS_TPM_INVALID_FAMILY                                                 NTStatus      = 0xC0290037
	STATUS_TPM_NO_NV_PERMISSION                                               NTStatus      = 0xC0290038
	STATUS_TPM_REQUIRES_SIGN                                                  NTStatus      = 0xC0290039
	STATUS_TPM_KEY_NOTSUPPORTED                                               NTStatus      = 0xC029003A
	STATUS_TPM_AUTH_CONFLICT                                                  NTStatus      = 0xC029003B
	STATUS_TPM_AREA_LOCKED                                                    NTStatus      = 0xC029003C
	STATUS_TPM_BAD_LOCALITY                                                   NTStatus      = 0xC029003D
	STATUS_TPM_READ_ONLY                                                      NTStatus      = 0xC029003E
	STATUS_TPM_PER_NOWRITE                                                    NTStatus      = 0xC029003F
	STATUS_TPM_FAMILYCOUNT                                                    NTStatus      = 0xC0290040
	STATUS_TPM_WRITE_LOCKED                                                   NTStatus      = 0xC0290041
	STATUS_TPM_BAD_ATTRIBUTES                                                 NTStatus      = 0xC0290042
	STATUS_TPM_INVALID_STRUCTURE                                              NTStatus      = 0xC0290043
	STATUS_TPM_KEY_OWNER_CONTROL                                              NTStatus      = 0xC0290044
	STATUS_TPM_BAD_COUNTER                                                    NTStatus      = 0xC0290045
	STATUS_TPM_NOT_FULLWRITE                                                  NTStatus      = 0xC0290046
	STATUS_TPM_CONTEXT_GAP                                                    NTStatus      = 0xC0290047
	STATUS_TPM_MAXNVWRITES                                                    NTStatus      = 0xC0290048
	STATUS_TPM_NOOPERATOR                                                     NTStatus      = 0xC0290049
	STATUS_TPM_RESOURCEMISSING                                                NTStatus      = 0xC029004A
	STATUS_TPM_DELEGATE_LOCK                                                  NTStatus      = 0xC029004B
	STATUS_TPM_DELEGATE_FAMILY                                                NTStatus      = 0xC029004C
	STATUS_TPM_DELEGATE_ADMIN                                                 NTStatus      = 0xC029004D
	STATUS_TPM_TRANSPORT_NOTEXCLUSIVE                                         NTStatus      = 0xC029004E
	STATUS_TPM_OWNER_CONTROL                                                  NTStatus      = 0xC029004F
	STATUS_TPM_DAA_RESOURCES                                                  NTStatus      = 0xC0290050
	STATUS_TPM_DAA_INPUT_DATA0                                                NTStatus      = 0xC0290051
	STATUS_TPM_DAA_INPUT_DATA1                                                NTStatus      = 0xC0290052
	STATUS_TPM_DAA_ISSUER_SETTINGS                                            NTStatus      = 0xC0290053
	STATUS_TPM_DAA_TPM_SETTINGS                                               NTStatus      = 0xC0290054
	STATUS_TPM_DAA_STAGE                                                      NTStatus      = 0xC0290055
	STATUS_TPM_DAA_ISSUER_VALIDITY                                            NTStatus      = 0xC0290056
	STATUS_TPM_DAA_WRONG_W                                                    NTStatus      = 0xC0290057
	STATUS_TPM_BAD_HANDLE                                                     NTStatus      = 0xC0290058
	STATUS_TPM_BAD_DELEGATE                                                   NTStatus      = 0xC0290059
	STATUS_TPM_BADCONTEXT                                                     NTStatus      = 0xC029005A
	STATUS_TPM_TOOMANYCONTEXTS                                                NTStatus      = 0xC029005B
	STATUS_TPM_MA_TICKET_SIGNATURE                                            NTStatus      = 0xC029005C
	STATUS_TPM_MA_DESTINATION                                                 NTStatus      = 0xC029005D
	STATUS_TPM_MA_SOURCE                                                      NTStatus      = 0xC029005E
	STATUS_TPM_MA_AUTHORITY                                                   NTStatus      = 0xC029005F
	STATUS_TPM_PERMANENTEK                                                    NTStatus      = 0xC0290061
	STATUS_TPM_BAD_SIGNATURE                                                  NTStatus      = 0xC0290062
	STATUS_TPM_NOCONTEXTSPACE                                                 NTStatus      = 0xC0290063
	STATUS_TPM_20_E_ASYMMETRIC                                                NTStatus      = 0xC0290081
	STATUS_TPM_20_E_ATTRIBUTES                                                NTStatus      = 0xC0290082
	STATUS_TPM_20_E_HASH                                                      NTStatus      = 0xC0290083
	STATUS_TPM_20_E_VALUE                                                     NTStatus      = 0xC0290084
	STATUS_TPM_20_E_HIERARCHY                                                 NTStatus      = 0xC0290085
	STATUS_TPM_20_E_KEY_SIZE                                                  NTStatus      = 0xC0290087
	STATUS_TPM_20_E_MGF                                                       NTStatus      = 0xC0290088
	STATUS_TPM_20_E_MODE                                                      NTStatus      = 0xC0290089
	STATUS_TPM_20_E_TYPE                                                      NTStatus      = 0xC029008A
	STATUS_TPM_20_E_HANDLE                                                    NTStatus      = 0xC029008B
	STATUS_TPM_20_E_KDF                                                       NTStatus      = 0xC029008C
	STATUS_TPM_20_E_RANGE                                                     NTStatus      = 0xC029008D
	STATUS_TPM_20_E_AUTH_FAIL                                                 NTStatus      = 0xC029008E
	STATUS_TPM_20_E_NONCE                                                     NTStatus      = 0xC029008F
	STATUS_TPM_20_E_PP                                                        NTStatus      = 0xC0290090
	STATUS_TPM_20_E_SCHEME                                                    NTStatus      = 0xC0290092
	STATUS_TPM_20_E_SIZE                                                      NTStatus      = 0xC0290095
	STATUS_TPM_20_E_SYMMETRIC                                                 NTStatus      = 0xC0290096
	STATUS_TPM_20_E_TAG                                                       NTStatus      = 0xC0290097
	STATUS_TPM_20_E_SELECTOR                                                  NTStatus      = 0xC0290098
	STATUS_TPM_20_E_INSUFFICIENT                                              NTStatus      = 0xC029009A
	STATUS_TPM_20_E_SIGNATURE                                                 NTStatus      = 0xC029009B
	STATUS_TPM_20_E_KEY                                                       NTStatus      = 0xC029009C
	STATUS_TPM_20_E_POLICY_FAIL                                               NTStatus      = 0xC029009D
	STATUS_TPM_20_E_INTEGRITY                                                 NTStatus      = 0xC029009F
	STATUS_TPM_20_E_TICKET                                                    NTStatus      = 0xC02900A0
	STATUS_TPM_20_E_RESERVED_BITS                                             NTStatus      = 0xC02900A1
	STATUS_TPM_20_E_BAD_AUTH                                                  NTStatus      = 0xC02900A2
	STATUS_TPM_20_E_EXPIRED                                                   NTStatus      = 0xC02900A3
	STATUS_TPM_20_E_POLICY_CC                                                 NTStatus      = 0xC02900A4
	STATUS_TPM_20_E_BINDING                                                   NTStatus      = 0xC02900A5
	STATUS_TPM_20_E_CURVE                                                     NTStatus      = 0xC02900A6
	STATUS_TPM_20_E_ECC_POINT                                                 NTStatus      = 0xC02900A7
	STATUS_TPM_20_E_INITIALIZE                                                NTStatus      = 0xC0290100
	STATUS_TPM_20_E_FAILURE                                                   NTStatus      = 0xC0290101
	STATUS_TPM_20_E_SEQUENCE                                                  NTStatus      = 0xC0290103
	STATUS_TPM_20_E_PRIVATE                                                   NTStatus      = 0xC029010B
	STATUS_TPM_20_E_HMAC                                                      NTStatus      = 0xC0290119
	STATUS_TPM_20_E_DISABLED                                                  NTStatus      = 0xC0290120
	STATUS_TPM_20_E_EXCLUSIVE                                                 NTStatus      = 0xC0290121
	STATUS_TPM_20_E_ECC_CURVE                                                 NTStatus      = 0xC0290123
	STATUS_TPM_20_E_AUTH_TYPE                                                 NTStatus      = 0xC0290124
	STATUS_TPM_20_E_AUTH_MISSING                                              NTStatus      = 0xC0290125
	STATUS_TPM_20_E_POLICY                                                    NTStatus      = 0xC0290126
	STATUS_TPM_20_E_PCR                                                       NTStatus      = 0xC0290127
	STATUS_TPM_20_E_PCR_CHANGED                                               NTStatus      = 0xC0290128
	STATUS_TPM_20_E_UPGRADE                                                   NTStatus      = 0xC029012D
	STATUS_TPM_20_E_TOO_MANY_CONTEXTS                                         NTStatus      = 0xC029012E
	STATUS_TPM_20_E_AUTH_UNAVAILABLE                                          NTStatus      = 0xC029012F
	STATUS_TPM_20_E_REBOOT                                                    NTStatus      = 0xC0290130
	STATUS_TPM_20_E_UNBALANCED                                                NTStatus      = 0xC0290131
	STATUS_TPM_20_E_COMMAND_SIZE                                              NTStatus      = 0xC0290142
	STATUS_TPM_20_E_COMMAND_CODE                                              NTStatus      = 0xC0290143
	STATUS_TPM_20_E_AUTHSIZE                                                  NTStatus      = 0xC0290144
	STATUS_TPM_20_E_AUTH_CONTEXT                                              NTStatus      = 0xC0290145
	STATUS_TPM_20_E_NV_RANGE                                                  NTStatus      = 0xC0290146
	STATUS_TPM_20_E_NV_SIZE                                                   NTStatus      = 0xC0290147
	STATUS_TPM_20_E_NV_LOCKED                                                 NTStatus      = 0xC0290148
	STATUS_TPM_20_E_NV_AUTHORIZATION                                          NTStatus      = 0xC0290149
	STATUS_TPM_20_E_NV_UNINITIALIZED                                          NTStatus      = 0xC029014A
	STATUS_TPM_20_E_NV_SPACE                                                  NTStatus      = 0xC029014B
	STATUS_TPM_20_E_NV_DEFINED                                                NTStatus      = 0xC029014C
	STATUS_TPM_20_E_BAD_CONTEXT                                               NTStatus      = 0xC0290150
	STATUS_TPM_20_E_CPHASH                                                    NTStatus      = 0xC0290151
	STATUS_TPM_20_E_PARENT                                                    NTStatus      = 0xC0290152
	STATUS_TPM_20_E_NEEDS_TEST                                                NTStatus      = 0xC0290153
	STATUS_TPM_20_E_NO_RESULT                                                 NTStatus      = 0xC0290154
	STATUS_TPM_20_E_SENSITIVE                                                 NTStatus      = 0xC0290155
	STATUS_TPM_COMMAND_BLOCKED                                                NTStatus      = 0xC0290400
	STATUS_TPM_INVALID_HANDLE                                                 NTStatus      = 0xC0290401
	STATUS_TPM_DUPLICATE_VHANDLE                                              NTStatus      = 0xC0290402
	STATUS_TPM_EMBEDDED_COMMAND_BLOCKED                                       NTStatus      = 0xC0290403
	STATUS_TPM_EMBEDDED_COMMAND_UNSUPPORTED                                   NTStatus      = 0xC0290404
	STATUS_TPM_RETRY                                                          NTStatus      = 0xC0290800
	STATUS_TPM_NEEDS_SELFTEST                                                 NTStatus      = 0xC0290801
	STATUS_TPM_DOING_SELFTEST                                                 NTStatus      = 0xC0290802
	STATUS_TPM_DEFEND_LOCK_RUNNING                                            NTStatus      = 0xC0290803
	STATUS_TPM_COMMAND_CANCELED                                               NTStatus      = 0xC0291001
	STATUS_TPM_TOO_MANY_CONTEXTS                                              NTStatus      = 0xC0291002
	STATUS_TPM_NOT_FOUND                                                      NTStatus      = 0xC0291003
	STATUS_TPM_ACCESS_DENIED                                                  NTStatus      = 0xC0291004
	STATUS_TPM_INSUFFICIENT_BUFFER                                            NTStatus      = 0xC0291005
	STATUS_TPM_PPI_FUNCTION_UNSUPPORTED                                       NTStatus      = 0xC0291006
	STATUS_PCP_ERROR_MASK                                                     NTStatus      = 0xC0292000
	STATUS_PCP_DEVICE_NOT_READY                                               NTStatus      = 0xC0292001
	STATUS_PCP_INVALID_HANDLE                                                 NTStatus      = 0xC0292002
	STATUS_PCP_INVALID_PARAMETER                                              NTStatus      = 0xC0292003
	STATUS_PCP_FLAG_NOT_SUPPORTED                                             NTStatus      = 0xC0292004
	STATUS_PCP_NOT_SUPPORTED                                                  NTStatus      = 0xC0292005
	STATUS_PCP_BUFFER_TOO_SMALL                                               NTStatus      = 0xC0292006
	STATUS_PCP_INTERNAL_ERROR                                                 NTStatus      = 0xC0292007
	STATUS_PCP_AUTHENTICATION_FAILED                                          NTStatus      = 0xC0292008
	STATUS_PCP_AUTHENTICATION_IGNORED                                         NTStatus      = 0xC0292009
	STATUS_PCP_POLICY_NOT_FOUND                                               NTStatus      = 0xC029200A
	STATUS_PCP_PROFILE_NOT_FOUND                                              NTStatus      = 0xC029200B
	STATUS_PCP_VALIDATION_FAILED                                              NTStatus      = 0xC029200C
	STATUS_PCP_DEVICE_NOT_FOUND                                               NTStatus      = 0xC029200D
	STATUS_PCP_WRONG_PARENT                                                   NTStatus      = 0xC029200E
	STATUS_PCP_KEY_NOT_LOADED                                                 NTStatus      = 0xC029200F
	STATUS_PCP_NO_KEY_CERTIFICATION                                           NTStatus      = 0xC0292010
	STATUS_PCP_KEY_NOT_FINALIZED                                              NTStatus      = 0xC0292011
	STATUS_PCP_ATTESTATION_CHALLENGE_NOT_SET                                  NTStatus      = 0xC0292012
	STATUS_PCP_NOT_PCR_BOUND                                                  NTStatus      = 0xC0292013
	STATUS_PCP_KEY_ALREADY_FINALIZED                                          NTStatus      = 0xC0292014
	STATUS_PCP_KEY_USAGE_POLICY_NOT_SUPPORTED                                 NTStatus      = 0xC0292015
	STATUS_PCP_KEY_USAGE_POLICY_INVALID                                       NTStatus      = 0xC0292016
	STATUS_PCP_SOFT_KEY_ERROR                                                 NTStatus      = 0xC0292017
	STATUS_PCP_KEY_NOT_AUTHENTICATED                                          NTStatus      = 0xC0292018
	STATUS_PCP_KEY_NOT_AIK                                                    NTStatus      = 0xC0292019
	STATUS_PCP_KEY_NOT_SIGNING_KEY                                            NTStatus      = 0xC029201A
	STATUS_PCP_LOCKED_OUT                                                     NTStatus      = 0xC029201B
	STATUS_PCP_CLAIM_TYPE_NOT_SUPPORTED                                       NTStatus      = 0xC029201C
	STATUS_PCP_TPM_VERSION_NOT_SUPPORTED                                      NTStatus      = 0xC029201D
	STATUS_PCP_BUFFER_LENGTH_MISMATCH                                         NTStatus      = 0xC029201E
	STATUS_PCP_IFX_RSA_KEY_CREATION_BLOCKED                                   NTStatus      = 0xC029201F
	STATUS_PCP_TICKET_MISSING                                                 NTStatus      = 0xC0292020
	STATUS_PCP_RAW_POLICY_NOT_SUPPORTED                                       NTStatus      = 0xC0292021
	STATUS_PCP_KEY_HANDLE_INVALIDATED                                         NTStatus      = 0xC0292022
	STATUS_PCP_UNSUPPORTED_PSS_SALT                                           NTStatus      = 0x40292023
	STATUS_RTPM_CONTEXT_CONTINUE                                              NTStatus      = 0x00293000
	STATUS_RTPM_CONTEXT_COMPLETE                                              NTStatus      = 0x00293001
	STATUS_RTPM_NO_RESULT                                                     NTStatus      = 0xC0293002
	STATUS_RTPM_PCR_READ_INCOMPLETE                                           NTStatus      = 0xC0293003
	STATUS_RTPM_INVALID_CONTEXT                                               NTStatus      = 0xC0293004
	STATUS_RTPM_UNSUPPORTED_CMD                                               NTStatus      = 0xC0293005
	STATUS_TPM_ZERO_EXHAUST_ENABLED                                           NTStatus      = 0xC0294000
	STATUS_HV_INVALID_HYPERCALL_CODE                                          NTStatus      = 0xC0350002
	STATUS_HV_INVALID_HYPERCALL_INPUT                                         NTStatus      = 0xC0350003
	STATUS_HV_INVALID_ALIGNMENT                                               NTStatus      = 0xC0350004
	STATUS_HV_INVALID_PARAMETER                                               NTStatus      = 0xC0350005
	STATUS_HV_ACCESS_DENIED                                                   NTStatus      = 0xC0350006
	STATUS_HV_INVALID_PARTITION_STATE                                         NTStatus      = 0xC0350007
	STATUS_HV_OPERATION_DENIED                                                NTStatus      = 0xC0350008
	STATUS_HV_UNKNOWN_PROPERTY                                                NTStatus      = 0xC0350009
	STATUS_HV_PROPERTY_VALUE_OUT_OF_RANGE                                     NTStatus      = 0xC035000A
	STATUS_HV_INSUFFICIENT_MEMORY                                             NTStatus      = 0xC035000B
	STATUS_HV_PARTITION_TOO_DEEP                                              NTStatus      = 0xC035000C
	STATUS_HV_INVALID_PARTITION_ID                                            NTStatus      = 0xC035000D
	STATUS_HV_INVALID_VP_INDEX                                                NTStatus      = 0xC035000E
	STATUS_HV_INVALID_PORT_ID                                                 NTStatus      = 0xC0350011
	STATUS_HV_INVALID_CONNECTION_ID                                           NTStatus      = 0xC0350012
	STATUS_HV_INSUFFICIENT_BUFFERS                                            NTStatus      = 0xC0350013
	STATUS_HV_NOT_ACKNOWLEDGED                                                NTStatus      = 0xC0350014
	STATUS_HV_INVALID_VP_STATE                                                NTStatus      = 0xC0350015
	STATUS_HV_ACKNOWLEDGED                                                    NTStatus      = 0xC0350016
	STATUS_HV_INVALID_SAVE_RESTORE_STATE                                      NTStatus      = 0xC0350017
	STATUS_HV_INVALID_SYNIC_STATE                                             NTStatus      = 0xC0350018
	STATUS_HV_OBJECT_IN_USE                                                   NTStatus      = 0xC0350019
	STATUS_HV_INVALID_PROXIMITY_DOMAIN_INFO                                   NTStatus      = 0xC035001A
	STATUS_HV_NO_DATA                                                         NTStatus      = 0xC035001B
	STATUS_HV_INACTIVE                                                        NTStatus      = 0xC035001C
	STATUS_HV_NO_RESOURCES                                                    NTStatus      = 0xC035001D
	STATUS_HV_FEATURE_UNAVAILABLE                                             NTStatus      = 0xC035001E
	STATUS_HV_INSUFFICIENT_BUFFER                                             NTStatus      = 0xC0350033
	STATUS_HV_INSUFFICIENT_DEVICE_DOMAINS                                     NTStatus      = 0xC0350038
	STATUS_HV_CPUID_FEATURE_VALIDATION_ERROR                                  NTStatus      = 0xC035003C
	STATUS_HV_CPUID_XSAVE_FEATURE_VALIDATION_ERROR                            NTStatus      = 0xC035003D
	STATUS_HV_PROCESSOR_STARTUP_TIMEOUT                                       NTStatus      = 0xC035003E
	STATUS_HV_SMX_ENABLED                                                     NTStatus      = 0xC035003F
	STATUS_HV_INVALID_LP_INDEX                                                NTStatus      = 0xC0350041
	STATUS_HV_INVALID_REGISTER_VALUE                                          NTStatus      = 0xC0350050
	STATUS_HV_INVALID_VTL_STATE                                               NTStatus      = 0xC0350051
	STATUS_HV_NX_NOT_DETECTED                                                 NTStatus      = 0xC0350055
	STATUS_HV_INVALID_DEVICE_ID                                               NTStatus      = 0xC0350057
	STATUS_HV_INVALID_DEVICE_STATE                                            NTStatus      = 0xC0350058
	STATUS_HV_PENDING_PAGE_REQUESTS                                           NTStatus      = 0x00350059
	STATUS_HV_PAGE_REQUEST_INVALID                                            NTStatus      = 0xC0350060
	STATUS_HV_INVALID_CPU_GROUP_ID                                            NTStatus      = 0xC035006F
	STATUS_HV_INVALID_CPU_GROUP_STATE                                         NTStatus      = 0xC0350070
	STATUS_HV_OPERATION_FAILED                                                NTStatus      = 0xC0350071
	STATUS_HV_NOT_ALLOWED_WITH_NESTED_VIRT_ACTIVE                             NTStatus      = 0xC0350072
	STATUS_HV_INSUFFICIENT_ROOT_MEMORY                                        NTStatus      = 0xC0350073
	STATUS_HV_NOT_PRESENT                                                     NTStatus      = 0xC0351000
	STATUS_VID_DUPLICATE_HANDLER                                              NTStatus      = 0xC0370001
	STATUS_VID_TOO_MANY_HANDLERS                                              NTStatus      = 0xC0370002
	STATUS_VID_QUEUE_FULL                                                     NTStatus      = 0xC0370003
	STATUS_VID_HANDLER_NOT_PRESENT                                            NTStatus      = 0xC0370004
	STATUS_VID_INVALID_OBJECT_NAME                                            NTStatus      = 0xC0370005
	STATUS_VID_PARTITION_NAME_TOO_LONG                                        NTStatus      = 0xC0370006
	STATUS_VID_MESSAGE_QUEUE_NAME_TOO_LONG                                    NTStatus      = 0xC0370007
	STATUS_VID_PARTITION_ALREADY_EXISTS                                       NTStatus      = 0xC0370008
	STATUS_VID_PARTITION_DOES_NOT_EXIST                                       NTStatus      = 0xC0370009
	STATUS_VID_PARTITION_NAME_NOT_FOUND                                       NTStatus      = 0xC037000A
	STATUS_VID_MESSAGE_QUEUE_ALREADY_EXISTS                                   NTStatus      = 0xC037000B
	STATUS_VID_EXCEEDED_MBP_ENTRY_MAP_LIMIT                                   NTStatus      = 0xC037000C
	STATUS_VID_MB_STILL_REFERENCED                                            NTStatus      = 0xC037000D
	STATUS_VID_CHILD_GPA_PAGE_SET_CORRUPTED                                   NTStatus      = 0xC037000E
	STATUS_VID_INVALID_NUMA_SETTINGS                                          NTStatus      = 0xC037000F
	STATUS_VID_INVALID_NUMA_NODE_INDEX                                        NTStatus      = 0xC0370010
	STATUS_VID_NOTIFICATION_QUEUE_ALREADY_ASSOCIATED                          NTStatus      = 0xC0370011
	STATUS_VID_INVALID_MEMORY_BLOCK_HANDLE                                    NTStatus      = 0xC0370012
	STATUS_VID_PAGE_RANGE_OVERFLOW                                            NTStatus      = 0xC0370013
	STATUS_VID_INVALID_MESSAGE_QUEUE_HANDLE                                   NTStatus      = 0xC0370014
	STATUS_VID_INVALID_GPA_RANGE_HANDLE                                       NTStatus      = 0xC0370015
	STATUS_VID_NO_MEMORY_BLOCK_NOTIFICATION_QUEUE                             NTStatus      = 0xC0370016
	STATUS_VID_MEMORY_BLOCK_LOCK_COUNT_EXCEEDED                               NTStatus      = 0xC0370017
	STATUS_VID_INVALID_PPM_HANDLE                                             NTStatus      = 0xC0370018
	STATUS_VID_MBPS_ARE_LOCKED                                                NTStatus      = 0xC0370019
	STATUS_VID_MESSAGE_QUEUE_CLOSED                                           NTStatus      = 0xC037001A
	STATUS_VID_VIRTUAL_PROCESSOR_LIMIT_EXCEEDED                               NTStatus      = 0xC037001B
	STATUS_VID_STOP_PENDING                                                   NTStatus      = 0xC037001C
	STATUS_VID_INVALID_PROCESSOR_STATE                                        NTStatus      = 0xC037001D
	STATUS_VID_EXCEEDED_KM_CONTEXT_COUNT_LIMIT                                NTStatus      = 0xC037001E
	STATUS_VID_KM_INTERFACE_ALREADY_INITIALIZED                               NTStatus      = 0xC037001F
	STATUS_VID_MB_PROPERTY_ALREADY_SET_RESET                                  NTStatus      = 0xC0370020
	STATUS_VID_MMIO_RANGE_DESTROYED                                           NTStatus      = 0xC0370021
	STATUS_VID_INVALID_CHILD_GPA_PAGE_SET                                     NTStatus      = 0xC0370022
	STATUS_VID_RESERVE_PAGE_SET_IS_BEING_USED                                 NTStatus      = 0xC0370023
	STATUS_VID_RESERVE_PAGE_SET_TOO_SMALL                                     NTStatus      = 0xC0370024
	STATUS_VID_MBP_ALREADY_LOCKED_USING_RESERVED_PAGE                         NTStatus      = 0xC0370025
	STATUS_VID_MBP_COUNT_EXCEEDED_LIMIT                                       NTStatus      = 0xC0370026
	STATUS_VID_SAVED_STATE_CORRUPT                                            NTStatus      = 0xC0370027
	STATUS_VID_SAVED_STATE_UNRECOGNIZED_ITEM                                  NTStatus      = 0xC0370028
	STATUS_VID_SAVED_STATE_INCOMPATIBLE                                       NTStatus      = 0xC0370029
	STATUS_VID_VTL_ACCESS_DENIED                                              NTStatus      = 0xC037002A
	STATUS_VID_REMOTE_NODE_PARENT_GPA_PAGES_USED                              NTStatus      = 0x80370001
	STATUS_IPSEC_BAD_SPI                                                      NTStatus      = 0xC0360001
	STATUS_IPSEC_SA_LIFETIME_EXPIRED                                          NTStatus      = 0xC0360002
	STATUS_IPSEC_WRONG_SA                                                     NTStatus      = 0xC0360003
	STATUS_IPSEC_REPLAY_CHECK_FAILED                                          NTStatus      = 0xC0360004
	STATUS_IPSEC_INVALID_PACKET                                               NTStatus      = 0xC0360005
	STATUS_IPSEC_INTEGRITY_CHECK_FAILED                                       NTStatus      = 0xC0360006
	STATUS_IPSEC_CLEAR_TEXT_DROP                                              NTStatus      = 0xC0360007
	STATUS_IPSEC_AUTH_FIREWALL_DROP                                           NTStatus      = 0xC0360008
	STATUS_IPSEC_THROTTLE_DROP                                                NTStatus      = 0xC0360009
	STATUS_IPSEC_DOSP_BLOCK                                                   NTStatus      = 0xC0368000
	STATUS_IPSEC_DOSP_RECEIVED_MULTICAST                                      NTStatus      = 0xC0368001
	STATUS_IPSEC_DOSP_INVALID_PACKET                                          NTStatus      = 0xC0368002
	STATUS_IPSEC_DOSP_STATE_LOOKUP_FAILED                                     NTStatus      = 0xC0368003
	STATUS_IPSEC_DOSP_MAX_ENTRIES                                             NTStatus      = 0xC0368004
	STATUS_IPSEC_DOSP_KEYMOD_NOT_ALLOWED                                      NTStatus      = 0xC0368005
	STATUS_IPSEC_DOSP_MAX_PER_IP_RATELIMIT_QUEUES                             NTStatus      = 0xC0368006
	STATUS_VOLMGR_INCOMPLETE_REGENERATION                                     NTStatus      = 0x80380001
	STATUS_VOLMGR_INCOMPLETE_DISK_MIGRATION                                   NTStatus      = 0x80380002
	STATUS_VOLMGR_DATABASE_FULL                                               NTStatus      = 0xC0380001
	STATUS_VOLMGR_DISK_CONFIGURATION_CORRUPTED                                NTStatus      = 0xC0380002
	STATUS_VOLMGR_DISK_CONFIGURATION_NOT_IN_SYNC                              NTStatus      = 0xC0380003
	STATUS_VOLMGR_PACK_CONFIG_UPDATE_FAILED                                   NTStatus      = 0xC0380004
	STATUS_VOLMGR_DISK_CONTAINS_NON_SIMPLE_VOLUME                             NTStatus      = 0xC0380005
	STATUS_VOLMGR_DISK_DUPLICATE                                              NTStatus      = 0xC0380006
	STATUS_VOLMGR_DISK_DYNAMIC                                                NTStatus      = 0xC0380007
	STATUS_VOLMGR_DISK_ID_INVALID                                             NTStatus      = 0xC0380008
	STATUS_VOLMGR_DISK_INVALID                                                NTStatus      = 0xC0380009
	STATUS_VOLMGR_DISK_LAST_VOTER                                             NTStatus      = 0xC038000A
	STATUS_VOLMGR_DISK_LAYOUT_INVALID                                         NTStatus      = 0xC038000B
	STATUS_VOLMGR_DISK_LAYOUT_NON_BASIC_BETWEEN_BASIC_PARTITIONS              NTStatus      = 0xC038000C
	STATUS_VOLMGR_DISK_LAYOUT_NOT_CYLINDER_ALIGNED                            NTStatus      = 0xC038000D
	STATUS_VOLMGR_DISK_LAYOUT_PARTITIONS_TOO_SMALL                            NTStatus      = 0xC038000E
	STATUS_VOLMGR_DISK_LAYOUT_PRIMARY_BETWEEN_LOGICAL_PARTITIONS              NTStatus      = 0xC038000F
	STATUS_VOLMGR_DISK_LAYOUT_TOO_MANY_PARTITIONS                             NTStatus      = 0xC0380010
	STATUS_VOLMGR_DISK_MISSING                                                NTStatus      = 0xC0380011
	STATUS_VOLMGR_DISK_NOT_EMPTY                                              NTStatus      = 0xC0380012
	STATUS_VOLMGR_DISK_NOT_ENOUGH_SPACE                                       NTStatus      = 0xC0380013
	STATUS_VOLMGR_DISK_REVECTORING_FAILED                                     NTStatus      = 0xC0380014
	STATUS_VOLMGR_DISK_SECTOR_SIZE_INVALID                                    NTStatus      = 0xC0380015
	STATUS_VOLMGR_DISK_SET_NOT_CONTAINED                                      NTStatus      = 0xC0380016
	STATUS_VOLMGR_DISK_USED_BY_MULTIPLE_MEMBERS                               NTStatus      = 0xC0380017
	STATUS_VOLMGR_DISK_USED_BY_MULTIPLE_PLEXES                                NTStatus      = 0xC0380018
	STATUS_VOLMGR_DYNAMIC_DISK_NOT_SUPPORTED                                  NTStatus      = 0xC0380019
	STATUS_VOLMGR_EXTENT_ALREADY_USED                                         NTStatus      = 0xC038001A
	STATUS_VOLMGR_EXTENT_NOT_CONTIGUOUS                                       NTStatus      = 0xC038001B
	STATUS_VOLMGR_EXTENT_NOT_IN_PUBLIC_REGION                                 NTStatus      = 0xC038001C
	STATUS_VOLMGR_EXTENT_NOT_SECTOR_ALIGNED                                   NTStatus      = 0xC038001D
	STATUS_VOLMGR_EXTENT_OVERLAPS_EBR_PARTITION                               NTStatus      = 0xC038001E
	STATUS_VOLMGR_EXTENT_VOLUME_LENGTHS_DO_NOT_MATCH                          NTStatus      = 0xC038001F
	STATUS_VOLMGR_FAULT_TOLERANT_NOT_SUPPORTED                                NTStatus      = 0xC0380020
	STATUS_VOLMGR_INTERLEAVE_LENGTH_INVALID                                   NTStatus      = 0xC0380021
	STATUS_VOLMGR_MAXIMUM_REGISTERED_USERS                                    NTStatus      = 0xC0380022
	STATUS_VOLMGR_MEMBER_IN_SYNC                                              NTStatus      = 0xC0380023
	STATUS_VOLMGR_MEMBER_INDEX_DUPLICATE                                      NTStatus      = 0xC0380024
	STATUS_VOLMGR_MEMBER_INDEX_INVALID                                        NTStatus      = 0xC0380025
	STATUS_VOLMGR_MEMBER_MISSING                                              NTStatus      = 0xC0380026
	STATUS_VOLMGR_MEMBER_NOT_DETACHED                                         NTStatus      = 0xC0380027
	STATUS_VOLMGR_MEMBER_REGENERATING                                         NTStatus      = 0xC0380028
	STATUS_VOLMGR_ALL_DISKS_FAILED                                            NTStatus      = 0xC0380029
	STATUS_VOLMGR_NO_REGISTERED_USERS                                         NTStatus      = 0xC038002A
	STATUS_VOLMGR_NO_SUCH_USER                                                NTStatus      = 0xC038002B
	STATUS_VOLMGR_NOTIFICATION_RESET                                          NTStatus      = 0xC038002C
	STATUS_VOLMGR_NUMBER_OF_MEMBERS_INVALID                                   NTStatus      = 0xC038002D
	STATUS_VOLMGR_NUMBER_OF_PLEXES_INVALID                                    NTStatus      = 0xC038002E
	STATUS_VOLMGR_PACK_DUPLICATE                                              NTStatus      = 0xC038002F
	STATUS_VOLMGR_PACK_ID_INVALID                                             NTStatus      = 0xC0380030
	STATUS_VOLMGR_PACK_INVALID                                                NTStatus      = 0xC0380031
	STATUS_VOLMGR_PACK_NAME_INVALID                                           NTStatus      = 0xC0380032
	STATUS_VOLMGR_PACK_OFFLINE                                                NTStatus      = 0xC0380033
	STATUS_VOLMGR_PACK_HAS_QUORUM                                             NTStatus      = 0xC0380034
	STATUS_VOLMGR_PACK_WITHOUT_QUORUM                                         NTStatus      = 0xC0380035
	STATUS_VOLMGR_PARTITION_STYLE_INVALID                                     NTStatus      = 0xC0380036
	STATUS_VOLMGR_PARTITION_UPDATE_FAILED                                     NTStatus      = 0xC0380037
	STATUS_VOLMGR_PLEX_IN_SYNC                                                NTStatus      = 0xC0380038
	STATUS_VOLMGR_PLEX_INDEX_DUPLICATE                                        NTStatus      = 0xC0380039
	STATUS_VOLMGR_PLEX_INDEX_INVALID                                          NTStatus      = 0xC038003A
	STATUS_VOLMGR_PLEX_LAST_ACTIVE                                            NTStatus      = 0xC038003B
	STATUS_VOLMGR_PLEX_MISSING                                                NTStatus      = 0xC038003C
	STATUS_VOLMGR_PLEX_REGENERATING                                           NTStatus      = 0xC038003D
	STATUS_VOLMGR_PLEX_TYPE_INVALID                                           NTStatus      = 0xC038003E
	STATUS_VOLMGR_PLEX_NOT_RAID5                                              NTStatus      = 0xC038003F
	STATUS_VOLMGR_PLEX_NOT_SIMPLE                                             NTStatus      = 0xC0380040
	STATUS_VOLMGR_STRUCTURE_SIZE_INVALID                                      NTStatus      = 0xC0380041
	STATUS_VOLMGR_TOO_MANY_NOTIFICATION_REQUESTS                              NTStatus      = 0xC0380042
	STATUS_VOLMGR_TRANSACTION_IN_PROGRESS                                     NTStatus      = 0xC0380043
	STATUS_VOLMGR_UNEXPECTED_DISK_LAYOUT_CHANGE                               NTStatus      = 0xC0380044
	STATUS_VOLMGR_VOLUME_CONTAINS_MISSING_DISK                                NTStatus      = 0xC0380045
	STATUS_VOLMGR_VOLUME_ID_INVALID                                           NTStatus      = 0xC0380046
	STATUS_VOLMGR_VOLUME_LENGTH_INVALID                                       NTStatus      = 0xC0380047
	STATUS_VOLMGR_VOLUME_LENGTH_NOT_SECTOR_SIZE_MULTIPLE                      NTStatus      = 0xC0380048
	STATUS_VOLMGR_VOLUME_NOT_MIRRORED                                         NTStatus      = 0xC0380049
	STATUS_VOLMGR_VOLUME_NOT_RETAINED                                         NTStatus      = 0xC038004A
	STATUS_VOLMGR_VOLUME_OFFLINE                                              NTStatus      = 0xC038004B
	STATUS_VOLMGR_VOLUME_RETAINED                                             NTStatus      = 0xC038004C
	STATUS_VOLMGR_NUMBER_OF_EXTENTS_INVALID                                   NTStatus      = 0xC038004D
	STATUS_VOLMGR_DIFFERENT_SECTOR_SIZE                                       NTStatus      = 0xC038004E
	STATUS_VOLMGR_BAD_BOOT_DISK                                               NTStatus      = 0xC038004F
	STATUS_VOLMGR_PACK_CONFIG_OFFLINE                                         NTStatus      = 0xC0380050
	STATUS_VOLMGR_PACK_CONFIG_ONLINE                                          NTStatus      = 0xC0380051
	STATUS_VOLMGR_NOT_PRIMARY_PACK                                            NTStatus      = 0xC0380052
	STATUS_VOLMGR_PACK_LOG_UPDATE_FAILED                                      NTStatus      = 0xC0380053
	STATUS_VOLMGR_NUMBER_OF_DISKS_IN_PLEX_INVALID                             NTStatus      = 0xC0380054
	STATUS_VOLMGR_NUMBER_OF_DISKS_IN_MEMBER_INVALID                           NTStatus      = 0xC0380055
	STATUS_VOLMGR_VOLUME_MIRRORED                                             NTStatus      = 0xC0380056
	STATUS_VOLMGR_PLEX_NOT_SIMPLE_SPANNED                                     NTStatus      = 0xC0380057
	STATUS_VOLMGR_NO_VALID_LOG_COPIES                                         NTStatus      = 0xC0380058
	STATUS_VOLMGR_PRIMARY_PACK_PRESENT                                        NTStatus      = 0xC0380059
	STATUS_VOLMGR_NUMBER_OF_DISKS_INVALID                                     NTStatus      = 0xC038005A
	STATUS_VOLMGR_MIRROR_NOT_SUPPORTED                                        NTStatus      = 0xC038005B
	STATUS_VOLMGR_RAID5_NOT_SUPPORTED                                         NTStatus      = 0xC038005C
	STATUS_BCD_NOT_ALL_ENTRIES_IMPORTED                                       NTStatus      = 0x80390001
	STATUS_BCD_TOO_MANY_ELEMENTS                                              NTStatus      = 0xC0390002
	STATUS_BCD_NOT_ALL_ENTRIES_SYNCHRONIZED                                   NTStatus      = 0x80390003
	STATUS_VHD_DRIVE_FOOTER_MISSING                                           NTStatus      = 0xC03A0001
	STATUS_VHD_DRIVE_FOOTER_CHECKSUM_MISMATCH                                 NTStatus      = 0xC03A0002
	STATUS_VHD_DRIVE_FOOTER_CORRUPT                                           NTStatus      = 0xC03A0003
	STATUS_VHD_FORMAT_UNKNOWN                                                 NTStatus      = 0xC03A0004
	STATUS_VHD_FORMAT_UNSUPPORTED_VERSION                                     NTStatus      = 0xC03A0005
	STATUS_VHD_SPARSE_HEADER_CHECKSUM_MISMATCH                                NTStatus      = 0xC03A0006
	STATUS_VHD_SPARSE_HEADER_UNSUPPORTED_VERSION                              NTStatus      = 0xC03A0007
	STATUS_VHD_SPARSE_HEADER_CORRUPT                                          NTStatus      = 0xC03A0008
	STATUS_VHD_BLOCK_ALLOCATION_FAILURE                                       NTStatus      = 0xC03A0009
	STATUS_VHD_BLOCK_ALLOCATION_TABLE_CORRUPT                                 NTStatus      = 0xC03A000A
	STATUS_VHD_INVALID_BLOCK_SIZE                                             NTStatus      = 0xC03A000B
	STATUS_VHD_BITMAP_MISMATCH                                                NTStatus      = 0xC03A000C
	STATUS_VHD_PARENT_VHD_NOT_FOUND                                           NTStatus      = 0xC03A000D
	STATUS_VHD_CHILD_PARENT_ID_MISMATCH                                       NTStatus      = 0xC03A000E
	STATUS_VHD_CHILD_PARENT_TIMESTAMP_MISMATCH                                NTStatus      = 0xC03A000F
	STATUS_VHD_METADATA_READ_FAILURE                                          NTStatus      = 0xC03A0010
	STATUS_VHD_METADATA_WRITE_FAILURE                                         NTStatus      = 0xC03A0011
	STATUS_VHD_INVALID_SIZE                                                   NTStatus      = 0xC03A0012
	STATUS_VHD_INVALID_FILE_SIZE                                              NTStatus      = 0xC03A0013
	STATUS_VIRTDISK_PROVIDER_NOT_FOUND                                        NTStatus      = 0xC03A0014
	STATUS_VIRTDISK_NOT_VIRTUAL_DISK                                          NTStatus      = 0xC03A0015
	STATUS_VHD_PARENT_VHD_ACCESS_DENIED                                       NTStatus      = 0xC03A0016
	STATUS_VHD_CHILD_PARENT_SIZE_MISMATCH                                     NTStatus      = 0xC03A0017
	STATUS_VHD_DIFFERENCING_CHAIN_CYCLE_DETECTED                              NTStatus      = 0xC03A0018
	STATUS_VHD_DIFFERENCING_CHAIN_ERROR_IN_PARENT                             NTStatus      = 0xC03A0019
	STATUS_VIRTUAL_DISK_LIMITATION                                            NTStatus      = 0xC03A001A
	STATUS_VHD_INVALID_TYPE                                                   NTStatus      = 0xC03A001B
	STATUS_VHD_INVALID_STATE                                                  NTStatus      = 0xC03A001C
	STATUS_VIRTDISK_UNSUPPORTED_DISK_SECTOR_SIZE                              NTStatus      = 0xC03A001D
	STATUS_VIRTDISK_DISK_ALREADY_OWNED                                        NTStatus      = 0xC03A001E
	STATUS_VIRTDISK_DISK_ONLINE_AND_WRITABLE                                  NTStatus      = 0xC03A001F
	STATUS_CTLOG_TRACKING_NOT_INITIALIZED                                     NTStatus      = 0xC03A0020
	STATUS_CTLOG_LOGFILE_SIZE_EXCEEDED_MAXSIZE                                NTStatus      = 0xC03A0021
	STATUS_CTLOG_VHD_CHANGED_OFFLINE                                          NTStatus      = 0xC03A0022
	STATUS_CTLOG_INVALID_TRACKING_STATE                                       NTStatus      = 0xC03A0023
	STATUS_CTLOG_INCONSISTENT_TRACKING_FILE                                   NTStatus      = 0xC03A0024
	STATUS_VHD_METADATA_FULL                                                  NTStatus      = 0xC03A0028
	STATUS_VHD_INVALID_CHANGE_TRACKING_ID                                     NTStatus      = 0xC03A0029
	STATUS_VHD_CHANGE_TRACKING_DISABLED                                       NTStatus      = 0xC03A002A
	STATUS_VHD_MISSING_CHANGE_TRACKING_INFORMATION                            NTStatus      = 0xC03A0030
	STATUS_VHD_RESIZE_WOULD_TRUNCATE_DATA                                     NTStatus      = 0xC03A0031
	STATUS_VHD_COULD_NOT_COMPUTE_MINIMUM_VIRTUAL_SIZE                         NTStatus      = 0xC03A0032
	STATUS_VHD_ALREADY_AT_OR_BELOW_MINIMUM_VIRTUAL_SIZE                       NTStatus      = 0xC03A0033
	STATUS_QUERY_STORAGE_ERROR                                                NTStatus      = 0x803A0001
	STATUS_GDI_HANDLE_LEAK                                                    NTStatus      = 0x803F0001
	STATUS_RKF_KEY_NOT_FOUND                                                  NTStatus      = 0xC0400001
	STATUS_RKF_DUPLICATE_KEY                                                  NTStatus      = 0xC0400002
	STATUS_RKF_BLOB_FULL                                                      NTStatus      = 0xC0400003
	STATUS_RKF_STORE_FULL                                                     NTStatus      = 0xC0400004
	STATUS_RKF_FILE_BLOCKED                                                   NTStatus      = 0xC0400005
	STATUS_RKF_ACTIVE_KEY                                                     NTStatus      = 0xC0400006
	STATUS_RDBSS_RESTART_OPERATION                                            NTStatus      = 0xC0410001
	STATUS_RDBSS_CONTINUE_OPERATION                                           NTStatus      = 0xC0410002
	STATUS_RDBSS_POST_OPERATION                                               NTStatus      = 0xC0410003
	STATUS_RDBSS_RETRY_LOOKUP                                                 NTStatus      = 0xC0410004
	STATUS_BTH_ATT_INVALID_HANDLE                                             NTStatus      = 0xC0420001
	STATUS_BTH_ATT_READ_NOT_PERMITTED                                         NTStatus      = 0xC0420002
	STATUS_BTH_ATT_WRITE_NOT_PERMITTED                                        NTStatus      = 0xC0420003
	STATUS_BTH_ATT_INVALID_PDU                                                NTStatus      = 0xC0420004
	STATUS_BTH_ATT_INSUFFICIENT_AUTHENTICATION                                NTStatus      = 0xC0420005
	STATUS_BTH_ATT_REQUEST_NOT_SUPPORTED                                      NTStatus      = 0xC0420006
	STATUS_BTH_ATT_INVALID_OFFSET                                             NTStatus      = 0xC0420007
	STATUS_BTH_ATT_INSUFFICIENT_AUTHORIZATION                                 NTStatus      = 0xC0420008
	STATUS_BTH_ATT_PREPARE_QUEUE_FULL                                         NTStatus      = 0xC0420009
	STATUS_BTH_ATT_ATTRIBUTE_NOT_FOUND                                        NTStatus      = 0xC042000A
	STATUS_BTH_ATT_ATTRIBUTE_NOT_LONG                                         NTStatus      = 0xC042000B
	STATUS_BTH_ATT_INSUFFICIENT_ENCRYPTION_KEY_SIZE                           NTStatus      = 0xC042000C
	STATUS_BTH_ATT_INVALID_ATTRIBUTE_VALUE_LENGTH                             NTStatus      = 0xC042000D
	STATUS_BTH_ATT_UNLIKELY                                                   NTStatus      = 0xC042000E
	STATUS_BTH_ATT_INSUFFICIENT_ENCRYPTION                                    NTStatus      = 0xC042000F
	STATUS_BTH_ATT_UNSUPPORTED_GROUP_TYPE                                     NTStatus      = 0xC0420010
	STATUS_BTH_ATT_INSUFFICIENT_RESOURCES                                     NTStatus      = 0xC0420011
	STATUS_BTH_ATT_UNKNOWN_ERROR                                              NTStatus      = 0xC0421000
	STATUS_SECUREBOOT_ROLLBACK_DETECTED                                       NTStatus      = 0xC0430001
	STATUS_SECUREBOOT_POLICY_VIOLATION                                        NTStatus      = 0xC0430002
	STATUS_SECUREBOOT_INVALID_POLICY                                          NTStatus      = 0xC0430003
	STATUS_SECUREBOOT_POLICY_PUBLISHER_NOT_FOUND                              NTStatus      = 0xC0430004
	STATUS_SECUREBOOT_POLICY_NOT_SIGNED                                       NTStatus      = 0xC0430005
	STATUS_SECUREBOOT_NOT_ENABLED                                             NTStatus      = 0x80430006
	STATUS_SECUREBOOT_FILE_REPLACED                                           NTStatus      = 0xC0430007
	STATUS_SECUREBOOT_POLICY_NOT_AUTHORIZED                                   NTStatus      = 0xC0430008
	STATUS_SECUREBOOT_POLICY_UNKNOWN                                          NTStatus      = 0xC0430009
	STATUS_SECUREBOOT_POLICY_MISSING_ANTIROLLBACKVERSION                      NTStatus      = 0xC043000A
	STATUS_SECUREBOOT_PLATFORM_ID_MISMATCH                                    NTStatus      = 0xC043000B
	STATUS_SECUREBOOT_POLICY_ROLLBACK_DETECTED                                NTStatus      = 0xC043000C
	STATUS_SECUREBOOT_POLICY_UPGRADE_MISMATCH                                 NTStatus      = 0xC043000D
	STATUS_SECUREBOOT_REQUIRED_POLICY_FILE_MISSING                            NTStatus      = 0xC043000E
	STATUS_SECUREBOOT_NOT_BASE_POLICY                                         NTStatus      = 0xC043000F
	STATUS_SECUREBOOT_NOT_SUPPLEMENTAL_POLICY                                 NTStatus      = 0xC0430010
	STATUS_PLATFORM_MANIFEST_NOT_AUTHORIZED                                   NTStatus      = 0xC0EB0001
	STATUS_PLATFORM_MANIFEST_INVALID                                          NTStatus      = 0xC0EB0002
	STATUS_PLATFORM_MANIFEST_FILE_NOT_AUTHORIZED                              NTStatus      = 0xC0EB0003
	STATUS_PLATFORM_MANIFEST_CATALOG_NOT_AUTHORIZED                           NTStatus      = 0xC0EB0004
	STATUS_PLATFORM_MANIFEST_BINARY_ID_NOT_FOUND                              NTStatus      = 0xC0EB0005
	STATUS_PLATFORM_MANIFEST_NOT_ACTIVE                                       NTStatus      = 0xC0EB0006
	STATUS_PLATFORM_MANIFEST_NOT_SIGNED                                       NTStatus      = 0xC0EB0007
	STATUS_SYSTEM_INTEGRITY_ROLLBACK_DETECTED                                 NTStatus      = 0xC0E90001
	STATUS_SYSTEM_INTEGRITY_POLICY_VIOLATION                                  NTStatus      = 0xC0E90002
	STATUS_SYSTEM_INTEGRITY_INVALID_POLICY                                    NTStatus      = 0xC0E90003
	STATUS_SYSTEM_INTEGRITY_POLICY_NOT_SIGNED                                 NTStatus      = 0xC0E90004
	STATUS_SYSTEM_INTEGRITY_TOO_MANY_POLICIES                                 NTStatus      = 0xC0E90005
	STATUS_SYSTEM_INTEGRITY_SUPPLEMENTAL_POLICY_NOT_AUTHORIZED                NTStatus      = 0xC0E90006
	STATUS_NO_APPLICABLE_APP_LICENSES_FOUND                                   NTStatus      = 0xC0EA0001
	STATUS_CLIP_LICENSE_NOT_FOUND                                             NTStatus      = 0xC0EA0002
	STATUS_CLIP_DEVICE_LICENSE_MISSING                                        NTStatus      = 0xC0EA0003
	STATUS_CLIP_LICENSE_INVALID_SIGNATURE                                     NTStatus      = 0xC0EA0004
	STATUS_CLIP_KEYHOLDER_LICENSE_MISSING_OR_INVALID                          NTStatus      = 0xC0EA0005
	STATUS_CLIP_LICENSE_EXPIRED                                               NTStatus      = 0xC0EA0006
	STATUS_CLIP_LICENSE_SIGNED_BY_UNKNOWN_SOURCE                              NTStatus      = 0xC0EA0007
	STATUS_CLIP_LICENSE_NOT_SIGNED                                            NTStatus      = 0xC0EA0008
	STATUS_CLIP_LICENSE_HARDWARE_ID_OUT_OF_TOLERANCE                          NTStatus      = 0xC0EA0009
	STATUS_CLIP_LICENSE_DEVICE_ID_MISMATCH                                    NTStatus      = 0xC0EA000A
	STATUS_AUDIO_ENGINE_NODE_NOT_FOUND                                        NTStatus      = 0xC0440001
	STATUS_HDAUDIO_EMPTY_CONNECTION_LIST                                      NTStatus      = 0xC0440002
	STATUS_HDAUDIO_CONNECTION_LIST_NOT_SUPPORTED                              NTStatus      = 0xC0440003
	STATUS_HDAUDIO_NO_LOGICAL_DEVICES_CREATED                                 NTStatus      = 0xC0440004
	STATUS_HDAUDIO_NULL_LINKED_LIST_ENTRY                                     NTStatus      = 0xC0440005
	STATUS_SPACES_REPAIRED                                                    NTStatus      = 0x00E70000
	STATUS_SPACES_PAUSE                                                       NTStatus      = 0x00E70001
	STATUS_SPACES_COMPLETE                                                    NTStatus      = 0x00E70002
	STATUS_SPACES_REDIRECT                                                    NTStatus      = 0x00E70003
	STATUS_SPACES_FAULT_DOMAIN_TYPE_INVALID                                   NTStatus      = 0xC0E70001
	STATUS_SPACES_RESILIENCY_TYPE_INVALID                                     NTStatus      = 0xC0E70003
	STATUS_SPACES_DRIVE_SECTOR_SIZE_INVALID                                   NTStatus      = 0xC0E70004
	STATUS_SPACES_DRIVE_REDUNDANCY_INVALID                                    NTStatus      = 0xC0E70006
	STATUS_SPACES_NUMBER_OF_DATA_COPIES_INVALID                               NTStatus      = 0xC0E70007
	STATUS_SPACES_INTERLEAVE_LENGTH_INVALID                                   NTStatus      = 0xC0E70009
	STATUS_SPACES_NUMBER_OF_COLUMNS_INVALID                                   NTStatus      = 0xC0E7000A
	STATUS_SPACES_NOT_ENOUGH_DRIVES                                           NTStatus      = 0xC0E7000B
	STATUS_SPACES_EXTENDED_ERROR                                              NTStatus      = 0xC0E7000C
	STATUS_SPACES_PROVISIONING_TYPE_INVALID                                   NTStatus      = 0xC0E7000D
	STATUS_SPACES_ALLOCATION_SIZE_INVALID                                     NTStatus      = 0xC0E7000E
	STATUS_SPACES_ENCLOSURE_AWARE_INVALID                                     NTStatus      = 0xC0E7000F
	STATUS_SPACES_WRITE_CACHE_SIZE_INVALID                                    NTStatus      = 0xC0E70010
	STATUS_SPACES_NUMBER_OF_GROUPS_INVALID                                    NTStatus      = 0xC0E70011
	STATUS_SPACES_DRIVE_OPERATIONAL_STATE_INVALID                             NTStatus      = 0xC0E70012
	STATUS_SPACES_UPDATE_COLUMN_STATE                                         NTStatus      = 0xC0E70013
	STATUS_SPACES_MAP_REQUIRED                                                NTStatus      = 0xC0E70014
	STATUS_SPACES_UNSUPPORTED_VERSION                                         NTStatus      = 0xC0E70015
	STATUS_SPACES_CORRUPT_METADATA                                            NTStatus      = 0xC0E70016
	STATUS_SPACES_DRT_FULL                                                    NTStatus      = 0xC0E70017
	STATUS_SPACES_INCONSISTENCY                                               NTStatus      = 0xC0E70018
	STATUS_SPACES_LOG_NOT_READY                                               NTStatus      = 0xC0E70019
	STATUS_SPACES_NO_REDUNDANCY                                               NTStatus      = 0xC0E7001A
	STATUS_SPACES_DRIVE_NOT_READY                                             NTStatus      = 0xC0E7001B
	STATUS_SPACES_DRIVE_SPLIT                                                 NTStatus      = 0xC0E7001C
	STATUS_SPACES_DRIVE_LOST_DATA                                             NTStatus      = 0xC0E7001D
	STATUS_SPACES_ENTRY_INCOMPLETE                                            NTStatus      = 0xC0E7001E
	STATUS_SPACES_ENTRY_INVALID                                               NTStatus      = 0xC0E7001F
	STATUS_SPACES_MARK_DIRTY                                                  NTStatus      = 0xC0E70020
	STATUS_VOLSNAP_BOOTFILE_NOT_VALID                                         NTStatus      = 0xC0500003
	STATUS_VOLSNAP_ACTIVATION_TIMEOUT                                         NTStatus      = 0xC0500004
	STATUS_IO_PREEMPTED                                                       NTStatus      = 0xC0510001
	STATUS_SVHDX_ERROR_STORED                                                 NTStatus      = 0xC05C0000
	STATUS_SVHDX_ERROR_NOT_AVAILABLE                                          NTStatus      = 0xC05CFF00
	STATUS_SVHDX_UNIT_ATTENTION_AVAILABLE                                     NTStatus      = 0xC05CFF01
	STATUS_SVHDX_UNIT_ATTENTION_CAPACITY_DATA_CHANGED                         NTStatus      = 0xC05CFF02
	STATUS_SVHDX_UNIT_ATTENTION_RESERVATIONS_PREEMPTED                        NTStatus      = 0xC05CFF03
	STATUS_SVHDX_UNIT_ATTENTION_RESERVATIONS_RELEASED                         NTStatus      = 0xC05CFF04
	STATUS_SVHDX_UNIT_ATTENTION_REGISTRATIONS_PREEMPTED                       NTStatus      = 0xC05CFF05
	STATUS_SVHDX_UNIT_ATTENTION_OPERATING_DEFINITION_CHANGED                  NTStatus      = 0xC05CFF06
	STATUS_SVHDX_RESERVATION_CONFLICT                                         NTStatus      = 0xC05CFF07
	STATUS_SVHDX_WRONG_FILE_TYPE                                              NTStatus      = 0xC05CFF08
	STATUS_SVHDX_VERSION_MISMATCH                                             NTStatus      = 0xC05CFF09
	STATUS_VHD_SHARED                                                         NTStatus      = 0xC05CFF0A
	STATUS_SVHDX_NO_INITIATOR                                                 NTStatus      = 0xC05CFF0B
	STATUS_VHDSET_BACKING_STORAGE_NOT_FOUND                                   NTStatus      = 0xC05CFF0C
	STATUS_SMB_NO_PREAUTH_INTEGRITY_HASH_OVERLAP                              NTStatus      = 0xC05D0000
	STATUS_SMB_BAD_CLUSTER_DIALECT                                            NTStatus      = 0xC05D0001
	STATUS_SMB_GUEST_LOGON_BLOCKED                                            NTStatus      = 0xC05D0002
	STATUS_SECCORE_INVALID_COMMAND                                            NTStatus      = 0xC0E80000
	STATUS_VSM_NOT_INITIALIZED                                                NTStatus      = 0xC0450000
	STATUS_VSM_DMA_PROTECTION_NOT_IN_USE                                      NTStatus      = 0xC0450001
	STATUS_APPEXEC_CONDITION_NOT_SATISFIED                                    NTStatus      = 0xC0EC0000
	STATUS_APPEXEC_HANDLE_INVALIDATED                                         NTStatus      = 0xC0EC0001
	STATUS_APPEXEC_INVALID_HOST_GENERATION                                    NTStatus      = 0xC0EC0002
	STATUS_APPEXEC_UNEXPECTED_PROCESS_REGISTRATION                            NTStatus      = 0xC0EC0003
	STATUS_APPEXEC_INVALID_HOST_STATE                                         NTStatus      = 0xC0EC0004
	STATUS_APPEXEC_NO_DONOR                                                   NTStatus      = 0xC0EC0005
	STATUS_APPEXEC_HOST_ID_MISMATCH                                           NTStatus      = 0xC0EC0006
	STATUS_APPEXEC_UNKNOWN_USER                                               NTStatus      = 0xC0EC0007
)
  07070100000EEF000081A4000000000000000000000001645E367C00004AC9000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/zknownfolderids_windows.go    // Code generated by 'mkknownfolderids.bash'; DO NOT EDIT.

package windows

type KNOWNFOLDERID GUID

var (
	FOLDERID_NetworkFolder          = &KNOWNFOLDERID{0xd20beec4, 0x5ca8, 0x4905, [8]byte{0xae, 0x3b, 0xbf, 0x25, 0x1e, 0xa0, 0x9b, 0x53}}
	FOLDERID_ComputerFolder         = &KNOWNFOLDERID{0x0ac0837c, 0xbbf8, 0x452a, [8]byte{0x85, 0x0d, 0x79, 0xd0, 0x8e, 0x66, 0x7c, 0xa7}}
	FOLDERID_InternetFolder         = &KNOWNFOLDERID{0x4d9f7874, 0x4e0c, 0x4904, [8]byte{0x96, 0x7b, 0x40, 0xb0, 0xd2, 0x0c, 0x3e, 0x4b}}
	FOLDERID_ControlPanelFolder     = &KNOWNFOLDERID{0x82a74aeb, 0xaeb4, 0x465c, [8]byte{0xa0, 0x14, 0xd0, 0x97, 0xee, 0x34, 0x6d, 0x63}}
	FOLDERID_PrintersFolder         = &KNOWNFOLDERID{0x76fc4e2d, 0xd6ad, 0x4519, [8]byte{0xa6, 0x63, 0x37, 0xbd, 0x56, 0x06, 0x81, 0x85}}
	FOLDERID_SyncManagerFolder      = &KNOWNFOLDERID{0x43668bf8, 0xc14e, 0x49b2, [8]byte{0x97, 0xc9, 0x74, 0x77, 0x84, 0xd7, 0x84, 0xb7}}
	FOLDERID_SyncSetupFolder        = &KNOWNFOLDERID{0x0f214138, 0xb1d3, 0x4a90, [8]byte{0xbb, 0xa9, 0x27, 0xcb, 0xc0, 0xc5, 0x38, 0x9a}}
	FOLDERID_ConflictFolder         = &KNOWNFOLDERID{0x4bfefb45, 0x347d, 0x4006, [8]byte{0xa5, 0xbe, 0xac, 0x0c, 0xb0, 0x56, 0x71, 0x92}}
	FOLDERID_SyncResultsFolder      = &KNOWNFOLDERID{0x289a9a43, 0xbe44, 0x4057, [8]byte{0xa4, 0x1b, 0x58, 0x7a, 0x76, 0xd7, 0xe7, 0xf9}}
	FOLDERID_RecycleBinFolder       = &KNOWNFOLDERID{0xb7534046, 0x3ecb, 0x4c18, [8]byte{0xbe, 0x4e, 0x64, 0xcd, 0x4c, 0xb7, 0xd6, 0xac}}
	FOLDERID_ConnectionsFolder      = &KNOWNFOLDERID{0x6f0cd92b, 0x2e97, 0x45d1, [8]byte{0x88, 0xff, 0xb0, 0xd1, 0x86, 0xb8, 0xde, 0xdd}}
	FOLDERID_Fonts                  = &KNOWNFOLDERID{0xfd228cb7, 0xae11, 0x4ae3, [8]byte{0x86, 0x4c, 0x16, 0xf3, 0x91, 0x0a, 0xb8, 0xfe}}
	FOLDERID_Desktop                = &KNOWNFOLDERID{0xb4bfcc3a, 0xdb2c, 0x424c, [8]byte{0xb0, 0x29, 0x7f, 0xe9, 0x9a, 0x87, 0xc6, 0x41}}
	FOLDERID_Startup                = &KNOWNFOLDERID{0xb97d20bb, 0xf46a, 0x4c97, [8]byte{0xba, 0x10, 0x5e, 0x36, 0x08, 0x43, 0x08, 0x54}}
	FOLDERID_Programs               = &KNOWNFOLDERID{0xa77f5d77, 0x2e2b, 0x44c3, [8]byte{0xa6, 0xa2, 0xab, 0xa6, 0x01, 0x05, 0x4a, 0x51}}
	FOLDERID_StartMenu              = &KNOWNFOLDERID{0x625b53c3, 0xab48, 0x4ec1, [8]byte{0xba, 0x1f, 0xa1, 0xef, 0x41, 0x46, 0xfc, 0x19}}
	FOLDERID_Recent                 = &KNOWNFOLDERID{0xae50c081, 0xebd2, 0x438a, [8]byte{0x86, 0x55, 0x8a, 0x09, 0x2e, 0x34, 0x98, 0x7a}}
	FOLDERID_SendTo                 = &KNOWNFOLDERID{0x8983036c, 0x27c0, 0x404b, [8]byte{0x8f, 0x08, 0x10, 0x2d, 0x10, 0xdc, 0xfd, 0x74}}
	FOLDERID_Documents              = &KNOWNFOLDERID{0xfdd39ad0, 0x238f, 0x46af, [8]byte{0xad, 0xb4, 0x6c, 0x85, 0x48, 0x03, 0x69, 0xc7}}
	FOLDERID_Favorites              = &KNOWNFOLDERID{0x1777f761, 0x68ad, 0x4d8a, [8]byte{0x87, 0xbd, 0x30, 0xb7, 0x59, 0xfa, 0x33, 0xdd}}
	FOLDERID_NetHood                = &KNOWNFOLDERID{0xc5abbf53, 0xe17f, 0x4121, [8]byte{0x89, 0x00, 0x86, 0x62, 0x6f, 0xc2, 0xc9, 0x73}}
	FOLDERID_PrintHood              = &KNOWNFOLDERID{0x9274bd8d, 0xcfd1, 0x41c3, [8]byte{0xb3, 0x5e, 0xb1, 0x3f, 0x55, 0xa7, 0x58, 0xf4}}
	FOLDERID_Templates              = &KNOWNFOLDERID{0xa63293e8, 0x664e, 0x48db, [8]byte{0xa0, 0x79, 0xdf, 0x75, 0x9e, 0x05, 0x09, 0xf7}}
	FOLDERID_CommonStartup          = &KNOWNFOLDERID{0x82a5ea35, 0xd9cd, 0x47c5, [8]byte{0x96, 0x29, 0xe1, 0x5d, 0x2f, 0x71, 0x4e, 0x6e}}
	FOLDERID_CommonPrograms         = &KNOWNFOLDERID{0x0139d44e, 0x6afe, 0x49f2, [8]byte{0x86, 0x90, 0x3d, 0xaf, 0xca, 0xe6, 0xff, 0xb8}}
	FOLDERID_CommonStartMenu        = &KNOWNFOLDERID{0xa4115719, 0xd62e, 0x491d, [8]byte{0xaa, 0x7c, 0xe7, 0x4b, 0x8b, 0xe3, 0xb0, 0x67}}
	FOLDERID_PublicDesktop          = &KNOWNFOLDERID{0xc4aa340d, 0xf20f, 0x4863, [8]byte{0xaf, 0xef, 0xf8, 0x7e, 0xf2, 0xe6, 0xba, 0x25}}
	FOLDERID_ProgramData            = &KNOWNFOLDERID{0x62ab5d82, 0xfdc1, 0x4dc3, [8]byte{0xa9, 0xdd, 0x07, 0x0d, 0x1d, 0x49, 0x5d, 0x97}}
	FOLDERID_CommonTemplates        = &KNOWNFOLDERID{0xb94237e7, 0x57ac, 0x4347, [8]byte{0x91, 0x51, 0xb0, 0x8c, 0x6c, 0x32, 0xd1, 0xf7}}
	FOLDERID_PublicDocuments        = &KNOWNFOLDERID{0xed4824af, 0xdce4, 0x45a8, [8]byte{0x81, 0xe2, 0xfc, 0x79, 0x65, 0x08, 0x36, 0x34}}
	FOLDERID_RoamingAppData         = &KNOWNFOLDERID{0x3eb685db, 0x65f9, 0x4cf6, [8]byte{0xa0, 0x3a, 0xe3, 0xef, 0x65, 0x72, 0x9f, 0x3d}}
	FOLDERID_LocalAppData           = &KNOWNFOLDERID{0xf1b32785, 0x6fba, 0x4fcf, [8]byte{0x9d, 0x55, 0x7b, 0x8e, 0x7f, 0x15, 0x70, 0x91}}
	FOLDERID_LocalAppDataLow        = &KNOWNFOLDERID{0xa520a1a4, 0x1780, 0x4ff6, [8]byte{0xbd, 0x18, 0x16, 0x73, 0x43, 0xc5, 0xaf, 0x16}}
	FOLDERID_InternetCache          = &KNOWNFOLDERID{0x352481e8, 0x33be, 0x4251, [8]byte{0xba, 0x85, 0x60, 0x07, 0xca, 0xed, 0xcf, 0x9d}}
	FOLDERID_Cookies                = &KNOWNFOLDERID{0x2b0f765d, 0xc0e9, 0x4171, [8]byte{0x90, 0x8e, 0x08, 0xa6, 0x11, 0xb8, 0x4f, 0xf6}}
	FOLDERID_History                = &KNOWNFOLDERID{0xd9dc8a3b, 0xb784, 0x432e, [8]byte{0xa7, 0x81, 0x5a, 0x11, 0x30, 0xa7, 0x59, 0x63}}
	FOLDERID_System                 = &KNOWNFOLDERID{0x1ac14e77, 0x02e7, 0x4e5d, [8]byte{0xb7, 0x44, 0x2e, 0xb1, 0xae, 0x51, 0x98, 0xb7}}
	FOLDERID_SystemX86              = &KNOWNFOLDERID{0xd65231b0, 0xb2f1, 0x4857, [8]byte{0xa4, 0xce, 0xa8, 0xe7, 0xc6, 0xea, 0x7d, 0x27}}
	FOLDERID_Windows                = &KNOWNFOLDERID{0xf38bf404, 0x1d43, 0x42f2, [8]byte{0x93, 0x05, 0x67, 0xde, 0x0b, 0x28, 0xfc, 0x23}}
	FOLDERID_Profile                = &KNOWNFOLDERID{0x5e6c858f, 0x0e22, 0x4760, [8]byte{0x9a, 0xfe, 0xea, 0x33, 0x17, 0xb6, 0x71, 0x73}}
	FOLDERID_Pictures               = &KNOWNFOLDERID{0x33e28130, 0x4e1e, 0x4676, [8]byte{0x83, 0x5a, 0x98, 0x39, 0x5c, 0x3b, 0xc3, 0xbb}}
	FOLDERID_ProgramFilesX86        = &KNOWNFOLDERID{0x7c5a40ef, 0xa0fb, 0x4bfc, [8]byte{0x87, 0x4a, 0xc0, 0xf2, 0xe0, 0xb9, 0xfa, 0x8e}}
	FOLDERID_ProgramFilesCommonX86  = &KNOWNFOLDERID{0xde974d24, 0xd9c6, 0x4d3e, [8]byte{0xbf, 0x91, 0xf4, 0x45, 0x51, 0x20, 0xb9, 0x17}}
	FOLDERID_ProgramFilesX64        = &KNOWNFOLDERID{0x6d809377, 0x6af0, 0x444b, [8]byte{0x89, 0x57, 0xa3, 0x77, 0x3f, 0x02, 0x20, 0x0e}}
	FOLDERID_ProgramFilesCommonX64  = &KNOWNFOLDERID{0x6365d5a7, 0x0f0d, 0x45e5, [8]byte{0x87, 0xf6, 0x0d, 0xa5, 0x6b, 0x6a, 0x4f, 0x7d}}
	FOLDERID_ProgramFiles           = &KNOWNFOLDERID{0x905e63b6, 0xc1bf, 0x494e, [8]byte{0xb2, 0x9c, 0x65, 0xb7, 0x32, 0xd3, 0xd2, 0x1a}}
	FOLDERID_ProgramFilesCommon     = &KNOWNFOLDERID{0xf7f1ed05, 0x9f6d, 0x47a2, [8]byte{0xaa, 0xae, 0x29, 0xd3, 0x17, 0xc6, 0xf0, 0x66}}
	FOLDERID_UserProgramFiles       = &KNOWNFOLDERID{0x5cd7aee2, 0x2219, 0x4a67, [8]byte{0xb8, 0x5d, 0x6c, 0x9c, 0xe1, 0x56, 0x60, 0xcb}}
	FOLDERID_UserProgramFilesCommon = &KNOWNFOLDERID{0xbcbd3057, 0xca5c, 0x4622, [8]byte{0xb4, 0x2d, 0xbc, 0x56, 0xdb, 0x0a, 0xe5, 0x16}}
	FOLDERID_AdminTools             = &KNOWNFOLDERID{0x724ef170, 0xa42d, 0x4fef, [8]byte{0x9f, 0x26, 0xb6, 0x0e, 0x84, 0x6f, 0xba, 0x4f}}
	FOLDERID_CommonAdminTools       = &KNOWNFOLDERID{0xd0384e7d, 0xbac3, 0x4797, [8]byte{0x8f, 0x14, 0xcb, 0xa2, 0x29, 0xb3, 0x92, 0xb5}}
	FOLDERID_Music                  = &KNOWNFOLDERID{0x4bd8d571, 0x6d19, 0x48d3, [8]byte{0xbe, 0x97, 0x42, 0x22, 0x20, 0x08, 0x0e, 0x43}}
	FOLDERID_Videos                 = &KNOWNFOLDERID{0x18989b1d, 0x99b5, 0x455b, [8]byte{0x84, 0x1c, 0xab, 0x7c, 0x74, 0xe4, 0xdd, 0xfc}}
	FOLDERID_Ringtones              = &KNOWNFOLDERID{0xc870044b, 0xf49e, 0x4126, [8]byte{0xa9, 0xc3, 0xb5, 0x2a, 0x1f, 0xf4, 0x11, 0xe8}}
	FOLDERID_PublicPictures         = &KNOWNFOLDERID{0xb6ebfb86, 0x6907, 0x413c, [8]byte{0x9a, 0xf7, 0x4f, 0xc2, 0xab, 0xf0, 0x7c, 0xc5}}
	FOLDERID_PublicMusic            = &KNOWNFOLDERID{0x3214fab5, 0x9757, 0x4298, [8]byte{0xbb, 0x61, 0x92, 0xa9, 0xde, 0xaa, 0x44, 0xff}}
	FOLDERID_PublicVideos           = &KNOWNFOLDERID{0x2400183a, 0x6185, 0x49fb, [8]byte{0xa2, 0xd8, 0x4a, 0x39, 0x2a, 0x60, 0x2b, 0xa3}}
	FOLDERID_PublicRingtones        = &KNOWNFOLDERID{0xe555ab60, 0x153b, 0x4d17, [8]byte{0x9f, 0x04, 0xa5, 0xfe, 0x99, 0xfc, 0x15, 0xec}}
	FOLDERID_ResourceDir            = &KNOWNFOLDERID{0x8ad10c31, 0x2adb, 0x4296, [8]byte{0xa8, 0xf7, 0xe4, 0x70, 0x12, 0x32, 0xc9, 0x72}}
	FOLDERID_LocalizedResourcesDir  = &KNOWNFOLDERID{0x2a00375e, 0x224c, 0x49de, [8]byte{0xb8, 0xd1, 0x44, 0x0d, 0xf7, 0xef, 0x3d, 0xdc}}
	FOLDERID_CommonOEMLinks         = &KNOWNFOLDERID{0xc1bae2d0, 0x10df, 0x4334, [8]byte{0xbe, 0xdd, 0x7a, 0xa2, 0x0b, 0x22, 0x7a, 0x9d}}
	FOLDERID_CDBurning              = &KNOWNFOLDERID{0x9e52ab10, 0xf80d, 0x49df, [8]byte{0xac, 0xb8, 0x43, 0x30, 0xf5, 0x68, 0x78, 0x55}}
	FOLDERID_UserProfiles           = &KNOWNFOLDERID{0x0762d272, 0xc50a, 0x4bb0, [8]byte{0xa3, 0x82, 0x69, 0x7d, 0xcd, 0x72, 0x9b, 0x80}}
	FOLDERID_Playlists              = &KNOWNFOLDERID{0xde92c1c7, 0x837f, 0x4f69, [8]byte{0xa3, 0xbb, 0x86, 0xe6, 0x31, 0x20, 0x4a, 0x23}}
	FOLDERID_SamplePlaylists        = &KNOWNFOLDERID{0x15ca69b3, 0x30ee, 0x49c1, [8]byte{0xac, 0xe1, 0x6b, 0x5e, 0xc3, 0x72, 0xaf, 0xb5}}
	FOLDERID_SampleMusic            = &KNOWNFOLDERID{0xb250c668, 0xf57d, 0x4ee1, [8]byte{0xa6, 0x3c, 0x29, 0x0e, 0xe7, 0xd1, 0xaa, 0x1f}}
	FOLDERID_SamplePictures         = &KNOWNFOLDERID{0xc4900540, 0x2379, 0x4c75, [8]byte{0x84, 0x4b, 0x64, 0xe6, 0xfa, 0xf8, 0x71, 0x6b}}
	FOLDERID_SampleVideos           = &KNOWNFOLDERID{0x859ead94, 0x2e85, 0x48ad, [8]byte{0xa7, 0x1a, 0x09, 0x69, 0xcb, 0x56, 0xa6, 0xcd}}
	FOLDERID_PhotoAlbums            = &KNOWNFOLDERID{0x69d2cf90, 0xfc33, 0x4fb7, [8]byte{0x9a, 0x0c, 0xeb, 0xb0, 0xf0, 0xfc, 0xb4, 0x3c}}
	FOLDERID_Public                 = &KNOWNFOLDERID{0xdfdf76a2, 0xc82a, 0x4d63, [8]byte{0x90, 0x6a, 0x56, 0x44, 0xac, 0x45, 0x73, 0x85}}
	FOLDERID_ChangeRemovePrograms   = &KNOWNFOLDERID{0xdf7266ac, 0x9274, 0x4867, [8]byte{0x8d, 0x55, 0x3b, 0xd6, 0x61, 0xde, 0x87, 0x2d}}
	FOLDERID_AppUpdates             = &KNOWNFOLDERID{0xa305ce99, 0xf527, 0x492b, [8]byte{0x8b, 0x1a, 0x7e, 0x76, 0xfa, 0x98, 0xd6, 0xe4}}
	FOLDERID_AddNewPrograms         = &KNOWNFOLDERID{0xde61d971, 0x5ebc, 0x4f02, [8]byte{0xa3, 0xa9, 0x6c, 0x82, 0x89, 0x5e, 0x5c, 0x04}}
	FOLDERID_Downloads              = &KNOWNFOLDERID{0x374de290, 0x123f, 0x4565, [8]byte{0x91, 0x64, 0x39, 0xc4, 0x92, 0x5e, 0x46, 0x7b}}
	FOLDERID_PublicDownloads        = &KNOWNFOLDERID{0x3d644c9b, 0x1fb8, 0x4f30, [8]byte{0x9b, 0x45, 0xf6, 0x70, 0x23, 0x5f, 0x79, 0xc0}}
	FOLDERID_SavedSearches          = &KNOWNFOLDERID{0x7d1d3a04, 0xdebb, 0x4115, [8]byte{0x95, 0xcf, 0x2f, 0x29, 0xda, 0x29, 0x20, 0xda}}
	FOLDERID_QuickLaunch            = &KNOWNFOLDERID{0x52a4f021, 0x7b75, 0x48a9, [8]byte{0x9f, 0x6b, 0x4b, 0x87, 0xa2, 0x10, 0xbc, 0x8f}}
	FOLDERID_Contacts               = &KNOWNFOLDERID{0x56784854, 0xc6cb, 0x462b, [8]byte{0x81, 0x69, 0x88, 0xe3, 0x50, 0xac, 0xb8, 0x82}}
	FOLDERID_SidebarParts           = &KNOWNFOLDERID{0xa75d362e, 0x50fc, 0x4fb7, [8]byte{0xac, 0x2c, 0xa8, 0xbe, 0xaa, 0x31, 0x44, 0x93}}
	FOLDERID_SidebarDefaultParts    = &KNOWNFOLDERID{0x7b396e54, 0x9ec5, 0x4300, [8]byte{0xbe, 0x0a, 0x24, 0x82, 0xeb, 0xae, 0x1a, 0x26}}
	FOLDERID_PublicGameTasks        = &KNOWNFOLDERID{0xdebf2536, 0xe1a8, 0x4c59, [8]byte{0xb6, 0xa2, 0x41, 0x45, 0x86, 0x47, 0x6a, 0xea}}
	FOLDERID_GameTasks              = &KNOWNFOLDERID{0x054fae61, 0x4dd8, 0x4787, [8]byte{0x80, 0xb6, 0x09, 0x02, 0x20, 0xc4, 0xb7, 0x00}}
	FOLDERID_SavedGames             = &KNOWNFOLDERID{0x4c5c32ff, 0xbb9d, 0x43b0, [8]byte{0xb5, 0xb4, 0x2d, 0x72, 0xe5, 0x4e, 0xaa, 0xa4}}
	FOLDERID_Games                  = &KNOWNFOLDERID{0xcac52c1a, 0xb53d, 0x4edc, [8]byte{0x92, 0xd7, 0x6b, 0x2e, 0x8a, 0xc1, 0x94, 0x34}}
	FOLDERID_SEARCH_MAPI            = &KNOWNFOLDERID{0x98ec0e18, 0x2098, 0x4d44, [8]byte{0x86, 0x44, 0x66, 0x97, 0x93, 0x15, 0xa2, 0x81}}
	FOLDERID_SEARCH_CSC             = &KNOWNFOLDERID{0xee32e446, 0x31ca, 0x4aba, [8]byte{0x81, 0x4f, 0xa5, 0xeb, 0xd2, 0xfd, 0x6d, 0x5e}}
	FOLDERID_Links                  = &KNOWNFOLDERID{0xbfb9d5e0, 0xc6a9, 0x404c, [8]byte{0xb2, 0xb2, 0xae, 0x6d, 0xb6, 0xaf, 0x49, 0x68}}
	FOLDERID_UsersFiles             = &KNOWNFOLDERID{0xf3ce0f7c, 0x4901, 0x4acc, [8]byte{0x86, 0x48, 0xd5, 0xd4, 0x4b, 0x04, 0xef, 0x8f}}
	FOLDERID_UsersLibraries         = &KNOWNFOLDERID{0xa302545d, 0xdeff, 0x464b, [8]byte{0xab, 0xe8, 0x61, 0xc8, 0x64, 0x8d, 0x93, 0x9b}}
	FOLDERID_SearchHome             = &KNOWNFOLDERID{0x190337d1, 0xb8ca, 0x4121, [8]byte{0xa6, 0x39, 0x6d, 0x47, 0x2d, 0x16, 0x97, 0x2a}}
	FOLDERID_OriginalImages         = &KNOWNFOLDERID{0x2c36c0aa, 0x5812, 0x4b87, [8]byte{0xbf, 0xd0, 0x4c, 0xd0, 0xdf, 0xb1, 0x9b, 0x39}}
	FOLDERID_DocumentsLibrary       = &KNOWNFOLDERID{0x7b0db17d, 0x9cd2, 0x4a93, [8]byte{0x97, 0x33, 0x46, 0xcc, 0x89, 0x02, 0x2e, 0x7c}}
	FOLDERID_MusicLibrary           = &KNOWNFOLDERID{0x2112ab0a, 0xc86a, 0x4ffe, [8]byte{0xa3, 0x68, 0x0d, 0xe9, 0x6e, 0x47, 0x01, 0x2e}}
	FOLDERID_PicturesLibrary        = &KNOWNFOLDERID{0xa990ae9f, 0xa03b, 0x4e80, [8]byte{0x94, 0xbc, 0x99, 0x12, 0xd7, 0x50, 0x41, 0x04}}
	FOLDERID_VideosLibrary          = &KNOWNFOLDERID{0x491e922f, 0x5643, 0x4af4, [8]byte{0xa7, 0xeb, 0x4e, 0x7a, 0x13, 0x8d, 0x81, 0x74}}
	FOLDERID_RecordedTVLibrary      = &KNOWNFOLDERID{0x1a6fdba2, 0xf42d, 0x4358, [8]byte{0xa7, 0x98, 0xb7, 0x4d, 0x74, 0x59, 0x26, 0xc5}}
	FOLDERID_HomeGroup              = &KNOWNFOLDERID{0x52528a6b, 0xb9e3, 0x4add, [8]byte{0xb6, 0x0d, 0x58, 0x8c, 0x2d, 0xba, 0x84, 0x2d}}
	FOLDERID_HomeGroupCurrentUser   = &KNOWNFOLDERID{0x9b74b6a3, 0x0dfd, 0x4f11, [8]byte{0x9e, 0x78, 0x5f, 0x78, 0x00, 0xf2, 0xe7, 0x72}}
	FOLDERID_DeviceMetadataStore    = &KNOWNFOLDERID{0x5ce4a5e9, 0xe4eb, 0x479d, [8]byte{0xb8, 0x9f, 0x13, 0x0c, 0x02, 0x88, 0x61, 0x55}}
	FOLDERID_Libraries              = &KNOWNFOLDERID{0x1b3ea5dc, 0xb587, 0x4786, [8]byte{0xb4, 0xef, 0xbd, 0x1d, 0xc3, 0x32, 0xae, 0xae}}
	FOLDERID_PublicLibraries        = &KNOWNFOLDERID{0x48daf80b, 0xe6cf, 0x4f4e, [8]byte{0xb8, 0x00, 0x0e, 0x69, 0xd8, 0x4e, 0xe3, 0x84}}
	FOLDERID_UserPinned             = &KNOWNFOLDERID{0x9e3995ab, 0x1f9c, 0x4f13, [8]byte{0xb8, 0x27, 0x48, 0xb2, 0x4b, 0x6c, 0x71, 0x74}}
	FOLDERID_ImplicitAppShortcuts   = &KNOWNFOLDERID{0xbcb5256f, 0x79f6, 0x4cee, [8]byte{0xb7, 0x25, 0xdc, 0x34, 0xe4, 0x02, 0xfd, 0x46}}
	FOLDERID_AccountPictures        = &KNOWNFOLDERID{0x008ca0b1, 0x55b4, 0x4c56, [8]byte{0xb8, 0xa8, 0x4d, 0xe4, 0xb2, 0x99, 0xd3, 0xbe}}
	FOLDERID_PublicUserTiles        = &KNOWNFOLDERID{0x0482af6c, 0x08f1, 0x4c34, [8]byte{0x8c, 0x90, 0xe1, 0x7e, 0xc9, 0x8b, 0x1e, 0x17}}
	FOLDERID_AppsFolder             = &KNOWNFOLDERID{0x1e87508d, 0x89c2, 0x42f0, [8]byte{0x8a, 0x7e, 0x64, 0x5a, 0x0f, 0x50, 0xca, 0x58}}
	FOLDERID_StartMenuAllPrograms   = &KNOWNFOLDERID{0xf26305ef, 0x6948, 0x40b9, [8]byte{0xb2, 0x55, 0x81, 0x45, 0x3d, 0x09, 0xc7, 0x85}}
	FOLDERID_CommonStartMenuPlaces  = &KNOWNFOLDERID{0xa440879f, 0x87a0, 0x4f7d, [8]byte{0xb7, 0x00, 0x02, 0x07, 0xb9, 0x66, 0x19, 0x4a}}
	FOLDERID_ApplicationShortcuts   = &KNOWNFOLDERID{0xa3918781, 0xe5f2, 0x4890, [8]byte{0xb3, 0xd9, 0xa7, 0xe5, 0x43, 0x32, 0x32, 0x8c}}
	FOLDERID_RoamingTiles           = &KNOWNFOLDERID{0x00bcfc5a, 0xed94, 0x4e48, [8]byte{0x96, 0xa1, 0x3f, 0x62, 0x17, 0xf2, 0x19, 0x90}}
	FOLDERID_RoamedTileImages       = &KNOWNFOLDERID{0xaaa8d5a5, 0xf1d6, 0x4259, [8]byte{0xba, 0xa8, 0x78, 0xe7, 0xef, 0x60, 0x83, 0x5e}}
	FOLDERID_Screenshots            = &KNOWNFOLDERID{0xb7bede81, 0xdf94, 0x4682, [8]byte{0xa7, 0xd8, 0x57, 0xa5, 0x26, 0x20, 0xb8, 0x6f}}
	FOLDERID_CameraRoll             = &KNOWNFOLDERID{0xab5fb87b, 0x7ce2, 0x4f83, [8]byte{0x91, 0x5d, 0x55, 0x08, 0x46, 0xc9, 0x53, 0x7b}}
	FOLDERID_SkyDrive               = &KNOWNFOLDERID{0xa52bba46, 0xe9e1, 0x435f, [8]byte{0xb3, 0xd9, 0x28, 0xda, 0xa6, 0x48, 0xc0, 0xf6}}
	FOLDERID_OneDrive               = &KNOWNFOLDERID{0xa52bba46, 0xe9e1, 0x435f, [8]byte{0xb3, 0xd9, 0x28, 0xda, 0xa6, 0x48, 0xc0, 0xf6}}
	FOLDERID_SkyDriveDocuments      = &KNOWNFOLDERID{0x24d89e24, 0x2f19, 0x4534, [8]byte{0x9d, 0xde, 0x6a, 0x66, 0x71, 0xfb, 0xb8, 0xfe}}
	FOLDERID_SkyDrivePictures       = &KNOWNFOLDERID{0x339719b5, 0x8c47, 0x4894, [8]byte{0x94, 0xc2, 0xd8, 0xf7, 0x7a, 0xdd, 0x44, 0xa6}}
	FOLDERID_SkyDriveMusic          = &KNOWNFOLDERID{0xc3f2459e, 0x80d6, 0x45dc, [8]byte{0xbf, 0xef, 0x1f, 0x76, 0x9f, 0x2b, 0xe7, 0x30}}
	FOLDERID_SkyDriveCameraRoll     = &KNOWNFOLDERID{0x767e6811, 0x49cb, 0x4273, [8]byte{0x87, 0xc2, 0x20, 0xf3, 0x55, 0xe1, 0x08, 0x5b}}
	FOLDERID_SearchHistory          = &KNOWNFOLDERID{0x0d4c3db6, 0x03a3, 0x462f, [8]byte{0xa0, 0xe6, 0x08, 0x92, 0x4c, 0x41, 0xb5, 0xd4}}
	FOLDERID_SearchTemplates        = &KNOWNFOLDERID{0x7e636bfe, 0xdfa9, 0x4d5e, [8]byte{0xb4, 0x56, 0xd7, 0xb3, 0x98, 0x51, 0xd8, 0xa9}}
	FOLDERID_CameraRollLibrary      = &KNOWNFOLDERID{0x2b20df75, 0x1eda, 0x4039, [8]byte{0x80, 0x97, 0x38, 0x79, 0x82, 0x27, 0xd5, 0xb7}}
	FOLDERID_SavedPictures          = &KNOWNFOLDERID{0x3b193882, 0xd3ad, 0x4eab, [8]byte{0x96, 0x5a, 0x69, 0x82, 0x9d, 0x1f, 0xb5, 0x9f}}
	FOLDERID_SavedPicturesLibrary   = &KNOWNFOLDERID{0xe25b5812, 0xbe88, 0x4bd9, [8]byte{0x94, 0xb0, 0x29, 0x23, 0x34, 0x77, 0xb6, 0xc3}}
	FOLDERID_RetailDemo             = &KNOWNFOLDERID{0x12d4c69e, 0x24ad, 0x4923, [8]byte{0xbe, 0x19, 0x31, 0x32, 0x1c, 0x43, 0xa7, 0x67}}
	FOLDERID_Device                 = &KNOWNFOLDERID{0x1c2ac1dc, 0x4358, 0x4b6c, [8]byte{0x97, 0x33, 0xaf, 0x21, 0x15, 0x65, 0x76, 0xf0}}
	FOLDERID_DevelopmentFiles       = &KNOWNFOLDERID{0xdbe8e08e, 0x3053, 0x4bbc, [8]byte{0xb1, 0x83, 0x2a, 0x7b, 0x2b, 0x19, 0x1e, 0x59}}
	FOLDERID_Objects3D              = &KNOWNFOLDERID{0x31c0dd25, 0x9439, 0x4f12, [8]byte{0xbf, 0x41, 0x7f, 0xf4, 0xed, 0xa3, 0x87, 0x22}}
	FOLDERID_AppCaptures            = &KNOWNFOLDERID{0xedc0fe71, 0x98d8, 0x4f4a, [8]byte{0xb9, 0x20, 0xc8, 0xdc, 0x13, 0x3c, 0xb1, 0x65}}
	FOLDERID_LocalDocuments         = &KNOWNFOLDERID{0xf42ee2d3, 0x909f, 0x4907, [8]byte{0x88, 0x71, 0x4c, 0x22, 0xfc, 0x0b, 0xf7, 0x56}}
	FOLDERID_LocalPictures          = &KNOWNFOLDERID{0x0ddd015d, 0xb06c, 0x45d5, [8]byte{0x8c, 0x4c, 0xf5, 0x97, 0x13, 0x85, 0x46, 0x39}}
	FOLDERID_LocalVideos            = &KNOWNFOLDERID{0x35286a68, 0x3c57, 0x41a1, [8]byte{0xbb, 0xb1, 0x0e, 0xae, 0x73, 0xd7, 0x6c, 0x95}}
	FOLDERID_LocalMusic             = &KNOWNFOLDERID{0xa0c69a99, 0x21c8, 0x4671, [8]byte{0x87, 0x03, 0x79, 0x34, 0x16, 0x2f, 0xcf, 0x1d}}
	FOLDERID_LocalDownloads         = &KNOWNFOLDERID{0x7d83ee9b, 0x2244, 0x4e70, [8]byte{0xb1, 0xf5, 0x53, 0x93, 0x04, 0x2a, 0xf1, 0xe4}}
	FOLDERID_RecordedCalls          = &KNOWNFOLDERID{0x2f8b40c2, 0x83ed, 0x48ee, [8]byte{0xb3, 0x83, 0xa1, 0xf1, 0x57, 0xec, 0x6f, 0x9a}}
	FOLDERID_AllAppMods             = &KNOWNFOLDERID{0x7ad67899, 0x66af, 0x43ba, [8]byte{0x91, 0x56, 0x6a, 0xad, 0x42, 0xe6, 0xc5, 0x96}}
	FOLDERID_CurrentAppMods         = &KNOWNFOLDERID{0x3db40b20, 0x2a30, 0x4dbe, [8]byte{0x91, 0x7e, 0x77, 0x1d, 0xd2, 0x1d, 0xd0, 0x99}}
	FOLDERID_AppDataDesktop         = &KNOWNFOLDERID{0xb2c5e279, 0x7add, 0x439f, [8]byte{0xb2, 0x8c, 0xc4, 0x1f, 0xe1, 0xbb, 0xf6, 0x72}}
	FOLDERID_AppDataDocuments       = &KNOWNFOLDERID{0x7be16610, 0x1f7f, 0x44ac, [8]byte{0xbf, 0xf0, 0x83, 0xe1, 0x5f, 0x2f, 0xfc, 0xa1}}
	FOLDERID_AppDataFavorites       = &KNOWNFOLDERID{0x7cfbefbc, 0xde1f, 0x45aa, [8]byte{0xb8, 0x43, 0xa5, 0x42, 0xac, 0x53, 0x6c, 0xc9}}
	FOLDERID_AppDataProgramData     = &KNOWNFOLDERID{0x559d40a3, 0xa036, 0x40fa, [8]byte{0xaf, 0x61, 0x84, 0xcb, 0x43, 0x0a, 0x4d, 0x34}}
)
   07070100000EF0000081A4000000000000000000000001645E367C0002F2E9000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/sys/windows/zsyscall_windows.go   // Code generated by 'go generate'; DO NOT EDIT.

package windows

import (
	"syscall"
	"unsafe"
)

var _ unsafe.Pointer

// Do the interface allocations only once for common
// Errno values.
const (
	errnoERROR_IO_PENDING = 997
)

var (
	errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING)
	errERROR_EINVAL     error = syscall.EINVAL
)

// errnoErr returns common boxed Errno values, to prevent
// allocations at runtime.
func errnoErr(e syscall.Errno) error {
	switch e {
	case 0:
		return errERROR_EINVAL
	case errnoERROR_IO_PENDING:
		return errERROR_IO_PENDING
	}
	// TODO: add more here, after collecting data on the common
	// error values see on Windows. (perhaps when running
	// all.bat?)
	return e
}

var (
	modCfgMgr32 = NewLazySystemDLL("CfgMgr32.dll")
	modadvapi32 = NewLazySystemDLL("advapi32.dll")
	modcrypt32  = NewLazySystemDLL("crypt32.dll")
	moddnsapi   = NewLazySystemDLL("dnsapi.dll")
	moddwmapi   = NewLazySystemDLL("dwmapi.dll")
	modiphlpapi = NewLazySystemDLL("iphlpapi.dll")
	modkernel32 = NewLazySystemDLL("kernel32.dll")
	modmswsock  = NewLazySystemDLL("mswsock.dll")
	modnetapi32 = NewLazySystemDLL("netapi32.dll")
	modntdll    = NewLazySystemDLL("ntdll.dll")
	modole32    = NewLazySystemDLL("ole32.dll")
	modpsapi    = NewLazySystemDLL("psapi.dll")
	modsechost  = NewLazySystemDLL("sechost.dll")
	modsecur32  = NewLazySystemDLL("secur32.dll")
	modsetupapi = NewLazySystemDLL("setupapi.dll")
	modshell32  = NewLazySystemDLL("shell32.dll")
	moduser32   = NewLazySystemDLL("user32.dll")
	moduserenv  = NewLazySystemDLL("userenv.dll")
	modversion  = NewLazySystemDLL("version.dll")
	modwintrust = NewLazySystemDLL("wintrust.dll")
	modws2_32   = NewLazySystemDLL("ws2_32.dll")
	modwtsapi32 = NewLazySystemDLL("wtsapi32.dll")

	procCM_Get_DevNode_Status                                = modCfgMgr32.NewProc("CM_Get_DevNode_Status")
	procCM_Get_Device_Interface_ListW                        = modCfgMgr32.NewProc("CM_Get_Device_Interface_ListW")
	procCM_Get_Device_Interface_List_SizeW                   = modCfgMgr32.NewProc("CM_Get_Device_Interface_List_SizeW")
	procCM_MapCrToWin32Err                                   = modCfgMgr32.NewProc("CM_MapCrToWin32Err")
	procAdjustTokenGroups                                    = modadvapi32.NewProc("AdjustTokenGroups")
	procAdjustTokenPrivileges                                = modadvapi32.NewProc("AdjustTokenPrivileges")
	procAllocateAndInitializeSid                             = modadvapi32.NewProc("AllocateAndInitializeSid")
	procBuildSecurityDescriptorW                             = modadvapi32.NewProc("BuildSecurityDescriptorW")
	procChangeServiceConfig2W                                = modadvapi32.NewProc("ChangeServiceConfig2W")
	procChangeServiceConfigW                                 = modadvapi32.NewProc("ChangeServiceConfigW")
	procCheckTokenMembership                                 = modadvapi32.NewProc("CheckTokenMembership")
	procCloseServiceHandle                                   = modadvapi32.NewProc("CloseServiceHandle")
	procControlService                                       = modadvapi32.NewProc("ControlService")
	procConvertSecurityDescriptorToStringSecurityDescriptorW = modadvapi32.NewProc("ConvertSecurityDescriptorToStringSecurityDescriptorW")
	procConvertSidToStringSidW                               = modadvapi32.NewProc("ConvertSidToStringSidW")
	procConvertStringSecurityDescriptorToSecurityDescriptorW = modadvapi32.NewProc("ConvertStringSecurityDescriptorToSecurityDescriptorW")
	procConvertStringSidToSidW                               = modadvapi32.NewProc("ConvertStringSidToSidW")
	procCopySid                                              = modadvapi32.NewProc("CopySid")
	procCreateProcessAsUserW                                 = modadvapi32.NewProc("CreateProcessAsUserW")
	procCreateServiceW                                       = modadvapi32.NewProc("CreateServiceW")
	procCreateWellKnownSid                                   = modadvapi32.NewProc("CreateWellKnownSid")
	procCryptAcquireContextW                                 = modadvapi32.NewProc("CryptAcquireContextW")
	procCryptGenRandom                                       = modadvapi32.NewProc("CryptGenRandom")
	procCryptReleaseContext                                  = modadvapi32.NewProc("CryptReleaseContext")
	procDeleteService                                        = modadvapi32.NewProc("DeleteService")
	procDeregisterEventSource                                = modadvapi32.NewProc("DeregisterEventSource")
	procDuplicateTokenEx                                     = modadvapi32.NewProc("DuplicateTokenEx")
	procEnumDependentServicesW                               = modadvapi32.NewProc("EnumDependentServicesW")
	procEnumServicesStatusExW                                = modadvapi32.NewProc("EnumServicesStatusExW")
	procEqualSid                                             = modadvapi32.NewProc("EqualSid")
	procFreeSid                                              = modadvapi32.NewProc("FreeSid")
	procGetLengthSid                                         = modadvapi32.NewProc("GetLengthSid")
	procGetNamedSecurityInfoW                                = modadvapi32.NewProc("GetNamedSecurityInfoW")
	procGetSecurityDescriptorControl                         = modadvapi32.NewProc("GetSecurityDescriptorControl")
	procGetSecurityDescriptorDacl                            = modadvapi32.NewProc("GetSecurityDescriptorDacl")
	procGetSecurityDescriptorGroup                           = modadvapi32.NewProc("GetSecurityDescriptorGroup")
	procGetSecurityDescriptorLength                          = modadvapi32.NewProc("GetSecurityDescriptorLength")
	procGetSecurityDescriptorOwner                           = modadvapi32.NewProc("GetSecurityDescriptorOwner")
	procGetSecurityDescriptorRMControl                       = modadvapi32.NewProc("GetSecurityDescriptorRMControl")
	procGetSecurityDescriptorSacl                            = modadvapi32.NewProc("GetSecurityDescriptorSacl")
	procGetSecurityInfo                                      = modadvapi32.NewProc("GetSecurityInfo")
	procGetSidIdentifierAuthority                            = modadvapi32.NewProc("GetSidIdentifierAuthority")
	procGetSidSubAuthority                                   = modadvapi32.NewProc("GetSidSubAuthority")
	procGetSidSubAuthorityCount                              = modadvapi32.NewProc("GetSidSubAuthorityCount")
	procGetTokenInformation                                  = modadvapi32.NewProc("GetTokenInformation")
	procImpersonateSelf                                      = modadvapi32.NewProc("ImpersonateSelf")
	procInitializeSecurityDescriptor                         = modadvapi32.NewProc("InitializeSecurityDescriptor")
	procInitiateSystemShutdownExW                            = modadvapi32.NewProc("InitiateSystemShutdownExW")
	procIsTokenRestricted                                    = modadvapi32.NewProc("IsTokenRestricted")
	procIsValidSecurityDescriptor                            = modadvapi32.NewProc("IsValidSecurityDescriptor")
	procIsValidSid                                           = modadvapi32.NewProc("IsValidSid")
	procIsWellKnownSid                                       = modadvapi32.NewProc("IsWellKnownSid")
	procLookupAccountNameW                                   = modadvapi32.NewProc("LookupAccountNameW")
	procLookupAccountSidW                                    = modadvapi32.NewProc("LookupAccountSidW")
	procLookupPrivilegeValueW                                = modadvapi32.NewProc("LookupPrivilegeValueW")
	procMakeAbsoluteSD                                       = modadvapi32.NewProc("MakeAbsoluteSD")
	procMakeSelfRelativeSD                                   = modadvapi32.NewProc("MakeSelfRelativeSD")
	procNotifyServiceStatusChangeW                           = modadvapi32.NewProc("NotifyServiceStatusChangeW")
	procOpenProcessToken                                     = modadvapi32.NewProc("OpenProcessToken")
	procOpenSCManagerW                                       = modadvapi32.NewProc("OpenSCManagerW")
	procOpenServiceW                                         = modadvapi32.NewProc("OpenServiceW")
	procOpenThreadToken                                      = modadvapi32.NewProc("OpenThreadToken")
	procQueryServiceConfig2W                                 = modadvapi32.NewProc("QueryServiceConfig2W")
	procQueryServiceConfigW                                  = modadvapi32.NewProc("QueryServiceConfigW")
	procQueryServiceDynamicInformation                       = modadvapi32.NewProc("QueryServiceDynamicInformation")
	procQueryServiceLockStatusW                              = modadvapi32.NewProc("QueryServiceLockStatusW")
	procQueryServiceStatus                                   = modadvapi32.NewProc("QueryServiceStatus")
	procQueryServiceStatusEx                                 = modadvapi32.NewProc("QueryServiceStatusEx")
	procRegCloseKey                                          = modadvapi32.NewProc("RegCloseKey")
	procRegEnumKeyExW                                        = modadvapi32.NewProc("RegEnumKeyExW")
	procRegNotifyChangeKeyValue                              = modadvapi32.NewProc("RegNotifyChangeKeyValue")
	procRegOpenKeyExW                                        = modadvapi32.NewProc("RegOpenKeyExW")
	procRegQueryInfoKeyW                                     = modadvapi32.NewProc("RegQueryInfoKeyW")
	procRegQueryValueExW                                     = modadvapi32.NewProc("RegQueryValueExW")
	procRegisterEventSourceW                                 = modadvapi32.NewProc("RegisterEventSourceW")
	procRegisterServiceCtrlHandlerExW                        = modadvapi32.NewProc("RegisterServiceCtrlHandlerExW")
	procReportEventW                                         = modadvapi32.NewProc("ReportEventW")
	procRevertToSelf                                         = modadvapi32.NewProc("RevertToSelf")
	procSetEntriesInAclW                                     = modadvapi32.NewProc("SetEntriesInAclW")
	procSetKernelObjectSecurity                              = modadvapi32.NewProc("SetKernelObjectSecurity")
	procSetNamedSecurityInfoW                                = modadvapi32.NewProc("SetNamedSecurityInfoW")
	procSetSecurityDescriptorControl                         = modadvapi32.NewProc("SetSecurityDescriptorControl")
	procSetSecurityDescriptorDacl                            = modadvapi32.NewProc("SetSecurityDescriptorDacl")
	procSetSecurityDescriptorGroup                           = modadvapi32.NewProc("SetSecurityDescriptorGroup")
	procSetSecurityDescriptorOwner                           = modadvapi32.NewProc("SetSecurityDescriptorOwner")
	procSetSecurityDescriptorRMControl                       = modadvapi32.NewProc("SetSecurityDescriptorRMControl")
	procSetSecurityDescriptorSacl                            = modadvapi32.NewProc("SetSecurityDescriptorSacl")
	procSetSecurityInfo                                      = modadvapi32.NewProc("SetSecurityInfo")
	procSetServiceStatus                                     = modadvapi32.NewProc("SetServiceStatus")
	procSetThreadToken                                       = modadvapi32.NewProc("SetThreadToken")
	procSetTokenInformation                                  = modadvapi32.NewProc("SetTokenInformation")
	procStartServiceCtrlDispatcherW                          = modadvapi32.NewProc("StartServiceCtrlDispatcherW")
	procStartServiceW                                        = modadvapi32.NewProc("StartServiceW")
	procCertAddCertificateContextToStore                     = modcrypt32.NewProc("CertAddCertificateContextToStore")
	procCertCloseStore                                       = modcrypt32.NewProc("CertCloseStore")
	procCertCreateCertificateContext                         = modcrypt32.NewProc("CertCreateCertificateContext")
	procCertDeleteCertificateFromStore                       = modcrypt32.NewProc("CertDeleteCertificateFromStore")
	procCertDuplicateCertificateContext                      = modcrypt32.NewProc("CertDuplicateCertificateContext")
	procCertEnumCertificatesInStore                          = modcrypt32.NewProc("CertEnumCertificatesInStore")
	procCertFindCertificateInStore                           = modcrypt32.NewProc("CertFindCertificateInStore")
	procCertFindChainInStore                                 = modcrypt32.NewProc("CertFindChainInStore")
	procCertFindExtension                                    = modcrypt32.NewProc("CertFindExtension")
	procCertFreeCertificateChain                             = modcrypt32.NewProc("CertFreeCertificateChain")
	procCertFreeCertificateContext                           = modcrypt32.NewProc("CertFreeCertificateContext")
	procCertGetCertificateChain                              = modcrypt32.NewProc("CertGetCertificateChain")
	procCertGetNameStringW                                   = modcrypt32.NewProc("CertGetNameStringW")
	procCertOpenStore                                        = modcrypt32.NewProc("CertOpenStore")
	procCertOpenSystemStoreW                                 = modcrypt32.NewProc("CertOpenSystemStoreW")
	procCertVerifyCertificateChainPolicy                     = modcrypt32.NewProc("CertVerifyCertificateChainPolicy")
	procCryptAcquireCertificatePrivateKey                    = modcrypt32.NewProc("CryptAcquireCertificatePrivateKey")
	procCryptDecodeObject                                    = modcrypt32.NewProc("CryptDecodeObject")
	procCryptProtectData                                     = modcrypt32.NewProc("CryptProtectData")
	procCryptQueryObject                                     = modcrypt32.NewProc("CryptQueryObject")
	procCryptUnprotectData                                   = modcrypt32.NewProc("CryptUnprotectData")
	procPFXImportCertStore                                   = modcrypt32.NewProc("PFXImportCertStore")
	procDnsNameCompare_W                                     = moddnsapi.NewProc("DnsNameCompare_W")
	procDnsQuery_W                                           = moddnsapi.NewProc("DnsQuery_W")
	procDnsRecordListFree                                    = moddnsapi.NewProc("DnsRecordListFree")
	procDwmGetWindowAttribute                                = moddwmapi.NewProc("DwmGetWindowAttribute")
	procDwmSetWindowAttribute                                = moddwmapi.NewProc("DwmSetWindowAttribute")
	procGetAdaptersAddresses                                 = modiphlpapi.NewProc("GetAdaptersAddresses")
	procGetAdaptersInfo                                      = modiphlpapi.NewProc("GetAdaptersInfo")
	procGetBestInterfaceEx                                   = modiphlpapi.NewProc("GetBestInterfaceEx")
	procGetIfEntry                                           = modiphlpapi.NewProc("GetIfEntry")
	procAssignProcessToJobObject                             = modkernel32.NewProc("AssignProcessToJobObject")
	procCancelIo                                             = modkernel32.NewProc("CancelIo")
	procCancelIoEx                                           = modkernel32.NewProc("CancelIoEx")
	procCloseHandle                                          = modkernel32.NewProc("CloseHandle")
	procConnectNamedPipe                                     = modkernel32.NewProc("ConnectNamedPipe")
	procCreateDirectoryW                                     = modkernel32.NewProc("CreateDirectoryW")
	procCreateEventExW                                       = modkernel32.NewProc("CreateEventExW")
	procCreateEventW                                         = modkernel32.NewProc("CreateEventW")
	procCreateFileMappingW                                   = modkernel32.NewProc("CreateFileMappingW")
	procCreateFileW                                          = modkernel32.NewProc("CreateFileW")
	procCreateHardLinkW                                      = modkernel32.NewProc("CreateHardLinkW")
	procCreateIoCompletionPort                               = modkernel32.NewProc("CreateIoCompletionPort")
	procCreateJobObjectW                                     = modkernel32.NewProc("CreateJobObjectW")
	procCreateMutexExW                                       = modkernel32.NewProc("CreateMutexExW")
	procCreateMutexW                                         = modkernel32.NewProc("CreateMutexW")
	procCreateNamedPipeW                                     = modkernel32.NewProc("CreateNamedPipeW")
	procCreatePipe                                           = modkernel32.NewProc("CreatePipe")
	procCreateProcessW                                       = modkernel32.NewProc("CreateProcessW")
	procCreateSymbolicLinkW                                  = modkernel32.NewProc("CreateSymbolicLinkW")
	procCreateToolhelp32Snapshot                             = modkernel32.NewProc("CreateToolhelp32Snapshot")
	procDefineDosDeviceW                                     = modkernel32.NewProc("DefineDosDeviceW")
	procDeleteFileW                                          = modkernel32.NewProc("DeleteFileW")
	procDeleteProcThreadAttributeList                        = modkernel32.NewProc("DeleteProcThreadAttributeList")
	procDeleteVolumeMountPointW                              = modkernel32.NewProc("DeleteVolumeMountPointW")
	procDeviceIoControl                                      = modkernel32.NewProc("DeviceIoControl")
	procDuplicateHandle                                      = modkernel32.NewProc("DuplicateHandle")
	procExitProcess                                          = modkernel32.NewProc("ExitProcess")
	procExpandEnvironmentStringsW                            = modkernel32.NewProc("ExpandEnvironmentStringsW")
	procFindClose                                            = modkernel32.NewProc("FindClose")
	procFindCloseChangeNotification                          = modkernel32.NewProc("FindCloseChangeNotification")
	procFindFirstChangeNotificationW                         = modkernel32.NewProc("FindFirstChangeNotificationW")
	procFindFirstFileW                                       = modkernel32.NewProc("FindFirstFileW")
	procFindFirstVolumeMountPointW                           = modkernel32.NewProc("FindFirstVolumeMountPointW")
	procFindFirstVolumeW                                     = modkernel32.NewProc("FindFirstVolumeW")
	procFindNextChangeNotification                           = modkernel32.NewProc("FindNextChangeNotification")
	procFindNextFileW                                        = modkernel32.NewProc("FindNextFileW")
	procFindNextVolumeMountPointW                            = modkernel32.NewProc("FindNextVolumeMountPointW")
	procFindNextVolumeW                                      = modkernel32.NewProc("FindNextVolumeW")
	procFindResourceW                                        = modkernel32.NewProc("FindResourceW")
	procFindVolumeClose                                      = modkernel32.NewProc("FindVolumeClose")
	procFindVolumeMountPointClose                            = modkernel32.NewProc("FindVolumeMountPointClose")
	procFlushFileBuffers                                     = modkernel32.NewProc("FlushFileBuffers")
	procFlushViewOfFile                                      = modkernel32.NewProc("FlushViewOfFile")
	procFormatMessageW                                       = modkernel32.NewProc("FormatMessageW")
	procFreeEnvironmentStringsW                              = modkernel32.NewProc("FreeEnvironmentStringsW")
	procFreeLibrary                                          = modkernel32.NewProc("FreeLibrary")
	procGenerateConsoleCtrlEvent                             = modkernel32.NewProc("GenerateConsoleCtrlEvent")
	procGetACP                                               = modkernel32.NewProc("GetACP")
	procGetActiveProcessorCount                              = modkernel32.NewProc("GetActiveProcessorCount")
	procGetCommTimeouts                                      = modkernel32.NewProc("GetCommTimeouts")
	procGetCommandLineW                                      = modkernel32.NewProc("GetCommandLineW")
	procGetComputerNameExW                                   = modkernel32.NewProc("GetComputerNameExW")
	procGetComputerNameW                                     = modkernel32.NewProc("GetComputerNameW")
	procGetConsoleMode                                       = modkernel32.NewProc("GetConsoleMode")
	procGetConsoleScreenBufferInfo                           = modkernel32.NewProc("GetConsoleScreenBufferInfo")
	procGetCurrentDirectoryW                                 = modkernel32.NewProc("GetCurrentDirectoryW")
	procGetCurrentProcessId                                  = modkernel32.NewProc("GetCurrentProcessId")
	procGetCurrentThreadId                                   = modkernel32.NewProc("GetCurrentThreadId")
	procGetDiskFreeSpaceExW                                  = modkernel32.NewProc("GetDiskFreeSpaceExW")
	procGetDriveTypeW                                        = modkernel32.NewProc("GetDriveTypeW")
	procGetEnvironmentStringsW                               = modkernel32.NewProc("GetEnvironmentStringsW")
	procGetEnvironmentVariableW                              = modkernel32.NewProc("GetEnvironmentVariableW")
	procGetExitCodeProcess                                   = modkernel32.NewProc("GetExitCodeProcess")
	procGetFileAttributesExW                                 = modkernel32.NewProc("GetFileAttributesExW")
	procGetFileAttributesW                                   = modkernel32.NewProc("GetFileAttributesW")
	procGetFileInformationByHandle                           = modkernel32.NewProc("GetFileInformationByHandle")
	procGetFileInformationByHandleEx                         = modkernel32.NewProc("GetFileInformationByHandleEx")
	procGetFileType                                          = modkernel32.NewProc("GetFileType")
	procGetFinalPathNameByHandleW                            = modkernel32.NewProc("GetFinalPathNameByHandleW")
	procGetFullPathNameW                                     = modkernel32.NewProc("GetFullPathNameW")
	procGetLargePageMinimum                                  = modkernel32.NewProc("GetLargePageMinimum")
	procGetLastError                                         = modkernel32.NewProc("GetLastError")
	procGetLogicalDriveStringsW                              = modkernel32.NewProc("GetLogicalDriveStringsW")
	procGetLogicalDrives                                     = modkernel32.NewProc("GetLogicalDrives")
	procGetLongPathNameW                                     = modkernel32.NewProc("GetLongPathNameW")
	procGetMaximumProcessorCount                             = modkernel32.NewProc("GetMaximumProcessorCount")
	procGetModuleFileNameW                                   = modkernel32.NewProc("GetModuleFileNameW")
	procGetModuleHandleExW                                   = modkernel32.NewProc("GetModuleHandleExW")
	procGetNamedPipeHandleStateW                             = modkernel32.NewProc("GetNamedPipeHandleStateW")
	procGetNamedPipeInfo                                     = modkernel32.NewProc("GetNamedPipeInfo")
	procGetOverlappedResult                                  = modkernel32.NewProc("GetOverlappedResult")
	procGetPriorityClass                                     = modkernel32.NewProc("GetPriorityClass")
	procGetProcAddress                                       = modkernel32.NewProc("GetProcAddress")
	procGetProcessId                                         = modkernel32.NewProc("GetProcessId")
	procGetProcessPreferredUILanguages                       = modkernel32.NewProc("GetProcessPreferredUILanguages")
	procGetProcessShutdownParameters                         = modkernel32.NewProc("GetProcessShutdownParameters")
	procGetProcessTimes                                      = modkernel32.NewProc("GetProcessTimes")
	procGetProcessWorkingSetSizeEx                           = modkernel32.NewProc("GetProcessWorkingSetSizeEx")
	procGetQueuedCompletionStatus                            = modkernel32.NewProc("GetQueuedCompletionStatus")
	procGetShortPathNameW                                    = modkernel32.NewProc("GetShortPathNameW")
	procGetStartupInfoW                                      = modkernel32.NewProc("GetStartupInfoW")
	procGetStdHandle                                         = modkernel32.NewProc("GetStdHandle")
	procGetSystemDirectoryW                                  = modkernel32.NewProc("GetSystemDirectoryW")
	procGetSystemPreferredUILanguages                        = modkernel32.NewProc("GetSystemPreferredUILanguages")
	procGetSystemTimeAsFileTime                              = modkernel32.NewProc("GetSystemTimeAsFileTime")
	procGetSystemTimePreciseAsFileTime                       = modkernel32.NewProc("GetSystemTimePreciseAsFileTime")
	procGetSystemWindowsDirectoryW                           = modkernel32.NewProc("GetSystemWindowsDirectoryW")
	procGetTempPathW                                         = modkernel32.NewProc("GetTempPathW")
	procGetThreadPreferredUILanguages                        = modkernel32.NewProc("GetThreadPreferredUILanguages")
	procGetTickCount64                                       = modkernel32.NewProc("GetTickCount64")
	procGetTimeZoneInformation                               = modkernel32.NewProc("GetTimeZoneInformation")
	procGetUserPreferredUILanguages                          = modkernel32.NewProc("GetUserPreferredUILanguages")
	procGetVersion                                           = modkernel32.NewProc("GetVersion")
	procGetVolumeInformationByHandleW                        = modkernel32.NewProc("GetVolumeInformationByHandleW")
	procGetVolumeInformationW                                = modkernel32.NewProc("GetVolumeInformationW")
	procGetVolumeNameForVolumeMountPointW                    = modkernel32.NewProc("GetVolumeNameForVolumeMountPointW")
	procGetVolumePathNameW                                   = modkernel32.NewProc("GetVolumePathNameW")
	procGetVolumePathNamesForVolumeNameW                     = modkernel32.NewProc("GetVolumePathNamesForVolumeNameW")
	procGetWindowsDirectoryW                                 = modkernel32.NewProc("GetWindowsDirectoryW")
	procInitializeProcThreadAttributeList                    = modkernel32.NewProc("InitializeProcThreadAttributeList")
	procIsWow64Process                                       = modkernel32.NewProc("IsWow64Process")
	procIsWow64Process2                                      = modkernel32.NewProc("IsWow64Process2")
	procLoadLibraryExW                                       = modkernel32.NewProc("LoadLibraryExW")
	procLoadLibraryW                                         = modkernel32.NewProc("LoadLibraryW")
	procLoadResource                                         = modkernel32.NewProc("LoadResource")
	procLocalAlloc                                           = modkernel32.NewProc("LocalAlloc")
	procLocalFree                                            = modkernel32.NewProc("LocalFree")
	procLockFileEx                                           = modkernel32.NewProc("LockFileEx")
	procLockResource                                         = modkernel32.NewProc("LockResource")
	procMapViewOfFile                                        = modkernel32.NewProc("MapViewOfFile")
	procModule32FirstW                                       = modkernel32.NewProc("Module32FirstW")
	procModule32NextW                                        = modkernel32.NewProc("Module32NextW")
	procMoveFileExW                                          = modkernel32.NewProc("MoveFileExW")
	procMoveFileW                                            = modkernel32.NewProc("MoveFileW")
	procMultiByteToWideChar                                  = modkernel32.NewProc("MultiByteToWideChar")
	procOpenEventW                                           = modkernel32.NewProc("OpenEventW")
	procOpenMutexW                                           = modkernel32.NewProc("OpenMutexW")
	procOpenProcess                                          = modkernel32.NewProc("OpenProcess")
	procOpenThread                                           = modkernel32.NewProc("OpenThread")
	procPostQueuedCompletionStatus                           = modkernel32.NewProc("PostQueuedCompletionStatus")
	procProcess32FirstW                                      = modkernel32.NewProc("Process32FirstW")
	procProcess32NextW                                       = modkernel32.NewProc("Process32NextW")
	procProcessIdToSessionId                                 = modkernel32.NewProc("ProcessIdToSessionId")
	procPulseEvent                                           = modkernel32.NewProc("PulseEvent")
	procQueryDosDeviceW                                      = modkernel32.NewProc("QueryDosDeviceW")
	procQueryFullProcessImageNameW                           = modkernel32.NewProc("QueryFullProcessImageNameW")
	procQueryInformationJobObject                            = modkernel32.NewProc("QueryInformationJobObject")
	procReadConsoleW                                         = modkernel32.NewProc("ReadConsoleW")
	procReadDirectoryChangesW                                = modkernel32.NewProc("ReadDirectoryChangesW")
	procReadFile                                             = modkernel32.NewProc("ReadFile")
	procReadProcessMemory                                    = modkernel32.NewProc("ReadProcessMemory")
	procReleaseMutex                                         = modkernel32.NewProc("ReleaseMutex")
	procRemoveDirectoryW                                     = modkernel32.NewProc("RemoveDirectoryW")
	procResetEvent                                           = modkernel32.NewProc("ResetEvent")
	procResumeThread                                         = modkernel32.NewProc("ResumeThread")
	procSetCommTimeouts                                      = modkernel32.NewProc("SetCommTimeouts")
	procSetConsoleCursorPosition                             = modkernel32.NewProc("SetConsoleCursorPosition")
	procSetConsoleMode                                       = modkernel32.NewProc("SetConsoleMode")
	procSetCurrentDirectoryW                                 = modkernel32.NewProc("SetCurrentDirectoryW")
	procSetDefaultDllDirectories                             = modkernel32.NewProc("SetDefaultDllDirectories")
	procSetDllDirectoryW                                     = modkernel32.NewProc("SetDllDirectoryW")
	procSetEndOfFile                                         = modkernel32.NewProc("SetEndOfFile")
	procSetEnvironmentVariableW                              = modkernel32.NewProc("SetEnvironmentVariableW")
	procSetErrorMode                                         = modkernel32.NewProc("SetErrorMode")
	procSetEvent                                             = modkernel32.NewProc("SetEvent")
	procSetFileAttributesW                                   = modkernel32.NewProc("SetFileAttributesW")
	procSetFileCompletionNotificationModes                   = modkernel32.NewProc("SetFileCompletionNotificationModes")
	procSetFileInformationByHandle                           = modkernel32.NewProc("SetFileInformationByHandle")
	procSetFilePointer                                       = modkernel32.NewProc("SetFilePointer")
	procSetFileTime                                          = modkernel32.NewProc("SetFileTime")
	procSetHandleInformation                                 = modkernel32.NewProc("SetHandleInformation")
	procSetInformationJobObject                              = modkernel32.NewProc("SetInformationJobObject")
	procSetNamedPipeHandleState                              = modkernel32.NewProc("SetNamedPipeHandleState")
	procSetPriorityClass                                     = modkernel32.NewProc("SetPriorityClass")
	procSetProcessPriorityBoost                              = modkernel32.NewProc("SetProcessPriorityBoost")
	procSetProcessShutdownParameters                         = modkernel32.NewProc("SetProcessShutdownParameters")
	procSetProcessWorkingSetSizeEx                           = modkernel32.NewProc("SetProcessWorkingSetSizeEx")
	procSetStdHandle                                         = modkernel32.NewProc("SetStdHandle")
	procSetVolumeLabelW                                      = modkernel32.NewProc("SetVolumeLabelW")
	procSetVolumeMountPointW                                 = modkernel32.NewProc("SetVolumeMountPointW")
	procSizeofResource                                       = modkernel32.NewProc("SizeofResource")
	procSleepEx                                              = modkernel32.NewProc("SleepEx")
	procTerminateJobObject                                   = modkernel32.NewProc("TerminateJobObject")
	procTerminateProcess                                     = modkernel32.NewProc("TerminateProcess")
	procThread32First                                        = modkernel32.NewProc("Thread32First")
	procThread32Next                                         = modkernel32.NewProc("Thread32Next")
	procUnlockFileEx                                         = modkernel32.NewProc("UnlockFileEx")
	procUnmapViewOfFile                                      = modkernel32.NewProc("UnmapViewOfFile")
	procUpdateProcThreadAttribute                            = modkernel32.NewProc("UpdateProcThreadAttribute")
	procVirtualAlloc                                         = modkernel32.NewProc("VirtualAlloc")
	procVirtualFree                                          = modkernel32.NewProc("VirtualFree")
	procVirtualLock                                          = modkernel32.NewProc("VirtualLock")
	procVirtualProtect                                       = modkernel32.NewProc("VirtualProtect")
	procVirtualProtectEx                                     = modkernel32.NewProc("VirtualProtectEx")
	procVirtualQuery                                         = modkernel32.NewProc("VirtualQuery")
	procVirtualQueryEx                                       = modkernel32.NewProc("VirtualQueryEx")
	procVirtualUnlock                                        = modkernel32.NewProc("VirtualUnlock")
	procWTSGetActiveConsoleSessionId                         = modkernel32.NewProc("WTSGetActiveConsoleSessionId")
	procWaitForMultipleObjects                               = modkernel32.NewProc("WaitForMultipleObjects")
	procWaitForSingleObject                                  = modkernel32.NewProc("WaitForSingleObject")
	procWriteConsoleW                                        = modkernel32.NewProc("WriteConsoleW")
	procWriteFile                                            = modkernel32.NewProc("WriteFile")
	procWriteProcessMemory                                   = modkernel32.NewProc("WriteProcessMemory")
	procAcceptEx                                             = modmswsock.NewProc("AcceptEx")
	procGetAcceptExSockaddrs                                 = modmswsock.NewProc("GetAcceptExSockaddrs")
	procTransmitFile                                         = modmswsock.NewProc("TransmitFile")
	procNetApiBufferFree                                     = modnetapi32.NewProc("NetApiBufferFree")
	procNetGetJoinInformation                                = modnetapi32.NewProc("NetGetJoinInformation")
	procNetUserGetInfo                                       = modnetapi32.NewProc("NetUserGetInfo")
	procNtCreateFile                                         = modntdll.NewProc("NtCreateFile")
	procNtCreateNamedPipeFile                                = modntdll.NewProc("NtCreateNamedPipeFile")
	procNtQueryInformationProcess                            = modntdll.NewProc("NtQueryInformationProcess")
	procNtQuerySystemInformation                             = modntdll.NewProc("NtQuerySystemInformation")
	procNtSetInformationFile                                 = modntdll.NewProc("NtSetInformationFile")
	procNtSetInformationProcess                              = modntdll.NewProc("NtSetInformationProcess")
	procNtSetSystemInformation                               = modntdll.NewProc("NtSetSystemInformation")
	procRtlAddFunctionTable                                  = modntdll.NewProc("RtlAddFunctionTable")
	procRtlDefaultNpAcl                                      = modntdll.NewProc("RtlDefaultNpAcl")
	procRtlDeleteFunctionTable                               = modntdll.NewProc("RtlDeleteFunctionTable")
	procRtlDosPathNameToNtPathName_U_WithStatus              = modntdll.NewProc("RtlDosPathNameToNtPathName_U_WithStatus")
	procRtlDosPathNameToRelativeNtPathName_U_WithStatus      = modntdll.NewProc("RtlDosPathNameToRelativeNtPathName_U_WithStatus")
	procRtlGetCurrentPeb                                     = modntdll.NewProc("RtlGetCurrentPeb")
	procRtlGetNtVersionNumbers                               = modntdll.NewProc("RtlGetNtVersionNumbers")
	procRtlGetVersion                                        = modntdll.NewProc("RtlGetVersion")
	procRtlInitString                                        = modntdll.NewProc("RtlInitString")
	procRtlInitUnicodeString                                 = modntdll.NewProc("RtlInitUnicodeString")
	procRtlNtStatusToDosErrorNoTeb                           = modntdll.NewProc("RtlNtStatusToDosErrorNoTeb")
	procCLSIDFromString                                      = modole32.NewProc("CLSIDFromString")
	procCoCreateGuid                                         = modole32.NewProc("CoCreateGuid")
	procCoGetObject                                          = modole32.NewProc("CoGetObject")
	procCoInitializeEx                                       = modole32.NewProc("CoInitializeEx")
	procCoTaskMemFree                                        = modole32.NewProc("CoTaskMemFree")
	procCoUninitialize                                       = modole32.NewProc("CoUninitialize")
	procStringFromGUID2                                      = modole32.NewProc("StringFromGUID2")
	procEnumProcessModules                                   = modpsapi.NewProc("EnumProcessModules")
	procEnumProcessModulesEx                                 = modpsapi.NewProc("EnumProcessModulesEx")
	procEnumProcesses                                        = modpsapi.NewProc("EnumProcesses")
	procGetModuleBaseNameW                                   = modpsapi.NewProc("GetModuleBaseNameW")
	procGetModuleFileNameExW                                 = modpsapi.NewProc("GetModuleFileNameExW")
	procGetModuleInformation                                 = modpsapi.NewProc("GetModuleInformation")
	procQueryWorkingSetEx                                    = modpsapi.NewProc("QueryWorkingSetEx")
	procSubscribeServiceChangeNotifications                  = modsechost.NewProc("SubscribeServiceChangeNotifications")
	procUnsubscribeServiceChangeNotifications                = modsechost.NewProc("UnsubscribeServiceChangeNotifications")
	procGetUserNameExW                                       = modsecur32.NewProc("GetUserNameExW")
	procTranslateNameW                                       = modsecur32.NewProc("TranslateNameW")
	procSetupDiBuildDriverInfoList                           = modsetupapi.NewProc("SetupDiBuildDriverInfoList")
	procSetupDiCallClassInstaller                            = modsetupapi.NewProc("SetupDiCallClassInstaller")
	procSetupDiCancelDriverInfoSearch                        = modsetupapi.NewProc("SetupDiCancelDriverInfoSearch")
	procSetupDiClassGuidsFromNameExW                         = modsetupapi.NewProc("SetupDiClassGuidsFromNameExW")
	procSetupDiClassNameFromGuidExW                          = modsetupapi.NewProc("SetupDiClassNameFromGuidExW")
	procSetupDiCreateDeviceInfoListExW                       = modsetupapi.NewProc("SetupDiCreateDeviceInfoListExW")
	procSetupDiCreateDeviceInfoW                             = modsetupapi.NewProc("SetupDiCreateDeviceInfoW")
	procSetupDiDestroyDeviceInfoList                         = modsetupapi.NewProc("SetupDiDestroyDeviceInfoList")
	procSetupDiDestroyDriverInfoList                         = modsetupapi.NewProc("SetupDiDestroyDriverInfoList")
	procSetupDiEnumDeviceInfo                                = modsetupapi.NewProc("SetupDiEnumDeviceInfo")
	procSetupDiEnumDriverInfoW                               = modsetupapi.NewProc("SetupDiEnumDriverInfoW")
	procSetupDiGetClassDevsExW                               = modsetupapi.NewProc("SetupDiGetClassDevsExW")
	procSetupDiGetClassInstallParamsW                        = modsetupapi.NewProc("SetupDiGetClassInstallParamsW")
	procSetupDiGetDeviceInfoListDetailW                      = modsetupapi.NewProc("SetupDiGetDeviceInfoListDetailW")
	procSetupDiGetDeviceInstallParamsW                       = modsetupapi.NewProc("SetupDiGetDeviceInstallParamsW")
	procSetupDiGetDeviceInstanceIdW                          = modsetupapi.NewProc("SetupDiGetDeviceInstanceIdW")
	procSetupDiGetDevicePropertyW                            = modsetupapi.NewProc("SetupDiGetDevicePropertyW")
	procSetupDiGetDeviceRegistryPropertyW                    = modsetupapi.NewProc("SetupDiGetDeviceRegistryPropertyW")
	procSetupDiGetDriverInfoDetailW                          = modsetupapi.NewProc("SetupDiGetDriverInfoDetailW")
	procSetupDiGetSelectedDevice                             = modsetupapi.NewProc("SetupDiGetSelectedDevice")
	procSetupDiGetSelectedDriverW                            = modsetupapi.NewProc("SetupDiGetSelectedDriverW")
	procSetupDiOpenDevRegKey                                 = modsetupapi.NewProc("SetupDiOpenDevRegKey")
	procSetupDiSetClassInstallParamsW                        = modsetupapi.NewProc("SetupDiSetClassInstallParamsW")
	procSetupDiSetDeviceInstallParamsW                       = modsetupapi.NewProc("SetupDiSetDeviceInstallParamsW")
	procSetupDiSetDeviceRegistryPropertyW                    = modsetupapi.NewProc("SetupDiSetDeviceRegistryPropertyW")
	procSetupDiSetSelectedDevice                             = modsetupapi.NewProc("SetupDiSetSelectedDevice")
	procSetupDiSetSelectedDriverW                            = modsetupapi.NewProc("SetupDiSetSelectedDriverW")
	procSetupUninstallOEMInfW                                = modsetupapi.NewProc("SetupUninstallOEMInfW")
	procCommandLineToArgvW                                   = modshell32.NewProc("CommandLineToArgvW")
	procSHGetKnownFolderPath                                 = modshell32.NewProc("SHGetKnownFolderPath")
	procShellExecuteW                                        = modshell32.NewProc("ShellExecuteW")
	procEnumChildWindows                                     = moduser32.NewProc("EnumChildWindows")
	procEnumWindows                                          = moduser32.NewProc("EnumWindows")
	procExitWindowsEx                                        = moduser32.NewProc("ExitWindowsEx")
	procGetClassNameW                                        = moduser32.NewProc("GetClassNameW")
	procGetDesktopWindow                                     = moduser32.NewProc("GetDesktopWindow")
	procGetForegroundWindow                                  = moduser32.NewProc("GetForegroundWindow")
	procGetGUIThreadInfo                                     = moduser32.NewProc("GetGUIThreadInfo")
	procGetShellWindow                                       = moduser32.NewProc("GetShellWindow")
	procGetWindowThreadProcessId                             = moduser32.NewProc("GetWindowThreadProcessId")
	procIsWindow                                             = moduser32.NewProc("IsWindow")
	procIsWindowUnicode                                      = moduser32.NewProc("IsWindowUnicode")
	procIsWindowVisible                                      = moduser32.NewProc("IsWindowVisible")
	procMessageBoxW                                          = moduser32.NewProc("MessageBoxW")
	procCreateEnvironmentBlock                               = moduserenv.NewProc("CreateEnvironmentBlock")
	procDestroyEnvironmentBlock                              = moduserenv.NewProc("DestroyEnvironmentBlock")
	procGetUserProfileDirectoryW                             = moduserenv.NewProc("GetUserProfileDirectoryW")
	procGetFileVersionInfoSizeW                              = modversion.NewProc("GetFileVersionInfoSizeW")
	procGetFileVersionInfoW                                  = modversion.NewProc("GetFileVersionInfoW")
	procVerQueryValueW                                       = modversion.NewProc("VerQueryValueW")
	procWinVerifyTrustEx                                     = modwintrust.NewProc("WinVerifyTrustEx")
	procFreeAddrInfoW                                        = modws2_32.NewProc("FreeAddrInfoW")
	procGetAddrInfoW                                         = modws2_32.NewProc("GetAddrInfoW")
	procWSACleanup                                           = modws2_32.NewProc("WSACleanup")
	procWSAEnumProtocolsW                                    = modws2_32.NewProc("WSAEnumProtocolsW")
	procWSAGetOverlappedResult                               = modws2_32.NewProc("WSAGetOverlappedResult")
	procWSAIoctl                                             = modws2_32.NewProc("WSAIoctl")
	procWSALookupServiceBeginW                               = modws2_32.NewProc("WSALookupServiceBeginW")
	procWSALookupServiceEnd                                  = modws2_32.NewProc("WSALookupServiceEnd")
	procWSALookupServiceNextW                                = modws2_32.NewProc("WSALookupServiceNextW")
	procWSARecv                                              = modws2_32.NewProc("WSARecv")
	procWSARecvFrom                                          = modws2_32.NewProc("WSARecvFrom")
	procWSASend                                              = modws2_32.NewProc("WSASend")
	procWSASendTo                                            = modws2_32.NewProc("WSASendTo")
	procWSASocketW                                           = modws2_32.NewProc("WSASocketW")
	procWSAStartup                                           = modws2_32.NewProc("WSAStartup")
	procbind                                                 = modws2_32.NewProc("bind")
	procclosesocket                                          = modws2_32.NewProc("closesocket")
	procconnect                                              = modws2_32.NewProc("connect")
	procgethostbyname                                        = modws2_32.NewProc("gethostbyname")
	procgetpeername                                          = modws2_32.NewProc("getpeername")
	procgetprotobyname                                       = modws2_32.NewProc("getprotobyname")
	procgetservbyname                                        = modws2_32.NewProc("getservbyname")
	procgetsockname                                          = modws2_32.NewProc("getsockname")
	procgetsockopt                                           = modws2_32.NewProc("getsockopt")
	proclisten                                               = modws2_32.NewProc("listen")
	procntohs                                                = modws2_32.NewProc("ntohs")
	procrecvfrom                                             = modws2_32.NewProc("recvfrom")
	procsendto                                               = modws2_32.NewProc("sendto")
	procsetsockopt                                           = modws2_32.NewProc("setsockopt")
	procshutdown                                             = modws2_32.NewProc("shutdown")
	procsocket                                               = modws2_32.NewProc("socket")
	procWTSEnumerateSessionsW                                = modwtsapi32.NewProc("WTSEnumerateSessionsW")
	procWTSFreeMemory                                        = modwtsapi32.NewProc("WTSFreeMemory")
	procWTSQueryUserToken                                    = modwtsapi32.NewProc("WTSQueryUserToken")
)

func cm_Get_DevNode_Status(status *uint32, problemNumber *uint32, devInst DEVINST, flags uint32) (ret CONFIGRET) {
	r0, _, _ := syscall.Syscall6(procCM_Get_DevNode_Status.Addr(), 4, uintptr(unsafe.Pointer(status)), uintptr(unsafe.Pointer(problemNumber)), uintptr(devInst), uintptr(flags), 0, 0)
	ret = CONFIGRET(r0)
	return
}

func cm_Get_Device_Interface_List(interfaceClass *GUID, deviceID *uint16, buffer *uint16, bufferLen uint32, flags uint32) (ret CONFIGRET) {
	r0, _, _ := syscall.Syscall6(procCM_Get_Device_Interface_ListW.Addr(), 5, uintptr(unsafe.Pointer(interfaceClass)), uintptr(unsafe.Pointer(deviceID)), uintptr(unsafe.Pointer(buffer)), uintptr(bufferLen), uintptr(flags), 0)
	ret = CONFIGRET(r0)
	return
}

func cm_Get_Device_Interface_List_Size(len *uint32, interfaceClass *GUID, deviceID *uint16, flags uint32) (ret CONFIGRET) {
	r0, _, _ := syscall.Syscall6(procCM_Get_Device_Interface_List_SizeW.Addr(), 4, uintptr(unsafe.Pointer(len)), uintptr(unsafe.Pointer(interfaceClass)), uintptr(unsafe.Pointer(deviceID)), uintptr(flags), 0, 0)
	ret = CONFIGRET(r0)
	return
}

func cm_MapCrToWin32Err(configRet CONFIGRET, defaultWin32Error Errno) (ret Errno) {
	r0, _, _ := syscall.Syscall(procCM_MapCrToWin32Err.Addr(), 2, uintptr(configRet), uintptr(defaultWin32Error), 0)
	ret = Errno(r0)
	return
}

func AdjustTokenGroups(token Token, resetToDefault bool, newstate *Tokengroups, buflen uint32, prevstate *Tokengroups, returnlen *uint32) (err error) {
	var _p0 uint32
	if resetToDefault {
		_p0 = 1
	}
	r1, _, e1 := syscall.Syscall6(procAdjustTokenGroups.Addr(), 6, uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(newstate)), uintptr(buflen), uintptr(unsafe.Pointer(prevstate)), uintptr(unsafe.Pointer(returnlen)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func AdjustTokenPrivileges(token Token, disableAllPrivileges bool, newstate *Tokenprivileges, buflen uint32, prevstate *Tokenprivileges, returnlen *uint32) (err error) {
	var _p0 uint32
	if disableAllPrivileges {
		_p0 = 1
	}
	r1, _, e1 := syscall.Syscall6(procAdjustTokenPrivileges.Addr(), 6, uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(newstate)), uintptr(buflen), uintptr(unsafe.Pointer(prevstate)), uintptr(unsafe.Pointer(returnlen)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func AllocateAndInitializeSid(identAuth *SidIdentifierAuthority, subAuth byte, subAuth0 uint32, subAuth1 uint32, subAuth2 uint32, subAuth3 uint32, subAuth4 uint32, subAuth5 uint32, subAuth6 uint32, subAuth7 uint32, sid **SID) (err error) {
	r1, _, e1 := syscall.Syscall12(procAllocateAndInitializeSid.Addr(), 11, uintptr(unsafe.Pointer(identAuth)), uintptr(subAuth), uintptr(subAuth0), uintptr(subAuth1), uintptr(subAuth2), uintptr(subAuth3), uintptr(subAuth4), uintptr(subAuth5), uintptr(subAuth6), uintptr(subAuth7), uintptr(unsafe.Pointer(sid)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func buildSecurityDescriptor(owner *TRUSTEE, group *TRUSTEE, countAccessEntries uint32, accessEntries *EXPLICIT_ACCESS, countAuditEntries uint32, auditEntries *EXPLICIT_ACCESS, oldSecurityDescriptor *SECURITY_DESCRIPTOR, sizeNewSecurityDescriptor *uint32, newSecurityDescriptor **SECURITY_DESCRIPTOR) (ret error) {
	r0, _, _ := syscall.Syscall9(procBuildSecurityDescriptorW.Addr(), 9, uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(countAccessEntries), uintptr(unsafe.Pointer(accessEntries)), uintptr(countAuditEntries), uintptr(unsafe.Pointer(auditEntries)), uintptr(unsafe.Pointer(oldSecurityDescriptor)), uintptr(unsafe.Pointer(sizeNewSecurityDescriptor)), uintptr(unsafe.Pointer(newSecurityDescriptor)))
	if r0 != 0 {
		ret = syscall.Errno(r0)
	}
	return
}

func ChangeServiceConfig2(service Handle, infoLevel uint32, info *byte) (err error) {
	r1, _, e1 := syscall.Syscall(procChangeServiceConfig2W.Addr(), 3, uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(info)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func ChangeServiceConfig(service Handle, serviceType uint32, startType uint32, errorControl uint32, binaryPathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16, displayName *uint16) (err error) {
	r1, _, e1 := syscall.Syscall12(procChangeServiceConfigW.Addr(), 11, uintptr(service), uintptr(serviceType), uintptr(startType), uintptr(errorControl), uintptr(unsafe.Pointer(binaryPathName)), uintptr(unsafe.Pointer(loadOrderGroup)), uintptr(unsafe.Pointer(tagId)), uintptr(unsafe.Pointer(dependencies)), uintptr(unsafe.Pointer(serviceStartName)), uintptr(unsafe.Pointer(password)), uintptr(unsafe.Pointer(displayName)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func checkTokenMembership(tokenHandle Token, sidToCheck *SID, isMember *int32) (err error) {
	r1, _, e1 := syscall.Syscall(procCheckTokenMembership.Addr(), 3, uintptr(tokenHandle), uintptr(unsafe.Pointer(sidToCheck)), uintptr(unsafe.Pointer(isMember)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func CloseServiceHandle(handle Handle) (err error) {
	r1, _, e1 := syscall.Syscall(procCloseServiceHandle.Addr(), 1, uintptr(handle), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func ControlService(service Handle, control uint32, status *SERVICE_STATUS) (err error) {
	r1, _, e1 := syscall.Syscall(procControlService.Addr(), 3, uintptr(service), uintptr(control), uintptr(unsafe.Pointer(status)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func convertSecurityDescriptorToStringSecurityDescriptor(sd *SECURITY_DESCRIPTOR, revision uint32, securityInformation SECURITY_INFORMATION, str **uint16, strLen *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procConvertSecurityDescriptorToStringSecurityDescriptorW.Addr(), 5, uintptr(unsafe.Pointer(sd)), uintptr(revision), uintptr(securityInformation), uintptr(unsafe.Pointer(str)), uintptr(unsafe.Pointer(strLen)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func ConvertSidToStringSid(sid *SID, stringSid **uint16) (err error) {
	r1, _, e1 := syscall.Syscall(procConvertSidToStringSidW.Addr(), 2, uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(stringSid)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func convertStringSecurityDescriptorToSecurityDescriptor(str string, revision uint32, sd **SECURITY_DESCRIPTOR, size *uint32) (err error) {
	var _p0 *uint16
	_p0, err = syscall.UTF16PtrFromString(str)
	if err != nil {
		return
	}
	return _convertStringSecurityDescriptorToSecurityDescriptor(_p0, revision, sd, size)
}

func _convertStringSecurityDescriptorToSecurityDescriptor(str *uint16, revision uint32, sd **SECURITY_DESCRIPTOR, size *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procConvertStringSecurityDescriptorToSecurityDescriptorW.Addr(), 4, uintptr(unsafe.Pointer(str)), uintptr(revision), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(size)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func ConvertStringSidToSid(stringSid *uint16, sid **SID) (err error) {
	r1, _, e1 := syscall.Syscall(procConvertStringSidToSidW.Addr(), 2, uintptr(unsafe.Pointer(stringSid)), uintptr(unsafe.Pointer(sid)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func CopySid(destSidLen uint32, destSid *SID, srcSid *SID) (err error) {
	r1, _, e1 := syscall.Syscall(procCopySid.Addr(), 3, uintptr(destSidLen), uintptr(unsafe.Pointer(destSid)), uintptr(unsafe.Pointer(srcSid)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func CreateProcessAsUser(token Token, appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) {
	var _p0 uint32
	if inheritHandles {
		_p0 = 1
	}
	r1, _, e1 := syscall.Syscall12(procCreateProcessAsUserW.Addr(), 11, uintptr(token), uintptr(unsafe.Pointer(appName)), uintptr(unsafe.Pointer(commandLine)), uintptr(unsafe.Pointer(procSecurity)), uintptr(unsafe.Pointer(threadSecurity)), uintptr(_p0), uintptr(creationFlags), uintptr(unsafe.Pointer(env)), uintptr(unsafe.Pointer(currentDir)), uintptr(unsafe.Pointer(startupInfo)), uintptr(unsafe.Pointer(outProcInfo)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func CreateService(mgr Handle, serviceName *uint16, displayName *uint16, access uint32, srvType uint32, startType uint32, errCtl uint32, pathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16) (handle Handle, err error) {
	r0, _, e1 := syscall.Syscall15(procCreateServiceW.Addr(), 13, uintptr(mgr), uintptr(unsafe.Pointer(serviceName)), uintptr(unsafe.Pointer(displayName)), uintptr(access), uintptr(srvType), uintptr(startType), uintptr(errCtl), uintptr(unsafe.Pointer(pathName)), uintptr(unsafe.Pointer(loadOrderGroup)), uintptr(unsafe.Pointer(tagId)), uintptr(unsafe.Pointer(dependencies)), uintptr(unsafe.Pointer(serviceStartName)), uintptr(unsafe.Pointer(password)), 0, 0)
	handle = Handle(r0)
	if handle == 0 {
		err = errnoErr(e1)
	}
	return
}

func createWellKnownSid(sidType WELL_KNOWN_SID_TYPE, domainSid *SID, sid *SID, sizeSid *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procCreateWellKnownSid.Addr(), 4, uintptr(sidType), uintptr(unsafe.Pointer(domainSid)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sizeSid)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func CryptAcquireContext(provhandle *Handle, container *uint16, provider *uint16, provtype uint32, flags uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procCryptAcquireContextW.Addr(), 5, uintptr(unsafe.Pointer(provhandle)), uintptr(unsafe.Pointer(container)), uintptr(unsafe.Pointer(provider)), uintptr(provtype), uintptr(flags), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func CryptGenRandom(provhandle Handle, buflen uint32, buf *byte) (err error) {
	r1, _, e1 := syscall.Syscall(procCryptGenRandom.Addr(), 3, uintptr(provhandle), uintptr(buflen), uintptr(unsafe.Pointer(buf)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func CryptReleaseContext(provhandle Handle, flags uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procCryptReleaseContext.Addr(), 2, uintptr(provhandle), uintptr(flags), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func DeleteService(service Handle) (err error) {
	r1, _, e1 := syscall.Syscall(procDeleteService.Addr(), 1, uintptr(service), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func DeregisterEventSource(handle Handle) (err error) {
	r1, _, e1 := syscall.Syscall(procDeregisterEventSource.Addr(), 1, uintptr(handle), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func DuplicateTokenEx(existingToken Token, desiredAccess uint32, tokenAttributes *SecurityAttributes, impersonationLevel uint32, tokenType uint32, newToken *Token) (err error) {
	r1, _, e1 := syscall.Syscall6(procDuplicateTokenEx.Addr(), 6, uintptr(existingToken), uintptr(desiredAccess), uintptr(unsafe.Pointer(tokenAttributes)), uintptr(impersonationLevel), uintptr(tokenType), uintptr(unsafe.Pointer(newToken)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func EnumDependentServices(service Handle, activityState uint32, services *ENUM_SERVICE_STATUS, buffSize uint32, bytesNeeded *uint32, servicesReturned *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procEnumDependentServicesW.Addr(), 6, uintptr(service), uintptr(activityState), uintptr(unsafe.Pointer(services)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)), uintptr(unsafe.Pointer(servicesReturned)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func EnumServicesStatusEx(mgr Handle, infoLevel uint32, serviceType uint32, serviceState uint32, services *byte, bufSize uint32, bytesNeeded *uint32, servicesReturned *uint32, resumeHandle *uint32, groupName *uint16) (err error) {
	r1, _, e1 := syscall.Syscall12(procEnumServicesStatusExW.Addr(), 10, uintptr(mgr), uintptr(infoLevel), uintptr(serviceType), uintptr(serviceState), uintptr(unsafe.Pointer(services)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), uintptr(unsafe.Pointer(servicesReturned)), uintptr(unsafe.Pointer(resumeHandle)), uintptr(unsafe.Pointer(groupName)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func EqualSid(sid1 *SID, sid2 *SID) (isEqual bool) {
	r0, _, _ := syscall.Syscall(procEqualSid.Addr(), 2, uintptr(unsafe.Pointer(sid1)), uintptr(unsafe.Pointer(sid2)), 0)
	isEqual = r0 != 0
	return
}

func FreeSid(sid *SID) (err error) {
	r1, _, e1 := syscall.Syscall(procFreeSid.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0)
	if r1 != 0 {
		err = errnoErr(e1)
	}
	return
}

func GetLengthSid(sid *SID) (len uint32) {
	r0, _, _ := syscall.Syscall(procGetLengthSid.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0)
	len = uint32(r0)
	return
}

func getNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner **SID, group **SID, dacl **ACL, sacl **ACL, sd **SECURITY_DESCRIPTOR) (ret error) {
	var _p0 *uint16
	_p0, ret = syscall.UTF16PtrFromString(objectName)
	if ret != nil {
		return
	}
	return _getNamedSecurityInfo(_p0, objectType, securityInformation, owner, group, dacl, sacl, sd)
}

func _getNamedSecurityInfo(objectName *uint16, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner **SID, group **SID, dacl **ACL, sacl **ACL, sd **SECURITY_DESCRIPTOR) (ret error) {
	r0, _, _ := syscall.Syscall9(procGetNamedSecurityInfoW.Addr(), 8, uintptr(unsafe.Pointer(objectName)), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(sd)), 0)
	if r0 != 0 {
		ret = syscall.Errno(r0)
	}
	return
}

func getSecurityDescriptorControl(sd *SECURITY_DESCRIPTOR, control *SECURITY_DESCRIPTOR_CONTROL, revision *uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procGetSecurityDescriptorControl.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(control)), uintptr(unsafe.Pointer(revision)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func getSecurityDescriptorDacl(sd *SECURITY_DESCRIPTOR, daclPresent *bool, dacl **ACL, daclDefaulted *bool) (err error) {
	var _p0 uint32
	if *daclPresent {
		_p0 = 1
	}
	var _p1 uint32
	if *daclDefaulted {
		_p1 = 1
	}
	r1, _, e1 := syscall.Syscall6(procGetSecurityDescriptorDacl.Addr(), 4, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(&_p0)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(&_p1)), 0, 0)
	*daclPresent = _p0 != 0
	*daclDefaulted = _p1 != 0
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func getSecurityDescriptorGroup(sd *SECURITY_DESCRIPTOR, group **SID, groupDefaulted *bool) (err error) {
	var _p0 uint32
	if *groupDefaulted {
		_p0 = 1
	}
	r1, _, e1 := syscall.Syscall(procGetSecurityDescriptorGroup.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(&_p0)))
	*groupDefaulted = _p0 != 0
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func getSecurityDescriptorLength(sd *SECURITY_DESCRIPTOR) (len uint32) {
	r0, _, _ := syscall.Syscall(procGetSecurityDescriptorLength.Addr(), 1, uintptr(unsafe.Pointer(sd)), 0, 0)
	len = uint32(r0)
	return
}

func getSecurityDescriptorOwner(sd *SECURITY_DESCRIPTOR, owner **SID, ownerDefaulted *bool) (err error) {
	var _p0 uint32
	if *ownerDefaulted {
		_p0 = 1
	}
	r1, _, e1 := syscall.Syscall(procGetSecurityDescriptorOwner.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(&_p0)))
	*ownerDefaulted = _p0 != 0
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func getSecurityDescriptorRMControl(sd *SECURITY_DESCRIPTOR, rmControl *uint8) (ret error) {
	r0, _, _ := syscall.Syscall(procGetSecurityDescriptorRMControl.Addr(), 2, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(rmControl)), 0)
	if r0 != 0 {
		ret = syscall.Errno(r0)
	}
	return
}

func getSecurityDescriptorSacl(sd *SECURITY_DESCRIPTOR, saclPresent *bool, sacl **ACL, saclDefaulted *bool) (err error) {
	var _p0 uint32
	if *saclPresent {
		_p0 = 1
	}
	var _p1 uint32
	if *saclDefaulted {
		_p1 = 1
	}
	r1, _, e1 := syscall.Syscall6(procGetSecurityDescriptorSacl.Addr(), 4, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(&_p0)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(&_p1)), 0, 0)
	*saclPresent = _p0 != 0
	*saclDefaulted = _p1 != 0
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func getSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner **SID, group **SID, dacl **ACL, sacl **ACL, sd **SECURITY_DESCRIPTOR) (ret error) {
	r0, _, _ := syscall.Syscall9(procGetSecurityInfo.Addr(), 8, uintptr(handle), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(sd)), 0)
	if r0 != 0 {
		ret = syscall.Errno(r0)
	}
	return
}

func getSidIdentifierAuthority(sid *SID) (authority *SidIdentifierAuthority) {
	r0, _, _ := syscall.Syscall(procGetSidIdentifierAuthority.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0)
	authority = (*SidIdentifierAuthority)(unsafe.Pointer(r0))
	return
}

func getSidSubAuthority(sid *SID, index uint32) (subAuthority *uint32) {
	r0, _, _ := syscall.Syscall(procGetSidSubAuthority.Addr(), 2, uintptr(unsafe.Pointer(sid)), uintptr(index), 0)
	subAuthority = (*uint32)(unsafe.Pointer(r0))
	return
}

func getSidSubAuthorityCount(sid *SID) (count *uint8) {
	r0, _, _ := syscall.Syscall(procGetSidSubAuthorityCount.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0)
	count = (*uint8)(unsafe.Pointer(r0))
	return
}

func GetTokenInformation(token Token, infoClass uint32, info *byte, infoLen uint32, returnedLen *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procGetTokenInformation.Addr(), 5, uintptr(token), uintptr(infoClass), uintptr(unsafe.Pointer(info)), uintptr(infoLen), uintptr(unsafe.Pointer(returnedLen)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func ImpersonateSelf(impersonationlevel uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procImpersonateSelf.Addr(), 1, uintptr(impersonationlevel), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func initializeSecurityDescriptor(absoluteSD *SECURITY_DESCRIPTOR, revision uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procInitializeSecurityDescriptor.Addr(), 2, uintptr(unsafe.Pointer(absoluteSD)), uintptr(revision), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func InitiateSystemShutdownEx(machineName *uint16, message *uint16, timeout uint32, forceAppsClosed bool, rebootAfterShutdown bool, reason uint32) (err error) {
	var _p0 uint32
	if forceAppsClosed {
		_p0 = 1
	}
	var _p1 uint32
	if rebootAfterShutdown {
		_p1 = 1
	}
	r1, _, e1 := syscall.Syscall6(procInitiateSystemShutdownExW.Addr(), 6, uintptr(unsafe.Pointer(machineName)), uintptr(unsafe.Pointer(message)), uintptr(timeout), uintptr(_p0), uintptr(_p1), uintptr(reason))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func isTokenRestricted(tokenHandle Token) (ret bool, err error) {
	r0, _, e1 := syscall.Syscall(procIsTokenRestricted.Addr(), 1, uintptr(tokenHandle), 0, 0)
	ret = r0 != 0
	if !ret {
		err = errnoErr(e1)
	}
	return
}

func isValidSecurityDescriptor(sd *SECURITY_DESCRIPTOR) (isValid bool) {
	r0, _, _ := syscall.Syscall(procIsValidSecurityDescriptor.Addr(), 1, uintptr(unsafe.Pointer(sd)), 0, 0)
	isValid = r0 != 0
	return
}

func isValidSid(sid *SID) (isValid bool) {
	r0, _, _ := syscall.Syscall(procIsValidSid.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0)
	isValid = r0 != 0
	return
}

func isWellKnownSid(sid *SID, sidType WELL_KNOWN_SID_TYPE) (isWellKnown bool) {
	r0, _, _ := syscall.Syscall(procIsWellKnownSid.Addr(), 2, uintptr(unsafe.Pointer(sid)), uintptr(sidType), 0)
	isWellKnown = r0 != 0
	return
}

func LookupAccountName(systemName *uint16, accountName *uint16, sid *SID, sidLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) {
	r1, _, e1 := syscall.Syscall9(procLookupAccountNameW.Addr(), 7, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(accountName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sidLen)), uintptr(unsafe.Pointer(refdDomainName)), uintptr(unsafe.Pointer(refdDomainNameLen)), uintptr(unsafe.Pointer(use)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func LookupAccountSid(systemName *uint16, sid *SID, name *uint16, nameLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) {
	r1, _, e1 := syscall.Syscall9(procLookupAccountSidW.Addr(), 7, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(refdDomainName)), uintptr(unsafe.Pointer(refdDomainNameLen)), uintptr(unsafe.Pointer(use)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func LookupPrivilegeValue(systemname *uint16, name *uint16, luid *LUID) (err error) {
	r1, _, e1 := syscall.Syscall(procLookupPrivilegeValueW.Addr(), 3, uintptr(unsafe.Pointer(systemname)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(luid)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func makeAbsoluteSD(selfRelativeSD *SECURITY_DESCRIPTOR, absoluteSD *SECURITY_DESCRIPTOR, absoluteSDSize *uint32, dacl *ACL, daclSize *uint32, sacl *ACL, saclSize *uint32, owner *SID, ownerSize *uint32, group *SID, groupSize *uint32) (err error) {
	r1, _, e1 := syscall.Syscall12(procMakeAbsoluteSD.Addr(), 11, uintptr(unsafe.Pointer(selfRelativeSD)), uintptr(unsafe.Pointer(absoluteSD)), uintptr(unsafe.Pointer(absoluteSDSize)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(daclSize)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(saclSize)), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(ownerSize)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(groupSize)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func makeSelfRelativeSD(absoluteSD *SECURITY_DESCRIPTOR, selfRelativeSD *SECURITY_DESCRIPTOR, selfRelativeSDSize *uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procMakeSelfRelativeSD.Addr(), 3, uintptr(unsafe.Pointer(absoluteSD)), uintptr(unsafe.Pointer(selfRelativeSD)), uintptr(unsafe.Pointer(selfRelativeSDSize)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func NotifyServiceStatusChange(service Handle, notifyMask uint32, notifier *SERVICE_NOTIFY) (ret error) {
	r0, _, _ := syscall.Syscall(procNotifyServiceStatusChangeW.Addr(), 3, uintptr(service), uintptr(notifyMask), uintptr(unsafe.Pointer(notifier)))
	if r0 != 0 {
		ret = syscall.Errno(r0)
	}
	return
}

func OpenProcessToken(process Handle, access uint32, token *Token) (err error) {
	r1, _, e1 := syscall.Syscall(procOpenProcessToken.Addr(), 3, uintptr(process), uintptr(access), uintptr(unsafe.Pointer(token)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func OpenSCManager(machineName *uint16, databaseName *uint16, access uint32) (handle Handle, err error) {
	r0, _, e1 := syscall.Syscall(procOpenSCManagerW.Addr(), 3, uintptr(unsafe.Pointer(machineName)), uintptr(unsafe.Pointer(databaseName)), uintptr(access))
	handle = Handle(r0)
	if handle == 0 {
		err = errnoErr(e1)
	}
	return
}

func OpenService(mgr Handle, serviceName *uint16, access uint32) (handle Handle, err error) {
	r0, _, e1 := syscall.Syscall(procOpenServiceW.Addr(), 3, uintptr(mgr), uintptr(unsafe.Pointer(serviceName)), uintptr(access))
	handle = Handle(r0)
	if handle == 0 {
		err = errnoErr(e1)
	}
	return
}

func OpenThreadToken(thread Handle, access uint32, openAsSelf bool, token *Token) (err error) {
	var _p0 uint32
	if openAsSelf {
		_p0 = 1
	}
	r1, _, e1 := syscall.Syscall6(procOpenThreadToken.Addr(), 4, uintptr(thread), uintptr(access), uintptr(_p0), uintptr(unsafe.Pointer(token)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func QueryServiceConfig2(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procQueryServiceConfig2W.Addr(), 5, uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(buff)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func QueryServiceConfig(service Handle, serviceConfig *QUERY_SERVICE_CONFIG, bufSize uint32, bytesNeeded *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procQueryServiceConfigW.Addr(), 4, uintptr(service), uintptr(unsafe.Pointer(serviceConfig)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func QueryServiceDynamicInformation(service Handle, infoLevel uint32, dynamicInfo unsafe.Pointer) (err error) {
	err = procQueryServiceDynamicInformation.Find()
	if err != nil {
		return
	}
	r1, _, e1 := syscall.Syscall(procQueryServiceDynamicInformation.Addr(), 3, uintptr(service), uintptr(infoLevel), uintptr(dynamicInfo))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func QueryServiceLockStatus(mgr Handle, lockStatus *QUERY_SERVICE_LOCK_STATUS, bufSize uint32, bytesNeeded *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procQueryServiceLockStatusW.Addr(), 4, uintptr(mgr), uintptr(unsafe.Pointer(lockStatus)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func QueryServiceStatus(service Handle, status *SERVICE_STATUS) (err error) {
	r1, _, e1 := syscall.Syscall(procQueryServiceStatus.Addr(), 2, uintptr(service), uintptr(unsafe.Pointer(status)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func QueryServiceStatusEx(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procQueryServiceStatusEx.Addr(), 5, uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(buff)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func RegCloseKey(key Handle) (regerrno error) {
	r0, _, _ := syscall.Syscall(procRegCloseKey.Addr(), 1, uintptr(key), 0, 0)
	if r0 != 0 {
		regerrno = syscall.Errno(r0)
	}
	return
}

func RegEnumKeyEx(key Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, class *uint16, classLen *uint32, lastWriteTime *Filetime) (regerrno error) {
	r0, _, _ := syscall.Syscall9(procRegEnumKeyExW.Addr(), 8, uintptr(key), uintptr(index), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(class)), uintptr(unsafe.Pointer(classLen)), uintptr(unsafe.Pointer(lastWriteTime)), 0)
	if r0 != 0 {
		regerrno = syscall.Errno(r0)
	}
	return
}

func RegNotifyChangeKeyValue(key Handle, watchSubtree bool, notifyFilter uint32, event Handle, asynchronous bool) (regerrno error) {
	var _p0 uint32
	if watchSubtree {
		_p0 = 1
	}
	var _p1 uint32
	if asynchronous {
		_p1 = 1
	}
	r0, _, _ := syscall.Syscall6(procRegNotifyChangeKeyValue.Addr(), 5, uintptr(key), uintptr(_p0), uintptr(notifyFilter), uintptr(event), uintptr(_p1), 0)
	if r0 != 0 {
		regerrno = syscall.Errno(r0)
	}
	return
}

func RegOpenKeyEx(key Handle, subkey *uint16, options uint32, desiredAccess uint32, result *Handle) (regerrno error) {
	r0, _, _ := syscall.Syscall6(procRegOpenKeyExW.Addr(), 5, uintptr(key), uintptr(unsafe.Pointer(subkey)), uintptr(options), uintptr(desiredAccess), uintptr(unsafe.Pointer(result)), 0)
	if r0 != 0 {
		regerrno = syscall.Errno(r0)
	}
	return
}

func RegQueryInfoKey(key Handle, class *uint16, classLen *uint32, reserved *uint32, subkeysLen *uint32, maxSubkeyLen *uint32, maxClassLen *uint32, valuesLen *uint32, maxValueNameLen *uint32, maxValueLen *uint32, saLen *uint32, lastWriteTime *Filetime) (regerrno error) {
	r0, _, _ := syscall.Syscall12(procRegQueryInfoKeyW.Addr(), 12, uintptr(key), uintptr(unsafe.Pointer(class)), uintptr(unsafe.Pointer(classLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(subkeysLen)), uintptr(unsafe.Pointer(maxSubkeyLen)), uintptr(unsafe.Pointer(maxClassLen)), uintptr(unsafe.Pointer(valuesLen)), uintptr(unsafe.Pointer(maxValueNameLen)), uintptr(unsafe.Pointer(maxValueLen)), uintptr(unsafe.Pointer(saLen)), uintptr(unsafe.Pointer(lastWriteTime)))
	if r0 != 0 {
		regerrno = syscall.Errno(r0)
	}
	return
}

func RegQueryValueEx(key Handle, name *uint16, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) {
	r0, _, _ := syscall.Syscall6(procRegQueryValueExW.Addr(), 6, uintptr(key), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(valtype)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(buflen)))
	if r0 != 0 {
		regerrno = syscall.Errno(r0)
	}
	return
}

func RegisterEventSource(uncServerName *uint16, sourceName *uint16) (handle Handle, err error) {
	r0, _, e1 := syscall.Syscall(procRegisterEventSourceW.Addr(), 2, uintptr(unsafe.Pointer(uncServerName)), uintptr(unsafe.Pointer(sourceName)), 0)
	handle = Handle(r0)
	if handle == 0 {
		err = errnoErr(e1)
	}
	return
}

func RegisterServiceCtrlHandlerEx(serviceName *uint16, handlerProc uintptr, context uintptr) (handle Handle, err error) {
	r0, _, e1 := syscall.Syscall(procRegisterServiceCtrlHandlerExW.Addr(), 3, uintptr(unsafe.Pointer(serviceName)), uintptr(handlerProc), uintptr(context))
	handle = Handle(r0)
	if handle == 0 {
		err = errnoErr(e1)
	}
	return
}

func ReportEvent(log Handle, etype uint16, category uint16, eventId uint32, usrSId uintptr, numStrings uint16, dataSize uint32, strings **uint16, rawData *byte) (err error) {
	r1, _, e1 := syscall.Syscall9(procReportEventW.Addr(), 9, uintptr(log), uintptr(etype), uintptr(category), uintptr(eventId), uintptr(usrSId), uintptr(numStrings), uintptr(dataSize), uintptr(unsafe.Pointer(strings)), uintptr(unsafe.Pointer(rawData)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func RevertToSelf() (err error) {
	r1, _, e1 := syscall.Syscall(procRevertToSelf.Addr(), 0, 0, 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func setEntriesInAcl(countExplicitEntries uint32, explicitEntries *EXPLICIT_ACCESS, oldACL *ACL, newACL **ACL) (ret error) {
	r0, _, _ := syscall.Syscall6(procSetEntriesInAclW.Addr(), 4, uintptr(countExplicitEntries), uintptr(unsafe.Pointer(explicitEntries)), uintptr(unsafe.Pointer(oldACL)), uintptr(unsafe.Pointer(newACL)), 0, 0)
	if r0 != 0 {
		ret = syscall.Errno(r0)
	}
	return
}

func SetKernelObjectSecurity(handle Handle, securityInformation SECURITY_INFORMATION, securityDescriptor *SECURITY_DESCRIPTOR) (err error) {
	r1, _, e1 := syscall.Syscall(procSetKernelObjectSecurity.Addr(), 3, uintptr(handle), uintptr(securityInformation), uintptr(unsafe.Pointer(securityDescriptor)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner *SID, group *SID, dacl *ACL, sacl *ACL) (ret error) {
	var _p0 *uint16
	_p0, ret = syscall.UTF16PtrFromString(objectName)
	if ret != nil {
		return
	}
	return _SetNamedSecurityInfo(_p0, objectType, securityInformation, owner, group, dacl, sacl)
}

func _SetNamedSecurityInfo(objectName *uint16, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner *SID, group *SID, dacl *ACL, sacl *ACL) (ret error) {
	r0, _, _ := syscall.Syscall9(procSetNamedSecurityInfoW.Addr(), 7, uintptr(unsafe.Pointer(objectName)), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)), 0, 0)
	if r0 != 0 {
		ret = syscall.Errno(r0)
	}
	return
}

func setSecurityDescriptorControl(sd *SECURITY_DESCRIPTOR, controlBitsOfInterest SECURITY_DESCRIPTOR_CONTROL, controlBitsToSet SECURITY_DESCRIPTOR_CONTROL) (err error) {
	r1, _, e1 := syscall.Syscall(procSetSecurityDescriptorControl.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(controlBitsOfInterest), uintptr(controlBitsToSet))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func setSecurityDescriptorDacl(sd *SECURITY_DESCRIPTOR, daclPresent bool, dacl *ACL, daclDefaulted bool) (err error) {
	var _p0 uint32
	if daclPresent {
		_p0 = 1
	}
	var _p1 uint32
	if daclDefaulted {
		_p1 = 1
	}
	r1, _, e1 := syscall.Syscall6(procSetSecurityDescriptorDacl.Addr(), 4, uintptr(unsafe.Pointer(sd)), uintptr(_p0), uintptr(unsafe.Pointer(dacl)), uintptr(_p1), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func setSecurityDescriptorGroup(sd *SECURITY_DESCRIPTOR, group *SID, groupDefaulted bool) (err error) {
	var _p0 uint32
	if groupDefaulted {
		_p0 = 1
	}
	r1, _, e1 := syscall.Syscall(procSetSecurityDescriptorGroup.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(group)), uintptr(_p0))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func setSecurityDescriptorOwner(sd *SECURITY_DESCRIPTOR, owner *SID, ownerDefaulted bool) (err error) {
	var _p0 uint32
	if ownerDefaulted {
		_p0 = 1
	}
	r1, _, e1 := syscall.Syscall(procSetSecurityDescriptorOwner.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(owner)), uintptr(_p0))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func setSecurityDescriptorRMControl(sd *SECURITY_DESCRIPTOR, rmControl *uint8) {
	syscall.Syscall(procSetSecurityDescriptorRMControl.Addr(), 2, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(rmControl)), 0)
	return
}

func setSecurityDescriptorSacl(sd *SECURITY_DESCRIPTOR, saclPresent bool, sacl *ACL, saclDefaulted bool) (err error) {
	var _p0 uint32
	if saclPresent {
		_p0 = 1
	}
	var _p1 uint32
	if saclDefaulted {
		_p1 = 1
	}
	r1, _, e1 := syscall.Syscall6(procSetSecurityDescriptorSacl.Addr(), 4, uintptr(unsafe.Pointer(sd)), uintptr(_p0), uintptr(unsafe.Pointer(sacl)), uintptr(_p1), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner *SID, group *SID, dacl *ACL, sacl *ACL) (ret error) {
	r0, _, _ := syscall.Syscall9(procSetSecurityInfo.Addr(), 7, uintptr(handle), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)), 0, 0)
	if r0 != 0 {
		ret = syscall.Errno(r0)
	}
	return
}

func SetServiceStatus(service Handle, serviceStatus *SERVICE_STATUS) (err error) {
	r1, _, e1 := syscall.Syscall(procSetServiceStatus.Addr(), 2, uintptr(service), uintptr(unsafe.Pointer(serviceStatus)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetThreadToken(thread *Handle, token Token) (err error) {
	r1, _, e1 := syscall.Syscall(procSetThreadToken.Addr(), 2, uintptr(unsafe.Pointer(thread)), uintptr(token), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetTokenInformation(token Token, infoClass uint32, info *byte, infoLen uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procSetTokenInformation.Addr(), 4, uintptr(token), uintptr(infoClass), uintptr(unsafe.Pointer(info)), uintptr(infoLen), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func StartServiceCtrlDispatcher(serviceTable *SERVICE_TABLE_ENTRY) (err error) {
	r1, _, e1 := syscall.Syscall(procStartServiceCtrlDispatcherW.Addr(), 1, uintptr(unsafe.Pointer(serviceTable)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func StartService(service Handle, numArgs uint32, argVectors **uint16) (err error) {
	r1, _, e1 := syscall.Syscall(procStartServiceW.Addr(), 3, uintptr(service), uintptr(numArgs), uintptr(unsafe.Pointer(argVectors)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func CertAddCertificateContextToStore(store Handle, certContext *CertContext, addDisposition uint32, storeContext **CertContext) (err error) {
	r1, _, e1 := syscall.Syscall6(procCertAddCertificateContextToStore.Addr(), 4, uintptr(store), uintptr(unsafe.Pointer(certContext)), uintptr(addDisposition), uintptr(unsafe.Pointer(storeContext)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func CertCloseStore(store Handle, flags uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procCertCloseStore.Addr(), 2, uintptr(store), uintptr(flags), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func CertCreateCertificateContext(certEncodingType uint32, certEncoded *byte, encodedLen uint32) (context *CertContext, err error) {
	r0, _, e1 := syscall.Syscall(procCertCreateCertificateContext.Addr(), 3, uintptr(certEncodingType), uintptr(unsafe.Pointer(certEncoded)), uintptr(encodedLen))
	context = (*CertContext)(unsafe.Pointer(r0))
	if context == nil {
		err = errnoErr(e1)
	}
	return
}

func CertDeleteCertificateFromStore(certContext *CertContext) (err error) {
	r1, _, e1 := syscall.Syscall(procCertDeleteCertificateFromStore.Addr(), 1, uintptr(unsafe.Pointer(certContext)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func CertDuplicateCertificateContext(certContext *CertContext) (dupContext *CertContext) {
	r0, _, _ := syscall.Syscall(procCertDuplicateCertificateContext.Addr(), 1, uintptr(unsafe.Pointer(certContext)), 0, 0)
	dupContext = (*CertContext)(unsafe.Pointer(r0))
	return
}

func CertEnumCertificatesInStore(store Handle, prevContext *CertContext) (context *CertContext, err error) {
	r0, _, e1 := syscall.Syscall(procCertEnumCertificatesInStore.Addr(), 2, uintptr(store), uintptr(unsafe.Pointer(prevContext)), 0)
	context = (*CertContext)(unsafe.Pointer(r0))
	if context == nil {
		err = errnoErr(e1)
	}
	return
}

func CertFindCertificateInStore(store Handle, certEncodingType uint32, findFlags uint32, findType uint32, findPara unsafe.Pointer, prevCertContext *CertContext) (cert *CertContext, err error) {
	r0, _, e1 := syscall.Syscall6(procCertFindCertificateInStore.Addr(), 6, uintptr(store), uintptr(certEncodingType), uintptr(findFlags), uintptr(findType), uintptr(findPara), uintptr(unsafe.Pointer(prevCertContext)))
	cert = (*CertContext)(unsafe.Pointer(r0))
	if cert == nil {
		err = errnoErr(e1)
	}
	return
}

func CertFindChainInStore(store Handle, certEncodingType uint32, findFlags uint32, findType uint32, findPara unsafe.Pointer, prevChainContext *CertChainContext) (certchain *CertChainContext, err error) {
	r0, _, e1 := syscall.Syscall6(procCertFindChainInStore.Addr(), 6, uintptr(store), uintptr(certEncodingType), uintptr(findFlags), uintptr(findType), uintptr(findPara), uintptr(unsafe.Pointer(prevChainContext)))
	certchain = (*CertChainContext)(unsafe.Pointer(r0))
	if certchain == nil {
		err = errnoErr(e1)
	}
	return
}

func CertFindExtension(objId *byte, countExtensions uint32, extensions *CertExtension) (ret *CertExtension) {
	r0, _, _ := syscall.Syscall(procCertFindExtension.Addr(), 3, uintptr(unsafe.Pointer(objId)), uintptr(countExtensions), uintptr(unsafe.Pointer(extensions)))
	ret = (*CertExtension)(unsafe.Pointer(r0))
	return
}

func CertFreeCertificateChain(ctx *CertChainContext) {
	syscall.Syscall(procCertFreeCertificateChain.Addr(), 1, uintptr(unsafe.Pointer(ctx)), 0, 0)
	return
}

func CertFreeCertificateContext(ctx *CertContext) (err error) {
	r1, _, e1 := syscall.Syscall(procCertFreeCertificateContext.Addr(), 1, uintptr(unsafe.Pointer(ctx)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func CertGetCertificateChain(engine Handle, leaf *CertContext, time *Filetime, additionalStore Handle, para *CertChainPara, flags uint32, reserved uintptr, chainCtx **CertChainContext) (err error) {
	r1, _, e1 := syscall.Syscall9(procCertGetCertificateChain.Addr(), 8, uintptr(engine), uintptr(unsafe.Pointer(leaf)), uintptr(unsafe.Pointer(time)), uintptr(additionalStore), uintptr(unsafe.Pointer(para)), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(chainCtx)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func CertGetNameString(certContext *CertContext, nameType uint32, flags uint32, typePara unsafe.Pointer, name *uint16, size uint32) (chars uint32) {
	r0, _, _ := syscall.Syscall6(procCertGetNameStringW.Addr(), 6, uintptr(unsafe.Pointer(certContext)), uintptr(nameType), uintptr(flags), uintptr(typePara), uintptr(unsafe.Pointer(name)), uintptr(size))
	chars = uint32(r0)
	return
}

func CertOpenStore(storeProvider uintptr, msgAndCertEncodingType uint32, cryptProv uintptr, flags uint32, para uintptr) (handle Handle, err error) {
	r0, _, e1 := syscall.Syscall6(procCertOpenStore.Addr(), 5, uintptr(storeProvider), uintptr(msgAndCertEncodingType), uintptr(cryptProv), uintptr(flags), uintptr(para), 0)
	handle = Handle(r0)
	if handle == 0 {
		err = errnoErr(e1)
	}
	return
}

func CertOpenSystemStore(hprov Handle, name *uint16) (store Handle, err error) {
	r0, _, e1 := syscall.Syscall(procCertOpenSystemStoreW.Addr(), 2, uintptr(hprov), uintptr(unsafe.Pointer(name)), 0)
	store = Handle(r0)
	if store == 0 {
		err = errnoErr(e1)
	}
	return
}

func CertVerifyCertificateChainPolicy(policyOID uintptr, chain *CertChainContext, para *CertChainPolicyPara, status *CertChainPolicyStatus) (err error) {
	r1, _, e1 := syscall.Syscall6(procCertVerifyCertificateChainPolicy.Addr(), 4, uintptr(policyOID), uintptr(unsafe.Pointer(chain)), uintptr(unsafe.Pointer(para)), uintptr(unsafe.Pointer(status)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func CryptAcquireCertificatePrivateKey(cert *CertContext, flags uint32, parameters unsafe.Pointer, cryptProvOrNCryptKey *Handle, keySpec *uint32, callerFreeProvOrNCryptKey *bool) (err error) {
	var _p0 uint32
	if *callerFreeProvOrNCryptKey {
		_p0 = 1
	}
	r1, _, e1 := syscall.Syscall6(procCryptAcquireCertificatePrivateKey.Addr(), 6, uintptr(unsafe.Pointer(cert)), uintptr(flags), uintptr(parameters), uintptr(unsafe.Pointer(cryptProvOrNCryptKey)), uintptr(unsafe.Pointer(keySpec)), uintptr(unsafe.Pointer(&_p0)))
	*callerFreeProvOrNCryptKey = _p0 != 0
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func CryptDecodeObject(encodingType uint32, structType *byte, encodedBytes *byte, lenEncodedBytes uint32, flags uint32, decoded unsafe.Pointer, decodedLen *uint32) (err error) {
	r1, _, e1 := syscall.Syscall9(procCryptDecodeObject.Addr(), 7, uintptr(encodingType), uintptr(unsafe.Pointer(structType)), uintptr(unsafe.Pointer(encodedBytes)), uintptr(lenEncodedBytes), uintptr(flags), uintptr(decoded), uintptr(unsafe.Pointer(decodedLen)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func CryptProtectData(dataIn *DataBlob, name *uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) {
	r1, _, e1 := syscall.Syscall9(procCryptProtectData.Addr(), 7, uintptr(unsafe.Pointer(dataIn)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(optionalEntropy)), uintptr(reserved), uintptr(unsafe.Pointer(promptStruct)), uintptr(flags), uintptr(unsafe.Pointer(dataOut)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func CryptQueryObject(objectType uint32, object unsafe.Pointer, expectedContentTypeFlags uint32, expectedFormatTypeFlags uint32, flags uint32, msgAndCertEncodingType *uint32, contentType *uint32, formatType *uint32, certStore *Handle, msg *Handle, context *unsafe.Pointer) (err error) {
	r1, _, e1 := syscall.Syscall12(procCryptQueryObject.Addr(), 11, uintptr(objectType), uintptr(object), uintptr(expectedContentTypeFlags), uintptr(expectedFormatTypeFlags), uintptr(flags), uintptr(unsafe.Pointer(msgAndCertEncodingType)), uintptr(unsafe.Pointer(contentType)), uintptr(unsafe.Pointer(formatType)), uintptr(unsafe.Pointer(certStore)), uintptr(unsafe.Pointer(msg)), uintptr(unsafe.Pointer(context)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func CryptUnprotectData(dataIn *DataBlob, name **uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) {
	r1, _, e1 := syscall.Syscall9(procCryptUnprotectData.Addr(), 7, uintptr(unsafe.Pointer(dataIn)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(optionalEntropy)), uintptr(reserved), uintptr(unsafe.Pointer(promptStruct)), uintptr(flags), uintptr(unsafe.Pointer(dataOut)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func PFXImportCertStore(pfx *CryptDataBlob, password *uint16, flags uint32) (store Handle, err error) {
	r0, _, e1 := syscall.Syscall(procPFXImportCertStore.Addr(), 3, uintptr(unsafe.Pointer(pfx)), uintptr(unsafe.Pointer(password)), uintptr(flags))
	store = Handle(r0)
	if store == 0 {
		err = errnoErr(e1)
	}
	return
}

func DnsNameCompare(name1 *uint16, name2 *uint16) (same bool) {
	r0, _, _ := syscall.Syscall(procDnsNameCompare_W.Addr(), 2, uintptr(unsafe.Pointer(name1)), uintptr(unsafe.Pointer(name2)), 0)
	same = r0 != 0
	return
}

func DnsQuery(name string, qtype uint16, options uint32, extra *byte, qrs **DNSRecord, pr *byte) (status error) {
	var _p0 *uint16
	_p0, status = syscall.UTF16PtrFromString(name)
	if status != nil {
		return
	}
	return _DnsQuery(_p0, qtype, options, extra, qrs, pr)
}

func _DnsQuery(name *uint16, qtype uint16, options uint32, extra *byte, qrs **DNSRecord, pr *byte) (status error) {
	r0, _, _ := syscall.Syscall6(procDnsQuery_W.Addr(), 6, uintptr(unsafe.Pointer(name)), uintptr(qtype), uintptr(options), uintptr(unsafe.Pointer(extra)), uintptr(unsafe.Pointer(qrs)), uintptr(unsafe.Pointer(pr)))
	if r0 != 0 {
		status = syscall.Errno(r0)
	}
	return
}

func DnsRecordListFree(rl *DNSRecord, freetype uint32) {
	syscall.Syscall(procDnsRecordListFree.Addr(), 2, uintptr(unsafe.Pointer(rl)), uintptr(freetype), 0)
	return
}

func DwmGetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) {
	r0, _, _ := syscall.Syscall6(procDwmGetWindowAttribute.Addr(), 4, uintptr(hwnd), uintptr(attribute), uintptr(value), uintptr(size), 0, 0)
	if r0 != 0 {
		ret = syscall.Errno(r0)
	}
	return
}

func DwmSetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) {
	r0, _, _ := syscall.Syscall6(procDwmSetWindowAttribute.Addr(), 4, uintptr(hwnd), uintptr(attribute), uintptr(value), uintptr(size), 0, 0)
	if r0 != 0 {
		ret = syscall.Errno(r0)
	}
	return
}

func GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizePointer *uint32) (errcode error) {
	r0, _, _ := syscall.Syscall6(procGetAdaptersAddresses.Addr(), 5, uintptr(family), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(adapterAddresses)), uintptr(unsafe.Pointer(sizePointer)), 0)
	if r0 != 0 {
		errcode = syscall.Errno(r0)
	}
	return
}

func GetAdaptersInfo(ai *IpAdapterInfo, ol *uint32) (errcode error) {
	r0, _, _ := syscall.Syscall(procGetAdaptersInfo.Addr(), 2, uintptr(unsafe.Pointer(ai)), uintptr(unsafe.Pointer(ol)), 0)
	if r0 != 0 {
		errcode = syscall.Errno(r0)
	}
	return
}

func getBestInterfaceEx(sockaddr unsafe.Pointer, pdwBestIfIndex *uint32) (errcode error) {
	r0, _, _ := syscall.Syscall(procGetBestInterfaceEx.Addr(), 2, uintptr(sockaddr), uintptr(unsafe.Pointer(pdwBestIfIndex)), 0)
	if r0 != 0 {
		errcode = syscall.Errno(r0)
	}
	return
}

func GetIfEntry(pIfRow *MibIfRow) (errcode error) {
	r0, _, _ := syscall.Syscall(procGetIfEntry.Addr(), 1, uintptr(unsafe.Pointer(pIfRow)), 0, 0)
	if r0 != 0 {
		errcode = syscall.Errno(r0)
	}
	return
}

func AssignProcessToJobObject(job Handle, process Handle) (err error) {
	r1, _, e1 := syscall.Syscall(procAssignProcessToJobObject.Addr(), 2, uintptr(job), uintptr(process), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func CancelIo(s Handle) (err error) {
	r1, _, e1 := syscall.Syscall(procCancelIo.Addr(), 1, uintptr(s), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func CancelIoEx(s Handle, o *Overlapped) (err error) {
	r1, _, e1 := syscall.Syscall(procCancelIoEx.Addr(), 2, uintptr(s), uintptr(unsafe.Pointer(o)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func CloseHandle(handle Handle) (err error) {
	r1, _, e1 := syscall.Syscall(procCloseHandle.Addr(), 1, uintptr(handle), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func ConnectNamedPipe(pipe Handle, overlapped *Overlapped) (err error) {
	r1, _, e1 := syscall.Syscall(procConnectNamedPipe.Addr(), 2, uintptr(pipe), uintptr(unsafe.Pointer(overlapped)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func CreateDirectory(path *uint16, sa *SecurityAttributes) (err error) {
	r1, _, e1 := syscall.Syscall(procCreateDirectoryW.Addr(), 2, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(sa)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func CreateEventEx(eventAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) {
	r0, _, e1 := syscall.Syscall6(procCreateEventExW.Addr(), 4, uintptr(unsafe.Pointer(eventAttrs)), uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(desiredAccess), 0, 0)
	handle = Handle(r0)
	if handle == 0 || e1 == ERROR_ALREADY_EXISTS {
		err = errnoErr(e1)
	}
	return
}

func CreateEvent(eventAttrs *SecurityAttributes, manualReset uint32, initialState uint32, name *uint16) (handle Handle, err error) {
	r0, _, e1 := syscall.Syscall6(procCreateEventW.Addr(), 4, uintptr(unsafe.Pointer(eventAttrs)), uintptr(manualReset), uintptr(initialState), uintptr(unsafe.Pointer(name)), 0, 0)
	handle = Handle(r0)
	if handle == 0 || e1 == ERROR_ALREADY_EXISTS {
		err = errnoErr(e1)
	}
	return
}

func CreateFileMapping(fhandle Handle, sa *SecurityAttributes, prot uint32, maxSizeHigh uint32, maxSizeLow uint32, name *uint16) (handle Handle, err error) {
	r0, _, e1 := syscall.Syscall6(procCreateFileMappingW.Addr(), 6, uintptr(fhandle), uintptr(unsafe.Pointer(sa)), uintptr(prot), uintptr(maxSizeHigh), uintptr(maxSizeLow), uintptr(unsafe.Pointer(name)))
	handle = Handle(r0)
	if handle == 0 || e1 == ERROR_ALREADY_EXISTS {
		err = errnoErr(e1)
	}
	return
}

func CreateFile(name *uint16, access uint32, mode uint32, sa *SecurityAttributes, createmode uint32, attrs uint32, templatefile Handle) (handle Handle, err error) {
	r0, _, e1 := syscall.Syscall9(procCreateFileW.Addr(), 7, uintptr(unsafe.Pointer(name)), uintptr(access), uintptr(mode), uintptr(unsafe.Pointer(sa)), uintptr(createmode), uintptr(attrs), uintptr(templatefile), 0, 0)
	handle = Handle(r0)
	if handle == InvalidHandle {
		err = errnoErr(e1)
	}
	return
}

func CreateHardLink(filename *uint16, existingfilename *uint16, reserved uintptr) (err error) {
	r1, _, e1 := syscall.Syscall(procCreateHardLinkW.Addr(), 3, uintptr(unsafe.Pointer(filename)), uintptr(unsafe.Pointer(existingfilename)), uintptr(reserved))
	if r1&0xff == 0 {
		err = errnoErr(e1)
	}
	return
}

func CreateIoCompletionPort(filehandle Handle, cphandle Handle, key uintptr, threadcnt uint32) (handle Handle, err error) {
	r0, _, e1 := syscall.Syscall6(procCreateIoCompletionPort.Addr(), 4, uintptr(filehandle), uintptr(cphandle), uintptr(key), uintptr(threadcnt), 0, 0)
	handle = Handle(r0)
	if handle == 0 {
		err = errnoErr(e1)
	}
	return
}

func CreateJobObject(jobAttr *SecurityAttributes, name *uint16) (handle Handle, err error) {
	r0, _, e1 := syscall.Syscall(procCreateJobObjectW.Addr(), 2, uintptr(unsafe.Pointer(jobAttr)), uintptr(unsafe.Pointer(name)), 0)
	handle = Handle(r0)
	if handle == 0 {
		err = errnoErr(e1)
	}
	return
}

func CreateMutexEx(mutexAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) {
	r0, _, e1 := syscall.Syscall6(procCreateMutexExW.Addr(), 4, uintptr(unsafe.Pointer(mutexAttrs)), uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(desiredAccess), 0, 0)
	handle = Handle(r0)
	if handle == 0 || e1 == ERROR_ALREADY_EXISTS {
		err = errnoErr(e1)
	}
	return
}

func CreateMutex(mutexAttrs *SecurityAttributes, initialOwner bool, name *uint16) (handle Handle, err error) {
	var _p0 uint32
	if initialOwner {
		_p0 = 1
	}
	r0, _, e1 := syscall.Syscall(procCreateMutexW.Addr(), 3, uintptr(unsafe.Pointer(mutexAttrs)), uintptr(_p0), uintptr(unsafe.Pointer(name)))
	handle = Handle(r0)
	if handle == 0 || e1 == ERROR_ALREADY_EXISTS {
		err = errnoErr(e1)
	}
	return
}

func CreateNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *SecurityAttributes) (handle Handle, err error) {
	r0, _, e1 := syscall.Syscall9(procCreateNamedPipeW.Addr(), 8, uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(pipeMode), uintptr(maxInstances), uintptr(outSize), uintptr(inSize), uintptr(defaultTimeout), uintptr(unsafe.Pointer(sa)), 0)
	handle = Handle(r0)
	if handle == InvalidHandle {
		err = errnoErr(e1)
	}
	return
}

func CreatePipe(readhandle *Handle, writehandle *Handle, sa *SecurityAttributes, size uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procCreatePipe.Addr(), 4, uintptr(unsafe.Pointer(readhandle)), uintptr(unsafe.Pointer(writehandle)), uintptr(unsafe.Pointer(sa)), uintptr(size), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func CreateProcess(appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) {
	var _p0 uint32
	if inheritHandles {
		_p0 = 1
	}
	r1, _, e1 := syscall.Syscall12(procCreateProcessW.Addr(), 10, uintptr(unsafe.Pointer(appName)), uintptr(unsafe.Pointer(commandLine)), uintptr(unsafe.Pointer(procSecurity)), uintptr(unsafe.Pointer(threadSecurity)), uintptr(_p0), uintptr(creationFlags), uintptr(unsafe.Pointer(env)), uintptr(unsafe.Pointer(currentDir)), uintptr(unsafe.Pointer(startupInfo)), uintptr(unsafe.Pointer(outProcInfo)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func CreateSymbolicLink(symlinkfilename *uint16, targetfilename *uint16, flags uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procCreateSymbolicLinkW.Addr(), 3, uintptr(unsafe.Pointer(symlinkfilename)), uintptr(unsafe.Pointer(targetfilename)), uintptr(flags))
	if r1&0xff == 0 {
		err = errnoErr(e1)
	}
	return
}

func CreateToolhelp32Snapshot(flags uint32, processId uint32) (handle Handle, err error) {
	r0, _, e1 := syscall.Syscall(procCreateToolhelp32Snapshot.Addr(), 2, uintptr(flags), uintptr(processId), 0)
	handle = Handle(r0)
	if handle == InvalidHandle {
		err = errnoErr(e1)
	}
	return
}

func DefineDosDevice(flags uint32, deviceName *uint16, targetPath *uint16) (err error) {
	r1, _, e1 := syscall.Syscall(procDefineDosDeviceW.Addr(), 3, uintptr(flags), uintptr(unsafe.Pointer(deviceName)), uintptr(unsafe.Pointer(targetPath)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func DeleteFile(path *uint16) (err error) {
	r1, _, e1 := syscall.Syscall(procDeleteFileW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func deleteProcThreadAttributeList(attrlist *ProcThreadAttributeList) {
	syscall.Syscall(procDeleteProcThreadAttributeList.Addr(), 1, uintptr(unsafe.Pointer(attrlist)), 0, 0)
	return
}

func DeleteVolumeMountPoint(volumeMountPoint *uint16) (err error) {
	r1, _, e1 := syscall.Syscall(procDeleteVolumeMountPointW.Addr(), 1, uintptr(unsafe.Pointer(volumeMountPoint)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func DeviceIoControl(handle Handle, ioControlCode uint32, inBuffer *byte, inBufferSize uint32, outBuffer *byte, outBufferSize uint32, bytesReturned *uint32, overlapped *Overlapped) (err error) {
	r1, _, e1 := syscall.Syscall9(procDeviceIoControl.Addr(), 8, uintptr(handle), uintptr(ioControlCode), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferSize), uintptr(unsafe.Pointer(outBuffer)), uintptr(outBufferSize), uintptr(unsafe.Pointer(bytesReturned)), uintptr(unsafe.Pointer(overlapped)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func DuplicateHandle(hSourceProcessHandle Handle, hSourceHandle Handle, hTargetProcessHandle Handle, lpTargetHandle *Handle, dwDesiredAccess uint32, bInheritHandle bool, dwOptions uint32) (err error) {
	var _p0 uint32
	if bInheritHandle {
		_p0 = 1
	}
	r1, _, e1 := syscall.Syscall9(procDuplicateHandle.Addr(), 7, uintptr(hSourceProcessHandle), uintptr(hSourceHandle), uintptr(hTargetProcessHandle), uintptr(unsafe.Pointer(lpTargetHandle)), uintptr(dwDesiredAccess), uintptr(_p0), uintptr(dwOptions), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func ExitProcess(exitcode uint32) {
	syscall.Syscall(procExitProcess.Addr(), 1, uintptr(exitcode), 0, 0)
	return
}

func ExpandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, err error) {
	r0, _, e1 := syscall.Syscall(procExpandEnvironmentStringsW.Addr(), 3, uintptr(unsafe.Pointer(src)), uintptr(unsafe.Pointer(dst)), uintptr(size))
	n = uint32(r0)
	if n == 0 {
		err = errnoErr(e1)
	}
	return
}

func FindClose(handle Handle) (err error) {
	r1, _, e1 := syscall.Syscall(procFindClose.Addr(), 1, uintptr(handle), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func FindCloseChangeNotification(handle Handle) (err error) {
	r1, _, e1 := syscall.Syscall(procFindCloseChangeNotification.Addr(), 1, uintptr(handle), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func FindFirstChangeNotification(path string, watchSubtree bool, notifyFilter uint32) (handle Handle, err error) {
	var _p0 *uint16
	_p0, err = syscall.UTF16PtrFromString(path)
	if err != nil {
		return
	}
	return _FindFirstChangeNotification(_p0, watchSubtree, notifyFilter)
}

func _FindFirstChangeNotification(path *uint16, watchSubtree bool, notifyFilter uint32) (handle Handle, err error) {
	var _p1 uint32
	if watchSubtree {
		_p1 = 1
	}
	r0, _, e1 := syscall.Syscall(procFindFirstChangeNotificationW.Addr(), 3, uintptr(unsafe.Pointer(path)), uintptr(_p1), uintptr(notifyFilter))
	handle = Handle(r0)
	if handle == InvalidHandle {
		err = errnoErr(e1)
	}
	return
}

func findFirstFile1(name *uint16, data *win32finddata1) (handle Handle, err error) {
	r0, _, e1 := syscall.Syscall(procFindFirstFileW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(data)), 0)
	handle = Handle(r0)
	if handle == InvalidHandle {
		err = errnoErr(e1)
	}
	return
}

func FindFirstVolumeMountPoint(rootPathName *uint16, volumeMountPoint *uint16, bufferLength uint32) (handle Handle, err error) {
	r0, _, e1 := syscall.Syscall(procFindFirstVolumeMountPointW.Addr(), 3, uintptr(unsafe.Pointer(rootPathName)), uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(bufferLength))
	handle = Handle(r0)
	if handle == InvalidHandle {
		err = errnoErr(e1)
	}
	return
}

func FindFirstVolume(volumeName *uint16, bufferLength uint32) (handle Handle, err error) {
	r0, _, e1 := syscall.Syscall(procFindFirstVolumeW.Addr(), 2, uintptr(unsafe.Pointer(volumeName)), uintptr(bufferLength), 0)
	handle = Handle(r0)
	if handle == InvalidHandle {
		err = errnoErr(e1)
	}
	return
}

func FindNextChangeNotification(handle Handle) (err error) {
	r1, _, e1 := syscall.Syscall(procFindNextChangeNotification.Addr(), 1, uintptr(handle), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func findNextFile1(handle Handle, data *win32finddata1) (err error) {
	r1, _, e1 := syscall.Syscall(procFindNextFileW.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(data)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func FindNextVolumeMountPoint(findVolumeMountPoint Handle, volumeMountPoint *uint16, bufferLength uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procFindNextVolumeMountPointW.Addr(), 3, uintptr(findVolumeMountPoint), uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(bufferLength))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func FindNextVolume(findVolume Handle, volumeName *uint16, bufferLength uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procFindNextVolumeW.Addr(), 3, uintptr(findVolume), uintptr(unsafe.Pointer(volumeName)), uintptr(bufferLength))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func findResource(module Handle, name uintptr, resType uintptr) (resInfo Handle, err error) {
	r0, _, e1 := syscall.Syscall(procFindResourceW.Addr(), 3, uintptr(module), uintptr(name), uintptr(resType))
	resInfo = Handle(r0)
	if resInfo == 0 {
		err = errnoErr(e1)
	}
	return
}

func FindVolumeClose(findVolume Handle) (err error) {
	r1, _, e1 := syscall.Syscall(procFindVolumeClose.Addr(), 1, uintptr(findVolume), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func FindVolumeMountPointClose(findVolumeMountPoint Handle) (err error) {
	r1, _, e1 := syscall.Syscall(procFindVolumeMountPointClose.Addr(), 1, uintptr(findVolumeMountPoint), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func FlushFileBuffers(handle Handle) (err error) {
	r1, _, e1 := syscall.Syscall(procFlushFileBuffers.Addr(), 1, uintptr(handle), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func FlushViewOfFile(addr uintptr, length uintptr) (err error) {
	r1, _, e1 := syscall.Syscall(procFlushViewOfFile.Addr(), 2, uintptr(addr), uintptr(length), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func FormatMessage(flags uint32, msgsrc uintptr, msgid uint32, langid uint32, buf []uint16, args *byte) (n uint32, err error) {
	var _p0 *uint16
	if len(buf) > 0 {
		_p0 = &buf[0]
	}
	r0, _, e1 := syscall.Syscall9(procFormatMessageW.Addr(), 7, uintptr(flags), uintptr(msgsrc), uintptr(msgid), uintptr(langid), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(args)), 0, 0)
	n = uint32(r0)
	if n == 0 {
		err = errnoErr(e1)
	}
	return
}

func FreeEnvironmentStrings(envs *uint16) (err error) {
	r1, _, e1 := syscall.Syscall(procFreeEnvironmentStringsW.Addr(), 1, uintptr(unsafe.Pointer(envs)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func FreeLibrary(handle Handle) (err error) {
	r1, _, e1 := syscall.Syscall(procFreeLibrary.Addr(), 1, uintptr(handle), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GenerateConsoleCtrlEvent(ctrlEvent uint32, processGroupID uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procGenerateConsoleCtrlEvent.Addr(), 2, uintptr(ctrlEvent), uintptr(processGroupID), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetACP() (acp uint32) {
	r0, _, _ := syscall.Syscall(procGetACP.Addr(), 0, 0, 0, 0)
	acp = uint32(r0)
	return
}

func GetActiveProcessorCount(groupNumber uint16) (ret uint32) {
	r0, _, _ := syscall.Syscall(procGetActiveProcessorCount.Addr(), 1, uintptr(groupNumber), 0, 0)
	ret = uint32(r0)
	return
}

func GetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) {
	r1, _, e1 := syscall.Syscall(procGetCommTimeouts.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(timeouts)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetCommandLine() (cmd *uint16) {
	r0, _, _ := syscall.Syscall(procGetCommandLineW.Addr(), 0, 0, 0, 0)
	cmd = (*uint16)(unsafe.Pointer(r0))
	return
}

func GetComputerNameEx(nametype uint32, buf *uint16, n *uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procGetComputerNameExW.Addr(), 3, uintptr(nametype), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(n)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetComputerName(buf *uint16, n *uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procGetComputerNameW.Addr(), 2, uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(n)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetConsoleMode(console Handle, mode *uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(console), uintptr(unsafe.Pointer(mode)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetConsoleScreenBufferInfo(console Handle, info *ConsoleScreenBufferInfo) (err error) {
	r1, _, e1 := syscall.Syscall(procGetConsoleScreenBufferInfo.Addr(), 2, uintptr(console), uintptr(unsafe.Pointer(info)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetCurrentDirectory(buflen uint32, buf *uint16) (n uint32, err error) {
	r0, _, e1 := syscall.Syscall(procGetCurrentDirectoryW.Addr(), 2, uintptr(buflen), uintptr(unsafe.Pointer(buf)), 0)
	n = uint32(r0)
	if n == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetCurrentProcessId() (pid uint32) {
	r0, _, _ := syscall.Syscall(procGetCurrentProcessId.Addr(), 0, 0, 0, 0)
	pid = uint32(r0)
	return
}

func GetCurrentThreadId() (id uint32) {
	r0, _, _ := syscall.Syscall(procGetCurrentThreadId.Addr(), 0, 0, 0, 0)
	id = uint32(r0)
	return
}

func GetDiskFreeSpaceEx(directoryName *uint16, freeBytesAvailableToCaller *uint64, totalNumberOfBytes *uint64, totalNumberOfFreeBytes *uint64) (err error) {
	r1, _, e1 := syscall.Syscall6(procGetDiskFreeSpaceExW.Addr(), 4, uintptr(unsafe.Pointer(directoryName)), uintptr(unsafe.Pointer(freeBytesAvailableToCaller)), uintptr(unsafe.Pointer(totalNumberOfBytes)), uintptr(unsafe.Pointer(totalNumberOfFreeBytes)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetDriveType(rootPathName *uint16) (driveType uint32) {
	r0, _, _ := syscall.Syscall(procGetDriveTypeW.Addr(), 1, uintptr(unsafe.Pointer(rootPathName)), 0, 0)
	driveType = uint32(r0)
	return
}

func GetEnvironmentStrings() (envs *uint16, err error) {
	r0, _, e1 := syscall.Syscall(procGetEnvironmentStringsW.Addr(), 0, 0, 0, 0)
	envs = (*uint16)(unsafe.Pointer(r0))
	if envs == nil {
		err = errnoErr(e1)
	}
	return
}

func GetEnvironmentVariable(name *uint16, buffer *uint16, size uint32) (n uint32, err error) {
	r0, _, e1 := syscall.Syscall(procGetEnvironmentVariableW.Addr(), 3, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buffer)), uintptr(size))
	n = uint32(r0)
	if n == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetExitCodeProcess(handle Handle, exitcode *uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procGetExitCodeProcess.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(exitcode)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetFileAttributesEx(name *uint16, level uint32, info *byte) (err error) {
	r1, _, e1 := syscall.Syscall(procGetFileAttributesExW.Addr(), 3, uintptr(unsafe.Pointer(name)), uintptr(level), uintptr(unsafe.Pointer(info)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetFileAttributes(name *uint16) (attrs uint32, err error) {
	r0, _, e1 := syscall.Syscall(procGetFileAttributesW.Addr(), 1, uintptr(unsafe.Pointer(name)), 0, 0)
	attrs = uint32(r0)
	if attrs == INVALID_FILE_ATTRIBUTES {
		err = errnoErr(e1)
	}
	return
}

func GetFileInformationByHandle(handle Handle, data *ByHandleFileInformation) (err error) {
	r1, _, e1 := syscall.Syscall(procGetFileInformationByHandle.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(data)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetFileInformationByHandleEx(handle Handle, class uint32, outBuffer *byte, outBufferLen uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procGetFileInformationByHandleEx.Addr(), 4, uintptr(handle), uintptr(class), uintptr(unsafe.Pointer(outBuffer)), uintptr(outBufferLen), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetFileType(filehandle Handle) (n uint32, err error) {
	r0, _, e1 := syscall.Syscall(procGetFileType.Addr(), 1, uintptr(filehandle), 0, 0)
	n = uint32(r0)
	if n == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetFinalPathNameByHandle(file Handle, filePath *uint16, filePathSize uint32, flags uint32) (n uint32, err error) {
	r0, _, e1 := syscall.Syscall6(procGetFinalPathNameByHandleW.Addr(), 4, uintptr(file), uintptr(unsafe.Pointer(filePath)), uintptr(filePathSize), uintptr(flags), 0, 0)
	n = uint32(r0)
	if n == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetFullPathName(path *uint16, buflen uint32, buf *uint16, fname **uint16) (n uint32, err error) {
	r0, _, e1 := syscall.Syscall6(procGetFullPathNameW.Addr(), 4, uintptr(unsafe.Pointer(path)), uintptr(buflen), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(fname)), 0, 0)
	n = uint32(r0)
	if n == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetLargePageMinimum() (size uintptr) {
	r0, _, _ := syscall.Syscall(procGetLargePageMinimum.Addr(), 0, 0, 0, 0)
	size = uintptr(r0)
	return
}

func GetLastError() (lasterr error) {
	r0, _, _ := syscall.Syscall(procGetLastError.Addr(), 0, 0, 0, 0)
	if r0 != 0 {
		lasterr = syscall.Errno(r0)
	}
	return
}

func GetLogicalDriveStrings(bufferLength uint32, buffer *uint16) (n uint32, err error) {
	r0, _, e1 := syscall.Syscall(procGetLogicalDriveStringsW.Addr(), 2, uintptr(bufferLength), uintptr(unsafe.Pointer(buffer)), 0)
	n = uint32(r0)
	if n == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetLogicalDrives() (drivesBitMask uint32, err error) {
	r0, _, e1 := syscall.Syscall(procGetLogicalDrives.Addr(), 0, 0, 0, 0)
	drivesBitMask = uint32(r0)
	if drivesBitMask == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetLongPathName(path *uint16, buf *uint16, buflen uint32) (n uint32, err error) {
	r0, _, e1 := syscall.Syscall(procGetLongPathNameW.Addr(), 3, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(buf)), uintptr(buflen))
	n = uint32(r0)
	if n == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetMaximumProcessorCount(groupNumber uint16) (ret uint32) {
	r0, _, _ := syscall.Syscall(procGetMaximumProcessorCount.Addr(), 1, uintptr(groupNumber), 0, 0)
	ret = uint32(r0)
	return
}

func GetModuleFileName(module Handle, filename *uint16, size uint32) (n uint32, err error) {
	r0, _, e1 := syscall.Syscall(procGetModuleFileNameW.Addr(), 3, uintptr(module), uintptr(unsafe.Pointer(filename)), uintptr(size))
	n = uint32(r0)
	if n == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetModuleHandleEx(flags uint32, moduleName *uint16, module *Handle) (err error) {
	r1, _, e1 := syscall.Syscall(procGetModuleHandleExW.Addr(), 3, uintptr(flags), uintptr(unsafe.Pointer(moduleName)), uintptr(unsafe.Pointer(module)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetNamedPipeHandleState(pipe Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) {
	r1, _, e1 := syscall.Syscall9(procGetNamedPipeHandleStateW.Addr(), 7, uintptr(pipe), uintptr(unsafe.Pointer(state)), uintptr(unsafe.Pointer(curInstances)), uintptr(unsafe.Pointer(maxCollectionCount)), uintptr(unsafe.Pointer(collectDataTimeout)), uintptr(unsafe.Pointer(userName)), uintptr(maxUserNameSize), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetNamedPipeInfo(pipe Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procGetNamedPipeInfo.Addr(), 5, uintptr(pipe), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(outSize)), uintptr(unsafe.Pointer(inSize)), uintptr(unsafe.Pointer(maxInstances)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetOverlappedResult(handle Handle, overlapped *Overlapped, done *uint32, wait bool) (err error) {
	var _p0 uint32
	if wait {
		_p0 = 1
	}
	r1, _, e1 := syscall.Syscall6(procGetOverlappedResult.Addr(), 4, uintptr(handle), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(done)), uintptr(_p0), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetPriorityClass(process Handle) (ret uint32, err error) {
	r0, _, e1 := syscall.Syscall(procGetPriorityClass.Addr(), 1, uintptr(process), 0, 0)
	ret = uint32(r0)
	if ret == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetProcAddress(module Handle, procname string) (proc uintptr, err error) {
	var _p0 *byte
	_p0, err = syscall.BytePtrFromString(procname)
	if err != nil {
		return
	}
	return _GetProcAddress(module, _p0)
}

func _GetProcAddress(module Handle, procname *byte) (proc uintptr, err error) {
	r0, _, e1 := syscall.Syscall(procGetProcAddress.Addr(), 2, uintptr(module), uintptr(unsafe.Pointer(procname)), 0)
	proc = uintptr(r0)
	if proc == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetProcessId(process Handle) (id uint32, err error) {
	r0, _, e1 := syscall.Syscall(procGetProcessId.Addr(), 1, uintptr(process), 0, 0)
	id = uint32(r0)
	if id == 0 {
		err = errnoErr(e1)
	}
	return
}

func getProcessPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procGetProcessPreferredUILanguages.Addr(), 4, uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetProcessShutdownParameters(level *uint32, flags *uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procGetProcessShutdownParameters.Addr(), 2, uintptr(unsafe.Pointer(level)), uintptr(unsafe.Pointer(flags)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetProcessTimes(handle Handle, creationTime *Filetime, exitTime *Filetime, kernelTime *Filetime, userTime *Filetime) (err error) {
	r1, _, e1 := syscall.Syscall6(procGetProcessTimes.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(creationTime)), uintptr(unsafe.Pointer(exitTime)), uintptr(unsafe.Pointer(kernelTime)), uintptr(unsafe.Pointer(userTime)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetProcessWorkingSetSizeEx(hProcess Handle, lpMinimumWorkingSetSize *uintptr, lpMaximumWorkingSetSize *uintptr, flags *uint32) {
	syscall.Syscall6(procGetProcessWorkingSetSizeEx.Addr(), 4, uintptr(hProcess), uintptr(unsafe.Pointer(lpMinimumWorkingSetSize)), uintptr(unsafe.Pointer(lpMaximumWorkingSetSize)), uintptr(unsafe.Pointer(flags)), 0, 0)
	return
}

func GetQueuedCompletionStatus(cphandle Handle, qty *uint32, key *uintptr, overlapped **Overlapped, timeout uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procGetQueuedCompletionStatus.Addr(), 5, uintptr(cphandle), uintptr(unsafe.Pointer(qty)), uintptr(unsafe.Pointer(key)), uintptr(unsafe.Pointer(overlapped)), uintptr(timeout), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetShortPathName(longpath *uint16, shortpath *uint16, buflen uint32) (n uint32, err error) {
	r0, _, e1 := syscall.Syscall(procGetShortPathNameW.Addr(), 3, uintptr(unsafe.Pointer(longpath)), uintptr(unsafe.Pointer(shortpath)), uintptr(buflen))
	n = uint32(r0)
	if n == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetStartupInfo(startupInfo *StartupInfo) (err error) {
	r1, _, e1 := syscall.Syscall(procGetStartupInfoW.Addr(), 1, uintptr(unsafe.Pointer(startupInfo)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetStdHandle(stdhandle uint32) (handle Handle, err error) {
	r0, _, e1 := syscall.Syscall(procGetStdHandle.Addr(), 1, uintptr(stdhandle), 0, 0)
	handle = Handle(r0)
	if handle == InvalidHandle {
		err = errnoErr(e1)
	}
	return
}

func getSystemDirectory(dir *uint16, dirLen uint32) (len uint32, err error) {
	r0, _, e1 := syscall.Syscall(procGetSystemDirectoryW.Addr(), 2, uintptr(unsafe.Pointer(dir)), uintptr(dirLen), 0)
	len = uint32(r0)
	if len == 0 {
		err = errnoErr(e1)
	}
	return
}

func getSystemPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procGetSystemPreferredUILanguages.Addr(), 4, uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetSystemTimeAsFileTime(time *Filetime) {
	syscall.Syscall(procGetSystemTimeAsFileTime.Addr(), 1, uintptr(unsafe.Pointer(time)), 0, 0)
	return
}

func GetSystemTimePreciseAsFileTime(time *Filetime) {
	syscall.Syscall(procGetSystemTimePreciseAsFileTime.Addr(), 1, uintptr(unsafe.Pointer(time)), 0, 0)
	return
}

func getSystemWindowsDirectory(dir *uint16, dirLen uint32) (len uint32, err error) {
	r0, _, e1 := syscall.Syscall(procGetSystemWindowsDirectoryW.Addr(), 2, uintptr(unsafe.Pointer(dir)), uintptr(dirLen), 0)
	len = uint32(r0)
	if len == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetTempPath(buflen uint32, buf *uint16) (n uint32, err error) {
	r0, _, e1 := syscall.Syscall(procGetTempPathW.Addr(), 2, uintptr(buflen), uintptr(unsafe.Pointer(buf)), 0)
	n = uint32(r0)
	if n == 0 {
		err = errnoErr(e1)
	}
	return
}

func getThreadPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procGetThreadPreferredUILanguages.Addr(), 4, uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func getTickCount64() (ms uint64) {
	r0, _, _ := syscall.Syscall(procGetTickCount64.Addr(), 0, 0, 0, 0)
	ms = uint64(r0)
	return
}

func GetTimeZoneInformation(tzi *Timezoneinformation) (rc uint32, err error) {
	r0, _, e1 := syscall.Syscall(procGetTimeZoneInformation.Addr(), 1, uintptr(unsafe.Pointer(tzi)), 0, 0)
	rc = uint32(r0)
	if rc == 0xffffffff {
		err = errnoErr(e1)
	}
	return
}

func getUserPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procGetUserPreferredUILanguages.Addr(), 4, uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetVersion() (ver uint32, err error) {
	r0, _, e1 := syscall.Syscall(procGetVersion.Addr(), 0, 0, 0, 0)
	ver = uint32(r0)
	if ver == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetVolumeInformationByHandle(file Handle, volumeNameBuffer *uint16, volumeNameSize uint32, volumeNameSerialNumber *uint32, maximumComponentLength *uint32, fileSystemFlags *uint32, fileSystemNameBuffer *uint16, fileSystemNameSize uint32) (err error) {
	r1, _, e1 := syscall.Syscall9(procGetVolumeInformationByHandleW.Addr(), 8, uintptr(file), uintptr(unsafe.Pointer(volumeNameBuffer)), uintptr(volumeNameSize), uintptr(unsafe.Pointer(volumeNameSerialNumber)), uintptr(unsafe.Pointer(maximumComponentLength)), uintptr(unsafe.Pointer(fileSystemFlags)), uintptr(unsafe.Pointer(fileSystemNameBuffer)), uintptr(fileSystemNameSize), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetVolumeInformation(rootPathName *uint16, volumeNameBuffer *uint16, volumeNameSize uint32, volumeNameSerialNumber *uint32, maximumComponentLength *uint32, fileSystemFlags *uint32, fileSystemNameBuffer *uint16, fileSystemNameSize uint32) (err error) {
	r1, _, e1 := syscall.Syscall9(procGetVolumeInformationW.Addr(), 8, uintptr(unsafe.Pointer(rootPathName)), uintptr(unsafe.Pointer(volumeNameBuffer)), uintptr(volumeNameSize), uintptr(unsafe.Pointer(volumeNameSerialNumber)), uintptr(unsafe.Pointer(maximumComponentLength)), uintptr(unsafe.Pointer(fileSystemFlags)), uintptr(unsafe.Pointer(fileSystemNameBuffer)), uintptr(fileSystemNameSize), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetVolumeNameForVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16, bufferlength uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procGetVolumeNameForVolumeMountPointW.Addr(), 3, uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(unsafe.Pointer(volumeName)), uintptr(bufferlength))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetVolumePathName(fileName *uint16, volumePathName *uint16, bufferLength uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procGetVolumePathNameW.Addr(), 3, uintptr(unsafe.Pointer(fileName)), uintptr(unsafe.Pointer(volumePathName)), uintptr(bufferLength))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetVolumePathNamesForVolumeName(volumeName *uint16, volumePathNames *uint16, bufferLength uint32, returnLength *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procGetVolumePathNamesForVolumeNameW.Addr(), 4, uintptr(unsafe.Pointer(volumeName)), uintptr(unsafe.Pointer(volumePathNames)), uintptr(bufferLength), uintptr(unsafe.Pointer(returnLength)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func getWindowsDirectory(dir *uint16, dirLen uint32) (len uint32, err error) {
	r0, _, e1 := syscall.Syscall(procGetWindowsDirectoryW.Addr(), 2, uintptr(unsafe.Pointer(dir)), uintptr(dirLen), 0)
	len = uint32(r0)
	if len == 0 {
		err = errnoErr(e1)
	}
	return
}

func initializeProcThreadAttributeList(attrlist *ProcThreadAttributeList, attrcount uint32, flags uint32, size *uintptr) (err error) {
	r1, _, e1 := syscall.Syscall6(procInitializeProcThreadAttributeList.Addr(), 4, uintptr(unsafe.Pointer(attrlist)), uintptr(attrcount), uintptr(flags), uintptr(unsafe.Pointer(size)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func IsWow64Process(handle Handle, isWow64 *bool) (err error) {
	var _p0 uint32
	if *isWow64 {
		_p0 = 1
	}
	r1, _, e1 := syscall.Syscall(procIsWow64Process.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(&_p0)), 0)
	*isWow64 = _p0 != 0
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func IsWow64Process2(handle Handle, processMachine *uint16, nativeMachine *uint16) (err error) {
	err = procIsWow64Process2.Find()
	if err != nil {
		return
	}
	r1, _, e1 := syscall.Syscall(procIsWow64Process2.Addr(), 3, uintptr(handle), uintptr(unsafe.Pointer(processMachine)), uintptr(unsafe.Pointer(nativeMachine)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func LoadLibraryEx(libname string, zero Handle, flags uintptr) (handle Handle, err error) {
	var _p0 *uint16
	_p0, err = syscall.UTF16PtrFromString(libname)
	if err != nil {
		return
	}
	return _LoadLibraryEx(_p0, zero, flags)
}

func _LoadLibraryEx(libname *uint16, zero Handle, flags uintptr) (handle Handle, err error) {
	r0, _, e1 := syscall.Syscall(procLoadLibraryExW.Addr(), 3, uintptr(unsafe.Pointer(libname)), uintptr(zero), uintptr(flags))
	handle = Handle(r0)
	if handle == 0 {
		err = errnoErr(e1)
	}
	return
}

func LoadLibrary(libname string) (handle Handle, err error) {
	var _p0 *uint16
	_p0, err = syscall.UTF16PtrFromString(libname)
	if err != nil {
		return
	}
	return _LoadLibrary(_p0)
}

func _LoadLibrary(libname *uint16) (handle Handle, err error) {
	r0, _, e1 := syscall.Syscall(procLoadLibraryW.Addr(), 1, uintptr(unsafe.Pointer(libname)), 0, 0)
	handle = Handle(r0)
	if handle == 0 {
		err = errnoErr(e1)
	}
	return
}

func LoadResource(module Handle, resInfo Handle) (resData Handle, err error) {
	r0, _, e1 := syscall.Syscall(procLoadResource.Addr(), 2, uintptr(module), uintptr(resInfo), 0)
	resData = Handle(r0)
	if resData == 0 {
		err = errnoErr(e1)
	}
	return
}

func LocalAlloc(flags uint32, length uint32) (ptr uintptr, err error) {
	r0, _, e1 := syscall.Syscall(procLocalAlloc.Addr(), 2, uintptr(flags), uintptr(length), 0)
	ptr = uintptr(r0)
	if ptr == 0 {
		err = errnoErr(e1)
	}
	return
}

func LocalFree(hmem Handle) (handle Handle, err error) {
	r0, _, e1 := syscall.Syscall(procLocalFree.Addr(), 1, uintptr(hmem), 0, 0)
	handle = Handle(r0)
	if handle != 0 {
		err = errnoErr(e1)
	}
	return
}

func LockFileEx(file Handle, flags uint32, reserved uint32, bytesLow uint32, bytesHigh uint32, overlapped *Overlapped) (err error) {
	r1, _, e1 := syscall.Syscall6(procLockFileEx.Addr(), 6, uintptr(file), uintptr(flags), uintptr(reserved), uintptr(bytesLow), uintptr(bytesHigh), uintptr(unsafe.Pointer(overlapped)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func LockResource(resData Handle) (addr uintptr, err error) {
	r0, _, e1 := syscall.Syscall(procLockResource.Addr(), 1, uintptr(resData), 0, 0)
	addr = uintptr(r0)
	if addr == 0 {
		err = errnoErr(e1)
	}
	return
}

func MapViewOfFile(handle Handle, access uint32, offsetHigh uint32, offsetLow uint32, length uintptr) (addr uintptr, err error) {
	r0, _, e1 := syscall.Syscall6(procMapViewOfFile.Addr(), 5, uintptr(handle), uintptr(access), uintptr(offsetHigh), uintptr(offsetLow), uintptr(length), 0)
	addr = uintptr(r0)
	if addr == 0 {
		err = errnoErr(e1)
	}
	return
}

func Module32First(snapshot Handle, moduleEntry *ModuleEntry32) (err error) {
	r1, _, e1 := syscall.Syscall(procModule32FirstW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(moduleEntry)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func Module32Next(snapshot Handle, moduleEntry *ModuleEntry32) (err error) {
	r1, _, e1 := syscall.Syscall(procModule32NextW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(moduleEntry)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func MoveFileEx(from *uint16, to *uint16, flags uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procMoveFileExW.Addr(), 3, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(to)), uintptr(flags))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func MoveFile(from *uint16, to *uint16) (err error) {
	r1, _, e1 := syscall.Syscall(procMoveFileW.Addr(), 2, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(to)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func MultiByteToWideChar(codePage uint32, dwFlags uint32, str *byte, nstr int32, wchar *uint16, nwchar int32) (nwrite int32, err error) {
	r0, _, e1 := syscall.Syscall6(procMultiByteToWideChar.Addr(), 6, uintptr(codePage), uintptr(dwFlags), uintptr(unsafe.Pointer(str)), uintptr(nstr), uintptr(unsafe.Pointer(wchar)), uintptr(nwchar))
	nwrite = int32(r0)
	if nwrite == 0 {
		err = errnoErr(e1)
	}
	return
}

func OpenEvent(desiredAccess uint32, inheritHandle bool, name *uint16) (handle Handle, err error) {
	var _p0 uint32
	if inheritHandle {
		_p0 = 1
	}
	r0, _, e1 := syscall.Syscall(procOpenEventW.Addr(), 3, uintptr(desiredAccess), uintptr(_p0), uintptr(unsafe.Pointer(name)))
	handle = Handle(r0)
	if handle == 0 {
		err = errnoErr(e1)
	}
	return
}

func OpenMutex(desiredAccess uint32, inheritHandle bool, name *uint16) (handle Handle, err error) {
	var _p0 uint32
	if inheritHandle {
		_p0 = 1
	}
	r0, _, e1 := syscall.Syscall(procOpenMutexW.Addr(), 3, uintptr(desiredAccess), uintptr(_p0), uintptr(unsafe.Pointer(name)))
	handle = Handle(r0)
	if handle == 0 {
		err = errnoErr(e1)
	}
	return
}

func OpenProcess(desiredAccess uint32, inheritHandle bool, processId uint32) (handle Handle, err error) {
	var _p0 uint32
	if inheritHandle {
		_p0 = 1
	}
	r0, _, e1 := syscall.Syscall(procOpenProcess.Addr(), 3, uintptr(desiredAccess), uintptr(_p0), uintptr(processId))
	handle = Handle(r0)
	if handle == 0 {
		err = errnoErr(e1)
	}
	return
}

func OpenThread(desiredAccess uint32, inheritHandle bool, threadId uint32) (handle Handle, err error) {
	var _p0 uint32
	if inheritHandle {
		_p0 = 1
	}
	r0, _, e1 := syscall.Syscall(procOpenThread.Addr(), 3, uintptr(desiredAccess), uintptr(_p0), uintptr(threadId))
	handle = Handle(r0)
	if handle == 0 {
		err = errnoErr(e1)
	}
	return
}

func PostQueuedCompletionStatus(cphandle Handle, qty uint32, key uintptr, overlapped *Overlapped) (err error) {
	r1, _, e1 := syscall.Syscall6(procPostQueuedCompletionStatus.Addr(), 4, uintptr(cphandle), uintptr(qty), uintptr(key), uintptr(unsafe.Pointer(overlapped)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func Process32First(snapshot Handle, procEntry *ProcessEntry32) (err error) {
	r1, _, e1 := syscall.Syscall(procProcess32FirstW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(procEntry)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func Process32Next(snapshot Handle, procEntry *ProcessEntry32) (err error) {
	r1, _, e1 := syscall.Syscall(procProcess32NextW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(procEntry)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func ProcessIdToSessionId(pid uint32, sessionid *uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procProcessIdToSessionId.Addr(), 2, uintptr(pid), uintptr(unsafe.Pointer(sessionid)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func PulseEvent(event Handle) (err error) {
	r1, _, e1 := syscall.Syscall(procPulseEvent.Addr(), 1, uintptr(event), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func QueryDosDevice(deviceName *uint16, targetPath *uint16, max uint32) (n uint32, err error) {
	r0, _, e1 := syscall.Syscall(procQueryDosDeviceW.Addr(), 3, uintptr(unsafe.Pointer(deviceName)), uintptr(unsafe.Pointer(targetPath)), uintptr(max))
	n = uint32(r0)
	if n == 0 {
		err = errnoErr(e1)
	}
	return
}

func QueryFullProcessImageName(proc Handle, flags uint32, exeName *uint16, size *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procQueryFullProcessImageNameW.Addr(), 4, uintptr(proc), uintptr(flags), uintptr(unsafe.Pointer(exeName)), uintptr(unsafe.Pointer(size)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func QueryInformationJobObject(job Handle, JobObjectInformationClass int32, JobObjectInformation uintptr, JobObjectInformationLength uint32, retlen *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procQueryInformationJobObject.Addr(), 5, uintptr(job), uintptr(JobObjectInformationClass), uintptr(JobObjectInformation), uintptr(JobObjectInformationLength), uintptr(unsafe.Pointer(retlen)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func ReadConsole(console Handle, buf *uint16, toread uint32, read *uint32, inputControl *byte) (err error) {
	r1, _, e1 := syscall.Syscall6(procReadConsoleW.Addr(), 5, uintptr(console), uintptr(unsafe.Pointer(buf)), uintptr(toread), uintptr(unsafe.Pointer(read)), uintptr(unsafe.Pointer(inputControl)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func ReadDirectoryChanges(handle Handle, buf *byte, buflen uint32, watchSubTree bool, mask uint32, retlen *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) {
	var _p0 uint32
	if watchSubTree {
		_p0 = 1
	}
	r1, _, e1 := syscall.Syscall9(procReadDirectoryChangesW.Addr(), 8, uintptr(handle), uintptr(unsafe.Pointer(buf)), uintptr(buflen), uintptr(_p0), uintptr(mask), uintptr(unsafe.Pointer(retlen)), uintptr(unsafe.Pointer(overlapped)), uintptr(completionRoutine), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func readFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) {
	var _p0 *byte
	if len(buf) > 0 {
		_p0 = &buf[0]
	}
	r1, _, e1 := syscall.Syscall6(procReadFile.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(done)), uintptr(unsafe.Pointer(overlapped)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func ReadProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesRead *uintptr) (err error) {
	r1, _, e1 := syscall.Syscall6(procReadProcessMemory.Addr(), 5, uintptr(process), uintptr(baseAddress), uintptr(unsafe.Pointer(buffer)), uintptr(size), uintptr(unsafe.Pointer(numberOfBytesRead)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func ReleaseMutex(mutex Handle) (err error) {
	r1, _, e1 := syscall.Syscall(procReleaseMutex.Addr(), 1, uintptr(mutex), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func RemoveDirectory(path *uint16) (err error) {
	r1, _, e1 := syscall.Syscall(procRemoveDirectoryW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func ResetEvent(event Handle) (err error) {
	r1, _, e1 := syscall.Syscall(procResetEvent.Addr(), 1, uintptr(event), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func ResumeThread(thread Handle) (ret uint32, err error) {
	r0, _, e1 := syscall.Syscall(procResumeThread.Addr(), 1, uintptr(thread), 0, 0)
	ret = uint32(r0)
	if ret == 0xffffffff {
		err = errnoErr(e1)
	}
	return
}

func SetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) {
	r1, _, e1 := syscall.Syscall(procSetCommTimeouts.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(timeouts)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func setConsoleCursorPosition(console Handle, position uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procSetConsoleCursorPosition.Addr(), 2, uintptr(console), uintptr(position), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetConsoleMode(console Handle, mode uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procSetConsoleMode.Addr(), 2, uintptr(console), uintptr(mode), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetCurrentDirectory(path *uint16) (err error) {
	r1, _, e1 := syscall.Syscall(procSetCurrentDirectoryW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetDefaultDllDirectories(directoryFlags uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procSetDefaultDllDirectories.Addr(), 1, uintptr(directoryFlags), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetDllDirectory(path string) (err error) {
	var _p0 *uint16
	_p0, err = syscall.UTF16PtrFromString(path)
	if err != nil {
		return
	}
	return _SetDllDirectory(_p0)
}

func _SetDllDirectory(path *uint16) (err error) {
	r1, _, e1 := syscall.Syscall(procSetDllDirectoryW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetEndOfFile(handle Handle) (err error) {
	r1, _, e1 := syscall.Syscall(procSetEndOfFile.Addr(), 1, uintptr(handle), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetEnvironmentVariable(name *uint16, value *uint16) (err error) {
	r1, _, e1 := syscall.Syscall(procSetEnvironmentVariableW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(value)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetErrorMode(mode uint32) (ret uint32) {
	r0, _, _ := syscall.Syscall(procSetErrorMode.Addr(), 1, uintptr(mode), 0, 0)
	ret = uint32(r0)
	return
}

func SetEvent(event Handle) (err error) {
	r1, _, e1 := syscall.Syscall(procSetEvent.Addr(), 1, uintptr(event), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetFileAttributes(name *uint16, attrs uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procSetFileAttributesW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(attrs), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetFileCompletionNotificationModes(handle Handle, flags uint8) (err error) {
	r1, _, e1 := syscall.Syscall(procSetFileCompletionNotificationModes.Addr(), 2, uintptr(handle), uintptr(flags), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetFileInformationByHandle(handle Handle, class uint32, inBuffer *byte, inBufferLen uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procSetFileInformationByHandle.Addr(), 4, uintptr(handle), uintptr(class), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferLen), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetFilePointer(handle Handle, lowoffset int32, highoffsetptr *int32, whence uint32) (newlowoffset uint32, err error) {
	r0, _, e1 := syscall.Syscall6(procSetFilePointer.Addr(), 4, uintptr(handle), uintptr(lowoffset), uintptr(unsafe.Pointer(highoffsetptr)), uintptr(whence), 0, 0)
	newlowoffset = uint32(r0)
	if newlowoffset == 0xffffffff {
		err = errnoErr(e1)
	}
	return
}

func SetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetime) (err error) {
	r1, _, e1 := syscall.Syscall6(procSetFileTime.Addr(), 4, uintptr(handle), uintptr(unsafe.Pointer(ctime)), uintptr(unsafe.Pointer(atime)), uintptr(unsafe.Pointer(wtime)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetHandleInformation(handle Handle, mask uint32, flags uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procSetHandleInformation.Addr(), 3, uintptr(handle), uintptr(mask), uintptr(flags))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetInformationJobObject(job Handle, JobObjectInformationClass uint32, JobObjectInformation uintptr, JobObjectInformationLength uint32) (ret int, err error) {
	r0, _, e1 := syscall.Syscall6(procSetInformationJobObject.Addr(), 4, uintptr(job), uintptr(JobObjectInformationClass), uintptr(JobObjectInformation), uintptr(JobObjectInformationLength), 0, 0)
	ret = int(r0)
	if ret == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetNamedPipeHandleState(pipe Handle, state *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procSetNamedPipeHandleState.Addr(), 4, uintptr(pipe), uintptr(unsafe.Pointer(state)), uintptr(unsafe.Pointer(maxCollectionCount)), uintptr(unsafe.Pointer(collectDataTimeout)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetPriorityClass(process Handle, priorityClass uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procSetPriorityClass.Addr(), 2, uintptr(process), uintptr(priorityClass), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetProcessPriorityBoost(process Handle, disable bool) (err error) {
	var _p0 uint32
	if disable {
		_p0 = 1
	}
	r1, _, e1 := syscall.Syscall(procSetProcessPriorityBoost.Addr(), 2, uintptr(process), uintptr(_p0), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetProcessShutdownParameters(level uint32, flags uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procSetProcessShutdownParameters.Addr(), 2, uintptr(level), uintptr(flags), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetProcessWorkingSetSizeEx(hProcess Handle, dwMinimumWorkingSetSize uintptr, dwMaximumWorkingSetSize uintptr, flags uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procSetProcessWorkingSetSizeEx.Addr(), 4, uintptr(hProcess), uintptr(dwMinimumWorkingSetSize), uintptr(dwMaximumWorkingSetSize), uintptr(flags), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetStdHandle(stdhandle uint32, handle Handle) (err error) {
	r1, _, e1 := syscall.Syscall(procSetStdHandle.Addr(), 2, uintptr(stdhandle), uintptr(handle), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetVolumeLabel(rootPathName *uint16, volumeName *uint16) (err error) {
	r1, _, e1 := syscall.Syscall(procSetVolumeLabelW.Addr(), 2, uintptr(unsafe.Pointer(rootPathName)), uintptr(unsafe.Pointer(volumeName)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16) (err error) {
	r1, _, e1 := syscall.Syscall(procSetVolumeMountPointW.Addr(), 2, uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(unsafe.Pointer(volumeName)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SizeofResource(module Handle, resInfo Handle) (size uint32, err error) {
	r0, _, e1 := syscall.Syscall(procSizeofResource.Addr(), 2, uintptr(module), uintptr(resInfo), 0)
	size = uint32(r0)
	if size == 0 {
		err = errnoErr(e1)
	}
	return
}

func SleepEx(milliseconds uint32, alertable bool) (ret uint32) {
	var _p0 uint32
	if alertable {
		_p0 = 1
	}
	r0, _, _ := syscall.Syscall(procSleepEx.Addr(), 2, uintptr(milliseconds), uintptr(_p0), 0)
	ret = uint32(r0)
	return
}

func TerminateJobObject(job Handle, exitCode uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procTerminateJobObject.Addr(), 2, uintptr(job), uintptr(exitCode), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func TerminateProcess(handle Handle, exitcode uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procTerminateProcess.Addr(), 2, uintptr(handle), uintptr(exitcode), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func Thread32First(snapshot Handle, threadEntry *ThreadEntry32) (err error) {
	r1, _, e1 := syscall.Syscall(procThread32First.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(threadEntry)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func Thread32Next(snapshot Handle, threadEntry *ThreadEntry32) (err error) {
	r1, _, e1 := syscall.Syscall(procThread32Next.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(threadEntry)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func UnlockFileEx(file Handle, reserved uint32, bytesLow uint32, bytesHigh uint32, overlapped *Overlapped) (err error) {
	r1, _, e1 := syscall.Syscall6(procUnlockFileEx.Addr(), 5, uintptr(file), uintptr(reserved), uintptr(bytesLow), uintptr(bytesHigh), uintptr(unsafe.Pointer(overlapped)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func UnmapViewOfFile(addr uintptr) (err error) {
	r1, _, e1 := syscall.Syscall(procUnmapViewOfFile.Addr(), 1, uintptr(addr), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func updateProcThreadAttribute(attrlist *ProcThreadAttributeList, flags uint32, attr uintptr, value unsafe.Pointer, size uintptr, prevvalue unsafe.Pointer, returnedsize *uintptr) (err error) {
	r1, _, e1 := syscall.Syscall9(procUpdateProcThreadAttribute.Addr(), 7, uintptr(unsafe.Pointer(attrlist)), uintptr(flags), uintptr(attr), uintptr(value), uintptr(size), uintptr(prevvalue), uintptr(unsafe.Pointer(returnedsize)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func VirtualAlloc(address uintptr, size uintptr, alloctype uint32, protect uint32) (value uintptr, err error) {
	r0, _, e1 := syscall.Syscall6(procVirtualAlloc.Addr(), 4, uintptr(address), uintptr(size), uintptr(alloctype), uintptr(protect), 0, 0)
	value = uintptr(r0)
	if value == 0 {
		err = errnoErr(e1)
	}
	return
}

func VirtualFree(address uintptr, size uintptr, freetype uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procVirtualFree.Addr(), 3, uintptr(address), uintptr(size), uintptr(freetype))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func VirtualLock(addr uintptr, length uintptr) (err error) {
	r1, _, e1 := syscall.Syscall(procVirtualLock.Addr(), 2, uintptr(addr), uintptr(length), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func VirtualProtect(address uintptr, size uintptr, newprotect uint32, oldprotect *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procVirtualProtect.Addr(), 4, uintptr(address), uintptr(size), uintptr(newprotect), uintptr(unsafe.Pointer(oldprotect)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func VirtualProtectEx(process Handle, address uintptr, size uintptr, newProtect uint32, oldProtect *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procVirtualProtectEx.Addr(), 5, uintptr(process), uintptr(address), uintptr(size), uintptr(newProtect), uintptr(unsafe.Pointer(oldProtect)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func VirtualQuery(address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) {
	r1, _, e1 := syscall.Syscall(procVirtualQuery.Addr(), 3, uintptr(address), uintptr(unsafe.Pointer(buffer)), uintptr(length))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func VirtualQueryEx(process Handle, address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) {
	r1, _, e1 := syscall.Syscall6(procVirtualQueryEx.Addr(), 4, uintptr(process), uintptr(address), uintptr(unsafe.Pointer(buffer)), uintptr(length), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func VirtualUnlock(addr uintptr, length uintptr) (err error) {
	r1, _, e1 := syscall.Syscall(procVirtualUnlock.Addr(), 2, uintptr(addr), uintptr(length), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func WTSGetActiveConsoleSessionId() (sessionID uint32) {
	r0, _, _ := syscall.Syscall(procWTSGetActiveConsoleSessionId.Addr(), 0, 0, 0, 0)
	sessionID = uint32(r0)
	return
}

func waitForMultipleObjects(count uint32, handles uintptr, waitAll bool, waitMilliseconds uint32) (event uint32, err error) {
	var _p0 uint32
	if waitAll {
		_p0 = 1
	}
	r0, _, e1 := syscall.Syscall6(procWaitForMultipleObjects.Addr(), 4, uintptr(count), uintptr(handles), uintptr(_p0), uintptr(waitMilliseconds), 0, 0)
	event = uint32(r0)
	if event == 0xffffffff {
		err = errnoErr(e1)
	}
	return
}

func WaitForSingleObject(handle Handle, waitMilliseconds uint32) (event uint32, err error) {
	r0, _, e1 := syscall.Syscall(procWaitForSingleObject.Addr(), 2, uintptr(handle), uintptr(waitMilliseconds), 0)
	event = uint32(r0)
	if event == 0xffffffff {
		err = errnoErr(e1)
	}
	return
}

func WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, reserved *byte) (err error) {
	r1, _, e1 := syscall.Syscall6(procWriteConsoleW.Addr(), 5, uintptr(console), uintptr(unsafe.Pointer(buf)), uintptr(towrite), uintptr(unsafe.Pointer(written)), uintptr(unsafe.Pointer(reserved)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func writeFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) {
	var _p0 *byte
	if len(buf) > 0 {
		_p0 = &buf[0]
	}
	r1, _, e1 := syscall.Syscall6(procWriteFile.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(done)), uintptr(unsafe.Pointer(overlapped)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func WriteProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesWritten *uintptr) (err error) {
	r1, _, e1 := syscall.Syscall6(procWriteProcessMemory.Addr(), 5, uintptr(process), uintptr(baseAddress), uintptr(unsafe.Pointer(buffer)), uintptr(size), uintptr(unsafe.Pointer(numberOfBytesWritten)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func AcceptEx(ls Handle, as Handle, buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, recvd *uint32, overlapped *Overlapped) (err error) {
	r1, _, e1 := syscall.Syscall9(procAcceptEx.Addr(), 8, uintptr(ls), uintptr(as), uintptr(unsafe.Pointer(buf)), uintptr(rxdatalen), uintptr(laddrlen), uintptr(raddrlen), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(overlapped)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetAcceptExSockaddrs(buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, lrsa **RawSockaddrAny, lrsalen *int32, rrsa **RawSockaddrAny, rrsalen *int32) {
	syscall.Syscall9(procGetAcceptExSockaddrs.Addr(), 8, uintptr(unsafe.Pointer(buf)), uintptr(rxdatalen), uintptr(laddrlen), uintptr(raddrlen), uintptr(unsafe.Pointer(lrsa)), uintptr(unsafe.Pointer(lrsalen)), uintptr(unsafe.Pointer(rrsa)), uintptr(unsafe.Pointer(rrsalen)), 0)
	return
}

func TransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint32, overlapped *Overlapped, transmitFileBuf *TransmitFileBuffers, flags uint32) (err error) {
	r1, _, e1 := syscall.Syscall9(procTransmitFile.Addr(), 7, uintptr(s), uintptr(handle), uintptr(bytesToWrite), uintptr(bytsPerSend), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(transmitFileBuf)), uintptr(flags), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func NetApiBufferFree(buf *byte) (neterr error) {
	r0, _, _ := syscall.Syscall(procNetApiBufferFree.Addr(), 1, uintptr(unsafe.Pointer(buf)), 0, 0)
	if r0 != 0 {
		neterr = syscall.Errno(r0)
	}
	return
}

func NetGetJoinInformation(server *uint16, name **uint16, bufType *uint32) (neterr error) {
	r0, _, _ := syscall.Syscall(procNetGetJoinInformation.Addr(), 3, uintptr(unsafe.Pointer(server)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(bufType)))
	if r0 != 0 {
		neterr = syscall.Errno(r0)
	}
	return
}

func NetUserGetInfo(serverName *uint16, userName *uint16, level uint32, buf **byte) (neterr error) {
	r0, _, _ := syscall.Syscall6(procNetUserGetInfo.Addr(), 4, uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(userName)), uintptr(level), uintptr(unsafe.Pointer(buf)), 0, 0)
	if r0 != 0 {
		neterr = syscall.Errno(r0)
	}
	return
}

func NtCreateFile(handle *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, allocationSize *int64, attributes uint32, share uint32, disposition uint32, options uint32, eabuffer uintptr, ealength uint32) (ntstatus error) {
	r0, _, _ := syscall.Syscall12(procNtCreateFile.Addr(), 11, uintptr(unsafe.Pointer(handle)), uintptr(access), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(allocationSize)), uintptr(attributes), uintptr(share), uintptr(disposition), uintptr(options), uintptr(eabuffer), uintptr(ealength), 0)
	if r0 != 0 {
		ntstatus = NTStatus(r0)
	}
	return
}

func NtCreateNamedPipeFile(pipe *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, share uint32, disposition uint32, options uint32, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (ntstatus error) {
	r0, _, _ := syscall.Syscall15(procNtCreateNamedPipeFile.Addr(), 14, uintptr(unsafe.Pointer(pipe)), uintptr(access), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(share), uintptr(disposition), uintptr(options), uintptr(typ), uintptr(readMode), uintptr(completionMode), uintptr(maxInstances), uintptr(inboundQuota), uintptr(outputQuota), uintptr(unsafe.Pointer(timeout)), 0)
	if r0 != 0 {
		ntstatus = NTStatus(r0)
	}
	return
}

func NtQueryInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32, retLen *uint32) (ntstatus error) {
	r0, _, _ := syscall.Syscall6(procNtQueryInformationProcess.Addr(), 5, uintptr(proc), uintptr(procInfoClass), uintptr(procInfo), uintptr(procInfoLen), uintptr(unsafe.Pointer(retLen)), 0)
	if r0 != 0 {
		ntstatus = NTStatus(r0)
	}
	return
}

func NtQuerySystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32, retLen *uint32) (ntstatus error) {
	r0, _, _ := syscall.Syscall6(procNtQuerySystemInformation.Addr(), 4, uintptr(sysInfoClass), uintptr(sysInfo), uintptr(sysInfoLen), uintptr(unsafe.Pointer(retLen)), 0, 0)
	if r0 != 0 {
		ntstatus = NTStatus(r0)
	}
	return
}

func NtSetInformationFile(handle Handle, iosb *IO_STATUS_BLOCK, inBuffer *byte, inBufferLen uint32, class uint32) (ntstatus error) {
	r0, _, _ := syscall.Syscall6(procNtSetInformationFile.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferLen), uintptr(class), 0)
	if r0 != 0 {
		ntstatus = NTStatus(r0)
	}
	return
}

func NtSetInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32) (ntstatus error) {
	r0, _, _ := syscall.Syscall6(procNtSetInformationProcess.Addr(), 4, uintptr(proc), uintptr(procInfoClass), uintptr(procInfo), uintptr(procInfoLen), 0, 0)
	if r0 != 0 {
		ntstatus = NTStatus(r0)
	}
	return
}

func NtSetSystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32) (ntstatus error) {
	r0, _, _ := syscall.Syscall(procNtSetSystemInformation.Addr(), 3, uintptr(sysInfoClass), uintptr(sysInfo), uintptr(sysInfoLen))
	if r0 != 0 {
		ntstatus = NTStatus(r0)
	}
	return
}

func RtlAddFunctionTable(functionTable *RUNTIME_FUNCTION, entryCount uint32, baseAddress uintptr) (ret bool) {
	r0, _, _ := syscall.Syscall(procRtlAddFunctionTable.Addr(), 3, uintptr(unsafe.Pointer(functionTable)), uintptr(entryCount), uintptr(baseAddress))
	ret = r0 != 0
	return
}

func RtlDefaultNpAcl(acl **ACL) (ntstatus error) {
	r0, _, _ := syscall.Syscall(procRtlDefaultNpAcl.Addr(), 1, uintptr(unsafe.Pointer(acl)), 0, 0)
	if r0 != 0 {
		ntstatus = NTStatus(r0)
	}
	return
}

func RtlDeleteFunctionTable(functionTable *RUNTIME_FUNCTION) (ret bool) {
	r0, _, _ := syscall.Syscall(procRtlDeleteFunctionTable.Addr(), 1, uintptr(unsafe.Pointer(functionTable)), 0, 0)
	ret = r0 != 0
	return
}

func RtlDosPathNameToNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) {
	r0, _, _ := syscall.Syscall6(procRtlDosPathNameToNtPathName_U_WithStatus.Addr(), 4, uintptr(unsafe.Pointer(dosName)), uintptr(unsafe.Pointer(ntName)), uintptr(unsafe.Pointer(ntFileNamePart)), uintptr(unsafe.Pointer(relativeName)), 0, 0)
	if r0 != 0 {
		ntstatus = NTStatus(r0)
	}
	return
}

func RtlDosPathNameToRelativeNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) {
	r0, _, _ := syscall.Syscall6(procRtlDosPathNameToRelativeNtPathName_U_WithStatus.Addr(), 4, uintptr(unsafe.Pointer(dosName)), uintptr(unsafe.Pointer(ntName)), uintptr(unsafe.Pointer(ntFileNamePart)), uintptr(unsafe.Pointer(relativeName)), 0, 0)
	if r0 != 0 {
		ntstatus = NTStatus(r0)
	}
	return
}

func RtlGetCurrentPeb() (peb *PEB) {
	r0, _, _ := syscall.Syscall(procRtlGetCurrentPeb.Addr(), 0, 0, 0, 0)
	peb = (*PEB)(unsafe.Pointer(r0))
	return
}

func rtlGetNtVersionNumbers(majorVersion *uint32, minorVersion *uint32, buildNumber *uint32) {
	syscall.Syscall(procRtlGetNtVersionNumbers.Addr(), 3, uintptr(unsafe.Pointer(majorVersion)), uintptr(unsafe.Pointer(minorVersion)), uintptr(unsafe.Pointer(buildNumber)))
	return
}

func rtlGetVersion(info *OsVersionInfoEx) (ntstatus error) {
	r0, _, _ := syscall.Syscall(procRtlGetVersion.Addr(), 1, uintptr(unsafe.Pointer(info)), 0, 0)
	if r0 != 0 {
		ntstatus = NTStatus(r0)
	}
	return
}

func RtlInitString(destinationString *NTString, sourceString *byte) {
	syscall.Syscall(procRtlInitString.Addr(), 2, uintptr(unsafe.Pointer(destinationString)), uintptr(unsafe.Pointer(sourceString)), 0)
	return
}

func RtlInitUnicodeString(destinationString *NTUnicodeString, sourceString *uint16) {
	syscall.Syscall(procRtlInitUnicodeString.Addr(), 2, uintptr(unsafe.Pointer(destinationString)), uintptr(unsafe.Pointer(sourceString)), 0)
	return
}

func rtlNtStatusToDosErrorNoTeb(ntstatus NTStatus) (ret syscall.Errno) {
	r0, _, _ := syscall.Syscall(procRtlNtStatusToDosErrorNoTeb.Addr(), 1, uintptr(ntstatus), 0, 0)
	ret = syscall.Errno(r0)
	return
}

func clsidFromString(lpsz *uint16, pclsid *GUID) (ret error) {
	r0, _, _ := syscall.Syscall(procCLSIDFromString.Addr(), 2, uintptr(unsafe.Pointer(lpsz)), uintptr(unsafe.Pointer(pclsid)), 0)
	if r0 != 0 {
		ret = syscall.Errno(r0)
	}
	return
}

func coCreateGuid(pguid *GUID) (ret error) {
	r0, _, _ := syscall.Syscall(procCoCreateGuid.Addr(), 1, uintptr(unsafe.Pointer(pguid)), 0, 0)
	if r0 != 0 {
		ret = syscall.Errno(r0)
	}
	return
}

func CoGetObject(name *uint16, bindOpts *BIND_OPTS3, guid *GUID, functionTable **uintptr) (ret error) {
	r0, _, _ := syscall.Syscall6(procCoGetObject.Addr(), 4, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(bindOpts)), uintptr(unsafe.Pointer(guid)), uintptr(unsafe.Pointer(functionTable)), 0, 0)
	if r0 != 0 {
		ret = syscall.Errno(r0)
	}
	return
}

func CoInitializeEx(reserved uintptr, coInit uint32) (ret error) {
	r0, _, _ := syscall.Syscall(procCoInitializeEx.Addr(), 2, uintptr(reserved), uintptr(coInit), 0)
	if r0 != 0 {
		ret = syscall.Errno(r0)
	}
	return
}

func CoTaskMemFree(address unsafe.Pointer) {
	syscall.Syscall(procCoTaskMemFree.Addr(), 1, uintptr(address), 0, 0)
	return
}

func CoUninitialize() {
	syscall.Syscall(procCoUninitialize.Addr(), 0, 0, 0, 0)
	return
}

func stringFromGUID2(rguid *GUID, lpsz *uint16, cchMax int32) (chars int32) {
	r0, _, _ := syscall.Syscall(procStringFromGUID2.Addr(), 3, uintptr(unsafe.Pointer(rguid)), uintptr(unsafe.Pointer(lpsz)), uintptr(cchMax))
	chars = int32(r0)
	return
}

func EnumProcessModules(process Handle, module *Handle, cb uint32, cbNeeded *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procEnumProcessModules.Addr(), 4, uintptr(process), uintptr(unsafe.Pointer(module)), uintptr(cb), uintptr(unsafe.Pointer(cbNeeded)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func EnumProcessModulesEx(process Handle, module *Handle, cb uint32, cbNeeded *uint32, filterFlag uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procEnumProcessModulesEx.Addr(), 5, uintptr(process), uintptr(unsafe.Pointer(module)), uintptr(cb), uintptr(unsafe.Pointer(cbNeeded)), uintptr(filterFlag), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func EnumProcesses(processIds []uint32, bytesReturned *uint32) (err error) {
	var _p0 *uint32
	if len(processIds) > 0 {
		_p0 = &processIds[0]
	}
	r1, _, e1 := syscall.Syscall(procEnumProcesses.Addr(), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(processIds)), uintptr(unsafe.Pointer(bytesReturned)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetModuleBaseName(process Handle, module Handle, baseName *uint16, size uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procGetModuleBaseNameW.Addr(), 4, uintptr(process), uintptr(module), uintptr(unsafe.Pointer(baseName)), uintptr(size), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetModuleFileNameEx(process Handle, module Handle, filename *uint16, size uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procGetModuleFileNameExW.Addr(), 4, uintptr(process), uintptr(module), uintptr(unsafe.Pointer(filename)), uintptr(size), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetModuleInformation(process Handle, module Handle, modinfo *ModuleInfo, cb uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procGetModuleInformation.Addr(), 4, uintptr(process), uintptr(module), uintptr(unsafe.Pointer(modinfo)), uintptr(cb), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func QueryWorkingSetEx(process Handle, pv uintptr, cb uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procQueryWorkingSetEx.Addr(), 3, uintptr(process), uintptr(pv), uintptr(cb))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SubscribeServiceChangeNotifications(service Handle, eventType uint32, callback uintptr, callbackCtx uintptr, subscription *uintptr) (ret error) {
	ret = procSubscribeServiceChangeNotifications.Find()
	if ret != nil {
		return
	}
	r0, _, _ := syscall.Syscall6(procSubscribeServiceChangeNotifications.Addr(), 5, uintptr(service), uintptr(eventType), uintptr(callback), uintptr(callbackCtx), uintptr(unsafe.Pointer(subscription)), 0)
	if r0 != 0 {
		ret = syscall.Errno(r0)
	}
	return
}

func UnsubscribeServiceChangeNotifications(subscription uintptr) (err error) {
	err = procUnsubscribeServiceChangeNotifications.Find()
	if err != nil {
		return
	}
	syscall.Syscall(procUnsubscribeServiceChangeNotifications.Addr(), 1, uintptr(subscription), 0, 0)
	return
}

func GetUserNameEx(nameFormat uint32, nameBuffre *uint16, nSize *uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procGetUserNameExW.Addr(), 3, uintptr(nameFormat), uintptr(unsafe.Pointer(nameBuffre)), uintptr(unsafe.Pointer(nSize)))
	if r1&0xff == 0 {
		err = errnoErr(e1)
	}
	return
}

func TranslateName(accName *uint16, accNameFormat uint32, desiredNameFormat uint32, translatedName *uint16, nSize *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procTranslateNameW.Addr(), 5, uintptr(unsafe.Pointer(accName)), uintptr(accNameFormat), uintptr(desiredNameFormat), uintptr(unsafe.Pointer(translatedName)), uintptr(unsafe.Pointer(nSize)), 0)
	if r1&0xff == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetupDiBuildDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) {
	r1, _, e1 := syscall.Syscall(procSetupDiBuildDriverInfoList.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetupDiCallClassInstaller(installFunction DI_FUNCTION, deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) {
	r1, _, e1 := syscall.Syscall(procSetupDiCallClassInstaller.Addr(), 3, uintptr(installFunction), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetupDiCancelDriverInfoSearch(deviceInfoSet DevInfo) (err error) {
	r1, _, e1 := syscall.Syscall(procSetupDiCancelDriverInfoSearch.Addr(), 1, uintptr(deviceInfoSet), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func setupDiClassGuidsFromNameEx(className *uint16, classGuidList *GUID, classGuidListSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) {
	r1, _, e1 := syscall.Syscall6(procSetupDiClassGuidsFromNameExW.Addr(), 6, uintptr(unsafe.Pointer(className)), uintptr(unsafe.Pointer(classGuidList)), uintptr(classGuidListSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(unsafe.Pointer(machineName)), uintptr(reserved))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func setupDiClassNameFromGuidEx(classGUID *GUID, className *uint16, classNameSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) {
	r1, _, e1 := syscall.Syscall6(procSetupDiClassNameFromGuidExW.Addr(), 6, uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(className)), uintptr(classNameSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(unsafe.Pointer(machineName)), uintptr(reserved))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func setupDiCreateDeviceInfoListEx(classGUID *GUID, hwndParent uintptr, machineName *uint16, reserved uintptr) (handle DevInfo, err error) {
	r0, _, e1 := syscall.Syscall6(procSetupDiCreateDeviceInfoListExW.Addr(), 4, uintptr(unsafe.Pointer(classGUID)), uintptr(hwndParent), uintptr(unsafe.Pointer(machineName)), uintptr(reserved), 0, 0)
	handle = DevInfo(r0)
	if handle == DevInfo(InvalidHandle) {
		err = errnoErr(e1)
	}
	return
}

func setupDiCreateDeviceInfo(deviceInfoSet DevInfo, DeviceName *uint16, classGUID *GUID, DeviceDescription *uint16, hwndParent uintptr, CreationFlags DICD, deviceInfoData *DevInfoData) (err error) {
	r1, _, e1 := syscall.Syscall9(procSetupDiCreateDeviceInfoW.Addr(), 7, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(DeviceName)), uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(DeviceDescription)), uintptr(hwndParent), uintptr(CreationFlags), uintptr(unsafe.Pointer(deviceInfoData)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetupDiDestroyDeviceInfoList(deviceInfoSet DevInfo) (err error) {
	r1, _, e1 := syscall.Syscall(procSetupDiDestroyDeviceInfoList.Addr(), 1, uintptr(deviceInfoSet), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetupDiDestroyDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) {
	r1, _, e1 := syscall.Syscall(procSetupDiDestroyDriverInfoList.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func setupDiEnumDeviceInfo(deviceInfoSet DevInfo, memberIndex uint32, deviceInfoData *DevInfoData) (err error) {
	r1, _, e1 := syscall.Syscall(procSetupDiEnumDeviceInfo.Addr(), 3, uintptr(deviceInfoSet), uintptr(memberIndex), uintptr(unsafe.Pointer(deviceInfoData)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func setupDiEnumDriverInfo(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT, memberIndex uint32, driverInfoData *DrvInfoData) (err error) {
	r1, _, e1 := syscall.Syscall6(procSetupDiEnumDriverInfoW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType), uintptr(memberIndex), uintptr(unsafe.Pointer(driverInfoData)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func setupDiGetClassDevsEx(classGUID *GUID, Enumerator *uint16, hwndParent uintptr, Flags DIGCF, deviceInfoSet DevInfo, machineName *uint16, reserved uintptr) (handle DevInfo, err error) {
	r0, _, e1 := syscall.Syscall9(procSetupDiGetClassDevsExW.Addr(), 7, uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(Enumerator)), uintptr(hwndParent), uintptr(Flags), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(machineName)), uintptr(reserved), 0, 0)
	handle = DevInfo(r0)
	if handle == DevInfo(InvalidHandle) {
		err = errnoErr(e1)
	}
	return
}

func SetupDiGetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32, requiredSize *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procSetupDiGetClassInstallParamsW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(classInstallParams)), uintptr(classInstallParamsSize), uintptr(unsafe.Pointer(requiredSize)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func setupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo, deviceInfoSetDetailData *DevInfoListDetailData) (err error) {
	r1, _, e1 := syscall.Syscall(procSetupDiGetDeviceInfoListDetailW.Addr(), 2, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoSetDetailData)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func setupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) {
	r1, _, e1 := syscall.Syscall(procSetupDiGetDeviceInstallParamsW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(deviceInstallParams)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func setupDiGetDeviceInstanceId(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, instanceId *uint16, instanceIdSize uint32, instanceIdRequiredSize *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procSetupDiGetDeviceInstanceIdW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(instanceId)), uintptr(instanceIdSize), uintptr(unsafe.Pointer(instanceIdRequiredSize)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func setupDiGetDeviceProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, propertyKey *DEVPROPKEY, propertyType *DEVPROPTYPE, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32, flags uint32) (err error) {
	r1, _, e1 := syscall.Syscall9(procSetupDiGetDevicePropertyW.Addr(), 8, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(propertyKey)), uintptr(unsafe.Pointer(propertyType)), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(flags), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func setupDiGetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyRegDataType *uint32, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32) (err error) {
	r1, _, e1 := syscall.Syscall9(procSetupDiGetDeviceRegistryPropertyW.Addr(), 7, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(property), uintptr(unsafe.Pointer(propertyRegDataType)), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize), uintptr(unsafe.Pointer(requiredSize)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func setupDiGetDriverInfoDetail(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData, driverInfoDetailData *DrvInfoDetailData, driverInfoDetailDataSize uint32, requiredSize *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procSetupDiGetDriverInfoDetailW.Addr(), 6, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData)), uintptr(unsafe.Pointer(driverInfoDetailData)), uintptr(driverInfoDetailDataSize), uintptr(unsafe.Pointer(requiredSize)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func setupDiGetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) {
	r1, _, e1 := syscall.Syscall(procSetupDiGetSelectedDevice.Addr(), 2, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func setupDiGetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) {
	r1, _, e1 := syscall.Syscall(procSetupDiGetSelectedDriverW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetupDiOpenDevRegKey(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, Scope DICS_FLAG, HwProfile uint32, KeyType DIREG, samDesired uint32) (key Handle, err error) {
	r0, _, e1 := syscall.Syscall6(procSetupDiOpenDevRegKey.Addr(), 6, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(Scope), uintptr(HwProfile), uintptr(KeyType), uintptr(samDesired))
	key = Handle(r0)
	if key == InvalidHandle {
		err = errnoErr(e1)
	}
	return
}

func SetupDiSetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procSetupDiSetClassInstallParamsW.Addr(), 4, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(classInstallParams)), uintptr(classInstallParamsSize), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetupDiSetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) {
	r1, _, e1 := syscall.Syscall(procSetupDiSetDeviceInstallParamsW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(deviceInstallParams)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func setupDiSetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyBuffer *byte, propertyBufferSize uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procSetupDiSetDeviceRegistryPropertyW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(property), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetupDiSetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) {
	r1, _, e1 := syscall.Syscall(procSetupDiSetSelectedDevice.Addr(), 2, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func SetupDiSetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) {
	r1, _, e1 := syscall.Syscall(procSetupDiSetSelectedDriverW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func setupUninstallOEMInf(infFileName *uint16, flags SUOI, reserved uintptr) (err error) {
	r1, _, e1 := syscall.Syscall(procSetupUninstallOEMInfW.Addr(), 3, uintptr(unsafe.Pointer(infFileName)), uintptr(flags), uintptr(reserved))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func CommandLineToArgv(cmd *uint16, argc *int32) (argv *[8192]*[8192]uint16, err error) {
	r0, _, e1 := syscall.Syscall(procCommandLineToArgvW.Addr(), 2, uintptr(unsafe.Pointer(cmd)), uintptr(unsafe.Pointer(argc)), 0)
	argv = (*[8192]*[8192]uint16)(unsafe.Pointer(r0))
	if argv == nil {
		err = errnoErr(e1)
	}
	return
}

func shGetKnownFolderPath(id *KNOWNFOLDERID, flags uint32, token Token, path **uint16) (ret error) {
	r0, _, _ := syscall.Syscall6(procSHGetKnownFolderPath.Addr(), 4, uintptr(unsafe.Pointer(id)), uintptr(flags), uintptr(token), uintptr(unsafe.Pointer(path)), 0, 0)
	if r0 != 0 {
		ret = syscall.Errno(r0)
	}
	return
}

func ShellExecute(hwnd Handle, verb *uint16, file *uint16, args *uint16, cwd *uint16, showCmd int32) (err error) {
	r1, _, e1 := syscall.Syscall6(procShellExecuteW.Addr(), 6, uintptr(hwnd), uintptr(unsafe.Pointer(verb)), uintptr(unsafe.Pointer(file)), uintptr(unsafe.Pointer(args)), uintptr(unsafe.Pointer(cwd)), uintptr(showCmd))
	if r1 <= 32 {
		err = errnoErr(e1)
	}
	return
}

func EnumChildWindows(hwnd HWND, enumFunc uintptr, param unsafe.Pointer) {
	syscall.Syscall(procEnumChildWindows.Addr(), 3, uintptr(hwnd), uintptr(enumFunc), uintptr(param))
	return
}

func EnumWindows(enumFunc uintptr, param unsafe.Pointer) (err error) {
	r1, _, e1 := syscall.Syscall(procEnumWindows.Addr(), 2, uintptr(enumFunc), uintptr(param), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func ExitWindowsEx(flags uint32, reason uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procExitWindowsEx.Addr(), 2, uintptr(flags), uintptr(reason), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetClassName(hwnd HWND, className *uint16, maxCount int32) (copied int32, err error) {
	r0, _, e1 := syscall.Syscall(procGetClassNameW.Addr(), 3, uintptr(hwnd), uintptr(unsafe.Pointer(className)), uintptr(maxCount))
	copied = int32(r0)
	if copied == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetDesktopWindow() (hwnd HWND) {
	r0, _, _ := syscall.Syscall(procGetDesktopWindow.Addr(), 0, 0, 0, 0)
	hwnd = HWND(r0)
	return
}

func GetForegroundWindow() (hwnd HWND) {
	r0, _, _ := syscall.Syscall(procGetForegroundWindow.Addr(), 0, 0, 0, 0)
	hwnd = HWND(r0)
	return
}

func GetGUIThreadInfo(thread uint32, info *GUIThreadInfo) (err error) {
	r1, _, e1 := syscall.Syscall(procGetGUIThreadInfo.Addr(), 2, uintptr(thread), uintptr(unsafe.Pointer(info)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetShellWindow() (shellWindow HWND) {
	r0, _, _ := syscall.Syscall(procGetShellWindow.Addr(), 0, 0, 0, 0)
	shellWindow = HWND(r0)
	return
}

func GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32, err error) {
	r0, _, e1 := syscall.Syscall(procGetWindowThreadProcessId.Addr(), 2, uintptr(hwnd), uintptr(unsafe.Pointer(pid)), 0)
	tid = uint32(r0)
	if tid == 0 {
		err = errnoErr(e1)
	}
	return
}

func IsWindow(hwnd HWND) (isWindow bool) {
	r0, _, _ := syscall.Syscall(procIsWindow.Addr(), 1, uintptr(hwnd), 0, 0)
	isWindow = r0 != 0
	return
}

func IsWindowUnicode(hwnd HWND) (isUnicode bool) {
	r0, _, _ := syscall.Syscall(procIsWindowUnicode.Addr(), 1, uintptr(hwnd), 0, 0)
	isUnicode = r0 != 0
	return
}

func IsWindowVisible(hwnd HWND) (isVisible bool) {
	r0, _, _ := syscall.Syscall(procIsWindowVisible.Addr(), 1, uintptr(hwnd), 0, 0)
	isVisible = r0 != 0
	return
}

func MessageBox(hwnd HWND, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) {
	r0, _, e1 := syscall.Syscall6(procMessageBoxW.Addr(), 4, uintptr(hwnd), uintptr(unsafe.Pointer(text)), uintptr(unsafe.Pointer(caption)), uintptr(boxtype), 0, 0)
	ret = int32(r0)
	if ret == 0 {
		err = errnoErr(e1)
	}
	return
}

func CreateEnvironmentBlock(block **uint16, token Token, inheritExisting bool) (err error) {
	var _p0 uint32
	if inheritExisting {
		_p0 = 1
	}
	r1, _, e1 := syscall.Syscall(procCreateEnvironmentBlock.Addr(), 3, uintptr(unsafe.Pointer(block)), uintptr(token), uintptr(_p0))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func DestroyEnvironmentBlock(block *uint16) (err error) {
	r1, _, e1 := syscall.Syscall(procDestroyEnvironmentBlock.Addr(), 1, uintptr(unsafe.Pointer(block)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetUserProfileDirectory(t Token, dir *uint16, dirLen *uint32) (err error) {
	r1, _, e1 := syscall.Syscall(procGetUserProfileDirectoryW.Addr(), 3, uintptr(t), uintptr(unsafe.Pointer(dir)), uintptr(unsafe.Pointer(dirLen)))
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetFileVersionInfoSize(filename string, zeroHandle *Handle) (bufSize uint32, err error) {
	var _p0 *uint16
	_p0, err = syscall.UTF16PtrFromString(filename)
	if err != nil {
		return
	}
	return _GetFileVersionInfoSize(_p0, zeroHandle)
}

func _GetFileVersionInfoSize(filename *uint16, zeroHandle *Handle) (bufSize uint32, err error) {
	r0, _, e1 := syscall.Syscall(procGetFileVersionInfoSizeW.Addr(), 2, uintptr(unsafe.Pointer(filename)), uintptr(unsafe.Pointer(zeroHandle)), 0)
	bufSize = uint32(r0)
	if bufSize == 0 {
		err = errnoErr(e1)
	}
	return
}

func GetFileVersionInfo(filename string, handle uint32, bufSize uint32, buffer unsafe.Pointer) (err error) {
	var _p0 *uint16
	_p0, err = syscall.UTF16PtrFromString(filename)
	if err != nil {
		return
	}
	return _GetFileVersionInfo(_p0, handle, bufSize, buffer)
}

func _GetFileVersionInfo(filename *uint16, handle uint32, bufSize uint32, buffer unsafe.Pointer) (err error) {
	r1, _, e1 := syscall.Syscall6(procGetFileVersionInfoW.Addr(), 4, uintptr(unsafe.Pointer(filename)), uintptr(handle), uintptr(bufSize), uintptr(buffer), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func VerQueryValue(block unsafe.Pointer, subBlock string, pointerToBufferPointer unsafe.Pointer, bufSize *uint32) (err error) {
	var _p0 *uint16
	_p0, err = syscall.UTF16PtrFromString(subBlock)
	if err != nil {
		return
	}
	return _VerQueryValue(block, _p0, pointerToBufferPointer, bufSize)
}

func _VerQueryValue(block unsafe.Pointer, subBlock *uint16, pointerToBufferPointer unsafe.Pointer, bufSize *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procVerQueryValueW.Addr(), 4, uintptr(block), uintptr(unsafe.Pointer(subBlock)), uintptr(pointerToBufferPointer), uintptr(unsafe.Pointer(bufSize)), 0, 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func WinVerifyTrustEx(hwnd HWND, actionId *GUID, data *WinTrustData) (ret error) {
	r0, _, _ := syscall.Syscall(procWinVerifyTrustEx.Addr(), 3, uintptr(hwnd), uintptr(unsafe.Pointer(actionId)), uintptr(unsafe.Pointer(data)))
	if r0 != 0 {
		ret = syscall.Errno(r0)
	}
	return
}

func FreeAddrInfoW(addrinfo *AddrinfoW) {
	syscall.Syscall(procFreeAddrInfoW.Addr(), 1, uintptr(unsafe.Pointer(addrinfo)), 0, 0)
	return
}

func GetAddrInfoW(nodename *uint16, servicename *uint16, hints *AddrinfoW, result **AddrinfoW) (sockerr error) {
	r0, _, _ := syscall.Syscall6(procGetAddrInfoW.Addr(), 4, uintptr(unsafe.Pointer(nodename)), uintptr(unsafe.Pointer(servicename)), uintptr(unsafe.Pointer(hints)), uintptr(unsafe.Pointer(result)), 0, 0)
	if r0 != 0 {
		sockerr = syscall.Errno(r0)
	}
	return
}

func WSACleanup() (err error) {
	r1, _, e1 := syscall.Syscall(procWSACleanup.Addr(), 0, 0, 0, 0)
	if r1 == socket_error {
		err = errnoErr(e1)
	}
	return
}

func WSAEnumProtocols(protocols *int32, protocolBuffer *WSAProtocolInfo, bufferLength *uint32) (n int32, err error) {
	r0, _, e1 := syscall.Syscall(procWSAEnumProtocolsW.Addr(), 3, uintptr(unsafe.Pointer(protocols)), uintptr(unsafe.Pointer(protocolBuffer)), uintptr(unsafe.Pointer(bufferLength)))
	n = int32(r0)
	if n == -1 {
		err = errnoErr(e1)
	}
	return
}

func WSAGetOverlappedResult(h Handle, o *Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) {
	var _p0 uint32
	if wait {
		_p0 = 1
	}
	r1, _, e1 := syscall.Syscall6(procWSAGetOverlappedResult.Addr(), 5, uintptr(h), uintptr(unsafe.Pointer(o)), uintptr(unsafe.Pointer(bytes)), uintptr(_p0), uintptr(unsafe.Pointer(flags)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func WSAIoctl(s Handle, iocc uint32, inbuf *byte, cbif uint32, outbuf *byte, cbob uint32, cbbr *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) {
	r1, _, e1 := syscall.Syscall9(procWSAIoctl.Addr(), 9, uintptr(s), uintptr(iocc), uintptr(unsafe.Pointer(inbuf)), uintptr(cbif), uintptr(unsafe.Pointer(outbuf)), uintptr(cbob), uintptr(unsafe.Pointer(cbbr)), uintptr(unsafe.Pointer(overlapped)), uintptr(completionRoutine))
	if r1 == socket_error {
		err = errnoErr(e1)
	}
	return
}

func WSALookupServiceBegin(querySet *WSAQUERYSET, flags uint32, handle *Handle) (err error) {
	r1, _, e1 := syscall.Syscall(procWSALookupServiceBeginW.Addr(), 3, uintptr(unsafe.Pointer(querySet)), uintptr(flags), uintptr(unsafe.Pointer(handle)))
	if r1 == socket_error {
		err = errnoErr(e1)
	}
	return
}

func WSALookupServiceEnd(handle Handle) (err error) {
	r1, _, e1 := syscall.Syscall(procWSALookupServiceEnd.Addr(), 1, uintptr(handle), 0, 0)
	if r1 == socket_error {
		err = errnoErr(e1)
	}
	return
}

func WSALookupServiceNext(handle Handle, flags uint32, size *int32, querySet *WSAQUERYSET) (err error) {
	r1, _, e1 := syscall.Syscall6(procWSALookupServiceNextW.Addr(), 4, uintptr(handle), uintptr(flags), uintptr(unsafe.Pointer(size)), uintptr(unsafe.Pointer(querySet)), 0, 0)
	if r1 == socket_error {
		err = errnoErr(e1)
	}
	return
}

func WSARecv(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, overlapped *Overlapped, croutine *byte) (err error) {
	r1, _, e1 := syscall.Syscall9(procWSARecv.Addr(), 7, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)), 0, 0)
	if r1 == socket_error {
		err = errnoErr(e1)
	}
	return
}

func WSARecvFrom(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, from *RawSockaddrAny, fromlen *int32, overlapped *Overlapped, croutine *byte) (err error) {
	r1, _, e1 := syscall.Syscall9(procWSARecvFrom.Addr(), 9, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)))
	if r1 == socket_error {
		err = errnoErr(e1)
	}
	return
}

func WSASend(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, overlapped *Overlapped, croutine *byte) (err error) {
	r1, _, e1 := syscall.Syscall9(procWSASend.Addr(), 7, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(sent)), uintptr(flags), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)), 0, 0)
	if r1 == socket_error {
		err = errnoErr(e1)
	}
	return
}

func WSASendTo(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to *RawSockaddrAny, tolen int32, overlapped *Overlapped, croutine *byte) (err error) {
	r1, _, e1 := syscall.Syscall9(procWSASendTo.Addr(), 9, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(sent)), uintptr(flags), uintptr(unsafe.Pointer(to)), uintptr(tolen), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)))
	if r1 == socket_error {
		err = errnoErr(e1)
	}
	return
}

func WSASocket(af int32, typ int32, protocol int32, protoInfo *WSAProtocolInfo, group uint32, flags uint32) (handle Handle, err error) {
	r0, _, e1 := syscall.Syscall6(procWSASocketW.Addr(), 6, uintptr(af), uintptr(typ), uintptr(protocol), uintptr(unsafe.Pointer(protoInfo)), uintptr(group), uintptr(flags))
	handle = Handle(r0)
	if handle == InvalidHandle {
		err = errnoErr(e1)
	}
	return
}

func WSAStartup(verreq uint32, data *WSAData) (sockerr error) {
	r0, _, _ := syscall.Syscall(procWSAStartup.Addr(), 2, uintptr(verreq), uintptr(unsafe.Pointer(data)), 0)
	if r0 != 0 {
		sockerr = syscall.Errno(r0)
	}
	return
}

func bind(s Handle, name unsafe.Pointer, namelen int32) (err error) {
	r1, _, e1 := syscall.Syscall(procbind.Addr(), 3, uintptr(s), uintptr(name), uintptr(namelen))
	if r1 == socket_error {
		err = errnoErr(e1)
	}
	return
}

func Closesocket(s Handle) (err error) {
	r1, _, e1 := syscall.Syscall(procclosesocket.Addr(), 1, uintptr(s), 0, 0)
	if r1 == socket_error {
		err = errnoErr(e1)
	}
	return
}

func connect(s Handle, name unsafe.Pointer, namelen int32) (err error) {
	r1, _, e1 := syscall.Syscall(procconnect.Addr(), 3, uintptr(s), uintptr(name), uintptr(namelen))
	if r1 == socket_error {
		err = errnoErr(e1)
	}
	return
}

func GetHostByName(name string) (h *Hostent, err error) {
	var _p0 *byte
	_p0, err = syscall.BytePtrFromString(name)
	if err != nil {
		return
	}
	return _GetHostByName(_p0)
}

func _GetHostByName(name *byte) (h *Hostent, err error) {
	r0, _, e1 := syscall.Syscall(procgethostbyname.Addr(), 1, uintptr(unsafe.Pointer(name)), 0, 0)
	h = (*Hostent)(unsafe.Pointer(r0))
	if h == nil {
		err = errnoErr(e1)
	}
	return
}

func getpeername(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) {
	r1, _, e1 := syscall.Syscall(procgetpeername.Addr(), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if r1 == socket_error {
		err = errnoErr(e1)
	}
	return
}

func GetProtoByName(name string) (p *Protoent, err error) {
	var _p0 *byte
	_p0, err = syscall.BytePtrFromString(name)
	if err != nil {
		return
	}
	return _GetProtoByName(_p0)
}

func _GetProtoByName(name *byte) (p *Protoent, err error) {
	r0, _, e1 := syscall.Syscall(procgetprotobyname.Addr(), 1, uintptr(unsafe.Pointer(name)), 0, 0)
	p = (*Protoent)(unsafe.Pointer(r0))
	if p == nil {
		err = errnoErr(e1)
	}
	return
}

func GetServByName(name string, proto string) (s *Servent, err error) {
	var _p0 *byte
	_p0, err = syscall.BytePtrFromString(name)
	if err != nil {
		return
	}
	var _p1 *byte
	_p1, err = syscall.BytePtrFromString(proto)
	if err != nil {
		return
	}
	return _GetServByName(_p0, _p1)
}

func _GetServByName(name *byte, proto *byte) (s *Servent, err error) {
	r0, _, e1 := syscall.Syscall(procgetservbyname.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(proto)), 0)
	s = (*Servent)(unsafe.Pointer(r0))
	if s == nil {
		err = errnoErr(e1)
	}
	return
}

func getsockname(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) {
	r1, _, e1 := syscall.Syscall(procgetsockname.Addr(), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
	if r1 == socket_error {
		err = errnoErr(e1)
	}
	return
}

func Getsockopt(s Handle, level int32, optname int32, optval *byte, optlen *int32) (err error) {
	r1, _, e1 := syscall.Syscall6(procgetsockopt.Addr(), 5, uintptr(s), uintptr(level), uintptr(optname), uintptr(unsafe.Pointer(optval)), uintptr(unsafe.Pointer(optlen)), 0)
	if r1 == socket_error {
		err = errnoErr(e1)
	}
	return
}

func listen(s Handle, backlog int32) (err error) {
	r1, _, e1 := syscall.Syscall(proclisten.Addr(), 2, uintptr(s), uintptr(backlog), 0)
	if r1 == socket_error {
		err = errnoErr(e1)
	}
	return
}

func Ntohs(netshort uint16) (u uint16) {
	r0, _, _ := syscall.Syscall(procntohs.Addr(), 1, uintptr(netshort), 0, 0)
	u = uint16(r0)
	return
}

func recvfrom(s Handle, buf []byte, flags int32, from *RawSockaddrAny, fromlen *int32) (n int32, err error) {
	var _p0 *byte
	if len(buf) > 0 {
		_p0 = &buf[0]
	}
	r0, _, e1 := syscall.Syscall6(procrecvfrom.Addr(), 6, uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
	n = int32(r0)
	if n == -1 {
		err = errnoErr(e1)
	}
	return
}

func sendto(s Handle, buf []byte, flags int32, to unsafe.Pointer, tolen int32) (err error) {
	var _p0 *byte
	if len(buf) > 0 {
		_p0 = &buf[0]
	}
	r1, _, e1 := syscall.Syscall6(procsendto.Addr(), 6, uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(tolen))
	if r1 == socket_error {
		err = errnoErr(e1)
	}
	return
}

func Setsockopt(s Handle, level int32, optname int32, optval *byte, optlen int32) (err error) {
	r1, _, e1 := syscall.Syscall6(procsetsockopt.Addr(), 5, uintptr(s), uintptr(level), uintptr(optname), uintptr(unsafe.Pointer(optval)), uintptr(optlen), 0)
	if r1 == socket_error {
		err = errnoErr(e1)
	}
	return
}

func shutdown(s Handle, how int32) (err error) {
	r1, _, e1 := syscall.Syscall(procshutdown.Addr(), 2, uintptr(s), uintptr(how), 0)
	if r1 == socket_error {
		err = errnoErr(e1)
	}
	return
}

func socket(af int32, typ int32, protocol int32) (handle Handle, err error) {
	r0, _, e1 := syscall.Syscall(procsocket.Addr(), 3, uintptr(af), uintptr(typ), uintptr(protocol))
	handle = Handle(r0)
	if handle == InvalidHandle {
		err = errnoErr(e1)
	}
	return
}

func WTSEnumerateSessions(handle Handle, reserved uint32, version uint32, sessions **WTS_SESSION_INFO, count *uint32) (err error) {
	r1, _, e1 := syscall.Syscall6(procWTSEnumerateSessionsW.Addr(), 5, uintptr(handle), uintptr(reserved), uintptr(version), uintptr(unsafe.Pointer(sessions)), uintptr(unsafe.Pointer(count)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}

func WTSFreeMemory(ptr uintptr) {
	syscall.Syscall(procWTSFreeMemory.Addr(), 1, uintptr(ptr), 0, 0)
	return
}

func WTSQueryUserToken(session uint32, token *Token) (err error) {
	r1, _, e1 := syscall.Syscall(procWTSQueryUserToken.Addr(), 2, uintptr(session), uintptr(unsafe.Pointer(token)), 0)
	if r1 == 0 {
		err = errnoErr(e1)
	}
	return
}
   07070100000EF1000041ED000000000000000000000008645E367C00000000000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/vendor/golang.org/x/text  07070100000EF2000081A4000000000000000000000001645E367C000005C7000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/golang.org/x/text/LICENSE  Copyright (c) 2009 The Go Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 07070100000EF3000081A4000000000000000000000001645E367C00000517000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/golang.org/x/text/PATENTS  Additional IP Rights Grant (Patents)

"This implementation" means the copyrightable works distributed by
Google as part of the Go project.

Google hereby grants to You a perpetual, worldwide, non-exclusive,
no-charge, royalty-free, irrevocable (except as stated in this section)
patent license to make, have made, use, offer to sell, sell, import,
transfer and otherwise run, modify and propagate the contents of this
implementation of Go, where such license applies only to those patent
claims, both currently owned or controlled by Google and acquired in
the future, licensable by Google that are necessarily infringed by this
implementation of Go.  This grant does not include claims that would be
infringed only as a consequence of further modification of this
implementation.  If you or your agent or exclusive licensee institute or
order or agree to the institution of patent litigation against any
entity (including a cross-claim or counterclaim in a lawsuit) alleging
that this implementation of Go or any code incorporated within this
implementation of Go constitutes direct or contributory patent
infringement, or inducement of patent infringement, then any patent
rights granted to you under this License for this implementation of Go
shall terminate as of the date such litigation is filed.
 07070100000EF4000041ED00000000000000000000000A645E367C00000000000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding 07070100000EF5000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/charmap 07070100000EF6000081A4000000000000000000000001645E367C0000199F000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/charmap/charmap.go  // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:generate go run maketables.go

// Package charmap provides simple character encodings such as IBM Code Page 437
// and Windows 1252.
package charmap // import "golang.org/x/text/encoding/charmap"

import (
	"unicode/utf8"

	"golang.org/x/text/encoding"
	"golang.org/x/text/encoding/internal"
	"golang.org/x/text/encoding/internal/identifier"
	"golang.org/x/text/transform"
)

// These encodings vary only in the way clients should interpret them. Their
// coded character set is identical and a single implementation can be shared.
var (
	// ISO8859_6E is the ISO 8859-6E encoding.
	ISO8859_6E encoding.Encoding = &iso8859_6E

	// ISO8859_6I is the ISO 8859-6I encoding.
	ISO8859_6I encoding.Encoding = &iso8859_6I

	// ISO8859_8E is the ISO 8859-8E encoding.
	ISO8859_8E encoding.Encoding = &iso8859_8E

	// ISO8859_8I is the ISO 8859-8I encoding.
	ISO8859_8I encoding.Encoding = &iso8859_8I

	iso8859_6E = internal.Encoding{
		Encoding: ISO8859_6,
		Name:     "ISO-8859-6E",
		MIB:      identifier.ISO88596E,
	}

	iso8859_6I = internal.Encoding{
		Encoding: ISO8859_6,
		Name:     "ISO-8859-6I",
		MIB:      identifier.ISO88596I,
	}

	iso8859_8E = internal.Encoding{
		Encoding: ISO8859_8,
		Name:     "ISO-8859-8E",
		MIB:      identifier.ISO88598E,
	}

	iso8859_8I = internal.Encoding{
		Encoding: ISO8859_8,
		Name:     "ISO-8859-8I",
		MIB:      identifier.ISO88598I,
	}
)

// All is a list of all defined encodings in this package.
var All []encoding.Encoding = listAll

// TODO: implement these encodings, in order of importance.
// ASCII, ISO8859_1:       Rather common. Close to Windows 1252.
// ISO8859_9:              Close to Windows 1254.

// utf8Enc holds a rune's UTF-8 encoding in data[:len].
type utf8Enc struct {
	len  uint8
	data [3]byte
}

// Charmap is an 8-bit character set encoding.
type Charmap struct {
	// name is the encoding's name.
	name string
	// mib is the encoding type of this encoder.
	mib identifier.MIB
	// asciiSuperset states whether the encoding is a superset of ASCII.
	asciiSuperset bool
	// low is the lower bound of the encoded byte for a non-ASCII rune. If
	// Charmap.asciiSuperset is true then this will be 0x80, otherwise 0x00.
	low uint8
	// replacement is the encoded replacement character.
	replacement byte
	// decode is the map from encoded byte to UTF-8.
	decode [256]utf8Enc
	// encoding is the map from runes to encoded bytes. Each entry is a
	// uint32: the high 8 bits are the encoded byte and the low 24 bits are
	// the rune. The table entries are sorted by ascending rune.
	encode [256]uint32
}

// NewDecoder implements the encoding.Encoding interface.
func (m *Charmap) NewDecoder() *encoding.Decoder {
	return &encoding.Decoder{Transformer: charmapDecoder{charmap: m}}
}

// NewEncoder implements the encoding.Encoding interface.
func (m *Charmap) NewEncoder() *encoding.Encoder {
	return &encoding.Encoder{Transformer: charmapEncoder{charmap: m}}
}

// String returns the Charmap's name.
func (m *Charmap) String() string {
	return m.name
}

// ID implements an internal interface.
func (m *Charmap) ID() (mib identifier.MIB, other string) {
	return m.mib, ""
}

// charmapDecoder implements transform.Transformer by decoding to UTF-8.
type charmapDecoder struct {
	transform.NopResetter
	charmap *Charmap
}

func (m charmapDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	for i, c := range src {
		if m.charmap.asciiSuperset && c < utf8.RuneSelf {
			if nDst >= len(dst) {
				err = transform.ErrShortDst
				break
			}
			dst[nDst] = c
			nDst++
			nSrc = i + 1
			continue
		}

		decode := &m.charmap.decode[c]
		n := int(decode.len)
		if nDst+n > len(dst) {
			err = transform.ErrShortDst
			break
		}
		// It's 15% faster to avoid calling copy for these tiny slices.
		for j := 0; j < n; j++ {
			dst[nDst] = decode.data[j]
			nDst++
		}
		nSrc = i + 1
	}
	return nDst, nSrc, err
}

// DecodeByte returns the Charmap's rune decoding of the byte b.
func (m *Charmap) DecodeByte(b byte) rune {
	switch x := &m.decode[b]; x.len {
	case 1:
		return rune(x.data[0])
	case 2:
		return rune(x.data[0]&0x1f)<<6 | rune(x.data[1]&0x3f)
	default:
		return rune(x.data[0]&0x0f)<<12 | rune(x.data[1]&0x3f)<<6 | rune(x.data[2]&0x3f)
	}
}

// charmapEncoder implements transform.Transformer by encoding from UTF-8.
type charmapEncoder struct {
	transform.NopResetter
	charmap *Charmap
}

func (m charmapEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	r, size := rune(0), 0
loop:
	for nSrc < len(src) {
		if nDst >= len(dst) {
			err = transform.ErrShortDst
			break
		}
		r = rune(src[nSrc])

		// Decode a 1-byte rune.
		if r < utf8.RuneSelf {
			if m.charmap.asciiSuperset {
				nSrc++
				dst[nDst] = uint8(r)
				nDst++
				continue
			}
			size = 1

		} else {
			// Decode a multi-byte rune.
			r, size = utf8.DecodeRune(src[nSrc:])
			if size == 1 {
				// All valid runes of size 1 (those below utf8.RuneSelf) were
				// handled above. We have invalid UTF-8 or we haven't seen the
				// full character yet.
				if !atEOF && !utf8.FullRune(src[nSrc:]) {
					err = transform.ErrShortSrc
				} else {
					err = internal.RepertoireError(m.charmap.replacement)
				}
				break
			}
		}

		// Binary search in [low, high) for that rune in the m.charmap.encode table.
		for low, high := int(m.charmap.low), 0x100; ; {
			if low >= high {
				err = internal.RepertoireError(m.charmap.replacement)
				break loop
			}
			mid := (low + high) / 2
			got := m.charmap.encode[mid]
			gotRune := rune(got & (1<<24 - 1))
			if gotRune < r {
				low = mid + 1
			} else if gotRune > r {
				high = mid
			} else {
				dst[nDst] = byte(got >> 24)
				nDst++
				break
			}
		}
		nSrc += size
	}
	return nDst, nSrc, err
}

// EncodeRune returns the Charmap's byte encoding of the rune r. ok is whether
// r is in the Charmap's repertoire. If not, b is set to the Charmap's
// replacement byte. This is often the ASCII substitute character '\x1a'.
func (m *Charmap) EncodeRune(r rune) (b byte, ok bool) {
	if r < utf8.RuneSelf && m.asciiSuperset {
		return byte(r), true
	}
	for low, high := int(m.low), 0x100; ; {
		if low >= high {
			return m.replacement, false
		}
		mid := (low + high) / 2
		got := m.encode[mid]
		gotRune := rune(got & (1<<24 - 1))
		if gotRune < r {
			low = mid + 1
		} else if gotRune > r {
			high = mid
		} else {
			return byte(got >> 24), true
		}
	}
}
 07070100000EF7000081A4000000000000000000000001645E367C0007A256000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/charmap/tables.go   // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.

package charmap

import (
	"golang.org/x/text/encoding"
	"golang.org/x/text/encoding/internal/identifier"
)

// CodePage037 is the IBM Code Page 037 encoding.
var CodePage037 *Charmap = &codePage037

var codePage037 = Charmap{
	name:          "IBM Code Page 037",
	mib:           identifier.IBM037,
	asciiSuperset: false,
	low:           0x00,
	replacement:   0x3f,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x9c, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x86, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x97, 0x00}}, {2, [3]byte{0xc2, 0x8d, 0x00}},
		{2, [3]byte{0xc2, 0x8e, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x9d, 0x00}}, {2, [3]byte{0xc2, 0x85, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x87, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x92, 0x00}}, {2, [3]byte{0xc2, 0x8f, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x80, 0x00}}, {2, [3]byte{0xc2, 0x81, 0x00}},
		{2, [3]byte{0xc2, 0x82, 0x00}}, {2, [3]byte{0xc2, 0x83, 0x00}},
		{2, [3]byte{0xc2, 0x84, 0x00}}, {1, [3]byte{0x0a, 0x00, 0x00}},
		{1, [3]byte{0x17, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x88, 0x00}}, {2, [3]byte{0xc2, 0x89, 0x00}},
		{2, [3]byte{0xc2, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0x8b, 0x00}},
		{2, [3]byte{0xc2, 0x8c, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0x91, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x93, 0x00}},
		{2, [3]byte{0xc2, 0x94, 0x00}}, {2, [3]byte{0xc2, 0x95, 0x00}},
		{2, [3]byte{0xc2, 0x96, 0x00}}, {1, [3]byte{0x04, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x98, 0x00}}, {2, [3]byte{0xc2, 0x99, 0x00}},
		{2, [3]byte{0xc2, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9b, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x9e, 0x00}}, {1, [3]byte{0x1a, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
		{2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa4, 0x00}},
		{2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
		{2, [3]byte{0xc3, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
		{2, [3]byte{0xc3, 0xa7, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}},
		{2, [3]byte{0xc2, 0xa2, 0x00}}, {1, [3]byte{0x2e, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x28, 0x00, 0x00}},
		{1, [3]byte{0x2b, 0x00, 0x00}}, {1, [3]byte{0x7c, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
		{2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
		{2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
		{2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
		{2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
		{1, [3]byte{0x21, 0x00, 0x00}}, {1, [3]byte{0x24, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x3b, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xac, 0x00}},
		{1, [3]byte{0x2d, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x84, 0x00}},
		{2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
		{2, [3]byte{0xc3, 0x83, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
		{2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
		{2, [3]byte{0xc2, 0xa6, 0x00}}, {1, [3]byte{0x2c, 0x00, 0x00}},
		{1, [3]byte{0x25, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
		{2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
		{2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
		{2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
		{2, [3]byte{0xc3, 0x8c, 0x00}}, {1, [3]byte{0x60, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x3d, 0x00, 0x00}}, {1, [3]byte{0x22, 0x00, 0x00}},
		{2, [3]byte{0xc3, 0x98, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
		{2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}},
		{2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {1, [3]byte{0x6a, 0x00, 0x00}},
		{1, [3]byte{0x6b, 0x00, 0x00}}, {1, [3]byte{0x6c, 0x00, 0x00}},
		{1, [3]byte{0x6d, 0x00, 0x00}}, {1, [3]byte{0x6e, 0x00, 0x00}},
		{1, [3]byte{0x6f, 0x00, 0x00}}, {1, [3]byte{0x70, 0x00, 0x00}},
		{1, [3]byte{0x71, 0x00, 0x00}}, {1, [3]byte{0x72, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}},
		{2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}},
		{2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc2, 0xa4, 0x00}},
		{2, [3]byte{0xc2, 0xb5, 0x00}}, {1, [3]byte{0x7e, 0x00, 0x00}},
		{1, [3]byte{0x73, 0x00, 0x00}}, {1, [3]byte{0x74, 0x00, 0x00}},
		{1, [3]byte{0x75, 0x00, 0x00}}, {1, [3]byte{0x76, 0x00, 0x00}},
		{1, [3]byte{0x77, 0x00, 0x00}}, {1, [3]byte{0x78, 0x00, 0x00}},
		{1, [3]byte{0x79, 0x00, 0x00}}, {1, [3]byte{0x7a, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0xa1, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}},
		{2, [3]byte{0xc3, 0x90, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}},
		{2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0xae, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
		{2, [3]byte{0xc2, 0xa5, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
		{2, [3]byte{0xc2, 0xa9, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xbc, 0x00}},
		{2, [3]byte{0xc2, 0xbd, 0x00}}, {2, [3]byte{0xc2, 0xbe, 0x00}},
		{1, [3]byte{0x5b, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0xaf, 0x00}}, {2, [3]byte{0xc2, 0xa8, 0x00}},
		{2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
		{1, [3]byte{0x7b, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}},
		{2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}},
		{2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
		{1, [3]byte{0x7d, 0x00, 0x00}}, {1, [3]byte{0x4a, 0x00, 0x00}},
		{1, [3]byte{0x4b, 0x00, 0x00}}, {1, [3]byte{0x4c, 0x00, 0x00}},
		{1, [3]byte{0x4d, 0x00, 0x00}}, {1, [3]byte{0x4e, 0x00, 0x00}},
		{1, [3]byte{0x4f, 0x00, 0x00}}, {1, [3]byte{0x50, 0x00, 0x00}},
		{1, [3]byte{0x51, 0x00, 0x00}}, {1, [3]byte{0x52, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0xb9, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
		{2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
		{2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
		{1, [3]byte{0x53, 0x00, 0x00}}, {1, [3]byte{0x54, 0x00, 0x00}},
		{1, [3]byte{0x55, 0x00, 0x00}}, {1, [3]byte{0x56, 0x00, 0x00}},
		{1, [3]byte{0x57, 0x00, 0x00}}, {1, [3]byte{0x58, 0x00, 0x00}},
		{1, [3]byte{0x59, 0x00, 0x00}}, {1, [3]byte{0x5a, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0x94, 0x00}},
		{2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x92, 0x00}},
		{2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
		{2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
		{2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9f, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x37000004, 0x2d000005, 0x2e000006, 0x2f000007,
		0x16000008, 0x05000009, 0x2500000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x3c000014, 0x3d000015, 0x32000016, 0x26000017,
		0x18000018, 0x19000019, 0x3f00001a, 0x2700001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x40000020, 0x5a000021, 0x7f000022, 0x7b000023, 0x5b000024, 0x6c000025, 0x50000026, 0x7d000027,
		0x4d000028, 0x5d000029, 0x5c00002a, 0x4e00002b, 0x6b00002c, 0x6000002d, 0x4b00002e, 0x6100002f,
		0xf0000030, 0xf1000031, 0xf2000032, 0xf3000033, 0xf4000034, 0xf5000035, 0xf6000036, 0xf7000037,
		0xf8000038, 0xf9000039, 0x7a00003a, 0x5e00003b, 0x4c00003c, 0x7e00003d, 0x6e00003e, 0x6f00003f,
		0x7c000040, 0xc1000041, 0xc2000042, 0xc3000043, 0xc4000044, 0xc5000045, 0xc6000046, 0xc7000047,
		0xc8000048, 0xc9000049, 0xd100004a, 0xd200004b, 0xd300004c, 0xd400004d, 0xd500004e, 0xd600004f,
		0xd7000050, 0xd8000051, 0xd9000052, 0xe2000053, 0xe3000054, 0xe4000055, 0xe5000056, 0xe6000057,
		0xe7000058, 0xe8000059, 0xe900005a, 0xba00005b, 0xe000005c, 0xbb00005d, 0xb000005e, 0x6d00005f,
		0x79000060, 0x81000061, 0x82000062, 0x83000063, 0x84000064, 0x85000065, 0x86000066, 0x87000067,
		0x88000068, 0x89000069, 0x9100006a, 0x9200006b, 0x9300006c, 0x9400006d, 0x9500006e, 0x9600006f,
		0x97000070, 0x98000071, 0x99000072, 0xa2000073, 0xa3000074, 0xa4000075, 0xa5000076, 0xa6000077,
		0xa7000078, 0xa8000079, 0xa900007a, 0xc000007b, 0x4f00007c, 0xd000007d, 0xa100007e, 0x0700007f,
		0x20000080, 0x21000081, 0x22000082, 0x23000083, 0x24000084, 0x15000085, 0x06000086, 0x17000087,
		0x28000088, 0x29000089, 0x2a00008a, 0x2b00008b, 0x2c00008c, 0x0900008d, 0x0a00008e, 0x1b00008f,
		0x30000090, 0x31000091, 0x1a000092, 0x33000093, 0x34000094, 0x35000095, 0x36000096, 0x08000097,
		0x38000098, 0x39000099, 0x3a00009a, 0x3b00009b, 0x0400009c, 0x1400009d, 0x3e00009e, 0xff00009f,
		0x410000a0, 0xaa0000a1, 0x4a0000a2, 0xb10000a3, 0x9f0000a4, 0xb20000a5, 0x6a0000a6, 0xb50000a7,
		0xbd0000a8, 0xb40000a9, 0x9a0000aa, 0x8a0000ab, 0x5f0000ac, 0xca0000ad, 0xaf0000ae, 0xbc0000af,
		0x900000b0, 0x8f0000b1, 0xea0000b2, 0xfa0000b3, 0xbe0000b4, 0xa00000b5, 0xb60000b6, 0xb30000b7,
		0x9d0000b8, 0xda0000b9, 0x9b0000ba, 0x8b0000bb, 0xb70000bc, 0xb80000bd, 0xb90000be, 0xab0000bf,
		0x640000c0, 0x650000c1, 0x620000c2, 0x660000c3, 0x630000c4, 0x670000c5, 0x9e0000c6, 0x680000c7,
		0x740000c8, 0x710000c9, 0x720000ca, 0x730000cb, 0x780000cc, 0x750000cd, 0x760000ce, 0x770000cf,
		0xac0000d0, 0x690000d1, 0xed0000d2, 0xee0000d3, 0xeb0000d4, 0xef0000d5, 0xec0000d6, 0xbf0000d7,
		0x800000d8, 0xfd0000d9, 0xfe0000da, 0xfb0000db, 0xfc0000dc, 0xad0000dd, 0xae0000de, 0x590000df,
		0x440000e0, 0x450000e1, 0x420000e2, 0x460000e3, 0x430000e4, 0x470000e5, 0x9c0000e6, 0x480000e7,
		0x540000e8, 0x510000e9, 0x520000ea, 0x530000eb, 0x580000ec, 0x550000ed, 0x560000ee, 0x570000ef,
		0x8c0000f0, 0x490000f1, 0xcd0000f2, 0xce0000f3, 0xcb0000f4, 0xcf0000f5, 0xcc0000f6, 0xe10000f7,
		0x700000f8, 0xdd0000f9, 0xde0000fa, 0xdb0000fb, 0xdc0000fc, 0x8d0000fd, 0x8e0000fe, 0xdf0000ff,
	},
}

// CodePage437 is the IBM Code Page 437 encoding.
var CodePage437 *Charmap = &codePage437

var codePage437 = Charmap{
	name:          "IBM Code Page 437",
	mib:           identifier.PC8CodePage437,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}},
		{2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}},
		{2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa0, 0x00}},
		{2, [3]byte{0xc3, 0xa5, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
		{2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
		{2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
		{2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xac, 0x00}},
		{2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
		{2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc3, 0xa6, 0x00}},
		{2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}},
		{2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}},
		{2, [3]byte{0xc3, 0xbb, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
		{2, [3]byte{0xc3, 0xbf, 0x00}}, {2, [3]byte{0xc3, 0x96, 0x00}},
		{2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc2, 0xa2, 0x00}},
		{2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}},
		{3, [3]byte{0xe2, 0x82, 0xa7}}, {2, [3]byte{0xc6, 0x92, 0x00}},
		{2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
		{2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}},
		{2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
		{2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}},
		{2, [3]byte{0xc2, 0xbf, 0x00}}, {3, [3]byte{0xe2, 0x8c, 0x90}},
		{2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
		{2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
		{2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
		{3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}},
		{3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}},
		{3, [3]byte{0xe2, 0x94, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa1}},
		{3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0x96}},
		{3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0xa3}},
		{3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}},
		{3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9c}},
		{3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x94, 0x90}},
		{3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}},
		{3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}},
		{3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}},
		{3, [3]byte{0xe2, 0x95, 0x9e}}, {3, [3]byte{0xe2, 0x95, 0x9f}},
		{3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}},
		{3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}},
		{3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}},
		{3, [3]byte{0xe2, 0x95, 0xac}}, {3, [3]byte{0xe2, 0x95, 0xa7}},
		{3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa4}},
		{3, [3]byte{0xe2, 0x95, 0xa5}}, {3, [3]byte{0xe2, 0x95, 0x99}},
		{3, [3]byte{0xe2, 0x95, 0x98}}, {3, [3]byte{0xe2, 0x95, 0x92}},
		{3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0xab}},
		{3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x94, 0x98}},
		{3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}},
		{3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x8c}},
		{3, [3]byte{0xe2, 0x96, 0x90}}, {3, [3]byte{0xe2, 0x96, 0x80}},
		{2, [3]byte{0xce, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
		{2, [3]byte{0xce, 0x93, 0x00}}, {2, [3]byte{0xcf, 0x80, 0x00}},
		{2, [3]byte{0xce, 0xa3, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}},
		{2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xcf, 0x84, 0x00}},
		{2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0x98, 0x00}},
		{2, [3]byte{0xce, 0xa9, 0x00}}, {2, [3]byte{0xce, 0xb4, 0x00}},
		{3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xcf, 0x86, 0x00}},
		{2, [3]byte{0xce, 0xb5, 0x00}}, {3, [3]byte{0xe2, 0x88, 0xa9}},
		{3, [3]byte{0xe2, 0x89, 0xa1}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{3, [3]byte{0xe2, 0x89, 0xa5}}, {3, [3]byte{0xe2, 0x89, 0xa4}},
		{3, [3]byte{0xe2, 0x8c, 0xa0}}, {3, [3]byte{0xe2, 0x8c, 0xa1}},
		{2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x99}},
		{2, [3]byte{0xc2, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}},
		{3, [3]byte{0xe2, 0x81, 0xbf}}, {2, [3]byte{0xc2, 0xb2, 0x00}},
		{3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xff0000a0, 0xad0000a1, 0x9b0000a2, 0x9c0000a3, 0x9d0000a5, 0xa60000aa, 0xae0000ab, 0xaa0000ac,
		0xf80000b0, 0xf10000b1, 0xfd0000b2, 0xe60000b5, 0xfa0000b7, 0xa70000ba, 0xaf0000bb, 0xac0000bc,
		0xab0000bd, 0xa80000bf, 0x8e0000c4, 0x8f0000c5, 0x920000c6, 0x800000c7, 0x900000c9, 0xa50000d1,
		0x990000d6, 0x9a0000dc, 0xe10000df, 0x850000e0, 0xa00000e1, 0x830000e2, 0x840000e4, 0x860000e5,
		0x910000e6, 0x870000e7, 0x8a0000e8, 0x820000e9, 0x880000ea, 0x890000eb, 0x8d0000ec, 0xa10000ed,
		0x8c0000ee, 0x8b0000ef, 0xa40000f1, 0x950000f2, 0xa20000f3, 0x930000f4, 0x940000f6, 0xf60000f7,
		0x970000f9, 0xa30000fa, 0x960000fb, 0x810000fc, 0x980000ff, 0x9f000192, 0xe2000393, 0xe9000398,
		0xe40003a3, 0xe80003a6, 0xea0003a9, 0xe00003b1, 0xeb0003b4, 0xee0003b5, 0xe30003c0, 0xe50003c3,
		0xe70003c4, 0xed0003c6, 0xfc00207f, 0x9e0020a7, 0xf9002219, 0xfb00221a, 0xec00221e, 0xef002229,
		0xf7002248, 0xf0002261, 0xf3002264, 0xf2002265, 0xa9002310, 0xf4002320, 0xf5002321, 0xc4002500,
		0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c,
		0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, 0xd5002552, 0xd6002553, 0xc9002554, 0xb8002555,
		0xb7002556, 0xbb002557, 0xd4002558, 0xd3002559, 0xc800255a, 0xbe00255b, 0xbd00255c, 0xbc00255d,
		0xc600255e, 0xc700255f, 0xcc002560, 0xb5002561, 0xb6002562, 0xb9002563, 0xd1002564, 0xd2002565,
		0xcb002566, 0xcf002567, 0xd0002568, 0xca002569, 0xd800256a, 0xd700256b, 0xce00256c, 0xdf002580,
		0xdc002584, 0xdb002588, 0xdd00258c, 0xde002590, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0,
	},
}

// CodePage850 is the IBM Code Page 850 encoding.
var CodePage850 *Charmap = &codePage850

var codePage850 = Charmap{
	name:          "IBM Code Page 850",
	mib:           identifier.PC850Multilingual,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}},
		{2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}},
		{2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa0, 0x00}},
		{2, [3]byte{0xc3, 0xa5, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
		{2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
		{2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
		{2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xac, 0x00}},
		{2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
		{2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc3, 0xa6, 0x00}},
		{2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}},
		{2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}},
		{2, [3]byte{0xc3, 0xbb, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
		{2, [3]byte{0xc3, 0xbf, 0x00}}, {2, [3]byte{0xc3, 0x96, 0x00}},
		{2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0xb8, 0x00}},
		{2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x98, 0x00}},
		{2, [3]byte{0xc3, 0x97, 0x00}}, {2, [3]byte{0xc6, 0x92, 0x00}},
		{2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
		{2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}},
		{2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
		{2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}},
		{2, [3]byte{0xc2, 0xbf, 0x00}}, {2, [3]byte{0xc2, 0xae, 0x00}},
		{2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
		{2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
		{2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
		{3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}},
		{3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}},
		{3, [3]byte{0xe2, 0x94, 0xa4}}, {2, [3]byte{0xc3, 0x81, 0x00}},
		{2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x80, 0x00}},
		{2, [3]byte{0xc2, 0xa9, 0x00}}, {3, [3]byte{0xe2, 0x95, 0xa3}},
		{3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}},
		{3, [3]byte{0xe2, 0x95, 0x9d}}, {2, [3]byte{0xc2, 0xa2, 0x00}},
		{2, [3]byte{0xc2, 0xa5, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x90}},
		{3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}},
		{3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}},
		{3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}},
		{2, [3]byte{0xc3, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}},
		{3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}},
		{3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}},
		{3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}},
		{3, [3]byte{0xe2, 0x95, 0xac}}, {2, [3]byte{0xc2, 0xa4, 0x00}},
		{2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0x90, 0x00}},
		{2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
		{2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc4, 0xb1, 0x00}},
		{2, [3]byte{0xc3, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0x8e, 0x00}},
		{2, [3]byte{0xc3, 0x8f, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x98}},
		{3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}},
		{3, [3]byte{0xe2, 0x96, 0x84}}, {2, [3]byte{0xc2, 0xa6, 0x00}},
		{2, [3]byte{0xc3, 0x8c, 0x00}}, {3, [3]byte{0xe2, 0x96, 0x80}},
		{2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
		{2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x92, 0x00}},
		{2, [3]byte{0xc3, 0xb5, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
		{2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xc3, 0xbe, 0x00}},
		{2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9a, 0x00}},
		{2, [3]byte{0xc3, 0x9b, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
		{2, [3]byte{0xc3, 0xbd, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}},
		{2, [3]byte{0xc2, 0xaf, 0x00}}, {2, [3]byte{0xc2, 0xb4, 0x00}},
		{2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{3, [3]byte{0xe2, 0x80, 0x97}}, {2, [3]byte{0xc2, 0xbe, 0x00}},
		{2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xc3, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xa8, 0x00}},
		{2, [3]byte{0xc2, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}},
		{2, [3]byte{0xc2, 0xb3, 0x00}}, {2, [3]byte{0xc2, 0xb2, 0x00}},
		{3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xff0000a0, 0xad0000a1, 0xbd0000a2, 0x9c0000a3, 0xcf0000a4, 0xbe0000a5, 0xdd0000a6, 0xf50000a7,
		0xf90000a8, 0xb80000a9, 0xa60000aa, 0xae0000ab, 0xaa0000ac, 0xf00000ad, 0xa90000ae, 0xee0000af,
		0xf80000b0, 0xf10000b1, 0xfd0000b2, 0xfc0000b3, 0xef0000b4, 0xe60000b5, 0xf40000b6, 0xfa0000b7,
		0xf70000b8, 0xfb0000b9, 0xa70000ba, 0xaf0000bb, 0xac0000bc, 0xab0000bd, 0xf30000be, 0xa80000bf,
		0xb70000c0, 0xb50000c1, 0xb60000c2, 0xc70000c3, 0x8e0000c4, 0x8f0000c5, 0x920000c6, 0x800000c7,
		0xd40000c8, 0x900000c9, 0xd20000ca, 0xd30000cb, 0xde0000cc, 0xd60000cd, 0xd70000ce, 0xd80000cf,
		0xd10000d0, 0xa50000d1, 0xe30000d2, 0xe00000d3, 0xe20000d4, 0xe50000d5, 0x990000d6, 0x9e0000d7,
		0x9d0000d8, 0xeb0000d9, 0xe90000da, 0xea0000db, 0x9a0000dc, 0xed0000dd, 0xe80000de, 0xe10000df,
		0x850000e0, 0xa00000e1, 0x830000e2, 0xc60000e3, 0x840000e4, 0x860000e5, 0x910000e6, 0x870000e7,
		0x8a0000e8, 0x820000e9, 0x880000ea, 0x890000eb, 0x8d0000ec, 0xa10000ed, 0x8c0000ee, 0x8b0000ef,
		0xd00000f0, 0xa40000f1, 0x950000f2, 0xa20000f3, 0x930000f4, 0xe40000f5, 0x940000f6, 0xf60000f7,
		0x9b0000f8, 0x970000f9, 0xa30000fa, 0x960000fb, 0x810000fc, 0xec0000fd, 0xe70000fe, 0x980000ff,
		0xd5000131, 0x9f000192, 0xf2002017, 0xc4002500, 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514,
		0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551,
		0xc9002554, 0xbb002557, 0xc800255a, 0xbc00255d, 0xcc002560, 0xb9002563, 0xcb002566, 0xca002569,
		0xce00256c, 0xdf002580, 0xdc002584, 0xdb002588, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0,
	},
}

// CodePage852 is the IBM Code Page 852 encoding.
var CodePage852 *Charmap = &codePage852

var codePage852 = Charmap{
	name:          "IBM Code Page 852",
	mib:           identifier.PCp852,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}},
		{2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}},
		{2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc5, 0xaf, 0x00}},
		{2, [3]byte{0xc4, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
		{2, [3]byte{0xc5, 0x82, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
		{2, [3]byte{0xc5, 0x90, 0x00}}, {2, [3]byte{0xc5, 0x91, 0x00}},
		{2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc5, 0xb9, 0x00}},
		{2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc4, 0x86, 0x00}},
		{2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc4, 0xb9, 0x00}},
		{2, [3]byte{0xc4, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}},
		{2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc4, 0xbd, 0x00}},
		{2, [3]byte{0xc4, 0xbe, 0x00}}, {2, [3]byte{0xc5, 0x9a, 0x00}},
		{2, [3]byte{0xc5, 0x9b, 0x00}}, {2, [3]byte{0xc3, 0x96, 0x00}},
		{2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc5, 0xa4, 0x00}},
		{2, [3]byte{0xc5, 0xa5, 0x00}}, {2, [3]byte{0xc5, 0x81, 0x00}},
		{2, [3]byte{0xc3, 0x97, 0x00}}, {2, [3]byte{0xc4, 0x8d, 0x00}},
		{2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
		{2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}},
		{2, [3]byte{0xc4, 0x84, 0x00}}, {2, [3]byte{0xc4, 0x85, 0x00}},
		{2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc5, 0xbe, 0x00}},
		{2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc4, 0x99, 0x00}},
		{2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc5, 0xba, 0x00}},
		{2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc5, 0x9f, 0x00}},
		{2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
		{3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}},
		{3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}},
		{3, [3]byte{0xe2, 0x94, 0xa4}}, {2, [3]byte{0xc3, 0x81, 0x00}},
		{2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc4, 0x9a, 0x00}},
		{2, [3]byte{0xc5, 0x9e, 0x00}}, {3, [3]byte{0xe2, 0x95, 0xa3}},
		{3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}},
		{3, [3]byte{0xe2, 0x95, 0x9d}}, {2, [3]byte{0xc5, 0xbb, 0x00}},
		{2, [3]byte{0xc5, 0xbc, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x90}},
		{3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}},
		{3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}},
		{3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}},
		{2, [3]byte{0xc4, 0x82, 0x00}}, {2, [3]byte{0xc4, 0x83, 0x00}},
		{3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}},
		{3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}},
		{3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}},
		{3, [3]byte{0xe2, 0x95, 0xac}}, {2, [3]byte{0xc2, 0xa4, 0x00}},
		{2, [3]byte{0xc4, 0x91, 0x00}}, {2, [3]byte{0xc4, 0x90, 0x00}},
		{2, [3]byte{0xc4, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
		{2, [3]byte{0xc4, 0x8f, 0x00}}, {2, [3]byte{0xc5, 0x87, 0x00}},
		{2, [3]byte{0xc3, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0x8e, 0x00}},
		{2, [3]byte{0xc4, 0x9b, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x98}},
		{3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}},
		{3, [3]byte{0xe2, 0x96, 0x84}}, {2, [3]byte{0xc5, 0xa2, 0x00}},
		{2, [3]byte{0xc5, 0xae, 0x00}}, {3, [3]byte{0xe2, 0x96, 0x80}},
		{2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
		{2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc5, 0x83, 0x00}},
		{2, [3]byte{0xc5, 0x84, 0x00}}, {2, [3]byte{0xc5, 0x88, 0x00}},
		{2, [3]byte{0xc5, 0xa0, 0x00}}, {2, [3]byte{0xc5, 0xa1, 0x00}},
		{2, [3]byte{0xc5, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x9a, 0x00}},
		{2, [3]byte{0xc5, 0x95, 0x00}}, {2, [3]byte{0xc5, 0xb0, 0x00}},
		{2, [3]byte{0xc3, 0xbd, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}},
		{2, [3]byte{0xc5, 0xa3, 0x00}}, {2, [3]byte{0xc2, 0xb4, 0x00}},
		{2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xcb, 0x9d, 0x00}},
		{2, [3]byte{0xcb, 0x9b, 0x00}}, {2, [3]byte{0xcb, 0x87, 0x00}},
		{2, [3]byte{0xcb, 0x98, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xc3, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xa8, 0x00}},
		{2, [3]byte{0xcb, 0x99, 0x00}}, {2, [3]byte{0xc5, 0xb1, 0x00}},
		{2, [3]byte{0xc5, 0x98, 0x00}}, {2, [3]byte{0xc5, 0x99, 0x00}},
		{3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xff0000a0, 0xcf0000a4, 0xf50000a7, 0xf90000a8, 0xae0000ab, 0xaa0000ac, 0xf00000ad, 0xf80000b0,
		0xef0000b4, 0xf70000b8, 0xaf0000bb, 0xb50000c1, 0xb60000c2, 0x8e0000c4, 0x800000c7, 0x900000c9,
		0xd30000cb, 0xd60000cd, 0xd70000ce, 0xe00000d3, 0xe20000d4, 0x990000d6, 0x9e0000d7, 0xe90000da,
		0x9a0000dc, 0xed0000dd, 0xe10000df, 0xa00000e1, 0x830000e2, 0x840000e4, 0x870000e7, 0x820000e9,
		0x890000eb, 0xa10000ed, 0x8c0000ee, 0xa20000f3, 0x930000f4, 0x940000f6, 0xf60000f7, 0xa30000fa,
		0x810000fc, 0xec0000fd, 0xc6000102, 0xc7000103, 0xa4000104, 0xa5000105, 0x8f000106, 0x86000107,
		0xac00010c, 0x9f00010d, 0xd200010e, 0xd400010f, 0xd1000110, 0xd0000111, 0xa8000118, 0xa9000119,
		0xb700011a, 0xd800011b, 0x91000139, 0x9200013a, 0x9500013d, 0x9600013e, 0x9d000141, 0x88000142,
		0xe3000143, 0xe4000144, 0xd5000147, 0xe5000148, 0x8a000150, 0x8b000151, 0xe8000154, 0xea000155,
		0xfc000158, 0xfd000159, 0x9700015a, 0x9800015b, 0xb800015e, 0xad00015f, 0xe6000160, 0xe7000161,
		0xdd000162, 0xee000163, 0x9b000164, 0x9c000165, 0xde00016e, 0x8500016f, 0xeb000170, 0xfb000171,
		0x8d000179, 0xab00017a, 0xbd00017b, 0xbe00017c, 0xa600017d, 0xa700017e, 0xf30002c7, 0xf40002d8,
		0xfa0002d9, 0xf20002db, 0xf10002dd, 0xc4002500, 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514,
		0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551,
		0xc9002554, 0xbb002557, 0xc800255a, 0xbc00255d, 0xcc002560, 0xb9002563, 0xcb002566, 0xca002569,
		0xce00256c, 0xdf002580, 0xdc002584, 0xdb002588, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0,
	},
}

// CodePage855 is the IBM Code Page 855 encoding.
var CodePage855 *Charmap = &codePage855

var codePage855 = Charmap{
	name:          "IBM Code Page 855",
	mib:           identifier.IBM855,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{2, [3]byte{0xd1, 0x92, 0x00}}, {2, [3]byte{0xd0, 0x82, 0x00}},
		{2, [3]byte{0xd1, 0x93, 0x00}}, {2, [3]byte{0xd0, 0x83, 0x00}},
		{2, [3]byte{0xd1, 0x91, 0x00}}, {2, [3]byte{0xd0, 0x81, 0x00}},
		{2, [3]byte{0xd1, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x84, 0x00}},
		{2, [3]byte{0xd1, 0x95, 0x00}}, {2, [3]byte{0xd0, 0x85, 0x00}},
		{2, [3]byte{0xd1, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x86, 0x00}},
		{2, [3]byte{0xd1, 0x97, 0x00}}, {2, [3]byte{0xd0, 0x87, 0x00}},
		{2, [3]byte{0xd1, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x88, 0x00}},
		{2, [3]byte{0xd1, 0x99, 0x00}}, {2, [3]byte{0xd0, 0x89, 0x00}},
		{2, [3]byte{0xd1, 0x9a, 0x00}}, {2, [3]byte{0xd0, 0x8a, 0x00}},
		{2, [3]byte{0xd1, 0x9b, 0x00}}, {2, [3]byte{0xd0, 0x8b, 0x00}},
		{2, [3]byte{0xd1, 0x9c, 0x00}}, {2, [3]byte{0xd0, 0x8c, 0x00}},
		{2, [3]byte{0xd1, 0x9e, 0x00}}, {2, [3]byte{0xd0, 0x8e, 0x00}},
		{2, [3]byte{0xd1, 0x9f, 0x00}}, {2, [3]byte{0xd0, 0x8f, 0x00}},
		{2, [3]byte{0xd1, 0x8e, 0x00}}, {2, [3]byte{0xd0, 0xae, 0x00}},
		{2, [3]byte{0xd1, 0x8a, 0x00}}, {2, [3]byte{0xd0, 0xaa, 0x00}},
		{2, [3]byte{0xd0, 0xb0, 0x00}}, {2, [3]byte{0xd0, 0x90, 0x00}},
		{2, [3]byte{0xd0, 0xb1, 0x00}}, {2, [3]byte{0xd0, 0x91, 0x00}},
		{2, [3]byte{0xd1, 0x86, 0x00}}, {2, [3]byte{0xd0, 0xa6, 0x00}},
		{2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0x94, 0x00}},
		{2, [3]byte{0xd0, 0xb5, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}},
		{2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd0, 0xa4, 0x00}},
		{2, [3]byte{0xd0, 0xb3, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}},
		{2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
		{3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}},
		{3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}},
		{3, [3]byte{0xe2, 0x94, 0xa4}}, {2, [3]byte{0xd1, 0x85, 0x00}},
		{2, [3]byte{0xd0, 0xa5, 0x00}}, {2, [3]byte{0xd0, 0xb8, 0x00}},
		{2, [3]byte{0xd0, 0x98, 0x00}}, {3, [3]byte{0xe2, 0x95, 0xa3}},
		{3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}},
		{3, [3]byte{0xe2, 0x95, 0x9d}}, {2, [3]byte{0xd0, 0xb9, 0x00}},
		{2, [3]byte{0xd0, 0x99, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x90}},
		{3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}},
		{3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}},
		{3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}},
		{2, [3]byte{0xd0, 0xba, 0x00}}, {2, [3]byte{0xd0, 0x9a, 0x00}},
		{3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}},
		{3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}},
		{3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}},
		{3, [3]byte{0xe2, 0x95, 0xac}}, {2, [3]byte{0xc2, 0xa4, 0x00}},
		{2, [3]byte{0xd0, 0xbb, 0x00}}, {2, [3]byte{0xd0, 0x9b, 0x00}},
		{2, [3]byte{0xd0, 0xbc, 0x00}}, {2, [3]byte{0xd0, 0x9c, 0x00}},
		{2, [3]byte{0xd0, 0xbd, 0x00}}, {2, [3]byte{0xd0, 0x9d, 0x00}},
		{2, [3]byte{0xd0, 0xbe, 0x00}}, {2, [3]byte{0xd0, 0x9e, 0x00}},
		{2, [3]byte{0xd0, 0xbf, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x98}},
		{3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}},
		{3, [3]byte{0xe2, 0x96, 0x84}}, {2, [3]byte{0xd0, 0x9f, 0x00}},
		{2, [3]byte{0xd1, 0x8f, 0x00}}, {3, [3]byte{0xe2, 0x96, 0x80}},
		{2, [3]byte{0xd0, 0xaf, 0x00}}, {2, [3]byte{0xd1, 0x80, 0x00}},
		{2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}},
		{2, [3]byte{0xd0, 0xa1, 0x00}}, {2, [3]byte{0xd1, 0x82, 0x00}},
		{2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}},
		{2, [3]byte{0xd0, 0xa3, 0x00}}, {2, [3]byte{0xd0, 0xb6, 0x00}},
		{2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0xb2, 0x00}},
		{2, [3]byte{0xd0, 0x92, 0x00}}, {2, [3]byte{0xd1, 0x8c, 0x00}},
		{2, [3]byte{0xd0, 0xac, 0x00}}, {3, [3]byte{0xe2, 0x84, 0x96}},
		{2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}},
		{2, [3]byte{0xd0, 0xab, 0x00}}, {2, [3]byte{0xd0, 0xb7, 0x00}},
		{2, [3]byte{0xd0, 0x97, 0x00}}, {2, [3]byte{0xd1, 0x88, 0x00}},
		{2, [3]byte{0xd0, 0xa8, 0x00}}, {2, [3]byte{0xd1, 0x8d, 0x00}},
		{2, [3]byte{0xd0, 0xad, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}},
		{2, [3]byte{0xd0, 0xa9, 0x00}}, {2, [3]byte{0xd1, 0x87, 0x00}},
		{2, [3]byte{0xd0, 0xa7, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xff0000a0, 0xcf0000a4, 0xfd0000a7, 0xae0000ab, 0xf00000ad, 0xaf0000bb, 0x85000401, 0x81000402,
		0x83000403, 0x87000404, 0x89000405, 0x8b000406, 0x8d000407, 0x8f000408, 0x91000409, 0x9300040a,
		0x9500040b, 0x9700040c, 0x9900040e, 0x9b00040f, 0xa1000410, 0xa3000411, 0xec000412, 0xad000413,
		0xa7000414, 0xa9000415, 0xea000416, 0xf4000417, 0xb8000418, 0xbe000419, 0xc700041a, 0xd100041b,
		0xd300041c, 0xd500041d, 0xd700041e, 0xdd00041f, 0xe2000420, 0xe4000421, 0xe6000422, 0xe8000423,
		0xab000424, 0xb6000425, 0xa5000426, 0xfc000427, 0xf6000428, 0xfa000429, 0x9f00042a, 0xf200042b,
		0xee00042c, 0xf800042d, 0x9d00042e, 0xe000042f, 0xa0000430, 0xa2000431, 0xeb000432, 0xac000433,
		0xa6000434, 0xa8000435, 0xe9000436, 0xf3000437, 0xb7000438, 0xbd000439, 0xc600043a, 0xd000043b,
		0xd200043c, 0xd400043d, 0xd600043e, 0xd800043f, 0xe1000440, 0xe3000441, 0xe5000442, 0xe7000443,
		0xaa000444, 0xb5000445, 0xa4000446, 0xfb000447, 0xf5000448, 0xf9000449, 0x9e00044a, 0xf100044b,
		0xed00044c, 0xf700044d, 0x9c00044e, 0xde00044f, 0x84000451, 0x80000452, 0x82000453, 0x86000454,
		0x88000455, 0x8a000456, 0x8c000457, 0x8e000458, 0x90000459, 0x9200045a, 0x9400045b, 0x9600045c,
		0x9800045e, 0x9a00045f, 0xef002116, 0xc4002500, 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514,
		0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551,
		0xc9002554, 0xbb002557, 0xc800255a, 0xbc00255d, 0xcc002560, 0xb9002563, 0xcb002566, 0xca002569,
		0xce00256c, 0xdf002580, 0xdc002584, 0xdb002588, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0,
	},
}

// CodePage858 is the Windows Code Page 858 encoding.
var CodePage858 *Charmap = &codePage858

var codePage858 = Charmap{
	name:          "Windows Code Page 858",
	mib:           identifier.IBM00858,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}},
		{2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}},
		{2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa0, 0x00}},
		{2, [3]byte{0xc3, 0xa5, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
		{2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
		{2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
		{2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xac, 0x00}},
		{2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
		{2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc3, 0xa6, 0x00}},
		{2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}},
		{2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}},
		{2, [3]byte{0xc3, 0xbb, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
		{2, [3]byte{0xc3, 0xbf, 0x00}}, {2, [3]byte{0xc3, 0x96, 0x00}},
		{2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0xb8, 0x00}},
		{2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x98, 0x00}},
		{2, [3]byte{0xc3, 0x97, 0x00}}, {2, [3]byte{0xc6, 0x92, 0x00}},
		{2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
		{2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}},
		{2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
		{2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}},
		{2, [3]byte{0xc2, 0xbf, 0x00}}, {2, [3]byte{0xc2, 0xae, 0x00}},
		{2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
		{2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
		{2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
		{3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}},
		{3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}},
		{3, [3]byte{0xe2, 0x94, 0xa4}}, {2, [3]byte{0xc3, 0x81, 0x00}},
		{2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x80, 0x00}},
		{2, [3]byte{0xc2, 0xa9, 0x00}}, {3, [3]byte{0xe2, 0x95, 0xa3}},
		{3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}},
		{3, [3]byte{0xe2, 0x95, 0x9d}}, {2, [3]byte{0xc2, 0xa2, 0x00}},
		{2, [3]byte{0xc2, 0xa5, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x90}},
		{3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}},
		{3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}},
		{3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}},
		{2, [3]byte{0xc3, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}},
		{3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}},
		{3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}},
		{3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}},
		{3, [3]byte{0xe2, 0x95, 0xac}}, {2, [3]byte{0xc2, 0xa4, 0x00}},
		{2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0x90, 0x00}},
		{2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
		{2, [3]byte{0xc3, 0x88, 0x00}}, {3, [3]byte{0xe2, 0x82, 0xac}},
		{2, [3]byte{0xc3, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0x8e, 0x00}},
		{2, [3]byte{0xc3, 0x8f, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x98}},
		{3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}},
		{3, [3]byte{0xe2, 0x96, 0x84}}, {2, [3]byte{0xc2, 0xa6, 0x00}},
		{2, [3]byte{0xc3, 0x8c, 0x00}}, {3, [3]byte{0xe2, 0x96, 0x80}},
		{2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
		{2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x92, 0x00}},
		{2, [3]byte{0xc3, 0xb5, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
		{2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xc3, 0xbe, 0x00}},
		{2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9a, 0x00}},
		{2, [3]byte{0xc3, 0x9b, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
		{2, [3]byte{0xc3, 0xbd, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}},
		{2, [3]byte{0xc2, 0xaf, 0x00}}, {2, [3]byte{0xc2, 0xb4, 0x00}},
		{2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{3, [3]byte{0xe2, 0x80, 0x97}}, {2, [3]byte{0xc2, 0xbe, 0x00}},
		{2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xc3, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xa8, 0x00}},
		{2, [3]byte{0xc2, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}},
		{2, [3]byte{0xc2, 0xb3, 0x00}}, {2, [3]byte{0xc2, 0xb2, 0x00}},
		{3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xff0000a0, 0xad0000a1, 0xbd0000a2, 0x9c0000a3, 0xcf0000a4, 0xbe0000a5, 0xdd0000a6, 0xf50000a7,
		0xf90000a8, 0xb80000a9, 0xa60000aa, 0xae0000ab, 0xaa0000ac, 0xf00000ad, 0xa90000ae, 0xee0000af,
		0xf80000b0, 0xf10000b1, 0xfd0000b2, 0xfc0000b3, 0xef0000b4, 0xe60000b5, 0xf40000b6, 0xfa0000b7,
		0xf70000b8, 0xfb0000b9, 0xa70000ba, 0xaf0000bb, 0xac0000bc, 0xab0000bd, 0xf30000be, 0xa80000bf,
		0xb70000c0, 0xb50000c1, 0xb60000c2, 0xc70000c3, 0x8e0000c4, 0x8f0000c5, 0x920000c6, 0x800000c7,
		0xd40000c8, 0x900000c9, 0xd20000ca, 0xd30000cb, 0xde0000cc, 0xd60000cd, 0xd70000ce, 0xd80000cf,
		0xd10000d0, 0xa50000d1, 0xe30000d2, 0xe00000d3, 0xe20000d4, 0xe50000d5, 0x990000d6, 0x9e0000d7,
		0x9d0000d8, 0xeb0000d9, 0xe90000da, 0xea0000db, 0x9a0000dc, 0xed0000dd, 0xe80000de, 0xe10000df,
		0x850000e0, 0xa00000e1, 0x830000e2, 0xc60000e3, 0x840000e4, 0x860000e5, 0x910000e6, 0x870000e7,
		0x8a0000e8, 0x820000e9, 0x880000ea, 0x890000eb, 0x8d0000ec, 0xa10000ed, 0x8c0000ee, 0x8b0000ef,
		0xd00000f0, 0xa40000f1, 0x950000f2, 0xa20000f3, 0x930000f4, 0xe40000f5, 0x940000f6, 0xf60000f7,
		0x9b0000f8, 0x970000f9, 0xa30000fa, 0x960000fb, 0x810000fc, 0xec0000fd, 0xe70000fe, 0x980000ff,
		0x9f000192, 0xf2002017, 0xd50020ac, 0xc4002500, 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514,
		0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551,
		0xc9002554, 0xbb002557, 0xc800255a, 0xbc00255d, 0xcc002560, 0xb9002563, 0xcb002566, 0xca002569,
		0xce00256c, 0xdf002580, 0xdc002584, 0xdb002588, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0,
	},
}

// CodePage860 is the IBM Code Page 860 encoding.
var CodePage860 *Charmap = &codePage860

var codePage860 = Charmap{
	name:          "IBM Code Page 860",
	mib:           identifier.IBM860,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}},
		{2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}},
		{2, [3]byte{0xc3, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0xa0, 0x00}},
		{2, [3]byte{0xc3, 0x81, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
		{2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0x8a, 0x00}},
		{2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
		{2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0xac, 0x00}},
		{2, [3]byte{0xc3, 0x83, 0x00}}, {2, [3]byte{0xc3, 0x82, 0x00}},
		{2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc3, 0x80, 0x00}},
		{2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}},
		{2, [3]byte{0xc3, 0xb5, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}},
		{2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
		{2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
		{2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc2, 0xa2, 0x00}},
		{2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
		{3, [3]byte{0xe2, 0x82, 0xa7}}, {2, [3]byte{0xc3, 0x93, 0x00}},
		{2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
		{2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}},
		{2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
		{2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}},
		{2, [3]byte{0xc2, 0xbf, 0x00}}, {2, [3]byte{0xc3, 0x92, 0x00}},
		{2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
		{2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
		{2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
		{3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}},
		{3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}},
		{3, [3]byte{0xe2, 0x94, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa1}},
		{3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0x96}},
		{3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0xa3}},
		{3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}},
		{3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9c}},
		{3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x94, 0x90}},
		{3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}},
		{3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}},
		{3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}},
		{3, [3]byte{0xe2, 0x95, 0x9e}}, {3, [3]byte{0xe2, 0x95, 0x9f}},
		{3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}},
		{3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}},
		{3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}},
		{3, [3]byte{0xe2, 0x95, 0xac}}, {3, [3]byte{0xe2, 0x95, 0xa7}},
		{3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa4}},
		{3, [3]byte{0xe2, 0x95, 0xa5}}, {3, [3]byte{0xe2, 0x95, 0x99}},
		{3, [3]byte{0xe2, 0x95, 0x98}}, {3, [3]byte{0xe2, 0x95, 0x92}},
		{3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0xab}},
		{3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x94, 0x98}},
		{3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}},
		{3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x8c}},
		{3, [3]byte{0xe2, 0x96, 0x90}}, {3, [3]byte{0xe2, 0x96, 0x80}},
		{2, [3]byte{0xce, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
		{2, [3]byte{0xce, 0x93, 0x00}}, {2, [3]byte{0xcf, 0x80, 0x00}},
		{2, [3]byte{0xce, 0xa3, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}},
		{2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xcf, 0x84, 0x00}},
		{2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0x98, 0x00}},
		{2, [3]byte{0xce, 0xa9, 0x00}}, {2, [3]byte{0xce, 0xb4, 0x00}},
		{3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xcf, 0x86, 0x00}},
		{2, [3]byte{0xce, 0xb5, 0x00}}, {3, [3]byte{0xe2, 0x88, 0xa9}},
		{3, [3]byte{0xe2, 0x89, 0xa1}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{3, [3]byte{0xe2, 0x89, 0xa5}}, {3, [3]byte{0xe2, 0x89, 0xa4}},
		{3, [3]byte{0xe2, 0x8c, 0xa0}}, {3, [3]byte{0xe2, 0x8c, 0xa1}},
		{2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x99}},
		{2, [3]byte{0xc2, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}},
		{3, [3]byte{0xe2, 0x81, 0xbf}}, {2, [3]byte{0xc2, 0xb2, 0x00}},
		{3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xff0000a0, 0xad0000a1, 0x9b0000a2, 0x9c0000a3, 0xa60000aa, 0xae0000ab, 0xaa0000ac, 0xf80000b0,
		0xf10000b1, 0xfd0000b2, 0xe60000b5, 0xfa0000b7, 0xa70000ba, 0xaf0000bb, 0xac0000bc, 0xab0000bd,
		0xa80000bf, 0x910000c0, 0x860000c1, 0x8f0000c2, 0x8e0000c3, 0x800000c7, 0x920000c8, 0x900000c9,
		0x890000ca, 0x980000cc, 0x8b0000cd, 0xa50000d1, 0xa90000d2, 0x9f0000d3, 0x8c0000d4, 0x990000d5,
		0x9d0000d9, 0x960000da, 0x9a0000dc, 0xe10000df, 0x850000e0, 0xa00000e1, 0x830000e2, 0x840000e3,
		0x870000e7, 0x8a0000e8, 0x820000e9, 0x880000ea, 0x8d0000ec, 0xa10000ed, 0xa40000f1, 0x950000f2,
		0xa20000f3, 0x930000f4, 0x940000f5, 0xf60000f7, 0x970000f9, 0xa30000fa, 0x810000fc, 0xe2000393,
		0xe9000398, 0xe40003a3, 0xe80003a6, 0xea0003a9, 0xe00003b1, 0xeb0003b4, 0xee0003b5, 0xe30003c0,
		0xe50003c3, 0xe70003c4, 0xed0003c6, 0xfc00207f, 0x9e0020a7, 0xf9002219, 0xfb00221a, 0xec00221e,
		0xef002229, 0xf7002248, 0xf0002261, 0xf3002264, 0xf2002265, 0xf4002320, 0xf5002321, 0xc4002500,
		0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c,
		0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, 0xd5002552, 0xd6002553, 0xc9002554, 0xb8002555,
		0xb7002556, 0xbb002557, 0xd4002558, 0xd3002559, 0xc800255a, 0xbe00255b, 0xbd00255c, 0xbc00255d,
		0xc600255e, 0xc700255f, 0xcc002560, 0xb5002561, 0xb6002562, 0xb9002563, 0xd1002564, 0xd2002565,
		0xcb002566, 0xcf002567, 0xd0002568, 0xca002569, 0xd800256a, 0xd700256b, 0xce00256c, 0xdf002580,
		0xdc002584, 0xdb002588, 0xdd00258c, 0xde002590, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0,
	},
}

// CodePage862 is the IBM Code Page 862 encoding.
var CodePage862 *Charmap = &codePage862

var codePage862 = Charmap{
	name:          "IBM Code Page 862",
	mib:           identifier.PC862LatinHebrew,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{2, [3]byte{0xd7, 0x90, 0x00}}, {2, [3]byte{0xd7, 0x91, 0x00}},
		{2, [3]byte{0xd7, 0x92, 0x00}}, {2, [3]byte{0xd7, 0x93, 0x00}},
		{2, [3]byte{0xd7, 0x94, 0x00}}, {2, [3]byte{0xd7, 0x95, 0x00}},
		{2, [3]byte{0xd7, 0x96, 0x00}}, {2, [3]byte{0xd7, 0x97, 0x00}},
		{2, [3]byte{0xd7, 0x98, 0x00}}, {2, [3]byte{0xd7, 0x99, 0x00}},
		{2, [3]byte{0xd7, 0x9a, 0x00}}, {2, [3]byte{0xd7, 0x9b, 0x00}},
		{2, [3]byte{0xd7, 0x9c, 0x00}}, {2, [3]byte{0xd7, 0x9d, 0x00}},
		{2, [3]byte{0xd7, 0x9e, 0x00}}, {2, [3]byte{0xd7, 0x9f, 0x00}},
		{2, [3]byte{0xd7, 0xa0, 0x00}}, {2, [3]byte{0xd7, 0xa1, 0x00}},
		{2, [3]byte{0xd7, 0xa2, 0x00}}, {2, [3]byte{0xd7, 0xa3, 0x00}},
		{2, [3]byte{0xd7, 0xa4, 0x00}}, {2, [3]byte{0xd7, 0xa5, 0x00}},
		{2, [3]byte{0xd7, 0xa6, 0x00}}, {2, [3]byte{0xd7, 0xa7, 0x00}},
		{2, [3]byte{0xd7, 0xa8, 0x00}}, {2, [3]byte{0xd7, 0xa9, 0x00}},
		{2, [3]byte{0xd7, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xa2, 0x00}},
		{2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}},
		{3, [3]byte{0xe2, 0x82, 0xa7}}, {2, [3]byte{0xc6, 0x92, 0x00}},
		{2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
		{2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}},
		{2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
		{2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}},
		{2, [3]byte{0xc2, 0xbf, 0x00}}, {3, [3]byte{0xe2, 0x8c, 0x90}},
		{2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
		{2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
		{2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
		{3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}},
		{3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}},
		{3, [3]byte{0xe2, 0x94, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa1}},
		{3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0x96}},
		{3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0xa3}},
		{3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}},
		{3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9c}},
		{3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x94, 0x90}},
		{3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}},
		{3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}},
		{3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}},
		{3, [3]byte{0xe2, 0x95, 0x9e}}, {3, [3]byte{0xe2, 0x95, 0x9f}},
		{3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}},
		{3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}},
		{3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}},
		{3, [3]byte{0xe2, 0x95, 0xac}}, {3, [3]byte{0xe2, 0x95, 0xa7}},
		{3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa4}},
		{3, [3]byte{0xe2, 0x95, 0xa5}}, {3, [3]byte{0xe2, 0x95, 0x99}},
		{3, [3]byte{0xe2, 0x95, 0x98}}, {3, [3]byte{0xe2, 0x95, 0x92}},
		{3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0xab}},
		{3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x94, 0x98}},
		{3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}},
		{3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x8c}},
		{3, [3]byte{0xe2, 0x96, 0x90}}, {3, [3]byte{0xe2, 0x96, 0x80}},
		{2, [3]byte{0xce, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
		{2, [3]byte{0xce, 0x93, 0x00}}, {2, [3]byte{0xcf, 0x80, 0x00}},
		{2, [3]byte{0xce, 0xa3, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}},
		{2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xcf, 0x84, 0x00}},
		{2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0x98, 0x00}},
		{2, [3]byte{0xce, 0xa9, 0x00}}, {2, [3]byte{0xce, 0xb4, 0x00}},
		{3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xcf, 0x86, 0x00}},
		{2, [3]byte{0xce, 0xb5, 0x00}}, {3, [3]byte{0xe2, 0x88, 0xa9}},
		{3, [3]byte{0xe2, 0x89, 0xa1}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{3, [3]byte{0xe2, 0x89, 0xa5}}, {3, [3]byte{0xe2, 0x89, 0xa4}},
		{3, [3]byte{0xe2, 0x8c, 0xa0}}, {3, [3]byte{0xe2, 0x8c, 0xa1}},
		{2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x99}},
		{2, [3]byte{0xc2, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}},
		{3, [3]byte{0xe2, 0x81, 0xbf}}, {2, [3]byte{0xc2, 0xb2, 0x00}},
		{3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xff0000a0, 0xad0000a1, 0x9b0000a2, 0x9c0000a3, 0x9d0000a5, 0xa60000aa, 0xae0000ab, 0xaa0000ac,
		0xf80000b0, 0xf10000b1, 0xfd0000b2, 0xe60000b5, 0xfa0000b7, 0xa70000ba, 0xaf0000bb, 0xac0000bc,
		0xab0000bd, 0xa80000bf, 0xa50000d1, 0xe10000df, 0xa00000e1, 0xa10000ed, 0xa40000f1, 0xa20000f3,
		0xf60000f7, 0xa30000fa, 0x9f000192, 0xe2000393, 0xe9000398, 0xe40003a3, 0xe80003a6, 0xea0003a9,
		0xe00003b1, 0xeb0003b4, 0xee0003b5, 0xe30003c0, 0xe50003c3, 0xe70003c4, 0xed0003c6, 0x800005d0,
		0x810005d1, 0x820005d2, 0x830005d3, 0x840005d4, 0x850005d5, 0x860005d6, 0x870005d7, 0x880005d8,
		0x890005d9, 0x8a0005da, 0x8b0005db, 0x8c0005dc, 0x8d0005dd, 0x8e0005de, 0x8f0005df, 0x900005e0,
		0x910005e1, 0x920005e2, 0x930005e3, 0x940005e4, 0x950005e5, 0x960005e6, 0x970005e7, 0x980005e8,
		0x990005e9, 0x9a0005ea, 0xfc00207f, 0x9e0020a7, 0xf9002219, 0xfb00221a, 0xec00221e, 0xef002229,
		0xf7002248, 0xf0002261, 0xf3002264, 0xf2002265, 0xa9002310, 0xf4002320, 0xf5002321, 0xc4002500,
		0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c,
		0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, 0xd5002552, 0xd6002553, 0xc9002554, 0xb8002555,
		0xb7002556, 0xbb002557, 0xd4002558, 0xd3002559, 0xc800255a, 0xbe00255b, 0xbd00255c, 0xbc00255d,
		0xc600255e, 0xc700255f, 0xcc002560, 0xb5002561, 0xb6002562, 0xb9002563, 0xd1002564, 0xd2002565,
		0xcb002566, 0xcf002567, 0xd0002568, 0xca002569, 0xd800256a, 0xd700256b, 0xce00256c, 0xdf002580,
		0xdc002584, 0xdb002588, 0xdd00258c, 0xde002590, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0,
	},
}

// CodePage863 is the IBM Code Page 863 encoding.
var CodePage863 *Charmap = &codePage863

var codePage863 = Charmap{
	name:          "IBM Code Page 863",
	mib:           identifier.IBM863,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}},
		{2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}},
		{2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0xa0, 0x00}},
		{2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
		{2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
		{2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
		{2, [3]byte{0xc3, 0xae, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x97}},
		{2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc3, 0x88, 0x00}},
		{2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}},
		{2, [3]byte{0xc3, 0x8b, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
		{2, [3]byte{0xc3, 0xbb, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
		{2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0x94, 0x00}},
		{2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc2, 0xa2, 0x00}},
		{2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
		{2, [3]byte{0xc3, 0x9b, 0x00}}, {2, [3]byte{0xc6, 0x92, 0x00}},
		{2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xb4, 0x00}},
		{2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}},
		{2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}},
		{2, [3]byte{0xc2, 0xb3, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}},
		{2, [3]byte{0xc3, 0x8e, 0x00}}, {3, [3]byte{0xe2, 0x8c, 0x90}},
		{2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
		{2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbe, 0x00}},
		{2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
		{3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}},
		{3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}},
		{3, [3]byte{0xe2, 0x94, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa1}},
		{3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0x96}},
		{3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0xa3}},
		{3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}},
		{3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9c}},
		{3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x94, 0x90}},
		{3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}},
		{3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}},
		{3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}},
		{3, [3]byte{0xe2, 0x95, 0x9e}}, {3, [3]byte{0xe2, 0x95, 0x9f}},
		{3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}},
		{3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}},
		{3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}},
		{3, [3]byte{0xe2, 0x95, 0xac}}, {3, [3]byte{0xe2, 0x95, 0xa7}},
		{3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa4}},
		{3, [3]byte{0xe2, 0x95, 0xa5}}, {3, [3]byte{0xe2, 0x95, 0x99}},
		{3, [3]byte{0xe2, 0x95, 0x98}}, {3, [3]byte{0xe2, 0x95, 0x92}},
		{3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0xab}},
		{3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x94, 0x98}},
		{3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}},
		{3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x8c}},
		{3, [3]byte{0xe2, 0x96, 0x90}}, {3, [3]byte{0xe2, 0x96, 0x80}},
		{2, [3]byte{0xce, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
		{2, [3]byte{0xce, 0x93, 0x00}}, {2, [3]byte{0xcf, 0x80, 0x00}},
		{2, [3]byte{0xce, 0xa3, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}},
		{2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xcf, 0x84, 0x00}},
		{2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0x98, 0x00}},
		{2, [3]byte{0xce, 0xa9, 0x00}}, {2, [3]byte{0xce, 0xb4, 0x00}},
		{3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xcf, 0x86, 0x00}},
		{2, [3]byte{0xce, 0xb5, 0x00}}, {3, [3]byte{0xe2, 0x88, 0xa9}},
		{3, [3]byte{0xe2, 0x89, 0xa1}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{3, [3]byte{0xe2, 0x89, 0xa5}}, {3, [3]byte{0xe2, 0x89, 0xa4}},
		{3, [3]byte{0xe2, 0x8c, 0xa0}}, {3, [3]byte{0xe2, 0x8c, 0xa1}},
		{2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x99}},
		{2, [3]byte{0xc2, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}},
		{3, [3]byte{0xe2, 0x81, 0xbf}}, {2, [3]byte{0xc2, 0xb2, 0x00}},
		{3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xff0000a0, 0x9b0000a2, 0x9c0000a3, 0x980000a4, 0xa00000a6, 0x8f0000a7, 0xa40000a8, 0xae0000ab,
		0xaa0000ac, 0xa70000af, 0xf80000b0, 0xf10000b1, 0xfd0000b2, 0xa60000b3, 0xa10000b4, 0xe60000b5,
		0x860000b6, 0xfa0000b7, 0xa50000b8, 0xaf0000bb, 0xac0000bc, 0xab0000bd, 0xad0000be, 0x8e0000c0,
		0x840000c2, 0x800000c7, 0x910000c8, 0x900000c9, 0x920000ca, 0x940000cb, 0xa80000ce, 0x950000cf,
		0x990000d4, 0x9d0000d9, 0x9e0000db, 0x9a0000dc, 0xe10000df, 0x850000e0, 0x830000e2, 0x870000e7,
		0x8a0000e8, 0x820000e9, 0x880000ea, 0x890000eb, 0x8c0000ee, 0x8b0000ef, 0xa20000f3, 0x930000f4,
		0xf60000f7, 0x970000f9, 0xa30000fa, 0x960000fb, 0x810000fc, 0x9f000192, 0xe2000393, 0xe9000398,
		0xe40003a3, 0xe80003a6, 0xea0003a9, 0xe00003b1, 0xeb0003b4, 0xee0003b5, 0xe30003c0, 0xe50003c3,
		0xe70003c4, 0xed0003c6, 0x8d002017, 0xfc00207f, 0xf9002219, 0xfb00221a, 0xec00221e, 0xef002229,
		0xf7002248, 0xf0002261, 0xf3002264, 0xf2002265, 0xa9002310, 0xf4002320, 0xf5002321, 0xc4002500,
		0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c,
		0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, 0xd5002552, 0xd6002553, 0xc9002554, 0xb8002555,
		0xb7002556, 0xbb002557, 0xd4002558, 0xd3002559, 0xc800255a, 0xbe00255b, 0xbd00255c, 0xbc00255d,
		0xc600255e, 0xc700255f, 0xcc002560, 0xb5002561, 0xb6002562, 0xb9002563, 0xd1002564, 0xd2002565,
		0xcb002566, 0xcf002567, 0xd0002568, 0xca002569, 0xd800256a, 0xd700256b, 0xce00256c, 0xdf002580,
		0xdc002584, 0xdb002588, 0xdd00258c, 0xde002590, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0,
	},
}

// CodePage865 is the IBM Code Page 865 encoding.
var CodePage865 *Charmap = &codePage865

var codePage865 = Charmap{
	name:          "IBM Code Page 865",
	mib:           identifier.IBM865,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}},
		{2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}},
		{2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa0, 0x00}},
		{2, [3]byte{0xc3, 0xa5, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
		{2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
		{2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
		{2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xac, 0x00}},
		{2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
		{2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc3, 0xa6, 0x00}},
		{2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}},
		{2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}},
		{2, [3]byte{0xc3, 0xbb, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
		{2, [3]byte{0xc3, 0xbf, 0x00}}, {2, [3]byte{0xc3, 0x96, 0x00}},
		{2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0xb8, 0x00}},
		{2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x98, 0x00}},
		{3, [3]byte{0xe2, 0x82, 0xa7}}, {2, [3]byte{0xc6, 0x92, 0x00}},
		{2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
		{2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}},
		{2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
		{2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}},
		{2, [3]byte{0xc2, 0xbf, 0x00}}, {3, [3]byte{0xe2, 0x8c, 0x90}},
		{2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
		{2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
		{2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xa4, 0x00}},
		{3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}},
		{3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}},
		{3, [3]byte{0xe2, 0x94, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa1}},
		{3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0x96}},
		{3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0xa3}},
		{3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}},
		{3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9c}},
		{3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x94, 0x90}},
		{3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}},
		{3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}},
		{3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}},
		{3, [3]byte{0xe2, 0x95, 0x9e}}, {3, [3]byte{0xe2, 0x95, 0x9f}},
		{3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}},
		{3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}},
		{3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}},
		{3, [3]byte{0xe2, 0x95, 0xac}}, {3, [3]byte{0xe2, 0x95, 0xa7}},
		{3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa4}},
		{3, [3]byte{0xe2, 0x95, 0xa5}}, {3, [3]byte{0xe2, 0x95, 0x99}},
		{3, [3]byte{0xe2, 0x95, 0x98}}, {3, [3]byte{0xe2, 0x95, 0x92}},
		{3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0xab}},
		{3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x94, 0x98}},
		{3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}},
		{3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x8c}},
		{3, [3]byte{0xe2, 0x96, 0x90}}, {3, [3]byte{0xe2, 0x96, 0x80}},
		{2, [3]byte{0xce, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
		{2, [3]byte{0xce, 0x93, 0x00}}, {2, [3]byte{0xcf, 0x80, 0x00}},
		{2, [3]byte{0xce, 0xa3, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}},
		{2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xcf, 0x84, 0x00}},
		{2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0x98, 0x00}},
		{2, [3]byte{0xce, 0xa9, 0x00}}, {2, [3]byte{0xce, 0xb4, 0x00}},
		{3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xcf, 0x86, 0x00}},
		{2, [3]byte{0xce, 0xb5, 0x00}}, {3, [3]byte{0xe2, 0x88, 0xa9}},
		{3, [3]byte{0xe2, 0x89, 0xa1}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{3, [3]byte{0xe2, 0x89, 0xa5}}, {3, [3]byte{0xe2, 0x89, 0xa4}},
		{3, [3]byte{0xe2, 0x8c, 0xa0}}, {3, [3]byte{0xe2, 0x8c, 0xa1}},
		{2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x99}},
		{2, [3]byte{0xc2, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}},
		{3, [3]byte{0xe2, 0x81, 0xbf}}, {2, [3]byte{0xc2, 0xb2, 0x00}},
		{3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xff0000a0, 0xad0000a1, 0x9c0000a3, 0xaf0000a4, 0xa60000aa, 0xae0000ab, 0xaa0000ac, 0xf80000b0,
		0xf10000b1, 0xfd0000b2, 0xe60000b5, 0xfa0000b7, 0xa70000ba, 0xac0000bc, 0xab0000bd, 0xa80000bf,
		0x8e0000c4, 0x8f0000c5, 0x920000c6, 0x800000c7, 0x900000c9, 0xa50000d1, 0x990000d6, 0x9d0000d8,
		0x9a0000dc, 0xe10000df, 0x850000e0, 0xa00000e1, 0x830000e2, 0x840000e4, 0x860000e5, 0x910000e6,
		0x870000e7, 0x8a0000e8, 0x820000e9, 0x880000ea, 0x890000eb, 0x8d0000ec, 0xa10000ed, 0x8c0000ee,
		0x8b0000ef, 0xa40000f1, 0x950000f2, 0xa20000f3, 0x930000f4, 0x940000f6, 0xf60000f7, 0x9b0000f8,
		0x970000f9, 0xa30000fa, 0x960000fb, 0x810000fc, 0x980000ff, 0x9f000192, 0xe2000393, 0xe9000398,
		0xe40003a3, 0xe80003a6, 0xea0003a9, 0xe00003b1, 0xeb0003b4, 0xee0003b5, 0xe30003c0, 0xe50003c3,
		0xe70003c4, 0xed0003c6, 0xfc00207f, 0x9e0020a7, 0xf9002219, 0xfb00221a, 0xec00221e, 0xef002229,
		0xf7002248, 0xf0002261, 0xf3002264, 0xf2002265, 0xa9002310, 0xf4002320, 0xf5002321, 0xc4002500,
		0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c,
		0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, 0xd5002552, 0xd6002553, 0xc9002554, 0xb8002555,
		0xb7002556, 0xbb002557, 0xd4002558, 0xd3002559, 0xc800255a, 0xbe00255b, 0xbd00255c, 0xbc00255d,
		0xc600255e, 0xc700255f, 0xcc002560, 0xb5002561, 0xb6002562, 0xb9002563, 0xd1002564, 0xd2002565,
		0xcb002566, 0xcf002567, 0xd0002568, 0xca002569, 0xd800256a, 0xd700256b, 0xce00256c, 0xdf002580,
		0xdc002584, 0xdb002588, 0xdd00258c, 0xde002590, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0,
	},
}

// CodePage866 is the IBM Code Page 866 encoding.
var CodePage866 *Charmap = &codePage866

var codePage866 = Charmap{
	name:          "IBM Code Page 866",
	mib:           identifier.IBM866,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{2, [3]byte{0xd0, 0x90, 0x00}}, {2, [3]byte{0xd0, 0x91, 0x00}},
		{2, [3]byte{0xd0, 0x92, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}},
		{2, [3]byte{0xd0, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}},
		{2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x97, 0x00}},
		{2, [3]byte{0xd0, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x99, 0x00}},
		{2, [3]byte{0xd0, 0x9a, 0x00}}, {2, [3]byte{0xd0, 0x9b, 0x00}},
		{2, [3]byte{0xd0, 0x9c, 0x00}}, {2, [3]byte{0xd0, 0x9d, 0x00}},
		{2, [3]byte{0xd0, 0x9e, 0x00}}, {2, [3]byte{0xd0, 0x9f, 0x00}},
		{2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0xa1, 0x00}},
		{2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd0, 0xa3, 0x00}},
		{2, [3]byte{0xd0, 0xa4, 0x00}}, {2, [3]byte{0xd0, 0xa5, 0x00}},
		{2, [3]byte{0xd0, 0xa6, 0x00}}, {2, [3]byte{0xd0, 0xa7, 0x00}},
		{2, [3]byte{0xd0, 0xa8, 0x00}}, {2, [3]byte{0xd0, 0xa9, 0x00}},
		{2, [3]byte{0xd0, 0xaa, 0x00}}, {2, [3]byte{0xd0, 0xab, 0x00}},
		{2, [3]byte{0xd0, 0xac, 0x00}}, {2, [3]byte{0xd0, 0xad, 0x00}},
		{2, [3]byte{0xd0, 0xae, 0x00}}, {2, [3]byte{0xd0, 0xaf, 0x00}},
		{2, [3]byte{0xd0, 0xb0, 0x00}}, {2, [3]byte{0xd0, 0xb1, 0x00}},
		{2, [3]byte{0xd0, 0xb2, 0x00}}, {2, [3]byte{0xd0, 0xb3, 0x00}},
		{2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0xb5, 0x00}},
		{2, [3]byte{0xd0, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0xb7, 0x00}},
		{2, [3]byte{0xd0, 0xb8, 0x00}}, {2, [3]byte{0xd0, 0xb9, 0x00}},
		{2, [3]byte{0xd0, 0xba, 0x00}}, {2, [3]byte{0xd0, 0xbb, 0x00}},
		{2, [3]byte{0xd0, 0xbc, 0x00}}, {2, [3]byte{0xd0, 0xbd, 0x00}},
		{2, [3]byte{0xd0, 0xbe, 0x00}}, {2, [3]byte{0xd0, 0xbf, 0x00}},
		{3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}},
		{3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}},
		{3, [3]byte{0xe2, 0x94, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa1}},
		{3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0x96}},
		{3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0xa3}},
		{3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}},
		{3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9c}},
		{3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x94, 0x90}},
		{3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}},
		{3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}},
		{3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}},
		{3, [3]byte{0xe2, 0x95, 0x9e}}, {3, [3]byte{0xe2, 0x95, 0x9f}},
		{3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}},
		{3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}},
		{3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}},
		{3, [3]byte{0xe2, 0x95, 0xac}}, {3, [3]byte{0xe2, 0x95, 0xa7}},
		{3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa4}},
		{3, [3]byte{0xe2, 0x95, 0xa5}}, {3, [3]byte{0xe2, 0x95, 0x99}},
		{3, [3]byte{0xe2, 0x95, 0x98}}, {3, [3]byte{0xe2, 0x95, 0x92}},
		{3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0xab}},
		{3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x94, 0x98}},
		{3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}},
		{3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x8c}},
		{3, [3]byte{0xe2, 0x96, 0x90}}, {3, [3]byte{0xe2, 0x96, 0x80}},
		{2, [3]byte{0xd1, 0x80, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}},
		{2, [3]byte{0xd1, 0x82, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}},
		{2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd1, 0x85, 0x00}},
		{2, [3]byte{0xd1, 0x86, 0x00}}, {2, [3]byte{0xd1, 0x87, 0x00}},
		{2, [3]byte{0xd1, 0x88, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}},
		{2, [3]byte{0xd1, 0x8a, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}},
		{2, [3]byte{0xd1, 0x8c, 0x00}}, {2, [3]byte{0xd1, 0x8d, 0x00}},
		{2, [3]byte{0xd1, 0x8e, 0x00}}, {2, [3]byte{0xd1, 0x8f, 0x00}},
		{2, [3]byte{0xd0, 0x81, 0x00}}, {2, [3]byte{0xd1, 0x91, 0x00}},
		{2, [3]byte{0xd0, 0x84, 0x00}}, {2, [3]byte{0xd1, 0x94, 0x00}},
		{2, [3]byte{0xd0, 0x87, 0x00}}, {2, [3]byte{0xd1, 0x97, 0x00}},
		{2, [3]byte{0xd0, 0x8e, 0x00}}, {2, [3]byte{0xd1, 0x9e, 0x00}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x99}},
		{2, [3]byte{0xc2, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}},
		{3, [3]byte{0xe2, 0x84, 0x96}}, {2, [3]byte{0xc2, 0xa4, 0x00}},
		{3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xff0000a0, 0xfd0000a4, 0xf80000b0, 0xfa0000b7, 0xf0000401, 0xf2000404, 0xf4000407, 0xf600040e,
		0x80000410, 0x81000411, 0x82000412, 0x83000413, 0x84000414, 0x85000415, 0x86000416, 0x87000417,
		0x88000418, 0x89000419, 0x8a00041a, 0x8b00041b, 0x8c00041c, 0x8d00041d, 0x8e00041e, 0x8f00041f,
		0x90000420, 0x91000421, 0x92000422, 0x93000423, 0x94000424, 0x95000425, 0x96000426, 0x97000427,
		0x98000428, 0x99000429, 0x9a00042a, 0x9b00042b, 0x9c00042c, 0x9d00042d, 0x9e00042e, 0x9f00042f,
		0xa0000430, 0xa1000431, 0xa2000432, 0xa3000433, 0xa4000434, 0xa5000435, 0xa6000436, 0xa7000437,
		0xa8000438, 0xa9000439, 0xaa00043a, 0xab00043b, 0xac00043c, 0xad00043d, 0xae00043e, 0xaf00043f,
		0xe0000440, 0xe1000441, 0xe2000442, 0xe3000443, 0xe4000444, 0xe5000445, 0xe6000446, 0xe7000447,
		0xe8000448, 0xe9000449, 0xea00044a, 0xeb00044b, 0xec00044c, 0xed00044d, 0xee00044e, 0xef00044f,
		0xf1000451, 0xf3000454, 0xf5000457, 0xf700045e, 0xfc002116, 0xf9002219, 0xfb00221a, 0xc4002500,
		0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c,
		0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, 0xd5002552, 0xd6002553, 0xc9002554, 0xb8002555,
		0xb7002556, 0xbb002557, 0xd4002558, 0xd3002559, 0xc800255a, 0xbe00255b, 0xbd00255c, 0xbc00255d,
		0xc600255e, 0xc700255f, 0xcc002560, 0xb5002561, 0xb6002562, 0xb9002563, 0xd1002564, 0xd2002565,
		0xcb002566, 0xcf002567, 0xd0002568, 0xca002569, 0xd800256a, 0xd700256b, 0xce00256c, 0xdf002580,
		0xdc002584, 0xdb002588, 0xdd00258c, 0xde002590, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0,
	},
}

// CodePage1047 is the IBM Code Page 1047 encoding.
var CodePage1047 *Charmap = &codePage1047

var codePage1047 = Charmap{
	name:          "IBM Code Page 1047",
	mib:           identifier.IBM1047,
	asciiSuperset: false,
	low:           0x00,
	replacement:   0x3f,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x9c, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x86, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x97, 0x00}}, {2, [3]byte{0xc2, 0x8d, 0x00}},
		{2, [3]byte{0xc2, 0x8e, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x9d, 0x00}}, {2, [3]byte{0xc2, 0x85, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x87, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x92, 0x00}}, {2, [3]byte{0xc2, 0x8f, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x80, 0x00}}, {2, [3]byte{0xc2, 0x81, 0x00}},
		{2, [3]byte{0xc2, 0x82, 0x00}}, {2, [3]byte{0xc2, 0x83, 0x00}},
		{2, [3]byte{0xc2, 0x84, 0x00}}, {1, [3]byte{0x0a, 0x00, 0x00}},
		{1, [3]byte{0x17, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x88, 0x00}}, {2, [3]byte{0xc2, 0x89, 0x00}},
		{2, [3]byte{0xc2, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0x8b, 0x00}},
		{2, [3]byte{0xc2, 0x8c, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0x91, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x93, 0x00}},
		{2, [3]byte{0xc2, 0x94, 0x00}}, {2, [3]byte{0xc2, 0x95, 0x00}},
		{2, [3]byte{0xc2, 0x96, 0x00}}, {1, [3]byte{0x04, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x98, 0x00}}, {2, [3]byte{0xc2, 0x99, 0x00}},
		{2, [3]byte{0xc2, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9b, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x9e, 0x00}}, {1, [3]byte{0x1a, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
		{2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa4, 0x00}},
		{2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
		{2, [3]byte{0xc3, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
		{2, [3]byte{0xc3, 0xa7, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}},
		{2, [3]byte{0xc2, 0xa2, 0x00}}, {1, [3]byte{0x2e, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x28, 0x00, 0x00}},
		{1, [3]byte{0x2b, 0x00, 0x00}}, {1, [3]byte{0x7c, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
		{2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
		{2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
		{2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
		{2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
		{1, [3]byte{0x21, 0x00, 0x00}}, {1, [3]byte{0x24, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x3b, 0x00, 0x00}}, {1, [3]byte{0x5e, 0x00, 0x00}},
		{1, [3]byte{0x2d, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x84, 0x00}},
		{2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
		{2, [3]byte{0xc3, 0x83, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
		{2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
		{2, [3]byte{0xc2, 0xa6, 0x00}}, {1, [3]byte{0x2c, 0x00, 0x00}},
		{1, [3]byte{0x25, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
		{2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
		{2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
		{2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
		{2, [3]byte{0xc3, 0x8c, 0x00}}, {1, [3]byte{0x60, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x3d, 0x00, 0x00}}, {1, [3]byte{0x22, 0x00, 0x00}},
		{2, [3]byte{0xc3, 0x98, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
		{2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}},
		{2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {1, [3]byte{0x6a, 0x00, 0x00}},
		{1, [3]byte{0x6b, 0x00, 0x00}}, {1, [3]byte{0x6c, 0x00, 0x00}},
		{1, [3]byte{0x6d, 0x00, 0x00}}, {1, [3]byte{0x6e, 0x00, 0x00}},
		{1, [3]byte{0x6f, 0x00, 0x00}}, {1, [3]byte{0x70, 0x00, 0x00}},
		{1, [3]byte{0x71, 0x00, 0x00}}, {1, [3]byte{0x72, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}},
		{2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}},
		{2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc2, 0xa4, 0x00}},
		{2, [3]byte{0xc2, 0xb5, 0x00}}, {1, [3]byte{0x7e, 0x00, 0x00}},
		{1, [3]byte{0x73, 0x00, 0x00}}, {1, [3]byte{0x74, 0x00, 0x00}},
		{1, [3]byte{0x75, 0x00, 0x00}}, {1, [3]byte{0x76, 0x00, 0x00}},
		{1, [3]byte{0x77, 0x00, 0x00}}, {1, [3]byte{0x78, 0x00, 0x00}},
		{1, [3]byte{0x79, 0x00, 0x00}}, {1, [3]byte{0x7a, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0xa1, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}},
		{2, [3]byte{0xc3, 0x90, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0xae, 0x00}},
		{2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
		{2, [3]byte{0xc2, 0xa5, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
		{2, [3]byte{0xc2, 0xa9, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xbc, 0x00}},
		{2, [3]byte{0xc2, 0xbd, 0x00}}, {2, [3]byte{0xc2, 0xbe, 0x00}},
		{2, [3]byte{0xc3, 0x9d, 0x00}}, {2, [3]byte{0xc2, 0xa8, 0x00}},
		{2, [3]byte{0xc2, 0xaf, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
		{1, [3]byte{0x7b, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}},
		{2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}},
		{2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
		{1, [3]byte{0x7d, 0x00, 0x00}}, {1, [3]byte{0x4a, 0x00, 0x00}},
		{1, [3]byte{0x4b, 0x00, 0x00}}, {1, [3]byte{0x4c, 0x00, 0x00}},
		{1, [3]byte{0x4d, 0x00, 0x00}}, {1, [3]byte{0x4e, 0x00, 0x00}},
		{1, [3]byte{0x4f, 0x00, 0x00}}, {1, [3]byte{0x50, 0x00, 0x00}},
		{1, [3]byte{0x51, 0x00, 0x00}}, {1, [3]byte{0x52, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0xb9, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
		{2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
		{2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
		{1, [3]byte{0x53, 0x00, 0x00}}, {1, [3]byte{0x54, 0x00, 0x00}},
		{1, [3]byte{0x55, 0x00, 0x00}}, {1, [3]byte{0x56, 0x00, 0x00}},
		{1, [3]byte{0x57, 0x00, 0x00}}, {1, [3]byte{0x58, 0x00, 0x00}},
		{1, [3]byte{0x59, 0x00, 0x00}}, {1, [3]byte{0x5a, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0x94, 0x00}},
		{2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x92, 0x00}},
		{2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
		{2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
		{2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9f, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x37000004, 0x2d000005, 0x2e000006, 0x2f000007,
		0x16000008, 0x05000009, 0x2500000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x3c000014, 0x3d000015, 0x32000016, 0x26000017,
		0x18000018, 0x19000019, 0x3f00001a, 0x2700001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x40000020, 0x5a000021, 0x7f000022, 0x7b000023, 0x5b000024, 0x6c000025, 0x50000026, 0x7d000027,
		0x4d000028, 0x5d000029, 0x5c00002a, 0x4e00002b, 0x6b00002c, 0x6000002d, 0x4b00002e, 0x6100002f,
		0xf0000030, 0xf1000031, 0xf2000032, 0xf3000033, 0xf4000034, 0xf5000035, 0xf6000036, 0xf7000037,
		0xf8000038, 0xf9000039, 0x7a00003a, 0x5e00003b, 0x4c00003c, 0x7e00003d, 0x6e00003e, 0x6f00003f,
		0x7c000040, 0xc1000041, 0xc2000042, 0xc3000043, 0xc4000044, 0xc5000045, 0xc6000046, 0xc7000047,
		0xc8000048, 0xc9000049, 0xd100004a, 0xd200004b, 0xd300004c, 0xd400004d, 0xd500004e, 0xd600004f,
		0xd7000050, 0xd8000051, 0xd9000052, 0xe2000053, 0xe3000054, 0xe4000055, 0xe5000056, 0xe6000057,
		0xe7000058, 0xe8000059, 0xe900005a, 0xad00005b, 0xe000005c, 0xbd00005d, 0x5f00005e, 0x6d00005f,
		0x79000060, 0x81000061, 0x82000062, 0x83000063, 0x84000064, 0x85000065, 0x86000066, 0x87000067,
		0x88000068, 0x89000069, 0x9100006a, 0x9200006b, 0x9300006c, 0x9400006d, 0x9500006e, 0x9600006f,
		0x97000070, 0x98000071, 0x99000072, 0xa2000073, 0xa3000074, 0xa4000075, 0xa5000076, 0xa6000077,
		0xa7000078, 0xa8000079, 0xa900007a, 0xc000007b, 0x4f00007c, 0xd000007d, 0xa100007e, 0x0700007f,
		0x20000080, 0x21000081, 0x22000082, 0x23000083, 0x24000084, 0x15000085, 0x06000086, 0x17000087,
		0x28000088, 0x29000089, 0x2a00008a, 0x2b00008b, 0x2c00008c, 0x0900008d, 0x0a00008e, 0x1b00008f,
		0x30000090, 0x31000091, 0x1a000092, 0x33000093, 0x34000094, 0x35000095, 0x36000096, 0x08000097,
		0x38000098, 0x39000099, 0x3a00009a, 0x3b00009b, 0x0400009c, 0x1400009d, 0x3e00009e, 0xff00009f,
		0x410000a0, 0xaa0000a1, 0x4a0000a2, 0xb10000a3, 0x9f0000a4, 0xb20000a5, 0x6a0000a6, 0xb50000a7,
		0xbb0000a8, 0xb40000a9, 0x9a0000aa, 0x8a0000ab, 0xb00000ac, 0xca0000ad, 0xaf0000ae, 0xbc0000af,
		0x900000b0, 0x8f0000b1, 0xea0000b2, 0xfa0000b3, 0xbe0000b4, 0xa00000b5, 0xb60000b6, 0xb30000b7,
		0x9d0000b8, 0xda0000b9, 0x9b0000ba, 0x8b0000bb, 0xb70000bc, 0xb80000bd, 0xb90000be, 0xab0000bf,
		0x640000c0, 0x650000c1, 0x620000c2, 0x660000c3, 0x630000c4, 0x670000c5, 0x9e0000c6, 0x680000c7,
		0x740000c8, 0x710000c9, 0x720000ca, 0x730000cb, 0x780000cc, 0x750000cd, 0x760000ce, 0x770000cf,
		0xac0000d0, 0x690000d1, 0xed0000d2, 0xee0000d3, 0xeb0000d4, 0xef0000d5, 0xec0000d6, 0xbf0000d7,
		0x800000d8, 0xfd0000d9, 0xfe0000da, 0xfb0000db, 0xfc0000dc, 0xba0000dd, 0xae0000de, 0x590000df,
		0x440000e0, 0x450000e1, 0x420000e2, 0x460000e3, 0x430000e4, 0x470000e5, 0x9c0000e6, 0x480000e7,
		0x540000e8, 0x510000e9, 0x520000ea, 0x530000eb, 0x580000ec, 0x550000ed, 0x560000ee, 0x570000ef,
		0x8c0000f0, 0x490000f1, 0xcd0000f2, 0xce0000f3, 0xcb0000f4, 0xcf0000f5, 0xcc0000f6, 0xe10000f7,
		0x700000f8, 0xdd0000f9, 0xde0000fa, 0xdb0000fb, 0xdc0000fc, 0x8d0000fd, 0x8e0000fe, 0xdf0000ff,
	},
}

// CodePage1140 is the IBM Code Page 1140 encoding.
var CodePage1140 *Charmap = &codePage1140

var codePage1140 = Charmap{
	name:          "IBM Code Page 1140",
	mib:           identifier.IBM01140,
	asciiSuperset: false,
	low:           0x00,
	replacement:   0x3f,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x9c, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x86, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x97, 0x00}}, {2, [3]byte{0xc2, 0x8d, 0x00}},
		{2, [3]byte{0xc2, 0x8e, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x9d, 0x00}}, {2, [3]byte{0xc2, 0x85, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x87, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x92, 0x00}}, {2, [3]byte{0xc2, 0x8f, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x80, 0x00}}, {2, [3]byte{0xc2, 0x81, 0x00}},
		{2, [3]byte{0xc2, 0x82, 0x00}}, {2, [3]byte{0xc2, 0x83, 0x00}},
		{2, [3]byte{0xc2, 0x84, 0x00}}, {1, [3]byte{0x0a, 0x00, 0x00}},
		{1, [3]byte{0x17, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x88, 0x00}}, {2, [3]byte{0xc2, 0x89, 0x00}},
		{2, [3]byte{0xc2, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0x8b, 0x00}},
		{2, [3]byte{0xc2, 0x8c, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0x91, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x93, 0x00}},
		{2, [3]byte{0xc2, 0x94, 0x00}}, {2, [3]byte{0xc2, 0x95, 0x00}},
		{2, [3]byte{0xc2, 0x96, 0x00}}, {1, [3]byte{0x04, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x98, 0x00}}, {2, [3]byte{0xc2, 0x99, 0x00}},
		{2, [3]byte{0xc2, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9b, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x9e, 0x00}}, {1, [3]byte{0x1a, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
		{2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa4, 0x00}},
		{2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
		{2, [3]byte{0xc3, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
		{2, [3]byte{0xc3, 0xa7, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}},
		{2, [3]byte{0xc2, 0xa2, 0x00}}, {1, [3]byte{0x2e, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x28, 0x00, 0x00}},
		{1, [3]byte{0x2b, 0x00, 0x00}}, {1, [3]byte{0x7c, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
		{2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
		{2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
		{2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
		{2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
		{1, [3]byte{0x21, 0x00, 0x00}}, {1, [3]byte{0x24, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x3b, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xac, 0x00}},
		{1, [3]byte{0x2d, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x84, 0x00}},
		{2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
		{2, [3]byte{0xc3, 0x83, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
		{2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
		{2, [3]byte{0xc2, 0xa6, 0x00}}, {1, [3]byte{0x2c, 0x00, 0x00}},
		{1, [3]byte{0x25, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
		{2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
		{2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
		{2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
		{2, [3]byte{0xc3, 0x8c, 0x00}}, {1, [3]byte{0x60, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x3d, 0x00, 0x00}}, {1, [3]byte{0x22, 0x00, 0x00}},
		{2, [3]byte{0xc3, 0x98, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
		{2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}},
		{2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {1, [3]byte{0x6a, 0x00, 0x00}},
		{1, [3]byte{0x6b, 0x00, 0x00}}, {1, [3]byte{0x6c, 0x00, 0x00}},
		{1, [3]byte{0x6d, 0x00, 0x00}}, {1, [3]byte{0x6e, 0x00, 0x00}},
		{1, [3]byte{0x6f, 0x00, 0x00}}, {1, [3]byte{0x70, 0x00, 0x00}},
		{1, [3]byte{0x71, 0x00, 0x00}}, {1, [3]byte{0x72, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}},
		{2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}},
		{2, [3]byte{0xc3, 0x86, 0x00}}, {3, [3]byte{0xe2, 0x82, 0xac}},
		{2, [3]byte{0xc2, 0xb5, 0x00}}, {1, [3]byte{0x7e, 0x00, 0x00}},
		{1, [3]byte{0x73, 0x00, 0x00}}, {1, [3]byte{0x74, 0x00, 0x00}},
		{1, [3]byte{0x75, 0x00, 0x00}}, {1, [3]byte{0x76, 0x00, 0x00}},
		{1, [3]byte{0x77, 0x00, 0x00}}, {1, [3]byte{0x78, 0x00, 0x00}},
		{1, [3]byte{0x79, 0x00, 0x00}}, {1, [3]byte{0x7a, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0xa1, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}},
		{2, [3]byte{0xc3, 0x90, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}},
		{2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0xae, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
		{2, [3]byte{0xc2, 0xa5, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
		{2, [3]byte{0xc2, 0xa9, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xbc, 0x00}},
		{2, [3]byte{0xc2, 0xbd, 0x00}}, {2, [3]byte{0xc2, 0xbe, 0x00}},
		{1, [3]byte{0x5b, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0xaf, 0x00}}, {2, [3]byte{0xc2, 0xa8, 0x00}},
		{2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
		{1, [3]byte{0x7b, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}},
		{2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}},
		{2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
		{1, [3]byte{0x7d, 0x00, 0x00}}, {1, [3]byte{0x4a, 0x00, 0x00}},
		{1, [3]byte{0x4b, 0x00, 0x00}}, {1, [3]byte{0x4c, 0x00, 0x00}},
		{1, [3]byte{0x4d, 0x00, 0x00}}, {1, [3]byte{0x4e, 0x00, 0x00}},
		{1, [3]byte{0x4f, 0x00, 0x00}}, {1, [3]byte{0x50, 0x00, 0x00}},
		{1, [3]byte{0x51, 0x00, 0x00}}, {1, [3]byte{0x52, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0xb9, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
		{2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
		{2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
		{1, [3]byte{0x53, 0x00, 0x00}}, {1, [3]byte{0x54, 0x00, 0x00}},
		{1, [3]byte{0x55, 0x00, 0x00}}, {1, [3]byte{0x56, 0x00, 0x00}},
		{1, [3]byte{0x57, 0x00, 0x00}}, {1, [3]byte{0x58, 0x00, 0x00}},
		{1, [3]byte{0x59, 0x00, 0x00}}, {1, [3]byte{0x5a, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0x94, 0x00}},
		{2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x92, 0x00}},
		{2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
		{2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
		{2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9f, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x37000004, 0x2d000005, 0x2e000006, 0x2f000007,
		0x16000008, 0x05000009, 0x2500000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x3c000014, 0x3d000015, 0x32000016, 0x26000017,
		0x18000018, 0x19000019, 0x3f00001a, 0x2700001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x40000020, 0x5a000021, 0x7f000022, 0x7b000023, 0x5b000024, 0x6c000025, 0x50000026, 0x7d000027,
		0x4d000028, 0x5d000029, 0x5c00002a, 0x4e00002b, 0x6b00002c, 0x6000002d, 0x4b00002e, 0x6100002f,
		0xf0000030, 0xf1000031, 0xf2000032, 0xf3000033, 0xf4000034, 0xf5000035, 0xf6000036, 0xf7000037,
		0xf8000038, 0xf9000039, 0x7a00003a, 0x5e00003b, 0x4c00003c, 0x7e00003d, 0x6e00003e, 0x6f00003f,
		0x7c000040, 0xc1000041, 0xc2000042, 0xc3000043, 0xc4000044, 0xc5000045, 0xc6000046, 0xc7000047,
		0xc8000048, 0xc9000049, 0xd100004a, 0xd200004b, 0xd300004c, 0xd400004d, 0xd500004e, 0xd600004f,
		0xd7000050, 0xd8000051, 0xd9000052, 0xe2000053, 0xe3000054, 0xe4000055, 0xe5000056, 0xe6000057,
		0xe7000058, 0xe8000059, 0xe900005a, 0xba00005b, 0xe000005c, 0xbb00005d, 0xb000005e, 0x6d00005f,
		0x79000060, 0x81000061, 0x82000062, 0x83000063, 0x84000064, 0x85000065, 0x86000066, 0x87000067,
		0x88000068, 0x89000069, 0x9100006a, 0x9200006b, 0x9300006c, 0x9400006d, 0x9500006e, 0x9600006f,
		0x97000070, 0x98000071, 0x99000072, 0xa2000073, 0xa3000074, 0xa4000075, 0xa5000076, 0xa6000077,
		0xa7000078, 0xa8000079, 0xa900007a, 0xc000007b, 0x4f00007c, 0xd000007d, 0xa100007e, 0x0700007f,
		0x20000080, 0x21000081, 0x22000082, 0x23000083, 0x24000084, 0x15000085, 0x06000086, 0x17000087,
		0x28000088, 0x29000089, 0x2a00008a, 0x2b00008b, 0x2c00008c, 0x0900008d, 0x0a00008e, 0x1b00008f,
		0x30000090, 0x31000091, 0x1a000092, 0x33000093, 0x34000094, 0x35000095, 0x36000096, 0x08000097,
		0x38000098, 0x39000099, 0x3a00009a, 0x3b00009b, 0x0400009c, 0x1400009d, 0x3e00009e, 0xff00009f,
		0x410000a0, 0xaa0000a1, 0x4a0000a2, 0xb10000a3, 0xb20000a5, 0x6a0000a6, 0xb50000a7, 0xbd0000a8,
		0xb40000a9, 0x9a0000aa, 0x8a0000ab, 0x5f0000ac, 0xca0000ad, 0xaf0000ae, 0xbc0000af, 0x900000b0,
		0x8f0000b1, 0xea0000b2, 0xfa0000b3, 0xbe0000b4, 0xa00000b5, 0xb60000b6, 0xb30000b7, 0x9d0000b8,
		0xda0000b9, 0x9b0000ba, 0x8b0000bb, 0xb70000bc, 0xb80000bd, 0xb90000be, 0xab0000bf, 0x640000c0,
		0x650000c1, 0x620000c2, 0x660000c3, 0x630000c4, 0x670000c5, 0x9e0000c6, 0x680000c7, 0x740000c8,
		0x710000c9, 0x720000ca, 0x730000cb, 0x780000cc, 0x750000cd, 0x760000ce, 0x770000cf, 0xac0000d0,
		0x690000d1, 0xed0000d2, 0xee0000d3, 0xeb0000d4, 0xef0000d5, 0xec0000d6, 0xbf0000d7, 0x800000d8,
		0xfd0000d9, 0xfe0000da, 0xfb0000db, 0xfc0000dc, 0xad0000dd, 0xae0000de, 0x590000df, 0x440000e0,
		0x450000e1, 0x420000e2, 0x460000e3, 0x430000e4, 0x470000e5, 0x9c0000e6, 0x480000e7, 0x540000e8,
		0x510000e9, 0x520000ea, 0x530000eb, 0x580000ec, 0x550000ed, 0x560000ee, 0x570000ef, 0x8c0000f0,
		0x490000f1, 0xcd0000f2, 0xce0000f3, 0xcb0000f4, 0xcf0000f5, 0xcc0000f6, 0xe10000f7, 0x700000f8,
		0xdd0000f9, 0xde0000fa, 0xdb0000fb, 0xdc0000fc, 0x8d0000fd, 0x8e0000fe, 0xdf0000ff, 0x9f0020ac,
	},
}

// ISO8859_1 is the ISO 8859-1 encoding.
var ISO8859_1 *Charmap = &iso8859_1

var iso8859_1 = Charmap{
	name:          "ISO 8859-1",
	mib:           identifier.ISOLatin1,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x80, 0x00}}, {2, [3]byte{0xc2, 0x81, 0x00}},
		{2, [3]byte{0xc2, 0x82, 0x00}}, {2, [3]byte{0xc2, 0x83, 0x00}},
		{2, [3]byte{0xc2, 0x84, 0x00}}, {2, [3]byte{0xc2, 0x85, 0x00}},
		{2, [3]byte{0xc2, 0x86, 0x00}}, {2, [3]byte{0xc2, 0x87, 0x00}},
		{2, [3]byte{0xc2, 0x88, 0x00}}, {2, [3]byte{0xc2, 0x89, 0x00}},
		{2, [3]byte{0xc2, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0x8b, 0x00}},
		{2, [3]byte{0xc2, 0x8c, 0x00}}, {2, [3]byte{0xc2, 0x8d, 0x00}},
		{2, [3]byte{0xc2, 0x8e, 0x00}}, {2, [3]byte{0xc2, 0x8f, 0x00}},
		{2, [3]byte{0xc2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0x91, 0x00}},
		{2, [3]byte{0xc2, 0x92, 0x00}}, {2, [3]byte{0xc2, 0x93, 0x00}},
		{2, [3]byte{0xc2, 0x94, 0x00}}, {2, [3]byte{0xc2, 0x95, 0x00}},
		{2, [3]byte{0xc2, 0x96, 0x00}}, {2, [3]byte{0xc2, 0x97, 0x00}},
		{2, [3]byte{0xc2, 0x98, 0x00}}, {2, [3]byte{0xc2, 0x99, 0x00}},
		{2, [3]byte{0xc2, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9b, 0x00}},
		{2, [3]byte{0xc2, 0x9c, 0x00}}, {2, [3]byte{0xc2, 0x9d, 0x00}},
		{2, [3]byte{0xc2, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0x9f, 0x00}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
		{2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
		{2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}},
		{2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
		{2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
		{2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
		{2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
		{2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
		{2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
		{2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}},
		{2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
		{2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
		{2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}},
		{2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
		{2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}},
		{2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
		{2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}},
		{2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
		{2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
		{2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
		{2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
		{2, [3]byte{0xc3, 0x90, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
		{2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
		{2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
		{2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
		{2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
		{2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
		{2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}},
		{2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
		{2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
		{2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}},
		{2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
		{2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
		{2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
		{2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
		{2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
		{2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
		{2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}},
		{2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
		{2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
		{2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
		{2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
		{2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
		{2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}},
		{2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0x80000080, 0x81000081, 0x82000082, 0x83000083, 0x84000084, 0x85000085, 0x86000086, 0x87000087,
		0x88000088, 0x89000089, 0x8a00008a, 0x8b00008b, 0x8c00008c, 0x8d00008d, 0x8e00008e, 0x8f00008f,
		0x90000090, 0x91000091, 0x92000092, 0x93000093, 0x94000094, 0x95000095, 0x96000096, 0x97000097,
		0x98000098, 0x99000099, 0x9a00009a, 0x9b00009b, 0x9c00009c, 0x9d00009d, 0x9e00009e, 0x9f00009f,
		0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7,
		0xa80000a8, 0xa90000a9, 0xaa0000aa, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af,
		0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7,
		0xb80000b8, 0xb90000b9, 0xba0000ba, 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xbf0000bf,
		0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7,
		0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf,
		0xd00000d0, 0xd10000d1, 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd70000d7,
		0xd80000d8, 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdd0000dd, 0xde0000de, 0xdf0000df,
		0xe00000e0, 0xe10000e1, 0xe20000e2, 0xe30000e3, 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7,
		0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef,
		0xf00000f0, 0xf10000f1, 0xf20000f2, 0xf30000f3, 0xf40000f4, 0xf50000f5, 0xf60000f6, 0xf70000f7,
		0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xfd0000fd, 0xfe0000fe, 0xff0000ff,
	},
}

// ISO8859_2 is the ISO 8859-2 encoding.
var ISO8859_2 *Charmap = &iso8859_2

var iso8859_2 = Charmap{
	name:          "ISO 8859-2",
	mib:           identifier.ISOLatin2,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc4, 0x84, 0x00}},
		{2, [3]byte{0xcb, 0x98, 0x00}}, {2, [3]byte{0xc5, 0x81, 0x00}},
		{2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0xbd, 0x00}},
		{2, [3]byte{0xc5, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc5, 0xa0, 0x00}},
		{2, [3]byte{0xc5, 0x9e, 0x00}}, {2, [3]byte{0xc5, 0xa4, 0x00}},
		{2, [3]byte{0xc5, 0xb9, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
		{2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc5, 0xbb, 0x00}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc4, 0x85, 0x00}},
		{2, [3]byte{0xcb, 0x9b, 0x00}}, {2, [3]byte{0xc5, 0x82, 0x00}},
		{2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc4, 0xbe, 0x00}},
		{2, [3]byte{0xc5, 0x9b, 0x00}}, {2, [3]byte{0xcb, 0x87, 0x00}},
		{2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc5, 0xa1, 0x00}},
		{2, [3]byte{0xc5, 0x9f, 0x00}}, {2, [3]byte{0xc5, 0xa5, 0x00}},
		{2, [3]byte{0xc5, 0xba, 0x00}}, {2, [3]byte{0xcb, 0x9d, 0x00}},
		{2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xc5, 0xbc, 0x00}},
		{2, [3]byte{0xc5, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
		{2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc4, 0x82, 0x00}},
		{2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc4, 0xb9, 0x00}},
		{2, [3]byte{0xc4, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}},
		{2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
		{2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
		{2, [3]byte{0xc4, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
		{2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc4, 0x8e, 0x00}},
		{2, [3]byte{0xc4, 0x90, 0x00}}, {2, [3]byte{0xc5, 0x83, 0x00}},
		{2, [3]byte{0xc5, 0x87, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
		{2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc5, 0x90, 0x00}},
		{2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
		{2, [3]byte{0xc5, 0x98, 0x00}}, {2, [3]byte{0xc5, 0xae, 0x00}},
		{2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc5, 0xb0, 0x00}},
		{2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}},
		{2, [3]byte{0xc5, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
		{2, [3]byte{0xc5, 0x95, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
		{2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc4, 0x83, 0x00}},
		{2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0xba, 0x00}},
		{2, [3]byte{0xc4, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
		{2, [3]byte{0xc4, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
		{2, [3]byte{0xc4, 0x99, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
		{2, [3]byte{0xc4, 0x9b, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
		{2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc4, 0x8f, 0x00}},
		{2, [3]byte{0xc4, 0x91, 0x00}}, {2, [3]byte{0xc5, 0x84, 0x00}},
		{2, [3]byte{0xc5, 0x88, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
		{2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc5, 0x91, 0x00}},
		{2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
		{2, [3]byte{0xc5, 0x99, 0x00}}, {2, [3]byte{0xc5, 0xaf, 0x00}},
		{2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc5, 0xb1, 0x00}},
		{2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}},
		{2, [3]byte{0xc5, 0xa3, 0x00}}, {2, [3]byte{0xcb, 0x99, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xa00000a0, 0xa40000a4, 0xa70000a7, 0xa80000a8, 0xad0000ad, 0xb00000b0, 0xb40000b4, 0xb80000b8,
		0xc10000c1, 0xc20000c2, 0xc40000c4, 0xc70000c7, 0xc90000c9, 0xcb0000cb, 0xcd0000cd, 0xce0000ce,
		0xd30000d3, 0xd40000d4, 0xd60000d6, 0xd70000d7, 0xda0000da, 0xdc0000dc, 0xdd0000dd, 0xdf0000df,
		0xe10000e1, 0xe20000e2, 0xe40000e4, 0xe70000e7, 0xe90000e9, 0xeb0000eb, 0xed0000ed, 0xee0000ee,
		0xf30000f3, 0xf40000f4, 0xf60000f6, 0xf70000f7, 0xfa0000fa, 0xfc0000fc, 0xfd0000fd, 0xc3000102,
		0xe3000103, 0xa1000104, 0xb1000105, 0xc6000106, 0xe6000107, 0xc800010c, 0xe800010d, 0xcf00010e,
		0xef00010f, 0xd0000110, 0xf0000111, 0xca000118, 0xea000119, 0xcc00011a, 0xec00011b, 0xc5000139,
		0xe500013a, 0xa500013d, 0xb500013e, 0xa3000141, 0xb3000142, 0xd1000143, 0xf1000144, 0xd2000147,
		0xf2000148, 0xd5000150, 0xf5000151, 0xc0000154, 0xe0000155, 0xd8000158, 0xf8000159, 0xa600015a,
		0xb600015b, 0xaa00015e, 0xba00015f, 0xa9000160, 0xb9000161, 0xde000162, 0xfe000163, 0xab000164,
		0xbb000165, 0xd900016e, 0xf900016f, 0xdb000170, 0xfb000171, 0xac000179, 0xbc00017a, 0xaf00017b,
		0xbf00017c, 0xae00017d, 0xbe00017e, 0xb70002c7, 0xa20002d8, 0xff0002d9, 0xb20002db, 0xbd0002dd,
		0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd,
		0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd,
		0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd,
		0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd,
	},
}

// ISO8859_3 is the ISO 8859-3 encoding.
var ISO8859_3 *Charmap = &iso8859_3

var iso8859_3 = Charmap{
	name:          "ISO 8859-3",
	mib:           identifier.ISOLatin3,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc4, 0xa6, 0x00}},
		{2, [3]byte{0xcb, 0x98, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
		{2, [3]byte{0xc2, 0xa4, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xc4, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc4, 0xb0, 0x00}},
		{2, [3]byte{0xc5, 0x9e, 0x00}}, {2, [3]byte{0xc4, 0x9e, 0x00}},
		{2, [3]byte{0xc4, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc5, 0xbb, 0x00}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc4, 0xa7, 0x00}},
		{2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
		{2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
		{2, [3]byte{0xc4, 0xa5, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
		{2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc4, 0xb1, 0x00}},
		{2, [3]byte{0xc5, 0x9f, 0x00}}, {2, [3]byte{0xc4, 0x9f, 0x00}},
		{2, [3]byte{0xc4, 0xb5, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc5, 0xbc, 0x00}},
		{2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
		{2, [3]byte{0xc3, 0x82, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc4, 0x8a, 0x00}},
		{2, [3]byte{0xc4, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}},
		{2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
		{2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
		{2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
		{2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc3, 0x91, 0x00}},
		{2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
		{2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc4, 0xa0, 0x00}},
		{2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
		{2, [3]byte{0xc4, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
		{2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
		{2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc5, 0xac, 0x00}},
		{2, [3]byte{0xc5, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
		{2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
		{2, [3]byte{0xc3, 0xa2, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0x8b, 0x00}},
		{2, [3]byte{0xc4, 0x89, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
		{2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
		{2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
		{2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
		{2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc3, 0xb1, 0x00}},
		{2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
		{2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc4, 0xa1, 0x00}},
		{2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
		{2, [3]byte{0xc4, 0x9d, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
		{2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
		{2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc5, 0xad, 0x00}},
		{2, [3]byte{0xc5, 0x9d, 0x00}}, {2, [3]byte{0xcb, 0x99, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xa00000a0, 0xa30000a3, 0xa40000a4, 0xa70000a7, 0xa80000a8, 0xad0000ad, 0xb00000b0, 0xb20000b2,
		0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb70000b7, 0xb80000b8, 0xbd0000bd, 0xc00000c0, 0xc10000c1,
		0xc20000c2, 0xc40000c4, 0xc70000c7, 0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc,
		0xcd0000cd, 0xce0000ce, 0xcf0000cf, 0xd10000d1, 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd60000d6,
		0xd70000d7, 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdf0000df, 0xe00000e0, 0xe10000e1,
		0xe20000e2, 0xe40000e4, 0xe70000e7, 0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xec0000ec,
		0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf10000f1, 0xf20000f2, 0xf30000f3, 0xf40000f4, 0xf60000f6,
		0xf70000f7, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xc6000108, 0xe6000109, 0xc500010a,
		0xe500010b, 0xd800011c, 0xf800011d, 0xab00011e, 0xbb00011f, 0xd5000120, 0xf5000121, 0xa6000124,
		0xb6000125, 0xa1000126, 0xb1000127, 0xa9000130, 0xb9000131, 0xac000134, 0xbc000135, 0xde00015c,
		0xfe00015d, 0xaa00015e, 0xba00015f, 0xdd00016c, 0xfd00016d, 0xaf00017b, 0xbf00017c, 0xa20002d8,
		0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9,
		0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9,
		0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9,
		0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9,
		0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9,
	},
}

// ISO8859_4 is the ISO 8859-4 encoding.
var ISO8859_4 *Charmap = &iso8859_4

var iso8859_4 = Charmap{
	name:          "ISO 8859-4",
	mib:           identifier.ISOLatin4,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc4, 0x84, 0x00}},
		{2, [3]byte{0xc4, 0xb8, 0x00}}, {2, [3]byte{0xc5, 0x96, 0x00}},
		{2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0xa8, 0x00}},
		{2, [3]byte{0xc4, 0xbb, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc5, 0xa0, 0x00}},
		{2, [3]byte{0xc4, 0x92, 0x00}}, {2, [3]byte{0xc4, 0xa2, 0x00}},
		{2, [3]byte{0xc5, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
		{2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc4, 0x85, 0x00}},
		{2, [3]byte{0xcb, 0x9b, 0x00}}, {2, [3]byte{0xc5, 0x97, 0x00}},
		{2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc4, 0xa9, 0x00}},
		{2, [3]byte{0xc4, 0xbc, 0x00}}, {2, [3]byte{0xcb, 0x87, 0x00}},
		{2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc5, 0xa1, 0x00}},
		{2, [3]byte{0xc4, 0x93, 0x00}}, {2, [3]byte{0xc4, 0xa3, 0x00}},
		{2, [3]byte{0xc5, 0xa7, 0x00}}, {2, [3]byte{0xc5, 0x8a, 0x00}},
		{2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xc5, 0x8b, 0x00}},
		{2, [3]byte{0xc4, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
		{2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}},
		{2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
		{2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc4, 0xae, 0x00}},
		{2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
		{2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
		{2, [3]byte{0xc4, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
		{2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc4, 0xaa, 0x00}},
		{2, [3]byte{0xc4, 0x90, 0x00}}, {2, [3]byte{0xc5, 0x85, 0x00}},
		{2, [3]byte{0xc5, 0x8c, 0x00}}, {2, [3]byte{0xc4, 0xb6, 0x00}},
		{2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
		{2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
		{2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc5, 0xb2, 0x00}},
		{2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
		{2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc5, 0xa8, 0x00}},
		{2, [3]byte{0xc5, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
		{2, [3]byte{0xc4, 0x81, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
		{2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}},
		{2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
		{2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc4, 0xaf, 0x00}},
		{2, [3]byte{0xc4, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
		{2, [3]byte{0xc4, 0x99, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
		{2, [3]byte{0xc4, 0x97, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
		{2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc4, 0xab, 0x00}},
		{2, [3]byte{0xc4, 0x91, 0x00}}, {2, [3]byte{0xc5, 0x86, 0x00}},
		{2, [3]byte{0xc5, 0x8d, 0x00}}, {2, [3]byte{0xc4, 0xb7, 0x00}},
		{2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
		{2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
		{2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc5, 0xb3, 0x00}},
		{2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
		{2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc5, 0xa9, 0x00}},
		{2, [3]byte{0xc5, 0xab, 0x00}}, {2, [3]byte{0xcb, 0x99, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xa00000a0, 0xa40000a4, 0xa70000a7, 0xa80000a8, 0xad0000ad, 0xaf0000af, 0xb00000b0, 0xb40000b4,
		0xb80000b8, 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc90000c9,
		0xcb0000cb, 0xcd0000cd, 0xce0000ce, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd70000d7, 0xd80000d8,
		0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdf0000df, 0xe10000e1, 0xe20000e2, 0xe30000e3, 0xe40000e4,
		0xe50000e5, 0xe60000e6, 0xe90000e9, 0xeb0000eb, 0xed0000ed, 0xee0000ee, 0xf40000f4, 0xf50000f5,
		0xf60000f6, 0xf70000f7, 0xf80000f8, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xc0000100, 0xe0000101,
		0xa1000104, 0xb1000105, 0xc800010c, 0xe800010d, 0xd0000110, 0xf0000111, 0xaa000112, 0xba000113,
		0xcc000116, 0xec000117, 0xca000118, 0xea000119, 0xab000122, 0xbb000123, 0xa5000128, 0xb5000129,
		0xcf00012a, 0xef00012b, 0xc700012e, 0xe700012f, 0xd3000136, 0xf3000137, 0xa2000138, 0xa600013b,
		0xb600013c, 0xd1000145, 0xf1000146, 0xbd00014a, 0xbf00014b, 0xd200014c, 0xf200014d, 0xa3000156,
		0xb3000157, 0xa9000160, 0xb9000161, 0xac000166, 0xbc000167, 0xdd000168, 0xfd000169, 0xde00016a,
		0xfe00016b, 0xd9000172, 0xf9000173, 0xae00017d, 0xbe00017e, 0xb70002c7, 0xff0002d9, 0xb20002db,
		0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db,
		0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db,
		0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db,
		0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db,
	},
}

// ISO8859_5 is the ISO 8859-5 encoding.
var ISO8859_5 *Charmap = &iso8859_5

var iso8859_5 = Charmap{
	name:          "ISO 8859-5",
	mib:           identifier.ISOLatinCyrillic,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0x81, 0x00}},
		{2, [3]byte{0xd0, 0x82, 0x00}}, {2, [3]byte{0xd0, 0x83, 0x00}},
		{2, [3]byte{0xd0, 0x84, 0x00}}, {2, [3]byte{0xd0, 0x85, 0x00}},
		{2, [3]byte{0xd0, 0x86, 0x00}}, {2, [3]byte{0xd0, 0x87, 0x00}},
		{2, [3]byte{0xd0, 0x88, 0x00}}, {2, [3]byte{0xd0, 0x89, 0x00}},
		{2, [3]byte{0xd0, 0x8a, 0x00}}, {2, [3]byte{0xd0, 0x8b, 0x00}},
		{2, [3]byte{0xd0, 0x8c, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
		{2, [3]byte{0xd0, 0x8e, 0x00}}, {2, [3]byte{0xd0, 0x8f, 0x00}},
		{2, [3]byte{0xd0, 0x90, 0x00}}, {2, [3]byte{0xd0, 0x91, 0x00}},
		{2, [3]byte{0xd0, 0x92, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}},
		{2, [3]byte{0xd0, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}},
		{2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x97, 0x00}},
		{2, [3]byte{0xd0, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x99, 0x00}},
		{2, [3]byte{0xd0, 0x9a, 0x00}}, {2, [3]byte{0xd0, 0x9b, 0x00}},
		{2, [3]byte{0xd0, 0x9c, 0x00}}, {2, [3]byte{0xd0, 0x9d, 0x00}},
		{2, [3]byte{0xd0, 0x9e, 0x00}}, {2, [3]byte{0xd0, 0x9f, 0x00}},
		{2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0xa1, 0x00}},
		{2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd0, 0xa3, 0x00}},
		{2, [3]byte{0xd0, 0xa4, 0x00}}, {2, [3]byte{0xd0, 0xa5, 0x00}},
		{2, [3]byte{0xd0, 0xa6, 0x00}}, {2, [3]byte{0xd0, 0xa7, 0x00}},
		{2, [3]byte{0xd0, 0xa8, 0x00}}, {2, [3]byte{0xd0, 0xa9, 0x00}},
		{2, [3]byte{0xd0, 0xaa, 0x00}}, {2, [3]byte{0xd0, 0xab, 0x00}},
		{2, [3]byte{0xd0, 0xac, 0x00}}, {2, [3]byte{0xd0, 0xad, 0x00}},
		{2, [3]byte{0xd0, 0xae, 0x00}}, {2, [3]byte{0xd0, 0xaf, 0x00}},
		{2, [3]byte{0xd0, 0xb0, 0x00}}, {2, [3]byte{0xd0, 0xb1, 0x00}},
		{2, [3]byte{0xd0, 0xb2, 0x00}}, {2, [3]byte{0xd0, 0xb3, 0x00}},
		{2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0xb5, 0x00}},
		{2, [3]byte{0xd0, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0xb7, 0x00}},
		{2, [3]byte{0xd0, 0xb8, 0x00}}, {2, [3]byte{0xd0, 0xb9, 0x00}},
		{2, [3]byte{0xd0, 0xba, 0x00}}, {2, [3]byte{0xd0, 0xbb, 0x00}},
		{2, [3]byte{0xd0, 0xbc, 0x00}}, {2, [3]byte{0xd0, 0xbd, 0x00}},
		{2, [3]byte{0xd0, 0xbe, 0x00}}, {2, [3]byte{0xd0, 0xbf, 0x00}},
		{2, [3]byte{0xd1, 0x80, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}},
		{2, [3]byte{0xd1, 0x82, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}},
		{2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd1, 0x85, 0x00}},
		{2, [3]byte{0xd1, 0x86, 0x00}}, {2, [3]byte{0xd1, 0x87, 0x00}},
		{2, [3]byte{0xd1, 0x88, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}},
		{2, [3]byte{0xd1, 0x8a, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}},
		{2, [3]byte{0xd1, 0x8c, 0x00}}, {2, [3]byte{0xd1, 0x8d, 0x00}},
		{2, [3]byte{0xd1, 0x8e, 0x00}}, {2, [3]byte{0xd1, 0x8f, 0x00}},
		{3, [3]byte{0xe2, 0x84, 0x96}}, {2, [3]byte{0xd1, 0x91, 0x00}},
		{2, [3]byte{0xd1, 0x92, 0x00}}, {2, [3]byte{0xd1, 0x93, 0x00}},
		{2, [3]byte{0xd1, 0x94, 0x00}}, {2, [3]byte{0xd1, 0x95, 0x00}},
		{2, [3]byte{0xd1, 0x96, 0x00}}, {2, [3]byte{0xd1, 0x97, 0x00}},
		{2, [3]byte{0xd1, 0x98, 0x00}}, {2, [3]byte{0xd1, 0x99, 0x00}},
		{2, [3]byte{0xd1, 0x9a, 0x00}}, {2, [3]byte{0xd1, 0x9b, 0x00}},
		{2, [3]byte{0xd1, 0x9c, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xd1, 0x9e, 0x00}}, {2, [3]byte{0xd1, 0x9f, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xa00000a0, 0xfd0000a7, 0xad0000ad, 0xa1000401, 0xa2000402, 0xa3000403, 0xa4000404, 0xa5000405,
		0xa6000406, 0xa7000407, 0xa8000408, 0xa9000409, 0xaa00040a, 0xab00040b, 0xac00040c, 0xae00040e,
		0xaf00040f, 0xb0000410, 0xb1000411, 0xb2000412, 0xb3000413, 0xb4000414, 0xb5000415, 0xb6000416,
		0xb7000417, 0xb8000418, 0xb9000419, 0xba00041a, 0xbb00041b, 0xbc00041c, 0xbd00041d, 0xbe00041e,
		0xbf00041f, 0xc0000420, 0xc1000421, 0xc2000422, 0xc3000423, 0xc4000424, 0xc5000425, 0xc6000426,
		0xc7000427, 0xc8000428, 0xc9000429, 0xca00042a, 0xcb00042b, 0xcc00042c, 0xcd00042d, 0xce00042e,
		0xcf00042f, 0xd0000430, 0xd1000431, 0xd2000432, 0xd3000433, 0xd4000434, 0xd5000435, 0xd6000436,
		0xd7000437, 0xd8000438, 0xd9000439, 0xda00043a, 0xdb00043b, 0xdc00043c, 0xdd00043d, 0xde00043e,
		0xdf00043f, 0xe0000440, 0xe1000441, 0xe2000442, 0xe3000443, 0xe4000444, 0xe5000445, 0xe6000446,
		0xe7000447, 0xe8000448, 0xe9000449, 0xea00044a, 0xeb00044b, 0xec00044c, 0xed00044d, 0xee00044e,
		0xef00044f, 0xf1000451, 0xf2000452, 0xf3000453, 0xf4000454, 0xf5000455, 0xf6000456, 0xf7000457,
		0xf8000458, 0xf9000459, 0xfa00045a, 0xfb00045b, 0xfc00045c, 0xfe00045e, 0xff00045f, 0xf0002116,
		0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116,
		0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116,
		0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116,
		0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116,
	},
}

// ISO8859_6 is the ISO 8859-6 encoding.
var ISO8859_6 *Charmap = &iso8859_6

var iso8859_6 = Charmap{
	name:          "ISO 8859-6",
	mib:           identifier.ISOLatinArabic,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xc2, 0xa4, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xd8, 0x8c, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xd8, 0x9b, 0x00}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xd8, 0x9f, 0x00}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xd8, 0xa1, 0x00}},
		{2, [3]byte{0xd8, 0xa2, 0x00}}, {2, [3]byte{0xd8, 0xa3, 0x00}},
		{2, [3]byte{0xd8, 0xa4, 0x00}}, {2, [3]byte{0xd8, 0xa5, 0x00}},
		{2, [3]byte{0xd8, 0xa6, 0x00}}, {2, [3]byte{0xd8, 0xa7, 0x00}},
		{2, [3]byte{0xd8, 0xa8, 0x00}}, {2, [3]byte{0xd8, 0xa9, 0x00}},
		{2, [3]byte{0xd8, 0xaa, 0x00}}, {2, [3]byte{0xd8, 0xab, 0x00}},
		{2, [3]byte{0xd8, 0xac, 0x00}}, {2, [3]byte{0xd8, 0xad, 0x00}},
		{2, [3]byte{0xd8, 0xae, 0x00}}, {2, [3]byte{0xd8, 0xaf, 0x00}},
		{2, [3]byte{0xd8, 0xb0, 0x00}}, {2, [3]byte{0xd8, 0xb1, 0x00}},
		{2, [3]byte{0xd8, 0xb2, 0x00}}, {2, [3]byte{0xd8, 0xb3, 0x00}},
		{2, [3]byte{0xd8, 0xb4, 0x00}}, {2, [3]byte{0xd8, 0xb5, 0x00}},
		{2, [3]byte{0xd8, 0xb6, 0x00}}, {2, [3]byte{0xd8, 0xb7, 0x00}},
		{2, [3]byte{0xd8, 0xb8, 0x00}}, {2, [3]byte{0xd8, 0xb9, 0x00}},
		{2, [3]byte{0xd8, 0xba, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xd9, 0x80, 0x00}}, {2, [3]byte{0xd9, 0x81, 0x00}},
		{2, [3]byte{0xd9, 0x82, 0x00}}, {2, [3]byte{0xd9, 0x83, 0x00}},
		{2, [3]byte{0xd9, 0x84, 0x00}}, {2, [3]byte{0xd9, 0x85, 0x00}},
		{2, [3]byte{0xd9, 0x86, 0x00}}, {2, [3]byte{0xd9, 0x87, 0x00}},
		{2, [3]byte{0xd9, 0x88, 0x00}}, {2, [3]byte{0xd9, 0x89, 0x00}},
		{2, [3]byte{0xd9, 0x8a, 0x00}}, {2, [3]byte{0xd9, 0x8b, 0x00}},
		{2, [3]byte{0xd9, 0x8c, 0x00}}, {2, [3]byte{0xd9, 0x8d, 0x00}},
		{2, [3]byte{0xd9, 0x8e, 0x00}}, {2, [3]byte{0xd9, 0x8f, 0x00}},
		{2, [3]byte{0xd9, 0x90, 0x00}}, {2, [3]byte{0xd9, 0x91, 0x00}},
		{2, [3]byte{0xd9, 0x92, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xa00000a0, 0xa40000a4, 0xad0000ad, 0xac00060c, 0xbb00061b, 0xbf00061f, 0xc1000621, 0xc2000622,
		0xc3000623, 0xc4000624, 0xc5000625, 0xc6000626, 0xc7000627, 0xc8000628, 0xc9000629, 0xca00062a,
		0xcb00062b, 0xcc00062c, 0xcd00062d, 0xce00062e, 0xcf00062f, 0xd0000630, 0xd1000631, 0xd2000632,
		0xd3000633, 0xd4000634, 0xd5000635, 0xd6000636, 0xd7000637, 0xd8000638, 0xd9000639, 0xda00063a,
		0xe0000640, 0xe1000641, 0xe2000642, 0xe3000643, 0xe4000644, 0xe5000645, 0xe6000646, 0xe7000647,
		0xe8000648, 0xe9000649, 0xea00064a, 0xeb00064b, 0xec00064c, 0xed00064d, 0xee00064e, 0xef00064f,
		0xf0000650, 0xf1000651, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652,
		0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652,
		0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652,
		0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652,
		0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652,
		0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652,
		0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652,
		0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652,
		0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652,
		0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652,
	},
}

// ISO8859_7 is the ISO 8859-7 encoding.
var ISO8859_7 *Charmap = &iso8859_7

var iso8859_7 = Charmap{
	name:          "ISO 8859-7",
	mib:           identifier.ISOLatinGreek,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x98}},
		{3, [3]byte{0xe2, 0x80, 0x99}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
		{3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xe2, 0x82, 0xaf}},
		{2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
		{2, [3]byte{0xcd, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
		{2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x95}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
		{2, [3]byte{0xce, 0x84, 0x00}}, {2, [3]byte{0xce, 0x85, 0x00}},
		{2, [3]byte{0xce, 0x86, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
		{2, [3]byte{0xce, 0x88, 0x00}}, {2, [3]byte{0xce, 0x89, 0x00}},
		{2, [3]byte{0xce, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
		{2, [3]byte{0xce, 0x8c, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
		{2, [3]byte{0xce, 0x8e, 0x00}}, {2, [3]byte{0xce, 0x8f, 0x00}},
		{2, [3]byte{0xce, 0x90, 0x00}}, {2, [3]byte{0xce, 0x91, 0x00}},
		{2, [3]byte{0xce, 0x92, 0x00}}, {2, [3]byte{0xce, 0x93, 0x00}},
		{2, [3]byte{0xce, 0x94, 0x00}}, {2, [3]byte{0xce, 0x95, 0x00}},
		{2, [3]byte{0xce, 0x96, 0x00}}, {2, [3]byte{0xce, 0x97, 0x00}},
		{2, [3]byte{0xce, 0x98, 0x00}}, {2, [3]byte{0xce, 0x99, 0x00}},
		{2, [3]byte{0xce, 0x9a, 0x00}}, {2, [3]byte{0xce, 0x9b, 0x00}},
		{2, [3]byte{0xce, 0x9c, 0x00}}, {2, [3]byte{0xce, 0x9d, 0x00}},
		{2, [3]byte{0xce, 0x9e, 0x00}}, {2, [3]byte{0xce, 0x9f, 0x00}},
		{2, [3]byte{0xce, 0xa0, 0x00}}, {2, [3]byte{0xce, 0xa1, 0x00}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xce, 0xa3, 0x00}},
		{2, [3]byte{0xce, 0xa4, 0x00}}, {2, [3]byte{0xce, 0xa5, 0x00}},
		{2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0xa7, 0x00}},
		{2, [3]byte{0xce, 0xa8, 0x00}}, {2, [3]byte{0xce, 0xa9, 0x00}},
		{2, [3]byte{0xce, 0xaa, 0x00}}, {2, [3]byte{0xce, 0xab, 0x00}},
		{2, [3]byte{0xce, 0xac, 0x00}}, {2, [3]byte{0xce, 0xad, 0x00}},
		{2, [3]byte{0xce, 0xae, 0x00}}, {2, [3]byte{0xce, 0xaf, 0x00}},
		{2, [3]byte{0xce, 0xb0, 0x00}}, {2, [3]byte{0xce, 0xb1, 0x00}},
		{2, [3]byte{0xce, 0xb2, 0x00}}, {2, [3]byte{0xce, 0xb3, 0x00}},
		{2, [3]byte{0xce, 0xb4, 0x00}}, {2, [3]byte{0xce, 0xb5, 0x00}},
		{2, [3]byte{0xce, 0xb6, 0x00}}, {2, [3]byte{0xce, 0xb7, 0x00}},
		{2, [3]byte{0xce, 0xb8, 0x00}}, {2, [3]byte{0xce, 0xb9, 0x00}},
		{2, [3]byte{0xce, 0xba, 0x00}}, {2, [3]byte{0xce, 0xbb, 0x00}},
		{2, [3]byte{0xce, 0xbc, 0x00}}, {2, [3]byte{0xce, 0xbd, 0x00}},
		{2, [3]byte{0xce, 0xbe, 0x00}}, {2, [3]byte{0xce, 0xbf, 0x00}},
		{2, [3]byte{0xcf, 0x80, 0x00}}, {2, [3]byte{0xcf, 0x81, 0x00}},
		{2, [3]byte{0xcf, 0x82, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}},
		{2, [3]byte{0xcf, 0x84, 0x00}}, {2, [3]byte{0xcf, 0x85, 0x00}},
		{2, [3]byte{0xcf, 0x86, 0x00}}, {2, [3]byte{0xcf, 0x87, 0x00}},
		{2, [3]byte{0xcf, 0x88, 0x00}}, {2, [3]byte{0xcf, 0x89, 0x00}},
		{2, [3]byte{0xcf, 0x8a, 0x00}}, {2, [3]byte{0xcf, 0x8b, 0x00}},
		{2, [3]byte{0xcf, 0x8c, 0x00}}, {2, [3]byte{0xcf, 0x8d, 0x00}},
		{2, [3]byte{0xcf, 0x8e, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xa00000a0, 0xa30000a3, 0xa60000a6, 0xa70000a7, 0xa80000a8, 0xa90000a9, 0xab0000ab, 0xac0000ac,
		0xad0000ad, 0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb70000b7, 0xbb0000bb, 0xbd0000bd,
		0xaa00037a, 0xb4000384, 0xb5000385, 0xb6000386, 0xb8000388, 0xb9000389, 0xba00038a, 0xbc00038c,
		0xbe00038e, 0xbf00038f, 0xc0000390, 0xc1000391, 0xc2000392, 0xc3000393, 0xc4000394, 0xc5000395,
		0xc6000396, 0xc7000397, 0xc8000398, 0xc9000399, 0xca00039a, 0xcb00039b, 0xcc00039c, 0xcd00039d,
		0xce00039e, 0xcf00039f, 0xd00003a0, 0xd10003a1, 0xd30003a3, 0xd40003a4, 0xd50003a5, 0xd60003a6,
		0xd70003a7, 0xd80003a8, 0xd90003a9, 0xda0003aa, 0xdb0003ab, 0xdc0003ac, 0xdd0003ad, 0xde0003ae,
		0xdf0003af, 0xe00003b0, 0xe10003b1, 0xe20003b2, 0xe30003b3, 0xe40003b4, 0xe50003b5, 0xe60003b6,
		0xe70003b7, 0xe80003b8, 0xe90003b9, 0xea0003ba, 0xeb0003bb, 0xec0003bc, 0xed0003bd, 0xee0003be,
		0xef0003bf, 0xf00003c0, 0xf10003c1, 0xf20003c2, 0xf30003c3, 0xf40003c4, 0xf50003c5, 0xf60003c6,
		0xf70003c7, 0xf80003c8, 0xf90003c9, 0xfa0003ca, 0xfb0003cb, 0xfc0003cc, 0xfd0003cd, 0xfe0003ce,
		0xaf002015, 0xa1002018, 0xa2002019, 0xa40020ac, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af,
		0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af,
		0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af,
		0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af,
		0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af,
	},
}

// ISO8859_8 is the ISO 8859-8 encoding.
var ISO8859_8 *Charmap = &iso8859_8

var iso8859_8 = Charmap{
	name:          "ISO 8859-8",
	mib:           identifier.ISOLatinHebrew,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
		{2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}},
		{2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
		{2, [3]byte{0xc3, 0x97, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
		{2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
		{2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
		{2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
		{2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
		{2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}},
		{2, [3]byte{0xc3, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
		{2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
		{2, [3]byte{0xc2, 0xbe, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x97}},
		{2, [3]byte{0xd7, 0x90, 0x00}}, {2, [3]byte{0xd7, 0x91, 0x00}},
		{2, [3]byte{0xd7, 0x92, 0x00}}, {2, [3]byte{0xd7, 0x93, 0x00}},
		{2, [3]byte{0xd7, 0x94, 0x00}}, {2, [3]byte{0xd7, 0x95, 0x00}},
		{2, [3]byte{0xd7, 0x96, 0x00}}, {2, [3]byte{0xd7, 0x97, 0x00}},
		{2, [3]byte{0xd7, 0x98, 0x00}}, {2, [3]byte{0xd7, 0x99, 0x00}},
		{2, [3]byte{0xd7, 0x9a, 0x00}}, {2, [3]byte{0xd7, 0x9b, 0x00}},
		{2, [3]byte{0xd7, 0x9c, 0x00}}, {2, [3]byte{0xd7, 0x9d, 0x00}},
		{2, [3]byte{0xd7, 0x9e, 0x00}}, {2, [3]byte{0xd7, 0x9f, 0x00}},
		{2, [3]byte{0xd7, 0xa0, 0x00}}, {2, [3]byte{0xd7, 0xa1, 0x00}},
		{2, [3]byte{0xd7, 0xa2, 0x00}}, {2, [3]byte{0xd7, 0xa3, 0x00}},
		{2, [3]byte{0xd7, 0xa4, 0x00}}, {2, [3]byte{0xd7, 0xa5, 0x00}},
		{2, [3]byte{0xd7, 0xa6, 0x00}}, {2, [3]byte{0xd7, 0xa7, 0x00}},
		{2, [3]byte{0xd7, 0xa8, 0x00}}, {2, [3]byte{0xd7, 0xa9, 0x00}},
		{2, [3]byte{0xd7, 0xaa, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x8e}},
		{3, [3]byte{0xe2, 0x80, 0x8f}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xa00000a0, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7, 0xa80000a8,
		0xa90000a9, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af, 0xb00000b0, 0xb10000b1,
		0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, 0xb80000b8, 0xb90000b9,
		0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xaa0000d7, 0xba0000f7, 0xe00005d0, 0xe10005d1,
		0xe20005d2, 0xe30005d3, 0xe40005d4, 0xe50005d5, 0xe60005d6, 0xe70005d7, 0xe80005d8, 0xe90005d9,
		0xea0005da, 0xeb0005db, 0xec0005dc, 0xed0005dd, 0xee0005de, 0xef0005df, 0xf00005e0, 0xf10005e1,
		0xf20005e2, 0xf30005e3, 0xf40005e4, 0xf50005e5, 0xf60005e6, 0xf70005e7, 0xf80005e8, 0xf90005e9,
		0xfa0005ea, 0xfd00200e, 0xfe00200f, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017,
		0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017,
		0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017,
		0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017,
		0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017,
		0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017,
		0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017,
		0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017,
		0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017,
	},
}

// ISO8859_9 is the ISO 8859-9 encoding.
var ISO8859_9 *Charmap = &iso8859_9

var iso8859_9 = Charmap{
	name:          "ISO 8859-9",
	mib:           identifier.ISOLatin5,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{2, [3]byte{0xc2, 0x80, 0x00}}, {2, [3]byte{0xc2, 0x81, 0x00}},
		{2, [3]byte{0xc2, 0x82, 0x00}}, {2, [3]byte{0xc2, 0x83, 0x00}},
		{2, [3]byte{0xc2, 0x84, 0x00}}, {2, [3]byte{0xc2, 0x85, 0x00}},
		{2, [3]byte{0xc2, 0x86, 0x00}}, {2, [3]byte{0xc2, 0x87, 0x00}},
		{2, [3]byte{0xc2, 0x88, 0x00}}, {2, [3]byte{0xc2, 0x89, 0x00}},
		{2, [3]byte{0xc2, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0x8b, 0x00}},
		{2, [3]byte{0xc2, 0x8c, 0x00}}, {2, [3]byte{0xc2, 0x8d, 0x00}},
		{2, [3]byte{0xc2, 0x8e, 0x00}}, {2, [3]byte{0xc2, 0x8f, 0x00}},
		{2, [3]byte{0xc2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0x91, 0x00}},
		{2, [3]byte{0xc2, 0x92, 0x00}}, {2, [3]byte{0xc2, 0x93, 0x00}},
		{2, [3]byte{0xc2, 0x94, 0x00}}, {2, [3]byte{0xc2, 0x95, 0x00}},
		{2, [3]byte{0xc2, 0x96, 0x00}}, {2, [3]byte{0xc2, 0x97, 0x00}},
		{2, [3]byte{0xc2, 0x98, 0x00}}, {2, [3]byte{0xc2, 0x99, 0x00}},
		{2, [3]byte{0xc2, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9b, 0x00}},
		{2, [3]byte{0xc2, 0x9c, 0x00}}, {2, [3]byte{0xc2, 0x9d, 0x00}},
		{2, [3]byte{0xc2, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0x9f, 0x00}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
		{2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
		{2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}},
		{2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
		{2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
		{2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
		{2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
		{2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
		{2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
		{2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}},
		{2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
		{2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
		{2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}},
		{2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
		{2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}},
		{2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
		{2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}},
		{2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
		{2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
		{2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
		{2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
		{2, [3]byte{0xc4, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
		{2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
		{2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
		{2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
		{2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
		{2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
		{2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc4, 0xb0, 0x00}},
		{2, [3]byte{0xc5, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
		{2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
		{2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}},
		{2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
		{2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
		{2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
		{2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
		{2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
		{2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
		{2, [3]byte{0xc4, 0x9f, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}},
		{2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
		{2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
		{2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
		{2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
		{2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
		{2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc4, 0xb1, 0x00}},
		{2, [3]byte{0xc5, 0x9f, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0x80000080, 0x81000081, 0x82000082, 0x83000083, 0x84000084, 0x85000085, 0x86000086, 0x87000087,
		0x88000088, 0x89000089, 0x8a00008a, 0x8b00008b, 0x8c00008c, 0x8d00008d, 0x8e00008e, 0x8f00008f,
		0x90000090, 0x91000091, 0x92000092, 0x93000093, 0x94000094, 0x95000095, 0x96000096, 0x97000097,
		0x98000098, 0x99000099, 0x9a00009a, 0x9b00009b, 0x9c00009c, 0x9d00009d, 0x9e00009e, 0x9f00009f,
		0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7,
		0xa80000a8, 0xa90000a9, 0xaa0000aa, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af,
		0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7,
		0xb80000b8, 0xb90000b9, 0xba0000ba, 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xbf0000bf,
		0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7,
		0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf,
		0xd10000d1, 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd70000d7, 0xd80000d8,
		0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdf0000df, 0xe00000e0, 0xe10000e1, 0xe20000e2,
		0xe30000e3, 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7, 0xe80000e8, 0xe90000e9, 0xea0000ea,
		0xeb0000eb, 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf10000f1, 0xf20000f2, 0xf30000f3,
		0xf40000f4, 0xf50000f5, 0xf60000f6, 0xf70000f7, 0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb,
		0xfc0000fc, 0xff0000ff, 0xd000011e, 0xf000011f, 0xdd000130, 0xfd000131, 0xde00015e, 0xfe00015f,
	},
}

// ISO8859_10 is the ISO 8859-10 encoding.
var ISO8859_10 *Charmap = &iso8859_10

var iso8859_10 = Charmap{
	name:          "ISO 8859-10",
	mib:           identifier.ISOLatin6,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc4, 0x84, 0x00}},
		{2, [3]byte{0xc4, 0x92, 0x00}}, {2, [3]byte{0xc4, 0xa2, 0x00}},
		{2, [3]byte{0xc4, 0xaa, 0x00}}, {2, [3]byte{0xc4, 0xa8, 0x00}},
		{2, [3]byte{0xc4, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xc4, 0xbb, 0x00}}, {2, [3]byte{0xc4, 0x90, 0x00}},
		{2, [3]byte{0xc5, 0xa0, 0x00}}, {2, [3]byte{0xc5, 0xa6, 0x00}},
		{2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
		{2, [3]byte{0xc5, 0xaa, 0x00}}, {2, [3]byte{0xc5, 0x8a, 0x00}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc4, 0x85, 0x00}},
		{2, [3]byte{0xc4, 0x93, 0x00}}, {2, [3]byte{0xc4, 0xa3, 0x00}},
		{2, [3]byte{0xc4, 0xab, 0x00}}, {2, [3]byte{0xc4, 0xa9, 0x00}},
		{2, [3]byte{0xc4, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
		{2, [3]byte{0xc4, 0xbc, 0x00}}, {2, [3]byte{0xc4, 0x91, 0x00}},
		{2, [3]byte{0xc5, 0xa1, 0x00}}, {2, [3]byte{0xc5, 0xa7, 0x00}},
		{2, [3]byte{0xc5, 0xbe, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x95}},
		{2, [3]byte{0xc5, 0xab, 0x00}}, {2, [3]byte{0xc5, 0x8b, 0x00}},
		{2, [3]byte{0xc4, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
		{2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}},
		{2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
		{2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc4, 0xae, 0x00}},
		{2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
		{2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
		{2, [3]byte{0xc4, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
		{2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
		{2, [3]byte{0xc3, 0x90, 0x00}}, {2, [3]byte{0xc5, 0x85, 0x00}},
		{2, [3]byte{0xc5, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
		{2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
		{2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc5, 0xa8, 0x00}},
		{2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc5, 0xb2, 0x00}},
		{2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
		{2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}},
		{2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
		{2, [3]byte{0xc4, 0x81, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
		{2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}},
		{2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
		{2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc4, 0xaf, 0x00}},
		{2, [3]byte{0xc4, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
		{2, [3]byte{0xc4, 0x99, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
		{2, [3]byte{0xc4, 0x97, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
		{2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
		{2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc5, 0x86, 0x00}},
		{2, [3]byte{0xc5, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
		{2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
		{2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc5, 0xa9, 0x00}},
		{2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc5, 0xb3, 0x00}},
		{2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
		{2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}},
		{2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc4, 0xb8, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xa00000a0, 0xa70000a7, 0xad0000ad, 0xb00000b0, 0xb70000b7, 0xc10000c1, 0xc20000c2, 0xc30000c3,
		0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc90000c9, 0xcb0000cb, 0xcd0000cd, 0xce0000ce, 0xcf0000cf,
		0xd00000d0, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd80000d8, 0xda0000da, 0xdb0000db,
		0xdc0000dc, 0xdd0000dd, 0xde0000de, 0xdf0000df, 0xe10000e1, 0xe20000e2, 0xe30000e3, 0xe40000e4,
		0xe50000e5, 0xe60000e6, 0xe90000e9, 0xeb0000eb, 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf00000f0,
		0xf30000f3, 0xf40000f4, 0xf50000f5, 0xf60000f6, 0xf80000f8, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc,
		0xfd0000fd, 0xfe0000fe, 0xc0000100, 0xe0000101, 0xa1000104, 0xb1000105, 0xc800010c, 0xe800010d,
		0xa9000110, 0xb9000111, 0xa2000112, 0xb2000113, 0xcc000116, 0xec000117, 0xca000118, 0xea000119,
		0xa3000122, 0xb3000123, 0xa5000128, 0xb5000129, 0xa400012a, 0xb400012b, 0xc700012e, 0xe700012f,
		0xa6000136, 0xb6000137, 0xff000138, 0xa800013b, 0xb800013c, 0xd1000145, 0xf1000146, 0xaf00014a,
		0xbf00014b, 0xd200014c, 0xf200014d, 0xaa000160, 0xba000161, 0xab000166, 0xbb000167, 0xd7000168,
		0xf7000169, 0xae00016a, 0xbe00016b, 0xd9000172, 0xf9000173, 0xac00017d, 0xbc00017e, 0xbd002015,
		0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015,
		0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015,
		0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015,
		0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015,
	},
}

// ISO8859_13 is the ISO 8859-13 encoding.
var ISO8859_13 *Charmap = &iso8859_13

var iso8859_13 = Charmap{
	name:          "ISO 8859-13",
	mib:           identifier.ISO885913,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x9d}},
		{2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
		{2, [3]byte{0xc2, 0xa4, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x9e}},
		{2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
		{2, [3]byte{0xc5, 0x96, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
		{2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
		{2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc3, 0x86, 0x00}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
		{3, [3]byte{0xe2, 0x80, 0x9c}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
		{2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
		{2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}},
		{2, [3]byte{0xc5, 0x97, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
		{2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
		{2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc3, 0xa6, 0x00}},
		{2, [3]byte{0xc4, 0x84, 0x00}}, {2, [3]byte{0xc4, 0xae, 0x00}},
		{2, [3]byte{0xc4, 0x80, 0x00}}, {2, [3]byte{0xc4, 0x86, 0x00}},
		{2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
		{2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc4, 0x92, 0x00}},
		{2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
		{2, [3]byte{0xc5, 0xb9, 0x00}}, {2, [3]byte{0xc4, 0x96, 0x00}},
		{2, [3]byte{0xc4, 0xa2, 0x00}}, {2, [3]byte{0xc4, 0xb6, 0x00}},
		{2, [3]byte{0xc4, 0xaa, 0x00}}, {2, [3]byte{0xc4, 0xbb, 0x00}},
		{2, [3]byte{0xc5, 0xa0, 0x00}}, {2, [3]byte{0xc5, 0x83, 0x00}},
		{2, [3]byte{0xc5, 0x85, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
		{2, [3]byte{0xc5, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
		{2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
		{2, [3]byte{0xc5, 0xb2, 0x00}}, {2, [3]byte{0xc5, 0x81, 0x00}},
		{2, [3]byte{0xc5, 0x9a, 0x00}}, {2, [3]byte{0xc5, 0xaa, 0x00}},
		{2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc5, 0xbb, 0x00}},
		{2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
		{2, [3]byte{0xc4, 0x85, 0x00}}, {2, [3]byte{0xc4, 0xaf, 0x00}},
		{2, [3]byte{0xc4, 0x81, 0x00}}, {2, [3]byte{0xc4, 0x87, 0x00}},
		{2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
		{2, [3]byte{0xc4, 0x99, 0x00}}, {2, [3]byte{0xc4, 0x93, 0x00}},
		{2, [3]byte{0xc4, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
		{2, [3]byte{0xc5, 0xba, 0x00}}, {2, [3]byte{0xc4, 0x97, 0x00}},
		{2, [3]byte{0xc4, 0xa3, 0x00}}, {2, [3]byte{0xc4, 0xb7, 0x00}},
		{2, [3]byte{0xc4, 0xab, 0x00}}, {2, [3]byte{0xc4, 0xbc, 0x00}},
		{2, [3]byte{0xc5, 0xa1, 0x00}}, {2, [3]byte{0xc5, 0x84, 0x00}},
		{2, [3]byte{0xc5, 0x86, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
		{2, [3]byte{0xc5, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
		{2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
		{2, [3]byte{0xc5, 0xb3, 0x00}}, {2, [3]byte{0xc5, 0x82, 0x00}},
		{2, [3]byte{0xc5, 0x9b, 0x00}}, {2, [3]byte{0xc5, 0xab, 0x00}},
		{2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc5, 0xbc, 0x00}},
		{2, [3]byte{0xc5, 0xbe, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x99}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xa00000a0, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa60000a6, 0xa70000a7, 0xa90000a9, 0xab0000ab,
		0xac0000ac, 0xad0000ad, 0xae0000ae, 0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb50000b5,
		0xb60000b6, 0xb70000b7, 0xb90000b9, 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xc40000c4,
		0xc50000c5, 0xaf0000c6, 0xc90000c9, 0xd30000d3, 0xd50000d5, 0xd60000d6, 0xd70000d7, 0xa80000d8,
		0xdc0000dc, 0xdf0000df, 0xe40000e4, 0xe50000e5, 0xbf0000e6, 0xe90000e9, 0xf30000f3, 0xf50000f5,
		0xf60000f6, 0xf70000f7, 0xb80000f8, 0xfc0000fc, 0xc2000100, 0xe2000101, 0xc0000104, 0xe0000105,
		0xc3000106, 0xe3000107, 0xc800010c, 0xe800010d, 0xc7000112, 0xe7000113, 0xcb000116, 0xeb000117,
		0xc6000118, 0xe6000119, 0xcc000122, 0xec000123, 0xce00012a, 0xee00012b, 0xc100012e, 0xe100012f,
		0xcd000136, 0xed000137, 0xcf00013b, 0xef00013c, 0xd9000141, 0xf9000142, 0xd1000143, 0xf1000144,
		0xd2000145, 0xf2000146, 0xd400014c, 0xf400014d, 0xaa000156, 0xba000157, 0xda00015a, 0xfa00015b,
		0xd0000160, 0xf0000161, 0xdb00016a, 0xfb00016b, 0xd8000172, 0xf8000173, 0xca000179, 0xea00017a,
		0xdd00017b, 0xfd00017c, 0xde00017d, 0xfe00017e, 0xff002019, 0xb400201c, 0xa100201d, 0xa500201e,
		0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e,
		0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e,
		0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e,
		0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e,
	},
}

// ISO8859_14 is the ISO 8859-14 encoding.
var ISO8859_14 *Charmap = &iso8859_14

var iso8859_14 = Charmap{
	name:          "ISO 8859-14",
	mib:           identifier.ISO885914,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xe1, 0xb8, 0x82}},
		{3, [3]byte{0xe1, 0xb8, 0x83}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
		{2, [3]byte{0xc4, 0x8a, 0x00}}, {2, [3]byte{0xc4, 0x8b, 0x00}},
		{3, [3]byte{0xe1, 0xb8, 0x8a}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{3, [3]byte{0xe1, 0xba, 0x80}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
		{3, [3]byte{0xe1, 0xba, 0x82}}, {3, [3]byte{0xe1, 0xb8, 0x8b}},
		{3, [3]byte{0xe1, 0xbb, 0xb2}}, {2, [3]byte{0xc2, 0xad, 0x00}},
		{2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc5, 0xb8, 0x00}},
		{3, [3]byte{0xe1, 0xb8, 0x9e}}, {3, [3]byte{0xe1, 0xb8, 0x9f}},
		{2, [3]byte{0xc4, 0xa0, 0x00}}, {2, [3]byte{0xc4, 0xa1, 0x00}},
		{3, [3]byte{0xe1, 0xb9, 0x80}}, {3, [3]byte{0xe1, 0xb9, 0x81}},
		{2, [3]byte{0xc2, 0xb6, 0x00}}, {3, [3]byte{0xe1, 0xb9, 0x96}},
		{3, [3]byte{0xe1, 0xba, 0x81}}, {3, [3]byte{0xe1, 0xb9, 0x97}},
		{3, [3]byte{0xe1, 0xba, 0x83}}, {3, [3]byte{0xe1, 0xb9, 0xa0}},
		{3, [3]byte{0xe1, 0xbb, 0xb3}}, {3, [3]byte{0xe1, 0xba, 0x84}},
		{3, [3]byte{0xe1, 0xba, 0x85}}, {3, [3]byte{0xe1, 0xb9, 0xa1}},
		{2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
		{2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}},
		{2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
		{2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}},
		{2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
		{2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
		{2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
		{2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
		{2, [3]byte{0xc5, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
		{2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
		{2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
		{2, [3]byte{0xc3, 0x96, 0x00}}, {3, [3]byte{0xe1, 0xb9, 0xaa}},
		{2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
		{2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
		{2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}},
		{2, [3]byte{0xc5, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
		{2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
		{2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}},
		{2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
		{2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
		{2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
		{2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
		{2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
		{2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
		{2, [3]byte{0xc5, 0xb5, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}},
		{2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
		{2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
		{2, [3]byte{0xc3, 0xb6, 0x00}}, {3, [3]byte{0xe1, 0xb9, 0xab}},
		{2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
		{2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
		{2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}},
		{2, [3]byte{0xc5, 0xb7, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xa00000a0, 0xa30000a3, 0xa70000a7, 0xa90000a9, 0xad0000ad, 0xae0000ae, 0xb60000b6, 0xc00000c0,
		0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7, 0xc80000c8,
		0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf, 0xd10000d1,
		0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd80000d8, 0xd90000d9, 0xda0000da,
		0xdb0000db, 0xdc0000dc, 0xdd0000dd, 0xdf0000df, 0xe00000e0, 0xe10000e1, 0xe20000e2, 0xe30000e3,
		0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7, 0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb,
		0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf10000f1, 0xf20000f2, 0xf30000f3, 0xf40000f4,
		0xf50000f5, 0xf60000f6, 0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xfd0000fd,
		0xff0000ff, 0xa400010a, 0xa500010b, 0xb2000120, 0xb3000121, 0xd0000174, 0xf0000175, 0xde000176,
		0xfe000177, 0xaf000178, 0xa1001e02, 0xa2001e03, 0xa6001e0a, 0xab001e0b, 0xb0001e1e, 0xb1001e1f,
		0xb4001e40, 0xb5001e41, 0xb7001e56, 0xb9001e57, 0xbb001e60, 0xbf001e61, 0xd7001e6a, 0xf7001e6b,
		0xa8001e80, 0xb8001e81, 0xaa001e82, 0xba001e83, 0xbd001e84, 0xbe001e85, 0xac001ef2, 0xbc001ef3,
		0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3,
		0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3,
		0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3,
		0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3,
	},
}

// ISO8859_15 is the ISO 8859-15 encoding.
var ISO8859_15 *Charmap = &iso8859_15

var iso8859_15 = Charmap{
	name:          "ISO 8859-15",
	mib:           identifier.ISO885915,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
		{2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
		{3, [3]byte{0xe2, 0x82, 0xac}}, {2, [3]byte{0xc2, 0xa5, 0x00}},
		{2, [3]byte{0xc5, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xc5, 0xa1, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
		{2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
		{2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
		{2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
		{2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
		{2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
		{2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}},
		{2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
		{2, [3]byte{0xc5, 0x92, 0x00}}, {2, [3]byte{0xc5, 0x93, 0x00}},
		{2, [3]byte{0xc5, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}},
		{2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
		{2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}},
		{2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
		{2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}},
		{2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
		{2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
		{2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
		{2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
		{2, [3]byte{0xc3, 0x90, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
		{2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
		{2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
		{2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
		{2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
		{2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
		{2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}},
		{2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
		{2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
		{2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}},
		{2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
		{2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
		{2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
		{2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
		{2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
		{2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
		{2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}},
		{2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
		{2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
		{2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
		{2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
		{2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
		{2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}},
		{2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa50000a5, 0xa70000a7, 0xa90000a9, 0xaa0000aa,
		0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af, 0xb00000b0, 0xb10000b1, 0xb20000b2,
		0xb30000b3, 0xb50000b5, 0xb60000b6, 0xb70000b7, 0xb90000b9, 0xba0000ba, 0xbb0000bb, 0xbf0000bf,
		0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7,
		0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf,
		0xd00000d0, 0xd10000d1, 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd70000d7,
		0xd80000d8, 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdd0000dd, 0xde0000de, 0xdf0000df,
		0xe00000e0, 0xe10000e1, 0xe20000e2, 0xe30000e3, 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7,
		0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef,
		0xf00000f0, 0xf10000f1, 0xf20000f2, 0xf30000f3, 0xf40000f4, 0xf50000f5, 0xf60000f6, 0xf70000f7,
		0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xfd0000fd, 0xfe0000fe, 0xff0000ff,
		0xbc000152, 0xbd000153, 0xa6000160, 0xa8000161, 0xbe000178, 0xb400017d, 0xb800017e, 0xa40020ac,
		0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac,
		0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac,
		0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac,
		0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac,
	},
}

// ISO8859_16 is the ISO 8859-16 encoding.
var ISO8859_16 *Charmap = &iso8859_16

var iso8859_16 = Charmap{
	name:          "ISO 8859-16",
	mib:           identifier.ISO885916,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc4, 0x84, 0x00}},
		{2, [3]byte{0xc4, 0x85, 0x00}}, {2, [3]byte{0xc5, 0x81, 0x00}},
		{3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xe2, 0x80, 0x9e}},
		{2, [3]byte{0xc5, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xc5, 0xa1, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
		{2, [3]byte{0xc8, 0x98, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
		{2, [3]byte{0xc5, 0xb9, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
		{2, [3]byte{0xc5, 0xba, 0x00}}, {2, [3]byte{0xc5, 0xbb, 0x00}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc5, 0x82, 0x00}},
		{2, [3]byte{0xc5, 0xbd, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x9d}},
		{2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
		{2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xc4, 0x8d, 0x00}},
		{2, [3]byte{0xc8, 0x99, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
		{2, [3]byte{0xc5, 0x92, 0x00}}, {2, [3]byte{0xc5, 0x93, 0x00}},
		{2, [3]byte{0xc5, 0xb8, 0x00}}, {2, [3]byte{0xc5, 0xbc, 0x00}},
		{2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
		{2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc4, 0x82, 0x00}},
		{2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc4, 0x86, 0x00}},
		{2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}},
		{2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
		{2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
		{2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
		{2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
		{2, [3]byte{0xc4, 0x90, 0x00}}, {2, [3]byte{0xc5, 0x83, 0x00}},
		{2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
		{2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc5, 0x90, 0x00}},
		{2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc5, 0x9a, 0x00}},
		{2, [3]byte{0xc5, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
		{2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
		{2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc4, 0x98, 0x00}},
		{2, [3]byte{0xc8, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
		{2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
		{2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc4, 0x83, 0x00}},
		{2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0x87, 0x00}},
		{2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
		{2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
		{2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
		{2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
		{2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
		{2, [3]byte{0xc4, 0x91, 0x00}}, {2, [3]byte{0xc5, 0x84, 0x00}},
		{2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
		{2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc5, 0x91, 0x00}},
		{2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc5, 0x9b, 0x00}},
		{2, [3]byte{0xc5, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
		{2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
		{2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc4, 0x99, 0x00}},
		{2, [3]byte{0xc8, 0x9b, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xa00000a0, 0xa70000a7, 0xa90000a9, 0xab0000ab, 0xad0000ad, 0xb00000b0, 0xb10000b1, 0xb60000b6,
		0xb70000b7, 0xbb0000bb, 0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc40000c4, 0xc60000c6, 0xc70000c7,
		0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf,
		0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd60000d6, 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc,
		0xdf0000df, 0xe00000e0, 0xe10000e1, 0xe20000e2, 0xe40000e4, 0xe60000e6, 0xe70000e7, 0xe80000e8,
		0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf20000f2,
		0xf30000f3, 0xf40000f4, 0xf60000f6, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xff0000ff,
		0xc3000102, 0xe3000103, 0xa1000104, 0xa2000105, 0xc5000106, 0xe5000107, 0xb200010c, 0xb900010d,
		0xd0000110, 0xf0000111, 0xdd000118, 0xfd000119, 0xa3000141, 0xb3000142, 0xd1000143, 0xf1000144,
		0xd5000150, 0xf5000151, 0xbc000152, 0xbd000153, 0xd700015a, 0xf700015b, 0xa6000160, 0xa8000161,
		0xd8000170, 0xf8000171, 0xbe000178, 0xac000179, 0xae00017a, 0xaf00017b, 0xbf00017c, 0xb400017d,
		0xb800017e, 0xaa000218, 0xba000219, 0xde00021a, 0xfe00021b, 0xb500201d, 0xa500201e, 0xa40020ac,
		0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac,
		0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac,
		0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac,
		0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac,
	},
}

// KOI8R is the KOI8-R encoding.
var KOI8R *Charmap = &koi8R

var koi8R = Charmap{
	name:          "KOI8-R",
	mib:           identifier.KOI8R,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0x82}},
		{3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x94, 0x90}},
		{3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0x98}},
		{3, [3]byte{0xe2, 0x94, 0x9c}}, {3, [3]byte{0xe2, 0x94, 0xa4}},
		{3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0xb4}},
		{3, [3]byte{0xe2, 0x94, 0xbc}}, {3, [3]byte{0xe2, 0x96, 0x80}},
		{3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x88}},
		{3, [3]byte{0xe2, 0x96, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x90}},
		{3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}},
		{3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x8c, 0xa0}},
		{3, [3]byte{0xe2, 0x96, 0xa0}}, {3, [3]byte{0xe2, 0x88, 0x99}},
		{3, [3]byte{0xe2, 0x88, 0x9a}}, {3, [3]byte{0xe2, 0x89, 0x88}},
		{3, [3]byte{0xe2, 0x89, 0xa4}}, {3, [3]byte{0xe2, 0x89, 0xa5}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x8c, 0xa1}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb2, 0x00}},
		{2, [3]byte{0xc2, 0xb7, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
		{3, [3]byte{0xe2, 0x95, 0x90}}, {3, [3]byte{0xe2, 0x95, 0x91}},
		{3, [3]byte{0xe2, 0x95, 0x92}}, {2, [3]byte{0xd1, 0x91, 0x00}},
		{3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0x94}},
		{3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0x96}},
		{3, [3]byte{0xe2, 0x95, 0x97}}, {3, [3]byte{0xe2, 0x95, 0x98}},
		{3, [3]byte{0xe2, 0x95, 0x99}}, {3, [3]byte{0xe2, 0x95, 0x9a}},
		{3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x95, 0x9c}},
		{3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9e}},
		{3, [3]byte{0xe2, 0x95, 0x9f}}, {3, [3]byte{0xe2, 0x95, 0xa0}},
		{3, [3]byte{0xe2, 0x95, 0xa1}}, {2, [3]byte{0xd0, 0x81, 0x00}},
		{3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0xa3}},
		{3, [3]byte{0xe2, 0x95, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa5}},
		{3, [3]byte{0xe2, 0x95, 0xa6}}, {3, [3]byte{0xe2, 0x95, 0xa7}},
		{3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa9}},
		{3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x95, 0xab}},
		{3, [3]byte{0xe2, 0x95, 0xac}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
		{2, [3]byte{0xd1, 0x8e, 0x00}}, {2, [3]byte{0xd0, 0xb0, 0x00}},
		{2, [3]byte{0xd0, 0xb1, 0x00}}, {2, [3]byte{0xd1, 0x86, 0x00}},
		{2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0xb5, 0x00}},
		{2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd0, 0xb3, 0x00}},
		{2, [3]byte{0xd1, 0x85, 0x00}}, {2, [3]byte{0xd0, 0xb8, 0x00}},
		{2, [3]byte{0xd0, 0xb9, 0x00}}, {2, [3]byte{0xd0, 0xba, 0x00}},
		{2, [3]byte{0xd0, 0xbb, 0x00}}, {2, [3]byte{0xd0, 0xbc, 0x00}},
		{2, [3]byte{0xd0, 0xbd, 0x00}}, {2, [3]byte{0xd0, 0xbe, 0x00}},
		{2, [3]byte{0xd0, 0xbf, 0x00}}, {2, [3]byte{0xd1, 0x8f, 0x00}},
		{2, [3]byte{0xd1, 0x80, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}},
		{2, [3]byte{0xd1, 0x82, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}},
		{2, [3]byte{0xd0, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0xb2, 0x00}},
		{2, [3]byte{0xd1, 0x8c, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}},
		{2, [3]byte{0xd0, 0xb7, 0x00}}, {2, [3]byte{0xd1, 0x88, 0x00}},
		{2, [3]byte{0xd1, 0x8d, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}},
		{2, [3]byte{0xd1, 0x87, 0x00}}, {2, [3]byte{0xd1, 0x8a, 0x00}},
		{2, [3]byte{0xd0, 0xae, 0x00}}, {2, [3]byte{0xd0, 0x90, 0x00}},
		{2, [3]byte{0xd0, 0x91, 0x00}}, {2, [3]byte{0xd0, 0xa6, 0x00}},
		{2, [3]byte{0xd0, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}},
		{2, [3]byte{0xd0, 0xa4, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}},
		{2, [3]byte{0xd0, 0xa5, 0x00}}, {2, [3]byte{0xd0, 0x98, 0x00}},
		{2, [3]byte{0xd0, 0x99, 0x00}}, {2, [3]byte{0xd0, 0x9a, 0x00}},
		{2, [3]byte{0xd0, 0x9b, 0x00}}, {2, [3]byte{0xd0, 0x9c, 0x00}},
		{2, [3]byte{0xd0, 0x9d, 0x00}}, {2, [3]byte{0xd0, 0x9e, 0x00}},
		{2, [3]byte{0xd0, 0x9f, 0x00}}, {2, [3]byte{0xd0, 0xaf, 0x00}},
		{2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0xa1, 0x00}},
		{2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd0, 0xa3, 0x00}},
		{2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x92, 0x00}},
		{2, [3]byte{0xd0, 0xac, 0x00}}, {2, [3]byte{0xd0, 0xab, 0x00}},
		{2, [3]byte{0xd0, 0x97, 0x00}}, {2, [3]byte{0xd0, 0xa8, 0x00}},
		{2, [3]byte{0xd0, 0xad, 0x00}}, {2, [3]byte{0xd0, 0xa9, 0x00}},
		{2, [3]byte{0xd0, 0xa7, 0x00}}, {2, [3]byte{0xd0, 0xaa, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0x9a0000a0, 0xbf0000a9, 0x9c0000b0, 0x9d0000b2, 0x9e0000b7, 0x9f0000f7, 0xb3000401, 0xe1000410,
		0xe2000411, 0xf7000412, 0xe7000413, 0xe4000414, 0xe5000415, 0xf6000416, 0xfa000417, 0xe9000418,
		0xea000419, 0xeb00041a, 0xec00041b, 0xed00041c, 0xee00041d, 0xef00041e, 0xf000041f, 0xf2000420,
		0xf3000421, 0xf4000422, 0xf5000423, 0xe6000424, 0xe8000425, 0xe3000426, 0xfe000427, 0xfb000428,
		0xfd000429, 0xff00042a, 0xf900042b, 0xf800042c, 0xfc00042d, 0xe000042e, 0xf100042f, 0xc1000430,
		0xc2000431, 0xd7000432, 0xc7000433, 0xc4000434, 0xc5000435, 0xd6000436, 0xda000437, 0xc9000438,
		0xca000439, 0xcb00043a, 0xcc00043b, 0xcd00043c, 0xce00043d, 0xcf00043e, 0xd000043f, 0xd2000440,
		0xd3000441, 0xd4000442, 0xd5000443, 0xc6000444, 0xc8000445, 0xc3000446, 0xde000447, 0xdb000448,
		0xdd000449, 0xdf00044a, 0xd900044b, 0xd800044c, 0xdc00044d, 0xc000044e, 0xd100044f, 0xa3000451,
		0x95002219, 0x9600221a, 0x97002248, 0x98002264, 0x99002265, 0x93002320, 0x9b002321, 0x80002500,
		0x81002502, 0x8200250c, 0x83002510, 0x84002514, 0x85002518, 0x8600251c, 0x87002524, 0x8800252c,
		0x89002534, 0x8a00253c, 0xa0002550, 0xa1002551, 0xa2002552, 0xa4002553, 0xa5002554, 0xa6002555,
		0xa7002556, 0xa8002557, 0xa9002558, 0xaa002559, 0xab00255a, 0xac00255b, 0xad00255c, 0xae00255d,
		0xaf00255e, 0xb000255f, 0xb1002560, 0xb2002561, 0xb4002562, 0xb5002563, 0xb6002564, 0xb7002565,
		0xb8002566, 0xb9002567, 0xba002568, 0xbb002569, 0xbc00256a, 0xbd00256b, 0xbe00256c, 0x8b002580,
		0x8c002584, 0x8d002588, 0x8e00258c, 0x8f002590, 0x90002591, 0x91002592, 0x92002593, 0x940025a0,
	},
}

// KOI8U is the KOI8-U encoding.
var KOI8U *Charmap = &koi8U

var koi8U = Charmap{
	name:          "KOI8-U",
	mib:           identifier.KOI8U,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0x82}},
		{3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x94, 0x90}},
		{3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0x98}},
		{3, [3]byte{0xe2, 0x94, 0x9c}}, {3, [3]byte{0xe2, 0x94, 0xa4}},
		{3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0xb4}},
		{3, [3]byte{0xe2, 0x94, 0xbc}}, {3, [3]byte{0xe2, 0x96, 0x80}},
		{3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x88}},
		{3, [3]byte{0xe2, 0x96, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x90}},
		{3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}},
		{3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x8c, 0xa0}},
		{3, [3]byte{0xe2, 0x96, 0xa0}}, {3, [3]byte{0xe2, 0x88, 0x99}},
		{3, [3]byte{0xe2, 0x88, 0x9a}}, {3, [3]byte{0xe2, 0x89, 0x88}},
		{3, [3]byte{0xe2, 0x89, 0xa4}}, {3, [3]byte{0xe2, 0x89, 0xa5}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x8c, 0xa1}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb2, 0x00}},
		{2, [3]byte{0xc2, 0xb7, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
		{3, [3]byte{0xe2, 0x95, 0x90}}, {3, [3]byte{0xe2, 0x95, 0x91}},
		{3, [3]byte{0xe2, 0x95, 0x92}}, {2, [3]byte{0xd1, 0x91, 0x00}},
		{2, [3]byte{0xd1, 0x94, 0x00}}, {3, [3]byte{0xe2, 0x95, 0x94}},
		{2, [3]byte{0xd1, 0x96, 0x00}}, {2, [3]byte{0xd1, 0x97, 0x00}},
		{3, [3]byte{0xe2, 0x95, 0x97}}, {3, [3]byte{0xe2, 0x95, 0x98}},
		{3, [3]byte{0xe2, 0x95, 0x99}}, {3, [3]byte{0xe2, 0x95, 0x9a}},
		{3, [3]byte{0xe2, 0x95, 0x9b}}, {2, [3]byte{0xd2, 0x91, 0x00}},
		{2, [3]byte{0xd1, 0x9e, 0x00}}, {3, [3]byte{0xe2, 0x95, 0x9e}},
		{3, [3]byte{0xe2, 0x95, 0x9f}}, {3, [3]byte{0xe2, 0x95, 0xa0}},
		{3, [3]byte{0xe2, 0x95, 0xa1}}, {2, [3]byte{0xd0, 0x81, 0x00}},
		{2, [3]byte{0xd0, 0x84, 0x00}}, {3, [3]byte{0xe2, 0x95, 0xa3}},
		{2, [3]byte{0xd0, 0x86, 0x00}}, {2, [3]byte{0xd0, 0x87, 0x00}},
		{3, [3]byte{0xe2, 0x95, 0xa6}}, {3, [3]byte{0xe2, 0x95, 0xa7}},
		{3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa9}},
		{3, [3]byte{0xe2, 0x95, 0xaa}}, {2, [3]byte{0xd2, 0x90, 0x00}},
		{2, [3]byte{0xd0, 0x8e, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
		{2, [3]byte{0xd1, 0x8e, 0x00}}, {2, [3]byte{0xd0, 0xb0, 0x00}},
		{2, [3]byte{0xd0, 0xb1, 0x00}}, {2, [3]byte{0xd1, 0x86, 0x00}},
		{2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0xb5, 0x00}},
		{2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd0, 0xb3, 0x00}},
		{2, [3]byte{0xd1, 0x85, 0x00}}, {2, [3]byte{0xd0, 0xb8, 0x00}},
		{2, [3]byte{0xd0, 0xb9, 0x00}}, {2, [3]byte{0xd0, 0xba, 0x00}},
		{2, [3]byte{0xd0, 0xbb, 0x00}}, {2, [3]byte{0xd0, 0xbc, 0x00}},
		{2, [3]byte{0xd0, 0xbd, 0x00}}, {2, [3]byte{0xd0, 0xbe, 0x00}},
		{2, [3]byte{0xd0, 0xbf, 0x00}}, {2, [3]byte{0xd1, 0x8f, 0x00}},
		{2, [3]byte{0xd1, 0x80, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}},
		{2, [3]byte{0xd1, 0x82, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}},
		{2, [3]byte{0xd0, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0xb2, 0x00}},
		{2, [3]byte{0xd1, 0x8c, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}},
		{2, [3]byte{0xd0, 0xb7, 0x00}}, {2, [3]byte{0xd1, 0x88, 0x00}},
		{2, [3]byte{0xd1, 0x8d, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}},
		{2, [3]byte{0xd1, 0x87, 0x00}}, {2, [3]byte{0xd1, 0x8a, 0x00}},
		{2, [3]byte{0xd0, 0xae, 0x00}}, {2, [3]byte{0xd0, 0x90, 0x00}},
		{2, [3]byte{0xd0, 0x91, 0x00}}, {2, [3]byte{0xd0, 0xa6, 0x00}},
		{2, [3]byte{0xd0, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}},
		{2, [3]byte{0xd0, 0xa4, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}},
		{2, [3]byte{0xd0, 0xa5, 0x00}}, {2, [3]byte{0xd0, 0x98, 0x00}},
		{2, [3]byte{0xd0, 0x99, 0x00}}, {2, [3]byte{0xd0, 0x9a, 0x00}},
		{2, [3]byte{0xd0, 0x9b, 0x00}}, {2, [3]byte{0xd0, 0x9c, 0x00}},
		{2, [3]byte{0xd0, 0x9d, 0x00}}, {2, [3]byte{0xd0, 0x9e, 0x00}},
		{2, [3]byte{0xd0, 0x9f, 0x00}}, {2, [3]byte{0xd0, 0xaf, 0x00}},
		{2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0xa1, 0x00}},
		{2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd0, 0xa3, 0x00}},
		{2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x92, 0x00}},
		{2, [3]byte{0xd0, 0xac, 0x00}}, {2, [3]byte{0xd0, 0xab, 0x00}},
		{2, [3]byte{0xd0, 0x97, 0x00}}, {2, [3]byte{0xd0, 0xa8, 0x00}},
		{2, [3]byte{0xd0, 0xad, 0x00}}, {2, [3]byte{0xd0, 0xa9, 0x00}},
		{2, [3]byte{0xd0, 0xa7, 0x00}}, {2, [3]byte{0xd0, 0xaa, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0x9a0000a0, 0xbf0000a9, 0x9c0000b0, 0x9d0000b2, 0x9e0000b7, 0x9f0000f7, 0xb3000401, 0xb4000404,
		0xb6000406, 0xb7000407, 0xbe00040e, 0xe1000410, 0xe2000411, 0xf7000412, 0xe7000413, 0xe4000414,
		0xe5000415, 0xf6000416, 0xfa000417, 0xe9000418, 0xea000419, 0xeb00041a, 0xec00041b, 0xed00041c,
		0xee00041d, 0xef00041e, 0xf000041f, 0xf2000420, 0xf3000421, 0xf4000422, 0xf5000423, 0xe6000424,
		0xe8000425, 0xe3000426, 0xfe000427, 0xfb000428, 0xfd000429, 0xff00042a, 0xf900042b, 0xf800042c,
		0xfc00042d, 0xe000042e, 0xf100042f, 0xc1000430, 0xc2000431, 0xd7000432, 0xc7000433, 0xc4000434,
		0xc5000435, 0xd6000436, 0xda000437, 0xc9000438, 0xca000439, 0xcb00043a, 0xcc00043b, 0xcd00043c,
		0xce00043d, 0xcf00043e, 0xd000043f, 0xd2000440, 0xd3000441, 0xd4000442, 0xd5000443, 0xc6000444,
		0xc8000445, 0xc3000446, 0xde000447, 0xdb000448, 0xdd000449, 0xdf00044a, 0xd900044b, 0xd800044c,
		0xdc00044d, 0xc000044e, 0xd100044f, 0xa3000451, 0xa4000454, 0xa6000456, 0xa7000457, 0xae00045e,
		0xbd000490, 0xad000491, 0x95002219, 0x9600221a, 0x97002248, 0x98002264, 0x99002265, 0x93002320,
		0x9b002321, 0x80002500, 0x81002502, 0x8200250c, 0x83002510, 0x84002514, 0x85002518, 0x8600251c,
		0x87002524, 0x8800252c, 0x89002534, 0x8a00253c, 0xa0002550, 0xa1002551, 0xa2002552, 0xa5002554,
		0xa8002557, 0xa9002558, 0xaa002559, 0xab00255a, 0xac00255b, 0xaf00255e, 0xb000255f, 0xb1002560,
		0xb2002561, 0xb5002563, 0xb8002566, 0xb9002567, 0xba002568, 0xbb002569, 0xbc00256a, 0x8b002580,
		0x8c002584, 0x8d002588, 0x8e00258c, 0x8f002590, 0x90002591, 0x91002592, 0x92002593, 0x940025a0,
	},
}

// Macintosh is the Macintosh encoding.
var Macintosh *Charmap = &macintosh

var macintosh = Charmap{
	name:          "Macintosh",
	mib:           identifier.Macintosh,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
		{2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
		{2, [3]byte{0xc3, 0x91, 0x00}}, {2, [3]byte{0xc3, 0x96, 0x00}},
		{2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
		{2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}},
		{2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}},
		{2, [3]byte{0xc3, 0xa5, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
		{2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa8, 0x00}},
		{2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
		{2, [3]byte{0xc3, 0xad, 0x00}}, {2, [3]byte{0xc3, 0xac, 0x00}},
		{2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
		{2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
		{2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}},
		{2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
		{2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
		{2, [3]byte{0xc3, 0xbb, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}},
		{3, [3]byte{0xe2, 0x80, 0xa0}}, {2, [3]byte{0xc2, 0xb0, 0x00}},
		{2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
		{2, [3]byte{0xc2, 0xa7, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xa2}},
		{2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
		{2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
		{3, [3]byte{0xe2, 0x84, 0xa2}}, {2, [3]byte{0xc2, 0xb4, 0x00}},
		{2, [3]byte{0xc2, 0xa8, 0x00}}, {3, [3]byte{0xe2, 0x89, 0xa0}},
		{2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x98, 0x00}},
		{3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{3, [3]byte{0xe2, 0x89, 0xa4}}, {3, [3]byte{0xe2, 0x89, 0xa5}},
		{2, [3]byte{0xc2, 0xa5, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
		{3, [3]byte{0xe2, 0x88, 0x82}}, {3, [3]byte{0xe2, 0x88, 0x91}},
		{3, [3]byte{0xe2, 0x88, 0x8f}}, {2, [3]byte{0xcf, 0x80, 0x00}},
		{3, [3]byte{0xe2, 0x88, 0xab}}, {2, [3]byte{0xc2, 0xaa, 0x00}},
		{2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xce, 0xa9, 0x00}},
		{2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xb8, 0x00}},
		{2, [3]byte{0xc2, 0xbf, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
		{2, [3]byte{0xc2, 0xac, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}},
		{2, [3]byte{0xc6, 0x92, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}},
		{3, [3]byte{0xe2, 0x88, 0x86}}, {2, [3]byte{0xc2, 0xab, 0x00}},
		{2, [3]byte{0xc2, 0xbb, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xa6}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0x80, 0x00}},
		{2, [3]byte{0xc3, 0x83, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
		{2, [3]byte{0xc5, 0x92, 0x00}}, {2, [3]byte{0xc5, 0x93, 0x00}},
		{3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}},
		{3, [3]byte{0xe2, 0x80, 0x9c}}, {3, [3]byte{0xe2, 0x80, 0x9d}},
		{3, [3]byte{0xe2, 0x80, 0x98}}, {3, [3]byte{0xe2, 0x80, 0x99}},
		{2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x97, 0x8a}},
		{2, [3]byte{0xc3, 0xbf, 0x00}}, {2, [3]byte{0xc5, 0xb8, 0x00}},
		{3, [3]byte{0xe2, 0x81, 0x84}}, {3, [3]byte{0xe2, 0x82, 0xac}},
		{3, [3]byte{0xe2, 0x80, 0xb9}}, {3, [3]byte{0xe2, 0x80, 0xba}},
		{3, [3]byte{0xef, 0xac, 0x81}}, {3, [3]byte{0xef, 0xac, 0x82}},
		{3, [3]byte{0xe2, 0x80, 0xa1}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
		{3, [3]byte{0xe2, 0x80, 0x9a}}, {3, [3]byte{0xe2, 0x80, 0x9e}},
		{3, [3]byte{0xe2, 0x80, 0xb0}}, {2, [3]byte{0xc3, 0x82, 0x00}},
		{2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
		{2, [3]byte{0xc3, 0x8b, 0x00}}, {2, [3]byte{0xc3, 0x88, 0x00}},
		{2, [3]byte{0xc3, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0x8e, 0x00}},
		{2, [3]byte{0xc3, 0x8f, 0x00}}, {2, [3]byte{0xc3, 0x8c, 0x00}},
		{2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x94, 0x00}},
		{3, [3]byte{0xef, 0xa3, 0xbf}}, {2, [3]byte{0xc3, 0x92, 0x00}},
		{2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
		{2, [3]byte{0xc3, 0x99, 0x00}}, {2, [3]byte{0xc4, 0xb1, 0x00}},
		{2, [3]byte{0xcb, 0x86, 0x00}}, {2, [3]byte{0xcb, 0x9c, 0x00}},
		{2, [3]byte{0xc2, 0xaf, 0x00}}, {2, [3]byte{0xcb, 0x98, 0x00}},
		{2, [3]byte{0xcb, 0x99, 0x00}}, {2, [3]byte{0xcb, 0x9a, 0x00}},
		{2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xcb, 0x9d, 0x00}},
		{2, [3]byte{0xcb, 0x9b, 0x00}}, {2, [3]byte{0xcb, 0x87, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xca0000a0, 0xc10000a1, 0xa20000a2, 0xa30000a3, 0xb40000a5, 0xa40000a7, 0xac0000a8, 0xa90000a9,
		0xbb0000aa, 0xc70000ab, 0xc20000ac, 0xa80000ae, 0xf80000af, 0xa10000b0, 0xb10000b1, 0xab0000b4,
		0xb50000b5, 0xa60000b6, 0xe10000b7, 0xfc0000b8, 0xbc0000ba, 0xc80000bb, 0xc00000bf, 0xcb0000c0,
		0xe70000c1, 0xe50000c2, 0xcc0000c3, 0x800000c4, 0x810000c5, 0xae0000c6, 0x820000c7, 0xe90000c8,
		0x830000c9, 0xe60000ca, 0xe80000cb, 0xed0000cc, 0xea0000cd, 0xeb0000ce, 0xec0000cf, 0x840000d1,
		0xf10000d2, 0xee0000d3, 0xef0000d4, 0xcd0000d5, 0x850000d6, 0xaf0000d8, 0xf40000d9, 0xf20000da,
		0xf30000db, 0x860000dc, 0xa70000df, 0x880000e0, 0x870000e1, 0x890000e2, 0x8b0000e3, 0x8a0000e4,
		0x8c0000e5, 0xbe0000e6, 0x8d0000e7, 0x8f0000e8, 0x8e0000e9, 0x900000ea, 0x910000eb, 0x930000ec,
		0x920000ed, 0x940000ee, 0x950000ef, 0x960000f1, 0x980000f2, 0x970000f3, 0x990000f4, 0x9b0000f5,
		0x9a0000f6, 0xd60000f7, 0xbf0000f8, 0x9d0000f9, 0x9c0000fa, 0x9e0000fb, 0x9f0000fc, 0xd80000ff,
		0xf5000131, 0xce000152, 0xcf000153, 0xd9000178, 0xc4000192, 0xf60002c6, 0xff0002c7, 0xf90002d8,
		0xfa0002d9, 0xfb0002da, 0xfe0002db, 0xf70002dc, 0xfd0002dd, 0xbd0003a9, 0xb90003c0, 0xd0002013,
		0xd1002014, 0xd4002018, 0xd5002019, 0xe200201a, 0xd200201c, 0xd300201d, 0xe300201e, 0xa0002020,
		0xe0002021, 0xa5002022, 0xc9002026, 0xe4002030, 0xdc002039, 0xdd00203a, 0xda002044, 0xdb0020ac,
		0xaa002122, 0xb6002202, 0xc6002206, 0xb800220f, 0xb7002211, 0xc300221a, 0xb000221e, 0xba00222b,
		0xc5002248, 0xad002260, 0xb2002264, 0xb3002265, 0xd70025ca, 0xf000f8ff, 0xde00fb01, 0xdf00fb02,
	},
}

// MacintoshCyrillic is the Macintosh Cyrillic encoding.
var MacintoshCyrillic *Charmap = &macintoshCyrillic

var macintoshCyrillic = Charmap{
	name:          "Macintosh Cyrillic",
	mib:           identifier.MacintoshCyrillic,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{2, [3]byte{0xd0, 0x90, 0x00}}, {2, [3]byte{0xd0, 0x91, 0x00}},
		{2, [3]byte{0xd0, 0x92, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}},
		{2, [3]byte{0xd0, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}},
		{2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x97, 0x00}},
		{2, [3]byte{0xd0, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x99, 0x00}},
		{2, [3]byte{0xd0, 0x9a, 0x00}}, {2, [3]byte{0xd0, 0x9b, 0x00}},
		{2, [3]byte{0xd0, 0x9c, 0x00}}, {2, [3]byte{0xd0, 0x9d, 0x00}},
		{2, [3]byte{0xd0, 0x9e, 0x00}}, {2, [3]byte{0xd0, 0x9f, 0x00}},
		{2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0xa1, 0x00}},
		{2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd0, 0xa3, 0x00}},
		{2, [3]byte{0xd0, 0xa4, 0x00}}, {2, [3]byte{0xd0, 0xa5, 0x00}},
		{2, [3]byte{0xd0, 0xa6, 0x00}}, {2, [3]byte{0xd0, 0xa7, 0x00}},
		{2, [3]byte{0xd0, 0xa8, 0x00}}, {2, [3]byte{0xd0, 0xa9, 0x00}},
		{2, [3]byte{0xd0, 0xaa, 0x00}}, {2, [3]byte{0xd0, 0xab, 0x00}},
		{2, [3]byte{0xd0, 0xac, 0x00}}, {2, [3]byte{0xd0, 0xad, 0x00}},
		{2, [3]byte{0xd0, 0xae, 0x00}}, {2, [3]byte{0xd0, 0xaf, 0x00}},
		{3, [3]byte{0xe2, 0x80, 0xa0}}, {2, [3]byte{0xc2, 0xb0, 0x00}},
		{2, [3]byte{0xd2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
		{2, [3]byte{0xc2, 0xa7, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xa2}},
		{2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0x86, 0x00}},
		{2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
		{3, [3]byte{0xe2, 0x84, 0xa2}}, {2, [3]byte{0xd0, 0x82, 0x00}},
		{2, [3]byte{0xd1, 0x92, 0x00}}, {3, [3]byte{0xe2, 0x89, 0xa0}},
		{2, [3]byte{0xd0, 0x83, 0x00}}, {2, [3]byte{0xd1, 0x93, 0x00}},
		{3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{3, [3]byte{0xe2, 0x89, 0xa4}}, {3, [3]byte{0xe2, 0x89, 0xa5}},
		{2, [3]byte{0xd1, 0x96, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
		{2, [3]byte{0xd2, 0x91, 0x00}}, {2, [3]byte{0xd0, 0x88, 0x00}},
		{2, [3]byte{0xd0, 0x84, 0x00}}, {2, [3]byte{0xd1, 0x94, 0x00}},
		{2, [3]byte{0xd0, 0x87, 0x00}}, {2, [3]byte{0xd1, 0x97, 0x00}},
		{2, [3]byte{0xd0, 0x89, 0x00}}, {2, [3]byte{0xd1, 0x99, 0x00}},
		{2, [3]byte{0xd0, 0x8a, 0x00}}, {2, [3]byte{0xd1, 0x9a, 0x00}},
		{2, [3]byte{0xd1, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x85, 0x00}},
		{2, [3]byte{0xc2, 0xac, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}},
		{2, [3]byte{0xc6, 0x92, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}},
		{3, [3]byte{0xe2, 0x88, 0x86}}, {2, [3]byte{0xc2, 0xab, 0x00}},
		{2, [3]byte{0xc2, 0xbb, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xa6}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0x8b, 0x00}},
		{2, [3]byte{0xd1, 0x9b, 0x00}}, {2, [3]byte{0xd0, 0x8c, 0x00}},
		{2, [3]byte{0xd1, 0x9c, 0x00}}, {2, [3]byte{0xd1, 0x95, 0x00}},
		{3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}},
		{3, [3]byte{0xe2, 0x80, 0x9c}}, {3, [3]byte{0xe2, 0x80, 0x9d}},
		{3, [3]byte{0xe2, 0x80, 0x98}}, {3, [3]byte{0xe2, 0x80, 0x99}},
		{2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x9e}},
		{2, [3]byte{0xd0, 0x8e, 0x00}}, {2, [3]byte{0xd1, 0x9e, 0x00}},
		{2, [3]byte{0xd0, 0x8f, 0x00}}, {2, [3]byte{0xd1, 0x9f, 0x00}},
		{3, [3]byte{0xe2, 0x84, 0x96}}, {2, [3]byte{0xd0, 0x81, 0x00}},
		{2, [3]byte{0xd1, 0x91, 0x00}}, {2, [3]byte{0xd1, 0x8f, 0x00}},
		{2, [3]byte{0xd0, 0xb0, 0x00}}, {2, [3]byte{0xd0, 0xb1, 0x00}},
		{2, [3]byte{0xd0, 0xb2, 0x00}}, {2, [3]byte{0xd0, 0xb3, 0x00}},
		{2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0xb5, 0x00}},
		{2, [3]byte{0xd0, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0xb7, 0x00}},
		{2, [3]byte{0xd0, 0xb8, 0x00}}, {2, [3]byte{0xd0, 0xb9, 0x00}},
		{2, [3]byte{0xd0, 0xba, 0x00}}, {2, [3]byte{0xd0, 0xbb, 0x00}},
		{2, [3]byte{0xd0, 0xbc, 0x00}}, {2, [3]byte{0xd0, 0xbd, 0x00}},
		{2, [3]byte{0xd0, 0xbe, 0x00}}, {2, [3]byte{0xd0, 0xbf, 0x00}},
		{2, [3]byte{0xd1, 0x80, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}},
		{2, [3]byte{0xd1, 0x82, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}},
		{2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd1, 0x85, 0x00}},
		{2, [3]byte{0xd1, 0x86, 0x00}}, {2, [3]byte{0xd1, 0x87, 0x00}},
		{2, [3]byte{0xd1, 0x88, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}},
		{2, [3]byte{0xd1, 0x8a, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}},
		{2, [3]byte{0xd1, 0x8c, 0x00}}, {2, [3]byte{0xd1, 0x8d, 0x00}},
		{2, [3]byte{0xd1, 0x8e, 0x00}}, {3, [3]byte{0xe2, 0x82, 0xac}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xca0000a0, 0xa30000a3, 0xa40000a7, 0xa90000a9, 0xc70000ab, 0xc20000ac, 0xa80000ae, 0xa10000b0,
		0xb10000b1, 0xb50000b5, 0xa60000b6, 0xc80000bb, 0xd60000f7, 0xc4000192, 0xdd000401, 0xab000402,
		0xae000403, 0xb8000404, 0xc1000405, 0xa7000406, 0xba000407, 0xb7000408, 0xbc000409, 0xbe00040a,
		0xcb00040b, 0xcd00040c, 0xd800040e, 0xda00040f, 0x80000410, 0x81000411, 0x82000412, 0x83000413,
		0x84000414, 0x85000415, 0x86000416, 0x87000417, 0x88000418, 0x89000419, 0x8a00041a, 0x8b00041b,
		0x8c00041c, 0x8d00041d, 0x8e00041e, 0x8f00041f, 0x90000420, 0x91000421, 0x92000422, 0x93000423,
		0x94000424, 0x95000425, 0x96000426, 0x97000427, 0x98000428, 0x99000429, 0x9a00042a, 0x9b00042b,
		0x9c00042c, 0x9d00042d, 0x9e00042e, 0x9f00042f, 0xe0000430, 0xe1000431, 0xe2000432, 0xe3000433,
		0xe4000434, 0xe5000435, 0xe6000436, 0xe7000437, 0xe8000438, 0xe9000439, 0xea00043a, 0xeb00043b,
		0xec00043c, 0xed00043d, 0xee00043e, 0xef00043f, 0xf0000440, 0xf1000441, 0xf2000442, 0xf3000443,
		0xf4000444, 0xf5000445, 0xf6000446, 0xf7000447, 0xf8000448, 0xf9000449, 0xfa00044a, 0xfb00044b,
		0xfc00044c, 0xfd00044d, 0xfe00044e, 0xdf00044f, 0xde000451, 0xac000452, 0xaf000453, 0xb9000454,
		0xcf000455, 0xb4000456, 0xbb000457, 0xc0000458, 0xbd000459, 0xbf00045a, 0xcc00045b, 0xce00045c,
		0xd900045e, 0xdb00045f, 0xa2000490, 0xb6000491, 0xd0002013, 0xd1002014, 0xd4002018, 0xd5002019,
		0xd200201c, 0xd300201d, 0xd700201e, 0xa0002020, 0xa5002022, 0xc9002026, 0xff0020ac, 0xdc002116,
		0xaa002122, 0xc6002206, 0xc300221a, 0xb000221e, 0xc5002248, 0xad002260, 0xb2002264, 0xb3002265,
	},
}

// Windows874 is the Windows 874 encoding.
var Windows874 *Charmap = &windows874

var windows874 = Charmap{
	name:          "Windows 874",
	mib:           identifier.Windows874,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xa6}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}},
		{3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}},
		{3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}},
		{3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xe0, 0xb8, 0x81}},
		{3, [3]byte{0xe0, 0xb8, 0x82}}, {3, [3]byte{0xe0, 0xb8, 0x83}},
		{3, [3]byte{0xe0, 0xb8, 0x84}}, {3, [3]byte{0xe0, 0xb8, 0x85}},
		{3, [3]byte{0xe0, 0xb8, 0x86}}, {3, [3]byte{0xe0, 0xb8, 0x87}},
		{3, [3]byte{0xe0, 0xb8, 0x88}}, {3, [3]byte{0xe0, 0xb8, 0x89}},
		{3, [3]byte{0xe0, 0xb8, 0x8a}}, {3, [3]byte{0xe0, 0xb8, 0x8b}},
		{3, [3]byte{0xe0, 0xb8, 0x8c}}, {3, [3]byte{0xe0, 0xb8, 0x8d}},
		{3, [3]byte{0xe0, 0xb8, 0x8e}}, {3, [3]byte{0xe0, 0xb8, 0x8f}},
		{3, [3]byte{0xe0, 0xb8, 0x90}}, {3, [3]byte{0xe0, 0xb8, 0x91}},
		{3, [3]byte{0xe0, 0xb8, 0x92}}, {3, [3]byte{0xe0, 0xb8, 0x93}},
		{3, [3]byte{0xe0, 0xb8, 0x94}}, {3, [3]byte{0xe0, 0xb8, 0x95}},
		{3, [3]byte{0xe0, 0xb8, 0x96}}, {3, [3]byte{0xe0, 0xb8, 0x97}},
		{3, [3]byte{0xe0, 0xb8, 0x98}}, {3, [3]byte{0xe0, 0xb8, 0x99}},
		{3, [3]byte{0xe0, 0xb8, 0x9a}}, {3, [3]byte{0xe0, 0xb8, 0x9b}},
		{3, [3]byte{0xe0, 0xb8, 0x9c}}, {3, [3]byte{0xe0, 0xb8, 0x9d}},
		{3, [3]byte{0xe0, 0xb8, 0x9e}}, {3, [3]byte{0xe0, 0xb8, 0x9f}},
		{3, [3]byte{0xe0, 0xb8, 0xa0}}, {3, [3]byte{0xe0, 0xb8, 0xa1}},
		{3, [3]byte{0xe0, 0xb8, 0xa2}}, {3, [3]byte{0xe0, 0xb8, 0xa3}},
		{3, [3]byte{0xe0, 0xb8, 0xa4}}, {3, [3]byte{0xe0, 0xb8, 0xa5}},
		{3, [3]byte{0xe0, 0xb8, 0xa6}}, {3, [3]byte{0xe0, 0xb8, 0xa7}},
		{3, [3]byte{0xe0, 0xb8, 0xa8}}, {3, [3]byte{0xe0, 0xb8, 0xa9}},
		{3, [3]byte{0xe0, 0xb8, 0xaa}}, {3, [3]byte{0xe0, 0xb8, 0xab}},
		{3, [3]byte{0xe0, 0xb8, 0xac}}, {3, [3]byte{0xe0, 0xb8, 0xad}},
		{3, [3]byte{0xe0, 0xb8, 0xae}}, {3, [3]byte{0xe0, 0xb8, 0xaf}},
		{3, [3]byte{0xe0, 0xb8, 0xb0}}, {3, [3]byte{0xe0, 0xb8, 0xb1}},
		{3, [3]byte{0xe0, 0xb8, 0xb2}}, {3, [3]byte{0xe0, 0xb8, 0xb3}},
		{3, [3]byte{0xe0, 0xb8, 0xb4}}, {3, [3]byte{0xe0, 0xb8, 0xb5}},
		{3, [3]byte{0xe0, 0xb8, 0xb6}}, {3, [3]byte{0xe0, 0xb8, 0xb7}},
		{3, [3]byte{0xe0, 0xb8, 0xb8}}, {3, [3]byte{0xe0, 0xb8, 0xb9}},
		{3, [3]byte{0xe0, 0xb8, 0xba}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe0, 0xb8, 0xbf}},
		{3, [3]byte{0xe0, 0xb9, 0x80}}, {3, [3]byte{0xe0, 0xb9, 0x81}},
		{3, [3]byte{0xe0, 0xb9, 0x82}}, {3, [3]byte{0xe0, 0xb9, 0x83}},
		{3, [3]byte{0xe0, 0xb9, 0x84}}, {3, [3]byte{0xe0, 0xb9, 0x85}},
		{3, [3]byte{0xe0, 0xb9, 0x86}}, {3, [3]byte{0xe0, 0xb9, 0x87}},
		{3, [3]byte{0xe0, 0xb9, 0x88}}, {3, [3]byte{0xe0, 0xb9, 0x89}},
		{3, [3]byte{0xe0, 0xb9, 0x8a}}, {3, [3]byte{0xe0, 0xb9, 0x8b}},
		{3, [3]byte{0xe0, 0xb9, 0x8c}}, {3, [3]byte{0xe0, 0xb9, 0x8d}},
		{3, [3]byte{0xe0, 0xb9, 0x8e}}, {3, [3]byte{0xe0, 0xb9, 0x8f}},
		{3, [3]byte{0xe0, 0xb9, 0x90}}, {3, [3]byte{0xe0, 0xb9, 0x91}},
		{3, [3]byte{0xe0, 0xb9, 0x92}}, {3, [3]byte{0xe0, 0xb9, 0x93}},
		{3, [3]byte{0xe0, 0xb9, 0x94}}, {3, [3]byte{0xe0, 0xb9, 0x95}},
		{3, [3]byte{0xe0, 0xb9, 0x96}}, {3, [3]byte{0xe0, 0xb9, 0x97}},
		{3, [3]byte{0xe0, 0xb9, 0x98}}, {3, [3]byte{0xe0, 0xb9, 0x99}},
		{3, [3]byte{0xe0, 0xb9, 0x9a}}, {3, [3]byte{0xe0, 0xb9, 0x9b}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xa00000a0, 0xa1000e01, 0xa2000e02, 0xa3000e03, 0xa4000e04, 0xa5000e05, 0xa6000e06, 0xa7000e07,
		0xa8000e08, 0xa9000e09, 0xaa000e0a, 0xab000e0b, 0xac000e0c, 0xad000e0d, 0xae000e0e, 0xaf000e0f,
		0xb0000e10, 0xb1000e11, 0xb2000e12, 0xb3000e13, 0xb4000e14, 0xb5000e15, 0xb6000e16, 0xb7000e17,
		0xb8000e18, 0xb9000e19, 0xba000e1a, 0xbb000e1b, 0xbc000e1c, 0xbd000e1d, 0xbe000e1e, 0xbf000e1f,
		0xc0000e20, 0xc1000e21, 0xc2000e22, 0xc3000e23, 0xc4000e24, 0xc5000e25, 0xc6000e26, 0xc7000e27,
		0xc8000e28, 0xc9000e29, 0xca000e2a, 0xcb000e2b, 0xcc000e2c, 0xcd000e2d, 0xce000e2e, 0xcf000e2f,
		0xd0000e30, 0xd1000e31, 0xd2000e32, 0xd3000e33, 0xd4000e34, 0xd5000e35, 0xd6000e36, 0xd7000e37,
		0xd8000e38, 0xd9000e39, 0xda000e3a, 0xdf000e3f, 0xe0000e40, 0xe1000e41, 0xe2000e42, 0xe3000e43,
		0xe4000e44, 0xe5000e45, 0xe6000e46, 0xe7000e47, 0xe8000e48, 0xe9000e49, 0xea000e4a, 0xeb000e4b,
		0xec000e4c, 0xed000e4d, 0xee000e4e, 0xef000e4f, 0xf0000e50, 0xf1000e51, 0xf2000e52, 0xf3000e53,
		0xf4000e54, 0xf5000e55, 0xf6000e56, 0xf7000e57, 0xf8000e58, 0xf9000e59, 0xfa000e5a, 0xfb000e5b,
		0x96002013, 0x97002014, 0x91002018, 0x92002019, 0x9300201c, 0x9400201d, 0x95002022, 0x85002026,
		0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac,
		0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac,
		0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac,
		0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac,
	},
}

// Windows1250 is the Windows 1250 encoding.
var Windows1250 *Charmap = &windows1250

var windows1250 = Charmap{
	name:          "Windows 1250",
	mib:           identifier.Windows1250,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xe2, 0x80, 0x9a}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}},
		{3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb0}},
		{2, [3]byte{0xc5, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb9}},
		{2, [3]byte{0xc5, 0x9a, 0x00}}, {2, [3]byte{0xc5, 0xa4, 0x00}},
		{2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc5, 0xb9, 0x00}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}},
		{3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}},
		{3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}},
		{3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x84, 0xa2}},
		{2, [3]byte{0xc5, 0xa1, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xba}},
		{2, [3]byte{0xc5, 0x9b, 0x00}}, {2, [3]byte{0xc5, 0xa5, 0x00}},
		{2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xc5, 0xba, 0x00}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xcb, 0x87, 0x00}},
		{2, [3]byte{0xcb, 0x98, 0x00}}, {2, [3]byte{0xc5, 0x81, 0x00}},
		{2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0x84, 0x00}},
		{2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
		{2, [3]byte{0xc5, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
		{2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
		{2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc5, 0xbb, 0x00}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{2, [3]byte{0xcb, 0x9b, 0x00}}, {2, [3]byte{0xc5, 0x82, 0x00}},
		{2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
		{2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
		{2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc4, 0x85, 0x00}},
		{2, [3]byte{0xc5, 0x9f, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
		{2, [3]byte{0xc4, 0xbd, 0x00}}, {2, [3]byte{0xcb, 0x9d, 0x00}},
		{2, [3]byte{0xc4, 0xbe, 0x00}}, {2, [3]byte{0xc5, 0xbc, 0x00}},
		{2, [3]byte{0xc5, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
		{2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc4, 0x82, 0x00}},
		{2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc4, 0xb9, 0x00}},
		{2, [3]byte{0xc4, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}},
		{2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
		{2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
		{2, [3]byte{0xc4, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
		{2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc4, 0x8e, 0x00}},
		{2, [3]byte{0xc4, 0x90, 0x00}}, {2, [3]byte{0xc5, 0x83, 0x00}},
		{2, [3]byte{0xc5, 0x87, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
		{2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc5, 0x90, 0x00}},
		{2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
		{2, [3]byte{0xc5, 0x98, 0x00}}, {2, [3]byte{0xc5, 0xae, 0x00}},
		{2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc5, 0xb0, 0x00}},
		{2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}},
		{2, [3]byte{0xc5, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
		{2, [3]byte{0xc5, 0x95, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
		{2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc4, 0x83, 0x00}},
		{2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0xba, 0x00}},
		{2, [3]byte{0xc4, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
		{2, [3]byte{0xc4, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
		{2, [3]byte{0xc4, 0x99, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
		{2, [3]byte{0xc4, 0x9b, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
		{2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc4, 0x8f, 0x00}},
		{2, [3]byte{0xc4, 0x91, 0x00}}, {2, [3]byte{0xc5, 0x84, 0x00}},
		{2, [3]byte{0xc5, 0x88, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
		{2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc5, 0x91, 0x00}},
		{2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
		{2, [3]byte{0xc5, 0x99, 0x00}}, {2, [3]byte{0xc5, 0xaf, 0x00}},
		{2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc5, 0xb1, 0x00}},
		{2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}},
		{2, [3]byte{0xc5, 0xa3, 0x00}}, {2, [3]byte{0xcb, 0x99, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xa00000a0, 0xa40000a4, 0xa60000a6, 0xa70000a7, 0xa80000a8, 0xa90000a9, 0xab0000ab, 0xac0000ac,
		0xad0000ad, 0xae0000ae, 0xb00000b0, 0xb10000b1, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7,
		0xb80000b8, 0xbb0000bb, 0xc10000c1, 0xc20000c2, 0xc40000c4, 0xc70000c7, 0xc90000c9, 0xcb0000cb,
		0xcd0000cd, 0xce0000ce, 0xd30000d3, 0xd40000d4, 0xd60000d6, 0xd70000d7, 0xda0000da, 0xdc0000dc,
		0xdd0000dd, 0xdf0000df, 0xe10000e1, 0xe20000e2, 0xe40000e4, 0xe70000e7, 0xe90000e9, 0xeb0000eb,
		0xed0000ed, 0xee0000ee, 0xf30000f3, 0xf40000f4, 0xf60000f6, 0xf70000f7, 0xfa0000fa, 0xfc0000fc,
		0xfd0000fd, 0xc3000102, 0xe3000103, 0xa5000104, 0xb9000105, 0xc6000106, 0xe6000107, 0xc800010c,
		0xe800010d, 0xcf00010e, 0xef00010f, 0xd0000110, 0xf0000111, 0xca000118, 0xea000119, 0xcc00011a,
		0xec00011b, 0xc5000139, 0xe500013a, 0xbc00013d, 0xbe00013e, 0xa3000141, 0xb3000142, 0xd1000143,
		0xf1000144, 0xd2000147, 0xf2000148, 0xd5000150, 0xf5000151, 0xc0000154, 0xe0000155, 0xd8000158,
		0xf8000159, 0x8c00015a, 0x9c00015b, 0xaa00015e, 0xba00015f, 0x8a000160, 0x9a000161, 0xde000162,
		0xfe000163, 0x8d000164, 0x9d000165, 0xd900016e, 0xf900016f, 0xdb000170, 0xfb000171, 0x8f000179,
		0x9f00017a, 0xaf00017b, 0xbf00017c, 0x8e00017d, 0x9e00017e, 0xa10002c7, 0xa20002d8, 0xff0002d9,
		0xb20002db, 0xbd0002dd, 0x96002013, 0x97002014, 0x91002018, 0x92002019, 0x8200201a, 0x9300201c,
		0x9400201d, 0x8400201e, 0x86002020, 0x87002021, 0x95002022, 0x85002026, 0x89002030, 0x8b002039,
		0x9b00203a, 0x800020ac, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122,
	},
}

// Windows1251 is the Windows 1251 encoding.
var Windows1251 *Charmap = &windows1251

var windows1251 = Charmap{
	name:          "Windows 1251",
	mib:           identifier.Windows1251,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{2, [3]byte{0xd0, 0x82, 0x00}}, {2, [3]byte{0xd0, 0x83, 0x00}},
		{3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xd1, 0x93, 0x00}},
		{3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}},
		{3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}},
		{3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xe2, 0x80, 0xb0}},
		{2, [3]byte{0xd0, 0x89, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb9}},
		{2, [3]byte{0xd0, 0x8a, 0x00}}, {2, [3]byte{0xd0, 0x8c, 0x00}},
		{2, [3]byte{0xd0, 0x8b, 0x00}}, {2, [3]byte{0xd0, 0x8f, 0x00}},
		{2, [3]byte{0xd1, 0x92, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x98}},
		{3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}},
		{3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}},
		{3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x84, 0xa2}},
		{2, [3]byte{0xd1, 0x99, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xba}},
		{2, [3]byte{0xd1, 0x9a, 0x00}}, {2, [3]byte{0xd1, 0x9c, 0x00}},
		{2, [3]byte{0xd1, 0x9b, 0x00}}, {2, [3]byte{0xd1, 0x9f, 0x00}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0x8e, 0x00}},
		{2, [3]byte{0xd1, 0x9e, 0x00}}, {2, [3]byte{0xd0, 0x88, 0x00}},
		{2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xd2, 0x90, 0x00}},
		{2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xd0, 0x81, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
		{2, [3]byte{0xd0, 0x84, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
		{2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
		{2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xd0, 0x87, 0x00}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{2, [3]byte{0xd0, 0x86, 0x00}}, {2, [3]byte{0xd1, 0x96, 0x00}},
		{2, [3]byte{0xd2, 0x91, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
		{2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
		{2, [3]byte{0xd1, 0x91, 0x00}}, {3, [3]byte{0xe2, 0x84, 0x96}},
		{2, [3]byte{0xd1, 0x94, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
		{2, [3]byte{0xd1, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x85, 0x00}},
		{2, [3]byte{0xd1, 0x95, 0x00}}, {2, [3]byte{0xd1, 0x97, 0x00}},
		{2, [3]byte{0xd0, 0x90, 0x00}}, {2, [3]byte{0xd0, 0x91, 0x00}},
		{2, [3]byte{0xd0, 0x92, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}},
		{2, [3]byte{0xd0, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}},
		{2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x97, 0x00}},
		{2, [3]byte{0xd0, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x99, 0x00}},
		{2, [3]byte{0xd0, 0x9a, 0x00}}, {2, [3]byte{0xd0, 0x9b, 0x00}},
		{2, [3]byte{0xd0, 0x9c, 0x00}}, {2, [3]byte{0xd0, 0x9d, 0x00}},
		{2, [3]byte{0xd0, 0x9e, 0x00}}, {2, [3]byte{0xd0, 0x9f, 0x00}},
		{2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0xa1, 0x00}},
		{2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd0, 0xa3, 0x00}},
		{2, [3]byte{0xd0, 0xa4, 0x00}}, {2, [3]byte{0xd0, 0xa5, 0x00}},
		{2, [3]byte{0xd0, 0xa6, 0x00}}, {2, [3]byte{0xd0, 0xa7, 0x00}},
		{2, [3]byte{0xd0, 0xa8, 0x00}}, {2, [3]byte{0xd0, 0xa9, 0x00}},
		{2, [3]byte{0xd0, 0xaa, 0x00}}, {2, [3]byte{0xd0, 0xab, 0x00}},
		{2, [3]byte{0xd0, 0xac, 0x00}}, {2, [3]byte{0xd0, 0xad, 0x00}},
		{2, [3]byte{0xd0, 0xae, 0x00}}, {2, [3]byte{0xd0, 0xaf, 0x00}},
		{2, [3]byte{0xd0, 0xb0, 0x00}}, {2, [3]byte{0xd0, 0xb1, 0x00}},
		{2, [3]byte{0xd0, 0xb2, 0x00}}, {2, [3]byte{0xd0, 0xb3, 0x00}},
		{2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0xb5, 0x00}},
		{2, [3]byte{0xd0, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0xb7, 0x00}},
		{2, [3]byte{0xd0, 0xb8, 0x00}}, {2, [3]byte{0xd0, 0xb9, 0x00}},
		{2, [3]byte{0xd0, 0xba, 0x00}}, {2, [3]byte{0xd0, 0xbb, 0x00}},
		{2, [3]byte{0xd0, 0xbc, 0x00}}, {2, [3]byte{0xd0, 0xbd, 0x00}},
		{2, [3]byte{0xd0, 0xbe, 0x00}}, {2, [3]byte{0xd0, 0xbf, 0x00}},
		{2, [3]byte{0xd1, 0x80, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}},
		{2, [3]byte{0xd1, 0x82, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}},
		{2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd1, 0x85, 0x00}},
		{2, [3]byte{0xd1, 0x86, 0x00}}, {2, [3]byte{0xd1, 0x87, 0x00}},
		{2, [3]byte{0xd1, 0x88, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}},
		{2, [3]byte{0xd1, 0x8a, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}},
		{2, [3]byte{0xd1, 0x8c, 0x00}}, {2, [3]byte{0xd1, 0x8d, 0x00}},
		{2, [3]byte{0xd1, 0x8e, 0x00}}, {2, [3]byte{0xd1, 0x8f, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xa00000a0, 0xa40000a4, 0xa60000a6, 0xa70000a7, 0xa90000a9, 0xab0000ab, 0xac0000ac, 0xad0000ad,
		0xae0000ae, 0xb00000b0, 0xb10000b1, 0xb50000b5, 0xb60000b6, 0xb70000b7, 0xbb0000bb, 0xa8000401,
		0x80000402, 0x81000403, 0xaa000404, 0xbd000405, 0xb2000406, 0xaf000407, 0xa3000408, 0x8a000409,
		0x8c00040a, 0x8e00040b, 0x8d00040c, 0xa100040e, 0x8f00040f, 0xc0000410, 0xc1000411, 0xc2000412,
		0xc3000413, 0xc4000414, 0xc5000415, 0xc6000416, 0xc7000417, 0xc8000418, 0xc9000419, 0xca00041a,
		0xcb00041b, 0xcc00041c, 0xcd00041d, 0xce00041e, 0xcf00041f, 0xd0000420, 0xd1000421, 0xd2000422,
		0xd3000423, 0xd4000424, 0xd5000425, 0xd6000426, 0xd7000427, 0xd8000428, 0xd9000429, 0xda00042a,
		0xdb00042b, 0xdc00042c, 0xdd00042d, 0xde00042e, 0xdf00042f, 0xe0000430, 0xe1000431, 0xe2000432,
		0xe3000433, 0xe4000434, 0xe5000435, 0xe6000436, 0xe7000437, 0xe8000438, 0xe9000439, 0xea00043a,
		0xeb00043b, 0xec00043c, 0xed00043d, 0xee00043e, 0xef00043f, 0xf0000440, 0xf1000441, 0xf2000442,
		0xf3000443, 0xf4000444, 0xf5000445, 0xf6000446, 0xf7000447, 0xf8000448, 0xf9000449, 0xfa00044a,
		0xfb00044b, 0xfc00044c, 0xfd00044d, 0xfe00044e, 0xff00044f, 0xb8000451, 0x90000452, 0x83000453,
		0xba000454, 0xbe000455, 0xb3000456, 0xbf000457, 0xbc000458, 0x9a000459, 0x9c00045a, 0x9e00045b,
		0x9d00045c, 0xa200045e, 0x9f00045f, 0xa5000490, 0xb4000491, 0x96002013, 0x97002014, 0x91002018,
		0x92002019, 0x8200201a, 0x9300201c, 0x9400201d, 0x8400201e, 0x86002020, 0x87002021, 0x95002022,
		0x85002026, 0x89002030, 0x8b002039, 0x9b00203a, 0x880020ac, 0xb9002116, 0x99002122, 0x99002122,
	},
}

// Windows1252 is the Windows 1252 encoding.
var Windows1252 *Charmap = &windows1252

var windows1252 = Charmap{
	name:          "Windows 1252",
	mib:           identifier.Windows1252,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xc6, 0x92, 0x00}},
		{3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}},
		{3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}},
		{2, [3]byte{0xcb, 0x86, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb0}},
		{2, [3]byte{0xc5, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb9}},
		{2, [3]byte{0xc5, 0x92, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xc5, 0xbd, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}},
		{3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}},
		{3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}},
		{3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}},
		{2, [3]byte{0xcb, 0x9c, 0x00}}, {3, [3]byte{0xe2, 0x84, 0xa2}},
		{2, [3]byte{0xc5, 0xa1, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xba}},
		{2, [3]byte{0xc5, 0x93, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xc5, 0xb8, 0x00}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
		{2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
		{2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}},
		{2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
		{2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
		{2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
		{2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
		{2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
		{2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
		{2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}},
		{2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
		{2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
		{2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}},
		{2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
		{2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}},
		{2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
		{2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}},
		{2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
		{2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
		{2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
		{2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
		{2, [3]byte{0xc3, 0x90, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
		{2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
		{2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
		{2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
		{2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
		{2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
		{2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}},
		{2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
		{2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
		{2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}},
		{2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
		{2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
		{2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
		{2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
		{2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
		{2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
		{2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}},
		{2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
		{2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
		{2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
		{2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
		{2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
		{2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}},
		{2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7,
		0xa80000a8, 0xa90000a9, 0xaa0000aa, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af,
		0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7,
		0xb80000b8, 0xb90000b9, 0xba0000ba, 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xbf0000bf,
		0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7,
		0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf,
		0xd00000d0, 0xd10000d1, 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd70000d7,
		0xd80000d8, 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdd0000dd, 0xde0000de, 0xdf0000df,
		0xe00000e0, 0xe10000e1, 0xe20000e2, 0xe30000e3, 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7,
		0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef,
		0xf00000f0, 0xf10000f1, 0xf20000f2, 0xf30000f3, 0xf40000f4, 0xf50000f5, 0xf60000f6, 0xf70000f7,
		0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xfd0000fd, 0xfe0000fe, 0xff0000ff,
		0x8c000152, 0x9c000153, 0x8a000160, 0x9a000161, 0x9f000178, 0x8e00017d, 0x9e00017e, 0x83000192,
		0x880002c6, 0x980002dc, 0x96002013, 0x97002014, 0x91002018, 0x92002019, 0x8200201a, 0x9300201c,
		0x9400201d, 0x8400201e, 0x86002020, 0x87002021, 0x95002022, 0x85002026, 0x89002030, 0x8b002039,
		0x9b00203a, 0x800020ac, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122,
	},
}

// Windows1253 is the Windows 1253 encoding.
var Windows1253 *Charmap = &windows1253

var windows1253 = Charmap{
	name:          "Windows 1253",
	mib:           identifier.Windows1253,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xc6, 0x92, 0x00}},
		{3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}},
		{3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb0}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb9}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}},
		{3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}},
		{3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}},
		{3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x84, 0xa2}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xba}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xce, 0x85, 0x00}},
		{2, [3]byte{0xce, 0x86, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
		{2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}},
		{2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc2, 0xab, 0x00}},
		{2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
		{2, [3]byte{0xc2, 0xae, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x95}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
		{2, [3]byte{0xce, 0x84, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
		{2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
		{2, [3]byte{0xce, 0x88, 0x00}}, {2, [3]byte{0xce, 0x89, 0x00}},
		{2, [3]byte{0xce, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
		{2, [3]byte{0xce, 0x8c, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
		{2, [3]byte{0xce, 0x8e, 0x00}}, {2, [3]byte{0xce, 0x8f, 0x00}},
		{2, [3]byte{0xce, 0x90, 0x00}}, {2, [3]byte{0xce, 0x91, 0x00}},
		{2, [3]byte{0xce, 0x92, 0x00}}, {2, [3]byte{0xce, 0x93, 0x00}},
		{2, [3]byte{0xce, 0x94, 0x00}}, {2, [3]byte{0xce, 0x95, 0x00}},
		{2, [3]byte{0xce, 0x96, 0x00}}, {2, [3]byte{0xce, 0x97, 0x00}},
		{2, [3]byte{0xce, 0x98, 0x00}}, {2, [3]byte{0xce, 0x99, 0x00}},
		{2, [3]byte{0xce, 0x9a, 0x00}}, {2, [3]byte{0xce, 0x9b, 0x00}},
		{2, [3]byte{0xce, 0x9c, 0x00}}, {2, [3]byte{0xce, 0x9d, 0x00}},
		{2, [3]byte{0xce, 0x9e, 0x00}}, {2, [3]byte{0xce, 0x9f, 0x00}},
		{2, [3]byte{0xce, 0xa0, 0x00}}, {2, [3]byte{0xce, 0xa1, 0x00}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xce, 0xa3, 0x00}},
		{2, [3]byte{0xce, 0xa4, 0x00}}, {2, [3]byte{0xce, 0xa5, 0x00}},
		{2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0xa7, 0x00}},
		{2, [3]byte{0xce, 0xa8, 0x00}}, {2, [3]byte{0xce, 0xa9, 0x00}},
		{2, [3]byte{0xce, 0xaa, 0x00}}, {2, [3]byte{0xce, 0xab, 0x00}},
		{2, [3]byte{0xce, 0xac, 0x00}}, {2, [3]byte{0xce, 0xad, 0x00}},
		{2, [3]byte{0xce, 0xae, 0x00}}, {2, [3]byte{0xce, 0xaf, 0x00}},
		{2, [3]byte{0xce, 0xb0, 0x00}}, {2, [3]byte{0xce, 0xb1, 0x00}},
		{2, [3]byte{0xce, 0xb2, 0x00}}, {2, [3]byte{0xce, 0xb3, 0x00}},
		{2, [3]byte{0xce, 0xb4, 0x00}}, {2, [3]byte{0xce, 0xb5, 0x00}},
		{2, [3]byte{0xce, 0xb6, 0x00}}, {2, [3]byte{0xce, 0xb7, 0x00}},
		{2, [3]byte{0xce, 0xb8, 0x00}}, {2, [3]byte{0xce, 0xb9, 0x00}},
		{2, [3]byte{0xce, 0xba, 0x00}}, {2, [3]byte{0xce, 0xbb, 0x00}},
		{2, [3]byte{0xce, 0xbc, 0x00}}, {2, [3]byte{0xce, 0xbd, 0x00}},
		{2, [3]byte{0xce, 0xbe, 0x00}}, {2, [3]byte{0xce, 0xbf, 0x00}},
		{2, [3]byte{0xcf, 0x80, 0x00}}, {2, [3]byte{0xcf, 0x81, 0x00}},
		{2, [3]byte{0xcf, 0x82, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}},
		{2, [3]byte{0xcf, 0x84, 0x00}}, {2, [3]byte{0xcf, 0x85, 0x00}},
		{2, [3]byte{0xcf, 0x86, 0x00}}, {2, [3]byte{0xcf, 0x87, 0x00}},
		{2, [3]byte{0xcf, 0x88, 0x00}}, {2, [3]byte{0xcf, 0x89, 0x00}},
		{2, [3]byte{0xcf, 0x8a, 0x00}}, {2, [3]byte{0xcf, 0x8b, 0x00}},
		{2, [3]byte{0xcf, 0x8c, 0x00}}, {2, [3]byte{0xcf, 0x8d, 0x00}},
		{2, [3]byte{0xcf, 0x8e, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xa00000a0, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7, 0xa80000a8, 0xa90000a9,
		0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3,
		0xb50000b5, 0xb60000b6, 0xb70000b7, 0xbb0000bb, 0xbd0000bd, 0x83000192, 0xb4000384, 0xa1000385,
		0xa2000386, 0xb8000388, 0xb9000389, 0xba00038a, 0xbc00038c, 0xbe00038e, 0xbf00038f, 0xc0000390,
		0xc1000391, 0xc2000392, 0xc3000393, 0xc4000394, 0xc5000395, 0xc6000396, 0xc7000397, 0xc8000398,
		0xc9000399, 0xca00039a, 0xcb00039b, 0xcc00039c, 0xcd00039d, 0xce00039e, 0xcf00039f, 0xd00003a0,
		0xd10003a1, 0xd30003a3, 0xd40003a4, 0xd50003a5, 0xd60003a6, 0xd70003a7, 0xd80003a8, 0xd90003a9,
		0xda0003aa, 0xdb0003ab, 0xdc0003ac, 0xdd0003ad, 0xde0003ae, 0xdf0003af, 0xe00003b0, 0xe10003b1,
		0xe20003b2, 0xe30003b3, 0xe40003b4, 0xe50003b5, 0xe60003b6, 0xe70003b7, 0xe80003b8, 0xe90003b9,
		0xea0003ba, 0xeb0003bb, 0xec0003bc, 0xed0003bd, 0xee0003be, 0xef0003bf, 0xf00003c0, 0xf10003c1,
		0xf20003c2, 0xf30003c3, 0xf40003c4, 0xf50003c5, 0xf60003c6, 0xf70003c7, 0xf80003c8, 0xf90003c9,
		0xfa0003ca, 0xfb0003cb, 0xfc0003cc, 0xfd0003cd, 0xfe0003ce, 0x96002013, 0x97002014, 0xaf002015,
		0x91002018, 0x92002019, 0x8200201a, 0x9300201c, 0x9400201d, 0x8400201e, 0x86002020, 0x87002021,
		0x95002022, 0x85002026, 0x89002030, 0x8b002039, 0x9b00203a, 0x800020ac, 0x99002122, 0x99002122,
		0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122,
		0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122,
	},
}

// Windows1254 is the Windows 1254 encoding.
var Windows1254 *Charmap = &windows1254

var windows1254 = Charmap{
	name:          "Windows 1254",
	mib:           identifier.Windows1254,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xc6, 0x92, 0x00}},
		{3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}},
		{3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}},
		{2, [3]byte{0xcb, 0x86, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb0}},
		{2, [3]byte{0xc5, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb9}},
		{2, [3]byte{0xc5, 0x92, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}},
		{3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}},
		{3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}},
		{3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}},
		{2, [3]byte{0xcb, 0x9c, 0x00}}, {3, [3]byte{0xe2, 0x84, 0xa2}},
		{2, [3]byte{0xc5, 0xa1, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xba}},
		{2, [3]byte{0xc5, 0x93, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc5, 0xb8, 0x00}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
		{2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
		{2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}},
		{2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
		{2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
		{2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
		{2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
		{2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
		{2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
		{2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}},
		{2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
		{2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
		{2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}},
		{2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
		{2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}},
		{2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
		{2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}},
		{2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
		{2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
		{2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
		{2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
		{2, [3]byte{0xc4, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
		{2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
		{2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
		{2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
		{2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
		{2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
		{2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc4, 0xb0, 0x00}},
		{2, [3]byte{0xc5, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
		{2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
		{2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}},
		{2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
		{2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
		{2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
		{2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
		{2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
		{2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
		{2, [3]byte{0xc4, 0x9f, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}},
		{2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
		{2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
		{2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
		{2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
		{2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
		{2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc4, 0xb1, 0x00}},
		{2, [3]byte{0xc5, 0x9f, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7,
		0xa80000a8, 0xa90000a9, 0xaa0000aa, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af,
		0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7,
		0xb80000b8, 0xb90000b9, 0xba0000ba, 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xbf0000bf,
		0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7,
		0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf,
		0xd10000d1, 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd70000d7, 0xd80000d8,
		0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdf0000df, 0xe00000e0, 0xe10000e1, 0xe20000e2,
		0xe30000e3, 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7, 0xe80000e8, 0xe90000e9, 0xea0000ea,
		0xeb0000eb, 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf10000f1, 0xf20000f2, 0xf30000f3,
		0xf40000f4, 0xf50000f5, 0xf60000f6, 0xf70000f7, 0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb,
		0xfc0000fc, 0xff0000ff, 0xd000011e, 0xf000011f, 0xdd000130, 0xfd000131, 0x8c000152, 0x9c000153,
		0xde00015e, 0xfe00015f, 0x8a000160, 0x9a000161, 0x9f000178, 0x83000192, 0x880002c6, 0x980002dc,
		0x96002013, 0x97002014, 0x91002018, 0x92002019, 0x8200201a, 0x9300201c, 0x9400201d, 0x8400201e,
		0x86002020, 0x87002021, 0x95002022, 0x85002026, 0x89002030, 0x8b002039, 0x9b00203a, 0x800020ac,
		0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122,
	},
}

// Windows1255 is the Windows 1255 encoding.
var Windows1255 *Charmap = &windows1255

var windows1255 = Charmap{
	name:          "Windows 1255",
	mib:           identifier.Windows1255,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xc6, 0x92, 0x00}},
		{3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}},
		{3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}},
		{2, [3]byte{0xcb, 0x86, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb0}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb9}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}},
		{3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}},
		{3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}},
		{3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}},
		{2, [3]byte{0xcb, 0x9c, 0x00}}, {3, [3]byte{0xe2, 0x84, 0xa2}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xba}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
		{2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
		{3, [3]byte{0xe2, 0x82, 0xaa}}, {2, [3]byte{0xc2, 0xa5, 0x00}},
		{2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
		{2, [3]byte{0xc3, 0x97, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
		{2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
		{2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
		{2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
		{2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
		{2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}},
		{2, [3]byte{0xc3, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
		{2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
		{2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}},
		{2, [3]byte{0xd6, 0xb0, 0x00}}, {2, [3]byte{0xd6, 0xb1, 0x00}},
		{2, [3]byte{0xd6, 0xb2, 0x00}}, {2, [3]byte{0xd6, 0xb3, 0x00}},
		{2, [3]byte{0xd6, 0xb4, 0x00}}, {2, [3]byte{0xd6, 0xb5, 0x00}},
		{2, [3]byte{0xd6, 0xb6, 0x00}}, {2, [3]byte{0xd6, 0xb7, 0x00}},
		{2, [3]byte{0xd6, 0xb8, 0x00}}, {2, [3]byte{0xd6, 0xb9, 0x00}},
		{2, [3]byte{0xd6, 0xba, 0x00}}, {2, [3]byte{0xd6, 0xbb, 0x00}},
		{2, [3]byte{0xd6, 0xbc, 0x00}}, {2, [3]byte{0xd6, 0xbd, 0x00}},
		{2, [3]byte{0xd6, 0xbe, 0x00}}, {2, [3]byte{0xd6, 0xbf, 0x00}},
		{2, [3]byte{0xd7, 0x80, 0x00}}, {2, [3]byte{0xd7, 0x81, 0x00}},
		{2, [3]byte{0xd7, 0x82, 0x00}}, {2, [3]byte{0xd7, 0x83, 0x00}},
		{2, [3]byte{0xd7, 0xb0, 0x00}}, {2, [3]byte{0xd7, 0xb1, 0x00}},
		{2, [3]byte{0xd7, 0xb2, 0x00}}, {2, [3]byte{0xd7, 0xb3, 0x00}},
		{2, [3]byte{0xd7, 0xb4, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xd7, 0x90, 0x00}}, {2, [3]byte{0xd7, 0x91, 0x00}},
		{2, [3]byte{0xd7, 0x92, 0x00}}, {2, [3]byte{0xd7, 0x93, 0x00}},
		{2, [3]byte{0xd7, 0x94, 0x00}}, {2, [3]byte{0xd7, 0x95, 0x00}},
		{2, [3]byte{0xd7, 0x96, 0x00}}, {2, [3]byte{0xd7, 0x97, 0x00}},
		{2, [3]byte{0xd7, 0x98, 0x00}}, {2, [3]byte{0xd7, 0x99, 0x00}},
		{2, [3]byte{0xd7, 0x9a, 0x00}}, {2, [3]byte{0xd7, 0x9b, 0x00}},
		{2, [3]byte{0xd7, 0x9c, 0x00}}, {2, [3]byte{0xd7, 0x9d, 0x00}},
		{2, [3]byte{0xd7, 0x9e, 0x00}}, {2, [3]byte{0xd7, 0x9f, 0x00}},
		{2, [3]byte{0xd7, 0xa0, 0x00}}, {2, [3]byte{0xd7, 0xa1, 0x00}},
		{2, [3]byte{0xd7, 0xa2, 0x00}}, {2, [3]byte{0xd7, 0xa3, 0x00}},
		{2, [3]byte{0xd7, 0xa4, 0x00}}, {2, [3]byte{0xd7, 0xa5, 0x00}},
		{2, [3]byte{0xd7, 0xa6, 0x00}}, {2, [3]byte{0xd7, 0xa7, 0x00}},
		{2, [3]byte{0xd7, 0xa8, 0x00}}, {2, [3]byte{0xd7, 0xa9, 0x00}},
		{2, [3]byte{0xd7, 0xaa, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x8e}},
		{3, [3]byte{0xe2, 0x80, 0x8f}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa50000a5, 0xa60000a6, 0xa70000a7, 0xa80000a8,
		0xa90000a9, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af, 0xb00000b0, 0xb10000b1,
		0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, 0xb80000b8, 0xb90000b9,
		0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xbf0000bf, 0xaa0000d7, 0xba0000f7, 0x83000192,
		0x880002c6, 0x980002dc, 0xc00005b0, 0xc10005b1, 0xc20005b2, 0xc30005b3, 0xc40005b4, 0xc50005b5,
		0xc60005b6, 0xc70005b7, 0xc80005b8, 0xc90005b9, 0xca0005ba, 0xcb0005bb, 0xcc0005bc, 0xcd0005bd,
		0xce0005be, 0xcf0005bf, 0xd00005c0, 0xd10005c1, 0xd20005c2, 0xd30005c3, 0xe00005d0, 0xe10005d1,
		0xe20005d2, 0xe30005d3, 0xe40005d4, 0xe50005d5, 0xe60005d6, 0xe70005d7, 0xe80005d8, 0xe90005d9,
		0xea0005da, 0xeb0005db, 0xec0005dc, 0xed0005dd, 0xee0005de, 0xef0005df, 0xf00005e0, 0xf10005e1,
		0xf20005e2, 0xf30005e3, 0xf40005e4, 0xf50005e5, 0xf60005e6, 0xf70005e7, 0xf80005e8, 0xf90005e9,
		0xfa0005ea, 0xd40005f0, 0xd50005f1, 0xd60005f2, 0xd70005f3, 0xd80005f4, 0xfd00200e, 0xfe00200f,
		0x96002013, 0x97002014, 0x91002018, 0x92002019, 0x8200201a, 0x9300201c, 0x9400201d, 0x8400201e,
		0x86002020, 0x87002021, 0x95002022, 0x85002026, 0x89002030, 0x8b002039, 0x9b00203a, 0xa40020aa,
		0x800020ac, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122,
		0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122,
		0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122,
	},
}

// Windows1256 is the Windows 1256 encoding.
var Windows1256 *Charmap = &windows1256

var windows1256 = Charmap{
	name:          "Windows 1256",
	mib:           identifier.Windows1256,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{3, [3]byte{0xe2, 0x82, 0xac}}, {2, [3]byte{0xd9, 0xbe, 0x00}},
		{3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xc6, 0x92, 0x00}},
		{3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}},
		{3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}},
		{2, [3]byte{0xcb, 0x86, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb0}},
		{2, [3]byte{0xd9, 0xb9, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb9}},
		{2, [3]byte{0xc5, 0x92, 0x00}}, {2, [3]byte{0xda, 0x86, 0x00}},
		{2, [3]byte{0xda, 0x98, 0x00}}, {2, [3]byte{0xda, 0x88, 0x00}},
		{2, [3]byte{0xda, 0xaf, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x98}},
		{3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}},
		{3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}},
		{3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}},
		{2, [3]byte{0xda, 0xa9, 0x00}}, {3, [3]byte{0xe2, 0x84, 0xa2}},
		{2, [3]byte{0xda, 0x91, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xba}},
		{2, [3]byte{0xc5, 0x93, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x8c}},
		{3, [3]byte{0xe2, 0x80, 0x8d}}, {2, [3]byte{0xda, 0xba, 0x00}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xd8, 0x8c, 0x00}},
		{2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
		{2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}},
		{2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
		{2, [3]byte{0xda, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
		{2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
		{2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
		{2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
		{2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
		{2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}},
		{2, [3]byte{0xd8, 0x9b, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
		{2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
		{2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xd8, 0x9f, 0x00}},
		{2, [3]byte{0xdb, 0x81, 0x00}}, {2, [3]byte{0xd8, 0xa1, 0x00}},
		{2, [3]byte{0xd8, 0xa2, 0x00}}, {2, [3]byte{0xd8, 0xa3, 0x00}},
		{2, [3]byte{0xd8, 0xa4, 0x00}}, {2, [3]byte{0xd8, 0xa5, 0x00}},
		{2, [3]byte{0xd8, 0xa6, 0x00}}, {2, [3]byte{0xd8, 0xa7, 0x00}},
		{2, [3]byte{0xd8, 0xa8, 0x00}}, {2, [3]byte{0xd8, 0xa9, 0x00}},
		{2, [3]byte{0xd8, 0xaa, 0x00}}, {2, [3]byte{0xd8, 0xab, 0x00}},
		{2, [3]byte{0xd8, 0xac, 0x00}}, {2, [3]byte{0xd8, 0xad, 0x00}},
		{2, [3]byte{0xd8, 0xae, 0x00}}, {2, [3]byte{0xd8, 0xaf, 0x00}},
		{2, [3]byte{0xd8, 0xb0, 0x00}}, {2, [3]byte{0xd8, 0xb1, 0x00}},
		{2, [3]byte{0xd8, 0xb2, 0x00}}, {2, [3]byte{0xd8, 0xb3, 0x00}},
		{2, [3]byte{0xd8, 0xb4, 0x00}}, {2, [3]byte{0xd8, 0xb5, 0x00}},
		{2, [3]byte{0xd8, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
		{2, [3]byte{0xd8, 0xb7, 0x00}}, {2, [3]byte{0xd8, 0xb8, 0x00}},
		{2, [3]byte{0xd8, 0xb9, 0x00}}, {2, [3]byte{0xd8, 0xba, 0x00}},
		{2, [3]byte{0xd9, 0x80, 0x00}}, {2, [3]byte{0xd9, 0x81, 0x00}},
		{2, [3]byte{0xd9, 0x82, 0x00}}, {2, [3]byte{0xd9, 0x83, 0x00}},
		{2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xd9, 0x84, 0x00}},
		{2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xd9, 0x85, 0x00}},
		{2, [3]byte{0xd9, 0x86, 0x00}}, {2, [3]byte{0xd9, 0x87, 0x00}},
		{2, [3]byte{0xd9, 0x88, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
		{2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
		{2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
		{2, [3]byte{0xd9, 0x89, 0x00}}, {2, [3]byte{0xd9, 0x8a, 0x00}},
		{2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
		{2, [3]byte{0xd9, 0x8b, 0x00}}, {2, [3]byte{0xd9, 0x8c, 0x00}},
		{2, [3]byte{0xd9, 0x8d, 0x00}}, {2, [3]byte{0xd9, 0x8e, 0x00}},
		{2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xd9, 0x8f, 0x00}},
		{2, [3]byte{0xd9, 0x90, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
		{2, [3]byte{0xd9, 0x91, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
		{2, [3]byte{0xd9, 0x92, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
		{2, [3]byte{0xc3, 0xbc, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x8e}},
		{3, [3]byte{0xe2, 0x80, 0x8f}}, {2, [3]byte{0xdb, 0x92, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xa00000a0, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7, 0xa80000a8,
		0xa90000a9, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af, 0xb00000b0, 0xb10000b1,
		0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, 0xb80000b8, 0xb90000b9,
		0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xd70000d7, 0xe00000e0, 0xe20000e2, 0xe70000e7,
		0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xee0000ee, 0xef0000ef, 0xf40000f4, 0xf70000f7,
		0xf90000f9, 0xfb0000fb, 0xfc0000fc, 0x8c000152, 0x9c000153, 0x83000192, 0x880002c6, 0xa100060c,
		0xba00061b, 0xbf00061f, 0xc1000621, 0xc2000622, 0xc3000623, 0xc4000624, 0xc5000625, 0xc6000626,
		0xc7000627, 0xc8000628, 0xc9000629, 0xca00062a, 0xcb00062b, 0xcc00062c, 0xcd00062d, 0xce00062e,
		0xcf00062f, 0xd0000630, 0xd1000631, 0xd2000632, 0xd3000633, 0xd4000634, 0xd5000635, 0xd6000636,
		0xd8000637, 0xd9000638, 0xda000639, 0xdb00063a, 0xdc000640, 0xdd000641, 0xde000642, 0xdf000643,
		0xe1000644, 0xe3000645, 0xe4000646, 0xe5000647, 0xe6000648, 0xec000649, 0xed00064a, 0xf000064b,
		0xf100064c, 0xf200064d, 0xf300064e, 0xf500064f, 0xf6000650, 0xf8000651, 0xfa000652, 0x8a000679,
		0x8100067e, 0x8d000686, 0x8f000688, 0x9a000691, 0x8e000698, 0x980006a9, 0x900006af, 0x9f0006ba,
		0xaa0006be, 0xc00006c1, 0xff0006d2, 0x9d00200c, 0x9e00200d, 0xfd00200e, 0xfe00200f, 0x96002013,
		0x97002014, 0x91002018, 0x92002019, 0x8200201a, 0x9300201c, 0x9400201d, 0x8400201e, 0x86002020,
		0x87002021, 0x95002022, 0x85002026, 0x89002030, 0x8b002039, 0x9b00203a, 0x800020ac, 0x99002122,
	},
}

// Windows1257 is the Windows 1257 encoding.
var Windows1257 *Charmap = &windows1257

var windows1257 = Charmap{
	name:          "Windows 1257",
	mib:           identifier.Windows1257,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xe2, 0x80, 0x9a}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}},
		{3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb0}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb9}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc2, 0xa8, 0x00}},
		{2, [3]byte{0xcb, 0x87, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}},
		{3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}},
		{3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}},
		{3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x84, 0xa2}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xba}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc2, 0xaf, 0x00}},
		{2, [3]byte{0xcb, 0x9b, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
		{2, [3]byte{0xc2, 0xa4, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
		{2, [3]byte{0xc5, 0x96, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
		{2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
		{2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc3, 0x86, 0x00}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
		{2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
		{2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
		{2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}},
		{2, [3]byte{0xc5, 0x97, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
		{2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
		{2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc3, 0xa6, 0x00}},
		{2, [3]byte{0xc4, 0x84, 0x00}}, {2, [3]byte{0xc4, 0xae, 0x00}},
		{2, [3]byte{0xc4, 0x80, 0x00}}, {2, [3]byte{0xc4, 0x86, 0x00}},
		{2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
		{2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc4, 0x92, 0x00}},
		{2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
		{2, [3]byte{0xc5, 0xb9, 0x00}}, {2, [3]byte{0xc4, 0x96, 0x00}},
		{2, [3]byte{0xc4, 0xa2, 0x00}}, {2, [3]byte{0xc4, 0xb6, 0x00}},
		{2, [3]byte{0xc4, 0xaa, 0x00}}, {2, [3]byte{0xc4, 0xbb, 0x00}},
		{2, [3]byte{0xc5, 0xa0, 0x00}}, {2, [3]byte{0xc5, 0x83, 0x00}},
		{2, [3]byte{0xc5, 0x85, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
		{2, [3]byte{0xc5, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
		{2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
		{2, [3]byte{0xc5, 0xb2, 0x00}}, {2, [3]byte{0xc5, 0x81, 0x00}},
		{2, [3]byte{0xc5, 0x9a, 0x00}}, {2, [3]byte{0xc5, 0xaa, 0x00}},
		{2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc5, 0xbb, 0x00}},
		{2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
		{2, [3]byte{0xc4, 0x85, 0x00}}, {2, [3]byte{0xc4, 0xaf, 0x00}},
		{2, [3]byte{0xc4, 0x81, 0x00}}, {2, [3]byte{0xc4, 0x87, 0x00}},
		{2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
		{2, [3]byte{0xc4, 0x99, 0x00}}, {2, [3]byte{0xc4, 0x93, 0x00}},
		{2, [3]byte{0xc4, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
		{2, [3]byte{0xc5, 0xba, 0x00}}, {2, [3]byte{0xc4, 0x97, 0x00}},
		{2, [3]byte{0xc4, 0xa3, 0x00}}, {2, [3]byte{0xc4, 0xb7, 0x00}},
		{2, [3]byte{0xc4, 0xab, 0x00}}, {2, [3]byte{0xc4, 0xbc, 0x00}},
		{2, [3]byte{0xc5, 0xa1, 0x00}}, {2, [3]byte{0xc5, 0x84, 0x00}},
		{2, [3]byte{0xc5, 0x86, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
		{2, [3]byte{0xc5, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
		{2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
		{2, [3]byte{0xc5, 0xb3, 0x00}}, {2, [3]byte{0xc5, 0x82, 0x00}},
		{2, [3]byte{0xc5, 0x9b, 0x00}}, {2, [3]byte{0xc5, 0xab, 0x00}},
		{2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc5, 0xbc, 0x00}},
		{2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xcb, 0x99, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xa00000a0, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa60000a6, 0xa70000a7, 0x8d0000a8, 0xa90000a9,
		0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0x9d0000af, 0xb00000b0, 0xb10000b1, 0xb20000b2,
		0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, 0x8f0000b8, 0xb90000b9, 0xbb0000bb,
		0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xc40000c4, 0xc50000c5, 0xaf0000c6, 0xc90000c9, 0xd30000d3,
		0xd50000d5, 0xd60000d6, 0xd70000d7, 0xa80000d8, 0xdc0000dc, 0xdf0000df, 0xe40000e4, 0xe50000e5,
		0xbf0000e6, 0xe90000e9, 0xf30000f3, 0xf50000f5, 0xf60000f6, 0xf70000f7, 0xb80000f8, 0xfc0000fc,
		0xc2000100, 0xe2000101, 0xc0000104, 0xe0000105, 0xc3000106, 0xe3000107, 0xc800010c, 0xe800010d,
		0xc7000112, 0xe7000113, 0xcb000116, 0xeb000117, 0xc6000118, 0xe6000119, 0xcc000122, 0xec000123,
		0xce00012a, 0xee00012b, 0xc100012e, 0xe100012f, 0xcd000136, 0xed000137, 0xcf00013b, 0xef00013c,
		0xd9000141, 0xf9000142, 0xd1000143, 0xf1000144, 0xd2000145, 0xf2000146, 0xd400014c, 0xf400014d,
		0xaa000156, 0xba000157, 0xda00015a, 0xfa00015b, 0xd0000160, 0xf0000161, 0xdb00016a, 0xfb00016b,
		0xd8000172, 0xf8000173, 0xca000179, 0xea00017a, 0xdd00017b, 0xfd00017c, 0xde00017d, 0xfe00017e,
		0x8e0002c7, 0xff0002d9, 0x9e0002db, 0x96002013, 0x97002014, 0x91002018, 0x92002019, 0x8200201a,
		0x9300201c, 0x9400201d, 0x8400201e, 0x86002020, 0x87002021, 0x95002022, 0x85002026, 0x89002030,
		0x8b002039, 0x9b00203a, 0x800020ac, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122,
		0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122,
	},
}

// Windows1258 is the Windows 1258 encoding.
var Windows1258 *Charmap = &windows1258

var windows1258 = Charmap{
	name:          "Windows 1258",
	mib:           identifier.Windows1258,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xc6, 0x92, 0x00}},
		{3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}},
		{3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}},
		{2, [3]byte{0xcb, 0x86, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb0}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb9}},
		{2, [3]byte{0xc5, 0x92, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}},
		{3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}},
		{3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}},
		{3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}},
		{2, [3]byte{0xcb, 0x9c, 0x00}}, {3, [3]byte{0xe2, 0x84, 0xa2}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xba}},
		{2, [3]byte{0xc5, 0x93, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
		{3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc5, 0xb8, 0x00}},
		{2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
		{2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
		{2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}},
		{2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
		{2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
		{2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
		{2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
		{2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}},
		{2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
		{2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
		{2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
		{2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
		{2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}},
		{2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
		{2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
		{2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}},
		{2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
		{2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc4, 0x82, 0x00}},
		{2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
		{2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}},
		{2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
		{2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
		{2, [3]byte{0xcc, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
		{2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
		{2, [3]byte{0xc4, 0x90, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
		{2, [3]byte{0xcc, 0x89, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
		{2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc6, 0xa0, 0x00}},
		{2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
		{2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
		{2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
		{2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc6, 0xaf, 0x00}},
		{2, [3]byte{0xcc, 0x83, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
		{2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
		{2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc4, 0x83, 0x00}},
		{2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
		{2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
		{2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
		{2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
		{2, [3]byte{0xcc, 0x81, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
		{2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
		{2, [3]byte{0xc4, 0x91, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}},
		{2, [3]byte{0xcc, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
		{2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc6, 0xa1, 0x00}},
		{2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
		{2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
		{2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
		{2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc6, 0xb0, 0x00}},
		{3, [3]byte{0xe2, 0x82, 0xab}}, {2, [3]byte{0xc3, 0xbf, 0x00}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7,
		0xa80000a8, 0xa90000a9, 0xaa0000aa, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af,
		0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7,
		0xb80000b8, 0xb90000b9, 0xba0000ba, 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xbf0000bf,
		0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7, 0xc80000c8,
		0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcd0000cd, 0xce0000ce, 0xcf0000cf, 0xd10000d1, 0xd30000d3,
		0xd40000d4, 0xd60000d6, 0xd70000d7, 0xd80000d8, 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc,
		0xdf0000df, 0xe00000e0, 0xe10000e1, 0xe20000e2, 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7,
		0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf10000f1,
		0xf30000f3, 0xf40000f4, 0xf60000f6, 0xf70000f7, 0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb,
		0xfc0000fc, 0xff0000ff, 0xc3000102, 0xe3000103, 0xd0000110, 0xf0000111, 0x8c000152, 0x9c000153,
		0x9f000178, 0x83000192, 0xd50001a0, 0xf50001a1, 0xdd0001af, 0xfd0001b0, 0x880002c6, 0x980002dc,
		0xcc000300, 0xec000301, 0xde000303, 0xd2000309, 0xf2000323, 0x96002013, 0x97002014, 0x91002018,
		0x92002019, 0x8200201a, 0x9300201c, 0x9400201d, 0x8400201e, 0x86002020, 0x87002021, 0x95002022,
		0x85002026, 0x89002030, 0x8b002039, 0x9b00203a, 0xfe0020ab, 0x800020ac, 0x99002122, 0x99002122,
		0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122,
	},
}

// XUserDefined is the X-User-Defined encoding.
//
// It is defined at http://encoding.spec.whatwg.org/#x-user-defined
var XUserDefined *Charmap = &xUserDefined

var xUserDefined = Charmap{
	name:          "X-User-Defined",
	mib:           identifier.XUserDefined,
	asciiSuperset: true,
	low:           0x80,
	replacement:   0x1a,
	decode: [256]utf8Enc{
		{1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
		{1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
		{1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
		{1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
		{1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
		{1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
		{1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
		{1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
		{1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
		{1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
		{1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
		{1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
		{1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
		{1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
		{1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
		{1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
		{1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
		{1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
		{1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
		{1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
		{1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
		{1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
		{1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
		{1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
		{1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
		{1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
		{1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
		{1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
		{1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
		{1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
		{1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
		{1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
		{1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
		{1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
		{1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
		{1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
		{1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
		{1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
		{1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
		{1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
		{1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
		{1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
		{1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
		{1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
		{1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
		{1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
		{1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
		{1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
		{1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
		{1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
		{1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
		{1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
		{1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
		{1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
		{1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
		{1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
		{1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
		{1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
		{1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
		{1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
		{1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
		{1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
		{1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
		{1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
		{3, [3]byte{0xef, 0x9e, 0x80}}, {3, [3]byte{0xef, 0x9e, 0x81}},
		{3, [3]byte{0xef, 0x9e, 0x82}}, {3, [3]byte{0xef, 0x9e, 0x83}},
		{3, [3]byte{0xef, 0x9e, 0x84}}, {3, [3]byte{0xef, 0x9e, 0x85}},
		{3, [3]byte{0xef, 0x9e, 0x86}}, {3, [3]byte{0xef, 0x9e, 0x87}},
		{3, [3]byte{0xef, 0x9e, 0x88}}, {3, [3]byte{0xef, 0x9e, 0x89}},
		{3, [3]byte{0xef, 0x9e, 0x8a}}, {3, [3]byte{0xef, 0x9e, 0x8b}},
		{3, [3]byte{0xef, 0x9e, 0x8c}}, {3, [3]byte{0xef, 0x9e, 0x8d}},
		{3, [3]byte{0xef, 0x9e, 0x8e}}, {3, [3]byte{0xef, 0x9e, 0x8f}},
		{3, [3]byte{0xef, 0x9e, 0x90}}, {3, [3]byte{0xef, 0x9e, 0x91}},
		{3, [3]byte{0xef, 0x9e, 0x92}}, {3, [3]byte{0xef, 0x9e, 0x93}},
		{3, [3]byte{0xef, 0x9e, 0x94}}, {3, [3]byte{0xef, 0x9e, 0x95}},
		{3, [3]byte{0xef, 0x9e, 0x96}}, {3, [3]byte{0xef, 0x9e, 0x97}},
		{3, [3]byte{0xef, 0x9e, 0x98}}, {3, [3]byte{0xef, 0x9e, 0x99}},
		{3, [3]byte{0xef, 0x9e, 0x9a}}, {3, [3]byte{0xef, 0x9e, 0x9b}},
		{3, [3]byte{0xef, 0x9e, 0x9c}}, {3, [3]byte{0xef, 0x9e, 0x9d}},
		{3, [3]byte{0xef, 0x9e, 0x9e}}, {3, [3]byte{0xef, 0x9e, 0x9f}},
		{3, [3]byte{0xef, 0x9e, 0xa0}}, {3, [3]byte{0xef, 0x9e, 0xa1}},
		{3, [3]byte{0xef, 0x9e, 0xa2}}, {3, [3]byte{0xef, 0x9e, 0xa3}},
		{3, [3]byte{0xef, 0x9e, 0xa4}}, {3, [3]byte{0xef, 0x9e, 0xa5}},
		{3, [3]byte{0xef, 0x9e, 0xa6}}, {3, [3]byte{0xef, 0x9e, 0xa7}},
		{3, [3]byte{0xef, 0x9e, 0xa8}}, {3, [3]byte{0xef, 0x9e, 0xa9}},
		{3, [3]byte{0xef, 0x9e, 0xaa}}, {3, [3]byte{0xef, 0x9e, 0xab}},
		{3, [3]byte{0xef, 0x9e, 0xac}}, {3, [3]byte{0xef, 0x9e, 0xad}},
		{3, [3]byte{0xef, 0x9e, 0xae}}, {3, [3]byte{0xef, 0x9e, 0xaf}},
		{3, [3]byte{0xef, 0x9e, 0xb0}}, {3, [3]byte{0xef, 0x9e, 0xb1}},
		{3, [3]byte{0xef, 0x9e, 0xb2}}, {3, [3]byte{0xef, 0x9e, 0xb3}},
		{3, [3]byte{0xef, 0x9e, 0xb4}}, {3, [3]byte{0xef, 0x9e, 0xb5}},
		{3, [3]byte{0xef, 0x9e, 0xb6}}, {3, [3]byte{0xef, 0x9e, 0xb7}},
		{3, [3]byte{0xef, 0x9e, 0xb8}}, {3, [3]byte{0xef, 0x9e, 0xb9}},
		{3, [3]byte{0xef, 0x9e, 0xba}}, {3, [3]byte{0xef, 0x9e, 0xbb}},
		{3, [3]byte{0xef, 0x9e, 0xbc}}, {3, [3]byte{0xef, 0x9e, 0xbd}},
		{3, [3]byte{0xef, 0x9e, 0xbe}}, {3, [3]byte{0xef, 0x9e, 0xbf}},
		{3, [3]byte{0xef, 0x9f, 0x80}}, {3, [3]byte{0xef, 0x9f, 0x81}},
		{3, [3]byte{0xef, 0x9f, 0x82}}, {3, [3]byte{0xef, 0x9f, 0x83}},
		{3, [3]byte{0xef, 0x9f, 0x84}}, {3, [3]byte{0xef, 0x9f, 0x85}},
		{3, [3]byte{0xef, 0x9f, 0x86}}, {3, [3]byte{0xef, 0x9f, 0x87}},
		{3, [3]byte{0xef, 0x9f, 0x88}}, {3, [3]byte{0xef, 0x9f, 0x89}},
		{3, [3]byte{0xef, 0x9f, 0x8a}}, {3, [3]byte{0xef, 0x9f, 0x8b}},
		{3, [3]byte{0xef, 0x9f, 0x8c}}, {3, [3]byte{0xef, 0x9f, 0x8d}},
		{3, [3]byte{0xef, 0x9f, 0x8e}}, {3, [3]byte{0xef, 0x9f, 0x8f}},
		{3, [3]byte{0xef, 0x9f, 0x90}}, {3, [3]byte{0xef, 0x9f, 0x91}},
		{3, [3]byte{0xef, 0x9f, 0x92}}, {3, [3]byte{0xef, 0x9f, 0x93}},
		{3, [3]byte{0xef, 0x9f, 0x94}}, {3, [3]byte{0xef, 0x9f, 0x95}},
		{3, [3]byte{0xef, 0x9f, 0x96}}, {3, [3]byte{0xef, 0x9f, 0x97}},
		{3, [3]byte{0xef, 0x9f, 0x98}}, {3, [3]byte{0xef, 0x9f, 0x99}},
		{3, [3]byte{0xef, 0x9f, 0x9a}}, {3, [3]byte{0xef, 0x9f, 0x9b}},
		{3, [3]byte{0xef, 0x9f, 0x9c}}, {3, [3]byte{0xef, 0x9f, 0x9d}},
		{3, [3]byte{0xef, 0x9f, 0x9e}}, {3, [3]byte{0xef, 0x9f, 0x9f}},
		{3, [3]byte{0xef, 0x9f, 0xa0}}, {3, [3]byte{0xef, 0x9f, 0xa1}},
		{3, [3]byte{0xef, 0x9f, 0xa2}}, {3, [3]byte{0xef, 0x9f, 0xa3}},
		{3, [3]byte{0xef, 0x9f, 0xa4}}, {3, [3]byte{0xef, 0x9f, 0xa5}},
		{3, [3]byte{0xef, 0x9f, 0xa6}}, {3, [3]byte{0xef, 0x9f, 0xa7}},
		{3, [3]byte{0xef, 0x9f, 0xa8}}, {3, [3]byte{0xef, 0x9f, 0xa9}},
		{3, [3]byte{0xef, 0x9f, 0xaa}}, {3, [3]byte{0xef, 0x9f, 0xab}},
		{3, [3]byte{0xef, 0x9f, 0xac}}, {3, [3]byte{0xef, 0x9f, 0xad}},
		{3, [3]byte{0xef, 0x9f, 0xae}}, {3, [3]byte{0xef, 0x9f, 0xaf}},
		{3, [3]byte{0xef, 0x9f, 0xb0}}, {3, [3]byte{0xef, 0x9f, 0xb1}},
		{3, [3]byte{0xef, 0x9f, 0xb2}}, {3, [3]byte{0xef, 0x9f, 0xb3}},
		{3, [3]byte{0xef, 0x9f, 0xb4}}, {3, [3]byte{0xef, 0x9f, 0xb5}},
		{3, [3]byte{0xef, 0x9f, 0xb6}}, {3, [3]byte{0xef, 0x9f, 0xb7}},
		{3, [3]byte{0xef, 0x9f, 0xb8}}, {3, [3]byte{0xef, 0x9f, 0xb9}},
		{3, [3]byte{0xef, 0x9f, 0xba}}, {3, [3]byte{0xef, 0x9f, 0xbb}},
		{3, [3]byte{0xef, 0x9f, 0xbc}}, {3, [3]byte{0xef, 0x9f, 0xbd}},
		{3, [3]byte{0xef, 0x9f, 0xbe}}, {3, [3]byte{0xef, 0x9f, 0xbf}},
	},
	encode: [256]uint32{
		0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
		0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
		0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
		0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
		0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
		0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
		0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
		0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
		0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
		0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
		0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
		0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
		0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
		0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
		0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
		0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
		0x8000f780, 0x8100f781, 0x8200f782, 0x8300f783, 0x8400f784, 0x8500f785, 0x8600f786, 0x8700f787,
		0x8800f788, 0x8900f789, 0x8a00f78a, 0x8b00f78b, 0x8c00f78c, 0x8d00f78d, 0x8e00f78e, 0x8f00f78f,
		0x9000f790, 0x9100f791, 0x9200f792, 0x9300f793, 0x9400f794, 0x9500f795, 0x9600f796, 0x9700f797,
		0x9800f798, 0x9900f799, 0x9a00f79a, 0x9b00f79b, 0x9c00f79c, 0x9d00f79d, 0x9e00f79e, 0x9f00f79f,
		0xa000f7a0, 0xa100f7a1, 0xa200f7a2, 0xa300f7a3, 0xa400f7a4, 0xa500f7a5, 0xa600f7a6, 0xa700f7a7,
		0xa800f7a8, 0xa900f7a9, 0xaa00f7aa, 0xab00f7ab, 0xac00f7ac, 0xad00f7ad, 0xae00f7ae, 0xaf00f7af,
		0xb000f7b0, 0xb100f7b1, 0xb200f7b2, 0xb300f7b3, 0xb400f7b4, 0xb500f7b5, 0xb600f7b6, 0xb700f7b7,
		0xb800f7b8, 0xb900f7b9, 0xba00f7ba, 0xbb00f7bb, 0xbc00f7bc, 0xbd00f7bd, 0xbe00f7be, 0xbf00f7bf,
		0xc000f7c0, 0xc100f7c1, 0xc200f7c2, 0xc300f7c3, 0xc400f7c4, 0xc500f7c5, 0xc600f7c6, 0xc700f7c7,
		0xc800f7c8, 0xc900f7c9, 0xca00f7ca, 0xcb00f7cb, 0xcc00f7cc, 0xcd00f7cd, 0xce00f7ce, 0xcf00f7cf,
		0xd000f7d0, 0xd100f7d1, 0xd200f7d2, 0xd300f7d3, 0xd400f7d4, 0xd500f7d5, 0xd600f7d6, 0xd700f7d7,
		0xd800f7d8, 0xd900f7d9, 0xda00f7da, 0xdb00f7db, 0xdc00f7dc, 0xdd00f7dd, 0xde00f7de, 0xdf00f7df,
		0xe000f7e0, 0xe100f7e1, 0xe200f7e2, 0xe300f7e3, 0xe400f7e4, 0xe500f7e5, 0xe600f7e6, 0xe700f7e7,
		0xe800f7e8, 0xe900f7e9, 0xea00f7ea, 0xeb00f7eb, 0xec00f7ec, 0xed00f7ed, 0xee00f7ee, 0xef00f7ef,
		0xf000f7f0, 0xf100f7f1, 0xf200f7f2, 0xf300f7f3, 0xf400f7f4, 0xf500f7f5, 0xf600f7f6, 0xf700f7f7,
		0xf800f7f8, 0xf900f7f9, 0xfa00f7fa, 0xfb00f7fb, 0xfc00f7fc, 0xfd00f7fd, 0xfe00f7fe, 0xff00f7ff,
	},
}
var listAll = []encoding.Encoding{
	CodePage037,
	CodePage437,
	CodePage850,
	CodePage852,
	CodePage855,
	CodePage858,
	CodePage860,
	CodePage862,
	CodePage863,
	CodePage865,
	CodePage866,
	CodePage1047,
	CodePage1140,
	ISO8859_1,
	ISO8859_2,
	ISO8859_3,
	ISO8859_4,
	ISO8859_5,
	ISO8859_6,
	ISO8859_6E,
	ISO8859_6I,
	ISO8859_7,
	ISO8859_8,
	ISO8859_8E,
	ISO8859_8I,
	ISO8859_9,
	ISO8859_10,
	ISO8859_13,
	ISO8859_14,
	ISO8859_15,
	ISO8859_16,
	KOI8R,
	KOI8U,
	Macintosh,
	MacintoshCyrillic,
	Windows874,
	Windows1250,
	Windows1251,
	Windows1252,
	Windows1253,
	Windows1254,
	Windows1255,
	Windows1256,
	Windows1257,
	Windows1258,
	XUserDefined,
}

// Total table size 87024 bytes (84KiB); checksum: 811C9DC5
  07070100000EF8000081A4000000000000000000000001645E367C000025DF000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/encoding.go // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package encoding defines an interface for character encodings, such as Shift
// JIS and Windows 1252, that can convert to and from UTF-8.
//
// Encoding implementations are provided in other packages, such as
// golang.org/x/text/encoding/charmap and
// golang.org/x/text/encoding/japanese.
package encoding // import "golang.org/x/text/encoding"

import (
	"errors"
	"io"
	"strconv"
	"unicode/utf8"

	"golang.org/x/text/encoding/internal/identifier"
	"golang.org/x/text/transform"
)

// TODO:
// - There seems to be some inconsistency in when decoders return errors
//   and when not. Also documentation seems to suggest they shouldn't return
//   errors at all (except for UTF-16).
// - Encoders seem to rely on or at least benefit from the input being in NFC
//   normal form. Perhaps add an example how users could prepare their output.

// Encoding is a character set encoding that can be transformed to and from
// UTF-8.
type Encoding interface {
	// NewDecoder returns a Decoder.
	NewDecoder() *Decoder

	// NewEncoder returns an Encoder.
	NewEncoder() *Encoder
}

// A Decoder converts bytes to UTF-8. It implements transform.Transformer.
//
// Transforming source bytes that are not of that encoding will not result in an
// error per se. Each byte that cannot be transcoded will be represented in the
// output by the UTF-8 encoding of '\uFFFD', the replacement rune.
type Decoder struct {
	transform.Transformer

	// This forces external creators of Decoders to use names in struct
	// initializers, allowing for future extendibility without having to break
	// code.
	_ struct{}
}

// Bytes converts the given encoded bytes to UTF-8. It returns the converted
// bytes or nil, err if any error occurred.
func (d *Decoder) Bytes(b []byte) ([]byte, error) {
	b, _, err := transform.Bytes(d, b)
	if err != nil {
		return nil, err
	}
	return b, nil
}

// String converts the given encoded string to UTF-8. It returns the converted
// string or "", err if any error occurred.
func (d *Decoder) String(s string) (string, error) {
	s, _, err := transform.String(d, s)
	if err != nil {
		return "", err
	}
	return s, nil
}

// Reader wraps another Reader to decode its bytes.
//
// The Decoder may not be used for any other operation as long as the returned
// Reader is in use.
func (d *Decoder) Reader(r io.Reader) io.Reader {
	return transform.NewReader(r, d)
}

// An Encoder converts bytes from UTF-8. It implements transform.Transformer.
//
// Each rune that cannot be transcoded will result in an error. In this case,
// the transform will consume all source byte up to, not including the offending
// rune. Transforming source bytes that are not valid UTF-8 will be replaced by
// `\uFFFD`. To return early with an error instead, use transform.Chain to
// preprocess the data with a UTF8Validator.
type Encoder struct {
	transform.Transformer

	// This forces external creators of Encoders to use names in struct
	// initializers, allowing for future extendibility without having to break
	// code.
	_ struct{}
}

// Bytes converts bytes from UTF-8. It returns the converted bytes or nil, err if
// any error occurred.
func (e *Encoder) Bytes(b []byte) ([]byte, error) {
	b, _, err := transform.Bytes(e, b)
	if err != nil {
		return nil, err
	}
	return b, nil
}

// String converts a string from UTF-8. It returns the converted string or
// "", err if any error occurred.
func (e *Encoder) String(s string) (string, error) {
	s, _, err := transform.String(e, s)
	if err != nil {
		return "", err
	}
	return s, nil
}

// Writer wraps another Writer to encode its UTF-8 output.
//
// The Encoder may not be used for any other operation as long as the returned
// Writer is in use.
func (e *Encoder) Writer(w io.Writer) io.Writer {
	return transform.NewWriter(w, e)
}

// ASCIISub is the ASCII substitute character, as recommended by
// https://unicode.org/reports/tr36/#Text_Comparison
const ASCIISub = '\x1a'

// Nop is the nop encoding. Its transformed bytes are the same as the source
// bytes; it does not replace invalid UTF-8 sequences.
var Nop Encoding = nop{}

type nop struct{}

func (nop) NewDecoder() *Decoder {
	return &Decoder{Transformer: transform.Nop}
}
func (nop) NewEncoder() *Encoder {
	return &Encoder{Transformer: transform.Nop}
}

// Replacement is the replacement encoding. Decoding from the replacement
// encoding yields a single '\uFFFD' replacement rune. Encoding from UTF-8 to
// the replacement encoding yields the same as the source bytes except that
// invalid UTF-8 is converted to '\uFFFD'.
//
// It is defined at http://encoding.spec.whatwg.org/#replacement
var Replacement Encoding = replacement{}

type replacement struct{}

func (replacement) NewDecoder() *Decoder {
	return &Decoder{Transformer: replacementDecoder{}}
}

func (replacement) NewEncoder() *Encoder {
	return &Encoder{Transformer: replacementEncoder{}}
}

func (replacement) ID() (mib identifier.MIB, other string) {
	return identifier.Replacement, ""
}

type replacementDecoder struct{ transform.NopResetter }

func (replacementDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	if len(dst) < 3 {
		return 0, 0, transform.ErrShortDst
	}
	if atEOF {
		const fffd = "\ufffd"
		dst[0] = fffd[0]
		dst[1] = fffd[1]
		dst[2] = fffd[2]
		nDst = 3
	}
	return nDst, len(src), nil
}

type replacementEncoder struct{ transform.NopResetter }

func (replacementEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	r, size := rune(0), 0

	for ; nSrc < len(src); nSrc += size {
		r = rune(src[nSrc])

		// Decode a 1-byte rune.
		if r < utf8.RuneSelf {
			size = 1

		} else {
			// Decode a multi-byte rune.
			r, size = utf8.DecodeRune(src[nSrc:])
			if size == 1 {
				// All valid runes of size 1 (those below utf8.RuneSelf) were
				// handled above. We have invalid UTF-8 or we haven't seen the
				// full character yet.
				if !atEOF && !utf8.FullRune(src[nSrc:]) {
					err = transform.ErrShortSrc
					break
				}
				r = '\ufffd'
			}
		}

		if nDst+utf8.RuneLen(r) > len(dst) {
			err = transform.ErrShortDst
			break
		}
		nDst += utf8.EncodeRune(dst[nDst:], r)
	}
	return nDst, nSrc, err
}

// HTMLEscapeUnsupported wraps encoders to replace source runes outside the
// repertoire of the destination encoding with HTML escape sequences.
//
// This wrapper exists to comply to URL and HTML forms requiring a
// non-terminating legacy encoder. The produced sequences may lead to data
// loss as they are indistinguishable from legitimate input. To avoid this
// issue, use UTF-8 encodings whenever possible.
func HTMLEscapeUnsupported(e *Encoder) *Encoder {
	return &Encoder{Transformer: &errorHandler{e, errorToHTML}}
}

// ReplaceUnsupported wraps encoders to replace source runes outside the
// repertoire of the destination encoding with an encoding-specific
// replacement.
//
// This wrapper is only provided for backwards compatibility and legacy
// handling. Its use is strongly discouraged. Use UTF-8 whenever possible.
func ReplaceUnsupported(e *Encoder) *Encoder {
	return &Encoder{Transformer: &errorHandler{e, errorToReplacement}}
}

type errorHandler struct {
	*Encoder
	handler func(dst []byte, r rune, err repertoireError) (n int, ok bool)
}

// TODO: consider making this error public in some form.
type repertoireError interface {
	Replacement() byte
}

func (h errorHandler) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	nDst, nSrc, err = h.Transformer.Transform(dst, src, atEOF)
	for err != nil {
		rerr, ok := err.(repertoireError)
		if !ok {
			return nDst, nSrc, err
		}
		r, sz := utf8.DecodeRune(src[nSrc:])
		n, ok := h.handler(dst[nDst:], r, rerr)
		if !ok {
			return nDst, nSrc, transform.ErrShortDst
		}
		err = nil
		nDst += n
		if nSrc += sz; nSrc < len(src) {
			var dn, sn int
			dn, sn, err = h.Transformer.Transform(dst[nDst:], src[nSrc:], atEOF)
			nDst += dn
			nSrc += sn
		}
	}
	return nDst, nSrc, err
}

func errorToHTML(dst []byte, r rune, err repertoireError) (n int, ok bool) {
	buf := [8]byte{}
	b := strconv.AppendUint(buf[:0], uint64(r), 10)
	if n = len(b) + len("&#;"); n >= len(dst) {
		return 0, false
	}
	dst[0] = '&'
	dst[1] = '#'
	dst[copy(dst[2:], b)+2] = ';'
	return n, true
}

func errorToReplacement(dst []byte, r rune, err repertoireError) (n int, ok bool) {
	if len(dst) == 0 {
		return 0, false
	}
	dst[0] = err.Replacement()
	return 1, true
}

// ErrInvalidUTF8 means that a transformer encountered invalid UTF-8.
var ErrInvalidUTF8 = errors.New("encoding: invalid UTF-8")

// UTF8Validator is a transformer that returns ErrInvalidUTF8 on the first
// input byte that is not valid UTF-8.
var UTF8Validator transform.Transformer = utf8Validator{}

type utf8Validator struct{ transform.NopResetter }

func (utf8Validator) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	n := len(src)
	if n > len(dst) {
		n = len(dst)
	}
	for i := 0; i < n; {
		if c := src[i]; c < utf8.RuneSelf {
			dst[i] = c
			i++
			continue
		}
		_, size := utf8.DecodeRune(src[i:])
		if size == 1 {
			// All valid runes of size 1 (those below utf8.RuneSelf) were
			// handled above. We have invalid UTF-8 or we haven't seen the
			// full character yet.
			err = ErrInvalidUTF8
			if !atEOF && !utf8.FullRune(src[i:]) {
				err = transform.ErrShortSrc
			}
			return i, i, err
		}
		if i+size > len(dst) {
			return i, i, transform.ErrShortDst
		}
		for ; size > 0; size-- {
			dst[i] = src[i]
			i++
		}
	}
	if len(src) > len(dst) {
		err = transform.ErrShortDst
	}
	return n, n, err
}
 07070100000EF9000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/htmlindex   07070100000EFA000081A4000000000000000000000001645E367C00000A39000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/htmlindex/htmlindex.go  // Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:generate go run gen.go

// Package htmlindex maps character set encoding names to Encodings as
// recommended by the W3C for use in HTML 5. See http://www.w3.org/TR/encoding.
package htmlindex

// TODO: perhaps have a "bare" version of the index (used by this package) that
// is not pre-loaded with all encodings. Global variables in encodings prevent
// the linker from being able to purge unneeded tables. This means that
// referencing all encodings, as this package does for the default index, links
// in all encodings unconditionally.
//
// This issue can be solved by either solving the linking issue (see
// https://github.com/golang/go/issues/6330) or refactoring the encoding tables
// (e.g. moving the tables to internal packages that do not use global
// variables).

// TODO: allow canonicalizing names

import (
	"errors"
	"strings"
	"sync"

	"golang.org/x/text/encoding"
	"golang.org/x/text/encoding/internal/identifier"
	"golang.org/x/text/language"
)

var (
	errInvalidName = errors.New("htmlindex: invalid encoding name")
	errUnknown     = errors.New("htmlindex: unknown Encoding")
	errUnsupported = errors.New("htmlindex: this encoding is not supported")
)

var (
	matcherOnce sync.Once
	matcher     language.Matcher
)

// LanguageDefault returns the canonical name of the default encoding for a
// given language.
func LanguageDefault(tag language.Tag) string {
	matcherOnce.Do(func() {
		tags := []language.Tag{}
		for _, t := range strings.Split(locales, " ") {
			tags = append(tags, language.MustParse(t))
		}
		matcher = language.NewMatcher(tags, language.PreferSameScript(true))
	})
	_, i, _ := matcher.Match(tag)
	return canonical[localeMap[i]] // Default is Windows-1252.
}

// Get returns an Encoding for one of the names listed in
// http://www.w3.org/TR/encoding using the Default Index. Matching is case-
// insensitive.
func Get(name string) (encoding.Encoding, error) {
	x, ok := nameMap[strings.ToLower(strings.TrimSpace(name))]
	if !ok {
		return nil, errInvalidName
	}
	return encodings[x], nil
}

// Name reports the canonical name of the given Encoding. It will return
// an error if e is not associated with a supported encoding scheme.
func Name(e encoding.Encoding) (string, error) {
	id, ok := e.(identifier.Interface)
	if !ok {
		return "", errUnknown
	}
	mib, _ := id.ID()
	if mib == 0 {
		return "", errUnknown
	}
	v, ok := mibMap[mib]
	if !ok {
		return "", errUnsupported
	}
	return canonical[v], nil
}
   07070100000EFB000081A4000000000000000000000001645E367C00001033000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/htmlindex/map.go    // Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package htmlindex

import (
	"golang.org/x/text/encoding"
	"golang.org/x/text/encoding/charmap"
	"golang.org/x/text/encoding/internal/identifier"
	"golang.org/x/text/encoding/japanese"
	"golang.org/x/text/encoding/korean"
	"golang.org/x/text/encoding/simplifiedchinese"
	"golang.org/x/text/encoding/traditionalchinese"
	"golang.org/x/text/encoding/unicode"
)

// mibMap maps a MIB identifier to an htmlEncoding index.
var mibMap = map[identifier.MIB]htmlEncoding{
	identifier.UTF8:              utf8,
	identifier.UTF16BE:           utf16be,
	identifier.UTF16LE:           utf16le,
	identifier.IBM866:            ibm866,
	identifier.ISOLatin2:         iso8859_2,
	identifier.ISOLatin3:         iso8859_3,
	identifier.ISOLatin4:         iso8859_4,
	identifier.ISOLatinCyrillic:  iso8859_5,
	identifier.ISOLatinArabic:    iso8859_6,
	identifier.ISOLatinGreek:     iso8859_7,
	identifier.ISOLatinHebrew:    iso8859_8,
	identifier.ISO88598I:         iso8859_8I,
	identifier.ISOLatin6:         iso8859_10,
	identifier.ISO885913:         iso8859_13,
	identifier.ISO885914:         iso8859_14,
	identifier.ISO885915:         iso8859_15,
	identifier.ISO885916:         iso8859_16,
	identifier.KOI8R:             koi8r,
	identifier.KOI8U:             koi8u,
	identifier.Macintosh:         macintosh,
	identifier.MacintoshCyrillic: macintoshCyrillic,
	identifier.Windows874:        windows874,
	identifier.Windows1250:       windows1250,
	identifier.Windows1251:       windows1251,
	identifier.Windows1252:       windows1252,
	identifier.Windows1253:       windows1253,
	identifier.Windows1254:       windows1254,
	identifier.Windows1255:       windows1255,
	identifier.Windows1256:       windows1256,
	identifier.Windows1257:       windows1257,
	identifier.Windows1258:       windows1258,
	identifier.XUserDefined:      xUserDefined,
	identifier.GBK:               gbk,
	identifier.GB18030:           gb18030,
	identifier.Big5:              big5,
	identifier.EUCPkdFmtJapanese: eucjp,
	identifier.ISO2022JP:         iso2022jp,
	identifier.ShiftJIS:          shiftJIS,
	identifier.EUCKR:             euckr,
	identifier.Replacement:       replacement,
}

// encodings maps the internal htmlEncoding to an Encoding.
// TODO: consider using a reusable index in encoding/internal.
var encodings = [numEncodings]encoding.Encoding{
	utf8:              unicode.UTF8,
	ibm866:            charmap.CodePage866,
	iso8859_2:         charmap.ISO8859_2,
	iso8859_3:         charmap.ISO8859_3,
	iso8859_4:         charmap.ISO8859_4,
	iso8859_5:         charmap.ISO8859_5,
	iso8859_6:         charmap.ISO8859_6,
	iso8859_7:         charmap.ISO8859_7,
	iso8859_8:         charmap.ISO8859_8,
	iso8859_8I:        charmap.ISO8859_8I,
	iso8859_10:        charmap.ISO8859_10,
	iso8859_13:        charmap.ISO8859_13,
	iso8859_14:        charmap.ISO8859_14,
	iso8859_15:        charmap.ISO8859_15,
	iso8859_16:        charmap.ISO8859_16,
	koi8r:             charmap.KOI8R,
	koi8u:             charmap.KOI8U,
	macintosh:         charmap.Macintosh,
	windows874:        charmap.Windows874,
	windows1250:       charmap.Windows1250,
	windows1251:       charmap.Windows1251,
	windows1252:       charmap.Windows1252,
	windows1253:       charmap.Windows1253,
	windows1254:       charmap.Windows1254,
	windows1255:       charmap.Windows1255,
	windows1256:       charmap.Windows1256,
	windows1257:       charmap.Windows1257,
	windows1258:       charmap.Windows1258,
	macintoshCyrillic: charmap.MacintoshCyrillic,
	gbk:               simplifiedchinese.GBK,
	gb18030:           simplifiedchinese.GB18030,
	big5:              traditionalchinese.Big5,
	eucjp:             japanese.EUCJP,
	iso2022jp:         japanese.ISO2022JP,
	shiftJIS:          japanese.ShiftJIS,
	euckr:             korean.EUCKR,
	replacement:       encoding.Replacement,
	utf16be:           unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM),
	utf16le:           unicode.UTF16(unicode.LittleEndian, unicode.IgnoreBOM),
	xUserDefined:      charmap.XUserDefined,
}
 07070100000EFC000081A4000000000000000000000001645E367C00002747000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/htmlindex/tables.go // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.

package htmlindex

type htmlEncoding byte

const (
	utf8 htmlEncoding = iota
	ibm866
	iso8859_2
	iso8859_3
	iso8859_4
	iso8859_5
	iso8859_6
	iso8859_7
	iso8859_8
	iso8859_8I
	iso8859_10
	iso8859_13
	iso8859_14
	iso8859_15
	iso8859_16
	koi8r
	koi8u
	macintosh
	windows874
	windows1250
	windows1251
	windows1252
	windows1253
	windows1254
	windows1255
	windows1256
	windows1257
	windows1258
	macintoshCyrillic
	gbk
	gb18030
	big5
	eucjp
	iso2022jp
	shiftJIS
	euckr
	replacement
	utf16be
	utf16le
	xUserDefined
	numEncodings
)

var canonical = [numEncodings]string{
	"utf-8",
	"ibm866",
	"iso-8859-2",
	"iso-8859-3",
	"iso-8859-4",
	"iso-8859-5",
	"iso-8859-6",
	"iso-8859-7",
	"iso-8859-8",
	"iso-8859-8-i",
	"iso-8859-10",
	"iso-8859-13",
	"iso-8859-14",
	"iso-8859-15",
	"iso-8859-16",
	"koi8-r",
	"koi8-u",
	"macintosh",
	"windows-874",
	"windows-1250",
	"windows-1251",
	"windows-1252",
	"windows-1253",
	"windows-1254",
	"windows-1255",
	"windows-1256",
	"windows-1257",
	"windows-1258",
	"x-mac-cyrillic",
	"gbk",
	"gb18030",
	"big5",
	"euc-jp",
	"iso-2022-jp",
	"shift_jis",
	"euc-kr",
	"replacement",
	"utf-16be",
	"utf-16le",
	"x-user-defined",
}

var nameMap = map[string]htmlEncoding{
	"unicode-1-1-utf-8":   utf8,
	"unicode11utf8":       utf8,
	"unicode20utf8":       utf8,
	"utf-8":               utf8,
	"utf8":                utf8,
	"x-unicode20utf8":     utf8,
	"866":                 ibm866,
	"cp866":               ibm866,
	"csibm866":            ibm866,
	"ibm866":              ibm866,
	"csisolatin2":         iso8859_2,
	"iso-8859-2":          iso8859_2,
	"iso-ir-101":          iso8859_2,
	"iso8859-2":           iso8859_2,
	"iso88592":            iso8859_2,
	"iso_8859-2":          iso8859_2,
	"iso_8859-2:1987":     iso8859_2,
	"l2":                  iso8859_2,
	"latin2":              iso8859_2,
	"csisolatin3":         iso8859_3,
	"iso-8859-3":          iso8859_3,
	"iso-ir-109":          iso8859_3,
	"iso8859-3":           iso8859_3,
	"iso88593":            iso8859_3,
	"iso_8859-3":          iso8859_3,
	"iso_8859-3:1988":     iso8859_3,
	"l3":                  iso8859_3,
	"latin3":              iso8859_3,
	"csisolatin4":         iso8859_4,
	"iso-8859-4":          iso8859_4,
	"iso-ir-110":          iso8859_4,
	"iso8859-4":           iso8859_4,
	"iso88594":            iso8859_4,
	"iso_8859-4":          iso8859_4,
	"iso_8859-4:1988":     iso8859_4,
	"l4":                  iso8859_4,
	"latin4":              iso8859_4,
	"csisolatincyrillic":  iso8859_5,
	"cyrillic":            iso8859_5,
	"iso-8859-5":          iso8859_5,
	"iso-ir-144":          iso8859_5,
	"iso8859-5":           iso8859_5,
	"iso88595":            iso8859_5,
	"iso_8859-5":          iso8859_5,
	"iso_8859-5:1988":     iso8859_5,
	"arabic":              iso8859_6,
	"asmo-708":            iso8859_6,
	"csiso88596e":         iso8859_6,
	"csiso88596i":         iso8859_6,
	"csisolatinarabic":    iso8859_6,
	"ecma-114":            iso8859_6,
	"iso-8859-6":          iso8859_6,
	"iso-8859-6-e":        iso8859_6,
	"iso-8859-6-i":        iso8859_6,
	"iso-ir-127":          iso8859_6,
	"iso8859-6":           iso8859_6,
	"iso88596":            iso8859_6,
	"iso_8859-6":          iso8859_6,
	"iso_8859-6:1987":     iso8859_6,
	"csisolatingreek":     iso8859_7,
	"ecma-118":            iso8859_7,
	"elot_928":            iso8859_7,
	"greek":               iso8859_7,
	"greek8":              iso8859_7,
	"iso-8859-7":          iso8859_7,
	"iso-ir-126":          iso8859_7,
	"iso8859-7":           iso8859_7,
	"iso88597":            iso8859_7,
	"iso_8859-7":          iso8859_7,
	"iso_8859-7:1987":     iso8859_7,
	"sun_eu_greek":        iso8859_7,
	"csiso88598e":         iso8859_8,
	"csisolatinhebrew":    iso8859_8,
	"hebrew":              iso8859_8,
	"iso-8859-8":          iso8859_8,
	"iso-8859-8-e":        iso8859_8,
	"iso-ir-138":          iso8859_8,
	"iso8859-8":           iso8859_8,
	"iso88598":            iso8859_8,
	"iso_8859-8":          iso8859_8,
	"iso_8859-8:1988":     iso8859_8,
	"visual":              iso8859_8,
	"csiso88598i":         iso8859_8I,
	"iso-8859-8-i":        iso8859_8I,
	"logical":             iso8859_8I,
	"csisolatin6":         iso8859_10,
	"iso-8859-10":         iso8859_10,
	"iso-ir-157":          iso8859_10,
	"iso8859-10":          iso8859_10,
	"iso885910":           iso8859_10,
	"l6":                  iso8859_10,
	"latin6":              iso8859_10,
	"iso-8859-13":         iso8859_13,
	"iso8859-13":          iso8859_13,
	"iso885913":           iso8859_13,
	"iso-8859-14":         iso8859_14,
	"iso8859-14":          iso8859_14,
	"iso885914":           iso8859_14,
	"csisolatin9":         iso8859_15,
	"iso-8859-15":         iso8859_15,
	"iso8859-15":          iso8859_15,
	"iso885915":           iso8859_15,
	"iso_8859-15":         iso8859_15,
	"l9":                  iso8859_15,
	"iso-8859-16":         iso8859_16,
	"cskoi8r":             koi8r,
	"koi":                 koi8r,
	"koi8":                koi8r,
	"koi8-r":              koi8r,
	"koi8_r":              koi8r,
	"koi8-ru":             koi8u,
	"koi8-u":              koi8u,
	"csmacintosh":         macintosh,
	"mac":                 macintosh,
	"macintosh":           macintosh,
	"x-mac-roman":         macintosh,
	"dos-874":             windows874,
	"iso-8859-11":         windows874,
	"iso8859-11":          windows874,
	"iso885911":           windows874,
	"tis-620":             windows874,
	"windows-874":         windows874,
	"cp1250":              windows1250,
	"windows-1250":        windows1250,
	"x-cp1250":            windows1250,
	"cp1251":              windows1251,
	"windows-1251":        windows1251,
	"x-cp1251":            windows1251,
	"ansi_x3.4-1968":      windows1252,
	"ascii":               windows1252,
	"cp1252":              windows1252,
	"cp819":               windows1252,
	"csisolatin1":         windows1252,
	"ibm819":              windows1252,
	"iso-8859-1":          windows1252,
	"iso-ir-100":          windows1252,
	"iso8859-1":           windows1252,
	"iso88591":            windows1252,
	"iso_8859-1":          windows1252,
	"iso_8859-1:1987":     windows1252,
	"l1":                  windows1252,
	"latin1":              windows1252,
	"us-ascii":            windows1252,
	"windows-1252":        windows1252,
	"x-cp1252":            windows1252,
	"cp1253":              windows1253,
	"windows-1253":        windows1253,
	"x-cp1253":            windows1253,
	"cp1254":              windows1254,
	"csisolatin5":         windows1254,
	"iso-8859-9":          windows1254,
	"iso-ir-148":          windows1254,
	"iso8859-9":           windows1254,
	"iso88599":            windows1254,
	"iso_8859-9":          windows1254,
	"iso_8859-9:1989":     windows1254,
	"l5":                  windows1254,
	"latin5":              windows1254,
	"windows-1254":        windows1254,
	"x-cp1254":            windows1254,
	"cp1255":              windows1255,
	"windows-1255":        windows1255,
	"x-cp1255":            windows1255,
	"cp1256":              windows1256,
	"windows-1256":        windows1256,
	"x-cp1256":            windows1256,
	"cp1257":              windows1257,
	"windows-1257":        windows1257,
	"x-cp1257":            windows1257,
	"cp1258":              windows1258,
	"windows-1258":        windows1258,
	"x-cp1258":            windows1258,
	"x-mac-cyrillic":      macintoshCyrillic,
	"x-mac-ukrainian":     macintoshCyrillic,
	"chinese":             gbk,
	"csgb2312":            gbk,
	"csiso58gb231280":     gbk,
	"gb2312":              gbk,
	"gb_2312":             gbk,
	"gb_2312-80":          gbk,
	"gbk":                 gbk,
	"iso-ir-58":           gbk,
	"x-gbk":               gbk,
	"gb18030":             gb18030,
	"big5":                big5,
	"big5-hkscs":          big5,
	"cn-big5":             big5,
	"csbig5":              big5,
	"x-x-big5":            big5,
	"cseucpkdfmtjapanese": eucjp,
	"euc-jp":              eucjp,
	"x-euc-jp":            eucjp,
	"csiso2022jp":         iso2022jp,
	"iso-2022-jp":         iso2022jp,
	"csshiftjis":          shiftJIS,
	"ms932":               shiftJIS,
	"ms_kanji":            shiftJIS,
	"shift-jis":           shiftJIS,
	"shift_jis":           shiftJIS,
	"sjis":                shiftJIS,
	"windows-31j":         shiftJIS,
	"x-sjis":              shiftJIS,
	"cseuckr":             euckr,
	"csksc56011987":       euckr,
	"euc-kr":              euckr,
	"iso-ir-149":          euckr,
	"korean":              euckr,
	"ks_c_5601-1987":      euckr,
	"ks_c_5601-1989":      euckr,
	"ksc5601":             euckr,
	"ksc_5601":            euckr,
	"windows-949":         euckr,
	"csiso2022kr":         replacement,
	"hz-gb-2312":          replacement,
	"iso-2022-cn":         replacement,
	"iso-2022-cn-ext":     replacement,
	"iso-2022-kr":         replacement,
	"replacement":         replacement,
	"unicodefffe":         utf16be,
	"utf-16be":            utf16be,
	"csunicode":           utf16le,
	"iso-10646-ucs-2":     utf16le,
	"ucs-2":               utf16le,
	"unicode":             utf16le,
	"unicodefeff":         utf16le,
	"utf-16":              utf16le,
	"utf-16le":            utf16le,
	"x-user-defined":      xUserDefined,
}

var localeMap = []htmlEncoding{
	windows1252, // und_Latn
	windows1256, // ar
	windows1251, // ba
	windows1251, // be
	windows1251, // bg
	windows1250, // cs
	iso8859_7,   // el
	windows1257, // et
	windows1256, // fa
	windows1255, // he
	windows1250, // hr
	iso8859_2,   // hu
	shiftJIS,    // ja
	windows1251, // kk
	euckr,       // ko
	windows1254, // ku
	windows1251, // ky
	windows1257, // lt
	windows1257, // lv
	windows1251, // mk
	iso8859_2,   // pl
	windows1251, // ru
	windows1251, // sah
	windows1250, // sk
	iso8859_2,   // sl
	windows1251, // sr
	windows1251, // tg
	windows874,  // th
	windows1254, // tr
	windows1251, // tt
	windows1251, // uk
	windows1258, // vi
	gb18030,     // zh-hans
	big5,        // zh-hant
}

const locales = "und_Latn ar ba be bg cs el et fa he hr hu ja kk ko ku ky lt lv mk pl ru sah sk sl sr tg th tr tt uk vi zh-hans zh-hant"
 07070100000EFD000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/internal    07070100000EFE000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/internal/identifier 07070100000EFF000081A4000000000000000000000001645E367C00000D39000000000000000000000000000000000000005800000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/internal/identifier/identifier.go   // Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:generate go run gen.go

// Package identifier defines the contract between implementations of Encoding
// and Index by defining identifiers that uniquely identify standardized coded
// character sets (CCS) and character encoding schemes (CES), which we will
// together refer to as encodings, for which Encoding implementations provide
// converters to and from UTF-8. This package is typically only of concern to
// implementers of Indexes and Encodings.
//
// One part of the identifier is the MIB code, which is defined by IANA and
// uniquely identifies a CCS or CES. Each code is associated with data that
// references authorities, official documentation as well as aliases and MIME
// names.
//
// Not all CESs are covered by the IANA registry. The "other" string that is
// returned by ID can be used to identify other character sets or versions of
// existing ones.
//
// It is recommended that each package that provides a set of Encodings provide
// the All and Common variables to reference all supported encodings and
// commonly used subset. This allows Index implementations to include all
// available encodings without explicitly referencing or knowing about them.
package identifier

// Note: this package is internal, but could be made public if there is a need
// for writing third-party Indexes and Encodings.

// References:
// - http://source.icu-project.org/repos/icu/icu/trunk/source/data/mappings/convrtrs.txt
// - http://www.iana.org/assignments/character-sets/character-sets.xhtml
// - http://www.iana.org/assignments/ianacharset-mib/ianacharset-mib
// - http://www.ietf.org/rfc/rfc2978.txt
// - https://www.unicode.org/reports/tr22/
// - http://www.w3.org/TR/encoding/
// - https://encoding.spec.whatwg.org/
// - https://encoding.spec.whatwg.org/encodings.json
// - https://tools.ietf.org/html/rfc6657#section-5

// Interface can be implemented by Encodings to define the CCS or CES for which
// it implements conversions.
type Interface interface {
	// ID returns an encoding identifier. Exactly one of the mib and other
	// values should be non-zero.
	//
	// In the usual case it is only necessary to indicate the MIB code. The
	// other string can be used to specify encodings for which there is no MIB,
	// such as "x-mac-dingbat".
	//
	// The other string may only contain the characters a-z, A-Z, 0-9, - and _.
	ID() (mib MIB, other string)

	// NOTE: the restrictions on the encoding are to allow extending the syntax
	// with additional information such as versions, vendors and other variants.
}

// A MIB identifies an encoding. It is derived from the IANA MIB codes and adds
// some identifiers for some encodings that are not covered by the IANA
// standard.
//
// See http://www.iana.org/assignments/ianacharset-mib.
type MIB uint16

// These additional MIB types are not defined in IANA. They are added because
// they are common and defined within the text repo.
const (
	// Unofficial marks the start of encodings not registered by IANA.
	Unofficial MIB = 10000 + iota

	// Replacement is the WhatWG replacement encoding.
	Replacement

	// XUserDefined is the code for x-user-defined.
	XUserDefined

	// MacintoshCyrillic is the code for x-mac-cyrillic.
	MacintoshCyrillic
)
   07070100000F00000081A4000000000000000000000001645E367C0000C431000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/internal/identifier/mib.go  // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.

package identifier

const (
	// ASCII is the MIB identifier with IANA name US-ASCII (MIME: US-ASCII).
	//
	// ANSI X3.4-1986
	// Reference: RFC2046
	ASCII MIB = 3

	// ISOLatin1 is the MIB identifier with IANA name ISO_8859-1:1987 (MIME: ISO-8859-1).
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISOLatin1 MIB = 4

	// ISOLatin2 is the MIB identifier with IANA name ISO_8859-2:1987 (MIME: ISO-8859-2).
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISOLatin2 MIB = 5

	// ISOLatin3 is the MIB identifier with IANA name ISO_8859-3:1988 (MIME: ISO-8859-3).
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISOLatin3 MIB = 6

	// ISOLatin4 is the MIB identifier with IANA name ISO_8859-4:1988 (MIME: ISO-8859-4).
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISOLatin4 MIB = 7

	// ISOLatinCyrillic is the MIB identifier with IANA name ISO_8859-5:1988 (MIME: ISO-8859-5).
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISOLatinCyrillic MIB = 8

	// ISOLatinArabic is the MIB identifier with IANA name ISO_8859-6:1987 (MIME: ISO-8859-6).
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISOLatinArabic MIB = 9

	// ISOLatinGreek is the MIB identifier with IANA name ISO_8859-7:1987 (MIME: ISO-8859-7).
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1947
	// Reference: RFC1345
	ISOLatinGreek MIB = 10

	// ISOLatinHebrew is the MIB identifier with IANA name ISO_8859-8:1988 (MIME: ISO-8859-8).
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISOLatinHebrew MIB = 11

	// ISOLatin5 is the MIB identifier with IANA name ISO_8859-9:1989 (MIME: ISO-8859-9).
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISOLatin5 MIB = 12

	// ISOLatin6 is the MIB identifier with IANA name ISO-8859-10 (MIME: ISO-8859-10).
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISOLatin6 MIB = 13

	// ISOTextComm is the MIB identifier with IANA name ISO_6937-2-add.
	//
	// ISO-IR: International Register of Escape Sequences and ISO 6937-2:1983
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISOTextComm MIB = 14

	// HalfWidthKatakana is the MIB identifier with IANA name JIS_X0201.
	//
	// JIS X 0201-1976.   One byte only, this is equivalent to
	// JIS/Roman (similar to ASCII) plus eight-bit half-width
	// Katakana
	// Reference: RFC1345
	HalfWidthKatakana MIB = 15

	// JISEncoding is the MIB identifier with IANA name JIS_Encoding.
	//
	// JIS X 0202-1991.  Uses ISO 2022 escape sequences to
	// shift code sets as documented in JIS X 0202-1991.
	JISEncoding MIB = 16

	// ShiftJIS is the MIB identifier with IANA name Shift_JIS (MIME: Shift_JIS).
	//
	// This charset is an extension of csHalfWidthKatakana by
	// adding graphic characters in JIS X 0208.  The CCS's are
	// JIS X0201:1997 and JIS X0208:1997.  The
	// complete definition is shown in Appendix 1 of JIS
	// X0208:1997.
	// This charset can be used for the top-level media type "text".
	ShiftJIS MIB = 17

	// EUCPkdFmtJapanese is the MIB identifier with IANA name Extended_UNIX_Code_Packed_Format_for_Japanese (MIME: EUC-JP).
	//
	// Standardized by OSF, UNIX International, and UNIX Systems
	// Laboratories Pacific.  Uses ISO 2022 rules to select
	// code set 0: US-ASCII (a single 7-bit byte set)
	// code set 1: JIS X0208-1990 (a double 8-bit byte set)
	// restricted to A0-FF in both bytes
	// code set 2: Half Width Katakana (a single 7-bit byte set)
	// requiring SS2 as the character prefix
	// code set 3: JIS X0212-1990 (a double 7-bit byte set)
	// restricted to A0-FF in both bytes
	// requiring SS3 as the character prefix
	EUCPkdFmtJapanese MIB = 18

	// EUCFixWidJapanese is the MIB identifier with IANA name Extended_UNIX_Code_Fixed_Width_for_Japanese.
	//
	// Used in Japan.  Each character is 2 octets.
	// code set 0: US-ASCII (a single 7-bit byte set)
	// 1st byte = 00
	// 2nd byte = 20-7E
	// code set 1: JIS X0208-1990 (a double 7-bit byte set)
	// restricted  to A0-FF in both bytes
	// code set 2: Half Width Katakana (a single 7-bit byte set)
	// 1st byte = 00
	// 2nd byte = A0-FF
	// code set 3: JIS X0212-1990 (a double 7-bit byte set)
	// restricted to A0-FF in
	// the first byte
	// and 21-7E in the second byte
	EUCFixWidJapanese MIB = 19

	// ISO4UnitedKingdom is the MIB identifier with IANA name BS_4730.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO4UnitedKingdom MIB = 20

	// ISO11SwedishForNames is the MIB identifier with IANA name SEN_850200_C.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO11SwedishForNames MIB = 21

	// ISO15Italian is the MIB identifier with IANA name IT.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO15Italian MIB = 22

	// ISO17Spanish is the MIB identifier with IANA name ES.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO17Spanish MIB = 23

	// ISO21German is the MIB identifier with IANA name DIN_66003.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO21German MIB = 24

	// ISO60Norwegian1 is the MIB identifier with IANA name NS_4551-1.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO60Norwegian1 MIB = 25

	// ISO69French is the MIB identifier with IANA name NF_Z_62-010.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO69French MIB = 26

	// ISO10646UTF1 is the MIB identifier with IANA name ISO-10646-UTF-1.
	//
	// Universal Transfer Format (1), this is the multibyte
	// encoding, that subsets ASCII-7. It does not have byte
	// ordering issues.
	ISO10646UTF1 MIB = 27

	// ISO646basic1983 is the MIB identifier with IANA name ISO_646.basic:1983.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO646basic1983 MIB = 28

	// INVARIANT is the MIB identifier with IANA name INVARIANT.
	//
	// Reference: RFC1345
	INVARIANT MIB = 29

	// ISO2IntlRefVersion is the MIB identifier with IANA name ISO_646.irv:1983.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO2IntlRefVersion MIB = 30

	// NATSSEFI is the MIB identifier with IANA name NATS-SEFI.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	NATSSEFI MIB = 31

	// NATSSEFIADD is the MIB identifier with IANA name NATS-SEFI-ADD.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	NATSSEFIADD MIB = 32

	// NATSDANO is the MIB identifier with IANA name NATS-DANO.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	NATSDANO MIB = 33

	// NATSDANOADD is the MIB identifier with IANA name NATS-DANO-ADD.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	NATSDANOADD MIB = 34

	// ISO10Swedish is the MIB identifier with IANA name SEN_850200_B.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO10Swedish MIB = 35

	// KSC56011987 is the MIB identifier with IANA name KS_C_5601-1987.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	KSC56011987 MIB = 36

	// ISO2022KR is the MIB identifier with IANA name ISO-2022-KR (MIME: ISO-2022-KR).
	//
	// rfc1557 (see also KS_C_5601-1987)
	// Reference: RFC1557
	ISO2022KR MIB = 37

	// EUCKR is the MIB identifier with IANA name EUC-KR (MIME: EUC-KR).
	//
	// rfc1557 (see also KS_C_5861-1992)
	// Reference: RFC1557
	EUCKR MIB = 38

	// ISO2022JP is the MIB identifier with IANA name ISO-2022-JP (MIME: ISO-2022-JP).
	//
	// rfc1468 (see also rfc2237 )
	// Reference: RFC1468
	ISO2022JP MIB = 39

	// ISO2022JP2 is the MIB identifier with IANA name ISO-2022-JP-2 (MIME: ISO-2022-JP-2).
	//
	// rfc1554
	// Reference: RFC1554
	ISO2022JP2 MIB = 40

	// ISO13JISC6220jp is the MIB identifier with IANA name JIS_C6220-1969-jp.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO13JISC6220jp MIB = 41

	// ISO14JISC6220ro is the MIB identifier with IANA name JIS_C6220-1969-ro.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO14JISC6220ro MIB = 42

	// ISO16Portuguese is the MIB identifier with IANA name PT.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO16Portuguese MIB = 43

	// ISO18Greek7Old is the MIB identifier with IANA name greek7-old.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO18Greek7Old MIB = 44

	// ISO19LatinGreek is the MIB identifier with IANA name latin-greek.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO19LatinGreek MIB = 45

	// ISO25French is the MIB identifier with IANA name NF_Z_62-010_(1973).
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO25French MIB = 46

	// ISO27LatinGreek1 is the MIB identifier with IANA name Latin-greek-1.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO27LatinGreek1 MIB = 47

	// ISO5427Cyrillic is the MIB identifier with IANA name ISO_5427.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO5427Cyrillic MIB = 48

	// ISO42JISC62261978 is the MIB identifier with IANA name JIS_C6226-1978.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO42JISC62261978 MIB = 49

	// ISO47BSViewdata is the MIB identifier with IANA name BS_viewdata.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO47BSViewdata MIB = 50

	// ISO49INIS is the MIB identifier with IANA name INIS.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO49INIS MIB = 51

	// ISO50INIS8 is the MIB identifier with IANA name INIS-8.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO50INIS8 MIB = 52

	// ISO51INISCyrillic is the MIB identifier with IANA name INIS-cyrillic.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO51INISCyrillic MIB = 53

	// ISO54271981 is the MIB identifier with IANA name ISO_5427:1981.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO54271981 MIB = 54

	// ISO5428Greek is the MIB identifier with IANA name ISO_5428:1980.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO5428Greek MIB = 55

	// ISO57GB1988 is the MIB identifier with IANA name GB_1988-80.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO57GB1988 MIB = 56

	// ISO58GB231280 is the MIB identifier with IANA name GB_2312-80.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO58GB231280 MIB = 57

	// ISO61Norwegian2 is the MIB identifier with IANA name NS_4551-2.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO61Norwegian2 MIB = 58

	// ISO70VideotexSupp1 is the MIB identifier with IANA name videotex-suppl.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO70VideotexSupp1 MIB = 59

	// ISO84Portuguese2 is the MIB identifier with IANA name PT2.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO84Portuguese2 MIB = 60

	// ISO85Spanish2 is the MIB identifier with IANA name ES2.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO85Spanish2 MIB = 61

	// ISO86Hungarian is the MIB identifier with IANA name MSZ_7795.3.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO86Hungarian MIB = 62

	// ISO87JISX0208 is the MIB identifier with IANA name JIS_C6226-1983.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO87JISX0208 MIB = 63

	// ISO88Greek7 is the MIB identifier with IANA name greek7.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO88Greek7 MIB = 64

	// ISO89ASMO449 is the MIB identifier with IANA name ASMO_449.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO89ASMO449 MIB = 65

	// ISO90 is the MIB identifier with IANA name iso-ir-90.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO90 MIB = 66

	// ISO91JISC62291984a is the MIB identifier with IANA name JIS_C6229-1984-a.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO91JISC62291984a MIB = 67

	// ISO92JISC62991984b is the MIB identifier with IANA name JIS_C6229-1984-b.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO92JISC62991984b MIB = 68

	// ISO93JIS62291984badd is the MIB identifier with IANA name JIS_C6229-1984-b-add.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO93JIS62291984badd MIB = 69

	// ISO94JIS62291984hand is the MIB identifier with IANA name JIS_C6229-1984-hand.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO94JIS62291984hand MIB = 70

	// ISO95JIS62291984handadd is the MIB identifier with IANA name JIS_C6229-1984-hand-add.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO95JIS62291984handadd MIB = 71

	// ISO96JISC62291984kana is the MIB identifier with IANA name JIS_C6229-1984-kana.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO96JISC62291984kana MIB = 72

	// ISO2033 is the MIB identifier with IANA name ISO_2033-1983.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO2033 MIB = 73

	// ISO99NAPLPS is the MIB identifier with IANA name ANSI_X3.110-1983.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO99NAPLPS MIB = 74

	// ISO102T617bit is the MIB identifier with IANA name T.61-7bit.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO102T617bit MIB = 75

	// ISO103T618bit is the MIB identifier with IANA name T.61-8bit.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO103T618bit MIB = 76

	// ISO111ECMACyrillic is the MIB identifier with IANA name ECMA-cyrillic.
	//
	// ISO registry
	ISO111ECMACyrillic MIB = 77

	// ISO121Canadian1 is the MIB identifier with IANA name CSA_Z243.4-1985-1.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO121Canadian1 MIB = 78

	// ISO122Canadian2 is the MIB identifier with IANA name CSA_Z243.4-1985-2.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO122Canadian2 MIB = 79

	// ISO123CSAZ24341985gr is the MIB identifier with IANA name CSA_Z243.4-1985-gr.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO123CSAZ24341985gr MIB = 80

	// ISO88596E is the MIB identifier with IANA name ISO_8859-6-E (MIME: ISO-8859-6-E).
	//
	// rfc1556
	// Reference: RFC1556
	ISO88596E MIB = 81

	// ISO88596I is the MIB identifier with IANA name ISO_8859-6-I (MIME: ISO-8859-6-I).
	//
	// rfc1556
	// Reference: RFC1556
	ISO88596I MIB = 82

	// ISO128T101G2 is the MIB identifier with IANA name T.101-G2.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO128T101G2 MIB = 83

	// ISO88598E is the MIB identifier with IANA name ISO_8859-8-E (MIME: ISO-8859-8-E).
	//
	// rfc1556
	// Reference: RFC1556
	ISO88598E MIB = 84

	// ISO88598I is the MIB identifier with IANA name ISO_8859-8-I (MIME: ISO-8859-8-I).
	//
	// rfc1556
	// Reference: RFC1556
	ISO88598I MIB = 85

	// ISO139CSN369103 is the MIB identifier with IANA name CSN_369103.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO139CSN369103 MIB = 86

	// ISO141JUSIB1002 is the MIB identifier with IANA name JUS_I.B1.002.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO141JUSIB1002 MIB = 87

	// ISO143IECP271 is the MIB identifier with IANA name IEC_P27-1.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO143IECP271 MIB = 88

	// ISO146Serbian is the MIB identifier with IANA name JUS_I.B1.003-serb.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO146Serbian MIB = 89

	// ISO147Macedonian is the MIB identifier with IANA name JUS_I.B1.003-mac.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO147Macedonian MIB = 90

	// ISO150GreekCCITT is the MIB identifier with IANA name greek-ccitt.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO150GreekCCITT MIB = 91

	// ISO151Cuba is the MIB identifier with IANA name NC_NC00-10:81.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO151Cuba MIB = 92

	// ISO6937Add is the MIB identifier with IANA name ISO_6937-2-25.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO6937Add MIB = 93

	// ISO153GOST1976874 is the MIB identifier with IANA name GOST_19768-74.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO153GOST1976874 MIB = 94

	// ISO8859Supp is the MIB identifier with IANA name ISO_8859-supp.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO8859Supp MIB = 95

	// ISO10367Box is the MIB identifier with IANA name ISO_10367-box.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO10367Box MIB = 96

	// ISO158Lap is the MIB identifier with IANA name latin-lap.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO158Lap MIB = 97

	// ISO159JISX02121990 is the MIB identifier with IANA name JIS_X0212-1990.
	//
	// ISO-IR: International Register of Escape Sequences
	// Note: The current registration authority is IPSJ/ITSCJ, Japan.
	// Reference: RFC1345
	ISO159JISX02121990 MIB = 98

	// ISO646Danish is the MIB identifier with IANA name DS_2089.
	//
	// Danish Standard, DS 2089, February 1974
	// Reference: RFC1345
	ISO646Danish MIB = 99

	// USDK is the MIB identifier with IANA name us-dk.
	//
	// Reference: RFC1345
	USDK MIB = 100

	// DKUS is the MIB identifier with IANA name dk-us.
	//
	// Reference: RFC1345
	DKUS MIB = 101

	// KSC5636 is the MIB identifier with IANA name KSC5636.
	//
	// Reference: RFC1345
	KSC5636 MIB = 102

	// Unicode11UTF7 is the MIB identifier with IANA name UNICODE-1-1-UTF-7.
	//
	// rfc1642
	// Reference: RFC1642
	Unicode11UTF7 MIB = 103

	// ISO2022CN is the MIB identifier with IANA name ISO-2022-CN.
	//
	// rfc1922
	// Reference: RFC1922
	ISO2022CN MIB = 104

	// ISO2022CNEXT is the MIB identifier with IANA name ISO-2022-CN-EXT.
	//
	// rfc1922
	// Reference: RFC1922
	ISO2022CNEXT MIB = 105

	// UTF8 is the MIB identifier with IANA name UTF-8.
	//
	// rfc3629
	// Reference: RFC3629
	UTF8 MIB = 106

	// ISO885913 is the MIB identifier with IANA name ISO-8859-13.
	//
	// ISO See https://www.iana.org/assignments/charset-reg/ISO-8859-13 https://www.iana.org/assignments/charset-reg/ISO-8859-13
	ISO885913 MIB = 109

	// ISO885914 is the MIB identifier with IANA name ISO-8859-14.
	//
	// ISO See https://www.iana.org/assignments/charset-reg/ISO-8859-14
	ISO885914 MIB = 110

	// ISO885915 is the MIB identifier with IANA name ISO-8859-15.
	//
	// ISO
	// Please see: https://www.iana.org/assignments/charset-reg/ISO-8859-15
	ISO885915 MIB = 111

	// ISO885916 is the MIB identifier with IANA name ISO-8859-16.
	//
	// ISO
	ISO885916 MIB = 112

	// GBK is the MIB identifier with IANA name GBK.
	//
	// Chinese IT Standardization Technical Committee
	// Please see: https://www.iana.org/assignments/charset-reg/GBK
	GBK MIB = 113

	// GB18030 is the MIB identifier with IANA name GB18030.
	//
	// Chinese IT Standardization Technical Committee
	// Please see: https://www.iana.org/assignments/charset-reg/GB18030
	GB18030 MIB = 114

	// OSDEBCDICDF0415 is the MIB identifier with IANA name OSD_EBCDIC_DF04_15.
	//
	// Fujitsu-Siemens standard mainframe EBCDIC encoding
	// Please see: https://www.iana.org/assignments/charset-reg/OSD-EBCDIC-DF04-15
	OSDEBCDICDF0415 MIB = 115

	// OSDEBCDICDF03IRV is the MIB identifier with IANA name OSD_EBCDIC_DF03_IRV.
	//
	// Fujitsu-Siemens standard mainframe EBCDIC encoding
	// Please see: https://www.iana.org/assignments/charset-reg/OSD-EBCDIC-DF03-IRV
	OSDEBCDICDF03IRV MIB = 116

	// OSDEBCDICDF041 is the MIB identifier with IANA name OSD_EBCDIC_DF04_1.
	//
	// Fujitsu-Siemens standard mainframe EBCDIC encoding
	// Please see: https://www.iana.org/assignments/charset-reg/OSD-EBCDIC-DF04-1
	OSDEBCDICDF041 MIB = 117

	// ISO115481 is the MIB identifier with IANA name ISO-11548-1.
	//
	// See https://www.iana.org/assignments/charset-reg/ISO-11548-1
	ISO115481 MIB = 118

	// KZ1048 is the MIB identifier with IANA name KZ-1048.
	//
	// See https://www.iana.org/assignments/charset-reg/KZ-1048
	KZ1048 MIB = 119

	// Unicode is the MIB identifier with IANA name ISO-10646-UCS-2.
	//
	// the 2-octet Basic Multilingual Plane, aka Unicode
	// this needs to specify network byte order: the standard
	// does not specify (it is a 16-bit integer space)
	Unicode MIB = 1000

	// UCS4 is the MIB identifier with IANA name ISO-10646-UCS-4.
	//
	// the full code space. (same comment about byte order,
	// these are 31-bit numbers.
	UCS4 MIB = 1001

	// UnicodeASCII is the MIB identifier with IANA name ISO-10646-UCS-Basic.
	//
	// ASCII subset of Unicode.  Basic Latin = collection 1
	// See ISO 10646, Appendix A
	UnicodeASCII MIB = 1002

	// UnicodeLatin1 is the MIB identifier with IANA name ISO-10646-Unicode-Latin1.
	//
	// ISO Latin-1 subset of Unicode. Basic Latin and Latin-1
	// Supplement  = collections 1 and 2.  See ISO 10646,
	// Appendix A.  See rfc1815 .
	UnicodeLatin1 MIB = 1003

	// UnicodeJapanese is the MIB identifier with IANA name ISO-10646-J-1.
	//
	// ISO 10646 Japanese, see rfc1815 .
	UnicodeJapanese MIB = 1004

	// UnicodeIBM1261 is the MIB identifier with IANA name ISO-Unicode-IBM-1261.
	//
	// IBM Latin-2, -3, -5, Extended Presentation Set, GCSGID: 1261
	UnicodeIBM1261 MIB = 1005

	// UnicodeIBM1268 is the MIB identifier with IANA name ISO-Unicode-IBM-1268.
	//
	// IBM Latin-4 Extended Presentation Set, GCSGID: 1268
	UnicodeIBM1268 MIB = 1006

	// UnicodeIBM1276 is the MIB identifier with IANA name ISO-Unicode-IBM-1276.
	//
	// IBM Cyrillic Greek Extended Presentation Set, GCSGID: 1276
	UnicodeIBM1276 MIB = 1007

	// UnicodeIBM1264 is the MIB identifier with IANA name ISO-Unicode-IBM-1264.
	//
	// IBM Arabic Presentation Set, GCSGID: 1264
	UnicodeIBM1264 MIB = 1008

	// UnicodeIBM1265 is the MIB identifier with IANA name ISO-Unicode-IBM-1265.
	//
	// IBM Hebrew Presentation Set, GCSGID: 1265
	UnicodeIBM1265 MIB = 1009

	// Unicode11 is the MIB identifier with IANA name UNICODE-1-1.
	//
	// rfc1641
	// Reference: RFC1641
	Unicode11 MIB = 1010

	// SCSU is the MIB identifier with IANA name SCSU.
	//
	// SCSU See https://www.iana.org/assignments/charset-reg/SCSU
	SCSU MIB = 1011

	// UTF7 is the MIB identifier with IANA name UTF-7.
	//
	// rfc2152
	// Reference: RFC2152
	UTF7 MIB = 1012

	// UTF16BE is the MIB identifier with IANA name UTF-16BE.
	//
	// rfc2781
	// Reference: RFC2781
	UTF16BE MIB = 1013

	// UTF16LE is the MIB identifier with IANA name UTF-16LE.
	//
	// rfc2781
	// Reference: RFC2781
	UTF16LE MIB = 1014

	// UTF16 is the MIB identifier with IANA name UTF-16.
	//
	// rfc2781
	// Reference: RFC2781
	UTF16 MIB = 1015

	// CESU8 is the MIB identifier with IANA name CESU-8.
	//
	// https://www.unicode.org/reports/tr26
	CESU8 MIB = 1016

	// UTF32 is the MIB identifier with IANA name UTF-32.
	//
	// https://www.unicode.org/reports/tr19/
	UTF32 MIB = 1017

	// UTF32BE is the MIB identifier with IANA name UTF-32BE.
	//
	// https://www.unicode.org/reports/tr19/
	UTF32BE MIB = 1018

	// UTF32LE is the MIB identifier with IANA name UTF-32LE.
	//
	// https://www.unicode.org/reports/tr19/
	UTF32LE MIB = 1019

	// BOCU1 is the MIB identifier with IANA name BOCU-1.
	//
	// https://www.unicode.org/notes/tn6/
	BOCU1 MIB = 1020

	// UTF7IMAP is the MIB identifier with IANA name UTF-7-IMAP.
	//
	// Note: This charset is used to encode Unicode in IMAP mailbox names;
	// see section 5.1.3 of rfc3501 . It should never be used
	// outside this context. A name has been assigned so that charset processing
	// implementations can refer to it in a consistent way.
	UTF7IMAP MIB = 1021

	// Windows30Latin1 is the MIB identifier with IANA name ISO-8859-1-Windows-3.0-Latin-1.
	//
	// Extended ISO 8859-1 Latin-1 for Windows 3.0.
	// PCL Symbol Set id: 9U
	Windows30Latin1 MIB = 2000

	// Windows31Latin1 is the MIB identifier with IANA name ISO-8859-1-Windows-3.1-Latin-1.
	//
	// Extended ISO 8859-1 Latin-1 for Windows 3.1.
	// PCL Symbol Set id: 19U
	Windows31Latin1 MIB = 2001

	// Windows31Latin2 is the MIB identifier with IANA name ISO-8859-2-Windows-Latin-2.
	//
	// Extended ISO 8859-2.  Latin-2 for Windows 3.1.
	// PCL Symbol Set id: 9E
	Windows31Latin2 MIB = 2002

	// Windows31Latin5 is the MIB identifier with IANA name ISO-8859-9-Windows-Latin-5.
	//
	// Extended ISO 8859-9.  Latin-5 for Windows 3.1
	// PCL Symbol Set id: 5T
	Windows31Latin5 MIB = 2003

	// HPRoman8 is the MIB identifier with IANA name hp-roman8.
	//
	// LaserJet IIP Printer User's Manual,
	// HP part no 33471-90901, Hewlet-Packard, June 1989.
	// Reference: RFC1345
	HPRoman8 MIB = 2004

	// AdobeStandardEncoding is the MIB identifier with IANA name Adobe-Standard-Encoding.
	//
	// PostScript Language Reference Manual
	// PCL Symbol Set id: 10J
	AdobeStandardEncoding MIB = 2005

	// VenturaUS is the MIB identifier with IANA name Ventura-US.
	//
	// Ventura US.  ASCII plus characters typically used in
	// publishing, like pilcrow, copyright, registered, trade mark,
	// section, dagger, and double dagger in the range A0 (hex)
	// to FF (hex).
	// PCL Symbol Set id: 14J
	VenturaUS MIB = 2006

	// VenturaInternational is the MIB identifier with IANA name Ventura-International.
	//
	// Ventura International.  ASCII plus coded characters similar
	// to Roman8.
	// PCL Symbol Set id: 13J
	VenturaInternational MIB = 2007

	// DECMCS is the MIB identifier with IANA name DEC-MCS.
	//
	// VAX/VMS User's Manual,
	// Order Number: AI-Y517A-TE, April 1986.
	// Reference: RFC1345
	DECMCS MIB = 2008

	// PC850Multilingual is the MIB identifier with IANA name IBM850.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	PC850Multilingual MIB = 2009

	// PC8DanishNorwegian is the MIB identifier with IANA name PC8-Danish-Norwegian.
	//
	// PC Danish Norwegian
	// 8-bit PC set for Danish Norwegian
	// PCL Symbol Set id: 11U
	PC8DanishNorwegian MIB = 2012

	// PC862LatinHebrew is the MIB identifier with IANA name IBM862.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	PC862LatinHebrew MIB = 2013

	// PC8Turkish is the MIB identifier with IANA name PC8-Turkish.
	//
	// PC Latin Turkish.  PCL Symbol Set id: 9T
	PC8Turkish MIB = 2014

	// IBMSymbols is the MIB identifier with IANA name IBM-Symbols.
	//
	// Presentation Set, CPGID: 259
	IBMSymbols MIB = 2015

	// IBMThai is the MIB identifier with IANA name IBM-Thai.
	//
	// Presentation Set, CPGID: 838
	IBMThai MIB = 2016

	// HPLegal is the MIB identifier with IANA name HP-Legal.
	//
	// PCL 5 Comparison Guide, Hewlett-Packard,
	// HP part number 5961-0510, October 1992
	// PCL Symbol Set id: 1U
	HPLegal MIB = 2017

	// HPPiFont is the MIB identifier with IANA name HP-Pi-font.
	//
	// PCL 5 Comparison Guide, Hewlett-Packard,
	// HP part number 5961-0510, October 1992
	// PCL Symbol Set id: 15U
	HPPiFont MIB = 2018

	// HPMath8 is the MIB identifier with IANA name HP-Math8.
	//
	// PCL 5 Comparison Guide, Hewlett-Packard,
	// HP part number 5961-0510, October 1992
	// PCL Symbol Set id: 8M
	HPMath8 MIB = 2019

	// HPPSMath is the MIB identifier with IANA name Adobe-Symbol-Encoding.
	//
	// PostScript Language Reference Manual
	// PCL Symbol Set id: 5M
	HPPSMath MIB = 2020

	// HPDesktop is the MIB identifier with IANA name HP-DeskTop.
	//
	// PCL 5 Comparison Guide, Hewlett-Packard,
	// HP part number 5961-0510, October 1992
	// PCL Symbol Set id: 7J
	HPDesktop MIB = 2021

	// VenturaMath is the MIB identifier with IANA name Ventura-Math.
	//
	// PCL 5 Comparison Guide, Hewlett-Packard,
	// HP part number 5961-0510, October 1992
	// PCL Symbol Set id: 6M
	VenturaMath MIB = 2022

	// MicrosoftPublishing is the MIB identifier with IANA name Microsoft-Publishing.
	//
	// PCL 5 Comparison Guide, Hewlett-Packard,
	// HP part number 5961-0510, October 1992
	// PCL Symbol Set id: 6J
	MicrosoftPublishing MIB = 2023

	// Windows31J is the MIB identifier with IANA name Windows-31J.
	//
	// Windows Japanese.  A further extension of Shift_JIS
	// to include NEC special characters (Row 13), NEC
	// selection of IBM extensions (Rows 89 to 92), and IBM
	// extensions (Rows 115 to 119).  The CCS's are
	// JIS X0201:1997, JIS X0208:1997, and these extensions.
	// This charset can be used for the top-level media type "text",
	// but it is of limited or specialized use (see rfc2278 ).
	// PCL Symbol Set id: 19K
	Windows31J MIB = 2024

	// GB2312 is the MIB identifier with IANA name GB2312 (MIME: GB2312).
	//
	// Chinese for People's Republic of China (PRC) mixed one byte,
	// two byte set:
	// 20-7E = one byte ASCII
	// A1-FE = two byte PRC Kanji
	// See GB 2312-80
	// PCL Symbol Set Id: 18C
	GB2312 MIB = 2025

	// Big5 is the MIB identifier with IANA name Big5 (MIME: Big5).
	//
	// Chinese for Taiwan Multi-byte set.
	// PCL Symbol Set Id: 18T
	Big5 MIB = 2026

	// Macintosh is the MIB identifier with IANA name macintosh.
	//
	// The Unicode Standard ver1.0, ISBN 0-201-56788-1, Oct 1991
	// Reference: RFC1345
	Macintosh MIB = 2027

	// IBM037 is the MIB identifier with IANA name IBM037.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	IBM037 MIB = 2028

	// IBM038 is the MIB identifier with IANA name IBM038.
	//
	// IBM 3174 Character Set Ref, GA27-3831-02, March 1990
	// Reference: RFC1345
	IBM038 MIB = 2029

	// IBM273 is the MIB identifier with IANA name IBM273.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	IBM273 MIB = 2030

	// IBM274 is the MIB identifier with IANA name IBM274.
	//
	// IBM 3174 Character Set Ref, GA27-3831-02, March 1990
	// Reference: RFC1345
	IBM274 MIB = 2031

	// IBM275 is the MIB identifier with IANA name IBM275.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	IBM275 MIB = 2032

	// IBM277 is the MIB identifier with IANA name IBM277.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	IBM277 MIB = 2033

	// IBM278 is the MIB identifier with IANA name IBM278.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	IBM278 MIB = 2034

	// IBM280 is the MIB identifier with IANA name IBM280.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	IBM280 MIB = 2035

	// IBM281 is the MIB identifier with IANA name IBM281.
	//
	// IBM 3174 Character Set Ref, GA27-3831-02, March 1990
	// Reference: RFC1345
	IBM281 MIB = 2036

	// IBM284 is the MIB identifier with IANA name IBM284.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	IBM284 MIB = 2037

	// IBM285 is the MIB identifier with IANA name IBM285.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	IBM285 MIB = 2038

	// IBM290 is the MIB identifier with IANA name IBM290.
	//
	// IBM 3174 Character Set Ref, GA27-3831-02, March 1990
	// Reference: RFC1345
	IBM290 MIB = 2039

	// IBM297 is the MIB identifier with IANA name IBM297.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	IBM297 MIB = 2040

	// IBM420 is the MIB identifier with IANA name IBM420.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990,
	// IBM NLS RM p 11-11
	// Reference: RFC1345
	IBM420 MIB = 2041

	// IBM423 is the MIB identifier with IANA name IBM423.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	IBM423 MIB = 2042

	// IBM424 is the MIB identifier with IANA name IBM424.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	IBM424 MIB = 2043

	// PC8CodePage437 is the MIB identifier with IANA name IBM437.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	PC8CodePage437 MIB = 2011

	// IBM500 is the MIB identifier with IANA name IBM500.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	IBM500 MIB = 2044

	// IBM851 is the MIB identifier with IANA name IBM851.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	IBM851 MIB = 2045

	// PCp852 is the MIB identifier with IANA name IBM852.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	PCp852 MIB = 2010

	// IBM855 is the MIB identifier with IANA name IBM855.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	IBM855 MIB = 2046

	// IBM857 is the MIB identifier with IANA name IBM857.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	IBM857 MIB = 2047

	// IBM860 is the MIB identifier with IANA name IBM860.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	IBM860 MIB = 2048

	// IBM861 is the MIB identifier with IANA name IBM861.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	IBM861 MIB = 2049

	// IBM863 is the MIB identifier with IANA name IBM863.
	//
	// IBM Keyboard layouts and code pages, PN 07G4586 June 1991
	// Reference: RFC1345
	IBM863 MIB = 2050

	// IBM864 is the MIB identifier with IANA name IBM864.
	//
	// IBM Keyboard layouts and code pages, PN 07G4586 June 1991
	// Reference: RFC1345
	IBM864 MIB = 2051

	// IBM865 is the MIB identifier with IANA name IBM865.
	//
	// IBM DOS 3.3 Ref (Abridged), 94X9575 (Feb 1987)
	// Reference: RFC1345
	IBM865 MIB = 2052

	// IBM868 is the MIB identifier with IANA name IBM868.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	IBM868 MIB = 2053

	// IBM869 is the MIB identifier with IANA name IBM869.
	//
	// IBM Keyboard layouts and code pages, PN 07G4586 June 1991
	// Reference: RFC1345
	IBM869 MIB = 2054

	// IBM870 is the MIB identifier with IANA name IBM870.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	IBM870 MIB = 2055

	// IBM871 is the MIB identifier with IANA name IBM871.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	IBM871 MIB = 2056

	// IBM880 is the MIB identifier with IANA name IBM880.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	IBM880 MIB = 2057

	// IBM891 is the MIB identifier with IANA name IBM891.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	IBM891 MIB = 2058

	// IBM903 is the MIB identifier with IANA name IBM903.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	IBM903 MIB = 2059

	// IBBM904 is the MIB identifier with IANA name IBM904.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	IBBM904 MIB = 2060

	// IBM905 is the MIB identifier with IANA name IBM905.
	//
	// IBM 3174 Character Set Ref, GA27-3831-02, March 1990
	// Reference: RFC1345
	IBM905 MIB = 2061

	// IBM918 is the MIB identifier with IANA name IBM918.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	IBM918 MIB = 2062

	// IBM1026 is the MIB identifier with IANA name IBM1026.
	//
	// IBM NLS RM Vol2 SE09-8002-01, March 1990
	// Reference: RFC1345
	IBM1026 MIB = 2063

	// IBMEBCDICATDE is the MIB identifier with IANA name EBCDIC-AT-DE.
	//
	// IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
	// Reference: RFC1345
	IBMEBCDICATDE MIB = 2064

	// EBCDICATDEA is the MIB identifier with IANA name EBCDIC-AT-DE-A.
	//
	// IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
	// Reference: RFC1345
	EBCDICATDEA MIB = 2065

	// EBCDICCAFR is the MIB identifier with IANA name EBCDIC-CA-FR.
	//
	// IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
	// Reference: RFC1345
	EBCDICCAFR MIB = 2066

	// EBCDICDKNO is the MIB identifier with IANA name EBCDIC-DK-NO.
	//
	// IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
	// Reference: RFC1345
	EBCDICDKNO MIB = 2067

	// EBCDICDKNOA is the MIB identifier with IANA name EBCDIC-DK-NO-A.
	//
	// IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
	// Reference: RFC1345
	EBCDICDKNOA MIB = 2068

	// EBCDICFISE is the MIB identifier with IANA name EBCDIC-FI-SE.
	//
	// IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
	// Reference: RFC1345
	EBCDICFISE MIB = 2069

	// EBCDICFISEA is the MIB identifier with IANA name EBCDIC-FI-SE-A.
	//
	// IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
	// Reference: RFC1345
	EBCDICFISEA MIB = 2070

	// EBCDICFR is the MIB identifier with IANA name EBCDIC-FR.
	//
	// IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
	// Reference: RFC1345
	EBCDICFR MIB = 2071

	// EBCDICIT is the MIB identifier with IANA name EBCDIC-IT.
	//
	// IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
	// Reference: RFC1345
	EBCDICIT MIB = 2072

	// EBCDICPT is the MIB identifier with IANA name EBCDIC-PT.
	//
	// IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
	// Reference: RFC1345
	EBCDICPT MIB = 2073

	// EBCDICES is the MIB identifier with IANA name EBCDIC-ES.
	//
	// IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
	// Reference: RFC1345
	EBCDICES MIB = 2074

	// EBCDICESA is the MIB identifier with IANA name EBCDIC-ES-A.
	//
	// IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
	// Reference: RFC1345
	EBCDICESA MIB = 2075

	// EBCDICESS is the MIB identifier with IANA name EBCDIC-ES-S.
	//
	// IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
	// Reference: RFC1345
	EBCDICESS MIB = 2076

	// EBCDICUK is the MIB identifier with IANA name EBCDIC-UK.
	//
	// IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
	// Reference: RFC1345
	EBCDICUK MIB = 2077

	// EBCDICUS is the MIB identifier with IANA name EBCDIC-US.
	//
	// IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
	// Reference: RFC1345
	EBCDICUS MIB = 2078

	// Unknown8BiT is the MIB identifier with IANA name UNKNOWN-8BIT.
	//
	// Reference: RFC1428
	Unknown8BiT MIB = 2079

	// Mnemonic is the MIB identifier with IANA name MNEMONIC.
	//
	// rfc1345 , also known as "mnemonic+ascii+38"
	// Reference: RFC1345
	Mnemonic MIB = 2080

	// Mnem is the MIB identifier with IANA name MNEM.
	//
	// rfc1345 , also known as "mnemonic+ascii+8200"
	// Reference: RFC1345
	Mnem MIB = 2081

	// VISCII is the MIB identifier with IANA name VISCII.
	//
	// rfc1456
	// Reference: RFC1456
	VISCII MIB = 2082

	// VIQR is the MIB identifier with IANA name VIQR.
	//
	// rfc1456
	// Reference: RFC1456
	VIQR MIB = 2083

	// KOI8R is the MIB identifier with IANA name KOI8-R (MIME: KOI8-R).
	//
	// rfc1489 , based on GOST-19768-74, ISO-6937/8,
	// INIS-Cyrillic, ISO-5427.
	// Reference: RFC1489
	KOI8R MIB = 2084

	// HZGB2312 is the MIB identifier with IANA name HZ-GB-2312.
	//
	// rfc1842 , rfc1843 rfc1843 rfc1842
	HZGB2312 MIB = 2085

	// IBM866 is the MIB identifier with IANA name IBM866.
	//
	// IBM NLDG Volume 2 (SE09-8002-03) August 1994
	IBM866 MIB = 2086

	// PC775Baltic is the MIB identifier with IANA name IBM775.
	//
	// HP PCL 5 Comparison Guide (P/N 5021-0329) pp B-13, 1996
	PC775Baltic MIB = 2087

	// KOI8U is the MIB identifier with IANA name KOI8-U.
	//
	// rfc2319
	// Reference: RFC2319
	KOI8U MIB = 2088

	// IBM00858 is the MIB identifier with IANA name IBM00858.
	//
	// IBM See https://www.iana.org/assignments/charset-reg/IBM00858
	IBM00858 MIB = 2089

	// IBM00924 is the MIB identifier with IANA name IBM00924.
	//
	// IBM See https://www.iana.org/assignments/charset-reg/IBM00924
	IBM00924 MIB = 2090

	// IBM01140 is the MIB identifier with IANA name IBM01140.
	//
	// IBM See https://www.iana.org/assignments/charset-reg/IBM01140
	IBM01140 MIB = 2091

	// IBM01141 is the MIB identifier with IANA name IBM01141.
	//
	// IBM See https://www.iana.org/assignments/charset-reg/IBM01141
	IBM01141 MIB = 2092

	// IBM01142 is the MIB identifier with IANA name IBM01142.
	//
	// IBM See https://www.iana.org/assignments/charset-reg/IBM01142
	IBM01142 MIB = 2093

	// IBM01143 is the MIB identifier with IANA name IBM01143.
	//
	// IBM See https://www.iana.org/assignments/charset-reg/IBM01143
	IBM01143 MIB = 2094

	// IBM01144 is the MIB identifier with IANA name IBM01144.
	//
	// IBM See https://www.iana.org/assignments/charset-reg/IBM01144
	IBM01144 MIB = 2095

	// IBM01145 is the MIB identifier with IANA name IBM01145.
	//
	// IBM See https://www.iana.org/assignments/charset-reg/IBM01145
	IBM01145 MIB = 2096

	// IBM01146 is the MIB identifier with IANA name IBM01146.
	//
	// IBM See https://www.iana.org/assignments/charset-reg/IBM01146
	IBM01146 MIB = 2097

	// IBM01147 is the MIB identifier with IANA name IBM01147.
	//
	// IBM See https://www.iana.org/assignments/charset-reg/IBM01147
	IBM01147 MIB = 2098

	// IBM01148 is the MIB identifier with IANA name IBM01148.
	//
	// IBM See https://www.iana.org/assignments/charset-reg/IBM01148
	IBM01148 MIB = 2099

	// IBM01149 is the MIB identifier with IANA name IBM01149.
	//
	// IBM See https://www.iana.org/assignments/charset-reg/IBM01149
	IBM01149 MIB = 2100

	// Big5HKSCS is the MIB identifier with IANA name Big5-HKSCS.
	//
	// See https://www.iana.org/assignments/charset-reg/Big5-HKSCS
	Big5HKSCS MIB = 2101

	// IBM1047 is the MIB identifier with IANA name IBM1047.
	//
	// IBM1047 (EBCDIC Latin 1/Open Systems) https://www-1.ibm.com/servers/eserver/iseries/software/globalization/pdf/cp01047z.pdf
	IBM1047 MIB = 2102

	// PTCP154 is the MIB identifier with IANA name PTCP154.
	//
	// See https://www.iana.org/assignments/charset-reg/PTCP154
	PTCP154 MIB = 2103

	// Amiga1251 is the MIB identifier with IANA name Amiga-1251.
	//
	// See https://www.amiga.ultranet.ru/Amiga-1251.html
	Amiga1251 MIB = 2104

	// KOI7switched is the MIB identifier with IANA name KOI7-switched.
	//
	// See https://www.iana.org/assignments/charset-reg/KOI7-switched
	KOI7switched MIB = 2105

	// BRF is the MIB identifier with IANA name BRF.
	//
	// See https://www.iana.org/assignments/charset-reg/BRF
	BRF MIB = 2106

	// TSCII is the MIB identifier with IANA name TSCII.
	//
	// See https://www.iana.org/assignments/charset-reg/TSCII
	TSCII MIB = 2107

	// CP51932 is the MIB identifier with IANA name CP51932.
	//
	// See https://www.iana.org/assignments/charset-reg/CP51932
	CP51932 MIB = 2108

	// Windows874 is the MIB identifier with IANA name windows-874.
	//
	// See https://www.iana.org/assignments/charset-reg/windows-874
	Windows874 MIB = 2109

	// Windows1250 is the MIB identifier with IANA name windows-1250.
	//
	// Microsoft https://www.iana.org/assignments/charset-reg/windows-1250
	Windows1250 MIB = 2250

	// Windows1251 is the MIB identifier with IANA name windows-1251.
	//
	// Microsoft https://www.iana.org/assignments/charset-reg/windows-1251
	Windows1251 MIB = 2251

	// Windows1252 is the MIB identifier with IANA name windows-1252.
	//
	// Microsoft https://www.iana.org/assignments/charset-reg/windows-1252
	Windows1252 MIB = 2252

	// Windows1253 is the MIB identifier with IANA name windows-1253.
	//
	// Microsoft https://www.iana.org/assignments/charset-reg/windows-1253
	Windows1253 MIB = 2253

	// Windows1254 is the MIB identifier with IANA name windows-1254.
	//
	// Microsoft https://www.iana.org/assignments/charset-reg/windows-1254
	Windows1254 MIB = 2254

	// Windows1255 is the MIB identifier with IANA name windows-1255.
	//
	// Microsoft https://www.iana.org/assignments/charset-reg/windows-1255
	Windows1255 MIB = 2255

	// Windows1256 is the MIB identifier with IANA name windows-1256.
	//
	// Microsoft https://www.iana.org/assignments/charset-reg/windows-1256
	Windows1256 MIB = 2256

	// Windows1257 is the MIB identifier with IANA name windows-1257.
	//
	// Microsoft https://www.iana.org/assignments/charset-reg/windows-1257
	Windows1257 MIB = 2257

	// Windows1258 is the MIB identifier with IANA name windows-1258.
	//
	// Microsoft https://www.iana.org/assignments/charset-reg/windows-1258
	Windows1258 MIB = 2258

	// TIS620 is the MIB identifier with IANA name TIS-620.
	//
	// Thai Industrial Standards Institute (TISI)
	TIS620 MIB = 2259

	// CP50220 is the MIB identifier with IANA name CP50220.
	//
	// See https://www.iana.org/assignments/charset-reg/CP50220
	CP50220 MIB = 2260
)
   07070100000F01000081A4000000000000000000000001645E367C0000086E000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/internal/internal.go    // Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package internal contains code that is shared among encoding implementations.
package internal

import (
	"golang.org/x/text/encoding"
	"golang.org/x/text/encoding/internal/identifier"
	"golang.org/x/text/transform"
)

// Encoding is an implementation of the Encoding interface that adds the String
// and ID methods to an existing encoding.
type Encoding struct {
	encoding.Encoding
	Name string
	MIB  identifier.MIB
}

// _ verifies that Encoding implements identifier.Interface.
var _ identifier.Interface = (*Encoding)(nil)

func (e *Encoding) String() string {
	return e.Name
}

func (e *Encoding) ID() (mib identifier.MIB, other string) {
	return e.MIB, ""
}

// SimpleEncoding is an Encoding that combines two Transformers.
type SimpleEncoding struct {
	Decoder transform.Transformer
	Encoder transform.Transformer
}

func (e *SimpleEncoding) NewDecoder() *encoding.Decoder {
	return &encoding.Decoder{Transformer: e.Decoder}
}

func (e *SimpleEncoding) NewEncoder() *encoding.Encoder {
	return &encoding.Encoder{Transformer: e.Encoder}
}

// FuncEncoding is an Encoding that combines two functions returning a new
// Transformer.
type FuncEncoding struct {
	Decoder func() transform.Transformer
	Encoder func() transform.Transformer
}

func (e FuncEncoding) NewDecoder() *encoding.Decoder {
	return &encoding.Decoder{Transformer: e.Decoder()}
}

func (e FuncEncoding) NewEncoder() *encoding.Encoder {
	return &encoding.Encoder{Transformer: e.Encoder()}
}

// A RepertoireError indicates a rune is not in the repertoire of a destination
// encoding. It is associated with an encoding-specific suggested replacement
// byte.
type RepertoireError byte

// Error implements the error interface.
func (r RepertoireError) Error() string {
	return "encoding: rune not supported by encoding."
}

// Replacement returns the replacement string associated with this error.
func (r RepertoireError) Replacement() byte { return byte(r) }

var ErrASCIIReplacement = RepertoireError(encoding.ASCIISub)
  07070100000F02000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/japanese    07070100000F03000081A4000000000000000000000001645E367C00000151000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/japanese/all.go // Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package japanese

import (
	"golang.org/x/text/encoding"
)

// All is a list of all defined encodings in this package.
var All = []encoding.Encoding{EUCJP, ISO2022JP, ShiftJIS}
   07070100000F04000081A4000000000000000000000001645E367C0000135E000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/japanese/eucjp.go   // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package japanese

import (
	"unicode/utf8"

	"golang.org/x/text/encoding"
	"golang.org/x/text/encoding/internal"
	"golang.org/x/text/encoding/internal/identifier"
	"golang.org/x/text/transform"
)

// EUCJP is the EUC-JP encoding.
var EUCJP encoding.Encoding = &eucJP

var eucJP = internal.Encoding{
	&internal.SimpleEncoding{eucJPDecoder{}, eucJPEncoder{}},
	"EUC-JP",
	identifier.EUCPkdFmtJapanese,
}

type eucJPDecoder struct{ transform.NopResetter }

// See https://encoding.spec.whatwg.org/#euc-jp-decoder.
func (eucJPDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	r, size := rune(0), 0
loop:
	for ; nSrc < len(src); nSrc += size {
		switch c0 := src[nSrc]; {
		case c0 < utf8.RuneSelf:
			r, size = rune(c0), 1

		case c0 == 0x8e:
			if nSrc+1 >= len(src) {
				if !atEOF {
					err = transform.ErrShortSrc
					break loop
				}
				r, size = utf8.RuneError, 1
				break
			}
			c1 := src[nSrc+1]
			switch {
			case c1 < 0xa1:
				r, size = utf8.RuneError, 1
			case c1 > 0xdf:
				r, size = utf8.RuneError, 2
				if c1 == 0xff {
					size = 1
				}
			default:
				r, size = rune(c1)+(0xff61-0xa1), 2
			}
		case c0 == 0x8f:
			if nSrc+2 >= len(src) {
				if !atEOF {
					err = transform.ErrShortSrc
					break loop
				}
				r, size = utf8.RuneError, 1
				if p := nSrc + 1; p < len(src) && 0xa1 <= src[p] && src[p] < 0xfe {
					size = 2
				}
				break
			}
			c1 := src[nSrc+1]
			if c1 < 0xa1 || 0xfe < c1 {
				r, size = utf8.RuneError, 1
				break
			}
			c2 := src[nSrc+2]
			if c2 < 0xa1 || 0xfe < c2 {
				r, size = utf8.RuneError, 2
				break
			}
			r, size = utf8.RuneError, 3
			if i := int(c1-0xa1)*94 + int(c2-0xa1); i < len(jis0212Decode) {
				r = rune(jis0212Decode[i])
				if r == 0 {
					r = utf8.RuneError
				}
			}

		case 0xa1 <= c0 && c0 <= 0xfe:
			if nSrc+1 >= len(src) {
				if !atEOF {
					err = transform.ErrShortSrc
					break loop
				}
				r, size = utf8.RuneError, 1
				break
			}
			c1 := src[nSrc+1]
			if c1 < 0xa1 || 0xfe < c1 {
				r, size = utf8.RuneError, 1
				break
			}
			r, size = utf8.RuneError, 2
			if i := int(c0-0xa1)*94 + int(c1-0xa1); i < len(jis0208Decode) {
				r = rune(jis0208Decode[i])
				if r == 0 {
					r = utf8.RuneError
				}
			}

		default:
			r, size = utf8.RuneError, 1
		}

		if nDst+utf8.RuneLen(r) > len(dst) {
			err = transform.ErrShortDst
			break loop
		}
		nDst += utf8.EncodeRune(dst[nDst:], r)
	}
	return nDst, nSrc, err
}

type eucJPEncoder struct{ transform.NopResetter }

func (eucJPEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	r, size := rune(0), 0
	for ; nSrc < len(src); nSrc += size {
		r = rune(src[nSrc])

		// Decode a 1-byte rune.
		if r < utf8.RuneSelf {
			size = 1

		} else {
			// Decode a multi-byte rune.
			r, size = utf8.DecodeRune(src[nSrc:])
			if size == 1 {
				// All valid runes of size 1 (those below utf8.RuneSelf) were
				// handled above. We have invalid UTF-8 or we haven't seen the
				// full character yet.
				if !atEOF && !utf8.FullRune(src[nSrc:]) {
					err = transform.ErrShortSrc
					break
				}
			}

			// func init checks that the switch covers all tables.
			switch {
			case encode0Low <= r && r < encode0High:
				if r = rune(encode0[r-encode0Low]); r != 0 {
					goto write2or3
				}
			case encode1Low <= r && r < encode1High:
				if r = rune(encode1[r-encode1Low]); r != 0 {
					goto write2or3
				}
			case encode2Low <= r && r < encode2High:
				if r = rune(encode2[r-encode2Low]); r != 0 {
					goto write2or3
				}
			case encode3Low <= r && r < encode3High:
				if r = rune(encode3[r-encode3Low]); r != 0 {
					goto write2or3
				}
			case encode4Low <= r && r < encode4High:
				if r = rune(encode4[r-encode4Low]); r != 0 {
					goto write2or3
				}
			case encode5Low <= r && r < encode5High:
				if 0xff61 <= r && r < 0xffa0 {
					goto write2
				}
				if r = rune(encode5[r-encode5Low]); r != 0 {
					goto write2or3
				}
			}
			err = internal.ErrASCIIReplacement
			break
		}

		if nDst >= len(dst) {
			err = transform.ErrShortDst
			break
		}
		dst[nDst] = uint8(r)
		nDst++
		continue

	write2or3:
		if r>>tableShift == jis0208 {
			if nDst+2 > len(dst) {
				err = transform.ErrShortDst
				break
			}
		} else {
			if nDst+3 > len(dst) {
				err = transform.ErrShortDst
				break
			}
			dst[nDst] = 0x8f
			nDst++
		}
		dst[nDst+0] = 0xa1 + uint8(r>>codeShift)&codeMask
		dst[nDst+1] = 0xa1 + uint8(r)&codeMask
		nDst += 2
		continue

	write2:
		if nDst+2 > len(dst) {
			err = transform.ErrShortDst
			break
		}
		dst[nDst+0] = 0x8e
		dst[nDst+1] = uint8(r - (0xff61 - 0xa1))
		nDst += 2
		continue
	}
	return nDst, nSrc, err
}

func init() {
	// Check that the hard-coded encode switch covers all tables.
	if numEncodeTables != 6 {
		panic("bad numEncodeTables")
	}
}
  07070100000F05000081A4000000000000000000000001645E367C00001A74000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/japanese/iso2022jp.go   // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package japanese

import (
	"unicode/utf8"

	"golang.org/x/text/encoding"
	"golang.org/x/text/encoding/internal"
	"golang.org/x/text/encoding/internal/identifier"
	"golang.org/x/text/transform"
)

// ISO2022JP is the ISO-2022-JP encoding.
var ISO2022JP encoding.Encoding = &iso2022JP

var iso2022JP = internal.Encoding{
	internal.FuncEncoding{iso2022JPNewDecoder, iso2022JPNewEncoder},
	"ISO-2022-JP",
	identifier.ISO2022JP,
}

func iso2022JPNewDecoder() transform.Transformer {
	return new(iso2022JPDecoder)
}

func iso2022JPNewEncoder() transform.Transformer {
	return new(iso2022JPEncoder)
}

const (
	asciiState = iota
	katakanaState
	jis0208State
	jis0212State
)

const asciiEsc = 0x1b

type iso2022JPDecoder int

func (d *iso2022JPDecoder) Reset() {
	*d = asciiState
}

func (d *iso2022JPDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	r, size := rune(0), 0
	for ; nSrc < len(src); nSrc += size {
		c0 := src[nSrc]
		if c0 >= utf8.RuneSelf {
			r, size = '\ufffd', 1
			goto write
		}

		if c0 == asciiEsc {
			if nSrc+2 >= len(src) {
				if !atEOF {
					return nDst, nSrc, transform.ErrShortSrc
				}
				// TODO: is it correct to only skip 1??
				r, size = '\ufffd', 1
				goto write
			}
			size = 3
			c1 := src[nSrc+1]
			c2 := src[nSrc+2]
			switch {
			case c1 == '$' && (c2 == '@' || c2 == 'B'): // 0x24 {0x40, 0x42}
				*d = jis0208State
				continue
			case c1 == '$' && c2 == '(': // 0x24 0x28
				if nSrc+3 >= len(src) {
					if !atEOF {
						return nDst, nSrc, transform.ErrShortSrc
					}
					r, size = '\ufffd', 1
					goto write
				}
				size = 4
				if src[nSrc+3] == 'D' {
					*d = jis0212State
					continue
				}
			case c1 == '(' && (c2 == 'B' || c2 == 'J'): // 0x28 {0x42, 0x4A}
				*d = asciiState
				continue
			case c1 == '(' && c2 == 'I': // 0x28 0x49
				*d = katakanaState
				continue
			}
			r, size = '\ufffd', 1
			goto write
		}

		switch *d {
		case asciiState:
			r, size = rune(c0), 1

		case katakanaState:
			if c0 < 0x21 || 0x60 <= c0 {
				r, size = '\ufffd', 1
				goto write
			}
			r, size = rune(c0)+(0xff61-0x21), 1

		default:
			if c0 == 0x0a {
				*d = asciiState
				r, size = rune(c0), 1
				goto write
			}
			if nSrc+1 >= len(src) {
				if !atEOF {
					return nDst, nSrc, transform.ErrShortSrc
				}
				r, size = '\ufffd', 1
				goto write
			}
			size = 2
			c1 := src[nSrc+1]
			i := int(c0-0x21)*94 + int(c1-0x21)
			if *d == jis0208State && i < len(jis0208Decode) {
				r = rune(jis0208Decode[i])
			} else if *d == jis0212State && i < len(jis0212Decode) {
				r = rune(jis0212Decode[i])
			} else {
				r = '\ufffd'
				goto write
			}
			if r == 0 {
				r = '\ufffd'
			}
		}

	write:
		if nDst+utf8.RuneLen(r) > len(dst) {
			return nDst, nSrc, transform.ErrShortDst
		}
		nDst += utf8.EncodeRune(dst[nDst:], r)
	}
	return nDst, nSrc, err
}

type iso2022JPEncoder int

func (e *iso2022JPEncoder) Reset() {
	*e = asciiState
}

func (e *iso2022JPEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	r, size := rune(0), 0
	for ; nSrc < len(src); nSrc += size {
		r = rune(src[nSrc])

		// Decode a 1-byte rune.
		if r < utf8.RuneSelf {
			size = 1

		} else {
			// Decode a multi-byte rune.
			r, size = utf8.DecodeRune(src[nSrc:])
			if size == 1 {
				// All valid runes of size 1 (those below utf8.RuneSelf) were
				// handled above. We have invalid UTF-8 or we haven't seen the
				// full character yet.
				if !atEOF && !utf8.FullRune(src[nSrc:]) {
					err = transform.ErrShortSrc
					break
				}
			}

			// func init checks that the switch covers all tables.
			//
			// http://encoding.spec.whatwg.org/#iso-2022-jp says that "the index jis0212
			// is not used by the iso-2022-jp encoder due to lack of widespread support".
			//
			// TODO: do we have to special-case U+00A5 and U+203E, as per
			// http://encoding.spec.whatwg.org/#iso-2022-jp
			// Doing so would mean that "\u00a5" would not be preserved
			// after an encode-decode round trip.
			switch {
			case encode0Low <= r && r < encode0High:
				if r = rune(encode0[r-encode0Low]); r>>tableShift == jis0208 {
					goto writeJIS
				}
			case encode1Low <= r && r < encode1High:
				if r = rune(encode1[r-encode1Low]); r>>tableShift == jis0208 {
					goto writeJIS
				}
			case encode2Low <= r && r < encode2High:
				if r = rune(encode2[r-encode2Low]); r>>tableShift == jis0208 {
					goto writeJIS
				}
			case encode3Low <= r && r < encode3High:
				if r = rune(encode3[r-encode3Low]); r>>tableShift == jis0208 {
					goto writeJIS
				}
			case encode4Low <= r && r < encode4High:
				if r = rune(encode4[r-encode4Low]); r>>tableShift == jis0208 {
					goto writeJIS
				}
			case encode5Low <= r && r < encode5High:
				if 0xff61 <= r && r < 0xffa0 {
					goto writeKatakana
				}
				if r = rune(encode5[r-encode5Low]); r>>tableShift == jis0208 {
					goto writeJIS
				}
			}

			// Switch back to ASCII state in case of error so that an ASCII
			// replacement character can be written in the correct state.
			if *e != asciiState {
				if nDst+3 > len(dst) {
					err = transform.ErrShortDst
					break
				}
				*e = asciiState
				dst[nDst+0] = asciiEsc
				dst[nDst+1] = '('
				dst[nDst+2] = 'B'
				nDst += 3
			}
			err = internal.ErrASCIIReplacement
			break
		}

		if *e != asciiState {
			if nDst+4 > len(dst) {
				err = transform.ErrShortDst
				break
			}
			*e = asciiState
			dst[nDst+0] = asciiEsc
			dst[nDst+1] = '('
			dst[nDst+2] = 'B'
			nDst += 3
		} else if nDst >= len(dst) {
			err = transform.ErrShortDst
			break
		}
		dst[nDst] = uint8(r)
		nDst++
		continue

	writeJIS:
		if *e != jis0208State {
			if nDst+5 > len(dst) {
				err = transform.ErrShortDst
				break
			}
			*e = jis0208State
			dst[nDst+0] = asciiEsc
			dst[nDst+1] = '$'
			dst[nDst+2] = 'B'
			nDst += 3
		} else if nDst+2 > len(dst) {
			err = transform.ErrShortDst
			break
		}
		dst[nDst+0] = 0x21 + uint8(r>>codeShift)&codeMask
		dst[nDst+1] = 0x21 + uint8(r)&codeMask
		nDst += 2
		continue

	writeKatakana:
		if *e != katakanaState {
			if nDst+4 > len(dst) {
				err = transform.ErrShortDst
				break
			}
			*e = katakanaState
			dst[nDst+0] = asciiEsc
			dst[nDst+1] = '('
			dst[nDst+2] = 'I'
			nDst += 3
		} else if nDst >= len(dst) {
			err = transform.ErrShortDst
			break
		}
		dst[nDst] = uint8(r - (0xff61 - 0x21))
		nDst++
		continue
	}
	if atEOF && err == nil && *e != asciiState {
		if nDst+3 > len(dst) {
			err = transform.ErrShortDst
		} else {
			*e = asciiState
			dst[nDst+0] = asciiEsc
			dst[nDst+1] = '('
			dst[nDst+2] = 'B'
			nDst += 3
		}
	}
	return nDst, nSrc, err
}
07070100000F06000081A4000000000000000000000001645E367C000010C2000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/japanese/shiftjis.go    // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package japanese

import (
	"unicode/utf8"

	"golang.org/x/text/encoding"
	"golang.org/x/text/encoding/internal"
	"golang.org/x/text/encoding/internal/identifier"
	"golang.org/x/text/transform"
)

// ShiftJIS is the Shift JIS encoding, also known as Code Page 932 and
// Windows-31J.
var ShiftJIS encoding.Encoding = &shiftJIS

var shiftJIS = internal.Encoding{
	&internal.SimpleEncoding{shiftJISDecoder{}, shiftJISEncoder{}},
	"Shift JIS",
	identifier.ShiftJIS,
}

type shiftJISDecoder struct{ transform.NopResetter }

func (shiftJISDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	r, size := rune(0), 0
loop:
	for ; nSrc < len(src); nSrc += size {
		switch c0 := src[nSrc]; {
		case c0 < utf8.RuneSelf:
			r, size = rune(c0), 1

		case 0xa1 <= c0 && c0 < 0xe0:
			r, size = rune(c0)+(0xff61-0xa1), 1

		case (0x81 <= c0 && c0 < 0xa0) || (0xe0 <= c0 && c0 < 0xfd):
			if c0 <= 0x9f {
				c0 -= 0x70
			} else {
				c0 -= 0xb0
			}
			c0 = 2*c0 - 0x21

			if nSrc+1 >= len(src) {
				if !atEOF {
					err = transform.ErrShortSrc
					break loop
				}
				r, size = '\ufffd', 1
				goto write
			}
			c1 := src[nSrc+1]
			switch {
			case c1 < 0x40:
				r, size = '\ufffd', 1 // c1 is ASCII so output on next round
				goto write
			case c1 < 0x7f:
				c0--
				c1 -= 0x40
			case c1 == 0x7f:
				r, size = '\ufffd', 1 // c1 is ASCII so output on next round
				goto write
			case c1 < 0x9f:
				c0--
				c1 -= 0x41
			case c1 < 0xfd:
				c1 -= 0x9f
			default:
				r, size = '\ufffd', 2
				goto write
			}
			r, size = '\ufffd', 2
			if i := int(c0)*94 + int(c1); i < len(jis0208Decode) {
				r = rune(jis0208Decode[i])
				if r == 0 {
					r = '\ufffd'
				}
			}

		case c0 == 0x80:
			r, size = 0x80, 1

		default:
			r, size = '\ufffd', 1
		}
	write:
		if nDst+utf8.RuneLen(r) > len(dst) {
			err = transform.ErrShortDst
			break loop
		}
		nDst += utf8.EncodeRune(dst[nDst:], r)
	}
	return nDst, nSrc, err
}

type shiftJISEncoder struct{ transform.NopResetter }

func (shiftJISEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	r, size := rune(0), 0
loop:
	for ; nSrc < len(src); nSrc += size {
		r = rune(src[nSrc])

		// Decode a 1-byte rune.
		if r < utf8.RuneSelf {
			size = 1

		} else {
			// Decode a multi-byte rune.
			r, size = utf8.DecodeRune(src[nSrc:])
			if size == 1 {
				// All valid runes of size 1 (those below utf8.RuneSelf) were
				// handled above. We have invalid UTF-8 or we haven't seen the
				// full character yet.
				if !atEOF && !utf8.FullRune(src[nSrc:]) {
					err = transform.ErrShortSrc
					break loop
				}
			}

			// func init checks that the switch covers all tables.
			switch {
			case encode0Low <= r && r < encode0High:
				if r = rune(encode0[r-encode0Low]); r>>tableShift == jis0208 {
					goto write2
				}
			case encode1Low <= r && r < encode1High:
				if r = rune(encode1[r-encode1Low]); r>>tableShift == jis0208 {
					goto write2
				}
			case encode2Low <= r && r < encode2High:
				if r = rune(encode2[r-encode2Low]); r>>tableShift == jis0208 {
					goto write2
				}
			case encode3Low <= r && r < encode3High:
				if r = rune(encode3[r-encode3Low]); r>>tableShift == jis0208 {
					goto write2
				}
			case encode4Low <= r && r < encode4High:
				if r = rune(encode4[r-encode4Low]); r>>tableShift == jis0208 {
					goto write2
				}
			case encode5Low <= r && r < encode5High:
				if 0xff61 <= r && r < 0xffa0 {
					r -= 0xff61 - 0xa1
					goto write1
				}
				if r = rune(encode5[r-encode5Low]); r>>tableShift == jis0208 {
					goto write2
				}
			}
			err = internal.ErrASCIIReplacement
			break
		}

	write1:
		if nDst >= len(dst) {
			err = transform.ErrShortDst
			break
		}
		dst[nDst] = uint8(r)
		nDst++
		continue

	write2:
		j1 := uint8(r>>codeShift) & codeMask
		j2 := uint8(r) & codeMask
		if nDst+2 > len(dst) {
			err = transform.ErrShortDst
			break loop
		}
		if j1 <= 61 {
			dst[nDst+0] = 129 + j1/2
		} else {
			dst[nDst+0] = 193 + j1/2
		}
		if j1&1 == 0 {
			dst[nDst+1] = j2 + j2/63 + 64
		} else {
			dst[nDst+1] = j2 + 159
		}
		nDst += 2
		continue
	}
	return nDst, nSrc, err
}
  07070100000F07000081A4000000000000000000000001645E367C000C7BAF000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/japanese/tables.go  // generated by go run maketables.go; DO NOT EDIT

// Package japanese provides Japanese encodings such as EUC-JP and Shift JIS.
package japanese // import "golang.org/x/text/encoding/japanese"

// jis0208Decode is the decoding table from JIS 0208 code to Unicode.
// It is defined at http://encoding.spec.whatwg.org/index-jis0208.txt
var jis0208Decode = [...]uint16{
	0:     0x3000,
	1:     0x3001,
	2:     0x3002,
	3:     0xFF0C,
	4:     0xFF0E,
	5:     0x30FB,
	6:     0xFF1A,
	7:     0xFF1B,
	8:     0xFF1F,
	9:     0xFF01,
	10:    0x309B,
	11:    0x309C,
	12:    0x00B4,
	13:    0xFF40,
	14:    0x00A8,
	15:    0xFF3E,
	16:    0xFFE3,
	17:    0xFF3F,
	18:    0x30FD,
	19:    0x30FE,
	20:    0x309D,
	21:    0x309E,
	22:    0x3003,
	23:    0x4EDD,
	24:    0x3005,
	25:    0x3006,
	26:    0x3007,
	27:    0x30FC,
	28:    0x2015,
	29:    0x2010,
	30:    0xFF0F,
	31:    0xFF3C,
	32:    0xFF5E,
	33:    0x2225,
	34:    0xFF5C,
	35:    0x2026,
	36:    0x2025,
	37:    0x2018,
	38:    0x2019,
	39:    0x201C,
	40:    0x201D,
	41:    0xFF08,
	42:    0xFF09,
	43:    0x3014,
	44:    0x3015,
	45:    0xFF3B,
	46:    0xFF3D,
	47:    0xFF5B,
	48:    0xFF5D,
	49:    0x3008,
	50:    0x3009,
	51:    0x300A,
	52:    0x300B,
	53:    0x300C,
	54:    0x300D,
	55:    0x300E,
	56:    0x300F,
	57:    0x3010,
	58:    0x3011,
	59:    0xFF0B,
	60:    0xFF0D,
	61:    0x00B1,
	62:    0x00D7,
	63:    0x00F7,
	64:    0xFF1D,
	65:    0x2260,
	66:    0xFF1C,
	67:    0xFF1E,
	68:    0x2266,
	69:    0x2267,
	70:    0x221E,
	71:    0x2234,
	72:    0x2642,
	73:    0x2640,
	74:    0x00B0,
	75:    0x2032,
	76:    0x2033,
	77:    0x2103,
	78:    0xFFE5,
	79:    0xFF04,
	80:    0xFFE0,
	81:    0xFFE1,
	82:    0xFF05,
	83:    0xFF03,
	84:    0xFF06,
	85:    0xFF0A,
	86:    0xFF20,
	87:    0x00A7,
	88:    0x2606,
	89:    0x2605,
	90:    0x25CB,
	91:    0x25CF,
	92:    0x25CE,
	93:    0x25C7,
	94:    0x25C6,
	95:    0x25A1,
	96:    0x25A0,
	97:    0x25B3,
	98:    0x25B2,
	99:    0x25BD,
	100:   0x25BC,
	101:   0x203B,
	102:   0x3012,
	103:   0x2192,
	104:   0x2190,
	105:   0x2191,
	106:   0x2193,
	107:   0x3013,
	119:   0x2208,
	120:   0x220B,
	121:   0x2286,
	122:   0x2287,
	123:   0x2282,
	124:   0x2283,
	125:   0x222A,
	126:   0x2229,
	135:   0x2227,
	136:   0x2228,
	137:   0xFFE2,
	138:   0x21D2,
	139:   0x21D4,
	140:   0x2200,
	141:   0x2203,
	153:   0x2220,
	154:   0x22A5,
	155:   0x2312,
	156:   0x2202,
	157:   0x2207,
	158:   0x2261,
	159:   0x2252,
	160:   0x226A,
	161:   0x226B,
	162:   0x221A,
	163:   0x223D,
	164:   0x221D,
	165:   0x2235,
	166:   0x222B,
	167:   0x222C,
	175:   0x212B,
	176:   0x2030,
	177:   0x266F,
	178:   0x266D,
	179:   0x266A,
	180:   0x2020,
	181:   0x2021,
	182:   0x00B6,
	187:   0x25EF,
	203:   0xFF10,
	204:   0xFF11,
	205:   0xFF12,
	206:   0xFF13,
	207:   0xFF14,
	208:   0xFF15,
	209:   0xFF16,
	210:   0xFF17,
	211:   0xFF18,
	212:   0xFF19,
	220:   0xFF21,
	221:   0xFF22,
	222:   0xFF23,
	223:   0xFF24,
	224:   0xFF25,
	225:   0xFF26,
	226:   0xFF27,
	227:   0xFF28,
	228:   0xFF29,
	229:   0xFF2A,
	230:   0xFF2B,
	231:   0xFF2C,
	232:   0xFF2D,
	233:   0xFF2E,
	234:   0xFF2F,
	235:   0xFF30,
	236:   0xFF31,
	237:   0xFF32,
	238:   0xFF33,
	239:   0xFF34,
	240:   0xFF35,
	241:   0xFF36,
	242:   0xFF37,
	243:   0xFF38,
	244:   0xFF39,
	245:   0xFF3A,
	252:   0xFF41,
	253:   0xFF42,
	254:   0xFF43,
	255:   0xFF44,
	256:   0xFF45,
	257:   0xFF46,
	258:   0xFF47,
	259:   0xFF48,
	260:   0xFF49,
	261:   0xFF4A,
	262:   0xFF4B,
	263:   0xFF4C,
	264:   0xFF4D,
	265:   0xFF4E,
	266:   0xFF4F,
	267:   0xFF50,
	268:   0xFF51,
	269:   0xFF52,
	270:   0xFF53,
	271:   0xFF54,
	272:   0xFF55,
	273:   0xFF56,
	274:   0xFF57,
	275:   0xFF58,
	276:   0xFF59,
	277:   0xFF5A,
	282:   0x3041,
	283:   0x3042,
	284:   0x3043,
	285:   0x3044,
	286:   0x3045,
	287:   0x3046,
	288:   0x3047,
	289:   0x3048,
	290:   0x3049,
	291:   0x304A,
	292:   0x304B,
	293:   0x304C,
	294:   0x304D,
	295:   0x304E,
	296:   0x304F,
	297:   0x3050,
	298:   0x3051,
	299:   0x3052,
	300:   0x3053,
	301:   0x3054,
	302:   0x3055,
	303:   0x3056,
	304:   0x3057,
	305:   0x3058,
	306:   0x3059,
	307:   0x305A,
	308:   0x305B,
	309:   0x305C,
	310:   0x305D,
	311:   0x305E,
	312:   0x305F,
	313:   0x3060,
	314:   0x3061,
	315:   0x3062,
	316:   0x3063,
	317:   0x3064,
	318:   0x3065,
	319:   0x3066,
	320:   0x3067,
	321:   0x3068,
	322:   0x3069,
	323:   0x306A,
	324:   0x306B,
	325:   0x306C,
	326:   0x306D,
	327:   0x306E,
	328:   0x306F,
	329:   0x3070,
	330:   0x3071,
	331:   0x3072,
	332:   0x3073,
	333:   0x3074,
	334:   0x3075,
	335:   0x3076,
	336:   0x3077,
	337:   0x3078,
	338:   0x3079,
	339:   0x307A,
	340:   0x307B,
	341:   0x307C,
	342:   0x307D,
	343:   0x307E,
	344:   0x307F,
	345:   0x3080,
	346:   0x3081,
	347:   0x3082,
	348:   0x3083,
	349:   0x3084,
	350:   0x3085,
	351:   0x3086,
	352:   0x3087,
	353:   0x3088,
	354:   0x3089,
	355:   0x308A,
	356:   0x308B,
	357:   0x308C,
	358:   0x308D,
	359:   0x308E,
	360:   0x308F,
	361:   0x3090,
	362:   0x3091,
	363:   0x3092,
	364:   0x3093,
	376:   0x30A1,
	377:   0x30A2,
	378:   0x30A3,
	379:   0x30A4,
	380:   0x30A5,
	381:   0x30A6,
	382:   0x30A7,
	383:   0x30A8,
	384:   0x30A9,
	385:   0x30AA,
	386:   0x30AB,
	387:   0x30AC,
	388:   0x30AD,
	389:   0x30AE,
	390:   0x30AF,
	391:   0x30B0,
	392:   0x30B1,
	393:   0x30B2,
	394:   0x30B3,
	395:   0x30B4,
	396:   0x30B5,
	397:   0x30B6,
	398:   0x30B7,
	399:   0x30B8,
	400:   0x30B9,
	401:   0x30BA,
	402:   0x30BB,
	403:   0x30BC,
	404:   0x30BD,
	405:   0x30BE,
	406:   0x30BF,
	407:   0x30C0,
	408:   0x30C1,
	409:   0x30C2,
	410:   0x30C3,
	411:   0x30C4,
	412:   0x30C5,
	413:   0x30C6,
	414:   0x30C7,
	415:   0x30C8,
	416:   0x30C9,
	417:   0x30CA,
	418:   0x30CB,
	419:   0x30CC,
	420:   0x30CD,
	421:   0x30CE,
	422:   0x30CF,
	423:   0x30D0,
	424:   0x30D1,
	425:   0x30D2,
	426:   0x30D3,
	427:   0x30D4,
	428:   0x30D5,
	429:   0x30D6,
	430:   0x30D7,
	431:   0x30D8,
	432:   0x30D9,
	433:   0x30DA,
	434:   0x30DB,
	435:   0x30DC,
	436:   0x30DD,
	437:   0x30DE,
	438:   0x30DF,
	439:   0x30E0,
	440:   0x30E1,
	441:   0x30E2,
	442:   0x30E3,
	443:   0x30E4,
	444:   0x30E5,
	445:   0x30E6,
	446:   0x30E7,
	447:   0x30E8,
	448:   0x30E9,
	449:   0x30EA,
	450:   0x30EB,
	451:   0x30EC,
	452:   0x30ED,
	453:   0x30EE,
	454:   0x30EF,
	455:   0x30F0,
	456:   0x30F1,
	457:   0x30F2,
	458:   0x30F3,
	459:   0x30F4,
	460:   0x30F5,
	461:   0x30F6,
	470:   0x0391,
	471:   0x0392,
	472:   0x0393,
	473:   0x0394,
	474:   0x0395,
	475:   0x0396,
	476:   0x0397,
	477:   0x0398,
	478:   0x0399,
	479:   0x039A,
	480:   0x039B,
	481:   0x039C,
	482:   0x039D,
	483:   0x039E,
	484:   0x039F,
	485:   0x03A0,
	486:   0x03A1,
	487:   0x03A3,
	488:   0x03A4,
	489:   0x03A5,
	490:   0x03A6,
	491:   0x03A7,
	492:   0x03A8,
	493:   0x03A9,
	502:   0x03B1,
	503:   0x03B2,
	504:   0x03B3,
	505:   0x03B4,
	506:   0x03B5,
	507:   0x03B6,
	508:   0x03B7,
	509:   0x03B8,
	510:   0x03B9,
	511:   0x03BA,
	512:   0x03BB,
	513:   0x03BC,
	514:   0x03BD,
	515:   0x03BE,
	516:   0x03BF,
	517:   0x03C0,
	518:   0x03C1,
	519:   0x03C3,
	520:   0x03C4,
	521:   0x03C5,
	522:   0x03C6,
	523:   0x03C7,
	524:   0x03C8,
	525:   0x03C9,
	564:   0x0410,
	565:   0x0411,
	566:   0x0412,
	567:   0x0413,
	568:   0x0414,
	569:   0x0415,
	570:   0x0401,
	571:   0x0416,
	572:   0x0417,
	573:   0x0418,
	574:   0x0419,
	575:   0x041A,
	576:   0x041B,
	577:   0x041C,
	578:   0x041D,
	579:   0x041E,
	580:   0x041F,
	581:   0x0420,
	582:   0x0421,
	583:   0x0422,
	584:   0x0423,
	585:   0x0424,
	586:   0x0425,
	587:   0x0426,
	588:   0x0427,
	589:   0x0428,
	590:   0x0429,
	591:   0x042A,
	592:   0x042B,
	593:   0x042C,
	594:   0x042D,
	595:   0x042E,
	596:   0x042F,
	612:   0x0430,
	613:   0x0431,
	614:   0x0432,
	615:   0x0433,
	616:   0x0434,
	617:   0x0435,
	618:   0x0451,
	619:   0x0436,
	620:   0x0437,
	621:   0x0438,
	622:   0x0439,
	623:   0x043A,
	624:   0x043B,
	625:   0x043C,
	626:   0x043D,
	627:   0x043E,
	628:   0x043F,
	629:   0x0440,
	630:   0x0441,
	631:   0x0442,
	632:   0x0443,
	633:   0x0444,
	634:   0x0445,
	635:   0x0446,
	636:   0x0447,
	637:   0x0448,
	638:   0x0449,
	639:   0x044A,
	640:   0x044B,
	641:   0x044C,
	642:   0x044D,
	643:   0x044E,
	644:   0x044F,
	658:   0x2500,
	659:   0x2502,
	660:   0x250C,
	661:   0x2510,
	662:   0x2518,
	663:   0x2514,
	664:   0x251C,
	665:   0x252C,
	666:   0x2524,
	667:   0x2534,
	668:   0x253C,
	669:   0x2501,
	670:   0x2503,
	671:   0x250F,
	672:   0x2513,
	673:   0x251B,
	674:   0x2517,
	675:   0x2523,
	676:   0x2533,
	677:   0x252B,
	678:   0x253B,
	679:   0x254B,
	680:   0x2520,
	681:   0x252F,
	682:   0x2528,
	683:   0x2537,
	684:   0x253F,
	685:   0x251D,
	686:   0x2530,
	687:   0x2525,
	688:   0x2538,
	689:   0x2542,
	1128:  0x2460,
	1129:  0x2461,
	1130:  0x2462,
	1131:  0x2463,
	1132:  0x2464,
	1133:  0x2465,
	1134:  0x2466,
	1135:  0x2467,
	1136:  0x2468,
	1137:  0x2469,
	1138:  0x246A,
	1139:  0x246B,
	1140:  0x246C,
	1141:  0x246D,
	1142:  0x246E,
	1143:  0x246F,
	1144:  0x2470,
	1145:  0x2471,
	1146:  0x2472,
	1147:  0x2473,
	1148:  0x2160,
	1149:  0x2161,
	1150:  0x2162,
	1151:  0x2163,
	1152:  0x2164,
	1153:  0x2165,
	1154:  0x2166,
	1155:  0x2167,
	1156:  0x2168,
	1157:  0x2169,
	1159:  0x3349,
	1160:  0x3314,
	1161:  0x3322,
	1162:  0x334D,
	1163:  0x3318,
	1164:  0x3327,
	1165:  0x3303,
	1166:  0x3336,
	1167:  0x3351,
	1168:  0x3357,
	1169:  0x330D,
	1170:  0x3326,
	1171:  0x3323,
	1172:  0x332B,
	1173:  0x334A,
	1174:  0x333B,
	1175:  0x339C,
	1176:  0x339D,
	1177:  0x339E,
	1178:  0x338E,
	1179:  0x338F,
	1180:  0x33C4,
	1181:  0x33A1,
	1190:  0x337B,
	1191:  0x301D,
	1192:  0x301F,
	1193:  0x2116,
	1194:  0x33CD,
	1195:  0x2121,
	1196:  0x32A4,
	1197:  0x32A5,
	1198:  0x32A6,
	1199:  0x32A7,
	1200:  0x32A8,
	1201:  0x3231,
	1202:  0x3232,
	1203:  0x3239,
	1204:  0x337E,
	1205:  0x337D,
	1206:  0x337C,
	1207:  0x2252,
	1208:  0x2261,
	1209:  0x222B,
	1210:  0x222E,
	1211:  0x2211,
	1212:  0x221A,
	1213:  0x22A5,
	1214:  0x2220,
	1215:  0x221F,
	1216:  0x22BF,
	1217:  0x2235,
	1218:  0x2229,
	1219:  0x222A,
	1410:  0x4E9C,
	1411:  0x5516,
	1412:  0x5A03,
	1413:  0x963F,
	1414:  0x54C0,
	1415:  0x611B,
	1416:  0x6328,
	1417:  0x59F6,
	1418:  0x9022,
	1419:  0x8475,
	1420:  0x831C,
	1421:  0x7A50,
	1422:  0x60AA,
	1423:  0x63E1,
	1424:  0x6E25,
	1425:  0x65ED,
	1426:  0x8466,
	1427:  0x82A6,
	1428:  0x9BF5,
	1429:  0x6893,
	1430:  0x5727,
	1431:  0x65A1,
	1432:  0x6271,
	1433:  0x5B9B,
	1434:  0x59D0,
	1435:  0x867B,
	1436:  0x98F4,
	1437:  0x7D62,
	1438:  0x7DBE,
	1439:  0x9B8E,
	1440:  0x6216,
	1441:  0x7C9F,
	1442:  0x88B7,
	1443:  0x5B89,
	1444:  0x5EB5,
	1445:  0x6309,
	1446:  0x6697,
	1447:  0x6848,
	1448:  0x95C7,
	1449:  0x978D,
	1450:  0x674F,
	1451:  0x4EE5,
	1452:  0x4F0A,
	1453:  0x4F4D,
	1454:  0x4F9D,
	1455:  0x5049,
	1456:  0x56F2,
	1457:  0x5937,
	1458:  0x59D4,
	1459:  0x5A01,
	1460:  0x5C09,
	1461:  0x60DF,
	1462:  0x610F,
	1463:  0x6170,
	1464:  0x6613,
	1465:  0x6905,
	1466:  0x70BA,
	1467:  0x754F,
	1468:  0x7570,
	1469:  0x79FB,
	1470:  0x7DAD,
	1471:  0x7DEF,
	1472:  0x80C3,
	1473:  0x840E,
	1474:  0x8863,
	1475:  0x8B02,
	1476:  0x9055,
	1477:  0x907A,
	1478:  0x533B,
	1479:  0x4E95,
	1480:  0x4EA5,
	1481:  0x57DF,
	1482:  0x80B2,
	1483:  0x90C1,
	1484:  0x78EF,
	1485:  0x4E00,
	1486:  0x58F1,
	1487:  0x6EA2,
	1488:  0x9038,
	1489:  0x7A32,
	1490:  0x8328,
	1491:  0x828B,
	1492:  0x9C2F,
	1493:  0x5141,
	1494:  0x5370,
	1495:  0x54BD,
	1496:  0x54E1,
	1497:  0x56E0,
	1498:  0x59FB,
	1499:  0x5F15,
	1500:  0x98F2,
	1501:  0x6DEB,
	1502:  0x80E4,
	1503:  0x852D,
	1504:  0x9662,
	1505:  0x9670,
	1506:  0x96A0,
	1507:  0x97FB,
	1508:  0x540B,
	1509:  0x53F3,
	1510:  0x5B87,
	1511:  0x70CF,
	1512:  0x7FBD,
	1513:  0x8FC2,
	1514:  0x96E8,
	1515:  0x536F,
	1516:  0x9D5C,
	1517:  0x7ABA,
	1518:  0x4E11,
	1519:  0x7893,
	1520:  0x81FC,
	1521:  0x6E26,
	1522:  0x5618,
	1523:  0x5504,
	1524:  0x6B1D,
	1525:  0x851A,
	1526:  0x9C3B,
	1527:  0x59E5,
	1528:  0x53A9,
	1529:  0x6D66,
	1530:  0x74DC,
	1531:  0x958F,
	1532:  0x5642,
	1533:  0x4E91,
	1534:  0x904B,
	1535:  0x96F2,
	1536:  0x834F,
	1537:  0x990C,
	1538:  0x53E1,
	1539:  0x55B6,
	1540:  0x5B30,
	1541:  0x5F71,
	1542:  0x6620,
	1543:  0x66F3,
	1544:  0x6804,
	1545:  0x6C38,
	1546:  0x6CF3,
	1547:  0x6D29,
	1548:  0x745B,
	1549:  0x76C8,
	1550:  0x7A4E,
	1551:  0x9834,
	1552:  0x82F1,
	1553:  0x885B,
	1554:  0x8A60,
	1555:  0x92ED,
	1556:  0x6DB2,
	1557:  0x75AB,
	1558:  0x76CA,
	1559:  0x99C5,
	1560:  0x60A6,
	1561:  0x8B01,
	1562:  0x8D8A,
	1563:  0x95B2,
	1564:  0x698E,
	1565:  0x53AD,
	1566:  0x5186,
	1567:  0x5712,
	1568:  0x5830,
	1569:  0x5944,
	1570:  0x5BB4,
	1571:  0x5EF6,
	1572:  0x6028,
	1573:  0x63A9,
	1574:  0x63F4,
	1575:  0x6CBF,
	1576:  0x6F14,
	1577:  0x708E,
	1578:  0x7114,
	1579:  0x7159,
	1580:  0x71D5,
	1581:  0x733F,
	1582:  0x7E01,
	1583:  0x8276,
	1584:  0x82D1,
	1585:  0x8597,
	1586:  0x9060,
	1587:  0x925B,
	1588:  0x9D1B,
	1589:  0x5869,
	1590:  0x65BC,
	1591:  0x6C5A,
	1592:  0x7525,
	1593:  0x51F9,
	1594:  0x592E,
	1595:  0x5965,
	1596:  0x5F80,
	1597:  0x5FDC,
	1598:  0x62BC,
	1599:  0x65FA,
	1600:  0x6A2A,
	1601:  0x6B27,
	1602:  0x6BB4,
	1603:  0x738B,
	1604:  0x7FC1,
	1605:  0x8956,
	1606:  0x9D2C,
	1607:  0x9D0E,
	1608:  0x9EC4,
	1609:  0x5CA1,
	1610:  0x6C96,
	1611:  0x837B,
	1612:  0x5104,
	1613:  0x5C4B,
	1614:  0x61B6,
	1615:  0x81C6,
	1616:  0x6876,
	1617:  0x7261,
	1618:  0x4E59,
	1619:  0x4FFA,
	1620:  0x5378,
	1621:  0x6069,
	1622:  0x6E29,
	1623:  0x7A4F,
	1624:  0x97F3,
	1625:  0x4E0B,
	1626:  0x5316,
	1627:  0x4EEE,
	1628:  0x4F55,
	1629:  0x4F3D,
	1630:  0x4FA1,
	1631:  0x4F73,
	1632:  0x52A0,
	1633:  0x53EF,
	1634:  0x5609,
	1635:  0x590F,
	1636:  0x5AC1,
	1637:  0x5BB6,
	1638:  0x5BE1,
	1639:  0x79D1,
	1640:  0x6687,
	1641:  0x679C,
	1642:  0x67B6,
	1643:  0x6B4C,
	1644:  0x6CB3,
	1645:  0x706B,
	1646:  0x73C2,
	1647:  0x798D,
	1648:  0x79BE,
	1649:  0x7A3C,
	1650:  0x7B87,
	1651:  0x82B1,
	1652:  0x82DB,
	1653:  0x8304,
	1654:  0x8377,
	1655:  0x83EF,
	1656:  0x83D3,
	1657:  0x8766,
	1658:  0x8AB2,
	1659:  0x5629,
	1660:  0x8CA8,
	1661:  0x8FE6,
	1662:  0x904E,
	1663:  0x971E,
	1664:  0x868A,
	1665:  0x4FC4,
	1666:  0x5CE8,
	1667:  0x6211,
	1668:  0x7259,
	1669:  0x753B,
	1670:  0x81E5,
	1671:  0x82BD,
	1672:  0x86FE,
	1673:  0x8CC0,
	1674:  0x96C5,
	1675:  0x9913,
	1676:  0x99D5,
	1677:  0x4ECB,
	1678:  0x4F1A,
	1679:  0x89E3,
	1680:  0x56DE,
	1681:  0x584A,
	1682:  0x58CA,
	1683:  0x5EFB,
	1684:  0x5FEB,
	1685:  0x602A,
	1686:  0x6094,
	1687:  0x6062,
	1688:  0x61D0,
	1689:  0x6212,
	1690:  0x62D0,
	1691:  0x6539,
	1692:  0x9B41,
	1693:  0x6666,
	1694:  0x68B0,
	1695:  0x6D77,
	1696:  0x7070,
	1697:  0x754C,
	1698:  0x7686,
	1699:  0x7D75,
	1700:  0x82A5,
	1701:  0x87F9,
	1702:  0x958B,
	1703:  0x968E,
	1704:  0x8C9D,
	1705:  0x51F1,
	1706:  0x52BE,
	1707:  0x5916,
	1708:  0x54B3,
	1709:  0x5BB3,
	1710:  0x5D16,
	1711:  0x6168,
	1712:  0x6982,
	1713:  0x6DAF,
	1714:  0x788D,
	1715:  0x84CB,
	1716:  0x8857,
	1717:  0x8A72,
	1718:  0x93A7,
	1719:  0x9AB8,
	1720:  0x6D6C,
	1721:  0x99A8,
	1722:  0x86D9,
	1723:  0x57A3,
	1724:  0x67FF,
	1725:  0x86CE,
	1726:  0x920E,
	1727:  0x5283,
	1728:  0x5687,
	1729:  0x5404,
	1730:  0x5ED3,
	1731:  0x62E1,
	1732:  0x64B9,
	1733:  0x683C,
	1734:  0x6838,
	1735:  0x6BBB,
	1736:  0x7372,
	1737:  0x78BA,
	1738:  0x7A6B,
	1739:  0x899A,
	1740:  0x89D2,
	1741:  0x8D6B,
	1742:  0x8F03,
	1743:  0x90ED,
	1744:  0x95A3,
	1745:  0x9694,
	1746:  0x9769,
	1747:  0x5B66,
	1748:  0x5CB3,
	1749:  0x697D,
	1750:  0x984D,
	1751:  0x984E,
	1752:  0x639B,
	1753:  0x7B20,
	1754:  0x6A2B,
	1755:  0x6A7F,
	1756:  0x68B6,
	1757:  0x9C0D,
	1758:  0x6F5F,
	1759:  0x5272,
	1760:  0x559D,
	1761:  0x6070,
	1762:  0x62EC,
	1763:  0x6D3B,
	1764:  0x6E07,
	1765:  0x6ED1,
	1766:  0x845B,
	1767:  0x8910,
	1768:  0x8F44,
	1769:  0x4E14,
	1770:  0x9C39,
	1771:  0x53F6,
	1772:  0x691B,
	1773:  0x6A3A,
	1774:  0x9784,
	1775:  0x682A,
	1776:  0x515C,
	1777:  0x7AC3,
	1778:  0x84B2,
	1779:  0x91DC,
	1780:  0x938C,
	1781:  0x565B,
	1782:  0x9D28,
	1783:  0x6822,
	1784:  0x8305,
	1785:  0x8431,
	1786:  0x7CA5,
	1787:  0x5208,
	1788:  0x82C5,
	1789:  0x74E6,
	1790:  0x4E7E,
	1791:  0x4F83,
	1792:  0x51A0,
	1793:  0x5BD2,
	1794:  0x520A,
	1795:  0x52D8,
	1796:  0x52E7,
	1797:  0x5DFB,
	1798:  0x559A,
	1799:  0x582A,
	1800:  0x59E6,
	1801:  0x5B8C,
	1802:  0x5B98,
	1803:  0x5BDB,
	1804:  0x5E72,
	1805:  0x5E79,
	1806:  0x60A3,
	1807:  0x611F,
	1808:  0x6163,
	1809:  0x61BE,
	1810:  0x63DB,
	1811:  0x6562,
	1812:  0x67D1,
	1813:  0x6853,
	1814:  0x68FA,
	1815:  0x6B3E,
	1816:  0x6B53,
	1817:  0x6C57,
	1818:  0x6F22,
	1819:  0x6F97,
	1820:  0x6F45,
	1821:  0x74B0,
	1822:  0x7518,
	1823:  0x76E3,
	1824:  0x770B,
	1825:  0x7AFF,
	1826:  0x7BA1,
	1827:  0x7C21,
	1828:  0x7DE9,
	1829:  0x7F36,
	1830:  0x7FF0,
	1831:  0x809D,
	1832:  0x8266,
	1833:  0x839E,
	1834:  0x89B3,
	1835:  0x8ACC,
	1836:  0x8CAB,
	1837:  0x9084,
	1838:  0x9451,
	1839:  0x9593,
	1840:  0x9591,
	1841:  0x95A2,
	1842:  0x9665,
	1843:  0x97D3,
	1844:  0x9928,
	1845:  0x8218,
	1846:  0x4E38,
	1847:  0x542B,
	1848:  0x5CB8,
	1849:  0x5DCC,
	1850:  0x73A9,
	1851:  0x764C,
	1852:  0x773C,
	1853:  0x5CA9,
	1854:  0x7FEB,
	1855:  0x8D0B,
	1856:  0x96C1,
	1857:  0x9811,
	1858:  0x9854,
	1859:  0x9858,
	1860:  0x4F01,
	1861:  0x4F0E,
	1862:  0x5371,
	1863:  0x559C,
	1864:  0x5668,
	1865:  0x57FA,
	1866:  0x5947,
	1867:  0x5B09,
	1868:  0x5BC4,
	1869:  0x5C90,
	1870:  0x5E0C,
	1871:  0x5E7E,
	1872:  0x5FCC,
	1873:  0x63EE,
	1874:  0x673A,
	1875:  0x65D7,
	1876:  0x65E2,
	1877:  0x671F,
	1878:  0x68CB,
	1879:  0x68C4,
	1880:  0x6A5F,
	1881:  0x5E30,
	1882:  0x6BC5,
	1883:  0x6C17,
	1884:  0x6C7D,
	1885:  0x757F,
	1886:  0x7948,
	1887:  0x5B63,
	1888:  0x7A00,
	1889:  0x7D00,
	1890:  0x5FBD,
	1891:  0x898F,
	1892:  0x8A18,
	1893:  0x8CB4,
	1894:  0x8D77,
	1895:  0x8ECC,
	1896:  0x8F1D,
	1897:  0x98E2,
	1898:  0x9A0E,
	1899:  0x9B3C,
	1900:  0x4E80,
	1901:  0x507D,
	1902:  0x5100,
	1903:  0x5993,
	1904:  0x5B9C,
	1905:  0x622F,
	1906:  0x6280,
	1907:  0x64EC,
	1908:  0x6B3A,
	1909:  0x72A0,
	1910:  0x7591,
	1911:  0x7947,
	1912:  0x7FA9,
	1913:  0x87FB,
	1914:  0x8ABC,
	1915:  0x8B70,
	1916:  0x63AC,
	1917:  0x83CA,
	1918:  0x97A0,
	1919:  0x5409,
	1920:  0x5403,
	1921:  0x55AB,
	1922:  0x6854,
	1923:  0x6A58,
	1924:  0x8A70,
	1925:  0x7827,
	1926:  0x6775,
	1927:  0x9ECD,
	1928:  0x5374,
	1929:  0x5BA2,
	1930:  0x811A,
	1931:  0x8650,
	1932:  0x9006,
	1933:  0x4E18,
	1934:  0x4E45,
	1935:  0x4EC7,
	1936:  0x4F11,
	1937:  0x53CA,
	1938:  0x5438,
	1939:  0x5BAE,
	1940:  0x5F13,
	1941:  0x6025,
	1942:  0x6551,
	1943:  0x673D,
	1944:  0x6C42,
	1945:  0x6C72,
	1946:  0x6CE3,
	1947:  0x7078,
	1948:  0x7403,
	1949:  0x7A76,
	1950:  0x7AAE,
	1951:  0x7B08,
	1952:  0x7D1A,
	1953:  0x7CFE,
	1954:  0x7D66,
	1955:  0x65E7,
	1956:  0x725B,
	1957:  0x53BB,
	1958:  0x5C45,
	1959:  0x5DE8,
	1960:  0x62D2,
	1961:  0x62E0,
	1962:  0x6319,
	1963:  0x6E20,
	1964:  0x865A,
	1965:  0x8A31,
	1966:  0x8DDD,
	1967:  0x92F8,
	1968:  0x6F01,
	1969:  0x79A6,
	1970:  0x9B5A,
	1971:  0x4EA8,
	1972:  0x4EAB,
	1973:  0x4EAC,
	1974:  0x4F9B,
	1975:  0x4FA0,
	1976:  0x50D1,
	1977:  0x5147,
	1978:  0x7AF6,
	1979:  0x5171,
	1980:  0x51F6,
	1981:  0x5354,
	1982:  0x5321,
	1983:  0x537F,
	1984:  0x53EB,
	1985:  0x55AC,
	1986:  0x5883,
	1987:  0x5CE1,
	1988:  0x5F37,
	1989:  0x5F4A,
	1990:  0x602F,
	1991:  0x6050,
	1992:  0x606D,
	1993:  0x631F,
	1994:  0x6559,
	1995:  0x6A4B,
	1996:  0x6CC1,
	1997:  0x72C2,
	1998:  0x72ED,
	1999:  0x77EF,
	2000:  0x80F8,
	2001:  0x8105,
	2002:  0x8208,
	2003:  0x854E,
	2004:  0x90F7,
	2005:  0x93E1,
	2006:  0x97FF,
	2007:  0x9957,
	2008:  0x9A5A,
	2009:  0x4EF0,
	2010:  0x51DD,
	2011:  0x5C2D,
	2012:  0x6681,
	2013:  0x696D,
	2014:  0x5C40,
	2015:  0x66F2,
	2016:  0x6975,
	2017:  0x7389,
	2018:  0x6850,
	2019:  0x7C81,
	2020:  0x50C5,
	2021:  0x52E4,
	2022:  0x5747,
	2023:  0x5DFE,
	2024:  0x9326,
	2025:  0x65A4,
	2026:  0x6B23,
	2027:  0x6B3D,
	2028:  0x7434,
	2029:  0x7981,
	2030:  0x79BD,
	2031:  0x7B4B,
	2032:  0x7DCA,
	2033:  0x82B9,
	2034:  0x83CC,
	2035:  0x887F,
	2036:  0x895F,
	2037:  0x8B39,
	2038:  0x8FD1,
	2039:  0x91D1,
	2040:  0x541F,
	2041:  0x9280,
	2042:  0x4E5D,
	2043:  0x5036,
	2044:  0x53E5,
	2045:  0x533A,
	2046:  0x72D7,
	2047:  0x7396,
	2048:  0x77E9,
	2049:  0x82E6,
	2050:  0x8EAF,
	2051:  0x99C6,
	2052:  0x99C8,
	2053:  0x99D2,
	2054:  0x5177,
	2055:  0x611A,
	2056:  0x865E,
	2057:  0x55B0,
	2058:  0x7A7A,
	2059:  0x5076,
	2060:  0x5BD3,
	2061:  0x9047,
	2062:  0x9685,
	2063:  0x4E32,
	2064:  0x6ADB,
	2065:  0x91E7,
	2066:  0x5C51,
	2067:  0x5C48,
	2068:  0x6398,
	2069:  0x7A9F,
	2070:  0x6C93,
	2071:  0x9774,
	2072:  0x8F61,
	2073:  0x7AAA,
	2074:  0x718A,
	2075:  0x9688,
	2076:  0x7C82,
	2077:  0x6817,
	2078:  0x7E70,
	2079:  0x6851,
	2080:  0x936C,
	2081:  0x52F2,
	2082:  0x541B,
	2083:  0x85AB,
	2084:  0x8A13,
	2085:  0x7FA4,
	2086:  0x8ECD,
	2087:  0x90E1,
	2088:  0x5366,
	2089:  0x8888,
	2090:  0x7941,
	2091:  0x4FC2,
	2092:  0x50BE,
	2093:  0x5211,
	2094:  0x5144,
	2095:  0x5553,
	2096:  0x572D,
	2097:  0x73EA,
	2098:  0x578B,
	2099:  0x5951,
	2100:  0x5F62,
	2101:  0x5F84,
	2102:  0x6075,
	2103:  0x6176,
	2104:  0x6167,
	2105:  0x61A9,
	2106:  0x63B2,
	2107:  0x643A,
	2108:  0x656C,
	2109:  0x666F,
	2110:  0x6842,
	2111:  0x6E13,
	2112:  0x7566,
	2113:  0x7A3D,
	2114:  0x7CFB,
	2115:  0x7D4C,
	2116:  0x7D99,
	2117:  0x7E4B,
	2118:  0x7F6B,
	2119:  0x830E,
	2120:  0x834A,
	2121:  0x86CD,
	2122:  0x8A08,
	2123:  0x8A63,
	2124:  0x8B66,
	2125:  0x8EFD,
	2126:  0x981A,
	2127:  0x9D8F,
	2128:  0x82B8,
	2129:  0x8FCE,
	2130:  0x9BE8,
	2131:  0x5287,
	2132:  0x621F,
	2133:  0x6483,
	2134:  0x6FC0,
	2135:  0x9699,
	2136:  0x6841,
	2137:  0x5091,
	2138:  0x6B20,
	2139:  0x6C7A,
	2140:  0x6F54,
	2141:  0x7A74,
	2142:  0x7D50,
	2143:  0x8840,
	2144:  0x8A23,
	2145:  0x6708,
	2146:  0x4EF6,
	2147:  0x5039,
	2148:  0x5026,
	2149:  0x5065,
	2150:  0x517C,
	2151:  0x5238,
	2152:  0x5263,
	2153:  0x55A7,
	2154:  0x570F,
	2155:  0x5805,
	2156:  0x5ACC,
	2157:  0x5EFA,
	2158:  0x61B2,
	2159:  0x61F8,
	2160:  0x62F3,
	2161:  0x6372,
	2162:  0x691C,
	2163:  0x6A29,
	2164:  0x727D,
	2165:  0x72AC,
	2166:  0x732E,
	2167:  0x7814,
	2168:  0x786F,
	2169:  0x7D79,
	2170:  0x770C,
	2171:  0x80A9,
	2172:  0x898B,
	2173:  0x8B19,
	2174:  0x8CE2,
	2175:  0x8ED2,
	2176:  0x9063,
	2177:  0x9375,
	2178:  0x967A,
	2179:  0x9855,
	2180:  0x9A13,
	2181:  0x9E78,
	2182:  0x5143,
	2183:  0x539F,
	2184:  0x53B3,
	2185:  0x5E7B,
	2186:  0x5F26,
	2187:  0x6E1B,
	2188:  0x6E90,
	2189:  0x7384,
	2190:  0x73FE,
	2191:  0x7D43,
	2192:  0x8237,
	2193:  0x8A00,
	2194:  0x8AFA,
	2195:  0x9650,
	2196:  0x4E4E,
	2197:  0x500B,
	2198:  0x53E4,
	2199:  0x547C,
	2200:  0x56FA,
	2201:  0x59D1,
	2202:  0x5B64,
	2203:  0x5DF1,
	2204:  0x5EAB,
	2205:  0x5F27,
	2206:  0x6238,
	2207:  0x6545,
	2208:  0x67AF,
	2209:  0x6E56,
	2210:  0x72D0,
	2211:  0x7CCA,
	2212:  0x88B4,
	2213:  0x80A1,
	2214:  0x80E1,
	2215:  0x83F0,
	2216:  0x864E,
	2217:  0x8A87,
	2218:  0x8DE8,
	2219:  0x9237,
	2220:  0x96C7,
	2221:  0x9867,
	2222:  0x9F13,
	2223:  0x4E94,
	2224:  0x4E92,
	2225:  0x4F0D,
	2226:  0x5348,
	2227:  0x5449,
	2228:  0x543E,
	2229:  0x5A2F,
	2230:  0x5F8C,
	2231:  0x5FA1,
	2232:  0x609F,
	2233:  0x68A7,
	2234:  0x6A8E,
	2235:  0x745A,
	2236:  0x7881,
	2237:  0x8A9E,
	2238:  0x8AA4,
	2239:  0x8B77,
	2240:  0x9190,
	2241:  0x4E5E,
	2242:  0x9BC9,
	2243:  0x4EA4,
	2244:  0x4F7C,
	2245:  0x4FAF,
	2246:  0x5019,
	2247:  0x5016,
	2248:  0x5149,
	2249:  0x516C,
	2250:  0x529F,
	2251:  0x52B9,
	2252:  0x52FE,
	2253:  0x539A,
	2254:  0x53E3,
	2255:  0x5411,
	2256:  0x540E,
	2257:  0x5589,
	2258:  0x5751,
	2259:  0x57A2,
	2260:  0x597D,
	2261:  0x5B54,
	2262:  0x5B5D,
	2263:  0x5B8F,
	2264:  0x5DE5,
	2265:  0x5DE7,
	2266:  0x5DF7,
	2267:  0x5E78,
	2268:  0x5E83,
	2269:  0x5E9A,
	2270:  0x5EB7,
	2271:  0x5F18,
	2272:  0x6052,
	2273:  0x614C,
	2274:  0x6297,
	2275:  0x62D8,
	2276:  0x63A7,
	2277:  0x653B,
	2278:  0x6602,
	2279:  0x6643,
	2280:  0x66F4,
	2281:  0x676D,
	2282:  0x6821,
	2283:  0x6897,
	2284:  0x69CB,
	2285:  0x6C5F,
	2286:  0x6D2A,
	2287:  0x6D69,
	2288:  0x6E2F,
	2289:  0x6E9D,
	2290:  0x7532,
	2291:  0x7687,
	2292:  0x786C,
	2293:  0x7A3F,
	2294:  0x7CE0,
	2295:  0x7D05,
	2296:  0x7D18,
	2297:  0x7D5E,
	2298:  0x7DB1,
	2299:  0x8015,
	2300:  0x8003,
	2301:  0x80AF,
	2302:  0x80B1,
	2303:  0x8154,
	2304:  0x818F,
	2305:  0x822A,
	2306:  0x8352,
	2307:  0x884C,
	2308:  0x8861,
	2309:  0x8B1B,
	2310:  0x8CA2,
	2311:  0x8CFC,
	2312:  0x90CA,
	2313:  0x9175,
	2314:  0x9271,
	2315:  0x783F,
	2316:  0x92FC,
	2317:  0x95A4,
	2318:  0x964D,
	2319:  0x9805,
	2320:  0x9999,
	2321:  0x9AD8,
	2322:  0x9D3B,
	2323:  0x525B,
	2324:  0x52AB,
	2325:  0x53F7,
	2326:  0x5408,
	2327:  0x58D5,
	2328:  0x62F7,
	2329:  0x6FE0,
	2330:  0x8C6A,
	2331:  0x8F5F,
	2332:  0x9EB9,
	2333:  0x514B,
	2334:  0x523B,
	2335:  0x544A,
	2336:  0x56FD,
	2337:  0x7A40,
	2338:  0x9177,
	2339:  0x9D60,
	2340:  0x9ED2,
	2341:  0x7344,
	2342:  0x6F09,
	2343:  0x8170,
	2344:  0x7511,
	2345:  0x5FFD,
	2346:  0x60DA,
	2347:  0x9AA8,
	2348:  0x72DB,
	2349:  0x8FBC,
	2350:  0x6B64,
	2351:  0x9803,
	2352:  0x4ECA,
	2353:  0x56F0,
	2354:  0x5764,
	2355:  0x58BE,
	2356:  0x5A5A,
	2357:  0x6068,
	2358:  0x61C7,
	2359:  0x660F,
	2360:  0x6606,
	2361:  0x6839,
	2362:  0x68B1,
	2363:  0x6DF7,
	2364:  0x75D5,
	2365:  0x7D3A,
	2366:  0x826E,
	2367:  0x9B42,
	2368:  0x4E9B,
	2369:  0x4F50,
	2370:  0x53C9,
	2371:  0x5506,
	2372:  0x5D6F,
	2373:  0x5DE6,
	2374:  0x5DEE,
	2375:  0x67FB,
	2376:  0x6C99,
	2377:  0x7473,
	2378:  0x7802,
	2379:  0x8A50,
	2380:  0x9396,
	2381:  0x88DF,
	2382:  0x5750,
	2383:  0x5EA7,
	2384:  0x632B,
	2385:  0x50B5,
	2386:  0x50AC,
	2387:  0x518D,
	2388:  0x6700,
	2389:  0x54C9,
	2390:  0x585E,
	2391:  0x59BB,
	2392:  0x5BB0,
	2393:  0x5F69,
	2394:  0x624D,
	2395:  0x63A1,
	2396:  0x683D,
	2397:  0x6B73,
	2398:  0x6E08,
	2399:  0x707D,
	2400:  0x91C7,
	2401:  0x7280,
	2402:  0x7815,
	2403:  0x7826,
	2404:  0x796D,
	2405:  0x658E,
	2406:  0x7D30,
	2407:  0x83DC,
	2408:  0x88C1,
	2409:  0x8F09,
	2410:  0x969B,
	2411:  0x5264,
	2412:  0x5728,
	2413:  0x6750,
	2414:  0x7F6A,
	2415:  0x8CA1,
	2416:  0x51B4,
	2417:  0x5742,
	2418:  0x962A,
	2419:  0x583A,
	2420:  0x698A,
	2421:  0x80B4,
	2422:  0x54B2,
	2423:  0x5D0E,
	2424:  0x57FC,
	2425:  0x7895,
	2426:  0x9DFA,
	2427:  0x4F5C,
	2428:  0x524A,
	2429:  0x548B,
	2430:  0x643E,
	2431:  0x6628,
	2432:  0x6714,
	2433:  0x67F5,
	2434:  0x7A84,
	2435:  0x7B56,
	2436:  0x7D22,
	2437:  0x932F,
	2438:  0x685C,
	2439:  0x9BAD,
	2440:  0x7B39,
	2441:  0x5319,
	2442:  0x518A,
	2443:  0x5237,
	2444:  0x5BDF,
	2445:  0x62F6,
	2446:  0x64AE,
	2447:  0x64E6,
	2448:  0x672D,
	2449:  0x6BBA,
	2450:  0x85A9,
	2451:  0x96D1,
	2452:  0x7690,
	2453:  0x9BD6,
	2454:  0x634C,
	2455:  0x9306,
	2456:  0x9BAB,
	2457:  0x76BF,
	2458:  0x6652,
	2459:  0x4E09,
	2460:  0x5098,
	2461:  0x53C2,
	2462:  0x5C71,
	2463:  0x60E8,
	2464:  0x6492,
	2465:  0x6563,
	2466:  0x685F,
	2467:  0x71E6,
	2468:  0x73CA,
	2469:  0x7523,
	2470:  0x7B97,
	2471:  0x7E82,
	2472:  0x8695,
	2473:  0x8B83,
	2474:  0x8CDB,
	2475:  0x9178,
	2476:  0x9910,
	2477:  0x65AC,
	2478:  0x66AB,
	2479:  0x6B8B,
	2480:  0x4ED5,
	2481:  0x4ED4,
	2482:  0x4F3A,
	2483:  0x4F7F,
	2484:  0x523A,
	2485:  0x53F8,
	2486:  0x53F2,
	2487:  0x55E3,
	2488:  0x56DB,
	2489:  0x58EB,
	2490:  0x59CB,
	2491:  0x59C9,
	2492:  0x59FF,
	2493:  0x5B50,
	2494:  0x5C4D,
	2495:  0x5E02,
	2496:  0x5E2B,
	2497:  0x5FD7,
	2498:  0x601D,
	2499:  0x6307,
	2500:  0x652F,
	2501:  0x5B5C,
	2502:  0x65AF,
	2503:  0x65BD,
	2504:  0x65E8,
	2505:  0x679D,
	2506:  0x6B62,
	2507:  0x6B7B,
	2508:  0x6C0F,
	2509:  0x7345,
	2510:  0x7949,
	2511:  0x79C1,
	2512:  0x7CF8,
	2513:  0x7D19,
	2514:  0x7D2B,
	2515:  0x80A2,
	2516:  0x8102,
	2517:  0x81F3,
	2518:  0x8996,
	2519:  0x8A5E,
	2520:  0x8A69,
	2521:  0x8A66,
	2522:  0x8A8C,
	2523:  0x8AEE,
	2524:  0x8CC7,
	2525:  0x8CDC,
	2526:  0x96CC,
	2527:  0x98FC,
	2528:  0x6B6F,
	2529:  0x4E8B,
	2530:  0x4F3C,
	2531:  0x4F8D,
	2532:  0x5150,
	2533:  0x5B57,
	2534:  0x5BFA,
	2535:  0x6148,
	2536:  0x6301,
	2537:  0x6642,
	2538:  0x6B21,
	2539:  0x6ECB,
	2540:  0x6CBB,
	2541:  0x723E,
	2542:  0x74BD,
	2543:  0x75D4,
	2544:  0x78C1,
	2545:  0x793A,
	2546:  0x800C,
	2547:  0x8033,
	2548:  0x81EA,
	2549:  0x8494,
	2550:  0x8F9E,
	2551:  0x6C50,
	2552:  0x9E7F,
	2553:  0x5F0F,
	2554:  0x8B58,
	2555:  0x9D2B,
	2556:  0x7AFA,
	2557:  0x8EF8,
	2558:  0x5B8D,
	2559:  0x96EB,
	2560:  0x4E03,
	2561:  0x53F1,
	2562:  0x57F7,
	2563:  0x5931,
	2564:  0x5AC9,
	2565:  0x5BA4,
	2566:  0x6089,
	2567:  0x6E7F,
	2568:  0x6F06,
	2569:  0x75BE,
	2570:  0x8CEA,
	2571:  0x5B9F,
	2572:  0x8500,
	2573:  0x7BE0,
	2574:  0x5072,
	2575:  0x67F4,
	2576:  0x829D,
	2577:  0x5C61,
	2578:  0x854A,
	2579:  0x7E1E,
	2580:  0x820E,
	2581:  0x5199,
	2582:  0x5C04,
	2583:  0x6368,
	2584:  0x8D66,
	2585:  0x659C,
	2586:  0x716E,
	2587:  0x793E,
	2588:  0x7D17,
	2589:  0x8005,
	2590:  0x8B1D,
	2591:  0x8ECA,
	2592:  0x906E,
	2593:  0x86C7,
	2594:  0x90AA,
	2595:  0x501F,
	2596:  0x52FA,
	2597:  0x5C3A,
	2598:  0x6753,
	2599:  0x707C,
	2600:  0x7235,
	2601:  0x914C,
	2602:  0x91C8,
	2603:  0x932B,
	2604:  0x82E5,
	2605:  0x5BC2,
	2606:  0x5F31,
	2607:  0x60F9,
	2608:  0x4E3B,
	2609:  0x53D6,
	2610:  0x5B88,
	2611:  0x624B,
	2612:  0x6731,
	2613:  0x6B8A,
	2614:  0x72E9,
	2615:  0x73E0,
	2616:  0x7A2E,
	2617:  0x816B,
	2618:  0x8DA3,
	2619:  0x9152,
	2620:  0x9996,
	2621:  0x5112,
	2622:  0x53D7,
	2623:  0x546A,
	2624:  0x5BFF,
	2625:  0x6388,
	2626:  0x6A39,
	2627:  0x7DAC,
	2628:  0x9700,
	2629:  0x56DA,
	2630:  0x53CE,
	2631:  0x5468,
	2632:  0x5B97,
	2633:  0x5C31,
	2634:  0x5DDE,
	2635:  0x4FEE,
	2636:  0x6101,
	2637:  0x62FE,
	2638:  0x6D32,
	2639:  0x79C0,
	2640:  0x79CB,
	2641:  0x7D42,
	2642:  0x7E4D,
	2643:  0x7FD2,
	2644:  0x81ED,
	2645:  0x821F,
	2646:  0x8490,
	2647:  0x8846,
	2648:  0x8972,
	2649:  0x8B90,
	2650:  0x8E74,
	2651:  0x8F2F,
	2652:  0x9031,
	2653:  0x914B,
	2654:  0x916C,
	2655:  0x96C6,
	2656:  0x919C,
	2657:  0x4EC0,
	2658:  0x4F4F,
	2659:  0x5145,
	2660:  0x5341,
	2661:  0x5F93,
	2662:  0x620E,
	2663:  0x67D4,
	2664:  0x6C41,
	2665:  0x6E0B,
	2666:  0x7363,
	2667:  0x7E26,
	2668:  0x91CD,
	2669:  0x9283,
	2670:  0x53D4,
	2671:  0x5919,
	2672:  0x5BBF,
	2673:  0x6DD1,
	2674:  0x795D,
	2675:  0x7E2E,
	2676:  0x7C9B,
	2677:  0x587E,
	2678:  0x719F,
	2679:  0x51FA,
	2680:  0x8853,
	2681:  0x8FF0,
	2682:  0x4FCA,
	2683:  0x5CFB,
	2684:  0x6625,
	2685:  0x77AC,
	2686:  0x7AE3,
	2687:  0x821C,
	2688:  0x99FF,
	2689:  0x51C6,
	2690:  0x5FAA,
	2691:  0x65EC,
	2692:  0x696F,
	2693:  0x6B89,
	2694:  0x6DF3,
	2695:  0x6E96,
	2696:  0x6F64,
	2697:  0x76FE,
	2698:  0x7D14,
	2699:  0x5DE1,
	2700:  0x9075,
	2701:  0x9187,
	2702:  0x9806,
	2703:  0x51E6,
	2704:  0x521D,
	2705:  0x6240,
	2706:  0x6691,
	2707:  0x66D9,
	2708:  0x6E1A,
	2709:  0x5EB6,
	2710:  0x7DD2,
	2711:  0x7F72,
	2712:  0x66F8,
	2713:  0x85AF,
	2714:  0x85F7,
	2715:  0x8AF8,
	2716:  0x52A9,
	2717:  0x53D9,
	2718:  0x5973,
	2719:  0x5E8F,
	2720:  0x5F90,
	2721:  0x6055,
	2722:  0x92E4,
	2723:  0x9664,
	2724:  0x50B7,
	2725:  0x511F,
	2726:  0x52DD,
	2727:  0x5320,
	2728:  0x5347,
	2729:  0x53EC,
	2730:  0x54E8,
	2731:  0x5546,
	2732:  0x5531,
	2733:  0x5617,
	2734:  0x5968,
	2735:  0x59BE,
	2736:  0x5A3C,
	2737:  0x5BB5,
	2738:  0x5C06,
	2739:  0x5C0F,
	2740:  0x5C11,
	2741:  0x5C1A,
	2742:  0x5E84,
	2743:  0x5E8A,
	2744:  0x5EE0,
	2745:  0x5F70,
	2746:  0x627F,
	2747:  0x6284,
	2748:  0x62DB,
	2749:  0x638C,
	2750:  0x6377,
	2751:  0x6607,
	2752:  0x660C,
	2753:  0x662D,
	2754:  0x6676,
	2755:  0x677E,
	2756:  0x68A2,
	2757:  0x6A1F,
	2758:  0x6A35,
	2759:  0x6CBC,
	2760:  0x6D88,
	2761:  0x6E09,
	2762:  0x6E58,
	2763:  0x713C,
	2764:  0x7126,
	2765:  0x7167,
	2766:  0x75C7,
	2767:  0x7701,
	2768:  0x785D,
	2769:  0x7901,
	2770:  0x7965,
	2771:  0x79F0,
	2772:  0x7AE0,
	2773:  0x7B11,
	2774:  0x7CA7,
	2775:  0x7D39,
	2776:  0x8096,
	2777:  0x83D6,
	2778:  0x848B,
	2779:  0x8549,
	2780:  0x885D,
	2781:  0x88F3,
	2782:  0x8A1F,
	2783:  0x8A3C,
	2784:  0x8A54,
	2785:  0x8A73,
	2786:  0x8C61,
	2787:  0x8CDE,
	2788:  0x91A4,
	2789:  0x9266,
	2790:  0x937E,
	2791:  0x9418,
	2792:  0x969C,
	2793:  0x9798,
	2794:  0x4E0A,
	2795:  0x4E08,
	2796:  0x4E1E,
	2797:  0x4E57,
	2798:  0x5197,
	2799:  0x5270,
	2800:  0x57CE,
	2801:  0x5834,
	2802:  0x58CC,
	2803:  0x5B22,
	2804:  0x5E38,
	2805:  0x60C5,
	2806:  0x64FE,
	2807:  0x6761,
	2808:  0x6756,
	2809:  0x6D44,
	2810:  0x72B6,
	2811:  0x7573,
	2812:  0x7A63,
	2813:  0x84B8,
	2814:  0x8B72,
	2815:  0x91B8,
	2816:  0x9320,
	2817:  0x5631,
	2818:  0x57F4,
	2819:  0x98FE,
	2820:  0x62ED,
	2821:  0x690D,
	2822:  0x6B96,
	2823:  0x71ED,
	2824:  0x7E54,
	2825:  0x8077,
	2826:  0x8272,
	2827:  0x89E6,
	2828:  0x98DF,
	2829:  0x8755,
	2830:  0x8FB1,
	2831:  0x5C3B,
	2832:  0x4F38,
	2833:  0x4FE1,
	2834:  0x4FB5,
	2835:  0x5507,
	2836:  0x5A20,
	2837:  0x5BDD,
	2838:  0x5BE9,
	2839:  0x5FC3,
	2840:  0x614E,
	2841:  0x632F,
	2842:  0x65B0,
	2843:  0x664B,
	2844:  0x68EE,
	2845:  0x699B,
	2846:  0x6D78,
	2847:  0x6DF1,
	2848:  0x7533,
	2849:  0x75B9,
	2850:  0x771F,
	2851:  0x795E,
	2852:  0x79E6,
	2853:  0x7D33,
	2854:  0x81E3,
	2855:  0x82AF,
	2856:  0x85AA,
	2857:  0x89AA,
	2858:  0x8A3A,
	2859:  0x8EAB,
	2860:  0x8F9B,
	2861:  0x9032,
	2862:  0x91DD,
	2863:  0x9707,
	2864:  0x4EBA,
	2865:  0x4EC1,
	2866:  0x5203,
	2867:  0x5875,
	2868:  0x58EC,
	2869:  0x5C0B,
	2870:  0x751A,
	2871:  0x5C3D,
	2872:  0x814E,
	2873:  0x8A0A,
	2874:  0x8FC5,
	2875:  0x9663,
	2876:  0x976D,
	2877:  0x7B25,
	2878:  0x8ACF,
	2879:  0x9808,
	2880:  0x9162,
	2881:  0x56F3,
	2882:  0x53A8,
	2883:  0x9017,
	2884:  0x5439,
	2885:  0x5782,
	2886:  0x5E25,
	2887:  0x63A8,
	2888:  0x6C34,
	2889:  0x708A,
	2890:  0x7761,
	2891:  0x7C8B,
	2892:  0x7FE0,
	2893:  0x8870,
	2894:  0x9042,
	2895:  0x9154,
	2896:  0x9310,
	2897:  0x9318,
	2898:  0x968F,
	2899:  0x745E,
	2900:  0x9AC4,
	2901:  0x5D07,
	2902:  0x5D69,
	2903:  0x6570,
	2904:  0x67A2,
	2905:  0x8DA8,
	2906:  0x96DB,
	2907:  0x636E,
	2908:  0x6749,
	2909:  0x6919,
	2910:  0x83C5,
	2911:  0x9817,
	2912:  0x96C0,
	2913:  0x88FE,
	2914:  0x6F84,
	2915:  0x647A,
	2916:  0x5BF8,
	2917:  0x4E16,
	2918:  0x702C,
	2919:  0x755D,
	2920:  0x662F,
	2921:  0x51C4,
	2922:  0x5236,
	2923:  0x52E2,
	2924:  0x59D3,
	2925:  0x5F81,
	2926:  0x6027,
	2927:  0x6210,
	2928:  0x653F,
	2929:  0x6574,
	2930:  0x661F,
	2931:  0x6674,
	2932:  0x68F2,
	2933:  0x6816,
	2934:  0x6B63,
	2935:  0x6E05,
	2936:  0x7272,
	2937:  0x751F,
	2938:  0x76DB,
	2939:  0x7CBE,
	2940:  0x8056,
	2941:  0x58F0,
	2942:  0x88FD,
	2943:  0x897F,
	2944:  0x8AA0,
	2945:  0x8A93,
	2946:  0x8ACB,
	2947:  0x901D,
	2948:  0x9192,
	2949:  0x9752,
	2950:  0x9759,
	2951:  0x6589,
	2952:  0x7A0E,
	2953:  0x8106,
	2954:  0x96BB,
	2955:  0x5E2D,
	2956:  0x60DC,
	2957:  0x621A,
	2958:  0x65A5,
	2959:  0x6614,
	2960:  0x6790,
	2961:  0x77F3,
	2962:  0x7A4D,
	2963:  0x7C4D,
	2964:  0x7E3E,
	2965:  0x810A,
	2966:  0x8CAC,
	2967:  0x8D64,
	2968:  0x8DE1,
	2969:  0x8E5F,
	2970:  0x78A9,
	2971:  0x5207,
	2972:  0x62D9,
	2973:  0x63A5,
	2974:  0x6442,
	2975:  0x6298,
	2976:  0x8A2D,
	2977:  0x7A83,
	2978:  0x7BC0,
	2979:  0x8AAC,
	2980:  0x96EA,
	2981:  0x7D76,
	2982:  0x820C,
	2983:  0x8749,
	2984:  0x4ED9,
	2985:  0x5148,
	2986:  0x5343,
	2987:  0x5360,
	2988:  0x5BA3,
	2989:  0x5C02,
	2990:  0x5C16,
	2991:  0x5DDD,
	2992:  0x6226,
	2993:  0x6247,
	2994:  0x64B0,
	2995:  0x6813,
	2996:  0x6834,
	2997:  0x6CC9,
	2998:  0x6D45,
	2999:  0x6D17,
	3000:  0x67D3,
	3001:  0x6F5C,
	3002:  0x714E,
	3003:  0x717D,
	3004:  0x65CB,
	3005:  0x7A7F,
	3006:  0x7BAD,
	3007:  0x7DDA,
	3008:  0x7E4A,
	3009:  0x7FA8,
	3010:  0x817A,
	3011:  0x821B,
	3012:  0x8239,
	3013:  0x85A6,
	3014:  0x8A6E,
	3015:  0x8CCE,
	3016:  0x8DF5,
	3017:  0x9078,
	3018:  0x9077,
	3019:  0x92AD,
	3020:  0x9291,
	3021:  0x9583,
	3022:  0x9BAE,
	3023:  0x524D,
	3024:  0x5584,
	3025:  0x6F38,
	3026:  0x7136,
	3027:  0x5168,
	3028:  0x7985,
	3029:  0x7E55,
	3030:  0x81B3,
	3031:  0x7CCE,
	3032:  0x564C,
	3033:  0x5851,
	3034:  0x5CA8,
	3035:  0x63AA,
	3036:  0x66FE,
	3037:  0x66FD,
	3038:  0x695A,
	3039:  0x72D9,
	3040:  0x758F,
	3041:  0x758E,
	3042:  0x790E,
	3043:  0x7956,
	3044:  0x79DF,
	3045:  0x7C97,
	3046:  0x7D20,
	3047:  0x7D44,
	3048:  0x8607,
	3049:  0x8A34,
	3050:  0x963B,
	3051:  0x9061,
	3052:  0x9F20,
	3053:  0x50E7,
	3054:  0x5275,
	3055:  0x53CC,
	3056:  0x53E2,
	3057:  0x5009,
	3058:  0x55AA,
	3059:  0x58EE,
	3060:  0x594F,
	3061:  0x723D,
	3062:  0x5B8B,
	3063:  0x5C64,
	3064:  0x531D,
	3065:  0x60E3,
	3066:  0x60F3,
	3067:  0x635C,
	3068:  0x6383,
	3069:  0x633F,
	3070:  0x63BB,
	3071:  0x64CD,
	3072:  0x65E9,
	3073:  0x66F9,
	3074:  0x5DE3,
	3075:  0x69CD,
	3076:  0x69FD,
	3077:  0x6F15,
	3078:  0x71E5,
	3079:  0x4E89,
	3080:  0x75E9,
	3081:  0x76F8,
	3082:  0x7A93,
	3083:  0x7CDF,
	3084:  0x7DCF,
	3085:  0x7D9C,
	3086:  0x8061,
	3087:  0x8349,
	3088:  0x8358,
	3089:  0x846C,
	3090:  0x84BC,
	3091:  0x85FB,
	3092:  0x88C5,
	3093:  0x8D70,
	3094:  0x9001,
	3095:  0x906D,
	3096:  0x9397,
	3097:  0x971C,
	3098:  0x9A12,
	3099:  0x50CF,
	3100:  0x5897,
	3101:  0x618E,
	3102:  0x81D3,
	3103:  0x8535,
	3104:  0x8D08,
	3105:  0x9020,
	3106:  0x4FC3,
	3107:  0x5074,
	3108:  0x5247,
	3109:  0x5373,
	3110:  0x606F,
	3111:  0x6349,
	3112:  0x675F,
	3113:  0x6E2C,
	3114:  0x8DB3,
	3115:  0x901F,
	3116:  0x4FD7,
	3117:  0x5C5E,
	3118:  0x8CCA,
	3119:  0x65CF,
	3120:  0x7D9A,
	3121:  0x5352,
	3122:  0x8896,
	3123:  0x5176,
	3124:  0x63C3,
	3125:  0x5B58,
	3126:  0x5B6B,
	3127:  0x5C0A,
	3128:  0x640D,
	3129:  0x6751,
	3130:  0x905C,
	3131:  0x4ED6,
	3132:  0x591A,
	3133:  0x592A,
	3134:  0x6C70,
	3135:  0x8A51,
	3136:  0x553E,
	3137:  0x5815,
	3138:  0x59A5,
	3139:  0x60F0,
	3140:  0x6253,
	3141:  0x67C1,
	3142:  0x8235,
	3143:  0x6955,
	3144:  0x9640,
	3145:  0x99C4,
	3146:  0x9A28,
	3147:  0x4F53,
	3148:  0x5806,
	3149:  0x5BFE,
	3150:  0x8010,
	3151:  0x5CB1,
	3152:  0x5E2F,
	3153:  0x5F85,
	3154:  0x6020,
	3155:  0x614B,
	3156:  0x6234,
	3157:  0x66FF,
	3158:  0x6CF0,
	3159:  0x6EDE,
	3160:  0x80CE,
	3161:  0x817F,
	3162:  0x82D4,
	3163:  0x888B,
	3164:  0x8CB8,
	3165:  0x9000,
	3166:  0x902E,
	3167:  0x968A,
	3168:  0x9EDB,
	3169:  0x9BDB,
	3170:  0x4EE3,
	3171:  0x53F0,
	3172:  0x5927,
	3173:  0x7B2C,
	3174:  0x918D,
	3175:  0x984C,
	3176:  0x9DF9,
	3177:  0x6EDD,
	3178:  0x7027,
	3179:  0x5353,
	3180:  0x5544,
	3181:  0x5B85,
	3182:  0x6258,
	3183:  0x629E,
	3184:  0x62D3,
	3185:  0x6CA2,
	3186:  0x6FEF,
	3187:  0x7422,
	3188:  0x8A17,
	3189:  0x9438,
	3190:  0x6FC1,
	3191:  0x8AFE,
	3192:  0x8338,
	3193:  0x51E7,
	3194:  0x86F8,
	3195:  0x53EA,
	3196:  0x53E9,
	3197:  0x4F46,
	3198:  0x9054,
	3199:  0x8FB0,
	3200:  0x596A,
	3201:  0x8131,
	3202:  0x5DFD,
	3203:  0x7AEA,
	3204:  0x8FBF,
	3205:  0x68DA,
	3206:  0x8C37,
	3207:  0x72F8,
	3208:  0x9C48,
	3209:  0x6A3D,
	3210:  0x8AB0,
	3211:  0x4E39,
	3212:  0x5358,
	3213:  0x5606,
	3214:  0x5766,
	3215:  0x62C5,
	3216:  0x63A2,
	3217:  0x65E6,
	3218:  0x6B4E,
	3219:  0x6DE1,
	3220:  0x6E5B,
	3221:  0x70AD,
	3222:  0x77ED,
	3223:  0x7AEF,
	3224:  0x7BAA,
	3225:  0x7DBB,
	3226:  0x803D,
	3227:  0x80C6,
	3228:  0x86CB,
	3229:  0x8A95,
	3230:  0x935B,
	3231:  0x56E3,
	3232:  0x58C7,
	3233:  0x5F3E,
	3234:  0x65AD,
	3235:  0x6696,
	3236:  0x6A80,
	3237:  0x6BB5,
	3238:  0x7537,
	3239:  0x8AC7,
	3240:  0x5024,
	3241:  0x77E5,
	3242:  0x5730,
	3243:  0x5F1B,
	3244:  0x6065,
	3245:  0x667A,
	3246:  0x6C60,
	3247:  0x75F4,
	3248:  0x7A1A,
	3249:  0x7F6E,
	3250:  0x81F4,
	3251:  0x8718,
	3252:  0x9045,
	3253:  0x99B3,
	3254:  0x7BC9,
	3255:  0x755C,
	3256:  0x7AF9,
	3257:  0x7B51,
	3258:  0x84C4,
	3259:  0x9010,
	3260:  0x79E9,
	3261:  0x7A92,
	3262:  0x8336,
	3263:  0x5AE1,
	3264:  0x7740,
	3265:  0x4E2D,
	3266:  0x4EF2,
	3267:  0x5B99,
	3268:  0x5FE0,
	3269:  0x62BD,
	3270:  0x663C,
	3271:  0x67F1,
	3272:  0x6CE8,
	3273:  0x866B,
	3274:  0x8877,
	3275:  0x8A3B,
	3276:  0x914E,
	3277:  0x92F3,
	3278:  0x99D0,
	3279:  0x6A17,
	3280:  0x7026,
	3281:  0x732A,
	3282:  0x82E7,
	3283:  0x8457,
	3284:  0x8CAF,
	3285:  0x4E01,
	3286:  0x5146,
	3287:  0x51CB,
	3288:  0x558B,
	3289:  0x5BF5,
	3290:  0x5E16,
	3291:  0x5E33,
	3292:  0x5E81,
	3293:  0x5F14,
	3294:  0x5F35,
	3295:  0x5F6B,
	3296:  0x5FB4,
	3297:  0x61F2,
	3298:  0x6311,
	3299:  0x66A2,
	3300:  0x671D,
	3301:  0x6F6E,
	3302:  0x7252,
	3303:  0x753A,
	3304:  0x773A,
	3305:  0x8074,
	3306:  0x8139,
	3307:  0x8178,
	3308:  0x8776,
	3309:  0x8ABF,
	3310:  0x8ADC,
	3311:  0x8D85,
	3312:  0x8DF3,
	3313:  0x929A,
	3314:  0x9577,
	3315:  0x9802,
	3316:  0x9CE5,
	3317:  0x52C5,
	3318:  0x6357,
	3319:  0x76F4,
	3320:  0x6715,
	3321:  0x6C88,
	3322:  0x73CD,
	3323:  0x8CC3,
	3324:  0x93AE,
	3325:  0x9673,
	3326:  0x6D25,
	3327:  0x589C,
	3328:  0x690E,
	3329:  0x69CC,
	3330:  0x8FFD,
	3331:  0x939A,
	3332:  0x75DB,
	3333:  0x901A,
	3334:  0x585A,
	3335:  0x6802,
	3336:  0x63B4,
	3337:  0x69FB,
	3338:  0x4F43,
	3339:  0x6F2C,
	3340:  0x67D8,
	3341:  0x8FBB,
	3342:  0x8526,
	3343:  0x7DB4,
	3344:  0x9354,
	3345:  0x693F,
	3346:  0x6F70,
	3347:  0x576A,
	3348:  0x58F7,
	3349:  0x5B2C,
	3350:  0x7D2C,
	3351:  0x722A,
	3352:  0x540A,
	3353:  0x91E3,
	3354:  0x9DB4,
	3355:  0x4EAD,
	3356:  0x4F4E,
	3357:  0x505C,
	3358:  0x5075,
	3359:  0x5243,
	3360:  0x8C9E,
	3361:  0x5448,
	3362:  0x5824,
	3363:  0x5B9A,
	3364:  0x5E1D,
	3365:  0x5E95,
	3366:  0x5EAD,
	3367:  0x5EF7,
	3368:  0x5F1F,
	3369:  0x608C,
	3370:  0x62B5,
	3371:  0x633A,
	3372:  0x63D0,
	3373:  0x68AF,
	3374:  0x6C40,
	3375:  0x7887,
	3376:  0x798E,
	3377:  0x7A0B,
	3378:  0x7DE0,
	3379:  0x8247,
	3380:  0x8A02,
	3381:  0x8AE6,
	3382:  0x8E44,
	3383:  0x9013,
	3384:  0x90B8,
	3385:  0x912D,
	3386:  0x91D8,
	3387:  0x9F0E,
	3388:  0x6CE5,
	3389:  0x6458,
	3390:  0x64E2,
	3391:  0x6575,
	3392:  0x6EF4,
	3393:  0x7684,
	3394:  0x7B1B,
	3395:  0x9069,
	3396:  0x93D1,
	3397:  0x6EBA,
	3398:  0x54F2,
	3399:  0x5FB9,
	3400:  0x64A4,
	3401:  0x8F4D,
	3402:  0x8FED,
	3403:  0x9244,
	3404:  0x5178,
	3405:  0x586B,
	3406:  0x5929,
	3407:  0x5C55,
	3408:  0x5E97,
	3409:  0x6DFB,
	3410:  0x7E8F,
	3411:  0x751C,
	3412:  0x8CBC,
	3413:  0x8EE2,
	3414:  0x985B,
	3415:  0x70B9,
	3416:  0x4F1D,
	3417:  0x6BBF,
	3418:  0x6FB1,
	3419:  0x7530,
	3420:  0x96FB,
	3421:  0x514E,
	3422:  0x5410,
	3423:  0x5835,
	3424:  0x5857,
	3425:  0x59AC,
	3426:  0x5C60,
	3427:  0x5F92,
	3428:  0x6597,
	3429:  0x675C,
	3430:  0x6E21,
	3431:  0x767B,
	3432:  0x83DF,
	3433:  0x8CED,
	3434:  0x9014,
	3435:  0x90FD,
	3436:  0x934D,
	3437:  0x7825,
	3438:  0x783A,
	3439:  0x52AA,
	3440:  0x5EA6,
	3441:  0x571F,
	3442:  0x5974,
	3443:  0x6012,
	3444:  0x5012,
	3445:  0x515A,
	3446:  0x51AC,
	3447:  0x51CD,
	3448:  0x5200,
	3449:  0x5510,
	3450:  0x5854,
	3451:  0x5858,
	3452:  0x5957,
	3453:  0x5B95,
	3454:  0x5CF6,
	3455:  0x5D8B,
	3456:  0x60BC,
	3457:  0x6295,
	3458:  0x642D,
	3459:  0x6771,
	3460:  0x6843,
	3461:  0x68BC,
	3462:  0x68DF,
	3463:  0x76D7,
	3464:  0x6DD8,
	3465:  0x6E6F,
	3466:  0x6D9B,
	3467:  0x706F,
	3468:  0x71C8,
	3469:  0x5F53,
	3470:  0x75D8,
	3471:  0x7977,
	3472:  0x7B49,
	3473:  0x7B54,
	3474:  0x7B52,
	3475:  0x7CD6,
	3476:  0x7D71,
	3477:  0x5230,
	3478:  0x8463,
	3479:  0x8569,
	3480:  0x85E4,
	3481:  0x8A0E,
	3482:  0x8B04,
	3483:  0x8C46,
	3484:  0x8E0F,
	3485:  0x9003,
	3486:  0x900F,
	3487:  0x9419,
	3488:  0x9676,
	3489:  0x982D,
	3490:  0x9A30,
	3491:  0x95D8,
	3492:  0x50CD,
	3493:  0x52D5,
	3494:  0x540C,
	3495:  0x5802,
	3496:  0x5C0E,
	3497:  0x61A7,
	3498:  0x649E,
	3499:  0x6D1E,
	3500:  0x77B3,
	3501:  0x7AE5,
	3502:  0x80F4,
	3503:  0x8404,
	3504:  0x9053,
	3505:  0x9285,
	3506:  0x5CE0,
	3507:  0x9D07,
	3508:  0x533F,
	3509:  0x5F97,
	3510:  0x5FB3,
	3511:  0x6D9C,
	3512:  0x7279,
	3513:  0x7763,
	3514:  0x79BF,
	3515:  0x7BE4,
	3516:  0x6BD2,
	3517:  0x72EC,
	3518:  0x8AAD,
	3519:  0x6803,
	3520:  0x6A61,
	3521:  0x51F8,
	3522:  0x7A81,
	3523:  0x6934,
	3524:  0x5C4A,
	3525:  0x9CF6,
	3526:  0x82EB,
	3527:  0x5BC5,
	3528:  0x9149,
	3529:  0x701E,
	3530:  0x5678,
	3531:  0x5C6F,
	3532:  0x60C7,
	3533:  0x6566,
	3534:  0x6C8C,
	3535:  0x8C5A,
	3536:  0x9041,
	3537:  0x9813,
	3538:  0x5451,
	3539:  0x66C7,
	3540:  0x920D,
	3541:  0x5948,
	3542:  0x90A3,
	3543:  0x5185,
	3544:  0x4E4D,
	3545:  0x51EA,
	3546:  0x8599,
	3547:  0x8B0E,
	3548:  0x7058,
	3549:  0x637A,
	3550:  0x934B,
	3551:  0x6962,
	3552:  0x99B4,
	3553:  0x7E04,
	3554:  0x7577,
	3555:  0x5357,
	3556:  0x6960,
	3557:  0x8EDF,
	3558:  0x96E3,
	3559:  0x6C5D,
	3560:  0x4E8C,
	3561:  0x5C3C,
	3562:  0x5F10,
	3563:  0x8FE9,
	3564:  0x5302,
	3565:  0x8CD1,
	3566:  0x8089,
	3567:  0x8679,
	3568:  0x5EFF,
	3569:  0x65E5,
	3570:  0x4E73,
	3571:  0x5165,
	3572:  0x5982,
	3573:  0x5C3F,
	3574:  0x97EE,
	3575:  0x4EFB,
	3576:  0x598A,
	3577:  0x5FCD,
	3578:  0x8A8D,
	3579:  0x6FE1,
	3580:  0x79B0,
	3581:  0x7962,
	3582:  0x5BE7,
	3583:  0x8471,
	3584:  0x732B,
	3585:  0x71B1,
	3586:  0x5E74,
	3587:  0x5FF5,
	3588:  0x637B,
	3589:  0x649A,
	3590:  0x71C3,
	3591:  0x7C98,
	3592:  0x4E43,
	3593:  0x5EFC,
	3594:  0x4E4B,
	3595:  0x57DC,
	3596:  0x56A2,
	3597:  0x60A9,
	3598:  0x6FC3,
	3599:  0x7D0D,
	3600:  0x80FD,
	3601:  0x8133,
	3602:  0x81BF,
	3603:  0x8FB2,
	3604:  0x8997,
	3605:  0x86A4,
	3606:  0x5DF4,
	3607:  0x628A,
	3608:  0x64AD,
	3609:  0x8987,
	3610:  0x6777,
	3611:  0x6CE2,
	3612:  0x6D3E,
	3613:  0x7436,
	3614:  0x7834,
	3615:  0x5A46,
	3616:  0x7F75,
	3617:  0x82AD,
	3618:  0x99AC,
	3619:  0x4FF3,
	3620:  0x5EC3,
	3621:  0x62DD,
	3622:  0x6392,
	3623:  0x6557,
	3624:  0x676F,
	3625:  0x76C3,
	3626:  0x724C,
	3627:  0x80CC,
	3628:  0x80BA,
	3629:  0x8F29,
	3630:  0x914D,
	3631:  0x500D,
	3632:  0x57F9,
	3633:  0x5A92,
	3634:  0x6885,
	3635:  0x6973,
	3636:  0x7164,
	3637:  0x72FD,
	3638:  0x8CB7,
	3639:  0x58F2,
	3640:  0x8CE0,
	3641:  0x966A,
	3642:  0x9019,
	3643:  0x877F,
	3644:  0x79E4,
	3645:  0x77E7,
	3646:  0x8429,
	3647:  0x4F2F,
	3648:  0x5265,
	3649:  0x535A,
	3650:  0x62CD,
	3651:  0x67CF,
	3652:  0x6CCA,
	3653:  0x767D,
	3654:  0x7B94,
	3655:  0x7C95,
	3656:  0x8236,
	3657:  0x8584,
	3658:  0x8FEB,
	3659:  0x66DD,
	3660:  0x6F20,
	3661:  0x7206,
	3662:  0x7E1B,
	3663:  0x83AB,
	3664:  0x99C1,
	3665:  0x9EA6,
	3666:  0x51FD,
	3667:  0x7BB1,
	3668:  0x7872,
	3669:  0x7BB8,
	3670:  0x8087,
	3671:  0x7B48,
	3672:  0x6AE8,
	3673:  0x5E61,
	3674:  0x808C,
	3675:  0x7551,
	3676:  0x7560,
	3677:  0x516B,
	3678:  0x9262,
	3679:  0x6E8C,
	3680:  0x767A,
	3681:  0x9197,
	3682:  0x9AEA,
	3683:  0x4F10,
	3684:  0x7F70,
	3685:  0x629C,
	3686:  0x7B4F,
	3687:  0x95A5,
	3688:  0x9CE9,
	3689:  0x567A,
	3690:  0x5859,
	3691:  0x86E4,
	3692:  0x96BC,
	3693:  0x4F34,
	3694:  0x5224,
	3695:  0x534A,
	3696:  0x53CD,
	3697:  0x53DB,
	3698:  0x5E06,
	3699:  0x642C,
	3700:  0x6591,
	3701:  0x677F,
	3702:  0x6C3E,
	3703:  0x6C4E,
	3704:  0x7248,
	3705:  0x72AF,
	3706:  0x73ED,
	3707:  0x7554,
	3708:  0x7E41,
	3709:  0x822C,
	3710:  0x85E9,
	3711:  0x8CA9,
	3712:  0x7BC4,
	3713:  0x91C6,
	3714:  0x7169,
	3715:  0x9812,
	3716:  0x98EF,
	3717:  0x633D,
	3718:  0x6669,
	3719:  0x756A,
	3720:  0x76E4,
	3721:  0x78D0,
	3722:  0x8543,
	3723:  0x86EE,
	3724:  0x532A,
	3725:  0x5351,
	3726:  0x5426,
	3727:  0x5983,
	3728:  0x5E87,
	3729:  0x5F7C,
	3730:  0x60B2,
	3731:  0x6249,
	3732:  0x6279,
	3733:  0x62AB,
	3734:  0x6590,
	3735:  0x6BD4,
	3736:  0x6CCC,
	3737:  0x75B2,
	3738:  0x76AE,
	3739:  0x7891,
	3740:  0x79D8,
	3741:  0x7DCB,
	3742:  0x7F77,
	3743:  0x80A5,
	3744:  0x88AB,
	3745:  0x8AB9,
	3746:  0x8CBB,
	3747:  0x907F,
	3748:  0x975E,
	3749:  0x98DB,
	3750:  0x6A0B,
	3751:  0x7C38,
	3752:  0x5099,
	3753:  0x5C3E,
	3754:  0x5FAE,
	3755:  0x6787,
	3756:  0x6BD8,
	3757:  0x7435,
	3758:  0x7709,
	3759:  0x7F8E,
	3760:  0x9F3B,
	3761:  0x67CA,
	3762:  0x7A17,
	3763:  0x5339,
	3764:  0x758B,
	3765:  0x9AED,
	3766:  0x5F66,
	3767:  0x819D,
	3768:  0x83F1,
	3769:  0x8098,
	3770:  0x5F3C,
	3771:  0x5FC5,
	3772:  0x7562,
	3773:  0x7B46,
	3774:  0x903C,
	3775:  0x6867,
	3776:  0x59EB,
	3777:  0x5A9B,
	3778:  0x7D10,
	3779:  0x767E,
	3780:  0x8B2C,
	3781:  0x4FF5,
	3782:  0x5F6A,
	3783:  0x6A19,
	3784:  0x6C37,
	3785:  0x6F02,
	3786:  0x74E2,
	3787:  0x7968,
	3788:  0x8868,
	3789:  0x8A55,
	3790:  0x8C79,
	3791:  0x5EDF,
	3792:  0x63CF,
	3793:  0x75C5,
	3794:  0x79D2,
	3795:  0x82D7,
	3796:  0x9328,
	3797:  0x92F2,
	3798:  0x849C,
	3799:  0x86ED,
	3800:  0x9C2D,
	3801:  0x54C1,
	3802:  0x5F6C,
	3803:  0x658C,
	3804:  0x6D5C,
	3805:  0x7015,
	3806:  0x8CA7,
	3807:  0x8CD3,
	3808:  0x983B,
	3809:  0x654F,
	3810:  0x74F6,
	3811:  0x4E0D,
	3812:  0x4ED8,
	3813:  0x57E0,
	3814:  0x592B,
	3815:  0x5A66,
	3816:  0x5BCC,
	3817:  0x51A8,
	3818:  0x5E03,
	3819:  0x5E9C,
	3820:  0x6016,
	3821:  0x6276,
	3822:  0x6577,
	3823:  0x65A7,
	3824:  0x666E,
	3825:  0x6D6E,
	3826:  0x7236,
	3827:  0x7B26,
	3828:  0x8150,
	3829:  0x819A,
	3830:  0x8299,
	3831:  0x8B5C,
	3832:  0x8CA0,
	3833:  0x8CE6,
	3834:  0x8D74,
	3835:  0x961C,
	3836:  0x9644,
	3837:  0x4FAE,
	3838:  0x64AB,
	3839:  0x6B66,
	3840:  0x821E,
	3841:  0x8461,
	3842:  0x856A,
	3843:  0x90E8,
	3844:  0x5C01,
	3845:  0x6953,
	3846:  0x98A8,
	3847:  0x847A,
	3848:  0x8557,
	3849:  0x4F0F,
	3850:  0x526F,
	3851:  0x5FA9,
	3852:  0x5E45,
	3853:  0x670D,
	3854:  0x798F,
	3855:  0x8179,
	3856:  0x8907,
	3857:  0x8986,
	3858:  0x6DF5,
	3859:  0x5F17,
	3860:  0x6255,
	3861:  0x6CB8,
	3862:  0x4ECF,
	3863:  0x7269,
	3864:  0x9B92,
	3865:  0x5206,
	3866:  0x543B,
	3867:  0x5674,
	3868:  0x58B3,
	3869:  0x61A4,
	3870:  0x626E,
	3871:  0x711A,
	3872:  0x596E,
	3873:  0x7C89,
	3874:  0x7CDE,
	3875:  0x7D1B,
	3876:  0x96F0,
	3877:  0x6587,
	3878:  0x805E,
	3879:  0x4E19,
	3880:  0x4F75,
	3881:  0x5175,
	3882:  0x5840,
	3883:  0x5E63,
	3884:  0x5E73,
	3885:  0x5F0A,
	3886:  0x67C4,
	3887:  0x4E26,
	3888:  0x853D,
	3889:  0x9589,
	3890:  0x965B,
	3891:  0x7C73,
	3892:  0x9801,
	3893:  0x50FB,
	3894:  0x58C1,
	3895:  0x7656,
	3896:  0x78A7,
	3897:  0x5225,
	3898:  0x77A5,
	3899:  0x8511,
	3900:  0x7B86,
	3901:  0x504F,
	3902:  0x5909,
	3903:  0x7247,
	3904:  0x7BC7,
	3905:  0x7DE8,
	3906:  0x8FBA,
	3907:  0x8FD4,
	3908:  0x904D,
	3909:  0x4FBF,
	3910:  0x52C9,
	3911:  0x5A29,
	3912:  0x5F01,
	3913:  0x97AD,
	3914:  0x4FDD,
	3915:  0x8217,
	3916:  0x92EA,
	3917:  0x5703,
	3918:  0x6355,
	3919:  0x6B69,
	3920:  0x752B,
	3921:  0x88DC,
	3922:  0x8F14,
	3923:  0x7A42,
	3924:  0x52DF,
	3925:  0x5893,
	3926:  0x6155,
	3927:  0x620A,
	3928:  0x66AE,
	3929:  0x6BCD,
	3930:  0x7C3F,
	3931:  0x83E9,
	3932:  0x5023,
	3933:  0x4FF8,
	3934:  0x5305,
	3935:  0x5446,
	3936:  0x5831,
	3937:  0x5949,
	3938:  0x5B9D,
	3939:  0x5CF0,
	3940:  0x5CEF,
	3941:  0x5D29,
	3942:  0x5E96,
	3943:  0x62B1,
	3944:  0x6367,
	3945:  0x653E,
	3946:  0x65B9,
	3947:  0x670B,
	3948:  0x6CD5,
	3949:  0x6CE1,
	3950:  0x70F9,
	3951:  0x7832,
	3952:  0x7E2B,
	3953:  0x80DE,
	3954:  0x82B3,
	3955:  0x840C,
	3956:  0x84EC,
	3957:  0x8702,
	3958:  0x8912,
	3959:  0x8A2A,
	3960:  0x8C4A,
	3961:  0x90A6,
	3962:  0x92D2,
	3963:  0x98FD,
	3964:  0x9CF3,
	3965:  0x9D6C,
	3966:  0x4E4F,
	3967:  0x4EA1,
	3968:  0x508D,
	3969:  0x5256,
	3970:  0x574A,
	3971:  0x59A8,
	3972:  0x5E3D,
	3973:  0x5FD8,
	3974:  0x5FD9,
	3975:  0x623F,
	3976:  0x66B4,
	3977:  0x671B,
	3978:  0x67D0,
	3979:  0x68D2,
	3980:  0x5192,
	3981:  0x7D21,
	3982:  0x80AA,
	3983:  0x81A8,
	3984:  0x8B00,
	3985:  0x8C8C,
	3986:  0x8CBF,
	3987:  0x927E,
	3988:  0x9632,
	3989:  0x5420,
	3990:  0x982C,
	3991:  0x5317,
	3992:  0x50D5,
	3993:  0x535C,
	3994:  0x58A8,
	3995:  0x64B2,
	3996:  0x6734,
	3997:  0x7267,
	3998:  0x7766,
	3999:  0x7A46,
	4000:  0x91E6,
	4001:  0x52C3,
	4002:  0x6CA1,
	4003:  0x6B86,
	4004:  0x5800,
	4005:  0x5E4C,
	4006:  0x5954,
	4007:  0x672C,
	4008:  0x7FFB,
	4009:  0x51E1,
	4010:  0x76C6,
	4011:  0x6469,
	4012:  0x78E8,
	4013:  0x9B54,
	4014:  0x9EBB,
	4015:  0x57CB,
	4016:  0x59B9,
	4017:  0x6627,
	4018:  0x679A,
	4019:  0x6BCE,
	4020:  0x54E9,
	4021:  0x69D9,
	4022:  0x5E55,
	4023:  0x819C,
	4024:  0x6795,
	4025:  0x9BAA,
	4026:  0x67FE,
	4027:  0x9C52,
	4028:  0x685D,
	4029:  0x4EA6,
	4030:  0x4FE3,
	4031:  0x53C8,
	4032:  0x62B9,
	4033:  0x672B,
	4034:  0x6CAB,
	4035:  0x8FC4,
	4036:  0x4FAD,
	4037:  0x7E6D,
	4038:  0x9EBF,
	4039:  0x4E07,
	4040:  0x6162,
	4041:  0x6E80,
	4042:  0x6F2B,
	4043:  0x8513,
	4044:  0x5473,
	4045:  0x672A,
	4046:  0x9B45,
	4047:  0x5DF3,
	4048:  0x7B95,
	4049:  0x5CAC,
	4050:  0x5BC6,
	4051:  0x871C,
	4052:  0x6E4A,
	4053:  0x84D1,
	4054:  0x7A14,
	4055:  0x8108,
	4056:  0x5999,
	4057:  0x7C8D,
	4058:  0x6C11,
	4059:  0x7720,
	4060:  0x52D9,
	4061:  0x5922,
	4062:  0x7121,
	4063:  0x725F,
	4064:  0x77DB,
	4065:  0x9727,
	4066:  0x9D61,
	4067:  0x690B,
	4068:  0x5A7F,
	4069:  0x5A18,
	4070:  0x51A5,
	4071:  0x540D,
	4072:  0x547D,
	4073:  0x660E,
	4074:  0x76DF,
	4075:  0x8FF7,
	4076:  0x9298,
	4077:  0x9CF4,
	4078:  0x59EA,
	4079:  0x725D,
	4080:  0x6EC5,
	4081:  0x514D,
	4082:  0x68C9,
	4083:  0x7DBF,
	4084:  0x7DEC,
	4085:  0x9762,
	4086:  0x9EBA,
	4087:  0x6478,
	4088:  0x6A21,
	4089:  0x8302,
	4090:  0x5984,
	4091:  0x5B5F,
	4092:  0x6BDB,
	4093:  0x731B,
	4094:  0x76F2,
	4095:  0x7DB2,
	4096:  0x8017,
	4097:  0x8499,
	4098:  0x5132,
	4099:  0x6728,
	4100:  0x9ED9,
	4101:  0x76EE,
	4102:  0x6762,
	4103:  0x52FF,
	4104:  0x9905,
	4105:  0x5C24,
	4106:  0x623B,
	4107:  0x7C7E,
	4108:  0x8CB0,
	4109:  0x554F,
	4110:  0x60B6,
	4111:  0x7D0B,
	4112:  0x9580,
	4113:  0x5301,
	4114:  0x4E5F,
	4115:  0x51B6,
	4116:  0x591C,
	4117:  0x723A,
	4118:  0x8036,
	4119:  0x91CE,
	4120:  0x5F25,
	4121:  0x77E2,
	4122:  0x5384,
	4123:  0x5F79,
	4124:  0x7D04,
	4125:  0x85AC,
	4126:  0x8A33,
	4127:  0x8E8D,
	4128:  0x9756,
	4129:  0x67F3,
	4130:  0x85AE,
	4131:  0x9453,
	4132:  0x6109,
	4133:  0x6108,
	4134:  0x6CB9,
	4135:  0x7652,
	4136:  0x8AED,
	4137:  0x8F38,
	4138:  0x552F,
	4139:  0x4F51,
	4140:  0x512A,
	4141:  0x52C7,
	4142:  0x53CB,
	4143:  0x5BA5,
	4144:  0x5E7D,
	4145:  0x60A0,
	4146:  0x6182,
	4147:  0x63D6,
	4148:  0x6709,
	4149:  0x67DA,
	4150:  0x6E67,
	4151:  0x6D8C,
	4152:  0x7336,
	4153:  0x7337,
	4154:  0x7531,
	4155:  0x7950,
	4156:  0x88D5,
	4157:  0x8A98,
	4158:  0x904A,
	4159:  0x9091,
	4160:  0x90F5,
	4161:  0x96C4,
	4162:  0x878D,
	4163:  0x5915,
	4164:  0x4E88,
	4165:  0x4F59,
	4166:  0x4E0E,
	4167:  0x8A89,
	4168:  0x8F3F,
	4169:  0x9810,
	4170:  0x50AD,
	4171:  0x5E7C,
	4172:  0x5996,
	4173:  0x5BB9,
	4174:  0x5EB8,
	4175:  0x63DA,
	4176:  0x63FA,
	4177:  0x64C1,
	4178:  0x66DC,
	4179:  0x694A,
	4180:  0x69D8,
	4181:  0x6D0B,
	4182:  0x6EB6,
	4183:  0x7194,
	4184:  0x7528,
	4185:  0x7AAF,
	4186:  0x7F8A,
	4187:  0x8000,
	4188:  0x8449,
	4189:  0x84C9,
	4190:  0x8981,
	4191:  0x8B21,
	4192:  0x8E0A,
	4193:  0x9065,
	4194:  0x967D,
	4195:  0x990A,
	4196:  0x617E,
	4197:  0x6291,
	4198:  0x6B32,
	4199:  0x6C83,
	4200:  0x6D74,
	4201:  0x7FCC,
	4202:  0x7FFC,
	4203:  0x6DC0,
	4204:  0x7F85,
	4205:  0x87BA,
	4206:  0x88F8,
	4207:  0x6765,
	4208:  0x83B1,
	4209:  0x983C,
	4210:  0x96F7,
	4211:  0x6D1B,
	4212:  0x7D61,
	4213:  0x843D,
	4214:  0x916A,
	4215:  0x4E71,
	4216:  0x5375,
	4217:  0x5D50,
	4218:  0x6B04,
	4219:  0x6FEB,
	4220:  0x85CD,
	4221:  0x862D,
	4222:  0x89A7,
	4223:  0x5229,
	4224:  0x540F,
	4225:  0x5C65,
	4226:  0x674E,
	4227:  0x68A8,
	4228:  0x7406,
	4229:  0x7483,
	4230:  0x75E2,
	4231:  0x88CF,
	4232:  0x88E1,
	4233:  0x91CC,
	4234:  0x96E2,
	4235:  0x9678,
	4236:  0x5F8B,
	4237:  0x7387,
	4238:  0x7ACB,
	4239:  0x844E,
	4240:  0x63A0,
	4241:  0x7565,
	4242:  0x5289,
	4243:  0x6D41,
	4244:  0x6E9C,
	4245:  0x7409,
	4246:  0x7559,
	4247:  0x786B,
	4248:  0x7C92,
	4249:  0x9686,
	4250:  0x7ADC,
	4251:  0x9F8D,
	4252:  0x4FB6,
	4253:  0x616E,
	4254:  0x65C5,
	4255:  0x865C,
	4256:  0x4E86,
	4257:  0x4EAE,
	4258:  0x50DA,
	4259:  0x4E21,
	4260:  0x51CC,
	4261:  0x5BEE,
	4262:  0x6599,
	4263:  0x6881,
	4264:  0x6DBC,
	4265:  0x731F,
	4266:  0x7642,
	4267:  0x77AD,
	4268:  0x7A1C,
	4269:  0x7CE7,
	4270:  0x826F,
	4271:  0x8AD2,
	4272:  0x907C,
	4273:  0x91CF,
	4274:  0x9675,
	4275:  0x9818,
	4276:  0x529B,
	4277:  0x7DD1,
	4278:  0x502B,
	4279:  0x5398,
	4280:  0x6797,
	4281:  0x6DCB,
	4282:  0x71D0,
	4283:  0x7433,
	4284:  0x81E8,
	4285:  0x8F2A,
	4286:  0x96A3,
	4287:  0x9C57,
	4288:  0x9E9F,
	4289:  0x7460,
	4290:  0x5841,
	4291:  0x6D99,
	4292:  0x7D2F,
	4293:  0x985E,
	4294:  0x4EE4,
	4295:  0x4F36,
	4296:  0x4F8B,
	4297:  0x51B7,
	4298:  0x52B1,
	4299:  0x5DBA,
	4300:  0x601C,
	4301:  0x73B2,
	4302:  0x793C,
	4303:  0x82D3,
	4304:  0x9234,
	4305:  0x96B7,
	4306:  0x96F6,
	4307:  0x970A,
	4308:  0x9E97,
	4309:  0x9F62,
	4310:  0x66A6,
	4311:  0x6B74,
	4312:  0x5217,
	4313:  0x52A3,
	4314:  0x70C8,
	4315:  0x88C2,
	4316:  0x5EC9,
	4317:  0x604B,
	4318:  0x6190,
	4319:  0x6F23,
	4320:  0x7149,
	4321:  0x7C3E,
	4322:  0x7DF4,
	4323:  0x806F,
	4324:  0x84EE,
	4325:  0x9023,
	4326:  0x932C,
	4327:  0x5442,
	4328:  0x9B6F,
	4329:  0x6AD3,
	4330:  0x7089,
	4331:  0x8CC2,
	4332:  0x8DEF,
	4333:  0x9732,
	4334:  0x52B4,
	4335:  0x5A41,
	4336:  0x5ECA,
	4337:  0x5F04,
	4338:  0x6717,
	4339:  0x697C,
	4340:  0x6994,
	4341:  0x6D6A,
	4342:  0x6F0F,
	4343:  0x7262,
	4344:  0x72FC,
	4345:  0x7BED,
	4346:  0x8001,
	4347:  0x807E,
	4348:  0x874B,
	4349:  0x90CE,
	4350:  0x516D,
	4351:  0x9E93,
	4352:  0x7984,
	4353:  0x808B,
	4354:  0x9332,
	4355:  0x8AD6,
	4356:  0x502D,
	4357:  0x548C,
	4358:  0x8A71,
	4359:  0x6B6A,
	4360:  0x8CC4,
	4361:  0x8107,
	4362:  0x60D1,
	4363:  0x67A0,
	4364:  0x9DF2,
	4365:  0x4E99,
	4366:  0x4E98,
	4367:  0x9C10,
	4368:  0x8A6B,
	4369:  0x85C1,
	4370:  0x8568,
	4371:  0x6900,
	4372:  0x6E7E,
	4373:  0x7897,
	4374:  0x8155,
	4418:  0x5F0C,
	4419:  0x4E10,
	4420:  0x4E15,
	4421:  0x4E2A,
	4422:  0x4E31,
	4423:  0x4E36,
	4424:  0x4E3C,
	4425:  0x4E3F,
	4426:  0x4E42,
	4427:  0x4E56,
	4428:  0x4E58,
	4429:  0x4E82,
	4430:  0x4E85,
	4431:  0x8C6B,
	4432:  0x4E8A,
	4433:  0x8212,
	4434:  0x5F0D,
	4435:  0x4E8E,
	4436:  0x4E9E,
	4437:  0x4E9F,
	4438:  0x4EA0,
	4439:  0x4EA2,
	4440:  0x4EB0,
	4441:  0x4EB3,
	4442:  0x4EB6,
	4443:  0x4ECE,
	4444:  0x4ECD,
	4445:  0x4EC4,
	4446:  0x4EC6,
	4447:  0x4EC2,
	4448:  0x4ED7,
	4449:  0x4EDE,
	4450:  0x4EED,
	4451:  0x4EDF,
	4452:  0x4EF7,
	4453:  0x4F09,
	4454:  0x4F5A,
	4455:  0x4F30,
	4456:  0x4F5B,
	4457:  0x4F5D,
	4458:  0x4F57,
	4459:  0x4F47,
	4460:  0x4F76,
	4461:  0x4F88,
	4462:  0x4F8F,
	4463:  0x4F98,
	4464:  0x4F7B,
	4465:  0x4F69,
	4466:  0x4F70,
	4467:  0x4F91,
	4468:  0x4F6F,
	4469:  0x4F86,
	4470:  0x4F96,
	4471:  0x5118,
	4472:  0x4FD4,
	4473:  0x4FDF,
	4474:  0x4FCE,
	4475:  0x4FD8,
	4476:  0x4FDB,
	4477:  0x4FD1,
	4478:  0x4FDA,
	4479:  0x4FD0,
	4480:  0x4FE4,
	4481:  0x4FE5,
	4482:  0x501A,
	4483:  0x5028,
	4484:  0x5014,
	4485:  0x502A,
	4486:  0x5025,
	4487:  0x5005,
	4488:  0x4F1C,
	4489:  0x4FF6,
	4490:  0x5021,
	4491:  0x5029,
	4492:  0x502C,
	4493:  0x4FFE,
	4494:  0x4FEF,
	4495:  0x5011,
	4496:  0x5006,
	4497:  0x5043,
	4498:  0x5047,
	4499:  0x6703,
	4500:  0x5055,
	4501:  0x5050,
	4502:  0x5048,
	4503:  0x505A,
	4504:  0x5056,
	4505:  0x506C,
	4506:  0x5078,
	4507:  0x5080,
	4508:  0x509A,
	4509:  0x5085,
	4510:  0x50B4,
	4511:  0x50B2,
	4512:  0x50C9,
	4513:  0x50CA,
	4514:  0x50B3,
	4515:  0x50C2,
	4516:  0x50D6,
	4517:  0x50DE,
	4518:  0x50E5,
	4519:  0x50ED,
	4520:  0x50E3,
	4521:  0x50EE,
	4522:  0x50F9,
	4523:  0x50F5,
	4524:  0x5109,
	4525:  0x5101,
	4526:  0x5102,
	4527:  0x5116,
	4528:  0x5115,
	4529:  0x5114,
	4530:  0x511A,
	4531:  0x5121,
	4532:  0x513A,
	4533:  0x5137,
	4534:  0x513C,
	4535:  0x513B,
	4536:  0x513F,
	4537:  0x5140,
	4538:  0x5152,
	4539:  0x514C,
	4540:  0x5154,
	4541:  0x5162,
	4542:  0x7AF8,
	4543:  0x5169,
	4544:  0x516A,
	4545:  0x516E,
	4546:  0x5180,
	4547:  0x5182,
	4548:  0x56D8,
	4549:  0x518C,
	4550:  0x5189,
	4551:  0x518F,
	4552:  0x5191,
	4553:  0x5193,
	4554:  0x5195,
	4555:  0x5196,
	4556:  0x51A4,
	4557:  0x51A6,
	4558:  0x51A2,
	4559:  0x51A9,
	4560:  0x51AA,
	4561:  0x51AB,
	4562:  0x51B3,
	4563:  0x51B1,
	4564:  0x51B2,
	4565:  0x51B0,
	4566:  0x51B5,
	4567:  0x51BD,
	4568:  0x51C5,
	4569:  0x51C9,
	4570:  0x51DB,
	4571:  0x51E0,
	4572:  0x8655,
	4573:  0x51E9,
	4574:  0x51ED,
	4575:  0x51F0,
	4576:  0x51F5,
	4577:  0x51FE,
	4578:  0x5204,
	4579:  0x520B,
	4580:  0x5214,
	4581:  0x520E,
	4582:  0x5227,
	4583:  0x522A,
	4584:  0x522E,
	4585:  0x5233,
	4586:  0x5239,
	4587:  0x524F,
	4588:  0x5244,
	4589:  0x524B,
	4590:  0x524C,
	4591:  0x525E,
	4592:  0x5254,
	4593:  0x526A,
	4594:  0x5274,
	4595:  0x5269,
	4596:  0x5273,
	4597:  0x527F,
	4598:  0x527D,
	4599:  0x528D,
	4600:  0x5294,
	4601:  0x5292,
	4602:  0x5271,
	4603:  0x5288,
	4604:  0x5291,
	4605:  0x8FA8,
	4606:  0x8FA7,
	4607:  0x52AC,
	4608:  0x52AD,
	4609:  0x52BC,
	4610:  0x52B5,
	4611:  0x52C1,
	4612:  0x52CD,
	4613:  0x52D7,
	4614:  0x52DE,
	4615:  0x52E3,
	4616:  0x52E6,
	4617:  0x98ED,
	4618:  0x52E0,
	4619:  0x52F3,
	4620:  0x52F5,
	4621:  0x52F8,
	4622:  0x52F9,
	4623:  0x5306,
	4624:  0x5308,
	4625:  0x7538,
	4626:  0x530D,
	4627:  0x5310,
	4628:  0x530F,
	4629:  0x5315,
	4630:  0x531A,
	4631:  0x5323,
	4632:  0x532F,
	4633:  0x5331,
	4634:  0x5333,
	4635:  0x5338,
	4636:  0x5340,
	4637:  0x5346,
	4638:  0x5345,
	4639:  0x4E17,
	4640:  0x5349,
	4641:  0x534D,
	4642:  0x51D6,
	4643:  0x535E,
	4644:  0x5369,
	4645:  0x536E,
	4646:  0x5918,
	4647:  0x537B,
	4648:  0x5377,
	4649:  0x5382,
	4650:  0x5396,
	4651:  0x53A0,
	4652:  0x53A6,
	4653:  0x53A5,
	4654:  0x53AE,
	4655:  0x53B0,
	4656:  0x53B6,
	4657:  0x53C3,
	4658:  0x7C12,
	4659:  0x96D9,
	4660:  0x53DF,
	4661:  0x66FC,
	4662:  0x71EE,
	4663:  0x53EE,
	4664:  0x53E8,
	4665:  0x53ED,
	4666:  0x53FA,
	4667:  0x5401,
	4668:  0x543D,
	4669:  0x5440,
	4670:  0x542C,
	4671:  0x542D,
	4672:  0x543C,
	4673:  0x542E,
	4674:  0x5436,
	4675:  0x5429,
	4676:  0x541D,
	4677:  0x544E,
	4678:  0x548F,
	4679:  0x5475,
	4680:  0x548E,
	4681:  0x545F,
	4682:  0x5471,
	4683:  0x5477,
	4684:  0x5470,
	4685:  0x5492,
	4686:  0x547B,
	4687:  0x5480,
	4688:  0x5476,
	4689:  0x5484,
	4690:  0x5490,
	4691:  0x5486,
	4692:  0x54C7,
	4693:  0x54A2,
	4694:  0x54B8,
	4695:  0x54A5,
	4696:  0x54AC,
	4697:  0x54C4,
	4698:  0x54C8,
	4699:  0x54A8,
	4700:  0x54AB,
	4701:  0x54C2,
	4702:  0x54A4,
	4703:  0x54BE,
	4704:  0x54BC,
	4705:  0x54D8,
	4706:  0x54E5,
	4707:  0x54E6,
	4708:  0x550F,
	4709:  0x5514,
	4710:  0x54FD,
	4711:  0x54EE,
	4712:  0x54ED,
	4713:  0x54FA,
	4714:  0x54E2,
	4715:  0x5539,
	4716:  0x5540,
	4717:  0x5563,
	4718:  0x554C,
	4719:  0x552E,
	4720:  0x555C,
	4721:  0x5545,
	4722:  0x5556,
	4723:  0x5557,
	4724:  0x5538,
	4725:  0x5533,
	4726:  0x555D,
	4727:  0x5599,
	4728:  0x5580,
	4729:  0x54AF,
	4730:  0x558A,
	4731:  0x559F,
	4732:  0x557B,
	4733:  0x557E,
	4734:  0x5598,
	4735:  0x559E,
	4736:  0x55AE,
	4737:  0x557C,
	4738:  0x5583,
	4739:  0x55A9,
	4740:  0x5587,
	4741:  0x55A8,
	4742:  0x55DA,
	4743:  0x55C5,
	4744:  0x55DF,
	4745:  0x55C4,
	4746:  0x55DC,
	4747:  0x55E4,
	4748:  0x55D4,
	4749:  0x5614,
	4750:  0x55F7,
	4751:  0x5616,
	4752:  0x55FE,
	4753:  0x55FD,
	4754:  0x561B,
	4755:  0x55F9,
	4756:  0x564E,
	4757:  0x5650,
	4758:  0x71DF,
	4759:  0x5634,
	4760:  0x5636,
	4761:  0x5632,
	4762:  0x5638,
	4763:  0x566B,
	4764:  0x5664,
	4765:  0x562F,
	4766:  0x566C,
	4767:  0x566A,
	4768:  0x5686,
	4769:  0x5680,
	4770:  0x568A,
	4771:  0x56A0,
	4772:  0x5694,
	4773:  0x568F,
	4774:  0x56A5,
	4775:  0x56AE,
	4776:  0x56B6,
	4777:  0x56B4,
	4778:  0x56C2,
	4779:  0x56BC,
	4780:  0x56C1,
	4781:  0x56C3,
	4782:  0x56C0,
	4783:  0x56C8,
	4784:  0x56CE,
	4785:  0x56D1,
	4786:  0x56D3,
	4787:  0x56D7,
	4788:  0x56EE,
	4789:  0x56F9,
	4790:  0x5700,
	4791:  0x56FF,
	4792:  0x5704,
	4793:  0x5709,
	4794:  0x5708,
	4795:  0x570B,
	4796:  0x570D,
	4797:  0x5713,
	4798:  0x5718,
	4799:  0x5716,
	4800:  0x55C7,
	4801:  0x571C,
	4802:  0x5726,
	4803:  0x5737,
	4804:  0x5738,
	4805:  0x574E,
	4806:  0x573B,
	4807:  0x5740,
	4808:  0x574F,
	4809:  0x5769,
	4810:  0x57C0,
	4811:  0x5788,
	4812:  0x5761,
	4813:  0x577F,
	4814:  0x5789,
	4815:  0x5793,
	4816:  0x57A0,
	4817:  0x57B3,
	4818:  0x57A4,
	4819:  0x57AA,
	4820:  0x57B0,
	4821:  0x57C3,
	4822:  0x57C6,
	4823:  0x57D4,
	4824:  0x57D2,
	4825:  0x57D3,
	4826:  0x580A,
	4827:  0x57D6,
	4828:  0x57E3,
	4829:  0x580B,
	4830:  0x5819,
	4831:  0x581D,
	4832:  0x5872,
	4833:  0x5821,
	4834:  0x5862,
	4835:  0x584B,
	4836:  0x5870,
	4837:  0x6BC0,
	4838:  0x5852,
	4839:  0x583D,
	4840:  0x5879,
	4841:  0x5885,
	4842:  0x58B9,
	4843:  0x589F,
	4844:  0x58AB,
	4845:  0x58BA,
	4846:  0x58DE,
	4847:  0x58BB,
	4848:  0x58B8,
	4849:  0x58AE,
	4850:  0x58C5,
	4851:  0x58D3,
	4852:  0x58D1,
	4853:  0x58D7,
	4854:  0x58D9,
	4855:  0x58D8,
	4856:  0x58E5,
	4857:  0x58DC,
	4858:  0x58E4,
	4859:  0x58DF,
	4860:  0x58EF,
	4861:  0x58FA,
	4862:  0x58F9,
	4863:  0x58FB,
	4864:  0x58FC,
	4865:  0x58FD,
	4866:  0x5902,
	4867:  0x590A,
	4868:  0x5910,
	4869:  0x591B,
	4870:  0x68A6,
	4871:  0x5925,
	4872:  0x592C,
	4873:  0x592D,
	4874:  0x5932,
	4875:  0x5938,
	4876:  0x593E,
	4877:  0x7AD2,
	4878:  0x5955,
	4879:  0x5950,
	4880:  0x594E,
	4881:  0x595A,
	4882:  0x5958,
	4883:  0x5962,
	4884:  0x5960,
	4885:  0x5967,
	4886:  0x596C,
	4887:  0x5969,
	4888:  0x5978,
	4889:  0x5981,
	4890:  0x599D,
	4891:  0x4F5E,
	4892:  0x4FAB,
	4893:  0x59A3,
	4894:  0x59B2,
	4895:  0x59C6,
	4896:  0x59E8,
	4897:  0x59DC,
	4898:  0x598D,
	4899:  0x59D9,
	4900:  0x59DA,
	4901:  0x5A25,
	4902:  0x5A1F,
	4903:  0x5A11,
	4904:  0x5A1C,
	4905:  0x5A09,
	4906:  0x5A1A,
	4907:  0x5A40,
	4908:  0x5A6C,
	4909:  0x5A49,
	4910:  0x5A35,
	4911:  0x5A36,
	4912:  0x5A62,
	4913:  0x5A6A,
	4914:  0x5A9A,
	4915:  0x5ABC,
	4916:  0x5ABE,
	4917:  0x5ACB,
	4918:  0x5AC2,
	4919:  0x5ABD,
	4920:  0x5AE3,
	4921:  0x5AD7,
	4922:  0x5AE6,
	4923:  0x5AE9,
	4924:  0x5AD6,
	4925:  0x5AFA,
	4926:  0x5AFB,
	4927:  0x5B0C,
	4928:  0x5B0B,
	4929:  0x5B16,
	4930:  0x5B32,
	4931:  0x5AD0,
	4932:  0x5B2A,
	4933:  0x5B36,
	4934:  0x5B3E,
	4935:  0x5B43,
	4936:  0x5B45,
	4937:  0x5B40,
	4938:  0x5B51,
	4939:  0x5B55,
	4940:  0x5B5A,
	4941:  0x5B5B,
	4942:  0x5B65,
	4943:  0x5B69,
	4944:  0x5B70,
	4945:  0x5B73,
	4946:  0x5B75,
	4947:  0x5B78,
	4948:  0x6588,
	4949:  0x5B7A,
	4950:  0x5B80,
	4951:  0x5B83,
	4952:  0x5BA6,
	4953:  0x5BB8,
	4954:  0x5BC3,
	4955:  0x5BC7,
	4956:  0x5BC9,
	4957:  0x5BD4,
	4958:  0x5BD0,
	4959:  0x5BE4,
	4960:  0x5BE6,
	4961:  0x5BE2,
	4962:  0x5BDE,
	4963:  0x5BE5,
	4964:  0x5BEB,
	4965:  0x5BF0,
	4966:  0x5BF6,
	4967:  0x5BF3,
	4968:  0x5C05,
	4969:  0x5C07,
	4970:  0x5C08,
	4971:  0x5C0D,
	4972:  0x5C13,
	4973:  0x5C20,
	4974:  0x5C22,
	4975:  0x5C28,
	4976:  0x5C38,
	4977:  0x5C39,
	4978:  0x5C41,
	4979:  0x5C46,
	4980:  0x5C4E,
	4981:  0x5C53,
	4982:  0x5C50,
	4983:  0x5C4F,
	4984:  0x5B71,
	4985:  0x5C6C,
	4986:  0x5C6E,
	4987:  0x4E62,
	4988:  0x5C76,
	4989:  0x5C79,
	4990:  0x5C8C,
	4991:  0x5C91,
	4992:  0x5C94,
	4993:  0x599B,
	4994:  0x5CAB,
	4995:  0x5CBB,
	4996:  0x5CB6,
	4997:  0x5CBC,
	4998:  0x5CB7,
	4999:  0x5CC5,
	5000:  0x5CBE,
	5001:  0x5CC7,
	5002:  0x5CD9,
	5003:  0x5CE9,
	5004:  0x5CFD,
	5005:  0x5CFA,
	5006:  0x5CED,
	5007:  0x5D8C,
	5008:  0x5CEA,
	5009:  0x5D0B,
	5010:  0x5D15,
	5011:  0x5D17,
	5012:  0x5D5C,
	5013:  0x5D1F,
	5014:  0x5D1B,
	5015:  0x5D11,
	5016:  0x5D14,
	5017:  0x5D22,
	5018:  0x5D1A,
	5019:  0x5D19,
	5020:  0x5D18,
	5021:  0x5D4C,
	5022:  0x5D52,
	5023:  0x5D4E,
	5024:  0x5D4B,
	5025:  0x5D6C,
	5026:  0x5D73,
	5027:  0x5D76,
	5028:  0x5D87,
	5029:  0x5D84,
	5030:  0x5D82,
	5031:  0x5DA2,
	5032:  0x5D9D,
	5033:  0x5DAC,
	5034:  0x5DAE,
	5035:  0x5DBD,
	5036:  0x5D90,
	5037:  0x5DB7,
	5038:  0x5DBC,
	5039:  0x5DC9,
	5040:  0x5DCD,
	5041:  0x5DD3,
	5042:  0x5DD2,
	5043:  0x5DD6,
	5044:  0x5DDB,
	5045:  0x5DEB,
	5046:  0x5DF2,
	5047:  0x5DF5,
	5048:  0x5E0B,
	5049:  0x5E1A,
	5050:  0x5E19,
	5051:  0x5E11,
	5052:  0x5E1B,
	5053:  0x5E36,
	5054:  0x5E37,
	5055:  0x5E44,
	5056:  0x5E43,
	5057:  0x5E40,
	5058:  0x5E4E,
	5059:  0x5E57,
	5060:  0x5E54,
	5061:  0x5E5F,
	5062:  0x5E62,
	5063:  0x5E64,
	5064:  0x5E47,
	5065:  0x5E75,
	5066:  0x5E76,
	5067:  0x5E7A,
	5068:  0x9EBC,
	5069:  0x5E7F,
	5070:  0x5EA0,
	5071:  0x5EC1,
	5072:  0x5EC2,
	5073:  0x5EC8,
	5074:  0x5ED0,
	5075:  0x5ECF,
	5076:  0x5ED6,
	5077:  0x5EE3,
	5078:  0x5EDD,
	5079:  0x5EDA,
	5080:  0x5EDB,
	5081:  0x5EE2,
	5082:  0x5EE1,
	5083:  0x5EE8,
	5084:  0x5EE9,
	5085:  0x5EEC,
	5086:  0x5EF1,
	5087:  0x5EF3,
	5088:  0x5EF0,
	5089:  0x5EF4,
	5090:  0x5EF8,
	5091:  0x5EFE,
	5092:  0x5F03,
	5093:  0x5F09,
	5094:  0x5F5D,
	5095:  0x5F5C,
	5096:  0x5F0B,
	5097:  0x5F11,
	5098:  0x5F16,
	5099:  0x5F29,
	5100:  0x5F2D,
	5101:  0x5F38,
	5102:  0x5F41,
	5103:  0x5F48,
	5104:  0x5F4C,
	5105:  0x5F4E,
	5106:  0x5F2F,
	5107:  0x5F51,
	5108:  0x5F56,
	5109:  0x5F57,
	5110:  0x5F59,
	5111:  0x5F61,
	5112:  0x5F6D,
	5113:  0x5F73,
	5114:  0x5F77,
	5115:  0x5F83,
	5116:  0x5F82,
	5117:  0x5F7F,
	5118:  0x5F8A,
	5119:  0x5F88,
	5120:  0x5F91,
	5121:  0x5F87,
	5122:  0x5F9E,
	5123:  0x5F99,
	5124:  0x5F98,
	5125:  0x5FA0,
	5126:  0x5FA8,
	5127:  0x5FAD,
	5128:  0x5FBC,
	5129:  0x5FD6,
	5130:  0x5FFB,
	5131:  0x5FE4,
	5132:  0x5FF8,
	5133:  0x5FF1,
	5134:  0x5FDD,
	5135:  0x60B3,
	5136:  0x5FFF,
	5137:  0x6021,
	5138:  0x6060,
	5139:  0x6019,
	5140:  0x6010,
	5141:  0x6029,
	5142:  0x600E,
	5143:  0x6031,
	5144:  0x601B,
	5145:  0x6015,
	5146:  0x602B,
	5147:  0x6026,
	5148:  0x600F,
	5149:  0x603A,
	5150:  0x605A,
	5151:  0x6041,
	5152:  0x606A,
	5153:  0x6077,
	5154:  0x605F,
	5155:  0x604A,
	5156:  0x6046,
	5157:  0x604D,
	5158:  0x6063,
	5159:  0x6043,
	5160:  0x6064,
	5161:  0x6042,
	5162:  0x606C,
	5163:  0x606B,
	5164:  0x6059,
	5165:  0x6081,
	5166:  0x608D,
	5167:  0x60E7,
	5168:  0x6083,
	5169:  0x609A,
	5170:  0x6084,
	5171:  0x609B,
	5172:  0x6096,
	5173:  0x6097,
	5174:  0x6092,
	5175:  0x60A7,
	5176:  0x608B,
	5177:  0x60E1,
	5178:  0x60B8,
	5179:  0x60E0,
	5180:  0x60D3,
	5181:  0x60B4,
	5182:  0x5FF0,
	5183:  0x60BD,
	5184:  0x60C6,
	5185:  0x60B5,
	5186:  0x60D8,
	5187:  0x614D,
	5188:  0x6115,
	5189:  0x6106,
	5190:  0x60F6,
	5191:  0x60F7,
	5192:  0x6100,
	5193:  0x60F4,
	5194:  0x60FA,
	5195:  0x6103,
	5196:  0x6121,
	5197:  0x60FB,
	5198:  0x60F1,
	5199:  0x610D,
	5200:  0x610E,
	5201:  0x6147,
	5202:  0x613E,
	5203:  0x6128,
	5204:  0x6127,
	5205:  0x614A,
	5206:  0x613F,
	5207:  0x613C,
	5208:  0x612C,
	5209:  0x6134,
	5210:  0x613D,
	5211:  0x6142,
	5212:  0x6144,
	5213:  0x6173,
	5214:  0x6177,
	5215:  0x6158,
	5216:  0x6159,
	5217:  0x615A,
	5218:  0x616B,
	5219:  0x6174,
	5220:  0x616F,
	5221:  0x6165,
	5222:  0x6171,
	5223:  0x615F,
	5224:  0x615D,
	5225:  0x6153,
	5226:  0x6175,
	5227:  0x6199,
	5228:  0x6196,
	5229:  0x6187,
	5230:  0x61AC,
	5231:  0x6194,
	5232:  0x619A,
	5233:  0x618A,
	5234:  0x6191,
	5235:  0x61AB,
	5236:  0x61AE,
	5237:  0x61CC,
	5238:  0x61CA,
	5239:  0x61C9,
	5240:  0x61F7,
	5241:  0x61C8,
	5242:  0x61C3,
	5243:  0x61C6,
	5244:  0x61BA,
	5245:  0x61CB,
	5246:  0x7F79,
	5247:  0x61CD,
	5248:  0x61E6,
	5249:  0x61E3,
	5250:  0x61F6,
	5251:  0x61FA,
	5252:  0x61F4,
	5253:  0x61FF,
	5254:  0x61FD,
	5255:  0x61FC,
	5256:  0x61FE,
	5257:  0x6200,
	5258:  0x6208,
	5259:  0x6209,
	5260:  0x620D,
	5261:  0x620C,
	5262:  0x6214,
	5263:  0x621B,
	5264:  0x621E,
	5265:  0x6221,
	5266:  0x622A,
	5267:  0x622E,
	5268:  0x6230,
	5269:  0x6232,
	5270:  0x6233,
	5271:  0x6241,
	5272:  0x624E,
	5273:  0x625E,
	5274:  0x6263,
	5275:  0x625B,
	5276:  0x6260,
	5277:  0x6268,
	5278:  0x627C,
	5279:  0x6282,
	5280:  0x6289,
	5281:  0x627E,
	5282:  0x6292,
	5283:  0x6293,
	5284:  0x6296,
	5285:  0x62D4,
	5286:  0x6283,
	5287:  0x6294,
	5288:  0x62D7,
	5289:  0x62D1,
	5290:  0x62BB,
	5291:  0x62CF,
	5292:  0x62FF,
	5293:  0x62C6,
	5294:  0x64D4,
	5295:  0x62C8,
	5296:  0x62DC,
	5297:  0x62CC,
	5298:  0x62CA,
	5299:  0x62C2,
	5300:  0x62C7,
	5301:  0x629B,
	5302:  0x62C9,
	5303:  0x630C,
	5304:  0x62EE,
	5305:  0x62F1,
	5306:  0x6327,
	5307:  0x6302,
	5308:  0x6308,
	5309:  0x62EF,
	5310:  0x62F5,
	5311:  0x6350,
	5312:  0x633E,
	5313:  0x634D,
	5314:  0x641C,
	5315:  0x634F,
	5316:  0x6396,
	5317:  0x638E,
	5318:  0x6380,
	5319:  0x63AB,
	5320:  0x6376,
	5321:  0x63A3,
	5322:  0x638F,
	5323:  0x6389,
	5324:  0x639F,
	5325:  0x63B5,
	5326:  0x636B,
	5327:  0x6369,
	5328:  0x63BE,
	5329:  0x63E9,
	5330:  0x63C0,
	5331:  0x63C6,
	5332:  0x63E3,
	5333:  0x63C9,
	5334:  0x63D2,
	5335:  0x63F6,
	5336:  0x63C4,
	5337:  0x6416,
	5338:  0x6434,
	5339:  0x6406,
	5340:  0x6413,
	5341:  0x6426,
	5342:  0x6436,
	5343:  0x651D,
	5344:  0x6417,
	5345:  0x6428,
	5346:  0x640F,
	5347:  0x6467,
	5348:  0x646F,
	5349:  0x6476,
	5350:  0x644E,
	5351:  0x652A,
	5352:  0x6495,
	5353:  0x6493,
	5354:  0x64A5,
	5355:  0x64A9,
	5356:  0x6488,
	5357:  0x64BC,
	5358:  0x64DA,
	5359:  0x64D2,
	5360:  0x64C5,
	5361:  0x64C7,
	5362:  0x64BB,
	5363:  0x64D8,
	5364:  0x64C2,
	5365:  0x64F1,
	5366:  0x64E7,
	5367:  0x8209,
	5368:  0x64E0,
	5369:  0x64E1,
	5370:  0x62AC,
	5371:  0x64E3,
	5372:  0x64EF,
	5373:  0x652C,
	5374:  0x64F6,
	5375:  0x64F4,
	5376:  0x64F2,
	5377:  0x64FA,
	5378:  0x6500,
	5379:  0x64FD,
	5380:  0x6518,
	5381:  0x651C,
	5382:  0x6505,
	5383:  0x6524,
	5384:  0x6523,
	5385:  0x652B,
	5386:  0x6534,
	5387:  0x6535,
	5388:  0x6537,
	5389:  0x6536,
	5390:  0x6538,
	5391:  0x754B,
	5392:  0x6548,
	5393:  0x6556,
	5394:  0x6555,
	5395:  0x654D,
	5396:  0x6558,
	5397:  0x655E,
	5398:  0x655D,
	5399:  0x6572,
	5400:  0x6578,
	5401:  0x6582,
	5402:  0x6583,
	5403:  0x8B8A,
	5404:  0x659B,
	5405:  0x659F,
	5406:  0x65AB,
	5407:  0x65B7,
	5408:  0x65C3,
	5409:  0x65C6,
	5410:  0x65C1,
	5411:  0x65C4,
	5412:  0x65CC,
	5413:  0x65D2,
	5414:  0x65DB,
	5415:  0x65D9,
	5416:  0x65E0,
	5417:  0x65E1,
	5418:  0x65F1,
	5419:  0x6772,
	5420:  0x660A,
	5421:  0x6603,
	5422:  0x65FB,
	5423:  0x6773,
	5424:  0x6635,
	5425:  0x6636,
	5426:  0x6634,
	5427:  0x661C,
	5428:  0x664F,
	5429:  0x6644,
	5430:  0x6649,
	5431:  0x6641,
	5432:  0x665E,
	5433:  0x665D,
	5434:  0x6664,
	5435:  0x6667,
	5436:  0x6668,
	5437:  0x665F,
	5438:  0x6662,
	5439:  0x6670,
	5440:  0x6683,
	5441:  0x6688,
	5442:  0x668E,
	5443:  0x6689,
	5444:  0x6684,
	5445:  0x6698,
	5446:  0x669D,
	5447:  0x66C1,
	5448:  0x66B9,
	5449:  0x66C9,
	5450:  0x66BE,
	5451:  0x66BC,
	5452:  0x66C4,
	5453:  0x66B8,
	5454:  0x66D6,
	5455:  0x66DA,
	5456:  0x66E0,
	5457:  0x663F,
	5458:  0x66E6,
	5459:  0x66E9,
	5460:  0x66F0,
	5461:  0x66F5,
	5462:  0x66F7,
	5463:  0x670F,
	5464:  0x6716,
	5465:  0x671E,
	5466:  0x6726,
	5467:  0x6727,
	5468:  0x9738,
	5469:  0x672E,
	5470:  0x673F,
	5471:  0x6736,
	5472:  0x6741,
	5473:  0x6738,
	5474:  0x6737,
	5475:  0x6746,
	5476:  0x675E,
	5477:  0x6760,
	5478:  0x6759,
	5479:  0x6763,
	5480:  0x6764,
	5481:  0x6789,
	5482:  0x6770,
	5483:  0x67A9,
	5484:  0x677C,
	5485:  0x676A,
	5486:  0x678C,
	5487:  0x678B,
	5488:  0x67A6,
	5489:  0x67A1,
	5490:  0x6785,
	5491:  0x67B7,
	5492:  0x67EF,
	5493:  0x67B4,
	5494:  0x67EC,
	5495:  0x67B3,
	5496:  0x67E9,
	5497:  0x67B8,
	5498:  0x67E4,
	5499:  0x67DE,
	5500:  0x67DD,
	5501:  0x67E2,
	5502:  0x67EE,
	5503:  0x67B9,
	5504:  0x67CE,
	5505:  0x67C6,
	5506:  0x67E7,
	5507:  0x6A9C,
	5508:  0x681E,
	5509:  0x6846,
	5510:  0x6829,
	5511:  0x6840,
	5512:  0x684D,
	5513:  0x6832,
	5514:  0x684E,
	5515:  0x68B3,
	5516:  0x682B,
	5517:  0x6859,
	5518:  0x6863,
	5519:  0x6877,
	5520:  0x687F,
	5521:  0x689F,
	5522:  0x688F,
	5523:  0x68AD,
	5524:  0x6894,
	5525:  0x689D,
	5526:  0x689B,
	5527:  0x6883,
	5528:  0x6AAE,
	5529:  0x68B9,
	5530:  0x6874,
	5531:  0x68B5,
	5532:  0x68A0,
	5533:  0x68BA,
	5534:  0x690F,
	5535:  0x688D,
	5536:  0x687E,
	5537:  0x6901,
	5538:  0x68CA,
	5539:  0x6908,
	5540:  0x68D8,
	5541:  0x6922,
	5542:  0x6926,
	5543:  0x68E1,
	5544:  0x690C,
	5545:  0x68CD,
	5546:  0x68D4,
	5547:  0x68E7,
	5548:  0x68D5,
	5549:  0x6936,
	5550:  0x6912,
	5551:  0x6904,
	5552:  0x68D7,
	5553:  0x68E3,
	5554:  0x6925,
	5555:  0x68F9,
	5556:  0x68E0,
	5557:  0x68EF,
	5558:  0x6928,
	5559:  0x692A,
	5560:  0x691A,
	5561:  0x6923,
	5562:  0x6921,
	5563:  0x68C6,
	5564:  0x6979,
	5565:  0x6977,
	5566:  0x695C,
	5567:  0x6978,
	5568:  0x696B,
	5569:  0x6954,
	5570:  0x697E,
	5571:  0x696E,
	5572:  0x6939,
	5573:  0x6974,
	5574:  0x693D,
	5575:  0x6959,
	5576:  0x6930,
	5577:  0x6961,
	5578:  0x695E,
	5579:  0x695D,
	5580:  0x6981,
	5581:  0x696A,
	5582:  0x69B2,
	5583:  0x69AE,
	5584:  0x69D0,
	5585:  0x69BF,
	5586:  0x69C1,
	5587:  0x69D3,
	5588:  0x69BE,
	5589:  0x69CE,
	5590:  0x5BE8,
	5591:  0x69CA,
	5592:  0x69DD,
	5593:  0x69BB,
	5594:  0x69C3,
	5595:  0x69A7,
	5596:  0x6A2E,
	5597:  0x6991,
	5598:  0x69A0,
	5599:  0x699C,
	5600:  0x6995,
	5601:  0x69B4,
	5602:  0x69DE,
	5603:  0x69E8,
	5604:  0x6A02,
	5605:  0x6A1B,
	5606:  0x69FF,
	5607:  0x6B0A,
	5608:  0x69F9,
	5609:  0x69F2,
	5610:  0x69E7,
	5611:  0x6A05,
	5612:  0x69B1,
	5613:  0x6A1E,
	5614:  0x69ED,
	5615:  0x6A14,
	5616:  0x69EB,
	5617:  0x6A0A,
	5618:  0x6A12,
	5619:  0x6AC1,
	5620:  0x6A23,
	5621:  0x6A13,
	5622:  0x6A44,
	5623:  0x6A0C,
	5624:  0x6A72,
	5625:  0x6A36,
	5626:  0x6A78,
	5627:  0x6A47,
	5628:  0x6A62,
	5629:  0x6A59,
	5630:  0x6A66,
	5631:  0x6A48,
	5632:  0x6A38,
	5633:  0x6A22,
	5634:  0x6A90,
	5635:  0x6A8D,
	5636:  0x6AA0,
	5637:  0x6A84,
	5638:  0x6AA2,
	5639:  0x6AA3,
	5640:  0x6A97,
	5641:  0x8617,
	5642:  0x6ABB,
	5643:  0x6AC3,
	5644:  0x6AC2,
	5645:  0x6AB8,
	5646:  0x6AB3,
	5647:  0x6AAC,
	5648:  0x6ADE,
	5649:  0x6AD1,
	5650:  0x6ADF,
	5651:  0x6AAA,
	5652:  0x6ADA,
	5653:  0x6AEA,
	5654:  0x6AFB,
	5655:  0x6B05,
	5656:  0x8616,
	5657:  0x6AFA,
	5658:  0x6B12,
	5659:  0x6B16,
	5660:  0x9B31,
	5661:  0x6B1F,
	5662:  0x6B38,
	5663:  0x6B37,
	5664:  0x76DC,
	5665:  0x6B39,
	5666:  0x98EE,
	5667:  0x6B47,
	5668:  0x6B43,
	5669:  0x6B49,
	5670:  0x6B50,
	5671:  0x6B59,
	5672:  0x6B54,
	5673:  0x6B5B,
	5674:  0x6B5F,
	5675:  0x6B61,
	5676:  0x6B78,
	5677:  0x6B79,
	5678:  0x6B7F,
	5679:  0x6B80,
	5680:  0x6B84,
	5681:  0x6B83,
	5682:  0x6B8D,
	5683:  0x6B98,
	5684:  0x6B95,
	5685:  0x6B9E,
	5686:  0x6BA4,
	5687:  0x6BAA,
	5688:  0x6BAB,
	5689:  0x6BAF,
	5690:  0x6BB2,
	5691:  0x6BB1,
	5692:  0x6BB3,
	5693:  0x6BB7,
	5694:  0x6BBC,
	5695:  0x6BC6,
	5696:  0x6BCB,
	5697:  0x6BD3,
	5698:  0x6BDF,
	5699:  0x6BEC,
	5700:  0x6BEB,
	5701:  0x6BF3,
	5702:  0x6BEF,
	5703:  0x9EBE,
	5704:  0x6C08,
	5705:  0x6C13,
	5706:  0x6C14,
	5707:  0x6C1B,
	5708:  0x6C24,
	5709:  0x6C23,
	5710:  0x6C5E,
	5711:  0x6C55,
	5712:  0x6C62,
	5713:  0x6C6A,
	5714:  0x6C82,
	5715:  0x6C8D,
	5716:  0x6C9A,
	5717:  0x6C81,
	5718:  0x6C9B,
	5719:  0x6C7E,
	5720:  0x6C68,
	5721:  0x6C73,
	5722:  0x6C92,
	5723:  0x6C90,
	5724:  0x6CC4,
	5725:  0x6CF1,
	5726:  0x6CD3,
	5727:  0x6CBD,
	5728:  0x6CD7,
	5729:  0x6CC5,
	5730:  0x6CDD,
	5731:  0x6CAE,
	5732:  0x6CB1,
	5733:  0x6CBE,
	5734:  0x6CBA,
	5735:  0x6CDB,
	5736:  0x6CEF,
	5737:  0x6CD9,
	5738:  0x6CEA,
	5739:  0x6D1F,
	5740:  0x884D,
	5741:  0x6D36,
	5742:  0x6D2B,
	5743:  0x6D3D,
	5744:  0x6D38,
	5745:  0x6D19,
	5746:  0x6D35,
	5747:  0x6D33,
	5748:  0x6D12,
	5749:  0x6D0C,
	5750:  0x6D63,
	5751:  0x6D93,
	5752:  0x6D64,
	5753:  0x6D5A,
	5754:  0x6D79,
	5755:  0x6D59,
	5756:  0x6D8E,
	5757:  0x6D95,
	5758:  0x6FE4,
	5759:  0x6D85,
	5760:  0x6DF9,
	5761:  0x6E15,
	5762:  0x6E0A,
	5763:  0x6DB5,
	5764:  0x6DC7,
	5765:  0x6DE6,
	5766:  0x6DB8,
	5767:  0x6DC6,
	5768:  0x6DEC,
	5769:  0x6DDE,
	5770:  0x6DCC,
	5771:  0x6DE8,
	5772:  0x6DD2,
	5773:  0x6DC5,
	5774:  0x6DFA,
	5775:  0x6DD9,
	5776:  0x6DE4,
	5777:  0x6DD5,
	5778:  0x6DEA,
	5779:  0x6DEE,
	5780:  0x6E2D,
	5781:  0x6E6E,
	5782:  0x6E2E,
	5783:  0x6E19,
	5784:  0x6E72,
	5785:  0x6E5F,
	5786:  0x6E3E,
	5787:  0x6E23,
	5788:  0x6E6B,
	5789:  0x6E2B,
	5790:  0x6E76,
	5791:  0x6E4D,
	5792:  0x6E1F,
	5793:  0x6E43,
	5794:  0x6E3A,
	5795:  0x6E4E,
	5796:  0x6E24,
	5797:  0x6EFF,
	5798:  0x6E1D,
	5799:  0x6E38,
	5800:  0x6E82,
	5801:  0x6EAA,
	5802:  0x6E98,
	5803:  0x6EC9,
	5804:  0x6EB7,
	5805:  0x6ED3,
	5806:  0x6EBD,
	5807:  0x6EAF,
	5808:  0x6EC4,
	5809:  0x6EB2,
	5810:  0x6ED4,
	5811:  0x6ED5,
	5812:  0x6E8F,
	5813:  0x6EA5,
	5814:  0x6EC2,
	5815:  0x6E9F,
	5816:  0x6F41,
	5817:  0x6F11,
	5818:  0x704C,
	5819:  0x6EEC,
	5820:  0x6EF8,
	5821:  0x6EFE,
	5822:  0x6F3F,
	5823:  0x6EF2,
	5824:  0x6F31,
	5825:  0x6EEF,
	5826:  0x6F32,
	5827:  0x6ECC,
	5828:  0x6F3E,
	5829:  0x6F13,
	5830:  0x6EF7,
	5831:  0x6F86,
	5832:  0x6F7A,
	5833:  0x6F78,
	5834:  0x6F81,
	5835:  0x6F80,
	5836:  0x6F6F,
	5837:  0x6F5B,
	5838:  0x6FF3,
	5839:  0x6F6D,
	5840:  0x6F82,
	5841:  0x6F7C,
	5842:  0x6F58,
	5843:  0x6F8E,
	5844:  0x6F91,
	5845:  0x6FC2,
	5846:  0x6F66,
	5847:  0x6FB3,
	5848:  0x6FA3,
	5849:  0x6FA1,
	5850:  0x6FA4,
	5851:  0x6FB9,
	5852:  0x6FC6,
	5853:  0x6FAA,
	5854:  0x6FDF,
	5855:  0x6FD5,
	5856:  0x6FEC,
	5857:  0x6FD4,
	5858:  0x6FD8,
	5859:  0x6FF1,
	5860:  0x6FEE,
	5861:  0x6FDB,
	5862:  0x7009,
	5863:  0x700B,
	5864:  0x6FFA,
	5865:  0x7011,
	5866:  0x7001,
	5867:  0x700F,
	5868:  0x6FFE,
	5869:  0x701B,
	5870:  0x701A,
	5871:  0x6F74,
	5872:  0x701D,
	5873:  0x7018,
	5874:  0x701F,
	5875:  0x7030,
	5876:  0x703E,
	5877:  0x7032,
	5878:  0x7051,
	5879:  0x7063,
	5880:  0x7099,
	5881:  0x7092,
	5882:  0x70AF,
	5883:  0x70F1,
	5884:  0x70AC,
	5885:  0x70B8,
	5886:  0x70B3,
	5887:  0x70AE,
	5888:  0x70DF,
	5889:  0x70CB,
	5890:  0x70DD,
	5891:  0x70D9,
	5892:  0x7109,
	5893:  0x70FD,
	5894:  0x711C,
	5895:  0x7119,
	5896:  0x7165,
	5897:  0x7155,
	5898:  0x7188,
	5899:  0x7166,
	5900:  0x7162,
	5901:  0x714C,
	5902:  0x7156,
	5903:  0x716C,
	5904:  0x718F,
	5905:  0x71FB,
	5906:  0x7184,
	5907:  0x7195,
	5908:  0x71A8,
	5909:  0x71AC,
	5910:  0x71D7,
	5911:  0x71B9,
	5912:  0x71BE,
	5913:  0x71D2,
	5914:  0x71C9,
	5915:  0x71D4,
	5916:  0x71CE,
	5917:  0x71E0,
	5918:  0x71EC,
	5919:  0x71E7,
	5920:  0x71F5,
	5921:  0x71FC,
	5922:  0x71F9,
	5923:  0x71FF,
	5924:  0x720D,
	5925:  0x7210,
	5926:  0x721B,
	5927:  0x7228,
	5928:  0x722D,
	5929:  0x722C,
	5930:  0x7230,
	5931:  0x7232,
	5932:  0x723B,
	5933:  0x723C,
	5934:  0x723F,
	5935:  0x7240,
	5936:  0x7246,
	5937:  0x724B,
	5938:  0x7258,
	5939:  0x7274,
	5940:  0x727E,
	5941:  0x7282,
	5942:  0x7281,
	5943:  0x7287,
	5944:  0x7292,
	5945:  0x7296,
	5946:  0x72A2,
	5947:  0x72A7,
	5948:  0x72B9,
	5949:  0x72B2,
	5950:  0x72C3,
	5951:  0x72C6,
	5952:  0x72C4,
	5953:  0x72CE,
	5954:  0x72D2,
	5955:  0x72E2,
	5956:  0x72E0,
	5957:  0x72E1,
	5958:  0x72F9,
	5959:  0x72F7,
	5960:  0x500F,
	5961:  0x7317,
	5962:  0x730A,
	5963:  0x731C,
	5964:  0x7316,
	5965:  0x731D,
	5966:  0x7334,
	5967:  0x732F,
	5968:  0x7329,
	5969:  0x7325,
	5970:  0x733E,
	5971:  0x734E,
	5972:  0x734F,
	5973:  0x9ED8,
	5974:  0x7357,
	5975:  0x736A,
	5976:  0x7368,
	5977:  0x7370,
	5978:  0x7378,
	5979:  0x7375,
	5980:  0x737B,
	5981:  0x737A,
	5982:  0x73C8,
	5983:  0x73B3,
	5984:  0x73CE,
	5985:  0x73BB,
	5986:  0x73C0,
	5987:  0x73E5,
	5988:  0x73EE,
	5989:  0x73DE,
	5990:  0x74A2,
	5991:  0x7405,
	5992:  0x746F,
	5993:  0x7425,
	5994:  0x73F8,
	5995:  0x7432,
	5996:  0x743A,
	5997:  0x7455,
	5998:  0x743F,
	5999:  0x745F,
	6000:  0x7459,
	6001:  0x7441,
	6002:  0x745C,
	6003:  0x7469,
	6004:  0x7470,
	6005:  0x7463,
	6006:  0x746A,
	6007:  0x7476,
	6008:  0x747E,
	6009:  0x748B,
	6010:  0x749E,
	6011:  0x74A7,
	6012:  0x74CA,
	6013:  0x74CF,
	6014:  0x74D4,
	6015:  0x73F1,
	6016:  0x74E0,
	6017:  0x74E3,
	6018:  0x74E7,
	6019:  0x74E9,
	6020:  0x74EE,
	6021:  0x74F2,
	6022:  0x74F0,
	6023:  0x74F1,
	6024:  0x74F8,
	6025:  0x74F7,
	6026:  0x7504,
	6027:  0x7503,
	6028:  0x7505,
	6029:  0x750C,
	6030:  0x750E,
	6031:  0x750D,
	6032:  0x7515,
	6033:  0x7513,
	6034:  0x751E,
	6035:  0x7526,
	6036:  0x752C,
	6037:  0x753C,
	6038:  0x7544,
	6039:  0x754D,
	6040:  0x754A,
	6041:  0x7549,
	6042:  0x755B,
	6043:  0x7546,
	6044:  0x755A,
	6045:  0x7569,
	6046:  0x7564,
	6047:  0x7567,
	6048:  0x756B,
	6049:  0x756D,
	6050:  0x7578,
	6051:  0x7576,
	6052:  0x7586,
	6053:  0x7587,
	6054:  0x7574,
	6055:  0x758A,
	6056:  0x7589,
	6057:  0x7582,
	6058:  0x7594,
	6059:  0x759A,
	6060:  0x759D,
	6061:  0x75A5,
	6062:  0x75A3,
	6063:  0x75C2,
	6064:  0x75B3,
	6065:  0x75C3,
	6066:  0x75B5,
	6067:  0x75BD,
	6068:  0x75B8,
	6069:  0x75BC,
	6070:  0x75B1,
	6071:  0x75CD,
	6072:  0x75CA,
	6073:  0x75D2,
	6074:  0x75D9,
	6075:  0x75E3,
	6076:  0x75DE,
	6077:  0x75FE,
	6078:  0x75FF,
	6079:  0x75FC,
	6080:  0x7601,
	6081:  0x75F0,
	6082:  0x75FA,
	6083:  0x75F2,
	6084:  0x75F3,
	6085:  0x760B,
	6086:  0x760D,
	6087:  0x7609,
	6088:  0x761F,
	6089:  0x7627,
	6090:  0x7620,
	6091:  0x7621,
	6092:  0x7622,
	6093:  0x7624,
	6094:  0x7634,
	6095:  0x7630,
	6096:  0x763B,
	6097:  0x7647,
	6098:  0x7648,
	6099:  0x7646,
	6100:  0x765C,
	6101:  0x7658,
	6102:  0x7661,
	6103:  0x7662,
	6104:  0x7668,
	6105:  0x7669,
	6106:  0x766A,
	6107:  0x7667,
	6108:  0x766C,
	6109:  0x7670,
	6110:  0x7672,
	6111:  0x7676,
	6112:  0x7678,
	6113:  0x767C,
	6114:  0x7680,
	6115:  0x7683,
	6116:  0x7688,
	6117:  0x768B,
	6118:  0x768E,
	6119:  0x7696,
	6120:  0x7693,
	6121:  0x7699,
	6122:  0x769A,
	6123:  0x76B0,
	6124:  0x76B4,
	6125:  0x76B8,
	6126:  0x76B9,
	6127:  0x76BA,
	6128:  0x76C2,
	6129:  0x76CD,
	6130:  0x76D6,
	6131:  0x76D2,
	6132:  0x76DE,
	6133:  0x76E1,
	6134:  0x76E5,
	6135:  0x76E7,
	6136:  0x76EA,
	6137:  0x862F,
	6138:  0x76FB,
	6139:  0x7708,
	6140:  0x7707,
	6141:  0x7704,
	6142:  0x7729,
	6143:  0x7724,
	6144:  0x771E,
	6145:  0x7725,
	6146:  0x7726,
	6147:  0x771B,
	6148:  0x7737,
	6149:  0x7738,
	6150:  0x7747,
	6151:  0x775A,
	6152:  0x7768,
	6153:  0x776B,
	6154:  0x775B,
	6155:  0x7765,
	6156:  0x777F,
	6157:  0x777E,
	6158:  0x7779,
	6159:  0x778E,
	6160:  0x778B,
	6161:  0x7791,
	6162:  0x77A0,
	6163:  0x779E,
	6164:  0x77B0,
	6165:  0x77B6,
	6166:  0x77B9,
	6167:  0x77BF,
	6168:  0x77BC,
	6169:  0x77BD,
	6170:  0x77BB,
	6171:  0x77C7,
	6172:  0x77CD,
	6173:  0x77D7,
	6174:  0x77DA,
	6175:  0x77DC,
	6176:  0x77E3,
	6177:  0x77EE,
	6178:  0x77FC,
	6179:  0x780C,
	6180:  0x7812,
	6181:  0x7926,
	6182:  0x7820,
	6183:  0x792A,
	6184:  0x7845,
	6185:  0x788E,
	6186:  0x7874,
	6187:  0x7886,
	6188:  0x787C,
	6189:  0x789A,
	6190:  0x788C,
	6191:  0x78A3,
	6192:  0x78B5,
	6193:  0x78AA,
	6194:  0x78AF,
	6195:  0x78D1,
	6196:  0x78C6,
	6197:  0x78CB,
	6198:  0x78D4,
	6199:  0x78BE,
	6200:  0x78BC,
	6201:  0x78C5,
	6202:  0x78CA,
	6203:  0x78EC,
	6204:  0x78E7,
	6205:  0x78DA,
	6206:  0x78FD,
	6207:  0x78F4,
	6208:  0x7907,
	6209:  0x7912,
	6210:  0x7911,
	6211:  0x7919,
	6212:  0x792C,
	6213:  0x792B,
	6214:  0x7940,
	6215:  0x7960,
	6216:  0x7957,
	6217:  0x795F,
	6218:  0x795A,
	6219:  0x7955,
	6220:  0x7953,
	6221:  0x797A,
	6222:  0x797F,
	6223:  0x798A,
	6224:  0x799D,
	6225:  0x79A7,
	6226:  0x9F4B,
	6227:  0x79AA,
	6228:  0x79AE,
	6229:  0x79B3,
	6230:  0x79B9,
	6231:  0x79BA,
	6232:  0x79C9,
	6233:  0x79D5,
	6234:  0x79E7,
	6235:  0x79EC,
	6236:  0x79E1,
	6237:  0x79E3,
	6238:  0x7A08,
	6239:  0x7A0D,
	6240:  0x7A18,
	6241:  0x7A19,
	6242:  0x7A20,
	6243:  0x7A1F,
	6244:  0x7980,
	6245:  0x7A31,
	6246:  0x7A3B,
	6247:  0x7A3E,
	6248:  0x7A37,
	6249:  0x7A43,
	6250:  0x7A57,
	6251:  0x7A49,
	6252:  0x7A61,
	6253:  0x7A62,
	6254:  0x7A69,
	6255:  0x9F9D,
	6256:  0x7A70,
	6257:  0x7A79,
	6258:  0x7A7D,
	6259:  0x7A88,
	6260:  0x7A97,
	6261:  0x7A95,
	6262:  0x7A98,
	6263:  0x7A96,
	6264:  0x7AA9,
	6265:  0x7AC8,
	6266:  0x7AB0,
	6267:  0x7AB6,
	6268:  0x7AC5,
	6269:  0x7AC4,
	6270:  0x7ABF,
	6271:  0x9083,
	6272:  0x7AC7,
	6273:  0x7ACA,
	6274:  0x7ACD,
	6275:  0x7ACF,
	6276:  0x7AD5,
	6277:  0x7AD3,
	6278:  0x7AD9,
	6279:  0x7ADA,
	6280:  0x7ADD,
	6281:  0x7AE1,
	6282:  0x7AE2,
	6283:  0x7AE6,
	6284:  0x7AED,
	6285:  0x7AF0,
	6286:  0x7B02,
	6287:  0x7B0F,
	6288:  0x7B0A,
	6289:  0x7B06,
	6290:  0x7B33,
	6291:  0x7B18,
	6292:  0x7B19,
	6293:  0x7B1E,
	6294:  0x7B35,
	6295:  0x7B28,
	6296:  0x7B36,
	6297:  0x7B50,
	6298:  0x7B7A,
	6299:  0x7B04,
	6300:  0x7B4D,
	6301:  0x7B0B,
	6302:  0x7B4C,
	6303:  0x7B45,
	6304:  0x7B75,
	6305:  0x7B65,
	6306:  0x7B74,
	6307:  0x7B67,
	6308:  0x7B70,
	6309:  0x7B71,
	6310:  0x7B6C,
	6311:  0x7B6E,
	6312:  0x7B9D,
	6313:  0x7B98,
	6314:  0x7B9F,
	6315:  0x7B8D,
	6316:  0x7B9C,
	6317:  0x7B9A,
	6318:  0x7B8B,
	6319:  0x7B92,
	6320:  0x7B8F,
	6321:  0x7B5D,
	6322:  0x7B99,
	6323:  0x7BCB,
	6324:  0x7BC1,
	6325:  0x7BCC,
	6326:  0x7BCF,
	6327:  0x7BB4,
	6328:  0x7BC6,
	6329:  0x7BDD,
	6330:  0x7BE9,
	6331:  0x7C11,
	6332:  0x7C14,
	6333:  0x7BE6,
	6334:  0x7BE5,
	6335:  0x7C60,
	6336:  0x7C00,
	6337:  0x7C07,
	6338:  0x7C13,
	6339:  0x7BF3,
	6340:  0x7BF7,
	6341:  0x7C17,
	6342:  0x7C0D,
	6343:  0x7BF6,
	6344:  0x7C23,
	6345:  0x7C27,
	6346:  0x7C2A,
	6347:  0x7C1F,
	6348:  0x7C37,
	6349:  0x7C2B,
	6350:  0x7C3D,
	6351:  0x7C4C,
	6352:  0x7C43,
	6353:  0x7C54,
	6354:  0x7C4F,
	6355:  0x7C40,
	6356:  0x7C50,
	6357:  0x7C58,
	6358:  0x7C5F,
	6359:  0x7C64,
	6360:  0x7C56,
	6361:  0x7C65,
	6362:  0x7C6C,
	6363:  0x7C75,
	6364:  0x7C83,
	6365:  0x7C90,
	6366:  0x7CA4,
	6367:  0x7CAD,
	6368:  0x7CA2,
	6369:  0x7CAB,
	6370:  0x7CA1,
	6371:  0x7CA8,
	6372:  0x7CB3,
	6373:  0x7CB2,
	6374:  0x7CB1,
	6375:  0x7CAE,
	6376:  0x7CB9,
	6377:  0x7CBD,
	6378:  0x7CC0,
	6379:  0x7CC5,
	6380:  0x7CC2,
	6381:  0x7CD8,
	6382:  0x7CD2,
	6383:  0x7CDC,
	6384:  0x7CE2,
	6385:  0x9B3B,
	6386:  0x7CEF,
	6387:  0x7CF2,
	6388:  0x7CF4,
	6389:  0x7CF6,
	6390:  0x7CFA,
	6391:  0x7D06,
	6392:  0x7D02,
	6393:  0x7D1C,
	6394:  0x7D15,
	6395:  0x7D0A,
	6396:  0x7D45,
	6397:  0x7D4B,
	6398:  0x7D2E,
	6399:  0x7D32,
	6400:  0x7D3F,
	6401:  0x7D35,
	6402:  0x7D46,
	6403:  0x7D73,
	6404:  0x7D56,
	6405:  0x7D4E,
	6406:  0x7D72,
	6407:  0x7D68,
	6408:  0x7D6E,
	6409:  0x7D4F,
	6410:  0x7D63,
	6411:  0x7D93,
	6412:  0x7D89,
	6413:  0x7D5B,
	6414:  0x7D8F,
	6415:  0x7D7D,
	6416:  0x7D9B,
	6417:  0x7DBA,
	6418:  0x7DAE,
	6419:  0x7DA3,
	6420:  0x7DB5,
	6421:  0x7DC7,
	6422:  0x7DBD,
	6423:  0x7DAB,
	6424:  0x7E3D,
	6425:  0x7DA2,
	6426:  0x7DAF,
	6427:  0x7DDC,
	6428:  0x7DB8,
	6429:  0x7D9F,
	6430:  0x7DB0,
	6431:  0x7DD8,
	6432:  0x7DDD,
	6433:  0x7DE4,
	6434:  0x7DDE,
	6435:  0x7DFB,
	6436:  0x7DF2,
	6437:  0x7DE1,
	6438:  0x7E05,
	6439:  0x7E0A,
	6440:  0x7E23,
	6441:  0x7E21,
	6442:  0x7E12,
	6443:  0x7E31,
	6444:  0x7E1F,
	6445:  0x7E09,
	6446:  0x7E0B,
	6447:  0x7E22,
	6448:  0x7E46,
	6449:  0x7E66,
	6450:  0x7E3B,
	6451:  0x7E35,
	6452:  0x7E39,
	6453:  0x7E43,
	6454:  0x7E37,
	6455:  0x7E32,
	6456:  0x7E3A,
	6457:  0x7E67,
	6458:  0x7E5D,
	6459:  0x7E56,
	6460:  0x7E5E,
	6461:  0x7E59,
	6462:  0x7E5A,
	6463:  0x7E79,
	6464:  0x7E6A,
	6465:  0x7E69,
	6466:  0x7E7C,
	6467:  0x7E7B,
	6468:  0x7E83,
	6469:  0x7DD5,
	6470:  0x7E7D,
	6471:  0x8FAE,
	6472:  0x7E7F,
	6473:  0x7E88,
	6474:  0x7E89,
	6475:  0x7E8C,
	6476:  0x7E92,
	6477:  0x7E90,
	6478:  0x7E93,
	6479:  0x7E94,
	6480:  0x7E96,
	6481:  0x7E8E,
	6482:  0x7E9B,
	6483:  0x7E9C,
	6484:  0x7F38,
	6485:  0x7F3A,
	6486:  0x7F45,
	6487:  0x7F4C,
	6488:  0x7F4D,
	6489:  0x7F4E,
	6490:  0x7F50,
	6491:  0x7F51,
	6492:  0x7F55,
	6493:  0x7F54,
	6494:  0x7F58,
	6495:  0x7F5F,
	6496:  0x7F60,
	6497:  0x7F68,
	6498:  0x7F69,
	6499:  0x7F67,
	6500:  0x7F78,
	6501:  0x7F82,
	6502:  0x7F86,
	6503:  0x7F83,
	6504:  0x7F88,
	6505:  0x7F87,
	6506:  0x7F8C,
	6507:  0x7F94,
	6508:  0x7F9E,
	6509:  0x7F9D,
	6510:  0x7F9A,
	6511:  0x7FA3,
	6512:  0x7FAF,
	6513:  0x7FB2,
	6514:  0x7FB9,
	6515:  0x7FAE,
	6516:  0x7FB6,
	6517:  0x7FB8,
	6518:  0x8B71,
	6519:  0x7FC5,
	6520:  0x7FC6,
	6521:  0x7FCA,
	6522:  0x7FD5,
	6523:  0x7FD4,
	6524:  0x7FE1,
	6525:  0x7FE6,
	6526:  0x7FE9,
	6527:  0x7FF3,
	6528:  0x7FF9,
	6529:  0x98DC,
	6530:  0x8006,
	6531:  0x8004,
	6532:  0x800B,
	6533:  0x8012,
	6534:  0x8018,
	6535:  0x8019,
	6536:  0x801C,
	6537:  0x8021,
	6538:  0x8028,
	6539:  0x803F,
	6540:  0x803B,
	6541:  0x804A,
	6542:  0x8046,
	6543:  0x8052,
	6544:  0x8058,
	6545:  0x805A,
	6546:  0x805F,
	6547:  0x8062,
	6548:  0x8068,
	6549:  0x8073,
	6550:  0x8072,
	6551:  0x8070,
	6552:  0x8076,
	6553:  0x8079,
	6554:  0x807D,
	6555:  0x807F,
	6556:  0x8084,
	6557:  0x8086,
	6558:  0x8085,
	6559:  0x809B,
	6560:  0x8093,
	6561:  0x809A,
	6562:  0x80AD,
	6563:  0x5190,
	6564:  0x80AC,
	6565:  0x80DB,
	6566:  0x80E5,
	6567:  0x80D9,
	6568:  0x80DD,
	6569:  0x80C4,
	6570:  0x80DA,
	6571:  0x80D6,
	6572:  0x8109,
	6573:  0x80EF,
	6574:  0x80F1,
	6575:  0x811B,
	6576:  0x8129,
	6577:  0x8123,
	6578:  0x812F,
	6579:  0x814B,
	6580:  0x968B,
	6581:  0x8146,
	6582:  0x813E,
	6583:  0x8153,
	6584:  0x8151,
	6585:  0x80FC,
	6586:  0x8171,
	6587:  0x816E,
	6588:  0x8165,
	6589:  0x8166,
	6590:  0x8174,
	6591:  0x8183,
	6592:  0x8188,
	6593:  0x818A,
	6594:  0x8180,
	6595:  0x8182,
	6596:  0x81A0,
	6597:  0x8195,
	6598:  0x81A4,
	6599:  0x81A3,
	6600:  0x815F,
	6601:  0x8193,
	6602:  0x81A9,
	6603:  0x81B0,
	6604:  0x81B5,
	6605:  0x81BE,
	6606:  0x81B8,
	6607:  0x81BD,
	6608:  0x81C0,
	6609:  0x81C2,
	6610:  0x81BA,
	6611:  0x81C9,
	6612:  0x81CD,
	6613:  0x81D1,
	6614:  0x81D9,
	6615:  0x81D8,
	6616:  0x81C8,
	6617:  0x81DA,
	6618:  0x81DF,
	6619:  0x81E0,
	6620:  0x81E7,
	6621:  0x81FA,
	6622:  0x81FB,
	6623:  0x81FE,
	6624:  0x8201,
	6625:  0x8202,
	6626:  0x8205,
	6627:  0x8207,
	6628:  0x820A,
	6629:  0x820D,
	6630:  0x8210,
	6631:  0x8216,
	6632:  0x8229,
	6633:  0x822B,
	6634:  0x8238,
	6635:  0x8233,
	6636:  0x8240,
	6637:  0x8259,
	6638:  0x8258,
	6639:  0x825D,
	6640:  0x825A,
	6641:  0x825F,
	6642:  0x8264,
	6643:  0x8262,
	6644:  0x8268,
	6645:  0x826A,
	6646:  0x826B,
	6647:  0x822E,
	6648:  0x8271,
	6649:  0x8277,
	6650:  0x8278,
	6651:  0x827E,
	6652:  0x828D,
	6653:  0x8292,
	6654:  0x82AB,
	6655:  0x829F,
	6656:  0x82BB,
	6657:  0x82AC,
	6658:  0x82E1,
	6659:  0x82E3,
	6660:  0x82DF,
	6661:  0x82D2,
	6662:  0x82F4,
	6663:  0x82F3,
	6664:  0x82FA,
	6665:  0x8393,
	6666:  0x8303,
	6667:  0x82FB,
	6668:  0x82F9,
	6669:  0x82DE,
	6670:  0x8306,
	6671:  0x82DC,
	6672:  0x8309,
	6673:  0x82D9,
	6674:  0x8335,
	6675:  0x8334,
	6676:  0x8316,
	6677:  0x8332,
	6678:  0x8331,
	6679:  0x8340,
	6680:  0x8339,
	6681:  0x8350,
	6682:  0x8345,
	6683:  0x832F,
	6684:  0x832B,
	6685:  0x8317,
	6686:  0x8318,
	6687:  0x8385,
	6688:  0x839A,
	6689:  0x83AA,
	6690:  0x839F,
	6691:  0x83A2,
	6692:  0x8396,
	6693:  0x8323,
	6694:  0x838E,
	6695:  0x8387,
	6696:  0x838A,
	6697:  0x837C,
	6698:  0x83B5,
	6699:  0x8373,
	6700:  0x8375,
	6701:  0x83A0,
	6702:  0x8389,
	6703:  0x83A8,
	6704:  0x83F4,
	6705:  0x8413,
	6706:  0x83EB,
	6707:  0x83CE,
	6708:  0x83FD,
	6709:  0x8403,
	6710:  0x83D8,
	6711:  0x840B,
	6712:  0x83C1,
	6713:  0x83F7,
	6714:  0x8407,
	6715:  0x83E0,
	6716:  0x83F2,
	6717:  0x840D,
	6718:  0x8422,
	6719:  0x8420,
	6720:  0x83BD,
	6721:  0x8438,
	6722:  0x8506,
	6723:  0x83FB,
	6724:  0x846D,
	6725:  0x842A,
	6726:  0x843C,
	6727:  0x855A,
	6728:  0x8484,
	6729:  0x8477,
	6730:  0x846B,
	6731:  0x84AD,
	6732:  0x846E,
	6733:  0x8482,
	6734:  0x8469,
	6735:  0x8446,
	6736:  0x842C,
	6737:  0x846F,
	6738:  0x8479,
	6739:  0x8435,
	6740:  0x84CA,
	6741:  0x8462,
	6742:  0x84B9,
	6743:  0x84BF,
	6744:  0x849F,
	6745:  0x84D9,
	6746:  0x84CD,
	6747:  0x84BB,
	6748:  0x84DA,
	6749:  0x84D0,
	6750:  0x84C1,
	6751:  0x84C6,
	6752:  0x84D6,
	6753:  0x84A1,
	6754:  0x8521,
	6755:  0x84FF,
	6756:  0x84F4,
	6757:  0x8517,
	6758:  0x8518,
	6759:  0x852C,
	6760:  0x851F,
	6761:  0x8515,
	6762:  0x8514,
	6763:  0x84FC,
	6764:  0x8540,
	6765:  0x8563,
	6766:  0x8558,
	6767:  0x8548,
	6768:  0x8541,
	6769:  0x8602,
	6770:  0x854B,
	6771:  0x8555,
	6772:  0x8580,
	6773:  0x85A4,
	6774:  0x8588,
	6775:  0x8591,
	6776:  0x858A,
	6777:  0x85A8,
	6778:  0x856D,
	6779:  0x8594,
	6780:  0x859B,
	6781:  0x85EA,
	6782:  0x8587,
	6783:  0x859C,
	6784:  0x8577,
	6785:  0x857E,
	6786:  0x8590,
	6787:  0x85C9,
	6788:  0x85BA,
	6789:  0x85CF,
	6790:  0x85B9,
	6791:  0x85D0,
	6792:  0x85D5,
	6793:  0x85DD,
	6794:  0x85E5,
	6795:  0x85DC,
	6796:  0x85F9,
	6797:  0x860A,
	6798:  0x8613,
	6799:  0x860B,
	6800:  0x85FE,
	6801:  0x85FA,
	6802:  0x8606,
	6803:  0x8622,
	6804:  0x861A,
	6805:  0x8630,
	6806:  0x863F,
	6807:  0x864D,
	6808:  0x4E55,
	6809:  0x8654,
	6810:  0x865F,
	6811:  0x8667,
	6812:  0x8671,
	6813:  0x8693,
	6814:  0x86A3,
	6815:  0x86A9,
	6816:  0x86AA,
	6817:  0x868B,
	6818:  0x868C,
	6819:  0x86B6,
	6820:  0x86AF,
	6821:  0x86C4,
	6822:  0x86C6,
	6823:  0x86B0,
	6824:  0x86C9,
	6825:  0x8823,
	6826:  0x86AB,
	6827:  0x86D4,
	6828:  0x86DE,
	6829:  0x86E9,
	6830:  0x86EC,
	6831:  0x86DF,
	6832:  0x86DB,
	6833:  0x86EF,
	6834:  0x8712,
	6835:  0x8706,
	6836:  0x8708,
	6837:  0x8700,
	6838:  0x8703,
	6839:  0x86FB,
	6840:  0x8711,
	6841:  0x8709,
	6842:  0x870D,
	6843:  0x86F9,
	6844:  0x870A,
	6845:  0x8734,
	6846:  0x873F,
	6847:  0x8737,
	6848:  0x873B,
	6849:  0x8725,
	6850:  0x8729,
	6851:  0x871A,
	6852:  0x8760,
	6853:  0x875F,
	6854:  0x8778,
	6855:  0x874C,
	6856:  0x874E,
	6857:  0x8774,
	6858:  0x8757,
	6859:  0x8768,
	6860:  0x876E,
	6861:  0x8759,
	6862:  0x8753,
	6863:  0x8763,
	6864:  0x876A,
	6865:  0x8805,
	6866:  0x87A2,
	6867:  0x879F,
	6868:  0x8782,
	6869:  0x87AF,
	6870:  0x87CB,
	6871:  0x87BD,
	6872:  0x87C0,
	6873:  0x87D0,
	6874:  0x96D6,
	6875:  0x87AB,
	6876:  0x87C4,
	6877:  0x87B3,
	6878:  0x87C7,
	6879:  0x87C6,
	6880:  0x87BB,
	6881:  0x87EF,
	6882:  0x87F2,
	6883:  0x87E0,
	6884:  0x880F,
	6885:  0x880D,
	6886:  0x87FE,
	6887:  0x87F6,
	6888:  0x87F7,
	6889:  0x880E,
	6890:  0x87D2,
	6891:  0x8811,
	6892:  0x8816,
	6893:  0x8815,
	6894:  0x8822,
	6895:  0x8821,
	6896:  0x8831,
	6897:  0x8836,
	6898:  0x8839,
	6899:  0x8827,
	6900:  0x883B,
	6901:  0x8844,
	6902:  0x8842,
	6903:  0x8852,
	6904:  0x8859,
	6905:  0x885E,
	6906:  0x8862,
	6907:  0x886B,
	6908:  0x8881,
	6909:  0x887E,
	6910:  0x889E,
	6911:  0x8875,
	6912:  0x887D,
	6913:  0x88B5,
	6914:  0x8872,
	6915:  0x8882,
	6916:  0x8897,
	6917:  0x8892,
	6918:  0x88AE,
	6919:  0x8899,
	6920:  0x88A2,
	6921:  0x888D,
	6922:  0x88A4,
	6923:  0x88B0,
	6924:  0x88BF,
	6925:  0x88B1,
	6926:  0x88C3,
	6927:  0x88C4,
	6928:  0x88D4,
	6929:  0x88D8,
	6930:  0x88D9,
	6931:  0x88DD,
	6932:  0x88F9,
	6933:  0x8902,
	6934:  0x88FC,
	6935:  0x88F4,
	6936:  0x88E8,
	6937:  0x88F2,
	6938:  0x8904,
	6939:  0x890C,
	6940:  0x890A,
	6941:  0x8913,
	6942:  0x8943,
	6943:  0x891E,
	6944:  0x8925,
	6945:  0x892A,
	6946:  0x892B,
	6947:  0x8941,
	6948:  0x8944,
	6949:  0x893B,
	6950:  0x8936,
	6951:  0x8938,
	6952:  0x894C,
	6953:  0x891D,
	6954:  0x8960,
	6955:  0x895E,
	6956:  0x8966,
	6957:  0x8964,
	6958:  0x896D,
	6959:  0x896A,
	6960:  0x896F,
	6961:  0x8974,
	6962:  0x8977,
	6963:  0x897E,
	6964:  0x8983,
	6965:  0x8988,
	6966:  0x898A,
	6967:  0x8993,
	6968:  0x8998,
	6969:  0x89A1,
	6970:  0x89A9,
	6971:  0x89A6,
	6972:  0x89AC,
	6973:  0x89AF,
	6974:  0x89B2,
	6975:  0x89BA,
	6976:  0x89BD,
	6977:  0x89BF,
	6978:  0x89C0,
	6979:  0x89DA,
	6980:  0x89DC,
	6981:  0x89DD,
	6982:  0x89E7,
	6983:  0x89F4,
	6984:  0x89F8,
	6985:  0x8A03,
	6986:  0x8A16,
	6987:  0x8A10,
	6988:  0x8A0C,
	6989:  0x8A1B,
	6990:  0x8A1D,
	6991:  0x8A25,
	6992:  0x8A36,
	6993:  0x8A41,
	6994:  0x8A5B,
	6995:  0x8A52,
	6996:  0x8A46,
	6997:  0x8A48,
	6998:  0x8A7C,
	6999:  0x8A6D,
	7000:  0x8A6C,
	7001:  0x8A62,
	7002:  0x8A85,
	7003:  0x8A82,
	7004:  0x8A84,
	7005:  0x8AA8,
	7006:  0x8AA1,
	7007:  0x8A91,
	7008:  0x8AA5,
	7009:  0x8AA6,
	7010:  0x8A9A,
	7011:  0x8AA3,
	7012:  0x8AC4,
	7013:  0x8ACD,
	7014:  0x8AC2,
	7015:  0x8ADA,
	7016:  0x8AEB,
	7017:  0x8AF3,
	7018:  0x8AE7,
	7019:  0x8AE4,
	7020:  0x8AF1,
	7021:  0x8B14,
	7022:  0x8AE0,
	7023:  0x8AE2,
	7024:  0x8AF7,
	7025:  0x8ADE,
	7026:  0x8ADB,
	7027:  0x8B0C,
	7028:  0x8B07,
	7029:  0x8B1A,
	7030:  0x8AE1,
	7031:  0x8B16,
	7032:  0x8B10,
	7033:  0x8B17,
	7034:  0x8B20,
	7035:  0x8B33,
	7036:  0x97AB,
	7037:  0x8B26,
	7038:  0x8B2B,
	7039:  0x8B3E,
	7040:  0x8B28,
	7041:  0x8B41,
	7042:  0x8B4C,
	7043:  0x8B4F,
	7044:  0x8B4E,
	7045:  0x8B49,
	7046:  0x8B56,
	7047:  0x8B5B,
	7048:  0x8B5A,
	7049:  0x8B6B,
	7050:  0x8B5F,
	7051:  0x8B6C,
	7052:  0x8B6F,
	7053:  0x8B74,
	7054:  0x8B7D,
	7055:  0x8B80,
	7056:  0x8B8C,
	7057:  0x8B8E,
	7058:  0x8B92,
	7059:  0x8B93,
	7060:  0x8B96,
	7061:  0x8B99,
	7062:  0x8B9A,
	7063:  0x8C3A,
	7064:  0x8C41,
	7065:  0x8C3F,
	7066:  0x8C48,
	7067:  0x8C4C,
	7068:  0x8C4E,
	7069:  0x8C50,
	7070:  0x8C55,
	7071:  0x8C62,
	7072:  0x8C6C,
	7073:  0x8C78,
	7074:  0x8C7A,
	7075:  0x8C82,
	7076:  0x8C89,
	7077:  0x8C85,
	7078:  0x8C8A,
	7079:  0x8C8D,
	7080:  0x8C8E,
	7081:  0x8C94,
	7082:  0x8C7C,
	7083:  0x8C98,
	7084:  0x621D,
	7085:  0x8CAD,
	7086:  0x8CAA,
	7087:  0x8CBD,
	7088:  0x8CB2,
	7089:  0x8CB3,
	7090:  0x8CAE,
	7091:  0x8CB6,
	7092:  0x8CC8,
	7093:  0x8CC1,
	7094:  0x8CE4,
	7095:  0x8CE3,
	7096:  0x8CDA,
	7097:  0x8CFD,
	7098:  0x8CFA,
	7099:  0x8CFB,
	7100:  0x8D04,
	7101:  0x8D05,
	7102:  0x8D0A,
	7103:  0x8D07,
	7104:  0x8D0F,
	7105:  0x8D0D,
	7106:  0x8D10,
	7107:  0x9F4E,
	7108:  0x8D13,
	7109:  0x8CCD,
	7110:  0x8D14,
	7111:  0x8D16,
	7112:  0x8D67,
	7113:  0x8D6D,
	7114:  0x8D71,
	7115:  0x8D73,
	7116:  0x8D81,
	7117:  0x8D99,
	7118:  0x8DC2,
	7119:  0x8DBE,
	7120:  0x8DBA,
	7121:  0x8DCF,
	7122:  0x8DDA,
	7123:  0x8DD6,
	7124:  0x8DCC,
	7125:  0x8DDB,
	7126:  0x8DCB,
	7127:  0x8DEA,
	7128:  0x8DEB,
	7129:  0x8DDF,
	7130:  0x8DE3,
	7131:  0x8DFC,
	7132:  0x8E08,
	7133:  0x8E09,
	7134:  0x8DFF,
	7135:  0x8E1D,
	7136:  0x8E1E,
	7137:  0x8E10,
	7138:  0x8E1F,
	7139:  0x8E42,
	7140:  0x8E35,
	7141:  0x8E30,
	7142:  0x8E34,
	7143:  0x8E4A,
	7144:  0x8E47,
	7145:  0x8E49,
	7146:  0x8E4C,
	7147:  0x8E50,
	7148:  0x8E48,
	7149:  0x8E59,
	7150:  0x8E64,
	7151:  0x8E60,
	7152:  0x8E2A,
	7153:  0x8E63,
	7154:  0x8E55,
	7155:  0x8E76,
	7156:  0x8E72,
	7157:  0x8E7C,
	7158:  0x8E81,
	7159:  0x8E87,
	7160:  0x8E85,
	7161:  0x8E84,
	7162:  0x8E8B,
	7163:  0x8E8A,
	7164:  0x8E93,
	7165:  0x8E91,
	7166:  0x8E94,
	7167:  0x8E99,
	7168:  0x8EAA,
	7169:  0x8EA1,
	7170:  0x8EAC,
	7171:  0x8EB0,
	7172:  0x8EC6,
	7173:  0x8EB1,
	7174:  0x8EBE,
	7175:  0x8EC5,
	7176:  0x8EC8,
	7177:  0x8ECB,
	7178:  0x8EDB,
	7179:  0x8EE3,
	7180:  0x8EFC,
	7181:  0x8EFB,
	7182:  0x8EEB,
	7183:  0x8EFE,
	7184:  0x8F0A,
	7185:  0x8F05,
	7186:  0x8F15,
	7187:  0x8F12,
	7188:  0x8F19,
	7189:  0x8F13,
	7190:  0x8F1C,
	7191:  0x8F1F,
	7192:  0x8F1B,
	7193:  0x8F0C,
	7194:  0x8F26,
	7195:  0x8F33,
	7196:  0x8F3B,
	7197:  0x8F39,
	7198:  0x8F45,
	7199:  0x8F42,
	7200:  0x8F3E,
	7201:  0x8F4C,
	7202:  0x8F49,
	7203:  0x8F46,
	7204:  0x8F4E,
	7205:  0x8F57,
	7206:  0x8F5C,
	7207:  0x8F62,
	7208:  0x8F63,
	7209:  0x8F64,
	7210:  0x8F9C,
	7211:  0x8F9F,
	7212:  0x8FA3,
	7213:  0x8FAD,
	7214:  0x8FAF,
	7215:  0x8FB7,
	7216:  0x8FDA,
	7217:  0x8FE5,
	7218:  0x8FE2,
	7219:  0x8FEA,
	7220:  0x8FEF,
	7221:  0x9087,
	7222:  0x8FF4,
	7223:  0x9005,
	7224:  0x8FF9,
	7225:  0x8FFA,
	7226:  0x9011,
	7227:  0x9015,
	7228:  0x9021,
	7229:  0x900D,
	7230:  0x901E,
	7231:  0x9016,
	7232:  0x900B,
	7233:  0x9027,
	7234:  0x9036,
	7235:  0x9035,
	7236:  0x9039,
	7237:  0x8FF8,
	7238:  0x904F,
	7239:  0x9050,
	7240:  0x9051,
	7241:  0x9052,
	7242:  0x900E,
	7243:  0x9049,
	7244:  0x903E,
	7245:  0x9056,
	7246:  0x9058,
	7247:  0x905E,
	7248:  0x9068,
	7249:  0x906F,
	7250:  0x9076,
	7251:  0x96A8,
	7252:  0x9072,
	7253:  0x9082,
	7254:  0x907D,
	7255:  0x9081,
	7256:  0x9080,
	7257:  0x908A,
	7258:  0x9089,
	7259:  0x908F,
	7260:  0x90A8,
	7261:  0x90AF,
	7262:  0x90B1,
	7263:  0x90B5,
	7264:  0x90E2,
	7265:  0x90E4,
	7266:  0x6248,
	7267:  0x90DB,
	7268:  0x9102,
	7269:  0x9112,
	7270:  0x9119,
	7271:  0x9132,
	7272:  0x9130,
	7273:  0x914A,
	7274:  0x9156,
	7275:  0x9158,
	7276:  0x9163,
	7277:  0x9165,
	7278:  0x9169,
	7279:  0x9173,
	7280:  0x9172,
	7281:  0x918B,
	7282:  0x9189,
	7283:  0x9182,
	7284:  0x91A2,
	7285:  0x91AB,
	7286:  0x91AF,
	7287:  0x91AA,
	7288:  0x91B5,
	7289:  0x91B4,
	7290:  0x91BA,
	7291:  0x91C0,
	7292:  0x91C1,
	7293:  0x91C9,
	7294:  0x91CB,
	7295:  0x91D0,
	7296:  0x91D6,
	7297:  0x91DF,
	7298:  0x91E1,
	7299:  0x91DB,
	7300:  0x91FC,
	7301:  0x91F5,
	7302:  0x91F6,
	7303:  0x921E,
	7304:  0x91FF,
	7305:  0x9214,
	7306:  0x922C,
	7307:  0x9215,
	7308:  0x9211,
	7309:  0x925E,
	7310:  0x9257,
	7311:  0x9245,
	7312:  0x9249,
	7313:  0x9264,
	7314:  0x9248,
	7315:  0x9295,
	7316:  0x923F,
	7317:  0x924B,
	7318:  0x9250,
	7319:  0x929C,
	7320:  0x9296,
	7321:  0x9293,
	7322:  0x929B,
	7323:  0x925A,
	7324:  0x92CF,
	7325:  0x92B9,
	7326:  0x92B7,
	7327:  0x92E9,
	7328:  0x930F,
	7329:  0x92FA,
	7330:  0x9344,
	7331:  0x932E,
	7332:  0x9319,
	7333:  0x9322,
	7334:  0x931A,
	7335:  0x9323,
	7336:  0x933A,
	7337:  0x9335,
	7338:  0x933B,
	7339:  0x935C,
	7340:  0x9360,
	7341:  0x937C,
	7342:  0x936E,
	7343:  0x9356,
	7344:  0x93B0,
	7345:  0x93AC,
	7346:  0x93AD,
	7347:  0x9394,
	7348:  0x93B9,
	7349:  0x93D6,
	7350:  0x93D7,
	7351:  0x93E8,
	7352:  0x93E5,
	7353:  0x93D8,
	7354:  0x93C3,
	7355:  0x93DD,
	7356:  0x93D0,
	7357:  0x93C8,
	7358:  0x93E4,
	7359:  0x941A,
	7360:  0x9414,
	7361:  0x9413,
	7362:  0x9403,
	7363:  0x9407,
	7364:  0x9410,
	7365:  0x9436,
	7366:  0x942B,
	7367:  0x9435,
	7368:  0x9421,
	7369:  0x943A,
	7370:  0x9441,
	7371:  0x9452,
	7372:  0x9444,
	7373:  0x945B,
	7374:  0x9460,
	7375:  0x9462,
	7376:  0x945E,
	7377:  0x946A,
	7378:  0x9229,
	7379:  0x9470,
	7380:  0x9475,
	7381:  0x9477,
	7382:  0x947D,
	7383:  0x945A,
	7384:  0x947C,
	7385:  0x947E,
	7386:  0x9481,
	7387:  0x947F,
	7388:  0x9582,
	7389:  0x9587,
	7390:  0x958A,
	7391:  0x9594,
	7392:  0x9596,
	7393:  0x9598,
	7394:  0x9599,
	7395:  0x95A0,
	7396:  0x95A8,
	7397:  0x95A7,
	7398:  0x95AD,
	7399:  0x95BC,
	7400:  0x95BB,
	7401:  0x95B9,
	7402:  0x95BE,
	7403:  0x95CA,
	7404:  0x6FF6,
	7405:  0x95C3,
	7406:  0x95CD,
	7407:  0x95CC,
	7408:  0x95D5,
	7409:  0x95D4,
	7410:  0x95D6,
	7411:  0x95DC,
	7412:  0x95E1,
	7413:  0x95E5,
	7414:  0x95E2,
	7415:  0x9621,
	7416:  0x9628,
	7417:  0x962E,
	7418:  0x962F,
	7419:  0x9642,
	7420:  0x964C,
	7421:  0x964F,
	7422:  0x964B,
	7423:  0x9677,
	7424:  0x965C,
	7425:  0x965E,
	7426:  0x965D,
	7427:  0x965F,
	7428:  0x9666,
	7429:  0x9672,
	7430:  0x966C,
	7431:  0x968D,
	7432:  0x9698,
	7433:  0x9695,
	7434:  0x9697,
	7435:  0x96AA,
	7436:  0x96A7,
	7437:  0x96B1,
	7438:  0x96B2,
	7439:  0x96B0,
	7440:  0x96B4,
	7441:  0x96B6,
	7442:  0x96B8,
	7443:  0x96B9,
	7444:  0x96CE,
	7445:  0x96CB,
	7446:  0x96C9,
	7447:  0x96CD,
	7448:  0x894D,
	7449:  0x96DC,
	7450:  0x970D,
	7451:  0x96D5,
	7452:  0x96F9,
	7453:  0x9704,
	7454:  0x9706,
	7455:  0x9708,
	7456:  0x9713,
	7457:  0x970E,
	7458:  0x9711,
	7459:  0x970F,
	7460:  0x9716,
	7461:  0x9719,
	7462:  0x9724,
	7463:  0x972A,
	7464:  0x9730,
	7465:  0x9739,
	7466:  0x973D,
	7467:  0x973E,
	7468:  0x9744,
	7469:  0x9746,
	7470:  0x9748,
	7471:  0x9742,
	7472:  0x9749,
	7473:  0x975C,
	7474:  0x9760,
	7475:  0x9764,
	7476:  0x9766,
	7477:  0x9768,
	7478:  0x52D2,
	7479:  0x976B,
	7480:  0x9771,
	7481:  0x9779,
	7482:  0x9785,
	7483:  0x977C,
	7484:  0x9781,
	7485:  0x977A,
	7486:  0x9786,
	7487:  0x978B,
	7488:  0x978F,
	7489:  0x9790,
	7490:  0x979C,
	7491:  0x97A8,
	7492:  0x97A6,
	7493:  0x97A3,
	7494:  0x97B3,
	7495:  0x97B4,
	7496:  0x97C3,
	7497:  0x97C6,
	7498:  0x97C8,
	7499:  0x97CB,
	7500:  0x97DC,
	7501:  0x97ED,
	7502:  0x9F4F,
	7503:  0x97F2,
	7504:  0x7ADF,
	7505:  0x97F6,
	7506:  0x97F5,
	7507:  0x980F,
	7508:  0x980C,
	7509:  0x9838,
	7510:  0x9824,
	7511:  0x9821,
	7512:  0x9837,
	7513:  0x983D,
	7514:  0x9846,
	7515:  0x984F,
	7516:  0x984B,
	7517:  0x986B,
	7518:  0x986F,
	7519:  0x9870,
	7520:  0x9871,
	7521:  0x9874,
	7522:  0x9873,
	7523:  0x98AA,
	7524:  0x98AF,
	7525:  0x98B1,
	7526:  0x98B6,
	7527:  0x98C4,
	7528:  0x98C3,
	7529:  0x98C6,
	7530:  0x98E9,
	7531:  0x98EB,
	7532:  0x9903,
	7533:  0x9909,
	7534:  0x9912,
	7535:  0x9914,
	7536:  0x9918,
	7537:  0x9921,
	7538:  0x991D,
	7539:  0x991E,
	7540:  0x9924,
	7541:  0x9920,
	7542:  0x992C,
	7543:  0x992E,
	7544:  0x993D,
	7545:  0x993E,
	7546:  0x9942,
	7547:  0x9949,
	7548:  0x9945,
	7549:  0x9950,
	7550:  0x994B,
	7551:  0x9951,
	7552:  0x9952,
	7553:  0x994C,
	7554:  0x9955,
	7555:  0x9997,
	7556:  0x9998,
	7557:  0x99A5,
	7558:  0x99AD,
	7559:  0x99AE,
	7560:  0x99BC,
	7561:  0x99DF,
	7562:  0x99DB,
	7563:  0x99DD,
	7564:  0x99D8,
	7565:  0x99D1,
	7566:  0x99ED,
	7567:  0x99EE,
	7568:  0x99F1,
	7569:  0x99F2,
	7570:  0x99FB,
	7571:  0x99F8,
	7572:  0x9A01,
	7573:  0x9A0F,
	7574:  0x9A05,
	7575:  0x99E2,
	7576:  0x9A19,
	7577:  0x9A2B,
	7578:  0x9A37,
	7579:  0x9A45,
	7580:  0x9A42,
	7581:  0x9A40,
	7582:  0x9A43,
	7583:  0x9A3E,
	7584:  0x9A55,
	7585:  0x9A4D,
	7586:  0x9A5B,
	7587:  0x9A57,
	7588:  0x9A5F,
	7589:  0x9A62,
	7590:  0x9A65,
	7591:  0x9A64,
	7592:  0x9A69,
	7593:  0x9A6B,
	7594:  0x9A6A,
	7595:  0x9AAD,
	7596:  0x9AB0,
	7597:  0x9ABC,
	7598:  0x9AC0,
	7599:  0x9ACF,
	7600:  0x9AD1,
	7601:  0x9AD3,
	7602:  0x9AD4,
	7603:  0x9ADE,
	7604:  0x9ADF,
	7605:  0x9AE2,
	7606:  0x9AE3,
	7607:  0x9AE6,
	7608:  0x9AEF,
	7609:  0x9AEB,
	7610:  0x9AEE,
	7611:  0x9AF4,
	7612:  0x9AF1,
	7613:  0x9AF7,
	7614:  0x9AFB,
	7615:  0x9B06,
	7616:  0x9B18,
	7617:  0x9B1A,
	7618:  0x9B1F,
	7619:  0x9B22,
	7620:  0x9B23,
	7621:  0x9B25,
	7622:  0x9B27,
	7623:  0x9B28,
	7624:  0x9B29,
	7625:  0x9B2A,
	7626:  0x9B2E,
	7627:  0x9B2F,
	7628:  0x9B32,
	7629:  0x9B44,
	7630:  0x9B43,
	7631:  0x9B4F,
	7632:  0x9B4D,
	7633:  0x9B4E,
	7634:  0x9B51,
	7635:  0x9B58,
	7636:  0x9B74,
	7637:  0x9B93,
	7638:  0x9B83,
	7639:  0x9B91,
	7640:  0x9B96,
	7641:  0x9B97,
	7642:  0x9B9F,
	7643:  0x9BA0,
	7644:  0x9BA8,
	7645:  0x9BB4,
	7646:  0x9BC0,
	7647:  0x9BCA,
	7648:  0x9BB9,
	7649:  0x9BC6,
	7650:  0x9BCF,
	7651:  0x9BD1,
	7652:  0x9BD2,
	7653:  0x9BE3,
	7654:  0x9BE2,
	7655:  0x9BE4,
	7656:  0x9BD4,
	7657:  0x9BE1,
	7658:  0x9C3A,
	7659:  0x9BF2,
	7660:  0x9BF1,
	7661:  0x9BF0,
	7662:  0x9C15,
	7663:  0x9C14,
	7664:  0x9C09,
	7665:  0x9C13,
	7666:  0x9C0C,
	7667:  0x9C06,
	7668:  0x9C08,
	7669:  0x9C12,
	7670:  0x9C0A,
	7671:  0x9C04,
	7672:  0x9C2E,
	7673:  0x9C1B,
	7674:  0x9C25,
	7675:  0x9C24,
	7676:  0x9C21,
	7677:  0x9C30,
	7678:  0x9C47,
	7679:  0x9C32,
	7680:  0x9C46,
	7681:  0x9C3E,
	7682:  0x9C5A,
	7683:  0x9C60,
	7684:  0x9C67,
	7685:  0x9C76,
	7686:  0x9C78,
	7687:  0x9CE7,
	7688:  0x9CEC,
	7689:  0x9CF0,
	7690:  0x9D09,
	7691:  0x9D08,
	7692:  0x9CEB,
	7693:  0x9D03,
	7694:  0x9D06,
	7695:  0x9D2A,
	7696:  0x9D26,
	7697:  0x9DAF,
	7698:  0x9D23,
	7699:  0x9D1F,
	7700:  0x9D44,
	7701:  0x9D15,
	7702:  0x9D12,
	7703:  0x9D41,
	7704:  0x9D3F,
	7705:  0x9D3E,
	7706:  0x9D46,
	7707:  0x9D48,
	7708:  0x9D5D,
	7709:  0x9D5E,
	7710:  0x9D64,
	7711:  0x9D51,
	7712:  0x9D50,
	7713:  0x9D59,
	7714:  0x9D72,
	7715:  0x9D89,
	7716:  0x9D87,
	7717:  0x9DAB,
	7718:  0x9D6F,
	7719:  0x9D7A,
	7720:  0x9D9A,
	7721:  0x9DA4,
	7722:  0x9DA9,
	7723:  0x9DB2,
	7724:  0x9DC4,
	7725:  0x9DC1,
	7726:  0x9DBB,
	7727:  0x9DB8,
	7728:  0x9DBA,
	7729:  0x9DC6,
	7730:  0x9DCF,
	7731:  0x9DC2,
	7732:  0x9DD9,
	7733:  0x9DD3,
	7734:  0x9DF8,
	7735:  0x9DE6,
	7736:  0x9DED,
	7737:  0x9DEF,
	7738:  0x9DFD,
	7739:  0x9E1A,
	7740:  0x9E1B,
	7741:  0x9E1E,
	7742:  0x9E75,
	7743:  0x9E79,
	7744:  0x9E7D,
	7745:  0x9E81,
	7746:  0x9E88,
	7747:  0x9E8B,
	7748:  0x9E8C,
	7749:  0x9E92,
	7750:  0x9E95,
	7751:  0x9E91,
	7752:  0x9E9D,
	7753:  0x9EA5,
	7754:  0x9EA9,
	7755:  0x9EB8,
	7756:  0x9EAA,
	7757:  0x9EAD,
	7758:  0x9761,
	7759:  0x9ECC,
	7760:  0x9ECE,
	7761:  0x9ECF,
	7762:  0x9ED0,
	7763:  0x9ED4,
	7764:  0x9EDC,
	7765:  0x9EDE,
	7766:  0x9EDD,
	7767:  0x9EE0,
	7768:  0x9EE5,
	7769:  0x9EE8,
	7770:  0x9EEF,
	7771:  0x9EF4,
	7772:  0x9EF6,
	7773:  0x9EF7,
	7774:  0x9EF9,
	7775:  0x9EFB,
	7776:  0x9EFC,
	7777:  0x9EFD,
	7778:  0x9F07,
	7779:  0x9F08,
	7780:  0x76B7,
	7781:  0x9F15,
	7782:  0x9F21,
	7783:  0x9F2C,
	7784:  0x9F3E,
	7785:  0x9F4A,
	7786:  0x9F52,
	7787:  0x9F54,
	7788:  0x9F63,
	7789:  0x9F5F,
	7790:  0x9F60,
	7791:  0x9F61,
	7792:  0x9F66,
	7793:  0x9F67,
	7794:  0x9F6C,
	7795:  0x9F6A,
	7796:  0x9F77,
	7797:  0x9F72,
	7798:  0x9F76,
	7799:  0x9F95,
	7800:  0x9F9C,
	7801:  0x9FA0,
	7802:  0x582F,
	7803:  0x69C7,
	7804:  0x9059,
	7805:  0x7464,
	7806:  0x51DC,
	7807:  0x7199,
	8272:  0x7E8A,
	8273:  0x891C,
	8274:  0x9348,
	8275:  0x9288,
	8276:  0x84DC,
	8277:  0x4FC9,
	8278:  0x70BB,
	8279:  0x6631,
	8280:  0x68C8,
	8281:  0x92F9,
	8282:  0x66FB,
	8283:  0x5F45,
	8284:  0x4E28,
	8285:  0x4EE1,
	8286:  0x4EFC,
	8287:  0x4F00,
	8288:  0x4F03,
	8289:  0x4F39,
	8290:  0x4F56,
	8291:  0x4F92,
	8292:  0x4F8A,
	8293:  0x4F9A,
	8294:  0x4F94,
	8295:  0x4FCD,
	8296:  0x5040,
	8297:  0x5022,
	8298:  0x4FFF,
	8299:  0x501E,
	8300:  0x5046,
	8301:  0x5070,
	8302:  0x5042,
	8303:  0x5094,
	8304:  0x50F4,
	8305:  0x50D8,
	8306:  0x514A,
	8307:  0x5164,
	8308:  0x519D,
	8309:  0x51BE,
	8310:  0x51EC,
	8311:  0x5215,
	8312:  0x529C,
	8313:  0x52A6,
	8314:  0x52C0,
	8315:  0x52DB,
	8316:  0x5300,
	8317:  0x5307,
	8318:  0x5324,
	8319:  0x5372,
	8320:  0x5393,
	8321:  0x53B2,
	8322:  0x53DD,
	8323:  0xFA0E,
	8324:  0x549C,
	8325:  0x548A,
	8326:  0x54A9,
	8327:  0x54FF,
	8328:  0x5586,
	8329:  0x5759,
	8330:  0x5765,
	8331:  0x57AC,
	8332:  0x57C8,
	8333:  0x57C7,
	8334:  0xFA0F,
	8335:  0xFA10,
	8336:  0x589E,
	8337:  0x58B2,
	8338:  0x590B,
	8339:  0x5953,
	8340:  0x595B,
	8341:  0x595D,
	8342:  0x5963,
	8343:  0x59A4,
	8344:  0x59BA,
	8345:  0x5B56,
	8346:  0x5BC0,
	8347:  0x752F,
	8348:  0x5BD8,
	8349:  0x5BEC,
	8350:  0x5C1E,
	8351:  0x5CA6,
	8352:  0x5CBA,
	8353:  0x5CF5,
	8354:  0x5D27,
	8355:  0x5D53,
	8356:  0xFA11,
	8357:  0x5D42,
	8358:  0x5D6D,
	8359:  0x5DB8,
	8360:  0x5DB9,
	8361:  0x5DD0,
	8362:  0x5F21,
	8363:  0x5F34,
	8364:  0x5F67,
	8365:  0x5FB7,
	8366:  0x5FDE,
	8367:  0x605D,
	8368:  0x6085,
	8369:  0x608A,
	8370:  0x60DE,
	8371:  0x60D5,
	8372:  0x6120,
	8373:  0x60F2,
	8374:  0x6111,
	8375:  0x6137,
	8376:  0x6130,
	8377:  0x6198,
	8378:  0x6213,
	8379:  0x62A6,
	8380:  0x63F5,
	8381:  0x6460,
	8382:  0x649D,
	8383:  0x64CE,
	8384:  0x654E,
	8385:  0x6600,
	8386:  0x6615,
	8387:  0x663B,
	8388:  0x6609,
	8389:  0x662E,
	8390:  0x661E,
	8391:  0x6624,
	8392:  0x6665,
	8393:  0x6657,
	8394:  0x6659,
	8395:  0xFA12,
	8396:  0x6673,
	8397:  0x6699,
	8398:  0x66A0,
	8399:  0x66B2,
	8400:  0x66BF,
	8401:  0x66FA,
	8402:  0x670E,
	8403:  0xF929,
	8404:  0x6766,
	8405:  0x67BB,
	8406:  0x6852,
	8407:  0x67C0,
	8408:  0x6801,
	8409:  0x6844,
	8410:  0x68CF,
	8411:  0xFA13,
	8412:  0x6968,
	8413:  0xFA14,
	8414:  0x6998,
	8415:  0x69E2,
	8416:  0x6A30,
	8417:  0x6A6B,
	8418:  0x6A46,
	8419:  0x6A73,
	8420:  0x6A7E,
	8421:  0x6AE2,
	8422:  0x6AE4,
	8423:  0x6BD6,
	8424:  0x6C3F,
	8425:  0x6C5C,
	8426:  0x6C86,
	8427:  0x6C6F,
	8428:  0x6CDA,
	8429:  0x6D04,
	8430:  0x6D87,
	8431:  0x6D6F,
	8432:  0x6D96,
	8433:  0x6DAC,
	8434:  0x6DCF,
	8435:  0x6DF8,
	8436:  0x6DF2,
	8437:  0x6DFC,
	8438:  0x6E39,
	8439:  0x6E5C,
	8440:  0x6E27,
	8441:  0x6E3C,
	8442:  0x6EBF,
	8443:  0x6F88,
	8444:  0x6FB5,
	8445:  0x6FF5,
	8446:  0x7005,
	8447:  0x7007,
	8448:  0x7028,
	8449:  0x7085,
	8450:  0x70AB,
	8451:  0x710F,
	8452:  0x7104,
	8453:  0x715C,
	8454:  0x7146,
	8455:  0x7147,
	8456:  0xFA15,
	8457:  0x71C1,
	8458:  0x71FE,
	8459:  0x72B1,
	8460:  0x72BE,
	8461:  0x7324,
	8462:  0xFA16,
	8463:  0x7377,
	8464:  0x73BD,
	8465:  0x73C9,
	8466:  0x73D6,
	8467:  0x73E3,
	8468:  0x73D2,
	8469:  0x7407,
	8470:  0x73F5,
	8471:  0x7426,
	8472:  0x742A,
	8473:  0x7429,
	8474:  0x742E,
	8475:  0x7462,
	8476:  0x7489,
	8477:  0x749F,
	8478:  0x7501,
	8479:  0x756F,
	8480:  0x7682,
	8481:  0x769C,
	8482:  0x769E,
	8483:  0x769B,
	8484:  0x76A6,
	8485:  0xFA17,
	8486:  0x7746,
	8487:  0x52AF,
	8488:  0x7821,
	8489:  0x784E,
	8490:  0x7864,
	8491:  0x787A,
	8492:  0x7930,
	8493:  0xFA18,
	8494:  0xFA19,
	8495:  0xFA1A,
	8496:  0x7994,
	8497:  0xFA1B,
	8498:  0x799B,
	8499:  0x7AD1,
	8500:  0x7AE7,
	8501:  0xFA1C,
	8502:  0x7AEB,
	8503:  0x7B9E,
	8504:  0xFA1D,
	8505:  0x7D48,
	8506:  0x7D5C,
	8507:  0x7DB7,
	8508:  0x7DA0,
	8509:  0x7DD6,
	8510:  0x7E52,
	8511:  0x7F47,
	8512:  0x7FA1,
	8513:  0xFA1E,
	8514:  0x8301,
	8515:  0x8362,
	8516:  0x837F,
	8517:  0x83C7,
	8518:  0x83F6,
	8519:  0x8448,
	8520:  0x84B4,
	8521:  0x8553,
	8522:  0x8559,
	8523:  0x856B,
	8524:  0xFA1F,
	8525:  0x85B0,
	8526:  0xFA20,
	8527:  0xFA21,
	8528:  0x8807,
	8529:  0x88F5,
	8530:  0x8A12,
	8531:  0x8A37,
	8532:  0x8A79,
	8533:  0x8AA7,
	8534:  0x8ABE,
	8535:  0x8ADF,
	8536:  0xFA22,
	8537:  0x8AF6,
	8538:  0x8B53,
	8539:  0x8B7F,
	8540:  0x8CF0,
	8541:  0x8CF4,
	8542:  0x8D12,
	8543:  0x8D76,
	8544:  0xFA23,
	8545:  0x8ECF,
	8546:  0xFA24,
	8547:  0xFA25,
	8548:  0x9067,
	8549:  0x90DE,
	8550:  0xFA26,
	8551:  0x9115,
	8552:  0x9127,
	8553:  0x91DA,
	8554:  0x91D7,
	8555:  0x91DE,
	8556:  0x91ED,
	8557:  0x91EE,
	8558:  0x91E4,
	8559:  0x91E5,
	8560:  0x9206,
	8561:  0x9210,
	8562:  0x920A,
	8563:  0x923A,
	8564:  0x9240,
	8565:  0x923C,
	8566:  0x924E,
	8567:  0x9259,
	8568:  0x9251,
	8569:  0x9239,
	8570:  0x9267,
	8571:  0x92A7,
	8572:  0x9277,
	8573:  0x9278,
	8574:  0x92E7,
	8575:  0x92D7,
	8576:  0x92D9,
	8577:  0x92D0,
	8578:  0xFA27,
	8579:  0x92D5,
	8580:  0x92E0,
	8581:  0x92D3,
	8582:  0x9325,
	8583:  0x9321,
	8584:  0x92FB,
	8585:  0xFA28,
	8586:  0x931E,
	8587:  0x92FF,
	8588:  0x931D,
	8589:  0x9302,
	8590:  0x9370,
	8591:  0x9357,
	8592:  0x93A4,
	8593:  0x93C6,
	8594:  0x93DE,
	8595:  0x93F8,
	8596:  0x9431,
	8597:  0x9445,
	8598:  0x9448,
	8599:  0x9592,
	8600:  0xF9DC,
	8601:  0xFA29,
	8602:  0x969D,
	8603:  0x96AF,
	8604:  0x9733,
	8605:  0x973B,
	8606:  0x9743,
	8607:  0x974D,
	8608:  0x974F,
	8609:  0x9751,
	8610:  0x9755,
	8611:  0x9857,
	8612:  0x9865,
	8613:  0xFA2A,
	8614:  0xFA2B,
	8615:  0x9927,
	8616:  0xFA2C,
	8617:  0x999E,
	8618:  0x9A4E,
	8619:  0x9AD9,
	8620:  0x9ADC,
	8621:  0x9B75,
	8622:  0x9B72,
	8623:  0x9B8F,
	8624:  0x9BB1,
	8625:  0x9BBB,
	8626:  0x9C00,
	8627:  0x9D70,
	8628:  0x9D6B,
	8629:  0xFA2D,
	8630:  0x9E19,
	8631:  0x9ED1,
	8634:  0x2170,
	8635:  0x2171,
	8636:  0x2172,
	8637:  0x2173,
	8638:  0x2174,
	8639:  0x2175,
	8640:  0x2176,
	8641:  0x2177,
	8642:  0x2178,
	8643:  0x2179,
	8644:  0xFFE2,
	8645:  0xFFE4,
	8646:  0xFF07,
	8647:  0xFF02,
	10716: 0x2170,
	10717: 0x2171,
	10718: 0x2172,
	10719: 0x2173,
	10720: 0x2174,
	10721: 0x2175,
	10722: 0x2176,
	10723: 0x2177,
	10724: 0x2178,
	10725: 0x2179,
	10726: 0x2160,
	10727: 0x2161,
	10728: 0x2162,
	10729: 0x2163,
	10730: 0x2164,
	10731: 0x2165,
	10732: 0x2166,
	10733: 0x2167,
	10734: 0x2168,
	10735: 0x2169,
	10736: 0xFFE2,
	10737: 0xFFE4,
	10738: 0xFF07,
	10739: 0xFF02,
	10740: 0x3231,
	10741: 0x2116,
	10742: 0x2121,
	10743: 0x2235,
	10744: 0x7E8A,
	10745: 0x891C,
	10746: 0x9348,
	10747: 0x9288,
	10748: 0x84DC,
	10749: 0x4FC9,
	10750: 0x70BB,
	10751: 0x6631,
	10752: 0x68C8,
	10753: 0x92F9,
	10754: 0x66FB,
	10755: 0x5F45,
	10756: 0x4E28,
	10757: 0x4EE1,
	10758: 0x4EFC,
	10759: 0x4F00,
	10760: 0x4F03,
	10761: 0x4F39,
	10762: 0x4F56,
	10763: 0x4F92,
	10764: 0x4F8A,
	10765: 0x4F9A,
	10766: 0x4F94,
	10767: 0x4FCD,
	10768: 0x5040,
	10769: 0x5022,
	10770: 0x4FFF,
	10771: 0x501E,
	10772: 0x5046,
	10773: 0x5070,
	10774: 0x5042,
	10775: 0x5094,
	10776: 0x50F4,
	10777: 0x50D8,
	10778: 0x514A,
	10779: 0x5164,
	10780: 0x519D,
	10781: 0x51BE,
	10782: 0x51EC,
	10783: 0x5215,
	10784: 0x529C,
	10785: 0x52A6,
	10786: 0x52C0,
	10787: 0x52DB,
	10788: 0x5300,
	10789: 0x5307,
	10790: 0x5324,
	10791: 0x5372,
	10792: 0x5393,
	10793: 0x53B2,
	10794: 0x53DD,
	10795: 0xFA0E,
	10796: 0x549C,
	10797: 0x548A,
	10798: 0x54A9,
	10799: 0x54FF,
	10800: 0x5586,
	10801: 0x5759,
	10802: 0x5765,
	10803: 0x57AC,
	10804: 0x57C8,
	10805: 0x57C7,
	10806: 0xFA0F,
	10807: 0xFA10,
	10808: 0x589E,
	10809: 0x58B2,
	10810: 0x590B,
	10811: 0x5953,
	10812: 0x595B,
	10813: 0x595D,
	10814: 0x5963,
	10815: 0x59A4,
	10816: 0x59BA,
	10817: 0x5B56,
	10818: 0x5BC0,
	10819: 0x752F,
	10820: 0x5BD8,
	10821: 0x5BEC,
	10822: 0x5C1E,
	10823: 0x5CA6,
	10824: 0x5CBA,
	10825: 0x5CF5,
	10826: 0x5D27,
	10827: 0x5D53,
	10828: 0xFA11,
	10829: 0x5D42,
	10830: 0x5D6D,
	10831: 0x5DB8,
	10832: 0x5DB9,
	10833: 0x5DD0,
	10834: 0x5F21,
	10835: 0x5F34,
	10836: 0x5F67,
	10837: 0x5FB7,
	10838: 0x5FDE,
	10839: 0x605D,
	10840: 0x6085,
	10841: 0x608A,
	10842: 0x60DE,
	10843: 0x60D5,
	10844: 0x6120,
	10845: 0x60F2,
	10846: 0x6111,
	10847: 0x6137,
	10848: 0x6130,
	10849: 0x6198,
	10850: 0x6213,
	10851: 0x62A6,
	10852: 0x63F5,
	10853: 0x6460,
	10854: 0x649D,
	10855: 0x64CE,
	10856: 0x654E,
	10857: 0x6600,
	10858: 0x6615,
	10859: 0x663B,
	10860: 0x6609,
	10861: 0x662E,
	10862: 0x661E,
	10863: 0x6624,
	10864: 0x6665,
	10865: 0x6657,
	10866: 0x6659,
	10867: 0xFA12,
	10868: 0x6673,
	10869: 0x6699,
	10870: 0x66A0,
	10871: 0x66B2,
	10872: 0x66BF,
	10873: 0x66FA,
	10874: 0x670E,
	10875: 0xF929,
	10876: 0x6766,
	10877: 0x67BB,
	10878: 0x6852,
	10879: 0x67C0,
	10880: 0x6801,
	10881: 0x6844,
	10882: 0x68CF,
	10883: 0xFA13,
	10884: 0x6968,
	10885: 0xFA14,
	10886: 0x6998,
	10887: 0x69E2,
	10888: 0x6A30,
	10889: 0x6A6B,
	10890: 0x6A46,
	10891: 0x6A73,
	10892: 0x6A7E,
	10893: 0x6AE2,
	10894: 0x6AE4,
	10895: 0x6BD6,
	10896: 0x6C3F,
	10897: 0x6C5C,
	10898: 0x6C86,
	10899: 0x6C6F,
	10900: 0x6CDA,
	10901: 0x6D04,
	10902: 0x6D87,
	10903: 0x6D6F,
	10904: 0x6D96,
	10905: 0x6DAC,
	10906: 0x6DCF,
	10907: 0x6DF8,
	10908: 0x6DF2,
	10909: 0x6DFC,
	10910: 0x6E39,
	10911: 0x6E5C,
	10912: 0x6E27,
	10913: 0x6E3C,
	10914: 0x6EBF,
	10915: 0x6F88,
	10916: 0x6FB5,
	10917: 0x6FF5,
	10918: 0x7005,
	10919: 0x7007,
	10920: 0x7028,
	10921: 0x7085,
	10922: 0x70AB,
	10923: 0x710F,
	10924: 0x7104,
	10925: 0x715C,
	10926: 0x7146,
	10927: 0x7147,
	10928: 0xFA15,
	10929: 0x71C1,
	10930: 0x71FE,
	10931: 0x72B1,
	10932: 0x72BE,
	10933: 0x7324,
	10934: 0xFA16,
	10935: 0x7377,
	10936: 0x73BD,
	10937: 0x73C9,
	10938: 0x73D6,
	10939: 0x73E3,
	10940: 0x73D2,
	10941: 0x7407,
	10942: 0x73F5,
	10943: 0x7426,
	10944: 0x742A,
	10945: 0x7429,
	10946: 0x742E,
	10947: 0x7462,
	10948: 0x7489,
	10949: 0x749F,
	10950: 0x7501,
	10951: 0x756F,
	10952: 0x7682,
	10953: 0x769C,
	10954: 0x769E,
	10955: 0x769B,
	10956: 0x76A6,
	10957: 0xFA17,
	10958: 0x7746,
	10959: 0x52AF,
	10960: 0x7821,
	10961: 0x784E,
	10962: 0x7864,
	10963: 0x787A,
	10964: 0x7930,
	10965: 0xFA18,
	10966: 0xFA19,
	10967: 0xFA1A,
	10968: 0x7994,
	10969: 0xFA1B,
	10970: 0x799B,
	10971: 0x7AD1,
	10972: 0x7AE7,
	10973: 0xFA1C,
	10974: 0x7AEB,
	10975: 0x7B9E,
	10976: 0xFA1D,
	10977: 0x7D48,
	10978: 0x7D5C,
	10979: 0x7DB7,
	10980: 0x7DA0,
	10981: 0x7DD6,
	10982: 0x7E52,
	10983: 0x7F47,
	10984: 0x7FA1,
	10985: 0xFA1E,
	10986: 0x8301,
	10987: 0x8362,
	10988: 0x837F,
	10989: 0x83C7,
	10990: 0x83F6,
	10991: 0x8448,
	10992: 0x84B4,
	10993: 0x8553,
	10994: 0x8559,
	10995: 0x856B,
	10996: 0xFA1F,
	10997: 0x85B0,
	10998: 0xFA20,
	10999: 0xFA21,
	11000: 0x8807,
	11001: 0x88F5,
	11002: 0x8A12,
	11003: 0x8A37,
	11004: 0x8A79,
	11005: 0x8AA7,
	11006: 0x8ABE,
	11007: 0x8ADF,
	11008: 0xFA22,
	11009: 0x8AF6,
	11010: 0x8B53,
	11011: 0x8B7F,
	11012: 0x8CF0,
	11013: 0x8CF4,
	11014: 0x8D12,
	11015: 0x8D76,
	11016: 0xFA23,
	11017: 0x8ECF,
	11018: 0xFA24,
	11019: 0xFA25,
	11020: 0x9067,
	11021: 0x90DE,
	11022: 0xFA26,
	11023: 0x9115,
	11024: 0x9127,
	11025: 0x91DA,
	11026: 0x91D7,
	11027: 0x91DE,
	11028: 0x91ED,
	11029: 0x91EE,
	11030: 0x91E4,
	11031: 0x91E5,
	11032: 0x9206,
	11033: 0x9210,
	11034: 0x920A,
	11035: 0x923A,
	11036: 0x9240,
	11037: 0x923C,
	11038: 0x924E,
	11039: 0x9259,
	11040: 0x9251,
	11041: 0x9239,
	11042: 0x9267,
	11043: 0x92A7,
	11044: 0x9277,
	11045: 0x9278,
	11046: 0x92E7,
	11047: 0x92D7,
	11048: 0x92D9,
	11049: 0x92D0,
	11050: 0xFA27,
	11051: 0x92D5,
	11052: 0x92E0,
	11053: 0x92D3,
	11054: 0x9325,
	11055: 0x9321,
	11056: 0x92FB,
	11057: 0xFA28,
	11058: 0x931E,
	11059: 0x92FF,
	11060: 0x931D,
	11061: 0x9302,
	11062: 0x9370,
	11063: 0x9357,
	11064: 0x93A4,
	11065: 0x93C6,
	11066: 0x93DE,
	11067: 0x93F8,
	11068: 0x9431,
	11069: 0x9445,
	11070: 0x9448,
	11071: 0x9592,
	11072: 0xF9DC,
	11073: 0xFA29,
	11074: 0x969D,
	11075: 0x96AF,
	11076: 0x9733,
	11077: 0x973B,
	11078: 0x9743,
	11079: 0x974D,
	11080: 0x974F,
	11081: 0x9751,
	11082: 0x9755,
	11083: 0x9857,
	11084: 0x9865,
	11085: 0xFA2A,
	11086: 0xFA2B,
	11087: 0x9927,
	11088: 0xFA2C,
	11089: 0x999E,
	11090: 0x9A4E,
	11091: 0x9AD9,
	11092: 0x9ADC,
	11093: 0x9B75,
	11094: 0x9B72,
	11095: 0x9B8F,
	11096: 0x9BB1,
	11097: 0x9BBB,
	11098: 0x9C00,
	11099: 0x9D70,
	11100: 0x9D6B,
	11101: 0xFA2D,
	11102: 0x9E19,
	11103: 0x9ED1,
}

// jis0212Decode is the decoding table from JIS 0212 code to Unicode.
// It is defined at http://encoding.spec.whatwg.org/index-jis0212.txt
var jis0212Decode = [...]uint16{
	108:  0x02D8,
	109:  0x02C7,
	110:  0x00B8,
	111:  0x02D9,
	112:  0x02DD,
	113:  0x00AF,
	114:  0x02DB,
	115:  0x02DA,
	116:  0xFF5E,
	117:  0x0384,
	118:  0x0385,
	127:  0x00A1,
	128:  0x00A6,
	129:  0x00BF,
	168:  0x00BA,
	169:  0x00AA,
	170:  0x00A9,
	171:  0x00AE,
	172:  0x2122,
	173:  0x00A4,
	174:  0x2116,
	534:  0x0386,
	535:  0x0388,
	536:  0x0389,
	537:  0x038A,
	538:  0x03AA,
	540:  0x038C,
	542:  0x038E,
	543:  0x03AB,
	545:  0x038F,
	550:  0x03AC,
	551:  0x03AD,
	552:  0x03AE,
	553:  0x03AF,
	554:  0x03CA,
	555:  0x0390,
	556:  0x03CC,
	557:  0x03C2,
	558:  0x03CD,
	559:  0x03CB,
	560:  0x03B0,
	561:  0x03CE,
	597:  0x0402,
	598:  0x0403,
	599:  0x0404,
	600:  0x0405,
	601:  0x0406,
	602:  0x0407,
	603:  0x0408,
	604:  0x0409,
	605:  0x040A,
	606:  0x040B,
	607:  0x040C,
	608:  0x040E,
	609:  0x040F,
	645:  0x0452,
	646:  0x0453,
	647:  0x0454,
	648:  0x0455,
	649:  0x0456,
	650:  0x0457,
	651:  0x0458,
	652:  0x0459,
	653:  0x045A,
	654:  0x045B,
	655:  0x045C,
	656:  0x045E,
	657:  0x045F,
	752:  0x00C6,
	753:  0x0110,
	755:  0x0126,
	757:  0x0132,
	759:  0x0141,
	760:  0x013F,
	762:  0x014A,
	763:  0x00D8,
	764:  0x0152,
	766:  0x0166,
	767:  0x00DE,
	784:  0x00E6,
	785:  0x0111,
	786:  0x00F0,
	787:  0x0127,
	788:  0x0131,
	789:  0x0133,
	790:  0x0138,
	791:  0x0142,
	792:  0x0140,
	793:  0x0149,
	794:  0x014B,
	795:  0x00F8,
	796:  0x0153,
	797:  0x00DF,
	798:  0x0167,
	799:  0x00FE,
	846:  0x00C1,
	847:  0x00C0,
	848:  0x00C4,
	849:  0x00C2,
	850:  0x0102,
	851:  0x01CD,
	852:  0x0100,
	853:  0x0104,
	854:  0x00C5,
	855:  0x00C3,
	856:  0x0106,
	857:  0x0108,
	858:  0x010C,
	859:  0x00C7,
	860:  0x010A,
	861:  0x010E,
	862:  0x00C9,
	863:  0x00C8,
	864:  0x00CB,
	865:  0x00CA,
	866:  0x011A,
	867:  0x0116,
	868:  0x0112,
	869:  0x0118,
	871:  0x011C,
	872:  0x011E,
	873:  0x0122,
	874:  0x0120,
	875:  0x0124,
	876:  0x00CD,
	877:  0x00CC,
	878:  0x00CF,
	879:  0x00CE,
	880:  0x01CF,
	881:  0x0130,
	882:  0x012A,
	883:  0x012E,
	884:  0x0128,
	885:  0x0134,
	886:  0x0136,
	887:  0x0139,
	888:  0x013D,
	889:  0x013B,
	890:  0x0143,
	891:  0x0147,
	892:  0x0145,
	893:  0x00D1,
	894:  0x00D3,
	895:  0x00D2,
	896:  0x00D6,
	897:  0x00D4,
	898:  0x01D1,
	899:  0x0150,
	900:  0x014C,
	901:  0x00D5,
	902:  0x0154,
	903:  0x0158,
	904:  0x0156,
	905:  0x015A,
	906:  0x015C,
	907:  0x0160,
	908:  0x015E,
	909:  0x0164,
	910:  0x0162,
	911:  0x00DA,
	912:  0x00D9,
	913:  0x00DC,
	914:  0x00DB,
	915:  0x016C,
	916:  0x01D3,
	917:  0x0170,
	918:  0x016A,
	919:  0x0172,
	920:  0x016E,
	921:  0x0168,
	922:  0x01D7,
	923:  0x01DB,
	924:  0x01D9,
	925:  0x01D5,
	926:  0x0174,
	927:  0x00DD,
	928:  0x0178,
	929:  0x0176,
	930:  0x0179,
	931:  0x017D,
	932:  0x017B,
	940:  0x00E1,
	941:  0x00E0,
	942:  0x00E4,
	943:  0x00E2,
	944:  0x0103,
	945:  0x01CE,
	946:  0x0101,
	947:  0x0105,
	948:  0x00E5,
	949:  0x00E3,
	950:  0x0107,
	951:  0x0109,
	952:  0x010D,
	953:  0x00E7,
	954:  0x010B,
	955:  0x010F,
	956:  0x00E9,
	957:  0x00E8,
	958:  0x00EB,
	959:  0x00EA,
	960:  0x011B,
	961:  0x0117,
	962:  0x0113,
	963:  0x0119,
	964:  0x01F5,
	965:  0x011D,
	966:  0x011F,
	968:  0x0121,
	969:  0x0125,
	970:  0x00ED,
	971:  0x00EC,
	972:  0x00EF,
	973:  0x00EE,
	974:  0x01D0,
	976:  0x012B,
	977:  0x012F,
	978:  0x0129,
	979:  0x0135,
	980:  0x0137,
	981:  0x013A,
	982:  0x013E,
	983:  0x013C,
	984:  0x0144,
	985:  0x0148,
	986:  0x0146,
	987:  0x00F1,
	988:  0x00F3,
	989:  0x00F2,
	990:  0x00F6,
	991:  0x00F4,
	992:  0x01D2,
	993:  0x0151,
	994:  0x014D,
	995:  0x00F5,
	996:  0x0155,
	997:  0x0159,
	998:  0x0157,
	999:  0x015B,
	1000: 0x015D,
	1001: 0x0161,
	1002: 0x015F,
	1003: 0x0165,
	1004: 0x0163,
	1005: 0x00FA,
	1006: 0x00F9,
	1007: 0x00FC,
	1008: 0x00FB,
	1009: 0x016D,
	1010: 0x01D4,
	1011: 0x0171,
	1012: 0x016B,
	1013: 0x0173,
	1014: 0x016F,
	1015: 0x0169,
	1016: 0x01D8,
	1017: 0x01DC,
	1018: 0x01DA,
	1019: 0x01D6,
	1020: 0x0175,
	1021: 0x00FD,
	1022: 0x00FF,
	1023: 0x0177,
	1024: 0x017A,
	1025: 0x017E,
	1026: 0x017C,
	1410: 0x4E02,
	1411: 0x4E04,
	1412: 0x4E05,
	1413: 0x4E0C,
	1414: 0x4E12,
	1415: 0x4E1F,
	1416: 0x4E23,
	1417: 0x4E24,
	1418: 0x4E28,
	1419: 0x4E2B,
	1420: 0x4E2E,
	1421: 0x4E2F,
	1422: 0x4E30,
	1423: 0x4E35,
	1424: 0x4E40,
	1425: 0x4E41,
	1426: 0x4E44,
	1427: 0x4E47,
	1428: 0x4E51,
	1429: 0x4E5A,
	1430: 0x4E5C,
	1431: 0x4E63,
	1432: 0x4E68,
	1433: 0x4E69,
	1434: 0x4E74,
	1435: 0x4E75,
	1436: 0x4E79,
	1437: 0x4E7F,
	1438: 0x4E8D,
	1439: 0x4E96,
	1440: 0x4E97,
	1441: 0x4E9D,
	1442: 0x4EAF,
	1443: 0x4EB9,
	1444: 0x4EC3,
	1445: 0x4ED0,
	1446: 0x4EDA,
	1447: 0x4EDB,
	1448: 0x4EE0,
	1449: 0x4EE1,
	1450: 0x4EE2,
	1451: 0x4EE8,
	1452: 0x4EEF,
	1453: 0x4EF1,
	1454: 0x4EF3,
	1455: 0x4EF5,
	1456: 0x4EFD,
	1457: 0x4EFE,
	1458: 0x4EFF,
	1459: 0x4F00,
	1460: 0x4F02,
	1461: 0x4F03,
	1462: 0x4F08,
	1463: 0x4F0B,
	1464: 0x4F0C,
	1465: 0x4F12,
	1466: 0x4F15,
	1467: 0x4F16,
	1468: 0x4F17,
	1469: 0x4F19,
	1470: 0x4F2E,
	1471: 0x4F31,
	1472: 0x4F60,
	1473: 0x4F33,
	1474: 0x4F35,
	1475: 0x4F37,
	1476: 0x4F39,
	1477: 0x4F3B,
	1478: 0x4F3E,
	1479: 0x4F40,
	1480: 0x4F42,
	1481: 0x4F48,
	1482: 0x4F49,
	1483: 0x4F4B,
	1484: 0x4F4C,
	1485: 0x4F52,
	1486: 0x4F54,
	1487: 0x4F56,
	1488: 0x4F58,
	1489: 0x4F5F,
	1490: 0x4F63,
	1491: 0x4F6A,
	1492: 0x4F6C,
	1493: 0x4F6E,
	1494: 0x4F71,
	1495: 0x4F77,
	1496: 0x4F78,
	1497: 0x4F79,
	1498: 0x4F7A,
	1499: 0x4F7D,
	1500: 0x4F7E,
	1501: 0x4F81,
	1502: 0x4F82,
	1503: 0x4F84,
	1504: 0x4F85,
	1505: 0x4F89,
	1506: 0x4F8A,
	1507: 0x4F8C,
	1508: 0x4F8E,
	1509: 0x4F90,
	1510: 0x4F92,
	1511: 0x4F93,
	1512: 0x4F94,
	1513: 0x4F97,
	1514: 0x4F99,
	1515: 0x4F9A,
	1516: 0x4F9E,
	1517: 0x4F9F,
	1518: 0x4FB2,
	1519: 0x4FB7,
	1520: 0x4FB9,
	1521: 0x4FBB,
	1522: 0x4FBC,
	1523: 0x4FBD,
	1524: 0x4FBE,
	1525: 0x4FC0,
	1526: 0x4FC1,
	1527: 0x4FC5,
	1528: 0x4FC6,
	1529: 0x4FC8,
	1530: 0x4FC9,
	1531: 0x4FCB,
	1532: 0x4FCC,
	1533: 0x4FCD,
	1534: 0x4FCF,
	1535: 0x4FD2,
	1536: 0x4FDC,
	1537: 0x4FE0,
	1538: 0x4FE2,
	1539: 0x4FF0,
	1540: 0x4FF2,
	1541: 0x4FFC,
	1542: 0x4FFD,
	1543: 0x4FFF,
	1544: 0x5000,
	1545: 0x5001,
	1546: 0x5004,
	1547: 0x5007,
	1548: 0x500A,
	1549: 0x500C,
	1550: 0x500E,
	1551: 0x5010,
	1552: 0x5013,
	1553: 0x5017,
	1554: 0x5018,
	1555: 0x501B,
	1556: 0x501C,
	1557: 0x501D,
	1558: 0x501E,
	1559: 0x5022,
	1560: 0x5027,
	1561: 0x502E,
	1562: 0x5030,
	1563: 0x5032,
	1564: 0x5033,
	1565: 0x5035,
	1566: 0x5040,
	1567: 0x5041,
	1568: 0x5042,
	1569: 0x5045,
	1570: 0x5046,
	1571: 0x504A,
	1572: 0x504C,
	1573: 0x504E,
	1574: 0x5051,
	1575: 0x5052,
	1576: 0x5053,
	1577: 0x5057,
	1578: 0x5059,
	1579: 0x505F,
	1580: 0x5060,
	1581: 0x5062,
	1582: 0x5063,
	1583: 0x5066,
	1584: 0x5067,
	1585: 0x506A,
	1586: 0x506D,
	1587: 0x5070,
	1588: 0x5071,
	1589: 0x503B,
	1590: 0x5081,
	1591: 0x5083,
	1592: 0x5084,
	1593: 0x5086,
	1594: 0x508A,
	1595: 0x508E,
	1596: 0x508F,
	1597: 0x5090,
	1598: 0x5092,
	1599: 0x5093,
	1600: 0x5094,
	1601: 0x5096,
	1602: 0x509B,
	1603: 0x509C,
	1604: 0x509E,
	1605: 0x509F,
	1606: 0x50A0,
	1607: 0x50A1,
	1608: 0x50A2,
	1609: 0x50AA,
	1610: 0x50AF,
	1611: 0x50B0,
	1612: 0x50B9,
	1613: 0x50BA,
	1614: 0x50BD,
	1615: 0x50C0,
	1616: 0x50C3,
	1617: 0x50C4,
	1618: 0x50C7,
	1619: 0x50CC,
	1620: 0x50CE,
	1621: 0x50D0,
	1622: 0x50D3,
	1623: 0x50D4,
	1624: 0x50D8,
	1625: 0x50DC,
	1626: 0x50DD,
	1627: 0x50DF,
	1628: 0x50E2,
	1629: 0x50E4,
	1630: 0x50E6,
	1631: 0x50E8,
	1632: 0x50E9,
	1633: 0x50EF,
	1634: 0x50F1,
	1635: 0x50F6,
	1636: 0x50FA,
	1637: 0x50FE,
	1638: 0x5103,
	1639: 0x5106,
	1640: 0x5107,
	1641: 0x5108,
	1642: 0x510B,
	1643: 0x510C,
	1644: 0x510D,
	1645: 0x510E,
	1646: 0x50F2,
	1647: 0x5110,
	1648: 0x5117,
	1649: 0x5119,
	1650: 0x511B,
	1651: 0x511C,
	1652: 0x511D,
	1653: 0x511E,
	1654: 0x5123,
	1655: 0x5127,
	1656: 0x5128,
	1657: 0x512C,
	1658: 0x512D,
	1659: 0x512F,
	1660: 0x5131,
	1661: 0x5133,
	1662: 0x5134,
	1663: 0x5135,
	1664: 0x5138,
	1665: 0x5139,
	1666: 0x5142,
	1667: 0x514A,
	1668: 0x514F,
	1669: 0x5153,
	1670: 0x5155,
	1671: 0x5157,
	1672: 0x5158,
	1673: 0x515F,
	1674: 0x5164,
	1675: 0x5166,
	1676: 0x517E,
	1677: 0x5183,
	1678: 0x5184,
	1679: 0x518B,
	1680: 0x518E,
	1681: 0x5198,
	1682: 0x519D,
	1683: 0x51A1,
	1684: 0x51A3,
	1685: 0x51AD,
	1686: 0x51B8,
	1687: 0x51BA,
	1688: 0x51BC,
	1689: 0x51BE,
	1690: 0x51BF,
	1691: 0x51C2,
	1692: 0x51C8,
	1693: 0x51CF,
	1694: 0x51D1,
	1695: 0x51D2,
	1696: 0x51D3,
	1697: 0x51D5,
	1698: 0x51D8,
	1699: 0x51DE,
	1700: 0x51E2,
	1701: 0x51E5,
	1702: 0x51EE,
	1703: 0x51F2,
	1704: 0x51F3,
	1705: 0x51F4,
	1706: 0x51F7,
	1707: 0x5201,
	1708: 0x5202,
	1709: 0x5205,
	1710: 0x5212,
	1711: 0x5213,
	1712: 0x5215,
	1713: 0x5216,
	1714: 0x5218,
	1715: 0x5222,
	1716: 0x5228,
	1717: 0x5231,
	1718: 0x5232,
	1719: 0x5235,
	1720: 0x523C,
	1721: 0x5245,
	1722: 0x5249,
	1723: 0x5255,
	1724: 0x5257,
	1725: 0x5258,
	1726: 0x525A,
	1727: 0x525C,
	1728: 0x525F,
	1729: 0x5260,
	1730: 0x5261,
	1731: 0x5266,
	1732: 0x526E,
	1733: 0x5277,
	1734: 0x5278,
	1735: 0x5279,
	1736: 0x5280,
	1737: 0x5282,
	1738: 0x5285,
	1739: 0x528A,
	1740: 0x528C,
	1741: 0x5293,
	1742: 0x5295,
	1743: 0x5296,
	1744: 0x5297,
	1745: 0x5298,
	1746: 0x529A,
	1747: 0x529C,
	1748: 0x52A4,
	1749: 0x52A5,
	1750: 0x52A6,
	1751: 0x52A7,
	1752: 0x52AF,
	1753: 0x52B0,
	1754: 0x52B6,
	1755: 0x52B7,
	1756: 0x52B8,
	1757: 0x52BA,
	1758: 0x52BB,
	1759: 0x52BD,
	1760: 0x52C0,
	1761: 0x52C4,
	1762: 0x52C6,
	1763: 0x52C8,
	1764: 0x52CC,
	1765: 0x52CF,
	1766: 0x52D1,
	1767: 0x52D4,
	1768: 0x52D6,
	1769: 0x52DB,
	1770: 0x52DC,
	1771: 0x52E1,
	1772: 0x52E5,
	1773: 0x52E8,
	1774: 0x52E9,
	1775: 0x52EA,
	1776: 0x52EC,
	1777: 0x52F0,
	1778: 0x52F1,
	1779: 0x52F4,
	1780: 0x52F6,
	1781: 0x52F7,
	1782: 0x5300,
	1783: 0x5303,
	1784: 0x530A,
	1785: 0x530B,
	1786: 0x530C,
	1787: 0x5311,
	1788: 0x5313,
	1789: 0x5318,
	1790: 0x531B,
	1791: 0x531C,
	1792: 0x531E,
	1793: 0x531F,
	1794: 0x5325,
	1795: 0x5327,
	1796: 0x5328,
	1797: 0x5329,
	1798: 0x532B,
	1799: 0x532C,
	1800: 0x532D,
	1801: 0x5330,
	1802: 0x5332,
	1803: 0x5335,
	1804: 0x533C,
	1805: 0x533D,
	1806: 0x533E,
	1807: 0x5342,
	1808: 0x534C,
	1809: 0x534B,
	1810: 0x5359,
	1811: 0x535B,
	1812: 0x5361,
	1813: 0x5363,
	1814: 0x5365,
	1815: 0x536C,
	1816: 0x536D,
	1817: 0x5372,
	1818: 0x5379,
	1819: 0x537E,
	1820: 0x5383,
	1821: 0x5387,
	1822: 0x5388,
	1823: 0x538E,
	1824: 0x5393,
	1825: 0x5394,
	1826: 0x5399,
	1827: 0x539D,
	1828: 0x53A1,
	1829: 0x53A4,
	1830: 0x53AA,
	1831: 0x53AB,
	1832: 0x53AF,
	1833: 0x53B2,
	1834: 0x53B4,
	1835: 0x53B5,
	1836: 0x53B7,
	1837: 0x53B8,
	1838: 0x53BA,
	1839: 0x53BD,
	1840: 0x53C0,
	1841: 0x53C5,
	1842: 0x53CF,
	1843: 0x53D2,
	1844: 0x53D3,
	1845: 0x53D5,
	1846: 0x53DA,
	1847: 0x53DD,
	1848: 0x53DE,
	1849: 0x53E0,
	1850: 0x53E6,
	1851: 0x53E7,
	1852: 0x53F5,
	1853: 0x5402,
	1854: 0x5413,
	1855: 0x541A,
	1856: 0x5421,
	1857: 0x5427,
	1858: 0x5428,
	1859: 0x542A,
	1860: 0x542F,
	1861: 0x5431,
	1862: 0x5434,
	1863: 0x5435,
	1864: 0x5443,
	1865: 0x5444,
	1866: 0x5447,
	1867: 0x544D,
	1868: 0x544F,
	1869: 0x545E,
	1870: 0x5462,
	1871: 0x5464,
	1872: 0x5466,
	1873: 0x5467,
	1874: 0x5469,
	1875: 0x546B,
	1876: 0x546D,
	1877: 0x546E,
	1878: 0x5474,
	1879: 0x547F,
	1880: 0x5481,
	1881: 0x5483,
	1882: 0x5485,
	1883: 0x5488,
	1884: 0x5489,
	1885: 0x548D,
	1886: 0x5491,
	1887: 0x5495,
	1888: 0x5496,
	1889: 0x549C,
	1890: 0x549F,
	1891: 0x54A1,
	1892: 0x54A6,
	1893: 0x54A7,
	1894: 0x54A9,
	1895: 0x54AA,
	1896: 0x54AD,
	1897: 0x54AE,
	1898: 0x54B1,
	1899: 0x54B7,
	1900: 0x54B9,
	1901: 0x54BA,
	1902: 0x54BB,
	1903: 0x54BF,
	1904: 0x54C6,
	1905: 0x54CA,
	1906: 0x54CD,
	1907: 0x54CE,
	1908: 0x54E0,
	1909: 0x54EA,
	1910: 0x54EC,
	1911: 0x54EF,
	1912: 0x54F6,
	1913: 0x54FC,
	1914: 0x54FE,
	1915: 0x54FF,
	1916: 0x5500,
	1917: 0x5501,
	1918: 0x5505,
	1919: 0x5508,
	1920: 0x5509,
	1921: 0x550C,
	1922: 0x550D,
	1923: 0x550E,
	1924: 0x5515,
	1925: 0x552A,
	1926: 0x552B,
	1927: 0x5532,
	1928: 0x5535,
	1929: 0x5536,
	1930: 0x553B,
	1931: 0x553C,
	1932: 0x553D,
	1933: 0x5541,
	1934: 0x5547,
	1935: 0x5549,
	1936: 0x554A,
	1937: 0x554D,
	1938: 0x5550,
	1939: 0x5551,
	1940: 0x5558,
	1941: 0x555A,
	1942: 0x555B,
	1943: 0x555E,
	1944: 0x5560,
	1945: 0x5561,
	1946: 0x5564,
	1947: 0x5566,
	1948: 0x557F,
	1949: 0x5581,
	1950: 0x5582,
	1951: 0x5586,
	1952: 0x5588,
	1953: 0x558E,
	1954: 0x558F,
	1955: 0x5591,
	1956: 0x5592,
	1957: 0x5593,
	1958: 0x5594,
	1959: 0x5597,
	1960: 0x55A3,
	1961: 0x55A4,
	1962: 0x55AD,
	1963: 0x55B2,
	1964: 0x55BF,
	1965: 0x55C1,
	1966: 0x55C3,
	1967: 0x55C6,
	1968: 0x55C9,
	1969: 0x55CB,
	1970: 0x55CC,
	1971: 0x55CE,
	1972: 0x55D1,
	1973: 0x55D2,
	1974: 0x55D3,
	1975: 0x55D7,
	1976: 0x55D8,
	1977: 0x55DB,
	1978: 0x55DE,
	1979: 0x55E2,
	1980: 0x55E9,
	1981: 0x55F6,
	1982: 0x55FF,
	1983: 0x5605,
	1984: 0x5608,
	1985: 0x560A,
	1986: 0x560D,
	1987: 0x560E,
	1988: 0x560F,
	1989: 0x5610,
	1990: 0x5611,
	1991: 0x5612,
	1992: 0x5619,
	1993: 0x562C,
	1994: 0x5630,
	1995: 0x5633,
	1996: 0x5635,
	1997: 0x5637,
	1998: 0x5639,
	1999: 0x563B,
	2000: 0x563C,
	2001: 0x563D,
	2002: 0x563F,
	2003: 0x5640,
	2004: 0x5641,
	2005: 0x5643,
	2006: 0x5644,
	2007: 0x5646,
	2008: 0x5649,
	2009: 0x564B,
	2010: 0x564D,
	2011: 0x564F,
	2012: 0x5654,
	2013: 0x565E,
	2014: 0x5660,
	2015: 0x5661,
	2016: 0x5662,
	2017: 0x5663,
	2018: 0x5666,
	2019: 0x5669,
	2020: 0x566D,
	2021: 0x566F,
	2022: 0x5671,
	2023: 0x5672,
	2024: 0x5675,
	2025: 0x5684,
	2026: 0x5685,
	2027: 0x5688,
	2028: 0x568B,
	2029: 0x568C,
	2030: 0x5695,
	2031: 0x5699,
	2032: 0x569A,
	2033: 0x569D,
	2034: 0x569E,
	2035: 0x569F,
	2036: 0x56A6,
	2037: 0x56A7,
	2038: 0x56A8,
	2039: 0x56A9,
	2040: 0x56AB,
	2041: 0x56AC,
	2042: 0x56AD,
	2043: 0x56B1,
	2044: 0x56B3,
	2045: 0x56B7,
	2046: 0x56BE,
	2047: 0x56C5,
	2048: 0x56C9,
	2049: 0x56CA,
	2050: 0x56CB,
	2051: 0x56CF,
	2052: 0x56D0,
	2053: 0x56CC,
	2054: 0x56CD,
	2055: 0x56D9,
	2056: 0x56DC,
	2057: 0x56DD,
	2058: 0x56DF,
	2059: 0x56E1,
	2060: 0x56E4,
	2061: 0x56E5,
	2062: 0x56E6,
	2063: 0x56E7,
	2064: 0x56E8,
	2065: 0x56F1,
	2066: 0x56EB,
	2067: 0x56ED,
	2068: 0x56F6,
	2069: 0x56F7,
	2070: 0x5701,
	2071: 0x5702,
	2072: 0x5707,
	2073: 0x570A,
	2074: 0x570C,
	2075: 0x5711,
	2076: 0x5715,
	2077: 0x571A,
	2078: 0x571B,
	2079: 0x571D,
	2080: 0x5720,
	2081: 0x5722,
	2082: 0x5723,
	2083: 0x5724,
	2084: 0x5725,
	2085: 0x5729,
	2086: 0x572A,
	2087: 0x572C,
	2088: 0x572E,
	2089: 0x572F,
	2090: 0x5733,
	2091: 0x5734,
	2092: 0x573D,
	2093: 0x573E,
	2094: 0x573F,
	2095: 0x5745,
	2096: 0x5746,
	2097: 0x574C,
	2098: 0x574D,
	2099: 0x5752,
	2100: 0x5762,
	2101: 0x5765,
	2102: 0x5767,
	2103: 0x5768,
	2104: 0x576B,
	2105: 0x576D,
	2106: 0x576E,
	2107: 0x576F,
	2108: 0x5770,
	2109: 0x5771,
	2110: 0x5773,
	2111: 0x5774,
	2112: 0x5775,
	2113: 0x5777,
	2114: 0x5779,
	2115: 0x577A,
	2116: 0x577B,
	2117: 0x577C,
	2118: 0x577E,
	2119: 0x5781,
	2120: 0x5783,
	2121: 0x578C,
	2122: 0x5794,
	2123: 0x5797,
	2124: 0x5799,
	2125: 0x579A,
	2126: 0x579C,
	2127: 0x579D,
	2128: 0x579E,
	2129: 0x579F,
	2130: 0x57A1,
	2131: 0x5795,
	2132: 0x57A7,
	2133: 0x57A8,
	2134: 0x57A9,
	2135: 0x57AC,
	2136: 0x57B8,
	2137: 0x57BD,
	2138: 0x57C7,
	2139: 0x57C8,
	2140: 0x57CC,
	2141: 0x57CF,
	2142: 0x57D5,
	2143: 0x57DD,
	2144: 0x57DE,
	2145: 0x57E4,
	2146: 0x57E6,
	2147: 0x57E7,
	2148: 0x57E9,
	2149: 0x57ED,
	2150: 0x57F0,
	2151: 0x57F5,
	2152: 0x57F6,
	2153: 0x57F8,
	2154: 0x57FD,
	2155: 0x57FE,
	2156: 0x57FF,
	2157: 0x5803,
	2158: 0x5804,
	2159: 0x5808,
	2160: 0x5809,
	2161: 0x57E1,
	2162: 0x580C,
	2163: 0x580D,
	2164: 0x581B,
	2165: 0x581E,
	2166: 0x581F,
	2167: 0x5820,
	2168: 0x5826,
	2169: 0x5827,
	2170: 0x582D,
	2171: 0x5832,
	2172: 0x5839,
	2173: 0x583F,
	2174: 0x5849,
	2175: 0x584C,
	2176: 0x584D,
	2177: 0x584F,
	2178: 0x5850,
	2179: 0x5855,
	2180: 0x585F,
	2181: 0x5861,
	2182: 0x5864,
	2183: 0x5867,
	2184: 0x5868,
	2185: 0x5878,
	2186: 0x587C,
	2187: 0x587F,
	2188: 0x5880,
	2189: 0x5881,
	2190: 0x5887,
	2191: 0x5888,
	2192: 0x5889,
	2193: 0x588A,
	2194: 0x588C,
	2195: 0x588D,
	2196: 0x588F,
	2197: 0x5890,
	2198: 0x5894,
	2199: 0x5896,
	2200: 0x589D,
	2201: 0x58A0,
	2202: 0x58A1,
	2203: 0x58A2,
	2204: 0x58A6,
	2205: 0x58A9,
	2206: 0x58B1,
	2207: 0x58B2,
	2208: 0x58C4,
	2209: 0x58BC,
	2210: 0x58C2,
	2211: 0x58C8,
	2212: 0x58CD,
	2213: 0x58CE,
	2214: 0x58D0,
	2215: 0x58D2,
	2216: 0x58D4,
	2217: 0x58D6,
	2218: 0x58DA,
	2219: 0x58DD,
	2220: 0x58E1,
	2221: 0x58E2,
	2222: 0x58E9,
	2223: 0x58F3,
	2224: 0x5905,
	2225: 0x5906,
	2226: 0x590B,
	2227: 0x590C,
	2228: 0x5912,
	2229: 0x5913,
	2230: 0x5914,
	2231: 0x8641,
	2232: 0x591D,
	2233: 0x5921,
	2234: 0x5923,
	2235: 0x5924,
	2236: 0x5928,
	2237: 0x592F,
	2238: 0x5930,
	2239: 0x5933,
	2240: 0x5935,
	2241: 0x5936,
	2242: 0x593F,
	2243: 0x5943,
	2244: 0x5946,
	2245: 0x5952,
	2246: 0x5953,
	2247: 0x5959,
	2248: 0x595B,
	2249: 0x595D,
	2250: 0x595E,
	2251: 0x595F,
	2252: 0x5961,
	2253: 0x5963,
	2254: 0x596B,
	2255: 0x596D,
	2256: 0x596F,
	2257: 0x5972,
	2258: 0x5975,
	2259: 0x5976,
	2260: 0x5979,
	2261: 0x597B,
	2262: 0x597C,
	2263: 0x598B,
	2264: 0x598C,
	2265: 0x598E,
	2266: 0x5992,
	2267: 0x5995,
	2268: 0x5997,
	2269: 0x599F,
	2270: 0x59A4,
	2271: 0x59A7,
	2272: 0x59AD,
	2273: 0x59AE,
	2274: 0x59AF,
	2275: 0x59B0,
	2276: 0x59B3,
	2277: 0x59B7,
	2278: 0x59BA,
	2279: 0x59BC,
	2280: 0x59C1,
	2281: 0x59C3,
	2282: 0x59C4,
	2283: 0x59C8,
	2284: 0x59CA,
	2285: 0x59CD,
	2286: 0x59D2,
	2287: 0x59DD,
	2288: 0x59DE,
	2289: 0x59DF,
	2290: 0x59E3,
	2291: 0x59E4,
	2292: 0x59E7,
	2293: 0x59EE,
	2294: 0x59EF,
	2295: 0x59F1,
	2296: 0x59F2,
	2297: 0x59F4,
	2298: 0x59F7,
	2299: 0x5A00,
	2300: 0x5A04,
	2301: 0x5A0C,
	2302: 0x5A0D,
	2303: 0x5A0E,
	2304: 0x5A12,
	2305: 0x5A13,
	2306: 0x5A1E,
	2307: 0x5A23,
	2308: 0x5A24,
	2309: 0x5A27,
	2310: 0x5A28,
	2311: 0x5A2A,
	2312: 0x5A2D,
	2313: 0x5A30,
	2314: 0x5A44,
	2315: 0x5A45,
	2316: 0x5A47,
	2317: 0x5A48,
	2318: 0x5A4C,
	2319: 0x5A50,
	2320: 0x5A55,
	2321: 0x5A5E,
	2322: 0x5A63,
	2323: 0x5A65,
	2324: 0x5A67,
	2325: 0x5A6D,
	2326: 0x5A77,
	2327: 0x5A7A,
	2328: 0x5A7B,
	2329: 0x5A7E,
	2330: 0x5A8B,
	2331: 0x5A90,
	2332: 0x5A93,
	2333: 0x5A96,
	2334: 0x5A99,
	2335: 0x5A9C,
	2336: 0x5A9E,
	2337: 0x5A9F,
	2338: 0x5AA0,
	2339: 0x5AA2,
	2340: 0x5AA7,
	2341: 0x5AAC,
	2342: 0x5AB1,
	2343: 0x5AB2,
	2344: 0x5AB3,
	2345: 0x5AB5,
	2346: 0x5AB8,
	2347: 0x5ABA,
	2348: 0x5ABB,
	2349: 0x5ABF,
	2350: 0x5AC4,
	2351: 0x5AC6,
	2352: 0x5AC8,
	2353: 0x5ACF,
	2354: 0x5ADA,
	2355: 0x5ADC,
	2356: 0x5AE0,
	2357: 0x5AE5,
	2358: 0x5AEA,
	2359: 0x5AEE,
	2360: 0x5AF5,
	2361: 0x5AF6,
	2362: 0x5AFD,
	2363: 0x5B00,
	2364: 0x5B01,
	2365: 0x5B08,
	2366: 0x5B17,
	2367: 0x5B34,
	2368: 0x5B19,
	2369: 0x5B1B,
	2370: 0x5B1D,
	2371: 0x5B21,
	2372: 0x5B25,
	2373: 0x5B2D,
	2374: 0x5B38,
	2375: 0x5B41,
	2376: 0x5B4B,
	2377: 0x5B4C,
	2378: 0x5B52,
	2379: 0x5B56,
	2380: 0x5B5E,
	2381: 0x5B68,
	2382: 0x5B6E,
	2383: 0x5B6F,
	2384: 0x5B7C,
	2385: 0x5B7D,
	2386: 0x5B7E,
	2387: 0x5B7F,
	2388: 0x5B81,
	2389: 0x5B84,
	2390: 0x5B86,
	2391: 0x5B8A,
	2392: 0x5B8E,
	2393: 0x5B90,
	2394: 0x5B91,
	2395: 0x5B93,
	2396: 0x5B94,
	2397: 0x5B96,
	2398: 0x5BA8,
	2399: 0x5BA9,
	2400: 0x5BAC,
	2401: 0x5BAD,
	2402: 0x5BAF,
	2403: 0x5BB1,
	2404: 0x5BB2,
	2405: 0x5BB7,
	2406: 0x5BBA,
	2407: 0x5BBC,
	2408: 0x5BC0,
	2409: 0x5BC1,
	2410: 0x5BCD,
	2411: 0x5BCF,
	2412: 0x5BD6,
	2413: 0x5BD7,
	2414: 0x5BD8,
	2415: 0x5BD9,
	2416: 0x5BDA,
	2417: 0x5BE0,
	2418: 0x5BEF,
	2419: 0x5BF1,
	2420: 0x5BF4,
	2421: 0x5BFD,
	2422: 0x5C0C,
	2423: 0x5C17,
	2424: 0x5C1E,
	2425: 0x5C1F,
	2426: 0x5C23,
	2427: 0x5C26,
	2428: 0x5C29,
	2429: 0x5C2B,
	2430: 0x5C2C,
	2431: 0x5C2E,
	2432: 0x5C30,
	2433: 0x5C32,
	2434: 0x5C35,
	2435: 0x5C36,
	2436: 0x5C59,
	2437: 0x5C5A,
	2438: 0x5C5C,
	2439: 0x5C62,
	2440: 0x5C63,
	2441: 0x5C67,
	2442: 0x5C68,
	2443: 0x5C69,
	2444: 0x5C6D,
	2445: 0x5C70,
	2446: 0x5C74,
	2447: 0x5C75,
	2448: 0x5C7A,
	2449: 0x5C7B,
	2450: 0x5C7C,
	2451: 0x5C7D,
	2452: 0x5C87,
	2453: 0x5C88,
	2454: 0x5C8A,
	2455: 0x5C8F,
	2456: 0x5C92,
	2457: 0x5C9D,
	2458: 0x5C9F,
	2459: 0x5CA0,
	2460: 0x5CA2,
	2461: 0x5CA3,
	2462: 0x5CA6,
	2463: 0x5CAA,
	2464: 0x5CB2,
	2465: 0x5CB4,
	2466: 0x5CB5,
	2467: 0x5CBA,
	2468: 0x5CC9,
	2469: 0x5CCB,
	2470: 0x5CD2,
	2471: 0x5CDD,
	2472: 0x5CD7,
	2473: 0x5CEE,
	2474: 0x5CF1,
	2475: 0x5CF2,
	2476: 0x5CF4,
	2477: 0x5D01,
	2478: 0x5D06,
	2479: 0x5D0D,
	2480: 0x5D12,
	2481: 0x5D2B,
	2482: 0x5D23,
	2483: 0x5D24,
	2484: 0x5D26,
	2485: 0x5D27,
	2486: 0x5D31,
	2487: 0x5D34,
	2488: 0x5D39,
	2489: 0x5D3D,
	2490: 0x5D3F,
	2491: 0x5D42,
	2492: 0x5D43,
	2493: 0x5D46,
	2494: 0x5D48,
	2495: 0x5D55,
	2496: 0x5D51,
	2497: 0x5D59,
	2498: 0x5D4A,
	2499: 0x5D5F,
	2500: 0x5D60,
	2501: 0x5D61,
	2502: 0x5D62,
	2503: 0x5D64,
	2504: 0x5D6A,
	2505: 0x5D6D,
	2506: 0x5D70,
	2507: 0x5D79,
	2508: 0x5D7A,
	2509: 0x5D7E,
	2510: 0x5D7F,
	2511: 0x5D81,
	2512: 0x5D83,
	2513: 0x5D88,
	2514: 0x5D8A,
	2515: 0x5D92,
	2516: 0x5D93,
	2517: 0x5D94,
	2518: 0x5D95,
	2519: 0x5D99,
	2520: 0x5D9B,
	2521: 0x5D9F,
	2522: 0x5DA0,
	2523: 0x5DA7,
	2524: 0x5DAB,
	2525: 0x5DB0,
	2526: 0x5DB4,
	2527: 0x5DB8,
	2528: 0x5DB9,
	2529: 0x5DC3,
	2530: 0x5DC7,
	2531: 0x5DCB,
	2532: 0x5DD0,
	2533: 0x5DCE,
	2534: 0x5DD8,
	2535: 0x5DD9,
	2536: 0x5DE0,
	2537: 0x5DE4,
	2538: 0x5DE9,
	2539: 0x5DF8,
	2540: 0x5DF9,
	2541: 0x5E00,
	2542: 0x5E07,
	2543: 0x5E0D,
	2544: 0x5E12,
	2545: 0x5E14,
	2546: 0x5E15,
	2547: 0x5E18,
	2548: 0x5E1F,
	2549: 0x5E20,
	2550: 0x5E2E,
	2551: 0x5E28,
	2552: 0x5E32,
	2553: 0x5E35,
	2554: 0x5E3E,
	2555: 0x5E4B,
	2556: 0x5E50,
	2557: 0x5E49,
	2558: 0x5E51,
	2559: 0x5E56,
	2560: 0x5E58,
	2561: 0x5E5B,
	2562: 0x5E5C,
	2563: 0x5E5E,
	2564: 0x5E68,
	2565: 0x5E6A,
	2566: 0x5E6B,
	2567: 0x5E6C,
	2568: 0x5E6D,
	2569: 0x5E6E,
	2570: 0x5E70,
	2571: 0x5E80,
	2572: 0x5E8B,
	2573: 0x5E8E,
	2574: 0x5EA2,
	2575: 0x5EA4,
	2576: 0x5EA5,
	2577: 0x5EA8,
	2578: 0x5EAA,
	2579: 0x5EAC,
	2580: 0x5EB1,
	2581: 0x5EB3,
	2582: 0x5EBD,
	2583: 0x5EBE,
	2584: 0x5EBF,
	2585: 0x5EC6,
	2586: 0x5ECC,
	2587: 0x5ECB,
	2588: 0x5ECE,
	2589: 0x5ED1,
	2590: 0x5ED2,
	2591: 0x5ED4,
	2592: 0x5ED5,
	2593: 0x5EDC,
	2594: 0x5EDE,
	2595: 0x5EE5,
	2596: 0x5EEB,
	2597: 0x5F02,
	2598: 0x5F06,
	2599: 0x5F07,
	2600: 0x5F08,
	2601: 0x5F0E,
	2602: 0x5F19,
	2603: 0x5F1C,
	2604: 0x5F1D,
	2605: 0x5F21,
	2606: 0x5F22,
	2607: 0x5F23,
	2608: 0x5F24,
	2609: 0x5F28,
	2610: 0x5F2B,
	2611: 0x5F2C,
	2612: 0x5F2E,
	2613: 0x5F30,
	2614: 0x5F34,
	2615: 0x5F36,
	2616: 0x5F3B,
	2617: 0x5F3D,
	2618: 0x5F3F,
	2619: 0x5F40,
	2620: 0x5F44,
	2621: 0x5F45,
	2622: 0x5F47,
	2623: 0x5F4D,
	2624: 0x5F50,
	2625: 0x5F54,
	2626: 0x5F58,
	2627: 0x5F5B,
	2628: 0x5F60,
	2629: 0x5F63,
	2630: 0x5F64,
	2631: 0x5F67,
	2632: 0x5F6F,
	2633: 0x5F72,
	2634: 0x5F74,
	2635: 0x5F75,
	2636: 0x5F78,
	2637: 0x5F7A,
	2638: 0x5F7D,
	2639: 0x5F7E,
	2640: 0x5F89,
	2641: 0x5F8D,
	2642: 0x5F8F,
	2643: 0x5F96,
	2644: 0x5F9C,
	2645: 0x5F9D,
	2646: 0x5FA2,
	2647: 0x5FA7,
	2648: 0x5FAB,
	2649: 0x5FA4,
	2650: 0x5FAC,
	2651: 0x5FAF,
	2652: 0x5FB0,
	2653: 0x5FB1,
	2654: 0x5FB8,
	2655: 0x5FC4,
	2656: 0x5FC7,
	2657: 0x5FC8,
	2658: 0x5FC9,
	2659: 0x5FCB,
	2660: 0x5FD0,
	2661: 0x5FD1,
	2662: 0x5FD2,
	2663: 0x5FD3,
	2664: 0x5FD4,
	2665: 0x5FDE,
	2666: 0x5FE1,
	2667: 0x5FE2,
	2668: 0x5FE8,
	2669: 0x5FE9,
	2670: 0x5FEA,
	2671: 0x5FEC,
	2672: 0x5FED,
	2673: 0x5FEE,
	2674: 0x5FEF,
	2675: 0x5FF2,
	2676: 0x5FF3,
	2677: 0x5FF6,
	2678: 0x5FFA,
	2679: 0x5FFC,
	2680: 0x6007,
	2681: 0x600A,
	2682: 0x600D,
	2683: 0x6013,
	2684: 0x6014,
	2685: 0x6017,
	2686: 0x6018,
	2687: 0x601A,
	2688: 0x601F,
	2689: 0x6024,
	2690: 0x602D,
	2691: 0x6033,
	2692: 0x6035,
	2693: 0x6040,
	2694: 0x6047,
	2695: 0x6048,
	2696: 0x6049,
	2697: 0x604C,
	2698: 0x6051,
	2699: 0x6054,
	2700: 0x6056,
	2701: 0x6057,
	2702: 0x605D,
	2703: 0x6061,
	2704: 0x6067,
	2705: 0x6071,
	2706: 0x607E,
	2707: 0x607F,
	2708: 0x6082,
	2709: 0x6086,
	2710: 0x6088,
	2711: 0x608A,
	2712: 0x608E,
	2713: 0x6091,
	2714: 0x6093,
	2715: 0x6095,
	2716: 0x6098,
	2717: 0x609D,
	2718: 0x609E,
	2719: 0x60A2,
	2720: 0x60A4,
	2721: 0x60A5,
	2722: 0x60A8,
	2723: 0x60B0,
	2724: 0x60B1,
	2725: 0x60B7,
	2726: 0x60BB,
	2727: 0x60BE,
	2728: 0x60C2,
	2729: 0x60C4,
	2730: 0x60C8,
	2731: 0x60C9,
	2732: 0x60CA,
	2733: 0x60CB,
	2734: 0x60CE,
	2735: 0x60CF,
	2736: 0x60D4,
	2737: 0x60D5,
	2738: 0x60D9,
	2739: 0x60DB,
	2740: 0x60DD,
	2741: 0x60DE,
	2742: 0x60E2,
	2743: 0x60E5,
	2744: 0x60F2,
	2745: 0x60F5,
	2746: 0x60F8,
	2747: 0x60FC,
	2748: 0x60FD,
	2749: 0x6102,
	2750: 0x6107,
	2751: 0x610A,
	2752: 0x610C,
	2753: 0x6110,
	2754: 0x6111,
	2755: 0x6112,
	2756: 0x6113,
	2757: 0x6114,
	2758: 0x6116,
	2759: 0x6117,
	2760: 0x6119,
	2761: 0x611C,
	2762: 0x611E,
	2763: 0x6122,
	2764: 0x612A,
	2765: 0x612B,
	2766: 0x6130,
	2767: 0x6131,
	2768: 0x6135,
	2769: 0x6136,
	2770: 0x6137,
	2771: 0x6139,
	2772: 0x6141,
	2773: 0x6145,
	2774: 0x6146,
	2775: 0x6149,
	2776: 0x615E,
	2777: 0x6160,
	2778: 0x616C,
	2779: 0x6172,
	2780: 0x6178,
	2781: 0x617B,
	2782: 0x617C,
	2783: 0x617F,
	2784: 0x6180,
	2785: 0x6181,
	2786: 0x6183,
	2787: 0x6184,
	2788: 0x618B,
	2789: 0x618D,
	2790: 0x6192,
	2791: 0x6193,
	2792: 0x6197,
	2793: 0x6198,
	2794: 0x619C,
	2795: 0x619D,
	2796: 0x619F,
	2797: 0x61A0,
	2798: 0x61A5,
	2799: 0x61A8,
	2800: 0x61AA,
	2801: 0x61AD,
	2802: 0x61B8,
	2803: 0x61B9,
	2804: 0x61BC,
	2805: 0x61C0,
	2806: 0x61C1,
	2807: 0x61C2,
	2808: 0x61CE,
	2809: 0x61CF,
	2810: 0x61D5,
	2811: 0x61DC,
	2812: 0x61DD,
	2813: 0x61DE,
	2814: 0x61DF,
	2815: 0x61E1,
	2816: 0x61E2,
	2817: 0x61E7,
	2818: 0x61E9,
	2819: 0x61E5,
	2820: 0x61EC,
	2821: 0x61ED,
	2822: 0x61EF,
	2823: 0x6201,
	2824: 0x6203,
	2825: 0x6204,
	2826: 0x6207,
	2827: 0x6213,
	2828: 0x6215,
	2829: 0x621C,
	2830: 0x6220,
	2831: 0x6222,
	2832: 0x6223,
	2833: 0x6227,
	2834: 0x6229,
	2835: 0x622B,
	2836: 0x6239,
	2837: 0x623D,
	2838: 0x6242,
	2839: 0x6243,
	2840: 0x6244,
	2841: 0x6246,
	2842: 0x624C,
	2843: 0x6250,
	2844: 0x6251,
	2845: 0x6252,
	2846: 0x6254,
	2847: 0x6256,
	2848: 0x625A,
	2849: 0x625C,
	2850: 0x6264,
	2851: 0x626D,
	2852: 0x626F,
	2853: 0x6273,
	2854: 0x627A,
	2855: 0x627D,
	2856: 0x628D,
	2857: 0x628E,
	2858: 0x628F,
	2859: 0x6290,
	2860: 0x62A6,
	2861: 0x62A8,
	2862: 0x62B3,
	2863: 0x62B6,
	2864: 0x62B7,
	2865: 0x62BA,
	2866: 0x62BE,
	2867: 0x62BF,
	2868: 0x62C4,
	2869: 0x62CE,
	2870: 0x62D5,
	2871: 0x62D6,
	2872: 0x62DA,
	2873: 0x62EA,
	2874: 0x62F2,
	2875: 0x62F4,
	2876: 0x62FC,
	2877: 0x62FD,
	2878: 0x6303,
	2879: 0x6304,
	2880: 0x630A,
	2881: 0x630B,
	2882: 0x630D,
	2883: 0x6310,
	2884: 0x6313,
	2885: 0x6316,
	2886: 0x6318,
	2887: 0x6329,
	2888: 0x632A,
	2889: 0x632D,
	2890: 0x6335,
	2891: 0x6336,
	2892: 0x6339,
	2893: 0x633C,
	2894: 0x6341,
	2895: 0x6342,
	2896: 0x6343,
	2897: 0x6344,
	2898: 0x6346,
	2899: 0x634A,
	2900: 0x634B,
	2901: 0x634E,
	2902: 0x6352,
	2903: 0x6353,
	2904: 0x6354,
	2905: 0x6358,
	2906: 0x635B,
	2907: 0x6365,
	2908: 0x6366,
	2909: 0x636C,
	2910: 0x636D,
	2911: 0x6371,
	2912: 0x6374,
	2913: 0x6375,
	2914: 0x6378,
	2915: 0x637C,
	2916: 0x637D,
	2917: 0x637F,
	2918: 0x6382,
	2919: 0x6384,
	2920: 0x6387,
	2921: 0x638A,
	2922: 0x6390,
	2923: 0x6394,
	2924: 0x6395,
	2925: 0x6399,
	2926: 0x639A,
	2927: 0x639E,
	2928: 0x63A4,
	2929: 0x63A6,
	2930: 0x63AD,
	2931: 0x63AE,
	2932: 0x63AF,
	2933: 0x63BD,
	2934: 0x63C1,
	2935: 0x63C5,
	2936: 0x63C8,
	2937: 0x63CE,
	2938: 0x63D1,
	2939: 0x63D3,
	2940: 0x63D4,
	2941: 0x63D5,
	2942: 0x63DC,
	2943: 0x63E0,
	2944: 0x63E5,
	2945: 0x63EA,
	2946: 0x63EC,
	2947: 0x63F2,
	2948: 0x63F3,
	2949: 0x63F5,
	2950: 0x63F8,
	2951: 0x63F9,
	2952: 0x6409,
	2953: 0x640A,
	2954: 0x6410,
	2955: 0x6412,
	2956: 0x6414,
	2957: 0x6418,
	2958: 0x641E,
	2959: 0x6420,
	2960: 0x6422,
	2961: 0x6424,
	2962: 0x6425,
	2963: 0x6429,
	2964: 0x642A,
	2965: 0x642F,
	2966: 0x6430,
	2967: 0x6435,
	2968: 0x643D,
	2969: 0x643F,
	2970: 0x644B,
	2971: 0x644F,
	2972: 0x6451,
	2973: 0x6452,
	2974: 0x6453,
	2975: 0x6454,
	2976: 0x645A,
	2977: 0x645B,
	2978: 0x645C,
	2979: 0x645D,
	2980: 0x645F,
	2981: 0x6460,
	2982: 0x6461,
	2983: 0x6463,
	2984: 0x646D,
	2985: 0x6473,
	2986: 0x6474,
	2987: 0x647B,
	2988: 0x647D,
	2989: 0x6485,
	2990: 0x6487,
	2991: 0x648F,
	2992: 0x6490,
	2993: 0x6491,
	2994: 0x6498,
	2995: 0x6499,
	2996: 0x649B,
	2997: 0x649D,
	2998: 0x649F,
	2999: 0x64A1,
	3000: 0x64A3,
	3001: 0x64A6,
	3002: 0x64A8,
	3003: 0x64AC,
	3004: 0x64B3,
	3005: 0x64BD,
	3006: 0x64BE,
	3007: 0x64BF,
	3008: 0x64C4,
	3009: 0x64C9,
	3010: 0x64CA,
	3011: 0x64CB,
	3012: 0x64CC,
	3013: 0x64CE,
	3014: 0x64D0,
	3015: 0x64D1,
	3016: 0x64D5,
	3017: 0x64D7,
	3018: 0x64E4,
	3019: 0x64E5,
	3020: 0x64E9,
	3021: 0x64EA,
	3022: 0x64ED,
	3023: 0x64F0,
	3024: 0x64F5,
	3025: 0x64F7,
	3026: 0x64FB,
	3027: 0x64FF,
	3028: 0x6501,
	3029: 0x6504,
	3030: 0x6508,
	3031: 0x6509,
	3032: 0x650A,
	3033: 0x650F,
	3034: 0x6513,
	3035: 0x6514,
	3036: 0x6516,
	3037: 0x6519,
	3038: 0x651B,
	3039: 0x651E,
	3040: 0x651F,
	3041: 0x6522,
	3042: 0x6526,
	3043: 0x6529,
	3044: 0x652E,
	3045: 0x6531,
	3046: 0x653A,
	3047: 0x653C,
	3048: 0x653D,
	3049: 0x6543,
	3050: 0x6547,
	3051: 0x6549,
	3052: 0x6550,
	3053: 0x6552,
	3054: 0x6554,
	3055: 0x655F,
	3056: 0x6560,
	3057: 0x6567,
	3058: 0x656B,
	3059: 0x657A,
	3060: 0x657D,
	3061: 0x6581,
	3062: 0x6585,
	3063: 0x658A,
	3064: 0x6592,
	3065: 0x6595,
	3066: 0x6598,
	3067: 0x659D,
	3068: 0x65A0,
	3069: 0x65A3,
	3070: 0x65A6,
	3071: 0x65AE,
	3072: 0x65B2,
	3073: 0x65B3,
	3074: 0x65B4,
	3075: 0x65BF,
	3076: 0x65C2,
	3077: 0x65C8,
	3078: 0x65C9,
	3079: 0x65CE,
	3080: 0x65D0,
	3081: 0x65D4,
	3082: 0x65D6,
	3083: 0x65D8,
	3084: 0x65DF,
	3085: 0x65F0,
	3086: 0x65F2,
	3087: 0x65F4,
	3088: 0x65F5,
	3089: 0x65F9,
	3090: 0x65FE,
	3091: 0x65FF,
	3092: 0x6600,
	3093: 0x6604,
	3094: 0x6608,
	3095: 0x6609,
	3096: 0x660D,
	3097: 0x6611,
	3098: 0x6612,
	3099: 0x6615,
	3100: 0x6616,
	3101: 0x661D,
	3102: 0x661E,
	3103: 0x6621,
	3104: 0x6622,
	3105: 0x6623,
	3106: 0x6624,
	3107: 0x6626,
	3108: 0x6629,
	3109: 0x662A,
	3110: 0x662B,
	3111: 0x662C,
	3112: 0x662E,
	3113: 0x6630,
	3114: 0x6631,
	3115: 0x6633,
	3116: 0x6639,
	3117: 0x6637,
	3118: 0x6640,
	3119: 0x6645,
	3120: 0x6646,
	3121: 0x664A,
	3122: 0x664C,
	3123: 0x6651,
	3124: 0x664E,
	3125: 0x6657,
	3126: 0x6658,
	3127: 0x6659,
	3128: 0x665B,
	3129: 0x665C,
	3130: 0x6660,
	3131: 0x6661,
	3132: 0x66FB,
	3133: 0x666A,
	3134: 0x666B,
	3135: 0x666C,
	3136: 0x667E,
	3137: 0x6673,
	3138: 0x6675,
	3139: 0x667F,
	3140: 0x6677,
	3141: 0x6678,
	3142: 0x6679,
	3143: 0x667B,
	3144: 0x6680,
	3145: 0x667C,
	3146: 0x668B,
	3147: 0x668C,
	3148: 0x668D,
	3149: 0x6690,
	3150: 0x6692,
	3151: 0x6699,
	3152: 0x669A,
	3153: 0x669B,
	3154: 0x669C,
	3155: 0x669F,
	3156: 0x66A0,
	3157: 0x66A4,
	3158: 0x66AD,
	3159: 0x66B1,
	3160: 0x66B2,
	3161: 0x66B5,
	3162: 0x66BB,
	3163: 0x66BF,
	3164: 0x66C0,
	3165: 0x66C2,
	3166: 0x66C3,
	3167: 0x66C8,
	3168: 0x66CC,
	3169: 0x66CE,
	3170: 0x66CF,
	3171: 0x66D4,
	3172: 0x66DB,
	3173: 0x66DF,
	3174: 0x66E8,
	3175: 0x66EB,
	3176: 0x66EC,
	3177: 0x66EE,
	3178: 0x66FA,
	3179: 0x6705,
	3180: 0x6707,
	3181: 0x670E,
	3182: 0x6713,
	3183: 0x6719,
	3184: 0x671C,
	3185: 0x6720,
	3186: 0x6722,
	3187: 0x6733,
	3188: 0x673E,
	3189: 0x6745,
	3190: 0x6747,
	3191: 0x6748,
	3192: 0x674C,
	3193: 0x6754,
	3194: 0x6755,
	3195: 0x675D,
	3196: 0x6766,
	3197: 0x676C,
	3198: 0x676E,
	3199: 0x6774,
	3200: 0x6776,
	3201: 0x677B,
	3202: 0x6781,
	3203: 0x6784,
	3204: 0x678E,
	3205: 0x678F,
	3206: 0x6791,
	3207: 0x6793,
	3208: 0x6796,
	3209: 0x6798,
	3210: 0x6799,
	3211: 0x679B,
	3212: 0x67B0,
	3213: 0x67B1,
	3214: 0x67B2,
	3215: 0x67B5,
	3216: 0x67BB,
	3217: 0x67BC,
	3218: 0x67BD,
	3219: 0x67F9,
	3220: 0x67C0,
	3221: 0x67C2,
	3222: 0x67C3,
	3223: 0x67C5,
	3224: 0x67C8,
	3225: 0x67C9,
	3226: 0x67D2,
	3227: 0x67D7,
	3228: 0x67D9,
	3229: 0x67DC,
	3230: 0x67E1,
	3231: 0x67E6,
	3232: 0x67F0,
	3233: 0x67F2,
	3234: 0x67F6,
	3235: 0x67F7,
	3236: 0x6852,
	3237: 0x6814,
	3238: 0x6819,
	3239: 0x681D,
	3240: 0x681F,
	3241: 0x6828,
	3242: 0x6827,
	3243: 0x682C,
	3244: 0x682D,
	3245: 0x682F,
	3246: 0x6830,
	3247: 0x6831,
	3248: 0x6833,
	3249: 0x683B,
	3250: 0x683F,
	3251: 0x6844,
	3252: 0x6845,
	3253: 0x684A,
	3254: 0x684C,
	3255: 0x6855,
	3256: 0x6857,
	3257: 0x6858,
	3258: 0x685B,
	3259: 0x686B,
	3260: 0x686E,
	3261: 0x686F,
	3262: 0x6870,
	3263: 0x6871,
	3264: 0x6872,
	3265: 0x6875,
	3266: 0x6879,
	3267: 0x687A,
	3268: 0x687B,
	3269: 0x687C,
	3270: 0x6882,
	3271: 0x6884,
	3272: 0x6886,
	3273: 0x6888,
	3274: 0x6896,
	3275: 0x6898,
	3276: 0x689A,
	3277: 0x689C,
	3278: 0x68A1,
	3279: 0x68A3,
	3280: 0x68A5,
	3281: 0x68A9,
	3282: 0x68AA,
	3283: 0x68AE,
	3284: 0x68B2,
	3285: 0x68BB,
	3286: 0x68C5,
	3287: 0x68C8,
	3288: 0x68CC,
	3289: 0x68CF,
	3290: 0x68D0,
	3291: 0x68D1,
	3292: 0x68D3,
	3293: 0x68D6,
	3294: 0x68D9,
	3295: 0x68DC,
	3296: 0x68DD,
	3297: 0x68E5,
	3298: 0x68E8,
	3299: 0x68EA,
	3300: 0x68EB,
	3301: 0x68EC,
	3302: 0x68ED,
	3303: 0x68F0,
	3304: 0x68F1,
	3305: 0x68F5,
	3306: 0x68F6,
	3307: 0x68FB,
	3308: 0x68FC,
	3309: 0x68FD,
	3310: 0x6906,
	3311: 0x6909,
	3312: 0x690A,
	3313: 0x6910,
	3314: 0x6911,
	3315: 0x6913,
	3316: 0x6916,
	3317: 0x6917,
	3318: 0x6931,
	3319: 0x6933,
	3320: 0x6935,
	3321: 0x6938,
	3322: 0x693B,
	3323: 0x6942,
	3324: 0x6945,
	3325: 0x6949,
	3326: 0x694E,
	3327: 0x6957,
	3328: 0x695B,
	3329: 0x6963,
	3330: 0x6964,
	3331: 0x6965,
	3332: 0x6966,
	3333: 0x6968,
	3334: 0x6969,
	3335: 0x696C,
	3336: 0x6970,
	3337: 0x6971,
	3338: 0x6972,
	3339: 0x697A,
	3340: 0x697B,
	3341: 0x697F,
	3342: 0x6980,
	3343: 0x698D,
	3344: 0x6992,
	3345: 0x6996,
	3346: 0x6998,
	3347: 0x69A1,
	3348: 0x69A5,
	3349: 0x69A6,
	3350: 0x69A8,
	3351: 0x69AB,
	3352: 0x69AD,
	3353: 0x69AF,
	3354: 0x69B7,
	3355: 0x69B8,
	3356: 0x69BA,
	3357: 0x69BC,
	3358: 0x69C5,
	3359: 0x69C8,
	3360: 0x69D1,
	3361: 0x69D6,
	3362: 0x69D7,
	3363: 0x69E2,
	3364: 0x69E5,
	3365: 0x69EE,
	3366: 0x69EF,
	3367: 0x69F1,
	3368: 0x69F3,
	3369: 0x69F5,
	3370: 0x69FE,
	3371: 0x6A00,
	3372: 0x6A01,
	3373: 0x6A03,
	3374: 0x6A0F,
	3375: 0x6A11,
	3376: 0x6A15,
	3377: 0x6A1A,
	3378: 0x6A1D,
	3379: 0x6A20,
	3380: 0x6A24,
	3381: 0x6A28,
	3382: 0x6A30,
	3383: 0x6A32,
	3384: 0x6A34,
	3385: 0x6A37,
	3386: 0x6A3B,
	3387: 0x6A3E,
	3388: 0x6A3F,
	3389: 0x6A45,
	3390: 0x6A46,
	3391: 0x6A49,
	3392: 0x6A4A,
	3393: 0x6A4E,
	3394: 0x6A50,
	3395: 0x6A51,
	3396: 0x6A52,
	3397: 0x6A55,
	3398: 0x6A56,
	3399: 0x6A5B,
	3400: 0x6A64,
	3401: 0x6A67,
	3402: 0x6A6A,
	3403: 0x6A71,
	3404: 0x6A73,
	3405: 0x6A7E,
	3406: 0x6A81,
	3407: 0x6A83,
	3408: 0x6A86,
	3409: 0x6A87,
	3410: 0x6A89,
	3411: 0x6A8B,
	3412: 0x6A91,
	3413: 0x6A9B,
	3414: 0x6A9D,
	3415: 0x6A9E,
	3416: 0x6A9F,
	3417: 0x6AA5,
	3418: 0x6AAB,
	3419: 0x6AAF,
	3420: 0x6AB0,
	3421: 0x6AB1,
	3422: 0x6AB4,
	3423: 0x6ABD,
	3424: 0x6ABE,
	3425: 0x6ABF,
	3426: 0x6AC6,
	3427: 0x6AC9,
	3428: 0x6AC8,
	3429: 0x6ACC,
	3430: 0x6AD0,
	3431: 0x6AD4,
	3432: 0x6AD5,
	3433: 0x6AD6,
	3434: 0x6ADC,
	3435: 0x6ADD,
	3436: 0x6AE4,
	3437: 0x6AE7,
	3438: 0x6AEC,
	3439: 0x6AF0,
	3440: 0x6AF1,
	3441: 0x6AF2,
	3442: 0x6AFC,
	3443: 0x6AFD,
	3444: 0x6B02,
	3445: 0x6B03,
	3446: 0x6B06,
	3447: 0x6B07,
	3448: 0x6B09,
	3449: 0x6B0F,
	3450: 0x6B10,
	3451: 0x6B11,
	3452: 0x6B17,
	3453: 0x6B1B,
	3454: 0x6B1E,
	3455: 0x6B24,
	3456: 0x6B28,
	3457: 0x6B2B,
	3458: 0x6B2C,
	3459: 0x6B2F,
	3460: 0x6B35,
	3461: 0x6B36,
	3462: 0x6B3B,
	3463: 0x6B3F,
	3464: 0x6B46,
	3465: 0x6B4A,
	3466: 0x6B4D,
	3467: 0x6B52,
	3468: 0x6B56,
	3469: 0x6B58,
	3470: 0x6B5D,
	3471: 0x6B60,
	3472: 0x6B67,
	3473: 0x6B6B,
	3474: 0x6B6E,
	3475: 0x6B70,
	3476: 0x6B75,
	3477: 0x6B7D,
	3478: 0x6B7E,
	3479: 0x6B82,
	3480: 0x6B85,
	3481: 0x6B97,
	3482: 0x6B9B,
	3483: 0x6B9F,
	3484: 0x6BA0,
	3485: 0x6BA2,
	3486: 0x6BA3,
	3487: 0x6BA8,
	3488: 0x6BA9,
	3489: 0x6BAC,
	3490: 0x6BAD,
	3491: 0x6BAE,
	3492: 0x6BB0,
	3493: 0x6BB8,
	3494: 0x6BB9,
	3495: 0x6BBD,
	3496: 0x6BBE,
	3497: 0x6BC3,
	3498: 0x6BC4,
	3499: 0x6BC9,
	3500: 0x6BCC,
	3501: 0x6BD6,
	3502: 0x6BDA,
	3503: 0x6BE1,
	3504: 0x6BE3,
	3505: 0x6BE6,
	3506: 0x6BE7,
	3507: 0x6BEE,
	3508: 0x6BF1,
	3509: 0x6BF7,
	3510: 0x6BF9,
	3511: 0x6BFF,
	3512: 0x6C02,
	3513: 0x6C04,
	3514: 0x6C05,
	3515: 0x6C09,
	3516: 0x6C0D,
	3517: 0x6C0E,
	3518: 0x6C10,
	3519: 0x6C12,
	3520: 0x6C19,
	3521: 0x6C1F,
	3522: 0x6C26,
	3523: 0x6C27,
	3524: 0x6C28,
	3525: 0x6C2C,
	3526: 0x6C2E,
	3527: 0x6C33,
	3528: 0x6C35,
	3529: 0x6C36,
	3530: 0x6C3A,
	3531: 0x6C3B,
	3532: 0x6C3F,
	3533: 0x6C4A,
	3534: 0x6C4B,
	3535: 0x6C4D,
	3536: 0x6C4F,
	3537: 0x6C52,
	3538: 0x6C54,
	3539: 0x6C59,
	3540: 0x6C5B,
	3541: 0x6C5C,
	3542: 0x6C6B,
	3543: 0x6C6D,
	3544: 0x6C6F,
	3545: 0x6C74,
	3546: 0x6C76,
	3547: 0x6C78,
	3548: 0x6C79,
	3549: 0x6C7B,
	3550: 0x6C85,
	3551: 0x6C86,
	3552: 0x6C87,
	3553: 0x6C89,
	3554: 0x6C94,
	3555: 0x6C95,
	3556: 0x6C97,
	3557: 0x6C98,
	3558: 0x6C9C,
	3559: 0x6C9F,
	3560: 0x6CB0,
	3561: 0x6CB2,
	3562: 0x6CB4,
	3563: 0x6CC2,
	3564: 0x6CC6,
	3565: 0x6CCD,
	3566: 0x6CCF,
	3567: 0x6CD0,
	3568: 0x6CD1,
	3569: 0x6CD2,
	3570: 0x6CD4,
	3571: 0x6CD6,
	3572: 0x6CDA,
	3573: 0x6CDC,
	3574: 0x6CE0,
	3575: 0x6CE7,
	3576: 0x6CE9,
	3577: 0x6CEB,
	3578: 0x6CEC,
	3579: 0x6CEE,
	3580: 0x6CF2,
	3581: 0x6CF4,
	3582: 0x6D04,
	3583: 0x6D07,
	3584: 0x6D0A,
	3585: 0x6D0E,
	3586: 0x6D0F,
	3587: 0x6D11,
	3588: 0x6D13,
	3589: 0x6D1A,
	3590: 0x6D26,
	3591: 0x6D27,
	3592: 0x6D28,
	3593: 0x6C67,
	3594: 0x6D2E,
	3595: 0x6D2F,
	3596: 0x6D31,
	3597: 0x6D39,
	3598: 0x6D3C,
	3599: 0x6D3F,
	3600: 0x6D57,
	3601: 0x6D5E,
	3602: 0x6D5F,
	3603: 0x6D61,
	3604: 0x6D65,
	3605: 0x6D67,
	3606: 0x6D6F,
	3607: 0x6D70,
	3608: 0x6D7C,
	3609: 0x6D82,
	3610: 0x6D87,
	3611: 0x6D91,
	3612: 0x6D92,
	3613: 0x6D94,
	3614: 0x6D96,
	3615: 0x6D97,
	3616: 0x6D98,
	3617: 0x6DAA,
	3618: 0x6DAC,
	3619: 0x6DB4,
	3620: 0x6DB7,
	3621: 0x6DB9,
	3622: 0x6DBD,
	3623: 0x6DBF,
	3624: 0x6DC4,
	3625: 0x6DC8,
	3626: 0x6DCA,
	3627: 0x6DCE,
	3628: 0x6DCF,
	3629: 0x6DD6,
	3630: 0x6DDB,
	3631: 0x6DDD,
	3632: 0x6DDF,
	3633: 0x6DE0,
	3634: 0x6DE2,
	3635: 0x6DE5,
	3636: 0x6DE9,
	3637: 0x6DEF,
	3638: 0x6DF0,
	3639: 0x6DF4,
	3640: 0x6DF6,
	3641: 0x6DFC,
	3642: 0x6E00,
	3643: 0x6E04,
	3644: 0x6E1E,
	3645: 0x6E22,
	3646: 0x6E27,
	3647: 0x6E32,
	3648: 0x6E36,
	3649: 0x6E39,
	3650: 0x6E3B,
	3651: 0x6E3C,
	3652: 0x6E44,
	3653: 0x6E45,
	3654: 0x6E48,
	3655: 0x6E49,
	3656: 0x6E4B,
	3657: 0x6E4F,
	3658: 0x6E51,
	3659: 0x6E52,
	3660: 0x6E53,
	3661: 0x6E54,
	3662: 0x6E57,
	3663: 0x6E5C,
	3664: 0x6E5D,
	3665: 0x6E5E,
	3666: 0x6E62,
	3667: 0x6E63,
	3668: 0x6E68,
	3669: 0x6E73,
	3670: 0x6E7B,
	3671: 0x6E7D,
	3672: 0x6E8D,
	3673: 0x6E93,
	3674: 0x6E99,
	3675: 0x6EA0,
	3676: 0x6EA7,
	3677: 0x6EAD,
	3678: 0x6EAE,
	3679: 0x6EB1,
	3680: 0x6EB3,
	3681: 0x6EBB,
	3682: 0x6EBF,
	3683: 0x6EC0,
	3684: 0x6EC1,
	3685: 0x6EC3,
	3686: 0x6EC7,
	3687: 0x6EC8,
	3688: 0x6ECA,
	3689: 0x6ECD,
	3690: 0x6ECE,
	3691: 0x6ECF,
	3692: 0x6EEB,
	3693: 0x6EED,
	3694: 0x6EEE,
	3695: 0x6EF9,
	3696: 0x6EFB,
	3697: 0x6EFD,
	3698: 0x6F04,
	3699: 0x6F08,
	3700: 0x6F0A,
	3701: 0x6F0C,
	3702: 0x6F0D,
	3703: 0x6F16,
	3704: 0x6F18,
	3705: 0x6F1A,
	3706: 0x6F1B,
	3707: 0x6F26,
	3708: 0x6F29,
	3709: 0x6F2A,
	3710: 0x6F2F,
	3711: 0x6F30,
	3712: 0x6F33,
	3713: 0x6F36,
	3714: 0x6F3B,
	3715: 0x6F3C,
	3716: 0x6F2D,
	3717: 0x6F4F,
	3718: 0x6F51,
	3719: 0x6F52,
	3720: 0x6F53,
	3721: 0x6F57,
	3722: 0x6F59,
	3723: 0x6F5A,
	3724: 0x6F5D,
	3725: 0x6F5E,
	3726: 0x6F61,
	3727: 0x6F62,
	3728: 0x6F68,
	3729: 0x6F6C,
	3730: 0x6F7D,
	3731: 0x6F7E,
	3732: 0x6F83,
	3733: 0x6F87,
	3734: 0x6F88,
	3735: 0x6F8B,
	3736: 0x6F8C,
	3737: 0x6F8D,
	3738: 0x6F90,
	3739: 0x6F92,
	3740: 0x6F93,
	3741: 0x6F94,
	3742: 0x6F96,
	3743: 0x6F9A,
	3744: 0x6F9F,
	3745: 0x6FA0,
	3746: 0x6FA5,
	3747: 0x6FA6,
	3748: 0x6FA7,
	3749: 0x6FA8,
	3750: 0x6FAE,
	3751: 0x6FAF,
	3752: 0x6FB0,
	3753: 0x6FB5,
	3754: 0x6FB6,
	3755: 0x6FBC,
	3756: 0x6FC5,
	3757: 0x6FC7,
	3758: 0x6FC8,
	3759: 0x6FCA,
	3760: 0x6FDA,
	3761: 0x6FDE,
	3762: 0x6FE8,
	3763: 0x6FE9,
	3764: 0x6FF0,
	3765: 0x6FF5,
	3766: 0x6FF9,
	3767: 0x6FFC,
	3768: 0x6FFD,
	3769: 0x7000,
	3770: 0x7005,
	3771: 0x7006,
	3772: 0x7007,
	3773: 0x700D,
	3774: 0x7017,
	3775: 0x7020,
	3776: 0x7023,
	3777: 0x702F,
	3778: 0x7034,
	3779: 0x7037,
	3780: 0x7039,
	3781: 0x703C,
	3782: 0x7043,
	3783: 0x7044,
	3784: 0x7048,
	3785: 0x7049,
	3786: 0x704A,
	3787: 0x704B,
	3788: 0x7054,
	3789: 0x7055,
	3790: 0x705D,
	3791: 0x705E,
	3792: 0x704E,
	3793: 0x7064,
	3794: 0x7065,
	3795: 0x706C,
	3796: 0x706E,
	3797: 0x7075,
	3798: 0x7076,
	3799: 0x707E,
	3800: 0x7081,
	3801: 0x7085,
	3802: 0x7086,
	3803: 0x7094,
	3804: 0x7095,
	3805: 0x7096,
	3806: 0x7097,
	3807: 0x7098,
	3808: 0x709B,
	3809: 0x70A4,
	3810: 0x70AB,
	3811: 0x70B0,
	3812: 0x70B1,
	3813: 0x70B4,
	3814: 0x70B7,
	3815: 0x70CA,
	3816: 0x70D1,
	3817: 0x70D3,
	3818: 0x70D4,
	3819: 0x70D5,
	3820: 0x70D6,
	3821: 0x70D8,
	3822: 0x70DC,
	3823: 0x70E4,
	3824: 0x70FA,
	3825: 0x7103,
	3826: 0x7104,
	3827: 0x7105,
	3828: 0x7106,
	3829: 0x7107,
	3830: 0x710B,
	3831: 0x710C,
	3832: 0x710F,
	3833: 0x711E,
	3834: 0x7120,
	3835: 0x712B,
	3836: 0x712D,
	3837: 0x712F,
	3838: 0x7130,
	3839: 0x7131,
	3840: 0x7138,
	3841: 0x7141,
	3842: 0x7145,
	3843: 0x7146,
	3844: 0x7147,
	3845: 0x714A,
	3846: 0x714B,
	3847: 0x7150,
	3848: 0x7152,
	3849: 0x7157,
	3850: 0x715A,
	3851: 0x715C,
	3852: 0x715E,
	3853: 0x7160,
	3854: 0x7168,
	3855: 0x7179,
	3856: 0x7180,
	3857: 0x7185,
	3858: 0x7187,
	3859: 0x718C,
	3860: 0x7192,
	3861: 0x719A,
	3862: 0x719B,
	3863: 0x71A0,
	3864: 0x71A2,
	3865: 0x71AF,
	3866: 0x71B0,
	3867: 0x71B2,
	3868: 0x71B3,
	3869: 0x71BA,
	3870: 0x71BF,
	3871: 0x71C0,
	3872: 0x71C1,
	3873: 0x71C4,
	3874: 0x71CB,
	3875: 0x71CC,
	3876: 0x71D3,
	3877: 0x71D6,
	3878: 0x71D9,
	3879: 0x71DA,
	3880: 0x71DC,
	3881: 0x71F8,
	3882: 0x71FE,
	3883: 0x7200,
	3884: 0x7207,
	3885: 0x7208,
	3886: 0x7209,
	3887: 0x7213,
	3888: 0x7217,
	3889: 0x721A,
	3890: 0x721D,
	3891: 0x721F,
	3892: 0x7224,
	3893: 0x722B,
	3894: 0x722F,
	3895: 0x7234,
	3896: 0x7238,
	3897: 0x7239,
	3898: 0x7241,
	3899: 0x7242,
	3900: 0x7243,
	3901: 0x7245,
	3902: 0x724E,
	3903: 0x724F,
	3904: 0x7250,
	3905: 0x7253,
	3906: 0x7255,
	3907: 0x7256,
	3908: 0x725A,
	3909: 0x725C,
	3910: 0x725E,
	3911: 0x7260,
	3912: 0x7263,
	3913: 0x7268,
	3914: 0x726B,
	3915: 0x726E,
	3916: 0x726F,
	3917: 0x7271,
	3918: 0x7277,
	3919: 0x7278,
	3920: 0x727B,
	3921: 0x727C,
	3922: 0x727F,
	3923: 0x7284,
	3924: 0x7289,
	3925: 0x728D,
	3926: 0x728E,
	3927: 0x7293,
	3928: 0x729B,
	3929: 0x72A8,
	3930: 0x72AD,
	3931: 0x72AE,
	3932: 0x72B1,
	3933: 0x72B4,
	3934: 0x72BE,
	3935: 0x72C1,
	3936: 0x72C7,
	3937: 0x72C9,
	3938: 0x72CC,
	3939: 0x72D5,
	3940: 0x72D6,
	3941: 0x72D8,
	3942: 0x72DF,
	3943: 0x72E5,
	3944: 0x72F3,
	3945: 0x72F4,
	3946: 0x72FA,
	3947: 0x72FB,
	3948: 0x72FE,
	3949: 0x7302,
	3950: 0x7304,
	3951: 0x7305,
	3952: 0x7307,
	3953: 0x730B,
	3954: 0x730D,
	3955: 0x7312,
	3956: 0x7313,
	3957: 0x7318,
	3958: 0x7319,
	3959: 0x731E,
	3960: 0x7322,
	3961: 0x7324,
	3962: 0x7327,
	3963: 0x7328,
	3964: 0x732C,
	3965: 0x7331,
	3966: 0x7332,
	3967: 0x7335,
	3968: 0x733A,
	3969: 0x733B,
	3970: 0x733D,
	3971: 0x7343,
	3972: 0x734D,
	3973: 0x7350,
	3974: 0x7352,
	3975: 0x7356,
	3976: 0x7358,
	3977: 0x735D,
	3978: 0x735E,
	3979: 0x735F,
	3980: 0x7360,
	3981: 0x7366,
	3982: 0x7367,
	3983: 0x7369,
	3984: 0x736B,
	3985: 0x736C,
	3986: 0x736E,
	3987: 0x736F,
	3988: 0x7371,
	3989: 0x7377,
	3990: 0x7379,
	3991: 0x737C,
	3992: 0x7380,
	3993: 0x7381,
	3994: 0x7383,
	3995: 0x7385,
	3996: 0x7386,
	3997: 0x738E,
	3998: 0x7390,
	3999: 0x7393,
	4000: 0x7395,
	4001: 0x7397,
	4002: 0x7398,
	4003: 0x739C,
	4004: 0x739E,
	4005: 0x739F,
	4006: 0x73A0,
	4007: 0x73A2,
	4008: 0x73A5,
	4009: 0x73A6,
	4010: 0x73AA,
	4011: 0x73AB,
	4012: 0x73AD,
	4013: 0x73B5,
	4014: 0x73B7,
	4015: 0x73B9,
	4016: 0x73BC,
	4017: 0x73BD,
	4018: 0x73BF,
	4019: 0x73C5,
	4020: 0x73C6,
	4021: 0x73C9,
	4022: 0x73CB,
	4023: 0x73CC,
	4024: 0x73CF,
	4025: 0x73D2,
	4026: 0x73D3,
	4027: 0x73D6,
	4028: 0x73D9,
	4029: 0x73DD,
	4030: 0x73E1,
	4031: 0x73E3,
	4032: 0x73E6,
	4033: 0x73E7,
	4034: 0x73E9,
	4035: 0x73F4,
	4036: 0x73F5,
	4037: 0x73F7,
	4038: 0x73F9,
	4039: 0x73FA,
	4040: 0x73FB,
	4041: 0x73FD,
	4042: 0x73FF,
	4043: 0x7400,
	4044: 0x7401,
	4045: 0x7404,
	4046: 0x7407,
	4047: 0x740A,
	4048: 0x7411,
	4049: 0x741A,
	4050: 0x741B,
	4051: 0x7424,
	4052: 0x7426,
	4053: 0x7428,
	4054: 0x7429,
	4055: 0x742A,
	4056: 0x742B,
	4057: 0x742C,
	4058: 0x742D,
	4059: 0x742E,
	4060: 0x742F,
	4061: 0x7430,
	4062: 0x7431,
	4063: 0x7439,
	4064: 0x7440,
	4065: 0x7443,
	4066: 0x7444,
	4067: 0x7446,
	4068: 0x7447,
	4069: 0x744B,
	4070: 0x744D,
	4071: 0x7451,
	4072: 0x7452,
	4073: 0x7457,
	4074: 0x745D,
	4075: 0x7462,
	4076: 0x7466,
	4077: 0x7467,
	4078: 0x7468,
	4079: 0x746B,
	4080: 0x746D,
	4081: 0x746E,
	4082: 0x7471,
	4083: 0x7472,
	4084: 0x7480,
	4085: 0x7481,
	4086: 0x7485,
	4087: 0x7486,
	4088: 0x7487,
	4089: 0x7489,
	4090: 0x748F,
	4091: 0x7490,
	4092: 0x7491,
	4093: 0x7492,
	4094: 0x7498,
	4095: 0x7499,
	4096: 0x749A,
	4097: 0x749C,
	4098: 0x749F,
	4099: 0x74A0,
	4100: 0x74A1,
	4101: 0x74A3,
	4102: 0x74A6,
	4103: 0x74A8,
	4104: 0x74A9,
	4105: 0x74AA,
	4106: 0x74AB,
	4107: 0x74AE,
	4108: 0x74AF,
	4109: 0x74B1,
	4110: 0x74B2,
	4111: 0x74B5,
	4112: 0x74B9,
	4113: 0x74BB,
	4114: 0x74BF,
	4115: 0x74C8,
	4116: 0x74C9,
	4117: 0x74CC,
	4118: 0x74D0,
	4119: 0x74D3,
	4120: 0x74D8,
	4121: 0x74DA,
	4122: 0x74DB,
	4123: 0x74DE,
	4124: 0x74DF,
	4125: 0x74E4,
	4126: 0x74E8,
	4127: 0x74EA,
	4128: 0x74EB,
	4129: 0x74EF,
	4130: 0x74F4,
	4131: 0x74FA,
	4132: 0x74FB,
	4133: 0x74FC,
	4134: 0x74FF,
	4135: 0x7506,
	4136: 0x7512,
	4137: 0x7516,
	4138: 0x7517,
	4139: 0x7520,
	4140: 0x7521,
	4141: 0x7524,
	4142: 0x7527,
	4143: 0x7529,
	4144: 0x752A,
	4145: 0x752F,
	4146: 0x7536,
	4147: 0x7539,
	4148: 0x753D,
	4149: 0x753E,
	4150: 0x753F,
	4151: 0x7540,
	4152: 0x7543,
	4153: 0x7547,
	4154: 0x7548,
	4155: 0x754E,
	4156: 0x7550,
	4157: 0x7552,
	4158: 0x7557,
	4159: 0x755E,
	4160: 0x755F,
	4161: 0x7561,
	4162: 0x756F,
	4163: 0x7571,
	4164: 0x7579,
	4165: 0x757A,
	4166: 0x757B,
	4167: 0x757C,
	4168: 0x757D,
	4169: 0x757E,
	4170: 0x7581,
	4171: 0x7585,
	4172: 0x7590,
	4173: 0x7592,
	4174: 0x7593,
	4175: 0x7595,
	4176: 0x7599,
	4177: 0x759C,
	4178: 0x75A2,
	4179: 0x75A4,
	4180: 0x75B4,
	4181: 0x75BA,
	4182: 0x75BF,
	4183: 0x75C0,
	4184: 0x75C1,
	4185: 0x75C4,
	4186: 0x75C6,
	4187: 0x75CC,
	4188: 0x75CE,
	4189: 0x75CF,
	4190: 0x75D7,
	4191: 0x75DC,
	4192: 0x75DF,
	4193: 0x75E0,
	4194: 0x75E1,
	4195: 0x75E4,
	4196: 0x75E7,
	4197: 0x75EC,
	4198: 0x75EE,
	4199: 0x75EF,
	4200: 0x75F1,
	4201: 0x75F9,
	4202: 0x7600,
	4203: 0x7602,
	4204: 0x7603,
	4205: 0x7604,
	4206: 0x7607,
	4207: 0x7608,
	4208: 0x760A,
	4209: 0x760C,
	4210: 0x760F,
	4211: 0x7612,
	4212: 0x7613,
	4213: 0x7615,
	4214: 0x7616,
	4215: 0x7619,
	4216: 0x761B,
	4217: 0x761C,
	4218: 0x761D,
	4219: 0x761E,
	4220: 0x7623,
	4221: 0x7625,
	4222: 0x7626,
	4223: 0x7629,
	4224: 0x762D,
	4225: 0x7632,
	4226: 0x7633,
	4227: 0x7635,
	4228: 0x7638,
	4229: 0x7639,
	4230: 0x763A,
	4231: 0x763C,
	4232: 0x764A,
	4233: 0x7640,
	4234: 0x7641,
	4235: 0x7643,
	4236: 0x7644,
	4237: 0x7645,
	4238: 0x7649,
	4239: 0x764B,
	4240: 0x7655,
	4241: 0x7659,
	4242: 0x765F,
	4243: 0x7664,
	4244: 0x7665,
	4245: 0x766D,
	4246: 0x766E,
	4247: 0x766F,
	4248: 0x7671,
	4249: 0x7674,
	4250: 0x7681,
	4251: 0x7685,
	4252: 0x768C,
	4253: 0x768D,
	4254: 0x7695,
	4255: 0x769B,
	4256: 0x769C,
	4257: 0x769D,
	4258: 0x769F,
	4259: 0x76A0,
	4260: 0x76A2,
	4261: 0x76A3,
	4262: 0x76A4,
	4263: 0x76A5,
	4264: 0x76A6,
	4265: 0x76A7,
	4266: 0x76A8,
	4267: 0x76AA,
	4268: 0x76AD,
	4269: 0x76BD,
	4270: 0x76C1,
	4271: 0x76C5,
	4272: 0x76C9,
	4273: 0x76CB,
	4274: 0x76CC,
	4275: 0x76CE,
	4276: 0x76D4,
	4277: 0x76D9,
	4278: 0x76E0,
	4279: 0x76E6,
	4280: 0x76E8,
	4281: 0x76EC,
	4282: 0x76F0,
	4283: 0x76F1,
	4284: 0x76F6,
	4285: 0x76F9,
	4286: 0x76FC,
	4287: 0x7700,
	4288: 0x7706,
	4289: 0x770A,
	4290: 0x770E,
	4291: 0x7712,
	4292: 0x7714,
	4293: 0x7715,
	4294: 0x7717,
	4295: 0x7719,
	4296: 0x771A,
	4297: 0x771C,
	4298: 0x7722,
	4299: 0x7728,
	4300: 0x772D,
	4301: 0x772E,
	4302: 0x772F,
	4303: 0x7734,
	4304: 0x7735,
	4305: 0x7736,
	4306: 0x7739,
	4307: 0x773D,
	4308: 0x773E,
	4309: 0x7742,
	4310: 0x7745,
	4311: 0x7746,
	4312: 0x774A,
	4313: 0x774D,
	4314: 0x774E,
	4315: 0x774F,
	4316: 0x7752,
	4317: 0x7756,
	4318: 0x7757,
	4319: 0x775C,
	4320: 0x775E,
	4321: 0x775F,
	4322: 0x7760,
	4323: 0x7762,
	4324: 0x7764,
	4325: 0x7767,
	4326: 0x776A,
	4327: 0x776C,
	4328: 0x7770,
	4329: 0x7772,
	4330: 0x7773,
	4331: 0x7774,
	4332: 0x777A,
	4333: 0x777D,
	4334: 0x7780,
	4335: 0x7784,
	4336: 0x778C,
	4337: 0x778D,
	4338: 0x7794,
	4339: 0x7795,
	4340: 0x7796,
	4341: 0x779A,
	4342: 0x779F,
	4343: 0x77A2,
	4344: 0x77A7,
	4345: 0x77AA,
	4346: 0x77AE,
	4347: 0x77AF,
	4348: 0x77B1,
	4349: 0x77B5,
	4350: 0x77BE,
	4351: 0x77C3,
	4352: 0x77C9,
	4353: 0x77D1,
	4354: 0x77D2,
	4355: 0x77D5,
	4356: 0x77D9,
	4357: 0x77DE,
	4358: 0x77DF,
	4359: 0x77E0,
	4360: 0x77E4,
	4361: 0x77E6,
	4362: 0x77EA,
	4363: 0x77EC,
	4364: 0x77F0,
	4365: 0x77F1,
	4366: 0x77F4,
	4367: 0x77F8,
	4368: 0x77FB,
	4369: 0x7805,
	4370: 0x7806,
	4371: 0x7809,
	4372: 0x780D,
	4373: 0x780E,
	4374: 0x7811,
	4375: 0x781D,
	4376: 0x7821,
	4377: 0x7822,
	4378: 0x7823,
	4379: 0x782D,
	4380: 0x782E,
	4381: 0x7830,
	4382: 0x7835,
	4383: 0x7837,
	4384: 0x7843,
	4385: 0x7844,
	4386: 0x7847,
	4387: 0x7848,
	4388: 0x784C,
	4389: 0x784E,
	4390: 0x7852,
	4391: 0x785C,
	4392: 0x785E,
	4393: 0x7860,
	4394: 0x7861,
	4395: 0x7863,
	4396: 0x7864,
	4397: 0x7868,
	4398: 0x786A,
	4399: 0x786E,
	4400: 0x787A,
	4401: 0x787E,
	4402: 0x788A,
	4403: 0x788F,
	4404: 0x7894,
	4405: 0x7898,
	4406: 0x78A1,
	4407: 0x789D,
	4408: 0x789E,
	4409: 0x789F,
	4410: 0x78A4,
	4411: 0x78A8,
	4412: 0x78AC,
	4413: 0x78AD,
	4414: 0x78B0,
	4415: 0x78B1,
	4416: 0x78B2,
	4417: 0x78B3,
	4418: 0x78BB,
	4419: 0x78BD,
	4420: 0x78BF,
	4421: 0x78C7,
	4422: 0x78C8,
	4423: 0x78C9,
	4424: 0x78CC,
	4425: 0x78CE,
	4426: 0x78D2,
	4427: 0x78D3,
	4428: 0x78D5,
	4429: 0x78D6,
	4430: 0x78E4,
	4431: 0x78DB,
	4432: 0x78DF,
	4433: 0x78E0,
	4434: 0x78E1,
	4435: 0x78E6,
	4436: 0x78EA,
	4437: 0x78F2,
	4438: 0x78F3,
	4439: 0x7900,
	4440: 0x78F6,
	4441: 0x78F7,
	4442: 0x78FA,
	4443: 0x78FB,
	4444: 0x78FF,
	4445: 0x7906,
	4446: 0x790C,
	4447: 0x7910,
	4448: 0x791A,
	4449: 0x791C,
	4450: 0x791E,
	4451: 0x791F,
	4452: 0x7920,
	4453: 0x7925,
	4454: 0x7927,
	4455: 0x7929,
	4456: 0x792D,
	4457: 0x7931,
	4458: 0x7934,
	4459: 0x7935,
	4460: 0x793B,
	4461: 0x793D,
	4462: 0x793F,
	4463: 0x7944,
	4464: 0x7945,
	4465: 0x7946,
	4466: 0x794A,
	4467: 0x794B,
	4468: 0x794F,
	4469: 0x7951,
	4470: 0x7954,
	4471: 0x7958,
	4472: 0x795B,
	4473: 0x795C,
	4474: 0x7967,
	4475: 0x7969,
	4476: 0x796B,
	4477: 0x7972,
	4478: 0x7979,
	4479: 0x797B,
	4480: 0x797C,
	4481: 0x797E,
	4482: 0x798B,
	4483: 0x798C,
	4484: 0x7991,
	4485: 0x7993,
	4486: 0x7994,
	4487: 0x7995,
	4488: 0x7996,
	4489: 0x7998,
	4490: 0x799B,
	4491: 0x799C,
	4492: 0x79A1,
	4493: 0x79A8,
	4494: 0x79A9,
	4495: 0x79AB,
	4496: 0x79AF,
	4497: 0x79B1,
	4498: 0x79B4,
	4499: 0x79B8,
	4500: 0x79BB,
	4501: 0x79C2,
	4502: 0x79C4,
	4503: 0x79C7,
	4504: 0x79C8,
	4505: 0x79CA,
	4506: 0x79CF,
	4507: 0x79D4,
	4508: 0x79D6,
	4509: 0x79DA,
	4510: 0x79DD,
	4511: 0x79DE,
	4512: 0x79E0,
	4513: 0x79E2,
	4514: 0x79E5,
	4515: 0x79EA,
	4516: 0x79EB,
	4517: 0x79ED,
	4518: 0x79F1,
	4519: 0x79F8,
	4520: 0x79FC,
	4521: 0x7A02,
	4522: 0x7A03,
	4523: 0x7A07,
	4524: 0x7A09,
	4525: 0x7A0A,
	4526: 0x7A0C,
	4527: 0x7A11,
	4528: 0x7A15,
	4529: 0x7A1B,
	4530: 0x7A1E,
	4531: 0x7A21,
	4532: 0x7A27,
	4533: 0x7A2B,
	4534: 0x7A2D,
	4535: 0x7A2F,
	4536: 0x7A30,
	4537: 0x7A34,
	4538: 0x7A35,
	4539: 0x7A38,
	4540: 0x7A39,
	4541: 0x7A3A,
	4542: 0x7A44,
	4543: 0x7A45,
	4544: 0x7A47,
	4545: 0x7A48,
	4546: 0x7A4C,
	4547: 0x7A55,
	4548: 0x7A56,
	4549: 0x7A59,
	4550: 0x7A5C,
	4551: 0x7A5D,
	4552: 0x7A5F,
	4553: 0x7A60,
	4554: 0x7A65,
	4555: 0x7A67,
	4556: 0x7A6A,
	4557: 0x7A6D,
	4558: 0x7A75,
	4559: 0x7A78,
	4560: 0x7A7E,
	4561: 0x7A80,
	4562: 0x7A82,
	4563: 0x7A85,
	4564: 0x7A86,
	4565: 0x7A8A,
	4566: 0x7A8B,
	4567: 0x7A90,
	4568: 0x7A91,
	4569: 0x7A94,
	4570: 0x7A9E,
	4571: 0x7AA0,
	4572: 0x7AA3,
	4573: 0x7AAC,
	4574: 0x7AB3,
	4575: 0x7AB5,
	4576: 0x7AB9,
	4577: 0x7ABB,
	4578: 0x7ABC,
	4579: 0x7AC6,
	4580: 0x7AC9,
	4581: 0x7ACC,
	4582: 0x7ACE,
	4583: 0x7AD1,
	4584: 0x7ADB,
	4585: 0x7AE8,
	4586: 0x7AE9,
	4587: 0x7AEB,
	4588: 0x7AEC,
	4589: 0x7AF1,
	4590: 0x7AF4,
	4591: 0x7AFB,
	4592: 0x7AFD,
	4593: 0x7AFE,
	4594: 0x7B07,
	4595: 0x7B14,
	4596: 0x7B1F,
	4597: 0x7B23,
	4598: 0x7B27,
	4599: 0x7B29,
	4600: 0x7B2A,
	4601: 0x7B2B,
	4602: 0x7B2D,
	4603: 0x7B2E,
	4604: 0x7B2F,
	4605: 0x7B30,
	4606: 0x7B31,
	4607: 0x7B34,
	4608: 0x7B3D,
	4609: 0x7B3F,
	4610: 0x7B40,
	4611: 0x7B41,
	4612: 0x7B47,
	4613: 0x7B4E,
	4614: 0x7B55,
	4615: 0x7B60,
	4616: 0x7B64,
	4617: 0x7B66,
	4618: 0x7B69,
	4619: 0x7B6A,
	4620: 0x7B6D,
	4621: 0x7B6F,
	4622: 0x7B72,
	4623: 0x7B73,
	4624: 0x7B77,
	4625: 0x7B84,
	4626: 0x7B89,
	4627: 0x7B8E,
	4628: 0x7B90,
	4629: 0x7B91,
	4630: 0x7B96,
	4631: 0x7B9B,
	4632: 0x7B9E,
	4633: 0x7BA0,
	4634: 0x7BA5,
	4635: 0x7BAC,
	4636: 0x7BAF,
	4637: 0x7BB0,
	4638: 0x7BB2,
	4639: 0x7BB5,
	4640: 0x7BB6,
	4641: 0x7BBA,
	4642: 0x7BBB,
	4643: 0x7BBC,
	4644: 0x7BBD,
	4645: 0x7BC2,
	4646: 0x7BC5,
	4647: 0x7BC8,
	4648: 0x7BCA,
	4649: 0x7BD4,
	4650: 0x7BD6,
	4651: 0x7BD7,
	4652: 0x7BD9,
	4653: 0x7BDA,
	4654: 0x7BDB,
	4655: 0x7BE8,
	4656: 0x7BEA,
	4657: 0x7BF2,
	4658: 0x7BF4,
	4659: 0x7BF5,
	4660: 0x7BF8,
	4661: 0x7BF9,
	4662: 0x7BFA,
	4663: 0x7BFC,
	4664: 0x7BFE,
	4665: 0x7C01,
	4666: 0x7C02,
	4667: 0x7C03,
	4668: 0x7C04,
	4669: 0x7C06,
	4670: 0x7C09,
	4671: 0x7C0B,
	4672: 0x7C0C,
	4673: 0x7C0E,
	4674: 0x7C0F,
	4675: 0x7C19,
	4676: 0x7C1B,
	4677: 0x7C20,
	4678: 0x7C25,
	4679: 0x7C26,
	4680: 0x7C28,
	4681: 0x7C2C,
	4682: 0x7C31,
	4683: 0x7C33,
	4684: 0x7C34,
	4685: 0x7C36,
	4686: 0x7C39,
	4687: 0x7C3A,
	4688: 0x7C46,
	4689: 0x7C4A,
	4690: 0x7C55,
	4691: 0x7C51,
	4692: 0x7C52,
	4693: 0x7C53,
	4694: 0x7C59,
	4695: 0x7C5A,
	4696: 0x7C5B,
	4697: 0x7C5C,
	4698: 0x7C5D,
	4699: 0x7C5E,
	4700: 0x7C61,
	4701: 0x7C63,
	4702: 0x7C67,
	4703: 0x7C69,
	4704: 0x7C6D,
	4705: 0x7C6E,
	4706: 0x7C70,
	4707: 0x7C72,
	4708: 0x7C79,
	4709: 0x7C7C,
	4710: 0x7C7D,
	4711: 0x7C86,
	4712: 0x7C87,
	4713: 0x7C8F,
	4714: 0x7C94,
	4715: 0x7C9E,
	4716: 0x7CA0,
	4717: 0x7CA6,
	4718: 0x7CB0,
	4719: 0x7CB6,
	4720: 0x7CB7,
	4721: 0x7CBA,
	4722: 0x7CBB,
	4723: 0x7CBC,
	4724: 0x7CBF,
	4725: 0x7CC4,
	4726: 0x7CC7,
	4727: 0x7CC8,
	4728: 0x7CC9,
	4729: 0x7CCD,
	4730: 0x7CCF,
	4731: 0x7CD3,
	4732: 0x7CD4,
	4733: 0x7CD5,
	4734: 0x7CD7,
	4735: 0x7CD9,
	4736: 0x7CDA,
	4737: 0x7CDD,
	4738: 0x7CE6,
	4739: 0x7CE9,
	4740: 0x7CEB,
	4741: 0x7CF5,
	4742: 0x7D03,
	4743: 0x7D07,
	4744: 0x7D08,
	4745: 0x7D09,
	4746: 0x7D0F,
	4747: 0x7D11,
	4748: 0x7D12,
	4749: 0x7D13,
	4750: 0x7D16,
	4751: 0x7D1D,
	4752: 0x7D1E,
	4753: 0x7D23,
	4754: 0x7D26,
	4755: 0x7D2A,
	4756: 0x7D2D,
	4757: 0x7D31,
	4758: 0x7D3C,
	4759: 0x7D3D,
	4760: 0x7D3E,
	4761: 0x7D40,
	4762: 0x7D41,
	4763: 0x7D47,
	4764: 0x7D48,
	4765: 0x7D4D,
	4766: 0x7D51,
	4767: 0x7D53,
	4768: 0x7D57,
	4769: 0x7D59,
	4770: 0x7D5A,
	4771: 0x7D5C,
	4772: 0x7D5D,
	4773: 0x7D65,
	4774: 0x7D67,
	4775: 0x7D6A,
	4776: 0x7D70,
	4777: 0x7D78,
	4778: 0x7D7A,
	4779: 0x7D7B,
	4780: 0x7D7F,
	4781: 0x7D81,
	4782: 0x7D82,
	4783: 0x7D83,
	4784: 0x7D85,
	4785: 0x7D86,
	4786: 0x7D88,
	4787: 0x7D8B,
	4788: 0x7D8C,
	4789: 0x7D8D,
	4790: 0x7D91,
	4791: 0x7D96,
	4792: 0x7D97,
	4793: 0x7D9D,
	4794: 0x7D9E,
	4795: 0x7DA6,
	4796: 0x7DA7,
	4797: 0x7DAA,
	4798: 0x7DB3,
	4799: 0x7DB6,
	4800: 0x7DB7,
	4801: 0x7DB9,
	4802: 0x7DC2,
	4803: 0x7DC3,
	4804: 0x7DC4,
	4805: 0x7DC5,
	4806: 0x7DC6,
	4807: 0x7DCC,
	4808: 0x7DCD,
	4809: 0x7DCE,
	4810: 0x7DD7,
	4811: 0x7DD9,
	4812: 0x7E00,
	4813: 0x7DE2,
	4814: 0x7DE5,
	4815: 0x7DE6,
	4816: 0x7DEA,
	4817: 0x7DEB,
	4818: 0x7DED,
	4819: 0x7DF1,
	4820: 0x7DF5,
	4821: 0x7DF6,
	4822: 0x7DF9,
	4823: 0x7DFA,
	4824: 0x7E08,
	4825: 0x7E10,
	4826: 0x7E11,
	4827: 0x7E15,
	4828: 0x7E17,
	4829: 0x7E1C,
	4830: 0x7E1D,
	4831: 0x7E20,
	4832: 0x7E27,
	4833: 0x7E28,
	4834: 0x7E2C,
	4835: 0x7E2D,
	4836: 0x7E2F,
	4837: 0x7E33,
	4838: 0x7E36,
	4839: 0x7E3F,
	4840: 0x7E44,
	4841: 0x7E45,
	4842: 0x7E47,
	4843: 0x7E4E,
	4844: 0x7E50,
	4845: 0x7E52,
	4846: 0x7E58,
	4847: 0x7E5F,
	4848: 0x7E61,
	4849: 0x7E62,
	4850: 0x7E65,
	4851: 0x7E6B,
	4852: 0x7E6E,
	4853: 0x7E6F,
	4854: 0x7E73,
	4855: 0x7E78,
	4856: 0x7E7E,
	4857: 0x7E81,
	4858: 0x7E86,
	4859: 0x7E87,
	4860: 0x7E8A,
	4861: 0x7E8D,
	4862: 0x7E91,
	4863: 0x7E95,
	4864: 0x7E98,
	4865: 0x7E9A,
	4866: 0x7E9D,
	4867: 0x7E9E,
	4868: 0x7F3C,
	4869: 0x7F3B,
	4870: 0x7F3D,
	4871: 0x7F3E,
	4872: 0x7F3F,
	4873: 0x7F43,
	4874: 0x7F44,
	4875: 0x7F47,
	4876: 0x7F4F,
	4877: 0x7F52,
	4878: 0x7F53,
	4879: 0x7F5B,
	4880: 0x7F5C,
	4881: 0x7F5D,
	4882: 0x7F61,
	4883: 0x7F63,
	4884: 0x7F64,
	4885: 0x7F65,
	4886: 0x7F66,
	4887: 0x7F6D,
	4888: 0x7F71,
	4889: 0x7F7D,
	4890: 0x7F7E,
	4891: 0x7F7F,
	4892: 0x7F80,
	4893: 0x7F8B,
	4894: 0x7F8D,
	4895: 0x7F8F,
	4896: 0x7F90,
	4897: 0x7F91,
	4898: 0x7F96,
	4899: 0x7F97,
	4900: 0x7F9C,
	4901: 0x7FA1,
	4902: 0x7FA2,
	4903: 0x7FA6,
	4904: 0x7FAA,
	4905: 0x7FAD,
	4906: 0x7FB4,
	4907: 0x7FBC,
	4908: 0x7FBF,
	4909: 0x7FC0,
	4910: 0x7FC3,
	4911: 0x7FC8,
	4912: 0x7FCE,
	4913: 0x7FCF,
	4914: 0x7FDB,
	4915: 0x7FDF,
	4916: 0x7FE3,
	4917: 0x7FE5,
	4918: 0x7FE8,
	4919: 0x7FEC,
	4920: 0x7FEE,
	4921: 0x7FEF,
	4922: 0x7FF2,
	4923: 0x7FFA,
	4924: 0x7FFD,
	4925: 0x7FFE,
	4926: 0x7FFF,
	4927: 0x8007,
	4928: 0x8008,
	4929: 0x800A,
	4930: 0x800D,
	4931: 0x800E,
	4932: 0x800F,
	4933: 0x8011,
	4934: 0x8013,
	4935: 0x8014,
	4936: 0x8016,
	4937: 0x801D,
	4938: 0x801E,
	4939: 0x801F,
	4940: 0x8020,
	4941: 0x8024,
	4942: 0x8026,
	4943: 0x802C,
	4944: 0x802E,
	4945: 0x8030,
	4946: 0x8034,
	4947: 0x8035,
	4948: 0x8037,
	4949: 0x8039,
	4950: 0x803A,
	4951: 0x803C,
	4952: 0x803E,
	4953: 0x8040,
	4954: 0x8044,
	4955: 0x8060,
	4956: 0x8064,
	4957: 0x8066,
	4958: 0x806D,
	4959: 0x8071,
	4960: 0x8075,
	4961: 0x8081,
	4962: 0x8088,
	4963: 0x808E,
	4964: 0x809C,
	4965: 0x809E,
	4966: 0x80A6,
	4967: 0x80A7,
	4968: 0x80AB,
	4969: 0x80B8,
	4970: 0x80B9,
	4971: 0x80C8,
	4972: 0x80CD,
	4973: 0x80CF,
	4974: 0x80D2,
	4975: 0x80D4,
	4976: 0x80D5,
	4977: 0x80D7,
	4978: 0x80D8,
	4979: 0x80E0,
	4980: 0x80ED,
	4981: 0x80EE,
	4982: 0x80F0,
	4983: 0x80F2,
	4984: 0x80F3,
	4985: 0x80F6,
	4986: 0x80F9,
	4987: 0x80FA,
	4988: 0x80FE,
	4989: 0x8103,
	4990: 0x810B,
	4991: 0x8116,
	4992: 0x8117,
	4993: 0x8118,
	4994: 0x811C,
	4995: 0x811E,
	4996: 0x8120,
	4997: 0x8124,
	4998: 0x8127,
	4999: 0x812C,
	5000: 0x8130,
	5001: 0x8135,
	5002: 0x813A,
	5003: 0x813C,
	5004: 0x8145,
	5005: 0x8147,
	5006: 0x814A,
	5007: 0x814C,
	5008: 0x8152,
	5009: 0x8157,
	5010: 0x8160,
	5011: 0x8161,
	5012: 0x8167,
	5013: 0x8168,
	5014: 0x8169,
	5015: 0x816D,
	5016: 0x816F,
	5017: 0x8177,
	5018: 0x8181,
	5019: 0x8190,
	5020: 0x8184,
	5021: 0x8185,
	5022: 0x8186,
	5023: 0x818B,
	5024: 0x818E,
	5025: 0x8196,
	5026: 0x8198,
	5027: 0x819B,
	5028: 0x819E,
	5029: 0x81A2,
	5030: 0x81AE,
	5031: 0x81B2,
	5032: 0x81B4,
	5033: 0x81BB,
	5034: 0x81CB,
	5035: 0x81C3,
	5036: 0x81C5,
	5037: 0x81CA,
	5038: 0x81CE,
	5039: 0x81CF,
	5040: 0x81D5,
	5041: 0x81D7,
	5042: 0x81DB,
	5043: 0x81DD,
	5044: 0x81DE,
	5045: 0x81E1,
	5046: 0x81E4,
	5047: 0x81EB,
	5048: 0x81EC,
	5049: 0x81F0,
	5050: 0x81F1,
	5051: 0x81F2,
	5052: 0x81F5,
	5053: 0x81F6,
	5054: 0x81F8,
	5055: 0x81F9,
	5056: 0x81FD,
	5057: 0x81FF,
	5058: 0x8200,
	5059: 0x8203,
	5060: 0x820F,
	5061: 0x8213,
	5062: 0x8214,
	5063: 0x8219,
	5064: 0x821A,
	5065: 0x821D,
	5066: 0x8221,
	5067: 0x8222,
	5068: 0x8228,
	5069: 0x8232,
	5070: 0x8234,
	5071: 0x823A,
	5072: 0x8243,
	5073: 0x8244,
	5074: 0x8245,
	5075: 0x8246,
	5076: 0x824B,
	5077: 0x824E,
	5078: 0x824F,
	5079: 0x8251,
	5080: 0x8256,
	5081: 0x825C,
	5082: 0x8260,
	5083: 0x8263,
	5084: 0x8267,
	5085: 0x826D,
	5086: 0x8274,
	5087: 0x827B,
	5088: 0x827D,
	5089: 0x827F,
	5090: 0x8280,
	5091: 0x8281,
	5092: 0x8283,
	5093: 0x8284,
	5094: 0x8287,
	5095: 0x8289,
	5096: 0x828A,
	5097: 0x828E,
	5098: 0x8291,
	5099: 0x8294,
	5100: 0x8296,
	5101: 0x8298,
	5102: 0x829A,
	5103: 0x829B,
	5104: 0x82A0,
	5105: 0x82A1,
	5106: 0x82A3,
	5107: 0x82A4,
	5108: 0x82A7,
	5109: 0x82A8,
	5110: 0x82A9,
	5111: 0x82AA,
	5112: 0x82AE,
	5113: 0x82B0,
	5114: 0x82B2,
	5115: 0x82B4,
	5116: 0x82B7,
	5117: 0x82BA,
	5118: 0x82BC,
	5119: 0x82BE,
	5120: 0x82BF,
	5121: 0x82C6,
	5122: 0x82D0,
	5123: 0x82D5,
	5124: 0x82DA,
	5125: 0x82E0,
	5126: 0x82E2,
	5127: 0x82E4,
	5128: 0x82E8,
	5129: 0x82EA,
	5130: 0x82ED,
	5131: 0x82EF,
	5132: 0x82F6,
	5133: 0x82F7,
	5134: 0x82FD,
	5135: 0x82FE,
	5136: 0x8300,
	5137: 0x8301,
	5138: 0x8307,
	5139: 0x8308,
	5140: 0x830A,
	5141: 0x830B,
	5142: 0x8354,
	5143: 0x831B,
	5144: 0x831D,
	5145: 0x831E,
	5146: 0x831F,
	5147: 0x8321,
	5148: 0x8322,
	5149: 0x832C,
	5150: 0x832D,
	5151: 0x832E,
	5152: 0x8330,
	5153: 0x8333,
	5154: 0x8337,
	5155: 0x833A,
	5156: 0x833C,
	5157: 0x833D,
	5158: 0x8342,
	5159: 0x8343,
	5160: 0x8344,
	5161: 0x8347,
	5162: 0x834D,
	5163: 0x834E,
	5164: 0x8351,
	5165: 0x8355,
	5166: 0x8356,
	5167: 0x8357,
	5168: 0x8370,
	5169: 0x8378,
	5170: 0x837D,
	5171: 0x837F,
	5172: 0x8380,
	5173: 0x8382,
	5174: 0x8384,
	5175: 0x8386,
	5176: 0x838D,
	5177: 0x8392,
	5178: 0x8394,
	5179: 0x8395,
	5180: 0x8398,
	5181: 0x8399,
	5182: 0x839B,
	5183: 0x839C,
	5184: 0x839D,
	5185: 0x83A6,
	5186: 0x83A7,
	5187: 0x83A9,
	5188: 0x83AC,
	5189: 0x83BE,
	5190: 0x83BF,
	5191: 0x83C0,
	5192: 0x83C7,
	5193: 0x83C9,
	5194: 0x83CF,
	5195: 0x83D0,
	5196: 0x83D1,
	5197: 0x83D4,
	5198: 0x83DD,
	5199: 0x8353,
	5200: 0x83E8,
	5201: 0x83EA,
	5202: 0x83F6,
	5203: 0x83F8,
	5204: 0x83F9,
	5205: 0x83FC,
	5206: 0x8401,
	5207: 0x8406,
	5208: 0x840A,
	5209: 0x840F,
	5210: 0x8411,
	5211: 0x8415,
	5212: 0x8419,
	5213: 0x83AD,
	5214: 0x842F,
	5215: 0x8439,
	5216: 0x8445,
	5217: 0x8447,
	5218: 0x8448,
	5219: 0x844A,
	5220: 0x844D,
	5221: 0x844F,
	5222: 0x8451,
	5223: 0x8452,
	5224: 0x8456,
	5225: 0x8458,
	5226: 0x8459,
	5227: 0x845A,
	5228: 0x845C,
	5229: 0x8460,
	5230: 0x8464,
	5231: 0x8465,
	5232: 0x8467,
	5233: 0x846A,
	5234: 0x8470,
	5235: 0x8473,
	5236: 0x8474,
	5237: 0x8476,
	5238: 0x8478,
	5239: 0x847C,
	5240: 0x847D,
	5241: 0x8481,
	5242: 0x8485,
	5243: 0x8492,
	5244: 0x8493,
	5245: 0x8495,
	5246: 0x849E,
	5247: 0x84A6,
	5248: 0x84A8,
	5249: 0x84A9,
	5250: 0x84AA,
	5251: 0x84AF,
	5252: 0x84B1,
	5253: 0x84B4,
	5254: 0x84BA,
	5255: 0x84BD,
	5256: 0x84BE,
	5257: 0x84C0,
	5258: 0x84C2,
	5259: 0x84C7,
	5260: 0x84C8,
	5261: 0x84CC,
	5262: 0x84CF,
	5263: 0x84D3,
	5264: 0x84DC,
	5265: 0x84E7,
	5266: 0x84EA,
	5267: 0x84EF,
	5268: 0x84F0,
	5269: 0x84F1,
	5270: 0x84F2,
	5271: 0x84F7,
	5272: 0x8532,
	5273: 0x84FA,
	5274: 0x84FB,
	5275: 0x84FD,
	5276: 0x8502,
	5277: 0x8503,
	5278: 0x8507,
	5279: 0x850C,
	5280: 0x850E,
	5281: 0x8510,
	5282: 0x851C,
	5283: 0x851E,
	5284: 0x8522,
	5285: 0x8523,
	5286: 0x8524,
	5287: 0x8525,
	5288: 0x8527,
	5289: 0x852A,
	5290: 0x852B,
	5291: 0x852F,
	5292: 0x8533,
	5293: 0x8534,
	5294: 0x8536,
	5295: 0x853F,
	5296: 0x8546,
	5297: 0x854F,
	5298: 0x8550,
	5299: 0x8551,
	5300: 0x8552,
	5301: 0x8553,
	5302: 0x8556,
	5303: 0x8559,
	5304: 0x855C,
	5305: 0x855D,
	5306: 0x855E,
	5307: 0x855F,
	5308: 0x8560,
	5309: 0x8561,
	5310: 0x8562,
	5311: 0x8564,
	5312: 0x856B,
	5313: 0x856F,
	5314: 0x8579,
	5315: 0x857A,
	5316: 0x857B,
	5317: 0x857D,
	5318: 0x857F,
	5319: 0x8581,
	5320: 0x8585,
	5321: 0x8586,
	5322: 0x8589,
	5323: 0x858B,
	5324: 0x858C,
	5325: 0x858F,
	5326: 0x8593,
	5327: 0x8598,
	5328: 0x859D,
	5329: 0x859F,
	5330: 0x85A0,
	5331: 0x85A2,
	5332: 0x85A5,
	5333: 0x85A7,
	5334: 0x85B4,
	5335: 0x85B6,
	5336: 0x85B7,
	5337: 0x85B8,
	5338: 0x85BC,
	5339: 0x85BD,
	5340: 0x85BE,
	5341: 0x85BF,
	5342: 0x85C2,
	5343: 0x85C7,
	5344: 0x85CA,
	5345: 0x85CB,
	5346: 0x85CE,
	5347: 0x85AD,
	5348: 0x85D8,
	5349: 0x85DA,
	5350: 0x85DF,
	5351: 0x85E0,
	5352: 0x85E6,
	5353: 0x85E8,
	5354: 0x85ED,
	5355: 0x85F3,
	5356: 0x85F6,
	5357: 0x85FC,
	5358: 0x85FF,
	5359: 0x8600,
	5360: 0x8604,
	5361: 0x8605,
	5362: 0x860D,
	5363: 0x860E,
	5364: 0x8610,
	5365: 0x8611,
	5366: 0x8612,
	5367: 0x8618,
	5368: 0x8619,
	5369: 0x861B,
	5370: 0x861E,
	5371: 0x8621,
	5372: 0x8627,
	5373: 0x8629,
	5374: 0x8636,
	5375: 0x8638,
	5376: 0x863A,
	5377: 0x863C,
	5378: 0x863D,
	5379: 0x8640,
	5380: 0x8642,
	5381: 0x8646,
	5382: 0x8652,
	5383: 0x8653,
	5384: 0x8656,
	5385: 0x8657,
	5386: 0x8658,
	5387: 0x8659,
	5388: 0x865D,
	5389: 0x8660,
	5390: 0x8661,
	5391: 0x8662,
	5392: 0x8663,
	5393: 0x8664,
	5394: 0x8669,
	5395: 0x866C,
	5396: 0x866F,
	5397: 0x8675,
	5398: 0x8676,
	5399: 0x8677,
	5400: 0x867A,
	5401: 0x868D,
	5402: 0x8691,
	5403: 0x8696,
	5404: 0x8698,
	5405: 0x869A,
	5406: 0x869C,
	5407: 0x86A1,
	5408: 0x86A6,
	5409: 0x86A7,
	5410: 0x86A8,
	5411: 0x86AD,
	5412: 0x86B1,
	5413: 0x86B3,
	5414: 0x86B4,
	5415: 0x86B5,
	5416: 0x86B7,
	5417: 0x86B8,
	5418: 0x86B9,
	5419: 0x86BF,
	5420: 0x86C0,
	5421: 0x86C1,
	5422: 0x86C3,
	5423: 0x86C5,
	5424: 0x86D1,
	5425: 0x86D2,
	5426: 0x86D5,
	5427: 0x86D7,
	5428: 0x86DA,
	5429: 0x86DC,
	5430: 0x86E0,
	5431: 0x86E3,
	5432: 0x86E5,
	5433: 0x86E7,
	5434: 0x8688,
	5435: 0x86FA,
	5436: 0x86FC,
	5437: 0x86FD,
	5438: 0x8704,
	5439: 0x8705,
	5440: 0x8707,
	5441: 0x870B,
	5442: 0x870E,
	5443: 0x870F,
	5444: 0x8710,
	5445: 0x8713,
	5446: 0x8714,
	5447: 0x8719,
	5448: 0x871E,
	5449: 0x871F,
	5450: 0x8721,
	5451: 0x8723,
	5452: 0x8728,
	5453: 0x872E,
	5454: 0x872F,
	5455: 0x8731,
	5456: 0x8732,
	5457: 0x8739,
	5458: 0x873A,
	5459: 0x873C,
	5460: 0x873D,
	5461: 0x873E,
	5462: 0x8740,
	5463: 0x8743,
	5464: 0x8745,
	5465: 0x874D,
	5466: 0x8758,
	5467: 0x875D,
	5468: 0x8761,
	5469: 0x8764,
	5470: 0x8765,
	5471: 0x876F,
	5472: 0x8771,
	5473: 0x8772,
	5474: 0x877B,
	5475: 0x8783,
	5476: 0x8784,
	5477: 0x8785,
	5478: 0x8786,
	5479: 0x8787,
	5480: 0x8788,
	5481: 0x8789,
	5482: 0x878B,
	5483: 0x878C,
	5484: 0x8790,
	5485: 0x8793,
	5486: 0x8795,
	5487: 0x8797,
	5488: 0x8798,
	5489: 0x8799,
	5490: 0x879E,
	5491: 0x87A0,
	5492: 0x87A3,
	5493: 0x87A7,
	5494: 0x87AC,
	5495: 0x87AD,
	5496: 0x87AE,
	5497: 0x87B1,
	5498: 0x87B5,
	5499: 0x87BE,
	5500: 0x87BF,
	5501: 0x87C1,
	5502: 0x87C8,
	5503: 0x87C9,
	5504: 0x87CA,
	5505: 0x87CE,
	5506: 0x87D5,
	5507: 0x87D6,
	5508: 0x87D9,
	5509: 0x87DA,
	5510: 0x87DC,
	5511: 0x87DF,
	5512: 0x87E2,
	5513: 0x87E3,
	5514: 0x87E4,
	5515: 0x87EA,
	5516: 0x87EB,
	5517: 0x87ED,
	5518: 0x87F1,
	5519: 0x87F3,
	5520: 0x87F8,
	5521: 0x87FA,
	5522: 0x87FF,
	5523: 0x8801,
	5524: 0x8803,
	5525: 0x8806,
	5526: 0x8809,
	5527: 0x880A,
	5528: 0x880B,
	5529: 0x8810,
	5530: 0x8819,
	5531: 0x8812,
	5532: 0x8813,
	5533: 0x8814,
	5534: 0x8818,
	5535: 0x881A,
	5536: 0x881B,
	5537: 0x881C,
	5538: 0x881E,
	5539: 0x881F,
	5540: 0x8828,
	5541: 0x882D,
	5542: 0x882E,
	5543: 0x8830,
	5544: 0x8832,
	5545: 0x8835,
	5546: 0x883A,
	5547: 0x883C,
	5548: 0x8841,
	5549: 0x8843,
	5550: 0x8845,
	5551: 0x8848,
	5552: 0x8849,
	5553: 0x884A,
	5554: 0x884B,
	5555: 0x884E,
	5556: 0x8851,
	5557: 0x8855,
	5558: 0x8856,
	5559: 0x8858,
	5560: 0x885A,
	5561: 0x885C,
	5562: 0x885F,
	5563: 0x8860,
	5564: 0x8864,
	5565: 0x8869,
	5566: 0x8871,
	5567: 0x8879,
	5568: 0x887B,
	5569: 0x8880,
	5570: 0x8898,
	5571: 0x889A,
	5572: 0x889B,
	5573: 0x889C,
	5574: 0x889F,
	5575: 0x88A0,
	5576: 0x88A8,
	5577: 0x88AA,
	5578: 0x88BA,
	5579: 0x88BD,
	5580: 0x88BE,
	5581: 0x88C0,
	5582: 0x88CA,
	5583: 0x88CB,
	5584: 0x88CC,
	5585: 0x88CD,
	5586: 0x88CE,
	5587: 0x88D1,
	5588: 0x88D2,
	5589: 0x88D3,
	5590: 0x88DB,
	5591: 0x88DE,
	5592: 0x88E7,
	5593: 0x88EF,
	5594: 0x88F0,
	5595: 0x88F1,
	5596: 0x88F5,
	5597: 0x88F7,
	5598: 0x8901,
	5599: 0x8906,
	5600: 0x890D,
	5601: 0x890E,
	5602: 0x890F,
	5603: 0x8915,
	5604: 0x8916,
	5605: 0x8918,
	5606: 0x8919,
	5607: 0x891A,
	5608: 0x891C,
	5609: 0x8920,
	5610: 0x8926,
	5611: 0x8927,
	5612: 0x8928,
	5613: 0x8930,
	5614: 0x8931,
	5615: 0x8932,
	5616: 0x8935,
	5617: 0x8939,
	5618: 0x893A,
	5619: 0x893E,
	5620: 0x8940,
	5621: 0x8942,
	5622: 0x8945,
	5623: 0x8946,
	5624: 0x8949,
	5625: 0x894F,
	5626: 0x8952,
	5627: 0x8957,
	5628: 0x895A,
	5629: 0x895B,
	5630: 0x895C,
	5631: 0x8961,
	5632: 0x8962,
	5633: 0x8963,
	5634: 0x896B,
	5635: 0x896E,
	5636: 0x8970,
	5637: 0x8973,
	5638: 0x8975,
	5639: 0x897A,
	5640: 0x897B,
	5641: 0x897C,
	5642: 0x897D,
	5643: 0x8989,
	5644: 0x898D,
	5645: 0x8990,
	5646: 0x8994,
	5647: 0x8995,
	5648: 0x899B,
	5649: 0x899C,
	5650: 0x899F,
	5651: 0x89A0,
	5652: 0x89A5,
	5653: 0x89B0,
	5654: 0x89B4,
	5655: 0x89B5,
	5656: 0x89B6,
	5657: 0x89B7,
	5658: 0x89BC,
	5659: 0x89D4,
	5660: 0x89D5,
	5661: 0x89D6,
	5662: 0x89D7,
	5663: 0x89D8,
	5664: 0x89E5,
	5665: 0x89E9,
	5666: 0x89EB,
	5667: 0x89ED,
	5668: 0x89F1,
	5669: 0x89F3,
	5670: 0x89F6,
	5671: 0x89F9,
	5672: 0x89FD,
	5673: 0x89FF,
	5674: 0x8A04,
	5675: 0x8A05,
	5676: 0x8A07,
	5677: 0x8A0F,
	5678: 0x8A11,
	5679: 0x8A12,
	5680: 0x8A14,
	5681: 0x8A15,
	5682: 0x8A1E,
	5683: 0x8A20,
	5684: 0x8A22,
	5685: 0x8A24,
	5686: 0x8A26,
	5687: 0x8A2B,
	5688: 0x8A2C,
	5689: 0x8A2F,
	5690: 0x8A35,
	5691: 0x8A37,
	5692: 0x8A3D,
	5693: 0x8A3E,
	5694: 0x8A40,
	5695: 0x8A43,
	5696: 0x8A45,
	5697: 0x8A47,
	5698: 0x8A49,
	5699: 0x8A4D,
	5700: 0x8A4E,
	5701: 0x8A53,
	5702: 0x8A56,
	5703: 0x8A57,
	5704: 0x8A58,
	5705: 0x8A5C,
	5706: 0x8A5D,
	5707: 0x8A61,
	5708: 0x8A65,
	5709: 0x8A67,
	5710: 0x8A75,
	5711: 0x8A76,
	5712: 0x8A77,
	5713: 0x8A79,
	5714: 0x8A7A,
	5715: 0x8A7B,
	5716: 0x8A7E,
	5717: 0x8A7F,
	5718: 0x8A80,
	5719: 0x8A83,
	5720: 0x8A86,
	5721: 0x8A8B,
	5722: 0x8A8F,
	5723: 0x8A90,
	5724: 0x8A92,
	5725: 0x8A96,
	5726: 0x8A97,
	5727: 0x8A99,
	5728: 0x8A9F,
	5729: 0x8AA7,
	5730: 0x8AA9,
	5731: 0x8AAE,
	5732: 0x8AAF,
	5733: 0x8AB3,
	5734: 0x8AB6,
	5735: 0x8AB7,
	5736: 0x8ABB,
	5737: 0x8ABE,
	5738: 0x8AC3,
	5739: 0x8AC6,
	5740: 0x8AC8,
	5741: 0x8AC9,
	5742: 0x8ACA,
	5743: 0x8AD1,
	5744: 0x8AD3,
	5745: 0x8AD4,
	5746: 0x8AD5,
	5747: 0x8AD7,
	5748: 0x8ADD,
	5749: 0x8ADF,
	5750: 0x8AEC,
	5751: 0x8AF0,
	5752: 0x8AF4,
	5753: 0x8AF5,
	5754: 0x8AF6,
	5755: 0x8AFC,
	5756: 0x8AFF,
	5757: 0x8B05,
	5758: 0x8B06,
	5759: 0x8B0B,
	5760: 0x8B11,
	5761: 0x8B1C,
	5762: 0x8B1E,
	5763: 0x8B1F,
	5764: 0x8B0A,
	5765: 0x8B2D,
	5766: 0x8B30,
	5767: 0x8B37,
	5768: 0x8B3C,
	5769: 0x8B42,
	5770: 0x8B43,
	5771: 0x8B44,
	5772: 0x8B45,
	5773: 0x8B46,
	5774: 0x8B48,
	5775: 0x8B52,
	5776: 0x8B53,
	5777: 0x8B54,
	5778: 0x8B59,
	5779: 0x8B4D,
	5780: 0x8B5E,
	5781: 0x8B63,
	5782: 0x8B6D,
	5783: 0x8B76,
	5784: 0x8B78,
	5785: 0x8B79,
	5786: 0x8B7C,
	5787: 0x8B7E,
	5788: 0x8B81,
	5789: 0x8B84,
	5790: 0x8B85,
	5791: 0x8B8B,
	5792: 0x8B8D,
	5793: 0x8B8F,
	5794: 0x8B94,
	5795: 0x8B95,
	5796: 0x8B9C,
	5797: 0x8B9E,
	5798: 0x8B9F,
	5799: 0x8C38,
	5800: 0x8C39,
	5801: 0x8C3D,
	5802: 0x8C3E,
	5803: 0x8C45,
	5804: 0x8C47,
	5805: 0x8C49,
	5806: 0x8C4B,
	5807: 0x8C4F,
	5808: 0x8C51,
	5809: 0x8C53,
	5810: 0x8C54,
	5811: 0x8C57,
	5812: 0x8C58,
	5813: 0x8C5B,
	5814: 0x8C5D,
	5815: 0x8C59,
	5816: 0x8C63,
	5817: 0x8C64,
	5818: 0x8C66,
	5819: 0x8C68,
	5820: 0x8C69,
	5821: 0x8C6D,
	5822: 0x8C73,
	5823: 0x8C75,
	5824: 0x8C76,
	5825: 0x8C7B,
	5826: 0x8C7E,
	5827: 0x8C86,
	5828: 0x8C87,
	5829: 0x8C8B,
	5830: 0x8C90,
	5831: 0x8C92,
	5832: 0x8C93,
	5833: 0x8C99,
	5834: 0x8C9B,
	5835: 0x8C9C,
	5836: 0x8CA4,
	5837: 0x8CB9,
	5838: 0x8CBA,
	5839: 0x8CC5,
	5840: 0x8CC6,
	5841: 0x8CC9,
	5842: 0x8CCB,
	5843: 0x8CCF,
	5844: 0x8CD6,
	5845: 0x8CD5,
	5846: 0x8CD9,
	5847: 0x8CDD,
	5848: 0x8CE1,
	5849: 0x8CE8,
	5850: 0x8CEC,
	5851: 0x8CEF,
	5852: 0x8CF0,
	5853: 0x8CF2,
	5854: 0x8CF5,
	5855: 0x8CF7,
	5856: 0x8CF8,
	5857: 0x8CFE,
	5858: 0x8CFF,
	5859: 0x8D01,
	5860: 0x8D03,
	5861: 0x8D09,
	5862: 0x8D12,
	5863: 0x8D17,
	5864: 0x8D1B,
	5865: 0x8D65,
	5866: 0x8D69,
	5867: 0x8D6C,
	5868: 0x8D6E,
	5869: 0x8D7F,
	5870: 0x8D82,
	5871: 0x8D84,
	5872: 0x8D88,
	5873: 0x8D8D,
	5874: 0x8D90,
	5875: 0x8D91,
	5876: 0x8D95,
	5877: 0x8D9E,
	5878: 0x8D9F,
	5879: 0x8DA0,
	5880: 0x8DA6,
	5881: 0x8DAB,
	5882: 0x8DAC,
	5883: 0x8DAF,
	5884: 0x8DB2,
	5885: 0x8DB5,
	5886: 0x8DB7,
	5887: 0x8DB9,
	5888: 0x8DBB,
	5889: 0x8DC0,
	5890: 0x8DC5,
	5891: 0x8DC6,
	5892: 0x8DC7,
	5893: 0x8DC8,
	5894: 0x8DCA,
	5895: 0x8DCE,
	5896: 0x8DD1,
	5897: 0x8DD4,
	5898: 0x8DD5,
	5899: 0x8DD7,
	5900: 0x8DD9,
	5901: 0x8DE4,
	5902: 0x8DE5,
	5903: 0x8DE7,
	5904: 0x8DEC,
	5905: 0x8DF0,
	5906: 0x8DBC,
	5907: 0x8DF1,
	5908: 0x8DF2,
	5909: 0x8DF4,
	5910: 0x8DFD,
	5911: 0x8E01,
	5912: 0x8E04,
	5913: 0x8E05,
	5914: 0x8E06,
	5915: 0x8E0B,
	5916: 0x8E11,
	5917: 0x8E14,
	5918: 0x8E16,
	5919: 0x8E20,
	5920: 0x8E21,
	5921: 0x8E22,
	5922: 0x8E23,
	5923: 0x8E26,
	5924: 0x8E27,
	5925: 0x8E31,
	5926: 0x8E33,
	5927: 0x8E36,
	5928: 0x8E37,
	5929: 0x8E38,
	5930: 0x8E39,
	5931: 0x8E3D,
	5932: 0x8E40,
	5933: 0x8E41,
	5934: 0x8E4B,
	5935: 0x8E4D,
	5936: 0x8E4E,
	5937: 0x8E4F,
	5938: 0x8E54,
	5939: 0x8E5B,
	5940: 0x8E5C,
	5941: 0x8E5D,
	5942: 0x8E5E,
	5943: 0x8E61,
	5944: 0x8E62,
	5945: 0x8E69,
	5946: 0x8E6C,
	5947: 0x8E6D,
	5948: 0x8E6F,
	5949: 0x8E70,
	5950: 0x8E71,
	5951: 0x8E79,
	5952: 0x8E7A,
	5953: 0x8E7B,
	5954: 0x8E82,
	5955: 0x8E83,
	5956: 0x8E89,
	5957: 0x8E90,
	5958: 0x8E92,
	5959: 0x8E95,
	5960: 0x8E9A,
	5961: 0x8E9B,
	5962: 0x8E9D,
	5963: 0x8E9E,
	5964: 0x8EA2,
	5965: 0x8EA7,
	5966: 0x8EA9,
	5967: 0x8EAD,
	5968: 0x8EAE,
	5969: 0x8EB3,
	5970: 0x8EB5,
	5971: 0x8EBA,
	5972: 0x8EBB,
	5973: 0x8EC0,
	5974: 0x8EC1,
	5975: 0x8EC3,
	5976: 0x8EC4,
	5977: 0x8EC7,
	5978: 0x8ECF,
	5979: 0x8ED1,
	5980: 0x8ED4,
	5981: 0x8EDC,
	5982: 0x8EE8,
	5983: 0x8EEE,
	5984: 0x8EF0,
	5985: 0x8EF1,
	5986: 0x8EF7,
	5987: 0x8EF9,
	5988: 0x8EFA,
	5989: 0x8EED,
	5990: 0x8F00,
	5991: 0x8F02,
	5992: 0x8F07,
	5993: 0x8F08,
	5994: 0x8F0F,
	5995: 0x8F10,
	5996: 0x8F16,
	5997: 0x8F17,
	5998: 0x8F18,
	5999: 0x8F1E,
	6000: 0x8F20,
	6001: 0x8F21,
	6002: 0x8F23,
	6003: 0x8F25,
	6004: 0x8F27,
	6005: 0x8F28,
	6006: 0x8F2C,
	6007: 0x8F2D,
	6008: 0x8F2E,
	6009: 0x8F34,
	6010: 0x8F35,
	6011: 0x8F36,
	6012: 0x8F37,
	6013: 0x8F3A,
	6014: 0x8F40,
	6015: 0x8F41,
	6016: 0x8F43,
	6017: 0x8F47,
	6018: 0x8F4F,
	6019: 0x8F51,
	6020: 0x8F52,
	6021: 0x8F53,
	6022: 0x8F54,
	6023: 0x8F55,
	6024: 0x8F58,
	6025: 0x8F5D,
	6026: 0x8F5E,
	6027: 0x8F65,
	6028: 0x8F9D,
	6029: 0x8FA0,
	6030: 0x8FA1,
	6031: 0x8FA4,
	6032: 0x8FA5,
	6033: 0x8FA6,
	6034: 0x8FB5,
	6035: 0x8FB6,
	6036: 0x8FB8,
	6037: 0x8FBE,
	6038: 0x8FC0,
	6039: 0x8FC1,
	6040: 0x8FC6,
	6041: 0x8FCA,
	6042: 0x8FCB,
	6043: 0x8FCD,
	6044: 0x8FD0,
	6045: 0x8FD2,
	6046: 0x8FD3,
	6047: 0x8FD5,
	6048: 0x8FE0,
	6049: 0x8FE3,
	6050: 0x8FE4,
	6051: 0x8FE8,
	6052: 0x8FEE,
	6053: 0x8FF1,
	6054: 0x8FF5,
	6055: 0x8FF6,
	6056: 0x8FFB,
	6057: 0x8FFE,
	6058: 0x9002,
	6059: 0x9004,
	6060: 0x9008,
	6061: 0x900C,
	6062: 0x9018,
	6063: 0x901B,
	6064: 0x9028,
	6065: 0x9029,
	6066: 0x902F,
	6067: 0x902A,
	6068: 0x902C,
	6069: 0x902D,
	6070: 0x9033,
	6071: 0x9034,
	6072: 0x9037,
	6073: 0x903F,
	6074: 0x9043,
	6075: 0x9044,
	6076: 0x904C,
	6077: 0x905B,
	6078: 0x905D,
	6079: 0x9062,
	6080: 0x9066,
	6081: 0x9067,
	6082: 0x906C,
	6083: 0x9070,
	6084: 0x9074,
	6085: 0x9079,
	6086: 0x9085,
	6087: 0x9088,
	6088: 0x908B,
	6089: 0x908C,
	6090: 0x908E,
	6091: 0x9090,
	6092: 0x9095,
	6093: 0x9097,
	6094: 0x9098,
	6095: 0x9099,
	6096: 0x909B,
	6097: 0x90A0,
	6098: 0x90A1,
	6099: 0x90A2,
	6100: 0x90A5,
	6101: 0x90B0,
	6102: 0x90B2,
	6103: 0x90B3,
	6104: 0x90B4,
	6105: 0x90B6,
	6106: 0x90BD,
	6107: 0x90CC,
	6108: 0x90BE,
	6109: 0x90C3,
	6110: 0x90C4,
	6111: 0x90C5,
	6112: 0x90C7,
	6113: 0x90C8,
	6114: 0x90D5,
	6115: 0x90D7,
	6116: 0x90D8,
	6117: 0x90D9,
	6118: 0x90DC,
	6119: 0x90DD,
	6120: 0x90DF,
	6121: 0x90E5,
	6122: 0x90D2,
	6123: 0x90F6,
	6124: 0x90EB,
	6125: 0x90EF,
	6126: 0x90F0,
	6127: 0x90F4,
	6128: 0x90FE,
	6129: 0x90FF,
	6130: 0x9100,
	6131: 0x9104,
	6132: 0x9105,
	6133: 0x9106,
	6134: 0x9108,
	6135: 0x910D,
	6136: 0x9110,
	6137: 0x9114,
	6138: 0x9116,
	6139: 0x9117,
	6140: 0x9118,
	6141: 0x911A,
	6142: 0x911C,
	6143: 0x911E,
	6144: 0x9120,
	6145: 0x9125,
	6146: 0x9122,
	6147: 0x9123,
	6148: 0x9127,
	6149: 0x9129,
	6150: 0x912E,
	6151: 0x912F,
	6152: 0x9131,
	6153: 0x9134,
	6154: 0x9136,
	6155: 0x9137,
	6156: 0x9139,
	6157: 0x913A,
	6158: 0x913C,
	6159: 0x913D,
	6160: 0x9143,
	6161: 0x9147,
	6162: 0x9148,
	6163: 0x914F,
	6164: 0x9153,
	6165: 0x9157,
	6166: 0x9159,
	6167: 0x915A,
	6168: 0x915B,
	6169: 0x9161,
	6170: 0x9164,
	6171: 0x9167,
	6172: 0x916D,
	6173: 0x9174,
	6174: 0x9179,
	6175: 0x917A,
	6176: 0x917B,
	6177: 0x9181,
	6178: 0x9183,
	6179: 0x9185,
	6180: 0x9186,
	6181: 0x918A,
	6182: 0x918E,
	6183: 0x9191,
	6184: 0x9193,
	6185: 0x9194,
	6186: 0x9195,
	6187: 0x9198,
	6188: 0x919E,
	6189: 0x91A1,
	6190: 0x91A6,
	6191: 0x91A8,
	6192: 0x91AC,
	6193: 0x91AD,
	6194: 0x91AE,
	6195: 0x91B0,
	6196: 0x91B1,
	6197: 0x91B2,
	6198: 0x91B3,
	6199: 0x91B6,
	6200: 0x91BB,
	6201: 0x91BC,
	6202: 0x91BD,
	6203: 0x91BF,
	6204: 0x91C2,
	6205: 0x91C3,
	6206: 0x91C5,
	6207: 0x91D3,
	6208: 0x91D4,
	6209: 0x91D7,
	6210: 0x91D9,
	6211: 0x91DA,
	6212: 0x91DE,
	6213: 0x91E4,
	6214: 0x91E5,
	6215: 0x91E9,
	6216: 0x91EA,
	6217: 0x91EC,
	6218: 0x91ED,
	6219: 0x91EE,
	6220: 0x91EF,
	6221: 0x91F0,
	6222: 0x91F1,
	6223: 0x91F7,
	6224: 0x91F9,
	6225: 0x91FB,
	6226: 0x91FD,
	6227: 0x9200,
	6228: 0x9201,
	6229: 0x9204,
	6230: 0x9205,
	6231: 0x9206,
	6232: 0x9207,
	6233: 0x9209,
	6234: 0x920A,
	6235: 0x920C,
	6236: 0x9210,
	6237: 0x9212,
	6238: 0x9213,
	6239: 0x9216,
	6240: 0x9218,
	6241: 0x921C,
	6242: 0x921D,
	6243: 0x9223,
	6244: 0x9224,
	6245: 0x9225,
	6246: 0x9226,
	6247: 0x9228,
	6248: 0x922E,
	6249: 0x922F,
	6250: 0x9230,
	6251: 0x9233,
	6252: 0x9235,
	6253: 0x9236,
	6254: 0x9238,
	6255: 0x9239,
	6256: 0x923A,
	6257: 0x923C,
	6258: 0x923E,
	6259: 0x9240,
	6260: 0x9242,
	6261: 0x9243,
	6262: 0x9246,
	6263: 0x9247,
	6264: 0x924A,
	6265: 0x924D,
	6266: 0x924E,
	6267: 0x924F,
	6268: 0x9251,
	6269: 0x9258,
	6270: 0x9259,
	6271: 0x925C,
	6272: 0x925D,
	6273: 0x9260,
	6274: 0x9261,
	6275: 0x9265,
	6276: 0x9267,
	6277: 0x9268,
	6278: 0x9269,
	6279: 0x926E,
	6280: 0x926F,
	6281: 0x9270,
	6282: 0x9275,
	6283: 0x9276,
	6284: 0x9277,
	6285: 0x9278,
	6286: 0x9279,
	6287: 0x927B,
	6288: 0x927C,
	6289: 0x927D,
	6290: 0x927F,
	6291: 0x9288,
	6292: 0x9289,
	6293: 0x928A,
	6294: 0x928D,
	6295: 0x928E,
	6296: 0x9292,
	6297: 0x9297,
	6298: 0x9299,
	6299: 0x929F,
	6300: 0x92A0,
	6301: 0x92A4,
	6302: 0x92A5,
	6303: 0x92A7,
	6304: 0x92A8,
	6305: 0x92AB,
	6306: 0x92AF,
	6307: 0x92B2,
	6308: 0x92B6,
	6309: 0x92B8,
	6310: 0x92BA,
	6311: 0x92BB,
	6312: 0x92BC,
	6313: 0x92BD,
	6314: 0x92BF,
	6315: 0x92C0,
	6316: 0x92C1,
	6317: 0x92C2,
	6318: 0x92C3,
	6319: 0x92C5,
	6320: 0x92C6,
	6321: 0x92C7,
	6322: 0x92C8,
	6323: 0x92CB,
	6324: 0x92CC,
	6325: 0x92CD,
	6326: 0x92CE,
	6327: 0x92D0,
	6328: 0x92D3,
	6329: 0x92D5,
	6330: 0x92D7,
	6331: 0x92D8,
	6332: 0x92D9,
	6333: 0x92DC,
	6334: 0x92DD,
	6335: 0x92DF,
	6336: 0x92E0,
	6337: 0x92E1,
	6338: 0x92E3,
	6339: 0x92E5,
	6340: 0x92E7,
	6341: 0x92E8,
	6342: 0x92EC,
	6343: 0x92EE,
	6344: 0x92F0,
	6345: 0x92F9,
	6346: 0x92FB,
	6347: 0x92FF,
	6348: 0x9300,
	6349: 0x9302,
	6350: 0x9308,
	6351: 0x930D,
	6352: 0x9311,
	6353: 0x9314,
	6354: 0x9315,
	6355: 0x931C,
	6356: 0x931D,
	6357: 0x931E,
	6358: 0x931F,
	6359: 0x9321,
	6360: 0x9324,
	6361: 0x9325,
	6362: 0x9327,
	6363: 0x9329,
	6364: 0x932A,
	6365: 0x9333,
	6366: 0x9334,
	6367: 0x9336,
	6368: 0x9337,
	6369: 0x9347,
	6370: 0x9348,
	6371: 0x9349,
	6372: 0x9350,
	6373: 0x9351,
	6374: 0x9352,
	6375: 0x9355,
	6376: 0x9357,
	6377: 0x9358,
	6378: 0x935A,
	6379: 0x935E,
	6380: 0x9364,
	6381: 0x9365,
	6382: 0x9367,
	6383: 0x9369,
	6384: 0x936A,
	6385: 0x936D,
	6386: 0x936F,
	6387: 0x9370,
	6388: 0x9371,
	6389: 0x9373,
	6390: 0x9374,
	6391: 0x9376,
	6392: 0x937A,
	6393: 0x937D,
	6394: 0x937F,
	6395: 0x9380,
	6396: 0x9381,
	6397: 0x9382,
	6398: 0x9388,
	6399: 0x938A,
	6400: 0x938B,
	6401: 0x938D,
	6402: 0x938F,
	6403: 0x9392,
	6404: 0x9395,
	6405: 0x9398,
	6406: 0x939B,
	6407: 0x939E,
	6408: 0x93A1,
	6409: 0x93A3,
	6410: 0x93A4,
	6411: 0x93A6,
	6412: 0x93A8,
	6413: 0x93AB,
	6414: 0x93B4,
	6415: 0x93B5,
	6416: 0x93B6,
	6417: 0x93BA,
	6418: 0x93A9,
	6419: 0x93C1,
	6420: 0x93C4,
	6421: 0x93C5,
	6422: 0x93C6,
	6423: 0x93C7,
	6424: 0x93C9,
	6425: 0x93CA,
	6426: 0x93CB,
	6427: 0x93CC,
	6428: 0x93CD,
	6429: 0x93D3,
	6430: 0x93D9,
	6431: 0x93DC,
	6432: 0x93DE,
	6433: 0x93DF,
	6434: 0x93E2,
	6435: 0x93E6,
	6436: 0x93E7,
	6437: 0x93F9,
	6438: 0x93F7,
	6439: 0x93F8,
	6440: 0x93FA,
	6441: 0x93FB,
	6442: 0x93FD,
	6443: 0x9401,
	6444: 0x9402,
	6445: 0x9404,
	6446: 0x9408,
	6447: 0x9409,
	6448: 0x940D,
	6449: 0x940E,
	6450: 0x940F,
	6451: 0x9415,
	6452: 0x9416,
	6453: 0x9417,
	6454: 0x941F,
	6455: 0x942E,
	6456: 0x942F,
	6457: 0x9431,
	6458: 0x9432,
	6459: 0x9433,
	6460: 0x9434,
	6461: 0x943B,
	6462: 0x943F,
	6463: 0x943D,
	6464: 0x9443,
	6465: 0x9445,
	6466: 0x9448,
	6467: 0x944A,
	6468: 0x944C,
	6469: 0x9455,
	6470: 0x9459,
	6471: 0x945C,
	6472: 0x945F,
	6473: 0x9461,
	6474: 0x9463,
	6475: 0x9468,
	6476: 0x946B,
	6477: 0x946D,
	6478: 0x946E,
	6479: 0x946F,
	6480: 0x9471,
	6481: 0x9472,
	6482: 0x9484,
	6483: 0x9483,
	6484: 0x9578,
	6485: 0x9579,
	6486: 0x957E,
	6487: 0x9584,
	6488: 0x9588,
	6489: 0x958C,
	6490: 0x958D,
	6491: 0x958E,
	6492: 0x959D,
	6493: 0x959E,
	6494: 0x959F,
	6495: 0x95A1,
	6496: 0x95A6,
	6497: 0x95A9,
	6498: 0x95AB,
	6499: 0x95AC,
	6500: 0x95B4,
	6501: 0x95B6,
	6502: 0x95BA,
	6503: 0x95BD,
	6504: 0x95BF,
	6505: 0x95C6,
	6506: 0x95C8,
	6507: 0x95C9,
	6508: 0x95CB,
	6509: 0x95D0,
	6510: 0x95D1,
	6511: 0x95D2,
	6512: 0x95D3,
	6513: 0x95D9,
	6514: 0x95DA,
	6515: 0x95DD,
	6516: 0x95DE,
	6517: 0x95DF,
	6518: 0x95E0,
	6519: 0x95E4,
	6520: 0x95E6,
	6521: 0x961D,
	6522: 0x961E,
	6523: 0x9622,
	6524: 0x9624,
	6525: 0x9625,
	6526: 0x9626,
	6527: 0x962C,
	6528: 0x9631,
	6529: 0x9633,
	6530: 0x9637,
	6531: 0x9638,
	6532: 0x9639,
	6533: 0x963A,
	6534: 0x963C,
	6535: 0x963D,
	6536: 0x9641,
	6537: 0x9652,
	6538: 0x9654,
	6539: 0x9656,
	6540: 0x9657,
	6541: 0x9658,
	6542: 0x9661,
	6543: 0x966E,
	6544: 0x9674,
	6545: 0x967B,
	6546: 0x967C,
	6547: 0x967E,
	6548: 0x967F,
	6549: 0x9681,
	6550: 0x9682,
	6551: 0x9683,
	6552: 0x9684,
	6553: 0x9689,
	6554: 0x9691,
	6555: 0x9696,
	6556: 0x969A,
	6557: 0x969D,
	6558: 0x969F,
	6559: 0x96A4,
	6560: 0x96A5,
	6561: 0x96A6,
	6562: 0x96A9,
	6563: 0x96AE,
	6564: 0x96AF,
	6565: 0x96B3,
	6566: 0x96BA,
	6567: 0x96CA,
	6568: 0x96D2,
	6569: 0x5DB2,
	6570: 0x96D8,
	6571: 0x96DA,
	6572: 0x96DD,
	6573: 0x96DE,
	6574: 0x96DF,
	6575: 0x96E9,
	6576: 0x96EF,
	6577: 0x96F1,
	6578: 0x96FA,
	6579: 0x9702,
	6580: 0x9703,
	6581: 0x9705,
	6582: 0x9709,
	6583: 0x971A,
	6584: 0x971B,
	6585: 0x971D,
	6586: 0x9721,
	6587: 0x9722,
	6588: 0x9723,
	6589: 0x9728,
	6590: 0x9731,
	6591: 0x9733,
	6592: 0x9741,
	6593: 0x9743,
	6594: 0x974A,
	6595: 0x974E,
	6596: 0x974F,
	6597: 0x9755,
	6598: 0x9757,
	6599: 0x9758,
	6600: 0x975A,
	6601: 0x975B,
	6602: 0x9763,
	6603: 0x9767,
	6604: 0x976A,
	6605: 0x976E,
	6606: 0x9773,
	6607: 0x9776,
	6608: 0x9777,
	6609: 0x9778,
	6610: 0x977B,
	6611: 0x977D,
	6612: 0x977F,
	6613: 0x9780,
	6614: 0x9789,
	6615: 0x9795,
	6616: 0x9796,
	6617: 0x9797,
	6618: 0x9799,
	6619: 0x979A,
	6620: 0x979E,
	6621: 0x979F,
	6622: 0x97A2,
	6623: 0x97AC,
	6624: 0x97AE,
	6625: 0x97B1,
	6626: 0x97B2,
	6627: 0x97B5,
	6628: 0x97B6,
	6629: 0x97B8,
	6630: 0x97B9,
	6631: 0x97BA,
	6632: 0x97BC,
	6633: 0x97BE,
	6634: 0x97BF,
	6635: 0x97C1,
	6636: 0x97C4,
	6637: 0x97C5,
	6638: 0x97C7,
	6639: 0x97C9,
	6640: 0x97CA,
	6641: 0x97CC,
	6642: 0x97CD,
	6643: 0x97CE,
	6644: 0x97D0,
	6645: 0x97D1,
	6646: 0x97D4,
	6647: 0x97D7,
	6648: 0x97D8,
	6649: 0x97D9,
	6650: 0x97DD,
	6651: 0x97DE,
	6652: 0x97E0,
	6653: 0x97DB,
	6654: 0x97E1,
	6655: 0x97E4,
	6656: 0x97EF,
	6657: 0x97F1,
	6658: 0x97F4,
	6659: 0x97F7,
	6660: 0x97F8,
	6661: 0x97FA,
	6662: 0x9807,
	6663: 0x980A,
	6664: 0x9819,
	6665: 0x980D,
	6666: 0x980E,
	6667: 0x9814,
	6668: 0x9816,
	6669: 0x981C,
	6670: 0x981E,
	6671: 0x9820,
	6672: 0x9823,
	6673: 0x9826,
	6674: 0x982B,
	6675: 0x982E,
	6676: 0x982F,
	6677: 0x9830,
	6678: 0x9832,
	6679: 0x9833,
	6680: 0x9835,
	6681: 0x9825,
	6682: 0x983E,
	6683: 0x9844,
	6684: 0x9847,
	6685: 0x984A,
	6686: 0x9851,
	6687: 0x9852,
	6688: 0x9853,
	6689: 0x9856,
	6690: 0x9857,
	6691: 0x9859,
	6692: 0x985A,
	6693: 0x9862,
	6694: 0x9863,
	6695: 0x9865,
	6696: 0x9866,
	6697: 0x986A,
	6698: 0x986C,
	6699: 0x98AB,
	6700: 0x98AD,
	6701: 0x98AE,
	6702: 0x98B0,
	6703: 0x98B4,
	6704: 0x98B7,
	6705: 0x98B8,
	6706: 0x98BA,
	6707: 0x98BB,
	6708: 0x98BF,
	6709: 0x98C2,
	6710: 0x98C5,
	6711: 0x98C8,
	6712: 0x98CC,
	6713: 0x98E1,
	6714: 0x98E3,
	6715: 0x98E5,
	6716: 0x98E6,
	6717: 0x98E7,
	6718: 0x98EA,
	6719: 0x98F3,
	6720: 0x98F6,
	6721: 0x9902,
	6722: 0x9907,
	6723: 0x9908,
	6724: 0x9911,
	6725: 0x9915,
	6726: 0x9916,
	6727: 0x9917,
	6728: 0x991A,
	6729: 0x991B,
	6730: 0x991C,
	6731: 0x991F,
	6732: 0x9922,
	6733: 0x9926,
	6734: 0x9927,
	6735: 0x992B,
	6736: 0x9931,
	6737: 0x9932,
	6738: 0x9933,
	6739: 0x9934,
	6740: 0x9935,
	6741: 0x9939,
	6742: 0x993A,
	6743: 0x993B,
	6744: 0x993C,
	6745: 0x9940,
	6746: 0x9941,
	6747: 0x9946,
	6748: 0x9947,
	6749: 0x9948,
	6750: 0x994D,
	6751: 0x994E,
	6752: 0x9954,
	6753: 0x9958,
	6754: 0x9959,
	6755: 0x995B,
	6756: 0x995C,
	6757: 0x995E,
	6758: 0x995F,
	6759: 0x9960,
	6760: 0x999B,
	6761: 0x999D,
	6762: 0x999F,
	6763: 0x99A6,
	6764: 0x99B0,
	6765: 0x99B1,
	6766: 0x99B2,
	6767: 0x99B5,
	6768: 0x99B9,
	6769: 0x99BA,
	6770: 0x99BD,
	6771: 0x99BF,
	6772: 0x99C3,
	6773: 0x99C9,
	6774: 0x99D3,
	6775: 0x99D4,
	6776: 0x99D9,
	6777: 0x99DA,
	6778: 0x99DC,
	6779: 0x99DE,
	6780: 0x99E7,
	6781: 0x99EA,
	6782: 0x99EB,
	6783: 0x99EC,
	6784: 0x99F0,
	6785: 0x99F4,
	6786: 0x99F5,
	6787: 0x99F9,
	6788: 0x99FD,
	6789: 0x99FE,
	6790: 0x9A02,
	6791: 0x9A03,
	6792: 0x9A04,
	6793: 0x9A0B,
	6794: 0x9A0C,
	6795: 0x9A10,
	6796: 0x9A11,
	6797: 0x9A16,
	6798: 0x9A1E,
	6799: 0x9A20,
	6800: 0x9A22,
	6801: 0x9A23,
	6802: 0x9A24,
	6803: 0x9A27,
	6804: 0x9A2D,
	6805: 0x9A2E,
	6806: 0x9A33,
	6807: 0x9A35,
	6808: 0x9A36,
	6809: 0x9A38,
	6810: 0x9A47,
	6811: 0x9A41,
	6812: 0x9A44,
	6813: 0x9A4A,
	6814: 0x9A4B,
	6815: 0x9A4C,
	6816: 0x9A4E,
	6817: 0x9A51,
	6818: 0x9A54,
	6819: 0x9A56,
	6820: 0x9A5D,
	6821: 0x9AAA,
	6822: 0x9AAC,
	6823: 0x9AAE,
	6824: 0x9AAF,
	6825: 0x9AB2,
	6826: 0x9AB4,
	6827: 0x9AB5,
	6828: 0x9AB6,
	6829: 0x9AB9,
	6830: 0x9ABB,
	6831: 0x9ABE,
	6832: 0x9ABF,
	6833: 0x9AC1,
	6834: 0x9AC3,
	6835: 0x9AC6,
	6836: 0x9AC8,
	6837: 0x9ACE,
	6838: 0x9AD0,
	6839: 0x9AD2,
	6840: 0x9AD5,
	6841: 0x9AD6,
	6842: 0x9AD7,
	6843: 0x9ADB,
	6844: 0x9ADC,
	6845: 0x9AE0,
	6846: 0x9AE4,
	6847: 0x9AE5,
	6848: 0x9AE7,
	6849: 0x9AE9,
	6850: 0x9AEC,
	6851: 0x9AF2,
	6852: 0x9AF3,
	6853: 0x9AF5,
	6854: 0x9AF9,
	6855: 0x9AFA,
	6856: 0x9AFD,
	6857: 0x9AFF,
	6858: 0x9B00,
	6859: 0x9B01,
	6860: 0x9B02,
	6861: 0x9B03,
	6862: 0x9B04,
	6863: 0x9B05,
	6864: 0x9B08,
	6865: 0x9B09,
	6866: 0x9B0B,
	6867: 0x9B0C,
	6868: 0x9B0D,
	6869: 0x9B0E,
	6870: 0x9B10,
	6871: 0x9B12,
	6872: 0x9B16,
	6873: 0x9B19,
	6874: 0x9B1B,
	6875: 0x9B1C,
	6876: 0x9B20,
	6877: 0x9B26,
	6878: 0x9B2B,
	6879: 0x9B2D,
	6880: 0x9B33,
	6881: 0x9B34,
	6882: 0x9B35,
	6883: 0x9B37,
	6884: 0x9B39,
	6885: 0x9B3A,
	6886: 0x9B3D,
	6887: 0x9B48,
	6888: 0x9B4B,
	6889: 0x9B4C,
	6890: 0x9B55,
	6891: 0x9B56,
	6892: 0x9B57,
	6893: 0x9B5B,
	6894: 0x9B5E,
	6895: 0x9B61,
	6896: 0x9B63,
	6897: 0x9B65,
	6898: 0x9B66,
	6899: 0x9B68,
	6900: 0x9B6A,
	6901: 0x9B6B,
	6902: 0x9B6C,
	6903: 0x9B6D,
	6904: 0x9B6E,
	6905: 0x9B73,
	6906: 0x9B75,
	6907: 0x9B77,
	6908: 0x9B78,
	6909: 0x9B79,
	6910: 0x9B7F,
	6911: 0x9B80,
	6912: 0x9B84,
	6913: 0x9B85,
	6914: 0x9B86,
	6915: 0x9B87,
	6916: 0x9B89,
	6917: 0x9B8A,
	6918: 0x9B8B,
	6919: 0x9B8D,
	6920: 0x9B8F,
	6921: 0x9B90,
	6922: 0x9B94,
	6923: 0x9B9A,
	6924: 0x9B9D,
	6925: 0x9B9E,
	6926: 0x9BA6,
	6927: 0x9BA7,
	6928: 0x9BA9,
	6929: 0x9BAC,
	6930: 0x9BB0,
	6931: 0x9BB1,
	6932: 0x9BB2,
	6933: 0x9BB7,
	6934: 0x9BB8,
	6935: 0x9BBB,
	6936: 0x9BBC,
	6937: 0x9BBE,
	6938: 0x9BBF,
	6939: 0x9BC1,
	6940: 0x9BC7,
	6941: 0x9BC8,
	6942: 0x9BCE,
	6943: 0x9BD0,
	6944: 0x9BD7,
	6945: 0x9BD8,
	6946: 0x9BDD,
	6947: 0x9BDF,
	6948: 0x9BE5,
	6949: 0x9BE7,
	6950: 0x9BEA,
	6951: 0x9BEB,
	6952: 0x9BEF,
	6953: 0x9BF3,
	6954: 0x9BF7,
	6955: 0x9BF8,
	6956: 0x9BF9,
	6957: 0x9BFA,
	6958: 0x9BFD,
	6959: 0x9BFF,
	6960: 0x9C00,
	6961: 0x9C02,
	6962: 0x9C0B,
	6963: 0x9C0F,
	6964: 0x9C11,
	6965: 0x9C16,
	6966: 0x9C18,
	6967: 0x9C19,
	6968: 0x9C1A,
	6969: 0x9C1C,
	6970: 0x9C1E,
	6971: 0x9C22,
	6972: 0x9C23,
	6973: 0x9C26,
	6974: 0x9C27,
	6975: 0x9C28,
	6976: 0x9C29,
	6977: 0x9C2A,
	6978: 0x9C31,
	6979: 0x9C35,
	6980: 0x9C36,
	6981: 0x9C37,
	6982: 0x9C3D,
	6983: 0x9C41,
	6984: 0x9C43,
	6985: 0x9C44,
	6986: 0x9C45,
	6987: 0x9C49,
	6988: 0x9C4A,
	6989: 0x9C4E,
	6990: 0x9C4F,
	6991: 0x9C50,
	6992: 0x9C53,
	6993: 0x9C54,
	6994: 0x9C56,
	6995: 0x9C58,
	6996: 0x9C5B,
	6997: 0x9C5D,
	6998: 0x9C5E,
	6999: 0x9C5F,
	7000: 0x9C63,
	7001: 0x9C69,
	7002: 0x9C6A,
	7003: 0x9C5C,
	7004: 0x9C6B,
	7005: 0x9C68,
	7006: 0x9C6E,
	7007: 0x9C70,
	7008: 0x9C72,
	7009: 0x9C75,
	7010: 0x9C77,
	7011: 0x9C7B,
	7012: 0x9CE6,
	7013: 0x9CF2,
	7014: 0x9CF7,
	7015: 0x9CF9,
	7016: 0x9D0B,
	7017: 0x9D02,
	7018: 0x9D11,
	7019: 0x9D17,
	7020: 0x9D18,
	7021: 0x9D1C,
	7022: 0x9D1D,
	7023: 0x9D1E,
	7024: 0x9D2F,
	7025: 0x9D30,
	7026: 0x9D32,
	7027: 0x9D33,
	7028: 0x9D34,
	7029: 0x9D3A,
	7030: 0x9D3C,
	7031: 0x9D45,
	7032: 0x9D3D,
	7033: 0x9D42,
	7034: 0x9D43,
	7035: 0x9D47,
	7036: 0x9D4A,
	7037: 0x9D53,
	7038: 0x9D54,
	7039: 0x9D5F,
	7040: 0x9D63,
	7041: 0x9D62,
	7042: 0x9D65,
	7043: 0x9D69,
	7044: 0x9D6A,
	7045: 0x9D6B,
	7046: 0x9D70,
	7047: 0x9D76,
	7048: 0x9D77,
	7049: 0x9D7B,
	7050: 0x9D7C,
	7051: 0x9D7E,
	7052: 0x9D83,
	7053: 0x9D84,
	7054: 0x9D86,
	7055: 0x9D8A,
	7056: 0x9D8D,
	7057: 0x9D8E,
	7058: 0x9D92,
	7059: 0x9D93,
	7060: 0x9D95,
	7061: 0x9D96,
	7062: 0x9D97,
	7063: 0x9D98,
	7064: 0x9DA1,
	7065: 0x9DAA,
	7066: 0x9DAC,
	7067: 0x9DAE,
	7068: 0x9DB1,
	7069: 0x9DB5,
	7070: 0x9DB9,
	7071: 0x9DBC,
	7072: 0x9DBF,
	7073: 0x9DC3,
	7074: 0x9DC7,
	7075: 0x9DC9,
	7076: 0x9DCA,
	7077: 0x9DD4,
	7078: 0x9DD5,
	7079: 0x9DD6,
	7080: 0x9DD7,
	7081: 0x9DDA,
	7082: 0x9DDE,
	7083: 0x9DDF,
	7084: 0x9DE0,
	7085: 0x9DE5,
	7086: 0x9DE7,
	7087: 0x9DE9,
	7088: 0x9DEB,
	7089: 0x9DEE,
	7090: 0x9DF0,
	7091: 0x9DF3,
	7092: 0x9DF4,
	7093: 0x9DFE,
	7094: 0x9E0A,
	7095: 0x9E02,
	7096: 0x9E07,
	7097: 0x9E0E,
	7098: 0x9E10,
	7099: 0x9E11,
	7100: 0x9E12,
	7101: 0x9E15,
	7102: 0x9E16,
	7103: 0x9E19,
	7104: 0x9E1C,
	7105: 0x9E1D,
	7106: 0x9E7A,
	7107: 0x9E7B,
	7108: 0x9E7C,
	7109: 0x9E80,
	7110: 0x9E82,
	7111: 0x9E83,
	7112: 0x9E84,
	7113: 0x9E85,
	7114: 0x9E87,
	7115: 0x9E8E,
	7116: 0x9E8F,
	7117: 0x9E96,
	7118: 0x9E98,
	7119: 0x9E9B,
	7120: 0x9E9E,
	7121: 0x9EA4,
	7122: 0x9EA8,
	7123: 0x9EAC,
	7124: 0x9EAE,
	7125: 0x9EAF,
	7126: 0x9EB0,
	7127: 0x9EB3,
	7128: 0x9EB4,
	7129: 0x9EB5,
	7130: 0x9EC6,
	7131: 0x9EC8,
	7132: 0x9ECB,
	7133: 0x9ED5,
	7134: 0x9EDF,
	7135: 0x9EE4,
	7136: 0x9EE7,
	7137: 0x9EEC,
	7138: 0x9EED,
	7139: 0x9EEE,
	7140: 0x9EF0,
	7141: 0x9EF1,
	7142: 0x9EF2,
	7143: 0x9EF5,
	7144: 0x9EF8,
	7145: 0x9EFF,
	7146: 0x9F02,
	7147: 0x9F03,
	7148: 0x9F09,
	7149: 0x9F0F,
	7150: 0x9F10,
	7151: 0x9F11,
	7152: 0x9F12,
	7153: 0x9F14,
	7154: 0x9F16,
	7155: 0x9F17,
	7156: 0x9F19,
	7157: 0x9F1A,
	7158: 0x9F1B,
	7159: 0x9F1F,
	7160: 0x9F22,
	7161: 0x9F26,
	7162: 0x9F2A,
	7163: 0x9F2B,
	7164: 0x9F2F,
	7165: 0x9F31,
	7166: 0x9F32,
	7167: 0x9F34,
	7168: 0x9F37,
	7169: 0x9F39,
	7170: 0x9F3A,
	7171: 0x9F3C,
	7172: 0x9F3D,
	7173: 0x9F3F,
	7174: 0x9F41,
	7175: 0x9F43,
	7176: 0x9F44,
	7177: 0x9F45,
	7178: 0x9F46,
	7179: 0x9F47,
	7180: 0x9F53,
	7181: 0x9F55,
	7182: 0x9F56,
	7183: 0x9F57,
	7184: 0x9F58,
	7185: 0x9F5A,
	7186: 0x9F5D,
	7187: 0x9F5E,
	7188: 0x9F68,
	7189: 0x9F69,
	7190: 0x9F6D,
	7191: 0x9F6E,
	7192: 0x9F6F,
	7193: 0x9F70,
	7194: 0x9F71,
	7195: 0x9F73,
	7196: 0x9F75,
	7197: 0x9F7A,
	7198: 0x9F7D,
	7199: 0x9F8F,
	7200: 0x9F90,
	7201: 0x9F91,
	7202: 0x9F92,
	7203: 0x9F94,
	7204: 0x9F96,
	7205: 0x9F97,
	7206: 0x9F9E,
	7207: 0x9FA1,
	7208: 0x9FA2,
	7209: 0x9FA3,
	7210: 0x9FA5,
}

const (
	jis0208    = 1
	jis0212    = 2
	codeMask   = 0x7f
	codeShift  = 7
	tableShift = 14
)

const numEncodeTables = 6

// encodeX are the encoding tables from Unicode to JIS code,
// sorted by decreasing length.
// encode0: 20902 entries for runes in [19968, 40870).
// encode1:  1632 entries for runes in [ 8208,  9840).
// encode2:   974 entries for runes in [12288, 13262).
// encode3:   959 entries for runes in [  161,  1120).
// encode4:   261 entries for runes in [63785, 64046).
// encode5:   229 entries for runes in [65281, 65510).
//
// The high two bits of the value record whether the JIS code comes from the
// JIS0208 table (high bits == 1) or the JIS0212 table (high bits == 2).
// The low 14 bits are two 7-bit unsigned integers j1 and j2 that form the
// JIS code (94*j1 + j2) within that table.

const encode0Low, encode0High = 19968, 40870

var encode0 = [...]uint16{
	19968 - 19968: jis0208<<14 | 0x0F<<7 | 0x4B,
	19969 - 19968: jis0208<<14 | 0x22<<7 | 0x59,
	19970 - 19968: jis0212<<14 | 0x0F<<7 | 0x00,
	19971 - 19968: jis0208<<14 | 0x1B<<7 | 0x16,
	19972 - 19968: jis0212<<14 | 0x0F<<7 | 0x01,
	19973 - 19968: jis0212<<14 | 0x0F<<7 | 0x02,
	19975 - 19968: jis0208<<14 | 0x2A<<7 | 0x5B,
	19976 - 19968: jis0208<<14 | 0x1D<<7 | 0x45,
	19977 - 19968: jis0208<<14 | 0x1A<<7 | 0x0F,
	19978 - 19968: jis0208<<14 | 0x1D<<7 | 0x44,
	19979 - 19968: jis0208<<14 | 0x11<<7 | 0x1B,
	19980 - 19968: jis0212<<14 | 0x0F<<7 | 0x03,
	19981 - 19968: jis0208<<14 | 0x28<<7 | 0x33,
	19982 - 19968: jis0208<<14 | 0x2C<<7 | 0x1E,
	19984 - 19968: jis0208<<14 | 0x2F<<7 | 0x01,
	19985 - 19968: jis0208<<14 | 0x10<<7 | 0x0E,
	19986 - 19968: jis0212<<14 | 0x0F<<7 | 0x04,
	19988 - 19968: jis0208<<14 | 0x12<<7 | 0x4D,
	19989 - 19968: jis0208<<14 | 0x2F<<7 | 0x02,
	19990 - 19968: jis0208<<14 | 0x1F<<7 | 0x03,
	19991 - 19968: jis0208<<14 | 0x31<<7 | 0x21,
	19992 - 19968: jis0208<<14 | 0x14<<7 | 0x35,
	19993 - 19968: jis0208<<14 | 0x29<<7 | 0x19,
	19998 - 19968: jis0208<<14 | 0x1D<<7 | 0x46,
	19999 - 19968: jis0212<<14 | 0x0F<<7 | 0x05,
	20001 - 19968: jis0208<<14 | 0x2D<<7 | 0x1D,
	20003 - 19968: jis0212<<14 | 0x0F<<7 | 0x06,
	20004 - 19968: jis0212<<14 | 0x0F<<7 | 0x07,
	20006 - 19968: jis0208<<14 | 0x29<<7 | 0x21,
	20008 - 19968: jis0208<<14 | 0x58<<7 | 0x0C,
	20010 - 19968: jis0208<<14 | 0x2F<<7 | 0x03,
	20011 - 19968: jis0212<<14 | 0x0F<<7 | 0x09,
	20013 - 19968: jis0208<<14 | 0x22<<7 | 0x45,
	20014 - 19968: jis0212<<14 | 0x0F<<7 | 0x0A,
	20015 - 19968: jis0212<<14 | 0x0F<<7 | 0x0B,
	20016 - 19968: jis0212<<14 | 0x0F<<7 | 0x0C,
	20017 - 19968: jis0208<<14 | 0x2F<<7 | 0x04,
	20018 - 19968: jis0208<<14 | 0x15<<7 | 0x59,
	20021 - 19968: jis0212<<14 | 0x0F<<7 | 0x0D,
	20022 - 19968: jis0208<<14 | 0x2F<<7 | 0x05,
	20024 - 19968: jis0208<<14 | 0x13<<7 | 0x3C,
	20025 - 19968: jis0208<<14 | 0x22<<7 | 0x0F,
	20027 - 19968: jis0208<<14 | 0x1B<<7 | 0x46,
	20028 - 19968: jis0208<<14 | 0x2F<<7 | 0x06,
	20031 - 19968: jis0208<<14 | 0x2F<<7 | 0x07,
	20032 - 19968: jis0212<<14 | 0x0F<<7 | 0x0E,
	20033 - 19968: jis0212<<14 | 0x0F<<7 | 0x0F,
	20034 - 19968: jis0208<<14 | 0x2F<<7 | 0x08,
	20035 - 19968: jis0208<<14 | 0x26<<7 | 0x14,
	20036 - 19968: jis0212<<14 | 0x0F<<7 | 0x10,
	20037 - 19968: jis0208<<14 | 0x14<<7 | 0x36,
	20039 - 19968: jis0212<<14 | 0x0F<<7 | 0x11,
	20043 - 19968: jis0208<<14 | 0x26<<7 | 0x16,
	20045 - 19968: jis0208<<14 | 0x25<<7 | 0x42,
	20046 - 19968: jis0208<<14 | 0x17<<7 | 0x22,
	20047 - 19968: jis0208<<14 | 0x2A<<7 | 0x12,
	20049 - 19968: jis0212<<14 | 0x0F<<7 | 0x12,
	20053 - 19968: jis0208<<14 | 0x48<<7 | 0x28,
	20054 - 19968: jis0208<<14 | 0x2F<<7 | 0x09,
	20055 - 19968: jis0208<<14 | 0x1D<<7 | 0x47,
	20056 - 19968: jis0208<<14 | 0x2F<<7 | 0x0A,
	20057 - 19968: jis0208<<14 | 0x11<<7 | 0x14,
	20058 - 19968: jis0212<<14 | 0x0F<<7 | 0x13,
	20060 - 19968: jis0212<<14 | 0x0F<<7 | 0x14,
	20061 - 19968: jis0208<<14 | 0x15<<7 | 0x44,
	20062 - 19968: jis0208<<14 | 0x17<<7 | 0x4F,
	20063 - 19968: jis0208<<14 | 0x2B<<7 | 0x48,
	20066 - 19968: jis0208<<14 | 0x35<<7 | 0x05,
	20067 - 19968: jis0212<<14 | 0x0F<<7 | 0x15,
	20072 - 19968: jis0212<<14 | 0x0F<<7 | 0x16,
	20073 - 19968: jis0212<<14 | 0x0F<<7 | 0x17,
	20081 - 19968: jis0208<<14 | 0x2C<<7 | 0x4F,
	20083 - 19968: jis0208<<14 | 0x25<<7 | 0x5C,
	20084 - 19968: jis0212<<14 | 0x0F<<7 | 0x18,
	20085 - 19968: jis0212<<14 | 0x0F<<7 | 0x19,
	20089 - 19968: jis0212<<14 | 0x0F<<7 | 0x1A,
	20094 - 19968: jis0208<<14 | 0x13<<7 | 0x04,
	20095 - 19968: jis0212<<14 | 0x0F<<7 | 0x1B,
	20096 - 19968: jis0208<<14 | 0x14<<7 | 0x14,
	20098 - 19968: jis0208<<14 | 0x2F<<7 | 0x0B,
	20101 - 19968: jis0208<<14 | 0x2F<<7 | 0x0C,
	20102 - 19968: jis0208<<14 | 0x2D<<7 | 0x1A,
	20104 - 19968: jis0208<<14 | 0x2C<<7 | 0x1C,
	20105 - 19968: jis0208<<14 | 0x20<<7 | 0x47,
	20106 - 19968: jis0208<<14 | 0x2F<<7 | 0x0E,
	20107 - 19968: jis0208<<14 | 0x1A<<7 | 0x55,
	20108 - 19968: jis0208<<14 | 0x25<<7 | 0x52,
	20109 - 19968: jis0212<<14 | 0x0F<<7 | 0x1C,
	20110 - 19968: jis0208<<14 | 0x2F<<7 | 0x11,
	20113 - 19968: jis0208<<14 | 0x10<<7 | 0x1D,
	20114 - 19968: jis0208<<14 | 0x17<<7 | 0x3E,
	20116 - 19968: jis0208<<14 | 0x17<<7 | 0x3D,
	20117 - 19968: jis0208<<14 | 0x0F<<7 | 0x45,
	20118 - 19968: jis0212<<14 | 0x0F<<7 | 0x1D,
	20119 - 19968: jis0212<<14 | 0x0F<<7 | 0x1E,
	20120 - 19968: jis0208<<14 | 0x2E<<7 | 0x2A,
	20121 - 19968: jis0208<<14 | 0x2E<<7 | 0x29,
	20123 - 19968: jis0208<<14 | 0x19<<7 | 0x12,
	20124 - 19968: jis0208<<14 | 0x0F<<7 | 0x00,
	20125 - 19968: jis0212<<14 | 0x0F<<7 | 0x1F,
	20126 - 19968: jis0208<<14 | 0x2F<<7 | 0x12,
	20127 - 19968: jis0208<<14 | 0x2F<<7 | 0x13,
	20128 - 19968: jis0208<<14 | 0x2F<<7 | 0x14,
	20129 - 19968: jis0208<<14 | 0x2A<<7 | 0x13,
	20130 - 19968: jis0208<<14 | 0x2F<<7 | 0x15,
	20132 - 19968: jis0208<<14 | 0x17<<7 | 0x51,
	20133 - 19968: jis0208<<14 | 0x0F<<7 | 0x46,
	20134 - 19968: jis0208<<14 | 0x2A<<7 | 0x51,
	20136 - 19968: jis0208<<14 | 0x14<<7 | 0x5B,
	20139 - 19968: jis0208<<14 | 0x14<<7 | 0x5C,
	20140 - 19968: jis0208<<14 | 0x14<<7 | 0x5D,
	20141 - 19968: jis0208<<14 | 0x23<<7 | 0x41,
	20142 - 19968: jis0208<<14 | 0x2D<<7 | 0x1B,
	20143 - 19968: jis0212<<14 | 0x0F<<7 | 0x20,
	20144 - 19968: jis0208<<14 | 0x2F<<7 | 0x16,
	20147 - 19968: jis0208<<14 | 0x2F<<7 | 0x17,
	20150 - 19968: jis0208<<14 | 0x2F<<7 | 0x18,
	20153 - 19968: jis0212<<14 | 0x0F<<7 | 0x21,
	20154 - 19968: jis0208<<14 | 0x1E<<7 | 0x2C,
	20160 - 19968: jis0208<<14 | 0x1C<<7 | 0x19,
	20161 - 19968: jis0208<<14 | 0x1E<<7 | 0x2D,
	20162 - 19968: jis0208<<14 | 0x2F<<7 | 0x1D,
	20163 - 19968: jis0212<<14 | 0x0F<<7 | 0x22,
	20164 - 19968: jis0208<<14 | 0x2F<<7 | 0x1B,
	20166 - 19968: jis0208<<14 | 0x2F<<7 | 0x1C,
	20167 - 19968: jis0208<<14 | 0x14<<7 | 0x37,
	20170 - 19968: jis0208<<14 | 0x19<<7 | 0x02,
	20171 - 19968: jis0208<<14 | 0x11<<7 | 0x4F,
	20173 - 19968: jis0208<<14 | 0x2F<<7 | 0x1A,
	20174 - 19968: jis0208<<14 | 0x2F<<7 | 0x19,
	20175 - 19968: jis0208<<14 | 0x29<<7 | 0x08,
	20176 - 19968: jis0212<<14 | 0x0F<<7 | 0x23,
	20180 - 19968: jis0208<<14 | 0x1A<<7 | 0x25,
	20181 - 19968: jis0208<<14 | 0x1A<<7 | 0x24,
	20182 - 19968: jis0208<<14 | 0x21<<7 | 0x1D,
	20183 - 19968: jis0208<<14 | 0x2F<<7 | 0x1E,
	20184 - 19968: jis0208<<14 | 0x28<<7 | 0x34,
	20185 - 19968: jis0208<<14 | 0x1F<<7 | 0x46,
	20186 - 19968: jis0212<<14 | 0x0F<<7 | 0x24,
	20187 - 19968: jis0212<<14 | 0x0F<<7 | 0x25,
	20189 - 19968: jis0208<<14 | 0x00<<7 | 0x17,
	20190 - 19968: jis0208<<14 | 0x2F<<7 | 0x1F,
	20191 - 19968: jis0208<<14 | 0x2F<<7 | 0x21,
	20192 - 19968: jis0212<<14 | 0x0F<<7 | 0x26,
	20193 - 19968: jis0208<<14 | 0x58<<7 | 0x0D,
	20194 - 19968: jis0212<<14 | 0x0F<<7 | 0x28,
	20195 - 19968: jis0208<<14 | 0x21<<7 | 0x44,
	20196 - 19968: jis0208<<14 | 0x2D<<7 | 0x40,
	20197 - 19968: jis0208<<14 | 0x0F<<7 | 0x29,
	20200 - 19968: jis0212<<14 | 0x0F<<7 | 0x29,
	20205 - 19968: jis0208<<14 | 0x2F<<7 | 0x20,
	20206 - 19968: jis0208<<14 | 0x11<<7 | 0x1D,
	20207 - 19968: jis0212<<14 | 0x0F<<7 | 0x2A,
	20208 - 19968: jis0208<<14 | 0x15<<7 | 0x23,
	20209 - 19968: jis0212<<14 | 0x0F<<7 | 0x2B,
	20210 - 19968: jis0208<<14 | 0x22<<7 | 0x46,
	20211 - 19968: jis0212<<14 | 0x0F<<7 | 0x2C,
	20213 - 19968: jis0212<<14 | 0x0F<<7 | 0x2D,
	20214 - 19968: jis0208<<14 | 0x16<<7 | 0x4E,
	20215 - 19968: jis0208<<14 | 0x2F<<7 | 0x22,
	20219 - 19968: jis0208<<14 | 0x26<<7 | 0x03,
	20220 - 19968: jis0208<<14 | 0x58<<7 | 0x0E,
	20221 - 19968: jis0212<<14 | 0x0F<<7 | 0x2E,
	20222 - 19968: jis0212<<14 | 0x0F<<7 | 0x2F,
	20223 - 19968: jis0212<<14 | 0x0F<<7 | 0x30,
	20224 - 19968: jis0208<<14 | 0x58<<7 | 0x0F,
	20225 - 19968: jis0208<<14 | 0x13<<7 | 0x4A,
	20226 - 19968: jis0212<<14 | 0x0F<<7 | 0x32,
	20227 - 19968: jis0208<<14 | 0x58<<7 | 0x10,
	20232 - 19968: jis0212<<14 | 0x0F<<7 | 0x34,
	20233 - 19968: jis0208<<14 | 0x2F<<7 | 0x23,
	20234 - 19968: jis0208<<14 | 0x0F<<7 | 0x2A,
	20235 - 19968: jis0212<<14 | 0x0F<<7 | 0x35,
	20236 - 19968: jis0212<<14 | 0x0F<<7 | 0x36,
	20237 - 19968: jis0208<<14 | 0x17<<7 | 0x3F,
	20238 - 19968: jis0208<<14 | 0x13<<7 | 0x4B,
	20239 - 19968: jis0208<<14 | 0x28<<7 | 0x59,
	20240 - 19968: jis0208<<14 | 0x27<<7 | 0x11,
	20241 - 19968: jis0208<<14 | 0x14<<7 | 0x38,
	20242 - 19968: jis0212<<14 | 0x0F<<7 | 0x37,
	20245 - 19968: jis0212<<14 | 0x0F<<7 | 0x38,
	20246 - 19968: jis0212<<14 | 0x0F<<7 | 0x39,
	20247 - 19968: jis0212<<14 | 0x0F<<7 | 0x3A,
	20249 - 19968: jis0212<<14 | 0x0F<<7 | 0x3B,
	20250 - 19968: jis0208<<14 | 0x11<<7 | 0x50,
	20252 - 19968: jis0208<<14 | 0x2F<<7 | 0x46,
	20253 - 19968: jis0208<<14 | 0x24<<7 | 0x20,
	20270 - 19968: jis0212<<14 | 0x0F<<7 | 0x3C,
	20271 - 19968: jis0208<<14 | 0x26<<7 | 0x4B,
	20272 - 19968: jis0208<<14 | 0x2F<<7 | 0x25,
	20273 - 19968: jis0212<<14 | 0x0F<<7 | 0x3D,
	20275 - 19968: jis0212<<14 | 0x0F<<7 | 0x3F,
	20276 - 19968: jis0208<<14 | 0x27<<7 | 0x1B,
	20277 - 19968: jis0212<<14 | 0x0F<<7 | 0x40,
	20278 - 19968: jis0208<<14 | 0x2D<<7 | 0x41,
	20279 - 19968: jis0212<<14 | 0x0F<<7 | 0x41,
	20280 - 19968: jis0208<<14 | 0x1E<<7 | 0x0C,
	20281 - 19968: jis0208<<14 | 0x58<<7 | 0x11,
	20282 - 19968: jis0208<<14 | 0x1A<<7 | 0x26,
	20283 - 19968: jis0212<<14 | 0x0F<<7 | 0x43,
	20284 - 19968: jis0208<<14 | 0x1A<<7 | 0x56,
	20285 - 19968: jis0208<<14 | 0x11<<7 | 0x1F,
	20286 - 19968: jis0212<<14 | 0x0F<<7 | 0x44,
	20288 - 19968: jis0212<<14 | 0x0F<<7 | 0x45,
	20290 - 19968: jis0212<<14 | 0x0F<<7 | 0x46,
	20291 - 19968: jis0208<<14 | 0x23<<7 | 0x30,
	20294 - 19968: jis0208<<14 | 0x22<<7 | 0x01,
	20295 - 19968: jis0208<<14 | 0x2F<<7 | 0x29,
	20296 - 19968: jis0212<<14 | 0x0F<<7 | 0x47,
	20297 - 19968: jis0212<<14 | 0x0F<<7 | 0x48,
	20299 - 19968: jis0212<<14 | 0x0F<<7 | 0x49,
	20300 - 19968: jis0212<<14 | 0x0F<<7 | 0x4A,
	20301 - 19968: jis0208<<14 | 0x0F<<7 | 0x2B,
	20302 - 19968: jis0208<<14 | 0x23<<7 | 0x42,
	20303 - 19968: jis0208<<14 | 0x1C<<7 | 0x1A,
	20304 - 19968: jis0208<<14 | 0x19<<7 | 0x13,
	20305 - 19968: jis0208<<14 | 0x2C<<7 | 0x03,
	20306 - 19968: jis0212<<14 | 0x0F<<7 | 0x4B,
	20307 - 19968: jis0208<<14 | 0x21<<7 | 0x2D,
	20308 - 19968: jis0212<<14 | 0x0F<<7 | 0x4C,
	20309 - 19968: jis0208<<14 | 0x11<<7 | 0x1E,
	20310 - 19968: jis0208<<14 | 0x58<<7 | 0x12,
	20311 - 19968: jis0208<<14 | 0x2F<<7 | 0x28,
	20312 - 19968: jis0212<<14 | 0x0F<<7 | 0x4E,
	20313 - 19968: jis0208<<14 | 0x2C<<7 | 0x1D,
	20314 - 19968: jis0208<<14 | 0x2F<<7 | 0x24,
	20315 - 19968: jis0208<<14 | 0x2F<<7 | 0x26,
	20316 - 19968: jis0208<<14 | 0x19<<7 | 0x4D,
	20317 - 19968: jis0208<<14 | 0x2F<<7 | 0x27,
	20318 - 19968: jis0208<<14 | 0x34<<7 | 0x03,
	20319 - 19968: jis0212<<14 | 0x0F<<7 | 0x4F,
	20320 - 19968: jis0212<<14 | 0x0F<<7 | 0x3E,
	20323 - 19968: jis0212<<14 | 0x0F<<7 | 0x50,
	20329 - 19968: jis0208<<14 | 0x2F<<7 | 0x2F,
	20330 - 19968: jis0212<<14 | 0x0F<<7 | 0x51,
	20332 - 19968: jis0212<<14 | 0x0F<<7 | 0x52,
	20334 - 19968: jis0212<<14 | 0x0F<<7 | 0x53,
	20335 - 19968: jis0208<<14 | 0x2F<<7 | 0x32,
	20336 - 19968: jis0208<<14 | 0x2F<<7 | 0x30,
	20337 - 19968: jis0212<<14 | 0x0F<<7 | 0x54,
	20339 - 19968: jis0208<<14 | 0x11<<7 | 0x21,
	20341 - 19968: jis0208<<14 | 0x29<<7 | 0x1A,
	20342 - 19968: jis0208<<14 | 0x2F<<7 | 0x2A,
	20343 - 19968: jis0212<<14 | 0x0F<<7 | 0x55,
	20344 - 19968: jis0212<<14 | 0x0F<<7 | 0x56,
	20345 - 19968: jis0212<<14 | 0x0F<<7 | 0x57,
	20346 - 19968: jis0212<<14 | 0x0F<<7 | 0x58,
	20347 - 19968: jis0208<<14 | 0x2F<<7 | 0x2E,
	20348 - 19968: jis0208<<14 | 0x17<<7 | 0x52,
	20349 - 19968: jis0212<<14 | 0x0F<<7 | 0x59,
	20350 - 19968: jis0212<<14 | 0x0F<<7 | 0x5A,
	20351 - 19968: jis0208<<14 | 0x1A<<7 | 0x27,
	20353 - 19968: jis0212<<14 | 0x0F<<7 | 0x5B,
	20354 - 19968: jis0212<<14 | 0x0F<<7 | 0x5C,
	20355 - 19968: jis0208<<14 | 0x13<<7 | 0x05,
	20356 - 19968: jis0212<<14 | 0x0F<<7 | 0x5D,
	20357 - 19968: jis0212<<14 | 0x10<<7 | 0x00,
	20358 - 19968: jis0208<<14 | 0x2F<<7 | 0x33,
	20360 - 19968: jis0208<<14 | 0x2F<<7 | 0x2B,
	20361 - 19968: jis0212<<14 | 0x10<<7 | 0x01,
	20362 - 19968: jis0208<<14 | 0x58<<7 | 0x14,
	20363 - 19968: jis0208<<14 | 0x2D<<7 | 0x42,
	20364 - 19968: jis0212<<14 | 0x10<<7 | 0x03,
	20365 - 19968: jis0208<<14 | 0x1A<<7 | 0x57,
	20366 - 19968: jis0212<<14 | 0x10<<7 | 0x04,
	20367 - 19968: jis0208<<14 | 0x2F<<7 | 0x2C,
	20368 - 19968: jis0212<<14 | 0x10<<7 | 0x05,
	20369 - 19968: jis0208<<14 | 0x2F<<7 | 0x31,
	20370 - 19968: jis0208<<14 | 0x58<<7 | 0x13,
	20371 - 19968: jis0212<<14 | 0x10<<7 | 0x07,
	20372 - 19968: jis0208<<14 | 0x58<<7 | 0x16,
	20374 - 19968: jis0208<<14 | 0x2F<<7 | 0x34,
	20375 - 19968: jis0212<<14 | 0x10<<7 | 0x09,
	20376 - 19968: jis0208<<14 | 0x2F<<7 | 0x2D,
	20377 - 19968: jis0212<<14 | 0x10<<7 | 0x0A,
	20378 - 19968: jis0208<<14 | 0x58<<7 | 0x15,
	20379 - 19968: jis0208<<14 | 0x15<<7 | 0x00,
	20381 - 19968: jis0208<<14 | 0x0F<<7 | 0x2C,
	20382 - 19968: jis0212<<14 | 0x10<<7 | 0x0C,
	20383 - 19968: jis0212<<14 | 0x10<<7 | 0x0D,
	20384 - 19968: jis0208<<14 | 0x15<<7 | 0x01,
	20385 - 19968: jis0208<<14 | 0x11<<7 | 0x20,
	20395 - 19968: jis0208<<14 | 0x34<<7 | 0x04,
	20397 - 19968: jis0208<<14 | 0x2A<<7 | 0x58,
	20398 - 19968: jis0208<<14 | 0x28<<7 | 0x4D,
	20399 - 19968: jis0208<<14 | 0x17<<7 | 0x53,
	20402 - 19968: jis0212<<14 | 0x10<<7 | 0x0E,
	20405 - 19968: jis0208<<14 | 0x1E<<7 | 0x0E,
	20406 - 19968: jis0208<<14 | 0x2D<<7 | 0x16,
	20407 - 19968: jis0212<<14 | 0x10<<7 | 0x0F,
	20409 - 19968: jis0212<<14 | 0x10<<7 | 0x10,
	20411 - 19968: jis0212<<14 | 0x10<<7 | 0x11,
	20412 - 19968: jis0212<<14 | 0x10<<7 | 0x12,
	20413 - 19968: jis0212<<14 | 0x10<<7 | 0x13,
	20414 - 19968: jis0212<<14 | 0x10<<7 | 0x14,
	20415 - 19968: jis0208<<14 | 0x29<<7 | 0x37,
	20416 - 19968: jis0212<<14 | 0x10<<7 | 0x15,
	20417 - 19968: jis0212<<14 | 0x10<<7 | 0x16,
	20418 - 19968: jis0208<<14 | 0x16<<7 | 0x17,
	20419 - 19968: jis0208<<14 | 0x21<<7 | 0x04,
	20420 - 19968: jis0208<<14 | 0x11<<7 | 0x43,
	20421 - 19968: jis0212<<14 | 0x10<<7 | 0x17,
	20422 - 19968: jis0212<<14 | 0x10<<7 | 0x18,
	20424 - 19968: jis0212<<14 | 0x10<<7 | 0x19,
	20425 - 19968: jis0208<<14 | 0x58<<7 | 0x05,
	20426 - 19968: jis0208<<14 | 0x1C<<7 | 0x32,
	20427 - 19968: jis0212<<14 | 0x10<<7 | 0x1B,
	20428 - 19968: jis0212<<14 | 0x10<<7 | 0x1C,
	20429 - 19968: jis0208<<14 | 0x58<<7 | 0x17,
	20430 - 19968: jis0208<<14 | 0x2F<<7 | 0x38,
	20431 - 19968: jis0212<<14 | 0x10<<7 | 0x1E,
	20432 - 19968: jis0208<<14 | 0x2F<<7 | 0x3D,
	20433 - 19968: jis0208<<14 | 0x2F<<7 | 0x3B,
	20434 - 19968: jis0212<<14 | 0x10<<7 | 0x1F,
	20436 - 19968: jis0208<<14 | 0x2F<<7 | 0x36,
	20439 - 19968: jis0208<<14 | 0x21<<7 | 0x0E,
	20440 - 19968: jis0208<<14 | 0x2F<<7 | 0x39,
	20442 - 19968: jis0208<<14 | 0x2F<<7 | 0x3C,
	20443 - 19968: jis0208<<14 | 0x2F<<7 | 0x3A,
	20444 - 19968: jis0212<<14 | 0x10<<7 | 0x20,
	20445 - 19968: jis0208<<14 | 0x29<<7 | 0x3C,
	20447 - 19968: jis0208<<14 | 0x2F<<7 | 0x37,
	20448 - 19968: jis0212<<14 | 0x10<<7 | 0x21,
	20449 - 19968: jis0208<<14 | 0x1E<<7 | 0x0D,
	20450 - 19968: jis0212<<14 | 0x10<<7 | 0x22,
	20451 - 19968: jis0208<<14 | 0x2A<<7 | 0x52,
	20452 - 19968: jis0208<<14 | 0x2F<<7 | 0x3E,
	20453 - 19968: jis0208<<14 | 0x2F<<7 | 0x3F,
	20462 - 19968: jis0208<<14 | 0x1C<<7 | 0x03,
	20463 - 19968: jis0208<<14 | 0x2F<<7 | 0x4C,
	20464 - 19968: jis0212<<14 | 0x10<<7 | 0x23,
	20466 - 19968: jis0212<<14 | 0x10<<7 | 0x24,
	20467 - 19968: jis0208<<14 | 0x26<<7 | 0x2F,
	20469 - 19968: jis0208<<14 | 0x28<<7 | 0x15,
	20470 - 19968: jis0208<<14 | 0x2F<<7 | 0x47,
	20472 - 19968: jis0208<<14 | 0x29<<7 | 0x4F,
	20474 - 19968: jis0208<<14 | 0x11<<7 | 0x15,
	20476 - 19968: jis0212<<14 | 0x10<<7 | 0x25,
	20477 - 19968: jis0212<<14 | 0x10<<7 | 0x26,
	20478 - 19968: jis0208<<14 | 0x2F<<7 | 0x4B,
	20479 - 19968: jis0208<<14 | 0x58<<7 | 0x1A,
	20480 - 19968: jis0212<<14 | 0x10<<7 | 0x28,
	20481 - 19968: jis0212<<14 | 0x10<<7 | 0x29,
	20484 - 19968: jis0212<<14 | 0x10<<7 | 0x2A,
	20485 - 19968: jis0208<<14 | 0x2F<<7 | 0x45,
	20486 - 19968: jis0208<<14 | 0x2F<<7 | 0x4E,
	20487 - 19968: jis0212<<14 | 0x10<<7 | 0x2B,
	20489 - 19968: jis0208<<14 | 0x20<<7 | 0x31,
	20490 - 19968: jis0212<<14 | 0x10<<7 | 0x2C,
	20491 - 19968: jis0208<<14 | 0x17<<7 | 0x23,
	20492 - 19968: jis0212<<14 | 0x10<<7 | 0x2D,
	20493 - 19968: jis0208<<14 | 0x26<<7 | 0x3B,
	20494 - 19968: jis0212<<14 | 0x10<<7 | 0x2E,
	20495 - 19968: jis0208<<14 | 0x3F<<7 | 0x26,
	20496 - 19968: jis0212<<14 | 0x10<<7 | 0x2F,
	20497 - 19968: jis0208<<14 | 0x2F<<7 | 0x4D,
	20498 - 19968: jis0208<<14 | 0x24<<7 | 0x3C,
	20499 - 19968: jis0212<<14 | 0x10<<7 | 0x30,
	20500 - 19968: jis0208<<14 | 0x2F<<7 | 0x42,
	20502 - 19968: jis0208<<14 | 0x17<<7 | 0x55,
	20503 - 19968: jis0212<<14 | 0x10<<7 | 0x31,
	20504 - 19968: jis0212<<14 | 0x10<<7 | 0x32,
	20505 - 19968: jis0208<<14 | 0x17<<7 | 0x54,
	20506 - 19968: jis0208<<14 | 0x2F<<7 | 0x40,
	20507 - 19968: jis0212<<14 | 0x10<<7 | 0x33,
	20508 - 19968: jis0212<<14 | 0x10<<7 | 0x34,
	20509 - 19968: jis0212<<14 | 0x10<<7 | 0x35,
	20510 - 19968: jis0208<<14 | 0x58<<7 | 0x1B,
	20511 - 19968: jis0208<<14 | 0x1B<<7 | 0x39,
	20513 - 19968: jis0208<<14 | 0x2F<<7 | 0x48,
	20514 - 19968: jis0208<<14 | 0x58<<7 | 0x19,
	20515 - 19968: jis0208<<14 | 0x29<<7 | 0x4E,
	20516 - 19968: jis0208<<14 | 0x22<<7 | 0x2C,
	20517 - 19968: jis0208<<14 | 0x2F<<7 | 0x44,
	20518 - 19968: jis0208<<14 | 0x16<<7 | 0x50,
	20519 - 19968: jis0212<<14 | 0x10<<7 | 0x38,
	20520 - 19968: jis0208<<14 | 0x2F<<7 | 0x41,
	20521 - 19968: jis0208<<14 | 0x2F<<7 | 0x49,
	20522 - 19968: jis0208<<14 | 0x2F<<7 | 0x43,
	20523 - 19968: jis0208<<14 | 0x2D<<7 | 0x30,
	20524 - 19968: jis0208<<14 | 0x2F<<7 | 0x4A,
	20525 - 19968: jis0208<<14 | 0x2E<<7 | 0x20,
	20526 - 19968: jis0212<<14 | 0x10<<7 | 0x39,
	20528 - 19968: jis0212<<14 | 0x10<<7 | 0x3A,
	20530 - 19968: jis0212<<14 | 0x10<<7 | 0x3B,
	20531 - 19968: jis0212<<14 | 0x10<<7 | 0x3C,
	20533 - 19968: jis0212<<14 | 0x10<<7 | 0x3D,
	20534 - 19968: jis0208<<14 | 0x15<<7 | 0x45,
	20537 - 19968: jis0208<<14 | 0x16<<7 | 0x4F,
	20539 - 19968: jis0212<<14 | 0x10<<7 | 0x55,
	20544 - 19968: jis0208<<14 | 0x58<<7 | 0x18,
	20545 - 19968: jis0212<<14 | 0x10<<7 | 0x3F,
	20546 - 19968: jis0208<<14 | 0x58<<7 | 0x1E,
	20547 - 19968: jis0208<<14 | 0x2F<<7 | 0x4F,
	20549 - 19968: jis0212<<14 | 0x10<<7 | 0x41,
	20550 - 19968: jis0208<<14 | 0x58<<7 | 0x1C,
	20551 - 19968: jis0208<<14 | 0x2F<<7 | 0x50,
	20552 - 19968: jis0208<<14 | 0x2F<<7 | 0x54,
	20553 - 19968: jis0208<<14 | 0x0F<<7 | 0x2D,
	20554 - 19968: jis0212<<14 | 0x10<<7 | 0x43,
	20556 - 19968: jis0212<<14 | 0x10<<7 | 0x44,
	20558 - 19968: jis0212<<14 | 0x10<<7 | 0x45,
	20559 - 19968: jis0208<<14 | 0x29<<7 | 0x2F,
	20560 - 19968: jis0208<<14 | 0x2F<<7 | 0x53,
	20561 - 19968: jis0212<<14 | 0x10<<7 | 0x46,
	20562 - 19968: jis0212<<14 | 0x10<<7 | 0x47,
	20563 - 19968: jis0212<<14 | 0x10<<7 | 0x48,
	20565 - 19968: jis0208<<14 | 0x2F<<7 | 0x52,
	20566 - 19968: jis0208<<14 | 0x2F<<7 | 0x56,
	20567 - 19968: jis0212<<14 | 0x10<<7 | 0x49,
	20569 - 19968: jis0212<<14 | 0x10<<7 | 0x4A,
	20570 - 19968: jis0208<<14 | 0x2F<<7 | 0x55,
	20572 - 19968: jis0208<<14 | 0x23<<7 | 0x43,
	20575 - 19968: jis0212<<14 | 0x10<<7 | 0x4B,
	20576 - 19968: jis0212<<14 | 0x10<<7 | 0x4C,
	20578 - 19968: jis0212<<14 | 0x10<<7 | 0x4D,
	20579 - 19968: jis0212<<14 | 0x10<<7 | 0x4E,
	20581 - 19968: jis0208<<14 | 0x16<<7 | 0x51,
	20582 - 19968: jis0212<<14 | 0x10<<7 | 0x4F,
	20583 - 19968: jis0212<<14 | 0x10<<7 | 0x50,
	20586 - 19968: jis0212<<14 | 0x10<<7 | 0x51,
	20588 - 19968: jis0208<<14 | 0x2F<<7 | 0x57,
	20589 - 19968: jis0212<<14 | 0x10<<7 | 0x52,
	20592 - 19968: jis0208<<14 | 0x58<<7 | 0x1D,
	20593 - 19968: jis0212<<14 | 0x10<<7 | 0x54,
	20594 - 19968: jis0208<<14 | 0x1B<<7 | 0x24,
	20596 - 19968: jis0208<<14 | 0x21<<7 | 0x05,
	20597 - 19968: jis0208<<14 | 0x23<<7 | 0x44,
	20598 - 19968: jis0208<<14 | 0x15<<7 | 0x55,
	20600 - 19968: jis0208<<14 | 0x2F<<7 | 0x58,
	20605 - 19968: jis0208<<14 | 0x14<<7 | 0x15,
	20608 - 19968: jis0208<<14 | 0x2F<<7 | 0x59,
	20609 - 19968: jis0212<<14 | 0x10<<7 | 0x56,
	20611 - 19968: jis0212<<14 | 0x10<<7 | 0x57,
	20612 - 19968: jis0212<<14 | 0x10<<7 | 0x58,
	20613 - 19968: jis0208<<14 | 0x2F<<7 | 0x5B,
	20614 - 19968: jis0212<<14 | 0x10<<7 | 0x59,
	20618 - 19968: jis0212<<14 | 0x10<<7 | 0x5A,
	20621 - 19968: jis0208<<14 | 0x2A<<7 | 0x14,
	20622 - 19968: jis0212<<14 | 0x10<<7 | 0x5B,
	20623 - 19968: jis0212<<14 | 0x10<<7 | 0x5C,
	20624 - 19968: jis0212<<14 | 0x10<<7 | 0x5D,
	20625 - 19968: jis0208<<14 | 0x16<<7 | 0x45,
	20626 - 19968: jis0212<<14 | 0x11<<7 | 0x00,
	20627 - 19968: jis0212<<14 | 0x11<<7 | 0x01,
	20628 - 19968: jis0208<<14 | 0x58<<7 | 0x1F,
	20630 - 19968: jis0212<<14 | 0x11<<7 | 0x03,
	20632 - 19968: jis0208<<14 | 0x1A<<7 | 0x10,
	20633 - 19968: jis0208<<14 | 0x27<<7 | 0x56,
	20634 - 19968: jis0208<<14 | 0x2F<<7 | 0x5A,
	20635 - 19968: jis0212<<14 | 0x11<<7 | 0x04,
	20636 - 19968: jis0212<<14 | 0x11<<7 | 0x05,
	20638 - 19968: jis0212<<14 | 0x11<<7 | 0x06,
	20639 - 19968: jis0212<<14 | 0x11<<7 | 0x07,
	20640 - 19968: jis0212<<14 | 0x11<<7 | 0x08,
	20641 - 19968: jis0212<<14 | 0x11<<7 | 0x09,
	20642 - 19968: jis0212<<14 | 0x11<<7 | 0x0A,
	20650 - 19968: jis0212<<14 | 0x11<<7 | 0x0B,
	20652 - 19968: jis0208<<14 | 0x19<<7 | 0x24,
	20653 - 19968: jis0208<<14 | 0x2C<<7 | 0x22,
	20655 - 19968: jis0212<<14 | 0x11<<7 | 0x0C,
	20656 - 19968: jis0212<<14 | 0x11<<7 | 0x0D,
	20658 - 19968: jis0208<<14 | 0x2F<<7 | 0x5D,
	20659 - 19968: jis0208<<14 | 0x30<<7 | 0x02,
	20660 - 19968: jis0208<<14 | 0x2F<<7 | 0x5C,
	20661 - 19968: jis0208<<14 | 0x19<<7 | 0x23,
	20663 - 19968: jis0208<<14 | 0x1C<<7 | 0x5C,
	20665 - 19968: jis0212<<14 | 0x11<<7 | 0x0E,
	20666 - 19968: jis0212<<14 | 0x11<<7 | 0x0F,
	20669 - 19968: jis0212<<14 | 0x11<<7 | 0x10,
	20670 - 19968: jis0208<<14 | 0x16<<7 | 0x18,
	20672 - 19968: jis0212<<14 | 0x11<<7 | 0x11,
	20674 - 19968: jis0208<<14 | 0x30<<7 | 0x03,
	20675 - 19968: jis0212<<14 | 0x11<<7 | 0x12,
	20676 - 19968: jis0212<<14 | 0x11<<7 | 0x13,
	20677 - 19968: jis0208<<14 | 0x15<<7 | 0x2E,
	20679 - 19968: jis0212<<14 | 0x11<<7 | 0x14,
	20681 - 19968: jis0208<<14 | 0x30<<7 | 0x00,
	20682 - 19968: jis0208<<14 | 0x30<<7 | 0x01,
	20684 - 19968: jis0212<<14 | 0x11<<7 | 0x15,
	20685 - 19968: jis0208<<14 | 0x25<<7 | 0x0E,
	20686 - 19968: jis0212<<14 | 0x11<<7 | 0x16,
	20687 - 19968: jis0208<<14 | 0x20<<7 | 0x5B,
	20688 - 19968: jis0212<<14 | 0x11<<7 | 0x17,
	20689 - 19968: jis0208<<14 | 0x15<<7 | 0x02,
	20691 - 19968: jis0212<<14 | 0x11<<7 | 0x18,
	20692 - 19968: jis0212<<14 | 0x11<<7 | 0x19,
	20693 - 19968: jis0208<<14 | 0x2A<<7 | 0x2C,
	20694 - 19968: jis0208<<14 | 0x30<<7 | 0x04,
	20696 - 19968: jis0208<<14 | 0x58<<7 | 0x21,
	20698 - 19968: jis0208<<14 | 0x2D<<7 | 0x1C,
	20700 - 19968: jis0212<<14 | 0x11<<7 | 0x1B,
	20701 - 19968: jis0212<<14 | 0x11<<7 | 0x1C,
	20702 - 19968: jis0208<<14 | 0x30<<7 | 0x05,
	20703 - 19968: jis0212<<14 | 0x11<<7 | 0x1D,
	20706 - 19968: jis0212<<14 | 0x11<<7 | 0x1E,
	20707 - 19968: jis0208<<14 | 0x30<<7 | 0x08,
	20708 - 19968: jis0212<<14 | 0x11<<7 | 0x1F,
	20709 - 19968: jis0208<<14 | 0x30<<7 | 0x06,
	20710 - 19968: jis0212<<14 | 0x11<<7 | 0x20,
	20711 - 19968: jis0208<<14 | 0x20<<7 | 0x2D,
	20712 - 19968: jis0212<<14 | 0x11<<7 | 0x21,
	20713 - 19968: jis0212<<14 | 0x11<<7 | 0x22,
	20717 - 19968: jis0208<<14 | 0x30<<7 | 0x07,
	20718 - 19968: jis0208<<14 | 0x30<<7 | 0x09,
	20719 - 19968: jis0212<<14 | 0x11<<7 | 0x23,
	20721 - 19968: jis0212<<14 | 0x11<<7 | 0x24,
	20722 - 19968: jis0212<<14 | 0x11<<7 | 0x30,
	20724 - 19968: jis0208<<14 | 0x58<<7 | 0x20,
	20725 - 19968: jis0208<<14 | 0x30<<7 | 0x0B,
	20726 - 19968: jis0212<<14 | 0x11<<7 | 0x25,
	20729 - 19968: jis0208<<14 | 0x30<<7 | 0x0A,
	20730 - 19968: jis0212<<14 | 0x11<<7 | 0x26,
	20731 - 19968: jis0208<<14 | 0x29<<7 | 0x27,
	20734 - 19968: jis0212<<14 | 0x11<<7 | 0x27,
	20736 - 19968: jis0208<<14 | 0x14<<7 | 0x16,
	20737 - 19968: jis0208<<14 | 0x30<<7 | 0x0D,
	20738 - 19968: jis0208<<14 | 0x30<<7 | 0x0E,
	20739 - 19968: jis0212<<14 | 0x11<<7 | 0x28,
	20740 - 19968: jis0208<<14 | 0x11<<7 | 0x0E,
	20742 - 19968: jis0212<<14 | 0x11<<7 | 0x29,
	20743 - 19968: jis0212<<14 | 0x11<<7 | 0x2A,
	20744 - 19968: jis0212<<14 | 0x11<<7 | 0x2B,
	20745 - 19968: jis0208<<14 | 0x30<<7 | 0x0C,
	20747 - 19968: jis0212<<14 | 0x11<<7 | 0x2C,
	20748 - 19968: jis0212<<14 | 0x11<<7 | 0x2D,
	20749 - 19968: jis0212<<14 | 0x11<<7 | 0x2E,
	20750 - 19968: jis0212<<14 | 0x11<<7 | 0x2F,
	20752 - 19968: jis0212<<14 | 0x11<<7 | 0x31,
	20754 - 19968: jis0208<<14 | 0x1B<<7 | 0x53,
	20756 - 19968: jis0208<<14 | 0x30<<7 | 0x11,
	20757 - 19968: jis0208<<14 | 0x30<<7 | 0x10,
	20758 - 19968: jis0208<<14 | 0x30<<7 | 0x0F,
	20759 - 19968: jis0212<<14 | 0x11<<7 | 0x32,
	20760 - 19968: jis0208<<14 | 0x2F<<7 | 0x35,
	20761 - 19968: jis0212<<14 | 0x11<<7 | 0x33,
	20762 - 19968: jis0208<<14 | 0x30<<7 | 0x12,
	20763 - 19968: jis0212<<14 | 0x11<<7 | 0x34,
	20764 - 19968: jis0212<<14 | 0x11<<7 | 0x35,
	20765 - 19968: jis0212<<14 | 0x11<<7 | 0x36,
	20766 - 19968: jis0212<<14 | 0x11<<7 | 0x37,
	20767 - 19968: jis0208<<14 | 0x1C<<7 | 0x5D,
	20769 - 19968: jis0208<<14 | 0x30<<7 | 0x13,
	20771 - 19968: jis0212<<14 | 0x11<<7 | 0x38,
	20775 - 19968: jis0212<<14 | 0x11<<7 | 0x39,
	20776 - 19968: jis0212<<14 | 0x11<<7 | 0x3A,
	20778 - 19968: jis0208<<14 | 0x2C<<7 | 0x04,
	20780 - 19968: jis0212<<14 | 0x11<<7 | 0x3B,
	20781 - 19968: jis0212<<14 | 0x11<<7 | 0x3C,
	20783 - 19968: jis0212<<14 | 0x11<<7 | 0x3D,
	20785 - 19968: jis0212<<14 | 0x11<<7 | 0x3E,
	20786 - 19968: jis0208<<14 | 0x2B<<7 | 0x38,
	20787 - 19968: jis0212<<14 | 0x11<<7 | 0x3F,
	20788 - 19968: jis0212<<14 | 0x11<<7 | 0x40,
	20789 - 19968: jis0212<<14 | 0x11<<7 | 0x41,
	20791 - 19968: jis0208<<14 | 0x30<<7 | 0x15,
	20792 - 19968: jis0212<<14 | 0x11<<7 | 0x42,
	20793 - 19968: jis0212<<14 | 0x11<<7 | 0x43,
	20794 - 19968: jis0208<<14 | 0x30<<7 | 0x14,
	20795 - 19968: jis0208<<14 | 0x30<<7 | 0x17,
	20796 - 19968: jis0208<<14 | 0x30<<7 | 0x16,
	20799 - 19968: jis0208<<14 | 0x30<<7 | 0x18,
	20800 - 19968: jis0208<<14 | 0x30<<7 | 0x19,
	20801 - 19968: jis0208<<14 | 0x0F<<7 | 0x53,
	20802 - 19968: jis0212<<14 | 0x11<<7 | 0x44,
	20803 - 19968: jis0208<<14 | 0x17<<7 | 0x14,
	20804 - 19968: jis0208<<14 | 0x16<<7 | 0x1A,
	20805 - 19968: jis0208<<14 | 0x1C<<7 | 0x1B,
	20806 - 19968: jis0208<<14 | 0x22<<7 | 0x5A,
	20807 - 19968: jis0208<<14 | 0x15<<7 | 0x03,
	20808 - 19968: jis0208<<14 | 0x1F<<7 | 0x47,
	20809 - 19968: jis0208<<14 | 0x17<<7 | 0x56,
	20810 - 19968: jis0208<<14 | 0x58<<7 | 0x22,
	20811 - 19968: jis0208<<14 | 0x18<<7 | 0x4D,
	20812 - 19968: jis0208<<14 | 0x30<<7 | 0x1B,
	20813 - 19968: jis0208<<14 | 0x2B<<7 | 0x27,
	20814 - 19968: jis0208<<14 | 0x24<<7 | 0x25,
	20815 - 19968: jis0212<<14 | 0x11<<7 | 0x46,
	20816 - 19968: jis0208<<14 | 0x1A<<7 | 0x58,
	20818 - 19968: jis0208<<14 | 0x30<<7 | 0x1A,
	20819 - 19968: jis0212<<14 | 0x11<<7 | 0x47,
	20820 - 19968: jis0208<<14 | 0x30<<7 | 0x1C,
	20821 - 19968: jis0212<<14 | 0x11<<7 | 0x48,
	20823 - 19968: jis0212<<14 | 0x11<<7 | 0x49,
	20824 - 19968: jis0212<<14 | 0x11<<7 | 0x4A,
	20826 - 19968: jis0208<<14 | 0x24<<7 | 0x3D,
	20828 - 19968: jis0208<<14 | 0x12<<7 | 0x54,
	20831 - 19968: jis0212<<14 | 0x11<<7 | 0x4B,
	20834 - 19968: jis0208<<14 | 0x30<<7 | 0x1D,
	20836 - 19968: jis0208<<14 | 0x58<<7 | 0x23,
	20837 - 19968: jis0208<<14 | 0x25<<7 | 0x5D,
	20838 - 19968: jis0212<<14 | 0x11<<7 | 0x4D,
	20840 - 19968: jis0208<<14 | 0x20<<7 | 0x13,
	20841 - 19968: jis0208<<14 | 0x30<<7 | 0x1F,
	20842 - 19968: jis0208<<14 | 0x30<<7 | 0x20,
	20843 - 19968: jis0208<<14 | 0x27<<7 | 0x0B,
	20844 - 19968: jis0208<<14 | 0x17<<7 | 0x57,
	20845 - 19968: jis0208<<14 | 0x2E<<7 | 0x1A,
	20846 - 19968: jis0208<<14 | 0x30<<7 | 0x21,
	20849 - 19968: jis0208<<14 | 0x15<<7 | 0x05,
	20853 - 19968: jis0208<<14 | 0x29<<7 | 0x1B,
	20854 - 19968: jis0208<<14 | 0x21<<7 | 0x15,
	20855 - 19968: jis0208<<14 | 0x15<<7 | 0x50,
	20856 - 19968: jis0208<<14 | 0x24<<7 | 0x14,
	20860 - 19968: jis0208<<14 | 0x16<<7 | 0x52,
	20862 - 19968: jis0212<<14 | 0x11<<7 | 0x4E,
	20864 - 19968: jis0208<<14 | 0x30<<7 | 0x22,
	20866 - 19968: jis0208<<14 | 0x30<<7 | 0x23,
	20867 - 19968: jis0212<<14 | 0x11<<7 | 0x4F,
	20868 - 19968: jis0212<<14 | 0x11<<7 | 0x50,
	20869 - 19968: jis0208<<14 | 0x25<<7 | 0x41,
	20870 - 19968: jis0208<<14 | 0x10<<7 | 0x3E,
	20873 - 19968: jis0208<<14 | 0x30<<7 | 0x26,
	20874 - 19968: jis0208<<14 | 0x19<<7 | 0x5C,
	20875 - 19968: jis0212<<14 | 0x11<<7 | 0x51,
	20876 - 19968: jis0208<<14 | 0x30<<7 | 0x25,
	20877 - 19968: jis0208<<14 | 0x19<<7 | 0x25,
	20878 - 19968: jis0212<<14 | 0x11<<7 | 0x52,
	20879 - 19968: jis0208<<14 | 0x30<<7 | 0x27,
	20880 - 19968: jis0208<<14 | 0x45<<7 | 0x4D,
	20881 - 19968: jis0208<<14 | 0x30<<7 | 0x28,
	20882 - 19968: jis0208<<14 | 0x2A<<7 | 0x20,
	20883 - 19968: jis0208<<14 | 0x30<<7 | 0x29,
	20885 - 19968: jis0208<<14 | 0x30<<7 | 0x2A,
	20886 - 19968: jis0208<<14 | 0x30<<7 | 0x2B,
	20887 - 19968: jis0208<<14 | 0x1D<<7 | 0x48,
	20888 - 19968: jis0212<<14 | 0x11<<7 | 0x53,
	20889 - 19968: jis0208<<14 | 0x1B<<7 | 0x2B,
	20893 - 19968: jis0208<<14 | 0x58<<7 | 0x24,
	20896 - 19968: jis0208<<14 | 0x13<<7 | 0x06,
	20897 - 19968: jis0212<<14 | 0x11<<7 | 0x55,
	20898 - 19968: jis0208<<14 | 0x30<<7 | 0x2E,
	20899 - 19968: jis0212<<14 | 0x11<<7 | 0x56,
	20900 - 19968: jis0208<<14 | 0x30<<7 | 0x2C,
	20901 - 19968: jis0208<<14 | 0x2B<<7 | 0x1C,
	20902 - 19968: jis0208<<14 | 0x30<<7 | 0x2D,
	20904 - 19968: jis0208<<14 | 0x28<<7 | 0x39,
	20905 - 19968: jis0208<<14 | 0x30<<7 | 0x2F,
	20906 - 19968: jis0208<<14 | 0x30<<7 | 0x30,
	20907 - 19968: jis0208<<14 | 0x30<<7 | 0x31,
	20908 - 19968: jis0208<<14 | 0x24<<7 | 0x3E,
	20909 - 19968: jis0212<<14 | 0x11<<7 | 0x57,
	20912 - 19968: jis0208<<14 | 0x30<<7 | 0x35,
	20913 - 19968: jis0208<<14 | 0x30<<7 | 0x33,
	20914 - 19968: jis0208<<14 | 0x30<<7 | 0x34,
	20915 - 19968: jis0208<<14 | 0x30<<7 | 0x32,
	20916 - 19968: jis0208<<14 | 0x19<<7 | 0x42,
	20917 - 19968: jis0208<<14 | 0x30<<7 | 0x36,
	20918 - 19968: jis0208<<14 | 0x2B<<7 | 0x49,
	20919 - 19968: jis0208<<14 | 0x2D<<7 | 0x43,
	20920 - 19968: jis0212<<14 | 0x11<<7 | 0x58,
	20922 - 19968: jis0212<<14 | 0x11<<7 | 0x59,
	20924 - 19968: jis0212<<14 | 0x11<<7 | 0x5A,
	20925 - 19968: jis0208<<14 | 0x30<<7 | 0x37,
	20926 - 19968: jis0208<<14 | 0x58<<7 | 0x25,
	20927 - 19968: jis0212<<14 | 0x11<<7 | 0x5C,
	20930 - 19968: jis0212<<14 | 0x11<<7 | 0x5D,
	20932 - 19968: jis0208<<14 | 0x1F<<7 | 0x07,
	20933 - 19968: jis0208<<14 | 0x30<<7 | 0x38,
	20934 - 19968: jis0208<<14 | 0x1C<<7 | 0x39,
	20936 - 19968: jis0212<<14 | 0x12<<7 | 0x00,
	20937 - 19968: jis0208<<14 | 0x30<<7 | 0x39,
	20939 - 19968: jis0208<<14 | 0x22<<7 | 0x5B,
	20940 - 19968: jis0208<<14 | 0x2D<<7 | 0x1E,
	20941 - 19968: jis0208<<14 | 0x24<<7 | 0x3F,
	20943 - 19968: jis0212<<14 | 0x12<<7 | 0x01,
	20945 - 19968: jis0212<<14 | 0x12<<7 | 0x02,
	20946 - 19968: jis0212<<14 | 0x12<<7 | 0x03,
	20947 - 19968: jis0212<<14 | 0x12<<7 | 0x04,
	20949 - 19968: jis0212<<14 | 0x12<<7 | 0x05,
	20950 - 19968: jis0208<<14 | 0x31<<7 | 0x24,
	20952 - 19968: jis0212<<14 | 0x12<<7 | 0x06,
	20955 - 19968: jis0208<<14 | 0x30<<7 | 0x3A,
	20956 - 19968: jis0208<<14 | 0x53<<7 | 0x04,
	20957 - 19968: jis0208<<14 | 0x15<<7 | 0x24,
	20958 - 19968: jis0212<<14 | 0x12<<7 | 0x07,
	20960 - 19968: jis0208<<14 | 0x30<<7 | 0x3B,
	20961 - 19968: jis0208<<14 | 0x2A<<7 | 0x3D,
	20962 - 19968: jis0212<<14 | 0x12<<7 | 0x08,
	20965 - 19968: jis0212<<14 | 0x12<<7 | 0x09,
	20966 - 19968: jis0208<<14 | 0x1C<<7 | 0x47,
	20967 - 19968: jis0208<<14 | 0x21<<7 | 0x5B,
	20969 - 19968: jis0208<<14 | 0x30<<7 | 0x3D,
	20970 - 19968: jis0208<<14 | 0x25<<7 | 0x43,
	20972 - 19968: jis0208<<14 | 0x58<<7 | 0x26,
	20973 - 19968: jis0208<<14 | 0x30<<7 | 0x3E,
	20974 - 19968: jis0212<<14 | 0x12<<7 | 0x0A,
	20976 - 19968: jis0208<<14 | 0x30<<7 | 0x3F,
	20977 - 19968: jis0208<<14 | 0x12<<7 | 0x0D,
	20978 - 19968: jis0212<<14 | 0x12<<7 | 0x0B,
	20979 - 19968: jis0212<<14 | 0x12<<7 | 0x0C,
	20980 - 19968: jis0212<<14 | 0x12<<7 | 0x0D,
	20981 - 19968: jis0208<<14 | 0x30<<7 | 0x40,
	20982 - 19968: jis0208<<14 | 0x15<<7 | 0x06,
	20983 - 19968: jis0212<<14 | 0x12<<7 | 0x0E,
	20984 - 19968: jis0208<<14 | 0x25<<7 | 0x2B,
	20985 - 19968: jis0208<<14 | 0x10<<7 | 0x59,
	20986 - 19968: jis0208<<14 | 0x1C<<7 | 0x2F,
	20989 - 19968: jis0208<<14 | 0x27<<7 | 0x00,
	20990 - 19968: jis0208<<14 | 0x30<<7 | 0x41,
	20992 - 19968: jis0208<<14 | 0x24<<7 | 0x40,
	20993 - 19968: jis0212<<14 | 0x12<<7 | 0x0F,
	20994 - 19968: jis0212<<14 | 0x12<<7 | 0x10,
	20995 - 19968: jis0208<<14 | 0x1E<<7 | 0x2E,
	20996 - 19968: jis0208<<14 | 0x30<<7 | 0x42,
	20997 - 19968: jis0212<<14 | 0x12<<7 | 0x11,
	20998 - 19968: jis0208<<14 | 0x29<<7 | 0x0B,
	20999 - 19968: jis0208<<14 | 0x1F<<7 | 0x39,
	21000 - 19968: jis0208<<14 | 0x13<<7 | 0x01,
	21002 - 19968: jis0208<<14 | 0x13<<7 | 0x08,
	21003 - 19968: jis0208<<14 | 0x30<<7 | 0x43,
	21006 - 19968: jis0208<<14 | 0x30<<7 | 0x45,
	21009 - 19968: jis0208<<14 | 0x16<<7 | 0x19,
	21010 - 19968: jis0212<<14 | 0x12<<7 | 0x12,
	21011 - 19968: jis0212<<14 | 0x12<<7 | 0x13,
	21012 - 19968: jis0208<<14 | 0x30<<7 | 0x44,
	21013 - 19968: jis0208<<14 | 0x58<<7 | 0x27,
	21014 - 19968: jis0212<<14 | 0x12<<7 | 0x15,
	21015 - 19968: jis0208<<14 | 0x2D<<7 | 0x52,
	21016 - 19968: jis0212<<14 | 0x12<<7 | 0x16,
	21021 - 19968: jis0208<<14 | 0x1C<<7 | 0x48,
	21026 - 19968: jis0212<<14 | 0x12<<7 | 0x17,
	21028 - 19968: jis0208<<14 | 0x27<<7 | 0x1C,
	21029 - 19968: jis0208<<14 | 0x29<<7 | 0x2B,
	21031 - 19968: jis0208<<14 | 0x30<<7 | 0x46,
	21032 - 19968: jis0212<<14 | 0x12<<7 | 0x18,
	21033 - 19968: jis0208<<14 | 0x2C<<7 | 0x57,
	21034 - 19968: jis0208<<14 | 0x30<<7 | 0x47,
	21038 - 19968: jis0208<<14 | 0x30<<7 | 0x48,
	21040 - 19968: jis0208<<14 | 0x24<<7 | 0x5D,
	21041 - 19968: jis0212<<14 | 0x12<<7 | 0x19,
	21042 - 19968: jis0212<<14 | 0x12<<7 | 0x1A,
	21043 - 19968: jis0208<<14 | 0x30<<7 | 0x49,
	21045 - 19968: jis0212<<14 | 0x12<<7 | 0x1B,
	21046 - 19968: jis0208<<14 | 0x1F<<7 | 0x08,
	21047 - 19968: jis0208<<14 | 0x19<<7 | 0x5D,
	21048 - 19968: jis0208<<14 | 0x16<<7 | 0x53,
	21049 - 19968: jis0208<<14 | 0x30<<7 | 0x4A,
	21050 - 19968: jis0208<<14 | 0x1A<<7 | 0x28,
	21051 - 19968: jis0208<<14 | 0x18<<7 | 0x4E,
	21052 - 19968: jis0212<<14 | 0x12<<7 | 0x1C,
	21059 - 19968: jis0208<<14 | 0x23<<7 | 0x45,
	21060 - 19968: jis0208<<14 | 0x30<<7 | 0x4C,
	21061 - 19968: jis0212<<14 | 0x12<<7 | 0x1D,
	21063 - 19968: jis0208<<14 | 0x21<<7 | 0x06,
	21065 - 19968: jis0212<<14 | 0x12<<7 | 0x1E,
	21066 - 19968: jis0208<<14 | 0x19<<7 | 0x4E,
	21067 - 19968: jis0208<<14 | 0x30<<7 | 0x4D,
	21068 - 19968: jis0208<<14 | 0x30<<7 | 0x4E,
	21069 - 19968: jis0208<<14 | 0x20<<7 | 0x0F,
	21071 - 19968: jis0208<<14 | 0x30<<7 | 0x4B,
	21076 - 19968: jis0208<<14 | 0x30<<7 | 0x50,
	21077 - 19968: jis0212<<14 | 0x12<<7 | 0x1F,
	21078 - 19968: jis0208<<14 | 0x2A<<7 | 0x15,
	21079 - 19968: jis0212<<14 | 0x12<<7 | 0x20,
	21080 - 19968: jis0212<<14 | 0x12<<7 | 0x21,
	21082 - 19968: jis0212<<14 | 0x12<<7 | 0x22,
	21083 - 19968: jis0208<<14 | 0x18<<7 | 0x43,
	21084 - 19968: jis0212<<14 | 0x12<<7 | 0x23,
	21086 - 19968: jis0208<<14 | 0x30<<7 | 0x4F,
	21087 - 19968: jis0212<<14 | 0x12<<7 | 0x24,
	21088 - 19968: jis0212<<14 | 0x12<<7 | 0x25,
	21089 - 19968: jis0212<<14 | 0x12<<7 | 0x26,
	21091 - 19968: jis0208<<14 | 0x16<<7 | 0x54,
	21092 - 19968: jis0208<<14 | 0x19<<7 | 0x3D,
	21093 - 19968: jis0208<<14 | 0x26<<7 | 0x4C,
	21094 - 19968: jis0212<<14 | 0x12<<7 | 0x27,
	21097 - 19968: jis0208<<14 | 0x30<<7 | 0x53,
	21098 - 19968: jis0208<<14 | 0x30<<7 | 0x51,
	21102 - 19968: jis0212<<14 | 0x12<<7 | 0x28,
	21103 - 19968: jis0208<<14 | 0x28<<7 | 0x5A,
	21104 - 19968: jis0208<<14 | 0x1D<<7 | 0x49,
	21105 - 19968: jis0208<<14 | 0x30<<7 | 0x5A,
	21106 - 19968: jis0208<<14 | 0x12<<7 | 0x43,
	21107 - 19968: jis0208<<14 | 0x30<<7 | 0x54,
	21108 - 19968: jis0208<<14 | 0x30<<7 | 0x52,
	21109 - 19968: jis0208<<14 | 0x20<<7 | 0x2E,
	21111 - 19968: jis0212<<14 | 0x12<<7 | 0x29,
	21112 - 19968: jis0212<<14 | 0x12<<7 | 0x2A,
	21113 - 19968: jis0212<<14 | 0x12<<7 | 0x2B,
	21117 - 19968: jis0208<<14 | 0x30<<7 | 0x56,
	21119 - 19968: jis0208<<14 | 0x30<<7 | 0x55,
	21120 - 19968: jis0212<<14 | 0x12<<7 | 0x2C,
	21122 - 19968: jis0212<<14 | 0x12<<7 | 0x2D,
	21123 - 19968: jis0208<<14 | 0x12<<7 | 0x23,
	21125 - 19968: jis0212<<14 | 0x12<<7 | 0x2E,
	21127 - 19968: jis0208<<14 | 0x16<<7 | 0x3F,
	21128 - 19968: jis0208<<14 | 0x30<<7 | 0x5B,
	21129 - 19968: jis0208<<14 | 0x2D<<7 | 0x0C,
	21130 - 19968: jis0212<<14 | 0x12<<7 | 0x2F,
	21132 - 19968: jis0212<<14 | 0x12<<7 | 0x30,
	21133 - 19968: jis0208<<14 | 0x30<<7 | 0x57,
	21137 - 19968: jis0208<<14 | 0x30<<7 | 0x5C,
	21138 - 19968: jis0208<<14 | 0x30<<7 | 0x59,
	21139 - 19968: jis0212<<14 | 0x12<<7 | 0x31,
	21140 - 19968: jis0208<<14 | 0x30<<7 | 0x58,
	21141 - 19968: jis0212<<14 | 0x12<<7 | 0x32,
	21142 - 19968: jis0212<<14 | 0x12<<7 | 0x33,
	21143 - 19968: jis0212<<14 | 0x12<<7 | 0x34,
	21144 - 19968: jis0212<<14 | 0x12<<7 | 0x35,
	21146 - 19968: jis0212<<14 | 0x12<<7 | 0x36,
	21147 - 19968: jis0208<<14 | 0x2D<<7 | 0x2E,
	21148 - 19968: jis0208<<14 | 0x58<<7 | 0x28,
	21151 - 19968: jis0208<<14 | 0x17<<7 | 0x58,
	21152 - 19968: jis0208<<14 | 0x11<<7 | 0x22,
	21155 - 19968: jis0208<<14 | 0x2D<<7 | 0x53,
	21156 - 19968: jis0212<<14 | 0x12<<7 | 0x38,
	21157 - 19968: jis0212<<14 | 0x12<<7 | 0x39,
	21158 - 19968: jis0208<<14 | 0x58<<7 | 0x29,
	21159 - 19968: jis0212<<14 | 0x12<<7 | 0x3B,
	21161 - 19968: jis0208<<14 | 0x1C<<7 | 0x54,
	21162 - 19968: jis0208<<14 | 0x24<<7 | 0x37,
	21163 - 19968: jis0208<<14 | 0x18<<7 | 0x44,
	21164 - 19968: jis0208<<14 | 0x31<<7 | 0x01,
	21165 - 19968: jis0208<<14 | 0x31<<7 | 0x02,
	21167 - 19968: jis0208<<14 | 0x5A<<7 | 0x1B,
	21168 - 19968: jis0212<<14 | 0x12<<7 | 0x3D,
	21169 - 19968: jis0208<<14 | 0x2D<<7 | 0x44,
	21172 - 19968: jis0208<<14 | 0x2E<<7 | 0x0A,
	21173 - 19968: jis0208<<14 | 0x31<<7 | 0x04,
	21174 - 19968: jis0212<<14 | 0x12<<7 | 0x3E,
	21175 - 19968: jis0212<<14 | 0x12<<7 | 0x3F,
	21176 - 19968: jis0212<<14 | 0x12<<7 | 0x40,
	21177 - 19968: jis0208<<14 | 0x17<<7 | 0x59,
	21178 - 19968: jis0212<<14 | 0x12<<7 | 0x41,
	21179 - 19968: jis0212<<14 | 0x12<<7 | 0x42,
	21180 - 19968: jis0208<<14 | 0x31<<7 | 0x03,
	21181 - 19968: jis0212<<14 | 0x12<<7 | 0x43,
	21182 - 19968: jis0208<<14 | 0x12<<7 | 0x0E,
	21184 - 19968: jis0208<<14 | 0x58<<7 | 0x2A,
	21185 - 19968: jis0208<<14 | 0x31<<7 | 0x05,
	21187 - 19968: jis0208<<14 | 0x2A<<7 | 0x35,
	21188 - 19968: jis0212<<14 | 0x12<<7 | 0x45,
	21189 - 19968: jis0208<<14 | 0x23<<7 | 0x1B,
	21190 - 19968: jis0212<<14 | 0x12<<7 | 0x46,
	21191 - 19968: jis0208<<14 | 0x2C<<7 | 0x05,
	21192 - 19968: jis0212<<14 | 0x12<<7 | 0x47,
	21193 - 19968: jis0208<<14 | 0x29<<7 | 0x38,
	21196 - 19968: jis0212<<14 | 0x12<<7 | 0x48,
	21197 - 19968: jis0208<<14 | 0x31<<7 | 0x06,
	21199 - 19968: jis0212<<14 | 0x12<<7 | 0x49,
	21201 - 19968: jis0212<<14 | 0x12<<7 | 0x4A,
	21202 - 19968: jis0208<<14 | 0x4F<<7 | 0x34,
	21204 - 19968: jis0212<<14 | 0x12<<7 | 0x4B,
	21205 - 19968: jis0208<<14 | 0x25<<7 | 0x0F,
	21206 - 19968: jis0212<<14 | 0x12<<7 | 0x4C,
	21207 - 19968: jis0208<<14 | 0x31<<7 | 0x07,
	21208 - 19968: jis0208<<14 | 0x13<<7 | 0x09,
	21209 - 19968: jis0208<<14 | 0x2B<<7 | 0x12,
	21211 - 19968: jis0208<<14 | 0x58<<7 | 0x2B,
	21212 - 19968: jis0212<<14 | 0x12<<7 | 0x4E,
	21213 - 19968: jis0208<<14 | 0x1D<<7 | 0x00,
	21214 - 19968: jis0208<<14 | 0x31<<7 | 0x08,
	21215 - 19968: jis0208<<14 | 0x29<<7 | 0x46,
	21216 - 19968: jis0208<<14 | 0x31<<7 | 0x0C,
	21217 - 19968: jis0212<<14 | 0x12<<7 | 0x4F,
	21218 - 19968: jis0208<<14 | 0x1F<<7 | 0x09,
	21219 - 19968: jis0208<<14 | 0x31<<7 | 0x09,
	21220 - 19968: jis0208<<14 | 0x15<<7 | 0x2F,
	21221 - 19968: jis0212<<14 | 0x12<<7 | 0x50,
	21222 - 19968: jis0208<<14 | 0x31<<7 | 0x0A,
	21223 - 19968: jis0208<<14 | 0x13<<7 | 0x0A,
	21224 - 19968: jis0212<<14 | 0x12<<7 | 0x51,
	21225 - 19968: jis0212<<14 | 0x12<<7 | 0x52,
	21226 - 19968: jis0212<<14 | 0x12<<7 | 0x53,
	21228 - 19968: jis0212<<14 | 0x12<<7 | 0x54,
	21232 - 19968: jis0212<<14 | 0x12<<7 | 0x55,
	21233 - 19968: jis0212<<14 | 0x12<<7 | 0x56,
	21234 - 19968: jis0208<<14 | 0x16<<7 | 0x0D,
	21235 - 19968: jis0208<<14 | 0x31<<7 | 0x0D,
	21236 - 19968: jis0212<<14 | 0x12<<7 | 0x57,
	21237 - 19968: jis0208<<14 | 0x31<<7 | 0x0E,
	21238 - 19968: jis0212<<14 | 0x12<<7 | 0x58,
	21239 - 19968: jis0212<<14 | 0x12<<7 | 0x59,
	21240 - 19968: jis0208<<14 | 0x31<<7 | 0x0F,
	21241 - 19968: jis0208<<14 | 0x31<<7 | 0x10,
	21242 - 19968: jis0208<<14 | 0x1B<<7 | 0x3A,
	21246 - 19968: jis0208<<14 | 0x17<<7 | 0x5A,
	21247 - 19968: jis0208<<14 | 0x2B<<7 | 0x3D,
	21248 - 19968: jis0208<<14 | 0x58<<7 | 0x2C,
	21249 - 19968: jis0208<<14 | 0x2B<<7 | 0x47,
	21250 - 19968: jis0208<<14 | 0x25<<7 | 0x56,
	21251 - 19968: jis0212<<14 | 0x12<<7 | 0x5B,
	21253 - 19968: jis0208<<14 | 0x29<<7 | 0x50,
	21254 - 19968: jis0208<<14 | 0x31<<7 | 0x11,
	21255 - 19968: jis0208<<14 | 0x58<<7 | 0x2D,
	21256 - 19968: jis0208<<14 | 0x31<<7 | 0x12,
	21258 - 19968: jis0212<<14 | 0x12<<7 | 0x5C,
	21259 - 19968: jis0212<<14 | 0x12<<7 | 0x5D,
	21260 - 19968: jis0212<<14 | 0x13<<7 | 0x00,
	21261 - 19968: jis0208<<14 | 0x31<<7 | 0x14,
	21263 - 19968: jis0208<<14 | 0x31<<7 | 0x16,
	21264 - 19968: jis0208<<14 | 0x31<<7 | 0x15,
	21265 - 19968: jis0212<<14 | 0x13<<7 | 0x01,
	21267 - 19968: jis0212<<14 | 0x13<<7 | 0x02,
	21269 - 19968: jis0208<<14 | 0x31<<7 | 0x17,
	21270 - 19968: jis0208<<14 | 0x11<<7 | 0x1C,
	21271 - 19968: jis0208<<14 | 0x2A<<7 | 0x2B,
	21272 - 19968: jis0212<<14 | 0x13<<7 | 0x03,
	21273 - 19968: jis0208<<14 | 0x19<<7 | 0x5B,
	21274 - 19968: jis0208<<14 | 0x31<<7 | 0x18,
	21275 - 19968: jis0212<<14 | 0x13<<7 | 0x04,
	21276 - 19968: jis0212<<14 | 0x13<<7 | 0x05,
	21277 - 19968: jis0208<<14 | 0x20<<7 | 0x38,
	21278 - 19968: jis0212<<14 | 0x13<<7 | 0x06,
	21279 - 19968: jis0212<<14 | 0x13<<7 | 0x07,
	21280 - 19968: jis0208<<14 | 0x1D<<7 | 0x01,
	21281 - 19968: jis0208<<14 | 0x15<<7 | 0x08,
	21283 - 19968: jis0208<<14 | 0x31<<7 | 0x19,
	21284 - 19968: jis0208<<14 | 0x58<<7 | 0x2E,
	21285 - 19968: jis0212<<14 | 0x13<<7 | 0x08,
	21287 - 19968: jis0212<<14 | 0x13<<7 | 0x09,
	21288 - 19968: jis0212<<14 | 0x13<<7 | 0x0A,
	21289 - 19968: jis0212<<14 | 0x13<<7 | 0x0B,
	21290 - 19968: jis0208<<14 | 0x27<<7 | 0x3A,
	21291 - 19968: jis0212<<14 | 0x13<<7 | 0x0C,
	21292 - 19968: jis0212<<14 | 0x13<<7 | 0x0D,
	21293 - 19968: jis0212<<14 | 0x13<<7 | 0x0E,
	21295 - 19968: jis0208<<14 | 0x31<<7 | 0x1A,
	21296 - 19968: jis0212<<14 | 0x13<<7 | 0x0F,
	21297 - 19968: jis0208<<14 | 0x31<<7 | 0x1B,
	21298 - 19968: jis0212<<14 | 0x13<<7 | 0x10,
	21299 - 19968: jis0208<<14 | 0x31<<7 | 0x1C,
	21301 - 19968: jis0212<<14 | 0x13<<7 | 0x11,
	21304 - 19968: jis0208<<14 | 0x31<<7 | 0x1D,
	21305 - 19968: jis0208<<14 | 0x28<<7 | 0x03,
	21306 - 19968: jis0208<<14 | 0x15<<7 | 0x47,
	21307 - 19968: jis0208<<14 | 0x0F<<7 | 0x44,
	21308 - 19968: jis0212<<14 | 0x13<<7 | 0x12,
	21309 - 19968: jis0212<<14 | 0x13<<7 | 0x13,
	21310 - 19968: jis0212<<14 | 0x13<<7 | 0x14,
	21311 - 19968: jis0208<<14 | 0x25<<7 | 0x1E,
	21312 - 19968: jis0208<<14 | 0x31<<7 | 0x1E,
	21313 - 19968: jis0208<<14 | 0x1C<<7 | 0x1C,
	21314 - 19968: jis0212<<14 | 0x13<<7 | 0x15,
	21315 - 19968: jis0208<<14 | 0x1F<<7 | 0x48,
	21317 - 19968: jis0208<<14 | 0x31<<7 | 0x20,
	21318 - 19968: jis0208<<14 | 0x31<<7 | 0x1F,
	21319 - 19968: jis0208<<14 | 0x1D<<7 | 0x02,
	21320 - 19968: jis0208<<14 | 0x17<<7 | 0x40,
	21321 - 19968: jis0208<<14 | 0x31<<7 | 0x22,
	21322 - 19968: jis0208<<14 | 0x27<<7 | 0x1D,
	21323 - 19968: jis0212<<14 | 0x13<<7 | 0x17,
	21324 - 19968: jis0212<<14 | 0x13<<7 | 0x16,
	21325 - 19968: jis0208<<14 | 0x31<<7 | 0x23,
	21329 - 19968: jis0208<<14 | 0x27<<7 | 0x3B,
	21330 - 19968: jis0208<<14 | 0x21<<7 | 0x13,
	21331 - 19968: jis0208<<14 | 0x21<<7 | 0x4D,
	21332 - 19968: jis0208<<14 | 0x15<<7 | 0x07,
	21335 - 19968: jis0208<<14 | 0x25<<7 | 0x4D,
	21336 - 19968: jis0208<<14 | 0x22<<7 | 0x10,
	21337 - 19968: jis0212<<14 | 0x13<<7 | 0x18,
	21338 - 19968: jis0208<<14 | 0x26<<7 | 0x4D,
	21339 - 19968: jis0212<<14 | 0x13<<7 | 0x19,
	21340 - 19968: jis0208<<14 | 0x2A<<7 | 0x2D,
	21342 - 19968: jis0208<<14 | 0x31<<7 | 0x25,
	21344 - 19968: jis0208<<14 | 0x1F<<7 | 0x49,
	21345 - 19968: jis0212<<14 | 0x13<<7 | 0x1A,
	21347 - 19968: jis0212<<14 | 0x13<<7 | 0x1B,
	21349 - 19968: jis0212<<14 | 0x13<<7 | 0x1C,
	21350 - 19968: jis0208<<14 | 0x16<<7 | 0x14,
	21353 - 19968: jis0208<<14 | 0x31<<7 | 0x26,
	21356 - 19968: jis0212<<14 | 0x13<<7 | 0x1D,
	21357 - 19968: jis0212<<14 | 0x13<<7 | 0x1E,
	21358 - 19968: jis0208<<14 | 0x31<<7 | 0x27,
	21359 - 19968: jis0208<<14 | 0x10<<7 | 0x0B,
	21360 - 19968: jis0208<<14 | 0x0F<<7 | 0x54,
	21361 - 19968: jis0208<<14 | 0x13<<7 | 0x4C,
	21362 - 19968: jis0208<<14 | 0x58<<7 | 0x2F,
	21363 - 19968: jis0208<<14 | 0x21<<7 | 0x07,
	21364 - 19968: jis0208<<14 | 0x14<<7 | 0x30,
	21365 - 19968: jis0208<<14 | 0x2C<<7 | 0x50,
	21367 - 19968: jis0208<<14 | 0x31<<7 | 0x2A,
	21368 - 19968: jis0208<<14 | 0x11<<7 | 0x16,
	21369 - 19968: jis0212<<14 | 0x13<<7 | 0x20,
	21371 - 19968: jis0208<<14 | 0x31<<7 | 0x29,
	21374 - 19968: jis0212<<14 | 0x13<<7 | 0x21,
	21375 - 19968: jis0208<<14 | 0x15<<7 | 0x09,
	21378 - 19968: jis0208<<14 | 0x31<<7 | 0x2B,
	21379 - 19968: jis0212<<14 | 0x13<<7 | 0x22,
	21380 - 19968: jis0208<<14 | 0x2B<<7 | 0x50,
	21383 - 19968: jis0212<<14 | 0x13<<7 | 0x23,
	21384 - 19968: jis0212<<14 | 0x13<<7 | 0x24,
	21390 - 19968: jis0212<<14 | 0x13<<7 | 0x25,
	21395 - 19968: jis0208<<14 | 0x58<<7 | 0x30,
	21396 - 19968: jis0212<<14 | 0x13<<7 | 0x27,
	21398 - 19968: jis0208<<14 | 0x31<<7 | 0x2C,
	21400 - 19968: jis0208<<14 | 0x2D<<7 | 0x31,
	21401 - 19968: jis0212<<14 | 0x13<<7 | 0x28,
	21402 - 19968: jis0208<<14 | 0x17<<7 | 0x5B,
	21405 - 19968: jis0212<<14 | 0x13<<7 | 0x29,
	21407 - 19968: jis0208<<14 | 0x17<<7 | 0x15,
	21408 - 19968: jis0208<<14 | 0x31<<7 | 0x2D,
	21409 - 19968: jis0212<<14 | 0x13<<7 | 0x2A,
	21412 - 19968: jis0212<<14 | 0x13<<7 | 0x2B,
	21413 - 19968: jis0208<<14 | 0x31<<7 | 0x2F,
	21414 - 19968: jis0208<<14 | 0x31<<7 | 0x2E,
	21416 - 19968: jis0208<<14 | 0x1E<<7 | 0x3E,
	21417 - 19968: jis0208<<14 | 0x10<<7 | 0x18,
	21418 - 19968: jis0212<<14 | 0x13<<7 | 0x2C,
	21419 - 19968: jis0212<<14 | 0x13<<7 | 0x2D,
	21421 - 19968: jis0208<<14 | 0x10<<7 | 0x3D,
	21422 - 19968: jis0208<<14 | 0x31<<7 | 0x30,
	21423 - 19968: jis0212<<14 | 0x13<<7 | 0x2E,
	21424 - 19968: jis0208<<14 | 0x31<<7 | 0x31,
	21426 - 19968: jis0208<<14 | 0x58<<7 | 0x31,
	21427 - 19968: jis0208<<14 | 0x17<<7 | 0x16,
	21428 - 19968: jis0212<<14 | 0x13<<7 | 0x30,
	21429 - 19968: jis0212<<14 | 0x13<<7 | 0x31,
	21430 - 19968: jis0208<<14 | 0x31<<7 | 0x32,
	21431 - 19968: jis0212<<14 | 0x13<<7 | 0x32,
	21432 - 19968: jis0212<<14 | 0x13<<7 | 0x33,
	21434 - 19968: jis0212<<14 | 0x13<<7 | 0x34,
	21435 - 19968: jis0208<<14 | 0x14<<7 | 0x4D,
	21437 - 19968: jis0212<<14 | 0x13<<7 | 0x35,
	21440 - 19968: jis0212<<14 | 0x13<<7 | 0x36,
	21442 - 19968: jis0208<<14 | 0x1A<<7 | 0x11,
	21443 - 19968: jis0208<<14 | 0x31<<7 | 0x33,
	21445 - 19968: jis0212<<14 | 0x13<<7 | 0x37,
	21448 - 19968: jis0208<<14 | 0x2A<<7 | 0x53,
	21449 - 19968: jis0208<<14 | 0x19<<7 | 0x14,
	21450 - 19968: jis0208<<14 | 0x14<<7 | 0x39,
	21451 - 19968: jis0208<<14 | 0x2C<<7 | 0x06,
	21452 - 19968: jis0208<<14 | 0x20<<7 | 0x2F,
	21453 - 19968: jis0208<<14 | 0x27<<7 | 0x1E,
	21454 - 19968: jis0208<<14 | 0x1B<<7 | 0x5C,
	21455 - 19968: jis0212<<14 | 0x13<<7 | 0x38,
	21458 - 19968: jis0212<<14 | 0x13<<7 | 0x39,
	21459 - 19968: jis0212<<14 | 0x13<<7 | 0x3A,
	21460 - 19968: jis0208<<14 | 0x1C<<7 | 0x26,
	21461 - 19968: jis0212<<14 | 0x13<<7 | 0x3B,
	21462 - 19968: jis0208<<14 | 0x1B<<7 | 0x47,
	21463 - 19968: jis0208<<14 | 0x1B<<7 | 0x54,
	21465 - 19968: jis0208<<14 | 0x1C<<7 | 0x55,
	21466 - 19968: jis0212<<14 | 0x13<<7 | 0x3C,
	21467 - 19968: jis0208<<14 | 0x27<<7 | 0x1F,
	21469 - 19968: jis0208<<14 | 0x58<<7 | 0x32,
	21470 - 19968: jis0212<<14 | 0x13<<7 | 0x3E,
	21471 - 19968: jis0208<<14 | 0x31<<7 | 0x36,
	21472 - 19968: jis0212<<14 | 0x13<<7 | 0x3F,
	21473 - 19968: jis0208<<14 | 0x10<<7 | 0x22,
	21474 - 19968: jis0208<<14 | 0x20<<7 | 0x30,
	21475 - 19968: jis0208<<14 | 0x17<<7 | 0x5C,
	21476 - 19968: jis0208<<14 | 0x17<<7 | 0x24,
	21477 - 19968: jis0208<<14 | 0x15<<7 | 0x46,
	21478 - 19968: jis0212<<14 | 0x13<<7 | 0x40,
	21479 - 19968: jis0212<<14 | 0x13<<7 | 0x41,
	21480 - 19968: jis0208<<14 | 0x31<<7 | 0x3A,
	21481 - 19968: jis0208<<14 | 0x22<<7 | 0x00,
	21482 - 19968: jis0208<<14 | 0x21<<7 | 0x5D,
	21483 - 19968: jis0208<<14 | 0x15<<7 | 0x0A,
	21484 - 19968: jis0208<<14 | 0x1D<<7 | 0x03,
	21485 - 19968: jis0208<<14 | 0x31<<7 | 0x3B,
	21486 - 19968: jis0208<<14 | 0x31<<7 | 0x39,
	21487 - 19968: jis0208<<14 | 0x11<<7 | 0x23,
	21488 - 19968: jis0208<<14 | 0x21<<7 | 0x45,
	21489 - 19968: jis0208<<14 | 0x1B<<7 | 0x17,
	21490 - 19968: jis0208<<14 | 0x1A<<7 | 0x2A,
	21491 - 19968: jis0208<<14 | 0x10<<7 | 0x05,
	21493 - 19968: jis0212<<14 | 0x13<<7 | 0x42,
	21494 - 19968: jis0208<<14 | 0x12<<7 | 0x4F,
	21495 - 19968: jis0208<<14 | 0x18<<7 | 0x45,
	21496 - 19968: jis0208<<14 | 0x1A<<7 | 0x29,
	21498 - 19968: jis0208<<14 | 0x31<<7 | 0x3C,
	21505 - 19968: jis0208<<14 | 0x31<<7 | 0x3D,
	21506 - 19968: jis0212<<14 | 0x13<<7 | 0x43,
	21507 - 19968: jis0208<<14 | 0x14<<7 | 0x28,
	21508 - 19968: jis0208<<14 | 0x12<<7 | 0x25,
	21512 - 19968: jis0208<<14 | 0x18<<7 | 0x46,
	21513 - 19968: jis0208<<14 | 0x14<<7 | 0x27,
	21514 - 19968: jis0208<<14 | 0x23<<7 | 0x3E,
	21515 - 19968: jis0208<<14 | 0x10<<7 | 0x04,
	21516 - 19968: jis0208<<14 | 0x25<<7 | 0x10,
	21517 - 19968: jis0208<<14 | 0x2B<<7 | 0x1D,
	21518 - 19968: jis0208<<14 | 0x18<<7 | 0x00,
	21519 - 19968: jis0208<<14 | 0x2C<<7 | 0x58,
	21520 - 19968: jis0208<<14 | 0x24<<7 | 0x26,
	21521 - 19968: jis0208<<14 | 0x17<<7 | 0x5D,
	21523 - 19968: jis0212<<14 | 0x13<<7 | 0x44,
	21530 - 19968: jis0212<<14 | 0x13<<7 | 0x45,
	21531 - 19968: jis0208<<14 | 0x16<<7 | 0x0E,
	21533 - 19968: jis0208<<14 | 0x31<<7 | 0x46,
	21535 - 19968: jis0208<<14 | 0x15<<7 | 0x42,
	21536 - 19968: jis0208<<14 | 0x2A<<7 | 0x29,
	21537 - 19968: jis0212<<14 | 0x13<<7 | 0x46,
	21542 - 19968: jis0208<<14 | 0x27<<7 | 0x3C,
	21543 - 19968: jis0212<<14 | 0x13<<7 | 0x47,
	21544 - 19968: jis0212<<14 | 0x13<<7 | 0x48,
	21545 - 19968: jis0208<<14 | 0x31<<7 | 0x45,
	21546 - 19968: jis0212<<14 | 0x13<<7 | 0x49,
	21547 - 19968: jis0208<<14 | 0x13<<7 | 0x3D,
	21548 - 19968: jis0208<<14 | 0x31<<7 | 0x40,
	21549 - 19968: jis0208<<14 | 0x31<<7 | 0x41,
	21550 - 19968: jis0208<<14 | 0x31<<7 | 0x43,
	21551 - 19968: jis0212<<14 | 0x13<<7 | 0x4A,
	21553 - 19968: jis0212<<14 | 0x13<<7 | 0x4B,
	21556 - 19968: jis0212<<14 | 0x13<<7 | 0x4C,
	21557 - 19968: jis0212<<14 | 0x13<<7 | 0x4D,
	21558 - 19968: jis0208<<14 | 0x31<<7 | 0x44,
	21560 - 19968: jis0208<<14 | 0x14<<7 | 0x3A,
	21561 - 19968: jis0208<<14 | 0x1E<<7 | 0x40,
	21563 - 19968: jis0208<<14 | 0x29<<7 | 0x0C,
	21564 - 19968: jis0208<<14 | 0x31<<7 | 0x42,
	21565 - 19968: jis0208<<14 | 0x31<<7 | 0x3E,
	21566 - 19968: jis0208<<14 | 0x17<<7 | 0x42,
	21568 - 19968: jis0208<<14 | 0x31<<7 | 0x3F,
	21570 - 19968: jis0208<<14 | 0x2E<<7 | 0x03,
	21571 - 19968: jis0212<<14 | 0x13<<7 | 0x4E,
	21572 - 19968: jis0212<<14 | 0x13<<7 | 0x4F,
	21574 - 19968: jis0208<<14 | 0x29<<7 | 0x51,
	21575 - 19968: jis0212<<14 | 0x13<<7 | 0x50,
	21576 - 19968: jis0208<<14 | 0x23<<7 | 0x47,
	21577 - 19968: jis0208<<14 | 0x17<<7 | 0x41,
	21578 - 19968: jis0208<<14 | 0x18<<7 | 0x4F,
	21581 - 19968: jis0212<<14 | 0x13<<7 | 0x51,
	21582 - 19968: jis0208<<14 | 0x31<<7 | 0x47,
	21583 - 19968: jis0212<<14 | 0x13<<7 | 0x52,
	21585 - 19968: jis0208<<14 | 0x25<<7 | 0x3C,
	21598 - 19968: jis0212<<14 | 0x13<<7 | 0x53,
	21599 - 19968: jis0208<<14 | 0x31<<7 | 0x4B,
	21602 - 19968: jis0212<<14 | 0x13<<7 | 0x54,
	21604 - 19968: jis0212<<14 | 0x13<<7 | 0x55,
	21606 - 19968: jis0212<<14 | 0x13<<7 | 0x56,
	21607 - 19968: jis0212<<14 | 0x13<<7 | 0x57,
	21608 - 19968: jis0208<<14 | 0x1B<<7 | 0x5D,
	21609 - 19968: jis0212<<14 | 0x13<<7 | 0x58,
	21610 - 19968: jis0208<<14 | 0x1B<<7 | 0x55,
	21611 - 19968: jis0212<<14 | 0x13<<7 | 0x59,
	21613 - 19968: jis0212<<14 | 0x13<<7 | 0x5A,
	21614 - 19968: jis0212<<14 | 0x13<<7 | 0x5B,
	21616 - 19968: jis0208<<14 | 0x31<<7 | 0x4E,
	21617 - 19968: jis0208<<14 | 0x31<<7 | 0x4C,
	21619 - 19968: jis0208<<14 | 0x2B<<7 | 0x02,
	21620 - 19968: jis0212<<14 | 0x13<<7 | 0x5C,
	21621 - 19968: jis0208<<14 | 0x31<<7 | 0x49,
	21622 - 19968: jis0208<<14 | 0x31<<7 | 0x52,
	21623 - 19968: jis0208<<14 | 0x31<<7 | 0x4D,
	21627 - 19968: jis0208<<14 | 0x31<<7 | 0x50,
	21628 - 19968: jis0208<<14 | 0x17<<7 | 0x25,
	21629 - 19968: jis0208<<14 | 0x2B<<7 | 0x1E,
	21631 - 19968: jis0212<<14 | 0x13<<7 | 0x5D,
	21632 - 19968: jis0208<<14 | 0x31<<7 | 0x51,
	21633 - 19968: jis0212<<14 | 0x14<<7 | 0x00,
	21635 - 19968: jis0212<<14 | 0x14<<7 | 0x01,
	21636 - 19968: jis0208<<14 | 0x31<<7 | 0x53,
	21637 - 19968: jis0212<<14 | 0x14<<7 | 0x02,
	21638 - 19968: jis0208<<14 | 0x31<<7 | 0x55,
	21640 - 19968: jis0212<<14 | 0x14<<7 | 0x03,
	21641 - 19968: jis0212<<14 | 0x14<<7 | 0x04,
	21642 - 19968: jis0208<<14 | 0x58<<7 | 0x35,
	21643 - 19968: jis0208<<14 | 0x19<<7 | 0x4F,
	21644 - 19968: jis0208<<14 | 0x2E<<7 | 0x21,
	21645 - 19968: jis0212<<14 | 0x14<<7 | 0x05,
	21646 - 19968: jis0208<<14 | 0x31<<7 | 0x4A,
	21647 - 19968: jis0208<<14 | 0x31<<7 | 0x48,
	21648 - 19968: jis0208<<14 | 0x31<<7 | 0x54,
	21649 - 19968: jis0212<<14 | 0x14<<7 | 0x06,
	21650 - 19968: jis0208<<14 | 0x31<<7 | 0x4F,
	21653 - 19968: jis0212<<14 | 0x14<<7 | 0x07,
	21654 - 19968: jis0212<<14 | 0x14<<7 | 0x08,
	21660 - 19968: jis0208<<14 | 0x58<<7 | 0x34,
	21663 - 19968: jis0212<<14 | 0x14<<7 | 0x0A,
	21665 - 19968: jis0212<<14 | 0x14<<7 | 0x0B,
	21666 - 19968: jis0208<<14 | 0x31<<7 | 0x57,
	21668 - 19968: jis0208<<14 | 0x32<<7 | 0x02,
	21669 - 19968: jis0208<<14 | 0x31<<7 | 0x59,
	21670 - 19968: jis0212<<14 | 0x14<<7 | 0x0C,
	21671 - 19968: jis0212<<14 | 0x14<<7 | 0x0D,
	21672 - 19968: jis0208<<14 | 0x31<<7 | 0x5D,
	21673 - 19968: jis0208<<14 | 0x58<<7 | 0x36,
	21674 - 19968: jis0212<<14 | 0x14<<7 | 0x0F,
	21675 - 19968: jis0208<<14 | 0x32<<7 | 0x00,
	21676 - 19968: jis0208<<14 | 0x31<<7 | 0x5A,
	21677 - 19968: jis0212<<14 | 0x14<<7 | 0x10,
	21678 - 19968: jis0212<<14 | 0x14<<7 | 0x11,
	21679 - 19968: jis0208<<14 | 0x32<<7 | 0x1D,
	21681 - 19968: jis0212<<14 | 0x14<<7 | 0x12,
	21682 - 19968: jis0208<<14 | 0x19<<7 | 0x48,
	21683 - 19968: jis0208<<14 | 0x12<<7 | 0x10,
	21687 - 19968: jis0212<<14 | 0x14<<7 | 0x13,
	21688 - 19968: jis0208<<14 | 0x31<<7 | 0x58,
	21689 - 19968: jis0212<<14 | 0x14<<7 | 0x14,
	21690 - 19968: jis0212<<14 | 0x14<<7 | 0x15,
	21691 - 19968: jis0212<<14 | 0x14<<7 | 0x16,
	21692 - 19968: jis0208<<14 | 0x32<<7 | 0x04,
	21693 - 19968: jis0208<<14 | 0x0F<<7 | 0x55,
	21694 - 19968: jis0208<<14 | 0x32<<7 | 0x03,
	21695 - 19968: jis0212<<14 | 0x14<<7 | 0x17,
	21696 - 19968: jis0208<<14 | 0x0F<<7 | 0x04,
	21697 - 19968: jis0208<<14 | 0x28<<7 | 0x29,
	21698 - 19968: jis0208<<14 | 0x32<<7 | 0x01,
	21700 - 19968: jis0208<<14 | 0x31<<7 | 0x5B,
	21702 - 19968: jis0212<<14 | 0x14<<7 | 0x18,
	21703 - 19968: jis0208<<14 | 0x31<<7 | 0x56,
	21704 - 19968: jis0208<<14 | 0x31<<7 | 0x5C,
	21705 - 19968: jis0208<<14 | 0x19<<7 | 0x27,
	21706 - 19968: jis0212<<14 | 0x14<<7 | 0x19,
	21709 - 19968: jis0212<<14 | 0x14<<7 | 0x1A,
	21710 - 19968: jis0212<<14 | 0x14<<7 | 0x1B,
	21720 - 19968: jis0208<<14 | 0x32<<7 | 0x05,
	21728 - 19968: jis0212<<14 | 0x14<<7 | 0x1C,
	21729 - 19968: jis0208<<14 | 0x0F<<7 | 0x56,
	21730 - 19968: jis0208<<14 | 0x32<<7 | 0x0E,
	21733 - 19968: jis0208<<14 | 0x32<<7 | 0x06,
	21734 - 19968: jis0208<<14 | 0x32<<7 | 0x07,
	21736 - 19968: jis0208<<14 | 0x1D<<7 | 0x04,
	21737 - 19968: jis0208<<14 | 0x2A<<7 | 0x48,
	21738 - 19968: jis0212<<14 | 0x14<<7 | 0x1D,
	21740 - 19968: jis0212<<14 | 0x14<<7 | 0x1E,
	21741 - 19968: jis0208<<14 | 0x32<<7 | 0x0C,
	21742 - 19968: jis0208<<14 | 0x32<<7 | 0x0B,
	21743 - 19968: jis0212<<14 | 0x14<<7 | 0x1F,
	21746 - 19968: jis0208<<14 | 0x24<<7 | 0x0E,
	21750 - 19968: jis0212<<14 | 0x14<<7 | 0x20,
	21754 - 19968: jis0208<<14 | 0x32<<7 | 0x0D,
	21756 - 19968: jis0212<<14 | 0x14<<7 | 0x21,
	21757 - 19968: jis0208<<14 | 0x32<<7 | 0x0A,
	21758 - 19968: jis0212<<14 | 0x14<<7 | 0x22,
	21759 - 19968: jis0208<<14 | 0x58<<7 | 0x37,
	21760 - 19968: jis0212<<14 | 0x14<<7 | 0x24,
	21761 - 19968: jis0212<<14 | 0x14<<7 | 0x25,
	21764 - 19968: jis0208<<14 | 0x10<<7 | 0x13,
	21765 - 19968: jis0212<<14 | 0x14<<7 | 0x26,
	21766 - 19968: jis0208<<14 | 0x19<<7 | 0x15,
	21767 - 19968: jis0208<<14 | 0x1E<<7 | 0x0F,
	21768 - 19968: jis0212<<14 | 0x14<<7 | 0x27,
	21769 - 19968: jis0212<<14 | 0x14<<7 | 0x28,
	21772 - 19968: jis0212<<14 | 0x14<<7 | 0x29,
	21773 - 19968: jis0212<<14 | 0x14<<7 | 0x2A,
	21774 - 19968: jis0212<<14 | 0x14<<7 | 0x2B,
	21775 - 19968: jis0208<<14 | 0x32<<7 | 0x08,
	21776 - 19968: jis0208<<14 | 0x24<<7 | 0x41,
	21780 - 19968: jis0208<<14 | 0x32<<7 | 0x09,
	21781 - 19968: jis0212<<14 | 0x14<<7 | 0x2C,
	21782 - 19968: jis0208<<14 | 0x0F<<7 | 0x01,
	21802 - 19968: jis0212<<14 | 0x14<<7 | 0x2D,
	21803 - 19968: jis0212<<14 | 0x14<<7 | 0x2E,
	21806 - 19968: jis0208<<14 | 0x32<<7 | 0x13,
	21807 - 19968: jis0208<<14 | 0x2C<<7 | 0x02,
	21809 - 19968: jis0208<<14 | 0x1D<<7 | 0x06,
	21810 - 19968: jis0212<<14 | 0x14<<7 | 0x2F,
	21811 - 19968: jis0208<<14 | 0x32<<7 | 0x19,
	21813 - 19968: jis0212<<14 | 0x14<<7 | 0x30,
	21814 - 19968: jis0212<<14 | 0x14<<7 | 0x31,
	21816 - 19968: jis0208<<14 | 0x32<<7 | 0x18,
	21817 - 19968: jis0208<<14 | 0x32<<7 | 0x0F,
	21819 - 19968: jis0212<<14 | 0x14<<7 | 0x32,
	21820 - 19968: jis0212<<14 | 0x14<<7 | 0x33,
	21821 - 19968: jis0212<<14 | 0x14<<7 | 0x34,
	21822 - 19968: jis0208<<14 | 0x21<<7 | 0x22,
	21824 - 19968: jis0208<<14 | 0x32<<7 | 0x10,
	21825 - 19968: jis0212<<14 | 0x14<<7 | 0x35,
	21828 - 19968: jis0208<<14 | 0x21<<7 | 0x4E,
	21829 - 19968: jis0208<<14 | 0x32<<7 | 0x15,
	21830 - 19968: jis0208<<14 | 0x1D<<7 | 0x05,
	21831 - 19968: jis0212<<14 | 0x14<<7 | 0x36,
	21833 - 19968: jis0212<<14 | 0x14<<7 | 0x37,
	21834 - 19968: jis0212<<14 | 0x14<<7 | 0x38,
	21836 - 19968: jis0208<<14 | 0x32<<7 | 0x12,
	21837 - 19968: jis0212<<14 | 0x14<<7 | 0x39,
	21839 - 19968: jis0208<<14 | 0x2B<<7 | 0x43,
	21840 - 19968: jis0212<<14 | 0x14<<7 | 0x3A,
	21841 - 19968: jis0212<<14 | 0x14<<7 | 0x3B,
	21843 - 19968: jis0208<<14 | 0x16<<7 | 0x1B,
	21846 - 19968: jis0208<<14 | 0x32<<7 | 0x16,
	21847 - 19968: jis0208<<14 | 0x32<<7 | 0x17,
	21848 - 19968: jis0212<<14 | 0x14<<7 | 0x3C,
	21850 - 19968: jis0212<<14 | 0x14<<7 | 0x3D,
	21851 - 19968: jis0212<<14 | 0x14<<7 | 0x3E,
	21852 - 19968: jis0208<<14 | 0x32<<7 | 0x14,
	21853 - 19968: jis0208<<14 | 0x32<<7 | 0x1A,
	21854 - 19968: jis0212<<14 | 0x14<<7 | 0x3F,
	21856 - 19968: jis0212<<14 | 0x14<<7 | 0x40,
	21857 - 19968: jis0212<<14 | 0x14<<7 | 0x41,
	21859 - 19968: jis0208<<14 | 0x32<<7 | 0x11,
	21860 - 19968: jis0212<<14 | 0x14<<7 | 0x42,
	21862 - 19968: jis0212<<14 | 0x14<<7 | 0x43,
	21883 - 19968: jis0208<<14 | 0x32<<7 | 0x20,
	21884 - 19968: jis0208<<14 | 0x32<<7 | 0x25,
	21886 - 19968: jis0208<<14 | 0x32<<7 | 0x21,
	21887 - 19968: jis0212<<14 | 0x14<<7 | 0x44,
	21888 - 19968: jis0208<<14 | 0x32<<7 | 0x1C,
	21889 - 19968: jis0212<<14 | 0x14<<7 | 0x45,
	21890 - 19968: jis0212<<14 | 0x14<<7 | 0x46,
	21891 - 19968: jis0208<<14 | 0x32<<7 | 0x26,
	21892 - 19968: jis0208<<14 | 0x20<<7 | 0x10,
	21894 - 19968: jis0208<<14 | 0x58<<7 | 0x38,
	21895 - 19968: jis0208<<14 | 0x32<<7 | 0x28,
	21896 - 19968: jis0212<<14 | 0x14<<7 | 0x48,
	21897 - 19968: jis0208<<14 | 0x18<<7 | 0x01,
	21898 - 19968: jis0208<<14 | 0x32<<7 | 0x1E,
	21899 - 19968: jis0208<<14 | 0x22<<7 | 0x5C,
	21902 - 19968: jis0212<<14 | 0x14<<7 | 0x49,
	21903 - 19968: jis0212<<14 | 0x14<<7 | 0x4A,
	21905 - 19968: jis0212<<14 | 0x14<<7 | 0x4B,
	21906 - 19968: jis0212<<14 | 0x14<<7 | 0x4C,
	21907 - 19968: jis0212<<14 | 0x14<<7 | 0x4D,
	21908 - 19968: jis0212<<14 | 0x14<<7 | 0x4E,
	21911 - 19968: jis0212<<14 | 0x14<<7 | 0x4F,
	21912 - 19968: jis0208<<14 | 0x32<<7 | 0x22,
	21913 - 19968: jis0208<<14 | 0x32<<7 | 0x1B,
	21914 - 19968: jis0208<<14 | 0x13<<7 | 0x0C,
	21916 - 19968: jis0208<<14 | 0x13<<7 | 0x4D,
	21917 - 19968: jis0208<<14 | 0x12<<7 | 0x44,
	21918 - 19968: jis0208<<14 | 0x32<<7 | 0x23,
	21919 - 19968: jis0208<<14 | 0x32<<7 | 0x1F,
	21923 - 19968: jis0212<<14 | 0x14<<7 | 0x50,
	21924 - 19968: jis0212<<14 | 0x14<<7 | 0x51,
	21927 - 19968: jis0208<<14 | 0x16<<7 | 0x55,
	21928 - 19968: jis0208<<14 | 0x32<<7 | 0x29,
	21929 - 19968: jis0208<<14 | 0x32<<7 | 0x27,
	21930 - 19968: jis0208<<14 | 0x20<<7 | 0x32,
	21931 - 19968: jis0208<<14 | 0x14<<7 | 0x29,
	21932 - 19968: jis0208<<14 | 0x15<<7 | 0x0B,
	21933 - 19968: jis0212<<14 | 0x14<<7 | 0x52,
	21934 - 19968: jis0208<<14 | 0x32<<7 | 0x24,
	21936 - 19968: jis0208<<14 | 0x15<<7 | 0x53,
	21938 - 19968: jis0212<<14 | 0x14<<7 | 0x53,
	21942 - 19968: jis0208<<14 | 0x10<<7 | 0x23,
	21951 - 19968: jis0212<<14 | 0x14<<7 | 0x54,
	21953 - 19968: jis0212<<14 | 0x14<<7 | 0x55,
	21955 - 19968: jis0212<<14 | 0x14<<7 | 0x56,
	21956 - 19968: jis0208<<14 | 0x32<<7 | 0x2D,
	21957 - 19968: jis0208<<14 | 0x32<<7 | 0x2B,
	21958 - 19968: jis0212<<14 | 0x14<<7 | 0x57,
	21959 - 19968: jis0208<<14 | 0x33<<7 | 0x06,
	21961 - 19968: jis0212<<14 | 0x14<<7 | 0x58,
	21963 - 19968: jis0212<<14 | 0x14<<7 | 0x59,
	21964 - 19968: jis0212<<14 | 0x14<<7 | 0x5A,
	21966 - 19968: jis0212<<14 | 0x14<<7 | 0x5B,
	21969 - 19968: jis0212<<14 | 0x14<<7 | 0x5C,
	21970 - 19968: jis0212<<14 | 0x14<<7 | 0x5D,
	21971 - 19968: jis0212<<14 | 0x15<<7 | 0x00,
	21972 - 19968: jis0208<<14 | 0x32<<7 | 0x30,
	21975 - 19968: jis0212<<14 | 0x15<<7 | 0x01,
	21976 - 19968: jis0212<<14 | 0x15<<7 | 0x02,
	21978 - 19968: jis0208<<14 | 0x32<<7 | 0x2A,
	21979 - 19968: jis0212<<14 | 0x15<<7 | 0x03,
	21980 - 19968: jis0208<<14 | 0x32<<7 | 0x2E,
	21982 - 19968: jis0212<<14 | 0x15<<7 | 0x04,
	21983 - 19968: jis0208<<14 | 0x32<<7 | 0x2C,
	21986 - 19968: jis0212<<14 | 0x15<<7 | 0x05,
	21987 - 19968: jis0208<<14 | 0x1A<<7 | 0x2B,
	21988 - 19968: jis0208<<14 | 0x32<<7 | 0x2F,
	21993 - 19968: jis0212<<14 | 0x15<<7 | 0x06,
	22006 - 19968: jis0212<<14 | 0x15<<7 | 0x07,
	22007 - 19968: jis0208<<14 | 0x32<<7 | 0x32,
	22009 - 19968: jis0208<<14 | 0x32<<7 | 0x37,
	22013 - 19968: jis0208<<14 | 0x32<<7 | 0x35,
	22014 - 19968: jis0208<<14 | 0x32<<7 | 0x34,
	22015 - 19968: jis0212<<14 | 0x15<<7 | 0x08,
	22021 - 19968: jis0212<<14 | 0x15<<7 | 0x09,
	22022 - 19968: jis0208<<14 | 0x22<<7 | 0x11,
	22024 - 19968: jis0212<<14 | 0x15<<7 | 0x0A,
	22025 - 19968: jis0208<<14 | 0x11<<7 | 0x24,
	22026 - 19968: jis0212<<14 | 0x15<<7 | 0x0B,
	22029 - 19968: jis0212<<14 | 0x15<<7 | 0x0C,
	22030 - 19968: jis0212<<14 | 0x15<<7 | 0x0D,
	22031 - 19968: jis0212<<14 | 0x15<<7 | 0x0E,
	22032 - 19968: jis0212<<14 | 0x15<<7 | 0x0F,
	22033 - 19968: jis0212<<14 | 0x15<<7 | 0x10,
	22034 - 19968: jis0212<<14 | 0x15<<7 | 0x11,
	22036 - 19968: jis0208<<14 | 0x32<<7 | 0x31,
	22038 - 19968: jis0208<<14 | 0x32<<7 | 0x33,
	22039 - 19968: jis0208<<14 | 0x1D<<7 | 0x07,
	22040 - 19968: jis0208<<14 | 0x10<<7 | 0x12,
	22041 - 19968: jis0212<<14 | 0x15<<7 | 0x12,
	22043 - 19968: jis0208<<14 | 0x32<<7 | 0x36,
	22057 - 19968: jis0208<<14 | 0x11<<7 | 0x3D,
	22060 - 19968: jis0212<<14 | 0x15<<7 | 0x13,
	22063 - 19968: jis0208<<14 | 0x32<<7 | 0x41,
	22064 - 19968: jis0212<<14 | 0x15<<7 | 0x14,
	22065 - 19968: jis0208<<14 | 0x1D<<7 | 0x5B,
	22066 - 19968: jis0208<<14 | 0x32<<7 | 0x3D,
	22067 - 19968: jis0212<<14 | 0x15<<7 | 0x15,
	22068 - 19968: jis0208<<14 | 0x32<<7 | 0x3B,
	22069 - 19968: jis0212<<14 | 0x15<<7 | 0x16,
	22070 - 19968: jis0208<<14 | 0x32<<7 | 0x3C,
	22071 - 19968: jis0212<<14 | 0x15<<7 | 0x17,
	22072 - 19968: jis0208<<14 | 0x32<<7 | 0x3E,
	22073 - 19968: jis0212<<14 | 0x15<<7 | 0x18,
	22075 - 19968: jis0212<<14 | 0x15<<7 | 0x19,
	22076 - 19968: jis0212<<14 | 0x15<<7 | 0x1A,
	22077 - 19968: jis0212<<14 | 0x15<<7 | 0x1B,
	22079 - 19968: jis0212<<14 | 0x15<<7 | 0x1C,
	22080 - 19968: jis0212<<14 | 0x15<<7 | 0x1D,
	22081 - 19968: jis0212<<14 | 0x15<<7 | 0x1E,
	22082 - 19968: jis0208<<14 | 0x10<<7 | 0x1C,
	22083 - 19968: jis0212<<14 | 0x15<<7 | 0x1F,
	22084 - 19968: jis0212<<14 | 0x15<<7 | 0x20,
	22086 - 19968: jis0212<<14 | 0x15<<7 | 0x21,
	22089 - 19968: jis0212<<14 | 0x15<<7 | 0x22,
	22091 - 19968: jis0212<<14 | 0x15<<7 | 0x23,
	22092 - 19968: jis0208<<14 | 0x20<<7 | 0x18,
	22093 - 19968: jis0212<<14 | 0x15<<7 | 0x24,
	22094 - 19968: jis0208<<14 | 0x32<<7 | 0x38,
	22095 - 19968: jis0212<<14 | 0x15<<7 | 0x25,
	22096 - 19968: jis0208<<14 | 0x32<<7 | 0x39,
	22100 - 19968: jis0212<<14 | 0x15<<7 | 0x26,
	22107 - 19968: jis0208<<14 | 0x12<<7 | 0x59,
	22110 - 19968: jis0212<<14 | 0x15<<7 | 0x27,
	22112 - 19968: jis0212<<14 | 0x15<<7 | 0x28,
	22113 - 19968: jis0212<<14 | 0x15<<7 | 0x29,
	22114 - 19968: jis0212<<14 | 0x15<<7 | 0x2A,
	22115 - 19968: jis0212<<14 | 0x15<<7 | 0x2B,
	22116 - 19968: jis0208<<14 | 0x32<<7 | 0x40,
	22118 - 19968: jis0212<<14 | 0x15<<7 | 0x2C,
	22120 - 19968: jis0208<<14 | 0x13<<7 | 0x4E,
	22121 - 19968: jis0212<<14 | 0x15<<7 | 0x2D,
	22122 - 19968: jis0208<<14 | 0x32<<7 | 0x43,
	22123 - 19968: jis0208<<14 | 0x32<<7 | 0x3F,
	22124 - 19968: jis0208<<14 | 0x32<<7 | 0x42,
	22125 - 19968: jis0212<<14 | 0x15<<7 | 0x2E,
	22127 - 19968: jis0212<<14 | 0x15<<7 | 0x2F,
	22129 - 19968: jis0212<<14 | 0x15<<7 | 0x30,
	22130 - 19968: jis0212<<14 | 0x15<<7 | 0x31,
	22132 - 19968: jis0208<<14 | 0x29<<7 | 0x0D,
	22133 - 19968: jis0212<<14 | 0x15<<7 | 0x32,
	22136 - 19968: jis0208<<14 | 0x25<<7 | 0x34,
	22138 - 19968: jis0208<<14 | 0x27<<7 | 0x17,
	22144 - 19968: jis0208<<14 | 0x32<<7 | 0x45,
	22148 - 19968: jis0212<<14 | 0x15<<7 | 0x33,
	22149 - 19968: jis0212<<14 | 0x15<<7 | 0x34,
	22150 - 19968: jis0208<<14 | 0x32<<7 | 0x44,
	22151 - 19968: jis0208<<14 | 0x12<<7 | 0x24,
	22152 - 19968: jis0212<<14 | 0x15<<7 | 0x35,
	22154 - 19968: jis0208<<14 | 0x32<<7 | 0x46,
	22155 - 19968: jis0212<<14 | 0x15<<7 | 0x36,
	22156 - 19968: jis0212<<14 | 0x15<<7 | 0x37,
	22159 - 19968: jis0208<<14 | 0x32<<7 | 0x49,
	22164 - 19968: jis0208<<14 | 0x32<<7 | 0x48,
	22165 - 19968: jis0212<<14 | 0x15<<7 | 0x38,
	22169 - 19968: jis0212<<14 | 0x15<<7 | 0x39,
	22170 - 19968: jis0212<<14 | 0x15<<7 | 0x3A,
	22173 - 19968: jis0212<<14 | 0x15<<7 | 0x3B,
	22174 - 19968: jis0212<<14 | 0x15<<7 | 0x3C,
	22175 - 19968: jis0212<<14 | 0x15<<7 | 0x3D,
	22176 - 19968: jis0208<<14 | 0x32<<7 | 0x47,
	22178 - 19968: jis0208<<14 | 0x26<<7 | 0x18,
	22181 - 19968: jis0208<<14 | 0x32<<7 | 0x4A,
	22182 - 19968: jis0212<<14 | 0x15<<7 | 0x3E,
	22183 - 19968: jis0212<<14 | 0x15<<7 | 0x3F,
	22184 - 19968: jis0212<<14 | 0x15<<7 | 0x40,
	22185 - 19968: jis0212<<14 | 0x15<<7 | 0x41,
	22187 - 19968: jis0212<<14 | 0x15<<7 | 0x42,
	22188 - 19968: jis0212<<14 | 0x15<<7 | 0x43,
	22189 - 19968: jis0212<<14 | 0x15<<7 | 0x44,
	22190 - 19968: jis0208<<14 | 0x32<<7 | 0x4B,
	22193 - 19968: jis0212<<14 | 0x15<<7 | 0x45,
	22195 - 19968: jis0212<<14 | 0x15<<7 | 0x46,
	22196 - 19968: jis0208<<14 | 0x32<<7 | 0x4D,
	22198 - 19968: jis0208<<14 | 0x32<<7 | 0x4C,
	22199 - 19968: jis0212<<14 | 0x15<<7 | 0x47,
	22204 - 19968: jis0208<<14 | 0x32<<7 | 0x4F,
	22206 - 19968: jis0212<<14 | 0x15<<7 | 0x48,
	22208 - 19968: jis0208<<14 | 0x32<<7 | 0x52,
	22209 - 19968: jis0208<<14 | 0x32<<7 | 0x50,
	22210 - 19968: jis0208<<14 | 0x32<<7 | 0x4E,
	22211 - 19968: jis0208<<14 | 0x32<<7 | 0x51,
	22213 - 19968: jis0212<<14 | 0x15<<7 | 0x49,
	22216 - 19968: jis0208<<14 | 0x32<<7 | 0x53,
	22217 - 19968: jis0212<<14 | 0x15<<7 | 0x4A,
	22218 - 19968: jis0212<<14 | 0x15<<7 | 0x4B,
	22219 - 19968: jis0212<<14 | 0x15<<7 | 0x4C,
	22220 - 19968: jis0212<<14 | 0x15<<7 | 0x4F,
	22221 - 19968: jis0212<<14 | 0x15<<7 | 0x50,
	22222 - 19968: jis0208<<14 | 0x32<<7 | 0x54,
	22223 - 19968: jis0212<<14 | 0x15<<7 | 0x4D,
	22224 - 19968: jis0212<<14 | 0x15<<7 | 0x4E,
	22225 - 19968: jis0208<<14 | 0x32<<7 | 0x55,
	22227 - 19968: jis0208<<14 | 0x32<<7 | 0x56,
	22231 - 19968: jis0208<<14 | 0x32<<7 | 0x57,
	22232 - 19968: jis0208<<14 | 0x30<<7 | 0x24,
	22233 - 19968: jis0212<<14 | 0x15<<7 | 0x51,
	22234 - 19968: jis0208<<14 | 0x1B<<7 | 0x5B,
	22235 - 19968: jis0208<<14 | 0x1A<<7 | 0x2C,
	22236 - 19968: jis0212<<14 | 0x15<<7 | 0x52,
	22237 - 19968: jis0212<<14 | 0x15<<7 | 0x53,
	22238 - 19968: jis0208<<14 | 0x11<<7 | 0x52,
	22239 - 19968: jis0212<<14 | 0x15<<7 | 0x54,
	22240 - 19968: jis0208<<14 | 0x0F<<7 | 0x57,
	22241 - 19968: jis0212<<14 | 0x15<<7 | 0x55,
	22243 - 19968: jis0208<<14 | 0x22<<7 | 0x23,
	22244 - 19968: jis0212<<14 | 0x15<<7 | 0x56,
	22245 - 19968: jis0212<<14 | 0x15<<7 | 0x57,
	22246 - 19968: jis0212<<14 | 0x15<<7 | 0x58,
	22247 - 19968: jis0212<<14 | 0x15<<7 | 0x59,
	22248 - 19968: jis0212<<14 | 0x15<<7 | 0x5A,
	22251 - 19968: jis0212<<14 | 0x15<<7 | 0x5C,
	22253 - 19968: jis0212<<14 | 0x15<<7 | 0x5D,
	22254 - 19968: jis0208<<14 | 0x32<<7 | 0x58,
	22256 - 19968: jis0208<<14 | 0x19<<7 | 0x03,
	22257 - 19968: jis0212<<14 | 0x15<<7 | 0x5B,
	22258 - 19968: jis0208<<14 | 0x0F<<7 | 0x2E,
	22259 - 19968: jis0208<<14 | 0x1E<<7 | 0x3D,
	22262 - 19968: jis0212<<14 | 0x16<<7 | 0x00,
	22263 - 19968: jis0212<<14 | 0x16<<7 | 0x01,
	22265 - 19968: jis0208<<14 | 0x32<<7 | 0x59,
	22266 - 19968: jis0208<<14 | 0x17<<7 | 0x26,
	22269 - 19968: jis0208<<14 | 0x18<<7 | 0x50,
	22271 - 19968: jis0208<<14 | 0x32<<7 | 0x5B,
	22272 - 19968: jis0208<<14 | 0x32<<7 | 0x5A,
	22273 - 19968: jis0212<<14 | 0x16<<7 | 0x02,
	22274 - 19968: jis0212<<14 | 0x16<<7 | 0x03,
	22275 - 19968: jis0208<<14 | 0x29<<7 | 0x3F,
	22276 - 19968: jis0208<<14 | 0x32<<7 | 0x5C,
	22279 - 19968: jis0212<<14 | 0x16<<7 | 0x04,
	22280 - 19968: jis0208<<14 | 0x33<<7 | 0x00,
	22281 - 19968: jis0208<<14 | 0x32<<7 | 0x5D,
	22282 - 19968: jis0212<<14 | 0x16<<7 | 0x05,
	22283 - 19968: jis0208<<14 | 0x33<<7 | 0x01,
	22284 - 19968: jis0212<<14 | 0x16<<7 | 0x06,
	22285 - 19968: jis0208<<14 | 0x33<<7 | 0x02,
	22287 - 19968: jis0208<<14 | 0x16<<7 | 0x56,
	22289 - 19968: jis0212<<14 | 0x16<<7 | 0x07,
	22290 - 19968: jis0208<<14 | 0x10<<7 | 0x3F,
	22291 - 19968: jis0208<<14 | 0x33<<7 | 0x03,
	22293 - 19968: jis0212<<14 | 0x16<<7 | 0x08,
	22294 - 19968: jis0208<<14 | 0x33<<7 | 0x05,
	22296 - 19968: jis0208<<14 | 0x33<<7 | 0x04,
	22298 - 19968: jis0212<<14 | 0x16<<7 | 0x09,
	22299 - 19968: jis0212<<14 | 0x16<<7 | 0x0A,
	22300 - 19968: jis0208<<14 | 0x33<<7 | 0x07,
	22301 - 19968: jis0212<<14 | 0x16<<7 | 0x0B,
	22303 - 19968: jis0208<<14 | 0x24<<7 | 0x39,
	22304 - 19968: jis0212<<14 | 0x16<<7 | 0x0C,
	22306 - 19968: jis0212<<14 | 0x16<<7 | 0x0D,
	22307 - 19968: jis0212<<14 | 0x16<<7 | 0x0E,
	22308 - 19968: jis0212<<14 | 0x16<<7 | 0x0F,
	22309 - 19968: jis0212<<14 | 0x16<<7 | 0x10,
	22310 - 19968: jis0208<<14 | 0x33<<7 | 0x08,
	22311 - 19968: jis0208<<14 | 0x0F<<7 | 0x14,
	22312 - 19968: jis0208<<14 | 0x19<<7 | 0x3E,
	22313 - 19968: jis0212<<14 | 0x16<<7 | 0x11,
	22314 - 19968: jis0212<<14 | 0x16<<7 | 0x12,
	22316 - 19968: jis0212<<14 | 0x16<<7 | 0x13,
	22317 - 19968: jis0208<<14 | 0x16<<7 | 0x1C,
	22318 - 19968: jis0212<<14 | 0x16<<7 | 0x14,
	22319 - 19968: jis0212<<14 | 0x16<<7 | 0x15,
	22320 - 19968: jis0208<<14 | 0x22<<7 | 0x2E,
	22323 - 19968: jis0212<<14 | 0x16<<7 | 0x16,
	22324 - 19968: jis0212<<14 | 0x16<<7 | 0x17,
	22327 - 19968: jis0208<<14 | 0x33<<7 | 0x09,
	22328 - 19968: jis0208<<14 | 0x33<<7 | 0x0A,
	22331 - 19968: jis0208<<14 | 0x33<<7 | 0x0C,
	22333 - 19968: jis0212<<14 | 0x16<<7 | 0x18,
	22334 - 19968: jis0212<<14 | 0x16<<7 | 0x19,
	22335 - 19968: jis0212<<14 | 0x16<<7 | 0x1A,
	22336 - 19968: jis0208<<14 | 0x33<<7 | 0x0D,
	22338 - 19968: jis0208<<14 | 0x19<<7 | 0x43,
	22341 - 19968: jis0212<<14 | 0x16<<7 | 0x1B,
	22342 - 19968: jis0212<<14 | 0x16<<7 | 0x1C,
	22343 - 19968: jis0208<<14 | 0x15<<7 | 0x30,
	22346 - 19968: jis0208<<14 | 0x2A<<7 | 0x16,
	22348 - 19968: jis0212<<14 | 0x16<<7 | 0x1D,
	22349 - 19968: jis0212<<14 | 0x16<<7 | 0x1E,
	22350 - 19968: jis0208<<14 | 0x33<<7 | 0x0B,
	22351 - 19968: jis0208<<14 | 0x33<<7 | 0x0E,
	22352 - 19968: jis0208<<14 | 0x19<<7 | 0x20,
	22353 - 19968: jis0208<<14 | 0x18<<7 | 0x02,
	22354 - 19968: jis0212<<14 | 0x16<<7 | 0x1F,
	22361 - 19968: jis0208<<14 | 0x58<<7 | 0x39,
	22369 - 19968: jis0208<<14 | 0x33<<7 | 0x12,
	22370 - 19968: jis0212<<14 | 0x16<<7 | 0x20,
	22372 - 19968: jis0208<<14 | 0x19<<7 | 0x04,
	22373 - 19968: jis0208<<14 | 0x58<<7 | 0x3A,
	22374 - 19968: jis0208<<14 | 0x22<<7 | 0x12,
	22375 - 19968: jis0212<<14 | 0x16<<7 | 0x22,
	22376 - 19968: jis0212<<14 | 0x16<<7 | 0x23,
	22377 - 19968: jis0208<<14 | 0x33<<7 | 0x0F,
	22378 - 19968: jis0208<<14 | 0x23<<7 | 0x39,
	22379 - 19968: jis0212<<14 | 0x16<<7 | 0x24,
	22381 - 19968: jis0212<<14 | 0x16<<7 | 0x25,
	22382 - 19968: jis0212<<14 | 0x16<<7 | 0x26,
	22383 - 19968: jis0212<<14 | 0x16<<7 | 0x27,
	22384 - 19968: jis0212<<14 | 0x16<<7 | 0x28,
	22385 - 19968: jis0212<<14 | 0x16<<7 | 0x29,
	22387 - 19968: jis0212<<14 | 0x16<<7 | 0x2A,
	22388 - 19968: jis0212<<14 | 0x16<<7 | 0x2B,
	22389 - 19968: jis0212<<14 | 0x16<<7 | 0x2C,
	22391 - 19968: jis0212<<14 | 0x16<<7 | 0x2D,
	22393 - 19968: jis0212<<14 | 0x16<<7 | 0x2E,
	22394 - 19968: jis0212<<14 | 0x16<<7 | 0x2F,
	22395 - 19968: jis0212<<14 | 0x16<<7 | 0x30,
	22396 - 19968: jis0212<<14 | 0x16<<7 | 0x31,
	22398 - 19968: jis0212<<14 | 0x16<<7 | 0x32,
	22399 - 19968: jis0208<<14 | 0x33<<7 | 0x13,
	22401 - 19968: jis0212<<14 | 0x16<<7 | 0x33,
	22402 - 19968: jis0208<<14 | 0x1E<<7 | 0x41,
	22403 - 19968: jis0212<<14 | 0x16<<7 | 0x34,
	22408 - 19968: jis0208<<14 | 0x33<<7 | 0x11,
	22409 - 19968: jis0208<<14 | 0x33<<7 | 0x14,
	22411 - 19968: jis0208<<14 | 0x16<<7 | 0x1E,
	22412 - 19968: jis0212<<14 | 0x16<<7 | 0x35,
	22419 - 19968: jis0208<<14 | 0x33<<7 | 0x15,
	22420 - 19968: jis0212<<14 | 0x16<<7 | 0x36,
	22421 - 19968: jis0212<<14 | 0x16<<7 | 0x3F,
	22423 - 19968: jis0212<<14 | 0x16<<7 | 0x37,
	22425 - 19968: jis0212<<14 | 0x16<<7 | 0x38,
	22426 - 19968: jis0212<<14 | 0x16<<7 | 0x39,
	22428 - 19968: jis0212<<14 | 0x16<<7 | 0x3A,
	22429 - 19968: jis0212<<14 | 0x16<<7 | 0x3B,
	22430 - 19968: jis0212<<14 | 0x16<<7 | 0x3C,
	22431 - 19968: jis0212<<14 | 0x16<<7 | 0x3D,
	22432 - 19968: jis0208<<14 | 0x33<<7 | 0x16,
	22433 - 19968: jis0212<<14 | 0x16<<7 | 0x3E,
	22434 - 19968: jis0208<<14 | 0x18<<7 | 0x03,
	22435 - 19968: jis0208<<14 | 0x12<<7 | 0x1F,
	22436 - 19968: jis0208<<14 | 0x33<<7 | 0x18,
	22439 - 19968: jis0212<<14 | 0x16<<7 | 0x40,
	22440 - 19968: jis0212<<14 | 0x16<<7 | 0x41,
	22441 - 19968: jis0212<<14 | 0x16<<7 | 0x42,
	22442 - 19968: jis0208<<14 | 0x33<<7 | 0x19,
	22444 - 19968: jis0208<<14 | 0x58<<7 | 0x3B,
	22448 - 19968: jis0208<<14 | 0x33<<7 | 0x1A,
	22451 - 19968: jis0208<<14 | 0x33<<7 | 0x17,
	22456 - 19968: jis0212<<14 | 0x16<<7 | 0x44,
	22461 - 19968: jis0212<<14 | 0x16<<7 | 0x45,
	22464 - 19968: jis0208<<14 | 0x33<<7 | 0x10,
	22467 - 19968: jis0208<<14 | 0x33<<7 | 0x1B,
	22470 - 19968: jis0208<<14 | 0x33<<7 | 0x1C,
	22471 - 19968: jis0208<<14 | 0x58<<7 | 0x3D,
	22472 - 19968: jis0208<<14 | 0x58<<7 | 0x3C,
	22475 - 19968: jis0208<<14 | 0x2A<<7 | 0x43,
	22476 - 19968: jis0212<<14 | 0x16<<7 | 0x48,
	22478 - 19968: jis0208<<14 | 0x1D<<7 | 0x4A,
	22479 - 19968: jis0212<<14 | 0x16<<7 | 0x49,
	22482 - 19968: jis0208<<14 | 0x33<<7 | 0x1E,
	22483 - 19968: jis0208<<14 | 0x33<<7 | 0x1F,
	22484 - 19968: jis0208<<14 | 0x33<<7 | 0x1D,
	22485 - 19968: jis0212<<14 | 0x16<<7 | 0x4A,
	22486 - 19968: jis0208<<14 | 0x33<<7 | 0x21,
	22492 - 19968: jis0208<<14 | 0x26<<7 | 0x17,
	22493 - 19968: jis0212<<14 | 0x16<<7 | 0x4B,
	22494 - 19968: jis0212<<14 | 0x16<<7 | 0x4C,
	22495 - 19968: jis0208<<14 | 0x0F<<7 | 0x47,
	22496 - 19968: jis0208<<14 | 0x28<<7 | 0x35,
	22497 - 19968: jis0212<<14 | 0x16<<7 | 0x5D,
	22499 - 19968: jis0208<<14 | 0x33<<7 | 0x22,
	22500 - 19968: jis0212<<14 | 0x16<<7 | 0x4D,
	22502 - 19968: jis0212<<14 | 0x16<<7 | 0x4E,
	22503 - 19968: jis0212<<14 | 0x16<<7 | 0x4F,
	22505 - 19968: jis0212<<14 | 0x16<<7 | 0x50,
	22509 - 19968: jis0212<<14 | 0x16<<7 | 0x51,
	22512 - 19968: jis0212<<14 | 0x16<<7 | 0x52,
	22516 - 19968: jis0208<<14 | 0x1D<<7 | 0x5C,
	22517 - 19968: jis0212<<14 | 0x16<<7 | 0x53,
	22518 - 19968: jis0212<<14 | 0x16<<7 | 0x54,
	22519 - 19968: jis0208<<14 | 0x1B<<7 | 0x18,
	22520 - 19968: jis0212<<14 | 0x16<<7 | 0x55,
	22521 - 19968: jis0208<<14 | 0x26<<7 | 0x3C,
	22522 - 19968: jis0208<<14 | 0x13<<7 | 0x4F,
	22524 - 19968: jis0208<<14 | 0x19<<7 | 0x4A,
	22525 - 19968: jis0212<<14 | 0x16<<7 | 0x56,
	22526 - 19968: jis0212<<14 | 0x16<<7 | 0x57,
	22527 - 19968: jis0212<<14 | 0x16<<7 | 0x58,
	22528 - 19968: jis0208<<14 | 0x2A<<7 | 0x38,
	22530 - 19968: jis0208<<14 | 0x25<<7 | 0x11,
	22531 - 19968: jis0212<<14 | 0x16<<7 | 0x59,
	22532 - 19968: jis0212<<14 | 0x16<<7 | 0x5A,
	22533 - 19968: jis0208<<14 | 0x16<<7 | 0x57,
	22534 - 19968: jis0208<<14 | 0x21<<7 | 0x2E,
	22536 - 19968: jis0212<<14 | 0x16<<7 | 0x5B,
	22537 - 19968: jis0212<<14 | 0x16<<7 | 0x5C,
	22538 - 19968: jis0208<<14 | 0x33<<7 | 0x20,
	22539 - 19968: jis0208<<14 | 0x33<<7 | 0x23,
	22540 - 19968: jis0212<<14 | 0x17<<7 | 0x00,
	22541 - 19968: jis0212<<14 | 0x17<<7 | 0x01,
	22549 - 19968: jis0208<<14 | 0x21<<7 | 0x23,
	22553 - 19968: jis0208<<14 | 0x33<<7 | 0x24,
	22555 - 19968: jis0212<<14 | 0x17<<7 | 0x02,
	22557 - 19968: jis0208<<14 | 0x33<<7 | 0x25,
	22558 - 19968: jis0212<<14 | 0x17<<7 | 0x03,
	22559 - 19968: jis0212<<14 | 0x17<<7 | 0x04,
	22560 - 19968: jis0212<<14 | 0x17<<7 | 0x05,
	22561 - 19968: jis0208<<14 | 0x33<<7 | 0x27,
	22564 - 19968: jis0208<<14 | 0x23<<7 | 0x48,
	22566 - 19968: jis0212<<14 | 0x17<<7 | 0x06,
	22567 - 19968: jis0212<<14 | 0x17<<7 | 0x07,
	22570 - 19968: jis0208<<14 | 0x13<<7 | 0x0D,
	22573 - 19968: jis0212<<14 | 0x17<<7 | 0x08,
	22575 - 19968: jis0208<<14 | 0x53<<7 | 0x00,
	22576 - 19968: jis0208<<14 | 0x10<<7 | 0x40,
	22577 - 19968: jis0208<<14 | 0x29<<7 | 0x52,
	22578 - 19968: jis0212<<14 | 0x17<<7 | 0x09,
	22580 - 19968: jis0208<<14 | 0x1D<<7 | 0x4B,
	22581 - 19968: jis0208<<14 | 0x24<<7 | 0x27,
	22585 - 19968: jis0212<<14 | 0x17<<7 | 0x0A,
	22586 - 19968: jis0208<<14 | 0x19<<7 | 0x45,
	22589 - 19968: jis0208<<14 | 0x33<<7 | 0x2D,
	22591 - 19968: jis0212<<14 | 0x17<<7 | 0x0B,
	22592 - 19968: jis0208<<14 | 0x29<<7 | 0x1C,
	22593 - 19968: jis0208<<14 | 0x2D<<7 | 0x3C,
	22601 - 19968: jis0212<<14 | 0x17<<7 | 0x0C,
	22602 - 19968: jis0208<<14 | 0x11<<7 | 0x53,
	22603 - 19968: jis0208<<14 | 0x33<<7 | 0x29,
	22604 - 19968: jis0212<<14 | 0x17<<7 | 0x0D,
	22605 - 19968: jis0212<<14 | 0x17<<7 | 0x0E,
	22607 - 19968: jis0212<<14 | 0x17<<7 | 0x0F,
	22608 - 19968: jis0212<<14 | 0x17<<7 | 0x10,
	22609 - 19968: jis0208<<14 | 0x20<<7 | 0x19,
	22610 - 19968: jis0208<<14 | 0x33<<7 | 0x2C,
	22612 - 19968: jis0208<<14 | 0x24<<7 | 0x42,
	22613 - 19968: jis0212<<14 | 0x17<<7 | 0x11,
	22615 - 19968: jis0208<<14 | 0x24<<7 | 0x28,
	22616 - 19968: jis0208<<14 | 0x24<<7 | 0x43,
	22617 - 19968: jis0208<<14 | 0x27<<7 | 0x18,
	22618 - 19968: jis0208<<14 | 0x23<<7 | 0x2C,
	22622 - 19968: jis0208<<14 | 0x19<<7 | 0x28,
	22623 - 19968: jis0212<<14 | 0x17<<7 | 0x12,
	22625 - 19968: jis0212<<14 | 0x17<<7 | 0x13,
	22626 - 19968: jis0208<<14 | 0x33<<7 | 0x28,
	22628 - 19968: jis0212<<14 | 0x17<<7 | 0x14,
	22631 - 19968: jis0212<<14 | 0x17<<7 | 0x15,
	22632 - 19968: jis0212<<14 | 0x17<<7 | 0x16,
	22633 - 19968: jis0208<<14 | 0x10<<7 | 0x55,
	22635 - 19968: jis0208<<14 | 0x24<<7 | 0x15,
	22640 - 19968: jis0208<<14 | 0x33<<7 | 0x2A,
	22642 - 19968: jis0208<<14 | 0x33<<7 | 0x26,
	22645 - 19968: jis0208<<14 | 0x1E<<7 | 0x2F,
	22648 - 19968: jis0212<<14 | 0x17<<7 | 0x17,
	22649 - 19968: jis0208<<14 | 0x33<<7 | 0x2E,
	22652 - 19968: jis0212<<14 | 0x17<<7 | 0x18,
	22654 - 19968: jis0208<<14 | 0x1C<<7 | 0x2D,
	22655 - 19968: jis0212<<14 | 0x17<<7 | 0x19,
	22656 - 19968: jis0212<<14 | 0x17<<7 | 0x1A,
	22657 - 19968: jis0212<<14 | 0x17<<7 | 0x1B,
	22659 - 19968: jis0208<<14 | 0x15<<7 | 0x0C,
	22661 - 19968: jis0208<<14 | 0x33<<7 | 0x2F,
	22663 - 19968: jis0212<<14 | 0x17<<7 | 0x1C,
	22664 - 19968: jis0212<<14 | 0x17<<7 | 0x1D,
	22665 - 19968: jis0212<<14 | 0x17<<7 | 0x1E,
	22666 - 19968: jis0212<<14 | 0x17<<7 | 0x1F,
	22668 - 19968: jis0212<<14 | 0x17<<7 | 0x20,
	22669 - 19968: jis0212<<14 | 0x17<<7 | 0x21,
	22671 - 19968: jis0212<<14 | 0x17<<7 | 0x22,
	22672 - 19968: jis0212<<14 | 0x17<<7 | 0x23,
	22675 - 19968: jis0208<<14 | 0x29<<7 | 0x47,
	22676 - 19968: jis0212<<14 | 0x17<<7 | 0x24,
	22678 - 19968: jis0212<<14 | 0x17<<7 | 0x25,
	22679 - 19968: jis0208<<14 | 0x20<<7 | 0x5C,
	22684 - 19968: jis0208<<14 | 0x23<<7 | 0x25,
	22685 - 19968: jis0212<<14 | 0x17<<7 | 0x26,
	22686 - 19968: jis0208<<14 | 0x58<<7 | 0x40,
	22687 - 19968: jis0208<<14 | 0x33<<7 | 0x31,
	22688 - 19968: jis0212<<14 | 0x17<<7 | 0x27,
	22689 - 19968: jis0212<<14 | 0x17<<7 | 0x28,
	22690 - 19968: jis0212<<14 | 0x17<<7 | 0x29,
	22694 - 19968: jis0212<<14 | 0x17<<7 | 0x2A,
	22696 - 19968: jis0208<<14 | 0x2A<<7 | 0x2E,
	22697 - 19968: jis0212<<14 | 0x17<<7 | 0x2B,
	22699 - 19968: jis0208<<14 | 0x33<<7 | 0x32,
	22702 - 19968: jis0208<<14 | 0x33<<7 | 0x37,
	22705 - 19968: jis0212<<14 | 0x17<<7 | 0x2C,
	22706 - 19968: jis0208<<14 | 0x58<<7 | 0x41,
	22707 - 19968: jis0208<<14 | 0x29<<7 | 0x0E,
	22712 - 19968: jis0208<<14 | 0x33<<7 | 0x36,
	22713 - 19968: jis0208<<14 | 0x33<<7 | 0x30,
	22714 - 19968: jis0208<<14 | 0x33<<7 | 0x33,
	22715 - 19968: jis0208<<14 | 0x33<<7 | 0x35,
	22716 - 19968: jis0212<<14 | 0x17<<7 | 0x2F,
	22718 - 19968: jis0208<<14 | 0x19<<7 | 0x05,
	22721 - 19968: jis0208<<14 | 0x29<<7 | 0x28,
	22722 - 19968: jis0212<<14 | 0x17<<7 | 0x30,
	22724 - 19968: jis0212<<14 | 0x17<<7 | 0x2E,
	22725 - 19968: jis0208<<14 | 0x33<<7 | 0x38,
	22727 - 19968: jis0208<<14 | 0x22<<7 | 0x24,
	22728 - 19968: jis0212<<14 | 0x17<<7 | 0x31,
	22730 - 19968: jis0208<<14 | 0x11<<7 | 0x54,
	22732 - 19968: jis0208<<14 | 0x1D<<7 | 0x4C,
	22733 - 19968: jis0212<<14 | 0x17<<7 | 0x32,
	22734 - 19968: jis0212<<14 | 0x17<<7 | 0x33,
	22736 - 19968: jis0212<<14 | 0x17<<7 | 0x34,
	22737 - 19968: jis0208<<14 | 0x33<<7 | 0x3A,
	22738 - 19968: jis0212<<14 | 0x17<<7 | 0x35,
	22739 - 19968: jis0208<<14 | 0x33<<7 | 0x39,
	22740 - 19968: jis0212<<14 | 0x17<<7 | 0x36,
	22741 - 19968: jis0208<<14 | 0x18<<7 | 0x47,
	22742 - 19968: jis0212<<14 | 0x17<<7 | 0x37,
	22743 - 19968: jis0208<<14 | 0x33<<7 | 0x3B,
	22744 - 19968: jis0208<<14 | 0x33<<7 | 0x3D,
	22745 - 19968: jis0208<<14 | 0x33<<7 | 0x3C,
	22746 - 19968: jis0212<<14 | 0x17<<7 | 0x38,
	22748 - 19968: jis0208<<14 | 0x33<<7 | 0x3F,
	22749 - 19968: jis0212<<14 | 0x17<<7 | 0x39,
	22750 - 19968: jis0208<<14 | 0x33<<7 | 0x34,
	22751 - 19968: jis0208<<14 | 0x33<<7 | 0x41,
	22753 - 19968: jis0212<<14 | 0x17<<7 | 0x3A,
	22754 - 19968: jis0212<<14 | 0x17<<7 | 0x3B,
	22756 - 19968: jis0208<<14 | 0x33<<7 | 0x40,
	22757 - 19968: jis0208<<14 | 0x33<<7 | 0x3E,
	22761 - 19968: jis0212<<14 | 0x17<<7 | 0x3C,
	22763 - 19968: jis0208<<14 | 0x1A<<7 | 0x2D,
	22764 - 19968: jis0208<<14 | 0x1E<<7 | 0x30,
	22766 - 19968: jis0208<<14 | 0x20<<7 | 0x33,
	22767 - 19968: jis0208<<14 | 0x33<<7 | 0x42,
	22768 - 19968: jis0208<<14 | 0x1F<<7 | 0x1B,
	22769 - 19968: jis0208<<14 | 0x0F<<7 | 0x4C,
	22770 - 19968: jis0208<<14 | 0x26<<7 | 0x43,
	22771 - 19968: jis0212<<14 | 0x17<<7 | 0x3D,
	22775 - 19968: jis0208<<14 | 0x23<<7 | 0x3A,
	22777 - 19968: jis0208<<14 | 0x33<<7 | 0x44,
	22778 - 19968: jis0208<<14 | 0x33<<7 | 0x43,
	22779 - 19968: jis0208<<14 | 0x33<<7 | 0x45,
	22780 - 19968: jis0208<<14 | 0x33<<7 | 0x46,
	22781 - 19968: jis0208<<14 | 0x33<<7 | 0x47,
	22786 - 19968: jis0208<<14 | 0x33<<7 | 0x48,
	22789 - 19968: jis0212<<14 | 0x17<<7 | 0x3E,
	22790 - 19968: jis0212<<14 | 0x17<<7 | 0x3F,
	22793 - 19968: jis0208<<14 | 0x29<<7 | 0x30,
	22794 - 19968: jis0208<<14 | 0x33<<7 | 0x49,
	22795 - 19968: jis0208<<14 | 0x58<<7 | 0x42,
	22796 - 19968: jis0212<<14 | 0x17<<7 | 0x41,
	22799 - 19968: jis0208<<14 | 0x11<<7 | 0x25,
	22800 - 19968: jis0208<<14 | 0x33<<7 | 0x4A,
	22802 - 19968: jis0212<<14 | 0x17<<7 | 0x42,
	22803 - 19968: jis0212<<14 | 0x17<<7 | 0x43,
	22804 - 19968: jis0212<<14 | 0x17<<7 | 0x44,
	22805 - 19968: jis0208<<14 | 0x2C<<7 | 0x1B,
	22806 - 19968: jis0208<<14 | 0x12<<7 | 0x0F,
	22808 - 19968: jis0208<<14 | 0x31<<7 | 0x28,
	22809 - 19968: jis0208<<14 | 0x1C<<7 | 0x27,
	22810 - 19968: jis0208<<14 | 0x21<<7 | 0x1E,
	22811 - 19968: jis0208<<14 | 0x33<<7 | 0x4B,
	22812 - 19968: jis0208<<14 | 0x2B<<7 | 0x4A,
	22813 - 19968: jis0212<<14 | 0x17<<7 | 0x46,
	22817 - 19968: jis0212<<14 | 0x17<<7 | 0x47,
	22818 - 19968: jis0208<<14 | 0x2B<<7 | 0x13,
	22819 - 19968: jis0212<<14 | 0x17<<7 | 0x48,
	22820 - 19968: jis0212<<14 | 0x17<<7 | 0x49,
	22821 - 19968: jis0208<<14 | 0x33<<7 | 0x4D,
	22823 - 19968: jis0208<<14 | 0x21<<7 | 0x46,
	22824 - 19968: jis0212<<14 | 0x17<<7 | 0x4A,
	22825 - 19968: jis0208<<14 | 0x24<<7 | 0x16,
	22826 - 19968: jis0208<<14 | 0x21<<7 | 0x1F,
	22827 - 19968: jis0208<<14 | 0x28<<7 | 0x36,
	22828 - 19968: jis0208<<14 | 0x33<<7 | 0x4E,
	22829 - 19968: jis0208<<14 | 0x33<<7 | 0x4F,
	22830 - 19968: jis0208<<14 | 0x10<<7 | 0x5A,
	22831 - 19968: jis0212<<14 | 0x17<<7 | 0x4B,
	22832 - 19968: jis0212<<14 | 0x17<<7 | 0x4C,
	22833 - 19968: jis0208<<14 | 0x1B<<7 | 0x19,
	22834 - 19968: jis0208<<14 | 0x33<<7 | 0x50,
	22835 - 19968: jis0212<<14 | 0x17<<7 | 0x4D,
	22837 - 19968: jis0212<<14 | 0x17<<7 | 0x4E,
	22838 - 19968: jis0212<<14 | 0x17<<7 | 0x4F,
	22839 - 19968: jis0208<<14 | 0x0F<<7 | 0x2F,
	22840 - 19968: jis0208<<14 | 0x33<<7 | 0x51,
	22846 - 19968: jis0208<<14 | 0x33<<7 | 0x52,
	22847 - 19968: jis0212<<14 | 0x17<<7 | 0x50,
	22851 - 19968: jis0212<<14 | 0x17<<7 | 0x51,
	22852 - 19968: jis0208<<14 | 0x10<<7 | 0x41,
	22854 - 19968: jis0212<<14 | 0x17<<7 | 0x52,
	22855 - 19968: jis0208<<14 | 0x13<<7 | 0x50,
	22856 - 19968: jis0208<<14 | 0x25<<7 | 0x3F,
	22857 - 19968: jis0208<<14 | 0x29<<7 | 0x53,
	22862 - 19968: jis0208<<14 | 0x33<<7 | 0x56,
	22863 - 19968: jis0208<<14 | 0x20<<7 | 0x34,
	22864 - 19968: jis0208<<14 | 0x33<<7 | 0x55,
	22865 - 19968: jis0208<<14 | 0x16<<7 | 0x1F,
	22866 - 19968: jis0212<<14 | 0x17<<7 | 0x53,
	22867 - 19968: jis0208<<14 | 0x58<<7 | 0x43,
	22868 - 19968: jis0208<<14 | 0x2A<<7 | 0x3A,
	22869 - 19968: jis0208<<14 | 0x33<<7 | 0x54,
	22871 - 19968: jis0208<<14 | 0x24<<7 | 0x44,
	22872 - 19968: jis0208<<14 | 0x33<<7 | 0x58,
	22873 - 19968: jis0212<<14 | 0x17<<7 | 0x55,
	22874 - 19968: jis0208<<14 | 0x33<<7 | 0x57,
	22875 - 19968: jis0208<<14 | 0x58<<7 | 0x44,
	22877 - 19968: jis0208<<14 | 0x58<<7 | 0x45,
	22878 - 19968: jis0212<<14 | 0x17<<7 | 0x58,
	22879 - 19968: jis0212<<14 | 0x17<<7 | 0x59,
	22880 - 19968: jis0208<<14 | 0x33<<7 | 0x5A,
	22881 - 19968: jis0212<<14 | 0x17<<7 | 0x5A,
	22882 - 19968: jis0208<<14 | 0x33<<7 | 0x59,
	22883 - 19968: jis0208<<14 | 0x58<<7 | 0x46,
	22885 - 19968: jis0208<<14 | 0x10<<7 | 0x5B,
	22887 - 19968: jis0208<<14 | 0x33<<7 | 0x5B,
	22888 - 19968: jis0208<<14 | 0x1D<<7 | 0x08,
	22889 - 19968: jis0208<<14 | 0x33<<7 | 0x5D,
	22890 - 19968: jis0208<<14 | 0x22<<7 | 0x04,
	22891 - 19968: jis0212<<14 | 0x17<<7 | 0x5C,
	22892 - 19968: jis0208<<14 | 0x33<<7 | 0x5C,
	22893 - 19968: jis0212<<14 | 0x17<<7 | 0x5D,
	22894 - 19968: jis0208<<14 | 0x29<<7 | 0x12,
	22895 - 19968: jis0212<<14 | 0x18<<7 | 0x00,
	22898 - 19968: jis0212<<14 | 0x18<<7 | 0x01,
	22899 - 19968: jis0208<<14 | 0x1C<<7 | 0x56,
	22900 - 19968: jis0208<<14 | 0x24<<7 | 0x3A,
	22901 - 19968: jis0212<<14 | 0x18<<7 | 0x02,
	22902 - 19968: jis0212<<14 | 0x18<<7 | 0x03,
	22904 - 19968: jis0208<<14 | 0x34<<7 | 0x00,
	22905 - 19968: jis0212<<14 | 0x18<<7 | 0x04,
	22907 - 19968: jis0212<<14 | 0x18<<7 | 0x05,
	22908 - 19968: jis0212<<14 | 0x18<<7 | 0x06,
	22909 - 19968: jis0208<<14 | 0x18<<7 | 0x04,
	22913 - 19968: jis0208<<14 | 0x34<<7 | 0x01,
	22914 - 19968: jis0208<<14 | 0x26<<7 | 0x00,
	22915 - 19968: jis0208<<14 | 0x27<<7 | 0x3D,
	22916 - 19968: jis0208<<14 | 0x2B<<7 | 0x30,
	22922 - 19968: jis0208<<14 | 0x26<<7 | 0x04,
	22923 - 19968: jis0212<<14 | 0x18<<7 | 0x07,
	22924 - 19968: jis0212<<14 | 0x18<<7 | 0x08,
	22925 - 19968: jis0208<<14 | 0x34<<7 | 0x0A,
	22926 - 19968: jis0212<<14 | 0x18<<7 | 0x09,
	22930 - 19968: jis0212<<14 | 0x18<<7 | 0x0A,
	22931 - 19968: jis0208<<14 | 0x14<<7 | 0x17,
	22933 - 19968: jis0212<<14 | 0x18<<7 | 0x0B,
	22934 - 19968: jis0208<<14 | 0x2C<<7 | 0x24,
	22935 - 19968: jis0212<<14 | 0x18<<7 | 0x0C,
	22937 - 19968: jis0208<<14 | 0x2B<<7 | 0x0E,
	22939 - 19968: jis0208<<14 | 0x35<<7 | 0x0B,
	22941 - 19968: jis0208<<14 | 0x34<<7 | 0x02,
	22943 - 19968: jis0212<<14 | 0x18<<7 | 0x0D,
	22947 - 19968: jis0208<<14 | 0x34<<7 | 0x05,
	22948 - 19968: jis0208<<14 | 0x58<<7 | 0x47,
	22949 - 19968: jis0208<<14 | 0x21<<7 | 0x24,
	22951 - 19968: jis0212<<14 | 0x18<<7 | 0x0F,
	22952 - 19968: jis0208<<14 | 0x2A<<7 | 0x17,
	22956 - 19968: jis0208<<14 | 0x24<<7 | 0x29,
	22957 - 19968: jis0212<<14 | 0x18<<7 | 0x10,
	22958 - 19968: jis0212<<14 | 0x18<<7 | 0x11,
	22959 - 19968: jis0212<<14 | 0x18<<7 | 0x12,
	22960 - 19968: jis0212<<14 | 0x18<<7 | 0x13,
	22962 - 19968: jis0208<<14 | 0x34<<7 | 0x06,
	22963 - 19968: jis0212<<14 | 0x18<<7 | 0x14,
	22967 - 19968: jis0212<<14 | 0x18<<7 | 0x15,
	22969 - 19968: jis0208<<14 | 0x2A<<7 | 0x44,
	22970 - 19968: jis0208<<14 | 0x58<<7 | 0x48,
	22971 - 19968: jis0208<<14 | 0x19<<7 | 0x29,
	22972 - 19968: jis0212<<14 | 0x18<<7 | 0x17,
	22974 - 19968: jis0208<<14 | 0x1D<<7 | 0x09,
	22977 - 19968: jis0212<<14 | 0x18<<7 | 0x18,
	22979 - 19968: jis0212<<14 | 0x18<<7 | 0x19,
	22980 - 19968: jis0212<<14 | 0x18<<7 | 0x1A,
	22982 - 19968: jis0208<<14 | 0x34<<7 | 0x07,
	22984 - 19968: jis0212<<14 | 0x18<<7 | 0x1B,
	22985 - 19968: jis0208<<14 | 0x1A<<7 | 0x2F,
	22986 - 19968: jis0212<<14 | 0x18<<7 | 0x1C,
	22987 - 19968: jis0208<<14 | 0x1A<<7 | 0x2E,
	22989 - 19968: jis0212<<14 | 0x18<<7 | 0x1D,
	22992 - 19968: jis0208<<14 | 0x0F<<7 | 0x18,
	22993 - 19968: jis0208<<14 | 0x17<<7 | 0x27,
	22994 - 19968: jis0212<<14 | 0x18<<7 | 0x1E,
	22995 - 19968: jis0208<<14 | 0x1F<<7 | 0x0A,
	22996 - 19968: jis0208<<14 | 0x0F<<7 | 0x30,
	23001 - 19968: jis0208<<14 | 0x34<<7 | 0x0B,
	23002 - 19968: jis0208<<14 | 0x34<<7 | 0x0C,
	23004 - 19968: jis0208<<14 | 0x34<<7 | 0x09,
	23005 - 19968: jis0212<<14 | 0x18<<7 | 0x1F,
	23006 - 19968: jis0212<<14 | 0x18<<7 | 0x20,
	23007 - 19968: jis0212<<14 | 0x18<<7 | 0x21,
	23011 - 19968: jis0212<<14 | 0x18<<7 | 0x22,
	23012 - 19968: jis0212<<14 | 0x18<<7 | 0x23,
	23013 - 19968: jis0208<<14 | 0x10<<7 | 0x17,
	23014 - 19968: jis0208<<14 | 0x13<<7 | 0x0E,
	23015 - 19968: jis0212<<14 | 0x18<<7 | 0x24,
	23016 - 19968: jis0208<<14 | 0x34<<7 | 0x08,
	23018 - 19968: jis0208<<14 | 0x2B<<7 | 0x24,
	23019 - 19968: jis0208<<14 | 0x28<<7 | 0x10,
	23022 - 19968: jis0212<<14 | 0x18<<7 | 0x25,
	23023 - 19968: jis0212<<14 | 0x18<<7 | 0x26,
	23025 - 19968: jis0212<<14 | 0x18<<7 | 0x27,
	23026 - 19968: jis0212<<14 | 0x18<<7 | 0x28,
	23028 - 19968: jis0212<<14 | 0x18<<7 | 0x29,
	23030 - 19968: jis0208<<14 | 0x0F<<7 | 0x07,
	23031 - 19968: jis0212<<14 | 0x18<<7 | 0x2A,
	23035 - 19968: jis0208<<14 | 0x0F<<7 | 0x58,
	23039 - 19968: jis0208<<14 | 0x1A<<7 | 0x30,
	23040 - 19968: jis0212<<14 | 0x18<<7 | 0x2B,
	23041 - 19968: jis0208<<14 | 0x0F<<7 | 0x31,
	23043 - 19968: jis0208<<14 | 0x0F<<7 | 0x02,
	23044 - 19968: jis0212<<14 | 0x18<<7 | 0x2C,
	23049 - 19968: jis0208<<14 | 0x34<<7 | 0x11,
	23052 - 19968: jis0212<<14 | 0x18<<7 | 0x2D,
	23053 - 19968: jis0212<<14 | 0x18<<7 | 0x2E,
	23054 - 19968: jis0212<<14 | 0x18<<7 | 0x2F,
	23057 - 19968: jis0208<<14 | 0x34<<7 | 0x0F,
	23058 - 19968: jis0212<<14 | 0x18<<7 | 0x30,
	23059 - 19968: jis0212<<14 | 0x18<<7 | 0x31,
	23064 - 19968: jis0208<<14 | 0x2B<<7 | 0x1B,
	23066 - 19968: jis0208<<14 | 0x34<<7 | 0x12,
	23068 - 19968: jis0208<<14 | 0x34<<7 | 0x10,
	23070 - 19968: jis0212<<14 | 0x18<<7 | 0x32,
	23071 - 19968: jis0208<<14 | 0x34<<7 | 0x0E,
	23072 - 19968: jis0208<<14 | 0x1E<<7 | 0x10,
	23075 - 19968: jis0212<<14 | 0x18<<7 | 0x33,
	23076 - 19968: jis0212<<14 | 0x18<<7 | 0x34,
	23077 - 19968: jis0208<<14 | 0x34<<7 | 0x0D,
	23079 - 19968: jis0212<<14 | 0x18<<7 | 0x35,
	23080 - 19968: jis0212<<14 | 0x18<<7 | 0x36,
	23081 - 19968: jis0208<<14 | 0x29<<7 | 0x39,
	23082 - 19968: jis0212<<14 | 0x18<<7 | 0x37,
	23085 - 19968: jis0212<<14 | 0x18<<7 | 0x38,
	23087 - 19968: jis0208<<14 | 0x17<<7 | 0x43,
	23088 - 19968: jis0212<<14 | 0x18<<7 | 0x39,
	23093 - 19968: jis0208<<14 | 0x34<<7 | 0x16,
	23094 - 19968: jis0208<<14 | 0x34<<7 | 0x17,
	23100 - 19968: jis0208<<14 | 0x1D<<7 | 0x0A,
	23104 - 19968: jis0208<<14 | 0x34<<7 | 0x13,
	23105 - 19968: jis0208<<14 | 0x2E<<7 | 0x0B,
	23108 - 19968: jis0212<<14 | 0x18<<7 | 0x3A,
	23109 - 19968: jis0212<<14 | 0x18<<7 | 0x3B,
	23110 - 19968: jis0208<<14 | 0x26<<7 | 0x2B,
	23111 - 19968: jis0212<<14 | 0x18<<7 | 0x3C,
	23112 - 19968: jis0212<<14 | 0x18<<7 | 0x3D,
	23113 - 19968: jis0208<<14 | 0x34<<7 | 0x15,
	23116 - 19968: jis0212<<14 | 0x18<<7 | 0x3E,
	23120 - 19968: jis0212<<14 | 0x18<<7 | 0x3F,
	23125 - 19968: jis0212<<14 | 0x18<<7 | 0x40,
	23130 - 19968: jis0208<<14 | 0x19<<7 | 0x06,
	23134 - 19968: jis0212<<14 | 0x18<<7 | 0x41,
	23138 - 19968: jis0208<<14 | 0x34<<7 | 0x18,
	23139 - 19968: jis0212<<14 | 0x18<<7 | 0x42,
	23141 - 19968: jis0212<<14 | 0x18<<7 | 0x43,
	23142 - 19968: jis0208<<14 | 0x28<<7 | 0x37,
	23143 - 19968: jis0212<<14 | 0x18<<7 | 0x44,
	23146 - 19968: jis0208<<14 | 0x34<<7 | 0x19,
	23148 - 19968: jis0208<<14 | 0x34<<7 | 0x14,
	23149 - 19968: jis0212<<14 | 0x18<<7 | 0x45,
	23159 - 19968: jis0212<<14 | 0x18<<7 | 0x46,
	23162 - 19968: jis0212<<14 | 0x18<<7 | 0x47,
	23163 - 19968: jis0212<<14 | 0x18<<7 | 0x48,
	23166 - 19968: jis0212<<14 | 0x18<<7 | 0x49,
	23167 - 19968: jis0208<<14 | 0x2B<<7 | 0x1A,
	23179 - 19968: jis0212<<14 | 0x18<<7 | 0x4A,
	23184 - 19968: jis0212<<14 | 0x18<<7 | 0x4B,
	23186 - 19968: jis0208<<14 | 0x26<<7 | 0x3D,
	23187 - 19968: jis0212<<14 | 0x18<<7 | 0x4C,
	23190 - 19968: jis0212<<14 | 0x18<<7 | 0x4D,
	23193 - 19968: jis0212<<14 | 0x18<<7 | 0x4E,
	23194 - 19968: jis0208<<14 | 0x34<<7 | 0x1A,
	23195 - 19968: jis0208<<14 | 0x28<<7 | 0x11,
	23196 - 19968: jis0212<<14 | 0x18<<7 | 0x4F,
	23198 - 19968: jis0212<<14 | 0x18<<7 | 0x50,
	23199 - 19968: jis0212<<14 | 0x18<<7 | 0x51,
	23200 - 19968: jis0212<<14 | 0x18<<7 | 0x52,
	23202 - 19968: jis0212<<14 | 0x18<<7 | 0x53,
	23207 - 19968: jis0212<<14 | 0x18<<7 | 0x54,
	23212 - 19968: jis0212<<14 | 0x18<<7 | 0x55,
	23217 - 19968: jis0212<<14 | 0x18<<7 | 0x56,
	23218 - 19968: jis0212<<14 | 0x18<<7 | 0x57,
	23219 - 19968: jis0212<<14 | 0x18<<7 | 0x58,
	23221 - 19968: jis0212<<14 | 0x18<<7 | 0x59,
	23224 - 19968: jis0212<<14 | 0x18<<7 | 0x5A,
	23226 - 19968: jis0212<<14 | 0x18<<7 | 0x5B,
	23227 - 19968: jis0212<<14 | 0x18<<7 | 0x5C,
	23228 - 19968: jis0208<<14 | 0x34<<7 | 0x1B,
	23229 - 19968: jis0208<<14 | 0x34<<7 | 0x1F,
	23230 - 19968: jis0208<<14 | 0x34<<7 | 0x1C,
	23231 - 19968: jis0212<<14 | 0x18<<7 | 0x5D,
	23233 - 19968: jis0208<<14 | 0x11<<7 | 0x26,
	23234 - 19968: jis0208<<14 | 0x34<<7 | 0x1E,
	23236 - 19968: jis0212<<14 | 0x19<<7 | 0x00,
	23238 - 19968: jis0212<<14 | 0x19<<7 | 0x01,
	23240 - 19968: jis0212<<14 | 0x19<<7 | 0x02,
	23241 - 19968: jis0208<<14 | 0x1B<<7 | 0x1A,
	23243 - 19968: jis0208<<14 | 0x34<<7 | 0x1D,
	23244 - 19968: jis0208<<14 | 0x16<<7 | 0x58,
	23247 - 19968: jis0212<<14 | 0x19<<7 | 0x03,
	23248 - 19968: jis0208<<14 | 0x34<<7 | 0x2B,
	23254 - 19968: jis0208<<14 | 0x34<<7 | 0x24,
	23255 - 19968: jis0208<<14 | 0x34<<7 | 0x21,
	23258 - 19968: jis0212<<14 | 0x19<<7 | 0x04,
	23260 - 19968: jis0212<<14 | 0x19<<7 | 0x05,
	23264 - 19968: jis0212<<14 | 0x19<<7 | 0x06,
	23265 - 19968: jis0208<<14 | 0x22<<7 | 0x43,
	23267 - 19968: jis0208<<14 | 0x34<<7 | 0x20,
	23269 - 19968: jis0212<<14 | 0x19<<7 | 0x07,
	23270 - 19968: jis0208<<14 | 0x34<<7 | 0x22,
	23273 - 19968: jis0208<<14 | 0x34<<7 | 0x23,
	23274 - 19968: jis0212<<14 | 0x19<<7 | 0x08,
	23278 - 19968: jis0212<<14 | 0x19<<7 | 0x09,
	23285 - 19968: jis0212<<14 | 0x19<<7 | 0x0A,
	23286 - 19968: jis0212<<14 | 0x19<<7 | 0x0B,
	23290 - 19968: jis0208<<14 | 0x34<<7 | 0x25,
	23291 - 19968: jis0208<<14 | 0x34<<7 | 0x26,
	23293 - 19968: jis0212<<14 | 0x19<<7 | 0x0C,
	23296 - 19968: jis0212<<14 | 0x19<<7 | 0x0D,
	23297 - 19968: jis0212<<14 | 0x19<<7 | 0x0E,
	23304 - 19968: jis0212<<14 | 0x19<<7 | 0x0F,
	23305 - 19968: jis0208<<14 | 0x13<<7 | 0x51,
	23307 - 19968: jis0208<<14 | 0x34<<7 | 0x28,
	23308 - 19968: jis0208<<14 | 0x34<<7 | 0x27,
	23318 - 19968: jis0208<<14 | 0x34<<7 | 0x29,
	23319 - 19968: jis0212<<14 | 0x19<<7 | 0x10,
	23321 - 19968: jis0212<<14 | 0x19<<7 | 0x12,
	23323 - 19968: jis0212<<14 | 0x19<<7 | 0x13,
	23325 - 19968: jis0212<<14 | 0x19<<7 | 0x14,
	23329 - 19968: jis0212<<14 | 0x19<<7 | 0x15,
	23330 - 19968: jis0208<<14 | 0x1D<<7 | 0x4D,
	23333 - 19968: jis0212<<14 | 0x19<<7 | 0x16,
	23338 - 19968: jis0208<<14 | 0x34<<7 | 0x2C,
	23340 - 19968: jis0208<<14 | 0x23<<7 | 0x3B,
	23341 - 19968: jis0212<<14 | 0x19<<7 | 0x17,
	23344 - 19968: jis0208<<14 | 0x10<<7 | 0x24,
	23346 - 19968: jis0208<<14 | 0x34<<7 | 0x2A,
	23348 - 19968: jis0212<<14 | 0x19<<7 | 0x11,
	23350 - 19968: jis0208<<14 | 0x34<<7 | 0x2D,
	23352 - 19968: jis0212<<14 | 0x19<<7 | 0x18,
	23358 - 19968: jis0208<<14 | 0x34<<7 | 0x2E,
	23360 - 19968: jis0208<<14 | 0x34<<7 | 0x31,
	23361 - 19968: jis0212<<14 | 0x19<<7 | 0x19,
	23363 - 19968: jis0208<<14 | 0x34<<7 | 0x2F,
	23365 - 19968: jis0208<<14 | 0x34<<7 | 0x30,
	23371 - 19968: jis0212<<14 | 0x19<<7 | 0x1A,
	23372 - 19968: jis0212<<14 | 0x19<<7 | 0x1B,
	23376 - 19968: jis0208<<14 | 0x1A<<7 | 0x31,
	23377 - 19968: jis0208<<14 | 0x34<<7 | 0x32,
	23378 - 19968: jis0212<<14 | 0x19<<7 | 0x1C,
	23380 - 19968: jis0208<<14 | 0x18<<7 | 0x05,
	23381 - 19968: jis0208<<14 | 0x34<<7 | 0x33,
	23382 - 19968: jis0208<<14 | 0x58<<7 | 0x49,
	23383 - 19968: jis0208<<14 | 0x1A<<7 | 0x59,
	23384 - 19968: jis0208<<14 | 0x21<<7 | 0x17,
	23386 - 19968: jis0208<<14 | 0x34<<7 | 0x34,
	23387 - 19968: jis0208<<14 | 0x34<<7 | 0x35,
	23388 - 19968: jis0208<<14 | 0x1A<<7 | 0x39,
	23389 - 19968: jis0208<<14 | 0x18<<7 | 0x06,
	23390 - 19968: jis0212<<14 | 0x19<<7 | 0x1E,
	23391 - 19968: jis0208<<14 | 0x2B<<7 | 0x31,
	23395 - 19968: jis0208<<14 | 0x14<<7 | 0x07,
	23396 - 19968: jis0208<<14 | 0x17<<7 | 0x28,
	23397 - 19968: jis0208<<14 | 0x34<<7 | 0x36,
	23398 - 19968: jis0208<<14 | 0x12<<7 | 0x37,
	23400 - 19968: jis0212<<14 | 0x19<<7 | 0x1F,
	23401 - 19968: jis0208<<14 | 0x34<<7 | 0x37,
	23403 - 19968: jis0208<<14 | 0x21<<7 | 0x18,
	23406 - 19968: jis0212<<14 | 0x19<<7 | 0x20,
	23407 - 19968: jis0212<<14 | 0x19<<7 | 0x21,
	23408 - 19968: jis0208<<14 | 0x34<<7 | 0x38,
	23409 - 19968: jis0208<<14 | 0x35<<7 | 0x02,
	23411 - 19968: jis0208<<14 | 0x34<<7 | 0x39,
	23413 - 19968: jis0208<<14 | 0x34<<7 | 0x3A,
	23416 - 19968: jis0208<<14 | 0x34<<7 | 0x3B,
	23418 - 19968: jis0208<<14 | 0x34<<7 | 0x3D,
	23420 - 19968: jis0212<<14 | 0x19<<7 | 0x22,
	23421 - 19968: jis0212<<14 | 0x19<<7 | 0x23,
	23422 - 19968: jis0212<<14 | 0x19<<7 | 0x24,
	23423 - 19968: jis0212<<14 | 0x19<<7 | 0x25,
	23424 - 19968: jis0208<<14 | 0x34<<7 | 0x3E,
	23425 - 19968: jis0212<<14 | 0x19<<7 | 0x26,
	23427 - 19968: jis0208<<14 | 0x34<<7 | 0x3F,
	23428 - 19968: jis0212<<14 | 0x19<<7 | 0x27,
	23429 - 19968: jis0208<<14 | 0x21<<7 | 0x4F,
	23430 - 19968: jis0212<<14 | 0x19<<7 | 0x28,
	23431 - 19968: jis0208<<14 | 0x10<<7 | 0x06,
	23432 - 19968: jis0208<<14 | 0x1B<<7 | 0x48,
	23433 - 19968: jis0208<<14 | 0x0F<<7 | 0x21,
	23434 - 19968: jis0212<<14 | 0x19<<7 | 0x29,
	23435 - 19968: jis0208<<14 | 0x20<<7 | 0x36,
	23436 - 19968: jis0208<<14 | 0x13<<7 | 0x0F,
	23437 - 19968: jis0208<<14 | 0x1B<<7 | 0x14,
	23438 - 19968: jis0212<<14 | 0x19<<7 | 0x2A,
	23439 - 19968: jis0208<<14 | 0x18<<7 | 0x07,
	23440 - 19968: jis0212<<14 | 0x19<<7 | 0x2B,
	23441 - 19968: jis0212<<14 | 0x19<<7 | 0x2C,
	23443 - 19968: jis0212<<14 | 0x19<<7 | 0x2D,
	23444 - 19968: jis0212<<14 | 0x19<<7 | 0x2E,
	23445 - 19968: jis0208<<14 | 0x24<<7 | 0x45,
	23446 - 19968: jis0212<<14 | 0x19<<7 | 0x2F,
	23447 - 19968: jis0208<<14 | 0x1C<<7 | 0x00,
	23448 - 19968: jis0208<<14 | 0x13<<7 | 0x10,
	23449 - 19968: jis0208<<14 | 0x22<<7 | 0x47,
	23450 - 19968: jis0208<<14 | 0x23<<7 | 0x49,
	23451 - 19968: jis0208<<14 | 0x0F<<7 | 0x17,
	23452 - 19968: jis0208<<14 | 0x14<<7 | 0x18,
	23453 - 19968: jis0208<<14 | 0x29<<7 | 0x54,
	23455 - 19968: jis0208<<14 | 0x1B<<7 | 0x21,
	23458 - 19968: jis0208<<14 | 0x14<<7 | 0x31,
	23459 - 19968: jis0208<<14 | 0x1F<<7 | 0x4A,
	23460 - 19968: jis0208<<14 | 0x1B<<7 | 0x1B,
	23461 - 19968: jis0208<<14 | 0x2C<<7 | 0x07,
	23462 - 19968: jis0208<<14 | 0x34<<7 | 0x40,
	23464 - 19968: jis0212<<14 | 0x19<<7 | 0x30,
	23465 - 19968: jis0212<<14 | 0x19<<7 | 0x31,
	23468 - 19968: jis0212<<14 | 0x19<<7 | 0x32,
	23469 - 19968: jis0212<<14 | 0x19<<7 | 0x33,
	23470 - 19968: jis0208<<14 | 0x14<<7 | 0x3B,
	23471 - 19968: jis0212<<14 | 0x19<<7 | 0x34,
	23472 - 19968: jis0208<<14 | 0x19<<7 | 0x2A,
	23473 - 19968: jis0212<<14 | 0x19<<7 | 0x35,
	23474 - 19968: jis0212<<14 | 0x19<<7 | 0x36,
	23475 - 19968: jis0208<<14 | 0x12<<7 | 0x11,
	23476 - 19968: jis0208<<14 | 0x10<<7 | 0x42,
	23477 - 19968: jis0208<<14 | 0x1D<<7 | 0x0B,
	23478 - 19968: jis0208<<14 | 0x11<<7 | 0x27,
	23479 - 19968: jis0212<<14 | 0x19<<7 | 0x37,
	23480 - 19968: jis0208<<14 | 0x34<<7 | 0x41,
	23481 - 19968: jis0208<<14 | 0x2C<<7 | 0x25,
	23482 - 19968: jis0212<<14 | 0x19<<7 | 0x38,
	23484 - 19968: jis0212<<14 | 0x19<<7 | 0x39,
	23487 - 19968: jis0208<<14 | 0x1C<<7 | 0x28,
	23488 - 19968: jis0208<<14 | 0x58<<7 | 0x4A,
	23489 - 19968: jis0212<<14 | 0x19<<7 | 0x3B,
	23490 - 19968: jis0208<<14 | 0x1B<<7 | 0x43,
	23491 - 19968: jis0208<<14 | 0x34<<7 | 0x42,
	23492 - 19968: jis0208<<14 | 0x13<<7 | 0x52,
	23493 - 19968: jis0208<<14 | 0x25<<7 | 0x31,
	23494 - 19968: jis0208<<14 | 0x2B<<7 | 0x08,
	23495 - 19968: jis0208<<14 | 0x34<<7 | 0x43,
	23497 - 19968: jis0208<<14 | 0x34<<7 | 0x44,
	23500 - 19968: jis0208<<14 | 0x28<<7 | 0x38,
	23501 - 19968: jis0212<<14 | 0x19<<7 | 0x3C,
	23503 - 19968: jis0212<<14 | 0x19<<7 | 0x3D,
	23504 - 19968: jis0208<<14 | 0x34<<7 | 0x46,
	23506 - 19968: jis0208<<14 | 0x13<<7 | 0x07,
	23507 - 19968: jis0208<<14 | 0x15<<7 | 0x56,
	23508 - 19968: jis0208<<14 | 0x34<<7 | 0x45,
	23510 - 19968: jis0212<<14 | 0x19<<7 | 0x3E,
	23511 - 19968: jis0212<<14 | 0x19<<7 | 0x3F,
	23512 - 19968: jis0208<<14 | 0x58<<7 | 0x4C,
	23513 - 19968: jis0212<<14 | 0x19<<7 | 0x41,
	23514 - 19968: jis0212<<14 | 0x19<<7 | 0x42,
	23515 - 19968: jis0208<<14 | 0x13<<7 | 0x11,
	23517 - 19968: jis0208<<14 | 0x1E<<7 | 0x11,
	23518 - 19968: jis0208<<14 | 0x34<<7 | 0x4A,
	23519 - 19968: jis0208<<14 | 0x1A<<7 | 0x00,
	23520 - 19968: jis0212<<14 | 0x19<<7 | 0x43,
	23521 - 19968: jis0208<<14 | 0x11<<7 | 0x28,
	23522 - 19968: jis0208<<14 | 0x34<<7 | 0x49,
	23524 - 19968: jis0208<<14 | 0x34<<7 | 0x47,
	23525 - 19968: jis0208<<14 | 0x34<<7 | 0x4B,
	23526 - 19968: jis0208<<14 | 0x34<<7 | 0x48,
	23527 - 19968: jis0208<<14 | 0x26<<7 | 0x0A,
	23528 - 19968: jis0208<<14 | 0x3B<<7 | 0x2C,
	23529 - 19968: jis0208<<14 | 0x1E<<7 | 0x12,
	23531 - 19968: jis0208<<14 | 0x34<<7 | 0x4C,
	23532 - 19968: jis0208<<14 | 0x58<<7 | 0x4D,
	23534 - 19968: jis0208<<14 | 0x2D<<7 | 0x1F,
	23535 - 19968: jis0212<<14 | 0x19<<7 | 0x44,
	23536 - 19968: jis0208<<14 | 0x34<<7 | 0x4D,
	23537 - 19968: jis0212<<14 | 0x19<<7 | 0x45,
	23539 - 19968: jis0208<<14 | 0x34<<7 | 0x4F,
	23540 - 19968: jis0212<<14 | 0x19<<7 | 0x46,
	23541 - 19968: jis0208<<14 | 0x22<<7 | 0x5D,
	23542 - 19968: jis0208<<14 | 0x34<<7 | 0x4E,
	23544 - 19968: jis0208<<14 | 0x1F<<7 | 0x02,
	23546 - 19968: jis0208<<14 | 0x1A<<7 | 0x5A,
	23549 - 19968: jis0212<<14 | 0x19<<7 | 0x47,
	23550 - 19968: jis0208<<14 | 0x21<<7 | 0x2F,
	23551 - 19968: jis0208<<14 | 0x1B<<7 | 0x56,
	23553 - 19968: jis0208<<14 | 0x28<<7 | 0x54,
	23554 - 19968: jis0208<<14 | 0x1F<<7 | 0x4B,
	23556 - 19968: jis0208<<14 | 0x1B<<7 | 0x2C,
	23557 - 19968: jis0208<<14 | 0x34<<7 | 0x50,
	23558 - 19968: jis0208<<14 | 0x1D<<7 | 0x0C,
	23559 - 19968: jis0208<<14 | 0x34<<7 | 0x51,
	23560 - 19968: jis0208<<14 | 0x34<<7 | 0x52,
	23561 - 19968: jis0208<<14 | 0x0F<<7 | 0x32,
	23562 - 19968: jis0208<<14 | 0x21<<7 | 0x19,
	23563 - 19968: jis0208<<14 | 0x1E<<7 | 0x31,
	23564 - 19968: jis0212<<14 | 0x19<<7 | 0x48,
	23565 - 19968: jis0208<<14 | 0x34<<7 | 0x53,
	23566 - 19968: jis0208<<14 | 0x25<<7 | 0x12,
	23567 - 19968: jis0208<<14 | 0x1D<<7 | 0x0D,
	23569 - 19968: jis0208<<14 | 0x1D<<7 | 0x0E,
	23571 - 19968: jis0208<<14 | 0x34<<7 | 0x54,
	23574 - 19968: jis0208<<14 | 0x1F<<7 | 0x4C,
	23575 - 19968: jis0212<<14 | 0x19<<7 | 0x49,
	23578 - 19968: jis0208<<14 | 0x1D<<7 | 0x0F,
	23582 - 19968: jis0208<<14 | 0x58<<7 | 0x4E,
	23583 - 19968: jis0212<<14 | 0x19<<7 | 0x4B,
	23584 - 19968: jis0208<<14 | 0x34<<7 | 0x55,
	23586 - 19968: jis0208<<14 | 0x34<<7 | 0x56,
	23587 - 19968: jis0212<<14 | 0x19<<7 | 0x4C,
	23588 - 19968: jis0208<<14 | 0x2B<<7 | 0x3F,
	23590 - 19968: jis0212<<14 | 0x19<<7 | 0x4D,
	23592 - 19968: jis0208<<14 | 0x34<<7 | 0x57,
	23593 - 19968: jis0212<<14 | 0x19<<7 | 0x4E,
	23595 - 19968: jis0212<<14 | 0x19<<7 | 0x4F,
	23596 - 19968: jis0212<<14 | 0x19<<7 | 0x50,
	23597 - 19968: jis0208<<14 | 0x15<<7 | 0x25,
	23598 - 19968: jis0212<<14 | 0x19<<7 | 0x51,
	23600 - 19968: jis0212<<14 | 0x19<<7 | 0x52,
	23601 - 19968: jis0208<<14 | 0x1C<<7 | 0x01,
	23602 - 19968: jis0212<<14 | 0x19<<7 | 0x53,
	23605 - 19968: jis0212<<14 | 0x19<<7 | 0x54,
	23606 - 19968: jis0212<<14 | 0x19<<7 | 0x55,
	23608 - 19968: jis0208<<14 | 0x34<<7 | 0x58,
	23609 - 19968: jis0208<<14 | 0x34<<7 | 0x59,
	23610 - 19968: jis0208<<14 | 0x1B<<7 | 0x3B,
	23611 - 19968: jis0208<<14 | 0x1E<<7 | 0x0B,
	23612 - 19968: jis0208<<14 | 0x25<<7 | 0x53,
	23613 - 19968: jis0208<<14 | 0x1E<<7 | 0x33,
	23614 - 19968: jis0208<<14 | 0x27<<7 | 0x57,
	23615 - 19968: jis0208<<14 | 0x26<<7 | 0x01,
	23616 - 19968: jis0208<<14 | 0x15<<7 | 0x28,
	23617 - 19968: jis0208<<14 | 0x34<<7 | 0x5A,
	23621 - 19968: jis0208<<14 | 0x14<<7 | 0x4E,
	23622 - 19968: jis0208<<14 | 0x34<<7 | 0x5B,
	23624 - 19968: jis0208<<14 | 0x15<<7 | 0x5D,
	23626 - 19968: jis0208<<14 | 0x25<<7 | 0x2E,
	23627 - 19968: jis0208<<14 | 0x11<<7 | 0x0F,
	23629 - 19968: jis0208<<14 | 0x1A<<7 | 0x32,
	23630 - 19968: jis0208<<14 | 0x34<<7 | 0x5C,
	23631 - 19968: jis0208<<14 | 0x35<<7 | 0x01,
	23632 - 19968: jis0208<<14 | 0x35<<7 | 0x00,
	23633 - 19968: jis0208<<14 | 0x15<<7 | 0x5C,
	23635 - 19968: jis0208<<14 | 0x34<<7 | 0x5D,
	23637 - 19968: jis0208<<14 | 0x24<<7 | 0x17,
	23641 - 19968: jis0212<<14 | 0x19<<7 | 0x56,
	23642 - 19968: jis0212<<14 | 0x19<<7 | 0x57,
	23644 - 19968: jis0212<<14 | 0x19<<7 | 0x58,
	23646 - 19968: jis0208<<14 | 0x21<<7 | 0x0F,
	23648 - 19968: jis0208<<14 | 0x24<<7 | 0x2A,
	23649 - 19968: jis0208<<14 | 0x1B<<7 | 0x27,
	23650 - 19968: jis0212<<14 | 0x19<<7 | 0x59,
	23651 - 19968: jis0212<<14 | 0x19<<7 | 0x5A,
	23652 - 19968: jis0208<<14 | 0x20<<7 | 0x37,
	23653 - 19968: jis0208<<14 | 0x2C<<7 | 0x59,
	23655 - 19968: jis0212<<14 | 0x19<<7 | 0x5B,
	23656 - 19968: jis0212<<14 | 0x19<<7 | 0x5C,
	23657 - 19968: jis0212<<14 | 0x19<<7 | 0x5D,
	23660 - 19968: jis0208<<14 | 0x35<<7 | 0x03,
	23661 - 19968: jis0212<<14 | 0x1A<<7 | 0x00,
	23662 - 19968: jis0208<<14 | 0x35<<7 | 0x04,
	23663 - 19968: jis0208<<14 | 0x25<<7 | 0x35,
	23664 - 19968: jis0212<<14 | 0x1A<<7 | 0x01,
	23665 - 19968: jis0208<<14 | 0x1A<<7 | 0x12,
	23668 - 19968: jis0212<<14 | 0x1A<<7 | 0x02,
	23669 - 19968: jis0212<<14 | 0x1A<<7 | 0x03,
	23670 - 19968: jis0208<<14 | 0x35<<7 | 0x06,
	23673 - 19968: jis0208<<14 | 0x35<<7 | 0x07,
	23674 - 19968: jis0212<<14 | 0x1A<<7 | 0x04,
	23675 - 19968: jis0212<<14 | 0x1A<<7 | 0x05,
	23676 - 19968: jis0212<<14 | 0x1A<<7 | 0x06,
	23677 - 19968: jis0212<<14 | 0x1A<<7 | 0x07,
	23687 - 19968: jis0212<<14 | 0x1A<<7 | 0x08,
	23688 - 19968: jis0212<<14 | 0x1A<<7 | 0x09,
	23690 - 19968: jis0212<<14 | 0x1A<<7 | 0x0A,
	23692 - 19968: jis0208<<14 | 0x35<<7 | 0x08,
	23695 - 19968: jis0212<<14 | 0x1A<<7 | 0x0B,
	23696 - 19968: jis0208<<14 | 0x13<<7 | 0x53,
	23697 - 19968: jis0208<<14 | 0x35<<7 | 0x09,
	23698 - 19968: jis0212<<14 | 0x1A<<7 | 0x0C,
	23700 - 19968: jis0208<<14 | 0x35<<7 | 0x0A,
	23709 - 19968: jis0212<<14 | 0x1A<<7 | 0x0D,
	23711 - 19968: jis0212<<14 | 0x1A<<7 | 0x0E,
	23712 - 19968: jis0212<<14 | 0x1A<<7 | 0x0F,
	23713 - 19968: jis0208<<14 | 0x11<<7 | 0x0B,
	23714 - 19968: jis0212<<14 | 0x1A<<7 | 0x10,
	23715 - 19968: jis0212<<14 | 0x1A<<7 | 0x11,
	23718 - 19968: jis0208<<14 | 0x58<<7 | 0x4F,
	23720 - 19968: jis0208<<14 | 0x20<<7 | 0x1A,
	23721 - 19968: jis0208<<14 | 0x13<<7 | 0x43,
	23722 - 19968: jis0212<<14 | 0x1A<<7 | 0x13,
	23723 - 19968: jis0208<<14 | 0x35<<7 | 0x0C,
	23724 - 19968: jis0208<<14 | 0x2B<<7 | 0x07,
	23729 - 19968: jis0208<<14 | 0x21<<7 | 0x31,
	23730 - 19968: jis0212<<14 | 0x1A<<7 | 0x14,
	23731 - 19968: jis0208<<14 | 0x12<<7 | 0x38,
	23732 - 19968: jis0212<<14 | 0x1A<<7 | 0x15,
	23733 - 19968: jis0212<<14 | 0x1A<<7 | 0x16,
	23734 - 19968: jis0208<<14 | 0x35<<7 | 0x0E,
	23735 - 19968: jis0208<<14 | 0x35<<7 | 0x10,
	23736 - 19968: jis0208<<14 | 0x13<<7 | 0x3E,
	23738 - 19968: jis0208<<14 | 0x58<<7 | 0x50,
	23739 - 19968: jis0208<<14 | 0x35<<7 | 0x0D,
	23740 - 19968: jis0208<<14 | 0x35<<7 | 0x0F,
	23742 - 19968: jis0208<<14 | 0x35<<7 | 0x12,
	23749 - 19968: jis0208<<14 | 0x35<<7 | 0x11,
	23751 - 19968: jis0208<<14 | 0x35<<7 | 0x13,
	23753 - 19968: jis0212<<14 | 0x1A<<7 | 0x18,
	23755 - 19968: jis0212<<14 | 0x1A<<7 | 0x19,
	23762 - 19968: jis0212<<14 | 0x1A<<7 | 0x1A,
	23767 - 19968: jis0212<<14 | 0x1A<<7 | 0x1C,
	23769 - 19968: jis0208<<14 | 0x35<<7 | 0x14,
	23773 - 19968: jis0212<<14 | 0x1A<<7 | 0x1B,
	23776 - 19968: jis0208<<14 | 0x25<<7 | 0x1C,
	23777 - 19968: jis0208<<14 | 0x15<<7 | 0x0D,
	23784 - 19968: jis0208<<14 | 0x11<<7 | 0x44,
	23785 - 19968: jis0208<<14 | 0x35<<7 | 0x15,
	23786 - 19968: jis0208<<14 | 0x35<<7 | 0x1A,
	23789 - 19968: jis0208<<14 | 0x35<<7 | 0x18,
	23790 - 19968: jis0212<<14 | 0x1A<<7 | 0x1D,
	23791 - 19968: jis0208<<14 | 0x29<<7 | 0x56,
	23792 - 19968: jis0208<<14 | 0x29<<7 | 0x55,
	23793 - 19968: jis0212<<14 | 0x1A<<7 | 0x1E,
	23794 - 19968: jis0212<<14 | 0x1A<<7 | 0x1F,
	23796 - 19968: jis0212<<14 | 0x1A<<7 | 0x20,
	23797 - 19968: jis0208<<14 | 0x58<<7 | 0x51,
	23798 - 19968: jis0208<<14 | 0x24<<7 | 0x46,
	23802 - 19968: jis0208<<14 | 0x35<<7 | 0x17,
	23803 - 19968: jis0208<<14 | 0x1C<<7 | 0x33,
	23805 - 19968: jis0208<<14 | 0x35<<7 | 0x16,
	23809 - 19968: jis0212<<14 | 0x1A<<7 | 0x21,
	23814 - 19968: jis0212<<14 | 0x1A<<7 | 0x22,
	23815 - 19968: jis0208<<14 | 0x1E<<7 | 0x51,
	23819 - 19968: jis0208<<14 | 0x35<<7 | 0x1B,
	23821 - 19968: jis0212<<14 | 0x1A<<7 | 0x23,
	23822 - 19968: jis0208<<14 | 0x19<<7 | 0x49,
	23825 - 19968: jis0208<<14 | 0x35<<7 | 0x21,
	23826 - 19968: jis0212<<14 | 0x1A<<7 | 0x24,
	23828 - 19968: jis0208<<14 | 0x35<<7 | 0x22,
	23829 - 19968: jis0208<<14 | 0x35<<7 | 0x1C,
	23830 - 19968: jis0208<<14 | 0x12<<7 | 0x12,
	23831 - 19968: jis0208<<14 | 0x35<<7 | 0x1D,
	23832 - 19968: jis0208<<14 | 0x35<<7 | 0x26,
	23833 - 19968: jis0208<<14 | 0x35<<7 | 0x25,
	23834 - 19968: jis0208<<14 | 0x35<<7 | 0x24,
	23835 - 19968: jis0208<<14 | 0x35<<7 | 0x20,
	23839 - 19968: jis0208<<14 | 0x35<<7 | 0x1F,
	23842 - 19968: jis0208<<14 | 0x35<<7 | 0x23,
	23843 - 19968: jis0212<<14 | 0x1A<<7 | 0x26,
	23844 - 19968: jis0212<<14 | 0x1A<<7 | 0x27,
	23846 - 19968: jis0212<<14 | 0x1A<<7 | 0x28,
	23847 - 19968: jis0208<<14 | 0x58<<7 | 0x52,
	23849 - 19968: jis0208<<14 | 0x29<<7 | 0x57,
	23851 - 19968: jis0212<<14 | 0x1A<<7 | 0x25,
	23857 - 19968: jis0212<<14 | 0x1A<<7 | 0x2A,
	23860 - 19968: jis0212<<14 | 0x1A<<7 | 0x2B,
	23865 - 19968: jis0212<<14 | 0x1A<<7 | 0x2C,
	23869 - 19968: jis0212<<14 | 0x1A<<7 | 0x2D,
	23871 - 19968: jis0212<<14 | 0x1A<<7 | 0x2E,
	23874 - 19968: jis0208<<14 | 0x58<<7 | 0x55,
	23875 - 19968: jis0212<<14 | 0x1A<<7 | 0x30,
	23878 - 19968: jis0212<<14 | 0x1A<<7 | 0x31,
	23880 - 19968: jis0212<<14 | 0x1A<<7 | 0x32,
	23882 - 19968: jis0212<<14 | 0x1A<<7 | 0x36,
	23883 - 19968: jis0208<<14 | 0x35<<7 | 0x2A,
	23884 - 19968: jis0208<<14 | 0x35<<7 | 0x27,
	23886 - 19968: jis0208<<14 | 0x35<<7 | 0x29,
	23888 - 19968: jis0208<<14 | 0x2C<<7 | 0x51,
	23889 - 19968: jis0212<<14 | 0x1A<<7 | 0x34,
	23890 - 19968: jis0208<<14 | 0x35<<7 | 0x28,
	23891 - 19968: jis0208<<14 | 0x58<<7 | 0x53,
	23893 - 19968: jis0212<<14 | 0x1A<<7 | 0x33,
	23897 - 19968: jis0212<<14 | 0x1A<<7 | 0x35,
	23900 - 19968: jis0208<<14 | 0x35<<7 | 0x1E,
	23903 - 19968: jis0212<<14 | 0x1A<<7 | 0x37,
	23904 - 19968: jis0212<<14 | 0x1A<<7 | 0x38,
	23905 - 19968: jis0212<<14 | 0x1A<<7 | 0x39,
	23906 - 19968: jis0212<<14 | 0x1A<<7 | 0x3A,
	23908 - 19968: jis0212<<14 | 0x1A<<7 | 0x3B,
	23913 - 19968: jis0208<<14 | 0x1E<<7 | 0x52,
	23914 - 19968: jis0212<<14 | 0x1A<<7 | 0x3C,
	23916 - 19968: jis0208<<14 | 0x35<<7 | 0x2B,
	23917 - 19968: jis0208<<14 | 0x58<<7 | 0x56,
	23919 - 19968: jis0208<<14 | 0x19<<7 | 0x16,
	23920 - 19968: jis0212<<14 | 0x1A<<7 | 0x3E,
	23923 - 19968: jis0208<<14 | 0x35<<7 | 0x2C,
	23926 - 19968: jis0208<<14 | 0x35<<7 | 0x2D,
	23929 - 19968: jis0212<<14 | 0x1A<<7 | 0x3F,
	23930 - 19968: jis0212<<14 | 0x1A<<7 | 0x40,
	23934 - 19968: jis0212<<14 | 0x1A<<7 | 0x41,
	23935 - 19968: jis0212<<14 | 0x1A<<7 | 0x42,
	23937 - 19968: jis0212<<14 | 0x1A<<7 | 0x43,
	23938 - 19968: jis0208<<14 | 0x35<<7 | 0x30,
	23939 - 19968: jis0212<<14 | 0x1A<<7 | 0x44,
	23940 - 19968: jis0208<<14 | 0x35<<7 | 0x2F,
	23943 - 19968: jis0208<<14 | 0x35<<7 | 0x2E,
	23944 - 19968: jis0212<<14 | 0x1A<<7 | 0x45,
	23946 - 19968: jis0212<<14 | 0x1A<<7 | 0x46,
	23947 - 19968: jis0208<<14 | 0x24<<7 | 0x47,
	23948 - 19968: jis0208<<14 | 0x35<<7 | 0x19,
	23952 - 19968: jis0208<<14 | 0x35<<7 | 0x36,
	23954 - 19968: jis0212<<14 | 0x1A<<7 | 0x47,
	23955 - 19968: jis0212<<14 | 0x1A<<7 | 0x48,
	23956 - 19968: jis0212<<14 | 0x1A<<7 | 0x49,
	23957 - 19968: jis0212<<14 | 0x1A<<7 | 0x4A,
	23961 - 19968: jis0212<<14 | 0x1A<<7 | 0x4B,
	23963 - 19968: jis0212<<14 | 0x1A<<7 | 0x4C,
	23965 - 19968: jis0208<<14 | 0x35<<7 | 0x32,
	23967 - 19968: jis0212<<14 | 0x1A<<7 | 0x4D,
	23968 - 19968: jis0212<<14 | 0x1A<<7 | 0x4E,
	23970 - 19968: jis0208<<14 | 0x35<<7 | 0x31,
	23975 - 19968: jis0212<<14 | 0x1A<<7 | 0x4F,
	23979 - 19968: jis0212<<14 | 0x1A<<7 | 0x50,
	23980 - 19968: jis0208<<14 | 0x35<<7 | 0x33,
	23982 - 19968: jis0208<<14 | 0x35<<7 | 0x34,
	23984 - 19968: jis0212<<14 | 0x1A<<7 | 0x51,
	23986 - 19968: jis0212<<14 | 0x45<<7 | 0x53,
	23988 - 19968: jis0212<<14 | 0x1A<<7 | 0x52,
	23991 - 19968: jis0208<<14 | 0x35<<7 | 0x37,
	23992 - 19968: jis0208<<14 | 0x58<<7 | 0x57,
	23993 - 19968: jis0208<<14 | 0x58<<7 | 0x58,
	23994 - 19968: jis0208<<14 | 0x2D<<7 | 0x45,
	23996 - 19968: jis0208<<14 | 0x35<<7 | 0x38,
	23997 - 19968: jis0208<<14 | 0x35<<7 | 0x35,
	24003 - 19968: jis0212<<14 | 0x1A<<7 | 0x55,
	24007 - 19968: jis0212<<14 | 0x1A<<7 | 0x56,
	24009 - 19968: jis0208<<14 | 0x35<<7 | 0x39,
	24011 - 19968: jis0212<<14 | 0x1A<<7 | 0x57,
	24012 - 19968: jis0208<<14 | 0x13<<7 | 0x3F,
	24013 - 19968: jis0208<<14 | 0x35<<7 | 0x3A,
	24014 - 19968: jis0212<<14 | 0x1A<<7 | 0x59,
	24016 - 19968: jis0208<<14 | 0x58<<7 | 0x59,
	24018 - 19968: jis0208<<14 | 0x35<<7 | 0x3C,
	24019 - 19968: jis0208<<14 | 0x35<<7 | 0x3B,
	24022 - 19968: jis0208<<14 | 0x35<<7 | 0x3D,
	24024 - 19968: jis0212<<14 | 0x1A<<7 | 0x5A,
	24025 - 19968: jis0212<<14 | 0x1A<<7 | 0x5B,
	24027 - 19968: jis0208<<14 | 0x35<<7 | 0x3E,
	24029 - 19968: jis0208<<14 | 0x1F<<7 | 0x4D,
	24030 - 19968: jis0208<<14 | 0x1C<<7 | 0x02,
	24032 - 19968: jis0212<<14 | 0x1A<<7 | 0x5C,
	24033 - 19968: jis0208<<14 | 0x1C<<7 | 0x43,
	24035 - 19968: jis0208<<14 | 0x20<<7 | 0x42,
	24036 - 19968: jis0212<<14 | 0x1A<<7 | 0x5D,
	24037 - 19968: jis0208<<14 | 0x18<<7 | 0x08,
	24038 - 19968: jis0208<<14 | 0x19<<7 | 0x17,
	24039 - 19968: jis0208<<14 | 0x18<<7 | 0x09,
	24040 - 19968: jis0208<<14 | 0x14<<7 | 0x4F,
	24041 - 19968: jis0212<<14 | 0x1B<<7 | 0x00,
	24043 - 19968: jis0208<<14 | 0x35<<7 | 0x3F,
	24046 - 19968: jis0208<<14 | 0x19<<7 | 0x18,
	24049 - 19968: jis0208<<14 | 0x17<<7 | 0x29,
	24050 - 19968: jis0208<<14 | 0x35<<7 | 0x40,
	24051 - 19968: jis0208<<14 | 0x2B<<7 | 0x05,
	24052 - 19968: jis0208<<14 | 0x26<<7 | 0x22,
	24053 - 19968: jis0208<<14 | 0x35<<7 | 0x41,
	24055 - 19968: jis0208<<14 | 0x18<<7 | 0x0A,
	24056 - 19968: jis0212<<14 | 0x1B<<7 | 0x01,
	24057 - 19968: jis0212<<14 | 0x1B<<7 | 0x02,
	24059 - 19968: jis0208<<14 | 0x13<<7 | 0x0B,
	24061 - 19968: jis0208<<14 | 0x22<<7 | 0x06,
	24062 - 19968: jis0208<<14 | 0x15<<7 | 0x31,
	24064 - 19968: jis0212<<14 | 0x1B<<7 | 0x03,
	24066 - 19968: jis0208<<14 | 0x1A<<7 | 0x33,
	24067 - 19968: jis0208<<14 | 0x28<<7 | 0x3A,
	24070 - 19968: jis0208<<14 | 0x27<<7 | 0x20,
	24071 - 19968: jis0212<<14 | 0x1B<<7 | 0x04,
	24075 - 19968: jis0208<<14 | 0x35<<7 | 0x42,
	24076 - 19968: jis0208<<14 | 0x13<<7 | 0x54,
	24077 - 19968: jis0212<<14 | 0x1B<<7 | 0x05,
	24081 - 19968: jis0208<<14 | 0x35<<7 | 0x45,
	24082 - 19968: jis0212<<14 | 0x1B<<7 | 0x06,
	24084 - 19968: jis0212<<14 | 0x1B<<7 | 0x07,
	24085 - 19968: jis0212<<14 | 0x1B<<7 | 0x08,
	24086 - 19968: jis0208<<14 | 0x23<<7 | 0x00,
	24088 - 19968: jis0212<<14 | 0x1B<<7 | 0x09,
	24089 - 19968: jis0208<<14 | 0x35<<7 | 0x44,
	24090 - 19968: jis0208<<14 | 0x35<<7 | 0x43,
	24091 - 19968: jis0208<<14 | 0x35<<7 | 0x46,
	24093 - 19968: jis0208<<14 | 0x23<<7 | 0x4A,
	24095 - 19968: jis0212<<14 | 0x1B<<7 | 0x0A,
	24096 - 19968: jis0212<<14 | 0x1B<<7 | 0x0B,
	24101 - 19968: jis0208<<14 | 0x1E<<7 | 0x42,
	24104 - 19968: jis0212<<14 | 0x1B<<7 | 0x0D,
	24107 - 19968: jis0208<<14 | 0x1A<<7 | 0x34,
	24109 - 19968: jis0208<<14 | 0x1F<<7 | 0x29,
	24110 - 19968: jis0212<<14 | 0x1B<<7 | 0x0C,
	24111 - 19968: jis0208<<14 | 0x21<<7 | 0x32,
	24112 - 19968: jis0208<<14 | 0x14<<7 | 0x01,
	24114 - 19968: jis0212<<14 | 0x1B<<7 | 0x0E,
	24115 - 19968: jis0208<<14 | 0x23<<7 | 0x01,
	24117 - 19968: jis0212<<14 | 0x1B<<7 | 0x0F,
	24118 - 19968: jis0208<<14 | 0x35<<7 | 0x47,
	24119 - 19968: jis0208<<14 | 0x35<<7 | 0x48,
	24120 - 19968: jis0208<<14 | 0x1D<<7 | 0x4E,
	24125 - 19968: jis0208<<14 | 0x2A<<7 | 0x18,
	24126 - 19968: jis0212<<14 | 0x1B<<7 | 0x10,
	24128 - 19968: jis0208<<14 | 0x35<<7 | 0x4B,
	24131 - 19968: jis0208<<14 | 0x35<<7 | 0x4A,
	24132 - 19968: jis0208<<14 | 0x35<<7 | 0x49,
	24133 - 19968: jis0208<<14 | 0x28<<7 | 0x5C,
	24135 - 19968: jis0208<<14 | 0x35<<7 | 0x52,
	24137 - 19968: jis0212<<14 | 0x1B<<7 | 0x13,
	24139 - 19968: jis0212<<14 | 0x1B<<7 | 0x11,
	24140 - 19968: jis0208<<14 | 0x2A<<7 | 0x39,
	24142 - 19968: jis0208<<14 | 0x35<<7 | 0x4C,
	24144 - 19968: jis0212<<14 | 0x1B<<7 | 0x12,
	24145 - 19968: jis0212<<14 | 0x1B<<7 | 0x14,
	24148 - 19968: jis0208<<14 | 0x35<<7 | 0x4E,
	24149 - 19968: jis0208<<14 | 0x2A<<7 | 0x4A,
	24150 - 19968: jis0212<<14 | 0x1B<<7 | 0x15,
	24151 - 19968: jis0208<<14 | 0x35<<7 | 0x4D,
	24152 - 19968: jis0212<<14 | 0x1B<<7 | 0x16,
	24155 - 19968: jis0212<<14 | 0x1B<<7 | 0x17,
	24156 - 19968: jis0212<<14 | 0x1B<<7 | 0x18,
	24158 - 19968: jis0212<<14 | 0x1B<<7 | 0x19,
	24159 - 19968: jis0208<<14 | 0x35<<7 | 0x4F,
	24161 - 19968: jis0208<<14 | 0x27<<7 | 0x07,
	24162 - 19968: jis0208<<14 | 0x35<<7 | 0x50,
	24163 - 19968: jis0208<<14 | 0x29<<7 | 0x1D,
	24164 - 19968: jis0208<<14 | 0x35<<7 | 0x51,
	24168 - 19968: jis0212<<14 | 0x1B<<7 | 0x1A,
	24170 - 19968: jis0212<<14 | 0x1B<<7 | 0x1B,
	24171 - 19968: jis0212<<14 | 0x1B<<7 | 0x1C,
	24172 - 19968: jis0212<<14 | 0x1B<<7 | 0x1D,
	24173 - 19968: jis0212<<14 | 0x1B<<7 | 0x1E,
	24174 - 19968: jis0212<<14 | 0x1B<<7 | 0x1F,
	24176 - 19968: jis0212<<14 | 0x1B<<7 | 0x20,
	24178 - 19968: jis0208<<14 | 0x13<<7 | 0x12,
	24179 - 19968: jis0208<<14 | 0x29<<7 | 0x1E,
	24180 - 19968: jis0208<<14 | 0x26<<7 | 0x0E,
	24181 - 19968: jis0208<<14 | 0x35<<7 | 0x53,
	24182 - 19968: jis0208<<14 | 0x35<<7 | 0x54,
	24184 - 19968: jis0208<<14 | 0x18<<7 | 0x0B,
	24185 - 19968: jis0208<<14 | 0x13<<7 | 0x13,
	24186 - 19968: jis0208<<14 | 0x35<<7 | 0x55,
	24187 - 19968: jis0208<<14 | 0x17<<7 | 0x17,
	24188 - 19968: jis0208<<14 | 0x2C<<7 | 0x23,
	24189 - 19968: jis0208<<14 | 0x2C<<7 | 0x08,
	24190 - 19968: jis0208<<14 | 0x13<<7 | 0x55,
	24191 - 19968: jis0208<<14 | 0x35<<7 | 0x57,
	24192 - 19968: jis0212<<14 | 0x1B<<7 | 0x21,
	24193 - 19968: jis0208<<14 | 0x23<<7 | 0x02,
	24195 - 19968: jis0208<<14 | 0x18<<7 | 0x0C,
	24196 - 19968: jis0208<<14 | 0x1D<<7 | 0x10,
	24199 - 19968: jis0208<<14 | 0x27<<7 | 0x3E,
	24202 - 19968: jis0208<<14 | 0x1D<<7 | 0x11,
	24203 - 19968: jis0212<<14 | 0x1B<<7 | 0x22,
	24206 - 19968: jis0212<<14 | 0x1B<<7 | 0x23,
	24207 - 19968: jis0208<<14 | 0x1C<<7 | 0x57,
	24213 - 19968: jis0208<<14 | 0x23<<7 | 0x4B,
	24214 - 19968: jis0208<<14 | 0x29<<7 | 0x58,
	24215 - 19968: jis0208<<14 | 0x24<<7 | 0x18,
	24218 - 19968: jis0208<<14 | 0x18<<7 | 0x0D,
	24220 - 19968: jis0208<<14 | 0x28<<7 | 0x3B,
	24224 - 19968: jis0208<<14 | 0x35<<7 | 0x58,
	24226 - 19968: jis0212<<14 | 0x1B<<7 | 0x24,
	24228 - 19968: jis0212<<14 | 0x1B<<7 | 0x25,
	24229 - 19968: jis0212<<14 | 0x1B<<7 | 0x26,
	24230 - 19968: jis0208<<14 | 0x24<<7 | 0x38,
	24231 - 19968: jis0208<<14 | 0x19<<7 | 0x21,
	24232 - 19968: jis0212<<14 | 0x1B<<7 | 0x27,
	24234 - 19968: jis0212<<14 | 0x1B<<7 | 0x28,
	24235 - 19968: jis0208<<14 | 0x17<<7 | 0x2A,
	24236 - 19968: jis0212<<14 | 0x1B<<7 | 0x29,
	24237 - 19968: jis0208<<14 | 0x23<<7 | 0x4C,
	24241 - 19968: jis0212<<14 | 0x1B<<7 | 0x2A,
	24243 - 19968: jis0212<<14 | 0x1B<<7 | 0x2B,
	24245 - 19968: jis0208<<14 | 0x0F<<7 | 0x22,
	24246 - 19968: jis0208<<14 | 0x1C<<7 | 0x4D,
	24247 - 19968: jis0208<<14 | 0x18<<7 | 0x0E,
	24248 - 19968: jis0208<<14 | 0x2C<<7 | 0x26,
	24253 - 19968: jis0212<<14 | 0x1B<<7 | 0x2C,
	24254 - 19968: jis0212<<14 | 0x1B<<7 | 0x2D,
	24255 - 19968: jis0212<<14 | 0x1B<<7 | 0x2E,
	24257 - 19968: jis0208<<14 | 0x35<<7 | 0x59,
	24258 - 19968: jis0208<<14 | 0x35<<7 | 0x5A,
	24259 - 19968: jis0208<<14 | 0x26<<7 | 0x30,
	24262 - 19968: jis0212<<14 | 0x1B<<7 | 0x2F,
	24264 - 19968: jis0208<<14 | 0x35<<7 | 0x5B,
	24265 - 19968: jis0208<<14 | 0x2D<<7 | 0x56,
	24266 - 19968: jis0208<<14 | 0x2E<<7 | 0x0C,
	24267 - 19968: jis0212<<14 | 0x1B<<7 | 0x31,
	24268 - 19968: jis0212<<14 | 0x1B<<7 | 0x30,
	24270 - 19968: jis0212<<14 | 0x1B<<7 | 0x32,
	24271 - 19968: jis0208<<14 | 0x35<<7 | 0x5D,
	24272 - 19968: jis0208<<14 | 0x35<<7 | 0x5C,
	24273 - 19968: jis0212<<14 | 0x1B<<7 | 0x33,
	24274 - 19968: jis0212<<14 | 0x1B<<7 | 0x34,
	24275 - 19968: jis0208<<14 | 0x12<<7 | 0x26,
	24276 - 19968: jis0212<<14 | 0x1B<<7 | 0x35,
	24277 - 19968: jis0212<<14 | 0x1B<<7 | 0x36,
	24278 - 19968: jis0208<<14 | 0x36<<7 | 0x00,
	24282 - 19968: jis0208<<14 | 0x36<<7 | 0x03,
	24283 - 19968: jis0208<<14 | 0x36<<7 | 0x04,
	24284 - 19968: jis0212<<14 | 0x1B<<7 | 0x37,
	24285 - 19968: jis0208<<14 | 0x36<<7 | 0x02,
	24286 - 19968: jis0212<<14 | 0x1B<<7 | 0x38,
	24287 - 19968: jis0208<<14 | 0x28<<7 | 0x1F,
	24288 - 19968: jis0208<<14 | 0x1D<<7 | 0x12,
	24289 - 19968: jis0208<<14 | 0x36<<7 | 0x06,
	24290 - 19968: jis0208<<14 | 0x36<<7 | 0x05,
	24291 - 19968: jis0208<<14 | 0x36<<7 | 0x01,
	24293 - 19968: jis0212<<14 | 0x1B<<7 | 0x39,
	24296 - 19968: jis0208<<14 | 0x36<<7 | 0x07,
	24297 - 19968: jis0208<<14 | 0x36<<7 | 0x08,
	24299 - 19968: jis0212<<14 | 0x1B<<7 | 0x3A,
	24300 - 19968: jis0208<<14 | 0x36<<7 | 0x09,
	24304 - 19968: jis0208<<14 | 0x36<<7 | 0x0C,
	24305 - 19968: jis0208<<14 | 0x36<<7 | 0x0A,
	24307 - 19968: jis0208<<14 | 0x36<<7 | 0x0B,
	24308 - 19968: jis0208<<14 | 0x36<<7 | 0x0D,
	24310 - 19968: jis0208<<14 | 0x10<<7 | 0x43,
	24311 - 19968: jis0208<<14 | 0x23<<7 | 0x4D,
	24312 - 19968: jis0208<<14 | 0x36<<7 | 0x0E,
	24314 - 19968: jis0208<<14 | 0x16<<7 | 0x59,
	24315 - 19968: jis0208<<14 | 0x11<<7 | 0x55,
	24316 - 19968: jis0208<<14 | 0x26<<7 | 0x15,
	24318 - 19968: jis0208<<14 | 0x36<<7 | 0x0F,
	24319 - 19968: jis0208<<14 | 0x25<<7 | 0x5A,
	24321 - 19968: jis0208<<14 | 0x29<<7 | 0x3A,
	24322 - 19968: jis0212<<14 | 0x1B<<7 | 0x3B,
	24323 - 19968: jis0208<<14 | 0x36<<7 | 0x10,
	24324 - 19968: jis0208<<14 | 0x2E<<7 | 0x0D,
	24326 - 19968: jis0212<<14 | 0x1B<<7 | 0x3C,
	24327 - 19968: jis0212<<14 | 0x1B<<7 | 0x3D,
	24328 - 19968: jis0212<<14 | 0x1B<<7 | 0x3E,
	24329 - 19968: jis0208<<14 | 0x36<<7 | 0x11,
	24330 - 19968: jis0208<<14 | 0x29<<7 | 0x1F,
	24331 - 19968: jis0208<<14 | 0x36<<7 | 0x14,
	24332 - 19968: jis0208<<14 | 0x2F<<7 | 0x00,
	24333 - 19968: jis0208<<14 | 0x2F<<7 | 0x10,
	24334 - 19968: jis0212<<14 | 0x1B<<7 | 0x3F,
	24335 - 19968: jis0208<<14 | 0x1B<<7 | 0x0F,
	24336 - 19968: jis0208<<14 | 0x25<<7 | 0x54,
	24337 - 19968: jis0208<<14 | 0x36<<7 | 0x15,
	24339 - 19968: jis0208<<14 | 0x14<<7 | 0x3C,
	24340 - 19968: jis0208<<14 | 0x23<<7 | 0x03,
	24341 - 19968: jis0208<<14 | 0x0F<<7 | 0x59,
	24342 - 19968: jis0208<<14 | 0x36<<7 | 0x16,
	24343 - 19968: jis0208<<14 | 0x29<<7 | 0x05,
	24344 - 19968: jis0208<<14 | 0x18<<7 | 0x0F,
	24345 - 19968: jis0212<<14 | 0x1B<<7 | 0x40,
	24347 - 19968: jis0208<<14 | 0x22<<7 | 0x2F,
	24348 - 19968: jis0212<<14 | 0x1B<<7 | 0x41,
	24349 - 19968: jis0212<<14 | 0x1B<<7 | 0x42,
	24351 - 19968: jis0208<<14 | 0x23<<7 | 0x4E,
	24353 - 19968: jis0208<<14 | 0x58<<7 | 0x5A,
	24354 - 19968: jis0212<<14 | 0x1B<<7 | 0x44,
	24355 - 19968: jis0212<<14 | 0x1B<<7 | 0x45,
	24356 - 19968: jis0212<<14 | 0x1B<<7 | 0x46,
	24357 - 19968: jis0208<<14 | 0x2B<<7 | 0x4E,
	24358 - 19968: jis0208<<14 | 0x17<<7 | 0x18,
	24359 - 19968: jis0208<<14 | 0x17<<7 | 0x2B,
	24360 - 19968: jis0212<<14 | 0x1B<<7 | 0x47,
	24361 - 19968: jis0208<<14 | 0x36<<7 | 0x17,
	24363 - 19968: jis0212<<14 | 0x1B<<7 | 0x48,
	24364 - 19968: jis0212<<14 | 0x1B<<7 | 0x49,
	24365 - 19968: jis0208<<14 | 0x36<<7 | 0x18,
	24366 - 19968: jis0212<<14 | 0x1B<<7 | 0x4A,
	24367 - 19968: jis0208<<14 | 0x36<<7 | 0x1E,
	24368 - 19968: jis0212<<14 | 0x1B<<7 | 0x4B,
	24369 - 19968: jis0208<<14 | 0x1B<<7 | 0x44,
	24372 - 19968: jis0208<<14 | 0x58<<7 | 0x5B,
	24373 - 19968: jis0208<<14 | 0x23<<7 | 0x04,
	24374 - 19968: jis0212<<14 | 0x1B<<7 | 0x4D,
	24375 - 19968: jis0208<<14 | 0x15<<7 | 0x0E,
	24376 - 19968: jis0208<<14 | 0x36<<7 | 0x19,
	24379 - 19968: jis0212<<14 | 0x1B<<7 | 0x4E,
	24380 - 19968: jis0208<<14 | 0x28<<7 | 0x0A,
	24381 - 19968: jis0212<<14 | 0x1B<<7 | 0x4F,
	24382 - 19968: jis0208<<14 | 0x22<<7 | 0x25,
	24383 - 19968: jis0212<<14 | 0x1B<<7 | 0x50,
	24384 - 19968: jis0212<<14 | 0x1B<<7 | 0x51,
	24385 - 19968: jis0208<<14 | 0x36<<7 | 0x1A,
	24388 - 19968: jis0212<<14 | 0x1B<<7 | 0x52,
	24389 - 19968: jis0208<<14 | 0x58<<7 | 0x0B,
	24391 - 19968: jis0212<<14 | 0x1B<<7 | 0x54,
	24392 - 19968: jis0208<<14 | 0x36<<7 | 0x1B,
	24394 - 19968: jis0208<<14 | 0x15<<7 | 0x0F,
	24396 - 19968: jis0208<<14 | 0x36<<7 | 0x1C,
	24397 - 19968: jis0212<<14 | 0x1B<<7 | 0x55,
	24398 - 19968: jis0208<<14 | 0x36<<7 | 0x1D,
	24400 - 19968: jis0212<<14 | 0x1B<<7 | 0x56,
	24401 - 19968: jis0208<<14 | 0x36<<7 | 0x1F,
	24403 - 19968: jis0208<<14 | 0x24<<7 | 0x55,
	24404 - 19968: jis0212<<14 | 0x1B<<7 | 0x57,
	24406 - 19968: jis0208<<14 | 0x36<<7 | 0x20,
	24407 - 19968: jis0208<<14 | 0x36<<7 | 0x21,
	24408 - 19968: jis0212<<14 | 0x1B<<7 | 0x58,
	24409 - 19968: jis0208<<14 | 0x36<<7 | 0x22,
	24411 - 19968: jis0212<<14 | 0x1B<<7 | 0x59,
	24412 - 19968: jis0208<<14 | 0x36<<7 | 0x13,
	24413 - 19968: jis0208<<14 | 0x36<<7 | 0x12,
	24416 - 19968: jis0212<<14 | 0x1B<<7 | 0x5A,
	24417 - 19968: jis0208<<14 | 0x36<<7 | 0x23,
	24418 - 19968: jis0208<<14 | 0x16<<7 | 0x20,
	24419 - 19968: jis0212<<14 | 0x1B<<7 | 0x5B,
	24420 - 19968: jis0212<<14 | 0x1B<<7 | 0x5C,
	24422 - 19968: jis0208<<14 | 0x28<<7 | 0x06,
	24423 - 19968: jis0208<<14 | 0x58<<7 | 0x5C,
	24425 - 19968: jis0208<<14 | 0x19<<7 | 0x2B,
	24426 - 19968: jis0208<<14 | 0x28<<7 | 0x16,
	24427 - 19968: jis0208<<14 | 0x23<<7 | 0x05,
	24428 - 19968: jis0208<<14 | 0x28<<7 | 0x2A,
	24429 - 19968: jis0208<<14 | 0x36<<7 | 0x24,
	24431 - 19968: jis0212<<14 | 0x1C<<7 | 0x00,
	24432 - 19968: jis0208<<14 | 0x1D<<7 | 0x13,
	24433 - 19968: jis0208<<14 | 0x10<<7 | 0x25,
	24434 - 19968: jis0212<<14 | 0x1C<<7 | 0x01,
	24435 - 19968: jis0208<<14 | 0x36<<7 | 0x25,
	24436 - 19968: jis0212<<14 | 0x1C<<7 | 0x02,
	24437 - 19968: jis0212<<14 | 0x1C<<7 | 0x03,
	24439 - 19968: jis0208<<14 | 0x36<<7 | 0x26,
	24440 - 19968: jis0212<<14 | 0x1C<<7 | 0x04,
	24441 - 19968: jis0208<<14 | 0x2B<<7 | 0x51,
	24442 - 19968: jis0212<<14 | 0x1C<<7 | 0x05,
	24444 - 19968: jis0208<<14 | 0x27<<7 | 0x3F,
	24445 - 19968: jis0212<<14 | 0x1C<<7 | 0x06,
	24446 - 19968: jis0212<<14 | 0x1C<<7 | 0x07,
	24447 - 19968: jis0208<<14 | 0x36<<7 | 0x29,
	24448 - 19968: jis0208<<14 | 0x10<<7 | 0x5C,
	24449 - 19968: jis0208<<14 | 0x1F<<7 | 0x0B,
	24450 - 19968: jis0208<<14 | 0x36<<7 | 0x28,
	24451 - 19968: jis0208<<14 | 0x36<<7 | 0x27,
	24452 - 19968: jis0208<<14 | 0x16<<7 | 0x21,
	24453 - 19968: jis0208<<14 | 0x21<<7 | 0x33,
	24455 - 19968: jis0208<<14 | 0x36<<7 | 0x2D,
	24456 - 19968: jis0208<<14 | 0x36<<7 | 0x2B,
	24457 - 19968: jis0212<<14 | 0x1C<<7 | 0x08,
	24458 - 19968: jis0208<<14 | 0x36<<7 | 0x2A,
	24459 - 19968: jis0208<<14 | 0x2D<<7 | 0x06,
	24460 - 19968: jis0208<<14 | 0x17<<7 | 0x44,
	24461 - 19968: jis0212<<14 | 0x1C<<7 | 0x09,
	24463 - 19968: jis0212<<14 | 0x1C<<7 | 0x0A,
	24464 - 19968: jis0208<<14 | 0x1C<<7 | 0x58,
	24465 - 19968: jis0208<<14 | 0x36<<7 | 0x2C,
	24466 - 19968: jis0208<<14 | 0x24<<7 | 0x2B,
	24467 - 19968: jis0208<<14 | 0x1C<<7 | 0x1D,
	24470 - 19968: jis0212<<14 | 0x1C<<7 | 0x0B,
	24471 - 19968: jis0208<<14 | 0x25<<7 | 0x1F,
	24472 - 19968: jis0208<<14 | 0x36<<7 | 0x30,
	24473 - 19968: jis0208<<14 | 0x36<<7 | 0x2F,
	24476 - 19968: jis0212<<14 | 0x1C<<7 | 0x0C,
	24477 - 19968: jis0212<<14 | 0x1C<<7 | 0x0D,
	24478 - 19968: jis0208<<14 | 0x36<<7 | 0x2E,
	24480 - 19968: jis0208<<14 | 0x36<<7 | 0x31,
	24481 - 19968: jis0208<<14 | 0x17<<7 | 0x45,
	24482 - 19968: jis0212<<14 | 0x1C<<7 | 0x0E,
	24484 - 19968: jis0212<<14 | 0x1C<<7 | 0x11,
	24487 - 19968: jis0212<<14 | 0x1C<<7 | 0x0F,
	24488 - 19968: jis0208<<14 | 0x36<<7 | 0x32,
	24489 - 19968: jis0208<<14 | 0x28<<7 | 0x5B,
	24490 - 19968: jis0208<<14 | 0x1C<<7 | 0x3A,
	24491 - 19968: jis0212<<14 | 0x1C<<7 | 0x10,
	24492 - 19968: jis0212<<14 | 0x1C<<7 | 0x12,
	24493 - 19968: jis0208<<14 | 0x36<<7 | 0x33,
	24494 - 19968: jis0208<<14 | 0x27<<7 | 0x58,
	24495 - 19968: jis0212<<14 | 0x1C<<7 | 0x13,
	24496 - 19968: jis0212<<14 | 0x1C<<7 | 0x14,
	24497 - 19968: jis0212<<14 | 0x1C<<7 | 0x15,
	24499 - 19968: jis0208<<14 | 0x25<<7 | 0x20,
	24500 - 19968: jis0208<<14 | 0x23<<7 | 0x06,
	24503 - 19968: jis0208<<14 | 0x58<<7 | 0x5D,
	24504 - 19968: jis0212<<14 | 0x1C<<7 | 0x16,
	24505 - 19968: jis0208<<14 | 0x24<<7 | 0x0F,
	24508 - 19968: jis0208<<14 | 0x36<<7 | 0x34,
	24509 - 19968: jis0208<<14 | 0x14<<7 | 0x0A,
	24515 - 19968: jis0208<<14 | 0x1E<<7 | 0x13,
	24516 - 19968: jis0212<<14 | 0x1C<<7 | 0x17,
	24517 - 19968: jis0208<<14 | 0x28<<7 | 0x0B,
	24519 - 19968: jis0212<<14 | 0x1C<<7 | 0x18,
	24520 - 19968: jis0212<<14 | 0x1C<<7 | 0x19,
	24521 - 19968: jis0212<<14 | 0x1C<<7 | 0x1A,
	24523 - 19968: jis0212<<14 | 0x1C<<7 | 0x1B,
	24524 - 19968: jis0208<<14 | 0x13<<7 | 0x56,
	24525 - 19968: jis0208<<14 | 0x26<<7 | 0x05,
	24528 - 19968: jis0212<<14 | 0x1C<<7 | 0x1C,
	24529 - 19968: jis0212<<14 | 0x1C<<7 | 0x1D,
	24530 - 19968: jis0212<<14 | 0x1C<<7 | 0x1E,
	24531 - 19968: jis0212<<14 | 0x1C<<7 | 0x1F,
	24532 - 19968: jis0212<<14 | 0x1C<<7 | 0x20,
	24534 - 19968: jis0208<<14 | 0x36<<7 | 0x35,
	24535 - 19968: jis0208<<14 | 0x1A<<7 | 0x35,
	24536 - 19968: jis0208<<14 | 0x2A<<7 | 0x19,
	24537 - 19968: jis0208<<14 | 0x2A<<7 | 0x1A,
	24540 - 19968: jis0208<<14 | 0x10<<7 | 0x5D,
	24541 - 19968: jis0208<<14 | 0x36<<7 | 0x3A,
	24542 - 19968: jis0208<<14 | 0x59<<7 | 0x00,
	24544 - 19968: jis0208<<14 | 0x22<<7 | 0x48,
	24545 - 19968: jis0212<<14 | 0x1C<<7 | 0x22,
	24546 - 19968: jis0212<<14 | 0x1C<<7 | 0x23,
	24548 - 19968: jis0208<<14 | 0x36<<7 | 0x37,
	24552 - 19968: jis0212<<14 | 0x1C<<7 | 0x24,
	24553 - 19968: jis0212<<14 | 0x1C<<7 | 0x25,
	24554 - 19968: jis0212<<14 | 0x1C<<7 | 0x26,
	24555 - 19968: jis0208<<14 | 0x11<<7 | 0x56,
	24556 - 19968: jis0212<<14 | 0x1C<<7 | 0x27,
	24557 - 19968: jis0212<<14 | 0x1C<<7 | 0x28,
	24558 - 19968: jis0212<<14 | 0x1C<<7 | 0x29,
	24559 - 19968: jis0212<<14 | 0x1C<<7 | 0x2A,
	24560 - 19968: jis0208<<14 | 0x37<<7 | 0x0C,
	24561 - 19968: jis0208<<14 | 0x36<<7 | 0x39,
	24562 - 19968: jis0212<<14 | 0x1C<<7 | 0x2B,
	24563 - 19968: jis0212<<14 | 0x1C<<7 | 0x2C,
	24565 - 19968: jis0208<<14 | 0x26<<7 | 0x0F,
	24566 - 19968: jis0212<<14 | 0x1C<<7 | 0x2D,
	24568 - 19968: jis0208<<14 | 0x36<<7 | 0x38,
	24570 - 19968: jis0212<<14 | 0x1C<<7 | 0x2E,
	24571 - 19968: jis0208<<14 | 0x36<<7 | 0x36,
	24572 - 19968: jis0212<<14 | 0x1C<<7 | 0x2F,
	24573 - 19968: jis0208<<14 | 0x18<<7 | 0x59,
	24575 - 19968: jis0208<<14 | 0x36<<7 | 0x3C,
	24583 - 19968: jis0212<<14 | 0x1C<<7 | 0x30,
	24586 - 19968: jis0212<<14 | 0x1C<<7 | 0x31,
	24589 - 19968: jis0212<<14 | 0x1C<<7 | 0x32,
	24590 - 19968: jis0208<<14 | 0x36<<7 | 0x42,
	24591 - 19968: jis0208<<14 | 0x36<<7 | 0x48,
	24592 - 19968: jis0208<<14 | 0x36<<7 | 0x40,
	24594 - 19968: jis0208<<14 | 0x24<<7 | 0x3B,
	24595 - 19968: jis0212<<14 | 0x1C<<7 | 0x33,
	24596 - 19968: jis0212<<14 | 0x1C<<7 | 0x34,
	24597 - 19968: jis0208<<14 | 0x36<<7 | 0x45,
	24598 - 19968: jis0208<<14 | 0x28<<7 | 0x3C,
	24599 - 19968: jis0212<<14 | 0x1C<<7 | 0x35,
	24600 - 19968: jis0212<<14 | 0x1C<<7 | 0x36,
	24601 - 19968: jis0208<<14 | 0x36<<7 | 0x3F,
	24602 - 19968: jis0212<<14 | 0x1C<<7 | 0x37,
	24603 - 19968: jis0208<<14 | 0x36<<7 | 0x44,
	24604 - 19968: jis0208<<14 | 0x2D<<7 | 0x46,
	24605 - 19968: jis0208<<14 | 0x1A<<7 | 0x36,
	24607 - 19968: jis0212<<14 | 0x1C<<7 | 0x38,
	24608 - 19968: jis0208<<14 | 0x21<<7 | 0x34,
	24609 - 19968: jis0208<<14 | 0x36<<7 | 0x3D,
	24612 - 19968: jis0212<<14 | 0x1C<<7 | 0x39,
	24613 - 19968: jis0208<<14 | 0x14<<7 | 0x3D,
	24614 - 19968: jis0208<<14 | 0x36<<7 | 0x47,
	24615 - 19968: jis0208<<14 | 0x1F<<7 | 0x0C,
	24616 - 19968: jis0208<<14 | 0x10<<7 | 0x44,
	24617 - 19968: jis0208<<14 | 0x36<<7 | 0x41,
	24618 - 19968: jis0208<<14 | 0x11<<7 | 0x57,
	24619 - 19968: jis0208<<14 | 0x36<<7 | 0x46,
	24621 - 19968: jis0212<<14 | 0x1C<<7 | 0x3A,
	24623 - 19968: jis0208<<14 | 0x15<<7 | 0x10,
	24625 - 19968: jis0208<<14 | 0x36<<7 | 0x43,
	24627 - 19968: jis0212<<14 | 0x1C<<7 | 0x3B,
	24629 - 19968: jis0212<<14 | 0x1C<<7 | 0x3C,
	24634 - 19968: jis0208<<14 | 0x36<<7 | 0x49,
	24640 - 19968: jis0212<<14 | 0x1C<<7 | 0x3D,
	24641 - 19968: jis0208<<14 | 0x36<<7 | 0x4B,
	24642 - 19968: jis0208<<14 | 0x36<<7 | 0x55,
	24643 - 19968: jis0208<<14 | 0x36<<7 | 0x53,
	24646 - 19968: jis0208<<14 | 0x36<<7 | 0x50,
	24647 - 19968: jis0212<<14 | 0x1C<<7 | 0x3E,
	24648 - 19968: jis0212<<14 | 0x1C<<7 | 0x3F,
	24649 - 19968: jis0212<<14 | 0x1C<<7 | 0x40,
	24650 - 19968: jis0208<<14 | 0x36<<7 | 0x4F,
	24651 - 19968: jis0208<<14 | 0x2D<<7 | 0x57,
	24652 - 19968: jis0212<<14 | 0x1C<<7 | 0x41,
	24653 - 19968: jis0208<<14 | 0x36<<7 | 0x51,
	24656 - 19968: jis0208<<14 | 0x15<<7 | 0x11,
	24657 - 19968: jis0212<<14 | 0x1C<<7 | 0x42,
	24658 - 19968: jis0208<<14 | 0x18<<7 | 0x10,
	24660 - 19968: jis0212<<14 | 0x1C<<7 | 0x43,
	24661 - 19968: jis0208<<14 | 0x1C<<7 | 0x59,
	24662 - 19968: jis0212<<14 | 0x1C<<7 | 0x44,
	24663 - 19968: jis0212<<14 | 0x1C<<7 | 0x45,
	24665 - 19968: jis0208<<14 | 0x36<<7 | 0x58,
	24666 - 19968: jis0208<<14 | 0x36<<7 | 0x4A,
	24669 - 19968: jis0208<<14 | 0x59<<7 | 0x01,
	24671 - 19968: jis0208<<14 | 0x36<<7 | 0x4E,
	24672 - 19968: jis0208<<14 | 0x36<<7 | 0x3E,
	24673 - 19968: jis0212<<14 | 0x1C<<7 | 0x47,
	24674 - 19968: jis0208<<14 | 0x11<<7 | 0x59,
	24675 - 19968: jis0208<<14 | 0x36<<7 | 0x52,
	24676 - 19968: jis0208<<14 | 0x36<<7 | 0x54,
	24677 - 19968: jis0208<<14 | 0x22<<7 | 0x30,
	24679 - 19968: jis0212<<14 | 0x1C<<7 | 0x48,
	24680 - 19968: jis0208<<14 | 0x19<<7 | 0x07,
	24681 - 19968: jis0208<<14 | 0x11<<7 | 0x17,
	24682 - 19968: jis0208<<14 | 0x36<<7 | 0x4C,
	24683 - 19968: jis0208<<14 | 0x36<<7 | 0x57,
	24684 - 19968: jis0208<<14 | 0x36<<7 | 0x56,
	24685 - 19968: jis0208<<14 | 0x15<<7 | 0x12,
	24687 - 19968: jis0208<<14 | 0x21<<7 | 0x08,
	24688 - 19968: jis0208<<14 | 0x12<<7 | 0x45,
	24689 - 19968: jis0212<<14 | 0x1C<<7 | 0x49,
	24693 - 19968: jis0208<<14 | 0x16<<7 | 0x22,
	24695 - 19968: jis0208<<14 | 0x36<<7 | 0x4D,
	24702 - 19968: jis0212<<14 | 0x1C<<7 | 0x4A,
	24703 - 19968: jis0212<<14 | 0x1C<<7 | 0x4B,
	24705 - 19968: jis0208<<14 | 0x36<<7 | 0x59,
	24706 - 19968: jis0212<<14 | 0x1C<<7 | 0x4C,
	24707 - 19968: jis0208<<14 | 0x36<<7 | 0x5C,
	24708 - 19968: jis0208<<14 | 0x37<<7 | 0x00,
	24709 - 19968: jis0208<<14 | 0x59<<7 | 0x02,
	24710 - 19968: jis0212<<14 | 0x1C<<7 | 0x4D,
	24712 - 19968: jis0212<<14 | 0x1C<<7 | 0x4E,
	24713 - 19968: jis0208<<14 | 0x1B<<7 | 0x1C,
	24714 - 19968: jis0208<<14 | 0x59<<7 | 0x03,
	24715 - 19968: jis0208<<14 | 0x37<<7 | 0x06,
	24716 - 19968: jis0208<<14 | 0x23<<7 | 0x4F,
	24717 - 19968: jis0208<<14 | 0x36<<7 | 0x5A,
	24718 - 19968: jis0212<<14 | 0x1C<<7 | 0x50,
	24721 - 19968: jis0212<<14 | 0x1C<<7 | 0x51,
	24722 - 19968: jis0208<<14 | 0x37<<7 | 0x04,
	24723 - 19968: jis0212<<14 | 0x1C<<7 | 0x52,
	24724 - 19968: jis0208<<14 | 0x11<<7 | 0x58,
	24725 - 19968: jis0212<<14 | 0x1C<<7 | 0x53,
	24726 - 19968: jis0208<<14 | 0x37<<7 | 0x02,
	24727 - 19968: jis0208<<14 | 0x37<<7 | 0x03,
	24728 - 19968: jis0212<<14 | 0x1C<<7 | 0x54,
	24730 - 19968: jis0208<<14 | 0x36<<7 | 0x5D,
	24731 - 19968: jis0208<<14 | 0x37<<7 | 0x01,
	24733 - 19968: jis0212<<14 | 0x1C<<7 | 0x55,
	24734 - 19968: jis0212<<14 | 0x1C<<7 | 0x56,
	24735 - 19968: jis0208<<14 | 0x17<<7 | 0x46,
	24736 - 19968: jis0208<<14 | 0x2C<<7 | 0x09,
	24738 - 19968: jis0212<<14 | 0x1C<<7 | 0x57,
	24739 - 19968: jis0208<<14 | 0x13<<7 | 0x14,
	24740 - 19968: jis0212<<14 | 0x1C<<7 | 0x58,
	24741 - 19968: jis0212<<14 | 0x1C<<7 | 0x59,
	24742 - 19968: jis0208<<14 | 0x10<<7 | 0x38,
	24743 - 19968: jis0208<<14 | 0x37<<7 | 0x05,
	24744 - 19968: jis0212<<14 | 0x1C<<7 | 0x5A,
	24745 - 19968: jis0208<<14 | 0x26<<7 | 0x19,
	24746 - 19968: jis0208<<14 | 0x0F<<7 | 0x0C,
	24752 - 19968: jis0212<<14 | 0x1C<<7 | 0x5B,
	24753 - 19968: jis0212<<14 | 0x1C<<7 | 0x5C,
	24754 - 19968: jis0208<<14 | 0x27<<7 | 0x40,
	24755 - 19968: jis0208<<14 | 0x36<<7 | 0x3B,
	24756 - 19968: jis0208<<14 | 0x37<<7 | 0x0B,
	24757 - 19968: jis0208<<14 | 0x37<<7 | 0x0F,
	24758 - 19968: jis0208<<14 | 0x2B<<7 | 0x44,
	24759 - 19968: jis0212<<14 | 0x1C<<7 | 0x5D,
	24760 - 19968: jis0208<<14 | 0x37<<7 | 0x08,
	24763 - 19968: jis0212<<14 | 0x1D<<7 | 0x00,
	24764 - 19968: jis0208<<14 | 0x24<<7 | 0x48,
	24765 - 19968: jis0208<<14 | 0x37<<7 | 0x0D,
	24766 - 19968: jis0212<<14 | 0x1D<<7 | 0x01,
	24770 - 19968: jis0212<<14 | 0x1D<<7 | 0x02,
	24772 - 19968: jis0212<<14 | 0x1D<<7 | 0x03,
	24773 - 19968: jis0208<<14 | 0x1D<<7 | 0x4F,
	24774 - 19968: jis0208<<14 | 0x37<<7 | 0x0E,
	24775 - 19968: jis0208<<14 | 0x25<<7 | 0x36,
	24776 - 19968: jis0212<<14 | 0x1D<<7 | 0x04,
	24777 - 19968: jis0212<<14 | 0x1D<<7 | 0x05,
	24778 - 19968: jis0212<<14 | 0x1D<<7 | 0x06,
	24779 - 19968: jis0212<<14 | 0x1D<<7 | 0x07,
	24782 - 19968: jis0212<<14 | 0x1D<<7 | 0x08,
	24783 - 19968: jis0212<<14 | 0x1D<<7 | 0x09,
	24785 - 19968: jis0208<<14 | 0x2E<<7 | 0x26,
	24787 - 19968: jis0208<<14 | 0x37<<7 | 0x0A,
	24788 - 19968: jis0212<<14 | 0x1D<<7 | 0x0A,
	24789 - 19968: jis0208<<14 | 0x59<<7 | 0x05,
	24792 - 19968: jis0208<<14 | 0x37<<7 | 0x10,
	24793 - 19968: jis0212<<14 | 0x1D<<7 | 0x0C,
	24794 - 19968: jis0208<<14 | 0x18<<7 | 0x5A,
	24795 - 19968: jis0212<<14 | 0x1D<<7 | 0x0D,
	24796 - 19968: jis0208<<14 | 0x1F<<7 | 0x2A,
	24797 - 19968: jis0212<<14 | 0x1D<<7 | 0x0E,
	24798 - 19968: jis0208<<14 | 0x59<<7 | 0x04,
	24799 - 19968: jis0208<<14 | 0x0F<<7 | 0x33,
	24800 - 19968: jis0208<<14 | 0x37<<7 | 0x09,
	24801 - 19968: jis0208<<14 | 0x37<<7 | 0x07,
	24802 - 19968: jis0212<<14 | 0x1D<<7 | 0x10,
	24803 - 19968: jis0208<<14 | 0x20<<7 | 0x39,
	24805 - 19968: jis0212<<14 | 0x1D<<7 | 0x11,
	24807 - 19968: jis0208<<14 | 0x36<<7 | 0x5B,
	24808 - 19968: jis0208<<14 | 0x1A<<7 | 0x13,
	24816 - 19968: jis0208<<14 | 0x21<<7 | 0x25,
	24817 - 19968: jis0208<<14 | 0x37<<7 | 0x1C,
	24818 - 19968: jis0208<<14 | 0x59<<7 | 0x07,
	24819 - 19968: jis0208<<14 | 0x20<<7 | 0x3A,
	24820 - 19968: jis0208<<14 | 0x37<<7 | 0x17,
	24821 - 19968: jis0212<<14 | 0x1D<<7 | 0x13,
	24822 - 19968: jis0208<<14 | 0x37<<7 | 0x14,
	24823 - 19968: jis0208<<14 | 0x37<<7 | 0x15,
	24824 - 19968: jis0212<<14 | 0x1D<<7 | 0x14,
	24825 - 19968: jis0208<<14 | 0x1B<<7 | 0x45,
	24826 - 19968: jis0208<<14 | 0x37<<7 | 0x18,
	24827 - 19968: jis0208<<14 | 0x37<<7 | 0x1B,
	24828 - 19968: jis0212<<14 | 0x1D<<7 | 0x15,
	24829 - 19968: jis0212<<14 | 0x1D<<7 | 0x16,
	24832 - 19968: jis0208<<14 | 0x37<<7 | 0x16,
	24833 - 19968: jis0208<<14 | 0x1C<<7 | 0x04,
	24834 - 19968: jis0212<<14 | 0x1D<<7 | 0x17,
	24835 - 19968: jis0208<<14 | 0x37<<7 | 0x19,
	24838 - 19968: jis0208<<14 | 0x37<<7 | 0x13,
	24839 - 19968: jis0212<<14 | 0x1D<<7 | 0x18,
	24840 - 19968: jis0208<<14 | 0x2B<<7 | 0x5B,
	24841 - 19968: jis0208<<14 | 0x2B<<7 | 0x5A,
	24842 - 19968: jis0212<<14 | 0x1D<<7 | 0x19,
	24844 - 19968: jis0212<<14 | 0x1D<<7 | 0x1A,
	24845 - 19968: jis0208<<14 | 0x37<<7 | 0x1D,
	24846 - 19968: jis0208<<14 | 0x37<<7 | 0x1E,
	24847 - 19968: jis0208<<14 | 0x0F<<7 | 0x34,
	24848 - 19968: jis0212<<14 | 0x1D<<7 | 0x1B,
	24849 - 19968: jis0208<<14 | 0x59<<7 | 0x08,
	24850 - 19968: jis0212<<14 | 0x1D<<7 | 0x1D,
	24851 - 19968: jis0212<<14 | 0x1D<<7 | 0x1E,
	24852 - 19968: jis0212<<14 | 0x1D<<7 | 0x1F,
	24853 - 19968: jis0208<<14 | 0x37<<7 | 0x12,
	24854 - 19968: jis0212<<14 | 0x1D<<7 | 0x20,
	24855 - 19968: jis0212<<14 | 0x1D<<7 | 0x21,
	24857 - 19968: jis0212<<14 | 0x1D<<7 | 0x22,
	24858 - 19968: jis0208<<14 | 0x15<<7 | 0x51,
	24859 - 19968: jis0208<<14 | 0x0F<<7 | 0x05,
	24860 - 19968: jis0212<<14 | 0x1D<<7 | 0x23,
	24862 - 19968: jis0212<<14 | 0x1D<<7 | 0x24,
	24863 - 19968: jis0208<<14 | 0x13<<7 | 0x15,
	24864 - 19968: jis0208<<14 | 0x59<<7 | 0x06,
	24865 - 19968: jis0208<<14 | 0x37<<7 | 0x1A,
	24866 - 19968: jis0212<<14 | 0x1D<<7 | 0x25,
	24871 - 19968: jis0208<<14 | 0x37<<7 | 0x22,
	24872 - 19968: jis0208<<14 | 0x37<<7 | 0x21,
	24874 - 19968: jis0212<<14 | 0x1D<<7 | 0x26,
	24875 - 19968: jis0212<<14 | 0x1D<<7 | 0x27,
	24876 - 19968: jis0208<<14 | 0x37<<7 | 0x26,
	24880 - 19968: jis0208<<14 | 0x59<<7 | 0x0A,
	24881 - 19968: jis0212<<14 | 0x1D<<7 | 0x29,
	24884 - 19968: jis0208<<14 | 0x37<<7 | 0x27,
	24885 - 19968: jis0212<<14 | 0x1D<<7 | 0x2A,
	24886 - 19968: jis0212<<14 | 0x1D<<7 | 0x2B,
	24887 - 19968: jis0208<<14 | 0x59<<7 | 0x09,
	24889 - 19968: jis0212<<14 | 0x1D<<7 | 0x2D,
	24892 - 19968: jis0208<<14 | 0x37<<7 | 0x25,
	24893 - 19968: jis0208<<14 | 0x37<<7 | 0x28,
	24894 - 19968: jis0208<<14 | 0x37<<7 | 0x20,
	24895 - 19968: jis0208<<14 | 0x37<<7 | 0x24,
	24897 - 19968: jis0212<<14 | 0x1D<<7 | 0x2E,
	24898 - 19968: jis0208<<14 | 0x37<<7 | 0x29,
	24900 - 19968: jis0208<<14 | 0x37<<7 | 0x2A,
	24901 - 19968: jis0212<<14 | 0x1D<<7 | 0x2F,
	24902 - 19968: jis0212<<14 | 0x1D<<7 | 0x30,
	24903 - 19968: jis0208<<14 | 0x37<<7 | 0x1F,
	24904 - 19968: jis0208<<14 | 0x1A<<7 | 0x5B,
	24905 - 19968: jis0212<<14 | 0x1D<<7 | 0x31,
	24906 - 19968: jis0208<<14 | 0x37<<7 | 0x23,
	24907 - 19968: jis0208<<14 | 0x21<<7 | 0x35,
	24908 - 19968: jis0208<<14 | 0x18<<7 | 0x11,
	24909 - 19968: jis0208<<14 | 0x37<<7 | 0x11,
	24910 - 19968: jis0208<<14 | 0x1E<<7 | 0x14,
	24915 - 19968: jis0208<<14 | 0x37<<7 | 0x37,
	24917 - 19968: jis0208<<14 | 0x29<<7 | 0x48,
	24920 - 19968: jis0208<<14 | 0x37<<7 | 0x2D,
	24921 - 19968: jis0208<<14 | 0x37<<7 | 0x2E,
	24922 - 19968: jis0208<<14 | 0x37<<7 | 0x2F,
	24925 - 19968: jis0208<<14 | 0x37<<7 | 0x36,
	24926 - 19968: jis0212<<14 | 0x1D<<7 | 0x32,
	24927 - 19968: jis0208<<14 | 0x37<<7 | 0x35,
	24928 - 19968: jis0212<<14 | 0x1D<<7 | 0x33,
	24930 - 19968: jis0208<<14 | 0x2A<<7 | 0x5C,
	24931 - 19968: jis0208<<14 | 0x13<<7 | 0x16,
	24933 - 19968: jis0208<<14 | 0x37<<7 | 0x33,
	24935 - 19968: jis0208<<14 | 0x16<<7 | 0x24,
	24936 - 19968: jis0208<<14 | 0x12<<7 | 0x13,
	24939 - 19968: jis0208<<14 | 0x37<<7 | 0x30,
	24940 - 19968: jis0212<<14 | 0x1D<<7 | 0x34,
	24942 - 19968: jis0208<<14 | 0x2D<<7 | 0x17,
	24943 - 19968: jis0208<<14 | 0x37<<7 | 0x32,
	24944 - 19968: jis0208<<14 | 0x0F<<7 | 0x35,
	24945 - 19968: jis0208<<14 | 0x37<<7 | 0x34,
	24946 - 19968: jis0212<<14 | 0x1D<<7 | 0x35,
	24947 - 19968: jis0208<<14 | 0x37<<7 | 0x2B,
	24948 - 19968: jis0208<<14 | 0x37<<7 | 0x31,
	24949 - 19968: jis0208<<14 | 0x37<<7 | 0x38,
	24950 - 19968: jis0208<<14 | 0x16<<7 | 0x23,
	24951 - 19968: jis0208<<14 | 0x37<<7 | 0x2C,
	24952 - 19968: jis0212<<14 | 0x1D<<7 | 0x36,
	24955 - 19968: jis0212<<14 | 0x1D<<7 | 0x37,
	24956 - 19968: jis0212<<14 | 0x1D<<7 | 0x38,
	24958 - 19968: jis0208<<14 | 0x2C<<7 | 0x3C,
	24959 - 19968: jis0212<<14 | 0x1D<<7 | 0x39,
	24960 - 19968: jis0212<<14 | 0x1D<<7 | 0x3A,
	24961 - 19968: jis0212<<14 | 0x1D<<7 | 0x3B,
	24962 - 19968: jis0208<<14 | 0x2C<<7 | 0x0A,
	24963 - 19968: jis0212<<14 | 0x1D<<7 | 0x3C,
	24964 - 19968: jis0212<<14 | 0x1D<<7 | 0x3D,
	24967 - 19968: jis0208<<14 | 0x37<<7 | 0x3B,
	24970 - 19968: jis0208<<14 | 0x37<<7 | 0x3F,
	24971 - 19968: jis0212<<14 | 0x1D<<7 | 0x3E,
	24973 - 19968: jis0212<<14 | 0x1D<<7 | 0x3F,
	24974 - 19968: jis0208<<14 | 0x20<<7 | 0x5D,
	24976 - 19968: jis0208<<14 | 0x2D<<7 | 0x58,
	24977 - 19968: jis0208<<14 | 0x37<<7 | 0x40,
	24978 - 19968: jis0212<<14 | 0x1D<<7 | 0x40,
	24979 - 19968: jis0212<<14 | 0x1D<<7 | 0x41,
	24980 - 19968: jis0208<<14 | 0x37<<7 | 0x3D,
	24982 - 19968: jis0208<<14 | 0x37<<7 | 0x3A,
	24983 - 19968: jis0212<<14 | 0x1D<<7 | 0x42,
	24984 - 19968: jis0208<<14 | 0x59<<7 | 0x0B,
	24985 - 19968: jis0208<<14 | 0x37<<7 | 0x39,
	24986 - 19968: jis0208<<14 | 0x37<<7 | 0x3E,
	24988 - 19968: jis0212<<14 | 0x1D<<7 | 0x44,
	24989 - 19968: jis0212<<14 | 0x1D<<7 | 0x45,
	24991 - 19968: jis0212<<14 | 0x1D<<7 | 0x46,
	24992 - 19968: jis0212<<14 | 0x1D<<7 | 0x47,
	24996 - 19968: jis0208<<14 | 0x29<<7 | 0x0F,
	24997 - 19968: jis0212<<14 | 0x1D<<7 | 0x48,
	24999 - 19968: jis0208<<14 | 0x25<<7 | 0x13,
	25000 - 19968: jis0212<<14 | 0x1D<<7 | 0x49,
	25001 - 19968: jis0208<<14 | 0x16<<7 | 0x25,
	25002 - 19968: jis0212<<14 | 0x1D<<7 | 0x4A,
	25003 - 19968: jis0208<<14 | 0x37<<7 | 0x41,
	25004 - 19968: jis0208<<14 | 0x37<<7 | 0x3C,
	25005 - 19968: jis0212<<14 | 0x1D<<7 | 0x4B,
	25006 - 19968: jis0208<<14 | 0x37<<7 | 0x42,
	25010 - 19968: jis0208<<14 | 0x16<<7 | 0x5A,
	25014 - 19968: jis0208<<14 | 0x11<<7 | 0x10,
	25016 - 19968: jis0212<<14 | 0x1D<<7 | 0x4C,
	25017 - 19968: jis0212<<14 | 0x1D<<7 | 0x4D,
	25018 - 19968: jis0208<<14 | 0x37<<7 | 0x4A,
	25020 - 19968: jis0212<<14 | 0x1D<<7 | 0x4E,
	25022 - 19968: jis0208<<14 | 0x13<<7 | 0x17,
	25024 - 19968: jis0212<<14 | 0x1D<<7 | 0x4F,
	25025 - 19968: jis0212<<14 | 0x1D<<7 | 0x50,
	25026 - 19968: jis0212<<14 | 0x1D<<7 | 0x51,
	25027 - 19968: jis0208<<14 | 0x37<<7 | 0x48,
	25030 - 19968: jis0208<<14 | 0x37<<7 | 0x49,
	25031 - 19968: jis0208<<14 | 0x19<<7 | 0x08,
	25032 - 19968: jis0208<<14 | 0x37<<7 | 0x47,
	25033 - 19968: jis0208<<14 | 0x37<<7 | 0x45,
	25034 - 19968: jis0208<<14 | 0x37<<7 | 0x44,
	25035 - 19968: jis0208<<14 | 0x37<<7 | 0x4B,
	25036 - 19968: jis0208<<14 | 0x37<<7 | 0x43,
	25037 - 19968: jis0208<<14 | 0x37<<7 | 0x4D,
	25038 - 19968: jis0212<<14 | 0x1D<<7 | 0x52,
	25039 - 19968: jis0212<<14 | 0x1D<<7 | 0x53,
	25040 - 19968: jis0208<<14 | 0x11<<7 | 0x5A,
	25045 - 19968: jis0212<<14 | 0x1D<<7 | 0x54,
	25052 - 19968: jis0212<<14 | 0x1D<<7 | 0x55,
	25053 - 19968: jis0212<<14 | 0x1D<<7 | 0x56,
	25054 - 19968: jis0212<<14 | 0x1D<<7 | 0x57,
	25055 - 19968: jis0212<<14 | 0x1D<<7 | 0x58,
	25057 - 19968: jis0212<<14 | 0x1D<<7 | 0x59,
	25058 - 19968: jis0212<<14 | 0x1D<<7 | 0x5A,
	25059 - 19968: jis0208<<14 | 0x37<<7 | 0x4F,
	25061 - 19968: jis0212<<14 | 0x1D<<7 | 0x5D,
	25062 - 19968: jis0208<<14 | 0x37<<7 | 0x4E,
	25063 - 19968: jis0212<<14 | 0x1D<<7 | 0x5B,
	25065 - 19968: jis0212<<14 | 0x1D<<7 | 0x5C,
	25068 - 19968: jis0212<<14 | 0x1E<<7 | 0x00,
	25069 - 19968: jis0212<<14 | 0x1E<<7 | 0x01,
	25071 - 19968: jis0212<<14 | 0x1E<<7 | 0x02,
	25074 - 19968: jis0208<<14 | 0x23<<7 | 0x07,
	25076 - 19968: jis0208<<14 | 0x37<<7 | 0x52,
	25078 - 19968: jis0208<<14 | 0x37<<7 | 0x50,
	25079 - 19968: jis0208<<14 | 0x37<<7 | 0x46,
	25080 - 19968: jis0208<<14 | 0x16<<7 | 0x5B,
	25082 - 19968: jis0208<<14 | 0x37<<7 | 0x51,
	25084 - 19968: jis0208<<14 | 0x37<<7 | 0x55,
	25085 - 19968: jis0208<<14 | 0x37<<7 | 0x54,
	25086 - 19968: jis0208<<14 | 0x37<<7 | 0x56,
	25087 - 19968: jis0208<<14 | 0x37<<7 | 0x53,
	25088 - 19968: jis0208<<14 | 0x37<<7 | 0x57,
	25089 - 19968: jis0212<<14 | 0x1E<<7 | 0x03,
	25091 - 19968: jis0212<<14 | 0x1E<<7 | 0x04,
	25092 - 19968: jis0212<<14 | 0x1E<<7 | 0x05,
	25095 - 19968: jis0212<<14 | 0x1E<<7 | 0x06,
	25096 - 19968: jis0208<<14 | 0x37<<7 | 0x58,
	25097 - 19968: jis0208<<14 | 0x37<<7 | 0x59,
	25098 - 19968: jis0208<<14 | 0x29<<7 | 0x49,
	25100 - 19968: jis0208<<14 | 0x37<<7 | 0x5B,
	25101 - 19968: jis0208<<14 | 0x37<<7 | 0x5A,
	25102 - 19968: jis0208<<14 | 0x1C<<7 | 0x1E,
	25104 - 19968: jis0208<<14 | 0x1F<<7 | 0x0D,
	25105 - 19968: jis0208<<14 | 0x11<<7 | 0x45,
	25106 - 19968: jis0208<<14 | 0x11<<7 | 0x5B,
	25107 - 19968: jis0208<<14 | 0x59<<7 | 0x0C,
	25108 - 19968: jis0208<<14 | 0x37<<7 | 0x5C,
	25109 - 19968: jis0212<<14 | 0x1E<<7 | 0x08,
	25110 - 19968: jis0208<<14 | 0x0F<<7 | 0x1E,
	25114 - 19968: jis0208<<14 | 0x1F<<7 | 0x2B,
	25115 - 19968: jis0208<<14 | 0x37<<7 | 0x5D,
	25116 - 19968: jis0212<<14 | 0x1E<<7 | 0x09,
	25117 - 19968: jis0208<<14 | 0x4B<<7 | 0x22,
	25118 - 19968: jis0208<<14 | 0x38<<7 | 0x00,
	25119 - 19968: jis0208<<14 | 0x16<<7 | 0x40,
	25120 - 19968: jis0212<<14 | 0x1E<<7 | 0x0A,
	25121 - 19968: jis0208<<14 | 0x38<<7 | 0x01,
	25122 - 19968: jis0212<<14 | 0x1E<<7 | 0x0B,
	25123 - 19968: jis0212<<14 | 0x1E<<7 | 0x0C,
	25126 - 19968: jis0208<<14 | 0x1F<<7 | 0x4E,
	25127 - 19968: jis0212<<14 | 0x1E<<7 | 0x0D,
	25129 - 19968: jis0212<<14 | 0x1E<<7 | 0x0E,
	25130 - 19968: jis0208<<14 | 0x38<<7 | 0x02,
	25131 - 19968: jis0212<<14 | 0x1E<<7 | 0x0F,
	25134 - 19968: jis0208<<14 | 0x38<<7 | 0x03,
	25135 - 19968: jis0208<<14 | 0x14<<7 | 0x19,
	25136 - 19968: jis0208<<14 | 0x38<<7 | 0x04,
	25138 - 19968: jis0208<<14 | 0x38<<7 | 0x05,
	25139 - 19968: jis0208<<14 | 0x38<<7 | 0x06,
	25140 - 19968: jis0208<<14 | 0x21<<7 | 0x36,
	25144 - 19968: jis0208<<14 | 0x17<<7 | 0x2C,
	25145 - 19968: jis0212<<14 | 0x1E<<7 | 0x10,
	25147 - 19968: jis0208<<14 | 0x2B<<7 | 0x40,
	25149 - 19968: jis0212<<14 | 0x1E<<7 | 0x11,
	25151 - 19968: jis0208<<14 | 0x2A<<7 | 0x1B,
	25152 - 19968: jis0208<<14 | 0x1C<<7 | 0x49,
	25153 - 19968: jis0208<<14 | 0x38<<7 | 0x07,
	25154 - 19968: jis0212<<14 | 0x1E<<7 | 0x12,
	25155 - 19968: jis0212<<14 | 0x1E<<7 | 0x13,
	25156 - 19968: jis0212<<14 | 0x1E<<7 | 0x14,
	25158 - 19968: jis0212<<14 | 0x1E<<7 | 0x15,
	25159 - 19968: jis0208<<14 | 0x1F<<7 | 0x4F,
	25160 - 19968: jis0208<<14 | 0x4D<<7 | 0x1C,
	25161 - 19968: jis0208<<14 | 0x27<<7 | 0x41,
	25163 - 19968: jis0208<<14 | 0x1B<<7 | 0x49,
	25164 - 19968: jis0212<<14 | 0x1E<<7 | 0x16,
	25165 - 19968: jis0208<<14 | 0x19<<7 | 0x2C,
	25166 - 19968: jis0208<<14 | 0x38<<7 | 0x08,
	25168 - 19968: jis0212<<14 | 0x1E<<7 | 0x17,
	25169 - 19968: jis0212<<14 | 0x1E<<7 | 0x18,
	25170 - 19968: jis0212<<14 | 0x1E<<7 | 0x19,
	25171 - 19968: jis0208<<14 | 0x21<<7 | 0x26,
	25172 - 19968: jis0212<<14 | 0x1E<<7 | 0x1A,
	25173 - 19968: jis0208<<14 | 0x29<<7 | 0x06,
	25174 - 19968: jis0212<<14 | 0x1E<<7 | 0x1B,
	25176 - 19968: jis0208<<14 | 0x21<<7 | 0x50,
	25178 - 19968: jis0212<<14 | 0x1E<<7 | 0x1C,
	25179 - 19968: jis0208<<14 | 0x38<<7 | 0x0B,
	25180 - 19968: jis0212<<14 | 0x1E<<7 | 0x1D,
	25182 - 19968: jis0208<<14 | 0x38<<7 | 0x09,
	25184 - 19968: jis0208<<14 | 0x38<<7 | 0x0C,
	25187 - 19968: jis0208<<14 | 0x38<<7 | 0x0A,
	25188 - 19968: jis0212<<14 | 0x1E<<7 | 0x1E,
	25192 - 19968: jis0208<<14 | 0x38<<7 | 0x0D,
	25197 - 19968: jis0212<<14 | 0x1E<<7 | 0x1F,
	25198 - 19968: jis0208<<14 | 0x29<<7 | 0x10,
	25199 - 19968: jis0212<<14 | 0x1E<<7 | 0x20,
	25201 - 19968: jis0208<<14 | 0x0F<<7 | 0x16,
	25203 - 19968: jis0212<<14 | 0x1E<<7 | 0x21,
	25206 - 19968: jis0208<<14 | 0x28<<7 | 0x3D,
	25209 - 19968: jis0208<<14 | 0x27<<7 | 0x42,
	25210 - 19968: jis0212<<14 | 0x1E<<7 | 0x22,
	25212 - 19968: jis0208<<14 | 0x38<<7 | 0x0E,
	25213 - 19968: jis0212<<14 | 0x1E<<7 | 0x23,
	25214 - 19968: jis0208<<14 | 0x38<<7 | 0x11,
	25215 - 19968: jis0208<<14 | 0x1D<<7 | 0x14,
	25216 - 19968: jis0208<<14 | 0x14<<7 | 0x1A,
	25218 - 19968: jis0208<<14 | 0x38<<7 | 0x0F,
	25219 - 19968: jis0208<<14 | 0x38<<7 | 0x16,
	25220 - 19968: jis0208<<14 | 0x1D<<7 | 0x15,
	25225 - 19968: jis0208<<14 | 0x38<<7 | 0x10,
	25226 - 19968: jis0208<<14 | 0x26<<7 | 0x23,
	25229 - 19968: jis0212<<14 | 0x1E<<7 | 0x24,
	25230 - 19968: jis0212<<14 | 0x1E<<7 | 0x25,
	25231 - 19968: jis0212<<14 | 0x1E<<7 | 0x26,
	25232 - 19968: jis0212<<14 | 0x1E<<7 | 0x27,
	25233 - 19968: jis0208<<14 | 0x2C<<7 | 0x3D,
	25234 - 19968: jis0208<<14 | 0x38<<7 | 0x12,
	25235 - 19968: jis0208<<14 | 0x38<<7 | 0x13,
	25236 - 19968: jis0208<<14 | 0x38<<7 | 0x17,
	25237 - 19968: jis0208<<14 | 0x24<<7 | 0x49,
	25238 - 19968: jis0208<<14 | 0x38<<7 | 0x14,
	25239 - 19968: jis0208<<14 | 0x18<<7 | 0x12,
	25240 - 19968: jis0208<<14 | 0x1F<<7 | 0x3D,
	25243 - 19968: jis0208<<14 | 0x38<<7 | 0x25,
	25244 - 19968: jis0208<<14 | 0x27<<7 | 0x13,
	25246 - 19968: jis0208<<14 | 0x21<<7 | 0x51,
	25254 - 19968: jis0208<<14 | 0x59<<7 | 0x0D,
	25256 - 19968: jis0212<<14 | 0x1E<<7 | 0x29,
	25259 - 19968: jis0208<<14 | 0x27<<7 | 0x43,
	25260 - 19968: jis0208<<14 | 0x39<<7 | 0x0C,
	25265 - 19968: jis0208<<14 | 0x29<<7 | 0x59,
	25267 - 19968: jis0212<<14 | 0x1E<<7 | 0x2A,
	25269 - 19968: jis0208<<14 | 0x23<<7 | 0x50,
	25270 - 19968: jis0212<<14 | 0x1E<<7 | 0x2B,
	25271 - 19968: jis0212<<14 | 0x1E<<7 | 0x2C,
	25273 - 19968: jis0208<<14 | 0x2A<<7 | 0x54,
	25274 - 19968: jis0212<<14 | 0x1E<<7 | 0x2D,
	25275 - 19968: jis0208<<14 | 0x38<<7 | 0x1A,
	25276 - 19968: jis0208<<14 | 0x11<<7 | 0x00,
	25277 - 19968: jis0208<<14 | 0x22<<7 | 0x49,
	25278 - 19968: jis0212<<14 | 0x1E<<7 | 0x2E,
	25279 - 19968: jis0212<<14 | 0x1E<<7 | 0x2F,
	25282 - 19968: jis0208<<14 | 0x38<<7 | 0x23,
	25284 - 19968: jis0212<<14 | 0x1E<<7 | 0x30,
	25285 - 19968: jis0208<<14 | 0x22<<7 | 0x13,
	25286 - 19968: jis0208<<14 | 0x38<<7 | 0x1D,
	25287 - 19968: jis0208<<14 | 0x38<<7 | 0x24,
	25288 - 19968: jis0208<<14 | 0x38<<7 | 0x1F,
	25289 - 19968: jis0208<<14 | 0x38<<7 | 0x26,
	25290 - 19968: jis0208<<14 | 0x38<<7 | 0x22,
	25292 - 19968: jis0208<<14 | 0x38<<7 | 0x21,
	25293 - 19968: jis0208<<14 | 0x26<<7 | 0x4E,
	25294 - 19968: jis0212<<14 | 0x1E<<7 | 0x31,
	25295 - 19968: jis0208<<14 | 0x38<<7 | 0x1B,
	25296 - 19968: jis0208<<14 | 0x11<<7 | 0x5C,
	25297 - 19968: jis0208<<14 | 0x38<<7 | 0x19,
	25298 - 19968: jis0208<<14 | 0x14<<7 | 0x50,
	25299 - 19968: jis0208<<14 | 0x21<<7 | 0x52,
	25300 - 19968: jis0208<<14 | 0x38<<7 | 0x15,
	25301 - 19968: jis0212<<14 | 0x1E<<7 | 0x32,
	25302 - 19968: jis0212<<14 | 0x1E<<7 | 0x33,
	25303 - 19968: jis0208<<14 | 0x38<<7 | 0x18,
	25304 - 19968: jis0208<<14 | 0x18<<7 | 0x13,
	25305 - 19968: jis0208<<14 | 0x1F<<7 | 0x3A,
	25306 - 19968: jis0212<<14 | 0x1E<<7 | 0x34,
	25307 - 19968: jis0208<<14 | 0x1D<<7 | 0x16,
	25308 - 19968: jis0208<<14 | 0x38<<7 | 0x20,
	25309 - 19968: jis0208<<14 | 0x26<<7 | 0x31,
	25312 - 19968: jis0208<<14 | 0x14<<7 | 0x51,
	25313 - 19968: jis0208<<14 | 0x12<<7 | 0x27,
	25322 - 19968: jis0212<<14 | 0x1E<<7 | 0x35,
	25324 - 19968: jis0208<<14 | 0x12<<7 | 0x46,
	25325 - 19968: jis0208<<14 | 0x1E<<7 | 0x00,
	25326 - 19968: jis0208<<14 | 0x38<<7 | 0x28,
	25327 - 19968: jis0208<<14 | 0x38<<7 | 0x2D,
	25329 - 19968: jis0208<<14 | 0x38<<7 | 0x29,
	25330 - 19968: jis0212<<14 | 0x1E<<7 | 0x36,
	25331 - 19968: jis0208<<14 | 0x16<<7 | 0x5C,
	25332 - 19968: jis0212<<14 | 0x1E<<7 | 0x37,
	25333 - 19968: jis0208<<14 | 0x38<<7 | 0x2E,
	25334 - 19968: jis0208<<14 | 0x1A<<7 | 0x01,
	25335 - 19968: jis0208<<14 | 0x18<<7 | 0x48,
	25340 - 19968: jis0212<<14 | 0x1E<<7 | 0x38,
	25341 - 19968: jis0212<<14 | 0x1E<<7 | 0x39,
	25342 - 19968: jis0208<<14 | 0x1C<<7 | 0x05,
	25343 - 19968: jis0208<<14 | 0x38<<7 | 0x1C,
	25345 - 19968: jis0208<<14 | 0x1A<<7 | 0x5C,
	25346 - 19968: jis0208<<14 | 0x38<<7 | 0x2B,
	25347 - 19968: jis0212<<14 | 0x1E<<7 | 0x3A,
	25348 - 19968: jis0212<<14 | 0x1E<<7 | 0x3B,
	25351 - 19968: jis0208<<14 | 0x1A<<7 | 0x37,
	25352 - 19968: jis0208<<14 | 0x38<<7 | 0x2C,
	25353 - 19968: jis0208<<14 | 0x0F<<7 | 0x23,
	25354 - 19968: jis0212<<14 | 0x1E<<7 | 0x3C,
	25355 - 19968: jis0212<<14 | 0x1E<<7 | 0x3D,
	25356 - 19968: jis0208<<14 | 0x38<<7 | 0x27,
	25357 - 19968: jis0212<<14 | 0x1E<<7 | 0x3E,
	25360 - 19968: jis0212<<14 | 0x1E<<7 | 0x3F,
	25361 - 19968: jis0208<<14 | 0x23<<7 | 0x08,
	25363 - 19968: jis0212<<14 | 0x1E<<7 | 0x40,
	25366 - 19968: jis0212<<14 | 0x1E<<7 | 0x41,
	25368 - 19968: jis0212<<14 | 0x1E<<7 | 0x42,
	25369 - 19968: jis0208<<14 | 0x14<<7 | 0x52,
	25375 - 19968: jis0208<<14 | 0x15<<7 | 0x13,
	25383 - 19968: jis0208<<14 | 0x38<<7 | 0x2A,
	25384 - 19968: jis0208<<14 | 0x0F<<7 | 0x06,
	25385 - 19968: jis0212<<14 | 0x1E<<7 | 0x43,
	25386 - 19968: jis0212<<14 | 0x1E<<7 | 0x44,
	25387 - 19968: jis0208<<14 | 0x19<<7 | 0x22,
	25389 - 19968: jis0212<<14 | 0x1E<<7 | 0x45,
	25391 - 19968: jis0208<<14 | 0x1E<<7 | 0x15,
	25397 - 19968: jis0212<<14 | 0x1E<<7 | 0x46,
	25398 - 19968: jis0212<<14 | 0x1E<<7 | 0x47,
	25401 - 19968: jis0212<<14 | 0x1E<<7 | 0x48,
	25402 - 19968: jis0208<<14 | 0x23<<7 | 0x51,
	25404 - 19968: jis0212<<14 | 0x1E<<7 | 0x49,
	25405 - 19968: jis0208<<14 | 0x27<<7 | 0x33,
	25406 - 19968: jis0208<<14 | 0x38<<7 | 0x30,
	25407 - 19968: jis0208<<14 | 0x20<<7 | 0x3D,
	25409 - 19968: jis0212<<14 | 0x1E<<7 | 0x4A,
	25410 - 19968: jis0212<<14 | 0x1E<<7 | 0x4B,
	25411 - 19968: jis0212<<14 | 0x1E<<7 | 0x4C,
	25412 - 19968: jis0212<<14 | 0x1E<<7 | 0x4D,
	25414 - 19968: jis0212<<14 | 0x1E<<7 | 0x4E,
	25417 - 19968: jis0208<<14 | 0x21<<7 | 0x09,
	25418 - 19968: jis0212<<14 | 0x1E<<7 | 0x4F,
	25419 - 19968: jis0212<<14 | 0x1E<<7 | 0x50,
	25420 - 19968: jis0208<<14 | 0x1A<<7 | 0x0A,
	25421 - 19968: jis0208<<14 | 0x38<<7 | 0x31,
	25422 - 19968: jis0212<<14 | 0x1E<<7 | 0x51,
	25423 - 19968: jis0208<<14 | 0x38<<7 | 0x33,
	25424 - 19968: jis0208<<14 | 0x38<<7 | 0x2F,
	25426 - 19968: jis0212<<14 | 0x1E<<7 | 0x52,
	25427 - 19968: jis0212<<14 | 0x1E<<7 | 0x53,
	25428 - 19968: jis0212<<14 | 0x1E<<7 | 0x54,
	25429 - 19968: jis0208<<14 | 0x29<<7 | 0x40,
	25431 - 19968: jis0208<<14 | 0x23<<7 | 0x1C,
	25432 - 19968: jis0212<<14 | 0x1E<<7 | 0x55,
	25435 - 19968: jis0212<<14 | 0x1E<<7 | 0x56,
	25436 - 19968: jis0208<<14 | 0x20<<7 | 0x3B,
	25445 - 19968: jis0212<<14 | 0x1E<<7 | 0x57,
	25446 - 19968: jis0212<<14 | 0x1E<<7 | 0x58,
	25447 - 19968: jis0208<<14 | 0x29<<7 | 0x5A,
	25448 - 19968: jis0208<<14 | 0x1B<<7 | 0x2D,
	25449 - 19968: jis0208<<14 | 0x38<<7 | 0x3F,
	25451 - 19968: jis0208<<14 | 0x38<<7 | 0x3E,
	25452 - 19968: jis0212<<14 | 0x1E<<7 | 0x59,
	25453 - 19968: jis0212<<14 | 0x1E<<7 | 0x5A,
	25454 - 19968: jis0208<<14 | 0x1E<<7 | 0x57,
	25457 - 19968: jis0212<<14 | 0x1E<<7 | 0x5B,
	25458 - 19968: jis0208<<14 | 0x16<<7 | 0x5D,
	25460 - 19968: jis0212<<14 | 0x1E<<7 | 0x5C,
	25461 - 19968: jis0212<<14 | 0x1E<<7 | 0x5D,
	25462 - 19968: jis0208<<14 | 0x38<<7 | 0x38,
	25463 - 19968: jis0208<<14 | 0x1D<<7 | 0x18,
	25464 - 19968: jis0212<<14 | 0x1F<<7 | 0x00,
	25466 - 19968: jis0208<<14 | 0x25<<7 | 0x47,
	25467 - 19968: jis0208<<14 | 0x26<<7 | 0x10,
	25468 - 19968: jis0212<<14 | 0x1F<<7 | 0x01,
	25469 - 19968: jis0212<<14 | 0x1F<<7 | 0x02,
	25471 - 19968: jis0212<<14 | 0x1F<<7 | 0x03,
	25472 - 19968: jis0208<<14 | 0x38<<7 | 0x36,
	25474 - 19968: jis0212<<14 | 0x1F<<7 | 0x04,
	25475 - 19968: jis0208<<14 | 0x20<<7 | 0x3C,
	25476 - 19968: jis0212<<14 | 0x1F<<7 | 0x05,
	25479 - 19968: jis0212<<14 | 0x1F<<7 | 0x06,
	25480 - 19968: jis0208<<14 | 0x1B<<7 | 0x57,
	25481 - 19968: jis0208<<14 | 0x38<<7 | 0x3B,
	25482 - 19968: jis0212<<14 | 0x1F<<7 | 0x07,
	25484 - 19968: jis0208<<14 | 0x1D<<7 | 0x17,
	25486 - 19968: jis0208<<14 | 0x38<<7 | 0x35,
	25487 - 19968: jis0208<<14 | 0x38<<7 | 0x3A,
	25488 - 19968: jis0212<<14 | 0x1F<<7 | 0x08,
	25490 - 19968: jis0208<<14 | 0x26<<7 | 0x32,
	25492 - 19968: jis0212<<14 | 0x1F<<7 | 0x09,
	25493 - 19968: jis0212<<14 | 0x1F<<7 | 0x0A,
	25494 - 19968: jis0208<<14 | 0x38<<7 | 0x34,
	25496 - 19968: jis0208<<14 | 0x16<<7 | 0x00,
	25497 - 19968: jis0212<<14 | 0x1F<<7 | 0x0B,
	25498 - 19968: jis0212<<14 | 0x1F<<7 | 0x0C,
	25499 - 19968: jis0208<<14 | 0x12<<7 | 0x3C,
	25502 - 19968: jis0212<<14 | 0x1F<<7 | 0x0D,
	25503 - 19968: jis0208<<14 | 0x38<<7 | 0x3C,
	25504 - 19968: jis0208<<14 | 0x2D<<7 | 0x0A,
	25505 - 19968: jis0208<<14 | 0x19<<7 | 0x2D,
	25506 - 19968: jis0208<<14 | 0x22<<7 | 0x14,
	25507 - 19968: jis0208<<14 | 0x38<<7 | 0x39,
	25508 - 19968: jis0212<<14 | 0x1F<<7 | 0x0E,
	25509 - 19968: jis0208<<14 | 0x1F<<7 | 0x3B,
	25510 - 19968: jis0212<<14 | 0x1F<<7 | 0x0F,
	25511 - 19968: jis0208<<14 | 0x18<<7 | 0x14,
	25512 - 19968: jis0208<<14 | 0x1E<<7 | 0x43,
	25513 - 19968: jis0208<<14 | 0x10<<7 | 0x45,
	25514 - 19968: jis0208<<14 | 0x20<<7 | 0x1B,
	25515 - 19968: jis0208<<14 | 0x38<<7 | 0x37,
	25516 - 19968: jis0208<<14 | 0x14<<7 | 0x24,
	25517 - 19968: jis0212<<14 | 0x1F<<7 | 0x10,
	25518 - 19968: jis0212<<14 | 0x1F<<7 | 0x11,
	25519 - 19968: jis0212<<14 | 0x1F<<7 | 0x12,
	25522 - 19968: jis0208<<14 | 0x16<<7 | 0x26,
	25524 - 19968: jis0208<<14 | 0x23<<7 | 0x2E,
	25525 - 19968: jis0208<<14 | 0x38<<7 | 0x3D,
	25531 - 19968: jis0208<<14 | 0x20<<7 | 0x3E,
	25533 - 19968: jis0212<<14 | 0x1F<<7 | 0x13,
	25534 - 19968: jis0208<<14 | 0x38<<7 | 0x40,
	25536 - 19968: jis0208<<14 | 0x38<<7 | 0x42,
	25537 - 19968: jis0212<<14 | 0x1F<<7 | 0x14,
	25539 - 19968: jis0208<<14 | 0x21<<7 | 0x16,
	25540 - 19968: jis0208<<14 | 0x38<<7 | 0x48,
	25541 - 19968: jis0212<<14 | 0x1F<<7 | 0x15,
	25542 - 19968: jis0208<<14 | 0x38<<7 | 0x43,
	25544 - 19968: jis0212<<14 | 0x1F<<7 | 0x16,
	25545 - 19968: jis0208<<14 | 0x38<<7 | 0x45,
	25550 - 19968: jis0212<<14 | 0x1F<<7 | 0x17,
	25551 - 19968: jis0208<<14 | 0x28<<7 | 0x20,
	25552 - 19968: jis0208<<14 | 0x23<<7 | 0x52,
	25553 - 19968: jis0212<<14 | 0x1F<<7 | 0x18,
	25554 - 19968: jis0208<<14 | 0x38<<7 | 0x46,
	25555 - 19968: jis0212<<14 | 0x1F<<7 | 0x19,
	25556 - 19968: jis0212<<14 | 0x1F<<7 | 0x1A,
	25557 - 19968: jis0212<<14 | 0x1F<<7 | 0x1B,
	25558 - 19968: jis0208<<14 | 0x2C<<7 | 0x0B,
	25562 - 19968: jis0208<<14 | 0x2C<<7 | 0x27,
	25563 - 19968: jis0208<<14 | 0x13<<7 | 0x18,
	25564 - 19968: jis0212<<14 | 0x1F<<7 | 0x1C,
	25568 - 19968: jis0212<<14 | 0x1F<<7 | 0x1D,
	25569 - 19968: jis0208<<14 | 0x0F<<7 | 0x0D,
	25571 - 19968: jis0208<<14 | 0x38<<7 | 0x44,
	25573 - 19968: jis0212<<14 | 0x1F<<7 | 0x1E,
	25577 - 19968: jis0208<<14 | 0x38<<7 | 0x41,
	25578 - 19968: jis0212<<14 | 0x1F<<7 | 0x1F,
	25580 - 19968: jis0212<<14 | 0x1F<<7 | 0x20,
	25582 - 19968: jis0208<<14 | 0x13<<7 | 0x57,
	25586 - 19968: jis0212<<14 | 0x1F<<7 | 0x21,
	25587 - 19968: jis0212<<14 | 0x1F<<7 | 0x22,
	25588 - 19968: jis0208<<14 | 0x10<<7 | 0x46,
	25589 - 19968: jis0208<<14 | 0x59<<7 | 0x0E,
	25590 - 19968: jis0208<<14 | 0x38<<7 | 0x47,
	25592 - 19968: jis0212<<14 | 0x1F<<7 | 0x24,
	25593 - 19968: jis0212<<14 | 0x1F<<7 | 0x25,
	25594 - 19968: jis0208<<14 | 0x2C<<7 | 0x28,
	25606 - 19968: jis0208<<14 | 0x38<<7 | 0x4B,
	25609 - 19968: jis0212<<14 | 0x1F<<7 | 0x26,
	25610 - 19968: jis0212<<14 | 0x1F<<7 | 0x27,
	25613 - 19968: jis0208<<14 | 0x21<<7 | 0x1A,
	25615 - 19968: jis0208<<14 | 0x38<<7 | 0x52,
	25616 - 19968: jis0212<<14 | 0x1F<<7 | 0x28,
	25618 - 19968: jis0212<<14 | 0x1F<<7 | 0x29,
	25619 - 19968: jis0208<<14 | 0x38<<7 | 0x4C,
	25620 - 19968: jis0212<<14 | 0x1F<<7 | 0x2A,
	25622 - 19968: jis0208<<14 | 0x38<<7 | 0x49,
	25623 - 19968: jis0208<<14 | 0x38<<7 | 0x50,
	25624 - 19968: jis0212<<14 | 0x1F<<7 | 0x2B,
	25628 - 19968: jis0208<<14 | 0x38<<7 | 0x32,
	25630 - 19968: jis0212<<14 | 0x1F<<7 | 0x2C,
	25632 - 19968: jis0212<<14 | 0x1F<<7 | 0x2D,
	25634 - 19968: jis0212<<14 | 0x1F<<7 | 0x2E,
	25636 - 19968: jis0212<<14 | 0x1F<<7 | 0x2F,
	25637 - 19968: jis0212<<14 | 0x1F<<7 | 0x30,
	25638 - 19968: jis0208<<14 | 0x38<<7 | 0x4D,
	25640 - 19968: jis0208<<14 | 0x38<<7 | 0x51,
	25641 - 19968: jis0212<<14 | 0x1F<<7 | 0x31,
	25642 - 19968: jis0212<<14 | 0x1F<<7 | 0x32,
	25644 - 19968: jis0208<<14 | 0x27<<7 | 0x21,
	25645 - 19968: jis0208<<14 | 0x24<<7 | 0x4A,
	25647 - 19968: jis0212<<14 | 0x1F<<7 | 0x33,
	25648 - 19968: jis0212<<14 | 0x1F<<7 | 0x34,
	25652 - 19968: jis0208<<14 | 0x38<<7 | 0x4A,
	25653 - 19968: jis0212<<14 | 0x1F<<7 | 0x35,
	25654 - 19968: jis0208<<14 | 0x38<<7 | 0x4E,
	25658 - 19968: jis0208<<14 | 0x16<<7 | 0x27,
	25661 - 19968: jis0212<<14 | 0x1F<<7 | 0x36,
	25662 - 19968: jis0208<<14 | 0x19<<7 | 0x50,
	25663 - 19968: jis0212<<14 | 0x1F<<7 | 0x37,
	25666 - 19968: jis0208<<14 | 0x1F<<7 | 0x3C,
	25675 - 19968: jis0212<<14 | 0x1F<<7 | 0x38,
	25678 - 19968: jis0208<<14 | 0x38<<7 | 0x56,
	25679 - 19968: jis0212<<14 | 0x1F<<7 | 0x39,
	25681 - 19968: jis0212<<14 | 0x1F<<7 | 0x3A,
	25682 - 19968: jis0212<<14 | 0x1F<<7 | 0x3B,
	25683 - 19968: jis0212<<14 | 0x1F<<7 | 0x3C,
	25684 - 19968: jis0212<<14 | 0x1F<<7 | 0x3D,
	25688 - 19968: jis0208<<14 | 0x24<<7 | 0x05,
	25690 - 19968: jis0212<<14 | 0x1F<<7 | 0x3E,
	25691 - 19968: jis0212<<14 | 0x1F<<7 | 0x3F,
	25692 - 19968: jis0212<<14 | 0x1F<<7 | 0x40,
	25693 - 19968: jis0212<<14 | 0x1F<<7 | 0x41,
	25695 - 19968: jis0212<<14 | 0x1F<<7 | 0x42,
	25696 - 19968: jis0208<<14 | 0x59<<7 | 0x0F,
	25697 - 19968: jis0212<<14 | 0x1F<<7 | 0x44,
	25699 - 19968: jis0212<<14 | 0x1F<<7 | 0x45,
	25703 - 19968: jis0208<<14 | 0x38<<7 | 0x53,
	25705 - 19968: jis0208<<14 | 0x2A<<7 | 0x3F,
	25709 - 19968: jis0212<<14 | 0x1F<<7 | 0x46,
	25711 - 19968: jis0208<<14 | 0x38<<7 | 0x54,
	25715 - 19968: jis0212<<14 | 0x1F<<7 | 0x47,
	25716 - 19968: jis0212<<14 | 0x1F<<7 | 0x48,
	25718 - 19968: jis0208<<14 | 0x38<<7 | 0x55,
	25720 - 19968: jis0208<<14 | 0x2B<<7 | 0x2D,
	25722 - 19968: jis0208<<14 | 0x1F<<7 | 0x01,
	25723 - 19968: jis0212<<14 | 0x1F<<7 | 0x49,
	25725 - 19968: jis0212<<14 | 0x1F<<7 | 0x4A,
	25731 - 19968: jis0208<<14 | 0x16<<7 | 0x41,
	25733 - 19968: jis0212<<14 | 0x1F<<7 | 0x4B,
	25735 - 19968: jis0212<<14 | 0x1F<<7 | 0x4C,
	25736 - 19968: jis0208<<14 | 0x38<<7 | 0x5C,
	25743 - 19968: jis0212<<14 | 0x1F<<7 | 0x4D,
	25744 - 19968: jis0212<<14 | 0x1F<<7 | 0x4E,
	25745 - 19968: jis0212<<14 | 0x1F<<7 | 0x4F,
	25746 - 19968: jis0208<<14 | 0x1A<<7 | 0x14,
	25747 - 19968: jis0208<<14 | 0x38<<7 | 0x59,
	25749 - 19968: jis0208<<14 | 0x38<<7 | 0x58,
	25752 - 19968: jis0212<<14 | 0x1F<<7 | 0x50,
	25753 - 19968: jis0212<<14 | 0x1F<<7 | 0x51,
	25754 - 19968: jis0208<<14 | 0x26<<7 | 0x11,
	25755 - 19968: jis0212<<14 | 0x1F<<7 | 0x52,
	25757 - 19968: jis0208<<14 | 0x59<<7 | 0x10,
	25758 - 19968: jis0208<<14 | 0x25<<7 | 0x14,
	25759 - 19968: jis0212<<14 | 0x1F<<7 | 0x54,
	25761 - 19968: jis0212<<14 | 0x1F<<7 | 0x55,
	25763 - 19968: jis0212<<14 | 0x1F<<7 | 0x56,
	25764 - 19968: jis0208<<14 | 0x24<<7 | 0x10,
	25765 - 19968: jis0208<<14 | 0x38<<7 | 0x5A,
	25766 - 19968: jis0212<<14 | 0x1F<<7 | 0x57,
	25768 - 19968: jis0212<<14 | 0x1F<<7 | 0x58,
	25769 - 19968: jis0208<<14 | 0x38<<7 | 0x5B,
	25771 - 19968: jis0208<<14 | 0x28<<7 | 0x4E,
	25772 - 19968: jis0212<<14 | 0x1F<<7 | 0x59,
	25773 - 19968: jis0208<<14 | 0x26<<7 | 0x24,
	25774 - 19968: jis0208<<14 | 0x1A<<7 | 0x02,
	25776 - 19968: jis0208<<14 | 0x1F<<7 | 0x50,
	25778 - 19968: jis0208<<14 | 0x2A<<7 | 0x2F,
	25779 - 19968: jis0212<<14 | 0x1F<<7 | 0x5A,
	25785 - 19968: jis0208<<14 | 0x12<<7 | 0x28,
	25787 - 19968: jis0208<<14 | 0x39<<7 | 0x04,
	25788 - 19968: jis0208<<14 | 0x38<<7 | 0x5D,
	25789 - 19968: jis0212<<14 | 0x1F<<7 | 0x5B,
	25790 - 19968: jis0212<<14 | 0x1F<<7 | 0x5C,
	25791 - 19968: jis0212<<14 | 0x1F<<7 | 0x5D,
	25793 - 19968: jis0208<<14 | 0x2C<<7 | 0x29,
	25794 - 19968: jis0208<<14 | 0x39<<7 | 0x06,
	25796 - 19968: jis0212<<14 | 0x20<<7 | 0x00,
	25797 - 19968: jis0208<<14 | 0x39<<7 | 0x02,
	25799 - 19968: jis0208<<14 | 0x39<<7 | 0x03,
	25801 - 19968: jis0212<<14 | 0x20<<7 | 0x01,
	25802 - 19968: jis0212<<14 | 0x20<<7 | 0x02,
	25803 - 19968: jis0212<<14 | 0x20<<7 | 0x03,
	25804 - 19968: jis0212<<14 | 0x20<<7 | 0x04,
	25805 - 19968: jis0208<<14 | 0x20<<7 | 0x3F,
	25806 - 19968: jis0208<<14 | 0x59<<7 | 0x11,
	25808 - 19968: jis0212<<14 | 0x20<<7 | 0x06,
	25809 - 19968: jis0212<<14 | 0x20<<7 | 0x07,
	25810 - 19968: jis0208<<14 | 0x39<<7 | 0x01,
	25812 - 19968: jis0208<<14 | 0x38<<7 | 0x1E,
	25813 - 19968: jis0212<<14 | 0x20<<7 | 0x08,
	25815 - 19968: jis0212<<14 | 0x20<<7 | 0x09,
	25816 - 19968: jis0208<<14 | 0x39<<7 | 0x05,
	25818 - 19968: jis0208<<14 | 0x39<<7 | 0x00,
	25824 - 19968: jis0208<<14 | 0x39<<7 | 0x0A,
	25825 - 19968: jis0208<<14 | 0x39<<7 | 0x0B,
	25826 - 19968: jis0208<<14 | 0x24<<7 | 0x06,
	25827 - 19968: jis0208<<14 | 0x39<<7 | 0x0D,
	25828 - 19968: jis0212<<14 | 0x20<<7 | 0x0A,
	25829 - 19968: jis0212<<14 | 0x20<<7 | 0x0B,
	25830 - 19968: jis0208<<14 | 0x1A<<7 | 0x03,
	25831 - 19968: jis0208<<14 | 0x39<<7 | 0x08,
	25833 - 19968: jis0212<<14 | 0x20<<7 | 0x0C,
	25834 - 19968: jis0212<<14 | 0x20<<7 | 0x0D,
	25836 - 19968: jis0208<<14 | 0x14<<7 | 0x1B,
	25837 - 19968: jis0212<<14 | 0x20<<7 | 0x0E,
	25839 - 19968: jis0208<<14 | 0x39<<7 | 0x0E,
	25840 - 19968: jis0212<<14 | 0x20<<7 | 0x0F,
	25841 - 19968: jis0208<<14 | 0x39<<7 | 0x07,
	25842 - 19968: jis0208<<14 | 0x39<<7 | 0x12,
	25844 - 19968: jis0208<<14 | 0x39<<7 | 0x11,
	25845 - 19968: jis0212<<14 | 0x20<<7 | 0x10,
	25846 - 19968: jis0208<<14 | 0x39<<7 | 0x10,
	25847 - 19968: jis0212<<14 | 0x20<<7 | 0x11,
	25850 - 19968: jis0208<<14 | 0x39<<7 | 0x13,
	25851 - 19968: jis0212<<14 | 0x20<<7 | 0x12,
	25853 - 19968: jis0208<<14 | 0x39<<7 | 0x15,
	25854 - 19968: jis0208<<14 | 0x1D<<7 | 0x50,
	25855 - 19968: jis0212<<14 | 0x20<<7 | 0x13,
	25856 - 19968: jis0208<<14 | 0x39<<7 | 0x14,
	25857 - 19968: jis0212<<14 | 0x20<<7 | 0x14,
	25860 - 19968: jis0212<<14 | 0x20<<7 | 0x15,
	25861 - 19968: jis0208<<14 | 0x39<<7 | 0x18,
	25864 - 19968: jis0212<<14 | 0x20<<7 | 0x16,
	25865 - 19968: jis0212<<14 | 0x20<<7 | 0x17,
	25866 - 19968: jis0212<<14 | 0x20<<7 | 0x18,
	25871 - 19968: jis0212<<14 | 0x20<<7 | 0x19,
	25875 - 19968: jis0212<<14 | 0x20<<7 | 0x1A,
	25876 - 19968: jis0212<<14 | 0x20<<7 | 0x1B,
	25878 - 19968: jis0212<<14 | 0x20<<7 | 0x1C,
	25880 - 19968: jis0208<<14 | 0x39<<7 | 0x16,
	25881 - 19968: jis0212<<14 | 0x20<<7 | 0x1D,
	25883 - 19968: jis0212<<14 | 0x20<<7 | 0x1E,
	25884 - 19968: jis0208<<14 | 0x39<<7 | 0x17,
	25885 - 19968: jis0208<<14 | 0x38<<7 | 0x4F,
	25886 - 19968: jis0212<<14 | 0x20<<7 | 0x1F,
	25887 - 19968: jis0212<<14 | 0x20<<7 | 0x20,
	25890 - 19968: jis0212<<14 | 0x20<<7 | 0x21,
	25891 - 19968: jis0208<<14 | 0x39<<7 | 0x1A,
	25892 - 19968: jis0208<<14 | 0x39<<7 | 0x19,
	25894 - 19968: jis0212<<14 | 0x20<<7 | 0x22,
	25897 - 19968: jis0212<<14 | 0x20<<7 | 0x23,
	25898 - 19968: jis0208<<14 | 0x38<<7 | 0x57,
	25899 - 19968: jis0208<<14 | 0x39<<7 | 0x1B,
	25900 - 19968: jis0208<<14 | 0x39<<7 | 0x0F,
	25902 - 19968: jis0212<<14 | 0x20<<7 | 0x24,
	25903 - 19968: jis0208<<14 | 0x1A<<7 | 0x38,
	25905 - 19968: jis0212<<14 | 0x20<<7 | 0x25,
	25908 - 19968: jis0208<<14 | 0x39<<7 | 0x1C,
	25909 - 19968: jis0208<<14 | 0x39<<7 | 0x1D,
	25910 - 19968: jis0208<<14 | 0x39<<7 | 0x1F,
	25911 - 19968: jis0208<<14 | 0x39<<7 | 0x1E,
	25912 - 19968: jis0208<<14 | 0x39<<7 | 0x20,
	25913 - 19968: jis0208<<14 | 0x11<<7 | 0x5D,
	25914 - 19968: jis0212<<14 | 0x20<<7 | 0x26,
	25915 - 19968: jis0208<<14 | 0x18<<7 | 0x15,
	25916 - 19968: jis0212<<14 | 0x20<<7 | 0x27,
	25917 - 19968: jis0212<<14 | 0x20<<7 | 0x28,
	25918 - 19968: jis0208<<14 | 0x29<<7 | 0x5B,
	25919 - 19968: jis0208<<14 | 0x1F<<7 | 0x0E,
	25923 - 19968: jis0212<<14 | 0x20<<7 | 0x29,
	25925 - 19968: jis0208<<14 | 0x17<<7 | 0x2D,
	25927 - 19968: jis0212<<14 | 0x20<<7 | 0x2A,
	25928 - 19968: jis0208<<14 | 0x39<<7 | 0x22,
	25929 - 19968: jis0212<<14 | 0x20<<7 | 0x2B,
	25933 - 19968: jis0208<<14 | 0x39<<7 | 0x25,
	25934 - 19968: jis0208<<14 | 0x59<<7 | 0x12,
	25935 - 19968: jis0208<<14 | 0x28<<7 | 0x31,
	25936 - 19968: jis0212<<14 | 0x20<<7 | 0x2C,
	25937 - 19968: jis0208<<14 | 0x14<<7 | 0x3E,
	25938 - 19968: jis0212<<14 | 0x20<<7 | 0x2D,
	25940 - 19968: jis0212<<14 | 0x20<<7 | 0x2E,
	25941 - 19968: jis0208<<14 | 0x39<<7 | 0x24,
	25942 - 19968: jis0208<<14 | 0x39<<7 | 0x23,
	25943 - 19968: jis0208<<14 | 0x26<<7 | 0x33,
	25944 - 19968: jis0208<<14 | 0x39<<7 | 0x26,
	25945 - 19968: jis0208<<14 | 0x15<<7 | 0x14,
	25949 - 19968: jis0208<<14 | 0x39<<7 | 0x28,
	25950 - 19968: jis0208<<14 | 0x39<<7 | 0x27,
	25951 - 19968: jis0212<<14 | 0x20<<7 | 0x2F,
	25952 - 19968: jis0212<<14 | 0x20<<7 | 0x30,
	25954 - 19968: jis0208<<14 | 0x13<<7 | 0x19,
	25955 - 19968: jis0208<<14 | 0x1A<<7 | 0x15,
	25958 - 19968: jis0208<<14 | 0x25<<7 | 0x37,
	25959 - 19968: jis0212<<14 | 0x20<<7 | 0x31,
	25963 - 19968: jis0212<<14 | 0x20<<7 | 0x32,
	25964 - 19968: jis0208<<14 | 0x16<<7 | 0x28,
	25968 - 19968: jis0208<<14 | 0x1E<<7 | 0x53,
	25970 - 19968: jis0208<<14 | 0x39<<7 | 0x29,
	25972 - 19968: jis0208<<14 | 0x1F<<7 | 0x0F,
	25973 - 19968: jis0208<<14 | 0x24<<7 | 0x07,
	25975 - 19968: jis0208<<14 | 0x28<<7 | 0x3E,
	25976 - 19968: jis0208<<14 | 0x39<<7 | 0x2A,
	25978 - 19968: jis0212<<14 | 0x20<<7 | 0x33,
	25981 - 19968: jis0212<<14 | 0x20<<7 | 0x34,
	25985 - 19968: jis0212<<14 | 0x20<<7 | 0x35,
	25986 - 19968: jis0208<<14 | 0x39<<7 | 0x2B,
	25987 - 19968: jis0208<<14 | 0x39<<7 | 0x2C,
	25989 - 19968: jis0212<<14 | 0x20<<7 | 0x36,
	25991 - 19968: jis0208<<14 | 0x29<<7 | 0x17,
	25992 - 19968: jis0208<<14 | 0x34<<7 | 0x3C,
	25993 - 19968: jis0208<<14 | 0x1F<<7 | 0x25,
	25994 - 19968: jis0212<<14 | 0x20<<7 | 0x37,
	25996 - 19968: jis0208<<14 | 0x28<<7 | 0x2B,
	25998 - 19968: jis0208<<14 | 0x19<<7 | 0x37,
	26000 - 19968: jis0208<<14 | 0x27<<7 | 0x44,
	26001 - 19968: jis0208<<14 | 0x27<<7 | 0x22,
	26002 - 19968: jis0212<<14 | 0x20<<7 | 0x38,
	26005 - 19968: jis0212<<14 | 0x20<<7 | 0x39,
	26007 - 19968: jis0208<<14 | 0x24<<7 | 0x2C,
	26008 - 19968: jis0212<<14 | 0x20<<7 | 0x3A,
	26009 - 19968: jis0208<<14 | 0x2D<<7 | 0x20,
	26011 - 19968: jis0208<<14 | 0x39<<7 | 0x2E,
	26012 - 19968: jis0208<<14 | 0x1B<<7 | 0x2F,
	26013 - 19968: jis0212<<14 | 0x20<<7 | 0x3B,
	26015 - 19968: jis0208<<14 | 0x39<<7 | 0x2F,
	26016 - 19968: jis0212<<14 | 0x20<<7 | 0x3C,
	26017 - 19968: jis0208<<14 | 0x0F<<7 | 0x15,
	26019 - 19968: jis0212<<14 | 0x20<<7 | 0x3D,
	26020 - 19968: jis0208<<14 | 0x15<<7 | 0x33,
	26021 - 19968: jis0208<<14 | 0x1F<<7 | 0x2C,
	26022 - 19968: jis0212<<14 | 0x20<<7 | 0x3E,
	26023 - 19968: jis0208<<14 | 0x28<<7 | 0x3F,
	26027 - 19968: jis0208<<14 | 0x39<<7 | 0x30,
	26028 - 19968: jis0208<<14 | 0x1A<<7 | 0x21,
	26029 - 19968: jis0208<<14 | 0x22<<7 | 0x26,
	26030 - 19968: jis0212<<14 | 0x20<<7 | 0x3F,
	26031 - 19968: jis0208<<14 | 0x1A<<7 | 0x3A,
	26032 - 19968: jis0208<<14 | 0x1E<<7 | 0x16,
	26034 - 19968: jis0212<<14 | 0x20<<7 | 0x40,
	26035 - 19968: jis0212<<14 | 0x20<<7 | 0x41,
	26036 - 19968: jis0212<<14 | 0x20<<7 | 0x42,
	26039 - 19968: jis0208<<14 | 0x39<<7 | 0x31,
	26041 - 19968: jis0208<<14 | 0x29<<7 | 0x5C,
	26044 - 19968: jis0208<<14 | 0x10<<7 | 0x56,
	26045 - 19968: jis0208<<14 | 0x1A<<7 | 0x3B,
	26047 - 19968: jis0212<<14 | 0x20<<7 | 0x43,
	26049 - 19968: jis0208<<14 | 0x39<<7 | 0x34,
	26050 - 19968: jis0212<<14 | 0x20<<7 | 0x44,
	26051 - 19968: jis0208<<14 | 0x39<<7 | 0x32,
	26052 - 19968: jis0208<<14 | 0x39<<7 | 0x35,
	26053 - 19968: jis0208<<14 | 0x2D<<7 | 0x18,
	26054 - 19968: jis0208<<14 | 0x39<<7 | 0x33,
	26056 - 19968: jis0212<<14 | 0x20<<7 | 0x45,
	26057 - 19968: jis0212<<14 | 0x20<<7 | 0x46,
	26059 - 19968: jis0208<<14 | 0x1F<<7 | 0x5A,
	26060 - 19968: jis0208<<14 | 0x39<<7 | 0x36,
	26062 - 19968: jis0212<<14 | 0x20<<7 | 0x47,
	26063 - 19968: jis0208<<14 | 0x21<<7 | 0x11,
	26064 - 19968: jis0212<<14 | 0x20<<7 | 0x48,
	26066 - 19968: jis0208<<14 | 0x39<<7 | 0x37,
	26068 - 19968: jis0212<<14 | 0x20<<7 | 0x49,
	26070 - 19968: jis0212<<14 | 0x20<<7 | 0x4A,
	26071 - 19968: jis0208<<14 | 0x13<<7 | 0x59,
	26072 - 19968: jis0212<<14 | 0x20<<7 | 0x4B,
	26073 - 19968: jis0208<<14 | 0x39<<7 | 0x39,
	26075 - 19968: jis0208<<14 | 0x39<<7 | 0x38,
	26079 - 19968: jis0212<<14 | 0x20<<7 | 0x4C,
	26080 - 19968: jis0208<<14 | 0x39<<7 | 0x3A,
	26081 - 19968: jis0208<<14 | 0x39<<7 | 0x3B,
	26082 - 19968: jis0208<<14 | 0x13<<7 | 0x5A,
	26085 - 19968: jis0208<<14 | 0x25<<7 | 0x5B,
	26086 - 19968: jis0208<<14 | 0x22<<7 | 0x15,
	26087 - 19968: jis0208<<14 | 0x14<<7 | 0x4B,
	26088 - 19968: jis0208<<14 | 0x1A<<7 | 0x3C,
	26089 - 19968: jis0208<<14 | 0x20<<7 | 0x40,
	26092 - 19968: jis0208<<14 | 0x1C<<7 | 0x3B,
	26093 - 19968: jis0208<<14 | 0x0F<<7 | 0x0F,
	26096 - 19968: jis0212<<14 | 0x20<<7 | 0x4D,
	26097 - 19968: jis0208<<14 | 0x39<<7 | 0x3C,
	26098 - 19968: jis0212<<14 | 0x20<<7 | 0x4E,
	26100 - 19968: jis0212<<14 | 0x20<<7 | 0x4F,
	26101 - 19968: jis0212<<14 | 0x20<<7 | 0x50,
	26105 - 19968: jis0212<<14 | 0x20<<7 | 0x51,
	26106 - 19968: jis0208<<14 | 0x11<<7 | 0x01,
	26107 - 19968: jis0208<<14 | 0x39<<7 | 0x40,
	26110 - 19968: jis0212<<14 | 0x20<<7 | 0x52,
	26111 - 19968: jis0212<<14 | 0x20<<7 | 0x53,
	26112 - 19968: jis0208<<14 | 0x59<<7 | 0x13,
	26114 - 19968: jis0208<<14 | 0x18<<7 | 0x16,
	26115 - 19968: jis0208<<14 | 0x39<<7 | 0x3F,
	26116 - 19968: jis0212<<14 | 0x20<<7 | 0x55,
	26118 - 19968: jis0208<<14 | 0x19<<7 | 0x0A,
	26119 - 19968: jis0208<<14 | 0x1D<<7 | 0x19,
	26120 - 19968: jis0212<<14 | 0x20<<7 | 0x56,
	26121 - 19968: jis0208<<14 | 0x59<<7 | 0x16,
	26122 - 19968: jis0208<<14 | 0x39<<7 | 0x3E,
	26124 - 19968: jis0208<<14 | 0x1D<<7 | 0x1A,
	26125 - 19968: jis0212<<14 | 0x20<<7 | 0x58,
	26126 - 19968: jis0208<<14 | 0x2B<<7 | 0x1F,
	26127 - 19968: jis0208<<14 | 0x19<<7 | 0x09,
	26129 - 19968: jis0212<<14 | 0x20<<7 | 0x59,
	26130 - 19968: jis0212<<14 | 0x20<<7 | 0x5A,
	26131 - 19968: jis0208<<14 | 0x0F<<7 | 0x36,
	26132 - 19968: jis0208<<14 | 0x1F<<7 | 0x2D,
	26133 - 19968: jis0208<<14 | 0x59<<7 | 0x14,
	26134 - 19968: jis0212<<14 | 0x20<<7 | 0x5C,
	26140 - 19968: jis0208<<14 | 0x39<<7 | 0x45,
	26141 - 19968: jis0212<<14 | 0x20<<7 | 0x5D,
	26142 - 19968: jis0208<<14 | 0x59<<7 | 0x18,
	26143 - 19968: jis0208<<14 | 0x1F<<7 | 0x10,
	26144 - 19968: jis0208<<14 | 0x10<<7 | 0x26,
	26145 - 19968: jis0212<<14 | 0x21<<7 | 0x01,
	26146 - 19968: jis0212<<14 | 0x21<<7 | 0x02,
	26147 - 19968: jis0212<<14 | 0x21<<7 | 0x03,
	26148 - 19968: jis0208<<14 | 0x59<<7 | 0x19,
	26149 - 19968: jis0208<<14 | 0x1C<<7 | 0x34,
	26150 - 19968: jis0212<<14 | 0x21<<7 | 0x05,
	26151 - 19968: jis0208<<14 | 0x2A<<7 | 0x45,
	26152 - 19968: jis0208<<14 | 0x19<<7 | 0x51,
	26153 - 19968: jis0212<<14 | 0x21<<7 | 0x06,
	26154 - 19968: jis0212<<14 | 0x21<<7 | 0x07,
	26155 - 19968: jis0212<<14 | 0x21<<7 | 0x08,
	26156 - 19968: jis0212<<14 | 0x21<<7 | 0x09,
	26157 - 19968: jis0208<<14 | 0x1D<<7 | 0x1B,
	26158 - 19968: jis0208<<14 | 0x59<<7 | 0x17,
	26159 - 19968: jis0208<<14 | 0x1F<<7 | 0x06,
	26160 - 19968: jis0212<<14 | 0x21<<7 | 0x0B,
	26161 - 19968: jis0208<<14 | 0x58<<7 | 0x07,
	26163 - 19968: jis0212<<14 | 0x21<<7 | 0x0D,
	26164 - 19968: jis0208<<14 | 0x39<<7 | 0x44,
	26165 - 19968: jis0208<<14 | 0x39<<7 | 0x42,
	26166 - 19968: jis0208<<14 | 0x39<<7 | 0x43,
	26167 - 19968: jis0212<<14 | 0x21<<7 | 0x0F,
	26169 - 19968: jis0212<<14 | 0x21<<7 | 0x0E,
	26171 - 19968: jis0208<<14 | 0x59<<7 | 0x15,
	26172 - 19968: jis0208<<14 | 0x22<<7 | 0x4A,
	26175 - 19968: jis0208<<14 | 0x3A<<7 | 0x05,
	26176 - 19968: jis0212<<14 | 0x21<<7 | 0x10,
	26177 - 19968: jis0208<<14 | 0x39<<7 | 0x49,
	26178 - 19968: jis0208<<14 | 0x1A<<7 | 0x5D,
	26179 - 19968: jis0208<<14 | 0x18<<7 | 0x17,
	26180 - 19968: jis0208<<14 | 0x39<<7 | 0x47,
	26181 - 19968: jis0212<<14 | 0x21<<7 | 0x11,
	26182 - 19968: jis0212<<14 | 0x21<<7 | 0x12,
	26185 - 19968: jis0208<<14 | 0x39<<7 | 0x48,
	26186 - 19968: jis0212<<14 | 0x21<<7 | 0x13,
	26187 - 19968: jis0208<<14 | 0x1E<<7 | 0x17,
	26188 - 19968: jis0212<<14 | 0x21<<7 | 0x14,
	26190 - 19968: jis0212<<14 | 0x21<<7 | 0x16,
	26191 - 19968: jis0208<<14 | 0x39<<7 | 0x46,
	26193 - 19968: jis0212<<14 | 0x21<<7 | 0x15,
	26194 - 19968: jis0208<<14 | 0x1A<<7 | 0x0E,
	26199 - 19968: jis0208<<14 | 0x59<<7 | 0x1B,
	26200 - 19968: jis0212<<14 | 0x21<<7 | 0x18,
	26201 - 19968: jis0208<<14 | 0x59<<7 | 0x1C,
	26203 - 19968: jis0212<<14 | 0x21<<7 | 0x1A,
	26204 - 19968: jis0212<<14 | 0x21<<7 | 0x1B,
	26205 - 19968: jis0208<<14 | 0x39<<7 | 0x4B,
	26206 - 19968: jis0208<<14 | 0x39<<7 | 0x4A,
	26207 - 19968: jis0208<<14 | 0x39<<7 | 0x4F,
	26208 - 19968: jis0212<<14 | 0x21<<7 | 0x1C,
	26209 - 19968: jis0212<<14 | 0x21<<7 | 0x1D,
	26210 - 19968: jis0208<<14 | 0x39<<7 | 0x50,
	26212 - 19968: jis0208<<14 | 0x39<<7 | 0x4C,
	26213 - 19968: jis0208<<14 | 0x59<<7 | 0x1A,
	26214 - 19968: jis0208<<14 | 0x12<<7 | 0x01,
	26215 - 19968: jis0208<<14 | 0x39<<7 | 0x4D,
	26216 - 19968: jis0208<<14 | 0x39<<7 | 0x4E,
	26217 - 19968: jis0208<<14 | 0x27<<7 | 0x34,
	26218 - 19968: jis0212<<14 | 0x21<<7 | 0x1F,
	26219 - 19968: jis0212<<14 | 0x21<<7 | 0x20,
	26220 - 19968: jis0212<<14 | 0x21<<7 | 0x21,
	26222 - 19968: jis0208<<14 | 0x28<<7 | 0x40,
	26223 - 19968: jis0208<<14 | 0x16<<7 | 0x29,
	26224 - 19968: jis0208<<14 | 0x39<<7 | 0x51,
	26227 - 19968: jis0208<<14 | 0x59<<7 | 0x1E,
	26228 - 19968: jis0208<<14 | 0x1F<<7 | 0x11,
	26229 - 19968: jis0212<<14 | 0x21<<7 | 0x24,
	26230 - 19968: jis0208<<14 | 0x1D<<7 | 0x1C,
	26231 - 19968: jis0212<<14 | 0x21<<7 | 0x26,
	26232 - 19968: jis0212<<14 | 0x21<<7 | 0x27,
	26233 - 19968: jis0212<<14 | 0x21<<7 | 0x28,
	26234 - 19968: jis0208<<14 | 0x22<<7 | 0x31,
	26235 - 19968: jis0212<<14 | 0x21<<7 | 0x29,
	26236 - 19968: jis0212<<14 | 0x21<<7 | 0x2B,
	26238 - 19968: jis0212<<14 | 0x21<<7 | 0x22,
	26239 - 19968: jis0212<<14 | 0x21<<7 | 0x25,
	26240 - 19968: jis0212<<14 | 0x21<<7 | 0x2A,
	26241 - 19968: jis0208<<14 | 0x15<<7 | 0x26,
	26243 - 19968: jis0208<<14 | 0x39<<7 | 0x52,
	26244 - 19968: jis0208<<14 | 0x39<<7 | 0x56,
	26247 - 19968: jis0208<<14 | 0x11<<7 | 0x2A,
	26248 - 19968: jis0208<<14 | 0x39<<7 | 0x53,
	26249 - 19968: jis0208<<14 | 0x39<<7 | 0x55,
	26251 - 19968: jis0212<<14 | 0x21<<7 | 0x2C,
	26252 - 19968: jis0212<<14 | 0x21<<7 | 0x2D,
	26253 - 19968: jis0212<<14 | 0x21<<7 | 0x2E,
	26254 - 19968: jis0208<<14 | 0x39<<7 | 0x54,
	26256 - 19968: jis0212<<14 | 0x21<<7 | 0x2F,
	26257 - 19968: jis0208<<14 | 0x1C<<7 | 0x4A,
	26258 - 19968: jis0212<<14 | 0x21<<7 | 0x30,
	26262 - 19968: jis0208<<14 | 0x22<<7 | 0x27,
	26263 - 19968: jis0208<<14 | 0x0F<<7 | 0x24,
	26264 - 19968: jis0208<<14 | 0x39<<7 | 0x57,
	26265 - 19968: jis0208<<14 | 0x59<<7 | 0x1F,
	26266 - 19968: jis0212<<14 | 0x21<<7 | 0x32,
	26267 - 19968: jis0212<<14 | 0x21<<7 | 0x33,
	26268 - 19968: jis0212<<14 | 0x21<<7 | 0x34,
	26269 - 19968: jis0208<<14 | 0x39<<7 | 0x58,
	26271 - 19968: jis0212<<14 | 0x21<<7 | 0x35,
	26272 - 19968: jis0208<<14 | 0x59<<7 | 0x20,
	26274 - 19968: jis0208<<14 | 0x23<<7 | 0x09,
	26276 - 19968: jis0212<<14 | 0x21<<7 | 0x37,
	26278 - 19968: jis0208<<14 | 0x2D<<7 | 0x50,
	26283 - 19968: jis0208<<14 | 0x1A<<7 | 0x22,
	26285 - 19968: jis0212<<14 | 0x21<<7 | 0x38,
	26286 - 19968: jis0208<<14 | 0x29<<7 | 0x4A,
	26289 - 19968: jis0212<<14 | 0x21<<7 | 0x39,
	26290 - 19968: jis0208<<14 | 0x59<<7 | 0x21,
	26292 - 19968: jis0208<<14 | 0x2A<<7 | 0x1C,
	26293 - 19968: jis0212<<14 | 0x21<<7 | 0x3B,
	26296 - 19968: jis0208<<14 | 0x3A<<7 | 0x01,
	26297 - 19968: jis0208<<14 | 0x39<<7 | 0x5A,
	26299 - 19968: jis0212<<14 | 0x21<<7 | 0x3C,
	26300 - 19968: jis0208<<14 | 0x39<<7 | 0x5D,
	26302 - 19968: jis0208<<14 | 0x39<<7 | 0x5C,
	26303 - 19968: jis0208<<14 | 0x59<<7 | 0x22,
	26304 - 19968: jis0212<<14 | 0x21<<7 | 0x3E,
	26305 - 19968: jis0208<<14 | 0x39<<7 | 0x59,
	26306 - 19968: jis0212<<14 | 0x21<<7 | 0x3F,
	26307 - 19968: jis0212<<14 | 0x21<<7 | 0x40,
	26308 - 19968: jis0208<<14 | 0x3A<<7 | 0x00,
	26311 - 19968: jis0208<<14 | 0x25<<7 | 0x3D,
	26312 - 19968: jis0212<<14 | 0x21<<7 | 0x41,
	26313 - 19968: jis0208<<14 | 0x39<<7 | 0x5B,
	26316 - 19968: jis0212<<14 | 0x21<<7 | 0x42,
	26318 - 19968: jis0212<<14 | 0x21<<7 | 0x43,
	26319 - 19968: jis0212<<14 | 0x21<<7 | 0x44,
	26324 - 19968: jis0212<<14 | 0x21<<7 | 0x45,
	26326 - 19968: jis0208<<14 | 0x3A<<7 | 0x02,
	26329 - 19968: jis0208<<14 | 0x1C<<7 | 0x4B,
	26330 - 19968: jis0208<<14 | 0x3A<<7 | 0x03,
	26331 - 19968: jis0212<<14 | 0x21<<7 | 0x46,
	26332 - 19968: jis0208<<14 | 0x2C<<7 | 0x2A,
	26333 - 19968: jis0208<<14 | 0x26<<7 | 0x57,
	26335 - 19968: jis0212<<14 | 0x21<<7 | 0x47,
	26336 - 19968: jis0208<<14 | 0x3A<<7 | 0x04,
	26342 - 19968: jis0208<<14 | 0x3A<<7 | 0x06,
	26344 - 19968: jis0212<<14 | 0x21<<7 | 0x48,
	26345 - 19968: jis0208<<14 | 0x3A<<7 | 0x07,
	26347 - 19968: jis0212<<14 | 0x21<<7 | 0x49,
	26348 - 19968: jis0212<<14 | 0x21<<7 | 0x4A,
	26350 - 19968: jis0212<<14 | 0x21<<7 | 0x4B,
	26352 - 19968: jis0208<<14 | 0x3A<<7 | 0x08,
	26354 - 19968: jis0208<<14 | 0x15<<7 | 0x29,
	26355 - 19968: jis0208<<14 | 0x10<<7 | 0x27,
	26356 - 19968: jis0208<<14 | 0x18<<7 | 0x18,
	26357 - 19968: jis0208<<14 | 0x3A<<7 | 0x09,
	26359 - 19968: jis0208<<14 | 0x3A<<7 | 0x0A,
	26360 - 19968: jis0208<<14 | 0x1C<<7 | 0x50,
	26361 - 19968: jis0208<<14 | 0x20<<7 | 0x41,
	26362 - 19968: jis0208<<14 | 0x59<<7 | 0x23,
	26363 - 19968: jis0208<<14 | 0x58<<7 | 0x0A,
	26364 - 19968: jis0208<<14 | 0x31<<7 | 0x37,
	26365 - 19968: jis0208<<14 | 0x20<<7 | 0x1D,
	26366 - 19968: jis0208<<14 | 0x20<<7 | 0x1C,
	26367 - 19968: jis0208<<14 | 0x21<<7 | 0x37,
	26368 - 19968: jis0208<<14 | 0x19<<7 | 0x26,
	26371 - 19968: jis0208<<14 | 0x2F<<7 | 0x51,
	26373 - 19968: jis0212<<14 | 0x21<<7 | 0x4D,
	26375 - 19968: jis0212<<14 | 0x21<<7 | 0x4E,
	26376 - 19968: jis0208<<14 | 0x16<<7 | 0x4D,
	26377 - 19968: jis0208<<14 | 0x2C<<7 | 0x0C,
	26379 - 19968: jis0208<<14 | 0x29<<7 | 0x5D,
	26381 - 19968: jis0208<<14 | 0x28<<7 | 0x5D,
	26382 - 19968: jis0208<<14 | 0x59<<7 | 0x24,
	26383 - 19968: jis0208<<14 | 0x3A<<7 | 0x0B,
	26387 - 19968: jis0212<<14 | 0x21<<7 | 0x50,
	26388 - 19968: jis0208<<14 | 0x19<<7 | 0x52,
	26389 - 19968: jis0208<<14 | 0x23<<7 | 0x1E,
	26390 - 19968: jis0208<<14 | 0x3A<<7 | 0x0C,
	26391 - 19968: jis0208<<14 | 0x2E<<7 | 0x0E,
	26393 - 19968: jis0212<<14 | 0x21<<7 | 0x51,
	26395 - 19968: jis0208<<14 | 0x2A<<7 | 0x1D,
	26396 - 19968: jis0212<<14 | 0x21<<7 | 0x52,
	26397 - 19968: jis0208<<14 | 0x23<<7 | 0x0A,
	26398 - 19968: jis0208<<14 | 0x3A<<7 | 0x0D,
	26399 - 19968: jis0208<<14 | 0x13<<7 | 0x5B,
	26400 - 19968: jis0212<<14 | 0x21<<7 | 0x53,
	26402 - 19968: jis0212<<14 | 0x21<<7 | 0x54,
	26406 - 19968: jis0208<<14 | 0x3A<<7 | 0x0E,
	26407 - 19968: jis0208<<14 | 0x3A<<7 | 0x0F,
	26408 - 19968: jis0208<<14 | 0x2B<<7 | 0x39,
	26410 - 19968: jis0208<<14 | 0x2B<<7 | 0x03,
	26411 - 19968: jis0208<<14 | 0x2A<<7 | 0x55,
	26412 - 19968: jis0208<<14 | 0x2A<<7 | 0x3B,
	26413 - 19968: jis0208<<14 | 0x1A<<7 | 0x04,
	26414 - 19968: jis0208<<14 | 0x3A<<7 | 0x11,
	26417 - 19968: jis0208<<14 | 0x1B<<7 | 0x4A,
	26419 - 19968: jis0212<<14 | 0x21<<7 | 0x55,
	26420 - 19968: jis0208<<14 | 0x2A<<7 | 0x30,
	26422 - 19968: jis0208<<14 | 0x3A<<7 | 0x13,
	26423 - 19968: jis0208<<14 | 0x3A<<7 | 0x16,
	26424 - 19968: jis0208<<14 | 0x3A<<7 | 0x15,
	26426 - 19968: jis0208<<14 | 0x13<<7 | 0x58,
	26429 - 19968: jis0208<<14 | 0x14<<7 | 0x3F,
	26430 - 19968: jis0212<<14 | 0x21<<7 | 0x56,
	26431 - 19968: jis0208<<14 | 0x3A<<7 | 0x12,
	26433 - 19968: jis0208<<14 | 0x3A<<7 | 0x14,
	26437 - 19968: jis0212<<14 | 0x21<<7 | 0x57,
	26438 - 19968: jis0208<<14 | 0x3A<<7 | 0x17,
	26439 - 19968: jis0212<<14 | 0x21<<7 | 0x58,
	26440 - 19968: jis0212<<14 | 0x21<<7 | 0x59,
	26441 - 19968: jis0208<<14 | 0x1E<<7 | 0x58,
	26444 - 19968: jis0212<<14 | 0x21<<7 | 0x5A,
	26446 - 19968: jis0208<<14 | 0x2C<<7 | 0x5A,
	26447 - 19968: jis0208<<14 | 0x0F<<7 | 0x28,
	26448 - 19968: jis0208<<14 | 0x19<<7 | 0x3F,
	26449 - 19968: jis0208<<14 | 0x21<<7 | 0x1B,
	26451 - 19968: jis0208<<14 | 0x1B<<7 | 0x3C,
	26452 - 19968: jis0212<<14 | 0x21<<7 | 0x5B,
	26453 - 19968: jis0212<<14 | 0x21<<7 | 0x5C,
	26454 - 19968: jis0208<<14 | 0x1D<<7 | 0x52,
	26457 - 19968: jis0208<<14 | 0x3A<<7 | 0x1A,
	26460 - 19968: jis0208<<14 | 0x24<<7 | 0x2D,
	26461 - 19968: jis0212<<14 | 0x21<<7 | 0x5D,
	26462 - 19968: jis0208<<14 | 0x3A<<7 | 0x18,
	26463 - 19968: jis0208<<14 | 0x21<<7 | 0x0A,
	26464 - 19968: jis0208<<14 | 0x3A<<7 | 0x19,
	26465 - 19968: jis0208<<14 | 0x1D<<7 | 0x51,
	26466 - 19968: jis0208<<14 | 0x2B<<7 | 0x3C,
	26467 - 19968: jis0208<<14 | 0x3A<<7 | 0x1B,
	26468 - 19968: jis0208<<14 | 0x3A<<7 | 0x1C,
	26469 - 19968: jis0208<<14 | 0x2C<<7 | 0x47,
	26470 - 19968: jis0208<<14 | 0x59<<7 | 0x26,
	26474 - 19968: jis0208<<14 | 0x3A<<7 | 0x21,
	26476 - 19968: jis0212<<14 | 0x22<<7 | 0x01,
	26477 - 19968: jis0208<<14 | 0x18<<7 | 0x19,
	26478 - 19968: jis0212<<14 | 0x22<<7 | 0x02,
	26479 - 19968: jis0208<<14 | 0x26<<7 | 0x34,
	26480 - 19968: jis0208<<14 | 0x3A<<7 | 0x1E,
	26481 - 19968: jis0208<<14 | 0x24<<7 | 0x4B,
	26482 - 19968: jis0208<<14 | 0x39<<7 | 0x3D,
	26483 - 19968: jis0208<<14 | 0x39<<7 | 0x41,
	26484 - 19968: jis0212<<14 | 0x22<<7 | 0x03,
	26485 - 19968: jis0208<<14 | 0x14<<7 | 0x2E,
	26486 - 19968: jis0212<<14 | 0x22<<7 | 0x04,
	26487 - 19968: jis0208<<14 | 0x26<<7 | 0x26,
	26491 - 19968: jis0212<<14 | 0x22<<7 | 0x05,
	26492 - 19968: jis0208<<14 | 0x3A<<7 | 0x20,
	26494 - 19968: jis0208<<14 | 0x1D<<7 | 0x1D,
	26495 - 19968: jis0208<<14 | 0x27<<7 | 0x23,
	26497 - 19968: jis0212<<14 | 0x22<<7 | 0x06,
	26500 - 19968: jis0212<<14 | 0x22<<7 | 0x07,
	26501 - 19968: jis0208<<14 | 0x3A<<7 | 0x26,
	26503 - 19968: jis0208<<14 | 0x27<<7 | 0x59,
	26505 - 19968: jis0208<<14 | 0x3A<<7 | 0x1D,
	26507 - 19968: jis0208<<14 | 0x3A<<7 | 0x23,
	26508 - 19968: jis0208<<14 | 0x3A<<7 | 0x22,
	26510 - 19968: jis0212<<14 | 0x22<<7 | 0x08,
	26511 - 19968: jis0212<<14 | 0x22<<7 | 0x09,
	26512 - 19968: jis0208<<14 | 0x1F<<7 | 0x2E,
	26513 - 19968: jis0212<<14 | 0x22<<7 | 0x0A,
	26515 - 19968: jis0212<<14 | 0x22<<7 | 0x0B,
	26517 - 19968: jis0208<<14 | 0x2A<<7 | 0x4C,
	26518 - 19968: jis0212<<14 | 0x22<<7 | 0x0C,
	26519 - 19968: jis0208<<14 | 0x2D<<7 | 0x32,
	26520 - 19968: jis0212<<14 | 0x22<<7 | 0x0D,
	26521 - 19968: jis0212<<14 | 0x22<<7 | 0x0E,
	26522 - 19968: jis0208<<14 | 0x2A<<7 | 0x46,
	26523 - 19968: jis0212<<14 | 0x22<<7 | 0x0F,
	26524 - 19968: jis0208<<14 | 0x11<<7 | 0x2B,
	26525 - 19968: jis0208<<14 | 0x1A<<7 | 0x3D,
	26528 - 19968: jis0208<<14 | 0x2E<<7 | 0x27,
	26529 - 19968: jis0208<<14 | 0x3A<<7 | 0x25,
	26530 - 19968: jis0208<<14 | 0x1E<<7 | 0x54,
	26534 - 19968: jis0208<<14 | 0x3A<<7 | 0x24,
	26537 - 19968: jis0208<<14 | 0x3A<<7 | 0x1F,
	26543 - 19968: jis0208<<14 | 0x17<<7 | 0x2E,
	26544 - 19968: jis0212<<14 | 0x22<<7 | 0x10,
	26545 - 19968: jis0212<<14 | 0x22<<7 | 0x11,
	26546 - 19968: jis0212<<14 | 0x22<<7 | 0x12,
	26547 - 19968: jis0208<<14 | 0x3A<<7 | 0x2B,
	26548 - 19968: jis0208<<14 | 0x3A<<7 | 0x29,
	26549 - 19968: jis0212<<14 | 0x22<<7 | 0x13,
	26550 - 19968: jis0208<<14 | 0x11<<7 | 0x2C,
	26551 - 19968: jis0208<<14 | 0x3A<<7 | 0x27,
	26552 - 19968: jis0208<<14 | 0x3A<<7 | 0x2D,
	26553 - 19968: jis0208<<14 | 0x3A<<7 | 0x33,
	26555 - 19968: jis0208<<14 | 0x59<<7 | 0x27,
	26556 - 19968: jis0212<<14 | 0x22<<7 | 0x15,
	26557 - 19968: jis0212<<14 | 0x22<<7 | 0x16,
	26560 - 19968: jis0208<<14 | 0x59<<7 | 0x29,
	26561 - 19968: jis0208<<14 | 0x21<<7 | 0x27,
	26562 - 19968: jis0212<<14 | 0x22<<7 | 0x19,
	26563 - 19968: jis0212<<14 | 0x22<<7 | 0x1A,
	26564 - 19968: jis0208<<14 | 0x29<<7 | 0x20,
	26565 - 19968: jis0212<<14 | 0x22<<7 | 0x1B,
	26566 - 19968: jis0208<<14 | 0x3A<<7 | 0x35,
	26568 - 19968: jis0212<<14 | 0x22<<7 | 0x1C,
	26569 - 19968: jis0212<<14 | 0x22<<7 | 0x1D,
	26570 - 19968: jis0208<<14 | 0x28<<7 | 0x01,
	26574 - 19968: jis0208<<14 | 0x3A<<7 | 0x34,
	26575 - 19968: jis0208<<14 | 0x26<<7 | 0x4F,
	26576 - 19968: jis0208<<14 | 0x2A<<7 | 0x1E,
	26577 - 19968: jis0208<<14 | 0x13<<7 | 0x1A,
	26578 - 19968: jis0212<<14 | 0x22<<7 | 0x1E,
	26579 - 19968: jis0208<<14 | 0x1F<<7 | 0x56,
	26580 - 19968: jis0208<<14 | 0x1C<<7 | 0x1F,
	26583 - 19968: jis0212<<14 | 0x22<<7 | 0x1F,
	26584 - 19968: jis0208<<14 | 0x23<<7 | 0x32,
	26585 - 19968: jis0212<<14 | 0x22<<7 | 0x20,
	26586 - 19968: jis0208<<14 | 0x2C<<7 | 0x0D,
	26588 - 19968: jis0212<<14 | 0x22<<7 | 0x21,
	26589 - 19968: jis0208<<14 | 0x3A<<7 | 0x30,
	26590 - 19968: jis0208<<14 | 0x3A<<7 | 0x2F,
	26593 - 19968: jis0212<<14 | 0x22<<7 | 0x22,
	26594 - 19968: jis0208<<14 | 0x3A<<7 | 0x31,
	26596 - 19968: jis0208<<14 | 0x3A<<7 | 0x2E,
	26598 - 19968: jis0212<<14 | 0x22<<7 | 0x23,
	26599 - 19968: jis0208<<14 | 0x3A<<7 | 0x36,
	26601 - 19968: jis0208<<14 | 0x3A<<7 | 0x2C,
	26604 - 19968: jis0208<<14 | 0x3A<<7 | 0x2A,
	26606 - 19968: jis0208<<14 | 0x3A<<7 | 0x32,
	26607 - 19968: jis0208<<14 | 0x3A<<7 | 0x28,
	26608 - 19968: jis0212<<14 | 0x22<<7 | 0x24,
	26609 - 19968: jis0208<<14 | 0x22<<7 | 0x4B,
	26610 - 19968: jis0212<<14 | 0x22<<7 | 0x25,
	26611 - 19968: jis0208<<14 | 0x2B<<7 | 0x57,
	26612 - 19968: jis0208<<14 | 0x1B<<7 | 0x25,
	26613 - 19968: jis0208<<14 | 0x19<<7 | 0x53,
	26614 - 19968: jis0212<<14 | 0x22<<7 | 0x26,
	26615 - 19968: jis0212<<14 | 0x22<<7 | 0x27,
	26617 - 19968: jis0212<<14 | 0x22<<7 | 0x17,
	26619 - 19968: jis0208<<14 | 0x19<<7 | 0x19,
	26622 - 19968: jis0208<<14 | 0x2A<<7 | 0x4E,
	26623 - 19968: jis0208<<14 | 0x12<<7 | 0x20,
	26625 - 19968: jis0208<<14 | 0x59<<7 | 0x2A,
	26626 - 19968: jis0208<<14 | 0x23<<7 | 0x2D,
	26627 - 19968: jis0208<<14 | 0x25<<7 | 0x29,
	26628 - 19968: jis0208<<14 | 0x10<<7 | 0x28,
	26643 - 19968: jis0208<<14 | 0x1F<<7 | 0x51,
	26644 - 19968: jis0212<<14 | 0x22<<7 | 0x29,
	26646 - 19968: jis0208<<14 | 0x1F<<7 | 0x13,
	26647 - 19968: jis0208<<14 | 0x16<<7 | 0x09,
	26649 - 19968: jis0212<<14 | 0x22<<7 | 0x2A,
	26653 - 19968: jis0212<<14 | 0x22<<7 | 0x2B,
	26654 - 19968: jis0208<<14 | 0x3A<<7 | 0x38,
	26655 - 19968: jis0212<<14 | 0x22<<7 | 0x2C,
	26657 - 19968: jis0208<<14 | 0x18<<7 | 0x1A,
	26658 - 19968: jis0208<<14 | 0x12<<7 | 0x5B,
	26663 - 19968: jis0212<<14 | 0x22<<7 | 0x2E,
	26664 - 19968: jis0212<<14 | 0x22<<7 | 0x2D,
	26665 - 19968: jis0208<<14 | 0x3A<<7 | 0x3A,
	26666 - 19968: jis0208<<14 | 0x12<<7 | 0x53,
	26667 - 19968: jis0208<<14 | 0x3A<<7 | 0x40,
	26668 - 19968: jis0212<<14 | 0x22<<7 | 0x2F,
	26669 - 19968: jis0212<<14 | 0x22<<7 | 0x30,
	26671 - 19968: jis0212<<14 | 0x22<<7 | 0x31,
	26672 - 19968: jis0212<<14 | 0x22<<7 | 0x32,
	26673 - 19968: jis0212<<14 | 0x22<<7 | 0x33,
	26674 - 19968: jis0208<<14 | 0x3A<<7 | 0x3D,
	26675 - 19968: jis0212<<14 | 0x22<<7 | 0x34,
	26676 - 19968: jis0208<<14 | 0x1F<<7 | 0x52,
	26680 - 19968: jis0208<<14 | 0x12<<7 | 0x2A,
	26681 - 19968: jis0208<<14 | 0x19<<7 | 0x0B,
	26683 - 19968: jis0212<<14 | 0x22<<7 | 0x35,
	26684 - 19968: jis0208<<14 | 0x12<<7 | 0x29,
	26685 - 19968: jis0208<<14 | 0x19<<7 | 0x2E,
	26687 - 19968: jis0212<<14 | 0x22<<7 | 0x36,
	26688 - 19968: jis0208<<14 | 0x3A<<7 | 0x3B,
	26689 - 19968: jis0208<<14 | 0x16<<7 | 0x44,
	26690 - 19968: jis0208<<14 | 0x16<<7 | 0x2A,
	26691 - 19968: jis0208<<14 | 0x24<<7 | 0x4C,
	26692 - 19968: jis0208<<14 | 0x59<<7 | 0x2B,
	26693 - 19968: jis0212<<14 | 0x22<<7 | 0x38,
	26694 - 19968: jis0208<<14 | 0x3A<<7 | 0x39,
	26696 - 19968: jis0208<<14 | 0x0F<<7 | 0x25,
	26698 - 19968: jis0212<<14 | 0x22<<7 | 0x39,
	26700 - 19968: jis0212<<14 | 0x22<<7 | 0x3A,
	26701 - 19968: jis0208<<14 | 0x3A<<7 | 0x3C,
	26702 - 19968: jis0208<<14 | 0x3A<<7 | 0x3E,
	26704 - 19968: jis0208<<14 | 0x15<<7 | 0x2C,
	26705 - 19968: jis0208<<14 | 0x16<<7 | 0x0B,
	26706 - 19968: jis0208<<14 | 0x59<<7 | 0x28,
	26707 - 19968: jis0208<<14 | 0x13<<7 | 0x1B,
	26708 - 19968: jis0208<<14 | 0x14<<7 | 0x2A,
	26709 - 19968: jis0212<<14 | 0x22<<7 | 0x3B,
	26711 - 19968: jis0212<<14 | 0x22<<7 | 0x3C,
	26712 - 19968: jis0212<<14 | 0x22<<7 | 0x3D,
	26713 - 19968: jis0208<<14 | 0x3A<<7 | 0x41,
	26715 - 19968: jis0212<<14 | 0x22<<7 | 0x3E,
	26716 - 19968: jis0208<<14 | 0x19<<7 | 0x58,
	26717 - 19968: jis0208<<14 | 0x2A<<7 | 0x50,
	26719 - 19968: jis0208<<14 | 0x1A<<7 | 0x16,
	26723 - 19968: jis0208<<14 | 0x3A<<7 | 0x42,
	26727 - 19968: jis0208<<14 | 0x28<<7 | 0x0F,
	26731 - 19968: jis0212<<14 | 0x22<<7 | 0x3F,
	26734 - 19968: jis0212<<14 | 0x22<<7 | 0x40,
	26735 - 19968: jis0212<<14 | 0x22<<7 | 0x41,
	26736 - 19968: jis0212<<14 | 0x22<<7 | 0x42,
	26737 - 19968: jis0212<<14 | 0x22<<7 | 0x43,
	26738 - 19968: jis0212<<14 | 0x22<<7 | 0x44,
	26740 - 19968: jis0208<<14 | 0x3A<<7 | 0x4E,
	26741 - 19968: jis0212<<14 | 0x22<<7 | 0x45,
	26742 - 19968: jis0208<<14 | 0x11<<7 | 0x12,
	26743 - 19968: jis0208<<14 | 0x3A<<7 | 0x43,
	26745 - 19968: jis0212<<14 | 0x22<<7 | 0x46,
	26746 - 19968: jis0212<<14 | 0x22<<7 | 0x47,
	26747 - 19968: jis0212<<14 | 0x22<<7 | 0x48,
	26748 - 19968: jis0212<<14 | 0x22<<7 | 0x49,
	26750 - 19968: jis0208<<14 | 0x3A<<7 | 0x54,
	26751 - 19968: jis0208<<14 | 0x3A<<7 | 0x44,
	26753 - 19968: jis0208<<14 | 0x2D<<7 | 0x21,
	26754 - 19968: jis0212<<14 | 0x22<<7 | 0x4A,
	26755 - 19968: jis0208<<14 | 0x3A<<7 | 0x4B,
	26756 - 19968: jis0212<<14 | 0x22<<7 | 0x4B,
	26757 - 19968: jis0208<<14 | 0x26<<7 | 0x3E,
	26758 - 19968: jis0212<<14 | 0x22<<7 | 0x4C,
	26760 - 19968: jis0212<<14 | 0x22<<7 | 0x4D,
	26765 - 19968: jis0208<<14 | 0x3A<<7 | 0x53,
	26767 - 19968: jis0208<<14 | 0x3A<<7 | 0x46,
	26771 - 19968: jis0208<<14 | 0x0F<<7 | 0x13,
	26772 - 19968: jis0208<<14 | 0x3A<<7 | 0x48,
	26774 - 19968: jis0212<<14 | 0x22<<7 | 0x4E,
	26775 - 19968: jis0208<<14 | 0x18<<7 | 0x1B,
	26776 - 19968: jis0212<<14 | 0x22<<7 | 0x4F,
	26778 - 19968: jis0212<<14 | 0x22<<7 | 0x50,
	26779 - 19968: jis0208<<14 | 0x3A<<7 | 0x4A,
	26780 - 19968: jis0212<<14 | 0x22<<7 | 0x51,
	26781 - 19968: jis0208<<14 | 0x3A<<7 | 0x49,
	26783 - 19968: jis0208<<14 | 0x3A<<7 | 0x45,
	26784 - 19968: jis0208<<14 | 0x3A<<7 | 0x50,
	26785 - 19968: jis0212<<14 | 0x22<<7 | 0x52,
	26786 - 19968: jis0208<<14 | 0x1D<<7 | 0x1E,
	26787 - 19968: jis0212<<14 | 0x22<<7 | 0x53,
	26789 - 19968: jis0212<<14 | 0x22<<7 | 0x54,
	26790 - 19968: jis0208<<14 | 0x33<<7 | 0x4C,
	26791 - 19968: jis0208<<14 | 0x17<<7 | 0x47,
	26792 - 19968: jis0208<<14 | 0x2C<<7 | 0x5B,
	26793 - 19968: jis0212<<14 | 0x22<<7 | 0x55,
	26794 - 19968: jis0212<<14 | 0x22<<7 | 0x56,
	26797 - 19968: jis0208<<14 | 0x3A<<7 | 0x47,
	26798 - 19968: jis0212<<14 | 0x22<<7 | 0x57,
	26799 - 19968: jis0208<<14 | 0x23<<7 | 0x53,
	26800 - 19968: jis0208<<14 | 0x12<<7 | 0x02,
	26801 - 19968: jis0208<<14 | 0x19<<7 | 0x0C,
	26802 - 19968: jis0212<<14 | 0x22<<7 | 0x58,
	26803 - 19968: jis0208<<14 | 0x3A<<7 | 0x3F,
	26805 - 19968: jis0208<<14 | 0x3A<<7 | 0x4F,
	26806 - 19968: jis0208<<14 | 0x12<<7 | 0x40,
	26809 - 19968: jis0208<<14 | 0x3A<<7 | 0x4D,
	26810 - 19968: jis0208<<14 | 0x3A<<7 | 0x51,
	26811 - 19968: jis0212<<14 | 0x22<<7 | 0x59,
	26812 - 19968: jis0208<<14 | 0x24<<7 | 0x4D,
	26820 - 19968: jis0208<<14 | 0x13<<7 | 0x5D,
	26821 - 19968: jis0212<<14 | 0x22<<7 | 0x5A,
	26822 - 19968: jis0208<<14 | 0x3B<<7 | 0x11,
	26824 - 19968: jis0208<<14 | 0x58<<7 | 0x08,
	26825 - 19968: jis0208<<14 | 0x2B<<7 | 0x28,
	26826 - 19968: jis0208<<14 | 0x3A<<7 | 0x56,
	26827 - 19968: jis0208<<14 | 0x13<<7 | 0x5C,
	26828 - 19968: jis0212<<14 | 0x22<<7 | 0x5C,
	26829 - 19968: jis0208<<14 | 0x3A<<7 | 0x5D,
	26831 - 19968: jis0208<<14 | 0x59<<7 | 0x2C,
	26832 - 19968: jis0212<<14 | 0x23<<7 | 0x00,
	26833 - 19968: jis0212<<14 | 0x23<<7 | 0x01,
	26834 - 19968: jis0208<<14 | 0x2A<<7 | 0x1F,
	26835 - 19968: jis0212<<14 | 0x23<<7 | 0x02,
	26836 - 19968: jis0208<<14 | 0x3B<<7 | 0x00,
	26837 - 19968: jis0208<<14 | 0x3B<<7 | 0x02,
	26838 - 19968: jis0212<<14 | 0x23<<7 | 0x03,
	26839 - 19968: jis0208<<14 | 0x3B<<7 | 0x06,
	26840 - 19968: jis0208<<14 | 0x3A<<7 | 0x58,
	26841 - 19968: jis0212<<14 | 0x23<<7 | 0x04,
	26842 - 19968: jis0208<<14 | 0x22<<7 | 0x09,
	26844 - 19968: jis0212<<14 | 0x23<<7 | 0x05,
	26845 - 19968: jis0212<<14 | 0x23<<7 | 0x06,
	26847 - 19968: jis0208<<14 | 0x24<<7 | 0x4E,
	26848 - 19968: jis0208<<14 | 0x3B<<7 | 0x0A,
	26849 - 19968: jis0208<<14 | 0x3A<<7 | 0x5B,
	26851 - 19968: jis0208<<14 | 0x3B<<7 | 0x07,
	26853 - 19968: jis0212<<14 | 0x23<<7 | 0x07,
	26855 - 19968: jis0208<<14 | 0x3B<<7 | 0x01,
	26856 - 19968: jis0212<<14 | 0x23<<7 | 0x08,
	26858 - 19968: jis0212<<14 | 0x23<<7 | 0x09,
	26859 - 19968: jis0212<<14 | 0x23<<7 | 0x0A,
	26860 - 19968: jis0212<<14 | 0x23<<7 | 0x0B,
	26861 - 19968: jis0212<<14 | 0x23<<7 | 0x0C,
	26862 - 19968: jis0208<<14 | 0x1E<<7 | 0x18,
	26863 - 19968: jis0208<<14 | 0x3B<<7 | 0x0B,
	26864 - 19968: jis0212<<14 | 0x23<<7 | 0x0D,
	26865 - 19968: jis0212<<14 | 0x23<<7 | 0x0E,
	26866 - 19968: jis0208<<14 | 0x1F<<7 | 0x12,
	26869 - 19968: jis0212<<14 | 0x23<<7 | 0x0F,
	26870 - 19968: jis0212<<14 | 0x23<<7 | 0x10,
	26873 - 19968: jis0208<<14 | 0x3B<<7 | 0x09,
	26874 - 19968: jis0208<<14 | 0x13<<7 | 0x1C,
	26875 - 19968: jis0212<<14 | 0x23<<7 | 0x11,
	26876 - 19968: jis0212<<14 | 0x23<<7 | 0x12,
	26877 - 19968: jis0212<<14 | 0x23<<7 | 0x13,
	26880 - 19968: jis0208<<14 | 0x2E<<7 | 0x2F,
	26881 - 19968: jis0208<<14 | 0x3A<<7 | 0x55,
	26884 - 19968: jis0208<<14 | 0x3B<<7 | 0x05,
	26885 - 19968: jis0208<<14 | 0x0F<<7 | 0x37,
	26886 - 19968: jis0212<<14 | 0x23<<7 | 0x14,
	26888 - 19968: jis0208<<14 | 0x3A<<7 | 0x57,
	26889 - 19968: jis0212<<14 | 0x23<<7 | 0x15,
	26890 - 19968: jis0212<<14 | 0x23<<7 | 0x16,
	26891 - 19968: jis0208<<14 | 0x2B<<7 | 0x19,
	26892 - 19968: jis0208<<14 | 0x3A<<7 | 0x5C,
	26893 - 19968: jis0208<<14 | 0x1E<<7 | 0x01,
	26894 - 19968: jis0208<<14 | 0x23<<7 | 0x26,
	26895 - 19968: jis0208<<14 | 0x3A<<7 | 0x52,
	26896 - 19968: jis0212<<14 | 0x23<<7 | 0x17,
	26897 - 19968: jis0212<<14 | 0x23<<7 | 0x18,
	26898 - 19968: jis0208<<14 | 0x3B<<7 | 0x04,
	26899 - 19968: jis0212<<14 | 0x23<<7 | 0x19,
	26902 - 19968: jis0212<<14 | 0x23<<7 | 0x1A,
	26903 - 19968: jis0212<<14 | 0x23<<7 | 0x1B,
	26905 - 19968: jis0208<<14 | 0x1E<<7 | 0x59,
	26906 - 19968: jis0208<<14 | 0x3B<<7 | 0x0E,
	26907 - 19968: jis0208<<14 | 0x12<<7 | 0x50,
	26908 - 19968: jis0208<<14 | 0x17<<7 | 0x00,
	26913 - 19968: jis0208<<14 | 0x3B<<7 | 0x10,
	26914 - 19968: jis0208<<14 | 0x3A<<7 | 0x59,
	26915 - 19968: jis0208<<14 | 0x3B<<7 | 0x0F,
	26917 - 19968: jis0208<<14 | 0x3B<<7 | 0x08,
	26918 - 19968: jis0208<<14 | 0x3A<<7 | 0x5A,
	26920 - 19968: jis0208<<14 | 0x3B<<7 | 0x0C,
	26922 - 19968: jis0208<<14 | 0x3B<<7 | 0x0D,
	26928 - 19968: jis0208<<14 | 0x3B<<7 | 0x1E,
	26929 - 19968: jis0212<<14 | 0x23<<7 | 0x1C,
	26931 - 19968: jis0212<<14 | 0x23<<7 | 0x1D,
	26932 - 19968: jis0208<<14 | 0x25<<7 | 0x2D,
	26933 - 19968: jis0212<<14 | 0x23<<7 | 0x1E,
	26934 - 19968: jis0208<<14 | 0x3B<<7 | 0x03,
	26936 - 19968: jis0212<<14 | 0x23<<7 | 0x1F,
	26937 - 19968: jis0208<<14 | 0x3B<<7 | 0x1A,
	26939 - 19968: jis0212<<14 | 0x23<<7 | 0x20,
	26941 - 19968: jis0208<<14 | 0x3B<<7 | 0x1C,
	26943 - 19968: jis0208<<14 | 0x23<<7 | 0x37,
	26946 - 19968: jis0212<<14 | 0x23<<7 | 0x21,
	26949 - 19968: jis0212<<14 | 0x23<<7 | 0x22,
	26953 - 19968: jis0212<<14 | 0x23<<7 | 0x23,
	26954 - 19968: jis0208<<14 | 0x2C<<7 | 0x2B,
	26958 - 19968: jis0212<<14 | 0x23<<7 | 0x24,
	26963 - 19968: jis0208<<14 | 0x28<<7 | 0x55,
	26964 - 19968: jis0208<<14 | 0x3B<<7 | 0x17,
	26965 - 19968: jis0208<<14 | 0x21<<7 | 0x29,
	26967 - 19968: jis0212<<14 | 0x23<<7 | 0x25,
	26969 - 19968: jis0208<<14 | 0x3B<<7 | 0x1D,
	26970 - 19968: jis0208<<14 | 0x20<<7 | 0x1E,
	26971 - 19968: jis0212<<14 | 0x23<<7 | 0x26,
	26972 - 19968: jis0208<<14 | 0x3B<<7 | 0x14,
	26973 - 19968: jis0208<<14 | 0x3B<<7 | 0x21,
	26974 - 19968: jis0208<<14 | 0x3B<<7 | 0x20,
	26976 - 19968: jis0208<<14 | 0x25<<7 | 0x4E,
	26977 - 19968: jis0208<<14 | 0x3B<<7 | 0x1F,
	26978 - 19968: jis0208<<14 | 0x25<<7 | 0x49,
	26979 - 19968: jis0212<<14 | 0x23<<7 | 0x27,
	26980 - 19968: jis0212<<14 | 0x23<<7 | 0x28,
	26981 - 19968: jis0212<<14 | 0x23<<7 | 0x29,
	26982 - 19968: jis0212<<14 | 0x23<<7 | 0x2A,
	26984 - 19968: jis0208<<14 | 0x59<<7 | 0x2E,
	26985 - 19968: jis0212<<14 | 0x23<<7 | 0x2C,
	26986 - 19968: jis0208<<14 | 0x3B<<7 | 0x23,
	26987 - 19968: jis0208<<14 | 0x3B<<7 | 0x16,
	26988 - 19968: jis0212<<14 | 0x23<<7 | 0x2D,
	26989 - 19968: jis0208<<14 | 0x15<<7 | 0x27,
	26990 - 19968: jis0208<<14 | 0x3B<<7 | 0x19,
	26991 - 19968: jis0208<<14 | 0x1C<<7 | 0x3C,
	26992 - 19968: jis0212<<14 | 0x23<<7 | 0x2E,
	26993 - 19968: jis0212<<14 | 0x23<<7 | 0x2F,
	26994 - 19968: jis0212<<14 | 0x23<<7 | 0x30,
	26995 - 19968: jis0208<<14 | 0x26<<7 | 0x3F,
	26996 - 19968: jis0208<<14 | 0x3B<<7 | 0x1B,
	26997 - 19968: jis0208<<14 | 0x15<<7 | 0x2A,
	26999 - 19968: jis0208<<14 | 0x3B<<7 | 0x13,
	27000 - 19968: jis0208<<14 | 0x3B<<7 | 0x15,
	27001 - 19968: jis0208<<14 | 0x3B<<7 | 0x12,
	27002 - 19968: jis0212<<14 | 0x23<<7 | 0x31,
	27003 - 19968: jis0212<<14 | 0x23<<7 | 0x32,
	27004 - 19968: jis0208<<14 | 0x2E<<7 | 0x0F,
	27005 - 19968: jis0208<<14 | 0x12<<7 | 0x39,
	27006 - 19968: jis0208<<14 | 0x3B<<7 | 0x18,
	27007 - 19968: jis0212<<14 | 0x23<<7 | 0x33,
	27008 - 19968: jis0212<<14 | 0x23<<7 | 0x34,
	27009 - 19968: jis0208<<14 | 0x3B<<7 | 0x22,
	27010 - 19968: jis0208<<14 | 0x12<<7 | 0x14,
	27018 - 19968: jis0208<<14 | 0x19<<7 | 0x46,
	27021 - 19968: jis0212<<14 | 0x23<<7 | 0x35,
	27022 - 19968: jis0208<<14 | 0x10<<7 | 0x3C,
	27025 - 19968: jis0208<<14 | 0x3B<<7 | 0x33,
	27026 - 19968: jis0212<<14 | 0x23<<7 | 0x36,
	27028 - 19968: jis0208<<14 | 0x2E<<7 | 0x10,
	27029 - 19968: jis0208<<14 | 0x3B<<7 | 0x36,
	27030 - 19968: jis0212<<14 | 0x23<<7 | 0x37,
	27032 - 19968: jis0208<<14 | 0x59<<7 | 0x30,
	27035 - 19968: jis0208<<14 | 0x1E<<7 | 0x19,
	27036 - 19968: jis0208<<14 | 0x3B<<7 | 0x35,
	27040 - 19968: jis0208<<14 | 0x3B<<7 | 0x34,
	27041 - 19968: jis0212<<14 | 0x23<<7 | 0x39,
	27045 - 19968: jis0212<<14 | 0x23<<7 | 0x3A,
	27046 - 19968: jis0212<<14 | 0x23<<7 | 0x3B,
	27047 - 19968: jis0208<<14 | 0x3B<<7 | 0x31,
	27048 - 19968: jis0212<<14 | 0x23<<7 | 0x3C,
	27051 - 19968: jis0212<<14 | 0x23<<7 | 0x3D,
	27053 - 19968: jis0212<<14 | 0x23<<7 | 0x3E,
	27054 - 19968: jis0208<<14 | 0x3B<<7 | 0x25,
	27055 - 19968: jis0212<<14 | 0x23<<7 | 0x3F,
	27057 - 19968: jis0208<<14 | 0x3B<<7 | 0x42,
	27058 - 19968: jis0208<<14 | 0x3B<<7 | 0x24,
	27060 - 19968: jis0208<<14 | 0x3B<<7 | 0x37,
	27063 - 19968: jis0212<<14 | 0x23<<7 | 0x40,
	27064 - 19968: jis0212<<14 | 0x23<<7 | 0x41,
	27066 - 19968: jis0212<<14 | 0x23<<7 | 0x42,
	27067 - 19968: jis0208<<14 | 0x3B<<7 | 0x2F,
	27068 - 19968: jis0212<<14 | 0x23<<7 | 0x43,
	27070 - 19968: jis0208<<14 | 0x3B<<7 | 0x2A,
	27071 - 19968: jis0208<<14 | 0x3B<<7 | 0x27,
	27073 - 19968: jis0208<<14 | 0x3B<<7 | 0x28,
	27075 - 19968: jis0208<<14 | 0x3B<<7 | 0x30,
	27077 - 19968: jis0212<<14 | 0x23<<7 | 0x44,
	27079 - 19968: jis0208<<14 | 0x53<<7 | 0x01,
	27080 - 19968: jis0212<<14 | 0x23<<7 | 0x45,
	27082 - 19968: jis0208<<14 | 0x3B<<7 | 0x2D,
	27083 - 19968: jis0208<<14 | 0x18<<7 | 0x1C,
	27084 - 19968: jis0208<<14 | 0x23<<7 | 0x27,
	27085 - 19968: jis0208<<14 | 0x20<<7 | 0x43,
	27086 - 19968: jis0208<<14 | 0x3B<<7 | 0x2B,
	27088 - 19968: jis0208<<14 | 0x3B<<7 | 0x26,
	27089 - 19968: jis0212<<14 | 0x23<<7 | 0x46,
	27091 - 19968: jis0208<<14 | 0x3B<<7 | 0x29,
	27094 - 19968: jis0212<<14 | 0x23<<7 | 0x47,
	27095 - 19968: jis0212<<14 | 0x23<<7 | 0x48,
	27096 - 19968: jis0208<<14 | 0x2C<<7 | 0x2C,
	27097 - 19968: jis0208<<14 | 0x2A<<7 | 0x49,
	27101 - 19968: jis0208<<14 | 0x3B<<7 | 0x2E,
	27102 - 19968: jis0208<<14 | 0x3B<<7 | 0x38,
	27106 - 19968: jis0208<<14 | 0x59<<7 | 0x31,
	27109 - 19968: jis0212<<14 | 0x23<<7 | 0x4A,
	27111 - 19968: jis0208<<14 | 0x3B<<7 | 0x40,
	27112 - 19968: jis0208<<14 | 0x3B<<7 | 0x39,
	27115 - 19968: jis0208<<14 | 0x3B<<7 | 0x46,
	27117 - 19968: jis0208<<14 | 0x3B<<7 | 0x44,
	27118 - 19968: jis0212<<14 | 0x23<<7 | 0x4B,
	27119 - 19968: jis0212<<14 | 0x23<<7 | 0x4C,
	27121 - 19968: jis0212<<14 | 0x23<<7 | 0x4D,
	27122 - 19968: jis0208<<14 | 0x3B<<7 | 0x3F,
	27123 - 19968: jis0212<<14 | 0x23<<7 | 0x4E,
	27125 - 19968: jis0212<<14 | 0x23<<7 | 0x4F,
	27129 - 19968: jis0208<<14 | 0x3B<<7 | 0x3E,
	27131 - 19968: jis0208<<14 | 0x23<<7 | 0x2F,
	27133 - 19968: jis0208<<14 | 0x20<<7 | 0x44,
	27134 - 19968: jis0212<<14 | 0x23<<7 | 0x50,
	27135 - 19968: jis0208<<14 | 0x3B<<7 | 0x3C,
	27136 - 19968: jis0212<<14 | 0x23<<7 | 0x51,
	27137 - 19968: jis0212<<14 | 0x23<<7 | 0x52,
	27138 - 19968: jis0208<<14 | 0x3B<<7 | 0x3A,
	27139 - 19968: jis0212<<14 | 0x23<<7 | 0x53,
	27141 - 19968: jis0208<<14 | 0x3B<<7 | 0x41,
	27146 - 19968: jis0208<<14 | 0x3B<<7 | 0x47,
	27147 - 19968: jis0208<<14 | 0x27<<7 | 0x54,
	27148 - 19968: jis0208<<14 | 0x3B<<7 | 0x4D,
	27151 - 19968: jis0212<<14 | 0x23<<7 | 0x54,
	27153 - 19968: jis0212<<14 | 0x23<<7 | 0x55,
	27154 - 19968: jis0208<<14 | 0x3B<<7 | 0x48,
	27155 - 19968: jis0208<<14 | 0x3B<<7 | 0x4B,
	27156 - 19968: jis0208<<14 | 0x3B<<7 | 0x45,
	27157 - 19968: jis0212<<14 | 0x23<<7 | 0x56,
	27159 - 19968: jis0208<<14 | 0x22<<7 | 0x53,
	27161 - 19968: jis0208<<14 | 0x28<<7 | 0x17,
	27162 - 19968: jis0212<<14 | 0x23<<7 | 0x57,
	27163 - 19968: jis0208<<14 | 0x3B<<7 | 0x3B,
	27165 - 19968: jis0212<<14 | 0x23<<7 | 0x58,
	27166 - 19968: jis0208<<14 | 0x3B<<7 | 0x43,
	27167 - 19968: jis0208<<14 | 0x1D<<7 | 0x1F,
	27168 - 19968: jis0212<<14 | 0x23<<7 | 0x59,
	27169 - 19968: jis0208<<14 | 0x2B<<7 | 0x2E,
	27170 - 19968: jis0208<<14 | 0x3B<<7 | 0x57,
	27171 - 19968: jis0208<<14 | 0x3B<<7 | 0x4A,
	27172 - 19968: jis0212<<14 | 0x23<<7 | 0x5A,
	27176 - 19968: jis0212<<14 | 0x23<<7 | 0x5B,
	27177 - 19968: jis0208<<14 | 0x17<<7 | 0x01,
	27178 - 19968: jis0208<<14 | 0x11<<7 | 0x02,
	27179 - 19968: jis0208<<14 | 0x12<<7 | 0x3E,
	27182 - 19968: jis0208<<14 | 0x3B<<7 | 0x32,
	27184 - 19968: jis0208<<14 | 0x59<<7 | 0x32,
	27186 - 19968: jis0212<<14 | 0x23<<7 | 0x5D,
	27188 - 19968: jis0212<<14 | 0x24<<7 | 0x00,
	27189 - 19968: jis0208<<14 | 0x1D<<7 | 0x20,
	27190 - 19968: jis0208<<14 | 0x3B<<7 | 0x4F,
	27191 - 19968: jis0212<<14 | 0x24<<7 | 0x01,
	27192 - 19968: jis0208<<14 | 0x3B<<7 | 0x56,
	27193 - 19968: jis0208<<14 | 0x1B<<7 | 0x58,
	27194 - 19968: jis0208<<14 | 0x12<<7 | 0x51,
	27195 - 19968: jis0212<<14 | 0x24<<7 | 0x02,
	27197 - 19968: jis0208<<14 | 0x22<<7 | 0x0D,
	27198 - 19968: jis0212<<14 | 0x24<<7 | 0x03,
	27199 - 19968: jis0212<<14 | 0x24<<7 | 0x04,
	27204 - 19968: jis0208<<14 | 0x3B<<7 | 0x4C,
	27205 - 19968: jis0212<<14 | 0x24<<7 | 0x05,
	27206 - 19968: jis0208<<14 | 0x59<<7 | 0x34,
	27207 - 19968: jis0208<<14 | 0x3B<<7 | 0x51,
	27208 - 19968: jis0208<<14 | 0x3B<<7 | 0x55,
	27209 - 19968: jis0212<<14 | 0x24<<7 | 0x07,
	27210 - 19968: jis0212<<14 | 0x24<<7 | 0x08,
	27211 - 19968: jis0208<<14 | 0x15<<7 | 0x15,
	27214 - 19968: jis0212<<14 | 0x24<<7 | 0x09,
	27216 - 19968: jis0212<<14 | 0x24<<7 | 0x0A,
	27217 - 19968: jis0212<<14 | 0x24<<7 | 0x0B,
	27218 - 19968: jis0212<<14 | 0x24<<7 | 0x0C,
	27221 - 19968: jis0212<<14 | 0x24<<7 | 0x0D,
	27222 - 19968: jis0212<<14 | 0x24<<7 | 0x0E,
	27224 - 19968: jis0208<<14 | 0x14<<7 | 0x2B,
	27225 - 19968: jis0208<<14 | 0x3B<<7 | 0x53,
	27227 - 19968: jis0212<<14 | 0x24<<7 | 0x0F,
	27231 - 19968: jis0208<<14 | 0x14<<7 | 0x00,
	27233 - 19968: jis0208<<14 | 0x25<<7 | 0x2A,
	27234 - 19968: jis0208<<14 | 0x3B<<7 | 0x52,
	27236 - 19968: jis0212<<14 | 0x24<<7 | 0x10,
	27238 - 19968: jis0208<<14 | 0x3B<<7 | 0x54,
	27239 - 19968: jis0212<<14 | 0x24<<7 | 0x11,
	27242 - 19968: jis0212<<14 | 0x24<<7 | 0x12,
	27243 - 19968: jis0208<<14 | 0x59<<7 | 0x33,
	27249 - 19968: jis0212<<14 | 0x24<<7 | 0x13,
	27250 - 19968: jis0208<<14 | 0x3B<<7 | 0x4E,
	27251 - 19968: jis0208<<14 | 0x59<<7 | 0x35,
	27256 - 19968: jis0208<<14 | 0x3B<<7 | 0x50,
	27262 - 19968: jis0208<<14 | 0x59<<7 | 0x36,
	27263 - 19968: jis0208<<14 | 0x12<<7 | 0x3F,
	27264 - 19968: jis0208<<14 | 0x22<<7 | 0x28,
	27265 - 19968: jis0212<<14 | 0x24<<7 | 0x16,
	27267 - 19968: jis0212<<14 | 0x24<<7 | 0x17,
	27268 - 19968: jis0208<<14 | 0x3B<<7 | 0x5B,
	27270 - 19968: jis0212<<14 | 0x24<<7 | 0x18,
	27271 - 19968: jis0212<<14 | 0x24<<7 | 0x19,
	27273 - 19968: jis0212<<14 | 0x24<<7 | 0x1A,
	27275 - 19968: jis0212<<14 | 0x24<<7 | 0x1B,
	27277 - 19968: jis0208<<14 | 0x3B<<7 | 0x59,
	27278 - 19968: jis0208<<14 | 0x17<<7 | 0x48,
	27280 - 19968: jis0208<<14 | 0x3B<<7 | 0x58,
	27281 - 19968: jis0212<<14 | 0x24<<7 | 0x1C,
	27287 - 19968: jis0208<<14 | 0x3C<<7 | 0x00,
	27291 - 19968: jis0212<<14 | 0x24<<7 | 0x1D,
	27292 - 19968: jis0208<<14 | 0x3A<<7 | 0x37,
	27293 - 19968: jis0212<<14 | 0x24<<7 | 0x1E,
	27294 - 19968: jis0212<<14 | 0x24<<7 | 0x1F,
	27295 - 19968: jis0212<<14 | 0x24<<7 | 0x20,
	27296 - 19968: jis0208<<14 | 0x3B<<7 | 0x5A,
	27298 - 19968: jis0208<<14 | 0x3B<<7 | 0x5C,
	27299 - 19968: jis0208<<14 | 0x3B<<7 | 0x5D,
	27301 - 19968: jis0212<<14 | 0x24<<7 | 0x21,
	27306 - 19968: jis0208<<14 | 0x3C<<7 | 0x0B,
	27307 - 19968: jis0212<<14 | 0x24<<7 | 0x22,
	27308 - 19968: jis0208<<14 | 0x3C<<7 | 0x07,
	27310 - 19968: jis0208<<14 | 0x3A<<7 | 0x4C,
	27311 - 19968: jis0212<<14 | 0x24<<7 | 0x23,
	27312 - 19968: jis0212<<14 | 0x24<<7 | 0x24,
	27313 - 19968: jis0212<<14 | 0x24<<7 | 0x25,
	27315 - 19968: jis0208<<14 | 0x3C<<7 | 0x06,
	27316 - 19968: jis0212<<14 | 0x24<<7 | 0x26,
	27320 - 19968: jis0208<<14 | 0x3C<<7 | 0x05,
	27323 - 19968: jis0208<<14 | 0x3C<<7 | 0x02,
	27325 - 19968: jis0212<<14 | 0x24<<7 | 0x27,
	27326 - 19968: jis0212<<14 | 0x24<<7 | 0x28,
	27327 - 19968: jis0212<<14 | 0x24<<7 | 0x29,
	27329 - 19968: jis0208<<14 | 0x3B<<7 | 0x49,
	27330 - 19968: jis0208<<14 | 0x3C<<7 | 0x04,
	27331 - 19968: jis0208<<14 | 0x3C<<7 | 0x03,
	27334 - 19968: jis0212<<14 | 0x24<<7 | 0x2A,
	27336 - 19968: jis0212<<14 | 0x24<<7 | 0x2C,
	27337 - 19968: jis0212<<14 | 0x24<<7 | 0x2B,
	27340 - 19968: jis0212<<14 | 0x24<<7 | 0x2D,
	27344 - 19968: jis0212<<14 | 0x24<<7 | 0x2E,
	27345 - 19968: jis0208<<14 | 0x3C<<7 | 0x09,
	27347 - 19968: jis0208<<14 | 0x2E<<7 | 0x05,
	27348 - 19968: jis0212<<14 | 0x24<<7 | 0x2F,
	27349 - 19968: jis0212<<14 | 0x24<<7 | 0x30,
	27350 - 19968: jis0212<<14 | 0x24<<7 | 0x31,
	27354 - 19968: jis0208<<14 | 0x3C<<7 | 0x0C,
	27355 - 19968: jis0208<<14 | 0x15<<7 | 0x5A,
	27356 - 19968: jis0212<<14 | 0x24<<7 | 0x32,
	27357 - 19968: jis0212<<14 | 0x24<<7 | 0x33,
	27358 - 19968: jis0208<<14 | 0x3C<<7 | 0x08,
	27359 - 19968: jis0208<<14 | 0x3C<<7 | 0x0A,
	27362 - 19968: jis0208<<14 | 0x59<<7 | 0x37,
	27364 - 19968: jis0208<<14 | 0x59<<7 | 0x38,
	27367 - 19968: jis0212<<14 | 0x24<<7 | 0x35,
	27368 - 19968: jis0208<<14 | 0x27<<7 | 0x06,
	27370 - 19968: jis0208<<14 | 0x3C<<7 | 0x0D,
	27372 - 19968: jis0212<<14 | 0x24<<7 | 0x36,
	27376 - 19968: jis0212<<14 | 0x24<<7 | 0x37,
	27377 - 19968: jis0212<<14 | 0x24<<7 | 0x38,
	27378 - 19968: jis0212<<14 | 0x24<<7 | 0x39,
	27386 - 19968: jis0208<<14 | 0x3C<<7 | 0x11,
	27387 - 19968: jis0208<<14 | 0x3C<<7 | 0x0E,
	27388 - 19968: jis0212<<14 | 0x24<<7 | 0x3A,
	27389 - 19968: jis0212<<14 | 0x24<<7 | 0x3B,
	27394 - 19968: jis0212<<14 | 0x24<<7 | 0x3C,
	27395 - 19968: jis0212<<14 | 0x24<<7 | 0x3D,
	27396 - 19968: jis0208<<14 | 0x2C<<7 | 0x52,
	27397 - 19968: jis0208<<14 | 0x3C<<7 | 0x0F,
	27398 - 19968: jis0212<<14 | 0x24<<7 | 0x3E,
	27399 - 19968: jis0212<<14 | 0x24<<7 | 0x3F,
	27401 - 19968: jis0212<<14 | 0x24<<7 | 0x40,
	27402 - 19968: jis0208<<14 | 0x3B<<7 | 0x3D,
	27407 - 19968: jis0212<<14 | 0x24<<7 | 0x41,
	27408 - 19968: jis0212<<14 | 0x24<<7 | 0x42,
	27409 - 19968: jis0212<<14 | 0x24<<7 | 0x43,
	27410 - 19968: jis0208<<14 | 0x3C<<7 | 0x12,
	27414 - 19968: jis0208<<14 | 0x3C<<7 | 0x13,
	27415 - 19968: jis0212<<14 | 0x24<<7 | 0x44,
	27419 - 19968: jis0212<<14 | 0x24<<7 | 0x45,
	27421 - 19968: jis0208<<14 | 0x10<<7 | 0x14,
	27422 - 19968: jis0212<<14 | 0x24<<7 | 0x46,
	27423 - 19968: jis0208<<14 | 0x3C<<7 | 0x15,
	27424 - 19968: jis0208<<14 | 0x16<<7 | 0x46,
	27425 - 19968: jis0208<<14 | 0x1B<<7 | 0x00,
	27427 - 19968: jis0208<<14 | 0x15<<7 | 0x34,
	27428 - 19968: jis0212<<14 | 0x24<<7 | 0x47,
	27431 - 19968: jis0208<<14 | 0x11<<7 | 0x03,
	27432 - 19968: jis0212<<14 | 0x24<<7 | 0x48,
	27435 - 19968: jis0212<<14 | 0x24<<7 | 0x49,
	27436 - 19968: jis0212<<14 | 0x24<<7 | 0x4A,
	27439 - 19968: jis0212<<14 | 0x24<<7 | 0x4B,
	27442 - 19968: jis0208<<14 | 0x2C<<7 | 0x3E,
	27445 - 19968: jis0212<<14 | 0x24<<7 | 0x4C,
	27446 - 19968: jis0212<<14 | 0x24<<7 | 0x4D,
	27447 - 19968: jis0208<<14 | 0x3C<<7 | 0x17,
	27448 - 19968: jis0208<<14 | 0x3C<<7 | 0x16,
	27449 - 19968: jis0208<<14 | 0x3C<<7 | 0x19,
	27450 - 19968: jis0208<<14 | 0x14<<7 | 0x1C,
	27451 - 19968: jis0212<<14 | 0x24<<7 | 0x4E,
	27453 - 19968: jis0208<<14 | 0x15<<7 | 0x35,
	27454 - 19968: jis0208<<14 | 0x13<<7 | 0x1D,
	27455 - 19968: jis0212<<14 | 0x24<<7 | 0x4F,
	27459 - 19968: jis0208<<14 | 0x3C<<7 | 0x1C,
	27462 - 19968: jis0212<<14 | 0x24<<7 | 0x50,
	27463 - 19968: jis0208<<14 | 0x3C<<7 | 0x1B,
	27465 - 19968: jis0208<<14 | 0x3C<<7 | 0x1D,
	27466 - 19968: jis0212<<14 | 0x24<<7 | 0x51,
	27468 - 19968: jis0208<<14 | 0x11<<7 | 0x2D,
	27469 - 19968: jis0212<<14 | 0x24<<7 | 0x52,
	27470 - 19968: jis0208<<14 | 0x22<<7 | 0x16,
	27472 - 19968: jis0208<<14 | 0x3C<<7 | 0x1E,
	27474 - 19968: jis0212<<14 | 0x24<<7 | 0x53,
	27475 - 19968: jis0208<<14 | 0x13<<7 | 0x1E,
	27476 - 19968: jis0208<<14 | 0x3C<<7 | 0x20,
	27478 - 19968: jis0212<<14 | 0x24<<7 | 0x54,
	27480 - 19968: jis0212<<14 | 0x24<<7 | 0x55,
	27481 - 19968: jis0208<<14 | 0x3C<<7 | 0x1F,
	27483 - 19968: jis0208<<14 | 0x3C<<7 | 0x21,
	27485 - 19968: jis0212<<14 | 0x24<<7 | 0x56,
	27487 - 19968: jis0208<<14 | 0x3C<<7 | 0x22,
	27488 - 19968: jis0212<<14 | 0x24<<7 | 0x57,
	27489 - 19968: jis0208<<14 | 0x3C<<7 | 0x23,
	27490 - 19968: jis0208<<14 | 0x1A<<7 | 0x3E,
	27491 - 19968: jis0208<<14 | 0x1F<<7 | 0x14,
	27492 - 19968: jis0208<<14 | 0x19<<7 | 0x00,
	27494 - 19968: jis0208<<14 | 0x28<<7 | 0x4F,
	27495 - 19968: jis0212<<14 | 0x24<<7 | 0x58,
	27497 - 19968: jis0208<<14 | 0x29<<7 | 0x41,
	27498 - 19968: jis0208<<14 | 0x2E<<7 | 0x23,
	27499 - 19968: jis0212<<14 | 0x24<<7 | 0x59,
	27502 - 19968: jis0212<<14 | 0x24<<7 | 0x5A,
	27503 - 19968: jis0208<<14 | 0x1A<<7 | 0x54,
	27504 - 19968: jis0212<<14 | 0x24<<7 | 0x5B,
	27507 - 19968: jis0208<<14 | 0x19<<7 | 0x2F,
	27508 - 19968: jis0208<<14 | 0x2D<<7 | 0x51,
	27509 - 19968: jis0212<<14 | 0x24<<7 | 0x5C,
	27512 - 19968: jis0208<<14 | 0x3C<<7 | 0x24,
	27513 - 19968: jis0208<<14 | 0x3C<<7 | 0x25,
	27515 - 19968: jis0208<<14 | 0x1A<<7 | 0x3F,
	27517 - 19968: jis0212<<14 | 0x24<<7 | 0x5D,
	27518 - 19968: jis0212<<14 | 0x25<<7 | 0x00,
	27519 - 19968: jis0208<<14 | 0x3C<<7 | 0x26,
	27520 - 19968: jis0208<<14 | 0x3C<<7 | 0x27,
	27522 - 19968: jis0212<<14 | 0x25<<7 | 0x01,
	27523 - 19968: jis0208<<14 | 0x3C<<7 | 0x29,
	27524 - 19968: jis0208<<14 | 0x3C<<7 | 0x28,
	27525 - 19968: jis0212<<14 | 0x25<<7 | 0x02,
	27526 - 19968: jis0208<<14 | 0x2A<<7 | 0x37,
	27529 - 19968: jis0208<<14 | 0x1C<<7 | 0x3D,
	27530 - 19968: jis0208<<14 | 0x1B<<7 | 0x4B,
	27531 - 19968: jis0208<<14 | 0x1A<<7 | 0x23,
	27533 - 19968: jis0208<<14 | 0x3C<<7 | 0x2A,
	27541 - 19968: jis0208<<14 | 0x3C<<7 | 0x2C,
	27542 - 19968: jis0208<<14 | 0x1E<<7 | 0x02,
	27543 - 19968: jis0212<<14 | 0x25<<7 | 0x03,
	27544 - 19968: jis0208<<14 | 0x3C<<7 | 0x2B,
	27547 - 19968: jis0212<<14 | 0x25<<7 | 0x04,
	27550 - 19968: jis0208<<14 | 0x3C<<7 | 0x2D,
	27551 - 19968: jis0212<<14 | 0x25<<7 | 0x05,
	27552 - 19968: jis0212<<14 | 0x25<<7 | 0x06,
	27554 - 19968: jis0212<<14 | 0x25<<7 | 0x07,
	27555 - 19968: jis0212<<14 | 0x25<<7 | 0x08,
	27556 - 19968: jis0208<<14 | 0x3C<<7 | 0x2E,
	27560 - 19968: jis0212<<14 | 0x25<<7 | 0x09,
	27561 - 19968: jis0212<<14 | 0x25<<7 | 0x0A,
	27562 - 19968: jis0208<<14 | 0x3C<<7 | 0x2F,
	27563 - 19968: jis0208<<14 | 0x3C<<7 | 0x30,
	27564 - 19968: jis0212<<14 | 0x25<<7 | 0x0B,
	27565 - 19968: jis0212<<14 | 0x25<<7 | 0x0C,
	27566 - 19968: jis0212<<14 | 0x25<<7 | 0x0D,
	27567 - 19968: jis0208<<14 | 0x3C<<7 | 0x31,
	27568 - 19968: jis0212<<14 | 0x25<<7 | 0x0E,
	27569 - 19968: jis0208<<14 | 0x3C<<7 | 0x33,
	27570 - 19968: jis0208<<14 | 0x3C<<7 | 0x32,
	27571 - 19968: jis0208<<14 | 0x3C<<7 | 0x34,
	27572 - 19968: jis0208<<14 | 0x11<<7 | 0x04,
	27573 - 19968: jis0208<<14 | 0x22<<7 | 0x29,
	27575 - 19968: jis0208<<14 | 0x3C<<7 | 0x35,
	27576 - 19968: jis0212<<14 | 0x25<<7 | 0x0F,
	27577 - 19968: jis0212<<14 | 0x25<<7 | 0x10,
	27578 - 19968: jis0208<<14 | 0x1A<<7 | 0x05,
	27579 - 19968: jis0208<<14 | 0x12<<7 | 0x2B,
	27580 - 19968: jis0208<<14 | 0x3C<<7 | 0x36,
	27581 - 19968: jis0212<<14 | 0x25<<7 | 0x11,
	27582 - 19968: jis0212<<14 | 0x25<<7 | 0x12,
	27583 - 19968: jis0208<<14 | 0x24<<7 | 0x21,
	27584 - 19968: jis0208<<14 | 0x33<<7 | 0x2B,
	27587 - 19968: jis0212<<14 | 0x25<<7 | 0x13,
	27588 - 19968: jis0212<<14 | 0x25<<7 | 0x14,
	27589 - 19968: jis0208<<14 | 0x14<<7 | 0x02,
	27590 - 19968: jis0208<<14 | 0x3C<<7 | 0x37,
	27593 - 19968: jis0212<<14 | 0x25<<7 | 0x15,
	27595 - 19968: jis0208<<14 | 0x3C<<7 | 0x38,
	27596 - 19968: jis0212<<14 | 0x25<<7 | 0x16,
	27597 - 19968: jis0208<<14 | 0x29<<7 | 0x4B,
	27598 - 19968: jis0208<<14 | 0x2A<<7 | 0x47,
	27602 - 19968: jis0208<<14 | 0x25<<7 | 0x26,
	27603 - 19968: jis0208<<14 | 0x3C<<7 | 0x39,
	27604 - 19968: jis0208<<14 | 0x27<<7 | 0x45,
	27606 - 19968: jis0208<<14 | 0x59<<7 | 0x39,
	27608 - 19968: jis0208<<14 | 0x27<<7 | 0x5A,
	27610 - 19968: jis0212<<14 | 0x25<<7 | 0x18,
	27611 - 19968: jis0208<<14 | 0x2B<<7 | 0x32,
	27615 - 19968: jis0208<<14 | 0x3C<<7 | 0x3A,
	27617 - 19968: jis0212<<14 | 0x25<<7 | 0x19,
	27619 - 19968: jis0212<<14 | 0x25<<7 | 0x1A,
	27622 - 19968: jis0212<<14 | 0x25<<7 | 0x1B,
	27623 - 19968: jis0212<<14 | 0x25<<7 | 0x1C,
	27627 - 19968: jis0208<<14 | 0x3C<<7 | 0x3C,
	27628 - 19968: jis0208<<14 | 0x3C<<7 | 0x3B,
	27630 - 19968: jis0212<<14 | 0x25<<7 | 0x1D,
	27631 - 19968: jis0208<<14 | 0x3C<<7 | 0x3E,
	27633 - 19968: jis0212<<14 | 0x25<<7 | 0x1E,
	27635 - 19968: jis0208<<14 | 0x3C<<7 | 0x3D,
	27639 - 19968: jis0212<<14 | 0x25<<7 | 0x1F,
	27641 - 19968: jis0212<<14 | 0x25<<7 | 0x20,
	27647 - 19968: jis0212<<14 | 0x25<<7 | 0x21,
	27650 - 19968: jis0212<<14 | 0x25<<7 | 0x22,
	27652 - 19968: jis0212<<14 | 0x25<<7 | 0x23,
	27653 - 19968: jis0212<<14 | 0x25<<7 | 0x24,
	27656 - 19968: jis0208<<14 | 0x3C<<7 | 0x40,
	27657 - 19968: jis0212<<14 | 0x25<<7 | 0x25,
	27661 - 19968: jis0212<<14 | 0x25<<7 | 0x26,
	27662 - 19968: jis0212<<14 | 0x25<<7 | 0x27,
	27663 - 19968: jis0208<<14 | 0x1A<<7 | 0x40,
	27664 - 19968: jis0212<<14 | 0x25<<7 | 0x28,
	27665 - 19968: jis0208<<14 | 0x2B<<7 | 0x10,
	27666 - 19968: jis0212<<14 | 0x25<<7 | 0x29,
	27667 - 19968: jis0208<<14 | 0x3C<<7 | 0x41,
	27668 - 19968: jis0208<<14 | 0x3C<<7 | 0x42,
	27671 - 19968: jis0208<<14 | 0x14<<7 | 0x03,
	27673 - 19968: jis0212<<14 | 0x25<<7 | 0x2A,
	27675 - 19968: jis0208<<14 | 0x3C<<7 | 0x43,
	27679 - 19968: jis0212<<14 | 0x25<<7 | 0x2B,
	27683 - 19968: jis0208<<14 | 0x3C<<7 | 0x45,
	27684 - 19968: jis0208<<14 | 0x3C<<7 | 0x44,
	27686 - 19968: jis0212<<14 | 0x25<<7 | 0x2C,
	27687 - 19968: jis0212<<14 | 0x25<<7 | 0x2D,
	27688 - 19968: jis0212<<14 | 0x25<<7 | 0x2E,
	27692 - 19968: jis0212<<14 | 0x25<<7 | 0x2F,
	27694 - 19968: jis0212<<14 | 0x25<<7 | 0x30,
	27699 - 19968: jis0212<<14 | 0x25<<7 | 0x31,
	27700 - 19968: jis0208<<14 | 0x1E<<7 | 0x44,
	27701 - 19968: jis0212<<14 | 0x25<<7 | 0x32,
	27702 - 19968: jis0212<<14 | 0x25<<7 | 0x33,
	27703 - 19968: jis0208<<14 | 0x28<<7 | 0x18,
	27704 - 19968: jis0208<<14 | 0x10<<7 | 0x29,
	27706 - 19968: jis0212<<14 | 0x25<<7 | 0x34,
	27707 - 19968: jis0212<<14 | 0x25<<7 | 0x35,
	27710 - 19968: jis0208<<14 | 0x27<<7 | 0x24,
	27711 - 19968: jis0208<<14 | 0x59<<7 | 0x3A,
	27712 - 19968: jis0208<<14 | 0x23<<7 | 0x54,
	27713 - 19968: jis0208<<14 | 0x1C<<7 | 0x20,
	27714 - 19968: jis0208<<14 | 0x14<<7 | 0x40,
	27722 - 19968: jis0212<<14 | 0x25<<7 | 0x37,
	27723 - 19968: jis0212<<14 | 0x25<<7 | 0x38,
	27725 - 19968: jis0212<<14 | 0x25<<7 | 0x39,
	27726 - 19968: jis0208<<14 | 0x27<<7 | 0x25,
	27727 - 19968: jis0212<<14 | 0x25<<7 | 0x3A,
	27728 - 19968: jis0208<<14 | 0x1B<<7 | 0x0D,
	27730 - 19968: jis0212<<14 | 0x25<<7 | 0x3B,
	27732 - 19968: jis0212<<14 | 0x25<<7 | 0x3C,
	27733 - 19968: jis0208<<14 | 0x3C<<7 | 0x47,
	27735 - 19968: jis0208<<14 | 0x13<<7 | 0x1F,
	27737 - 19968: jis0212<<14 | 0x25<<7 | 0x3D,
	27738 - 19968: jis0208<<14 | 0x10<<7 | 0x57,
	27739 - 19968: jis0212<<14 | 0x25<<7 | 0x3E,
	27740 - 19968: jis0208<<14 | 0x59<<7 | 0x3B,
	27741 - 19968: jis0208<<14 | 0x25<<7 | 0x51,
	27742 - 19968: jis0208<<14 | 0x3C<<7 | 0x46,
	27743 - 19968: jis0208<<14 | 0x18<<7 | 0x1D,
	27744 - 19968: jis0208<<14 | 0x22<<7 | 0x32,
	27746 - 19968: jis0208<<14 | 0x3C<<7 | 0x48,
	27751 - 19968: jis0212<<14 | 0x26<<7 | 0x15,
	27752 - 19968: jis0208<<14 | 0x3C<<7 | 0x50,
	27754 - 19968: jis0208<<14 | 0x3C<<7 | 0x49,
	27755 - 19968: jis0212<<14 | 0x25<<7 | 0x40,
	27757 - 19968: jis0212<<14 | 0x25<<7 | 0x41,
	27759 - 19968: jis0208<<14 | 0x59<<7 | 0x3D,
	27760 - 19968: jis0208<<14 | 0x21<<7 | 0x20,
	27762 - 19968: jis0208<<14 | 0x14<<7 | 0x41,
	27763 - 19968: jis0208<<14 | 0x3C<<7 | 0x51,
	27764 - 19968: jis0212<<14 | 0x25<<7 | 0x43,
	27766 - 19968: jis0212<<14 | 0x25<<7 | 0x44,
	27768 - 19968: jis0212<<14 | 0x25<<7 | 0x45,
	27769 - 19968: jis0212<<14 | 0x25<<7 | 0x46,
	27770 - 19968: jis0208<<14 | 0x16<<7 | 0x47,
	27771 - 19968: jis0212<<14 | 0x25<<7 | 0x47,
	27773 - 19968: jis0208<<14 | 0x14<<7 | 0x04,
	27774 - 19968: jis0208<<14 | 0x3C<<7 | 0x4F,
	27777 - 19968: jis0208<<14 | 0x3C<<7 | 0x4D,
	27778 - 19968: jis0208<<14 | 0x3C<<7 | 0x4A,
	27779 - 19968: jis0208<<14 | 0x2C<<7 | 0x3F,
	27781 - 19968: jis0212<<14 | 0x25<<7 | 0x48,
	27782 - 19968: jis0208<<14 | 0x59<<7 | 0x3C,
	27783 - 19968: jis0212<<14 | 0x25<<7 | 0x4A,
	27784 - 19968: jis0208<<14 | 0x23<<7 | 0x1F,
	27785 - 19968: jis0212<<14 | 0x25<<7 | 0x4B,
	27788 - 19968: jis0208<<14 | 0x25<<7 | 0x38,
	27789 - 19968: jis0208<<14 | 0x3C<<7 | 0x4B,
	27792 - 19968: jis0208<<14 | 0x3C<<7 | 0x53,
	27794 - 19968: jis0208<<14 | 0x3C<<7 | 0x52,
	27795 - 19968: jis0208<<14 | 0x16<<7 | 0x02,
	27796 - 19968: jis0212<<14 | 0x25<<7 | 0x4C,
	27797 - 19968: jis0212<<14 | 0x25<<7 | 0x4D,
	27798 - 19968: jis0208<<14 | 0x11<<7 | 0x0C,
	27799 - 19968: jis0212<<14 | 0x25<<7 | 0x4E,
	27800 - 19968: jis0212<<14 | 0x25<<7 | 0x4F,
	27801 - 19968: jis0208<<14 | 0x19<<7 | 0x1A,
	27802 - 19968: jis0208<<14 | 0x3C<<7 | 0x4C,
	27803 - 19968: jis0208<<14 | 0x3C<<7 | 0x4E,
	27804 - 19968: jis0212<<14 | 0x25<<7 | 0x50,
	27807 - 19968: jis0212<<14 | 0x25<<7 | 0x51,
	27809 - 19968: jis0208<<14 | 0x2A<<7 | 0x36,
	27810 - 19968: jis0208<<14 | 0x21<<7 | 0x53,
	27819 - 19968: jis0208<<14 | 0x2A<<7 | 0x56,
	27822 - 19968: jis0208<<14 | 0x3C<<7 | 0x5B,
	27824 - 19968: jis0212<<14 | 0x25<<7 | 0x52,
	27825 - 19968: jis0208<<14 | 0x3C<<7 | 0x5C,
	27826 - 19968: jis0212<<14 | 0x25<<7 | 0x53,
	27827 - 19968: jis0208<<14 | 0x11<<7 | 0x2E,
	27828 - 19968: jis0212<<14 | 0x25<<7 | 0x54,
	27832 - 19968: jis0208<<14 | 0x29<<7 | 0x07,
	27833 - 19968: jis0208<<14 | 0x2B<<7 | 0x5C,
	27834 - 19968: jis0208<<14 | 0x3D<<7 | 0x00,
	27835 - 19968: jis0208<<14 | 0x1B<<7 | 0x02,
	27836 - 19968: jis0208<<14 | 0x1D<<7 | 0x21,
	27837 - 19968: jis0208<<14 | 0x3C<<7 | 0x57,
	27838 - 19968: jis0208<<14 | 0x3C<<7 | 0x5D,
	27839 - 19968: jis0208<<14 | 0x10<<7 | 0x47,
	27841 - 19968: jis0208<<14 | 0x15<<7 | 0x16,
	27842 - 19968: jis0212<<14 | 0x25<<7 | 0x55,
	27844 - 19968: jis0208<<14 | 0x3C<<7 | 0x54,
	27845 - 19968: jis0208<<14 | 0x3C<<7 | 0x59,
	27846 - 19968: jis0212<<14 | 0x25<<7 | 0x56,
	27849 - 19968: jis0208<<14 | 0x1F<<7 | 0x53,
	27850 - 19968: jis0208<<14 | 0x26<<7 | 0x50,
	27852 - 19968: jis0208<<14 | 0x27<<7 | 0x46,
	27853 - 19968: jis0212<<14 | 0x25<<7 | 0x57,
	27855 - 19968: jis0212<<14 | 0x25<<7 | 0x58,
	27856 - 19968: jis0212<<14 | 0x25<<7 | 0x59,
	27857 - 19968: jis0212<<14 | 0x25<<7 | 0x5A,
	27858 - 19968: jis0212<<14 | 0x25<<7 | 0x5B,
	27859 - 19968: jis0208<<14 | 0x3C<<7 | 0x56,
	27860 - 19968: jis0212<<14 | 0x25<<7 | 0x5C,
	27861 - 19968: jis0208<<14 | 0x2A<<7 | 0x00,
	27862 - 19968: jis0212<<14 | 0x25<<7 | 0x5D,
	27863 - 19968: jis0208<<14 | 0x3C<<7 | 0x58,
	27865 - 19968: jis0208<<14 | 0x3D<<7 | 0x03,
	27866 - 19968: jis0208<<14 | 0x59<<7 | 0x3E,
	27867 - 19968: jis0208<<14 | 0x3D<<7 | 0x01,
	27868 - 19968: jis0212<<14 | 0x26<<7 | 0x01,
	27869 - 19968: jis0208<<14 | 0x3C<<7 | 0x5A,
	27872 - 19968: jis0212<<14 | 0x26<<7 | 0x02,
	27873 - 19968: jis0208<<14 | 0x2A<<7 | 0x01,
	27874 - 19968: jis0208<<14 | 0x26<<7 | 0x27,
	27875 - 19968: jis0208<<14 | 0x14<<7 | 0x42,
	27877 - 19968: jis0208<<14 | 0x24<<7 | 0x04,
	27879 - 19968: jis0212<<14 | 0x26<<7 | 0x03,
	27880 - 19968: jis0208<<14 | 0x22<<7 | 0x4C,
	27881 - 19968: jis0212<<14 | 0x26<<7 | 0x04,
	27882 - 19968: jis0208<<14 | 0x3D<<7 | 0x04,
	27883 - 19968: jis0212<<14 | 0x26<<7 | 0x05,
	27884 - 19968: jis0212<<14 | 0x26<<7 | 0x06,
	27886 - 19968: jis0212<<14 | 0x26<<7 | 0x07,
	27887 - 19968: jis0208<<14 | 0x3D<<7 | 0x02,
	27888 - 19968: jis0208<<14 | 0x21<<7 | 0x38,
	27889 - 19968: jis0208<<14 | 0x3C<<7 | 0x55,
	27890 - 19968: jis0212<<14 | 0x26<<7 | 0x08,
	27891 - 19968: jis0208<<14 | 0x10<<7 | 0x2A,
	27892 - 19968: jis0212<<14 | 0x26<<7 | 0x09,
	27908 - 19968: jis0208<<14 | 0x59<<7 | 0x3F,
	27911 - 19968: jis0212<<14 | 0x26<<7 | 0x0B,
	27914 - 19968: jis0212<<14 | 0x26<<7 | 0x0C,
	27915 - 19968: jis0208<<14 | 0x2C<<7 | 0x2D,
	27916 - 19968: jis0208<<14 | 0x3D<<7 | 0x0F,
	27918 - 19968: jis0212<<14 | 0x26<<7 | 0x0D,
	27919 - 19968: jis0212<<14 | 0x26<<7 | 0x0E,
	27921 - 19968: jis0212<<14 | 0x26<<7 | 0x0F,
	27922 - 19968: jis0208<<14 | 0x3D<<7 | 0x0E,
	27923 - 19968: jis0212<<14 | 0x26<<7 | 0x10,
	27927 - 19968: jis0208<<14 | 0x1F<<7 | 0x55,
	27929 - 19968: jis0208<<14 | 0x3D<<7 | 0x0B,
	27930 - 19968: jis0212<<14 | 0x26<<7 | 0x11,
	27931 - 19968: jis0208<<14 | 0x2C<<7 | 0x4B,
	27934 - 19968: jis0208<<14 | 0x25<<7 | 0x15,
	27935 - 19968: jis0208<<14 | 0x3D<<7 | 0x05,
	27941 - 19968: jis0208<<14 | 0x23<<7 | 0x24,
	27942 - 19968: jis0212<<14 | 0x26<<7 | 0x12,
	27943 - 19968: jis0212<<14 | 0x26<<7 | 0x13,
	27944 - 19968: jis0212<<14 | 0x26<<7 | 0x14,
	27945 - 19968: jis0208<<14 | 0x10<<7 | 0x2B,
	27946 - 19968: jis0208<<14 | 0x18<<7 | 0x1E,
	27947 - 19968: jis0208<<14 | 0x3D<<7 | 0x08,
	27950 - 19968: jis0212<<14 | 0x26<<7 | 0x16,
	27951 - 19968: jis0212<<14 | 0x26<<7 | 0x17,
	27953 - 19968: jis0212<<14 | 0x26<<7 | 0x18,
	27954 - 19968: jis0208<<14 | 0x1C<<7 | 0x06,
	27955 - 19968: jis0208<<14 | 0x3D<<7 | 0x0D,
	27957 - 19968: jis0208<<14 | 0x3D<<7 | 0x0C,
	27958 - 19968: jis0208<<14 | 0x3D<<7 | 0x07,
	27960 - 19968: jis0208<<14 | 0x3D<<7 | 0x0A,
	27961 - 19968: jis0212<<14 | 0x26<<7 | 0x19,
	27963 - 19968: jis0208<<14 | 0x12<<7 | 0x47,
	27964 - 19968: jis0212<<14 | 0x26<<7 | 0x1A,
	27965 - 19968: jis0208<<14 | 0x3D<<7 | 0x09,
	27966 - 19968: jis0208<<14 | 0x26<<7 | 0x28,
	27967 - 19968: jis0212<<14 | 0x26<<7 | 0x1B,
	27969 - 19968: jis0208<<14 | 0x2D<<7 | 0x0D,
	27972 - 19968: jis0208<<14 | 0x1D<<7 | 0x53,
	27973 - 19968: jis0208<<14 | 0x1F<<7 | 0x54,
	27991 - 19968: jis0212<<14 | 0x26<<7 | 0x1C,
	27993 - 19968: jis0208<<14 | 0x3D<<7 | 0x15,
	27994 - 19968: jis0208<<14 | 0x3D<<7 | 0x13,
	27996 - 19968: jis0208<<14 | 0x28<<7 | 0x2C,
	27998 - 19968: jis0212<<14 | 0x26<<7 | 0x1D,
	27999 - 19968: jis0212<<14 | 0x26<<7 | 0x1E,
	28001 - 19968: jis0212<<14 | 0x26<<7 | 0x1F,
	28003 - 19968: jis0208<<14 | 0x3D<<7 | 0x10,
	28004 - 19968: jis0208<<14 | 0x3D<<7 | 0x12,
	28005 - 19968: jis0212<<14 | 0x26<<7 | 0x20,
	28006 - 19968: jis0208<<14 | 0x10<<7 | 0x19,
	28007 - 19968: jis0212<<14 | 0x26<<7 | 0x21,
	28009 - 19968: jis0208<<14 | 0x18<<7 | 0x1F,
	28010 - 19968: jis0208<<14 | 0x2E<<7 | 0x11,
	28012 - 19968: jis0208<<14 | 0x12<<7 | 0x1C,
	28014 - 19968: jis0208<<14 | 0x28<<7 | 0x41,
	28015 - 19968: jis0208<<14 | 0x59<<7 | 0x41,
	28016 - 19968: jis0212<<14 | 0x26<<7 | 0x23,
	28020 - 19968: jis0208<<14 | 0x2C<<7 | 0x40,
	28023 - 19968: jis0208<<14 | 0x12<<7 | 0x03,
	28024 - 19968: jis0208<<14 | 0x1E<<7 | 0x1A,
	28025 - 19968: jis0208<<14 | 0x3D<<7 | 0x14,
	28028 - 19968: jis0212<<14 | 0x26<<7 | 0x24,
	28034 - 19968: jis0212<<14 | 0x26<<7 | 0x25,
	28037 - 19968: jis0208<<14 | 0x3D<<7 | 0x19,
	28039 - 19968: jis0208<<14 | 0x59<<7 | 0x40,
	28040 - 19968: jis0208<<14 | 0x1D<<7 | 0x22,
	28044 - 19968: jis0208<<14 | 0x2C<<7 | 0x0F,
	28046 - 19968: jis0208<<14 | 0x3D<<7 | 0x16,
	28049 - 19968: jis0212<<14 | 0x26<<7 | 0x27,
	28050 - 19968: jis0212<<14 | 0x26<<7 | 0x28,
	28051 - 19968: jis0208<<14 | 0x3D<<7 | 0x11,
	28052 - 19968: jis0212<<14 | 0x26<<7 | 0x29,
	28053 - 19968: jis0208<<14 | 0x3D<<7 | 0x17,
	28054 - 19968: jis0208<<14 | 0x59<<7 | 0x42,
	28055 - 19968: jis0212<<14 | 0x26<<7 | 0x2B,
	28056 - 19968: jis0212<<14 | 0x26<<7 | 0x2C,
	28057 - 19968: jis0208<<14 | 0x2D<<7 | 0x3D,
	28059 - 19968: jis0208<<14 | 0x24<<7 | 0x52,
	28060 - 19968: jis0208<<14 | 0x25<<7 | 0x21,
	28074 - 19968: jis0212<<14 | 0x26<<7 | 0x2D,
	28076 - 19968: jis0208<<14 | 0x59<<7 | 0x43,
	28079 - 19968: jis0208<<14 | 0x12<<7 | 0x15,
	28082 - 19968: jis0208<<14 | 0x10<<7 | 0x34,
	28084 - 19968: jis0212<<14 | 0x26<<7 | 0x2F,
	28085 - 19968: jis0208<<14 | 0x3D<<7 | 0x1D,
	28087 - 19968: jis0212<<14 | 0x26<<7 | 0x30,
	28088 - 19968: jis0208<<14 | 0x3D<<7 | 0x20,
	28089 - 19968: jis0212<<14 | 0x26<<7 | 0x31,
	28092 - 19968: jis0208<<14 | 0x2D<<7 | 0x22,
	28093 - 19968: jis0212<<14 | 0x26<<7 | 0x32,
	28095 - 19968: jis0212<<14 | 0x26<<7 | 0x33,
	28096 - 19968: jis0208<<14 | 0x2C<<7 | 0x43,
	28100 - 19968: jis0212<<14 | 0x26<<7 | 0x34,
	28101 - 19968: jis0208<<14 | 0x3D<<7 | 0x27,
	28102 - 19968: jis0208<<14 | 0x3D<<7 | 0x21,
	28103 - 19968: jis0208<<14 | 0x3D<<7 | 0x1E,
	28104 - 19968: jis0212<<14 | 0x26<<7 | 0x35,
	28106 - 19968: jis0212<<14 | 0x26<<7 | 0x36,
	28107 - 19968: jis0208<<14 | 0x2D<<7 | 0x33,
	28108 - 19968: jis0208<<14 | 0x3D<<7 | 0x24,
	28110 - 19968: jis0212<<14 | 0x26<<7 | 0x37,
	28111 - 19968: jis0208<<14 | 0x59<<7 | 0x44,
	28113 - 19968: jis0208<<14 | 0x1C<<7 | 0x29,
	28114 - 19968: jis0208<<14 | 0x3D<<7 | 0x26,
	28117 - 19968: jis0208<<14 | 0x3D<<7 | 0x2B,
	28118 - 19968: jis0212<<14 | 0x26<<7 | 0x39,
	28120 - 19968: jis0208<<14 | 0x24<<7 | 0x50,
	28121 - 19968: jis0208<<14 | 0x3D<<7 | 0x29,
	28123 - 19968: jis0212<<14 | 0x26<<7 | 0x3A,
	28125 - 19968: jis0212<<14 | 0x26<<7 | 0x3B,
	28126 - 19968: jis0208<<14 | 0x3D<<7 | 0x23,
	28127 - 19968: jis0212<<14 | 0x26<<7 | 0x3C,
	28128 - 19968: jis0212<<14 | 0x26<<7 | 0x3D,
	28129 - 19968: jis0208<<14 | 0x22<<7 | 0x17,
	28130 - 19968: jis0212<<14 | 0x26<<7 | 0x3E,
	28132 - 19968: jis0208<<14 | 0x3D<<7 | 0x2A,
	28133 - 19968: jis0212<<14 | 0x26<<7 | 0x3F,
	28134 - 19968: jis0208<<14 | 0x3D<<7 | 0x1F,
	28136 - 19968: jis0208<<14 | 0x3D<<7 | 0x25,
	28137 - 19968: jis0212<<14 | 0x26<<7 | 0x40,
	28138 - 19968: jis0208<<14 | 0x3D<<7 | 0x2C,
	28139 - 19968: jis0208<<14 | 0x0F<<7 | 0x5B,
	28140 - 19968: jis0208<<14 | 0x3D<<7 | 0x22,
	28142 - 19968: jis0208<<14 | 0x3D<<7 | 0x2D,
	28143 - 19968: jis0212<<14 | 0x26<<7 | 0x41,
	28144 - 19968: jis0212<<14 | 0x26<<7 | 0x42,
	28145 - 19968: jis0208<<14 | 0x1E<<7 | 0x1B,
	28146 - 19968: jis0208<<14 | 0x59<<7 | 0x46,
	28147 - 19968: jis0208<<14 | 0x1C<<7 | 0x3E,
	28148 - 19968: jis0212<<14 | 0x26<<7 | 0x43,
	28149 - 19968: jis0208<<14 | 0x29<<7 | 0x04,
	28150 - 19968: jis0212<<14 | 0x26<<7 | 0x44,
	28151 - 19968: jis0208<<14 | 0x19<<7 | 0x0D,
	28152 - 19968: jis0208<<14 | 0x59<<7 | 0x45,
	28153 - 19968: jis0208<<14 | 0x3D<<7 | 0x1A,
	28154 - 19968: jis0208<<14 | 0x3D<<7 | 0x28,
	28155 - 19968: jis0208<<14 | 0x24<<7 | 0x19,
	28156 - 19968: jis0208<<14 | 0x59<<7 | 0x47,
	28160 - 19968: jis0212<<14 | 0x26<<7 | 0x46,
	28164 - 19968: jis0212<<14 | 0x26<<7 | 0x47,
	28165 - 19968: jis0208<<14 | 0x1F<<7 | 0x15,
	28167 - 19968: jis0208<<14 | 0x12<<7 | 0x48,
	28168 - 19968: jis0208<<14 | 0x19<<7 | 0x30,
	28169 - 19968: jis0208<<14 | 0x1D<<7 | 0x23,
	28170 - 19968: jis0208<<14 | 0x3D<<7 | 0x1C,
	28171 - 19968: jis0208<<14 | 0x1C<<7 | 0x21,
	28179 - 19968: jis0208<<14 | 0x16<<7 | 0x2B,
	28181 - 19968: jis0208<<14 | 0x3D<<7 | 0x1B,
	28185 - 19968: jis0208<<14 | 0x3D<<7 | 0x31,
	28186 - 19968: jis0208<<14 | 0x1C<<7 | 0x4C,
	28187 - 19968: jis0208<<14 | 0x17<<7 | 0x19,
	28189 - 19968: jis0208<<14 | 0x3D<<7 | 0x40,
	28190 - 19968: jis0212<<14 | 0x26<<7 | 0x48,
	28191 - 19968: jis0208<<14 | 0x3D<<7 | 0x3A,
	28192 - 19968: jis0208<<14 | 0x14<<7 | 0x53,
	28193 - 19968: jis0208<<14 | 0x24<<7 | 0x2E,
	28194 - 19968: jis0212<<14 | 0x26<<7 | 0x49,
	28195 - 19968: jis0208<<14 | 0x3D<<7 | 0x35,
	28196 - 19968: jis0208<<14 | 0x3D<<7 | 0x3E,
	28197 - 19968: jis0208<<14 | 0x0F<<7 | 0x0E,
	28198 - 19968: jis0208<<14 | 0x10<<7 | 0x11,
	28199 - 19968: jis0208<<14 | 0x59<<7 | 0x4A,
	28201 - 19968: jis0208<<14 | 0x11<<7 | 0x18,
	28203 - 19968: jis0208<<14 | 0x3D<<7 | 0x37,
	28204 - 19968: jis0208<<14 | 0x21<<7 | 0x0B,
	28205 - 19968: jis0208<<14 | 0x3D<<7 | 0x2E,
	28206 - 19968: jis0208<<14 | 0x3D<<7 | 0x30,
	28207 - 19968: jis0208<<14 | 0x18<<7 | 0x20,
	28210 - 19968: jis0212<<14 | 0x26<<7 | 0x4B,
	28214 - 19968: jis0212<<14 | 0x26<<7 | 0x4C,
	28216 - 19968: jis0208<<14 | 0x3D<<7 | 0x41,
	28217 - 19968: jis0208<<14 | 0x59<<7 | 0x48,
	28218 - 19968: jis0208<<14 | 0x3D<<7 | 0x3C,
	28219 - 19968: jis0212<<14 | 0x26<<7 | 0x4E,
	28220 - 19968: jis0208<<14 | 0x59<<7 | 0x4B,
	28222 - 19968: jis0208<<14 | 0x3D<<7 | 0x34,
	28227 - 19968: jis0208<<14 | 0x3D<<7 | 0x3B,
	28228 - 19968: jis0212<<14 | 0x26<<7 | 0x50,
	28229 - 19968: jis0212<<14 | 0x26<<7 | 0x51,
	28232 - 19968: jis0212<<14 | 0x26<<7 | 0x52,
	28233 - 19968: jis0212<<14 | 0x26<<7 | 0x53,
	28234 - 19968: jis0208<<14 | 0x2B<<7 | 0x0A,
	28235 - 19968: jis0212<<14 | 0x26<<7 | 0x54,
	28237 - 19968: jis0208<<14 | 0x3D<<7 | 0x39,
	28238 - 19968: jis0208<<14 | 0x3D<<7 | 0x3D,
	28239 - 19968: jis0212<<14 | 0x26<<7 | 0x55,
	28241 - 19968: jis0212<<14 | 0x26<<7 | 0x56,
	28242 - 19968: jis0212<<14 | 0x26<<7 | 0x57,
	28243 - 19968: jis0212<<14 | 0x26<<7 | 0x58,
	28244 - 19968: jis0212<<14 | 0x26<<7 | 0x59,
	28246 - 19968: jis0208<<14 | 0x17<<7 | 0x2F,
	28247 - 19968: jis0212<<14 | 0x26<<7 | 0x5A,
	28248 - 19968: jis0208<<14 | 0x1D<<7 | 0x24,
	28251 - 19968: jis0208<<14 | 0x22<<7 | 0x18,
	28252 - 19968: jis0208<<14 | 0x59<<7 | 0x49,
	28253 - 19968: jis0212<<14 | 0x26<<7 | 0x5C,
	28254 - 19968: jis0212<<14 | 0x26<<7 | 0x5D,
	28255 - 19968: jis0208<<14 | 0x3D<<7 | 0x33,
	28258 - 19968: jis0212<<14 | 0x27<<7 | 0x00,
	28259 - 19968: jis0212<<14 | 0x27<<7 | 0x01,
	28263 - 19968: jis0208<<14 | 0x2C<<7 | 0x0E,
	28264 - 19968: jis0212<<14 | 0x27<<7 | 0x02,
	28267 - 19968: jis0208<<14 | 0x3D<<7 | 0x36,
	28270 - 19968: jis0208<<14 | 0x3D<<7 | 0x2F,
	28271 - 19968: jis0208<<14 | 0x24<<7 | 0x51,
	28274 - 19968: jis0208<<14 | 0x3D<<7 | 0x32,
	28275 - 19968: jis0212<<14 | 0x27<<7 | 0x03,
	28278 - 19968: jis0208<<14 | 0x3D<<7 | 0x38,
	28283 - 19968: jis0212<<14 | 0x27<<7 | 0x04,
	28285 - 19968: jis0212<<14 | 0x27<<7 | 0x05,
	28286 - 19968: jis0208<<14 | 0x2E<<7 | 0x30,
	28287 - 19968: jis0208<<14 | 0x1B<<7 | 0x1D,
	28288 - 19968: jis0208<<14 | 0x2A<<7 | 0x5D,
	28290 - 19968: jis0208<<14 | 0x3D<<7 | 0x42,
	28300 - 19968: jis0208<<14 | 0x27<<7 | 0x0D,
	28301 - 19968: jis0212<<14 | 0x27<<7 | 0x06,
	28303 - 19968: jis0208<<14 | 0x3D<<7 | 0x4E,
	28304 - 19968: jis0208<<14 | 0x17<<7 | 0x1A,
	28307 - 19968: jis0212<<14 | 0x27<<7 | 0x07,
	28310 - 19968: jis0208<<14 | 0x1C<<7 | 0x3F,
	28312 - 19968: jis0208<<14 | 0x3D<<7 | 0x44,
	28313 - 19968: jis0212<<14 | 0x27<<7 | 0x08,
	28316 - 19968: jis0208<<14 | 0x2D<<7 | 0x0E,
	28317 - 19968: jis0208<<14 | 0x18<<7 | 0x21,
	28319 - 19968: jis0208<<14 | 0x3D<<7 | 0x51,
	28320 - 19968: jis0212<<14 | 0x27<<7 | 0x09,
	28322 - 19968: jis0208<<14 | 0x0F<<7 | 0x4D,
	28325 - 19968: jis0208<<14 | 0x3D<<7 | 0x4F,
	28327 - 19968: jis0212<<14 | 0x27<<7 | 0x0A,
	28330 - 19968: jis0208<<14 | 0x3D<<7 | 0x43,
	28333 - 19968: jis0212<<14 | 0x27<<7 | 0x0B,
	28334 - 19968: jis0212<<14 | 0x27<<7 | 0x0C,
	28335 - 19968: jis0208<<14 | 0x3D<<7 | 0x49,
	28337 - 19968: jis0212<<14 | 0x27<<7 | 0x0D,
	28338 - 19968: jis0208<<14 | 0x3D<<7 | 0x4B,
	28339 - 19968: jis0212<<14 | 0x27<<7 | 0x0E,
	28342 - 19968: jis0208<<14 | 0x2C<<7 | 0x2E,
	28343 - 19968: jis0208<<14 | 0x3D<<7 | 0x46,
	28346 - 19968: jis0208<<14 | 0x24<<7 | 0x0D,
	28347 - 19968: jis0212<<14 | 0x27<<7 | 0x0F,
	28349 - 19968: jis0208<<14 | 0x3D<<7 | 0x48,
	28351 - 19968: jis0208<<14 | 0x59<<7 | 0x4C,
	28352 - 19968: jis0212<<14 | 0x27<<7 | 0x11,
	28353 - 19968: jis0212<<14 | 0x27<<7 | 0x12,
	28354 - 19968: jis0208<<14 | 0x3D<<7 | 0x50,
	28355 - 19968: jis0212<<14 | 0x27<<7 | 0x13,
	28356 - 19968: jis0208<<14 | 0x3D<<7 | 0x4A,
	28357 - 19968: jis0208<<14 | 0x2B<<7 | 0x26,
	28359 - 19968: jis0212<<14 | 0x27<<7 | 0x14,
	28360 - 19968: jis0212<<14 | 0x27<<7 | 0x15,
	28361 - 19968: jis0208<<14 | 0x3D<<7 | 0x45,
	28362 - 19968: jis0212<<14 | 0x27<<7 | 0x16,
	28363 - 19968: jis0208<<14 | 0x1B<<7 | 0x01,
	28364 - 19968: jis0208<<14 | 0x3D<<7 | 0x5D,
	28365 - 19968: jis0212<<14 | 0x27<<7 | 0x17,
	28366 - 19968: jis0212<<14 | 0x27<<7 | 0x18,
	28367 - 19968: jis0212<<14 | 0x27<<7 | 0x19,
	28369 - 19968: jis0208<<14 | 0x12<<7 | 0x49,
	28371 - 19968: jis0208<<14 | 0x3D<<7 | 0x47,
	28372 - 19968: jis0208<<14 | 0x3D<<7 | 0x4C,
	28373 - 19968: jis0208<<14 | 0x3D<<7 | 0x4D,
	28381 - 19968: jis0208<<14 | 0x21<<7 | 0x4B,
	28382 - 19968: jis0208<<14 | 0x21<<7 | 0x39,
	28395 - 19968: jis0212<<14 | 0x27<<7 | 0x1A,
	28396 - 19968: jis0208<<14 | 0x3D<<7 | 0x55,
	28397 - 19968: jis0212<<14 | 0x27<<7 | 0x1B,
	28398 - 19968: jis0212<<14 | 0x27<<7 | 0x1C,
	28399 - 19968: jis0208<<14 | 0x3D<<7 | 0x5B,
	28402 - 19968: jis0208<<14 | 0x3D<<7 | 0x59,
	28404 - 19968: jis0208<<14 | 0x24<<7 | 0x08,
	28407 - 19968: jis0208<<14 | 0x3E<<7 | 0x02,
	28408 - 19968: jis0208<<14 | 0x3D<<7 | 0x56,
	28409 - 19968: jis0212<<14 | 0x27<<7 | 0x1D,
	28411 - 19968: jis0212<<14 | 0x27<<7 | 0x1E,
	28413 - 19968: jis0212<<14 | 0x27<<7 | 0x1F,
	28414 - 19968: jis0208<<14 | 0x3D<<7 | 0x57,
	28415 - 19968: jis0208<<14 | 0x3D<<7 | 0x3F,
	28417 - 19968: jis0208<<14 | 0x14<<7 | 0x58,
	28418 - 19968: jis0208<<14 | 0x28<<7 | 0x19,
	28420 - 19968: jis0212<<14 | 0x27<<7 | 0x20,
	28422 - 19968: jis0208<<14 | 0x1B<<7 | 0x1E,
	28424 - 19968: jis0212<<14 | 0x27<<7 | 0x21,
	28425 - 19968: jis0208<<14 | 0x18<<7 | 0x56,
	28426 - 19968: jis0212<<14 | 0x27<<7 | 0x22,
	28428 - 19968: jis0212<<14 | 0x27<<7 | 0x23,
	28429 - 19968: jis0212<<14 | 0x27<<7 | 0x24,
	28431 - 19968: jis0208<<14 | 0x2E<<7 | 0x12,
	28433 - 19968: jis0208<<14 | 0x3D<<7 | 0x53,
	28435 - 19968: jis0208<<14 | 0x3E<<7 | 0x01,
	28436 - 19968: jis0208<<14 | 0x10<<7 | 0x48,
	28437 - 19968: jis0208<<14 | 0x20<<7 | 0x45,
	28438 - 19968: jis0212<<14 | 0x27<<7 | 0x25,
	28440 - 19968: jis0212<<14 | 0x27<<7 | 0x26,
	28442 - 19968: jis0212<<14 | 0x27<<7 | 0x27,
	28443 - 19968: jis0212<<14 | 0x27<<7 | 0x28,
	28448 - 19968: jis0208<<14 | 0x26<<7 | 0x58,
	28450 - 19968: jis0208<<14 | 0x13<<7 | 0x20,
	28451 - 19968: jis0208<<14 | 0x2D<<7 | 0x59,
	28454 - 19968: jis0212<<14 | 0x27<<7 | 0x29,
	28457 - 19968: jis0212<<14 | 0x27<<7 | 0x2A,
	28458 - 19968: jis0212<<14 | 0x27<<7 | 0x2B,
	28459 - 19968: jis0208<<14 | 0x2B<<7 | 0x00,
	28460 - 19968: jis0208<<14 | 0x23<<7 | 0x31,
	28461 - 19968: jis0212<<14 | 0x27<<7 | 0x32,
	28463 - 19968: jis0212<<14 | 0x27<<7 | 0x2C,
	28464 - 19968: jis0212<<14 | 0x27<<7 | 0x2D,
	28465 - 19968: jis0208<<14 | 0x3D<<7 | 0x5A,
	28466 - 19968: jis0208<<14 | 0x3D<<7 | 0x5C,
	28467 - 19968: jis0212<<14 | 0x27<<7 | 0x2E,
	28470 - 19968: jis0212<<14 | 0x27<<7 | 0x2F,
	28472 - 19968: jis0208<<14 | 0x20<<7 | 0x11,
	28475 - 19968: jis0212<<14 | 0x27<<7 | 0x30,
	28476 - 19968: jis0212<<14 | 0x27<<7 | 0x31,
	28478 - 19968: jis0208<<14 | 0x3E<<7 | 0x00,
	28479 - 19968: jis0208<<14 | 0x3D<<7 | 0x58,
	28481 - 19968: jis0208<<14 | 0x3D<<7 | 0x52,
	28485 - 19968: jis0208<<14 | 0x13<<7 | 0x22,
	28495 - 19968: jis0212<<14 | 0x27<<7 | 0x33,
	28497 - 19968: jis0212<<14 | 0x27<<7 | 0x34,
	28498 - 19968: jis0212<<14 | 0x27<<7 | 0x35,
	28499 - 19968: jis0212<<14 | 0x27<<7 | 0x36,
	28500 - 19968: jis0208<<14 | 0x16<<7 | 0x48,
	28503 - 19968: jis0212<<14 | 0x27<<7 | 0x37,
	28504 - 19968: jis0208<<14 | 0x3E<<7 | 0x0E,
	28505 - 19968: jis0212<<14 | 0x27<<7 | 0x38,
	28506 - 19968: jis0212<<14 | 0x27<<7 | 0x39,
	28507 - 19968: jis0208<<14 | 0x3E<<7 | 0x09,
	28508 - 19968: jis0208<<14 | 0x1F<<7 | 0x57,
	28509 - 19968: jis0212<<14 | 0x27<<7 | 0x3A,
	28510 - 19968: jis0212<<14 | 0x27<<7 | 0x3B,
	28511 - 19968: jis0208<<14 | 0x12<<7 | 0x42,
	28513 - 19968: jis0212<<14 | 0x27<<7 | 0x3C,
	28514 - 19968: jis0212<<14 | 0x27<<7 | 0x3D,
	28516 - 19968: jis0208<<14 | 0x1C<<7 | 0x40,
	28518 - 19968: jis0208<<14 | 0x3E<<7 | 0x12,
	28520 - 19968: jis0212<<14 | 0x27<<7 | 0x3E,
	28524 - 19968: jis0212<<14 | 0x27<<7 | 0x3F,
	28525 - 19968: jis0208<<14 | 0x3E<<7 | 0x0B,
	28526 - 19968: jis0208<<14 | 0x23<<7 | 0x0B,
	28527 - 19968: jis0208<<14 | 0x3E<<7 | 0x08,
	28528 - 19968: jis0208<<14 | 0x23<<7 | 0x38,
	28532 - 19968: jis0208<<14 | 0x3E<<7 | 0x2B,
	28536 - 19968: jis0208<<14 | 0x3E<<7 | 0x05,
	28538 - 19968: jis0208<<14 | 0x3E<<7 | 0x04,
	28540 - 19968: jis0208<<14 | 0x3E<<7 | 0x0D,
	28541 - 19968: jis0212<<14 | 0x27<<7 | 0x40,
	28542 - 19968: jis0212<<14 | 0x27<<7 | 0x41,
	28544 - 19968: jis0208<<14 | 0x3E<<7 | 0x07,
	28545 - 19968: jis0208<<14 | 0x3E<<7 | 0x06,
	28546 - 19968: jis0208<<14 | 0x3E<<7 | 0x0C,
	28547 - 19968: jis0212<<14 | 0x27<<7 | 0x42,
	28548 - 19968: jis0208<<14 | 0x1F<<7 | 0x00,
	28550 - 19968: jis0208<<14 | 0x3E<<7 | 0x03,
	28551 - 19968: jis0212<<14 | 0x27<<7 | 0x43,
	28552 - 19968: jis0208<<14 | 0x59<<7 | 0x4D,
	28555 - 19968: jis0212<<14 | 0x27<<7 | 0x45,
	28556 - 19968: jis0212<<14 | 0x27<<7 | 0x46,
	28557 - 19968: jis0212<<14 | 0x27<<7 | 0x47,
	28558 - 19968: jis0208<<14 | 0x3E<<7 | 0x0F,
	28560 - 19968: jis0212<<14 | 0x27<<7 | 0x48,
	28561 - 19968: jis0208<<14 | 0x3E<<7 | 0x10,
	28562 - 19968: jis0212<<14 | 0x27<<7 | 0x49,
	28563 - 19968: jis0212<<14 | 0x27<<7 | 0x4A,
	28564 - 19968: jis0212<<14 | 0x27<<7 | 0x4B,
	28566 - 19968: jis0212<<14 | 0x27<<7 | 0x4C,
	28567 - 19968: jis0208<<14 | 0x13<<7 | 0x21,
	28570 - 19968: jis0212<<14 | 0x27<<7 | 0x4D,
	28575 - 19968: jis0212<<14 | 0x27<<7 | 0x4E,
	28576 - 19968: jis0212<<14 | 0x27<<7 | 0x4F,
	28577 - 19968: jis0208<<14 | 0x3E<<7 | 0x15,
	28579 - 19968: jis0208<<14 | 0x3E<<7 | 0x14,
	28580 - 19968: jis0208<<14 | 0x3E<<7 | 0x16,
	28581 - 19968: jis0212<<14 | 0x27<<7 | 0x50,
	28582 - 19968: jis0212<<14 | 0x27<<7 | 0x51,
	28583 - 19968: jis0212<<14 | 0x27<<7 | 0x52,
	28584 - 19968: jis0212<<14 | 0x27<<7 | 0x53,
	28586 - 19968: jis0208<<14 | 0x3E<<7 | 0x19,
	28590 - 19968: jis0212<<14 | 0x27<<7 | 0x54,
	28591 - 19968: jis0212<<14 | 0x27<<7 | 0x55,
	28592 - 19968: jis0212<<14 | 0x27<<7 | 0x56,
	28593 - 19968: jis0208<<14 | 0x24<<7 | 0x22,
	28595 - 19968: jis0208<<14 | 0x3E<<7 | 0x13,
	28597 - 19968: jis0208<<14 | 0x59<<7 | 0x4E,
	28598 - 19968: jis0212<<14 | 0x27<<7 | 0x58,
	28601 - 19968: jis0208<<14 | 0x3E<<7 | 0x17,
	28604 - 19968: jis0212<<14 | 0x27<<7 | 0x59,
	28608 - 19968: jis0208<<14 | 0x16<<7 | 0x42,
	28609 - 19968: jis0208<<14 | 0x21<<7 | 0x58,
	28610 - 19968: jis0208<<14 | 0x3E<<7 | 0x11,
	28611 - 19968: jis0208<<14 | 0x26<<7 | 0x1A,
	28613 - 19968: jis0212<<14 | 0x27<<7 | 0x5A,
	28614 - 19968: jis0208<<14 | 0x3E<<7 | 0x18,
	28615 - 19968: jis0212<<14 | 0x27<<7 | 0x5B,
	28616 - 19968: jis0212<<14 | 0x27<<7 | 0x5C,
	28618 - 19968: jis0212<<14 | 0x27<<7 | 0x5D,
	28628 - 19968: jis0208<<14 | 0x3E<<7 | 0x1D,
	28629 - 19968: jis0208<<14 | 0x3E<<7 | 0x1B,
	28632 - 19968: jis0208<<14 | 0x3E<<7 | 0x1E,
	28634 - 19968: jis0212<<14 | 0x28<<7 | 0x00,
	28635 - 19968: jis0208<<14 | 0x3E<<7 | 0x21,
	28638 - 19968: jis0212<<14 | 0x28<<7 | 0x01,
	28639 - 19968: jis0208<<14 | 0x3E<<7 | 0x1A,
	28640 - 19968: jis0208<<14 | 0x18<<7 | 0x49,
	28641 - 19968: jis0208<<14 | 0x26<<7 | 0x07,
	28644 - 19968: jis0208<<14 | 0x3D<<7 | 0x18,
	28648 - 19968: jis0212<<14 | 0x28<<7 | 0x02,
	28649 - 19968: jis0212<<14 | 0x28<<7 | 0x03,
	28651 - 19968: jis0208<<14 | 0x2C<<7 | 0x53,
	28652 - 19968: jis0208<<14 | 0x3E<<7 | 0x1C,
	28654 - 19968: jis0208<<14 | 0x3E<<7 | 0x20,
	28655 - 19968: jis0208<<14 | 0x21<<7 | 0x54,
	28656 - 19968: jis0212<<14 | 0x28<<7 | 0x04,
	28657 - 19968: jis0208<<14 | 0x3E<<7 | 0x1F,
	28659 - 19968: jis0208<<14 | 0x3E<<7 | 0x0A,
	28661 - 19968: jis0208<<14 | 0x59<<7 | 0x4F,
	28662 - 19968: jis0208<<14 | 0x4E<<7 | 0x48,
	28665 - 19968: jis0212<<14 | 0x28<<7 | 0x06,
	28666 - 19968: jis0208<<14 | 0x3E<<7 | 0x24,
	28668 - 19968: jis0212<<14 | 0x28<<7 | 0x07,
	28669 - 19968: jis0212<<14 | 0x28<<7 | 0x08,
	28670 - 19968: jis0208<<14 | 0x3E<<7 | 0x28,
	28672 - 19968: jis0212<<14 | 0x28<<7 | 0x09,
	28673 - 19968: jis0208<<14 | 0x3E<<7 | 0x26,
	28677 - 19968: jis0208<<14 | 0x59<<7 | 0x50,
	28678 - 19968: jis0212<<14 | 0x28<<7 | 0x0B,
	28679 - 19968: jis0208<<14 | 0x59<<7 | 0x51,
	28681 - 19968: jis0208<<14 | 0x3E<<7 | 0x22,
	28683 - 19968: jis0208<<14 | 0x3E<<7 | 0x23,
	28685 - 19968: jis0212<<14 | 0x28<<7 | 0x0D,
	28687 - 19968: jis0208<<14 | 0x3E<<7 | 0x27,
	28689 - 19968: jis0208<<14 | 0x3E<<7 | 0x25,
	28693 - 19968: jis0208<<14 | 0x28<<7 | 0x2D,
	28695 - 19968: jis0212<<14 | 0x28<<7 | 0x0E,
	28696 - 19968: jis0208<<14 | 0x3E<<7 | 0x2D,
	28698 - 19968: jis0208<<14 | 0x3E<<7 | 0x2A,
	28699 - 19968: jis0208<<14 | 0x3E<<7 | 0x29,
	28701 - 19968: jis0208<<14 | 0x3E<<7 | 0x2C,
	28702 - 19968: jis0208<<14 | 0x25<<7 | 0x33,
	28703 - 19968: jis0208<<14 | 0x3E<<7 | 0x2E,
	28704 - 19968: jis0212<<14 | 0x28<<7 | 0x0F,
	28707 - 19968: jis0212<<14 | 0x28<<7 | 0x10,
	28710 - 19968: jis0208<<14 | 0x22<<7 | 0x54,
	28711 - 19968: jis0208<<14 | 0x21<<7 | 0x4C,
	28712 - 19968: jis0208<<14 | 0x59<<7 | 0x52,
	28716 - 19968: jis0208<<14 | 0x1F<<7 | 0x04,
	28719 - 19968: jis0212<<14 | 0x28<<7 | 0x11,
	28720 - 19968: jis0208<<14 | 0x3E<<7 | 0x2F,
	28722 - 19968: jis0208<<14 | 0x3E<<7 | 0x31,
	28724 - 19968: jis0212<<14 | 0x28<<7 | 0x12,
	28727 - 19968: jis0212<<14 | 0x28<<7 | 0x13,
	28729 - 19968: jis0212<<14 | 0x28<<7 | 0x14,
	28732 - 19968: jis0212<<14 | 0x28<<7 | 0x15,
	28734 - 19968: jis0208<<14 | 0x3E<<7 | 0x30,
	28739 - 19968: jis0212<<14 | 0x28<<7 | 0x16,
	28740 - 19968: jis0212<<14 | 0x28<<7 | 0x17,
	28744 - 19968: jis0212<<14 | 0x28<<7 | 0x18,
	28745 - 19968: jis0212<<14 | 0x28<<7 | 0x19,
	28746 - 19968: jis0212<<14 | 0x28<<7 | 0x1A,
	28747 - 19968: jis0212<<14 | 0x28<<7 | 0x1B,
	28748 - 19968: jis0208<<14 | 0x3D<<7 | 0x54,
	28750 - 19968: jis0212<<14 | 0x28<<7 | 0x20,
	28753 - 19968: jis0208<<14 | 0x3E<<7 | 0x32,
	28756 - 19968: jis0212<<14 | 0x28<<7 | 0x1C,
	28757 - 19968: jis0212<<14 | 0x28<<7 | 0x1D,
	28760 - 19968: jis0208<<14 | 0x25<<7 | 0x46,
	28765 - 19968: jis0212<<14 | 0x28<<7 | 0x1E,
	28766 - 19968: jis0212<<14 | 0x28<<7 | 0x1F,
	28771 - 19968: jis0208<<14 | 0x3E<<7 | 0x33,
	28772 - 19968: jis0212<<14 | 0x28<<7 | 0x21,
	28773 - 19968: jis0212<<14 | 0x28<<7 | 0x22,
	28779 - 19968: jis0208<<14 | 0x11<<7 | 0x2F,
	28780 - 19968: jis0212<<14 | 0x28<<7 | 0x23,
	28782 - 19968: jis0212<<14 | 0x28<<7 | 0x24,
	28783 - 19968: jis0208<<14 | 0x24<<7 | 0x53,
	28784 - 19968: jis0208<<14 | 0x12<<7 | 0x04,
	28789 - 19968: jis0212<<14 | 0x28<<7 | 0x25,
	28790 - 19968: jis0212<<14 | 0x28<<7 | 0x26,
	28792 - 19968: jis0208<<14 | 0x14<<7 | 0x43,
	28796 - 19968: jis0208<<14 | 0x1B<<7 | 0x3D,
	28797 - 19968: jis0208<<14 | 0x19<<7 | 0x31,
	28798 - 19968: jis0212<<14 | 0x28<<7 | 0x27,
	28801 - 19968: jis0212<<14 | 0x28<<7 | 0x28,
	28805 - 19968: jis0208<<14 | 0x59<<7 | 0x53,
	28806 - 19968: jis0212<<14 | 0x28<<7 | 0x2A,
	28809 - 19968: jis0208<<14 | 0x2E<<7 | 0x06,
	28810 - 19968: jis0208<<14 | 0x1E<<7 | 0x45,
	28814 - 19968: jis0208<<14 | 0x10<<7 | 0x49,
	28818 - 19968: jis0208<<14 | 0x3E<<7 | 0x35,
	28820 - 19968: jis0212<<14 | 0x28<<7 | 0x2B,
	28821 - 19968: jis0212<<14 | 0x28<<7 | 0x2C,
	28822 - 19968: jis0212<<14 | 0x28<<7 | 0x2D,
	28823 - 19968: jis0212<<14 | 0x28<<7 | 0x2E,
	28824 - 19968: jis0212<<14 | 0x28<<7 | 0x2F,
	28825 - 19968: jis0208<<14 | 0x3E<<7 | 0x34,
	28827 - 19968: jis0212<<14 | 0x28<<7 | 0x30,
	28836 - 19968: jis0212<<14 | 0x28<<7 | 0x31,
	28843 - 19968: jis0208<<14 | 0x59<<7 | 0x54,
	28844 - 19968: jis0208<<14 | 0x3E<<7 | 0x38,
	28845 - 19968: jis0208<<14 | 0x22<<7 | 0x19,
	28846 - 19968: jis0208<<14 | 0x3E<<7 | 0x3B,
	28847 - 19968: jis0208<<14 | 0x3E<<7 | 0x36,
	28848 - 19968: jis0212<<14 | 0x28<<7 | 0x33,
	28849 - 19968: jis0212<<14 | 0x28<<7 | 0x34,
	28851 - 19968: jis0208<<14 | 0x3E<<7 | 0x3A,
	28852 - 19968: jis0212<<14 | 0x28<<7 | 0x35,
	28855 - 19968: jis0212<<14 | 0x28<<7 | 0x36,
	28856 - 19968: jis0208<<14 | 0x3E<<7 | 0x39,
	28857 - 19968: jis0208<<14 | 0x24<<7 | 0x1F,
	28858 - 19968: jis0208<<14 | 0x0F<<7 | 0x38,
	28859 - 19968: jis0208<<14 | 0x58<<7 | 0x06,
	28872 - 19968: jis0208<<14 | 0x2D<<7 | 0x54,
	28874 - 19968: jis0212<<14 | 0x28<<7 | 0x37,
	28875 - 19968: jis0208<<14 | 0x3E<<7 | 0x3D,
	28879 - 19968: jis0208<<14 | 0x10<<7 | 0x07,
	28881 - 19968: jis0212<<14 | 0x28<<7 | 0x38,
	28883 - 19968: jis0212<<14 | 0x28<<7 | 0x39,
	28884 - 19968: jis0212<<14 | 0x28<<7 | 0x3A,
	28885 - 19968: jis0212<<14 | 0x28<<7 | 0x3B,
	28886 - 19968: jis0212<<14 | 0x28<<7 | 0x3C,
	28888 - 19968: jis0212<<14 | 0x28<<7 | 0x3D,
	28889 - 19968: jis0208<<14 | 0x3E<<7 | 0x3F,
	28892 - 19968: jis0212<<14 | 0x28<<7 | 0x3E,
	28893 - 19968: jis0208<<14 | 0x3E<<7 | 0x3E,
	28895 - 19968: jis0208<<14 | 0x3E<<7 | 0x3C,
	28900 - 19968: jis0212<<14 | 0x28<<7 | 0x3F,
	28913 - 19968: jis0208<<14 | 0x3E<<7 | 0x37,
	28921 - 19968: jis0208<<14 | 0x2A<<7 | 0x02,
	28922 - 19968: jis0212<<14 | 0x28<<7 | 0x40,
	28925 - 19968: jis0208<<14 | 0x3E<<7 | 0x41,
	28931 - 19968: jis0212<<14 | 0x28<<7 | 0x41,
	28932 - 19968: jis0208<<14 | 0x59<<7 | 0x56,
	28933 - 19968: jis0212<<14 | 0x28<<7 | 0x43,
	28934 - 19968: jis0212<<14 | 0x28<<7 | 0x44,
	28935 - 19968: jis0212<<14 | 0x28<<7 | 0x45,
	28937 - 19968: jis0208<<14 | 0x3E<<7 | 0x40,
	28939 - 19968: jis0212<<14 | 0x28<<7 | 0x46,
	28940 - 19968: jis0212<<14 | 0x28<<7 | 0x47,
	28943 - 19968: jis0208<<14 | 0x59<<7 | 0x55,
	28948 - 19968: jis0208<<14 | 0x10<<7 | 0x4A,
	28953 - 19968: jis0208<<14 | 0x3E<<7 | 0x43,
	28954 - 19968: jis0208<<14 | 0x29<<7 | 0x11,
	28956 - 19968: jis0208<<14 | 0x3E<<7 | 0x42,
	28958 - 19968: jis0212<<14 | 0x28<<7 | 0x49,
	28960 - 19968: jis0212<<14 | 0x28<<7 | 0x4A,
	28961 - 19968: jis0208<<14 | 0x2B<<7 | 0x14,
	28966 - 19968: jis0208<<14 | 0x1D<<7 | 0x26,
	28971 - 19968: jis0212<<14 | 0x28<<7 | 0x4B,
	28973 - 19968: jis0212<<14 | 0x28<<7 | 0x4C,
	28975 - 19968: jis0212<<14 | 0x28<<7 | 0x4D,
	28976 - 19968: jis0212<<14 | 0x28<<7 | 0x4E,
	28977 - 19968: jis0212<<14 | 0x28<<7 | 0x4F,
	28982 - 19968: jis0208<<14 | 0x20<<7 | 0x12,
	28984 - 19968: jis0212<<14 | 0x28<<7 | 0x50,
	28988 - 19968: jis0208<<14 | 0x1D<<7 | 0x25,
	28993 - 19968: jis0212<<14 | 0x28<<7 | 0x51,
	28997 - 19968: jis0212<<14 | 0x28<<7 | 0x52,
	28998 - 19968: jis0208<<14 | 0x59<<7 | 0x58,
	28999 - 19968: jis0208<<14 | 0x59<<7 | 0x59,
	29001 - 19968: jis0208<<14 | 0x2D<<7 | 0x5A,
	29002 - 19968: jis0212<<14 | 0x28<<7 | 0x55,
	29003 - 19968: jis0212<<14 | 0x28<<7 | 0x56,
	29004 - 19968: jis0208<<14 | 0x3E<<7 | 0x49,
	29006 - 19968: jis0208<<14 | 0x1F<<7 | 0x58,
	29008 - 19968: jis0212<<14 | 0x28<<7 | 0x57,
	29010 - 19968: jis0212<<14 | 0x28<<7 | 0x58,
	29013 - 19968: jis0208<<14 | 0x3E<<7 | 0x45,
	29014 - 19968: jis0208<<14 | 0x3E<<7 | 0x4A,
	29015 - 19968: jis0212<<14 | 0x28<<7 | 0x59,
	29017 - 19968: jis0208<<14 | 0x10<<7 | 0x4B,
	29018 - 19968: jis0212<<14 | 0x28<<7 | 0x5A,
	29020 - 19968: jis0208<<14 | 0x59<<7 | 0x57,
	29022 - 19968: jis0212<<14 | 0x28<<7 | 0x5C,
	29024 - 19968: jis0212<<14 | 0x28<<7 | 0x5D,
	29026 - 19968: jis0208<<14 | 0x3E<<7 | 0x48,
	29028 - 19968: jis0208<<14 | 0x26<<7 | 0x40,
	29029 - 19968: jis0208<<14 | 0x3E<<7 | 0x44,
	29030 - 19968: jis0208<<14 | 0x3E<<7 | 0x47,
	29031 - 19968: jis0208<<14 | 0x1D<<7 | 0x27,
	29032 - 19968: jis0212<<14 | 0x29<<7 | 0x00,
	29033 - 19968: jis0208<<14 | 0x27<<7 | 0x30,
	29036 - 19968: jis0208<<14 | 0x3E<<7 | 0x4B,
	29038 - 19968: jis0208<<14 | 0x1B<<7 | 0x30,
	29049 - 19968: jis0212<<14 | 0x29<<7 | 0x01,
	29053 - 19968: jis0208<<14 | 0x1F<<7 | 0x59,
	29056 - 19968: jis0212<<14 | 0x29<<7 | 0x02,
	29060 - 19968: jis0208<<14 | 0x3E<<7 | 0x4E,
	29061 - 19968: jis0212<<14 | 0x29<<7 | 0x03,
	29063 - 19968: jis0212<<14 | 0x29<<7 | 0x04,
	29064 - 19968: jis0208<<14 | 0x3E<<7 | 0x46,
	29066 - 19968: jis0208<<14 | 0x16<<7 | 0x06,
	29068 - 19968: jis0212<<14 | 0x29<<7 | 0x05,
	29071 - 19968: jis0208<<14 | 0x3E<<7 | 0x4C,
	29074 - 19968: jis0212<<14 | 0x29<<7 | 0x06,
	29076 - 19968: jis0208<<14 | 0x2C<<7 | 0x2F,
	29077 - 19968: jis0208<<14 | 0x3E<<7 | 0x4F,
	29081 - 19968: jis0208<<14 | 0x53<<7 | 0x05,
	29082 - 19968: jis0212<<14 | 0x29<<7 | 0x07,
	29083 - 19968: jis0212<<14 | 0x29<<7 | 0x08,
	29087 - 19968: jis0208<<14 | 0x1C<<7 | 0x2E,
	29088 - 19968: jis0212<<14 | 0x29<<7 | 0x09,
	29090 - 19968: jis0212<<14 | 0x29<<7 | 0x0A,
	29096 - 19968: jis0208<<14 | 0x3E<<7 | 0x50,
	29100 - 19968: jis0208<<14 | 0x3E<<7 | 0x51,
	29103 - 19968: jis0212<<14 | 0x29<<7 | 0x0B,
	29104 - 19968: jis0212<<14 | 0x29<<7 | 0x0C,
	29105 - 19968: jis0208<<14 | 0x26<<7 | 0x0D,
	29106 - 19968: jis0212<<14 | 0x29<<7 | 0x0D,
	29107 - 19968: jis0212<<14 | 0x29<<7 | 0x0E,
	29113 - 19968: jis0208<<14 | 0x3E<<7 | 0x53,
	29114 - 19968: jis0212<<14 | 0x29<<7 | 0x0F,
	29118 - 19968: jis0208<<14 | 0x3E<<7 | 0x54,
	29119 - 19968: jis0212<<14 | 0x29<<7 | 0x10,
	29120 - 19968: jis0212<<14 | 0x29<<7 | 0x11,
	29121 - 19968: jis0208<<14 | 0x59<<7 | 0x5B,
	29123 - 19968: jis0208<<14 | 0x26<<7 | 0x12,
	29124 - 19968: jis0212<<14 | 0x29<<7 | 0x13,
	29128 - 19968: jis0208<<14 | 0x24<<7 | 0x54,
	29129 - 19968: jis0208<<14 | 0x3E<<7 | 0x56,
	29131 - 19968: jis0212<<14 | 0x29<<7 | 0x14,
	29132 - 19968: jis0212<<14 | 0x29<<7 | 0x15,
	29134 - 19968: jis0208<<14 | 0x3E<<7 | 0x58,
	29136 - 19968: jis0208<<14 | 0x2D<<7 | 0x34,
	29138 - 19968: jis0208<<14 | 0x3E<<7 | 0x55,
	29139 - 19968: jis0212<<14 | 0x29<<7 | 0x16,
	29140 - 19968: jis0208<<14 | 0x3E<<7 | 0x57,
	29141 - 19968: jis0208<<14 | 0x10<<7 | 0x4C,
	29142 - 19968: jis0212<<14 | 0x29<<7 | 0x17,
	29143 - 19968: jis0208<<14 | 0x3E<<7 | 0x52,
	29145 - 19968: jis0212<<14 | 0x29<<7 | 0x18,
	29146 - 19968: jis0212<<14 | 0x29<<7 | 0x19,
	29148 - 19968: jis0212<<14 | 0x29<<7 | 0x1A,
	29151 - 19968: jis0208<<14 | 0x32<<7 | 0x3A,
	29152 - 19968: jis0208<<14 | 0x3E<<7 | 0x59,
	29157 - 19968: jis0208<<14 | 0x20<<7 | 0x46,
	29158 - 19968: jis0208<<14 | 0x1A<<7 | 0x17,
	29159 - 19968: jis0208<<14 | 0x3E<<7 | 0x5B,
	29164 - 19968: jis0208<<14 | 0x3E<<7 | 0x5A,
	29165 - 19968: jis0208<<14 | 0x1E<<7 | 0x03,
	29166 - 19968: jis0208<<14 | 0x31<<7 | 0x38,
	29173 - 19968: jis0208<<14 | 0x3E<<7 | 0x5C,
	29176 - 19968: jis0212<<14 | 0x29<<7 | 0x1B,
	29177 - 19968: jis0208<<14 | 0x3F<<7 | 0x00,
	29179 - 19968: jis0208<<14 | 0x3E<<7 | 0x4D,
	29180 - 19968: jis0208<<14 | 0x3E<<7 | 0x5D,
	29182 - 19968: jis0208<<14 | 0x59<<7 | 0x5C,
	29183 - 19968: jis0208<<14 | 0x3F<<7 | 0x01,
	29184 - 19968: jis0212<<14 | 0x29<<7 | 0x1D,
	29190 - 19968: jis0208<<14 | 0x26<<7 | 0x59,
	29191 - 19968: jis0212<<14 | 0x29<<7 | 0x1E,
	29192 - 19968: jis0212<<14 | 0x29<<7 | 0x1F,
	29193 - 19968: jis0212<<14 | 0x29<<7 | 0x20,
	29197 - 19968: jis0208<<14 | 0x3F<<7 | 0x02,
	29200 - 19968: jis0208<<14 | 0x3F<<7 | 0x03,
	29203 - 19968: jis0212<<14 | 0x29<<7 | 0x21,
	29207 - 19968: jis0212<<14 | 0x29<<7 | 0x22,
	29210 - 19968: jis0212<<14 | 0x29<<7 | 0x23,
	29211 - 19968: jis0208<<14 | 0x3F<<7 | 0x04,
	29213 - 19968: jis0212<<14 | 0x29<<7 | 0x24,
	29215 - 19968: jis0212<<14 | 0x29<<7 | 0x25,
	29220 - 19968: jis0212<<14 | 0x29<<7 | 0x26,
	29224 - 19968: jis0208<<14 | 0x3F<<7 | 0x05,
	29226 - 19968: jis0208<<14 | 0x23<<7 | 0x3D,
	29227 - 19968: jis0212<<14 | 0x29<<7 | 0x27,
	29228 - 19968: jis0208<<14 | 0x3F<<7 | 0x07,
	29229 - 19968: jis0208<<14 | 0x3F<<7 | 0x06,
	29231 - 19968: jis0212<<14 | 0x29<<7 | 0x28,
	29232 - 19968: jis0208<<14 | 0x3F<<7 | 0x08,
	29234 - 19968: jis0208<<14 | 0x3F<<7 | 0x09,
	29236 - 19968: jis0212<<14 | 0x29<<7 | 0x29,
	29237 - 19968: jis0208<<14 | 0x1B<<7 | 0x3E,
	29238 - 19968: jis0208<<14 | 0x28<<7 | 0x42,
	29240 - 19968: jis0212<<14 | 0x29<<7 | 0x2A,
	29241 - 19968: jis0212<<14 | 0x29<<7 | 0x2B,
	29242 - 19968: jis0208<<14 | 0x2B<<7 | 0x4B,
	29243 - 19968: jis0208<<14 | 0x3F<<7 | 0x0A,
	29244 - 19968: jis0208<<14 | 0x3F<<7 | 0x0B,
	29245 - 19968: jis0208<<14 | 0x20<<7 | 0x35,
	29246 - 19968: jis0208<<14 | 0x1B<<7 | 0x03,
	29247 - 19968: jis0208<<14 | 0x3F<<7 | 0x0C,
	29248 - 19968: jis0208<<14 | 0x3F<<7 | 0x0D,
	29249 - 19968: jis0212<<14 | 0x29<<7 | 0x2C,
	29250 - 19968: jis0212<<14 | 0x29<<7 | 0x2D,
	29251 - 19968: jis0212<<14 | 0x29<<7 | 0x2E,
	29253 - 19968: jis0212<<14 | 0x29<<7 | 0x2F,
	29254 - 19968: jis0208<<14 | 0x3F<<7 | 0x0E,
	29255 - 19968: jis0208<<14 | 0x29<<7 | 0x31,
	29256 - 19968: jis0208<<14 | 0x27<<7 | 0x26,
	29259 - 19968: jis0208<<14 | 0x3F<<7 | 0x0F,
	29260 - 19968: jis0208<<14 | 0x26<<7 | 0x36,
	29262 - 19968: jis0212<<14 | 0x29<<7 | 0x30,
	29263 - 19968: jis0212<<14 | 0x29<<7 | 0x31,
	29264 - 19968: jis0212<<14 | 0x29<<7 | 0x32,
	29266 - 19968: jis0208<<14 | 0x23<<7 | 0x0C,
	29267 - 19968: jis0212<<14 | 0x29<<7 | 0x33,
	29269 - 19968: jis0212<<14 | 0x29<<7 | 0x34,
	29270 - 19968: jis0212<<14 | 0x29<<7 | 0x35,
	29272 - 19968: jis0208<<14 | 0x3F<<7 | 0x10,
	29273 - 19968: jis0208<<14 | 0x11<<7 | 0x46,
	29274 - 19968: jis0212<<14 | 0x29<<7 | 0x36,
	29275 - 19968: jis0208<<14 | 0x14<<7 | 0x4C,
	29276 - 19968: jis0212<<14 | 0x29<<7 | 0x37,
	29277 - 19968: jis0208<<14 | 0x2B<<7 | 0x25,
	29278 - 19968: jis0212<<14 | 0x29<<7 | 0x38,
	29279 - 19968: jis0208<<14 | 0x2B<<7 | 0x15,
	29280 - 19968: jis0212<<14 | 0x29<<7 | 0x39,
	29281 - 19968: jis0208<<14 | 0x11<<7 | 0x13,
	29282 - 19968: jis0208<<14 | 0x2E<<7 | 0x13,
	29283 - 19968: jis0212<<14 | 0x29<<7 | 0x3A,
	29287 - 19968: jis0208<<14 | 0x2A<<7 | 0x31,
	29288 - 19968: jis0212<<14 | 0x29<<7 | 0x3B,
	29289 - 19968: jis0208<<14 | 0x29<<7 | 0x09,
	29291 - 19968: jis0212<<14 | 0x29<<7 | 0x3C,
	29294 - 19968: jis0212<<14 | 0x29<<7 | 0x3D,
	29295 - 19968: jis0212<<14 | 0x29<<7 | 0x3E,
	29297 - 19968: jis0212<<14 | 0x29<<7 | 0x3F,
	29298 - 19968: jis0208<<14 | 0x1F<<7 | 0x16,
	29300 - 19968: jis0208<<14 | 0x3F<<7 | 0x11,
	29303 - 19968: jis0212<<14 | 0x29<<7 | 0x40,
	29304 - 19968: jis0212<<14 | 0x29<<7 | 0x41,
	29305 - 19968: jis0208<<14 | 0x25<<7 | 0x22,
	29307 - 19968: jis0212<<14 | 0x29<<7 | 0x42,
	29308 - 19968: jis0212<<14 | 0x29<<7 | 0x43,
	29309 - 19968: jis0208<<14 | 0x17<<7 | 0x02,
	29310 - 19968: jis0208<<14 | 0x3F<<7 | 0x12,
	29311 - 19968: jis0212<<14 | 0x29<<7 | 0x44,
	29312 - 19968: jis0208<<14 | 0x19<<7 | 0x33,
	29313 - 19968: jis0208<<14 | 0x3F<<7 | 0x14,
	29314 - 19968: jis0208<<14 | 0x3F<<7 | 0x13,
	29316 - 19968: jis0212<<14 | 0x29<<7 | 0x45,
	29319 - 19968: jis0208<<14 | 0x3F<<7 | 0x15,
	29321 - 19968: jis0212<<14 | 0x29<<7 | 0x46,
	29325 - 19968: jis0212<<14 | 0x29<<7 | 0x47,
	29326 - 19968: jis0212<<14 | 0x29<<7 | 0x48,
	29330 - 19968: jis0208<<14 | 0x3F<<7 | 0x16,
	29331 - 19968: jis0212<<14 | 0x29<<7 | 0x49,
	29334 - 19968: jis0208<<14 | 0x3F<<7 | 0x17,
	29339 - 19968: jis0212<<14 | 0x29<<7 | 0x4A,
	29344 - 19968: jis0208<<14 | 0x14<<7 | 0x1D,
	29346 - 19968: jis0208<<14 | 0x3F<<7 | 0x18,
	29351 - 19968: jis0208<<14 | 0x3F<<7 | 0x19,
	29352 - 19968: jis0212<<14 | 0x29<<7 | 0x4B,
	29356 - 19968: jis0208<<14 | 0x17<<7 | 0x03,
	29357 - 19968: jis0212<<14 | 0x29<<7 | 0x4C,
	29358 - 19968: jis0212<<14 | 0x29<<7 | 0x4D,
	29359 - 19968: jis0208<<14 | 0x27<<7 | 0x27,
	29361 - 19968: jis0208<<14 | 0x59<<7 | 0x5D,
	29362 - 19968: jis0208<<14 | 0x3F<<7 | 0x1B,
	29364 - 19968: jis0212<<14 | 0x29<<7 | 0x4F,
	29366 - 19968: jis0208<<14 | 0x1D<<7 | 0x54,
	29369 - 19968: jis0208<<14 | 0x3F<<7 | 0x1A,
	29374 - 19968: jis0208<<14 | 0x5A<<7 | 0x00,
	29377 - 19968: jis0212<<14 | 0x29<<7 | 0x51,
	29378 - 19968: jis0208<<14 | 0x15<<7 | 0x17,
	29379 - 19968: jis0208<<14 | 0x3F<<7 | 0x1C,
	29380 - 19968: jis0208<<14 | 0x3F<<7 | 0x1E,
	29382 - 19968: jis0208<<14 | 0x3F<<7 | 0x1D,
	29383 - 19968: jis0212<<14 | 0x29<<7 | 0x52,
	29385 - 19968: jis0212<<14 | 0x29<<7 | 0x53,
	29388 - 19968: jis0212<<14 | 0x29<<7 | 0x54,
	29390 - 19968: jis0208<<14 | 0x3F<<7 | 0x1F,
	29392 - 19968: jis0208<<14 | 0x17<<7 | 0x30,
	29394 - 19968: jis0208<<14 | 0x3F<<7 | 0x20,
	29397 - 19968: jis0212<<14 | 0x29<<7 | 0x55,
	29398 - 19968: jis0212<<14 | 0x29<<7 | 0x56,
	29399 - 19968: jis0208<<14 | 0x15<<7 | 0x48,
	29400 - 19968: jis0212<<14 | 0x29<<7 | 0x57,
	29401 - 19968: jis0208<<14 | 0x20<<7 | 0x1F,
	29403 - 19968: jis0208<<14 | 0x18<<7 | 0x5C,
	29407 - 19968: jis0212<<14 | 0x29<<7 | 0x58,
	29408 - 19968: jis0208<<14 | 0x3F<<7 | 0x22,
	29409 - 19968: jis0208<<14 | 0x3F<<7 | 0x23,
	29410 - 19968: jis0208<<14 | 0x3F<<7 | 0x21,
	29413 - 19968: jis0212<<14 | 0x29<<7 | 0x59,
	29417 - 19968: jis0208<<14 | 0x1B<<7 | 0x4C,
	29420 - 19968: jis0208<<14 | 0x25<<7 | 0x27,
	29421 - 19968: jis0208<<14 | 0x15<<7 | 0x18,
	29427 - 19968: jis0212<<14 | 0x29<<7 | 0x5A,
	29428 - 19968: jis0212<<14 | 0x29<<7 | 0x5B,
	29431 - 19968: jis0208<<14 | 0x3F<<7 | 0x25,
	29432 - 19968: jis0208<<14 | 0x22<<7 | 0x0B,
	29433 - 19968: jis0208<<14 | 0x3F<<7 | 0x24,
	29434 - 19968: jis0212<<14 | 0x29<<7 | 0x5C,
	29435 - 19968: jis0212<<14 | 0x29<<7 | 0x5D,
	29436 - 19968: jis0208<<14 | 0x2E<<7 | 0x14,
	29437 - 19968: jis0208<<14 | 0x26<<7 | 0x41,
	29438 - 19968: jis0212<<14 | 0x2A<<7 | 0x00,
	29442 - 19968: jis0212<<14 | 0x2A<<7 | 0x01,
	29444 - 19968: jis0212<<14 | 0x2A<<7 | 0x02,
	29445 - 19968: jis0212<<14 | 0x2A<<7 | 0x03,
	29447 - 19968: jis0212<<14 | 0x2A<<7 | 0x04,
	29450 - 19968: jis0208<<14 | 0x3F<<7 | 0x28,
	29451 - 19968: jis0212<<14 | 0x2A<<7 | 0x05,
	29453 - 19968: jis0212<<14 | 0x2A<<7 | 0x06,
	29458 - 19968: jis0212<<14 | 0x2A<<7 | 0x07,
	29459 - 19968: jis0212<<14 | 0x2A<<7 | 0x08,
	29462 - 19968: jis0208<<14 | 0x3F<<7 | 0x2A,
	29463 - 19968: jis0208<<14 | 0x3F<<7 | 0x27,
	29464 - 19968: jis0212<<14 | 0x2A<<7 | 0x09,
	29465 - 19968: jis0212<<14 | 0x2A<<7 | 0x0A,
	29467 - 19968: jis0208<<14 | 0x2B<<7 | 0x33,
	29468 - 19968: jis0208<<14 | 0x3F<<7 | 0x29,
	29469 - 19968: jis0208<<14 | 0x3F<<7 | 0x2B,
	29470 - 19968: jis0212<<14 | 0x2A<<7 | 0x0B,
	29471 - 19968: jis0208<<14 | 0x2D<<7 | 0x23,
	29474 - 19968: jis0212<<14 | 0x2A<<7 | 0x0C,
	29476 - 19968: jis0208<<14 | 0x5A<<7 | 0x01,
	29477 - 19968: jis0208<<14 | 0x3F<<7 | 0x2F,
	29479 - 19968: jis0212<<14 | 0x2A<<7 | 0x0E,
	29480 - 19968: jis0212<<14 | 0x2A<<7 | 0x0F,
	29481 - 19968: jis0208<<14 | 0x3F<<7 | 0x2E,
	29482 - 19968: jis0208<<14 | 0x22<<7 | 0x55,
	29483 - 19968: jis0208<<14 | 0x26<<7 | 0x0C,
	29484 - 19968: jis0212<<14 | 0x2A<<7 | 0x10,
	29486 - 19968: jis0208<<14 | 0x17<<7 | 0x04,
	29487 - 19968: jis0208<<14 | 0x3F<<7 | 0x2D,
	29489 - 19968: jis0212<<14 | 0x2A<<7 | 0x11,
	29490 - 19968: jis0212<<14 | 0x2A<<7 | 0x12,
	29492 - 19968: jis0208<<14 | 0x3F<<7 | 0x2C,
	29493 - 19968: jis0212<<14 | 0x2A<<7 | 0x13,
	29494 - 19968: jis0208<<14 | 0x2C<<7 | 0x10,
	29495 - 19968: jis0208<<14 | 0x2C<<7 | 0x11,
	29498 - 19968: jis0212<<14 | 0x2A<<7 | 0x14,
	29499 - 19968: jis0212<<14 | 0x2A<<7 | 0x15,
	29501 - 19968: jis0212<<14 | 0x2A<<7 | 0x16,
	29502 - 19968: jis0208<<14 | 0x3F<<7 | 0x30,
	29503 - 19968: jis0208<<14 | 0x10<<7 | 0x4D,
	29507 - 19968: jis0212<<14 | 0x2A<<7 | 0x17,
	29508 - 19968: jis0208<<14 | 0x18<<7 | 0x55,
	29509 - 19968: jis0208<<14 | 0x1A<<7 | 0x41,
	29517 - 19968: jis0212<<14 | 0x2A<<7 | 0x18,
	29518 - 19968: jis0208<<14 | 0x3F<<7 | 0x31,
	29519 - 19968: jis0208<<14 | 0x3F<<7 | 0x32,
	29520 - 19968: jis0212<<14 | 0x2A<<7 | 0x19,
	29522 - 19968: jis0212<<14 | 0x2A<<7 | 0x1A,
	29526 - 19968: jis0212<<14 | 0x2A<<7 | 0x1B,
	29527 - 19968: jis0208<<14 | 0x3F<<7 | 0x34,
	29528 - 19968: jis0212<<14 | 0x2A<<7 | 0x1C,
	29533 - 19968: jis0212<<14 | 0x2A<<7 | 0x1D,
	29534 - 19968: jis0212<<14 | 0x2A<<7 | 0x1E,
	29535 - 19968: jis0212<<14 | 0x2A<<7 | 0x1F,
	29536 - 19968: jis0212<<14 | 0x2A<<7 | 0x20,
	29539 - 19968: jis0208<<14 | 0x1C<<7 | 0x22,
	29542 - 19968: jis0212<<14 | 0x2A<<7 | 0x21,
	29543 - 19968: jis0212<<14 | 0x2A<<7 | 0x22,
	29544 - 19968: jis0208<<14 | 0x3F<<7 | 0x36,
	29545 - 19968: jis0212<<14 | 0x2A<<7 | 0x23,
	29546 - 19968: jis0208<<14 | 0x3F<<7 | 0x35,
	29547 - 19968: jis0212<<14 | 0x2A<<7 | 0x24,
	29548 - 19968: jis0212<<14 | 0x2A<<7 | 0x25,
	29550 - 19968: jis0212<<14 | 0x2A<<7 | 0x26,
	29551 - 19968: jis0212<<14 | 0x2A<<7 | 0x27,
	29552 - 19968: jis0208<<14 | 0x3F<<7 | 0x37,
	29553 - 19968: jis0212<<14 | 0x2A<<7 | 0x28,
	29554 - 19968: jis0208<<14 | 0x12<<7 | 0x2C,
	29557 - 19968: jis0208<<14 | 0x3F<<7 | 0x39,
	29559 - 19968: jis0208<<14 | 0x5A<<7 | 0x03,
	29560 - 19968: jis0208<<14 | 0x3F<<7 | 0x38,
	29561 - 19968: jis0212<<14 | 0x2A<<7 | 0x2A,
	29562 - 19968: jis0208<<14 | 0x3F<<7 | 0x3B,
	29563 - 19968: jis0208<<14 | 0x3F<<7 | 0x3A,
	29564 - 19968: jis0212<<14 | 0x2A<<7 | 0x2B,
	29568 - 19968: jis0212<<14 | 0x2A<<7 | 0x2C,
	29569 - 19968: jis0212<<14 | 0x2A<<7 | 0x2D,
	29571 - 19968: jis0212<<14 | 0x2A<<7 | 0x2E,
	29572 - 19968: jis0208<<14 | 0x17<<7 | 0x1B,
	29573 - 19968: jis0212<<14 | 0x2A<<7 | 0x2F,
	29574 - 19968: jis0212<<14 | 0x2A<<7 | 0x30,
	29575 - 19968: jis0208<<14 | 0x2D<<7 | 0x07,
	29577 - 19968: jis0208<<14 | 0x15<<7 | 0x2B,
	29579 - 19968: jis0208<<14 | 0x11<<7 | 0x05,
	29582 - 19968: jis0212<<14 | 0x2A<<7 | 0x31,
	29584 - 19968: jis0212<<14 | 0x2A<<7 | 0x32,
	29587 - 19968: jis0212<<14 | 0x2A<<7 | 0x33,
	29589 - 19968: jis0212<<14 | 0x2A<<7 | 0x34,
	29590 - 19968: jis0208<<14 | 0x15<<7 | 0x49,
	29591 - 19968: jis0212<<14 | 0x2A<<7 | 0x35,
	29592 - 19968: jis0212<<14 | 0x2A<<7 | 0x36,
	29596 - 19968: jis0212<<14 | 0x2A<<7 | 0x37,
	29598 - 19968: jis0212<<14 | 0x2A<<7 | 0x38,
	29599 - 19968: jis0212<<14 | 0x2A<<7 | 0x39,
	29600 - 19968: jis0212<<14 | 0x2A<<7 | 0x3A,
	29602 - 19968: jis0212<<14 | 0x2A<<7 | 0x3B,
	29605 - 19968: jis0212<<14 | 0x2A<<7 | 0x3C,
	29606 - 19968: jis0212<<14 | 0x2A<<7 | 0x3D,
	29609 - 19968: jis0208<<14 | 0x13<<7 | 0x40,
	29610 - 19968: jis0212<<14 | 0x2A<<7 | 0x3E,
	29611 - 19968: jis0212<<14 | 0x2A<<7 | 0x3F,
	29613 - 19968: jis0212<<14 | 0x2A<<7 | 0x40,
	29618 - 19968: jis0208<<14 | 0x2D<<7 | 0x47,
	29619 - 19968: jis0208<<14 | 0x3F<<7 | 0x3D,
	29621 - 19968: jis0212<<14 | 0x2A<<7 | 0x41,
	29623 - 19968: jis0212<<14 | 0x2A<<7 | 0x42,
	29625 - 19968: jis0212<<14 | 0x2A<<7 | 0x43,
	29627 - 19968: jis0208<<14 | 0x3F<<7 | 0x3F,
	29628 - 19968: jis0212<<14 | 0x2A<<7 | 0x44,
	29629 - 19968: jis0208<<14 | 0x5A<<7 | 0x04,
	29631 - 19968: jis0212<<14 | 0x2A<<7 | 0x46,
	29632 - 19968: jis0208<<14 | 0x3F<<7 | 0x40,
	29634 - 19968: jis0208<<14 | 0x11<<7 | 0x30,
	29637 - 19968: jis0212<<14 | 0x2A<<7 | 0x47,
	29638 - 19968: jis0212<<14 | 0x2A<<7 | 0x48,
	29640 - 19968: jis0208<<14 | 0x3F<<7 | 0x3C,
	29641 - 19968: jis0208<<14 | 0x5A<<7 | 0x05,
	29642 - 19968: jis0208<<14 | 0x1A<<7 | 0x18,
	29643 - 19968: jis0212<<14 | 0x2A<<7 | 0x4A,
	29644 - 19968: jis0212<<14 | 0x2A<<7 | 0x4B,
	29645 - 19968: jis0208<<14 | 0x23<<7 | 0x20,
	29646 - 19968: jis0208<<14 | 0x3F<<7 | 0x3E,
	29647 - 19968: jis0212<<14 | 0x2A<<7 | 0x4C,
	29650 - 19968: jis0208<<14 | 0x5A<<7 | 0x08,
	29651 - 19968: jis0212<<14 | 0x2A<<7 | 0x4E,
	29654 - 19968: jis0208<<14 | 0x5A<<7 | 0x06,
	29657 - 19968: jis0212<<14 | 0x2A<<7 | 0x50,
	29661 - 19968: jis0212<<14 | 0x2A<<7 | 0x51,
	29662 - 19968: jis0208<<14 | 0x3F<<7 | 0x43,
	29664 - 19968: jis0208<<14 | 0x1B<<7 | 0x4D,
	29665 - 19968: jis0212<<14 | 0x2A<<7 | 0x52,
	29667 - 19968: jis0208<<14 | 0x5A<<7 | 0x07,
	29669 - 19968: jis0208<<14 | 0x3F<<7 | 0x41,
	29670 - 19968: jis0212<<14 | 0x2A<<7 | 0x54,
	29671 - 19968: jis0212<<14 | 0x2A<<7 | 0x55,
	29673 - 19968: jis0212<<14 | 0x2A<<7 | 0x56,
	29674 - 19968: jis0208<<14 | 0x16<<7 | 0x1D,
	29677 - 19968: jis0208<<14 | 0x27<<7 | 0x28,
	29678 - 19968: jis0208<<14 | 0x3F<<7 | 0x42,
	29681 - 19968: jis0208<<14 | 0x3F<<7 | 0x5D,
	29684 - 19968: jis0212<<14 | 0x2A<<7 | 0x57,
	29685 - 19968: jis0208<<14 | 0x5A<<7 | 0x0A,
	29687 - 19968: jis0212<<14 | 0x2A<<7 | 0x59,
	29688 - 19968: jis0208<<14 | 0x3F<<7 | 0x48,
	29689 - 19968: jis0212<<14 | 0x2A<<7 | 0x5A,
	29690 - 19968: jis0212<<14 | 0x2A<<7 | 0x5B,
	29691 - 19968: jis0212<<14 | 0x2A<<7 | 0x5C,
	29693 - 19968: jis0212<<14 | 0x2A<<7 | 0x5D,
	29694 - 19968: jis0208<<14 | 0x17<<7 | 0x1C,
	29695 - 19968: jis0212<<14 | 0x2B<<7 | 0x00,
	29696 - 19968: jis0212<<14 | 0x2B<<7 | 0x01,
	29697 - 19968: jis0212<<14 | 0x2B<<7 | 0x02,
	29699 - 19968: jis0208<<14 | 0x14<<7 | 0x44,
	29700 - 19968: jis0212<<14 | 0x2B<<7 | 0x03,
	29701 - 19968: jis0208<<14 | 0x3F<<7 | 0x45,
	29702 - 19968: jis0208<<14 | 0x2C<<7 | 0x5C,
	29703 - 19968: jis0208<<14 | 0x5A<<7 | 0x09,
	29705 - 19968: jis0208<<14 | 0x2D<<7 | 0x0F,
	29706 - 19968: jis0212<<14 | 0x2B<<7 | 0x05,
	29713 - 19968: jis0212<<14 | 0x2B<<7 | 0x06,
	29722 - 19968: jis0212<<14 | 0x2B<<7 | 0x07,
	29723 - 19968: jis0212<<14 | 0x2B<<7 | 0x08,
	29730 - 19968: jis0208<<14 | 0x21<<7 | 0x55,
	29732 - 19968: jis0212<<14 | 0x2B<<7 | 0x09,
	29733 - 19968: jis0208<<14 | 0x3F<<7 | 0x47,
	29734 - 19968: jis0208<<14 | 0x5A<<7 | 0x0B,
	29736 - 19968: jis0212<<14 | 0x2B<<7 | 0x0B,
	29737 - 19968: jis0208<<14 | 0x5A<<7 | 0x0D,
	29738 - 19968: jis0208<<14 | 0x5A<<7 | 0x0C,
	29739 - 19968: jis0212<<14 | 0x2B<<7 | 0x0E,
	29740 - 19968: jis0212<<14 | 0x2B<<7 | 0x0F,
	29741 - 19968: jis0212<<14 | 0x2B<<7 | 0x10,
	29742 - 19968: jis0208<<14 | 0x5A<<7 | 0x0E,
	29743 - 19968: jis0212<<14 | 0x2B<<7 | 0x12,
	29744 - 19968: jis0212<<14 | 0x2B<<7 | 0x13,
	29745 - 19968: jis0212<<14 | 0x2B<<7 | 0x14,
	29746 - 19968: jis0208<<14 | 0x3F<<7 | 0x49,
	29747 - 19968: jis0208<<14 | 0x2D<<7 | 0x35,
	29748 - 19968: jis0208<<14 | 0x15<<7 | 0x36,
	29749 - 19968: jis0208<<14 | 0x27<<7 | 0x5B,
	29750 - 19968: jis0208<<14 | 0x26<<7 | 0x29,
	29753 - 19968: jis0212<<14 | 0x2B<<7 | 0x15,
	29754 - 19968: jis0208<<14 | 0x3F<<7 | 0x4A,
	29759 - 19968: jis0208<<14 | 0x3F<<7 | 0x4C,
	29760 - 19968: jis0212<<14 | 0x2B<<7 | 0x16,
	29761 - 19968: jis0208<<14 | 0x3F<<7 | 0x4F,
	29763 - 19968: jis0212<<14 | 0x2B<<7 | 0x17,
	29764 - 19968: jis0212<<14 | 0x2B<<7 | 0x18,
	29766 - 19968: jis0212<<14 | 0x2B<<7 | 0x19,
	29767 - 19968: jis0212<<14 | 0x2B<<7 | 0x1A,
	29771 - 19968: jis0212<<14 | 0x2B<<7 | 0x1B,
	29773 - 19968: jis0212<<14 | 0x2B<<7 | 0x1C,
	29777 - 19968: jis0212<<14 | 0x2B<<7 | 0x1D,
	29778 - 19968: jis0212<<14 | 0x2B<<7 | 0x1E,
	29781 - 19968: jis0208<<14 | 0x3F<<7 | 0x4B,
	29783 - 19968: jis0212<<14 | 0x2B<<7 | 0x1F,
	29785 - 19968: jis0208<<14 | 0x3F<<7 | 0x4E,
	29786 - 19968: jis0208<<14 | 0x17<<7 | 0x49,
	29787 - 19968: jis0208<<14 | 0x10<<7 | 0x2C,
	29788 - 19968: jis0208<<14 | 0x3F<<7 | 0x50,
	29789 - 19968: jis0212<<14 | 0x2B<<7 | 0x20,
	29790 - 19968: jis0208<<14 | 0x1E<<7 | 0x4F,
	29791 - 19968: jis0208<<14 | 0x3F<<7 | 0x4D,
	29792 - 19968: jis0208<<14 | 0x2D<<7 | 0x3B,
	29794 - 19968: jis0208<<14 | 0x5A<<7 | 0x0F,
	29795 - 19968: jis0208<<14 | 0x3F<<7 | 0x53,
	29796 - 19968: jis0208<<14 | 0x53<<7 | 0x03,
	29798 - 19968: jis0212<<14 | 0x2B<<7 | 0x22,
	29799 - 19968: jis0212<<14 | 0x2B<<7 | 0x23,
	29800 - 19968: jis0212<<14 | 0x2B<<7 | 0x24,
	29801 - 19968: jis0208<<14 | 0x3F<<7 | 0x51,
	29802 - 19968: jis0208<<14 | 0x3F<<7 | 0x54,
	29803 - 19968: jis0212<<14 | 0x2B<<7 | 0x25,
	29805 - 19968: jis0212<<14 | 0x2B<<7 | 0x26,
	29806 - 19968: jis0212<<14 | 0x2B<<7 | 0x27,
	29807 - 19968: jis0208<<14 | 0x3F<<7 | 0x46,
	29808 - 19968: jis0208<<14 | 0x3F<<7 | 0x52,
	29809 - 19968: jis0212<<14 | 0x2B<<7 | 0x28,
	29810 - 19968: jis0212<<14 | 0x2B<<7 | 0x29,
	29811 - 19968: jis0208<<14 | 0x19<<7 | 0x1B,
	29814 - 19968: jis0208<<14 | 0x3F<<7 | 0x55,
	29822 - 19968: jis0208<<14 | 0x3F<<7 | 0x56,
	29824 - 19968: jis0212<<14 | 0x2B<<7 | 0x2A,
	29825 - 19968: jis0212<<14 | 0x2B<<7 | 0x2B,
	29827 - 19968: jis0208<<14 | 0x2C<<7 | 0x5D,
	29829 - 19968: jis0212<<14 | 0x2B<<7 | 0x2C,
	29830 - 19968: jis0212<<14 | 0x2B<<7 | 0x2D,
	29831 - 19968: jis0212<<14 | 0x2B<<7 | 0x2E,
	29833 - 19968: jis0208<<14 | 0x5A<<7 | 0x10,
	29835 - 19968: jis0208<<14 | 0x3F<<7 | 0x57,
	29839 - 19968: jis0212<<14 | 0x2B<<7 | 0x30,
	29840 - 19968: jis0212<<14 | 0x2B<<7 | 0x31,
	29841 - 19968: jis0212<<14 | 0x2B<<7 | 0x32,
	29842 - 19968: jis0212<<14 | 0x2B<<7 | 0x33,
	29848 - 19968: jis0212<<14 | 0x2B<<7 | 0x34,
	29849 - 19968: jis0212<<14 | 0x2B<<7 | 0x35,
	29850 - 19968: jis0212<<14 | 0x2B<<7 | 0x36,
	29852 - 19968: jis0212<<14 | 0x2B<<7 | 0x37,
	29854 - 19968: jis0208<<14 | 0x3F<<7 | 0x58,
	29855 - 19968: jis0208<<14 | 0x5A<<7 | 0x11,
	29856 - 19968: jis0212<<14 | 0x2B<<7 | 0x39,
	29857 - 19968: jis0212<<14 | 0x2B<<7 | 0x3A,
	29858 - 19968: jis0208<<14 | 0x3F<<7 | 0x44,
	29859 - 19968: jis0212<<14 | 0x2B<<7 | 0x3B,
	29862 - 19968: jis0212<<14 | 0x2B<<7 | 0x3C,
	29863 - 19968: jis0208<<14 | 0x3F<<7 | 0x59,
	29864 - 19968: jis0212<<14 | 0x2B<<7 | 0x3D,
	29865 - 19968: jis0212<<14 | 0x2B<<7 | 0x3E,
	29866 - 19968: jis0212<<14 | 0x2B<<7 | 0x3F,
	29867 - 19968: jis0212<<14 | 0x2B<<7 | 0x40,
	29870 - 19968: jis0212<<14 | 0x2B<<7 | 0x41,
	29871 - 19968: jis0212<<14 | 0x2B<<7 | 0x42,
	29872 - 19968: jis0208<<14 | 0x13<<7 | 0x23,
	29873 - 19968: jis0212<<14 | 0x2B<<7 | 0x43,
	29874 - 19968: jis0212<<14 | 0x2B<<7 | 0x44,
	29877 - 19968: jis0212<<14 | 0x2B<<7 | 0x45,
	29881 - 19968: jis0212<<14 | 0x2B<<7 | 0x46,
	29883 - 19968: jis0212<<14 | 0x2B<<7 | 0x47,
	29885 - 19968: jis0208<<14 | 0x1B<<7 | 0x04,
	29887 - 19968: jis0212<<14 | 0x2B<<7 | 0x48,
	29896 - 19968: jis0212<<14 | 0x2B<<7 | 0x49,
	29897 - 19968: jis0212<<14 | 0x2B<<7 | 0x4A,
	29898 - 19968: jis0208<<14 | 0x3F<<7 | 0x5A,
	29900 - 19968: jis0212<<14 | 0x2B<<7 | 0x4B,
	29903 - 19968: jis0208<<14 | 0x3F<<7 | 0x5B,
	29904 - 19968: jis0212<<14 | 0x2B<<7 | 0x4C,
	29907 - 19968: jis0212<<14 | 0x2B<<7 | 0x4D,
	29908 - 19968: jis0208<<14 | 0x3F<<7 | 0x5C,
	29912 - 19968: jis0212<<14 | 0x2B<<7 | 0x4E,
	29914 - 19968: jis0212<<14 | 0x2B<<7 | 0x4F,
	29915 - 19968: jis0212<<14 | 0x2B<<7 | 0x50,
	29916 - 19968: jis0208<<14 | 0x10<<7 | 0x1A,
	29918 - 19968: jis0212<<14 | 0x2B<<7 | 0x51,
	29919 - 19968: jis0212<<14 | 0x2B<<7 | 0x52,
	29920 - 19968: jis0208<<14 | 0x40<<7 | 0x00,
	29922 - 19968: jis0208<<14 | 0x28<<7 | 0x1A,
	29923 - 19968: jis0208<<14 | 0x40<<7 | 0x01,
	29924 - 19968: jis0212<<14 | 0x2B<<7 | 0x53,
	29926 - 19968: jis0208<<14 | 0x13<<7 | 0x03,
	29927 - 19968: jis0208<<14 | 0x40<<7 | 0x02,
	29928 - 19968: jis0212<<14 | 0x2B<<7 | 0x54,
	29929 - 19968: jis0208<<14 | 0x40<<7 | 0x03,
	29930 - 19968: jis0212<<14 | 0x2B<<7 | 0x55,
	29931 - 19968: jis0212<<14 | 0x2B<<7 | 0x56,
	29934 - 19968: jis0208<<14 | 0x40<<7 | 0x04,
	29935 - 19968: jis0212<<14 | 0x2B<<7 | 0x57,
	29936 - 19968: jis0208<<14 | 0x40<<7 | 0x06,
	29937 - 19968: jis0208<<14 | 0x40<<7 | 0x07,
	29938 - 19968: jis0208<<14 | 0x40<<7 | 0x05,
	29940 - 19968: jis0212<<14 | 0x2B<<7 | 0x58,
	29942 - 19968: jis0208<<14 | 0x28<<7 | 0x32,
	29943 - 19968: jis0208<<14 | 0x40<<7 | 0x09,
	29944 - 19968: jis0208<<14 | 0x40<<7 | 0x08,
	29946 - 19968: jis0212<<14 | 0x2B<<7 | 0x59,
	29947 - 19968: jis0212<<14 | 0x2B<<7 | 0x5A,
	29948 - 19968: jis0212<<14 | 0x2B<<7 | 0x5B,
	29951 - 19968: jis0212<<14 | 0x2B<<7 | 0x5C,
	29953 - 19968: jis0208<<14 | 0x5A<<7 | 0x12,
	29955 - 19968: jis0208<<14 | 0x40<<7 | 0x0B,
	29956 - 19968: jis0208<<14 | 0x40<<7 | 0x0A,
	29957 - 19968: jis0208<<14 | 0x40<<7 | 0x0C,
	29958 - 19968: jis0212<<14 | 0x2B<<7 | 0x5D,
	29964 - 19968: jis0208<<14 | 0x40<<7 | 0x0D,
	29965 - 19968: jis0208<<14 | 0x40<<7 | 0x0F,
	29966 - 19968: jis0208<<14 | 0x40<<7 | 0x0E,
	29969 - 19968: jis0208<<14 | 0x18<<7 | 0x58,
	29970 - 19968: jis0212<<14 | 0x2C<<7 | 0x00,
	29971 - 19968: jis0208<<14 | 0x40<<7 | 0x11,
	29973 - 19968: jis0208<<14 | 0x40<<7 | 0x10,
	29974 - 19968: jis0212<<14 | 0x2C<<7 | 0x01,
	29975 - 19968: jis0212<<14 | 0x2C<<7 | 0x02,
	29976 - 19968: jis0208<<14 | 0x13<<7 | 0x24,
	29978 - 19968: jis0208<<14 | 0x1E<<7 | 0x32,
	29980 - 19968: jis0208<<14 | 0x24<<7 | 0x1B,
	29982 - 19968: jis0208<<14 | 0x40<<7 | 0x12,
	29983 - 19968: jis0208<<14 | 0x1F<<7 | 0x17,
	29984 - 19968: jis0212<<14 | 0x2C<<7 | 0x03,
	29985 - 19968: jis0212<<14 | 0x2C<<7 | 0x04,
	29987 - 19968: jis0208<<14 | 0x1A<<7 | 0x19,
	29988 - 19968: jis0212<<14 | 0x2C<<7 | 0x05,
	29989 - 19968: jis0208<<14 | 0x10<<7 | 0x58,
	29990 - 19968: jis0208<<14 | 0x40<<7 | 0x13,
	29991 - 19968: jis0212<<14 | 0x2C<<7 | 0x06,
	29992 - 19968: jis0208<<14 | 0x2C<<7 | 0x30,
	29993 - 19968: jis0212<<14 | 0x2C<<7 | 0x07,
	29994 - 19968: jis0212<<14 | 0x2C<<7 | 0x08,
	29995 - 19968: jis0208<<14 | 0x29<<7 | 0x42,
	29996 - 19968: jis0208<<14 | 0x40<<7 | 0x14,
	29999 - 19968: jis0208<<14 | 0x58<<7 | 0x4B,
	30000 - 19968: jis0208<<14 | 0x24<<7 | 0x23,
	30001 - 19968: jis0208<<14 | 0x2C<<7 | 0x12,
	30002 - 19968: jis0208<<14 | 0x18<<7 | 0x22,
	30003 - 19968: jis0208<<14 | 0x1E<<7 | 0x1C,
	30006 - 19968: jis0212<<14 | 0x2C<<7 | 0x0A,
	30007 - 19968: jis0208<<14 | 0x22<<7 | 0x2A,
	30008 - 19968: jis0208<<14 | 0x31<<7 | 0x13,
	30009 - 19968: jis0212<<14 | 0x2C<<7 | 0x0B,
	30010 - 19968: jis0208<<14 | 0x23<<7 | 0x0D,
	30011 - 19968: jis0208<<14 | 0x11<<7 | 0x47,
	30012 - 19968: jis0208<<14 | 0x40<<7 | 0x15,
	30013 - 19968: jis0212<<14 | 0x2C<<7 | 0x0C,
	30014 - 19968: jis0212<<14 | 0x2C<<7 | 0x0D,
	30015 - 19968: jis0212<<14 | 0x2C<<7 | 0x0E,
	30016 - 19968: jis0212<<14 | 0x2C<<7 | 0x0F,
	30019 - 19968: jis0212<<14 | 0x2C<<7 | 0x10,
	30020 - 19968: jis0208<<14 | 0x40<<7 | 0x16,
	30022 - 19968: jis0208<<14 | 0x40<<7 | 0x1B,
	30023 - 19968: jis0212<<14 | 0x2C<<7 | 0x11,
	30024 - 19968: jis0212<<14 | 0x2C<<7 | 0x12,
	30025 - 19968: jis0208<<14 | 0x40<<7 | 0x19,
	30026 - 19968: jis0208<<14 | 0x40<<7 | 0x18,
	30027 - 19968: jis0208<<14 | 0x39<<7 | 0x21,
	30028 - 19968: jis0208<<14 | 0x12<<7 | 0x05,
	30029 - 19968: jis0208<<14 | 0x40<<7 | 0x17,
	30030 - 19968: jis0212<<14 | 0x2C<<7 | 0x13,
	30031 - 19968: jis0208<<14 | 0x0F<<7 | 0x39,
	30032 - 19968: jis0212<<14 | 0x2C<<7 | 0x14,
	30033 - 19968: jis0208<<14 | 0x27<<7 | 0x09,
	30034 - 19968: jis0212<<14 | 0x2C<<7 | 0x15,
	30036 - 19968: jis0208<<14 | 0x27<<7 | 0x29,
	30039 - 19968: jis0212<<14 | 0x2C<<7 | 0x16,
	30041 - 19968: jis0208<<14 | 0x2D<<7 | 0x10,
	30042 - 19968: jis0208<<14 | 0x40<<7 | 0x1C,
	30043 - 19968: jis0208<<14 | 0x40<<7 | 0x1A,
	30044 - 19968: jis0208<<14 | 0x22<<7 | 0x3B,
	30045 - 19968: jis0208<<14 | 0x1F<<7 | 0x05,
	30046 - 19968: jis0212<<14 | 0x2C<<7 | 0x17,
	30047 - 19968: jis0212<<14 | 0x2C<<7 | 0x18,
	30048 - 19968: jis0208<<14 | 0x27<<7 | 0x0A,
	30049 - 19968: jis0212<<14 | 0x2C<<7 | 0x19,
	30050 - 19968: jis0208<<14 | 0x28<<7 | 0x0C,
	30052 - 19968: jis0208<<14 | 0x40<<7 | 0x1E,
	30053 - 19968: jis0208<<14 | 0x2D<<7 | 0x0B,
	30054 - 19968: jis0208<<14 | 0x16<<7 | 0x2C,
	30055 - 19968: jis0208<<14 | 0x40<<7 | 0x1F,
	30057 - 19968: jis0208<<14 | 0x40<<7 | 0x1D,
	30058 - 19968: jis0208<<14 | 0x27<<7 | 0x35,
	30059 - 19968: jis0208<<14 | 0x40<<7 | 0x20,
	30061 - 19968: jis0208<<14 | 0x40<<7 | 0x21,
	30063 - 19968: jis0208<<14 | 0x5A<<7 | 0x13,
	30064 - 19968: jis0208<<14 | 0x0F<<7 | 0x3A,
	30065 - 19968: jis0212<<14 | 0x2C<<7 | 0x1B,
	30067 - 19968: jis0208<<14 | 0x1D<<7 | 0x55,
	30068 - 19968: jis0208<<14 | 0x40<<7 | 0x26,
	30070 - 19968: jis0208<<14 | 0x40<<7 | 0x23,
	30071 - 19968: jis0208<<14 | 0x25<<7 | 0x4C,
	30072 - 19968: jis0208<<14 | 0x40<<7 | 0x22,
	30073 - 19968: jis0212<<14 | 0x2C<<7 | 0x1C,
	30074 - 19968: jis0212<<14 | 0x2C<<7 | 0x1D,
	30075 - 19968: jis0212<<14 | 0x2C<<7 | 0x1E,
	30076 - 19968: jis0212<<14 | 0x2C<<7 | 0x1F,
	30077 - 19968: jis0212<<14 | 0x2C<<7 | 0x20,
	30078 - 19968: jis0212<<14 | 0x2C<<7 | 0x21,
	30079 - 19968: jis0208<<14 | 0x14<<7 | 0x05,
	30081 - 19968: jis0212<<14 | 0x2C<<7 | 0x22,
	30082 - 19968: jis0208<<14 | 0x40<<7 | 0x29,
	30085 - 19968: jis0212<<14 | 0x2C<<7 | 0x23,
	30086 - 19968: jis0208<<14 | 0x40<<7 | 0x24,
	30087 - 19968: jis0208<<14 | 0x40<<7 | 0x25,
	30089 - 19968: jis0208<<14 | 0x40<<7 | 0x28,
	30090 - 19968: jis0208<<14 | 0x40<<7 | 0x27,
	30091 - 19968: jis0208<<14 | 0x28<<7 | 0x04,
	30094 - 19968: jis0208<<14 | 0x20<<7 | 0x21,
	30095 - 19968: jis0208<<14 | 0x20<<7 | 0x20,
	30096 - 19968: jis0212<<14 | 0x2C<<7 | 0x24,
	30097 - 19968: jis0208<<14 | 0x14<<7 | 0x1E,
	30098 - 19968: jis0212<<14 | 0x2C<<7 | 0x25,
	30099 - 19968: jis0212<<14 | 0x2C<<7 | 0x26,
	30100 - 19968: jis0208<<14 | 0x40<<7 | 0x2A,
	30101 - 19968: jis0212<<14 | 0x2C<<7 | 0x27,
	30105 - 19968: jis0212<<14 | 0x2C<<7 | 0x28,
	30106 - 19968: jis0208<<14 | 0x40<<7 | 0x2B,
	30108 - 19968: jis0212<<14 | 0x2C<<7 | 0x29,
	30109 - 19968: jis0208<<14 | 0x40<<7 | 0x2C,
	30114 - 19968: jis0212<<14 | 0x2C<<7 | 0x2A,
	30115 - 19968: jis0208<<14 | 0x40<<7 | 0x2E,
	30116 - 19968: jis0212<<14 | 0x2C<<7 | 0x2B,
	30117 - 19968: jis0208<<14 | 0x40<<7 | 0x2D,
	30123 - 19968: jis0208<<14 | 0x10<<7 | 0x35,
	30129 - 19968: jis0208<<14 | 0x40<<7 | 0x36,
	30130 - 19968: jis0208<<14 | 0x27<<7 | 0x47,
	30131 - 19968: jis0208<<14 | 0x40<<7 | 0x30,
	30132 - 19968: jis0212<<14 | 0x2C<<7 | 0x2C,
	30133 - 19968: jis0208<<14 | 0x40<<7 | 0x32,
	30136 - 19968: jis0208<<14 | 0x40<<7 | 0x34,
	30137 - 19968: jis0208<<14 | 0x1E<<7 | 0x1D,
	30138 - 19968: jis0212<<14 | 0x2C<<7 | 0x2D,
	30140 - 19968: jis0208<<14 | 0x40<<7 | 0x35,
	30141 - 19968: jis0208<<14 | 0x40<<7 | 0x33,
	30142 - 19968: jis0208<<14 | 0x1B<<7 | 0x1F,
	30143 - 19968: jis0212<<14 | 0x2C<<7 | 0x2E,
	30144 - 19968: jis0212<<14 | 0x2C<<7 | 0x2F,
	30145 - 19968: jis0212<<14 | 0x2C<<7 | 0x30,
	30146 - 19968: jis0208<<14 | 0x40<<7 | 0x2F,
	30147 - 19968: jis0208<<14 | 0x40<<7 | 0x31,
	30148 - 19968: jis0212<<14 | 0x2C<<7 | 0x31,
	30149 - 19968: jis0208<<14 | 0x28<<7 | 0x21,
	30150 - 19968: jis0212<<14 | 0x2C<<7 | 0x32,
	30151 - 19968: jis0208<<14 | 0x1D<<7 | 0x28,
	30154 - 19968: jis0208<<14 | 0x40<<7 | 0x38,
	30156 - 19968: jis0212<<14 | 0x2C<<7 | 0x33,
	30157 - 19968: jis0208<<14 | 0x40<<7 | 0x37,
	30158 - 19968: jis0212<<14 | 0x2C<<7 | 0x34,
	30159 - 19968: jis0212<<14 | 0x2C<<7 | 0x35,
	30162 - 19968: jis0208<<14 | 0x40<<7 | 0x39,
	30164 - 19968: jis0208<<14 | 0x1B<<7 | 0x05,
	30165 - 19968: jis0208<<14 | 0x19<<7 | 0x0E,
	30167 - 19968: jis0212<<14 | 0x2C<<7 | 0x36,
	30168 - 19968: jis0208<<14 | 0x24<<7 | 0x56,
	30169 - 19968: jis0208<<14 | 0x40<<7 | 0x3A,
	30171 - 19968: jis0208<<14 | 0x23<<7 | 0x2A,
	30172 - 19968: jis0212<<14 | 0x2C<<7 | 0x37,
	30174 - 19968: jis0208<<14 | 0x40<<7 | 0x3C,
	30175 - 19968: jis0212<<14 | 0x2C<<7 | 0x38,
	30176 - 19968: jis0212<<14 | 0x2C<<7 | 0x39,
	30177 - 19968: jis0212<<14 | 0x2C<<7 | 0x3A,
	30178 - 19968: jis0208<<14 | 0x2D<<7 | 0x00,
	30179 - 19968: jis0208<<14 | 0x40<<7 | 0x3B,
	30180 - 19968: jis0212<<14 | 0x2C<<7 | 0x3B,
	30183 - 19968: jis0212<<14 | 0x2C<<7 | 0x3C,
	30185 - 19968: jis0208<<14 | 0x20<<7 | 0x48,
	30188 - 19968: jis0212<<14 | 0x2C<<7 | 0x3D,
	30190 - 19968: jis0212<<14 | 0x2C<<7 | 0x3E,
	30191 - 19968: jis0212<<14 | 0x2C<<7 | 0x3F,
	30192 - 19968: jis0208<<14 | 0x40<<7 | 0x41,
	30193 - 19968: jis0212<<14 | 0x2C<<7 | 0x40,
	30194 - 19968: jis0208<<14 | 0x40<<7 | 0x43,
	30195 - 19968: jis0208<<14 | 0x40<<7 | 0x44,
	30196 - 19968: jis0208<<14 | 0x22<<7 | 0x33,
	30201 - 19968: jis0212<<14 | 0x2C<<7 | 0x41,
	30202 - 19968: jis0208<<14 | 0x40<<7 | 0x42,
	30204 - 19968: jis0208<<14 | 0x40<<7 | 0x3F,
	30206 - 19968: jis0208<<14 | 0x40<<7 | 0x3D,
	30207 - 19968: jis0208<<14 | 0x40<<7 | 0x3E,
	30208 - 19968: jis0212<<14 | 0x2C<<7 | 0x42,
	30209 - 19968: jis0208<<14 | 0x40<<7 | 0x40,
	30210 - 19968: jis0212<<14 | 0x2C<<7 | 0x43,
	30211 - 19968: jis0212<<14 | 0x2C<<7 | 0x44,
	30212 - 19968: jis0212<<14 | 0x2C<<7 | 0x45,
	30215 - 19968: jis0212<<14 | 0x2C<<7 | 0x46,
	30216 - 19968: jis0212<<14 | 0x2C<<7 | 0x47,
	30217 - 19968: jis0208<<14 | 0x40<<7 | 0x47,
	30218 - 19968: jis0212<<14 | 0x2C<<7 | 0x48,
	30219 - 19968: jis0208<<14 | 0x40<<7 | 0x45,
	30220 - 19968: jis0212<<14 | 0x2C<<7 | 0x49,
	30221 - 19968: jis0208<<14 | 0x40<<7 | 0x46,
	30223 - 19968: jis0212<<14 | 0x2C<<7 | 0x4A,
	30226 - 19968: jis0212<<14 | 0x2C<<7 | 0x4B,
	30227 - 19968: jis0212<<14 | 0x2C<<7 | 0x4C,
	30229 - 19968: jis0212<<14 | 0x2C<<7 | 0x4D,
	30230 - 19968: jis0212<<14 | 0x2C<<7 | 0x4E,
	30233 - 19968: jis0212<<14 | 0x2C<<7 | 0x4F,
	30235 - 19968: jis0212<<14 | 0x2C<<7 | 0x50,
	30236 - 19968: jis0212<<14 | 0x2C<<7 | 0x51,
	30237 - 19968: jis0212<<14 | 0x2C<<7 | 0x52,
	30238 - 19968: jis0212<<14 | 0x2C<<7 | 0x53,
	30239 - 19968: jis0208<<14 | 0x40<<7 | 0x48,
	30240 - 19968: jis0208<<14 | 0x40<<7 | 0x4A,
	30241 - 19968: jis0208<<14 | 0x40<<7 | 0x4B,
	30242 - 19968: jis0208<<14 | 0x40<<7 | 0x4C,
	30243 - 19968: jis0212<<14 | 0x2C<<7 | 0x54,
	30244 - 19968: jis0208<<14 | 0x40<<7 | 0x4D,
	30245 - 19968: jis0212<<14 | 0x2C<<7 | 0x55,
	30246 - 19968: jis0212<<14 | 0x2C<<7 | 0x56,
	30247 - 19968: jis0208<<14 | 0x40<<7 | 0x49,
	30249 - 19968: jis0212<<14 | 0x2C<<7 | 0x57,
	30253 - 19968: jis0212<<14 | 0x2C<<7 | 0x58,
	30256 - 19968: jis0208<<14 | 0x40<<7 | 0x4F,
	30258 - 19968: jis0212<<14 | 0x2C<<7 | 0x59,
	30259 - 19968: jis0212<<14 | 0x2C<<7 | 0x5A,
	30260 - 19968: jis0208<<14 | 0x40<<7 | 0x4E,
	30261 - 19968: jis0212<<14 | 0x2C<<7 | 0x5B,
	30264 - 19968: jis0212<<14 | 0x2C<<7 | 0x5C,
	30265 - 19968: jis0212<<14 | 0x2C<<7 | 0x5D,
	30266 - 19968: jis0212<<14 | 0x2D<<7 | 0x00,
	30267 - 19968: jis0208<<14 | 0x40<<7 | 0x50,
	30268 - 19968: jis0212<<14 | 0x2D<<7 | 0x01,
	30272 - 19968: jis0212<<14 | 0x2D<<7 | 0x03,
	30273 - 19968: jis0212<<14 | 0x2D<<7 | 0x04,
	30274 - 19968: jis0208<<14 | 0x2D<<7 | 0x24,
	30275 - 19968: jis0212<<14 | 0x2D<<7 | 0x05,
	30276 - 19968: jis0212<<14 | 0x2D<<7 | 0x06,
	30277 - 19968: jis0212<<14 | 0x2D<<7 | 0x07,
	30278 - 19968: jis0208<<14 | 0x40<<7 | 0x53,
	30279 - 19968: jis0208<<14 | 0x40<<7 | 0x51,
	30280 - 19968: jis0208<<14 | 0x40<<7 | 0x52,
	30281 - 19968: jis0212<<14 | 0x2D<<7 | 0x08,
	30282 - 19968: jis0212<<14 | 0x2D<<7 | 0x02,
	30283 - 19968: jis0212<<14 | 0x2D<<7 | 0x09,
	30284 - 19968: jis0208<<14 | 0x13<<7 | 0x41,
	30290 - 19968: jis0208<<14 | 0x2B<<7 | 0x5D,
	30293 - 19968: jis0212<<14 | 0x2D<<7 | 0x0A,
	30294 - 19968: jis0208<<14 | 0x29<<7 | 0x29,
	30296 - 19968: jis0208<<14 | 0x40<<7 | 0x55,
	30297 - 19968: jis0212<<14 | 0x2D<<7 | 0x0B,
	30300 - 19968: jis0208<<14 | 0x40<<7 | 0x54,
	30303 - 19968: jis0212<<14 | 0x2D<<7 | 0x0C,
	30305 - 19968: jis0208<<14 | 0x40<<7 | 0x56,
	30306 - 19968: jis0208<<14 | 0x40<<7 | 0x57,
	30308 - 19968: jis0212<<14 | 0x2D<<7 | 0x0D,
	30309 - 19968: jis0212<<14 | 0x2D<<7 | 0x0E,
	30311 - 19968: jis0208<<14 | 0x40<<7 | 0x5B,
	30312 - 19968: jis0208<<14 | 0x40<<7 | 0x58,
	30313 - 19968: jis0208<<14 | 0x40<<7 | 0x59,
	30314 - 19968: jis0208<<14 | 0x40<<7 | 0x5A,
	30316 - 19968: jis0208<<14 | 0x40<<7 | 0x5C,
	30317 - 19968: jis0212<<14 | 0x2D<<7 | 0x0F,
	30318 - 19968: jis0212<<14 | 0x2D<<7 | 0x10,
	30319 - 19968: jis0212<<14 | 0x2D<<7 | 0x11,
	30320 - 19968: jis0208<<14 | 0x40<<7 | 0x5D,
	30321 - 19968: jis0212<<14 | 0x2D<<7 | 0x12,
	30322 - 19968: jis0208<<14 | 0x41<<7 | 0x00,
	30324 - 19968: jis0212<<14 | 0x2D<<7 | 0x13,
	30326 - 19968: jis0208<<14 | 0x41<<7 | 0x01,
	30328 - 19968: jis0208<<14 | 0x41<<7 | 0x02,
	30330 - 19968: jis0208<<14 | 0x27<<7 | 0x0E,
	30331 - 19968: jis0208<<14 | 0x24<<7 | 0x2F,
	30332 - 19968: jis0208<<14 | 0x41<<7 | 0x03,
	30333 - 19968: jis0208<<14 | 0x26<<7 | 0x51,
	30334 - 19968: jis0208<<14 | 0x28<<7 | 0x13,
	30336 - 19968: jis0208<<14 | 0x41<<7 | 0x04,
	30337 - 19968: jis0212<<14 | 0x2D<<7 | 0x14,
	30338 - 19968: jis0208<<14 | 0x5A<<7 | 0x14,
	30339 - 19968: jis0208<<14 | 0x41<<7 | 0x05,
	30340 - 19968: jis0208<<14 | 0x24<<7 | 0x09,
	30341 - 19968: jis0212<<14 | 0x2D<<7 | 0x15,
	30342 - 19968: jis0208<<14 | 0x12<<7 | 0x06,
	30343 - 19968: jis0208<<14 | 0x18<<7 | 0x23,
	30344 - 19968: jis0208<<14 | 0x41<<7 | 0x06,
	30347 - 19968: jis0208<<14 | 0x41<<7 | 0x07,
	30348 - 19968: jis0212<<14 | 0x2D<<7 | 0x16,
	30349 - 19968: jis0212<<14 | 0x2D<<7 | 0x17,
	30350 - 19968: jis0208<<14 | 0x41<<7 | 0x08,
	30352 - 19968: jis0208<<14 | 0x1A<<7 | 0x08,
	30355 - 19968: jis0208<<14 | 0x41<<7 | 0x0A,
	30357 - 19968: jis0212<<14 | 0x2D<<7 | 0x18,
	30358 - 19968: jis0208<<14 | 0x41<<7 | 0x09,
	30361 - 19968: jis0208<<14 | 0x41<<7 | 0x0B,
	30362 - 19968: jis0208<<14 | 0x41<<7 | 0x0C,
	30363 - 19968: jis0208<<14 | 0x5A<<7 | 0x17,
	30364 - 19968: jis0208<<14 | 0x5A<<7 | 0x15,
	30365 - 19968: jis0212<<14 | 0x2D<<7 | 0x1B,
	30366 - 19968: jis0208<<14 | 0x5A<<7 | 0x16,
	30367 - 19968: jis0212<<14 | 0x2D<<7 | 0x1C,
	30368 - 19968: jis0212<<14 | 0x2D<<7 | 0x1D,
	30370 - 19968: jis0212<<14 | 0x2D<<7 | 0x1E,
	30371 - 19968: jis0212<<14 | 0x2D<<7 | 0x1F,
	30372 - 19968: jis0212<<14 | 0x2D<<7 | 0x20,
	30373 - 19968: jis0212<<14 | 0x2D<<7 | 0x21,
	30374 - 19968: jis0208<<14 | 0x5A<<7 | 0x18,
	30375 - 19968: jis0212<<14 | 0x2D<<7 | 0x23,
	30376 - 19968: jis0212<<14 | 0x2D<<7 | 0x24,
	30378 - 19968: jis0212<<14 | 0x2D<<7 | 0x25,
	30381 - 19968: jis0212<<14 | 0x2D<<7 | 0x26,
	30382 - 19968: jis0208<<14 | 0x27<<7 | 0x48,
	30384 - 19968: jis0208<<14 | 0x41<<7 | 0x0D,
	30388 - 19968: jis0208<<14 | 0x41<<7 | 0x0E,
	30391 - 19968: jis0208<<14 | 0x52<<7 | 0x48,
	30392 - 19968: jis0208<<14 | 0x41<<7 | 0x0F,
	30393 - 19968: jis0208<<14 | 0x41<<7 | 0x10,
	30394 - 19968: jis0208<<14 | 0x41<<7 | 0x11,
	30397 - 19968: jis0212<<14 | 0x2D<<7 | 0x27,
	30399 - 19968: jis0208<<14 | 0x1A<<7 | 0x0D,
	30401 - 19968: jis0212<<14 | 0x2D<<7 | 0x28,
	30402 - 19968: jis0208<<14 | 0x41<<7 | 0x12,
	30403 - 19968: jis0208<<14 | 0x26<<7 | 0x35,
	30405 - 19968: jis0212<<14 | 0x2D<<7 | 0x29,
	30406 - 19968: jis0208<<14 | 0x2A<<7 | 0x3E,
	30408 - 19968: jis0208<<14 | 0x10<<7 | 0x2D,
	30409 - 19968: jis0212<<14 | 0x2D<<7 | 0x2A,
	30410 - 19968: jis0208<<14 | 0x10<<7 | 0x36,
	30411 - 19968: jis0212<<14 | 0x2D<<7 | 0x2B,
	30412 - 19968: jis0212<<14 | 0x2D<<7 | 0x2C,
	30413 - 19968: jis0208<<14 | 0x41<<7 | 0x13,
	30414 - 19968: jis0212<<14 | 0x2D<<7 | 0x2D,
	30418 - 19968: jis0208<<14 | 0x41<<7 | 0x15,
	30420 - 19968: jis0212<<14 | 0x2D<<7 | 0x2E,
	30422 - 19968: jis0208<<14 | 0x41<<7 | 0x14,
	30423 - 19968: jis0208<<14 | 0x24<<7 | 0x4F,
	30425 - 19968: jis0212<<14 | 0x2D<<7 | 0x2F,
	30427 - 19968: jis0208<<14 | 0x1F<<7 | 0x18,
	30428 - 19968: jis0208<<14 | 0x3C<<7 | 0x18,
	30430 - 19968: jis0208<<14 | 0x41<<7 | 0x16,
	30431 - 19968: jis0208<<14 | 0x2B<<7 | 0x20,
	30432 - 19968: jis0212<<14 | 0x2D<<7 | 0x30,
	30433 - 19968: jis0208<<14 | 0x41<<7 | 0x17,
	30435 - 19968: jis0208<<14 | 0x13<<7 | 0x25,
	30436 - 19968: jis0208<<14 | 0x27<<7 | 0x36,
	30437 - 19968: jis0208<<14 | 0x41<<7 | 0x18,
	30438 - 19968: jis0212<<14 | 0x2D<<7 | 0x31,
	30439 - 19968: jis0208<<14 | 0x41<<7 | 0x19,
	30440 - 19968: jis0212<<14 | 0x2D<<7 | 0x32,
	30442 - 19968: jis0208<<14 | 0x41<<7 | 0x1A,
	30444 - 19968: jis0212<<14 | 0x2D<<7 | 0x33,
	30446 - 19968: jis0208<<14 | 0x2B<<7 | 0x3B,
	30448 - 19968: jis0212<<14 | 0x2D<<7 | 0x34,
	30449 - 19968: jis0212<<14 | 0x2D<<7 | 0x35,
	30450 - 19968: jis0208<<14 | 0x2B<<7 | 0x34,
	30452 - 19968: jis0208<<14 | 0x23<<7 | 0x1D,
	30454 - 19968: jis0212<<14 | 0x2D<<7 | 0x36,
	30456 - 19968: jis0208<<14 | 0x20<<7 | 0x49,
	30457 - 19968: jis0212<<14 | 0x2D<<7 | 0x37,
	30459 - 19968: jis0208<<14 | 0x41<<7 | 0x1C,
	30460 - 19968: jis0212<<14 | 0x2D<<7 | 0x38,
	30462 - 19968: jis0208<<14 | 0x1C<<7 | 0x41,
	30464 - 19968: jis0212<<14 | 0x2D<<7 | 0x39,
	30465 - 19968: jis0208<<14 | 0x1D<<7 | 0x29,
	30468 - 19968: jis0208<<14 | 0x41<<7 | 0x1F,
	30470 - 19968: jis0212<<14 | 0x2D<<7 | 0x3A,
	30471 - 19968: jis0208<<14 | 0x41<<7 | 0x1E,
	30472 - 19968: jis0208<<14 | 0x41<<7 | 0x1D,
	30473 - 19968: jis0208<<14 | 0x27<<7 | 0x5C,
	30474 - 19968: jis0212<<14 | 0x2D<<7 | 0x3B,
	30475 - 19968: jis0208<<14 | 0x13<<7 | 0x26,
	30476 - 19968: jis0208<<14 | 0x17<<7 | 0x08,
	30478 - 19968: jis0212<<14 | 0x2D<<7 | 0x3C,
	30482 - 19968: jis0212<<14 | 0x2D<<7 | 0x3D,
	30484 - 19968: jis0212<<14 | 0x2D<<7 | 0x3E,
	30485 - 19968: jis0212<<14 | 0x2D<<7 | 0x3F,
	30487 - 19968: jis0212<<14 | 0x2D<<7 | 0x40,
	30489 - 19968: jis0212<<14 | 0x2D<<7 | 0x41,
	30490 - 19968: jis0212<<14 | 0x2D<<7 | 0x42,
	30491 - 19968: jis0208<<14 | 0x41<<7 | 0x25,
	30492 - 19968: jis0212<<14 | 0x2D<<7 | 0x43,
	30494 - 19968: jis0208<<14 | 0x41<<7 | 0x22,
	30495 - 19968: jis0208<<14 | 0x1E<<7 | 0x1E,
	30496 - 19968: jis0208<<14 | 0x2B<<7 | 0x11,
	30498 - 19968: jis0212<<14 | 0x2D<<7 | 0x44,
	30500 - 19968: jis0208<<14 | 0x41<<7 | 0x21,
	30501 - 19968: jis0208<<14 | 0x41<<7 | 0x23,
	30502 - 19968: jis0208<<14 | 0x41<<7 | 0x24,
	30504 - 19968: jis0212<<14 | 0x2D<<7 | 0x45,
	30505 - 19968: jis0208<<14 | 0x41<<7 | 0x20,
	30509 - 19968: jis0212<<14 | 0x2D<<7 | 0x46,
	30510 - 19968: jis0212<<14 | 0x2D<<7 | 0x47,
	30511 - 19968: jis0212<<14 | 0x2D<<7 | 0x48,
	30516 - 19968: jis0212<<14 | 0x2D<<7 | 0x49,
	30517 - 19968: jis0212<<14 | 0x2D<<7 | 0x4A,
	30518 - 19968: jis0212<<14 | 0x2D<<7 | 0x4B,
	30519 - 19968: jis0208<<14 | 0x41<<7 | 0x26,
	30520 - 19968: jis0208<<14 | 0x41<<7 | 0x27,
	30521 - 19968: jis0212<<14 | 0x2D<<7 | 0x4C,
	30522 - 19968: jis0208<<14 | 0x23<<7 | 0x0E,
	30524 - 19968: jis0208<<14 | 0x13<<7 | 0x42,
	30525 - 19968: jis0212<<14 | 0x2D<<7 | 0x4D,
	30526 - 19968: jis0212<<14 | 0x2D<<7 | 0x4E,
	30528 - 19968: jis0208<<14 | 0x22<<7 | 0x44,
	30530 - 19968: jis0212<<14 | 0x2D<<7 | 0x4F,
	30533 - 19968: jis0212<<14 | 0x2D<<7 | 0x50,
	30534 - 19968: jis0208<<14 | 0x5A<<7 | 0x1A,
	30535 - 19968: jis0208<<14 | 0x41<<7 | 0x28,
	30538 - 19968: jis0212<<14 | 0x2D<<7 | 0x52,
	30541 - 19968: jis0212<<14 | 0x2D<<7 | 0x53,
	30542 - 19968: jis0212<<14 | 0x2D<<7 | 0x54,
	30543 - 19968: jis0212<<14 | 0x2D<<7 | 0x55,
	30546 - 19968: jis0212<<14 | 0x2D<<7 | 0x56,
	30550 - 19968: jis0212<<14 | 0x2D<<7 | 0x57,
	30551 - 19968: jis0212<<14 | 0x2D<<7 | 0x58,
	30554 - 19968: jis0208<<14 | 0x41<<7 | 0x29,
	30555 - 19968: jis0208<<14 | 0x41<<7 | 0x2C,
	30556 - 19968: jis0212<<14 | 0x2D<<7 | 0x59,
	30558 - 19968: jis0212<<14 | 0x2D<<7 | 0x5A,
	30559 - 19968: jis0212<<14 | 0x2D<<7 | 0x5B,
	30560 - 19968: jis0212<<14 | 0x2D<<7 | 0x5C,
	30561 - 19968: jis0208<<14 | 0x1E<<7 | 0x46,
	30562 - 19968: jis0212<<14 | 0x2D<<7 | 0x5D,
	30563 - 19968: jis0208<<14 | 0x25<<7 | 0x23,
	30564 - 19968: jis0212<<14 | 0x2E<<7 | 0x00,
	30565 - 19968: jis0208<<14 | 0x41<<7 | 0x2D,
	30566 - 19968: jis0208<<14 | 0x2A<<7 | 0x32,
	30567 - 19968: jis0212<<14 | 0x2E<<7 | 0x01,
	30568 - 19968: jis0208<<14 | 0x41<<7 | 0x2A,
	30570 - 19968: jis0212<<14 | 0x2E<<7 | 0x02,
	30571 - 19968: jis0208<<14 | 0x41<<7 | 0x2B,
	30572 - 19968: jis0212<<14 | 0x2E<<7 | 0x03,
	30576 - 19968: jis0212<<14 | 0x2E<<7 | 0x04,
	30578 - 19968: jis0212<<14 | 0x2E<<7 | 0x05,
	30579 - 19968: jis0212<<14 | 0x2E<<7 | 0x06,
	30580 - 19968: jis0212<<14 | 0x2E<<7 | 0x07,
	30585 - 19968: jis0208<<14 | 0x41<<7 | 0x30,
	30586 - 19968: jis0212<<14 | 0x2E<<7 | 0x08,
	30589 - 19968: jis0212<<14 | 0x2E<<7 | 0x09,
	30590 - 19968: jis0208<<14 | 0x41<<7 | 0x2F,
	30591 - 19968: jis0208<<14 | 0x41<<7 | 0x2E,
	30592 - 19968: jis0212<<14 | 0x2E<<7 | 0x0A,
	30596 - 19968: jis0212<<14 | 0x2E<<7 | 0x0B,
	30603 - 19968: jis0208<<14 | 0x41<<7 | 0x32,
	30604 - 19968: jis0212<<14 | 0x2E<<7 | 0x0C,
	30605 - 19968: jis0212<<14 | 0x2E<<7 | 0x0D,
	30606 - 19968: jis0208<<14 | 0x41<<7 | 0x31,
	30609 - 19968: jis0208<<14 | 0x41<<7 | 0x33,
	30612 - 19968: jis0212<<14 | 0x2E<<7 | 0x0E,
	30613 - 19968: jis0212<<14 | 0x2E<<7 | 0x0F,
	30614 - 19968: jis0212<<14 | 0x2E<<7 | 0x10,
	30618 - 19968: jis0212<<14 | 0x2E<<7 | 0x11,
	30622 - 19968: jis0208<<14 | 0x41<<7 | 0x35,
	30623 - 19968: jis0212<<14 | 0x2E<<7 | 0x12,
	30624 - 19968: jis0208<<14 | 0x41<<7 | 0x34,
	30626 - 19968: jis0212<<14 | 0x2E<<7 | 0x13,
	30629 - 19968: jis0208<<14 | 0x29<<7 | 0x2C,
	30631 - 19968: jis0212<<14 | 0x2E<<7 | 0x14,
	30634 - 19968: jis0212<<14 | 0x2E<<7 | 0x15,
	30636 - 19968: jis0208<<14 | 0x1C<<7 | 0x35,
	30637 - 19968: jis0208<<14 | 0x2D<<7 | 0x25,
	30638 - 19968: jis0212<<14 | 0x2E<<7 | 0x16,
	30639 - 19968: jis0212<<14 | 0x2E<<7 | 0x17,
	30640 - 19968: jis0208<<14 | 0x41<<7 | 0x36,
	30641 - 19968: jis0212<<14 | 0x2E<<7 | 0x18,
	30643 - 19968: jis0208<<14 | 0x25<<7 | 0x16,
	30645 - 19968: jis0212<<14 | 0x2E<<7 | 0x19,
	30646 - 19968: jis0208<<14 | 0x41<<7 | 0x37,
	30649 - 19968: jis0208<<14 | 0x41<<7 | 0x38,
	30651 - 19968: jis0208<<14 | 0x41<<7 | 0x3C,
	30652 - 19968: jis0208<<14 | 0x41<<7 | 0x3A,
	30653 - 19968: jis0208<<14 | 0x41<<7 | 0x3B,
	30654 - 19968: jis0212<<14 | 0x2E<<7 | 0x1A,
	30655 - 19968: jis0208<<14 | 0x41<<7 | 0x39,
	30659 - 19968: jis0212<<14 | 0x2E<<7 | 0x1B,
	30663 - 19968: jis0208<<14 | 0x41<<7 | 0x3D,
	30665 - 19968: jis0212<<14 | 0x2E<<7 | 0x1C,
	30669 - 19968: jis0208<<14 | 0x41<<7 | 0x3E,
	30673 - 19968: jis0212<<14 | 0x2E<<7 | 0x1D,
	30674 - 19968: jis0212<<14 | 0x2E<<7 | 0x1E,
	30677 - 19968: jis0212<<14 | 0x2E<<7 | 0x1F,
	30679 - 19968: jis0208<<14 | 0x41<<7 | 0x3F,
	30681 - 19968: jis0212<<14 | 0x2E<<7 | 0x20,
	30682 - 19968: jis0208<<14 | 0x41<<7 | 0x40,
	30683 - 19968: jis0208<<14 | 0x2B<<7 | 0x16,
	30684 - 19968: jis0208<<14 | 0x41<<7 | 0x41,
	30686 - 19968: jis0212<<14 | 0x2E<<7 | 0x21,
	30687 - 19968: jis0212<<14 | 0x2E<<7 | 0x22,
	30688 - 19968: jis0212<<14 | 0x2E<<7 | 0x23,
	30690 - 19968: jis0208<<14 | 0x2B<<7 | 0x4F,
	30691 - 19968: jis0208<<14 | 0x41<<7 | 0x42,
	30692 - 19968: jis0212<<14 | 0x2E<<7 | 0x24,
	30693 - 19968: jis0208<<14 | 0x22<<7 | 0x2D,
	30694 - 19968: jis0212<<14 | 0x2E<<7 | 0x25,
	30695 - 19968: jis0208<<14 | 0x26<<7 | 0x49,
	30697 - 19968: jis0208<<14 | 0x15<<7 | 0x4A,
	30698 - 19968: jis0212<<14 | 0x2E<<7 | 0x26,
	30700 - 19968: jis0212<<14 | 0x2E<<7 | 0x27,
	30701 - 19968: jis0208<<14 | 0x22<<7 | 0x1A,
	30702 - 19968: jis0208<<14 | 0x41<<7 | 0x43,
	30703 - 19968: jis0208<<14 | 0x15<<7 | 0x19,
	30704 - 19968: jis0212<<14 | 0x2E<<7 | 0x28,
	30705 - 19968: jis0212<<14 | 0x2E<<7 | 0x29,
	30707 - 19968: jis0208<<14 | 0x1F<<7 | 0x2F,
	30708 - 19968: jis0212<<14 | 0x2E<<7 | 0x2A,
	30712 - 19968: jis0212<<14 | 0x2E<<7 | 0x2B,
	30715 - 19968: jis0212<<14 | 0x2E<<7 | 0x2C,
	30716 - 19968: jis0208<<14 | 0x41<<7 | 0x44,
	30722 - 19968: jis0208<<14 | 0x19<<7 | 0x1C,
	30725 - 19968: jis0212<<14 | 0x2E<<7 | 0x2D,
	30726 - 19968: jis0212<<14 | 0x2E<<7 | 0x2E,
	30729 - 19968: jis0212<<14 | 0x2E<<7 | 0x2F,
	30732 - 19968: jis0208<<14 | 0x41<<7 | 0x45,
	30733 - 19968: jis0212<<14 | 0x2E<<7 | 0x30,
	30734 - 19968: jis0212<<14 | 0x2E<<7 | 0x31,
	30737 - 19968: jis0212<<14 | 0x2E<<7 | 0x32,
	30738 - 19968: jis0208<<14 | 0x41<<7 | 0x46,
	30740 - 19968: jis0208<<14 | 0x17<<7 | 0x05,
	30741 - 19968: jis0208<<14 | 0x19<<7 | 0x34,
	30749 - 19968: jis0212<<14 | 0x2E<<7 | 0x33,
	30752 - 19968: jis0208<<14 | 0x41<<7 | 0x48,
	30753 - 19968: jis0208<<14 | 0x5A<<7 | 0x1C,
	30754 - 19968: jis0212<<14 | 0x2E<<7 | 0x35,
	30755 - 19968: jis0212<<14 | 0x2E<<7 | 0x36,
	30757 - 19968: jis0208<<14 | 0x24<<7 | 0x35,
	30758 - 19968: jis0208<<14 | 0x19<<7 | 0x35,
	30759 - 19968: jis0208<<14 | 0x14<<7 | 0x2D,
	30765 - 19968: jis0212<<14 | 0x2E<<7 | 0x37,
	30766 - 19968: jis0212<<14 | 0x2E<<7 | 0x38,
	30768 - 19968: jis0212<<14 | 0x2E<<7 | 0x39,
	30770 - 19968: jis0208<<14 | 0x2A<<7 | 0x03,
	30772 - 19968: jis0208<<14 | 0x26<<7 | 0x2A,
	30773 - 19968: jis0212<<14 | 0x2E<<7 | 0x3A,
	30775 - 19968: jis0212<<14 | 0x2E<<7 | 0x3B,
	30778 - 19968: jis0208<<14 | 0x24<<7 | 0x36,
	30783 - 19968: jis0208<<14 | 0x18<<7 | 0x3B,
	30787 - 19968: jis0212<<14 | 0x2E<<7 | 0x3C,
	30788 - 19968: jis0212<<14 | 0x2E<<7 | 0x3D,
	30789 - 19968: jis0208<<14 | 0x41<<7 | 0x4A,
	30791 - 19968: jis0212<<14 | 0x2E<<7 | 0x3E,
	30792 - 19968: jis0212<<14 | 0x2E<<7 | 0x3F,
	30796 - 19968: jis0212<<14 | 0x2E<<7 | 0x40,
	30798 - 19968: jis0208<<14 | 0x5A<<7 | 0x1D,
	30802 - 19968: jis0212<<14 | 0x2E<<7 | 0x42,
	30812 - 19968: jis0212<<14 | 0x2E<<7 | 0x43,
	30813 - 19968: jis0208<<14 | 0x1D<<7 | 0x2A,
	30814 - 19968: jis0212<<14 | 0x2E<<7 | 0x44,
	30816 - 19968: jis0212<<14 | 0x2E<<7 | 0x45,
	30817 - 19968: jis0212<<14 | 0x2E<<7 | 0x46,
	30819 - 19968: jis0212<<14 | 0x2E<<7 | 0x47,
	30820 - 19968: jis0208<<14 | 0x5A<<7 | 0x1E,
	30824 - 19968: jis0212<<14 | 0x2E<<7 | 0x49,
	30826 - 19968: jis0212<<14 | 0x2E<<7 | 0x4A,
	30827 - 19968: jis0208<<14 | 0x2D<<7 | 0x11,
	30828 - 19968: jis0208<<14 | 0x18<<7 | 0x24,
	30830 - 19968: jis0212<<14 | 0x2E<<7 | 0x4B,
	30831 - 19968: jis0208<<14 | 0x17<<7 | 0x06,
	30834 - 19968: jis0208<<14 | 0x27<<7 | 0x02,
	30836 - 19968: jis0208<<14 | 0x41<<7 | 0x4C,
	30842 - 19968: jis0208<<14 | 0x5A<<7 | 0x1F,
	30844 - 19968: jis0208<<14 | 0x41<<7 | 0x4E,
	30846 - 19968: jis0212<<14 | 0x2E<<7 | 0x4D,
	30849 - 19968: jis0208<<14 | 0x17<<7 | 0x4A,
	30854 - 19968: jis0208<<14 | 0x41<<7 | 0x4D,
	30855 - 19968: jis0208<<14 | 0x23<<7 | 0x55,
	30858 - 19968: jis0212<<14 | 0x2E<<7 | 0x4E,
	30860 - 19968: jis0208<<14 | 0x41<<7 | 0x50,
	30861 - 19968: jis0208<<14 | 0x12<<7 | 0x16,
	30862 - 19968: jis0208<<14 | 0x41<<7 | 0x4B,
	30863 - 19968: jis0212<<14 | 0x2E<<7 | 0x4F,
	30865 - 19968: jis0208<<14 | 0x27<<7 | 0x49,
	30867 - 19968: jis0208<<14 | 0x10<<7 | 0x0F,
	30868 - 19968: jis0212<<14 | 0x2E<<7 | 0x50,
	30869 - 19968: jis0208<<14 | 0x19<<7 | 0x4B,
	30871 - 19968: jis0208<<14 | 0x2E<<7 | 0x31,
	30872 - 19968: jis0212<<14 | 0x2E<<7 | 0x51,
	30874 - 19968: jis0208<<14 | 0x41<<7 | 0x4F,
	30877 - 19968: jis0212<<14 | 0x2E<<7 | 0x53,
	30878 - 19968: jis0212<<14 | 0x2E<<7 | 0x54,
	30879 - 19968: jis0212<<14 | 0x2E<<7 | 0x55,
	30881 - 19968: jis0212<<14 | 0x2E<<7 | 0x52,
	30883 - 19968: jis0208<<14 | 0x41<<7 | 0x51,
	30884 - 19968: jis0212<<14 | 0x2E<<7 | 0x56,
	30887 - 19968: jis0208<<14 | 0x29<<7 | 0x2A,
	30888 - 19968: jis0212<<14 | 0x2E<<7 | 0x57,
	30889 - 19968: jis0208<<14 | 0x1F<<7 | 0x38,
	30890 - 19968: jis0208<<14 | 0x41<<7 | 0x53,
	30892 - 19968: jis0212<<14 | 0x2E<<7 | 0x58,
	30893 - 19968: jis0212<<14 | 0x2E<<7 | 0x59,
	30895 - 19968: jis0208<<14 | 0x41<<7 | 0x54,
	30896 - 19968: jis0212<<14 | 0x2E<<7 | 0x5A,
	30897 - 19968: jis0212<<14 | 0x2E<<7 | 0x5B,
	30898 - 19968: jis0212<<14 | 0x2E<<7 | 0x5C,
	30899 - 19968: jis0212<<14 | 0x2E<<7 | 0x5D,
	30901 - 19968: jis0208<<14 | 0x41<<7 | 0x52,
	30906 - 19968: jis0208<<14 | 0x12<<7 | 0x2D,
	30907 - 19968: jis0212<<14 | 0x2F<<7 | 0x00,
	30908 - 19968: jis0208<<14 | 0x41<<7 | 0x5A,
	30909 - 19968: jis0212<<14 | 0x2F<<7 | 0x01,
	30910 - 19968: jis0208<<14 | 0x41<<7 | 0x59,
	30911 - 19968: jis0212<<14 | 0x2F<<7 | 0x02,
	30913 - 19968: jis0208<<14 | 0x1B<<7 | 0x06,
	30917 - 19968: jis0208<<14 | 0x41<<7 | 0x5B,
	30918 - 19968: jis0208<<14 | 0x41<<7 | 0x56,
	30919 - 19968: jis0212<<14 | 0x2F<<7 | 0x03,
	30920 - 19968: jis0212<<14 | 0x2F<<7 | 0x04,
	30921 - 19968: jis0212<<14 | 0x2F<<7 | 0x05,
	30922 - 19968: jis0208<<14 | 0x41<<7 | 0x5C,
	30923 - 19968: jis0208<<14 | 0x41<<7 | 0x57,
	30924 - 19968: jis0212<<14 | 0x2F<<7 | 0x06,
	30926 - 19968: jis0212<<14 | 0x2F<<7 | 0x07,
	30928 - 19968: jis0208<<14 | 0x27<<7 | 0x37,
	30929 - 19968: jis0208<<14 | 0x41<<7 | 0x55,
	30930 - 19968: jis0212<<14 | 0x2F<<7 | 0x08,
	30931 - 19968: jis0212<<14 | 0x2F<<7 | 0x09,
	30932 - 19968: jis0208<<14 | 0x41<<7 | 0x58,
	30933 - 19968: jis0212<<14 | 0x2F<<7 | 0x0A,
	30934 - 19968: jis0212<<14 | 0x2F<<7 | 0x0B,
	30938 - 19968: jis0208<<14 | 0x42<<7 | 0x01,
	30939 - 19968: jis0212<<14 | 0x2F<<7 | 0x0D,
	30943 - 19968: jis0212<<14 | 0x2F<<7 | 0x0E,
	30944 - 19968: jis0212<<14 | 0x2F<<7 | 0x0F,
	30945 - 19968: jis0212<<14 | 0x2F<<7 | 0x10,
	30948 - 19968: jis0212<<14 | 0x2F<<7 | 0x0C,
	30950 - 19968: jis0212<<14 | 0x2F<<7 | 0x11,
	30951 - 19968: jis0208<<14 | 0x42<<7 | 0x00,
	30952 - 19968: jis0208<<14 | 0x2A<<7 | 0x40,
	30954 - 19968: jis0212<<14 | 0x2F<<7 | 0x12,
	30956 - 19968: jis0208<<14 | 0x41<<7 | 0x5D,
	30959 - 19968: jis0208<<14 | 0x0F<<7 | 0x4A,
	30962 - 19968: jis0212<<14 | 0x2F<<7 | 0x13,
	30963 - 19968: jis0212<<14 | 0x2F<<7 | 0x14,
	30964 - 19968: jis0208<<14 | 0x42<<7 | 0x03,
	30966 - 19968: jis0212<<14 | 0x2F<<7 | 0x16,
	30967 - 19968: jis0212<<14 | 0x2F<<7 | 0x17,
	30970 - 19968: jis0212<<14 | 0x2F<<7 | 0x18,
	30971 - 19968: jis0212<<14 | 0x2F<<7 | 0x19,
	30973 - 19968: jis0208<<14 | 0x42<<7 | 0x02,
	30975 - 19968: jis0212<<14 | 0x2F<<7 | 0x1A,
	30976 - 19968: jis0212<<14 | 0x2F<<7 | 0x15,
	30977 - 19968: jis0208<<14 | 0x1D<<7 | 0x2B,
	30982 - 19968: jis0212<<14 | 0x2F<<7 | 0x1B,
	30983 - 19968: jis0208<<14 | 0x42<<7 | 0x04,
	30988 - 19968: jis0212<<14 | 0x2F<<7 | 0x1C,
	30990 - 19968: jis0208<<14 | 0x20<<7 | 0x22,
	30992 - 19968: jis0212<<14 | 0x2F<<7 | 0x1D,
	30993 - 19968: jis0208<<14 | 0x42<<7 | 0x06,
	30994 - 19968: jis0208<<14 | 0x42<<7 | 0x05,
	31001 - 19968: jis0208<<14 | 0x42<<7 | 0x07,
	31002 - 19968: jis0212<<14 | 0x2F<<7 | 0x1E,
	31004 - 19968: jis0212<<14 | 0x2F<<7 | 0x1F,
	31006 - 19968: jis0212<<14 | 0x2F<<7 | 0x20,
	31007 - 19968: jis0212<<14 | 0x2F<<7 | 0x21,
	31008 - 19968: jis0212<<14 | 0x2F<<7 | 0x22,
	31013 - 19968: jis0212<<14 | 0x2F<<7 | 0x23,
	31014 - 19968: jis0208<<14 | 0x41<<7 | 0x47,
	31015 - 19968: jis0212<<14 | 0x2F<<7 | 0x24,
	31017 - 19968: jis0212<<14 | 0x2F<<7 | 0x25,
	31018 - 19968: jis0208<<14 | 0x41<<7 | 0x49,
	31019 - 19968: jis0208<<14 | 0x42<<7 | 0x09,
	31020 - 19968: jis0208<<14 | 0x42<<7 | 0x08,
	31021 - 19968: jis0212<<14 | 0x2F<<7 | 0x26,
	31024 - 19968: jis0208<<14 | 0x5A<<7 | 0x20,
	31025 - 19968: jis0212<<14 | 0x2F<<7 | 0x27,
	31028 - 19968: jis0212<<14 | 0x2F<<7 | 0x28,
	31029 - 19968: jis0212<<14 | 0x2F<<7 | 0x29,
	31034 - 19968: jis0208<<14 | 0x1B<<7 | 0x07,
	31035 - 19968: jis0212<<14 | 0x2F<<7 | 0x2A,
	31036 - 19968: jis0208<<14 | 0x2D<<7 | 0x48,
	31037 - 19968: jis0212<<14 | 0x2F<<7 | 0x2B,
	31038 - 19968: jis0208<<14 | 0x1B<<7 | 0x31,
	31039 - 19968: jis0212<<14 | 0x2F<<7 | 0x2C,
	31040 - 19968: jis0208<<14 | 0x42<<7 | 0x0A,
	31041 - 19968: jis0208<<14 | 0x16<<7 | 0x16,
	31044 - 19968: jis0212<<14 | 0x2F<<7 | 0x2D,
	31045 - 19968: jis0212<<14 | 0x2F<<7 | 0x2E,
	31046 - 19968: jis0212<<14 | 0x2F<<7 | 0x2F,
	31047 - 19968: jis0208<<14 | 0x14<<7 | 0x1F,
	31048 - 19968: jis0208<<14 | 0x14<<7 | 0x06,
	31049 - 19968: jis0208<<14 | 0x1A<<7 | 0x42,
	31050 - 19968: jis0212<<14 | 0x2F<<7 | 0x30,
	31051 - 19968: jis0212<<14 | 0x2F<<7 | 0x31,
	31055 - 19968: jis0212<<14 | 0x2F<<7 | 0x32,
	31056 - 19968: jis0208<<14 | 0x2C<<7 | 0x13,
	31057 - 19968: jis0212<<14 | 0x2F<<7 | 0x33,
	31059 - 19968: jis0208<<14 | 0x42<<7 | 0x10,
	31060 - 19968: jis0212<<14 | 0x2F<<7 | 0x34,
	31061 - 19968: jis0208<<14 | 0x42<<7 | 0x0F,
	31062 - 19968: jis0208<<14 | 0x20<<7 | 0x23,
	31063 - 19968: jis0208<<14 | 0x42<<7 | 0x0C,
	31064 - 19968: jis0212<<14 | 0x2F<<7 | 0x35,
	31066 - 19968: jis0208<<14 | 0x42<<7 | 0x0E,
	31067 - 19968: jis0212<<14 | 0x2F<<7 | 0x36,
	31068 - 19968: jis0212<<14 | 0x2F<<7 | 0x37,
	31069 - 19968: jis0208<<14 | 0x1C<<7 | 0x2A,
	31070 - 19968: jis0208<<14 | 0x1E<<7 | 0x1F,
	31071 - 19968: jis0208<<14 | 0x42<<7 | 0x0D,
	31072 - 19968: jis0208<<14 | 0x42<<7 | 0x0B,
	31074 - 19968: jis0208<<14 | 0x26<<7 | 0x09,
	31077 - 19968: jis0208<<14 | 0x1D<<7 | 0x2C,
	31079 - 19968: jis0212<<14 | 0x2F<<7 | 0x38,
	31080 - 19968: jis0208<<14 | 0x28<<7 | 0x1B,
	31081 - 19968: jis0212<<14 | 0x2F<<7 | 0x39,
	31083 - 19968: jis0212<<14 | 0x2F<<7 | 0x3A,
	31085 - 19968: jis0208<<14 | 0x19<<7 | 0x36,
	31090 - 19968: jis0212<<14 | 0x2F<<7 | 0x3B,
	31095 - 19968: jis0208<<14 | 0x24<<7 | 0x57,
	31097 - 19968: jis0212<<14 | 0x2F<<7 | 0x3C,
	31098 - 19968: jis0208<<14 | 0x42<<7 | 0x11,
	31099 - 19968: jis0212<<14 | 0x2F<<7 | 0x3D,
	31100 - 19968: jis0212<<14 | 0x2F<<7 | 0x3E,
	31102 - 19968: jis0212<<14 | 0x2F<<7 | 0x3F,
	31103 - 19968: jis0208<<14 | 0x42<<7 | 0x12,
	31104 - 19968: jis0208<<14 | 0x42<<7 | 0x28,
	31105 - 19968: jis0208<<14 | 0x15<<7 | 0x37,
	31108 - 19968: jis0208<<14 | 0x2E<<7 | 0x1C,
	31109 - 19968: jis0208<<14 | 0x20<<7 | 0x14,
	31114 - 19968: jis0208<<14 | 0x42<<7 | 0x13,
	31115 - 19968: jis0212<<14 | 0x2F<<7 | 0x40,
	31116 - 19968: jis0212<<14 | 0x2F<<7 | 0x41,
	31117 - 19968: jis0208<<14 | 0x11<<7 | 0x31,
	31118 - 19968: jis0208<<14 | 0x23<<7 | 0x56,
	31119 - 19968: jis0208<<14 | 0x29<<7 | 0x00,
	31121 - 19968: jis0212<<14 | 0x2F<<7 | 0x42,
	31123 - 19968: jis0212<<14 | 0x2F<<7 | 0x43,
	31124 - 19968: jis0208<<14 | 0x5A<<7 | 0x24,
	31125 - 19968: jis0212<<14 | 0x2F<<7 | 0x45,
	31126 - 19968: jis0212<<14 | 0x2F<<7 | 0x46,
	31128 - 19968: jis0212<<14 | 0x2F<<7 | 0x47,
	31131 - 19968: jis0208<<14 | 0x5A<<7 | 0x26,
	31132 - 19968: jis0212<<14 | 0x2F<<7 | 0x49,
	31133 - 19968: jis0208<<14 | 0x42<<7 | 0x14,
	31137 - 19968: jis0212<<14 | 0x2F<<7 | 0x4A,
	31142 - 19968: jis0208<<14 | 0x14<<7 | 0x59,
	31143 - 19968: jis0208<<14 | 0x42<<7 | 0x15,
	31144 - 19968: jis0212<<14 | 0x2F<<7 | 0x4B,
	31145 - 19968: jis0212<<14 | 0x2F<<7 | 0x4C,
	31146 - 19968: jis0208<<14 | 0x42<<7 | 0x17,
	31147 - 19968: jis0212<<14 | 0x2F<<7 | 0x4D,
	31150 - 19968: jis0208<<14 | 0x42<<7 | 0x18,
	31151 - 19968: jis0212<<14 | 0x2F<<7 | 0x4E,
	31152 - 19968: jis0208<<14 | 0x26<<7 | 0x08,
	31153 - 19968: jis0212<<14 | 0x2F<<7 | 0x4F,
	31155 - 19968: jis0208<<14 | 0x42<<7 | 0x19,
	31156 - 19968: jis0212<<14 | 0x2F<<7 | 0x50,
	31160 - 19968: jis0212<<14 | 0x2F<<7 | 0x51,
	31161 - 19968: jis0208<<14 | 0x42<<7 | 0x1A,
	31162 - 19968: jis0208<<14 | 0x42<<7 | 0x1B,
	31163 - 19968: jis0212<<14 | 0x2F<<7 | 0x52,
	31165 - 19968: jis0208<<14 | 0x15<<7 | 0x38,
	31166 - 19968: jis0208<<14 | 0x11<<7 | 0x32,
	31167 - 19968: jis0208<<14 | 0x25<<7 | 0x24,
	31168 - 19968: jis0208<<14 | 0x1C<<7 | 0x07,
	31169 - 19968: jis0208<<14 | 0x1A<<7 | 0x43,
	31170 - 19968: jis0212<<14 | 0x2F<<7 | 0x53,
	31172 - 19968: jis0212<<14 | 0x2F<<7 | 0x54,
	31175 - 19968: jis0212<<14 | 0x2F<<7 | 0x55,
	31176 - 19968: jis0212<<14 | 0x2F<<7 | 0x56,
	31177 - 19968: jis0208<<14 | 0x42<<7 | 0x1C,
	31178 - 19968: jis0212<<14 | 0x2F<<7 | 0x57,
	31179 - 19968: jis0208<<14 | 0x1C<<7 | 0x08,
	31183 - 19968: jis0212<<14 | 0x2F<<7 | 0x58,
	31185 - 19968: jis0208<<14 | 0x11<<7 | 0x29,
	31186 - 19968: jis0208<<14 | 0x28<<7 | 0x22,
	31188 - 19968: jis0212<<14 | 0x2F<<7 | 0x59,
	31189 - 19968: jis0208<<14 | 0x42<<7 | 0x1D,
	31190 - 19968: jis0212<<14 | 0x2F<<7 | 0x5A,
	31192 - 19968: jis0208<<14 | 0x27<<7 | 0x4A,
	31194 - 19968: jis0212<<14 | 0x2F<<7 | 0x5B,
	31197 - 19968: jis0212<<14 | 0x2F<<7 | 0x5C,
	31198 - 19968: jis0212<<14 | 0x2F<<7 | 0x5D,
	31199 - 19968: jis0208<<14 | 0x20<<7 | 0x24,
	31200 - 19968: jis0212<<14 | 0x30<<7 | 0x00,
	31201 - 19968: jis0208<<14 | 0x42<<7 | 0x20,
	31202 - 19968: jis0212<<14 | 0x30<<7 | 0x01,
	31203 - 19968: jis0208<<14 | 0x42<<7 | 0x21,
	31204 - 19968: jis0208<<14 | 0x26<<7 | 0x48,
	31205 - 19968: jis0212<<14 | 0x30<<7 | 0x02,
	31206 - 19968: jis0208<<14 | 0x1E<<7 | 0x20,
	31207 - 19968: jis0208<<14 | 0x42<<7 | 0x1E,
	31209 - 19968: jis0208<<14 | 0x22<<7 | 0x40,
	31210 - 19968: jis0212<<14 | 0x30<<7 | 0x03,
	31211 - 19968: jis0212<<14 | 0x30<<7 | 0x04,
	31212 - 19968: jis0208<<14 | 0x42<<7 | 0x1F,
	31213 - 19968: jis0212<<14 | 0x30<<7 | 0x05,
	31216 - 19968: jis0208<<14 | 0x1D<<7 | 0x2D,
	31217 - 19968: jis0212<<14 | 0x30<<7 | 0x06,
	31224 - 19968: jis0212<<14 | 0x30<<7 | 0x07,
	31227 - 19968: jis0208<<14 | 0x0F<<7 | 0x3B,
	31228 - 19968: jis0212<<14 | 0x30<<7 | 0x08,
	31232 - 19968: jis0208<<14 | 0x14<<7 | 0x08,
	31234 - 19968: jis0212<<14 | 0x30<<7 | 0x09,
	31235 - 19968: jis0212<<14 | 0x30<<7 | 0x0A,
	31239 - 19968: jis0212<<14 | 0x30<<7 | 0x0B,
	31240 - 19968: jis0208<<14 | 0x42<<7 | 0x22,
	31241 - 19968: jis0212<<14 | 0x30<<7 | 0x0C,
	31242 - 19968: jis0212<<14 | 0x30<<7 | 0x0D,
	31243 - 19968: jis0208<<14 | 0x23<<7 | 0x57,
	31244 - 19968: jis0212<<14 | 0x30<<7 | 0x0E,
	31245 - 19968: jis0208<<14 | 0x42<<7 | 0x23,
	31246 - 19968: jis0208<<14 | 0x1F<<7 | 0x26,
	31249 - 19968: jis0212<<14 | 0x30<<7 | 0x0F,
	31252 - 19968: jis0208<<14 | 0x2B<<7 | 0x0C,
	31253 - 19968: jis0212<<14 | 0x30<<7 | 0x10,
	31255 - 19968: jis0208<<14 | 0x28<<7 | 0x02,
	31256 - 19968: jis0208<<14 | 0x42<<7 | 0x24,
	31257 - 19968: jis0208<<14 | 0x42<<7 | 0x25,
	31258 - 19968: jis0208<<14 | 0x22<<7 | 0x34,
	31259 - 19968: jis0212<<14 | 0x30<<7 | 0x11,
	31260 - 19968: jis0208<<14 | 0x2D<<7 | 0x26,
	31262 - 19968: jis0212<<14 | 0x30<<7 | 0x12,
	31263 - 19968: jis0208<<14 | 0x42<<7 | 0x27,
	31264 - 19968: jis0208<<14 | 0x42<<7 | 0x26,
	31265 - 19968: jis0212<<14 | 0x30<<7 | 0x13,
	31271 - 19968: jis0212<<14 | 0x30<<7 | 0x14,
	31275 - 19968: jis0212<<14 | 0x30<<7 | 0x15,
	31277 - 19968: jis0212<<14 | 0x30<<7 | 0x16,
	31278 - 19968: jis0208<<14 | 0x1B<<7 | 0x4E,
	31279 - 19968: jis0212<<14 | 0x30<<7 | 0x17,
	31280 - 19968: jis0212<<14 | 0x30<<7 | 0x18,
	31281 - 19968: jis0208<<14 | 0x42<<7 | 0x29,
	31282 - 19968: jis0208<<14 | 0x0F<<7 | 0x4F,
	31284 - 19968: jis0212<<14 | 0x30<<7 | 0x19,
	31285 - 19968: jis0212<<14 | 0x30<<7 | 0x1A,
	31287 - 19968: jis0208<<14 | 0x42<<7 | 0x2C,
	31288 - 19968: jis0212<<14 | 0x30<<7 | 0x1B,
	31289 - 19968: jis0212<<14 | 0x30<<7 | 0x1C,
	31290 - 19968: jis0212<<14 | 0x30<<7 | 0x1D,
	31291 - 19968: jis0208<<14 | 0x42<<7 | 0x2A,
	31292 - 19968: jis0208<<14 | 0x11<<7 | 0x33,
	31293 - 19968: jis0208<<14 | 0x16<<7 | 0x2D,
	31294 - 19968: jis0208<<14 | 0x42<<7 | 0x2B,
	31295 - 19968: jis0208<<14 | 0x18<<7 | 0x25,
	31296 - 19968: jis0208<<14 | 0x18<<7 | 0x51,
	31298 - 19968: jis0208<<14 | 0x29<<7 | 0x45,
	31299 - 19968: jis0208<<14 | 0x42<<7 | 0x2D,
	31300 - 19968: jis0212<<14 | 0x30<<7 | 0x1E,
	31301 - 19968: jis0212<<14 | 0x30<<7 | 0x1F,
	31302 - 19968: jis0208<<14 | 0x2A<<7 | 0x33,
	31303 - 19968: jis0212<<14 | 0x30<<7 | 0x20,
	31304 - 19968: jis0212<<14 | 0x30<<7 | 0x21,
	31305 - 19968: jis0208<<14 | 0x42<<7 | 0x2F,
	31308 - 19968: jis0212<<14 | 0x30<<7 | 0x22,
	31309 - 19968: jis0208<<14 | 0x1F<<7 | 0x30,
	31310 - 19968: jis0208<<14 | 0x10<<7 | 0x2E,
	31311 - 19968: jis0208<<14 | 0x11<<7 | 0x19,
	31312 - 19968: jis0208<<14 | 0x0F<<7 | 0x0B,
	31317 - 19968: jis0212<<14 | 0x30<<7 | 0x23,
	31318 - 19968: jis0212<<14 | 0x30<<7 | 0x24,
	31319 - 19968: jis0208<<14 | 0x42<<7 | 0x2E,
	31321 - 19968: jis0212<<14 | 0x30<<7 | 0x25,
	31324 - 19968: jis0212<<14 | 0x30<<7 | 0x26,
	31325 - 19968: jis0212<<14 | 0x30<<7 | 0x27,
	31327 - 19968: jis0212<<14 | 0x30<<7 | 0x28,
	31328 - 19968: jis0212<<14 | 0x30<<7 | 0x29,
	31329 - 19968: jis0208<<14 | 0x42<<7 | 0x30,
	31330 - 19968: jis0208<<14 | 0x42<<7 | 0x31,
	31331 - 19968: jis0208<<14 | 0x1D<<7 | 0x56,
	31333 - 19968: jis0212<<14 | 0x30<<7 | 0x2A,
	31335 - 19968: jis0212<<14 | 0x30<<7 | 0x2B,
	31337 - 19968: jis0208<<14 | 0x42<<7 | 0x32,
	31338 - 19968: jis0212<<14 | 0x30<<7 | 0x2C,
	31339 - 19968: jis0208<<14 | 0x12<<7 | 0x2E,
	31341 - 19968: jis0212<<14 | 0x30<<7 | 0x2D,
	31344 - 19968: jis0208<<14 | 0x42<<7 | 0x34,
	31348 - 19968: jis0208<<14 | 0x16<<7 | 0x49,
	31349 - 19968: jis0212<<14 | 0x30<<7 | 0x2E,
	31350 - 19968: jis0208<<14 | 0x14<<7 | 0x45,
	31352 - 19968: jis0212<<14 | 0x30<<7 | 0x2F,
	31353 - 19968: jis0208<<14 | 0x42<<7 | 0x35,
	31354 - 19968: jis0208<<14 | 0x15<<7 | 0x54,
	31357 - 19968: jis0208<<14 | 0x42<<7 | 0x36,
	31358 - 19968: jis0212<<14 | 0x30<<7 | 0x30,
	31359 - 19968: jis0208<<14 | 0x1F<<7 | 0x5B,
	31360 - 19968: jis0212<<14 | 0x30<<7 | 0x31,
	31361 - 19968: jis0208<<14 | 0x25<<7 | 0x2C,
	31362 - 19968: jis0212<<14 | 0x30<<7 | 0x32,
	31363 - 19968: jis0208<<14 | 0x1F<<7 | 0x3F,
	31364 - 19968: jis0208<<14 | 0x19<<7 | 0x54,
	31365 - 19968: jis0212<<14 | 0x30<<7 | 0x33,
	31366 - 19968: jis0212<<14 | 0x30<<7 | 0x34,
	31368 - 19968: jis0208<<14 | 0x42<<7 | 0x37,
	31370 - 19968: jis0212<<14 | 0x30<<7 | 0x35,
	31371 - 19968: jis0212<<14 | 0x30<<7 | 0x36,
	31376 - 19968: jis0212<<14 | 0x30<<7 | 0x37,
	31377 - 19968: jis0212<<14 | 0x30<<7 | 0x38,
	31378 - 19968: jis0208<<14 | 0x22<<7 | 0x41,
	31379 - 19968: jis0208<<14 | 0x20<<7 | 0x4A,
	31380 - 19968: jis0212<<14 | 0x30<<7 | 0x39,
	31381 - 19968: jis0208<<14 | 0x42<<7 | 0x39,
	31382 - 19968: jis0208<<14 | 0x42<<7 | 0x3B,
	31383 - 19968: jis0208<<14 | 0x42<<7 | 0x38,
	31384 - 19968: jis0208<<14 | 0x42<<7 | 0x3A,
	31390 - 19968: jis0212<<14 | 0x30<<7 | 0x3A,
	31391 - 19968: jis0208<<14 | 0x16<<7 | 0x01,
	31392 - 19968: jis0212<<14 | 0x30<<7 | 0x3B,
	31395 - 19968: jis0212<<14 | 0x30<<7 | 0x3C,
	31401 - 19968: jis0208<<14 | 0x42<<7 | 0x3C,
	31402 - 19968: jis0208<<14 | 0x16<<7 | 0x05,
	31404 - 19968: jis0212<<14 | 0x30<<7 | 0x3D,
	31406 - 19968: jis0208<<14 | 0x14<<7 | 0x46,
	31407 - 19968: jis0208<<14 | 0x2C<<7 | 0x31,
	31408 - 19968: jis0208<<14 | 0x42<<7 | 0x3E,
	31411 - 19968: jis0212<<14 | 0x30<<7 | 0x3E,
	31413 - 19968: jis0212<<14 | 0x30<<7 | 0x3F,
	31414 - 19968: jis0208<<14 | 0x42<<7 | 0x3F,
	31417 - 19968: jis0212<<14 | 0x30<<7 | 0x40,
	31418 - 19968: jis0208<<14 | 0x10<<7 | 0x0D,
	31419 - 19968: jis0212<<14 | 0x30<<7 | 0x41,
	31420 - 19968: jis0212<<14 | 0x30<<7 | 0x42,
	31423 - 19968: jis0208<<14 | 0x42<<7 | 0x42,
	31427 - 19968: jis0208<<14 | 0x12<<7 | 0x55,
	31428 - 19968: jis0208<<14 | 0x42<<7 | 0x41,
	31429 - 19968: jis0208<<14 | 0x42<<7 | 0x40,
	31430 - 19968: jis0212<<14 | 0x30<<7 | 0x43,
	31431 - 19968: jis0208<<14 | 0x42<<7 | 0x44,
	31432 - 19968: jis0208<<14 | 0x42<<7 | 0x3D,
	31433 - 19968: jis0212<<14 | 0x30<<7 | 0x44,
	31434 - 19968: jis0208<<14 | 0x42<<7 | 0x45,
	31435 - 19968: jis0208<<14 | 0x2D<<7 | 0x08,
	31436 - 19968: jis0212<<14 | 0x30<<7 | 0x45,
	31437 - 19968: jis0208<<14 | 0x42<<7 | 0x46,
	31438 - 19968: jis0212<<14 | 0x30<<7 | 0x46,
	31439 - 19968: jis0208<<14 | 0x42<<7 | 0x47,
	31441 - 19968: jis0208<<14 | 0x5A<<7 | 0x27,
	31442 - 19968: jis0208<<14 | 0x33<<7 | 0x53,
	31443 - 19968: jis0208<<14 | 0x42<<7 | 0x49,
	31445 - 19968: jis0208<<14 | 0x42<<7 | 0x48,
	31449 - 19968: jis0208<<14 | 0x42<<7 | 0x4A,
	31450 - 19968: jis0208<<14 | 0x42<<7 | 0x4B,
	31451 - 19968: jis0212<<14 | 0x30<<7 | 0x48,
	31452 - 19968: jis0208<<14 | 0x2D<<7 | 0x14,
	31453 - 19968: jis0208<<14 | 0x42<<7 | 0x4C,
	31455 - 19968: jis0208<<14 | 0x4F<<7 | 0x4E,
	31456 - 19968: jis0208<<14 | 0x1D<<7 | 0x2E,
	31457 - 19968: jis0208<<14 | 0x42<<7 | 0x4D,
	31458 - 19968: jis0208<<14 | 0x42<<7 | 0x4E,
	31459 - 19968: jis0208<<14 | 0x1C<<7 | 0x36,
	31461 - 19968: jis0208<<14 | 0x25<<7 | 0x17,
	31462 - 19968: jis0208<<14 | 0x42<<7 | 0x4F,
	31463 - 19968: jis0208<<14 | 0x5A<<7 | 0x28,
	31464 - 19968: jis0212<<14 | 0x30<<7 | 0x49,
	31465 - 19968: jis0212<<14 | 0x30<<7 | 0x4A,
	31466 - 19968: jis0208<<14 | 0x22<<7 | 0x07,
	31467 - 19968: jis0208<<14 | 0x5A<<7 | 0x2A,
	31468 - 19968: jis0212<<14 | 0x30<<7 | 0x4C,
	31469 - 19968: jis0208<<14 | 0x42<<7 | 0x50,
	31471 - 19968: jis0208<<14 | 0x22<<7 | 0x1B,
	31472 - 19968: jis0208<<14 | 0x42<<7 | 0x51,
	31473 - 19968: jis0212<<14 | 0x30<<7 | 0x4D,
	31476 - 19968: jis0212<<14 | 0x30<<7 | 0x4E,
	31478 - 19968: jis0208<<14 | 0x15<<7 | 0x04,
	31480 - 19968: jis0208<<14 | 0x30<<7 | 0x1E,
	31481 - 19968: jis0208<<14 | 0x22<<7 | 0x3C,
	31482 - 19968: jis0208<<14 | 0x1B<<7 | 0x12,
	31483 - 19968: jis0212<<14 | 0x30<<7 | 0x4F,
	31485 - 19968: jis0212<<14 | 0x30<<7 | 0x50,
	31486 - 19968: jis0212<<14 | 0x30<<7 | 0x51,
	31487 - 19968: jis0208<<14 | 0x13<<7 | 0x27,
	31490 - 19968: jis0208<<14 | 0x42<<7 | 0x52,
	31492 - 19968: jis0208<<14 | 0x43<<7 | 0x01,
	31494 - 19968: jis0208<<14 | 0x42<<7 | 0x55,
	31495 - 19968: jis0212<<14 | 0x30<<7 | 0x52,
	31496 - 19968: jis0208<<14 | 0x14<<7 | 0x47,
	31498 - 19968: jis0208<<14 | 0x42<<7 | 0x54,
	31499 - 19968: jis0208<<14 | 0x43<<7 | 0x03,
	31503 - 19968: jis0208<<14 | 0x42<<7 | 0x53,
	31505 - 19968: jis0208<<14 | 0x1D<<7 | 0x2F,
	31508 - 19968: jis0212<<14 | 0x30<<7 | 0x53,
	31512 - 19968: jis0208<<14 | 0x42<<7 | 0x57,
	31513 - 19968: jis0208<<14 | 0x42<<7 | 0x58,
	31515 - 19968: jis0208<<14 | 0x24<<7 | 0x0A,
	31518 - 19968: jis0208<<14 | 0x42<<7 | 0x59,
	31519 - 19968: jis0212<<14 | 0x30<<7 | 0x54,
	31520 - 19968: jis0208<<14 | 0x12<<7 | 0x3D,
	31523 - 19968: jis0212<<14 | 0x30<<7 | 0x55,
	31525 - 19968: jis0208<<14 | 0x1E<<7 | 0x39,
	31526 - 19968: jis0208<<14 | 0x28<<7 | 0x43,
	31527 - 19968: jis0212<<14 | 0x30<<7 | 0x56,
	31528 - 19968: jis0208<<14 | 0x42<<7 | 0x5B,
	31529 - 19968: jis0212<<14 | 0x30<<7 | 0x57,
	31530 - 19968: jis0212<<14 | 0x30<<7 | 0x58,
	31531 - 19968: jis0212<<14 | 0x30<<7 | 0x59,
	31532 - 19968: jis0208<<14 | 0x21<<7 | 0x47,
	31533 - 19968: jis0212<<14 | 0x30<<7 | 0x5A,
	31534 - 19968: jis0212<<14 | 0x30<<7 | 0x5B,
	31535 - 19968: jis0212<<14 | 0x30<<7 | 0x5C,
	31536 - 19968: jis0212<<14 | 0x30<<7 | 0x5D,
	31537 - 19968: jis0212<<14 | 0x31<<7 | 0x00,
	31539 - 19968: jis0208<<14 | 0x42<<7 | 0x56,
	31540 - 19968: jis0212<<14 | 0x31<<7 | 0x01,
	31541 - 19968: jis0208<<14 | 0x42<<7 | 0x5A,
	31542 - 19968: jis0208<<14 | 0x42<<7 | 0x5C,
	31545 - 19968: jis0208<<14 | 0x19<<7 | 0x5A,
	31549 - 19968: jis0212<<14 | 0x31<<7 | 0x02,
	31551 - 19968: jis0212<<14 | 0x31<<7 | 0x03,
	31552 - 19968: jis0212<<14 | 0x31<<7 | 0x04,
	31553 - 19968: jis0212<<14 | 0x31<<7 | 0x05,
	31557 - 19968: jis0208<<14 | 0x43<<7 | 0x05,
	31558 - 19968: jis0208<<14 | 0x28<<7 | 0x0D,
	31559 - 19968: jis0212<<14 | 0x31<<7 | 0x06,
	31560 - 19968: jis0208<<14 | 0x27<<7 | 0x05,
	31561 - 19968: jis0208<<14 | 0x24<<7 | 0x58,
	31563 - 19968: jis0208<<14 | 0x15<<7 | 0x39,
	31564 - 19968: jis0208<<14 | 0x43<<7 | 0x04,
	31565 - 19968: jis0208<<14 | 0x43<<7 | 0x02,
	31566 - 19968: jis0212<<14 | 0x31<<7 | 0x07,
	31567 - 19968: jis0208<<14 | 0x27<<7 | 0x14,
	31568 - 19968: jis0208<<14 | 0x42<<7 | 0x5D,
	31569 - 19968: jis0208<<14 | 0x22<<7 | 0x3D,
	31570 - 19968: jis0208<<14 | 0x24<<7 | 0x5A,
	31572 - 19968: jis0208<<14 | 0x24<<7 | 0x59,
	31573 - 19968: jis0212<<14 | 0x31<<7 | 0x08,
	31574 - 19968: jis0208<<14 | 0x19<<7 | 0x55,
	31581 - 19968: jis0208<<14 | 0x43<<7 | 0x17,
	31584 - 19968: jis0212<<14 | 0x31<<7 | 0x09,
	31588 - 19968: jis0212<<14 | 0x31<<7 | 0x0A,
	31589 - 19968: jis0208<<14 | 0x43<<7 | 0x07,
	31590 - 19968: jis0212<<14 | 0x31<<7 | 0x0B,
	31591 - 19968: jis0208<<14 | 0x43<<7 | 0x09,
	31593 - 19968: jis0212<<14 | 0x31<<7 | 0x0C,
	31594 - 19968: jis0212<<14 | 0x31<<7 | 0x0D,
	31596 - 19968: jis0208<<14 | 0x43<<7 | 0x0C,
	31597 - 19968: jis0212<<14 | 0x31<<7 | 0x0E,
	31598 - 19968: jis0208<<14 | 0x43<<7 | 0x0D,
	31599 - 19968: jis0212<<14 | 0x31<<7 | 0x0F,
	31600 - 19968: jis0208<<14 | 0x43<<7 | 0x0A,
	31601 - 19968: jis0208<<14 | 0x43<<7 | 0x0B,
	31602 - 19968: jis0212<<14 | 0x31<<7 | 0x10,
	31603 - 19968: jis0212<<14 | 0x31<<7 | 0x11,
	31604 - 19968: jis0208<<14 | 0x43<<7 | 0x08,
	31605 - 19968: jis0208<<14 | 0x43<<7 | 0x06,
	31607 - 19968: jis0212<<14 | 0x31<<7 | 0x12,
	31610 - 19968: jis0208<<14 | 0x43<<7 | 0x00,
	31620 - 19968: jis0212<<14 | 0x31<<7 | 0x13,
	31622 - 19968: jis0208<<14 | 0x29<<7 | 0x2E,
	31623 - 19968: jis0208<<14 | 0x11<<7 | 0x34,
	31625 - 19968: jis0212<<14 | 0x31<<7 | 0x14,
	31627 - 19968: jis0208<<14 | 0x43<<7 | 0x14,
	31629 - 19968: jis0208<<14 | 0x43<<7 | 0x11,
	31630 - 19968: jis0212<<14 | 0x31<<7 | 0x15,
	31631 - 19968: jis0208<<14 | 0x43<<7 | 0x16,
	31632 - 19968: jis0212<<14 | 0x31<<7 | 0x16,
	31633 - 19968: jis0212<<14 | 0x31<<7 | 0x17,
	31634 - 19968: jis0208<<14 | 0x43<<7 | 0x15,
	31636 - 19968: jis0208<<14 | 0x26<<7 | 0x52,
	31637 - 19968: jis0208<<14 | 0x2B<<7 | 0x06,
	31638 - 19968: jis0212<<14 | 0x31<<7 | 0x18,
	31639 - 19968: jis0208<<14 | 0x1A<<7 | 0x1A,
	31640 - 19968: jis0208<<14 | 0x43<<7 | 0x0F,
	31641 - 19968: jis0208<<14 | 0x43<<7 | 0x18,
	31642 - 19968: jis0208<<14 | 0x43<<7 | 0x13,
	31643 - 19968: jis0212<<14 | 0x31<<7 | 0x19,
	31644 - 19968: jis0208<<14 | 0x43<<7 | 0x12,
	31645 - 19968: jis0208<<14 | 0x43<<7 | 0x0E,
	31646 - 19968: jis0208<<14 | 0x5A<<7 | 0x2B,
	31647 - 19968: jis0208<<14 | 0x43<<7 | 0x10,
	31648 - 19968: jis0212<<14 | 0x31<<7 | 0x1B,
	31649 - 19968: jis0208<<14 | 0x13<<7 | 0x28,
	31653 - 19968: jis0212<<14 | 0x31<<7 | 0x1C,
	31658 - 19968: jis0208<<14 | 0x22<<7 | 0x1C,
	31660 - 19968: jis0212<<14 | 0x31<<7 | 0x1D,
	31661 - 19968: jis0208<<14 | 0x1F<<7 | 0x5C,
	31663 - 19968: jis0212<<14 | 0x31<<7 | 0x1E,
	31664 - 19968: jis0212<<14 | 0x31<<7 | 0x1F,
	31665 - 19968: jis0208<<14 | 0x27<<7 | 0x01,
	31666 - 19968: jis0212<<14 | 0x31<<7 | 0x20,
	31668 - 19968: jis0208<<14 | 0x43<<7 | 0x1D,
	31669 - 19968: jis0212<<14 | 0x31<<7 | 0x21,
	31670 - 19968: jis0212<<14 | 0x31<<7 | 0x22,
	31672 - 19968: jis0208<<14 | 0x27<<7 | 0x03,
	31674 - 19968: jis0212<<14 | 0x31<<7 | 0x23,
	31675 - 19968: jis0212<<14 | 0x31<<7 | 0x24,
	31676 - 19968: jis0212<<14 | 0x31<<7 | 0x25,
	31677 - 19968: jis0212<<14 | 0x31<<7 | 0x26,
	31680 - 19968: jis0208<<14 | 0x1F<<7 | 0x40,
	31681 - 19968: jis0208<<14 | 0x43<<7 | 0x1A,
	31682 - 19968: jis0212<<14 | 0x31<<7 | 0x27,
	31684 - 19968: jis0208<<14 | 0x27<<7 | 0x2E,
	31685 - 19968: jis0212<<14 | 0x31<<7 | 0x28,
	31686 - 19968: jis0208<<14 | 0x43<<7 | 0x1E,
	31687 - 19968: jis0208<<14 | 0x29<<7 | 0x32,
	31688 - 19968: jis0212<<14 | 0x31<<7 | 0x29,
	31689 - 19968: jis0208<<14 | 0x22<<7 | 0x3A,
	31690 - 19968: jis0212<<14 | 0x31<<7 | 0x2A,
	31691 - 19968: jis0208<<14 | 0x43<<7 | 0x19,
	31692 - 19968: jis0208<<14 | 0x43<<7 | 0x1B,
	31695 - 19968: jis0208<<14 | 0x43<<7 | 0x1C,
	31700 - 19968: jis0212<<14 | 0x31<<7 | 0x2B,
	31702 - 19968: jis0212<<14 | 0x31<<7 | 0x2C,
	31703 - 19968: jis0212<<14 | 0x31<<7 | 0x2D,
	31705 - 19968: jis0212<<14 | 0x31<<7 | 0x2E,
	31706 - 19968: jis0212<<14 | 0x31<<7 | 0x2F,
	31707 - 19968: jis0212<<14 | 0x31<<7 | 0x30,
	31709 - 19968: jis0208<<14 | 0x43<<7 | 0x1F,
	31712 - 19968: jis0208<<14 | 0x1B<<7 | 0x23,
	31716 - 19968: jis0208<<14 | 0x25<<7 | 0x25,
	31717 - 19968: jis0208<<14 | 0x43<<7 | 0x24,
	31718 - 19968: jis0208<<14 | 0x43<<7 | 0x23,
	31720 - 19968: jis0212<<14 | 0x31<<7 | 0x31,
	31721 - 19968: jis0208<<14 | 0x43<<7 | 0x20,
	31722 - 19968: jis0212<<14 | 0x31<<7 | 0x32,
	31725 - 19968: jis0208<<14 | 0x2E<<7 | 0x15,
	31730 - 19968: jis0212<<14 | 0x31<<7 | 0x33,
	31731 - 19968: jis0208<<14 | 0x43<<7 | 0x29,
	31732 - 19968: jis0212<<14 | 0x31<<7 | 0x34,
	31733 - 19968: jis0212<<14 | 0x31<<7 | 0x35,
	31734 - 19968: jis0208<<14 | 0x43<<7 | 0x2D,
	31735 - 19968: jis0208<<14 | 0x43<<7 | 0x2A,
	31736 - 19968: jis0212<<14 | 0x31<<7 | 0x36,
	31737 - 19968: jis0212<<14 | 0x31<<7 | 0x37,
	31738 - 19968: jis0212<<14 | 0x31<<7 | 0x38,
	31740 - 19968: jis0212<<14 | 0x31<<7 | 0x39,
	31742 - 19968: jis0212<<14 | 0x31<<7 | 0x3A,
	31744 - 19968: jis0208<<14 | 0x43<<7 | 0x26,
	31745 - 19968: jis0212<<14 | 0x31<<7 | 0x3B,
	31746 - 19968: jis0212<<14 | 0x31<<7 | 0x3C,
	31747 - 19968: jis0212<<14 | 0x31<<7 | 0x3D,
	31748 - 19968: jis0212<<14 | 0x31<<7 | 0x3E,
	31750 - 19968: jis0212<<14 | 0x31<<7 | 0x3F,
	31751 - 19968: jis0208<<14 | 0x43<<7 | 0x27,
	31753 - 19968: jis0212<<14 | 0x31<<7 | 0x40,
	31755 - 19968: jis0212<<14 | 0x31<<7 | 0x41,
	31756 - 19968: jis0212<<14 | 0x31<<7 | 0x42,
	31757 - 19968: jis0208<<14 | 0x43<<7 | 0x2C,
	31758 - 19968: jis0212<<14 | 0x31<<7 | 0x43,
	31759 - 19968: jis0212<<14 | 0x31<<7 | 0x44,
	31761 - 19968: jis0208<<14 | 0x43<<7 | 0x21,
	31762 - 19968: jis0208<<14 | 0x31<<7 | 0x34,
	31763 - 19968: jis0208<<14 | 0x43<<7 | 0x28,
	31764 - 19968: jis0208<<14 | 0x43<<7 | 0x22,
	31767 - 19968: jis0208<<14 | 0x43<<7 | 0x2B,
	31769 - 19968: jis0212<<14 | 0x31<<7 | 0x45,
	31771 - 19968: jis0212<<14 | 0x31<<7 | 0x46,
	31775 - 19968: jis0208<<14 | 0x43<<7 | 0x31,
	31776 - 19968: jis0212<<14 | 0x31<<7 | 0x47,
	31777 - 19968: jis0208<<14 | 0x13<<7 | 0x29,
	31779 - 19968: jis0208<<14 | 0x43<<7 | 0x2E,
	31781 - 19968: jis0212<<14 | 0x31<<7 | 0x48,
	31782 - 19968: jis0212<<14 | 0x31<<7 | 0x49,
	31783 - 19968: jis0208<<14 | 0x43<<7 | 0x2F,
	31784 - 19968: jis0212<<14 | 0x31<<7 | 0x4A,
	31786 - 19968: jis0208<<14 | 0x43<<7 | 0x30,
	31787 - 19968: jis0208<<14 | 0x43<<7 | 0x33,
	31788 - 19968: jis0212<<14 | 0x31<<7 | 0x4B,
	31793 - 19968: jis0212<<14 | 0x31<<7 | 0x4C,
	31795 - 19968: jis0212<<14 | 0x31<<7 | 0x4D,
	31796 - 19968: jis0212<<14 | 0x31<<7 | 0x4E,
	31798 - 19968: jis0212<<14 | 0x31<<7 | 0x4F,
	31799 - 19968: jis0208<<14 | 0x43<<7 | 0x32,
	31800 - 19968: jis0208<<14 | 0x27<<7 | 0x55,
	31801 - 19968: jis0212<<14 | 0x31<<7 | 0x50,
	31802 - 19968: jis0212<<14 | 0x31<<7 | 0x51,
	31805 - 19968: jis0208<<14 | 0x43<<7 | 0x34,
	31806 - 19968: jis0208<<14 | 0x2D<<7 | 0x5B,
	31807 - 19968: jis0208<<14 | 0x29<<7 | 0x4C,
	31808 - 19968: jis0208<<14 | 0x43<<7 | 0x39,
	31811 - 19968: jis0208<<14 | 0x43<<7 | 0x36,
	31814 - 19968: jis0212<<14 | 0x31<<7 | 0x52,
	31818 - 19968: jis0212<<14 | 0x31<<7 | 0x53,
	31820 - 19968: jis0208<<14 | 0x43<<7 | 0x35,
	31821 - 19968: jis0208<<14 | 0x1F<<7 | 0x31,
	31823 - 19968: jis0208<<14 | 0x43<<7 | 0x38,
	31824 - 19968: jis0208<<14 | 0x43<<7 | 0x3A,
	31825 - 19968: jis0212<<14 | 0x31<<7 | 0x55,
	31826 - 19968: jis0212<<14 | 0x31<<7 | 0x56,
	31827 - 19968: jis0212<<14 | 0x31<<7 | 0x57,
	31828 - 19968: jis0208<<14 | 0x43<<7 | 0x37,
	31829 - 19968: jis0212<<14 | 0x31<<7 | 0x54,
	31830 - 19968: jis0208<<14 | 0x43<<7 | 0x3E,
	31832 - 19968: jis0208<<14 | 0x43<<7 | 0x3B,
	31833 - 19968: jis0212<<14 | 0x31<<7 | 0x58,
	31834 - 19968: jis0212<<14 | 0x31<<7 | 0x59,
	31835 - 19968: jis0212<<14 | 0x31<<7 | 0x5A,
	31836 - 19968: jis0212<<14 | 0x31<<7 | 0x5B,
	31837 - 19968: jis0212<<14 | 0x31<<7 | 0x5C,
	31838 - 19968: jis0212<<14 | 0x31<<7 | 0x5D,
	31839 - 19968: jis0208<<14 | 0x43<<7 | 0x3C,
	31840 - 19968: jis0208<<14 | 0x43<<7 | 0x25,
	31841 - 19968: jis0212<<14 | 0x32<<7 | 0x00,
	31843 - 19968: jis0212<<14 | 0x32<<7 | 0x01,
	31844 - 19968: jis0208<<14 | 0x43<<7 | 0x3D,
	31845 - 19968: jis0208<<14 | 0x43<<7 | 0x3F,
	31847 - 19968: jis0212<<14 | 0x32<<7 | 0x02,
	31849 - 19968: jis0212<<14 | 0x32<<7 | 0x03,
	31852 - 19968: jis0208<<14 | 0x43<<7 | 0x40,
	31853 - 19968: jis0212<<14 | 0x32<<7 | 0x04,
	31854 - 19968: jis0212<<14 | 0x32<<7 | 0x05,
	31856 - 19968: jis0212<<14 | 0x32<<7 | 0x06,
	31858 - 19968: jis0212<<14 | 0x32<<7 | 0x07,
	31859 - 19968: jis0208<<14 | 0x29<<7 | 0x25,
	31861 - 19968: jis0208<<14 | 0x43<<7 | 0x41,
	31865 - 19968: jis0212<<14 | 0x32<<7 | 0x08,
	31868 - 19968: jis0212<<14 | 0x32<<7 | 0x09,
	31869 - 19968: jis0212<<14 | 0x32<<7 | 0x0A,
	31870 - 19968: jis0208<<14 | 0x2B<<7 | 0x41,
	31873 - 19968: jis0208<<14 | 0x15<<7 | 0x2D,
	31874 - 19968: jis0208<<14 | 0x16<<7 | 0x08,
	31875 - 19968: jis0208<<14 | 0x43<<7 | 0x42,
	31878 - 19968: jis0212<<14 | 0x32<<7 | 0x0B,
	31879 - 19968: jis0212<<14 | 0x32<<7 | 0x0C,
	31881 - 19968: jis0208<<14 | 0x29<<7 | 0x13,
	31883 - 19968: jis0208<<14 | 0x1E<<7 | 0x47,
	31885 - 19968: jis0208<<14 | 0x2B<<7 | 0x0F,
	31887 - 19968: jis0212<<14 | 0x32<<7 | 0x0D,
	31888 - 19968: jis0208<<14 | 0x43<<7 | 0x43,
	31890 - 19968: jis0208<<14 | 0x2D<<7 | 0x12,
	31892 - 19968: jis0212<<14 | 0x32<<7 | 0x0E,
	31893 - 19968: jis0208<<14 | 0x26<<7 | 0x53,
	31895 - 19968: jis0208<<14 | 0x20<<7 | 0x25,
	31896 - 19968: jis0208<<14 | 0x26<<7 | 0x13,
	31899 - 19968: jis0208<<14 | 0x1C<<7 | 0x2C,
	31902 - 19968: jis0212<<14 | 0x32<<7 | 0x0F,
	31903 - 19968: jis0208<<14 | 0x0F<<7 | 0x1F,
	31904 - 19968: jis0212<<14 | 0x32<<7 | 0x10,
	31905 - 19968: jis0208<<14 | 0x43<<7 | 0x48,
	31906 - 19968: jis0208<<14 | 0x43<<7 | 0x46,
	31908 - 19968: jis0208<<14 | 0x43<<7 | 0x44,
	31909 - 19968: jis0208<<14 | 0x13<<7 | 0x00,
	31910 - 19968: jis0212<<14 | 0x32<<7 | 0x11,
	31911 - 19968: jis0208<<14 | 0x1D<<7 | 0x30,
	31912 - 19968: jis0208<<14 | 0x43<<7 | 0x49,
	31915 - 19968: jis0208<<14 | 0x43<<7 | 0x47,
	31917 - 19968: jis0208<<14 | 0x43<<7 | 0x45,
	31918 - 19968: jis0208<<14 | 0x43<<7 | 0x4D,
	31920 - 19968: jis0212<<14 | 0x32<<7 | 0x12,
	31921 - 19968: jis0208<<14 | 0x43<<7 | 0x4C,
	31922 - 19968: jis0208<<14 | 0x43<<7 | 0x4B,
	31923 - 19968: jis0208<<14 | 0x43<<7 | 0x4A,
	31926 - 19968: jis0212<<14 | 0x32<<7 | 0x13,
	31927 - 19968: jis0212<<14 | 0x32<<7 | 0x14,
	31929 - 19968: jis0208<<14 | 0x43<<7 | 0x4E,
	31930 - 19968: jis0212<<14 | 0x32<<7 | 0x15,
	31931 - 19968: jis0212<<14 | 0x32<<7 | 0x16,
	31932 - 19968: jis0212<<14 | 0x32<<7 | 0x17,
	31933 - 19968: jis0208<<14 | 0x43<<7 | 0x4F,
	31934 - 19968: jis0208<<14 | 0x1F<<7 | 0x19,
	31935 - 19968: jis0212<<14 | 0x32<<7 | 0x18,
	31936 - 19968: jis0208<<14 | 0x43<<7 | 0x50,
	31938 - 19968: jis0208<<14 | 0x43<<7 | 0x52,
	31940 - 19968: jis0212<<14 | 0x32<<7 | 0x19,
	31941 - 19968: jis0208<<14 | 0x43<<7 | 0x51,
	31943 - 19968: jis0212<<14 | 0x32<<7 | 0x1A,
	31944 - 19968: jis0212<<14 | 0x32<<7 | 0x1B,
	31945 - 19968: jis0212<<14 | 0x32<<7 | 0x1C,
	31946 - 19968: jis0208<<14 | 0x17<<7 | 0x31,
	31949 - 19968: jis0212<<14 | 0x32<<7 | 0x1D,
	31950 - 19968: jis0208<<14 | 0x20<<7 | 0x17,
	31951 - 19968: jis0212<<14 | 0x32<<7 | 0x1E,
	31954 - 19968: jis0208<<14 | 0x43<<7 | 0x54,
	31955 - 19968: jis0212<<14 | 0x32<<7 | 0x1F,
	31956 - 19968: jis0212<<14 | 0x32<<7 | 0x20,
	31957 - 19968: jis0212<<14 | 0x32<<7 | 0x21,
	31958 - 19968: jis0208<<14 | 0x24<<7 | 0x5B,
	31959 - 19968: jis0212<<14 | 0x32<<7 | 0x22,
	31960 - 19968: jis0208<<14 | 0x43<<7 | 0x53,
	31961 - 19968: jis0212<<14 | 0x32<<7 | 0x23,
	31962 - 19968: jis0212<<14 | 0x32<<7 | 0x24,
	31964 - 19968: jis0208<<14 | 0x43<<7 | 0x55,
	31965 - 19968: jis0212<<14 | 0x32<<7 | 0x25,
	31966 - 19968: jis0208<<14 | 0x29<<7 | 0x14,
	31967 - 19968: jis0208<<14 | 0x20<<7 | 0x4B,
	31968 - 19968: jis0208<<14 | 0x18<<7 | 0x26,
	31970 - 19968: jis0208<<14 | 0x43<<7 | 0x56,
	31974 - 19968: jis0212<<14 | 0x32<<7 | 0x26,
	31975 - 19968: jis0208<<14 | 0x2D<<7 | 0x27,
	31977 - 19968: jis0212<<14 | 0x32<<7 | 0x27,
	31979 - 19968: jis0212<<14 | 0x32<<7 | 0x28,
	31983 - 19968: jis0208<<14 | 0x43<<7 | 0x58,
	31986 - 19968: jis0208<<14 | 0x43<<7 | 0x59,
	31988 - 19968: jis0208<<14 | 0x43<<7 | 0x5A,
	31989 - 19968: jis0212<<14 | 0x32<<7 | 0x29,
	31990 - 19968: jis0208<<14 | 0x43<<7 | 0x5B,
	31992 - 19968: jis0208<<14 | 0x1A<<7 | 0x44,
	31994 - 19968: jis0208<<14 | 0x43<<7 | 0x5C,
	31995 - 19968: jis0208<<14 | 0x16<<7 | 0x2E,
	31998 - 19968: jis0208<<14 | 0x14<<7 | 0x49,
	32000 - 19968: jis0208<<14 | 0x14<<7 | 0x09,
	32002 - 19968: jis0208<<14 | 0x44<<7 | 0x00,
	32003 - 19968: jis0212<<14 | 0x32<<7 | 0x2A,
	32004 - 19968: jis0208<<14 | 0x2B<<7 | 0x52,
	32005 - 19968: jis0208<<14 | 0x18<<7 | 0x27,
	32006 - 19968: jis0208<<14 | 0x43<<7 | 0x5D,
	32007 - 19968: jis0212<<14 | 0x32<<7 | 0x2B,
	32008 - 19968: jis0212<<14 | 0x32<<7 | 0x2C,
	32009 - 19968: jis0212<<14 | 0x32<<7 | 0x2D,
	32010 - 19968: jis0208<<14 | 0x44<<7 | 0x03,
	32011 - 19968: jis0208<<14 | 0x2B<<7 | 0x45,
	32013 - 19968: jis0208<<14 | 0x26<<7 | 0x1B,
	32015 - 19968: jis0212<<14 | 0x32<<7 | 0x2E,
	32016 - 19968: jis0208<<14 | 0x28<<7 | 0x12,
	32017 - 19968: jis0212<<14 | 0x32<<7 | 0x2F,
	32018 - 19968: jis0212<<14 | 0x32<<7 | 0x30,
	32019 - 19968: jis0212<<14 | 0x32<<7 | 0x31,
	32020 - 19968: jis0208<<14 | 0x1C<<7 | 0x42,
	32021 - 19968: jis0208<<14 | 0x44<<7 | 0x02,
	32022 - 19968: jis0212<<14 | 0x32<<7 | 0x32,
	32023 - 19968: jis0208<<14 | 0x1B<<7 | 0x32,
	32024 - 19968: jis0208<<14 | 0x18<<7 | 0x28,
	32025 - 19968: jis0208<<14 | 0x1A<<7 | 0x45,
	32026 - 19968: jis0208<<14 | 0x14<<7 | 0x48,
	32027 - 19968: jis0208<<14 | 0x29<<7 | 0x15,
	32028 - 19968: jis0208<<14 | 0x44<<7 | 0x01,
	32029 - 19968: jis0212<<14 | 0x32<<7 | 0x33,
	32030 - 19968: jis0212<<14 | 0x32<<7 | 0x34,
	32032 - 19968: jis0208<<14 | 0x20<<7 | 0x26,
	32033 - 19968: jis0208<<14 | 0x2A<<7 | 0x21,
	32034 - 19968: jis0208<<14 | 0x19<<7 | 0x56,
	32035 - 19968: jis0212<<14 | 0x32<<7 | 0x35,
	32038 - 19968: jis0212<<14 | 0x32<<7 | 0x36,
	32042 - 19968: jis0212<<14 | 0x32<<7 | 0x37,
	32043 - 19968: jis0208<<14 | 0x1A<<7 | 0x46,
	32044 - 19968: jis0208<<14 | 0x23<<7 | 0x3C,
	32045 - 19968: jis0212<<14 | 0x32<<7 | 0x38,
	32046 - 19968: jis0208<<14 | 0x44<<7 | 0x06,
	32047 - 19968: jis0208<<14 | 0x2D<<7 | 0x3E,
	32048 - 19968: jis0208<<14 | 0x19<<7 | 0x38,
	32049 - 19968: jis0212<<14 | 0x32<<7 | 0x39,
	32050 - 19968: jis0208<<14 | 0x44<<7 | 0x07,
	32051 - 19968: jis0208<<14 | 0x1E<<7 | 0x21,
	32053 - 19968: jis0208<<14 | 0x44<<7 | 0x09,
	32057 - 19968: jis0208<<14 | 0x1D<<7 | 0x31,
	32058 - 19968: jis0208<<14 | 0x19<<7 | 0x0F,
	32060 - 19968: jis0212<<14 | 0x32<<7 | 0x3A,
	32061 - 19968: jis0212<<14 | 0x32<<7 | 0x3B,
	32062 - 19968: jis0212<<14 | 0x32<<7 | 0x3C,
	32063 - 19968: jis0208<<14 | 0x44<<7 | 0x08,
	32064 - 19968: jis0212<<14 | 0x32<<7 | 0x3D,
	32065 - 19968: jis0212<<14 | 0x32<<7 | 0x3E,
	32066 - 19968: jis0208<<14 | 0x1C<<7 | 0x09,
	32067 - 19968: jis0208<<14 | 0x17<<7 | 0x1D,
	32068 - 19968: jis0208<<14 | 0x20<<7 | 0x27,
	32069 - 19968: jis0208<<14 | 0x44<<7 | 0x04,
	32070 - 19968: jis0208<<14 | 0x44<<7 | 0x0A,
	32071 - 19968: jis0212<<14 | 0x32<<7 | 0x3F,
	32072 - 19968: jis0208<<14 | 0x5A<<7 | 0x2D,
	32075 - 19968: jis0208<<14 | 0x44<<7 | 0x05,
	32076 - 19968: jis0208<<14 | 0x16<<7 | 0x2F,
	32077 - 19968: jis0212<<14 | 0x32<<7 | 0x41,
	32078 - 19968: jis0208<<14 | 0x44<<7 | 0x0D,
	32079 - 19968: jis0208<<14 | 0x44<<7 | 0x11,
	32080 - 19968: jis0208<<14 | 0x16<<7 | 0x4A,
	32081 - 19968: jis0212<<14 | 0x32<<7 | 0x42,
	32083 - 19968: jis0212<<14 | 0x32<<7 | 0x43,
	32086 - 19968: jis0208<<14 | 0x44<<7 | 0x0C,
	32087 - 19968: jis0212<<14 | 0x32<<7 | 0x44,
	32089 - 19968: jis0212<<14 | 0x32<<7 | 0x45,
	32090 - 19968: jis0212<<14 | 0x32<<7 | 0x46,
	32091 - 19968: jis0208<<14 | 0x44<<7 | 0x15,
	32092 - 19968: jis0208<<14 | 0x5A<<7 | 0x2E,
	32093 - 19968: jis0212<<14 | 0x32<<7 | 0x48,
	32094 - 19968: jis0208<<14 | 0x18<<7 | 0x29,
	32097 - 19968: jis0208<<14 | 0x2C<<7 | 0x4C,
	32098 - 19968: jis0208<<14 | 0x0F<<7 | 0x1B,
	32099 - 19968: jis0208<<14 | 0x44<<7 | 0x12,
	32101 - 19968: jis0212<<14 | 0x32<<7 | 0x49,
	32102 - 19968: jis0208<<14 | 0x14<<7 | 0x4A,
	32103 - 19968: jis0212<<14 | 0x32<<7 | 0x4A,
	32104 - 19968: jis0208<<14 | 0x44<<7 | 0x0F,
	32106 - 19968: jis0212<<14 | 0x32<<7 | 0x4B,
	32110 - 19968: jis0208<<14 | 0x44<<7 | 0x10,
	32112 - 19968: jis0212<<14 | 0x32<<7 | 0x4C,
	32113 - 19968: jis0208<<14 | 0x24<<7 | 0x5C,
	32114 - 19968: jis0208<<14 | 0x44<<7 | 0x0E,
	32115 - 19968: jis0208<<14 | 0x44<<7 | 0x0B,
	32117 - 19968: jis0208<<14 | 0x12<<7 | 0x07,
	32118 - 19968: jis0208<<14 | 0x1F<<7 | 0x43,
	32120 - 19968: jis0212<<14 | 0x32<<7 | 0x4D,
	32121 - 19968: jis0208<<14 | 0x17<<7 | 0x07,
	32122 - 19968: jis0212<<14 | 0x32<<7 | 0x4E,
	32123 - 19968: jis0212<<14 | 0x32<<7 | 0x4F,
	32125 - 19968: jis0208<<14 | 0x44<<7 | 0x17,
	32127 - 19968: jis0212<<14 | 0x32<<7 | 0x50,
	32129 - 19968: jis0212<<14 | 0x32<<7 | 0x51,
	32130 - 19968: jis0212<<14 | 0x32<<7 | 0x52,
	32131 - 19968: jis0212<<14 | 0x32<<7 | 0x53,
	32133 - 19968: jis0212<<14 | 0x32<<7 | 0x54,
	32134 - 19968: jis0212<<14 | 0x32<<7 | 0x55,
	32136 - 19968: jis0212<<14 | 0x32<<7 | 0x56,
	32137 - 19968: jis0208<<14 | 0x44<<7 | 0x14,
	32139 - 19968: jis0212<<14 | 0x32<<7 | 0x57,
	32140 - 19968: jis0212<<14 | 0x32<<7 | 0x58,
	32141 - 19968: jis0212<<14 | 0x32<<7 | 0x59,
	32143 - 19968: jis0208<<14 | 0x44<<7 | 0x16,
	32145 - 19968: jis0212<<14 | 0x32<<7 | 0x5A,
	32147 - 19968: jis0208<<14 | 0x44<<7 | 0x13,
	32150 - 19968: jis0212<<14 | 0x32<<7 | 0x5B,
	32151 - 19968: jis0212<<14 | 0x32<<7 | 0x5C,
	32153 - 19968: jis0208<<14 | 0x16<<7 | 0x30,
	32154 - 19968: jis0208<<14 | 0x21<<7 | 0x12,
	32155 - 19968: jis0208<<14 | 0x44<<7 | 0x18,
	32156 - 19968: jis0208<<14 | 0x20<<7 | 0x4D,
	32157 - 19968: jis0212<<14 | 0x32<<7 | 0x5D,
	32158 - 19968: jis0212<<14 | 0x33<<7 | 0x00,
	32159 - 19968: jis0208<<14 | 0x44<<7 | 0x25,
	32160 - 19968: jis0208<<14 | 0x5A<<7 | 0x30,
	32162 - 19968: jis0208<<14 | 0x44<<7 | 0x21,
	32163 - 19968: jis0208<<14 | 0x44<<7 | 0x1B,
	32166 - 19968: jis0212<<14 | 0x33<<7 | 0x01,
	32167 - 19968: jis0212<<14 | 0x33<<7 | 0x02,
	32170 - 19968: jis0212<<14 | 0x33<<7 | 0x03,
	32171 - 19968: jis0208<<14 | 0x44<<7 | 0x1F,
	32172 - 19968: jis0208<<14 | 0x1B<<7 | 0x59,
	32173 - 19968: jis0208<<14 | 0x0F<<7 | 0x3C,
	32174 - 19968: jis0208<<14 | 0x44<<7 | 0x1A,
	32175 - 19968: jis0208<<14 | 0x44<<7 | 0x22,
	32176 - 19968: jis0208<<14 | 0x44<<7 | 0x26,
	32177 - 19968: jis0208<<14 | 0x18<<7 | 0x2A,
	32178 - 19968: jis0208<<14 | 0x2B<<7 | 0x35,
	32179 - 19968: jis0212<<14 | 0x33<<7 | 0x04,
	32180 - 19968: jis0208<<14 | 0x23<<7 | 0x35,
	32181 - 19968: jis0208<<14 | 0x44<<7 | 0x1C,
	32182 - 19968: jis0212<<14 | 0x33<<7 | 0x05,
	32183 - 19968: jis0208<<14 | 0x5A<<7 | 0x2F,
	32184 - 19968: jis0208<<14 | 0x44<<7 | 0x24,
	32185 - 19968: jis0212<<14 | 0x33<<7 | 0x07,
	32186 - 19968: jis0208<<14 | 0x44<<7 | 0x19,
	32187 - 19968: jis0208<<14 | 0x22<<7 | 0x1D,
	32189 - 19968: jis0208<<14 | 0x44<<7 | 0x1E,
	32190 - 19968: jis0208<<14 | 0x0F<<7 | 0x1C,
	32191 - 19968: jis0208<<14 | 0x2B<<7 | 0x29,
	32194 - 19968: jis0212<<14 | 0x33<<7 | 0x08,
	32195 - 19968: jis0212<<14 | 0x33<<7 | 0x09,
	32196 - 19968: jis0212<<14 | 0x33<<7 | 0x0A,
	32197 - 19968: jis0212<<14 | 0x33<<7 | 0x0B,
	32198 - 19968: jis0212<<14 | 0x33<<7 | 0x0C,
	32199 - 19968: jis0208<<14 | 0x44<<7 | 0x1D,
	32202 - 19968: jis0208<<14 | 0x15<<7 | 0x3A,
	32203 - 19968: jis0208<<14 | 0x27<<7 | 0x4B,
	32204 - 19968: jis0212<<14 | 0x33<<7 | 0x0D,
	32205 - 19968: jis0212<<14 | 0x33<<7 | 0x0E,
	32206 - 19968: jis0212<<14 | 0x33<<7 | 0x0F,
	32207 - 19968: jis0208<<14 | 0x20<<7 | 0x4C,
	32209 - 19968: jis0208<<14 | 0x2D<<7 | 0x2F,
	32210 - 19968: jis0208<<14 | 0x1C<<7 | 0x4E,
	32213 - 19968: jis0208<<14 | 0x44<<7 | 0x4D,
	32214 - 19968: jis0208<<14 | 0x5A<<7 | 0x31,
	32215 - 19968: jis0212<<14 | 0x33<<7 | 0x10,
	32216 - 19968: jis0208<<14 | 0x44<<7 | 0x27,
	32217 - 19968: jis0212<<14 | 0x33<<7 | 0x11,
	32218 - 19968: jis0208<<14 | 0x1F<<7 | 0x5D,
	32220 - 19968: jis0208<<14 | 0x44<<7 | 0x23,
	32221 - 19968: jis0208<<14 | 0x44<<7 | 0x28,
	32222 - 19968: jis0208<<14 | 0x44<<7 | 0x2A,
	32224 - 19968: jis0208<<14 | 0x23<<7 | 0x58,
	32225 - 19968: jis0208<<14 | 0x44<<7 | 0x2D,
	32226 - 19968: jis0212<<14 | 0x33<<7 | 0x13,
	32228 - 19968: jis0208<<14 | 0x44<<7 | 0x29,
	32229 - 19968: jis0212<<14 | 0x33<<7 | 0x14,
	32230 - 19968: jis0212<<14 | 0x33<<7 | 0x15,
	32232 - 19968: jis0208<<14 | 0x29<<7 | 0x33,
	32233 - 19968: jis0208<<14 | 0x13<<7 | 0x2A,
	32234 - 19968: jis0212<<14 | 0x33<<7 | 0x16,
	32235 - 19968: jis0212<<14 | 0x33<<7 | 0x17,
	32236 - 19968: jis0208<<14 | 0x2B<<7 | 0x2A,
	32237 - 19968: jis0212<<14 | 0x33<<7 | 0x18,
	32239 - 19968: jis0208<<14 | 0x0F<<7 | 0x3D,
	32241 - 19968: jis0212<<14 | 0x33<<7 | 0x19,
	32242 - 19968: jis0208<<14 | 0x44<<7 | 0x2C,
	32244 - 19968: jis0208<<14 | 0x2D<<7 | 0x5C,
	32245 - 19968: jis0212<<14 | 0x33<<7 | 0x1A,
	32246 - 19968: jis0212<<14 | 0x33<<7 | 0x1B,
	32249 - 19968: jis0212<<14 | 0x33<<7 | 0x1C,
	32250 - 19968: jis0212<<14 | 0x33<<7 | 0x1D,
	32251 - 19968: jis0208<<14 | 0x44<<7 | 0x2B,
	32256 - 19968: jis0212<<14 | 0x33<<7 | 0x12,
	32257 - 19968: jis0208<<14 | 0x10<<7 | 0x4E,
	32260 - 19968: jis0208<<14 | 0x25<<7 | 0x4B,
	32261 - 19968: jis0208<<14 | 0x44<<7 | 0x2E,
	32264 - 19968: jis0212<<14 | 0x33<<7 | 0x1E,
	32265 - 19968: jis0208<<14 | 0x44<<7 | 0x35,
	32266 - 19968: jis0208<<14 | 0x44<<7 | 0x2F,
	32267 - 19968: jis0208<<14 | 0x44<<7 | 0x36,
	32272 - 19968: jis0212<<14 | 0x33<<7 | 0x1F,
	32273 - 19968: jis0212<<14 | 0x33<<7 | 0x20,
	32274 - 19968: jis0208<<14 | 0x44<<7 | 0x32,
	32277 - 19968: jis0212<<14 | 0x33<<7 | 0x21,
	32279 - 19968: jis0212<<14 | 0x33<<7 | 0x22,
	32283 - 19968: jis0208<<14 | 0x26<<7 | 0x5A,
	32284 - 19968: jis0212<<14 | 0x33<<7 | 0x23,
	32285 - 19968: jis0212<<14 | 0x33<<7 | 0x24,
	32286 - 19968: jis0208<<14 | 0x1B<<7 | 0x29,
	32287 - 19968: jis0208<<14 | 0x44<<7 | 0x34,
	32288 - 19968: jis0212<<14 | 0x33<<7 | 0x25,
	32289 - 19968: jis0208<<14 | 0x44<<7 | 0x31,
	32290 - 19968: jis0208<<14 | 0x44<<7 | 0x37,
	32291 - 19968: jis0208<<14 | 0x44<<7 | 0x30,
	32294 - 19968: jis0208<<14 | 0x1C<<7 | 0x23,
	32295 - 19968: jis0212<<14 | 0x33<<7 | 0x26,
	32296 - 19968: jis0212<<14 | 0x33<<7 | 0x27,
	32299 - 19968: jis0208<<14 | 0x2A<<7 | 0x04,
	32300 - 19968: jis0212<<14 | 0x33<<7 | 0x28,
	32301 - 19968: jis0212<<14 | 0x33<<7 | 0x29,
	32302 - 19968: jis0208<<14 | 0x1C<<7 | 0x2B,
	32303 - 19968: jis0212<<14 | 0x33<<7 | 0x2A,
	32305 - 19968: jis0208<<14 | 0x44<<7 | 0x33,
	32306 - 19968: jis0208<<14 | 0x44<<7 | 0x3F,
	32307 - 19968: jis0212<<14 | 0x33<<7 | 0x2B,
	32309 - 19968: jis0208<<14 | 0x44<<7 | 0x3B,
	32310 - 19968: jis0212<<14 | 0x33<<7 | 0x2C,
	32311 - 19968: jis0208<<14 | 0x44<<7 | 0x3E,
	32313 - 19968: jis0208<<14 | 0x44<<7 | 0x3C,
	32314 - 19968: jis0208<<14 | 0x44<<7 | 0x40,
	32315 - 19968: jis0208<<14 | 0x44<<7 | 0x3A,
	32317 - 19968: jis0208<<14 | 0x44<<7 | 0x20,
	32318 - 19968: jis0208<<14 | 0x1F<<7 | 0x32,
	32319 - 19968: jis0212<<14 | 0x33<<7 | 0x2D,
	32321 - 19968: jis0208<<14 | 0x27<<7 | 0x2A,
	32323 - 19968: jis0208<<14 | 0x44<<7 | 0x3D,
	32324 - 19968: jis0212<<14 | 0x33<<7 | 0x2E,
	32325 - 19968: jis0212<<14 | 0x33<<7 | 0x2F,
	32326 - 19968: jis0208<<14 | 0x44<<7 | 0x38,
	32327 - 19968: jis0212<<14 | 0x33<<7 | 0x30,
	32330 - 19968: jis0208<<14 | 0x20<<7 | 0x00,
	32331 - 19968: jis0208<<14 | 0x16<<7 | 0x31,
	32333 - 19968: jis0208<<14 | 0x1C<<7 | 0x0A,
	32334 - 19968: jis0212<<14 | 0x33<<7 | 0x31,
	32336 - 19968: jis0212<<14 | 0x33<<7 | 0x32,
	32338 - 19968: jis0208<<14 | 0x5A<<7 | 0x32,
	32340 - 19968: jis0208<<14 | 0x1E<<7 | 0x04,
	32341 - 19968: jis0208<<14 | 0x20<<7 | 0x15,
	32342 - 19968: jis0208<<14 | 0x44<<7 | 0x43,
	32344 - 19968: jis0212<<14 | 0x33<<7 | 0x34,
	32345 - 19968: jis0208<<14 | 0x44<<7 | 0x45,
	32346 - 19968: jis0208<<14 | 0x44<<7 | 0x46,
	32349 - 19968: jis0208<<14 | 0x44<<7 | 0x42,
	32350 - 19968: jis0208<<14 | 0x44<<7 | 0x44,
	32351 - 19968: jis0212<<14 | 0x33<<7 | 0x35,
	32353 - 19968: jis0212<<14 | 0x33<<7 | 0x36,
	32354 - 19968: jis0212<<14 | 0x33<<7 | 0x37,
	32357 - 19968: jis0212<<14 | 0x33<<7 | 0x38,
	32358 - 19968: jis0208<<14 | 0x44<<7 | 0x39,
	32359 - 19968: jis0208<<14 | 0x44<<7 | 0x41,
	32361 - 19968: jis0208<<14 | 0x44<<7 | 0x49,
	32362 - 19968: jis0208<<14 | 0x44<<7 | 0x48,
	32363 - 19968: jis0212<<14 | 0x33<<7 | 0x39,
	32365 - 19968: jis0208<<14 | 0x2A<<7 | 0x59,
	32366 - 19968: jis0212<<14 | 0x33<<7 | 0x3A,
	32367 - 19968: jis0212<<14 | 0x33<<7 | 0x3B,
	32368 - 19968: jis0208<<14 | 0x16<<7 | 0x0A,
	32371 - 19968: jis0212<<14 | 0x33<<7 | 0x3C,
	32376 - 19968: jis0212<<14 | 0x33<<7 | 0x3D,
	32377 - 19968: jis0208<<14 | 0x44<<7 | 0x47,
	32379 - 19968: jis0208<<14 | 0x44<<7 | 0x4B,
	32380 - 19968: jis0208<<14 | 0x44<<7 | 0x4A,
	32381 - 19968: jis0208<<14 | 0x44<<7 | 0x4E,
	32382 - 19968: jis0212<<14 | 0x33<<7 | 0x3E,
	32383 - 19968: jis0208<<14 | 0x44<<7 | 0x50,
	32385 - 19968: jis0212<<14 | 0x33<<7 | 0x3F,
	32386 - 19968: jis0208<<14 | 0x1A<<7 | 0x1B,
	32387 - 19968: jis0208<<14 | 0x44<<7 | 0x4C,
	32390 - 19968: jis0212<<14 | 0x33<<7 | 0x40,
	32391 - 19968: jis0212<<14 | 0x33<<7 | 0x41,
	32392 - 19968: jis0208<<14 | 0x44<<7 | 0x51,
	32393 - 19968: jis0208<<14 | 0x44<<7 | 0x52,
	32394 - 19968: jis0208<<14 | 0x58<<7 | 0x00,
	32396 - 19968: jis0208<<14 | 0x44<<7 | 0x53,
	32397 - 19968: jis0212<<14 | 0x33<<7 | 0x43,
	32398 - 19968: jis0208<<14 | 0x44<<7 | 0x59,
	32399 - 19968: jis0208<<14 | 0x24<<7 | 0x1A,
	32400 - 19968: jis0208<<14 | 0x44<<7 | 0x55,
	32401 - 19968: jis0212<<14 | 0x33<<7 | 0x44,
	32402 - 19968: jis0208<<14 | 0x44<<7 | 0x54,
	32403 - 19968: jis0208<<14 | 0x44<<7 | 0x56,
	32404 - 19968: jis0208<<14 | 0x44<<7 | 0x57,
	32405 - 19968: jis0212<<14 | 0x33<<7 | 0x45,
	32406 - 19968: jis0208<<14 | 0x44<<7 | 0x58,
	32408 - 19968: jis0212<<14 | 0x33<<7 | 0x46,
	32410 - 19968: jis0212<<14 | 0x33<<7 | 0x47,
	32411 - 19968: jis0208<<14 | 0x44<<7 | 0x5A,
	32412 - 19968: jis0208<<14 | 0x44<<7 | 0x5B,
	32413 - 19968: jis0212<<14 | 0x33<<7 | 0x48,
	32414 - 19968: jis0212<<14 | 0x33<<7 | 0x49,
	32566 - 19968: jis0208<<14 | 0x13<<7 | 0x2B,
	32568 - 19968: jis0208<<14 | 0x44<<7 | 0x5C,
	32570 - 19968: jis0208<<14 | 0x44<<7 | 0x5D,
	32571 - 19968: jis0212<<14 | 0x33<<7 | 0x4B,
	32572 - 19968: jis0212<<14 | 0x33<<7 | 0x4A,
	32573 - 19968: jis0212<<14 | 0x33<<7 | 0x4C,
	32574 - 19968: jis0212<<14 | 0x33<<7 | 0x4D,
	32575 - 19968: jis0212<<14 | 0x33<<7 | 0x4E,
	32579 - 19968: jis0212<<14 | 0x33<<7 | 0x4F,
	32580 - 19968: jis0212<<14 | 0x33<<7 | 0x50,
	32581 - 19968: jis0208<<14 | 0x45<<7 | 0x00,
	32583 - 19968: jis0208<<14 | 0x5A<<7 | 0x33,
	32588 - 19968: jis0208<<14 | 0x45<<7 | 0x01,
	32589 - 19968: jis0208<<14 | 0x45<<7 | 0x02,
	32590 - 19968: jis0208<<14 | 0x45<<7 | 0x03,
	32591 - 19968: jis0212<<14 | 0x33<<7 | 0x52,
	32592 - 19968: jis0208<<14 | 0x45<<7 | 0x04,
	32593 - 19968: jis0208<<14 | 0x45<<7 | 0x05,
	32594 - 19968: jis0212<<14 | 0x33<<7 | 0x53,
	32595 - 19968: jis0212<<14 | 0x33<<7 | 0x54,
	32596 - 19968: jis0208<<14 | 0x45<<7 | 0x07,
	32597 - 19968: jis0208<<14 | 0x45<<7 | 0x06,
	32600 - 19968: jis0208<<14 | 0x45<<7 | 0x08,
	32603 - 19968: jis0212<<14 | 0x33<<7 | 0x55,
	32604 - 19968: jis0212<<14 | 0x33<<7 | 0x56,
	32605 - 19968: jis0212<<14 | 0x33<<7 | 0x57,
	32607 - 19968: jis0208<<14 | 0x45<<7 | 0x09,
	32608 - 19968: jis0208<<14 | 0x45<<7 | 0x0A,
	32609 - 19968: jis0212<<14 | 0x33<<7 | 0x58,
	32611 - 19968: jis0212<<14 | 0x33<<7 | 0x59,
	32612 - 19968: jis0212<<14 | 0x33<<7 | 0x5A,
	32613 - 19968: jis0212<<14 | 0x33<<7 | 0x5B,
	32614 - 19968: jis0212<<14 | 0x33<<7 | 0x5C,
	32615 - 19968: jis0208<<14 | 0x45<<7 | 0x0D,
	32616 - 19968: jis0208<<14 | 0x45<<7 | 0x0B,
	32617 - 19968: jis0208<<14 | 0x45<<7 | 0x0C,
	32618 - 19968: jis0208<<14 | 0x19<<7 | 0x40,
	32619 - 19968: jis0208<<14 | 0x16<<7 | 0x32,
	32621 - 19968: jis0212<<14 | 0x33<<7 | 0x5D,
	32622 - 19968: jis0208<<14 | 0x22<<7 | 0x35,
	32624 - 19968: jis0208<<14 | 0x27<<7 | 0x12,
	32625 - 19968: jis0212<<14 | 0x34<<7 | 0x00,
	32626 - 19968: jis0208<<14 | 0x1C<<7 | 0x4F,
	32629 - 19968: jis0208<<14 | 0x26<<7 | 0x2C,
	32631 - 19968: jis0208<<14 | 0x27<<7 | 0x4C,
	32632 - 19968: jis0208<<14 | 0x45<<7 | 0x0E,
	32633 - 19968: jis0208<<14 | 0x37<<7 | 0x4C,
	32637 - 19968: jis0212<<14 | 0x34<<7 | 0x01,
	32638 - 19968: jis0212<<14 | 0x34<<7 | 0x02,
	32639 - 19968: jis0212<<14 | 0x34<<7 | 0x03,
	32640 - 19968: jis0212<<14 | 0x34<<7 | 0x04,
	32642 - 19968: jis0208<<14 | 0x45<<7 | 0x0F,
	32643 - 19968: jis0208<<14 | 0x45<<7 | 0x11,
	32645 - 19968: jis0208<<14 | 0x2C<<7 | 0x44,
	32646 - 19968: jis0208<<14 | 0x45<<7 | 0x10,
	32647 - 19968: jis0208<<14 | 0x45<<7 | 0x13,
	32648 - 19968: jis0208<<14 | 0x45<<7 | 0x12,
	32650 - 19968: jis0208<<14 | 0x2C<<7 | 0x32,
	32651 - 19968: jis0212<<14 | 0x34<<7 | 0x05,
	32652 - 19968: jis0208<<14 | 0x45<<7 | 0x14,
	32653 - 19968: jis0212<<14 | 0x34<<7 | 0x06,
	32654 - 19968: jis0208<<14 | 0x27<<7 | 0x5D,
	32655 - 19968: jis0212<<14 | 0x34<<7 | 0x07,
	32656 - 19968: jis0212<<14 | 0x34<<7 | 0x08,
	32657 - 19968: jis0212<<14 | 0x34<<7 | 0x09,
	32660 - 19968: jis0208<<14 | 0x45<<7 | 0x15,
	32662 - 19968: jis0212<<14 | 0x34<<7 | 0x0A,
	32663 - 19968: jis0212<<14 | 0x34<<7 | 0x0B,
	32666 - 19968: jis0208<<14 | 0x45<<7 | 0x18,
	32668 - 19968: jis0212<<14 | 0x34<<7 | 0x0C,
	32669 - 19968: jis0208<<14 | 0x45<<7 | 0x17,
	32670 - 19968: jis0208<<14 | 0x45<<7 | 0x16,
	32673 - 19968: jis0208<<14 | 0x5A<<7 | 0x34,
	32674 - 19968: jis0212<<14 | 0x34<<7 | 0x0E,
	32675 - 19968: jis0208<<14 | 0x45<<7 | 0x19,
	32676 - 19968: jis0208<<14 | 0x16<<7 | 0x11,
	32678 - 19968: jis0212<<14 | 0x34<<7 | 0x0F,
	32680 - 19968: jis0208<<14 | 0x20<<7 | 0x01,
	32681 - 19968: jis0208<<14 | 0x14<<7 | 0x20,
	32682 - 19968: jis0212<<14 | 0x34<<7 | 0x10,
	32685 - 19968: jis0212<<14 | 0x34<<7 | 0x11,
	32686 - 19968: jis0208<<14 | 0x45<<7 | 0x1D,
	32687 - 19968: jis0208<<14 | 0x45<<7 | 0x1A,
	32690 - 19968: jis0208<<14 | 0x45<<7 | 0x1B,
	32692 - 19968: jis0212<<14 | 0x34<<7 | 0x12,
	32694 - 19968: jis0208<<14 | 0x45<<7 | 0x1E,
	32696 - 19968: jis0208<<14 | 0x45<<7 | 0x1F,
	32697 - 19968: jis0208<<14 | 0x45<<7 | 0x1C,
	32700 - 19968: jis0212<<14 | 0x34<<7 | 0x13,
	32701 - 19968: jis0208<<14 | 0x10<<7 | 0x08,
	32703 - 19968: jis0212<<14 | 0x34<<7 | 0x14,
	32704 - 19968: jis0212<<14 | 0x34<<7 | 0x15,
	32705 - 19968: jis0208<<14 | 0x11<<7 | 0x06,
	32707 - 19968: jis0212<<14 | 0x34<<7 | 0x16,
	32709 - 19968: jis0208<<14 | 0x45<<7 | 0x21,
	32710 - 19968: jis0208<<14 | 0x45<<7 | 0x22,
	32712 - 19968: jis0212<<14 | 0x34<<7 | 0x17,
	32714 - 19968: jis0208<<14 | 0x45<<7 | 0x23,
	32716 - 19968: jis0208<<14 | 0x2C<<7 | 0x41,
	32718 - 19968: jis0212<<14 | 0x34<<7 | 0x18,
	32719 - 19968: jis0212<<14 | 0x34<<7 | 0x19,
	32722 - 19968: jis0208<<14 | 0x1C<<7 | 0x0B,
	32724 - 19968: jis0208<<14 | 0x45<<7 | 0x25,
	32725 - 19968: jis0208<<14 | 0x45<<7 | 0x24,
	32731 - 19968: jis0212<<14 | 0x34<<7 | 0x1A,
	32735 - 19968: jis0212<<14 | 0x34<<7 | 0x1B,
	32736 - 19968: jis0208<<14 | 0x1E<<7 | 0x48,
	32737 - 19968: jis0208<<14 | 0x45<<7 | 0x26,
	32739 - 19968: jis0212<<14 | 0x34<<7 | 0x1C,
	32741 - 19968: jis0212<<14 | 0x34<<7 | 0x1D,
	32742 - 19968: jis0208<<14 | 0x45<<7 | 0x27,
	32744 - 19968: jis0212<<14 | 0x34<<7 | 0x1E,
	32745 - 19968: jis0208<<14 | 0x45<<7 | 0x28,
	32747 - 19968: jis0208<<14 | 0x13<<7 | 0x44,
	32748 - 19968: jis0212<<14 | 0x34<<7 | 0x1F,
	32750 - 19968: jis0212<<14 | 0x34<<7 | 0x20,
	32751 - 19968: jis0212<<14 | 0x34<<7 | 0x21,
	32752 - 19968: jis0208<<14 | 0x13<<7 | 0x2C,
	32754 - 19968: jis0212<<14 | 0x34<<7 | 0x22,
	32755 - 19968: jis0208<<14 | 0x45<<7 | 0x29,
	32761 - 19968: jis0208<<14 | 0x45<<7 | 0x2A,
	32762 - 19968: jis0212<<14 | 0x34<<7 | 0x23,
	32763 - 19968: jis0208<<14 | 0x2A<<7 | 0x3C,
	32764 - 19968: jis0208<<14 | 0x2C<<7 | 0x42,
	32765 - 19968: jis0212<<14 | 0x34<<7 | 0x24,
	32766 - 19968: jis0212<<14 | 0x34<<7 | 0x25,
	32767 - 19968: jis0212<<14 | 0x34<<7 | 0x26,
	32768 - 19968: jis0208<<14 | 0x2C<<7 | 0x33,
	32769 - 19968: jis0208<<14 | 0x2E<<7 | 0x16,
	32771 - 19968: jis0208<<14 | 0x18<<7 | 0x2C,
	32772 - 19968: jis0208<<14 | 0x45<<7 | 0x2D,
	32773 - 19968: jis0208<<14 | 0x1B<<7 | 0x33,
	32774 - 19968: jis0208<<14 | 0x45<<7 | 0x2C,
	32775 - 19968: jis0212<<14 | 0x34<<7 | 0x27,
	32776 - 19968: jis0212<<14 | 0x34<<7 | 0x28,
	32778 - 19968: jis0212<<14 | 0x34<<7 | 0x29,
	32779 - 19968: jis0208<<14 | 0x45<<7 | 0x2E,
	32780 - 19968: jis0208<<14 | 0x1B<<7 | 0x08,
	32781 - 19968: jis0212<<14 | 0x34<<7 | 0x2A,
	32782 - 19968: jis0212<<14 | 0x34<<7 | 0x2B,
	32783 - 19968: jis0212<<14 | 0x34<<7 | 0x2C,
	32784 - 19968: jis0208<<14 | 0x21<<7 | 0x30,
	32785 - 19968: jis0212<<14 | 0x34<<7 | 0x2D,
	32786 - 19968: jis0208<<14 | 0x45<<7 | 0x2F,
	32787 - 19968: jis0212<<14 | 0x34<<7 | 0x2E,
	32788 - 19968: jis0212<<14 | 0x34<<7 | 0x2F,
	32789 - 19968: jis0208<<14 | 0x18<<7 | 0x2B,
	32790 - 19968: jis0212<<14 | 0x34<<7 | 0x30,
	32791 - 19968: jis0208<<14 | 0x2B<<7 | 0x36,
	32792 - 19968: jis0208<<14 | 0x45<<7 | 0x30,
	32793 - 19968: jis0208<<14 | 0x45<<7 | 0x31,
	32796 - 19968: jis0208<<14 | 0x45<<7 | 0x32,
	32797 - 19968: jis0212<<14 | 0x34<<7 | 0x31,
	32798 - 19968: jis0212<<14 | 0x34<<7 | 0x32,
	32799 - 19968: jis0212<<14 | 0x34<<7 | 0x33,
	32800 - 19968: jis0212<<14 | 0x34<<7 | 0x34,
	32801 - 19968: jis0208<<14 | 0x45<<7 | 0x33,
	32804 - 19968: jis0212<<14 | 0x34<<7 | 0x35,
	32806 - 19968: jis0212<<14 | 0x34<<7 | 0x36,
	32808 - 19968: jis0208<<14 | 0x45<<7 | 0x34,
	32812 - 19968: jis0212<<14 | 0x34<<7 | 0x37,
	32814 - 19968: jis0212<<14 | 0x34<<7 | 0x38,
	32816 - 19968: jis0212<<14 | 0x34<<7 | 0x39,
	32819 - 19968: jis0208<<14 | 0x1B<<7 | 0x09,
	32820 - 19968: jis0212<<14 | 0x34<<7 | 0x3A,
	32821 - 19968: jis0212<<14 | 0x34<<7 | 0x3B,
	32822 - 19968: jis0208<<14 | 0x2B<<7 | 0x4C,
	32823 - 19968: jis0212<<14 | 0x34<<7 | 0x3C,
	32825 - 19968: jis0212<<14 | 0x34<<7 | 0x3D,
	32826 - 19968: jis0212<<14 | 0x34<<7 | 0x3E,
	32827 - 19968: jis0208<<14 | 0x45<<7 | 0x36,
	32828 - 19968: jis0212<<14 | 0x34<<7 | 0x3F,
	32829 - 19968: jis0208<<14 | 0x22<<7 | 0x1E,
	32830 - 19968: jis0212<<14 | 0x34<<7 | 0x40,
	32831 - 19968: jis0208<<14 | 0x45<<7 | 0x35,
	32832 - 19968: jis0212<<14 | 0x34<<7 | 0x41,
	32836 - 19968: jis0212<<14 | 0x34<<7 | 0x42,
	32838 - 19968: jis0208<<14 | 0x45<<7 | 0x38,
	32842 - 19968: jis0208<<14 | 0x45<<7 | 0x37,
	32850 - 19968: jis0208<<14 | 0x45<<7 | 0x39,
	32854 - 19968: jis0208<<14 | 0x1F<<7 | 0x1A,
	32856 - 19968: jis0208<<14 | 0x45<<7 | 0x3A,
	32858 - 19968: jis0208<<14 | 0x45<<7 | 0x3B,
	32862 - 19968: jis0208<<14 | 0x29<<7 | 0x18,
	32863 - 19968: jis0208<<14 | 0x45<<7 | 0x3C,
	32864 - 19968: jis0212<<14 | 0x34<<7 | 0x43,
	32865 - 19968: jis0208<<14 | 0x20<<7 | 0x4E,
	32866 - 19968: jis0208<<14 | 0x45<<7 | 0x3D,
	32868 - 19968: jis0212<<14 | 0x34<<7 | 0x44,
	32870 - 19968: jis0212<<14 | 0x34<<7 | 0x45,
	32872 - 19968: jis0208<<14 | 0x45<<7 | 0x3E,
	32877 - 19968: jis0212<<14 | 0x34<<7 | 0x46,
	32879 - 19968: jis0208<<14 | 0x2D<<7 | 0x5D,
	32880 - 19968: jis0208<<14 | 0x45<<7 | 0x41,
	32881 - 19968: jis0212<<14 | 0x34<<7 | 0x47,
	32882 - 19968: jis0208<<14 | 0x45<<7 | 0x40,
	32883 - 19968: jis0208<<14 | 0x45<<7 | 0x3F,
	32884 - 19968: jis0208<<14 | 0x23<<7 | 0x0F,
	32885 - 19968: jis0212<<14 | 0x34<<7 | 0x48,
	32886 - 19968: jis0208<<14 | 0x45<<7 | 0x42,
	32887 - 19968: jis0208<<14 | 0x1E<<7 | 0x05,
	32889 - 19968: jis0208<<14 | 0x45<<7 | 0x43,
	32893 - 19968: jis0208<<14 | 0x45<<7 | 0x44,
	32894 - 19968: jis0208<<14 | 0x2E<<7 | 0x17,
	32895 - 19968: jis0208<<14 | 0x45<<7 | 0x45,
	32897 - 19968: jis0212<<14 | 0x34<<7 | 0x49,
	32900 - 19968: jis0208<<14 | 0x45<<7 | 0x46,
	32901 - 19968: jis0208<<14 | 0x45<<7 | 0x48,
	32902 - 19968: jis0208<<14 | 0x45<<7 | 0x47,
	32903 - 19968: jis0208<<14 | 0x27<<7 | 0x04,
	32904 - 19968: jis0212<<14 | 0x34<<7 | 0x4A,
	32905 - 19968: jis0208<<14 | 0x25<<7 | 0x58,
	32907 - 19968: jis0208<<14 | 0x2E<<7 | 0x1D,
	32908 - 19968: jis0208<<14 | 0x27<<7 | 0x08,
	32910 - 19968: jis0212<<14 | 0x34<<7 | 0x4B,
	32915 - 19968: jis0208<<14 | 0x45<<7 | 0x4A,
	32918 - 19968: jis0208<<14 | 0x1D<<7 | 0x32,
	32920 - 19968: jis0208<<14 | 0x28<<7 | 0x09,
	32922 - 19968: jis0208<<14 | 0x45<<7 | 0x4B,
	32923 - 19968: jis0208<<14 | 0x45<<7 | 0x49,
	32924 - 19968: jis0212<<14 | 0x34<<7 | 0x4C,
	32925 - 19968: jis0208<<14 | 0x13<<7 | 0x2D,
	32926 - 19968: jis0212<<14 | 0x34<<7 | 0x4D,
	32929 - 19968: jis0208<<14 | 0x17<<7 | 0x33,
	32930 - 19968: jis0208<<14 | 0x1A<<7 | 0x47,
	32933 - 19968: jis0208<<14 | 0x27<<7 | 0x4D,
	32934 - 19968: jis0212<<14 | 0x34<<7 | 0x4E,
	32935 - 19968: jis0212<<14 | 0x34<<7 | 0x4F,
	32937 - 19968: jis0208<<14 | 0x17<<7 | 0x09,
	32938 - 19968: jis0208<<14 | 0x2A<<7 | 0x22,
	32939 - 19968: jis0212<<14 | 0x34<<7 | 0x50,
	32940 - 19968: jis0208<<14 | 0x45<<7 | 0x4E,
	32941 - 19968: jis0208<<14 | 0x45<<7 | 0x4C,
	32943 - 19968: jis0208<<14 | 0x18<<7 | 0x2D,
	32945 - 19968: jis0208<<14 | 0x18<<7 | 0x2E,
	32946 - 19968: jis0208<<14 | 0x0F<<7 | 0x48,
	32948 - 19968: jis0208<<14 | 0x19<<7 | 0x47,
	32952 - 19968: jis0212<<14 | 0x34<<7 | 0x51,
	32953 - 19968: jis0212<<14 | 0x34<<7 | 0x52,
	32954 - 19968: jis0208<<14 | 0x26<<7 | 0x38,
	32963 - 19968: jis0208<<14 | 0x0F<<7 | 0x3E,
	32964 - 19968: jis0208<<14 | 0x45<<7 | 0x53,
	32966 - 19968: jis0208<<14 | 0x22<<7 | 0x1F,
	32968 - 19968: jis0212<<14 | 0x34<<7 | 0x53,
	32972 - 19968: jis0208<<14 | 0x26<<7 | 0x37,
	32973 - 19968: jis0212<<14 | 0x34<<7 | 0x54,
	32974 - 19968: jis0208<<14 | 0x21<<7 | 0x3A,
	32975 - 19968: jis0212<<14 | 0x34<<7 | 0x55,
	32978 - 19968: jis0212<<14 | 0x34<<7 | 0x56,
	32980 - 19968: jis0212<<14 | 0x34<<7 | 0x57,
	32981 - 19968: jis0212<<14 | 0x34<<7 | 0x58,
	32982 - 19968: jis0208<<14 | 0x45<<7 | 0x55,
	32983 - 19968: jis0212<<14 | 0x34<<7 | 0x59,
	32984 - 19968: jis0212<<14 | 0x34<<7 | 0x5A,
	32985 - 19968: jis0208<<14 | 0x45<<7 | 0x51,
	32986 - 19968: jis0208<<14 | 0x45<<7 | 0x54,
	32987 - 19968: jis0208<<14 | 0x45<<7 | 0x4F,
	32989 - 19968: jis0208<<14 | 0x45<<7 | 0x52,
	32990 - 19968: jis0208<<14 | 0x2A<<7 | 0x05,
	32992 - 19968: jis0212<<14 | 0x34<<7 | 0x5B,
	32993 - 19968: jis0208<<14 | 0x17<<7 | 0x34,
	32996 - 19968: jis0208<<14 | 0x0F<<7 | 0x5C,
	32997 - 19968: jis0208<<14 | 0x45<<7 | 0x50,
	33005 - 19968: jis0212<<14 | 0x34<<7 | 0x5C,
	33006 - 19968: jis0212<<14 | 0x34<<7 | 0x5D,
	33007 - 19968: jis0208<<14 | 0x45<<7 | 0x57,
	33008 - 19968: jis0212<<14 | 0x35<<7 | 0x00,
	33009 - 19968: jis0208<<14 | 0x45<<7 | 0x58,
	33010 - 19968: jis0212<<14 | 0x35<<7 | 0x01,
	33011 - 19968: jis0212<<14 | 0x35<<7 | 0x02,
	33012 - 19968: jis0208<<14 | 0x25<<7 | 0x18,
	33014 - 19968: jis0212<<14 | 0x35<<7 | 0x03,
	33016 - 19968: jis0208<<14 | 0x15<<7 | 0x1A,
	33017 - 19968: jis0212<<14 | 0x35<<7 | 0x04,
	33018 - 19968: jis0212<<14 | 0x35<<7 | 0x05,
	33020 - 19968: jis0208<<14 | 0x46<<7 | 0x05,
	33021 - 19968: jis0208<<14 | 0x26<<7 | 0x1C,
	33022 - 19968: jis0212<<14 | 0x35<<7 | 0x06,
	33026 - 19968: jis0208<<14 | 0x1A<<7 | 0x48,
	33027 - 19968: jis0212<<14 | 0x35<<7 | 0x07,
	33029 - 19968: jis0208<<14 | 0x15<<7 | 0x1B,
	33030 - 19968: jis0208<<14 | 0x1F<<7 | 0x27,
	33031 - 19968: jis0208<<14 | 0x2E<<7 | 0x25,
	33032 - 19968: jis0208<<14 | 0x2B<<7 | 0x0D,
	33033 - 19968: jis0208<<14 | 0x45<<7 | 0x56,
	33034 - 19968: jis0208<<14 | 0x1F<<7 | 0x33,
	33035 - 19968: jis0212<<14 | 0x35<<7 | 0x08,
	33046 - 19968: jis0212<<14 | 0x35<<7 | 0x09,
	33047 - 19968: jis0212<<14 | 0x35<<7 | 0x0A,
	33048 - 19968: jis0212<<14 | 0x35<<7 | 0x0B,
	33050 - 19968: jis0208<<14 | 0x14<<7 | 0x32,
	33051 - 19968: jis0208<<14 | 0x45<<7 | 0x59,
	33052 - 19968: jis0212<<14 | 0x35<<7 | 0x0C,
	33054 - 19968: jis0212<<14 | 0x35<<7 | 0x0D,
	33056 - 19968: jis0212<<14 | 0x35<<7 | 0x0E,
	33059 - 19968: jis0208<<14 | 0x45<<7 | 0x5B,
	33060 - 19968: jis0212<<14 | 0x35<<7 | 0x0F,
	33063 - 19968: jis0212<<14 | 0x35<<7 | 0x10,
	33065 - 19968: jis0208<<14 | 0x45<<7 | 0x5A,
	33068 - 19968: jis0212<<14 | 0x35<<7 | 0x11,
	33071 - 19968: jis0208<<14 | 0x45<<7 | 0x5C,
	33072 - 19968: jis0212<<14 | 0x35<<7 | 0x12,
	33073 - 19968: jis0208<<14 | 0x22<<7 | 0x05,
	33075 - 19968: jis0208<<14 | 0x26<<7 | 0x1D,
	33077 - 19968: jis0212<<14 | 0x35<<7 | 0x13,
	33081 - 19968: jis0208<<14 | 0x23<<7 | 0x10,
	33082 - 19968: jis0212<<14 | 0x35<<7 | 0x14,
	33084 - 19968: jis0212<<14 | 0x35<<7 | 0x15,
	33086 - 19968: jis0208<<14 | 0x46<<7 | 0x02,
	33093 - 19968: jis0212<<14 | 0x35<<7 | 0x16,
	33094 - 19968: jis0208<<14 | 0x46<<7 | 0x01,
	33095 - 19968: jis0212<<14 | 0x35<<7 | 0x17,
	33098 - 19968: jis0212<<14 | 0x35<<7 | 0x18,
	33099 - 19968: jis0208<<14 | 0x45<<7 | 0x5D,
	33100 - 19968: jis0212<<14 | 0x35<<7 | 0x19,
	33102 - 19968: jis0208<<14 | 0x1E<<7 | 0x34,
	33104 - 19968: jis0208<<14 | 0x28<<7 | 0x44,
	33105 - 19968: jis0208<<14 | 0x46<<7 | 0x04,
	33106 - 19968: jis0212<<14 | 0x35<<7 | 0x1A,
	33107 - 19968: jis0208<<14 | 0x46<<7 | 0x03,
	33108 - 19968: jis0208<<14 | 0x18<<7 | 0x2F,
	33109 - 19968: jis0208<<14 | 0x2E<<7 | 0x32,
	33111 - 19968: jis0212<<14 | 0x35<<7 | 0x1B,
	33119 - 19968: jis0208<<14 | 0x46<<7 | 0x14,
	33120 - 19968: jis0212<<14 | 0x35<<7 | 0x1C,
	33121 - 19968: jis0212<<14 | 0x35<<7 | 0x1D,
	33125 - 19968: jis0208<<14 | 0x46<<7 | 0x08,
	33126 - 19968: jis0208<<14 | 0x46<<7 | 0x09,
	33127 - 19968: jis0212<<14 | 0x35<<7 | 0x1E,
	33128 - 19968: jis0212<<14 | 0x35<<7 | 0x1F,
	33129 - 19968: jis0212<<14 | 0x35<<7 | 0x20,
	33131 - 19968: jis0208<<14 | 0x1B<<7 | 0x4F,
	33133 - 19968: jis0212<<14 | 0x35<<7 | 0x21,
	33134 - 19968: jis0208<<14 | 0x46<<7 | 0x07,
	33135 - 19968: jis0212<<14 | 0x35<<7 | 0x22,
	33136 - 19968: jis0208<<14 | 0x18<<7 | 0x57,
	33137 - 19968: jis0208<<14 | 0x46<<7 | 0x06,
	33140 - 19968: jis0208<<14 | 0x46<<7 | 0x0A,
	33143 - 19968: jis0212<<14 | 0x35<<7 | 0x23,
	33144 - 19968: jis0208<<14 | 0x23<<7 | 0x11,
	33145 - 19968: jis0208<<14 | 0x29<<7 | 0x01,
	33146 - 19968: jis0208<<14 | 0x20<<7 | 0x02,
	33151 - 19968: jis0208<<14 | 0x21<<7 | 0x3B,
	33152 - 19968: jis0208<<14 | 0x46<<7 | 0x0E,
	33153 - 19968: jis0212<<14 | 0x35<<7 | 0x24,
	33154 - 19968: jis0208<<14 | 0x46<<7 | 0x0F,
	33155 - 19968: jis0208<<14 | 0x46<<7 | 0x0B,
	33156 - 19968: jis0212<<14 | 0x35<<7 | 0x26,
	33157 - 19968: jis0212<<14 | 0x35<<7 | 0x27,
	33158 - 19968: jis0212<<14 | 0x35<<7 | 0x28,
	33160 - 19968: jis0208<<14 | 0x46<<7 | 0x0C,
	33162 - 19968: jis0208<<14 | 0x46<<7 | 0x0D,
	33163 - 19968: jis0212<<14 | 0x35<<7 | 0x29,
	33166 - 19968: jis0212<<14 | 0x35<<7 | 0x2A,
	33167 - 19968: jis0208<<14 | 0x18<<7 | 0x30,
	33168 - 19968: jis0212<<14 | 0x35<<7 | 0x25,
	33171 - 19968: jis0208<<14 | 0x46<<7 | 0x15,
	33173 - 19968: jis0208<<14 | 0x46<<7 | 0x11,
	33174 - 19968: jis0212<<14 | 0x35<<7 | 0x2B,
	33176 - 19968: jis0212<<14 | 0x35<<7 | 0x2C,
	33178 - 19968: jis0208<<14 | 0x28<<7 | 0x45,
	33179 - 19968: jis0212<<14 | 0x35<<7 | 0x2D,
	33180 - 19968: jis0208<<14 | 0x2A<<7 | 0x4B,
	33181 - 19968: jis0208<<14 | 0x28<<7 | 0x07,
	33182 - 19968: jis0212<<14 | 0x35<<7 | 0x2E,
	33184 - 19968: jis0208<<14 | 0x46<<7 | 0x10,
	33186 - 19968: jis0212<<14 | 0x35<<7 | 0x2F,
	33187 - 19968: jis0208<<14 | 0x46<<7 | 0x13,
	33188 - 19968: jis0208<<14 | 0x46<<7 | 0x12,
	33192 - 19968: jis0208<<14 | 0x2A<<7 | 0x23,
	33193 - 19968: jis0208<<14 | 0x46<<7 | 0x16,
	33198 - 19968: jis0212<<14 | 0x35<<7 | 0x30,
	33200 - 19968: jis0208<<14 | 0x46<<7 | 0x17,
	33202 - 19968: jis0212<<14 | 0x35<<7 | 0x31,
	33203 - 19968: jis0208<<14 | 0x20<<7 | 0x16,
	33204 - 19968: jis0212<<14 | 0x35<<7 | 0x32,
	33205 - 19968: jis0208<<14 | 0x46<<7 | 0x18,
	33208 - 19968: jis0208<<14 | 0x46<<7 | 0x1A,
	33210 - 19968: jis0208<<14 | 0x46<<7 | 0x1E,
	33211 - 19968: jis0212<<14 | 0x35<<7 | 0x33,
	33213 - 19968: jis0208<<14 | 0x46<<7 | 0x1B,
	33214 - 19968: jis0208<<14 | 0x46<<7 | 0x19,
	33215 - 19968: jis0208<<14 | 0x26<<7 | 0x1E,
	33216 - 19968: jis0208<<14 | 0x46<<7 | 0x1C,
	33218 - 19968: jis0208<<14 | 0x46<<7 | 0x1D,
	33219 - 19968: jis0212<<14 | 0x35<<7 | 0x35,
	33221 - 19968: jis0212<<14 | 0x35<<7 | 0x36,
	33222 - 19968: jis0208<<14 | 0x11<<7 | 0x11,
	33224 - 19968: jis0208<<14 | 0x46<<7 | 0x24,
	33225 - 19968: jis0208<<14 | 0x46<<7 | 0x1F,
	33226 - 19968: jis0212<<14 | 0x35<<7 | 0x37,
	33227 - 19968: jis0212<<14 | 0x35<<7 | 0x34,
	33229 - 19968: jis0208<<14 | 0x46<<7 | 0x20,
	33230 - 19968: jis0212<<14 | 0x35<<7 | 0x38,
	33231 - 19968: jis0212<<14 | 0x35<<7 | 0x39,
	33233 - 19968: jis0208<<14 | 0x46<<7 | 0x21,
	33235 - 19968: jis0208<<14 | 0x21<<7 | 0x00,
	33237 - 19968: jis0212<<14 | 0x35<<7 | 0x3A,
	33239 - 19968: jis0212<<14 | 0x35<<7 | 0x3B,
	33240 - 19968: jis0208<<14 | 0x46<<7 | 0x23,
	33241 - 19968: jis0208<<14 | 0x46<<7 | 0x22,
	33242 - 19968: jis0208<<14 | 0x46<<7 | 0x25,
	33243 - 19968: jis0212<<14 | 0x35<<7 | 0x3C,
	33245 - 19968: jis0212<<14 | 0x35<<7 | 0x3D,
	33246 - 19968: jis0212<<14 | 0x35<<7 | 0x3E,
	33247 - 19968: jis0208<<14 | 0x46<<7 | 0x26,
	33248 - 19968: jis0208<<14 | 0x46<<7 | 0x27,
	33249 - 19968: jis0212<<14 | 0x35<<7 | 0x3F,
	33251 - 19968: jis0208<<14 | 0x1E<<7 | 0x22,
	33252 - 19968: jis0212<<14 | 0x35<<7 | 0x40,
	33253 - 19968: jis0208<<14 | 0x11<<7 | 0x48,
	33255 - 19968: jis0208<<14 | 0x46<<7 | 0x28,
	33256 - 19968: jis0208<<14 | 0x2D<<7 | 0x36,
	33258 - 19968: jis0208<<14 | 0x1B<<7 | 0x0A,
	33259 - 19968: jis0212<<14 | 0x35<<7 | 0x41,
	33260 - 19968: jis0212<<14 | 0x35<<7 | 0x42,
	33261 - 19968: jis0208<<14 | 0x1C<<7 | 0x0C,
	33264 - 19968: jis0212<<14 | 0x35<<7 | 0x43,
	33265 - 19968: jis0212<<14 | 0x35<<7 | 0x44,
	33266 - 19968: jis0212<<14 | 0x35<<7 | 0x45,
	33267 - 19968: jis0208<<14 | 0x1A<<7 | 0x49,
	33268 - 19968: jis0208<<14 | 0x22<<7 | 0x36,
	33269 - 19968: jis0212<<14 | 0x35<<7 | 0x46,
	33270 - 19968: jis0212<<14 | 0x35<<7 | 0x47,
	33272 - 19968: jis0212<<14 | 0x35<<7 | 0x48,
	33273 - 19968: jis0212<<14 | 0x35<<7 | 0x49,
	33274 - 19968: jis0208<<14 | 0x46<<7 | 0x29,
	33275 - 19968: jis0208<<14 | 0x46<<7 | 0x2A,
	33276 - 19968: jis0208<<14 | 0x10<<7 | 0x10,
	33277 - 19968: jis0212<<14 | 0x35<<7 | 0x4A,
	33278 - 19968: jis0208<<14 | 0x46<<7 | 0x2B,
	33279 - 19968: jis0212<<14 | 0x35<<7 | 0x4B,
	33280 - 19968: jis0212<<14 | 0x35<<7 | 0x4C,
	33281 - 19968: jis0208<<14 | 0x46<<7 | 0x2C,
	33282 - 19968: jis0208<<14 | 0x46<<7 | 0x2D,
	33283 - 19968: jis0212<<14 | 0x35<<7 | 0x4D,
	33285 - 19968: jis0208<<14 | 0x46<<7 | 0x2E,
	33287 - 19968: jis0208<<14 | 0x46<<7 | 0x2F,
	33288 - 19968: jis0208<<14 | 0x15<<7 | 0x1C,
	33289 - 19968: jis0208<<14 | 0x39<<7 | 0x09,
	33290 - 19968: jis0208<<14 | 0x46<<7 | 0x30,
	33292 - 19968: jis0208<<14 | 0x1F<<7 | 0x44,
	33293 - 19968: jis0208<<14 | 0x46<<7 | 0x31,
	33294 - 19968: jis0208<<14 | 0x1B<<7 | 0x2A,
	33295 - 19968: jis0212<<14 | 0x35<<7 | 0x4E,
	33296 - 19968: jis0208<<14 | 0x46<<7 | 0x32,
	33298 - 19968: jis0208<<14 | 0x2F<<7 | 0x0F,
	33299 - 19968: jis0212<<14 | 0x35<<7 | 0x4F,
	33300 - 19968: jis0212<<14 | 0x35<<7 | 0x50,
	33302 - 19968: jis0208<<14 | 0x46<<7 | 0x33,
	33303 - 19968: jis0208<<14 | 0x29<<7 | 0x3D,
	33304 - 19968: jis0208<<14 | 0x13<<7 | 0x3B,
	33305 - 19968: jis0212<<14 | 0x35<<7 | 0x51,
	33306 - 19968: jis0212<<14 | 0x35<<7 | 0x52,
	33307 - 19968: jis0208<<14 | 0x20<<7 | 0x03,
	33308 - 19968: jis0208<<14 | 0x1C<<7 | 0x37,
	33309 - 19968: jis0212<<14 | 0x35<<7 | 0x53,
	33310 - 19968: jis0208<<14 | 0x28<<7 | 0x50,
	33311 - 19968: jis0208<<14 | 0x1C<<7 | 0x0D,
	33313 - 19968: jis0212<<14 | 0x35<<7 | 0x54,
	33314 - 19968: jis0212<<14 | 0x35<<7 | 0x55,
	33320 - 19968: jis0212<<14 | 0x35<<7 | 0x56,
	33321 - 19968: jis0208<<14 | 0x46<<7 | 0x34,
	33322 - 19968: jis0208<<14 | 0x18<<7 | 0x31,
	33323 - 19968: jis0208<<14 | 0x46<<7 | 0x35,
	33324 - 19968: jis0208<<14 | 0x27<<7 | 0x2B,
	33326 - 19968: jis0208<<14 | 0x46<<7 | 0x43,
	33330 - 19968: jis0212<<14 | 0x35<<7 | 0x57,
	33331 - 19968: jis0208<<14 | 0x46<<7 | 0x37,
	33332 - 19968: jis0212<<14 | 0x35<<7 | 0x58,
	33333 - 19968: jis0208<<14 | 0x21<<7 | 0x28,
	33334 - 19968: jis0208<<14 | 0x26<<7 | 0x54,
	33335 - 19968: jis0208<<14 | 0x17<<7 | 0x1E,
	33336 - 19968: jis0208<<14 | 0x46<<7 | 0x36,
	33337 - 19968: jis0208<<14 | 0x20<<7 | 0x04,
	33338 - 19968: jis0212<<14 | 0x35<<7 | 0x59,
	33344 - 19968: jis0208<<14 | 0x46<<7 | 0x38,
	33347 - 19968: jis0212<<14 | 0x35<<7 | 0x5A,
	33348 - 19968: jis0212<<14 | 0x35<<7 | 0x5B,
	33349 - 19968: jis0212<<14 | 0x35<<7 | 0x5C,
	33350 - 19968: jis0212<<14 | 0x35<<7 | 0x5D,
	33351 - 19968: jis0208<<14 | 0x23<<7 | 0x59,
	33355 - 19968: jis0212<<14 | 0x36<<7 | 0x00,
	33358 - 19968: jis0212<<14 | 0x36<<7 | 0x01,
	33359 - 19968: jis0212<<14 | 0x36<<7 | 0x02,
	33361 - 19968: jis0212<<14 | 0x36<<7 | 0x03,
	33366 - 19968: jis0212<<14 | 0x36<<7 | 0x04,
	33368 - 19968: jis0208<<14 | 0x46<<7 | 0x3A,
	33369 - 19968: jis0208<<14 | 0x46<<7 | 0x39,
	33370 - 19968: jis0208<<14 | 0x46<<7 | 0x3C,
	33372 - 19968: jis0212<<14 | 0x36<<7 | 0x05,
	33373 - 19968: jis0208<<14 | 0x46<<7 | 0x3B,
	33375 - 19968: jis0208<<14 | 0x46<<7 | 0x3D,
	33376 - 19968: jis0212<<14 | 0x36<<7 | 0x06,
	33378 - 19968: jis0208<<14 | 0x46<<7 | 0x3F,
	33379 - 19968: jis0212<<14 | 0x36<<7 | 0x07,
	33380 - 19968: jis0208<<14 | 0x46<<7 | 0x3E,
	33382 - 19968: jis0208<<14 | 0x13<<7 | 0x2E,
	33383 - 19968: jis0212<<14 | 0x36<<7 | 0x08,
	33384 - 19968: jis0208<<14 | 0x46<<7 | 0x40,
	33386 - 19968: jis0208<<14 | 0x46<<7 | 0x41,
	33387 - 19968: jis0208<<14 | 0x46<<7 | 0x42,
	33389 - 19968: jis0212<<14 | 0x36<<7 | 0x09,
	33390 - 19968: jis0208<<14 | 0x19<<7 | 0x10,
	33391 - 19968: jis0208<<14 | 0x2D<<7 | 0x28,
	33393 - 19968: jis0208<<14 | 0x46<<7 | 0x44,
	33394 - 19968: jis0208<<14 | 0x1E<<7 | 0x06,
	33396 - 19968: jis0212<<14 | 0x36<<7 | 0x0A,
	33398 - 19968: jis0208<<14 | 0x10<<7 | 0x4F,
	33399 - 19968: jis0208<<14 | 0x46<<7 | 0x45,
	33400 - 19968: jis0208<<14 | 0x46<<7 | 0x46,
	33403 - 19968: jis0212<<14 | 0x36<<7 | 0x0B,
	33405 - 19968: jis0212<<14 | 0x36<<7 | 0x0C,
	33406 - 19968: jis0208<<14 | 0x46<<7 | 0x47,
	33407 - 19968: jis0212<<14 | 0x36<<7 | 0x0D,
	33408 - 19968: jis0212<<14 | 0x36<<7 | 0x0E,
	33409 - 19968: jis0212<<14 | 0x36<<7 | 0x0F,
	33411 - 19968: jis0212<<14 | 0x36<<7 | 0x10,
	33412 - 19968: jis0212<<14 | 0x36<<7 | 0x11,
	33415 - 19968: jis0212<<14 | 0x36<<7 | 0x12,
	33417 - 19968: jis0212<<14 | 0x36<<7 | 0x13,
	33418 - 19968: jis0212<<14 | 0x36<<7 | 0x14,
	33419 - 19968: jis0208<<14 | 0x0F<<7 | 0x51,
	33421 - 19968: jis0208<<14 | 0x46<<7 | 0x48,
	33422 - 19968: jis0212<<14 | 0x36<<7 | 0x15,
	33425 - 19968: jis0212<<14 | 0x36<<7 | 0x16,
	33426 - 19968: jis0208<<14 | 0x46<<7 | 0x49,
	33428 - 19968: jis0212<<14 | 0x36<<7 | 0x17,
	33430 - 19968: jis0212<<14 | 0x36<<7 | 0x18,
	33432 - 19968: jis0212<<14 | 0x36<<7 | 0x19,
	33433 - 19968: jis0208<<14 | 0x28<<7 | 0x46,
	33434 - 19968: jis0212<<14 | 0x36<<7 | 0x1A,
	33435 - 19968: jis0212<<14 | 0x36<<7 | 0x1B,
	33437 - 19968: jis0208<<14 | 0x1B<<7 | 0x26,
	33439 - 19968: jis0208<<14 | 0x46<<7 | 0x4B,
	33440 - 19968: jis0212<<14 | 0x36<<7 | 0x1C,
	33441 - 19968: jis0212<<14 | 0x36<<7 | 0x1D,
	33443 - 19968: jis0212<<14 | 0x36<<7 | 0x1E,
	33444 - 19968: jis0212<<14 | 0x36<<7 | 0x1F,
	33445 - 19968: jis0208<<14 | 0x12<<7 | 0x08,
	33446 - 19968: jis0208<<14 | 0x0F<<7 | 0x11,
	33447 - 19968: jis0212<<14 | 0x36<<7 | 0x20,
	33448 - 19968: jis0212<<14 | 0x36<<7 | 0x21,
	33449 - 19968: jis0212<<14 | 0x36<<7 | 0x22,
	33450 - 19968: jis0212<<14 | 0x36<<7 | 0x23,
	33451 - 19968: jis0208<<14 | 0x46<<7 | 0x4A,
	33452 - 19968: jis0208<<14 | 0x46<<7 | 0x4D,
	33453 - 19968: jis0208<<14 | 0x26<<7 | 0x2D,
	33454 - 19968: jis0212<<14 | 0x36<<7 | 0x24,
	33455 - 19968: jis0208<<14 | 0x1E<<7 | 0x23,
	33456 - 19968: jis0212<<14 | 0x36<<7 | 0x25,
	33457 - 19968: jis0208<<14 | 0x11<<7 | 0x35,
	33458 - 19968: jis0212<<14 | 0x36<<7 | 0x26,
	33459 - 19968: jis0208<<14 | 0x2A<<7 | 0x06,
	33460 - 19968: jis0212<<14 | 0x36<<7 | 0x27,
	33463 - 19968: jis0212<<14 | 0x36<<7 | 0x28,
	33464 - 19968: jis0208<<14 | 0x16<<7 | 0x3C,
	33465 - 19968: jis0208<<14 | 0x15<<7 | 0x3B,
	33466 - 19968: jis0212<<14 | 0x36<<7 | 0x29,
	33467 - 19968: jis0208<<14 | 0x46<<7 | 0x4C,
	33468 - 19968: jis0212<<14 | 0x36<<7 | 0x2A,
	33469 - 19968: jis0208<<14 | 0x11<<7 | 0x49,
	33470 - 19968: jis0212<<14 | 0x36<<7 | 0x2B,
	33471 - 19968: jis0212<<14 | 0x36<<7 | 0x2C,
	33477 - 19968: jis0208<<14 | 0x13<<7 | 0x02,
	33478 - 19968: jis0212<<14 | 0x36<<7 | 0x2D,
	33488 - 19968: jis0212<<14 | 0x36<<7 | 0x2E,
	33489 - 19968: jis0208<<14 | 0x10<<7 | 0x50,
	33490 - 19968: jis0208<<14 | 0x46<<7 | 0x51,
	33491 - 19968: jis0208<<14 | 0x2D<<7 | 0x49,
	33492 - 19968: jis0208<<14 | 0x21<<7 | 0x3C,
	33493 - 19968: jis0212<<14 | 0x36<<7 | 0x2F,
	33495 - 19968: jis0208<<14 | 0x28<<7 | 0x23,
	33497 - 19968: jis0208<<14 | 0x46<<7 | 0x5D,
	33498 - 19968: jis0212<<14 | 0x36<<7 | 0x30,
	33499 - 19968: jis0208<<14 | 0x11<<7 | 0x36,
	33500 - 19968: jis0208<<14 | 0x46<<7 | 0x5B,
	33502 - 19968: jis0208<<14 | 0x46<<7 | 0x59,
	33503 - 19968: jis0208<<14 | 0x46<<7 | 0x50,
	33504 - 19968: jis0212<<14 | 0x36<<7 | 0x31,
	33505 - 19968: jis0208<<14 | 0x46<<7 | 0x4E,
	33506 - 19968: jis0212<<14 | 0x36<<7 | 0x32,
	33507 - 19968: jis0208<<14 | 0x46<<7 | 0x4F,
	33508 - 19968: jis0212<<14 | 0x36<<7 | 0x33,
	33509 - 19968: jis0208<<14 | 0x1B<<7 | 0x42,
	33510 - 19968: jis0208<<14 | 0x15<<7 | 0x4B,
	33511 - 19968: jis0208<<14 | 0x22<<7 | 0x56,
	33512 - 19968: jis0212<<14 | 0x36<<7 | 0x34,
	33514 - 19968: jis0212<<14 | 0x36<<7 | 0x35,
	33515 - 19968: jis0208<<14 | 0x25<<7 | 0x30,
	33517 - 19968: jis0212<<14 | 0x36<<7 | 0x36,
	33519 - 19968: jis0212<<14 | 0x36<<7 | 0x37,
	33521 - 19968: jis0208<<14 | 0x10<<7 | 0x30,
	33523 - 19968: jis0208<<14 | 0x46<<7 | 0x53,
	33524 - 19968: jis0208<<14 | 0x46<<7 | 0x52,
	33526 - 19968: jis0212<<14 | 0x36<<7 | 0x38,
	33527 - 19968: jis0212<<14 | 0x36<<7 | 0x39,
	33529 - 19968: jis0208<<14 | 0x46<<7 | 0x58,
	33530 - 19968: jis0208<<14 | 0x46<<7 | 0x54,
	33531 - 19968: jis0208<<14 | 0x46<<7 | 0x57,
	33533 - 19968: jis0212<<14 | 0x36<<7 | 0x3A,
	33534 - 19968: jis0212<<14 | 0x36<<7 | 0x3B,
	33536 - 19968: jis0212<<14 | 0x36<<7 | 0x3C,
	33537 - 19968: jis0208<<14 | 0x5A<<7 | 0x36,
	33538 - 19968: jis0208<<14 | 0x2B<<7 | 0x2F,
	33539 - 19968: jis0208<<14 | 0x46<<7 | 0x56,
	33540 - 19968: jis0208<<14 | 0x11<<7 | 0x37,
	33541 - 19968: jis0208<<14 | 0x12<<7 | 0x5C,
	33542 - 19968: jis0208<<14 | 0x46<<7 | 0x5A,
	33543 - 19968: jis0212<<14 | 0x36<<7 | 0x3E,
	33544 - 19968: jis0212<<14 | 0x36<<7 | 0x3F,
	33545 - 19968: jis0208<<14 | 0x46<<7 | 0x5C,
	33546 - 19968: jis0212<<14 | 0x36<<7 | 0x40,
	33547 - 19968: jis0212<<14 | 0x36<<7 | 0x41,
	33550 - 19968: jis0208<<14 | 0x16<<7 | 0x33,
	33558 - 19968: jis0208<<14 | 0x47<<7 | 0x02,
	33559 - 19968: jis0208<<14 | 0x47<<7 | 0x0B,
	33560 - 19968: jis0208<<14 | 0x47<<7 | 0x0C,
	33563 - 19968: jis0212<<14 | 0x36<<7 | 0x43,
	33564 - 19968: jis0208<<14 | 0x0F<<7 | 0x0A,
	33565 - 19968: jis0212<<14 | 0x36<<7 | 0x44,
	33566 - 19968: jis0212<<14 | 0x36<<7 | 0x45,
	33567 - 19968: jis0212<<14 | 0x36<<7 | 0x46,
	33569 - 19968: jis0212<<14 | 0x36<<7 | 0x47,
	33570 - 19968: jis0212<<14 | 0x36<<7 | 0x48,
	33571 - 19968: jis0208<<14 | 0x47<<7 | 0x13,
	33576 - 19968: jis0208<<14 | 0x0F<<7 | 0x50,
	33579 - 19968: jis0208<<14 | 0x47<<7 | 0x0A,
	33580 - 19968: jis0212<<14 | 0x36<<7 | 0x49,
	33581 - 19968: jis0212<<14 | 0x36<<7 | 0x4A,
	33582 - 19968: jis0212<<14 | 0x36<<7 | 0x4B,
	33583 - 19968: jis0208<<14 | 0x47<<7 | 0x09,
	33584 - 19968: jis0212<<14 | 0x36<<7 | 0x4C,
	33585 - 19968: jis0208<<14 | 0x47<<7 | 0x04,
	33586 - 19968: jis0208<<14 | 0x47<<7 | 0x03,
	33587 - 19968: jis0212<<14 | 0x36<<7 | 0x4D,
	33588 - 19968: jis0208<<14 | 0x47<<7 | 0x01,
	33589 - 19968: jis0208<<14 | 0x47<<7 | 0x00,
	33590 - 19968: jis0208<<14 | 0x22<<7 | 0x42,
	33591 - 19968: jis0212<<14 | 0x36<<7 | 0x4E,
	33592 - 19968: jis0208<<14 | 0x21<<7 | 0x5A,
	33593 - 19968: jis0208<<14 | 0x47<<7 | 0x06,
	33594 - 19968: jis0212<<14 | 0x36<<7 | 0x4F,
	33596 - 19968: jis0212<<14 | 0x36<<7 | 0x50,
	33597 - 19968: jis0212<<14 | 0x36<<7 | 0x51,
	33600 - 19968: jis0208<<14 | 0x47<<7 | 0x05,
	33602 - 19968: jis0212<<14 | 0x36<<7 | 0x52,
	33603 - 19968: jis0212<<14 | 0x36<<7 | 0x53,
	33604 - 19968: jis0212<<14 | 0x36<<7 | 0x54,
	33605 - 19968: jis0208<<14 | 0x47<<7 | 0x08,
	33607 - 19968: jis0212<<14 | 0x36<<7 | 0x55,
	33609 - 19968: jis0208<<14 | 0x20<<7 | 0x4F,
	33610 - 19968: jis0208<<14 | 0x16<<7 | 0x34,
	33613 - 19968: jis0212<<14 | 0x36<<7 | 0x56,
	33614 - 19968: jis0212<<14 | 0x36<<7 | 0x57,
	33615 - 19968: jis0208<<14 | 0x10<<7 | 0x20,
	33616 - 19968: jis0208<<14 | 0x47<<7 | 0x07,
	33617 - 19968: jis0212<<14 | 0x36<<7 | 0x58,
	33618 - 19968: jis0208<<14 | 0x18<<7 | 0x32,
	33619 - 19968: jis0212<<14 | 0x37<<7 | 0x1D,
	33620 - 19968: jis0212<<14 | 0x36<<7 | 0x42,
	33621 - 19968: jis0212<<14 | 0x36<<7 | 0x59,
	33622 - 19968: jis0212<<14 | 0x36<<7 | 0x5A,
	33623 - 19968: jis0212<<14 | 0x36<<7 | 0x5B,
	33624 - 19968: jis0208<<14 | 0x20<<7 | 0x50,
	33634 - 19968: jis0208<<14 | 0x5A<<7 | 0x37,
	33648 - 19968: jis0212<<14 | 0x36<<7 | 0x5C,
	33651 - 19968: jis0208<<14 | 0x47<<7 | 0x19,
	33653 - 19968: jis0208<<14 | 0x47<<7 | 0x1A,
	33655 - 19968: jis0208<<14 | 0x11<<7 | 0x38,
	33656 - 19968: jis0212<<14 | 0x36<<7 | 0x5D,
	33659 - 19968: jis0208<<14 | 0x11<<7 | 0x0D,
	33660 - 19968: jis0208<<14 | 0x47<<7 | 0x17,
	33661 - 19968: jis0212<<14 | 0x37<<7 | 0x00,
	33663 - 19968: jis0208<<14 | 0x5A<<7 | 0x38,
	33664 - 19968: jis0212<<14 | 0x37<<7 | 0x02,
	33666 - 19968: jis0212<<14 | 0x37<<7 | 0x03,
	33668 - 19968: jis0212<<14 | 0x37<<7 | 0x04,
	33669 - 19968: jis0208<<14 | 0x47<<7 | 0x0D,
	33670 - 19968: jis0212<<14 | 0x37<<7 | 0x05,
	33671 - 19968: jis0208<<14 | 0x47<<7 | 0x15,
	33673 - 19968: jis0208<<14 | 0x47<<7 | 0x1C,
	33674 - 19968: jis0208<<14 | 0x47<<7 | 0x16,
	33677 - 19968: jis0212<<14 | 0x37<<7 | 0x06,
	33678 - 19968: jis0208<<14 | 0x47<<7 | 0x14,
	33682 - 19968: jis0212<<14 | 0x37<<7 | 0x07,
	33683 - 19968: jis0208<<14 | 0x46<<7 | 0x55,
	33684 - 19968: jis0212<<14 | 0x37<<7 | 0x08,
	33685 - 19968: jis0212<<14 | 0x37<<7 | 0x09,
	33686 - 19968: jis0208<<14 | 0x47<<7 | 0x12,
	33688 - 19968: jis0212<<14 | 0x37<<7 | 0x0A,
	33689 - 19968: jis0212<<14 | 0x37<<7 | 0x0B,
	33690 - 19968: jis0208<<14 | 0x47<<7 | 0x0E,
	33691 - 19968: jis0212<<14 | 0x37<<7 | 0x0C,
	33692 - 19968: jis0212<<14 | 0x37<<7 | 0x0D,
	33693 - 19968: jis0212<<14 | 0x37<<7 | 0x0E,
	33694 - 19968: jis0208<<14 | 0x13<<7 | 0x2F,
	33695 - 19968: jis0208<<14 | 0x47<<7 | 0x10,
	33696 - 19968: jis0208<<14 | 0x47<<7 | 0x1B,
	33698 - 19968: jis0208<<14 | 0x47<<7 | 0x11,
	33702 - 19968: jis0212<<14 | 0x37<<7 | 0x0F,
	33703 - 19968: jis0212<<14 | 0x37<<7 | 0x10,
	33704 - 19968: jis0208<<14 | 0x47<<7 | 0x1D,
	33705 - 19968: jis0212<<14 | 0x37<<7 | 0x11,
	33706 - 19968: jis0208<<14 | 0x47<<7 | 0x0F,
	33707 - 19968: jis0208<<14 | 0x26<<7 | 0x5B,
	33708 - 19968: jis0212<<14 | 0x37<<7 | 0x12,
	33709 - 19968: jis0212<<14 | 0x37<<7 | 0x2B,
	33713 - 19968: jis0208<<14 | 0x2C<<7 | 0x48,
	33717 - 19968: jis0208<<14 | 0x47<<7 | 0x18,
	33725 - 19968: jis0208<<14 | 0x47<<7 | 0x2E,
	33726 - 19968: jis0212<<14 | 0x37<<7 | 0x13,
	33727 - 19968: jis0212<<14 | 0x37<<7 | 0x14,
	33728 - 19968: jis0212<<14 | 0x37<<7 | 0x15,
	33729 - 19968: jis0208<<14 | 0x47<<7 | 0x26,
	33733 - 19968: jis0208<<14 | 0x1E<<7 | 0x5A,
	33735 - 19968: jis0208<<14 | 0x5A<<7 | 0x39,
	33737 - 19968: jis0212<<14 | 0x37<<7 | 0x17,
	33738 - 19968: jis0208<<14 | 0x14<<7 | 0x25,
	33740 - 19968: jis0208<<14 | 0x15<<7 | 0x3C,
	33742 - 19968: jis0208<<14 | 0x47<<7 | 0x21,
	33743 - 19968: jis0212<<14 | 0x37<<7 | 0x18,
	33744 - 19968: jis0212<<14 | 0x37<<7 | 0x19,
	33745 - 19968: jis0212<<14 | 0x37<<7 | 0x1A,
	33747 - 19968: jis0208<<14 | 0x11<<7 | 0x3A,
	33748 - 19968: jis0212<<14 | 0x37<<7 | 0x1B,
	33750 - 19968: jis0208<<14 | 0x1D<<7 | 0x33,
	33752 - 19968: jis0208<<14 | 0x47<<7 | 0x24,
	33756 - 19968: jis0208<<14 | 0x19<<7 | 0x39,
	33757 - 19968: jis0212<<14 | 0x37<<7 | 0x1C,
	33759 - 19968: jis0208<<14 | 0x24<<7 | 0x30,
	33760 - 19968: jis0208<<14 | 0x47<<7 | 0x29,
	33768 - 19968: jis0212<<14 | 0x37<<7 | 0x1E,
	33769 - 19968: jis0208<<14 | 0x29<<7 | 0x4D,
	33770 - 19968: jis0212<<14 | 0x37<<7 | 0x1F,
	33771 - 19968: jis0208<<14 | 0x47<<7 | 0x20,
	33775 - 19968: jis0208<<14 | 0x11<<7 | 0x39,
	33776 - 19968: jis0208<<14 | 0x17<<7 | 0x35,
	33777 - 19968: jis0208<<14 | 0x28<<7 | 0x08,
	33778 - 19968: jis0208<<14 | 0x47<<7 | 0x2A,
	33780 - 19968: jis0208<<14 | 0x47<<7 | 0x1E,
	33782 - 19968: jis0208<<14 | 0x5A<<7 | 0x3A,
	33783 - 19968: jis0208<<14 | 0x47<<7 | 0x27,
	33784 - 19968: jis0212<<14 | 0x37<<7 | 0x21,
	33785 - 19968: jis0212<<14 | 0x37<<7 | 0x22,
	33787 - 19968: jis0208<<14 | 0x47<<7 | 0x31,
	33788 - 19968: jis0212<<14 | 0x37<<7 | 0x23,
	33789 - 19968: jis0208<<14 | 0x47<<7 | 0x22,
	33793 - 19968: jis0212<<14 | 0x37<<7 | 0x24,
	33795 - 19968: jis0208<<14 | 0x47<<7 | 0x23,
	33796 - 19968: jis0208<<14 | 0x25<<7 | 0x19,
	33798 - 19968: jis0212<<14 | 0x37<<7 | 0x25,
	33799 - 19968: jis0208<<14 | 0x47<<7 | 0x28,
	33802 - 19968: jis0212<<14 | 0x37<<7 | 0x26,
	33803 - 19968: jis0208<<14 | 0x47<<7 | 0x25,
	33804 - 19968: jis0208<<14 | 0x2A<<7 | 0x07,
	33805 - 19968: jis0208<<14 | 0x47<<7 | 0x2B,
	33806 - 19968: jis0208<<14 | 0x0F<<7 | 0x3F,
	33807 - 19968: jis0212<<14 | 0x37<<7 | 0x27,
	33809 - 19968: jis0212<<14 | 0x37<<7 | 0x28,
	33811 - 19968: jis0208<<14 | 0x47<<7 | 0x1F,
	33813 - 19968: jis0212<<14 | 0x37<<7 | 0x29,
	33817 - 19968: jis0212<<14 | 0x37<<7 | 0x2A,
	33824 - 19968: jis0208<<14 | 0x47<<7 | 0x2D,
	33826 - 19968: jis0208<<14 | 0x47<<7 | 0x2C,
	33833 - 19968: jis0208<<14 | 0x26<<7 | 0x4A,
	33834 - 19968: jis0208<<14 | 0x47<<7 | 0x33,
	33836 - 19968: jis0208<<14 | 0x47<<7 | 0x3E,
	33839 - 19968: jis0212<<14 | 0x37<<7 | 0x2C,
	33841 - 19968: jis0208<<14 | 0x12<<7 | 0x5D,
	33845 - 19968: jis0208<<14 | 0x47<<7 | 0x41,
	33848 - 19968: jis0208<<14 | 0x47<<7 | 0x2F,
	33849 - 19968: jis0212<<14 | 0x37<<7 | 0x2D,
	33852 - 19968: jis0208<<14 | 0x47<<7 | 0x34,
	33853 - 19968: jis0208<<14 | 0x2C<<7 | 0x4D,
	33861 - 19968: jis0212<<14 | 0x37<<7 | 0x2E,
	33862 - 19968: jis0208<<14 | 0x47<<7 | 0x3D,
	33863 - 19968: jis0212<<14 | 0x37<<7 | 0x2F,
	33864 - 19968: jis0208<<14 | 0x5A<<7 | 0x3B,
	33865 - 19968: jis0208<<14 | 0x2C<<7 | 0x34,
	33866 - 19968: jis0212<<14 | 0x37<<7 | 0x31,
	33869 - 19968: jis0212<<14 | 0x37<<7 | 0x32,
	33870 - 19968: jis0208<<14 | 0x2D<<7 | 0x09,
	33871 - 19968: jis0212<<14 | 0x37<<7 | 0x33,
	33873 - 19968: jis0212<<14 | 0x37<<7 | 0x34,
	33874 - 19968: jis0212<<14 | 0x37<<7 | 0x35,
	33878 - 19968: jis0212<<14 | 0x37<<7 | 0x36,
	33879 - 19968: jis0208<<14 | 0x22<<7 | 0x57,
	33880 - 19968: jis0212<<14 | 0x37<<7 | 0x37,
	33881 - 19968: jis0212<<14 | 0x37<<7 | 0x38,
	33882 - 19968: jis0212<<14 | 0x37<<7 | 0x39,
	33883 - 19968: jis0208<<14 | 0x12<<7 | 0x4A,
	33884 - 19968: jis0212<<14 | 0x37<<7 | 0x3A,
	33888 - 19968: jis0212<<14 | 0x37<<7 | 0x3B,
	33889 - 19968: jis0208<<14 | 0x28<<7 | 0x51,
	33890 - 19968: jis0208<<14 | 0x47<<7 | 0x43,
	33891 - 19968: jis0208<<14 | 0x25<<7 | 0x00,
	33892 - 19968: jis0212<<14 | 0x37<<7 | 0x3C,
	33893 - 19968: jis0212<<14 | 0x37<<7 | 0x3D,
	33894 - 19968: jis0208<<14 | 0x0F<<7 | 0x10,
	33895 - 19968: jis0212<<14 | 0x37<<7 | 0x3E,
	33897 - 19968: jis0208<<14 | 0x47<<7 | 0x3C,
	33898 - 19968: jis0212<<14 | 0x37<<7 | 0x3F,
	33899 - 19968: jis0208<<14 | 0x47<<7 | 0x38,
	33900 - 19968: jis0208<<14 | 0x20<<7 | 0x51,
	33901 - 19968: jis0208<<14 | 0x47<<7 | 0x32,
	33902 - 19968: jis0208<<14 | 0x47<<7 | 0x3A,
	33903 - 19968: jis0208<<14 | 0x47<<7 | 0x3F,
	33904 - 19968: jis0212<<14 | 0x37<<7 | 0x40,
	33905 - 19968: jis0208<<14 | 0x26<<7 | 0x0B,
	33907 - 19968: jis0212<<14 | 0x37<<7 | 0x41,
	33908 - 19968: jis0212<<14 | 0x37<<7 | 0x42,
	33909 - 19968: jis0208<<14 | 0x0F<<7 | 0x09,
	33910 - 19968: jis0212<<14 | 0x37<<7 | 0x43,
	33911 - 19968: jis0208<<14 | 0x47<<7 | 0x37,
	33912 - 19968: jis0212<<14 | 0x37<<7 | 0x44,
	33913 - 19968: jis0208<<14 | 0x47<<7 | 0x40,
	33914 - 19968: jis0208<<14 | 0x28<<7 | 0x57,
	33916 - 19968: jis0212<<14 | 0x37<<7 | 0x45,
	33917 - 19968: jis0212<<14 | 0x37<<7 | 0x46,
	33921 - 19968: jis0212<<14 | 0x37<<7 | 0x47,
	33922 - 19968: jis0208<<14 | 0x47<<7 | 0x3B,
	33924 - 19968: jis0208<<14 | 0x47<<7 | 0x36,
	33925 - 19968: jis0212<<14 | 0x37<<7 | 0x48,
	33931 - 19968: jis0208<<14 | 0x1D<<7 | 0x34,
	33936 - 19968: jis0208<<14 | 0x1C<<7 | 0x0E,
	33938 - 19968: jis0212<<14 | 0x37<<7 | 0x49,
	33939 - 19968: jis0212<<14 | 0x37<<7 | 0x4A,
	33940 - 19968: jis0208<<14 | 0x1B<<7 | 0x0B,
	33941 - 19968: jis0212<<14 | 0x37<<7 | 0x4B,
	33945 - 19968: jis0208<<14 | 0x2B<<7 | 0x37,
	33948 - 19968: jis0208<<14 | 0x28<<7 | 0x26,
	33950 - 19968: jis0212<<14 | 0x37<<7 | 0x4C,
	33951 - 19968: jis0208<<14 | 0x47<<7 | 0x46,
	33953 - 19968: jis0208<<14 | 0x47<<7 | 0x4F,
	33958 - 19968: jis0212<<14 | 0x37<<7 | 0x4D,
	33960 - 19968: jis0212<<14 | 0x37<<7 | 0x4E,
	33961 - 19968: jis0212<<14 | 0x37<<7 | 0x4F,
	33962 - 19968: jis0212<<14 | 0x37<<7 | 0x50,
	33965 - 19968: jis0208<<14 | 0x47<<7 | 0x39,
	33967 - 19968: jis0212<<14 | 0x37<<7 | 0x51,
	33969 - 19968: jis0212<<14 | 0x37<<7 | 0x52,
	33970 - 19968: jis0208<<14 | 0x12<<7 | 0x56,
	33972 - 19968: jis0208<<14 | 0x5A<<7 | 0x3C,
	33976 - 19968: jis0208<<14 | 0x1D<<7 | 0x57,
	33977 - 19968: jis0208<<14 | 0x47<<7 | 0x44,
	33978 - 19968: jis0212<<14 | 0x37<<7 | 0x54,
	33979 - 19968: jis0208<<14 | 0x47<<7 | 0x49,
	33980 - 19968: jis0208<<14 | 0x20<<7 | 0x52,
	33981 - 19968: jis0212<<14 | 0x37<<7 | 0x55,
	33982 - 19968: jis0212<<14 | 0x37<<7 | 0x56,
	33983 - 19968: jis0208<<14 | 0x47<<7 | 0x45,
	33984 - 19968: jis0212<<14 | 0x37<<7 | 0x57,
	33985 - 19968: jis0208<<14 | 0x47<<7 | 0x4C,
	33986 - 19968: jis0212<<14 | 0x37<<7 | 0x58,
	33988 - 19968: jis0208<<14 | 0x22<<7 | 0x3E,
	33990 - 19968: jis0208<<14 | 0x47<<7 | 0x4D,
	33991 - 19968: jis0212<<14 | 0x37<<7 | 0x59,
	33992 - 19968: jis0212<<14 | 0x37<<7 | 0x5A,
	33993 - 19968: jis0208<<14 | 0x2C<<7 | 0x35,
	33994 - 19968: jis0208<<14 | 0x47<<7 | 0x42,
	33995 - 19968: jis0208<<14 | 0x12<<7 | 0x17,
	33996 - 19968: jis0212<<14 | 0x37<<7 | 0x5B,
	33997 - 19968: jis0208<<14 | 0x47<<7 | 0x48,
	33999 - 19968: jis0212<<14 | 0x37<<7 | 0x5C,
	34000 - 19968: jis0208<<14 | 0x47<<7 | 0x4B,
	34001 - 19968: jis0208<<14 | 0x2B<<7 | 0x0B,
	34003 - 19968: jis0212<<14 | 0x37<<7 | 0x5D,
	34006 - 19968: jis0208<<14 | 0x47<<7 | 0x4E,
	34009 - 19968: jis0208<<14 | 0x47<<7 | 0x47,
	34010 - 19968: jis0208<<14 | 0x47<<7 | 0x4A,
	34012 - 19968: jis0208<<14 | 0x58<<7 | 0x04,
	34023 - 19968: jis0212<<14 | 0x38<<7 | 0x01,
	34026 - 19968: jis0212<<14 | 0x38<<7 | 0x02,
	34028 - 19968: jis0208<<14 | 0x2A<<7 | 0x08,
	34030 - 19968: jis0208<<14 | 0x2E<<7 | 0x00,
	34031 - 19968: jis0212<<14 | 0x38<<7 | 0x03,
	34032 - 19968: jis0212<<14 | 0x38<<7 | 0x04,
	34033 - 19968: jis0212<<14 | 0x38<<7 | 0x05,
	34034 - 19968: jis0212<<14 | 0x38<<7 | 0x06,
	34036 - 19968: jis0208<<14 | 0x47<<7 | 0x52,
	34039 - 19968: jis0212<<14 | 0x38<<7 | 0x07,
	34042 - 19968: jis0212<<14 | 0x38<<7 | 0x09,
	34043 - 19968: jis0212<<14 | 0x38<<7 | 0x0A,
	34044 - 19968: jis0208<<14 | 0x47<<7 | 0x59,
	34045 - 19968: jis0212<<14 | 0x38<<7 | 0x0B,
	34047 - 19968: jis0208<<14 | 0x47<<7 | 0x51,
	34048 - 19968: jis0208<<14 | 0x1B<<7 | 0x22,
	34050 - 19968: jis0212<<14 | 0x38<<7 | 0x0C,
	34051 - 19968: jis0212<<14 | 0x38<<7 | 0x0D,
	34054 - 19968: jis0208<<14 | 0x47<<7 | 0x30,
	34055 - 19968: jis0212<<14 | 0x38<<7 | 0x0E,
	34060 - 19968: jis0212<<14 | 0x38<<7 | 0x0F,
	34062 - 19968: jis0212<<14 | 0x38<<7 | 0x10,
	34064 - 19968: jis0212<<14 | 0x38<<7 | 0x11,
	34065 - 19968: jis0208<<14 | 0x29<<7 | 0x2D,
	34067 - 19968: jis0208<<14 | 0x2B<<7 | 0x01,
	34068 - 19968: jis0208<<14 | 0x47<<7 | 0x58,
	34069 - 19968: jis0208<<14 | 0x47<<7 | 0x57,
	34071 - 19968: jis0208<<14 | 0x47<<7 | 0x53,
	34072 - 19968: jis0208<<14 | 0x47<<7 | 0x54,
	34074 - 19968: jis0208<<14 | 0x10<<7 | 0x15,
	34076 - 19968: jis0212<<14 | 0x38<<7 | 0x12,
	34078 - 19968: jis0212<<14 | 0x38<<7 | 0x13,
	34079 - 19968: jis0208<<14 | 0x47<<7 | 0x56,
	34081 - 19968: jis0208<<14 | 0x47<<7 | 0x50,
	34082 - 19968: jis0212<<14 | 0x38<<7 | 0x14,
	34083 - 19968: jis0212<<14 | 0x38<<7 | 0x15,
	34084 - 19968: jis0212<<14 | 0x38<<7 | 0x16,
	34085 - 19968: jis0212<<14 | 0x38<<7 | 0x17,
	34086 - 19968: jis0208<<14 | 0x23<<7 | 0x34,
	34087 - 19968: jis0212<<14 | 0x38<<7 | 0x18,
	34090 - 19968: jis0212<<14 | 0x38<<7 | 0x19,
	34091 - 19968: jis0212<<14 | 0x38<<7 | 0x1A,
	34092 - 19968: jis0208<<14 | 0x47<<7 | 0x55,
	34093 - 19968: jis0208<<14 | 0x0F<<7 | 0x5D,
	34095 - 19968: jis0212<<14 | 0x38<<7 | 0x1B,
	34098 - 19968: jis0212<<14 | 0x38<<7 | 0x08,
	34099 - 19968: jis0212<<14 | 0x38<<7 | 0x1C,
	34100 - 19968: jis0212<<14 | 0x38<<7 | 0x1D,
	34101 - 19968: jis0208<<14 | 0x21<<7 | 0x01,
	34102 - 19968: jis0212<<14 | 0x38<<7 | 0x1E,
	34109 - 19968: jis0208<<14 | 0x29<<7 | 0x22,
	34111 - 19968: jis0212<<14 | 0x38<<7 | 0x1F,
	34112 - 19968: jis0208<<14 | 0x47<<7 | 0x5A,
	34113 - 19968: jis0208<<14 | 0x48<<7 | 0x00,
	34115 - 19968: jis0208<<14 | 0x27<<7 | 0x38,
	34118 - 19968: jis0212<<14 | 0x38<<7 | 0x20,
	34120 - 19968: jis0208<<14 | 0x47<<7 | 0x5D,
	34121 - 19968: jis0208<<14 | 0x1D<<7 | 0x35,
	34122 - 19968: jis0208<<14 | 0x1B<<7 | 0x28,
	34123 - 19968: jis0208<<14 | 0x48<<7 | 0x02,
	34126 - 19968: jis0208<<14 | 0x15<<7 | 0x1D,
	34127 - 19968: jis0212<<14 | 0x38<<7 | 0x21,
	34128 - 19968: jis0212<<14 | 0x38<<7 | 0x22,
	34129 - 19968: jis0212<<14 | 0x38<<7 | 0x23,
	34130 - 19968: jis0212<<14 | 0x38<<7 | 0x24,
	34131 - 19968: jis0208<<14 | 0x5A<<7 | 0x3D,
	34133 - 19968: jis0208<<14 | 0x48<<7 | 0x03,
	34134 - 19968: jis0212<<14 | 0x38<<7 | 0x26,
	34135 - 19968: jis0208<<14 | 0x28<<7 | 0x58,
	34136 - 19968: jis0208<<14 | 0x47<<7 | 0x5C,
	34137 - 19968: jis0208<<14 | 0x5A<<7 | 0x3E,
	34138 - 19968: jis0208<<14 | 0x47<<7 | 0x35,
	34140 - 19968: jis0212<<14 | 0x38<<7 | 0x28,
	34141 - 19968: jis0212<<14 | 0x38<<7 | 0x29,
	34142 - 19968: jis0212<<14 | 0x38<<7 | 0x2A,
	34143 - 19968: jis0212<<14 | 0x38<<7 | 0x2B,
	34144 - 19968: jis0212<<14 | 0x38<<7 | 0x2C,
	34145 - 19968: jis0212<<14 | 0x38<<7 | 0x2D,
	34146 - 19968: jis0212<<14 | 0x38<<7 | 0x2E,
	34147 - 19968: jis0208<<14 | 0x47<<7 | 0x5B,
	34148 - 19968: jis0212<<14 | 0x38<<7 | 0x2F,
	34152 - 19968: jis0208<<14 | 0x2E<<7 | 0x2E,
	34153 - 19968: jis0208<<14 | 0x25<<7 | 0x01,
	34154 - 19968: jis0208<<14 | 0x28<<7 | 0x52,
	34155 - 19968: jis0208<<14 | 0x5A<<7 | 0x3F,
	34157 - 19968: jis0208<<14 | 0x48<<7 | 0x0A,
	34159 - 19968: jis0212<<14 | 0x38<<7 | 0x31,
	34167 - 19968: jis0208<<14 | 0x48<<7 | 0x10,
	34169 - 19968: jis0212<<14 | 0x38<<7 | 0x32,
	34170 - 19968: jis0212<<14 | 0x38<<7 | 0x33,
	34171 - 19968: jis0212<<14 | 0x38<<7 | 0x34,
	34173 - 19968: jis0212<<14 | 0x38<<7 | 0x35,
	34174 - 19968: jis0208<<14 | 0x48<<7 | 0x11,
	34175 - 19968: jis0212<<14 | 0x38<<7 | 0x36,
	34176 - 19968: jis0208<<14 | 0x48<<7 | 0x04,
	34177 - 19968: jis0212<<14 | 0x38<<7 | 0x37,
	34180 - 19968: jis0208<<14 | 0x26<<7 | 0x55,
	34181 - 19968: jis0212<<14 | 0x38<<7 | 0x38,
	34182 - 19968: jis0212<<14 | 0x38<<7 | 0x39,
	34183 - 19968: jis0208<<14 | 0x48<<7 | 0x0E,
	34184 - 19968: jis0208<<14 | 0x48<<7 | 0x06,
	34185 - 19968: jis0212<<14 | 0x38<<7 | 0x3A,
	34186 - 19968: jis0208<<14 | 0x48<<7 | 0x08,
	34187 - 19968: jis0212<<14 | 0x38<<7 | 0x3B,
	34188 - 19968: jis0212<<14 | 0x38<<7 | 0x3C,
	34191 - 19968: jis0212<<14 | 0x38<<7 | 0x3D,
	34192 - 19968: jis0208<<14 | 0x48<<7 | 0x12,
	34193 - 19968: jis0208<<14 | 0x48<<7 | 0x07,
	34195 - 19968: jis0212<<14 | 0x38<<7 | 0x3E,
	34196 - 19968: jis0208<<14 | 0x48<<7 | 0x0B,
	34199 - 19968: jis0208<<14 | 0x10<<7 | 0x51,
	34200 - 19968: jis0212<<14 | 0x38<<7 | 0x3F,
	34201 - 19968: jis0208<<14 | 0x25<<7 | 0x44,
	34203 - 19968: jis0208<<14 | 0x48<<7 | 0x0C,
	34204 - 19968: jis0208<<14 | 0x48<<7 | 0x0F,
	34205 - 19968: jis0212<<14 | 0x38<<7 | 0x40,
	34207 - 19968: jis0212<<14 | 0x38<<7 | 0x41,
	34208 - 19968: jis0212<<14 | 0x38<<7 | 0x42,
	34210 - 19968: jis0212<<14 | 0x38<<7 | 0x43,
	34212 - 19968: jis0208<<14 | 0x48<<7 | 0x05,
	34213 - 19968: jis0212<<14 | 0x38<<7 | 0x44,
	34214 - 19968: jis0208<<14 | 0x20<<7 | 0x05,
	34215 - 19968: jis0212<<14 | 0x38<<7 | 0x45,
	34216 - 19968: jis0208<<14 | 0x48<<7 | 0x09,
	34217 - 19968: jis0208<<14 | 0x1A<<7 | 0x06,
	34218 - 19968: jis0208<<14 | 0x1E<<7 | 0x24,
	34219 - 19968: jis0208<<14 | 0x16<<7 | 0x0F,
	34220 - 19968: jis0208<<14 | 0x2B<<7 | 0x53,
	34221 - 19968: jis0212<<14 | 0x38<<7 | 0x53,
	34222 - 19968: jis0208<<14 | 0x2B<<7 | 0x58,
	34223 - 19968: jis0208<<14 | 0x1C<<7 | 0x51,
	34224 - 19968: jis0208<<14 | 0x5A<<7 | 0x41,
	34228 - 19968: jis0212<<14 | 0x38<<7 | 0x46,
	34230 - 19968: jis0212<<14 | 0x38<<7 | 0x47,
	34231 - 19968: jis0212<<14 | 0x38<<7 | 0x48,
	34232 - 19968: jis0212<<14 | 0x38<<7 | 0x49,
	34233 - 19968: jis0208<<14 | 0x48<<7 | 0x16,
	34234 - 19968: jis0208<<14 | 0x48<<7 | 0x14,
	34236 - 19968: jis0212<<14 | 0x38<<7 | 0x4A,
	34237 - 19968: jis0212<<14 | 0x38<<7 | 0x4B,
	34238 - 19968: jis0212<<14 | 0x38<<7 | 0x4C,
	34239 - 19968: jis0212<<14 | 0x38<<7 | 0x4D,
	34241 - 19968: jis0208<<14 | 0x2E<<7 | 0x2D,
	34242 - 19968: jis0212<<14 | 0x38<<7 | 0x4E,
	34247 - 19968: jis0212<<14 | 0x38<<7 | 0x4F,
	34249 - 19968: jis0208<<14 | 0x48<<7 | 0x13,
	34250 - 19968: jis0212<<14 | 0x38<<7 | 0x50,
	34251 - 19968: jis0212<<14 | 0x38<<7 | 0x51,
	34253 - 19968: jis0208<<14 | 0x2C<<7 | 0x54,
	34254 - 19968: jis0212<<14 | 0x38<<7 | 0x52,
	34255 - 19968: jis0208<<14 | 0x48<<7 | 0x15,
	34256 - 19968: jis0208<<14 | 0x48<<7 | 0x17,
	34261 - 19968: jis0208<<14 | 0x48<<7 | 0x18,
	34264 - 19968: jis0212<<14 | 0x38<<7 | 0x54,
	34266 - 19968: jis0212<<14 | 0x38<<7 | 0x55,
	34268 - 19968: jis0208<<14 | 0x48<<7 | 0x1B,
	34269 - 19968: jis0208<<14 | 0x48<<7 | 0x19,
	34271 - 19968: jis0212<<14 | 0x38<<7 | 0x56,
	34272 - 19968: jis0212<<14 | 0x38<<7 | 0x57,
	34276 - 19968: jis0208<<14 | 0x25<<7 | 0x02,
	34277 - 19968: jis0208<<14 | 0x48<<7 | 0x1A,
	34278 - 19968: jis0212<<14 | 0x38<<7 | 0x58,
	34280 - 19968: jis0212<<14 | 0x38<<7 | 0x59,
	34281 - 19968: jis0208<<14 | 0x27<<7 | 0x2C,
	34282 - 19968: jis0208<<14 | 0x48<<7 | 0x0D,
	34285 - 19968: jis0212<<14 | 0x38<<7 | 0x5A,
	34291 - 19968: jis0212<<14 | 0x38<<7 | 0x5B,
	34294 - 19968: jis0212<<14 | 0x38<<7 | 0x5C,
	34295 - 19968: jis0208<<14 | 0x1C<<7 | 0x52,
	34297 - 19968: jis0208<<14 | 0x48<<7 | 0x1C,
	34298 - 19968: jis0208<<14 | 0x48<<7 | 0x21,
	34299 - 19968: jis0208<<14 | 0x20<<7 | 0x53,
	34300 - 19968: jis0212<<14 | 0x38<<7 | 0x5D,
	34302 - 19968: jis0208<<14 | 0x48<<7 | 0x20,
	34303 - 19968: jis0212<<14 | 0x39<<7 | 0x00,
	34304 - 19968: jis0212<<14 | 0x39<<7 | 0x01,
	34306 - 19968: jis0208<<14 | 0x48<<7 | 0x01,
	34308 - 19968: jis0212<<14 | 0x39<<7 | 0x02,
	34309 - 19968: jis0212<<14 | 0x39<<7 | 0x03,
	34310 - 19968: jis0208<<14 | 0x48<<7 | 0x22,
	34311 - 19968: jis0208<<14 | 0x20<<7 | 0x28,
	34314 - 19968: jis0208<<14 | 0x48<<7 | 0x1D,
	34315 - 19968: jis0208<<14 | 0x48<<7 | 0x1F,
	34317 - 19968: jis0212<<14 | 0x39<<7 | 0x04,
	34318 - 19968: jis0212<<14 | 0x39<<7 | 0x05,
	34320 - 19968: jis0212<<14 | 0x39<<7 | 0x06,
	34321 - 19968: jis0212<<14 | 0x39<<7 | 0x07,
	34322 - 19968: jis0212<<14 | 0x39<<7 | 0x08,
	34323 - 19968: jis0208<<14 | 0x48<<7 | 0x1E,
	34326 - 19968: jis0208<<14 | 0x3C<<7 | 0x10,
	34327 - 19968: jis0208<<14 | 0x3C<<7 | 0x01,
	34328 - 19968: jis0212<<14 | 0x39<<7 | 0x09,
	34329 - 19968: jis0212<<14 | 0x39<<7 | 0x0A,
	34330 - 19968: jis0208<<14 | 0x48<<7 | 0x24,
	34331 - 19968: jis0212<<14 | 0x39<<7 | 0x0B,
	34334 - 19968: jis0212<<14 | 0x39<<7 | 0x0C,
	34337 - 19968: jis0212<<14 | 0x39<<7 | 0x0D,
	34338 - 19968: jis0208<<14 | 0x48<<7 | 0x23,
	34343 - 19968: jis0212<<14 | 0x39<<7 | 0x0E,
	34345 - 19968: jis0212<<14 | 0x39<<7 | 0x0F,
	34349 - 19968: jis0208<<14 | 0x2C<<7 | 0x55,
	34351 - 19968: jis0208<<14 | 0x41<<7 | 0x1B,
	34352 - 19968: jis0208<<14 | 0x48<<7 | 0x25,
	34358 - 19968: jis0212<<14 | 0x39<<7 | 0x10,
	34360 - 19968: jis0212<<14 | 0x39<<7 | 0x11,
	34362 - 19968: jis0212<<14 | 0x39<<7 | 0x12,
	34364 - 19968: jis0212<<14 | 0x39<<7 | 0x13,
	34365 - 19968: jis0212<<14 | 0x39<<7 | 0x14,
	34367 - 19968: jis0208<<14 | 0x48<<7 | 0x26,
	34368 - 19968: jis0212<<14 | 0x39<<7 | 0x15,
	34369 - 19968: jis0212<<14 | 0x17<<7 | 0x45,
	34370 - 19968: jis0212<<14 | 0x39<<7 | 0x16,
	34374 - 19968: jis0212<<14 | 0x39<<7 | 0x17,
	34381 - 19968: jis0208<<14 | 0x48<<7 | 0x27,
	34382 - 19968: jis0208<<14 | 0x17<<7 | 0x36,
	34384 - 19968: jis0208<<14 | 0x14<<7 | 0x33,
	34386 - 19968: jis0212<<14 | 0x39<<7 | 0x18,
	34387 - 19968: jis0212<<14 | 0x39<<7 | 0x19,
	34388 - 19968: jis0208<<14 | 0x48<<7 | 0x29,
	34389 - 19968: jis0208<<14 | 0x30<<7 | 0x3C,
	34390 - 19968: jis0212<<14 | 0x39<<7 | 0x1A,
	34391 - 19968: jis0212<<14 | 0x39<<7 | 0x1B,
	34392 - 19968: jis0212<<14 | 0x39<<7 | 0x1C,
	34393 - 19968: jis0212<<14 | 0x39<<7 | 0x1D,
	34394 - 19968: jis0208<<14 | 0x14<<7 | 0x54,
	34396 - 19968: jis0208<<14 | 0x2D<<7 | 0x19,
	34397 - 19968: jis0212<<14 | 0x39<<7 | 0x1E,
	34398 - 19968: jis0208<<14 | 0x15<<7 | 0x52,
	34399 - 19968: jis0208<<14 | 0x48<<7 | 0x2A,
	34400 - 19968: jis0212<<14 | 0x39<<7 | 0x1F,
	34401 - 19968: jis0212<<14 | 0x39<<7 | 0x20,
	34402 - 19968: jis0212<<14 | 0x39<<7 | 0x21,
	34403 - 19968: jis0212<<14 | 0x39<<7 | 0x22,
	34404 - 19968: jis0212<<14 | 0x39<<7 | 0x23,
	34407 - 19968: jis0208<<14 | 0x48<<7 | 0x2B,
	34409 - 19968: jis0212<<14 | 0x39<<7 | 0x24,
	34411 - 19968: jis0208<<14 | 0x22<<7 | 0x4D,
	34412 - 19968: jis0212<<14 | 0x39<<7 | 0x25,
	34415 - 19968: jis0212<<14 | 0x39<<7 | 0x26,
	34417 - 19968: jis0208<<14 | 0x48<<7 | 0x2C,
	34421 - 19968: jis0212<<14 | 0x39<<7 | 0x27,
	34422 - 19968: jis0212<<14 | 0x39<<7 | 0x28,
	34423 - 19968: jis0212<<14 | 0x39<<7 | 0x29,
	34425 - 19968: jis0208<<14 | 0x25<<7 | 0x59,
	34426 - 19968: jis0212<<14 | 0x39<<7 | 0x2A,
	34427 - 19968: jis0208<<14 | 0x0F<<7 | 0x19,
	34440 - 19968: jis0212<<14 | 0x39<<7 | 0x4C,
	34442 - 19968: jis0208<<14 | 0x11<<7 | 0x42,
	34443 - 19968: jis0208<<14 | 0x48<<7 | 0x31,
	34444 - 19968: jis0208<<14 | 0x48<<7 | 0x32,
	34445 - 19968: jis0212<<14 | 0x39<<7 | 0x2B,
	34449 - 19968: jis0212<<14 | 0x39<<7 | 0x2C,
	34451 - 19968: jis0208<<14 | 0x48<<7 | 0x2D,
	34453 - 19968: jis0208<<14 | 0x1A<<7 | 0x1C,
	34454 - 19968: jis0212<<14 | 0x39<<7 | 0x2D,
	34456 - 19968: jis0212<<14 | 0x39<<7 | 0x2E,
	34458 - 19968: jis0212<<14 | 0x39<<7 | 0x2F,
	34460 - 19968: jis0212<<14 | 0x39<<7 | 0x30,
	34465 - 19968: jis0212<<14 | 0x39<<7 | 0x31,
	34467 - 19968: jis0208<<14 | 0x48<<7 | 0x2E,
	34468 - 19968: jis0208<<14 | 0x26<<7 | 0x21,
	34470 - 19968: jis0212<<14 | 0x39<<7 | 0x32,
	34471 - 19968: jis0212<<14 | 0x39<<7 | 0x33,
	34472 - 19968: jis0212<<14 | 0x39<<7 | 0x34,
	34473 - 19968: jis0208<<14 | 0x48<<7 | 0x2F,
	34474 - 19968: jis0208<<14 | 0x48<<7 | 0x30,
	34475 - 19968: jis0208<<14 | 0x48<<7 | 0x3A,
	34477 - 19968: jis0212<<14 | 0x39<<7 | 0x35,
	34479 - 19968: jis0208<<14 | 0x48<<7 | 0x34,
	34480 - 19968: jis0208<<14 | 0x48<<7 | 0x37,
	34481 - 19968: jis0212<<14 | 0x39<<7 | 0x36,
	34483 - 19968: jis0212<<14 | 0x39<<7 | 0x37,
	34484 - 19968: jis0212<<14 | 0x39<<7 | 0x38,
	34485 - 19968: jis0212<<14 | 0x39<<7 | 0x39,
	34486 - 19968: jis0208<<14 | 0x48<<7 | 0x33,
	34487 - 19968: jis0212<<14 | 0x39<<7 | 0x3A,
	34488 - 19968: jis0212<<14 | 0x39<<7 | 0x3B,
	34489 - 19968: jis0212<<14 | 0x39<<7 | 0x3C,
	34495 - 19968: jis0212<<14 | 0x39<<7 | 0x3D,
	34496 - 19968: jis0212<<14 | 0x39<<7 | 0x3E,
	34497 - 19968: jis0212<<14 | 0x39<<7 | 0x3F,
	34499 - 19968: jis0212<<14 | 0x39<<7 | 0x40,
	34500 - 19968: jis0208<<14 | 0x48<<7 | 0x35,
	34501 - 19968: jis0212<<14 | 0x39<<7 | 0x41,
	34502 - 19968: jis0208<<14 | 0x48<<7 | 0x36,
	34503 - 19968: jis0208<<14 | 0x1B<<7 | 0x37,
	34505 - 19968: jis0208<<14 | 0x48<<7 | 0x38,
	34507 - 19968: jis0208<<14 | 0x22<<7 | 0x20,
	34509 - 19968: jis0208<<14 | 0x16<<7 | 0x35,
	34510 - 19968: jis0208<<14 | 0x12<<7 | 0x21,
	34513 - 19968: jis0212<<14 | 0x39<<7 | 0x42,
	34514 - 19968: jis0212<<14 | 0x39<<7 | 0x43,
	34516 - 19968: jis0208<<14 | 0x48<<7 | 0x3B,
	34517 - 19968: jis0212<<14 | 0x39<<7 | 0x44,
	34519 - 19968: jis0212<<14 | 0x39<<7 | 0x45,
	34521 - 19968: jis0208<<14 | 0x12<<7 | 0x1E,
	34522 - 19968: jis0212<<14 | 0x39<<7 | 0x46,
	34523 - 19968: jis0208<<14 | 0x48<<7 | 0x40,
	34524 - 19968: jis0212<<14 | 0x39<<7 | 0x47,
	34526 - 19968: jis0208<<14 | 0x48<<7 | 0x3C,
	34527 - 19968: jis0208<<14 | 0x48<<7 | 0x3F,
	34528 - 19968: jis0212<<14 | 0x39<<7 | 0x48,
	34531 - 19968: jis0212<<14 | 0x39<<7 | 0x49,
	34532 - 19968: jis0208<<14 | 0x27<<7 | 0x19,
	34533 - 19968: jis0212<<14 | 0x39<<7 | 0x4A,
	34535 - 19968: jis0212<<14 | 0x39<<7 | 0x4B,
	34537 - 19968: jis0208<<14 | 0x48<<7 | 0x3D,
	34540 - 19968: jis0208<<14 | 0x48<<7 | 0x3E,
	34541 - 19968: jis0208<<14 | 0x28<<7 | 0x27,
	34542 - 19968: jis0208<<14 | 0x27<<7 | 0x39,
	34543 - 19968: jis0208<<14 | 0x48<<7 | 0x41,
	34552 - 19968: jis0208<<14 | 0x21<<7 | 0x5C,
	34553 - 19968: jis0208<<14 | 0x48<<7 | 0x4B,
	34554 - 19968: jis0212<<14 | 0x39<<7 | 0x4D,
	34555 - 19968: jis0208<<14 | 0x48<<7 | 0x47,
	34556 - 19968: jis0212<<14 | 0x39<<7 | 0x4E,
	34557 - 19968: jis0212<<14 | 0x39<<7 | 0x4F,
	34558 - 19968: jis0208<<14 | 0x11<<7 | 0x4A,
	34560 - 19968: jis0208<<14 | 0x48<<7 | 0x45,
	34562 - 19968: jis0208<<14 | 0x2A<<7 | 0x09,
	34563 - 19968: jis0208<<14 | 0x48<<7 | 0x46,
	34564 - 19968: jis0212<<14 | 0x39<<7 | 0x50,
	34565 - 19968: jis0212<<14 | 0x39<<7 | 0x51,
	34566 - 19968: jis0208<<14 | 0x48<<7 | 0x43,
	34567 - 19968: jis0212<<14 | 0x39<<7 | 0x52,
	34568 - 19968: jis0208<<14 | 0x48<<7 | 0x44,
	34569 - 19968: jis0208<<14 | 0x48<<7 | 0x49,
	34570 - 19968: jis0208<<14 | 0x48<<7 | 0x4C,
	34571 - 19968: jis0212<<14 | 0x39<<7 | 0x53,
	34573 - 19968: jis0208<<14 | 0x48<<7 | 0x4A,
	34574 - 19968: jis0212<<14 | 0x39<<7 | 0x54,
	34575 - 19968: jis0212<<14 | 0x39<<7 | 0x55,
	34576 - 19968: jis0212<<14 | 0x39<<7 | 0x56,
	34577 - 19968: jis0208<<14 | 0x48<<7 | 0x48,
	34578 - 19968: jis0208<<14 | 0x48<<7 | 0x42,
	34579 - 19968: jis0212<<14 | 0x39<<7 | 0x57,
	34580 - 19968: jis0212<<14 | 0x39<<7 | 0x58,
	34584 - 19968: jis0208<<14 | 0x22<<7 | 0x37,
	34585 - 19968: jis0212<<14 | 0x39<<7 | 0x59,
	34586 - 19968: jis0208<<14 | 0x48<<7 | 0x53,
	34588 - 19968: jis0208<<14 | 0x2B<<7 | 0x09,
	34590 - 19968: jis0212<<14 | 0x39<<7 | 0x5A,
	34591 - 19968: jis0212<<14 | 0x39<<7 | 0x5B,
	34593 - 19968: jis0212<<14 | 0x39<<7 | 0x5C,
	34595 - 19968: jis0212<<14 | 0x39<<7 | 0x5D,
	34597 - 19968: jis0208<<14 | 0x48<<7 | 0x51,
	34600 - 19968: jis0212<<14 | 0x3A<<7 | 0x00,
	34601 - 19968: jis0208<<14 | 0x48<<7 | 0x52,
	34606 - 19968: jis0212<<14 | 0x3A<<7 | 0x01,
	34607 - 19968: jis0212<<14 | 0x3A<<7 | 0x02,
	34609 - 19968: jis0212<<14 | 0x3A<<7 | 0x03,
	34610 - 19968: jis0212<<14 | 0x3A<<7 | 0x04,
	34612 - 19968: jis0208<<14 | 0x48<<7 | 0x4D,
	34615 - 19968: jis0208<<14 | 0x48<<7 | 0x4F,
	34617 - 19968: jis0212<<14 | 0x3A<<7 | 0x05,
	34618 - 19968: jis0212<<14 | 0x3A<<7 | 0x06,
	34619 - 19968: jis0208<<14 | 0x48<<7 | 0x50,
	34620 - 19968: jis0212<<14 | 0x3A<<7 | 0x07,
	34621 - 19968: jis0212<<14 | 0x3A<<7 | 0x08,
	34622 - 19968: jis0212<<14 | 0x3A<<7 | 0x09,
	34623 - 19968: jis0208<<14 | 0x48<<7 | 0x4E,
	34624 - 19968: jis0212<<14 | 0x3A<<7 | 0x0A,
	34627 - 19968: jis0212<<14 | 0x3A<<7 | 0x0B,
	34629 - 19968: jis0212<<14 | 0x3A<<7 | 0x0C,
	34633 - 19968: jis0208<<14 | 0x1F<<7 | 0x45,
	34635 - 19968: jis0208<<14 | 0x2E<<7 | 0x18,
	34636 - 19968: jis0208<<14 | 0x48<<7 | 0x57,
	34637 - 19968: jis0212<<14 | 0x3A<<7 | 0x0D,
	34638 - 19968: jis0208<<14 | 0x48<<7 | 0x58,
	34643 - 19968: jis0208<<14 | 0x49<<7 | 0x00,
	34645 - 19968: jis0208<<14 | 0x1E<<7 | 0x09,
	34647 - 19968: jis0208<<14 | 0x48<<7 | 0x5A,
	34648 - 19968: jis0212<<14 | 0x3A<<7 | 0x0E,
	34649 - 19968: jis0208<<14 | 0x48<<7 | 0x5D,
	34653 - 19968: jis0212<<14 | 0x3A<<7 | 0x0F,
	34655 - 19968: jis0208<<14 | 0x48<<7 | 0x55,
	34656 - 19968: jis0208<<14 | 0x48<<7 | 0x54,
	34657 - 19968: jis0212<<14 | 0x3A<<7 | 0x10,
	34659 - 19968: jis0208<<14 | 0x49<<7 | 0x01,
	34660 - 19968: jis0212<<14 | 0x3A<<7 | 0x11,
	34661 - 19968: jis0212<<14 | 0x3A<<7 | 0x12,
	34662 - 19968: jis0208<<14 | 0x11<<7 | 0x3B,
	34664 - 19968: jis0208<<14 | 0x48<<7 | 0x5B,
	34666 - 19968: jis0208<<14 | 0x49<<7 | 0x02,
	34670 - 19968: jis0208<<14 | 0x48<<7 | 0x5C,
	34671 - 19968: jis0212<<14 | 0x3A<<7 | 0x13,
	34673 - 19968: jis0212<<14 | 0x3A<<7 | 0x14,
	34674 - 19968: jis0212<<14 | 0x3A<<7 | 0x15,
	34676 - 19968: jis0208<<14 | 0x48<<7 | 0x59,
	34678 - 19968: jis0208<<14 | 0x23<<7 | 0x12,
	34680 - 19968: jis0208<<14 | 0x48<<7 | 0x56,
	34683 - 19968: jis0212<<14 | 0x3A<<7 | 0x16,
	34687 - 19968: jis0208<<14 | 0x26<<7 | 0x47,
	34690 - 19968: jis0208<<14 | 0x49<<7 | 0x06,
	34691 - 19968: jis0212<<14 | 0x3A<<7 | 0x17,
	34692 - 19968: jis0212<<14 | 0x3A<<7 | 0x18,
	34693 - 19968: jis0212<<14 | 0x3A<<7 | 0x19,
	34694 - 19968: jis0212<<14 | 0x3A<<7 | 0x1A,
	34695 - 19968: jis0212<<14 | 0x3A<<7 | 0x1B,
	34696 - 19968: jis0212<<14 | 0x3A<<7 | 0x1C,
	34697 - 19968: jis0212<<14 | 0x3A<<7 | 0x1D,
	34699 - 19968: jis0212<<14 | 0x3A<<7 | 0x1E,
	34700 - 19968: jis0212<<14 | 0x3A<<7 | 0x1F,
	34701 - 19968: jis0208<<14 | 0x2C<<7 | 0x1A,
	34704 - 19968: jis0212<<14 | 0x3A<<7 | 0x20,
	34707 - 19968: jis0212<<14 | 0x3A<<7 | 0x21,
	34709 - 19968: jis0212<<14 | 0x3A<<7 | 0x22,
	34711 - 19968: jis0212<<14 | 0x3A<<7 | 0x23,
	34712 - 19968: jis0212<<14 | 0x3A<<7 | 0x24,
	34713 - 19968: jis0212<<14 | 0x3A<<7 | 0x25,
	34718 - 19968: jis0212<<14 | 0x3A<<7 | 0x26,
	34719 - 19968: jis0208<<14 | 0x49<<7 | 0x05,
	34720 - 19968: jis0212<<14 | 0x3A<<7 | 0x27,
	34722 - 19968: jis0208<<14 | 0x49<<7 | 0x04,
	34723 - 19968: jis0212<<14 | 0x3A<<7 | 0x28,
	34727 - 19968: jis0212<<14 | 0x3A<<7 | 0x29,
	34731 - 19968: jis0208<<14 | 0x49<<7 | 0x0D,
	34732 - 19968: jis0212<<14 | 0x3A<<7 | 0x2A,
	34733 - 19968: jis0212<<14 | 0x3A<<7 | 0x2B,
	34734 - 19968: jis0212<<14 | 0x3A<<7 | 0x2C,
	34735 - 19968: jis0208<<14 | 0x49<<7 | 0x07,
	34737 - 19968: jis0212<<14 | 0x3A<<7 | 0x2D,
	34739 - 19968: jis0208<<14 | 0x49<<7 | 0x0F,
	34741 - 19968: jis0212<<14 | 0x3A<<7 | 0x2E,
	34746 - 19968: jis0208<<14 | 0x2C<<7 | 0x45,
	34747 - 19968: jis0208<<14 | 0x49<<7 | 0x12,
	34749 - 19968: jis0208<<14 | 0x49<<7 | 0x09,
	34750 - 19968: jis0212<<14 | 0x3A<<7 | 0x2F,
	34751 - 19968: jis0212<<14 | 0x3A<<7 | 0x30,
	34752 - 19968: jis0208<<14 | 0x49<<7 | 0x0A,
	34753 - 19968: jis0212<<14 | 0x3A<<7 | 0x31,
	34756 - 19968: jis0208<<14 | 0x49<<7 | 0x0E,
	34758 - 19968: jis0208<<14 | 0x49<<7 | 0x11,
	34759 - 19968: jis0208<<14 | 0x49<<7 | 0x10,
	34760 - 19968: jis0212<<14 | 0x3A<<7 | 0x32,
	34761 - 19968: jis0212<<14 | 0x3A<<7 | 0x33,
	34762 - 19968: jis0212<<14 | 0x3A<<7 | 0x34,
	34763 - 19968: jis0208<<14 | 0x49<<7 | 0x08,
	34766 - 19968: jis0212<<14 | 0x3A<<7 | 0x35,
	34768 - 19968: jis0208<<14 | 0x49<<7 | 0x0B,
	34770 - 19968: jis0208<<14 | 0x49<<7 | 0x1C,
	34773 - 19968: jis0212<<14 | 0x3A<<7 | 0x36,
	34774 - 19968: jis0212<<14 | 0x3A<<7 | 0x37,
	34777 - 19968: jis0212<<14 | 0x3A<<7 | 0x38,
	34778 - 19968: jis0212<<14 | 0x3A<<7 | 0x39,
	34780 - 19968: jis0212<<14 | 0x3A<<7 | 0x3A,
	34783 - 19968: jis0212<<14 | 0x3A<<7 | 0x3B,
	34784 - 19968: jis0208<<14 | 0x49<<7 | 0x15,
	34786 - 19968: jis0212<<14 | 0x3A<<7 | 0x3C,
	34787 - 19968: jis0212<<14 | 0x3A<<7 | 0x3D,
	34788 - 19968: jis0212<<14 | 0x3A<<7 | 0x3E,
	34794 - 19968: jis0212<<14 | 0x3A<<7 | 0x3F,
	34795 - 19968: jis0212<<14 | 0x3A<<7 | 0x40,
	34797 - 19968: jis0212<<14 | 0x3A<<7 | 0x41,
	34799 - 19968: jis0208<<14 | 0x49<<7 | 0x13,
	34801 - 19968: jis0212<<14 | 0x3A<<7 | 0x42,
	34802 - 19968: jis0208<<14 | 0x49<<7 | 0x14,
	34803 - 19968: jis0212<<14 | 0x3A<<7 | 0x43,
	34806 - 19968: jis0208<<14 | 0x49<<7 | 0x19,
	34807 - 19968: jis0208<<14 | 0x49<<7 | 0x1A,
	34808 - 19968: jis0212<<14 | 0x3A<<7 | 0x44,
	34809 - 19968: jis0208<<14 | 0x12<<7 | 0x09,
	34810 - 19968: jis0212<<14 | 0x3A<<7 | 0x45,
	34811 - 19968: jis0208<<14 | 0x14<<7 | 0x21,
	34814 - 19968: jis0208<<14 | 0x49<<7 | 0x18,
	34815 - 19968: jis0212<<14 | 0x3A<<7 | 0x46,
	34817 - 19968: jis0212<<14 | 0x3A<<7 | 0x47,
	34819 - 19968: jis0212<<14 | 0x3A<<7 | 0x48,
	34821 - 19968: jis0208<<14 | 0x49<<7 | 0x03,
	34822 - 19968: jis0212<<14 | 0x3A<<7 | 0x49,
	34823 - 19968: jis0208<<14 | 0x5A<<7 | 0x44,
	34825 - 19968: jis0212<<14 | 0x3A<<7 | 0x4A,
	34826 - 19968: jis0212<<14 | 0x3A<<7 | 0x4B,
	34827 - 19968: jis0212<<14 | 0x3A<<7 | 0x4C,
	34829 - 19968: jis0208<<14 | 0x49<<7 | 0x17,
	34830 - 19968: jis0208<<14 | 0x49<<7 | 0x1B,
	34831 - 19968: jis0208<<14 | 0x49<<7 | 0x16,
	34832 - 19968: jis0212<<14 | 0x3A<<7 | 0x4D,
	34833 - 19968: jis0208<<14 | 0x49<<7 | 0x1D,
	34834 - 19968: jis0212<<14 | 0x3A<<7 | 0x4F,
	34835 - 19968: jis0212<<14 | 0x3A<<7 | 0x50,
	34836 - 19968: jis0212<<14 | 0x3A<<7 | 0x51,
	34837 - 19968: jis0208<<14 | 0x49<<7 | 0x1F,
	34838 - 19968: jis0208<<14 | 0x49<<7 | 0x1E,
	34840 - 19968: jis0212<<14 | 0x3A<<7 | 0x52,
	34841 - 19968: jis0212<<14 | 0x3A<<7 | 0x4E,
	34842 - 19968: jis0212<<14 | 0x3A<<7 | 0x53,
	34843 - 19968: jis0212<<14 | 0x3A<<7 | 0x54,
	34844 - 19968: jis0212<<14 | 0x3A<<7 | 0x55,
	34846 - 19968: jis0212<<14 | 0x3A<<7 | 0x56,
	34847 - 19968: jis0212<<14 | 0x3A<<7 | 0x57,
	34849 - 19968: jis0208<<14 | 0x49<<7 | 0x21,
	34850 - 19968: jis0208<<14 | 0x49<<7 | 0x20,
	34851 - 19968: jis0208<<14 | 0x48<<7 | 0x39,
	34855 - 19968: jis0208<<14 | 0x49<<7 | 0x25,
	34856 - 19968: jis0212<<14 | 0x3A<<7 | 0x58,
	34861 - 19968: jis0212<<14 | 0x3A<<7 | 0x59,
	34862 - 19968: jis0212<<14 | 0x3A<<7 | 0x5A,
	34864 - 19968: jis0212<<14 | 0x3A<<7 | 0x5B,
	34865 - 19968: jis0208<<14 | 0x49<<7 | 0x22,
	34866 - 19968: jis0212<<14 | 0x3A<<7 | 0x5C,
	34869 - 19968: jis0212<<14 | 0x3A<<7 | 0x5D,
	34870 - 19968: jis0208<<14 | 0x49<<7 | 0x23,
	34873 - 19968: jis0208<<14 | 0x49<<7 | 0x24,
	34874 - 19968: jis0212<<14 | 0x3B<<7 | 0x00,
	34875 - 19968: jis0208<<14 | 0x49<<7 | 0x26,
	34876 - 19968: jis0212<<14 | 0x3B<<7 | 0x01,
	34880 - 19968: jis0208<<14 | 0x16<<7 | 0x4B,
	34881 - 19968: jis0212<<14 | 0x3B<<7 | 0x02,
	34882 - 19968: jis0208<<14 | 0x49<<7 | 0x28,
	34883 - 19968: jis0212<<14 | 0x3B<<7 | 0x03,
	34884 - 19968: jis0208<<14 | 0x49<<7 | 0x27,
	34885 - 19968: jis0212<<14 | 0x3B<<7 | 0x04,
	34886 - 19968: jis0208<<14 | 0x1C<<7 | 0x0F,
	34888 - 19968: jis0212<<14 | 0x3B<<7 | 0x05,
	34889 - 19968: jis0212<<14 | 0x3B<<7 | 0x06,
	34890 - 19968: jis0212<<14 | 0x3B<<7 | 0x07,
	34891 - 19968: jis0212<<14 | 0x3B<<7 | 0x08,
	34892 - 19968: jis0208<<14 | 0x18<<7 | 0x33,
	34893 - 19968: jis0208<<14 | 0x3D<<7 | 0x06,
	34894 - 19968: jis0212<<14 | 0x3B<<7 | 0x09,
	34897 - 19968: jis0212<<14 | 0x3B<<7 | 0x0A,
	34898 - 19968: jis0208<<14 | 0x49<<7 | 0x29,
	34899 - 19968: jis0208<<14 | 0x1C<<7 | 0x30,
	34901 - 19968: jis0212<<14 | 0x3B<<7 | 0x0B,
	34902 - 19968: jis0212<<14 | 0x3B<<7 | 0x0C,
	34903 - 19968: jis0208<<14 | 0x12<<7 | 0x18,
	34904 - 19968: jis0212<<14 | 0x3B<<7 | 0x0D,
	34905 - 19968: jis0208<<14 | 0x49<<7 | 0x2A,
	34906 - 19968: jis0212<<14 | 0x3B<<7 | 0x0E,
	34907 - 19968: jis0208<<14 | 0x10<<7 | 0x31,
	34908 - 19968: jis0212<<14 | 0x3B<<7 | 0x0F,
	34909 - 19968: jis0208<<14 | 0x1D<<7 | 0x36,
	34910 - 19968: jis0208<<14 | 0x49<<7 | 0x2B,
	34911 - 19968: jis0212<<14 | 0x3B<<7 | 0x10,
	34912 - 19968: jis0212<<14 | 0x3B<<7 | 0x11,
	34913 - 19968: jis0208<<14 | 0x18<<7 | 0x34,
	34914 - 19968: jis0208<<14 | 0x49<<7 | 0x2C,
	34915 - 19968: jis0208<<14 | 0x0F<<7 | 0x40,
	34916 - 19968: jis0212<<14 | 0x3B<<7 | 0x12,
	34920 - 19968: jis0208<<14 | 0x28<<7 | 0x1C,
	34921 - 19968: jis0212<<14 | 0x3B<<7 | 0x13,
	34923 - 19968: jis0208<<14 | 0x49<<7 | 0x2D,
	34928 - 19968: jis0208<<14 | 0x1E<<7 | 0x49,
	34929 - 19968: jis0212<<14 | 0x3B<<7 | 0x14,
	34930 - 19968: jis0208<<14 | 0x49<<7 | 0x34,
	34933 - 19968: jis0208<<14 | 0x49<<7 | 0x31,
	34935 - 19968: jis0208<<14 | 0x22<<7 | 0x4E,
	34937 - 19968: jis0212<<14 | 0x3B<<7 | 0x15,
	34939 - 19968: jis0212<<14 | 0x3B<<7 | 0x16,
	34941 - 19968: jis0208<<14 | 0x49<<7 | 0x32,
	34942 - 19968: jis0208<<14 | 0x49<<7 | 0x2F,
	34943 - 19968: jis0208<<14 | 0x15<<7 | 0x3D,
	34944 - 19968: jis0212<<14 | 0x3B<<7 | 0x17,
	34945 - 19968: jis0208<<14 | 0x49<<7 | 0x2E,
	34946 - 19968: jis0208<<14 | 0x49<<7 | 0x35,
	34952 - 19968: jis0208<<14 | 0x16<<7 | 0x15,
	34955 - 19968: jis0208<<14 | 0x21<<7 | 0x3D,
	34957 - 19968: jis0208<<14 | 0x49<<7 | 0x3B,
	34962 - 19968: jis0208<<14 | 0x49<<7 | 0x37,
	34966 - 19968: jis0208<<14 | 0x21<<7 | 0x14,
	34967 - 19968: jis0208<<14 | 0x49<<7 | 0x36,
	34968 - 19968: jis0212<<14 | 0x3B<<7 | 0x18,
	34969 - 19968: jis0208<<14 | 0x49<<7 | 0x39,
	34970 - 19968: jis0212<<14 | 0x3B<<7 | 0x19,
	34971 - 19968: jis0212<<14 | 0x3B<<7 | 0x1A,
	34972 - 19968: jis0212<<14 | 0x3B<<7 | 0x1B,
	34974 - 19968: jis0208<<14 | 0x49<<7 | 0x30,
	34975 - 19968: jis0212<<14 | 0x3B<<7 | 0x1C,
	34976 - 19968: jis0212<<14 | 0x3B<<7 | 0x1D,
	34978 - 19968: jis0208<<14 | 0x49<<7 | 0x3A,
	34980 - 19968: jis0208<<14 | 0x49<<7 | 0x3C,
	34984 - 19968: jis0212<<14 | 0x3B<<7 | 0x1E,
	34986 - 19968: jis0212<<14 | 0x3B<<7 | 0x1F,
	34987 - 19968: jis0208<<14 | 0x27<<7 | 0x4E,
	34990 - 19968: jis0208<<14 | 0x49<<7 | 0x38,
	34992 - 19968: jis0208<<14 | 0x49<<7 | 0x3D,
	34993 - 19968: jis0208<<14 | 0x49<<7 | 0x3F,
	34996 - 19968: jis0208<<14 | 0x17<<7 | 0x32,
	34997 - 19968: jis0208<<14 | 0x49<<7 | 0x33,
	34999 - 19968: jis0208<<14 | 0x0F<<7 | 0x20,
	35002 - 19968: jis0212<<14 | 0x3B<<7 | 0x20,
	35005 - 19968: jis0212<<14 | 0x3B<<7 | 0x21,
	35006 - 19968: jis0212<<14 | 0x3B<<7 | 0x22,
	35007 - 19968: jis0208<<14 | 0x49<<7 | 0x3E,
	35008 - 19968: jis0212<<14 | 0x3B<<7 | 0x23,
	35009 - 19968: jis0208<<14 | 0x19<<7 | 0x3A,
	35010 - 19968: jis0208<<14 | 0x2D<<7 | 0x55,
	35011 - 19968: jis0208<<14 | 0x49<<7 | 0x40,
	35012 - 19968: jis0208<<14 | 0x49<<7 | 0x41,
	35013 - 19968: jis0208<<14 | 0x20<<7 | 0x54,
	35018 - 19968: jis0212<<14 | 0x3B<<7 | 0x24,
	35019 - 19968: jis0212<<14 | 0x3B<<7 | 0x25,
	35020 - 19968: jis0212<<14 | 0x3B<<7 | 0x26,
	35021 - 19968: jis0212<<14 | 0x3B<<7 | 0x27,
	35022 - 19968: jis0212<<14 | 0x3B<<7 | 0x28,
	35023 - 19968: jis0208<<14 | 0x2D<<7 | 0x01,
	35025 - 19968: jis0212<<14 | 0x3B<<7 | 0x29,
	35026 - 19968: jis0212<<14 | 0x3B<<7 | 0x2A,
	35027 - 19968: jis0212<<14 | 0x3B<<7 | 0x2B,
	35028 - 19968: jis0208<<14 | 0x49<<7 | 0x42,
	35029 - 19968: jis0208<<14 | 0x2C<<7 | 0x14,
	35032 - 19968: jis0208<<14 | 0x49<<7 | 0x43,
	35033 - 19968: jis0208<<14 | 0x49<<7 | 0x44,
	35035 - 19968: jis0212<<14 | 0x3B<<7 | 0x2C,
	35036 - 19968: jis0208<<14 | 0x29<<7 | 0x43,
	35037 - 19968: jis0208<<14 | 0x49<<7 | 0x45,
	35038 - 19968: jis0212<<14 | 0x3B<<7 | 0x2D,
	35039 - 19968: jis0208<<14 | 0x19<<7 | 0x1F,
	35041 - 19968: jis0208<<14 | 0x2D<<7 | 0x02,
	35047 - 19968: jis0212<<14 | 0x3B<<7 | 0x2E,
	35048 - 19968: jis0208<<14 | 0x49<<7 | 0x4A,
	35055 - 19968: jis0212<<14 | 0x3B<<7 | 0x2F,
	35056 - 19968: jis0212<<14 | 0x3B<<7 | 0x30,
	35057 - 19968: jis0212<<14 | 0x3B<<7 | 0x31,
	35058 - 19968: jis0208<<14 | 0x49<<7 | 0x4B,
	35059 - 19968: jis0208<<14 | 0x1D<<7 | 0x37,
	35060 - 19968: jis0208<<14 | 0x49<<7 | 0x49,
	35061 - 19968: jis0208<<14 | 0x5A<<7 | 0x45,
	35063 - 19968: jis0212<<14 | 0x3B<<7 | 0x33,
	35064 - 19968: jis0208<<14 | 0x2C<<7 | 0x46,
	35065 - 19968: jis0208<<14 | 0x49<<7 | 0x46,
	35068 - 19968: jis0208<<14 | 0x49<<7 | 0x48,
	35069 - 19968: jis0208<<14 | 0x1F<<7 | 0x1C,
	35070 - 19968: jis0208<<14 | 0x1E<<7 | 0x5D,
	35073 - 19968: jis0212<<14 | 0x3B<<7 | 0x34,
	35074 - 19968: jis0208<<14 | 0x49<<7 | 0x47,
	35076 - 19968: jis0208<<14 | 0x49<<7 | 0x4C,
	35078 - 19968: jis0212<<14 | 0x3B<<7 | 0x35,
	35079 - 19968: jis0208<<14 | 0x29<<7 | 0x02,
	35082 - 19968: jis0208<<14 | 0x49<<7 | 0x4E,
	35084 - 19968: jis0208<<14 | 0x49<<7 | 0x4D,
	35085 - 19968: jis0212<<14 | 0x3B<<7 | 0x36,
	35086 - 19968: jis0212<<14 | 0x3B<<7 | 0x37,
	35087 - 19968: jis0212<<14 | 0x3B<<7 | 0x38,
	35088 - 19968: jis0208<<14 | 0x12<<7 | 0x4B,
	35090 - 19968: jis0208<<14 | 0x2A<<7 | 0x0A,
	35091 - 19968: jis0208<<14 | 0x49<<7 | 0x4F,
	35093 - 19968: jis0212<<14 | 0x3B<<7 | 0x39,
	35094 - 19968: jis0212<<14 | 0x3B<<7 | 0x3A,
	35096 - 19968: jis0212<<14 | 0x3B<<7 | 0x3B,
	35097 - 19968: jis0212<<14 | 0x3B<<7 | 0x3C,
	35098 - 19968: jis0212<<14 | 0x3B<<7 | 0x3D,
	35100 - 19968: jis0208<<14 | 0x58<<7 | 0x01,
	35101 - 19968: jis0208<<14 | 0x49<<7 | 0x5B,
	35102 - 19968: jis0208<<14 | 0x49<<7 | 0x51,
	35104 - 19968: jis0212<<14 | 0x3B<<7 | 0x3F,
	35109 - 19968: jis0208<<14 | 0x49<<7 | 0x52,
	35110 - 19968: jis0212<<14 | 0x3B<<7 | 0x40,
	35111 - 19968: jis0212<<14 | 0x3B<<7 | 0x41,
	35112 - 19968: jis0212<<14 | 0x3B<<7 | 0x42,
	35114 - 19968: jis0208<<14 | 0x49<<7 | 0x53,
	35115 - 19968: jis0208<<14 | 0x49<<7 | 0x54,
	35120 - 19968: jis0212<<14 | 0x3B<<7 | 0x43,
	35121 - 19968: jis0212<<14 | 0x3B<<7 | 0x44,
	35122 - 19968: jis0212<<14 | 0x3B<<7 | 0x45,
	35125 - 19968: jis0212<<14 | 0x3B<<7 | 0x46,
	35126 - 19968: jis0208<<14 | 0x49<<7 | 0x58,
	35128 - 19968: jis0208<<14 | 0x49<<7 | 0x59,
	35129 - 19968: jis0212<<14 | 0x3B<<7 | 0x47,
	35130 - 19968: jis0212<<14 | 0x3B<<7 | 0x48,
	35131 - 19968: jis0208<<14 | 0x49<<7 | 0x57,
	35134 - 19968: jis0212<<14 | 0x3B<<7 | 0x49,
	35136 - 19968: jis0212<<14 | 0x3B<<7 | 0x4A,
	35137 - 19968: jis0208<<14 | 0x49<<7 | 0x55,
	35138 - 19968: jis0212<<14 | 0x3B<<7 | 0x4B,
	35139 - 19968: jis0208<<14 | 0x49<<7 | 0x50,
	35140 - 19968: jis0208<<14 | 0x49<<7 | 0x56,
	35141 - 19968: jis0212<<14 | 0x3B<<7 | 0x4C,
	35142 - 19968: jis0212<<14 | 0x3B<<7 | 0x4D,
	35145 - 19968: jis0212<<14 | 0x3B<<7 | 0x4E,
	35148 - 19968: jis0208<<14 | 0x49<<7 | 0x5A,
	35149 - 19968: jis0208<<14 | 0x4F<<7 | 0x16,
	35151 - 19968: jis0212<<14 | 0x3B<<7 | 0x4F,
	35154 - 19968: jis0212<<14 | 0x3B<<7 | 0x50,
	35158 - 19968: jis0208<<14 | 0x11<<7 | 0x07,
	35159 - 19968: jis0212<<14 | 0x3B<<7 | 0x51,
	35162 - 19968: jis0212<<14 | 0x3B<<7 | 0x52,
	35163 - 19968: jis0212<<14 | 0x3B<<7 | 0x53,
	35164 - 19968: jis0212<<14 | 0x3B<<7 | 0x54,
	35166 - 19968: jis0208<<14 | 0x49<<7 | 0x5D,
	35167 - 19968: jis0208<<14 | 0x15<<7 | 0x3E,
	35168 - 19968: jis0208<<14 | 0x49<<7 | 0x5C,
	35169 - 19968: jis0212<<14 | 0x3B<<7 | 0x55,
	35170 - 19968: jis0212<<14 | 0x3B<<7 | 0x56,
	35171 - 19968: jis0212<<14 | 0x3B<<7 | 0x57,
	35172 - 19968: jis0208<<14 | 0x4A<<7 | 0x01,
	35174 - 19968: jis0208<<14 | 0x4A<<7 | 0x00,
	35178 - 19968: jis0208<<14 | 0x4A<<7 | 0x03,
	35179 - 19968: jis0212<<14 | 0x3B<<7 | 0x58,
	35181 - 19968: jis0208<<14 | 0x4A<<7 | 0x02,
	35182 - 19968: jis0212<<14 | 0x3B<<7 | 0x59,
	35183 - 19968: jis0208<<14 | 0x4A<<7 | 0x04,
	35184 - 19968: jis0212<<14 | 0x3B<<7 | 0x5A,
	35186 - 19968: jis0208<<14 | 0x1C<<7 | 0x10,
	35187 - 19968: jis0212<<14 | 0x3B<<7 | 0x5B,
	35188 - 19968: jis0208<<14 | 0x4A<<7 | 0x05,
	35189 - 19968: jis0212<<14 | 0x3B<<7 | 0x5C,
	35191 - 19968: jis0208<<14 | 0x4A<<7 | 0x06,
	35194 - 19968: jis0212<<14 | 0x3B<<7 | 0x5D,
	35195 - 19968: jis0212<<14 | 0x3C<<7 | 0x00,
	35196 - 19968: jis0212<<14 | 0x3C<<7 | 0x01,
	35197 - 19968: jis0212<<14 | 0x3C<<7 | 0x02,
	35198 - 19968: jis0208<<14 | 0x4A<<7 | 0x07,
	35199 - 19968: jis0208<<14 | 0x1F<<7 | 0x1D,
	35201 - 19968: jis0208<<14 | 0x2C<<7 | 0x36,
	35203 - 19968: jis0208<<14 | 0x4A<<7 | 0x08,
	35206 - 19968: jis0208<<14 | 0x29<<7 | 0x03,
	35207 - 19968: jis0208<<14 | 0x26<<7 | 0x25,
	35208 - 19968: jis0208<<14 | 0x4A<<7 | 0x09,
	35209 - 19968: jis0212<<14 | 0x3C<<7 | 0x03,
	35210 - 19968: jis0208<<14 | 0x4A<<7 | 0x0A,
	35211 - 19968: jis0208<<14 | 0x17<<7 | 0x0A,
	35213 - 19968: jis0212<<14 | 0x3C<<7 | 0x04,
	35215 - 19968: jis0208<<14 | 0x14<<7 | 0x0B,
	35216 - 19968: jis0212<<14 | 0x3C<<7 | 0x05,
	35219 - 19968: jis0208<<14 | 0x4A<<7 | 0x0B,
	35220 - 19968: jis0212<<14 | 0x3C<<7 | 0x06,
	35221 - 19968: jis0212<<14 | 0x3C<<7 | 0x07,
	35222 - 19968: jis0208<<14 | 0x1A<<7 | 0x4A,
	35223 - 19968: jis0208<<14 | 0x26<<7 | 0x20,
	35224 - 19968: jis0208<<14 | 0x4A<<7 | 0x0C,
	35226 - 19968: jis0208<<14 | 0x12<<7 | 0x2F,
	35227 - 19968: jis0212<<14 | 0x3C<<7 | 0x08,
	35228 - 19968: jis0212<<14 | 0x3C<<7 | 0x09,
	35231 - 19968: jis0212<<14 | 0x3C<<7 | 0x0A,
	35232 - 19968: jis0212<<14 | 0x3C<<7 | 0x0B,
	35233 - 19968: jis0208<<14 | 0x4A<<7 | 0x0D,
	35237 - 19968: jis0212<<14 | 0x3C<<7 | 0x0C,
	35238 - 19968: jis0208<<14 | 0x4A<<7 | 0x0F,
	35239 - 19968: jis0208<<14 | 0x2C<<7 | 0x56,
	35241 - 19968: jis0208<<14 | 0x4A<<7 | 0x0E,
	35242 - 19968: jis0208<<14 | 0x1E<<7 | 0x25,
	35244 - 19968: jis0208<<14 | 0x4A<<7 | 0x10,
	35247 - 19968: jis0208<<14 | 0x4A<<7 | 0x11,
	35248 - 19968: jis0212<<14 | 0x3C<<7 | 0x0D,
	35250 - 19968: jis0208<<14 | 0x4A<<7 | 0x12,
	35251 - 19968: jis0208<<14 | 0x13<<7 | 0x30,
	35252 - 19968: jis0212<<14 | 0x3C<<7 | 0x0E,
	35253 - 19968: jis0212<<14 | 0x3C<<7 | 0x0F,
	35254 - 19968: jis0212<<14 | 0x3C<<7 | 0x10,
	35255 - 19968: jis0212<<14 | 0x3C<<7 | 0x11,
	35258 - 19968: jis0208<<14 | 0x4A<<7 | 0x13,
	35260 - 19968: jis0212<<14 | 0x3C<<7 | 0x12,
	35261 - 19968: jis0208<<14 | 0x4A<<7 | 0x14,
	35263 - 19968: jis0208<<14 | 0x4A<<7 | 0x15,
	35264 - 19968: jis0208<<14 | 0x4A<<7 | 0x16,
	35282 - 19968: jis0208<<14 | 0x12<<7 | 0x30,
	35284 - 19968: jis0212<<14 | 0x3C<<7 | 0x13,
	35285 - 19968: jis0212<<14 | 0x3C<<7 | 0x14,
	35286 - 19968: jis0212<<14 | 0x3C<<7 | 0x15,
	35287 - 19968: jis0212<<14 | 0x3C<<7 | 0x16,
	35288 - 19968: jis0212<<14 | 0x3C<<7 | 0x17,
	35290 - 19968: jis0208<<14 | 0x4A<<7 | 0x17,
	35292 - 19968: jis0208<<14 | 0x4A<<7 | 0x18,
	35293 - 19968: jis0208<<14 | 0x4A<<7 | 0x19,
	35299 - 19968: jis0208<<14 | 0x11<<7 | 0x51,
	35301 - 19968: jis0212<<14 | 0x3C<<7 | 0x18,
	35302 - 19968: jis0208<<14 | 0x1E<<7 | 0x07,
	35303 - 19968: jis0208<<14 | 0x4A<<7 | 0x1A,
	35305 - 19968: jis0212<<14 | 0x3C<<7 | 0x19,
	35307 - 19968: jis0212<<14 | 0x3C<<7 | 0x1A,
	35309 - 19968: jis0212<<14 | 0x3C<<7 | 0x1B,
	35313 - 19968: jis0212<<14 | 0x3C<<7 | 0x1C,
	35315 - 19968: jis0212<<14 | 0x3C<<7 | 0x1D,
	35316 - 19968: jis0208<<14 | 0x4A<<7 | 0x1B,
	35318 - 19968: jis0212<<14 | 0x3C<<7 | 0x1E,
	35320 - 19968: jis0208<<14 | 0x4A<<7 | 0x1C,
	35321 - 19968: jis0212<<14 | 0x3C<<7 | 0x1F,
	35325 - 19968: jis0212<<14 | 0x3C<<7 | 0x20,
	35327 - 19968: jis0212<<14 | 0x3C<<7 | 0x21,
	35328 - 19968: jis0208<<14 | 0x17<<7 | 0x1F,
	35330 - 19968: jis0208<<14 | 0x23<<7 | 0x5A,
	35331 - 19968: jis0208<<14 | 0x4A<<7 | 0x1D,
	35332 - 19968: jis0212<<14 | 0x3C<<7 | 0x22,
	35333 - 19968: jis0212<<14 | 0x3C<<7 | 0x23,
	35335 - 19968: jis0212<<14 | 0x3C<<7 | 0x24,
	35336 - 19968: jis0208<<14 | 0x16<<7 | 0x36,
	35338 - 19968: jis0208<<14 | 0x1E<<7 | 0x35,
	35340 - 19968: jis0208<<14 | 0x4A<<7 | 0x20,
	35342 - 19968: jis0208<<14 | 0x25<<7 | 0x03,
	35343 - 19968: jis0212<<14 | 0x3C<<7 | 0x25,
	35344 - 19968: jis0208<<14 | 0x4A<<7 | 0x1F,
	35345 - 19968: jis0212<<14 | 0x3C<<7 | 0x26,
	35346 - 19968: jis0208<<14 | 0x5A<<7 | 0x46,
	35347 - 19968: jis0208<<14 | 0x16<<7 | 0x10,
	35348 - 19968: jis0212<<14 | 0x3C<<7 | 0x28,
	35349 - 19968: jis0212<<14 | 0x3C<<7 | 0x29,
	35350 - 19968: jis0208<<14 | 0x4A<<7 | 0x1E,
	35351 - 19968: jis0208<<14 | 0x21<<7 | 0x56,
	35352 - 19968: jis0208<<14 | 0x14<<7 | 0x0C,
	35355 - 19968: jis0208<<14 | 0x4A<<7 | 0x21,
	35357 - 19968: jis0208<<14 | 0x4A<<7 | 0x22,
	35358 - 19968: jis0212<<14 | 0x3C<<7 | 0x2A,
	35359 - 19968: jis0208<<14 | 0x1D<<7 | 0x38,
	35360 - 19968: jis0212<<14 | 0x3C<<7 | 0x2B,
	35362 - 19968: jis0212<<14 | 0x3C<<7 | 0x2C,
	35363 - 19968: jis0208<<14 | 0x16<<7 | 0x4C,
	35364 - 19968: jis0212<<14 | 0x3C<<7 | 0x2D,
	35365 - 19968: jis0208<<14 | 0x4A<<7 | 0x23,
	35366 - 19968: jis0212<<14 | 0x3C<<7 | 0x2E,
	35370 - 19968: jis0208<<14 | 0x2A<<7 | 0x0B,
	35371 - 19968: jis0212<<14 | 0x3C<<7 | 0x2F,
	35372 - 19968: jis0212<<14 | 0x3C<<7 | 0x30,
	35373 - 19968: jis0208<<14 | 0x1F<<7 | 0x3E,
	35375 - 19968: jis0212<<14 | 0x3C<<7 | 0x31,
	35377 - 19968: jis0208<<14 | 0x14<<7 | 0x55,
	35379 - 19968: jis0208<<14 | 0x2B<<7 | 0x54,
	35380 - 19968: jis0208<<14 | 0x20<<7 | 0x29,
	35381 - 19968: jis0212<<14 | 0x3C<<7 | 0x32,
	35382 - 19968: jis0208<<14 | 0x4A<<7 | 0x24,
	35383 - 19968: jis0208<<14 | 0x5A<<7 | 0x47,
	35386 - 19968: jis0208<<14 | 0x1E<<7 | 0x26,
	35387 - 19968: jis0208<<14 | 0x22<<7 | 0x4F,
	35388 - 19968: jis0208<<14 | 0x1D<<7 | 0x39,
	35389 - 19968: jis0212<<14 | 0x3C<<7 | 0x34,
	35390 - 19968: jis0212<<14 | 0x3C<<7 | 0x35,
	35392 - 19968: jis0212<<14 | 0x3C<<7 | 0x36,
	35393 - 19968: jis0208<<14 | 0x4A<<7 | 0x25,
	35395 - 19968: jis0212<<14 | 0x3C<<7 | 0x37,
	35397 - 19968: jis0212<<14 | 0x3C<<7 | 0x38,
	35398 - 19968: jis0208<<14 | 0x4A<<7 | 0x28,
	35399 - 19968: jis0212<<14 | 0x3C<<7 | 0x39,
	35400 - 19968: jis0208<<14 | 0x4A<<7 | 0x29,
	35401 - 19968: jis0212<<14 | 0x3C<<7 | 0x3A,
	35405 - 19968: jis0212<<14 | 0x3C<<7 | 0x3B,
	35406 - 19968: jis0212<<14 | 0x3C<<7 | 0x3C,
	35408 - 19968: jis0208<<14 | 0x19<<7 | 0x1D,
	35409 - 19968: jis0208<<14 | 0x21<<7 | 0x21,
	35410 - 19968: jis0208<<14 | 0x4A<<7 | 0x27,
	35411 - 19968: jis0212<<14 | 0x3C<<7 | 0x3D,
	35412 - 19968: jis0208<<14 | 0x1D<<7 | 0x3A,
	35413 - 19968: jis0208<<14 | 0x28<<7 | 0x1D,
	35414 - 19968: jis0212<<14 | 0x3C<<7 | 0x3E,
	35415 - 19968: jis0212<<14 | 0x3C<<7 | 0x3F,
	35416 - 19968: jis0212<<14 | 0x3C<<7 | 0x40,
	35419 - 19968: jis0208<<14 | 0x4A<<7 | 0x26,
	35420 - 19968: jis0212<<14 | 0x3C<<7 | 0x41,
	35421 - 19968: jis0212<<14 | 0x3C<<7 | 0x42,
	35422 - 19968: jis0208<<14 | 0x1A<<7 | 0x4B,
	35424 - 19968: jis0208<<14 | 0x10<<7 | 0x32,
	35425 - 19968: jis0212<<14 | 0x3C<<7 | 0x43,
	35426 - 19968: jis0208<<14 | 0x4A<<7 | 0x2D,
	35427 - 19968: jis0208<<14 | 0x16<<7 | 0x37,
	35429 - 19968: jis0212<<14 | 0x3C<<7 | 0x44,
	35430 - 19968: jis0208<<14 | 0x1A<<7 | 0x4D,
	35431 - 19968: jis0212<<14 | 0x3C<<7 | 0x45,
	35433 - 19968: jis0208<<14 | 0x1A<<7 | 0x4C,
	35435 - 19968: jis0208<<14 | 0x2E<<7 | 0x2C,
	35436 - 19968: jis0208<<14 | 0x4A<<7 | 0x2C,
	35437 - 19968: jis0208<<14 | 0x4A<<7 | 0x2B,
	35438 - 19968: jis0208<<14 | 0x20<<7 | 0x06,
	35440 - 19968: jis0208<<14 | 0x14<<7 | 0x2C,
	35441 - 19968: jis0208<<14 | 0x2E<<7 | 0x22,
	35442 - 19968: jis0208<<14 | 0x12<<7 | 0x19,
	35443 - 19968: jis0208<<14 | 0x1D<<7 | 0x3B,
	35445 - 19968: jis0212<<14 | 0x3C<<7 | 0x46,
	35446 - 19968: jis0212<<14 | 0x3C<<7 | 0x47,
	35447 - 19968: jis0212<<14 | 0x3C<<7 | 0x48,
	35449 - 19968: jis0208<<14 | 0x5A<<7 | 0x48,
	35450 - 19968: jis0212<<14 | 0x3C<<7 | 0x4A,
	35451 - 19968: jis0212<<14 | 0x3C<<7 | 0x4B,
	35452 - 19968: jis0208<<14 | 0x4A<<7 | 0x2A,
	35454 - 19968: jis0212<<14 | 0x3C<<7 | 0x4C,
	35455 - 19968: jis0212<<14 | 0x3C<<7 | 0x4D,
	35456 - 19968: jis0212<<14 | 0x3C<<7 | 0x4E,
	35458 - 19968: jis0208<<14 | 0x4A<<7 | 0x2F,
	35459 - 19968: jis0212<<14 | 0x3C<<7 | 0x4F,
	35460 - 19968: jis0208<<14 | 0x4A<<7 | 0x30,
	35461 - 19968: jis0208<<14 | 0x4A<<7 | 0x2E,
	35462 - 19968: jis0212<<14 | 0x3C<<7 | 0x50,
	35463 - 19968: jis0208<<14 | 0x17<<7 | 0x37,
	35465 - 19968: jis0208<<14 | 0x2C<<7 | 0x1F,
	35467 - 19968: jis0212<<14 | 0x3C<<7 | 0x51,
	35468 - 19968: jis0208<<14 | 0x1A<<7 | 0x4E,
	35469 - 19968: jis0208<<14 | 0x26<<7 | 0x06,
	35471 - 19968: jis0212<<14 | 0x3C<<7 | 0x52,
	35472 - 19968: jis0212<<14 | 0x3C<<7 | 0x53,
	35473 - 19968: jis0208<<14 | 0x4A<<7 | 0x33,
	35474 - 19968: jis0212<<14 | 0x3C<<7 | 0x54,
	35475 - 19968: jis0208<<14 | 0x1F<<7 | 0x1F,
	35477 - 19968: jis0208<<14 | 0x22<<7 | 0x21,
	35478 - 19968: jis0212<<14 | 0x3C<<7 | 0x55,
	35479 - 19968: jis0212<<14 | 0x3C<<7 | 0x56,
	35480 - 19968: jis0208<<14 | 0x2C<<7 | 0x15,
	35481 - 19968: jis0212<<14 | 0x3C<<7 | 0x57,
	35482 - 19968: jis0208<<14 | 0x4A<<7 | 0x36,
	35486 - 19968: jis0208<<14 | 0x17<<7 | 0x4B,
	35487 - 19968: jis0212<<14 | 0x3C<<7 | 0x58,
	35488 - 19968: jis0208<<14 | 0x1F<<7 | 0x1E,
	35489 - 19968: jis0208<<14 | 0x4A<<7 | 0x32,
	35491 - 19968: jis0208<<14 | 0x4A<<7 | 0x37,
	35492 - 19968: jis0208<<14 | 0x17<<7 | 0x4C,
	35493 - 19968: jis0208<<14 | 0x4A<<7 | 0x34,
	35494 - 19968: jis0208<<14 | 0x4A<<7 | 0x35,
	35495 - 19968: jis0208<<14 | 0x5A<<7 | 0x49,
	35496 - 19968: jis0208<<14 | 0x4A<<7 | 0x31,
	35497 - 19968: jis0212<<14 | 0x3C<<7 | 0x5A,
	35500 - 19968: jis0208<<14 | 0x1F<<7 | 0x41,
	35501 - 19968: jis0208<<14 | 0x25<<7 | 0x28,
	35502 - 19968: jis0212<<14 | 0x3C<<7 | 0x5B,
	35503 - 19968: jis0212<<14 | 0x3C<<7 | 0x5C,
	35504 - 19968: jis0208<<14 | 0x22<<7 | 0x0E,
	35506 - 19968: jis0208<<14 | 0x11<<7 | 0x3C,
	35507 - 19968: jis0212<<14 | 0x3C<<7 | 0x5D,
	35510 - 19968: jis0212<<14 | 0x3D<<7 | 0x00,
	35511 - 19968: jis0212<<14 | 0x3D<<7 | 0x01,
	35513 - 19968: jis0208<<14 | 0x27<<7 | 0x4F,
	35515 - 19968: jis0212<<14 | 0x3D<<7 | 0x02,
	35516 - 19968: jis0208<<14 | 0x14<<7 | 0x22,
	35518 - 19968: jis0208<<14 | 0x5A<<7 | 0x4A,
	35519 - 19968: jis0208<<14 | 0x23<<7 | 0x13,
	35522 - 19968: jis0208<<14 | 0x4A<<7 | 0x3A,
	35523 - 19968: jis0212<<14 | 0x3D<<7 | 0x04,
	35524 - 19968: jis0208<<14 | 0x4A<<7 | 0x38,
	35526 - 19968: jis0212<<14 | 0x3D<<7 | 0x05,
	35527 - 19968: jis0208<<14 | 0x22<<7 | 0x2B,
	35528 - 19968: jis0212<<14 | 0x3D<<7 | 0x06,
	35529 - 19968: jis0212<<14 | 0x3D<<7 | 0x07,
	35530 - 19968: jis0212<<14 | 0x3D<<7 | 0x08,
	35531 - 19968: jis0208<<14 | 0x1F<<7 | 0x20,
	35532 - 19968: jis0208<<14 | 0x13<<7 | 0x31,
	35533 - 19968: jis0208<<14 | 0x4A<<7 | 0x39,
	35535 - 19968: jis0208<<14 | 0x1E<<7 | 0x3A,
	35537 - 19968: jis0212<<14 | 0x3D<<7 | 0x09,
	35538 - 19968: jis0208<<14 | 0x2D<<7 | 0x29,
	35539 - 19968: jis0212<<14 | 0x3D<<7 | 0x0A,
	35540 - 19968: jis0212<<14 | 0x3D<<7 | 0x0B,
	35541 - 19968: jis0212<<14 | 0x3D<<7 | 0x0C,
	35542 - 19968: jis0208<<14 | 0x2E<<7 | 0x1F,
	35543 - 19968: jis0212<<14 | 0x3D<<7 | 0x0D,
	35546 - 19968: jis0208<<14 | 0x4A<<7 | 0x3B,
	35547 - 19968: jis0208<<14 | 0x4A<<7 | 0x46,
	35548 - 19968: jis0208<<14 | 0x23<<7 | 0x14,
	35549 - 19968: jis0212<<14 | 0x3D<<7 | 0x0E,
	35550 - 19968: jis0208<<14 | 0x4A<<7 | 0x45,
	35551 - 19968: jis0208<<14 | 0x5A<<7 | 0x4B,
	35552 - 19968: jis0208<<14 | 0x4A<<7 | 0x42,
	35553 - 19968: jis0208<<14 | 0x4A<<7 | 0x4A,
	35554 - 19968: jis0208<<14 | 0x4A<<7 | 0x43,
	35556 - 19968: jis0208<<14 | 0x4A<<7 | 0x3F,
	35558 - 19968: jis0208<<14 | 0x23<<7 | 0x5B,
	35559 - 19968: jis0208<<14 | 0x4A<<7 | 0x3E,
	35563 - 19968: jis0208<<14 | 0x4A<<7 | 0x3C,
	35564 - 19968: jis0212<<14 | 0x3D<<7 | 0x10,
	35565 - 19968: jis0208<<14 | 0x2C<<7 | 0x00,
	35566 - 19968: jis0208<<14 | 0x1A<<7 | 0x4F,
	35568 - 19968: jis0212<<14 | 0x3D<<7 | 0x11,
	35569 - 19968: jis0208<<14 | 0x4A<<7 | 0x40,
	35571 - 19968: jis0208<<14 | 0x4A<<7 | 0x3D,
	35572 - 19968: jis0212<<14 | 0x3D<<7 | 0x12,
	35573 - 19968: jis0212<<14 | 0x3D<<7 | 0x13,
	35574 - 19968: jis0208<<14 | 0x5A<<7 | 0x4D,
	35575 - 19968: jis0208<<14 | 0x4A<<7 | 0x44,
	35576 - 19968: jis0208<<14 | 0x1C<<7 | 0x53,
	35578 - 19968: jis0208<<14 | 0x17<<7 | 0x20,
	35580 - 19968: jis0212<<14 | 0x3D<<7 | 0x15,
	35582 - 19968: jis0208<<14 | 0x21<<7 | 0x59,
	35583 - 19968: jis0212<<14 | 0x3D<<7 | 0x16,
	35584 - 19968: jis0208<<14 | 0x2A<<7 | 0x24,
	35585 - 19968: jis0208<<14 | 0x10<<7 | 0x39,
	35586 - 19968: jis0208<<14 | 0x0F<<7 | 0x41,
	35588 - 19968: jis0208<<14 | 0x25<<7 | 0x04,
	35589 - 19968: jis0212<<14 | 0x3D<<7 | 0x17,
	35590 - 19968: jis0212<<14 | 0x3D<<7 | 0x18,
	35591 - 19968: jis0208<<14 | 0x4A<<7 | 0x48,
	35594 - 19968: jis0212<<14 | 0x3D<<7 | 0x1E,
	35595 - 19968: jis0212<<14 | 0x3D<<7 | 0x19,
	35596 - 19968: jis0208<<14 | 0x4A<<7 | 0x47,
	35598 - 19968: jis0208<<14 | 0x25<<7 | 0x45,
	35600 - 19968: jis0208<<14 | 0x4A<<7 | 0x4C,
	35601 - 19968: jis0212<<14 | 0x3D<<7 | 0x1A,
	35604 - 19968: jis0208<<14 | 0x4A<<7 | 0x41,
	35606 - 19968: jis0208<<14 | 0x4A<<7 | 0x4B,
	35607 - 19968: jis0208<<14 | 0x4A<<7 | 0x4D,
	35609 - 19968: jis0208<<14 | 0x17<<7 | 0x0B,
	35610 - 19968: jis0208<<14 | 0x4A<<7 | 0x49,
	35611 - 19968: jis0208<<14 | 0x18<<7 | 0x35,
	35612 - 19968: jis0212<<14 | 0x3D<<7 | 0x1B,
	35613 - 19968: jis0208<<14 | 0x1B<<7 | 0x34,
	35614 - 19968: jis0212<<14 | 0x3D<<7 | 0x1C,
	35615 - 19968: jis0212<<14 | 0x3D<<7 | 0x1D,
	35616 - 19968: jis0208<<14 | 0x4A<<7 | 0x4E,
	35617 - 19968: jis0208<<14 | 0x2C<<7 | 0x37,
	35622 - 19968: jis0208<<14 | 0x4A<<7 | 0x51,
	35624 - 19968: jis0208<<14 | 0x4A<<7 | 0x54,
	35627 - 19968: jis0208<<14 | 0x4A<<7 | 0x52,
	35628 - 19968: jis0208<<14 | 0x28<<7 | 0x14,
	35629 - 19968: jis0212<<14 | 0x3D<<7 | 0x1F,
	35632 - 19968: jis0212<<14 | 0x3D<<7 | 0x20,
	35635 - 19968: jis0208<<14 | 0x4A<<7 | 0x4F,
	35639 - 19968: jis0212<<14 | 0x3D<<7 | 0x21,
	35641 - 19968: jis0208<<14 | 0x15<<7 | 0x3F,
	35644 - 19968: jis0212<<14 | 0x3D<<7 | 0x22,
	35646 - 19968: jis0208<<14 | 0x4A<<7 | 0x53,
	35649 - 19968: jis0208<<14 | 0x4A<<7 | 0x55,
	35650 - 19968: jis0212<<14 | 0x3D<<7 | 0x23,
	35651 - 19968: jis0212<<14 | 0x3D<<7 | 0x24,
	35652 - 19968: jis0212<<14 | 0x3D<<7 | 0x25,
	35653 - 19968: jis0212<<14 | 0x3D<<7 | 0x26,
	35654 - 19968: jis0212<<14 | 0x3D<<7 | 0x27,
	35656 - 19968: jis0212<<14 | 0x3D<<7 | 0x28,
	35657 - 19968: jis0208<<14 | 0x4A<<7 | 0x59,
	35660 - 19968: jis0208<<14 | 0x4A<<7 | 0x56,
	35661 - 19968: jis0212<<14 | 0x3D<<7 | 0x2D,
	35662 - 19968: jis0208<<14 | 0x4A<<7 | 0x58,
	35663 - 19968: jis0208<<14 | 0x4A<<7 | 0x57,
	35666 - 19968: jis0212<<14 | 0x3D<<7 | 0x29,
	35667 - 19968: jis0208<<14 | 0x5A<<7 | 0x4E,
	35668 - 19968: jis0212<<14 | 0x3D<<7 | 0x2B,
	35670 - 19968: jis0208<<14 | 0x4A<<7 | 0x5A,
	35672 - 19968: jis0208<<14 | 0x1B<<7 | 0x10,
	35673 - 19968: jis0212<<14 | 0x3D<<7 | 0x2C,
	35674 - 19968: jis0208<<14 | 0x4A<<7 | 0x5C,
	35675 - 19968: jis0208<<14 | 0x4A<<7 | 0x5B,
	35676 - 19968: jis0208<<14 | 0x28<<7 | 0x47,
	35678 - 19968: jis0212<<14 | 0x3D<<7 | 0x2E,
	35679 - 19968: jis0208<<14 | 0x4B<<7 | 0x00,
	35683 - 19968: jis0212<<14 | 0x3D<<7 | 0x2F,
	35686 - 19968: jis0208<<14 | 0x16<<7 | 0x38,
	35691 - 19968: jis0208<<14 | 0x4A<<7 | 0x5D,
	35692 - 19968: jis0208<<14 | 0x4B<<7 | 0x01,
	35693 - 19968: jis0212<<14 | 0x3D<<7 | 0x30,
	35695 - 19968: jis0208<<14 | 0x4B<<7 | 0x02,
	35696 - 19968: jis0208<<14 | 0x14<<7 | 0x23,
	35697 - 19968: jis0208<<14 | 0x45<<7 | 0x20,
	35698 - 19968: jis0208<<14 | 0x1D<<7 | 0x58,
	35700 - 19968: jis0208<<14 | 0x4B<<7 | 0x03,
	35702 - 19968: jis0212<<14 | 0x3D<<7 | 0x31,
	35703 - 19968: jis0208<<14 | 0x17<<7 | 0x4D,
	35704 - 19968: jis0212<<14 | 0x3D<<7 | 0x32,
	35705 - 19968: jis0212<<14 | 0x3D<<7 | 0x33,
	35708 - 19968: jis0212<<14 | 0x3D<<7 | 0x34,
	35709 - 19968: jis0208<<14 | 0x4B<<7 | 0x04,
	35710 - 19968: jis0212<<14 | 0x3D<<7 | 0x35,
	35711 - 19968: jis0208<<14 | 0x5A<<7 | 0x4F,
	35712 - 19968: jis0208<<14 | 0x4B<<7 | 0x05,
	35713 - 19968: jis0212<<14 | 0x3D<<7 | 0x36,
	35715 - 19968: jis0208<<14 | 0x1A<<7 | 0x1D,
	35716 - 19968: jis0212<<14 | 0x3D<<7 | 0x37,
	35717 - 19968: jis0212<<14 | 0x3D<<7 | 0x38,
	35722 - 19968: jis0208<<14 | 0x39<<7 | 0x2D,
	35723 - 19968: jis0212<<14 | 0x3D<<7 | 0x39,
	35724 - 19968: jis0208<<14 | 0x4B<<7 | 0x06,
	35725 - 19968: jis0212<<14 | 0x3D<<7 | 0x3A,
	35726 - 19968: jis0208<<14 | 0x4B<<7 | 0x07,
	35727 - 19968: jis0212<<14 | 0x3D<<7 | 0x3B,
	35728 - 19968: jis0208<<14 | 0x1C<<7 | 0x11,
	35730 - 19968: jis0208<<14 | 0x4B<<7 | 0x08,
	35731 - 19968: jis0208<<14 | 0x4B<<7 | 0x09,
	35732 - 19968: jis0212<<14 | 0x3D<<7 | 0x3C,
	35733 - 19968: jis0212<<14 | 0x3D<<7 | 0x3D,
	35734 - 19968: jis0208<<14 | 0x4B<<7 | 0x0A,
	35737 - 19968: jis0208<<14 | 0x4B<<7 | 0x0B,
	35738 - 19968: jis0208<<14 | 0x4B<<7 | 0x0C,
	35740 - 19968: jis0212<<14 | 0x3D<<7 | 0x3E,
	35742 - 19968: jis0212<<14 | 0x3D<<7 | 0x3F,
	35743 - 19968: jis0212<<14 | 0x3D<<7 | 0x40,
	35895 - 19968: jis0208<<14 | 0x22<<7 | 0x0A,
	35896 - 19968: jis0212<<14 | 0x3D<<7 | 0x41,
	35897 - 19968: jis0212<<14 | 0x3D<<7 | 0x42,
	35898 - 19968: jis0208<<14 | 0x4B<<7 | 0x0D,
	35901 - 19968: jis0212<<14 | 0x3D<<7 | 0x43,
	35902 - 19968: jis0212<<14 | 0x3D<<7 | 0x44,
	35903 - 19968: jis0208<<14 | 0x4B<<7 | 0x0F,
	35905 - 19968: jis0208<<14 | 0x4B<<7 | 0x0E,
	35909 - 19968: jis0212<<14 | 0x3D<<7 | 0x45,
	35910 - 19968: jis0208<<14 | 0x25<<7 | 0x05,
	35911 - 19968: jis0212<<14 | 0x3D<<7 | 0x46,
	35912 - 19968: jis0208<<14 | 0x4B<<7 | 0x10,
	35913 - 19968: jis0212<<14 | 0x3D<<7 | 0x47,
	35914 - 19968: jis0208<<14 | 0x2A<<7 | 0x0C,
	35915 - 19968: jis0212<<14 | 0x3D<<7 | 0x48,
	35916 - 19968: jis0208<<14 | 0x4B<<7 | 0x11,
	35918 - 19968: jis0208<<14 | 0x4B<<7 | 0x12,
	35919 - 19968: jis0212<<14 | 0x3D<<7 | 0x49,
	35920 - 19968: jis0208<<14 | 0x4B<<7 | 0x13,
	35921 - 19968: jis0212<<14 | 0x3D<<7 | 0x4A,
	35923 - 19968: jis0212<<14 | 0x3D<<7 | 0x4B,
	35924 - 19968: jis0212<<14 | 0x3D<<7 | 0x4C,
	35925 - 19968: jis0208<<14 | 0x4B<<7 | 0x14,
	35927 - 19968: jis0212<<14 | 0x3D<<7 | 0x4D,
	35928 - 19968: jis0212<<14 | 0x3D<<7 | 0x4E,
	35929 - 19968: jis0212<<14 | 0x3D<<7 | 0x51,
	35930 - 19968: jis0208<<14 | 0x25<<7 | 0x39,
	35931 - 19968: jis0212<<14 | 0x3D<<7 | 0x4F,
	35933 - 19968: jis0212<<14 | 0x3D<<7 | 0x50,
	35937 - 19968: jis0208<<14 | 0x1D<<7 | 0x3C,
	35938 - 19968: jis0208<<14 | 0x4B<<7 | 0x15,
	35939 - 19968: jis0212<<14 | 0x3D<<7 | 0x52,
	35940 - 19968: jis0212<<14 | 0x3D<<7 | 0x53,
	35942 - 19968: jis0212<<14 | 0x3D<<7 | 0x54,
	35944 - 19968: jis0212<<14 | 0x3D<<7 | 0x55,
	35945 - 19968: jis0212<<14 | 0x3D<<7 | 0x56,
	35946 - 19968: jis0208<<14 | 0x18<<7 | 0x4A,
	35947 - 19968: jis0208<<14 | 0x2F<<7 | 0x0D,
	35948 - 19968: jis0208<<14 | 0x4B<<7 | 0x16,
	35949 - 19968: jis0212<<14 | 0x3D<<7 | 0x57,
	35955 - 19968: jis0212<<14 | 0x3D<<7 | 0x58,
	35957 - 19968: jis0212<<14 | 0x3D<<7 | 0x59,
	35958 - 19968: jis0212<<14 | 0x3D<<7 | 0x5A,
	35960 - 19968: jis0208<<14 | 0x4B<<7 | 0x17,
	35961 - 19968: jis0208<<14 | 0x28<<7 | 0x1E,
	35962 - 19968: jis0208<<14 | 0x4B<<7 | 0x18,
	35963 - 19968: jis0212<<14 | 0x3D<<7 | 0x5B,
	35964 - 19968: jis0208<<14 | 0x4B<<7 | 0x20,
	35966 - 19968: jis0212<<14 | 0x3D<<7 | 0x5C,
	35970 - 19968: jis0208<<14 | 0x4B<<7 | 0x19,
	35973 - 19968: jis0208<<14 | 0x4B<<7 | 0x1B,
	35974 - 19968: jis0212<<14 | 0x3D<<7 | 0x5D,
	35975 - 19968: jis0212<<14 | 0x3E<<7 | 0x00,
	35977 - 19968: jis0208<<14 | 0x4B<<7 | 0x1A,
	35978 - 19968: jis0208<<14 | 0x4B<<7 | 0x1C,
	35979 - 19968: jis0212<<14 | 0x3E<<7 | 0x01,
	35980 - 19968: jis0208<<14 | 0x2A<<7 | 0x25,
	35981 - 19968: jis0208<<14 | 0x4B<<7 | 0x1D,
	35982 - 19968: jis0208<<14 | 0x4B<<7 | 0x1E,
	35984 - 19968: jis0212<<14 | 0x3E<<7 | 0x02,
	35986 - 19968: jis0212<<14 | 0x3E<<7 | 0x03,
	35987 - 19968: jis0212<<14 | 0x3E<<7 | 0x04,
	35988 - 19968: jis0208<<14 | 0x4B<<7 | 0x1F,
	35992 - 19968: jis0208<<14 | 0x4B<<7 | 0x21,
	35993 - 19968: jis0212<<14 | 0x3E<<7 | 0x05,
	35995 - 19968: jis0212<<14 | 0x3E<<7 | 0x06,
	35996 - 19968: jis0212<<14 | 0x3E<<7 | 0x07,
	35997 - 19968: jis0208<<14 | 0x12<<7 | 0x0C,
	35998 - 19968: jis0208<<14 | 0x23<<7 | 0x46,
	36000 - 19968: jis0208<<14 | 0x28<<7 | 0x48,
	36001 - 19968: jis0208<<14 | 0x19<<7 | 0x41,
	36002 - 19968: jis0208<<14 | 0x18<<7 | 0x36,
	36004 - 19968: jis0212<<14 | 0x3E<<7 | 0x08,
	36007 - 19968: jis0208<<14 | 0x28<<7 | 0x2E,
	36008 - 19968: jis0208<<14 | 0x11<<7 | 0x3E,
	36009 - 19968: jis0208<<14 | 0x27<<7 | 0x2D,
	36010 - 19968: jis0208<<14 | 0x4B<<7 | 0x24,
	36011 - 19968: jis0208<<14 | 0x13<<7 | 0x32,
	36012 - 19968: jis0208<<14 | 0x1F<<7 | 0x34,
	36013 - 19968: jis0208<<14 | 0x4B<<7 | 0x23,
	36014 - 19968: jis0208<<14 | 0x4B<<7 | 0x28,
	36015 - 19968: jis0208<<14 | 0x22<<7 | 0x58,
	36016 - 19968: jis0208<<14 | 0x2B<<7 | 0x42,
	36018 - 19968: jis0208<<14 | 0x4B<<7 | 0x26,
	36019 - 19968: jis0208<<14 | 0x4B<<7 | 0x27,
	36020 - 19968: jis0208<<14 | 0x14<<7 | 0x0D,
	36022 - 19968: jis0208<<14 | 0x4B<<7 | 0x29,
	36023 - 19968: jis0208<<14 | 0x26<<7 | 0x42,
	36024 - 19968: jis0208<<14 | 0x21<<7 | 0x3E,
	36025 - 19968: jis0212<<14 | 0x3E<<7 | 0x09,
	36026 - 19968: jis0212<<14 | 0x3E<<7 | 0x0A,
	36027 - 19968: jis0208<<14 | 0x27<<7 | 0x50,
	36028 - 19968: jis0208<<14 | 0x24<<7 | 0x1C,
	36029 - 19968: jis0208<<14 | 0x4B<<7 | 0x25,
	36031 - 19968: jis0208<<14 | 0x2A<<7 | 0x26,
	36032 - 19968: jis0208<<14 | 0x11<<7 | 0x4B,
	36033 - 19968: jis0208<<14 | 0x4B<<7 | 0x2B,
	36034 - 19968: jis0208<<14 | 0x2E<<7 | 0x07,
	36035 - 19968: jis0208<<14 | 0x23<<7 | 0x21,
	36036 - 19968: jis0208<<14 | 0x2E<<7 | 0x24,
	36037 - 19968: jis0212<<14 | 0x3E<<7 | 0x0B,
	36038 - 19968: jis0212<<14 | 0x3E<<7 | 0x0C,
	36039 - 19968: jis0208<<14 | 0x1A<<7 | 0x50,
	36040 - 19968: jis0208<<14 | 0x4B<<7 | 0x2A,
	36041 - 19968: jis0212<<14 | 0x3E<<7 | 0x0D,
	36042 - 19968: jis0208<<14 | 0x21<<7 | 0x10,
	36043 - 19968: jis0212<<14 | 0x3E<<7 | 0x0E,
	36045 - 19968: jis0208<<14 | 0x4B<<7 | 0x3B,
	36046 - 19968: jis0208<<14 | 0x20<<7 | 0x07,
	36047 - 19968: jis0212<<14 | 0x3E<<7 | 0x0F,
	36049 - 19968: jis0208<<14 | 0x25<<7 | 0x57,
	36051 - 19968: jis0208<<14 | 0x28<<7 | 0x2F,
	36053 - 19968: jis0212<<14 | 0x3E<<7 | 0x11,
	36054 - 19968: jis0212<<14 | 0x3E<<7 | 0x10,
	36057 - 19968: jis0212<<14 | 0x3E<<7 | 0x12,
	36058 - 19968: jis0208<<14 | 0x4B<<7 | 0x2E,
	36059 - 19968: jis0208<<14 | 0x1A<<7 | 0x1E,
	36060 - 19968: jis0208<<14 | 0x1A<<7 | 0x51,
	36061 - 19968: jis0212<<14 | 0x3E<<7 | 0x13,
	36062 - 19968: jis0208<<14 | 0x1D<<7 | 0x3D,
	36064 - 19968: jis0208<<14 | 0x26<<7 | 0x44,
	36065 - 19968: jis0212<<14 | 0x3E<<7 | 0x14,
	36066 - 19968: jis0208<<14 | 0x17<<7 | 0x0C,
	36067 - 19968: jis0208<<14 | 0x4B<<7 | 0x2D,
	36068 - 19968: jis0208<<14 | 0x4B<<7 | 0x2C,
	36070 - 19968: jis0208<<14 | 0x28<<7 | 0x49,
	36072 - 19968: jis0212<<14 | 0x3E<<7 | 0x15,
	36074 - 19968: jis0208<<14 | 0x1B<<7 | 0x20,
	36076 - 19968: jis0212<<14 | 0x3E<<7 | 0x16,
	36077 - 19968: jis0208<<14 | 0x24<<7 | 0x31,
	36079 - 19968: jis0212<<14 | 0x3E<<7 | 0x17,
	36080 - 19968: jis0208<<14 | 0x5A<<7 | 0x50,
	36082 - 19968: jis0212<<14 | 0x3E<<7 | 0x19,
	36084 - 19968: jis0208<<14 | 0x5A<<7 | 0x51,
	36085 - 19968: jis0212<<14 | 0x3E<<7 | 0x1A,
	36087 - 19968: jis0212<<14 | 0x3E<<7 | 0x1B,
	36088 - 19968: jis0212<<14 | 0x3E<<7 | 0x1C,
	36090 - 19968: jis0208<<14 | 0x4B<<7 | 0x30,
	36091 - 19968: jis0208<<14 | 0x4B<<7 | 0x31,
	36092 - 19968: jis0208<<14 | 0x18<<7 | 0x37,
	36093 - 19968: jis0208<<14 | 0x4B<<7 | 0x2F,
	36094 - 19968: jis0212<<14 | 0x3E<<7 | 0x1D,
	36095 - 19968: jis0212<<14 | 0x3E<<7 | 0x1E,
	36097 - 19968: jis0212<<14 | 0x3E<<7 | 0x1F,
	36099 - 19968: jis0212<<14 | 0x3E<<7 | 0x20,
	36100 - 19968: jis0208<<14 | 0x4B<<7 | 0x32,
	36101 - 19968: jis0208<<14 | 0x4B<<7 | 0x33,
	36103 - 19968: jis0208<<14 | 0x4B<<7 | 0x35,
	36104 - 19968: jis0208<<14 | 0x21<<7 | 0x02,
	36105 - 19968: jis0212<<14 | 0x3E<<7 | 0x21,
	36106 - 19968: jis0208<<14 | 0x4B<<7 | 0x34,
	36107 - 19968: jis0208<<14 | 0x13<<7 | 0x45,
	36109 - 19968: jis0208<<14 | 0x4B<<7 | 0x37,
	36111 - 19968: jis0208<<14 | 0x4B<<7 | 0x36,
	36112 - 19968: jis0208<<14 | 0x4B<<7 | 0x38,
	36114 - 19968: jis0208<<14 | 0x5A<<7 | 0x52,
	36115 - 19968: jis0208<<14 | 0x4B<<7 | 0x3A,
	36116 - 19968: jis0208<<14 | 0x4B<<7 | 0x3C,
	36118 - 19968: jis0208<<14 | 0x4B<<7 | 0x3D,
	36119 - 19968: jis0212<<14 | 0x3E<<7 | 0x23,
	36123 - 19968: jis0212<<14 | 0x3E<<7 | 0x24,
	36196 - 19968: jis0208<<14 | 0x1F<<7 | 0x35,
	36197 - 19968: jis0212<<14 | 0x3E<<7 | 0x25,
	36198 - 19968: jis0208<<14 | 0x1B<<7 | 0x2E,
	36199 - 19968: jis0208<<14 | 0x4B<<7 | 0x3E,
	36201 - 19968: jis0212<<14 | 0x3E<<7 | 0x26,
	36203 - 19968: jis0208<<14 | 0x12<<7 | 0x31,
	36204 - 19968: jis0212<<14 | 0x3E<<7 | 0x27,
	36205 - 19968: jis0208<<14 | 0x4B<<7 | 0x3F,
	36206 - 19968: jis0212<<14 | 0x3E<<7 | 0x28,
	36208 - 19968: jis0208<<14 | 0x20<<7 | 0x55,
	36209 - 19968: jis0208<<14 | 0x4B<<7 | 0x40,
	36211 - 19968: jis0208<<14 | 0x4B<<7 | 0x41,
	36212 - 19968: jis0208<<14 | 0x28<<7 | 0x4A,
	36214 - 19968: jis0208<<14 | 0x5A<<7 | 0x53,
	36215 - 19968: jis0208<<14 | 0x14<<7 | 0x0E,
	36223 - 19968: jis0212<<14 | 0x3E<<7 | 0x29,
	36225 - 19968: jis0208<<14 | 0x4B<<7 | 0x42,
	36226 - 19968: jis0212<<14 | 0x3E<<7 | 0x2A,
	36228 - 19968: jis0212<<14 | 0x3E<<7 | 0x2B,
	36229 - 19968: jis0208<<14 | 0x23<<7 | 0x15,
	36232 - 19968: jis0212<<14 | 0x3E<<7 | 0x2C,
	36234 - 19968: jis0208<<14 | 0x10<<7 | 0x3A,
	36237 - 19968: jis0212<<14 | 0x3E<<7 | 0x2D,
	36240 - 19968: jis0212<<14 | 0x3E<<7 | 0x2E,
	36241 - 19968: jis0212<<14 | 0x3E<<7 | 0x2F,
	36245 - 19968: jis0212<<14 | 0x3E<<7 | 0x30,
	36249 - 19968: jis0208<<14 | 0x4B<<7 | 0x43,
	36254 - 19968: jis0212<<14 | 0x3E<<7 | 0x31,
	36255 - 19968: jis0212<<14 | 0x3E<<7 | 0x32,
	36256 - 19968: jis0212<<14 | 0x3E<<7 | 0x33,
	36259 - 19968: jis0208<<14 | 0x1B<<7 | 0x50,
	36262 - 19968: jis0212<<14 | 0x3E<<7 | 0x34,
	36264 - 19968: jis0208<<14 | 0x1E<<7 | 0x55,
	36267 - 19968: jis0212<<14 | 0x3E<<7 | 0x35,
	36268 - 19968: jis0212<<14 | 0x3E<<7 | 0x36,
	36271 - 19968: jis0212<<14 | 0x3E<<7 | 0x37,
	36274 - 19968: jis0212<<14 | 0x3E<<7 | 0x38,
	36275 - 19968: jis0208<<14 | 0x21<<7 | 0x0C,
	36277 - 19968: jis0212<<14 | 0x3E<<7 | 0x39,
	36279 - 19968: jis0212<<14 | 0x3E<<7 | 0x3A,
	36281 - 19968: jis0212<<14 | 0x3E<<7 | 0x3B,
	36282 - 19968: jis0208<<14 | 0x4B<<7 | 0x46,
	36283 - 19968: jis0212<<14 | 0x3E<<7 | 0x3C,
	36284 - 19968: jis0212<<14 | 0x3E<<7 | 0x4E,
	36286 - 19968: jis0208<<14 | 0x4B<<7 | 0x45,
	36288 - 19968: jis0212<<14 | 0x3E<<7 | 0x3D,
	36290 - 19968: jis0208<<14 | 0x4B<<7 | 0x44,
	36293 - 19968: jis0212<<14 | 0x3E<<7 | 0x3E,
	36294 - 19968: jis0212<<14 | 0x3E<<7 | 0x3F,
	36295 - 19968: jis0212<<14 | 0x3E<<7 | 0x40,
	36296 - 19968: jis0212<<14 | 0x3E<<7 | 0x41,
	36298 - 19968: jis0212<<14 | 0x3E<<7 | 0x42,
	36299 - 19968: jis0208<<14 | 0x4B<<7 | 0x4C,
	36300 - 19968: jis0208<<14 | 0x4B<<7 | 0x4A,
	36302 - 19968: jis0212<<14 | 0x3E<<7 | 0x43,
	36303 - 19968: jis0208<<14 | 0x4B<<7 | 0x47,
	36305 - 19968: jis0212<<14 | 0x3E<<7 | 0x44,
	36308 - 19968: jis0212<<14 | 0x3E<<7 | 0x45,
	36309 - 19968: jis0212<<14 | 0x3E<<7 | 0x46,
	36310 - 19968: jis0208<<14 | 0x4B<<7 | 0x49,
	36311 - 19968: jis0212<<14 | 0x3E<<7 | 0x47,
	36313 - 19968: jis0212<<14 | 0x3E<<7 | 0x48,
	36314 - 19968: jis0208<<14 | 0x4B<<7 | 0x48,
	36315 - 19968: jis0208<<14 | 0x4B<<7 | 0x4B,
	36317 - 19968: jis0208<<14 | 0x14<<7 | 0x56,
	36319 - 19968: jis0208<<14 | 0x4B<<7 | 0x4F,
	36321 - 19968: jis0208<<14 | 0x1F<<7 | 0x36,
	36323 - 19968: jis0208<<14 | 0x4B<<7 | 0x50,
	36324 - 19968: jis0212<<14 | 0x3E<<7 | 0x49,
	36325 - 19968: jis0212<<14 | 0x3E<<7 | 0x4A,
	36327 - 19968: jis0212<<14 | 0x3E<<7 | 0x4B,
	36328 - 19968: jis0208<<14 | 0x17<<7 | 0x38,
	36330 - 19968: jis0208<<14 | 0x4B<<7 | 0x4D,
	36331 - 19968: jis0208<<14 | 0x4B<<7 | 0x4E,
	36332 - 19968: jis0212<<14 | 0x3E<<7 | 0x4C,
	36335 - 19968: jis0208<<14 | 0x2E<<7 | 0x08,
	36336 - 19968: jis0212<<14 | 0x3E<<7 | 0x4D,
	36337 - 19968: jis0212<<14 | 0x3E<<7 | 0x4F,
	36338 - 19968: jis0212<<14 | 0x3E<<7 | 0x50,
	36339 - 19968: jis0208<<14 | 0x23<<7 | 0x16,
	36340 - 19968: jis0212<<14 | 0x3E<<7 | 0x51,
	36341 - 19968: jis0208<<14 | 0x20<<7 | 0x08,
	36348 - 19968: jis0208<<14 | 0x4B<<7 | 0x51,
	36349 - 19968: jis0212<<14 | 0x3E<<7 | 0x52,
	36351 - 19968: jis0208<<14 | 0x4B<<7 | 0x54,
	36353 - 19968: jis0212<<14 | 0x3E<<7 | 0x53,
	36356 - 19968: jis0212<<14 | 0x3E<<7 | 0x54,
	36357 - 19968: jis0212<<14 | 0x3E<<7 | 0x55,
	36358 - 19968: jis0212<<14 | 0x3E<<7 | 0x56,
	36360 - 19968: jis0208<<14 | 0x4B<<7 | 0x52,
	36361 - 19968: jis0208<<14 | 0x4B<<7 | 0x53,
	36362 - 19968: jis0208<<14 | 0x2C<<7 | 0x38,
	36363 - 19968: jis0212<<14 | 0x3E<<7 | 0x57,
	36367 - 19968: jis0208<<14 | 0x25<<7 | 0x06,
	36368 - 19968: jis0208<<14 | 0x4B<<7 | 0x57,
	36369 - 19968: jis0212<<14 | 0x3E<<7 | 0x58,
	36372 - 19968: jis0212<<14 | 0x3E<<7 | 0x59,
	36374 - 19968: jis0212<<14 | 0x3E<<7 | 0x5A,
	36381 - 19968: jis0208<<14 | 0x4B<<7 | 0x55,
	36382 - 19968: jis0208<<14 | 0x4B<<7 | 0x56,
	36383 - 19968: jis0208<<14 | 0x4B<<7 | 0x58,
	36384 - 19968: jis0212<<14 | 0x3E<<7 | 0x5B,
	36385 - 19968: jis0212<<14 | 0x3E<<7 | 0x5C,
	36386 - 19968: jis0212<<14 | 0x3E<<7 | 0x5D,
	36387 - 19968: jis0212<<14 | 0x3F<<7 | 0x00,
	36390 - 19968: jis0212<<14 | 0x3F<<7 | 0x01,
	36391 - 19968: jis0212<<14 | 0x3F<<7 | 0x02,
	36394 - 19968: jis0208<<14 | 0x4C<<7 | 0x08,
	36400 - 19968: jis0208<<14 | 0x4B<<7 | 0x5B,
	36401 - 19968: jis0212<<14 | 0x3F<<7 | 0x03,
	36403 - 19968: jis0212<<14 | 0x3F<<7 | 0x04,
	36404 - 19968: jis0208<<14 | 0x4B<<7 | 0x5C,
	36405 - 19968: jis0208<<14 | 0x4B<<7 | 0x5A,
	36406 - 19968: jis0212<<14 | 0x3F<<7 | 0x05,
	36407 - 19968: jis0212<<14 | 0x3F<<7 | 0x06,
	36408 - 19968: jis0212<<14 | 0x3F<<7 | 0x07,
	36409 - 19968: jis0212<<14 | 0x3F<<7 | 0x08,
	36413 - 19968: jis0212<<14 | 0x3F<<7 | 0x09,
	36416 - 19968: jis0212<<14 | 0x3F<<7 | 0x0A,
	36417 - 19968: jis0212<<14 | 0x3F<<7 | 0x0B,
	36418 - 19968: jis0208<<14 | 0x4B<<7 | 0x59,
	36420 - 19968: jis0208<<14 | 0x23<<7 | 0x5C,
	36423 - 19968: jis0208<<14 | 0x4C<<7 | 0x00,
	36424 - 19968: jis0208<<14 | 0x4C<<7 | 0x04,
	36425 - 19968: jis0208<<14 | 0x4C<<7 | 0x01,
	36426 - 19968: jis0208<<14 | 0x4B<<7 | 0x5D,
	36427 - 19968: jis0212<<14 | 0x3F<<7 | 0x0C,
	36428 - 19968: jis0208<<14 | 0x4C<<7 | 0x02,
	36429 - 19968: jis0212<<14 | 0x3F<<7 | 0x0D,
	36430 - 19968: jis0212<<14 | 0x3F<<7 | 0x0E,
	36431 - 19968: jis0212<<14 | 0x3F<<7 | 0x0F,
	36432 - 19968: jis0208<<14 | 0x4C<<7 | 0x03,
	36436 - 19968: jis0212<<14 | 0x3F<<7 | 0x10,
	36437 - 19968: jis0208<<14 | 0x4C<<7 | 0x0A,
	36441 - 19968: jis0208<<14 | 0x4C<<7 | 0x05,
	36443 - 19968: jis0212<<14 | 0x3F<<7 | 0x11,
	36444 - 19968: jis0212<<14 | 0x3F<<7 | 0x12,
	36445 - 19968: jis0212<<14 | 0x3F<<7 | 0x13,
	36446 - 19968: jis0212<<14 | 0x3F<<7 | 0x14,
	36447 - 19968: jis0208<<14 | 0x1F<<7 | 0x37,
	36448 - 19968: jis0208<<14 | 0x4C<<7 | 0x07,
	36449 - 19968: jis0212<<14 | 0x3F<<7 | 0x15,
	36450 - 19968: jis0212<<14 | 0x3F<<7 | 0x16,
	36451 - 19968: jis0208<<14 | 0x4C<<7 | 0x09,
	36452 - 19968: jis0208<<14 | 0x4C<<7 | 0x06,
	36457 - 19968: jis0212<<14 | 0x3F<<7 | 0x17,
	36460 - 19968: jis0212<<14 | 0x3F<<7 | 0x18,
	36461 - 19968: jis0212<<14 | 0x3F<<7 | 0x19,
	36463 - 19968: jis0212<<14 | 0x3F<<7 | 0x1A,
	36464 - 19968: jis0212<<14 | 0x3F<<7 | 0x1B,
	36465 - 19968: jis0212<<14 | 0x3F<<7 | 0x1C,
	36466 - 19968: jis0208<<14 | 0x4C<<7 | 0x0C,
	36468 - 19968: jis0208<<14 | 0x1C<<7 | 0x12,
	36470 - 19968: jis0208<<14 | 0x4C<<7 | 0x0B,
	36473 - 19968: jis0212<<14 | 0x3F<<7 | 0x1D,
	36474 - 19968: jis0212<<14 | 0x3F<<7 | 0x1E,
	36475 - 19968: jis0212<<14 | 0x3F<<7 | 0x1F,
	36476 - 19968: jis0208<<14 | 0x4C<<7 | 0x0D,
	36481 - 19968: jis0208<<14 | 0x4C<<7 | 0x0E,
	36482 - 19968: jis0212<<14 | 0x3F<<7 | 0x20,
	36483 - 19968: jis0212<<14 | 0x3F<<7 | 0x21,
	36484 - 19968: jis0208<<14 | 0x4C<<7 | 0x11,
	36485 - 19968: jis0208<<14 | 0x4C<<7 | 0x10,
	36487 - 19968: jis0208<<14 | 0x4C<<7 | 0x0F,
	36489 - 19968: jis0212<<14 | 0x3F<<7 | 0x22,
	36490 - 19968: jis0208<<14 | 0x4C<<7 | 0x13,
	36491 - 19968: jis0208<<14 | 0x4C<<7 | 0x12,
	36493 - 19968: jis0208<<14 | 0x2B<<7 | 0x55,
	36496 - 19968: jis0212<<14 | 0x3F<<7 | 0x23,
	36497 - 19968: jis0208<<14 | 0x4C<<7 | 0x15,
	36498 - 19968: jis0212<<14 | 0x3F<<7 | 0x24,
	36499 - 19968: jis0208<<14 | 0x4C<<7 | 0x14,
	36500 - 19968: jis0208<<14 | 0x4C<<7 | 0x16,
	36501 - 19968: jis0212<<14 | 0x3F<<7 | 0x25,
	36505 - 19968: jis0208<<14 | 0x4C<<7 | 0x17,
	36506 - 19968: jis0212<<14 | 0x3F<<7 | 0x26,
	36507 - 19968: jis0212<<14 | 0x3F<<7 | 0x27,
	36509 - 19968: jis0212<<14 | 0x3F<<7 | 0x28,
	36510 - 19968: jis0212<<14 | 0x3F<<7 | 0x29,
	36513 - 19968: jis0208<<14 | 0x4C<<7 | 0x19,
	36514 - 19968: jis0212<<14 | 0x3F<<7 | 0x2A,
	36519 - 19968: jis0212<<14 | 0x3F<<7 | 0x2B,
	36521 - 19968: jis0212<<14 | 0x3F<<7 | 0x2C,
	36522 - 19968: jis0208<<14 | 0x4C<<7 | 0x18,
	36523 - 19968: jis0208<<14 | 0x1E<<7 | 0x27,
	36524 - 19968: jis0208<<14 | 0x4C<<7 | 0x1A,
	36525 - 19968: jis0212<<14 | 0x3F<<7 | 0x2D,
	36526 - 19968: jis0212<<14 | 0x3F<<7 | 0x2E,
	36527 - 19968: jis0208<<14 | 0x15<<7 | 0x4C,
	36528 - 19968: jis0208<<14 | 0x4C<<7 | 0x1B,
	36529 - 19968: jis0208<<14 | 0x4C<<7 | 0x1D,
	36531 - 19968: jis0212<<14 | 0x3F<<7 | 0x2F,
	36533 - 19968: jis0212<<14 | 0x3F<<7 | 0x30,
	36538 - 19968: jis0212<<14 | 0x3F<<7 | 0x31,
	36539 - 19968: jis0212<<14 | 0x3F<<7 | 0x32,
	36542 - 19968: jis0208<<14 | 0x4C<<7 | 0x1E,
	36544 - 19968: jis0212<<14 | 0x3F<<7 | 0x33,
	36545 - 19968: jis0212<<14 | 0x3F<<7 | 0x34,
	36547 - 19968: jis0212<<14 | 0x3F<<7 | 0x35,
	36548 - 19968: jis0212<<14 | 0x3F<<7 | 0x36,
	36549 - 19968: jis0208<<14 | 0x4C<<7 | 0x1F,
	36550 - 19968: jis0208<<14 | 0x4C<<7 | 0x1C,
	36551 - 19968: jis0212<<14 | 0x3F<<7 | 0x37,
	36552 - 19968: jis0208<<14 | 0x4C<<7 | 0x20,
	36554 - 19968: jis0208<<14 | 0x1B<<7 | 0x35,
	36555 - 19968: jis0208<<14 | 0x4C<<7 | 0x21,
	36556 - 19968: jis0208<<14 | 0x14<<7 | 0x0F,
	36557 - 19968: jis0208<<14 | 0x16<<7 | 0x12,
	36559 - 19968: jis0208<<14 | 0x5A<<7 | 0x55,
	36561 - 19968: jis0212<<14 | 0x3F<<7 | 0x39,
	36562 - 19968: jis0208<<14 | 0x17<<7 | 0x0D,
	36564 - 19968: jis0212<<14 | 0x3F<<7 | 0x3A,
	36571 - 19968: jis0208<<14 | 0x4C<<7 | 0x22,
	36572 - 19968: jis0212<<14 | 0x3F<<7 | 0x3B,
	36575 - 19968: jis0208<<14 | 0x25<<7 | 0x4F,
	36578 - 19968: jis0208<<14 | 0x24<<7 | 0x1D,
	36579 - 19968: jis0208<<14 | 0x4C<<7 | 0x23,
	36584 - 19968: jis0212<<14 | 0x3F<<7 | 0x3C,
	36587 - 19968: jis0208<<14 | 0x4C<<7 | 0x26,
	36589 - 19968: jis0212<<14 | 0x3F<<7 | 0x43,
	36590 - 19968: jis0212<<14 | 0x3F<<7 | 0x3D,
	36592 - 19968: jis0212<<14 | 0x3F<<7 | 0x3E,
	36593 - 19968: jis0212<<14 | 0x3F<<7 | 0x3F,
	36599 - 19968: jis0212<<14 | 0x3F<<7 | 0x40,
	36600 - 19968: jis0208<<14 | 0x1B<<7 | 0x13,
	36601 - 19968: jis0212<<14 | 0x3F<<7 | 0x41,
	36602 - 19968: jis0212<<14 | 0x3F<<7 | 0x42,
	36603 - 19968: jis0208<<14 | 0x4C<<7 | 0x25,
	36604 - 19968: jis0208<<14 | 0x4C<<7 | 0x24,
	36605 - 19968: jis0208<<14 | 0x16<<7 | 0x39,
	36606 - 19968: jis0208<<14 | 0x4C<<7 | 0x27,
	36608 - 19968: jis0212<<14 | 0x3F<<7 | 0x44,
	36610 - 19968: jis0212<<14 | 0x3F<<7 | 0x45,
	36611 - 19968: jis0208<<14 | 0x12<<7 | 0x32,
	36613 - 19968: jis0208<<14 | 0x4C<<7 | 0x29,
	36615 - 19968: jis0212<<14 | 0x3F<<7 | 0x46,
	36616 - 19968: jis0212<<14 | 0x3F<<7 | 0x47,
	36617 - 19968: jis0208<<14 | 0x19<<7 | 0x3B,
	36618 - 19968: jis0208<<14 | 0x4C<<7 | 0x28,
	36620 - 19968: jis0208<<14 | 0x4C<<7 | 0x31,
	36623 - 19968: jis0212<<14 | 0x3F<<7 | 0x48,
	36624 - 19968: jis0212<<14 | 0x3F<<7 | 0x49,
	36626 - 19968: jis0208<<14 | 0x4C<<7 | 0x2B,
	36627 - 19968: jis0208<<14 | 0x4C<<7 | 0x2D,
	36628 - 19968: jis0208<<14 | 0x29<<7 | 0x44,
	36629 - 19968: jis0208<<14 | 0x4C<<7 | 0x2A,
	36630 - 19968: jis0212<<14 | 0x3F<<7 | 0x4A,
	36631 - 19968: jis0212<<14 | 0x3F<<7 | 0x4B,
	36632 - 19968: jis0212<<14 | 0x3F<<7 | 0x4C,
	36633 - 19968: jis0208<<14 | 0x4C<<7 | 0x2C,
	36635 - 19968: jis0208<<14 | 0x4C<<7 | 0x30,
	36636 - 19968: jis0208<<14 | 0x4C<<7 | 0x2E,
	36637 - 19968: jis0208<<14 | 0x14<<7 | 0x10,
	36638 - 19968: jis0212<<14 | 0x3F<<7 | 0x4D,
	36639 - 19968: jis0208<<14 | 0x4C<<7 | 0x2F,
	36640 - 19968: jis0212<<14 | 0x3F<<7 | 0x4E,
	36641 - 19968: jis0212<<14 | 0x3F<<7 | 0x4F,
	36643 - 19968: jis0212<<14 | 0x3F<<7 | 0x50,
	36645 - 19968: jis0212<<14 | 0x3F<<7 | 0x51,
	36646 - 19968: jis0208<<14 | 0x4C<<7 | 0x32,
	36647 - 19968: jis0212<<14 | 0x3F<<7 | 0x52,
	36648 - 19968: jis0212<<14 | 0x3F<<7 | 0x53,
	36649 - 19968: jis0208<<14 | 0x26<<7 | 0x39,
	36650 - 19968: jis0208<<14 | 0x2D<<7 | 0x37,
	36652 - 19968: jis0212<<14 | 0x3F<<7 | 0x54,
	36653 - 19968: jis0212<<14 | 0x3F<<7 | 0x55,
	36654 - 19968: jis0212<<14 | 0x3F<<7 | 0x56,
	36655 - 19968: jis0208<<14 | 0x1C<<7 | 0x13,
	36659 - 19968: jis0208<<14 | 0x4C<<7 | 0x33,
	36660 - 19968: jis0212<<14 | 0x3F<<7 | 0x57,
	36661 - 19968: jis0212<<14 | 0x3F<<7 | 0x58,
	36662 - 19968: jis0212<<14 | 0x3F<<7 | 0x59,
	36663 - 19968: jis0212<<14 | 0x3F<<7 | 0x5A,
	36664 - 19968: jis0208<<14 | 0x2C<<7 | 0x01,
	36665 - 19968: jis0208<<14 | 0x4C<<7 | 0x35,
	36666 - 19968: jis0212<<14 | 0x3F<<7 | 0x5B,
	36667 - 19968: jis0208<<14 | 0x4C<<7 | 0x34,
	36670 - 19968: jis0208<<14 | 0x4C<<7 | 0x38,
	36671 - 19968: jis0208<<14 | 0x2C<<7 | 0x20,
	36672 - 19968: jis0212<<14 | 0x3F<<7 | 0x5C,
	36673 - 19968: jis0212<<14 | 0x3F<<7 | 0x5D,
	36674 - 19968: jis0208<<14 | 0x4C<<7 | 0x37,
	36675 - 19968: jis0212<<14 | 0x40<<7 | 0x00,
	36676 - 19968: jis0208<<14 | 0x12<<7 | 0x4C,
	36677 - 19968: jis0208<<14 | 0x4C<<7 | 0x36,
	36678 - 19968: jis0208<<14 | 0x4C<<7 | 0x3B,
	36679 - 19968: jis0212<<14 | 0x40<<7 | 0x01,
	36681 - 19968: jis0208<<14 | 0x4C<<7 | 0x3A,
	36684 - 19968: jis0208<<14 | 0x4C<<7 | 0x39,
	36685 - 19968: jis0208<<14 | 0x24<<7 | 0x11,
	36686 - 19968: jis0208<<14 | 0x4C<<7 | 0x3C,
	36687 - 19968: jis0212<<14 | 0x40<<7 | 0x02,
	36689 - 19968: jis0212<<14 | 0x40<<7 | 0x03,
	36690 - 19968: jis0212<<14 | 0x40<<7 | 0x04,
	36691 - 19968: jis0212<<14 | 0x40<<7 | 0x05,
	36692 - 19968: jis0212<<14 | 0x40<<7 | 0x06,
	36693 - 19968: jis0212<<14 | 0x40<<7 | 0x07,
	36695 - 19968: jis0208<<14 | 0x4C<<7 | 0x3D,
	36696 - 19968: jis0212<<14 | 0x40<<7 | 0x08,
	36700 - 19968: jis0208<<14 | 0x4C<<7 | 0x3E,
	36701 - 19968: jis0212<<14 | 0x40<<7 | 0x09,
	36702 - 19968: jis0212<<14 | 0x40<<7 | 0x0A,
	36703 - 19968: jis0208<<14 | 0x18<<7 | 0x4B,
	36705 - 19968: jis0208<<14 | 0x16<<7 | 0x04,
	36706 - 19968: jis0208<<14 | 0x4C<<7 | 0x3F,
	36707 - 19968: jis0208<<14 | 0x4C<<7 | 0x40,
	36708 - 19968: jis0208<<14 | 0x4C<<7 | 0x41,
	36709 - 19968: jis0212<<14 | 0x40<<7 | 0x0B,
	36763 - 19968: jis0208<<14 | 0x1E<<7 | 0x28,
	36764 - 19968: jis0208<<14 | 0x4C<<7 | 0x42,
	36765 - 19968: jis0212<<14 | 0x40<<7 | 0x0C,
	36766 - 19968: jis0208<<14 | 0x1B<<7 | 0x0C,
	36767 - 19968: jis0208<<14 | 0x4C<<7 | 0x43,
	36768 - 19968: jis0212<<14 | 0x40<<7 | 0x0D,
	36769 - 19968: jis0212<<14 | 0x40<<7 | 0x0E,
	36771 - 19968: jis0208<<14 | 0x4C<<7 | 0x44,
	36772 - 19968: jis0212<<14 | 0x40<<7 | 0x0F,
	36773 - 19968: jis0212<<14 | 0x40<<7 | 0x10,
	36774 - 19968: jis0212<<14 | 0x40<<7 | 0x11,
	36775 - 19968: jis0208<<14 | 0x31<<7 | 0x00,
	36776 - 19968: jis0208<<14 | 0x30<<7 | 0x5D,
	36781 - 19968: jis0208<<14 | 0x4C<<7 | 0x45,
	36782 - 19968: jis0208<<14 | 0x44<<7 | 0x4F,
	36783 - 19968: jis0208<<14 | 0x4C<<7 | 0x46,
	36784 - 19968: jis0208<<14 | 0x22<<7 | 0x03,
	36785 - 19968: jis0208<<14 | 0x1E<<7 | 0x0A,
	36786 - 19968: jis0208<<14 | 0x26<<7 | 0x1F,
	36789 - 19968: jis0212<<14 | 0x40<<7 | 0x12,
	36790 - 19968: jis0212<<14 | 0x40<<7 | 0x13,
	36791 - 19968: jis0208<<14 | 0x4C<<7 | 0x47,
	36792 - 19968: jis0212<<14 | 0x40<<7 | 0x14,
	36794 - 19968: jis0208<<14 | 0x29<<7 | 0x34,
	36795 - 19968: jis0208<<14 | 0x23<<7 | 0x33,
	36796 - 19968: jis0208<<14 | 0x18<<7 | 0x5D,
	36798 - 19968: jis0212<<14 | 0x40<<7 | 0x15,
	36799 - 19968: jis0208<<14 | 0x22<<7 | 0x08,
	36800 - 19968: jis0212<<14 | 0x40<<7 | 0x16,
	36801 - 19968: jis0212<<14 | 0x40<<7 | 0x17,
	36802 - 19968: jis0208<<14 | 0x10<<7 | 0x09,
	36804 - 19968: jis0208<<14 | 0x2A<<7 | 0x57,
	36805 - 19968: jis0208<<14 | 0x1E<<7 | 0x36,
	36806 - 19968: jis0212<<14 | 0x40<<7 | 0x18,
	36810 - 19968: jis0212<<14 | 0x40<<7 | 0x19,
	36811 - 19968: jis0212<<14 | 0x40<<7 | 0x1A,
	36813 - 19968: jis0212<<14 | 0x40<<7 | 0x1B,
	36814 - 19968: jis0208<<14 | 0x16<<7 | 0x3D,
	36816 - 19968: jis0212<<14 | 0x40<<7 | 0x1C,
	36817 - 19968: jis0208<<14 | 0x15<<7 | 0x40,
	36818 - 19968: jis0212<<14 | 0x40<<7 | 0x1D,
	36819 - 19968: jis0212<<14 | 0x40<<7 | 0x1E,
	36820 - 19968: jis0208<<14 | 0x29<<7 | 0x35,
	36821 - 19968: jis0212<<14 | 0x40<<7 | 0x1F,
	36826 - 19968: jis0208<<14 | 0x4C<<7 | 0x48,
	36832 - 19968: jis0212<<14 | 0x40<<7 | 0x20,
	36834 - 19968: jis0208<<14 | 0x4C<<7 | 0x4A,
	36835 - 19968: jis0212<<14 | 0x40<<7 | 0x21,
	36836 - 19968: jis0212<<14 | 0x40<<7 | 0x22,
	36837 - 19968: jis0208<<14 | 0x4C<<7 | 0x49,
	36838 - 19968: jis0208<<14 | 0x11<<7 | 0x3F,
	36840 - 19968: jis0212<<14 | 0x40<<7 | 0x23,
	36841 - 19968: jis0208<<14 | 0x25<<7 | 0x55,
	36842 - 19968: jis0208<<14 | 0x4C<<7 | 0x4B,
	36843 - 19968: jis0208<<14 | 0x26<<7 | 0x56,
	36845 - 19968: jis0208<<14 | 0x24<<7 | 0x12,
	36846 - 19968: jis0212<<14 | 0x40<<7 | 0x24,
	36847 - 19968: jis0208<<14 | 0x4C<<7 | 0x4C,
	36848 - 19968: jis0208<<14 | 0x1C<<7 | 0x31,
	36849 - 19968: jis0212<<14 | 0x40<<7 | 0x25,
	36852 - 19968: jis0208<<14 | 0x4C<<7 | 0x4E,
	36853 - 19968: jis0212<<14 | 0x40<<7 | 0x26,
	36854 - 19968: jis0212<<14 | 0x40<<7 | 0x27,
	36855 - 19968: jis0208<<14 | 0x2B<<7 | 0x21,
	36856 - 19968: jis0208<<14 | 0x4C<<7 | 0x5D,
	36857 - 19968: jis0208<<14 | 0x4C<<7 | 0x50,
	36858 - 19968: jis0208<<14 | 0x4C<<7 | 0x51,
	36859 - 19968: jis0212<<14 | 0x40<<7 | 0x28,
	36861 - 19968: jis0208<<14 | 0x23<<7 | 0x28,
	36862 - 19968: jis0212<<14 | 0x40<<7 | 0x29,
	36864 - 19968: jis0208<<14 | 0x21<<7 | 0x3F,
	36865 - 19968: jis0208<<14 | 0x20<<7 | 0x56,
	36866 - 19968: jis0212<<14 | 0x40<<7 | 0x2A,
	36867 - 19968: jis0208<<14 | 0x25<<7 | 0x07,
	36868 - 19968: jis0212<<14 | 0x40<<7 | 0x2B,
	36869 - 19968: jis0208<<14 | 0x4C<<7 | 0x4F,
	36870 - 19968: jis0208<<14 | 0x14<<7 | 0x34,
	36872 - 19968: jis0212<<14 | 0x40<<7 | 0x2C,
	36875 - 19968: jis0208<<14 | 0x4C<<7 | 0x58,
	36876 - 19968: jis0212<<14 | 0x40<<7 | 0x2D,
	36877 - 19968: jis0208<<14 | 0x4C<<7 | 0x55,
	36878 - 19968: jis0208<<14 | 0x4D<<7 | 0x04,
	36879 - 19968: jis0208<<14 | 0x25<<7 | 0x08,
	36880 - 19968: jis0208<<14 | 0x22<<7 | 0x3F,
	36881 - 19968: jis0208<<14 | 0x4C<<7 | 0x52,
	36883 - 19968: jis0208<<14 | 0x23<<7 | 0x5D,
	36884 - 19968: jis0208<<14 | 0x24<<7 | 0x32,
	36885 - 19968: jis0208<<14 | 0x4C<<7 | 0x53,
	36886 - 19968: jis0208<<14 | 0x4C<<7 | 0x57,
	36887 - 19968: jis0208<<14 | 0x1E<<7 | 0x3F,
	36888 - 19968: jis0212<<14 | 0x40<<7 | 0x2E,
	36889 - 19968: jis0208<<14 | 0x26<<7 | 0x46,
	36890 - 19968: jis0208<<14 | 0x23<<7 | 0x2B,
	36891 - 19968: jis0212<<14 | 0x40<<7 | 0x2F,
	36893 - 19968: jis0208<<14 | 0x1F<<7 | 0x21,
	36894 - 19968: jis0208<<14 | 0x4C<<7 | 0x56,
	36895 - 19968: jis0208<<14 | 0x21<<7 | 0x0D,
	36896 - 19968: jis0208<<14 | 0x21<<7 | 0x03,
	36897 - 19968: jis0208<<14 | 0x4C<<7 | 0x54,
	36898 - 19968: jis0208<<14 | 0x0F<<7 | 0x08,
	36899 - 19968: jis0208<<14 | 0x2E<<7 | 0x01,
	36903 - 19968: jis0208<<14 | 0x4C<<7 | 0x59,
	36904 - 19968: jis0212<<14 | 0x40<<7 | 0x30,
	36905 - 19968: jis0212<<14 | 0x40<<7 | 0x31,
	36906 - 19968: jis0212<<14 | 0x40<<7 | 0x33,
	36908 - 19968: jis0212<<14 | 0x40<<7 | 0x34,
	36909 - 19968: jis0212<<14 | 0x40<<7 | 0x35,
	36910 - 19968: jis0208<<14 | 0x21<<7 | 0x40,
	36911 - 19968: jis0212<<14 | 0x40<<7 | 0x32,
	36913 - 19968: jis0208<<14 | 0x1C<<7 | 0x14,
	36914 - 19968: jis0208<<14 | 0x1E<<7 | 0x29,
	36915 - 19968: jis0212<<14 | 0x40<<7 | 0x36,
	36916 - 19968: jis0212<<14 | 0x40<<7 | 0x37,
	36917 - 19968: jis0208<<14 | 0x4C<<7 | 0x5B,
	36918 - 19968: jis0208<<14 | 0x4C<<7 | 0x5A,
	36919 - 19968: jis0212<<14 | 0x40<<7 | 0x38,
	36920 - 19968: jis0208<<14 | 0x0F<<7 | 0x4E,
	36921 - 19968: jis0208<<14 | 0x4C<<7 | 0x5C,
	36924 - 19968: jis0208<<14 | 0x28<<7 | 0x0E,
	36926 - 19968: jis0208<<14 | 0x4D<<7 | 0x06,
	36927 - 19968: jis0212<<14 | 0x40<<7 | 0x39,
	36929 - 19968: jis0208<<14 | 0x25<<7 | 0x3A,
	36930 - 19968: jis0208<<14 | 0x1E<<7 | 0x4A,
	36931 - 19968: jis0212<<14 | 0x40<<7 | 0x3A,
	36932 - 19968: jis0212<<14 | 0x40<<7 | 0x3B,
	36933 - 19968: jis0208<<14 | 0x22<<7 | 0x38,
	36935 - 19968: jis0208<<14 | 0x15<<7 | 0x57,
	36937 - 19968: jis0208<<14 | 0x4D<<7 | 0x05,
	36938 - 19968: jis0208<<14 | 0x2C<<7 | 0x16,
	36939 - 19968: jis0208<<14 | 0x10<<7 | 0x1E,
	36940 - 19968: jis0212<<14 | 0x40<<7 | 0x3C,
	36941 - 19968: jis0208<<14 | 0x29<<7 | 0x36,
	36942 - 19968: jis0208<<14 | 0x11<<7 | 0x40,
	36943 - 19968: jis0208<<14 | 0x4D<<7 | 0x00,
	36944 - 19968: jis0208<<14 | 0x4D<<7 | 0x01,
	36945 - 19968: jis0208<<14 | 0x4D<<7 | 0x02,
	36946 - 19968: jis0208<<14 | 0x4D<<7 | 0x03,
	36947 - 19968: jis0208<<14 | 0x25<<7 | 0x1A,
	36948 - 19968: jis0208<<14 | 0x22<<7 | 0x02,
	36949 - 19968: jis0208<<14 | 0x0F<<7 | 0x42,
	36950 - 19968: jis0208<<14 | 0x4D<<7 | 0x07,
	36952 - 19968: jis0208<<14 | 0x4D<<7 | 0x08,
	36953 - 19968: jis0208<<14 | 0x53<<7 | 0x02,
	36955 - 19968: jis0212<<14 | 0x40<<7 | 0x3D,
	36956 - 19968: jis0208<<14 | 0x21<<7 | 0x1C,
	36957 - 19968: jis0212<<14 | 0x40<<7 | 0x3E,
	36958 - 19968: jis0208<<14 | 0x4D<<7 | 0x09,
	36960 - 19968: jis0208<<14 | 0x10<<7 | 0x52,
	36961 - 19968: jis0208<<14 | 0x20<<7 | 0x2B,
	36962 - 19968: jis0212<<14 | 0x40<<7 | 0x3F,
	36963 - 19968: jis0208<<14 | 0x17<<7 | 0x0E,
	36965 - 19968: jis0208<<14 | 0x2C<<7 | 0x39,
	36966 - 19968: jis0212<<14 | 0x40<<7 | 0x40,
	36967 - 19968: jis0208<<14 | 0x5A<<7 | 0x58,
	36968 - 19968: jis0208<<14 | 0x4D<<7 | 0x0A,
	36969 - 19968: jis0208<<14 | 0x24<<7 | 0x0B,
	36972 - 19968: jis0212<<14 | 0x40<<7 | 0x42,
	36973 - 19968: jis0208<<14 | 0x20<<7 | 0x57,
	36974 - 19968: jis0208<<14 | 0x1B<<7 | 0x36,
	36975 - 19968: jis0208<<14 | 0x4D<<7 | 0x0B,
	36976 - 19968: jis0212<<14 | 0x40<<7 | 0x43,
	36978 - 19968: jis0208<<14 | 0x4D<<7 | 0x0E,
	36980 - 19968: jis0212<<14 | 0x40<<7 | 0x44,
	36981 - 19968: jis0208<<14 | 0x1C<<7 | 0x44,
	36982 - 19968: jis0208<<14 | 0x4D<<7 | 0x0C,
	36983 - 19968: jis0208<<14 | 0x20<<7 | 0x0A,
	36984 - 19968: jis0208<<14 | 0x20<<7 | 0x09,
	36985 - 19968: jis0212<<14 | 0x40<<7 | 0x45,
	36986 - 19968: jis0208<<14 | 0x0F<<7 | 0x43,
	36988 - 19968: jis0208<<14 | 0x2D<<7 | 0x2A,
	36989 - 19968: jis0208<<14 | 0x4D<<7 | 0x10,
	36991 - 19968: jis0208<<14 | 0x27<<7 | 0x51,
	36992 - 19968: jis0208<<14 | 0x4D<<7 | 0x12,
	36993 - 19968: jis0208<<14 | 0x4D<<7 | 0x11,
	36994 - 19968: jis0208<<14 | 0x4D<<7 | 0x0F,
	36995 - 19968: jis0208<<14 | 0x42<<7 | 0x43,
	36996 - 19968: jis0208<<14 | 0x13<<7 | 0x33,
	36997 - 19968: jis0212<<14 | 0x40<<7 | 0x46,
	36999 - 19968: jis0208<<14 | 0x4C<<7 | 0x4D,
	37000 - 19968: jis0212<<14 | 0x40<<7 | 0x47,
	37001 - 19968: jis0208<<14 | 0x4D<<7 | 0x14,
	37002 - 19968: jis0208<<14 | 0x4D<<7 | 0x13,
	37003 - 19968: jis0212<<14 | 0x40<<7 | 0x48,
	37004 - 19968: jis0212<<14 | 0x40<<7 | 0x49,
	37006 - 19968: jis0212<<14 | 0x40<<7 | 0x4A,
	37007 - 19968: jis0208<<14 | 0x4D<<7 | 0x15,
	37008 - 19968: jis0212<<14 | 0x40<<7 | 0x4B,
	37009 - 19968: jis0208<<14 | 0x2C<<7 | 0x17,
	37013 - 19968: jis0212<<14 | 0x40<<7 | 0x4C,
	37015 - 19968: jis0212<<14 | 0x40<<7 | 0x4D,
	37016 - 19968: jis0212<<14 | 0x40<<7 | 0x4E,
	37017 - 19968: jis0212<<14 | 0x40<<7 | 0x4F,
	37019 - 19968: jis0212<<14 | 0x40<<7 | 0x50,
	37024 - 19968: jis0212<<14 | 0x40<<7 | 0x51,
	37025 - 19968: jis0212<<14 | 0x40<<7 | 0x52,
	37026 - 19968: jis0212<<14 | 0x40<<7 | 0x53,
	37027 - 19968: jis0208<<14 | 0x25<<7 | 0x40,
	37029 - 19968: jis0212<<14 | 0x40<<7 | 0x54,
	37030 - 19968: jis0208<<14 | 0x2A<<7 | 0x0D,
	37032 - 19968: jis0208<<14 | 0x4D<<7 | 0x16,
	37034 - 19968: jis0208<<14 | 0x1B<<7 | 0x38,
	37039 - 19968: jis0208<<14 | 0x4D<<7 | 0x17,
	37040 - 19968: jis0212<<14 | 0x40<<7 | 0x55,
	37041 - 19968: jis0208<<14 | 0x4D<<7 | 0x18,
	37042 - 19968: jis0212<<14 | 0x40<<7 | 0x56,
	37043 - 19968: jis0212<<14 | 0x40<<7 | 0x57,
	37044 - 19968: jis0212<<14 | 0x40<<7 | 0x58,
	37045 - 19968: jis0208<<14 | 0x4D<<7 | 0x19,
	37046 - 19968: jis0212<<14 | 0x40<<7 | 0x59,
	37048 - 19968: jis0208<<14 | 0x24<<7 | 0x00,
	37053 - 19968: jis0212<<14 | 0x40<<7 | 0x5A,
	37054 - 19968: jis0212<<14 | 0x40<<7 | 0x5C,
	37057 - 19968: jis0208<<14 | 0x0F<<7 | 0x49,
	37059 - 19968: jis0212<<14 | 0x40<<7 | 0x5D,
	37060 - 19968: jis0212<<14 | 0x41<<7 | 0x00,
	37061 - 19968: jis0212<<14 | 0x41<<7 | 0x01,
	37063 - 19968: jis0212<<14 | 0x41<<7 | 0x02,
	37064 - 19968: jis0212<<14 | 0x41<<7 | 0x03,
	37066 - 19968: jis0208<<14 | 0x18<<7 | 0x38,
	37068 - 19968: jis0212<<14 | 0x40<<7 | 0x5B,
	37070 - 19968: jis0208<<14 | 0x2E<<7 | 0x19,
	37074 - 19968: jis0212<<14 | 0x41<<7 | 0x0C,
	37077 - 19968: jis0212<<14 | 0x41<<7 | 0x04,
	37079 - 19968: jis0212<<14 | 0x41<<7 | 0x05,
	37080 - 19968: jis0212<<14 | 0x41<<7 | 0x06,
	37081 - 19968: jis0212<<14 | 0x41<<7 | 0x07,
	37083 - 19968: jis0208<<14 | 0x4D<<7 | 0x1D,
	37084 - 19968: jis0212<<14 | 0x41<<7 | 0x08,
	37085 - 19968: jis0212<<14 | 0x41<<7 | 0x09,
	37086 - 19968: jis0208<<14 | 0x5A<<7 | 0x59,
	37087 - 19968: jis0212<<14 | 0x41<<7 | 0x0A,
	37089 - 19968: jis0208<<14 | 0x16<<7 | 0x13,
	37090 - 19968: jis0208<<14 | 0x4D<<7 | 0x1A,
	37092 - 19968: jis0208<<14 | 0x4D<<7 | 0x1B,
	37093 - 19968: jis0212<<14 | 0x41<<7 | 0x0B,
	37096 - 19968: jis0208<<14 | 0x28<<7 | 0x53,
	37099 - 19968: jis0212<<14 | 0x41<<7 | 0x0E,
	37101 - 19968: jis0208<<14 | 0x12<<7 | 0x33,
	37103 - 19968: jis0212<<14 | 0x41<<7 | 0x0F,
	37104 - 19968: jis0212<<14 | 0x41<<7 | 0x10,
	37108 - 19968: jis0212<<14 | 0x41<<7 | 0x11,
	37109 - 19968: jis0208<<14 | 0x2C<<7 | 0x18,
	37110 - 19968: jis0212<<14 | 0x41<<7 | 0x0D,
	37111 - 19968: jis0208<<14 | 0x15<<7 | 0x1E,
	37117 - 19968: jis0208<<14 | 0x24<<7 | 0x33,
	37118 - 19968: jis0212<<14 | 0x41<<7 | 0x12,
	37119 - 19968: jis0212<<14 | 0x41<<7 | 0x13,
	37120 - 19968: jis0212<<14 | 0x41<<7 | 0x14,
	37122 - 19968: jis0208<<14 | 0x4D<<7 | 0x1E,
	37124 - 19968: jis0212<<14 | 0x41<<7 | 0x15,
	37125 - 19968: jis0212<<14 | 0x41<<7 | 0x16,
	37126 - 19968: jis0212<<14 | 0x41<<7 | 0x17,
	37128 - 19968: jis0212<<14 | 0x41<<7 | 0x18,
	37133 - 19968: jis0212<<14 | 0x41<<7 | 0x19,
	37136 - 19968: jis0212<<14 | 0x41<<7 | 0x1A,
	37138 - 19968: jis0208<<14 | 0x4D<<7 | 0x1F,
	37140 - 19968: jis0212<<14 | 0x41<<7 | 0x1B,
	37141 - 19968: jis0208<<14 | 0x5A<<7 | 0x5B,
	37142 - 19968: jis0212<<14 | 0x41<<7 | 0x1C,
	37143 - 19968: jis0212<<14 | 0x41<<7 | 0x1D,
	37144 - 19968: jis0212<<14 | 0x41<<7 | 0x1E,
	37145 - 19968: jis0208<<14 | 0x4D<<7 | 0x20,
	37146 - 19968: jis0212<<14 | 0x41<<7 | 0x1F,
	37148 - 19968: jis0212<<14 | 0x41<<7 | 0x20,
	37150 - 19968: jis0212<<14 | 0x41<<7 | 0x21,
	37152 - 19968: jis0212<<14 | 0x41<<7 | 0x22,
	37154 - 19968: jis0212<<14 | 0x41<<7 | 0x24,
	37155 - 19968: jis0212<<14 | 0x41<<7 | 0x25,
	37157 - 19968: jis0212<<14 | 0x41<<7 | 0x23,
	37159 - 19968: jis0208<<14 | 0x5A<<7 | 0x5C,
	37161 - 19968: jis0212<<14 | 0x41<<7 | 0x27,
	37165 - 19968: jis0208<<14 | 0x24<<7 | 0x01,
	37166 - 19968: jis0212<<14 | 0x41<<7 | 0x28,
	37167 - 19968: jis0212<<14 | 0x41<<7 | 0x29,
	37168 - 19968: jis0208<<14 | 0x4D<<7 | 0x22,
	37169 - 19968: jis0212<<14 | 0x41<<7 | 0x2A,
	37170 - 19968: jis0208<<14 | 0x4D<<7 | 0x21,
	37172 - 19968: jis0212<<14 | 0x41<<7 | 0x2B,
	37174 - 19968: jis0212<<14 | 0x41<<7 | 0x2C,
	37175 - 19968: jis0212<<14 | 0x41<<7 | 0x2D,
	37177 - 19968: jis0212<<14 | 0x41<<7 | 0x2E,
	37178 - 19968: jis0212<<14 | 0x41<<7 | 0x2F,
	37180 - 19968: jis0212<<14 | 0x41<<7 | 0x30,
	37181 - 19968: jis0212<<14 | 0x41<<7 | 0x31,
	37187 - 19968: jis0212<<14 | 0x41<<7 | 0x32,
	37191 - 19968: jis0212<<14 | 0x41<<7 | 0x33,
	37192 - 19968: jis0212<<14 | 0x41<<7 | 0x34,
	37193 - 19968: jis0208<<14 | 0x25<<7 | 0x32,
	37194 - 19968: jis0208<<14 | 0x4D<<7 | 0x23,
	37195 - 19968: jis0208<<14 | 0x1C<<7 | 0x15,
	37196 - 19968: jis0208<<14 | 0x1B<<7 | 0x3F,
	37197 - 19968: jis0208<<14 | 0x26<<7 | 0x3A,
	37198 - 19968: jis0208<<14 | 0x22<<7 | 0x50,
	37199 - 19968: jis0212<<14 | 0x41<<7 | 0x35,
	37202 - 19968: jis0208<<14 | 0x1B<<7 | 0x51,
	37203 - 19968: jis0212<<14 | 0x41<<7 | 0x36,
	37204 - 19968: jis0208<<14 | 0x1E<<7 | 0x4B,
	37206 - 19968: jis0208<<14 | 0x4D<<7 | 0x24,
	37207 - 19968: jis0212<<14 | 0x41<<7 | 0x37,
	37208 - 19968: jis0208<<14 | 0x4D<<7 | 0x25,
	37209 - 19968: jis0212<<14 | 0x41<<7 | 0x38,
	37210 - 19968: jis0212<<14 | 0x41<<7 | 0x39,
	37211 - 19968: jis0212<<14 | 0x41<<7 | 0x3A,
	37217 - 19968: jis0212<<14 | 0x41<<7 | 0x3B,
	37218 - 19968: jis0208<<14 | 0x1E<<7 | 0x3C,
	37219 - 19968: jis0208<<14 | 0x4D<<7 | 0x26,
	37220 - 19968: jis0212<<14 | 0x41<<7 | 0x3C,
	37221 - 19968: jis0208<<14 | 0x4D<<7 | 0x27,
	37223 - 19968: jis0212<<14 | 0x41<<7 | 0x3D,
	37225 - 19968: jis0208<<14 | 0x4D<<7 | 0x28,
	37226 - 19968: jis0208<<14 | 0x2C<<7 | 0x4E,
	37228 - 19968: jis0208<<14 | 0x1C<<7 | 0x16,
	37229 - 19968: jis0212<<14 | 0x41<<7 | 0x3E,
	37234 - 19968: jis0208<<14 | 0x4D<<7 | 0x2A,
	37235 - 19968: jis0208<<14 | 0x4D<<7 | 0x29,
	37236 - 19968: jis0212<<14 | 0x41<<7 | 0x3F,
	37237 - 19968: jis0208<<14 | 0x18<<7 | 0x39,
	37239 - 19968: jis0208<<14 | 0x18<<7 | 0x52,
	37240 - 19968: jis0208<<14 | 0x1A<<7 | 0x1F,
	37241 - 19968: jis0212<<14 | 0x41<<7 | 0x40,
	37242 - 19968: jis0212<<14 | 0x41<<7 | 0x41,
	37243 - 19968: jis0212<<14 | 0x41<<7 | 0x42,
	37249 - 19968: jis0212<<14 | 0x41<<7 | 0x43,
	37250 - 19968: jis0208<<14 | 0x4D<<7 | 0x2D,
	37251 - 19968: jis0212<<14 | 0x41<<7 | 0x44,
	37253 - 19968: jis0212<<14 | 0x41<<7 | 0x45,
	37254 - 19968: jis0212<<14 | 0x41<<7 | 0x46,
	37255 - 19968: jis0208<<14 | 0x1C<<7 | 0x45,
	37257 - 19968: jis0208<<14 | 0x4D<<7 | 0x2C,
	37258 - 19968: jis0212<<14 | 0x41<<7 | 0x47,
	37259 - 19968: jis0208<<14 | 0x4D<<7 | 0x2B,
	37261 - 19968: jis0208<<14 | 0x21<<7 | 0x48,
	37262 - 19968: jis0212<<14 | 0x41<<7 | 0x48,
	37264 - 19968: jis0208<<14 | 0x17<<7 | 0x4E,
	37265 - 19968: jis0212<<14 | 0x41<<7 | 0x49,
	37266 - 19968: jis0208<<14 | 0x1F<<7 | 0x22,
	37267 - 19968: jis0212<<14 | 0x41<<7 | 0x4A,
	37268 - 19968: jis0212<<14 | 0x41<<7 | 0x4B,
	37269 - 19968: jis0212<<14 | 0x41<<7 | 0x4C,
	37271 - 19968: jis0208<<14 | 0x27<<7 | 0x0F,
	37272 - 19968: jis0212<<14 | 0x41<<7 | 0x4D,
	37276 - 19968: jis0208<<14 | 0x1C<<7 | 0x18,
	37278 - 19968: jis0212<<14 | 0x41<<7 | 0x4E,
	37281 - 19968: jis0212<<14 | 0x41<<7 | 0x4F,
	37282 - 19968: jis0208<<14 | 0x4D<<7 | 0x2E,
	37284 - 19968: jis0208<<14 | 0x1D<<7 | 0x3E,
	37286 - 19968: jis0212<<14 | 0x41<<7 | 0x50,
	37288 - 19968: jis0212<<14 | 0x41<<7 | 0x51,
	37290 - 19968: jis0208<<14 | 0x4D<<7 | 0x31,
	37291 - 19968: jis0208<<14 | 0x4D<<7 | 0x2F,
	37292 - 19968: jis0212<<14 | 0x41<<7 | 0x52,
	37293 - 19968: jis0212<<14 | 0x41<<7 | 0x53,
	37294 - 19968: jis0212<<14 | 0x41<<7 | 0x54,
	37295 - 19968: jis0208<<14 | 0x4D<<7 | 0x30,
	37296 - 19968: jis0212<<14 | 0x41<<7 | 0x55,
	37297 - 19968: jis0212<<14 | 0x41<<7 | 0x56,
	37298 - 19968: jis0212<<14 | 0x41<<7 | 0x57,
	37299 - 19968: jis0212<<14 | 0x41<<7 | 0x58,
	37300 - 19968: jis0208<<14 | 0x4D<<7 | 0x33,
	37301 - 19968: jis0208<<14 | 0x4D<<7 | 0x32,
	37302 - 19968: jis0212<<14 | 0x41<<7 | 0x59,
	37304 - 19968: jis0208<<14 | 0x1D<<7 | 0x59,
	37306 - 19968: jis0208<<14 | 0x4D<<7 | 0x34,
	37307 - 19968: jis0212<<14 | 0x41<<7 | 0x5A,
	37308 - 19968: jis0212<<14 | 0x41<<7 | 0x5B,
	37309 - 19968: jis0212<<14 | 0x41<<7 | 0x5C,
	37311 - 19968: jis0212<<14 | 0x41<<7 | 0x5D,
	37312 - 19968: jis0208<<14 | 0x4D<<7 | 0x35,
	37313 - 19968: jis0208<<14 | 0x4D<<7 | 0x36,
	37314 - 19968: jis0212<<14 | 0x42<<7 | 0x00,
	37315 - 19968: jis0212<<14 | 0x42<<7 | 0x01,
	37317 - 19968: jis0212<<14 | 0x42<<7 | 0x02,
	37318 - 19968: jis0208<<14 | 0x27<<7 | 0x2F,
	37319 - 19968: jis0208<<14 | 0x19<<7 | 0x32,
	37320 - 19968: jis0208<<14 | 0x1B<<7 | 0x40,
	37321 - 19968: jis0208<<14 | 0x4D<<7 | 0x37,
	37323 - 19968: jis0208<<14 | 0x4D<<7 | 0x38,
	37324 - 19968: jis0208<<14 | 0x2D<<7 | 0x03,
	37325 - 19968: jis0208<<14 | 0x1C<<7 | 0x24,
	37326 - 19968: jis0208<<14 | 0x2B<<7 | 0x4D,
	37327 - 19968: jis0208<<14 | 0x2D<<7 | 0x2B,
	37328 - 19968: jis0208<<14 | 0x4D<<7 | 0x39,
	37329 - 19968: jis0208<<14 | 0x15<<7 | 0x41,
	37331 - 19968: jis0212<<14 | 0x42<<7 | 0x03,
	37332 - 19968: jis0212<<14 | 0x42<<7 | 0x04,
	37334 - 19968: jis0208<<14 | 0x4D<<7 | 0x3A,
	37335 - 19968: jis0208<<14 | 0x5B<<7 | 0x00,
	37336 - 19968: jis0208<<14 | 0x24<<7 | 0x02,
	37337 - 19968: jis0212<<14 | 0x42<<7 | 0x06,
	37338 - 19968: jis0208<<14 | 0x5A<<7 | 0x5D,
	37339 - 19968: jis0208<<14 | 0x4D<<7 | 0x3D,
	37340 - 19968: jis0208<<14 | 0x12<<7 | 0x57,
	37341 - 19968: jis0208<<14 | 0x1E<<7 | 0x2A,
	37342 - 19968: jis0208<<14 | 0x5B<<7 | 0x01,
	37343 - 19968: jis0208<<14 | 0x4D<<7 | 0x3B,
	37345 - 19968: jis0208<<14 | 0x4D<<7 | 0x3C,
	37347 - 19968: jis0208<<14 | 0x23<<7 | 0x3F,
	37348 - 19968: jis0208<<14 | 0x5B<<7 | 0x04,
	37349 - 19968: jis0208<<14 | 0x5B<<7 | 0x05,
	37350 - 19968: jis0208<<14 | 0x2A<<7 | 0x34,
	37351 - 19968: jis0208<<14 | 0x15<<7 | 0x5B,
	37353 - 19968: jis0212<<14 | 0x42<<7 | 0x0B,
	37354 - 19968: jis0212<<14 | 0x42<<7 | 0x0C,
	37356 - 19968: jis0212<<14 | 0x42<<7 | 0x0D,
	37357 - 19968: jis0208<<14 | 0x5B<<7 | 0x02,
	37358 - 19968: jis0208<<14 | 0x5B<<7 | 0x03,
	37359 - 19968: jis0212<<14 | 0x42<<7 | 0x10,
	37360 - 19968: jis0212<<14 | 0x42<<7 | 0x11,
	37361 - 19968: jis0212<<14 | 0x42<<7 | 0x12,
	37365 - 19968: jis0208<<14 | 0x4D<<7 | 0x3F,
	37366 - 19968: jis0208<<14 | 0x4D<<7 | 0x40,
	37367 - 19968: jis0212<<14 | 0x42<<7 | 0x13,
	37369 - 19968: jis0212<<14 | 0x42<<7 | 0x14,
	37371 - 19968: jis0212<<14 | 0x42<<7 | 0x15,
	37372 - 19968: jis0208<<14 | 0x4D<<7 | 0x3E,
	37373 - 19968: jis0212<<14 | 0x42<<7 | 0x16,
	37375 - 19968: jis0208<<14 | 0x4D<<7 | 0x42,
	37376 - 19968: jis0212<<14 | 0x42<<7 | 0x17,
	37377 - 19968: jis0212<<14 | 0x42<<7 | 0x18,
	37380 - 19968: jis0212<<14 | 0x42<<7 | 0x19,
	37381 - 19968: jis0212<<14 | 0x42<<7 | 0x1A,
	37382 - 19968: jis0208<<14 | 0x5B<<7 | 0x06,
	37383 - 19968: jis0212<<14 | 0x42<<7 | 0x1C,
	37385 - 19968: jis0212<<14 | 0x42<<7 | 0x1D,
	37386 - 19968: jis0208<<14 | 0x5B<<7 | 0x08,
	37388 - 19968: jis0212<<14 | 0x42<<7 | 0x1F,
	37389 - 19968: jis0208<<14 | 0x25<<7 | 0x3E,
	37390 - 19968: jis0208<<14 | 0x12<<7 | 0x22,
	37392 - 19968: jis0208<<14 | 0x5B<<7 | 0x07,
	37393 - 19968: jis0208<<14 | 0x4D<<7 | 0x46,
	37394 - 19968: jis0212<<14 | 0x42<<7 | 0x21,
	37395 - 19968: jis0212<<14 | 0x42<<7 | 0x22,
	37396 - 19968: jis0208<<14 | 0x4D<<7 | 0x43,
	37397 - 19968: jis0208<<14 | 0x4D<<7 | 0x45,
	37398 - 19968: jis0212<<14 | 0x42<<7 | 0x23,
	37400 - 19968: jis0212<<14 | 0x42<<7 | 0x24,
	37404 - 19968: jis0212<<14 | 0x42<<7 | 0x25,
	37405 - 19968: jis0212<<14 | 0x42<<7 | 0x26,
	37406 - 19968: jis0208<<14 | 0x4D<<7 | 0x41,
	37411 - 19968: jis0212<<14 | 0x42<<7 | 0x27,
	37412 - 19968: jis0212<<14 | 0x42<<7 | 0x28,
	37413 - 19968: jis0212<<14 | 0x42<<7 | 0x29,
	37414 - 19968: jis0212<<14 | 0x42<<7 | 0x2A,
	37416 - 19968: jis0212<<14 | 0x42<<7 | 0x2B,
	37417 - 19968: jis0208<<14 | 0x4E<<7 | 0x2E,
	37420 - 19968: jis0208<<14 | 0x4D<<7 | 0x44,
	37422 - 19968: jis0212<<14 | 0x42<<7 | 0x2C,
	37423 - 19968: jis0212<<14 | 0x42<<7 | 0x2D,
	37424 - 19968: jis0212<<14 | 0x42<<7 | 0x2E,
	37427 - 19968: jis0212<<14 | 0x42<<7 | 0x2F,
	37428 - 19968: jis0208<<14 | 0x2D<<7 | 0x4A,
	37429 - 19968: jis0212<<14 | 0x42<<7 | 0x30,
	37430 - 19968: jis0212<<14 | 0x42<<7 | 0x31,
	37431 - 19968: jis0208<<14 | 0x17<<7 | 0x39,
	37432 - 19968: jis0212<<14 | 0x42<<7 | 0x32,
	37433 - 19968: jis0208<<14 | 0x5B<<7 | 0x0F,
	37434 - 19968: jis0208<<14 | 0x5B<<7 | 0x09,
	37436 - 19968: jis0208<<14 | 0x5B<<7 | 0x0B,
	37438 - 19968: jis0212<<14 | 0x42<<7 | 0x36,
	37439 - 19968: jis0208<<14 | 0x4D<<7 | 0x4E,
	37440 - 19968: jis0208<<14 | 0x5B<<7 | 0x0A,
	37442 - 19968: jis0212<<14 | 0x42<<7 | 0x38,
	37443 - 19968: jis0212<<14 | 0x42<<7 | 0x39,
	37444 - 19968: jis0208<<14 | 0x24<<7 | 0x13,
	37445 - 19968: jis0208<<14 | 0x4D<<7 | 0x49,
	37446 - 19968: jis0212<<14 | 0x42<<7 | 0x3A,
	37447 - 19968: jis0212<<14 | 0x42<<7 | 0x3B,
	37448 - 19968: jis0208<<14 | 0x4D<<7 | 0x4C,
	37449 - 19968: jis0208<<14 | 0x4D<<7 | 0x4A,
	37450 - 19968: jis0212<<14 | 0x42<<7 | 0x3C,
	37451 - 19968: jis0208<<14 | 0x4D<<7 | 0x4F,
	37453 - 19968: jis0212<<14 | 0x42<<7 | 0x3D,
	37454 - 19968: jis0208<<14 | 0x5B<<7 | 0x0C,
	37455 - 19968: jis0212<<14 | 0x42<<7 | 0x3F,
	37456 - 19968: jis0208<<14 | 0x4D<<7 | 0x50,
	37457 - 19968: jis0208<<14 | 0x5B<<7 | 0x0E,
	37463 - 19968: jis0208<<14 | 0x4D<<7 | 0x48,
	37464 - 19968: jis0212<<14 | 0x42<<7 | 0x41,
	37465 - 19968: jis0208<<14 | 0x5B<<7 | 0x0D,
	37466 - 19968: jis0208<<14 | 0x4D<<7 | 0x55,
	37467 - 19968: jis0208<<14 | 0x10<<7 | 0x53,
	37468 - 19968: jis0212<<14 | 0x42<<7 | 0x43,
	37469 - 19968: jis0212<<14 | 0x42<<7 | 0x44,
	37470 - 19968: jis0208<<14 | 0x4D<<7 | 0x47,
	37472 - 19968: jis0212<<14 | 0x42<<7 | 0x45,
	37473 - 19968: jis0212<<14 | 0x42<<7 | 0x46,
	37474 - 19968: jis0208<<14 | 0x27<<7 | 0x0C,
	37476 - 19968: jis0208<<14 | 0x4D<<7 | 0x4B,
	37477 - 19968: jis0212<<14 | 0x42<<7 | 0x47,
	37478 - 19968: jis0208<<14 | 0x1D<<7 | 0x3F,
	37479 - 19968: jis0208<<14 | 0x5B<<7 | 0x10,
	37480 - 19968: jis0212<<14 | 0x42<<7 | 0x49,
	37481 - 19968: jis0212<<14 | 0x42<<7 | 0x4A,
	37486 - 19968: jis0212<<14 | 0x42<<7 | 0x4B,
	37487 - 19968: jis0212<<14 | 0x42<<7 | 0x4C,
	37488 - 19968: jis0212<<14 | 0x42<<7 | 0x4D,
	37489 - 19968: jis0208<<14 | 0x18<<7 | 0x3A,
	37493 - 19968: jis0212<<14 | 0x42<<7 | 0x4E,
	37494 - 19968: jis0212<<14 | 0x42<<7 | 0x4F,
	37495 - 19968: jis0208<<14 | 0x5B<<7 | 0x12,
	37496 - 19968: jis0208<<14 | 0x5B<<7 | 0x13,
	37497 - 19968: jis0212<<14 | 0x42<<7 | 0x52,
	37499 - 19968: jis0212<<14 | 0x42<<7 | 0x53,
	37500 - 19968: jis0212<<14 | 0x42<<7 | 0x54,
	37501 - 19968: jis0212<<14 | 0x42<<7 | 0x55,
	37502 - 19968: jis0208<<14 | 0x2A<<7 | 0x27,
	37503 - 19968: jis0212<<14 | 0x42<<7 | 0x56,
	37504 - 19968: jis0208<<14 | 0x15<<7 | 0x43,
	37507 - 19968: jis0208<<14 | 0x1C<<7 | 0x25,
	37509 - 19968: jis0208<<14 | 0x25<<7 | 0x1B,
	37512 - 19968: jis0208<<14 | 0x58<<7 | 0x03,
	37513 - 19968: jis0212<<14 | 0x42<<7 | 0x58,
	37514 - 19968: jis0212<<14 | 0x42<<7 | 0x59,
	37517 - 19968: jis0212<<14 | 0x42<<7 | 0x5A,
	37518 - 19968: jis0212<<14 | 0x42<<7 | 0x5B,
	37521 - 19968: jis0208<<14 | 0x20<<7 | 0x0C,
	37522 - 19968: jis0212<<14 | 0x42<<7 | 0x5C,
	37523 - 19968: jis0208<<14 | 0x4D<<7 | 0x53,
	37525 - 19968: jis0208<<14 | 0x4D<<7 | 0x4D,
	37526 - 19968: jis0208<<14 | 0x4D<<7 | 0x52,
	37527 - 19968: jis0212<<14 | 0x42<<7 | 0x5D,
	37528 - 19968: jis0208<<14 | 0x2B<<7 | 0x22,
	37529 - 19968: jis0212<<14 | 0x43<<7 | 0x00,
	37530 - 19968: jis0208<<14 | 0x23<<7 | 0x17,
	37531 - 19968: jis0208<<14 | 0x4D<<7 | 0x54,
	37532 - 19968: jis0208<<14 | 0x4D<<7 | 0x51,
	37535 - 19968: jis0212<<14 | 0x43<<7 | 0x01,
	37536 - 19968: jis0212<<14 | 0x43<<7 | 0x02,
	37540 - 19968: jis0212<<14 | 0x43<<7 | 0x03,
	37541 - 19968: jis0212<<14 | 0x43<<7 | 0x04,
	37543 - 19968: jis0208<<14 | 0x5B<<7 | 0x11,
	37544 - 19968: jis0212<<14 | 0x43<<7 | 0x06,
	37547 - 19968: jis0212<<14 | 0x43<<7 | 0x07,
	37549 - 19968: jis0208<<14 | 0x20<<7 | 0x0B,
	37551 - 19968: jis0212<<14 | 0x43<<7 | 0x08,
	37554 - 19968: jis0212<<14 | 0x43<<7 | 0x09,
	37558 - 19968: jis0212<<14 | 0x43<<7 | 0x0A,
	37559 - 19968: jis0208<<14 | 0x4D<<7 | 0x58,
	37560 - 19968: jis0212<<14 | 0x43<<7 | 0x0B,
	37561 - 19968: jis0208<<14 | 0x4D<<7 | 0x57,
	37562 - 19968: jis0212<<14 | 0x43<<7 | 0x0C,
	37563 - 19968: jis0212<<14 | 0x43<<7 | 0x0D,
	37564 - 19968: jis0212<<14 | 0x43<<7 | 0x0E,
	37565 - 19968: jis0212<<14 | 0x43<<7 | 0x0F,
	37567 - 19968: jis0212<<14 | 0x43<<7 | 0x10,
	37568 - 19968: jis0212<<14 | 0x43<<7 | 0x11,
	37569 - 19968: jis0212<<14 | 0x43<<7 | 0x12,
	37570 - 19968: jis0212<<14 | 0x43<<7 | 0x13,
	37571 - 19968: jis0212<<14 | 0x43<<7 | 0x14,
	37573 - 19968: jis0212<<14 | 0x43<<7 | 0x15,
	37574 - 19968: jis0212<<14 | 0x43<<7 | 0x16,
	37575 - 19968: jis0212<<14 | 0x43<<7 | 0x17,
	37576 - 19968: jis0212<<14 | 0x43<<7 | 0x18,
	37579 - 19968: jis0212<<14 | 0x43<<7 | 0x19,
	37580 - 19968: jis0212<<14 | 0x43<<7 | 0x1A,
	37581 - 19968: jis0212<<14 | 0x43<<7 | 0x1B,
	37582 - 19968: jis0212<<14 | 0x43<<7 | 0x1C,
	37583 - 19968: jis0208<<14 | 0x4D<<7 | 0x56,
	37584 - 19968: jis0208<<14 | 0x5B<<7 | 0x17,
	37586 - 19968: jis0208<<14 | 0x2A<<7 | 0x0E,
	37587 - 19968: jis0208<<14 | 0x5B<<7 | 0x1B,
	37589 - 19968: jis0208<<14 | 0x5B<<7 | 0x19,
	37591 - 19968: jis0208<<14 | 0x5B<<7 | 0x15,
	37592 - 19968: jis0212<<14 | 0x43<<7 | 0x21,
	37593 - 19968: jis0208<<14 | 0x5B<<7 | 0x16,
	37596 - 19968: jis0212<<14 | 0x43<<7 | 0x23,
	37597 - 19968: jis0212<<14 | 0x43<<7 | 0x24,
	37599 - 19968: jis0212<<14 | 0x43<<7 | 0x25,
	37600 - 19968: jis0208<<14 | 0x5B<<7 | 0x1A,
	37601 - 19968: jis0212<<14 | 0x43<<7 | 0x27,
	37603 - 19968: jis0212<<14 | 0x43<<7 | 0x28,
	37604 - 19968: jis0208<<14 | 0x1C<<7 | 0x5A,
	37605 - 19968: jis0212<<14 | 0x43<<7 | 0x29,
	37607 - 19968: jis0208<<14 | 0x5B<<7 | 0x14,
	37608 - 19968: jis0212<<14 | 0x43<<7 | 0x2B,
	37609 - 19968: jis0208<<14 | 0x4D<<7 | 0x59,
	37610 - 19968: jis0208<<14 | 0x29<<7 | 0x3E,
	37612 - 19968: jis0212<<14 | 0x43<<7 | 0x2C,
	37613 - 19968: jis0208<<14 | 0x10<<7 | 0x33,
	37614 - 19968: jis0212<<14 | 0x43<<7 | 0x2D,
	37616 - 19968: jis0212<<14 | 0x43<<7 | 0x2E,
	37618 - 19968: jis0208<<14 | 0x28<<7 | 0x25,
	37619 - 19968: jis0208<<14 | 0x22<<7 | 0x51,
	37624 - 19968: jis0208<<14 | 0x14<<7 | 0x57,
	37625 - 19968: jis0208<<14 | 0x58<<7 | 0x09,
	37626 - 19968: jis0208<<14 | 0x4D<<7 | 0x5B,
	37627 - 19968: jis0208<<14 | 0x5B<<7 | 0x1E,
	37628 - 19968: jis0208<<14 | 0x18<<7 | 0x3C,
	37631 - 19968: jis0208<<14 | 0x5B<<7 | 0x21,
	37632 - 19968: jis0212<<14 | 0x43<<7 | 0x32,
	37634 - 19968: jis0208<<14 | 0x5B<<7 | 0x23,
	37638 - 19968: jis0208<<14 | 0x1A<<7 | 0x0B,
	37640 - 19968: jis0212<<14 | 0x43<<7 | 0x34,
	37645 - 19968: jis0212<<14 | 0x43<<7 | 0x35,
	37647 - 19968: jis0208<<14 | 0x4D<<7 | 0x5A,
	37648 - 19968: jis0208<<14 | 0x1E<<7 | 0x4C,
	37649 - 19968: jis0212<<14 | 0x43<<7 | 0x36,
	37652 - 19968: jis0212<<14 | 0x43<<7 | 0x37,
	37653 - 19968: jis0212<<14 | 0x43<<7 | 0x38,
	37656 - 19968: jis0208<<14 | 0x1E<<7 | 0x4D,
	37657 - 19968: jis0208<<14 | 0x4E<<7 | 0x00,
	37658 - 19968: jis0208<<14 | 0x4E<<7 | 0x02,
	37660 - 19968: jis0212<<14 | 0x43<<7 | 0x39,
	37661 - 19968: jis0208<<14 | 0x5B<<7 | 0x22,
	37662 - 19968: jis0208<<14 | 0x5B<<7 | 0x20,
	37663 - 19968: jis0212<<14 | 0x43<<7 | 0x3C,
	37664 - 19968: jis0208<<14 | 0x1D<<7 | 0x5A,
	37665 - 19968: jis0208<<14 | 0x5B<<7 | 0x1D,
	37666 - 19968: jis0208<<14 | 0x4E<<7 | 0x01,
	37667 - 19968: jis0208<<14 | 0x4E<<7 | 0x03,
	37668 - 19968: jis0212<<14 | 0x43<<7 | 0x3E,
	37669 - 19968: jis0208<<14 | 0x5B<<7 | 0x1C,
	37670 - 19968: jis0208<<14 | 0x15<<7 | 0x32,
	37671 - 19968: jis0212<<14 | 0x43<<7 | 0x40,
	37672 - 19968: jis0208<<14 | 0x28<<7 | 0x24,
	37673 - 19968: jis0212<<14 | 0x43<<7 | 0x41,
	37674 - 19968: jis0212<<14 | 0x43<<7 | 0x42,
	37675 - 19968: jis0208<<14 | 0x1B<<7 | 0x41,
	37676 - 19968: jis0208<<14 | 0x2E<<7 | 0x02,
	37678 - 19968: jis0208<<14 | 0x4D<<7 | 0x5D,
	37679 - 19968: jis0208<<14 | 0x19<<7 | 0x57,
	37682 - 19968: jis0208<<14 | 0x2E<<7 | 0x1E,
	37683 - 19968: jis0212<<14 | 0x43<<7 | 0x43,
	37684 - 19968: jis0212<<14 | 0x43<<7 | 0x44,
	37685 - 19968: jis0208<<14 | 0x4E<<7 | 0x05,
	37686 - 19968: jis0212<<14 | 0x43<<7 | 0x45,
	37687 - 19968: jis0212<<14 | 0x43<<7 | 0x46,
	37690 - 19968: jis0208<<14 | 0x4E<<7 | 0x04,
	37691 - 19968: jis0208<<14 | 0x4E<<7 | 0x06,
	37700 - 19968: jis0208<<14 | 0x4D<<7 | 0x5C,
	37703 - 19968: jis0212<<14 | 0x43<<7 | 0x47,
	37704 - 19968: jis0208<<14 | 0x58<<7 | 0x02,
	37705 - 19968: jis0212<<14 | 0x43<<7 | 0x49,
	37707 - 19968: jis0208<<14 | 0x25<<7 | 0x48,
	37709 - 19968: jis0208<<14 | 0x24<<7 | 0x34,
	37712 - 19968: jis0212<<14 | 0x43<<7 | 0x4A,
	37713 - 19968: jis0212<<14 | 0x43<<7 | 0x4B,
	37714 - 19968: jis0212<<14 | 0x43<<7 | 0x4C,
	37716 - 19968: jis0208<<14 | 0x23<<7 | 0x36,
	37717 - 19968: jis0212<<14 | 0x43<<7 | 0x4D,
	37718 - 19968: jis0208<<14 | 0x4E<<7 | 0x0B,
	37719 - 19968: jis0208<<14 | 0x5B<<7 | 0x25,
	37720 - 19968: jis0212<<14 | 0x43<<7 | 0x4F,
	37722 - 19968: jis0212<<14 | 0x43<<7 | 0x50,
	37723 - 19968: jis0208<<14 | 0x22<<7 | 0x22,
	37724 - 19968: jis0208<<14 | 0x4E<<7 | 0x07,
	37726 - 19968: jis0212<<14 | 0x43<<7 | 0x51,
	37728 - 19968: jis0208<<14 | 0x4E<<7 | 0x08,
	37732 - 19968: jis0212<<14 | 0x43<<7 | 0x52,
	37733 - 19968: jis0212<<14 | 0x43<<7 | 0x53,
	37735 - 19968: jis0212<<14 | 0x43<<7 | 0x54,
	37737 - 19968: jis0212<<14 | 0x43<<7 | 0x55,
	37738 - 19968: jis0212<<14 | 0x43<<7 | 0x56,
	37740 - 19968: jis0208<<14 | 0x16<<7 | 0x0C,
	37741 - 19968: jis0212<<14 | 0x43<<7 | 0x57,
	37742 - 19968: jis0208<<14 | 0x4E<<7 | 0x0A,
	37743 - 19968: jis0212<<14 | 0x43<<7 | 0x58,
	37744 - 19968: jis0208<<14 | 0x5B<<7 | 0x24,
	37745 - 19968: jis0212<<14 | 0x43<<7 | 0x5A,
	37747 - 19968: jis0212<<14 | 0x43<<7 | 0x5B,
	37748 - 19968: jis0212<<14 | 0x43<<7 | 0x5C,
	37749 - 19968: jis0208<<14 | 0x17<<7 | 0x0F,
	37750 - 19968: jis0212<<14 | 0x43<<7 | 0x5D,
	37754 - 19968: jis0212<<14 | 0x44<<7 | 0x00,
	37756 - 19968: jis0208<<14 | 0x4E<<7 | 0x09,
	37757 - 19968: jis0212<<14 | 0x44<<7 | 0x01,
	37758 - 19968: jis0208<<14 | 0x1D<<7 | 0x40,
	37759 - 19968: jis0212<<14 | 0x44<<7 | 0x02,
	37760 - 19968: jis0212<<14 | 0x44<<7 | 0x03,
	37761 - 19968: jis0212<<14 | 0x44<<7 | 0x04,
	37762 - 19968: jis0212<<14 | 0x44<<7 | 0x05,
	37768 - 19968: jis0212<<14 | 0x44<<7 | 0x06,
	37770 - 19968: jis0212<<14 | 0x44<<7 | 0x07,
	37771 - 19968: jis0212<<14 | 0x44<<7 | 0x08,
	37772 - 19968: jis0208<<14 | 0x12<<7 | 0x58,
	37773 - 19968: jis0212<<14 | 0x44<<7 | 0x09,
	37775 - 19968: jis0212<<14 | 0x44<<7 | 0x0A,
	37778 - 19968: jis0212<<14 | 0x44<<7 | 0x0B,
	37780 - 19968: jis0208<<14 | 0x4E<<7 | 0x0F,
	37781 - 19968: jis0212<<14 | 0x44<<7 | 0x0C,
	37782 - 19968: jis0208<<14 | 0x19<<7 | 0x1E,
	37783 - 19968: jis0208<<14 | 0x20<<7 | 0x58,
	37784 - 19968: jis0212<<14 | 0x44<<7 | 0x0D,
	37786 - 19968: jis0208<<14 | 0x23<<7 | 0x29,
	37787 - 19968: jis0212<<14 | 0x44<<7 | 0x0E,
	37790 - 19968: jis0212<<14 | 0x44<<7 | 0x0F,
	37793 - 19968: jis0212<<14 | 0x44<<7 | 0x10,
	37795 - 19968: jis0212<<14 | 0x44<<7 | 0x11,
	37796 - 19968: jis0208<<14 | 0x5B<<7 | 0x26,
	37798 - 19968: jis0212<<14 | 0x44<<7 | 0x13,
	37799 - 19968: jis0208<<14 | 0x12<<7 | 0x1A,
	37800 - 19968: jis0212<<14 | 0x44<<7 | 0x14,
	37801 - 19968: jis0212<<14 | 0x44<<7 | 0x1A,
	37803 - 19968: jis0212<<14 | 0x44<<7 | 0x15,
	37804 - 19968: jis0208<<14 | 0x4E<<7 | 0x0D,
	37805 - 19968: jis0208<<14 | 0x4E<<7 | 0x0E,
	37806 - 19968: jis0208<<14 | 0x23<<7 | 0x22,
	37808 - 19968: jis0208<<14 | 0x4E<<7 | 0x0C,
	37812 - 19968: jis0212<<14 | 0x44<<7 | 0x16,
	37813 - 19968: jis0212<<14 | 0x44<<7 | 0x17,
	37814 - 19968: jis0212<<14 | 0x44<<7 | 0x18,
	37817 - 19968: jis0208<<14 | 0x4E<<7 | 0x10,
	37818 - 19968: jis0212<<14 | 0x44<<7 | 0x19,
	37825 - 19968: jis0212<<14 | 0x44<<7 | 0x1B,
	37827 - 19968: jis0208<<14 | 0x4E<<7 | 0x16,
	37828 - 19968: jis0212<<14 | 0x44<<7 | 0x1C,
	37829 - 19968: jis0212<<14 | 0x44<<7 | 0x1D,
	37830 - 19968: jis0208<<14 | 0x5B<<7 | 0x27,
	37831 - 19968: jis0212<<14 | 0x44<<7 | 0x1F,
	37832 - 19968: jis0208<<14 | 0x4E<<7 | 0x19,
	37833 - 19968: jis0212<<14 | 0x44<<7 | 0x20,
	37834 - 19968: jis0212<<14 | 0x44<<7 | 0x21,
	37835 - 19968: jis0212<<14 | 0x44<<7 | 0x22,
	37836 - 19968: jis0212<<14 | 0x44<<7 | 0x23,
	37837 - 19968: jis0212<<14 | 0x44<<7 | 0x24,
	37840 - 19968: jis0208<<14 | 0x4E<<7 | 0x18,
	37841 - 19968: jis0208<<14 | 0x24<<7 | 0x0C,
	37843 - 19968: jis0212<<14 | 0x44<<7 | 0x25,
	37846 - 19968: jis0208<<14 | 0x4E<<7 | 0x11,
	37847 - 19968: jis0208<<14 | 0x4E<<7 | 0x12,
	37848 - 19968: jis0208<<14 | 0x4E<<7 | 0x15,
	37849 - 19968: jis0212<<14 | 0x44<<7 | 0x26,
	37852 - 19968: jis0212<<14 | 0x44<<7 | 0x27,
	37853 - 19968: jis0208<<14 | 0x4E<<7 | 0x17,
	37854 - 19968: jis0208<<14 | 0x5B<<7 | 0x28,
	37855 - 19968: jis0212<<14 | 0x44<<7 | 0x29,
	37857 - 19968: jis0208<<14 | 0x15<<7 | 0x1F,
	37858 - 19968: jis0212<<14 | 0x44<<7 | 0x2A,
	37860 - 19968: jis0208<<14 | 0x4E<<7 | 0x1A,
	37861 - 19968: jis0208<<14 | 0x4E<<7 | 0x14,
	37862 - 19968: jis0212<<14 | 0x44<<7 | 0x2B,
	37863 - 19968: jis0212<<14 | 0x44<<7 | 0x2C,
	37864 - 19968: jis0208<<14 | 0x4E<<7 | 0x13,
	37879 - 19968: jis0212<<14 | 0x44<<7 | 0x2E,
	37880 - 19968: jis0208<<14 | 0x5B<<7 | 0x29,
	37881 - 19968: jis0212<<14 | 0x44<<7 | 0x2D,
	37882 - 19968: jis0212<<14 | 0x44<<7 | 0x30,
	37883 - 19968: jis0212<<14 | 0x44<<7 | 0x31,
	37885 - 19968: jis0212<<14 | 0x44<<7 | 0x32,
	37889 - 19968: jis0212<<14 | 0x44<<7 | 0x33,
	37890 - 19968: jis0212<<14 | 0x44<<7 | 0x34,
	37891 - 19968: jis0208<<14 | 0x4E<<7 | 0x1E,
	37892 - 19968: jis0212<<14 | 0x44<<7 | 0x35,
	37895 - 19968: jis0208<<14 | 0x4E<<7 | 0x1F,
	37896 - 19968: jis0212<<14 | 0x44<<7 | 0x36,
	37897 - 19968: jis0212<<14 | 0x44<<7 | 0x37,
	37901 - 19968: jis0212<<14 | 0x44<<7 | 0x38,
	37902 - 19968: jis0212<<14 | 0x44<<7 | 0x39,
	37903 - 19968: jis0212<<14 | 0x44<<7 | 0x3A,
	37904 - 19968: jis0208<<14 | 0x4E<<7 | 0x20,
	37907 - 19968: jis0208<<14 | 0x4E<<7 | 0x1D,
	37908 - 19968: jis0208<<14 | 0x4E<<7 | 0x1C,
	37909 - 19968: jis0212<<14 | 0x44<<7 | 0x3B,
	37910 - 19968: jis0212<<14 | 0x44<<7 | 0x3C,
	37911 - 19968: jis0212<<14 | 0x44<<7 | 0x3D,
	37912 - 19968: jis0208<<14 | 0x1D<<7 | 0x41,
	37913 - 19968: jis0208<<14 | 0x25<<7 | 0x09,
	37914 - 19968: jis0208<<14 | 0x4E<<7 | 0x1B,
	37919 - 19968: jis0212<<14 | 0x44<<7 | 0x3E,
	37921 - 19968: jis0208<<14 | 0x4E<<7 | 0x24,
	37931 - 19968: jis0208<<14 | 0x4E<<7 | 0x22,
	37934 - 19968: jis0212<<14 | 0x44<<7 | 0x3F,
	37935 - 19968: jis0212<<14 | 0x44<<7 | 0x40,
	37937 - 19968: jis0208<<14 | 0x5B<<7 | 0x2A,
	37938 - 19968: jis0212<<14 | 0x44<<7 | 0x42,
	37939 - 19968: jis0212<<14 | 0x44<<7 | 0x43,
	37940 - 19968: jis0212<<14 | 0x44<<7 | 0x44,
	37941 - 19968: jis0208<<14 | 0x4E<<7 | 0x23,
	37942 - 19968: jis0208<<14 | 0x4E<<7 | 0x21,
	37944 - 19968: jis0208<<14 | 0x21<<7 | 0x57,
	37946 - 19968: jis0208<<14 | 0x4E<<7 | 0x25,
	37947 - 19968: jis0212<<14 | 0x44<<7 | 0x45,
	37949 - 19968: jis0212<<14 | 0x44<<7 | 0x47,
	37951 - 19968: jis0212<<14 | 0x44<<7 | 0x46,
	37953 - 19968: jis0208<<14 | 0x4E<<7 | 0x26,
	37955 - 19968: jis0212<<14 | 0x44<<7 | 0x48,
	37956 - 19968: jis0208<<14 | 0x4E<<7 | 0x28,
	37957 - 19968: jis0208<<14 | 0x5B<<7 | 0x2B,
	37960 - 19968: jis0208<<14 | 0x5B<<7 | 0x2C,
	37962 - 19968: jis0212<<14 | 0x44<<7 | 0x4B,
	37964 - 19968: jis0212<<14 | 0x44<<7 | 0x4C,
	37969 - 19968: jis0208<<14 | 0x13<<7 | 0x34,
	37970 - 19968: jis0208<<14 | 0x4E<<7 | 0x27,
	37971 - 19968: jis0208<<14 | 0x2B<<7 | 0x59,
	37973 - 19968: jis0212<<14 | 0x44<<7 | 0x4D,
	37977 - 19968: jis0212<<14 | 0x44<<7 | 0x4E,
	37978 - 19968: jis0208<<14 | 0x4E<<7 | 0x33,
	37979 - 19968: jis0208<<14 | 0x4E<<7 | 0x29,
	37980 - 19968: jis0212<<14 | 0x44<<7 | 0x4F,
	37982 - 19968: jis0208<<14 | 0x4E<<7 | 0x2C,
	37983 - 19968: jis0212<<14 | 0x44<<7 | 0x50,
	37984 - 19968: jis0208<<14 | 0x4E<<7 | 0x2A,
	37985 - 19968: jis0212<<14 | 0x44<<7 | 0x51,
	37986 - 19968: jis0208<<14 | 0x4E<<7 | 0x2B,
	37987 - 19968: jis0212<<14 | 0x44<<7 | 0x52,
	37992 - 19968: jis0212<<14 | 0x44<<7 | 0x53,
	37994 - 19968: jis0208<<14 | 0x4E<<7 | 0x2D,
	37995 - 19968: jis0212<<14 | 0x44<<7 | 0x54,
	37997 - 19968: jis0212<<14 | 0x44<<7 | 0x55,
	37998 - 19968: jis0212<<14 | 0x44<<7 | 0x56,
	37999 - 19968: jis0212<<14 | 0x44<<7 | 0x57,
	38000 - 19968: jis0208<<14 | 0x4E<<7 | 0x2F,
	38001 - 19968: jis0212<<14 | 0x44<<7 | 0x58,
	38002 - 19968: jis0212<<14 | 0x44<<7 | 0x59,
	38005 - 19968: jis0208<<14 | 0x4E<<7 | 0x30,
	38007 - 19968: jis0208<<14 | 0x4E<<7 | 0x31,
	38012 - 19968: jis0208<<14 | 0x4E<<7 | 0x34,
	38013 - 19968: jis0208<<14 | 0x4E<<7 | 0x32,
	38014 - 19968: jis0208<<14 | 0x4E<<7 | 0x35,
	38015 - 19968: jis0208<<14 | 0x4E<<7 | 0x37,
	38017 - 19968: jis0208<<14 | 0x4E<<7 | 0x36,
	38019 - 19968: jis0212<<14 | 0x44<<7 | 0x5B,
	38020 - 19968: jis0212<<14 | 0x44<<7 | 0x5A,
	38263 - 19968: jis0208<<14 | 0x23<<7 | 0x18,
	38264 - 19968: jis0212<<14 | 0x44<<7 | 0x5C,
	38265 - 19968: jis0212<<14 | 0x44<<7 | 0x5D,
	38270 - 19968: jis0212<<14 | 0x45<<7 | 0x00,
	38272 - 19968: jis0208<<14 | 0x2B<<7 | 0x46,
	38274 - 19968: jis0208<<14 | 0x4E<<7 | 0x38,
	38275 - 19968: jis0208<<14 | 0x20<<7 | 0x0D,
	38276 - 19968: jis0212<<14 | 0x45<<7 | 0x01,
	38279 - 19968: jis0208<<14 | 0x4E<<7 | 0x39,
	38280 - 19968: jis0212<<14 | 0x45<<7 | 0x02,
	38281 - 19968: jis0208<<14 | 0x29<<7 | 0x23,
	38282 - 19968: jis0208<<14 | 0x4E<<7 | 0x3A,
	38283 - 19968: jis0208<<14 | 0x12<<7 | 0x0A,
	38284 - 19968: jis0212<<14 | 0x45<<7 | 0x03,
	38285 - 19968: jis0212<<14 | 0x45<<7 | 0x04,
	38286 - 19968: jis0212<<14 | 0x45<<7 | 0x05,
	38287 - 19968: jis0208<<14 | 0x10<<7 | 0x1B,
	38289 - 19968: jis0208<<14 | 0x13<<7 | 0x36,
	38290 - 19968: jis0208<<14 | 0x5B<<7 | 0x2D,
	38291 - 19968: jis0208<<14 | 0x13<<7 | 0x35,
	38292 - 19968: jis0208<<14 | 0x4E<<7 | 0x3B,
	38294 - 19968: jis0208<<14 | 0x4E<<7 | 0x3C,
	38296 - 19968: jis0208<<14 | 0x4E<<7 | 0x3D,
	38297 - 19968: jis0208<<14 | 0x4E<<7 | 0x3E,
	38301 - 19968: jis0212<<14 | 0x45<<7 | 0x06,
	38302 - 19968: jis0212<<14 | 0x45<<7 | 0x07,
	38303 - 19968: jis0212<<14 | 0x45<<7 | 0x08,
	38304 - 19968: jis0208<<14 | 0x4E<<7 | 0x3F,
	38305 - 19968: jis0212<<14 | 0x45<<7 | 0x09,
	38306 - 19968: jis0208<<14 | 0x13<<7 | 0x37,
	38307 - 19968: jis0208<<14 | 0x12<<7 | 0x34,
	38308 - 19968: jis0208<<14 | 0x18<<7 | 0x3D,
	38309 - 19968: jis0208<<14 | 0x27<<7 | 0x15,
	38310 - 19968: jis0212<<14 | 0x45<<7 | 0x0A,
	38311 - 19968: jis0208<<14 | 0x4E<<7 | 0x41,
	38312 - 19968: jis0208<<14 | 0x4E<<7 | 0x40,
	38313 - 19968: jis0212<<14 | 0x45<<7 | 0x0B,
	38315 - 19968: jis0212<<14 | 0x45<<7 | 0x0C,
	38316 - 19968: jis0212<<14 | 0x45<<7 | 0x0D,
	38317 - 19968: jis0208<<14 | 0x4E<<7 | 0x42,
	38322 - 19968: jis0208<<14 | 0x10<<7 | 0x3B,
	38324 - 19968: jis0212<<14 | 0x45<<7 | 0x0E,
	38326 - 19968: jis0212<<14 | 0x45<<7 | 0x0F,
	38329 - 19968: jis0208<<14 | 0x4E<<7 | 0x45,
	38330 - 19968: jis0212<<14 | 0x45<<7 | 0x10,
	38331 - 19968: jis0208<<14 | 0x4E<<7 | 0x44,
	38332 - 19968: jis0208<<14 | 0x4E<<7 | 0x43,
	38333 - 19968: jis0212<<14 | 0x45<<7 | 0x11,
	38334 - 19968: jis0208<<14 | 0x4E<<7 | 0x46,
	38335 - 19968: jis0212<<14 | 0x45<<7 | 0x12,
	38339 - 19968: jis0208<<14 | 0x4E<<7 | 0x49,
	38342 - 19968: jis0212<<14 | 0x45<<7 | 0x13,
	38343 - 19968: jis0208<<14 | 0x0F<<7 | 0x26,
	38344 - 19968: jis0212<<14 | 0x45<<7 | 0x14,
	38345 - 19968: jis0212<<14 | 0x45<<7 | 0x15,
	38346 - 19968: jis0208<<14 | 0x4E<<7 | 0x47,
	38347 - 19968: jis0212<<14 | 0x45<<7 | 0x16,
	38348 - 19968: jis0208<<14 | 0x4E<<7 | 0x4B,
	38349 - 19968: jis0208<<14 | 0x4E<<7 | 0x4A,
	38352 - 19968: jis0212<<14 | 0x45<<7 | 0x17,
	38353 - 19968: jis0212<<14 | 0x45<<7 | 0x18,
	38354 - 19968: jis0212<<14 | 0x45<<7 | 0x19,
	38355 - 19968: jis0212<<14 | 0x45<<7 | 0x1A,
	38356 - 19968: jis0208<<14 | 0x4E<<7 | 0x4D,
	38357 - 19968: jis0208<<14 | 0x4E<<7 | 0x4C,
	38358 - 19968: jis0208<<14 | 0x4E<<7 | 0x4E,
	38360 - 19968: jis0208<<14 | 0x25<<7 | 0x0D,
	38361 - 19968: jis0212<<14 | 0x45<<7 | 0x1B,
	38362 - 19968: jis0212<<14 | 0x45<<7 | 0x1C,
	38364 - 19968: jis0208<<14 | 0x4E<<7 | 0x4F,
	38365 - 19968: jis0212<<14 | 0x45<<7 | 0x1D,
	38366 - 19968: jis0212<<14 | 0x45<<7 | 0x1E,
	38367 - 19968: jis0212<<14 | 0x45<<7 | 0x1F,
	38368 - 19968: jis0212<<14 | 0x45<<7 | 0x20,
	38369 - 19968: jis0208<<14 | 0x4E<<7 | 0x50,
	38370 - 19968: jis0208<<14 | 0x4E<<7 | 0x52,
	38372 - 19968: jis0212<<14 | 0x45<<7 | 0x21,
	38373 - 19968: jis0208<<14 | 0x4E<<7 | 0x51,
	38374 - 19968: jis0212<<14 | 0x45<<7 | 0x22,
	38428 - 19968: jis0208<<14 | 0x28<<7 | 0x4B,
	38429 - 19968: jis0212<<14 | 0x45<<7 | 0x23,
	38430 - 19968: jis0212<<14 | 0x45<<7 | 0x24,
	38433 - 19968: jis0208<<14 | 0x4E<<7 | 0x53,
	38434 - 19968: jis0212<<14 | 0x45<<7 | 0x25,
	38436 - 19968: jis0212<<14 | 0x45<<7 | 0x26,
	38437 - 19968: jis0212<<14 | 0x45<<7 | 0x27,
	38438 - 19968: jis0212<<14 | 0x45<<7 | 0x28,
	38440 - 19968: jis0208<<14 | 0x4E<<7 | 0x54,
	38442 - 19968: jis0208<<14 | 0x19<<7 | 0x44,
	38444 - 19968: jis0212<<14 | 0x45<<7 | 0x29,
	38446 - 19968: jis0208<<14 | 0x4E<<7 | 0x55,
	38447 - 19968: jis0208<<14 | 0x4E<<7 | 0x56,
	38449 - 19968: jis0212<<14 | 0x45<<7 | 0x2A,
	38450 - 19968: jis0208<<14 | 0x2A<<7 | 0x28,
	38451 - 19968: jis0212<<14 | 0x45<<7 | 0x2B,
	38455 - 19968: jis0212<<14 | 0x45<<7 | 0x2C,
	38456 - 19968: jis0212<<14 | 0x45<<7 | 0x2D,
	38457 - 19968: jis0212<<14 | 0x45<<7 | 0x2E,
	38458 - 19968: jis0212<<14 | 0x45<<7 | 0x2F,
	38459 - 19968: jis0208<<14 | 0x20<<7 | 0x2A,
	38460 - 19968: jis0212<<14 | 0x45<<7 | 0x30,
	38461 - 19968: jis0212<<14 | 0x45<<7 | 0x31,
	38463 - 19968: jis0208<<14 | 0x0F<<7 | 0x03,
	38464 - 19968: jis0208<<14 | 0x21<<7 | 0x2A,
	38465 - 19968: jis0212<<14 | 0x45<<7 | 0x32,
	38466 - 19968: jis0208<<14 | 0x4E<<7 | 0x57,
	38468 - 19968: jis0208<<14 | 0x28<<7 | 0x4C,
	38475 - 19968: jis0208<<14 | 0x4E<<7 | 0x5A,
	38476 - 19968: jis0208<<14 | 0x4E<<7 | 0x58,
	38477 - 19968: jis0208<<14 | 0x18<<7 | 0x3E,
	38479 - 19968: jis0208<<14 | 0x4E<<7 | 0x59,
	38480 - 19968: jis0208<<14 | 0x17<<7 | 0x21,
	38482 - 19968: jis0212<<14 | 0x45<<7 | 0x33,
	38484 - 19968: jis0212<<14 | 0x45<<7 | 0x34,
	38486 - 19968: jis0212<<14 | 0x45<<7 | 0x35,
	38487 - 19968: jis0212<<14 | 0x45<<7 | 0x36,
	38488 - 19968: jis0212<<14 | 0x45<<7 | 0x37,
	38491 - 19968: jis0208<<14 | 0x29<<7 | 0x24,
	38492 - 19968: jis0208<<14 | 0x4E<<7 | 0x5C,
	38493 - 19968: jis0208<<14 | 0x4F<<7 | 0x00,
	38494 - 19968: jis0208<<14 | 0x4E<<7 | 0x5D,
	38495 - 19968: jis0208<<14 | 0x4F<<7 | 0x01,
	38497 - 19968: jis0212<<14 | 0x45<<7 | 0x38,
	38498 - 19968: jis0208<<14 | 0x10<<7 | 0x00,
	38499 - 19968: jis0208<<14 | 0x1E<<7 | 0x37,
	38500 - 19968: jis0208<<14 | 0x1C<<7 | 0x5B,
	38501 - 19968: jis0208<<14 | 0x13<<7 | 0x38,
	38502 - 19968: jis0208<<14 | 0x4F<<7 | 0x02,
	38506 - 19968: jis0208<<14 | 0x26<<7 | 0x45,
	38508 - 19968: jis0208<<14 | 0x4F<<7 | 0x04,
	38510 - 19968: jis0212<<14 | 0x45<<7 | 0x39,
	38512 - 19968: jis0208<<14 | 0x10<<7 | 0x01,
	38514 - 19968: jis0208<<14 | 0x4F<<7 | 0x03,
	38515 - 19968: jis0208<<14 | 0x23<<7 | 0x23,
	38516 - 19968: jis0212<<14 | 0x45<<7 | 0x3A,
	38517 - 19968: jis0208<<14 | 0x2D<<7 | 0x2C,
	38518 - 19968: jis0208<<14 | 0x25<<7 | 0x0A,
	38519 - 19968: jis0208<<14 | 0x4E<<7 | 0x5B,
	38520 - 19968: jis0208<<14 | 0x2D<<7 | 0x05,
	38522 - 19968: jis0208<<14 | 0x17<<7 | 0x10,
	38523 - 19968: jis0212<<14 | 0x45<<7 | 0x3B,
	38524 - 19968: jis0212<<14 | 0x45<<7 | 0x3C,
	38525 - 19968: jis0208<<14 | 0x2C<<7 | 0x3A,
	38526 - 19968: jis0212<<14 | 0x45<<7 | 0x3D,
	38527 - 19968: jis0212<<14 | 0x45<<7 | 0x3E,
	38529 - 19968: jis0212<<14 | 0x45<<7 | 0x3F,
	38530 - 19968: jis0212<<14 | 0x45<<7 | 0x40,
	38531 - 19968: jis0212<<14 | 0x45<<7 | 0x41,
	38532 - 19968: jis0212<<14 | 0x45<<7 | 0x42,
	38533 - 19968: jis0208<<14 | 0x15<<7 | 0x58,
	38534 - 19968: jis0208<<14 | 0x2D<<7 | 0x13,
	38536 - 19968: jis0208<<14 | 0x16<<7 | 0x07,
	38537 - 19968: jis0212<<14 | 0x45<<7 | 0x43,
	38538 - 19968: jis0208<<14 | 0x21<<7 | 0x41,
	38539 - 19968: jis0208<<14 | 0x46<<7 | 0x00,
	38541 - 19968: jis0208<<14 | 0x4F<<7 | 0x05,
	38542 - 19968: jis0208<<14 | 0x12<<7 | 0x0B,
	38543 - 19968: jis0208<<14 | 0x1E<<7 | 0x4E,
	38545 - 19968: jis0212<<14 | 0x45<<7 | 0x44,
	38548 - 19968: jis0208<<14 | 0x12<<7 | 0x35,
	38549 - 19968: jis0208<<14 | 0x4F<<7 | 0x07,
	38550 - 19968: jis0212<<14 | 0x45<<7 | 0x45,
	38551 - 19968: jis0208<<14 | 0x4F<<7 | 0x08,
	38552 - 19968: jis0208<<14 | 0x4F<<7 | 0x06,
	38553 - 19968: jis0208<<14 | 0x16<<7 | 0x43,
	38554 - 19968: jis0212<<14 | 0x45<<7 | 0x46,
	38555 - 19968: jis0208<<14 | 0x19<<7 | 0x3C,
	38556 - 19968: jis0208<<14 | 0x1D<<7 | 0x42,
	38557 - 19968: jis0208<<14 | 0x5B<<7 | 0x30,
	38559 - 19968: jis0212<<14 | 0x45<<7 | 0x48,
	38560 - 19968: jis0208<<14 | 0x10<<7 | 0x02,
	38563 - 19968: jis0208<<14 | 0x2D<<7 | 0x38,
	38564 - 19968: jis0212<<14 | 0x45<<7 | 0x49,
	38565 - 19968: jis0212<<14 | 0x45<<7 | 0x4A,
	38566 - 19968: jis0212<<14 | 0x45<<7 | 0x4B,
	38567 - 19968: jis0208<<14 | 0x4F<<7 | 0x0A,
	38568 - 19968: jis0208<<14 | 0x4D<<7 | 0x0D,
	38569 - 19968: jis0212<<14 | 0x45<<7 | 0x4C,
	38570 - 19968: jis0208<<14 | 0x4F<<7 | 0x09,
	38574 - 19968: jis0212<<14 | 0x45<<7 | 0x4D,
	38575 - 19968: jis0208<<14 | 0x5B<<7 | 0x31,
	38576 - 19968: jis0208<<14 | 0x4F<<7 | 0x0D,
	38577 - 19968: jis0208<<14 | 0x4F<<7 | 0x0B,
	38578 - 19968: jis0208<<14 | 0x4F<<7 | 0x0C,
	38579 - 19968: jis0212<<14 | 0x45<<7 | 0x4F,
	38580 - 19968: jis0208<<14 | 0x4F<<7 | 0x0E,
	38582 - 19968: jis0208<<14 | 0x4F<<7 | 0x0F,
	38583 - 19968: jis0208<<14 | 0x2D<<7 | 0x4B,
	38584 - 19968: jis0208<<14 | 0x4F<<7 | 0x10,
	38585 - 19968: jis0208<<14 | 0x4F<<7 | 0x11,
	38586 - 19968: jis0212<<14 | 0x45<<7 | 0x50,
	38587 - 19968: jis0208<<14 | 0x1F<<7 | 0x28,
	38588 - 19968: jis0208<<14 | 0x27<<7 | 0x1A,
	38592 - 19968: jis0208<<14 | 0x1E<<7 | 0x5C,
	38593 - 19968: jis0208<<14 | 0x13<<7 | 0x46,
	38596 - 19968: jis0208<<14 | 0x2C<<7 | 0x19,
	38597 - 19968: jis0208<<14 | 0x11<<7 | 0x4C,
	38598 - 19968: jis0208<<14 | 0x1C<<7 | 0x17,
	38599 - 19968: jis0208<<14 | 0x17<<7 | 0x3A,
	38601 - 19968: jis0208<<14 | 0x4F<<7 | 0x14,
	38602 - 19968: jis0212<<14 | 0x45<<7 | 0x51,
	38603 - 19968: jis0208<<14 | 0x4F<<7 | 0x13,
	38604 - 19968: jis0208<<14 | 0x1A<<7 | 0x52,
	38605 - 19968: jis0208<<14 | 0x4F<<7 | 0x15,
	38606 - 19968: jis0208<<14 | 0x4F<<7 | 0x12,
	38609 - 19968: jis0208<<14 | 0x1A<<7 | 0x07,
	38610 - 19968: jis0212<<14 | 0x45<<7 | 0x52,
	38613 - 19968: jis0208<<14 | 0x4F<<7 | 0x19,
	38614 - 19968: jis0208<<14 | 0x49<<7 | 0x0C,
	38616 - 19968: jis0212<<14 | 0x45<<7 | 0x54,
	38617 - 19968: jis0208<<14 | 0x31<<7 | 0x35,
	38618 - 19968: jis0212<<14 | 0x45<<7 | 0x55,
	38619 - 19968: jis0208<<14 | 0x1E<<7 | 0x56,
	38620 - 19968: jis0208<<14 | 0x4F<<7 | 0x17,
	38621 - 19968: jis0212<<14 | 0x45<<7 | 0x56,
	38622 - 19968: jis0212<<14 | 0x45<<7 | 0x57,
	38623 - 19968: jis0212<<14 | 0x45<<7 | 0x58,
	38626 - 19968: jis0208<<14 | 0x2D<<7 | 0x04,
	38627 - 19968: jis0208<<14 | 0x25<<7 | 0x50,
	38632 - 19968: jis0208<<14 | 0x10<<7 | 0x0A,
	38633 - 19968: jis0212<<14 | 0x45<<7 | 0x59,
	38634 - 19968: jis0208<<14 | 0x1F<<7 | 0x42,
	38635 - 19968: jis0208<<14 | 0x1B<<7 | 0x15,
	38639 - 19968: jis0212<<14 | 0x45<<7 | 0x5A,
	38640 - 19968: jis0208<<14 | 0x29<<7 | 0x16,
	38641 - 19968: jis0212<<14 | 0x45<<7 | 0x5B,
	38642 - 19968: jis0208<<14 | 0x10<<7 | 0x1F,
	38646 - 19968: jis0208<<14 | 0x2D<<7 | 0x4C,
	38647 - 19968: jis0208<<14 | 0x2C<<7 | 0x4A,
	38649 - 19968: jis0208<<14 | 0x4F<<7 | 0x1A,
	38650 - 19968: jis0212<<14 | 0x45<<7 | 0x5C,
	38651 - 19968: jis0208<<14 | 0x24<<7 | 0x24,
	38656 - 19968: jis0208<<14 | 0x1B<<7 | 0x5A,
	38658 - 19968: jis0212<<14 | 0x45<<7 | 0x5D,
	38659 - 19968: jis0212<<14 | 0x46<<7 | 0x00,
	38660 - 19968: jis0208<<14 | 0x4F<<7 | 0x1B,
	38661 - 19968: jis0212<<14 | 0x46<<7 | 0x01,
	38662 - 19968: jis0208<<14 | 0x4F<<7 | 0x1C,
	38663 - 19968: jis0208<<14 | 0x1E<<7 | 0x2B,
	38664 - 19968: jis0208<<14 | 0x4F<<7 | 0x1D,
	38665 - 19968: jis0212<<14 | 0x46<<7 | 0x02,
	38666 - 19968: jis0208<<14 | 0x2D<<7 | 0x4D,
	38669 - 19968: jis0208<<14 | 0x4F<<7 | 0x18,
	38670 - 19968: jis0208<<14 | 0x4F<<7 | 0x1F,
	38671 - 19968: jis0208<<14 | 0x4F<<7 | 0x21,
	38673 - 19968: jis0208<<14 | 0x4F<<7 | 0x20,
	38675 - 19968: jis0208<<14 | 0x4F<<7 | 0x1E,
	38678 - 19968: jis0208<<14 | 0x4F<<7 | 0x22,
	38681 - 19968: jis0208<<14 | 0x4F<<7 | 0x23,
	38682 - 19968: jis0212<<14 | 0x46<<7 | 0x03,
	38683 - 19968: jis0212<<14 | 0x46<<7 | 0x04,
	38684 - 19968: jis0208<<14 | 0x20<<7 | 0x59,
	38685 - 19968: jis0212<<14 | 0x46<<7 | 0x05,
	38686 - 19968: jis0208<<14 | 0x11<<7 | 0x41,
	38689 - 19968: jis0212<<14 | 0x46<<7 | 0x06,
	38690 - 19968: jis0212<<14 | 0x46<<7 | 0x07,
	38691 - 19968: jis0212<<14 | 0x46<<7 | 0x08,
	38692 - 19968: jis0208<<14 | 0x4F<<7 | 0x24,
	38695 - 19968: jis0208<<14 | 0x2B<<7 | 0x17,
	38696 - 19968: jis0212<<14 | 0x46<<7 | 0x09,
	38698 - 19968: jis0208<<14 | 0x4F<<7 | 0x25,
	38704 - 19968: jis0208<<14 | 0x4F<<7 | 0x26,
	38705 - 19968: jis0212<<14 | 0x46<<7 | 0x0A,
	38706 - 19968: jis0208<<14 | 0x2E<<7 | 0x09,
	38707 - 19968: jis0208<<14 | 0x5B<<7 | 0x32,
	38712 - 19968: jis0208<<14 | 0x3A<<7 | 0x10,
	38713 - 19968: jis0208<<14 | 0x4F<<7 | 0x27,
	38715 - 19968: jis0208<<14 | 0x5B<<7 | 0x33,
	38717 - 19968: jis0208<<14 | 0x4F<<7 | 0x28,
	38718 - 19968: jis0208<<14 | 0x4F<<7 | 0x29,
	38721 - 19968: jis0212<<14 | 0x46<<7 | 0x0C,
	38722 - 19968: jis0208<<14 | 0x4F<<7 | 0x2D,
	38723 - 19968: jis0208<<14 | 0x5B<<7 | 0x34,
	38724 - 19968: jis0208<<14 | 0x4F<<7 | 0x2A,
	38726 - 19968: jis0208<<14 | 0x4F<<7 | 0x2B,
	38728 - 19968: jis0208<<14 | 0x4F<<7 | 0x2C,
	38729 - 19968: jis0208<<14 | 0x4F<<7 | 0x2E,
	38730 - 19968: jis0212<<14 | 0x46<<7 | 0x0E,
	38733 - 19968: jis0208<<14 | 0x5B<<7 | 0x35,
	38734 - 19968: jis0212<<14 | 0x46<<7 | 0x0F,
	38735 - 19968: jis0208<<14 | 0x5B<<7 | 0x36,
	38737 - 19968: jis0208<<14 | 0x5B<<7 | 0x37,
	38738 - 19968: jis0208<<14 | 0x1F<<7 | 0x23,
	38741 - 19968: jis0208<<14 | 0x5B<<7 | 0x38,
	38742 - 19968: jis0208<<14 | 0x2B<<7 | 0x56,
	38743 - 19968: jis0212<<14 | 0x46<<7 | 0x12,
	38744 - 19968: jis0212<<14 | 0x46<<7 | 0x13,
	38745 - 19968: jis0208<<14 | 0x1F<<7 | 0x24,
	38746 - 19968: jis0212<<14 | 0x46<<7 | 0x14,
	38747 - 19968: jis0212<<14 | 0x46<<7 | 0x15,
	38748 - 19968: jis0208<<14 | 0x4F<<7 | 0x2F,
	38750 - 19968: jis0208<<14 | 0x27<<7 | 0x52,
	38752 - 19968: jis0208<<14 | 0x4F<<7 | 0x30,
	38753 - 19968: jis0208<<14 | 0x52<<7 | 0x32,
	38754 - 19968: jis0208<<14 | 0x2B<<7 | 0x2B,
	38755 - 19968: jis0212<<14 | 0x46<<7 | 0x16,
	38756 - 19968: jis0208<<14 | 0x4F<<7 | 0x31,
	38758 - 19968: jis0208<<14 | 0x4F<<7 | 0x32,
	38759 - 19968: jis0212<<14 | 0x46<<7 | 0x17,
	38760 - 19968: jis0208<<14 | 0x4F<<7 | 0x33,
	38761 - 19968: jis0208<<14 | 0x12<<7 | 0x36,
	38762 - 19968: jis0212<<14 | 0x46<<7 | 0x18,
	38763 - 19968: jis0208<<14 | 0x4F<<7 | 0x35,
	38765 - 19968: jis0208<<14 | 0x1E<<7 | 0x38,
	38766 - 19968: jis0212<<14 | 0x46<<7 | 0x19,
	38769 - 19968: jis0208<<14 | 0x4F<<7 | 0x36,
	38771 - 19968: jis0212<<14 | 0x46<<7 | 0x1A,
	38772 - 19968: jis0208<<14 | 0x16<<7 | 0x03,
	38774 - 19968: jis0212<<14 | 0x46<<7 | 0x1B,
	38775 - 19968: jis0212<<14 | 0x46<<7 | 0x1C,
	38776 - 19968: jis0212<<14 | 0x46<<7 | 0x1D,
	38777 - 19968: jis0208<<14 | 0x4F<<7 | 0x37,
	38778 - 19968: jis0208<<14 | 0x4F<<7 | 0x3B,
	38779 - 19968: jis0212<<14 | 0x46<<7 | 0x1E,
	38780 - 19968: jis0208<<14 | 0x4F<<7 | 0x39,
	38781 - 19968: jis0212<<14 | 0x46<<7 | 0x1F,
	38783 - 19968: jis0212<<14 | 0x46<<7 | 0x20,
	38784 - 19968: jis0212<<14 | 0x46<<7 | 0x21,
	38785 - 19968: jis0208<<14 | 0x4F<<7 | 0x3A,
	38788 - 19968: jis0208<<14 | 0x12<<7 | 0x52,
	38789 - 19968: jis0208<<14 | 0x4F<<7 | 0x38,
	38790 - 19968: jis0208<<14 | 0x4F<<7 | 0x3C,
	38793 - 19968: jis0212<<14 | 0x46<<7 | 0x22,
	38795 - 19968: jis0208<<14 | 0x4F<<7 | 0x3D,
	38797 - 19968: jis0208<<14 | 0x0F<<7 | 0x27,
	38799 - 19968: jis0208<<14 | 0x4F<<7 | 0x3E,
	38800 - 19968: jis0208<<14 | 0x4F<<7 | 0x3F,
	38805 - 19968: jis0212<<14 | 0x46<<7 | 0x23,
	38806 - 19968: jis0212<<14 | 0x46<<7 | 0x24,
	38807 - 19968: jis0212<<14 | 0x46<<7 | 0x25,
	38808 - 19968: jis0208<<14 | 0x1D<<7 | 0x43,
	38809 - 19968: jis0212<<14 | 0x46<<7 | 0x26,
	38810 - 19968: jis0212<<14 | 0x46<<7 | 0x27,
	38812 - 19968: jis0208<<14 | 0x4F<<7 | 0x40,
	38814 - 19968: jis0212<<14 | 0x46<<7 | 0x28,
	38815 - 19968: jis0212<<14 | 0x46<<7 | 0x29,
	38816 - 19968: jis0208<<14 | 0x14<<7 | 0x26,
	38818 - 19968: jis0212<<14 | 0x46<<7 | 0x2A,
	38819 - 19968: jis0208<<14 | 0x4F<<7 | 0x43,
	38822 - 19968: jis0208<<14 | 0x4F<<7 | 0x42,
	38824 - 19968: jis0208<<14 | 0x4F<<7 | 0x41,
	38827 - 19968: jis0208<<14 | 0x4A<<7 | 0x50,
	38828 - 19968: jis0212<<14 | 0x46<<7 | 0x2B,
	38829 - 19968: jis0208<<14 | 0x29<<7 | 0x3B,
	38830 - 19968: jis0212<<14 | 0x46<<7 | 0x2C,
	38833 - 19968: jis0212<<14 | 0x46<<7 | 0x2D,
	38834 - 19968: jis0212<<14 | 0x46<<7 | 0x2E,
	38835 - 19968: jis0208<<14 | 0x4F<<7 | 0x44,
	38836 - 19968: jis0208<<14 | 0x4F<<7 | 0x45,
	38837 - 19968: jis0212<<14 | 0x46<<7 | 0x2F,
	38838 - 19968: jis0212<<14 | 0x46<<7 | 0x30,
	38840 - 19968: jis0212<<14 | 0x46<<7 | 0x31,
	38841 - 19968: jis0212<<14 | 0x46<<7 | 0x32,
	38842 - 19968: jis0212<<14 | 0x46<<7 | 0x33,
	38844 - 19968: jis0212<<14 | 0x46<<7 | 0x34,
	38846 - 19968: jis0212<<14 | 0x46<<7 | 0x35,
	38847 - 19968: jis0212<<14 | 0x46<<7 | 0x36,
	38849 - 19968: jis0212<<14 | 0x46<<7 | 0x37,
	38851 - 19968: jis0208<<14 | 0x4F<<7 | 0x46,
	38852 - 19968: jis0212<<14 | 0x46<<7 | 0x38,
	38853 - 19968: jis0212<<14 | 0x46<<7 | 0x39,
	38854 - 19968: jis0208<<14 | 0x4F<<7 | 0x47,
	38855 - 19968: jis0212<<14 | 0x46<<7 | 0x3A,
	38856 - 19968: jis0208<<14 | 0x4F<<7 | 0x48,
	38857 - 19968: jis0212<<14 | 0x46<<7 | 0x3B,
	38858 - 19968: jis0212<<14 | 0x46<<7 | 0x3C,
	38859 - 19968: jis0208<<14 | 0x4F<<7 | 0x49,
	38860 - 19968: jis0212<<14 | 0x46<<7 | 0x3D,
	38861 - 19968: jis0212<<14 | 0x46<<7 | 0x3E,
	38862 - 19968: jis0212<<14 | 0x46<<7 | 0x3F,
	38864 - 19968: jis0212<<14 | 0x46<<7 | 0x40,
	38865 - 19968: jis0212<<14 | 0x46<<7 | 0x41,
	38867 - 19968: jis0208<<14 | 0x13<<7 | 0x39,
	38868 - 19968: jis0212<<14 | 0x46<<7 | 0x42,
	38871 - 19968: jis0212<<14 | 0x46<<7 | 0x43,
	38872 - 19968: jis0212<<14 | 0x46<<7 | 0x44,
	38873 - 19968: jis0212<<14 | 0x46<<7 | 0x45,
	38875 - 19968: jis0212<<14 | 0x46<<7 | 0x49,
	38876 - 19968: jis0208<<14 | 0x4F<<7 | 0x4A,
	38877 - 19968: jis0212<<14 | 0x46<<7 | 0x46,
	38878 - 19968: jis0212<<14 | 0x46<<7 | 0x47,
	38880 - 19968: jis0212<<14 | 0x46<<7 | 0x48,
	38881 - 19968: jis0212<<14 | 0x46<<7 | 0x4A,
	38884 - 19968: jis0212<<14 | 0x46<<7 | 0x4B,
	38893 - 19968: jis0208<<14 | 0x4F<<7 | 0x4B,
	38894 - 19968: jis0208<<14 | 0x26<<7 | 0x02,
	38895 - 19968: jis0212<<14 | 0x46<<7 | 0x4C,
	38897 - 19968: jis0212<<14 | 0x46<<7 | 0x4D,
	38898 - 19968: jis0208<<14 | 0x4F<<7 | 0x4D,
	38899 - 19968: jis0208<<14 | 0x11<<7 | 0x1A,
	38900 - 19968: jis0212<<14 | 0x46<<7 | 0x4E,
	38901 - 19968: jis0208<<14 | 0x4F<<7 | 0x50,
	38902 - 19968: jis0208<<14 | 0x4F<<7 | 0x4F,
	38903 - 19968: jis0212<<14 | 0x46<<7 | 0x4F,
	38904 - 19968: jis0212<<14 | 0x46<<7 | 0x50,
	38906 - 19968: jis0212<<14 | 0x46<<7 | 0x51,
	38907 - 19968: jis0208<<14 | 0x10<<7 | 0x03,
	38911 - 19968: jis0208<<14 | 0x15<<7 | 0x20,
	38913 - 19968: jis0208<<14 | 0x29<<7 | 0x26,
	38914 - 19968: jis0208<<14 | 0x23<<7 | 0x19,
	38915 - 19968: jis0208<<14 | 0x19<<7 | 0x01,
	38917 - 19968: jis0208<<14 | 0x18<<7 | 0x3F,
	38918 - 19968: jis0208<<14 | 0x1C<<7 | 0x46,
	38919 - 19968: jis0212<<14 | 0x46<<7 | 0x52,
	38920 - 19968: jis0208<<14 | 0x1E<<7 | 0x3B,
	38922 - 19968: jis0212<<14 | 0x46<<7 | 0x53,
	38924 - 19968: jis0208<<14 | 0x4F<<7 | 0x52,
	38925 - 19968: jis0212<<14 | 0x46<<7 | 0x55,
	38926 - 19968: jis0212<<14 | 0x46<<7 | 0x56,
	38927 - 19968: jis0208<<14 | 0x4F<<7 | 0x51,
	38928 - 19968: jis0208<<14 | 0x2C<<7 | 0x21,
	38929 - 19968: jis0208<<14 | 0x13<<7 | 0x47,
	38930 - 19968: jis0208<<14 | 0x27<<7 | 0x31,
	38931 - 19968: jis0208<<14 | 0x25<<7 | 0x3B,
	38932 - 19968: jis0212<<14 | 0x46<<7 | 0x57,
	38934 - 19968: jis0212<<14 | 0x46<<7 | 0x58,
	38935 - 19968: jis0208<<14 | 0x1E<<7 | 0x5B,
	38936 - 19968: jis0208<<14 | 0x2D<<7 | 0x2D,
	38937 - 19968: jis0212<<14 | 0x46<<7 | 0x54,
	38938 - 19968: jis0208<<14 | 0x16<<7 | 0x3A,
	38940 - 19968: jis0212<<14 | 0x46<<7 | 0x59,
	38942 - 19968: jis0212<<14 | 0x46<<7 | 0x5A,
	38944 - 19968: jis0212<<14 | 0x46<<7 | 0x5B,
	38945 - 19968: jis0208<<14 | 0x4F<<7 | 0x55,
	38947 - 19968: jis0212<<14 | 0x46<<7 | 0x5C,
	38948 - 19968: jis0208<<14 | 0x4F<<7 | 0x54,
	38949 - 19968: jis0212<<14 | 0x47<<7 | 0x07,
	38950 - 19968: jis0212<<14 | 0x46<<7 | 0x5D,
	38955 - 19968: jis0212<<14 | 0x47<<7 | 0x00,
	38956 - 19968: jis0208<<14 | 0x2A<<7 | 0x2A,
	38957 - 19968: jis0208<<14 | 0x25<<7 | 0x0B,
	38958 - 19968: jis0212<<14 | 0x47<<7 | 0x01,
	38959 - 19968: jis0212<<14 | 0x47<<7 | 0x02,
	38960 - 19968: jis0212<<14 | 0x47<<7 | 0x03,
	38962 - 19968: jis0212<<14 | 0x47<<7 | 0x04,
	38963 - 19968: jis0212<<14 | 0x47<<7 | 0x05,
	38964 - 19968: jis0208<<14 | 0x10<<7 | 0x2F,
	38965 - 19968: jis0212<<14 | 0x47<<7 | 0x06,
	38967 - 19968: jis0208<<14 | 0x4F<<7 | 0x56,
	38968 - 19968: jis0208<<14 | 0x4F<<7 | 0x53,
	38971 - 19968: jis0208<<14 | 0x28<<7 | 0x30,
	38972 - 19968: jis0208<<14 | 0x2C<<7 | 0x49,
	38973 - 19968: jis0208<<14 | 0x4F<<7 | 0x57,
	38974 - 19968: jis0212<<14 | 0x47<<7 | 0x08,
	38980 - 19968: jis0212<<14 | 0x47<<7 | 0x09,
	38982 - 19968: jis0208<<14 | 0x4F<<7 | 0x58,
	38983 - 19968: jis0212<<14 | 0x47<<7 | 0x0A,
	38986 - 19968: jis0212<<14 | 0x47<<7 | 0x0B,
	38987 - 19968: jis0208<<14 | 0x4F<<7 | 0x5A,
	38988 - 19968: jis0208<<14 | 0x21<<7 | 0x49,
	38989 - 19968: jis0208<<14 | 0x12<<7 | 0x3A,
	38990 - 19968: jis0208<<14 | 0x12<<7 | 0x3B,
	38991 - 19968: jis0208<<14 | 0x4F<<7 | 0x59,
	38993 - 19968: jis0212<<14 | 0x47<<7 | 0x0C,
	38994 - 19968: jis0212<<14 | 0x47<<7 | 0x0D,
	38995 - 19968: jis0212<<14 | 0x47<<7 | 0x0E,
	38996 - 19968: jis0208<<14 | 0x13<<7 | 0x48,
	38997 - 19968: jis0208<<14 | 0x17<<7 | 0x11,
	38998 - 19968: jis0212<<14 | 0x47<<7 | 0x0F,
	38999 - 19968: jis0208<<14 | 0x5B<<7 | 0x39,
	39000 - 19968: jis0208<<14 | 0x13<<7 | 0x49,
	39001 - 19968: jis0212<<14 | 0x47<<7 | 0x11,
	39002 - 19968: jis0212<<14 | 0x47<<7 | 0x12,
	39003 - 19968: jis0208<<14 | 0x24<<7 | 0x1E,
	39006 - 19968: jis0208<<14 | 0x2D<<7 | 0x3F,
	39010 - 19968: jis0212<<14 | 0x47<<7 | 0x13,
	39011 - 19968: jis0212<<14 | 0x47<<7 | 0x14,
	39013 - 19968: jis0208<<14 | 0x5B<<7 | 0x3A,
	39014 - 19968: jis0212<<14 | 0x47<<7 | 0x16,
	39015 - 19968: jis0208<<14 | 0x17<<7 | 0x3B,
	39018 - 19968: jis0212<<14 | 0x47<<7 | 0x17,
	39019 - 19968: jis0208<<14 | 0x4F<<7 | 0x5B,
	39020 - 19968: jis0212<<14 | 0x47<<7 | 0x18,
	39023 - 19968: jis0208<<14 | 0x4F<<7 | 0x5C,
	39024 - 19968: jis0208<<14 | 0x4F<<7 | 0x5D,
	39025 - 19968: jis0208<<14 | 0x50<<7 | 0x00,
	39027 - 19968: jis0208<<14 | 0x50<<7 | 0x02,
	39028 - 19968: jis0208<<14 | 0x50<<7 | 0x01,
	39080 - 19968: jis0208<<14 | 0x28<<7 | 0x56,
	39082 - 19968: jis0208<<14 | 0x50<<7 | 0x03,
	39083 - 19968: jis0212<<14 | 0x47<<7 | 0x19,
	39085 - 19968: jis0212<<14 | 0x47<<7 | 0x1A,
	39086 - 19968: jis0212<<14 | 0x47<<7 | 0x1B,
	39087 - 19968: jis0208<<14 | 0x50<<7 | 0x04,
	39088 - 19968: jis0212<<14 | 0x47<<7 | 0x1C,
	39089 - 19968: jis0208<<14 | 0x50<<7 | 0x05,
	39092 - 19968: jis0212<<14 | 0x47<<7 | 0x1D,
	39094 - 19968: jis0208<<14 | 0x50<<7 | 0x06,
	39095 - 19968: jis0212<<14 | 0x47<<7 | 0x1E,
	39096 - 19968: jis0212<<14 | 0x47<<7 | 0x1F,
	39098 - 19968: jis0212<<14 | 0x47<<7 | 0x20,
	39099 - 19968: jis0212<<14 | 0x47<<7 | 0x21,
	39103 - 19968: jis0212<<14 | 0x47<<7 | 0x22,
	39106 - 19968: jis0212<<14 | 0x47<<7 | 0x23,
	39107 - 19968: jis0208<<14 | 0x50<<7 | 0x08,
	39108 - 19968: jis0208<<14 | 0x50<<7 | 0x07,
	39109 - 19968: jis0212<<14 | 0x47<<7 | 0x24,
	39110 - 19968: jis0208<<14 | 0x50<<7 | 0x09,
	39112 - 19968: jis0212<<14 | 0x47<<7 | 0x25,
	39116 - 19968: jis0212<<14 | 0x47<<7 | 0x26,
	39131 - 19968: jis0208<<14 | 0x27<<7 | 0x53,
	39132 - 19968: jis0208<<14 | 0x45<<7 | 0x2B,
	39135 - 19968: jis0208<<14 | 0x1E<<7 | 0x08,
	39137 - 19968: jis0212<<14 | 0x47<<7 | 0x27,
	39138 - 19968: jis0208<<14 | 0x14<<7 | 0x11,
	39139 - 19968: jis0212<<14 | 0x47<<7 | 0x28,
	39141 - 19968: jis0212<<14 | 0x47<<7 | 0x29,
	39142 - 19968: jis0212<<14 | 0x47<<7 | 0x2A,
	39143 - 19968: jis0212<<14 | 0x47<<7 | 0x2B,
	39145 - 19968: jis0208<<14 | 0x50<<7 | 0x0A,
	39146 - 19968: jis0212<<14 | 0x47<<7 | 0x2C,
	39147 - 19968: jis0208<<14 | 0x50<<7 | 0x0B,
	39149 - 19968: jis0208<<14 | 0x31<<7 | 0x0B,
	39150 - 19968: jis0208<<14 | 0x3C<<7 | 0x1A,
	39151 - 19968: jis0208<<14 | 0x27<<7 | 0x32,
	39154 - 19968: jis0208<<14 | 0x0F<<7 | 0x5A,
	39155 - 19968: jis0212<<14 | 0x47<<7 | 0x2D,
	39156 - 19968: jis0208<<14 | 0x0F<<7 | 0x1A,
	39158 - 19968: jis0212<<14 | 0x47<<7 | 0x2E,
	39164 - 19968: jis0208<<14 | 0x1A<<7 | 0x53,
	39165 - 19968: jis0208<<14 | 0x2A<<7 | 0x0F,
	39166 - 19968: jis0208<<14 | 0x1D<<7 | 0x5D,
	39170 - 19968: jis0212<<14 | 0x47<<7 | 0x2F,
	39171 - 19968: jis0208<<14 | 0x50<<7 | 0x0C,
	39173 - 19968: jis0208<<14 | 0x2B<<7 | 0x3E,
	39175 - 19968: jis0212<<14 | 0x47<<7 | 0x30,
	39176 - 19968: jis0212<<14 | 0x47<<7 | 0x31,
	39177 - 19968: jis0208<<14 | 0x50<<7 | 0x0D,
	39178 - 19968: jis0208<<14 | 0x2C<<7 | 0x3B,
	39180 - 19968: jis0208<<14 | 0x10<<7 | 0x21,
	39184 - 19968: jis0208<<14 | 0x1A<<7 | 0x20,
	39185 - 19968: jis0212<<14 | 0x47<<7 | 0x32,
	39186 - 19968: jis0208<<14 | 0x50<<7 | 0x0E,
	39187 - 19968: jis0208<<14 | 0x11<<7 | 0x4D,
	39188 - 19968: jis0208<<14 | 0x50<<7 | 0x0F,
	39189 - 19968: jis0212<<14 | 0x47<<7 | 0x33,
	39190 - 19968: jis0212<<14 | 0x47<<7 | 0x34,
	39191 - 19968: jis0212<<14 | 0x47<<7 | 0x35,
	39192 - 19968: jis0208<<14 | 0x50<<7 | 0x10,
	39194 - 19968: jis0212<<14 | 0x47<<7 | 0x36,
	39195 - 19968: jis0212<<14 | 0x47<<7 | 0x37,
	39196 - 19968: jis0212<<14 | 0x47<<7 | 0x38,
	39197 - 19968: jis0208<<14 | 0x50<<7 | 0x12,
	39198 - 19968: jis0208<<14 | 0x50<<7 | 0x13,
	39199 - 19968: jis0212<<14 | 0x47<<7 | 0x39,
	39200 - 19968: jis0208<<14 | 0x50<<7 | 0x15,
	39201 - 19968: jis0208<<14 | 0x50<<7 | 0x11,
	39202 - 19968: jis0212<<14 | 0x47<<7 | 0x3A,
	39204 - 19968: jis0208<<14 | 0x50<<7 | 0x14,
	39206 - 19968: jis0212<<14 | 0x47<<7 | 0x3B,
	39207 - 19968: jis0208<<14 | 0x5B<<7 | 0x3D,
	39208 - 19968: jis0208<<14 | 0x13<<7 | 0x3A,
	39211 - 19968: jis0212<<14 | 0x47<<7 | 0x3D,
	39212 - 19968: jis0208<<14 | 0x50<<7 | 0x16,
	39214 - 19968: jis0208<<14 | 0x50<<7 | 0x17,
	39217 - 19968: jis0212<<14 | 0x47<<7 | 0x3E,
	39218 - 19968: jis0212<<14 | 0x47<<7 | 0x3F,
	39219 - 19968: jis0212<<14 | 0x47<<7 | 0x40,
	39220 - 19968: jis0212<<14 | 0x47<<7 | 0x41,
	39221 - 19968: jis0212<<14 | 0x47<<7 | 0x42,
	39225 - 19968: jis0212<<14 | 0x47<<7 | 0x43,
	39226 - 19968: jis0212<<14 | 0x47<<7 | 0x44,
	39227 - 19968: jis0212<<14 | 0x47<<7 | 0x45,
	39228 - 19968: jis0212<<14 | 0x47<<7 | 0x46,
	39229 - 19968: jis0208<<14 | 0x50<<7 | 0x18,
	39230 - 19968: jis0208<<14 | 0x50<<7 | 0x19,
	39232 - 19968: jis0212<<14 | 0x47<<7 | 0x47,
	39233 - 19968: jis0212<<14 | 0x47<<7 | 0x48,
	39234 - 19968: jis0208<<14 | 0x50<<7 | 0x1A,
	39237 - 19968: jis0208<<14 | 0x50<<7 | 0x1C,
	39238 - 19968: jis0212<<14 | 0x47<<7 | 0x49,
	39239 - 19968: jis0212<<14 | 0x47<<7 | 0x4A,
	39240 - 19968: jis0212<<14 | 0x47<<7 | 0x4B,
	39241 - 19968: jis0208<<14 | 0x50<<7 | 0x1B,
	39243 - 19968: jis0208<<14 | 0x50<<7 | 0x1E,
	39244 - 19968: jis0208<<14 | 0x50<<7 | 0x21,
	39245 - 19968: jis0212<<14 | 0x47<<7 | 0x4C,
	39246 - 19968: jis0212<<14 | 0x47<<7 | 0x4D,
	39248 - 19968: jis0208<<14 | 0x50<<7 | 0x1D,
	39249 - 19968: jis0208<<14 | 0x50<<7 | 0x1F,
	39250 - 19968: jis0208<<14 | 0x50<<7 | 0x20,
	39252 - 19968: jis0212<<14 | 0x47<<7 | 0x4E,
	39253 - 19968: jis0208<<14 | 0x50<<7 | 0x22,
	39255 - 19968: jis0208<<14 | 0x15<<7 | 0x21,
	39256 - 19968: jis0212<<14 | 0x47<<7 | 0x4F,
	39257 - 19968: jis0212<<14 | 0x47<<7 | 0x50,
	39259 - 19968: jis0212<<14 | 0x47<<7 | 0x51,
	39260 - 19968: jis0212<<14 | 0x47<<7 | 0x52,
	39262 - 19968: jis0212<<14 | 0x47<<7 | 0x53,
	39263 - 19968: jis0212<<14 | 0x47<<7 | 0x54,
	39264 - 19968: jis0212<<14 | 0x47<<7 | 0x55,
	39318 - 19968: jis0208<<14 | 0x1B<<7 | 0x52,
	39319 - 19968: jis0208<<14 | 0x50<<7 | 0x23,
	39320 - 19968: jis0208<<14 | 0x50<<7 | 0x24,
	39321 - 19968: jis0208<<14 | 0x18<<7 | 0x40,
	39323 - 19968: jis0212<<14 | 0x47<<7 | 0x56,
	39325 - 19968: jis0212<<14 | 0x47<<7 | 0x57,
	39326 - 19968: jis0208<<14 | 0x5B<<7 | 0x3F,
	39327 - 19968: jis0212<<14 | 0x47<<7 | 0x58,
	39333 - 19968: jis0208<<14 | 0x50<<7 | 0x25,
	39334 - 19968: jis0212<<14 | 0x47<<7 | 0x59,
	39336 - 19968: jis0208<<14 | 0x12<<7 | 0x1D,
	39340 - 19968: jis0208<<14 | 0x26<<7 | 0x2E,
	39341 - 19968: jis0208<<14 | 0x50<<7 | 0x26,
	39342 - 19968: jis0208<<14 | 0x50<<7 | 0x27,
	39344 - 19968: jis0212<<14 | 0x47<<7 | 0x5A,
	39345 - 19968: jis0212<<14 | 0x47<<7 | 0x5B,
	39346 - 19968: jis0212<<14 | 0x47<<7 | 0x5C,
	39347 - 19968: jis0208<<14 | 0x22<<7 | 0x39,
	39348 - 19968: jis0208<<14 | 0x25<<7 | 0x4A,
	39349 - 19968: jis0212<<14 | 0x47<<7 | 0x5D,
	39353 - 19968: jis0212<<14 | 0x48<<7 | 0x00,
	39354 - 19968: jis0212<<14 | 0x48<<7 | 0x01,
	39356 - 19968: jis0208<<14 | 0x50<<7 | 0x28,
	39357 - 19968: jis0212<<14 | 0x48<<7 | 0x02,
	39359 - 19968: jis0212<<14 | 0x48<<7 | 0x03,
	39361 - 19968: jis0208<<14 | 0x26<<7 | 0x5C,
	39363 - 19968: jis0212<<14 | 0x48<<7 | 0x04,
	39364 - 19968: jis0208<<14 | 0x21<<7 | 0x2B,
	39365 - 19968: jis0208<<14 | 0x10<<7 | 0x37,
	39366 - 19968: jis0208<<14 | 0x15<<7 | 0x4D,
	39368 - 19968: jis0208<<14 | 0x15<<7 | 0x4E,
	39369 - 19968: jis0212<<14 | 0x48<<7 | 0x05,
	39376 - 19968: jis0208<<14 | 0x22<<7 | 0x52,
	39377 - 19968: jis0208<<14 | 0x50<<7 | 0x2D,
	39378 - 19968: jis0208<<14 | 0x15<<7 | 0x4F,
	39379 - 19968: jis0212<<14 | 0x48<<7 | 0x06,
	39380 - 19968: jis0212<<14 | 0x48<<7 | 0x07,
	39381 - 19968: jis0208<<14 | 0x11<<7 | 0x4E,
	39384 - 19968: jis0208<<14 | 0x50<<7 | 0x2C,
	39385 - 19968: jis0212<<14 | 0x48<<7 | 0x08,
	39386 - 19968: jis0212<<14 | 0x48<<7 | 0x09,
	39387 - 19968: jis0208<<14 | 0x50<<7 | 0x2A,
	39388 - 19968: jis0212<<14 | 0x48<<7 | 0x0A,
	39389 - 19968: jis0208<<14 | 0x50<<7 | 0x2B,
	39390 - 19968: jis0212<<14 | 0x48<<7 | 0x0B,
	39391 - 19968: jis0208<<14 | 0x50<<7 | 0x29,
	39394 - 19968: jis0208<<14 | 0x50<<7 | 0x37,
	39399 - 19968: jis0212<<14 | 0x48<<7 | 0x0C,
	39402 - 19968: jis0212<<14 | 0x48<<7 | 0x0D,
	39403 - 19968: jis0212<<14 | 0x48<<7 | 0x0E,
	39404 - 19968: jis0212<<14 | 0x48<<7 | 0x0F,
	39405 - 19968: jis0208<<14 | 0x50<<7 | 0x2E,
	39406 - 19968: jis0208<<14 | 0x50<<7 | 0x2F,
	39408 - 19968: jis0212<<14 | 0x48<<7 | 0x10,
	39409 - 19968: jis0208<<14 | 0x50<<7 | 0x30,
	39410 - 19968: jis0208<<14 | 0x50<<7 | 0x31,
	39412 - 19968: jis0212<<14 | 0x48<<7 | 0x11,
	39413 - 19968: jis0212<<14 | 0x48<<7 | 0x12,
	39416 - 19968: jis0208<<14 | 0x50<<7 | 0x33,
	39417 - 19968: jis0212<<14 | 0x48<<7 | 0x13,
	39419 - 19968: jis0208<<14 | 0x50<<7 | 0x32,
	39421 - 19968: jis0212<<14 | 0x48<<7 | 0x14,
	39422 - 19968: jis0212<<14 | 0x48<<7 | 0x15,
	39423 - 19968: jis0208<<14 | 0x1C<<7 | 0x38,
	39425 - 19968: jis0208<<14 | 0x50<<7 | 0x34,
	39426 - 19968: jis0212<<14 | 0x48<<7 | 0x16,
	39427 - 19968: jis0212<<14 | 0x48<<7 | 0x17,
	39428 - 19968: jis0212<<14 | 0x48<<7 | 0x18,
	39429 - 19968: jis0208<<14 | 0x50<<7 | 0x36,
	39435 - 19968: jis0212<<14 | 0x48<<7 | 0x19,
	39436 - 19968: jis0212<<14 | 0x48<<7 | 0x1A,
	39438 - 19968: jis0208<<14 | 0x14<<7 | 0x12,
	39439 - 19968: jis0208<<14 | 0x50<<7 | 0x35,
	39440 - 19968: jis0212<<14 | 0x48<<7 | 0x1B,
	39441 - 19968: jis0212<<14 | 0x48<<7 | 0x1C,
	39442 - 19968: jis0208<<14 | 0x20<<7 | 0x5A,
	39443 - 19968: jis0208<<14 | 0x17<<7 | 0x12,
	39446 - 19968: jis0212<<14 | 0x48<<7 | 0x1D,
	39449 - 19968: jis0208<<14 | 0x50<<7 | 0x38,
	39454 - 19968: jis0212<<14 | 0x48<<7 | 0x1E,
	39456 - 19968: jis0212<<14 | 0x48<<7 | 0x1F,
	39458 - 19968: jis0212<<14 | 0x48<<7 | 0x20,
	39459 - 19968: jis0212<<14 | 0x48<<7 | 0x21,
	39460 - 19968: jis0212<<14 | 0x48<<7 | 0x22,
	39463 - 19968: jis0212<<14 | 0x48<<7 | 0x23,
	39464 - 19968: jis0208<<14 | 0x21<<7 | 0x2C,
	39467 - 19968: jis0208<<14 | 0x50<<7 | 0x39,
	39469 - 19968: jis0212<<14 | 0x48<<7 | 0x24,
	39470 - 19968: jis0212<<14 | 0x48<<7 | 0x25,
	39472 - 19968: jis0208<<14 | 0x25<<7 | 0x0C,
	39475 - 19968: jis0212<<14 | 0x48<<7 | 0x26,
	39477 - 19968: jis0212<<14 | 0x48<<7 | 0x27,
	39478 - 19968: jis0212<<14 | 0x48<<7 | 0x28,
	39479 - 19968: jis0208<<14 | 0x50<<7 | 0x3A,
	39480 - 19968: jis0212<<14 | 0x48<<7 | 0x29,
	39486 - 19968: jis0208<<14 | 0x50<<7 | 0x3F,
	39488 - 19968: jis0208<<14 | 0x50<<7 | 0x3D,
	39489 - 19968: jis0212<<14 | 0x48<<7 | 0x2B,
	39490 - 19968: jis0208<<14 | 0x50<<7 | 0x3C,
	39491 - 19968: jis0208<<14 | 0x50<<7 | 0x3E,
	39492 - 19968: jis0212<<14 | 0x48<<7 | 0x2C,
	39493 - 19968: jis0208<<14 | 0x50<<7 | 0x3B,
	39495 - 19968: jis0212<<14 | 0x48<<7 | 0x2A,
	39498 - 19968: jis0212<<14 | 0x48<<7 | 0x2D,
	39499 - 19968: jis0212<<14 | 0x48<<7 | 0x2E,
	39500 - 19968: jis0212<<14 | 0x48<<7 | 0x2F,
	39501 - 19968: jis0208<<14 | 0x50<<7 | 0x41,
	39502 - 19968: jis0208<<14 | 0x5B<<7 | 0x40,
	39505 - 19968: jis0212<<14 | 0x48<<7 | 0x31,
	39508 - 19968: jis0212<<14 | 0x48<<7 | 0x32,
	39509 - 19968: jis0208<<14 | 0x50<<7 | 0x40,
	39510 - 19968: jis0212<<14 | 0x48<<7 | 0x33,
	39511 - 19968: jis0208<<14 | 0x50<<7 | 0x43,
	39514 - 19968: jis0208<<14 | 0x15<<7 | 0x22,
	39515 - 19968: jis0208<<14 | 0x50<<7 | 0x42,
	39517 - 19968: jis0212<<14 | 0x48<<7 | 0x34,
	39519 - 19968: jis0208<<14 | 0x50<<7 | 0x44,
	39522 - 19968: jis0208<<14 | 0x50<<7 | 0x45,
	39524 - 19968: jis0208<<14 | 0x50<<7 | 0x47,
	39525 - 19968: jis0208<<14 | 0x50<<7 | 0x46,
	39529 - 19968: jis0208<<14 | 0x50<<7 | 0x48,
	39530 - 19968: jis0208<<14 | 0x50<<7 | 0x4A,
	39531 - 19968: jis0208<<14 | 0x50<<7 | 0x49,
	39592 - 19968: jis0208<<14 | 0x18<<7 | 0x5B,
	39594 - 19968: jis0212<<14 | 0x48<<7 | 0x35,
	39596 - 19968: jis0212<<14 | 0x48<<7 | 0x36,
	39597 - 19968: jis0208<<14 | 0x50<<7 | 0x4B,
	39598 - 19968: jis0212<<14 | 0x48<<7 | 0x37,
	39599 - 19968: jis0212<<14 | 0x48<<7 | 0x38,
	39600 - 19968: jis0208<<14 | 0x50<<7 | 0x4C,
	39602 - 19968: jis0212<<14 | 0x48<<7 | 0x39,
	39604 - 19968: jis0212<<14 | 0x48<<7 | 0x3A,
	39605 - 19968: jis0212<<14 | 0x48<<7 | 0x3B,
	39606 - 19968: jis0212<<14 | 0x48<<7 | 0x3C,
	39608 - 19968: jis0208<<14 | 0x12<<7 | 0x1B,
	39609 - 19968: jis0212<<14 | 0x48<<7 | 0x3D,
	39611 - 19968: jis0212<<14 | 0x48<<7 | 0x3E,
	39612 - 19968: jis0208<<14 | 0x50<<7 | 0x4D,
	39614 - 19968: jis0212<<14 | 0x48<<7 | 0x3F,
	39615 - 19968: jis0212<<14 | 0x48<<7 | 0x40,
	39616 - 19968: jis0208<<14 | 0x50<<7 | 0x4E,
	39617 - 19968: jis0212<<14 | 0x48<<7 | 0x41,
	39619 - 19968: jis0212<<14 | 0x48<<7 | 0x42,
	39620 - 19968: jis0208<<14 | 0x1E<<7 | 0x50,
	39622 - 19968: jis0212<<14 | 0x48<<7 | 0x43,
	39624 - 19968: jis0212<<14 | 0x48<<7 | 0x44,
	39630 - 19968: jis0212<<14 | 0x48<<7 | 0x45,
	39631 - 19968: jis0208<<14 | 0x50<<7 | 0x4F,
	39632 - 19968: jis0212<<14 | 0x48<<7 | 0x46,
	39633 - 19968: jis0208<<14 | 0x50<<7 | 0x50,
	39634 - 19968: jis0212<<14 | 0x48<<7 | 0x47,
	39635 - 19968: jis0208<<14 | 0x50<<7 | 0x51,
	39636 - 19968: jis0208<<14 | 0x50<<7 | 0x52,
	39637 - 19968: jis0212<<14 | 0x48<<7 | 0x48,
	39638 - 19968: jis0212<<14 | 0x48<<7 | 0x49,
	39639 - 19968: jis0212<<14 | 0x48<<7 | 0x4A,
	39640 - 19968: jis0208<<14 | 0x18<<7 | 0x41,
	39641 - 19968: jis0208<<14 | 0x5B<<7 | 0x41,
	39643 - 19968: jis0212<<14 | 0x48<<7 | 0x4B,
	39644 - 19968: jis0208<<14 | 0x5B<<7 | 0x42,
	39646 - 19968: jis0208<<14 | 0x50<<7 | 0x53,
	39647 - 19968: jis0208<<14 | 0x50<<7 | 0x54,
	39648 - 19968: jis0212<<14 | 0x48<<7 | 0x4D,
	39650 - 19968: jis0208<<14 | 0x50<<7 | 0x55,
	39651 - 19968: jis0208<<14 | 0x50<<7 | 0x56,
	39652 - 19968: jis0212<<14 | 0x48<<7 | 0x4E,
	39653 - 19968: jis0212<<14 | 0x48<<7 | 0x4F,
	39654 - 19968: jis0208<<14 | 0x50<<7 | 0x57,
	39655 - 19968: jis0212<<14 | 0x48<<7 | 0x50,
	39657 - 19968: jis0212<<14 | 0x48<<7 | 0x51,
	39658 - 19968: jis0208<<14 | 0x27<<7 | 0x10,
	39659 - 19968: jis0208<<14 | 0x50<<7 | 0x59,
	39660 - 19968: jis0212<<14 | 0x48<<7 | 0x52,
	39661 - 19968: jis0208<<14 | 0x28<<7 | 0x05,
	39662 - 19968: jis0208<<14 | 0x50<<7 | 0x5A,
	39663 - 19968: jis0208<<14 | 0x50<<7 | 0x58,
	39665 - 19968: jis0208<<14 | 0x50<<7 | 0x5C,
	39666 - 19968: jis0212<<14 | 0x48<<7 | 0x53,
	39667 - 19968: jis0212<<14 | 0x48<<7 | 0x54,
	39668 - 19968: jis0208<<14 | 0x50<<7 | 0x5B,
	39669 - 19968: jis0212<<14 | 0x48<<7 | 0x55,
	39671 - 19968: jis0208<<14 | 0x50<<7 | 0x5D,
	39673 - 19968: jis0212<<14 | 0x48<<7 | 0x56,
	39674 - 19968: jis0212<<14 | 0x48<<7 | 0x57,
	39675 - 19968: jis0208<<14 | 0x51<<7 | 0x00,
	39677 - 19968: jis0212<<14 | 0x48<<7 | 0x58,
	39679 - 19968: jis0212<<14 | 0x48<<7 | 0x59,
	39680 - 19968: jis0212<<14 | 0x48<<7 | 0x5A,
	39681 - 19968: jis0212<<14 | 0x48<<7 | 0x5B,
	39682 - 19968: jis0212<<14 | 0x48<<7 | 0x5C,
	39683 - 19968: jis0212<<14 | 0x48<<7 | 0x5D,
	39684 - 19968: jis0212<<14 | 0x49<<7 | 0x00,
	39685 - 19968: jis0212<<14 | 0x49<<7 | 0x01,
	39686 - 19968: jis0208<<14 | 0x51<<7 | 0x01,
	39688 - 19968: jis0212<<14 | 0x49<<7 | 0x02,
	39689 - 19968: jis0212<<14 | 0x49<<7 | 0x03,
	39691 - 19968: jis0212<<14 | 0x49<<7 | 0x04,
	39692 - 19968: jis0212<<14 | 0x49<<7 | 0x05,
	39693 - 19968: jis0212<<14 | 0x49<<7 | 0x06,
	39694 - 19968: jis0212<<14 | 0x49<<7 | 0x07,
	39696 - 19968: jis0212<<14 | 0x49<<7 | 0x08,
	39698 - 19968: jis0212<<14 | 0x49<<7 | 0x09,
	39702 - 19968: jis0212<<14 | 0x49<<7 | 0x0A,
	39704 - 19968: jis0208<<14 | 0x51<<7 | 0x02,
	39705 - 19968: jis0212<<14 | 0x49<<7 | 0x0B,
	39706 - 19968: jis0208<<14 | 0x51<<7 | 0x03,
	39707 - 19968: jis0212<<14 | 0x49<<7 | 0x0C,
	39708 - 19968: jis0212<<14 | 0x49<<7 | 0x0D,
	39711 - 19968: jis0208<<14 | 0x51<<7 | 0x04,
	39712 - 19968: jis0212<<14 | 0x49<<7 | 0x0E,
	39714 - 19968: jis0208<<14 | 0x51<<7 | 0x05,
	39715 - 19968: jis0208<<14 | 0x51<<7 | 0x06,
	39717 - 19968: jis0208<<14 | 0x51<<7 | 0x07,
	39718 - 19968: jis0212<<14 | 0x49<<7 | 0x0F,
	39719 - 19968: jis0208<<14 | 0x51<<7 | 0x08,
	39720 - 19968: jis0208<<14 | 0x51<<7 | 0x09,
	39721 - 19968: jis0208<<14 | 0x51<<7 | 0x0A,
	39722 - 19968: jis0208<<14 | 0x51<<7 | 0x0B,
	39723 - 19968: jis0212<<14 | 0x49<<7 | 0x10,
	39725 - 19968: jis0212<<14 | 0x49<<7 | 0x11,
	39726 - 19968: jis0208<<14 | 0x51<<7 | 0x0C,
	39727 - 19968: jis0208<<14 | 0x51<<7 | 0x0D,
	39729 - 19968: jis0208<<14 | 0x3C<<7 | 0x14,
	39730 - 19968: jis0208<<14 | 0x51<<7 | 0x0E,
	39731 - 19968: jis0212<<14 | 0x49<<7 | 0x12,
	39732 - 19968: jis0212<<14 | 0x49<<7 | 0x13,
	39733 - 19968: jis0212<<14 | 0x49<<7 | 0x14,
	39735 - 19968: jis0212<<14 | 0x49<<7 | 0x15,
	39737 - 19968: jis0212<<14 | 0x49<<7 | 0x16,
	39738 - 19968: jis0212<<14 | 0x49<<7 | 0x17,
	39739 - 19968: jis0208<<14 | 0x43<<7 | 0x57,
	39740 - 19968: jis0208<<14 | 0x14<<7 | 0x13,
	39741 - 19968: jis0212<<14 | 0x49<<7 | 0x18,
	39745 - 19968: jis0208<<14 | 0x12<<7 | 0x00,
	39746 - 19968: jis0208<<14 | 0x19<<7 | 0x11,
	39747 - 19968: jis0208<<14 | 0x51<<7 | 0x10,
	39748 - 19968: jis0208<<14 | 0x51<<7 | 0x0F,
	39749 - 19968: jis0208<<14 | 0x2B<<7 | 0x04,
	39752 - 19968: jis0212<<14 | 0x49<<7 | 0x19,
	39755 - 19968: jis0212<<14 | 0x49<<7 | 0x1A,
	39756 - 19968: jis0212<<14 | 0x49<<7 | 0x1B,
	39757 - 19968: jis0208<<14 | 0x51<<7 | 0x12,
	39758 - 19968: jis0208<<14 | 0x51<<7 | 0x13,
	39759 - 19968: jis0208<<14 | 0x51<<7 | 0x11,
	39761 - 19968: jis0208<<14 | 0x51<<7 | 0x14,
	39764 - 19968: jis0208<<14 | 0x2A<<7 | 0x41,
	39765 - 19968: jis0212<<14 | 0x49<<7 | 0x1C,
	39766 - 19968: jis0212<<14 | 0x49<<7 | 0x1D,
	39767 - 19968: jis0212<<14 | 0x49<<7 | 0x1E,
	39768 - 19968: jis0208<<14 | 0x51<<7 | 0x15,
	39770 - 19968: jis0208<<14 | 0x14<<7 | 0x5A,
	39771 - 19968: jis0212<<14 | 0x49<<7 | 0x1F,
	39774 - 19968: jis0212<<14 | 0x49<<7 | 0x20,
	39777 - 19968: jis0212<<14 | 0x49<<7 | 0x21,
	39779 - 19968: jis0212<<14 | 0x49<<7 | 0x22,
	39781 - 19968: jis0212<<14 | 0x49<<7 | 0x23,
	39782 - 19968: jis0212<<14 | 0x49<<7 | 0x24,
	39784 - 19968: jis0212<<14 | 0x49<<7 | 0x25,
	39786 - 19968: jis0212<<14 | 0x49<<7 | 0x26,
	39787 - 19968: jis0212<<14 | 0x49<<7 | 0x27,
	39788 - 19968: jis0212<<14 | 0x49<<7 | 0x28,
	39789 - 19968: jis0212<<14 | 0x49<<7 | 0x29,
	39790 - 19968: jis0212<<14 | 0x49<<7 | 0x2A,
	39791 - 19968: jis0208<<14 | 0x2E<<7 | 0x04,
	39794 - 19968: jis0208<<14 | 0x5B<<7 | 0x44,
	39795 - 19968: jis0212<<14 | 0x49<<7 | 0x2B,
	39796 - 19968: jis0208<<14 | 0x51<<7 | 0x16,
	39797 - 19968: jis0208<<14 | 0x5B<<7 | 0x43,
	39799 - 19968: jis0212<<14 | 0x49<<7 | 0x2D,
	39800 - 19968: jis0212<<14 | 0x49<<7 | 0x2E,
	39801 - 19968: jis0212<<14 | 0x49<<7 | 0x2F,
	39807 - 19968: jis0212<<14 | 0x49<<7 | 0x30,
	39808 - 19968: jis0212<<14 | 0x49<<7 | 0x31,
	39811 - 19968: jis0208<<14 | 0x51<<7 | 0x18,
	39812 - 19968: jis0212<<14 | 0x49<<7 | 0x32,
	39813 - 19968: jis0212<<14 | 0x49<<7 | 0x33,
	39814 - 19968: jis0212<<14 | 0x49<<7 | 0x34,
	39815 - 19968: jis0212<<14 | 0x49<<7 | 0x35,
	39817 - 19968: jis0212<<14 | 0x49<<7 | 0x36,
	39818 - 19968: jis0212<<14 | 0x49<<7 | 0x37,
	39819 - 19968: jis0212<<14 | 0x49<<7 | 0x38,
	39821 - 19968: jis0212<<14 | 0x49<<7 | 0x39,
	39822 - 19968: jis0208<<14 | 0x0F<<7 | 0x1D,
	39823 - 19968: jis0208<<14 | 0x5B<<7 | 0x45,
	39824 - 19968: jis0212<<14 | 0x49<<7 | 0x3B,
	39825 - 19968: jis0208<<14 | 0x51<<7 | 0x19,
	39826 - 19968: jis0208<<14 | 0x29<<7 | 0x0A,
	39827 - 19968: jis0208<<14 | 0x51<<7 | 0x17,
	39828 - 19968: jis0212<<14 | 0x49<<7 | 0x3C,
	39830 - 19968: jis0208<<14 | 0x51<<7 | 0x1A,
	39831 - 19968: jis0208<<14 | 0x51<<7 | 0x1B,
	39834 - 19968: jis0212<<14 | 0x49<<7 | 0x3D,
	39837 - 19968: jis0212<<14 | 0x49<<7 | 0x3E,
	39838 - 19968: jis0212<<14 | 0x49<<7 | 0x3F,
	39839 - 19968: jis0208<<14 | 0x51<<7 | 0x1C,
	39840 - 19968: jis0208<<14 | 0x51<<7 | 0x1D,
	39846 - 19968: jis0212<<14 | 0x49<<7 | 0x40,
	39847 - 19968: jis0212<<14 | 0x49<<7 | 0x41,
	39848 - 19968: jis0208<<14 | 0x51<<7 | 0x1E,
	39849 - 19968: jis0212<<14 | 0x49<<7 | 0x42,
	39850 - 19968: jis0208<<14 | 0x2A<<7 | 0x4D,
	39851 - 19968: jis0208<<14 | 0x1A<<7 | 0x0C,
	39852 - 19968: jis0212<<14 | 0x49<<7 | 0x43,
	39853 - 19968: jis0208<<14 | 0x19<<7 | 0x59,
	39854 - 19968: jis0208<<14 | 0x20<<7 | 0x0E,
	39856 - 19968: jis0212<<14 | 0x49<<7 | 0x44,
	39857 - 19968: jis0208<<14 | 0x5B<<7 | 0x46,
	39858 - 19968: jis0212<<14 | 0x49<<7 | 0x46,
	39860 - 19968: jis0208<<14 | 0x51<<7 | 0x1F,
	39863 - 19968: jis0212<<14 | 0x49<<7 | 0x47,
	39864 - 19968: jis0212<<14 | 0x49<<7 | 0x48,
	39865 - 19968: jis0208<<14 | 0x51<<7 | 0x22,
	39867 - 19968: jis0208<<14 | 0x5B<<7 | 0x47,
	39868 - 19968: jis0212<<14 | 0x49<<7 | 0x4A,
	39870 - 19968: jis0212<<14 | 0x49<<7 | 0x4B,
	39871 - 19968: jis0212<<14 | 0x49<<7 | 0x4C,
	39872 - 19968: jis0208<<14 | 0x51<<7 | 0x20,
	39873 - 19968: jis0212<<14 | 0x49<<7 | 0x4D,
	39878 - 19968: jis0208<<14 | 0x51<<7 | 0x23,
	39879 - 19968: jis0212<<14 | 0x49<<7 | 0x4E,
	39880 - 19968: jis0212<<14 | 0x49<<7 | 0x4F,
	39881 - 19968: jis0208<<14 | 0x17<<7 | 0x50,
	39882 - 19968: jis0208<<14 | 0x51<<7 | 0x21,
	39886 - 19968: jis0212<<14 | 0x49<<7 | 0x50,
	39887 - 19968: jis0208<<14 | 0x51<<7 | 0x24,
	39888 - 19968: jis0212<<14 | 0x49<<7 | 0x51,
	39889 - 19968: jis0208<<14 | 0x51<<7 | 0x25,
	39890 - 19968: jis0208<<14 | 0x51<<7 | 0x26,
	39892 - 19968: jis0208<<14 | 0x51<<7 | 0x2A,
	39894 - 19968: jis0208<<14 | 0x1A<<7 | 0x09,
	39895 - 19968: jis0212<<14 | 0x49<<7 | 0x52,
	39896 - 19968: jis0212<<14 | 0x49<<7 | 0x53,
	39899 - 19968: jis0208<<14 | 0x21<<7 | 0x43,
	39901 - 19968: jis0212<<14 | 0x49<<7 | 0x54,
	39903 - 19968: jis0212<<14 | 0x49<<7 | 0x55,
	39905 - 19968: jis0208<<14 | 0x51<<7 | 0x2B,
	39906 - 19968: jis0208<<14 | 0x51<<7 | 0x28,
	39907 - 19968: jis0208<<14 | 0x51<<7 | 0x27,
	39908 - 19968: jis0208<<14 | 0x51<<7 | 0x29,
	39909 - 19968: jis0212<<14 | 0x49<<7 | 0x56,
	39911 - 19968: jis0212<<14 | 0x49<<7 | 0x57,
	39912 - 19968: jis0208<<14 | 0x16<<7 | 0x3E,
	39914 - 19968: jis0212<<14 | 0x49<<7 | 0x58,
	39915 - 19968: jis0212<<14 | 0x49<<7 | 0x59,
	39919 - 19968: jis0212<<14 | 0x49<<7 | 0x5A,
	39920 - 19968: jis0208<<14 | 0x51<<7 | 0x2F,
	39921 - 19968: jis0208<<14 | 0x51<<7 | 0x2E,
	39922 - 19968: jis0208<<14 | 0x51<<7 | 0x2D,
	39923 - 19968: jis0212<<14 | 0x49<<7 | 0x5B,
	39925 - 19968: jis0208<<14 | 0x0F<<7 | 0x12,
	39927 - 19968: jis0212<<14 | 0x49<<7 | 0x5C,
	39928 - 19968: jis0212<<14 | 0x49<<7 | 0x5D,
	39929 - 19968: jis0212<<14 | 0x4A<<7 | 0x00,
	39930 - 19968: jis0212<<14 | 0x4A<<7 | 0x01,
	39933 - 19968: jis0212<<14 | 0x4A<<7 | 0x02,
	39935 - 19968: jis0212<<14 | 0x4A<<7 | 0x03,
	39936 - 19968: jis0208<<14 | 0x5B<<7 | 0x48,
	39938 - 19968: jis0212<<14 | 0x4A<<7 | 0x05,
	39940 - 19968: jis0208<<14 | 0x51<<7 | 0x39,
	39942 - 19968: jis0208<<14 | 0x51<<7 | 0x35,
	39944 - 19968: jis0208<<14 | 0x51<<7 | 0x36,
	39945 - 19968: jis0208<<14 | 0x51<<7 | 0x32,
	39946 - 19968: jis0208<<14 | 0x51<<7 | 0x38,
	39947 - 19968: jis0212<<14 | 0x4A<<7 | 0x06,
	39948 - 19968: jis0208<<14 | 0x51<<7 | 0x34,
	39949 - 19968: jis0208<<14 | 0x12<<7 | 0x41,
	39951 - 19968: jis0212<<14 | 0x4A<<7 | 0x07,
	39952 - 19968: jis0208<<14 | 0x2E<<7 | 0x2B,
	39953 - 19968: jis0212<<14 | 0x4A<<7 | 0x08,
	39954 - 19968: jis0208<<14 | 0x51<<7 | 0x37,
	39955 - 19968: jis0208<<14 | 0x51<<7 | 0x33,
	39956 - 19968: jis0208<<14 | 0x51<<7 | 0x31,
	39957 - 19968: jis0208<<14 | 0x51<<7 | 0x30,
	39958 - 19968: jis0212<<14 | 0x4A<<7 | 0x09,
	39960 - 19968: jis0212<<14 | 0x4A<<7 | 0x0A,
	39961 - 19968: jis0212<<14 | 0x4A<<7 | 0x0B,
	39962 - 19968: jis0212<<14 | 0x4A<<7 | 0x0C,
	39963 - 19968: jis0208<<14 | 0x51<<7 | 0x3B,
	39964 - 19968: jis0212<<14 | 0x4A<<7 | 0x0D,
	39966 - 19968: jis0212<<14 | 0x4A<<7 | 0x0E,
	39969 - 19968: jis0208<<14 | 0x51<<7 | 0x3E,
	39970 - 19968: jis0212<<14 | 0x4A<<7 | 0x0F,
	39971 - 19968: jis0212<<14 | 0x4A<<7 | 0x10,
	39972 - 19968: jis0208<<14 | 0x51<<7 | 0x3D,
	39973 - 19968: jis0208<<14 | 0x51<<7 | 0x3C,
	39974 - 19968: jis0212<<14 | 0x4A<<7 | 0x11,
	39975 - 19968: jis0212<<14 | 0x4A<<7 | 0x12,
	39976 - 19968: jis0212<<14 | 0x4A<<7 | 0x13,
	39977 - 19968: jis0212<<14 | 0x4A<<7 | 0x14,
	39978 - 19968: jis0212<<14 | 0x4A<<7 | 0x15,
	39981 - 19968: jis0208<<14 | 0x28<<7 | 0x28,
	39982 - 19968: jis0208<<14 | 0x51<<7 | 0x3A,
	39983 - 19968: jis0208<<14 | 0x0F<<7 | 0x52,
	39984 - 19968: jis0208<<14 | 0x51<<7 | 0x3F,
	39985 - 19968: jis0212<<14 | 0x4A<<7 | 0x16,
	39986 - 19968: jis0208<<14 | 0x51<<7 | 0x41,
	39989 - 19968: jis0212<<14 | 0x4A<<7 | 0x17,
	39990 - 19968: jis0212<<14 | 0x4A<<7 | 0x18,
	39991 - 19968: jis0212<<14 | 0x4A<<7 | 0x19,
	39993 - 19968: jis0208<<14 | 0x12<<7 | 0x4E,
	39994 - 19968: jis0208<<14 | 0x51<<7 | 0x2C,
	39995 - 19968: jis0208<<14 | 0x10<<7 | 0x16,
	39997 - 19968: jis0212<<14 | 0x4A<<7 | 0x1A,
	39998 - 19968: jis0208<<14 | 0x51<<7 | 0x43,
	40001 - 19968: jis0212<<14 | 0x4A<<7 | 0x1B,
	40003 - 19968: jis0212<<14 | 0x4A<<7 | 0x1C,
	40004 - 19968: jis0212<<14 | 0x4A<<7 | 0x1D,
	40005 - 19968: jis0212<<14 | 0x4A<<7 | 0x1E,
	40006 - 19968: jis0208<<14 | 0x51<<7 | 0x42,
	40007 - 19968: jis0208<<14 | 0x51<<7 | 0x40,
	40008 - 19968: jis0208<<14 | 0x22<<7 | 0x0C,
	40009 - 19968: jis0212<<14 | 0x4A<<7 | 0x1F,
	40010 - 19968: jis0212<<14 | 0x4A<<7 | 0x20,
	40014 - 19968: jis0212<<14 | 0x4A<<7 | 0x21,
	40015 - 19968: jis0212<<14 | 0x4A<<7 | 0x22,
	40016 - 19968: jis0212<<14 | 0x4A<<7 | 0x23,
	40018 - 19968: jis0208<<14 | 0x2A<<7 | 0x4F,
	40019 - 19968: jis0212<<14 | 0x4A<<7 | 0x24,
	40020 - 19968: jis0212<<14 | 0x4A<<7 | 0x25,
	40022 - 19968: jis0212<<14 | 0x4A<<7 | 0x26,
	40023 - 19968: jis0208<<14 | 0x2D<<7 | 0x39,
	40024 - 19968: jis0212<<14 | 0x4A<<7 | 0x27,
	40026 - 19968: jis0208<<14 | 0x51<<7 | 0x44,
	40027 - 19968: jis0212<<14 | 0x4A<<7 | 0x28,
	40028 - 19968: jis0212<<14 | 0x4A<<7 | 0x2F,
	40029 - 19968: jis0212<<14 | 0x4A<<7 | 0x29,
	40030 - 19968: jis0212<<14 | 0x4A<<7 | 0x2A,
	40031 - 19968: jis0212<<14 | 0x4A<<7 | 0x2B,
	40032 - 19968: jis0208<<14 | 0x51<<7 | 0x45,
	40035 - 19968: jis0212<<14 | 0x4A<<7 | 0x2C,
	40039 - 19968: jis0208<<14 | 0x51<<7 | 0x46,
	40040 - 19968: jis0212<<14 | 0x4A<<7 | 0x31,
	40041 - 19968: jis0212<<14 | 0x4A<<7 | 0x2D,
	40042 - 19968: jis0212<<14 | 0x4A<<7 | 0x2E,
	40043 - 19968: jis0212<<14 | 0x4A<<7 | 0x30,
	40046 - 19968: jis0212<<14 | 0x4A<<7 | 0x32,
	40048 - 19968: jis0212<<14 | 0x4A<<7 | 0x33,
	40050 - 19968: jis0212<<14 | 0x4A<<7 | 0x34,
	40053 - 19968: jis0212<<14 | 0x4A<<7 | 0x35,
	40054 - 19968: jis0208<<14 | 0x51<<7 | 0x47,
	40055 - 19968: jis0212<<14 | 0x4A<<7 | 0x36,
	40056 - 19968: jis0208<<14 | 0x51<<7 | 0x48,
	40059 - 19968: jis0212<<14 | 0x4A<<7 | 0x37,
	40165 - 19968: jis0208<<14 | 0x23<<7 | 0x1A,
	40166 - 19968: jis0212<<14 | 0x4A<<7 | 0x38,
	40167 - 19968: jis0208<<14 | 0x51<<7 | 0x49,
	40169 - 19968: jis0208<<14 | 0x27<<7 | 0x16,
	40171 - 19968: jis0208<<14 | 0x51<<7 | 0x4E,
	40172 - 19968: jis0208<<14 | 0x51<<7 | 0x4A,
	40176 - 19968: jis0208<<14 | 0x51<<7 | 0x4B,
	40178 - 19968: jis0212<<14 | 0x4A<<7 | 0x39,
	40179 - 19968: jis0208<<14 | 0x2A<<7 | 0x10,
	40180 - 19968: jis0208<<14 | 0x2B<<7 | 0x23,
	40182 - 19968: jis0208<<14 | 0x25<<7 | 0x2F,
	40183 - 19968: jis0212<<14 | 0x4A<<7 | 0x3A,
	40185 - 19968: jis0212<<14 | 0x4A<<7 | 0x3B,
	40194 - 19968: jis0212<<14 | 0x4A<<7 | 0x3D,
	40195 - 19968: jis0208<<14 | 0x51<<7 | 0x4F,
	40198 - 19968: jis0208<<14 | 0x51<<7 | 0x50,
	40199 - 19968: jis0208<<14 | 0x25<<7 | 0x1D,
	40200 - 19968: jis0208<<14 | 0x51<<7 | 0x4D,
	40201 - 19968: jis0208<<14 | 0x51<<7 | 0x4C,
	40203 - 19968: jis0212<<14 | 0x4A<<7 | 0x3C,
	40206 - 19968: jis0208<<14 | 0x11<<7 | 0x09,
	40209 - 19968: jis0212<<14 | 0x4A<<7 | 0x3E,
	40210 - 19968: jis0208<<14 | 0x51<<7 | 0x58,
	40213 - 19968: jis0208<<14 | 0x51<<7 | 0x57,
	40215 - 19968: jis0212<<14 | 0x4A<<7 | 0x3F,
	40216 - 19968: jis0212<<14 | 0x4A<<7 | 0x40,
	40219 - 19968: jis0208<<14 | 0x10<<7 | 0x54,
	40220 - 19968: jis0212<<14 | 0x4A<<7 | 0x41,
	40221 - 19968: jis0212<<14 | 0x4A<<7 | 0x42,
	40222 - 19968: jis0212<<14 | 0x4A<<7 | 0x43,
	40223 - 19968: jis0208<<14 | 0x51<<7 | 0x55,
	40227 - 19968: jis0208<<14 | 0x51<<7 | 0x54,
	40230 - 19968: jis0208<<14 | 0x51<<7 | 0x52,
	40232 - 19968: jis0208<<14 | 0x12<<7 | 0x5A,
	40234 - 19968: jis0208<<14 | 0x51<<7 | 0x51,
	40235 - 19968: jis0208<<14 | 0x1B<<7 | 0x11,
	40236 - 19968: jis0208<<14 | 0x11<<7 | 0x08,
	40239 - 19968: jis0212<<14 | 0x4A<<7 | 0x44,
	40240 - 19968: jis0212<<14 | 0x4A<<7 | 0x45,
	40242 - 19968: jis0212<<14 | 0x4A<<7 | 0x46,
	40243 - 19968: jis0212<<14 | 0x4A<<7 | 0x47,
	40244 - 19968: jis0212<<14 | 0x4A<<7 | 0x48,
	40250 - 19968: jis0212<<14 | 0x4A<<7 | 0x49,
	40251 - 19968: jis0208<<14 | 0x18<<7 | 0x42,
	40252 - 19968: jis0212<<14 | 0x4A<<7 | 0x4A,
	40253 - 19968: jis0212<<14 | 0x4A<<7 | 0x4C,
	40254 - 19968: jis0208<<14 | 0x51<<7 | 0x5B,
	40255 - 19968: jis0208<<14 | 0x51<<7 | 0x5A,
	40257 - 19968: jis0208<<14 | 0x51<<7 | 0x59,
	40258 - 19968: jis0212<<14 | 0x4A<<7 | 0x4D,
	40259 - 19968: jis0212<<14 | 0x4A<<7 | 0x4E,
	40260 - 19968: jis0208<<14 | 0x51<<7 | 0x56,
	40261 - 19968: jis0212<<14 | 0x4A<<7 | 0x4B,
	40262 - 19968: jis0208<<14 | 0x51<<7 | 0x5C,
	40263 - 19968: jis0212<<14 | 0x4A<<7 | 0x4F,
	40264 - 19968: jis0208<<14 | 0x51<<7 | 0x5D,
	40266 - 19968: jis0212<<14 | 0x4A<<7 | 0x50,
	40272 - 19968: jis0208<<14 | 0x52<<7 | 0x04,
	40273 - 19968: jis0208<<14 | 0x52<<7 | 0x03,
	40275 - 19968: jis0212<<14 | 0x4A<<7 | 0x51,
	40276 - 19968: jis0212<<14 | 0x4A<<7 | 0x52,
	40281 - 19968: jis0208<<14 | 0x52<<7 | 0x05,
	40284 - 19968: jis0208<<14 | 0x10<<7 | 0x0C,
	40285 - 19968: jis0208<<14 | 0x52<<7 | 0x00,
	40286 - 19968: jis0208<<14 | 0x52<<7 | 0x01,
	40287 - 19968: jis0212<<14 | 0x4A<<7 | 0x53,
	40288 - 19968: jis0208<<14 | 0x18<<7 | 0x53,
	40289 - 19968: jis0208<<14 | 0x2B<<7 | 0x18,
	40290 - 19968: jis0212<<14 | 0x4A<<7 | 0x55,
	40291 - 19968: jis0212<<14 | 0x4A<<7 | 0x54,
	40292 - 19968: jis0208<<14 | 0x52<<7 | 0x02,
	40293 - 19968: jis0212<<14 | 0x4A<<7 | 0x56,
	40297 - 19968: jis0212<<14 | 0x4A<<7 | 0x57,
	40298 - 19968: jis0212<<14 | 0x4A<<7 | 0x58,
	40299 - 19968: jis0208<<14 | 0x5B<<7 | 0x4A,
	40300 - 19968: jis0208<<14 | 0x2A<<7 | 0x11,
	40303 - 19968: jis0208<<14 | 0x52<<7 | 0x0A,
	40304 - 19968: jis0208<<14 | 0x5B<<7 | 0x49,
	40306 - 19968: jis0208<<14 | 0x52<<7 | 0x06,
	40310 - 19968: jis0212<<14 | 0x4A<<7 | 0x5B,
	40311 - 19968: jis0212<<14 | 0x4A<<7 | 0x5C,
	40314 - 19968: jis0208<<14 | 0x52<<7 | 0x0B,
	40315 - 19968: jis0212<<14 | 0x4A<<7 | 0x5D,
	40316 - 19968: jis0212<<14 | 0x4B<<7 | 0x00,
	40318 - 19968: jis0212<<14 | 0x4B<<7 | 0x01,
	40323 - 19968: jis0212<<14 | 0x4B<<7 | 0x02,
	40324 - 19968: jis0212<<14 | 0x4B<<7 | 0x03,
	40326 - 19968: jis0212<<14 | 0x4B<<7 | 0x04,
	40327 - 19968: jis0208<<14 | 0x52<<7 | 0x08,
	40329 - 19968: jis0208<<14 | 0x52<<7 | 0x07,
	40330 - 19968: jis0212<<14 | 0x4B<<7 | 0x05,
	40333 - 19968: jis0212<<14 | 0x4B<<7 | 0x06,
	40334 - 19968: jis0212<<14 | 0x4B<<7 | 0x07,
	40335 - 19968: jis0208<<14 | 0x16<<7 | 0x3B,
	40338 - 19968: jis0212<<14 | 0x4B<<7 | 0x08,
	40339 - 19968: jis0212<<14 | 0x4B<<7 | 0x09,
	40341 - 19968: jis0212<<14 | 0x4B<<7 | 0x0A,
	40342 - 19968: jis0212<<14 | 0x4B<<7 | 0x0B,
	40343 - 19968: jis0212<<14 | 0x4B<<7 | 0x0C,
	40344 - 19968: jis0212<<14 | 0x4B<<7 | 0x0D,
	40346 - 19968: jis0208<<14 | 0x52<<7 | 0x0C,
	40353 - 19968: jis0212<<14 | 0x4B<<7 | 0x0E,
	40356 - 19968: jis0208<<14 | 0x52<<7 | 0x0D,
	40361 - 19968: jis0208<<14 | 0x52<<7 | 0x0E,
	40362 - 19968: jis0212<<14 | 0x4B<<7 | 0x0F,
	40363 - 19968: jis0208<<14 | 0x52<<7 | 0x09,
	40364 - 19968: jis0212<<14 | 0x4B<<7 | 0x10,
	40366 - 19968: jis0212<<14 | 0x4B<<7 | 0x11,
	40367 - 19968: jis0208<<14 | 0x51<<7 | 0x53,
	40369 - 19968: jis0212<<14 | 0x4B<<7 | 0x12,
	40370 - 19968: jis0208<<14 | 0x52<<7 | 0x0F,
	40372 - 19968: jis0208<<14 | 0x23<<7 | 0x40,
	40373 - 19968: jis0212<<14 | 0x4B<<7 | 0x13,
	40376 - 19968: jis0208<<14 | 0x52<<7 | 0x13,
	40377 - 19968: jis0212<<14 | 0x4B<<7 | 0x14,
	40378 - 19968: jis0208<<14 | 0x52<<7 | 0x14,
	40379 - 19968: jis0208<<14 | 0x52<<7 | 0x12,
	40380 - 19968: jis0212<<14 | 0x4B<<7 | 0x15,
	40383 - 19968: jis0212<<14 | 0x4B<<7 | 0x16,
	40385 - 19968: jis0208<<14 | 0x52<<7 | 0x11,
	40386 - 19968: jis0208<<14 | 0x52<<7 | 0x17,
	40387 - 19968: jis0212<<14 | 0x4B<<7 | 0x17,
	40388 - 19968: jis0208<<14 | 0x52<<7 | 0x10,
	40390 - 19968: jis0208<<14 | 0x52<<7 | 0x15,
	40391 - 19968: jis0212<<14 | 0x4B<<7 | 0x18,
	40393 - 19968: jis0212<<14 | 0x4B<<7 | 0x19,
	40394 - 19968: jis0212<<14 | 0x4B<<7 | 0x1A,
	40399 - 19968: jis0208<<14 | 0x52<<7 | 0x16,
	40403 - 19968: jis0208<<14 | 0x52<<7 | 0x19,
	40404 - 19968: jis0212<<14 | 0x4B<<7 | 0x1B,
	40405 - 19968: jis0212<<14 | 0x4B<<7 | 0x1C,
	40406 - 19968: jis0212<<14 | 0x4B<<7 | 0x1D,
	40407 - 19968: jis0212<<14 | 0x4B<<7 | 0x1E,
	40409 - 19968: jis0208<<14 | 0x52<<7 | 0x18,
	40410 - 19968: jis0212<<14 | 0x4B<<7 | 0x1F,
	40414 - 19968: jis0212<<14 | 0x4B<<7 | 0x20,
	40415 - 19968: jis0212<<14 | 0x4B<<7 | 0x21,
	40416 - 19968: jis0212<<14 | 0x4B<<7 | 0x22,
	40421 - 19968: jis0212<<14 | 0x4B<<7 | 0x23,
	40422 - 19968: jis0208<<14 | 0x52<<7 | 0x1B,
	40423 - 19968: jis0212<<14 | 0x4B<<7 | 0x24,
	40425 - 19968: jis0212<<14 | 0x4B<<7 | 0x25,
	40427 - 19968: jis0212<<14 | 0x4B<<7 | 0x26,
	40429 - 19968: jis0208<<14 | 0x52<<7 | 0x1C,
	40430 - 19968: jis0212<<14 | 0x4B<<7 | 0x27,
	40431 - 19968: jis0208<<14 | 0x52<<7 | 0x1D,
	40432 - 19968: jis0212<<14 | 0x4B<<7 | 0x28,
	40434 - 19968: jis0208<<14 | 0x2E<<7 | 0x28,
	40435 - 19968: jis0212<<14 | 0x4B<<7 | 0x29,
	40436 - 19968: jis0212<<14 | 0x4B<<7 | 0x2A,
	40440 - 19968: jis0208<<14 | 0x52<<7 | 0x1A,
	40441 - 19968: jis0208<<14 | 0x21<<7 | 0x4A,
	40442 - 19968: jis0208<<14 | 0x19<<7 | 0x4C,
	40445 - 19968: jis0208<<14 | 0x52<<7 | 0x1E,
	40446 - 19968: jis0212<<14 | 0x4B<<7 | 0x2B,
	40450 - 19968: jis0212<<14 | 0x4B<<7 | 0x2D,
	40455 - 19968: jis0212<<14 | 0x4B<<7 | 0x2E,
	40458 - 19968: jis0212<<14 | 0x4B<<7 | 0x2C,
	40462 - 19968: jis0212<<14 | 0x4B<<7 | 0x2F,
	40464 - 19968: jis0212<<14 | 0x4B<<7 | 0x30,
	40465 - 19968: jis0212<<14 | 0x4B<<7 | 0x31,
	40466 - 19968: jis0212<<14 | 0x4B<<7 | 0x32,
	40469 - 19968: jis0212<<14 | 0x4B<<7 | 0x33,
	40470 - 19968: jis0212<<14 | 0x4B<<7 | 0x34,
	40473 - 19968: jis0208<<14 | 0x5B<<7 | 0x4C,
	40474 - 19968: jis0208<<14 | 0x52<<7 | 0x1F,
	40475 - 19968: jis0208<<14 | 0x52<<7 | 0x20,
	40476 - 19968: jis0212<<14 | 0x4B<<7 | 0x36,
	40477 - 19968: jis0212<<14 | 0x4B<<7 | 0x37,
	40478 - 19968: jis0208<<14 | 0x52<<7 | 0x21,
	40565 - 19968: jis0208<<14 | 0x52<<7 | 0x22,
	40568 - 19968: jis0208<<14 | 0x17<<7 | 0x13,
	40569 - 19968: jis0208<<14 | 0x52<<7 | 0x23,
	40570 - 19968: jis0212<<14 | 0x4B<<7 | 0x38,
	40571 - 19968: jis0212<<14 | 0x4B<<7 | 0x39,
	40572 - 19968: jis0212<<14 | 0x4B<<7 | 0x3A,
	40573 - 19968: jis0208<<14 | 0x52<<7 | 0x24,
	40575 - 19968: jis0208<<14 | 0x1B<<7 | 0x0E,
	40576 - 19968: jis0212<<14 | 0x4B<<7 | 0x3B,
	40577 - 19968: jis0208<<14 | 0x52<<7 | 0x25,
	40578 - 19968: jis0212<<14 | 0x4B<<7 | 0x3C,
	40579 - 19968: jis0212<<14 | 0x4B<<7 | 0x3D,
	40580 - 19968: jis0212<<14 | 0x4B<<7 | 0x3E,
	40581 - 19968: jis0212<<14 | 0x4B<<7 | 0x3F,
	40583 - 19968: jis0212<<14 | 0x4B<<7 | 0x40,
	40584 - 19968: jis0208<<14 | 0x52<<7 | 0x26,
	40587 - 19968: jis0208<<14 | 0x52<<7 | 0x27,
	40588 - 19968: jis0208<<14 | 0x52<<7 | 0x28,
	40590 - 19968: jis0212<<14 | 0x4B<<7 | 0x41,
	40591 - 19968: jis0212<<14 | 0x4B<<7 | 0x42,
	40593 - 19968: jis0208<<14 | 0x52<<7 | 0x2B,
	40594 - 19968: jis0208<<14 | 0x52<<7 | 0x29,
	40595 - 19968: jis0208<<14 | 0x2E<<7 | 0x1B,
	40597 - 19968: jis0208<<14 | 0x52<<7 | 0x2A,
	40598 - 19968: jis0212<<14 | 0x4B<<7 | 0x43,
	40599 - 19968: jis0208<<14 | 0x2D<<7 | 0x4E,
	40600 - 19968: jis0212<<14 | 0x4B<<7 | 0x44,
	40603 - 19968: jis0212<<14 | 0x4B<<7 | 0x45,
	40605 - 19968: jis0208<<14 | 0x52<<7 | 0x2C,
	40606 - 19968: jis0212<<14 | 0x4B<<7 | 0x46,
	40607 - 19968: jis0208<<14 | 0x2D<<7 | 0x3A,
	40612 - 19968: jis0212<<14 | 0x4B<<7 | 0x47,
	40613 - 19968: jis0208<<14 | 0x52<<7 | 0x2D,
	40614 - 19968: jis0208<<14 | 0x26<<7 | 0x5D,
	40616 - 19968: jis0212<<14 | 0x4B<<7 | 0x48,
	40617 - 19968: jis0208<<14 | 0x52<<7 | 0x2E,
	40618 - 19968: jis0208<<14 | 0x52<<7 | 0x30,
	40620 - 19968: jis0212<<14 | 0x4B<<7 | 0x49,
	40621 - 19968: jis0208<<14 | 0x52<<7 | 0x31,
	40622 - 19968: jis0212<<14 | 0x4B<<7 | 0x4A,
	40623 - 19968: jis0212<<14 | 0x4B<<7 | 0x4B,
	40624 - 19968: jis0212<<14 | 0x4B<<7 | 0x4C,
	40627 - 19968: jis0212<<14 | 0x4B<<7 | 0x4D,
	40628 - 19968: jis0212<<14 | 0x4B<<7 | 0x4E,
	40629 - 19968: jis0212<<14 | 0x4B<<7 | 0x4F,
	40632 - 19968: jis0208<<14 | 0x52<<7 | 0x2F,
	40633 - 19968: jis0208<<14 | 0x18<<7 | 0x4C,
	40634 - 19968: jis0208<<14 | 0x2B<<7 | 0x2C,
	40635 - 19968: jis0208<<14 | 0x2A<<7 | 0x42,
	40636 - 19968: jis0208<<14 | 0x35<<7 | 0x56,
	40638 - 19968: jis0208<<14 | 0x3C<<7 | 0x3F,
	40639 - 19968: jis0208<<14 | 0x2A<<7 | 0x5A,
	40644 - 19968: jis0208<<14 | 0x11<<7 | 0x0A,
	40646 - 19968: jis0212<<14 | 0x4B<<7 | 0x50,
	40648 - 19968: jis0212<<14 | 0x4B<<7 | 0x51,
	40651 - 19968: jis0212<<14 | 0x4B<<7 | 0x52,
	40652 - 19968: jis0208<<14 | 0x52<<7 | 0x33,
	40653 - 19968: jis0208<<14 | 0x14<<7 | 0x2F,
	40654 - 19968: jis0208<<14 | 0x52<<7 | 0x34,
	40655 - 19968: jis0208<<14 | 0x52<<7 | 0x35,
	40656 - 19968: jis0208<<14 | 0x52<<7 | 0x36,
	40657 - 19968: jis0208<<14 | 0x5B<<7 | 0x4D,
	40658 - 19968: jis0208<<14 | 0x18<<7 | 0x54,
	40660 - 19968: jis0208<<14 | 0x52<<7 | 0x37,
	40661 - 19968: jis0212<<14 | 0x4B<<7 | 0x53,
	40664 - 19968: jis0208<<14 | 0x3F<<7 | 0x33,
	40665 - 19968: jis0208<<14 | 0x2B<<7 | 0x3A,
	40667 - 19968: jis0208<<14 | 0x21<<7 | 0x42,
	40668 - 19968: jis0208<<14 | 0x52<<7 | 0x38,
	40669 - 19968: jis0208<<14 | 0x52<<7 | 0x3A,
	40670 - 19968: jis0208<<14 | 0x52<<7 | 0x39,
	40671 - 19968: jis0212<<14 | 0x4B<<7 | 0x54,
	40672 - 19968: jis0208<<14 | 0x52<<7 | 0x3B,
	40676 - 19968: jis0212<<14 | 0x4B<<7 | 0x55,
	40677 - 19968: jis0208<<14 | 0x52<<7 | 0x3C,
	40679 - 19968: jis0212<<14 | 0x4B<<7 | 0x56,
	40680 - 19968: jis0208<<14 | 0x52<<7 | 0x3D,
	40684 - 19968: jis0212<<14 | 0x4B<<7 | 0x57,
	40685 - 19968: jis0212<<14 | 0x4B<<7 | 0x58,
	40686 - 19968: jis0212<<14 | 0x4B<<7 | 0x59,
	40687 - 19968: jis0208<<14 | 0x52<<7 | 0x3E,
	40688 - 19968: jis0212<<14 | 0x4B<<7 | 0x5A,
	40689 - 19968: jis0212<<14 | 0x4B<<7 | 0x5B,
	40690 - 19968: jis0212<<14 | 0x4B<<7 | 0x5C,
	40692 - 19968: jis0208<<14 | 0x52<<7 | 0x3F,
	40693 - 19968: jis0212<<14 | 0x4B<<7 | 0x5D,
	40694 - 19968: jis0208<<14 | 0x52<<7 | 0x40,
	40695 - 19968: jis0208<<14 | 0x52<<7 | 0x41,
	40696 - 19968: jis0212<<14 | 0x4C<<7 | 0x00,
	40697 - 19968: jis0208<<14 | 0x52<<7 | 0x42,
	40699 - 19968: jis0208<<14 | 0x52<<7 | 0x43,
	40700 - 19968: jis0208<<14 | 0x52<<7 | 0x44,
	40701 - 19968: jis0208<<14 | 0x52<<7 | 0x45,
	40703 - 19968: jis0212<<14 | 0x4C<<7 | 0x01,
	40706 - 19968: jis0212<<14 | 0x4C<<7 | 0x02,
	40707 - 19968: jis0212<<14 | 0x4C<<7 | 0x03,
	40711 - 19968: jis0208<<14 | 0x52<<7 | 0x46,
	40712 - 19968: jis0208<<14 | 0x52<<7 | 0x47,
	40713 - 19968: jis0212<<14 | 0x4C<<7 | 0x04,
	40718 - 19968: jis0208<<14 | 0x24<<7 | 0x03,
	40719 - 19968: jis0212<<14 | 0x4C<<7 | 0x05,
	40720 - 19968: jis0212<<14 | 0x4C<<7 | 0x06,
	40721 - 19968: jis0212<<14 | 0x4C<<7 | 0x07,
	40722 - 19968: jis0212<<14 | 0x4C<<7 | 0x08,
	40723 - 19968: jis0208<<14 | 0x17<<7 | 0x3C,
	40724 - 19968: jis0212<<14 | 0x4C<<7 | 0x09,
	40725 - 19968: jis0208<<14 | 0x52<<7 | 0x49,
	40726 - 19968: jis0212<<14 | 0x4C<<7 | 0x0A,
	40727 - 19968: jis0212<<14 | 0x4C<<7 | 0x0B,
	40729 - 19968: jis0212<<14 | 0x4C<<7 | 0x0C,
	40730 - 19968: jis0212<<14 | 0x4C<<7 | 0x0D,
	40731 - 19968: jis0212<<14 | 0x4C<<7 | 0x0E,
	40735 - 19968: jis0212<<14 | 0x4C<<7 | 0x0F,
	40736 - 19968: jis0208<<14 | 0x20<<7 | 0x2C,
	40737 - 19968: jis0208<<14 | 0x52<<7 | 0x4A,
	40738 - 19968: jis0212<<14 | 0x4C<<7 | 0x10,
	40742 - 19968: jis0212<<14 | 0x4C<<7 | 0x11,
	40746 - 19968: jis0212<<14 | 0x4C<<7 | 0x12,
	40747 - 19968: jis0212<<14 | 0x4C<<7 | 0x13,
	40748 - 19968: jis0208<<14 | 0x52<<7 | 0x4B,
	40751 - 19968: jis0212<<14 | 0x4C<<7 | 0x14,
	40753 - 19968: jis0212<<14 | 0x4C<<7 | 0x15,
	40754 - 19968: jis0212<<14 | 0x4C<<7 | 0x16,
	40756 - 19968: jis0212<<14 | 0x4C<<7 | 0x17,
	40759 - 19968: jis0212<<14 | 0x4C<<7 | 0x18,
	40761 - 19968: jis0212<<14 | 0x4C<<7 | 0x19,
	40762 - 19968: jis0212<<14 | 0x4C<<7 | 0x1A,
	40763 - 19968: jis0208<<14 | 0x28<<7 | 0x00,
	40764 - 19968: jis0212<<14 | 0x4C<<7 | 0x1B,
	40765 - 19968: jis0212<<14 | 0x4C<<7 | 0x1C,
	40766 - 19968: jis0208<<14 | 0x52<<7 | 0x4C,
	40767 - 19968: jis0212<<14 | 0x4C<<7 | 0x1D,
	40769 - 19968: jis0212<<14 | 0x4C<<7 | 0x1E,
	40771 - 19968: jis0212<<14 | 0x4C<<7 | 0x1F,
	40772 - 19968: jis0212<<14 | 0x4C<<7 | 0x20,
	40773 - 19968: jis0212<<14 | 0x4C<<7 | 0x21,
	40774 - 19968: jis0212<<14 | 0x4C<<7 | 0x22,
	40775 - 19968: jis0212<<14 | 0x4C<<7 | 0x23,
	40778 - 19968: jis0208<<14 | 0x52<<7 | 0x4D,
	40779 - 19968: jis0208<<14 | 0x42<<7 | 0x16,
	40782 - 19968: jis0208<<14 | 0x4B<<7 | 0x39,
	40783 - 19968: jis0208<<14 | 0x4F<<7 | 0x4C,
	40786 - 19968: jis0208<<14 | 0x52<<7 | 0x4E,
	40787 - 19968: jis0212<<14 | 0x4C<<7 | 0x24,
	40788 - 19968: jis0208<<14 | 0x52<<7 | 0x4F,
	40789 - 19968: jis0212<<14 | 0x4C<<7 | 0x25,
	40790 - 19968: jis0212<<14 | 0x4C<<7 | 0x26,
	40791 - 19968: jis0212<<14 | 0x4C<<7 | 0x27,
	40792 - 19968: jis0212<<14 | 0x4C<<7 | 0x28,
	40794 - 19968: jis0212<<14 | 0x4C<<7 | 0x29,
	40797 - 19968: jis0212<<14 | 0x4C<<7 | 0x2A,
	40798 - 19968: jis0212<<14 | 0x4C<<7 | 0x2B,
	40799 - 19968: jis0208<<14 | 0x52<<7 | 0x51,
	40800 - 19968: jis0208<<14 | 0x52<<7 | 0x52,
	40801 - 19968: jis0208<<14 | 0x52<<7 | 0x53,
	40802 - 19968: jis0208<<14 | 0x2D<<7 | 0x4F,
	40803 - 19968: jis0208<<14 | 0x52<<7 | 0x50,
	40806 - 19968: jis0208<<14 | 0x52<<7 | 0x54,
	40807 - 19968: jis0208<<14 | 0x52<<7 | 0x55,
	40808 - 19968: jis0212<<14 | 0x4C<<7 | 0x2C,
	40809 - 19968: jis0212<<14 | 0x4C<<7 | 0x2D,
	40810 - 19968: jis0208<<14 | 0x52<<7 | 0x57,
	40812 - 19968: jis0208<<14 | 0x52<<7 | 0x56,
	40813 - 19968: jis0212<<14 | 0x4C<<7 | 0x2E,
	40814 - 19968: jis0212<<14 | 0x4C<<7 | 0x2F,
	40815 - 19968: jis0212<<14 | 0x4C<<7 | 0x30,
	40816 - 19968: jis0212<<14 | 0x4C<<7 | 0x31,
	40817 - 19968: jis0212<<14 | 0x4C<<7 | 0x32,
	40818 - 19968: jis0208<<14 | 0x52<<7 | 0x59,
	40819 - 19968: jis0212<<14 | 0x4C<<7 | 0x33,
	40821 - 19968: jis0212<<14 | 0x4C<<7 | 0x34,
	40822 - 19968: jis0208<<14 | 0x52<<7 | 0x5A,
	40823 - 19968: jis0208<<14 | 0x52<<7 | 0x58,
	40826 - 19968: jis0212<<14 | 0x4C<<7 | 0x35,
	40829 - 19968: jis0212<<14 | 0x4C<<7 | 0x36,
	40845 - 19968: jis0208<<14 | 0x2D<<7 | 0x15,
	40847 - 19968: jis0212<<14 | 0x4C<<7 | 0x37,
	40848 - 19968: jis0212<<14 | 0x4C<<7 | 0x38,
	40849 - 19968: jis0212<<14 | 0x4C<<7 | 0x39,
	40850 - 19968: jis0212<<14 | 0x4C<<7 | 0x3A,
	40852 - 19968: jis0212<<14 | 0x4C<<7 | 0x3B,
	40853 - 19968: jis0208<<14 | 0x52<<7 | 0x5B,
	40854 - 19968: jis0212<<14 | 0x4C<<7 | 0x3C,
	40855 - 19968: jis0212<<14 | 0x4C<<7 | 0x3D,
	40860 - 19968: jis0208<<14 | 0x52<<7 | 0x5C,
	40861 - 19968: jis0208<<14 | 0x42<<7 | 0x33,
	40862 - 19968: jis0212<<14 | 0x4C<<7 | 0x3E,
	40864 - 19968: jis0208<<14 | 0x52<<7 | 0x5D,
	40865 - 19968: jis0212<<14 | 0x4C<<7 | 0x3F,
	40866 - 19968: jis0212<<14 | 0x4C<<7 | 0x40,
	40867 - 19968: jis0212<<14 | 0x4C<<7 | 0x41,
	40869 - 19968: jis0212<<14 | 0x4C<<7 | 0x42,
}

const encode1Low, encode1High = 8208, 9840

var encode1 = [...]uint16{
	8208 - 8208: jis0208<<14 | 0x00<<7 | 0x1D,
	8213 - 8208: jis0208<<14 | 0x00<<7 | 0x1C,
	8216 - 8208: jis0208<<14 | 0x00<<7 | 0x25,
	8217 - 8208: jis0208<<14 | 0x00<<7 | 0x26,
	8220 - 8208: jis0208<<14 | 0x00<<7 | 0x27,
	8221 - 8208: jis0208<<14 | 0x00<<7 | 0x28,
	8224 - 8208: jis0208<<14 | 0x01<<7 | 0x56,
	8225 - 8208: jis0208<<14 | 0x01<<7 | 0x57,
	8229 - 8208: jis0208<<14 | 0x00<<7 | 0x24,
	8230 - 8208: jis0208<<14 | 0x00<<7 | 0x23,
	8240 - 8208: jis0208<<14 | 0x01<<7 | 0x52,
	8242 - 8208: jis0208<<14 | 0x00<<7 | 0x4B,
	8243 - 8208: jis0208<<14 | 0x00<<7 | 0x4C,
	8251 - 8208: jis0208<<14 | 0x01<<7 | 0x07,
	8451 - 8208: jis0208<<14 | 0x00<<7 | 0x4D,
	8470 - 8208: jis0208<<14 | 0x0C<<7 | 0x41,
	8481 - 8208: jis0208<<14 | 0x0C<<7 | 0x43,
	8482 - 8208: jis0212<<14 | 0x01<<7 | 0x4E,
	8491 - 8208: jis0208<<14 | 0x01<<7 | 0x51,
	8544 - 8208: jis0208<<14 | 0x0C<<7 | 0x14,
	8545 - 8208: jis0208<<14 | 0x0C<<7 | 0x15,
	8546 - 8208: jis0208<<14 | 0x0C<<7 | 0x16,
	8547 - 8208: jis0208<<14 | 0x0C<<7 | 0x17,
	8548 - 8208: jis0208<<14 | 0x0C<<7 | 0x18,
	8549 - 8208: jis0208<<14 | 0x0C<<7 | 0x19,
	8550 - 8208: jis0208<<14 | 0x0C<<7 | 0x1A,
	8551 - 8208: jis0208<<14 | 0x0C<<7 | 0x1B,
	8552 - 8208: jis0208<<14 | 0x0C<<7 | 0x1C,
	8553 - 8208: jis0208<<14 | 0x0C<<7 | 0x1D,
	8560 - 8208: jis0208<<14 | 0x5B<<7 | 0x50,
	8561 - 8208: jis0208<<14 | 0x5B<<7 | 0x51,
	8562 - 8208: jis0208<<14 | 0x5B<<7 | 0x52,
	8563 - 8208: jis0208<<14 | 0x5B<<7 | 0x53,
	8564 - 8208: jis0208<<14 | 0x5B<<7 | 0x54,
	8565 - 8208: jis0208<<14 | 0x5B<<7 | 0x55,
	8566 - 8208: jis0208<<14 | 0x5B<<7 | 0x56,
	8567 - 8208: jis0208<<14 | 0x5B<<7 | 0x57,
	8568 - 8208: jis0208<<14 | 0x5B<<7 | 0x58,
	8569 - 8208: jis0208<<14 | 0x5B<<7 | 0x59,
	8592 - 8208: jis0208<<14 | 0x01<<7 | 0x0A,
	8593 - 8208: jis0208<<14 | 0x01<<7 | 0x0B,
	8594 - 8208: jis0208<<14 | 0x01<<7 | 0x09,
	8595 - 8208: jis0208<<14 | 0x01<<7 | 0x0C,
	8658 - 8208: jis0208<<14 | 0x01<<7 | 0x2C,
	8660 - 8208: jis0208<<14 | 0x01<<7 | 0x2D,
	8704 - 8208: jis0208<<14 | 0x01<<7 | 0x2E,
	8706 - 8208: jis0208<<14 | 0x01<<7 | 0x3E,
	8707 - 8208: jis0208<<14 | 0x01<<7 | 0x2F,
	8711 - 8208: jis0208<<14 | 0x01<<7 | 0x3F,
	8712 - 8208: jis0208<<14 | 0x01<<7 | 0x19,
	8715 - 8208: jis0208<<14 | 0x01<<7 | 0x1A,
	8721 - 8208: jis0208<<14 | 0x0C<<7 | 0x53,
	8730 - 8208: jis0208<<14 | 0x01<<7 | 0x44,
	8733 - 8208: jis0208<<14 | 0x01<<7 | 0x46,
	8734 - 8208: jis0208<<14 | 0x00<<7 | 0x46,
	8735 - 8208: jis0208<<14 | 0x0C<<7 | 0x57,
	8736 - 8208: jis0208<<14 | 0x01<<7 | 0x3B,
	8741 - 8208: jis0208<<14 | 0x00<<7 | 0x21,
	8743 - 8208: jis0208<<14 | 0x01<<7 | 0x29,
	8744 - 8208: jis0208<<14 | 0x01<<7 | 0x2A,
	8745 - 8208: jis0208<<14 | 0x01<<7 | 0x20,
	8746 - 8208: jis0208<<14 | 0x01<<7 | 0x1F,
	8747 - 8208: jis0208<<14 | 0x01<<7 | 0x48,
	8748 - 8208: jis0208<<14 | 0x01<<7 | 0x49,
	8750 - 8208: jis0208<<14 | 0x0C<<7 | 0x52,
	8756 - 8208: jis0208<<14 | 0x00<<7 | 0x47,
	8757 - 8208: jis0208<<14 | 0x01<<7 | 0x47,
	8765 - 8208: jis0208<<14 | 0x01<<7 | 0x45,
	8786 - 8208: jis0208<<14 | 0x01<<7 | 0x41,
	8800 - 8208: jis0208<<14 | 0x00<<7 | 0x41,
	8801 - 8208: jis0208<<14 | 0x01<<7 | 0x40,
	8806 - 8208: jis0208<<14 | 0x00<<7 | 0x44,
	8807 - 8208: jis0208<<14 | 0x00<<7 | 0x45,
	8810 - 8208: jis0208<<14 | 0x01<<7 | 0x42,
	8811 - 8208: jis0208<<14 | 0x01<<7 | 0x43,
	8834 - 8208: jis0208<<14 | 0x01<<7 | 0x1D,
	8835 - 8208: jis0208<<14 | 0x01<<7 | 0x1E,
	8838 - 8208: jis0208<<14 | 0x01<<7 | 0x1B,
	8839 - 8208: jis0208<<14 | 0x01<<7 | 0x1C,
	8869 - 8208: jis0208<<14 | 0x01<<7 | 0x3C,
	8895 - 8208: jis0208<<14 | 0x0C<<7 | 0x58,
	8978 - 8208: jis0208<<14 | 0x01<<7 | 0x3D,
	9312 - 8208: jis0208<<14 | 0x0C<<7 | 0x00,
	9313 - 8208: jis0208<<14 | 0x0C<<7 | 0x01,
	9314 - 8208: jis0208<<14 | 0x0C<<7 | 0x02,
	9315 - 8208: jis0208<<14 | 0x0C<<7 | 0x03,
	9316 - 8208: jis0208<<14 | 0x0C<<7 | 0x04,
	9317 - 8208: jis0208<<14 | 0x0C<<7 | 0x05,
	9318 - 8208: jis0208<<14 | 0x0C<<7 | 0x06,
	9319 - 8208: jis0208<<14 | 0x0C<<7 | 0x07,
	9320 - 8208: jis0208<<14 | 0x0C<<7 | 0x08,
	9321 - 8208: jis0208<<14 | 0x0C<<7 | 0x09,
	9322 - 8208: jis0208<<14 | 0x0C<<7 | 0x0A,
	9323 - 8208: jis0208<<14 | 0x0C<<7 | 0x0B,
	9324 - 8208: jis0208<<14 | 0x0C<<7 | 0x0C,
	9325 - 8208: jis0208<<14 | 0x0C<<7 | 0x0D,
	9326 - 8208: jis0208<<14 | 0x0C<<7 | 0x0E,
	9327 - 8208: jis0208<<14 | 0x0C<<7 | 0x0F,
	9328 - 8208: jis0208<<14 | 0x0C<<7 | 0x10,
	9329 - 8208: jis0208<<14 | 0x0C<<7 | 0x11,
	9330 - 8208: jis0208<<14 | 0x0C<<7 | 0x12,
	9331 - 8208: jis0208<<14 | 0x0C<<7 | 0x13,
	9472 - 8208: jis0208<<14 | 0x07<<7 | 0x00,
	9473 - 8208: jis0208<<14 | 0x07<<7 | 0x0B,
	9474 - 8208: jis0208<<14 | 0x07<<7 | 0x01,
	9475 - 8208: jis0208<<14 | 0x07<<7 | 0x0C,
	9484 - 8208: jis0208<<14 | 0x07<<7 | 0x02,
	9487 - 8208: jis0208<<14 | 0x07<<7 | 0x0D,
	9488 - 8208: jis0208<<14 | 0x07<<7 | 0x03,
	9491 - 8208: jis0208<<14 | 0x07<<7 | 0x0E,
	9492 - 8208: jis0208<<14 | 0x07<<7 | 0x05,
	9495 - 8208: jis0208<<14 | 0x07<<7 | 0x10,
	9496 - 8208: jis0208<<14 | 0x07<<7 | 0x04,
	9499 - 8208: jis0208<<14 | 0x07<<7 | 0x0F,
	9500 - 8208: jis0208<<14 | 0x07<<7 | 0x06,
	9501 - 8208: jis0208<<14 | 0x07<<7 | 0x1B,
	9504 - 8208: jis0208<<14 | 0x07<<7 | 0x16,
	9507 - 8208: jis0208<<14 | 0x07<<7 | 0x11,
	9508 - 8208: jis0208<<14 | 0x07<<7 | 0x08,
	9509 - 8208: jis0208<<14 | 0x07<<7 | 0x1D,
	9512 - 8208: jis0208<<14 | 0x07<<7 | 0x18,
	9515 - 8208: jis0208<<14 | 0x07<<7 | 0x13,
	9516 - 8208: jis0208<<14 | 0x07<<7 | 0x07,
	9519 - 8208: jis0208<<14 | 0x07<<7 | 0x17,
	9520 - 8208: jis0208<<14 | 0x07<<7 | 0x1C,
	9523 - 8208: jis0208<<14 | 0x07<<7 | 0x12,
	9524 - 8208: jis0208<<14 | 0x07<<7 | 0x09,
	9527 - 8208: jis0208<<14 | 0x07<<7 | 0x19,
	9528 - 8208: jis0208<<14 | 0x07<<7 | 0x1E,
	9531 - 8208: jis0208<<14 | 0x07<<7 | 0x14,
	9532 - 8208: jis0208<<14 | 0x07<<7 | 0x0A,
	9535 - 8208: jis0208<<14 | 0x07<<7 | 0x1A,
	9538 - 8208: jis0208<<14 | 0x07<<7 | 0x1F,
	9547 - 8208: jis0208<<14 | 0x07<<7 | 0x15,
	9632 - 8208: jis0208<<14 | 0x01<<7 | 0x02,
	9633 - 8208: jis0208<<14 | 0x01<<7 | 0x01,
	9650 - 8208: jis0208<<14 | 0x01<<7 | 0x04,
	9651 - 8208: jis0208<<14 | 0x01<<7 | 0x03,
	9660 - 8208: jis0208<<14 | 0x01<<7 | 0x06,
	9661 - 8208: jis0208<<14 | 0x01<<7 | 0x05,
	9670 - 8208: jis0208<<14 | 0x01<<7 | 0x00,
	9671 - 8208: jis0208<<14 | 0x00<<7 | 0x5D,
	9675 - 8208: jis0208<<14 | 0x00<<7 | 0x5A,
	9678 - 8208: jis0208<<14 | 0x00<<7 | 0x5C,
	9679 - 8208: jis0208<<14 | 0x00<<7 | 0x5B,
	9711 - 8208: jis0208<<14 | 0x01<<7 | 0x5D,
	9733 - 8208: jis0208<<14 | 0x00<<7 | 0x59,
	9734 - 8208: jis0208<<14 | 0x00<<7 | 0x58,
	9792 - 8208: jis0208<<14 | 0x00<<7 | 0x49,
	9794 - 8208: jis0208<<14 | 0x00<<7 | 0x48,
	9834 - 8208: jis0208<<14 | 0x01<<7 | 0x55,
	9837 - 8208: jis0208<<14 | 0x01<<7 | 0x54,
	9839 - 8208: jis0208<<14 | 0x01<<7 | 0x53,
}

const encode2Low, encode2High = 12288, 13262

var encode2 = [...]uint16{
	12288 - 12288: jis0208<<14 | 0x00<<7 | 0x00,
	12289 - 12288: jis0208<<14 | 0x00<<7 | 0x01,
	12290 - 12288: jis0208<<14 | 0x00<<7 | 0x02,
	12291 - 12288: jis0208<<14 | 0x00<<7 | 0x16,
	12293 - 12288: jis0208<<14 | 0x00<<7 | 0x18,
	12294 - 12288: jis0208<<14 | 0x00<<7 | 0x19,
	12295 - 12288: jis0208<<14 | 0x00<<7 | 0x1A,
	12296 - 12288: jis0208<<14 | 0x00<<7 | 0x31,
	12297 - 12288: jis0208<<14 | 0x00<<7 | 0x32,
	12298 - 12288: jis0208<<14 | 0x00<<7 | 0x33,
	12299 - 12288: jis0208<<14 | 0x00<<7 | 0x34,
	12300 - 12288: jis0208<<14 | 0x00<<7 | 0x35,
	12301 - 12288: jis0208<<14 | 0x00<<7 | 0x36,
	12302 - 12288: jis0208<<14 | 0x00<<7 | 0x37,
	12303 - 12288: jis0208<<14 | 0x00<<7 | 0x38,
	12304 - 12288: jis0208<<14 | 0x00<<7 | 0x39,
	12305 - 12288: jis0208<<14 | 0x00<<7 | 0x3A,
	12306 - 12288: jis0208<<14 | 0x01<<7 | 0x08,
	12307 - 12288: jis0208<<14 | 0x01<<7 | 0x0D,
	12308 - 12288: jis0208<<14 | 0x00<<7 | 0x2B,
	12309 - 12288: jis0208<<14 | 0x00<<7 | 0x2C,
	12317 - 12288: jis0208<<14 | 0x0C<<7 | 0x3F,
	12319 - 12288: jis0208<<14 | 0x0C<<7 | 0x40,
	12353 - 12288: jis0208<<14 | 0x03<<7 | 0x00,
	12354 - 12288: jis0208<<14 | 0x03<<7 | 0x01,
	12355 - 12288: jis0208<<14 | 0x03<<7 | 0x02,
	12356 - 12288: jis0208<<14 | 0x03<<7 | 0x03,
	12357 - 12288: jis0208<<14 | 0x03<<7 | 0x04,
	12358 - 12288: jis0208<<14 | 0x03<<7 | 0x05,
	12359 - 12288: jis0208<<14 | 0x03<<7 | 0x06,
	12360 - 12288: jis0208<<14 | 0x03<<7 | 0x07,
	12361 - 12288: jis0208<<14 | 0x03<<7 | 0x08,
	12362 - 12288: jis0208<<14 | 0x03<<7 | 0x09,
	12363 - 12288: jis0208<<14 | 0x03<<7 | 0x0A,
	12364 - 12288: jis0208<<14 | 0x03<<7 | 0x0B,
	12365 - 12288: jis0208<<14 | 0x03<<7 | 0x0C,
	12366 - 12288: jis0208<<14 | 0x03<<7 | 0x0D,
	12367 - 12288: jis0208<<14 | 0x03<<7 | 0x0E,
	12368 - 12288: jis0208<<14 | 0x03<<7 | 0x0F,
	12369 - 12288: jis0208<<14 | 0x03<<7 | 0x10,
	12370 - 12288: jis0208<<14 | 0x03<<7 | 0x11,
	12371 - 12288: jis0208<<14 | 0x03<<7 | 0x12,
	12372 - 12288: jis0208<<14 | 0x03<<7 | 0x13,
	12373 - 12288: jis0208<<14 | 0x03<<7 | 0x14,
	12374 - 12288: jis0208<<14 | 0x03<<7 | 0x15,
	12375 - 12288: jis0208<<14 | 0x03<<7 | 0x16,
	12376 - 12288: jis0208<<14 | 0x03<<7 | 0x17,
	12377 - 12288: jis0208<<14 | 0x03<<7 | 0x18,
	12378 - 12288: jis0208<<14 | 0x03<<7 | 0x19,
	12379 - 12288: jis0208<<14 | 0x03<<7 | 0x1A,
	12380 - 12288: jis0208<<14 | 0x03<<7 | 0x1B,
	12381 - 12288: jis0208<<14 | 0x03<<7 | 0x1C,
	12382 - 12288: jis0208<<14 | 0x03<<7 | 0x1D,
	12383 - 12288: jis0208<<14 | 0x03<<7 | 0x1E,
	12384 - 12288: jis0208<<14 | 0x03<<7 | 0x1F,
	12385 - 12288: jis0208<<14 | 0x03<<7 | 0x20,
	12386 - 12288: jis0208<<14 | 0x03<<7 | 0x21,
	12387 - 12288: jis0208<<14 | 0x03<<7 | 0x22,
	12388 - 12288: jis0208<<14 | 0x03<<7 | 0x23,
	12389 - 12288: jis0208<<14 | 0x03<<7 | 0x24,
	12390 - 12288: jis0208<<14 | 0x03<<7 | 0x25,
	12391 - 12288: jis0208<<14 | 0x03<<7 | 0x26,
	12392 - 12288: jis0208<<14 | 0x03<<7 | 0x27,
	12393 - 12288: jis0208<<14 | 0x03<<7 | 0x28,
	12394 - 12288: jis0208<<14 | 0x03<<7 | 0x29,
	12395 - 12288: jis0208<<14 | 0x03<<7 | 0x2A,
	12396 - 12288: jis0208<<14 | 0x03<<7 | 0x2B,
	12397 - 12288: jis0208<<14 | 0x03<<7 | 0x2C,
	12398 - 12288: jis0208<<14 | 0x03<<7 | 0x2D,
	12399 - 12288: jis0208<<14 | 0x03<<7 | 0x2E,
	12400 - 12288: jis0208<<14 | 0x03<<7 | 0x2F,
	12401 - 12288: jis0208<<14 | 0x03<<7 | 0x30,
	12402 - 12288: jis0208<<14 | 0x03<<7 | 0x31,
	12403 - 12288: jis0208<<14 | 0x03<<7 | 0x32,
	12404 - 12288: jis0208<<14 | 0x03<<7 | 0x33,
	12405 - 12288: jis0208<<14 | 0x03<<7 | 0x34,
	12406 - 12288: jis0208<<14 | 0x03<<7 | 0x35,
	12407 - 12288: jis0208<<14 | 0x03<<7 | 0x36,
	12408 - 12288: jis0208<<14 | 0x03<<7 | 0x37,
	12409 - 12288: jis0208<<14 | 0x03<<7 | 0x38,
	12410 - 12288: jis0208<<14 | 0x03<<7 | 0x39,
	12411 - 12288: jis0208<<14 | 0x03<<7 | 0x3A,
	12412 - 12288: jis0208<<14 | 0x03<<7 | 0x3B,
	12413 - 12288: jis0208<<14 | 0x03<<7 | 0x3C,
	12414 - 12288: jis0208<<14 | 0x03<<7 | 0x3D,
	12415 - 12288: jis0208<<14 | 0x03<<7 | 0x3E,
	12416 - 12288: jis0208<<14 | 0x03<<7 | 0x3F,
	12417 - 12288: jis0208<<14 | 0x03<<7 | 0x40,
	12418 - 12288: jis0208<<14 | 0x03<<7 | 0x41,
	12419 - 12288: jis0208<<14 | 0x03<<7 | 0x42,
	12420 - 12288: jis0208<<14 | 0x03<<7 | 0x43,
	12421 - 12288: jis0208<<14 | 0x03<<7 | 0x44,
	12422 - 12288: jis0208<<14 | 0x03<<7 | 0x45,
	12423 - 12288: jis0208<<14 | 0x03<<7 | 0x46,
	12424 - 12288: jis0208<<14 | 0x03<<7 | 0x47,
	12425 - 12288: jis0208<<14 | 0x03<<7 | 0x48,
	12426 - 12288: jis0208<<14 | 0x03<<7 | 0x49,
	12427 - 12288: jis0208<<14 | 0x03<<7 | 0x4A,
	12428 - 12288: jis0208<<14 | 0x03<<7 | 0x4B,
	12429 - 12288: jis0208<<14 | 0x03<<7 | 0x4C,
	12430 - 12288: jis0208<<14 | 0x03<<7 | 0x4D,
	12431 - 12288: jis0208<<14 | 0x03<<7 | 0x4E,
	12432 - 12288: jis0208<<14 | 0x03<<7 | 0x4F,
	12433 - 12288: jis0208<<14 | 0x03<<7 | 0x50,
	12434 - 12288: jis0208<<14 | 0x03<<7 | 0x51,
	12435 - 12288: jis0208<<14 | 0x03<<7 | 0x52,
	12443 - 12288: jis0208<<14 | 0x00<<7 | 0x0A,
	12444 - 12288: jis0208<<14 | 0x00<<7 | 0x0B,
	12445 - 12288: jis0208<<14 | 0x00<<7 | 0x14,
	12446 - 12288: jis0208<<14 | 0x00<<7 | 0x15,
	12449 - 12288: jis0208<<14 | 0x04<<7 | 0x00,
	12450 - 12288: jis0208<<14 | 0x04<<7 | 0x01,
	12451 - 12288: jis0208<<14 | 0x04<<7 | 0x02,
	12452 - 12288: jis0208<<14 | 0x04<<7 | 0x03,
	12453 - 12288: jis0208<<14 | 0x04<<7 | 0x04,
	12454 - 12288: jis0208<<14 | 0x04<<7 | 0x05,
	12455 - 12288: jis0208<<14 | 0x04<<7 | 0x06,
	12456 - 12288: jis0208<<14 | 0x04<<7 | 0x07,
	12457 - 12288: jis0208<<14 | 0x04<<7 | 0x08,
	12458 - 12288: jis0208<<14 | 0x04<<7 | 0x09,
	12459 - 12288: jis0208<<14 | 0x04<<7 | 0x0A,
	12460 - 12288: jis0208<<14 | 0x04<<7 | 0x0B,
	12461 - 12288: jis0208<<14 | 0x04<<7 | 0x0C,
	12462 - 12288: jis0208<<14 | 0x04<<7 | 0x0D,
	12463 - 12288: jis0208<<14 | 0x04<<7 | 0x0E,
	12464 - 12288: jis0208<<14 | 0x04<<7 | 0x0F,
	12465 - 12288: jis0208<<14 | 0x04<<7 | 0x10,
	12466 - 12288: jis0208<<14 | 0x04<<7 | 0x11,
	12467 - 12288: jis0208<<14 | 0x04<<7 | 0x12,
	12468 - 12288: jis0208<<14 | 0x04<<7 | 0x13,
	12469 - 12288: jis0208<<14 | 0x04<<7 | 0x14,
	12470 - 12288: jis0208<<14 | 0x04<<7 | 0x15,
	12471 - 12288: jis0208<<14 | 0x04<<7 | 0x16,
	12472 - 12288: jis0208<<14 | 0x04<<7 | 0x17,
	12473 - 12288: jis0208<<14 | 0x04<<7 | 0x18,
	12474 - 12288: jis0208<<14 | 0x04<<7 | 0x19,
	12475 - 12288: jis0208<<14 | 0x04<<7 | 0x1A,
	12476 - 12288: jis0208<<14 | 0x04<<7 | 0x1B,
	12477 - 12288: jis0208<<14 | 0x04<<7 | 0x1C,
	12478 - 12288: jis0208<<14 | 0x04<<7 | 0x1D,
	12479 - 12288: jis0208<<14 | 0x04<<7 | 0x1E,
	12480 - 12288: jis0208<<14 | 0x04<<7 | 0x1F,
	12481 - 12288: jis0208<<14 | 0x04<<7 | 0x20,
	12482 - 12288: jis0208<<14 | 0x04<<7 | 0x21,
	12483 - 12288: jis0208<<14 | 0x04<<7 | 0x22,
	12484 - 12288: jis0208<<14 | 0x04<<7 | 0x23,
	12485 - 12288: jis0208<<14 | 0x04<<7 | 0x24,
	12486 - 12288: jis0208<<14 | 0x04<<7 | 0x25,
	12487 - 12288: jis0208<<14 | 0x04<<7 | 0x26,
	12488 - 12288: jis0208<<14 | 0x04<<7 | 0x27,
	12489 - 12288: jis0208<<14 | 0x04<<7 | 0x28,
	12490 - 12288: jis0208<<14 | 0x04<<7 | 0x29,
	12491 - 12288: jis0208<<14 | 0x04<<7 | 0x2A,
	12492 - 12288: jis0208<<14 | 0x04<<7 | 0x2B,
	12493 - 12288: jis0208<<14 | 0x04<<7 | 0x2C,
	12494 - 12288: jis0208<<14 | 0x04<<7 | 0x2D,
	12495 - 12288: jis0208<<14 | 0x04<<7 | 0x2E,
	12496 - 12288: jis0208<<14 | 0x04<<7 | 0x2F,
	12497 - 12288: jis0208<<14 | 0x04<<7 | 0x30,
	12498 - 12288: jis0208<<14 | 0x04<<7 | 0x31,
	12499 - 12288: jis0208<<14 | 0x04<<7 | 0x32,
	12500 - 12288: jis0208<<14 | 0x04<<7 | 0x33,
	12501 - 12288: jis0208<<14 | 0x04<<7 | 0x34,
	12502 - 12288: jis0208<<14 | 0x04<<7 | 0x35,
	12503 - 12288: jis0208<<14 | 0x04<<7 | 0x36,
	12504 - 12288: jis0208<<14 | 0x04<<7 | 0x37,
	12505 - 12288: jis0208<<14 | 0x04<<7 | 0x38,
	12506 - 12288: jis0208<<14 | 0x04<<7 | 0x39,
	12507 - 12288: jis0208<<14 | 0x04<<7 | 0x3A,
	12508 - 12288: jis0208<<14 | 0x04<<7 | 0x3B,
	12509 - 12288: jis0208<<14 | 0x04<<7 | 0x3C,
	12510 - 12288: jis0208<<14 | 0x04<<7 | 0x3D,
	12511 - 12288: jis0208<<14 | 0x04<<7 | 0x3E,
	12512 - 12288: jis0208<<14 | 0x04<<7 | 0x3F,
	12513 - 12288: jis0208<<14 | 0x04<<7 | 0x40,
	12514 - 12288: jis0208<<14 | 0x04<<7 | 0x41,
	12515 - 12288: jis0208<<14 | 0x04<<7 | 0x42,
	12516 - 12288: jis0208<<14 | 0x04<<7 | 0x43,
	12517 - 12288: jis0208<<14 | 0x04<<7 | 0x44,
	12518 - 12288: jis0208<<14 | 0x04<<7 | 0x45,
	12519 - 12288: jis0208<<14 | 0x04<<7 | 0x46,
	12520 - 12288: jis0208<<14 | 0x04<<7 | 0x47,
	12521 - 12288: jis0208<<14 | 0x04<<7 | 0x48,
	12522 - 12288: jis0208<<14 | 0x04<<7 | 0x49,
	12523 - 12288: jis0208<<14 | 0x04<<7 | 0x4A,
	12524 - 12288: jis0208<<14 | 0x04<<7 | 0x4B,
	12525 - 12288: jis0208<<14 | 0x04<<7 | 0x4C,
	12526 - 12288: jis0208<<14 | 0x04<<7 | 0x4D,
	12527 - 12288: jis0208<<14 | 0x04<<7 | 0x4E,
	12528 - 12288: jis0208<<14 | 0x04<<7 | 0x4F,
	12529 - 12288: jis0208<<14 | 0x04<<7 | 0x50,
	12530 - 12288: jis0208<<14 | 0x04<<7 | 0x51,
	12531 - 12288: jis0208<<14 | 0x04<<7 | 0x52,
	12532 - 12288: jis0208<<14 | 0x04<<7 | 0x53,
	12533 - 12288: jis0208<<14 | 0x04<<7 | 0x54,
	12534 - 12288: jis0208<<14 | 0x04<<7 | 0x55,
	12539 - 12288: jis0208<<14 | 0x00<<7 | 0x05,
	12540 - 12288: jis0208<<14 | 0x00<<7 | 0x1B,
	12541 - 12288: jis0208<<14 | 0x00<<7 | 0x12,
	12542 - 12288: jis0208<<14 | 0x00<<7 | 0x13,
	12849 - 12288: jis0208<<14 | 0x0C<<7 | 0x49,
	12850 - 12288: jis0208<<14 | 0x0C<<7 | 0x4A,
	12857 - 12288: jis0208<<14 | 0x0C<<7 | 0x4B,
	12964 - 12288: jis0208<<14 | 0x0C<<7 | 0x44,
	12965 - 12288: jis0208<<14 | 0x0C<<7 | 0x45,
	12966 - 12288: jis0208<<14 | 0x0C<<7 | 0x46,
	12967 - 12288: jis0208<<14 | 0x0C<<7 | 0x47,
	12968 - 12288: jis0208<<14 | 0x0C<<7 | 0x48,
	13059 - 12288: jis0208<<14 | 0x0C<<7 | 0x25,
	13069 - 12288: jis0208<<14 | 0x0C<<7 | 0x29,
	13076 - 12288: jis0208<<14 | 0x0C<<7 | 0x20,
	13080 - 12288: jis0208<<14 | 0x0C<<7 | 0x23,
	13090 - 12288: jis0208<<14 | 0x0C<<7 | 0x21,
	13091 - 12288: jis0208<<14 | 0x0C<<7 | 0x2B,
	13094 - 12288: jis0208<<14 | 0x0C<<7 | 0x2A,
	13095 - 12288: jis0208<<14 | 0x0C<<7 | 0x24,
	13099 - 12288: jis0208<<14 | 0x0C<<7 | 0x2C,
	13110 - 12288: jis0208<<14 | 0x0C<<7 | 0x26,
	13115 - 12288: jis0208<<14 | 0x0C<<7 | 0x2E,
	13129 - 12288: jis0208<<14 | 0x0C<<7 | 0x1F,
	13130 - 12288: jis0208<<14 | 0x0C<<7 | 0x2D,
	13133 - 12288: jis0208<<14 | 0x0C<<7 | 0x22,
	13137 - 12288: jis0208<<14 | 0x0C<<7 | 0x27,
	13143 - 12288: jis0208<<14 | 0x0C<<7 | 0x28,
	13179 - 12288: jis0208<<14 | 0x0C<<7 | 0x3E,
	13180 - 12288: jis0208<<14 | 0x0C<<7 | 0x4E,
	13181 - 12288: jis0208<<14 | 0x0C<<7 | 0x4D,
	13182 - 12288: jis0208<<14 | 0x0C<<7 | 0x4C,
	13198 - 12288: jis0208<<14 | 0x0C<<7 | 0x32,
	13199 - 12288: jis0208<<14 | 0x0C<<7 | 0x33,
	13212 - 12288: jis0208<<14 | 0x0C<<7 | 0x2F,
	13213 - 12288: jis0208<<14 | 0x0C<<7 | 0x30,
	13214 - 12288: jis0208<<14 | 0x0C<<7 | 0x31,
	13217 - 12288: jis0208<<14 | 0x0C<<7 | 0x35,
	13252 - 12288: jis0208<<14 | 0x0C<<7 | 0x34,
	13261 - 12288: jis0208<<14 | 0x0C<<7 | 0x42,
}

const encode3Low, encode3High = 161, 1120

var encode3 = [...]uint16{
	161 - 161:  jis0212<<14 | 0x01<<7 | 0x21,
	164 - 161:  jis0212<<14 | 0x01<<7 | 0x4F,
	166 - 161:  jis0212<<14 | 0x01<<7 | 0x22,
	167 - 161:  jis0208<<14 | 0x00<<7 | 0x57,
	168 - 161:  jis0208<<14 | 0x00<<7 | 0x0E,
	169 - 161:  jis0212<<14 | 0x01<<7 | 0x4C,
	170 - 161:  jis0212<<14 | 0x01<<7 | 0x4B,
	174 - 161:  jis0212<<14 | 0x01<<7 | 0x4D,
	175 - 161:  jis0212<<14 | 0x01<<7 | 0x13,
	176 - 161:  jis0208<<14 | 0x00<<7 | 0x4A,
	177 - 161:  jis0208<<14 | 0x00<<7 | 0x3D,
	180 - 161:  jis0208<<14 | 0x00<<7 | 0x0C,
	182 - 161:  jis0208<<14 | 0x01<<7 | 0x58,
	184 - 161:  jis0212<<14 | 0x01<<7 | 0x10,
	186 - 161:  jis0212<<14 | 0x01<<7 | 0x4A,
	191 - 161:  jis0212<<14 | 0x01<<7 | 0x23,
	192 - 161:  jis0212<<14 | 0x09<<7 | 0x01,
	193 - 161:  jis0212<<14 | 0x09<<7 | 0x00,
	194 - 161:  jis0212<<14 | 0x09<<7 | 0x03,
	195 - 161:  jis0212<<14 | 0x09<<7 | 0x09,
	196 - 161:  jis0212<<14 | 0x09<<7 | 0x02,
	197 - 161:  jis0212<<14 | 0x09<<7 | 0x08,
	198 - 161:  jis0212<<14 | 0x08<<7 | 0x00,
	199 - 161:  jis0212<<14 | 0x09<<7 | 0x0D,
	200 - 161:  jis0212<<14 | 0x09<<7 | 0x11,
	201 - 161:  jis0212<<14 | 0x09<<7 | 0x10,
	202 - 161:  jis0212<<14 | 0x09<<7 | 0x13,
	203 - 161:  jis0212<<14 | 0x09<<7 | 0x12,
	204 - 161:  jis0212<<14 | 0x09<<7 | 0x1F,
	205 - 161:  jis0212<<14 | 0x09<<7 | 0x1E,
	206 - 161:  jis0212<<14 | 0x09<<7 | 0x21,
	207 - 161:  jis0212<<14 | 0x09<<7 | 0x20,
	209 - 161:  jis0212<<14 | 0x09<<7 | 0x2F,
	210 - 161:  jis0212<<14 | 0x09<<7 | 0x31,
	211 - 161:  jis0212<<14 | 0x09<<7 | 0x30,
	212 - 161:  jis0212<<14 | 0x09<<7 | 0x33,
	213 - 161:  jis0212<<14 | 0x09<<7 | 0x37,
	214 - 161:  jis0212<<14 | 0x09<<7 | 0x32,
	215 - 161:  jis0208<<14 | 0x00<<7 | 0x3E,
	216 - 161:  jis0212<<14 | 0x08<<7 | 0x0B,
	217 - 161:  jis0212<<14 | 0x09<<7 | 0x42,
	218 - 161:  jis0212<<14 | 0x09<<7 | 0x41,
	219 - 161:  jis0212<<14 | 0x09<<7 | 0x44,
	220 - 161:  jis0212<<14 | 0x09<<7 | 0x43,
	221 - 161:  jis0212<<14 | 0x09<<7 | 0x51,
	222 - 161:  jis0212<<14 | 0x08<<7 | 0x0F,
	223 - 161:  jis0212<<14 | 0x08<<7 | 0x2D,
	224 - 161:  jis0212<<14 | 0x0A<<7 | 0x01,
	225 - 161:  jis0212<<14 | 0x0A<<7 | 0x00,
	226 - 161:  jis0212<<14 | 0x0A<<7 | 0x03,
	227 - 161:  jis0212<<14 | 0x0A<<7 | 0x09,
	228 - 161:  jis0212<<14 | 0x0A<<7 | 0x02,
	229 - 161:  jis0212<<14 | 0x0A<<7 | 0x08,
	230 - 161:  jis0212<<14 | 0x08<<7 | 0x20,
	231 - 161:  jis0212<<14 | 0x0A<<7 | 0x0D,
	232 - 161:  jis0212<<14 | 0x0A<<7 | 0x11,
	233 - 161:  jis0212<<14 | 0x0A<<7 | 0x10,
	234 - 161:  jis0212<<14 | 0x0A<<7 | 0x13,
	235 - 161:  jis0212<<14 | 0x0A<<7 | 0x12,
	236 - 161:  jis0212<<14 | 0x0A<<7 | 0x1F,
	237 - 161:  jis0212<<14 | 0x0A<<7 | 0x1E,
	238 - 161:  jis0212<<14 | 0x0A<<7 | 0x21,
	239 - 161:  jis0212<<14 | 0x0A<<7 | 0x20,
	240 - 161:  jis0212<<14 | 0x08<<7 | 0x22,
	241 - 161:  jis0212<<14 | 0x0A<<7 | 0x2F,
	242 - 161:  jis0212<<14 | 0x0A<<7 | 0x31,
	243 - 161:  jis0212<<14 | 0x0A<<7 | 0x30,
	244 - 161:  jis0212<<14 | 0x0A<<7 | 0x33,
	245 - 161:  jis0212<<14 | 0x0A<<7 | 0x37,
	246 - 161:  jis0212<<14 | 0x0A<<7 | 0x32,
	247 - 161:  jis0208<<14 | 0x00<<7 | 0x3F,
	248 - 161:  jis0212<<14 | 0x08<<7 | 0x2B,
	249 - 161:  jis0212<<14 | 0x0A<<7 | 0x42,
	250 - 161:  jis0212<<14 | 0x0A<<7 | 0x41,
	251 - 161:  jis0212<<14 | 0x0A<<7 | 0x44,
	252 - 161:  jis0212<<14 | 0x0A<<7 | 0x43,
	253 - 161:  jis0212<<14 | 0x0A<<7 | 0x51,
	254 - 161:  jis0212<<14 | 0x08<<7 | 0x2F,
	255 - 161:  jis0212<<14 | 0x0A<<7 | 0x52,
	256 - 161:  jis0212<<14 | 0x09<<7 | 0x06,
	257 - 161:  jis0212<<14 | 0x0A<<7 | 0x06,
	258 - 161:  jis0212<<14 | 0x09<<7 | 0x04,
	259 - 161:  jis0212<<14 | 0x0A<<7 | 0x04,
	260 - 161:  jis0212<<14 | 0x09<<7 | 0x07,
	261 - 161:  jis0212<<14 | 0x0A<<7 | 0x07,
	262 - 161:  jis0212<<14 | 0x09<<7 | 0x0A,
	263 - 161:  jis0212<<14 | 0x0A<<7 | 0x0A,
	264 - 161:  jis0212<<14 | 0x09<<7 | 0x0B,
	265 - 161:  jis0212<<14 | 0x0A<<7 | 0x0B,
	266 - 161:  jis0212<<14 | 0x09<<7 | 0x0E,
	267 - 161:  jis0212<<14 | 0x0A<<7 | 0x0E,
	268 - 161:  jis0212<<14 | 0x09<<7 | 0x0C,
	269 - 161:  jis0212<<14 | 0x0A<<7 | 0x0C,
	270 - 161:  jis0212<<14 | 0x09<<7 | 0x0F,
	271 - 161:  jis0212<<14 | 0x0A<<7 | 0x0F,
	272 - 161:  jis0212<<14 | 0x08<<7 | 0x01,
	273 - 161:  jis0212<<14 | 0x08<<7 | 0x21,
	274 - 161:  jis0212<<14 | 0x09<<7 | 0x16,
	275 - 161:  jis0212<<14 | 0x0A<<7 | 0x16,
	278 - 161:  jis0212<<14 | 0x09<<7 | 0x15,
	279 - 161:  jis0212<<14 | 0x0A<<7 | 0x15,
	280 - 161:  jis0212<<14 | 0x09<<7 | 0x17,
	281 - 161:  jis0212<<14 | 0x0A<<7 | 0x17,
	282 - 161:  jis0212<<14 | 0x09<<7 | 0x14,
	283 - 161:  jis0212<<14 | 0x0A<<7 | 0x14,
	284 - 161:  jis0212<<14 | 0x09<<7 | 0x19,
	285 - 161:  jis0212<<14 | 0x0A<<7 | 0x19,
	286 - 161:  jis0212<<14 | 0x09<<7 | 0x1A,
	287 - 161:  jis0212<<14 | 0x0A<<7 | 0x1A,
	288 - 161:  jis0212<<14 | 0x09<<7 | 0x1C,
	289 - 161:  jis0212<<14 | 0x0A<<7 | 0x1C,
	290 - 161:  jis0212<<14 | 0x09<<7 | 0x1B,
	292 - 161:  jis0212<<14 | 0x09<<7 | 0x1D,
	293 - 161:  jis0212<<14 | 0x0A<<7 | 0x1D,
	294 - 161:  jis0212<<14 | 0x08<<7 | 0x03,
	295 - 161:  jis0212<<14 | 0x08<<7 | 0x23,
	296 - 161:  jis0212<<14 | 0x09<<7 | 0x26,
	297 - 161:  jis0212<<14 | 0x0A<<7 | 0x26,
	298 - 161:  jis0212<<14 | 0x09<<7 | 0x24,
	299 - 161:  jis0212<<14 | 0x0A<<7 | 0x24,
	302 - 161:  jis0212<<14 | 0x09<<7 | 0x25,
	303 - 161:  jis0212<<14 | 0x0A<<7 | 0x25,
	304 - 161:  jis0212<<14 | 0x09<<7 | 0x23,
	305 - 161:  jis0212<<14 | 0x08<<7 | 0x24,
	306 - 161:  jis0212<<14 | 0x08<<7 | 0x05,
	307 - 161:  jis0212<<14 | 0x08<<7 | 0x25,
	308 - 161:  jis0212<<14 | 0x09<<7 | 0x27,
	309 - 161:  jis0212<<14 | 0x0A<<7 | 0x27,
	310 - 161:  jis0212<<14 | 0x09<<7 | 0x28,
	311 - 161:  jis0212<<14 | 0x0A<<7 | 0x28,
	312 - 161:  jis0212<<14 | 0x08<<7 | 0x26,
	313 - 161:  jis0212<<14 | 0x09<<7 | 0x29,
	314 - 161:  jis0212<<14 | 0x0A<<7 | 0x29,
	315 - 161:  jis0212<<14 | 0x09<<7 | 0x2B,
	316 - 161:  jis0212<<14 | 0x0A<<7 | 0x2B,
	317 - 161:  jis0212<<14 | 0x09<<7 | 0x2A,
	318 - 161:  jis0212<<14 | 0x0A<<7 | 0x2A,
	319 - 161:  jis0212<<14 | 0x08<<7 | 0x08,
	320 - 161:  jis0212<<14 | 0x08<<7 | 0x28,
	321 - 161:  jis0212<<14 | 0x08<<7 | 0x07,
	322 - 161:  jis0212<<14 | 0x08<<7 | 0x27,
	323 - 161:  jis0212<<14 | 0x09<<7 | 0x2C,
	324 - 161:  jis0212<<14 | 0x0A<<7 | 0x2C,
	325 - 161:  jis0212<<14 | 0x09<<7 | 0x2E,
	326 - 161:  jis0212<<14 | 0x0A<<7 | 0x2E,
	327 - 161:  jis0212<<14 | 0x09<<7 | 0x2D,
	328 - 161:  jis0212<<14 | 0x0A<<7 | 0x2D,
	329 - 161:  jis0212<<14 | 0x08<<7 | 0x29,
	330 - 161:  jis0212<<14 | 0x08<<7 | 0x0A,
	331 - 161:  jis0212<<14 | 0x08<<7 | 0x2A,
	332 - 161:  jis0212<<14 | 0x09<<7 | 0x36,
	333 - 161:  jis0212<<14 | 0x0A<<7 | 0x36,
	336 - 161:  jis0212<<14 | 0x09<<7 | 0x35,
	337 - 161:  jis0212<<14 | 0x0A<<7 | 0x35,
	338 - 161:  jis0212<<14 | 0x08<<7 | 0x0C,
	339 - 161:  jis0212<<14 | 0x08<<7 | 0x2C,
	340 - 161:  jis0212<<14 | 0x09<<7 | 0x38,
	341 - 161:  jis0212<<14 | 0x0A<<7 | 0x38,
	342 - 161:  jis0212<<14 | 0x09<<7 | 0x3A,
	343 - 161:  jis0212<<14 | 0x0A<<7 | 0x3A,
	344 - 161:  jis0212<<14 | 0x09<<7 | 0x39,
	345 - 161:  jis0212<<14 | 0x0A<<7 | 0x39,
	346 - 161:  jis0212<<14 | 0x09<<7 | 0x3B,
	347 - 161:  jis0212<<14 | 0x0A<<7 | 0x3B,
	348 - 161:  jis0212<<14 | 0x09<<7 | 0x3C,
	349 - 161:  jis0212<<14 | 0x0A<<7 | 0x3C,
	350 - 161:  jis0212<<14 | 0x09<<7 | 0x3E,
	351 - 161:  jis0212<<14 | 0x0A<<7 | 0x3E,
	352 - 161:  jis0212<<14 | 0x09<<7 | 0x3D,
	353 - 161:  jis0212<<14 | 0x0A<<7 | 0x3D,
	354 - 161:  jis0212<<14 | 0x09<<7 | 0x40,
	355 - 161:  jis0212<<14 | 0x0A<<7 | 0x40,
	356 - 161:  jis0212<<14 | 0x09<<7 | 0x3F,
	357 - 161:  jis0212<<14 | 0x0A<<7 | 0x3F,
	358 - 161:  jis0212<<14 | 0x08<<7 | 0x0E,
	359 - 161:  jis0212<<14 | 0x08<<7 | 0x2E,
	360 - 161:  jis0212<<14 | 0x09<<7 | 0x4B,
	361 - 161:  jis0212<<14 | 0x0A<<7 | 0x4B,
	362 - 161:  jis0212<<14 | 0x09<<7 | 0x48,
	363 - 161:  jis0212<<14 | 0x0A<<7 | 0x48,
	364 - 161:  jis0212<<14 | 0x09<<7 | 0x45,
	365 - 161:  jis0212<<14 | 0x0A<<7 | 0x45,
	366 - 161:  jis0212<<14 | 0x09<<7 | 0x4A,
	367 - 161:  jis0212<<14 | 0x0A<<7 | 0x4A,
	368 - 161:  jis0212<<14 | 0x09<<7 | 0x47,
	369 - 161:  jis0212<<14 | 0x0A<<7 | 0x47,
	370 - 161:  jis0212<<14 | 0x09<<7 | 0x49,
	371 - 161:  jis0212<<14 | 0x0A<<7 | 0x49,
	372 - 161:  jis0212<<14 | 0x09<<7 | 0x50,
	373 - 161:  jis0212<<14 | 0x0A<<7 | 0x50,
	374 - 161:  jis0212<<14 | 0x09<<7 | 0x53,
	375 - 161:  jis0212<<14 | 0x0A<<7 | 0x53,
	376 - 161:  jis0212<<14 | 0x09<<7 | 0x52,
	377 - 161:  jis0212<<14 | 0x09<<7 | 0x54,
	378 - 161:  jis0212<<14 | 0x0A<<7 | 0x54,
	379 - 161:  jis0212<<14 | 0x09<<7 | 0x56,
	380 - 161:  jis0212<<14 | 0x0A<<7 | 0x56,
	381 - 161:  jis0212<<14 | 0x09<<7 | 0x55,
	382 - 161:  jis0212<<14 | 0x0A<<7 | 0x55,
	461 - 161:  jis0212<<14 | 0x09<<7 | 0x05,
	462 - 161:  jis0212<<14 | 0x0A<<7 | 0x05,
	463 - 161:  jis0212<<14 | 0x09<<7 | 0x22,
	464 - 161:  jis0212<<14 | 0x0A<<7 | 0x22,
	465 - 161:  jis0212<<14 | 0x09<<7 | 0x34,
	466 - 161:  jis0212<<14 | 0x0A<<7 | 0x34,
	467 - 161:  jis0212<<14 | 0x09<<7 | 0x46,
	468 - 161:  jis0212<<14 | 0x0A<<7 | 0x46,
	469 - 161:  jis0212<<14 | 0x09<<7 | 0x4F,
	470 - 161:  jis0212<<14 | 0x0A<<7 | 0x4F,
	471 - 161:  jis0212<<14 | 0x09<<7 | 0x4C,
	472 - 161:  jis0212<<14 | 0x0A<<7 | 0x4C,
	473 - 161:  jis0212<<14 | 0x09<<7 | 0x4E,
	474 - 161:  jis0212<<14 | 0x0A<<7 | 0x4E,
	475 - 161:  jis0212<<14 | 0x09<<7 | 0x4D,
	476 - 161:  jis0212<<14 | 0x0A<<7 | 0x4D,
	501 - 161:  jis0212<<14 | 0x0A<<7 | 0x18,
	711 - 161:  jis0212<<14 | 0x01<<7 | 0x0F,
	728 - 161:  jis0212<<14 | 0x01<<7 | 0x0E,
	729 - 161:  jis0212<<14 | 0x01<<7 | 0x11,
	730 - 161:  jis0212<<14 | 0x01<<7 | 0x15,
	731 - 161:  jis0212<<14 | 0x01<<7 | 0x14,
	733 - 161:  jis0212<<14 | 0x01<<7 | 0x12,
	900 - 161:  jis0212<<14 | 0x01<<7 | 0x17,
	901 - 161:  jis0212<<14 | 0x01<<7 | 0x18,
	902 - 161:  jis0212<<14 | 0x05<<7 | 0x40,
	904 - 161:  jis0212<<14 | 0x05<<7 | 0x41,
	905 - 161:  jis0212<<14 | 0x05<<7 | 0x42,
	906 - 161:  jis0212<<14 | 0x05<<7 | 0x43,
	908 - 161:  jis0212<<14 | 0x05<<7 | 0x46,
	910 - 161:  jis0212<<14 | 0x05<<7 | 0x48,
	911 - 161:  jis0212<<14 | 0x05<<7 | 0x4B,
	912 - 161:  jis0212<<14 | 0x05<<7 | 0x55,
	913 - 161:  jis0208<<14 | 0x05<<7 | 0x00,
	914 - 161:  jis0208<<14 | 0x05<<7 | 0x01,
	915 - 161:  jis0208<<14 | 0x05<<7 | 0x02,
	916 - 161:  jis0208<<14 | 0x05<<7 | 0x03,
	917 - 161:  jis0208<<14 | 0x05<<7 | 0x04,
	918 - 161:  jis0208<<14 | 0x05<<7 | 0x05,
	919 - 161:  jis0208<<14 | 0x05<<7 | 0x06,
	920 - 161:  jis0208<<14 | 0x05<<7 | 0x07,
	921 - 161:  jis0208<<14 | 0x05<<7 | 0x08,
	922 - 161:  jis0208<<14 | 0x05<<7 | 0x09,
	923 - 161:  jis0208<<14 | 0x05<<7 | 0x0A,
	924 - 161:  jis0208<<14 | 0x05<<7 | 0x0B,
	925 - 161:  jis0208<<14 | 0x05<<7 | 0x0C,
	926 - 161:  jis0208<<14 | 0x05<<7 | 0x0D,
	927 - 161:  jis0208<<14 | 0x05<<7 | 0x0E,
	928 - 161:  jis0208<<14 | 0x05<<7 | 0x0F,
	929 - 161:  jis0208<<14 | 0x05<<7 | 0x10,
	931 - 161:  jis0208<<14 | 0x05<<7 | 0x11,
	932 - 161:  jis0208<<14 | 0x05<<7 | 0x12,
	933 - 161:  jis0208<<14 | 0x05<<7 | 0x13,
	934 - 161:  jis0208<<14 | 0x05<<7 | 0x14,
	935 - 161:  jis0208<<14 | 0x05<<7 | 0x15,
	936 - 161:  jis0208<<14 | 0x05<<7 | 0x16,
	937 - 161:  jis0208<<14 | 0x05<<7 | 0x17,
	938 - 161:  jis0212<<14 | 0x05<<7 | 0x44,
	939 - 161:  jis0212<<14 | 0x05<<7 | 0x49,
	940 - 161:  jis0212<<14 | 0x05<<7 | 0x50,
	941 - 161:  jis0212<<14 | 0x05<<7 | 0x51,
	942 - 161:  jis0212<<14 | 0x05<<7 | 0x52,
	943 - 161:  jis0212<<14 | 0x05<<7 | 0x53,
	944 - 161:  jis0212<<14 | 0x05<<7 | 0x5A,
	945 - 161:  jis0208<<14 | 0x05<<7 | 0x20,
	946 - 161:  jis0208<<14 | 0x05<<7 | 0x21,
	947 - 161:  jis0208<<14 | 0x05<<7 | 0x22,
	948 - 161:  jis0208<<14 | 0x05<<7 | 0x23,
	949 - 161:  jis0208<<14 | 0x05<<7 | 0x24,
	950 - 161:  jis0208<<14 | 0x05<<7 | 0x25,
	951 - 161:  jis0208<<14 | 0x05<<7 | 0x26,
	952 - 161:  jis0208<<14 | 0x05<<7 | 0x27,
	953 - 161:  jis0208<<14 | 0x05<<7 | 0x28,
	954 - 161:  jis0208<<14 | 0x05<<7 | 0x29,
	955 - 161:  jis0208<<14 | 0x05<<7 | 0x2A,
	956 - 161:  jis0208<<14 | 0x05<<7 | 0x2B,
	957 - 161:  jis0208<<14 | 0x05<<7 | 0x2C,
	958 - 161:  jis0208<<14 | 0x05<<7 | 0x2D,
	959 - 161:  jis0208<<14 | 0x05<<7 | 0x2E,
	960 - 161:  jis0208<<14 | 0x05<<7 | 0x2F,
	961 - 161:  jis0208<<14 | 0x05<<7 | 0x30,
	962 - 161:  jis0212<<14 | 0x05<<7 | 0x57,
	963 - 161:  jis0208<<14 | 0x05<<7 | 0x31,
	964 - 161:  jis0208<<14 | 0x05<<7 | 0x32,
	965 - 161:  jis0208<<14 | 0x05<<7 | 0x33,
	966 - 161:  jis0208<<14 | 0x05<<7 | 0x34,
	967 - 161:  jis0208<<14 | 0x05<<7 | 0x35,
	968 - 161:  jis0208<<14 | 0x05<<7 | 0x36,
	969 - 161:  jis0208<<14 | 0x05<<7 | 0x37,
	970 - 161:  jis0212<<14 | 0x05<<7 | 0x54,
	971 - 161:  jis0212<<14 | 0x05<<7 | 0x59,
	972 - 161:  jis0212<<14 | 0x05<<7 | 0x56,
	973 - 161:  jis0212<<14 | 0x05<<7 | 0x58,
	974 - 161:  jis0212<<14 | 0x05<<7 | 0x5B,
	1025 - 161: jis0208<<14 | 0x06<<7 | 0x06,
	1026 - 161: jis0212<<14 | 0x06<<7 | 0x21,
	1027 - 161: jis0212<<14 | 0x06<<7 | 0x22,
	1028 - 161: jis0212<<14 | 0x06<<7 | 0x23,
	1029 - 161: jis0212<<14 | 0x06<<7 | 0x24,
	1030 - 161: jis0212<<14 | 0x06<<7 | 0x25,
	1031 - 161: jis0212<<14 | 0x06<<7 | 0x26,
	1032 - 161: jis0212<<14 | 0x06<<7 | 0x27,
	1033 - 161: jis0212<<14 | 0x06<<7 | 0x28,
	1034 - 161: jis0212<<14 | 0x06<<7 | 0x29,
	1035 - 161: jis0212<<14 | 0x06<<7 | 0x2A,
	1036 - 161: jis0212<<14 | 0x06<<7 | 0x2B,
	1038 - 161: jis0212<<14 | 0x06<<7 | 0x2C,
	1039 - 161: jis0212<<14 | 0x06<<7 | 0x2D,
	1040 - 161: jis0208<<14 | 0x06<<7 | 0x00,
	1041 - 161: jis0208<<14 | 0x06<<7 | 0x01,
	1042 - 161: jis0208<<14 | 0x06<<7 | 0x02,
	1043 - 161: jis0208<<14 | 0x06<<7 | 0x03,
	1044 - 161: jis0208<<14 | 0x06<<7 | 0x04,
	1045 - 161: jis0208<<14 | 0x06<<7 | 0x05,
	1046 - 161: jis0208<<14 | 0x06<<7 | 0x07,
	1047 - 161: jis0208<<14 | 0x06<<7 | 0x08,
	1048 - 161: jis0208<<14 | 0x06<<7 | 0x09,
	1049 - 161: jis0208<<14 | 0x06<<7 | 0x0A,
	1050 - 161: jis0208<<14 | 0x06<<7 | 0x0B,
	1051 - 161: jis0208<<14 | 0x06<<7 | 0x0C,
	1052 - 161: jis0208<<14 | 0x06<<7 | 0x0D,
	1053 - 161: jis0208<<14 | 0x06<<7 | 0x0E,
	1054 - 161: jis0208<<14 | 0x06<<7 | 0x0F,
	1055 - 161: jis0208<<14 | 0x06<<7 | 0x10,
	1056 - 161: jis0208<<14 | 0x06<<7 | 0x11,
	1057 - 161: jis0208<<14 | 0x06<<7 | 0x12,
	1058 - 161: jis0208<<14 | 0x06<<7 | 0x13,
	1059 - 161: jis0208<<14 | 0x06<<7 | 0x14,
	1060 - 161: jis0208<<14 | 0x06<<7 | 0x15,
	1061 - 161: jis0208<<14 | 0x06<<7 | 0x16,
	1062 - 161: jis0208<<14 | 0x06<<7 | 0x17,
	1063 - 161: jis0208<<14 | 0x06<<7 | 0x18,
	1064 - 161: jis0208<<14 | 0x06<<7 | 0x19,
	1065 - 161: jis0208<<14 | 0x06<<7 | 0x1A,
	1066 - 161: jis0208<<14 | 0x06<<7 | 0x1B,
	1067 - 161: jis0208<<14 | 0x06<<7 | 0x1C,
	1068 - 161: jis0208<<14 | 0x06<<7 | 0x1D,
	1069 - 161: jis0208<<14 | 0x06<<7 | 0x1E,
	1070 - 161: jis0208<<14 | 0x06<<7 | 0x1F,
	1071 - 161: jis0208<<14 | 0x06<<7 | 0x20,
	1072 - 161: jis0208<<14 | 0x06<<7 | 0x30,
	1073 - 161: jis0208<<14 | 0x06<<7 | 0x31,
	1074 - 161: jis0208<<14 | 0x06<<7 | 0x32,
	1075 - 161: jis0208<<14 | 0x06<<7 | 0x33,
	1076 - 161: jis0208<<14 | 0x06<<7 | 0x34,
	1077 - 161: jis0208<<14 | 0x06<<7 | 0x35,
	1078 - 161: jis0208<<14 | 0x06<<7 | 0x37,
	1079 - 161: jis0208<<14 | 0x06<<7 | 0x38,
	1080 - 161: jis0208<<14 | 0x06<<7 | 0x39,
	1081 - 161: jis0208<<14 | 0x06<<7 | 0x3A,
	1082 - 161: jis0208<<14 | 0x06<<7 | 0x3B,
	1083 - 161: jis0208<<14 | 0x06<<7 | 0x3C,
	1084 - 161: jis0208<<14 | 0x06<<7 | 0x3D,
	1085 - 161: jis0208<<14 | 0x06<<7 | 0x3E,
	1086 - 161: jis0208<<14 | 0x06<<7 | 0x3F,
	1087 - 161: jis0208<<14 | 0x06<<7 | 0x40,
	1088 - 161: jis0208<<14 | 0x06<<7 | 0x41,
	1089 - 161: jis0208<<14 | 0x06<<7 | 0x42,
	1090 - 161: jis0208<<14 | 0x06<<7 | 0x43,
	1091 - 161: jis0208<<14 | 0x06<<7 | 0x44,
	1092 - 161: jis0208<<14 | 0x06<<7 | 0x45,
	1093 - 161: jis0208<<14 | 0x06<<7 | 0x46,
	1094 - 161: jis0208<<14 | 0x06<<7 | 0x47,
	1095 - 161: jis0208<<14 | 0x06<<7 | 0x48,
	1096 - 161: jis0208<<14 | 0x06<<7 | 0x49,
	1097 - 161: jis0208<<14 | 0x06<<7 | 0x4A,
	1098 - 161: jis0208<<14 | 0x06<<7 | 0x4B,
	1099 - 161: jis0208<<14 | 0x06<<7 | 0x4C,
	1100 - 161: jis0208<<14 | 0x06<<7 | 0x4D,
	1101 - 161: jis0208<<14 | 0x06<<7 | 0x4E,
	1102 - 161: jis0208<<14 | 0x06<<7 | 0x4F,
	1103 - 161: jis0208<<14 | 0x06<<7 | 0x50,
	1105 - 161: jis0208<<14 | 0x06<<7 | 0x36,
	1106 - 161: jis0212<<14 | 0x06<<7 | 0x51,
	1107 - 161: jis0212<<14 | 0x06<<7 | 0x52,
	1108 - 161: jis0212<<14 | 0x06<<7 | 0x53,
	1109 - 161: jis0212<<14 | 0x06<<7 | 0x54,
	1110 - 161: jis0212<<14 | 0x06<<7 | 0x55,
	1111 - 161: jis0212<<14 | 0x06<<7 | 0x56,
	1112 - 161: jis0212<<14 | 0x06<<7 | 0x57,
	1113 - 161: jis0212<<14 | 0x06<<7 | 0x58,
	1114 - 161: jis0212<<14 | 0x06<<7 | 0x59,
	1115 - 161: jis0212<<14 | 0x06<<7 | 0x5A,
	1116 - 161: jis0212<<14 | 0x06<<7 | 0x5B,
	1118 - 161: jis0212<<14 | 0x06<<7 | 0x5C,
	1119 - 161: jis0212<<14 | 0x06<<7 | 0x5D,
}

const encode4Low, encode4High = 63785, 64046

var encode4 = [...]uint16{
	63785 - 63785: jis0208<<14 | 0x59<<7 | 0x25,
	63964 - 63785: jis0208<<14 | 0x5B<<7 | 0x2E,
	64014 - 63785: jis0208<<14 | 0x58<<7 | 0x33,
	64015 - 63785: jis0208<<14 | 0x58<<7 | 0x3E,
	64016 - 63785: jis0208<<14 | 0x58<<7 | 0x3F,
	64017 - 63785: jis0208<<14 | 0x58<<7 | 0x54,
	64018 - 63785: jis0208<<14 | 0x59<<7 | 0x1D,
	64019 - 63785: jis0208<<14 | 0x59<<7 | 0x2D,
	64020 - 63785: jis0208<<14 | 0x59<<7 | 0x2F,
	64021 - 63785: jis0208<<14 | 0x59<<7 | 0x5A,
	64022 - 63785: jis0208<<14 | 0x5A<<7 | 0x02,
	64023 - 63785: jis0208<<14 | 0x5A<<7 | 0x19,
	64024 - 63785: jis0208<<14 | 0x5A<<7 | 0x21,
	64025 - 63785: jis0208<<14 | 0x5A<<7 | 0x22,
	64026 - 63785: jis0208<<14 | 0x5A<<7 | 0x23,
	64027 - 63785: jis0208<<14 | 0x5A<<7 | 0x25,
	64028 - 63785: jis0208<<14 | 0x5A<<7 | 0x29,
	64029 - 63785: jis0208<<14 | 0x5A<<7 | 0x2C,
	64030 - 63785: jis0208<<14 | 0x5A<<7 | 0x35,
	64031 - 63785: jis0208<<14 | 0x5A<<7 | 0x40,
	64032 - 63785: jis0208<<14 | 0x5A<<7 | 0x42,
	64033 - 63785: jis0208<<14 | 0x5A<<7 | 0x43,
	64034 - 63785: jis0208<<14 | 0x5A<<7 | 0x4C,
	64035 - 63785: jis0208<<14 | 0x5A<<7 | 0x54,
	64036 - 63785: jis0208<<14 | 0x5A<<7 | 0x56,
	64037 - 63785: jis0208<<14 | 0x5A<<7 | 0x57,
	64038 - 63785: jis0208<<14 | 0x5A<<7 | 0x5A,
	64039 - 63785: jis0208<<14 | 0x5B<<7 | 0x18,
	64040 - 63785: jis0208<<14 | 0x5B<<7 | 0x1F,
	64041 - 63785: jis0208<<14 | 0x5B<<7 | 0x2F,
	64042 - 63785: jis0208<<14 | 0x5B<<7 | 0x3B,
	64043 - 63785: jis0208<<14 | 0x5B<<7 | 0x3C,
	64044 - 63785: jis0208<<14 | 0x5B<<7 | 0x3E,
	64045 - 63785: jis0208<<14 | 0x5B<<7 | 0x4B,
}

const encode5Low, encode5High = 65281, 65510

var encode5 = [...]uint16{
	65281 - 65281: jis0208<<14 | 0x00<<7 | 0x09,
	65282 - 65281: jis0208<<14 | 0x5B<<7 | 0x5D,
	65283 - 65281: jis0208<<14 | 0x00<<7 | 0x53,
	65284 - 65281: jis0208<<14 | 0x00<<7 | 0x4F,
	65285 - 65281: jis0208<<14 | 0x00<<7 | 0x52,
	65286 - 65281: jis0208<<14 | 0x00<<7 | 0x54,
	65287 - 65281: jis0208<<14 | 0x5B<<7 | 0x5C,
	65288 - 65281: jis0208<<14 | 0x00<<7 | 0x29,
	65289 - 65281: jis0208<<14 | 0x00<<7 | 0x2A,
	65290 - 65281: jis0208<<14 | 0x00<<7 | 0x55,
	65291 - 65281: jis0208<<14 | 0x00<<7 | 0x3B,
	65292 - 65281: jis0208<<14 | 0x00<<7 | 0x03,
	65293 - 65281: jis0208<<14 | 0x00<<7 | 0x3C,
	65294 - 65281: jis0208<<14 | 0x00<<7 | 0x04,
	65295 - 65281: jis0208<<14 | 0x00<<7 | 0x1E,
	65296 - 65281: jis0208<<14 | 0x02<<7 | 0x0F,
	65297 - 65281: jis0208<<14 | 0x02<<7 | 0x10,
	65298 - 65281: jis0208<<14 | 0x02<<7 | 0x11,
	65299 - 65281: jis0208<<14 | 0x02<<7 | 0x12,
	65300 - 65281: jis0208<<14 | 0x02<<7 | 0x13,
	65301 - 65281: jis0208<<14 | 0x02<<7 | 0x14,
	65302 - 65281: jis0208<<14 | 0x02<<7 | 0x15,
	65303 - 65281: jis0208<<14 | 0x02<<7 | 0x16,
	65304 - 65281: jis0208<<14 | 0x02<<7 | 0x17,
	65305 - 65281: jis0208<<14 | 0x02<<7 | 0x18,
	65306 - 65281: jis0208<<14 | 0x00<<7 | 0x06,
	65307 - 65281: jis0208<<14 | 0x00<<7 | 0x07,
	65308 - 65281: jis0208<<14 | 0x00<<7 | 0x42,
	65309 - 65281: jis0208<<14 | 0x00<<7 | 0x40,
	65310 - 65281: jis0208<<14 | 0x00<<7 | 0x43,
	65311 - 65281: jis0208<<14 | 0x00<<7 | 0x08,
	65312 - 65281: jis0208<<14 | 0x00<<7 | 0x56,
	65313 - 65281: jis0208<<14 | 0x02<<7 | 0x20,
	65314 - 65281: jis0208<<14 | 0x02<<7 | 0x21,
	65315 - 65281: jis0208<<14 | 0x02<<7 | 0x22,
	65316 - 65281: jis0208<<14 | 0x02<<7 | 0x23,
	65317 - 65281: jis0208<<14 | 0x02<<7 | 0x24,
	65318 - 65281: jis0208<<14 | 0x02<<7 | 0x25,
	65319 - 65281: jis0208<<14 | 0x02<<7 | 0x26,
	65320 - 65281: jis0208<<14 | 0x02<<7 | 0x27,
	65321 - 65281: jis0208<<14 | 0x02<<7 | 0x28,
	65322 - 65281: jis0208<<14 | 0x02<<7 | 0x29,
	65323 - 65281: jis0208<<14 | 0x02<<7 | 0x2A,
	65324 - 65281: jis0208<<14 | 0x02<<7 | 0x2B,
	65325 - 65281: jis0208<<14 | 0x02<<7 | 0x2C,
	65326 - 65281: jis0208<<14 | 0x02<<7 | 0x2D,
	65327 - 65281: jis0208<<14 | 0x02<<7 | 0x2E,
	65328 - 65281: jis0208<<14 | 0x02<<7 | 0x2F,
	65329 - 65281: jis0208<<14 | 0x02<<7 | 0x30,
	65330 - 65281: jis0208<<14 | 0x02<<7 | 0x31,
	65331 - 65281: jis0208<<14 | 0x02<<7 | 0x32,
	65332 - 65281: jis0208<<14 | 0x02<<7 | 0x33,
	65333 - 65281: jis0208<<14 | 0x02<<7 | 0x34,
	65334 - 65281: jis0208<<14 | 0x02<<7 | 0x35,
	65335 - 65281: jis0208<<14 | 0x02<<7 | 0x36,
	65336 - 65281: jis0208<<14 | 0x02<<7 | 0x37,
	65337 - 65281: jis0208<<14 | 0x02<<7 | 0x38,
	65338 - 65281: jis0208<<14 | 0x02<<7 | 0x39,
	65339 - 65281: jis0208<<14 | 0x00<<7 | 0x2D,
	65340 - 65281: jis0208<<14 | 0x00<<7 | 0x1F,
	65341 - 65281: jis0208<<14 | 0x00<<7 | 0x2E,
	65342 - 65281: jis0208<<14 | 0x00<<7 | 0x0F,
	65343 - 65281: jis0208<<14 | 0x00<<7 | 0x11,
	65344 - 65281: jis0208<<14 | 0x00<<7 | 0x0D,
	65345 - 65281: jis0208<<14 | 0x02<<7 | 0x40,
	65346 - 65281: jis0208<<14 | 0x02<<7 | 0x41,
	65347 - 65281: jis0208<<14 | 0x02<<7 | 0x42,
	65348 - 65281: jis0208<<14 | 0x02<<7 | 0x43,
	65349 - 65281: jis0208<<14 | 0x02<<7 | 0x44,
	65350 - 65281: jis0208<<14 | 0x02<<7 | 0x45,
	65351 - 65281: jis0208<<14 | 0x02<<7 | 0x46,
	65352 - 65281: jis0208<<14 | 0x02<<7 | 0x47,
	65353 - 65281: jis0208<<14 | 0x02<<7 | 0x48,
	65354 - 65281: jis0208<<14 | 0x02<<7 | 0x49,
	65355 - 65281: jis0208<<14 | 0x02<<7 | 0x4A,
	65356 - 65281: jis0208<<14 | 0x02<<7 | 0x4B,
	65357 - 65281: jis0208<<14 | 0x02<<7 | 0x4C,
	65358 - 65281: jis0208<<14 | 0x02<<7 | 0x4D,
	65359 - 65281: jis0208<<14 | 0x02<<7 | 0x4E,
	65360 - 65281: jis0208<<14 | 0x02<<7 | 0x4F,
	65361 - 65281: jis0208<<14 | 0x02<<7 | 0x50,
	65362 - 65281: jis0208<<14 | 0x02<<7 | 0x51,
	65363 - 65281: jis0208<<14 | 0x02<<7 | 0x52,
	65364 - 65281: jis0208<<14 | 0x02<<7 | 0x53,
	65365 - 65281: jis0208<<14 | 0x02<<7 | 0x54,
	65366 - 65281: jis0208<<14 | 0x02<<7 | 0x55,
	65367 - 65281: jis0208<<14 | 0x02<<7 | 0x56,
	65368 - 65281: jis0208<<14 | 0x02<<7 | 0x57,
	65369 - 65281: jis0208<<14 | 0x02<<7 | 0x58,
	65370 - 65281: jis0208<<14 | 0x02<<7 | 0x59,
	65371 - 65281: jis0208<<14 | 0x00<<7 | 0x2F,
	65372 - 65281: jis0208<<14 | 0x00<<7 | 0x22,
	65373 - 65281: jis0208<<14 | 0x00<<7 | 0x30,
	65374 - 65281: jis0208<<14 | 0x00<<7 | 0x20,
	65504 - 65281: jis0208<<14 | 0x00<<7 | 0x50,
	65505 - 65281: jis0208<<14 | 0x00<<7 | 0x51,
	65506 - 65281: jis0208<<14 | 0x01<<7 | 0x2B,
	65507 - 65281: jis0208<<14 | 0x00<<7 | 0x10,
	65508 - 65281: jis0208<<14 | 0x5B<<7 | 0x5B,
	65509 - 65281: jis0208<<14 | 0x00<<7 | 0x4E,
}
 07070100000F08000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/korean  07070100000F09000081A4000000000000000000000001645E367C00000FBE000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/korean/euckr.go // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package korean

import (
	"unicode/utf8"

	"golang.org/x/text/encoding"
	"golang.org/x/text/encoding/internal"
	"golang.org/x/text/encoding/internal/identifier"
	"golang.org/x/text/transform"
)

// All is a list of all defined encodings in this package.
var All = []encoding.Encoding{EUCKR}

// EUCKR is the EUC-KR encoding, also known as Code Page 949.
var EUCKR encoding.Encoding = &eucKR

var eucKR = internal.Encoding{
	&internal.SimpleEncoding{eucKRDecoder{}, eucKREncoder{}},
	"EUC-KR",
	identifier.EUCKR,
}

type eucKRDecoder struct{ transform.NopResetter }

func (eucKRDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	r, size := rune(0), 0
loop:
	for ; nSrc < len(src); nSrc += size {
		switch c0 := src[nSrc]; {
		case c0 < utf8.RuneSelf:
			r, size = rune(c0), 1

		case 0x81 <= c0 && c0 < 0xff:
			if nSrc+1 >= len(src) {
				if !atEOF {
					err = transform.ErrShortSrc
					break loop
				}
				r, size = utf8.RuneError, 1
				break
			}
			c1 := src[nSrc+1]
			size = 2
			if c0 < 0xc7 {
				r = 178 * rune(c0-0x81)
				switch {
				case 0x41 <= c1 && c1 < 0x5b:
					r += rune(c1) - (0x41 - 0*26)
				case 0x61 <= c1 && c1 < 0x7b:
					r += rune(c1) - (0x61 - 1*26)
				case 0x81 <= c1 && c1 < 0xff:
					r += rune(c1) - (0x81 - 2*26)
				default:
					goto decError
				}
			} else if 0xa1 <= c1 && c1 < 0xff {
				r = 178*(0xc7-0x81) + rune(c0-0xc7)*94 + rune(c1-0xa1)
			} else {
				goto decError
			}
			if int(r) < len(decode) {
				r = rune(decode[r])
				if r != 0 {
					break
				}
			}
		decError:
			r = utf8.RuneError
			if c1 < utf8.RuneSelf {
				size = 1
			}

		default:
			r, size = utf8.RuneError, 1
			break
		}

		if nDst+utf8.RuneLen(r) > len(dst) {
			err = transform.ErrShortDst
			break
		}
		nDst += utf8.EncodeRune(dst[nDst:], r)
	}
	return nDst, nSrc, err
}

type eucKREncoder struct{ transform.NopResetter }

func (eucKREncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	r, size := rune(0), 0
	for ; nSrc < len(src); nSrc += size {
		r = rune(src[nSrc])

		// Decode a 1-byte rune.
		if r < utf8.RuneSelf {
			size = 1

			if nDst >= len(dst) {
				err = transform.ErrShortDst
				break
			}
			dst[nDst] = uint8(r)
			nDst++
			continue

		} else {
			// Decode a multi-byte rune.
			r, size = utf8.DecodeRune(src[nSrc:])
			if size == 1 {
				// All valid runes of size 1 (those below utf8.RuneSelf) were
				// handled above. We have invalid UTF-8 or we haven't seen the
				// full character yet.
				if !atEOF && !utf8.FullRune(src[nSrc:]) {
					err = transform.ErrShortSrc
					break
				}
			}

			// func init checks that the switch covers all tables.
			switch {
			case encode0Low <= r && r < encode0High:
				if r = rune(encode0[r-encode0Low]); r != 0 {
					goto write2
				}
			case encode1Low <= r && r < encode1High:
				if r = rune(encode1[r-encode1Low]); r != 0 {
					goto write2
				}
			case encode2Low <= r && r < encode2High:
				if r = rune(encode2[r-encode2Low]); r != 0 {
					goto write2
				}
			case encode3Low <= r && r < encode3High:
				if r = rune(encode3[r-encode3Low]); r != 0 {
					goto write2
				}
			case encode4Low <= r && r < encode4High:
				if r = rune(encode4[r-encode4Low]); r != 0 {
					goto write2
				}
			case encode5Low <= r && r < encode5High:
				if r = rune(encode5[r-encode5Low]); r != 0 {
					goto write2
				}
			case encode6Low <= r && r < encode6High:
				if r = rune(encode6[r-encode6Low]); r != 0 {
					goto write2
				}
			}
			err = internal.ErrASCIIReplacement
			break
		}

	write2:
		if nDst+2 > len(dst) {
			err = transform.ErrShortDst
			break
		}
		dst[nDst+0] = uint8(r >> 8)
		dst[nDst+1] = uint8(r)
		nDst += 2
		continue
	}
	return nDst, nSrc, err
}

func init() {
	// Check that the hard-coded encode switch covers all tables.
	if numEncodeTables != 7 {
		panic("bad numEncodeTables")
	}
}
  07070100000F0A000081A4000000000000000000000001645E367C000A68C0000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/korean/tables.go    // generated by go run maketables.go; DO NOT EDIT

// Package korean provides Korean encodings such as EUC-KR.
package korean // import "golang.org/x/text/encoding/korean"

// decode is the decoding table from EUC-KR code to Unicode.
// It is defined at http://encoding.spec.whatwg.org/index-euc-kr.txt
var decode = [...]uint16{
	0:     0xAC02,
	1:     0xAC03,
	2:     0xAC05,
	3:     0xAC06,
	4:     0xAC0B,
	5:     0xAC0C,
	6:     0xAC0D,
	7:     0xAC0E,
	8:     0xAC0F,
	9:     0xAC18,
	10:    0xAC1E,
	11:    0xAC1F,
	12:    0xAC21,
	13:    0xAC22,
	14:    0xAC23,
	15:    0xAC25,
	16:    0xAC26,
	17:    0xAC27,
	18:    0xAC28,
	19:    0xAC29,
	20:    0xAC2A,
	21:    0xAC2B,
	22:    0xAC2E,
	23:    0xAC32,
	24:    0xAC33,
	25:    0xAC34,
	26:    0xAC35,
	27:    0xAC36,
	28:    0xAC37,
	29:    0xAC3A,
	30:    0xAC3B,
	31:    0xAC3D,
	32:    0xAC3E,
	33:    0xAC3F,
	34:    0xAC41,
	35:    0xAC42,
	36:    0xAC43,
	37:    0xAC44,
	38:    0xAC45,
	39:    0xAC46,
	40:    0xAC47,
	41:    0xAC48,
	42:    0xAC49,
	43:    0xAC4A,
	44:    0xAC4C,
	45:    0xAC4E,
	46:    0xAC4F,
	47:    0xAC50,
	48:    0xAC51,
	49:    0xAC52,
	50:    0xAC53,
	51:    0xAC55,
	52:    0xAC56,
	53:    0xAC57,
	54:    0xAC59,
	55:    0xAC5A,
	56:    0xAC5B,
	57:    0xAC5D,
	58:    0xAC5E,
	59:    0xAC5F,
	60:    0xAC60,
	61:    0xAC61,
	62:    0xAC62,
	63:    0xAC63,
	64:    0xAC64,
	65:    0xAC65,
	66:    0xAC66,
	67:    0xAC67,
	68:    0xAC68,
	69:    0xAC69,
	70:    0xAC6A,
	71:    0xAC6B,
	72:    0xAC6C,
	73:    0xAC6D,
	74:    0xAC6E,
	75:    0xAC6F,
	76:    0xAC72,
	77:    0xAC73,
	78:    0xAC75,
	79:    0xAC76,
	80:    0xAC79,
	81:    0xAC7B,
	82:    0xAC7C,
	83:    0xAC7D,
	84:    0xAC7E,
	85:    0xAC7F,
	86:    0xAC82,
	87:    0xAC87,
	88:    0xAC88,
	89:    0xAC8D,
	90:    0xAC8E,
	91:    0xAC8F,
	92:    0xAC91,
	93:    0xAC92,
	94:    0xAC93,
	95:    0xAC95,
	96:    0xAC96,
	97:    0xAC97,
	98:    0xAC98,
	99:    0xAC99,
	100:   0xAC9A,
	101:   0xAC9B,
	102:   0xAC9E,
	103:   0xACA2,
	104:   0xACA3,
	105:   0xACA4,
	106:   0xACA5,
	107:   0xACA6,
	108:   0xACA7,
	109:   0xACAB,
	110:   0xACAD,
	111:   0xACAE,
	112:   0xACB1,
	113:   0xACB2,
	114:   0xACB3,
	115:   0xACB4,
	116:   0xACB5,
	117:   0xACB6,
	118:   0xACB7,
	119:   0xACBA,
	120:   0xACBE,
	121:   0xACBF,
	122:   0xACC0,
	123:   0xACC2,
	124:   0xACC3,
	125:   0xACC5,
	126:   0xACC6,
	127:   0xACC7,
	128:   0xACC9,
	129:   0xACCA,
	130:   0xACCB,
	131:   0xACCD,
	132:   0xACCE,
	133:   0xACCF,
	134:   0xACD0,
	135:   0xACD1,
	136:   0xACD2,
	137:   0xACD3,
	138:   0xACD4,
	139:   0xACD6,
	140:   0xACD8,
	141:   0xACD9,
	142:   0xACDA,
	143:   0xACDB,
	144:   0xACDC,
	145:   0xACDD,
	146:   0xACDE,
	147:   0xACDF,
	148:   0xACE2,
	149:   0xACE3,
	150:   0xACE5,
	151:   0xACE6,
	152:   0xACE9,
	153:   0xACEB,
	154:   0xACED,
	155:   0xACEE,
	156:   0xACF2,
	157:   0xACF4,
	158:   0xACF7,
	159:   0xACF8,
	160:   0xACF9,
	161:   0xACFA,
	162:   0xACFB,
	163:   0xACFE,
	164:   0xACFF,
	165:   0xAD01,
	166:   0xAD02,
	167:   0xAD03,
	168:   0xAD05,
	169:   0xAD07,
	170:   0xAD08,
	171:   0xAD09,
	172:   0xAD0A,
	173:   0xAD0B,
	174:   0xAD0E,
	175:   0xAD10,
	176:   0xAD12,
	177:   0xAD13,
	178:   0xAD14,
	179:   0xAD15,
	180:   0xAD16,
	181:   0xAD17,
	182:   0xAD19,
	183:   0xAD1A,
	184:   0xAD1B,
	185:   0xAD1D,
	186:   0xAD1E,
	187:   0xAD1F,
	188:   0xAD21,
	189:   0xAD22,
	190:   0xAD23,
	191:   0xAD24,
	192:   0xAD25,
	193:   0xAD26,
	194:   0xAD27,
	195:   0xAD28,
	196:   0xAD2A,
	197:   0xAD2B,
	198:   0xAD2E,
	199:   0xAD2F,
	200:   0xAD30,
	201:   0xAD31,
	202:   0xAD32,
	203:   0xAD33,
	204:   0xAD36,
	205:   0xAD37,
	206:   0xAD39,
	207:   0xAD3A,
	208:   0xAD3B,
	209:   0xAD3D,
	210:   0xAD3E,
	211:   0xAD3F,
	212:   0xAD40,
	213:   0xAD41,
	214:   0xAD42,
	215:   0xAD43,
	216:   0xAD46,
	217:   0xAD48,
	218:   0xAD4A,
	219:   0xAD4B,
	220:   0xAD4C,
	221:   0xAD4D,
	222:   0xAD4E,
	223:   0xAD4F,
	224:   0xAD51,
	225:   0xAD52,
	226:   0xAD53,
	227:   0xAD55,
	228:   0xAD56,
	229:   0xAD57,
	230:   0xAD59,
	231:   0xAD5A,
	232:   0xAD5B,
	233:   0xAD5C,
	234:   0xAD5D,
	235:   0xAD5E,
	236:   0xAD5F,
	237:   0xAD60,
	238:   0xAD62,
	239:   0xAD64,
	240:   0xAD65,
	241:   0xAD66,
	242:   0xAD67,
	243:   0xAD68,
	244:   0xAD69,
	245:   0xAD6A,
	246:   0xAD6B,
	247:   0xAD6E,
	248:   0xAD6F,
	249:   0xAD71,
	250:   0xAD72,
	251:   0xAD77,
	252:   0xAD78,
	253:   0xAD79,
	254:   0xAD7A,
	255:   0xAD7E,
	256:   0xAD80,
	257:   0xAD83,
	258:   0xAD84,
	259:   0xAD85,
	260:   0xAD86,
	261:   0xAD87,
	262:   0xAD8A,
	263:   0xAD8B,
	264:   0xAD8D,
	265:   0xAD8E,
	266:   0xAD8F,
	267:   0xAD91,
	268:   0xAD92,
	269:   0xAD93,
	270:   0xAD94,
	271:   0xAD95,
	272:   0xAD96,
	273:   0xAD97,
	274:   0xAD98,
	275:   0xAD99,
	276:   0xAD9A,
	277:   0xAD9B,
	278:   0xAD9E,
	279:   0xAD9F,
	280:   0xADA0,
	281:   0xADA1,
	282:   0xADA2,
	283:   0xADA3,
	284:   0xADA5,
	285:   0xADA6,
	286:   0xADA7,
	287:   0xADA8,
	288:   0xADA9,
	289:   0xADAA,
	290:   0xADAB,
	291:   0xADAC,
	292:   0xADAD,
	293:   0xADAE,
	294:   0xADAF,
	295:   0xADB0,
	296:   0xADB1,
	297:   0xADB2,
	298:   0xADB3,
	299:   0xADB4,
	300:   0xADB5,
	301:   0xADB6,
	302:   0xADB8,
	303:   0xADB9,
	304:   0xADBA,
	305:   0xADBB,
	306:   0xADBC,
	307:   0xADBD,
	308:   0xADBE,
	309:   0xADBF,
	310:   0xADC2,
	311:   0xADC3,
	312:   0xADC5,
	313:   0xADC6,
	314:   0xADC7,
	315:   0xADC9,
	316:   0xADCA,
	317:   0xADCB,
	318:   0xADCC,
	319:   0xADCD,
	320:   0xADCE,
	321:   0xADCF,
	322:   0xADD2,
	323:   0xADD4,
	324:   0xADD5,
	325:   0xADD6,
	326:   0xADD7,
	327:   0xADD8,
	328:   0xADD9,
	329:   0xADDA,
	330:   0xADDB,
	331:   0xADDD,
	332:   0xADDE,
	333:   0xADDF,
	334:   0xADE1,
	335:   0xADE2,
	336:   0xADE3,
	337:   0xADE5,
	338:   0xADE6,
	339:   0xADE7,
	340:   0xADE8,
	341:   0xADE9,
	342:   0xADEA,
	343:   0xADEB,
	344:   0xADEC,
	345:   0xADED,
	346:   0xADEE,
	347:   0xADEF,
	348:   0xADF0,
	349:   0xADF1,
	350:   0xADF2,
	351:   0xADF3,
	352:   0xADF4,
	353:   0xADF5,
	354:   0xADF6,
	355:   0xADF7,
	356:   0xADFA,
	357:   0xADFB,
	358:   0xADFD,
	359:   0xADFE,
	360:   0xAE02,
	361:   0xAE03,
	362:   0xAE04,
	363:   0xAE05,
	364:   0xAE06,
	365:   0xAE07,
	366:   0xAE0A,
	367:   0xAE0C,
	368:   0xAE0E,
	369:   0xAE0F,
	370:   0xAE10,
	371:   0xAE11,
	372:   0xAE12,
	373:   0xAE13,
	374:   0xAE15,
	375:   0xAE16,
	376:   0xAE17,
	377:   0xAE18,
	378:   0xAE19,
	379:   0xAE1A,
	380:   0xAE1B,
	381:   0xAE1C,
	382:   0xAE1D,
	383:   0xAE1E,
	384:   0xAE1F,
	385:   0xAE20,
	386:   0xAE21,
	387:   0xAE22,
	388:   0xAE23,
	389:   0xAE24,
	390:   0xAE25,
	391:   0xAE26,
	392:   0xAE27,
	393:   0xAE28,
	394:   0xAE29,
	395:   0xAE2A,
	396:   0xAE2B,
	397:   0xAE2C,
	398:   0xAE2D,
	399:   0xAE2E,
	400:   0xAE2F,
	401:   0xAE32,
	402:   0xAE33,
	403:   0xAE35,
	404:   0xAE36,
	405:   0xAE39,
	406:   0xAE3B,
	407:   0xAE3C,
	408:   0xAE3D,
	409:   0xAE3E,
	410:   0xAE3F,
	411:   0xAE42,
	412:   0xAE44,
	413:   0xAE47,
	414:   0xAE48,
	415:   0xAE49,
	416:   0xAE4B,
	417:   0xAE4F,
	418:   0xAE51,
	419:   0xAE52,
	420:   0xAE53,
	421:   0xAE55,
	422:   0xAE57,
	423:   0xAE58,
	424:   0xAE59,
	425:   0xAE5A,
	426:   0xAE5B,
	427:   0xAE5E,
	428:   0xAE62,
	429:   0xAE63,
	430:   0xAE64,
	431:   0xAE66,
	432:   0xAE67,
	433:   0xAE6A,
	434:   0xAE6B,
	435:   0xAE6D,
	436:   0xAE6E,
	437:   0xAE6F,
	438:   0xAE71,
	439:   0xAE72,
	440:   0xAE73,
	441:   0xAE74,
	442:   0xAE75,
	443:   0xAE76,
	444:   0xAE77,
	445:   0xAE7A,
	446:   0xAE7E,
	447:   0xAE7F,
	448:   0xAE80,
	449:   0xAE81,
	450:   0xAE82,
	451:   0xAE83,
	452:   0xAE86,
	453:   0xAE87,
	454:   0xAE88,
	455:   0xAE89,
	456:   0xAE8A,
	457:   0xAE8B,
	458:   0xAE8D,
	459:   0xAE8E,
	460:   0xAE8F,
	461:   0xAE90,
	462:   0xAE91,
	463:   0xAE92,
	464:   0xAE93,
	465:   0xAE94,
	466:   0xAE95,
	467:   0xAE96,
	468:   0xAE97,
	469:   0xAE98,
	470:   0xAE99,
	471:   0xAE9A,
	472:   0xAE9B,
	473:   0xAE9C,
	474:   0xAE9D,
	475:   0xAE9E,
	476:   0xAE9F,
	477:   0xAEA0,
	478:   0xAEA1,
	479:   0xAEA2,
	480:   0xAEA3,
	481:   0xAEA4,
	482:   0xAEA5,
	483:   0xAEA6,
	484:   0xAEA7,
	485:   0xAEA8,
	486:   0xAEA9,
	487:   0xAEAA,
	488:   0xAEAB,
	489:   0xAEAC,
	490:   0xAEAD,
	491:   0xAEAE,
	492:   0xAEAF,
	493:   0xAEB0,
	494:   0xAEB1,
	495:   0xAEB2,
	496:   0xAEB3,
	497:   0xAEB4,
	498:   0xAEB5,
	499:   0xAEB6,
	500:   0xAEB7,
	501:   0xAEB8,
	502:   0xAEB9,
	503:   0xAEBA,
	504:   0xAEBB,
	505:   0xAEBF,
	506:   0xAEC1,
	507:   0xAEC2,
	508:   0xAEC3,
	509:   0xAEC5,
	510:   0xAEC6,
	511:   0xAEC7,
	512:   0xAEC8,
	513:   0xAEC9,
	514:   0xAECA,
	515:   0xAECB,
	516:   0xAECE,
	517:   0xAED2,
	518:   0xAED3,
	519:   0xAED4,
	520:   0xAED5,
	521:   0xAED6,
	522:   0xAED7,
	523:   0xAEDA,
	524:   0xAEDB,
	525:   0xAEDD,
	526:   0xAEDE,
	527:   0xAEDF,
	528:   0xAEE0,
	529:   0xAEE1,
	530:   0xAEE2,
	531:   0xAEE3,
	532:   0xAEE4,
	533:   0xAEE5,
	534:   0xAEE6,
	535:   0xAEE7,
	536:   0xAEE9,
	537:   0xAEEA,
	538:   0xAEEC,
	539:   0xAEEE,
	540:   0xAEEF,
	541:   0xAEF0,
	542:   0xAEF1,
	543:   0xAEF2,
	544:   0xAEF3,
	545:   0xAEF5,
	546:   0xAEF6,
	547:   0xAEF7,
	548:   0xAEF9,
	549:   0xAEFA,
	550:   0xAEFB,
	551:   0xAEFD,
	552:   0xAEFE,
	553:   0xAEFF,
	554:   0xAF00,
	555:   0xAF01,
	556:   0xAF02,
	557:   0xAF03,
	558:   0xAF04,
	559:   0xAF05,
	560:   0xAF06,
	561:   0xAF09,
	562:   0xAF0A,
	563:   0xAF0B,
	564:   0xAF0C,
	565:   0xAF0E,
	566:   0xAF0F,
	567:   0xAF11,
	568:   0xAF12,
	569:   0xAF13,
	570:   0xAF14,
	571:   0xAF15,
	572:   0xAF16,
	573:   0xAF17,
	574:   0xAF18,
	575:   0xAF19,
	576:   0xAF1A,
	577:   0xAF1B,
	578:   0xAF1C,
	579:   0xAF1D,
	580:   0xAF1E,
	581:   0xAF1F,
	582:   0xAF20,
	583:   0xAF21,
	584:   0xAF22,
	585:   0xAF23,
	586:   0xAF24,
	587:   0xAF25,
	588:   0xAF26,
	589:   0xAF27,
	590:   0xAF28,
	591:   0xAF29,
	592:   0xAF2A,
	593:   0xAF2B,
	594:   0xAF2E,
	595:   0xAF2F,
	596:   0xAF31,
	597:   0xAF33,
	598:   0xAF35,
	599:   0xAF36,
	600:   0xAF37,
	601:   0xAF38,
	602:   0xAF39,
	603:   0xAF3A,
	604:   0xAF3B,
	605:   0xAF3E,
	606:   0xAF40,
	607:   0xAF44,
	608:   0xAF45,
	609:   0xAF46,
	610:   0xAF47,
	611:   0xAF4A,
	612:   0xAF4B,
	613:   0xAF4C,
	614:   0xAF4D,
	615:   0xAF4E,
	616:   0xAF4F,
	617:   0xAF51,
	618:   0xAF52,
	619:   0xAF53,
	620:   0xAF54,
	621:   0xAF55,
	622:   0xAF56,
	623:   0xAF57,
	624:   0xAF58,
	625:   0xAF59,
	626:   0xAF5A,
	627:   0xAF5B,
	628:   0xAF5E,
	629:   0xAF5F,
	630:   0xAF60,
	631:   0xAF61,
	632:   0xAF62,
	633:   0xAF63,
	634:   0xAF66,
	635:   0xAF67,
	636:   0xAF68,
	637:   0xAF69,
	638:   0xAF6A,
	639:   0xAF6B,
	640:   0xAF6C,
	641:   0xAF6D,
	642:   0xAF6E,
	643:   0xAF6F,
	644:   0xAF70,
	645:   0xAF71,
	646:   0xAF72,
	647:   0xAF73,
	648:   0xAF74,
	649:   0xAF75,
	650:   0xAF76,
	651:   0xAF77,
	652:   0xAF78,
	653:   0xAF7A,
	654:   0xAF7B,
	655:   0xAF7C,
	656:   0xAF7D,
	657:   0xAF7E,
	658:   0xAF7F,
	659:   0xAF81,
	660:   0xAF82,
	661:   0xAF83,
	662:   0xAF85,
	663:   0xAF86,
	664:   0xAF87,
	665:   0xAF89,
	666:   0xAF8A,
	667:   0xAF8B,
	668:   0xAF8C,
	669:   0xAF8D,
	670:   0xAF8E,
	671:   0xAF8F,
	672:   0xAF92,
	673:   0xAF93,
	674:   0xAF94,
	675:   0xAF96,
	676:   0xAF97,
	677:   0xAF98,
	678:   0xAF99,
	679:   0xAF9A,
	680:   0xAF9B,
	681:   0xAF9D,
	682:   0xAF9E,
	683:   0xAF9F,
	684:   0xAFA0,
	685:   0xAFA1,
	686:   0xAFA2,
	687:   0xAFA3,
	688:   0xAFA4,
	689:   0xAFA5,
	690:   0xAFA6,
	691:   0xAFA7,
	692:   0xAFA8,
	693:   0xAFA9,
	694:   0xAFAA,
	695:   0xAFAB,
	696:   0xAFAC,
	697:   0xAFAD,
	698:   0xAFAE,
	699:   0xAFAF,
	700:   0xAFB0,
	701:   0xAFB1,
	702:   0xAFB2,
	703:   0xAFB3,
	704:   0xAFB4,
	705:   0xAFB5,
	706:   0xAFB6,
	707:   0xAFB7,
	708:   0xAFBA,
	709:   0xAFBB,
	710:   0xAFBD,
	711:   0xAFBE,
	712:   0xAFBF,
	713:   0xAFC1,
	714:   0xAFC2,
	715:   0xAFC3,
	716:   0xAFC4,
	717:   0xAFC5,
	718:   0xAFC6,
	719:   0xAFCA,
	720:   0xAFCC,
	721:   0xAFCF,
	722:   0xAFD0,
	723:   0xAFD1,
	724:   0xAFD2,
	725:   0xAFD3,
	726:   0xAFD5,
	727:   0xAFD6,
	728:   0xAFD7,
	729:   0xAFD8,
	730:   0xAFD9,
	731:   0xAFDA,
	732:   0xAFDB,
	733:   0xAFDD,
	734:   0xAFDE,
	735:   0xAFDF,
	736:   0xAFE0,
	737:   0xAFE1,
	738:   0xAFE2,
	739:   0xAFE3,
	740:   0xAFE4,
	741:   0xAFE5,
	742:   0xAFE6,
	743:   0xAFE7,
	744:   0xAFEA,
	745:   0xAFEB,
	746:   0xAFEC,
	747:   0xAFED,
	748:   0xAFEE,
	749:   0xAFEF,
	750:   0xAFF2,
	751:   0xAFF3,
	752:   0xAFF5,
	753:   0xAFF6,
	754:   0xAFF7,
	755:   0xAFF9,
	756:   0xAFFA,
	757:   0xAFFB,
	758:   0xAFFC,
	759:   0xAFFD,
	760:   0xAFFE,
	761:   0xAFFF,
	762:   0xB002,
	763:   0xB003,
	764:   0xB005,
	765:   0xB006,
	766:   0xB007,
	767:   0xB008,
	768:   0xB009,
	769:   0xB00A,
	770:   0xB00B,
	771:   0xB00D,
	772:   0xB00E,
	773:   0xB00F,
	774:   0xB011,
	775:   0xB012,
	776:   0xB013,
	777:   0xB015,
	778:   0xB016,
	779:   0xB017,
	780:   0xB018,
	781:   0xB019,
	782:   0xB01A,
	783:   0xB01B,
	784:   0xB01E,
	785:   0xB01F,
	786:   0xB020,
	787:   0xB021,
	788:   0xB022,
	789:   0xB023,
	790:   0xB024,
	791:   0xB025,
	792:   0xB026,
	793:   0xB027,
	794:   0xB029,
	795:   0xB02A,
	796:   0xB02B,
	797:   0xB02C,
	798:   0xB02D,
	799:   0xB02E,
	800:   0xB02F,
	801:   0xB030,
	802:   0xB031,
	803:   0xB032,
	804:   0xB033,
	805:   0xB034,
	806:   0xB035,
	807:   0xB036,
	808:   0xB037,
	809:   0xB038,
	810:   0xB039,
	811:   0xB03A,
	812:   0xB03B,
	813:   0xB03C,
	814:   0xB03D,
	815:   0xB03E,
	816:   0xB03F,
	817:   0xB040,
	818:   0xB041,
	819:   0xB042,
	820:   0xB043,
	821:   0xB046,
	822:   0xB047,
	823:   0xB049,
	824:   0xB04B,
	825:   0xB04D,
	826:   0xB04F,
	827:   0xB050,
	828:   0xB051,
	829:   0xB052,
	830:   0xB056,
	831:   0xB058,
	832:   0xB05A,
	833:   0xB05B,
	834:   0xB05C,
	835:   0xB05E,
	836:   0xB05F,
	837:   0xB060,
	838:   0xB061,
	839:   0xB062,
	840:   0xB063,
	841:   0xB064,
	842:   0xB065,
	843:   0xB066,
	844:   0xB067,
	845:   0xB068,
	846:   0xB069,
	847:   0xB06A,
	848:   0xB06B,
	849:   0xB06C,
	850:   0xB06D,
	851:   0xB06E,
	852:   0xB06F,
	853:   0xB070,
	854:   0xB071,
	855:   0xB072,
	856:   0xB073,
	857:   0xB074,
	858:   0xB075,
	859:   0xB076,
	860:   0xB077,
	861:   0xB078,
	862:   0xB079,
	863:   0xB07A,
	864:   0xB07B,
	865:   0xB07E,
	866:   0xB07F,
	867:   0xB081,
	868:   0xB082,
	869:   0xB083,
	870:   0xB085,
	871:   0xB086,
	872:   0xB087,
	873:   0xB088,
	874:   0xB089,
	875:   0xB08A,
	876:   0xB08B,
	877:   0xB08E,
	878:   0xB090,
	879:   0xB092,
	880:   0xB093,
	881:   0xB094,
	882:   0xB095,
	883:   0xB096,
	884:   0xB097,
	885:   0xB09B,
	886:   0xB09D,
	887:   0xB09E,
	888:   0xB0A3,
	889:   0xB0A4,
	890:   0xB0A5,
	891:   0xB0A6,
	892:   0xB0A7,
	893:   0xB0AA,
	894:   0xB0B0,
	895:   0xB0B2,
	896:   0xB0B6,
	897:   0xB0B7,
	898:   0xB0B9,
	899:   0xB0BA,
	900:   0xB0BB,
	901:   0xB0BD,
	902:   0xB0BE,
	903:   0xB0BF,
	904:   0xB0C0,
	905:   0xB0C1,
	906:   0xB0C2,
	907:   0xB0C3,
	908:   0xB0C6,
	909:   0xB0CA,
	910:   0xB0CB,
	911:   0xB0CC,
	912:   0xB0CD,
	913:   0xB0CE,
	914:   0xB0CF,
	915:   0xB0D2,
	916:   0xB0D3,
	917:   0xB0D5,
	918:   0xB0D6,
	919:   0xB0D7,
	920:   0xB0D9,
	921:   0xB0DA,
	922:   0xB0DB,
	923:   0xB0DC,
	924:   0xB0DD,
	925:   0xB0DE,
	926:   0xB0DF,
	927:   0xB0E1,
	928:   0xB0E2,
	929:   0xB0E3,
	930:   0xB0E4,
	931:   0xB0E6,
	932:   0xB0E7,
	933:   0xB0E8,
	934:   0xB0E9,
	935:   0xB0EA,
	936:   0xB0EB,
	937:   0xB0EC,
	938:   0xB0ED,
	939:   0xB0EE,
	940:   0xB0EF,
	941:   0xB0F0,
	942:   0xB0F1,
	943:   0xB0F2,
	944:   0xB0F3,
	945:   0xB0F4,
	946:   0xB0F5,
	947:   0xB0F6,
	948:   0xB0F7,
	949:   0xB0F8,
	950:   0xB0F9,
	951:   0xB0FA,
	952:   0xB0FB,
	953:   0xB0FC,
	954:   0xB0FD,
	955:   0xB0FE,
	956:   0xB0FF,
	957:   0xB100,
	958:   0xB101,
	959:   0xB102,
	960:   0xB103,
	961:   0xB104,
	962:   0xB105,
	963:   0xB106,
	964:   0xB107,
	965:   0xB10A,
	966:   0xB10D,
	967:   0xB10E,
	968:   0xB10F,
	969:   0xB111,
	970:   0xB114,
	971:   0xB115,
	972:   0xB116,
	973:   0xB117,
	974:   0xB11A,
	975:   0xB11E,
	976:   0xB11F,
	977:   0xB120,
	978:   0xB121,
	979:   0xB122,
	980:   0xB126,
	981:   0xB127,
	982:   0xB129,
	983:   0xB12A,
	984:   0xB12B,
	985:   0xB12D,
	986:   0xB12E,
	987:   0xB12F,
	988:   0xB130,
	989:   0xB131,
	990:   0xB132,
	991:   0xB133,
	992:   0xB136,
	993:   0xB13A,
	994:   0xB13B,
	995:   0xB13C,
	996:   0xB13D,
	997:   0xB13E,
	998:   0xB13F,
	999:   0xB142,
	1000:  0xB143,
	1001:  0xB145,
	1002:  0xB146,
	1003:  0xB147,
	1004:  0xB149,
	1005:  0xB14A,
	1006:  0xB14B,
	1007:  0xB14C,
	1008:  0xB14D,
	1009:  0xB14E,
	1010:  0xB14F,
	1011:  0xB152,
	1012:  0xB153,
	1013:  0xB156,
	1014:  0xB157,
	1015:  0xB159,
	1016:  0xB15A,
	1017:  0xB15B,
	1018:  0xB15D,
	1019:  0xB15E,
	1020:  0xB15F,
	1021:  0xB161,
	1022:  0xB162,
	1023:  0xB163,
	1024:  0xB164,
	1025:  0xB165,
	1026:  0xB166,
	1027:  0xB167,
	1028:  0xB168,
	1029:  0xB169,
	1030:  0xB16A,
	1031:  0xB16B,
	1032:  0xB16C,
	1033:  0xB16D,
	1034:  0xB16E,
	1035:  0xB16F,
	1036:  0xB170,
	1037:  0xB171,
	1038:  0xB172,
	1039:  0xB173,
	1040:  0xB174,
	1041:  0xB175,
	1042:  0xB176,
	1043:  0xB177,
	1044:  0xB17A,
	1045:  0xB17B,
	1046:  0xB17D,
	1047:  0xB17E,
	1048:  0xB17F,
	1049:  0xB181,
	1050:  0xB183,
	1051:  0xB184,
	1052:  0xB185,
	1053:  0xB186,
	1054:  0xB187,
	1055:  0xB18A,
	1056:  0xB18C,
	1057:  0xB18E,
	1058:  0xB18F,
	1059:  0xB190,
	1060:  0xB191,
	1061:  0xB195,
	1062:  0xB196,
	1063:  0xB197,
	1064:  0xB199,
	1065:  0xB19A,
	1066:  0xB19B,
	1067:  0xB19D,
	1068:  0xB19E,
	1069:  0xB19F,
	1070:  0xB1A0,
	1071:  0xB1A1,
	1072:  0xB1A2,
	1073:  0xB1A3,
	1074:  0xB1A4,
	1075:  0xB1A5,
	1076:  0xB1A6,
	1077:  0xB1A7,
	1078:  0xB1A9,
	1079:  0xB1AA,
	1080:  0xB1AB,
	1081:  0xB1AC,
	1082:  0xB1AD,
	1083:  0xB1AE,
	1084:  0xB1AF,
	1085:  0xB1B0,
	1086:  0xB1B1,
	1087:  0xB1B2,
	1088:  0xB1B3,
	1089:  0xB1B4,
	1090:  0xB1B5,
	1091:  0xB1B6,
	1092:  0xB1B7,
	1093:  0xB1B8,
	1094:  0xB1B9,
	1095:  0xB1BA,
	1096:  0xB1BB,
	1097:  0xB1BC,
	1098:  0xB1BD,
	1099:  0xB1BE,
	1100:  0xB1BF,
	1101:  0xB1C0,
	1102:  0xB1C1,
	1103:  0xB1C2,
	1104:  0xB1C3,
	1105:  0xB1C4,
	1106:  0xB1C5,
	1107:  0xB1C6,
	1108:  0xB1C7,
	1109:  0xB1C8,
	1110:  0xB1C9,
	1111:  0xB1CA,
	1112:  0xB1CB,
	1113:  0xB1CD,
	1114:  0xB1CE,
	1115:  0xB1CF,
	1116:  0xB1D1,
	1117:  0xB1D2,
	1118:  0xB1D3,
	1119:  0xB1D5,
	1120:  0xB1D6,
	1121:  0xB1D7,
	1122:  0xB1D8,
	1123:  0xB1D9,
	1124:  0xB1DA,
	1125:  0xB1DB,
	1126:  0xB1DE,
	1127:  0xB1E0,
	1128:  0xB1E1,
	1129:  0xB1E2,
	1130:  0xB1E3,
	1131:  0xB1E4,
	1132:  0xB1E5,
	1133:  0xB1E6,
	1134:  0xB1E7,
	1135:  0xB1EA,
	1136:  0xB1EB,
	1137:  0xB1ED,
	1138:  0xB1EE,
	1139:  0xB1EF,
	1140:  0xB1F1,
	1141:  0xB1F2,
	1142:  0xB1F3,
	1143:  0xB1F4,
	1144:  0xB1F5,
	1145:  0xB1F6,
	1146:  0xB1F7,
	1147:  0xB1F8,
	1148:  0xB1FA,
	1149:  0xB1FC,
	1150:  0xB1FE,
	1151:  0xB1FF,
	1152:  0xB200,
	1153:  0xB201,
	1154:  0xB202,
	1155:  0xB203,
	1156:  0xB206,
	1157:  0xB207,
	1158:  0xB209,
	1159:  0xB20A,
	1160:  0xB20D,
	1161:  0xB20E,
	1162:  0xB20F,
	1163:  0xB210,
	1164:  0xB211,
	1165:  0xB212,
	1166:  0xB213,
	1167:  0xB216,
	1168:  0xB218,
	1169:  0xB21A,
	1170:  0xB21B,
	1171:  0xB21C,
	1172:  0xB21D,
	1173:  0xB21E,
	1174:  0xB21F,
	1175:  0xB221,
	1176:  0xB222,
	1177:  0xB223,
	1178:  0xB224,
	1179:  0xB225,
	1180:  0xB226,
	1181:  0xB227,
	1182:  0xB228,
	1183:  0xB229,
	1184:  0xB22A,
	1185:  0xB22B,
	1186:  0xB22C,
	1187:  0xB22D,
	1188:  0xB22E,
	1189:  0xB22F,
	1190:  0xB230,
	1191:  0xB231,
	1192:  0xB232,
	1193:  0xB233,
	1194:  0xB235,
	1195:  0xB236,
	1196:  0xB237,
	1197:  0xB238,
	1198:  0xB239,
	1199:  0xB23A,
	1200:  0xB23B,
	1201:  0xB23D,
	1202:  0xB23E,
	1203:  0xB23F,
	1204:  0xB240,
	1205:  0xB241,
	1206:  0xB242,
	1207:  0xB243,
	1208:  0xB244,
	1209:  0xB245,
	1210:  0xB246,
	1211:  0xB247,
	1212:  0xB248,
	1213:  0xB249,
	1214:  0xB24A,
	1215:  0xB24B,
	1216:  0xB24C,
	1217:  0xB24D,
	1218:  0xB24E,
	1219:  0xB24F,
	1220:  0xB250,
	1221:  0xB251,
	1222:  0xB252,
	1223:  0xB253,
	1224:  0xB254,
	1225:  0xB255,
	1226:  0xB256,
	1227:  0xB257,
	1228:  0xB259,
	1229:  0xB25A,
	1230:  0xB25B,
	1231:  0xB25D,
	1232:  0xB25E,
	1233:  0xB25F,
	1234:  0xB261,
	1235:  0xB262,
	1236:  0xB263,
	1237:  0xB264,
	1238:  0xB265,
	1239:  0xB266,
	1240:  0xB267,
	1241:  0xB26A,
	1242:  0xB26B,
	1243:  0xB26C,
	1244:  0xB26D,
	1245:  0xB26E,
	1246:  0xB26F,
	1247:  0xB270,
	1248:  0xB271,
	1249:  0xB272,
	1250:  0xB273,
	1251:  0xB276,
	1252:  0xB277,
	1253:  0xB278,
	1254:  0xB279,
	1255:  0xB27A,
	1256:  0xB27B,
	1257:  0xB27D,
	1258:  0xB27E,
	1259:  0xB27F,
	1260:  0xB280,
	1261:  0xB281,
	1262:  0xB282,
	1263:  0xB283,
	1264:  0xB286,
	1265:  0xB287,
	1266:  0xB288,
	1267:  0xB28A,
	1268:  0xB28B,
	1269:  0xB28C,
	1270:  0xB28D,
	1271:  0xB28E,
	1272:  0xB28F,
	1273:  0xB292,
	1274:  0xB293,
	1275:  0xB295,
	1276:  0xB296,
	1277:  0xB297,
	1278:  0xB29B,
	1279:  0xB29C,
	1280:  0xB29D,
	1281:  0xB29E,
	1282:  0xB29F,
	1283:  0xB2A2,
	1284:  0xB2A4,
	1285:  0xB2A7,
	1286:  0xB2A8,
	1287:  0xB2A9,
	1288:  0xB2AB,
	1289:  0xB2AD,
	1290:  0xB2AE,
	1291:  0xB2AF,
	1292:  0xB2B1,
	1293:  0xB2B2,
	1294:  0xB2B3,
	1295:  0xB2B5,
	1296:  0xB2B6,
	1297:  0xB2B7,
	1298:  0xB2B8,
	1299:  0xB2B9,
	1300:  0xB2BA,
	1301:  0xB2BB,
	1302:  0xB2BC,
	1303:  0xB2BD,
	1304:  0xB2BE,
	1305:  0xB2BF,
	1306:  0xB2C0,
	1307:  0xB2C1,
	1308:  0xB2C2,
	1309:  0xB2C3,
	1310:  0xB2C4,
	1311:  0xB2C5,
	1312:  0xB2C6,
	1313:  0xB2C7,
	1314:  0xB2CA,
	1315:  0xB2CB,
	1316:  0xB2CD,
	1317:  0xB2CE,
	1318:  0xB2CF,
	1319:  0xB2D1,
	1320:  0xB2D3,
	1321:  0xB2D4,
	1322:  0xB2D5,
	1323:  0xB2D6,
	1324:  0xB2D7,
	1325:  0xB2DA,
	1326:  0xB2DC,
	1327:  0xB2DE,
	1328:  0xB2DF,
	1329:  0xB2E0,
	1330:  0xB2E1,
	1331:  0xB2E3,
	1332:  0xB2E7,
	1333:  0xB2E9,
	1334:  0xB2EA,
	1335:  0xB2F0,
	1336:  0xB2F1,
	1337:  0xB2F2,
	1338:  0xB2F6,
	1339:  0xB2FC,
	1340:  0xB2FD,
	1341:  0xB2FE,
	1342:  0xB302,
	1343:  0xB303,
	1344:  0xB305,
	1345:  0xB306,
	1346:  0xB307,
	1347:  0xB309,
	1348:  0xB30A,
	1349:  0xB30B,
	1350:  0xB30C,
	1351:  0xB30D,
	1352:  0xB30E,
	1353:  0xB30F,
	1354:  0xB312,
	1355:  0xB316,
	1356:  0xB317,
	1357:  0xB318,
	1358:  0xB319,
	1359:  0xB31A,
	1360:  0xB31B,
	1361:  0xB31D,
	1362:  0xB31E,
	1363:  0xB31F,
	1364:  0xB320,
	1365:  0xB321,
	1366:  0xB322,
	1367:  0xB323,
	1368:  0xB324,
	1369:  0xB325,
	1370:  0xB326,
	1371:  0xB327,
	1372:  0xB328,
	1373:  0xB329,
	1374:  0xB32A,
	1375:  0xB32B,
	1376:  0xB32C,
	1377:  0xB32D,
	1378:  0xB32E,
	1379:  0xB32F,
	1380:  0xB330,
	1381:  0xB331,
	1382:  0xB332,
	1383:  0xB333,
	1384:  0xB334,
	1385:  0xB335,
	1386:  0xB336,
	1387:  0xB337,
	1388:  0xB338,
	1389:  0xB339,
	1390:  0xB33A,
	1391:  0xB33B,
	1392:  0xB33C,
	1393:  0xB33D,
	1394:  0xB33E,
	1395:  0xB33F,
	1396:  0xB340,
	1397:  0xB341,
	1398:  0xB342,
	1399:  0xB343,
	1400:  0xB344,
	1401:  0xB345,
	1402:  0xB346,
	1403:  0xB347,
	1404:  0xB348,
	1405:  0xB349,
	1406:  0xB34A,
	1407:  0xB34B,
	1408:  0xB34C,
	1409:  0xB34D,
	1410:  0xB34E,
	1411:  0xB34F,
	1412:  0xB350,
	1413:  0xB351,
	1414:  0xB352,
	1415:  0xB353,
	1416:  0xB357,
	1417:  0xB359,
	1418:  0xB35A,
	1419:  0xB35D,
	1420:  0xB360,
	1421:  0xB361,
	1422:  0xB362,
	1423:  0xB363,
	1424:  0xB366,
	1425:  0xB368,
	1426:  0xB36A,
	1427:  0xB36C,
	1428:  0xB36D,
	1429:  0xB36F,
	1430:  0xB372,
	1431:  0xB373,
	1432:  0xB375,
	1433:  0xB376,
	1434:  0xB377,
	1435:  0xB379,
	1436:  0xB37A,
	1437:  0xB37B,
	1438:  0xB37C,
	1439:  0xB37D,
	1440:  0xB37E,
	1441:  0xB37F,
	1442:  0xB382,
	1443:  0xB386,
	1444:  0xB387,
	1445:  0xB388,
	1446:  0xB389,
	1447:  0xB38A,
	1448:  0xB38B,
	1449:  0xB38D,
	1450:  0xB38E,
	1451:  0xB38F,
	1452:  0xB391,
	1453:  0xB392,
	1454:  0xB393,
	1455:  0xB395,
	1456:  0xB396,
	1457:  0xB397,
	1458:  0xB398,
	1459:  0xB399,
	1460:  0xB39A,
	1461:  0xB39B,
	1462:  0xB39C,
	1463:  0xB39D,
	1464:  0xB39E,
	1465:  0xB39F,
	1466:  0xB3A2,
	1467:  0xB3A3,
	1468:  0xB3A4,
	1469:  0xB3A5,
	1470:  0xB3A6,
	1471:  0xB3A7,
	1472:  0xB3A9,
	1473:  0xB3AA,
	1474:  0xB3AB,
	1475:  0xB3AD,
	1476:  0xB3AE,
	1477:  0xB3AF,
	1478:  0xB3B0,
	1479:  0xB3B1,
	1480:  0xB3B2,
	1481:  0xB3B3,
	1482:  0xB3B4,
	1483:  0xB3B5,
	1484:  0xB3B6,
	1485:  0xB3B7,
	1486:  0xB3B8,
	1487:  0xB3B9,
	1488:  0xB3BA,
	1489:  0xB3BB,
	1490:  0xB3BC,
	1491:  0xB3BD,
	1492:  0xB3BE,
	1493:  0xB3BF,
	1494:  0xB3C0,
	1495:  0xB3C1,
	1496:  0xB3C2,
	1497:  0xB3C3,
	1498:  0xB3C6,
	1499:  0xB3C7,
	1500:  0xB3C9,
	1501:  0xB3CA,
	1502:  0xB3CD,
	1503:  0xB3CF,
	1504:  0xB3D1,
	1505:  0xB3D2,
	1506:  0xB3D3,
	1507:  0xB3D6,
	1508:  0xB3D8,
	1509:  0xB3DA,
	1510:  0xB3DC,
	1511:  0xB3DE,
	1512:  0xB3DF,
	1513:  0xB3E1,
	1514:  0xB3E2,
	1515:  0xB3E3,
	1516:  0xB3E5,
	1517:  0xB3E6,
	1518:  0xB3E7,
	1519:  0xB3E9,
	1520:  0xB3EA,
	1521:  0xB3EB,
	1522:  0xB3EC,
	1523:  0xB3ED,
	1524:  0xB3EE,
	1525:  0xB3EF,
	1526:  0xB3F0,
	1527:  0xB3F1,
	1528:  0xB3F2,
	1529:  0xB3F3,
	1530:  0xB3F4,
	1531:  0xB3F5,
	1532:  0xB3F6,
	1533:  0xB3F7,
	1534:  0xB3F8,
	1535:  0xB3F9,
	1536:  0xB3FA,
	1537:  0xB3FB,
	1538:  0xB3FD,
	1539:  0xB3FE,
	1540:  0xB3FF,
	1541:  0xB400,
	1542:  0xB401,
	1543:  0xB402,
	1544:  0xB403,
	1545:  0xB404,
	1546:  0xB405,
	1547:  0xB406,
	1548:  0xB407,
	1549:  0xB408,
	1550:  0xB409,
	1551:  0xB40A,
	1552:  0xB40B,
	1553:  0xB40C,
	1554:  0xB40D,
	1555:  0xB40E,
	1556:  0xB40F,
	1557:  0xB411,
	1558:  0xB412,
	1559:  0xB413,
	1560:  0xB414,
	1561:  0xB415,
	1562:  0xB416,
	1563:  0xB417,
	1564:  0xB419,
	1565:  0xB41A,
	1566:  0xB41B,
	1567:  0xB41D,
	1568:  0xB41E,
	1569:  0xB41F,
	1570:  0xB421,
	1571:  0xB422,
	1572:  0xB423,
	1573:  0xB424,
	1574:  0xB425,
	1575:  0xB426,
	1576:  0xB427,
	1577:  0xB42A,
	1578:  0xB42C,
	1579:  0xB42D,
	1580:  0xB42E,
	1581:  0xB42F,
	1582:  0xB430,
	1583:  0xB431,
	1584:  0xB432,
	1585:  0xB433,
	1586:  0xB435,
	1587:  0xB436,
	1588:  0xB437,
	1589:  0xB438,
	1590:  0xB439,
	1591:  0xB43A,
	1592:  0xB43B,
	1593:  0xB43C,
	1594:  0xB43D,
	1595:  0xB43E,
	1596:  0xB43F,
	1597:  0xB440,
	1598:  0xB441,
	1599:  0xB442,
	1600:  0xB443,
	1601:  0xB444,
	1602:  0xB445,
	1603:  0xB446,
	1604:  0xB447,
	1605:  0xB448,
	1606:  0xB449,
	1607:  0xB44A,
	1608:  0xB44B,
	1609:  0xB44C,
	1610:  0xB44D,
	1611:  0xB44E,
	1612:  0xB44F,
	1613:  0xB452,
	1614:  0xB453,
	1615:  0xB455,
	1616:  0xB456,
	1617:  0xB457,
	1618:  0xB459,
	1619:  0xB45A,
	1620:  0xB45B,
	1621:  0xB45C,
	1622:  0xB45D,
	1623:  0xB45E,
	1624:  0xB45F,
	1625:  0xB462,
	1626:  0xB464,
	1627:  0xB466,
	1628:  0xB467,
	1629:  0xB468,
	1630:  0xB469,
	1631:  0xB46A,
	1632:  0xB46B,
	1633:  0xB46D,
	1634:  0xB46E,
	1635:  0xB46F,
	1636:  0xB470,
	1637:  0xB471,
	1638:  0xB472,
	1639:  0xB473,
	1640:  0xB474,
	1641:  0xB475,
	1642:  0xB476,
	1643:  0xB477,
	1644:  0xB478,
	1645:  0xB479,
	1646:  0xB47A,
	1647:  0xB47B,
	1648:  0xB47C,
	1649:  0xB47D,
	1650:  0xB47E,
	1651:  0xB47F,
	1652:  0xB481,
	1653:  0xB482,
	1654:  0xB483,
	1655:  0xB484,
	1656:  0xB485,
	1657:  0xB486,
	1658:  0xB487,
	1659:  0xB489,
	1660:  0xB48A,
	1661:  0xB48B,
	1662:  0xB48C,
	1663:  0xB48D,
	1664:  0xB48E,
	1665:  0xB48F,
	1666:  0xB490,
	1667:  0xB491,
	1668:  0xB492,
	1669:  0xB493,
	1670:  0xB494,
	1671:  0xB495,
	1672:  0xB496,
	1673:  0xB497,
	1674:  0xB498,
	1675:  0xB499,
	1676:  0xB49A,
	1677:  0xB49B,
	1678:  0xB49C,
	1679:  0xB49E,
	1680:  0xB49F,
	1681:  0xB4A0,
	1682:  0xB4A1,
	1683:  0xB4A2,
	1684:  0xB4A3,
	1685:  0xB4A5,
	1686:  0xB4A6,
	1687:  0xB4A7,
	1688:  0xB4A9,
	1689:  0xB4AA,
	1690:  0xB4AB,
	1691:  0xB4AD,
	1692:  0xB4AE,
	1693:  0xB4AF,
	1694:  0xB4B0,
	1695:  0xB4B1,
	1696:  0xB4B2,
	1697:  0xB4B3,
	1698:  0xB4B4,
	1699:  0xB4B6,
	1700:  0xB4B8,
	1701:  0xB4BA,
	1702:  0xB4BB,
	1703:  0xB4BC,
	1704:  0xB4BD,
	1705:  0xB4BE,
	1706:  0xB4BF,
	1707:  0xB4C1,
	1708:  0xB4C2,
	1709:  0xB4C3,
	1710:  0xB4C5,
	1711:  0xB4C6,
	1712:  0xB4C7,
	1713:  0xB4C9,
	1714:  0xB4CA,
	1715:  0xB4CB,
	1716:  0xB4CC,
	1717:  0xB4CD,
	1718:  0xB4CE,
	1719:  0xB4CF,
	1720:  0xB4D1,
	1721:  0xB4D2,
	1722:  0xB4D3,
	1723:  0xB4D4,
	1724:  0xB4D6,
	1725:  0xB4D7,
	1726:  0xB4D8,
	1727:  0xB4D9,
	1728:  0xB4DA,
	1729:  0xB4DB,
	1730:  0xB4DE,
	1731:  0xB4DF,
	1732:  0xB4E1,
	1733:  0xB4E2,
	1734:  0xB4E5,
	1735:  0xB4E7,
	1736:  0xB4E8,
	1737:  0xB4E9,
	1738:  0xB4EA,
	1739:  0xB4EB,
	1740:  0xB4EE,
	1741:  0xB4F0,
	1742:  0xB4F2,
	1743:  0xB4F3,
	1744:  0xB4F4,
	1745:  0xB4F5,
	1746:  0xB4F6,
	1747:  0xB4F7,
	1748:  0xB4F9,
	1749:  0xB4FA,
	1750:  0xB4FB,
	1751:  0xB4FC,
	1752:  0xB4FD,
	1753:  0xB4FE,
	1754:  0xB4FF,
	1755:  0xB500,
	1756:  0xB501,
	1757:  0xB502,
	1758:  0xB503,
	1759:  0xB504,
	1760:  0xB505,
	1761:  0xB506,
	1762:  0xB507,
	1763:  0xB508,
	1764:  0xB509,
	1765:  0xB50A,
	1766:  0xB50B,
	1767:  0xB50C,
	1768:  0xB50D,
	1769:  0xB50E,
	1770:  0xB50F,
	1771:  0xB510,
	1772:  0xB511,
	1773:  0xB512,
	1774:  0xB513,
	1775:  0xB516,
	1776:  0xB517,
	1777:  0xB519,
	1778:  0xB51A,
	1779:  0xB51D,
	1780:  0xB51E,
	1781:  0xB51F,
	1782:  0xB520,
	1783:  0xB521,
	1784:  0xB522,
	1785:  0xB523,
	1786:  0xB526,
	1787:  0xB52B,
	1788:  0xB52C,
	1789:  0xB52D,
	1790:  0xB52E,
	1791:  0xB52F,
	1792:  0xB532,
	1793:  0xB533,
	1794:  0xB535,
	1795:  0xB536,
	1796:  0xB537,
	1797:  0xB539,
	1798:  0xB53A,
	1799:  0xB53B,
	1800:  0xB53C,
	1801:  0xB53D,
	1802:  0xB53E,
	1803:  0xB53F,
	1804:  0xB542,
	1805:  0xB546,
	1806:  0xB547,
	1807:  0xB548,
	1808:  0xB549,
	1809:  0xB54A,
	1810:  0xB54E,
	1811:  0xB54F,
	1812:  0xB551,
	1813:  0xB552,
	1814:  0xB553,
	1815:  0xB555,
	1816:  0xB556,
	1817:  0xB557,
	1818:  0xB558,
	1819:  0xB559,
	1820:  0xB55A,
	1821:  0xB55B,
	1822:  0xB55E,
	1823:  0xB562,
	1824:  0xB563,
	1825:  0xB564,
	1826:  0xB565,
	1827:  0xB566,
	1828:  0xB567,
	1829:  0xB568,
	1830:  0xB569,
	1831:  0xB56A,
	1832:  0xB56B,
	1833:  0xB56C,
	1834:  0xB56D,
	1835:  0xB56E,
	1836:  0xB56F,
	1837:  0xB570,
	1838:  0xB571,
	1839:  0xB572,
	1840:  0xB573,
	1841:  0xB574,
	1842:  0xB575,
	1843:  0xB576,
	1844:  0xB577,
	1845:  0xB578,
	1846:  0xB579,
	1847:  0xB57A,
	1848:  0xB57B,
	1849:  0xB57C,
	1850:  0xB57D,
	1851:  0xB57E,
	1852:  0xB57F,
	1853:  0xB580,
	1854:  0xB581,
	1855:  0xB582,
	1856:  0xB583,
	1857:  0xB584,
	1858:  0xB585,
	1859:  0xB586,
	1860:  0xB587,
	1861:  0xB588,
	1862:  0xB589,
	1863:  0xB58A,
	1864:  0xB58B,
	1865:  0xB58C,
	1866:  0xB58D,
	1867:  0xB58E,
	1868:  0xB58F,
	1869:  0xB590,
	1870:  0xB591,
	1871:  0xB592,
	1872:  0xB593,
	1873:  0xB594,
	1874:  0xB595,
	1875:  0xB596,
	1876:  0xB597,
	1877:  0xB598,
	1878:  0xB599,
	1879:  0xB59A,
	1880:  0xB59B,
	1881:  0xB59C,
	1882:  0xB59D,
	1883:  0xB59E,
	1884:  0xB59F,
	1885:  0xB5A2,
	1886:  0xB5A3,
	1887:  0xB5A5,
	1888:  0xB5A6,
	1889:  0xB5A7,
	1890:  0xB5A9,
	1891:  0xB5AC,
	1892:  0xB5AD,
	1893:  0xB5AE,
	1894:  0xB5AF,
	1895:  0xB5B2,
	1896:  0xB5B6,
	1897:  0xB5B7,
	1898:  0xB5B8,
	1899:  0xB5B9,
	1900:  0xB5BA,
	1901:  0xB5BE,
	1902:  0xB5BF,
	1903:  0xB5C1,
	1904:  0xB5C2,
	1905:  0xB5C3,
	1906:  0xB5C5,
	1907:  0xB5C6,
	1908:  0xB5C7,
	1909:  0xB5C8,
	1910:  0xB5C9,
	1911:  0xB5CA,
	1912:  0xB5CB,
	1913:  0xB5CE,
	1914:  0xB5D2,
	1915:  0xB5D3,
	1916:  0xB5D4,
	1917:  0xB5D5,
	1918:  0xB5D6,
	1919:  0xB5D7,
	1920:  0xB5D9,
	1921:  0xB5DA,
	1922:  0xB5DB,
	1923:  0xB5DC,
	1924:  0xB5DD,
	1925:  0xB5DE,
	1926:  0xB5DF,
	1927:  0xB5E0,
	1928:  0xB5E1,
	1929:  0xB5E2,
	1930:  0xB5E3,
	1931:  0xB5E4,
	1932:  0xB5E5,
	1933:  0xB5E6,
	1934:  0xB5E7,
	1935:  0xB5E8,
	1936:  0xB5E9,
	1937:  0xB5EA,
	1938:  0xB5EB,
	1939:  0xB5ED,
	1940:  0xB5EE,
	1941:  0xB5EF,
	1942:  0xB5F0,
	1943:  0xB5F1,
	1944:  0xB5F2,
	1945:  0xB5F3,
	1946:  0xB5F4,
	1947:  0xB5F5,
	1948:  0xB5F6,
	1949:  0xB5F7,
	1950:  0xB5F8,
	1951:  0xB5F9,
	1952:  0xB5FA,
	1953:  0xB5FB,
	1954:  0xB5FC,
	1955:  0xB5FD,
	1956:  0xB5FE,
	1957:  0xB5FF,
	1958:  0xB600,
	1959:  0xB601,
	1960:  0xB602,
	1961:  0xB603,
	1962:  0xB604,
	1963:  0xB605,
	1964:  0xB606,
	1965:  0xB607,
	1966:  0xB608,
	1967:  0xB609,
	1968:  0xB60A,
	1969:  0xB60B,
	1970:  0xB60C,
	1971:  0xB60D,
	1972:  0xB60E,
	1973:  0xB60F,
	1974:  0xB612,
	1975:  0xB613,
	1976:  0xB615,
	1977:  0xB616,
	1978:  0xB617,
	1979:  0xB619,
	1980:  0xB61A,
	1981:  0xB61B,
	1982:  0xB61C,
	1983:  0xB61D,
	1984:  0xB61E,
	1985:  0xB61F,
	1986:  0xB620,
	1987:  0xB621,
	1988:  0xB622,
	1989:  0xB623,
	1990:  0xB624,
	1991:  0xB626,
	1992:  0xB627,
	1993:  0xB628,
	1994:  0xB629,
	1995:  0xB62A,
	1996:  0xB62B,
	1997:  0xB62D,
	1998:  0xB62E,
	1999:  0xB62F,
	2000:  0xB630,
	2001:  0xB631,
	2002:  0xB632,
	2003:  0xB633,
	2004:  0xB635,
	2005:  0xB636,
	2006:  0xB637,
	2007:  0xB638,
	2008:  0xB639,
	2009:  0xB63A,
	2010:  0xB63B,
	2011:  0xB63C,
	2012:  0xB63D,
	2013:  0xB63E,
	2014:  0xB63F,
	2015:  0xB640,
	2016:  0xB641,
	2017:  0xB642,
	2018:  0xB643,
	2019:  0xB644,
	2020:  0xB645,
	2021:  0xB646,
	2022:  0xB647,
	2023:  0xB649,
	2024:  0xB64A,
	2025:  0xB64B,
	2026:  0xB64C,
	2027:  0xB64D,
	2028:  0xB64E,
	2029:  0xB64F,
	2030:  0xB650,
	2031:  0xB651,
	2032:  0xB652,
	2033:  0xB653,
	2034:  0xB654,
	2035:  0xB655,
	2036:  0xB656,
	2037:  0xB657,
	2038:  0xB658,
	2039:  0xB659,
	2040:  0xB65A,
	2041:  0xB65B,
	2042:  0xB65C,
	2043:  0xB65D,
	2044:  0xB65E,
	2045:  0xB65F,
	2046:  0xB660,
	2047:  0xB661,
	2048:  0xB662,
	2049:  0xB663,
	2050:  0xB665,
	2051:  0xB666,
	2052:  0xB667,
	2053:  0xB669,
	2054:  0xB66A,
	2055:  0xB66B,
	2056:  0xB66C,
	2057:  0xB66D,
	2058:  0xB66E,
	2059:  0xB66F,
	2060:  0xB670,
	2061:  0xB671,
	2062:  0xB672,
	2063:  0xB673,
	2064:  0xB674,
	2065:  0xB675,
	2066:  0xB676,
	2067:  0xB677,
	2068:  0xB678,
	2069:  0xB679,
	2070:  0xB67A,
	2071:  0xB67B,
	2072:  0xB67C,
	2073:  0xB67D,
	2074:  0xB67E,
	2075:  0xB67F,
	2076:  0xB680,
	2077:  0xB681,
	2078:  0xB682,
	2079:  0xB683,
	2080:  0xB684,
	2081:  0xB685,
	2082:  0xB686,
	2083:  0xB687,
	2084:  0xB688,
	2085:  0xB689,
	2086:  0xB68A,
	2087:  0xB68B,
	2088:  0xB68C,
	2089:  0xB68D,
	2090:  0xB68E,
	2091:  0xB68F,
	2092:  0xB690,
	2093:  0xB691,
	2094:  0xB692,
	2095:  0xB693,
	2096:  0xB694,
	2097:  0xB695,
	2098:  0xB696,
	2099:  0xB697,
	2100:  0xB698,
	2101:  0xB699,
	2102:  0xB69A,
	2103:  0xB69B,
	2104:  0xB69E,
	2105:  0xB69F,
	2106:  0xB6A1,
	2107:  0xB6A2,
	2108:  0xB6A3,
	2109:  0xB6A5,
	2110:  0xB6A6,
	2111:  0xB6A7,
	2112:  0xB6A8,
	2113:  0xB6A9,
	2114:  0xB6AA,
	2115:  0xB6AD,
	2116:  0xB6AE,
	2117:  0xB6AF,
	2118:  0xB6B0,
	2119:  0xB6B2,
	2120:  0xB6B3,
	2121:  0xB6B4,
	2122:  0xB6B5,
	2123:  0xB6B6,
	2124:  0xB6B7,
	2125:  0xB6B8,
	2126:  0xB6B9,
	2127:  0xB6BA,
	2128:  0xB6BB,
	2129:  0xB6BC,
	2130:  0xB6BD,
	2131:  0xB6BE,
	2132:  0xB6BF,
	2133:  0xB6C0,
	2134:  0xB6C1,
	2135:  0xB6C2,
	2136:  0xB6C3,
	2137:  0xB6C4,
	2138:  0xB6C5,
	2139:  0xB6C6,
	2140:  0xB6C7,
	2141:  0xB6C8,
	2142:  0xB6C9,
	2143:  0xB6CA,
	2144:  0xB6CB,
	2145:  0xB6CC,
	2146:  0xB6CD,
	2147:  0xB6CE,
	2148:  0xB6CF,
	2149:  0xB6D0,
	2150:  0xB6D1,
	2151:  0xB6D2,
	2152:  0xB6D3,
	2153:  0xB6D5,
	2154:  0xB6D6,
	2155:  0xB6D7,
	2156:  0xB6D8,
	2157:  0xB6D9,
	2158:  0xB6DA,
	2159:  0xB6DB,
	2160:  0xB6DC,
	2161:  0xB6DD,
	2162:  0xB6DE,
	2163:  0xB6DF,
	2164:  0xB6E0,
	2165:  0xB6E1,
	2166:  0xB6E2,
	2167:  0xB6E3,
	2168:  0xB6E4,
	2169:  0xB6E5,
	2170:  0xB6E6,
	2171:  0xB6E7,
	2172:  0xB6E8,
	2173:  0xB6E9,
	2174:  0xB6EA,
	2175:  0xB6EB,
	2176:  0xB6EC,
	2177:  0xB6ED,
	2178:  0xB6EE,
	2179:  0xB6EF,
	2180:  0xB6F1,
	2181:  0xB6F2,
	2182:  0xB6F3,
	2183:  0xB6F5,
	2184:  0xB6F6,
	2185:  0xB6F7,
	2186:  0xB6F9,
	2187:  0xB6FA,
	2188:  0xB6FB,
	2189:  0xB6FC,
	2190:  0xB6FD,
	2191:  0xB6FE,
	2192:  0xB6FF,
	2193:  0xB702,
	2194:  0xB703,
	2195:  0xB704,
	2196:  0xB706,
	2197:  0xB707,
	2198:  0xB708,
	2199:  0xB709,
	2200:  0xB70A,
	2201:  0xB70B,
	2202:  0xB70C,
	2203:  0xB70D,
	2204:  0xB70E,
	2205:  0xB70F,
	2206:  0xB710,
	2207:  0xB711,
	2208:  0xB712,
	2209:  0xB713,
	2210:  0xB714,
	2211:  0xB715,
	2212:  0xB716,
	2213:  0xB717,
	2214:  0xB718,
	2215:  0xB719,
	2216:  0xB71A,
	2217:  0xB71B,
	2218:  0xB71C,
	2219:  0xB71D,
	2220:  0xB71E,
	2221:  0xB71F,
	2222:  0xB720,
	2223:  0xB721,
	2224:  0xB722,
	2225:  0xB723,
	2226:  0xB724,
	2227:  0xB725,
	2228:  0xB726,
	2229:  0xB727,
	2230:  0xB72A,
	2231:  0xB72B,
	2232:  0xB72D,
	2233:  0xB72E,
	2234:  0xB731,
	2235:  0xB732,
	2236:  0xB733,
	2237:  0xB734,
	2238:  0xB735,
	2239:  0xB736,
	2240:  0xB737,
	2241:  0xB73A,
	2242:  0xB73C,
	2243:  0xB73D,
	2244:  0xB73E,
	2245:  0xB73F,
	2246:  0xB740,
	2247:  0xB741,
	2248:  0xB742,
	2249:  0xB743,
	2250:  0xB745,
	2251:  0xB746,
	2252:  0xB747,
	2253:  0xB749,
	2254:  0xB74A,
	2255:  0xB74B,
	2256:  0xB74D,
	2257:  0xB74E,
	2258:  0xB74F,
	2259:  0xB750,
	2260:  0xB751,
	2261:  0xB752,
	2262:  0xB753,
	2263:  0xB756,
	2264:  0xB757,
	2265:  0xB758,
	2266:  0xB759,
	2267:  0xB75A,
	2268:  0xB75B,
	2269:  0xB75C,
	2270:  0xB75D,
	2271:  0xB75E,
	2272:  0xB75F,
	2273:  0xB761,
	2274:  0xB762,
	2275:  0xB763,
	2276:  0xB765,
	2277:  0xB766,
	2278:  0xB767,
	2279:  0xB769,
	2280:  0xB76A,
	2281:  0xB76B,
	2282:  0xB76C,
	2283:  0xB76D,
	2284:  0xB76E,
	2285:  0xB76F,
	2286:  0xB772,
	2287:  0xB774,
	2288:  0xB776,
	2289:  0xB777,
	2290:  0xB778,
	2291:  0xB779,
	2292:  0xB77A,
	2293:  0xB77B,
	2294:  0xB77E,
	2295:  0xB77F,
	2296:  0xB781,
	2297:  0xB782,
	2298:  0xB783,
	2299:  0xB785,
	2300:  0xB786,
	2301:  0xB787,
	2302:  0xB788,
	2303:  0xB789,
	2304:  0xB78A,
	2305:  0xB78B,
	2306:  0xB78E,
	2307:  0xB793,
	2308:  0xB794,
	2309:  0xB795,
	2310:  0xB79A,
	2311:  0xB79B,
	2312:  0xB79D,
	2313:  0xB79E,
	2314:  0xB79F,
	2315:  0xB7A1,
	2316:  0xB7A2,
	2317:  0xB7A3,
	2318:  0xB7A4,
	2319:  0xB7A5,
	2320:  0xB7A6,
	2321:  0xB7A7,
	2322:  0xB7AA,
	2323:  0xB7AE,
	2324:  0xB7AF,
	2325:  0xB7B0,
	2326:  0xB7B1,
	2327:  0xB7B2,
	2328:  0xB7B3,
	2329:  0xB7B6,
	2330:  0xB7B7,
	2331:  0xB7B9,
	2332:  0xB7BA,
	2333:  0xB7BB,
	2334:  0xB7BC,
	2335:  0xB7BD,
	2336:  0xB7BE,
	2337:  0xB7BF,
	2338:  0xB7C0,
	2339:  0xB7C1,
	2340:  0xB7C2,
	2341:  0xB7C3,
	2342:  0xB7C4,
	2343:  0xB7C5,
	2344:  0xB7C6,
	2345:  0xB7C8,
	2346:  0xB7CA,
	2347:  0xB7CB,
	2348:  0xB7CC,
	2349:  0xB7CD,
	2350:  0xB7CE,
	2351:  0xB7CF,
	2352:  0xB7D0,
	2353:  0xB7D1,
	2354:  0xB7D2,
	2355:  0xB7D3,
	2356:  0xB7D4,
	2357:  0xB7D5,
	2358:  0xB7D6,
	2359:  0xB7D7,
	2360:  0xB7D8,
	2361:  0xB7D9,
	2362:  0xB7DA,
	2363:  0xB7DB,
	2364:  0xB7DC,
	2365:  0xB7DD,
	2366:  0xB7DE,
	2367:  0xB7DF,
	2368:  0xB7E0,
	2369:  0xB7E1,
	2370:  0xB7E2,
	2371:  0xB7E3,
	2372:  0xB7E4,
	2373:  0xB7E5,
	2374:  0xB7E6,
	2375:  0xB7E7,
	2376:  0xB7E8,
	2377:  0xB7E9,
	2378:  0xB7EA,
	2379:  0xB7EB,
	2380:  0xB7EE,
	2381:  0xB7EF,
	2382:  0xB7F1,
	2383:  0xB7F2,
	2384:  0xB7F3,
	2385:  0xB7F5,
	2386:  0xB7F6,
	2387:  0xB7F7,
	2388:  0xB7F8,
	2389:  0xB7F9,
	2390:  0xB7FA,
	2391:  0xB7FB,
	2392:  0xB7FE,
	2393:  0xB802,
	2394:  0xB803,
	2395:  0xB804,
	2396:  0xB805,
	2397:  0xB806,
	2398:  0xB80A,
	2399:  0xB80B,
	2400:  0xB80D,
	2401:  0xB80E,
	2402:  0xB80F,
	2403:  0xB811,
	2404:  0xB812,
	2405:  0xB813,
	2406:  0xB814,
	2407:  0xB815,
	2408:  0xB816,
	2409:  0xB817,
	2410:  0xB81A,
	2411:  0xB81C,
	2412:  0xB81E,
	2413:  0xB81F,
	2414:  0xB820,
	2415:  0xB821,
	2416:  0xB822,
	2417:  0xB823,
	2418:  0xB826,
	2419:  0xB827,
	2420:  0xB829,
	2421:  0xB82A,
	2422:  0xB82B,
	2423:  0xB82D,
	2424:  0xB82E,
	2425:  0xB82F,
	2426:  0xB830,
	2427:  0xB831,
	2428:  0xB832,
	2429:  0xB833,
	2430:  0xB836,
	2431:  0xB83A,
	2432:  0xB83B,
	2433:  0xB83C,
	2434:  0xB83D,
	2435:  0xB83E,
	2436:  0xB83F,
	2437:  0xB841,
	2438:  0xB842,
	2439:  0xB843,
	2440:  0xB845,
	2441:  0xB846,
	2442:  0xB847,
	2443:  0xB848,
	2444:  0xB849,
	2445:  0xB84A,
	2446:  0xB84B,
	2447:  0xB84C,
	2448:  0xB84D,
	2449:  0xB84E,
	2450:  0xB84F,
	2451:  0xB850,
	2452:  0xB852,
	2453:  0xB854,
	2454:  0xB855,
	2455:  0xB856,
	2456:  0xB857,
	2457:  0xB858,
	2458:  0xB859,
	2459:  0xB85A,
	2460:  0xB85B,
	2461:  0xB85E,
	2462:  0xB85F,
	2463:  0xB861,
	2464:  0xB862,
	2465:  0xB863,
	2466:  0xB865,
	2467:  0xB866,
	2468:  0xB867,
	2469:  0xB868,
	2470:  0xB869,
	2471:  0xB86A,
	2472:  0xB86B,
	2473:  0xB86E,
	2474:  0xB870,
	2475:  0xB872,
	2476:  0xB873,
	2477:  0xB874,
	2478:  0xB875,
	2479:  0xB876,
	2480:  0xB877,
	2481:  0xB879,
	2482:  0xB87A,
	2483:  0xB87B,
	2484:  0xB87D,
	2485:  0xB87E,
	2486:  0xB87F,
	2487:  0xB880,
	2488:  0xB881,
	2489:  0xB882,
	2490:  0xB883,
	2491:  0xB884,
	2492:  0xB885,
	2493:  0xB886,
	2494:  0xB887,
	2495:  0xB888,
	2496:  0xB889,
	2497:  0xB88A,
	2498:  0xB88B,
	2499:  0xB88C,
	2500:  0xB88E,
	2501:  0xB88F,
	2502:  0xB890,
	2503:  0xB891,
	2504:  0xB892,
	2505:  0xB893,
	2506:  0xB894,
	2507:  0xB895,
	2508:  0xB896,
	2509:  0xB897,
	2510:  0xB898,
	2511:  0xB899,
	2512:  0xB89A,
	2513:  0xB89B,
	2514:  0xB89C,
	2515:  0xB89D,
	2516:  0xB89E,
	2517:  0xB89F,
	2518:  0xB8A0,
	2519:  0xB8A1,
	2520:  0xB8A2,
	2521:  0xB8A3,
	2522:  0xB8A4,
	2523:  0xB8A5,
	2524:  0xB8A6,
	2525:  0xB8A7,
	2526:  0xB8A9,
	2527:  0xB8AA,
	2528:  0xB8AB,
	2529:  0xB8AC,
	2530:  0xB8AD,
	2531:  0xB8AE,
	2532:  0xB8AF,
	2533:  0xB8B1,
	2534:  0xB8B2,
	2535:  0xB8B3,
	2536:  0xB8B5,
	2537:  0xB8B6,
	2538:  0xB8B7,
	2539:  0xB8B9,
	2540:  0xB8BA,
	2541:  0xB8BB,
	2542:  0xB8BC,
	2543:  0xB8BD,
	2544:  0xB8BE,
	2545:  0xB8BF,
	2546:  0xB8C2,
	2547:  0xB8C4,
	2548:  0xB8C6,
	2549:  0xB8C7,
	2550:  0xB8C8,
	2551:  0xB8C9,
	2552:  0xB8CA,
	2553:  0xB8CB,
	2554:  0xB8CD,
	2555:  0xB8CE,
	2556:  0xB8CF,
	2557:  0xB8D1,
	2558:  0xB8D2,
	2559:  0xB8D3,
	2560:  0xB8D5,
	2561:  0xB8D6,
	2562:  0xB8D7,
	2563:  0xB8D8,
	2564:  0xB8D9,
	2565:  0xB8DA,
	2566:  0xB8DB,
	2567:  0xB8DC,
	2568:  0xB8DE,
	2569:  0xB8E0,
	2570:  0xB8E2,
	2571:  0xB8E3,
	2572:  0xB8E4,
	2573:  0xB8E5,
	2574:  0xB8E6,
	2575:  0xB8E7,
	2576:  0xB8EA,
	2577:  0xB8EB,
	2578:  0xB8ED,
	2579:  0xB8EE,
	2580:  0xB8EF,
	2581:  0xB8F1,
	2582:  0xB8F2,
	2583:  0xB8F3,
	2584:  0xB8F4,
	2585:  0xB8F5,
	2586:  0xB8F6,
	2587:  0xB8F7,
	2588:  0xB8FA,
	2589:  0xB8FC,
	2590:  0xB8FE,
	2591:  0xB8FF,
	2592:  0xB900,
	2593:  0xB901,
	2594:  0xB902,
	2595:  0xB903,
	2596:  0xB905,
	2597:  0xB906,
	2598:  0xB907,
	2599:  0xB908,
	2600:  0xB909,
	2601:  0xB90A,
	2602:  0xB90B,
	2603:  0xB90C,
	2604:  0xB90D,
	2605:  0xB90E,
	2606:  0xB90F,
	2607:  0xB910,
	2608:  0xB911,
	2609:  0xB912,
	2610:  0xB913,
	2611:  0xB914,
	2612:  0xB915,
	2613:  0xB916,
	2614:  0xB917,
	2615:  0xB919,
	2616:  0xB91A,
	2617:  0xB91B,
	2618:  0xB91C,
	2619:  0xB91D,
	2620:  0xB91E,
	2621:  0xB91F,
	2622:  0xB921,
	2623:  0xB922,
	2624:  0xB923,
	2625:  0xB924,
	2626:  0xB925,
	2627:  0xB926,
	2628:  0xB927,
	2629:  0xB928,
	2630:  0xB929,
	2631:  0xB92A,
	2632:  0xB92B,
	2633:  0xB92C,
	2634:  0xB92D,
	2635:  0xB92E,
	2636:  0xB92F,
	2637:  0xB930,
	2638:  0xB931,
	2639:  0xB932,
	2640:  0xB933,
	2641:  0xB934,
	2642:  0xB935,
	2643:  0xB936,
	2644:  0xB937,
	2645:  0xB938,
	2646:  0xB939,
	2647:  0xB93A,
	2648:  0xB93B,
	2649:  0xB93E,
	2650:  0xB93F,
	2651:  0xB941,
	2652:  0xB942,
	2653:  0xB943,
	2654:  0xB945,
	2655:  0xB946,
	2656:  0xB947,
	2657:  0xB948,
	2658:  0xB949,
	2659:  0xB94A,
	2660:  0xB94B,
	2661:  0xB94D,
	2662:  0xB94E,
	2663:  0xB950,
	2664:  0xB952,
	2665:  0xB953,
	2666:  0xB954,
	2667:  0xB955,
	2668:  0xB956,
	2669:  0xB957,
	2670:  0xB95A,
	2671:  0xB95B,
	2672:  0xB95D,
	2673:  0xB95E,
	2674:  0xB95F,
	2675:  0xB961,
	2676:  0xB962,
	2677:  0xB963,
	2678:  0xB964,
	2679:  0xB965,
	2680:  0xB966,
	2681:  0xB967,
	2682:  0xB96A,
	2683:  0xB96C,
	2684:  0xB96E,
	2685:  0xB96F,
	2686:  0xB970,
	2687:  0xB971,
	2688:  0xB972,
	2689:  0xB973,
	2690:  0xB976,
	2691:  0xB977,
	2692:  0xB979,
	2693:  0xB97A,
	2694:  0xB97B,
	2695:  0xB97D,
	2696:  0xB97E,
	2697:  0xB97F,
	2698:  0xB980,
	2699:  0xB981,
	2700:  0xB982,
	2701:  0xB983,
	2702:  0xB986,
	2703:  0xB988,
	2704:  0xB98B,
	2705:  0xB98C,
	2706:  0xB98F,
	2707:  0xB990,
	2708:  0xB991,
	2709:  0xB992,
	2710:  0xB993,
	2711:  0xB994,
	2712:  0xB995,
	2713:  0xB996,
	2714:  0xB997,
	2715:  0xB998,
	2716:  0xB999,
	2717:  0xB99A,
	2718:  0xB99B,
	2719:  0xB99C,
	2720:  0xB99D,
	2721:  0xB99E,
	2722:  0xB99F,
	2723:  0xB9A0,
	2724:  0xB9A1,
	2725:  0xB9A2,
	2726:  0xB9A3,
	2727:  0xB9A4,
	2728:  0xB9A5,
	2729:  0xB9A6,
	2730:  0xB9A7,
	2731:  0xB9A8,
	2732:  0xB9A9,
	2733:  0xB9AA,
	2734:  0xB9AB,
	2735:  0xB9AE,
	2736:  0xB9AF,
	2737:  0xB9B1,
	2738:  0xB9B2,
	2739:  0xB9B3,
	2740:  0xB9B5,
	2741:  0xB9B6,
	2742:  0xB9B7,
	2743:  0xB9B8,
	2744:  0xB9B9,
	2745:  0xB9BA,
	2746:  0xB9BB,
	2747:  0xB9BE,
	2748:  0xB9C0,
	2749:  0xB9C2,
	2750:  0xB9C3,
	2751:  0xB9C4,
	2752:  0xB9C5,
	2753:  0xB9C6,
	2754:  0xB9C7,
	2755:  0xB9CA,
	2756:  0xB9CB,
	2757:  0xB9CD,
	2758:  0xB9D3,
	2759:  0xB9D4,
	2760:  0xB9D5,
	2761:  0xB9D6,
	2762:  0xB9D7,
	2763:  0xB9DA,
	2764:  0xB9DC,
	2765:  0xB9DF,
	2766:  0xB9E0,
	2767:  0xB9E2,
	2768:  0xB9E6,
	2769:  0xB9E7,
	2770:  0xB9E9,
	2771:  0xB9EA,
	2772:  0xB9EB,
	2773:  0xB9ED,
	2774:  0xB9EE,
	2775:  0xB9EF,
	2776:  0xB9F0,
	2777:  0xB9F1,
	2778:  0xB9F2,
	2779:  0xB9F3,
	2780:  0xB9F6,
	2781:  0xB9FB,
	2782:  0xB9FC,
	2783:  0xB9FD,
	2784:  0xB9FE,
	2785:  0xB9FF,
	2786:  0xBA02,
	2787:  0xBA03,
	2788:  0xBA04,
	2789:  0xBA05,
	2790:  0xBA06,
	2791:  0xBA07,
	2792:  0xBA09,
	2793:  0xBA0A,
	2794:  0xBA0B,
	2795:  0xBA0C,
	2796:  0xBA0D,
	2797:  0xBA0E,
	2798:  0xBA0F,
	2799:  0xBA10,
	2800:  0xBA11,
	2801:  0xBA12,
	2802:  0xBA13,
	2803:  0xBA14,
	2804:  0xBA16,
	2805:  0xBA17,
	2806:  0xBA18,
	2807:  0xBA19,
	2808:  0xBA1A,
	2809:  0xBA1B,
	2810:  0xBA1C,
	2811:  0xBA1D,
	2812:  0xBA1E,
	2813:  0xBA1F,
	2814:  0xBA20,
	2815:  0xBA21,
	2816:  0xBA22,
	2817:  0xBA23,
	2818:  0xBA24,
	2819:  0xBA25,
	2820:  0xBA26,
	2821:  0xBA27,
	2822:  0xBA28,
	2823:  0xBA29,
	2824:  0xBA2A,
	2825:  0xBA2B,
	2826:  0xBA2C,
	2827:  0xBA2D,
	2828:  0xBA2E,
	2829:  0xBA2F,
	2830:  0xBA30,
	2831:  0xBA31,
	2832:  0xBA32,
	2833:  0xBA33,
	2834:  0xBA34,
	2835:  0xBA35,
	2836:  0xBA36,
	2837:  0xBA37,
	2838:  0xBA3A,
	2839:  0xBA3B,
	2840:  0xBA3D,
	2841:  0xBA3E,
	2842:  0xBA3F,
	2843:  0xBA41,
	2844:  0xBA43,
	2845:  0xBA44,
	2846:  0xBA45,
	2847:  0xBA46,
	2848:  0xBA47,
	2849:  0xBA4A,
	2850:  0xBA4C,
	2851:  0xBA4F,
	2852:  0xBA50,
	2853:  0xBA51,
	2854:  0xBA52,
	2855:  0xBA56,
	2856:  0xBA57,
	2857:  0xBA59,
	2858:  0xBA5A,
	2859:  0xBA5B,
	2860:  0xBA5D,
	2861:  0xBA5E,
	2862:  0xBA5F,
	2863:  0xBA60,
	2864:  0xBA61,
	2865:  0xBA62,
	2866:  0xBA63,
	2867:  0xBA66,
	2868:  0xBA6A,
	2869:  0xBA6B,
	2870:  0xBA6C,
	2871:  0xBA6D,
	2872:  0xBA6E,
	2873:  0xBA6F,
	2874:  0xBA72,
	2875:  0xBA73,
	2876:  0xBA75,
	2877:  0xBA76,
	2878:  0xBA77,
	2879:  0xBA79,
	2880:  0xBA7A,
	2881:  0xBA7B,
	2882:  0xBA7C,
	2883:  0xBA7D,
	2884:  0xBA7E,
	2885:  0xBA7F,
	2886:  0xBA80,
	2887:  0xBA81,
	2888:  0xBA82,
	2889:  0xBA86,
	2890:  0xBA88,
	2891:  0xBA89,
	2892:  0xBA8A,
	2893:  0xBA8B,
	2894:  0xBA8D,
	2895:  0xBA8E,
	2896:  0xBA8F,
	2897:  0xBA90,
	2898:  0xBA91,
	2899:  0xBA92,
	2900:  0xBA93,
	2901:  0xBA94,
	2902:  0xBA95,
	2903:  0xBA96,
	2904:  0xBA97,
	2905:  0xBA98,
	2906:  0xBA99,
	2907:  0xBA9A,
	2908:  0xBA9B,
	2909:  0xBA9C,
	2910:  0xBA9D,
	2911:  0xBA9E,
	2912:  0xBA9F,
	2913:  0xBAA0,
	2914:  0xBAA1,
	2915:  0xBAA2,
	2916:  0xBAA3,
	2917:  0xBAA4,
	2918:  0xBAA5,
	2919:  0xBAA6,
	2920:  0xBAA7,
	2921:  0xBAAA,
	2922:  0xBAAD,
	2923:  0xBAAE,
	2924:  0xBAAF,
	2925:  0xBAB1,
	2926:  0xBAB3,
	2927:  0xBAB4,
	2928:  0xBAB5,
	2929:  0xBAB6,
	2930:  0xBAB7,
	2931:  0xBABA,
	2932:  0xBABC,
	2933:  0xBABE,
	2934:  0xBABF,
	2935:  0xBAC0,
	2936:  0xBAC1,
	2937:  0xBAC2,
	2938:  0xBAC3,
	2939:  0xBAC5,
	2940:  0xBAC6,
	2941:  0xBAC7,
	2942:  0xBAC9,
	2943:  0xBACA,
	2944:  0xBACB,
	2945:  0xBACC,
	2946:  0xBACD,
	2947:  0xBACE,
	2948:  0xBACF,
	2949:  0xBAD0,
	2950:  0xBAD1,
	2951:  0xBAD2,
	2952:  0xBAD3,
	2953:  0xBAD4,
	2954:  0xBAD5,
	2955:  0xBAD6,
	2956:  0xBAD7,
	2957:  0xBADA,
	2958:  0xBADB,
	2959:  0xBADC,
	2960:  0xBADD,
	2961:  0xBADE,
	2962:  0xBADF,
	2963:  0xBAE0,
	2964:  0xBAE1,
	2965:  0xBAE2,
	2966:  0xBAE3,
	2967:  0xBAE4,
	2968:  0xBAE5,
	2969:  0xBAE6,
	2970:  0xBAE7,
	2971:  0xBAE8,
	2972:  0xBAE9,
	2973:  0xBAEA,
	2974:  0xBAEB,
	2975:  0xBAEC,
	2976:  0xBAED,
	2977:  0xBAEE,
	2978:  0xBAEF,
	2979:  0xBAF0,
	2980:  0xBAF1,
	2981:  0xBAF2,
	2982:  0xBAF3,
	2983:  0xBAF4,
	2984:  0xBAF5,
	2985:  0xBAF6,
	2986:  0xBAF7,
	2987:  0xBAF8,
	2988:  0xBAF9,
	2989:  0xBAFA,
	2990:  0xBAFB,
	2991:  0xBAFD,
	2992:  0xBAFE,
	2993:  0xBAFF,
	2994:  0xBB01,
	2995:  0xBB02,
	2996:  0xBB03,
	2997:  0xBB05,
	2998:  0xBB06,
	2999:  0xBB07,
	3000:  0xBB08,
	3001:  0xBB09,
	3002:  0xBB0A,
	3003:  0xBB0B,
	3004:  0xBB0C,
	3005:  0xBB0E,
	3006:  0xBB10,
	3007:  0xBB12,
	3008:  0xBB13,
	3009:  0xBB14,
	3010:  0xBB15,
	3011:  0xBB16,
	3012:  0xBB17,
	3013:  0xBB19,
	3014:  0xBB1A,
	3015:  0xBB1B,
	3016:  0xBB1D,
	3017:  0xBB1E,
	3018:  0xBB1F,
	3019:  0xBB21,
	3020:  0xBB22,
	3021:  0xBB23,
	3022:  0xBB24,
	3023:  0xBB25,
	3024:  0xBB26,
	3025:  0xBB27,
	3026:  0xBB28,
	3027:  0xBB2A,
	3028:  0xBB2C,
	3029:  0xBB2D,
	3030:  0xBB2E,
	3031:  0xBB2F,
	3032:  0xBB30,
	3033:  0xBB31,
	3034:  0xBB32,
	3035:  0xBB33,
	3036:  0xBB37,
	3037:  0xBB39,
	3038:  0xBB3A,
	3039:  0xBB3F,
	3040:  0xBB40,
	3041:  0xBB41,
	3042:  0xBB42,
	3043:  0xBB43,
	3044:  0xBB46,
	3045:  0xBB48,
	3046:  0xBB4A,
	3047:  0xBB4B,
	3048:  0xBB4C,
	3049:  0xBB4E,
	3050:  0xBB51,
	3051:  0xBB52,
	3052:  0xBB53,
	3053:  0xBB55,
	3054:  0xBB56,
	3055:  0xBB57,
	3056:  0xBB59,
	3057:  0xBB5A,
	3058:  0xBB5B,
	3059:  0xBB5C,
	3060:  0xBB5D,
	3061:  0xBB5E,
	3062:  0xBB5F,
	3063:  0xBB60,
	3064:  0xBB62,
	3065:  0xBB64,
	3066:  0xBB65,
	3067:  0xBB66,
	3068:  0xBB67,
	3069:  0xBB68,
	3070:  0xBB69,
	3071:  0xBB6A,
	3072:  0xBB6B,
	3073:  0xBB6D,
	3074:  0xBB6E,
	3075:  0xBB6F,
	3076:  0xBB70,
	3077:  0xBB71,
	3078:  0xBB72,
	3079:  0xBB73,
	3080:  0xBB74,
	3081:  0xBB75,
	3082:  0xBB76,
	3083:  0xBB77,
	3084:  0xBB78,
	3085:  0xBB79,
	3086:  0xBB7A,
	3087:  0xBB7B,
	3088:  0xBB7C,
	3089:  0xBB7D,
	3090:  0xBB7E,
	3091:  0xBB7F,
	3092:  0xBB80,
	3093:  0xBB81,
	3094:  0xBB82,
	3095:  0xBB83,
	3096:  0xBB84,
	3097:  0xBB85,
	3098:  0xBB86,
	3099:  0xBB87,
	3100:  0xBB89,
	3101:  0xBB8A,
	3102:  0xBB8B,
	3103:  0xBB8D,
	3104:  0xBB8E,
	3105:  0xBB8F,
	3106:  0xBB91,
	3107:  0xBB92,
	3108:  0xBB93,
	3109:  0xBB94,
	3110:  0xBB95,
	3111:  0xBB96,
	3112:  0xBB97,
	3113:  0xBB98,
	3114:  0xBB99,
	3115:  0xBB9A,
	3116:  0xBB9B,
	3117:  0xBB9C,
	3118:  0xBB9D,
	3119:  0xBB9E,
	3120:  0xBB9F,
	3121:  0xBBA0,
	3122:  0xBBA1,
	3123:  0xBBA2,
	3124:  0xBBA3,
	3125:  0xBBA5,
	3126:  0xBBA6,
	3127:  0xBBA7,
	3128:  0xBBA9,
	3129:  0xBBAA,
	3130:  0xBBAB,
	3131:  0xBBAD,
	3132:  0xBBAE,
	3133:  0xBBAF,
	3134:  0xBBB0,
	3135:  0xBBB1,
	3136:  0xBBB2,
	3137:  0xBBB3,
	3138:  0xBBB5,
	3139:  0xBBB6,
	3140:  0xBBB8,
	3141:  0xBBB9,
	3142:  0xBBBA,
	3143:  0xBBBB,
	3144:  0xBBBC,
	3145:  0xBBBD,
	3146:  0xBBBE,
	3147:  0xBBBF,
	3148:  0xBBC1,
	3149:  0xBBC2,
	3150:  0xBBC3,
	3151:  0xBBC5,
	3152:  0xBBC6,
	3153:  0xBBC7,
	3154:  0xBBC9,
	3155:  0xBBCA,
	3156:  0xBBCB,
	3157:  0xBBCC,
	3158:  0xBBCD,
	3159:  0xBBCE,
	3160:  0xBBCF,
	3161:  0xBBD1,
	3162:  0xBBD2,
	3163:  0xBBD4,
	3164:  0xBBD5,
	3165:  0xBBD6,
	3166:  0xBBD7,
	3167:  0xBBD8,
	3168:  0xBBD9,
	3169:  0xBBDA,
	3170:  0xBBDB,
	3171:  0xBBDC,
	3172:  0xBBDD,
	3173:  0xBBDE,
	3174:  0xBBDF,
	3175:  0xBBE0,
	3176:  0xBBE1,
	3177:  0xBBE2,
	3178:  0xBBE3,
	3179:  0xBBE4,
	3180:  0xBBE5,
	3181:  0xBBE6,
	3182:  0xBBE7,
	3183:  0xBBE8,
	3184:  0xBBE9,
	3185:  0xBBEA,
	3186:  0xBBEB,
	3187:  0xBBEC,
	3188:  0xBBED,
	3189:  0xBBEE,
	3190:  0xBBEF,
	3191:  0xBBF0,
	3192:  0xBBF1,
	3193:  0xBBF2,
	3194:  0xBBF3,
	3195:  0xBBF4,
	3196:  0xBBF5,
	3197:  0xBBF6,
	3198:  0xBBF7,
	3199:  0xBBFA,
	3200:  0xBBFB,
	3201:  0xBBFD,
	3202:  0xBBFE,
	3203:  0xBC01,
	3204:  0xBC03,
	3205:  0xBC04,
	3206:  0xBC05,
	3207:  0xBC06,
	3208:  0xBC07,
	3209:  0xBC0A,
	3210:  0xBC0E,
	3211:  0xBC10,
	3212:  0xBC12,
	3213:  0xBC13,
	3214:  0xBC19,
	3215:  0xBC1A,
	3216:  0xBC20,
	3217:  0xBC21,
	3218:  0xBC22,
	3219:  0xBC23,
	3220:  0xBC26,
	3221:  0xBC28,
	3222:  0xBC2A,
	3223:  0xBC2B,
	3224:  0xBC2C,
	3225:  0xBC2E,
	3226:  0xBC2F,
	3227:  0xBC32,
	3228:  0xBC33,
	3229:  0xBC35,
	3230:  0xBC36,
	3231:  0xBC37,
	3232:  0xBC39,
	3233:  0xBC3A,
	3234:  0xBC3B,
	3235:  0xBC3C,
	3236:  0xBC3D,
	3237:  0xBC3E,
	3238:  0xBC3F,
	3239:  0xBC42,
	3240:  0xBC46,
	3241:  0xBC47,
	3242:  0xBC48,
	3243:  0xBC4A,
	3244:  0xBC4B,
	3245:  0xBC4E,
	3246:  0xBC4F,
	3247:  0xBC51,
	3248:  0xBC52,
	3249:  0xBC53,
	3250:  0xBC54,
	3251:  0xBC55,
	3252:  0xBC56,
	3253:  0xBC57,
	3254:  0xBC58,
	3255:  0xBC59,
	3256:  0xBC5A,
	3257:  0xBC5B,
	3258:  0xBC5C,
	3259:  0xBC5E,
	3260:  0xBC5F,
	3261:  0xBC60,
	3262:  0xBC61,
	3263:  0xBC62,
	3264:  0xBC63,
	3265:  0xBC64,
	3266:  0xBC65,
	3267:  0xBC66,
	3268:  0xBC67,
	3269:  0xBC68,
	3270:  0xBC69,
	3271:  0xBC6A,
	3272:  0xBC6B,
	3273:  0xBC6C,
	3274:  0xBC6D,
	3275:  0xBC6E,
	3276:  0xBC6F,
	3277:  0xBC70,
	3278:  0xBC71,
	3279:  0xBC72,
	3280:  0xBC73,
	3281:  0xBC74,
	3282:  0xBC75,
	3283:  0xBC76,
	3284:  0xBC77,
	3285:  0xBC78,
	3286:  0xBC79,
	3287:  0xBC7A,
	3288:  0xBC7B,
	3289:  0xBC7C,
	3290:  0xBC7D,
	3291:  0xBC7E,
	3292:  0xBC7F,
	3293:  0xBC80,
	3294:  0xBC81,
	3295:  0xBC82,
	3296:  0xBC83,
	3297:  0xBC86,
	3298:  0xBC87,
	3299:  0xBC89,
	3300:  0xBC8A,
	3301:  0xBC8D,
	3302:  0xBC8F,
	3303:  0xBC90,
	3304:  0xBC91,
	3305:  0xBC92,
	3306:  0xBC93,
	3307:  0xBC96,
	3308:  0xBC98,
	3309:  0xBC9B,
	3310:  0xBC9C,
	3311:  0xBC9D,
	3312:  0xBC9E,
	3313:  0xBC9F,
	3314:  0xBCA2,
	3315:  0xBCA3,
	3316:  0xBCA5,
	3317:  0xBCA6,
	3318:  0xBCA9,
	3319:  0xBCAA,
	3320:  0xBCAB,
	3321:  0xBCAC,
	3322:  0xBCAD,
	3323:  0xBCAE,
	3324:  0xBCAF,
	3325:  0xBCB2,
	3326:  0xBCB6,
	3327:  0xBCB7,
	3328:  0xBCB8,
	3329:  0xBCB9,
	3330:  0xBCBA,
	3331:  0xBCBB,
	3332:  0xBCBE,
	3333:  0xBCBF,
	3334:  0xBCC1,
	3335:  0xBCC2,
	3336:  0xBCC3,
	3337:  0xBCC5,
	3338:  0xBCC6,
	3339:  0xBCC7,
	3340:  0xBCC8,
	3341:  0xBCC9,
	3342:  0xBCCA,
	3343:  0xBCCB,
	3344:  0xBCCC,
	3345:  0xBCCE,
	3346:  0xBCD2,
	3347:  0xBCD3,
	3348:  0xBCD4,
	3349:  0xBCD6,
	3350:  0xBCD7,
	3351:  0xBCD9,
	3352:  0xBCDA,
	3353:  0xBCDB,
	3354:  0xBCDD,
	3355:  0xBCDE,
	3356:  0xBCDF,
	3357:  0xBCE0,
	3358:  0xBCE1,
	3359:  0xBCE2,
	3360:  0xBCE3,
	3361:  0xBCE4,
	3362:  0xBCE5,
	3363:  0xBCE6,
	3364:  0xBCE7,
	3365:  0xBCE8,
	3366:  0xBCE9,
	3367:  0xBCEA,
	3368:  0xBCEB,
	3369:  0xBCEC,
	3370:  0xBCED,
	3371:  0xBCEE,
	3372:  0xBCEF,
	3373:  0xBCF0,
	3374:  0xBCF1,
	3375:  0xBCF2,
	3376:  0xBCF3,
	3377:  0xBCF7,
	3378:  0xBCF9,
	3379:  0xBCFA,
	3380:  0xBCFB,
	3381:  0xBCFD,
	3382:  0xBCFE,
	3383:  0xBCFF,
	3384:  0xBD00,
	3385:  0xBD01,
	3386:  0xBD02,
	3387:  0xBD03,
	3388:  0xBD06,
	3389:  0xBD08,
	3390:  0xBD0A,
	3391:  0xBD0B,
	3392:  0xBD0C,
	3393:  0xBD0D,
	3394:  0xBD0E,
	3395:  0xBD0F,
	3396:  0xBD11,
	3397:  0xBD12,
	3398:  0xBD13,
	3399:  0xBD15,
	3400:  0xBD16,
	3401:  0xBD17,
	3402:  0xBD18,
	3403:  0xBD19,
	3404:  0xBD1A,
	3405:  0xBD1B,
	3406:  0xBD1C,
	3407:  0xBD1D,
	3408:  0xBD1E,
	3409:  0xBD1F,
	3410:  0xBD20,
	3411:  0xBD21,
	3412:  0xBD22,
	3413:  0xBD23,
	3414:  0xBD25,
	3415:  0xBD26,
	3416:  0xBD27,
	3417:  0xBD28,
	3418:  0xBD29,
	3419:  0xBD2A,
	3420:  0xBD2B,
	3421:  0xBD2D,
	3422:  0xBD2E,
	3423:  0xBD2F,
	3424:  0xBD30,
	3425:  0xBD31,
	3426:  0xBD32,
	3427:  0xBD33,
	3428:  0xBD34,
	3429:  0xBD35,
	3430:  0xBD36,
	3431:  0xBD37,
	3432:  0xBD38,
	3433:  0xBD39,
	3434:  0xBD3A,
	3435:  0xBD3B,
	3436:  0xBD3C,
	3437:  0xBD3D,
	3438:  0xBD3E,
	3439:  0xBD3F,
	3440:  0xBD41,
	3441:  0xBD42,
	3442:  0xBD43,
	3443:  0xBD44,
	3444:  0xBD45,
	3445:  0xBD46,
	3446:  0xBD47,
	3447:  0xBD4A,
	3448:  0xBD4B,
	3449:  0xBD4D,
	3450:  0xBD4E,
	3451:  0xBD4F,
	3452:  0xBD51,
	3453:  0xBD52,
	3454:  0xBD53,
	3455:  0xBD54,
	3456:  0xBD55,
	3457:  0xBD56,
	3458:  0xBD57,
	3459:  0xBD5A,
	3460:  0xBD5B,
	3461:  0xBD5C,
	3462:  0xBD5D,
	3463:  0xBD5E,
	3464:  0xBD5F,
	3465:  0xBD60,
	3466:  0xBD61,
	3467:  0xBD62,
	3468:  0xBD63,
	3469:  0xBD65,
	3470:  0xBD66,
	3471:  0xBD67,
	3472:  0xBD69,
	3473:  0xBD6A,
	3474:  0xBD6B,
	3475:  0xBD6C,
	3476:  0xBD6D,
	3477:  0xBD6E,
	3478:  0xBD6F,
	3479:  0xBD70,
	3480:  0xBD71,
	3481:  0xBD72,
	3482:  0xBD73,
	3483:  0xBD74,
	3484:  0xBD75,
	3485:  0xBD76,
	3486:  0xBD77,
	3487:  0xBD78,
	3488:  0xBD79,
	3489:  0xBD7A,
	3490:  0xBD7B,
	3491:  0xBD7C,
	3492:  0xBD7D,
	3493:  0xBD7E,
	3494:  0xBD7F,
	3495:  0xBD82,
	3496:  0xBD83,
	3497:  0xBD85,
	3498:  0xBD86,
	3499:  0xBD8B,
	3500:  0xBD8C,
	3501:  0xBD8D,
	3502:  0xBD8E,
	3503:  0xBD8F,
	3504:  0xBD92,
	3505:  0xBD94,
	3506:  0xBD96,
	3507:  0xBD97,
	3508:  0xBD98,
	3509:  0xBD9B,
	3510:  0xBD9D,
	3511:  0xBD9E,
	3512:  0xBD9F,
	3513:  0xBDA0,
	3514:  0xBDA1,
	3515:  0xBDA2,
	3516:  0xBDA3,
	3517:  0xBDA5,
	3518:  0xBDA6,
	3519:  0xBDA7,
	3520:  0xBDA8,
	3521:  0xBDA9,
	3522:  0xBDAA,
	3523:  0xBDAB,
	3524:  0xBDAC,
	3525:  0xBDAD,
	3526:  0xBDAE,
	3527:  0xBDAF,
	3528:  0xBDB1,
	3529:  0xBDB2,
	3530:  0xBDB3,
	3531:  0xBDB4,
	3532:  0xBDB5,
	3533:  0xBDB6,
	3534:  0xBDB7,
	3535:  0xBDB9,
	3536:  0xBDBA,
	3537:  0xBDBB,
	3538:  0xBDBC,
	3539:  0xBDBD,
	3540:  0xBDBE,
	3541:  0xBDBF,
	3542:  0xBDC0,
	3543:  0xBDC1,
	3544:  0xBDC2,
	3545:  0xBDC3,
	3546:  0xBDC4,
	3547:  0xBDC5,
	3548:  0xBDC6,
	3549:  0xBDC7,
	3550:  0xBDC8,
	3551:  0xBDC9,
	3552:  0xBDCA,
	3553:  0xBDCB,
	3554:  0xBDCC,
	3555:  0xBDCD,
	3556:  0xBDCE,
	3557:  0xBDCF,
	3558:  0xBDD0,
	3559:  0xBDD1,
	3560:  0xBDD2,
	3561:  0xBDD3,
	3562:  0xBDD6,
	3563:  0xBDD7,
	3564:  0xBDD9,
	3565:  0xBDDA,
	3566:  0xBDDB,
	3567:  0xBDDD,
	3568:  0xBDDE,
	3569:  0xBDDF,
	3570:  0xBDE0,
	3571:  0xBDE1,
	3572:  0xBDE2,
	3573:  0xBDE3,
	3574:  0xBDE4,
	3575:  0xBDE5,
	3576:  0xBDE6,
	3577:  0xBDE7,
	3578:  0xBDE8,
	3579:  0xBDEA,
	3580:  0xBDEB,
	3581:  0xBDEC,
	3582:  0xBDED,
	3583:  0xBDEE,
	3584:  0xBDEF,
	3585:  0xBDF1,
	3586:  0xBDF2,
	3587:  0xBDF3,
	3588:  0xBDF5,
	3589:  0xBDF6,
	3590:  0xBDF7,
	3591:  0xBDF9,
	3592:  0xBDFA,
	3593:  0xBDFB,
	3594:  0xBDFC,
	3595:  0xBDFD,
	3596:  0xBDFE,
	3597:  0xBDFF,
	3598:  0xBE01,
	3599:  0xBE02,
	3600:  0xBE04,
	3601:  0xBE06,
	3602:  0xBE07,
	3603:  0xBE08,
	3604:  0xBE09,
	3605:  0xBE0A,
	3606:  0xBE0B,
	3607:  0xBE0E,
	3608:  0xBE0F,
	3609:  0xBE11,
	3610:  0xBE12,
	3611:  0xBE13,
	3612:  0xBE15,
	3613:  0xBE16,
	3614:  0xBE17,
	3615:  0xBE18,
	3616:  0xBE19,
	3617:  0xBE1A,
	3618:  0xBE1B,
	3619:  0xBE1E,
	3620:  0xBE20,
	3621:  0xBE21,
	3622:  0xBE22,
	3623:  0xBE23,
	3624:  0xBE24,
	3625:  0xBE25,
	3626:  0xBE26,
	3627:  0xBE27,
	3628:  0xBE28,
	3629:  0xBE29,
	3630:  0xBE2A,
	3631:  0xBE2B,
	3632:  0xBE2C,
	3633:  0xBE2D,
	3634:  0xBE2E,
	3635:  0xBE2F,
	3636:  0xBE30,
	3637:  0xBE31,
	3638:  0xBE32,
	3639:  0xBE33,
	3640:  0xBE34,
	3641:  0xBE35,
	3642:  0xBE36,
	3643:  0xBE37,
	3644:  0xBE38,
	3645:  0xBE39,
	3646:  0xBE3A,
	3647:  0xBE3B,
	3648:  0xBE3C,
	3649:  0xBE3D,
	3650:  0xBE3E,
	3651:  0xBE3F,
	3652:  0xBE40,
	3653:  0xBE41,
	3654:  0xBE42,
	3655:  0xBE43,
	3656:  0xBE46,
	3657:  0xBE47,
	3658:  0xBE49,
	3659:  0xBE4A,
	3660:  0xBE4B,
	3661:  0xBE4D,
	3662:  0xBE4F,
	3663:  0xBE50,
	3664:  0xBE51,
	3665:  0xBE52,
	3666:  0xBE53,
	3667:  0xBE56,
	3668:  0xBE58,
	3669:  0xBE5C,
	3670:  0xBE5D,
	3671:  0xBE5E,
	3672:  0xBE5F,
	3673:  0xBE62,
	3674:  0xBE63,
	3675:  0xBE65,
	3676:  0xBE66,
	3677:  0xBE67,
	3678:  0xBE69,
	3679:  0xBE6B,
	3680:  0xBE6C,
	3681:  0xBE6D,
	3682:  0xBE6E,
	3683:  0xBE6F,
	3684:  0xBE72,
	3685:  0xBE76,
	3686:  0xBE77,
	3687:  0xBE78,
	3688:  0xBE79,
	3689:  0xBE7A,
	3690:  0xBE7E,
	3691:  0xBE7F,
	3692:  0xBE81,
	3693:  0xBE82,
	3694:  0xBE83,
	3695:  0xBE85,
	3696:  0xBE86,
	3697:  0xBE87,
	3698:  0xBE88,
	3699:  0xBE89,
	3700:  0xBE8A,
	3701:  0xBE8B,
	3702:  0xBE8E,
	3703:  0xBE92,
	3704:  0xBE93,
	3705:  0xBE94,
	3706:  0xBE95,
	3707:  0xBE96,
	3708:  0xBE97,
	3709:  0xBE9A,
	3710:  0xBE9B,
	3711:  0xBE9C,
	3712:  0xBE9D,
	3713:  0xBE9E,
	3714:  0xBE9F,
	3715:  0xBEA0,
	3716:  0xBEA1,
	3717:  0xBEA2,
	3718:  0xBEA3,
	3719:  0xBEA4,
	3720:  0xBEA5,
	3721:  0xBEA6,
	3722:  0xBEA7,
	3723:  0xBEA9,
	3724:  0xBEAA,
	3725:  0xBEAB,
	3726:  0xBEAC,
	3727:  0xBEAD,
	3728:  0xBEAE,
	3729:  0xBEAF,
	3730:  0xBEB0,
	3731:  0xBEB1,
	3732:  0xBEB2,
	3733:  0xBEB3,
	3734:  0xBEB4,
	3735:  0xBEB5,
	3736:  0xBEB6,
	3737:  0xBEB7,
	3738:  0xBEB8,
	3739:  0xBEB9,
	3740:  0xBEBA,
	3741:  0xBEBB,
	3742:  0xBEBC,
	3743:  0xBEBD,
	3744:  0xBEBE,
	3745:  0xBEBF,
	3746:  0xBEC0,
	3747:  0xBEC1,
	3748:  0xBEC2,
	3749:  0xBEC3,
	3750:  0xBEC4,
	3751:  0xBEC5,
	3752:  0xBEC6,
	3753:  0xBEC7,
	3754:  0xBEC8,
	3755:  0xBEC9,
	3756:  0xBECA,
	3757:  0xBECB,
	3758:  0xBECC,
	3759:  0xBECD,
	3760:  0xBECE,
	3761:  0xBECF,
	3762:  0xBED2,
	3763:  0xBED3,
	3764:  0xBED5,
	3765:  0xBED6,
	3766:  0xBED9,
	3767:  0xBEDA,
	3768:  0xBEDB,
	3769:  0xBEDC,
	3770:  0xBEDD,
	3771:  0xBEDE,
	3772:  0xBEDF,
	3773:  0xBEE1,
	3774:  0xBEE2,
	3775:  0xBEE6,
	3776:  0xBEE7,
	3777:  0xBEE8,
	3778:  0xBEE9,
	3779:  0xBEEA,
	3780:  0xBEEB,
	3781:  0xBEED,
	3782:  0xBEEE,
	3783:  0xBEEF,
	3784:  0xBEF0,
	3785:  0xBEF1,
	3786:  0xBEF2,
	3787:  0xBEF3,
	3788:  0xBEF4,
	3789:  0xBEF5,
	3790:  0xBEF6,
	3791:  0xBEF7,
	3792:  0xBEF8,
	3793:  0xBEF9,
	3794:  0xBEFA,
	3795:  0xBEFB,
	3796:  0xBEFC,
	3797:  0xBEFD,
	3798:  0xBEFE,
	3799:  0xBEFF,
	3800:  0xBF00,
	3801:  0xBF02,
	3802:  0xBF03,
	3803:  0xBF04,
	3804:  0xBF05,
	3805:  0xBF06,
	3806:  0xBF07,
	3807:  0xBF0A,
	3808:  0xBF0B,
	3809:  0xBF0C,
	3810:  0xBF0D,
	3811:  0xBF0E,
	3812:  0xBF0F,
	3813:  0xBF10,
	3814:  0xBF11,
	3815:  0xBF12,
	3816:  0xBF13,
	3817:  0xBF14,
	3818:  0xBF15,
	3819:  0xBF16,
	3820:  0xBF17,
	3821:  0xBF1A,
	3822:  0xBF1E,
	3823:  0xBF1F,
	3824:  0xBF20,
	3825:  0xBF21,
	3826:  0xBF22,
	3827:  0xBF23,
	3828:  0xBF24,
	3829:  0xBF25,
	3830:  0xBF26,
	3831:  0xBF27,
	3832:  0xBF28,
	3833:  0xBF29,
	3834:  0xBF2A,
	3835:  0xBF2B,
	3836:  0xBF2C,
	3837:  0xBF2D,
	3838:  0xBF2E,
	3839:  0xBF2F,
	3840:  0xBF30,
	3841:  0xBF31,
	3842:  0xBF32,
	3843:  0xBF33,
	3844:  0xBF34,
	3845:  0xBF35,
	3846:  0xBF36,
	3847:  0xBF37,
	3848:  0xBF38,
	3849:  0xBF39,
	3850:  0xBF3A,
	3851:  0xBF3B,
	3852:  0xBF3C,
	3853:  0xBF3D,
	3854:  0xBF3E,
	3855:  0xBF3F,
	3856:  0xBF42,
	3857:  0xBF43,
	3858:  0xBF45,
	3859:  0xBF46,
	3860:  0xBF47,
	3861:  0xBF49,
	3862:  0xBF4A,
	3863:  0xBF4B,
	3864:  0xBF4C,
	3865:  0xBF4D,
	3866:  0xBF4E,
	3867:  0xBF4F,
	3868:  0xBF52,
	3869:  0xBF53,
	3870:  0xBF54,
	3871:  0xBF56,
	3872:  0xBF57,
	3873:  0xBF58,
	3874:  0xBF59,
	3875:  0xBF5A,
	3876:  0xBF5B,
	3877:  0xBF5C,
	3878:  0xBF5D,
	3879:  0xBF5E,
	3880:  0xBF5F,
	3881:  0xBF60,
	3882:  0xBF61,
	3883:  0xBF62,
	3884:  0xBF63,
	3885:  0xBF64,
	3886:  0xBF65,
	3887:  0xBF66,
	3888:  0xBF67,
	3889:  0xBF68,
	3890:  0xBF69,
	3891:  0xBF6A,
	3892:  0xBF6B,
	3893:  0xBF6C,
	3894:  0xBF6D,
	3895:  0xBF6E,
	3896:  0xBF6F,
	3897:  0xBF70,
	3898:  0xBF71,
	3899:  0xBF72,
	3900:  0xBF73,
	3901:  0xBF74,
	3902:  0xBF75,
	3903:  0xBF76,
	3904:  0xBF77,
	3905:  0xBF78,
	3906:  0xBF79,
	3907:  0xBF7A,
	3908:  0xBF7B,
	3909:  0xBF7C,
	3910:  0xBF7D,
	3911:  0xBF7E,
	3912:  0xBF7F,
	3913:  0xBF80,
	3914:  0xBF81,
	3915:  0xBF82,
	3916:  0xBF83,
	3917:  0xBF84,
	3918:  0xBF85,
	3919:  0xBF86,
	3920:  0xBF87,
	3921:  0xBF88,
	3922:  0xBF89,
	3923:  0xBF8A,
	3924:  0xBF8B,
	3925:  0xBF8C,
	3926:  0xBF8D,
	3927:  0xBF8E,
	3928:  0xBF8F,
	3929:  0xBF90,
	3930:  0xBF91,
	3931:  0xBF92,
	3932:  0xBF93,
	3933:  0xBF95,
	3934:  0xBF96,
	3935:  0xBF97,
	3936:  0xBF98,
	3937:  0xBF99,
	3938:  0xBF9A,
	3939:  0xBF9B,
	3940:  0xBF9C,
	3941:  0xBF9D,
	3942:  0xBF9E,
	3943:  0xBF9F,
	3944:  0xBFA0,
	3945:  0xBFA1,
	3946:  0xBFA2,
	3947:  0xBFA3,
	3948:  0xBFA4,
	3949:  0xBFA5,
	3950:  0xBFA6,
	3951:  0xBFA7,
	3952:  0xBFA8,
	3953:  0xBFA9,
	3954:  0xBFAA,
	3955:  0xBFAB,
	3956:  0xBFAC,
	3957:  0xBFAD,
	3958:  0xBFAE,
	3959:  0xBFAF,
	3960:  0xBFB1,
	3961:  0xBFB2,
	3962:  0xBFB3,
	3963:  0xBFB4,
	3964:  0xBFB5,
	3965:  0xBFB6,
	3966:  0xBFB7,
	3967:  0xBFB8,
	3968:  0xBFB9,
	3969:  0xBFBA,
	3970:  0xBFBB,
	3971:  0xBFBC,
	3972:  0xBFBD,
	3973:  0xBFBE,
	3974:  0xBFBF,
	3975:  0xBFC0,
	3976:  0xBFC1,
	3977:  0xBFC2,
	3978:  0xBFC3,
	3979:  0xBFC4,
	3980:  0xBFC6,
	3981:  0xBFC7,
	3982:  0xBFC8,
	3983:  0xBFC9,
	3984:  0xBFCA,
	3985:  0xBFCB,
	3986:  0xBFCE,
	3987:  0xBFCF,
	3988:  0xBFD1,
	3989:  0xBFD2,
	3990:  0xBFD3,
	3991:  0xBFD5,
	3992:  0xBFD6,
	3993:  0xBFD7,
	3994:  0xBFD8,
	3995:  0xBFD9,
	3996:  0xBFDA,
	3997:  0xBFDB,
	3998:  0xBFDD,
	3999:  0xBFDE,
	4000:  0xBFE0,
	4001:  0xBFE2,
	4002:  0xBFE3,
	4003:  0xBFE4,
	4004:  0xBFE5,
	4005:  0xBFE6,
	4006:  0xBFE7,
	4007:  0xBFE8,
	4008:  0xBFE9,
	4009:  0xBFEA,
	4010:  0xBFEB,
	4011:  0xBFEC,
	4012:  0xBFED,
	4013:  0xBFEE,
	4014:  0xBFEF,
	4015:  0xBFF0,
	4016:  0xBFF1,
	4017:  0xBFF2,
	4018:  0xBFF3,
	4019:  0xBFF4,
	4020:  0xBFF5,
	4021:  0xBFF6,
	4022:  0xBFF7,
	4023:  0xBFF8,
	4024:  0xBFF9,
	4025:  0xBFFA,
	4026:  0xBFFB,
	4027:  0xBFFC,
	4028:  0xBFFD,
	4029:  0xBFFE,
	4030:  0xBFFF,
	4031:  0xC000,
	4032:  0xC001,
	4033:  0xC002,
	4034:  0xC003,
	4035:  0xC004,
	4036:  0xC005,
	4037:  0xC006,
	4038:  0xC007,
	4039:  0xC008,
	4040:  0xC009,
	4041:  0xC00A,
	4042:  0xC00B,
	4043:  0xC00C,
	4044:  0xC00D,
	4045:  0xC00E,
	4046:  0xC00F,
	4047:  0xC010,
	4048:  0xC011,
	4049:  0xC012,
	4050:  0xC013,
	4051:  0xC014,
	4052:  0xC015,
	4053:  0xC016,
	4054:  0xC017,
	4055:  0xC018,
	4056:  0xC019,
	4057:  0xC01A,
	4058:  0xC01B,
	4059:  0xC01C,
	4060:  0xC01D,
	4061:  0xC01E,
	4062:  0xC01F,
	4063:  0xC020,
	4064:  0xC021,
	4065:  0xC022,
	4066:  0xC023,
	4067:  0xC024,
	4068:  0xC025,
	4069:  0xC026,
	4070:  0xC027,
	4071:  0xC028,
	4072:  0xC029,
	4073:  0xC02A,
	4074:  0xC02B,
	4075:  0xC02C,
	4076:  0xC02D,
	4077:  0xC02E,
	4078:  0xC02F,
	4079:  0xC030,
	4080:  0xC031,
	4081:  0xC032,
	4082:  0xC033,
	4083:  0xC034,
	4084:  0xC035,
	4085:  0xC036,
	4086:  0xC037,
	4087:  0xC038,
	4088:  0xC039,
	4089:  0xC03A,
	4090:  0xC03B,
	4091:  0xC03D,
	4092:  0xC03E,
	4093:  0xC03F,
	4094:  0xC040,
	4095:  0xC041,
	4096:  0xC042,
	4097:  0xC043,
	4098:  0xC044,
	4099:  0xC045,
	4100:  0xC046,
	4101:  0xC047,
	4102:  0xC048,
	4103:  0xC049,
	4104:  0xC04A,
	4105:  0xC04B,
	4106:  0xC04C,
	4107:  0xC04D,
	4108:  0xC04E,
	4109:  0xC04F,
	4110:  0xC050,
	4111:  0xC052,
	4112:  0xC053,
	4113:  0xC054,
	4114:  0xC055,
	4115:  0xC056,
	4116:  0xC057,
	4117:  0xC059,
	4118:  0xC05A,
	4119:  0xC05B,
	4120:  0xC05D,
	4121:  0xC05E,
	4122:  0xC05F,
	4123:  0xC061,
	4124:  0xC062,
	4125:  0xC063,
	4126:  0xC064,
	4127:  0xC065,
	4128:  0xC066,
	4129:  0xC067,
	4130:  0xC06A,
	4131:  0xC06B,
	4132:  0xC06C,
	4133:  0xC06D,
	4134:  0xC06E,
	4135:  0xC06F,
	4136:  0xC070,
	4137:  0xC071,
	4138:  0xC072,
	4139:  0xC073,
	4140:  0xC074,
	4141:  0xC075,
	4142:  0xC076,
	4143:  0xC077,
	4144:  0xC078,
	4145:  0xC079,
	4146:  0xC07A,
	4147:  0xC07B,
	4148:  0xC07C,
	4149:  0xC07D,
	4150:  0xC07E,
	4151:  0xC07F,
	4152:  0xC080,
	4153:  0xC081,
	4154:  0xC082,
	4155:  0xC083,
	4156:  0xC084,
	4157:  0xC085,
	4158:  0xC086,
	4159:  0xC087,
	4160:  0xC088,
	4161:  0xC089,
	4162:  0xC08A,
	4163:  0xC08B,
	4164:  0xC08C,
	4165:  0xC08D,
	4166:  0xC08E,
	4167:  0xC08F,
	4168:  0xC092,
	4169:  0xC093,
	4170:  0xC095,
	4171:  0xC096,
	4172:  0xC097,
	4173:  0xC099,
	4174:  0xC09A,
	4175:  0xC09B,
	4176:  0xC09C,
	4177:  0xC09D,
	4178:  0xC09E,
	4179:  0xC09F,
	4180:  0xC0A2,
	4181:  0xC0A4,
	4182:  0xC0A6,
	4183:  0xC0A7,
	4184:  0xC0A8,
	4185:  0xC0A9,
	4186:  0xC0AA,
	4187:  0xC0AB,
	4188:  0xC0AE,
	4189:  0xC0B1,
	4190:  0xC0B2,
	4191:  0xC0B7,
	4192:  0xC0B8,
	4193:  0xC0B9,
	4194:  0xC0BA,
	4195:  0xC0BB,
	4196:  0xC0BE,
	4197:  0xC0C2,
	4198:  0xC0C3,
	4199:  0xC0C4,
	4200:  0xC0C6,
	4201:  0xC0C7,
	4202:  0xC0CA,
	4203:  0xC0CB,
	4204:  0xC0CD,
	4205:  0xC0CE,
	4206:  0xC0CF,
	4207:  0xC0D1,
	4208:  0xC0D2,
	4209:  0xC0D3,
	4210:  0xC0D4,
	4211:  0xC0D5,
	4212:  0xC0D6,
	4213:  0xC0D7,
	4214:  0xC0DA,
	4215:  0xC0DE,
	4216:  0xC0DF,
	4217:  0xC0E0,
	4218:  0xC0E1,
	4219:  0xC0E2,
	4220:  0xC0E3,
	4221:  0xC0E6,
	4222:  0xC0E7,
	4223:  0xC0E9,
	4224:  0xC0EA,
	4225:  0xC0EB,
	4226:  0xC0ED,
	4227:  0xC0EE,
	4228:  0xC0EF,
	4229:  0xC0F0,
	4230:  0xC0F1,
	4231:  0xC0F2,
	4232:  0xC0F3,
	4233:  0xC0F6,
	4234:  0xC0F8,
	4235:  0xC0FA,
	4236:  0xC0FB,
	4237:  0xC0FC,
	4238:  0xC0FD,
	4239:  0xC0FE,
	4240:  0xC0FF,
	4241:  0xC101,
	4242:  0xC102,
	4243:  0xC103,
	4244:  0xC105,
	4245:  0xC106,
	4246:  0xC107,
	4247:  0xC109,
	4248:  0xC10A,
	4249:  0xC10B,
	4250:  0xC10C,
	4251:  0xC10D,
	4252:  0xC10E,
	4253:  0xC10F,
	4254:  0xC111,
	4255:  0xC112,
	4256:  0xC113,
	4257:  0xC114,
	4258:  0xC116,
	4259:  0xC117,
	4260:  0xC118,
	4261:  0xC119,
	4262:  0xC11A,
	4263:  0xC11B,
	4264:  0xC121,
	4265:  0xC122,
	4266:  0xC125,
	4267:  0xC128,
	4268:  0xC129,
	4269:  0xC12A,
	4270:  0xC12B,
	4271:  0xC12E,
	4272:  0xC132,
	4273:  0xC133,
	4274:  0xC134,
	4275:  0xC135,
	4276:  0xC137,
	4277:  0xC13A,
	4278:  0xC13B,
	4279:  0xC13D,
	4280:  0xC13E,
	4281:  0xC13F,
	4282:  0xC141,
	4283:  0xC142,
	4284:  0xC143,
	4285:  0xC144,
	4286:  0xC145,
	4287:  0xC146,
	4288:  0xC147,
	4289:  0xC14A,
	4290:  0xC14E,
	4291:  0xC14F,
	4292:  0xC150,
	4293:  0xC151,
	4294:  0xC152,
	4295:  0xC153,
	4296:  0xC156,
	4297:  0xC157,
	4298:  0xC159,
	4299:  0xC15A,
	4300:  0xC15B,
	4301:  0xC15D,
	4302:  0xC15E,
	4303:  0xC15F,
	4304:  0xC160,
	4305:  0xC161,
	4306:  0xC162,
	4307:  0xC163,
	4308:  0xC166,
	4309:  0xC16A,
	4310:  0xC16B,
	4311:  0xC16C,
	4312:  0xC16D,
	4313:  0xC16E,
	4314:  0xC16F,
	4315:  0xC171,
	4316:  0xC172,
	4317:  0xC173,
	4318:  0xC175,
	4319:  0xC176,
	4320:  0xC177,
	4321:  0xC179,
	4322:  0xC17A,
	4323:  0xC17B,
	4324:  0xC17C,
	4325:  0xC17D,
	4326:  0xC17E,
	4327:  0xC17F,
	4328:  0xC180,
	4329:  0xC181,
	4330:  0xC182,
	4331:  0xC183,
	4332:  0xC184,
	4333:  0xC186,
	4334:  0xC187,
	4335:  0xC188,
	4336:  0xC189,
	4337:  0xC18A,
	4338:  0xC18B,
	4339:  0xC18F,
	4340:  0xC191,
	4341:  0xC192,
	4342:  0xC193,
	4343:  0xC195,
	4344:  0xC197,
	4345:  0xC198,
	4346:  0xC199,
	4347:  0xC19A,
	4348:  0xC19B,
	4349:  0xC19E,
	4350:  0xC1A0,
	4351:  0xC1A2,
	4352:  0xC1A3,
	4353:  0xC1A4,
	4354:  0xC1A6,
	4355:  0xC1A7,
	4356:  0xC1AA,
	4357:  0xC1AB,
	4358:  0xC1AD,
	4359:  0xC1AE,
	4360:  0xC1AF,
	4361:  0xC1B1,
	4362:  0xC1B2,
	4363:  0xC1B3,
	4364:  0xC1B4,
	4365:  0xC1B5,
	4366:  0xC1B6,
	4367:  0xC1B7,
	4368:  0xC1B8,
	4369:  0xC1B9,
	4370:  0xC1BA,
	4371:  0xC1BB,
	4372:  0xC1BC,
	4373:  0xC1BE,
	4374:  0xC1BF,
	4375:  0xC1C0,
	4376:  0xC1C1,
	4377:  0xC1C2,
	4378:  0xC1C3,
	4379:  0xC1C5,
	4380:  0xC1C6,
	4381:  0xC1C7,
	4382:  0xC1C9,
	4383:  0xC1CA,
	4384:  0xC1CB,
	4385:  0xC1CD,
	4386:  0xC1CE,
	4387:  0xC1CF,
	4388:  0xC1D0,
	4389:  0xC1D1,
	4390:  0xC1D2,
	4391:  0xC1D3,
	4392:  0xC1D5,
	4393:  0xC1D6,
	4394:  0xC1D9,
	4395:  0xC1DA,
	4396:  0xC1DB,
	4397:  0xC1DC,
	4398:  0xC1DD,
	4399:  0xC1DE,
	4400:  0xC1DF,
	4401:  0xC1E1,
	4402:  0xC1E2,
	4403:  0xC1E3,
	4404:  0xC1E5,
	4405:  0xC1E6,
	4406:  0xC1E7,
	4407:  0xC1E9,
	4408:  0xC1EA,
	4409:  0xC1EB,
	4410:  0xC1EC,
	4411:  0xC1ED,
	4412:  0xC1EE,
	4413:  0xC1EF,
	4414:  0xC1F2,
	4415:  0xC1F4,
	4416:  0xC1F5,
	4417:  0xC1F6,
	4418:  0xC1F7,
	4419:  0xC1F8,
	4420:  0xC1F9,
	4421:  0xC1FA,
	4422:  0xC1FB,
	4423:  0xC1FE,
	4424:  0xC1FF,
	4425:  0xC201,
	4426:  0xC202,
	4427:  0xC203,
	4428:  0xC205,
	4429:  0xC206,
	4430:  0xC207,
	4431:  0xC208,
	4432:  0xC209,
	4433:  0xC20A,
	4434:  0xC20B,
	4435:  0xC20E,
	4436:  0xC210,
	4437:  0xC212,
	4438:  0xC213,
	4439:  0xC214,
	4440:  0xC215,
	4441:  0xC216,
	4442:  0xC217,
	4443:  0xC21A,
	4444:  0xC21B,
	4445:  0xC21D,
	4446:  0xC21E,
	4447:  0xC221,
	4448:  0xC222,
	4449:  0xC223,
	4450:  0xC224,
	4451:  0xC225,
	4452:  0xC226,
	4453:  0xC227,
	4454:  0xC22A,
	4455:  0xC22C,
	4456:  0xC22E,
	4457:  0xC230,
	4458:  0xC233,
	4459:  0xC235,
	4460:  0xC236,
	4461:  0xC237,
	4462:  0xC238,
	4463:  0xC239,
	4464:  0xC23A,
	4465:  0xC23B,
	4466:  0xC23C,
	4467:  0xC23D,
	4468:  0xC23E,
	4469:  0xC23F,
	4470:  0xC240,
	4471:  0xC241,
	4472:  0xC242,
	4473:  0xC243,
	4474:  0xC244,
	4475:  0xC245,
	4476:  0xC246,
	4477:  0xC247,
	4478:  0xC249,
	4479:  0xC24A,
	4480:  0xC24B,
	4481:  0xC24C,
	4482:  0xC24D,
	4483:  0xC24E,
	4484:  0xC24F,
	4485:  0xC252,
	4486:  0xC253,
	4487:  0xC255,
	4488:  0xC256,
	4489:  0xC257,
	4490:  0xC259,
	4491:  0xC25A,
	4492:  0xC25B,
	4493:  0xC25C,
	4494:  0xC25D,
	4495:  0xC25E,
	4496:  0xC25F,
	4497:  0xC261,
	4498:  0xC262,
	4499:  0xC263,
	4500:  0xC264,
	4501:  0xC266,
	4502:  0xC267,
	4503:  0xC268,
	4504:  0xC269,
	4505:  0xC26A,
	4506:  0xC26B,
	4507:  0xC26E,
	4508:  0xC26F,
	4509:  0xC271,
	4510:  0xC272,
	4511:  0xC273,
	4512:  0xC275,
	4513:  0xC276,
	4514:  0xC277,
	4515:  0xC278,
	4516:  0xC279,
	4517:  0xC27A,
	4518:  0xC27B,
	4519:  0xC27E,
	4520:  0xC280,
	4521:  0xC282,
	4522:  0xC283,
	4523:  0xC284,
	4524:  0xC285,
	4525:  0xC286,
	4526:  0xC287,
	4527:  0xC28A,
	4528:  0xC28B,
	4529:  0xC28C,
	4530:  0xC28D,
	4531:  0xC28E,
	4532:  0xC28F,
	4533:  0xC291,
	4534:  0xC292,
	4535:  0xC293,
	4536:  0xC294,
	4537:  0xC295,
	4538:  0xC296,
	4539:  0xC297,
	4540:  0xC299,
	4541:  0xC29A,
	4542:  0xC29C,
	4543:  0xC29E,
	4544:  0xC29F,
	4545:  0xC2A0,
	4546:  0xC2A1,
	4547:  0xC2A2,
	4548:  0xC2A3,
	4549:  0xC2A6,
	4550:  0xC2A7,
	4551:  0xC2A9,
	4552:  0xC2AA,
	4553:  0xC2AB,
	4554:  0xC2AE,
	4555:  0xC2AF,
	4556:  0xC2B0,
	4557:  0xC2B1,
	4558:  0xC2B2,
	4559:  0xC2B3,
	4560:  0xC2B6,
	4561:  0xC2B8,
	4562:  0xC2BA,
	4563:  0xC2BB,
	4564:  0xC2BC,
	4565:  0xC2BD,
	4566:  0xC2BE,
	4567:  0xC2BF,
	4568:  0xC2C0,
	4569:  0xC2C1,
	4570:  0xC2C2,
	4571:  0xC2C3,
	4572:  0xC2C4,
	4573:  0xC2C5,
	4574:  0xC2C6,
	4575:  0xC2C7,
	4576:  0xC2C8,
	4577:  0xC2C9,
	4578:  0xC2CA,
	4579:  0xC2CB,
	4580:  0xC2CC,
	4581:  0xC2CD,
	4582:  0xC2CE,
	4583:  0xC2CF,
	4584:  0xC2D0,
	4585:  0xC2D1,
	4586:  0xC2D2,
	4587:  0xC2D3,
	4588:  0xC2D4,
	4589:  0xC2D5,
	4590:  0xC2D6,
	4591:  0xC2D7,
	4592:  0xC2D8,
	4593:  0xC2D9,
	4594:  0xC2DA,
	4595:  0xC2DB,
	4596:  0xC2DE,
	4597:  0xC2DF,
	4598:  0xC2E1,
	4599:  0xC2E2,
	4600:  0xC2E5,
	4601:  0xC2E6,
	4602:  0xC2E7,
	4603:  0xC2E8,
	4604:  0xC2E9,
	4605:  0xC2EA,
	4606:  0xC2EE,
	4607:  0xC2F0,
	4608:  0xC2F2,
	4609:  0xC2F3,
	4610:  0xC2F4,
	4611:  0xC2F5,
	4612:  0xC2F7,
	4613:  0xC2FA,
	4614:  0xC2FD,
	4615:  0xC2FE,
	4616:  0xC2FF,
	4617:  0xC301,
	4618:  0xC302,
	4619:  0xC303,
	4620:  0xC304,
	4621:  0xC305,
	4622:  0xC306,
	4623:  0xC307,
	4624:  0xC30A,
	4625:  0xC30B,
	4626:  0xC30E,
	4627:  0xC30F,
	4628:  0xC310,
	4629:  0xC311,
	4630:  0xC312,
	4631:  0xC316,
	4632:  0xC317,
	4633:  0xC319,
	4634:  0xC31A,
	4635:  0xC31B,
	4636:  0xC31D,
	4637:  0xC31E,
	4638:  0xC31F,
	4639:  0xC320,
	4640:  0xC321,
	4641:  0xC322,
	4642:  0xC323,
	4643:  0xC326,
	4644:  0xC327,
	4645:  0xC32A,
	4646:  0xC32B,
	4647:  0xC32C,
	4648:  0xC32D,
	4649:  0xC32E,
	4650:  0xC32F,
	4651:  0xC330,
	4652:  0xC331,
	4653:  0xC332,
	4654:  0xC333,
	4655:  0xC334,
	4656:  0xC335,
	4657:  0xC336,
	4658:  0xC337,
	4659:  0xC338,
	4660:  0xC339,
	4661:  0xC33A,
	4662:  0xC33B,
	4663:  0xC33C,
	4664:  0xC33D,
	4665:  0xC33E,
	4666:  0xC33F,
	4667:  0xC340,
	4668:  0xC341,
	4669:  0xC342,
	4670:  0xC343,
	4671:  0xC344,
	4672:  0xC346,
	4673:  0xC347,
	4674:  0xC348,
	4675:  0xC349,
	4676:  0xC34A,
	4677:  0xC34B,
	4678:  0xC34C,
	4679:  0xC34D,
	4680:  0xC34E,
	4681:  0xC34F,
	4682:  0xC350,
	4683:  0xC351,
	4684:  0xC352,
	4685:  0xC353,
	4686:  0xC354,
	4687:  0xC355,
	4688:  0xC356,
	4689:  0xC357,
	4690:  0xC358,
	4691:  0xC359,
	4692:  0xC35A,
	4693:  0xC35B,
	4694:  0xC35C,
	4695:  0xC35D,
	4696:  0xC35E,
	4697:  0xC35F,
	4698:  0xC360,
	4699:  0xC361,
	4700:  0xC362,
	4701:  0xC363,
	4702:  0xC364,
	4703:  0xC365,
	4704:  0xC366,
	4705:  0xC367,
	4706:  0xC36A,
	4707:  0xC36B,
	4708:  0xC36D,
	4709:  0xC36E,
	4710:  0xC36F,
	4711:  0xC371,
	4712:  0xC373,
	4713:  0xC374,
	4714:  0xC375,
	4715:  0xC376,
	4716:  0xC377,
	4717:  0xC37A,
	4718:  0xC37B,
	4719:  0xC37E,
	4720:  0xC37F,
	4721:  0xC380,
	4722:  0xC381,
	4723:  0xC382,
	4724:  0xC383,
	4725:  0xC385,
	4726:  0xC386,
	4727:  0xC387,
	4728:  0xC389,
	4729:  0xC38A,
	4730:  0xC38B,
	4731:  0xC38D,
	4732:  0xC38E,
	4733:  0xC38F,
	4734:  0xC390,
	4735:  0xC391,
	4736:  0xC392,
	4737:  0xC393,
	4738:  0xC394,
	4739:  0xC395,
	4740:  0xC396,
	4741:  0xC397,
	4742:  0xC398,
	4743:  0xC399,
	4744:  0xC39A,
	4745:  0xC39B,
	4746:  0xC39C,
	4747:  0xC39D,
	4748:  0xC39E,
	4749:  0xC39F,
	4750:  0xC3A0,
	4751:  0xC3A1,
	4752:  0xC3A2,
	4753:  0xC3A3,
	4754:  0xC3A4,
	4755:  0xC3A5,
	4756:  0xC3A6,
	4757:  0xC3A7,
	4758:  0xC3A8,
	4759:  0xC3A9,
	4760:  0xC3AA,
	4761:  0xC3AB,
	4762:  0xC3AC,
	4763:  0xC3AD,
	4764:  0xC3AE,
	4765:  0xC3AF,
	4766:  0xC3B0,
	4767:  0xC3B1,
	4768:  0xC3B2,
	4769:  0xC3B3,
	4770:  0xC3B4,
	4771:  0xC3B5,
	4772:  0xC3B6,
	4773:  0xC3B7,
	4774:  0xC3B8,
	4775:  0xC3B9,
	4776:  0xC3BA,
	4777:  0xC3BB,
	4778:  0xC3BC,
	4779:  0xC3BD,
	4780:  0xC3BE,
	4781:  0xC3BF,
	4782:  0xC3C1,
	4783:  0xC3C2,
	4784:  0xC3C3,
	4785:  0xC3C4,
	4786:  0xC3C5,
	4787:  0xC3C6,
	4788:  0xC3C7,
	4789:  0xC3C8,
	4790:  0xC3C9,
	4791:  0xC3CA,
	4792:  0xC3CB,
	4793:  0xC3CC,
	4794:  0xC3CD,
	4795:  0xC3CE,
	4796:  0xC3CF,
	4797:  0xC3D0,
	4798:  0xC3D1,
	4799:  0xC3D2,
	4800:  0xC3D3,
	4801:  0xC3D4,
	4802:  0xC3D5,
	4803:  0xC3D6,
	4804:  0xC3D7,
	4805:  0xC3DA,
	4806:  0xC3DB,
	4807:  0xC3DD,
	4808:  0xC3DE,
	4809:  0xC3E1,
	4810:  0xC3E3,
	4811:  0xC3E4,
	4812:  0xC3E5,
	4813:  0xC3E6,
	4814:  0xC3E7,
	4815:  0xC3EA,
	4816:  0xC3EB,
	4817:  0xC3EC,
	4818:  0xC3EE,
	4819:  0xC3EF,
	4820:  0xC3F0,
	4821:  0xC3F1,
	4822:  0xC3F2,
	4823:  0xC3F3,
	4824:  0xC3F6,
	4825:  0xC3F7,
	4826:  0xC3F9,
	4827:  0xC3FA,
	4828:  0xC3FB,
	4829:  0xC3FC,
	4830:  0xC3FD,
	4831:  0xC3FE,
	4832:  0xC3FF,
	4833:  0xC400,
	4834:  0xC401,
	4835:  0xC402,
	4836:  0xC403,
	4837:  0xC404,
	4838:  0xC405,
	4839:  0xC406,
	4840:  0xC407,
	4841:  0xC409,
	4842:  0xC40A,
	4843:  0xC40B,
	4844:  0xC40C,
	4845:  0xC40D,
	4846:  0xC40E,
	4847:  0xC40F,
	4848:  0xC411,
	4849:  0xC412,
	4850:  0xC413,
	4851:  0xC414,
	4852:  0xC415,
	4853:  0xC416,
	4854:  0xC417,
	4855:  0xC418,
	4856:  0xC419,
	4857:  0xC41A,
	4858:  0xC41B,
	4859:  0xC41C,
	4860:  0xC41D,
	4861:  0xC41E,
	4862:  0xC41F,
	4863:  0xC420,
	4864:  0xC421,
	4865:  0xC422,
	4866:  0xC423,
	4867:  0xC425,
	4868:  0xC426,
	4869:  0xC427,
	4870:  0xC428,
	4871:  0xC429,
	4872:  0xC42A,
	4873:  0xC42B,
	4874:  0xC42D,
	4875:  0xC42E,
	4876:  0xC42F,
	4877:  0xC431,
	4878:  0xC432,
	4879:  0xC433,
	4880:  0xC435,
	4881:  0xC436,
	4882:  0xC437,
	4883:  0xC438,
	4884:  0xC439,
	4885:  0xC43A,
	4886:  0xC43B,
	4887:  0xC43E,
	4888:  0xC43F,
	4889:  0xC440,
	4890:  0xC441,
	4891:  0xC442,
	4892:  0xC443,
	4893:  0xC444,
	4894:  0xC445,
	4895:  0xC446,
	4896:  0xC447,
	4897:  0xC449,
	4898:  0xC44A,
	4899:  0xC44B,
	4900:  0xC44C,
	4901:  0xC44D,
	4902:  0xC44E,
	4903:  0xC44F,
	4904:  0xC450,
	4905:  0xC451,
	4906:  0xC452,
	4907:  0xC453,
	4908:  0xC454,
	4909:  0xC455,
	4910:  0xC456,
	4911:  0xC457,
	4912:  0xC458,
	4913:  0xC459,
	4914:  0xC45A,
	4915:  0xC45B,
	4916:  0xC45C,
	4917:  0xC45D,
	4918:  0xC45E,
	4919:  0xC45F,
	4920:  0xC460,
	4921:  0xC461,
	4922:  0xC462,
	4923:  0xC463,
	4924:  0xC466,
	4925:  0xC467,
	4926:  0xC469,
	4927:  0xC46A,
	4928:  0xC46B,
	4929:  0xC46D,
	4930:  0xC46E,
	4931:  0xC46F,
	4932:  0xC470,
	4933:  0xC471,
	4934:  0xC472,
	4935:  0xC473,
	4936:  0xC476,
	4937:  0xC477,
	4938:  0xC478,
	4939:  0xC47A,
	4940:  0xC47B,
	4941:  0xC47C,
	4942:  0xC47D,
	4943:  0xC47E,
	4944:  0xC47F,
	4945:  0xC481,
	4946:  0xC482,
	4947:  0xC483,
	4948:  0xC484,
	4949:  0xC485,
	4950:  0xC486,
	4951:  0xC487,
	4952:  0xC488,
	4953:  0xC489,
	4954:  0xC48A,
	4955:  0xC48B,
	4956:  0xC48C,
	4957:  0xC48D,
	4958:  0xC48E,
	4959:  0xC48F,
	4960:  0xC490,
	4961:  0xC491,
	4962:  0xC492,
	4963:  0xC493,
	4964:  0xC495,
	4965:  0xC496,
	4966:  0xC497,
	4967:  0xC498,
	4968:  0xC499,
	4969:  0xC49A,
	4970:  0xC49B,
	4971:  0xC49D,
	4972:  0xC49E,
	4973:  0xC49F,
	4974:  0xC4A0,
	4975:  0xC4A1,
	4976:  0xC4A2,
	4977:  0xC4A3,
	4978:  0xC4A4,
	4979:  0xC4A5,
	4980:  0xC4A6,
	4981:  0xC4A7,
	4982:  0xC4A8,
	4983:  0xC4A9,
	4984:  0xC4AA,
	4985:  0xC4AB,
	4986:  0xC4AC,
	4987:  0xC4AD,
	4988:  0xC4AE,
	4989:  0xC4AF,
	4990:  0xC4B0,
	4991:  0xC4B1,
	4992:  0xC4B2,
	4993:  0xC4B3,
	4994:  0xC4B4,
	4995:  0xC4B5,
	4996:  0xC4B6,
	4997:  0xC4B7,
	4998:  0xC4B9,
	4999:  0xC4BA,
	5000:  0xC4BB,
	5001:  0xC4BD,
	5002:  0xC4BE,
	5003:  0xC4BF,
	5004:  0xC4C0,
	5005:  0xC4C1,
	5006:  0xC4C2,
	5007:  0xC4C3,
	5008:  0xC4C4,
	5009:  0xC4C5,
	5010:  0xC4C6,
	5011:  0xC4C7,
	5012:  0xC4C8,
	5013:  0xC4C9,
	5014:  0xC4CA,
	5015:  0xC4CB,
	5016:  0xC4CC,
	5017:  0xC4CD,
	5018:  0xC4CE,
	5019:  0xC4CF,
	5020:  0xC4D0,
	5021:  0xC4D1,
	5022:  0xC4D2,
	5023:  0xC4D3,
	5024:  0xC4D4,
	5025:  0xC4D5,
	5026:  0xC4D6,
	5027:  0xC4D7,
	5028:  0xC4D8,
	5029:  0xC4D9,
	5030:  0xC4DA,
	5031:  0xC4DB,
	5032:  0xC4DC,
	5033:  0xC4DD,
	5034:  0xC4DE,
	5035:  0xC4DF,
	5036:  0xC4E0,
	5037:  0xC4E1,
	5038:  0xC4E2,
	5039:  0xC4E3,
	5040:  0xC4E4,
	5041:  0xC4E5,
	5042:  0xC4E6,
	5043:  0xC4E7,
	5044:  0xC4E8,
	5045:  0xC4EA,
	5046:  0xC4EB,
	5047:  0xC4EC,
	5048:  0xC4ED,
	5049:  0xC4EE,
	5050:  0xC4EF,
	5051:  0xC4F2,
	5052:  0xC4F3,
	5053:  0xC4F5,
	5054:  0xC4F6,
	5055:  0xC4F7,
	5056:  0xC4F9,
	5057:  0xC4FB,
	5058:  0xC4FC,
	5059:  0xC4FD,
	5060:  0xC4FE,
	5061:  0xC502,
	5062:  0xC503,
	5063:  0xC504,
	5064:  0xC505,
	5065:  0xC506,
	5066:  0xC507,
	5067:  0xC508,
	5068:  0xC509,
	5069:  0xC50A,
	5070:  0xC50B,
	5071:  0xC50D,
	5072:  0xC50E,
	5073:  0xC50F,
	5074:  0xC511,
	5075:  0xC512,
	5076:  0xC513,
	5077:  0xC515,
	5078:  0xC516,
	5079:  0xC517,
	5080:  0xC518,
	5081:  0xC519,
	5082:  0xC51A,
	5083:  0xC51B,
	5084:  0xC51D,
	5085:  0xC51E,
	5086:  0xC51F,
	5087:  0xC520,
	5088:  0xC521,
	5089:  0xC522,
	5090:  0xC523,
	5091:  0xC524,
	5092:  0xC525,
	5093:  0xC526,
	5094:  0xC527,
	5095:  0xC52A,
	5096:  0xC52B,
	5097:  0xC52D,
	5098:  0xC52E,
	5099:  0xC52F,
	5100:  0xC531,
	5101:  0xC532,
	5102:  0xC533,
	5103:  0xC534,
	5104:  0xC535,
	5105:  0xC536,
	5106:  0xC537,
	5107:  0xC53A,
	5108:  0xC53C,
	5109:  0xC53E,
	5110:  0xC53F,
	5111:  0xC540,
	5112:  0xC541,
	5113:  0xC542,
	5114:  0xC543,
	5115:  0xC546,
	5116:  0xC547,
	5117:  0xC54B,
	5118:  0xC54F,
	5119:  0xC550,
	5120:  0xC551,
	5121:  0xC552,
	5122:  0xC556,
	5123:  0xC55A,
	5124:  0xC55B,
	5125:  0xC55C,
	5126:  0xC55F,
	5127:  0xC562,
	5128:  0xC563,
	5129:  0xC565,
	5130:  0xC566,
	5131:  0xC567,
	5132:  0xC569,
	5133:  0xC56A,
	5134:  0xC56B,
	5135:  0xC56C,
	5136:  0xC56D,
	5137:  0xC56E,
	5138:  0xC56F,
	5139:  0xC572,
	5140:  0xC576,
	5141:  0xC577,
	5142:  0xC578,
	5143:  0xC579,
	5144:  0xC57A,
	5145:  0xC57B,
	5146:  0xC57E,
	5147:  0xC57F,
	5148:  0xC581,
	5149:  0xC582,
	5150:  0xC583,
	5151:  0xC585,
	5152:  0xC586,
	5153:  0xC588,
	5154:  0xC589,
	5155:  0xC58A,
	5156:  0xC58B,
	5157:  0xC58E,
	5158:  0xC590,
	5159:  0xC592,
	5160:  0xC593,
	5161:  0xC594,
	5162:  0xC596,
	5163:  0xC599,
	5164:  0xC59A,
	5165:  0xC59B,
	5166:  0xC59D,
	5167:  0xC59E,
	5168:  0xC59F,
	5169:  0xC5A1,
	5170:  0xC5A2,
	5171:  0xC5A3,
	5172:  0xC5A4,
	5173:  0xC5A5,
	5174:  0xC5A6,
	5175:  0xC5A7,
	5176:  0xC5A8,
	5177:  0xC5AA,
	5178:  0xC5AB,
	5179:  0xC5AC,
	5180:  0xC5AD,
	5181:  0xC5AE,
	5182:  0xC5AF,
	5183:  0xC5B0,
	5184:  0xC5B1,
	5185:  0xC5B2,
	5186:  0xC5B3,
	5187:  0xC5B6,
	5188:  0xC5B7,
	5189:  0xC5BA,
	5190:  0xC5BF,
	5191:  0xC5C0,
	5192:  0xC5C1,
	5193:  0xC5C2,
	5194:  0xC5C3,
	5195:  0xC5CB,
	5196:  0xC5CD,
	5197:  0xC5CF,
	5198:  0xC5D2,
	5199:  0xC5D3,
	5200:  0xC5D5,
	5201:  0xC5D6,
	5202:  0xC5D7,
	5203:  0xC5D9,
	5204:  0xC5DA,
	5205:  0xC5DB,
	5206:  0xC5DC,
	5207:  0xC5DD,
	5208:  0xC5DE,
	5209:  0xC5DF,
	5210:  0xC5E2,
	5211:  0xC5E4,
	5212:  0xC5E6,
	5213:  0xC5E7,
	5214:  0xC5E8,
	5215:  0xC5E9,
	5216:  0xC5EA,
	5217:  0xC5EB,
	5218:  0xC5EF,
	5219:  0xC5F1,
	5220:  0xC5F2,
	5221:  0xC5F3,
	5222:  0xC5F5,
	5223:  0xC5F8,
	5224:  0xC5F9,
	5225:  0xC5FA,
	5226:  0xC5FB,
	5227:  0xC602,
	5228:  0xC603,
	5229:  0xC604,
	5230:  0xC609,
	5231:  0xC60A,
	5232:  0xC60B,
	5233:  0xC60D,
	5234:  0xC60E,
	5235:  0xC60F,
	5236:  0xC611,
	5237:  0xC612,
	5238:  0xC613,
	5239:  0xC614,
	5240:  0xC615,
	5241:  0xC616,
	5242:  0xC617,
	5243:  0xC61A,
	5244:  0xC61D,
	5245:  0xC61E,
	5246:  0xC61F,
	5247:  0xC620,
	5248:  0xC621,
	5249:  0xC622,
	5250:  0xC623,
	5251:  0xC626,
	5252:  0xC627,
	5253:  0xC629,
	5254:  0xC62A,
	5255:  0xC62B,
	5256:  0xC62F,
	5257:  0xC631,
	5258:  0xC632,
	5259:  0xC636,
	5260:  0xC638,
	5261:  0xC63A,
	5262:  0xC63C,
	5263:  0xC63D,
	5264:  0xC63E,
	5265:  0xC63F,
	5266:  0xC642,
	5267:  0xC643,
	5268:  0xC645,
	5269:  0xC646,
	5270:  0xC647,
	5271:  0xC649,
	5272:  0xC64A,
	5273:  0xC64B,
	5274:  0xC64C,
	5275:  0xC64D,
	5276:  0xC64E,
	5277:  0xC64F,
	5278:  0xC652,
	5279:  0xC656,
	5280:  0xC657,
	5281:  0xC658,
	5282:  0xC659,
	5283:  0xC65A,
	5284:  0xC65B,
	5285:  0xC65E,
	5286:  0xC65F,
	5287:  0xC661,
	5288:  0xC662,
	5289:  0xC663,
	5290:  0xC664,
	5291:  0xC665,
	5292:  0xC666,
	5293:  0xC667,
	5294:  0xC668,
	5295:  0xC669,
	5296:  0xC66A,
	5297:  0xC66B,
	5298:  0xC66D,
	5299:  0xC66E,
	5300:  0xC670,
	5301:  0xC672,
	5302:  0xC673,
	5303:  0xC674,
	5304:  0xC675,
	5305:  0xC676,
	5306:  0xC677,
	5307:  0xC67A,
	5308:  0xC67B,
	5309:  0xC67D,
	5310:  0xC67E,
	5311:  0xC67F,
	5312:  0xC681,
	5313:  0xC682,
	5314:  0xC683,
	5315:  0xC684,
	5316:  0xC685,
	5317:  0xC686,
	5318:  0xC687,
	5319:  0xC68A,
	5320:  0xC68C,
	5321:  0xC68E,
	5322:  0xC68F,
	5323:  0xC690,
	5324:  0xC691,
	5325:  0xC692,
	5326:  0xC693,
	5327:  0xC696,
	5328:  0xC697,
	5329:  0xC699,
	5330:  0xC69A,
	5331:  0xC69B,
	5332:  0xC69D,
	5333:  0xC69E,
	5334:  0xC69F,
	5335:  0xC6A0,
	5336:  0xC6A1,
	5337:  0xC6A2,
	5338:  0xC6A3,
	5339:  0xC6A6,
	5340:  0xC6A8,
	5341:  0xC6AA,
	5342:  0xC6AB,
	5343:  0xC6AC,
	5344:  0xC6AD,
	5345:  0xC6AE,
	5346:  0xC6AF,
	5347:  0xC6B2,
	5348:  0xC6B3,
	5349:  0xC6B5,
	5350:  0xC6B6,
	5351:  0xC6B7,
	5352:  0xC6BB,
	5353:  0xC6BC,
	5354:  0xC6BD,
	5355:  0xC6BE,
	5356:  0xC6BF,
	5357:  0xC6C2,
	5358:  0xC6C4,
	5359:  0xC6C6,
	5360:  0xC6C7,
	5361:  0xC6C8,
	5362:  0xC6C9,
	5363:  0xC6CA,
	5364:  0xC6CB,
	5365:  0xC6CE,
	5366:  0xC6CF,
	5367:  0xC6D1,
	5368:  0xC6D2,
	5369:  0xC6D3,
	5370:  0xC6D5,
	5371:  0xC6D6,
	5372:  0xC6D7,
	5373:  0xC6D8,
	5374:  0xC6D9,
	5375:  0xC6DA,
	5376:  0xC6DB,
	5377:  0xC6DE,
	5378:  0xC6DF,
	5379:  0xC6E2,
	5380:  0xC6E3,
	5381:  0xC6E4,
	5382:  0xC6E5,
	5383:  0xC6E6,
	5384:  0xC6E7,
	5385:  0xC6EA,
	5386:  0xC6EB,
	5387:  0xC6ED,
	5388:  0xC6EE,
	5389:  0xC6EF,
	5390:  0xC6F1,
	5391:  0xC6F2,
	5392:  0xC6F3,
	5393:  0xC6F4,
	5394:  0xC6F5,
	5395:  0xC6F6,
	5396:  0xC6F7,
	5397:  0xC6FA,
	5398:  0xC6FB,
	5399:  0xC6FC,
	5400:  0xC6FE,
	5401:  0xC6FF,
	5402:  0xC700,
	5403:  0xC701,
	5404:  0xC702,
	5405:  0xC703,
	5406:  0xC706,
	5407:  0xC707,
	5408:  0xC709,
	5409:  0xC70A,
	5410:  0xC70B,
	5411:  0xC70D,
	5412:  0xC70E,
	5413:  0xC70F,
	5414:  0xC710,
	5415:  0xC711,
	5416:  0xC712,
	5417:  0xC713,
	5418:  0xC716,
	5419:  0xC718,
	5420:  0xC71A,
	5421:  0xC71B,
	5422:  0xC71C,
	5423:  0xC71D,
	5424:  0xC71E,
	5425:  0xC71F,
	5426:  0xC722,
	5427:  0xC723,
	5428:  0xC725,
	5429:  0xC726,
	5430:  0xC727,
	5431:  0xC729,
	5432:  0xC72A,
	5433:  0xC72B,
	5434:  0xC72C,
	5435:  0xC72D,
	5436:  0xC72E,
	5437:  0xC72F,
	5438:  0xC732,
	5439:  0xC734,
	5440:  0xC736,
	5441:  0xC738,
	5442:  0xC739,
	5443:  0xC73A,
	5444:  0xC73B,
	5445:  0xC73E,
	5446:  0xC73F,
	5447:  0xC741,
	5448:  0xC742,
	5449:  0xC743,
	5450:  0xC745,
	5451:  0xC746,
	5452:  0xC747,
	5453:  0xC748,
	5454:  0xC749,
	5455:  0xC74B,
	5456:  0xC74E,
	5457:  0xC750,
	5458:  0xC759,
	5459:  0xC75A,
	5460:  0xC75B,
	5461:  0xC75D,
	5462:  0xC75E,
	5463:  0xC75F,
	5464:  0xC761,
	5465:  0xC762,
	5466:  0xC763,
	5467:  0xC764,
	5468:  0xC765,
	5469:  0xC766,
	5470:  0xC767,
	5471:  0xC769,
	5472:  0xC76A,
	5473:  0xC76C,
	5474:  0xC76D,
	5475:  0xC76E,
	5476:  0xC76F,
	5477:  0xC770,
	5478:  0xC771,
	5479:  0xC772,
	5480:  0xC773,
	5481:  0xC776,
	5482:  0xC777,
	5483:  0xC779,
	5484:  0xC77A,
	5485:  0xC77B,
	5486:  0xC77F,
	5487:  0xC780,
	5488:  0xC781,
	5489:  0xC782,
	5490:  0xC786,
	5491:  0xC78B,
	5492:  0xC78C,
	5493:  0xC78D,
	5494:  0xC78F,
	5495:  0xC792,
	5496:  0xC793,
	5497:  0xC795,
	5498:  0xC799,
	5499:  0xC79B,
	5500:  0xC79C,
	5501:  0xC79D,
	5502:  0xC79E,
	5503:  0xC79F,
	5504:  0xC7A2,
	5505:  0xC7A7,
	5506:  0xC7A8,
	5507:  0xC7A9,
	5508:  0xC7AA,
	5509:  0xC7AB,
	5510:  0xC7AE,
	5511:  0xC7AF,
	5512:  0xC7B1,
	5513:  0xC7B2,
	5514:  0xC7B3,
	5515:  0xC7B5,
	5516:  0xC7B6,
	5517:  0xC7B7,
	5518:  0xC7B8,
	5519:  0xC7B9,
	5520:  0xC7BA,
	5521:  0xC7BB,
	5522:  0xC7BE,
	5523:  0xC7C2,
	5524:  0xC7C3,
	5525:  0xC7C4,
	5526:  0xC7C5,
	5527:  0xC7C6,
	5528:  0xC7C7,
	5529:  0xC7CA,
	5530:  0xC7CB,
	5531:  0xC7CD,
	5532:  0xC7CF,
	5533:  0xC7D1,
	5534:  0xC7D2,
	5535:  0xC7D3,
	5536:  0xC7D4,
	5537:  0xC7D5,
	5538:  0xC7D6,
	5539:  0xC7D7,
	5540:  0xC7D9,
	5541:  0xC7DA,
	5542:  0xC7DB,
	5543:  0xC7DC,
	5544:  0xC7DE,
	5545:  0xC7DF,
	5546:  0xC7E0,
	5547:  0xC7E1,
	5548:  0xC7E2,
	5549:  0xC7E3,
	5550:  0xC7E5,
	5551:  0xC7E6,
	5552:  0xC7E7,
	5553:  0xC7E9,
	5554:  0xC7EA,
	5555:  0xC7EB,
	5556:  0xC7ED,
	5557:  0xC7EE,
	5558:  0xC7EF,
	5559:  0xC7F0,
	5560:  0xC7F1,
	5561:  0xC7F2,
	5562:  0xC7F3,
	5563:  0xC7F4,
	5564:  0xC7F5,
	5565:  0xC7F6,
	5566:  0xC7F7,
	5567:  0xC7F8,
	5568:  0xC7F9,
	5569:  0xC7FA,
	5570:  0xC7FB,
	5571:  0xC7FC,
	5572:  0xC7FD,
	5573:  0xC7FE,
	5574:  0xC7FF,
	5575:  0xC802,
	5576:  0xC803,
	5577:  0xC805,
	5578:  0xC806,
	5579:  0xC807,
	5580:  0xC809,
	5581:  0xC80B,
	5582:  0xC80C,
	5583:  0xC80D,
	5584:  0xC80E,
	5585:  0xC80F,
	5586:  0xC812,
	5587:  0xC814,
	5588:  0xC817,
	5589:  0xC818,
	5590:  0xC819,
	5591:  0xC81A,
	5592:  0xC81B,
	5593:  0xC81E,
	5594:  0xC81F,
	5595:  0xC821,
	5596:  0xC822,
	5597:  0xC823,
	5598:  0xC825,
	5599:  0xC826,
	5600:  0xC827,
	5601:  0xC828,
	5602:  0xC829,
	5603:  0xC82A,
	5604:  0xC82B,
	5605:  0xC82E,
	5606:  0xC830,
	5607:  0xC832,
	5608:  0xC833,
	5609:  0xC834,
	5610:  0xC835,
	5611:  0xC836,
	5612:  0xC837,
	5613:  0xC839,
	5614:  0xC83A,
	5615:  0xC83B,
	5616:  0xC83D,
	5617:  0xC83E,
	5618:  0xC83F,
	5619:  0xC841,
	5620:  0xC842,
	5621:  0xC843,
	5622:  0xC844,
	5623:  0xC845,
	5624:  0xC846,
	5625:  0xC847,
	5626:  0xC84A,
	5627:  0xC84B,
	5628:  0xC84E,
	5629:  0xC84F,
	5630:  0xC850,
	5631:  0xC851,
	5632:  0xC852,
	5633:  0xC853,
	5634:  0xC855,
	5635:  0xC856,
	5636:  0xC857,
	5637:  0xC858,
	5638:  0xC859,
	5639:  0xC85A,
	5640:  0xC85B,
	5641:  0xC85C,
	5642:  0xC85D,
	5643:  0xC85E,
	5644:  0xC85F,
	5645:  0xC860,
	5646:  0xC861,
	5647:  0xC862,
	5648:  0xC863,
	5649:  0xC864,
	5650:  0xC865,
	5651:  0xC866,
	5652:  0xC867,
	5653:  0xC868,
	5654:  0xC869,
	5655:  0xC86A,
	5656:  0xC86B,
	5657:  0xC86C,
	5658:  0xC86D,
	5659:  0xC86E,
	5660:  0xC86F,
	5661:  0xC872,
	5662:  0xC873,
	5663:  0xC875,
	5664:  0xC876,
	5665:  0xC877,
	5666:  0xC879,
	5667:  0xC87B,
	5668:  0xC87C,
	5669:  0xC87D,
	5670:  0xC87E,
	5671:  0xC87F,
	5672:  0xC882,
	5673:  0xC884,
	5674:  0xC888,
	5675:  0xC889,
	5676:  0xC88A,
	5677:  0xC88E,
	5678:  0xC88F,
	5679:  0xC890,
	5680:  0xC891,
	5681:  0xC892,
	5682:  0xC893,
	5683:  0xC895,
	5684:  0xC896,
	5685:  0xC897,
	5686:  0xC898,
	5687:  0xC899,
	5688:  0xC89A,
	5689:  0xC89B,
	5690:  0xC89C,
	5691:  0xC89E,
	5692:  0xC8A0,
	5693:  0xC8A2,
	5694:  0xC8A3,
	5695:  0xC8A4,
	5696:  0xC8A5,
	5697:  0xC8A6,
	5698:  0xC8A7,
	5699:  0xC8A9,
	5700:  0xC8AA,
	5701:  0xC8AB,
	5702:  0xC8AC,
	5703:  0xC8AD,
	5704:  0xC8AE,
	5705:  0xC8AF,
	5706:  0xC8B0,
	5707:  0xC8B1,
	5708:  0xC8B2,
	5709:  0xC8B3,
	5710:  0xC8B4,
	5711:  0xC8B5,
	5712:  0xC8B6,
	5713:  0xC8B7,
	5714:  0xC8B8,
	5715:  0xC8B9,
	5716:  0xC8BA,
	5717:  0xC8BB,
	5718:  0xC8BE,
	5719:  0xC8BF,
	5720:  0xC8C0,
	5721:  0xC8C1,
	5722:  0xC8C2,
	5723:  0xC8C3,
	5724:  0xC8C5,
	5725:  0xC8C6,
	5726:  0xC8C7,
	5727:  0xC8C9,
	5728:  0xC8CA,
	5729:  0xC8CB,
	5730:  0xC8CD,
	5731:  0xC8CE,
	5732:  0xC8CF,
	5733:  0xC8D0,
	5734:  0xC8D1,
	5735:  0xC8D2,
	5736:  0xC8D3,
	5737:  0xC8D6,
	5738:  0xC8D8,
	5739:  0xC8DA,
	5740:  0xC8DB,
	5741:  0xC8DC,
	5742:  0xC8DD,
	5743:  0xC8DE,
	5744:  0xC8DF,
	5745:  0xC8E2,
	5746:  0xC8E3,
	5747:  0xC8E5,
	5748:  0xC8E6,
	5749:  0xC8E7,
	5750:  0xC8E8,
	5751:  0xC8E9,
	5752:  0xC8EA,
	5753:  0xC8EB,
	5754:  0xC8EC,
	5755:  0xC8ED,
	5756:  0xC8EE,
	5757:  0xC8EF,
	5758:  0xC8F0,
	5759:  0xC8F1,
	5760:  0xC8F2,
	5761:  0xC8F3,
	5762:  0xC8F4,
	5763:  0xC8F6,
	5764:  0xC8F7,
	5765:  0xC8F8,
	5766:  0xC8F9,
	5767:  0xC8FA,
	5768:  0xC8FB,
	5769:  0xC8FE,
	5770:  0xC8FF,
	5771:  0xC901,
	5772:  0xC902,
	5773:  0xC903,
	5774:  0xC907,
	5775:  0xC908,
	5776:  0xC909,
	5777:  0xC90A,
	5778:  0xC90B,
	5779:  0xC90E,
	5780:  0x3000,
	5781:  0x3001,
	5782:  0x3002,
	5783:  0x00B7,
	5784:  0x2025,
	5785:  0x2026,
	5786:  0x00A8,
	5787:  0x3003,
	5788:  0x00AD,
	5789:  0x2015,
	5790:  0x2225,
	5791:  0xFF3C,
	5792:  0x223C,
	5793:  0x2018,
	5794:  0x2019,
	5795:  0x201C,
	5796:  0x201D,
	5797:  0x3014,
	5798:  0x3015,
	5799:  0x3008,
	5800:  0x3009,
	5801:  0x300A,
	5802:  0x300B,
	5803:  0x300C,
	5804:  0x300D,
	5805:  0x300E,
	5806:  0x300F,
	5807:  0x3010,
	5808:  0x3011,
	5809:  0x00B1,
	5810:  0x00D7,
	5811:  0x00F7,
	5812:  0x2260,
	5813:  0x2264,
	5814:  0x2265,
	5815:  0x221E,
	5816:  0x2234,
	5817:  0x00B0,
	5818:  0x2032,
	5819:  0x2033,
	5820:  0x2103,
	5821:  0x212B,
	5822:  0xFFE0,
	5823:  0xFFE1,
	5824:  0xFFE5,
	5825:  0x2642,
	5826:  0x2640,
	5827:  0x2220,
	5828:  0x22A5,
	5829:  0x2312,
	5830:  0x2202,
	5831:  0x2207,
	5832:  0x2261,
	5833:  0x2252,
	5834:  0x00A7,
	5835:  0x203B,
	5836:  0x2606,
	5837:  0x2605,
	5838:  0x25CB,
	5839:  0x25CF,
	5840:  0x25CE,
	5841:  0x25C7,
	5842:  0x25C6,
	5843:  0x25A1,
	5844:  0x25A0,
	5845:  0x25B3,
	5846:  0x25B2,
	5847:  0x25BD,
	5848:  0x25BC,
	5849:  0x2192,
	5850:  0x2190,
	5851:  0x2191,
	5852:  0x2193,
	5853:  0x2194,
	5854:  0x3013,
	5855:  0x226A,
	5856:  0x226B,
	5857:  0x221A,
	5858:  0x223D,
	5859:  0x221D,
	5860:  0x2235,
	5861:  0x222B,
	5862:  0x222C,
	5863:  0x2208,
	5864:  0x220B,
	5865:  0x2286,
	5866:  0x2287,
	5867:  0x2282,
	5868:  0x2283,
	5869:  0x222A,
	5870:  0x2229,
	5871:  0x2227,
	5872:  0x2228,
	5873:  0xFFE2,
	5874:  0xC910,
	5875:  0xC912,
	5876:  0xC913,
	5877:  0xC914,
	5878:  0xC915,
	5879:  0xC916,
	5880:  0xC917,
	5881:  0xC919,
	5882:  0xC91A,
	5883:  0xC91B,
	5884:  0xC91C,
	5885:  0xC91D,
	5886:  0xC91E,
	5887:  0xC91F,
	5888:  0xC920,
	5889:  0xC921,
	5890:  0xC922,
	5891:  0xC923,
	5892:  0xC924,
	5893:  0xC925,
	5894:  0xC926,
	5895:  0xC927,
	5896:  0xC928,
	5897:  0xC929,
	5898:  0xC92A,
	5899:  0xC92B,
	5900:  0xC92D,
	5901:  0xC92E,
	5902:  0xC92F,
	5903:  0xC930,
	5904:  0xC931,
	5905:  0xC932,
	5906:  0xC933,
	5907:  0xC935,
	5908:  0xC936,
	5909:  0xC937,
	5910:  0xC938,
	5911:  0xC939,
	5912:  0xC93A,
	5913:  0xC93B,
	5914:  0xC93C,
	5915:  0xC93D,
	5916:  0xC93E,
	5917:  0xC93F,
	5918:  0xC940,
	5919:  0xC941,
	5920:  0xC942,
	5921:  0xC943,
	5922:  0xC944,
	5923:  0xC945,
	5924:  0xC946,
	5925:  0xC947,
	5926:  0xC948,
	5927:  0xC949,
	5928:  0xC94A,
	5929:  0xC94B,
	5930:  0xC94C,
	5931:  0xC94D,
	5932:  0xC94E,
	5933:  0xC94F,
	5934:  0xC952,
	5935:  0xC953,
	5936:  0xC955,
	5937:  0xC956,
	5938:  0xC957,
	5939:  0xC959,
	5940:  0xC95A,
	5941:  0xC95B,
	5942:  0xC95C,
	5943:  0xC95D,
	5944:  0xC95E,
	5945:  0xC95F,
	5946:  0xC962,
	5947:  0xC964,
	5948:  0xC965,
	5949:  0xC966,
	5950:  0xC967,
	5951:  0xC968,
	5952:  0xC969,
	5953:  0xC96A,
	5954:  0xC96B,
	5955:  0xC96D,
	5956:  0xC96E,
	5957:  0xC96F,
	5958:  0x21D2,
	5959:  0x21D4,
	5960:  0x2200,
	5961:  0x2203,
	5962:  0x00B4,
	5963:  0xFF5E,
	5964:  0x02C7,
	5965:  0x02D8,
	5966:  0x02DD,
	5967:  0x02DA,
	5968:  0x02D9,
	5969:  0x00B8,
	5970:  0x02DB,
	5971:  0x00A1,
	5972:  0x00BF,
	5973:  0x02D0,
	5974:  0x222E,
	5975:  0x2211,
	5976:  0x220F,
	5977:  0x00A4,
	5978:  0x2109,
	5979:  0x2030,
	5980:  0x25C1,
	5981:  0x25C0,
	5982:  0x25B7,
	5983:  0x25B6,
	5984:  0x2664,
	5985:  0x2660,
	5986:  0x2661,
	5987:  0x2665,
	5988:  0x2667,
	5989:  0x2663,
	5990:  0x2299,
	5991:  0x25C8,
	5992:  0x25A3,
	5993:  0x25D0,
	5994:  0x25D1,
	5995:  0x2592,
	5996:  0x25A4,
	5997:  0x25A5,
	5998:  0x25A8,
	5999:  0x25A7,
	6000:  0x25A6,
	6001:  0x25A9,
	6002:  0x2668,
	6003:  0x260F,
	6004:  0x260E,
	6005:  0x261C,
	6006:  0x261E,
	6007:  0x00B6,
	6008:  0x2020,
	6009:  0x2021,
	6010:  0x2195,
	6011:  0x2197,
	6012:  0x2199,
	6013:  0x2196,
	6014:  0x2198,
	6015:  0x266D,
	6016:  0x2669,
	6017:  0x266A,
	6018:  0x266C,
	6019:  0x327F,
	6020:  0x321C,
	6021:  0x2116,
	6022:  0x33C7,
	6023:  0x2122,
	6024:  0x33C2,
	6025:  0x33D8,
	6026:  0x2121,
	6027:  0x20AC,
	6028:  0x00AE,
	6052:  0xC971,
	6053:  0xC972,
	6054:  0xC973,
	6055:  0xC975,
	6056:  0xC976,
	6057:  0xC977,
	6058:  0xC978,
	6059:  0xC979,
	6060:  0xC97A,
	6061:  0xC97B,
	6062:  0xC97D,
	6063:  0xC97E,
	6064:  0xC97F,
	6065:  0xC980,
	6066:  0xC981,
	6067:  0xC982,
	6068:  0xC983,
	6069:  0xC984,
	6070:  0xC985,
	6071:  0xC986,
	6072:  0xC987,
	6073:  0xC98A,
	6074:  0xC98B,
	6075:  0xC98D,
	6076:  0xC98E,
	6077:  0xC98F,
	6078:  0xC991,
	6079:  0xC992,
	6080:  0xC993,
	6081:  0xC994,
	6082:  0xC995,
	6083:  0xC996,
	6084:  0xC997,
	6085:  0xC99A,
	6086:  0xC99C,
	6087:  0xC99E,
	6088:  0xC99F,
	6089:  0xC9A0,
	6090:  0xC9A1,
	6091:  0xC9A2,
	6092:  0xC9A3,
	6093:  0xC9A4,
	6094:  0xC9A5,
	6095:  0xC9A6,
	6096:  0xC9A7,
	6097:  0xC9A8,
	6098:  0xC9A9,
	6099:  0xC9AA,
	6100:  0xC9AB,
	6101:  0xC9AC,
	6102:  0xC9AD,
	6103:  0xC9AE,
	6104:  0xC9AF,
	6105:  0xC9B0,
	6106:  0xC9B1,
	6107:  0xC9B2,
	6108:  0xC9B3,
	6109:  0xC9B4,
	6110:  0xC9B5,
	6111:  0xC9B6,
	6112:  0xC9B7,
	6113:  0xC9B8,
	6114:  0xC9B9,
	6115:  0xC9BA,
	6116:  0xC9BB,
	6117:  0xC9BC,
	6118:  0xC9BD,
	6119:  0xC9BE,
	6120:  0xC9BF,
	6121:  0xC9C2,
	6122:  0xC9C3,
	6123:  0xC9C5,
	6124:  0xC9C6,
	6125:  0xC9C9,
	6126:  0xC9CB,
	6127:  0xC9CC,
	6128:  0xC9CD,
	6129:  0xC9CE,
	6130:  0xC9CF,
	6131:  0xC9D2,
	6132:  0xC9D4,
	6133:  0xC9D7,
	6134:  0xC9D8,
	6135:  0xC9DB,
	6136:  0xFF01,
	6137:  0xFF02,
	6138:  0xFF03,
	6139:  0xFF04,
	6140:  0xFF05,
	6141:  0xFF06,
	6142:  0xFF07,
	6143:  0xFF08,
	6144:  0xFF09,
	6145:  0xFF0A,
	6146:  0xFF0B,
	6147:  0xFF0C,
	6148:  0xFF0D,
	6149:  0xFF0E,
	6150:  0xFF0F,
	6151:  0xFF10,
	6152:  0xFF11,
	6153:  0xFF12,
	6154:  0xFF13,
	6155:  0xFF14,
	6156:  0xFF15,
	6157:  0xFF16,
	6158:  0xFF17,
	6159:  0xFF18,
	6160:  0xFF19,
	6161:  0xFF1A,
	6162:  0xFF1B,
	6163:  0xFF1C,
	6164:  0xFF1D,
	6165:  0xFF1E,
	6166:  0xFF1F,
	6167:  0xFF20,
	6168:  0xFF21,
	6169:  0xFF22,
	6170:  0xFF23,
	6171:  0xFF24,
	6172:  0xFF25,
	6173:  0xFF26,
	6174:  0xFF27,
	6175:  0xFF28,
	6176:  0xFF29,
	6177:  0xFF2A,
	6178:  0xFF2B,
	6179:  0xFF2C,
	6180:  0xFF2D,
	6181:  0xFF2E,
	6182:  0xFF2F,
	6183:  0xFF30,
	6184:  0xFF31,
	6185:  0xFF32,
	6186:  0xFF33,
	6187:  0xFF34,
	6188:  0xFF35,
	6189:  0xFF36,
	6190:  0xFF37,
	6191:  0xFF38,
	6192:  0xFF39,
	6193:  0xFF3A,
	6194:  0xFF3B,
	6195:  0xFFE6,
	6196:  0xFF3D,
	6197:  0xFF3E,
	6198:  0xFF3F,
	6199:  0xFF40,
	6200:  0xFF41,
	6201:  0xFF42,
	6202:  0xFF43,
	6203:  0xFF44,
	6204:  0xFF45,
	6205:  0xFF46,
	6206:  0xFF47,
	6207:  0xFF48,
	6208:  0xFF49,
	6209:  0xFF4A,
	6210:  0xFF4B,
	6211:  0xFF4C,
	6212:  0xFF4D,
	6213:  0xFF4E,
	6214:  0xFF4F,
	6215:  0xFF50,
	6216:  0xFF51,
	6217:  0xFF52,
	6218:  0xFF53,
	6219:  0xFF54,
	6220:  0xFF55,
	6221:  0xFF56,
	6222:  0xFF57,
	6223:  0xFF58,
	6224:  0xFF59,
	6225:  0xFF5A,
	6226:  0xFF5B,
	6227:  0xFF5C,
	6228:  0xFF5D,
	6229:  0xFFE3,
	6230:  0xC9DE,
	6231:  0xC9DF,
	6232:  0xC9E1,
	6233:  0xC9E3,
	6234:  0xC9E5,
	6235:  0xC9E6,
	6236:  0xC9E8,
	6237:  0xC9E9,
	6238:  0xC9EA,
	6239:  0xC9EB,
	6240:  0xC9EE,
	6241:  0xC9F2,
	6242:  0xC9F3,
	6243:  0xC9F4,
	6244:  0xC9F5,
	6245:  0xC9F6,
	6246:  0xC9F7,
	6247:  0xC9FA,
	6248:  0xC9FB,
	6249:  0xC9FD,
	6250:  0xC9FE,
	6251:  0xC9FF,
	6252:  0xCA01,
	6253:  0xCA02,
	6254:  0xCA03,
	6255:  0xCA04,
	6256:  0xCA05,
	6257:  0xCA06,
	6258:  0xCA07,
	6259:  0xCA0A,
	6260:  0xCA0E,
	6261:  0xCA0F,
	6262:  0xCA10,
	6263:  0xCA11,
	6264:  0xCA12,
	6265:  0xCA13,
	6266:  0xCA15,
	6267:  0xCA16,
	6268:  0xCA17,
	6269:  0xCA19,
	6270:  0xCA1A,
	6271:  0xCA1B,
	6272:  0xCA1C,
	6273:  0xCA1D,
	6274:  0xCA1E,
	6275:  0xCA1F,
	6276:  0xCA20,
	6277:  0xCA21,
	6278:  0xCA22,
	6279:  0xCA23,
	6280:  0xCA24,
	6281:  0xCA25,
	6282:  0xCA26,
	6283:  0xCA27,
	6284:  0xCA28,
	6285:  0xCA2A,
	6286:  0xCA2B,
	6287:  0xCA2C,
	6288:  0xCA2D,
	6289:  0xCA2E,
	6290:  0xCA2F,
	6291:  0xCA30,
	6292:  0xCA31,
	6293:  0xCA32,
	6294:  0xCA33,
	6295:  0xCA34,
	6296:  0xCA35,
	6297:  0xCA36,
	6298:  0xCA37,
	6299:  0xCA38,
	6300:  0xCA39,
	6301:  0xCA3A,
	6302:  0xCA3B,
	6303:  0xCA3C,
	6304:  0xCA3D,
	6305:  0xCA3E,
	6306:  0xCA3F,
	6307:  0xCA40,
	6308:  0xCA41,
	6309:  0xCA42,
	6310:  0xCA43,
	6311:  0xCA44,
	6312:  0xCA45,
	6313:  0xCA46,
	6314:  0x3131,
	6315:  0x3132,
	6316:  0x3133,
	6317:  0x3134,
	6318:  0x3135,
	6319:  0x3136,
	6320:  0x3137,
	6321:  0x3138,
	6322:  0x3139,
	6323:  0x313A,
	6324:  0x313B,
	6325:  0x313C,
	6326:  0x313D,
	6327:  0x313E,
	6328:  0x313F,
	6329:  0x3140,
	6330:  0x3141,
	6331:  0x3142,
	6332:  0x3143,
	6333:  0x3144,
	6334:  0x3145,
	6335:  0x3146,
	6336:  0x3147,
	6337:  0x3148,
	6338:  0x3149,
	6339:  0x314A,
	6340:  0x314B,
	6341:  0x314C,
	6342:  0x314D,
	6343:  0x314E,
	6344:  0x314F,
	6345:  0x3150,
	6346:  0x3151,
	6347:  0x3152,
	6348:  0x3153,
	6349:  0x3154,
	6350:  0x3155,
	6351:  0x3156,
	6352:  0x3157,
	6353:  0x3158,
	6354:  0x3159,
	6355:  0x315A,
	6356:  0x315B,
	6357:  0x315C,
	6358:  0x315D,
	6359:  0x315E,
	6360:  0x315F,
	6361:  0x3160,
	6362:  0x3161,
	6363:  0x3162,
	6364:  0x3163,
	6365:  0x3164,
	6366:  0x3165,
	6367:  0x3166,
	6368:  0x3167,
	6369:  0x3168,
	6370:  0x3169,
	6371:  0x316A,
	6372:  0x316B,
	6373:  0x316C,
	6374:  0x316D,
	6375:  0x316E,
	6376:  0x316F,
	6377:  0x3170,
	6378:  0x3171,
	6379:  0x3172,
	6380:  0x3173,
	6381:  0x3174,
	6382:  0x3175,
	6383:  0x3176,
	6384:  0x3177,
	6385:  0x3178,
	6386:  0x3179,
	6387:  0x317A,
	6388:  0x317B,
	6389:  0x317C,
	6390:  0x317D,
	6391:  0x317E,
	6392:  0x317F,
	6393:  0x3180,
	6394:  0x3181,
	6395:  0x3182,
	6396:  0x3183,
	6397:  0x3184,
	6398:  0x3185,
	6399:  0x3186,
	6400:  0x3187,
	6401:  0x3188,
	6402:  0x3189,
	6403:  0x318A,
	6404:  0x318B,
	6405:  0x318C,
	6406:  0x318D,
	6407:  0x318E,
	6408:  0xCA47,
	6409:  0xCA48,
	6410:  0xCA49,
	6411:  0xCA4A,
	6412:  0xCA4B,
	6413:  0xCA4E,
	6414:  0xCA4F,
	6415:  0xCA51,
	6416:  0xCA52,
	6417:  0xCA53,
	6418:  0xCA55,
	6419:  0xCA56,
	6420:  0xCA57,
	6421:  0xCA58,
	6422:  0xCA59,
	6423:  0xCA5A,
	6424:  0xCA5B,
	6425:  0xCA5E,
	6426:  0xCA62,
	6427:  0xCA63,
	6428:  0xCA64,
	6429:  0xCA65,
	6430:  0xCA66,
	6431:  0xCA67,
	6432:  0xCA69,
	6433:  0xCA6A,
	6434:  0xCA6B,
	6435:  0xCA6C,
	6436:  0xCA6D,
	6437:  0xCA6E,
	6438:  0xCA6F,
	6439:  0xCA70,
	6440:  0xCA71,
	6441:  0xCA72,
	6442:  0xCA73,
	6443:  0xCA74,
	6444:  0xCA75,
	6445:  0xCA76,
	6446:  0xCA77,
	6447:  0xCA78,
	6448:  0xCA79,
	6449:  0xCA7A,
	6450:  0xCA7B,
	6451:  0xCA7C,
	6452:  0xCA7E,
	6453:  0xCA7F,
	6454:  0xCA80,
	6455:  0xCA81,
	6456:  0xCA82,
	6457:  0xCA83,
	6458:  0xCA85,
	6459:  0xCA86,
	6460:  0xCA87,
	6461:  0xCA88,
	6462:  0xCA89,
	6463:  0xCA8A,
	6464:  0xCA8B,
	6465:  0xCA8C,
	6466:  0xCA8D,
	6467:  0xCA8E,
	6468:  0xCA8F,
	6469:  0xCA90,
	6470:  0xCA91,
	6471:  0xCA92,
	6472:  0xCA93,
	6473:  0xCA94,
	6474:  0xCA95,
	6475:  0xCA96,
	6476:  0xCA97,
	6477:  0xCA99,
	6478:  0xCA9A,
	6479:  0xCA9B,
	6480:  0xCA9C,
	6481:  0xCA9D,
	6482:  0xCA9E,
	6483:  0xCA9F,
	6484:  0xCAA0,
	6485:  0xCAA1,
	6486:  0xCAA2,
	6487:  0xCAA3,
	6488:  0xCAA4,
	6489:  0xCAA5,
	6490:  0xCAA6,
	6491:  0xCAA7,
	6492:  0x2170,
	6493:  0x2171,
	6494:  0x2172,
	6495:  0x2173,
	6496:  0x2174,
	6497:  0x2175,
	6498:  0x2176,
	6499:  0x2177,
	6500:  0x2178,
	6501:  0x2179,
	6507:  0x2160,
	6508:  0x2161,
	6509:  0x2162,
	6510:  0x2163,
	6511:  0x2164,
	6512:  0x2165,
	6513:  0x2166,
	6514:  0x2167,
	6515:  0x2168,
	6516:  0x2169,
	6524:  0x0391,
	6525:  0x0392,
	6526:  0x0393,
	6527:  0x0394,
	6528:  0x0395,
	6529:  0x0396,
	6530:  0x0397,
	6531:  0x0398,
	6532:  0x0399,
	6533:  0x039A,
	6534:  0x039B,
	6535:  0x039C,
	6536:  0x039D,
	6537:  0x039E,
	6538:  0x039F,
	6539:  0x03A0,
	6540:  0x03A1,
	6541:  0x03A3,
	6542:  0x03A4,
	6543:  0x03A5,
	6544:  0x03A6,
	6545:  0x03A7,
	6546:  0x03A8,
	6547:  0x03A9,
	6556:  0x03B1,
	6557:  0x03B2,
	6558:  0x03B3,
	6559:  0x03B4,
	6560:  0x03B5,
	6561:  0x03B6,
	6562:  0x03B7,
	6563:  0x03B8,
	6564:  0x03B9,
	6565:  0x03BA,
	6566:  0x03BB,
	6567:  0x03BC,
	6568:  0x03BD,
	6569:  0x03BE,
	6570:  0x03BF,
	6571:  0x03C0,
	6572:  0x03C1,
	6573:  0x03C3,
	6574:  0x03C4,
	6575:  0x03C5,
	6576:  0x03C6,
	6577:  0x03C7,
	6578:  0x03C8,
	6579:  0x03C9,
	6586:  0xCAA8,
	6587:  0xCAA9,
	6588:  0xCAAA,
	6589:  0xCAAB,
	6590:  0xCAAC,
	6591:  0xCAAD,
	6592:  0xCAAE,
	6593:  0xCAAF,
	6594:  0xCAB0,
	6595:  0xCAB1,
	6596:  0xCAB2,
	6597:  0xCAB3,
	6598:  0xCAB4,
	6599:  0xCAB5,
	6600:  0xCAB6,
	6601:  0xCAB7,
	6602:  0xCAB8,
	6603:  0xCAB9,
	6604:  0xCABA,
	6605:  0xCABB,
	6606:  0xCABE,
	6607:  0xCABF,
	6608:  0xCAC1,
	6609:  0xCAC2,
	6610:  0xCAC3,
	6611:  0xCAC5,
	6612:  0xCAC6,
	6613:  0xCAC7,
	6614:  0xCAC8,
	6615:  0xCAC9,
	6616:  0xCACA,
	6617:  0xCACB,
	6618:  0xCACE,
	6619:  0xCAD0,
	6620:  0xCAD2,
	6621:  0xCAD4,
	6622:  0xCAD5,
	6623:  0xCAD6,
	6624:  0xCAD7,
	6625:  0xCADA,
	6626:  0xCADB,
	6627:  0xCADC,
	6628:  0xCADD,
	6629:  0xCADE,
	6630:  0xCADF,
	6631:  0xCAE1,
	6632:  0xCAE2,
	6633:  0xCAE3,
	6634:  0xCAE4,
	6635:  0xCAE5,
	6636:  0xCAE6,
	6637:  0xCAE7,
	6638:  0xCAE8,
	6639:  0xCAE9,
	6640:  0xCAEA,
	6641:  0xCAEB,
	6642:  0xCAED,
	6643:  0xCAEE,
	6644:  0xCAEF,
	6645:  0xCAF0,
	6646:  0xCAF1,
	6647:  0xCAF2,
	6648:  0xCAF3,
	6649:  0xCAF5,
	6650:  0xCAF6,
	6651:  0xCAF7,
	6652:  0xCAF8,
	6653:  0xCAF9,
	6654:  0xCAFA,
	6655:  0xCAFB,
	6656:  0xCAFC,
	6657:  0xCAFD,
	6658:  0xCAFE,
	6659:  0xCAFF,
	6660:  0xCB00,
	6661:  0xCB01,
	6662:  0xCB02,
	6663:  0xCB03,
	6664:  0xCB04,
	6665:  0xCB05,
	6666:  0xCB06,
	6667:  0xCB07,
	6668:  0xCB09,
	6669:  0xCB0A,
	6670:  0x2500,
	6671:  0x2502,
	6672:  0x250C,
	6673:  0x2510,
	6674:  0x2518,
	6675:  0x2514,
	6676:  0x251C,
	6677:  0x252C,
	6678:  0x2524,
	6679:  0x2534,
	6680:  0x253C,
	6681:  0x2501,
	6682:  0x2503,
	6683:  0x250F,
	6684:  0x2513,
	6685:  0x251B,
	6686:  0x2517,
	6687:  0x2523,
	6688:  0x2533,
	6689:  0x252B,
	6690:  0x253B,
	6691:  0x254B,
	6692:  0x2520,
	6693:  0x252F,
	6694:  0x2528,
	6695:  0x2537,
	6696:  0x253F,
	6697:  0x251D,
	6698:  0x2530,
	6699:  0x2525,
	6700:  0x2538,
	6701:  0x2542,
	6702:  0x2512,
	6703:  0x2511,
	6704:  0x251A,
	6705:  0x2519,
	6706:  0x2516,
	6707:  0x2515,
	6708:  0x250E,
	6709:  0x250D,
	6710:  0x251E,
	6711:  0x251F,
	6712:  0x2521,
	6713:  0x2522,
	6714:  0x2526,
	6715:  0x2527,
	6716:  0x2529,
	6717:  0x252A,
	6718:  0x252D,
	6719:  0x252E,
	6720:  0x2531,
	6721:  0x2532,
	6722:  0x2535,
	6723:  0x2536,
	6724:  0x2539,
	6725:  0x253A,
	6726:  0x253D,
	6727:  0x253E,
	6728:  0x2540,
	6729:  0x2541,
	6730:  0x2543,
	6731:  0x2544,
	6732:  0x2545,
	6733:  0x2546,
	6734:  0x2547,
	6735:  0x2548,
	6736:  0x2549,
	6737:  0x254A,
	6764:  0xCB0B,
	6765:  0xCB0C,
	6766:  0xCB0D,
	6767:  0xCB0E,
	6768:  0xCB0F,
	6769:  0xCB11,
	6770:  0xCB12,
	6771:  0xCB13,
	6772:  0xCB15,
	6773:  0xCB16,
	6774:  0xCB17,
	6775:  0xCB19,
	6776:  0xCB1A,
	6777:  0xCB1B,
	6778:  0xCB1C,
	6779:  0xCB1D,
	6780:  0xCB1E,
	6781:  0xCB1F,
	6782:  0xCB22,
	6783:  0xCB23,
	6784:  0xCB24,
	6785:  0xCB25,
	6786:  0xCB26,
	6787:  0xCB27,
	6788:  0xCB28,
	6789:  0xCB29,
	6790:  0xCB2A,
	6791:  0xCB2B,
	6792:  0xCB2C,
	6793:  0xCB2D,
	6794:  0xCB2E,
	6795:  0xCB2F,
	6796:  0xCB30,
	6797:  0xCB31,
	6798:  0xCB32,
	6799:  0xCB33,
	6800:  0xCB34,
	6801:  0xCB35,
	6802:  0xCB36,
	6803:  0xCB37,
	6804:  0xCB38,
	6805:  0xCB39,
	6806:  0xCB3A,
	6807:  0xCB3B,
	6808:  0xCB3C,
	6809:  0xCB3D,
	6810:  0xCB3E,
	6811:  0xCB3F,
	6812:  0xCB40,
	6813:  0xCB42,
	6814:  0xCB43,
	6815:  0xCB44,
	6816:  0xCB45,
	6817:  0xCB46,
	6818:  0xCB47,
	6819:  0xCB4A,
	6820:  0xCB4B,
	6821:  0xCB4D,
	6822:  0xCB4E,
	6823:  0xCB4F,
	6824:  0xCB51,
	6825:  0xCB52,
	6826:  0xCB53,
	6827:  0xCB54,
	6828:  0xCB55,
	6829:  0xCB56,
	6830:  0xCB57,
	6831:  0xCB5A,
	6832:  0xCB5B,
	6833:  0xCB5C,
	6834:  0xCB5E,
	6835:  0xCB5F,
	6836:  0xCB60,
	6837:  0xCB61,
	6838:  0xCB62,
	6839:  0xCB63,
	6840:  0xCB65,
	6841:  0xCB66,
	6842:  0xCB67,
	6843:  0xCB68,
	6844:  0xCB69,
	6845:  0xCB6A,
	6846:  0xCB6B,
	6847:  0xCB6C,
	6848:  0x3395,
	6849:  0x3396,
	6850:  0x3397,
	6851:  0x2113,
	6852:  0x3398,
	6853:  0x33C4,
	6854:  0x33A3,
	6855:  0x33A4,
	6856:  0x33A5,
	6857:  0x33A6,
	6858:  0x3399,
	6859:  0x339A,
	6860:  0x339B,
	6861:  0x339C,
	6862:  0x339D,
	6863:  0x339E,
	6864:  0x339F,
	6865:  0x33A0,
	6866:  0x33A1,
	6867:  0x33A2,
	6868:  0x33CA,
	6869:  0x338D,
	6870:  0x338E,
	6871:  0x338F,
	6872:  0x33CF,
	6873:  0x3388,
	6874:  0x3389,
	6875:  0x33C8,
	6876:  0x33A7,
	6877:  0x33A8,
	6878:  0x33B0,
	6879:  0x33B1,
	6880:  0x33B2,
	6881:  0x33B3,
	6882:  0x33B4,
	6883:  0x33B5,
	6884:  0x33B6,
	6885:  0x33B7,
	6886:  0x33B8,
	6887:  0x33B9,
	6888:  0x3380,
	6889:  0x3381,
	6890:  0x3382,
	6891:  0x3383,
	6892:  0x3384,
	6893:  0x33BA,
	6894:  0x33BB,
	6895:  0x33BC,
	6896:  0x33BD,
	6897:  0x33BE,
	6898:  0x33BF,
	6899:  0x3390,
	6900:  0x3391,
	6901:  0x3392,
	6902:  0x3393,
	6903:  0x3394,
	6904:  0x2126,
	6905:  0x33C0,
	6906:  0x33C1,
	6907:  0x338A,
	6908:  0x338B,
	6909:  0x338C,
	6910:  0x33D6,
	6911:  0x33C5,
	6912:  0x33AD,
	6913:  0x33AE,
	6914:  0x33AF,
	6915:  0x33DB,
	6916:  0x33A9,
	6917:  0x33AA,
	6918:  0x33AB,
	6919:  0x33AC,
	6920:  0x33DD,
	6921:  0x33D0,
	6922:  0x33D3,
	6923:  0x33C3,
	6924:  0x33C9,
	6925:  0x33DC,
	6926:  0x33C6,
	6942:  0xCB6D,
	6943:  0xCB6E,
	6944:  0xCB6F,
	6945:  0xCB70,
	6946:  0xCB71,
	6947:  0xCB72,
	6948:  0xCB73,
	6949:  0xCB74,
	6950:  0xCB75,
	6951:  0xCB76,
	6952:  0xCB77,
	6953:  0xCB7A,
	6954:  0xCB7B,
	6955:  0xCB7C,
	6956:  0xCB7D,
	6957:  0xCB7E,
	6958:  0xCB7F,
	6959:  0xCB80,
	6960:  0xCB81,
	6961:  0xCB82,
	6962:  0xCB83,
	6963:  0xCB84,
	6964:  0xCB85,
	6965:  0xCB86,
	6966:  0xCB87,
	6967:  0xCB88,
	6968:  0xCB89,
	6969:  0xCB8A,
	6970:  0xCB8B,
	6971:  0xCB8C,
	6972:  0xCB8D,
	6973:  0xCB8E,
	6974:  0xCB8F,
	6975:  0xCB90,
	6976:  0xCB91,
	6977:  0xCB92,
	6978:  0xCB93,
	6979:  0xCB94,
	6980:  0xCB95,
	6981:  0xCB96,
	6982:  0xCB97,
	6983:  0xCB98,
	6984:  0xCB99,
	6985:  0xCB9A,
	6986:  0xCB9B,
	6987:  0xCB9D,
	6988:  0xCB9E,
	6989:  0xCB9F,
	6990:  0xCBA0,
	6991:  0xCBA1,
	6992:  0xCBA2,
	6993:  0xCBA3,
	6994:  0xCBA4,
	6995:  0xCBA5,
	6996:  0xCBA6,
	6997:  0xCBA7,
	6998:  0xCBA8,
	6999:  0xCBA9,
	7000:  0xCBAA,
	7001:  0xCBAB,
	7002:  0xCBAC,
	7003:  0xCBAD,
	7004:  0xCBAE,
	7005:  0xCBAF,
	7006:  0xCBB0,
	7007:  0xCBB1,
	7008:  0xCBB2,
	7009:  0xCBB3,
	7010:  0xCBB4,
	7011:  0xCBB5,
	7012:  0xCBB6,
	7013:  0xCBB7,
	7014:  0xCBB9,
	7015:  0xCBBA,
	7016:  0xCBBB,
	7017:  0xCBBC,
	7018:  0xCBBD,
	7019:  0xCBBE,
	7020:  0xCBBF,
	7021:  0xCBC0,
	7022:  0xCBC1,
	7023:  0xCBC2,
	7024:  0xCBC3,
	7025:  0xCBC4,
	7026:  0x00C6,
	7027:  0x00D0,
	7028:  0x00AA,
	7029:  0x0126,
	7031:  0x0132,
	7033:  0x013F,
	7034:  0x0141,
	7035:  0x00D8,
	7036:  0x0152,
	7037:  0x00BA,
	7038:  0x00DE,
	7039:  0x0166,
	7040:  0x014A,
	7042:  0x3260,
	7043:  0x3261,
	7044:  0x3262,
	7045:  0x3263,
	7046:  0x3264,
	7047:  0x3265,
	7048:  0x3266,
	7049:  0x3267,
	7050:  0x3268,
	7051:  0x3269,
	7052:  0x326A,
	7053:  0x326B,
	7054:  0x326C,
	7055:  0x326D,
	7056:  0x326E,
	7057:  0x326F,
	7058:  0x3270,
	7059:  0x3271,
	7060:  0x3272,
	7061:  0x3273,
	7062:  0x3274,
	7063:  0x3275,
	7064:  0x3276,
	7065:  0x3277,
	7066:  0x3278,
	7067:  0x3279,
	7068:  0x327A,
	7069:  0x327B,
	7070:  0x24D0,
	7071:  0x24D1,
	7072:  0x24D2,
	7073:  0x24D3,
	7074:  0x24D4,
	7075:  0x24D5,
	7076:  0x24D6,
	7077:  0x24D7,
	7078:  0x24D8,
	7079:  0x24D9,
	7080:  0x24DA,
	7081:  0x24DB,
	7082:  0x24DC,
	7083:  0x24DD,
	7084:  0x24DE,
	7085:  0x24DF,
	7086:  0x24E0,
	7087:  0x24E1,
	7088:  0x24E2,
	7089:  0x24E3,
	7090:  0x24E4,
	7091:  0x24E5,
	7092:  0x24E6,
	7093:  0x24E7,
	7094:  0x24E8,
	7095:  0x24E9,
	7096:  0x2460,
	7097:  0x2461,
	7098:  0x2462,
	7099:  0x2463,
	7100:  0x2464,
	7101:  0x2465,
	7102:  0x2466,
	7103:  0x2467,
	7104:  0x2468,
	7105:  0x2469,
	7106:  0x246A,
	7107:  0x246B,
	7108:  0x246C,
	7109:  0x246D,
	7110:  0x246E,
	7111:  0x00BD,
	7112:  0x2153,
	7113:  0x2154,
	7114:  0x00BC,
	7115:  0x00BE,
	7116:  0x215B,
	7117:  0x215C,
	7118:  0x215D,
	7119:  0x215E,
	7120:  0xCBC5,
	7121:  0xCBC6,
	7122:  0xCBC7,
	7123:  0xCBC8,
	7124:  0xCBC9,
	7125:  0xCBCA,
	7126:  0xCBCB,
	7127:  0xCBCC,
	7128:  0xCBCD,
	7129:  0xCBCE,
	7130:  0xCBCF,
	7131:  0xCBD0,
	7132:  0xCBD1,
	7133:  0xCBD2,
	7134:  0xCBD3,
	7135:  0xCBD5,
	7136:  0xCBD6,
	7137:  0xCBD7,
	7138:  0xCBD8,
	7139:  0xCBD9,
	7140:  0xCBDA,
	7141:  0xCBDB,
	7142:  0xCBDC,
	7143:  0xCBDD,
	7144:  0xCBDE,
	7145:  0xCBDF,
	7146:  0xCBE0,
	7147:  0xCBE1,
	7148:  0xCBE2,
	7149:  0xCBE3,
	7150:  0xCBE5,
	7151:  0xCBE6,
	7152:  0xCBE8,
	7153:  0xCBEA,
	7154:  0xCBEB,
	7155:  0xCBEC,
	7156:  0xCBED,
	7157:  0xCBEE,
	7158:  0xCBEF,
	7159:  0xCBF0,
	7160:  0xCBF1,
	7161:  0xCBF2,
	7162:  0xCBF3,
	7163:  0xCBF4,
	7164:  0xCBF5,
	7165:  0xCBF6,
	7166:  0xCBF7,
	7167:  0xCBF8,
	7168:  0xCBF9,
	7169:  0xCBFA,
	7170:  0xCBFB,
	7171:  0xCBFC,
	7172:  0xCBFD,
	7173:  0xCBFE,
	7174:  0xCBFF,
	7175:  0xCC00,
	7176:  0xCC01,
	7177:  0xCC02,
	7178:  0xCC03,
	7179:  0xCC04,
	7180:  0xCC05,
	7181:  0xCC06,
	7182:  0xCC07,
	7183:  0xCC08,
	7184:  0xCC09,
	7185:  0xCC0A,
	7186:  0xCC0B,
	7187:  0xCC0E,
	7188:  0xCC0F,
	7189:  0xCC11,
	7190:  0xCC12,
	7191:  0xCC13,
	7192:  0xCC15,
	7193:  0xCC16,
	7194:  0xCC17,
	7195:  0xCC18,
	7196:  0xCC19,
	7197:  0xCC1A,
	7198:  0xCC1B,
	7199:  0xCC1E,
	7200:  0xCC1F,
	7201:  0xCC20,
	7202:  0xCC23,
	7203:  0xCC24,
	7204:  0x00E6,
	7205:  0x0111,
	7206:  0x00F0,
	7207:  0x0127,
	7208:  0x0131,
	7209:  0x0133,
	7210:  0x0138,
	7211:  0x0140,
	7212:  0x0142,
	7213:  0x00F8,
	7214:  0x0153,
	7215:  0x00DF,
	7216:  0x00FE,
	7217:  0x0167,
	7218:  0x014B,
	7219:  0x0149,
	7220:  0x3200,
	7221:  0x3201,
	7222:  0x3202,
	7223:  0x3203,
	7224:  0x3204,
	7225:  0x3205,
	7226:  0x3206,
	7227:  0x3207,
	7228:  0x3208,
	7229:  0x3209,
	7230:  0x320A,
	7231:  0x320B,
	7232:  0x320C,
	7233:  0x320D,
	7234:  0x320E,
	7235:  0x320F,
	7236:  0x3210,
	7237:  0x3211,
	7238:  0x3212,
	7239:  0x3213,
	7240:  0x3214,
	7241:  0x3215,
	7242:  0x3216,
	7243:  0x3217,
	7244:  0x3218,
	7245:  0x3219,
	7246:  0x321A,
	7247:  0x321B,
	7248:  0x249C,
	7249:  0x249D,
	7250:  0x249E,
	7251:  0x249F,
	7252:  0x24A0,
	7253:  0x24A1,
	7254:  0x24A2,
	7255:  0x24A3,
	7256:  0x24A4,
	7257:  0x24A5,
	7258:  0x24A6,
	7259:  0x24A7,
	7260:  0x24A8,
	7261:  0x24A9,
	7262:  0x24AA,
	7263:  0x24AB,
	7264:  0x24AC,
	7265:  0x24AD,
	7266:  0x24AE,
	7267:  0x24AF,
	7268:  0x24B0,
	7269:  0x24B1,
	7270:  0x24B2,
	7271:  0x24B3,
	7272:  0x24B4,
	7273:  0x24B5,
	7274:  0x2474,
	7275:  0x2475,
	7276:  0x2476,
	7277:  0x2477,
	7278:  0x2478,
	7279:  0x2479,
	7280:  0x247A,
	7281:  0x247B,
	7282:  0x247C,
	7283:  0x247D,
	7284:  0x247E,
	7285:  0x247F,
	7286:  0x2480,
	7287:  0x2481,
	7288:  0x2482,
	7289:  0x00B9,
	7290:  0x00B2,
	7291:  0x00B3,
	7292:  0x2074,
	7293:  0x207F,
	7294:  0x2081,
	7295:  0x2082,
	7296:  0x2083,
	7297:  0x2084,
	7298:  0xCC25,
	7299:  0xCC26,
	7300:  0xCC2A,
	7301:  0xCC2B,
	7302:  0xCC2D,
	7303:  0xCC2F,
	7304:  0xCC31,
	7305:  0xCC32,
	7306:  0xCC33,
	7307:  0xCC34,
	7308:  0xCC35,
	7309:  0xCC36,
	7310:  0xCC37,
	7311:  0xCC3A,
	7312:  0xCC3F,
	7313:  0xCC40,
	7314:  0xCC41,
	7315:  0xCC42,
	7316:  0xCC43,
	7317:  0xCC46,
	7318:  0xCC47,
	7319:  0xCC49,
	7320:  0xCC4A,
	7321:  0xCC4B,
	7322:  0xCC4D,
	7323:  0xCC4E,
	7324:  0xCC4F,
	7325:  0xCC50,
	7326:  0xCC51,
	7327:  0xCC52,
	7328:  0xCC53,
	7329:  0xCC56,
	7330:  0xCC5A,
	7331:  0xCC5B,
	7332:  0xCC5C,
	7333:  0xCC5D,
	7334:  0xCC5E,
	7335:  0xCC5F,
	7336:  0xCC61,
	7337:  0xCC62,
	7338:  0xCC63,
	7339:  0xCC65,
	7340:  0xCC67,
	7341:  0xCC69,
	7342:  0xCC6A,
	7343:  0xCC6B,
	7344:  0xCC6C,
	7345:  0xCC6D,
	7346:  0xCC6E,
	7347:  0xCC6F,
	7348:  0xCC71,
	7349:  0xCC72,
	7350:  0xCC73,
	7351:  0xCC74,
	7352:  0xCC76,
	7353:  0xCC77,
	7354:  0xCC78,
	7355:  0xCC79,
	7356:  0xCC7A,
	7357:  0xCC7B,
	7358:  0xCC7C,
	7359:  0xCC7D,
	7360:  0xCC7E,
	7361:  0xCC7F,
	7362:  0xCC80,
	7363:  0xCC81,
	7364:  0xCC82,
	7365:  0xCC83,
	7366:  0xCC84,
	7367:  0xCC85,
	7368:  0xCC86,
	7369:  0xCC87,
	7370:  0xCC88,
	7371:  0xCC89,
	7372:  0xCC8A,
	7373:  0xCC8B,
	7374:  0xCC8C,
	7375:  0xCC8D,
	7376:  0xCC8E,
	7377:  0xCC8F,
	7378:  0xCC90,
	7379:  0xCC91,
	7380:  0xCC92,
	7381:  0xCC93,
	7382:  0x3041,
	7383:  0x3042,
	7384:  0x3043,
	7385:  0x3044,
	7386:  0x3045,
	7387:  0x3046,
	7388:  0x3047,
	7389:  0x3048,
	7390:  0x3049,
	7391:  0x304A,
	7392:  0x304B,
	7393:  0x304C,
	7394:  0x304D,
	7395:  0x304E,
	7396:  0x304F,
	7397:  0x3050,
	7398:  0x3051,
	7399:  0x3052,
	7400:  0x3053,
	7401:  0x3054,
	7402:  0x3055,
	7403:  0x3056,
	7404:  0x3057,
	7405:  0x3058,
	7406:  0x3059,
	7407:  0x305A,
	7408:  0x305B,
	7409:  0x305C,
	7410:  0x305D,
	7411:  0x305E,
	7412:  0x305F,
	7413:  0x3060,
	7414:  0x3061,
	7415:  0x3062,
	7416:  0x3063,
	7417:  0x3064,
	7418:  0x3065,
	7419:  0x3066,
	7420:  0x3067,
	7421:  0x3068,
	7422:  0x3069,
	7423:  0x306A,
	7424:  0x306B,
	7425:  0x306C,
	7426:  0x306D,
	7427:  0x306E,
	7428:  0x306F,
	7429:  0x3070,
	7430:  0x3071,
	7431:  0x3072,
	7432:  0x3073,
	7433:  0x3074,
	7434:  0x3075,
	7435:  0x3076,
	7436:  0x3077,
	7437:  0x3078,
	7438:  0x3079,
	7439:  0x307A,
	7440:  0x307B,
	7441:  0x307C,
	7442:  0x307D,
	7443:  0x307E,
	7444:  0x307F,
	7445:  0x3080,
	7446:  0x3081,
	7447:  0x3082,
	7448:  0x3083,
	7449:  0x3084,
	7450:  0x3085,
	7451:  0x3086,
	7452:  0x3087,
	7453:  0x3088,
	7454:  0x3089,
	7455:  0x308A,
	7456:  0x308B,
	7457:  0x308C,
	7458:  0x308D,
	7459:  0x308E,
	7460:  0x308F,
	7461:  0x3090,
	7462:  0x3091,
	7463:  0x3092,
	7464:  0x3093,
	7476:  0xCC94,
	7477:  0xCC95,
	7478:  0xCC96,
	7479:  0xCC97,
	7480:  0xCC9A,
	7481:  0xCC9B,
	7482:  0xCC9D,
	7483:  0xCC9E,
	7484:  0xCC9F,
	7485:  0xCCA1,
	7486:  0xCCA2,
	7487:  0xCCA3,
	7488:  0xCCA4,
	7489:  0xCCA5,
	7490:  0xCCA6,
	7491:  0xCCA7,
	7492:  0xCCAA,
	7493:  0xCCAE,
	7494:  0xCCAF,
	7495:  0xCCB0,
	7496:  0xCCB1,
	7497:  0xCCB2,
	7498:  0xCCB3,
	7499:  0xCCB6,
	7500:  0xCCB7,
	7501:  0xCCB9,
	7502:  0xCCBA,
	7503:  0xCCBB,
	7504:  0xCCBD,
	7505:  0xCCBE,
	7506:  0xCCBF,
	7507:  0xCCC0,
	7508:  0xCCC1,
	7509:  0xCCC2,
	7510:  0xCCC3,
	7511:  0xCCC6,
	7512:  0xCCC8,
	7513:  0xCCCA,
	7514:  0xCCCB,
	7515:  0xCCCC,
	7516:  0xCCCD,
	7517:  0xCCCE,
	7518:  0xCCCF,
	7519:  0xCCD1,
	7520:  0xCCD2,
	7521:  0xCCD3,
	7522:  0xCCD5,
	7523:  0xCCD6,
	7524:  0xCCD7,
	7525:  0xCCD8,
	7526:  0xCCD9,
	7527:  0xCCDA,
	7528:  0xCCDB,
	7529:  0xCCDC,
	7530:  0xCCDD,
	7531:  0xCCDE,
	7532:  0xCCDF,
	7533:  0xCCE0,
	7534:  0xCCE1,
	7535:  0xCCE2,
	7536:  0xCCE3,
	7537:  0xCCE5,
	7538:  0xCCE6,
	7539:  0xCCE7,
	7540:  0xCCE8,
	7541:  0xCCE9,
	7542:  0xCCEA,
	7543:  0xCCEB,
	7544:  0xCCED,
	7545:  0xCCEE,
	7546:  0xCCEF,
	7547:  0xCCF1,
	7548:  0xCCF2,
	7549:  0xCCF3,
	7550:  0xCCF4,
	7551:  0xCCF5,
	7552:  0xCCF6,
	7553:  0xCCF7,
	7554:  0xCCF8,
	7555:  0xCCF9,
	7556:  0xCCFA,
	7557:  0xCCFB,
	7558:  0xCCFC,
	7559:  0xCCFD,
	7560:  0x30A1,
	7561:  0x30A2,
	7562:  0x30A3,
	7563:  0x30A4,
	7564:  0x30A5,
	7565:  0x30A6,
	7566:  0x30A7,
	7567:  0x30A8,
	7568:  0x30A9,
	7569:  0x30AA,
	7570:  0x30AB,
	7571:  0x30AC,
	7572:  0x30AD,
	7573:  0x30AE,
	7574:  0x30AF,
	7575:  0x30B0,
	7576:  0x30B1,
	7577:  0x30B2,
	7578:  0x30B3,
	7579:  0x30B4,
	7580:  0x30B5,
	7581:  0x30B6,
	7582:  0x30B7,
	7583:  0x30B8,
	7584:  0x30B9,
	7585:  0x30BA,
	7586:  0x30BB,
	7587:  0x30BC,
	7588:  0x30BD,
	7589:  0x30BE,
	7590:  0x30BF,
	7591:  0x30C0,
	7592:  0x30C1,
	7593:  0x30C2,
	7594:  0x30C3,
	7595:  0x30C4,
	7596:  0x30C5,
	7597:  0x30C6,
	7598:  0x30C7,
	7599:  0x30C8,
	7600:  0x30C9,
	7601:  0x30CA,
	7602:  0x30CB,
	7603:  0x30CC,
	7604:  0x30CD,
	7605:  0x30CE,
	7606:  0x30CF,
	7607:  0x30D0,
	7608:  0x30D1,
	7609:  0x30D2,
	7610:  0x30D3,
	7611:  0x30D4,
	7612:  0x30D5,
	7613:  0x30D6,
	7614:  0x30D7,
	7615:  0x30D8,
	7616:  0x30D9,
	7617:  0x30DA,
	7618:  0x30DB,
	7619:  0x30DC,
	7620:  0x30DD,
	7621:  0x30DE,
	7622:  0x30DF,
	7623:  0x30E0,
	7624:  0x30E1,
	7625:  0x30E2,
	7626:  0x30E3,
	7627:  0x30E4,
	7628:  0x30E5,
	7629:  0x30E6,
	7630:  0x30E7,
	7631:  0x30E8,
	7632:  0x30E9,
	7633:  0x30EA,
	7634:  0x30EB,
	7635:  0x30EC,
	7636:  0x30ED,
	7637:  0x30EE,
	7638:  0x30EF,
	7639:  0x30F0,
	7640:  0x30F1,
	7641:  0x30F2,
	7642:  0x30F3,
	7643:  0x30F4,
	7644:  0x30F5,
	7645:  0x30F6,
	7654:  0xCCFE,
	7655:  0xCCFF,
	7656:  0xCD00,
	7657:  0xCD02,
	7658:  0xCD03,
	7659:  0xCD04,
	7660:  0xCD05,
	7661:  0xCD06,
	7662:  0xCD07,
	7663:  0xCD0A,
	7664:  0xCD0B,
	7665:  0xCD0D,
	7666:  0xCD0E,
	7667:  0xCD0F,
	7668:  0xCD11,
	7669:  0xCD12,
	7670:  0xCD13,
	7671:  0xCD14,
	7672:  0xCD15,
	7673:  0xCD16,
	7674:  0xCD17,
	7675:  0xCD1A,
	7676:  0xCD1C,
	7677:  0xCD1E,
	7678:  0xCD1F,
	7679:  0xCD20,
	7680:  0xCD21,
	7681:  0xCD22,
	7682:  0xCD23,
	7683:  0xCD25,
	7684:  0xCD26,
	7685:  0xCD27,
	7686:  0xCD29,
	7687:  0xCD2A,
	7688:  0xCD2B,
	7689:  0xCD2D,
	7690:  0xCD2E,
	7691:  0xCD2F,
	7692:  0xCD30,
	7693:  0xCD31,
	7694:  0xCD32,
	7695:  0xCD33,
	7696:  0xCD34,
	7697:  0xCD35,
	7698:  0xCD36,
	7699:  0xCD37,
	7700:  0xCD38,
	7701:  0xCD3A,
	7702:  0xCD3B,
	7703:  0xCD3C,
	7704:  0xCD3D,
	7705:  0xCD3E,
	7706:  0xCD3F,
	7707:  0xCD40,
	7708:  0xCD41,
	7709:  0xCD42,
	7710:  0xCD43,
	7711:  0xCD44,
	7712:  0xCD45,
	7713:  0xCD46,
	7714:  0xCD47,
	7715:  0xCD48,
	7716:  0xCD49,
	7717:  0xCD4A,
	7718:  0xCD4B,
	7719:  0xCD4C,
	7720:  0xCD4D,
	7721:  0xCD4E,
	7722:  0xCD4F,
	7723:  0xCD50,
	7724:  0xCD51,
	7725:  0xCD52,
	7726:  0xCD53,
	7727:  0xCD54,
	7728:  0xCD55,
	7729:  0xCD56,
	7730:  0xCD57,
	7731:  0xCD58,
	7732:  0xCD59,
	7733:  0xCD5A,
	7734:  0xCD5B,
	7735:  0xCD5D,
	7736:  0xCD5E,
	7737:  0xCD5F,
	7738:  0x0410,
	7739:  0x0411,
	7740:  0x0412,
	7741:  0x0413,
	7742:  0x0414,
	7743:  0x0415,
	7744:  0x0401,
	7745:  0x0416,
	7746:  0x0417,
	7747:  0x0418,
	7748:  0x0419,
	7749:  0x041A,
	7750:  0x041B,
	7751:  0x041C,
	7752:  0x041D,
	7753:  0x041E,
	7754:  0x041F,
	7755:  0x0420,
	7756:  0x0421,
	7757:  0x0422,
	7758:  0x0423,
	7759:  0x0424,
	7760:  0x0425,
	7761:  0x0426,
	7762:  0x0427,
	7763:  0x0428,
	7764:  0x0429,
	7765:  0x042A,
	7766:  0x042B,
	7767:  0x042C,
	7768:  0x042D,
	7769:  0x042E,
	7770:  0x042F,
	7786:  0x0430,
	7787:  0x0431,
	7788:  0x0432,
	7789:  0x0433,
	7790:  0x0434,
	7791:  0x0435,
	7792:  0x0451,
	7793:  0x0436,
	7794:  0x0437,
	7795:  0x0438,
	7796:  0x0439,
	7797:  0x043A,
	7798:  0x043B,
	7799:  0x043C,
	7800:  0x043D,
	7801:  0x043E,
	7802:  0x043F,
	7803:  0x0440,
	7804:  0x0441,
	7805:  0x0442,
	7806:  0x0443,
	7807:  0x0444,
	7808:  0x0445,
	7809:  0x0446,
	7810:  0x0447,
	7811:  0x0448,
	7812:  0x0449,
	7813:  0x044A,
	7814:  0x044B,
	7815:  0x044C,
	7816:  0x044D,
	7817:  0x044E,
	7818:  0x044F,
	7832:  0xCD61,
	7833:  0xCD62,
	7834:  0xCD63,
	7835:  0xCD65,
	7836:  0xCD66,
	7837:  0xCD67,
	7838:  0xCD68,
	7839:  0xCD69,
	7840:  0xCD6A,
	7841:  0xCD6B,
	7842:  0xCD6E,
	7843:  0xCD70,
	7844:  0xCD72,
	7845:  0xCD73,
	7846:  0xCD74,
	7847:  0xCD75,
	7848:  0xCD76,
	7849:  0xCD77,
	7850:  0xCD79,
	7851:  0xCD7A,
	7852:  0xCD7B,
	7853:  0xCD7C,
	7854:  0xCD7D,
	7855:  0xCD7E,
	7856:  0xCD7F,
	7857:  0xCD80,
	7858:  0xCD81,
	7859:  0xCD82,
	7860:  0xCD83,
	7861:  0xCD84,
	7862:  0xCD85,
	7863:  0xCD86,
	7864:  0xCD87,
	7865:  0xCD89,
	7866:  0xCD8A,
	7867:  0xCD8B,
	7868:  0xCD8C,
	7869:  0xCD8D,
	7870:  0xCD8E,
	7871:  0xCD8F,
	7872:  0xCD90,
	7873:  0xCD91,
	7874:  0xCD92,
	7875:  0xCD93,
	7876:  0xCD96,
	7877:  0xCD97,
	7878:  0xCD99,
	7879:  0xCD9A,
	7880:  0xCD9B,
	7881:  0xCD9D,
	7882:  0xCD9E,
	7883:  0xCD9F,
	7884:  0xCDA0,
	7885:  0xCDA1,
	7886:  0xCDA2,
	7887:  0xCDA3,
	7888:  0xCDA6,
	7889:  0xCDA8,
	7890:  0xCDAA,
	7891:  0xCDAB,
	7892:  0xCDAC,
	7893:  0xCDAD,
	7894:  0xCDAE,
	7895:  0xCDAF,
	7896:  0xCDB1,
	7897:  0xCDB2,
	7898:  0xCDB3,
	7899:  0xCDB4,
	7900:  0xCDB5,
	7901:  0xCDB6,
	7902:  0xCDB7,
	7903:  0xCDB8,
	7904:  0xCDB9,
	7905:  0xCDBA,
	7906:  0xCDBB,
	7907:  0xCDBC,
	7908:  0xCDBD,
	7909:  0xCDBE,
	7910:  0xCDBF,
	7911:  0xCDC0,
	7912:  0xCDC1,
	7913:  0xCDC2,
	7914:  0xCDC3,
	7915:  0xCDC5,
	8010:  0xCDC6,
	8011:  0xCDC7,
	8012:  0xCDC8,
	8013:  0xCDC9,
	8014:  0xCDCA,
	8015:  0xCDCB,
	8016:  0xCDCD,
	8017:  0xCDCE,
	8018:  0xCDCF,
	8019:  0xCDD1,
	8020:  0xCDD2,
	8021:  0xCDD3,
	8022:  0xCDD4,
	8023:  0xCDD5,
	8024:  0xCDD6,
	8025:  0xCDD7,
	8026:  0xCDD8,
	8027:  0xCDD9,
	8028:  0xCDDA,
	8029:  0xCDDB,
	8030:  0xCDDC,
	8031:  0xCDDD,
	8032:  0xCDDE,
	8033:  0xCDDF,
	8034:  0xCDE0,
	8035:  0xCDE1,
	8036:  0xCDE2,
	8037:  0xCDE3,
	8038:  0xCDE4,
	8039:  0xCDE5,
	8040:  0xCDE6,
	8041:  0xCDE7,
	8042:  0xCDE9,
	8043:  0xCDEA,
	8044:  0xCDEB,
	8045:  0xCDED,
	8046:  0xCDEE,
	8047:  0xCDEF,
	8048:  0xCDF1,
	8049:  0xCDF2,
	8050:  0xCDF3,
	8051:  0xCDF4,
	8052:  0xCDF5,
	8053:  0xCDF6,
	8054:  0xCDF7,
	8055:  0xCDFA,
	8056:  0xCDFC,
	8057:  0xCDFE,
	8058:  0xCDFF,
	8059:  0xCE00,
	8060:  0xCE01,
	8061:  0xCE02,
	8062:  0xCE03,
	8063:  0xCE05,
	8064:  0xCE06,
	8065:  0xCE07,
	8066:  0xCE09,
	8067:  0xCE0A,
	8068:  0xCE0B,
	8069:  0xCE0D,
	8070:  0xCE0E,
	8071:  0xCE0F,
	8072:  0xCE10,
	8073:  0xCE11,
	8074:  0xCE12,
	8075:  0xCE13,
	8076:  0xCE15,
	8077:  0xCE16,
	8078:  0xCE17,
	8079:  0xCE18,
	8080:  0xCE1A,
	8081:  0xCE1B,
	8082:  0xCE1C,
	8083:  0xCE1D,
	8084:  0xCE1E,
	8085:  0xCE1F,
	8086:  0xCE22,
	8087:  0xCE23,
	8088:  0xCE25,
	8089:  0xCE26,
	8090:  0xCE27,
	8091:  0xCE29,
	8092:  0xCE2A,
	8093:  0xCE2B,
	8188:  0xCE2C,
	8189:  0xCE2D,
	8190:  0xCE2E,
	8191:  0xCE2F,
	8192:  0xCE32,
	8193:  0xCE34,
	8194:  0xCE36,
	8195:  0xCE37,
	8196:  0xCE38,
	8197:  0xCE39,
	8198:  0xCE3A,
	8199:  0xCE3B,
	8200:  0xCE3C,
	8201:  0xCE3D,
	8202:  0xCE3E,
	8203:  0xCE3F,
	8204:  0xCE40,
	8205:  0xCE41,
	8206:  0xCE42,
	8207:  0xCE43,
	8208:  0xCE44,
	8209:  0xCE45,
	8210:  0xCE46,
	8211:  0xCE47,
	8212:  0xCE48,
	8213:  0xCE49,
	8214:  0xCE4A,
	8215:  0xCE4B,
	8216:  0xCE4C,
	8217:  0xCE4D,
	8218:  0xCE4E,
	8219:  0xCE4F,
	8220:  0xCE50,
	8221:  0xCE51,
	8222:  0xCE52,
	8223:  0xCE53,
	8224:  0xCE54,
	8225:  0xCE55,
	8226:  0xCE56,
	8227:  0xCE57,
	8228:  0xCE5A,
	8229:  0xCE5B,
	8230:  0xCE5D,
	8231:  0xCE5E,
	8232:  0xCE62,
	8233:  0xCE63,
	8234:  0xCE64,
	8235:  0xCE65,
	8236:  0xCE66,
	8237:  0xCE67,
	8238:  0xCE6A,
	8239:  0xCE6C,
	8240:  0xCE6E,
	8241:  0xCE6F,
	8242:  0xCE70,
	8243:  0xCE71,
	8244:  0xCE72,
	8245:  0xCE73,
	8246:  0xCE76,
	8247:  0xCE77,
	8248:  0xCE79,
	8249:  0xCE7A,
	8250:  0xCE7B,
	8251:  0xCE7D,
	8252:  0xCE7E,
	8253:  0xCE7F,
	8254:  0xCE80,
	8255:  0xCE81,
	8256:  0xCE82,
	8257:  0xCE83,
	8258:  0xCE86,
	8259:  0xCE88,
	8260:  0xCE8A,
	8261:  0xCE8B,
	8262:  0xCE8C,
	8263:  0xCE8D,
	8264:  0xCE8E,
	8265:  0xCE8F,
	8266:  0xCE92,
	8267:  0xCE93,
	8268:  0xCE95,
	8269:  0xCE96,
	8270:  0xCE97,
	8271:  0xCE99,
	8366:  0xCE9A,
	8367:  0xCE9B,
	8368:  0xCE9C,
	8369:  0xCE9D,
	8370:  0xCE9E,
	8371:  0xCE9F,
	8372:  0xCEA2,
	8373:  0xCEA6,
	8374:  0xCEA7,
	8375:  0xCEA8,
	8376:  0xCEA9,
	8377:  0xCEAA,
	8378:  0xCEAB,
	8379:  0xCEAE,
	8380:  0xCEAF,
	8381:  0xCEB0,
	8382:  0xCEB1,
	8383:  0xCEB2,
	8384:  0xCEB3,
	8385:  0xCEB4,
	8386:  0xCEB5,
	8387:  0xCEB6,
	8388:  0xCEB7,
	8389:  0xCEB8,
	8390:  0xCEB9,
	8391:  0xCEBA,
	8392:  0xCEBB,
	8393:  0xCEBC,
	8394:  0xCEBD,
	8395:  0xCEBE,
	8396:  0xCEBF,
	8397:  0xCEC0,
	8398:  0xCEC2,
	8399:  0xCEC3,
	8400:  0xCEC4,
	8401:  0xCEC5,
	8402:  0xCEC6,
	8403:  0xCEC7,
	8404:  0xCEC8,
	8405:  0xCEC9,
	8406:  0xCECA,
	8407:  0xCECB,
	8408:  0xCECC,
	8409:  0xCECD,
	8410:  0xCECE,
	8411:  0xCECF,
	8412:  0xCED0,
	8413:  0xCED1,
	8414:  0xCED2,
	8415:  0xCED3,
	8416:  0xCED4,
	8417:  0xCED5,
	8418:  0xCED6,
	8419:  0xCED7,
	8420:  0xCED8,
	8421:  0xCED9,
	8422:  0xCEDA,
	8423:  0xCEDB,
	8424:  0xCEDC,
	8425:  0xCEDD,
	8426:  0xCEDE,
	8427:  0xCEDF,
	8428:  0xCEE0,
	8429:  0xCEE1,
	8430:  0xCEE2,
	8431:  0xCEE3,
	8432:  0xCEE6,
	8433:  0xCEE7,
	8434:  0xCEE9,
	8435:  0xCEEA,
	8436:  0xCEED,
	8437:  0xCEEE,
	8438:  0xCEEF,
	8439:  0xCEF0,
	8440:  0xCEF1,
	8441:  0xCEF2,
	8442:  0xCEF3,
	8443:  0xCEF6,
	8444:  0xCEFA,
	8445:  0xCEFB,
	8446:  0xCEFC,
	8447:  0xCEFD,
	8448:  0xCEFE,
	8449:  0xCEFF,
	8450:  0xAC00,
	8451:  0xAC01,
	8452:  0xAC04,
	8453:  0xAC07,
	8454:  0xAC08,
	8455:  0xAC09,
	8456:  0xAC0A,
	8457:  0xAC10,
	8458:  0xAC11,
	8459:  0xAC12,
	8460:  0xAC13,
	8461:  0xAC14,
	8462:  0xAC15,
	8463:  0xAC16,
	8464:  0xAC17,
	8465:  0xAC19,
	8466:  0xAC1A,
	8467:  0xAC1B,
	8468:  0xAC1C,
	8469:  0xAC1D,
	8470:  0xAC20,
	8471:  0xAC24,
	8472:  0xAC2C,
	8473:  0xAC2D,
	8474:  0xAC2F,
	8475:  0xAC30,
	8476:  0xAC31,
	8477:  0xAC38,
	8478:  0xAC39,
	8479:  0xAC3C,
	8480:  0xAC40,
	8481:  0xAC4B,
	8482:  0xAC4D,
	8483:  0xAC54,
	8484:  0xAC58,
	8485:  0xAC5C,
	8486:  0xAC70,
	8487:  0xAC71,
	8488:  0xAC74,
	8489:  0xAC77,
	8490:  0xAC78,
	8491:  0xAC7A,
	8492:  0xAC80,
	8493:  0xAC81,
	8494:  0xAC83,
	8495:  0xAC84,
	8496:  0xAC85,
	8497:  0xAC86,
	8498:  0xAC89,
	8499:  0xAC8A,
	8500:  0xAC8B,
	8501:  0xAC8C,
	8502:  0xAC90,
	8503:  0xAC94,
	8504:  0xAC9C,
	8505:  0xAC9D,
	8506:  0xAC9F,
	8507:  0xACA0,
	8508:  0xACA1,
	8509:  0xACA8,
	8510:  0xACA9,
	8511:  0xACAA,
	8512:  0xACAC,
	8513:  0xACAF,
	8514:  0xACB0,
	8515:  0xACB8,
	8516:  0xACB9,
	8517:  0xACBB,
	8518:  0xACBC,
	8519:  0xACBD,
	8520:  0xACC1,
	8521:  0xACC4,
	8522:  0xACC8,
	8523:  0xACCC,
	8524:  0xACD5,
	8525:  0xACD7,
	8526:  0xACE0,
	8527:  0xACE1,
	8528:  0xACE4,
	8529:  0xACE7,
	8530:  0xACE8,
	8531:  0xACEA,
	8532:  0xACEC,
	8533:  0xACEF,
	8534:  0xACF0,
	8535:  0xACF1,
	8536:  0xACF3,
	8537:  0xACF5,
	8538:  0xACF6,
	8539:  0xACFC,
	8540:  0xACFD,
	8541:  0xAD00,
	8542:  0xAD04,
	8543:  0xAD06,
	8544:  0xCF02,
	8545:  0xCF03,
	8546:  0xCF05,
	8547:  0xCF06,
	8548:  0xCF07,
	8549:  0xCF09,
	8550:  0xCF0A,
	8551:  0xCF0B,
	8552:  0xCF0C,
	8553:  0xCF0D,
	8554:  0xCF0E,
	8555:  0xCF0F,
	8556:  0xCF12,
	8557:  0xCF14,
	8558:  0xCF16,
	8559:  0xCF17,
	8560:  0xCF18,
	8561:  0xCF19,
	8562:  0xCF1A,
	8563:  0xCF1B,
	8564:  0xCF1D,
	8565:  0xCF1E,
	8566:  0xCF1F,
	8567:  0xCF21,
	8568:  0xCF22,
	8569:  0xCF23,
	8570:  0xCF25,
	8571:  0xCF26,
	8572:  0xCF27,
	8573:  0xCF28,
	8574:  0xCF29,
	8575:  0xCF2A,
	8576:  0xCF2B,
	8577:  0xCF2E,
	8578:  0xCF32,
	8579:  0xCF33,
	8580:  0xCF34,
	8581:  0xCF35,
	8582:  0xCF36,
	8583:  0xCF37,
	8584:  0xCF39,
	8585:  0xCF3A,
	8586:  0xCF3B,
	8587:  0xCF3C,
	8588:  0xCF3D,
	8589:  0xCF3E,
	8590:  0xCF3F,
	8591:  0xCF40,
	8592:  0xCF41,
	8593:  0xCF42,
	8594:  0xCF43,
	8595:  0xCF44,
	8596:  0xCF45,
	8597:  0xCF46,
	8598:  0xCF47,
	8599:  0xCF48,
	8600:  0xCF49,
	8601:  0xCF4A,
	8602:  0xCF4B,
	8603:  0xCF4C,
	8604:  0xCF4D,
	8605:  0xCF4E,
	8606:  0xCF4F,
	8607:  0xCF50,
	8608:  0xCF51,
	8609:  0xCF52,
	8610:  0xCF53,
	8611:  0xCF56,
	8612:  0xCF57,
	8613:  0xCF59,
	8614:  0xCF5A,
	8615:  0xCF5B,
	8616:  0xCF5D,
	8617:  0xCF5E,
	8618:  0xCF5F,
	8619:  0xCF60,
	8620:  0xCF61,
	8621:  0xCF62,
	8622:  0xCF63,
	8623:  0xCF66,
	8624:  0xCF68,
	8625:  0xCF6A,
	8626:  0xCF6B,
	8627:  0xCF6C,
	8628:  0xAD0C,
	8629:  0xAD0D,
	8630:  0xAD0F,
	8631:  0xAD11,
	8632:  0xAD18,
	8633:  0xAD1C,
	8634:  0xAD20,
	8635:  0xAD29,
	8636:  0xAD2C,
	8637:  0xAD2D,
	8638:  0xAD34,
	8639:  0xAD35,
	8640:  0xAD38,
	8641:  0xAD3C,
	8642:  0xAD44,
	8643:  0xAD45,
	8644:  0xAD47,
	8645:  0xAD49,
	8646:  0xAD50,
	8647:  0xAD54,
	8648:  0xAD58,
	8649:  0xAD61,
	8650:  0xAD63,
	8651:  0xAD6C,
	8652:  0xAD6D,
	8653:  0xAD70,
	8654:  0xAD73,
	8655:  0xAD74,
	8656:  0xAD75,
	8657:  0xAD76,
	8658:  0xAD7B,
	8659:  0xAD7C,
	8660:  0xAD7D,
	8661:  0xAD7F,
	8662:  0xAD81,
	8663:  0xAD82,
	8664:  0xAD88,
	8665:  0xAD89,
	8666:  0xAD8C,
	8667:  0xAD90,
	8668:  0xAD9C,
	8669:  0xAD9D,
	8670:  0xADA4,
	8671:  0xADB7,
	8672:  0xADC0,
	8673:  0xADC1,
	8674:  0xADC4,
	8675:  0xADC8,
	8676:  0xADD0,
	8677:  0xADD1,
	8678:  0xADD3,
	8679:  0xADDC,
	8680:  0xADE0,
	8681:  0xADE4,
	8682:  0xADF8,
	8683:  0xADF9,
	8684:  0xADFC,
	8685:  0xADFF,
	8686:  0xAE00,
	8687:  0xAE01,
	8688:  0xAE08,
	8689:  0xAE09,
	8690:  0xAE0B,
	8691:  0xAE0D,
	8692:  0xAE14,
	8693:  0xAE30,
	8694:  0xAE31,
	8695:  0xAE34,
	8696:  0xAE37,
	8697:  0xAE38,
	8698:  0xAE3A,
	8699:  0xAE40,
	8700:  0xAE41,
	8701:  0xAE43,
	8702:  0xAE45,
	8703:  0xAE46,
	8704:  0xAE4A,
	8705:  0xAE4C,
	8706:  0xAE4D,
	8707:  0xAE4E,
	8708:  0xAE50,
	8709:  0xAE54,
	8710:  0xAE56,
	8711:  0xAE5C,
	8712:  0xAE5D,
	8713:  0xAE5F,
	8714:  0xAE60,
	8715:  0xAE61,
	8716:  0xAE65,
	8717:  0xAE68,
	8718:  0xAE69,
	8719:  0xAE6C,
	8720:  0xAE70,
	8721:  0xAE78,
	8722:  0xCF6D,
	8723:  0xCF6E,
	8724:  0xCF6F,
	8725:  0xCF72,
	8726:  0xCF73,
	8727:  0xCF75,
	8728:  0xCF76,
	8729:  0xCF77,
	8730:  0xCF79,
	8731:  0xCF7A,
	8732:  0xCF7B,
	8733:  0xCF7C,
	8734:  0xCF7D,
	8735:  0xCF7E,
	8736:  0xCF7F,
	8737:  0xCF81,
	8738:  0xCF82,
	8739:  0xCF83,
	8740:  0xCF84,
	8741:  0xCF86,
	8742:  0xCF87,
	8743:  0xCF88,
	8744:  0xCF89,
	8745:  0xCF8A,
	8746:  0xCF8B,
	8747:  0xCF8D,
	8748:  0xCF8E,
	8749:  0xCF8F,
	8750:  0xCF90,
	8751:  0xCF91,
	8752:  0xCF92,
	8753:  0xCF93,
	8754:  0xCF94,
	8755:  0xCF95,
	8756:  0xCF96,
	8757:  0xCF97,
	8758:  0xCF98,
	8759:  0xCF99,
	8760:  0xCF9A,
	8761:  0xCF9B,
	8762:  0xCF9C,
	8763:  0xCF9D,
	8764:  0xCF9E,
	8765:  0xCF9F,
	8766:  0xCFA0,
	8767:  0xCFA2,
	8768:  0xCFA3,
	8769:  0xCFA4,
	8770:  0xCFA5,
	8771:  0xCFA6,
	8772:  0xCFA7,
	8773:  0xCFA9,
	8774:  0xCFAA,
	8775:  0xCFAB,
	8776:  0xCFAC,
	8777:  0xCFAD,
	8778:  0xCFAE,
	8779:  0xCFAF,
	8780:  0xCFB1,
	8781:  0xCFB2,
	8782:  0xCFB3,
	8783:  0xCFB4,
	8784:  0xCFB5,
	8785:  0xCFB6,
	8786:  0xCFB7,
	8787:  0xCFB8,
	8788:  0xCFB9,
	8789:  0xCFBA,
	8790:  0xCFBB,
	8791:  0xCFBC,
	8792:  0xCFBD,
	8793:  0xCFBE,
	8794:  0xCFBF,
	8795:  0xCFC0,
	8796:  0xCFC1,
	8797:  0xCFC2,
	8798:  0xCFC3,
	8799:  0xCFC5,
	8800:  0xCFC6,
	8801:  0xCFC7,
	8802:  0xCFC8,
	8803:  0xCFC9,
	8804:  0xCFCA,
	8805:  0xCFCB,
	8806:  0xAE79,
	8807:  0xAE7B,
	8808:  0xAE7C,
	8809:  0xAE7D,
	8810:  0xAE84,
	8811:  0xAE85,
	8812:  0xAE8C,
	8813:  0xAEBC,
	8814:  0xAEBD,
	8815:  0xAEBE,
	8816:  0xAEC0,
	8817:  0xAEC4,
	8818:  0xAECC,
	8819:  0xAECD,
	8820:  0xAECF,
	8821:  0xAED0,
	8822:  0xAED1,
	8823:  0xAED8,
	8824:  0xAED9,
	8825:  0xAEDC,
	8826:  0xAEE8,
	8827:  0xAEEB,
	8828:  0xAEED,
	8829:  0xAEF4,
	8830:  0xAEF8,
	8831:  0xAEFC,
	8832:  0xAF07,
	8833:  0xAF08,
	8834:  0xAF0D,
	8835:  0xAF10,
	8836:  0xAF2C,
	8837:  0xAF2D,
	8838:  0xAF30,
	8839:  0xAF32,
	8840:  0xAF34,
	8841:  0xAF3C,
	8842:  0xAF3D,
	8843:  0xAF3F,
	8844:  0xAF41,
	8845:  0xAF42,
	8846:  0xAF43,
	8847:  0xAF48,
	8848:  0xAF49,
	8849:  0xAF50,
	8850:  0xAF5C,
	8851:  0xAF5D,
	8852:  0xAF64,
	8853:  0xAF65,
	8854:  0xAF79,
	8855:  0xAF80,
	8856:  0xAF84,
	8857:  0xAF88,
	8858:  0xAF90,
	8859:  0xAF91,
	8860:  0xAF95,
	8861:  0xAF9C,
	8862:  0xAFB8,
	8863:  0xAFB9,
	8864:  0xAFBC,
	8865:  0xAFC0,
	8866:  0xAFC7,
	8867:  0xAFC8,
	8868:  0xAFC9,
	8869:  0xAFCB,
	8870:  0xAFCD,
	8871:  0xAFCE,
	8872:  0xAFD4,
	8873:  0xAFDC,
	8874:  0xAFE8,
	8875:  0xAFE9,
	8876:  0xAFF0,
	8877:  0xAFF1,
	8878:  0xAFF4,
	8879:  0xAFF8,
	8880:  0xB000,
	8881:  0xB001,
	8882:  0xB004,
	8883:  0xB00C,
	8884:  0xB010,
	8885:  0xB014,
	8886:  0xB01C,
	8887:  0xB01D,
	8888:  0xB028,
	8889:  0xB044,
	8890:  0xB045,
	8891:  0xB048,
	8892:  0xB04A,
	8893:  0xB04C,
	8894:  0xB04E,
	8895:  0xB053,
	8896:  0xB054,
	8897:  0xB055,
	8898:  0xB057,
	8899:  0xB059,
	8900:  0xCFCC,
	8901:  0xCFCD,
	8902:  0xCFCE,
	8903:  0xCFCF,
	8904:  0xCFD0,
	8905:  0xCFD1,
	8906:  0xCFD2,
	8907:  0xCFD3,
	8908:  0xCFD4,
	8909:  0xCFD5,
	8910:  0xCFD6,
	8911:  0xCFD7,
	8912:  0xCFD8,
	8913:  0xCFD9,
	8914:  0xCFDA,
	8915:  0xCFDB,
	8916:  0xCFDC,
	8917:  0xCFDD,
	8918:  0xCFDE,
	8919:  0xCFDF,
	8920:  0xCFE2,
	8921:  0xCFE3,
	8922:  0xCFE5,
	8923:  0xCFE6,
	8924:  0xCFE7,
	8925:  0xCFE9,
	8926:  0xCFEA,
	8927:  0xCFEB,
	8928:  0xCFEC,
	8929:  0xCFED,
	8930:  0xCFEE,
	8931:  0xCFEF,
	8932:  0xCFF2,
	8933:  0xCFF4,
	8934:  0xCFF6,
	8935:  0xCFF7,
	8936:  0xCFF8,
	8937:  0xCFF9,
	8938:  0xCFFA,
	8939:  0xCFFB,
	8940:  0xCFFD,
	8941:  0xCFFE,
	8942:  0xCFFF,
	8943:  0xD001,
	8944:  0xD002,
	8945:  0xD003,
	8946:  0xD005,
	8947:  0xD006,
	8948:  0xD007,
	8949:  0xD008,
	8950:  0xD009,
	8951:  0xD00A,
	8952:  0xD00B,
	8953:  0xD00C,
	8954:  0xD00D,
	8955:  0xD00E,
	8956:  0xD00F,
	8957:  0xD010,
	8958:  0xD012,
	8959:  0xD013,
	8960:  0xD014,
	8961:  0xD015,
	8962:  0xD016,
	8963:  0xD017,
	8964:  0xD019,
	8965:  0xD01A,
	8966:  0xD01B,
	8967:  0xD01C,
	8968:  0xD01D,
	8969:  0xD01E,
	8970:  0xD01F,
	8971:  0xD020,
	8972:  0xD021,
	8973:  0xD022,
	8974:  0xD023,
	8975:  0xD024,
	8976:  0xD025,
	8977:  0xD026,
	8978:  0xD027,
	8979:  0xD028,
	8980:  0xD029,
	8981:  0xD02A,
	8982:  0xD02B,
	8983:  0xD02C,
	8984:  0xB05D,
	8985:  0xB07C,
	8986:  0xB07D,
	8987:  0xB080,
	8988:  0xB084,
	8989:  0xB08C,
	8990:  0xB08D,
	8991:  0xB08F,
	8992:  0xB091,
	8993:  0xB098,
	8994:  0xB099,
	8995:  0xB09A,
	8996:  0xB09C,
	8997:  0xB09F,
	8998:  0xB0A0,
	8999:  0xB0A1,
	9000:  0xB0A2,
	9001:  0xB0A8,
	9002:  0xB0A9,
	9003:  0xB0AB,
	9004:  0xB0AC,
	9005:  0xB0AD,
	9006:  0xB0AE,
	9007:  0xB0AF,
	9008:  0xB0B1,
	9009:  0xB0B3,
	9010:  0xB0B4,
	9011:  0xB0B5,
	9012:  0xB0B8,
	9013:  0xB0BC,
	9014:  0xB0C4,
	9015:  0xB0C5,
	9016:  0xB0C7,
	9017:  0xB0C8,
	9018:  0xB0C9,
	9019:  0xB0D0,
	9020:  0xB0D1,
	9021:  0xB0D4,
	9022:  0xB0D8,
	9023:  0xB0E0,
	9024:  0xB0E5,
	9025:  0xB108,
	9026:  0xB109,
	9027:  0xB10B,
	9028:  0xB10C,
	9029:  0xB110,
	9030:  0xB112,
	9031:  0xB113,
	9032:  0xB118,
	9033:  0xB119,
	9034:  0xB11B,
	9035:  0xB11C,
	9036:  0xB11D,
	9037:  0xB123,
	9038:  0xB124,
	9039:  0xB125,
	9040:  0xB128,
	9041:  0xB12C,
	9042:  0xB134,
	9043:  0xB135,
	9044:  0xB137,
	9045:  0xB138,
	9046:  0xB139,
	9047:  0xB140,
	9048:  0xB141,
	9049:  0xB144,
	9050:  0xB148,
	9051:  0xB150,
	9052:  0xB151,
	9053:  0xB154,
	9054:  0xB155,
	9055:  0xB158,
	9056:  0xB15C,
	9057:  0xB160,
	9058:  0xB178,
	9059:  0xB179,
	9060:  0xB17C,
	9061:  0xB180,
	9062:  0xB182,
	9063:  0xB188,
	9064:  0xB189,
	9065:  0xB18B,
	9066:  0xB18D,
	9067:  0xB192,
	9068:  0xB193,
	9069:  0xB194,
	9070:  0xB198,
	9071:  0xB19C,
	9072:  0xB1A8,
	9073:  0xB1CC,
	9074:  0xB1D0,
	9075:  0xB1D4,
	9076:  0xB1DC,
	9077:  0xB1DD,
	9078:  0xD02E,
	9079:  0xD02F,
	9080:  0xD030,
	9081:  0xD031,
	9082:  0xD032,
	9083:  0xD033,
	9084:  0xD036,
	9085:  0xD037,
	9086:  0xD039,
	9087:  0xD03A,
	9088:  0xD03B,
	9089:  0xD03D,
	9090:  0xD03E,
	9091:  0xD03F,
	9092:  0xD040,
	9093:  0xD041,
	9094:  0xD042,
	9095:  0xD043,
	9096:  0xD046,
	9097:  0xD048,
	9098:  0xD04A,
	9099:  0xD04B,
	9100:  0xD04C,
	9101:  0xD04D,
	9102:  0xD04E,
	9103:  0xD04F,
	9104:  0xD051,
	9105:  0xD052,
	9106:  0xD053,
	9107:  0xD055,
	9108:  0xD056,
	9109:  0xD057,
	9110:  0xD059,
	9111:  0xD05A,
	9112:  0xD05B,
	9113:  0xD05C,
	9114:  0xD05D,
	9115:  0xD05E,
	9116:  0xD05F,
	9117:  0xD061,
	9118:  0xD062,
	9119:  0xD063,
	9120:  0xD064,
	9121:  0xD065,
	9122:  0xD066,
	9123:  0xD067,
	9124:  0xD068,
	9125:  0xD069,
	9126:  0xD06A,
	9127:  0xD06B,
	9128:  0xD06E,
	9129:  0xD06F,
	9130:  0xD071,
	9131:  0xD072,
	9132:  0xD073,
	9133:  0xD075,
	9134:  0xD076,
	9135:  0xD077,
	9136:  0xD078,
	9137:  0xD079,
	9138:  0xD07A,
	9139:  0xD07B,
	9140:  0xD07E,
	9141:  0xD07F,
	9142:  0xD080,
	9143:  0xD082,
	9144:  0xD083,
	9145:  0xD084,
	9146:  0xD085,
	9147:  0xD086,
	9148:  0xD087,
	9149:  0xD088,
	9150:  0xD089,
	9151:  0xD08A,
	9152:  0xD08B,
	9153:  0xD08C,
	9154:  0xD08D,
	9155:  0xD08E,
	9156:  0xD08F,
	9157:  0xD090,
	9158:  0xD091,
	9159:  0xD092,
	9160:  0xD093,
	9161:  0xD094,
	9162:  0xB1DF,
	9163:  0xB1E8,
	9164:  0xB1E9,
	9165:  0xB1EC,
	9166:  0xB1F0,
	9167:  0xB1F9,
	9168:  0xB1FB,
	9169:  0xB1FD,
	9170:  0xB204,
	9171:  0xB205,
	9172:  0xB208,
	9173:  0xB20B,
	9174:  0xB20C,
	9175:  0xB214,
	9176:  0xB215,
	9177:  0xB217,
	9178:  0xB219,
	9179:  0xB220,
	9180:  0xB234,
	9181:  0xB23C,
	9182:  0xB258,
	9183:  0xB25C,
	9184:  0xB260,
	9185:  0xB268,
	9186:  0xB269,
	9187:  0xB274,
	9188:  0xB275,
	9189:  0xB27C,
	9190:  0xB284,
	9191:  0xB285,
	9192:  0xB289,
	9193:  0xB290,
	9194:  0xB291,
	9195:  0xB294,
	9196:  0xB298,
	9197:  0xB299,
	9198:  0xB29A,
	9199:  0xB2A0,
	9200:  0xB2A1,
	9201:  0xB2A3,
	9202:  0xB2A5,
	9203:  0xB2A6,
	9204:  0xB2AA,
	9205:  0xB2AC,
	9206:  0xB2B0,
	9207:  0xB2B4,
	9208:  0xB2C8,
	9209:  0xB2C9,
	9210:  0xB2CC,
	9211:  0xB2D0,
	9212:  0xB2D2,
	9213:  0xB2D8,
	9214:  0xB2D9,
	9215:  0xB2DB,
	9216:  0xB2DD,
	9217:  0xB2E2,
	9218:  0xB2E4,
	9219:  0xB2E5,
	9220:  0xB2E6,
	9221:  0xB2E8,
	9222:  0xB2EB,
	9223:  0xB2EC,
	9224:  0xB2ED,
	9225:  0xB2EE,
	9226:  0xB2EF,
	9227:  0xB2F3,
	9228:  0xB2F4,
	9229:  0xB2F5,
	9230:  0xB2F7,
	9231:  0xB2F8,
	9232:  0xB2F9,
	9233:  0xB2FA,
	9234:  0xB2FB,
	9235:  0xB2FF,
	9236:  0xB300,
	9237:  0xB301,
	9238:  0xB304,
	9239:  0xB308,
	9240:  0xB310,
	9241:  0xB311,
	9242:  0xB313,
	9243:  0xB314,
	9244:  0xB315,
	9245:  0xB31C,
	9246:  0xB354,
	9247:  0xB355,
	9248:  0xB356,
	9249:  0xB358,
	9250:  0xB35B,
	9251:  0xB35C,
	9252:  0xB35E,
	9253:  0xB35F,
	9254:  0xB364,
	9255:  0xB365,
	9256:  0xD095,
	9257:  0xD096,
	9258:  0xD097,
	9259:  0xD098,
	9260:  0xD099,
	9261:  0xD09A,
	9262:  0xD09B,
	9263:  0xD09C,
	9264:  0xD09D,
	9265:  0xD09E,
	9266:  0xD09F,
	9267:  0xD0A0,
	9268:  0xD0A1,
	9269:  0xD0A2,
	9270:  0xD0A3,
	9271:  0xD0A6,
	9272:  0xD0A7,
	9273:  0xD0A9,
	9274:  0xD0AA,
	9275:  0xD0AB,
	9276:  0xD0AD,
	9277:  0xD0AE,
	9278:  0xD0AF,
	9279:  0xD0B0,
	9280:  0xD0B1,
	9281:  0xD0B2,
	9282:  0xD0B3,
	9283:  0xD0B6,
	9284:  0xD0B8,
	9285:  0xD0BA,
	9286:  0xD0BB,
	9287:  0xD0BC,
	9288:  0xD0BD,
	9289:  0xD0BE,
	9290:  0xD0BF,
	9291:  0xD0C2,
	9292:  0xD0C3,
	9293:  0xD0C5,
	9294:  0xD0C6,
	9295:  0xD0C7,
	9296:  0xD0CA,
	9297:  0xD0CB,
	9298:  0xD0CC,
	9299:  0xD0CD,
	9300:  0xD0CE,
	9301:  0xD0CF,
	9302:  0xD0D2,
	9303:  0xD0D6,
	9304:  0xD0D7,
	9305:  0xD0D8,
	9306:  0xD0D9,
	9307:  0xD0DA,
	9308:  0xD0DB,
	9309:  0xD0DE,
	9310:  0xD0DF,
	9311:  0xD0E1,
	9312:  0xD0E2,
	9313:  0xD0E3,
	9314:  0xD0E5,
	9315:  0xD0E6,
	9316:  0xD0E7,
	9317:  0xD0E8,
	9318:  0xD0E9,
	9319:  0xD0EA,
	9320:  0xD0EB,
	9321:  0xD0EE,
	9322:  0xD0F2,
	9323:  0xD0F3,
	9324:  0xD0F4,
	9325:  0xD0F5,
	9326:  0xD0F6,
	9327:  0xD0F7,
	9328:  0xD0F9,
	9329:  0xD0FA,
	9330:  0xD0FB,
	9331:  0xD0FC,
	9332:  0xD0FD,
	9333:  0xD0FE,
	9334:  0xD0FF,
	9335:  0xD100,
	9336:  0xD101,
	9337:  0xD102,
	9338:  0xD103,
	9339:  0xD104,
	9340:  0xB367,
	9341:  0xB369,
	9342:  0xB36B,
	9343:  0xB36E,
	9344:  0xB370,
	9345:  0xB371,
	9346:  0xB374,
	9347:  0xB378,
	9348:  0xB380,
	9349:  0xB381,
	9350:  0xB383,
	9351:  0xB384,
	9352:  0xB385,
	9353:  0xB38C,
	9354:  0xB390,
	9355:  0xB394,
	9356:  0xB3A0,
	9357:  0xB3A1,
	9358:  0xB3A8,
	9359:  0xB3AC,
	9360:  0xB3C4,
	9361:  0xB3C5,
	9362:  0xB3C8,
	9363:  0xB3CB,
	9364:  0xB3CC,
	9365:  0xB3CE,
	9366:  0xB3D0,
	9367:  0xB3D4,
	9368:  0xB3D5,
	9369:  0xB3D7,
	9370:  0xB3D9,
	9371:  0xB3DB,
	9372:  0xB3DD,
	9373:  0xB3E0,
	9374:  0xB3E4,
	9375:  0xB3E8,
	9376:  0xB3FC,
	9377:  0xB410,
	9378:  0xB418,
	9379:  0xB41C,
	9380:  0xB420,
	9381:  0xB428,
	9382:  0xB429,
	9383:  0xB42B,
	9384:  0xB434,
	9385:  0xB450,
	9386:  0xB451,
	9387:  0xB454,
	9388:  0xB458,
	9389:  0xB460,
	9390:  0xB461,
	9391:  0xB463,
	9392:  0xB465,
	9393:  0xB46C,
	9394:  0xB480,
	9395:  0xB488,
	9396:  0xB49D,
	9397:  0xB4A4,
	9398:  0xB4A8,
	9399:  0xB4AC,
	9400:  0xB4B5,
	9401:  0xB4B7,
	9402:  0xB4B9,
	9403:  0xB4C0,
	9404:  0xB4C4,
	9405:  0xB4C8,
	9406:  0xB4D0,
	9407:  0xB4D5,
	9408:  0xB4DC,
	9409:  0xB4DD,
	9410:  0xB4E0,
	9411:  0xB4E3,
	9412:  0xB4E4,
	9413:  0xB4E6,
	9414:  0xB4EC,
	9415:  0xB4ED,
	9416:  0xB4EF,
	9417:  0xB4F1,
	9418:  0xB4F8,
	9419:  0xB514,
	9420:  0xB515,
	9421:  0xB518,
	9422:  0xB51B,
	9423:  0xB51C,
	9424:  0xB524,
	9425:  0xB525,
	9426:  0xB527,
	9427:  0xB528,
	9428:  0xB529,
	9429:  0xB52A,
	9430:  0xB530,
	9431:  0xB531,
	9432:  0xB534,
	9433:  0xB538,
	9434:  0xD105,
	9435:  0xD106,
	9436:  0xD107,
	9437:  0xD108,
	9438:  0xD109,
	9439:  0xD10A,
	9440:  0xD10B,
	9441:  0xD10C,
	9442:  0xD10E,
	9443:  0xD10F,
	9444:  0xD110,
	9445:  0xD111,
	9446:  0xD112,
	9447:  0xD113,
	9448:  0xD114,
	9449:  0xD115,
	9450:  0xD116,
	9451:  0xD117,
	9452:  0xD118,
	9453:  0xD119,
	9454:  0xD11A,
	9455:  0xD11B,
	9456:  0xD11C,
	9457:  0xD11D,
	9458:  0xD11E,
	9459:  0xD11F,
	9460:  0xD120,
	9461:  0xD121,
	9462:  0xD122,
	9463:  0xD123,
	9464:  0xD124,
	9465:  0xD125,
	9466:  0xD126,
	9467:  0xD127,
	9468:  0xD128,
	9469:  0xD129,
	9470:  0xD12A,
	9471:  0xD12B,
	9472:  0xD12C,
	9473:  0xD12D,
	9474:  0xD12E,
	9475:  0xD12F,
	9476:  0xD132,
	9477:  0xD133,
	9478:  0xD135,
	9479:  0xD136,
	9480:  0xD137,
	9481:  0xD139,
	9482:  0xD13B,
	9483:  0xD13C,
	9484:  0xD13D,
	9485:  0xD13E,
	9486:  0xD13F,
	9487:  0xD142,
	9488:  0xD146,
	9489:  0xD147,
	9490:  0xD148,
	9491:  0xD149,
	9492:  0xD14A,
	9493:  0xD14B,
	9494:  0xD14E,
	9495:  0xD14F,
	9496:  0xD151,
	9497:  0xD152,
	9498:  0xD153,
	9499:  0xD155,
	9500:  0xD156,
	9501:  0xD157,
	9502:  0xD158,
	9503:  0xD159,
	9504:  0xD15A,
	9505:  0xD15B,
	9506:  0xD15E,
	9507:  0xD160,
	9508:  0xD162,
	9509:  0xD163,
	9510:  0xD164,
	9511:  0xD165,
	9512:  0xD166,
	9513:  0xD167,
	9514:  0xD169,
	9515:  0xD16A,
	9516:  0xD16B,
	9517:  0xD16D,
	9518:  0xB540,
	9519:  0xB541,
	9520:  0xB543,
	9521:  0xB544,
	9522:  0xB545,
	9523:  0xB54B,
	9524:  0xB54C,
	9525:  0xB54D,
	9526:  0xB550,
	9527:  0xB554,
	9528:  0xB55C,
	9529:  0xB55D,
	9530:  0xB55F,
	9531:  0xB560,
	9532:  0xB561,
	9533:  0xB5A0,
	9534:  0xB5A1,
	9535:  0xB5A4,
	9536:  0xB5A8,
	9537:  0xB5AA,
	9538:  0xB5AB,
	9539:  0xB5B0,
	9540:  0xB5B1,
	9541:  0xB5B3,
	9542:  0xB5B4,
	9543:  0xB5B5,
	9544:  0xB5BB,
	9545:  0xB5BC,
	9546:  0xB5BD,
	9547:  0xB5C0,
	9548:  0xB5C4,
	9549:  0xB5CC,
	9550:  0xB5CD,
	9551:  0xB5CF,
	9552:  0xB5D0,
	9553:  0xB5D1,
	9554:  0xB5D8,
	9555:  0xB5EC,
	9556:  0xB610,
	9557:  0xB611,
	9558:  0xB614,
	9559:  0xB618,
	9560:  0xB625,
	9561:  0xB62C,
	9562:  0xB634,
	9563:  0xB648,
	9564:  0xB664,
	9565:  0xB668,
	9566:  0xB69C,
	9567:  0xB69D,
	9568:  0xB6A0,
	9569:  0xB6A4,
	9570:  0xB6AB,
	9571:  0xB6AC,
	9572:  0xB6B1,
	9573:  0xB6D4,
	9574:  0xB6F0,
	9575:  0xB6F4,
	9576:  0xB6F8,
	9577:  0xB700,
	9578:  0xB701,
	9579:  0xB705,
	9580:  0xB728,
	9581:  0xB729,
	9582:  0xB72C,
	9583:  0xB72F,
	9584:  0xB730,
	9585:  0xB738,
	9586:  0xB739,
	9587:  0xB73B,
	9588:  0xB744,
	9589:  0xB748,
	9590:  0xB74C,
	9591:  0xB754,
	9592:  0xB755,
	9593:  0xB760,
	9594:  0xB764,
	9595:  0xB768,
	9596:  0xB770,
	9597:  0xB771,
	9598:  0xB773,
	9599:  0xB775,
	9600:  0xB77C,
	9601:  0xB77D,
	9602:  0xB780,
	9603:  0xB784,
	9604:  0xB78C,
	9605:  0xB78D,
	9606:  0xB78F,
	9607:  0xB790,
	9608:  0xB791,
	9609:  0xB792,
	9610:  0xB796,
	9611:  0xB797,
	9612:  0xD16E,
	9613:  0xD16F,
	9614:  0xD170,
	9615:  0xD171,
	9616:  0xD172,
	9617:  0xD173,
	9618:  0xD174,
	9619:  0xD175,
	9620:  0xD176,
	9621:  0xD177,
	9622:  0xD178,
	9623:  0xD179,
	9624:  0xD17A,
	9625:  0xD17B,
	9626:  0xD17D,
	9627:  0xD17E,
	9628:  0xD17F,
	9629:  0xD180,
	9630:  0xD181,
	9631:  0xD182,
	9632:  0xD183,
	9633:  0xD185,
	9634:  0xD186,
	9635:  0xD187,
	9636:  0xD189,
	9637:  0xD18A,
	9638:  0xD18B,
	9639:  0xD18C,
	9640:  0xD18D,
	9641:  0xD18E,
	9642:  0xD18F,
	9643:  0xD190,
	9644:  0xD191,
	9645:  0xD192,
	9646:  0xD193,
	9647:  0xD194,
	9648:  0xD195,
	9649:  0xD196,
	9650:  0xD197,
	9651:  0xD198,
	9652:  0xD199,
	9653:  0xD19A,
	9654:  0xD19B,
	9655:  0xD19C,
	9656:  0xD19D,
	9657:  0xD19E,
	9658:  0xD19F,
	9659:  0xD1A2,
	9660:  0xD1A3,
	9661:  0xD1A5,
	9662:  0xD1A6,
	9663:  0xD1A7,
	9664:  0xD1A9,
	9665:  0xD1AA,
	9666:  0xD1AB,
	9667:  0xD1AC,
	9668:  0xD1AD,
	9669:  0xD1AE,
	9670:  0xD1AF,
	9671:  0xD1B2,
	9672:  0xD1B4,
	9673:  0xD1B6,
	9674:  0xD1B7,
	9675:  0xD1B8,
	9676:  0xD1B9,
	9677:  0xD1BB,
	9678:  0xD1BD,
	9679:  0xD1BE,
	9680:  0xD1BF,
	9681:  0xD1C1,
	9682:  0xD1C2,
	9683:  0xD1C3,
	9684:  0xD1C4,
	9685:  0xD1C5,
	9686:  0xD1C6,
	9687:  0xD1C7,
	9688:  0xD1C8,
	9689:  0xD1C9,
	9690:  0xD1CA,
	9691:  0xD1CB,
	9692:  0xD1CC,
	9693:  0xD1CD,
	9694:  0xD1CE,
	9695:  0xD1CF,
	9696:  0xB798,
	9697:  0xB799,
	9698:  0xB79C,
	9699:  0xB7A0,
	9700:  0xB7A8,
	9701:  0xB7A9,
	9702:  0xB7AB,
	9703:  0xB7AC,
	9704:  0xB7AD,
	9705:  0xB7B4,
	9706:  0xB7B5,
	9707:  0xB7B8,
	9708:  0xB7C7,
	9709:  0xB7C9,
	9710:  0xB7EC,
	9711:  0xB7ED,
	9712:  0xB7F0,
	9713:  0xB7F4,
	9714:  0xB7FC,
	9715:  0xB7FD,
	9716:  0xB7FF,
	9717:  0xB800,
	9718:  0xB801,
	9719:  0xB807,
	9720:  0xB808,
	9721:  0xB809,
	9722:  0xB80C,
	9723:  0xB810,
	9724:  0xB818,
	9725:  0xB819,
	9726:  0xB81B,
	9727:  0xB81D,
	9728:  0xB824,
	9729:  0xB825,
	9730:  0xB828,
	9731:  0xB82C,
	9732:  0xB834,
	9733:  0xB835,
	9734:  0xB837,
	9735:  0xB838,
	9736:  0xB839,
	9737:  0xB840,
	9738:  0xB844,
	9739:  0xB851,
	9740:  0xB853,
	9741:  0xB85C,
	9742:  0xB85D,
	9743:  0xB860,
	9744:  0xB864,
	9745:  0xB86C,
	9746:  0xB86D,
	9747:  0xB86F,
	9748:  0xB871,
	9749:  0xB878,
	9750:  0xB87C,
	9751:  0xB88D,
	9752:  0xB8A8,
	9753:  0xB8B0,
	9754:  0xB8B4,
	9755:  0xB8B8,
	9756:  0xB8C0,
	9757:  0xB8C1,
	9758:  0xB8C3,
	9759:  0xB8C5,
	9760:  0xB8CC,
	9761:  0xB8D0,
	9762:  0xB8D4,
	9763:  0xB8DD,
	9764:  0xB8DF,
	9765:  0xB8E1,
	9766:  0xB8E8,
	9767:  0xB8E9,
	9768:  0xB8EC,
	9769:  0xB8F0,
	9770:  0xB8F8,
	9771:  0xB8F9,
	9772:  0xB8FB,
	9773:  0xB8FD,
	9774:  0xB904,
	9775:  0xB918,
	9776:  0xB920,
	9777:  0xB93C,
	9778:  0xB93D,
	9779:  0xB940,
	9780:  0xB944,
	9781:  0xB94C,
	9782:  0xB94F,
	9783:  0xB951,
	9784:  0xB958,
	9785:  0xB959,
	9786:  0xB95C,
	9787:  0xB960,
	9788:  0xB968,
	9789:  0xB969,
	9790:  0xD1D0,
	9791:  0xD1D1,
	9792:  0xD1D2,
	9793:  0xD1D3,
	9794:  0xD1D4,
	9795:  0xD1D5,
	9796:  0xD1D6,
	9797:  0xD1D7,
	9798:  0xD1D9,
	9799:  0xD1DA,
	9800:  0xD1DB,
	9801:  0xD1DC,
	9802:  0xD1DD,
	9803:  0xD1DE,
	9804:  0xD1DF,
	9805:  0xD1E0,
	9806:  0xD1E1,
	9807:  0xD1E2,
	9808:  0xD1E3,
	9809:  0xD1E4,
	9810:  0xD1E5,
	9811:  0xD1E6,
	9812:  0xD1E7,
	9813:  0xD1E8,
	9814:  0xD1E9,
	9815:  0xD1EA,
	9816:  0xD1EB,
	9817:  0xD1EC,
	9818:  0xD1ED,
	9819:  0xD1EE,
	9820:  0xD1EF,
	9821:  0xD1F0,
	9822:  0xD1F1,
	9823:  0xD1F2,
	9824:  0xD1F3,
	9825:  0xD1F5,
	9826:  0xD1F6,
	9827:  0xD1F7,
	9828:  0xD1F9,
	9829:  0xD1FA,
	9830:  0xD1FB,
	9831:  0xD1FC,
	9832:  0xD1FD,
	9833:  0xD1FE,
	9834:  0xD1FF,
	9835:  0xD200,
	9836:  0xD201,
	9837:  0xD202,
	9838:  0xD203,
	9839:  0xD204,
	9840:  0xD205,
	9841:  0xD206,
	9842:  0xD208,
	9843:  0xD20A,
	9844:  0xD20B,
	9845:  0xD20C,
	9846:  0xD20D,
	9847:  0xD20E,
	9848:  0xD20F,
	9849:  0xD211,
	9850:  0xD212,
	9851:  0xD213,
	9852:  0xD214,
	9853:  0xD215,
	9854:  0xD216,
	9855:  0xD217,
	9856:  0xD218,
	9857:  0xD219,
	9858:  0xD21A,
	9859:  0xD21B,
	9860:  0xD21C,
	9861:  0xD21D,
	9862:  0xD21E,
	9863:  0xD21F,
	9864:  0xD220,
	9865:  0xD221,
	9866:  0xD222,
	9867:  0xD223,
	9868:  0xD224,
	9869:  0xD225,
	9870:  0xD226,
	9871:  0xD227,
	9872:  0xD228,
	9873:  0xD229,
	9874:  0xB96B,
	9875:  0xB96D,
	9876:  0xB974,
	9877:  0xB975,
	9878:  0xB978,
	9879:  0xB97C,
	9880:  0xB984,
	9881:  0xB985,
	9882:  0xB987,
	9883:  0xB989,
	9884:  0xB98A,
	9885:  0xB98D,
	9886:  0xB98E,
	9887:  0xB9AC,
	9888:  0xB9AD,
	9889:  0xB9B0,
	9890:  0xB9B4,
	9891:  0xB9BC,
	9892:  0xB9BD,
	9893:  0xB9BF,
	9894:  0xB9C1,
	9895:  0xB9C8,
	9896:  0xB9C9,
	9897:  0xB9CC,
	9898:  0xB9CE,
	9899:  0xB9CF,
	9900:  0xB9D0,
	9901:  0xB9D1,
	9902:  0xB9D2,
	9903:  0xB9D8,
	9904:  0xB9D9,
	9905:  0xB9DB,
	9906:  0xB9DD,
	9907:  0xB9DE,
	9908:  0xB9E1,
	9909:  0xB9E3,
	9910:  0xB9E4,
	9911:  0xB9E5,
	9912:  0xB9E8,
	9913:  0xB9EC,
	9914:  0xB9F4,
	9915:  0xB9F5,
	9916:  0xB9F7,
	9917:  0xB9F8,
	9918:  0xB9F9,
	9919:  0xB9FA,
	9920:  0xBA00,
	9921:  0xBA01,
	9922:  0xBA08,
	9923:  0xBA15,
	9924:  0xBA38,
	9925:  0xBA39,
	9926:  0xBA3C,
	9927:  0xBA40,
	9928:  0xBA42,
	9929:  0xBA48,
	9930:  0xBA49,
	9931:  0xBA4B,
	9932:  0xBA4D,
	9933:  0xBA4E,
	9934:  0xBA53,
	9935:  0xBA54,
	9936:  0xBA55,
	9937:  0xBA58,
	9938:  0xBA5C,
	9939:  0xBA64,
	9940:  0xBA65,
	9941:  0xBA67,
	9942:  0xBA68,
	9943:  0xBA69,
	9944:  0xBA70,
	9945:  0xBA71,
	9946:  0xBA74,
	9947:  0xBA78,
	9948:  0xBA83,
	9949:  0xBA84,
	9950:  0xBA85,
	9951:  0xBA87,
	9952:  0xBA8C,
	9953:  0xBAA8,
	9954:  0xBAA9,
	9955:  0xBAAB,
	9956:  0xBAAC,
	9957:  0xBAB0,
	9958:  0xBAB2,
	9959:  0xBAB8,
	9960:  0xBAB9,
	9961:  0xBABB,
	9962:  0xBABD,
	9963:  0xBAC4,
	9964:  0xBAC8,
	9965:  0xBAD8,
	9966:  0xBAD9,
	9967:  0xBAFC,
	9968:  0xD22A,
	9969:  0xD22B,
	9970:  0xD22E,
	9971:  0xD22F,
	9972:  0xD231,
	9973:  0xD232,
	9974:  0xD233,
	9975:  0xD235,
	9976:  0xD236,
	9977:  0xD237,
	9978:  0xD238,
	9979:  0xD239,
	9980:  0xD23A,
	9981:  0xD23B,
	9982:  0xD23E,
	9983:  0xD240,
	9984:  0xD242,
	9985:  0xD243,
	9986:  0xD244,
	9987:  0xD245,
	9988:  0xD246,
	9989:  0xD247,
	9990:  0xD249,
	9991:  0xD24A,
	9992:  0xD24B,
	9993:  0xD24C,
	9994:  0xD24D,
	9995:  0xD24E,
	9996:  0xD24F,
	9997:  0xD250,
	9998:  0xD251,
	9999:  0xD252,
	10000: 0xD253,
	10001: 0xD254,
	10002: 0xD255,
	10003: 0xD256,
	10004: 0xD257,
	10005: 0xD258,
	10006: 0xD259,
	10007: 0xD25A,
	10008: 0xD25B,
	10009: 0xD25D,
	10010: 0xD25E,
	10011: 0xD25F,
	10012: 0xD260,
	10013: 0xD261,
	10014: 0xD262,
	10015: 0xD263,
	10016: 0xD265,
	10017: 0xD266,
	10018: 0xD267,
	10019: 0xD268,
	10020: 0xD269,
	10021: 0xD26A,
	10022: 0xD26B,
	10023: 0xD26C,
	10024: 0xD26D,
	10025: 0xD26E,
	10026: 0xD26F,
	10027: 0xD270,
	10028: 0xD271,
	10029: 0xD272,
	10030: 0xD273,
	10031: 0xD274,
	10032: 0xD275,
	10033: 0xD276,
	10034: 0xD277,
	10035: 0xD278,
	10036: 0xD279,
	10037: 0xD27A,
	10038: 0xD27B,
	10039: 0xD27C,
	10040: 0xD27D,
	10041: 0xD27E,
	10042: 0xD27F,
	10043: 0xD282,
	10044: 0xD283,
	10045: 0xD285,
	10046: 0xD286,
	10047: 0xD287,
	10048: 0xD289,
	10049: 0xD28A,
	10050: 0xD28B,
	10051: 0xD28C,
	10052: 0xBB00,
	10053: 0xBB04,
	10054: 0xBB0D,
	10055: 0xBB0F,
	10056: 0xBB11,
	10057: 0xBB18,
	10058: 0xBB1C,
	10059: 0xBB20,
	10060: 0xBB29,
	10061: 0xBB2B,
	10062: 0xBB34,
	10063: 0xBB35,
	10064: 0xBB36,
	10065: 0xBB38,
	10066: 0xBB3B,
	10067: 0xBB3C,
	10068: 0xBB3D,
	10069: 0xBB3E,
	10070: 0xBB44,
	10071: 0xBB45,
	10072: 0xBB47,
	10073: 0xBB49,
	10074: 0xBB4D,
	10075: 0xBB4F,
	10076: 0xBB50,
	10077: 0xBB54,
	10078: 0xBB58,
	10079: 0xBB61,
	10080: 0xBB63,
	10081: 0xBB6C,
	10082: 0xBB88,
	10083: 0xBB8C,
	10084: 0xBB90,
	10085: 0xBBA4,
	10086: 0xBBA8,
	10087: 0xBBAC,
	10088: 0xBBB4,
	10089: 0xBBB7,
	10090: 0xBBC0,
	10091: 0xBBC4,
	10092: 0xBBC8,
	10093: 0xBBD0,
	10094: 0xBBD3,
	10095: 0xBBF8,
	10096: 0xBBF9,
	10097: 0xBBFC,
	10098: 0xBBFF,
	10099: 0xBC00,
	10100: 0xBC02,
	10101: 0xBC08,
	10102: 0xBC09,
	10103: 0xBC0B,
	10104: 0xBC0C,
	10105: 0xBC0D,
	10106: 0xBC0F,
	10107: 0xBC11,
	10108: 0xBC14,
	10109: 0xBC15,
	10110: 0xBC16,
	10111: 0xBC17,
	10112: 0xBC18,
	10113: 0xBC1B,
	10114: 0xBC1C,
	10115: 0xBC1D,
	10116: 0xBC1E,
	10117: 0xBC1F,
	10118: 0xBC24,
	10119: 0xBC25,
	10120: 0xBC27,
	10121: 0xBC29,
	10122: 0xBC2D,
	10123: 0xBC30,
	10124: 0xBC31,
	10125: 0xBC34,
	10126: 0xBC38,
	10127: 0xBC40,
	10128: 0xBC41,
	10129: 0xBC43,
	10130: 0xBC44,
	10131: 0xBC45,
	10132: 0xBC49,
	10133: 0xBC4C,
	10134: 0xBC4D,
	10135: 0xBC50,
	10136: 0xBC5D,
	10137: 0xBC84,
	10138: 0xBC85,
	10139: 0xBC88,
	10140: 0xBC8B,
	10141: 0xBC8C,
	10142: 0xBC8E,
	10143: 0xBC94,
	10144: 0xBC95,
	10145: 0xBC97,
	10146: 0xD28D,
	10147: 0xD28E,
	10148: 0xD28F,
	10149: 0xD292,
	10150: 0xD293,
	10151: 0xD294,
	10152: 0xD296,
	10153: 0xD297,
	10154: 0xD298,
	10155: 0xD299,
	10156: 0xD29A,
	10157: 0xD29B,
	10158: 0xD29D,
	10159: 0xD29E,
	10160: 0xD29F,
	10161: 0xD2A1,
	10162: 0xD2A2,
	10163: 0xD2A3,
	10164: 0xD2A5,
	10165: 0xD2A6,
	10166: 0xD2A7,
	10167: 0xD2A8,
	10168: 0xD2A9,
	10169: 0xD2AA,
	10170: 0xD2AB,
	10171: 0xD2AD,
	10172: 0xD2AE,
	10173: 0xD2AF,
	10174: 0xD2B0,
	10175: 0xD2B2,
	10176: 0xD2B3,
	10177: 0xD2B4,
	10178: 0xD2B5,
	10179: 0xD2B6,
	10180: 0xD2B7,
	10181: 0xD2BA,
	10182: 0xD2BB,
	10183: 0xD2BD,
	10184: 0xD2BE,
	10185: 0xD2C1,
	10186: 0xD2C3,
	10187: 0xD2C4,
	10188: 0xD2C5,
	10189: 0xD2C6,
	10190: 0xD2C7,
	10191: 0xD2CA,
	10192: 0xD2CC,
	10193: 0xD2CD,
	10194: 0xD2CE,
	10195: 0xD2CF,
	10196: 0xD2D0,
	10197: 0xD2D1,
	10198: 0xD2D2,
	10199: 0xD2D3,
	10200: 0xD2D5,
	10201: 0xD2D6,
	10202: 0xD2D7,
	10203: 0xD2D9,
	10204: 0xD2DA,
	10205: 0xD2DB,
	10206: 0xD2DD,
	10207: 0xD2DE,
	10208: 0xD2DF,
	10209: 0xD2E0,
	10210: 0xD2E1,
	10211: 0xD2E2,
	10212: 0xD2E3,
	10213: 0xD2E6,
	10214: 0xD2E7,
	10215: 0xD2E8,
	10216: 0xD2E9,
	10217: 0xD2EA,
	10218: 0xD2EB,
	10219: 0xD2EC,
	10220: 0xD2ED,
	10221: 0xD2EE,
	10222: 0xD2EF,
	10223: 0xD2F2,
	10224: 0xD2F3,
	10225: 0xD2F5,
	10226: 0xD2F6,
	10227: 0xD2F7,
	10228: 0xD2F9,
	10229: 0xD2FA,
	10230: 0xBC99,
	10231: 0xBC9A,
	10232: 0xBCA0,
	10233: 0xBCA1,
	10234: 0xBCA4,
	10235: 0xBCA7,
	10236: 0xBCA8,
	10237: 0xBCB0,
	10238: 0xBCB1,
	10239: 0xBCB3,
	10240: 0xBCB4,
	10241: 0xBCB5,
	10242: 0xBCBC,
	10243: 0xBCBD,
	10244: 0xBCC0,
	10245: 0xBCC4,
	10246: 0xBCCD,
	10247: 0xBCCF,
	10248: 0xBCD0,
	10249: 0xBCD1,
	10250: 0xBCD5,
	10251: 0xBCD8,
	10252: 0xBCDC,
	10253: 0xBCF4,
	10254: 0xBCF5,
	10255: 0xBCF6,
	10256: 0xBCF8,
	10257: 0xBCFC,
	10258: 0xBD04,
	10259: 0xBD05,
	10260: 0xBD07,
	10261: 0xBD09,
	10262: 0xBD10,
	10263: 0xBD14,
	10264: 0xBD24,
	10265: 0xBD2C,
	10266: 0xBD40,
	10267: 0xBD48,
	10268: 0xBD49,
	10269: 0xBD4C,
	10270: 0xBD50,
	10271: 0xBD58,
	10272: 0xBD59,
	10273: 0xBD64,
	10274: 0xBD68,
	10275: 0xBD80,
	10276: 0xBD81,
	10277: 0xBD84,
	10278: 0xBD87,
	10279: 0xBD88,
	10280: 0xBD89,
	10281: 0xBD8A,
	10282: 0xBD90,
	10283: 0xBD91,
	10284: 0xBD93,
	10285: 0xBD95,
	10286: 0xBD99,
	10287: 0xBD9A,
	10288: 0xBD9C,
	10289: 0xBDA4,
	10290: 0xBDB0,
	10291: 0xBDB8,
	10292: 0xBDD4,
	10293: 0xBDD5,
	10294: 0xBDD8,
	10295: 0xBDDC,
	10296: 0xBDE9,
	10297: 0xBDF0,
	10298: 0xBDF4,
	10299: 0xBDF8,
	10300: 0xBE00,
	10301: 0xBE03,
	10302: 0xBE05,
	10303: 0xBE0C,
	10304: 0xBE0D,
	10305: 0xBE10,
	10306: 0xBE14,
	10307: 0xBE1C,
	10308: 0xBE1D,
	10309: 0xBE1F,
	10310: 0xBE44,
	10311: 0xBE45,
	10312: 0xBE48,
	10313: 0xBE4C,
	10314: 0xBE4E,
	10315: 0xBE54,
	10316: 0xBE55,
	10317: 0xBE57,
	10318: 0xBE59,
	10319: 0xBE5A,
	10320: 0xBE5B,
	10321: 0xBE60,
	10322: 0xBE61,
	10323: 0xBE64,
	10324: 0xD2FB,
	10325: 0xD2FC,
	10326: 0xD2FD,
	10327: 0xD2FE,
	10328: 0xD2FF,
	10329: 0xD302,
	10330: 0xD304,
	10331: 0xD306,
	10332: 0xD307,
	10333: 0xD308,
	10334: 0xD309,
	10335: 0xD30A,
	10336: 0xD30B,
	10337: 0xD30F,
	10338: 0xD311,
	10339: 0xD312,
	10340: 0xD313,
	10341: 0xD315,
	10342: 0xD317,
	10343: 0xD318,
	10344: 0xD319,
	10345: 0xD31A,
	10346: 0xD31B,
	10347: 0xD31E,
	10348: 0xD322,
	10349: 0xD323,
	10350: 0xD324,
	10351: 0xD326,
	10352: 0xD327,
	10353: 0xD32A,
	10354: 0xD32B,
	10355: 0xD32D,
	10356: 0xD32E,
	10357: 0xD32F,
	10358: 0xD331,
	10359: 0xD332,
	10360: 0xD333,
	10361: 0xD334,
	10362: 0xD335,
	10363: 0xD336,
	10364: 0xD337,
	10365: 0xD33A,
	10366: 0xD33E,
	10367: 0xD33F,
	10368: 0xD340,
	10369: 0xD341,
	10370: 0xD342,
	10371: 0xD343,
	10372: 0xD346,
	10373: 0xD347,
	10374: 0xD348,
	10375: 0xD349,
	10376: 0xD34A,
	10377: 0xD34B,
	10378: 0xD34C,
	10379: 0xD34D,
	10380: 0xD34E,
	10381: 0xD34F,
	10382: 0xD350,
	10383: 0xD351,
	10384: 0xD352,
	10385: 0xD353,
	10386: 0xD354,
	10387: 0xD355,
	10388: 0xD356,
	10389: 0xD357,
	10390: 0xD358,
	10391: 0xD359,
	10392: 0xD35A,
	10393: 0xD35B,
	10394: 0xD35C,
	10395: 0xD35D,
	10396: 0xD35E,
	10397: 0xD35F,
	10398: 0xD360,
	10399: 0xD361,
	10400: 0xD362,
	10401: 0xD363,
	10402: 0xD364,
	10403: 0xD365,
	10404: 0xD366,
	10405: 0xD367,
	10406: 0xD368,
	10407: 0xD369,
	10408: 0xBE68,
	10409: 0xBE6A,
	10410: 0xBE70,
	10411: 0xBE71,
	10412: 0xBE73,
	10413: 0xBE74,
	10414: 0xBE75,
	10415: 0xBE7B,
	10416: 0xBE7C,
	10417: 0xBE7D,
	10418: 0xBE80,
	10419: 0xBE84,
	10420: 0xBE8C,
	10421: 0xBE8D,
	10422: 0xBE8F,
	10423: 0xBE90,
	10424: 0xBE91,
	10425: 0xBE98,
	10426: 0xBE99,
	10427: 0xBEA8,
	10428: 0xBED0,
	10429: 0xBED1,
	10430: 0xBED4,
	10431: 0xBED7,
	10432: 0xBED8,
	10433: 0xBEE0,
	10434: 0xBEE3,
	10435: 0xBEE4,
	10436: 0xBEE5,
	10437: 0xBEEC,
	10438: 0xBF01,
	10439: 0xBF08,
	10440: 0xBF09,
	10441: 0xBF18,
	10442: 0xBF19,
	10443: 0xBF1B,
	10444: 0xBF1C,
	10445: 0xBF1D,
	10446: 0xBF40,
	10447: 0xBF41,
	10448: 0xBF44,
	10449: 0xBF48,
	10450: 0xBF50,
	10451: 0xBF51,
	10452: 0xBF55,
	10453: 0xBF94,
	10454: 0xBFB0,
	10455: 0xBFC5,
	10456: 0xBFCC,
	10457: 0xBFCD,
	10458: 0xBFD0,
	10459: 0xBFD4,
	10460: 0xBFDC,
	10461: 0xBFDF,
	10462: 0xBFE1,
	10463: 0xC03C,
	10464: 0xC051,
	10465: 0xC058,
	10466: 0xC05C,
	10467: 0xC060,
	10468: 0xC068,
	10469: 0xC069,
	10470: 0xC090,
	10471: 0xC091,
	10472: 0xC094,
	10473: 0xC098,
	10474: 0xC0A0,
	10475: 0xC0A1,
	10476: 0xC0A3,
	10477: 0xC0A5,
	10478: 0xC0AC,
	10479: 0xC0AD,
	10480: 0xC0AF,
	10481: 0xC0B0,
	10482: 0xC0B3,
	10483: 0xC0B4,
	10484: 0xC0B5,
	10485: 0xC0B6,
	10486: 0xC0BC,
	10487: 0xC0BD,
	10488: 0xC0BF,
	10489: 0xC0C0,
	10490: 0xC0C1,
	10491: 0xC0C5,
	10492: 0xC0C8,
	10493: 0xC0C9,
	10494: 0xC0CC,
	10495: 0xC0D0,
	10496: 0xC0D8,
	10497: 0xC0D9,
	10498: 0xC0DB,
	10499: 0xC0DC,
	10500: 0xC0DD,
	10501: 0xC0E4,
	10502: 0xD36A,
	10503: 0xD36B,
	10504: 0xD36C,
	10505: 0xD36D,
	10506: 0xD36E,
	10507: 0xD36F,
	10508: 0xD370,
	10509: 0xD371,
	10510: 0xD372,
	10511: 0xD373,
	10512: 0xD374,
	10513: 0xD375,
	10514: 0xD376,
	10515: 0xD377,
	10516: 0xD378,
	10517: 0xD379,
	10518: 0xD37A,
	10519: 0xD37B,
	10520: 0xD37E,
	10521: 0xD37F,
	10522: 0xD381,
	10523: 0xD382,
	10524: 0xD383,
	10525: 0xD385,
	10526: 0xD386,
	10527: 0xD387,
	10528: 0xD388,
	10529: 0xD389,
	10530: 0xD38A,
	10531: 0xD38B,
	10532: 0xD38E,
	10533: 0xD392,
	10534: 0xD393,
	10535: 0xD394,
	10536: 0xD395,
	10537: 0xD396,
	10538: 0xD397,
	10539: 0xD39A,
	10540: 0xD39B,
	10541: 0xD39D,
	10542: 0xD39E,
	10543: 0xD39F,
	10544: 0xD3A1,
	10545: 0xD3A2,
	10546: 0xD3A3,
	10547: 0xD3A4,
	10548: 0xD3A5,
	10549: 0xD3A6,
	10550: 0xD3A7,
	10551: 0xD3AA,
	10552: 0xD3AC,
	10553: 0xD3AE,
	10554: 0xD3AF,
	10555: 0xD3B0,
	10556: 0xD3B1,
	10557: 0xD3B2,
	10558: 0xD3B3,
	10559: 0xD3B5,
	10560: 0xD3B6,
	10561: 0xD3B7,
	10562: 0xD3B9,
	10563: 0xD3BA,
	10564: 0xD3BB,
	10565: 0xD3BD,
	10566: 0xD3BE,
	10567: 0xD3BF,
	10568: 0xD3C0,
	10569: 0xD3C1,
	10570: 0xD3C2,
	10571: 0xD3C3,
	10572: 0xD3C6,
	10573: 0xD3C7,
	10574: 0xD3CA,
	10575: 0xD3CB,
	10576: 0xD3CC,
	10577: 0xD3CD,
	10578: 0xD3CE,
	10579: 0xD3CF,
	10580: 0xD3D1,
	10581: 0xD3D2,
	10582: 0xD3D3,
	10583: 0xD3D4,
	10584: 0xD3D5,
	10585: 0xD3D6,
	10586: 0xC0E5,
	10587: 0xC0E8,
	10588: 0xC0EC,
	10589: 0xC0F4,
	10590: 0xC0F5,
	10591: 0xC0F7,
	10592: 0xC0F9,
	10593: 0xC100,
	10594: 0xC104,
	10595: 0xC108,
	10596: 0xC110,
	10597: 0xC115,
	10598: 0xC11C,
	10599: 0xC11D,
	10600: 0xC11E,
	10601: 0xC11F,
	10602: 0xC120,
	10603: 0xC123,
	10604: 0xC124,
	10605: 0xC126,
	10606: 0xC127,
	10607: 0xC12C,
	10608: 0xC12D,
	10609: 0xC12F,
	10610: 0xC130,
	10611: 0xC131,
	10612: 0xC136,
	10613: 0xC138,
	10614: 0xC139,
	10615: 0xC13C,
	10616: 0xC140,
	10617: 0xC148,
	10618: 0xC149,
	10619: 0xC14B,
	10620: 0xC14C,
	10621: 0xC14D,
	10622: 0xC154,
	10623: 0xC155,
	10624: 0xC158,
	10625: 0xC15C,
	10626: 0xC164,
	10627: 0xC165,
	10628: 0xC167,
	10629: 0xC168,
	10630: 0xC169,
	10631: 0xC170,
	10632: 0xC174,
	10633: 0xC178,
	10634: 0xC185,
	10635: 0xC18C,
	10636: 0xC18D,
	10637: 0xC18E,
	10638: 0xC190,
	10639: 0xC194,
	10640: 0xC196,
	10641: 0xC19C,
	10642: 0xC19D,
	10643: 0xC19F,
	10644: 0xC1A1,
	10645: 0xC1A5,
	10646: 0xC1A8,
	10647: 0xC1A9,
	10648: 0xC1AC,
	10649: 0xC1B0,
	10650: 0xC1BD,
	10651: 0xC1C4,
	10652: 0xC1C8,
	10653: 0xC1CC,
	10654: 0xC1D4,
	10655: 0xC1D7,
	10656: 0xC1D8,
	10657: 0xC1E0,
	10658: 0xC1E4,
	10659: 0xC1E8,
	10660: 0xC1F0,
	10661: 0xC1F1,
	10662: 0xC1F3,
	10663: 0xC1FC,
	10664: 0xC1FD,
	10665: 0xC200,
	10666: 0xC204,
	10667: 0xC20C,
	10668: 0xC20D,
	10669: 0xC20F,
	10670: 0xC211,
	10671: 0xC218,
	10672: 0xC219,
	10673: 0xC21C,
	10674: 0xC21F,
	10675: 0xC220,
	10676: 0xC228,
	10677: 0xC229,
	10678: 0xC22B,
	10679: 0xC22D,
	10680: 0xD3D7,
	10681: 0xD3D9,
	10682: 0xD3DA,
	10683: 0xD3DB,
	10684: 0xD3DC,
	10685: 0xD3DD,
	10686: 0xD3DE,
	10687: 0xD3DF,
	10688: 0xD3E0,
	10689: 0xD3E2,
	10690: 0xD3E4,
	10691: 0xD3E5,
	10692: 0xD3E6,
	10693: 0xD3E7,
	10694: 0xD3E8,
	10695: 0xD3E9,
	10696: 0xD3EA,
	10697: 0xD3EB,
	10698: 0xD3EE,
	10699: 0xD3EF,
	10700: 0xD3F1,
	10701: 0xD3F2,
	10702: 0xD3F3,
	10703: 0xD3F5,
	10704: 0xD3F6,
	10705: 0xD3F7,
	10706: 0xD3F8,
	10707: 0xD3F9,
	10708: 0xD3FA,
	10709: 0xD3FB,
	10710: 0xD3FE,
	10711: 0xD400,
	10712: 0xD402,
	10713: 0xD403,
	10714: 0xD404,
	10715: 0xD405,
	10716: 0xD406,
	10717: 0xD407,
	10718: 0xD409,
	10719: 0xD40A,
	10720: 0xD40B,
	10721: 0xD40C,
	10722: 0xD40D,
	10723: 0xD40E,
	10724: 0xD40F,
	10725: 0xD410,
	10726: 0xD411,
	10727: 0xD412,
	10728: 0xD413,
	10729: 0xD414,
	10730: 0xD415,
	10731: 0xD416,
	10732: 0xD417,
	10733: 0xD418,
	10734: 0xD419,
	10735: 0xD41A,
	10736: 0xD41B,
	10737: 0xD41C,
	10738: 0xD41E,
	10739: 0xD41F,
	10740: 0xD420,
	10741: 0xD421,
	10742: 0xD422,
	10743: 0xD423,
	10744: 0xD424,
	10745: 0xD425,
	10746: 0xD426,
	10747: 0xD427,
	10748: 0xD428,
	10749: 0xD429,
	10750: 0xD42A,
	10751: 0xD42B,
	10752: 0xD42C,
	10753: 0xD42D,
	10754: 0xD42E,
	10755: 0xD42F,
	10756: 0xD430,
	10757: 0xD431,
	10758: 0xD432,
	10759: 0xD433,
	10760: 0xD434,
	10761: 0xD435,
	10762: 0xD436,
	10763: 0xD437,
	10764: 0xC22F,
	10765: 0xC231,
	10766: 0xC232,
	10767: 0xC234,
	10768: 0xC248,
	10769: 0xC250,
	10770: 0xC251,
	10771: 0xC254,
	10772: 0xC258,
	10773: 0xC260,
	10774: 0xC265,
	10775: 0xC26C,
	10776: 0xC26D,
	10777: 0xC270,
	10778: 0xC274,
	10779: 0xC27C,
	10780: 0xC27D,
	10781: 0xC27F,
	10782: 0xC281,
	10783: 0xC288,
	10784: 0xC289,
	10785: 0xC290,
	10786: 0xC298,
	10787: 0xC29B,
	10788: 0xC29D,
	10789: 0xC2A4,
	10790: 0xC2A5,
	10791: 0xC2A8,
	10792: 0xC2AC,
	10793: 0xC2AD,
	10794: 0xC2B4,
	10795: 0xC2B5,
	10796: 0xC2B7,
	10797: 0xC2B9,
	10798: 0xC2DC,
	10799: 0xC2DD,
	10800: 0xC2E0,
	10801: 0xC2E3,
	10802: 0xC2E4,
	10803: 0xC2EB,
	10804: 0xC2EC,
	10805: 0xC2ED,
	10806: 0xC2EF,
	10807: 0xC2F1,
	10808: 0xC2F6,
	10809: 0xC2F8,
	10810: 0xC2F9,
	10811: 0xC2FB,
	10812: 0xC2FC,
	10813: 0xC300,
	10814: 0xC308,
	10815: 0xC309,
	10816: 0xC30C,
	10817: 0xC30D,
	10818: 0xC313,
	10819: 0xC314,
	10820: 0xC315,
	10821: 0xC318,
	10822: 0xC31C,
	10823: 0xC324,
	10824: 0xC325,
	10825: 0xC328,
	10826: 0xC329,
	10827: 0xC345,
	10828: 0xC368,
	10829: 0xC369,
	10830: 0xC36C,
	10831: 0xC370,
	10832: 0xC372,
	10833: 0xC378,
	10834: 0xC379,
	10835: 0xC37C,
	10836: 0xC37D,
	10837: 0xC384,
	10838: 0xC388,
	10839: 0xC38C,
	10840: 0xC3C0,
	10841: 0xC3D8,
	10842: 0xC3D9,
	10843: 0xC3DC,
	10844: 0xC3DF,
	10845: 0xC3E0,
	10846: 0xC3E2,
	10847: 0xC3E8,
	10848: 0xC3E9,
	10849: 0xC3ED,
	10850: 0xC3F4,
	10851: 0xC3F5,
	10852: 0xC3F8,
	10853: 0xC408,
	10854: 0xC410,
	10855: 0xC424,
	10856: 0xC42C,
	10857: 0xC430,
	10858: 0xD438,
	10859: 0xD439,
	10860: 0xD43A,
	10861: 0xD43B,
	10862: 0xD43C,
	10863: 0xD43D,
	10864: 0xD43E,
	10865: 0xD43F,
	10866: 0xD441,
	10867: 0xD442,
	10868: 0xD443,
	10869: 0xD445,
	10870: 0xD446,
	10871: 0xD447,
	10872: 0xD448,
	10873: 0xD449,
	10874: 0xD44A,
	10875: 0xD44B,
	10876: 0xD44C,
	10877: 0xD44D,
	10878: 0xD44E,
	10879: 0xD44F,
	10880: 0xD450,
	10881: 0xD451,
	10882: 0xD452,
	10883: 0xD453,
	10884: 0xD454,
	10885: 0xD455,
	10886: 0xD456,
	10887: 0xD457,
	10888: 0xD458,
	10889: 0xD459,
	10890: 0xD45A,
	10891: 0xD45B,
	10892: 0xD45D,
	10893: 0xD45E,
	10894: 0xD45F,
	10895: 0xD461,
	10896: 0xD462,
	10897: 0xD463,
	10898: 0xD465,
	10899: 0xD466,
	10900: 0xD467,
	10901: 0xD468,
	10902: 0xD469,
	10903: 0xD46A,
	10904: 0xD46B,
	10905: 0xD46C,
	10906: 0xD46E,
	10907: 0xD470,
	10908: 0xD471,
	10909: 0xD472,
	10910: 0xD473,
	10911: 0xD474,
	10912: 0xD475,
	10913: 0xD476,
	10914: 0xD477,
	10915: 0xD47A,
	10916: 0xD47B,
	10917: 0xD47D,
	10918: 0xD47E,
	10919: 0xD481,
	10920: 0xD483,
	10921: 0xD484,
	10922: 0xD485,
	10923: 0xD486,
	10924: 0xD487,
	10925: 0xD48A,
	10926: 0xD48C,
	10927: 0xD48E,
	10928: 0xD48F,
	10929: 0xD490,
	10930: 0xD491,
	10931: 0xD492,
	10932: 0xD493,
	10933: 0xD495,
	10934: 0xD496,
	10935: 0xD497,
	10936: 0xD498,
	10937: 0xD499,
	10938: 0xD49A,
	10939: 0xD49B,
	10940: 0xD49C,
	10941: 0xD49D,
	10942: 0xC434,
	10943: 0xC43C,
	10944: 0xC43D,
	10945: 0xC448,
	10946: 0xC464,
	10947: 0xC465,
	10948: 0xC468,
	10949: 0xC46C,
	10950: 0xC474,
	10951: 0xC475,
	10952: 0xC479,
	10953: 0xC480,
	10954: 0xC494,
	10955: 0xC49C,
	10956: 0xC4B8,
	10957: 0xC4BC,
	10958: 0xC4E9,
	10959: 0xC4F0,
	10960: 0xC4F1,
	10961: 0xC4F4,
	10962: 0xC4F8,
	10963: 0xC4FA,
	10964: 0xC4FF,
	10965: 0xC500,
	10966: 0xC501,
	10967: 0xC50C,
	10968: 0xC510,
	10969: 0xC514,
	10970: 0xC51C,
	10971: 0xC528,
	10972: 0xC529,
	10973: 0xC52C,
	10974: 0xC530,
	10975: 0xC538,
	10976: 0xC539,
	10977: 0xC53B,
	10978: 0xC53D,
	10979: 0xC544,
	10980: 0xC545,
	10981: 0xC548,
	10982: 0xC549,
	10983: 0xC54A,
	10984: 0xC54C,
	10985: 0xC54D,
	10986: 0xC54E,
	10987: 0xC553,
	10988: 0xC554,
	10989: 0xC555,
	10990: 0xC557,
	10991: 0xC558,
	10992: 0xC559,
	10993: 0xC55D,
	10994: 0xC55E,
	10995: 0xC560,
	10996: 0xC561,
	10997: 0xC564,
	10998: 0xC568,
	10999: 0xC570,
	11000: 0xC571,
	11001: 0xC573,
	11002: 0xC574,
	11003: 0xC575,
	11004: 0xC57C,
	11005: 0xC57D,
	11006: 0xC580,
	11007: 0xC584,
	11008: 0xC587,
	11009: 0xC58C,
	11010: 0xC58D,
	11011: 0xC58F,
	11012: 0xC591,
	11013: 0xC595,
	11014: 0xC597,
	11015: 0xC598,
	11016: 0xC59C,
	11017: 0xC5A0,
	11018: 0xC5A9,
	11019: 0xC5B4,
	11020: 0xC5B5,
	11021: 0xC5B8,
	11022: 0xC5B9,
	11023: 0xC5BB,
	11024: 0xC5BC,
	11025: 0xC5BD,
	11026: 0xC5BE,
	11027: 0xC5C4,
	11028: 0xC5C5,
	11029: 0xC5C6,
	11030: 0xC5C7,
	11031: 0xC5C8,
	11032: 0xC5C9,
	11033: 0xC5CA,
	11034: 0xC5CC,
	11035: 0xC5CE,
	11036: 0xD49E,
	11037: 0xD49F,
	11038: 0xD4A0,
	11039: 0xD4A1,
	11040: 0xD4A2,
	11041: 0xD4A3,
	11042: 0xD4A4,
	11043: 0xD4A5,
	11044: 0xD4A6,
	11045: 0xD4A7,
	11046: 0xD4A8,
	11047: 0xD4AA,
	11048: 0xD4AB,
	11049: 0xD4AC,
	11050: 0xD4AD,
	11051: 0xD4AE,
	11052: 0xD4AF,
	11053: 0xD4B0,
	11054: 0xD4B1,
	11055: 0xD4B2,
	11056: 0xD4B3,
	11057: 0xD4B4,
	11058: 0xD4B5,
	11059: 0xD4B6,
	11060: 0xD4B7,
	11061: 0xD4B8,
	11062: 0xD4B9,
	11063: 0xD4BA,
	11064: 0xD4BB,
	11065: 0xD4BC,
	11066: 0xD4BD,
	11067: 0xD4BE,
	11068: 0xD4BF,
	11069: 0xD4C0,
	11070: 0xD4C1,
	11071: 0xD4C2,
	11072: 0xD4C3,
	11073: 0xD4C4,
	11074: 0xD4C5,
	11075: 0xD4C6,
	11076: 0xD4C7,
	11077: 0xD4C8,
	11078: 0xD4C9,
	11079: 0xD4CA,
	11080: 0xD4CB,
	11081: 0xD4CD,
	11082: 0xD4CE,
	11083: 0xD4CF,
	11084: 0xD4D1,
	11085: 0xD4D2,
	11086: 0xD4D3,
	11087: 0xD4D5,
	11088: 0xD4D6,
	11089: 0xD4D7,
	11090: 0xD4D8,
	11091: 0xD4D9,
	11092: 0xD4DA,
	11093: 0xD4DB,
	11094: 0xD4DD,
	11095: 0xD4DE,
	11096: 0xD4E0,
	11097: 0xD4E1,
	11098: 0xD4E2,
	11099: 0xD4E3,
	11100: 0xD4E4,
	11101: 0xD4E5,
	11102: 0xD4E6,
	11103: 0xD4E7,
	11104: 0xD4E9,
	11105: 0xD4EA,
	11106: 0xD4EB,
	11107: 0xD4ED,
	11108: 0xD4EE,
	11109: 0xD4EF,
	11110: 0xD4F1,
	11111: 0xD4F2,
	11112: 0xD4F3,
	11113: 0xD4F4,
	11114: 0xD4F5,
	11115: 0xD4F6,
	11116: 0xD4F7,
	11117: 0xD4F9,
	11118: 0xD4FA,
	11119: 0xD4FC,
	11120: 0xC5D0,
	11121: 0xC5D1,
	11122: 0xC5D4,
	11123: 0xC5D8,
	11124: 0xC5E0,
	11125: 0xC5E1,
	11126: 0xC5E3,
	11127: 0xC5E5,
	11128: 0xC5EC,
	11129: 0xC5ED,
	11130: 0xC5EE,
	11131: 0xC5F0,
	11132: 0xC5F4,
	11133: 0xC5F6,
	11134: 0xC5F7,
	11135: 0xC5FC,
	11136: 0xC5FD,
	11137: 0xC5FE,
	11138: 0xC5FF,
	11139: 0xC600,
	11140: 0xC601,
	11141: 0xC605,
	11142: 0xC606,
	11143: 0xC607,
	11144: 0xC608,
	11145: 0xC60C,
	11146: 0xC610,
	11147: 0xC618,
	11148: 0xC619,
	11149: 0xC61B,
	11150: 0xC61C,
	11151: 0xC624,
	11152: 0xC625,
	11153: 0xC628,
	11154: 0xC62C,
	11155: 0xC62D,
	11156: 0xC62E,
	11157: 0xC630,
	11158: 0xC633,
	11159: 0xC634,
	11160: 0xC635,
	11161: 0xC637,
	11162: 0xC639,
	11163: 0xC63B,
	11164: 0xC640,
	11165: 0xC641,
	11166: 0xC644,
	11167: 0xC648,
	11168: 0xC650,
	11169: 0xC651,
	11170: 0xC653,
	11171: 0xC654,
	11172: 0xC655,
	11173: 0xC65C,
	11174: 0xC65D,
	11175: 0xC660,
	11176: 0xC66C,
	11177: 0xC66F,
	11178: 0xC671,
	11179: 0xC678,
	11180: 0xC679,
	11181: 0xC67C,
	11182: 0xC680,
	11183: 0xC688,
	11184: 0xC689,
	11185: 0xC68B,
	11186: 0xC68D,
	11187: 0xC694,
	11188: 0xC695,
	11189: 0xC698,
	11190: 0xC69C,
	11191: 0xC6A4,
	11192: 0xC6A5,
	11193: 0xC6A7,
	11194: 0xC6A9,
	11195: 0xC6B0,
	11196: 0xC6B1,
	11197: 0xC6B4,
	11198: 0xC6B8,
	11199: 0xC6B9,
	11200: 0xC6BA,
	11201: 0xC6C0,
	11202: 0xC6C1,
	11203: 0xC6C3,
	11204: 0xC6C5,
	11205: 0xC6CC,
	11206: 0xC6CD,
	11207: 0xC6D0,
	11208: 0xC6D4,
	11209: 0xC6DC,
	11210: 0xC6DD,
	11211: 0xC6E0,
	11212: 0xC6E1,
	11213: 0xC6E8,
	11214: 0xD4FE,
	11215: 0xD4FF,
	11216: 0xD500,
	11217: 0xD501,
	11218: 0xD502,
	11219: 0xD503,
	11220: 0xD505,
	11221: 0xD506,
	11222: 0xD507,
	11223: 0xD509,
	11224: 0xD50A,
	11225: 0xD50B,
	11226: 0xD50D,
	11227: 0xD50E,
	11228: 0xD50F,
	11229: 0xD510,
	11230: 0xD511,
	11231: 0xD512,
	11232: 0xD513,
	11233: 0xD516,
	11234: 0xD518,
	11235: 0xD519,
	11236: 0xD51A,
	11237: 0xD51B,
	11238: 0xD51C,
	11239: 0xD51D,
	11240: 0xD51E,
	11241: 0xD51F,
	11242: 0xD520,
	11243: 0xD521,
	11244: 0xD522,
	11245: 0xD523,
	11246: 0xD524,
	11247: 0xD525,
	11248: 0xD526,
	11249: 0xD527,
	11250: 0xD528,
	11251: 0xD529,
	11252: 0xD52A,
	11253: 0xD52B,
	11254: 0xD52C,
	11255: 0xD52D,
	11256: 0xD52E,
	11257: 0xD52F,
	11258: 0xD530,
	11259: 0xD531,
	11260: 0xD532,
	11261: 0xD533,
	11262: 0xD534,
	11263: 0xD535,
	11264: 0xD536,
	11265: 0xD537,
	11266: 0xD538,
	11267: 0xD539,
	11268: 0xD53A,
	11269: 0xD53B,
	11270: 0xD53E,
	11271: 0xD53F,
	11272: 0xD541,
	11273: 0xD542,
	11274: 0xD543,
	11275: 0xD545,
	11276: 0xD546,
	11277: 0xD547,
	11278: 0xD548,
	11279: 0xD549,
	11280: 0xD54A,
	11281: 0xD54B,
	11282: 0xD54E,
	11283: 0xD550,
	11284: 0xD552,
	11285: 0xD553,
	11286: 0xD554,
	11287: 0xD555,
	11288: 0xD556,
	11289: 0xD557,
	11290: 0xD55A,
	11291: 0xD55B,
	11292: 0xD55D,
	11293: 0xD55E,
	11294: 0xD55F,
	11295: 0xD561,
	11296: 0xD562,
	11297: 0xD563,
	11298: 0xC6E9,
	11299: 0xC6EC,
	11300: 0xC6F0,
	11301: 0xC6F8,
	11302: 0xC6F9,
	11303: 0xC6FD,
	11304: 0xC704,
	11305: 0xC705,
	11306: 0xC708,
	11307: 0xC70C,
	11308: 0xC714,
	11309: 0xC715,
	11310: 0xC717,
	11311: 0xC719,
	11312: 0xC720,
	11313: 0xC721,
	11314: 0xC724,
	11315: 0xC728,
	11316: 0xC730,
	11317: 0xC731,
	11318: 0xC733,
	11319: 0xC735,
	11320: 0xC737,
	11321: 0xC73C,
	11322: 0xC73D,
	11323: 0xC740,
	11324: 0xC744,
	11325: 0xC74A,
	11326: 0xC74C,
	11327: 0xC74D,
	11328: 0xC74F,
	11329: 0xC751,
	11330: 0xC752,
	11331: 0xC753,
	11332: 0xC754,
	11333: 0xC755,
	11334: 0xC756,
	11335: 0xC757,
	11336: 0xC758,
	11337: 0xC75C,
	11338: 0xC760,
	11339: 0xC768,
	11340: 0xC76B,
	11341: 0xC774,
	11342: 0xC775,
	11343: 0xC778,
	11344: 0xC77C,
	11345: 0xC77D,
	11346: 0xC77E,
	11347: 0xC783,
	11348: 0xC784,
	11349: 0xC785,
	11350: 0xC787,
	11351: 0xC788,
	11352: 0xC789,
	11353: 0xC78A,
	11354: 0xC78E,
	11355: 0xC790,
	11356: 0xC791,
	11357: 0xC794,
	11358: 0xC796,
	11359: 0xC797,
	11360: 0xC798,
	11361: 0xC79A,
	11362: 0xC7A0,
	11363: 0xC7A1,
	11364: 0xC7A3,
	11365: 0xC7A4,
	11366: 0xC7A5,
	11367: 0xC7A6,
	11368: 0xC7AC,
	11369: 0xC7AD,
	11370: 0xC7B0,
	11371: 0xC7B4,
	11372: 0xC7BC,
	11373: 0xC7BD,
	11374: 0xC7BF,
	11375: 0xC7C0,
	11376: 0xC7C1,
	11377: 0xC7C8,
	11378: 0xC7C9,
	11379: 0xC7CC,
	11380: 0xC7CE,
	11381: 0xC7D0,
	11382: 0xC7D8,
	11383: 0xC7DD,
	11384: 0xC7E4,
	11385: 0xC7E8,
	11386: 0xC7EC,
	11387: 0xC800,
	11388: 0xC801,
	11389: 0xC804,
	11390: 0xC808,
	11391: 0xC80A,
	11392: 0xD564,
	11393: 0xD566,
	11394: 0xD567,
	11395: 0xD56A,
	11396: 0xD56C,
	11397: 0xD56E,
	11398: 0xD56F,
	11399: 0xD570,
	11400: 0xD571,
	11401: 0xD572,
	11402: 0xD573,
	11403: 0xD576,
	11404: 0xD577,
	11405: 0xD579,
	11406: 0xD57A,
	11407: 0xD57B,
	11408: 0xD57D,
	11409: 0xD57E,
	11410: 0xD57F,
	11411: 0xD580,
	11412: 0xD581,
	11413: 0xD582,
	11414: 0xD583,
	11415: 0xD586,
	11416: 0xD58A,
	11417: 0xD58B,
	11418: 0xD58C,
	11419: 0xD58D,
	11420: 0xD58E,
	11421: 0xD58F,
	11422: 0xD591,
	11423: 0xD592,
	11424: 0xD593,
	11425: 0xD594,
	11426: 0xD595,
	11427: 0xD596,
	11428: 0xD597,
	11429: 0xD598,
	11430: 0xD599,
	11431: 0xD59A,
	11432: 0xD59B,
	11433: 0xD59C,
	11434: 0xD59D,
	11435: 0xD59E,
	11436: 0xD59F,
	11437: 0xD5A0,
	11438: 0xD5A1,
	11439: 0xD5A2,
	11440: 0xD5A3,
	11441: 0xD5A4,
	11442: 0xD5A6,
	11443: 0xD5A7,
	11444: 0xD5A8,
	11445: 0xD5A9,
	11446: 0xD5AA,
	11447: 0xD5AB,
	11448: 0xD5AC,
	11449: 0xD5AD,
	11450: 0xD5AE,
	11451: 0xD5AF,
	11452: 0xD5B0,
	11453: 0xD5B1,
	11454: 0xD5B2,
	11455: 0xD5B3,
	11456: 0xD5B4,
	11457: 0xD5B5,
	11458: 0xD5B6,
	11459: 0xD5B7,
	11460: 0xD5B8,
	11461: 0xD5B9,
	11462: 0xD5BA,
	11463: 0xD5BB,
	11464: 0xD5BC,
	11465: 0xD5BD,
	11466: 0xD5BE,
	11467: 0xD5BF,
	11468: 0xD5C0,
	11469: 0xD5C1,
	11470: 0xD5C2,
	11471: 0xD5C3,
	11472: 0xD5C4,
	11473: 0xD5C5,
	11474: 0xD5C6,
	11475: 0xD5C7,
	11476: 0xC810,
	11477: 0xC811,
	11478: 0xC813,
	11479: 0xC815,
	11480: 0xC816,
	11481: 0xC81C,
	11482: 0xC81D,
	11483: 0xC820,
	11484: 0xC824,
	11485: 0xC82C,
	11486: 0xC82D,
	11487: 0xC82F,
	11488: 0xC831,
	11489: 0xC838,
	11490: 0xC83C,
	11491: 0xC840,
	11492: 0xC848,
	11493: 0xC849,
	11494: 0xC84C,
	11495: 0xC84D,
	11496: 0xC854,
	11497: 0xC870,
	11498: 0xC871,
	11499: 0xC874,
	11500: 0xC878,
	11501: 0xC87A,
	11502: 0xC880,
	11503: 0xC881,
	11504: 0xC883,
	11505: 0xC885,
	11506: 0xC886,
	11507: 0xC887,
	11508: 0xC88B,
	11509: 0xC88C,
	11510: 0xC88D,
	11511: 0xC894,
	11512: 0xC89D,
	11513: 0xC89F,
	11514: 0xC8A1,
	11515: 0xC8A8,
	11516: 0xC8BC,
	11517: 0xC8BD,
	11518: 0xC8C4,
	11519: 0xC8C8,
	11520: 0xC8CC,
	11521: 0xC8D4,
	11522: 0xC8D5,
	11523: 0xC8D7,
	11524: 0xC8D9,
	11525: 0xC8E0,
	11526: 0xC8E1,
	11527: 0xC8E4,
	11528: 0xC8F5,
	11529: 0xC8FC,
	11530: 0xC8FD,
	11531: 0xC900,
	11532: 0xC904,
	11533: 0xC905,
	11534: 0xC906,
	11535: 0xC90C,
	11536: 0xC90D,
	11537: 0xC90F,
	11538: 0xC911,
	11539: 0xC918,
	11540: 0xC92C,
	11541: 0xC934,
	11542: 0xC950,
	11543: 0xC951,
	11544: 0xC954,
	11545: 0xC958,
	11546: 0xC960,
	11547: 0xC961,
	11548: 0xC963,
	11549: 0xC96C,
	11550: 0xC970,
	11551: 0xC974,
	11552: 0xC97C,
	11553: 0xC988,
	11554: 0xC989,
	11555: 0xC98C,
	11556: 0xC990,
	11557: 0xC998,
	11558: 0xC999,
	11559: 0xC99B,
	11560: 0xC99D,
	11561: 0xC9C0,
	11562: 0xC9C1,
	11563: 0xC9C4,
	11564: 0xC9C7,
	11565: 0xC9C8,
	11566: 0xC9CA,
	11567: 0xC9D0,
	11568: 0xC9D1,
	11569: 0xC9D3,
	11570: 0xD5CA,
	11571: 0xD5CB,
	11572: 0xD5CD,
	11573: 0xD5CE,
	11574: 0xD5CF,
	11575: 0xD5D1,
	11576: 0xD5D3,
	11577: 0xD5D4,
	11578: 0xD5D5,
	11579: 0xD5D6,
	11580: 0xD5D7,
	11581: 0xD5DA,
	11582: 0xD5DC,
	11583: 0xD5DE,
	11584: 0xD5DF,
	11585: 0xD5E0,
	11586: 0xD5E1,
	11587: 0xD5E2,
	11588: 0xD5E3,
	11589: 0xD5E6,
	11590: 0xD5E7,
	11591: 0xD5E9,
	11592: 0xD5EA,
	11593: 0xD5EB,
	11594: 0xD5ED,
	11595: 0xD5EE,
	11596: 0xD5EF,
	11597: 0xD5F0,
	11598: 0xD5F1,
	11599: 0xD5F2,
	11600: 0xD5F3,
	11601: 0xD5F6,
	11602: 0xD5F8,
	11603: 0xD5FA,
	11604: 0xD5FB,
	11605: 0xD5FC,
	11606: 0xD5FD,
	11607: 0xD5FE,
	11608: 0xD5FF,
	11609: 0xD602,
	11610: 0xD603,
	11611: 0xD605,
	11612: 0xD606,
	11613: 0xD607,
	11614: 0xD609,
	11615: 0xD60A,
	11616: 0xD60B,
	11617: 0xD60C,
	11618: 0xD60D,
	11619: 0xD60E,
	11620: 0xD60F,
	11621: 0xD612,
	11622: 0xD616,
	11623: 0xD617,
	11624: 0xD618,
	11625: 0xD619,
	11626: 0xD61A,
	11627: 0xD61B,
	11628: 0xD61D,
	11629: 0xD61E,
	11630: 0xD61F,
	11631: 0xD621,
	11632: 0xD622,
	11633: 0xD623,
	11634: 0xD625,
	11635: 0xD626,
	11636: 0xD627,
	11637: 0xD628,
	11638: 0xD629,
	11639: 0xD62A,
	11640: 0xD62B,
	11641: 0xD62C,
	11642: 0xD62E,
	11643: 0xD62F,
	11644: 0xD630,
	11645: 0xD631,
	11646: 0xD632,
	11647: 0xD633,
	11648: 0xD634,
	11649: 0xD635,
	11650: 0xD636,
	11651: 0xD637,
	11652: 0xD63A,
	11653: 0xD63B,
	11654: 0xC9D5,
	11655: 0xC9D6,
	11656: 0xC9D9,
	11657: 0xC9DA,
	11658: 0xC9DC,
	11659: 0xC9DD,
	11660: 0xC9E0,
	11661: 0xC9E2,
	11662: 0xC9E4,
	11663: 0xC9E7,
	11664: 0xC9EC,
	11665: 0xC9ED,
	11666: 0xC9EF,
	11667: 0xC9F0,
	11668: 0xC9F1,
	11669: 0xC9F8,
	11670: 0xC9F9,
	11671: 0xC9FC,
	11672: 0xCA00,
	11673: 0xCA08,
	11674: 0xCA09,
	11675: 0xCA0B,
	11676: 0xCA0C,
	11677: 0xCA0D,
	11678: 0xCA14,
	11679: 0xCA18,
	11680: 0xCA29,
	11681: 0xCA4C,
	11682: 0xCA4D,
	11683: 0xCA50,
	11684: 0xCA54,
	11685: 0xCA5C,
	11686: 0xCA5D,
	11687: 0xCA5F,
	11688: 0xCA60,
	11689: 0xCA61,
	11690: 0xCA68,
	11691: 0xCA7D,
	11692: 0xCA84,
	11693: 0xCA98,
	11694: 0xCABC,
	11695: 0xCABD,
	11696: 0xCAC0,
	11697: 0xCAC4,
	11698: 0xCACC,
	11699: 0xCACD,
	11700: 0xCACF,
	11701: 0xCAD1,
	11702: 0xCAD3,
	11703: 0xCAD8,
	11704: 0xCAD9,
	11705: 0xCAE0,
	11706: 0xCAEC,
	11707: 0xCAF4,
	11708: 0xCB08,
	11709: 0xCB10,
	11710: 0xCB14,
	11711: 0xCB18,
	11712: 0xCB20,
	11713: 0xCB21,
	11714: 0xCB41,
	11715: 0xCB48,
	11716: 0xCB49,
	11717: 0xCB4C,
	11718: 0xCB50,
	11719: 0xCB58,
	11720: 0xCB59,
	11721: 0xCB5D,
	11722: 0xCB64,
	11723: 0xCB78,
	11724: 0xCB79,
	11725: 0xCB9C,
	11726: 0xCBB8,
	11727: 0xCBD4,
	11728: 0xCBE4,
	11729: 0xCBE7,
	11730: 0xCBE9,
	11731: 0xCC0C,
	11732: 0xCC0D,
	11733: 0xCC10,
	11734: 0xCC14,
	11735: 0xCC1C,
	11736: 0xCC1D,
	11737: 0xCC21,
	11738: 0xCC22,
	11739: 0xCC27,
	11740: 0xCC28,
	11741: 0xCC29,
	11742: 0xCC2C,
	11743: 0xCC2E,
	11744: 0xCC30,
	11745: 0xCC38,
	11746: 0xCC39,
	11747: 0xCC3B,
	11748: 0xD63D,
	11749: 0xD63E,
	11750: 0xD63F,
	11751: 0xD641,
	11752: 0xD642,
	11753: 0xD643,
	11754: 0xD644,
	11755: 0xD646,
	11756: 0xD647,
	11757: 0xD64A,
	11758: 0xD64C,
	11759: 0xD64E,
	11760: 0xD64F,
	11761: 0xD650,
	11762: 0xD652,
	11763: 0xD653,
	11764: 0xD656,
	11765: 0xD657,
	11766: 0xD659,
	11767: 0xD65A,
	11768: 0xD65B,
	11769: 0xD65D,
	11770: 0xD65E,
	11771: 0xD65F,
	11772: 0xD660,
	11773: 0xD661,
	11774: 0xD662,
	11775: 0xD663,
	11776: 0xD664,
	11777: 0xD665,
	11778: 0xD666,
	11779: 0xD668,
	11780: 0xD66A,
	11781: 0xD66B,
	11782: 0xD66C,
	11783: 0xD66D,
	11784: 0xD66E,
	11785: 0xD66F,
	11786: 0xD672,
	11787: 0xD673,
	11788: 0xD675,
	11789: 0xD676,
	11790: 0xD677,
	11791: 0xD678,
	11792: 0xD679,
	11793: 0xD67A,
	11794: 0xD67B,
	11795: 0xD67C,
	11796: 0xD67D,
	11797: 0xD67E,
	11798: 0xD67F,
	11799: 0xD680,
	11800: 0xD681,
	11801: 0xD682,
	11802: 0xD684,
	11803: 0xD686,
	11804: 0xD687,
	11805: 0xD688,
	11806: 0xD689,
	11807: 0xD68A,
	11808: 0xD68B,
	11809: 0xD68E,
	11810: 0xD68F,
	11811: 0xD691,
	11812: 0xD692,
	11813: 0xD693,
	11814: 0xD695,
	11815: 0xD696,
	11816: 0xD697,
	11817: 0xD698,
	11818: 0xD699,
	11819: 0xD69A,
	11820: 0xD69B,
	11821: 0xD69C,
	11822: 0xD69E,
	11823: 0xD6A0,
	11824: 0xD6A2,
	11825: 0xD6A3,
	11826: 0xD6A4,
	11827: 0xD6A5,
	11828: 0xD6A6,
	11829: 0xD6A7,
	11830: 0xD6A9,
	11831: 0xD6AA,
	11832: 0xCC3C,
	11833: 0xCC3D,
	11834: 0xCC3E,
	11835: 0xCC44,
	11836: 0xCC45,
	11837: 0xCC48,
	11838: 0xCC4C,
	11839: 0xCC54,
	11840: 0xCC55,
	11841: 0xCC57,
	11842: 0xCC58,
	11843: 0xCC59,
	11844: 0xCC60,
	11845: 0xCC64,
	11846: 0xCC66,
	11847: 0xCC68,
	11848: 0xCC70,
	11849: 0xCC75,
	11850: 0xCC98,
	11851: 0xCC99,
	11852: 0xCC9C,
	11853: 0xCCA0,
	11854: 0xCCA8,
	11855: 0xCCA9,
	11856: 0xCCAB,
	11857: 0xCCAC,
	11858: 0xCCAD,
	11859: 0xCCB4,
	11860: 0xCCB5,
	11861: 0xCCB8,
	11862: 0xCCBC,
	11863: 0xCCC4,
	11864: 0xCCC5,
	11865: 0xCCC7,
	11866: 0xCCC9,
	11867: 0xCCD0,
	11868: 0xCCD4,
	11869: 0xCCE4,
	11870: 0xCCEC,
	11871: 0xCCF0,
	11872: 0xCD01,
	11873: 0xCD08,
	11874: 0xCD09,
	11875: 0xCD0C,
	11876: 0xCD10,
	11877: 0xCD18,
	11878: 0xCD19,
	11879: 0xCD1B,
	11880: 0xCD1D,
	11881: 0xCD24,
	11882: 0xCD28,
	11883: 0xCD2C,
	11884: 0xCD39,
	11885: 0xCD5C,
	11886: 0xCD60,
	11887: 0xCD64,
	11888: 0xCD6C,
	11889: 0xCD6D,
	11890: 0xCD6F,
	11891: 0xCD71,
	11892: 0xCD78,
	11893: 0xCD88,
	11894: 0xCD94,
	11895: 0xCD95,
	11896: 0xCD98,
	11897: 0xCD9C,
	11898: 0xCDA4,
	11899: 0xCDA5,
	11900: 0xCDA7,
	11901: 0xCDA9,
	11902: 0xCDB0,
	11903: 0xCDC4,
	11904: 0xCDCC,
	11905: 0xCDD0,
	11906: 0xCDE8,
	11907: 0xCDEC,
	11908: 0xCDF0,
	11909: 0xCDF8,
	11910: 0xCDF9,
	11911: 0xCDFB,
	11912: 0xCDFD,
	11913: 0xCE04,
	11914: 0xCE08,
	11915: 0xCE0C,
	11916: 0xCE14,
	11917: 0xCE19,
	11918: 0xCE20,
	11919: 0xCE21,
	11920: 0xCE24,
	11921: 0xCE28,
	11922: 0xCE30,
	11923: 0xCE31,
	11924: 0xCE33,
	11925: 0xCE35,
	11926: 0xD6AB,
	11927: 0xD6AD,
	11928: 0xD6AE,
	11929: 0xD6AF,
	11930: 0xD6B1,
	11931: 0xD6B2,
	11932: 0xD6B3,
	11933: 0xD6B4,
	11934: 0xD6B5,
	11935: 0xD6B6,
	11936: 0xD6B7,
	11937: 0xD6B8,
	11938: 0xD6BA,
	11939: 0xD6BC,
	11940: 0xD6BD,
	11941: 0xD6BE,
	11942: 0xD6BF,
	11943: 0xD6C0,
	11944: 0xD6C1,
	11945: 0xD6C2,
	11946: 0xD6C3,
	11947: 0xD6C6,
	11948: 0xD6C7,
	11949: 0xD6C9,
	11950: 0xD6CA,
	11951: 0xD6CB,
	11952: 0xD6CD,
	11953: 0xD6CE,
	11954: 0xD6CF,
	11955: 0xD6D0,
	11956: 0xD6D2,
	11957: 0xD6D3,
	11958: 0xD6D5,
	11959: 0xD6D6,
	11960: 0xD6D8,
	11961: 0xD6DA,
	11962: 0xD6DB,
	11963: 0xD6DC,
	11964: 0xD6DD,
	11965: 0xD6DE,
	11966: 0xD6DF,
	11967: 0xD6E1,
	11968: 0xD6E2,
	11969: 0xD6E3,
	11970: 0xD6E5,
	11971: 0xD6E6,
	11972: 0xD6E7,
	11973: 0xD6E9,
	11974: 0xD6EA,
	11975: 0xD6EB,
	11976: 0xD6EC,
	11977: 0xD6ED,
	11978: 0xD6EE,
	11979: 0xD6EF,
	11980: 0xD6F1,
	11981: 0xD6F2,
	11982: 0xD6F3,
	11983: 0xD6F4,
	11984: 0xD6F6,
	11985: 0xD6F7,
	11986: 0xD6F8,
	11987: 0xD6F9,
	11988: 0xD6FA,
	11989: 0xD6FB,
	11990: 0xD6FE,
	11991: 0xD6FF,
	11992: 0xD701,
	11993: 0xD702,
	11994: 0xD703,
	11995: 0xD705,
	11996: 0xD706,
	11997: 0xD707,
	11998: 0xD708,
	11999: 0xD709,
	12000: 0xD70A,
	12001: 0xD70B,
	12002: 0xD70C,
	12003: 0xD70D,
	12004: 0xD70E,
	12005: 0xD70F,
	12006: 0xD710,
	12007: 0xD712,
	12008: 0xD713,
	12009: 0xD714,
	12010: 0xCE58,
	12011: 0xCE59,
	12012: 0xCE5C,
	12013: 0xCE5F,
	12014: 0xCE60,
	12015: 0xCE61,
	12016: 0xCE68,
	12017: 0xCE69,
	12018: 0xCE6B,
	12019: 0xCE6D,
	12020: 0xCE74,
	12021: 0xCE75,
	12022: 0xCE78,
	12023: 0xCE7C,
	12024: 0xCE84,
	12025: 0xCE85,
	12026: 0xCE87,
	12027: 0xCE89,
	12028: 0xCE90,
	12029: 0xCE91,
	12030: 0xCE94,
	12031: 0xCE98,
	12032: 0xCEA0,
	12033: 0xCEA1,
	12034: 0xCEA3,
	12035: 0xCEA4,
	12036: 0xCEA5,
	12037: 0xCEAC,
	12038: 0xCEAD,
	12039: 0xCEC1,
	12040: 0xCEE4,
	12041: 0xCEE5,
	12042: 0xCEE8,
	12043: 0xCEEB,
	12044: 0xCEEC,
	12045: 0xCEF4,
	12046: 0xCEF5,
	12047: 0xCEF7,
	12048: 0xCEF8,
	12049: 0xCEF9,
	12050: 0xCF00,
	12051: 0xCF01,
	12052: 0xCF04,
	12053: 0xCF08,
	12054: 0xCF10,
	12055: 0xCF11,
	12056: 0xCF13,
	12057: 0xCF15,
	12058: 0xCF1C,
	12059: 0xCF20,
	12060: 0xCF24,
	12061: 0xCF2C,
	12062: 0xCF2D,
	12063: 0xCF2F,
	12064: 0xCF30,
	12065: 0xCF31,
	12066: 0xCF38,
	12067: 0xCF54,
	12068: 0xCF55,
	12069: 0xCF58,
	12070: 0xCF5C,
	12071: 0xCF64,
	12072: 0xCF65,
	12073: 0xCF67,
	12074: 0xCF69,
	12075: 0xCF70,
	12076: 0xCF71,
	12077: 0xCF74,
	12078: 0xCF78,
	12079: 0xCF80,
	12080: 0xCF85,
	12081: 0xCF8C,
	12082: 0xCFA1,
	12083: 0xCFA8,
	12084: 0xCFB0,
	12085: 0xCFC4,
	12086: 0xCFE0,
	12087: 0xCFE1,
	12088: 0xCFE4,
	12089: 0xCFE8,
	12090: 0xCFF0,
	12091: 0xCFF1,
	12092: 0xCFF3,
	12093: 0xCFF5,
	12094: 0xCFFC,
	12095: 0xD000,
	12096: 0xD004,
	12097: 0xD011,
	12098: 0xD018,
	12099: 0xD02D,
	12100: 0xD034,
	12101: 0xD035,
	12102: 0xD038,
	12103: 0xD03C,
	12104: 0xD715,
	12105: 0xD716,
	12106: 0xD717,
	12107: 0xD71A,
	12108: 0xD71B,
	12109: 0xD71D,
	12110: 0xD71E,
	12111: 0xD71F,
	12112: 0xD721,
	12113: 0xD722,
	12114: 0xD723,
	12115: 0xD724,
	12116: 0xD725,
	12117: 0xD726,
	12118: 0xD727,
	12119: 0xD72A,
	12120: 0xD72C,
	12121: 0xD72E,
	12122: 0xD72F,
	12123: 0xD730,
	12124: 0xD731,
	12125: 0xD732,
	12126: 0xD733,
	12127: 0xD736,
	12128: 0xD737,
	12129: 0xD739,
	12130: 0xD73A,
	12131: 0xD73B,
	12132: 0xD73D,
	12133: 0xD73E,
	12134: 0xD73F,
	12135: 0xD740,
	12136: 0xD741,
	12137: 0xD742,
	12138: 0xD743,
	12139: 0xD745,
	12140: 0xD746,
	12141: 0xD748,
	12142: 0xD74A,
	12143: 0xD74B,
	12144: 0xD74C,
	12145: 0xD74D,
	12146: 0xD74E,
	12147: 0xD74F,
	12148: 0xD752,
	12149: 0xD753,
	12150: 0xD755,
	12151: 0xD75A,
	12152: 0xD75B,
	12153: 0xD75C,
	12154: 0xD75D,
	12155: 0xD75E,
	12156: 0xD75F,
	12157: 0xD762,
	12158: 0xD764,
	12159: 0xD766,
	12160: 0xD767,
	12161: 0xD768,
	12162: 0xD76A,
	12163: 0xD76B,
	12164: 0xD76D,
	12165: 0xD76E,
	12166: 0xD76F,
	12167: 0xD771,
	12168: 0xD772,
	12169: 0xD773,
	12170: 0xD775,
	12171: 0xD776,
	12172: 0xD777,
	12173: 0xD778,
	12174: 0xD779,
	12175: 0xD77A,
	12176: 0xD77B,
	12177: 0xD77E,
	12178: 0xD77F,
	12179: 0xD780,
	12180: 0xD782,
	12181: 0xD783,
	12182: 0xD784,
	12183: 0xD785,
	12184: 0xD786,
	12185: 0xD787,
	12186: 0xD78A,
	12187: 0xD78B,
	12188: 0xD044,
	12189: 0xD045,
	12190: 0xD047,
	12191: 0xD049,
	12192: 0xD050,
	12193: 0xD054,
	12194: 0xD058,
	12195: 0xD060,
	12196: 0xD06C,
	12197: 0xD06D,
	12198: 0xD070,
	12199: 0xD074,
	12200: 0xD07C,
	12201: 0xD07D,
	12202: 0xD081,
	12203: 0xD0A4,
	12204: 0xD0A5,
	12205: 0xD0A8,
	12206: 0xD0AC,
	12207: 0xD0B4,
	12208: 0xD0B5,
	12209: 0xD0B7,
	12210: 0xD0B9,
	12211: 0xD0C0,
	12212: 0xD0C1,
	12213: 0xD0C4,
	12214: 0xD0C8,
	12215: 0xD0C9,
	12216: 0xD0D0,
	12217: 0xD0D1,
	12218: 0xD0D3,
	12219: 0xD0D4,
	12220: 0xD0D5,
	12221: 0xD0DC,
	12222: 0xD0DD,
	12223: 0xD0E0,
	12224: 0xD0E4,
	12225: 0xD0EC,
	12226: 0xD0ED,
	12227: 0xD0EF,
	12228: 0xD0F0,
	12229: 0xD0F1,
	12230: 0xD0F8,
	12231: 0xD10D,
	12232: 0xD130,
	12233: 0xD131,
	12234: 0xD134,
	12235: 0xD138,
	12236: 0xD13A,
	12237: 0xD140,
	12238: 0xD141,
	12239: 0xD143,
	12240: 0xD144,
	12241: 0xD145,
	12242: 0xD14C,
	12243: 0xD14D,
	12244: 0xD150,
	12245: 0xD154,
	12246: 0xD15C,
	12247: 0xD15D,
	12248: 0xD15F,
	12249: 0xD161,
	12250: 0xD168,
	12251: 0xD16C,
	12252: 0xD17C,
	12253: 0xD184,
	12254: 0xD188,
	12255: 0xD1A0,
	12256: 0xD1A1,
	12257: 0xD1A4,
	12258: 0xD1A8,
	12259: 0xD1B0,
	12260: 0xD1B1,
	12261: 0xD1B3,
	12262: 0xD1B5,
	12263: 0xD1BA,
	12264: 0xD1BC,
	12265: 0xD1C0,
	12266: 0xD1D8,
	12267: 0xD1F4,
	12268: 0xD1F8,
	12269: 0xD207,
	12270: 0xD209,
	12271: 0xD210,
	12272: 0xD22C,
	12273: 0xD22D,
	12274: 0xD230,
	12275: 0xD234,
	12276: 0xD23C,
	12277: 0xD23D,
	12278: 0xD23F,
	12279: 0xD241,
	12280: 0xD248,
	12281: 0xD25C,
	12282: 0xD78D,
	12283: 0xD78E,
	12284: 0xD78F,
	12285: 0xD791,
	12286: 0xD792,
	12287: 0xD793,
	12288: 0xD794,
	12289: 0xD795,
	12290: 0xD796,
	12291: 0xD797,
	12292: 0xD79A,
	12293: 0xD79C,
	12294: 0xD79E,
	12295: 0xD79F,
	12296: 0xD7A0,
	12297: 0xD7A1,
	12298: 0xD7A2,
	12299: 0xD7A3,
	12366: 0xD264,
	12367: 0xD280,
	12368: 0xD281,
	12369: 0xD284,
	12370: 0xD288,
	12371: 0xD290,
	12372: 0xD291,
	12373: 0xD295,
	12374: 0xD29C,
	12375: 0xD2A0,
	12376: 0xD2A4,
	12377: 0xD2AC,
	12378: 0xD2B1,
	12379: 0xD2B8,
	12380: 0xD2B9,
	12381: 0xD2BC,
	12382: 0xD2BF,
	12383: 0xD2C0,
	12384: 0xD2C2,
	12385: 0xD2C8,
	12386: 0xD2C9,
	12387: 0xD2CB,
	12388: 0xD2D4,
	12389: 0xD2D8,
	12390: 0xD2DC,
	12391: 0xD2E4,
	12392: 0xD2E5,
	12393: 0xD2F0,
	12394: 0xD2F1,
	12395: 0xD2F4,
	12396: 0xD2F8,
	12397: 0xD300,
	12398: 0xD301,
	12399: 0xD303,
	12400: 0xD305,
	12401: 0xD30C,
	12402: 0xD30D,
	12403: 0xD30E,
	12404: 0xD310,
	12405: 0xD314,
	12406: 0xD316,
	12407: 0xD31C,
	12408: 0xD31D,
	12409: 0xD31F,
	12410: 0xD320,
	12411: 0xD321,
	12412: 0xD325,
	12413: 0xD328,
	12414: 0xD329,
	12415: 0xD32C,
	12416: 0xD330,
	12417: 0xD338,
	12418: 0xD339,
	12419: 0xD33B,
	12420: 0xD33C,
	12421: 0xD33D,
	12422: 0xD344,
	12423: 0xD345,
	12424: 0xD37C,
	12425: 0xD37D,
	12426: 0xD380,
	12427: 0xD384,
	12428: 0xD38C,
	12429: 0xD38D,
	12430: 0xD38F,
	12431: 0xD390,
	12432: 0xD391,
	12433: 0xD398,
	12434: 0xD399,
	12435: 0xD39C,
	12436: 0xD3A0,
	12437: 0xD3A8,
	12438: 0xD3A9,
	12439: 0xD3AB,
	12440: 0xD3AD,
	12441: 0xD3B4,
	12442: 0xD3B8,
	12443: 0xD3BC,
	12444: 0xD3C4,
	12445: 0xD3C5,
	12446: 0xD3C8,
	12447: 0xD3C9,
	12448: 0xD3D0,
	12449: 0xD3D8,
	12450: 0xD3E1,
	12451: 0xD3E3,
	12452: 0xD3EC,
	12453: 0xD3ED,
	12454: 0xD3F0,
	12455: 0xD3F4,
	12456: 0xD3FC,
	12457: 0xD3FD,
	12458: 0xD3FF,
	12459: 0xD401,
	12460: 0xD408,
	12461: 0xD41D,
	12462: 0xD440,
	12463: 0xD444,
	12464: 0xD45C,
	12465: 0xD460,
	12466: 0xD464,
	12467: 0xD46D,
	12468: 0xD46F,
	12469: 0xD478,
	12470: 0xD479,
	12471: 0xD47C,
	12472: 0xD47F,
	12473: 0xD480,
	12474: 0xD482,
	12475: 0xD488,
	12476: 0xD489,
	12477: 0xD48B,
	12478: 0xD48D,
	12479: 0xD494,
	12480: 0xD4A9,
	12481: 0xD4CC,
	12482: 0xD4D0,
	12483: 0xD4D4,
	12484: 0xD4DC,
	12485: 0xD4DF,
	12486: 0xD4E8,
	12487: 0xD4EC,
	12488: 0xD4F0,
	12489: 0xD4F8,
	12490: 0xD4FB,
	12491: 0xD4FD,
	12492: 0xD504,
	12493: 0xD508,
	12494: 0xD50C,
	12495: 0xD514,
	12496: 0xD515,
	12497: 0xD517,
	12498: 0xD53C,
	12499: 0xD53D,
	12500: 0xD540,
	12501: 0xD544,
	12502: 0xD54C,
	12503: 0xD54D,
	12504: 0xD54F,
	12505: 0xD551,
	12506: 0xD558,
	12507: 0xD559,
	12508: 0xD55C,
	12509: 0xD560,
	12510: 0xD565,
	12511: 0xD568,
	12512: 0xD569,
	12513: 0xD56B,
	12514: 0xD56D,
	12515: 0xD574,
	12516: 0xD575,
	12517: 0xD578,
	12518: 0xD57C,
	12519: 0xD584,
	12520: 0xD585,
	12521: 0xD587,
	12522: 0xD588,
	12523: 0xD589,
	12524: 0xD590,
	12525: 0xD5A5,
	12526: 0xD5C8,
	12527: 0xD5C9,
	12528: 0xD5CC,
	12529: 0xD5D0,
	12530: 0xD5D2,
	12531: 0xD5D8,
	12532: 0xD5D9,
	12533: 0xD5DB,
	12534: 0xD5DD,
	12535: 0xD5E4,
	12536: 0xD5E5,
	12537: 0xD5E8,
	12538: 0xD5EC,
	12539: 0xD5F4,
	12540: 0xD5F5,
	12541: 0xD5F7,
	12542: 0xD5F9,
	12543: 0xD600,
	12544: 0xD601,
	12545: 0xD604,
	12546: 0xD608,
	12547: 0xD610,
	12548: 0xD611,
	12549: 0xD613,
	12550: 0xD614,
	12551: 0xD615,
	12552: 0xD61C,
	12553: 0xD620,
	12554: 0xD624,
	12555: 0xD62D,
	12556: 0xD638,
	12557: 0xD639,
	12558: 0xD63C,
	12559: 0xD640,
	12560: 0xD645,
	12561: 0xD648,
	12562: 0xD649,
	12563: 0xD64B,
	12564: 0xD64D,
	12565: 0xD651,
	12566: 0xD654,
	12567: 0xD655,
	12568: 0xD658,
	12569: 0xD65C,
	12570: 0xD667,
	12571: 0xD669,
	12572: 0xD670,
	12573: 0xD671,
	12574: 0xD674,
	12575: 0xD683,
	12576: 0xD685,
	12577: 0xD68C,
	12578: 0xD68D,
	12579: 0xD690,
	12580: 0xD694,
	12581: 0xD69D,
	12582: 0xD69F,
	12583: 0xD6A1,
	12584: 0xD6A8,
	12585: 0xD6AC,
	12586: 0xD6B0,
	12587: 0xD6B9,
	12588: 0xD6BB,
	12589: 0xD6C4,
	12590: 0xD6C5,
	12591: 0xD6C8,
	12592: 0xD6CC,
	12593: 0xD6D1,
	12594: 0xD6D4,
	12595: 0xD6D7,
	12596: 0xD6D9,
	12597: 0xD6E0,
	12598: 0xD6E4,
	12599: 0xD6E8,
	12600: 0xD6F0,
	12601: 0xD6F5,
	12602: 0xD6FC,
	12603: 0xD6FD,
	12604: 0xD700,
	12605: 0xD704,
	12606: 0xD711,
	12607: 0xD718,
	12608: 0xD719,
	12609: 0xD71C,
	12610: 0xD720,
	12611: 0xD728,
	12612: 0xD729,
	12613: 0xD72B,
	12614: 0xD72D,
	12615: 0xD734,
	12616: 0xD735,
	12617: 0xD738,
	12618: 0xD73C,
	12619: 0xD744,
	12620: 0xD747,
	12621: 0xD749,
	12622: 0xD750,
	12623: 0xD751,
	12624: 0xD754,
	12625: 0xD756,
	12626: 0xD757,
	12627: 0xD758,
	12628: 0xD759,
	12629: 0xD760,
	12630: 0xD761,
	12631: 0xD763,
	12632: 0xD765,
	12633: 0xD769,
	12634: 0xD76C,
	12635: 0xD770,
	12636: 0xD774,
	12637: 0xD77C,
	12638: 0xD77D,
	12639: 0xD781,
	12640: 0xD788,
	12641: 0xD789,
	12642: 0xD78C,
	12643: 0xD790,
	12644: 0xD798,
	12645: 0xD799,
	12646: 0xD79B,
	12647: 0xD79D,
	12742: 0x4F3D,
	12743: 0x4F73,
	12744: 0x5047,
	12745: 0x50F9,
	12746: 0x52A0,
	12747: 0x53EF,
	12748: 0x5475,
	12749: 0x54E5,
	12750: 0x5609,
	12751: 0x5AC1,
	12752: 0x5BB6,
	12753: 0x6687,
	12754: 0x67B6,
	12755: 0x67B7,
	12756: 0x67EF,
	12757: 0x6B4C,
	12758: 0x73C2,
	12759: 0x75C2,
	12760: 0x7A3C,
	12761: 0x82DB,
	12762: 0x8304,
	12763: 0x8857,
	12764: 0x8888,
	12765: 0x8A36,
	12766: 0x8CC8,
	12767: 0x8DCF,
	12768: 0x8EFB,
	12769: 0x8FE6,
	12770: 0x99D5,
	12771: 0x523B,
	12772: 0x5374,
	12773: 0x5404,
	12774: 0x606A,
	12775: 0x6164,
	12776: 0x6BBC,
	12777: 0x73CF,
	12778: 0x811A,
	12779: 0x89BA,
	12780: 0x89D2,
	12781: 0x95A3,
	12782: 0x4F83,
	12783: 0x520A,
	12784: 0x58BE,
	12785: 0x5978,
	12786: 0x59E6,
	12787: 0x5E72,
	12788: 0x5E79,
	12789: 0x61C7,
	12790: 0x63C0,
	12791: 0x6746,
	12792: 0x67EC,
	12793: 0x687F,
	12794: 0x6F97,
	12795: 0x764E,
	12796: 0x770B,
	12797: 0x78F5,
	12798: 0x7A08,
	12799: 0x7AFF,
	12800: 0x7C21,
	12801: 0x809D,
	12802: 0x826E,
	12803: 0x8271,
	12804: 0x8AEB,
	12805: 0x9593,
	12806: 0x4E6B,
	12807: 0x559D,
	12808: 0x66F7,
	12809: 0x6E34,
	12810: 0x78A3,
	12811: 0x7AED,
	12812: 0x845B,
	12813: 0x8910,
	12814: 0x874E,
	12815: 0x97A8,
	12816: 0x52D8,
	12817: 0x574E,
	12818: 0x582A,
	12819: 0x5D4C,
	12820: 0x611F,
	12821: 0x61BE,
	12822: 0x6221,
	12823: 0x6562,
	12824: 0x67D1,
	12825: 0x6A44,
	12826: 0x6E1B,
	12827: 0x7518,
	12828: 0x75B3,
	12829: 0x76E3,
	12830: 0x77B0,
	12831: 0x7D3A,
	12832: 0x90AF,
	12833: 0x9451,
	12834: 0x9452,
	12835: 0x9F95,
	12836: 0x5323,
	12837: 0x5CAC,
	12838: 0x7532,
	12839: 0x80DB,
	12840: 0x9240,
	12841: 0x9598,
	12842: 0x525B,
	12843: 0x5808,
	12844: 0x59DC,
	12845: 0x5CA1,
	12846: 0x5D17,
	12847: 0x5EB7,
	12848: 0x5F3A,
	12849: 0x5F4A,
	12850: 0x6177,
	12851: 0x6C5F,
	12852: 0x757A,
	12853: 0x7586,
	12854: 0x7CE0,
	12855: 0x7D73,
	12856: 0x7DB1,
	12857: 0x7F8C,
	12858: 0x8154,
	12859: 0x8221,
	12860: 0x8591,
	12861: 0x8941,
	12862: 0x8B1B,
	12863: 0x92FC,
	12864: 0x964D,
	12865: 0x9C47,
	12866: 0x4ECB,
	12867: 0x4EF7,
	12868: 0x500B,
	12869: 0x51F1,
	12870: 0x584F,
	12871: 0x6137,
	12872: 0x613E,
	12873: 0x6168,
	12874: 0x6539,
	12875: 0x69EA,
	12876: 0x6F11,
	12877: 0x75A5,
	12878: 0x7686,
	12879: 0x76D6,
	12880: 0x7B87,
	12881: 0x82A5,
	12882: 0x84CB,
	12883: 0xF900,
	12884: 0x93A7,
	12885: 0x958B,
	12886: 0x5580,
	12887: 0x5BA2,
	12888: 0x5751,
	12889: 0xF901,
	12890: 0x7CB3,
	12891: 0x7FB9,
	12892: 0x91B5,
	12893: 0x5028,
	12894: 0x53BB,
	12895: 0x5C45,
	12896: 0x5DE8,
	12897: 0x62D2,
	12898: 0x636E,
	12899: 0x64DA,
	12900: 0x64E7,
	12901: 0x6E20,
	12902: 0x70AC,
	12903: 0x795B,
	12904: 0x8DDD,
	12905: 0x8E1E,
	12906: 0xF902,
	12907: 0x907D,
	12908: 0x9245,
	12909: 0x92F8,
	12910: 0x4E7E,
	12911: 0x4EF6,
	12912: 0x5065,
	12913: 0x5DFE,
	12914: 0x5EFA,
	12915: 0x6106,
	12916: 0x6957,
	12917: 0x8171,
	12918: 0x8654,
	12919: 0x8E47,
	12920: 0x9375,
	12921: 0x9A2B,
	12922: 0x4E5E,
	12923: 0x5091,
	12924: 0x6770,
	12925: 0x6840,
	12926: 0x5109,
	12927: 0x528D,
	12928: 0x5292,
	12929: 0x6AA2,
	12930: 0x77BC,
	12931: 0x9210,
	12932: 0x9ED4,
	12933: 0x52AB,
	12934: 0x602F,
	12935: 0x8FF2,
	12936: 0x5048,
	12937: 0x61A9,
	12938: 0x63ED,
	12939: 0x64CA,
	12940: 0x683C,
	12941: 0x6A84,
	12942: 0x6FC0,
	12943: 0x8188,
	12944: 0x89A1,
	12945: 0x9694,
	12946: 0x5805,
	12947: 0x727D,
	12948: 0x72AC,
	12949: 0x7504,
	12950: 0x7D79,
	12951: 0x7E6D,
	12952: 0x80A9,
	12953: 0x898B,
	12954: 0x8B74,
	12955: 0x9063,
	12956: 0x9D51,
	12957: 0x6289,
	12958: 0x6C7A,
	12959: 0x6F54,
	12960: 0x7D50,
	12961: 0x7F3A,
	12962: 0x8A23,
	12963: 0x517C,
	12964: 0x614A,
	12965: 0x7B9D,
	12966: 0x8B19,
	12967: 0x9257,
	12968: 0x938C,
	12969: 0x4EAC,
	12970: 0x4FD3,
	12971: 0x501E,
	12972: 0x50BE,
	12973: 0x5106,
	12974: 0x52C1,
	12975: 0x52CD,
	12976: 0x537F,
	12977: 0x5770,
	12978: 0x5883,
	12979: 0x5E9A,
	12980: 0x5F91,
	12981: 0x6176,
	12982: 0x61AC,
	12983: 0x64CE,
	12984: 0x656C,
	12985: 0x666F,
	12986: 0x66BB,
	12987: 0x66F4,
	12988: 0x6897,
	12989: 0x6D87,
	12990: 0x7085,
	12991: 0x70F1,
	12992: 0x749F,
	12993: 0x74A5,
	12994: 0x74CA,
	12995: 0x75D9,
	12996: 0x786C,
	12997: 0x78EC,
	12998: 0x7ADF,
	12999: 0x7AF6,
	13000: 0x7D45,
	13001: 0x7D93,
	13002: 0x8015,
	13003: 0x803F,
	13004: 0x811B,
	13005: 0x8396,
	13006: 0x8B66,
	13007: 0x8F15,
	13008: 0x9015,
	13009: 0x93E1,
	13010: 0x9803,
	13011: 0x9838,
	13012: 0x9A5A,
	13013: 0x9BE8,
	13014: 0x4FC2,
	13015: 0x5553,
	13016: 0x583A,
	13017: 0x5951,
	13018: 0x5B63,
	13019: 0x5C46,
	13020: 0x60B8,
	13021: 0x6212,
	13022: 0x6842,
	13023: 0x68B0,
	13024: 0x68E8,
	13025: 0x6EAA,
	13026: 0x754C,
	13027: 0x7678,
	13028: 0x78CE,
	13029: 0x7A3D,
	13030: 0x7CFB,
	13031: 0x7E6B,
	13032: 0x7E7C,
	13033: 0x8A08,
	13034: 0x8AA1,
	13035: 0x8C3F,
	13036: 0x968E,
	13037: 0x9DC4,
	13038: 0x53E4,
	13039: 0x53E9,
	13040: 0x544A,
	13041: 0x5471,
	13042: 0x56FA,
	13043: 0x59D1,
	13044: 0x5B64,
	13045: 0x5C3B,
	13046: 0x5EAB,
	13047: 0x62F7,
	13048: 0x6537,
	13049: 0x6545,
	13050: 0x6572,
	13051: 0x66A0,
	13052: 0x67AF,
	13053: 0x69C1,
	13054: 0x6CBD,
	13055: 0x75FC,
	13056: 0x7690,
	13057: 0x777E,
	13058: 0x7A3F,
	13059: 0x7F94,
	13060: 0x8003,
	13061: 0x80A1,
	13062: 0x818F,
	13063: 0x82E6,
	13064: 0x82FD,
	13065: 0x83F0,
	13066: 0x85C1,
	13067: 0x8831,
	13068: 0x88B4,
	13069: 0x8AA5,
	13070: 0xF903,
	13071: 0x8F9C,
	13072: 0x932E,
	13073: 0x96C7,
	13074: 0x9867,
	13075: 0x9AD8,
	13076: 0x9F13,
	13077: 0x54ED,
	13078: 0x659B,
	13079: 0x66F2,
	13080: 0x688F,
	13081: 0x7A40,
	13082: 0x8C37,
	13083: 0x9D60,
	13084: 0x56F0,
	13085: 0x5764,
	13086: 0x5D11,
	13087: 0x6606,
	13088: 0x68B1,
	13089: 0x68CD,
	13090: 0x6EFE,
	13091: 0x7428,
	13092: 0x889E,
	13093: 0x9BE4,
	13094: 0x6C68,
	13095: 0xF904,
	13096: 0x9AA8,
	13097: 0x4F9B,
	13098: 0x516C,
	13099: 0x5171,
	13100: 0x529F,
	13101: 0x5B54,
	13102: 0x5DE5,
	13103: 0x6050,
	13104: 0x606D,
	13105: 0x62F1,
	13106: 0x63A7,
	13107: 0x653B,
	13108: 0x73D9,
	13109: 0x7A7A,
	13110: 0x86A3,
	13111: 0x8CA2,
	13112: 0x978F,
	13113: 0x4E32,
	13114: 0x5BE1,
	13115: 0x6208,
	13116: 0x679C,
	13117: 0x74DC,
	13118: 0x79D1,
	13119: 0x83D3,
	13120: 0x8A87,
	13121: 0x8AB2,
	13122: 0x8DE8,
	13123: 0x904E,
	13124: 0x934B,
	13125: 0x9846,
	13126: 0x5ED3,
	13127: 0x69E8,
	13128: 0x85FF,
	13129: 0x90ED,
	13130: 0xF905,
	13131: 0x51A0,
	13132: 0x5B98,
	13133: 0x5BEC,
	13134: 0x6163,
	13135: 0x68FA,
	13136: 0x6B3E,
	13137: 0x704C,
	13138: 0x742F,
	13139: 0x74D8,
	13140: 0x7BA1,
	13141: 0x7F50,
	13142: 0x83C5,
	13143: 0x89C0,
	13144: 0x8CAB,
	13145: 0x95DC,
	13146: 0x9928,
	13147: 0x522E,
	13148: 0x605D,
	13149: 0x62EC,
	13150: 0x9002,
	13151: 0x4F8A,
	13152: 0x5149,
	13153: 0x5321,
	13154: 0x58D9,
	13155: 0x5EE3,
	13156: 0x66E0,
	13157: 0x6D38,
	13158: 0x709A,
	13159: 0x72C2,
	13160: 0x73D6,
	13161: 0x7B50,
	13162: 0x80F1,
	13163: 0x945B,
	13164: 0x5366,
	13165: 0x639B,
	13166: 0x7F6B,
	13167: 0x4E56,
	13168: 0x5080,
	13169: 0x584A,
	13170: 0x58DE,
	13171: 0x602A,
	13172: 0x6127,
	13173: 0x62D0,
	13174: 0x69D0,
	13175: 0x9B41,
	13176: 0x5B8F,
	13177: 0x7D18,
	13178: 0x80B1,
	13179: 0x8F5F,
	13180: 0x4EA4,
	13181: 0x50D1,
	13182: 0x54AC,
	13183: 0x55AC,
	13184: 0x5B0C,
	13185: 0x5DA0,
	13186: 0x5DE7,
	13187: 0x652A,
	13188: 0x654E,
	13189: 0x6821,
	13190: 0x6A4B,
	13191: 0x72E1,
	13192: 0x768E,
	13193: 0x77EF,
	13194: 0x7D5E,
	13195: 0x7FF9,
	13196: 0x81A0,
	13197: 0x854E,
	13198: 0x86DF,
	13199: 0x8F03,
	13200: 0x8F4E,
	13201: 0x90CA,
	13202: 0x9903,
	13203: 0x9A55,
	13204: 0x9BAB,
	13205: 0x4E18,
	13206: 0x4E45,
	13207: 0x4E5D,
	13208: 0x4EC7,
	13209: 0x4FF1,
	13210: 0x5177,
	13211: 0x52FE,
	13212: 0x5340,
	13213: 0x53E3,
	13214: 0x53E5,
	13215: 0x548E,
	13216: 0x5614,
	13217: 0x5775,
	13218: 0x57A2,
	13219: 0x5BC7,
	13220: 0x5D87,
	13221: 0x5ED0,
	13222: 0x61FC,
	13223: 0x62D8,
	13224: 0x6551,
	13225: 0x67B8,
	13226: 0x67E9,
	13227: 0x69CB,
	13228: 0x6B50,
	13229: 0x6BC6,
	13230: 0x6BEC,
	13231: 0x6C42,
	13232: 0x6E9D,
	13233: 0x7078,
	13234: 0x72D7,
	13235: 0x7396,
	13236: 0x7403,
	13237: 0x77BF,
	13238: 0x77E9,
	13239: 0x7A76,
	13240: 0x7D7F,
	13241: 0x8009,
	13242: 0x81FC,
	13243: 0x8205,
	13244: 0x820A,
	13245: 0x82DF,
	13246: 0x8862,
	13247: 0x8B33,
	13248: 0x8CFC,
	13249: 0x8EC0,
	13250: 0x9011,
	13251: 0x90B1,
	13252: 0x9264,
	13253: 0x92B6,
	13254: 0x99D2,
	13255: 0x9A45,
	13256: 0x9CE9,
	13257: 0x9DD7,
	13258: 0x9F9C,
	13259: 0x570B,
	13260: 0x5C40,
	13261: 0x83CA,
	13262: 0x97A0,
	13263: 0x97AB,
	13264: 0x9EB4,
	13265: 0x541B,
	13266: 0x7A98,
	13267: 0x7FA4,
	13268: 0x88D9,
	13269: 0x8ECD,
	13270: 0x90E1,
	13271: 0x5800,
	13272: 0x5C48,
	13273: 0x6398,
	13274: 0x7A9F,
	13275: 0x5BAE,
	13276: 0x5F13,
	13277: 0x7A79,
	13278: 0x7AAE,
	13279: 0x828E,
	13280: 0x8EAC,
	13281: 0x5026,
	13282: 0x5238,
	13283: 0x52F8,
	13284: 0x5377,
	13285: 0x5708,
	13286: 0x62F3,
	13287: 0x6372,
	13288: 0x6B0A,
	13289: 0x6DC3,
	13290: 0x7737,
	13291: 0x53A5,
	13292: 0x7357,
	13293: 0x8568,
	13294: 0x8E76,
	13295: 0x95D5,
	13296: 0x673A,
	13297: 0x6AC3,
	13298: 0x6F70,
	13299: 0x8A6D,
	13300: 0x8ECC,
	13301: 0x994B,
	13302: 0xF906,
	13303: 0x6677,
	13304: 0x6B78,
	13305: 0x8CB4,
	13306: 0x9B3C,
	13307: 0xF907,
	13308: 0x53EB,
	13309: 0x572D,
	13310: 0x594E,
	13311: 0x63C6,
	13312: 0x69FB,
	13313: 0x73EA,
	13314: 0x7845,
	13315: 0x7ABA,
	13316: 0x7AC5,
	13317: 0x7CFE,
	13318: 0x8475,
	13319: 0x898F,
	13320: 0x8D73,
	13321: 0x9035,
	13322: 0x95A8,
	13323: 0x52FB,
	13324: 0x5747,
	13325: 0x7547,
	13326: 0x7B60,
	13327: 0x83CC,
	13328: 0x921E,
	13329: 0xF908,
	13330: 0x6A58,
	13331: 0x514B,
	13332: 0x524B,
	13333: 0x5287,
	13334: 0x621F,
	13335: 0x68D8,
	13336: 0x6975,
	13337: 0x9699,
	13338: 0x50C5,
	13339: 0x52A4,
	13340: 0x52E4,
	13341: 0x61C3,
	13342: 0x65A4,
	13343: 0x6839,
	13344: 0x69FF,
	13345: 0x747E,
	13346: 0x7B4B,
	13347: 0x82B9,
	13348: 0x83EB,
	13349: 0x89B2,
	13350: 0x8B39,
	13351: 0x8FD1,
	13352: 0x9949,
	13353: 0xF909,
	13354: 0x4ECA,
	13355: 0x5997,
	13356: 0x64D2,
	13357: 0x6611,
	13358: 0x6A8E,
	13359: 0x7434,
	13360: 0x7981,
	13361: 0x79BD,
	13362: 0x82A9,
	13363: 0x887E,
	13364: 0x887F,
	13365: 0x895F,
	13366: 0xF90A,
	13367: 0x9326,
	13368: 0x4F0B,
	13369: 0x53CA,
	13370: 0x6025,
	13371: 0x6271,
	13372: 0x6C72,
	13373: 0x7D1A,
	13374: 0x7D66,
	13375: 0x4E98,
	13376: 0x5162,
	13377: 0x77DC,
	13378: 0x80AF,
	13379: 0x4F01,
	13380: 0x4F0E,
	13381: 0x5176,
	13382: 0x5180,
	13383: 0x55DC,
	13384: 0x5668,
	13385: 0x573B,
	13386: 0x57FA,
	13387: 0x57FC,
	13388: 0x5914,
	13389: 0x5947,
	13390: 0x5993,
	13391: 0x5BC4,
	13392: 0x5C90,
	13393: 0x5D0E,
	13394: 0x5DF1,
	13395: 0x5E7E,
	13396: 0x5FCC,
	13397: 0x6280,
	13398: 0x65D7,
	13399: 0x65E3,
	13400: 0x671E,
	13401: 0x671F,
	13402: 0x675E,
	13403: 0x68CB,
	13404: 0x68C4,
	13405: 0x6A5F,
	13406: 0x6B3A,
	13407: 0x6C23,
	13408: 0x6C7D,
	13409: 0x6C82,
	13410: 0x6DC7,
	13411: 0x7398,
	13412: 0x7426,
	13413: 0x742A,
	13414: 0x7482,
	13415: 0x74A3,
	13416: 0x7578,
	13417: 0x757F,
	13418: 0x7881,
	13419: 0x78EF,
	13420: 0x7941,
	13421: 0x7947,
	13422: 0x7948,
	13423: 0x797A,
	13424: 0x7B95,
	13425: 0x7D00,
	13426: 0x7DBA,
	13427: 0x7F88,
	13428: 0x8006,
	13429: 0x802D,
	13430: 0x808C,
	13431: 0x8A18,
	13432: 0x8B4F,
	13433: 0x8C48,
	13434: 0x8D77,
	13435: 0x9321,
	13436: 0x9324,
	13437: 0x98E2,
	13438: 0x9951,
	13439: 0x9A0E,
	13440: 0x9A0F,
	13441: 0x9A65,
	13442: 0x9E92,
	13443: 0x7DCA,
	13444: 0x4F76,
	13445: 0x5409,
	13446: 0x62EE,
	13447: 0x6854,
	13448: 0x91D1,
	13449: 0x55AB,
	13450: 0x513A,
	13451: 0xF90B,
	13452: 0xF90C,
	13453: 0x5A1C,
	13454: 0x61E6,
	13455: 0xF90D,
	13456: 0x62CF,
	13457: 0x62FF,
	13458: 0xF90E,
	13459: 0xF90F,
	13460: 0xF910,
	13461: 0xF911,
	13462: 0xF912,
	13463: 0xF913,
	13464: 0x90A3,
	13465: 0xF914,
	13466: 0xF915,
	13467: 0xF916,
	13468: 0xF917,
	13469: 0xF918,
	13470: 0x8AFE,
	13471: 0xF919,
	13472: 0xF91A,
	13473: 0xF91B,
	13474: 0xF91C,
	13475: 0x6696,
	13476: 0xF91D,
	13477: 0x7156,
	13478: 0xF91E,
	13479: 0xF91F,
	13480: 0x96E3,
	13481: 0xF920,
	13482: 0x634F,
	13483: 0x637A,
	13484: 0x5357,
	13485: 0xF921,
	13486: 0x678F,
	13487: 0x6960,
	13488: 0x6E73,
	13489: 0xF922,
	13490: 0x7537,
	13491: 0xF923,
	13492: 0xF924,
	13493: 0xF925,
	13494: 0x7D0D,
	13495: 0xF926,
	13496: 0xF927,
	13497: 0x8872,
	13498: 0x56CA,
	13499: 0x5A18,
	13500: 0xF928,
	13501: 0xF929,
	13502: 0xF92A,
	13503: 0xF92B,
	13504: 0xF92C,
	13505: 0x4E43,
	13506: 0xF92D,
	13507: 0x5167,
	13508: 0x5948,
	13509: 0x67F0,
	13510: 0x8010,
	13511: 0xF92E,
	13512: 0x5973,
	13513: 0x5E74,
	13514: 0x649A,
	13515: 0x79CA,
	13516: 0x5FF5,
	13517: 0x606C,
	13518: 0x62C8,
	13519: 0x637B,
	13520: 0x5BE7,
	13521: 0x5BD7,
	13522: 0x52AA,
	13523: 0xF92F,
	13524: 0x5974,
	13525: 0x5F29,
	13526: 0x6012,
	13527: 0xF930,
	13528: 0xF931,
	13529: 0xF932,
	13530: 0x7459,
	13531: 0xF933,
	13532: 0xF934,
	13533: 0xF935,
	13534: 0xF936,
	13535: 0xF937,
	13536: 0xF938,
	13537: 0x99D1,
	13538: 0xF939,
	13539: 0xF93A,
	13540: 0xF93B,
	13541: 0xF93C,
	13542: 0xF93D,
	13543: 0xF93E,
	13544: 0xF93F,
	13545: 0xF940,
	13546: 0xF941,
	13547: 0xF942,
	13548: 0xF943,
	13549: 0x6FC3,
	13550: 0xF944,
	13551: 0xF945,
	13552: 0x81BF,
	13553: 0x8FB2,
	13554: 0x60F1,
	13555: 0xF946,
	13556: 0xF947,
	13557: 0x8166,
	13558: 0xF948,
	13559: 0xF949,
	13560: 0x5C3F,
	13561: 0xF94A,
	13562: 0xF94B,
	13563: 0xF94C,
	13564: 0xF94D,
	13565: 0xF94E,
	13566: 0xF94F,
	13567: 0xF950,
	13568: 0xF951,
	13569: 0x5AE9,
	13570: 0x8A25,
	13571: 0x677B,
	13572: 0x7D10,
	13573: 0xF952,
	13574: 0xF953,
	13575: 0xF954,
	13576: 0xF955,
	13577: 0xF956,
	13578: 0xF957,
	13579: 0x80FD,
	13580: 0xF958,
	13581: 0xF959,
	13582: 0x5C3C,
	13583: 0x6CE5,
	13584: 0x533F,
	13585: 0x6EBA,
	13586: 0x591A,
	13587: 0x8336,
	13588: 0x4E39,
	13589: 0x4EB6,
	13590: 0x4F46,
	13591: 0x55AE,
	13592: 0x5718,
	13593: 0x58C7,
	13594: 0x5F56,
	13595: 0x65B7,
	13596: 0x65E6,
	13597: 0x6A80,
	13598: 0x6BB5,
	13599: 0x6E4D,
	13600: 0x77ED,
	13601: 0x7AEF,
	13602: 0x7C1E,
	13603: 0x7DDE,
	13604: 0x86CB,
	13605: 0x8892,
	13606: 0x9132,
	13607: 0x935B,
	13608: 0x64BB,
	13609: 0x6FBE,
	13610: 0x737A,
	13611: 0x75B8,
	13612: 0x9054,
	13613: 0x5556,
	13614: 0x574D,
	13615: 0x61BA,
	13616: 0x64D4,
	13617: 0x66C7,
	13618: 0x6DE1,
	13619: 0x6E5B,
	13620: 0x6F6D,
	13621: 0x6FB9,
	13622: 0x75F0,
	13623: 0x8043,
	13624: 0x81BD,
	13625: 0x8541,
	13626: 0x8983,
	13627: 0x8AC7,
	13628: 0x8B5A,
	13629: 0x931F,
	13630: 0x6C93,
	13631: 0x7553,
	13632: 0x7B54,
	13633: 0x8E0F,
	13634: 0x905D,
	13635: 0x5510,
	13636: 0x5802,
	13637: 0x5858,
	13638: 0x5E62,
	13639: 0x6207,
	13640: 0x649E,
	13641: 0x68E0,
	13642: 0x7576,
	13643: 0x7CD6,
	13644: 0x87B3,
	13645: 0x9EE8,
	13646: 0x4EE3,
	13647: 0x5788,
	13648: 0x576E,
	13649: 0x5927,
	13650: 0x5C0D,
	13651: 0x5CB1,
	13652: 0x5E36,
	13653: 0x5F85,
	13654: 0x6234,
	13655: 0x64E1,
	13656: 0x73B3,
	13657: 0x81FA,
	13658: 0x888B,
	13659: 0x8CB8,
	13660: 0x968A,
	13661: 0x9EDB,
	13662: 0x5B85,
	13663: 0x5FB7,
	13664: 0x60B3,
	13665: 0x5012,
	13666: 0x5200,
	13667: 0x5230,
	13668: 0x5716,
	13669: 0x5835,
	13670: 0x5857,
	13671: 0x5C0E,
	13672: 0x5C60,
	13673: 0x5CF6,
	13674: 0x5D8B,
	13675: 0x5EA6,
	13676: 0x5F92,
	13677: 0x60BC,
	13678: 0x6311,
	13679: 0x6389,
	13680: 0x6417,
	13681: 0x6843,
	13682: 0x68F9,
	13683: 0x6AC2,
	13684: 0x6DD8,
	13685: 0x6E21,
	13686: 0x6ED4,
	13687: 0x6FE4,
	13688: 0x71FE,
	13689: 0x76DC,
	13690: 0x7779,
	13691: 0x79B1,
	13692: 0x7A3B,
	13693: 0x8404,
	13694: 0x89A9,
	13695: 0x8CED,
	13696: 0x8DF3,
	13697: 0x8E48,
	13698: 0x9003,
	13699: 0x9014,
	13700: 0x9053,
	13701: 0x90FD,
	13702: 0x934D,
	13703: 0x9676,
	13704: 0x97DC,
	13705: 0x6BD2,
	13706: 0x7006,
	13707: 0x7258,
	13708: 0x72A2,
	13709: 0x7368,
	13710: 0x7763,
	13711: 0x79BF,
	13712: 0x7BE4,
	13713: 0x7E9B,
	13714: 0x8B80,
	13715: 0x58A9,
	13716: 0x60C7,
	13717: 0x6566,
	13718: 0x65FD,
	13719: 0x66BE,
	13720: 0x6C8C,
	13721: 0x711E,
	13722: 0x71C9,
	13723: 0x8C5A,
	13724: 0x9813,
	13725: 0x4E6D,
	13726: 0x7A81,
	13727: 0x4EDD,
	13728: 0x51AC,
	13729: 0x51CD,
	13730: 0x52D5,
	13731: 0x540C,
	13732: 0x61A7,
	13733: 0x6771,
	13734: 0x6850,
	13735: 0x68DF,
	13736: 0x6D1E,
	13737: 0x6F7C,
	13738: 0x75BC,
	13739: 0x77B3,
	13740: 0x7AE5,
	13741: 0x80F4,
	13742: 0x8463,
	13743: 0x9285,
	13744: 0x515C,
	13745: 0x6597,
	13746: 0x675C,
	13747: 0x6793,
	13748: 0x75D8,
	13749: 0x7AC7,
	13750: 0x8373,
	13751: 0xF95A,
	13752: 0x8C46,
	13753: 0x9017,
	13754: 0x982D,
	13755: 0x5C6F,
	13756: 0x81C0,
	13757: 0x829A,
	13758: 0x9041,
	13759: 0x906F,
	13760: 0x920D,
	13761: 0x5F97,
	13762: 0x5D9D,
	13763: 0x6A59,
	13764: 0x71C8,
	13765: 0x767B,
	13766: 0x7B49,
	13767: 0x85E4,
	13768: 0x8B04,
	13769: 0x9127,
	13770: 0x9A30,
	13771: 0x5587,
	13772: 0x61F6,
	13773: 0xF95B,
	13774: 0x7669,
	13775: 0x7F85,
	13776: 0x863F,
	13777: 0x87BA,
	13778: 0x88F8,
	13779: 0x908F,
	13780: 0xF95C,
	13781: 0x6D1B,
	13782: 0x70D9,
	13783: 0x73DE,
	13784: 0x7D61,
	13785: 0x843D,
	13786: 0xF95D,
	13787: 0x916A,
	13788: 0x99F1,
	13789: 0xF95E,
	13790: 0x4E82,
	13791: 0x5375,
	13792: 0x6B04,
	13793: 0x6B12,
	13794: 0x703E,
	13795: 0x721B,
	13796: 0x862D,
	13797: 0x9E1E,
	13798: 0x524C,
	13799: 0x8FA3,
	13800: 0x5D50,
	13801: 0x64E5,
	13802: 0x652C,
	13803: 0x6B16,
	13804: 0x6FEB,
	13805: 0x7C43,
	13806: 0x7E9C,
	13807: 0x85CD,
	13808: 0x8964,
	13809: 0x89BD,
	13810: 0x62C9,
	13811: 0x81D8,
	13812: 0x881F,
	13813: 0x5ECA,
	13814: 0x6717,
	13815: 0x6D6A,
	13816: 0x72FC,
	13817: 0x7405,
	13818: 0x746F,
	13819: 0x8782,
	13820: 0x90DE,
	13821: 0x4F86,
	13822: 0x5D0D,
	13823: 0x5FA0,
	13824: 0x840A,
	13825: 0x51B7,
	13826: 0x63A0,
	13827: 0x7565,
	13828: 0x4EAE,
	13829: 0x5006,
	13830: 0x5169,
	13831: 0x51C9,
	13832: 0x6881,
	13833: 0x6A11,
	13834: 0x7CAE,
	13835: 0x7CB1,
	13836: 0x7CE7,
	13837: 0x826F,
	13838: 0x8AD2,
	13839: 0x8F1B,
	13840: 0x91CF,
	13841: 0x4FB6,
	13842: 0x5137,
	13843: 0x52F5,
	13844: 0x5442,
	13845: 0x5EEC,
	13846: 0x616E,
	13847: 0x623E,
	13848: 0x65C5,
	13849: 0x6ADA,
	13850: 0x6FFE,
	13851: 0x792A,
	13852: 0x85DC,
	13853: 0x8823,
	13854: 0x95AD,
	13855: 0x9A62,
	13856: 0x9A6A,
	13857: 0x9E97,
	13858: 0x9ECE,
	13859: 0x529B,
	13860: 0x66C6,
	13861: 0x6B77,
	13862: 0x701D,
	13863: 0x792B,
	13864: 0x8F62,
	13865: 0x9742,
	13866: 0x6190,
	13867: 0x6200,
	13868: 0x6523,
	13869: 0x6F23,
	13870: 0x7149,
	13871: 0x7489,
	13872: 0x7DF4,
	13873: 0x806F,
	13874: 0x84EE,
	13875: 0x8F26,
	13876: 0x9023,
	13877: 0x934A,
	13878: 0x51BD,
	13879: 0x5217,
	13880: 0x52A3,
	13881: 0x6D0C,
	13882: 0x70C8,
	13883: 0x88C2,
	13884: 0x5EC9,
	13885: 0x6582,
	13886: 0x6BAE,
	13887: 0x6FC2,
	13888: 0x7C3E,
	13889: 0x7375,
	13890: 0x4EE4,
	13891: 0x4F36,
	13892: 0x56F9,
	13893: 0xF95F,
	13894: 0x5CBA,
	13895: 0x5DBA,
	13896: 0x601C,
	13897: 0x73B2,
	13898: 0x7B2D,
	13899: 0x7F9A,
	13900: 0x7FCE,
	13901: 0x8046,
	13902: 0x901E,
	13903: 0x9234,
	13904: 0x96F6,
	13905: 0x9748,
	13906: 0x9818,
	13907: 0x9F61,
	13908: 0x4F8B,
	13909: 0x6FA7,
	13910: 0x79AE,
	13911: 0x91B4,
	13912: 0x96B7,
	13913: 0x52DE,
	13914: 0xF960,
	13915: 0x6488,
	13916: 0x64C4,
	13917: 0x6AD3,
	13918: 0x6F5E,
	13919: 0x7018,
	13920: 0x7210,
	13921: 0x76E7,
	13922: 0x8001,
	13923: 0x8606,
	13924: 0x865C,
	13925: 0x8DEF,
	13926: 0x8F05,
	13927: 0x9732,
	13928: 0x9B6F,
	13929: 0x9DFA,
	13930: 0x9E75,
	13931: 0x788C,
	13932: 0x797F,
	13933: 0x7DA0,
	13934: 0x83C9,
	13935: 0x9304,
	13936: 0x9E7F,
	13937: 0x9E93,
	13938: 0x8AD6,
	13939: 0x58DF,
	13940: 0x5F04,
	13941: 0x6727,
	13942: 0x7027,
	13943: 0x74CF,
	13944: 0x7C60,
	13945: 0x807E,
	13946: 0x5121,
	13947: 0x7028,
	13948: 0x7262,
	13949: 0x78CA,
	13950: 0x8CC2,
	13951: 0x8CDA,
	13952: 0x8CF4,
	13953: 0x96F7,
	13954: 0x4E86,
	13955: 0x50DA,
	13956: 0x5BEE,
	13957: 0x5ED6,
	13958: 0x6599,
	13959: 0x71CE,
	13960: 0x7642,
	13961: 0x77AD,
	13962: 0x804A,
	13963: 0x84FC,
	13964: 0x907C,
	13965: 0x9B27,
	13966: 0x9F8D,
	13967: 0x58D8,
	13968: 0x5A41,
	13969: 0x5C62,
	13970: 0x6A13,
	13971: 0x6DDA,
	13972: 0x6F0F,
	13973: 0x763B,
	13974: 0x7D2F,
	13975: 0x7E37,
	13976: 0x851E,
	13977: 0x8938,
	13978: 0x93E4,
	13979: 0x964B,
	13980: 0x5289,
	13981: 0x65D2,
	13982: 0x67F3,
	13983: 0x69B4,
	13984: 0x6D41,
	13985: 0x6E9C,
	13986: 0x700F,
	13987: 0x7409,
	13988: 0x7460,
	13989: 0x7559,
	13990: 0x7624,
	13991: 0x786B,
	13992: 0x8B2C,
	13993: 0x985E,
	13994: 0x516D,
	13995: 0x622E,
	13996: 0x9678,
	13997: 0x4F96,
	13998: 0x502B,
	13999: 0x5D19,
	14000: 0x6DEA,
	14001: 0x7DB8,
	14002: 0x8F2A,
	14003: 0x5F8B,
	14004: 0x6144,
	14005: 0x6817,
	14006: 0xF961,
	14007: 0x9686,
	14008: 0x52D2,
	14009: 0x808B,
	14010: 0x51DC,
	14011: 0x51CC,
	14012: 0x695E,
	14013: 0x7A1C,
	14014: 0x7DBE,
	14015: 0x83F1,
	14016: 0x9675,
	14017: 0x4FDA,
	14018: 0x5229,
	14019: 0x5398,
	14020: 0x540F,
	14021: 0x550E,
	14022: 0x5C65,
	14023: 0x60A7,
	14024: 0x674E,
	14025: 0x68A8,
	14026: 0x6D6C,
	14027: 0x7281,
	14028: 0x72F8,
	14029: 0x7406,
	14030: 0x7483,
	14031: 0xF962,
	14032: 0x75E2,
	14033: 0x7C6C,
	14034: 0x7F79,
	14035: 0x7FB8,
	14036: 0x8389,
	14037: 0x88CF,
	14038: 0x88E1,
	14039: 0x91CC,
	14040: 0x91D0,
	14041: 0x96E2,
	14042: 0x9BC9,
	14043: 0x541D,
	14044: 0x6F7E,
	14045: 0x71D0,
	14046: 0x7498,
	14047: 0x85FA,
	14048: 0x8EAA,
	14049: 0x96A3,
	14050: 0x9C57,
	14051: 0x9E9F,
	14052: 0x6797,
	14053: 0x6DCB,
	14054: 0x7433,
	14055: 0x81E8,
	14056: 0x9716,
	14057: 0x782C,
	14058: 0x7ACB,
	14059: 0x7B20,
	14060: 0x7C92,
	14061: 0x6469,
	14062: 0x746A,
	14063: 0x75F2,
	14064: 0x78BC,
	14065: 0x78E8,
	14066: 0x99AC,
	14067: 0x9B54,
	14068: 0x9EBB,
	14069: 0x5BDE,
	14070: 0x5E55,
	14071: 0x6F20,
	14072: 0x819C,
	14073: 0x83AB,
	14074: 0x9088,
	14075: 0x4E07,
	14076: 0x534D,
	14077: 0x5A29,
	14078: 0x5DD2,
	14079: 0x5F4E,
	14080: 0x6162,
	14081: 0x633D,
	14082: 0x6669,
	14083: 0x66FC,
	14084: 0x6EFF,
	14085: 0x6F2B,
	14086: 0x7063,
	14087: 0x779E,
	14088: 0x842C,
	14089: 0x8513,
	14090: 0x883B,
	14091: 0x8F13,
	14092: 0x9945,
	14093: 0x9C3B,
	14094: 0x551C,
	14095: 0x62B9,
	14096: 0x672B,
	14097: 0x6CAB,
	14098: 0x8309,
	14099: 0x896A,
	14100: 0x977A,
	14101: 0x4EA1,
	14102: 0x5984,
	14103: 0x5FD8,
	14104: 0x5FD9,
	14105: 0x671B,
	14106: 0x7DB2,
	14107: 0x7F54,
	14108: 0x8292,
	14109: 0x832B,
	14110: 0x83BD,
	14111: 0x8F1E,
	14112: 0x9099,
	14113: 0x57CB,
	14114: 0x59B9,
	14115: 0x5A92,
	14116: 0x5BD0,
	14117: 0x6627,
	14118: 0x679A,
	14119: 0x6885,
	14120: 0x6BCF,
	14121: 0x7164,
	14122: 0x7F75,
	14123: 0x8CB7,
	14124: 0x8CE3,
	14125: 0x9081,
	14126: 0x9B45,
	14127: 0x8108,
	14128: 0x8C8A,
	14129: 0x964C,
	14130: 0x9A40,
	14131: 0x9EA5,
	14132: 0x5B5F,
	14133: 0x6C13,
	14134: 0x731B,
	14135: 0x76F2,
	14136: 0x76DF,
	14137: 0x840C,
	14138: 0x51AA,
	14139: 0x8993,
	14140: 0x514D,
	14141: 0x5195,
	14142: 0x52C9,
	14143: 0x68C9,
	14144: 0x6C94,
	14145: 0x7704,
	14146: 0x7720,
	14147: 0x7DBF,
	14148: 0x7DEC,
	14149: 0x9762,
	14150: 0x9EB5,
	14151: 0x6EC5,
	14152: 0x8511,
	14153: 0x51A5,
	14154: 0x540D,
	14155: 0x547D,
	14156: 0x660E,
	14157: 0x669D,
	14158: 0x6927,
	14159: 0x6E9F,
	14160: 0x76BF,
	14161: 0x7791,
	14162: 0x8317,
	14163: 0x84C2,
	14164: 0x879F,
	14165: 0x9169,
	14166: 0x9298,
	14167: 0x9CF4,
	14168: 0x8882,
	14169: 0x4FAE,
	14170: 0x5192,
	14171: 0x52DF,
	14172: 0x59C6,
	14173: 0x5E3D,
	14174: 0x6155,
	14175: 0x6478,
	14176: 0x6479,
	14177: 0x66AE,
	14178: 0x67D0,
	14179: 0x6A21,
	14180: 0x6BCD,
	14181: 0x6BDB,
	14182: 0x725F,
	14183: 0x7261,
	14184: 0x7441,
	14185: 0x7738,
	14186: 0x77DB,
	14187: 0x8017,
	14188: 0x82BC,
	14189: 0x8305,
	14190: 0x8B00,
	14191: 0x8B28,
	14192: 0x8C8C,
	14193: 0x6728,
	14194: 0x6C90,
	14195: 0x7267,
	14196: 0x76EE,
	14197: 0x7766,
	14198: 0x7A46,
	14199: 0x9DA9,
	14200: 0x6B7F,
	14201: 0x6C92,
	14202: 0x5922,
	14203: 0x6726,
	14204: 0x8499,
	14205: 0x536F,
	14206: 0x5893,
	14207: 0x5999,
	14208: 0x5EDF,
	14209: 0x63CF,
	14210: 0x6634,
	14211: 0x6773,
	14212: 0x6E3A,
	14213: 0x732B,
	14214: 0x7AD7,
	14215: 0x82D7,
	14216: 0x9328,
	14217: 0x52D9,
	14218: 0x5DEB,
	14219: 0x61AE,
	14220: 0x61CB,
	14221: 0x620A,
	14222: 0x62C7,
	14223: 0x64AB,
	14224: 0x65E0,
	14225: 0x6959,
	14226: 0x6B66,
	14227: 0x6BCB,
	14228: 0x7121,
	14229: 0x73F7,
	14230: 0x755D,
	14231: 0x7E46,
	14232: 0x821E,
	14233: 0x8302,
	14234: 0x856A,
	14235: 0x8AA3,
	14236: 0x8CBF,
	14237: 0x9727,
	14238: 0x9D61,
	14239: 0x58A8,
	14240: 0x9ED8,
	14241: 0x5011,
	14242: 0x520E,
	14243: 0x543B,
	14244: 0x554F,
	14245: 0x6587,
	14246: 0x6C76,
	14247: 0x7D0A,
	14248: 0x7D0B,
	14249: 0x805E,
	14250: 0x868A,
	14251: 0x9580,
	14252: 0x96EF,
	14253: 0x52FF,
	14254: 0x6C95,
	14255: 0x7269,
	14256: 0x5473,
	14257: 0x5A9A,
	14258: 0x5C3E,
	14259: 0x5D4B,
	14260: 0x5F4C,
	14261: 0x5FAE,
	14262: 0x672A,
	14263: 0x68B6,
	14264: 0x6963,
	14265: 0x6E3C,
	14266: 0x6E44,
	14267: 0x7709,
	14268: 0x7C73,
	14269: 0x7F8E,
	14270: 0x8587,
	14271: 0x8B0E,
	14272: 0x8FF7,
	14273: 0x9761,
	14274: 0x9EF4,
	14275: 0x5CB7,
	14276: 0x60B6,
	14277: 0x610D,
	14278: 0x61AB,
	14279: 0x654F,
	14280: 0x65FB,
	14281: 0x65FC,
	14282: 0x6C11,
	14283: 0x6CEF,
	14284: 0x739F,
	14285: 0x73C9,
	14286: 0x7DE1,
	14287: 0x9594,
	14288: 0x5BC6,
	14289: 0x871C,
	14290: 0x8B10,
	14291: 0x525D,
	14292: 0x535A,
	14293: 0x62CD,
	14294: 0x640F,
	14295: 0x64B2,
	14296: 0x6734,
	14297: 0x6A38,
	14298: 0x6CCA,
	14299: 0x73C0,
	14300: 0x749E,
	14301: 0x7B94,
	14302: 0x7C95,
	14303: 0x7E1B,
	14304: 0x818A,
	14305: 0x8236,
	14306: 0x8584,
	14307: 0x8FEB,
	14308: 0x96F9,
	14309: 0x99C1,
	14310: 0x4F34,
	14311: 0x534A,
	14312: 0x53CD,
	14313: 0x53DB,
	14314: 0x62CC,
	14315: 0x642C,
	14316: 0x6500,
	14317: 0x6591,
	14318: 0x69C3,
	14319: 0x6CEE,
	14320: 0x6F58,
	14321: 0x73ED,
	14322: 0x7554,
	14323: 0x7622,
	14324: 0x76E4,
	14325: 0x76FC,
	14326: 0x78D0,
	14327: 0x78FB,
	14328: 0x792C,
	14329: 0x7D46,
	14330: 0x822C,
	14331: 0x87E0,
	14332: 0x8FD4,
	14333: 0x9812,
	14334: 0x98EF,
	14335: 0x52C3,
	14336: 0x62D4,
	14337: 0x64A5,
	14338: 0x6E24,
	14339: 0x6F51,
	14340: 0x767C,
	14341: 0x8DCB,
	14342: 0x91B1,
	14343: 0x9262,
	14344: 0x9AEE,
	14345: 0x9B43,
	14346: 0x5023,
	14347: 0x508D,
	14348: 0x574A,
	14349: 0x59A8,
	14350: 0x5C28,
	14351: 0x5E47,
	14352: 0x5F77,
	14353: 0x623F,
	14354: 0x653E,
	14355: 0x65B9,
	14356: 0x65C1,
	14357: 0x6609,
	14358: 0x678B,
	14359: 0x699C,
	14360: 0x6EC2,
	14361: 0x78C5,
	14362: 0x7D21,
	14363: 0x80AA,
	14364: 0x8180,
	14365: 0x822B,
	14366: 0x82B3,
	14367: 0x84A1,
	14368: 0x868C,
	14369: 0x8A2A,
	14370: 0x8B17,
	14371: 0x90A6,
	14372: 0x9632,
	14373: 0x9F90,
	14374: 0x500D,
	14375: 0x4FF3,
	14376: 0xF963,
	14377: 0x57F9,
	14378: 0x5F98,
	14379: 0x62DC,
	14380: 0x6392,
	14381: 0x676F,
	14382: 0x6E43,
	14383: 0x7119,
	14384: 0x76C3,
	14385: 0x80CC,
	14386: 0x80DA,
	14387: 0x88F4,
	14388: 0x88F5,
	14389: 0x8919,
	14390: 0x8CE0,
	14391: 0x8F29,
	14392: 0x914D,
	14393: 0x966A,
	14394: 0x4F2F,
	14395: 0x4F70,
	14396: 0x5E1B,
	14397: 0x67CF,
	14398: 0x6822,
	14399: 0x767D,
	14400: 0x767E,
	14401: 0x9B44,
	14402: 0x5E61,
	14403: 0x6A0A,
	14404: 0x7169,
	14405: 0x71D4,
	14406: 0x756A,
	14407: 0xF964,
	14408: 0x7E41,
	14409: 0x8543,
	14410: 0x85E9,
	14411: 0x98DC,
	14412: 0x4F10,
	14413: 0x7B4F,
	14414: 0x7F70,
	14415: 0x95A5,
	14416: 0x51E1,
	14417: 0x5E06,
	14418: 0x68B5,
	14419: 0x6C3E,
	14420: 0x6C4E,
	14421: 0x6CDB,
	14422: 0x72AF,
	14423: 0x7BC4,
	14424: 0x8303,
	14425: 0x6CD5,
	14426: 0x743A,
	14427: 0x50FB,
	14428: 0x5288,
	14429: 0x58C1,
	14430: 0x64D8,
	14431: 0x6A97,
	14432: 0x74A7,
	14433: 0x7656,
	14434: 0x78A7,
	14435: 0x8617,
	14436: 0x95E2,
	14437: 0x9739,
	14438: 0xF965,
	14439: 0x535E,
	14440: 0x5F01,
	14441: 0x8B8A,
	14442: 0x8FA8,
	14443: 0x8FAF,
	14444: 0x908A,
	14445: 0x5225,
	14446: 0x77A5,
	14447: 0x9C49,
	14448: 0x9F08,
	14449: 0x4E19,
	14450: 0x5002,
	14451: 0x5175,
	14452: 0x5C5B,
	14453: 0x5E77,
	14454: 0x661E,
	14455: 0x663A,
	14456: 0x67C4,
	14457: 0x68C5,
	14458: 0x70B3,
	14459: 0x7501,
	14460: 0x75C5,
	14461: 0x79C9,
	14462: 0x7ADD,
	14463: 0x8F27,
	14464: 0x9920,
	14465: 0x9A08,
	14466: 0x4FDD,
	14467: 0x5821,
	14468: 0x5831,
	14469: 0x5BF6,
	14470: 0x666E,
	14471: 0x6B65,
	14472: 0x6D11,
	14473: 0x6E7A,
	14474: 0x6F7D,
	14475: 0x73E4,
	14476: 0x752B,
	14477: 0x83E9,
	14478: 0x88DC,
	14479: 0x8913,
	14480: 0x8B5C,
	14481: 0x8F14,
	14482: 0x4F0F,
	14483: 0x50D5,
	14484: 0x5310,
	14485: 0x535C,
	14486: 0x5B93,
	14487: 0x5FA9,
	14488: 0x670D,
	14489: 0x798F,
	14490: 0x8179,
	14491: 0x832F,
	14492: 0x8514,
	14493: 0x8907,
	14494: 0x8986,
	14495: 0x8F39,
	14496: 0x8F3B,
	14497: 0x99A5,
	14498: 0x9C12,
	14499: 0x672C,
	14500: 0x4E76,
	14501: 0x4FF8,
	14502: 0x5949,
	14503: 0x5C01,
	14504: 0x5CEF,
	14505: 0x5CF0,
	14506: 0x6367,
	14507: 0x68D2,
	14508: 0x70FD,
	14509: 0x71A2,
	14510: 0x742B,
	14511: 0x7E2B,
	14512: 0x84EC,
	14513: 0x8702,
	14514: 0x9022,
	14515: 0x92D2,
	14516: 0x9CF3,
	14517: 0x4E0D,
	14518: 0x4ED8,
	14519: 0x4FEF,
	14520: 0x5085,
	14521: 0x5256,
	14522: 0x526F,
	14523: 0x5426,
	14524: 0x5490,
	14525: 0x57E0,
	14526: 0x592B,
	14527: 0x5A66,
	14528: 0x5B5A,
	14529: 0x5B75,
	14530: 0x5BCC,
	14531: 0x5E9C,
	14532: 0xF966,
	14533: 0x6276,
	14534: 0x6577,
	14535: 0x65A7,
	14536: 0x6D6E,
	14537: 0x6EA5,
	14538: 0x7236,
	14539: 0x7B26,
	14540: 0x7C3F,
	14541: 0x7F36,
	14542: 0x8150,
	14543: 0x8151,
	14544: 0x819A,
	14545: 0x8240,
	14546: 0x8299,
	14547: 0x83A9,
	14548: 0x8A03,
	14549: 0x8CA0,
	14550: 0x8CE6,
	14551: 0x8CFB,
	14552: 0x8D74,
	14553: 0x8DBA,
	14554: 0x90E8,
	14555: 0x91DC,
	14556: 0x961C,
	14557: 0x9644,
	14558: 0x99D9,
	14559: 0x9CE7,
	14560: 0x5317,
	14561: 0x5206,
	14562: 0x5429,
	14563: 0x5674,
	14564: 0x58B3,
	14565: 0x5954,
	14566: 0x596E,
	14567: 0x5FFF,
	14568: 0x61A4,
	14569: 0x626E,
	14570: 0x6610,
	14571: 0x6C7E,
	14572: 0x711A,
	14573: 0x76C6,
	14574: 0x7C89,
	14575: 0x7CDE,
	14576: 0x7D1B,
	14577: 0x82AC,
	14578: 0x8CC1,
	14579: 0x96F0,
	14580: 0xF967,
	14581: 0x4F5B,
	14582: 0x5F17,
	14583: 0x5F7F,
	14584: 0x62C2,
	14585: 0x5D29,
	14586: 0x670B,
	14587: 0x68DA,
	14588: 0x787C,
	14589: 0x7E43,
	14590: 0x9D6C,
	14591: 0x4E15,
	14592: 0x5099,
	14593: 0x5315,
	14594: 0x532A,
	14595: 0x5351,
	14596: 0x5983,
	14597: 0x5A62,
	14598: 0x5E87,
	14599: 0x60B2,
	14600: 0x618A,
	14601: 0x6249,
	14602: 0x6279,
	14603: 0x6590,
	14604: 0x6787,
	14605: 0x69A7,
	14606: 0x6BD4,
	14607: 0x6BD6,
	14608: 0x6BD7,
	14609: 0x6BD8,
	14610: 0x6CB8,
	14611: 0xF968,
	14612: 0x7435,
	14613: 0x75FA,
	14614: 0x7812,
	14615: 0x7891,
	14616: 0x79D5,
	14617: 0x79D8,
	14618: 0x7C83,
	14619: 0x7DCB,
	14620: 0x7FE1,
	14621: 0x80A5,
	14622: 0x813E,
	14623: 0x81C2,
	14624: 0x83F2,
	14625: 0x871A,
	14626: 0x88E8,
	14627: 0x8AB9,
	14628: 0x8B6C,
	14629: 0x8CBB,
	14630: 0x9119,
	14631: 0x975E,
	14632: 0x98DB,
	14633: 0x9F3B,
	14634: 0x56AC,
	14635: 0x5B2A,
	14636: 0x5F6C,
	14637: 0x658C,
	14638: 0x6AB3,
	14639: 0x6BAF,
	14640: 0x6D5C,
	14641: 0x6FF1,
	14642: 0x7015,
	14643: 0x725D,
	14644: 0x73AD,
	14645: 0x8CA7,
	14646: 0x8CD3,
	14647: 0x983B,
	14648: 0x6191,
	14649: 0x6C37,
	14650: 0x8058,
	14651: 0x9A01,
	14652: 0x4E4D,
	14653: 0x4E8B,
	14654: 0x4E9B,
	14655: 0x4ED5,
	14656: 0x4F3A,
	14657: 0x4F3C,
	14658: 0x4F7F,
	14659: 0x4FDF,
	14660: 0x50FF,
	14661: 0x53F2,
	14662: 0x53F8,
	14663: 0x5506,
	14664: 0x55E3,
	14665: 0x56DB,
	14666: 0x58EB,
	14667: 0x5962,
	14668: 0x5A11,
	14669: 0x5BEB,
	14670: 0x5BFA,
	14671: 0x5C04,
	14672: 0x5DF3,
	14673: 0x5E2B,
	14674: 0x5F99,
	14675: 0x601D,
	14676: 0x6368,
	14677: 0x659C,
	14678: 0x65AF,
	14679: 0x67F6,
	14680: 0x67FB,
	14681: 0x68AD,
	14682: 0x6B7B,
	14683: 0x6C99,
	14684: 0x6CD7,
	14685: 0x6E23,
	14686: 0x7009,
	14687: 0x7345,
	14688: 0x7802,
	14689: 0x793E,
	14690: 0x7940,
	14691: 0x7960,
	14692: 0x79C1,
	14693: 0x7BE9,
	14694: 0x7D17,
	14695: 0x7D72,
	14696: 0x8086,
	14697: 0x820D,
	14698: 0x838E,
	14699: 0x84D1,
	14700: 0x86C7,
	14701: 0x88DF,
	14702: 0x8A50,
	14703: 0x8A5E,
	14704: 0x8B1D,
	14705: 0x8CDC,
	14706: 0x8D66,
	14707: 0x8FAD,
	14708: 0x90AA,
	14709: 0x98FC,
	14710: 0x99DF,
	14711: 0x9E9D,
	14712: 0x524A,
	14713: 0xF969,
	14714: 0x6714,
	14715: 0xF96A,
	14716: 0x5098,
	14717: 0x522A,
	14718: 0x5C71,
	14719: 0x6563,
	14720: 0x6C55,
	14721: 0x73CA,
	14722: 0x7523,
	14723: 0x759D,
	14724: 0x7B97,
	14725: 0x849C,
	14726: 0x9178,
	14727: 0x9730,
	14728: 0x4E77,
	14729: 0x6492,
	14730: 0x6BBA,
	14731: 0x715E,
	14732: 0x85A9,
	14733: 0x4E09,
	14734: 0xF96B,
	14735: 0x6749,
	14736: 0x68EE,
	14737: 0x6E17,
	14738: 0x829F,
	14739: 0x8518,
	14740: 0x886B,
	14741: 0x63F7,
	14742: 0x6F81,
	14743: 0x9212,
	14744: 0x98AF,
	14745: 0x4E0A,
	14746: 0x50B7,
	14747: 0x50CF,
	14748: 0x511F,
	14749: 0x5546,
	14750: 0x55AA,
	14751: 0x5617,
	14752: 0x5B40,
	14753: 0x5C19,
	14754: 0x5CE0,
	14755: 0x5E38,
	14756: 0x5E8A,
	14757: 0x5EA0,
	14758: 0x5EC2,
	14759: 0x60F3,
	14760: 0x6851,
	14761: 0x6A61,
	14762: 0x6E58,
	14763: 0x723D,
	14764: 0x7240,
	14765: 0x72C0,
	14766: 0x76F8,
	14767: 0x7965,
	14768: 0x7BB1,
	14769: 0x7FD4,
	14770: 0x88F3,
	14771: 0x89F4,
	14772: 0x8A73,
	14773: 0x8C61,
	14774: 0x8CDE,
	14775: 0x971C,
	14776: 0x585E,
	14777: 0x74BD,
	14778: 0x8CFD,
	14779: 0x55C7,
	14780: 0xF96C,
	14781: 0x7A61,
	14782: 0x7D22,
	14783: 0x8272,
	14784: 0x7272,
	14785: 0x751F,
	14786: 0x7525,
	14787: 0xF96D,
	14788: 0x7B19,
	14789: 0x5885,
	14790: 0x58FB,
	14791: 0x5DBC,
	14792: 0x5E8F,
	14793: 0x5EB6,
	14794: 0x5F90,
	14795: 0x6055,
	14796: 0x6292,
	14797: 0x637F,
	14798: 0x654D,
	14799: 0x6691,
	14800: 0x66D9,
	14801: 0x66F8,
	14802: 0x6816,
	14803: 0x68F2,
	14804: 0x7280,
	14805: 0x745E,
	14806: 0x7B6E,
	14807: 0x7D6E,
	14808: 0x7DD6,
	14809: 0x7F72,
	14810: 0x80E5,
	14811: 0x8212,
	14812: 0x85AF,
	14813: 0x897F,
	14814: 0x8A93,
	14815: 0x901D,
	14816: 0x92E4,
	14817: 0x9ECD,
	14818: 0x9F20,
	14819: 0x5915,
	14820: 0x596D,
	14821: 0x5E2D,
	14822: 0x60DC,
	14823: 0x6614,
	14824: 0x6673,
	14825: 0x6790,
	14826: 0x6C50,
	14827: 0x6DC5,
	14828: 0x6F5F,
	14829: 0x77F3,
	14830: 0x78A9,
	14831: 0x84C6,
	14832: 0x91CB,
	14833: 0x932B,
	14834: 0x4ED9,
	14835: 0x50CA,
	14836: 0x5148,
	14837: 0x5584,
	14838: 0x5B0B,
	14839: 0x5BA3,
	14840: 0x6247,
	14841: 0x657E,
	14842: 0x65CB,
	14843: 0x6E32,
	14844: 0x717D,
	14845: 0x7401,
	14846: 0x7444,
	14847: 0x7487,
	14848: 0x74BF,
	14849: 0x766C,
	14850: 0x79AA,
	14851: 0x7DDA,
	14852: 0x7E55,
	14853: 0x7FA8,
	14854: 0x817A,
	14855: 0x81B3,
	14856: 0x8239,
	14857: 0x861A,
	14858: 0x87EC,
	14859: 0x8A75,
	14860: 0x8DE3,
	14861: 0x9078,
	14862: 0x9291,
	14863: 0x9425,
	14864: 0x994D,
	14865: 0x9BAE,
	14866: 0x5368,
	14867: 0x5C51,
	14868: 0x6954,
	14869: 0x6CC4,
	14870: 0x6D29,
	14871: 0x6E2B,
	14872: 0x820C,
	14873: 0x859B,
	14874: 0x893B,
	14875: 0x8A2D,
	14876: 0x8AAA,
	14877: 0x96EA,
	14878: 0x9F67,
	14879: 0x5261,
	14880: 0x66B9,
	14881: 0x6BB2,
	14882: 0x7E96,
	14883: 0x87FE,
	14884: 0x8D0D,
	14885: 0x9583,
	14886: 0x965D,
	14887: 0x651D,
	14888: 0x6D89,
	14889: 0x71EE,
	14890: 0xF96E,
	14891: 0x57CE,
	14892: 0x59D3,
	14893: 0x5BAC,
	14894: 0x6027,
	14895: 0x60FA,
	14896: 0x6210,
	14897: 0x661F,
	14898: 0x665F,
	14899: 0x7329,
	14900: 0x73F9,
	14901: 0x76DB,
	14902: 0x7701,
	14903: 0x7B6C,
	14904: 0x8056,
	14905: 0x8072,
	14906: 0x8165,
	14907: 0x8AA0,
	14908: 0x9192,
	14909: 0x4E16,
	14910: 0x52E2,
	14911: 0x6B72,
	14912: 0x6D17,
	14913: 0x7A05,
	14914: 0x7B39,
	14915: 0x7D30,
	14916: 0xF96F,
	14917: 0x8CB0,
	14918: 0x53EC,
	14919: 0x562F,
	14920: 0x5851,
	14921: 0x5BB5,
	14922: 0x5C0F,
	14923: 0x5C11,
	14924: 0x5DE2,
	14925: 0x6240,
	14926: 0x6383,
	14927: 0x6414,
	14928: 0x662D,
	14929: 0x68B3,
	14930: 0x6CBC,
	14931: 0x6D88,
	14932: 0x6EAF,
	14933: 0x701F,
	14934: 0x70A4,
	14935: 0x71D2,
	14936: 0x7526,
	14937: 0x758F,
	14938: 0x758E,
	14939: 0x7619,
	14940: 0x7B11,
	14941: 0x7BE0,
	14942: 0x7C2B,
	14943: 0x7D20,
	14944: 0x7D39,
	14945: 0x852C,
	14946: 0x856D,
	14947: 0x8607,
	14948: 0x8A34,
	14949: 0x900D,
	14950: 0x9061,
	14951: 0x90B5,
	14952: 0x92B7,
	14953: 0x97F6,
	14954: 0x9A37,
	14955: 0x4FD7,
	14956: 0x5C6C,
	14957: 0x675F,
	14958: 0x6D91,
	14959: 0x7C9F,
	14960: 0x7E8C,
	14961: 0x8B16,
	14962: 0x8D16,
	14963: 0x901F,
	14964: 0x5B6B,
	14965: 0x5DFD,
	14966: 0x640D,
	14967: 0x84C0,
	14968: 0x905C,
	14969: 0x98E1,
	14970: 0x7387,
	14971: 0x5B8B,
	14972: 0x609A,
	14973: 0x677E,
	14974: 0x6DDE,
	14975: 0x8A1F,
	14976: 0x8AA6,
	14977: 0x9001,
	14978: 0x980C,
	14979: 0x5237,
	14980: 0xF970,
	14981: 0x7051,
	14982: 0x788E,
	14983: 0x9396,
	14984: 0x8870,
	14985: 0x91D7,
	14986: 0x4FEE,
	14987: 0x53D7,
	14988: 0x55FD,
	14989: 0x56DA,
	14990: 0x5782,
	14991: 0x58FD,
	14992: 0x5AC2,
	14993: 0x5B88,
	14994: 0x5CAB,
	14995: 0x5CC0,
	14996: 0x5E25,
	14997: 0x6101,
	14998: 0x620D,
	14999: 0x624B,
	15000: 0x6388,
	15001: 0x641C,
	15002: 0x6536,
	15003: 0x6578,
	15004: 0x6A39,
	15005: 0x6B8A,
	15006: 0x6C34,
	15007: 0x6D19,
	15008: 0x6F31,
	15009: 0x71E7,
	15010: 0x72E9,
	15011: 0x7378,
	15012: 0x7407,
	15013: 0x74B2,
	15014: 0x7626,
	15015: 0x7761,
	15016: 0x79C0,
	15017: 0x7A57,
	15018: 0x7AEA,
	15019: 0x7CB9,
	15020: 0x7D8F,
	15021: 0x7DAC,
	15022: 0x7E61,
	15023: 0x7F9E,
	15024: 0x8129,
	15025: 0x8331,
	15026: 0x8490,
	15027: 0x84DA,
	15028: 0x85EA,
	15029: 0x8896,
	15030: 0x8AB0,
	15031: 0x8B90,
	15032: 0x8F38,
	15033: 0x9042,
	15034: 0x9083,
	15035: 0x916C,
	15036: 0x9296,
	15037: 0x92B9,
	15038: 0x968B,
	15039: 0x96A7,
	15040: 0x96A8,
	15041: 0x96D6,
	15042: 0x9700,
	15043: 0x9808,
	15044: 0x9996,
	15045: 0x9AD3,
	15046: 0x9B1A,
	15047: 0x53D4,
	15048: 0x587E,
	15049: 0x5919,
	15050: 0x5B70,
	15051: 0x5BBF,
	15052: 0x6DD1,
	15053: 0x6F5A,
	15054: 0x719F,
	15055: 0x7421,
	15056: 0x74B9,
	15057: 0x8085,
	15058: 0x83FD,
	15059: 0x5DE1,
	15060: 0x5F87,
	15061: 0x5FAA,
	15062: 0x6042,
	15063: 0x65EC,
	15064: 0x6812,
	15065: 0x696F,
	15066: 0x6A53,
	15067: 0x6B89,
	15068: 0x6D35,
	15069: 0x6DF3,
	15070: 0x73E3,
	15071: 0x76FE,
	15072: 0x77AC,
	15073: 0x7B4D,
	15074: 0x7D14,
	15075: 0x8123,
	15076: 0x821C,
	15077: 0x8340,
	15078: 0x84F4,
	15079: 0x8563,
	15080: 0x8A62,
	15081: 0x8AC4,
	15082: 0x9187,
	15083: 0x931E,
	15084: 0x9806,
	15085: 0x99B4,
	15086: 0x620C,
	15087: 0x8853,
	15088: 0x8FF0,
	15089: 0x9265,
	15090: 0x5D07,
	15091: 0x5D27,
	15092: 0x5D69,
	15093: 0x745F,
	15094: 0x819D,
	15095: 0x8768,
	15096: 0x6FD5,
	15097: 0x62FE,
	15098: 0x7FD2,
	15099: 0x8936,
	15100: 0x8972,
	15101: 0x4E1E,
	15102: 0x4E58,
	15103: 0x50E7,
	15104: 0x52DD,
	15105: 0x5347,
	15106: 0x627F,
	15107: 0x6607,
	15108: 0x7E69,
	15109: 0x8805,
	15110: 0x965E,
	15111: 0x4F8D,
	15112: 0x5319,
	15113: 0x5636,
	15114: 0x59CB,
	15115: 0x5AA4,
	15116: 0x5C38,
	15117: 0x5C4E,
	15118: 0x5C4D,
	15119: 0x5E02,
	15120: 0x5F11,
	15121: 0x6043,
	15122: 0x65BD,
	15123: 0x662F,
	15124: 0x6642,
	15125: 0x67BE,
	15126: 0x67F4,
	15127: 0x731C,
	15128: 0x77E2,
	15129: 0x793A,
	15130: 0x7FC5,
	15131: 0x8494,
	15132: 0x84CD,
	15133: 0x8996,
	15134: 0x8A66,
	15135: 0x8A69,
	15136: 0x8AE1,
	15137: 0x8C55,
	15138: 0x8C7A,
	15139: 0x57F4,
	15140: 0x5BD4,
	15141: 0x5F0F,
	15142: 0x606F,
	15143: 0x62ED,
	15144: 0x690D,
	15145: 0x6B96,
	15146: 0x6E5C,
	15147: 0x7184,
	15148: 0x7BD2,
	15149: 0x8755,
	15150: 0x8B58,
	15151: 0x8EFE,
	15152: 0x98DF,
	15153: 0x98FE,
	15154: 0x4F38,
	15155: 0x4F81,
	15156: 0x4FE1,
	15157: 0x547B,
	15158: 0x5A20,
	15159: 0x5BB8,
	15160: 0x613C,
	15161: 0x65B0,
	15162: 0x6668,
	15163: 0x71FC,
	15164: 0x7533,
	15165: 0x795E,
	15166: 0x7D33,
	15167: 0x814E,
	15168: 0x81E3,
	15169: 0x8398,
	15170: 0x85AA,
	15171: 0x85CE,
	15172: 0x8703,
	15173: 0x8A0A,
	15174: 0x8EAB,
	15175: 0x8F9B,
	15176: 0xF971,
	15177: 0x8FC5,
	15178: 0x5931,
	15179: 0x5BA4,
	15180: 0x5BE6,
	15181: 0x6089,
	15182: 0x5BE9,
	15183: 0x5C0B,
	15184: 0x5FC3,
	15185: 0x6C81,
	15186: 0xF972,
	15187: 0x6DF1,
	15188: 0x700B,
	15189: 0x751A,
	15190: 0x82AF,
	15191: 0x8AF6,
	15192: 0x4EC0,
	15193: 0x5341,
	15194: 0xF973,
	15195: 0x96D9,
	15196: 0x6C0F,
	15197: 0x4E9E,
	15198: 0x4FC4,
	15199: 0x5152,
	15200: 0x555E,
	15201: 0x5A25,
	15202: 0x5CE8,
	15203: 0x6211,
	15204: 0x7259,
	15205: 0x82BD,
	15206: 0x83AA,
	15207: 0x86FE,
	15208: 0x8859,
	15209: 0x8A1D,
	15210: 0x963F,
	15211: 0x96C5,
	15212: 0x9913,
	15213: 0x9D09,
	15214: 0x9D5D,
	15215: 0x580A,
	15216: 0x5CB3,
	15217: 0x5DBD,
	15218: 0x5E44,
	15219: 0x60E1,
	15220: 0x6115,
	15221: 0x63E1,
	15222: 0x6A02,
	15223: 0x6E25,
	15224: 0x9102,
	15225: 0x9354,
	15226: 0x984E,
	15227: 0x9C10,
	15228: 0x9F77,
	15229: 0x5B89,
	15230: 0x5CB8,
	15231: 0x6309,
	15232: 0x664F,
	15233: 0x6848,
	15234: 0x773C,
	15235: 0x96C1,
	15236: 0x978D,
	15237: 0x9854,
	15238: 0x9B9F,
	15239: 0x65A1,
	15240: 0x8B01,
	15241: 0x8ECB,
	15242: 0x95BC,
	15243: 0x5535,
	15244: 0x5CA9,
	15245: 0x5DD6,
	15246: 0x5EB5,
	15247: 0x6697,
	15248: 0x764C,
	15249: 0x83F4,
	15250: 0x95C7,
	15251: 0x58D3,
	15252: 0x62BC,
	15253: 0x72CE,
	15254: 0x9D28,
	15255: 0x4EF0,
	15256: 0x592E,
	15257: 0x600F,
	15258: 0x663B,
	15259: 0x6B83,
	15260: 0x79E7,
	15261: 0x9D26,
	15262: 0x5393,
	15263: 0x54C0,
	15264: 0x57C3,
	15265: 0x5D16,
	15266: 0x611B,
	15267: 0x66D6,
	15268: 0x6DAF,
	15269: 0x788D,
	15270: 0x827E,
	15271: 0x9698,
	15272: 0x9744,
	15273: 0x5384,
	15274: 0x627C,
	15275: 0x6396,
	15276: 0x6DB2,
	15277: 0x7E0A,
	15278: 0x814B,
	15279: 0x984D,
	15280: 0x6AFB,
	15281: 0x7F4C,
	15282: 0x9DAF,
	15283: 0x9E1A,
	15284: 0x4E5F,
	15285: 0x503B,
	15286: 0x51B6,
	15287: 0x591C,
	15288: 0x60F9,
	15289: 0x63F6,
	15290: 0x6930,
	15291: 0x723A,
	15292: 0x8036,
	15293: 0xF974,
	15294: 0x91CE,
	15295: 0x5F31,
	15296: 0xF975,
	15297: 0xF976,
	15298: 0x7D04,
	15299: 0x82E5,
	15300: 0x846F,
	15301: 0x84BB,
	15302: 0x85E5,
	15303: 0x8E8D,
	15304: 0xF977,
	15305: 0x4F6F,
	15306: 0xF978,
	15307: 0xF979,
	15308: 0x58E4,
	15309: 0x5B43,
	15310: 0x6059,
	15311: 0x63DA,
	15312: 0x6518,
	15313: 0x656D,
	15314: 0x6698,
	15315: 0xF97A,
	15316: 0x694A,
	15317: 0x6A23,
	15318: 0x6D0B,
	15319: 0x7001,
	15320: 0x716C,
	15321: 0x75D2,
	15322: 0x760D,
	15323: 0x79B3,
	15324: 0x7A70,
	15325: 0xF97B,
	15326: 0x7F8A,
	15327: 0xF97C,
	15328: 0x8944,
	15329: 0xF97D,
	15330: 0x8B93,
	15331: 0x91C0,
	15332: 0x967D,
	15333: 0xF97E,
	15334: 0x990A,
	15335: 0x5704,
	15336: 0x5FA1,
	15337: 0x65BC,
	15338: 0x6F01,
	15339: 0x7600,
	15340: 0x79A6,
	15341: 0x8A9E,
	15342: 0x99AD,
	15343: 0x9B5A,
	15344: 0x9F6C,
	15345: 0x5104,
	15346: 0x61B6,
	15347: 0x6291,
	15348: 0x6A8D,
	15349: 0x81C6,
	15350: 0x5043,
	15351: 0x5830,
	15352: 0x5F66,
	15353: 0x7109,
	15354: 0x8A00,
	15355: 0x8AFA,
	15356: 0x5B7C,
	15357: 0x8616,
	15358: 0x4FFA,
	15359: 0x513C,
	15360: 0x56B4,
	15361: 0x5944,
	15362: 0x63A9,
	15363: 0x6DF9,
	15364: 0x5DAA,
	15365: 0x696D,
	15366: 0x5186,
	15367: 0x4E88,
	15368: 0x4F59,
	15369: 0xF97F,
	15370: 0xF980,
	15371: 0xF981,
	15372: 0x5982,
	15373: 0xF982,
	15374: 0xF983,
	15375: 0x6B5F,
	15376: 0x6C5D,
	15377: 0xF984,
	15378: 0x74B5,
	15379: 0x7916,
	15380: 0xF985,
	15381: 0x8207,
	15382: 0x8245,
	15383: 0x8339,
	15384: 0x8F3F,
	15385: 0x8F5D,
	15386: 0xF986,
	15387: 0x9918,
	15388: 0xF987,
	15389: 0xF988,
	15390: 0xF989,
	15391: 0x4EA6,
	15392: 0xF98A,
	15393: 0x57DF,
	15394: 0x5F79,
	15395: 0x6613,
	15396: 0xF98B,
	15397: 0xF98C,
	15398: 0x75AB,
	15399: 0x7E79,
	15400: 0x8B6F,
	15401: 0xF98D,
	15402: 0x9006,
	15403: 0x9A5B,
	15404: 0x56A5,
	15405: 0x5827,
	15406: 0x59F8,
	15407: 0x5A1F,
	15408: 0x5BB4,
	15409: 0xF98E,
	15410: 0x5EF6,
	15411: 0xF98F,
	15412: 0xF990,
	15413: 0x6350,
	15414: 0x633B,
	15415: 0xF991,
	15416: 0x693D,
	15417: 0x6C87,
	15418: 0x6CBF,
	15419: 0x6D8E,
	15420: 0x6D93,
	15421: 0x6DF5,
	15422: 0x6F14,
	15423: 0xF992,
	15424: 0x70DF,
	15425: 0x7136,
	15426: 0x7159,
	15427: 0xF993,
	15428: 0x71C3,
	15429: 0x71D5,
	15430: 0xF994,
	15431: 0x784F,
	15432: 0x786F,
	15433: 0xF995,
	15434: 0x7B75,
	15435: 0x7DE3,
	15436: 0xF996,
	15437: 0x7E2F,
	15438: 0xF997,
	15439: 0x884D,
	15440: 0x8EDF,
	15441: 0xF998,
	15442: 0xF999,
	15443: 0xF99A,
	15444: 0x925B,
	15445: 0xF99B,
	15446: 0x9CF6,
	15447: 0xF99C,
	15448: 0xF99D,
	15449: 0xF99E,
	15450: 0x6085,
	15451: 0x6D85,
	15452: 0xF99F,
	15453: 0x71B1,
	15454: 0xF9A0,
	15455: 0xF9A1,
	15456: 0x95B1,
	15457: 0x53AD,
	15458: 0xF9A2,
	15459: 0xF9A3,
	15460: 0xF9A4,
	15461: 0x67D3,
	15462: 0xF9A5,
	15463: 0x708E,
	15464: 0x7130,
	15465: 0x7430,
	15466: 0x8276,
	15467: 0x82D2,
	15468: 0xF9A6,
	15469: 0x95BB,
	15470: 0x9AE5,
	15471: 0x9E7D,
	15472: 0x66C4,
	15473: 0xF9A7,
	15474: 0x71C1,
	15475: 0x8449,
	15476: 0xF9A8,
	15477: 0xF9A9,
	15478: 0x584B,
	15479: 0xF9AA,
	15480: 0xF9AB,
	15481: 0x5DB8,
	15482: 0x5F71,
	15483: 0xF9AC,
	15484: 0x6620,
	15485: 0x668E,
	15486: 0x6979,
	15487: 0x69AE,
	15488: 0x6C38,
	15489: 0x6CF3,
	15490: 0x6E36,
	15491: 0x6F41,
	15492: 0x6FDA,
	15493: 0x701B,
	15494: 0x702F,
	15495: 0x7150,
	15496: 0x71DF,
	15497: 0x7370,
	15498: 0xF9AD,
	15499: 0x745B,
	15500: 0xF9AE,
	15501: 0x74D4,
	15502: 0x76C8,
	15503: 0x7A4E,
	15504: 0x7E93,
	15505: 0xF9AF,
	15506: 0xF9B0,
	15507: 0x82F1,
	15508: 0x8A60,
	15509: 0x8FCE,
	15510: 0xF9B1,
	15511: 0x9348,
	15512: 0xF9B2,
	15513: 0x9719,
	15514: 0xF9B3,
	15515: 0xF9B4,
	15516: 0x4E42,
	15517: 0x502A,
	15518: 0xF9B5,
	15519: 0x5208,
	15520: 0x53E1,
	15521: 0x66F3,
	15522: 0x6C6D,
	15523: 0x6FCA,
	15524: 0x730A,
	15525: 0x777F,
	15526: 0x7A62,
	15527: 0x82AE,
	15528: 0x85DD,
	15529: 0x8602,
	15530: 0xF9B6,
	15531: 0x88D4,
	15532: 0x8A63,
	15533: 0x8B7D,
	15534: 0x8C6B,
	15535: 0xF9B7,
	15536: 0x92B3,
	15537: 0xF9B8,
	15538: 0x9713,
	15539: 0x9810,
	15540: 0x4E94,
	15541: 0x4F0D,
	15542: 0x4FC9,
	15543: 0x50B2,
	15544: 0x5348,
	15545: 0x543E,
	15546: 0x5433,
	15547: 0x55DA,
	15548: 0x5862,
	15549: 0x58BA,
	15550: 0x5967,
	15551: 0x5A1B,
	15552: 0x5BE4,
	15553: 0x609F,
	15554: 0xF9B9,
	15555: 0x61CA,
	15556: 0x6556,
	15557: 0x65FF,
	15558: 0x6664,
	15559: 0x68A7,
	15560: 0x6C5A,
	15561: 0x6FB3,
	15562: 0x70CF,
	15563: 0x71AC,
	15564: 0x7352,
	15565: 0x7B7D,
	15566: 0x8708,
	15567: 0x8AA4,
	15568: 0x9C32,
	15569: 0x9F07,
	15570: 0x5C4B,
	15571: 0x6C83,
	15572: 0x7344,
	15573: 0x7389,
	15574: 0x923A,
	15575: 0x6EAB,
	15576: 0x7465,
	15577: 0x761F,
	15578: 0x7A69,
	15579: 0x7E15,
	15580: 0x860A,
	15581: 0x5140,
	15582: 0x58C5,
	15583: 0x64C1,
	15584: 0x74EE,
	15585: 0x7515,
	15586: 0x7670,
	15587: 0x7FC1,
	15588: 0x9095,
	15589: 0x96CD,
	15590: 0x9954,
	15591: 0x6E26,
	15592: 0x74E6,
	15593: 0x7AA9,
	15594: 0x7AAA,
	15595: 0x81E5,
	15596: 0x86D9,
	15597: 0x8778,
	15598: 0x8A1B,
	15599: 0x5A49,
	15600: 0x5B8C,
	15601: 0x5B9B,
	15602: 0x68A1,
	15603: 0x6900,
	15604: 0x6D63,
	15605: 0x73A9,
	15606: 0x7413,
	15607: 0x742C,
	15608: 0x7897,
	15609: 0x7DE9,
	15610: 0x7FEB,
	15611: 0x8118,
	15612: 0x8155,
	15613: 0x839E,
	15614: 0x8C4C,
	15615: 0x962E,
	15616: 0x9811,
	15617: 0x66F0,
	15618: 0x5F80,
	15619: 0x65FA,
	15620: 0x6789,
	15621: 0x6C6A,
	15622: 0x738B,
	15623: 0x502D,
	15624: 0x5A03,
	15625: 0x6B6A,
	15626: 0x77EE,
	15627: 0x5916,
	15628: 0x5D6C,
	15629: 0x5DCD,
	15630: 0x7325,
	15631: 0x754F,
	15632: 0xF9BA,
	15633: 0xF9BB,
	15634: 0x50E5,
	15635: 0x51F9,
	15636: 0x582F,
	15637: 0x592D,
	15638: 0x5996,
	15639: 0x59DA,
	15640: 0x5BE5,
	15641: 0xF9BC,
	15642: 0xF9BD,
	15643: 0x5DA2,
	15644: 0x62D7,
	15645: 0x6416,
	15646: 0x6493,
	15647: 0x64FE,
	15648: 0xF9BE,
	15649: 0x66DC,
	15650: 0xF9BF,
	15651: 0x6A48,
	15652: 0xF9C0,
	15653: 0x71FF,
	15654: 0x7464,
	15655: 0xF9C1,
	15656: 0x7A88,
	15657: 0x7AAF,
	15658: 0x7E47,
	15659: 0x7E5E,
	15660: 0x8000,
	15661: 0x8170,
	15662: 0xF9C2,
	15663: 0x87EF,
	15664: 0x8981,
	15665: 0x8B20,
	15666: 0x9059,
	15667: 0xF9C3,
	15668: 0x9080,
	15669: 0x9952,
	15670: 0x617E,
	15671: 0x6B32,
	15672: 0x6D74,
	15673: 0x7E1F,
	15674: 0x8925,
	15675: 0x8FB1,
	15676: 0x4FD1,
	15677: 0x50AD,
	15678: 0x5197,
	15679: 0x52C7,
	15680: 0x57C7,
	15681: 0x5889,
	15682: 0x5BB9,
	15683: 0x5EB8,
	15684: 0x6142,
	15685: 0x6995,
	15686: 0x6D8C,
	15687: 0x6E67,
	15688: 0x6EB6,
	15689: 0x7194,
	15690: 0x7462,
	15691: 0x7528,
	15692: 0x752C,
	15693: 0x8073,
	15694: 0x8338,
	15695: 0x84C9,
	15696: 0x8E0A,
	15697: 0x9394,
	15698: 0x93DE,
	15699: 0xF9C4,
	15700: 0x4E8E,
	15701: 0x4F51,
	15702: 0x5076,
	15703: 0x512A,
	15704: 0x53C8,
	15705: 0x53CB,
	15706: 0x53F3,
	15707: 0x5B87,
	15708: 0x5BD3,
	15709: 0x5C24,
	15710: 0x611A,
	15711: 0x6182,
	15712: 0x65F4,
	15713: 0x725B,
	15714: 0x7397,
	15715: 0x7440,
	15716: 0x76C2,
	15717: 0x7950,
	15718: 0x7991,
	15719: 0x79B9,
	15720: 0x7D06,
	15721: 0x7FBD,
	15722: 0x828B,
	15723: 0x85D5,
	15724: 0x865E,
	15725: 0x8FC2,
	15726: 0x9047,
	15727: 0x90F5,
	15728: 0x91EA,
	15729: 0x9685,
	15730: 0x96E8,
	15731: 0x96E9,
	15732: 0x52D6,
	15733: 0x5F67,
	15734: 0x65ED,
	15735: 0x6631,
	15736: 0x682F,
	15737: 0x715C,
	15738: 0x7A36,
	15739: 0x90C1,
	15740: 0x980A,
	15741: 0x4E91,
	15742: 0xF9C5,
	15743: 0x6A52,
	15744: 0x6B9E,
	15745: 0x6F90,
	15746: 0x7189,
	15747: 0x8018,
	15748: 0x82B8,
	15749: 0x8553,
	15750: 0x904B,
	15751: 0x9695,
	15752: 0x96F2,
	15753: 0x97FB,
	15754: 0x851A,
	15755: 0x9B31,
	15756: 0x4E90,
	15757: 0x718A,
	15758: 0x96C4,
	15759: 0x5143,
	15760: 0x539F,
	15761: 0x54E1,
	15762: 0x5713,
	15763: 0x5712,
	15764: 0x57A3,
	15765: 0x5A9B,
	15766: 0x5AC4,
	15767: 0x5BC3,
	15768: 0x6028,
	15769: 0x613F,
	15770: 0x63F4,
	15771: 0x6C85,
	15772: 0x6D39,
	15773: 0x6E72,
	15774: 0x6E90,
	15775: 0x7230,
	15776: 0x733F,
	15777: 0x7457,
	15778: 0x82D1,
	15779: 0x8881,
	15780: 0x8F45,
	15781: 0x9060,
	15782: 0xF9C6,
	15783: 0x9662,
	15784: 0x9858,
	15785: 0x9D1B,
	15786: 0x6708,
	15787: 0x8D8A,
	15788: 0x925E,
	15789: 0x4F4D,
	15790: 0x5049,
	15791: 0x50DE,
	15792: 0x5371,
	15793: 0x570D,
	15794: 0x59D4,
	15795: 0x5A01,
	15796: 0x5C09,
	15797: 0x6170,
	15798: 0x6690,
	15799: 0x6E2D,
	15800: 0x7232,
	15801: 0x744B,
	15802: 0x7DEF,
	15803: 0x80C3,
	15804: 0x840E,
	15805: 0x8466,
	15806: 0x853F,
	15807: 0x875F,
	15808: 0x885B,
	15809: 0x8918,
	15810: 0x8B02,
	15811: 0x9055,
	15812: 0x97CB,
	15813: 0x9B4F,
	15814: 0x4E73,
	15815: 0x4F91,
	15816: 0x5112,
	15817: 0x516A,
	15818: 0xF9C7,
	15819: 0x552F,
	15820: 0x55A9,
	15821: 0x5B7A,
	15822: 0x5BA5,
	15823: 0x5E7C,
	15824: 0x5E7D,
	15825: 0x5EBE,
	15826: 0x60A0,
	15827: 0x60DF,
	15828: 0x6108,
	15829: 0x6109,
	15830: 0x63C4,
	15831: 0x6538,
	15832: 0x6709,
	15833: 0xF9C8,
	15834: 0x67D4,
	15835: 0x67DA,
	15836: 0xF9C9,
	15837: 0x6961,
	15838: 0x6962,
	15839: 0x6CB9,
	15840: 0x6D27,
	15841: 0xF9CA,
	15842: 0x6E38,
	15843: 0xF9CB,
	15844: 0x6FE1,
	15845: 0x7336,
	15846: 0x7337,
	15847: 0xF9CC,
	15848: 0x745C,
	15849: 0x7531,
	15850: 0xF9CD,
	15851: 0x7652,
	15852: 0xF9CE,
	15853: 0xF9CF,
	15854: 0x7DAD,
	15855: 0x81FE,
	15856: 0x8438,
	15857: 0x88D5,
	15858: 0x8A98,
	15859: 0x8ADB,
	15860: 0x8AED,
	15861: 0x8E30,
	15862: 0x8E42,
	15863: 0x904A,
	15864: 0x903E,
	15865: 0x907A,
	15866: 0x9149,
	15867: 0x91C9,
	15868: 0x936E,
	15869: 0xF9D0,
	15870: 0xF9D1,
	15871: 0x5809,
	15872: 0xF9D2,
	15873: 0x6BD3,
	15874: 0x8089,
	15875: 0x80B2,
	15876: 0xF9D3,
	15877: 0xF9D4,
	15878: 0x5141,
	15879: 0x596B,
	15880: 0x5C39,
	15881: 0xF9D5,
	15882: 0xF9D6,
	15883: 0x6F64,
	15884: 0x73A7,
	15885: 0x80E4,
	15886: 0x8D07,
	15887: 0xF9D7,
	15888: 0x9217,
	15889: 0x958F,
	15890: 0xF9D8,
	15891: 0xF9D9,
	15892: 0xF9DA,
	15893: 0xF9DB,
	15894: 0x807F,
	15895: 0x620E,
	15896: 0x701C,
	15897: 0x7D68,
	15898: 0x878D,
	15899: 0xF9DC,
	15900: 0x57A0,
	15901: 0x6069,
	15902: 0x6147,
	15903: 0x6BB7,
	15904: 0x8ABE,
	15905: 0x9280,
	15906: 0x96B1,
	15907: 0x4E59,
	15908: 0x541F,
	15909: 0x6DEB,
	15910: 0x852D,
	15911: 0x9670,
	15912: 0x97F3,
	15913: 0x98EE,
	15914: 0x63D6,
	15915: 0x6CE3,
	15916: 0x9091,
	15917: 0x51DD,
	15918: 0x61C9,
	15919: 0x81BA,
	15920: 0x9DF9,
	15921: 0x4F9D,
	15922: 0x501A,
	15923: 0x5100,
	15924: 0x5B9C,
	15925: 0x610F,
	15926: 0x61FF,
	15927: 0x64EC,
	15928: 0x6905,
	15929: 0x6BC5,
	15930: 0x7591,
	15931: 0x77E3,
	15932: 0x7FA9,
	15933: 0x8264,
	15934: 0x858F,
	15935: 0x87FB,
	15936: 0x8863,
	15937: 0x8ABC,
	15938: 0x8B70,
	15939: 0x91AB,
	15940: 0x4E8C,
	15941: 0x4EE5,
	15942: 0x4F0A,
	15943: 0xF9DD,
	15944: 0xF9DE,
	15945: 0x5937,
	15946: 0x59E8,
	15947: 0xF9DF,
	15948: 0x5DF2,
	15949: 0x5F1B,
	15950: 0x5F5B,
	15951: 0x6021,
	15952: 0xF9E0,
	15953: 0xF9E1,
	15954: 0xF9E2,
	15955: 0xF9E3,
	15956: 0x723E,
	15957: 0x73E5,
	15958: 0xF9E4,
	15959: 0x7570,
	15960: 0x75CD,
	15961: 0xF9E5,
	15962: 0x79FB,
	15963: 0xF9E6,
	15964: 0x800C,
	15965: 0x8033,
	15966: 0x8084,
	15967: 0x82E1,
	15968: 0x8351,
	15969: 0xF9E7,
	15970: 0xF9E8,
	15971: 0x8CBD,
	15972: 0x8CB3,
	15973: 0x9087,
	15974: 0xF9E9,
	15975: 0xF9EA,
	15976: 0x98F4,
	15977: 0x990C,
	15978: 0xF9EB,
	15979: 0xF9EC,
	15980: 0x7037,
	15981: 0x76CA,
	15982: 0x7FCA,
	15983: 0x7FCC,
	15984: 0x7FFC,
	15985: 0x8B1A,
	15986: 0x4EBA,
	15987: 0x4EC1,
	15988: 0x5203,
	15989: 0x5370,
	15990: 0xF9ED,
	15991: 0x54BD,
	15992: 0x56E0,
	15993: 0x59FB,
	15994: 0x5BC5,
	15995: 0x5F15,
	15996: 0x5FCD,
	15997: 0x6E6E,
	15998: 0xF9EE,
	15999: 0xF9EF,
	16000: 0x7D6A,
	16001: 0x8335,
	16002: 0xF9F0,
	16003: 0x8693,
	16004: 0x8A8D,
	16005: 0xF9F1,
	16006: 0x976D,
	16007: 0x9777,
	16008: 0xF9F2,
	16009: 0xF9F3,
	16010: 0x4E00,
	16011: 0x4F5A,
	16012: 0x4F7E,
	16013: 0x58F9,
	16014: 0x65E5,
	16015: 0x6EA2,
	16016: 0x9038,
	16017: 0x93B0,
	16018: 0x99B9,
	16019: 0x4EFB,
	16020: 0x58EC,
	16021: 0x598A,
	16022: 0x59D9,
	16023: 0x6041,
	16024: 0xF9F4,
	16025: 0xF9F5,
	16026: 0x7A14,
	16027: 0xF9F6,
	16028: 0x834F,
	16029: 0x8CC3,
	16030: 0x5165,
	16031: 0x5344,
	16032: 0xF9F7,
	16033: 0xF9F8,
	16034: 0xF9F9,
	16035: 0x4ECD,
	16036: 0x5269,
	16037: 0x5B55,
	16038: 0x82BF,
	16039: 0x4ED4,
	16040: 0x523A,
	16041: 0x54A8,
	16042: 0x59C9,
	16043: 0x59FF,
	16044: 0x5B50,
	16045: 0x5B57,
	16046: 0x5B5C,
	16047: 0x6063,
	16048: 0x6148,
	16049: 0x6ECB,
	16050: 0x7099,
	16051: 0x716E,
	16052: 0x7386,
	16053: 0x74F7,
	16054: 0x75B5,
	16055: 0x78C1,
	16056: 0x7D2B,
	16057: 0x8005,
	16058: 0x81EA,
	16059: 0x8328,
	16060: 0x8517,
	16061: 0x85C9,
	16062: 0x8AEE,
	16063: 0x8CC7,
	16064: 0x96CC,
	16065: 0x4F5C,
	16066: 0x52FA,
	16067: 0x56BC,
	16068: 0x65AB,
	16069: 0x6628,
	16070: 0x707C,
	16071: 0x70B8,
	16072: 0x7235,
	16073: 0x7DBD,
	16074: 0x828D,
	16075: 0x914C,
	16076: 0x96C0,
	16077: 0x9D72,
	16078: 0x5B71,
	16079: 0x68E7,
	16080: 0x6B98,
	16081: 0x6F7A,
	16082: 0x76DE,
	16083: 0x5C91,
	16084: 0x66AB,
	16085: 0x6F5B,
	16086: 0x7BB4,
	16087: 0x7C2A,
	16088: 0x8836,
	16089: 0x96DC,
	16090: 0x4E08,
	16091: 0x4ED7,
	16092: 0x5320,
	16093: 0x5834,
	16094: 0x58BB,
	16095: 0x58EF,
	16096: 0x596C,
	16097: 0x5C07,
	16098: 0x5E33,
	16099: 0x5E84,
	16100: 0x5F35,
	16101: 0x638C,
	16102: 0x66B2,
	16103: 0x6756,
	16104: 0x6A1F,
	16105: 0x6AA3,
	16106: 0x6B0C,
	16107: 0x6F3F,
	16108: 0x7246,
	16109: 0xF9FA,
	16110: 0x7350,
	16111: 0x748B,
	16112: 0x7AE0,
	16113: 0x7CA7,
	16114: 0x8178,
	16115: 0x81DF,
	16116: 0x81E7,
	16117: 0x838A,
	16118: 0x846C,
	16119: 0x8523,
	16120: 0x8594,
	16121: 0x85CF,
	16122: 0x88DD,
	16123: 0x8D13,
	16124: 0x91AC,
	16125: 0x9577,
	16126: 0x969C,
	16127: 0x518D,
	16128: 0x54C9,
	16129: 0x5728,
	16130: 0x5BB0,
	16131: 0x624D,
	16132: 0x6750,
	16133: 0x683D,
	16134: 0x6893,
	16135: 0x6E3D,
	16136: 0x6ED3,
	16137: 0x707D,
	16138: 0x7E21,
	16139: 0x88C1,
	16140: 0x8CA1,
	16141: 0x8F09,
	16142: 0x9F4B,
	16143: 0x9F4E,
	16144: 0x722D,
	16145: 0x7B8F,
	16146: 0x8ACD,
	16147: 0x931A,
	16148: 0x4F47,
	16149: 0x4F4E,
	16150: 0x5132,
	16151: 0x5480,
	16152: 0x59D0,
	16153: 0x5E95,
	16154: 0x62B5,
	16155: 0x6775,
	16156: 0x696E,
	16157: 0x6A17,
	16158: 0x6CAE,
	16159: 0x6E1A,
	16160: 0x72D9,
	16161: 0x732A,
	16162: 0x75BD,
	16163: 0x7BB8,
	16164: 0x7D35,
	16165: 0x82E7,
	16166: 0x83F9,
	16167: 0x8457,
	16168: 0x85F7,
	16169: 0x8A5B,
	16170: 0x8CAF,
	16171: 0x8E87,
	16172: 0x9019,
	16173: 0x90B8,
	16174: 0x96CE,
	16175: 0x9F5F,
	16176: 0x52E3,
	16177: 0x540A,
	16178: 0x5AE1,
	16179: 0x5BC2,
	16180: 0x6458,
	16181: 0x6575,
	16182: 0x6EF4,
	16183: 0x72C4,
	16184: 0xF9FB,
	16185: 0x7684,
	16186: 0x7A4D,
	16187: 0x7B1B,
	16188: 0x7C4D,
	16189: 0x7E3E,
	16190: 0x7FDF,
	16191: 0x837B,
	16192: 0x8B2B,
	16193: 0x8CCA,
	16194: 0x8D64,
	16195: 0x8DE1,
	16196: 0x8E5F,
	16197: 0x8FEA,
	16198: 0x8FF9,
	16199: 0x9069,
	16200: 0x93D1,
	16201: 0x4F43,
	16202: 0x4F7A,
	16203: 0x50B3,
	16204: 0x5168,
	16205: 0x5178,
	16206: 0x524D,
	16207: 0x526A,
	16208: 0x5861,
	16209: 0x587C,
	16210: 0x5960,
	16211: 0x5C08,
	16212: 0x5C55,
	16213: 0x5EDB,
	16214: 0x609B,
	16215: 0x6230,
	16216: 0x6813,
	16217: 0x6BBF,
	16218: 0x6C08,
	16219: 0x6FB1,
	16220: 0x714E,
	16221: 0x7420,
	16222: 0x7530,
	16223: 0x7538,
	16224: 0x7551,
	16225: 0x7672,
	16226: 0x7B4C,
	16227: 0x7B8B,
	16228: 0x7BAD,
	16229: 0x7BC6,
	16230: 0x7E8F,
	16231: 0x8A6E,
	16232: 0x8F3E,
	16233: 0x8F49,
	16234: 0x923F,
	16235: 0x9293,
	16236: 0x9322,
	16237: 0x942B,
	16238: 0x96FB,
	16239: 0x985A,
	16240: 0x986B,
	16241: 0x991E,
	16242: 0x5207,
	16243: 0x622A,
	16244: 0x6298,
	16245: 0x6D59,
	16246: 0x7664,
	16247: 0x7ACA,
	16248: 0x7BC0,
	16249: 0x7D76,
	16250: 0x5360,
	16251: 0x5CBE,
	16252: 0x5E97,
	16253: 0x6F38,
	16254: 0x70B9,
	16255: 0x7C98,
	16256: 0x9711,
	16257: 0x9B8E,
	16258: 0x9EDE,
	16259: 0x63A5,
	16260: 0x647A,
	16261: 0x8776,
	16262: 0x4E01,
	16263: 0x4E95,
	16264: 0x4EAD,
	16265: 0x505C,
	16266: 0x5075,
	16267: 0x5448,
	16268: 0x59C3,
	16269: 0x5B9A,
	16270: 0x5E40,
	16271: 0x5EAD,
	16272: 0x5EF7,
	16273: 0x5F81,
	16274: 0x60C5,
	16275: 0x633A,
	16276: 0x653F,
	16277: 0x6574,
	16278: 0x65CC,
	16279: 0x6676,
	16280: 0x6678,
	16281: 0x67FE,
	16282: 0x6968,
	16283: 0x6A89,
	16284: 0x6B63,
	16285: 0x6C40,
	16286: 0x6DC0,
	16287: 0x6DE8,
	16288: 0x6E1F,
	16289: 0x6E5E,
	16290: 0x701E,
	16291: 0x70A1,
	16292: 0x738E,
	16293: 0x73FD,
	16294: 0x753A,
	16295: 0x775B,
	16296: 0x7887,
	16297: 0x798E,
	16298: 0x7A0B,
	16299: 0x7A7D,
	16300: 0x7CBE,
	16301: 0x7D8E,
	16302: 0x8247,
	16303: 0x8A02,
	16304: 0x8AEA,
	16305: 0x8C9E,
	16306: 0x912D,
	16307: 0x914A,
	16308: 0x91D8,
	16309: 0x9266,
	16310: 0x92CC,
	16311: 0x9320,
	16312: 0x9706,
	16313: 0x9756,
	16314: 0x975C,
	16315: 0x9802,
	16316: 0x9F0E,
	16317: 0x5236,
	16318: 0x5291,
	16319: 0x557C,
	16320: 0x5824,
	16321: 0x5E1D,
	16322: 0x5F1F,
	16323: 0x608C,
	16324: 0x63D0,
	16325: 0x68AF,
	16326: 0x6FDF,
	16327: 0x796D,
	16328: 0x7B2C,
	16329: 0x81CD,
	16330: 0x85BA,
	16331: 0x88FD,
	16332: 0x8AF8,
	16333: 0x8E44,
	16334: 0x918D,
	16335: 0x9664,
	16336: 0x969B,
	16337: 0x973D,
	16338: 0x984C,
	16339: 0x9F4A,
	16340: 0x4FCE,
	16341: 0x5146,
	16342: 0x51CB,
	16343: 0x52A9,
	16344: 0x5632,
	16345: 0x5F14,
	16346: 0x5F6B,
	16347: 0x63AA,
	16348: 0x64CD,
	16349: 0x65E9,
	16350: 0x6641,
	16351: 0x66FA,
	16352: 0x66F9,
	16353: 0x671D,
	16354: 0x689D,
	16355: 0x68D7,
	16356: 0x69FD,
	16357: 0x6F15,
	16358: 0x6F6E,
	16359: 0x7167,
	16360: 0x71E5,
	16361: 0x722A,
	16362: 0x74AA,
	16363: 0x773A,
	16364: 0x7956,
	16365: 0x795A,
	16366: 0x79DF,
	16367: 0x7A20,
	16368: 0x7A95,
	16369: 0x7C97,
	16370: 0x7CDF,
	16371: 0x7D44,
	16372: 0x7E70,
	16373: 0x8087,
	16374: 0x85FB,
	16375: 0x86A4,
	16376: 0x8A54,
	16377: 0x8ABF,
	16378: 0x8D99,
	16379: 0x8E81,
	16380: 0x9020,
	16381: 0x906D,
	16382: 0x91E3,
	16383: 0x963B,
	16384: 0x96D5,
	16385: 0x9CE5,
	16386: 0x65CF,
	16387: 0x7C07,
	16388: 0x8DB3,
	16389: 0x93C3,
	16390: 0x5B58,
	16391: 0x5C0A,
	16392: 0x5352,
	16393: 0x62D9,
	16394: 0x731D,
	16395: 0x5027,
	16396: 0x5B97,
	16397: 0x5F9E,
	16398: 0x60B0,
	16399: 0x616B,
	16400: 0x68D5,
	16401: 0x6DD9,
	16402: 0x742E,
	16403: 0x7A2E,
	16404: 0x7D42,
	16405: 0x7D9C,
	16406: 0x7E31,
	16407: 0x816B,
	16408: 0x8E2A,
	16409: 0x8E35,
	16410: 0x937E,
	16411: 0x9418,
	16412: 0x4F50,
	16413: 0x5750,
	16414: 0x5DE6,
	16415: 0x5EA7,
	16416: 0x632B,
	16417: 0x7F6A,
	16418: 0x4E3B,
	16419: 0x4F4F,
	16420: 0x4F8F,
	16421: 0x505A,
	16422: 0x59DD,
	16423: 0x80C4,
	16424: 0x546A,
	16425: 0x5468,
	16426: 0x55FE,
	16427: 0x594F,
	16428: 0x5B99,
	16429: 0x5DDE,
	16430: 0x5EDA,
	16431: 0x665D,
	16432: 0x6731,
	16433: 0x67F1,
	16434: 0x682A,
	16435: 0x6CE8,
	16436: 0x6D32,
	16437: 0x6E4A,
	16438: 0x6F8D,
	16439: 0x70B7,
	16440: 0x73E0,
	16441: 0x7587,
	16442: 0x7C4C,
	16443: 0x7D02,
	16444: 0x7D2C,
	16445: 0x7DA2,
	16446: 0x821F,
	16447: 0x86DB,
	16448: 0x8A3B,
	16449: 0x8A85,
	16450: 0x8D70,
	16451: 0x8E8A,
	16452: 0x8F33,
	16453: 0x9031,
	16454: 0x914E,
	16455: 0x9152,
	16456: 0x9444,
	16457: 0x99D0,
	16458: 0x7AF9,
	16459: 0x7CA5,
	16460: 0x4FCA,
	16461: 0x5101,
	16462: 0x51C6,
	16463: 0x57C8,
	16464: 0x5BEF,
	16465: 0x5CFB,
	16466: 0x6659,
	16467: 0x6A3D,
	16468: 0x6D5A,
	16469: 0x6E96,
	16470: 0x6FEC,
	16471: 0x710C,
	16472: 0x756F,
	16473: 0x7AE3,
	16474: 0x8822,
	16475: 0x9021,
	16476: 0x9075,
	16477: 0x96CB,
	16478: 0x99FF,
	16479: 0x8301,
	16480: 0x4E2D,
	16481: 0x4EF2,
	16482: 0x8846,
	16483: 0x91CD,
	16484: 0x537D,
	16485: 0x6ADB,
	16486: 0x696B,
	16487: 0x6C41,
	16488: 0x847A,
	16489: 0x589E,
	16490: 0x618E,
	16491: 0x66FE,
	16492: 0x62EF,
	16493: 0x70DD,
	16494: 0x7511,
	16495: 0x75C7,
	16496: 0x7E52,
	16497: 0x84B8,
	16498: 0x8B49,
	16499: 0x8D08,
	16500: 0x4E4B,
	16501: 0x53EA,
	16502: 0x54AB,
	16503: 0x5730,
	16504: 0x5740,
	16505: 0x5FD7,
	16506: 0x6301,
	16507: 0x6307,
	16508: 0x646F,
	16509: 0x652F,
	16510: 0x65E8,
	16511: 0x667A,
	16512: 0x679D,
	16513: 0x67B3,
	16514: 0x6B62,
	16515: 0x6C60,
	16516: 0x6C9A,
	16517: 0x6F2C,
	16518: 0x77E5,
	16519: 0x7825,
	16520: 0x7949,
	16521: 0x7957,
	16522: 0x7D19,
	16523: 0x80A2,
	16524: 0x8102,
	16525: 0x81F3,
	16526: 0x829D,
	16527: 0x82B7,
	16528: 0x8718,
	16529: 0x8A8C,
	16530: 0xF9FC,
	16531: 0x8D04,
	16532: 0x8DBE,
	16533: 0x9072,
	16534: 0x76F4,
	16535: 0x7A19,
	16536: 0x7A37,
	16537: 0x7E54,
	16538: 0x8077,
	16539: 0x5507,
	16540: 0x55D4,
	16541: 0x5875,
	16542: 0x632F,
	16543: 0x6422,
	16544: 0x6649,
	16545: 0x664B,
	16546: 0x686D,
	16547: 0x699B,
	16548: 0x6B84,
	16549: 0x6D25,
	16550: 0x6EB1,
	16551: 0x73CD,
	16552: 0x7468,
	16553: 0x74A1,
	16554: 0x755B,
	16555: 0x75B9,
	16556: 0x76E1,
	16557: 0x771E,
	16558: 0x778B,
	16559: 0x79E6,
	16560: 0x7E09,
	16561: 0x7E1D,
	16562: 0x81FB,
	16563: 0x852F,
	16564: 0x8897,
	16565: 0x8A3A,
	16566: 0x8CD1,
	16567: 0x8EEB,
	16568: 0x8FB0,
	16569: 0x9032,
	16570: 0x93AD,
	16571: 0x9663,
	16572: 0x9673,
	16573: 0x9707,
	16574: 0x4F84,
	16575: 0x53F1,
	16576: 0x59EA,
	16577: 0x5AC9,
	16578: 0x5E19,
	16579: 0x684E,
	16580: 0x74C6,
	16581: 0x75BE,
	16582: 0x79E9,
	16583: 0x7A92,
	16584: 0x81A3,
	16585: 0x86ED,
	16586: 0x8CEA,
	16587: 0x8DCC,
	16588: 0x8FED,
	16589: 0x659F,
	16590: 0x6715,
	16591: 0xF9FD,
	16592: 0x57F7,
	16593: 0x6F57,
	16594: 0x7DDD,
	16595: 0x8F2F,
	16596: 0x93F6,
	16597: 0x96C6,
	16598: 0x5FB5,
	16599: 0x61F2,
	16600: 0x6F84,
	16601: 0x4E14,
	16602: 0x4F98,
	16603: 0x501F,
	16604: 0x53C9,
	16605: 0x55DF,
	16606: 0x5D6F,
	16607: 0x5DEE,
	16608: 0x6B21,
	16609: 0x6B64,
	16610: 0x78CB,
	16611: 0x7B9A,
	16612: 0xF9FE,
	16613: 0x8E49,
	16614: 0x8ECA,
	16615: 0x906E,
	16616: 0x6349,
	16617: 0x643E,
	16618: 0x7740,
	16619: 0x7A84,
	16620: 0x932F,
	16621: 0x947F,
	16622: 0x9F6A,
	16623: 0x64B0,
	16624: 0x6FAF,
	16625: 0x71E6,
	16626: 0x74A8,
	16627: 0x74DA,
	16628: 0x7AC4,
	16629: 0x7C12,
	16630: 0x7E82,
	16631: 0x7CB2,
	16632: 0x7E98,
	16633: 0x8B9A,
	16634: 0x8D0A,
	16635: 0x947D,
	16636: 0x9910,
	16637: 0x994C,
	16638: 0x5239,
	16639: 0x5BDF,
	16640: 0x64E6,
	16641: 0x672D,
	16642: 0x7D2E,
	16643: 0x50ED,
	16644: 0x53C3,
	16645: 0x5879,
	16646: 0x6158,
	16647: 0x6159,
	16648: 0x61FA,
	16649: 0x65AC,
	16650: 0x7AD9,
	16651: 0x8B92,
	16652: 0x8B96,
	16653: 0x5009,
	16654: 0x5021,
	16655: 0x5275,
	16656: 0x5531,
	16657: 0x5A3C,
	16658: 0x5EE0,
	16659: 0x5F70,
	16660: 0x6134,
	16661: 0x655E,
	16662: 0x660C,
	16663: 0x6636,
	16664: 0x66A2,
	16665: 0x69CD,
	16666: 0x6EC4,
	16667: 0x6F32,
	16668: 0x7316,
	16669: 0x7621,
	16670: 0x7A93,
	16671: 0x8139,
	16672: 0x8259,
	16673: 0x83D6,
	16674: 0x84BC,
	16675: 0x50B5,
	16676: 0x57F0,
	16677: 0x5BC0,
	16678: 0x5BE8,
	16679: 0x5F69,
	16680: 0x63A1,
	16681: 0x7826,
	16682: 0x7DB5,
	16683: 0x83DC,
	16684: 0x8521,
	16685: 0x91C7,
	16686: 0x91F5,
	16687: 0x518A,
	16688: 0x67F5,
	16689: 0x7B56,
	16690: 0x8CAC,
	16691: 0x51C4,
	16692: 0x59BB,
	16693: 0x60BD,
	16694: 0x8655,
	16695: 0x501C,
	16696: 0xF9FF,
	16697: 0x5254,
	16698: 0x5C3A,
	16699: 0x617D,
	16700: 0x621A,
	16701: 0x62D3,
	16702: 0x64F2,
	16703: 0x65A5,
	16704: 0x6ECC,
	16705: 0x7620,
	16706: 0x810A,
	16707: 0x8E60,
	16708: 0x965F,
	16709: 0x96BB,
	16710: 0x4EDF,
	16711: 0x5343,
	16712: 0x5598,
	16713: 0x5929,
	16714: 0x5DDD,
	16715: 0x64C5,
	16716: 0x6CC9,
	16717: 0x6DFA,
	16718: 0x7394,
	16719: 0x7A7F,
	16720: 0x821B,
	16721: 0x85A6,
	16722: 0x8CE4,
	16723: 0x8E10,
	16724: 0x9077,
	16725: 0x91E7,
	16726: 0x95E1,
	16727: 0x9621,
	16728: 0x97C6,
	16729: 0x51F8,
	16730: 0x54F2,
	16731: 0x5586,
	16732: 0x5FB9,
	16733: 0x64A4,
	16734: 0x6F88,
	16735: 0x7DB4,
	16736: 0x8F1F,
	16737: 0x8F4D,
	16738: 0x9435,
	16739: 0x50C9,
	16740: 0x5C16,
	16741: 0x6CBE,
	16742: 0x6DFB,
	16743: 0x751B,
	16744: 0x77BB,
	16745: 0x7C3D,
	16746: 0x7C64,
	16747: 0x8A79,
	16748: 0x8AC2,
	16749: 0x581E,
	16750: 0x59BE,
	16751: 0x5E16,
	16752: 0x6377,
	16753: 0x7252,
	16754: 0x758A,
	16755: 0x776B,
	16756: 0x8ADC,
	16757: 0x8CBC,
	16758: 0x8F12,
	16759: 0x5EF3,
	16760: 0x6674,
	16761: 0x6DF8,
	16762: 0x807D,
	16763: 0x83C1,
	16764: 0x8ACB,
	16765: 0x9751,
	16766: 0x9BD6,
	16767: 0xFA00,
	16768: 0x5243,
	16769: 0x66FF,
	16770: 0x6D95,
	16771: 0x6EEF,
	16772: 0x7DE0,
	16773: 0x8AE6,
	16774: 0x902E,
	16775: 0x905E,
	16776: 0x9AD4,
	16777: 0x521D,
	16778: 0x527F,
	16779: 0x54E8,
	16780: 0x6194,
	16781: 0x6284,
	16782: 0x62DB,
	16783: 0x68A2,
	16784: 0x6912,
	16785: 0x695A,
	16786: 0x6A35,
	16787: 0x7092,
	16788: 0x7126,
	16789: 0x785D,
	16790: 0x7901,
	16791: 0x790E,
	16792: 0x79D2,
	16793: 0x7A0D,
	16794: 0x8096,
	16795: 0x8278,
	16796: 0x82D5,
	16797: 0x8349,
	16798: 0x8549,
	16799: 0x8C82,
	16800: 0x8D85,
	16801: 0x9162,
	16802: 0x918B,
	16803: 0x91AE,
	16804: 0x4FC3,
	16805: 0x56D1,
	16806: 0x71ED,
	16807: 0x77D7,
	16808: 0x8700,
	16809: 0x89F8,
	16810: 0x5BF8,
	16811: 0x5FD6,
	16812: 0x6751,
	16813: 0x90A8,
	16814: 0x53E2,
	16815: 0x585A,
	16816: 0x5BF5,
	16817: 0x60A4,
	16818: 0x6181,
	16819: 0x6460,
	16820: 0x7E3D,
	16821: 0x8070,
	16822: 0x8525,
	16823: 0x9283,
	16824: 0x64AE,
	16825: 0x50AC,
	16826: 0x5D14,
	16827: 0x6700,
	16828: 0x589C,
	16829: 0x62BD,
	16830: 0x63A8,
	16831: 0x690E,
	16832: 0x6978,
	16833: 0x6A1E,
	16834: 0x6E6B,
	16835: 0x76BA,
	16836: 0x79CB,
	16837: 0x82BB,
	16838: 0x8429,
	16839: 0x8ACF,
	16840: 0x8DA8,
	16841: 0x8FFD,
	16842: 0x9112,
	16843: 0x914B,
	16844: 0x919C,
	16845: 0x9310,
	16846: 0x9318,
	16847: 0x939A,
	16848: 0x96DB,
	16849: 0x9A36,
	16850: 0x9C0D,
	16851: 0x4E11,
	16852: 0x755C,
	16853: 0x795D,
	16854: 0x7AFA,
	16855: 0x7B51,
	16856: 0x7BC9,
	16857: 0x7E2E,
	16858: 0x84C4,
	16859: 0x8E59,
	16860: 0x8E74,
	16861: 0x8EF8,
	16862: 0x9010,
	16863: 0x6625,
	16864: 0x693F,
	16865: 0x7443,
	16866: 0x51FA,
	16867: 0x672E,
	16868: 0x9EDC,
	16869: 0x5145,
	16870: 0x5FE0,
	16871: 0x6C96,
	16872: 0x87F2,
	16873: 0x885D,
	16874: 0x8877,
	16875: 0x60B4,
	16876: 0x81B5,
	16877: 0x8403,
	16878: 0x8D05,
	16879: 0x53D6,
	16880: 0x5439,
	16881: 0x5634,
	16882: 0x5A36,
	16883: 0x5C31,
	16884: 0x708A,
	16885: 0x7FE0,
	16886: 0x805A,
	16887: 0x8106,
	16888: 0x81ED,
	16889: 0x8DA3,
	16890: 0x9189,
	16891: 0x9A5F,
	16892: 0x9DF2,
	16893: 0x5074,
	16894: 0x4EC4,
	16895: 0x53A0,
	16896: 0x60FB,
	16897: 0x6E2C,
	16898: 0x5C64,
	16899: 0x4F88,
	16900: 0x5024,
	16901: 0x55E4,
	16902: 0x5CD9,
	16903: 0x5E5F,
	16904: 0x6065,
	16905: 0x6894,
	16906: 0x6CBB,
	16907: 0x6DC4,
	16908: 0x71BE,
	16909: 0x75D4,
	16910: 0x75F4,
	16911: 0x7661,
	16912: 0x7A1A,
	16913: 0x7A49,
	16914: 0x7DC7,
	16915: 0x7DFB,
	16916: 0x7F6E,
	16917: 0x81F4,
	16918: 0x86A9,
	16919: 0x8F1C,
	16920: 0x96C9,
	16921: 0x99B3,
	16922: 0x9F52,
	16923: 0x5247,
	16924: 0x52C5,
	16925: 0x98ED,
	16926: 0x89AA,
	16927: 0x4E03,
	16928: 0x67D2,
	16929: 0x6F06,
	16930: 0x4FB5,
	16931: 0x5BE2,
	16932: 0x6795,
	16933: 0x6C88,
	16934: 0x6D78,
	16935: 0x741B,
	16936: 0x7827,
	16937: 0x91DD,
	16938: 0x937C,
	16939: 0x87C4,
	16940: 0x79E4,
	16941: 0x7A31,
	16942: 0x5FEB,
	16943: 0x4ED6,
	16944: 0x54A4,
	16945: 0x553E,
	16946: 0x58AE,
	16947: 0x59A5,
	16948: 0x60F0,
	16949: 0x6253,
	16950: 0x62D6,
	16951: 0x6736,
	16952: 0x6955,
	16953: 0x8235,
	16954: 0x9640,
	16955: 0x99B1,
	16956: 0x99DD,
	16957: 0x502C,
	16958: 0x5353,
	16959: 0x5544,
	16960: 0x577C,
	16961: 0xFA01,
	16962: 0x6258,
	16963: 0xFA02,
	16964: 0x64E2,
	16965: 0x666B,
	16966: 0x67DD,
	16967: 0x6FC1,
	16968: 0x6FEF,
	16969: 0x7422,
	16970: 0x7438,
	16971: 0x8A17,
	16972: 0x9438,
	16973: 0x5451,
	16974: 0x5606,
	16975: 0x5766,
	16976: 0x5F48,
	16977: 0x619A,
	16978: 0x6B4E,
	16979: 0x7058,
	16980: 0x70AD,
	16981: 0x7DBB,
	16982: 0x8A95,
	16983: 0x596A,
	16984: 0x812B,
	16985: 0x63A2,
	16986: 0x7708,
	16987: 0x803D,
	16988: 0x8CAA,
	16989: 0x5854,
	16990: 0x642D,
	16991: 0x69BB,
	16992: 0x5B95,
	16993: 0x5E11,
	16994: 0x6E6F,
	16995: 0xFA03,
	16996: 0x8569,
	16997: 0x514C,
	16998: 0x53F0,
	16999: 0x592A,
	17000: 0x6020,
	17001: 0x614B,
	17002: 0x6B86,
	17003: 0x6C70,
	17004: 0x6CF0,
	17005: 0x7B1E,
	17006: 0x80CE,
	17007: 0x82D4,
	17008: 0x8DC6,
	17009: 0x90B0,
	17010: 0x98B1,
	17011: 0xFA04,
	17012: 0x64C7,
	17013: 0x6FA4,
	17014: 0x6491,
	17015: 0x6504,
	17016: 0x514E,
	17017: 0x5410,
	17018: 0x571F,
	17019: 0x8A0E,
	17020: 0x615F,
	17021: 0x6876,
	17022: 0xFA05,
	17023: 0x75DB,
	17024: 0x7B52,
	17025: 0x7D71,
	17026: 0x901A,
	17027: 0x5806,
	17028: 0x69CC,
	17029: 0x817F,
	17030: 0x892A,
	17031: 0x9000,
	17032: 0x9839,
	17033: 0x5078,
	17034: 0x5957,
	17035: 0x59AC,
	17036: 0x6295,
	17037: 0x900F,
	17038: 0x9B2A,
	17039: 0x615D,
	17040: 0x7279,
	17041: 0x95D6,
	17042: 0x5761,
	17043: 0x5A46,
	17044: 0x5DF4,
	17045: 0x628A,
	17046: 0x64AD,
	17047: 0x64FA,
	17048: 0x6777,
	17049: 0x6CE2,
	17050: 0x6D3E,
	17051: 0x722C,
	17052: 0x7436,
	17053: 0x7834,
	17054: 0x7F77,
	17055: 0x82AD,
	17056: 0x8DDB,
	17057: 0x9817,
	17058: 0x5224,
	17059: 0x5742,
	17060: 0x677F,
	17061: 0x7248,
	17062: 0x74E3,
	17063: 0x8CA9,
	17064: 0x8FA6,
	17065: 0x9211,
	17066: 0x962A,
	17067: 0x516B,
	17068: 0x53ED,
	17069: 0x634C,
	17070: 0x4F69,
	17071: 0x5504,
	17072: 0x6096,
	17073: 0x6557,
	17074: 0x6C9B,
	17075: 0x6D7F,
	17076: 0x724C,
	17077: 0x72FD,
	17078: 0x7A17,
	17079: 0x8987,
	17080: 0x8C9D,
	17081: 0x5F6D,
	17082: 0x6F8E,
	17083: 0x70F9,
	17084: 0x81A8,
	17085: 0x610E,
	17086: 0x4FBF,
	17087: 0x504F,
	17088: 0x6241,
	17089: 0x7247,
	17090: 0x7BC7,
	17091: 0x7DE8,
	17092: 0x7FE9,
	17093: 0x904D,
	17094: 0x97AD,
	17095: 0x9A19,
	17096: 0x8CB6,
	17097: 0x576A,
	17098: 0x5E73,
	17099: 0x67B0,
	17100: 0x840D,
	17101: 0x8A55,
	17102: 0x5420,
	17103: 0x5B16,
	17104: 0x5E63,
	17105: 0x5EE2,
	17106: 0x5F0A,
	17107: 0x6583,
	17108: 0x80BA,
	17109: 0x853D,
	17110: 0x9589,
	17111: 0x965B,
	17112: 0x4F48,
	17113: 0x5305,
	17114: 0x530D,
	17115: 0x530F,
	17116: 0x5486,
	17117: 0x54FA,
	17118: 0x5703,
	17119: 0x5E03,
	17120: 0x6016,
	17121: 0x629B,
	17122: 0x62B1,
	17123: 0x6355,
	17124: 0xFA06,
	17125: 0x6CE1,
	17126: 0x6D66,
	17127: 0x75B1,
	17128: 0x7832,
	17129: 0x80DE,
	17130: 0x812F,
	17131: 0x82DE,
	17132: 0x8461,
	17133: 0x84B2,
	17134: 0x888D,
	17135: 0x8912,
	17136: 0x900B,
	17137: 0x92EA,
	17138: 0x98FD,
	17139: 0x9B91,
	17140: 0x5E45,
	17141: 0x66B4,
	17142: 0x66DD,
	17143: 0x7011,
	17144: 0x7206,
	17145: 0xFA07,
	17146: 0x4FF5,
	17147: 0x527D,
	17148: 0x5F6A,
	17149: 0x6153,
	17150: 0x6753,
	17151: 0x6A19,
	17152: 0x6F02,
	17153: 0x74E2,
	17154: 0x7968,
	17155: 0x8868,
	17156: 0x8C79,
	17157: 0x98C7,
	17158: 0x98C4,
	17159: 0x9A43,
	17160: 0x54C1,
	17161: 0x7A1F,
	17162: 0x6953,
	17163: 0x8AF7,
	17164: 0x8C4A,
	17165: 0x98A8,
	17166: 0x99AE,
	17167: 0x5F7C,
	17168: 0x62AB,
	17169: 0x75B2,
	17170: 0x76AE,
	17171: 0x88AB,
	17172: 0x907F,
	17173: 0x9642,
	17174: 0x5339,
	17175: 0x5F3C,
	17176: 0x5FC5,
	17177: 0x6CCC,
	17178: 0x73CC,
	17179: 0x7562,
	17180: 0x758B,
	17181: 0x7B46,
	17182: 0x82FE,
	17183: 0x999D,
	17184: 0x4E4F,
	17185: 0x903C,
	17186: 0x4E0B,
	17187: 0x4F55,
	17188: 0x53A6,
	17189: 0x590F,
	17190: 0x5EC8,
	17191: 0x6630,
	17192: 0x6CB3,
	17193: 0x7455,
	17194: 0x8377,
	17195: 0x8766,
	17196: 0x8CC0,
	17197: 0x9050,
	17198: 0x971E,
	17199: 0x9C15,
	17200: 0x58D1,
	17201: 0x5B78,
	17202: 0x8650,
	17203: 0x8B14,
	17204: 0x9DB4,
	17205: 0x5BD2,
	17206: 0x6068,
	17207: 0x608D,
	17208: 0x65F1,
	17209: 0x6C57,
	17210: 0x6F22,
	17211: 0x6FA3,
	17212: 0x701A,
	17213: 0x7F55,
	17214: 0x7FF0,
	17215: 0x9591,
	17216: 0x9592,
	17217: 0x9650,
	17218: 0x97D3,
	17219: 0x5272,
	17220: 0x8F44,
	17221: 0x51FD,
	17222: 0x542B,
	17223: 0x54B8,
	17224: 0x5563,
	17225: 0x558A,
	17226: 0x6ABB,
	17227: 0x6DB5,
	17228: 0x7DD8,
	17229: 0x8266,
	17230: 0x929C,
	17231: 0x9677,
	17232: 0x9E79,
	17233: 0x5408,
	17234: 0x54C8,
	17235: 0x76D2,
	17236: 0x86E4,
	17237: 0x95A4,
	17238: 0x95D4,
	17239: 0x965C,
	17240: 0x4EA2,
	17241: 0x4F09,
	17242: 0x59EE,
	17243: 0x5AE6,
	17244: 0x5DF7,
	17245: 0x6052,
	17246: 0x6297,
	17247: 0x676D,
	17248: 0x6841,
	17249: 0x6C86,
	17250: 0x6E2F,
	17251: 0x7F38,
	17252: 0x809B,
	17253: 0x822A,
	17254: 0xFA08,
	17255: 0xFA09,
	17256: 0x9805,
	17257: 0x4EA5,
	17258: 0x5055,
	17259: 0x54B3,
	17260: 0x5793,
	17261: 0x595A,
	17262: 0x5B69,
	17263: 0x5BB3,
	17264: 0x61C8,
	17265: 0x6977,
	17266: 0x6D77,
	17267: 0x7023,
	17268: 0x87F9,
	17269: 0x89E3,
	17270: 0x8A72,
	17271: 0x8AE7,
	17272: 0x9082,
	17273: 0x99ED,
	17274: 0x9AB8,
	17275: 0x52BE,
	17276: 0x6838,
	17277: 0x5016,
	17278: 0x5E78,
	17279: 0x674F,
	17280: 0x8347,
	17281: 0x884C,
	17282: 0x4EAB,
	17283: 0x5411,
	17284: 0x56AE,
	17285: 0x73E6,
	17286: 0x9115,
	17287: 0x97FF,
	17288: 0x9909,
	17289: 0x9957,
	17290: 0x9999,
	17291: 0x5653,
	17292: 0x589F,
	17293: 0x865B,
	17294: 0x8A31,
	17295: 0x61B2,
	17296: 0x6AF6,
	17297: 0x737B,
	17298: 0x8ED2,
	17299: 0x6B47,
	17300: 0x96AA,
	17301: 0x9A57,
	17302: 0x5955,
	17303: 0x7200,
	17304: 0x8D6B,
	17305: 0x9769,
	17306: 0x4FD4,
	17307: 0x5CF4,
	17308: 0x5F26,
	17309: 0x61F8,
	17310: 0x665B,
	17311: 0x6CEB,
	17312: 0x70AB,
	17313: 0x7384,
	17314: 0x73B9,
	17315: 0x73FE,
	17316: 0x7729,
	17317: 0x774D,
	17318: 0x7D43,
	17319: 0x7D62,
	17320: 0x7E23,
	17321: 0x8237,
	17322: 0x8852,
	17323: 0xFA0A,
	17324: 0x8CE2,
	17325: 0x9249,
	17326: 0x986F,
	17327: 0x5B51,
	17328: 0x7A74,
	17329: 0x8840,
	17330: 0x9801,
	17331: 0x5ACC,
	17332: 0x4FE0,
	17333: 0x5354,
	17334: 0x593E,
	17335: 0x5CFD,
	17336: 0x633E,
	17337: 0x6D79,
	17338: 0x72F9,
	17339: 0x8105,
	17340: 0x8107,
	17341: 0x83A2,
	17342: 0x92CF,
	17343: 0x9830,
	17344: 0x4EA8,
	17345: 0x5144,
	17346: 0x5211,
	17347: 0x578B,
	17348: 0x5F62,
	17349: 0x6CC2,
	17350: 0x6ECE,
	17351: 0x7005,
	17352: 0x7050,
	17353: 0x70AF,
	17354: 0x7192,
	17355: 0x73E9,
	17356: 0x7469,
	17357: 0x834A,
	17358: 0x87A2,
	17359: 0x8861,
	17360: 0x9008,
	17361: 0x90A2,
	17362: 0x93A3,
	17363: 0x99A8,
	17364: 0x516E,
	17365: 0x5F57,
	17366: 0x60E0,
	17367: 0x6167,
	17368: 0x66B3,
	17369: 0x8559,
	17370: 0x8E4A,
	17371: 0x91AF,
	17372: 0x978B,
	17373: 0x4E4E,
	17374: 0x4E92,
	17375: 0x547C,
	17376: 0x58D5,
	17377: 0x58FA,
	17378: 0x597D,
	17379: 0x5CB5,
	17380: 0x5F27,
	17381: 0x6236,
	17382: 0x6248,
	17383: 0x660A,
	17384: 0x6667,
	17385: 0x6BEB,
	17386: 0x6D69,
	17387: 0x6DCF,
	17388: 0x6E56,
	17389: 0x6EF8,
	17390: 0x6F94,
	17391: 0x6FE0,
	17392: 0x6FE9,
	17393: 0x705D,
	17394: 0x72D0,
	17395: 0x7425,
	17396: 0x745A,
	17397: 0x74E0,
	17398: 0x7693,
	17399: 0x795C,
	17400: 0x7CCA,
	17401: 0x7E1E,
	17402: 0x80E1,
	17403: 0x82A6,
	17404: 0x846B,
	17405: 0x84BF,
	17406: 0x864E,
	17407: 0x865F,
	17408: 0x8774,
	17409: 0x8B77,
	17410: 0x8C6A,
	17411: 0x93AC,
	17412: 0x9800,
	17413: 0x9865,
	17414: 0x60D1,
	17415: 0x6216,
	17416: 0x9177,
	17417: 0x5A5A,
	17418: 0x660F,
	17419: 0x6DF7,
	17420: 0x6E3E,
	17421: 0x743F,
	17422: 0x9B42,
	17423: 0x5FFD,
	17424: 0x60DA,
	17425: 0x7B0F,
	17426: 0x54C4,
	17427: 0x5F18,
	17428: 0x6C5E,
	17429: 0x6CD3,
	17430: 0x6D2A,
	17431: 0x70D8,
	17432: 0x7D05,
	17433: 0x8679,
	17434: 0x8A0C,
	17435: 0x9D3B,
	17436: 0x5316,
	17437: 0x548C,
	17438: 0x5B05,
	17439: 0x6A3A,
	17440: 0x706B,
	17441: 0x7575,
	17442: 0x798D,
	17443: 0x79BE,
	17444: 0x82B1,
	17445: 0x83EF,
	17446: 0x8A71,
	17447: 0x8B41,
	17448: 0x8CA8,
	17449: 0x9774,
	17450: 0xFA0B,
	17451: 0x64F4,
	17452: 0x652B,
	17453: 0x78BA,
	17454: 0x78BB,
	17455: 0x7A6B,
	17456: 0x4E38,
	17457: 0x559A,
	17458: 0x5950,
	17459: 0x5BA6,
	17460: 0x5E7B,
	17461: 0x60A3,
	17462: 0x63DB,
	17463: 0x6B61,
	17464: 0x6665,
	17465: 0x6853,
	17466: 0x6E19,
	17467: 0x7165,
	17468: 0x74B0,
	17469: 0x7D08,
	17470: 0x9084,
	17471: 0x9A69,
	17472: 0x9C25,
	17473: 0x6D3B,
	17474: 0x6ED1,
	17475: 0x733E,
	17476: 0x8C41,
	17477: 0x95CA,
	17478: 0x51F0,
	17479: 0x5E4C,
	17480: 0x5FA8,
	17481: 0x604D,
	17482: 0x60F6,
	17483: 0x6130,
	17484: 0x614C,
	17485: 0x6643,
	17486: 0x6644,
	17487: 0x69A5,
	17488: 0x6CC1,
	17489: 0x6E5F,
	17490: 0x6EC9,
	17491: 0x6F62,
	17492: 0x714C,
	17493: 0x749C,
	17494: 0x7687,
	17495: 0x7BC1,
	17496: 0x7C27,
	17497: 0x8352,
	17498: 0x8757,
	17499: 0x9051,
	17500: 0x968D,
	17501: 0x9EC3,
	17502: 0x532F,
	17503: 0x56DE,
	17504: 0x5EFB,
	17505: 0x5F8A,
	17506: 0x6062,
	17507: 0x6094,
	17508: 0x61F7,
	17509: 0x6666,
	17510: 0x6703,
	17511: 0x6A9C,
	17512: 0x6DEE,
	17513: 0x6FAE,
	17514: 0x7070,
	17515: 0x736A,
	17516: 0x7E6A,
	17517: 0x81BE,
	17518: 0x8334,
	17519: 0x86D4,
	17520: 0x8AA8,
	17521: 0x8CC4,
	17522: 0x5283,
	17523: 0x7372,
	17524: 0x5B96,
	17525: 0x6A6B,
	17526: 0x9404,
	17527: 0x54EE,
	17528: 0x5686,
	17529: 0x5B5D,
	17530: 0x6548,
	17531: 0x6585,
	17532: 0x66C9,
	17533: 0x689F,
	17534: 0x6D8D,
	17535: 0x6DC6,
	17536: 0x723B,
	17537: 0x80B4,
	17538: 0x9175,
	17539: 0x9A4D,
	17540: 0x4FAF,
	17541: 0x5019,
	17542: 0x539A,
	17543: 0x540E,
	17544: 0x543C,
	17545: 0x5589,
	17546: 0x55C5,
	17547: 0x5E3F,
	17548: 0x5F8C,
	17549: 0x673D,
	17550: 0x7166,
	17551: 0x73DD,
	17552: 0x9005,
	17553: 0x52DB,
	17554: 0x52F3,
	17555: 0x5864,
	17556: 0x58CE,
	17557: 0x7104,
	17558: 0x718F,
	17559: 0x71FB,
	17560: 0x85B0,
	17561: 0x8A13,
	17562: 0x6688,
	17563: 0x85A8,
	17564: 0x55A7,
	17565: 0x6684,
	17566: 0x714A,
	17567: 0x8431,
	17568: 0x5349,
	17569: 0x5599,
	17570: 0x6BC1,
	17571: 0x5F59,
	17572: 0x5FBD,
	17573: 0x63EE,
	17574: 0x6689,
	17575: 0x7147,
	17576: 0x8AF1,
	17577: 0x8F1D,
	17578: 0x9EBE,
	17579: 0x4F11,
	17580: 0x643A,
	17581: 0x70CB,
	17582: 0x7566,
	17583: 0x8667,
	17584: 0x6064,
	17585: 0x8B4E,
	17586: 0x9DF8,
	17587: 0x5147,
	17588: 0x51F6,
	17589: 0x5308,
	17590: 0x6D36,
	17591: 0x80F8,
	17592: 0x9ED1,
	17593: 0x6615,
	17594: 0x6B23,
	17595: 0x7098,
	17596: 0x75D5,
	17597: 0x5403,
	17598: 0x5C79,
	17599: 0x7D07,
	17600: 0x8A16,
	17601: 0x6B20,
	17602: 0x6B3D,
	17603: 0x6B46,
	17604: 0x5438,
	17605: 0x6070,
	17606: 0x6D3D,
	17607: 0x7FD5,
	17608: 0x8208,
	17609: 0x50D6,
	17610: 0x51DE,
	17611: 0x559C,
	17612: 0x566B,
	17613: 0x56CD,
	17614: 0x59EC,
	17615: 0x5B09,
	17616: 0x5E0C,
	17617: 0x6199,
	17618: 0x6198,
	17619: 0x6231,
	17620: 0x665E,
	17621: 0x66E6,
	17622: 0x7199,
	17623: 0x71B9,
	17624: 0x71BA,
	17625: 0x72A7,
	17626: 0x79A7,
	17627: 0x7A00,
	17628: 0x7FB2,
	17629: 0x8A70,
}

const numEncodeTables = 7

// encodeX are the encoding tables from Unicode to EUC-KR code,
// sorted by decreasing length.
// encode0: 20893 entries for runes in [19968, 40861).
// encode1: 11172 entries for runes in [44032, 55204).
// encode2:  1625 entries for runes in [ 8213,  9838).
// encode3:   990 entries for runes in [12288, 13278).
// encode4:   945 entries for runes in [  161,  1106).
// encode5:   268 entries for runes in [63744, 64012).
// encode6:   230 entries for runes in [65281, 65511).

const encode0Low, encode0High = 19968, 40861

var encode0 = [...]uint16{
	19968 - 19968: 0xECE9,
	19969 - 19968: 0xEFCB,
	19971 - 19968: 0xF6D2,
	19975 - 19968: 0xD8B2,
	19976 - 19968: 0xEDDB,
	19977 - 19968: 0xDFB2,
	19978 - 19968: 0xDFBE,
	19979 - 19968: 0xF9BB,
	19981 - 19968: 0xDCF4,
	19985 - 19968: 0xF5E4,
	19988 - 19968: 0xF3A6,
	19989 - 19968: 0xDDE0,
	19990 - 19968: 0xE1A6,
	19992 - 19968: 0xCEF8,
	19993 - 19968: 0xDCB0,
	19998 - 19968: 0xE3AA,
	20013 - 19968: 0xF1E9,
	20018 - 19968: 0xCDFA,
	20024 - 19968: 0xFCAF,
	20025 - 19968: 0xD3A1,
	20027 - 19968: 0xF1AB,
	20034 - 19968: 0xE7D1,
	20035 - 19968: 0xD2AC,
	20037 - 19968: 0xCEF9,
	20043 - 19968: 0xF1FD,
	20045 - 19968: 0xDEBF,
	20046 - 19968: 0xFBBA,
	20047 - 19968: 0xF9B9,
	20054 - 19968: 0xCED2,
	20056 - 19968: 0xE3AB,
	20057 - 19968: 0xEBE0,
	20061 - 19968: 0xCEFA,
	20062 - 19968: 0xCBF7,
	20063 - 19968: 0xE5A5,
	20075 - 19968: 0xCAE1,
	20077 - 19968: 0xD4CC,
	20083 - 19968: 0xEAE1,
	20086 - 19968: 0xDCE3,
	20087 - 19968: 0xDFAD,
	20094 - 19968: 0xCBEB,
	20098 - 19968: 0xD5AF,
	20102 - 19968: 0xD6F5,
	20104 - 19968: 0xE5F8,
	20107 - 19968: 0xDEC0,
	20108 - 19968: 0xECA3,
	20110 - 19968: 0xE9CD,
	20112 - 19968: 0xEAA7,
	20113 - 19968: 0xE9F6,
	20114 - 19968: 0xFBBB,
	20116 - 19968: 0xE7E9,
	20117 - 19968: 0xEFCC,
	20120 - 19968: 0xD0E6,
	20123 - 19968: 0xDEC1,
	20126 - 19968: 0xE4AC,
	20129 - 19968: 0xD8CC,
	20130 - 19968: 0xF9F1,
	20132 - 19968: 0xCEDF,
	20133 - 19968: 0xFAA4,
	20134 - 19968: 0xE6B2,
	20136 - 19968: 0xFAFB,
	20139 - 19968: 0xFABD,
	20140 - 19968: 0xCCC8,
	20141 - 19968: 0xEFCD,
	20142 - 19968: 0xD5D5,
	20150 - 19968: 0xD3A2,
	20154 - 19968: 0xECD1,
	20160 - 19968: 0xE4A7,
	20161 - 19968: 0xECD2,
	20164 - 19968: 0xF6B1,
	20167 - 19968: 0xCEFB,
	20170 - 19968: 0xD0D1,
	20171 - 19968: 0xCBBF,
	20173 - 19968: 0xEDA4,
	20180 - 19968: 0xEDA8,
	20181 - 19968: 0xDEC2,
	20182 - 19968: 0xF6E2,
	20183 - 19968: 0xEDDC,
	20184 - 19968: 0xDCF5,
	20185 - 19968: 0xE0B9,
	20189 - 19968: 0xD4CE,
	20191 - 19968: 0xF4B5,
	20195 - 19968: 0xD3DB,
	20196 - 19968: 0xD6B5,
	20197 - 19968: 0xECA4,
	20208 - 19968: 0xE4E6,
	20210 - 19968: 0xF1EA,
	20214 - 19968: 0xCBEC,
	20215 - 19968: 0xCBC0,
	20219 - 19968: 0xECF2,
	20225 - 19968: 0xD0EA,
	20233 - 19968: 0xF9F2,
	20234 - 19968: 0xECA5,
	20235 - 19968: 0xD0DF,
	20237 - 19968: 0xE7EA,
	20238 - 19968: 0xD0EB,
	20239 - 19968: 0xDCD1,
	20240 - 19968: 0xDBE9,
	20241 - 19968: 0xFDCC,
	20271 - 19968: 0xDBD7,
	20276 - 19968: 0xDAE1,
	20278 - 19968: 0xD6B6,
	20280 - 19968: 0xE3DF,
	20282 - 19968: 0xDEC3,
	20284 - 19968: 0xDEC4,
	20285 - 19968: 0xCAA1,
	20291 - 19968: 0xEEEC,
	20294 - 19968: 0xD3A3,
	20295 - 19968: 0xEEB7,
	20296 - 19968: 0xF8CF,
	20301 - 19968: 0xEAC8,
	20302 - 19968: 0xEEB8,
	20303 - 19968: 0xF1AC,
	20304 - 19968: 0xF1A5,
	20305 - 19968: 0xE9CE,
	20309 - 19968: 0xF9BC,
	20313 - 19968: 0xE5F9,
	20314 - 19968: 0xECEA,
	20315 - 19968: 0xDDD6,
	20316 - 19968: 0xEDC2,
	20329 - 19968: 0xF8A5,
	20335 - 19968: 0xE5BA,
	20336 - 19968: 0xDBD8,
	20339 - 19968: 0xCAA2,
	20342 - 19968: 0xD1CD,
	20346 - 19968: 0xEEED,
	20350 - 19968: 0xECEB,
	20351 - 19968: 0xDEC5,
	20353 - 19968: 0xE3E0,
	20355 - 19968: 0xCAC9,
	20356 - 19968: 0xF2E9,
	20358 - 19968: 0xD5CE,
	20360 - 19968: 0xF6B6,
	20362 - 19968: 0xCEC2,
	20363 - 19968: 0xD6C7,
	20365 - 19968: 0xE3B4,
	20367 - 19968: 0xF1AD,
	20369 - 19968: 0xEAE2,
	20374 - 19968: 0xD7C2,
	20376 - 19968: 0xF3A7,
	20379 - 19968: 0xCDEA,
	20381 - 19968: 0xEBEE,
	20398 - 19968: 0xD9B2,
	20399 - 19968: 0xFDA5,
	20405 - 19968: 0xF6D5,
	20406 - 19968: 0xD5E2,
	20415 - 19968: 0xF8B5,
	20418 - 19968: 0xCCF5,
	20419 - 19968: 0xF5B5,
	20420 - 19968: 0xE4AD,
	20425 - 19968: 0xE7EB,
	20426 - 19968: 0xF1D5,
	20430 - 19968: 0xF0BB,
	20433 - 19968: 0xE9B5,
	20435 - 19968: 0xCCC9,
	20436 - 19968: 0xFAD5,
	20439 - 19968: 0xE1D4,
	20442 - 19968: 0xD7D6,
	20445 - 19968: 0xDCC1,
	20447 - 19968: 0xDEC6,
	20448 - 19968: 0xFAEF,
	20449 - 19968: 0xE3E1,
	20462 - 19968: 0xE1F3,
	20463 - 19968: 0xDCF6,
	20465 - 19968: 0xCEFC,
	20467 - 19968: 0xDBC4,
	20469 - 19968: 0xF8F1,
	20472 - 19968: 0xDCE4,
	20474 - 19968: 0xE5EF,
	20482 - 19968: 0xDCB1,
	20486 - 19968: 0xD5D6,
	20489 - 19968: 0xF3DA,
	20491 - 19968: 0xCBC1,
	20493 - 19968: 0xDBC3,
	20497 - 19968: 0xD9FA,
	20498 - 19968: 0xD3EE,
	20502 - 19968: 0xFAB8,
	20505 - 19968: 0xFDA6,
	20506 - 19968: 0xEBEF,
	20508 - 19968: 0xF4A6,
	20510 - 19968: 0xCCCA,
	20511 - 19968: 0xF3A8,
	20513 - 19968: 0xF3DB,
	20515 - 19968: 0xDBA7,
	20516 - 19968: 0xF6B7,
	20518 - 19968: 0xCFE6,
	20519 - 19968: 0xF0F2,
	20520 - 19968: 0xCBDA,
	20522 - 19968: 0xE7D2,
	20523 - 19968: 0xD7C3,
	20524 - 19968: 0xF6F0,
	20525 - 19968: 0xE8DE,
	20539 - 19968: 0xE5A6,
	20547 - 19968: 0xE5E7,
	20551 - 19968: 0xCAA3,
	20552 - 19968: 0xCCA7,
	20553 - 19968: 0xEAC9,
	20559 - 19968: 0xF8B6,
	20565 - 19968: 0xFAA5,
	20570 - 19968: 0xF1AE,
	20572 - 19968: 0xEFCE,
	20581 - 19968: 0xCBED,
	20596 - 19968: 0xF6B0,
	20597 - 19968: 0xEFCF,
	20598 - 19968: 0xE9CF,
	20600 - 19968: 0xF7DE,
	20608 - 19968: 0xCED3,
	20613 - 19968: 0xDCF7,
	20621 - 19968: 0xDBA8,
	20625 - 19968: 0xCBF8,
	20632 - 19968: 0xDFA1,
	20633 - 19968: 0xDDE1,
	20652 - 19968: 0xF5CA,
	20653 - 19968: 0xE9B6,
	20658 - 19968: 0xE7EC,
	20659 - 19968: 0xEEEE,
	20661 - 19968: 0xF3F0,
	20663 - 19968: 0xDFBF,
	20670 - 19968: 0xCCCB,
	20677 - 19968: 0xD0C1,
	20681 - 19968: 0xF4D2,
	20682 - 19968: 0xE0BA,
	20687 - 19968: 0xDFC0,
	20689 - 19968: 0xCEE0,
	20693 - 19968: 0xDCD2,
	20694 - 19968: 0xFDEA,
	20698 - 19968: 0xD6F6,
	20702 - 19968: 0xEACA,
	20709 - 19968: 0xE8E9,
	20711 - 19968: 0xE3AC,
	20717 - 19968: 0xF3D0,
	20729 - 19968: 0xCAA4,
	20731 - 19968: 0xDBF8,
	20735 - 19968: 0xDEC7,
	20736 - 19968: 0xEBF0,
	20737 - 19968: 0xF1D6,
	20740 - 19968: 0xE5E2,
	20742 - 19968: 0xCCCC,
	20745 - 19968: 0xCBFB,
	20754 - 19968: 0xEAE3,
	20767 - 19968: 0xDFC1,
	20769 - 19968: 0xD6ED,
	20778 - 19968: 0xE9D0,
	20786 - 19968: 0xEEB9,
	20791 - 19968: 0xD5E3,
	20794 - 19968: 0xD1D3,
	20796 - 19968: 0xE5F0,
	20800 - 19968: 0xE8B4,
	20801 - 19968: 0xEBC3,
	20803 - 19968: 0xEAAA,
	20804 - 19968: 0xFAFC,
	20805 - 19968: 0xF5F6,
	20806 - 19968: 0xF0BC,
	20807 - 19968: 0xFDD4,
	20808 - 19968: 0xE0BB,
	20809 - 19968: 0xCEC3,
	20811 - 19968: 0xD0BA,
	20812 - 19968: 0xF7BA,
	20813 - 19968: 0xD8F3,
	20814 - 19968: 0xF7CD,
	20818 - 19968: 0xE4AE,
	20828 - 19968: 0xD4DF,
	20834 - 19968: 0xD0E7,
	20837 - 19968: 0xECFD,
	20839 - 19968: 0xD2AE,
	20840 - 19968: 0xEEEF,
	20841 - 19968: 0xD5D7,
	20842 - 19968: 0xEAE4,
	20843 - 19968: 0xF8A2,
	20844 - 19968: 0xCDEB,
	20845 - 19968: 0xD7BF,
	20846 - 19968: 0xFBB1,
	20849 - 19968: 0xCDEC,
	20853 - 19968: 0xDCB2,
	20854 - 19968: 0xD0EC,
	20855 - 19968: 0xCEFD,
	20856 - 19968: 0xEEF0,
	20860 - 19968: 0xCCC2,
	20864 - 19968: 0xD0ED,
	20870 - 19968: 0xE5F7,
	20874 - 19968: 0xF3FC,
	20877 - 19968: 0xEEA2,
	20882 - 19968: 0xD9B3,
	20885 - 19968: 0xD8F4,
	20887 - 19968: 0xE9B7,
	20896 - 19968: 0xCEAE,
	20901 - 19968: 0xD9A2,
	20906 - 19968: 0xD8F1,
	20908 - 19968: 0xD4CF,
	20918 - 19968: 0xE5A7,
	20919 - 19968: 0xD5D2,
	20925 - 19968: 0xD6A9,
	20932 - 19968: 0xF4A2,
	20934 - 19968: 0xF1D7,
	20937 - 19968: 0xD5D8,
	20939 - 19968: 0xF0BD,
	20940 - 19968: 0xD7D0,
	20941 - 19968: 0xD4D0,
	20956 - 19968: 0xD7CF,
	20957 - 19968: 0xEBEA,
	20958 - 19968: 0xFDEB,
	20961 - 19968: 0xDBED,
	20976 - 19968: 0xFCC5,
	20977 - 19968: 0xCBC2,
	20982 - 19968: 0xFDD5,
	20984 - 19968: 0xF4C8,
	20985 - 19968: 0xE8EA,
	20986 - 19968: 0xF5F3,
	20989 - 19968: 0xF9DE,
	20992 - 19968: 0xD3EF,
	20995 - 19968: 0xECD3,
	20998 - 19968: 0xDDC2,
	20999 - 19968: 0xEFB7,
	21000 - 19968: 0xE7D4,
	21002 - 19968: 0xCACA,
	21006 - 19968: 0xD9FB,
	21009 - 19968: 0xFAFD,
	21015 - 19968: 0xD6AA,
	21021 - 19968: 0xF4F8,
	21028 - 19968: 0xF7F7,
	21029 - 19968: 0xDCAC,
	21033 - 19968: 0xD7D7,
	21034 - 19968: 0xDFA2,
	21038 - 19968: 0xCEBE,
	21040 - 19968: 0xD3F0,
	21046 - 19968: 0xF0A4,
	21047 - 19968: 0xE1EC,
	21048 - 19968: 0xCFE7,
	21049 - 19968: 0xF3CB,
	21050 - 19968: 0xEDA9,
	21051 - 19968: 0xCABE,
	21059 - 19968: 0xF4EF,
	21063 - 19968: 0xF6CE,
	21066 - 19968: 0xDEFB,
	21067 - 19968: 0xD0BB,
	21068 - 19968: 0xD5B7,
	21069 - 19968: 0xEEF1,
	21076 - 19968: 0xF4A8,
	21078 - 19968: 0xDCF8,
	21083 - 19968: 0xCBA7,
	21085 - 19968: 0xDACE,
	21089 - 19968: 0xE0E6,
	21097 - 19968: 0xEDA5,
	21098 - 19968: 0xEEF2,
	21103 - 19968: 0xDCF9,
	21106 - 19968: 0xF9DC,
	21109 - 19968: 0xF3DC,
	21117 - 19968: 0xF8F2,
	21119 - 19968: 0xF4F9,
	21123 - 19968: 0xFCF1,
	21127 - 19968: 0xD0BC,
	21128 - 19968: 0xDBF9,
	21129 - 19968: 0xD7B1,
	21133 - 19968: 0xCBFC,
	21137 - 19968: 0xF0A5,
	21138 - 19968: 0xCBFD,
	21147 - 19968: 0xD5F4,
	21151 - 19968: 0xCDED,
	21152 - 19968: 0xCAA5,
	21155 - 19968: 0xD6AB,
	21156 - 19968: 0xD0C2,
	21161 - 19968: 0xF0BE,
	21162 - 19968: 0xD2BD,
	21163 - 19968: 0xCCA4,
	21182 - 19968: 0xFAB6,
	21185 - 19968: 0xCCCD,
	21187 - 19968: 0xDAFA,
	21189 - 19968: 0xF6CF,
	21191 - 19968: 0xE9B8,
	21193 - 19968: 0xD8F5,
	21197 - 19968: 0xCCCE,
	21202 - 19968: 0xD7CD,
	21205 - 19968: 0xD4D1,
	21206 - 19968: 0xE9ED,
	21208 - 19968: 0xCAEB,
	21209 - 19968: 0xD9E2,
	21211 - 19968: 0xFDB2,
	21213 - 19968: 0xE3AD,
	21214 - 19968: 0xD6CC,
	21215 - 19968: 0xD9B4,
	21218 - 19968: 0xE1A7,
	21219 - 19968: 0xEED3,
	21220 - 19968: 0xD0C3,
	21235 - 19968: 0xFDB3,
	21237 - 19968: 0xD5E4,
	21240 - 19968: 0xCFE8,
	21242 - 19968: 0xEDC3,
	21243 - 19968: 0xD0B2,
	21246 - 19968: 0xCEFE,
	21247 - 19968: 0xDAA8,
	21253 - 19968: 0xF8D0,
	21256 - 19968: 0xFDD6,
	21261 - 19968: 0xF8D1,
	21263 - 19968: 0xF8D2,
	21264 - 19968: 0xDCD3,
	21269 - 19968: 0xDDE2,
	21270 - 19968: 0xFBF9,
	21271 - 19968: 0xDDC1,
	21273 - 19968: 0xE3B5,
	21280 - 19968: 0xEDDD,
	21281 - 19968: 0xCEC4,
	21283 - 19968: 0xCBA1,
	21290 - 19968: 0xDDE3,
	21295 - 19968: 0xFCDD,
	21305 - 19968: 0xF9AF,
	21311 - 19968: 0xD2FB,
	21312 - 19968: 0xCFA1,
	21313 - 19968: 0xE4A8,
	21315 - 19968: 0xF4B6,
	21316 - 19968: 0xECFE,
	21319 - 19968: 0xE3AE,
	21320 - 19968: 0xE7ED,
	21321 - 19968: 0xFDC1,
	21322 - 19968: 0xDAE2,
	21325 - 19968: 0xD8B3,
	21329 - 19968: 0xDDE4,
	21330 - 19968: 0xF0EF,
	21331 - 19968: 0xF6F1,
	21332 - 19968: 0xFAF0,
	21335 - 19968: 0xD1F5,
	21338 - 19968: 0xDACF,
	21340 - 19968: 0xDCD4,
	21342 - 19968: 0xDCA6,
	21344 - 19968: 0xEFBF,
	21350 - 19968: 0xCECF,
	21352 - 19968: 0xE0D9,
	21359 - 19968: 0xD9D6,
	21360 - 19968: 0xECD4,
	21361 - 19968: 0xEACB,
	21364 - 19968: 0xCABF,
	21365 - 19968: 0xD5B0,
	21367 - 19968: 0xCFE9,
	21373 - 19968: 0xF1ED,
	21375 - 19968: 0xCCCF,
	21380 - 19968: 0xE4F8,
	21395 - 19968: 0xE4ED,
	21400 - 19968: 0xD7D8,
	21402 - 19968: 0xFDA7,
	21407 - 19968: 0xEAAB,
	21408 - 19968: 0xF6B2,
	21413 - 19968: 0xCFF0,
	21414 - 19968: 0xF9BD,
	21421 - 19968: 0xE6F4,
	21435 - 19968: 0xCBDB,
	21443 - 19968: 0xF3D1,
	21448 - 19968: 0xE9D1,
	21449 - 19968: 0xF3A9,
	21450 - 19968: 0xD0E0,
	21451 - 19968: 0xE9D2,
	21453 - 19968: 0xDAE3,
	21460 - 19968: 0xE2D2,
	21462 - 19968: 0xF6A2,
	21463 - 19968: 0xE1F4,
	21467 - 19968: 0xDAE4,
	21473 - 19968: 0xE7D5,
	21474 - 19968: 0xF5BF,
	21475 - 19968: 0xCFA2,
	21476 - 19968: 0xCDAF,
	21477 - 19968: 0xCFA3,
	21481 - 19968: 0xCDB0,
	21482 - 19968: 0xF1FE,
	21483 - 19968: 0xD0A3,
	21484 - 19968: 0xE1AF,
	21485 - 19968: 0xF8A3,
	21487 - 19968: 0xCAA6,
	21488 - 19968: 0xF7BB,
	21489 - 19968: 0xF2EA,
	21490 - 19968: 0xDEC8,
	21491 - 19968: 0xE9D3,
	21496 - 19968: 0xDEC9,
	21507 - 19968: 0xFDDE,
	21508 - 19968: 0xCAC0,
	21512 - 19968: 0xF9EA,
	21513 - 19968: 0xD1CE,
	21514 - 19968: 0xEED4,
	21516 - 19968: 0xD4D2,
	21517 - 19968: 0xD9A3,
	21518 - 19968: 0xFDA8,
	21519 - 19968: 0xD7D9,
	21520 - 19968: 0xF7CE,
	21521 - 19968: 0xFABE,
	21531 - 19968: 0xCFD6,
	21533 - 19968: 0xD7F0,
	21535 - 19968: 0xEBE1,
	21536 - 19968: 0xF8C5,
	21542 - 19968: 0xDCFA,
	21545 - 19968: 0xDDC3,
	21547 - 19968: 0xF9DF,
	21555 - 19968: 0xE7EF,
	21560 - 19968: 0xFDE5,
	21561 - 19968: 0xF6A3,
	21563 - 19968: 0xD9FC,
	21564 - 19968: 0xFDA9,
	21566 - 19968: 0xE7EE,
	21570 - 19968: 0xD5E5,
	21576 - 19968: 0xEFD0,
	21578 - 19968: 0xCDB1,
	21585 - 19968: 0xF7A2,
	21608 - 19968: 0xF1B2,
	21610 - 19968: 0xF1B1,
	21617 - 19968: 0xCDB2,
	21619 - 19968: 0xDAAB,
	21621 - 19968: 0xCAA7,
	21627 - 19968: 0xE3E2,
	21628 - 19968: 0xFBBC,
	21629 - 19968: 0xD9A4,
	21632 - 19968: 0xEEBA,
	21638 - 19968: 0xF8D3,
	21644 - 19968: 0xFBFA,
	21646 - 19968: 0xCFA4,
	21648 - 19968: 0xDCFB,
	21668 - 19968: 0xF6E3,
	21672 - 19968: 0xEDAA,
	21675 - 19968: 0xF2A1,
	21676 - 19968: 0xCEE1,
	21683 - 19968: 0xFAA6,
	21688 - 19968: 0xF9E0,
	21693 - 19968: 0xECD6,
	21696 - 19968: 0xE4EE,
	21697 - 19968: 0xF9A1,
	21700 - 19968: 0xFBEF,
	21704 - 19968: 0xF9EB,
	21705 - 19968: 0xEEA3,
	21729 - 19968: 0xEAAC,
	21733 - 19968: 0xCAA8,
	21736 - 19968: 0xF4FA,
	21741 - 19968: 0xCDD6,
	21742 - 19968: 0xFCF6,
	21746 - 19968: 0xF4C9,
	21754 - 19968: 0xF8D4,
	21764 - 19968: 0xF8A6,
	21766 - 19968: 0xDECA,
	21767 - 19968: 0xF2C6,
	21774 - 19968: 0xD7DA,
	21776 - 19968: 0xD3D0,
	21788 - 19968: 0xD8C5,
	21807 - 19968: 0xEAE6,
	21809 - 19968: 0xF3DD,
	21813 - 19968: 0xE4DA,
	21822 - 19968: 0xF6E4,
	21828 - 19968: 0xF6F2,
	21830 - 19968: 0xDFC2,
	21839 - 19968: 0xD9FD,
	21843 - 19968: 0xCCF6,
	21846 - 19968: 0xD3BA,
	21854 - 19968: 0xE4AF,
	21859 - 19968: 0xF9E1,
	21884 - 19968: 0xF0A6,
	21888 - 19968: 0xCBD3,
	21892 - 19968: 0xE0BC,
	21894 - 19968: 0xF4CA,
	21895 - 19968: 0xD4FA,
	21897 - 19968: 0xFDAA,
	21898 - 19968: 0xF9E2,
	21912 - 19968: 0xF4B7,
	21913 - 19968: 0xFDC2,
	21914 - 19968: 0xFCB0,
	21916 - 19968: 0xFDEC,
	21917 - 19968: 0xCAE2,
	21927 - 19968: 0xFDBD,
	21929 - 19968: 0xEAE7,
	21930 - 19968: 0xDFC3,
	21931 - 19968: 0xD1D2,
	21932 - 19968: 0xCEE2,
	21934 - 19968: 0xD3A4,
	21957 - 19968: 0xFDAB,
	21959 - 19968: 0xDFE0,
	21972 - 19968: 0xF2C7,
	21978 - 19968: 0xE7F0,
	21980 - 19968: 0xD0EE,
	21983 - 19968: 0xF3AA,
	21987 - 19968: 0xDECB,
	21988 - 19968: 0xF6B8,
	22013 - 19968: 0xE1F5,
	22014 - 19968: 0xF1B3,
	22022 - 19968: 0xF7A3,
	22025 - 19968: 0xCAA9,
	22036 - 19968: 0xCFA5,
	22039 - 19968: 0xDFC4,
	22063 - 19968: 0xE1B0,
	22066 - 19968: 0xF0BF,
	22068 - 19968: 0xF6A4,
	22070 - 19968: 0xE3B6,
	22099 - 19968: 0xFAC6,
	22120 - 19968: 0xD0EF,
	22123 - 19968: 0xFDED,
	22132 - 19968: 0xDDC4,
	22150 - 19968: 0xFCF7,
	22181 - 19968: 0xE6BF,
	22188 - 19968: 0xDEAD,
	22190 - 19968: 0xFABF,
	22196 - 19968: 0xE5F1,
	22204 - 19968: 0xEDC4,
	22218 - 19968: 0xD2A5,
	22221 - 19968: 0xFDEE,
	22225 - 19968: 0xF5B6,
	22234 - 19968: 0xE1F6,
	22235 - 19968: 0xDECC,
	22238 - 19968: 0xFCDE,
	22240 - 19968: 0xECD7,
	22256 - 19968: 0xCDDD,
	22265 - 19968: 0xD6B7,
	22266 - 19968: 0xCDB3,
	22275 - 19968: 0xF8D5,
	22276 - 19968: 0xE5D8,
	22280 - 19968: 0xCFEA,
	22283 - 19968: 0xCFD0,
	22285 - 19968: 0xEACC,
	22290 - 19968: 0xEAAE,
	22291 - 19968: 0xEAAD,
	22294 - 19968: 0xD3F1,
	22296 - 19968: 0xD3A5,
	22303 - 19968: 0xF7CF,
	22312 - 19968: 0xEEA4,
	22317 - 19968: 0xD0A4,
	22320 - 19968: 0xF2A2,
	22331 - 19968: 0xD0F0,
	22336 - 19968: 0xF2A3,
	22338 - 19968: 0xF7F8,
	22343 - 19968: 0xD0B3,
	22346 - 19968: 0xDBA9,
	22349 - 19968: 0xD3BB,
	22350 - 19968: 0xCAEC,
	22352 - 19968: 0xF1A6,
	22353 - 19968: 0xCBD5,
	22369 - 19968: 0xF7E7,
	22372 - 19968: 0xCDDE,
	22374 - 19968: 0xF7A4,
	22378 - 19968: 0xF8C0,
	22382 - 19968: 0xD3DD,
	22384 - 19968: 0xCCD0,
	22389 - 19968: 0xCFA6,
	22396 - 19968: 0xF6F3,
	22402 - 19968: 0xE1F7,
	22408 - 19968: 0xD3DC,
	22411 - 19968: 0xFAFE,
	22419 - 19968: 0xFAA7,
	22432 - 19968: 0xEBD9,
	22434 - 19968: 0xCFA7,
	22435 - 19968: 0xEAAF,
	22467 - 19968: 0xE4EF,
	22471 - 19968: 0xE9B9,
	22472 - 19968: 0xF1D8,
	22475 - 19968: 0xD8D8,
	22478 - 19968: 0xE0F2,
	22495 - 19968: 0xE6B4,
	22496 - 19968: 0xDCFC,
	22512 - 19968: 0xF3F1,
	22516 - 19968: 0xE3D0,
	22519 - 19968: 0xF2FB,
	22521 - 19968: 0xDBC6,
	22522 - 19968: 0xD0F1,
	22524 - 19968: 0xD0F2,
	22528 - 19968: 0xCFDC,
	22530 - 19968: 0xD3D1,
	22533 - 19968: 0xCCB1,
	22534 - 19968: 0xF7D8,
	22536 - 19968: 0xCBA8,
	22537 - 19968: 0xEBBC,
	22538 - 19968: 0xE4BE,
	22558 - 19968: 0xF4DC,
	22561 - 19968: 0xDCC2,
	22564 - 19968: 0xF0A7,
	22567 - 19968: 0xE6C0,
	22570 - 19968: 0xCAED,
	22575 - 19968: 0xE8EB,
	22576 - 19968: 0xE5E8,
	22577 - 19968: 0xDCC3,
	22580 - 19968: 0xEDDE,
	22581 - 19968: 0xD3F2,
	22586 - 19968: 0xCCF7,
	22602 - 19968: 0xCED4,
	22603 - 19968: 0xE7AB,
	22607 - 19968: 0xCBC3,
	22609 - 19968: 0xE1B1,
	22612 - 19968: 0xF7B2,
	22615 - 19968: 0xD3F3,
	22616 - 19968: 0xD3D2,
	22618 - 19968: 0xF5C0,
	22622 - 19968: 0xDFDD,
	22625 - 19968: 0xEEF3,
	22626 - 19968: 0xE7F1,
	22628 - 19968: 0xFDB4,
	22645 - 19968: 0xF2C8,
	22649 - 19968: 0xF3D2,
	22652 - 19968: 0xEEF4,
	22654 - 19968: 0xE2D3,
	22659 - 19968: 0xCCD1,
	22661 - 19968: 0xDFEA,
	22665 - 19968: 0xE9BA,
	22675 - 19968: 0xD9D7,
	22684 - 19968: 0xF5CD,
	22686 - 19968: 0xF1F2,
	22687 - 19968: 0xFAC7,
	22696 - 19968: 0xD9F8,
	22697 - 19968: 0xD4C2,
	22702 - 19968: 0xF6E5,
	22707 - 19968: 0xDDC5,
	22714 - 19968: 0xE7F2,
	22715 - 19968: 0xEDDF,
	22718 - 19968: 0xCACB,
	22721 - 19968: 0xDBFA,
	22725 - 19968: 0xE8B5,
	22727 - 19968: 0xD3A6,
	22734 - 19968: 0xFDB5,
	22737 - 19968: 0xF9C9,
	22739 - 19968: 0xE4E2,
	22741 - 19968: 0xFBBD,
	22744 - 19968: 0xD7A4,
	22745 - 19968: 0xCEC5,
	22750 - 19968: 0xCED5,
	22751 - 19968: 0xD6E6,
	22756 - 19968: 0xE5BD,
	22763 - 19968: 0xDECD,
	22764 - 19968: 0xECF3,
	22767 - 19968: 0xEDE0,
	22777 - 19968: 0xECEC,
	22778 - 19968: 0xFBBE,
	22779 - 19968: 0xDFEB,
	22781 - 19968: 0xE1F8,
	22799 - 19968: 0xF9BE,
	22804 - 19968: 0xD0F3,
	22805 - 19968: 0xE0AA,
	22806 - 19968: 0xE8E2,
	22809 - 19968: 0xE2D4,
	22810 - 19968: 0xD2FD,
	22812 - 19968: 0xE5A8,
	22818 - 19968: 0xD9D3,
	22823 - 19968: 0xD3DE,
	22825 - 19968: 0xF4B8,
	22826 - 19968: 0xF7BC,
	22827 - 19968: 0xDCFD,
	22829 - 19968: 0xE8EC,
	22830 - 19968: 0xE4E7,
	22833 - 19968: 0xE3F7,
	22839 - 19968: 0xECA8,
	22846 - 19968: 0xFAF1,
	22852 - 19968: 0xE5F2,
	22855 - 19968: 0xD0F4,
	22856 - 19968: 0xD2AF,
	22857 - 19968: 0xDCE5,
	22862 - 19968: 0xD0A5,
	22863 - 19968: 0xF1B4,
	22864 - 19968: 0xFCB1,
	22865 - 19968: 0xCCF8,
	22868 - 19968: 0xDDC6,
	22869 - 19968: 0xFAD1,
	22871 - 19968: 0xF7DF,
	22874 - 19968: 0xFAA8,
	22880 - 19968: 0xEEF5,
	22882 - 19968: 0xDECE,
	22887 - 19968: 0xE7F3,
	22890 - 19968: 0xF7AC,
	22891 - 19968: 0xEBC4,
	22892 - 19968: 0xEDE1,
	22893 - 19968: 0xE0AB,
	22894 - 19968: 0xDDC7,
	22899 - 19968: 0xD2B3,
	22900 - 19968: 0xD2BF,
	22904 - 19968: 0xCACC,
	22909 - 19968: 0xFBBF,
	22914 - 19968: 0xE5FD,
	22915 - 19968: 0xDDE5,
	22916 - 19968: 0xD8CD,
	22922 - 19968: 0xECF4,
	22931 - 19968: 0xD0F5,
	22934 - 19968: 0xE8ED,
	22935 - 19968: 0xD0D2,
	22937 - 19968: 0xD9D8,
	22949 - 19968: 0xF6E6,
	22952 - 19968: 0xDBAA,
	22956 - 19968: 0xF7E0,
	22969 - 19968: 0xD8D9,
	22971 - 19968: 0xF4A3,
	22974 - 19968: 0xF4DD,
	22979 - 19968: 0xEFD1,
	22982 - 19968: 0xD9B5,
	22985 - 19968: 0xEDAB,
	22987 - 19968: 0xE3B7,
	22992 - 19968: 0xEEBB,
	22993 - 19968: 0xCDB4,
	22995 - 19968: 0xE0F3,
	22996 - 19968: 0xEACD,
	23001 - 19968: 0xECF5,
	23002 - 19968: 0xE8EE,
	23004 - 19968: 0xCBA9,
	23005 - 19968: 0xF1AF,
	23014 - 19968: 0xCACD,
	23016 - 19968: 0xECA9,
	23018 - 19968: 0xF2EB,
	23020 - 19968: 0xFDEF,
	23022 - 19968: 0xF9F3,
	23032 - 19968: 0xE6C1,
	23035 - 19968: 0xECD8,
	23039 - 19968: 0xEDAC,
	23041 - 19968: 0xEACE,
	23043 - 19968: 0xE8DF,
	23057 - 19968: 0xDECF,
	23064 - 19968: 0xD2A6,
	23067 - 19968: 0xE7F4,
	23068 - 19968: 0xD1D6,
	23071 - 19968: 0xE6C2,
	23072 - 19968: 0xE3E3,
	23077 - 19968: 0xE4B0,
	23081 - 19968: 0xD8B4,
	23094 - 19968: 0xF6A5,
	23100 - 19968: 0xF3DE,
	23105 - 19968: 0xD7A5,
	23110 - 19968: 0xF7E8,
	23113 - 19968: 0xE8C6,
	23130 - 19968: 0xFBE6,
	23138 - 19968: 0xDDE6,
	23142 - 19968: 0xDCFE,
	23186 - 19968: 0xD8DA,
	23194 - 19968: 0xDAAC,
	23195 - 19968: 0xEAB0,
	23204 - 19968: 0xE3B8,
	23233 - 19968: 0xCAAA,
	23234 - 19968: 0xE1F9,
	23236 - 19968: 0xEAB1,
	23241 - 19968: 0xF2EC,
	23244 - 19968: 0xFAEE,
	23265 - 19968: 0xEED5,
	23270 - 19968: 0xF9F4,
	23273 - 19968: 0xD2EC,
	23301 - 19968: 0xFBFB,
	23305 - 19968: 0xFDF0,
	23307 - 19968: 0xE0BD,
	23308 - 19968: 0xCEE3,
	23318 - 19968: 0xF8C6,
	23338 - 19968: 0xDEAE,
	23360 - 19968: 0xDFC5,
	23363 - 19968: 0xE5BE,
	23376 - 19968: 0xEDAD,
	23377 - 19968: 0xFAEA,
	23380 - 19968: 0xCDEE,
	23381 - 19968: 0xEDA6,
	23383 - 19968: 0xEDAE,
	23384 - 19968: 0xF0ED,
	23386 - 19968: 0xDDA1,
	23388 - 19968: 0xEDAF,
	23389 - 19968: 0xFCF8,
	23391 - 19968: 0xD8EB,
	23395 - 19968: 0xCCF9,
	23396 - 19968: 0xCDB5,
	23401 - 19968: 0xFAA9,
	23403 - 19968: 0xE1DD,
	23408 - 19968: 0xE2D5,
	23409 - 19968: 0xEDCF,
	23413 - 19968: 0xDDA2,
	23416 - 19968: 0xF9CA,
	23418 - 19968: 0xEAE8,
	23420 - 19968: 0xE5ED,
	23429 - 19968: 0xD3EB,
	23431 - 19968: 0xE9D4,
	23432 - 19968: 0xE1FA,
	23433 - 19968: 0xE4CC,
	23435 - 19968: 0xE1E4,
	23436 - 19968: 0xE8C7,
	23439 - 19968: 0xCEDB,
	23443 - 19968: 0xDCD5,
	23445 - 19968: 0xF7B5,
	23446 - 19968: 0xFCF3,
	23447 - 19968: 0xF0F3,
	23448 - 19968: 0xCEAF,
	23449 - 19968: 0xF1B5,
	23450 - 19968: 0xEFD2,
	23451 - 19968: 0xE8C8,
	23452 - 19968: 0xEBF1,
	23458 - 19968: 0xCBD4,
	23459 - 19968: 0xE0BE,
	23460 - 19968: 0xE3F8,
	23461 - 19968: 0xEAE9,
	23462 - 19968: 0xFCB2,
	23468 - 19968: 0xE0F4,
	23470 - 19968: 0xCFE0,
	23472 - 19968: 0xEEA5,
	23475 - 19968: 0xFAAA,
	23476 - 19968: 0xE6C3,
	23477 - 19968: 0xE1B2,
	23478 - 19968: 0xCAAB,
	23480 - 19968: 0xE3E4,
	23481 - 19968: 0xE9BB,
	23487 - 19968: 0xE2D6,
	23488 - 19968: 0xF3F2,
	23490 - 19968: 0xEED6,
	23491 - 19968: 0xEAB2,
	23492 - 19968: 0xD0F6,
	23493 - 19968: 0xECD9,
	23494 - 19968: 0xDACB,
	23495 - 19968: 0xCFA8,
	23500 - 19968: 0xDDA3,
	23504 - 19968: 0xD8DB,
	23506 - 19968: 0xF9CE,
	23507 - 19968: 0xE9D5,
	23508 - 19968: 0xE3D1,
	23511 - 19968: 0xD2BC,
	23518 - 19968: 0xD8AC,
	23519 - 19968: 0xF3CC,
	23521 - 19968: 0xCDFB,
	23522 - 19968: 0xF6D6,
	23524 - 19968: 0xE7F5,
	23525 - 19968: 0xE8EF,
	23526 - 19968: 0xE3F9,
	23527 - 19968: 0xD2BB,
	23528 - 19968: 0xF3F3,
	23529 - 19968: 0xE3FB,
	23531 - 19968: 0xDED0,
	23532 - 19968: 0xCEB0,
	23534 - 19968: 0xD6F7,
	23535 - 19968: 0xF1D9,
	23541 - 19968: 0xF5C1,
	23542 - 19968: 0xDCC4,
	23544 - 19968: 0xF5BB,
	23546 - 19968: 0xDED1,
	23553 - 19968: 0xDCE6,
	23556 - 19968: 0xDED2,
	23559 - 19968: 0xEDE2,
	23560 - 19968: 0xEEF6,
	23561 - 19968: 0xEACF,
	23562 - 19968: 0xF0EE,
	23563 - 19968: 0xE3FC,
	23565 - 19968: 0xD3DF,
	23566 - 19968: 0xD3F4,
	23567 - 19968: 0xE1B3,
	23569 - 19968: 0xE1B4,
	23574 - 19968: 0xF4D3,
	23577 - 19968: 0xDFC6,
	23588 - 19968: 0xE9D6,
	23592 - 19968: 0xDBAB,
	23601 - 19968: 0xF6A6,
	23608 - 19968: 0xE3B9,
	23609 - 19968: 0xEBC5,
	23610 - 19968: 0xF4A9,
	23611 - 19968: 0xCDB6,
	23612 - 19968: 0xD2F9,
	23614 - 19968: 0xDAAD,
	23615 - 19968: 0xD2E3,
	23616 - 19968: 0xCFD1,
	23621 - 19968: 0xCBDC,
	23622 - 19968: 0xCCFA,
	23624 - 19968: 0xCFDD,
	23627 - 19968: 0xE8A9,
	23629 - 19968: 0xE3BB,
	23630 - 19968: 0xE3BA,
	23633 - 19968: 0xE0DA,
	23637 - 19968: 0xEEF7,
	23643 - 19968: 0xDCB3,
	23648 - 19968: 0xD3F5,
	23650 - 19968: 0xD7A6,
	23652 - 19968: 0xF6B5,
	23653 - 19968: 0xD7DB,
	23660 - 19968: 0xE1D5,
	23663 - 19968: 0xD4EA,
	23665 - 19968: 0xDFA3,
	23673 - 19968: 0xFDDF,
	23696 - 19968: 0xD0F7,
	23697 - 19968: 0xEDD4,
	23713 - 19968: 0xCBAA,
	23721 - 19968: 0xE4DB,
	23723 - 19968: 0xE1FB,
	23724 - 19968: 0xCBA2,
	23729 - 19968: 0xD3E0,
	23731 - 19968: 0xE4BF,
	23733 - 19968: 0xFBC0,
	23735 - 19968: 0xDABE,
	23736 - 19968: 0xE4CD,
	23738 - 19968: 0xD6B9,
	23742 - 19968: 0xEFC0,
	23744 - 19968: 0xE1FC,
	23769 - 19968: 0xF6B9,
	23776 - 19968: 0xDFC7,
	23784 - 19968: 0xE4B1,
	23791 - 19968: 0xDCE7,
	23792 - 19968: 0xDCE8,
	23796 - 19968: 0xFAD6,
	23798 - 19968: 0xD3F6,
	23803 - 19968: 0xF1DA,
	23805 - 19968: 0xFAF2,
	23815 - 19968: 0xE2FD,
	23821 - 19968: 0xD5CF,
	23822 - 19968: 0xD0F8,
	23825 - 19968: 0xCDDF,
	23828 - 19968: 0xF5CB,
	23830 - 19968: 0xE4F0,
	23831 - 19968: 0xCBAB,
	23833 - 19968: 0xD7C4,
	23847 - 19968: 0xE2FE,
	23849 - 19968: 0xDDDA,
	23883 - 19968: 0xDAAE,
	23884 - 19968: 0xCAEE,
	23888 - 19968: 0xD5B9,
	23913 - 19968: 0xE3A1,
	23916 - 19968: 0xE8E3,
	23919 - 19968: 0xF3AB,
	23943 - 19968: 0xCFA9,
	23947 - 19968: 0xD3F7,
	23965 - 19968: 0xD4F1,
	23968 - 19968: 0xCEE4,
	23970 - 19968: 0xE8F2,
	23978 - 19968: 0xE5F5,
	23992 - 19968: 0xE7AE,
	23994 - 19968: 0xD6BA,
	23996 - 19968: 0xDFEC,
	23997 - 19968: 0xE4C0,
	24013 - 19968: 0xE8E4,
	24018 - 19968: 0xD8B5,
	24022 - 19968: 0xE4DC,
	24029 - 19968: 0xF4B9,
	24030 - 19968: 0xF1B6,
	24033 - 19968: 0xE2DE,
	24034 - 19968: 0xE1B5,
	24037 - 19968: 0xCDEF,
	24038 - 19968: 0xF1A7,
	24039 - 19968: 0xCEE5,
	24040 - 19968: 0xCBDD,
	24043 - 19968: 0xD9E3,
	24046 - 19968: 0xF3AC,
	24049 - 19968: 0xD0F9,
	24050 - 19968: 0xECAB,
	24051 - 19968: 0xDED3,
	24052 - 19968: 0xF7E9,
	24055 - 19968: 0xF9F5,
	24061 - 19968: 0xE1DE,
	24062 - 19968: 0xCBEE,
	24066 - 19968: 0xE3BC,
	24067 - 19968: 0xF8D6,
	24070 - 19968: 0xDBEE,
	24076 - 19968: 0xFDF1,
	24081 - 19968: 0xF7B6,
	24086 - 19968: 0xF4DE,
	24089 - 19968: 0xF2ED,
	24091 - 19968: 0xDBD9,
	24093 - 19968: 0xF0A8,
	24101 - 19968: 0xE1FD,
	24107 - 19968: 0xDED4,
	24109 - 19968: 0xE0AC,
	24115 - 19968: 0xEDE3,
	24118 - 19968: 0xD3E1,
	24120 - 19968: 0xDFC8,
	24125 - 19968: 0xD9B6,
	24127 - 19968: 0xFDAC,
	24128 - 19968: 0xEFD3,
	24132 - 19968: 0xE4C1,
	24133 - 19968: 0xF8EB,
	24135 - 19968: 0xDBAC,
	24140 - 19968: 0xFCC6,
	24149 - 19968: 0xD8AD,
	24159 - 19968: 0xF6BA,
	24161 - 19968: 0xDBDF,
	24162 - 19968: 0xD3D3,
	24163 - 19968: 0xF8C7,
	24178 - 19968: 0xCACE,
	24179 - 19968: 0xF8C1,
	24180 - 19968: 0xD2B4,
	24183 - 19968: 0xDCB4,
	24184 - 19968: 0xFAB9,
	24185 - 19968: 0xCACF,
	24187 - 19968: 0xFCB3,
	24188 - 19968: 0xEAEA,
	24189 - 19968: 0xEAEB,
	24190 - 19968: 0xD0FA,
	24196 - 19968: 0xEDE4,
	24199 - 19968: 0xDDE7,
	24202 - 19968: 0xDFC9,
	24207 - 19968: 0xDFED,
	24213 - 19968: 0xEEBC,
	24215 - 19968: 0xEFC1,
	24218 - 19968: 0xCCD2,
	24220 - 19968: 0xDDA4,
	24224 - 19968: 0xDFCA,
	24230 - 19968: 0xD3F8,
	24231 - 19968: 0xF1A8,
	24235 - 19968: 0xCDB7,
	24237 - 19968: 0xEFD4,
	24245 - 19968: 0xE4DD,
	24246 - 19968: 0xDFEE,
	24247 - 19968: 0xCBAC,
	24248 - 19968: 0xE9BC,
	24254 - 19968: 0xEAEC,
	24258 - 19968: 0xDFCB,
	24264 - 19968: 0xF9BF,
	24265 - 19968: 0xD6AF,
	24266 - 19968: 0xD5C6,
	24272 - 19968: 0xCFAA,
	24275 - 19968: 0xCEA9,
	24278 - 19968: 0xD6F8,
	24282 - 19968: 0xF1B7,
	24283 - 19968: 0xEEF8,
	24287 - 19968: 0xD9D9,
	24288 - 19968: 0xF3DF,
	24290 - 19968: 0xF8C8,
	24291 - 19968: 0xCEC6,
	24300 - 19968: 0xD5E6,
	24307 - 19968: 0xF4E6,
	24310 - 19968: 0xE6C5,
	24311 - 19968: 0xEFD5,
	24314 - 19968: 0xCBEF,
	24315 - 19968: 0xFCDF,
	24321 - 19968: 0xDCA7,
	24324 - 19968: 0xD6E7,
	24330 - 19968: 0xF8C9,
	24335 - 19968: 0xE3D2,
	24337 - 19968: 0xE3BD,
	24339 - 19968: 0xCFE1,
	24340 - 19968: 0xF0C0,
	24341 - 19968: 0xECDA,
	24343 - 19968: 0xDDD7,
	24344 - 19968: 0xFBF0,
	24347 - 19968: 0xECAC,
	24351 - 19968: 0xF0A9,
	24358 - 19968: 0xFAD7,
	24359 - 19968: 0xFBC1,
	24361 - 19968: 0xD2C0,
	24369 - 19968: 0xE5B0,
	24373 - 19968: 0xEDE5,
	24378 - 19968: 0xCBAD,
	24380 - 19968: 0xF9B0,
	24392 - 19968: 0xF7A5,
	24394 - 19968: 0xCBAE,
	24396 - 19968: 0xDAAF,
	24398 - 19968: 0xD8B6,
	24406 - 19968: 0xD3A7,
	24407 - 19968: 0xFBB2,
	24409 - 19968: 0xFDC4,
	24411 - 19968: 0xECAD,
	24418 - 19968: 0xFBA1,
	24422 - 19968: 0xE5E9,
	24423 - 19968: 0xE9EE,
	24425 - 19968: 0xF3F4,
	24426 - 19968: 0xF8F3,
	24427 - 19968: 0xF0C1,
	24428 - 19968: 0xDEAF,
	24429 - 19968: 0xF8B0,
	24432 - 19968: 0xF3E0,
	24433 - 19968: 0xE7AF,
	24439 - 19968: 0xDBAD,
	24441 - 19968: 0xE6B5,
	24444 - 19968: 0xF9A8,
	24447 - 19968: 0xDDD8,
	24448 - 19968: 0xE8D9,
	24449 - 19968: 0xEFD6,
	24453 - 19968: 0xD3E2,
	24455 - 19968: 0xE2DF,
	24458 - 19968: 0xFCE0,
	24459 - 19968: 0xD7C8,
	24460 - 19968: 0xFDAD,
	24464 - 19968: 0xDFEF,
	24465 - 19968: 0xCCD3,
	24466 - 19968: 0xD3F9,
	24471 - 19968: 0xD4F0,
	24472 - 19968: 0xDBC7,
	24473 - 19968: 0xDED5,
	24478 - 19968: 0xF0F4,
	24480 - 19968: 0xD5D0,
	24481 - 19968: 0xE5D9,
	24488 - 19968: 0xFCC7,
	24489 - 19968: 0xDCD6,
	24490 - 19968: 0xE2E0,
	24494 - 19968: 0xDAB0,
	24501 - 19968: 0xF3A3,
	24503 - 19968: 0xD3EC,
	24505 - 19968: 0xF4CB,
	24509 - 19968: 0xFDC5,
	24515 - 19968: 0xE3FD,
	24517 - 19968: 0xF9B1,
	24524 - 19968: 0xD0FB,
	24525 - 19968: 0xECDB,
	24534 - 19968: 0xF5BC,
	24535 - 19968: 0xF2A4,
	24536 - 19968: 0xD8CE,
	24537 - 19968: 0xD8CF,
	24544 - 19968: 0xF5F7,
	24555 - 19968: 0xF6E1,
	24565 - 19968: 0xD2B7,
	24573 - 19968: 0xFBEC,
	24575 - 19968: 0xDDC8,
	24591 - 19968: 0xE4E8,
	24594 - 19968: 0xD2C1,
	24598 - 19968: 0xF8D7,
	24604 - 19968: 0xD6BB,
	24605 - 19968: 0xDED6,
	24608 - 19968: 0xF7BD,
	24609 - 19968: 0xECAE,
	24613 - 19968: 0xD0E1,
	24615 - 19968: 0xE0F5,
	24616 - 19968: 0xEAB3,
	24618 - 19968: 0xCED6,
	24623 - 19968: 0xCCA5,
	24641 - 19968: 0xECF6,
	24642 - 19968: 0xE2E1,
	24643 - 19968: 0xE3BE,
	24653 - 19968: 0xFCC8,
	24656 - 19968: 0xCDF0,
	24658 - 19968: 0xF9F6,
	24661 - 19968: 0xDFF0,
	24665 - 19968: 0xE5BF,
	24669 - 19968: 0xCEBF,
	24674 - 19968: 0xFCE1,
	24675 - 19968: 0xEDB0,
	24676 - 19968: 0xFDD1,
	24677 - 19968: 0xF6BB,
	24680 - 19968: 0xF9CF,
	24681 - 19968: 0xEBDA,
	24682 - 19968: 0xCAC1,
	24684 - 19968: 0xD2B8,
	24685 - 19968: 0xCDF1,
	24687 - 19968: 0xE3D3,
	24688 - 19968: 0xFDE6,
	24709 - 19968: 0xE6ED,
	24713 - 19968: 0xE3FA,
	24716 - 19968: 0xF0AA,
	24717 - 19968: 0xF9D0,
	24724 - 19968: 0xFCE2,
	24726 - 19968: 0xF8A7,
	24730 - 19968: 0xE1E5,
	24731 - 19968: 0xEEF9,
	24735 - 19968: 0xE7F6,
	24736 - 19968: 0xEAED,
	24739 - 19968: 0xFCB4,
	24740 - 19968: 0xF5C2,
	24743 - 19968: 0xD7DC,
	24752 - 19968: 0xF0F5,
	24754 - 19968: 0xDDE8,
	24755 - 19968: 0xD3ED,
	24756 - 19968: 0xF5FC,
	24758 - 19968: 0xDABF,
	24760 - 19968: 0xCCFB,
	24764 - 19968: 0xD3FA,
	24765 - 19968: 0xF4A4,
	24773 - 19968: 0xEFD7,
	24775 - 19968: 0xD4C3,
	24785 - 19968: 0xFBE3,
	24794 - 19968: 0xFBED,
	24796 - 19968: 0xE0AD,
	24799 - 19968: 0xEAEE,
	24800 - 19968: 0xFBB3,
	24801 - 19968: 0xE4C2,
	24816 - 19968: 0xF6E7,
	24817 - 19968: 0xD2DD,
	24819 - 19968: 0xDFCC,
	24822 - 19968: 0xFCC9,
	24825 - 19968: 0xE5A9,
	24826 - 19968: 0xE0F6,
	24827 - 19968: 0xF6B3,
	24833 - 19968: 0xE1FE,
	24838 - 19968: 0xCBF0,
	24840 - 19968: 0xEAEF,
	24841 - 19968: 0xEAF0,
	24845 - 19968: 0xDAC0,
	24846 - 19968: 0xF8B4,
	24847 - 19968: 0xEBF2,
	24853 - 19968: 0xE4C3,
	24858 - 19968: 0xE9D7,
	24859 - 19968: 0xE4F1,
	24863 - 19968: 0xCAEF,
	24871 - 19968: 0xCED7,
	24880 - 19968: 0xFCCA,
	24884 - 19968: 0xF3E1,
	24887 - 19968: 0xCBC4,
	24892 - 19968: 0xE3E5,
	24894 - 19968: 0xCBC5,
	24895 - 19968: 0xEAB4,
	24898 - 19968: 0xE9BD,
	24900 - 19968: 0xD7C9,
	24903 - 19968: 0xEBDB,
	24904 - 19968: 0xEDB1,
	24906 - 19968: 0xCCC3,
	24907 - 19968: 0xF7BE,
	24908 - 19968: 0xFCCB,
	24915 - 19968: 0xF8F4,
	24917 - 19968: 0xD9B7,
	24920 - 19968: 0xF3D3,
	24921 - 19968: 0xF3D4,
	24925 - 19968: 0xF7E4,
	24927 - 19968: 0xF7D1,
	24930 - 19968: 0xD8B7,
	24931 - 19968: 0xCEB1,
	24932 - 19968: 0xCAC2,
	24935 - 19968: 0xFBB4,
	24936 - 19968: 0xCBC6,
	24939 - 19968: 0xF0F6,
	24942 - 19968: 0xD5E7,
	24944 - 19968: 0xEAD0,
	24950 - 19968: 0xCCD4,
	24951 - 19968: 0xCBAF,
	24957 - 19968: 0xF4AA,
	24958 - 19968: 0xE9AF,
	24961 - 19968: 0xF5C3,
	24962 - 19968: 0xE9D8,
	24970 - 19968: 0xDDE9,
	24974 - 19968: 0xF1F3,
	24976 - 19968: 0xD5FB,
	24977 - 19968: 0xDEBB,
	24980 - 19968: 0xF4FB,
	24984 - 19968: 0xFDF3,
	24985 - 19968: 0xFDF2,
	24986 - 19968: 0xF7A6,
	24996 - 19968: 0xDDC9,
	24999 - 19968: 0xD4D3,
	25001 - 19968: 0xCCA8,
	25003 - 19968: 0xDAC1,
	25004 - 19968: 0xCCD5,
	25006 - 19968: 0xD9E4,
	25010 - 19968: 0xFACA,
	25014 - 19968: 0xE5E3,
	25018 - 19968: 0xD3BC,
	25022 - 19968: 0xCAF0,
	25027 - 19968: 0xD0C4,
	25031 - 19968: 0xCAD0,
	25032 - 19968: 0xFAAB,
	25033 - 19968: 0xEBEB,
	25034 - 19968: 0xE7F8,
	25035 - 19968: 0xD9E5,
	25062 - 19968: 0xD1D7,
	25074 - 19968: 0xF3A4,
	25078 - 19968: 0xD4FB,
	25079 - 19968: 0xFCE3,
	25080 - 19968: 0xFAD8,
	25082 - 19968: 0xF3D5,
	25084 - 19968: 0xCFAB,
	25087 - 19968: 0xEBF3,
	25088 - 19968: 0xD5FC,
	25095 - 19968: 0xD3D4,
	25096 - 19968: 0xCDFC,
	25098 - 19968: 0xD9E6,
	25100 - 19968: 0xE2F9,
	25101 - 19968: 0xE2A1,
	25102 - 19968: 0xEBD4,
	25104 - 19968: 0xE0F7,
	25105 - 19968: 0xE4B2,
	25106 - 19968: 0xCCFC,
	25110 - 19968: 0xFBE4,
	25114 - 19968: 0xF4AB,
	25119 - 19968: 0xD0BD,
	25121 - 19968: 0xCAF1,
	25130 - 19968: 0xEFB8,
	25134 - 19968: 0xD7C0,
	25136 - 19968: 0xEEFA,
	25137 - 19968: 0xFDF4,
	25140 - 19968: 0xD3E3,
	25142 - 19968: 0xFBC2,
	25150 - 19968: 0xD5E8,
	25151 - 19968: 0xDBAE,
	25152 - 19968: 0xE1B6,
	25153 - 19968: 0xF8B7,
	25159 - 19968: 0xE0BF,
	25160 - 19968: 0xFBC3,
	25161 - 19968: 0xDDEA,
	25163 - 19968: 0xE2A2,
	25165 - 19968: 0xEEA6,
	25171 - 19968: 0xF6E8,
	25176 - 19968: 0xF6F5,
	25198 - 19968: 0xDDCA,
	25201 - 19968: 0xD0E2,
	25206 - 19968: 0xDDA6,
	25209 - 19968: 0xDDEB,
	25212 - 19968: 0xE4F9,
	25215 - 19968: 0xE3AF,
	25216 - 19968: 0xD0FC,
	25220 - 19968: 0xF4FC,
	25225 - 19968: 0xCCBC,
	25226 - 19968: 0xF7EA,
	25233 - 19968: 0xE5E4,
	25234 - 19968: 0xDFF1,
	25237 - 19968: 0xF7E1,
	25239 - 19968: 0xF9F7,
	25240 - 19968: 0xEFB9,
	25243 - 19968: 0xF8D8,
	25259 - 19968: 0xF9A9,
	25265 - 19968: 0xF8D9,
	25269 - 19968: 0xEEBD,
	25273 - 19968: 0xD8C6,
	25276 - 19968: 0xE4E3,
	25277 - 19968: 0xF5CE,
	25282 - 19968: 0xDDD9,
	25287 - 19968: 0xD9E7,
	25288 - 19968: 0xD2B9,
	25289 - 19968: 0xD5C3,
	25292 - 19968: 0xDAE5,
	25293 - 19968: 0xDAD0,
	25295 - 19968: 0xD1D9,
	25296 - 19968: 0xCED8,
	25298 - 19968: 0xCBDE,
	25299 - 19968: 0xF4AC,
	25300 - 19968: 0xDAFB,
	25302 - 19968: 0xF6E9,
	25303 - 19968: 0xE8F3,
	25304 - 19968: 0xCFAC,
	25305 - 19968: 0xF0F0,
	25307 - 19968: 0xF4FD,
	25308 - 19968: 0xDBC8,
	25324 - 19968: 0xCEC0,
	25325 - 19968: 0xE3D4,
	25326 - 19968: 0xD1CF,
	25327 - 19968: 0xF1F5,
	25329 - 19968: 0xCDF2,
	25331 - 19968: 0xCFEB,
	25335 - 19968: 0xCDB8,
	25342 - 19968: 0xE3A6,
	25343 - 19968: 0xD1DA,
	25345 - 19968: 0xF2A5,
	25351 - 19968: 0xF2A6,
	25353 - 19968: 0xE4CE,
	25361 - 19968: 0xD3FB,
	25387 - 19968: 0xF1A9,
	25391 - 19968: 0xF2C9,
	25402 - 19968: 0xEFD8,
	25403 - 19968: 0xE6C9,
	25405 - 19968: 0xD8B8,
	25406 - 19968: 0xFAF3,
	25417 - 19968: 0xF3B5,
	25420 - 19968: 0xF8A4,
	25423 - 19968: 0xD1F3,
	25424 - 19968: 0xE6C8,
	25429 - 19968: 0xF8DA,
	25447 - 19968: 0xDCE9,
	25448 - 19968: 0xDED7,
	25454 - 19968: 0xCBDF,
	25458 - 19968: 0xCFEC,
	25463 - 19968: 0xF4DF,
	25466 - 19968: 0xD1F4,
	25467 - 19968: 0xD2BA,
	25471 - 19968: 0xDFF2,
	25475 - 19968: 0xE1B7,
	25480 - 19968: 0xE2A3,
	25481 - 19968: 0xD3FC,
	25484 - 19968: 0xEDE6,
	25490 - 19968: 0xDBC9,
	25494 - 19968: 0xE4FA,
	25496 - 19968: 0xCFDE,
	25499 - 19968: 0xCED0,
	25504 - 19968: 0xD5D3,
	25505 - 19968: 0xF3F5,
	25506 - 19968: 0xF7AE,
	25509 - 19968: 0xEFC8,
	25511 - 19968: 0xCDF3,
	25512 - 19968: 0xF5CF,
	25513 - 19968: 0xE5F3,
	25514 - 19968: 0xF0C2,
	25536 - 19968: 0xCAD1,
	25540 - 19968: 0xEAF1,
	25542 - 19968: 0xD0A6,
	25551 - 19968: 0xD9DA,
	25552 - 19968: 0xF0AB,
	25558 - 19968: 0xEBE7,
	25562 - 19968: 0xE5C0,
	25563 - 19968: 0xFCB5,
	25569 - 19968: 0xE4C4,
	25581 - 19968: 0xCCA9,
	25582 - 19968: 0xFDC6,
	25588 - 19968: 0xEAB5,
	25590 - 19968: 0xE5AA,
	25591 - 19968: 0xDFBA,
	25613 - 19968: 0xE1DF,
	25615 - 19968: 0xDAD1,
	25620 - 19968: 0xE1B8,
	25622 - 19968: 0xE8F4,
	25623 - 19968: 0xD3FD,
	25628 - 19968: 0xE2A4,
	25634 - 19968: 0xF2CA,
	25644 - 19968: 0xDAE6,
	25645 - 19968: 0xF7B3,
	25658 - 19968: 0xFDCD,
	25662 - 19968: 0xF3B6,
	25688 - 19968: 0xEED7,
	25696 - 19968: 0xF5C4,
	25705 - 19968: 0xD8A4,
	25711 - 19968: 0xF2A7,
	25720 - 19968: 0xD9B8,
	25721 - 19968: 0xD9B9,
	25722 - 19968: 0xEFC9,
	25736 - 19968: 0xD6CE,
	25745 - 19968: 0xF7CB,
	25746 - 19968: 0xDFAE,
	25747 - 19968: 0xE8F5,
	25754 - 19968: 0xD2B5,
	25758 - 19968: 0xD3D5,
	25764 - 19968: 0xF4CC,
	25765 - 19968: 0xDAFC,
	25771 - 19968: 0xD9E8,
	25773 - 19968: 0xF7EB,
	25774 - 19968: 0xF5C9,
	25776 - 19968: 0xF3BC,
	25778 - 19968: 0xDAD2,
	25787 - 19968: 0xD3B5,
	25793 - 19968: 0xE8B6,
	25796 - 19968: 0xD6CF,
	25797 - 19968: 0xF4BA,
	25799 - 19968: 0xF7C9,
	25802 - 19968: 0xCCAA,
	25805 - 19968: 0xF0C3,
	25806 - 19968: 0xCCD6,
	25810 - 19968: 0xD0D3,
	25812 - 19968: 0xD3BD,
	25816 - 19968: 0xDBFB,
	25818 - 19968: 0xCBE0,
	25825 - 19968: 0xD3E4,
	25826 - 19968: 0xF6F7,
	25829 - 19968: 0xD5BA,
	25830 - 19968: 0xF3CD,
	25831 - 19968: 0xCBE1,
	25836 - 19968: 0xEBF4,
	25842 - 19968: 0xF4AD,
	25844 - 19968: 0xFCAA,
	25850 - 19968: 0xF7EC,
	25854 - 19968: 0xE8F6,
	25856 - 19968: 0xDAE7,
	25860 - 19968: 0xF7CC,
	25880 - 19968: 0xE5C1,
	25885 - 19968: 0xE0EE,
	25891 - 19968: 0xD5FD,
	25898 - 19968: 0xCEE6,
	25899 - 19968: 0xFCAB,
	25900 - 19968: 0xD5BB,
	25903 - 19968: 0xF2A8,
	25910 - 19968: 0xE2A5,
	25911 - 19968: 0xCDB9,
	25912 - 19968: 0xEAF2,
	25913 - 19968: 0xCBC7,
	25915 - 19968: 0xCDF4,
	25918 - 19968: 0xDBAF,
	25919 - 19968: 0xEFD9,
	25925 - 19968: 0xCDBA,
	25928 - 19968: 0xFCF9,
	25933 - 19968: 0xDFF3,
	25934 - 19968: 0xCEE7,
	25935 - 19968: 0xDAC2,
	25937 - 19968: 0xCFAD,
	25942 - 19968: 0xE7F9,
	25943 - 19968: 0xF8A8,
	25950 - 19968: 0xF3E2,
	25954 - 19968: 0xCAF2,
	25955 - 19968: 0xDFA4,
	25958 - 19968: 0xD4C4,
	25964 - 19968: 0xCCD7,
	25965 - 19968: 0xE5C2,
	25970 - 19968: 0xCDBB,
	25972 - 19968: 0xEFDA,
	25973 - 19968: 0xEED8,
	25975 - 19968: 0xDDA7,
	25976 - 19968: 0xE2A6,
	25982 - 19968: 0xE0C0,
	25986 - 19968: 0xD6B0,
	25987 - 19968: 0xF8CA,
	25989 - 19968: 0xFCFA,
	25991 - 19968: 0xD9FE,
	25996 - 19968: 0xDEB0,
	26000 - 19968: 0xDDEC,
	26001 - 19968: 0xDAE8,
	26007 - 19968: 0xD4E0,
	26009 - 19968: 0xD6F9,
	26011 - 19968: 0xCDD7,
	26012 - 19968: 0xDED8,
	26015 - 19968: 0xF2F8,
	26017 - 19968: 0xE4D6,
	26020 - 19968: 0xD0C5,
	26021 - 19968: 0xF4AE,
	26023 - 19968: 0xDDA8,
	26027 - 19968: 0xEDC5,
	26028 - 19968: 0xF3D6,
	26031 - 19968: 0xDED9,
	26032 - 19968: 0xE3E6,
	26039 - 19968: 0xD3A8,
	26041 - 19968: 0xDBB0,
	26044 - 19968: 0xE5DA,
	26045 - 19968: 0xE3BF,
	26049 - 19968: 0xDBB1,
	26053 - 19968: 0xD5E9,
	26059 - 19968: 0xE0C1,
	26060 - 19968: 0xEFDB,
	26063 - 19968: 0xF0E9,
	26066 - 19968: 0xD7B2,
	26071 - 19968: 0xD0FD,
	26080 - 19968: 0xD9E9,
	26083 - 19968: 0xD0FE,
	26085 - 19968: 0xECED,
	26086 - 19968: 0xD3A9,
	26088 - 19968: 0xF2A9,
	26089 - 19968: 0xF0C4,
	26092 - 19968: 0xE2E2,
	26093 - 19968: 0xE9EF,
	26097 - 19968: 0xF9D1,
	26100 - 19968: 0xE9D9,
	26106 - 19968: 0xE8DA,
	26107 - 19968: 0xDAC3,
	26108 - 19968: 0xDAC4,
	26109 - 19968: 0xD4C5,
	26111 - 19968: 0xE7FA,
	26118 - 19968: 0xCDE0,
	26119 - 19968: 0xE3B0,
	26121 - 19968: 0xDBB2,
	26122 - 19968: 0xFBC4,
	26124 - 19968: 0xF3E3,
	26126 - 19968: 0xD9A5,
	26127 - 19968: 0xFBE7,
	26128 - 19968: 0xDDCB,
	26129 - 19968: 0xD0D4,
	26131 - 19968: 0xE6B6,
	26132 - 19968: 0xE0AE,
	26133 - 19968: 0xFDDA,
	26142 - 19968: 0xDCB5,
	26143 - 19968: 0xE0F8,
	26144 - 19968: 0xE7B1,
	26149 - 19968: 0xF5F0,
	26151 - 19968: 0xD8DC,
	26152 - 19968: 0xEDC6,
	26157 - 19968: 0xE1B9,
	26159 - 19968: 0xE3C0,
	26160 - 19968: 0xF9C0,
	26161 - 19968: 0xE9F0,
	26164 - 19968: 0xD9DB,
	26166 - 19968: 0xF3E4,
	26170 - 19968: 0xDCB6,
	26171 - 19968: 0xE4E9,
	26177 - 19968: 0xF0C5,
	26178 - 19968: 0xE3C1,
	26179 - 19968: 0xFCCC,
	26180 - 19968: 0xFCCD,
	26185 - 19968: 0xF2CB,
	26187 - 19968: 0xF2CC,
	26191 - 19968: 0xE4CF,
	26201 - 19968: 0xF1DB,
	26203 - 19968: 0xFAD9,
	26205 - 19968: 0xF1B8,
	26206 - 19968: 0xFDF5,
	26207 - 19968: 0xE0F9,
	26212 - 19968: 0xE7FB,
	26213 - 19968: 0xFCB7,
	26214 - 19968: 0xFCE4,
	26215 - 19968: 0xFBC5,
	26216 - 19968: 0xE3E7,
	26217 - 19968: 0xD8B9,
	26219 - 19968: 0xF6F8,
	26222 - 19968: 0xDCC5,
	26223 - 19968: 0xCCD8,
	26227 - 19968: 0xE0AF,
	26228 - 19968: 0xF4E7,
	26230 - 19968: 0xEFDC,
	26231 - 19968: 0xCFFC,
	26232 - 19968: 0xEFDD,
	26234 - 19968: 0xF2AA,
	26244 - 19968: 0xFDBE,
	26247 - 19968: 0xCAAC,
	26248 - 19968: 0xFDBB,
	26249 - 19968: 0xFDC7,
	26254 - 19968: 0xE7B2,
	26256 - 19968: 0xEAD1,
	26257 - 19968: 0xDFF4,
	26262 - 19968: 0xD1EC,
	26263 - 19968: 0xE4DE,
	26264 - 19968: 0xE5C3,
	26269 - 19968: 0xD9A6,
	26272 - 19968: 0xCDBC,
	26274 - 19968: 0xF3E5,
	26283 - 19968: 0xEDD5,
	26286 - 19968: 0xD9BA,
	26290 - 19968: 0xEDE7,
	26291 - 19968: 0xFBB5,
	26292 - 19968: 0xF8EC,
	26297 - 19968: 0xE0E7,
	26299 - 19968: 0xCCD9,
	26302 - 19968: 0xD4C6,
	26308 - 19968: 0xE7A5,
	26310 - 19968: 0xD5F5,
	26311 - 19968: 0xD3BE,
	26313 - 19968: 0xFCFB,
	26326 - 19968: 0xE4F2,
	26329 - 19968: 0xDFF5,
	26332 - 19968: 0xE8F8,
	26333 - 19968: 0xF8ED,
	26336 - 19968: 0xCEC7,
	26342 - 19968: 0xFDF6,
	26352 - 19968: 0xE8D8,
	26354 - 19968: 0xCDD8,
	26355 - 19968: 0xE7D6,
	26356 - 19968: 0xCCDA,
	26359 - 19968: 0xCAE3,
	26360 - 19968: 0xDFF6,
	26361 - 19968: 0xF0C7,
	26362 - 19968: 0xF0C6,
	26364 - 19968: 0xD8BA,
	26366 - 19968: 0xF1F4,
	26367 - 19968: 0xF4F0,
	26368 - 19968: 0xF5CC,
	26371 - 19968: 0xFCE5,
	26376 - 19968: 0xEAC5,
	26377 - 19968: 0xEAF3,
	26379 - 19968: 0xDDDB,
	26381 - 19968: 0xDCD7,
	26388 - 19968: 0xDEFD,
	26389 - 19968: 0xF2F9,
	26391 - 19968: 0xD5C7,
	26395 - 19968: 0xD8D0,
	26397 - 19968: 0xF0C8,
	26398 - 19968: 0xD1A1,
	26399 - 19968: 0xD1A2,
	26406 - 19968: 0xD9D4,
	26407 - 19968: 0xD6E8,
	26408 - 19968: 0xD9CA,
	26410 - 19968: 0xDAB1,
	26411 - 19968: 0xD8C7,
	26412 - 19968: 0xDCE2,
	26413 - 19968: 0xF3CE,
	26414 - 19968: 0xF5F4,
	26417 - 19968: 0xF1B9,
	26420 - 19968: 0xDAD3,
	26422 - 19968: 0xF6EA,
	26426 - 19968: 0xCFF5,
	26429 - 19968: 0xFDAE,
	26438 - 19968: 0xCAD2,
	26441 - 19968: 0xDFB4,
	26446 - 19968: 0xD7DD,
	26447 - 19968: 0xFABA,
	26448 - 19968: 0xEEA7,
	26449 - 19968: 0xF5BD,
	26451 - 19968: 0xF8F5,
	26454 - 19968: 0xEDE8,
	26460 - 19968: 0xD4E1,
	26462 - 19968: 0xD1A3,
	26463 - 19968: 0xE1D6,
	26477 - 19968: 0xF9F8,
	26479 - 19968: 0xDBCA,
	26480 - 19968: 0xCBF9,
	26481 - 19968: 0xD4D4,
	26483 - 19968: 0xD9DC,
	26485 - 19968: 0xEEBE,
	26487 - 19968: 0xF7ED,
	26491 - 19968: 0xD2EE,
	26494 - 19968: 0xE1E6,
	26495 - 19968: 0xF7F9,
	26503 - 19968: 0xDDED,
	26505 - 19968: 0xE8DB,
	26507 - 19968: 0xDBB3,
	26511 - 19968: 0xD1F7,
	26512 - 19968: 0xE0B0,
	26515 - 19968: 0xD4E2,
	26517 - 19968: 0xF6D7,
	26519 - 19968: 0xD7F9,
	26522 - 19968: 0xD8DD,
	26524 - 19968: 0xCDFD,
	26525 - 19968: 0xF2AB,
	26543 - 19968: 0xCDBD,
	26544 - 19968: 0xF8C2,
	26547 - 19968: 0xF2AC,
	26550 - 19968: 0xCAAD,
	26551 - 19968: 0xCAAE,
	26552 - 19968: 0xCFAE,
	26558 - 19968: 0xE3C2,
	26564 - 19968: 0xDCB7,
	26575 - 19968: 0xDBDA,
	26576 - 19968: 0xD9BB,
	26577 - 19968: 0xCAF3,
	26578 - 19968: 0xF6D3,
	26579 - 19968: 0xE6F8,
	26580 - 19968: 0xEAF5,
	26586 - 19968: 0xEAF6,
	26589 - 19968: 0xF6F9,
	26601 - 19968: 0xCFAF,
	26604 - 19968: 0xCAD3,
	26607 - 19968: 0xCAAF,
	26608 - 19968: 0xD2B0,
	26609 - 19968: 0xF1BA,
	26611 - 19968: 0xD7B3,
	26612 - 19968: 0xE3C3,
	26613 - 19968: 0xF3FD,
	26614 - 19968: 0xDEDA,
	26619 - 19968: 0xDEDB,
	26622 - 19968: 0xEFDE,
	26642 - 19968: 0xE2E3,
	26643 - 19968: 0xEEFB,
	26646 - 19968: 0xDFF7,
	26647 - 19968: 0xD7CA,
	26657 - 19968: 0xCEE8,
	26658 - 19968: 0xDBDB,
	26666 - 19968: 0xF1BB,
	26671 - 19968: 0xE9F1,
	26680 - 19968: 0xFAB7,
	26681 - 19968: 0xD0C6,
	26684 - 19968: 0xCCAB,
	26685 - 19968: 0xEEA8,
	26688 - 19968: 0xCBFA,
	26689 - 19968: 0xF9F9,
	26690 - 19968: 0xCCFD,
	26691 - 19968: 0xD3FE,
	26696 - 19968: 0xE4D0,
	26702 - 19968: 0xF2EE,
	26704 - 19968: 0xD4D5,
	26705 - 19968: 0xDFCD,
	26707 - 19968: 0xFCB8,
	26708 - 19968: 0xD1D0,
	26733 - 19968: 0xF2CD,
	26742 - 19968: 0xF7D2,
	26751 - 19968: 0xCAD4,
	26753 - 19968: 0xD5D9,
	26757 - 19968: 0xD8DE,
	26767 - 19968: 0xCDD9,
	26771 - 19968: 0xEEA9,
	26772 - 19968: 0xF6BC,
	26775 - 19968: 0xCCDB,
	26781 - 19968: 0xF0C9,
	26783 - 19968: 0xFCFC,
	26785 - 19968: 0xE8C9,
	26786 - 19968: 0xF4FE,
	26791 - 19968: 0xE7FC,
	26792 - 19968: 0xD7DE,
	26797 - 19968: 0xDEDC,
	26799 - 19968: 0xF0AC,
	26800 - 19968: 0xCCFE,
	26801 - 19968: 0xCDE1,
	26803 - 19968: 0xE1BA,
	26805 - 19968: 0xDBEF,
	26806 - 19968: 0xDAB2,
	26820 - 19968: 0xD1A5,
	26821 - 19968: 0xDCB8,
	26825 - 19968: 0xD8F6,
	26827 - 19968: 0xD1A4,
	26829 - 19968: 0xCDE2,
	26834 - 19968: 0xDCEA,
	26837 - 19968: 0xF0F7,
	26839 - 19968: 0xF0CA,
	26840 - 19968: 0xD0BE,
	26842 - 19968: 0xDDDC,
	26847 - 19968: 0xD4D6,
	26848 - 19968: 0xD3D6,
	26855 - 19968: 0xEDD0,
	26856 - 19968: 0xCDA1,
	26862 - 19968: 0xDFB5,
	26866 - 19968: 0xDFF8,
	26873 - 19968: 0xD4A1,
	26874 - 19968: 0xCEB2,
	26880 - 19968: 0xE8CA,
	26885 - 19968: 0xEBF5,
	26893 - 19968: 0xE3D5,
	26894 - 19968: 0xF5D0,
	26898 - 19968: 0xF5A1,
	26919 - 19968: 0xD9A7,
	26928 - 19968: 0xE5AB,
	26941 - 19968: 0xE6CB,
	26943 - 19968: 0xF5F1,
	26954 - 19968: 0xE5C5,
	26963 - 19968: 0xF9A3,
	26964 - 19968: 0xE0DB,
	26965 - 19968: 0xF6EB,
	26967 - 19968: 0xCBF1,
	26969 - 19968: 0xD9EA,
	26970 - 19968: 0xF5A2,
	26974 - 19968: 0xD7D1,
	26976 - 19968: 0xD1F8,
	26977 - 19968: 0xEAF8,
	26978 - 19968: 0xEAF9,
	26979 - 19968: 0xDAB3,
	26984 - 19968: 0xEFDF,
	26987 - 19968: 0xF1EF,
	26989 - 19968: 0xE5F6,
	26990 - 19968: 0xEEBF,
	26991 - 19968: 0xE2E4,
	26997 - 19968: 0xD0BF,
	26999 - 19968: 0xFAAC,
	27000 - 19968: 0xF5D1,
	27001 - 19968: 0xE7B3,
	27029 - 19968: 0xE9BE,
	27035 - 19968: 0xF2CE,
	27036 - 19968: 0xDBB4,
	27045 - 19968: 0xFCCE,
	27047 - 19968: 0xDDEE,
	27054 - 19968: 0xE7B4,
	27060 - 19968: 0xD7B4,
	27067 - 19968: 0xF7B4,
	27073 - 19968: 0xCDBE,
	27075 - 19968: 0xDAE9,
	27083 - 19968: 0xCFB0,
	27084 - 19968: 0xF7D9,
	27085 - 19968: 0xF3E6,
	27088 - 19968: 0xCED9,
	27112 - 19968: 0xCEAA,
	27114 - 19968: 0xCBC8,
	27131 - 19968: 0xD0A7,
	27133 - 19968: 0xF0CB,
	27135 - 19968: 0xD0C7,
	27138 - 19968: 0xE4C5,
	27146 - 19968: 0xDBE0,
	27153 - 19968: 0xD5DA,
	27155 - 19968: 0xD7A7,
	27159 - 19968: 0xEEC0,
	27161 - 19968: 0xF8F6,
	27166 - 19968: 0xF5D2,
	27167 - 19968: 0xEDE9,
	27169 - 19968: 0xD9BC,
	27171 - 19968: 0xE5C6,
	27189 - 19968: 0xF5A3,
	27192 - 19968: 0xDAD4,
	27193 - 19968: 0xE2A7,
	27194 - 19968: 0xFBFC,
	27197 - 19968: 0xF1DC,
	27204 - 19968: 0xCAF4,
	27208 - 19968: 0xE8FA,
	27211 - 19968: 0xCEE9,
	27218 - 19968: 0xE9F8,
	27219 - 19968: 0xE2E5,
	27224 - 19968: 0xD0B9,
	27225 - 19968: 0xD4F2,
	27231 - 19968: 0xD1A6,
	27233 - 19968: 0xDFCE,
	27243 - 19968: 0xFCF4,
	27264 - 19968: 0xD3AA,
	27268 - 19968: 0xCCAC,
	27273 - 19968: 0xEFE0,
	27277 - 19968: 0xE5E5,
	27278 - 19968: 0xD0D5,
	27287 - 19968: 0xDBFC,
	27292 - 19968: 0xFCE6,
	27298 - 19968: 0xCBFE,
	27299 - 19968: 0xEDEA,
	27315 - 19968: 0xDEB1,
	27323 - 19968: 0xF9E3,
	27330 - 19968: 0xD4A2,
	27331 - 19968: 0xCFF6,
	27347 - 19968: 0xD6D0,
	27354 - 19968: 0xD5EA,
	27355 - 19968: 0xF1EE,
	27382 - 19968: 0xFACB,
	27387 - 19968: 0xE5A1,
	27396 - 19968: 0xD5B1,
	27402 - 19968: 0xCFED,
	27404 - 19968: 0xEDEB,
	27410 - 19968: 0xD5B2,
	27414 - 19968: 0xD5BC,
	27424 - 19968: 0xFDE2,
	27425 - 19968: 0xF3AD,
	27427 - 19968: 0xFDDB,
	27442 - 19968: 0xE9B0,
	27450 - 19968: 0xD1A7,
	27453 - 19968: 0xFDE3,
	27454 - 19968: 0xCEB3,
	27462 - 19968: 0xFDE4,
	27463 - 19968: 0xFACE,
	27468 - 19968: 0xCAB0,
	27470 - 19968: 0xF7A7,
	27472 - 19968: 0xCFB1,
	27487 - 19968: 0xE6A2,
	27489 - 19968: 0xFCB6,
	27490 - 19968: 0xF2AD,
	27491 - 19968: 0xEFE1,
	27492 - 19968: 0xF3AE,
	27493 - 19968: 0xDCC6,
	27494 - 19968: 0xD9EB,
	27498 - 19968: 0xE8E0,
	27506 - 19968: 0xE1A8,
	27511 - 19968: 0xD5F6,
	27512 - 19968: 0xCFFD,
	27515 - 19968: 0xDEDD,
	27519 - 19968: 0xD9D1,
	27523 - 19968: 0xE4EA,
	27524 - 19968: 0xF2CF,
	27526 - 19968: 0xF7BF,
	27529 - 19968: 0xE2E6,
	27530 - 19968: 0xE2A8,
	27542 - 19968: 0xE3D6,
	27544 - 19968: 0xEDD1,
	27550 - 19968: 0xE9F9,
	27566 - 19968: 0xD6B1,
	27567 - 19968: 0xDEB2,
	27570 - 19968: 0xE0E8,
	27573 - 19968: 0xD3AB,
	27575 - 19968: 0xEBDC,
	27578 - 19968: 0xDFAF,
	27580 - 19968: 0xCAC3,
	27583 - 19968: 0xEEFC,
	27585 - 19968: 0xFDC3,
	27589 - 19968: 0xEBF6,
	27590 - 19968: 0xCFB2,
	27595 - 19968: 0xD9EC,
	27597 - 19968: 0xD9BD,
	27599 - 19968: 0xD8DF,
	27602 - 19968: 0xD4B8,
	27603 - 19968: 0xEBBE,
	27604 - 19968: 0xDDEF,
	27606 - 19968: 0xDDF0,
	27607 - 19968: 0xDDF1,
	27608 - 19968: 0xDDF2,
	27611 - 19968: 0xD9BE,
	27627 - 19968: 0xFBC6,
	27628 - 19968: 0xCFB3,
	27656 - 19968: 0xEEFD,
	27663 - 19968: 0xE4AB,
	27665 - 19968: 0xDAC5,
	27667 - 19968: 0xD8EC,
	27683 - 19968: 0xD1A8,
	27700 - 19968: 0xE2A9,
	27703 - 19968: 0xDEBC,
	27704 - 19968: 0xE7B5,
	27710 - 19968: 0xDBF0,
	27712 - 19968: 0xEFE2,
	27713 - 19968: 0xF1F0,
	27714 - 19968: 0xCFB4,
	27726 - 19968: 0xDBF1,
	27728 - 19968: 0xE0B1,
	27733 - 19968: 0xDFA5,
	27735 - 19968: 0xF9D2,
	27738 - 19968: 0xE7FD,
	27741 - 19968: 0xE6A3,
	27742 - 19968: 0xFBF1,
	27743 - 19968: 0xCBB0,
	27744 - 19968: 0xF2AE,
	27752 - 19968: 0xCDE7,
	27754 - 19968: 0xE8DC,
	27757 - 19968: 0xE7D7,
	27760 - 19968: 0xF7C0,
	27762 - 19968: 0xD0E3,
	27766 - 19968: 0xDAA1,
	27770 - 19968: 0xCCBD,
	27773 - 19968: 0xD1A9,
	27774 - 19968: 0xDDCC,
	27777 - 19968: 0xE3FE,
	27778 - 19968: 0xD1AA,
	27779 - 19968: 0xE8AA,
	27781 - 19968: 0xEAB6,
	27782 - 19968: 0xF9FA,
	27783 - 19968: 0xE6CC,
	27784 - 19968: 0xF6D8,
	27788 - 19968: 0xD4C7,
	27792 - 19968: 0xD9CB,
	27794 - 19968: 0xD9D2,
	27795 - 19968: 0xD3CB,
	27796 - 19968: 0xD8F7,
	27797 - 19968: 0xDAA9,
	27798 - 19968: 0xF5F8,
	27801 - 19968: 0xDEDE,
	27802 - 19968: 0xF2AF,
	27803 - 19968: 0xF8A9,
	27819 - 19968: 0xD8C8,
	27822 - 19968: 0xEEC1,
	27827 - 19968: 0xF9C1,
	27832 - 19968: 0xDDF3,
	27833 - 19968: 0xEAFA,
	27835 - 19968: 0xF6BD,
	27836 - 19968: 0xE1BB,
	27837 - 19968: 0xCDBF,
	27838 - 19968: 0xF4D4,
	27839 - 19968: 0xE6CD,
	27841 - 19968: 0xFCCF,
	27842 - 19968: 0xFBA2,
	27844 - 19968: 0xE0DC,
	27849 - 19968: 0xF4BB,
	27850 - 19968: 0xDAD5,
	27852 - 19968: 0xF9B2,
	27859 - 19968: 0xFBF2,
	27861 - 19968: 0xDBF6,
	27863 - 19968: 0xDEDF,
	27867 - 19968: 0xDBF2,
	27873 - 19968: 0xF8DC,
	27874 - 19968: 0xF7EE,
	27875 - 19968: 0xEBE8,
	27877 - 19968: 0xD2FA,
	27880 - 19968: 0xF1BC,
	27883 - 19968: 0xFADA,
	27886 - 19968: 0xDAEA,
	27887 - 19968: 0xDAC6,
	27888 - 19968: 0xF7C1,
	27891 - 19968: 0xE7B6,
	27915 - 19968: 0xE5C7,
	27916 - 19968: 0xD6AC,
	27921 - 19968: 0xDCC7,
	27927 - 19968: 0xE1A9,
	27929 - 19968: 0xE2AA,
	27931 - 19968: 0xD5A6,
	27934 - 19968: 0xD4D7,
	27941 - 19968: 0xF2D0,
	27943 - 19968: 0xEAFB,
	27945 - 19968: 0xE0DD,
	27946 - 19968: 0xFBF3,
	27954 - 19968: 0xF1BD,
	27957 - 19968: 0xE2E7,
	27958 - 19968: 0xFDD7,
	27960 - 19968: 0xCEC8,
	27961 - 19968: 0xEAB7,
	27963 - 19968: 0xFCC0,
	27965 - 19968: 0xFDE7,
	27966 - 19968: 0xF7EF,
	27969 - 19968: 0xD7B5,
	27993 - 19968: 0xEFBA,
	27994 - 19968: 0xF1DD,
	27996 - 19968: 0xDEB3,
	28003 - 19968: 0xE8CB,
	28006 - 19968: 0xF8DD,
	28009 - 19968: 0xFBC7,
	28010 - 19968: 0xD5C8,
	28012 - 19968: 0xD7DF,
	28014 - 19968: 0xDDA9,
	28020 - 19968: 0xE9B1,
	28023 - 19968: 0xFAAD,
	28024 - 19968: 0xF6D9,
	28025 - 19968: 0xFAF4,
	28031 - 19968: 0xF8AA,
	28037 - 19968: 0xE6EE,
	28039 - 19968: 0xCCDC,
	28040 - 19968: 0xE1BC,
	28041 - 19968: 0xE0EF,
	28044 - 19968: 0xE9BF,
	28045 - 19968: 0xFCFD,
	28046 - 19968: 0xE6CE,
	28049 - 19968: 0xE1D7,
	28051 - 19968: 0xE6CF,
	28053 - 19968: 0xF4F1,
	28079 - 19968: 0xE4F3,
	28082 - 19968: 0xE4FB,
	28085 - 19968: 0xF9E4,
	28096 - 19968: 0xEFE3,
	28099 - 19968: 0xCFEE,
	28100 - 19968: 0xF6BE,
	28101 - 19968: 0xE0B2,
	28102 - 19968: 0xFCFE,
	28103 - 19968: 0xD1AB,
	28107 - 19968: 0xD7FA,
	28111 - 19968: 0xFBC8,
	28113 - 19968: 0xE2D7,
	28120 - 19968: 0xD4A3,
	28121 - 19968: 0xF0F8,
	28122 - 19968: 0xD7A8,
	28126 - 19968: 0xE1E7,
	28129 - 19968: 0xD3BF,
	28136 - 19968: 0xEFE4,
	28138 - 19968: 0xD7C5,
	28139 - 19968: 0xEBE2,
	28142 - 19968: 0xFCE7,
	28145 - 19968: 0xE4A2,
	28147 - 19968: 0xE2E8,
	28149 - 19968: 0xE6D0,
	28151 - 19968: 0xFBE8,
	28152 - 19968: 0xF4E8,
	28153 - 19968: 0xE5F4,
	28154 - 19968: 0xF4BC,
	28155 - 19968: 0xF4D5,
	28183 - 19968: 0xDFB6,
	28185 - 19968: 0xFCB9,
	28186 - 19968: 0xEEC2,
	28187 - 19968: 0xCAF5,
	28191 - 19968: 0xEFE5,
	28192 - 19968: 0xCBE2,
	28193 - 19968: 0xD4A4,
	28195 - 19968: 0xDEE0,
	28196 - 19968: 0xDAFD,
	28197 - 19968: 0xE4C6,
	28198 - 19968: 0xE8BE,
	28203 - 19968: 0xE0DE,
	28204 - 19968: 0xF6B4,
	28205 - 19968: 0xEAD2,
	28207 - 19968: 0xF9FB,
	28210 - 19968: 0xE0C2,
	28212 - 19968: 0xCAE4,
	28214 - 19968: 0xE7B7,
	28216 - 19968: 0xEAFD,
	28218 - 19968: 0xD9DD,
	28220 - 19968: 0xDAB4,
	28221 - 19968: 0xEEAA,
	28222 - 19968: 0xFBE9,
	28227 - 19968: 0xDBCB,
	28228 - 19968: 0xDAB5,
	28234 - 19968: 0xF1BE,
	28237 - 19968: 0xD3AC,
	28246 - 19968: 0xFBC9,
	28248 - 19968: 0xDFCF,
	28251 - 19968: 0xD3C0,
	28252 - 19968: 0xE3D7,
	28254 - 19968: 0xEFE6,
	28255 - 19968: 0xFCD0,
	28263 - 19968: 0xE9C0,
	28267 - 19968: 0xF5D3,
	28270 - 19968: 0xECDC,
	28271 - 19968: 0xF7B7,
	28274 - 19968: 0xEAB8,
	28275 - 19968: 0xD1F9,
	28282 - 19968: 0xDCC8,
	28304 - 19968: 0xEAB9,
	28310 - 19968: 0xF1DE,
	28316 - 19968: 0xD7B6,
	28317 - 19968: 0xCFB5,
	28319 - 19968: 0xD9A8,
	28322 - 19968: 0xECEE,
	28325 - 19968: 0xDDAA,
	28330 - 19968: 0xCDA2,
	28331 - 19968: 0xE8AE,
	28335 - 19968: 0xE1BD,
	28337 - 19968: 0xF2D1,
	28342 - 19968: 0xE9C1,
	28346 - 19968: 0xD2FC,
	28354 - 19968: 0xDBB5,
	28356 - 19968: 0xF3E7,
	28357 - 19968: 0xD8FE,
	28361 - 19968: 0xFCD1,
	28363 - 19968: 0xEDB2,
	28364 - 19968: 0xF4AF,
	28366 - 19968: 0xFBA3,
	28369 - 19968: 0xFCC1,
	28371 - 19968: 0xEEAB,
	28372 - 19968: 0xD4A5,
	28399 - 19968: 0xF4F2,
	28404 - 19968: 0xEED9,
	28408 - 19968: 0xFBCA,
	28414 - 19968: 0xCDE3,
	28415 - 19968: 0xD8BB,
	28417 - 19968: 0xE5DB,
	28418 - 19968: 0xF8F7,
	28422 - 19968: 0xF6D4,
	28431 - 19968: 0xD7A9,
	28433 - 19968: 0xCBC9,
	28436 - 19968: 0xE6D1,
	28437 - 19968: 0xF0CC,
	28448 - 19968: 0xD8AE,
	28450 - 19968: 0xF9D3,
	28451 - 19968: 0xD5FE,
	28459 - 19968: 0xD8BC,
	28460 - 19968: 0xF2B0,
	28465 - 19968: 0xE2AB,
	28466 - 19968: 0xF3E8,
	28472 - 19968: 0xEFC2,
	28479 - 19968: 0xEDEC,
	28481 - 19968: 0xE7B8,
	28497 - 19968: 0xDAFE,
	28500 - 19968: 0xCCBE,
	28503 - 19968: 0xF2FC,
	28504 - 19968: 0xDAEB,
	28506 - 19968: 0xE2D8,
	28507 - 19968: 0xEDD6,
	28510 - 19968: 0xD6D1,
	28511 - 19968: 0xE0B3,
	28514 - 19968: 0xFCD2,
	28516 - 19968: 0xEBC8,
	28525 - 19968: 0xD3C1,
	28526 - 19968: 0xF0CD,
	28528 - 19968: 0xCFF7,
	28538 - 19968: 0xEDD2,
	28540 - 19968: 0xD4D8,
	28541 - 19968: 0xDCC9,
	28542 - 19968: 0xD7F1,
	28545 - 19968: 0xDFBB,
	28548 - 19968: 0xF3A5,
	28552 - 19968: 0xF4CD,
	28557 - 19968: 0xF1BF,
	28558 - 19968: 0xF8B1,
	28560 - 19968: 0xE9FA,
	28564 - 19968: 0xFBCB,
	28567 - 19968: 0xCAD5,
	28579 - 19968: 0xF9D4,
	28580 - 19968: 0xF7CA,
	28583 - 19968: 0xD6C8,
	28590 - 19968: 0xFCE8,
	28591 - 19968: 0xF3BD,
	28593 - 19968: 0xEEFE,
	28595 - 19968: 0xE7FE,
	28601 - 19968: 0xD3C2,
	28606 - 19968: 0xD3B6,
	28608 - 19968: 0xCCAD,
	28609 - 19968: 0xF6FA,
	28610 - 19968: 0xD6B2,
	28611 - 19968: 0xD2D8,
	28618 - 19968: 0xE7D8,
	28629 - 19968: 0xE3A5,
	28634 - 19968: 0xE7B9,
	28639 - 19968: 0xF0AD,
	28640 - 19968: 0xFBCC,
	28641 - 19968: 0xEBA1,
	28644 - 19968: 0xD4A6,
	28649 - 19968: 0xFBCD,
	28651 - 19968: 0xD5BD,
	28652 - 19968: 0xF1DF,
	28655 - 19968: 0xF6FB,
	28657 - 19968: 0xDEB4,
	28670 - 19968: 0xD5EB,
	28673 - 19968: 0xE5C8,
	28677 - 19968: 0xFBA4,
	28678 - 19968: 0xD4B9,
	28681 - 19968: 0xDEE1,
	28683 - 19968: 0xE4A3,
	28687 - 19968: 0xD7B7,
	28689 - 19968: 0xF8EE,
	28693 - 19968: 0xDEB5,
	28696 - 19968: 0xD6D2,
	28698 - 19968: 0xF9D5,
	28699 - 19968: 0xE7BA,
	28700 - 19968: 0xEBD5,
	28701 - 19968: 0xD5F7,
	28702 - 19968: 0xEFE7,
	28703 - 19968: 0xE1BE,
	28707 - 19968: 0xFAAE,
	28711 - 19968: 0xD6E9,
	28712 - 19968: 0xD6EE,
	28719 - 19968: 0xE7BB,
	28727 - 19968: 0xECCB,
	28734 - 19968: 0xD5B3,
	28748 - 19968: 0xCEB4,
	28752 - 19968: 0xFBA5,
	28753 - 19968: 0xE1EE,
	28760 - 19968: 0xF7A8,
	28765 - 19968: 0xFBCE,
	28771 - 19968: 0xD8BD,
	28779 - 19968: 0xFBFD,
	28784 - 19968: 0xFCE9,
	28792 - 19968: 0xCFB6,
	28796 - 19968: 0xEDC7,
	28797 - 19968: 0xEEAC,
	28805 - 19968: 0xCCDD,
	28810 - 19968: 0xF6A7,
	28814 - 19968: 0xE6FA,
	28818 - 19968: 0xF5A4,
	28824 - 19968: 0xFDDC,
	28825 - 19968: 0xEDB3,
	28826 - 19968: 0xCEC9,
	28833 - 19968: 0xEFE8,
	28836 - 19968: 0xE1BF,
	28843 - 19968: 0xFADB,
	28844 - 19968: 0xCBE3,
	28845 - 19968: 0xF7A9,
	28847 - 19968: 0xFBA6,
	28851 - 19968: 0xDCB9,
	28855 - 19968: 0xF1C0,
	28856 - 19968: 0xEDC8,
	28857 - 19968: 0xEFC3,
	28872 - 19968: 0xD6AD,
	28875 - 19968: 0xFDCE,
	28879 - 19968: 0xE8A1,
	28888 - 19968: 0xFBF4,
	28889 - 19968: 0xD5A7,
	28893 - 19968: 0xF1F6,
	28895 - 19968: 0xE6D3,
	28913 - 19968: 0xCCDE,
	28921 - 19968: 0xF8B2,
	28925 - 19968: 0xDCEB,
	28932 - 19968: 0xFDB6,
	28937 - 19968: 0xE5EA,
	28940 - 19968: 0xF1E0,
	28953 - 19968: 0xDBCC,
	28954 - 19968: 0xDDCD,
	28958 - 19968: 0xD4C8,
	28961 - 19968: 0xD9ED,
	28966 - 19968: 0xF5A5,
	28976 - 19968: 0xE6FB,
	28982 - 19968: 0xE6D4,
	28999 - 19968: 0xFDC8,
	29001 - 19968: 0xD6A1,
	29002 - 19968: 0xFDBF,
	29004 - 19968: 0xFCD3,
	29006 - 19968: 0xEFA1,
	29008 - 19968: 0xE7BC,
	29014 - 19968: 0xD1EE,
	29017 - 19968: 0xE6D5,
	29020 - 19968: 0xE9F2,
	29022 - 19968: 0xDFB0,
	29028 - 19968: 0xD8E0,
	29029 - 19968: 0xFCBA,
	29030 - 19968: 0xFDAF,
	29031 - 19968: 0xF0CE,
	29033 - 19968: 0xDBE1,
	29036 - 19968: 0xE5C9,
	29038 - 19968: 0xEDB4,
	29053 - 19968: 0xE0C3,
	29060 - 19968: 0xE3D8,
	29065 - 19968: 0xE9FB,
	29066 - 19968: 0xEAA8,
	29071 - 19968: 0xFDB7,
	29074 - 19968: 0xFBA7,
	29076 - 19968: 0xE9C2,
	29081 - 19968: 0xFDF7,
	29087 - 19968: 0xE2D9,
	29090 - 19968: 0xDCEC,
	29100 - 19968: 0xE8A2,
	29105 - 19968: 0xE6F0,
	29113 - 19968: 0xFDF8,
	29114 - 19968: 0xFDF9,
	29118 - 19968: 0xF6BF,
	29121 - 19968: 0xE7A7,
	29123 - 19968: 0xE6D7,
	29128 - 19968: 0xD4F3,
	29129 - 19968: 0xD4C9,
	29134 - 19968: 0xD6FA,
	29136 - 19968: 0xD7F2,
	29138 - 19968: 0xE1C0,
	29140 - 19968: 0xDBE2,
	29141 - 19968: 0xE6D8,
	29151 - 19968: 0xE7BD,
	29157 - 19968: 0xF0CF,
	29158 - 19968: 0xF3BE,
	29159 - 19968: 0xE2AC,
	29165 - 19968: 0xF5B7,
	29166 - 19968: 0xE0F0,
	29179 - 19968: 0xFDB8,
	29180 - 19968: 0xE3E8,
	29182 - 19968: 0xD4A7,
	29183 - 19968: 0xE8FC,
	29184 - 19968: 0xFAD2,
	29190 - 19968: 0xF8EF,
	29200 - 19968: 0xD6D3,
	29211 - 19968: 0xD5B4,
	29226 - 19968: 0xF0D0,
	29228 - 19968: 0xF7F0,
	29229 - 19968: 0xEEB3,
	29232 - 19968: 0xEABA,
	29234 - 19968: 0xEAD3,
	29237 - 19968: 0xEDC9,
	29238 - 19968: 0xDDAB,
	29242 - 19968: 0xE5AC,
	29243 - 19968: 0xFDA1,
	29245 - 19968: 0xDFD0,
	29246 - 19968: 0xECB3,
	29248 - 19968: 0xDFD1,
	29254 - 19968: 0xEDED,
	29255 - 19968: 0xF8B8,
	29256 - 19968: 0xF7FA,
	29260 - 19968: 0xF8AB,
	29266 - 19968: 0xF4E0,
	29272 - 19968: 0xD4BA,
	29273 - 19968: 0xE4B3,
	29275 - 19968: 0xE9DA,
	29277 - 19968: 0xDEB6,
	29279 - 19968: 0xD9BF,
	29281 - 19968: 0xD9C0,
	29282 - 19968: 0xD6EF,
	29287 - 19968: 0xD9CC,
	29289 - 19968: 0xDAAA,
	29298 - 19968: 0xDFE5,
	29305 - 19968: 0xF7E5,
	29309 - 19968: 0xCCB2,
	29312 - 19968: 0xDFF9,
	29313 - 19968: 0xD7E0,
	29346 - 19968: 0xD4BB,
	29351 - 19968: 0xFDFA,
	29356 - 19968: 0xCCB3,
	29359 - 19968: 0xDBF3,
	29376 - 19968: 0xDFD2,
	29378 - 19968: 0xCECA,
	29380 - 19968: 0xEEDA,
	29390 - 19968: 0xE4E4,
	29392 - 19968: 0xFBCF,
	29399 - 19968: 0xCFB7,
	29401 - 19968: 0xEEC3,
	29409 - 19968: 0xCEEA,
	29417 - 19968: 0xE2AD,
	29432 - 19968: 0xD7E1,
	29433 - 19968: 0xFAF5,
	29436 - 19968: 0xD5C9,
	29437 - 19968: 0xF8AC,
	29450 - 19968: 0xE7D9,
	29462 - 19968: 0xF3E9,
	29467 - 19968: 0xD8ED,
	29468 - 19968: 0xE3C4,
	29469 - 19968: 0xF0F1,
	29477 - 19968: 0xE8E5,
	29481 - 19968: 0xE0FA,
	29482 - 19968: 0xEEC4,
	29483 - 19968: 0xD9DE,
	29494 - 19968: 0xEBA2,
	29495 - 19968: 0xEBA3,
	29502 - 19968: 0xFCC2,
	29503 - 19968: 0xEABB,
	29508 - 19968: 0xE8AB,
	29509 - 19968: 0xDEE2,
	29520 - 19968: 0xEDEF,
	29522 - 19968: 0xE8A3,
	29527 - 19968: 0xCFF1,
	29544 - 19968: 0xD4BC,
	29546 - 19968: 0xFCEA,
	29552 - 19968: 0xE7BE,
	29554 - 19968: 0xFCF2,
	29557 - 19968: 0xD6B4,
	29560 - 19968: 0xE2AE,
	29562 - 19968: 0xD3B7,
	29563 - 19968: 0xFACC,
	29572 - 19968: 0xFADC,
	29574 - 19968: 0xEDB5,
	29575 - 19968: 0xE1E3,
	29577 - 19968: 0xE8AC,
	29579 - 19968: 0xE8DD,
	29582 - 19968: 0xEFE9,
	29588 - 19968: 0xF4BD,
	29590 - 19968: 0xCFB8,
	29591 - 19968: 0xE9DB,
	29592 - 19968: 0xD1AC,
	29599 - 19968: 0xDAC7,
	29607 - 19968: 0xEBC9,
	29609 - 19968: 0xE8CC,
	29613 - 19968: 0xDEB7,
	29618 - 19968: 0xD6BC,
	29619 - 19968: 0xD3E5,
	29625 - 19968: 0xFADD,
	29632 - 19968: 0xDAD6,
	29634 - 19968: 0xCAB1,
	29641 - 19968: 0xDAC8,
	29642 - 19968: 0xDFA6,
	29644 - 19968: 0xF9B3,
	29645 - 19968: 0xF2D2,
	29647 - 19968: 0xCAC4,
	29654 - 19968: 0xCECB,
	29657 - 19968: 0xCDF5,
	29661 - 19968: 0xFDB0,
	29662 - 19968: 0xD5A8,
	29664 - 19968: 0xF1C1,
	29667 - 19968: 0xE2E9,
	29668 - 19968: 0xDCCA,
	29669 - 19968: 0xECB4,
	29670 - 19968: 0xFAC0,
	29673 - 19968: 0xFBA8,
	29674 - 19968: 0xD0A8,
	29677 - 19968: 0xDAEC,
	29687 - 19968: 0xD9EE,
	29689 - 19968: 0xE0FB,
	29693 - 19968: 0xEFEA,
	29694 - 19968: 0xFADE,
	29697 - 19968: 0xE0C4,
	29699 - 19968: 0xCFB9,
	29701 - 19968: 0xD5CA,
	29702 - 19968: 0xD7E2,
	29703 - 19968: 0xE2AF,
	29705 - 19968: 0xD7B8,
	29715 - 19968: 0xE8CD,
	29723 - 19968: 0xF6DA,
	29728 - 19968: 0xEFA2,
	29729 - 19968: 0xE2DA,
	29730 - 19968: 0xF6FC,
	29733 - 19968: 0xFBD0,
	29734 - 19968: 0xD1AD,
	29736 - 19968: 0xCDE4,
	29738 - 19968: 0xD1AE,
	29739 - 19968: 0xDCED,
	29740 - 19968: 0xE8CE,
	29742 - 19968: 0xF0F9,
	29743 - 19968: 0xCEB5,
	29744 - 19968: 0xE6FC,
	29747 - 19968: 0xD7FB,
	29748 - 19968: 0xD0D6,
	29749 - 19968: 0xDDF5,
	29750 - 19968: 0xF7F1,
	29752 - 19968: 0xF6FD,
	29754 - 19968: 0xDBF7,
	29759 - 19968: 0xFBEA,
	29760 - 19968: 0xE9DC,
	29761 - 19968: 0xD9C1,
	29763 - 19968: 0xF5F2,
	29764 - 19968: 0xE0C5,
	29771 - 19968: 0xEAD4,
	29781 - 19968: 0xF9C2,
	29783 - 19968: 0xEABC,
	29785 - 19968: 0xD2C5,
	29786 - 19968: 0xFBD1,
	29787 - 19968: 0xE7C0,
	29788 - 19968: 0xEBA5,
	29790 - 19968: 0xDFFA,
	29791 - 19968: 0xE3A2,
	29792 - 19968: 0xD7B9,
	29794 - 19968: 0xE9C3,
	29796 - 19968: 0xE8FD,
	29797 - 19968: 0xE8AF,
	29800 - 19968: 0xF2D3,
	29801 - 19968: 0xFBA9,
	29802 - 19968: 0xD8A5,
	29807 - 19968: 0xD5CB,
	29822 - 19968: 0xD0C8,
	29826 - 19968: 0xD1AF,
	29827 - 19968: 0xD7E3,
	29831 - 19968: 0xE0C6,
	29833 - 19968: 0xD6A2,
	29835 - 19968: 0xEDF0,
	29848 - 19968: 0xD7F3,
	29852 - 19968: 0xFCD4,
	29854 - 19968: 0xDAD7,
	29855 - 19968: 0xCCDF,
	29857 - 19968: 0xF2D4,
	29859 - 19968: 0xD1B0,
	29861 - 19968: 0xCCE0,
	29863 - 19968: 0xDBFD,
	29864 - 19968: 0xF3BF,
	29866 - 19968: 0xF0D1,
	29872 - 19968: 0xFCBB,
	29874 - 19968: 0xE2B0,
	29877 - 19968: 0xE6A5,
	29881 - 19968: 0xE2DB,
	29885 - 19968: 0xDFDE,
	29887 - 19968: 0xE0C7,
	29894 - 19968: 0xF2EF,
	29898 - 19968: 0xCCE1,
	29903 - 19968: 0xD6EA,
	29908 - 19968: 0xE7C2,
	29912 - 19968: 0xCEB6,
	29914 - 19968: 0xF3C0,
	29916 - 19968: 0xCDFE,
	29920 - 19968: 0xFBD2,
	29922 - 19968: 0xF8F8,
	29923 - 19968: 0xF7FB,
	29926 - 19968: 0xE8BF,
	29934 - 19968: 0xE8B7,
	29943 - 19968: 0xEDB6,
	29953 - 19968: 0xDCBA,
	29956 - 19968: 0xCCB4,
	29969 - 19968: 0xF1F7,
	29973 - 19968: 0xE8B8,
	29976 - 19968: 0xCAF6,
	29978 - 19968: 0xE4A4,
	29979 - 19968: 0xF4D6,
	29983 - 19968: 0xDFE6,
	29987 - 19968: 0xDFA7,
	29989 - 19968: 0xDFE7,
	29990 - 19968: 0xE1C1,
	29992 - 19968: 0xE9C4,
	29995 - 19968: 0xDCCB,
	29996 - 19968: 0xE9C5,
	30000 - 19968: 0xEFA3,
	30001 - 19968: 0xEBA6,
	30002 - 19968: 0xCBA3,
	30003 - 19968: 0xE3E9,
	30007 - 19968: 0xD1FB,
	30008 - 19968: 0xEFA4,
	30010 - 19968: 0xEFEB,
	30023 - 19968: 0xD0B4,
	30028 - 19968: 0xCDA3,
	30031 - 19968: 0xE8E6,
	30033 - 19968: 0xEFA5,
	30035 - 19968: 0xD3CC,
	30036 - 19968: 0xDAED,
	30041 - 19968: 0xD7BA,
	30043 - 19968: 0xF2D5,
	30044 - 19968: 0xF5E5,
	30045 - 19968: 0xD9EF,
	30050 - 19968: 0xF9B4,
	30053 - 19968: 0xD5D4,
	30054 - 19968: 0xFDCF,
	30058 - 19968: 0xDBE3,
	30063 - 19968: 0xF1E1,
	30064 - 19968: 0xECB6,
	30069 - 19968: 0xFBFE,
	30070 - 19968: 0xD3D7,
	30072 - 19968: 0xD1B1,
	30074 - 19968: 0xCBB1,
	30079 - 19968: 0xD1B2,
	30086 - 19968: 0xCBB2,
	30087 - 19968: 0xF1C2,
	30090 - 19968: 0xF4E1,
	30091 - 19968: 0xF9B5,
	30094 - 19968: 0xE1C3,
	30095 - 19968: 0xE1C2,
	30097 - 19968: 0xEBF7,
	30109 - 19968: 0xDFA8,
	30117 - 19968: 0xCBCA,
	30123 - 19968: 0xE6B9,
	30129 - 19968: 0xF8DE,
	30130 - 19968: 0xF9AA,
	30131 - 19968: 0xCAF7,
	30133 - 19968: 0xEDB7,
	30136 - 19968: 0xD3B8,
	30137 - 19968: 0xF2D6,
	30140 - 19968: 0xD4D9,
	30141 - 19968: 0xEEC5,
	30142 - 19968: 0xF2F0,
	30146 - 19968: 0xCAB2,
	30149 - 19968: 0xDCBB,
	30151 - 19968: 0xF1F8,
	30157 - 19968: 0xECB7,
	30162 - 19968: 0xE5CA,
	30164 - 19968: 0xF6C0,
	30165 - 19968: 0xFDDD,
	30168 - 19968: 0xD4E3,
	30169 - 19968: 0xCCE2,
	30171 - 19968: 0xF7D4,
	30178 - 19968: 0xD7E5,
	30192 - 19968: 0xD3C3,
	30194 - 19968: 0xD8A6,
	30196 - 19968: 0xF6C1,
	30202 - 19968: 0xDDF6,
	30204 - 19968: 0xCDC0,
	30208 - 19968: 0xE5DC,
	30221 - 19968: 0xE5CB,
	30233 - 19968: 0xE1C4,
	30239 - 19968: 0xE8B0,
	30240 - 19968: 0xF4B0,
	30241 - 19968: 0xF3EA,
	30242 - 19968: 0xDAEE,
	30244 - 19968: 0xD7BB,
	30246 - 19968: 0xE2B1,
	30267 - 19968: 0xD7AA,
	30274 - 19968: 0xD6FB,
	30284 - 19968: 0xE4DF,
	30286 - 19968: 0xCAD6,
	30290 - 19968: 0xEBA8,
	30294 - 19968: 0xDBFE,
	30305 - 19968: 0xF6C2,
	30308 - 19968: 0xEFBB,
	30313 - 19968: 0xD4FD,
	30316 - 19968: 0xE0C8,
	30320 - 19968: 0xE8B9,
	30322 - 19968: 0xEFA6,
	30328 - 19968: 0xCDA4,
	30331 - 19968: 0xD4F4,
	30332 - 19968: 0xDBA1,
	30333 - 19968: 0xDBDC,
	30334 - 19968: 0xDBDD,
	30340 - 19968: 0xEEDC,
	30342 - 19968: 0xCBCB,
	30343 - 19968: 0xFCD5,
	30350 - 19968: 0xCEEB,
	30352 - 19968: 0xCDC1,
	30355 - 19968: 0xFBD3,
	30382 - 19968: 0xF9AB,
	30394 - 19968: 0xF5D4,
	30399 - 19968: 0xD9A9,
	30402 - 19968: 0xE9DD,
	30403 - 19968: 0xDBCD,
	30406 - 19968: 0xDDCE,
	30408 - 19968: 0xE7C3,
	30410 - 19968: 0xECCC,
	30418 - 19968: 0xF9EC,
	30422 - 19968: 0xCBCC,
	30427 - 19968: 0xE0FC,
	30428 - 19968: 0xD4A8,
	30430 - 19968: 0xEDD3,
	30431 - 19968: 0xD8EF,
	30433 - 19968: 0xF2D7,
	30435 - 19968: 0xCAF8,
	30436 - 19968: 0xDAEF,
	30439 - 19968: 0xD6D4,
	30446 - 19968: 0xD9CD,
	30450 - 19968: 0xD8EE,
	30452 - 19968: 0xF2C1,
	30456 - 19968: 0xDFD3,
	30460 - 19968: 0xDAF0,
	30462 - 19968: 0xE2EA,
	30465 - 19968: 0xE0FD,
	30468 - 19968: 0xD8F8,
	30472 - 19968: 0xF7AF,
	30473 - 19968: 0xDAB6,
	30475 - 19968: 0xCAD7,
	30494 - 19968: 0xF2D8,
	30496 - 19968: 0xD8F9,
	30505 - 19968: 0xFADF,
	30519 - 19968: 0xCFEF,
	30520 - 19968: 0xD9C2,
	30522 - 19968: 0xF0D2,
	30524 - 19968: 0xE4D1,
	30528 - 19968: 0xF3B7,
	30541 - 19968: 0xFAE0,
	30555 - 19968: 0xEFEC,
	30561 - 19968: 0xE2B2,
	30563 - 19968: 0xD4BD,
	30566 - 19968: 0xD9CE,
	30571 - 19968: 0xF4E2,
	30585 - 19968: 0xD4A9,
	30590 - 19968: 0xCDC2,
	30591 - 19968: 0xE7DA,
	30603 - 19968: 0xF2D9,
	30609 - 19968: 0xD9AA,
	30622 - 19968: 0xD8BE,
	30629 - 19968: 0xDCAD,
	30636 - 19968: 0xE2EB,
	30637 - 19968: 0xD6FC,
	30640 - 19968: 0xCAF9,
	30643 - 19968: 0xD4DA,
	30651 - 19968: 0xF4D7,
	30652 - 19968: 0xCCA1,
	30655 - 19968: 0xCFBA,
	30679 - 19968: 0xF5B8,
	30683 - 19968: 0xD9C3,
	30684 - 19968: 0xD0E8,
	30690 - 19968: 0xE3C5,
	30691 - 19968: 0xEBF8,
	30693 - 19968: 0xF2B1,
	30697 - 19968: 0xCFBB,
	30701 - 19968: 0xD3AD,
	30702 - 19968: 0xE8E1,
	30703 - 19968: 0xCEEC,
	30707 - 19968: 0xE0B4,
	30722 - 19968: 0xDEE3,
	30738 - 19968: 0xDDF7,
	30757 - 19968: 0xF2B2,
	30758 - 19968: 0xF3F6,
	30759 - 19968: 0xF6DB,
	30764 - 19968: 0xD7FE,
	30770 - 19968: 0xF8DF,
	30772 - 19968: 0xF7F2,
	30789 - 19968: 0xD0A9,
	30799 - 19968: 0xE6DA,
	30813 - 19968: 0xF5A6,
	30827 - 19968: 0xD7BC,
	30828 - 19968: 0xCCE3,
	30831 - 19968: 0xE6DB,
	30844 - 19968: 0xDDDD,
	30849 - 19968: 0xD1B3,
	30855 - 19968: 0xEFED,
	30860 - 19968: 0xD6DE,
	30861 - 19968: 0xE4F4,
	30862 - 19968: 0xE1EF,
	30865 - 19968: 0xDDF8,
	30871 - 19968: 0xE8CF,
	30883 - 19968: 0xCAE5,
	30887 - 19968: 0xDCA1,
	30889 - 19968: 0xE0B5,
	30906 - 19968: 0xFCAC,
	30907 - 19968: 0xFCAD,
	30908 - 19968: 0xD8A7,
	30913 - 19968: 0xEDB8,
	30917 - 19968: 0xDBB6,
	30922 - 19968: 0xD6F0,
	30923 - 19968: 0xF3AF,
	30926 - 19968: 0xCDA5,
	30928 - 19968: 0xDAF1,
	30952 - 19968: 0xD8A8,
	30956 - 19968: 0xCCE4,
	30959 - 19968: 0xD1B4,
	30965 - 19968: 0xCAD8,
	30971 - 19968: 0xDAF2,
	30977 - 19968: 0xF5A7,
	30990 - 19968: 0xF5A8,
	30998 - 19968: 0xE6A6,
	31018 - 19968: 0xD5EC,
	31019 - 19968: 0xD5F8,
	31020 - 19968: 0xDAF3,
	31034 - 19968: 0xE3C6,
	31038 - 19968: 0xDEE4,
	31040 - 19968: 0xDEE5,
	31041 - 19968: 0xD1B5,
	31047 - 19968: 0xD1B6,
	31048 - 19968: 0xD1B7,
	31049 - 19968: 0xF2B3,
	31056 - 19968: 0xE9DE,
	31062 - 19968: 0xF0D3,
	31063 - 19968: 0xF2B4,
	31066 - 19968: 0xF0D4,
	31067 - 19968: 0xCBE4,
	31068 - 19968: 0xFBD4,
	31069 - 19968: 0xF5E6,
	31070 - 19968: 0xE3EA,
	31072 - 19968: 0xDEE6,
	31077 - 19968: 0xDFD4,
	31080 - 19968: 0xF8F9,
	31085 - 19968: 0xF0AE,
	31098 - 19968: 0xD1B8,
	31103 - 19968: 0xD6DF,
	31105 - 19968: 0xD0D7,
	31117 - 19968: 0xFCA1,
	31118 - 19968: 0xEFEE,
	31119 - 19968: 0xDCD8,
	31121 - 19968: 0xE9DF,
	31142 - 19968: 0xE5DD,
	31143 - 19968: 0xFDFB,
	31146 - 19968: 0xE0C9,
	31150 - 19968: 0xD6C9,
	31153 - 19968: 0xD4AA,
	31155 - 19968: 0xE5CC,
	31161 - 19968: 0xE9E0,
	31165 - 19968: 0xD0D8,
	31166 - 19968: 0xFCA2,
	31167 - 19968: 0xD4BE,
	31168 - 19968: 0xE2B3,
	31169 - 19968: 0xDEE7,
	31177 - 19968: 0xDCBC,
	31178 - 19968: 0xD2B6,
	31179 - 19968: 0xF5D5,
	31185 - 19968: 0xCEA1,
	31186 - 19968: 0xF5A9,
	31189 - 19968: 0xDDF9,
	31192 - 19968: 0xDDFA,
	31199 - 19968: 0xF0D5,
	31204 - 19968: 0xF6DF,
	31206 - 19968: 0xF2DA,
	31207 - 19968: 0xE4EB,
	31209 - 19968: 0xF2F1,
	31227 - 19968: 0xECB9,
	31232 - 19968: 0xFDFC,
	31237 - 19968: 0xE1AA,
	31240 - 19968: 0xCAD9,
	31243 - 19968: 0xEFEF,
	31245 - 19968: 0xF5AA,
	31252 - 19968: 0xECF9,
	31255 - 19968: 0xF8AD,
	31257 - 19968: 0xF2C2,
	31258 - 19968: 0xF6C3,
	31260 - 19968: 0xD7D2,
	31263 - 19968: 0xF9A2,
	31264 - 19968: 0xF0D6,
	31278 - 19968: 0xF0FA,
	31281 - 19968: 0xF6E0,
	31286 - 19968: 0xE9F3,
	31287 - 19968: 0xF2C3,
	31291 - 19968: 0xD4AB,
	31292 - 19968: 0xCAB3,
	31293 - 19968: 0xCDA6,
	31295 - 19968: 0xCDC3,
	31296 - 19968: 0xCDDA,
	31302 - 19968: 0xD9CF,
	31305 - 19968: 0xF6C4,
	31309 - 19968: 0xEEDD,
	31310 - 19968: 0xE7C4,
	31319 - 19968: 0xE2B4,
	31329 - 19968: 0xDFE2,
	31330 - 19968: 0xE7DB,
	31337 - 19968: 0xE8B1,
	31339 - 19968: 0xFCAE,
	31344 - 19968: 0xE5CD,
	31348 - 19968: 0xFAEB,
	31350 - 19968: 0xCFBC,
	31353 - 19968: 0xCFE2,
	31354 - 19968: 0xCDF6,
	31357 - 19968: 0xEFF0,
	31359 - 19968: 0xF4BE,
	31361 - 19968: 0xD4CD,
	31364 - 19968: 0xF3B8,
	31368 - 19968: 0xE9A1,
	31378 - 19968: 0xF2F2,
	31379 - 19968: 0xF3EB,
	31381 - 19968: 0xF0D7,
	31384 - 19968: 0xCFD7,
	31391 - 19968: 0xCFDF,
	31401 - 19968: 0xE8C0,
	31402 - 19968: 0xE8C1,
	31406 - 19968: 0xCFE3,
	31407 - 19968: 0xE9A2,
	31418 - 19968: 0xD0AA,
	31428 - 19968: 0xF3C1,
	31429 - 19968: 0xD0AB,
	31431 - 19968: 0xD4E4,
	31434 - 19968: 0xEFBC,
	31435 - 19968: 0xD8A1,
	31447 - 19968: 0xD9DF,
	31449 - 19968: 0xF3D7,
	31453 - 19968: 0xDCBD,
	31455 - 19968: 0xCCE5,
	31456 - 19968: 0xEDF1,
	31459 - 19968: 0xF1E2,
	31461 - 19968: 0xD4DB,
	31466 - 19968: 0xE2B5,
	31469 - 19968: 0xCAE6,
	31471 - 19968: 0xD3AE,
	31478 - 19968: 0xCCE6,
	31481 - 19968: 0xF1D3,
	31482 - 19968: 0xF5E7,
	31487 - 19968: 0xCADA,
	31503 - 19968: 0xFBEE,
	31505 - 19968: 0xE1C5,
	31513 - 19968: 0xDFE9,
	31515 - 19968: 0xEEDE,
	31518 - 19968: 0xF7C2,
	31520 - 19968: 0xD8A2,
	31526 - 19968: 0xDDAC,
	31532 - 19968: 0xF0AF,
	31533 - 19968: 0xD6BD,
	31545 - 19968: 0xE1AB,
	31558 - 19968: 0xF9B6,
	31561 - 19968: 0xD4F5,
	31563 - 19968: 0xD0C9,
	31564 - 19968: 0xEFA7,
	31565 - 19968: 0xE2EC,
	31567 - 19968: 0xDBEA,
	31568 - 19968: 0xCECC,
	31569 - 19968: 0xF5E8,
	31570 - 19968: 0xF7D5,
	31572 - 19968: 0xD3CD,
	31574 - 19968: 0xF3FE,
	31584 - 19968: 0xD0B5,
	31596 - 19968: 0xE0FE,
	31598 - 19968: 0xDFFB,
	31605 - 19968: 0xE6DD,
	31613 - 19968: 0xE8A4,
	31623 - 19968: 0xCBCD,
	31627 - 19968: 0xEFA8,
	31631 - 19968: 0xEEB4,
	31636 - 19968: 0xDAD8,
	31637 - 19968: 0xD1B9,
	31639 - 19968: 0xDFA9,
	31642 - 19968: 0xF3B0,
	31645 - 19968: 0xCCC4,
	31649 - 19968: 0xCEB7,
	31661 - 19968: 0xEFA9,
	31665 - 19968: 0xDFD5,
	31668 - 19968: 0xEDD7,
	31672 - 19968: 0xEEC6,
	31680 - 19968: 0xEFBD,
	31681 - 19968: 0xFCD6,
	31684 - 19968: 0xDBF4,
	31686 - 19968: 0xEFAA,
	31687 - 19968: 0xF8B9,
	31689 - 19968: 0xF5E9,
	31698 - 19968: 0xE3D9,
	31712 - 19968: 0xE1C6,
	31716 - 19968: 0xD4BF,
	31721 - 19968: 0xDEE8,
	31751 - 19968: 0xF0EA,
	31762 - 19968: 0xF3C2,
	31774 - 19968: 0xD3AF,
	31777 - 19968: 0xCADB,
	31783 - 19968: 0xFCD7,
	31786 - 19968: 0xEDD8,
	31787 - 19968: 0xE1C7,
	31805 - 19968: 0xF4D8,
	31806 - 19968: 0xD6B3,
	31807 - 19968: 0xDDAD,
	31811 - 19968: 0xD5BE,
	31820 - 19968: 0xF1C3,
	31821 - 19968: 0xEEDF,
	31840 - 19968: 0xD6EB,
	31844 - 19968: 0xF4D9,
	31852 - 19968: 0xD7E6,
	31859 - 19968: 0xDAB7,
	31875 - 19968: 0xDDFB,
	31881 - 19968: 0xDDCF,
	31890 - 19968: 0xD8A3,
	31893 - 19968: 0xDAD9,
	31895 - 19968: 0xF0D8,
	31896 - 19968: 0xEFC4,
	31903 - 19968: 0xE1D8,
	31909 - 19968: 0xF1D4,
	31911 - 19968: 0xEDF2,
	31918 - 19968: 0xD5DB,
	31921 - 19968: 0xD5DC,
	31922 - 19968: 0xF3C4,
	31923 - 19968: 0xCBD7,
	31929 - 19968: 0xE2B6,
	31934 - 19968: 0xEFF1,
	31946 - 19968: 0xFBD5,
	31958 - 19968: 0xD3D8,
	31966 - 19968: 0xDDD0,
	31967 - 19968: 0xF0D9,
	31968 - 19968: 0xCBB3,
	31975 - 19968: 0xD5DD,
	31995 - 19968: 0xCDA7,
	31998 - 19968: 0xD0AC,
	32000 - 19968: 0xD1BA,
	32002 - 19968: 0xF1C4,
	32004 - 19968: 0xE5B3,
	32005 - 19968: 0xFBF5,
	32006 - 19968: 0xE9E1,
	32007 - 19968: 0xFDE0,
	32008 - 19968: 0xFCBC,
	32010 - 19968: 0xDAA2,
	32011 - 19968: 0xDAA3,
	32013 - 19968: 0xD2A1,
	32016 - 19968: 0xD2EF,
	32020 - 19968: 0xE2ED,
	32023 - 19968: 0xDEE9,
	32024 - 19968: 0xCEDC,
	32025 - 19968: 0xF2B5,
	32026 - 19968: 0xD0E4,
	32027 - 19968: 0xDDD1,
	32032 - 19968: 0xE1C8,
	32033 - 19968: 0xDBB7,
	32034 - 19968: 0xDFE3,
	32043 - 19968: 0xEDB9,
	32044 - 19968: 0xF1C5,
	32046 - 19968: 0xF3CF,
	32047 - 19968: 0xD7AB,
	32048 - 19968: 0xE1AC,
	32051 - 19968: 0xE3EB,
	32053 - 19968: 0xEEC7,
	32057 - 19968: 0xE1C9,
	32058 - 19968: 0xCAFA,
	32066 - 19968: 0xF0FB,
	32067 - 19968: 0xFAE1,
	32068 - 19968: 0xF0DA,
	32069 - 19968: 0xCCE7,
	32070 - 19968: 0xDAF4,
	32080 - 19968: 0xCCBF,
	32094 - 19968: 0xCEED,
	32097 - 19968: 0xD5A9,
	32098 - 19968: 0xFAE2,
	32102 - 19968: 0xD0E5,
	32104 - 19968: 0xEBD6,
	32106 - 19968: 0xECDF,
	32110 - 19968: 0xDFFC,
	32113 - 19968: 0xF7D6,
	32114 - 19968: 0xDEEA,
	32115 - 19968: 0xCBB4,
	32118 - 19968: 0xEFBE,
	32121 - 19968: 0xCCB5,
	32127 - 19968: 0xCFBD,
	32142 - 19968: 0xEFF2,
	32143 - 19968: 0xE2B7,
	32147 - 19968: 0xCCE8,
	32156 - 19968: 0xF0FC,
	32160 - 19968: 0xD6E0,
	32162 - 19968: 0xF1C6,
	32172 - 19968: 0xE2B8,
	32173 - 19968: 0xEBAB,
	32177 - 19968: 0xCBB5,
	32178 - 19968: 0xD8D1,
	32180 - 19968: 0xF4CE,
	32181 - 19968: 0xF3F7,
	32184 - 19968: 0xD7C6,
	32186 - 19968: 0xD1BB,
	32187 - 19968: 0xF7AA,
	32189 - 19968: 0xEDCA,
	32190 - 19968: 0xD7D3,
	32191 - 19968: 0xD8FA,
	32199 - 19968: 0xF6C5,
	32202 - 19968: 0xD1CC,
	32203 - 19968: 0xDDFC,
	32214 - 19968: 0xDFFD,
	32216 - 19968: 0xF9E5,
	32218 - 19968: 0xE0CA,
	32221 - 19968: 0xF2FD,
	32222 - 19968: 0xD3B0,
	32224 - 19968: 0xF4F3,
	32225 - 19968: 0xDAC9,
	32227 - 19968: 0xE6DE,
	32232 - 19968: 0xF8BA,
	32233 - 19968: 0xE8D0,
	32236 - 19968: 0xD8FB,
	32239 - 19968: 0xEAD5,
	32244 - 19968: 0xD6A3,
	32251 - 19968: 0xF6C6,
	32265 - 19968: 0xF2DB,
	32266 - 19968: 0xE4FC,
	32277 - 19968: 0xE8B2,
	32283 - 19968: 0xDADA,
	32285 - 19968: 0xF2DC,
	32286 - 19968: 0xFBD6,
	32287 - 19968: 0xE9B2,
	32289 - 19968: 0xEEAD,
	32291 - 19968: 0xFAE3,
	32299 - 19968: 0xDCEE,
	32302 - 19968: 0xF5EA,
	32303 - 19968: 0xE6E0,
	32305 - 19968: 0xF0FD,
	32311 - 19968: 0xD7AC,
	32317 - 19968: 0xF5C5,
	32318 - 19968: 0xEEE0,
	32321 - 19968: 0xDBE5,
	32323 - 19968: 0xDDDE,
	32326 - 19968: 0xD9F0,
	32327 - 19968: 0xE9A3,
	32338 - 19968: 0xF1F9,
	32340 - 19968: 0xF2C4,
	32341 - 19968: 0xE0CB,
	32350 - 19968: 0xE9A4,
	32353 - 19968: 0xE2B9,
	32361 - 19968: 0xE3B1,
	32362 - 19968: 0xFCEB,
	32363 - 19968: 0xCDA8,
	32365 - 19968: 0xCCB6,
	32368 - 19968: 0xF0DB,
	32377 - 19968: 0xE6BA,
	32380 - 19968: 0xCDA9,
	32386 - 19968: 0xF3C3,
	32396 - 19968: 0xE1D9,
	32399 - 19968: 0xEFAB,
	32403 - 19968: 0xE7C5,
	32406 - 19968: 0xE0E9,
	32408 - 19968: 0xF3C5,
	32411 - 19968: 0xD4C0,
	32412 - 19968: 0xD5BF,
	32566 - 19968: 0xDDAE,
	32568 - 19968: 0xF9FC,
	32570 - 19968: 0xCCC0,
	32588 - 19968: 0xE5A2,
	32592 - 19968: 0xCEB8,
	32596 - 19968: 0xD8D2,
	32597 - 19968: 0xF9D6,
	32618 - 19968: 0xF1AA,
	32619 - 19968: 0xCED1,
	32622 - 19968: 0xF6C7,
	32624 - 19968: 0xDBEB,
	32626 - 19968: 0xDFFE,
	32629 - 19968: 0xD8E1,
	32631 - 19968: 0xF7F3,
	32633 - 19968: 0xD7E7,
	32645 - 19968: 0xD4FE,
	32648 - 19968: 0xD1BC,
	32650 - 19968: 0xE5CF,
	32652 - 19968: 0xCBB6,
	32654 - 19968: 0xDAB8,
	32660 - 19968: 0xCDC4,
	32666 - 19968: 0xD6BE,
	32670 - 19968: 0xE2BA,
	32676 - 19968: 0xCFD8,
	32680 - 19968: 0xE0CC,
	32681 - 19968: 0xEBF9,
	32690 - 19968: 0xFDFD,
	32696 - 19968: 0xD7E8,
	32697 - 19968: 0xCBD8,
	32701 - 19968: 0xE9E2,
	32705 - 19968: 0xE8BA,
	32709 - 19968: 0xE3C7,
	32714 - 19968: 0xECCD,
	32716 - 19968: 0xECCE,
	32718 - 19968: 0xD6BF,
	32722 - 19968: 0xE3A7,
	32724 - 19968: 0xDFD6,
	32725 - 19968: 0xFDE8,
	32735 - 19968: 0xEEE1,
	32736 - 19968: 0xF6A8,
	32737 - 19968: 0xDDFD,
	32745 - 19968: 0xF8BB,
	32747 - 19968: 0xE8D1,
	32752 - 19968: 0xF9D7,
	32761 - 19968: 0xCEEE,
	32764 - 19968: 0xECCF,
	32768 - 19968: 0xE9A5,
	32769 - 19968: 0xD6D5,
	32771 - 19968: 0xCDC5,
	32773 - 19968: 0xEDBA,
	32774 - 19968: 0xD1BD,
	32777 - 19968: 0xCFBE,
	32780 - 19968: 0xECBB,
	32784 - 19968: 0xD2B1,
	32789 - 19968: 0xCCE9,
	32791 - 19968: 0xD9C4,
	32792 - 19968: 0xE9FC,
	32813 - 19968: 0xD1BE,
	32819 - 19968: 0xECBC,
	32822 - 19968: 0xE5AD,
	32829 - 19968: 0xF7B0,
	32831 - 19968: 0xCCEA,
	32835 - 19968: 0xD3C4,
	32838 - 19968: 0xD6C0,
	32842 - 19968: 0xD6FD,
	32854 - 19968: 0xE1A1,
	32856 - 19968: 0xDEBD,
	32858 - 19968: 0xF6A9,
	32862 - 19968: 0xDAA4,
	32879 - 19968: 0xD6A4,
	32880 - 19968: 0xF5C6,
	32882 - 19968: 0xE1A2,
	32883 - 19968: 0xE9C6,
	32887 - 19968: 0xF2C5,
	32893 - 19968: 0xF4E9,
	32894 - 19968: 0xD6EC,
	32895 - 19968: 0xEBD3,
	32900 - 19968: 0xECBD,
	32901 - 19968: 0xE2DC,
	32902 - 19968: 0xDEEB,
	32903 - 19968: 0xF0DC,
	32905 - 19968: 0xEBBF,
	32907 - 19968: 0xD7CE,
	32908 - 19968: 0xD1BF,
	32918 - 19968: 0xF5AB,
	32923 - 19968: 0xF9FD,
	32925 - 19968: 0xCADC,
	32929 - 19968: 0xCDC6,
	32930 - 19968: 0xF2B6,
	32933 - 19968: 0xDDFE,
	32937 - 19968: 0xCCB7,
	32938 - 19968: 0xDBB8,
	32943 - 19968: 0xD0E9,
	32945 - 19968: 0xCEDD,
	32946 - 19968: 0xEBC0,
	32948 - 19968: 0xFDA2,
	32954 - 19968: 0xF8CB,
	32963 - 19968: 0xEAD6,
	32964 - 19968: 0xF1B0,
	32972 - 19968: 0xDBCE,
	32974 - 19968: 0xF7C3,
	32986 - 19968: 0xDBCF,
	32987 - 19968: 0xCBA4,
	32990 - 19968: 0xF8E0,
	32993 - 19968: 0xFBD7,
	32996 - 19968: 0xEBCA,
	32997 - 19968: 0xE0A1,
	33009 - 19968: 0xCECD,
	33012 - 19968: 0xD4DC,
	33016 - 19968: 0xFDD8,
	33021 - 19968: 0xD2F6,
	33026 - 19968: 0xF2B7,
	33029 - 19968: 0xFAF6,
	33030 - 19968: 0xF6AA,
	33031 - 19968: 0xFAF7,
	33032 - 19968: 0xD8E6,
	33034 - 19968: 0xF4B1,
	33048 - 19968: 0xE8D2,
	33050 - 19968: 0xCAC5,
	33051 - 19968: 0xCCEB,
	33059 - 19968: 0xE2EE,
	33065 - 19968: 0xE2BB,
	33067 - 19968: 0xF7AD,
	33071 - 19968: 0xF8E1,
	33081 - 19968: 0xF3EC,
	33086 - 19968: 0xDEA1,
	33099 - 19968: 0xE4FD,
	33102 - 19968: 0xE3EC,
	33104 - 19968: 0xDDAF,
	33105 - 19968: 0xDDB0,
	33108 - 19968: 0xCBB7,
	33109 - 19968: 0xE8D3,
	33125 - 19968: 0xE1A3,
	33126 - 19968: 0xD2E0,
	33131 - 19968: 0xF0FE,
	33136 - 19968: 0xE9A6,
	33137 - 19968: 0xCBF2,
	33144 - 19968: 0xEDF3,
	33145 - 19968: 0xDCD9,
	33146 - 19968: 0xE0CD,
	33151 - 19968: 0xF7DA,
	33152 - 19968: 0xDBB9,
	33160 - 19968: 0xCCAE,
	33162 - 19968: 0xDADB,
	33167 - 19968: 0xCDC7,
	33178 - 19968: 0xDDB1,
	33180 - 19968: 0xD8AF,
	33181 - 19968: 0xE3A3,
	33184 - 19968: 0xCEEF,
	33187 - 19968: 0xF2F3,
	33192 - 19968: 0xF8B3,
	33203 - 19968: 0xE0CE,
	33205 - 19968: 0xF5FD,
	33210 - 19968: 0xEBEC,
	33213 - 19968: 0xD3C5,
	33214 - 19968: 0xFCEC,
	33215 - 19968: 0xD2DB,
	33216 - 19968: 0xD4EB,
	33218 - 19968: 0xDEA2,
	33222 - 19968: 0xE5E6,
	33229 - 19968: 0xF0B0,
	33240 - 19968: 0xD5C4,
	33247 - 19968: 0xEDF4,
	33251 - 19968: 0xE3ED,
	33253 - 19968: 0xE8C2,
	33255 - 19968: 0xEDF5,
	33256 - 19968: 0xD7FC,
	33258 - 19968: 0xEDBB,
	33261 - 19968: 0xF6AB,
	33267 - 19968: 0xF2B8,
	33268 - 19968: 0xF6C8,
	33274 - 19968: 0xD3E6,
	33275 - 19968: 0xF2DD,
	33276 - 19968: 0xCFBF,
	33278 - 19968: 0xEBAC,
	33285 - 19968: 0xCFC0,
	33287 - 19968: 0xE6A8,
	33288 - 19968: 0xFDE9,
	33290 - 19968: 0xCFC1,
	33292 - 19968: 0xE0DF,
	33293 - 19968: 0xDEEC,
	33298 - 19968: 0xE0A2,
	33307 - 19968: 0xF4BF,
	33308 - 19968: 0xE2EF,
	33310 - 19968: 0xD9F1,
	33311 - 19968: 0xF1C7,
	33313 - 19968: 0xCBB8,
	33322 - 19968: 0xF9FE,
	33323 - 19968: 0xDBBA,
	33324 - 19968: 0xDAF5,
	33333 - 19968: 0xF6EC,
	33334 - 19968: 0xDADC,
	33335 - 19968: 0xFAE4,
	33337 - 19968: 0xE0CF,
	33344 - 19968: 0xDDB2,
	33349 - 19968: 0xE6A9,
	33351 - 19968: 0xEFF3,
	33369 - 19968: 0xF3ED,
	33380 - 19968: 0xEBFA,
	33382 - 19968: 0xF9E6,
	33390 - 19968: 0xCADD,
	33391 - 19968: 0xD5DE,
	33393 - 19968: 0xCADE,
	33394 - 19968: 0xDFE4,
	33398 - 19968: 0xE6FD,
	33400 - 19968: 0xF5AC,
	33406 - 19968: 0xE4F5,
	33419 - 19968: 0xE9E3,
	33421 - 19968: 0xEDCB,
	33422 - 19968: 0xCFE4,
	33426 - 19968: 0xD8D3,
	33433 - 19968: 0xDDB3,
	33434 - 19968: 0xD4EC,
	33437 - 19968: 0xF2B9,
	33439 - 19968: 0xDFB7,
	33445 - 19968: 0xCBCE,
	33446 - 19968: 0xFBD8,
	33449 - 19968: 0xD0D9,
	33452 - 19968: 0xDDD2,
	33453 - 19968: 0xF7F4,
	33454 - 19968: 0xE7DC,
	33455 - 19968: 0xE4A5,
	33457 - 19968: 0xFCA3,
	33459 - 19968: 0xDBBB,
	33463 - 19968: 0xF2BA,
	33464 - 19968: 0xE9FD,
	33465 - 19968: 0xD0CA,
	33467 - 19968: 0xF5D6,
	33468 - 19968: 0xD9C5,
	33469 - 19968: 0xE4B4,
	33471 - 19968: 0xEDA7,
	33489 - 19968: 0xEABD,
	33490 - 19968: 0xE6FE,
	33492 - 19968: 0xF7C4,
	33493 - 19968: 0xF5AD,
	33495 - 19968: 0xD9E0,
	33499 - 19968: 0xCAB4,
	33502 - 19968: 0xF8E2,
	33503 - 19968: 0xCFC2,
	33505 - 19968: 0xECBE,
	33509 - 19968: 0xE5B4,
	33510 - 19968: 0xCDC8,
	33511 - 19968: 0xEEC8,
	33521 - 19968: 0xE7C8,
	33533 - 19968: 0xCDC9,
	33534 - 19968: 0xF9B7,
	33537 - 19968: 0xF1E8,
	33538 - 19968: 0xD9F2,
	33539 - 19968: 0xDBF5,
	33540 - 19968: 0xCAB5,
	33541 - 19968: 0xD9C6,
	33545 - 19968: 0xD8C9,
	33559 - 19968: 0xD9AB,
	33576 - 19968: 0xEDBC,
	33579 - 19968: 0xD8D4,
	33583 - 19968: 0xDCDA,
	33585 - 19968: 0xE2BC,
	33588 - 19968: 0xFCED,
	33589 - 19968: 0xECE0,
	33590 - 19968: 0xD2FE,
	33592 - 19968: 0xE9C7,
	33593 - 19968: 0xE6AA,
	33600 - 19968: 0xE2F0,
	33607 - 19968: 0xFABB,
	33609 - 19968: 0xF5AE,
	33610 - 19968: 0xFBAA,
	33615 - 19968: 0xECFB,
	33617 - 19968: 0xECBF,
	33618 - 19968: 0xFCD8,
	33651 - 19968: 0xD4E5,
	33655 - 19968: 0xF9C3,
	33659 - 19968: 0xEEE2,
	33673 - 19968: 0xD7E9,
	33674 - 19968: 0xEDF6,
	33678 - 19968: 0xDEED,
	33686 - 19968: 0xCCEC,
	33688 - 19968: 0xE3EE,
	33694 - 19968: 0xE8D4,
	33698 - 19968: 0xFAF8,
	33705 - 19968: 0xDDB4,
	33706 - 19968: 0xE4B5,
	33707 - 19968: 0xD8B0,
	33725 - 19968: 0xD8D5,
	33729 - 19968: 0xF4EA,
	33733 - 19968: 0xCEB9,
	33737 - 19968: 0xD6E1,
	33738 - 19968: 0xCFD2,
	33740 - 19968: 0xD0B6,
	33747 - 19968: 0xCEA2,
	33750 - 19968: 0xF3EE,
	33756 - 19968: 0xF3F8,
	33769 - 19968: 0xDCCC,
	33771 - 19968: 0xD0CB,
	33775 - 19968: 0xFCA4,
	33776 - 19968: 0xCDCA,
	33777 - 19968: 0xD7D4,
	33778 - 19968: 0xDEA3,
	33780 - 19968: 0xE4E0,
	33785 - 19968: 0xEEC9,
	33789 - 19968: 0xE2DD,
	33795 - 19968: 0xF5FE,
	33796 - 19968: 0xD4AC,
	33802 - 19968: 0xD5D1,
	33804 - 19968: 0xD8F0,
	33805 - 19968: 0xF8C3,
	33806 - 19968: 0xEAD7,
	33833 - 19968: 0xF5D7,
	33836 - 19968: 0xD8BF,
	33841 - 19968: 0xFDC0,
	33848 - 19968: 0xEBAD,
	33853 - 19968: 0xD5AA,
	33865 - 19968: 0xE7A8,
	33879 - 19968: 0xEECA,
	33883 - 19968: 0xCAE7,
	33889 - 19968: 0xF8E3,
	33891 - 19968: 0xD4DD,
	33894 - 19968: 0xEAD8,
	33899 - 19968: 0xFBD9,
	33900 - 19968: 0xEDF7,
	33903 - 19968: 0xE5B5,
	33909 - 19968: 0xD0AD,
	33914 - 19968: 0xF1F1,
	33936 - 19968: 0xE2BD,
	33940 - 19968: 0xE3C8,
	33945 - 19968: 0xD9D5,
	33948 - 19968: 0xDFAA,
	33953 - 19968: 0xDBBC,
	33970 - 19968: 0xF8E4,
	33976 - 19968: 0xF1FA,
	33979 - 19968: 0xE5B6,
	33980 - 19968: 0xF3EF,
	33983 - 19968: 0xFBDA,
	33984 - 19968: 0xE1E0,
	33986 - 19968: 0xD9AC,
	33988 - 19968: 0xF5EB,
	33990 - 19968: 0xE0B6,
	33993 - 19968: 0xE9C8,
	33995 - 19968: 0xCBCF,
	33997 - 19968: 0xE3C9,
	34001 - 19968: 0xDEEE,
	34010 - 19968: 0xE2BE,
	34028 - 19968: 0xDCEF,
	34030 - 19968: 0xD6A5,
	34036 - 19968: 0xE2F1,
	34044 - 19968: 0xD6FE,
	34065 - 19968: 0xD9A1,
	34067 - 19968: 0xD8C0,
	34068 - 19968: 0xDCDB,
	34071 - 19968: 0xEDBD,
	34072 - 19968: 0xDFB8,
	34074 - 19968: 0xEAA5,
	34078 - 19968: 0xD7AD,
	34081 - 19968: 0xF3F9,
	34083 - 19968: 0xEDF8,
	34085 - 19968: 0xF5C7,
	34092 - 19968: 0xE1CA,
	34093 - 19968: 0xEBE3,
	34095 - 19968: 0xF2DE,
	34109 - 19968: 0xF8CC,
	34111 - 19968: 0xEAD9,
	34113 - 19968: 0xD3C6,
	34115 - 19968: 0xDBE6,
	34121 - 19968: 0xF5AF,
	34126 - 19968: 0xCEF0,
	34131 - 19968: 0xE9FE,
	34137 - 19968: 0xFBB6,
	34147 - 19968: 0xE2F2,
	34152 - 19968: 0xCFF2,
	34153 - 19968: 0xF7B9,
	34154 - 19968: 0xD9F3,
	34157 - 19968: 0xE1CB,
	34180 - 19968: 0xDADD,
	34183 - 19968: 0xDAB9,
	34191 - 19968: 0xEBFB,
	34193 - 19968: 0xCBB9,
	34196 - 19968: 0xEDF9,
	34203 - 19968: 0xE0E0,
	34214 - 19968: 0xF4C0,
	34216 - 19968: 0xFDBC,
	34217 - 19968: 0xDFB1,
	34218 - 19968: 0xE3EF,
	34223 - 19968: 0xE0A3,
	34224 - 19968: 0xFDB9,
	34234 - 19968: 0xF0B1,
	34241 - 19968: 0xCDCB,
	34249 - 19968: 0xEDBE,
	34253 - 19968: 0xD5C0,
	34254 - 19968: 0xE3F0,
	34255 - 19968: 0xEDFA,
	34261 - 19968: 0xE9E4,
	34268 - 19968: 0xD5ED,
	34269 - 19968: 0xE7DD,
	34276 - 19968: 0xD4F6,
	34277 - 19968: 0xE5B7,
	34281 - 19968: 0xDBE7,
	34282 - 19968: 0xE2BF,
	34295 - 19968: 0xEECB,
	34298 - 19968: 0xD7F4,
	34299 - 19968: 0xF0DD,
	34303 - 19968: 0xCEAB,
	34306 - 19968: 0xE7DE,
	34310 - 19968: 0xD6D6,
	34311 - 19968: 0xE1CC,
	34314 - 19968: 0xE8B3,
	34326 - 19968: 0xE5EE,
	34327 - 19968: 0xDCA2,
	34330 - 19968: 0xE0D0,
	34349 - 19968: 0xD5B5,
	34367 - 19968: 0xD5A1,
	34382 - 19968: 0xFBDB,
	34384 - 19968: 0xF9CB,
	34388 - 19968: 0xCBF3,
	34389 - 19968: 0xF4A5,
	34395 - 19968: 0xFAC8,
	34396 - 19968: 0xD6D7,
	34398 - 19968: 0xE9E5,
	34399 - 19968: 0xFBDC,
	34407 - 19968: 0xFDD0,
	34425 - 19968: 0xFBF6,
	34442 - 19968: 0xDAA5,
	34444 - 19968: 0xDBBD,
	34451 - 19968: 0xECE2,
	34467 - 19968: 0xCDF7,
	34468 - 19968: 0xF0DE,
	34473 - 19968: 0xF6C9,
	34503 - 19968: 0xDEEF,
	34507 - 19968: 0xD3B1,
	34516 - 19968: 0xFCEE,
	34521 - 19968: 0xE8C3,
	34523 - 19968: 0xF1C8,
	34527 - 19968: 0xCEF1,
	34532 - 19968: 0xF9ED,
	34541 - 19968: 0xF2F4,
	34558 - 19968: 0xE4B6,
	34560 - 19968: 0xF5B9,
	34562 - 19968: 0xDCF0,
	34563 - 19968: 0xE3F1,
	34568 - 19968: 0xE8A5,
	34584 - 19968: 0xF2BB,
	34586 - 19968: 0xDEA4,
	34588 - 19968: 0xDACC,
	34638 - 19968: 0xCAE9,
	34645 - 19968: 0xE3DA,
	34647 - 19968: 0xFCD9,
	34655 - 19968: 0xEADA,
	34662 - 19968: 0xF9C4,
	34664 - 19968: 0xE3A4,
	34676 - 19968: 0xFBDD,
	34678 - 19968: 0xEFCA,
	34680 - 19968: 0xE8C4,
	34690 - 19968: 0xD5CC,
	34701 - 19968: 0xEBD7,
	34719 - 19968: 0xD9AD,
	34722 - 19968: 0xFBAB,
	34739 - 19968: 0xD3D9,
	34746 - 19968: 0xD5A2,
	34756 - 19968: 0xF6DE,
	34784 - 19968: 0xDAF6,
	34796 - 19968: 0xE0D1,
	34799 - 19968: 0xE9A8,
	34802 - 19968: 0xF5F9,
	34809 - 19968: 0xFAAF,
	34811 - 19968: 0xEBFC,
	34814 - 19968: 0xE0EA,
	34821 - 19968: 0xE3B2,
	34847 - 19968: 0xD5C5,
	34850 - 19968: 0xF1E3,
	34851 - 19968: 0xD5EE,
	34865 - 19968: 0xCDCC,
	34870 - 19968: 0xEDD9,
	34875 - 19968: 0xD8C1,
	34880 - 19968: 0xFAEC,
	34886 - 19968: 0xF1EB,
	34892 - 19968: 0xFABC,
	34893 - 19968: 0xE6E2,
	34898 - 19968: 0xFAE5,
	34899 - 19968: 0xE2FA,
	34903 - 19968: 0xCAB6,
	34905 - 19968: 0xE4B7,
	34907 - 19968: 0xEADB,
	34909 - 19968: 0xF5FA,
	34913 - 19968: 0xFBAC,
	34914 - 19968: 0xCFC3,
	34915 - 19968: 0xEBFD,
	34920 - 19968: 0xF8FA,
	34923 - 19968: 0xDFB9,
	34928 - 19968: 0xE1F1,
	34930 - 19968: 0xD2A4,
	34935 - 19968: 0xF5FB,
	34942 - 19968: 0xD0DA,
	34943 - 19968: 0xD0DB,
	34945 - 19968: 0xEABE,
	34946 - 19968: 0xD9B1,
	34952 - 19968: 0xCAB7,
	34955 - 19968: 0xD3E7,
	34957 - 19968: 0xF8E5,
	34962 - 19968: 0xD3B2,
	34966 - 19968: 0xE2C0,
	34967 - 19968: 0xF2DF,
	34974 - 19968: 0xCDE5,
	34987 - 19968: 0xF9AC,
	34996 - 19968: 0xCDCD,
	35009 - 19968: 0xEEAE,
	35010 - 19968: 0xD6AE,
	35023 - 19968: 0xD7EA,
	35028 - 19968: 0xE7E0,
	35029 - 19968: 0xEBAE,
	35033 - 19968: 0xCFD9,
	35036 - 19968: 0xDCCD,
	35037 - 19968: 0xEDFB,
	35039 - 19968: 0xDEF0,
	35041 - 19968: 0xD7EB,
	35048 - 19968: 0xDEA5,
	35059 - 19968: 0xDFD7,
	35060 - 19968: 0xDBD0,
	35061 - 19968: 0xDBD1,
	35064 - 19968: 0xD5A3,
	35069 - 19968: 0xF0B2,
	35079 - 19968: 0xDCDC,
	35088 - 19968: 0xCAE8,
	35090 - 19968: 0xF8E6,
	35091 - 19968: 0xDCCE,
	35096 - 19968: 0xEADC,
	35097 - 19968: 0xDBD2,
	35109 - 19968: 0xE9B3,
	35114 - 19968: 0xF7DB,
	35126 - 19968: 0xE3A8,
	35128 - 19968: 0xD7AE,
	35131 - 19968: 0xE0E1,
	35137 - 19968: 0xCBBA,
	35140 - 19968: 0xE5D1,
	35167 - 19968: 0xD0DC,
	35172 - 19968: 0xD5C1,
	35178 - 19968: 0xD8CA,
	35186 - 19968: 0xE3A9,
	35199 - 19968: 0xE0A4,
	35201 - 19968: 0xE9A9,
	35203 - 19968: 0xD3C7,
	35206 - 19968: 0xDCDD,
	35207 - 19968: 0xF8AE,
	35211 - 19968: 0xCCB8,
	35215 - 19968: 0xD0AE,
	35219 - 19968: 0xD8F2,
	35222 - 19968: 0xE3CA,
	35233 - 19968: 0xCCAF,
	35241 - 19968: 0xD4AD,
	35242 - 19968: 0xF6D1,
	35250 - 19968: 0xD0CC,
	35258 - 19968: 0xCAC6,
	35261 - 19968: 0xD5C2,
	35264 - 19968: 0xCEBA,
	35282 - 19968: 0xCAC7,
	35299 - 19968: 0xFAB0,
	35316 - 19968: 0xDFD8,
	35320 - 19968: 0xF5BA,
	35328 - 19968: 0xE5EB,
	35330 - 19968: 0xEFF4,
	35331 - 19968: 0xDDB5,
	35336 - 19968: 0xCDAA,
	35338 - 19968: 0xE3F2,
	35340 - 19968: 0xFBF7,
	35342 - 19968: 0xF7D0,
	35347 - 19968: 0xFDBA,
	35350 - 19968: 0xFDE1,
	35351 - 19968: 0xF6FE,
	35352 - 19968: 0xD1C0,
	35355 - 19968: 0xE8C5,
	35357 - 19968: 0xE4B8,
	35359 - 19968: 0xE1E8,
	35363 - 19968: 0xCCC1,
	35365 - 19968: 0xD2ED,
	35370 - 19968: 0xDBBE,
	35373 - 19968: 0xE0E2,
	35377 - 19968: 0xFAC9,
	35380 - 19968: 0xE1CD,
	35382 - 19968: 0xCAB8,
	35386 - 19968: 0xF2E0,
	35387 - 19968: 0xF1C9,
	35408 - 19968: 0xDEF1,
	35412 - 19968: 0xF0DF,
	35413 - 19968: 0xF8C4,
	35419 - 19968: 0xEECC,
	35422 - 19968: 0xDEF2,
	35424 - 19968: 0xE7C9,
	35426 - 19968: 0xE2F3,
	35427 - 19968: 0xE7E1,
	35430 - 19968: 0xE3CB,
	35433 - 19968: 0xE3CC,
	35437 - 19968: 0xCFF8,
	35438 - 19968: 0xEFAC,
	35440 - 19968: 0xFDFE,
	35441 - 19968: 0xFCA5,
	35442 - 19968: 0xFAB1,
	35443 - 19968: 0xDFD9,
	35445 - 19968: 0xE0D2,
	35449 - 19968: 0xF4DA,
	35461 - 19968: 0xF1CA,
	35463 - 19968: 0xCEA3,
	35468 - 19968: 0xF2BC,
	35469 - 19968: 0xECE3,
	35475 - 19968: 0xE0A5,
	35477 - 19968: 0xF7AB,
	35480 - 19968: 0xEBAF,
	35486 - 19968: 0xE5DE,
	35488 - 19968: 0xE1A4,
	35489 - 19968: 0xCDAB,
	35491 - 19968: 0xD9F4,
	35492 - 19968: 0xE8A6,
	35493 - 19968: 0xCDCE,
	35494 - 19968: 0xE1E9,
	35496 - 19968: 0xFCEF,
	35498 - 19968: 0xE0E3,
	35504 - 19968: 0xE2C1,
	35506 - 19968: 0xCEA4,
	35513 - 19968: 0xDEA6,
	35516 - 19968: 0xEBFE,
	35518 - 19968: 0xEBDD,
	35519 - 19968: 0xF0E0,
	35522 - 19968: 0xF4DB,
	35524 - 19968: 0xE2F4,
	35527 - 19968: 0xD3C8,
	35531 - 19968: 0xF4EB,
	35533 - 19968: 0xEEB5,
	35535 - 19968: 0xF5D8,
	35538 - 19968: 0xD5DF,
	35542 - 19968: 0xD6E5,
	35547 - 19968: 0xEBB0,
	35548 - 19968: 0xF4E3,
	35553 - 19968: 0xE3CD,
	35558 - 19968: 0xF4F4,
	35559 - 19968: 0xFAB2,
	35562 - 19968: 0xEFF5,
	35563 - 19968: 0xCADF,
	35565 - 19968: 0xEBB1,
	35566 - 19968: 0xEDBF,
	35569 - 19968: 0xFDC9,
	35574 - 19968: 0xE4A6,
	35575 - 19968: 0xF9A4,
	35576 - 19968: 0xF0B3,
	35578 - 19968: 0xE5EC,
	35582 - 19968: 0xD1E7,
	35584 - 19968: 0xD9C7,
	35585 - 19968: 0xE4D7,
	35586 - 19968: 0xEADD,
	35588 - 19968: 0xD4F7,
	35598 - 19968: 0xDABA,
	35600 - 19968: 0xDACD,
	35604 - 19968: 0xF9CC,
	35606 - 19968: 0xE1DA,
	35607 - 19968: 0xDBBF,
	35609 - 19968: 0xCCC5,
	35610 - 19968: 0xECD0,
	35611 - 19968: 0xCBBB,
	35613 - 19968: 0xDEF3,
	35616 - 19968: 0xE9AA,
	35624 - 19968: 0xD9C8,
	35627 - 19968: 0xEEE3,
	35628 - 19968: 0xD7BD,
	35635 - 19968: 0xCFC4,
	35641 - 19968: 0xD0CD,
	35649 - 19968: 0xFCA6,
	35657 - 19968: 0xF1FB,
	35662 - 19968: 0xFDD2,
	35663 - 19968: 0xD1C1,
	35672 - 19968: 0xE3DB,
	35674 - 19968: 0xD3C9,
	35676 - 19968: 0xDCCF,
	35686 - 19968: 0xCCED,
	35692 - 19968: 0xDEA7,
	35695 - 19968: 0xE6BB,
	35696 - 19968: 0xECA1,
	35700 - 19968: 0xCCB9,
	35703 - 19968: 0xFBDE,
	35709 - 19968: 0xE7E2,
	35712 - 19968: 0xD4C1,
	35722 - 19968: 0xDCA8,
	35728 - 19968: 0xE2C2,
	35730 - 19968: 0xF3D8,
	35731 - 19968: 0xE5D3,
	35734 - 19968: 0xF3D9,
	35738 - 19968: 0xF3C6,
	35895 - 19968: 0xCDDB,
	35903 - 19968: 0xCDAC,
	35905 - 19968: 0xFCC3,
	35910 - 19968: 0xD4E7,
	35912 - 19968: 0xD1C2,
	35914 - 19968: 0xF9A5,
	35916 - 19968: 0xE8D5,
	35925 - 19968: 0xE3CE,
	35930 - 19968: 0xD4CA,
	35937 - 19968: 0xDFDA,
	35946 - 19968: 0xFBDF,
	35947 - 19968: 0xE7E3,
	35961 - 19968: 0xF8FB,
	35962 - 19968: 0xE3CF,
	35970 - 19968: 0xF5B0,
	35978 - 19968: 0xD8E7,
	35980 - 19968: 0xD9C9,
	35997 - 19968: 0xF8AF,
	35998 - 19968: 0xEFF6,
	36000 - 19968: 0xDDB6,
	36001 - 19968: 0xEEAF,
	36002 - 19968: 0xCDF8,
	36007 - 19968: 0xDEB8,
	36008 - 19968: 0xFCA7,
	36009 - 19968: 0xF7FC,
	36010 - 19968: 0xF7B1,
	36011 - 19968: 0xCEBB,
	36012 - 19968: 0xF4A1,
	36015 - 19968: 0xEECD,
	36016 - 19968: 0xE1AE,
	36019 - 19968: 0xECC3,
	36020 - 19968: 0xCFFE,
	36022 - 19968: 0xF8BF,
	36023 - 19968: 0xD8E2,
	36024 - 19968: 0xD3E8,
	36027 - 19968: 0xDEA8,
	36028 - 19968: 0xF4E4,
	36029 - 19968: 0xECC2,
	36031 - 19968: 0xD9F5,
	36032 - 19968: 0xF9C5,
	36033 - 19968: 0xDDD3,
	36034 - 19968: 0xD6F1,
	36035 - 19968: 0xECFC,
	36036 - 19968: 0xFCF0,
	36039 - 19968: 0xEDC0,
	36040 - 19968: 0xCAB9,
	36042 - 19968: 0xEEE4,
	36049 - 19968: 0xF2E1,
	36051 - 19968: 0xDEB9,
	36058 - 19968: 0xD6F2,
	36060 - 19968: 0xDEF4,
	36062 - 19968: 0xDFDB,
	36064 - 19968: 0xDBD3,
	36066 - 19968: 0xFAE7,
	36067 - 19968: 0xD8E3,
	36068 - 19968: 0xF4C1,
	36070 - 19968: 0xDDB7,
	36074 - 19968: 0xF2F5,
	36077 - 19968: 0xD4AE,
	36084 - 19968: 0xD6F3,
	36091 - 19968: 0xDDB8,
	36092 - 19968: 0xCFC5,
	36093 - 19968: 0xDFDF,
	36100 - 19968: 0xF2BE,
	36101 - 19968: 0xF6A1,
	36103 - 19968: 0xEBCB,
	36104 - 19968: 0xF1FC,
	36106 - 19968: 0xF3C7,
	36109 - 19968: 0xE0EB,
	36115 - 19968: 0xEDFC,
	36118 - 19968: 0xE1DB,
	36196 - 19968: 0xEEE5,
	36198 - 19968: 0xDEF5,
	36203 - 19968: 0xFAD3,
	36208 - 19968: 0xF1CB,
	36211 - 19968: 0xD0AF,
	36212 - 19968: 0xDDB9,
	36215 - 19968: 0xD1C3,
	36229 - 19968: 0xF5B1,
	36234 - 19968: 0xEAC6,
	36249 - 19968: 0xF0E1,
	36259 - 19968: 0xF6AC,
	36264 - 19968: 0xF5D9,
	36275 - 19968: 0xF0EB,
	36282 - 19968: 0xDDBA,
	36286 - 19968: 0xF2BF,
	36294 - 19968: 0xF7C5,
	36299 - 19968: 0xDBA2,
	36300 - 19968: 0xF2F6,
	36303 - 19968: 0xCABA,
	36315 - 19968: 0xF7F5,
	36317 - 19968: 0xCBE5,
	36321 - 19968: 0xEEE6,
	36323 - 19968: 0xE0D3,
	36328 - 19968: 0xCEA5,
	36335 - 19968: 0xD6D8,
	36339 - 19968: 0xD4AF,
	36362 - 19968: 0xE9C9,
	36367 - 19968: 0xD3CE,
	36368 - 19968: 0xF4C2,
	36382 - 19968: 0xCBE6,
	36394 - 19968: 0xF1A1,
	36400 - 19968: 0xEBB2,
	36405 - 19968: 0xF1A2,
	36418 - 19968: 0xEBB3,
	36420 - 19968: 0xF0B4,
	36423 - 19968: 0xCBF4,
	36424 - 19968: 0xD4B0,
	36425 - 19968: 0xF3B2,
	36426 - 19968: 0xFBB7,
	36441 - 19968: 0xF5EC,
	36447 - 19968: 0xEEE7,
	36448 - 19968: 0xF4B2,
	36468 - 19968: 0xF5ED,
	36470 - 19968: 0xCFF3,
	36481 - 19968: 0xF0E2,
	36487 - 19968: 0xEECE,
	36490 - 19968: 0xF1CC,
	36493 - 19968: 0xE5B8,
	36522 - 19968: 0xD7F5,
	36523 - 19968: 0xE3F3,
	36524 - 19968: 0xCFE5,
	36544 - 19968: 0xCFC6,
	36554 - 19968: 0xF3B3,
	36555 - 19968: 0xE4D8,
	36556 - 19968: 0xCFF9,
	36557 - 19968: 0xCFDA,
	36562 - 19968: 0xFACD,
	36575 - 19968: 0xE6E3,
	36587 - 19968: 0xF2E2,
	36600 - 19968: 0xF5EE,
	36603 - 19968: 0xCABB,
	36606 - 19968: 0xE3DC,
	36611 - 19968: 0xCEF2,
	36613 - 19968: 0xD6D9,
	36617 - 19968: 0xEEB0,
	36626 - 19968: 0xF4E5,
	36627 - 19968: 0xD8C2,
	36628 - 19968: 0xDCD0,
	36629 - 19968: 0xCCEE,
	36635 - 19968: 0xD5E0,
	36636 - 19968: 0xF6CA,
	36637 - 19968: 0xFDCA,
	36638 - 19968: 0xD8D6,
	36639 - 19968: 0xF4CF,
	36646 - 19968: 0xD6A6,
	36647 - 19968: 0xDCBE,
	36649 - 19968: 0xDBD4,
	36650 - 19968: 0xD7C7,
	36655 - 19968: 0xF2FE,
	36659 - 19968: 0xF1CD,
	36664 - 19968: 0xE2C3,
	36665 - 19968: 0xDCDE,
	36667 - 19968: 0xDCDF,
	36670 - 19968: 0xEFAD,
	36671 - 19968: 0xE6AB,
	36676 - 19968: 0xF9DD,
	36677 - 19968: 0xEABF,
	36681 - 19968: 0xEFAE,
	36685 - 19968: 0xF4D0,
	36686 - 19968: 0xCEF3,
	36701 - 19968: 0xE6AC,
	36703 - 19968: 0xCEDE,
	36706 - 19968: 0xD5F9,
	36763 - 19968: 0xE3F4,
	36764 - 19968: 0xCDD0,
	36771 - 19968: 0xD5B8,
	36774 - 19968: 0xF7FD,
	36776 - 19968: 0xDCA9,
	36781 - 19968: 0xDEF6,
	36783 - 19968: 0xDCAA,
	36784 - 19968: 0xF2E3,
	36785 - 19968: 0xE9B4,
	36786 - 19968: 0xD2DC,
	36802 - 19968: 0xE9E6,
	36805 - 19968: 0xE3F6,
	36814 - 19968: 0xE7CA,
	36817 - 19968: 0xD0CE,
	36820 - 19968: 0xDAF7,
	36838 - 19968: 0xCABC,
	36842 - 19968: 0xEEE8,
	36843 - 19968: 0xDADE,
	36845 - 19968: 0xF2F7,
	36848 - 19968: 0xE2FB,
	36850 - 19968: 0xCCA6,
	36855 - 19968: 0xDABB,
	36857 - 19968: 0xEEE9,
	36861 - 19968: 0xF5DA,
	36864 - 19968: 0xF7DC,
	36865 - 19968: 0xE1EA,
	36866 - 19968: 0xCEC1,
	36867 - 19968: 0xD4B1,
	36869 - 19968: 0xFDB1,
	36870 - 19968: 0xE6BD,
	36872 - 19968: 0xFBAD,
	36875 - 19968: 0xF8E7,
	36877 - 19968: 0xE1CE,
	36879 - 19968: 0xF7E2,
	36880 - 19968: 0xF5EF,
	36881 - 19968: 0xCFC7,
	36884 - 19968: 0xD4B2,
	36885 - 19968: 0xCCEF,
	36887 - 19968: 0xD4E8,
	36889 - 19968: 0xEECF,
	36890 - 19968: 0xF7D7,
	36893 - 19968: 0xE0A6,
	36894 - 19968: 0xD6C1,
	36895 - 19968: 0xE1DC,
	36896 - 19968: 0xF0E3,
	36897 - 19968: 0xF1E4,
	36898 - 19968: 0xDCF1,
	36899 - 19968: 0xD6A7,
	36910 - 19968: 0xF4F5,
	36913 - 19968: 0xF1CE,
	36914 - 19968: 0xF2E4,
	36917 - 19968: 0xD0B0,
	36920 - 19968: 0xECEF,
	36924 - 19968: 0xF9BA,
	36926 - 19968: 0xEBB5,
	36929 - 19968: 0xD4ED,
	36930 - 19968: 0xE2C4,
	36935 - 19968: 0xE9E7,
	36938 - 19968: 0xEBB4,
	36939 - 19968: 0xEAA1,
	36941 - 19968: 0xF8BC,
	36942 - 19968: 0xCEA6,
	36944 - 19968: 0xF9C6,
	36945 - 19968: 0xFCDA,
	36947 - 19968: 0xD4B3,
	36948 - 19968: 0xD3B9,
	36949 - 19968: 0xEADE,
	36953 - 19968: 0xE9AB,
	36956 - 19968: 0xE1E1,
	36957 - 19968: 0xD3CF,
	36958 - 19968: 0xF4F6,
	36960 - 19968: 0xEAC0,
	36961 - 19968: 0xE1CF,
	36963 - 19968: 0xCCBA,
	36969 - 19968: 0xEEEA,
	36973 - 19968: 0xF0E4,
	36974 - 19968: 0xF3B4,
	36975 - 19968: 0xD4EE,
	36978 - 19968: 0xF2C0,
	36981 - 19968: 0xF1E5,
	36983 - 19968: 0xF4C3,
	36984 - 19968: 0xE0D4,
	36986 - 19968: 0xEBB6,
	36988 - 19968: 0xD7A1,
	36989 - 19968: 0xCBE8,
	36991 - 19968: 0xF9AD,
	36992 - 19968: 0xE9AD,
	36993 - 19968: 0xD8E4,
	36994 - 19968: 0xFAB3,
	36995 - 19968: 0xE2C5,
	36996 - 19968: 0xFCBD,
	36999 - 19968: 0xECC4,
	37000 - 19968: 0xD8B1,
	37002 - 19968: 0xDCAB,
	37007 - 19968: 0xD5A4,
	37009 - 19968: 0xEBE9,
	37013 - 19968: 0xE8BB,
	37017 - 19968: 0xD8D7,
	37026 - 19968: 0xFBAE,
	37027 - 19968: 0xD1E1,
	37030 - 19968: 0xDBC0,
	37032 - 19968: 0xF5BE,
	37034 - 19968: 0xDEF7,
	37039 - 19968: 0xCAFB,
	37040 - 19968: 0xF7C6,
	37041 - 19968: 0xCFC8,
	37045 - 19968: 0xE1D0,
	37048 - 19968: 0xEED0,
	37057 - 19968: 0xE9F4,
	37066 - 19968: 0xCEF4,
	37086 - 19968: 0xD5CD,
	37089 - 19968: 0xCFDB,
	37096 - 19968: 0xDDBB,
	37101 - 19968: 0xCEAC,
	37109 - 19968: 0xE9E8,
	37117 - 19968: 0xD4B4,
	37122 - 19968: 0xE4C7,
	37138 - 19968: 0xF5DB,
	37141 - 19968: 0xFAC1,
	37145 - 19968: 0xDEA9,
	37159 - 19968: 0xD4F8,
	37165 - 19968: 0xEFF7,
	37170 - 19968: 0xD3B3,
	37193 - 19968: 0xEBB7,
	37194 - 19968: 0xEFF8,
	37195 - 19968: 0xF5DC,
	37196 - 19968: 0xEDCC,
	37197 - 19968: 0xDBD5,
	37198 - 19968: 0xF1CF,
	37202 - 19968: 0xF1D0,
	37218 - 19968: 0xF5B2,
	37225 - 19968: 0xD9AE,
	37226 - 19968: 0xD5AC,
	37228 - 19968: 0xE2C6,
	37237 - 19968: 0xFDA3,
	37239 - 19968: 0xFBE5,
	37240 - 19968: 0xDFAB,
	37255 - 19968: 0xE2F5,
	37257 - 19968: 0xF6AD,
	37259 - 19968: 0xF5B3,
	37261 - 19968: 0xF0B5,
	37266 - 19968: 0xE1A5,
	37276 - 19968: 0xF5DD,
	37291 - 19968: 0xECA2,
	37292 - 19968: 0xEDFD,
	37294 - 19968: 0xF5B4,
	37295 - 19968: 0xFBB8,
	37297 - 19968: 0xDBA3,
	37300 - 19968: 0xD6CA,
	37301 - 19968: 0xCBD9,
	37312 - 19968: 0xE5D4,
	37319 - 19968: 0xF3FA,
	37321 - 19968: 0xEBB8,
	37323 - 19968: 0xE0B7,
	37324 - 19968: 0xD7EC,
	37325 - 19968: 0xF1EC,
	37326 - 19968: 0xE5AF,
	37327 - 19968: 0xD5E1,
	37328 - 19968: 0xD7ED,
	37329 - 19968: 0xD1D1,
	37335 - 19968: 0xE1F2,
	37336 - 19968: 0xEFF9,
	37340 - 19968: 0xDDBC,
	37341 - 19968: 0xF6DC,
	37347 - 19968: 0xF0E5,
	37351 - 19968: 0xF4C4,
	37354 - 19968: 0xE9E9,
	37365 - 19968: 0xF3FB,
	37389 - 19968: 0xD4EF,
	37392 - 19968: 0xCCA2,
	37393 - 19968: 0xF7FE,
	37394 - 19968: 0xDFBC,
	37399 - 19968: 0xEBCD,
	37406 - 19968: 0xD0B7,
	37428 - 19968: 0xD6C2,
	37434 - 19968: 0xE8AD,
	37439 - 19968: 0xEFAF,
	37440 - 19968: 0xCBA5,
	37445 - 19968: 0xCBE9,
	37449 - 19968: 0xFAE8,
	37463 - 19968: 0xCCC6,
	37467 - 19968: 0xE6E7,
	37470 - 19968: 0xEAC7,
	37474 - 19968: 0xDBA4,
	37476 - 19968: 0xCFC9,
	37477 - 19968: 0xE2FC,
	37478 - 19968: 0xEFFA,
	37504 - 19968: 0xEBDE,
	37507 - 19968: 0xF5C8,
	37509 - 19968: 0xD4DE,
	37521 - 19968: 0xE0D5,
	37523 - 19968: 0xEFB0,
	37526 - 19968: 0xE2C7,
	37528 - 19968: 0xD9AF,
	37532 - 19968: 0xF9E7,
	37555 - 19968: 0xE7E5,
	37558 - 19968: 0xCFCA,
	37559 - 19968: 0xE1D1,
	37561 - 19968: 0xE2C8,
	37580 - 19968: 0xEFFB,
	37583 - 19968: 0xFAF9,
	37586 - 19968: 0xDCF2,
	37604 - 19968: 0xE0A7,
	37610 - 19968: 0xF8E8,
	37624 - 19968: 0xCBEA,
	37628 - 19968: 0xCBBC,
	37636 - 19968: 0xD6E2,
	37648 - 19968: 0xF5DE,
	37656 - 19968: 0xF5DF,
	37658 - 19968: 0xEEB6,
	37662 - 19968: 0xE2F6,
	37663 - 19968: 0xD3CA,
	37664 - 19968: 0xEFFC,
	37665 - 19968: 0xD1C4,
	37666 - 19968: 0xEFB1,
	37668 - 19968: 0xD1C5,
	37670 - 19968: 0xD0DE,
	37672 - 19968: 0xD9E1,
	37675 - 19968: 0xE0B8,
	37678 - 19968: 0xCDD1,
	37679 - 19968: 0xF3B9,
	37704 - 19968: 0xE7CC,
	37706 - 19968: 0xD6A8,
	37707 - 19968: 0xCEA7,
	37709 - 19968: 0xD4B5,
	37716 - 19968: 0xE4C8,
	37723 - 19968: 0xD3B4,
	37742 - 19968: 0xEBB9,
	37749 - 19968: 0xCBF5,
	37756 - 19968: 0xF6DD,
	37758 - 19968: 0xF1A3,
	37772 - 19968: 0xCCC7,
	37780 - 19968: 0xE9CA,
	37782 - 19968: 0xE1F0,
	37786 - 19968: 0xF5E0,
	37795 - 19968: 0xFBAF,
	37799 - 19968: 0xCBD1,
	37804 - 19968: 0xFBE0,
	37805 - 19968: 0xF2E5,
	37808 - 19968: 0xECF0,
	37827 - 19968: 0xF0EC,
	37841 - 19968: 0xEEEB,
	37854 - 19968: 0xE9CB,
	37857 - 19968: 0xCCF0,
	37860 - 19968: 0xD7AF,
	37878 - 19968: 0xF3A1,
	37892 - 19968: 0xFCF5,
	37912 - 19968: 0xF1A4,
	37925 - 19968: 0xE0D6,
	37931 - 19968: 0xEFB2,
	37941 - 19968: 0xF4D1,
	37944 - 19968: 0xF7A1,
	37956 - 19968: 0xF1D1,
	37969 - 19968: 0xCAFC,
	37970 - 19968: 0xCAFD,
	37979 - 19968: 0xCECE,
	38013 - 19968: 0xF3C8,
	38015 - 19968: 0xF3BA,
	38263 - 19968: 0xEDFE,
	38272 - 19968: 0xDAA6,
	38275 - 19968: 0xE0EC,
	38281 - 19968: 0xF8CD,
	38283 - 19968: 0xCBD2,
	38287 - 19968: 0xEBCE,
	38289 - 19968: 0xF9D8,
	38290 - 19968: 0xF9D9,
	38291 - 19968: 0xCAE0,
	38292 - 19968: 0xDACA,
	38296 - 19968: 0xCBA6,
	38307 - 19968: 0xCAC8,
	38308 - 19968: 0xF9EE,
	38309 - 19968: 0xDBEC,
	38312 - 19968: 0xD0B1,
	38317 - 19968: 0xD5EF,
	38321 - 19968: 0xE6F3,
	38331 - 19968: 0xE7A2,
	38332 - 19968: 0xE4D9,
	38343 - 19968: 0xE4E1,
	38346 - 19968: 0xFCC4,
	38356 - 19968: 0xF9EF,
	38357 - 19968: 0xCFF4,
	38358 - 19968: 0xF7E6,
	38364 - 19968: 0xCEBC,
	38369 - 19968: 0xF4C5,
	38370 - 19968: 0xDCA3,
	38428 - 19968: 0xDDBD,
	38433 - 19968: 0xF4C6,
	38442 - 19968: 0xF8A1,
	38446 - 19968: 0xE8D6,
	38450 - 19968: 0xDBC1,
	38459 - 19968: 0xF0E6,
	38463 - 19968: 0xE4B9,
	38464 - 19968: 0xF6ED,
	38466 - 19968: 0xF9AE,
	38468 - 19968: 0xDDBE,
	38475 - 19968: 0xD7B0,
	38476 - 19968: 0xD8E8,
	38477 - 19968: 0xCBBD,
	38480 - 19968: 0xF9DA,
	38491 - 19968: 0xF8CE,
	38492 - 19968: 0xF9F0,
	38493 - 19968: 0xE0ED,
	38494 - 19968: 0xE3B3,
	38495 - 19968: 0xF4B3,
	38498 - 19968: 0xEAC2,
	38499 - 19968: 0xF2E6,
	38500 - 19968: 0xF0B6,
	38506 - 19968: 0xDBD6,
	38512 - 19968: 0xEBE4,
	38515 - 19968: 0xF2E7,
	38517 - 19968: 0xD7D5,
	38518 - 19968: 0xD4B6,
	38519 - 19968: 0xF9E8,
	38520 - 19968: 0xD7C1,
	38525 - 19968: 0xE5D5,
	38533 - 19968: 0xE9EA,
	38534 - 19968: 0xD7CC,
	38538 - 19968: 0xD3E9,
	38539 - 19968: 0xE2C9,
	38541 - 19968: 0xFCDB,
	38542 - 19968: 0xCDAD,
	38548 - 19968: 0xCCB0,
	38549 - 19968: 0xEAA2,
	38552 - 19968: 0xE4F6,
	38553 - 19968: 0xD0C0,
	38555 - 19968: 0xF0B7,
	38556 - 19968: 0xEEA1,
	38563 - 19968: 0xD7F6,
	38567 - 19968: 0xE2CA,
	38568 - 19968: 0xE2CB,
	38570 - 19968: 0xFACF,
	38577 - 19968: 0xEBDF,
	38583 - 19968: 0xD6CB,
	38587 - 19968: 0xF4B4,
	38592 - 19968: 0xEDCD,
	38593 - 19968: 0xE4D2,
	38596 - 19968: 0xEAA9,
	38597 - 19968: 0xE4BA,
	38598 - 19968: 0xF3A2,
	38599 - 19968: 0xCDD2,
	38601 - 19968: 0xF6CB,
	38603 - 19968: 0xF1E6,
	38604 - 19968: 0xEDC1,
	38605 - 19968: 0xE8BC,
	38606 - 19968: 0xEED1,
	38613 - 19968: 0xF0E7,
	38614 - 19968: 0xE2CC,
	38617 - 19968: 0xE4AA,
	38619 - 19968: 0xF5E1,
	38620 - 19968: 0xEDDA,
	38626 - 19968: 0xD7EE,
	38627 - 19968: 0xD1F1,
	38632 - 19968: 0xE9EB,
	38633 - 19968: 0xE9EC,
	38634 - 19968: 0xE0E4,
	38639 - 19968: 0xDAA7,
	38640 - 19968: 0xDDD4,
	38642 - 19968: 0xEAA3,
	38646 - 19968: 0xD6C3,
	38647 - 19968: 0xD6F4,
	38649 - 19968: 0xDADF,
	38651 - 19968: 0xEFB3,
	38656 - 19968: 0xE2CD,
	38662 - 19968: 0xEFFD,
	38663 - 19968: 0xF2E8,
	38673 - 19968: 0xEFC5,
	38675 - 19968: 0xE7E7,
	38678 - 19968: 0xD7FD,
	38681 - 19968: 0xE7CE,
	38684 - 19968: 0xDFDC,
	38686 - 19968: 0xF9C7,
	38695 - 19968: 0xD9F6,
	38704 - 19968: 0xDFAC,
	38706 - 19968: 0xD6DA,
	38713 - 19968: 0xDCA4,
	38717 - 19968: 0xF0B8,
	38722 - 19968: 0xD5FA,
	38724 - 19968: 0xE4F7,
	38728 - 19968: 0xD6C4,
	38737 - 19968: 0xF4EC,
	38742 - 19968: 0xEFFE,
	38748 - 19968: 0xF0A1,
	38750 - 19968: 0xDEAA,
	38753 - 19968: 0xDABC,
	38754 - 19968: 0xD8FC,
	38761 - 19968: 0xFAD4,
	38765 - 19968: 0xECE5,
	38772 - 19968: 0xFCA8,
	38775 - 19968: 0xECE6,
	38778 - 19968: 0xD8CB,
	38795 - 19968: 0xFBB9,
	38797 - 19968: 0xE4D3,
	38799 - 19968: 0xCDF9,
	38816 - 19968: 0xCFD3,
	38824 - 19968: 0xCAEA,
	38827 - 19968: 0xCFD4,
	38829 - 19968: 0xF8BD,
	38854 - 19968: 0xF4C7,
	38859 - 19968: 0xEADF,
	38867 - 19968: 0xF9DB,
	38876 - 19968: 0xD4B7,
	38899 - 19968: 0xEBE5,
	38902 - 19968: 0xE1D2,
	38907 - 19968: 0xEAA4,
	38911 - 19968: 0xFAC2,
	38912 - 19968: 0xFBE1,
	38913 - 19968: 0xFAED,
	38914 - 19968: 0xF0A2,
	38915 - 19968: 0xCCF1,
	38917 - 19968: 0xFAA3,
	38918 - 19968: 0xE2F7,
	38920 - 19968: 0xE2CE,
	38922 - 19968: 0xE9F5,
	38924 - 19968: 0xE1EB,
	38928 - 19968: 0xE7E8,
	38929 - 19968: 0xE8D7,
	38930 - 19968: 0xDAF8,
	38931 - 19968: 0xD4CB,
	38935 - 19968: 0xF7F6,
	38936 - 19968: 0xD6C5,
	38957 - 19968: 0xD4E9,
	38960 - 19968: 0xFAFA,
	38968 - 19968: 0xCCF2,
	38969 - 19968: 0xF7DD,
	38971 - 19968: 0xDEBA,
	38982 - 19968: 0xCEA8,
	38988 - 19968: 0xF0B9,
	38989 - 19968: 0xE4FE,
	38990 - 19968: 0xE4C9,
	38996 - 19968: 0xE4D4,
	39000 - 19968: 0xEAC3,
	39002 - 19968: 0xEFB4,
	39006 - 19968: 0xD7BE,
	39013 - 19968: 0xFBE2,
	39015 - 19968: 0xCDD3,
	39019 - 19968: 0xEFB5,
	39023 - 19968: 0xFAE9,
	39080 - 19968: 0xF9A6,
	39087 - 19968: 0xDFBD,
	39089 - 19968: 0xF7C7,
	39108 - 19968: 0xF8FD,
	39111 - 19968: 0xF8FC,
	39131 - 19968: 0xDEAB,
	39132 - 19968: 0xDBE8,
	39135 - 19968: 0xE3DD,
	39137 - 19968: 0xE1E2,
	39138 - 19968: 0xD1C6,
	39149 - 19968: 0xF6D0,
	39150 - 19968: 0xEBE6,
	39151 - 19968: 0xDAF9,
	39156 - 19968: 0xECC7,
	39164 - 19968: 0xDEF8,
	39165 - 19968: 0xF8E9,
	39166 - 19968: 0xE3DE,
	39171 - 19968: 0xCEF5,
	39177 - 19968: 0xFAC3,
	39178 - 19968: 0xE5D7,
	39180 - 19968: 0xECC8,
	39184 - 19968: 0xF3C9,
	39187 - 19968: 0xE4BB,
	39192 - 19968: 0xE6AE,
	39198 - 19968: 0xEFB6,
	39200 - 19968: 0xDCBF,
	39208 - 19968: 0xCEBD,
	39237 - 19968: 0xD8C3,
	39241 - 19968: 0xD0CF,
	39243 - 19968: 0xCFFA,
	39244 - 19968: 0xF3CA,
	39245 - 19968: 0xE0D7,
	39249 - 19968: 0xD1C7,
	39250 - 19968: 0xE9AE,
	39252 - 19968: 0xE8BD,
	39255 - 19968: 0xFAC4,
	39318 - 19968: 0xE2CF,
	39321 - 19968: 0xFAC5,
	39325 - 19968: 0xF9B8,
	39333 - 19968: 0xDCE0,
	39336 - 19968: 0xFBB0,
	39340 - 19968: 0xD8A9,
	39341 - 19968: 0xE5DF,
	39342 - 19968: 0xF9A7,
	39345 - 19968: 0xF6EE,
	39347 - 19968: 0xF6CC,
	39348 - 19968: 0xE2F8,
	39353 - 19968: 0xECF1,
	39361 - 19968: 0xDAE0,
	39376 - 19968: 0xF1D2,
	39377 - 19968: 0xD2CC,
	39378 - 19968: 0xCFCB,
	39381 - 19968: 0xCABD,
	39385 - 19968: 0xDDBF,
	39389 - 19968: 0xF6EF,
	39391 - 19968: 0xDEF9,
	39405 - 19968: 0xFAB4,
	39409 - 19968: 0xD5AD,
	39423 - 19968: 0xF1E7,
	39425 - 19968: 0xDEBE,
	39432 - 19968: 0xDCC0,
	39438 - 19968: 0xD1C8,
	39439 - 19968: 0xD1C9,
	39449 - 19968: 0xF8BE,
	39467 - 19968: 0xCBF6,
	39472 - 19968: 0xD4F9,
	39478 - 19968: 0xF5E2,
	39479 - 19968: 0xE1D3,
	39488 - 19968: 0xD8E9,
	39491 - 19968: 0xF8FE,
	39493 - 19968: 0xCFCC,
	39501 - 19968: 0xFDA4,
	39509 - 19968: 0xCEF6,
	39511 - 19968: 0xFAD0,
	39514 - 19968: 0xCCF3,
	39515 - 19968: 0xE6BE,
	39519 - 19968: 0xF6AE,
	39522 - 19968: 0xD5F0,
	39525 - 19968: 0xD1CA,
	39529 - 19968: 0xFCBE,
	39530 - 19968: 0xD5F1,
	39592 - 19968: 0xCDE9,
	39608 - 19968: 0xFAB5,
	39635 - 19968: 0xE2D0,
	39636 - 19968: 0xF4F7,
	39640 - 19968: 0xCDD4,
	39653 - 19968: 0xE7A3,
	39662 - 19968: 0xDBA5,
	39706 - 19968: 0xE2D1,
	39719 - 19968: 0xD7A2,
	39722 - 19968: 0xF7E3,
	39729 - 19968: 0xEAA6,
	39740 - 19968: 0xD0A1,
	39745 - 19968: 0xCEDA,
	39746 - 19968: 0xFBEB,
	39747 - 19968: 0xDBA6,
	39748 - 19968: 0xDBDE,
	39749 - 19968: 0xD8E5,
	39759 - 19968: 0xEAE0,
	39764 - 19968: 0xD8AA,
	39770 - 19968: 0xE5E0,
	39791 - 19968: 0xD6DB,
	39822 - 19968: 0xEFC6,
	39825 - 19968: 0xF8EA,
	39839 - 19968: 0xE4D5,
	39851 - 19968: 0xCEF7,
	39854 - 19968: 0xE0D8,
	39881 - 19968: 0xD7EF,
	39894 - 19968: 0xF4ED,
	39908 - 19968: 0xCDE6,
	39912 - 19968: 0xCCF4,
	39949 - 19968: 0xF5E3,
	39952 - 19968: 0xE4CA,
	39954 - 19968: 0xDCE1,
	39957 - 19968: 0xF9C8,
	39973 - 19968: 0xFCBF,
	39986 - 19968: 0xE8A7,
	39995 - 19968: 0xD8C4,
	40007 - 19968: 0xCBBE,
	40009 - 19968: 0xDCAE,
	40023 - 19968: 0xD7F7,
	40165 - 19968: 0xF0E8,
	40167 - 19968: 0xDDC0,
	40169 - 19968: 0xCFCD,
	40179 - 19968: 0xDCF3,
	40180 - 19968: 0xD9B0,
	40182 - 19968: 0xE6E9,
	40201 - 19968: 0xE4BC,
	40219 - 19968: 0xEAC4,
	40230 - 19968: 0xE4EC,
	40232 - 19968: 0xE4E5,
	40251 - 19968: 0xFBF8,
	40273 - 19968: 0xCCBB,
	40285 - 19968: 0xE4BD,
	40288 - 19968: 0xCDDC,
	40289 - 19968: 0xD9F7,
	40300 - 19968: 0xDDDF,
	40306 - 19968: 0xEDCE,
	40361 - 19968: 0xD9D0,
	40367 - 19968: 0xE5A3,
	40372 - 19968: 0xF9CD,
	40388 - 19968: 0xCDAE,
	40407 - 19968: 0xCFCE,
	40434 - 19968: 0xF6AF,
	40440 - 19968: 0xFDD3,
	40441 - 19968: 0xEBED,
	40442 - 19968: 0xD6DC,
	40474 - 19968: 0xE5A4,
	40478 - 19968: 0xD5B6,
	40565 - 19968: 0xD6DD,
	40569 - 19968: 0xF9E9,
	40573 - 19968: 0xE7A4,
	40575 - 19968: 0xD6E3,
	40594 - 19968: 0xD1CB,
	40595 - 19968: 0xD6E4,
	40599 - 19968: 0xD5F2,
	40605 - 19968: 0xDEFA,
	40607 - 19968: 0xD7F8,
	40613 - 19968: 0xD8EA,
	40628 - 19968: 0xCFD5,
	40629 - 19968: 0xD8FD,
	40635 - 19968: 0xD8AB,
	40638 - 19968: 0xFDCB,
	40643 - 19968: 0xFCDC,
	40653 - 19968: 0xE0A8,
	40654 - 19968: 0xD5F3,
	40657 - 19968: 0xFDD9,
	40660 - 19968: 0xCCA3,
	40664 - 19968: 0xD9F9,
	40667 - 19968: 0xD3EA,
	40668 - 19968: 0xF5F5,
	40670 - 19968: 0xEFC7,
	40680 - 19968: 0xD3DA,
	40692 - 19968: 0xDABD,
	40711 - 19968: 0xE8A8,
	40712 - 19968: 0xDCAF,
	40718 - 19968: 0xF0A3,
	40723 - 19968: 0xCDD5,
	40736 - 19968: 0xE0A9,
	40763 - 19968: 0xDEAC,
	40778 - 19968: 0xF0BA,
	40779 - 19968: 0xEEB1,
	40782 - 19968: 0xEEB2,
	40786 - 19968: 0xF6CD,
	40799 - 19968: 0xEED2,
	40801 - 19968: 0xD6C6,
	40807 - 19968: 0xE0E5,
	40810 - 19968: 0xF3BB,
	40812 - 19968: 0xE5E1,
	40823 - 19968: 0xE4CB,
	40845 - 19968: 0xD7A3,
	40848 - 19968: 0xDBC2,
	40853 - 19968: 0xCAFE,
	40860 - 19968: 0xCFCF,
}

const encode1Low, encode1High = 44032, 55204

var encode1 = [...]uint16{
	44032 - 44032: 0xB0A1,
	44033 - 44032: 0xB0A2,
	44034 - 44032: 0x8141,
	44035 - 44032: 0x8142,
	44036 - 44032: 0xB0A3,
	44037 - 44032: 0x8143,
	44038 - 44032: 0x8144,
	44039 - 44032: 0xB0A4,
	44040 - 44032: 0xB0A5,
	44041 - 44032: 0xB0A6,
	44042 - 44032: 0xB0A7,
	44043 - 44032: 0x8145,
	44044 - 44032: 0x8146,
	44045 - 44032: 0x8147,
	44046 - 44032: 0x8148,
	44047 - 44032: 0x8149,
	44048 - 44032: 0xB0A8,
	44049 - 44032: 0xB0A9,
	44050 - 44032: 0xB0AA,
	44051 - 44032: 0xB0AB,
	44052 - 44032: 0xB0AC,
	44053 - 44032: 0xB0AD,
	44054 - 44032: 0xB0AE,
	44055 - 44032: 0xB0AF,
	44056 - 44032: 0x814A,
	44057 - 44032: 0xB0B0,
	44058 - 44032: 0xB0B1,
	44059 - 44032: 0xB0B2,
	44060 - 44032: 0xB0B3,
	44061 - 44032: 0xB0B4,
	44062 - 44032: 0x814B,
	44063 - 44032: 0x814C,
	44064 - 44032: 0xB0B5,
	44065 - 44032: 0x814D,
	44066 - 44032: 0x814E,
	44067 - 44032: 0x814F,
	44068 - 44032: 0xB0B6,
	44069 - 44032: 0x8150,
	44070 - 44032: 0x8151,
	44071 - 44032: 0x8152,
	44072 - 44032: 0x8153,
	44073 - 44032: 0x8154,
	44074 - 44032: 0x8155,
	44075 - 44032: 0x8156,
	44076 - 44032: 0xB0B7,
	44077 - 44032: 0xB0B8,
	44078 - 44032: 0x8157,
	44079 - 44032: 0xB0B9,
	44080 - 44032: 0xB0BA,
	44081 - 44032: 0xB0BB,
	44082 - 44032: 0x8158,
	44083 - 44032: 0x8159,
	44084 - 44032: 0x815A,
	44085 - 44032: 0x8161,
	44086 - 44032: 0x8162,
	44087 - 44032: 0x8163,
	44088 - 44032: 0xB0BC,
	44089 - 44032: 0xB0BD,
	44090 - 44032: 0x8164,
	44091 - 44032: 0x8165,
	44092 - 44032: 0xB0BE,
	44093 - 44032: 0x8166,
	44094 - 44032: 0x8167,
	44095 - 44032: 0x8168,
	44096 - 44032: 0xB0BF,
	44097 - 44032: 0x8169,
	44098 - 44032: 0x816A,
	44099 - 44032: 0x816B,
	44100 - 44032: 0x816C,
	44101 - 44032: 0x816D,
	44102 - 44032: 0x816E,
	44103 - 44032: 0x816F,
	44104 - 44032: 0x8170,
	44105 - 44032: 0x8171,
	44106 - 44032: 0x8172,
	44107 - 44032: 0xB0C0,
	44108 - 44032: 0x8173,
	44109 - 44032: 0xB0C1,
	44110 - 44032: 0x8174,
	44111 - 44032: 0x8175,
	44112 - 44032: 0x8176,
	44113 - 44032: 0x8177,
	44114 - 44032: 0x8178,
	44115 - 44032: 0x8179,
	44116 - 44032: 0xB0C2,
	44117 - 44032: 0x817A,
	44118 - 44032: 0x8181,
	44119 - 44032: 0x8182,
	44120 - 44032: 0xB0C3,
	44121 - 44032: 0x8183,
	44122 - 44032: 0x8184,
	44123 - 44032: 0x8185,
	44124 - 44032: 0xB0C4,
	44125 - 44032: 0x8186,
	44126 - 44032: 0x8187,
	44127 - 44032: 0x8188,
	44128 - 44032: 0x8189,
	44129 - 44032: 0x818A,
	44130 - 44032: 0x818B,
	44131 - 44032: 0x818C,
	44132 - 44032: 0x818D,
	44133 - 44032: 0x818E,
	44134 - 44032: 0x818F,
	44135 - 44032: 0x8190,
	44136 - 44032: 0x8191,
	44137 - 44032: 0x8192,
	44138 - 44032: 0x8193,
	44139 - 44032: 0x8194,
	44140 - 44032: 0x8195,
	44141 - 44032: 0x8196,
	44142 - 44032: 0x8197,
	44143 - 44032: 0x8198,
	44144 - 44032: 0xB0C5,
	44145 - 44032: 0xB0C6,
	44146 - 44032: 0x8199,
	44147 - 44032: 0x819A,
	44148 - 44032: 0xB0C7,
	44149 - 44032: 0x819B,
	44150 - 44032: 0x819C,
	44151 - 44032: 0xB0C8,
	44152 - 44032: 0xB0C9,
	44153 - 44032: 0x819D,
	44154 - 44032: 0xB0CA,
	44155 - 44032: 0x819E,
	44156 - 44032: 0x819F,
	44157 - 44032: 0x81A0,
	44158 - 44032: 0x81A1,
	44159 - 44032: 0x81A2,
	44160 - 44032: 0xB0CB,
	44161 - 44032: 0xB0CC,
	44162 - 44032: 0x81A3,
	44163 - 44032: 0xB0CD,
	44164 - 44032: 0xB0CE,
	44165 - 44032: 0xB0CF,
	44166 - 44032: 0xB0D0,
	44167 - 44032: 0x81A4,
	44168 - 44032: 0x81A5,
	44169 - 44032: 0xB0D1,
	44170 - 44032: 0xB0D2,
	44171 - 44032: 0xB0D3,
	44172 - 44032: 0xB0D4,
	44173 - 44032: 0x81A6,
	44174 - 44032: 0x81A7,
	44175 - 44032: 0x81A8,
	44176 - 44032: 0xB0D5,
	44177 - 44032: 0x81A9,
	44178 - 44032: 0x81AA,
	44179 - 44032: 0x81AB,
	44180 - 44032: 0xB0D6,
	44181 - 44032: 0x81AC,
	44182 - 44032: 0x81AD,
	44183 - 44032: 0x81AE,
	44184 - 44032: 0x81AF,
	44185 - 44032: 0x81B0,
	44186 - 44032: 0x81B1,
	44187 - 44032: 0x81B2,
	44188 - 44032: 0xB0D7,
	44189 - 44032: 0xB0D8,
	44190 - 44032: 0x81B3,
	44191 - 44032: 0xB0D9,
	44192 - 44032: 0xB0DA,
	44193 - 44032: 0xB0DB,
	44194 - 44032: 0x81B4,
	44195 - 44032: 0x81B5,
	44196 - 44032: 0x81B6,
	44197 - 44032: 0x81B7,
	44198 - 44032: 0x81B8,
	44199 - 44032: 0x81B9,
	44200 - 44032: 0xB0DC,
	44201 - 44032: 0xB0DD,
	44202 - 44032: 0xB0DE,
	44203 - 44032: 0x81BA,
	44204 - 44032: 0xB0DF,
	44205 - 44032: 0x81BB,
	44206 - 44032: 0x81BC,
	44207 - 44032: 0xB0E0,
	44208 - 44032: 0xB0E1,
	44209 - 44032: 0x81BD,
	44210 - 44032: 0x81BE,
	44211 - 44032: 0x81BF,
	44212 - 44032: 0x81C0,
	44213 - 44032: 0x81C1,
	44214 - 44032: 0x81C2,
	44215 - 44032: 0x81C3,
	44216 - 44032: 0xB0E2,
	44217 - 44032: 0xB0E3,
	44218 - 44032: 0x81C4,
	44219 - 44032: 0xB0E4,
	44220 - 44032: 0xB0E5,
	44221 - 44032: 0xB0E6,
	44222 - 44032: 0x81C5,
	44223 - 44032: 0x81C6,
	44224 - 44032: 0x81C7,
	44225 - 44032: 0xB0E7,
	44226 - 44032: 0x81C8,
	44227 - 44032: 0x81C9,
	44228 - 44032: 0xB0E8,
	44229 - 44032: 0x81CA,
	44230 - 44032: 0x81CB,
	44231 - 44032: 0x81CC,
	44232 - 44032: 0xB0E9,
	44233 - 44032: 0x81CD,
	44234 - 44032: 0x81CE,
	44235 - 44032: 0x81CF,
	44236 - 44032: 0xB0EA,
	44237 - 44032: 0x81D0,
	44238 - 44032: 0x81D1,
	44239 - 44032: 0x81D2,
	44240 - 44032: 0x81D3,
	44241 - 44032: 0x81D4,
	44242 - 44032: 0x81D5,
	44243 - 44032: 0x81D6,
	44244 - 44032: 0x81D7,
	44245 - 44032: 0xB0EB,
	44246 - 44032: 0x81D8,
	44247 - 44032: 0xB0EC,
	44248 - 44032: 0x81D9,
	44249 - 44032: 0x81DA,
	44250 - 44032: 0x81DB,
	44251 - 44032: 0x81DC,
	44252 - 44032: 0x81DD,
	44253 - 44032: 0x81DE,
	44254 - 44032: 0x81DF,
	44255 - 44032: 0x81E0,
	44256 - 44032: 0xB0ED,
	44257 - 44032: 0xB0EE,
	44258 - 44032: 0x81E1,
	44259 - 44032: 0x81E2,
	44260 - 44032: 0xB0EF,
	44261 - 44032: 0x81E3,
	44262 - 44032: 0x81E4,
	44263 - 44032: 0xB0F0,
	44264 - 44032: 0xB0F1,
	44265 - 44032: 0x81E5,
	44266 - 44032: 0xB0F2,
	44267 - 44032: 0x81E6,
	44268 - 44032: 0xB0F3,
	44269 - 44032: 0x81E7,
	44270 - 44032: 0x81E8,
	44271 - 44032: 0xB0F4,
	44272 - 44032: 0xB0F5,
	44273 - 44032: 0xB0F6,
	44274 - 44032: 0x81E9,
	44275 - 44032: 0xB0F7,
	44276 - 44032: 0x81EA,
	44277 - 44032: 0xB0F8,
	44278 - 44032: 0xB0F9,
	44279 - 44032: 0x81EB,
	44280 - 44032: 0x81EC,
	44281 - 44032: 0x81ED,
	44282 - 44032: 0x81EE,
	44283 - 44032: 0x81EF,
	44284 - 44032: 0xB0FA,
	44285 - 44032: 0xB0FB,
	44286 - 44032: 0x81F0,
	44287 - 44032: 0x81F1,
	44288 - 44032: 0xB0FC,
	44289 - 44032: 0x81F2,
	44290 - 44032: 0x81F3,
	44291 - 44032: 0x81F4,
	44292 - 44032: 0xB0FD,
	44293 - 44032: 0x81F5,
	44294 - 44032: 0xB0FE,
	44295 - 44032: 0x81F6,
	44296 - 44032: 0x81F7,
	44297 - 44032: 0x81F8,
	44298 - 44032: 0x81F9,
	44299 - 44032: 0x81FA,
	44300 - 44032: 0xB1A1,
	44301 - 44032: 0xB1A2,
	44302 - 44032: 0x81FB,
	44303 - 44032: 0xB1A3,
	44304 - 44032: 0x81FC,
	44305 - 44032: 0xB1A4,
	44306 - 44032: 0x81FD,
	44307 - 44032: 0x81FE,
	44308 - 44032: 0x8241,
	44309 - 44032: 0x8242,
	44310 - 44032: 0x8243,
	44311 - 44032: 0x8244,
	44312 - 44032: 0xB1A5,
	44313 - 44032: 0x8245,
	44314 - 44032: 0x8246,
	44315 - 44032: 0x8247,
	44316 - 44032: 0xB1A6,
	44317 - 44032: 0x8248,
	44318 - 44032: 0x8249,
	44319 - 44032: 0x824A,
	44320 - 44032: 0xB1A7,
	44321 - 44032: 0x824B,
	44322 - 44032: 0x824C,
	44323 - 44032: 0x824D,
	44324 - 44032: 0x824E,
	44325 - 44032: 0x824F,
	44326 - 44032: 0x8250,
	44327 - 44032: 0x8251,
	44328 - 44032: 0x8252,
	44329 - 44032: 0xB1A8,
	44330 - 44032: 0x8253,
	44331 - 44032: 0x8254,
	44332 - 44032: 0xB1A9,
	44333 - 44032: 0xB1AA,
	44334 - 44032: 0x8255,
	44335 - 44032: 0x8256,
	44336 - 44032: 0x8257,
	44337 - 44032: 0x8258,
	44338 - 44032: 0x8259,
	44339 - 44032: 0x825A,
	44340 - 44032: 0xB1AB,
	44341 - 44032: 0xB1AC,
	44342 - 44032: 0x8261,
	44343 - 44032: 0x8262,
	44344 - 44032: 0xB1AD,
	44345 - 44032: 0x8263,
	44346 - 44032: 0x8264,
	44347 - 44032: 0x8265,
	44348 - 44032: 0xB1AE,
	44349 - 44032: 0x8266,
	44350 - 44032: 0x8267,
	44351 - 44032: 0x8268,
	44352 - 44032: 0x8269,
	44353 - 44032: 0x826A,
	44354 - 44032: 0x826B,
	44355 - 44032: 0x826C,
	44356 - 44032: 0xB1AF,
	44357 - 44032: 0xB1B0,
	44358 - 44032: 0x826D,
	44359 - 44032: 0xB1B1,
	44360 - 44032: 0x826E,
	44361 - 44032: 0xB1B2,
	44362 - 44032: 0x826F,
	44363 - 44032: 0x8270,
	44364 - 44032: 0x8271,
	44365 - 44032: 0x8272,
	44366 - 44032: 0x8273,
	44367 - 44032: 0x8274,
	44368 - 44032: 0xB1B3,
	44369 - 44032: 0x8275,
	44370 - 44032: 0x8276,
	44371 - 44032: 0x8277,
	44372 - 44032: 0xB1B4,
	44373 - 44032: 0x8278,
	44374 - 44032: 0x8279,
	44375 - 44032: 0x827A,
	44376 - 44032: 0xB1B5,
	44377 - 44032: 0x8281,
	44378 - 44032: 0x8282,
	44379 - 44032: 0x8283,
	44380 - 44032: 0x8284,
	44381 - 44032: 0x8285,
	44382 - 44032: 0x8286,
	44383 - 44032: 0x8287,
	44384 - 44032: 0x8288,
	44385 - 44032: 0xB1B6,
	44386 - 44032: 0x8289,
	44387 - 44032: 0xB1B7,
	44388 - 44032: 0x828A,
	44389 - 44032: 0x828B,
	44390 - 44032: 0x828C,
	44391 - 44032: 0x828D,
	44392 - 44032: 0x828E,
	44393 - 44032: 0x828F,
	44394 - 44032: 0x8290,
	44395 - 44032: 0x8291,
	44396 - 44032: 0xB1B8,
	44397 - 44032: 0xB1B9,
	44398 - 44032: 0x8292,
	44399 - 44032: 0x8293,
	44400 - 44032: 0xB1BA,
	44401 - 44032: 0x8294,
	44402 - 44032: 0x8295,
	44403 - 44032: 0xB1BB,
	44404 - 44032: 0xB1BC,
	44405 - 44032: 0xB1BD,
	44406 - 44032: 0xB1BE,
	44407 - 44032: 0x8296,
	44408 - 44032: 0x8297,
	44409 - 44032: 0x8298,
	44410 - 44032: 0x8299,
	44411 - 44032: 0xB1BF,
	44412 - 44032: 0xB1C0,
	44413 - 44032: 0xB1C1,
	44414 - 44032: 0x829A,
	44415 - 44032: 0xB1C2,
	44416 - 44032: 0x829B,
	44417 - 44032: 0xB1C3,
	44418 - 44032: 0xB1C4,
	44419 - 44032: 0x829C,
	44420 - 44032: 0x829D,
	44421 - 44032: 0x829E,
	44422 - 44032: 0x829F,
	44423 - 44032: 0x82A0,
	44424 - 44032: 0xB1C5,
	44425 - 44032: 0xB1C6,
	44426 - 44032: 0x82A1,
	44427 - 44032: 0x82A2,
	44428 - 44032: 0xB1C7,
	44429 - 44032: 0x82A3,
	44430 - 44032: 0x82A4,
	44431 - 44032: 0x82A5,
	44432 - 44032: 0xB1C8,
	44433 - 44032: 0x82A6,
	44434 - 44032: 0x82A7,
	44435 - 44032: 0x82A8,
	44436 - 44032: 0x82A9,
	44437 - 44032: 0x82AA,
	44438 - 44032: 0x82AB,
	44439 - 44032: 0x82AC,
	44440 - 44032: 0x82AD,
	44441 - 44032: 0x82AE,
	44442 - 44032: 0x82AF,
	44443 - 44032: 0x82B0,
	44444 - 44032: 0xB1C9,
	44445 - 44032: 0xB1CA,
	44446 - 44032: 0x82B1,
	44447 - 44032: 0x82B2,
	44448 - 44032: 0x82B3,
	44449 - 44032: 0x82B4,
	44450 - 44032: 0x82B5,
	44451 - 44032: 0x82B6,
	44452 - 44032: 0xB1CB,
	44453 - 44032: 0x82B7,
	44454 - 44032: 0x82B8,
	44455 - 44032: 0x82B9,
	44456 - 44032: 0x82BA,
	44457 - 44032: 0x82BB,
	44458 - 44032: 0x82BC,
	44459 - 44032: 0x82BD,
	44460 - 44032: 0x82BE,
	44461 - 44032: 0x82BF,
	44462 - 44032: 0x82C0,
	44463 - 44032: 0x82C1,
	44464 - 44032: 0x82C2,
	44465 - 44032: 0x82C3,
	44466 - 44032: 0x82C4,
	44467 - 44032: 0x82C5,
	44468 - 44032: 0x82C6,
	44469 - 44032: 0x82C7,
	44470 - 44032: 0x82C8,
	44471 - 44032: 0xB1CC,
	44472 - 44032: 0x82C9,
	44473 - 44032: 0x82CA,
	44474 - 44032: 0x82CB,
	44475 - 44032: 0x82CC,
	44476 - 44032: 0x82CD,
	44477 - 44032: 0x82CE,
	44478 - 44032: 0x82CF,
	44479 - 44032: 0x82D0,
	44480 - 44032: 0xB1CD,
	44481 - 44032: 0xB1CE,
	44482 - 44032: 0x82D1,
	44483 - 44032: 0x82D2,
	44484 - 44032: 0xB1CF,
	44485 - 44032: 0x82D3,
	44486 - 44032: 0x82D4,
	44487 - 44032: 0x82D5,
	44488 - 44032: 0xB1D0,
	44489 - 44032: 0x82D6,
	44490 - 44032: 0x82D7,
	44491 - 44032: 0x82D8,
	44492 - 44032: 0x82D9,
	44493 - 44032: 0x82DA,
	44494 - 44032: 0x82DB,
	44495 - 44032: 0x82DC,
	44496 - 44032: 0xB1D1,
	44497 - 44032: 0xB1D2,
	44498 - 44032: 0x82DD,
	44499 - 44032: 0xB1D3,
	44500 - 44032: 0x82DE,
	44501 - 44032: 0x82DF,
	44502 - 44032: 0x82E0,
	44503 - 44032: 0x82E1,
	44504 - 44032: 0x82E2,
	44505 - 44032: 0x82E3,
	44506 - 44032: 0x82E4,
	44507 - 44032: 0x82E5,
	44508 - 44032: 0xB1D4,
	44509 - 44032: 0x82E6,
	44510 - 44032: 0x82E7,
	44511 - 44032: 0x82E8,
	44512 - 44032: 0xB1D5,
	44513 - 44032: 0x82E9,
	44514 - 44032: 0x82EA,
	44515 - 44032: 0x82EB,
	44516 - 44032: 0xB1D6,
	44517 - 44032: 0x82EC,
	44518 - 44032: 0x82ED,
	44519 - 44032: 0x82EE,
	44520 - 44032: 0x82EF,
	44521 - 44032: 0x82F0,
	44522 - 44032: 0x82F1,
	44523 - 44032: 0x82F2,
	44524 - 44032: 0x82F3,
	44525 - 44032: 0x82F4,
	44526 - 44032: 0x82F5,
	44527 - 44032: 0x82F6,
	44528 - 44032: 0x82F7,
	44529 - 44032: 0x82F8,
	44530 - 44032: 0x82F9,
	44531 - 44032: 0x82FA,
	44532 - 44032: 0x82FB,
	44533 - 44032: 0x82FC,
	44534 - 44032: 0x82FD,
	44535 - 44032: 0x82FE,
	44536 - 44032: 0xB1D7,
	44537 - 44032: 0xB1D8,
	44538 - 44032: 0x8341,
	44539 - 44032: 0x8342,
	44540 - 44032: 0xB1D9,
	44541 - 44032: 0x8343,
	44542 - 44032: 0x8344,
	44543 - 44032: 0xB1DA,
	44544 - 44032: 0xB1DB,
	44545 - 44032: 0xB1DC,
	44546 - 44032: 0x8345,
	44547 - 44032: 0x8346,
	44548 - 44032: 0x8347,
	44549 - 44032: 0x8348,
	44550 - 44032: 0x8349,
	44551 - 44032: 0x834A,
	44552 - 44032: 0xB1DD,
	44553 - 44032: 0xB1DE,
	44554 - 44032: 0x834B,
	44555 - 44032: 0xB1DF,
	44556 - 44032: 0x834C,
	44557 - 44032: 0xB1E0,
	44558 - 44032: 0x834D,
	44559 - 44032: 0x834E,
	44560 - 44032: 0x834F,
	44561 - 44032: 0x8350,
	44562 - 44032: 0x8351,
	44563 - 44032: 0x8352,
	44564 - 44032: 0xB1E1,
	44565 - 44032: 0x8353,
	44566 - 44032: 0x8354,
	44567 - 44032: 0x8355,
	44568 - 44032: 0x8356,
	44569 - 44032: 0x8357,
	44570 - 44032: 0x8358,
	44571 - 44032: 0x8359,
	44572 - 44032: 0x835A,
	44573 - 44032: 0x8361,
	44574 - 44032: 0x8362,
	44575 - 44032: 0x8363,
	44576 - 44032: 0x8364,
	44577 - 44032: 0x8365,
	44578 - 44032: 0x8366,
	44579 - 44032: 0x8367,
	44580 - 44032: 0x8368,
	44581 - 44032: 0x8369,
	44582 - 44032: 0x836A,
	44583 - 44032: 0x836B,
	44584 - 44032: 0x836C,
	44585 - 44032: 0x836D,
	44586 - 44032: 0x836E,
	44587 - 44032: 0x836F,
	44588 - 44032: 0x8370,
	44589 - 44032: 0x8371,
	44590 - 44032: 0x8372,
	44591 - 44032: 0x8373,
	44592 - 44032: 0xB1E2,
	44593 - 44032: 0xB1E3,
	44594 - 44032: 0x8374,
	44595 - 44032: 0x8375,
	44596 - 44032: 0xB1E4,
	44597 - 44032: 0x8376,
	44598 - 44032: 0x8377,
	44599 - 44032: 0xB1E5,
	44600 - 44032: 0xB1E6,
	44601 - 44032: 0x8378,
	44602 - 44032: 0xB1E7,
	44603 - 44032: 0x8379,
	44604 - 44032: 0x837A,
	44605 - 44032: 0x8381,
	44606 - 44032: 0x8382,
	44607 - 44032: 0x8383,
	44608 - 44032: 0xB1E8,
	44609 - 44032: 0xB1E9,
	44610 - 44032: 0x8384,
	44611 - 44032: 0xB1EA,
	44612 - 44032: 0x8385,
	44613 - 44032: 0xB1EB,
	44614 - 44032: 0xB1EC,
	44615 - 44032: 0x8386,
	44616 - 44032: 0x8387,
	44617 - 44032: 0x8388,
	44618 - 44032: 0xB1ED,
	44619 - 44032: 0x8389,
	44620 - 44032: 0xB1EE,
	44621 - 44032: 0xB1EF,
	44622 - 44032: 0xB1F0,
	44623 - 44032: 0x838A,
	44624 - 44032: 0xB1F1,
	44625 - 44032: 0x838B,
	44626 - 44032: 0x838C,
	44627 - 44032: 0x838D,
	44628 - 44032: 0xB1F2,
	44629 - 44032: 0x838E,
	44630 - 44032: 0xB1F3,
	44631 - 44032: 0x838F,
	44632 - 44032: 0x8390,
	44633 - 44032: 0x8391,
	44634 - 44032: 0x8392,
	44635 - 44032: 0x8393,
	44636 - 44032: 0xB1F4,
	44637 - 44032: 0xB1F5,
	44638 - 44032: 0x8394,
	44639 - 44032: 0xB1F6,
	44640 - 44032: 0xB1F7,
	44641 - 44032: 0xB1F8,
	44642 - 44032: 0x8395,
	44643 - 44032: 0x8396,
	44644 - 44032: 0x8397,
	44645 - 44032: 0xB1F9,
	44646 - 44032: 0x8398,
	44647 - 44032: 0x8399,
	44648 - 44032: 0xB1FA,
	44649 - 44032: 0xB1FB,
	44650 - 44032: 0x839A,
	44651 - 44032: 0x839B,
	44652 - 44032: 0xB1FC,
	44653 - 44032: 0x839C,
	44654 - 44032: 0x839D,
	44655 - 44032: 0x839E,
	44656 - 44032: 0xB1FD,
	44657 - 44032: 0x839F,
	44658 - 44032: 0x83A0,
	44659 - 44032: 0x83A1,
	44660 - 44032: 0x83A2,
	44661 - 44032: 0x83A3,
	44662 - 44032: 0x83A4,
	44663 - 44032: 0x83A5,
	44664 - 44032: 0xB1FE,
	44665 - 44032: 0xB2A1,
	44666 - 44032: 0x83A6,
	44667 - 44032: 0xB2A2,
	44668 - 44032: 0xB2A3,
	44669 - 44032: 0xB2A4,
	44670 - 44032: 0x83A7,
	44671 - 44032: 0x83A8,
	44672 - 44032: 0x83A9,
	44673 - 44032: 0x83AA,
	44674 - 44032: 0x83AB,
	44675 - 44032: 0x83AC,
	44676 - 44032: 0xB2A5,
	44677 - 44032: 0xB2A6,
	44678 - 44032: 0x83AD,
	44679 - 44032: 0x83AE,
	44680 - 44032: 0x83AF,
	44681 - 44032: 0x83B0,
	44682 - 44032: 0x83B1,
	44683 - 44032: 0x83B2,
	44684 - 44032: 0xB2A7,
	44685 - 44032: 0x83B3,
	44686 - 44032: 0x83B4,
	44687 - 44032: 0x83B5,
	44688 - 44032: 0x83B6,
	44689 - 44032: 0x83B7,
	44690 - 44032: 0x83B8,
	44691 - 44032: 0x83B9,
	44692 - 44032: 0x83BA,
	44693 - 44032: 0x83BB,
	44694 - 44032: 0x83BC,
	44695 - 44032: 0x83BD,
	44696 - 44032: 0x83BE,
	44697 - 44032: 0x83BF,
	44698 - 44032: 0x83C0,
	44699 - 44032: 0x83C1,
	44700 - 44032: 0x83C2,
	44701 - 44032: 0x83C3,
	44702 - 44032: 0x83C4,
	44703 - 44032: 0x83C5,
	44704 - 44032: 0x83C6,
	44705 - 44032: 0x83C7,
	44706 - 44032: 0x83C8,
	44707 - 44032: 0x83C9,
	44708 - 44032: 0x83CA,
	44709 - 44032: 0x83CB,
	44710 - 44032: 0x83CC,
	44711 - 44032: 0x83CD,
	44712 - 44032: 0x83CE,
	44713 - 44032: 0x83CF,
	44714 - 44032: 0x83D0,
	44715 - 44032: 0x83D1,
	44716 - 44032: 0x83D2,
	44717 - 44032: 0x83D3,
	44718 - 44032: 0x83D4,
	44719 - 44032: 0x83D5,
	44720 - 44032: 0x83D6,
	44721 - 44032: 0x83D7,
	44722 - 44032: 0x83D8,
	44723 - 44032: 0x83D9,
	44724 - 44032: 0x83DA,
	44725 - 44032: 0x83DB,
	44726 - 44032: 0x83DC,
	44727 - 44032: 0x83DD,
	44728 - 44032: 0x83DE,
	44729 - 44032: 0x83DF,
	44730 - 44032: 0x83E0,
	44731 - 44032: 0x83E1,
	44732 - 44032: 0xB2A8,
	44733 - 44032: 0xB2A9,
	44734 - 44032: 0xB2AA,
	44735 - 44032: 0x83E2,
	44736 - 44032: 0xB2AB,
	44737 - 44032: 0x83E3,
	44738 - 44032: 0x83E4,
	44739 - 44032: 0x83E5,
	44740 - 44032: 0xB2AC,
	44741 - 44032: 0x83E6,
	44742 - 44032: 0x83E7,
	44743 - 44032: 0x83E8,
	44744 - 44032: 0x83E9,
	44745 - 44032: 0x83EA,
	44746 - 44032: 0x83EB,
	44747 - 44032: 0x83EC,
	44748 - 44032: 0xB2AD,
	44749 - 44032: 0xB2AE,
	44750 - 44032: 0x83ED,
	44751 - 44032: 0xB2AF,
	44752 - 44032: 0xB2B0,
	44753 - 44032: 0xB2B1,
	44754 - 44032: 0x83EE,
	44755 - 44032: 0x83EF,
	44756 - 44032: 0x83F0,
	44757 - 44032: 0x83F1,
	44758 - 44032: 0x83F2,
	44759 - 44032: 0x83F3,
	44760 - 44032: 0xB2B2,
	44761 - 44032: 0xB2B3,
	44762 - 44032: 0x83F4,
	44763 - 44032: 0x83F5,
	44764 - 44032: 0xB2B4,
	44765 - 44032: 0x83F6,
	44766 - 44032: 0x83F7,
	44767 - 44032: 0x83F8,
	44768 - 44032: 0x83F9,
	44769 - 44032: 0x83FA,
	44770 - 44032: 0x83FB,
	44771 - 44032: 0x83FC,
	44772 - 44032: 0x83FD,
	44773 - 44032: 0x83FE,
	44774 - 44032: 0x8441,
	44775 - 44032: 0x8442,
	44776 - 44032: 0xB2B5,
	44777 - 44032: 0x8443,
	44778 - 44032: 0x8444,
	44779 - 44032: 0xB2B6,
	44780 - 44032: 0x8445,
	44781 - 44032: 0xB2B7,
	44782 - 44032: 0x8446,
	44783 - 44032: 0x8447,
	44784 - 44032: 0x8448,
	44785 - 44032: 0x8449,
	44786 - 44032: 0x844A,
	44787 - 44032: 0x844B,
	44788 - 44032: 0xB2B8,
	44789 - 44032: 0x844C,
	44790 - 44032: 0x844D,
	44791 - 44032: 0x844E,
	44792 - 44032: 0xB2B9,
	44793 - 44032: 0x844F,
	44794 - 44032: 0x8450,
	44795 - 44032: 0x8451,
	44796 - 44032: 0xB2BA,
	44797 - 44032: 0x8452,
	44798 - 44032: 0x8453,
	44799 - 44032: 0x8454,
	44800 - 44032: 0x8455,
	44801 - 44032: 0x8456,
	44802 - 44032: 0x8457,
	44803 - 44032: 0x8458,
	44804 - 44032: 0x8459,
	44805 - 44032: 0x845A,
	44806 - 44032: 0x8461,
	44807 - 44032: 0xB2BB,
	44808 - 44032: 0xB2BC,
	44809 - 44032: 0x8462,
	44810 - 44032: 0x8463,
	44811 - 44032: 0x8464,
	44812 - 44032: 0x8465,
	44813 - 44032: 0xB2BD,
	44814 - 44032: 0x8466,
	44815 - 44032: 0x8467,
	44816 - 44032: 0xB2BE,
	44817 - 44032: 0x8468,
	44818 - 44032: 0x8469,
	44819 - 44032: 0x846A,
	44820 - 44032: 0x846B,
	44821 - 44032: 0x846C,
	44822 - 44032: 0x846D,
	44823 - 44032: 0x846E,
	44824 - 44032: 0x846F,
	44825 - 44032: 0x8470,
	44826 - 44032: 0x8471,
	44827 - 44032: 0x8472,
	44828 - 44032: 0x8473,
	44829 - 44032: 0x8474,
	44830 - 44032: 0x8475,
	44831 - 44032: 0x8476,
	44832 - 44032: 0x8477,
	44833 - 44032: 0x8478,
	44834 - 44032: 0x8479,
	44835 - 44032: 0x847A,
	44836 - 44032: 0x8481,
	44837 - 44032: 0x8482,
	44838 - 44032: 0x8483,
	44839 - 44032: 0x8484,
	44840 - 44032: 0x8485,
	44841 - 44032: 0x8486,
	44842 - 44032: 0x8487,
	44843 - 44032: 0x8488,
	44844 - 44032: 0xB2BF,
	44845 - 44032: 0xB2C0,
	44846 - 44032: 0x8489,
	44847 - 44032: 0x848A,
	44848 - 44032: 0xB2C1,
	44849 - 44032: 0x848B,
	44850 - 44032: 0xB2C2,
	44851 - 44032: 0x848C,
	44852 - 44032: 0xB2C3,
	44853 - 44032: 0x848D,
	44854 - 44032: 0x848E,
	44855 - 44032: 0x848F,
	44856 - 44032: 0x8490,
	44857 - 44032: 0x8491,
	44858 - 44032: 0x8492,
	44859 - 44032: 0x8493,
	44860 - 44032: 0xB2C4,
	44861 - 44032: 0xB2C5,
	44862 - 44032: 0x8494,
	44863 - 44032: 0xB2C6,
	44864 - 44032: 0x8495,
	44865 - 44032: 0xB2C7,
	44866 - 44032: 0xB2C8,
	44867 - 44032: 0xB2C9,
	44868 - 44032: 0x8496,
	44869 - 44032: 0x8497,
	44870 - 44032: 0x8498,
	44871 - 44032: 0x8499,
	44872 - 44032: 0xB2CA,
	44873 - 44032: 0xB2CB,
	44874 - 44032: 0x849A,
	44875 - 44032: 0x849B,
	44876 - 44032: 0x849C,
	44877 - 44032: 0x849D,
	44878 - 44032: 0x849E,
	44879 - 44032: 0x849F,
	44880 - 44032: 0xB2CC,
	44881 - 44032: 0x84A0,
	44882 - 44032: 0x84A1,
	44883 - 44032: 0x84A2,
	44884 - 44032: 0x84A3,
	44885 - 44032: 0x84A4,
	44886 - 44032: 0x84A5,
	44887 - 44032: 0x84A6,
	44888 - 44032: 0x84A7,
	44889 - 44032: 0x84A8,
	44890 - 44032: 0x84A9,
	44891 - 44032: 0x84AA,
	44892 - 44032: 0xB2CD,
	44893 - 44032: 0xB2CE,
	44894 - 44032: 0x84AB,
	44895 - 44032: 0x84AC,
	44896 - 44032: 0x84AD,
	44897 - 44032: 0x84AE,
	44898 - 44032: 0x84AF,
	44899 - 44032: 0x84B0,
	44900 - 44032: 0xB2CF,
	44901 - 44032: 0xB2D0,
	44902 - 44032: 0x84B1,
	44903 - 44032: 0x84B2,
	44904 - 44032: 0x84B3,
	44905 - 44032: 0x84B4,
	44906 - 44032: 0x84B5,
	44907 - 44032: 0x84B6,
	44908 - 44032: 0x84B7,
	44909 - 44032: 0x84B8,
	44910 - 44032: 0x84B9,
	44911 - 44032: 0x84BA,
	44912 - 44032: 0x84BB,
	44913 - 44032: 0x84BC,
	44914 - 44032: 0x84BD,
	44915 - 44032: 0x84BE,
	44916 - 44032: 0x84BF,
	44917 - 44032: 0x84C0,
	44918 - 44032: 0x84C1,
	44919 - 44032: 0x84C2,
	44920 - 44032: 0x84C3,
	44921 - 44032: 0xB2D1,
	44922 - 44032: 0x84C4,
	44923 - 44032: 0x84C5,
	44924 - 44032: 0x84C6,
	44925 - 44032: 0x84C7,
	44926 - 44032: 0x84C8,
	44927 - 44032: 0x84C9,
	44928 - 44032: 0xB2D2,
	44929 - 44032: 0x84CA,
	44930 - 44032: 0x84CB,
	44931 - 44032: 0x84CC,
	44932 - 44032: 0xB2D3,
	44933 - 44032: 0x84CD,
	44934 - 44032: 0x84CE,
	44935 - 44032: 0x84CF,
	44936 - 44032: 0xB2D4,
	44937 - 44032: 0x84D0,
	44938 - 44032: 0x84D1,
	44939 - 44032: 0x84D2,
	44940 - 44032: 0x84D3,
	44941 - 44032: 0x84D4,
	44942 - 44032: 0x84D5,
	44943 - 44032: 0x84D6,
	44944 - 44032: 0xB2D5,
	44945 - 44032: 0xB2D6,
	44946 - 44032: 0x84D7,
	44947 - 44032: 0x84D8,
	44948 - 44032: 0x84D9,
	44949 - 44032: 0xB2D7,
	44950 - 44032: 0x84DA,
	44951 - 44032: 0x84DB,
	44952 - 44032: 0x84DC,
	44953 - 44032: 0x84DD,
	44954 - 44032: 0x84DE,
	44955 - 44032: 0x84DF,
	44956 - 44032: 0xB2D8,
	44957 - 44032: 0x84E0,
	44958 - 44032: 0x84E1,
	44959 - 44032: 0x84E2,
	44960 - 44032: 0x84E3,
	44961 - 44032: 0x84E4,
	44962 - 44032: 0x84E5,
	44963 - 44032: 0x84E6,
	44964 - 44032: 0x84E7,
	44965 - 44032: 0x84E8,
	44966 - 44032: 0x84E9,
	44967 - 44032: 0x84EA,
	44968 - 44032: 0x84EB,
	44969 - 44032: 0x84EC,
	44970 - 44032: 0x84ED,
	44971 - 44032: 0x84EE,
	44972 - 44032: 0x84EF,
	44973 - 44032: 0x84F0,
	44974 - 44032: 0x84F1,
	44975 - 44032: 0x84F2,
	44976 - 44032: 0x84F3,
	44977 - 44032: 0x84F4,
	44978 - 44032: 0x84F5,
	44979 - 44032: 0x84F6,
	44980 - 44032: 0x84F7,
	44981 - 44032: 0x84F8,
	44982 - 44032: 0x84F9,
	44983 - 44032: 0x84FA,
	44984 - 44032: 0xB2D9,
	44985 - 44032: 0xB2DA,
	44986 - 44032: 0x84FB,
	44987 - 44032: 0x84FC,
	44988 - 44032: 0xB2DB,
	44989 - 44032: 0x84FD,
	44990 - 44032: 0x84FE,
	44991 - 44032: 0x8541,
	44992 - 44032: 0xB2DC,
	44993 - 44032: 0x8542,
	44994 - 44032: 0x8543,
	44995 - 44032: 0x8544,
	44996 - 44032: 0x8545,
	44997 - 44032: 0x8546,
	44998 - 44032: 0x8547,
	44999 - 44032: 0xB2DD,
	45000 - 44032: 0xB2DE,
	45001 - 44032: 0xB2DF,
	45002 - 44032: 0x8548,
	45003 - 44032: 0xB2E0,
	45004 - 44032: 0x8549,
	45005 - 44032: 0xB2E1,
	45006 - 44032: 0xB2E2,
	45007 - 44032: 0x854A,
	45008 - 44032: 0x854B,
	45009 - 44032: 0x854C,
	45010 - 44032: 0x854D,
	45011 - 44032: 0x854E,
	45012 - 44032: 0xB2E3,
	45013 - 44032: 0x854F,
	45014 - 44032: 0x8550,
	45015 - 44032: 0x8551,
	45016 - 44032: 0x8552,
	45017 - 44032: 0x8553,
	45018 - 44032: 0x8554,
	45019 - 44032: 0x8555,
	45020 - 44032: 0xB2E4,
	45021 - 44032: 0x8556,
	45022 - 44032: 0x8557,
	45023 - 44032: 0x8558,
	45024 - 44032: 0x8559,
	45025 - 44032: 0x855A,
	45026 - 44032: 0x8561,
	45027 - 44032: 0x8562,
	45028 - 44032: 0x8563,
	45029 - 44032: 0x8564,
	45030 - 44032: 0x8565,
	45031 - 44032: 0x8566,
	45032 - 44032: 0xB2E5,
	45033 - 44032: 0xB2E6,
	45034 - 44032: 0x8567,
	45035 - 44032: 0x8568,
	45036 - 44032: 0x8569,
	45037 - 44032: 0x856A,
	45038 - 44032: 0x856B,
	45039 - 44032: 0x856C,
	45040 - 44032: 0xB2E7,
	45041 - 44032: 0xB2E8,
	45042 - 44032: 0x856D,
	45043 - 44032: 0x856E,
	45044 - 44032: 0xB2E9,
	45045 - 44032: 0x856F,
	45046 - 44032: 0x8570,
	45047 - 44032: 0x8571,
	45048 - 44032: 0xB2EA,
	45049 - 44032: 0x8572,
	45050 - 44032: 0x8573,
	45051 - 44032: 0x8574,
	45052 - 44032: 0x8575,
	45053 - 44032: 0x8576,
	45054 - 44032: 0x8577,
	45055 - 44032: 0x8578,
	45056 - 44032: 0xB2EB,
	45057 - 44032: 0xB2EC,
	45058 - 44032: 0x8579,
	45059 - 44032: 0x857A,
	45060 - 44032: 0xB2ED,
	45061 - 44032: 0x8581,
	45062 - 44032: 0x8582,
	45063 - 44032: 0x8583,
	45064 - 44032: 0x8584,
	45065 - 44032: 0x8585,
	45066 - 44032: 0x8586,
	45067 - 44032: 0x8587,
	45068 - 44032: 0xB2EE,
	45069 - 44032: 0x8588,
	45070 - 44032: 0x8589,
	45071 - 44032: 0x858A,
	45072 - 44032: 0xB2EF,
	45073 - 44032: 0x858B,
	45074 - 44032: 0x858C,
	45075 - 44032: 0x858D,
	45076 - 44032: 0xB2F0,
	45077 - 44032: 0x858E,
	45078 - 44032: 0x858F,
	45079 - 44032: 0x8590,
	45080 - 44032: 0x8591,
	45081 - 44032: 0x8592,
	45082 - 44032: 0x8593,
	45083 - 44032: 0x8594,
	45084 - 44032: 0xB2F1,
	45085 - 44032: 0xB2F2,
	45086 - 44032: 0x8595,
	45087 - 44032: 0x8596,
	45088 - 44032: 0x8597,
	45089 - 44032: 0x8598,
	45090 - 44032: 0x8599,
	45091 - 44032: 0x859A,
	45092 - 44032: 0x859B,
	45093 - 44032: 0x859C,
	45094 - 44032: 0x859D,
	45095 - 44032: 0x859E,
	45096 - 44032: 0xB2F3,
	45097 - 44032: 0x859F,
	45098 - 44032: 0x85A0,
	45099 - 44032: 0x85A1,
	45100 - 44032: 0x85A2,
	45101 - 44032: 0x85A3,
	45102 - 44032: 0x85A4,
	45103 - 44032: 0x85A5,
	45104 - 44032: 0x85A6,
	45105 - 44032: 0x85A7,
	45106 - 44032: 0x85A8,
	45107 - 44032: 0x85A9,
	45108 - 44032: 0x85AA,
	45109 - 44032: 0x85AB,
	45110 - 44032: 0x85AC,
	45111 - 44032: 0x85AD,
	45112 - 44032: 0x85AE,
	45113 - 44032: 0x85AF,
	45114 - 44032: 0x85B0,
	45115 - 44032: 0x85B1,
	45116 - 44032: 0x85B2,
	45117 - 44032: 0x85B3,
	45118 - 44032: 0x85B4,
	45119 - 44032: 0x85B5,
	45120 - 44032: 0x85B6,
	45121 - 44032: 0x85B7,
	45122 - 44032: 0x85B8,
	45123 - 44032: 0x85B9,
	45124 - 44032: 0xB2F4,
	45125 - 44032: 0xB2F5,
	45126 - 44032: 0x85BA,
	45127 - 44032: 0x85BB,
	45128 - 44032: 0xB2F6,
	45129 - 44032: 0x85BC,
	45130 - 44032: 0xB2F7,
	45131 - 44032: 0x85BD,
	45132 - 44032: 0xB2F8,
	45133 - 44032: 0x85BE,
	45134 - 44032: 0xB2F9,
	45135 - 44032: 0x85BF,
	45136 - 44032: 0x85C0,
	45137 - 44032: 0x85C1,
	45138 - 44032: 0x85C2,
	45139 - 44032: 0xB2FA,
	45140 - 44032: 0xB2FB,
	45141 - 44032: 0xB2FC,
	45142 - 44032: 0x85C3,
	45143 - 44032: 0xB2FD,
	45144 - 44032: 0x85C4,
	45145 - 44032: 0xB2FE,
	45146 - 44032: 0x85C5,
	45147 - 44032: 0x85C6,
	45148 - 44032: 0x85C7,
	45149 - 44032: 0xB3A1,
	45150 - 44032: 0x85C8,
	45151 - 44032: 0x85C9,
	45152 - 44032: 0x85CA,
	45153 - 44032: 0x85CB,
	45154 - 44032: 0x85CC,
	45155 - 44032: 0x85CD,
	45156 - 44032: 0x85CE,
	45157 - 44032: 0x85CF,
	45158 - 44032: 0x85D0,
	45159 - 44032: 0x85D1,
	45160 - 44032: 0x85D2,
	45161 - 44032: 0x85D3,
	45162 - 44032: 0x85D4,
	45163 - 44032: 0x85D5,
	45164 - 44032: 0x85D6,
	45165 - 44032: 0x85D7,
	45166 - 44032: 0x85D8,
	45167 - 44032: 0x85D9,
	45168 - 44032: 0x85DA,
	45169 - 44032: 0x85DB,
	45170 - 44032: 0x85DC,
	45171 - 44032: 0x85DD,
	45172 - 44032: 0x85DE,
	45173 - 44032: 0x85DF,
	45174 - 44032: 0x85E0,
	45175 - 44032: 0x85E1,
	45176 - 44032: 0x85E2,
	45177 - 44032: 0x85E3,
	45178 - 44032: 0x85E4,
	45179 - 44032: 0x85E5,
	45180 - 44032: 0xB3A2,
	45181 - 44032: 0xB3A3,
	45182 - 44032: 0x85E6,
	45183 - 44032: 0x85E7,
	45184 - 44032: 0xB3A4,
	45185 - 44032: 0x85E8,
	45186 - 44032: 0x85E9,
	45187 - 44032: 0x85EA,
	45188 - 44032: 0xB3A5,
	45189 - 44032: 0x85EB,
	45190 - 44032: 0x85EC,
	45191 - 44032: 0x85ED,
	45192 - 44032: 0x85EE,
	45193 - 44032: 0x85EF,
	45194 - 44032: 0x85F0,
	45195 - 44032: 0x85F1,
	45196 - 44032: 0xB3A6,
	45197 - 44032: 0xB3A7,
	45198 - 44032: 0x85F2,
	45199 - 44032: 0xB3A8,
	45200 - 44032: 0x85F3,
	45201 - 44032: 0xB3A9,
	45202 - 44032: 0x85F4,
	45203 - 44032: 0x85F5,
	45204 - 44032: 0x85F6,
	45205 - 44032: 0x85F7,
	45206 - 44032: 0x85F8,
	45207 - 44032: 0x85F9,
	45208 - 44032: 0xB3AA,
	45209 - 44032: 0xB3AB,
	45210 - 44032: 0xB3AC,
	45211 - 44032: 0x85FA,
	45212 - 44032: 0xB3AD,
	45213 - 44032: 0x85FB,
	45214 - 44032: 0x85FC,
	45215 - 44032: 0xB3AE,
	45216 - 44032: 0xB3AF,
	45217 - 44032: 0xB3B0,
	45218 - 44032: 0xB3B1,
	45219 - 44032: 0x85FD,
	45220 - 44032: 0x85FE,
	45221 - 44032: 0x8641,
	45222 - 44032: 0x8642,
	45223 - 44032: 0x8643,
	45224 - 44032: 0xB3B2,
	45225 - 44032: 0xB3B3,
	45226 - 44032: 0x8644,
	45227 - 44032: 0xB3B4,
	45228 - 44032: 0xB3B5,
	45229 - 44032: 0xB3B6,
	45230 - 44032: 0xB3B7,
	45231 - 44032: 0xB3B8,
	45232 - 44032: 0x8645,
	45233 - 44032: 0xB3B9,
	45234 - 44032: 0x8646,
	45235 - 44032: 0xB3BA,
	45236 - 44032: 0xB3BB,
	45237 - 44032: 0xB3BC,
	45238 - 44032: 0x8647,
	45239 - 44032: 0x8648,
	45240 - 44032: 0xB3BD,
	45241 - 44032: 0x8649,
	45242 - 44032: 0x864A,
	45243 - 44032: 0x864B,
	45244 - 44032: 0xB3BE,
	45245 - 44032: 0x864C,
	45246 - 44032: 0x864D,
	45247 - 44032: 0x864E,
	45248 - 44032: 0x864F,
	45249 - 44032: 0x8650,
	45250 - 44032: 0x8651,
	45251 - 44032: 0x8652,
	45252 - 44032: 0xB3BF,
	45253 - 44032: 0xB3C0,
	45254 - 44032: 0x8653,
	45255 - 44032: 0xB3C1,
	45256 - 44032: 0xB3C2,
	45257 - 44032: 0xB3C3,
	45258 - 44032: 0x8654,
	45259 - 44032: 0x8655,
	45260 - 44032: 0x8656,
	45261 - 44032: 0x8657,
	45262 - 44032: 0x8658,
	45263 - 44032: 0x8659,
	45264 - 44032: 0xB3C4,
	45265 - 44032: 0xB3C5,
	45266 - 44032: 0x865A,
	45267 - 44032: 0x8661,
	45268 - 44032: 0xB3C6,
	45269 - 44032: 0x8662,
	45270 - 44032: 0x8663,
	45271 - 44032: 0x8664,
	45272 - 44032: 0xB3C7,
	45273 - 44032: 0x8665,
	45274 - 44032: 0x8666,
	45275 - 44032: 0x8667,
	45276 - 44032: 0x8668,
	45277 - 44032: 0x8669,
	45278 - 44032: 0x866A,
	45279 - 44032: 0x866B,
	45280 - 44032: 0xB3C8,
	45281 - 44032: 0x866C,
	45282 - 44032: 0x866D,
	45283 - 44032: 0x866E,
	45284 - 44032: 0x866F,
	45285 - 44032: 0xB3C9,
	45286 - 44032: 0x8670,
	45287 - 44032: 0x8671,
	45288 - 44032: 0x8672,
	45289 - 44032: 0x8673,
	45290 - 44032: 0x8674,
	45291 - 44032: 0x8675,
	45292 - 44032: 0x8676,
	45293 - 44032: 0x8677,
	45294 - 44032: 0x8678,
	45295 - 44032: 0x8679,
	45296 - 44032: 0x867A,
	45297 - 44032: 0x8681,
	45298 - 44032: 0x8682,
	45299 - 44032: 0x8683,
	45300 - 44032: 0x8684,
	45301 - 44032: 0x8685,
	45302 - 44032: 0x8686,
	45303 - 44032: 0x8687,
	45304 - 44032: 0x8688,
	45305 - 44032: 0x8689,
	45306 - 44032: 0x868A,
	45307 - 44032: 0x868B,
	45308 - 44032: 0x868C,
	45309 - 44032: 0x868D,
	45310 - 44032: 0x868E,
	45311 - 44032: 0x868F,
	45312 - 44032: 0x8690,
	45313 - 44032: 0x8691,
	45314 - 44032: 0x8692,
	45315 - 44032: 0x8693,
	45316 - 44032: 0x8694,
	45317 - 44032: 0x8695,
	45318 - 44032: 0x8696,
	45319 - 44032: 0x8697,
	45320 - 44032: 0xB3CA,
	45321 - 44032: 0xB3CB,
	45322 - 44032: 0x8698,
	45323 - 44032: 0xB3CC,
	45324 - 44032: 0xB3CD,
	45325 - 44032: 0x8699,
	45326 - 44032: 0x869A,
	45327 - 44032: 0x869B,
	45328 - 44032: 0xB3CE,
	45329 - 44032: 0x869C,
	45330 - 44032: 0xB3CF,
	45331 - 44032: 0xB3D0,
	45332 - 44032: 0x869D,
	45333 - 44032: 0x869E,
	45334 - 44032: 0x869F,
	45335 - 44032: 0x86A0,
	45336 - 44032: 0xB3D1,
	45337 - 44032: 0xB3D2,
	45338 - 44032: 0x86A1,
	45339 - 44032: 0xB3D3,
	45340 - 44032: 0xB3D4,
	45341 - 44032: 0xB3D5,
	45342 - 44032: 0x86A2,
	45343 - 44032: 0x86A3,
	45344 - 44032: 0x86A4,
	45345 - 44032: 0x86A5,
	45346 - 44032: 0x86A6,
	45347 - 44032: 0xB3D6,
	45348 - 44032: 0xB3D7,
	45349 - 44032: 0xB3D8,
	45350 - 44032: 0x86A7,
	45351 - 44032: 0x86A8,
	45352 - 44032: 0xB3D9,
	45353 - 44032: 0x86A9,
	45354 - 44032: 0x86AA,
	45355 - 44032: 0x86AB,
	45356 - 44032: 0xB3DA,
	45357 - 44032: 0x86AC,
	45358 - 44032: 0x86AD,
	45359 - 44032: 0x86AE,
	45360 - 44032: 0x86AF,
	45361 - 44032: 0x86B0,
	45362 - 44032: 0x86B1,
	45363 - 44032: 0x86B2,
	45364 - 44032: 0xB3DB,
	45365 - 44032: 0xB3DC,
	45366 - 44032: 0x86B3,
	45367 - 44032: 0xB3DD,
	45368 - 44032: 0xB3DE,
	45369 - 44032: 0xB3DF,
	45370 - 44032: 0x86B4,
	45371 - 44032: 0x86B5,
	45372 - 44032: 0x86B6,
	45373 - 44032: 0x86B7,
	45374 - 44032: 0x86B8,
	45375 - 44032: 0x86B9,
	45376 - 44032: 0xB3E0,
	45377 - 44032: 0xB3E1,
	45378 - 44032: 0x86BA,
	45379 - 44032: 0x86BB,
	45380 - 44032: 0xB3E2,
	45381 - 44032: 0x86BC,
	45382 - 44032: 0x86BD,
	45383 - 44032: 0x86BE,
	45384 - 44032: 0xB3E3,
	45385 - 44032: 0x86BF,
	45386 - 44032: 0x86C0,
	45387 - 44032: 0x86C1,
	45388 - 44032: 0x86C2,
	45389 - 44032: 0x86C3,
	45390 - 44032: 0x86C4,
	45391 - 44032: 0x86C5,
	45392 - 44032: 0xB3E4,
	45393 - 44032: 0xB3E5,
	45394 - 44032: 0x86C6,
	45395 - 44032: 0x86C7,
	45396 - 44032: 0xB3E6,
	45397 - 44032: 0xB3E7,
	45398 - 44032: 0x86C8,
	45399 - 44032: 0x86C9,
	45400 - 44032: 0xB3E8,
	45401 - 44032: 0x86CA,
	45402 - 44032: 0x86CB,
	45403 - 44032: 0x86CC,
	45404 - 44032: 0xB3E9,
	45405 - 44032: 0x86CD,
	45406 - 44032: 0x86CE,
	45407 - 44032: 0x86CF,
	45408 - 44032: 0xB3EA,
	45409 - 44032: 0x86D0,
	45410 - 44032: 0x86D1,
	45411 - 44032: 0x86D2,
	45412 - 44032: 0x86D3,
	45413 - 44032: 0x86D4,
	45414 - 44032: 0x86D5,
	45415 - 44032: 0x86D6,
	45416 - 44032: 0x86D7,
	45417 - 44032: 0x86D8,
	45418 - 44032: 0x86D9,
	45419 - 44032: 0x86DA,
	45420 - 44032: 0x86DB,
	45421 - 44032: 0x86DC,
	45422 - 44032: 0x86DD,
	45423 - 44032: 0x86DE,
	45424 - 44032: 0x86DF,
	45425 - 44032: 0x86E0,
	45426 - 44032: 0x86E1,
	45427 - 44032: 0x86E2,
	45428 - 44032: 0x86E3,
	45429 - 44032: 0x86E4,
	45430 - 44032: 0x86E5,
	45431 - 44032: 0x86E6,
	45432 - 44032: 0xB3EB,
	45433 - 44032: 0xB3EC,
	45434 - 44032: 0x86E7,
	45435 - 44032: 0x86E8,
	45436 - 44032: 0xB3ED,
	45437 - 44032: 0x86E9,
	45438 - 44032: 0x86EA,
	45439 - 44032: 0x86EB,
	45440 - 44032: 0xB3EE,
	45441 - 44032: 0x86EC,
	45442 - 44032: 0xB3EF,
	45443 - 44032: 0x86ED,
	45444 - 44032: 0x86EE,
	45445 - 44032: 0x86EF,
	45446 - 44032: 0x86F0,
	45447 - 44032: 0x86F1,
	45448 - 44032: 0xB3F0,
	45449 - 44032: 0xB3F1,
	45450 - 44032: 0x86F2,
	45451 - 44032: 0xB3F2,
	45452 - 44032: 0x86F3,
	45453 - 44032: 0xB3F3,
	45454 - 44032: 0x86F4,
	45455 - 44032: 0x86F5,
	45456 - 44032: 0x86F6,
	45457 - 44032: 0x86F7,
	45458 - 44032: 0xB3F4,
	45459 - 44032: 0xB3F5,
	45460 - 44032: 0xB3F6,
	45461 - 44032: 0x86F8,
	45462 - 44032: 0x86F9,
	45463 - 44032: 0x86FA,
	45464 - 44032: 0xB3F7,
	45465 - 44032: 0x86FB,
	45466 - 44032: 0x86FC,
	45467 - 44032: 0x86FD,
	45468 - 44032: 0xB3F8,
	45469 - 44032: 0x86FE,
	45470 - 44032: 0x8741,
	45471 - 44032: 0x8742,
	45472 - 44032: 0x8743,
	45473 - 44032: 0x8744,
	45474 - 44032: 0x8745,
	45475 - 44032: 0x8746,
	45476 - 44032: 0x8747,
	45477 - 44032: 0x8748,
	45478 - 44032: 0x8749,
	45479 - 44032: 0x874A,
	45480 - 44032: 0xB3F9,
	45481 - 44032: 0x874B,
	45482 - 44032: 0x874C,
	45483 - 44032: 0x874D,
	45484 - 44032: 0x874E,
	45485 - 44032: 0x874F,
	45486 - 44032: 0x8750,
	45487 - 44032: 0x8751,
	45488 - 44032: 0x8752,
	45489 - 44032: 0x8753,
	45490 - 44032: 0x8754,
	45491 - 44032: 0x8755,
	45492 - 44032: 0x8756,
	45493 - 44032: 0x8757,
	45494 - 44032: 0x8758,
	45495 - 44032: 0x8759,
	45496 - 44032: 0x875A,
	45497 - 44032: 0x8761,
	45498 - 44032: 0x8762,
	45499 - 44032: 0x8763,
	45500 - 44032: 0x8764,
	45501 - 44032: 0x8765,
	45502 - 44032: 0x8766,
	45503 - 44032: 0x8767,
	45504 - 44032: 0x8768,
	45505 - 44032: 0x8769,
	45506 - 44032: 0x876A,
	45507 - 44032: 0x876B,
	45508 - 44032: 0x876C,
	45509 - 44032: 0x876D,
	45510 - 44032: 0x876E,
	45511 - 44032: 0x876F,
	45512 - 44032: 0x8770,
	45513 - 44032: 0x8771,
	45514 - 44032: 0x8772,
	45515 - 44032: 0x8773,
	45516 - 44032: 0xB3FA,
	45517 - 44032: 0x8774,
	45518 - 44032: 0x8775,
	45519 - 44032: 0x8776,
	45520 - 44032: 0xB3FB,
	45521 - 44032: 0x8777,
	45522 - 44032: 0x8778,
	45523 - 44032: 0x8779,
	45524 - 44032: 0xB3FC,
	45525 - 44032: 0x877A,
	45526 - 44032: 0x8781,
	45527 - 44032: 0x8782,
	45528 - 44032: 0x8783,
	45529 - 44032: 0x8784,
	45530 - 44032: 0x8785,
	45531 - 44032: 0x8786,
	45532 - 44032: 0xB3FD,
	45533 - 44032: 0xB3FE,
	45534 - 44032: 0x8787,
	45535 - 44032: 0xB4A1,
	45536 - 44032: 0x8788,
	45537 - 44032: 0x8789,
	45538 - 44032: 0x878A,
	45539 - 44032: 0x878B,
	45540 - 44032: 0x878C,
	45541 - 44032: 0x878D,
	45542 - 44032: 0x878E,
	45543 - 44032: 0x878F,
	45544 - 44032: 0xB4A2,
	45545 - 44032: 0xB4A3,
	45546 - 44032: 0x8790,
	45547 - 44032: 0x8791,
	45548 - 44032: 0xB4A4,
	45549 - 44032: 0x8792,
	45550 - 44032: 0x8793,
	45551 - 44032: 0x8794,
	45552 - 44032: 0xB4A5,
	45553 - 44032: 0x8795,
	45554 - 44032: 0x8796,
	45555 - 44032: 0x8797,
	45556 - 44032: 0x8798,
	45557 - 44032: 0x8799,
	45558 - 44032: 0x879A,
	45559 - 44032: 0x879B,
	45560 - 44032: 0x879C,
	45561 - 44032: 0xB4A6,
	45562 - 44032: 0x879D,
	45563 - 44032: 0xB4A7,
	45564 - 44032: 0x879E,
	45565 - 44032: 0xB4A8,
	45566 - 44032: 0x879F,
	45567 - 44032: 0x87A0,
	45568 - 44032: 0x87A1,
	45569 - 44032: 0x87A2,
	45570 - 44032: 0x87A3,
	45571 - 44032: 0x87A4,
	45572 - 44032: 0xB4A9,
	45573 - 44032: 0xB4AA,
	45574 - 44032: 0x87A5,
	45575 - 44032: 0x87A6,
	45576 - 44032: 0xB4AB,
	45577 - 44032: 0x87A7,
	45578 - 44032: 0x87A8,
	45579 - 44032: 0xB4AC,
	45580 - 44032: 0xB4AD,
	45581 - 44032: 0x87A9,
	45582 - 44032: 0x87AA,
	45583 - 44032: 0x87AB,
	45584 - 44032: 0x87AC,
	45585 - 44032: 0x87AD,
	45586 - 44032: 0x87AE,
	45587 - 44032: 0x87AF,
	45588 - 44032: 0xB4AE,
	45589 - 44032: 0xB4AF,
	45590 - 44032: 0x87B0,
	45591 - 44032: 0xB4B0,
	45592 - 44032: 0x87B1,
	45593 - 44032: 0xB4B1,
	45594 - 44032: 0x87B2,
	45595 - 44032: 0x87B3,
	45596 - 44032: 0x87B4,
	45597 - 44032: 0x87B5,
	45598 - 44032: 0x87B6,
	45599 - 44032: 0x87B7,
	45600 - 44032: 0xB4B2,
	45601 - 44032: 0x87B8,
	45602 - 44032: 0x87B9,
	45603 - 44032: 0x87BA,
	45604 - 44032: 0x87BB,
	45605 - 44032: 0x87BC,
	45606 - 44032: 0x87BD,
	45607 - 44032: 0x87BE,
	45608 - 44032: 0x87BF,
	45609 - 44032: 0x87C0,
	45610 - 44032: 0x87C1,
	45611 - 44032: 0x87C2,
	45612 - 44032: 0x87C3,
	45613 - 44032: 0x87C4,
	45614 - 44032: 0x87C5,
	45615 - 44032: 0x87C6,
	45616 - 44032: 0x87C7,
	45617 - 44032: 0x87C8,
	45618 - 44032: 0x87C9,
	45619 - 44032: 0x87CA,
	45620 - 44032: 0xB4B3,
	45621 - 44032: 0x87CB,
	45622 - 44032: 0x87CC,
	45623 - 44032: 0x87CD,
	45624 - 44032: 0x87CE,
	45625 - 44032: 0x87CF,
	45626 - 44032: 0x87D0,
	45627 - 44032: 0x87D1,
	45628 - 44032: 0xB4B4,
	45629 - 44032: 0x87D2,
	45630 - 44032: 0x87D3,
	45631 - 44032: 0x87D4,
	45632 - 44032: 0x87D5,
	45633 - 44032: 0x87D6,
	45634 - 44032: 0x87D7,
	45635 - 44032: 0x87D8,
	45636 - 44032: 0x87D9,
	45637 - 44032: 0x87DA,
	45638 - 44032: 0x87DB,
	45639 - 44032: 0x87DC,
	45640 - 44032: 0x87DD,
	45641 - 44032: 0x87DE,
	45642 - 44032: 0x87DF,
	45643 - 44032: 0x87E0,
	45644 - 44032: 0x87E1,
	45645 - 44032: 0x87E2,
	45646 - 44032: 0x87E3,
	45647 - 44032: 0x87E4,
	45648 - 44032: 0x87E5,
	45649 - 44032: 0x87E6,
	45650 - 44032: 0x87E7,
	45651 - 44032: 0x87E8,
	45652 - 44032: 0x87E9,
	45653 - 44032: 0x87EA,
	45654 - 44032: 0x87EB,
	45655 - 44032: 0x87EC,
	45656 - 44032: 0xB4B5,
	45657 - 44032: 0x87ED,
	45658 - 44032: 0x87EE,
	45659 - 44032: 0x87EF,
	45660 - 44032: 0xB4B6,
	45661 - 44032: 0x87F0,
	45662 - 44032: 0x87F1,
	45663 - 44032: 0x87F2,
	45664 - 44032: 0xB4B7,
	45665 - 44032: 0x87F3,
	45666 - 44032: 0x87F4,
	45667 - 44032: 0x87F5,
	45668 - 44032: 0x87F6,
	45669 - 44032: 0x87F7,
	45670 - 44032: 0x87F8,
	45671 - 44032: 0x87F9,
	45672 - 44032: 0xB4B8,
	45673 - 44032: 0xB4B9,
	45674 - 44032: 0x87FA,
	45675 - 44032: 0x87FB,
	45676 - 44032: 0x87FC,
	45677 - 44032: 0x87FD,
	45678 - 44032: 0x87FE,
	45679 - 44032: 0x8841,
	45680 - 44032: 0x8842,
	45681 - 44032: 0x8843,
	45682 - 44032: 0x8844,
	45683 - 44032: 0x8845,
	45684 - 44032: 0xB4BA,
	45685 - 44032: 0xB4BB,
	45686 - 44032: 0x8846,
	45687 - 44032: 0x8847,
	45688 - 44032: 0x8848,
	45689 - 44032: 0x8849,
	45690 - 44032: 0x884A,
	45691 - 44032: 0x884B,
	45692 - 44032: 0xB4BC,
	45693 - 44032: 0x884C,
	45694 - 44032: 0x884D,
	45695 - 44032: 0x884E,
	45696 - 44032: 0x884F,
	45697 - 44032: 0x8850,
	45698 - 44032: 0x8851,
	45699 - 44032: 0x8852,
	45700 - 44032: 0xB4BD,
	45701 - 44032: 0xB4BE,
	45702 - 44032: 0x8853,
	45703 - 44032: 0x8854,
	45704 - 44032: 0x8855,
	45705 - 44032: 0xB4BF,
	45706 - 44032: 0x8856,
	45707 - 44032: 0x8857,
	45708 - 44032: 0x8858,
	45709 - 44032: 0x8859,
	45710 - 44032: 0x885A,
	45711 - 44032: 0x8861,
	45712 - 44032: 0xB4C0,
	45713 - 44032: 0xB4C1,
	45714 - 44032: 0x8862,
	45715 - 44032: 0x8863,
	45716 - 44032: 0xB4C2,
	45717 - 44032: 0x8864,
	45718 - 44032: 0x8865,
	45719 - 44032: 0x8866,
	45720 - 44032: 0xB4C3,
	45721 - 44032: 0xB4C4,
	45722 - 44032: 0xB4C5,
	45723 - 44032: 0x8867,
	45724 - 44032: 0x8868,
	45725 - 44032: 0x8869,
	45726 - 44032: 0x886A,
	45727 - 44032: 0x886B,
	45728 - 44032: 0xB4C6,
	45729 - 44032: 0xB4C7,
	45730 - 44032: 0x886C,
	45731 - 44032: 0xB4C8,
	45732 - 44032: 0x886D,
	45733 - 44032: 0xB4C9,
	45734 - 44032: 0xB4CA,
	45735 - 44032: 0x886E,
	45736 - 44032: 0x886F,
	45737 - 44032: 0x8870,
	45738 - 44032: 0xB4CB,
	45739 - 44032: 0x8871,
	45740 - 44032: 0xB4CC,
	45741 - 44032: 0x8872,
	45742 - 44032: 0x8873,
	45743 - 44032: 0x8874,
	45744 - 44032: 0xB4CD,
	45745 - 44032: 0x8875,
	45746 - 44032: 0x8876,
	45747 - 44032: 0x8877,
	45748 - 44032: 0xB4CE,
	45749 - 44032: 0x8878,
	45750 - 44032: 0x8879,
	45751 - 44032: 0x887A,
	45752 - 44032: 0x8881,
	45753 - 44032: 0x8882,
	45754 - 44032: 0x8883,
	45755 - 44032: 0x8884,
	45756 - 44032: 0x8885,
	45757 - 44032: 0x8886,
	45758 - 44032: 0x8887,
	45759 - 44032: 0x8888,
	45760 - 44032: 0x8889,
	45761 - 44032: 0x888A,
	45762 - 44032: 0x888B,
	45763 - 44032: 0x888C,
	45764 - 44032: 0x888D,
	45765 - 44032: 0x888E,
	45766 - 44032: 0x888F,
	45767 - 44032: 0x8890,
	45768 - 44032: 0xB4CF,
	45769 - 44032: 0xB4D0,
	45770 - 44032: 0x8891,
	45771 - 44032: 0x8892,
	45772 - 44032: 0xB4D1,
	45773 - 44032: 0x8893,
	45774 - 44032: 0x8894,
	45775 - 44032: 0x8895,
	45776 - 44032: 0xB4D2,
	45777 - 44032: 0x8896,
	45778 - 44032: 0xB4D3,
	45779 - 44032: 0x8897,
	45780 - 44032: 0x8898,
	45781 - 44032: 0x8899,
	45782 - 44032: 0x889A,
	45783 - 44032: 0x889B,
	45784 - 44032: 0xB4D4,
	45785 - 44032: 0xB4D5,
	45786 - 44032: 0x889C,
	45787 - 44032: 0xB4D6,
	45788 - 44032: 0x889D,
	45789 - 44032: 0xB4D7,
	45790 - 44032: 0x889E,
	45791 - 44032: 0x889F,
	45792 - 44032: 0x88A0,
	45793 - 44032: 0x88A1,
	45794 - 44032: 0xB4D8,
	45795 - 44032: 0x88A2,
	45796 - 44032: 0xB4D9,
	45797 - 44032: 0xB4DA,
	45798 - 44032: 0xB4DB,
	45799 - 44032: 0x88A3,
	45800 - 44032: 0xB4DC,
	45801 - 44032: 0x88A4,
	45802 - 44032: 0x88A5,
	45803 - 44032: 0xB4DD,
	45804 - 44032: 0xB4DE,
	45805 - 44032: 0xB4DF,
	45806 - 44032: 0xB4E0,
	45807 - 44032: 0xB4E1,
	45808 - 44032: 0x88A6,
	45809 - 44032: 0x88A7,
	45810 - 44032: 0x88A8,
	45811 - 44032: 0xB4E2,
	45812 - 44032: 0xB4E3,
	45813 - 44032: 0xB4E4,
	45814 - 44032: 0x88A9,
	45815 - 44032: 0xB4E5,
	45816 - 44032: 0xB4E6,
	45817 - 44032: 0xB4E7,
	45818 - 44032: 0xB4E8,
	45819 - 44032: 0xB4E9,
	45820 - 44032: 0x88AA,
	45821 - 44032: 0x88AB,
	45822 - 44032: 0x88AC,
	45823 - 44032: 0xB4EA,
	45824 - 44032: 0xB4EB,
	45825 - 44032: 0xB4EC,
	45826 - 44032: 0x88AD,
	45827 - 44032: 0x88AE,
	45828 - 44032: 0xB4ED,
	45829 - 44032: 0x88AF,
	45830 - 44032: 0x88B0,
	45831 - 44032: 0x88B1,
	45832 - 44032: 0xB4EE,
	45833 - 44032: 0x88B2,
	45834 - 44032: 0x88B3,
	45835 - 44032: 0x88B4,
	45836 - 44032: 0x88B5,
	45837 - 44032: 0x88B6,
	45838 - 44032: 0x88B7,
	45839 - 44032: 0x88B8,
	45840 - 44032: 0xB4EF,
	45841 - 44032: 0xB4F0,
	45842 - 44032: 0x88B9,
	45843 - 44032: 0xB4F1,
	45844 - 44032: 0xB4F2,
	45845 - 44032: 0xB4F3,
	45846 - 44032: 0x88BA,
	45847 - 44032: 0x88BB,
	45848 - 44032: 0x88BC,
	45849 - 44032: 0x88BD,
	45850 - 44032: 0x88BE,
	45851 - 44032: 0x88BF,
	45852 - 44032: 0xB4F4,
	45853 - 44032: 0x88C0,
	45854 - 44032: 0x88C1,
	45855 - 44032: 0x88C2,
	45856 - 44032: 0x88C3,
	45857 - 44032: 0x88C4,
	45858 - 44032: 0x88C5,
	45859 - 44032: 0x88C6,
	45860 - 44032: 0x88C7,
	45861 - 44032: 0x88C8,
	45862 - 44032: 0x88C9,
	45863 - 44032: 0x88CA,
	45864 - 44032: 0x88CB,
	45865 - 44032: 0x88CC,
	45866 - 44032: 0x88CD,
	45867 - 44032: 0x88CE,
	45868 - 44032: 0x88CF,
	45869 - 44032: 0x88D0,
	45870 - 44032: 0x88D1,
	45871 - 44032: 0x88D2,
	45872 - 44032: 0x88D3,
	45873 - 44032: 0x88D4,
	45874 - 44032: 0x88D5,
	45875 - 44032: 0x88D6,
	45876 - 44032: 0x88D7,
	45877 - 44032: 0x88D8,
	45878 - 44032: 0x88D9,
	45879 - 44032: 0x88DA,
	45880 - 44032: 0x88DB,
	45881 - 44032: 0x88DC,
	45882 - 44032: 0x88DD,
	45883 - 44032: 0x88DE,
	45884 - 44032: 0x88DF,
	45885 - 44032: 0x88E0,
	45886 - 44032: 0x88E1,
	45887 - 44032: 0x88E2,
	45888 - 44032: 0x88E3,
	45889 - 44032: 0x88E4,
	45890 - 44032: 0x88E5,
	45891 - 44032: 0x88E6,
	45892 - 44032: 0x88E7,
	45893 - 44032: 0x88E8,
	45894 - 44032: 0x88E9,
	45895 - 44032: 0x88EA,
	45896 - 44032: 0x88EB,
	45897 - 44032: 0x88EC,
	45898 - 44032: 0x88ED,
	45899 - 44032: 0x88EE,
	45900 - 44032: 0x88EF,
	45901 - 44032: 0x88F0,
	45902 - 44032: 0x88F1,
	45903 - 44032: 0x88F2,
	45904 - 44032: 0x88F3,
	45905 - 44032: 0x88F4,
	45906 - 44032: 0x88F5,
	45907 - 44032: 0x88F6,
	45908 - 44032: 0xB4F5,
	45909 - 44032: 0xB4F6,
	45910 - 44032: 0xB4F7,
	45911 - 44032: 0x88F7,
	45912 - 44032: 0xB4F8,
	45913 - 44032: 0x88F8,
	45914 - 44032: 0x88F9,
	45915 - 44032: 0xB4F9,
	45916 - 44032: 0xB4FA,
	45917 - 44032: 0x88FA,
	45918 - 44032: 0xB4FB,
	45919 - 44032: 0xB4FC,
	45920 - 44032: 0x88FB,
	45921 - 44032: 0x88FC,
	45922 - 44032: 0x88FD,
	45923 - 44032: 0x88FE,
	45924 - 44032: 0xB4FD,
	45925 - 44032: 0xB4FE,
	45926 - 44032: 0x8941,
	45927 - 44032: 0xB5A1,
	45928 - 44032: 0x8942,
	45929 - 44032: 0xB5A2,
	45930 - 44032: 0x8943,
	45931 - 44032: 0xB5A3,
	45932 - 44032: 0x8944,
	45933 - 44032: 0x8945,
	45934 - 44032: 0xB5A4,
	45935 - 44032: 0x8946,
	45936 - 44032: 0xB5A5,
	45937 - 44032: 0xB5A6,
	45938 - 44032: 0x8947,
	45939 - 44032: 0x8948,
	45940 - 44032: 0xB5A7,
	45941 - 44032: 0x8949,
	45942 - 44032: 0x894A,
	45943 - 44032: 0x894B,
	45944 - 44032: 0xB5A8,
	45945 - 44032: 0x894C,
	45946 - 44032: 0x894D,
	45947 - 44032: 0x894E,
	45948 - 44032: 0x894F,
	45949 - 44032: 0x8950,
	45950 - 44032: 0x8951,
	45951 - 44032: 0x8952,
	45952 - 44032: 0xB5A9,
	45953 - 44032: 0xB5AA,
	45954 - 44032: 0x8953,
	45955 - 44032: 0xB5AB,
	45956 - 44032: 0xB5AC,
	45957 - 44032: 0xB5AD,
	45958 - 44032: 0x8954,
	45959 - 44032: 0x8955,
	45960 - 44032: 0x8956,
	45961 - 44032: 0x8957,
	45962 - 44032: 0x8958,
	45963 - 44032: 0x8959,
	45964 - 44032: 0xB5AE,
	45965 - 44032: 0x895A,
	45966 - 44032: 0x8961,
	45967 - 44032: 0x8962,
	45968 - 44032: 0xB5AF,
	45969 - 44032: 0x8963,
	45970 - 44032: 0x8964,
	45971 - 44032: 0x8965,
	45972 - 44032: 0xB5B0,
	45973 - 44032: 0x8966,
	45974 - 44032: 0x8967,
	45975 - 44032: 0x8968,
	45976 - 44032: 0x8969,
	45977 - 44032: 0x896A,
	45978 - 44032: 0x896B,
	45979 - 44032: 0x896C,
	45980 - 44032: 0x896D,
	45981 - 44032: 0x896E,
	45982 - 44032: 0x896F,
	45983 - 44032: 0x8970,
	45984 - 44032: 0xB5B1,
	45985 - 44032: 0xB5B2,
	45986 - 44032: 0x8971,
	45987 - 44032: 0x8972,
	45988 - 44032: 0x8973,
	45989 - 44032: 0x8974,
	45990 - 44032: 0x8975,
	45991 - 44032: 0x8976,
	45992 - 44032: 0xB5B3,
	45993 - 44032: 0x8977,
	45994 - 44032: 0x8978,
	45995 - 44032: 0x8979,
	45996 - 44032: 0xB5B4,
	45997 - 44032: 0x897A,
	45998 - 44032: 0x8981,
	45999 - 44032: 0x8982,
	46000 - 44032: 0x8983,
	46001 - 44032: 0x8984,
	46002 - 44032: 0x8985,
	46003 - 44032: 0x8986,
	46004 - 44032: 0x8987,
	46005 - 44032: 0x8988,
	46006 - 44032: 0x8989,
	46007 - 44032: 0x898A,
	46008 - 44032: 0x898B,
	46009 - 44032: 0x898C,
	46010 - 44032: 0x898D,
	46011 - 44032: 0x898E,
	46012 - 44032: 0x898F,
	46013 - 44032: 0x8990,
	46014 - 44032: 0x8991,
	46015 - 44032: 0x8992,
	46016 - 44032: 0x8993,
	46017 - 44032: 0x8994,
	46018 - 44032: 0x8995,
	46019 - 44032: 0x8996,
	46020 - 44032: 0xB5B5,
	46021 - 44032: 0xB5B6,
	46022 - 44032: 0x8997,
	46023 - 44032: 0x8998,
	46024 - 44032: 0xB5B7,
	46025 - 44032: 0x8999,
	46026 - 44032: 0x899A,
	46027 - 44032: 0xB5B8,
	46028 - 44032: 0xB5B9,
	46029 - 44032: 0x899B,
	46030 - 44032: 0xB5BA,
	46031 - 44032: 0x899C,
	46032 - 44032: 0xB5BB,
	46033 - 44032: 0x899D,
	46034 - 44032: 0x899E,
	46035 - 44032: 0x899F,
	46036 - 44032: 0xB5BC,
	46037 - 44032: 0xB5BD,
	46038 - 44032: 0x89A0,
	46039 - 44032: 0xB5BE,
	46040 - 44032: 0x89A1,
	46041 - 44032: 0xB5BF,
	46042 - 44032: 0x89A2,
	46043 - 44032: 0xB5C0,
	46044 - 44032: 0x89A3,
	46045 - 44032: 0xB5C1,
	46046 - 44032: 0x89A4,
	46047 - 44032: 0x89A5,
	46048 - 44032: 0xB5C2,
	46049 - 44032: 0x89A6,
	46050 - 44032: 0x89A7,
	46051 - 44032: 0x89A8,
	46052 - 44032: 0xB5C3,
	46053 - 44032: 0x89A9,
	46054 - 44032: 0x89AA,
	46055 - 44032: 0x89AB,
	46056 - 44032: 0xB5C4,
	46057 - 44032: 0x89AC,
	46058 - 44032: 0x89AD,
	46059 - 44032: 0x89AE,
	46060 - 44032: 0x89AF,
	46061 - 44032: 0x89B0,
	46062 - 44032: 0x89B1,
	46063 - 44032: 0x89B2,
	46064 - 44032: 0x89B3,
	46065 - 44032: 0x89B4,
	46066 - 44032: 0x89B5,
	46067 - 44032: 0x89B6,
	46068 - 44032: 0x89B7,
	46069 - 44032: 0x89B8,
	46070 - 44032: 0x89B9,
	46071 - 44032: 0x89BA,
	46072 - 44032: 0x89BB,
	46073 - 44032: 0x89BC,
	46074 - 44032: 0x89BD,
	46075 - 44032: 0x89BE,
	46076 - 44032: 0xB5C5,
	46077 - 44032: 0x89BF,
	46078 - 44032: 0x89C0,
	46079 - 44032: 0x89C1,
	46080 - 44032: 0x89C2,
	46081 - 44032: 0x89C3,
	46082 - 44032: 0x89C4,
	46083 - 44032: 0x89C5,
	46084 - 44032: 0x89C6,
	46085 - 44032: 0x89C7,
	46086 - 44032: 0x89C8,
	46087 - 44032: 0x89C9,
	46088 - 44032: 0x89CA,
	46089 - 44032: 0x89CB,
	46090 - 44032: 0x89CC,
	46091 - 44032: 0x89CD,
	46092 - 44032: 0x89CE,
	46093 - 44032: 0x89CF,
	46094 - 44032: 0x89D0,
	46095 - 44032: 0x89D1,
	46096 - 44032: 0xB5C6,
	46097 - 44032: 0x89D2,
	46098 - 44032: 0x89D3,
	46099 - 44032: 0x89D4,
	46100 - 44032: 0x89D5,
	46101 - 44032: 0x89D6,
	46102 - 44032: 0x89D7,
	46103 - 44032: 0x89D8,
	46104 - 44032: 0xB5C7,
	46105 - 44032: 0x89D9,
	46106 - 44032: 0x89DA,
	46107 - 44032: 0x89DB,
	46108 - 44032: 0xB5C8,
	46109 - 44032: 0x89DC,
	46110 - 44032: 0x89DD,
	46111 - 44032: 0x89DE,
	46112 - 44032: 0xB5C9,
	46113 - 44032: 0x89DF,
	46114 - 44032: 0x89E0,
	46115 - 44032: 0x89E1,
	46116 - 44032: 0x89E2,
	46117 - 44032: 0x89E3,
	46118 - 44032: 0x89E4,
	46119 - 44032: 0x89E5,
	46120 - 44032: 0xB5CA,
	46121 - 44032: 0xB5CB,
	46122 - 44032: 0x89E6,
	46123 - 44032: 0xB5CC,
	46124 - 44032: 0x89E7,
	46125 - 44032: 0x89E8,
	46126 - 44032: 0x89E9,
	46127 - 44032: 0x89EA,
	46128 - 44032: 0x89EB,
	46129 - 44032: 0x89EC,
	46130 - 44032: 0x89ED,
	46131 - 44032: 0x89EE,
	46132 - 44032: 0xB5CD,
	46133 - 44032: 0x89EF,
	46134 - 44032: 0x89F0,
	46135 - 44032: 0x89F1,
	46136 - 44032: 0x89F2,
	46137 - 44032: 0x89F3,
	46138 - 44032: 0x89F4,
	46139 - 44032: 0x89F5,
	46140 - 44032: 0x89F6,
	46141 - 44032: 0x89F7,
	46142 - 44032: 0x89F8,
	46143 - 44032: 0x89F9,
	46144 - 44032: 0x89FA,
	46145 - 44032: 0x89FB,
	46146 - 44032: 0x89FC,
	46147 - 44032: 0x89FD,
	46148 - 44032: 0x89FE,
	46149 - 44032: 0x8A41,
	46150 - 44032: 0x8A42,
	46151 - 44032: 0x8A43,
	46152 - 44032: 0x8A44,
	46153 - 44032: 0x8A45,
	46154 - 44032: 0x8A46,
	46155 - 44032: 0x8A47,
	46156 - 44032: 0x8A48,
	46157 - 44032: 0x8A49,
	46158 - 44032: 0x8A4A,
	46159 - 44032: 0x8A4B,
	46160 - 44032: 0xB5CE,
	46161 - 44032: 0xB5CF,
	46162 - 44032: 0x8A4C,
	46163 - 44032: 0x8A4D,
	46164 - 44032: 0xB5D0,
	46165 - 44032: 0x8A4E,
	46166 - 44032: 0x8A4F,
	46167 - 44032: 0x8A50,
	46168 - 44032: 0xB5D1,
	46169 - 44032: 0x8A51,
	46170 - 44032: 0x8A52,
	46171 - 44032: 0x8A53,
	46172 - 44032: 0x8A54,
	46173 - 44032: 0x8A55,
	46174 - 44032: 0x8A56,
	46175 - 44032: 0x8A57,
	46176 - 44032: 0xB5D2,
	46177 - 44032: 0xB5D3,
	46178 - 44032: 0x8A58,
	46179 - 44032: 0xB5D4,
	46180 - 44032: 0x8A59,
	46181 - 44032: 0xB5D5,
	46182 - 44032: 0x8A5A,
	46183 - 44032: 0x8A61,
	46184 - 44032: 0x8A62,
	46185 - 44032: 0x8A63,
	46186 - 44032: 0x8A64,
	46187 - 44032: 0x8A65,
	46188 - 44032: 0xB5D6,
	46189 - 44032: 0x8A66,
	46190 - 44032: 0x8A67,
	46191 - 44032: 0x8A68,
	46192 - 44032: 0x8A69,
	46193 - 44032: 0x8A6A,
	46194 - 44032: 0x8A6B,
	46195 - 44032: 0x8A6C,
	46196 - 44032: 0x8A6D,
	46197 - 44032: 0x8A6E,
	46198 - 44032: 0x8A6F,
	46199 - 44032: 0x8A70,
	46200 - 44032: 0x8A71,
	46201 - 44032: 0x8A72,
	46202 - 44032: 0x8A73,
	46203 - 44032: 0x8A74,
	46204 - 44032: 0x8A75,
	46205 - 44032: 0x8A76,
	46206 - 44032: 0x8A77,
	46207 - 44032: 0x8A78,
	46208 - 44032: 0xB5D7,
	46209 - 44032: 0x8A79,
	46210 - 44032: 0x8A7A,
	46211 - 44032: 0x8A81,
	46212 - 44032: 0x8A82,
	46213 - 44032: 0x8A83,
	46214 - 44032: 0x8A84,
	46215 - 44032: 0x8A85,
	46216 - 44032: 0xB5D8,
	46217 - 44032: 0x8A86,
	46218 - 44032: 0x8A87,
	46219 - 44032: 0x8A88,
	46220 - 44032: 0x8A89,
	46221 - 44032: 0x8A8A,
	46222 - 44032: 0x8A8B,
	46223 - 44032: 0x8A8C,
	46224 - 44032: 0x8A8D,
	46225 - 44032: 0x8A8E,
	46226 - 44032: 0x8A8F,
	46227 - 44032: 0x8A90,
	46228 - 44032: 0x8A91,
	46229 - 44032: 0x8A92,
	46230 - 44032: 0x8A93,
	46231 - 44032: 0x8A94,
	46232 - 44032: 0x8A95,
	46233 - 44032: 0x8A96,
	46234 - 44032: 0x8A97,
	46235 - 44032: 0x8A98,
	46236 - 44032: 0x8A99,
	46237 - 44032: 0xB5D9,
	46238 - 44032: 0x8A9A,
	46239 - 44032: 0x8A9B,
	46240 - 44032: 0x8A9C,
	46241 - 44032: 0x8A9D,
	46242 - 44032: 0x8A9E,
	46243 - 44032: 0x8A9F,
	46244 - 44032: 0xB5DA,
	46245 - 44032: 0x8AA0,
	46246 - 44032: 0x8AA1,
	46247 - 44032: 0x8AA2,
	46248 - 44032: 0xB5DB,
	46249 - 44032: 0x8AA3,
	46250 - 44032: 0x8AA4,
	46251 - 44032: 0x8AA5,
	46252 - 44032: 0xB5DC,
	46253 - 44032: 0x8AA6,
	46254 - 44032: 0x8AA7,
	46255 - 44032: 0x8AA8,
	46256 - 44032: 0x8AA9,
	46257 - 44032: 0x8AAA,
	46258 - 44032: 0x8AAB,
	46259 - 44032: 0x8AAC,
	46260 - 44032: 0x8AAD,
	46261 - 44032: 0xB5DD,
	46262 - 44032: 0x8AAE,
	46263 - 44032: 0xB5DE,
	46264 - 44032: 0x8AAF,
	46265 - 44032: 0xB5DF,
	46266 - 44032: 0x8AB0,
	46267 - 44032: 0x8AB1,
	46268 - 44032: 0x8AB2,
	46269 - 44032: 0x8AB3,
	46270 - 44032: 0x8AB4,
	46271 - 44032: 0x8AB5,
	46272 - 44032: 0xB5E0,
	46273 - 44032: 0x8AB6,
	46274 - 44032: 0x8AB7,
	46275 - 44032: 0x8AB8,
	46276 - 44032: 0xB5E1,
	46277 - 44032: 0x8AB9,
	46278 - 44032: 0x8ABA,
	46279 - 44032: 0x8ABB,
	46280 - 44032: 0xB5E2,
	46281 - 44032: 0x8ABC,
	46282 - 44032: 0x8ABD,
	46283 - 44032: 0x8ABE,
	46284 - 44032: 0x8ABF,
	46285 - 44032: 0x8AC0,
	46286 - 44032: 0x8AC1,
	46287 - 44032: 0x8AC2,
	46288 - 44032: 0xB5E3,
	46289 - 44032: 0x8AC3,
	46290 - 44032: 0x8AC4,
	46291 - 44032: 0x8AC5,
	46292 - 44032: 0x8AC6,
	46293 - 44032: 0xB5E4,
	46294 - 44032: 0x8AC7,
	46295 - 44032: 0x8AC8,
	46296 - 44032: 0x8AC9,
	46297 - 44032: 0x8ACA,
	46298 - 44032: 0x8ACB,
	46299 - 44032: 0x8ACC,
	46300 - 44032: 0xB5E5,
	46301 - 44032: 0xB5E6,
	46302 - 44032: 0x8ACD,
	46303 - 44032: 0x8ACE,
	46304 - 44032: 0xB5E7,
	46305 - 44032: 0x8ACF,
	46306 - 44032: 0x8AD0,
	46307 - 44032: 0xB5E8,
	46308 - 44032: 0xB5E9,
	46309 - 44032: 0x8AD1,
	46310 - 44032: 0xB5EA,
	46311 - 44032: 0x8AD2,
	46312 - 44032: 0x8AD3,
	46313 - 44032: 0x8AD4,
	46314 - 44032: 0x8AD5,
	46315 - 44032: 0x8AD6,
	46316 - 44032: 0xB5EB,
	46317 - 44032: 0xB5EC,
	46318 - 44032: 0x8AD7,
	46319 - 44032: 0xB5ED,
	46320 - 44032: 0x8AD8,
	46321 - 44032: 0xB5EE,
	46322 - 44032: 0x8AD9,
	46323 - 44032: 0x8ADA,
	46324 - 44032: 0x8ADB,
	46325 - 44032: 0x8ADC,
	46326 - 44032: 0x8ADD,
	46327 - 44032: 0x8ADE,
	46328 - 44032: 0xB5EF,
	46329 - 44032: 0x8ADF,
	46330 - 44032: 0x8AE0,
	46331 - 44032: 0x8AE1,
	46332 - 44032: 0x8AE2,
	46333 - 44032: 0x8AE3,
	46334 - 44032: 0x8AE4,
	46335 - 44032: 0x8AE5,
	46336 - 44032: 0x8AE6,
	46337 - 44032: 0x8AE7,
	46338 - 44032: 0x8AE8,
	46339 - 44032: 0x8AE9,
	46340 - 44032: 0x8AEA,
	46341 - 44032: 0x8AEB,
	46342 - 44032: 0x8AEC,
	46343 - 44032: 0x8AED,
	46344 - 44032: 0x8AEE,
	46345 - 44032: 0x8AEF,
	46346 - 44032: 0x8AF0,
	46347 - 44032: 0x8AF1,
	46348 - 44032: 0x8AF2,
	46349 - 44032: 0x8AF3,
	46350 - 44032: 0x8AF4,
	46351 - 44032: 0x8AF5,
	46352 - 44032: 0x8AF6,
	46353 - 44032: 0x8AF7,
	46354 - 44032: 0x8AF8,
	46355 - 44032: 0x8AF9,
	46356 - 44032: 0xB5F0,
	46357 - 44032: 0xB5F1,
	46358 - 44032: 0x8AFA,
	46359 - 44032: 0x8AFB,
	46360 - 44032: 0xB5F2,
	46361 - 44032: 0x8AFC,
	46362 - 44032: 0x8AFD,
	46363 - 44032: 0xB5F3,
	46364 - 44032: 0xB5F4,
	46365 - 44032: 0x8AFE,
	46366 - 44032: 0x8B41,
	46367 - 44032: 0x8B42,
	46368 - 44032: 0x8B43,
	46369 - 44032: 0x8B44,
	46370 - 44032: 0x8B45,
	46371 - 44032: 0x8B46,
	46372 - 44032: 0xB5F5,
	46373 - 44032: 0xB5F6,
	46374 - 44032: 0x8B47,
	46375 - 44032: 0xB5F7,
	46376 - 44032: 0xB5F8,
	46377 - 44032: 0xB5F9,
	46378 - 44032: 0xB5FA,
	46379 - 44032: 0x8B48,
	46380 - 44032: 0x8B49,
	46381 - 44032: 0x8B4A,
	46382 - 44032: 0x8B4B,
	46383 - 44032: 0x8B4C,
	46384 - 44032: 0xB5FB,
	46385 - 44032: 0xB5FC,
	46386 - 44032: 0x8B4D,
	46387 - 44032: 0x8B4E,
	46388 - 44032: 0xB5FD,
	46389 - 44032: 0x8B4F,
	46390 - 44032: 0x8B50,
	46391 - 44032: 0x8B51,
	46392 - 44032: 0xB5FE,
	46393 - 44032: 0x8B52,
	46394 - 44032: 0x8B53,
	46395 - 44032: 0x8B54,
	46396 - 44032: 0x8B55,
	46397 - 44032: 0x8B56,
	46398 - 44032: 0x8B57,
	46399 - 44032: 0x8B58,
	46400 - 44032: 0xB6A1,
	46401 - 44032: 0xB6A2,
	46402 - 44032: 0x8B59,
	46403 - 44032: 0xB6A3,
	46404 - 44032: 0xB6A4,
	46405 - 44032: 0xB6A5,
	46406 - 44032: 0x8B5A,
	46407 - 44032: 0x8B61,
	46408 - 44032: 0x8B62,
	46409 - 44032: 0x8B63,
	46410 - 44032: 0x8B64,
	46411 - 44032: 0xB6A6,
	46412 - 44032: 0xB6A7,
	46413 - 44032: 0xB6A8,
	46414 - 44032: 0x8B65,
	46415 - 44032: 0x8B66,
	46416 - 44032: 0xB6A9,
	46417 - 44032: 0x8B67,
	46418 - 44032: 0x8B68,
	46419 - 44032: 0x8B69,
	46420 - 44032: 0xB6AA,
	46421 - 44032: 0x8B6A,
	46422 - 44032: 0x8B6B,
	46423 - 44032: 0x8B6C,
	46424 - 44032: 0x8B6D,
	46425 - 44032: 0x8B6E,
	46426 - 44032: 0x8B6F,
	46427 - 44032: 0x8B70,
	46428 - 44032: 0xB6AB,
	46429 - 44032: 0xB6AC,
	46430 - 44032: 0x8B71,
	46431 - 44032: 0xB6AD,
	46432 - 44032: 0xB6AE,
	46433 - 44032: 0xB6AF,
	46434 - 44032: 0x8B72,
	46435 - 44032: 0x8B73,
	46436 - 44032: 0x8B74,
	46437 - 44032: 0x8B75,
	46438 - 44032: 0x8B76,
	46439 - 44032: 0x8B77,
	46440 - 44032: 0x8B78,
	46441 - 44032: 0x8B79,
	46442 - 44032: 0x8B7A,
	46443 - 44032: 0x8B81,
	46444 - 44032: 0x8B82,
	46445 - 44032: 0x8B83,
	46446 - 44032: 0x8B84,
	46447 - 44032: 0x8B85,
	46448 - 44032: 0x8B86,
	46449 - 44032: 0x8B87,
	46450 - 44032: 0x8B88,
	46451 - 44032: 0x8B89,
	46452 - 44032: 0x8B8A,
	46453 - 44032: 0x8B8B,
	46454 - 44032: 0x8B8C,
	46455 - 44032: 0x8B8D,
	46456 - 44032: 0x8B8E,
	46457 - 44032: 0x8B8F,
	46458 - 44032: 0x8B90,
	46459 - 44032: 0x8B91,
	46460 - 44032: 0x8B92,
	46461 - 44032: 0x8B93,
	46462 - 44032: 0x8B94,
	46463 - 44032: 0x8B95,
	46464 - 44032: 0x8B96,
	46465 - 44032: 0x8B97,
	46466 - 44032: 0x8B98,
	46467 - 44032: 0x8B99,
	46468 - 44032: 0x8B9A,
	46469 - 44032: 0x8B9B,
	46470 - 44032: 0x8B9C,
	46471 - 44032: 0x8B9D,
	46472 - 44032: 0x8B9E,
	46473 - 44032: 0x8B9F,
	46474 - 44032: 0x8BA0,
	46475 - 44032: 0x8BA1,
	46476 - 44032: 0x8BA2,
	46477 - 44032: 0x8BA3,
	46478 - 44032: 0x8BA4,
	46479 - 44032: 0x8BA5,
	46480 - 44032: 0x8BA6,
	46481 - 44032: 0x8BA7,
	46482 - 44032: 0x8BA8,
	46483 - 44032: 0x8BA9,
	46484 - 44032: 0x8BAA,
	46485 - 44032: 0x8BAB,
	46486 - 44032: 0x8BAC,
	46487 - 44032: 0x8BAD,
	46488 - 44032: 0x8BAE,
	46489 - 44032: 0x8BAF,
	46490 - 44032: 0x8BB0,
	46491 - 44032: 0x8BB1,
	46492 - 44032: 0x8BB2,
	46493 - 44032: 0x8BB3,
	46494 - 44032: 0x8BB4,
	46495 - 44032: 0x8BB5,
	46496 - 44032: 0xB6B0,
	46497 - 44032: 0xB6B1,
	46498 - 44032: 0x8BB6,
	46499 - 44032: 0x8BB7,
	46500 - 44032: 0xB6B2,
	46501 - 44032: 0x8BB8,
	46502 - 44032: 0x8BB9,
	46503 - 44032: 0x8BBA,
	46504 - 44032: 0xB6B3,
	46505 - 44032: 0x8BBB,
	46506 - 44032: 0xB6B4,
	46507 - 44032: 0xB6B5,
	46508 - 44032: 0x8BBC,
	46509 - 44032: 0x8BBD,
	46510 - 44032: 0x8BBE,
	46511 - 44032: 0x8BBF,
	46512 - 44032: 0xB6B6,
	46513 - 44032: 0xB6B7,
	46514 - 44032: 0x8BC0,
	46515 - 44032: 0xB6B8,
	46516 - 44032: 0xB6B9,
	46517 - 44032: 0xB6BA,
	46518 - 44032: 0x8BC1,
	46519 - 44032: 0x8BC2,
	46520 - 44032: 0x8BC3,
	46521 - 44032: 0x8BC4,
	46522 - 44032: 0x8BC5,
	46523 - 44032: 0xB6BB,
	46524 - 44032: 0xB6BC,
	46525 - 44032: 0xB6BD,
	46526 - 44032: 0x8BC6,
	46527 - 44032: 0x8BC7,
	46528 - 44032: 0xB6BE,
	46529 - 44032: 0x8BC8,
	46530 - 44032: 0x8BC9,
	46531 - 44032: 0x8BCA,
	46532 - 44032: 0xB6BF,
	46533 - 44032: 0x8BCB,
	46534 - 44032: 0x8BCC,
	46535 - 44032: 0x8BCD,
	46536 - 44032: 0x8BCE,
	46537 - 44032: 0x8BCF,
	46538 - 44032: 0x8BD0,
	46539 - 44032: 0x8BD1,
	46540 - 44032: 0xB6C0,
	46541 - 44032: 0xB6C1,
	46542 - 44032: 0x8BD2,
	46543 - 44032: 0xB6C2,
	46544 - 44032: 0xB6C3,
	46545 - 44032: 0xB6C4,
	46546 - 44032: 0x8BD3,
	46547 - 44032: 0x8BD4,
	46548 - 44032: 0x8BD5,
	46549 - 44032: 0x8BD6,
	46550 - 44032: 0x8BD7,
	46551 - 44032: 0x8BD8,
	46552 - 44032: 0xB6C5,
	46553 - 44032: 0x8BD9,
	46554 - 44032: 0x8BDA,
	46555 - 44032: 0x8BDB,
	46556 - 44032: 0x8BDC,
	46557 - 44032: 0x8BDD,
	46558 - 44032: 0x8BDE,
	46559 - 44032: 0x8BDF,
	46560 - 44032: 0x8BE0,
	46561 - 44032: 0x8BE1,
	46562 - 44032: 0x8BE2,
	46563 - 44032: 0x8BE3,
	46564 - 44032: 0x8BE4,
	46565 - 44032: 0x8BE5,
	46566 - 44032: 0x8BE6,
	46567 - 44032: 0x8BE7,
	46568 - 44032: 0x8BE8,
	46569 - 44032: 0x8BE9,
	46570 - 44032: 0x8BEA,
	46571 - 44032: 0x8BEB,
	46572 - 44032: 0xB6C6,
	46573 - 44032: 0x8BEC,
	46574 - 44032: 0x8BED,
	46575 - 44032: 0x8BEE,
	46576 - 44032: 0x8BEF,
	46577 - 44032: 0x8BF0,
	46578 - 44032: 0x8BF1,
	46579 - 44032: 0x8BF2,
	46580 - 44032: 0x8BF3,
	46581 - 44032: 0x8BF4,
	46582 - 44032: 0x8BF5,
	46583 - 44032: 0x8BF6,
	46584 - 44032: 0x8BF7,
	46585 - 44032: 0x8BF8,
	46586 - 44032: 0x8BF9,
	46587 - 44032: 0x8BFA,
	46588 - 44032: 0x8BFB,
	46589 - 44032: 0x8BFC,
	46590 - 44032: 0x8BFD,
	46591 - 44032: 0x8BFE,
	46592 - 44032: 0x8C41,
	46593 - 44032: 0x8C42,
	46594 - 44032: 0x8C43,
	46595 - 44032: 0x8C44,
	46596 - 44032: 0x8C45,
	46597 - 44032: 0x8C46,
	46598 - 44032: 0x8C47,
	46599 - 44032: 0x8C48,
	46600 - 44032: 0x8C49,
	46601 - 44032: 0x8C4A,
	46602 - 44032: 0x8C4B,
	46603 - 44032: 0x8C4C,
	46604 - 44032: 0x8C4D,
	46605 - 44032: 0x8C4E,
	46606 - 44032: 0x8C4F,
	46607 - 44032: 0x8C50,
	46608 - 44032: 0xB6C7,
	46609 - 44032: 0xB6C8,
	46610 - 44032: 0x8C51,
	46611 - 44032: 0x8C52,
	46612 - 44032: 0xB6C9,
	46613 - 44032: 0x8C53,
	46614 - 44032: 0x8C54,
	46615 - 44032: 0x8C55,
	46616 - 44032: 0xB6CA,
	46617 - 44032: 0x8C56,
	46618 - 44032: 0x8C57,
	46619 - 44032: 0x8C58,
	46620 - 44032: 0x8C59,
	46621 - 44032: 0x8C5A,
	46622 - 44032: 0x8C61,
	46623 - 44032: 0x8C62,
	46624 - 44032: 0x8C63,
	46625 - 44032: 0x8C64,
	46626 - 44032: 0x8C65,
	46627 - 44032: 0x8C66,
	46628 - 44032: 0x8C67,
	46629 - 44032: 0xB6CB,
	46630 - 44032: 0x8C68,
	46631 - 44032: 0x8C69,
	46632 - 44032: 0x8C6A,
	46633 - 44032: 0x8C6B,
	46634 - 44032: 0x8C6C,
	46635 - 44032: 0x8C6D,
	46636 - 44032: 0xB6CC,
	46637 - 44032: 0x8C6E,
	46638 - 44032: 0x8C6F,
	46639 - 44032: 0x8C70,
	46640 - 44032: 0x8C71,
	46641 - 44032: 0x8C72,
	46642 - 44032: 0x8C73,
	46643 - 44032: 0x8C74,
	46644 - 44032: 0xB6CD,
	46645 - 44032: 0x8C75,
	46646 - 44032: 0x8C76,
	46647 - 44032: 0x8C77,
	46648 - 44032: 0x8C78,
	46649 - 44032: 0x8C79,
	46650 - 44032: 0x8C7A,
	46651 - 44032: 0x8C81,
	46652 - 44032: 0x8C82,
	46653 - 44032: 0x8C83,
	46654 - 44032: 0x8C84,
	46655 - 44032: 0x8C85,
	46656 - 44032: 0x8C86,
	46657 - 44032: 0x8C87,
	46658 - 44032: 0x8C88,
	46659 - 44032: 0x8C89,
	46660 - 44032: 0x8C8A,
	46661 - 44032: 0x8C8B,
	46662 - 44032: 0x8C8C,
	46663 - 44032: 0x8C8D,
	46664 - 44032: 0xB6CE,
	46665 - 44032: 0x8C8E,
	46666 - 44032: 0x8C8F,
	46667 - 44032: 0x8C90,
	46668 - 44032: 0x8C91,
	46669 - 44032: 0x8C92,
	46670 - 44032: 0x8C93,
	46671 - 44032: 0x8C94,
	46672 - 44032: 0x8C95,
	46673 - 44032: 0x8C96,
	46674 - 44032: 0x8C97,
	46675 - 44032: 0x8C98,
	46676 - 44032: 0x8C99,
	46677 - 44032: 0x8C9A,
	46678 - 44032: 0x8C9B,
	46679 - 44032: 0x8C9C,
	46680 - 44032: 0x8C9D,
	46681 - 44032: 0x8C9E,
	46682 - 44032: 0x8C9F,
	46683 - 44032: 0x8CA0,
	46684 - 44032: 0x8CA1,
	46685 - 44032: 0x8CA2,
	46686 - 44032: 0x8CA3,
	46687 - 44032: 0x8CA4,
	46688 - 44032: 0x8CA5,
	46689 - 44032: 0x8CA6,
	46690 - 44032: 0x8CA7,
	46691 - 44032: 0x8CA8,
	46692 - 44032: 0xB6CF,
	46693 - 44032: 0x8CA9,
	46694 - 44032: 0x8CAA,
	46695 - 44032: 0x8CAB,
	46696 - 44032: 0xB6D0,
	46697 - 44032: 0x8CAC,
	46698 - 44032: 0x8CAD,
	46699 - 44032: 0x8CAE,
	46700 - 44032: 0x8CAF,
	46701 - 44032: 0x8CB0,
	46702 - 44032: 0x8CB1,
	46703 - 44032: 0x8CB2,
	46704 - 44032: 0x8CB3,
	46705 - 44032: 0x8CB4,
	46706 - 44032: 0x8CB5,
	46707 - 44032: 0x8CB6,
	46708 - 44032: 0x8CB7,
	46709 - 44032: 0x8CB8,
	46710 - 44032: 0x8CB9,
	46711 - 44032: 0x8CBA,
	46712 - 44032: 0x8CBB,
	46713 - 44032: 0x8CBC,
	46714 - 44032: 0x8CBD,
	46715 - 44032: 0x8CBE,
	46716 - 44032: 0x8CBF,
	46717 - 44032: 0x8CC0,
	46718 - 44032: 0x8CC1,
	46719 - 44032: 0x8CC2,
	46720 - 44032: 0x8CC3,
	46721 - 44032: 0x8CC4,
	46722 - 44032: 0x8CC5,
	46723 - 44032: 0x8CC6,
	46724 - 44032: 0x8CC7,
	46725 - 44032: 0x8CC8,
	46726 - 44032: 0x8CC9,
	46727 - 44032: 0x8CCA,
	46728 - 44032: 0x8CCB,
	46729 - 44032: 0x8CCC,
	46730 - 44032: 0x8CCD,
	46731 - 44032: 0x8CCE,
	46732 - 44032: 0x8CCF,
	46733 - 44032: 0x8CD0,
	46734 - 44032: 0x8CD1,
	46735 - 44032: 0x8CD2,
	46736 - 44032: 0x8CD3,
	46737 - 44032: 0x8CD4,
	46738 - 44032: 0x8CD5,
	46739 - 44032: 0x8CD6,
	46740 - 44032: 0x8CD7,
	46741 - 44032: 0x8CD8,
	46742 - 44032: 0x8CD9,
	46743 - 44032: 0x8CDA,
	46744 - 44032: 0x8CDB,
	46745 - 44032: 0x8CDC,
	46746 - 44032: 0x8CDD,
	46747 - 44032: 0x8CDE,
	46748 - 44032: 0xB6D1,
	46749 - 44032: 0xB6D2,
	46750 - 44032: 0x8CDF,
	46751 - 44032: 0x8CE0,
	46752 - 44032: 0xB6D3,
	46753 - 44032: 0x8CE1,
	46754 - 44032: 0x8CE2,
	46755 - 44032: 0x8CE3,
	46756 - 44032: 0xB6D4,
	46757 - 44032: 0x8CE4,
	46758 - 44032: 0x8CE5,
	46759 - 44032: 0x8CE6,
	46760 - 44032: 0x8CE7,
	46761 - 44032: 0x8CE8,
	46762 - 44032: 0x8CE9,
	46763 - 44032: 0xB6D5,
	46764 - 44032: 0xB6D6,
	46765 - 44032: 0x8CEA,
	46766 - 44032: 0x8CEB,
	46767 - 44032: 0x8CEC,
	46768 - 44032: 0x8CED,
	46769 - 44032: 0xB6D7,
	46770 - 44032: 0x8CEE,
	46771 - 44032: 0x8CEF,
	46772 - 44032: 0x8CF0,
	46773 - 44032: 0x8CF1,
	46774 - 44032: 0x8CF2,
	46775 - 44032: 0x8CF3,
	46776 - 44032: 0x8CF4,
	46777 - 44032: 0x8CF5,
	46778 - 44032: 0x8CF6,
	46779 - 44032: 0x8CF7,
	46780 - 44032: 0x8CF8,
	46781 - 44032: 0x8CF9,
	46782 - 44032: 0x8CFA,
	46783 - 44032: 0x8CFB,
	46784 - 44032: 0x8CFC,
	46785 - 44032: 0x8CFD,
	46786 - 44032: 0x8CFE,
	46787 - 44032: 0x8D41,
	46788 - 44032: 0x8D42,
	46789 - 44032: 0x8D43,
	46790 - 44032: 0x8D44,
	46791 - 44032: 0x8D45,
	46792 - 44032: 0x8D46,
	46793 - 44032: 0x8D47,
	46794 - 44032: 0x8D48,
	46795 - 44032: 0x8D49,
	46796 - 44032: 0x8D4A,
	46797 - 44032: 0x8D4B,
	46798 - 44032: 0x8D4C,
	46799 - 44032: 0x8D4D,
	46800 - 44032: 0x8D4E,
	46801 - 44032: 0x8D4F,
	46802 - 44032: 0x8D50,
	46803 - 44032: 0x8D51,
	46804 - 44032: 0xB6D8,
	46805 - 44032: 0x8D52,
	46806 - 44032: 0x8D53,
	46807 - 44032: 0x8D54,
	46808 - 44032: 0x8D55,
	46809 - 44032: 0x8D56,
	46810 - 44032: 0x8D57,
	46811 - 44032: 0x8D58,
	46812 - 44032: 0x8D59,
	46813 - 44032: 0x8D5A,
	46814 - 44032: 0x8D61,
	46815 - 44032: 0x8D62,
	46816 - 44032: 0x8D63,
	46817 - 44032: 0x8D64,
	46818 - 44032: 0x8D65,
	46819 - 44032: 0x8D66,
	46820 - 44032: 0x8D67,
	46821 - 44032: 0x8D68,
	46822 - 44032: 0x8D69,
	46823 - 44032: 0x8D6A,
	46824 - 44032: 0x8D6B,
	46825 - 44032: 0x8D6C,
	46826 - 44032: 0x8D6D,
	46827 - 44032: 0x8D6E,
	46828 - 44032: 0x8D6F,
	46829 - 44032: 0x8D70,
	46830 - 44032: 0x8D71,
	46831 - 44032: 0x8D72,
	46832 - 44032: 0xB6D9,
	46833 - 44032: 0x8D73,
	46834 - 44032: 0x8D74,
	46835 - 44032: 0x8D75,
	46836 - 44032: 0xB6DA,
	46837 - 44032: 0x8D76,
	46838 - 44032: 0x8D77,
	46839 - 44032: 0x8D78,
	46840 - 44032: 0xB6DB,
	46841 - 44032: 0x8D79,
	46842 - 44032: 0x8D7A,
	46843 - 44032: 0x8D81,
	46844 - 44032: 0x8D82,
	46845 - 44032: 0x8D83,
	46846 - 44032: 0x8D84,
	46847 - 44032: 0x8D85,
	46848 - 44032: 0xB6DC,
	46849 - 44032: 0xB6DD,
	46850 - 44032: 0x8D86,
	46851 - 44032: 0x8D87,
	46852 - 44032: 0x8D88,
	46853 - 44032: 0xB6DE,
	46854 - 44032: 0x8D89,
	46855 - 44032: 0x8D8A,
	46856 - 44032: 0x8D8B,
	46857 - 44032: 0x8D8C,
	46858 - 44032: 0x8D8D,
	46859 - 44032: 0x8D8E,
	46860 - 44032: 0x8D8F,
	46861 - 44032: 0x8D90,
	46862 - 44032: 0x8D91,
	46863 - 44032: 0x8D92,
	46864 - 44032: 0x8D93,
	46865 - 44032: 0x8D94,
	46866 - 44032: 0x8D95,
	46867 - 44032: 0x8D96,
	46868 - 44032: 0x8D97,
	46869 - 44032: 0x8D98,
	46870 - 44032: 0x8D99,
	46871 - 44032: 0x8D9A,
	46872 - 44032: 0x8D9B,
	46873 - 44032: 0x8D9C,
	46874 - 44032: 0x8D9D,
	46875 - 44032: 0x8D9E,
	46876 - 44032: 0x8D9F,
	46877 - 44032: 0x8DA0,
	46878 - 44032: 0x8DA1,
	46879 - 44032: 0x8DA2,
	46880 - 44032: 0x8DA3,
	46881 - 44032: 0x8DA4,
	46882 - 44032: 0x8DA5,
	46883 - 44032: 0x8DA6,
	46884 - 44032: 0x8DA7,
	46885 - 44032: 0x8DA8,
	46886 - 44032: 0x8DA9,
	46887 - 44032: 0x8DAA,
	46888 - 44032: 0xB6DF,
	46889 - 44032: 0xB6E0,
	46890 - 44032: 0x8DAB,
	46891 - 44032: 0x8DAC,
	46892 - 44032: 0xB6E1,
	46893 - 44032: 0x8DAD,
	46894 - 44032: 0x8DAE,
	46895 - 44032: 0xB6E2,
	46896 - 44032: 0xB6E3,
	46897 - 44032: 0x8DAF,
	46898 - 44032: 0x8DB0,
	46899 - 44032: 0x8DB1,
	46900 - 44032: 0x8DB2,
	46901 - 44032: 0x8DB3,
	46902 - 44032: 0x8DB4,
	46903 - 44032: 0x8DB5,
	46904 - 44032: 0xB6E4,
	46905 - 44032: 0xB6E5,
	46906 - 44032: 0x8DB6,
	46907 - 44032: 0xB6E6,
	46908 - 44032: 0x8DB7,
	46909 - 44032: 0x8DB8,
	46910 - 44032: 0x8DB9,
	46911 - 44032: 0x8DBA,
	46912 - 44032: 0x8DBB,
	46913 - 44032: 0x8DBC,
	46914 - 44032: 0x8DBD,
	46915 - 44032: 0x8DBE,
	46916 - 44032: 0xB6E7,
	46917 - 44032: 0x8DBF,
	46918 - 44032: 0x8DC0,
	46919 - 44032: 0x8DC1,
	46920 - 44032: 0xB6E8,
	46921 - 44032: 0x8DC2,
	46922 - 44032: 0x8DC3,
	46923 - 44032: 0x8DC4,
	46924 - 44032: 0xB6E9,
	46925 - 44032: 0x8DC5,
	46926 - 44032: 0x8DC6,
	46927 - 44032: 0x8DC7,
	46928 - 44032: 0x8DC8,
	46929 - 44032: 0x8DC9,
	46930 - 44032: 0x8DCA,
	46931 - 44032: 0x8DCB,
	46932 - 44032: 0xB6EA,
	46933 - 44032: 0xB6EB,
	46934 - 44032: 0x8DCC,
	46935 - 44032: 0x8DCD,
	46936 - 44032: 0x8DCE,
	46937 - 44032: 0x8DCF,
	46938 - 44032: 0x8DD0,
	46939 - 44032: 0x8DD1,
	46940 - 44032: 0x8DD2,
	46941 - 44032: 0x8DD3,
	46942 - 44032: 0x8DD4,
	46943 - 44032: 0x8DD5,
	46944 - 44032: 0xB6EC,
	46945 - 44032: 0x8DD6,
	46946 - 44032: 0x8DD7,
	46947 - 44032: 0x8DD8,
	46948 - 44032: 0xB6ED,
	46949 - 44032: 0x8DD9,
	46950 - 44032: 0x8DDA,
	46951 - 44032: 0x8DDB,
	46952 - 44032: 0xB6EE,
	46953 - 44032: 0x8DDC,
	46954 - 44032: 0x8DDD,
	46955 - 44032: 0x8DDE,
	46956 - 44032: 0x8DDF,
	46957 - 44032: 0x8DE0,
	46958 - 44032: 0x8DE1,
	46959 - 44032: 0x8DE2,
	46960 - 44032: 0xB6EF,
	46961 - 44032: 0xB6F0,
	46962 - 44032: 0x8DE3,
	46963 - 44032: 0xB6F1,
	46964 - 44032: 0x8DE4,
	46965 - 44032: 0xB6F2,
	46966 - 44032: 0x8DE5,
	46967 - 44032: 0x8DE6,
	46968 - 44032: 0x8DE7,
	46969 - 44032: 0x8DE8,
	46970 - 44032: 0x8DE9,
	46971 - 44032: 0x8DEA,
	46972 - 44032: 0xB6F3,
	46973 - 44032: 0xB6F4,
	46974 - 44032: 0x8DEB,
	46975 - 44032: 0x8DEC,
	46976 - 44032: 0xB6F5,
	46977 - 44032: 0x8DED,
	46978 - 44032: 0x8DEE,
	46979 - 44032: 0x8DEF,
	46980 - 44032: 0xB6F6,
	46981 - 44032: 0x8DF0,
	46982 - 44032: 0x8DF1,
	46983 - 44032: 0x8DF2,
	46984 - 44032: 0x8DF3,
	46985 - 44032: 0x8DF4,
	46986 - 44032: 0x8DF5,
	46987 - 44032: 0x8DF6,
	46988 - 44032: 0xB6F7,
	46989 - 44032: 0xB6F8,
	46990 - 44032: 0x8DF7,
	46991 - 44032: 0xB6F9,
	46992 - 44032: 0xB6FA,
	46993 - 44032: 0xB6FB,
	46994 - 44032: 0xB6FC,
	46995 - 44032: 0x8DF8,
	46996 - 44032: 0x8DF9,
	46997 - 44032: 0x8DFA,
	46998 - 44032: 0xB6FD,
	46999 - 44032: 0xB6FE,
	47000 - 44032: 0xB7A1,
	47001 - 44032: 0xB7A2,
	47002 - 44032: 0x8DFB,
	47003 - 44032: 0x8DFC,
	47004 - 44032: 0xB7A3,
	47005 - 44032: 0x8DFD,
	47006 - 44032: 0x8DFE,
	47007 - 44032: 0x8E41,
	47008 - 44032: 0xB7A4,
	47009 - 44032: 0x8E42,
	47010 - 44032: 0x8E43,
	47011 - 44032: 0x8E44,
	47012 - 44032: 0x8E45,
	47013 - 44032: 0x8E46,
	47014 - 44032: 0x8E47,
	47015 - 44032: 0x8E48,
	47016 - 44032: 0xB7A5,
	47017 - 44032: 0xB7A6,
	47018 - 44032: 0x8E49,
	47019 - 44032: 0xB7A7,
	47020 - 44032: 0xB7A8,
	47021 - 44032: 0xB7A9,
	47022 - 44032: 0x8E4A,
	47023 - 44032: 0x8E4B,
	47024 - 44032: 0x8E4C,
	47025 - 44032: 0x8E4D,
	47026 - 44032: 0x8E4E,
	47027 - 44032: 0x8E4F,
	47028 - 44032: 0xB7AA,
	47029 - 44032: 0xB7AB,
	47030 - 44032: 0x8E50,
	47031 - 44032: 0x8E51,
	47032 - 44032: 0xB7AC,
	47033 - 44032: 0x8E52,
	47034 - 44032: 0x8E53,
	47035 - 44032: 0x8E54,
	47036 - 44032: 0x8E55,
	47037 - 44032: 0x8E56,
	47038 - 44032: 0x8E57,
	47039 - 44032: 0x8E58,
	47040 - 44032: 0x8E59,
	47041 - 44032: 0x8E5A,
	47042 - 44032: 0x8E61,
	47043 - 44032: 0x8E62,
	47044 - 44032: 0x8E63,
	47045 - 44032: 0x8E64,
	47046 - 44032: 0x8E65,
	47047 - 44032: 0xB7AD,
	47048 - 44032: 0x8E66,
	47049 - 44032: 0xB7AE,
	47050 - 44032: 0x8E67,
	47051 - 44032: 0x8E68,
	47052 - 44032: 0x8E69,
	47053 - 44032: 0x8E6A,
	47054 - 44032: 0x8E6B,
	47055 - 44032: 0x8E6C,
	47056 - 44032: 0x8E6D,
	47057 - 44032: 0x8E6E,
	47058 - 44032: 0x8E6F,
	47059 - 44032: 0x8E70,
	47060 - 44032: 0x8E71,
	47061 - 44032: 0x8E72,
	47062 - 44032: 0x8E73,
	47063 - 44032: 0x8E74,
	47064 - 44032: 0x8E75,
	47065 - 44032: 0x8E76,
	47066 - 44032: 0x8E77,
	47067 - 44032: 0x8E78,
	47068 - 44032: 0x8E79,
	47069 - 44032: 0x8E7A,
	47070 - 44032: 0x8E81,
	47071 - 44032: 0x8E82,
	47072 - 44032: 0x8E83,
	47073 - 44032: 0x8E84,
	47074 - 44032: 0x8E85,
	47075 - 44032: 0x8E86,
	47076 - 44032: 0x8E87,
	47077 - 44032: 0x8E88,
	47078 - 44032: 0x8E89,
	47079 - 44032: 0x8E8A,
	47080 - 44032: 0x8E8B,
	47081 - 44032: 0x8E8C,
	47082 - 44032: 0x8E8D,
	47083 - 44032: 0x8E8E,
	47084 - 44032: 0xB7AF,
	47085 - 44032: 0xB7B0,
	47086 - 44032: 0x8E8F,
	47087 - 44032: 0x8E90,
	47088 - 44032: 0xB7B1,
	47089 - 44032: 0x8E91,
	47090 - 44032: 0x8E92,
	47091 - 44032: 0x8E93,
	47092 - 44032: 0xB7B2,
	47093 - 44032: 0x8E94,
	47094 - 44032: 0x8E95,
	47095 - 44032: 0x8E96,
	47096 - 44032: 0x8E97,
	47097 - 44032: 0x8E98,
	47098 - 44032: 0x8E99,
	47099 - 44032: 0x8E9A,
	47100 - 44032: 0xB7B3,
	47101 - 44032: 0xB7B4,
	47102 - 44032: 0x8E9B,
	47103 - 44032: 0xB7B5,
	47104 - 44032: 0xB7B6,
	47105 - 44032: 0xB7B7,
	47106 - 44032: 0x8E9C,
	47107 - 44032: 0x8E9D,
	47108 - 44032: 0x8E9E,
	47109 - 44032: 0x8E9F,
	47110 - 44032: 0x8EA0,
	47111 - 44032: 0xB7B8,
	47112 - 44032: 0xB7B9,
	47113 - 44032: 0xB7BA,
	47114 - 44032: 0x8EA1,
	47115 - 44032: 0x8EA2,
	47116 - 44032: 0xB7BB,
	47117 - 44032: 0x8EA3,
	47118 - 44032: 0x8EA4,
	47119 - 44032: 0x8EA5,
	47120 - 44032: 0xB7BC,
	47121 - 44032: 0x8EA6,
	47122 - 44032: 0x8EA7,
	47123 - 44032: 0x8EA8,
	47124 - 44032: 0x8EA9,
	47125 - 44032: 0x8EAA,
	47126 - 44032: 0x8EAB,
	47127 - 44032: 0x8EAC,
	47128 - 44032: 0xB7BD,
	47129 - 44032: 0xB7BE,
	47130 - 44032: 0x8EAD,
	47131 - 44032: 0xB7BF,
	47132 - 44032: 0x8EAE,
	47133 - 44032: 0xB7C0,
	47134 - 44032: 0x8EAF,
	47135 - 44032: 0x8EB0,
	47136 - 44032: 0x8EB1,
	47137 - 44032: 0x8EB2,
	47138 - 44032: 0x8EB3,
	47139 - 44032: 0x8EB4,
	47140 - 44032: 0xB7C1,
	47141 - 44032: 0xB7C2,
	47142 - 44032: 0x8EB5,
	47143 - 44032: 0x8EB6,
	47144 - 44032: 0xB7C3,
	47145 - 44032: 0x8EB7,
	47146 - 44032: 0x8EB8,
	47147 - 44032: 0x8EB9,
	47148 - 44032: 0xB7C4,
	47149 - 44032: 0x8EBA,
	47150 - 44032: 0x8EBB,
	47151 - 44032: 0x8EBC,
	47152 - 44032: 0x8EBD,
	47153 - 44032: 0x8EBE,
	47154 - 44032: 0x8EBF,
	47155 - 44032: 0x8EC0,
	47156 - 44032: 0xB7C5,
	47157 - 44032: 0xB7C6,
	47158 - 44032: 0x8EC1,
	47159 - 44032: 0xB7C7,
	47160 - 44032: 0xB7C8,
	47161 - 44032: 0xB7C9,
	47162 - 44032: 0x8EC2,
	47163 - 44032: 0x8EC3,
	47164 - 44032: 0x8EC4,
	47165 - 44032: 0x8EC5,
	47166 - 44032: 0x8EC6,
	47167 - 44032: 0x8EC7,
	47168 - 44032: 0xB7CA,
	47169 - 44032: 0x8EC8,
	47170 - 44032: 0x8EC9,
	47171 - 44032: 0x8ECA,
	47172 - 44032: 0xB7CB,
	47173 - 44032: 0x8ECB,
	47174 - 44032: 0x8ECC,
	47175 - 44032: 0x8ECD,
	47176 - 44032: 0x8ECE,
	47177 - 44032: 0x8ECF,
	47178 - 44032: 0x8ED0,
	47179 - 44032: 0x8ED1,
	47180 - 44032: 0x8ED2,
	47181 - 44032: 0x8ED3,
	47182 - 44032: 0x8ED4,
	47183 - 44032: 0x8ED5,
	47184 - 44032: 0x8ED6,
	47185 - 44032: 0xB7CC,
	47186 - 44032: 0x8ED7,
	47187 - 44032: 0xB7CD,
	47188 - 44032: 0x8ED8,
	47189 - 44032: 0x8ED9,
	47190 - 44032: 0x8EDA,
	47191 - 44032: 0x8EDB,
	47192 - 44032: 0x8EDC,
	47193 - 44032: 0x8EDD,
	47194 - 44032: 0x8EDE,
	47195 - 44032: 0x8EDF,
	47196 - 44032: 0xB7CE,
	47197 - 44032: 0xB7CF,
	47198 - 44032: 0x8EE0,
	47199 - 44032: 0x8EE1,
	47200 - 44032: 0xB7D0,
	47201 - 44032: 0x8EE2,
	47202 - 44032: 0x8EE3,
	47203 - 44032: 0x8EE4,
	47204 - 44032: 0xB7D1,
	47205 - 44032: 0x8EE5,
	47206 - 44032: 0x8EE6,
	47207 - 44032: 0x8EE7,
	47208 - 44032: 0x8EE8,
	47209 - 44032: 0x8EE9,
	47210 - 44032: 0x8EEA,
	47211 - 44032: 0x8EEB,
	47212 - 44032: 0xB7D2,
	47213 - 44032: 0xB7D3,
	47214 - 44032: 0x8EEC,
	47215 - 44032: 0xB7D4,
	47216 - 44032: 0x8EED,
	47217 - 44032: 0xB7D5,
	47218 - 44032: 0x8EEE,
	47219 - 44032: 0x8EEF,
	47220 - 44032: 0x8EF0,
	47221 - 44032: 0x8EF1,
	47222 - 44032: 0x8EF2,
	47223 - 44032: 0x8EF3,
	47224 - 44032: 0xB7D6,
	47225 - 44032: 0x8EF4,
	47226 - 44032: 0x8EF5,
	47227 - 44032: 0x8EF6,
	47228 - 44032: 0xB7D7,
	47229 - 44032: 0x8EF7,
	47230 - 44032: 0x8EF8,
	47231 - 44032: 0x8EF9,
	47232 - 44032: 0x8EFA,
	47233 - 44032: 0x8EFB,
	47234 - 44032: 0x8EFC,
	47235 - 44032: 0x8EFD,
	47236 - 44032: 0x8EFE,
	47237 - 44032: 0x8F41,
	47238 - 44032: 0x8F42,
	47239 - 44032: 0x8F43,
	47240 - 44032: 0x8F44,
	47241 - 44032: 0x8F45,
	47242 - 44032: 0x8F46,
	47243 - 44032: 0x8F47,
	47244 - 44032: 0x8F48,
	47245 - 44032: 0xB7D8,
	47246 - 44032: 0x8F49,
	47247 - 44032: 0x8F4A,
	47248 - 44032: 0x8F4B,
	47249 - 44032: 0x8F4C,
	47250 - 44032: 0x8F4D,
	47251 - 44032: 0x8F4E,
	47252 - 44032: 0x8F4F,
	47253 - 44032: 0x8F50,
	47254 - 44032: 0x8F51,
	47255 - 44032: 0x8F52,
	47256 - 44032: 0x8F53,
	47257 - 44032: 0x8F54,
	47258 - 44032: 0x8F55,
	47259 - 44032: 0x8F56,
	47260 - 44032: 0x8F57,
	47261 - 44032: 0x8F58,
	47262 - 44032: 0x8F59,
	47263 - 44032: 0x8F5A,
	47264 - 44032: 0x8F61,
	47265 - 44032: 0x8F62,
	47266 - 44032: 0x8F63,
	47267 - 44032: 0x8F64,
	47268 - 44032: 0x8F65,
	47269 - 44032: 0x8F66,
	47270 - 44032: 0x8F67,
	47271 - 44032: 0x8F68,
	47272 - 44032: 0xB7D9,
	47273 - 44032: 0x8F69,
	47274 - 44032: 0x8F6A,
	47275 - 44032: 0x8F6B,
	47276 - 44032: 0x8F6C,
	47277 - 44032: 0x8F6D,
	47278 - 44032: 0x8F6E,
	47279 - 44032: 0x8F6F,
	47280 - 44032: 0xB7DA,
	47281 - 44032: 0x8F70,
	47282 - 44032: 0x8F71,
	47283 - 44032: 0x8F72,
	47284 - 44032: 0xB7DB,
	47285 - 44032: 0x8F73,
	47286 - 44032: 0x8F74,
	47287 - 44032: 0x8F75,
	47288 - 44032: 0xB7DC,
	47289 - 44032: 0x8F76,
	47290 - 44032: 0x8F77,
	47291 - 44032: 0x8F78,
	47292 - 44032: 0x8F79,
	47293 - 44032: 0x8F7A,
	47294 - 44032: 0x8F81,
	47295 - 44032: 0x8F82,
	47296 - 44032: 0xB7DD,
	47297 - 44032: 0xB7DE,
	47298 - 44032: 0x8F83,
	47299 - 44032: 0xB7DF,
	47300 - 44032: 0x8F84,
	47301 - 44032: 0xB7E0,
	47302 - 44032: 0x8F85,
	47303 - 44032: 0x8F86,
	47304 - 44032: 0x8F87,
	47305 - 44032: 0x8F88,
	47306 - 44032: 0x8F89,
	47307 - 44032: 0x8F8A,
	47308 - 44032: 0xB7E1,
	47309 - 44032: 0x8F8B,
	47310 - 44032: 0x8F8C,
	47311 - 44032: 0x8F8D,
	47312 - 44032: 0xB7E2,
	47313 - 44032: 0x8F8E,
	47314 - 44032: 0x8F8F,
	47315 - 44032: 0x8F90,
	47316 - 44032: 0xB7E3,
	47317 - 44032: 0x8F91,
	47318 - 44032: 0x8F92,
	47319 - 44032: 0x8F93,
	47320 - 44032: 0x8F94,
	47321 - 44032: 0x8F95,
	47322 - 44032: 0x8F96,
	47323 - 44032: 0x8F97,
	47324 - 44032: 0x8F98,
	47325 - 44032: 0xB7E4,
	47326 - 44032: 0x8F99,
	47327 - 44032: 0xB7E5,
	47328 - 44032: 0x8F9A,
	47329 - 44032: 0xB7E6,
	47330 - 44032: 0x8F9B,
	47331 - 44032: 0x8F9C,
	47332 - 44032: 0x8F9D,
	47333 - 44032: 0x8F9E,
	47334 - 44032: 0x8F9F,
	47335 - 44032: 0x8FA0,
	47336 - 44032: 0xB7E7,
	47337 - 44032: 0xB7E8,
	47338 - 44032: 0x8FA1,
	47339 - 44032: 0x8FA2,
	47340 - 44032: 0xB7E9,
	47341 - 44032: 0x8FA3,
	47342 - 44032: 0x8FA4,
	47343 - 44032: 0x8FA5,
	47344 - 44032: 0xB7EA,
	47345 - 44032: 0x8FA6,
	47346 - 44032: 0x8FA7,
	47347 - 44032: 0x8FA8,
	47348 - 44032: 0x8FA9,
	47349 - 44032: 0x8FAA,
	47350 - 44032: 0x8FAB,
	47351 - 44032: 0x8FAC,
	47352 - 44032: 0xB7EB,
	47353 - 44032: 0xB7EC,
	47354 - 44032: 0x8FAD,
	47355 - 44032: 0xB7ED,
	47356 - 44032: 0x8FAE,
	47357 - 44032: 0xB7EE,
	47358 - 44032: 0x8FAF,
	47359 - 44032: 0x8FB0,
	47360 - 44032: 0x8FB1,
	47361 - 44032: 0x8FB2,
	47362 - 44032: 0x8FB3,
	47363 - 44032: 0x8FB4,
	47364 - 44032: 0xB7EF,
	47365 - 44032: 0x8FB5,
	47366 - 44032: 0x8FB6,
	47367 - 44032: 0x8FB7,
	47368 - 44032: 0x8FB8,
	47369 - 44032: 0x8FB9,
	47370 - 44032: 0x8FBA,
	47371 - 44032: 0x8FBB,
	47372 - 44032: 0x8FBC,
	47373 - 44032: 0x8FBD,
	47374 - 44032: 0x8FBE,
	47375 - 44032: 0x8FBF,
	47376 - 44032: 0x8FC0,
	47377 - 44032: 0x8FC1,
	47378 - 44032: 0x8FC2,
	47379 - 44032: 0x8FC3,
	47380 - 44032: 0x8FC4,
	47381 - 44032: 0x8FC5,
	47382 - 44032: 0x8FC6,
	47383 - 44032: 0x8FC7,
	47384 - 44032: 0xB7F0,
	47385 - 44032: 0x8FC8,
	47386 - 44032: 0x8FC9,
	47387 - 44032: 0x8FCA,
	47388 - 44032: 0x8FCB,
	47389 - 44032: 0x8FCC,
	47390 - 44032: 0x8FCD,
	47391 - 44032: 0x8FCE,
	47392 - 44032: 0xB7F1,
	47393 - 44032: 0x8FCF,
	47394 - 44032: 0x8FD0,
	47395 - 44032: 0x8FD1,
	47396 - 44032: 0x8FD2,
	47397 - 44032: 0x8FD3,
	47398 - 44032: 0x8FD4,
	47399 - 44032: 0x8FD5,
	47400 - 44032: 0x8FD6,
	47401 - 44032: 0x8FD7,
	47402 - 44032: 0x8FD8,
	47403 - 44032: 0x8FD9,
	47404 - 44032: 0x8FDA,
	47405 - 44032: 0x8FDB,
	47406 - 44032: 0x8FDC,
	47407 - 44032: 0x8FDD,
	47408 - 44032: 0x8FDE,
	47409 - 44032: 0x8FDF,
	47410 - 44032: 0x8FE0,
	47411 - 44032: 0x8FE1,
	47412 - 44032: 0x8FE2,
	47413 - 44032: 0x8FE3,
	47414 - 44032: 0x8FE4,
	47415 - 44032: 0x8FE5,
	47416 - 44032: 0x8FE6,
	47417 - 44032: 0x8FE7,
	47418 - 44032: 0x8FE8,
	47419 - 44032: 0x8FE9,
	47420 - 44032: 0xB7F2,
	47421 - 44032: 0xB7F3,
	47422 - 44032: 0x8FEA,
	47423 - 44032: 0x8FEB,
	47424 - 44032: 0xB7F4,
	47425 - 44032: 0x8FEC,
	47426 - 44032: 0x8FED,
	47427 - 44032: 0x8FEE,
	47428 - 44032: 0xB7F5,
	47429 - 44032: 0x8FEF,
	47430 - 44032: 0x8FF0,
	47431 - 44032: 0x8FF1,
	47432 - 44032: 0x8FF2,
	47433 - 44032: 0x8FF3,
	47434 - 44032: 0x8FF4,
	47435 - 44032: 0x8FF5,
	47436 - 44032: 0xB7F6,
	47437 - 44032: 0x8FF6,
	47438 - 44032: 0x8FF7,
	47439 - 44032: 0xB7F7,
	47440 - 44032: 0x8FF8,
	47441 - 44032: 0xB7F8,
	47442 - 44032: 0x8FF9,
	47443 - 44032: 0x8FFA,
	47444 - 44032: 0x8FFB,
	47445 - 44032: 0x8FFC,
	47446 - 44032: 0x8FFD,
	47447 - 44032: 0x8FFE,
	47448 - 44032: 0xB7F9,
	47449 - 44032: 0xB7FA,
	47450 - 44032: 0x9041,
	47451 - 44032: 0x9042,
	47452 - 44032: 0xB7FB,
	47453 - 44032: 0x9043,
	47454 - 44032: 0x9044,
	47455 - 44032: 0x9045,
	47456 - 44032: 0xB7FC,
	47457 - 44032: 0x9046,
	47458 - 44032: 0x9047,
	47459 - 44032: 0x9048,
	47460 - 44032: 0x9049,
	47461 - 44032: 0x904A,
	47462 - 44032: 0x904B,
	47463 - 44032: 0x904C,
	47464 - 44032: 0xB7FD,
	47465 - 44032: 0xB7FE,
	47466 - 44032: 0x904D,
	47467 - 44032: 0xB8A1,
	47468 - 44032: 0x904E,
	47469 - 44032: 0xB8A2,
	47470 - 44032: 0x904F,
	47471 - 44032: 0x9050,
	47472 - 44032: 0x9051,
	47473 - 44032: 0x9052,
	47474 - 44032: 0x9053,
	47475 - 44032: 0x9054,
	47476 - 44032: 0xB8A3,
	47477 - 44032: 0xB8A4,
	47478 - 44032: 0x9055,
	47479 - 44032: 0x9056,
	47480 - 44032: 0xB8A5,
	47481 - 44032: 0x9057,
	47482 - 44032: 0x9058,
	47483 - 44032: 0x9059,
	47484 - 44032: 0xB8A6,
	47485 - 44032: 0x905A,
	47486 - 44032: 0x9061,
	47487 - 44032: 0x9062,
	47488 - 44032: 0x9063,
	47489 - 44032: 0x9064,
	47490 - 44032: 0x9065,
	47491 - 44032: 0x9066,
	47492 - 44032: 0xB8A7,
	47493 - 44032: 0xB8A8,
	47494 - 44032: 0x9067,
	47495 - 44032: 0xB8A9,
	47496 - 44032: 0x9068,
	47497 - 44032: 0xB8AA,
	47498 - 44032: 0xB8AB,
	47499 - 44032: 0x9069,
	47500 - 44032: 0x906A,
	47501 - 44032: 0xB8AC,
	47502 - 44032: 0xB8AD,
	47503 - 44032: 0x906B,
	47504 - 44032: 0x906C,
	47505 - 44032: 0x906D,
	47506 - 44032: 0x906E,
	47507 - 44032: 0x906F,
	47508 - 44032: 0x9070,
	47509 - 44032: 0x9071,
	47510 - 44032: 0x9072,
	47511 - 44032: 0x9073,
	47512 - 44032: 0x9074,
	47513 - 44032: 0x9075,
	47514 - 44032: 0x9076,
	47515 - 44032: 0x9077,
	47516 - 44032: 0x9078,
	47517 - 44032: 0x9079,
	47518 - 44032: 0x907A,
	47519 - 44032: 0x9081,
	47520 - 44032: 0x9082,
	47521 - 44032: 0x9083,
	47522 - 44032: 0x9084,
	47523 - 44032: 0x9085,
	47524 - 44032: 0x9086,
	47525 - 44032: 0x9087,
	47526 - 44032: 0x9088,
	47527 - 44032: 0x9089,
	47528 - 44032: 0x908A,
	47529 - 44032: 0x908B,
	47530 - 44032: 0x908C,
	47531 - 44032: 0x908D,
	47532 - 44032: 0xB8AE,
	47533 - 44032: 0xB8AF,
	47534 - 44032: 0x908E,
	47535 - 44032: 0x908F,
	47536 - 44032: 0xB8B0,
	47537 - 44032: 0x9090,
	47538 - 44032: 0x9091,
	47539 - 44032: 0x9092,
	47540 - 44032: 0xB8B1,
	47541 - 44032: 0x9093,
	47542 - 44032: 0x9094,
	47543 - 44032: 0x9095,
	47544 - 44032: 0x9096,
	47545 - 44032: 0x9097,
	47546 - 44032: 0x9098,
	47547 - 44032: 0x9099,
	47548 - 44032: 0xB8B2,
	47549 - 44032: 0xB8B3,
	47550 - 44032: 0x909A,
	47551 - 44032: 0xB8B4,
	47552 - 44032: 0x909B,
	47553 - 44032: 0xB8B5,
	47554 - 44032: 0x909C,
	47555 - 44032: 0x909D,
	47556 - 44032: 0x909E,
	47557 - 44032: 0x909F,
	47558 - 44032: 0x90A0,
	47559 - 44032: 0x90A1,
	47560 - 44032: 0xB8B6,
	47561 - 44032: 0xB8B7,
	47562 - 44032: 0x90A2,
	47563 - 44032: 0x90A3,
	47564 - 44032: 0xB8B8,
	47565 - 44032: 0x90A4,
	47566 - 44032: 0xB8B9,
	47567 - 44032: 0xB8BA,
	47568 - 44032: 0xB8BB,
	47569 - 44032: 0xB8BC,
	47570 - 44032: 0xB8BD,
	47571 - 44032: 0x90A5,
	47572 - 44032: 0x90A6,
	47573 - 44032: 0x90A7,
	47574 - 44032: 0x90A8,
	47575 - 44032: 0x90A9,
	47576 - 44032: 0xB8BE,
	47577 - 44032: 0xB8BF,
	47578 - 44032: 0x90AA,
	47579 - 44032: 0xB8C0,
	47580 - 44032: 0x90AB,
	47581 - 44032: 0xB8C1,
	47582 - 44032: 0xB8C2,
	47583 - 44032: 0x90AC,
	47584 - 44032: 0x90AD,
	47585 - 44032: 0xB8C3,
	47586 - 44032: 0x90AE,
	47587 - 44032: 0xB8C4,
	47588 - 44032: 0xB8C5,
	47589 - 44032: 0xB8C6,
	47590 - 44032: 0x90AF,
	47591 - 44032: 0x90B0,
	47592 - 44032: 0xB8C7,
	47593 - 44032: 0x90B1,
	47594 - 44032: 0x90B2,
	47595 - 44032: 0x90B3,
	47596 - 44032: 0xB8C8,
	47597 - 44032: 0x90B4,
	47598 - 44032: 0x90B5,
	47599 - 44032: 0x90B6,
	47600 - 44032: 0x90B7,
	47601 - 44032: 0x90B8,
	47602 - 44032: 0x90B9,
	47603 - 44032: 0x90BA,
	47604 - 44032: 0xB8C9,
	47605 - 44032: 0xB8CA,
	47606 - 44032: 0x90BB,
	47607 - 44032: 0xB8CB,
	47608 - 44032: 0xB8CC,
	47609 - 44032: 0xB8CD,
	47610 - 44032: 0xB8CE,
	47611 - 44032: 0x90BC,
	47612 - 44032: 0x90BD,
	47613 - 44032: 0x90BE,
	47614 - 44032: 0x90BF,
	47615 - 44032: 0x90C0,
	47616 - 44032: 0xB8CF,
	47617 - 44032: 0xB8D0,
	47618 - 44032: 0x90C1,
	47619 - 44032: 0x90C2,
	47620 - 44032: 0x90C3,
	47621 - 44032: 0x90C4,
	47622 - 44032: 0x90C5,
	47623 - 44032: 0x90C6,
	47624 - 44032: 0xB8D1,
	47625 - 44032: 0x90C7,
	47626 - 44032: 0x90C8,
	47627 - 44032: 0x90C9,
	47628 - 44032: 0x90CA,
	47629 - 44032: 0x90CB,
	47630 - 44032: 0x90CC,
	47631 - 44032: 0x90CD,
	47632 - 44032: 0x90CE,
	47633 - 44032: 0x90CF,
	47634 - 44032: 0x90D0,
	47635 - 44032: 0x90D1,
	47636 - 44032: 0x90D2,
	47637 - 44032: 0xB8D2,
	47638 - 44032: 0x90D3,
	47639 - 44032: 0x90D4,
	47640 - 44032: 0x90D5,
	47641 - 44032: 0x90D6,
	47642 - 44032: 0x90D7,
	47643 - 44032: 0x90D8,
	47644 - 44032: 0x90D9,
	47645 - 44032: 0x90DA,
	47646 - 44032: 0x90DB,
	47647 - 44032: 0x90DC,
	47648 - 44032: 0x90DD,
	47649 - 44032: 0x90DE,
	47650 - 44032: 0x90DF,
	47651 - 44032: 0x90E0,
	47652 - 44032: 0x90E1,
	47653 - 44032: 0x90E2,
	47654 - 44032: 0x90E3,
	47655 - 44032: 0x90E4,
	47656 - 44032: 0x90E5,
	47657 - 44032: 0x90E6,
	47658 - 44032: 0x90E7,
	47659 - 44032: 0x90E8,
	47660 - 44032: 0x90E9,
	47661 - 44032: 0x90EA,
	47662 - 44032: 0x90EB,
	47663 - 44032: 0x90EC,
	47664 - 44032: 0x90ED,
	47665 - 44032: 0x90EE,
	47666 - 44032: 0x90EF,
	47667 - 44032: 0x90F0,
	47668 - 44032: 0x90F1,
	47669 - 44032: 0x90F2,
	47670 - 44032: 0x90F3,
	47671 - 44032: 0x90F4,
	47672 - 44032: 0xB8D3,
	47673 - 44032: 0xB8D4,
	47674 - 44032: 0x90F5,
	47675 - 44032: 0x90F6,
	47676 - 44032: 0xB8D5,
	47677 - 44032: 0x90F7,
	47678 - 44032: 0x90F8,
	47679 - 44032: 0x90F9,
	47680 - 44032: 0xB8D6,
	47681 - 44032: 0x90FA,
	47682 - 44032: 0xB8D7,
	47683 - 44032: 0x90FB,
	47684 - 44032: 0x90FC,
	47685 - 44032: 0x90FD,
	47686 - 44032: 0x90FE,
	47687 - 44032: 0x9141,
	47688 - 44032: 0xB8D8,
	47689 - 44032: 0xB8D9,
	47690 - 44032: 0x9142,
	47691 - 44032: 0xB8DA,
	47692 - 44032: 0x9143,
	47693 - 44032: 0xB8DB,
	47694 - 44032: 0xB8DC,
	47695 - 44032: 0x9144,
	47696 - 44032: 0x9145,
	47697 - 44032: 0x9146,
	47698 - 44032: 0x9147,
	47699 - 44032: 0xB8DD,
	47700 - 44032: 0xB8DE,
	47701 - 44032: 0xB8DF,
	47702 - 44032: 0x9148,
	47703 - 44032: 0x9149,
	47704 - 44032: 0xB8E0,
	47705 - 44032: 0x914A,
	47706 - 44032: 0x914B,
	47707 - 44032: 0x914C,
	47708 - 44032: 0xB8E1,
	47709 - 44032: 0x914D,
	47710 - 44032: 0x914E,
	47711 - 44032: 0x914F,
	47712 - 44032: 0x9150,
	47713 - 44032: 0x9151,
	47714 - 44032: 0x9152,
	47715 - 44032: 0x9153,
	47716 - 44032: 0xB8E2,
	47717 - 44032: 0xB8E3,
	47718 - 44032: 0x9154,
	47719 - 44032: 0xB8E4,
	47720 - 44032: 0xB8E5,
	47721 - 44032: 0xB8E6,
	47722 - 44032: 0x9155,
	47723 - 44032: 0x9156,
	47724 - 44032: 0x9157,
	47725 - 44032: 0x9158,
	47726 - 44032: 0x9159,
	47727 - 44032: 0x915A,
	47728 - 44032: 0xB8E7,
	47729 - 44032: 0xB8E8,
	47730 - 44032: 0x9161,
	47731 - 44032: 0x9162,
	47732 - 44032: 0xB8E9,
	47733 - 44032: 0x9163,
	47734 - 44032: 0x9164,
	47735 - 44032: 0x9165,
	47736 - 44032: 0xB8EA,
	47737 - 44032: 0x9166,
	47738 - 44032: 0x9167,
	47739 - 44032: 0x9168,
	47740 - 44032: 0x9169,
	47741 - 44032: 0x916A,
	47742 - 44032: 0x916B,
	47743 - 44032: 0x916C,
	47744 - 44032: 0x916D,
	47745 - 44032: 0x916E,
	47746 - 44032: 0x916F,
	47747 - 44032: 0xB8EB,
	47748 - 44032: 0xB8EC,
	47749 - 44032: 0xB8ED,
	47750 - 44032: 0x9170,
	47751 - 44032: 0xB8EE,
	47752 - 44032: 0x9171,
	47753 - 44032: 0x9172,
	47754 - 44032: 0x9173,
	47755 - 44032: 0x9174,
	47756 - 44032: 0xB8EF,
	47757 - 44032: 0x9175,
	47758 - 44032: 0x9176,
	47759 - 44032: 0x9177,
	47760 - 44032: 0x9178,
	47761 - 44032: 0x9179,
	47762 - 44032: 0x917A,
	47763 - 44032: 0x9181,
	47764 - 44032: 0x9182,
	47765 - 44032: 0x9183,
	47766 - 44032: 0x9184,
	47767 - 44032: 0x9185,
	47768 - 44032: 0x9186,
	47769 - 44032: 0x9187,
	47770 - 44032: 0x9188,
	47771 - 44032: 0x9189,
	47772 - 44032: 0x918A,
	47773 - 44032: 0x918B,
	47774 - 44032: 0x918C,
	47775 - 44032: 0x918D,
	47776 - 44032: 0x918E,
	47777 - 44032: 0x918F,
	47778 - 44032: 0x9190,
	47779 - 44032: 0x9191,
	47780 - 44032: 0x9192,
	47781 - 44032: 0x9193,
	47782 - 44032: 0x9194,
	47783 - 44032: 0x9195,
	47784 - 44032: 0xB8F0,
	47785 - 44032: 0xB8F1,
	47786 - 44032: 0x9196,
	47787 - 44032: 0xB8F2,
	47788 - 44032: 0xB8F3,
	47789 - 44032: 0x9197,
	47790 - 44032: 0x9198,
	47791 - 44032: 0x9199,
	47792 - 44032: 0xB8F4,
	47793 - 44032: 0x919A,
	47794 - 44032: 0xB8F5,
	47795 - 44032: 0x919B,
	47796 - 44032: 0x919C,
	47797 - 44032: 0x919D,
	47798 - 44032: 0x919E,
	47799 - 44032: 0x919F,
	47800 - 44032: 0xB8F6,
	47801 - 44032: 0xB8F7,
	47802 - 44032: 0x91A0,
	47803 - 44032: 0xB8F8,
	47804 - 44032: 0x91A1,
	47805 - 44032: 0xB8F9,
	47806 - 44032: 0x91A2,
	47807 - 44032: 0x91A3,
	47808 - 44032: 0x91A4,
	47809 - 44032: 0x91A5,
	47810 - 44032: 0x91A6,
	47811 - 44032: 0x91A7,
	47812 - 44032: 0xB8FA,
	47813 - 44032: 0x91A8,
	47814 - 44032: 0x91A9,
	47815 - 44032: 0x91AA,
	47816 - 44032: 0xB8FB,
	47817 - 44032: 0x91AB,
	47818 - 44032: 0x91AC,
	47819 - 44032: 0x91AD,
	47820 - 44032: 0x91AE,
	47821 - 44032: 0x91AF,
	47822 - 44032: 0x91B0,
	47823 - 44032: 0x91B1,
	47824 - 44032: 0x91B2,
	47825 - 44032: 0x91B3,
	47826 - 44032: 0x91B4,
	47827 - 44032: 0x91B5,
	47828 - 44032: 0x91B6,
	47829 - 44032: 0x91B7,
	47830 - 44032: 0x91B8,
	47831 - 44032: 0x91B9,
	47832 - 44032: 0xB8FC,
	47833 - 44032: 0xB8FD,
	47834 - 44032: 0x91BA,
	47835 - 44032: 0x91BB,
	47836 - 44032: 0x91BC,
	47837 - 44032: 0x91BD,
	47838 - 44032: 0x91BE,
	47839 - 44032: 0x91BF,
	47840 - 44032: 0x91C0,
	47841 - 44032: 0x91C1,
	47842 - 44032: 0x91C2,
	47843 - 44032: 0x91C3,
	47844 - 44032: 0x91C4,
	47845 - 44032: 0x91C5,
	47846 - 44032: 0x91C6,
	47847 - 44032: 0x91C7,
	47848 - 44032: 0x91C8,
	47849 - 44032: 0x91C9,
	47850 - 44032: 0x91CA,
	47851 - 44032: 0x91CB,
	47852 - 44032: 0x91CC,
	47853 - 44032: 0x91CD,
	47854 - 44032: 0x91CE,
	47855 - 44032: 0x91CF,
	47856 - 44032: 0x91D0,
	47857 - 44032: 0x91D1,
	47858 - 44032: 0x91D2,
	47859 - 44032: 0x91D3,
	47860 - 44032: 0x91D4,
	47861 - 44032: 0x91D5,
	47862 - 44032: 0x91D6,
	47863 - 44032: 0x91D7,
	47864 - 44032: 0x91D8,
	47865 - 44032: 0x91D9,
	47866 - 44032: 0x91DA,
	47867 - 44032: 0x91DB,
	47868 - 44032: 0xB8FE,
	47869 - 44032: 0x91DC,
	47870 - 44032: 0x91DD,
	47871 - 44032: 0x91DE,
	47872 - 44032: 0xB9A1,
	47873 - 44032: 0x91DF,
	47874 - 44032: 0x91E0,
	47875 - 44032: 0x91E1,
	47876 - 44032: 0xB9A2,
	47877 - 44032: 0x91E2,
	47878 - 44032: 0x91E3,
	47879 - 44032: 0x91E4,
	47880 - 44032: 0x91E5,
	47881 - 44032: 0x91E6,
	47882 - 44032: 0x91E7,
	47883 - 44032: 0x91E8,
	47884 - 44032: 0x91E9,
	47885 - 44032: 0xB9A3,
	47886 - 44032: 0x91EA,
	47887 - 44032: 0xB9A4,
	47888 - 44032: 0x91EB,
	47889 - 44032: 0xB9A5,
	47890 - 44032: 0x91EC,
	47891 - 44032: 0x91ED,
	47892 - 44032: 0x91EE,
	47893 - 44032: 0x91EF,
	47894 - 44032: 0x91F0,
	47895 - 44032: 0x91F1,
	47896 - 44032: 0xB9A6,
	47897 - 44032: 0x91F2,
	47898 - 44032: 0x91F3,
	47899 - 44032: 0x91F4,
	47900 - 44032: 0xB9A7,
	47901 - 44032: 0x91F5,
	47902 - 44032: 0x91F6,
	47903 - 44032: 0x91F7,
	47904 - 44032: 0xB9A8,
	47905 - 44032: 0x91F8,
	47906 - 44032: 0x91F9,
	47907 - 44032: 0x91FA,
	47908 - 44032: 0x91FB,
	47909 - 44032: 0x91FC,
	47910 - 44032: 0x91FD,
	47911 - 44032: 0x91FE,
	47912 - 44032: 0x9241,
	47913 - 44032: 0xB9A9,
	47914 - 44032: 0x9242,
	47915 - 44032: 0xB9AA,
	47916 - 44032: 0x9243,
	47917 - 44032: 0x9244,
	47918 - 44032: 0x9245,
	47919 - 44032: 0x9246,
	47920 - 44032: 0x9247,
	47921 - 44032: 0x9248,
	47922 - 44032: 0x9249,
	47923 - 44032: 0x924A,
	47924 - 44032: 0xB9AB,
	47925 - 44032: 0xB9AC,
	47926 - 44032: 0xB9AD,
	47927 - 44032: 0x924B,
	47928 - 44032: 0xB9AE,
	47929 - 44032: 0x924C,
	47930 - 44032: 0x924D,
	47931 - 44032: 0xB9AF,
	47932 - 44032: 0xB9B0,
	47933 - 44032: 0xB9B1,
	47934 - 44032: 0xB9B2,
	47935 - 44032: 0x924E,
	47936 - 44032: 0x924F,
	47937 - 44032: 0x9250,
	47938 - 44032: 0x9251,
	47939 - 44032: 0x9252,
	47940 - 44032: 0xB9B3,
	47941 - 44032: 0xB9B4,
	47942 - 44032: 0x9253,
	47943 - 44032: 0xB9B5,
	47944 - 44032: 0x9254,
	47945 - 44032: 0xB9B6,
	47946 - 44032: 0x9255,
	47947 - 44032: 0x9256,
	47948 - 44032: 0x9257,
	47949 - 44032: 0xB9B7,
	47950 - 44032: 0x9258,
	47951 - 44032: 0xB9B8,
	47952 - 44032: 0xB9B9,
	47953 - 44032: 0x9259,
	47954 - 44032: 0x925A,
	47955 - 44032: 0x9261,
	47956 - 44032: 0xB9BA,
	47957 - 44032: 0x9262,
	47958 - 44032: 0x9263,
	47959 - 44032: 0x9264,
	47960 - 44032: 0xB9BB,
	47961 - 44032: 0x9265,
	47962 - 44032: 0x9266,
	47963 - 44032: 0x9267,
	47964 - 44032: 0x9268,
	47965 - 44032: 0x9269,
	47966 - 44032: 0x926A,
	47967 - 44032: 0x926B,
	47968 - 44032: 0x926C,
	47969 - 44032: 0xB9BC,
	47970 - 44032: 0x926D,
	47971 - 44032: 0xB9BD,
	47972 - 44032: 0x926E,
	47973 - 44032: 0x926F,
	47974 - 44032: 0x9270,
	47975 - 44032: 0x9271,
	47976 - 44032: 0x9272,
	47977 - 44032: 0x9273,
	47978 - 44032: 0x9274,
	47979 - 44032: 0x9275,
	47980 - 44032: 0xB9BE,
	47981 - 44032: 0x9276,
	47982 - 44032: 0x9277,
	47983 - 44032: 0x9278,
	47984 - 44032: 0x9279,
	47985 - 44032: 0x927A,
	47986 - 44032: 0x9281,
	47987 - 44032: 0x9282,
	47988 - 44032: 0x9283,
	47989 - 44032: 0x9284,
	47990 - 44032: 0x9285,
	47991 - 44032: 0x9286,
	47992 - 44032: 0x9287,
	47993 - 44032: 0x9288,
	47994 - 44032: 0x9289,
	47995 - 44032: 0x928A,
	47996 - 44032: 0x928B,
	47997 - 44032: 0x928C,
	47998 - 44032: 0x928D,
	47999 - 44032: 0x928E,
	48000 - 44032: 0x928F,
	48001 - 44032: 0x9290,
	48002 - 44032: 0x9291,
	48003 - 44032: 0x9292,
	48004 - 44032: 0x9293,
	48005 - 44032: 0x9294,
	48006 - 44032: 0x9295,
	48007 - 44032: 0x9296,
	48008 - 44032: 0xB9BF,
	48009 - 44032: 0x9297,
	48010 - 44032: 0x9298,
	48011 - 44032: 0x9299,
	48012 - 44032: 0xB9C0,
	48013 - 44032: 0x929A,
	48014 - 44032: 0x929B,
	48015 - 44032: 0x929C,
	48016 - 44032: 0xB9C1,
	48017 - 44032: 0x929D,
	48018 - 44032: 0x929E,
	48019 - 44032: 0x929F,
	48020 - 44032: 0x92A0,
	48021 - 44032: 0x92A1,
	48022 - 44032: 0x92A2,
	48023 - 44032: 0x92A3,
	48024 - 44032: 0x92A4,
	48025 - 44032: 0x92A5,
	48026 - 44032: 0x92A6,
	48027 - 44032: 0x92A7,
	48028 - 44032: 0x92A8,
	48029 - 44032: 0x92A9,
	48030 - 44032: 0x92AA,
	48031 - 44032: 0x92AB,
	48032 - 44032: 0x92AC,
	48033 - 44032: 0x92AD,
	48034 - 44032: 0x92AE,
	48035 - 44032: 0x92AF,
	48036 - 44032: 0xB9C2,
	48037 - 44032: 0x92B0,
	48038 - 44032: 0x92B1,
	48039 - 44032: 0x92B2,
	48040 - 44032: 0xB9C3,
	48041 - 44032: 0x92B3,
	48042 - 44032: 0x92B4,
	48043 - 44032: 0x92B5,
	48044 - 44032: 0xB9C4,
	48045 - 44032: 0x92B6,
	48046 - 44032: 0x92B7,
	48047 - 44032: 0x92B8,
	48048 - 44032: 0x92B9,
	48049 - 44032: 0x92BA,
	48050 - 44032: 0x92BB,
	48051 - 44032: 0x92BC,
	48052 - 44032: 0xB9C5,
	48053 - 44032: 0x92BD,
	48054 - 44032: 0x92BE,
	48055 - 44032: 0xB9C6,
	48056 - 44032: 0x92BF,
	48057 - 44032: 0x92C0,
	48058 - 44032: 0x92C1,
	48059 - 44032: 0x92C2,
	48060 - 44032: 0x92C3,
	48061 - 44032: 0x92C4,
	48062 - 44032: 0x92C5,
	48063 - 44032: 0x92C6,
	48064 - 44032: 0xB9C7,
	48065 - 44032: 0x92C7,
	48066 - 44032: 0x92C8,
	48067 - 44032: 0x92C9,
	48068 - 44032: 0xB9C8,
	48069 - 44032: 0x92CA,
	48070 - 44032: 0x92CB,
	48071 - 44032: 0x92CC,
	48072 - 44032: 0xB9C9,
	48073 - 44032: 0x92CD,
	48074 - 44032: 0x92CE,
	48075 - 44032: 0x92CF,
	48076 - 44032: 0x92D0,
	48077 - 44032: 0x92D1,
	48078 - 44032: 0x92D2,
	48079 - 44032: 0x92D3,
	48080 - 44032: 0xB9CA,
	48081 - 44032: 0x92D4,
	48082 - 44032: 0x92D5,
	48083 - 44032: 0xB9CB,
	48084 - 44032: 0x92D6,
	48085 - 44032: 0x92D7,
	48086 - 44032: 0x92D8,
	48087 - 44032: 0x92D9,
	48088 - 44032: 0x92DA,
	48089 - 44032: 0x92DB,
	48090 - 44032: 0x92DC,
	48091 - 44032: 0x92DD,
	48092 - 44032: 0x92DE,
	48093 - 44032: 0x92DF,
	48094 - 44032: 0x92E0,
	48095 - 44032: 0x92E1,
	48096 - 44032: 0x92E2,
	48097 - 44032: 0x92E3,
	48098 - 44032: 0x92E4,
	48099 - 44032: 0x92E5,
	48100 - 44032: 0x92E6,
	48101 - 44032: 0x92E7,
	48102 - 44032: 0x92E8,
	48103 - 44032: 0x92E9,
	48104 - 44032: 0x92EA,
	48105 - 44032: 0x92EB,
	48106 - 44032: 0x92EC,
	48107 - 44032: 0x92ED,
	48108 - 44032: 0x92EE,
	48109 - 44032: 0x92EF,
	48110 - 44032: 0x92F0,
	48111 - 44032: 0x92F1,
	48112 - 44032: 0x92F2,
	48113 - 44032: 0x92F3,
	48114 - 44032: 0x92F4,
	48115 - 44032: 0x92F5,
	48116 - 44032: 0x92F6,
	48117 - 44032: 0x92F7,
	48118 - 44032: 0x92F8,
	48119 - 44032: 0x92F9,
	48120 - 44032: 0xB9CC,
	48121 - 44032: 0xB9CD,
	48122 - 44032: 0x92FA,
	48123 - 44032: 0x92FB,
	48124 - 44032: 0xB9CE,
	48125 - 44032: 0x92FC,
	48126 - 44032: 0x92FD,
	48127 - 44032: 0xB9CF,
	48128 - 44032: 0xB9D0,
	48129 - 44032: 0x92FE,
	48130 - 44032: 0xB9D1,
	48131 - 44032: 0x9341,
	48132 - 44032: 0x9342,
	48133 - 44032: 0x9343,
	48134 - 44032: 0x9344,
	48135 - 44032: 0x9345,
	48136 - 44032: 0xB9D2,
	48137 - 44032: 0xB9D3,
	48138 - 44032: 0x9346,
	48139 - 44032: 0xB9D4,
	48140 - 44032: 0xB9D5,
	48141 - 44032: 0xB9D6,
	48142 - 44032: 0x9347,
	48143 - 44032: 0xB9D7,
	48144 - 44032: 0x9348,
	48145 - 44032: 0xB9D8,
	48146 - 44032: 0x9349,
	48147 - 44032: 0x934A,
	48148 - 44032: 0xB9D9,
	48149 - 44032: 0xB9DA,
	48150 - 44032: 0xB9DB,
	48151 - 44032: 0xB9DC,
	48152 - 44032: 0xB9DD,
	48153 - 44032: 0x934B,
	48154 - 44032: 0x934C,
	48155 - 44032: 0xB9DE,
	48156 - 44032: 0xB9DF,
	48157 - 44032: 0xB9E0,
	48158 - 44032: 0xB9E1,
	48159 - 44032: 0xB9E2,
	48160 - 44032: 0x934D,
	48161 - 44032: 0x934E,
	48162 - 44032: 0x934F,
	48163 - 44032: 0x9350,
	48164 - 44032: 0xB9E3,
	48165 - 44032: 0xB9E4,
	48166 - 44032: 0x9351,
	48167 - 44032: 0xB9E5,
	48168 - 44032: 0x9352,
	48169 - 44032: 0xB9E6,
	48170 - 44032: 0x9353,
	48171 - 44032: 0x9354,
	48172 - 44032: 0x9355,
	48173 - 44032: 0xB9E7,
	48174 - 44032: 0x9356,
	48175 - 44032: 0x9357,
	48176 - 44032: 0xB9E8,
	48177 - 44032: 0xB9E9,
	48178 - 44032: 0x9358,
	48179 - 44032: 0x9359,
	48180 - 44032: 0xB9EA,
	48181 - 44032: 0x935A,
	48182 - 44032: 0x9361,
	48183 - 44032: 0x9362,
	48184 - 44032: 0xB9EB,
	48185 - 44032: 0x9363,
	48186 - 44032: 0x9364,
	48187 - 44032: 0x9365,
	48188 - 44032: 0x9366,
	48189 - 44032: 0x9367,
	48190 - 44032: 0x9368,
	48191 - 44032: 0x9369,
	48192 - 44032: 0xB9EC,
	48193 - 44032: 0xB9ED,
	48194 - 44032: 0x936A,
	48195 - 44032: 0xB9EE,
	48196 - 44032: 0xB9EF,
	48197 - 44032: 0xB9F0,
	48198 - 44032: 0x936B,
	48199 - 44032: 0x936C,
	48200 - 44032: 0x936D,
	48201 - 44032: 0xB9F1,
	48202 - 44032: 0x936E,
	48203 - 44032: 0x936F,
	48204 - 44032: 0xB9F2,
	48205 - 44032: 0xB9F3,
	48206 - 44032: 0x9370,
	48207 - 44032: 0x9371,
	48208 - 44032: 0xB9F4,
	48209 - 44032: 0x9372,
	48210 - 44032: 0x9373,
	48211 - 44032: 0x9374,
	48212 - 44032: 0x9375,
	48213 - 44032: 0x9376,
	48214 - 44032: 0x9377,
	48215 - 44032: 0x9378,
	48216 - 44032: 0x9379,
	48217 - 44032: 0x937A,
	48218 - 44032: 0x9381,
	48219 - 44032: 0x9382,
	48220 - 44032: 0x9383,
	48221 - 44032: 0xB9F5,
	48222 - 44032: 0x9384,
	48223 - 44032: 0x9385,
	48224 - 44032: 0x9386,
	48225 - 44032: 0x9387,
	48226 - 44032: 0x9388,
	48227 - 44032: 0x9389,
	48228 - 44032: 0x938A,
	48229 - 44032: 0x938B,
	48230 - 44032: 0x938C,
	48231 - 44032: 0x938D,
	48232 - 44032: 0x938E,
	48233 - 44032: 0x938F,
	48234 - 44032: 0x9390,
	48235 - 44032: 0x9391,
	48236 - 44032: 0x9392,
	48237 - 44032: 0x9393,
	48238 - 44032: 0x9394,
	48239 - 44032: 0x9395,
	48240 - 44032: 0x9396,
	48241 - 44032: 0x9397,
	48242 - 44032: 0x9398,
	48243 - 44032: 0x9399,
	48244 - 44032: 0x939A,
	48245 - 44032: 0x939B,
	48246 - 44032: 0x939C,
	48247 - 44032: 0x939D,
	48248 - 44032: 0x939E,
	48249 - 44032: 0x939F,
	48250 - 44032: 0x93A0,
	48251 - 44032: 0x93A1,
	48252 - 44032: 0x93A2,
	48253 - 44032: 0x93A3,
	48254 - 44032: 0x93A4,
	48255 - 44032: 0x93A5,
	48256 - 44032: 0x93A6,
	48257 - 44032: 0x93A7,
	48258 - 44032: 0x93A8,
	48259 - 44032: 0x93A9,
	48260 - 44032: 0xB9F6,
	48261 - 44032: 0xB9F7,
	48262 - 44032: 0x93AA,
	48263 - 44032: 0x93AB,
	48264 - 44032: 0xB9F8,
	48265 - 44032: 0x93AC,
	48266 - 44032: 0x93AD,
	48267 - 44032: 0xB9F9,
	48268 - 44032: 0xB9FA,
	48269 - 44032: 0x93AE,
	48270 - 44032: 0xB9FB,
	48271 - 44032: 0x93AF,
	48272 - 44032: 0x93B0,
	48273 - 44032: 0x93B1,
	48274 - 44032: 0x93B2,
	48275 - 44032: 0x93B3,
	48276 - 44032: 0xB9FC,
	48277 - 44032: 0xB9FD,
	48278 - 44032: 0x93B4,
	48279 - 44032: 0xB9FE,
	48280 - 44032: 0x93B5,
	48281 - 44032: 0xBAA1,
	48282 - 44032: 0xBAA2,
	48283 - 44032: 0x93B6,
	48284 - 44032: 0x93B7,
	48285 - 44032: 0x93B8,
	48286 - 44032: 0x93B9,
	48287 - 44032: 0x93BA,
	48288 - 44032: 0xBAA3,
	48289 - 44032: 0xBAA4,
	48290 - 44032: 0x93BB,
	48291 - 44032: 0x93BC,
	48292 - 44032: 0xBAA5,
	48293 - 44032: 0x93BD,
	48294 - 44032: 0x93BE,
	48295 - 44032: 0xBAA6,
	48296 - 44032: 0xBAA7,
	48297 - 44032: 0x93BF,
	48298 - 44032: 0x93C0,
	48299 - 44032: 0x93C1,
	48300 - 44032: 0x93C2,
	48301 - 44032: 0x93C3,
	48302 - 44032: 0x93C4,
	48303 - 44032: 0x93C5,
	48304 - 44032: 0xBAA8,
	48305 - 44032: 0xBAA9,
	48306 - 44032: 0x93C6,
	48307 - 44032: 0xBAAA,
	48308 - 44032: 0xBAAB,
	48309 - 44032: 0xBAAC,
	48310 - 44032: 0x93C7,
	48311 - 44032: 0x93C8,
	48312 - 44032: 0x93C9,
	48313 - 44032: 0x93CA,
	48314 - 44032: 0x93CB,
	48315 - 44032: 0x93CC,
	48316 - 44032: 0xBAAD,
	48317 - 44032: 0xBAAE,
	48318 - 44032: 0x93CD,
	48319 - 44032: 0x93CE,
	48320 - 44032: 0xBAAF,
	48321 - 44032: 0x93CF,
	48322 - 44032: 0x93D0,
	48323 - 44032: 0x93D1,
	48324 - 44032: 0xBAB0,
	48325 - 44032: 0x93D2,
	48326 - 44032: 0x93D3,
	48327 - 44032: 0x93D4,
	48328 - 44032: 0x93D5,
	48329 - 44032: 0x93D6,
	48330 - 44032: 0x93D7,
	48331 - 44032: 0x93D8,
	48332 - 44032: 0x93D9,
	48333 - 44032: 0xBAB1,
	48334 - 44032: 0x93DA,
	48335 - 44032: 0xBAB2,
	48336 - 44032: 0xBAB3,
	48337 - 44032: 0xBAB4,
	48338 - 44032: 0x93DB,
	48339 - 44032: 0x93DC,
	48340 - 44032: 0x93DD,
	48341 - 44032: 0xBAB5,
	48342 - 44032: 0x93DE,
	48343 - 44032: 0x93DF,
	48344 - 44032: 0xBAB6,
	48345 - 44032: 0x93E0,
	48346 - 44032: 0x93E1,
	48347 - 44032: 0x93E2,
	48348 - 44032: 0xBAB7,
	48349 - 44032: 0x93E3,
	48350 - 44032: 0x93E4,
	48351 - 44032: 0x93E5,
	48352 - 44032: 0x93E6,
	48353 - 44032: 0x93E7,
	48354 - 44032: 0x93E8,
	48355 - 44032: 0x93E9,
	48356 - 44032: 0x93EA,
	48357 - 44032: 0x93EB,
	48358 - 44032: 0x93EC,
	48359 - 44032: 0x93ED,
	48360 - 44032: 0x93EE,
	48361 - 44032: 0x93EF,
	48362 - 44032: 0x93F0,
	48363 - 44032: 0x93F1,
	48364 - 44032: 0x93F2,
	48365 - 44032: 0x93F3,
	48366 - 44032: 0x93F4,
	48367 - 44032: 0x93F5,
	48368 - 44032: 0x93F6,
	48369 - 44032: 0x93F7,
	48370 - 44032: 0x93F8,
	48371 - 44032: 0x93F9,
	48372 - 44032: 0xBAB8,
	48373 - 44032: 0xBAB9,
	48374 - 44032: 0xBABA,
	48375 - 44032: 0x93FA,
	48376 - 44032: 0xBABB,
	48377 - 44032: 0x93FB,
	48378 - 44032: 0x93FC,
	48379 - 44032: 0x93FD,
	48380 - 44032: 0xBABC,
	48381 - 44032: 0x93FE,
	48382 - 44032: 0x9441,
	48383 - 44032: 0x9442,
	48384 - 44032: 0x9443,
	48385 - 44032: 0x9444,
	48386 - 44032: 0x9445,
	48387 - 44032: 0x9446,
	48388 - 44032: 0xBABD,
	48389 - 44032: 0xBABE,
	48390 - 44032: 0x9447,
	48391 - 44032: 0xBABF,
	48392 - 44032: 0x9448,
	48393 - 44032: 0xBAC0,
	48394 - 44032: 0x9449,
	48395 - 44032: 0x944A,
	48396 - 44032: 0x944B,
	48397 - 44032: 0x944C,
	48398 - 44032: 0x944D,
	48399 - 44032: 0x944E,
	48400 - 44032: 0xBAC1,
	48401 - 44032: 0x944F,
	48402 - 44032: 0x9450,
	48403 - 44032: 0x9451,
	48404 - 44032: 0xBAC2,
	48405 - 44032: 0x9452,
	48406 - 44032: 0x9453,
	48407 - 44032: 0x9454,
	48408 - 44032: 0x9455,
	48409 - 44032: 0x9456,
	48410 - 44032: 0x9457,
	48411 - 44032: 0x9458,
	48412 - 44032: 0x9459,
	48413 - 44032: 0x945A,
	48414 - 44032: 0x9461,
	48415 - 44032: 0x9462,
	48416 - 44032: 0x9463,
	48417 - 44032: 0x9464,
	48418 - 44032: 0x9465,
	48419 - 44032: 0x9466,
	48420 - 44032: 0xBAC3,
	48421 - 44032: 0x9467,
	48422 - 44032: 0x9468,
	48423 - 44032: 0x9469,
	48424 - 44032: 0x946A,
	48425 - 44032: 0x946B,
	48426 - 44032: 0x946C,
	48427 - 44032: 0x946D,
	48428 - 44032: 0xBAC4,
	48429 - 44032: 0x946E,
	48430 - 44032: 0x946F,
	48431 - 44032: 0x9470,
	48432 - 44032: 0x9471,
	48433 - 44032: 0x9472,
	48434 - 44032: 0x9473,
	48435 - 44032: 0x9474,
	48436 - 44032: 0x9475,
	48437 - 44032: 0x9476,
	48438 - 44032: 0x9477,
	48439 - 44032: 0x9478,
	48440 - 44032: 0x9479,
	48441 - 44032: 0x947A,
	48442 - 44032: 0x9481,
	48443 - 44032: 0x9482,
	48444 - 44032: 0x9483,
	48445 - 44032: 0x9484,
	48446 - 44032: 0x9485,
	48447 - 44032: 0x9486,
	48448 - 44032: 0xBAC5,
	48449 - 44032: 0x9487,
	48450 - 44032: 0x9488,
	48451 - 44032: 0x9489,
	48452 - 44032: 0x948A,
	48453 - 44032: 0x948B,
	48454 - 44032: 0x948C,
	48455 - 44032: 0x948D,
	48456 - 44032: 0xBAC6,
	48457 - 44032: 0xBAC7,
	48458 - 44032: 0x948E,
	48459 - 44032: 0x948F,
	48460 - 44032: 0xBAC8,
	48461 - 44032: 0x9490,
	48462 - 44032: 0x9491,
	48463 - 44032: 0x9492,
	48464 - 44032: 0xBAC9,
	48465 - 44032: 0x9493,
	48466 - 44032: 0x9494,
	48467 - 44032: 0x9495,
	48468 - 44032: 0x9496,
	48469 - 44032: 0x9497,
	48470 - 44032: 0x9498,
	48471 - 44032: 0x9499,
	48472 - 44032: 0xBACA,
	48473 - 44032: 0xBACB,
	48474 - 44032: 0x949A,
	48475 - 44032: 0x949B,
	48476 - 44032: 0x949C,
	48477 - 44032: 0x949D,
	48478 - 44032: 0x949E,
	48479 - 44032: 0x949F,
	48480 - 44032: 0x94A0,
	48481 - 44032: 0x94A1,
	48482 - 44032: 0x94A2,
	48483 - 44032: 0x94A3,
	48484 - 44032: 0xBACC,
	48485 - 44032: 0x94A4,
	48486 - 44032: 0x94A5,
	48487 - 44032: 0x94A6,
	48488 - 44032: 0xBACD,
	48489 - 44032: 0x94A7,
	48490 - 44032: 0x94A8,
	48491 - 44032: 0x94A9,
	48492 - 44032: 0x94AA,
	48493 - 44032: 0x94AB,
	48494 - 44032: 0x94AC,
	48495 - 44032: 0x94AD,
	48496 - 44032: 0x94AE,
	48497 - 44032: 0x94AF,
	48498 - 44032: 0x94B0,
	48499 - 44032: 0x94B1,
	48500 - 44032: 0x94B2,
	48501 - 44032: 0x94B3,
	48502 - 44032: 0x94B4,
	48503 - 44032: 0x94B5,
	48504 - 44032: 0x94B6,
	48505 - 44032: 0x94B7,
	48506 - 44032: 0x94B8,
	48507 - 44032: 0x94B9,
	48508 - 44032: 0x94BA,
	48509 - 44032: 0x94BB,
	48510 - 44032: 0x94BC,
	48511 - 44032: 0x94BD,
	48512 - 44032: 0xBACE,
	48513 - 44032: 0xBACF,
	48514 - 44032: 0x94BE,
	48515 - 44032: 0x94BF,
	48516 - 44032: 0xBAD0,
	48517 - 44032: 0x94C0,
	48518 - 44032: 0x94C1,
	48519 - 44032: 0xBAD1,
	48520 - 44032: 0xBAD2,
	48521 - 44032: 0xBAD3,
	48522 - 44032: 0xBAD4,
	48523 - 44032: 0x94C2,
	48524 - 44032: 0x94C3,
	48525 - 44032: 0x94C4,
	48526 - 44032: 0x94C5,
	48527 - 44032: 0x94C6,
	48528 - 44032: 0xBAD5,
	48529 - 44032: 0xBAD6,
	48530 - 44032: 0x94C7,
	48531 - 44032: 0xBAD7,
	48532 - 44032: 0x94C8,
	48533 - 44032: 0xBAD8,
	48534 - 44032: 0x94C9,
	48535 - 44032: 0x94CA,
	48536 - 44032: 0x94CB,
	48537 - 44032: 0xBAD9,
	48538 - 44032: 0xBADA,
	48539 - 44032: 0x94CC,
	48540 - 44032: 0xBADB,
	48541 - 44032: 0x94CD,
	48542 - 44032: 0x94CE,
	48543 - 44032: 0x94CF,
	48544 - 44032: 0x94D0,
	48545 - 44032: 0x94D1,
	48546 - 44032: 0x94D2,
	48547 - 44032: 0x94D3,
	48548 - 44032: 0xBADC,
	48549 - 44032: 0x94D4,
	48550 - 44032: 0x94D5,
	48551 - 44032: 0x94D6,
	48552 - 44032: 0x94D7,
	48553 - 44032: 0x94D8,
	48554 - 44032: 0x94D9,
	48555 - 44032: 0x94DA,
	48556 - 44032: 0x94DB,
	48557 - 44032: 0x94DC,
	48558 - 44032: 0x94DD,
	48559 - 44032: 0x94DE,
	48560 - 44032: 0xBADD,
	48561 - 44032: 0x94DF,
	48562 - 44032: 0x94E0,
	48563 - 44032: 0x94E1,
	48564 - 44032: 0x94E2,
	48565 - 44032: 0x94E3,
	48566 - 44032: 0x94E4,
	48567 - 44032: 0x94E5,
	48568 - 44032: 0xBADE,
	48569 - 44032: 0x94E6,
	48570 - 44032: 0x94E7,
	48571 - 44032: 0x94E8,
	48572 - 44032: 0x94E9,
	48573 - 44032: 0x94EA,
	48574 - 44032: 0x94EB,
	48575 - 44032: 0x94EC,
	48576 - 44032: 0x94ED,
	48577 - 44032: 0x94EE,
	48578 - 44032: 0x94EF,
	48579 - 44032: 0x94F0,
	48580 - 44032: 0x94F1,
	48581 - 44032: 0x94F2,
	48582 - 44032: 0x94F3,
	48583 - 44032: 0x94F4,
	48584 - 44032: 0x94F5,
	48585 - 44032: 0x94F6,
	48586 - 44032: 0x94F7,
	48587 - 44032: 0x94F8,
	48588 - 44032: 0x94F9,
	48589 - 44032: 0x94FA,
	48590 - 44032: 0x94FB,
	48591 - 44032: 0x94FC,
	48592 - 44032: 0x94FD,
	48593 - 44032: 0x94FE,
	48594 - 44032: 0x9541,
	48595 - 44032: 0x9542,
	48596 - 44032: 0xBADF,
	48597 - 44032: 0xBAE0,
	48598 - 44032: 0x9543,
	48599 - 44032: 0x9544,
	48600 - 44032: 0xBAE1,
	48601 - 44032: 0x9545,
	48602 - 44032: 0x9546,
	48603 - 44032: 0x9547,
	48604 - 44032: 0xBAE2,
	48605 - 44032: 0x9548,
	48606 - 44032: 0x9549,
	48607 - 44032: 0x954A,
	48608 - 44032: 0x954B,
	48609 - 44032: 0x954C,
	48610 - 44032: 0x954D,
	48611 - 44032: 0x954E,
	48612 - 44032: 0x954F,
	48613 - 44032: 0x9550,
	48614 - 44032: 0x9551,
	48615 - 44032: 0x9552,
	48616 - 44032: 0x9553,
	48617 - 44032: 0xBAE3,
	48618 - 44032: 0x9554,
	48619 - 44032: 0x9555,
	48620 - 44032: 0x9556,
	48621 - 44032: 0x9557,
	48622 - 44032: 0x9558,
	48623 - 44032: 0x9559,
	48624 - 44032: 0xBAE4,
	48625 - 44032: 0x955A,
	48626 - 44032: 0x9561,
	48627 - 44032: 0x9562,
	48628 - 44032: 0xBAE5,
	48629 - 44032: 0x9563,
	48630 - 44032: 0x9564,
	48631 - 44032: 0x9565,
	48632 - 44032: 0xBAE6,
	48633 - 44032: 0x9566,
	48634 - 44032: 0x9567,
	48635 - 44032: 0x9568,
	48636 - 44032: 0x9569,
	48637 - 44032: 0x956A,
	48638 - 44032: 0x956B,
	48639 - 44032: 0x956C,
	48640 - 44032: 0xBAE7,
	48641 - 44032: 0x956D,
	48642 - 44032: 0x956E,
	48643 - 44032: 0xBAE8,
	48644 - 44032: 0x956F,
	48645 - 44032: 0xBAE9,
	48646 - 44032: 0x9570,
	48647 - 44032: 0x9571,
	48648 - 44032: 0x9572,
	48649 - 44032: 0x9573,
	48650 - 44032: 0x9574,
	48651 - 44032: 0x9575,
	48652 - 44032: 0xBAEA,
	48653 - 44032: 0xBAEB,
	48654 - 44032: 0x9576,
	48655 - 44032: 0x9577,
	48656 - 44032: 0xBAEC,
	48657 - 44032: 0x9578,
	48658 - 44032: 0x9579,
	48659 - 44032: 0x957A,
	48660 - 44032: 0xBAED,
	48661 - 44032: 0x9581,
	48662 - 44032: 0x9582,
	48663 - 44032: 0x9583,
	48664 - 44032: 0x9584,
	48665 - 44032: 0x9585,
	48666 - 44032: 0x9586,
	48667 - 44032: 0x9587,
	48668 - 44032: 0xBAEE,
	48669 - 44032: 0xBAEF,
	48670 - 44032: 0x9588,
	48671 - 44032: 0xBAF0,
	48672 - 44032: 0x9589,
	48673 - 44032: 0x958A,
	48674 - 44032: 0x958B,
	48675 - 44032: 0x958C,
	48676 - 44032: 0x958D,
	48677 - 44032: 0x958E,
	48678 - 44032: 0x958F,
	48679 - 44032: 0x9590,
	48680 - 44032: 0x9591,
	48681 - 44032: 0x9592,
	48682 - 44032: 0x9593,
	48683 - 44032: 0x9594,
	48684 - 44032: 0x9595,
	48685 - 44032: 0x9596,
	48686 - 44032: 0x9597,
	48687 - 44032: 0x9598,
	48688 - 44032: 0x9599,
	48689 - 44032: 0x959A,
	48690 - 44032: 0x959B,
	48691 - 44032: 0x959C,
	48692 - 44032: 0x959D,
	48693 - 44032: 0x959E,
	48694 - 44032: 0x959F,
	48695 - 44032: 0x95A0,
	48696 - 44032: 0x95A1,
	48697 - 44032: 0x95A2,
	48698 - 44032: 0x95A3,
	48699 - 44032: 0x95A4,
	48700 - 44032: 0x95A5,
	48701 - 44032: 0x95A6,
	48702 - 44032: 0x95A7,
	48703 - 44032: 0x95A8,
	48704 - 44032: 0x95A9,
	48705 - 44032: 0x95AA,
	48706 - 44032: 0x95AB,
	48707 - 44032: 0x95AC,
	48708 - 44032: 0xBAF1,
	48709 - 44032: 0xBAF2,
	48710 - 44032: 0x95AD,
	48711 - 44032: 0x95AE,
	48712 - 44032: 0xBAF3,
	48713 - 44032: 0x95AF,
	48714 - 44032: 0x95B0,
	48715 - 44032: 0x95B1,
	48716 - 44032: 0xBAF4,
	48717 - 44032: 0x95B2,
	48718 - 44032: 0xBAF5,
	48719 - 44032: 0x95B3,
	48720 - 44032: 0x95B4,
	48721 - 44032: 0x95B5,
	48722 - 44032: 0x95B6,
	48723 - 44032: 0x95B7,
	48724 - 44032: 0xBAF6,
	48725 - 44032: 0xBAF7,
	48726 - 44032: 0x95B8,
	48727 - 44032: 0xBAF8,
	48728 - 44032: 0x95B9,
	48729 - 44032: 0xBAF9,
	48730 - 44032: 0xBAFA,
	48731 - 44032: 0xBAFB,
	48732 - 44032: 0x95BA,
	48733 - 44032: 0x95BB,
	48734 - 44032: 0x95BC,
	48735 - 44032: 0x95BD,
	48736 - 44032: 0xBAFC,
	48737 - 44032: 0xBAFD,
	48738 - 44032: 0x95BE,
	48739 - 44032: 0x95BF,
	48740 - 44032: 0xBAFE,
	48741 - 44032: 0x95C0,
	48742 - 44032: 0x95C1,
	48743 - 44032: 0x95C2,
	48744 - 44032: 0xBBA1,
	48745 - 44032: 0x95C3,
	48746 - 44032: 0xBBA2,
	48747 - 44032: 0x95C4,
	48748 - 44032: 0x95C5,
	48749 - 44032: 0x95C6,
	48750 - 44032: 0x95C7,
	48751 - 44032: 0x95C8,
	48752 - 44032: 0xBBA3,
	48753 - 44032: 0xBBA4,
	48754 - 44032: 0x95C9,
	48755 - 44032: 0xBBA5,
	48756 - 44032: 0xBBA6,
	48757 - 44032: 0xBBA7,
	48758 - 44032: 0x95CA,
	48759 - 44032: 0x95CB,
	48760 - 44032: 0x95CC,
	48761 - 44032: 0x95CD,
	48762 - 44032: 0x95CE,
	48763 - 44032: 0xBBA8,
	48764 - 44032: 0xBBA9,
	48765 - 44032: 0xBBAA,
	48766 - 44032: 0x95CF,
	48767 - 44032: 0x95D0,
	48768 - 44032: 0xBBAB,
	48769 - 44032: 0x95D1,
	48770 - 44032: 0x95D2,
	48771 - 44032: 0x95D3,
	48772 - 44032: 0xBBAC,
	48773 - 44032: 0x95D4,
	48774 - 44032: 0x95D5,
	48775 - 44032: 0x95D6,
	48776 - 44032: 0x95D7,
	48777 - 44032: 0x95D8,
	48778 - 44032: 0x95D9,
	48779 - 44032: 0x95DA,
	48780 - 44032: 0xBBAD,
	48781 - 44032: 0xBBAE,
	48782 - 44032: 0x95DB,
	48783 - 44032: 0xBBAF,
	48784 - 44032: 0xBBB0,
	48785 - 44032: 0xBBB1,
	48786 - 44032: 0x95DC,
	48787 - 44032: 0x95DD,
	48788 - 44032: 0x95DE,
	48789 - 44032: 0x95DF,
	48790 - 44032: 0x95E0,
	48791 - 44032: 0x95E1,
	48792 - 44032: 0xBBB2,
	48793 - 44032: 0xBBB3,
	48794 - 44032: 0x95E2,
	48795 - 44032: 0x95E3,
	48796 - 44032: 0x95E4,
	48797 - 44032: 0x95E5,
	48798 - 44032: 0x95E6,
	48799 - 44032: 0x95E7,
	48800 - 44032: 0x95E8,
	48801 - 44032: 0x95E9,
	48802 - 44032: 0x95EA,
	48803 - 44032: 0x95EB,
	48804 - 44032: 0x95EC,
	48805 - 44032: 0x95ED,
	48806 - 44032: 0x95EE,
	48807 - 44032: 0x95EF,
	48808 - 44032: 0xBBB4,
	48809 - 44032: 0x95F0,
	48810 - 44032: 0x95F1,
	48811 - 44032: 0x95F2,
	48812 - 44032: 0x95F3,
	48813 - 44032: 0x95F4,
	48814 - 44032: 0x95F5,
	48815 - 44032: 0x95F6,
	48816 - 44032: 0x95F7,
	48817 - 44032: 0x95F8,
	48818 - 44032: 0x95F9,
	48819 - 44032: 0x95FA,
	48820 - 44032: 0x95FB,
	48821 - 44032: 0x95FC,
	48822 - 44032: 0x95FD,
	48823 - 44032: 0x95FE,
	48824 - 44032: 0x9641,
	48825 - 44032: 0x9642,
	48826 - 44032: 0x9643,
	48827 - 44032: 0x9644,
	48828 - 44032: 0x9645,
	48829 - 44032: 0x9646,
	48830 - 44032: 0x9647,
	48831 - 44032: 0x9648,
	48832 - 44032: 0x9649,
	48833 - 44032: 0x964A,
	48834 - 44032: 0x964B,
	48835 - 44032: 0x964C,
	48836 - 44032: 0x964D,
	48837 - 44032: 0x964E,
	48838 - 44032: 0x964F,
	48839 - 44032: 0x9650,
	48840 - 44032: 0x9651,
	48841 - 44032: 0x9652,
	48842 - 44032: 0x9653,
	48843 - 44032: 0x9654,
	48844 - 44032: 0x9655,
	48845 - 44032: 0x9656,
	48846 - 44032: 0x9657,
	48847 - 44032: 0x9658,
	48848 - 44032: 0xBBB5,
	48849 - 44032: 0xBBB6,
	48850 - 44032: 0x9659,
	48851 - 44032: 0x965A,
	48852 - 44032: 0xBBB7,
	48853 - 44032: 0x9661,
	48854 - 44032: 0x9662,
	48855 - 44032: 0xBBB8,
	48856 - 44032: 0xBBB9,
	48857 - 44032: 0x9663,
	48858 - 44032: 0x9664,
	48859 - 44032: 0x9665,
	48860 - 44032: 0x9666,
	48861 - 44032: 0x9667,
	48862 - 44032: 0x9668,
	48863 - 44032: 0x9669,
	48864 - 44032: 0xBBBA,
	48865 - 44032: 0x966A,
	48866 - 44032: 0x966B,
	48867 - 44032: 0xBBBB,
	48868 - 44032: 0xBBBC,
	48869 - 44032: 0xBBBD,
	48870 - 44032: 0x966C,
	48871 - 44032: 0x966D,
	48872 - 44032: 0x966E,
	48873 - 44032: 0x966F,
	48874 - 44032: 0x9670,
	48875 - 44032: 0x9671,
	48876 - 44032: 0xBBBE,
	48877 - 44032: 0x9672,
	48878 - 44032: 0x9673,
	48879 - 44032: 0x9674,
	48880 - 44032: 0x9675,
	48881 - 44032: 0x9676,
	48882 - 44032: 0x9677,
	48883 - 44032: 0x9678,
	48884 - 44032: 0x9679,
	48885 - 44032: 0x967A,
	48886 - 44032: 0x9681,
	48887 - 44032: 0x9682,
	48888 - 44032: 0x9683,
	48889 - 44032: 0x9684,
	48890 - 44032: 0x9685,
	48891 - 44032: 0x9686,
	48892 - 44032: 0x9687,
	48893 - 44032: 0x9688,
	48894 - 44032: 0x9689,
	48895 - 44032: 0x968A,
	48896 - 44032: 0x968B,
	48897 - 44032: 0xBBBF,
	48898 - 44032: 0x968C,
	48899 - 44032: 0x968D,
	48900 - 44032: 0x968E,
	48901 - 44032: 0x968F,
	48902 - 44032: 0x9690,
	48903 - 44032: 0x9691,
	48904 - 44032: 0xBBC0,
	48905 - 44032: 0xBBC1,
	48906 - 44032: 0x9692,
	48907 - 44032: 0x9693,
	48908 - 44032: 0x9694,
	48909 - 44032: 0x9695,
	48910 - 44032: 0x9696,
	48911 - 44032: 0x9697,
	48912 - 44032: 0x9698,
	48913 - 44032: 0x9699,
	48914 - 44032: 0x969A,
	48915 - 44032: 0x969B,
	48916 - 44032: 0x969C,
	48917 - 44032: 0x969D,
	48918 - 44032: 0x969E,
	48919 - 44032: 0x969F,
	48920 - 44032: 0xBBC2,
	48921 - 44032: 0xBBC3,
	48922 - 44032: 0x96A0,
	48923 - 44032: 0xBBC4,
	48924 - 44032: 0xBBC5,
	48925 - 44032: 0xBBC6,
	48926 - 44032: 0x96A1,
	48927 - 44032: 0x96A2,
	48928 - 44032: 0x96A3,
	48929 - 44032: 0x96A4,
	48930 - 44032: 0x96A5,
	48931 - 44032: 0x96A6,
	48932 - 44032: 0x96A7,
	48933 - 44032: 0x96A8,
	48934 - 44032: 0x96A9,
	48935 - 44032: 0x96AA,
	48936 - 44032: 0x96AB,
	48937 - 44032: 0x96AC,
	48938 - 44032: 0x96AD,
	48939 - 44032: 0x96AE,
	48940 - 44032: 0x96AF,
	48941 - 44032: 0x96B0,
	48942 - 44032: 0x96B1,
	48943 - 44032: 0x96B2,
	48944 - 44032: 0x96B3,
	48945 - 44032: 0x96B4,
	48946 - 44032: 0x96B5,
	48947 - 44032: 0x96B6,
	48948 - 44032: 0x96B7,
	48949 - 44032: 0x96B8,
	48950 - 44032: 0x96B9,
	48951 - 44032: 0x96BA,
	48952 - 44032: 0x96BB,
	48953 - 44032: 0x96BC,
	48954 - 44032: 0x96BD,
	48955 - 44032: 0x96BE,
	48956 - 44032: 0x96BF,
	48957 - 44032: 0x96C0,
	48958 - 44032: 0x96C1,
	48959 - 44032: 0x96C2,
	48960 - 44032: 0xBBC7,
	48961 - 44032: 0xBBC8,
	48962 - 44032: 0x96C3,
	48963 - 44032: 0x96C4,
	48964 - 44032: 0xBBC9,
	48965 - 44032: 0x96C5,
	48966 - 44032: 0x96C6,
	48967 - 44032: 0x96C7,
	48968 - 44032: 0xBBCA,
	48969 - 44032: 0x96C8,
	48970 - 44032: 0x96C9,
	48971 - 44032: 0x96CA,
	48972 - 44032: 0x96CB,
	48973 - 44032: 0x96CC,
	48974 - 44032: 0x96CD,
	48975 - 44032: 0x96CE,
	48976 - 44032: 0xBBCB,
	48977 - 44032: 0xBBCC,
	48978 - 44032: 0x96CF,
	48979 - 44032: 0x96D0,
	48980 - 44032: 0x96D1,
	48981 - 44032: 0xBBCD,
	48982 - 44032: 0x96D2,
	48983 - 44032: 0x96D3,
	48984 - 44032: 0x96D4,
	48985 - 44032: 0x96D5,
	48986 - 44032: 0x96D6,
	48987 - 44032: 0x96D7,
	48988 - 44032: 0x96D8,
	48989 - 44032: 0x96D9,
	48990 - 44032: 0x96DA,
	48991 - 44032: 0x96DB,
	48992 - 44032: 0x96DC,
	48993 - 44032: 0x96DD,
	48994 - 44032: 0x96DE,
	48995 - 44032: 0x96DF,
	48996 - 44032: 0x96E0,
	48997 - 44032: 0x96E1,
	48998 - 44032: 0x96E2,
	48999 - 44032: 0x96E3,
	49000 - 44032: 0x96E4,
	49001 - 44032: 0x96E5,
	49002 - 44032: 0x96E6,
	49003 - 44032: 0x96E7,
	49004 - 44032: 0x96E8,
	49005 - 44032: 0x96E9,
	49006 - 44032: 0x96EA,
	49007 - 44032: 0x96EB,
	49008 - 44032: 0x96EC,
	49009 - 44032: 0x96ED,
	49010 - 44032: 0x96EE,
	49011 - 44032: 0x96EF,
	49012 - 44032: 0x96F0,
	49013 - 44032: 0x96F1,
	49014 - 44032: 0x96F2,
	49015 - 44032: 0x96F3,
	49016 - 44032: 0x96F4,
	49017 - 44032: 0x96F5,
	49018 - 44032: 0x96F6,
	49019 - 44032: 0x96F7,
	49020 - 44032: 0x96F8,
	49021 - 44032: 0x96F9,
	49022 - 44032: 0x96FA,
	49023 - 44032: 0x96FB,
	49024 - 44032: 0x96FC,
	49025 - 44032: 0x96FD,
	49026 - 44032: 0x96FE,
	49027 - 44032: 0x9741,
	49028 - 44032: 0x9742,
	49029 - 44032: 0x9743,
	49030 - 44032: 0x9744,
	49031 - 44032: 0x9745,
	49032 - 44032: 0x9746,
	49033 - 44032: 0x9747,
	49034 - 44032: 0x9748,
	49035 - 44032: 0x9749,
	49036 - 44032: 0x974A,
	49037 - 44032: 0x974B,
	49038 - 44032: 0x974C,
	49039 - 44032: 0x974D,
	49040 - 44032: 0x974E,
	49041 - 44032: 0x974F,
	49042 - 44032: 0x9750,
	49043 - 44032: 0x9751,
	49044 - 44032: 0xBBCE,
	49045 - 44032: 0x9752,
	49046 - 44032: 0x9753,
	49047 - 44032: 0x9754,
	49048 - 44032: 0x9755,
	49049 - 44032: 0x9756,
	49050 - 44032: 0x9757,
	49051 - 44032: 0x9758,
	49052 - 44032: 0x9759,
	49053 - 44032: 0x975A,
	49054 - 44032: 0x9761,
	49055 - 44032: 0x9762,
	49056 - 44032: 0x9763,
	49057 - 44032: 0x9764,
	49058 - 44032: 0x9765,
	49059 - 44032: 0x9766,
	49060 - 44032: 0x9767,
	49061 - 44032: 0x9768,
	49062 - 44032: 0x9769,
	49063 - 44032: 0x976A,
	49064 - 44032: 0x976B,
	49065 - 44032: 0x976C,
	49066 - 44032: 0x976D,
	49067 - 44032: 0x976E,
	49068 - 44032: 0x976F,
	49069 - 44032: 0x9770,
	49070 - 44032: 0x9771,
	49071 - 44032: 0x9772,
	49072 - 44032: 0xBBCF,
	49073 - 44032: 0x9773,
	49074 - 44032: 0x9774,
	49075 - 44032: 0x9775,
	49076 - 44032: 0x9776,
	49077 - 44032: 0x9777,
	49078 - 44032: 0x9778,
	49079 - 44032: 0x9779,
	49080 - 44032: 0x977A,
	49081 - 44032: 0x9781,
	49082 - 44032: 0x9782,
	49083 - 44032: 0x9783,
	49084 - 44032: 0x9784,
	49085 - 44032: 0x9785,
	49086 - 44032: 0x9786,
	49087 - 44032: 0x9787,
	49088 - 44032: 0x9788,
	49089 - 44032: 0x9789,
	49090 - 44032: 0x978A,
	49091 - 44032: 0x978B,
	49092 - 44032: 0x978C,
	49093 - 44032: 0xBBD0,
	49094 - 44032: 0x978D,
	49095 - 44032: 0x978E,
	49096 - 44032: 0x978F,
	49097 - 44032: 0x9790,
	49098 - 44032: 0x9791,
	49099 - 44032: 0x9792,
	49100 - 44032: 0xBBD1,
	49101 - 44032: 0xBBD2,
	49102 - 44032: 0x9793,
	49103 - 44032: 0x9794,
	49104 - 44032: 0xBBD3,
	49105 - 44032: 0x9795,
	49106 - 44032: 0x9796,
	49107 - 44032: 0x9797,
	49108 - 44032: 0xBBD4,
	49109 - 44032: 0x9798,
	49110 - 44032: 0x9799,
	49111 - 44032: 0x979A,
	49112 - 44032: 0x979B,
	49113 - 44032: 0x979C,
	49114 - 44032: 0x979D,
	49115 - 44032: 0x979E,
	49116 - 44032: 0xBBD5,
	49117 - 44032: 0x979F,
	49118 - 44032: 0x97A0,
	49119 - 44032: 0xBBD6,
	49120 - 44032: 0x97A1,
	49121 - 44032: 0xBBD7,
	49122 - 44032: 0x97A2,
	49123 - 44032: 0x97A3,
	49124 - 44032: 0x97A4,
	49125 - 44032: 0x97A5,
	49126 - 44032: 0x97A6,
	49127 - 44032: 0x97A7,
	49128 - 44032: 0x97A8,
	49129 - 44032: 0x97A9,
	49130 - 44032: 0x97AA,
	49131 - 44032: 0x97AB,
	49132 - 44032: 0x97AC,
	49133 - 44032: 0x97AD,
	49134 - 44032: 0x97AE,
	49135 - 44032: 0x97AF,
	49136 - 44032: 0x97B0,
	49137 - 44032: 0x97B1,
	49138 - 44032: 0x97B2,
	49139 - 44032: 0x97B3,
	49140 - 44032: 0x97B4,
	49141 - 44032: 0x97B5,
	49142 - 44032: 0x97B6,
	49143 - 44032: 0x97B7,
	49144 - 44032: 0x97B8,
	49145 - 44032: 0x97B9,
	49146 - 44032: 0x97BA,
	49147 - 44032: 0x97BB,
	49148 - 44032: 0x97BC,
	49149 - 44032: 0x97BD,
	49150 - 44032: 0x97BE,
	49151 - 44032: 0x97BF,
	49152 - 44032: 0x97C0,
	49153 - 44032: 0x97C1,
	49154 - 44032: 0x97C2,
	49155 - 44032: 0x97C3,
	49156 - 44032: 0x97C4,
	49157 - 44032: 0x97C5,
	49158 - 44032: 0x97C6,
	49159 - 44032: 0x97C7,
	49160 - 44032: 0x97C8,
	49161 - 44032: 0x97C9,
	49162 - 44032: 0x97CA,
	49163 - 44032: 0x97CB,
	49164 - 44032: 0x97CC,
	49165 - 44032: 0x97CD,
	49166 - 44032: 0x97CE,
	49167 - 44032: 0x97CF,
	49168 - 44032: 0x97D0,
	49169 - 44032: 0x97D1,
	49170 - 44032: 0x97D2,
	49171 - 44032: 0x97D3,
	49172 - 44032: 0x97D4,
	49173 - 44032: 0x97D5,
	49174 - 44032: 0x97D6,
	49175 - 44032: 0x97D7,
	49176 - 44032: 0x97D8,
	49177 - 44032: 0x97D9,
	49178 - 44032: 0x97DA,
	49179 - 44032: 0x97DB,
	49180 - 44032: 0x97DC,
	49181 - 44032: 0x97DD,
	49182 - 44032: 0x97DE,
	49183 - 44032: 0x97DF,
	49184 - 44032: 0x97E0,
	49185 - 44032: 0x97E1,
	49186 - 44032: 0x97E2,
	49187 - 44032: 0x97E3,
	49188 - 44032: 0x97E4,
	49189 - 44032: 0x97E5,
	49190 - 44032: 0x97E6,
	49191 - 44032: 0x97E7,
	49192 - 44032: 0x97E8,
	49193 - 44032: 0x97E9,
	49194 - 44032: 0x97EA,
	49195 - 44032: 0x97EB,
	49196 - 44032: 0x97EC,
	49197 - 44032: 0x97ED,
	49198 - 44032: 0x97EE,
	49199 - 44032: 0x97EF,
	49200 - 44032: 0x97F0,
	49201 - 44032: 0x97F1,
	49202 - 44032: 0x97F2,
	49203 - 44032: 0x97F3,
	49204 - 44032: 0x97F4,
	49205 - 44032: 0x97F5,
	49206 - 44032: 0x97F6,
	49207 - 44032: 0x97F7,
	49208 - 44032: 0x97F8,
	49209 - 44032: 0x97F9,
	49210 - 44032: 0x97FA,
	49211 - 44032: 0x97FB,
	49212 - 44032: 0xBBD8,
	49213 - 44032: 0x97FC,
	49214 - 44032: 0x97FD,
	49215 - 44032: 0x97FE,
	49216 - 44032: 0x9841,
	49217 - 44032: 0x9842,
	49218 - 44032: 0x9843,
	49219 - 44032: 0x9844,
	49220 - 44032: 0x9845,
	49221 - 44032: 0x9846,
	49222 - 44032: 0x9847,
	49223 - 44032: 0x9848,
	49224 - 44032: 0x9849,
	49225 - 44032: 0x984A,
	49226 - 44032: 0x984B,
	49227 - 44032: 0x984C,
	49228 - 44032: 0x984D,
	49229 - 44032: 0x984E,
	49230 - 44032: 0x984F,
	49231 - 44032: 0x9850,
	49232 - 44032: 0x9851,
	49233 - 44032: 0xBBD9,
	49234 - 44032: 0x9852,
	49235 - 44032: 0x9853,
	49236 - 44032: 0x9854,
	49237 - 44032: 0x9855,
	49238 - 44032: 0x9856,
	49239 - 44032: 0x9857,
	49240 - 44032: 0xBBDA,
	49241 - 44032: 0x9858,
	49242 - 44032: 0x9859,
	49243 - 44032: 0x985A,
	49244 - 44032: 0xBBDB,
	49245 - 44032: 0x9861,
	49246 - 44032: 0x9862,
	49247 - 44032: 0x9863,
	49248 - 44032: 0xBBDC,
	49249 - 44032: 0x9864,
	49250 - 44032: 0x9865,
	49251 - 44032: 0x9866,
	49252 - 44032: 0x9867,
	49253 - 44032: 0x9868,
	49254 - 44032: 0x9869,
	49255 - 44032: 0x986A,
	49256 - 44032: 0xBBDD,
	49257 - 44032: 0xBBDE,
	49258 - 44032: 0x986B,
	49259 - 44032: 0x986C,
	49260 - 44032: 0x986D,
	49261 - 44032: 0x986E,
	49262 - 44032: 0x986F,
	49263 - 44032: 0x9870,
	49264 - 44032: 0x9871,
	49265 - 44032: 0x9872,
	49266 - 44032: 0x9873,
	49267 - 44032: 0x9874,
	49268 - 44032: 0x9875,
	49269 - 44032: 0x9876,
	49270 - 44032: 0x9877,
	49271 - 44032: 0x9878,
	49272 - 44032: 0x9879,
	49273 - 44032: 0x987A,
	49274 - 44032: 0x9881,
	49275 - 44032: 0x9882,
	49276 - 44032: 0x9883,
	49277 - 44032: 0x9884,
	49278 - 44032: 0x9885,
	49279 - 44032: 0x9886,
	49280 - 44032: 0x9887,
	49281 - 44032: 0x9888,
	49282 - 44032: 0x9889,
	49283 - 44032: 0x988A,
	49284 - 44032: 0x988B,
	49285 - 44032: 0x988C,
	49286 - 44032: 0x988D,
	49287 - 44032: 0x988E,
	49288 - 44032: 0x988F,
	49289 - 44032: 0x9890,
	49290 - 44032: 0x9891,
	49291 - 44032: 0x9892,
	49292 - 44032: 0x9893,
	49293 - 44032: 0x9894,
	49294 - 44032: 0x9895,
	49295 - 44032: 0x9896,
	49296 - 44032: 0xBBDF,
	49297 - 44032: 0xBBE0,
	49298 - 44032: 0x9897,
	49299 - 44032: 0x9898,
	49300 - 44032: 0xBBE1,
	49301 - 44032: 0x9899,
	49302 - 44032: 0x989A,
	49303 - 44032: 0x989B,
	49304 - 44032: 0xBBE2,
	49305 - 44032: 0x989C,
	49306 - 44032: 0x989D,
	49307 - 44032: 0x989E,
	49308 - 44032: 0x989F,
	49309 - 44032: 0x98A0,
	49310 - 44032: 0x98A1,
	49311 - 44032: 0x98A2,
	49312 - 44032: 0xBBE3,
	49313 - 44032: 0xBBE4,
	49314 - 44032: 0x98A3,
	49315 - 44032: 0xBBE5,
	49316 - 44032: 0x98A4,
	49317 - 44032: 0xBBE6,
	49318 - 44032: 0x98A5,
	49319 - 44032: 0x98A6,
	49320 - 44032: 0x98A7,
	49321 - 44032: 0x98A8,
	49322 - 44032: 0x98A9,
	49323 - 44032: 0x98AA,
	49324 - 44032: 0xBBE7,
	49325 - 44032: 0xBBE8,
	49326 - 44032: 0x98AB,
	49327 - 44032: 0xBBE9,
	49328 - 44032: 0xBBEA,
	49329 - 44032: 0x98AC,
	49330 - 44032: 0x98AD,
	49331 - 44032: 0xBBEB,
	49332 - 44032: 0xBBEC,
	49333 - 44032: 0xBBED,
	49334 - 44032: 0xBBEE,
	49335 - 44032: 0x98AE,
	49336 - 44032: 0x98AF,
	49337 - 44032: 0x98B0,
	49338 - 44032: 0x98B1,
	49339 - 44032: 0x98B2,
	49340 - 44032: 0xBBEF,
	49341 - 44032: 0xBBF0,
	49342 - 44032: 0x98B3,
	49343 - 44032: 0xBBF1,
	49344 - 44032: 0xBBF2,
	49345 - 44032: 0xBBF3,
	49346 - 44032: 0x98B4,
	49347 - 44032: 0x98B5,
	49348 - 44032: 0x98B6,
	49349 - 44032: 0xBBF4,
	49350 - 44032: 0x98B7,
	49351 - 44032: 0x98B8,
	49352 - 44032: 0xBBF5,
	49353 - 44032: 0xBBF6,
	49354 - 44032: 0x98B9,
	49355 - 44032: 0x98BA,
	49356 - 44032: 0xBBF7,
	49357 - 44032: 0x98BB,
	49358 - 44032: 0x98BC,
	49359 - 44032: 0x98BD,
	49360 - 44032: 0xBBF8,
	49361 - 44032: 0x98BE,
	49362 - 44032: 0x98BF,
	49363 - 44032: 0x98C0,
	49364 - 44032: 0x98C1,
	49365 - 44032: 0x98C2,
	49366 - 44032: 0x98C3,
	49367 - 44032: 0x98C4,
	49368 - 44032: 0xBBF9,
	49369 - 44032: 0xBBFA,
	49370 - 44032: 0x98C5,
	49371 - 44032: 0xBBFB,
	49372 - 44032: 0xBBFC,
	49373 - 44032: 0xBBFD,
	49374 - 44032: 0x98C6,
	49375 - 44032: 0x98C7,
	49376 - 44032: 0x98C8,
	49377 - 44032: 0x98C9,
	49378 - 44032: 0x98CA,
	49379 - 44032: 0x98CB,
	49380 - 44032: 0xBBFE,
	49381 - 44032: 0xBCA1,
	49382 - 44032: 0x98CC,
	49383 - 44032: 0x98CD,
	49384 - 44032: 0xBCA2,
	49385 - 44032: 0x98CE,
	49386 - 44032: 0x98CF,
	49387 - 44032: 0x98D0,
	49388 - 44032: 0xBCA3,
	49389 - 44032: 0x98D1,
	49390 - 44032: 0x98D2,
	49391 - 44032: 0x98D3,
	49392 - 44032: 0x98D4,
	49393 - 44032: 0x98D5,
	49394 - 44032: 0x98D6,
	49395 - 44032: 0x98D7,
	49396 - 44032: 0xBCA4,
	49397 - 44032: 0xBCA5,
	49398 - 44032: 0x98D8,
	49399 - 44032: 0xBCA6,
	49400 - 44032: 0x98D9,
	49401 - 44032: 0xBCA7,
	49402 - 44032: 0x98DA,
	49403 - 44032: 0x98DB,
	49404 - 44032: 0x98DC,
	49405 - 44032: 0x98DD,
	49406 - 44032: 0x98DE,
	49407 - 44032: 0x98DF,
	49408 - 44032: 0xBCA8,
	49409 - 44032: 0x98E0,
	49410 - 44032: 0x98E1,
	49411 - 44032: 0x98E2,
	49412 - 44032: 0xBCA9,
	49413 - 44032: 0x98E3,
	49414 - 44032: 0x98E4,
	49415 - 44032: 0x98E5,
	49416 - 44032: 0xBCAA,
	49417 - 44032: 0x98E6,
	49418 - 44032: 0x98E7,
	49419 - 44032: 0x98E8,
	49420 - 44032: 0x98E9,
	49421 - 44032: 0x98EA,
	49422 - 44032: 0x98EB,
	49423 - 44032: 0x98EC,
	49424 - 44032: 0xBCAB,
	49425 - 44032: 0x98ED,
	49426 - 44032: 0x98EE,
	49427 - 44032: 0x98EF,
	49428 - 44032: 0x98F0,
	49429 - 44032: 0xBCAC,
	49430 - 44032: 0x98F1,
	49431 - 44032: 0x98F2,
	49432 - 44032: 0x98F3,
	49433 - 44032: 0x98F4,
	49434 - 44032: 0x98F5,
	49435 - 44032: 0x98F6,
	49436 - 44032: 0xBCAD,
	49437 - 44032: 0xBCAE,
	49438 - 44032: 0xBCAF,
	49439 - 44032: 0xBCB0,
	49440 - 44032: 0xBCB1,
	49441 - 44032: 0x98F7,
	49442 - 44032: 0x98F8,
	49443 - 44032: 0xBCB2,
	49444 - 44032: 0xBCB3,
	49445 - 44032: 0x98F9,
	49446 - 44032: 0xBCB4,
	49447 - 44032: 0xBCB5,
	49448 - 44032: 0x98FA,
	49449 - 44032: 0x98FB,
	49450 - 44032: 0x98FC,
	49451 - 44032: 0x98FD,
	49452 - 44032: 0xBCB6,
	49453 - 44032: 0xBCB7,
	49454 - 44032: 0x98FE,
	49455 - 44032: 0xBCB8,
	49456 - 44032: 0xBCB9,
	49457 - 44032: 0xBCBA,
	49458 - 44032: 0x9941,
	49459 - 44032: 0x9942,
	49460 - 44032: 0x9943,
	49461 - 44032: 0x9944,
	49462 - 44032: 0xBCBB,
	49463 - 44032: 0x9945,
	49464 - 44032: 0xBCBC,
	49465 - 44032: 0xBCBD,
	49466 - 44032: 0x9946,
	49467 - 44032: 0x9947,
	49468 - 44032: 0xBCBE,
	49469 - 44032: 0x9948,
	49470 - 44032: 0x9949,
	49471 - 44032: 0x994A,
	49472 - 44032: 0xBCBF,
	49473 - 44032: 0x994B,
	49474 - 44032: 0x994C,
	49475 - 44032: 0x994D,
	49476 - 44032: 0x994E,
	49477 - 44032: 0x994F,
	49478 - 44032: 0x9950,
	49479 - 44032: 0x9951,
	49480 - 44032: 0xBCC0,
	49481 - 44032: 0xBCC1,
	49482 - 44032: 0x9952,
	49483 - 44032: 0xBCC2,
	49484 - 44032: 0xBCC3,
	49485 - 44032: 0xBCC4,
	49486 - 44032: 0x9953,
	49487 - 44032: 0x9954,
	49488 - 44032: 0x9955,
	49489 - 44032: 0x9956,
	49490 - 44032: 0x9957,
	49491 - 44032: 0x9958,
	49492 - 44032: 0xBCC5,
	49493 - 44032: 0xBCC6,
	49494 - 44032: 0x9959,
	49495 - 44032: 0x995A,
	49496 - 44032: 0xBCC7,
	49497 - 44032: 0x9961,
	49498 - 44032: 0x9962,
	49499 - 44032: 0x9963,
	49500 - 44032: 0xBCC8,
	49501 - 44032: 0x9964,
	49502 - 44032: 0x9965,
	49503 - 44032: 0x9966,
	49504 - 44032: 0x9967,
	49505 - 44032: 0x9968,
	49506 - 44032: 0x9969,
	49507 - 44032: 0x996A,
	49508 - 44032: 0xBCC9,
	49509 - 44032: 0xBCCA,
	49510 - 44032: 0x996B,
	49511 - 44032: 0xBCCB,
	49512 - 44032: 0xBCCC,
	49513 - 44032: 0xBCCD,
	49514 - 44032: 0x996C,
	49515 - 44032: 0x996D,
	49516 - 44032: 0x996E,
	49517 - 44032: 0x996F,
	49518 - 44032: 0x9970,
	49519 - 44032: 0x9971,
	49520 - 44032: 0xBCCE,
	49521 - 44032: 0x9972,
	49522 - 44032: 0x9973,
	49523 - 44032: 0x9974,
	49524 - 44032: 0xBCCF,
	49525 - 44032: 0x9975,
	49526 - 44032: 0x9976,
	49527 - 44032: 0x9977,
	49528 - 44032: 0xBCD0,
	49529 - 44032: 0x9978,
	49530 - 44032: 0x9979,
	49531 - 44032: 0x997A,
	49532 - 44032: 0x9981,
	49533 - 44032: 0x9982,
	49534 - 44032: 0x9983,
	49535 - 44032: 0x9984,
	49536 - 44032: 0x9985,
	49537 - 44032: 0x9986,
	49538 - 44032: 0x9987,
	49539 - 44032: 0x9988,
	49540 - 44032: 0x9989,
	49541 - 44032: 0xBCD1,
	49542 - 44032: 0x998A,
	49543 - 44032: 0x998B,
	49544 - 44032: 0x998C,
	49545 - 44032: 0x998D,
	49546 - 44032: 0x998E,
	49547 - 44032: 0x998F,
	49548 - 44032: 0xBCD2,
	49549 - 44032: 0xBCD3,
	49550 - 44032: 0xBCD4,
	49551 - 44032: 0x9990,
	49552 - 44032: 0xBCD5,
	49553 - 44032: 0x9991,
	49554 - 44032: 0x9992,
	49555 - 44032: 0x9993,
	49556 - 44032: 0xBCD6,
	49557 - 44032: 0x9994,
	49558 - 44032: 0xBCD7,
	49559 - 44032: 0x9995,
	49560 - 44032: 0x9996,
	49561 - 44032: 0x9997,
	49562 - 44032: 0x9998,
	49563 - 44032: 0x9999,
	49564 - 44032: 0xBCD8,
	49565 - 44032: 0xBCD9,
	49566 - 44032: 0x999A,
	49567 - 44032: 0xBCDA,
	49568 - 44032: 0x999B,
	49569 - 44032: 0xBCDB,
	49570 - 44032: 0x999C,
	49571 - 44032: 0x999D,
	49572 - 44032: 0x999E,
	49573 - 44032: 0xBCDC,
	49574 - 44032: 0x999F,
	49575 - 44032: 0x99A0,
	49576 - 44032: 0xBCDD,
	49577 - 44032: 0xBCDE,
	49578 - 44032: 0x99A1,
	49579 - 44032: 0x99A2,
	49580 - 44032: 0xBCDF,
	49581 - 44032: 0x99A3,
	49582 - 44032: 0x99A4,
	49583 - 44032: 0x99A5,
	49584 - 44032: 0xBCE0,
	49585 - 44032: 0x99A6,
	49586 - 44032: 0x99A7,
	49587 - 44032: 0x99A8,
	49588 - 44032: 0x99A9,
	49589 - 44032: 0x99AA,
	49590 - 44032: 0x99AB,
	49591 - 44032: 0x99AC,
	49592 - 44032: 0x99AD,
	49593 - 44032: 0x99AE,
	49594 - 44032: 0x99AF,
	49595 - 44032: 0x99B0,
	49596 - 44032: 0x99B1,
	49597 - 44032: 0xBCE1,
	49598 - 44032: 0x99B2,
	49599 - 44032: 0x99B3,
	49600 - 44032: 0x99B4,
	49601 - 44032: 0x99B5,
	49602 - 44032: 0x99B6,
	49603 - 44032: 0x99B7,
	49604 - 44032: 0xBCE2,
	49605 - 44032: 0x99B8,
	49606 - 44032: 0x99B9,
	49607 - 44032: 0x99BA,
	49608 - 44032: 0xBCE3,
	49609 - 44032: 0x99BB,
	49610 - 44032: 0x99BC,
	49611 - 44032: 0x99BD,
	49612 - 44032: 0xBCE4,
	49613 - 44032: 0x99BE,
	49614 - 44032: 0x99BF,
	49615 - 44032: 0x99C0,
	49616 - 44032: 0x99C1,
	49617 - 44032: 0x99C2,
	49618 - 44032: 0x99C3,
	49619 - 44032: 0x99C4,
	49620 - 44032: 0xBCE5,
	49621 - 44032: 0x99C5,
	49622 - 44032: 0x99C6,
	49623 - 44032: 0xBCE6,
	49624 - 44032: 0xBCE7,
	49625 - 44032: 0x99C7,
	49626 - 44032: 0x99C8,
	49627 - 44032: 0x99C9,
	49628 - 44032: 0x99CA,
	49629 - 44032: 0x99CB,
	49630 - 44032: 0x99CC,
	49631 - 44032: 0x99CD,
	49632 - 44032: 0xBCE8,
	49633 - 44032: 0x99CE,
	49634 - 44032: 0x99CF,
	49635 - 44032: 0x99D0,
	49636 - 44032: 0xBCE9,
	49637 - 44032: 0x99D1,
	49638 - 44032: 0x99D2,
	49639 - 44032: 0x99D3,
	49640 - 44032: 0xBCEA,
	49641 - 44032: 0x99D4,
	49642 - 44032: 0x99D5,
	49643 - 44032: 0x99D6,
	49644 - 44032: 0x99D7,
	49645 - 44032: 0x99D8,
	49646 - 44032: 0x99D9,
	49647 - 44032: 0x99DA,
	49648 - 44032: 0xBCEB,
	49649 - 44032: 0xBCEC,
	49650 - 44032: 0x99DB,
	49651 - 44032: 0xBCED,
	49652 - 44032: 0x99DC,
	49653 - 44032: 0x99DD,
	49654 - 44032: 0x99DE,
	49655 - 44032: 0x99DF,
	49656 - 44032: 0x99E0,
	49657 - 44032: 0x99E1,
	49658 - 44032: 0x99E2,
	49659 - 44032: 0x99E3,
	49660 - 44032: 0xBCEE,
	49661 - 44032: 0xBCEF,
	49662 - 44032: 0x99E4,
	49663 - 44032: 0x99E5,
	49664 - 44032: 0xBCF0,
	49665 - 44032: 0x99E6,
	49666 - 44032: 0x99E7,
	49667 - 44032: 0x99E8,
	49668 - 44032: 0xBCF1,
	49669 - 44032: 0x99E9,
	49670 - 44032: 0x99EA,
	49671 - 44032: 0x99EB,
	49672 - 44032: 0x99EC,
	49673 - 44032: 0x99ED,
	49674 - 44032: 0x99EE,
	49675 - 44032: 0x99EF,
	49676 - 44032: 0xBCF2,
	49677 - 44032: 0xBCF3,
	49678 - 44032: 0x99F0,
	49679 - 44032: 0xBCF4,
	49680 - 44032: 0x99F1,
	49681 - 44032: 0xBCF5,
	49682 - 44032: 0x99F2,
	49683 - 44032: 0x99F3,
	49684 - 44032: 0x99F4,
	49685 - 44032: 0x99F5,
	49686 - 44032: 0x99F6,
	49687 - 44032: 0x99F7,
	49688 - 44032: 0xBCF6,
	49689 - 44032: 0xBCF7,
	49690 - 44032: 0x99F8,
	49691 - 44032: 0x99F9,
	49692 - 44032: 0xBCF8,
	49693 - 44032: 0x99FA,
	49694 - 44032: 0x99FB,
	49695 - 44032: 0xBCF9,
	49696 - 44032: 0xBCFA,
	49697 - 44032: 0x99FC,
	49698 - 44032: 0x99FD,
	49699 - 44032: 0x99FE,
	49700 - 44032: 0x9A41,
	49701 - 44032: 0x9A42,
	49702 - 44032: 0x9A43,
	49703 - 44032: 0x9A44,
	49704 - 44032: 0xBCFB,
	49705 - 44032: 0xBCFC,
	49706 - 44032: 0x9A45,
	49707 - 44032: 0xBCFD,
	49708 - 44032: 0x9A46,
	49709 - 44032: 0xBCFE,
	49710 - 44032: 0x9A47,
	49711 - 44032: 0xBDA1,
	49712 - 44032: 0x9A48,
	49713 - 44032: 0xBDA2,
	49714 - 44032: 0xBDA3,
	49715 - 44032: 0x9A49,
	49716 - 44032: 0xBDA4,
	49717 - 44032: 0x9A4A,
	49718 - 44032: 0x9A4B,
	49719 - 44032: 0x9A4C,
	49720 - 44032: 0x9A4D,
	49721 - 44032: 0x9A4E,
	49722 - 44032: 0x9A4F,
	49723 - 44032: 0x9A50,
	49724 - 44032: 0x9A51,
	49725 - 44032: 0x9A52,
	49726 - 44032: 0x9A53,
	49727 - 44032: 0x9A54,
	49728 - 44032: 0x9A55,
	49729 - 44032: 0x9A56,
	49730 - 44032: 0x9A57,
	49731 - 44032: 0x9A58,
	49732 - 44032: 0x9A59,
	49733 - 44032: 0x9A5A,
	49734 - 44032: 0x9A61,
	49735 - 44032: 0x9A62,
	49736 - 44032: 0xBDA5,
	49737 - 44032: 0x9A63,
	49738 - 44032: 0x9A64,
	49739 - 44032: 0x9A65,
	49740 - 44032: 0x9A66,
	49741 - 44032: 0x9A67,
	49742 - 44032: 0x9A68,
	49743 - 44032: 0x9A69,
	49744 - 44032: 0xBDA6,
	49745 - 44032: 0xBDA7,
	49746 - 44032: 0x9A6A,
	49747 - 44032: 0x9A6B,
	49748 - 44032: 0xBDA8,
	49749 - 44032: 0x9A6C,
	49750 - 44032: 0x9A6D,
	49751 - 44032: 0x9A6E,
	49752 - 44032: 0xBDA9,
	49753 - 44032: 0x9A6F,
	49754 - 44032: 0x9A70,
	49755 - 44032: 0x9A71,
	49756 - 44032: 0x9A72,
	49757 - 44032: 0x9A73,
	49758 - 44032: 0x9A74,
	49759 - 44032: 0x9A75,
	49760 - 44032: 0xBDAA,
	49761 - 44032: 0x9A76,
	49762 - 44032: 0x9A77,
	49763 - 44032: 0x9A78,
	49764 - 44032: 0x9A79,
	49765 - 44032: 0xBDAB,
	49766 - 44032: 0x9A7A,
	49767 - 44032: 0x9A81,
	49768 - 44032: 0x9A82,
	49769 - 44032: 0x9A83,
	49770 - 44032: 0x9A84,
	49771 - 44032: 0x9A85,
	49772 - 44032: 0xBDAC,
	49773 - 44032: 0xBDAD,
	49774 - 44032: 0x9A86,
	49775 - 44032: 0x9A87,
	49776 - 44032: 0xBDAE,
	49777 - 44032: 0x9A88,
	49778 - 44032: 0x9A89,
	49779 - 44032: 0x9A8A,
	49780 - 44032: 0xBDAF,
	49781 - 44032: 0x9A8B,
	49782 - 44032: 0x9A8C,
	49783 - 44032: 0x9A8D,
	49784 - 44032: 0x9A8E,
	49785 - 44032: 0x9A8F,
	49786 - 44032: 0x9A90,
	49787 - 44032: 0x9A91,
	49788 - 44032: 0xBDB0,
	49789 - 44032: 0xBDB1,
	49790 - 44032: 0x9A92,
	49791 - 44032: 0xBDB2,
	49792 - 44032: 0x9A93,
	49793 - 44032: 0xBDB3,
	49794 - 44032: 0x9A94,
	49795 - 44032: 0x9A95,
	49796 - 44032: 0x9A96,
	49797 - 44032: 0x9A97,
	49798 - 44032: 0x9A98,
	49799 - 44032: 0x9A99,
	49800 - 44032: 0xBDB4,
	49801 - 44032: 0xBDB5,
	49802 - 44032: 0x9A9A,
	49803 - 44032: 0x9A9B,
	49804 - 44032: 0x9A9C,
	49805 - 44032: 0x9A9D,
	49806 - 44032: 0x9A9E,
	49807 - 44032: 0x9A9F,
	49808 - 44032: 0xBDB6,
	49809 - 44032: 0x9AA0,
	49810 - 44032: 0x9AA1,
	49811 - 44032: 0x9AA2,
	49812 - 44032: 0x9AA3,
	49813 - 44032: 0x9AA4,
	49814 - 44032: 0x9AA5,
	49815 - 44032: 0x9AA6,
	49816 - 44032: 0xBDB7,
	49817 - 44032: 0x9AA7,
	49818 - 44032: 0x9AA8,
	49819 - 44032: 0xBDB8,
	49820 - 44032: 0x9AA9,
	49821 - 44032: 0xBDB9,
	49822 - 44032: 0x9AAA,
	49823 - 44032: 0x9AAB,
	49824 - 44032: 0x9AAC,
	49825 - 44032: 0x9AAD,
	49826 - 44032: 0x9AAE,
	49827 - 44032: 0x9AAF,
	49828 - 44032: 0xBDBA,
	49829 - 44032: 0xBDBB,
	49830 - 44032: 0x9AB0,
	49831 - 44032: 0x9AB1,
	49832 - 44032: 0xBDBC,
	49833 - 44032: 0x9AB2,
	49834 - 44032: 0x9AB3,
	49835 - 44032: 0x9AB4,
	49836 - 44032: 0xBDBD,
	49837 - 44032: 0xBDBE,
	49838 - 44032: 0x9AB5,
	49839 - 44032: 0x9AB6,
	49840 - 44032: 0x9AB7,
	49841 - 44032: 0x9AB8,
	49842 - 44032: 0x9AB9,
	49843 - 44032: 0x9ABA,
	49844 - 44032: 0xBDBF,
	49845 - 44032: 0xBDC0,
	49846 - 44032: 0x9ABB,
	49847 - 44032: 0xBDC1,
	49848 - 44032: 0x9ABC,
	49849 - 44032: 0xBDC2,
	49850 - 44032: 0x9ABD,
	49851 - 44032: 0x9ABE,
	49852 - 44032: 0x9ABF,
	49853 - 44032: 0x9AC0,
	49854 - 44032: 0x9AC1,
	49855 - 44032: 0x9AC2,
	49856 - 44032: 0x9AC3,
	49857 - 44032: 0x9AC4,
	49858 - 44032: 0x9AC5,
	49859 - 44032: 0x9AC6,
	49860 - 44032: 0x9AC7,
	49861 - 44032: 0x9AC8,
	49862 - 44032: 0x9AC9,
	49863 - 44032: 0x9ACA,
	49864 - 44032: 0x9ACB,
	49865 - 44032: 0x9ACC,
	49866 - 44032: 0x9ACD,
	49867 - 44032: 0x9ACE,
	49868 - 44032: 0x9ACF,
	49869 - 44032: 0x9AD0,
	49870 - 44032: 0x9AD1,
	49871 - 44032: 0x9AD2,
	49872 - 44032: 0x9AD3,
	49873 - 44032: 0x9AD4,
	49874 - 44032: 0x9AD5,
	49875 - 44032: 0x9AD6,
	49876 - 44032: 0x9AD7,
	49877 - 44032: 0x9AD8,
	49878 - 44032: 0x9AD9,
	49879 - 44032: 0x9ADA,
	49880 - 44032: 0x9ADB,
	49881 - 44032: 0x9ADC,
	49882 - 44032: 0x9ADD,
	49883 - 44032: 0x9ADE,
	49884 - 44032: 0xBDC3,
	49885 - 44032: 0xBDC4,
	49886 - 44032: 0x9ADF,
	49887 - 44032: 0x9AE0,
	49888 - 44032: 0xBDC5,
	49889 - 44032: 0x9AE1,
	49890 - 44032: 0x9AE2,
	49891 - 44032: 0xBDC6,
	49892 - 44032: 0xBDC7,
	49893 - 44032: 0x9AE3,
	49894 - 44032: 0x9AE4,
	49895 - 44032: 0x9AE5,
	49896 - 44032: 0x9AE6,
	49897 - 44032: 0x9AE7,
	49898 - 44032: 0x9AE8,
	49899 - 44032: 0xBDC8,
	49900 - 44032: 0xBDC9,
	49901 - 44032: 0xBDCA,
	49902 - 44032: 0x9AE9,
	49903 - 44032: 0xBDCB,
	49904 - 44032: 0x9AEA,
	49905 - 44032: 0xBDCC,
	49906 - 44032: 0x9AEB,
	49907 - 44032: 0x9AEC,
	49908 - 44032: 0x9AED,
	49909 - 44032: 0x9AEE,
	49910 - 44032: 0xBDCD,
	49911 - 44032: 0x9AEF,
	49912 - 44032: 0xBDCE,
	49913 - 44032: 0xBDCF,
	49914 - 44032: 0x9AF0,
	49915 - 44032: 0xBDD0,
	49916 - 44032: 0xBDD1,
	49917 - 44032: 0x9AF1,
	49918 - 44032: 0x9AF2,
	49919 - 44032: 0x9AF3,
	49920 - 44032: 0xBDD2,
	49921 - 44032: 0x9AF4,
	49922 - 44032: 0x9AF5,
	49923 - 44032: 0x9AF6,
	49924 - 44032: 0x9AF7,
	49925 - 44032: 0x9AF8,
	49926 - 44032: 0x9AF9,
	49927 - 44032: 0x9AFA,
	49928 - 44032: 0xBDD3,
	49929 - 44032: 0xBDD4,
	49930 - 44032: 0x9AFB,
	49931 - 44032: 0x9AFC,
	49932 - 44032: 0xBDD5,
	49933 - 44032: 0xBDD6,
	49934 - 44032: 0x9AFD,
	49935 - 44032: 0x9AFE,
	49936 - 44032: 0x9B41,
	49937 - 44032: 0x9B42,
	49938 - 44032: 0x9B43,
	49939 - 44032: 0xBDD7,
	49940 - 44032: 0xBDD8,
	49941 - 44032: 0xBDD9,
	49942 - 44032: 0x9B44,
	49943 - 44032: 0x9B45,
	49944 - 44032: 0xBDDA,
	49945 - 44032: 0x9B46,
	49946 - 44032: 0x9B47,
	49947 - 44032: 0x9B48,
	49948 - 44032: 0xBDDB,
	49949 - 44032: 0x9B49,
	49950 - 44032: 0x9B4A,
	49951 - 44032: 0x9B4B,
	49952 - 44032: 0x9B4C,
	49953 - 44032: 0x9B4D,
	49954 - 44032: 0x9B4E,
	49955 - 44032: 0x9B4F,
	49956 - 44032: 0xBDDC,
	49957 - 44032: 0xBDDD,
	49958 - 44032: 0x9B50,
	49959 - 44032: 0x9B51,
	49960 - 44032: 0xBDDE,
	49961 - 44032: 0xBDDF,
	49962 - 44032: 0x9B52,
	49963 - 44032: 0x9B53,
	49964 - 44032: 0x9B54,
	49965 - 44032: 0x9B55,
	49966 - 44032: 0x9B56,
	49967 - 44032: 0x9B57,
	49968 - 44032: 0x9B58,
	49969 - 44032: 0x9B59,
	49970 - 44032: 0x9B5A,
	49971 - 44032: 0x9B61,
	49972 - 44032: 0x9B62,
	49973 - 44032: 0x9B63,
	49974 - 44032: 0x9B64,
	49975 - 44032: 0x9B65,
	49976 - 44032: 0x9B66,
	49977 - 44032: 0x9B67,
	49978 - 44032: 0x9B68,
	49979 - 44032: 0x9B69,
	49980 - 44032: 0x9B6A,
	49981 - 44032: 0x9B6B,
	49982 - 44032: 0x9B6C,
	49983 - 44032: 0x9B6D,
	49984 - 44032: 0x9B6E,
	49985 - 44032: 0x9B6F,
	49986 - 44032: 0x9B70,
	49987 - 44032: 0x9B71,
	49988 - 44032: 0x9B72,
	49989 - 44032: 0xBDE0,
	49990 - 44032: 0x9B73,
	49991 - 44032: 0x9B74,
	49992 - 44032: 0x9B75,
	49993 - 44032: 0x9B76,
	49994 - 44032: 0x9B77,
	49995 - 44032: 0x9B78,
	49996 - 44032: 0x9B79,
	49997 - 44032: 0x9B7A,
	49998 - 44032: 0x9B81,
	49999 - 44032: 0x9B82,
	50000 - 44032: 0x9B83,
	50001 - 44032: 0x9B84,
	50002 - 44032: 0x9B85,
	50003 - 44032: 0x9B86,
	50004 - 44032: 0x9B87,
	50005 - 44032: 0x9B88,
	50006 - 44032: 0x9B89,
	50007 - 44032: 0x9B8A,
	50008 - 44032: 0x9B8B,
	50009 - 44032: 0x9B8C,
	50010 - 44032: 0x9B8D,
	50011 - 44032: 0x9B8E,
	50012 - 44032: 0x9B8F,
	50013 - 44032: 0x9B90,
	50014 - 44032: 0x9B91,
	50015 - 44032: 0x9B92,
	50016 - 44032: 0x9B93,
	50017 - 44032: 0x9B94,
	50018 - 44032: 0x9B95,
	50019 - 44032: 0x9B96,
	50020 - 44032: 0x9B97,
	50021 - 44032: 0x9B98,
	50022 - 44032: 0x9B99,
	50023 - 44032: 0x9B9A,
	50024 - 44032: 0xBDE1,
	50025 - 44032: 0xBDE2,
	50026 - 44032: 0x9B9B,
	50027 - 44032: 0x9B9C,
	50028 - 44032: 0xBDE3,
	50029 - 44032: 0x9B9D,
	50030 - 44032: 0x9B9E,
	50031 - 44032: 0x9B9F,
	50032 - 44032: 0xBDE4,
	50033 - 44032: 0x9BA0,
	50034 - 44032: 0xBDE5,
	50035 - 44032: 0x9BA1,
	50036 - 44032: 0x9BA2,
	50037 - 44032: 0x9BA3,
	50038 - 44032: 0x9BA4,
	50039 - 44032: 0x9BA5,
	50040 - 44032: 0xBDE6,
	50041 - 44032: 0xBDE7,
	50042 - 44032: 0x9BA6,
	50043 - 44032: 0x9BA7,
	50044 - 44032: 0xBDE8,
	50045 - 44032: 0xBDE9,
	50046 - 44032: 0x9BA8,
	50047 - 44032: 0x9BA9,
	50048 - 44032: 0x9BAA,
	50049 - 44032: 0x9BAB,
	50050 - 44032: 0x9BAC,
	50051 - 44032: 0x9BAD,
	50052 - 44032: 0xBDEA,
	50053 - 44032: 0x9BAE,
	50054 - 44032: 0x9BAF,
	50055 - 44032: 0x9BB0,
	50056 - 44032: 0xBDEB,
	50057 - 44032: 0x9BB1,
	50058 - 44032: 0x9BB2,
	50059 - 44032: 0x9BB3,
	50060 - 44032: 0xBDEC,
	50061 - 44032: 0x9BB4,
	50062 - 44032: 0x9BB5,
	50063 - 44032: 0x9BB6,
	50064 - 44032: 0x9BB7,
	50065 - 44032: 0x9BB8,
	50066 - 44032: 0x9BB9,
	50067 - 44032: 0x9BBA,
	50068 - 44032: 0x9BBB,
	50069 - 44032: 0x9BBC,
	50070 - 44032: 0x9BBD,
	50071 - 44032: 0x9BBE,
	50072 - 44032: 0x9BBF,
	50073 - 44032: 0x9BC0,
	50074 - 44032: 0x9BC1,
	50075 - 44032: 0x9BC2,
	50076 - 44032: 0x9BC3,
	50077 - 44032: 0x9BC4,
	50078 - 44032: 0x9BC5,
	50079 - 44032: 0x9BC6,
	50080 - 44032: 0x9BC7,
	50081 - 44032: 0x9BC8,
	50082 - 44032: 0x9BC9,
	50083 - 44032: 0x9BCA,
	50084 - 44032: 0x9BCB,
	50085 - 44032: 0x9BCC,
	50086 - 44032: 0x9BCD,
	50087 - 44032: 0x9BCE,
	50088 - 44032: 0x9BCF,
	50089 - 44032: 0x9BD0,
	50090 - 44032: 0x9BD1,
	50091 - 44032: 0x9BD2,
	50092 - 44032: 0x9BD3,
	50093 - 44032: 0x9BD4,
	50094 - 44032: 0x9BD5,
	50095 - 44032: 0x9BD6,
	50096 - 44032: 0x9BD7,
	50097 - 44032: 0x9BD8,
	50098 - 44032: 0x9BD9,
	50099 - 44032: 0x9BDA,
	50100 - 44032: 0x9BDB,
	50101 - 44032: 0x9BDC,
	50102 - 44032: 0x9BDD,
	50103 - 44032: 0x9BDE,
	50104 - 44032: 0x9BDF,
	50105 - 44032: 0x9BE0,
	50106 - 44032: 0x9BE1,
	50107 - 44032: 0x9BE2,
	50108 - 44032: 0x9BE3,
	50109 - 44032: 0x9BE4,
	50110 - 44032: 0x9BE5,
	50111 - 44032: 0x9BE6,
	50112 - 44032: 0xBDED,
	50113 - 44032: 0x9BE7,
	50114 - 44032: 0x9BE8,
	50115 - 44032: 0x9BE9,
	50116 - 44032: 0x9BEA,
	50117 - 44032: 0x9BEB,
	50118 - 44032: 0x9BEC,
	50119 - 44032: 0x9BED,
	50120 - 44032: 0x9BEE,
	50121 - 44032: 0x9BEF,
	50122 - 44032: 0x9BF0,
	50123 - 44032: 0x9BF1,
	50124 - 44032: 0x9BF2,
	50125 - 44032: 0x9BF3,
	50126 - 44032: 0x9BF4,
	50127 - 44032: 0x9BF5,
	50128 - 44032: 0x9BF6,
	50129 - 44032: 0x9BF7,
	50130 - 44032: 0x9BF8,
	50131 - 44032: 0x9BF9,
	50132 - 44032: 0x9BFA,
	50133 - 44032: 0x9BFB,
	50134 - 44032: 0x9BFC,
	50135 - 44032: 0x9BFD,
	50136 - 44032: 0xBDEE,
	50137 - 44032: 0xBDEF,
	50138 - 44032: 0x9BFE,
	50139 - 44032: 0x9C41,
	50140 - 44032: 0xBDF0,
	50141 - 44032: 0x9C42,
	50142 - 44032: 0x9C43,
	50143 - 44032: 0xBDF1,
	50144 - 44032: 0xBDF2,
	50145 - 44032: 0x9C44,
	50146 - 44032: 0xBDF3,
	50147 - 44032: 0x9C45,
	50148 - 44032: 0x9C46,
	50149 - 44032: 0x9C47,
	50150 - 44032: 0x9C48,
	50151 - 44032: 0x9C49,
	50152 - 44032: 0xBDF4,
	50153 - 44032: 0xBDF5,
	50154 - 44032: 0x9C4A,
	50155 - 44032: 0x9C4B,
	50156 - 44032: 0x9C4C,
	50157 - 44032: 0xBDF6,
	50158 - 44032: 0x9C4D,
	50159 - 44032: 0x9C4E,
	50160 - 44032: 0x9C4F,
	50161 - 44032: 0x9C50,
	50162 - 44032: 0x9C51,
	50163 - 44032: 0x9C52,
	50164 - 44032: 0xBDF7,
	50165 - 44032: 0xBDF8,
	50166 - 44032: 0x9C53,
	50167 - 44032: 0x9C54,
	50168 - 44032: 0xBDF9,
	50169 - 44032: 0x9C55,
	50170 - 44032: 0x9C56,
	50171 - 44032: 0x9C57,
	50172 - 44032: 0x9C58,
	50173 - 44032: 0x9C59,
	50174 - 44032: 0x9C5A,
	50175 - 44032: 0x9C61,
	50176 - 44032: 0x9C62,
	50177 - 44032: 0x9C63,
	50178 - 44032: 0x9C64,
	50179 - 44032: 0x9C65,
	50180 - 44032: 0x9C66,
	50181 - 44032: 0x9C67,
	50182 - 44032: 0x9C68,
	50183 - 44032: 0x9C69,
	50184 - 44032: 0xBDFA,
	50185 - 44032: 0x9C6A,
	50186 - 44032: 0x9C6B,
	50187 - 44032: 0x9C6C,
	50188 - 44032: 0x9C6D,
	50189 - 44032: 0x9C6E,
	50190 - 44032: 0x9C6F,
	50191 - 44032: 0x9C70,
	50192 - 44032: 0xBDFB,
	50193 - 44032: 0x9C71,
	50194 - 44032: 0x9C72,
	50195 - 44032: 0x9C73,
	50196 - 44032: 0x9C74,
	50197 - 44032: 0x9C75,
	50198 - 44032: 0x9C76,
	50199 - 44032: 0x9C77,
	50200 - 44032: 0x9C78,
	50201 - 44032: 0x9C79,
	50202 - 44032: 0x9C7A,
	50203 - 44032: 0x9C81,
	50204 - 44032: 0x9C82,
	50205 - 44032: 0x9C83,
	50206 - 44032: 0x9C84,
	50207 - 44032: 0x9C85,
	50208 - 44032: 0x9C86,
	50209 - 44032: 0x9C87,
	50210 - 44032: 0x9C88,
	50211 - 44032: 0x9C89,
	50212 - 44032: 0xBDFC,
	50213 - 44032: 0x9C8A,
	50214 - 44032: 0x9C8B,
	50215 - 44032: 0x9C8C,
	50216 - 44032: 0x9C8D,
	50217 - 44032: 0x9C8E,
	50218 - 44032: 0x9C8F,
	50219 - 44032: 0x9C90,
	50220 - 44032: 0xBDFD,
	50221 - 44032: 0x9C91,
	50222 - 44032: 0x9C92,
	50223 - 44032: 0x9C93,
	50224 - 44032: 0xBDFE,
	50225 - 44032: 0x9C94,
	50226 - 44032: 0x9C95,
	50227 - 44032: 0x9C96,
	50228 - 44032: 0xBEA1,
	50229 - 44032: 0x9C97,
	50230 - 44032: 0x9C98,
	50231 - 44032: 0x9C99,
	50232 - 44032: 0x9C9A,
	50233 - 44032: 0x9C9B,
	50234 - 44032: 0x9C9C,
	50235 - 44032: 0x9C9D,
	50236 - 44032: 0xBEA2,
	50237 - 44032: 0xBEA3,
	50238 - 44032: 0x9C9E,
	50239 - 44032: 0x9C9F,
	50240 - 44032: 0x9CA0,
	50241 - 44032: 0x9CA1,
	50242 - 44032: 0x9CA2,
	50243 - 44032: 0x9CA3,
	50244 - 44032: 0x9CA4,
	50245 - 44032: 0x9CA5,
	50246 - 44032: 0x9CA6,
	50247 - 44032: 0x9CA7,
	50248 - 44032: 0xBEA4,
	50249 - 44032: 0x9CA8,
	50250 - 44032: 0x9CA9,
	50251 - 44032: 0x9CAA,
	50252 - 44032: 0x9CAB,
	50253 - 44032: 0x9CAC,
	50254 - 44032: 0x9CAD,
	50255 - 44032: 0x9CAE,
	50256 - 44032: 0x9CAF,
	50257 - 44032: 0x9CB0,
	50258 - 44032: 0x9CB1,
	50259 - 44032: 0x9CB2,
	50260 - 44032: 0x9CB3,
	50261 - 44032: 0x9CB4,
	50262 - 44032: 0x9CB5,
	50263 - 44032: 0x9CB6,
	50264 - 44032: 0x9CB7,
	50265 - 44032: 0x9CB8,
	50266 - 44032: 0x9CB9,
	50267 - 44032: 0x9CBA,
	50268 - 44032: 0x9CBB,
	50269 - 44032: 0x9CBC,
	50270 - 44032: 0x9CBD,
	50271 - 44032: 0x9CBE,
	50272 - 44032: 0x9CBF,
	50273 - 44032: 0x9CC0,
	50274 - 44032: 0x9CC1,
	50275 - 44032: 0x9CC2,
	50276 - 44032: 0xBEA5,
	50277 - 44032: 0xBEA6,
	50278 - 44032: 0x9CC3,
	50279 - 44032: 0x9CC4,
	50280 - 44032: 0xBEA7,
	50281 - 44032: 0x9CC5,
	50282 - 44032: 0x9CC6,
	50283 - 44032: 0x9CC7,
	50284 - 44032: 0xBEA8,
	50285 - 44032: 0x9CC8,
	50286 - 44032: 0x9CC9,
	50287 - 44032: 0x9CCA,
	50288 - 44032: 0x9CCB,
	50289 - 44032: 0x9CCC,
	50290 - 44032: 0x9CCD,
	50291 - 44032: 0x9CCE,
	50292 - 44032: 0xBEA9,
	50293 - 44032: 0xBEAA,
	50294 - 44032: 0x9CCF,
	50295 - 44032: 0x9CD0,
	50296 - 44032: 0x9CD1,
	50297 - 44032: 0xBEAB,
	50298 - 44032: 0x9CD2,
	50299 - 44032: 0x9CD3,
	50300 - 44032: 0x9CD4,
	50301 - 44032: 0x9CD5,
	50302 - 44032: 0x9CD6,
	50303 - 44032: 0x9CD7,
	50304 - 44032: 0xBEAC,
	50305 - 44032: 0x9CD8,
	50306 - 44032: 0x9CD9,
	50307 - 44032: 0x9CDA,
	50308 - 44032: 0x9CDB,
	50309 - 44032: 0x9CDC,
	50310 - 44032: 0x9CDD,
	50311 - 44032: 0x9CDE,
	50312 - 44032: 0x9CDF,
	50313 - 44032: 0x9CE0,
	50314 - 44032: 0x9CE1,
	50315 - 44032: 0x9CE2,
	50316 - 44032: 0x9CE3,
	50317 - 44032: 0x9CE4,
	50318 - 44032: 0x9CE5,
	50319 - 44032: 0x9CE6,
	50320 - 44032: 0x9CE7,
	50321 - 44032: 0x9CE8,
	50322 - 44032: 0x9CE9,
	50323 - 44032: 0x9CEA,
	50324 - 44032: 0xBEAD,
	50325 - 44032: 0x9CEB,
	50326 - 44032: 0x9CEC,
	50327 - 44032: 0x9CED,
	50328 - 44032: 0x9CEE,
	50329 - 44032: 0x9CEF,
	50330 - 44032: 0x9CF0,
	50331 - 44032: 0x9CF1,
	50332 - 44032: 0xBEAE,
	50333 - 44032: 0x9CF2,
	50334 - 44032: 0x9CF3,
	50335 - 44032: 0x9CF4,
	50336 - 44032: 0x9CF5,
	50337 - 44032: 0x9CF6,
	50338 - 44032: 0x9CF7,
	50339 - 44032: 0x9CF8,
	50340 - 44032: 0x9CF9,
	50341 - 44032: 0x9CFA,
	50342 - 44032: 0x9CFB,
	50343 - 44032: 0x9CFC,
	50344 - 44032: 0x9CFD,
	50345 - 44032: 0x9CFE,
	50346 - 44032: 0x9D41,
	50347 - 44032: 0x9D42,
	50348 - 44032: 0x9D43,
	50349 - 44032: 0x9D44,
	50350 - 44032: 0x9D45,
	50351 - 44032: 0x9D46,
	50352 - 44032: 0x9D47,
	50353 - 44032: 0x9D48,
	50354 - 44032: 0x9D49,
	50355 - 44032: 0x9D4A,
	50356 - 44032: 0x9D4B,
	50357 - 44032: 0x9D4C,
	50358 - 44032: 0x9D4D,
	50359 - 44032: 0x9D4E,
	50360 - 44032: 0xBEAF,
	50361 - 44032: 0x9D4F,
	50362 - 44032: 0x9D50,
	50363 - 44032: 0x9D51,
	50364 - 44032: 0xBEB0,
	50365 - 44032: 0x9D52,
	50366 - 44032: 0x9D53,
	50367 - 44032: 0x9D54,
	50368 - 44032: 0x9D55,
	50369 - 44032: 0x9D56,
	50370 - 44032: 0x9D57,
	50371 - 44032: 0x9D58,
	50372 - 44032: 0x9D59,
	50373 - 44032: 0x9D5A,
	50374 - 44032: 0x9D61,
	50375 - 44032: 0x9D62,
	50376 - 44032: 0x9D63,
	50377 - 44032: 0x9D64,
	50378 - 44032: 0x9D65,
	50379 - 44032: 0x9D66,
	50380 - 44032: 0x9D67,
	50381 - 44032: 0x9D68,
	50382 - 44032: 0x9D69,
	50383 - 44032: 0x9D6A,
	50384 - 44032: 0x9D6B,
	50385 - 44032: 0x9D6C,
	50386 - 44032: 0x9D6D,
	50387 - 44032: 0x9D6E,
	50388 - 44032: 0x9D6F,
	50389 - 44032: 0x9D70,
	50390 - 44032: 0x9D71,
	50391 - 44032: 0x9D72,
	50392 - 44032: 0x9D73,
	50393 - 44032: 0x9D74,
	50394 - 44032: 0x9D75,
	50395 - 44032: 0x9D76,
	50396 - 44032: 0x9D77,
	50397 - 44032: 0x9D78,
	50398 - 44032: 0x9D79,
	50399 - 44032: 0x9D7A,
	50400 - 44032: 0x9D81,
	50401 - 44032: 0x9D82,
	50402 - 44032: 0x9D83,
	50403 - 44032: 0x9D84,
	50404 - 44032: 0x9D85,
	50405 - 44032: 0x9D86,
	50406 - 44032: 0x9D87,
	50407 - 44032: 0x9D88,
	50408 - 44032: 0x9D89,
	50409 - 44032: 0xBEB1,
	50410 - 44032: 0x9D8A,
	50411 - 44032: 0x9D8B,
	50412 - 44032: 0x9D8C,
	50413 - 44032: 0x9D8D,
	50414 - 44032: 0x9D8E,
	50415 - 44032: 0x9D8F,
	50416 - 44032: 0xBEB2,
	50417 - 44032: 0xBEB3,
	50418 - 44032: 0x9D90,
	50419 - 44032: 0x9D91,
	50420 - 44032: 0xBEB4,
	50421 - 44032: 0x9D92,
	50422 - 44032: 0x9D93,
	50423 - 44032: 0x9D94,
	50424 - 44032: 0xBEB5,
	50425 - 44032: 0x9D95,
	50426 - 44032: 0xBEB6,
	50427 - 44032: 0x9D96,
	50428 - 44032: 0x9D97,
	50429 - 44032: 0x9D98,
	50430 - 44032: 0x9D99,
	50431 - 44032: 0xBEB7,
	50432 - 44032: 0xBEB8,
	50433 - 44032: 0xBEB9,
	50434 - 44032: 0x9D9A,
	50435 - 44032: 0x9D9B,
	50436 - 44032: 0x9D9C,
	50437 - 44032: 0x9D9D,
	50438 - 44032: 0x9D9E,
	50439 - 44032: 0x9D9F,
	50440 - 44032: 0x9DA0,
	50441 - 44032: 0x9DA1,
	50442 - 44032: 0x9DA2,
	50443 - 44032: 0x9DA3,
	50444 - 44032: 0xBEBA,
	50445 - 44032: 0x9DA4,
	50446 - 44032: 0x9DA5,
	50447 - 44032: 0x9DA6,
	50448 - 44032: 0xBEBB,
	50449 - 44032: 0x9DA7,
	50450 - 44032: 0x9DA8,
	50451 - 44032: 0x9DA9,
	50452 - 44032: 0xBEBC,
	50453 - 44032: 0x9DAA,
	50454 - 44032: 0x9DAB,
	50455 - 44032: 0x9DAC,
	50456 - 44032: 0x9DAD,
	50457 - 44032: 0x9DAE,
	50458 - 44032: 0x9DAF,
	50459 - 44032: 0x9DB0,
	50460 - 44032: 0xBEBD,
	50461 - 44032: 0x9DB1,
	50462 - 44032: 0x9DB2,
	50463 - 44032: 0x9DB3,
	50464 - 44032: 0x9DB4,
	50465 - 44032: 0x9DB5,
	50466 - 44032: 0x9DB6,
	50467 - 44032: 0x9DB7,
	50468 - 44032: 0x9DB8,
	50469 - 44032: 0x9DB9,
	50470 - 44032: 0x9DBA,
	50471 - 44032: 0x9DBB,
	50472 - 44032: 0xBEBE,
	50473 - 44032: 0xBEBF,
	50474 - 44032: 0x9DBC,
	50475 - 44032: 0x9DBD,
	50476 - 44032: 0xBEC0,
	50477 - 44032: 0x9DBE,
	50478 - 44032: 0x9DBF,
	50479 - 44032: 0x9DC0,
	50480 - 44032: 0xBEC1,
	50481 - 44032: 0x9DC1,
	50482 - 44032: 0x9DC2,
	50483 - 44032: 0x9DC3,
	50484 - 44032: 0x9DC4,
	50485 - 44032: 0x9DC5,
	50486 - 44032: 0x9DC6,
	50487 - 44032: 0x9DC7,
	50488 - 44032: 0xBEC2,
	50489 - 44032: 0xBEC3,
	50490 - 44032: 0x9DC8,
	50491 - 44032: 0xBEC4,
	50492 - 44032: 0x9DC9,
	50493 - 44032: 0xBEC5,
	50494 - 44032: 0x9DCA,
	50495 - 44032: 0x9DCB,
	50496 - 44032: 0x9DCC,
	50497 - 44032: 0x9DCD,
	50498 - 44032: 0x9DCE,
	50499 - 44032: 0x9DCF,
	50500 - 44032: 0xBEC6,
	50501 - 44032: 0xBEC7,
	50502 - 44032: 0x9DD0,
	50503 - 44032: 0x9DD1,
	50504 - 44032: 0xBEC8,
	50505 - 44032: 0xBEC9,
	50506 - 44032: 0xBECA,
	50507 - 44032: 0x9DD2,
	50508 - 44032: 0xBECB,
	50509 - 44032: 0xBECC,
	50510 - 44032: 0xBECD,
	50511 - 44032: 0x9DD3,
	50512 - 44032: 0x9DD4,
	50513 - 44032: 0x9DD5,
	50514 - 44032: 0x9DD6,
	50515 - 44032: 0xBECE,
	50516 - 44032: 0xBECF,
	50517 - 44032: 0xBED0,
	50518 - 44032: 0x9DD7,
	50519 - 44032: 0xBED1,
	50520 - 44032: 0xBED2,
	50521 - 44032: 0xBED3,
	50522 - 44032: 0x9DD8,
	50523 - 44032: 0x9DD9,
	50524 - 44032: 0x9DDA,
	50525 - 44032: 0xBED4,
	50526 - 44032: 0xBED5,
	50527 - 44032: 0x9DDB,
	50528 - 44032: 0xBED6,
	50529 - 44032: 0xBED7,
	50530 - 44032: 0x9DDC,
	50531 - 44032: 0x9DDD,
	50532 - 44032: 0xBED8,
	50533 - 44032: 0x9DDE,
	50534 - 44032: 0x9DDF,
	50535 - 44032: 0x9DE0,
	50536 - 44032: 0xBED9,
	50537 - 44032: 0x9DE1,
	50538 - 44032: 0x9DE2,
	50539 - 44032: 0x9DE3,
	50540 - 44032: 0x9DE4,
	50541 - 44032: 0x9DE5,
	50542 - 44032: 0x9DE6,
	50543 - 44032: 0x9DE7,
	50544 - 44032: 0xBEDA,
	50545 - 44032: 0xBEDB,
	50546 - 44032: 0x9DE8,
	50547 - 44032: 0xBEDC,
	50548 - 44032: 0xBEDD,
	50549 - 44032: 0xBEDE,
	50550 - 44032: 0x9DE9,
	50551 - 44032: 0x9DEA,
	50552 - 44032: 0x9DEB,
	50553 - 44032: 0x9DEC,
	50554 - 44032: 0x9DED,
	50555 - 44032: 0x9DEE,
	50556 - 44032: 0xBEDF,
	50557 - 44032: 0xBEE0,
	50558 - 44032: 0x9DEF,
	50559 - 44032: 0x9DF0,
	50560 - 44032: 0xBEE1,
	50561 - 44032: 0x9DF1,
	50562 - 44032: 0x9DF2,
	50563 - 44032: 0x9DF3,
	50564 - 44032: 0xBEE2,
	50565 - 44032: 0x9DF4,
	50566 - 44032: 0x9DF5,
	50567 - 44032: 0xBEE3,
	50568 - 44032: 0x9DF6,
	50569 - 44032: 0x9DF7,
	50570 - 44032: 0x9DF8,
	50571 - 44032: 0x9DF9,
	50572 - 44032: 0xBEE4,
	50573 - 44032: 0xBEE5,
	50574 - 44032: 0x9DFA,
	50575 - 44032: 0xBEE6,
	50576 - 44032: 0x9DFB,
	50577 - 44032: 0xBEE7,
	50578 - 44032: 0x9DFC,
	50579 - 44032: 0x9DFD,
	50580 - 44032: 0x9DFE,
	50581 - 44032: 0xBEE8,
	50582 - 44032: 0x9E41,
	50583 - 44032: 0xBEE9,
	50584 - 44032: 0xBEEA,
	50585 - 44032: 0x9E42,
	50586 - 44032: 0x9E43,
	50587 - 44032: 0x9E44,
	50588 - 44032: 0xBEEB,
	50589 - 44032: 0x9E45,
	50590 - 44032: 0x9E46,
	50591 - 44032: 0x9E47,
	50592 - 44032: 0xBEEC,
	50593 - 44032: 0x9E48,
	50594 - 44032: 0x9E49,
	50595 - 44032: 0x9E4A,
	50596 - 44032: 0x9E4B,
	50597 - 44032: 0x9E4C,
	50598 - 44032: 0x9E4D,
	50599 - 44032: 0x9E4E,
	50600 - 44032: 0x9E4F,
	50601 - 44032: 0xBEED,
	50602 - 44032: 0x9E50,
	50603 - 44032: 0x9E51,
	50604 - 44032: 0x9E52,
	50605 - 44032: 0x9E53,
	50606 - 44032: 0x9E54,
	50607 - 44032: 0x9E55,
	50608 - 44032: 0x9E56,
	50609 - 44032: 0x9E57,
	50610 - 44032: 0x9E58,
	50611 - 44032: 0x9E59,
	50612 - 44032: 0xBEEE,
	50613 - 44032: 0xBEEF,
	50614 - 44032: 0x9E5A,
	50615 - 44032: 0x9E61,
	50616 - 44032: 0xBEF0,
	50617 - 44032: 0xBEF1,
	50618 - 44032: 0x9E62,
	50619 - 44032: 0xBEF2,
	50620 - 44032: 0xBEF3,
	50621 - 44032: 0xBEF4,
	50622 - 44032: 0xBEF5,
	50623 - 44032: 0x9E63,
	50624 - 44032: 0x9E64,
	50625 - 44032: 0x9E65,
	50626 - 44032: 0x9E66,
	50627 - 44032: 0x9E67,
	50628 - 44032: 0xBEF6,
	50629 - 44032: 0xBEF7,
	50630 - 44032: 0xBEF8,
	50631 - 44032: 0xBEF9,
	50632 - 44032: 0xBEFA,
	50633 - 44032: 0xBEFB,
	50634 - 44032: 0xBEFC,
	50635 - 44032: 0x9E68,
	50636 - 44032: 0xBEFD,
	50637 - 44032: 0x9E69,
	50638 - 44032: 0xBEFE,
	50639 - 44032: 0x9E6A,
	50640 - 44032: 0xBFA1,
	50641 - 44032: 0xBFA2,
	50642 - 44032: 0x9E6B,
	50643 - 44032: 0x9E6C,
	50644 - 44032: 0xBFA3,
	50645 - 44032: 0x9E6D,
	50646 - 44032: 0x9E6E,
	50647 - 44032: 0x9E6F,
	50648 - 44032: 0xBFA4,
	50649 - 44032: 0x9E70,
	50650 - 44032: 0x9E71,
	50651 - 44032: 0x9E72,
	50652 - 44032: 0x9E73,
	50653 - 44032: 0x9E74,
	50654 - 44032: 0x9E75,
	50655 - 44032: 0x9E76,
	50656 - 44032: 0xBFA5,
	50657 - 44032: 0xBFA6,
	50658 - 44032: 0x9E77,
	50659 - 44032: 0xBFA7,
	50660 - 44032: 0x9E78,
	50661 - 44032: 0xBFA8,
	50662 - 44032: 0x9E79,
	50663 - 44032: 0x9E7A,
	50664 - 44032: 0x9E81,
	50665 - 44032: 0x9E82,
	50666 - 44032: 0x9E83,
	50667 - 44032: 0x9E84,
	50668 - 44032: 0xBFA9,
	50669 - 44032: 0xBFAA,
	50670 - 44032: 0xBFAB,
	50671 - 44032: 0x9E85,
	50672 - 44032: 0xBFAC,
	50673 - 44032: 0x9E86,
	50674 - 44032: 0x9E87,
	50675 - 44032: 0x9E88,
	50676 - 44032: 0xBFAD,
	50677 - 44032: 0x9E89,
	50678 - 44032: 0xBFAE,
	50679 - 44032: 0xBFAF,
	50680 - 44032: 0x9E8A,
	50681 - 44032: 0x9E8B,
	50682 - 44032: 0x9E8C,
	50683 - 44032: 0x9E8D,
	50684 - 44032: 0xBFB0,
	50685 - 44032: 0xBFB1,
	50686 - 44032: 0xBFB2,
	50687 - 44032: 0xBFB3,
	50688 - 44032: 0xBFB4,
	50689 - 44032: 0xBFB5,
	50690 - 44032: 0x9E8E,
	50691 - 44032: 0x9E8F,
	50692 - 44032: 0x9E90,
	50693 - 44032: 0xBFB6,
	50694 - 44032: 0xBFB7,
	50695 - 44032: 0xBFB8,
	50696 - 44032: 0xBFB9,
	50697 - 44032: 0x9E91,
	50698 - 44032: 0x9E92,
	50699 - 44032: 0x9E93,
	50700 - 44032: 0xBFBA,
	50701 - 44032: 0x9E94,
	50702 - 44032: 0x9E95,
	50703 - 44032: 0x9E96,
	50704 - 44032: 0xBFBB,
	50705 - 44032: 0x9E97,
	50706 - 44032: 0x9E98,
	50707 - 44032: 0x9E99,
	50708 - 44032: 0x9E9A,
	50709 - 44032: 0x9E9B,
	50710 - 44032: 0x9E9C,
	50711 - 44032: 0x9E9D,
	50712 - 44032: 0xBFBC,
	50713 - 44032: 0xBFBD,
	50714 - 44032: 0x9E9E,
	50715 - 44032: 0xBFBE,
	50716 - 44032: 0xBFBF,
	50717 - 44032: 0x9E9F,
	50718 - 44032: 0x9EA0,
	50719 - 44032: 0x9EA1,
	50720 - 44032: 0x9EA2,
	50721 - 44032: 0x9EA3,
	50722 - 44032: 0x9EA4,
	50723 - 44032: 0x9EA5,
	50724 - 44032: 0xBFC0,
	50725 - 44032: 0xBFC1,
	50726 - 44032: 0x9EA6,
	50727 - 44032: 0x9EA7,
	50728 - 44032: 0xBFC2,
	50729 - 44032: 0x9EA8,
	50730 - 44032: 0x9EA9,
	50731 - 44032: 0x9EAA,
	50732 - 44032: 0xBFC3,
	50733 - 44032: 0xBFC4,
	50734 - 44032: 0xBFC5,
	50735 - 44032: 0x9EAB,
	50736 - 44032: 0xBFC6,
	50737 - 44032: 0x9EAC,
	50738 - 44032: 0x9EAD,
	50739 - 44032: 0xBFC7,
	50740 - 44032: 0xBFC8,
	50741 - 44032: 0xBFC9,
	50742 - 44032: 0x9EAE,
	50743 - 44032: 0xBFCA,
	50744 - 44032: 0x9EAF,
	50745 - 44032: 0xBFCB,
	50746 - 44032: 0x9EB0,
	50747 - 44032: 0xBFCC,
	50748 - 44032: 0x9EB1,
	50749 - 44032: 0x9EB2,
	50750 - 44032: 0x9EB3,
	50751 - 44032: 0x9EB4,
	50752 - 44032: 0xBFCD,
	50753 - 44032: 0xBFCE,
	50754 - 44032: 0x9EB5,
	50755 - 44032: 0x9EB6,
	50756 - 44032: 0xBFCF,
	50757 - 44032: 0x9EB7,
	50758 - 44032: 0x9EB8,
	50759 - 44032: 0x9EB9,
	50760 - 44032: 0xBFD0,
	50761 - 44032: 0x9EBA,
	50762 - 44032: 0x9EBB,
	50763 - 44032: 0x9EBC,
	50764 - 44032: 0x9EBD,
	50765 - 44032: 0x9EBE,
	50766 - 44032: 0x9EBF,
	50767 - 44032: 0x9EC0,
	50768 - 44032: 0xBFD1,
	50769 - 44032: 0xBFD2,
	50770 - 44032: 0x9EC1,
	50771 - 44032: 0xBFD3,
	50772 - 44032: 0xBFD4,
	50773 - 44032: 0xBFD5,
	50774 - 44032: 0x9EC2,
	50775 - 44032: 0x9EC3,
	50776 - 44032: 0x9EC4,
	50777 - 44032: 0x9EC5,
	50778 - 44032: 0x9EC6,
	50779 - 44032: 0x9EC7,
	50780 - 44032: 0xBFD6,
	50781 - 44032: 0xBFD7,
	50782 - 44032: 0x9EC8,
	50783 - 44032: 0x9EC9,
	50784 - 44032: 0xBFD8,
	50785 - 44032: 0x9ECA,
	50786 - 44032: 0x9ECB,
	50787 - 44032: 0x9ECC,
	50788 - 44032: 0x9ECD,
	50789 - 44032: 0x9ECE,
	50790 - 44032: 0x9ECF,
	50791 - 44032: 0x9ED0,
	50792 - 44032: 0x9ED1,
	50793 - 44032: 0x9ED2,
	50794 - 44032: 0x9ED3,
	50795 - 44032: 0x9ED4,
	50796 - 44032: 0xBFD9,
	50797 - 44032: 0x9ED5,
	50798 - 44032: 0x9ED6,
	50799 - 44032: 0xBFDA,
	50800 - 44032: 0x9ED7,
	50801 - 44032: 0xBFDB,
	50802 - 44032: 0x9ED8,
	50803 - 44032: 0x9ED9,
	50804 - 44032: 0x9EDA,
	50805 - 44032: 0x9EDB,
	50806 - 44032: 0x9EDC,
	50807 - 44032: 0x9EDD,
	50808 - 44032: 0xBFDC,
	50809 - 44032: 0xBFDD,
	50810 - 44032: 0x9EDE,
	50811 - 44032: 0x9EDF,
	50812 - 44032: 0xBFDE,
	50813 - 44032: 0x9EE0,
	50814 - 44032: 0x9EE1,
	50815 - 44032: 0x9EE2,
	50816 - 44032: 0xBFDF,
	50817 - 44032: 0x9EE3,
	50818 - 44032: 0x9EE4,
	50819 - 44032: 0x9EE5,
	50820 - 44032: 0x9EE6,
	50821 - 44032: 0x9EE7,
	50822 - 44032: 0x9EE8,
	50823 - 44032: 0x9EE9,
	50824 - 44032: 0xBFE0,
	50825 - 44032: 0xBFE1,
	50826 - 44032: 0x9EEA,
	50827 - 44032: 0xBFE2,
	50828 - 44032: 0x9EEB,
	50829 - 44032: 0xBFE3,
	50830 - 44032: 0x9EEC,
	50831 - 44032: 0x9EED,
	50832 - 44032: 0x9EEE,
	50833 - 44032: 0x9EEF,
	50834 - 44032: 0x9EF0,
	50835 - 44032: 0x9EF1,
	50836 - 44032: 0xBFE4,
	50837 - 44032: 0xBFE5,
	50838 - 44032: 0x9EF2,
	50839 - 44032: 0x9EF3,
	50840 - 44032: 0xBFE6,
	50841 - 44032: 0x9EF4,
	50842 - 44032: 0x9EF5,
	50843 - 44032: 0x9EF6,
	50844 - 44032: 0xBFE7,
	50845 - 44032: 0x9EF7,
	50846 - 44032: 0x9EF8,
	50847 - 44032: 0x9EF9,
	50848 - 44032: 0x9EFA,
	50849 - 44032: 0x9EFB,
	50850 - 44032: 0x9EFC,
	50851 - 44032: 0x9EFD,
	50852 - 44032: 0xBFE8,
	50853 - 44032: 0xBFE9,
	50854 - 44032: 0x9EFE,
	50855 - 44032: 0xBFEA,
	50856 - 44032: 0x9F41,
	50857 - 44032: 0xBFEB,
	50858 - 44032: 0x9F42,
	50859 - 44032: 0x9F43,
	50860 - 44032: 0x9F44,
	50861 - 44032: 0x9F45,
	50862 - 44032: 0x9F46,
	50863 - 44032: 0x9F47,
	50864 - 44032: 0xBFEC,
	50865 - 44032: 0xBFED,
	50866 - 44032: 0x9F48,
	50867 - 44032: 0x9F49,
	50868 - 44032: 0xBFEE,
	50869 - 44032: 0x9F4A,
	50870 - 44032: 0x9F4B,
	50871 - 44032: 0x9F4C,
	50872 - 44032: 0xBFEF,
	50873 - 44032: 0xBFF0,
	50874 - 44032: 0xBFF1,
	50875 - 44032: 0x9F4D,
	50876 - 44032: 0x9F4E,
	50877 - 44032: 0x9F4F,
	50878 - 44032: 0x9F50,
	50879 - 44032: 0x9F51,
	50880 - 44032: 0xBFF2,
	50881 - 44032: 0xBFF3,
	50882 - 44032: 0x9F52,
	50883 - 44032: 0xBFF4,
	50884 - 44032: 0x9F53,
	50885 - 44032: 0xBFF5,
	50886 - 44032: 0x9F54,
	50887 - 44032: 0x9F55,
	50888 - 44032: 0x9F56,
	50889 - 44032: 0x9F57,
	50890 - 44032: 0x9F58,
	50891 - 44032: 0x9F59,
	50892 - 44032: 0xBFF6,
	50893 - 44032: 0xBFF7,
	50894 - 44032: 0x9F5A,
	50895 - 44032: 0x9F61,
	50896 - 44032: 0xBFF8,
	50897 - 44032: 0x9F62,
	50898 - 44032: 0x9F63,
	50899 - 44032: 0x9F64,
	50900 - 44032: 0xBFF9,
	50901 - 44032: 0x9F65,
	50902 - 44032: 0x9F66,
	50903 - 44032: 0x9F67,
	50904 - 44032: 0x9F68,
	50905 - 44032: 0x9F69,
	50906 - 44032: 0x9F6A,
	50907 - 44032: 0x9F6B,
	50908 - 44032: 0xBFFA,
	50909 - 44032: 0xBFFB,
	50910 - 44032: 0x9F6C,
	50911 - 44032: 0x9F6D,
	50912 - 44032: 0xBFFC,
	50913 - 44032: 0xBFFD,
	50914 - 44032: 0x9F6E,
	50915 - 44032: 0x9F6F,
	50916 - 44032: 0x9F70,
	50917 - 44032: 0x9F71,
	50918 - 44032: 0x9F72,
	50919 - 44032: 0x9F73,
	50920 - 44032: 0xBFFE,
	50921 - 44032: 0xC0A1,
	50922 - 44032: 0x9F74,
	50923 - 44032: 0x9F75,
	50924 - 44032: 0xC0A2,
	50925 - 44032: 0x9F76,
	50926 - 44032: 0x9F77,
	50927 - 44032: 0x9F78,
	50928 - 44032: 0xC0A3,
	50929 - 44032: 0x9F79,
	50930 - 44032: 0x9F7A,
	50931 - 44032: 0x9F81,
	50932 - 44032: 0x9F82,
	50933 - 44032: 0x9F83,
	50934 - 44032: 0x9F84,
	50935 - 44032: 0x9F85,
	50936 - 44032: 0xC0A4,
	50937 - 44032: 0xC0A5,
	50938 - 44032: 0x9F86,
	50939 - 44032: 0x9F87,
	50940 - 44032: 0x9F88,
	50941 - 44032: 0xC0A6,
	50942 - 44032: 0x9F89,
	50943 - 44032: 0x9F8A,
	50944 - 44032: 0x9F8B,
	50945 - 44032: 0x9F8C,
	50946 - 44032: 0x9F8D,
	50947 - 44032: 0x9F8E,
	50948 - 44032: 0xC0A7,
	50949 - 44032: 0xC0A8,
	50950 - 44032: 0x9F8F,
	50951 - 44032: 0x9F90,
	50952 - 44032: 0xC0A9,
	50953 - 44032: 0x9F91,
	50954 - 44032: 0x9F92,
	50955 - 44032: 0x9F93,
	50956 - 44032: 0xC0AA,
	50957 - 44032: 0x9F94,
	50958 - 44032: 0x9F95,
	50959 - 44032: 0x9F96,
	50960 - 44032: 0x9F97,
	50961 - 44032: 0x9F98,
	50962 - 44032: 0x9F99,
	50963 - 44032: 0x9F9A,
	50964 - 44032: 0xC0AB,
	50965 - 44032: 0xC0AC,
	50966 - 44032: 0x9F9B,
	50967 - 44032: 0xC0AD,
	50968 - 44032: 0x9F9C,
	50969 - 44032: 0xC0AE,
	50970 - 44032: 0x9F9D,
	50971 - 44032: 0x9F9E,
	50972 - 44032: 0x9F9F,
	50973 - 44032: 0x9FA0,
	50974 - 44032: 0x9FA1,
	50975 - 44032: 0x9FA2,
	50976 - 44032: 0xC0AF,
	50977 - 44032: 0xC0B0,
	50978 - 44032: 0x9FA3,
	50979 - 44032: 0x9FA4,
	50980 - 44032: 0xC0B1,
	50981 - 44032: 0x9FA5,
	50982 - 44032: 0x9FA6,
	50983 - 44032: 0x9FA7,
	50984 - 44032: 0xC0B2,
	50985 - 44032: 0x9FA8,
	50986 - 44032: 0x9FA9,
	50987 - 44032: 0x9FAA,
	50988 - 44032: 0x9FAB,
	50989 - 44032: 0x9FAC,
	50990 - 44032: 0x9FAD,
	50991 - 44032: 0x9FAE,
	50992 - 44032: 0xC0B3,
	50993 - 44032: 0xC0B4,
	50994 - 44032: 0x9FAF,
	50995 - 44032: 0xC0B5,
	50996 - 44032: 0x9FB0,
	50997 - 44032: 0xC0B6,
	50998 - 44032: 0x9FB1,
	50999 - 44032: 0xC0B7,
	51000 - 44032: 0x9FB2,
	51001 - 44032: 0x9FB3,
	51002 - 44032: 0x9FB4,
	51003 - 44032: 0x9FB5,
	51004 - 44032: 0xC0B8,
	51005 - 44032: 0xC0B9,
	51006 - 44032: 0x9FB6,
	51007 - 44032: 0x9FB7,
	51008 - 44032: 0xC0BA,
	51009 - 44032: 0x9FB8,
	51010 - 44032: 0x9FB9,
	51011 - 44032: 0x9FBA,
	51012 - 44032: 0xC0BB,
	51013 - 44032: 0x9FBB,
	51014 - 44032: 0x9FBC,
	51015 - 44032: 0x9FBD,
	51016 - 44032: 0x9FBE,
	51017 - 44032: 0x9FBF,
	51018 - 44032: 0xC0BC,
	51019 - 44032: 0x9FC0,
	51020 - 44032: 0xC0BD,
	51021 - 44032: 0xC0BE,
	51022 - 44032: 0x9FC1,
	51023 - 44032: 0xC0BF,
	51024 - 44032: 0x9FC2,
	51025 - 44032: 0xC0C0,
	51026 - 44032: 0xC0C1,
	51027 - 44032: 0xC0C2,
	51028 - 44032: 0xC0C3,
	51029 - 44032: 0xC0C4,
	51030 - 44032: 0xC0C5,
	51031 - 44032: 0xC0C6,
	51032 - 44032: 0xC0C7,
	51033 - 44032: 0x9FC3,
	51034 - 44032: 0x9FC4,
	51035 - 44032: 0x9FC5,
	51036 - 44032: 0xC0C8,
	51037 - 44032: 0x9FC6,
	51038 - 44032: 0x9FC7,
	51039 - 44032: 0x9FC8,
	51040 - 44032: 0xC0C9,
	51041 - 44032: 0x9FC9,
	51042 - 44032: 0x9FCA,
	51043 - 44032: 0x9FCB,
	51044 - 44032: 0x9FCC,
	51045 - 44032: 0x9FCD,
	51046 - 44032: 0x9FCE,
	51047 - 44032: 0x9FCF,
	51048 - 44032: 0xC0CA,
	51049 - 44032: 0x9FD0,
	51050 - 44032: 0x9FD1,
	51051 - 44032: 0xC0CB,
	51052 - 44032: 0x9FD2,
	51053 - 44032: 0x9FD3,
	51054 - 44032: 0x9FD4,
	51055 - 44032: 0x9FD5,
	51056 - 44032: 0x9FD6,
	51057 - 44032: 0x9FD7,
	51058 - 44032: 0x9FD8,
	51059 - 44032: 0x9FD9,
	51060 - 44032: 0xC0CC,
	51061 - 44032: 0xC0CD,
	51062 - 44032: 0x9FDA,
	51063 - 44032: 0x9FDB,
	51064 - 44032: 0xC0CE,
	51065 - 44032: 0x9FDC,
	51066 - 44032: 0x9FDD,
	51067 - 44032: 0x9FDE,
	51068 - 44032: 0xC0CF,
	51069 - 44032: 0xC0D0,
	51070 - 44032: 0xC0D1,
	51071 - 44032: 0x9FDF,
	51072 - 44032: 0x9FE0,
	51073 - 44032: 0x9FE1,
	51074 - 44032: 0x9FE2,
	51075 - 44032: 0xC0D2,
	51076 - 44032: 0xC0D3,
	51077 - 44032: 0xC0D4,
	51078 - 44032: 0x9FE3,
	51079 - 44032: 0xC0D5,
	51080 - 44032: 0xC0D6,
	51081 - 44032: 0xC0D7,
	51082 - 44032: 0xC0D8,
	51083 - 44032: 0x9FE4,
	51084 - 44032: 0x9FE5,
	51085 - 44032: 0x9FE6,
	51086 - 44032: 0xC0D9,
	51087 - 44032: 0x9FE7,
	51088 - 44032: 0xC0DA,
	51089 - 44032: 0xC0DB,
	51090 - 44032: 0x9FE8,
	51091 - 44032: 0x9FE9,
	51092 - 44032: 0xC0DC,
	51093 - 44032: 0x9FEA,
	51094 - 44032: 0xC0DD,
	51095 - 44032: 0xC0DE,
	51096 - 44032: 0xC0DF,
	51097 - 44032: 0x9FEB,
	51098 - 44032: 0xC0E0,
	51099 - 44032: 0x9FEC,
	51100 - 44032: 0x9FED,
	51101 - 44032: 0x9FEE,
	51102 - 44032: 0x9FEF,
	51103 - 44032: 0x9FF0,
	51104 - 44032: 0xC0E1,
	51105 - 44032: 0xC0E2,
	51106 - 44032: 0x9FF1,
	51107 - 44032: 0xC0E3,
	51108 - 44032: 0xC0E4,
	51109 - 44032: 0xC0E5,
	51110 - 44032: 0xC0E6,
	51111 - 44032: 0x9FF2,
	51112 - 44032: 0x9FF3,
	51113 - 44032: 0x9FF4,
	51114 - 44032: 0x9FF5,
	51115 - 44032: 0x9FF6,
	51116 - 44032: 0xC0E7,
	51117 - 44032: 0xC0E8,
	51118 - 44032: 0x9FF7,
	51119 - 44032: 0x9FF8,
	51120 - 44032: 0xC0E9,
	51121 - 44032: 0x9FF9,
	51122 - 44032: 0x9FFA,
	51123 - 44032: 0x9FFB,
	51124 - 44032: 0xC0EA,
	51125 - 44032: 0x9FFC,
	51126 - 44032: 0x9FFD,
	51127 - 44032: 0x9FFE,
	51128 - 44032: 0xA041,
	51129 - 44032: 0xA042,
	51130 - 44032: 0xA043,
	51131 - 44032: 0xA044,
	51132 - 44032: 0xC0EB,
	51133 - 44032: 0xC0EC,
	51134 - 44032: 0xA045,
	51135 - 44032: 0xC0ED,
	51136 - 44032: 0xC0EE,
	51137 - 44032: 0xC0EF,
	51138 - 44032: 0xA046,
	51139 - 44032: 0xA047,
	51140 - 44032: 0xA048,
	51141 - 44032: 0xA049,
	51142 - 44032: 0xA04A,
	51143 - 44032: 0xA04B,
	51144 - 44032: 0xC0F0,
	51145 - 44032: 0xC0F1,
	51146 - 44032: 0xA04C,
	51147 - 44032: 0xA04D,
	51148 - 44032: 0xC0F2,
	51149 - 44032: 0xA04E,
	51150 - 44032: 0xC0F3,
	51151 - 44032: 0xA04F,
	51152 - 44032: 0xC0F4,
	51153 - 44032: 0xA050,
	51154 - 44032: 0xA051,
	51155 - 44032: 0xA052,
	51156 - 44032: 0xA053,
	51157 - 44032: 0xA054,
	51158 - 44032: 0xA055,
	51159 - 44032: 0xA056,
	51160 - 44032: 0xC0F5,
	51161 - 44032: 0xA057,
	51162 - 44032: 0xA058,
	51163 - 44032: 0xA059,
	51164 - 44032: 0xA05A,
	51165 - 44032: 0xC0F6,
	51166 - 44032: 0xA061,
	51167 - 44032: 0xA062,
	51168 - 44032: 0xA063,
	51169 - 44032: 0xA064,
	51170 - 44032: 0xA065,
	51171 - 44032: 0xA066,
	51172 - 44032: 0xC0F7,
	51173 - 44032: 0xA067,
	51174 - 44032: 0xA068,
	51175 - 44032: 0xA069,
	51176 - 44032: 0xC0F8,
	51177 - 44032: 0xA06A,
	51178 - 44032: 0xA06B,
	51179 - 44032: 0xA06C,
	51180 - 44032: 0xC0F9,
	51181 - 44032: 0xA06D,
	51182 - 44032: 0xA06E,
	51183 - 44032: 0xA06F,
	51184 - 44032: 0xA070,
	51185 - 44032: 0xA071,
	51186 - 44032: 0xA072,
	51187 - 44032: 0xA073,
	51188 - 44032: 0xA074,
	51189 - 44032: 0xA075,
	51190 - 44032: 0xA076,
	51191 - 44032: 0xA077,
	51192 - 44032: 0xA078,
	51193 - 44032: 0xA079,
	51194 - 44032: 0xA07A,
	51195 - 44032: 0xA081,
	51196 - 44032: 0xA082,
	51197 - 44032: 0xA083,
	51198 - 44032: 0xA084,
	51199 - 44032: 0xA085,
	51200 - 44032: 0xC0FA,
	51201 - 44032: 0xC0FB,
	51202 - 44032: 0xA086,
	51203 - 44032: 0xA087,
	51204 - 44032: 0xC0FC,
	51205 - 44032: 0xA088,
	51206 - 44032: 0xA089,
	51207 - 44032: 0xA08A,
	51208 - 44032: 0xC0FD,
	51209 - 44032: 0xA08B,
	51210 - 44032: 0xC0FE,
	51211 - 44032: 0xA08C,
	51212 - 44032: 0xA08D,
	51213 - 44032: 0xA08E,
	51214 - 44032: 0xA08F,
	51215 - 44032: 0xA090,
	51216 - 44032: 0xC1A1,
	51217 - 44032: 0xC1A2,
	51218 - 44032: 0xA091,
	51219 - 44032: 0xC1A3,
	51220 - 44032: 0xA092,
	51221 - 44032: 0xC1A4,
	51222 - 44032: 0xC1A5,
	51223 - 44032: 0xA093,
	51224 - 44032: 0xA094,
	51225 - 44032: 0xA095,
	51226 - 44032: 0xA096,
	51227 - 44032: 0xA097,
	51228 - 44032: 0xC1A6,
	51229 - 44032: 0xC1A7,
	51230 - 44032: 0xA098,
	51231 - 44032: 0xA099,
	51232 - 44032: 0xC1A8,
	51233 - 44032: 0xA09A,
	51234 - 44032: 0xA09B,
	51235 - 44032: 0xA09C,
	51236 - 44032: 0xC1A9,
	51237 - 44032: 0xA09D,
	51238 - 44032: 0xA09E,
	51239 - 44032: 0xA09F,
	51240 - 44032: 0xA0A0,
	51241 - 44032: 0xA0A1,
	51242 - 44032: 0xA0A2,
	51243 - 44032: 0xA0A3,
	51244 - 44032: 0xC1AA,
	51245 - 44032: 0xC1AB,
	51246 - 44032: 0xA0A4,
	51247 - 44032: 0xC1AC,
	51248 - 44032: 0xA0A5,
	51249 - 44032: 0xC1AD,
	51250 - 44032: 0xA0A6,
	51251 - 44032: 0xA0A7,
	51252 - 44032: 0xA0A8,
	51253 - 44032: 0xA0A9,
	51254 - 44032: 0xA0AA,
	51255 - 44032: 0xA0AB,
	51256 - 44032: 0xC1AE,
	51257 - 44032: 0xA0AC,
	51258 - 44032: 0xA0AD,
	51259 - 44032: 0xA0AE,
	51260 - 44032: 0xC1AF,
	51261 - 44032: 0xA0AF,
	51262 - 44032: 0xA0B0,
	51263 - 44032: 0xA0B1,
	51264 - 44032: 0xC1B0,
	51265 - 44032: 0xA0B2,
	51266 - 44032: 0xA0B3,
	51267 - 44032: 0xA0B4,
	51268 - 44032: 0xA0B5,
	51269 - 44032: 0xA0B6,
	51270 - 44032: 0xA0B7,
	51271 - 44032: 0xA0B8,
	51272 - 44032: 0xC1B1,
	51273 - 44032: 0xC1B2,
	51274 - 44032: 0xA0B9,
	51275 - 44032: 0xA0BA,
	51276 - 44032: 0xC1B3,
	51277 - 44032: 0xC1B4,
	51278 - 44032: 0xA0BB,
	51279 - 44032: 0xA0BC,
	51280 - 44032: 0xA0BD,
	51281 - 44032: 0xA0BE,
	51282 - 44032: 0xA0BF,
	51283 - 44032: 0xA0C0,
	51284 - 44032: 0xC1B5,
	51285 - 44032: 0xA0C1,
	51286 - 44032: 0xA0C2,
	51287 - 44032: 0xA0C3,
	51288 - 44032: 0xA0C4,
	51289 - 44032: 0xA0C5,
	51290 - 44032: 0xA0C6,
	51291 - 44032: 0xA0C7,
	51292 - 44032: 0xA0C8,
	51293 - 44032: 0xA0C9,
	51294 - 44032: 0xA0CA,
	51295 - 44032: 0xA0CB,
	51296 - 44032: 0xA0CC,
	51297 - 44032: 0xA0CD,
	51298 - 44032: 0xA0CE,
	51299 - 44032: 0xA0CF,
	51300 - 44032: 0xA0D0,
	51301 - 44032: 0xA0D1,
	51302 - 44032: 0xA0D2,
	51303 - 44032: 0xA0D3,
	51304 - 44032: 0xA0D4,
	51305 - 44032: 0xA0D5,
	51306 - 44032: 0xA0D6,
	51307 - 44032: 0xA0D7,
	51308 - 44032: 0xA0D8,
	51309 - 44032: 0xA0D9,
	51310 - 44032: 0xA0DA,
	51311 - 44032: 0xA0DB,
	51312 - 44032: 0xC1B6,
	51313 - 44032: 0xC1B7,
	51314 - 44032: 0xA0DC,
	51315 - 44032: 0xA0DD,
	51316 - 44032: 0xC1B8,
	51317 - 44032: 0xA0DE,
	51318 - 44032: 0xA0DF,
	51319 - 44032: 0xA0E0,
	51320 - 44032: 0xC1B9,
	51321 - 44032: 0xA0E1,
	51322 - 44032: 0xC1BA,
	51323 - 44032: 0xA0E2,
	51324 - 44032: 0xA0E3,
	51325 - 44032: 0xA0E4,
	51326 - 44032: 0xA0E5,
	51327 - 44032: 0xA0E6,
	51328 - 44032: 0xC1BB,
	51329 - 44032: 0xC1BC,
	51330 - 44032: 0xA0E7,
	51331 - 44032: 0xC1BD,
	51332 - 44032: 0xA0E8,
	51333 - 44032: 0xC1BE,
	51334 - 44032: 0xC1BF,
	51335 - 44032: 0xC1C0,
	51336 - 44032: 0xA0E9,
	51337 - 44032: 0xA0EA,
	51338 - 44032: 0xA0EB,
	51339 - 44032: 0xC1C1,
	51340 - 44032: 0xC1C2,
	51341 - 44032: 0xC1C3,
	51342 - 44032: 0xA0EC,
	51343 - 44032: 0xA0ED,
	51344 - 44032: 0xA0EE,
	51345 - 44032: 0xA0EF,
	51346 - 44032: 0xA0F0,
	51347 - 44032: 0xA0F1,
	51348 - 44032: 0xC1C4,
	51349 - 44032: 0xA0F2,
	51350 - 44032: 0xA0F3,
	51351 - 44032: 0xA0F4,
	51352 - 44032: 0xA0F5,
	51353 - 44032: 0xA0F6,
	51354 - 44032: 0xA0F7,
	51355 - 44032: 0xA0F8,
	51356 - 44032: 0xA0F9,
	51357 - 44032: 0xC1C5,
	51358 - 44032: 0xA0FA,
	51359 - 44032: 0xC1C6,
	51360 - 44032: 0xA0FB,
	51361 - 44032: 0xC1C7,
	51362 - 44032: 0xA0FC,
	51363 - 44032: 0xA0FD,
	51364 - 44032: 0xA0FE,
	51365 - 44032: 0xA141,
	51366 - 44032: 0xA142,
	51367 - 44032: 0xA143,
	51368 - 44032: 0xC1C8,
	51369 - 44032: 0xA144,
	51370 - 44032: 0xA145,
	51371 - 44032: 0xA146,
	51372 - 44032: 0xA147,
	51373 - 44032: 0xA148,
	51374 - 44032: 0xA149,
	51375 - 44032: 0xA14A,
	51376 - 44032: 0xA14B,
	51377 - 44032: 0xA14C,
	51378 - 44032: 0xA14D,
	51379 - 44032: 0xA14E,
	51380 - 44032: 0xA14F,
	51381 - 44032: 0xA150,
	51382 - 44032: 0xA151,
	51383 - 44032: 0xA152,
	51384 - 44032: 0xA153,
	51385 - 44032: 0xA154,
	51386 - 44032: 0xA155,
	51387 - 44032: 0xA156,
	51388 - 44032: 0xC1C9,
	51389 - 44032: 0xC1CA,
	51390 - 44032: 0xA157,
	51391 - 44032: 0xA158,
	51392 - 44032: 0xA159,
	51393 - 44032: 0xA15A,
	51394 - 44032: 0xA161,
	51395 - 44032: 0xA162,
	51396 - 44032: 0xC1CB,
	51397 - 44032: 0xA163,
	51398 - 44032: 0xA164,
	51399 - 44032: 0xA165,
	51400 - 44032: 0xC1CC,
	51401 - 44032: 0xA166,
	51402 - 44032: 0xA167,
	51403 - 44032: 0xA168,
	51404 - 44032: 0xC1CD,
	51405 - 44032: 0xA169,
	51406 - 44032: 0xA16A,
	51407 - 44032: 0xA16B,
	51408 - 44032: 0xA16C,
	51409 - 44032: 0xA16D,
	51410 - 44032: 0xA16E,
	51411 - 44032: 0xA16F,
	51412 - 44032: 0xC1CE,
	51413 - 44032: 0xC1CF,
	51414 - 44032: 0xA170,
	51415 - 44032: 0xC1D0,
	51416 - 44032: 0xA171,
	51417 - 44032: 0xC1D1,
	51418 - 44032: 0xA172,
	51419 - 44032: 0xA173,
	51420 - 44032: 0xA174,
	51421 - 44032: 0xA175,
	51422 - 44032: 0xA176,
	51423 - 44032: 0xA177,
	51424 - 44032: 0xC1D2,
	51425 - 44032: 0xC1D3,
	51426 - 44032: 0xA178,
	51427 - 44032: 0xA179,
	51428 - 44032: 0xC1D4,
	51429 - 44032: 0xA17A,
	51430 - 44032: 0xA181,
	51431 - 44032: 0xA182,
	51432 - 44032: 0xA183,
	51433 - 44032: 0xA184,
	51434 - 44032: 0xA185,
	51435 - 44032: 0xA186,
	51436 - 44032: 0xA187,
	51437 - 44032: 0xA188,
	51438 - 44032: 0xA189,
	51439 - 44032: 0xA18A,
	51440 - 44032: 0xA18B,
	51441 - 44032: 0xA18C,
	51442 - 44032: 0xA18D,
	51443 - 44032: 0xA18E,
	51444 - 44032: 0xA18F,
	51445 - 44032: 0xC1D5,
	51446 - 44032: 0xA190,
	51447 - 44032: 0xA191,
	51448 - 44032: 0xA192,
	51449 - 44032: 0xA193,
	51450 - 44032: 0xA194,
	51451 - 44032: 0xA195,
	51452 - 44032: 0xC1D6,
	51453 - 44032: 0xC1D7,
	51454 - 44032: 0xA196,
	51455 - 44032: 0xA197,
	51456 - 44032: 0xC1D8,
	51457 - 44032: 0xA198,
	51458 - 44032: 0xA199,
	51459 - 44032: 0xA19A,
	51460 - 44032: 0xC1D9,
	51461 - 44032: 0xC1DA,
	51462 - 44032: 0xC1DB,
	51463 - 44032: 0xA19B,
	51464 - 44032: 0xA19C,
	51465 - 44032: 0xA19D,
	51466 - 44032: 0xA19E,
	51467 - 44032: 0xA19F,
	51468 - 44032: 0xC1DC,
	51469 - 44032: 0xC1DD,
	51470 - 44032: 0xA1A0,
	51471 - 44032: 0xC1DE,
	51472 - 44032: 0xA241,
	51473 - 44032: 0xC1DF,
	51474 - 44032: 0xA242,
	51475 - 44032: 0xA243,
	51476 - 44032: 0xA244,
	51477 - 44032: 0xA245,
	51478 - 44032: 0xA246,
	51479 - 44032: 0xA247,
	51480 - 44032: 0xC1E0,
	51481 - 44032: 0xA248,
	51482 - 44032: 0xA249,
	51483 - 44032: 0xA24A,
	51484 - 44032: 0xA24B,
	51485 - 44032: 0xA24C,
	51486 - 44032: 0xA24D,
	51487 - 44032: 0xA24E,
	51488 - 44032: 0xA24F,
	51489 - 44032: 0xA250,
	51490 - 44032: 0xA251,
	51491 - 44032: 0xA252,
	51492 - 44032: 0xA253,
	51493 - 44032: 0xA254,
	51494 - 44032: 0xA255,
	51495 - 44032: 0xA256,
	51496 - 44032: 0xA257,
	51497 - 44032: 0xA258,
	51498 - 44032: 0xA259,
	51499 - 44032: 0xA25A,
	51500 - 44032: 0xC1E1,
	51501 - 44032: 0xA261,
	51502 - 44032: 0xA262,
	51503 - 44032: 0xA263,
	51504 - 44032: 0xA264,
	51505 - 44032: 0xA265,
	51506 - 44032: 0xA266,
	51507 - 44032: 0xA267,
	51508 - 44032: 0xC1E2,
	51509 - 44032: 0xA268,
	51510 - 44032: 0xA269,
	51511 - 44032: 0xA26A,
	51512 - 44032: 0xA26B,
	51513 - 44032: 0xA26C,
	51514 - 44032: 0xA26D,
	51515 - 44032: 0xA26E,
	51516 - 44032: 0xA26F,
	51517 - 44032: 0xA270,
	51518 - 44032: 0xA271,
	51519 - 44032: 0xA272,
	51520 - 44032: 0xA273,
	51521 - 44032: 0xA274,
	51522 - 44032: 0xA275,
	51523 - 44032: 0xA276,
	51524 - 44032: 0xA277,
	51525 - 44032: 0xA278,
	51526 - 44032: 0xA279,
	51527 - 44032: 0xA27A,
	51528 - 44032: 0xA281,
	51529 - 44032: 0xA282,
	51530 - 44032: 0xA283,
	51531 - 44032: 0xA284,
	51532 - 44032: 0xA285,
	51533 - 44032: 0xA286,
	51534 - 44032: 0xA287,
	51535 - 44032: 0xA288,
	51536 - 44032: 0xC1E3,
	51537 - 44032: 0xC1E4,
	51538 - 44032: 0xA289,
	51539 - 44032: 0xA28A,
	51540 - 44032: 0xC1E5,
	51541 - 44032: 0xA28B,
	51542 - 44032: 0xA28C,
	51543 - 44032: 0xA28D,
	51544 - 44032: 0xC1E6,
	51545 - 44032: 0xA28E,
	51546 - 44032: 0xA28F,
	51547 - 44032: 0xA290,
	51548 - 44032: 0xA291,
	51549 - 44032: 0xA292,
	51550 - 44032: 0xA293,
	51551 - 44032: 0xA294,
	51552 - 44032: 0xC1E7,
	51553 - 44032: 0xC1E8,
	51554 - 44032: 0xA295,
	51555 - 44032: 0xC1E9,
	51556 - 44032: 0xA296,
	51557 - 44032: 0xA297,
	51558 - 44032: 0xA298,
	51559 - 44032: 0xA299,
	51560 - 44032: 0xA29A,
	51561 - 44032: 0xA29B,
	51562 - 44032: 0xA29C,
	51563 - 44032: 0xA29D,
	51564 - 44032: 0xC1EA,
	51565 - 44032: 0xA29E,
	51566 - 44032: 0xA29F,
	51567 - 44032: 0xA2A0,
	51568 - 44032: 0xC1EB,
	51569 - 44032: 0xA341,
	51570 - 44032: 0xA342,
	51571 - 44032: 0xA343,
	51572 - 44032: 0xC1EC,
	51573 - 44032: 0xA344,
	51574 - 44032: 0xA345,
	51575 - 44032: 0xA346,
	51576 - 44032: 0xA347,
	51577 - 44032: 0xA348,
	51578 - 44032: 0xA349,
	51579 - 44032: 0xA34A,
	51580 - 44032: 0xC1ED,
	51581 - 44032: 0xA34B,
	51582 - 44032: 0xA34C,
	51583 - 44032: 0xA34D,
	51584 - 44032: 0xA34E,
	51585 - 44032: 0xA34F,
	51586 - 44032: 0xA350,
	51587 - 44032: 0xA351,
	51588 - 44032: 0xA352,
	51589 - 44032: 0xA353,
	51590 - 44032: 0xA354,
	51591 - 44032: 0xA355,
	51592 - 44032: 0xC1EE,
	51593 - 44032: 0xC1EF,
	51594 - 44032: 0xA356,
	51595 - 44032: 0xA357,
	51596 - 44032: 0xC1F0,
	51597 - 44032: 0xA358,
	51598 - 44032: 0xA359,
	51599 - 44032: 0xA35A,
	51600 - 44032: 0xC1F1,
	51601 - 44032: 0xA361,
	51602 - 44032: 0xA362,
	51603 - 44032: 0xA363,
	51604 - 44032: 0xA364,
	51605 - 44032: 0xA365,
	51606 - 44032: 0xA366,
	51607 - 44032: 0xA367,
	51608 - 44032: 0xC1F2,
	51609 - 44032: 0xC1F3,
	51610 - 44032: 0xA368,
	51611 - 44032: 0xC1F4,
	51612 - 44032: 0xA369,
	51613 - 44032: 0xC1F5,
	51614 - 44032: 0xA36A,
	51615 - 44032: 0xA36B,
	51616 - 44032: 0xA36C,
	51617 - 44032: 0xA36D,
	51618 - 44032: 0xA36E,
	51619 - 44032: 0xA36F,
	51620 - 44032: 0xA370,
	51621 - 44032: 0xA371,
	51622 - 44032: 0xA372,
	51623 - 44032: 0xA373,
	51624 - 44032: 0xA374,
	51625 - 44032: 0xA375,
	51626 - 44032: 0xA376,
	51627 - 44032: 0xA377,
	51628 - 44032: 0xA378,
	51629 - 44032: 0xA379,
	51630 - 44032: 0xA37A,
	51631 - 44032: 0xA381,
	51632 - 44032: 0xA382,
	51633 - 44032: 0xA383,
	51634 - 44032: 0xA384,
	51635 - 44032: 0xA385,
	51636 - 44032: 0xA386,
	51637 - 44032: 0xA387,
	51638 - 44032: 0xA388,
	51639 - 44032: 0xA389,
	51640 - 44032: 0xA38A,
	51641 - 44032: 0xA38B,
	51642 - 44032: 0xA38C,
	51643 - 44032: 0xA38D,
	51644 - 44032: 0xA38E,
	51645 - 44032: 0xA38F,
	51646 - 44032: 0xA390,
	51647 - 44032: 0xA391,
	51648 - 44032: 0xC1F6,
	51649 - 44032: 0xC1F7,
	51650 - 44032: 0xA392,
	51651 - 44032: 0xA393,
	51652 - 44032: 0xC1F8,
	51653 - 44032: 0xA394,
	51654 - 44032: 0xA395,
	51655 - 44032: 0xC1F9,
	51656 - 44032: 0xC1FA,
	51657 - 44032: 0xA396,
	51658 - 44032: 0xC1FB,
	51659 - 44032: 0xA397,
	51660 - 44032: 0xA398,
	51661 - 44032: 0xA399,
	51662 - 44032: 0xA39A,
	51663 - 44032: 0xA39B,
	51664 - 44032: 0xC1FC,
	51665 - 44032: 0xC1FD,
	51666 - 44032: 0xA39C,
	51667 - 44032: 0xC1FE,
	51668 - 44032: 0xA39D,
	51669 - 44032: 0xC2A1,
	51670 - 44032: 0xC2A2,
	51671 - 44032: 0xA39E,
	51672 - 44032: 0xA39F,
	51673 - 44032: 0xC2A3,
	51674 - 44032: 0xC2A4,
	51675 - 44032: 0xA3A0,
	51676 - 44032: 0xC2A5,
	51677 - 44032: 0xC2A6,
	51678 - 44032: 0xA441,
	51679 - 44032: 0xA442,
	51680 - 44032: 0xC2A7,
	51681 - 44032: 0xA443,
	51682 - 44032: 0xC2A8,
	51683 - 44032: 0xA444,
	51684 - 44032: 0xC2A9,
	51685 - 44032: 0xA445,
	51686 - 44032: 0xA446,
	51687 - 44032: 0xC2AA,
	51688 - 44032: 0xA447,
	51689 - 44032: 0xA448,
	51690 - 44032: 0xA449,
	51691 - 44032: 0xA44A,
	51692 - 44032: 0xC2AB,
	51693 - 44032: 0xC2AC,
	51694 - 44032: 0xA44B,
	51695 - 44032: 0xC2AD,
	51696 - 44032: 0xC2AE,
	51697 - 44032: 0xC2AF,
	51698 - 44032: 0xA44C,
	51699 - 44032: 0xA44D,
	51700 - 44032: 0xA44E,
	51701 - 44032: 0xA44F,
	51702 - 44032: 0xA450,
	51703 - 44032: 0xA451,
	51704 - 44032: 0xC2B0,
	51705 - 44032: 0xC2B1,
	51706 - 44032: 0xA452,
	51707 - 44032: 0xA453,
	51708 - 44032: 0xC2B2,
	51709 - 44032: 0xA454,
	51710 - 44032: 0xA455,
	51711 - 44032: 0xA456,
	51712 - 44032: 0xC2B3,
	51713 - 44032: 0xA457,
	51714 - 44032: 0xA458,
	51715 - 44032: 0xA459,
	51716 - 44032: 0xA45A,
	51717 - 44032: 0xA461,
	51718 - 44032: 0xA462,
	51719 - 44032: 0xA463,
	51720 - 44032: 0xC2B4,
	51721 - 44032: 0xC2B5,
	51722 - 44032: 0xA464,
	51723 - 44032: 0xC2B6,
	51724 - 44032: 0xC2B7,
	51725 - 44032: 0xC2B8,
	51726 - 44032: 0xA465,
	51727 - 44032: 0xA466,
	51728 - 44032: 0xA467,
	51729 - 44032: 0xA468,
	51730 - 44032: 0xA469,
	51731 - 44032: 0xA46A,
	51732 - 44032: 0xC2B9,
	51733 - 44032: 0xA46B,
	51734 - 44032: 0xA46C,
	51735 - 44032: 0xA46D,
	51736 - 44032: 0xC2BA,
	51737 - 44032: 0xA46E,
	51738 - 44032: 0xA46F,
	51739 - 44032: 0xA470,
	51740 - 44032: 0xA471,
	51741 - 44032: 0xA472,
	51742 - 44032: 0xA473,
	51743 - 44032: 0xA474,
	51744 - 44032: 0xA475,
	51745 - 44032: 0xA476,
	51746 - 44032: 0xA477,
	51747 - 44032: 0xA478,
	51748 - 44032: 0xA479,
	51749 - 44032: 0xA47A,
	51750 - 44032: 0xA481,
	51751 - 44032: 0xA482,
	51752 - 44032: 0xA483,
	51753 - 44032: 0xC2BB,
	51754 - 44032: 0xA484,
	51755 - 44032: 0xA485,
	51756 - 44032: 0xA486,
	51757 - 44032: 0xA487,
	51758 - 44032: 0xA488,
	51759 - 44032: 0xA489,
	51760 - 44032: 0xA48A,
	51761 - 44032: 0xA48B,
	51762 - 44032: 0xA48C,
	51763 - 44032: 0xA48D,
	51764 - 44032: 0xA48E,
	51765 - 44032: 0xA48F,
	51766 - 44032: 0xA490,
	51767 - 44032: 0xA491,
	51768 - 44032: 0xA492,
	51769 - 44032: 0xA493,
	51770 - 44032: 0xA494,
	51771 - 44032: 0xA495,
	51772 - 44032: 0xA496,
	51773 - 44032: 0xA497,
	51774 - 44032: 0xA498,
	51775 - 44032: 0xA499,
	51776 - 44032: 0xA49A,
	51777 - 44032: 0xA49B,
	51778 - 44032: 0xA49C,
	51779 - 44032: 0xA49D,
	51780 - 44032: 0xA49E,
	51781 - 44032: 0xA49F,
	51782 - 44032: 0xA4A0,
	51783 - 44032: 0xA541,
	51784 - 44032: 0xA542,
	51785 - 44032: 0xA543,
	51786 - 44032: 0xA544,
	51787 - 44032: 0xA545,
	51788 - 44032: 0xC2BC,
	51789 - 44032: 0xC2BD,
	51790 - 44032: 0xA546,
	51791 - 44032: 0xA547,
	51792 - 44032: 0xC2BE,
	51793 - 44032: 0xA548,
	51794 - 44032: 0xA549,
	51795 - 44032: 0xA54A,
	51796 - 44032: 0xC2BF,
	51797 - 44032: 0xA54B,
	51798 - 44032: 0xA54C,
	51799 - 44032: 0xA54D,
	51800 - 44032: 0xA54E,
	51801 - 44032: 0xA54F,
	51802 - 44032: 0xA550,
	51803 - 44032: 0xA551,
	51804 - 44032: 0xC2C0,
	51805 - 44032: 0xC2C1,
	51806 - 44032: 0xA552,
	51807 - 44032: 0xC2C2,
	51808 - 44032: 0xC2C3,
	51809 - 44032: 0xC2C4,
	51810 - 44032: 0xA553,
	51811 - 44032: 0xA554,
	51812 - 44032: 0xA555,
	51813 - 44032: 0xA556,
	51814 - 44032: 0xA557,
	51815 - 44032: 0xA558,
	51816 - 44032: 0xC2C5,
	51817 - 44032: 0xA559,
	51818 - 44032: 0xA55A,
	51819 - 44032: 0xA561,
	51820 - 44032: 0xA562,
	51821 - 44032: 0xA563,
	51822 - 44032: 0xA564,
	51823 - 44032: 0xA565,
	51824 - 44032: 0xA566,
	51825 - 44032: 0xA567,
	51826 - 44032: 0xA568,
	51827 - 44032: 0xA569,
	51828 - 44032: 0xA56A,
	51829 - 44032: 0xA56B,
	51830 - 44032: 0xA56C,
	51831 - 44032: 0xA56D,
	51832 - 44032: 0xA56E,
	51833 - 44032: 0xA56F,
	51834 - 44032: 0xA570,
	51835 - 44032: 0xA571,
	51836 - 44032: 0xA572,
	51837 - 44032: 0xC2C6,
	51838 - 44032: 0xA573,
	51839 - 44032: 0xA574,
	51840 - 44032: 0xA575,
	51841 - 44032: 0xA576,
	51842 - 44032: 0xA577,
	51843 - 44032: 0xA578,
	51844 - 44032: 0xC2C7,
	51845 - 44032: 0xA579,
	51846 - 44032: 0xA57A,
	51847 - 44032: 0xA581,
	51848 - 44032: 0xA582,
	51849 - 44032: 0xA583,
	51850 - 44032: 0xA584,
	51851 - 44032: 0xA585,
	51852 - 44032: 0xA586,
	51853 - 44032: 0xA587,
	51854 - 44032: 0xA588,
	51855 - 44032: 0xA589,
	51856 - 44032: 0xA58A,
	51857 - 44032: 0xA58B,
	51858 - 44032: 0xA58C,
	51859 - 44032: 0xA58D,
	51860 - 44032: 0xA58E,
	51861 - 44032: 0xA58F,
	51862 - 44032: 0xA590,
	51863 - 44032: 0xA591,
	51864 - 44032: 0xC2C8,
	51865 - 44032: 0xA592,
	51866 - 44032: 0xA593,
	51867 - 44032: 0xA594,
	51868 - 44032: 0xA595,
	51869 - 44032: 0xA596,
	51870 - 44032: 0xA597,
	51871 - 44032: 0xA598,
	51872 - 44032: 0xA599,
	51873 - 44032: 0xA59A,
	51874 - 44032: 0xA59B,
	51875 - 44032: 0xA59C,
	51876 - 44032: 0xA59D,
	51877 - 44032: 0xA59E,
	51878 - 44032: 0xA59F,
	51879 - 44032: 0xA5A0,
	51880 - 44032: 0xA641,
	51881 - 44032: 0xA642,
	51882 - 44032: 0xA643,
	51883 - 44032: 0xA644,
	51884 - 44032: 0xA645,
	51885 - 44032: 0xA646,
	51886 - 44032: 0xA647,
	51887 - 44032: 0xA648,
	51888 - 44032: 0xA649,
	51889 - 44032: 0xA64A,
	51890 - 44032: 0xA64B,
	51891 - 44032: 0xA64C,
	51892 - 44032: 0xA64D,
	51893 - 44032: 0xA64E,
	51894 - 44032: 0xA64F,
	51895 - 44032: 0xA650,
	51896 - 44032: 0xA651,
	51897 - 44032: 0xA652,
	51898 - 44032: 0xA653,
	51899 - 44032: 0xA654,
	51900 - 44032: 0xC2C9,
	51901 - 44032: 0xC2CA,
	51902 - 44032: 0xA655,
	51903 - 44032: 0xA656,
	51904 - 44032: 0xC2CB,
	51905 - 44032: 0xA657,
	51906 - 44032: 0xA658,
	51907 - 44032: 0xA659,
	51908 - 44032: 0xC2CC,
	51909 - 44032: 0xA65A,
	51910 - 44032: 0xA661,
	51911 - 44032: 0xA662,
	51912 - 44032: 0xA663,
	51913 - 44032: 0xA664,
	51914 - 44032: 0xA665,
	51915 - 44032: 0xA666,
	51916 - 44032: 0xC2CD,
	51917 - 44032: 0xC2CE,
	51918 - 44032: 0xA667,
	51919 - 44032: 0xC2CF,
	51920 - 44032: 0xA668,
	51921 - 44032: 0xC2D0,
	51922 - 44032: 0xA669,
	51923 - 44032: 0xC2D1,
	51924 - 44032: 0xA66A,
	51925 - 44032: 0xA66B,
	51926 - 44032: 0xA66C,
	51927 - 44032: 0xA66D,
	51928 - 44032: 0xC2D2,
	51929 - 44032: 0xC2D3,
	51930 - 44032: 0xA66E,
	51931 - 44032: 0xA66F,
	51932 - 44032: 0xA670,
	51933 - 44032: 0xA671,
	51934 - 44032: 0xA672,
	51935 - 44032: 0xA673,
	51936 - 44032: 0xC2D4,
	51937 - 44032: 0xA674,
	51938 - 44032: 0xA675,
	51939 - 44032: 0xA676,
	51940 - 44032: 0xA677,
	51941 - 44032: 0xA678,
	51942 - 44032: 0xA679,
	51943 - 44032: 0xA67A,
	51944 - 44032: 0xA681,
	51945 - 44032: 0xA682,
	51946 - 44032: 0xA683,
	51947 - 44032: 0xA684,
	51948 - 44032: 0xC2D5,
	51949 - 44032: 0xA685,
	51950 - 44032: 0xA686,
	51951 - 44032: 0xA687,
	51952 - 44032: 0xA688,
	51953 - 44032: 0xA689,
	51954 - 44032: 0xA68A,
	51955 - 44032: 0xA68B,
	51956 - 44032: 0xC2D6,
	51957 - 44032: 0xA68C,
	51958 - 44032: 0xA68D,
	51959 - 44032: 0xA68E,
	51960 - 44032: 0xA68F,
	51961 - 44032: 0xA690,
	51962 - 44032: 0xA691,
	51963 - 44032: 0xA692,
	51964 - 44032: 0xA693,
	51965 - 44032: 0xA694,
	51966 - 44032: 0xA695,
	51967 - 44032: 0xA696,
	51968 - 44032: 0xA697,
	51969 - 44032: 0xA698,
	51970 - 44032: 0xA699,
	51971 - 44032: 0xA69A,
	51972 - 44032: 0xA69B,
	51973 - 44032: 0xA69C,
	51974 - 44032: 0xA69D,
	51975 - 44032: 0xA69E,
	51976 - 44032: 0xC2D7,
	51977 - 44032: 0xA69F,
	51978 - 44032: 0xA6A0,
	51979 - 44032: 0xA741,
	51980 - 44032: 0xA742,
	51981 - 44032: 0xA743,
	51982 - 44032: 0xA744,
	51983 - 44032: 0xA745,
	51984 - 44032: 0xC2D8,
	51985 - 44032: 0xA746,
	51986 - 44032: 0xA747,
	51987 - 44032: 0xA748,
	51988 - 44032: 0xC2D9,
	51989 - 44032: 0xA749,
	51990 - 44032: 0xA74A,
	51991 - 44032: 0xA74B,
	51992 - 44032: 0xC2DA,
	51993 - 44032: 0xA74C,
	51994 - 44032: 0xA74D,
	51995 - 44032: 0xA74E,
	51996 - 44032: 0xA74F,
	51997 - 44032: 0xA750,
	51998 - 44032: 0xA751,
	51999 - 44032: 0xA752,
	52000 - 44032: 0xC2DB,
	52001 - 44032: 0xC2DC,
	52002 - 44032: 0xA753,
	52003 - 44032: 0xA754,
	52004 - 44032: 0xA755,
	52005 - 44032: 0xA756,
	52006 - 44032: 0xA757,
	52007 - 44032: 0xA758,
	52008 - 44032: 0xA759,
	52009 - 44032: 0xA75A,
	52010 - 44032: 0xA761,
	52011 - 44032: 0xA762,
	52012 - 44032: 0xA763,
	52013 - 44032: 0xA764,
	52014 - 44032: 0xA765,
	52015 - 44032: 0xA766,
	52016 - 44032: 0xA767,
	52017 - 44032: 0xA768,
	52018 - 44032: 0xA769,
	52019 - 44032: 0xA76A,
	52020 - 44032: 0xA76B,
	52021 - 44032: 0xA76C,
	52022 - 44032: 0xA76D,
	52023 - 44032: 0xA76E,
	52024 - 44032: 0xA76F,
	52025 - 44032: 0xA770,
	52026 - 44032: 0xA771,
	52027 - 44032: 0xA772,
	52028 - 44032: 0xA773,
	52029 - 44032: 0xA774,
	52030 - 44032: 0xA775,
	52031 - 44032: 0xA776,
	52032 - 44032: 0xA777,
	52033 - 44032: 0xC2DD,
	52034 - 44032: 0xA778,
	52035 - 44032: 0xA779,
	52036 - 44032: 0xA77A,
	52037 - 44032: 0xA781,
	52038 - 44032: 0xA782,
	52039 - 44032: 0xA783,
	52040 - 44032: 0xC2DE,
	52041 - 44032: 0xC2DF,
	52042 - 44032: 0xA784,
	52043 - 44032: 0xA785,
	52044 - 44032: 0xC2E0,
	52045 - 44032: 0xA786,
	52046 - 44032: 0xA787,
	52047 - 44032: 0xA788,
	52048 - 44032: 0xC2E1,
	52049 - 44032: 0xA789,
	52050 - 44032: 0xA78A,
	52051 - 44032: 0xA78B,
	52052 - 44032: 0xA78C,
	52053 - 44032: 0xA78D,
	52054 - 44032: 0xA78E,
	52055 - 44032: 0xA78F,
	52056 - 44032: 0xC2E2,
	52057 - 44032: 0xC2E3,
	52058 - 44032: 0xA790,
	52059 - 44032: 0xA791,
	52060 - 44032: 0xA792,
	52061 - 44032: 0xC2E4,
	52062 - 44032: 0xA793,
	52063 - 44032: 0xA794,
	52064 - 44032: 0xA795,
	52065 - 44032: 0xA796,
	52066 - 44032: 0xA797,
	52067 - 44032: 0xA798,
	52068 - 44032: 0xC2E5,
	52069 - 44032: 0xA799,
	52070 - 44032: 0xA79A,
	52071 - 44032: 0xA79B,
	52072 - 44032: 0xA79C,
	52073 - 44032: 0xA79D,
	52074 - 44032: 0xA79E,
	52075 - 44032: 0xA79F,
	52076 - 44032: 0xA7A0,
	52077 - 44032: 0xA841,
	52078 - 44032: 0xA842,
	52079 - 44032: 0xA843,
	52080 - 44032: 0xA844,
	52081 - 44032: 0xA845,
	52082 - 44032: 0xA846,
	52083 - 44032: 0xA847,
	52084 - 44032: 0xA848,
	52085 - 44032: 0xA849,
	52086 - 44032: 0xA84A,
	52087 - 44032: 0xA84B,
	52088 - 44032: 0xC2E6,
	52089 - 44032: 0xC2E7,
	52090 - 44032: 0xA84C,
	52091 - 44032: 0xA84D,
	52092 - 44032: 0xA84E,
	52093 - 44032: 0xA84F,
	52094 - 44032: 0xA850,
	52095 - 44032: 0xA851,
	52096 - 44032: 0xA852,
	52097 - 44032: 0xA853,
	52098 - 44032: 0xA854,
	52099 - 44032: 0xA855,
	52100 - 44032: 0xA856,
	52101 - 44032: 0xA857,
	52102 - 44032: 0xA858,
	52103 - 44032: 0xA859,
	52104 - 44032: 0xA85A,
	52105 - 44032: 0xA861,
	52106 - 44032: 0xA862,
	52107 - 44032: 0xA863,
	52108 - 44032: 0xA864,
	52109 - 44032: 0xA865,
	52110 - 44032: 0xA866,
	52111 - 44032: 0xA867,
	52112 - 44032: 0xA868,
	52113 - 44032: 0xA869,
	52114 - 44032: 0xA86A,
	52115 - 44032: 0xA86B,
	52116 - 44032: 0xA86C,
	52117 - 44032: 0xA86D,
	52118 - 44032: 0xA86E,
	52119 - 44032: 0xA86F,
	52120 - 44032: 0xA870,
	52121 - 44032: 0xA871,
	52122 - 44032: 0xA872,
	52123 - 44032: 0xA873,
	52124 - 44032: 0xC2E8,
	52125 - 44032: 0xA874,
	52126 - 44032: 0xA875,
	52127 - 44032: 0xA876,
	52128 - 44032: 0xA877,
	52129 - 44032: 0xA878,
	52130 - 44032: 0xA879,
	52131 - 44032: 0xA87A,
	52132 - 44032: 0xA881,
	52133 - 44032: 0xA882,
	52134 - 44032: 0xA883,
	52135 - 44032: 0xA884,
	52136 - 44032: 0xA885,
	52137 - 44032: 0xA886,
	52138 - 44032: 0xA887,
	52139 - 44032: 0xA888,
	52140 - 44032: 0xA889,
	52141 - 44032: 0xA88A,
	52142 - 44032: 0xA88B,
	52143 - 44032: 0xA88C,
	52144 - 44032: 0xA88D,
	52145 - 44032: 0xA88E,
	52146 - 44032: 0xA88F,
	52147 - 44032: 0xA890,
	52148 - 44032: 0xA891,
	52149 - 44032: 0xA892,
	52150 - 44032: 0xA893,
	52151 - 44032: 0xA894,
	52152 - 44032: 0xC2E9,
	52153 - 44032: 0xA895,
	52154 - 44032: 0xA896,
	52155 - 44032: 0xA897,
	52156 - 44032: 0xA898,
	52157 - 44032: 0xA899,
	52158 - 44032: 0xA89A,
	52159 - 44032: 0xA89B,
	52160 - 44032: 0xA89C,
	52161 - 44032: 0xA89D,
	52162 - 44032: 0xA89E,
	52163 - 44032: 0xA89F,
	52164 - 44032: 0xA8A0,
	52165 - 44032: 0xA941,
	52166 - 44032: 0xA942,
	52167 - 44032: 0xA943,
	52168 - 44032: 0xA944,
	52169 - 44032: 0xA945,
	52170 - 44032: 0xA946,
	52171 - 44032: 0xA947,
	52172 - 44032: 0xA948,
	52173 - 44032: 0xA949,
	52174 - 44032: 0xA94A,
	52175 - 44032: 0xA94B,
	52176 - 44032: 0xA94C,
	52177 - 44032: 0xA94D,
	52178 - 44032: 0xA94E,
	52179 - 44032: 0xA94F,
	52180 - 44032: 0xC2EA,
	52181 - 44032: 0xA950,
	52182 - 44032: 0xA951,
	52183 - 44032: 0xA952,
	52184 - 44032: 0xA953,
	52185 - 44032: 0xA954,
	52186 - 44032: 0xA955,
	52187 - 44032: 0xA956,
	52188 - 44032: 0xA957,
	52189 - 44032: 0xA958,
	52190 - 44032: 0xA959,
	52191 - 44032: 0xA95A,
	52192 - 44032: 0xA961,
	52193 - 44032: 0xA962,
	52194 - 44032: 0xA963,
	52195 - 44032: 0xA964,
	52196 - 44032: 0xC2EB,
	52197 - 44032: 0xA965,
	52198 - 44032: 0xA966,
	52199 - 44032: 0xC2EC,
	52200 - 44032: 0xA967,
	52201 - 44032: 0xC2ED,
	52202 - 44032: 0xA968,
	52203 - 44032: 0xA969,
	52204 - 44032: 0xA96A,
	52205 - 44032: 0xA96B,
	52206 - 44032: 0xA96C,
	52207 - 44032: 0xA96D,
	52208 - 44032: 0xA96E,
	52209 - 44032: 0xA96F,
	52210 - 44032: 0xA970,
	52211 - 44032: 0xA971,
	52212 - 44032: 0xA972,
	52213 - 44032: 0xA973,
	52214 - 44032: 0xA974,
	52215 - 44032: 0xA975,
	52216 - 44032: 0xA976,
	52217 - 44032: 0xA977,
	52218 - 44032: 0xA978,
	52219 - 44032: 0xA979,
	52220 - 44032: 0xA97A,
	52221 - 44032: 0xA981,
	52222 - 44032: 0xA982,
	52223 - 44032: 0xA983,
	52224 - 44032: 0xA984,
	52225 - 44032: 0xA985,
	52226 - 44032: 0xA986,
	52227 - 44032: 0xA987,
	52228 - 44032: 0xA988,
	52229 - 44032: 0xA989,
	52230 - 44032: 0xA98A,
	52231 - 44032: 0xA98B,
	52232 - 44032: 0xA98C,
	52233 - 44032: 0xA98D,
	52234 - 44032: 0xA98E,
	52235 - 44032: 0xA98F,
	52236 - 44032: 0xC2EE,
	52237 - 44032: 0xC2EF,
	52238 - 44032: 0xA990,
	52239 - 44032: 0xA991,
	52240 - 44032: 0xC2F0,
	52241 - 44032: 0xA992,
	52242 - 44032: 0xA993,
	52243 - 44032: 0xA994,
	52244 - 44032: 0xC2F1,
	52245 - 44032: 0xA995,
	52246 - 44032: 0xA996,
	52247 - 44032: 0xA997,
	52248 - 44032: 0xA998,
	52249 - 44032: 0xA999,
	52250 - 44032: 0xA99A,
	52251 - 44032: 0xA99B,
	52252 - 44032: 0xC2F2,
	52253 - 44032: 0xC2F3,
	52254 - 44032: 0xA99C,
	52255 - 44032: 0xA99D,
	52256 - 44032: 0xA99E,
	52257 - 44032: 0xC2F4,
	52258 - 44032: 0xC2F5,
	52259 - 44032: 0xA99F,
	52260 - 44032: 0xA9A0,
	52261 - 44032: 0xAA41,
	52262 - 44032: 0xAA42,
	52263 - 44032: 0xC2F6,
	52264 - 44032: 0xC2F7,
	52265 - 44032: 0xC2F8,
	52266 - 44032: 0xAA43,
	52267 - 44032: 0xAA44,
	52268 - 44032: 0xC2F9,
	52269 - 44032: 0xAA45,
	52270 - 44032: 0xC2FA,
	52271 - 44032: 0xAA46,
	52272 - 44032: 0xC2FB,
	52273 - 44032: 0xAA47,
	52274 - 44032: 0xAA48,
	52275 - 44032: 0xAA49,
	52276 - 44032: 0xAA4A,
	52277 - 44032: 0xAA4B,
	52278 - 44032: 0xAA4C,
	52279 - 44032: 0xAA4D,
	52280 - 44032: 0xC2FC,
	52281 - 44032: 0xC2FD,
	52282 - 44032: 0xAA4E,
	52283 - 44032: 0xC2FE,
	52284 - 44032: 0xC3A1,
	52285 - 44032: 0xC3A2,
	52286 - 44032: 0xC3A3,
	52287 - 44032: 0xAA4F,
	52288 - 44032: 0xAA50,
	52289 - 44032: 0xAA51,
	52290 - 44032: 0xAA52,
	52291 - 44032: 0xAA53,
	52292 - 44032: 0xC3A4,
	52293 - 44032: 0xC3A5,
	52294 - 44032: 0xAA54,
	52295 - 44032: 0xAA55,
	52296 - 44032: 0xC3A6,
	52297 - 44032: 0xAA56,
	52298 - 44032: 0xAA57,
	52299 - 44032: 0xAA58,
	52300 - 44032: 0xC3A7,
	52301 - 44032: 0xAA59,
	52302 - 44032: 0xAA5A,
	52303 - 44032: 0xAA61,
	52304 - 44032: 0xAA62,
	52305 - 44032: 0xAA63,
	52306 - 44032: 0xAA64,
	52307 - 44032: 0xAA65,
	52308 - 44032: 0xC3A8,
	52309 - 44032: 0xC3A9,
	52310 - 44032: 0xAA66,
	52311 - 44032: 0xC3AA,
	52312 - 44032: 0xC3AB,
	52313 - 44032: 0xC3AC,
	52314 - 44032: 0xAA67,
	52315 - 44032: 0xAA68,
	52316 - 44032: 0xAA69,
	52317 - 44032: 0xAA6A,
	52318 - 44032: 0xAA6B,
	52319 - 44032: 0xAA6C,
	52320 - 44032: 0xC3AD,
	52321 - 44032: 0xAA6D,
	52322 - 44032: 0xAA6E,
	52323 - 44032: 0xAA6F,
	52324 - 44032: 0xC3AE,
	52325 - 44032: 0xAA70,
	52326 - 44032: 0xC3AF,
	52327 - 44032: 0xAA71,
	52328 - 44032: 0xC3B0,
	52329 - 44032: 0xAA72,
	52330 - 44032: 0xAA73,
	52331 - 44032: 0xAA74,
	52332 - 44032: 0xAA75,
	52333 - 44032: 0xAA76,
	52334 - 44032: 0xAA77,
	52335 - 44032: 0xAA78,
	52336 - 44032: 0xC3B1,
	52337 - 44032: 0xAA79,
	52338 - 44032: 0xAA7A,
	52339 - 44032: 0xAA81,
	52340 - 44032: 0xAA82,
	52341 - 44032: 0xC3B2,
	52342 - 44032: 0xAA83,
	52343 - 44032: 0xAA84,
	52344 - 44032: 0xAA85,
	52345 - 44032: 0xAA86,
	52346 - 44032: 0xAA87,
	52347 - 44032: 0xAA88,
	52348 - 44032: 0xAA89,
	52349 - 44032: 0xAA8A,
	52350 - 44032: 0xAA8B,
	52351 - 44032: 0xAA8C,
	52352 - 44032: 0xAA8D,
	52353 - 44032: 0xAA8E,
	52354 - 44032: 0xAA8F,
	52355 - 44032: 0xAA90,
	52356 - 44032: 0xAA91,
	52357 - 44032: 0xAA92,
	52358 - 44032: 0xAA93,
	52359 - 44032: 0xAA94,
	52360 - 44032: 0xAA95,
	52361 - 44032: 0xAA96,
	52362 - 44032: 0xAA97,
	52363 - 44032: 0xAA98,
	52364 - 44032: 0xAA99,
	52365 - 44032: 0xAA9A,
	52366 - 44032: 0xAA9B,
	52367 - 44032: 0xAA9C,
	52368 - 44032: 0xAA9D,
	52369 - 44032: 0xAA9E,
	52370 - 44032: 0xAA9F,
	52371 - 44032: 0xAAA0,
	52372 - 44032: 0xAB41,
	52373 - 44032: 0xAB42,
	52374 - 44032: 0xAB43,
	52375 - 44032: 0xAB44,
	52376 - 44032: 0xC3B3,
	52377 - 44032: 0xC3B4,
	52378 - 44032: 0xAB45,
	52379 - 44032: 0xAB46,
	52380 - 44032: 0xC3B5,
	52381 - 44032: 0xAB47,
	52382 - 44032: 0xAB48,
	52383 - 44032: 0xAB49,
	52384 - 44032: 0xC3B6,
	52385 - 44032: 0xAB4A,
	52386 - 44032: 0xAB4B,
	52387 - 44032: 0xAB4C,
	52388 - 44032: 0xAB4D,
	52389 - 44032: 0xAB4E,
	52390 - 44032: 0xAB4F,
	52391 - 44032: 0xAB50,
	52392 - 44032: 0xC3B7,
	52393 - 44032: 0xC3B8,
	52394 - 44032: 0xAB51,
	52395 - 44032: 0xC3B9,
	52396 - 44032: 0xC3BA,
	52397 - 44032: 0xC3BB,
	52398 - 44032: 0xAB52,
	52399 - 44032: 0xAB53,
	52400 - 44032: 0xAB54,
	52401 - 44032: 0xAB55,
	52402 - 44032: 0xAB56,
	52403 - 44032: 0xAB57,
	52404 - 44032: 0xC3BC,
	52405 - 44032: 0xC3BD,
	52406 - 44032: 0xAB58,
	52407 - 44032: 0xAB59,
	52408 - 44032: 0xC3BE,
	52409 - 44032: 0xAB5A,
	52410 - 44032: 0xAB61,
	52411 - 44032: 0xAB62,
	52412 - 44032: 0xC3BF,
	52413 - 44032: 0xAB63,
	52414 - 44032: 0xAB64,
	52415 - 44032: 0xAB65,
	52416 - 44032: 0xAB66,
	52417 - 44032: 0xAB67,
	52418 - 44032: 0xAB68,
	52419 - 44032: 0xAB69,
	52420 - 44032: 0xC3C0,
	52421 - 44032: 0xC3C1,
	52422 - 44032: 0xAB6A,
	52423 - 44032: 0xC3C2,
	52424 - 44032: 0xAB6B,
	52425 - 44032: 0xC3C3,
	52426 - 44032: 0xAB6C,
	52427 - 44032: 0xAB6D,
	52428 - 44032: 0xAB6E,
	52429 - 44032: 0xAB6F,
	52430 - 44032: 0xAB70,
	52431 - 44032: 0xAB71,
	52432 - 44032: 0xC3C4,
	52433 - 44032: 0xAB72,
	52434 - 44032: 0xAB73,
	52435 - 44032: 0xAB74,
	52436 - 44032: 0xC3C5,
	52437 - 44032: 0xAB75,
	52438 - 44032: 0xAB76,
	52439 - 44032: 0xAB77,
	52440 - 44032: 0xAB78,
	52441 - 44032: 0xAB79,
	52442 - 44032: 0xAB7A,
	52443 - 44032: 0xAB81,
	52444 - 44032: 0xAB82,
	52445 - 44032: 0xAB83,
	52446 - 44032: 0xAB84,
	52447 - 44032: 0xAB85,
	52448 - 44032: 0xAB86,
	52449 - 44032: 0xAB87,
	52450 - 44032: 0xAB88,
	52451 - 44032: 0xAB89,
	52452 - 44032: 0xC3C6,
	52453 - 44032: 0xAB8A,
	52454 - 44032: 0xAB8B,
	52455 - 44032: 0xAB8C,
	52456 - 44032: 0xAB8D,
	52457 - 44032: 0xAB8E,
	52458 - 44032: 0xAB8F,
	52459 - 44032: 0xAB90,
	52460 - 44032: 0xC3C7,
	52461 - 44032: 0xAB91,
	52462 - 44032: 0xAB92,
	52463 - 44032: 0xAB93,
	52464 - 44032: 0xC3C8,
	52465 - 44032: 0xAB94,
	52466 - 44032: 0xAB95,
	52467 - 44032: 0xAB96,
	52468 - 44032: 0xAB97,
	52469 - 44032: 0xAB98,
	52470 - 44032: 0xAB99,
	52471 - 44032: 0xAB9A,
	52472 - 44032: 0xAB9B,
	52473 - 44032: 0xAB9C,
	52474 - 44032: 0xAB9D,
	52475 - 44032: 0xAB9E,
	52476 - 44032: 0xAB9F,
	52477 - 44032: 0xABA0,
	52478 - 44032: 0xAC41,
	52479 - 44032: 0xAC42,
	52480 - 44032: 0xAC43,
	52481 - 44032: 0xC3C9,
	52482 - 44032: 0xAC44,
	52483 - 44032: 0xAC45,
	52484 - 44032: 0xAC46,
	52485 - 44032: 0xAC47,
	52486 - 44032: 0xAC48,
	52487 - 44032: 0xAC49,
	52488 - 44032: 0xC3CA,
	52489 - 44032: 0xC3CB,
	52490 - 44032: 0xAC4A,
	52491 - 44032: 0xAC4B,
	52492 - 44032: 0xC3CC,
	52493 - 44032: 0xAC4C,
	52494 - 44032: 0xAC4D,
	52495 - 44032: 0xAC4E,
	52496 - 44032: 0xC3CD,
	52497 - 44032: 0xAC4F,
	52498 - 44032: 0xAC50,
	52499 - 44032: 0xAC51,
	52500 - 44032: 0xAC52,
	52501 - 44032: 0xAC53,
	52502 - 44032: 0xAC54,
	52503 - 44032: 0xAC55,
	52504 - 44032: 0xC3CE,
	52505 - 44032: 0xC3CF,
	52506 - 44032: 0xAC56,
	52507 - 44032: 0xC3D0,
	52508 - 44032: 0xAC57,
	52509 - 44032: 0xC3D1,
	52510 - 44032: 0xAC58,
	52511 - 44032: 0xAC59,
	52512 - 44032: 0xAC5A,
	52513 - 44032: 0xAC61,
	52514 - 44032: 0xAC62,
	52515 - 44032: 0xAC63,
	52516 - 44032: 0xC3D2,
	52517 - 44032: 0xAC64,
	52518 - 44032: 0xAC65,
	52519 - 44032: 0xAC66,
	52520 - 44032: 0xC3D3,
	52521 - 44032: 0xAC67,
	52522 - 44032: 0xAC68,
	52523 - 44032: 0xAC69,
	52524 - 44032: 0xC3D4,
	52525 - 44032: 0xAC6A,
	52526 - 44032: 0xAC6B,
	52527 - 44032: 0xAC6C,
	52528 - 44032: 0xAC6D,
	52529 - 44032: 0xAC6E,
	52530 - 44032: 0xAC6F,
	52531 - 44032: 0xAC70,
	52532 - 44032: 0xAC71,
	52533 - 44032: 0xAC72,
	52534 - 44032: 0xAC73,
	52535 - 44032: 0xAC74,
	52536 - 44032: 0xAC75,
	52537 - 44032: 0xC3D5,
	52538 - 44032: 0xAC76,
	52539 - 44032: 0xAC77,
	52540 - 44032: 0xAC78,
	52541 - 44032: 0xAC79,
	52542 - 44032: 0xAC7A,
	52543 - 44032: 0xAC81,
	52544 - 44032: 0xAC82,
	52545 - 44032: 0xAC83,
	52546 - 44032: 0xAC84,
	52547 - 44032: 0xAC85,
	52548 - 44032: 0xAC86,
	52549 - 44032: 0xAC87,
	52550 - 44032: 0xAC88,
	52551 - 44032: 0xAC89,
	52552 - 44032: 0xAC8A,
	52553 - 44032: 0xAC8B,
	52554 - 44032: 0xAC8C,
	52555 - 44032: 0xAC8D,
	52556 - 44032: 0xAC8E,
	52557 - 44032: 0xAC8F,
	52558 - 44032: 0xAC90,
	52559 - 44032: 0xAC91,
	52560 - 44032: 0xAC92,
	52561 - 44032: 0xAC93,
	52562 - 44032: 0xAC94,
	52563 - 44032: 0xAC95,
	52564 - 44032: 0xAC96,
	52565 - 44032: 0xAC97,
	52566 - 44032: 0xAC98,
	52567 - 44032: 0xAC99,
	52568 - 44032: 0xAC9A,
	52569 - 44032: 0xAC9B,
	52570 - 44032: 0xAC9C,
	52571 - 44032: 0xAC9D,
	52572 - 44032: 0xC3D6,
	52573 - 44032: 0xAC9E,
	52574 - 44032: 0xAC9F,
	52575 - 44032: 0xACA0,
	52576 - 44032: 0xC3D7,
	52577 - 44032: 0xAD41,
	52578 - 44032: 0xAD42,
	52579 - 44032: 0xAD43,
	52580 - 44032: 0xC3D8,
	52581 - 44032: 0xAD44,
	52582 - 44032: 0xAD45,
	52583 - 44032: 0xAD46,
	52584 - 44032: 0xAD47,
	52585 - 44032: 0xAD48,
	52586 - 44032: 0xAD49,
	52587 - 44032: 0xAD4A,
	52588 - 44032: 0xC3D9,
	52589 - 44032: 0xC3DA,
	52590 - 44032: 0xAD4B,
	52591 - 44032: 0xC3DB,
	52592 - 44032: 0xAD4C,
	52593 - 44032: 0xC3DC,
	52594 - 44032: 0xAD4D,
	52595 - 44032: 0xAD4E,
	52596 - 44032: 0xAD4F,
	52597 - 44032: 0xAD50,
	52598 - 44032: 0xAD51,
	52599 - 44032: 0xAD52,
	52600 - 44032: 0xC3DD,
	52601 - 44032: 0xAD53,
	52602 - 44032: 0xAD54,
	52603 - 44032: 0xAD55,
	52604 - 44032: 0xAD56,
	52605 - 44032: 0xAD57,
	52606 - 44032: 0xAD58,
	52607 - 44032: 0xAD59,
	52608 - 44032: 0xAD5A,
	52609 - 44032: 0xAD61,
	52610 - 44032: 0xAD62,
	52611 - 44032: 0xAD63,
	52612 - 44032: 0xAD64,
	52613 - 44032: 0xAD65,
	52614 - 44032: 0xAD66,
	52615 - 44032: 0xAD67,
	52616 - 44032: 0xC3DE,
	52617 - 44032: 0xAD68,
	52618 - 44032: 0xAD69,
	52619 - 44032: 0xAD6A,
	52620 - 44032: 0xAD6B,
	52621 - 44032: 0xAD6C,
	52622 - 44032: 0xAD6D,
	52623 - 44032: 0xAD6E,
	52624 - 44032: 0xAD6F,
	52625 - 44032: 0xAD70,
	52626 - 44032: 0xAD71,
	52627 - 44032: 0xAD72,
	52628 - 44032: 0xC3DF,
	52629 - 44032: 0xC3E0,
	52630 - 44032: 0xAD73,
	52631 - 44032: 0xAD74,
	52632 - 44032: 0xC3E1,
	52633 - 44032: 0xAD75,
	52634 - 44032: 0xAD76,
	52635 - 44032: 0xAD77,
	52636 - 44032: 0xC3E2,
	52637 - 44032: 0xAD78,
	52638 - 44032: 0xAD79,
	52639 - 44032: 0xAD7A,
	52640 - 44032: 0xAD81,
	52641 - 44032: 0xAD82,
	52642 - 44032: 0xAD83,
	52643 - 44032: 0xAD84,
	52644 - 44032: 0xC3E3,
	52645 - 44032: 0xC3E4,
	52646 - 44032: 0xAD85,
	52647 - 44032: 0xC3E5,
	52648 - 44032: 0xAD86,
	52649 - 44032: 0xC3E6,
	52650 - 44032: 0xAD87,
	52651 - 44032: 0xAD88,
	52652 - 44032: 0xAD89,
	52653 - 44032: 0xAD8A,
	52654 - 44032: 0xAD8B,
	52655 - 44032: 0xAD8C,
	52656 - 44032: 0xC3E7,
	52657 - 44032: 0xAD8D,
	52658 - 44032: 0xAD8E,
	52659 - 44032: 0xAD8F,
	52660 - 44032: 0xAD90,
	52661 - 44032: 0xAD91,
	52662 - 44032: 0xAD92,
	52663 - 44032: 0xAD93,
	52664 - 44032: 0xAD94,
	52665 - 44032: 0xAD95,
	52666 - 44032: 0xAD96,
	52667 - 44032: 0xAD97,
	52668 - 44032: 0xAD98,
	52669 - 44032: 0xAD99,
	52670 - 44032: 0xAD9A,
	52671 - 44032: 0xAD9B,
	52672 - 44032: 0xAD9C,
	52673 - 44032: 0xAD9D,
	52674 - 44032: 0xAD9E,
	52675 - 44032: 0xAD9F,
	52676 - 44032: 0xC3E8,
	52677 - 44032: 0xADA0,
	52678 - 44032: 0xAE41,
	52679 - 44032: 0xAE42,
	52680 - 44032: 0xAE43,
	52681 - 44032: 0xAE44,
	52682 - 44032: 0xAE45,
	52683 - 44032: 0xAE46,
	52684 - 44032: 0xC3E9,
	52685 - 44032: 0xAE47,
	52686 - 44032: 0xAE48,
	52687 - 44032: 0xAE49,
	52688 - 44032: 0xC3EA,
	52689 - 44032: 0xAE4A,
	52690 - 44032: 0xAE4B,
	52691 - 44032: 0xAE4C,
	52692 - 44032: 0xAE4D,
	52693 - 44032: 0xAE4E,
	52694 - 44032: 0xAE4F,
	52695 - 44032: 0xAE50,
	52696 - 44032: 0xAE51,
	52697 - 44032: 0xAE52,
	52698 - 44032: 0xAE53,
	52699 - 44032: 0xAE54,
	52700 - 44032: 0xAE55,
	52701 - 44032: 0xAE56,
	52702 - 44032: 0xAE57,
	52703 - 44032: 0xAE58,
	52704 - 44032: 0xAE59,
	52705 - 44032: 0xAE5A,
	52706 - 44032: 0xAE61,
	52707 - 44032: 0xAE62,
	52708 - 44032: 0xAE63,
	52709 - 44032: 0xAE64,
	52710 - 44032: 0xAE65,
	52711 - 44032: 0xAE66,
	52712 - 44032: 0xC3EB,
	52713 - 44032: 0xAE67,
	52714 - 44032: 0xAE68,
	52715 - 44032: 0xAE69,
	52716 - 44032: 0xC3EC,
	52717 - 44032: 0xAE6A,
	52718 - 44032: 0xAE6B,
	52719 - 44032: 0xAE6C,
	52720 - 44032: 0xC3ED,
	52721 - 44032: 0xAE6D,
	52722 - 44032: 0xAE6E,
	52723 - 44032: 0xAE6F,
	52724 - 44032: 0xAE70,
	52725 - 44032: 0xAE71,
	52726 - 44032: 0xAE72,
	52727 - 44032: 0xAE73,
	52728 - 44032: 0xC3EE,
	52729 - 44032: 0xC3EF,
	52730 - 44032: 0xAE74,
	52731 - 44032: 0xC3F0,
	52732 - 44032: 0xAE75,
	52733 - 44032: 0xC3F1,
	52734 - 44032: 0xAE76,
	52735 - 44032: 0xAE77,
	52736 - 44032: 0xAE78,
	52737 - 44032: 0xAE79,
	52738 - 44032: 0xAE7A,
	52739 - 44032: 0xAE81,
	52740 - 44032: 0xC3F2,
	52741 - 44032: 0xAE82,
	52742 - 44032: 0xAE83,
	52743 - 44032: 0xAE84,
	52744 - 44032: 0xC3F3,
	52745 - 44032: 0xAE85,
	52746 - 44032: 0xAE86,
	52747 - 44032: 0xAE87,
	52748 - 44032: 0xC3F4,
	52749 - 44032: 0xAE88,
	52750 - 44032: 0xAE89,
	52751 - 44032: 0xAE8A,
	52752 - 44032: 0xAE8B,
	52753 - 44032: 0xAE8C,
	52754 - 44032: 0xAE8D,
	52755 - 44032: 0xAE8E,
	52756 - 44032: 0xC3F5,
	52757 - 44032: 0xAE8F,
	52758 - 44032: 0xAE90,
	52759 - 44032: 0xAE91,
	52760 - 44032: 0xAE92,
	52761 - 44032: 0xC3F6,
	52762 - 44032: 0xAE93,
	52763 - 44032: 0xAE94,
	52764 - 44032: 0xAE95,
	52765 - 44032: 0xAE96,
	52766 - 44032: 0xAE97,
	52767 - 44032: 0xAE98,
	52768 - 44032: 0xC3F7,
	52769 - 44032: 0xC3F8,
	52770 - 44032: 0xAE99,
	52771 - 44032: 0xAE9A,
	52772 - 44032: 0xC3F9,
	52773 - 44032: 0xAE9B,
	52774 - 44032: 0xAE9C,
	52775 - 44032: 0xAE9D,
	52776 - 44032: 0xC3FA,
	52777 - 44032: 0xAE9E,
	52778 - 44032: 0xAE9F,
	52779 - 44032: 0xAEA0,
	52780 - 44032: 0xAF41,
	52781 - 44032: 0xAF42,
	52782 - 44032: 0xAF43,
	52783 - 44032: 0xAF44,
	52784 - 44032: 0xC3FB,
	52785 - 44032: 0xC3FC,
	52786 - 44032: 0xAF45,
	52787 - 44032: 0xC3FD,
	52788 - 44032: 0xAF46,
	52789 - 44032: 0xC3FE,
	52790 - 44032: 0xAF47,
	52791 - 44032: 0xAF48,
	52792 - 44032: 0xAF49,
	52793 - 44032: 0xAF4A,
	52794 - 44032: 0xAF4B,
	52795 - 44032: 0xAF4C,
	52796 - 44032: 0xAF4D,
	52797 - 44032: 0xAF4E,
	52798 - 44032: 0xAF4F,
	52799 - 44032: 0xAF50,
	52800 - 44032: 0xAF51,
	52801 - 44032: 0xAF52,
	52802 - 44032: 0xAF53,
	52803 - 44032: 0xAF54,
	52804 - 44032: 0xAF55,
	52805 - 44032: 0xAF56,
	52806 - 44032: 0xAF57,
	52807 - 44032: 0xAF58,
	52808 - 44032: 0xAF59,
	52809 - 44032: 0xAF5A,
	52810 - 44032: 0xAF61,
	52811 - 44032: 0xAF62,
	52812 - 44032: 0xAF63,
	52813 - 44032: 0xAF64,
	52814 - 44032: 0xAF65,
	52815 - 44032: 0xAF66,
	52816 - 44032: 0xAF67,
	52817 - 44032: 0xAF68,
	52818 - 44032: 0xAF69,
	52819 - 44032: 0xAF6A,
	52820 - 44032: 0xAF6B,
	52821 - 44032: 0xAF6C,
	52822 - 44032: 0xAF6D,
	52823 - 44032: 0xAF6E,
	52824 - 44032: 0xC4A1,
	52825 - 44032: 0xC4A2,
	52826 - 44032: 0xAF6F,
	52827 - 44032: 0xAF70,
	52828 - 44032: 0xC4A3,
	52829 - 44032: 0xAF71,
	52830 - 44032: 0xAF72,
	52831 - 44032: 0xC4A4,
	52832 - 44032: 0xC4A5,
	52833 - 44032: 0xC4A6,
	52834 - 44032: 0xAF73,
	52835 - 44032: 0xAF74,
	52836 - 44032: 0xAF75,
	52837 - 44032: 0xAF76,
	52838 - 44032: 0xAF77,
	52839 - 44032: 0xAF78,
	52840 - 44032: 0xC4A7,
	52841 - 44032: 0xC4A8,
	52842 - 44032: 0xAF79,
	52843 - 44032: 0xC4A9,
	52844 - 44032: 0xAF7A,
	52845 - 44032: 0xC4AA,
	52846 - 44032: 0xAF81,
	52847 - 44032: 0xAF82,
	52848 - 44032: 0xAF83,
	52849 - 44032: 0xAF84,
	52850 - 44032: 0xAF85,
	52851 - 44032: 0xAF86,
	52852 - 44032: 0xC4AB,
	52853 - 44032: 0xC4AC,
	52854 - 44032: 0xAF87,
	52855 - 44032: 0xAF88,
	52856 - 44032: 0xC4AD,
	52857 - 44032: 0xAF89,
	52858 - 44032: 0xAF8A,
	52859 - 44032: 0xAF8B,
	52860 - 44032: 0xC4AE,
	52861 - 44032: 0xAF8C,
	52862 - 44032: 0xAF8D,
	52863 - 44032: 0xAF8E,
	52864 - 44032: 0xAF8F,
	52865 - 44032: 0xAF90,
	52866 - 44032: 0xAF91,
	52867 - 44032: 0xAF92,
	52868 - 44032: 0xC4AF,
	52869 - 44032: 0xC4B0,
	52870 - 44032: 0xAF93,
	52871 - 44032: 0xC4B1,
	52872 - 44032: 0xAF94,
	52873 - 44032: 0xC4B2,
	52874 - 44032: 0xAF95,
	52875 - 44032: 0xAF96,
	52876 - 44032: 0xAF97,
	52877 - 44032: 0xAF98,
	52878 - 44032: 0xAF99,
	52879 - 44032: 0xAF9A,
	52880 - 44032: 0xC4B3,
	52881 - 44032: 0xC4B4,
	52882 - 44032: 0xAF9B,
	52883 - 44032: 0xAF9C,
	52884 - 44032: 0xC4B5,
	52885 - 44032: 0xAF9D,
	52886 - 44032: 0xAF9E,
	52887 - 44032: 0xAF9F,
	52888 - 44032: 0xC4B6,
	52889 - 44032: 0xAFA0,
	52890 - 44032: 0xB041,
	52891 - 44032: 0xB042,
	52892 - 44032: 0xB043,
	52893 - 44032: 0xB044,
	52894 - 44032: 0xB045,
	52895 - 44032: 0xB046,
	52896 - 44032: 0xC4B7,
	52897 - 44032: 0xC4B8,
	52898 - 44032: 0xB047,
	52899 - 44032: 0xC4B9,
	52900 - 44032: 0xC4BA,
	52901 - 44032: 0xC4BB,
	52902 - 44032: 0xB048,
	52903 - 44032: 0xB049,
	52904 - 44032: 0xB04A,
	52905 - 44032: 0xB04B,
	52906 - 44032: 0xB04C,
	52907 - 44032: 0xB04D,
	52908 - 44032: 0xC4BC,
	52909 - 44032: 0xC4BD,
	52910 - 44032: 0xB04E,
	52911 - 44032: 0xB04F,
	52912 - 44032: 0xB050,
	52913 - 44032: 0xB051,
	52914 - 44032: 0xB052,
	52915 - 44032: 0xB053,
	52916 - 44032: 0xB054,
	52917 - 44032: 0xB055,
	52918 - 44032: 0xB056,
	52919 - 44032: 0xB057,
	52920 - 44032: 0xB058,
	52921 - 44032: 0xB059,
	52922 - 44032: 0xB05A,
	52923 - 44032: 0xB061,
	52924 - 44032: 0xB062,
	52925 - 44032: 0xB063,
	52926 - 44032: 0xB064,
	52927 - 44032: 0xB065,
	52928 - 44032: 0xB066,
	52929 - 44032: 0xC4BE,
	52930 - 44032: 0xB067,
	52931 - 44032: 0xB068,
	52932 - 44032: 0xB069,
	52933 - 44032: 0xB06A,
	52934 - 44032: 0xB06B,
	52935 - 44032: 0xB06C,
	52936 - 44032: 0xB06D,
	52937 - 44032: 0xB06E,
	52938 - 44032: 0xB06F,
	52939 - 44032: 0xB070,
	52940 - 44032: 0xB071,
	52941 - 44032: 0xB072,
	52942 - 44032: 0xB073,
	52943 - 44032: 0xB074,
	52944 - 44032: 0xB075,
	52945 - 44032: 0xB076,
	52946 - 44032: 0xB077,
	52947 - 44032: 0xB078,
	52948 - 44032: 0xB079,
	52949 - 44032: 0xB07A,
	52950 - 44032: 0xB081,
	52951 - 44032: 0xB082,
	52952 - 44032: 0xB083,
	52953 - 44032: 0xB084,
	52954 - 44032: 0xB085,
	52955 - 44032: 0xB086,
	52956 - 44032: 0xB087,
	52957 - 44032: 0xB088,
	52958 - 44032: 0xB089,
	52959 - 44032: 0xB08A,
	52960 - 44032: 0xB08B,
	52961 - 44032: 0xB08C,
	52962 - 44032: 0xB08D,
	52963 - 44032: 0xB08E,
	52964 - 44032: 0xC4BF,
	52965 - 44032: 0xC4C0,
	52966 - 44032: 0xB08F,
	52967 - 44032: 0xB090,
	52968 - 44032: 0xC4C1,
	52969 - 44032: 0xB091,
	52970 - 44032: 0xB092,
	52971 - 44032: 0xC4C2,
	52972 - 44032: 0xC4C3,
	52973 - 44032: 0xB093,
	52974 - 44032: 0xB094,
	52975 - 44032: 0xB095,
	52976 - 44032: 0xB096,
	52977 - 44032: 0xB097,
	52978 - 44032: 0xB098,
	52979 - 44032: 0xB099,
	52980 - 44032: 0xC4C4,
	52981 - 44032: 0xC4C5,
	52982 - 44032: 0xB09A,
	52983 - 44032: 0xC4C6,
	52984 - 44032: 0xC4C7,
	52985 - 44032: 0xC4C8,
	52986 - 44032: 0xB09B,
	52987 - 44032: 0xB09C,
	52988 - 44032: 0xB09D,
	52989 - 44032: 0xB09E,
	52990 - 44032: 0xB09F,
	52991 - 44032: 0xB0A0,
	52992 - 44032: 0xC4C9,
	52993 - 44032: 0xC4CA,
	52994 - 44032: 0xB141,
	52995 - 44032: 0xB142,
	52996 - 44032: 0xC4CB,
	52997 - 44032: 0xB143,
	52998 - 44032: 0xB144,
	52999 - 44032: 0xB145,
	53000 - 44032: 0xC4CC,
	53001 - 44032: 0xB146,
	53002 - 44032: 0xB147,
	53003 - 44032: 0xB148,
	53004 - 44032: 0xB149,
	53005 - 44032: 0xB14A,
	53006 - 44032: 0xB14B,
	53007 - 44032: 0xB14C,
	53008 - 44032: 0xC4CD,
	53009 - 44032: 0xC4CE,
	53010 - 44032: 0xB14D,
	53011 - 44032: 0xC4CF,
	53012 - 44032: 0xB14E,
	53013 - 44032: 0xC4D0,
	53014 - 44032: 0xB14F,
	53015 - 44032: 0xB150,
	53016 - 44032: 0xB151,
	53017 - 44032: 0xB152,
	53018 - 44032: 0xB153,
	53019 - 44032: 0xB154,
	53020 - 44032: 0xC4D1,
	53021 - 44032: 0xB155,
	53022 - 44032: 0xB156,
	53023 - 44032: 0xB157,
	53024 - 44032: 0xC4D2,
	53025 - 44032: 0xB158,
	53026 - 44032: 0xB159,
	53027 - 44032: 0xB15A,
	53028 - 44032: 0xC4D3,
	53029 - 44032: 0xB161,
	53030 - 44032: 0xB162,
	53031 - 44032: 0xB163,
	53032 - 44032: 0xB164,
	53033 - 44032: 0xB165,
	53034 - 44032: 0xB166,
	53035 - 44032: 0xB167,
	53036 - 44032: 0xC4D4,
	53037 - 44032: 0xC4D5,
	53038 - 44032: 0xB168,
	53039 - 44032: 0xC4D6,
	53040 - 44032: 0xC4D7,
	53041 - 44032: 0xC4D8,
	53042 - 44032: 0xB169,
	53043 - 44032: 0xB16A,
	53044 - 44032: 0xB16B,
	53045 - 44032: 0xB16C,
	53046 - 44032: 0xB16D,
	53047 - 44032: 0xB16E,
	53048 - 44032: 0xC4D9,
	53049 - 44032: 0xB16F,
	53050 - 44032: 0xB170,
	53051 - 44032: 0xB171,
	53052 - 44032: 0xB172,
	53053 - 44032: 0xB173,
	53054 - 44032: 0xB174,
	53055 - 44032: 0xB175,
	53056 - 44032: 0xB176,
	53057 - 44032: 0xB177,
	53058 - 44032: 0xB178,
	53059 - 44032: 0xB179,
	53060 - 44032: 0xB17A,
	53061 - 44032: 0xB181,
	53062 - 44032: 0xB182,
	53063 - 44032: 0xB183,
	53064 - 44032: 0xB184,
	53065 - 44032: 0xB185,
	53066 - 44032: 0xB186,
	53067 - 44032: 0xB187,
	53068 - 44032: 0xB188,
	53069 - 44032: 0xB189,
	53070 - 44032: 0xB18A,
	53071 - 44032: 0xB18B,
	53072 - 44032: 0xB18C,
	53073 - 44032: 0xB18D,
	53074 - 44032: 0xB18E,
	53075 - 44032: 0xB18F,
	53076 - 44032: 0xC4DA,
	53077 - 44032: 0xC4DB,
	53078 - 44032: 0xB190,
	53079 - 44032: 0xB191,
	53080 - 44032: 0xC4DC,
	53081 - 44032: 0xB192,
	53082 - 44032: 0xB193,
	53083 - 44032: 0xB194,
	53084 - 44032: 0xC4DD,
	53085 - 44032: 0xB195,
	53086 - 44032: 0xB196,
	53087 - 44032: 0xB197,
	53088 - 44032: 0xB198,
	53089 - 44032: 0xB199,
	53090 - 44032: 0xB19A,
	53091 - 44032: 0xB19B,
	53092 - 44032: 0xC4DE,
	53093 - 44032: 0xC4DF,
	53094 - 44032: 0xB19C,
	53095 - 44032: 0xC4E0,
	53096 - 44032: 0xB19D,
	53097 - 44032: 0xC4E1,
	53098 - 44032: 0xB19E,
	53099 - 44032: 0xB19F,
	53100 - 44032: 0xB1A0,
	53101 - 44032: 0xB241,
	53102 - 44032: 0xB242,
	53103 - 44032: 0xB243,
	53104 - 44032: 0xC4E2,
	53105 - 44032: 0xC4E3,
	53106 - 44032: 0xB244,
	53107 - 44032: 0xB245,
	53108 - 44032: 0xC4E4,
	53109 - 44032: 0xB246,
	53110 - 44032: 0xB247,
	53111 - 44032: 0xB248,
	53112 - 44032: 0xC4E5,
	53113 - 44032: 0xB249,
	53114 - 44032: 0xB24A,
	53115 - 44032: 0xB24B,
	53116 - 44032: 0xB24C,
	53117 - 44032: 0xB24D,
	53118 - 44032: 0xB24E,
	53119 - 44032: 0xB24F,
	53120 - 44032: 0xC4E6,
	53121 - 44032: 0xB250,
	53122 - 44032: 0xB251,
	53123 - 44032: 0xB252,
	53124 - 44032: 0xB253,
	53125 - 44032: 0xC4E7,
	53126 - 44032: 0xB254,
	53127 - 44032: 0xB255,
	53128 - 44032: 0xB256,
	53129 - 44032: 0xB257,
	53130 - 44032: 0xB258,
	53131 - 44032: 0xB259,
	53132 - 44032: 0xC4E8,
	53133 - 44032: 0xB25A,
	53134 - 44032: 0xB261,
	53135 - 44032: 0xB262,
	53136 - 44032: 0xB263,
	53137 - 44032: 0xB264,
	53138 - 44032: 0xB265,
	53139 - 44032: 0xB266,
	53140 - 44032: 0xB267,
	53141 - 44032: 0xB268,
	53142 - 44032: 0xB269,
	53143 - 44032: 0xB26A,
	53144 - 44032: 0xB26B,
	53145 - 44032: 0xB26C,
	53146 - 44032: 0xB26D,
	53147 - 44032: 0xB26E,
	53148 - 44032: 0xB26F,
	53149 - 44032: 0xB270,
	53150 - 44032: 0xB271,
	53151 - 44032: 0xB272,
	53152 - 44032: 0xB273,
	53153 - 44032: 0xC4E9,
	53154 - 44032: 0xB274,
	53155 - 44032: 0xB275,
	53156 - 44032: 0xB276,
	53157 - 44032: 0xB277,
	53158 - 44032: 0xB278,
	53159 - 44032: 0xB279,
	53160 - 44032: 0xC4EA,
	53161 - 44032: 0xB27A,
	53162 - 44032: 0xB281,
	53163 - 44032: 0xB282,
	53164 - 44032: 0xB283,
	53165 - 44032: 0xB284,
	53166 - 44032: 0xB285,
	53167 - 44032: 0xB286,
	53168 - 44032: 0xC4EB,
	53169 - 44032: 0xB287,
	53170 - 44032: 0xB288,
	53171 - 44032: 0xB289,
	53172 - 44032: 0xB28A,
	53173 - 44032: 0xB28B,
	53174 - 44032: 0xB28C,
	53175 - 44032: 0xB28D,
	53176 - 44032: 0xB28E,
	53177 - 44032: 0xB28F,
	53178 - 44032: 0xB290,
	53179 - 44032: 0xB291,
	53180 - 44032: 0xB292,
	53181 - 44032: 0xB293,
	53182 - 44032: 0xB294,
	53183 - 44032: 0xB295,
	53184 - 44032: 0xB296,
	53185 - 44032: 0xB297,
	53186 - 44032: 0xB298,
	53187 - 44032: 0xB299,
	53188 - 44032: 0xC4EC,
	53189 - 44032: 0xB29A,
	53190 - 44032: 0xB29B,
	53191 - 44032: 0xB29C,
	53192 - 44032: 0xB29D,
	53193 - 44032: 0xB29E,
	53194 - 44032: 0xB29F,
	53195 - 44032: 0xB2A0,
	53196 - 44032: 0xB341,
	53197 - 44032: 0xB342,
	53198 - 44032: 0xB343,
	53199 - 44032: 0xB344,
	53200 - 44032: 0xB345,
	53201 - 44032: 0xB346,
	53202 - 44032: 0xB347,
	53203 - 44032: 0xB348,
	53204 - 44032: 0xB349,
	53205 - 44032: 0xB34A,
	53206 - 44032: 0xB34B,
	53207 - 44032: 0xB34C,
	53208 - 44032: 0xB34D,
	53209 - 44032: 0xB34E,
	53210 - 44032: 0xB34F,
	53211 - 44032: 0xB350,
	53212 - 44032: 0xB351,
	53213 - 44032: 0xB352,
	53214 - 44032: 0xB353,
	53215 - 44032: 0xB354,
	53216 - 44032: 0xC4ED,
	53217 - 44032: 0xC4EE,
	53218 - 44032: 0xB355,
	53219 - 44032: 0xB356,
	53220 - 44032: 0xC4EF,
	53221 - 44032: 0xB357,
	53222 - 44032: 0xB358,
	53223 - 44032: 0xB359,
	53224 - 44032: 0xC4F0,
	53225 - 44032: 0xB35A,
	53226 - 44032: 0xB361,
	53227 - 44032: 0xB362,
	53228 - 44032: 0xB363,
	53229 - 44032: 0xB364,
	53230 - 44032: 0xB365,
	53231 - 44032: 0xB366,
	53232 - 44032: 0xC4F1,
	53233 - 44032: 0xC4F2,
	53234 - 44032: 0xB367,
	53235 - 44032: 0xC4F3,
	53236 - 44032: 0xB368,
	53237 - 44032: 0xC4F4,
	53238 - 44032: 0xB369,
	53239 - 44032: 0xB36A,
	53240 - 44032: 0xB36B,
	53241 - 44032: 0xB36C,
	53242 - 44032: 0xB36D,
	53243 - 44032: 0xB36E,
	53244 - 44032: 0xC4F5,
	53245 - 44032: 0xB36F,
	53246 - 44032: 0xB370,
	53247 - 44032: 0xB371,
	53248 - 44032: 0xC4F6,
	53249 - 44032: 0xB372,
	53250 - 44032: 0xB373,
	53251 - 44032: 0xB374,
	53252 - 44032: 0xC4F7,
	53253 - 44032: 0xB375,
	53254 - 44032: 0xB376,
	53255 - 44032: 0xB377,
	53256 - 44032: 0xB378,
	53257 - 44032: 0xB379,
	53258 - 44032: 0xB37A,
	53259 - 44032: 0xB381,
	53260 - 44032: 0xB382,
	53261 - 44032: 0xB383,
	53262 - 44032: 0xB384,
	53263 - 44032: 0xB385,
	53264 - 44032: 0xB386,
	53265 - 44032: 0xC4F8,
	53266 - 44032: 0xB387,
	53267 - 44032: 0xB388,
	53268 - 44032: 0xB389,
	53269 - 44032: 0xB38A,
	53270 - 44032: 0xB38B,
	53271 - 44032: 0xB38C,
	53272 - 44032: 0xC4F9,
	53273 - 44032: 0xB38D,
	53274 - 44032: 0xB38E,
	53275 - 44032: 0xB38F,
	53276 - 44032: 0xB390,
	53277 - 44032: 0xB391,
	53278 - 44032: 0xB392,
	53279 - 44032: 0xB393,
	53280 - 44032: 0xB394,
	53281 - 44032: 0xB395,
	53282 - 44032: 0xB396,
	53283 - 44032: 0xB397,
	53284 - 44032: 0xB398,
	53285 - 44032: 0xB399,
	53286 - 44032: 0xB39A,
	53287 - 44032: 0xB39B,
	53288 - 44032: 0xB39C,
	53289 - 44032: 0xB39D,
	53290 - 44032: 0xB39E,
	53291 - 44032: 0xB39F,
	53292 - 44032: 0xB3A0,
	53293 - 44032: 0xC4FA,
	53294 - 44032: 0xB441,
	53295 - 44032: 0xB442,
	53296 - 44032: 0xB443,
	53297 - 44032: 0xB444,
	53298 - 44032: 0xB445,
	53299 - 44032: 0xB446,
	53300 - 44032: 0xC4FB,
	53301 - 44032: 0xC4FC,
	53302 - 44032: 0xB447,
	53303 - 44032: 0xB448,
	53304 - 44032: 0xC4FD,
	53305 - 44032: 0xB449,
	53306 - 44032: 0xB44A,
	53307 - 44032: 0xB44B,
	53308 - 44032: 0xC4FE,
	53309 - 44032: 0xB44C,
	53310 - 44032: 0xB44D,
	53311 - 44032: 0xB44E,
	53312 - 44032: 0xB44F,
	53313 - 44032: 0xB450,
	53314 - 44032: 0xB451,
	53315 - 44032: 0xB452,
	53316 - 44032: 0xC5A1,
	53317 - 44032: 0xC5A2,
	53318 - 44032: 0xB453,
	53319 - 44032: 0xC5A3,
	53320 - 44032: 0xB454,
	53321 - 44032: 0xC5A4,
	53322 - 44032: 0xB455,
	53323 - 44032: 0xB456,
	53324 - 44032: 0xB457,
	53325 - 44032: 0xB458,
	53326 - 44032: 0xB459,
	53327 - 44032: 0xB45A,
	53328 - 44032: 0xC5A5,
	53329 - 44032: 0xB461,
	53330 - 44032: 0xB462,
	53331 - 44032: 0xB463,
	53332 - 44032: 0xC5A6,
	53333 - 44032: 0xB464,
	53334 - 44032: 0xB465,
	53335 - 44032: 0xB466,
	53336 - 44032: 0xC5A7,
	53337 - 44032: 0xB467,
	53338 - 44032: 0xB468,
	53339 - 44032: 0xB469,
	53340 - 44032: 0xB46A,
	53341 - 44032: 0xB46B,
	53342 - 44032: 0xB46C,
	53343 - 44032: 0xB46D,
	53344 - 44032: 0xC5A8,
	53345 - 44032: 0xB46E,
	53346 - 44032: 0xB46F,
	53347 - 44032: 0xB470,
	53348 - 44032: 0xB471,
	53349 - 44032: 0xB472,
	53350 - 44032: 0xB473,
	53351 - 44032: 0xB474,
	53352 - 44032: 0xB475,
	53353 - 44032: 0xB476,
	53354 - 44032: 0xB477,
	53355 - 44032: 0xB478,
	53356 - 44032: 0xC5A9,
	53357 - 44032: 0xC5AA,
	53358 - 44032: 0xB479,
	53359 - 44032: 0xB47A,
	53360 - 44032: 0xC5AB,
	53361 - 44032: 0xB481,
	53362 - 44032: 0xB482,
	53363 - 44032: 0xB483,
	53364 - 44032: 0xC5AC,
	53365 - 44032: 0xB484,
	53366 - 44032: 0xB485,
	53367 - 44032: 0xB486,
	53368 - 44032: 0xB487,
	53369 - 44032: 0xB488,
	53370 - 44032: 0xB489,
	53371 - 44032: 0xB48A,
	53372 - 44032: 0xC5AD,
	53373 - 44032: 0xC5AE,
	53374 - 44032: 0xB48B,
	53375 - 44032: 0xB48C,
	53376 - 44032: 0xB48D,
	53377 - 44032: 0xC5AF,
	53378 - 44032: 0xB48E,
	53379 - 44032: 0xB48F,
	53380 - 44032: 0xB490,
	53381 - 44032: 0xB491,
	53382 - 44032: 0xB492,
	53383 - 44032: 0xB493,
	53384 - 44032: 0xB494,
	53385 - 44032: 0xB495,
	53386 - 44032: 0xB496,
	53387 - 44032: 0xB497,
	53388 - 44032: 0xB498,
	53389 - 44032: 0xB499,
	53390 - 44032: 0xB49A,
	53391 - 44032: 0xB49B,
	53392 - 44032: 0xB49C,
	53393 - 44032: 0xB49D,
	53394 - 44032: 0xB49E,
	53395 - 44032: 0xB49F,
	53396 - 44032: 0xB4A0,
	53397 - 44032: 0xB541,
	53398 - 44032: 0xB542,
	53399 - 44032: 0xB543,
	53400 - 44032: 0xB544,
	53401 - 44032: 0xB545,
	53402 - 44032: 0xB546,
	53403 - 44032: 0xB547,
	53404 - 44032: 0xB548,
	53405 - 44032: 0xB549,
	53406 - 44032: 0xB54A,
	53407 - 44032: 0xB54B,
	53408 - 44032: 0xB54C,
	53409 - 44032: 0xB54D,
	53410 - 44032: 0xB54E,
	53411 - 44032: 0xB54F,
	53412 - 44032: 0xC5B0,
	53413 - 44032: 0xC5B1,
	53414 - 44032: 0xB550,
	53415 - 44032: 0xB551,
	53416 - 44032: 0xC5B2,
	53417 - 44032: 0xB552,
	53418 - 44032: 0xB553,
	53419 - 44032: 0xB554,
	53420 - 44032: 0xC5B3,
	53421 - 44032: 0xB555,
	53422 - 44032: 0xB556,
	53423 - 44032: 0xB557,
	53424 - 44032: 0xB558,
	53425 - 44032: 0xB559,
	53426 - 44032: 0xB55A,
	53427 - 44032: 0xB561,
	53428 - 44032: 0xC5B4,
	53429 - 44032: 0xC5B5,
	53430 - 44032: 0xB562,
	53431 - 44032: 0xC5B6,
	53432 - 44032: 0xB563,
	53433 - 44032: 0xC5B7,
	53434 - 44032: 0xB564,
	53435 - 44032: 0xB565,
	53436 - 44032: 0xB566,
	53437 - 44032: 0xB567,
	53438 - 44032: 0xB568,
	53439 - 44032: 0xB569,
	53440 - 44032: 0xC5B8,
	53441 - 44032: 0xC5B9,
	53442 - 44032: 0xB56A,
	53443 - 44032: 0xB56B,
	53444 - 44032: 0xC5BA,
	53445 - 44032: 0xB56C,
	53446 - 44032: 0xB56D,
	53447 - 44032: 0xB56E,
	53448 - 44032: 0xC5BB,
	53449 - 44032: 0xC5BC,
	53450 - 44032: 0xB56F,
	53451 - 44032: 0xB570,
	53452 - 44032: 0xB571,
	53453 - 44032: 0xB572,
	53454 - 44032: 0xB573,
	53455 - 44032: 0xB574,
	53456 - 44032: 0xC5BD,
	53457 - 44032: 0xC5BE,
	53458 - 44032: 0xB575,
	53459 - 44032: 0xC5BF,
	53460 - 44032: 0xC5C0,
	53461 - 44032: 0xC5C1,
	53462 - 44032: 0xB576,
	53463 - 44032: 0xB577,
	53464 - 44032: 0xB578,
	53465 - 44032: 0xB579,
	53466 - 44032: 0xB57A,
	53467 - 44032: 0xB581,
	53468 - 44032: 0xC5C2,
	53469 - 44032: 0xC5C3,
	53470 - 44032: 0xB582,
	53471 - 44032: 0xB583,
	53472 - 44032: 0xC5C4,
	53473 - 44032: 0xB584,
	53474 - 44032: 0xB585,
	53475 - 44032: 0xB586,
	53476 - 44032: 0xC5C5,
	53477 - 44032: 0xB587,
	53478 - 44032: 0xB588,
	53479 - 44032: 0xB589,
	53480 - 44032: 0xB58A,
	53481 - 44032: 0xB58B,
	53482 - 44032: 0xB58C,
	53483 - 44032: 0xB58D,
	53484 - 44032: 0xC5C6,
	53485 - 44032: 0xC5C7,
	53486 - 44032: 0xB58E,
	53487 - 44032: 0xC5C8,
	53488 - 44032: 0xC5C9,
	53489 - 44032: 0xC5CA,
	53490 - 44032: 0xB58F,
	53491 - 44032: 0xB590,
	53492 - 44032: 0xB591,
	53493 - 44032: 0xB592,
	53494 - 44032: 0xB593,
	53495 - 44032: 0xB594,
	53496 - 44032: 0xC5CB,
	53497 - 44032: 0xB595,
	53498 - 44032: 0xB596,
	53499 - 44032: 0xB597,
	53500 - 44032: 0xB598,
	53501 - 44032: 0xB599,
	53502 - 44032: 0xB59A,
	53503 - 44032: 0xB59B,
	53504 - 44032: 0xB59C,
	53505 - 44032: 0xB59D,
	53506 - 44032: 0xB59E,
	53507 - 44032: 0xB59F,
	53508 - 44032: 0xB5A0,
	53509 - 44032: 0xB641,
	53510 - 44032: 0xB642,
	53511 - 44032: 0xB643,
	53512 - 44032: 0xB644,
	53513 - 44032: 0xB645,
	53514 - 44032: 0xB646,
	53515 - 44032: 0xB647,
	53516 - 44032: 0xB648,
	53517 - 44032: 0xC5CC,
	53518 - 44032: 0xB649,
	53519 - 44032: 0xB64A,
	53520 - 44032: 0xB64B,
	53521 - 44032: 0xB64C,
	53522 - 44032: 0xB64D,
	53523 - 44032: 0xB64E,
	53524 - 44032: 0xB64F,
	53525 - 44032: 0xB650,
	53526 - 44032: 0xB651,
	53527 - 44032: 0xB652,
	53528 - 44032: 0xB653,
	53529 - 44032: 0xB654,
	53530 - 44032: 0xB655,
	53531 - 44032: 0xB656,
	53532 - 44032: 0xB657,
	53533 - 44032: 0xB658,
	53534 - 44032: 0xB659,
	53535 - 44032: 0xB65A,
	53536 - 44032: 0xB661,
	53537 - 44032: 0xB662,
	53538 - 44032: 0xB663,
	53539 - 44032: 0xB664,
	53540 - 44032: 0xB665,
	53541 - 44032: 0xB666,
	53542 - 44032: 0xB667,
	53543 - 44032: 0xB668,
	53544 - 44032: 0xB669,
	53545 - 44032: 0xB66A,
	53546 - 44032: 0xB66B,
	53547 - 44032: 0xB66C,
	53548 - 44032: 0xB66D,
	53549 - 44032: 0xB66E,
	53550 - 44032: 0xB66F,
	53551 - 44032: 0xB670,
	53552 - 44032: 0xC5CD,
	53553 - 44032: 0xC5CE,
	53554 - 44032: 0xB671,
	53555 - 44032: 0xB672,
	53556 - 44032: 0xC5CF,
	53557 - 44032: 0xB673,
	53558 - 44032: 0xB674,
	53559 - 44032: 0xB675,
	53560 - 44032: 0xC5D0,
	53561 - 44032: 0xB676,
	53562 - 44032: 0xC5D1,
	53563 - 44032: 0xB677,
	53564 - 44032: 0xB678,
	53565 - 44032: 0xB679,
	53566 - 44032: 0xB67A,
	53567 - 44032: 0xB681,
	53568 - 44032: 0xC5D2,
	53569 - 44032: 0xC5D3,
	53570 - 44032: 0xB682,
	53571 - 44032: 0xC5D4,
	53572 - 44032: 0xC5D5,
	53573 - 44032: 0xC5D6,
	53574 - 44032: 0xB683,
	53575 - 44032: 0xB684,
	53576 - 44032: 0xB685,
	53577 - 44032: 0xB686,
	53578 - 44032: 0xB687,
	53579 - 44032: 0xB688,
	53580 - 44032: 0xC5D7,
	53581 - 44032: 0xC5D8,
	53582 - 44032: 0xB689,
	53583 - 44032: 0xB68A,
	53584 - 44032: 0xC5D9,
	53585 - 44032: 0xB68B,
	53586 - 44032: 0xB68C,
	53587 - 44032: 0xB68D,
	53588 - 44032: 0xC5DA,
	53589 - 44032: 0xB68E,
	53590 - 44032: 0xB68F,
	53591 - 44032: 0xB690,
	53592 - 44032: 0xB691,
	53593 - 44032: 0xB692,
	53594 - 44032: 0xB693,
	53595 - 44032: 0xB694,
	53596 - 44032: 0xC5DB,
	53597 - 44032: 0xC5DC,
	53598 - 44032: 0xB695,
	53599 - 44032: 0xC5DD,
	53600 - 44032: 0xB696,
	53601 - 44032: 0xC5DE,
	53602 - 44032: 0xB697,
	53603 - 44032: 0xB698,
	53604 - 44032: 0xB699,
	53605 - 44032: 0xB69A,
	53606 - 44032: 0xB69B,
	53607 - 44032: 0xB69C,
	53608 - 44032: 0xC5DF,
	53609 - 44032: 0xB69D,
	53610 - 44032: 0xB69E,
	53611 - 44032: 0xB69F,
	53612 - 44032: 0xC5E0,
	53613 - 44032: 0xB6A0,
	53614 - 44032: 0xB741,
	53615 - 44032: 0xB742,
	53616 - 44032: 0xB743,
	53617 - 44032: 0xB744,
	53618 - 44032: 0xB745,
	53619 - 44032: 0xB746,
	53620 - 44032: 0xB747,
	53621 - 44032: 0xB748,
	53622 - 44032: 0xB749,
	53623 - 44032: 0xB74A,
	53624 - 44032: 0xB74B,
	53625 - 44032: 0xB74C,
	53626 - 44032: 0xB74D,
	53627 - 44032: 0xB74E,
	53628 - 44032: 0xC5E1,
	53629 - 44032: 0xB74F,
	53630 - 44032: 0xB750,
	53631 - 44032: 0xB751,
	53632 - 44032: 0xB752,
	53633 - 44032: 0xB753,
	53634 - 44032: 0xB754,
	53635 - 44032: 0xB755,
	53636 - 44032: 0xC5E2,
	53637 - 44032: 0xB756,
	53638 - 44032: 0xB757,
	53639 - 44032: 0xB758,
	53640 - 44032: 0xC5E3,
	53641 - 44032: 0xB759,
	53642 - 44032: 0xB75A,
	53643 - 44032: 0xB761,
	53644 - 44032: 0xB762,
	53645 - 44032: 0xB763,
	53646 - 44032: 0xB764,
	53647 - 44032: 0xB765,
	53648 - 44032: 0xB766,
	53649 - 44032: 0xB767,
	53650 - 44032: 0xB768,
	53651 - 44032: 0xB769,
	53652 - 44032: 0xB76A,
	53653 - 44032: 0xB76B,
	53654 - 44032: 0xB76C,
	53655 - 44032: 0xB76D,
	53656 - 44032: 0xB76E,
	53657 - 44032: 0xB76F,
	53658 - 44032: 0xB770,
	53659 - 44032: 0xB771,
	53660 - 44032: 0xB772,
	53661 - 44032: 0xB773,
	53662 - 44032: 0xB774,
	53663 - 44032: 0xB775,
	53664 - 44032: 0xC5E4,
	53665 - 44032: 0xC5E5,
	53666 - 44032: 0xB776,
	53667 - 44032: 0xB777,
	53668 - 44032: 0xC5E6,
	53669 - 44032: 0xB778,
	53670 - 44032: 0xB779,
	53671 - 44032: 0xB77A,
	53672 - 44032: 0xC5E7,
	53673 - 44032: 0xB781,
	53674 - 44032: 0xB782,
	53675 - 44032: 0xB783,
	53676 - 44032: 0xB784,
	53677 - 44032: 0xB785,
	53678 - 44032: 0xB786,
	53679 - 44032: 0xB787,
	53680 - 44032: 0xC5E8,
	53681 - 44032: 0xC5E9,
	53682 - 44032: 0xB788,
	53683 - 44032: 0xC5EA,
	53684 - 44032: 0xB789,
	53685 - 44032: 0xC5EB,
	53686 - 44032: 0xB78A,
	53687 - 44032: 0xB78B,
	53688 - 44032: 0xB78C,
	53689 - 44032: 0xB78D,
	53690 - 44032: 0xC5EC,
	53691 - 44032: 0xB78E,
	53692 - 44032: 0xC5ED,
	53693 - 44032: 0xB78F,
	53694 - 44032: 0xB790,
	53695 - 44032: 0xB791,
	53696 - 44032: 0xC5EE,
	53697 - 44032: 0xB792,
	53698 - 44032: 0xB793,
	53699 - 44032: 0xB794,
	53700 - 44032: 0xB795,
	53701 - 44032: 0xB796,
	53702 - 44032: 0xB797,
	53703 - 44032: 0xB798,
	53704 - 44032: 0xB799,
	53705 - 44032: 0xB79A,
	53706 - 44032: 0xB79B,
	53707 - 44032: 0xB79C,
	53708 - 44032: 0xB79D,
	53709 - 44032: 0xB79E,
	53710 - 44032: 0xB79F,
	53711 - 44032: 0xB7A0,
	53712 - 44032: 0xB841,
	53713 - 44032: 0xB842,
	53714 - 44032: 0xB843,
	53715 - 44032: 0xB844,
	53716 - 44032: 0xB845,
	53717 - 44032: 0xB846,
	53718 - 44032: 0xB847,
	53719 - 44032: 0xB848,
	53720 - 44032: 0xC5EF,
	53721 - 44032: 0xB849,
	53722 - 44032: 0xB84A,
	53723 - 44032: 0xB84B,
	53724 - 44032: 0xB84C,
	53725 - 44032: 0xB84D,
	53726 - 44032: 0xB84E,
	53727 - 44032: 0xB84F,
	53728 - 44032: 0xB850,
	53729 - 44032: 0xB851,
	53730 - 44032: 0xB852,
	53731 - 44032: 0xB853,
	53732 - 44032: 0xB854,
	53733 - 44032: 0xB855,
	53734 - 44032: 0xB856,
	53735 - 44032: 0xB857,
	53736 - 44032: 0xB858,
	53737 - 44032: 0xB859,
	53738 - 44032: 0xB85A,
	53739 - 44032: 0xB861,
	53740 - 44032: 0xB862,
	53741 - 44032: 0xB863,
	53742 - 44032: 0xB864,
	53743 - 44032: 0xB865,
	53744 - 44032: 0xB866,
	53745 - 44032: 0xB867,
	53746 - 44032: 0xB868,
	53747 - 44032: 0xB869,
	53748 - 44032: 0xC5F0,
	53749 - 44032: 0xB86A,
	53750 - 44032: 0xB86B,
	53751 - 44032: 0xB86C,
	53752 - 44032: 0xC5F1,
	53753 - 44032: 0xB86D,
	53754 - 44032: 0xB86E,
	53755 - 44032: 0xB86F,
	53756 - 44032: 0xB870,
	53757 - 44032: 0xB871,
	53758 - 44032: 0xB872,
	53759 - 44032: 0xB873,
	53760 - 44032: 0xB874,
	53761 - 44032: 0xB875,
	53762 - 44032: 0xB876,
	53763 - 44032: 0xB877,
	53764 - 44032: 0xB878,
	53765 - 44032: 0xB879,
	53766 - 44032: 0xB87A,
	53767 - 44032: 0xC5F2,
	53768 - 44032: 0xB881,
	53769 - 44032: 0xC5F3,
	53770 - 44032: 0xB882,
	53771 - 44032: 0xB883,
	53772 - 44032: 0xB884,
	53773 - 44032: 0xB885,
	53774 - 44032: 0xB886,
	53775 - 44032: 0xB887,
	53776 - 44032: 0xC5F4,
	53777 - 44032: 0xB888,
	53778 - 44032: 0xB889,
	53779 - 44032: 0xB88A,
	53780 - 44032: 0xB88B,
	53781 - 44032: 0xB88C,
	53782 - 44032: 0xB88D,
	53783 - 44032: 0xB88E,
	53784 - 44032: 0xB88F,
	53785 - 44032: 0xB890,
	53786 - 44032: 0xB891,
	53787 - 44032: 0xB892,
	53788 - 44032: 0xB893,
	53789 - 44032: 0xB894,
	53790 - 44032: 0xB895,
	53791 - 44032: 0xB896,
	53792 - 44032: 0xB897,
	53793 - 44032: 0xB898,
	53794 - 44032: 0xB899,
	53795 - 44032: 0xB89A,
	53796 - 44032: 0xB89B,
	53797 - 44032: 0xB89C,
	53798 - 44032: 0xB89D,
	53799 - 44032: 0xB89E,
	53800 - 44032: 0xB89F,
	53801 - 44032: 0xB8A0,
	53802 - 44032: 0xB941,
	53803 - 44032: 0xB942,
	53804 - 44032: 0xC5F5,
	53805 - 44032: 0xC5F6,
	53806 - 44032: 0xB943,
	53807 - 44032: 0xB944,
	53808 - 44032: 0xC5F7,
	53809 - 44032: 0xB945,
	53810 - 44032: 0xB946,
	53811 - 44032: 0xB947,
	53812 - 44032: 0xC5F8,
	53813 - 44032: 0xB948,
	53814 - 44032: 0xB949,
	53815 - 44032: 0xB94A,
	53816 - 44032: 0xB94B,
	53817 - 44032: 0xB94C,
	53818 - 44032: 0xB94D,
	53819 - 44032: 0xB94E,
	53820 - 44032: 0xC5F9,
	53821 - 44032: 0xC5FA,
	53822 - 44032: 0xB94F,
	53823 - 44032: 0xC5FB,
	53824 - 44032: 0xB950,
	53825 - 44032: 0xC5FC,
	53826 - 44032: 0xB951,
	53827 - 44032: 0xB952,
	53828 - 44032: 0xB953,
	53829 - 44032: 0xB954,
	53830 - 44032: 0xB955,
	53831 - 44032: 0xB956,
	53832 - 44032: 0xC5FD,
	53833 - 44032: 0xB957,
	53834 - 44032: 0xB958,
	53835 - 44032: 0xB959,
	53836 - 44032: 0xB95A,
	53837 - 44032: 0xB961,
	53838 - 44032: 0xB962,
	53839 - 44032: 0xB963,
	53840 - 44032: 0xB964,
	53841 - 44032: 0xB965,
	53842 - 44032: 0xB966,
	53843 - 44032: 0xB967,
	53844 - 44032: 0xB968,
	53845 - 44032: 0xB969,
	53846 - 44032: 0xB96A,
	53847 - 44032: 0xB96B,
	53848 - 44032: 0xB96C,
	53849 - 44032: 0xB96D,
	53850 - 44032: 0xB96E,
	53851 - 44032: 0xB96F,
	53852 - 44032: 0xC5FE,
	53853 - 44032: 0xB970,
	53854 - 44032: 0xB971,
	53855 - 44032: 0xB972,
	53856 - 44032: 0xB973,
	53857 - 44032: 0xB974,
	53858 - 44032: 0xB975,
	53859 - 44032: 0xB976,
	53860 - 44032: 0xC6A1,
	53861 - 44032: 0xB977,
	53862 - 44032: 0xB978,
	53863 - 44032: 0xB979,
	53864 - 44032: 0xB97A,
	53865 - 44032: 0xB981,
	53866 - 44032: 0xB982,
	53867 - 44032: 0xB983,
	53868 - 44032: 0xB984,
	53869 - 44032: 0xB985,
	53870 - 44032: 0xB986,
	53871 - 44032: 0xB987,
	53872 - 44032: 0xB988,
	53873 - 44032: 0xB989,
	53874 - 44032: 0xB98A,
	53875 - 44032: 0xB98B,
	53876 - 44032: 0xB98C,
	53877 - 44032: 0xB98D,
	53878 - 44032: 0xB98E,
	53879 - 44032: 0xB98F,
	53880 - 44032: 0xB990,
	53881 - 44032: 0xB991,
	53882 - 44032: 0xB992,
	53883 - 44032: 0xB993,
	53884 - 44032: 0xB994,
	53885 - 44032: 0xB995,
	53886 - 44032: 0xB996,
	53887 - 44032: 0xB997,
	53888 - 44032: 0xC6A2,
	53889 - 44032: 0xC6A3,
	53890 - 44032: 0xB998,
	53891 - 44032: 0xB999,
	53892 - 44032: 0xC6A4,
	53893 - 44032: 0xB99A,
	53894 - 44032: 0xB99B,
	53895 - 44032: 0xB99C,
	53896 - 44032: 0xC6A5,
	53897 - 44032: 0xB99D,
	53898 - 44032: 0xB99E,
	53899 - 44032: 0xB99F,
	53900 - 44032: 0xB9A0,
	53901 - 44032: 0xBA41,
	53902 - 44032: 0xBA42,
	53903 - 44032: 0xBA43,
	53904 - 44032: 0xC6A6,
	53905 - 44032: 0xC6A7,
	53906 - 44032: 0xBA44,
	53907 - 44032: 0xBA45,
	53908 - 44032: 0xBA46,
	53909 - 44032: 0xC6A8,
	53910 - 44032: 0xBA47,
	53911 - 44032: 0xBA48,
	53912 - 44032: 0xBA49,
	53913 - 44032: 0xBA4A,
	53914 - 44032: 0xBA4B,
	53915 - 44032: 0xBA4C,
	53916 - 44032: 0xC6A9,
	53917 - 44032: 0xBA4D,
	53918 - 44032: 0xBA4E,
	53919 - 44032: 0xBA4F,
	53920 - 44032: 0xC6AA,
	53921 - 44032: 0xBA50,
	53922 - 44032: 0xBA51,
	53923 - 44032: 0xBA52,
	53924 - 44032: 0xC6AB,
	53925 - 44032: 0xBA53,
	53926 - 44032: 0xBA54,
	53927 - 44032: 0xBA55,
	53928 - 44032: 0xBA56,
	53929 - 44032: 0xBA57,
	53930 - 44032: 0xBA58,
	53931 - 44032: 0xBA59,
	53932 - 44032: 0xC6AC,
	53933 - 44032: 0xBA5A,
	53934 - 44032: 0xBA61,
	53935 - 44032: 0xBA62,
	53936 - 44032: 0xBA63,
	53937 - 44032: 0xC6AD,
	53938 - 44032: 0xBA64,
	53939 - 44032: 0xBA65,
	53940 - 44032: 0xBA66,
	53941 - 44032: 0xBA67,
	53942 - 44032: 0xBA68,
	53943 - 44032: 0xBA69,
	53944 - 44032: 0xC6AE,
	53945 - 44032: 0xC6AF,
	53946 - 44032: 0xBA6A,
	53947 - 44032: 0xBA6B,
	53948 - 44032: 0xC6B0,
	53949 - 44032: 0xBA6C,
	53950 - 44032: 0xBA6D,
	53951 - 44032: 0xC6B1,
	53952 - 44032: 0xC6B2,
	53953 - 44032: 0xBA6E,
	53954 - 44032: 0xC6B3,
	53955 - 44032: 0xBA6F,
	53956 - 44032: 0xBA70,
	53957 - 44032: 0xBA71,
	53958 - 44032: 0xBA72,
	53959 - 44032: 0xBA73,
	53960 - 44032: 0xC6B4,
	53961 - 44032: 0xC6B5,
	53962 - 44032: 0xBA74,
	53963 - 44032: 0xC6B6,
	53964 - 44032: 0xBA75,
	53965 - 44032: 0xBA76,
	53966 - 44032: 0xBA77,
	53967 - 44032: 0xBA78,
	53968 - 44032: 0xBA79,
	53969 - 44032: 0xBA7A,
	53970 - 44032: 0xBA81,
	53971 - 44032: 0xBA82,
	53972 - 44032: 0xC6B7,
	53973 - 44032: 0xBA83,
	53974 - 44032: 0xBA84,
	53975 - 44032: 0xBA85,
	53976 - 44032: 0xC6B8,
	53977 - 44032: 0xBA86,
	53978 - 44032: 0xBA87,
	53979 - 44032: 0xBA88,
	53980 - 44032: 0xC6B9,
	53981 - 44032: 0xBA89,
	53982 - 44032: 0xBA8A,
	53983 - 44032: 0xBA8B,
	53984 - 44032: 0xBA8C,
	53985 - 44032: 0xBA8D,
	53986 - 44032: 0xBA8E,
	53987 - 44032: 0xBA8F,
	53988 - 44032: 0xC6BA,
	53989 - 44032: 0xC6BB,
	53990 - 44032: 0xBA90,
	53991 - 44032: 0xBA91,
	53992 - 44032: 0xBA92,
	53993 - 44032: 0xBA93,
	53994 - 44032: 0xBA94,
	53995 - 44032: 0xBA95,
	53996 - 44032: 0xBA96,
	53997 - 44032: 0xBA97,
	53998 - 44032: 0xBA98,
	53999 - 44032: 0xBA99,
	54000 - 44032: 0xC6BC,
	54001 - 44032: 0xC6BD,
	54002 - 44032: 0xBA9A,
	54003 - 44032: 0xBA9B,
	54004 - 44032: 0xC6BE,
	54005 - 44032: 0xBA9C,
	54006 - 44032: 0xBA9D,
	54007 - 44032: 0xBA9E,
	54008 - 44032: 0xC6BF,
	54009 - 44032: 0xBA9F,
	54010 - 44032: 0xBAA0,
	54011 - 44032: 0xBB41,
	54012 - 44032: 0xBB42,
	54013 - 44032: 0xBB43,
	54014 - 44032: 0xBB44,
	54015 - 44032: 0xBB45,
	54016 - 44032: 0xC6C0,
	54017 - 44032: 0xC6C1,
	54018 - 44032: 0xBB46,
	54019 - 44032: 0xC6C2,
	54020 - 44032: 0xBB47,
	54021 - 44032: 0xC6C3,
	54022 - 44032: 0xBB48,
	54023 - 44032: 0xBB49,
	54024 - 44032: 0xBB4A,
	54025 - 44032: 0xBB4B,
	54026 - 44032: 0xBB4C,
	54027 - 44032: 0xBB4D,
	54028 - 44032: 0xC6C4,
	54029 - 44032: 0xC6C5,
	54030 - 44032: 0xC6C6,
	54031 - 44032: 0xBB4E,
	54032 - 44032: 0xC6C7,
	54033 - 44032: 0xBB4F,
	54034 - 44032: 0xBB50,
	54035 - 44032: 0xBB51,
	54036 - 44032: 0xC6C8,
	54037 - 44032: 0xBB52,
	54038 - 44032: 0xC6C9,
	54039 - 44032: 0xBB53,
	54040 - 44032: 0xBB54,
	54041 - 44032: 0xBB55,
	54042 - 44032: 0xBB56,
	54043 - 44032: 0xBB57,
	54044 - 44032: 0xC6CA,
	54045 - 44032: 0xC6CB,
	54046 - 44032: 0xBB58,
	54047 - 44032: 0xC6CC,
	54048 - 44032: 0xC6CD,
	54049 - 44032: 0xC6CE,
	54050 - 44032: 0xBB59,
	54051 - 44032: 0xBB5A,
	54052 - 44032: 0xBB61,
	54053 - 44032: 0xC6CF,
	54054 - 44032: 0xBB62,
	54055 - 44032: 0xBB63,
	54056 - 44032: 0xC6D0,
	54057 - 44032: 0xC6D1,
	54058 - 44032: 0xBB64,
	54059 - 44032: 0xBB65,
	54060 - 44032: 0xC6D2,
	54061 - 44032: 0xBB66,
	54062 - 44032: 0xBB67,
	54063 - 44032: 0xBB68,
	54064 - 44032: 0xC6D3,
	54065 - 44032: 0xBB69,
	54066 - 44032: 0xBB6A,
	54067 - 44032: 0xBB6B,
	54068 - 44032: 0xBB6C,
	54069 - 44032: 0xBB6D,
	54070 - 44032: 0xBB6E,
	54071 - 44032: 0xBB6F,
	54072 - 44032: 0xC6D4,
	54073 - 44032: 0xC6D5,
	54074 - 44032: 0xBB70,
	54075 - 44032: 0xC6D6,
	54076 - 44032: 0xC6D7,
	54077 - 44032: 0xC6D8,
	54078 - 44032: 0xBB71,
	54079 - 44032: 0xBB72,
	54080 - 44032: 0xBB73,
	54081 - 44032: 0xBB74,
	54082 - 44032: 0xBB75,
	54083 - 44032: 0xBB76,
	54084 - 44032: 0xC6D9,
	54085 - 44032: 0xC6DA,
	54086 - 44032: 0xBB77,
	54087 - 44032: 0xBB78,
	54088 - 44032: 0xBB79,
	54089 - 44032: 0xBB7A,
	54090 - 44032: 0xBB81,
	54091 - 44032: 0xBB82,
	54092 - 44032: 0xBB83,
	54093 - 44032: 0xBB84,
	54094 - 44032: 0xBB85,
	54095 - 44032: 0xBB86,
	54096 - 44032: 0xBB87,
	54097 - 44032: 0xBB88,
	54098 - 44032: 0xBB89,
	54099 - 44032: 0xBB8A,
	54100 - 44032: 0xBB8B,
	54101 - 44032: 0xBB8C,
	54102 - 44032: 0xBB8D,
	54103 - 44032: 0xBB8E,
	54104 - 44032: 0xBB8F,
	54105 - 44032: 0xBB90,
	54106 - 44032: 0xBB91,
	54107 - 44032: 0xBB92,
	54108 - 44032: 0xBB93,
	54109 - 44032: 0xBB94,
	54110 - 44032: 0xBB95,
	54111 - 44032: 0xBB96,
	54112 - 44032: 0xBB97,
	54113 - 44032: 0xBB98,
	54114 - 44032: 0xBB99,
	54115 - 44032: 0xBB9A,
	54116 - 44032: 0xBB9B,
	54117 - 44032: 0xBB9C,
	54118 - 44032: 0xBB9D,
	54119 - 44032: 0xBB9E,
	54120 - 44032: 0xBB9F,
	54121 - 44032: 0xBBA0,
	54122 - 44032: 0xBC41,
	54123 - 44032: 0xBC42,
	54124 - 44032: 0xBC43,
	54125 - 44032: 0xBC44,
	54126 - 44032: 0xBC45,
	54127 - 44032: 0xBC46,
	54128 - 44032: 0xBC47,
	54129 - 44032: 0xBC48,
	54130 - 44032: 0xBC49,
	54131 - 44032: 0xBC4A,
	54132 - 44032: 0xBC4B,
	54133 - 44032: 0xBC4C,
	54134 - 44032: 0xBC4D,
	54135 - 44032: 0xBC4E,
	54136 - 44032: 0xBC4F,
	54137 - 44032: 0xBC50,
	54138 - 44032: 0xBC51,
	54139 - 44032: 0xBC52,
	54140 - 44032: 0xC6DB,
	54141 - 44032: 0xC6DC,
	54142 - 44032: 0xBC53,
	54143 - 44032: 0xBC54,
	54144 - 44032: 0xC6DD,
	54145 - 44032: 0xBC55,
	54146 - 44032: 0xBC56,
	54147 - 44032: 0xBC57,
	54148 - 44032: 0xC6DE,
	54149 - 44032: 0xBC58,
	54150 - 44032: 0xBC59,
	54151 - 44032: 0xBC5A,
	54152 - 44032: 0xBC61,
	54153 - 44032: 0xBC62,
	54154 - 44032: 0xBC63,
	54155 - 44032: 0xBC64,
	54156 - 44032: 0xC6DF,
	54157 - 44032: 0xC6E0,
	54158 - 44032: 0xBC65,
	54159 - 44032: 0xC6E1,
	54160 - 44032: 0xC6E2,
	54161 - 44032: 0xC6E3,
	54162 - 44032: 0xBC66,
	54163 - 44032: 0xBC67,
	54164 - 44032: 0xBC68,
	54165 - 44032: 0xBC69,
	54166 - 44032: 0xBC6A,
	54167 - 44032: 0xBC6B,
	54168 - 44032: 0xC6E4,
	54169 - 44032: 0xC6E5,
	54170 - 44032: 0xBC6C,
	54171 - 44032: 0xBC6D,
	54172 - 44032: 0xC6E6,
	54173 - 44032: 0xBC6E,
	54174 - 44032: 0xBC6F,
	54175 - 44032: 0xBC70,
	54176 - 44032: 0xC6E7,
	54177 - 44032: 0xBC71,
	54178 - 44032: 0xBC72,
	54179 - 44032: 0xBC73,
	54180 - 44032: 0xBC74,
	54181 - 44032: 0xBC75,
	54182 - 44032: 0xBC76,
	54183 - 44032: 0xBC77,
	54184 - 44032: 0xC6E8,
	54185 - 44032: 0xC6E9,
	54186 - 44032: 0xBC78,
	54187 - 44032: 0xC6EA,
	54188 - 44032: 0xBC79,
	54189 - 44032: 0xC6EB,
	54190 - 44032: 0xBC7A,
	54191 - 44032: 0xBC81,
	54192 - 44032: 0xBC82,
	54193 - 44032: 0xBC83,
	54194 - 44032: 0xBC84,
	54195 - 44032: 0xBC85,
	54196 - 44032: 0xC6EC,
	54197 - 44032: 0xBC86,
	54198 - 44032: 0xBC87,
	54199 - 44032: 0xBC88,
	54200 - 44032: 0xC6ED,
	54201 - 44032: 0xBC89,
	54202 - 44032: 0xBC8A,
	54203 - 44032: 0xBC8B,
	54204 - 44032: 0xC6EE,
	54205 - 44032: 0xBC8C,
	54206 - 44032: 0xBC8D,
	54207 - 44032: 0xBC8E,
	54208 - 44032: 0xBC8F,
	54209 - 44032: 0xBC90,
	54210 - 44032: 0xBC91,
	54211 - 44032: 0xBC92,
	54212 - 44032: 0xC6EF,
	54213 - 44032: 0xC6F0,
	54214 - 44032: 0xBC93,
	54215 - 44032: 0xBC94,
	54216 - 44032: 0xC6F1,
	54217 - 44032: 0xC6F2,
	54218 - 44032: 0xBC95,
	54219 - 44032: 0xBC96,
	54220 - 44032: 0xBC97,
	54221 - 44032: 0xBC98,
	54222 - 44032: 0xBC99,
	54223 - 44032: 0xBC9A,
	54224 - 44032: 0xC6F3,
	54225 - 44032: 0xBC9B,
	54226 - 44032: 0xBC9C,
	54227 - 44032: 0xBC9D,
	54228 - 44032: 0xBC9E,
	54229 - 44032: 0xBC9F,
	54230 - 44032: 0xBCA0,
	54231 - 44032: 0xBD41,
	54232 - 44032: 0xC6F4,
	54233 - 44032: 0xBD42,
	54234 - 44032: 0xBD43,
	54235 - 44032: 0xBD44,
	54236 - 44032: 0xBD45,
	54237 - 44032: 0xBD46,
	54238 - 44032: 0xBD47,
	54239 - 44032: 0xBD48,
	54240 - 44032: 0xBD49,
	54241 - 44032: 0xC6F5,
	54242 - 44032: 0xBD4A,
	54243 - 44032: 0xC6F6,
	54244 - 44032: 0xBD4B,
	54245 - 44032: 0xBD4C,
	54246 - 44032: 0xBD4D,
	54247 - 44032: 0xBD4E,
	54248 - 44032: 0xBD4F,
	54249 - 44032: 0xBD50,
	54250 - 44032: 0xBD51,
	54251 - 44032: 0xBD52,
	54252 - 44032: 0xC6F7,
	54253 - 44032: 0xC6F8,
	54254 - 44032: 0xBD53,
	54255 - 44032: 0xBD54,
	54256 - 44032: 0xC6F9,
	54257 - 44032: 0xBD55,
	54258 - 44032: 0xBD56,
	54259 - 44032: 0xBD57,
	54260 - 44032: 0xC6FA,
	54261 - 44032: 0xBD58,
	54262 - 44032: 0xBD59,
	54263 - 44032: 0xBD5A,
	54264 - 44032: 0xBD61,
	54265 - 44032: 0xBD62,
	54266 - 44032: 0xBD63,
	54267 - 44032: 0xBD64,
	54268 - 44032: 0xC6FB,
	54269 - 44032: 0xC6FC,
	54270 - 44032: 0xBD65,
	54271 - 44032: 0xC6FD,
	54272 - 44032: 0xBD66,
	54273 - 44032: 0xC6FE,
	54274 - 44032: 0xBD67,
	54275 - 44032: 0xBD68,
	54276 - 44032: 0xBD69,
	54277 - 44032: 0xBD6A,
	54278 - 44032: 0xBD6B,
	54279 - 44032: 0xBD6C,
	54280 - 44032: 0xC7A1,
	54281 - 44032: 0xBD6D,
	54282 - 44032: 0xBD6E,
	54283 - 44032: 0xBD6F,
	54284 - 44032: 0xBD70,
	54285 - 44032: 0xBD71,
	54286 - 44032: 0xBD72,
	54287 - 44032: 0xBD73,
	54288 - 44032: 0xBD74,
	54289 - 44032: 0xBD75,
	54290 - 44032: 0xBD76,
	54291 - 44032: 0xBD77,
	54292 - 44032: 0xBD78,
	54293 - 44032: 0xBD79,
	54294 - 44032: 0xBD7A,
	54295 - 44032: 0xBD81,
	54296 - 44032: 0xBD82,
	54297 - 44032: 0xBD83,
	54298 - 44032: 0xBD84,
	54299 - 44032: 0xBD85,
	54300 - 44032: 0xBD86,
	54301 - 44032: 0xC7A2,
	54302 - 44032: 0xBD87,
	54303 - 44032: 0xBD88,
	54304 - 44032: 0xBD89,
	54305 - 44032: 0xBD8A,
	54306 - 44032: 0xBD8B,
	54307 - 44032: 0xBD8C,
	54308 - 44032: 0xBD8D,
	54309 - 44032: 0xBD8E,
	54310 - 44032: 0xBD8F,
	54311 - 44032: 0xBD90,
	54312 - 44032: 0xBD91,
	54313 - 44032: 0xBD92,
	54314 - 44032: 0xBD93,
	54315 - 44032: 0xBD94,
	54316 - 44032: 0xBD95,
	54317 - 44032: 0xBD96,
	54318 - 44032: 0xBD97,
	54319 - 44032: 0xBD98,
	54320 - 44032: 0xBD99,
	54321 - 44032: 0xBD9A,
	54322 - 44032: 0xBD9B,
	54323 - 44032: 0xBD9C,
	54324 - 44032: 0xBD9D,
	54325 - 44032: 0xBD9E,
	54326 - 44032: 0xBD9F,
	54327 - 44032: 0xBDA0,
	54328 - 44032: 0xBE41,
	54329 - 44032: 0xBE42,
	54330 - 44032: 0xBE43,
	54331 - 44032: 0xBE44,
	54332 - 44032: 0xBE45,
	54333 - 44032: 0xBE46,
	54334 - 44032: 0xBE47,
	54335 - 44032: 0xBE48,
	54336 - 44032: 0xC7A3,
	54337 - 44032: 0xBE49,
	54338 - 44032: 0xBE4A,
	54339 - 44032: 0xBE4B,
	54340 - 44032: 0xC7A4,
	54341 - 44032: 0xBE4C,
	54342 - 44032: 0xBE4D,
	54343 - 44032: 0xBE4E,
	54344 - 44032: 0xBE4F,
	54345 - 44032: 0xBE50,
	54346 - 44032: 0xBE51,
	54347 - 44032: 0xBE52,
	54348 - 44032: 0xBE53,
	54349 - 44032: 0xBE54,
	54350 - 44032: 0xBE55,
	54351 - 44032: 0xBE56,
	54352 - 44032: 0xBE57,
	54353 - 44032: 0xBE58,
	54354 - 44032: 0xBE59,
	54355 - 44032: 0xBE5A,
	54356 - 44032: 0xBE61,
	54357 - 44032: 0xBE62,
	54358 - 44032: 0xBE63,
	54359 - 44032: 0xBE64,
	54360 - 44032: 0xBE65,
	54361 - 44032: 0xBE66,
	54362 - 44032: 0xBE67,
	54363 - 44032: 0xBE68,
	54364 - 44032: 0xC7A5,
	54365 - 44032: 0xBE69,
	54366 - 44032: 0xBE6A,
	54367 - 44032: 0xBE6B,
	54368 - 44032: 0xC7A6,
	54369 - 44032: 0xBE6C,
	54370 - 44032: 0xBE6D,
	54371 - 44032: 0xBE6E,
	54372 - 44032: 0xC7A7,
	54373 - 44032: 0xBE6F,
	54374 - 44032: 0xBE70,
	54375 - 44032: 0xBE71,
	54376 - 44032: 0xBE72,
	54377 - 44032: 0xBE73,
	54378 - 44032: 0xBE74,
	54379 - 44032: 0xBE75,
	54380 - 44032: 0xBE76,
	54381 - 44032: 0xC7A8,
	54382 - 44032: 0xBE77,
	54383 - 44032: 0xC7A9,
	54384 - 44032: 0xBE78,
	54385 - 44032: 0xBE79,
	54386 - 44032: 0xBE7A,
	54387 - 44032: 0xBE81,
	54388 - 44032: 0xBE82,
	54389 - 44032: 0xBE83,
	54390 - 44032: 0xBE84,
	54391 - 44032: 0xBE85,
	54392 - 44032: 0xC7AA,
	54393 - 44032: 0xC7AB,
	54394 - 44032: 0xBE86,
	54395 - 44032: 0xBE87,
	54396 - 44032: 0xC7AC,
	54397 - 44032: 0xBE88,
	54398 - 44032: 0xBE89,
	54399 - 44032: 0xC7AD,
	54400 - 44032: 0xC7AE,
	54401 - 44032: 0xBE8A,
	54402 - 44032: 0xC7AF,
	54403 - 44032: 0xBE8B,
	54404 - 44032: 0xBE8C,
	54405 - 44032: 0xBE8D,
	54406 - 44032: 0xBE8E,
	54407 - 44032: 0xBE8F,
	54408 - 44032: 0xC7B0,
	54409 - 44032: 0xC7B1,
	54410 - 44032: 0xBE90,
	54411 - 44032: 0xC7B2,
	54412 - 44032: 0xBE91,
	54413 - 44032: 0xC7B3,
	54414 - 44032: 0xBE92,
	54415 - 44032: 0xBE93,
	54416 - 44032: 0xBE94,
	54417 - 44032: 0xBE95,
	54418 - 44032: 0xBE96,
	54419 - 44032: 0xBE97,
	54420 - 44032: 0xC7B4,
	54421 - 44032: 0xBE98,
	54422 - 44032: 0xBE99,
	54423 - 44032: 0xBE9A,
	54424 - 44032: 0xBE9B,
	54425 - 44032: 0xBE9C,
	54426 - 44032: 0xBE9D,
	54427 - 44032: 0xBE9E,
	54428 - 44032: 0xBE9F,
	54429 - 44032: 0xBEA0,
	54430 - 44032: 0xBF41,
	54431 - 44032: 0xBF42,
	54432 - 44032: 0xBF43,
	54433 - 44032: 0xBF44,
	54434 - 44032: 0xBF45,
	54435 - 44032: 0xBF46,
	54436 - 44032: 0xBF47,
	54437 - 44032: 0xBF48,
	54438 - 44032: 0xBF49,
	54439 - 44032: 0xBF4A,
	54440 - 44032: 0xBF4B,
	54441 - 44032: 0xC7B5,
	54442 - 44032: 0xBF4C,
	54443 - 44032: 0xBF4D,
	54444 - 44032: 0xBF4E,
	54445 - 44032: 0xBF4F,
	54446 - 44032: 0xBF50,
	54447 - 44032: 0xBF51,
	54448 - 44032: 0xBF52,
	54449 - 44032: 0xBF53,
	54450 - 44032: 0xBF54,
	54451 - 44032: 0xBF55,
	54452 - 44032: 0xBF56,
	54453 - 44032: 0xBF57,
	54454 - 44032: 0xBF58,
	54455 - 44032: 0xBF59,
	54456 - 44032: 0xBF5A,
	54457 - 44032: 0xBF61,
	54458 - 44032: 0xBF62,
	54459 - 44032: 0xBF63,
	54460 - 44032: 0xBF64,
	54461 - 44032: 0xBF65,
	54462 - 44032: 0xBF66,
	54463 - 44032: 0xBF67,
	54464 - 44032: 0xBF68,
	54465 - 44032: 0xBF69,
	54466 - 44032: 0xBF6A,
	54467 - 44032: 0xBF6B,
	54468 - 44032: 0xBF6C,
	54469 - 44032: 0xBF6D,
	54470 - 44032: 0xBF6E,
	54471 - 44032: 0xBF6F,
	54472 - 44032: 0xBF70,
	54473 - 44032: 0xBF71,
	54474 - 44032: 0xBF72,
	54475 - 44032: 0xBF73,
	54476 - 44032: 0xC7B6,
	54477 - 44032: 0xBF74,
	54478 - 44032: 0xBF75,
	54479 - 44032: 0xBF76,
	54480 - 44032: 0xC7B7,
	54481 - 44032: 0xBF77,
	54482 - 44032: 0xBF78,
	54483 - 44032: 0xBF79,
	54484 - 44032: 0xC7B8,
	54485 - 44032: 0xBF7A,
	54486 - 44032: 0xBF81,
	54487 - 44032: 0xBF82,
	54488 - 44032: 0xBF83,
	54489 - 44032: 0xBF84,
	54490 - 44032: 0xBF85,
	54491 - 44032: 0xBF86,
	54492 - 44032: 0xC7B9,
	54493 - 44032: 0xBF87,
	54494 - 44032: 0xBF88,
	54495 - 44032: 0xC7BA,
	54496 - 44032: 0xBF89,
	54497 - 44032: 0xBF8A,
	54498 - 44032: 0xBF8B,
	54499 - 44032: 0xBF8C,
	54500 - 44032: 0xBF8D,
	54501 - 44032: 0xBF8E,
	54502 - 44032: 0xBF8F,
	54503 - 44032: 0xBF90,
	54504 - 44032: 0xC7BB,
	54505 - 44032: 0xBF91,
	54506 - 44032: 0xBF92,
	54507 - 44032: 0xBF93,
	54508 - 44032: 0xC7BC,
	54509 - 44032: 0xBF94,
	54510 - 44032: 0xBF95,
	54511 - 44032: 0xBF96,
	54512 - 44032: 0xC7BD,
	54513 - 44032: 0xBF97,
	54514 - 44032: 0xBF98,
	54515 - 44032: 0xBF99,
	54516 - 44032: 0xBF9A,
	54517 - 44032: 0xBF9B,
	54518 - 44032: 0xBF9C,
	54519 - 44032: 0xBF9D,
	54520 - 44032: 0xC7BE,
	54521 - 44032: 0xBF9E,
	54522 - 44032: 0xBF9F,
	54523 - 44032: 0xC7BF,
	54524 - 44032: 0xBFA0,
	54525 - 44032: 0xC7C0,
	54526 - 44032: 0xC041,
	54527 - 44032: 0xC042,
	54528 - 44032: 0xC043,
	54529 - 44032: 0xC044,
	54530 - 44032: 0xC045,
	54531 - 44032: 0xC046,
	54532 - 44032: 0xC7C1,
	54533 - 44032: 0xC047,
	54534 - 44032: 0xC048,
	54535 - 44032: 0xC049,
	54536 - 44032: 0xC7C2,
	54537 - 44032: 0xC04A,
	54538 - 44032: 0xC04B,
	54539 - 44032: 0xC04C,
	54540 - 44032: 0xC7C3,
	54541 - 44032: 0xC04D,
	54542 - 44032: 0xC04E,
	54543 - 44032: 0xC04F,
	54544 - 44032: 0xC050,
	54545 - 44032: 0xC051,
	54546 - 44032: 0xC052,
	54547 - 44032: 0xC053,
	54548 - 44032: 0xC7C4,
	54549 - 44032: 0xC7C5,
	54550 - 44032: 0xC054,
	54551 - 44032: 0xC7C6,
	54552 - 44032: 0xC055,
	54553 - 44032: 0xC056,
	54554 - 44032: 0xC057,
	54555 - 44032: 0xC058,
	54556 - 44032: 0xC059,
	54557 - 44032: 0xC05A,
	54558 - 44032: 0xC061,
	54559 - 44032: 0xC062,
	54560 - 44032: 0xC063,
	54561 - 44032: 0xC064,
	54562 - 44032: 0xC065,
	54563 - 44032: 0xC066,
	54564 - 44032: 0xC067,
	54565 - 44032: 0xC068,
	54566 - 44032: 0xC069,
	54567 - 44032: 0xC06A,
	54568 - 44032: 0xC06B,
	54569 - 44032: 0xC06C,
	54570 - 44032: 0xC06D,
	54571 - 44032: 0xC06E,
	54572 - 44032: 0xC06F,
	54573 - 44032: 0xC070,
	54574 - 44032: 0xC071,
	54575 - 44032: 0xC072,
	54576 - 44032: 0xC073,
	54577 - 44032: 0xC074,
	54578 - 44032: 0xC075,
	54579 - 44032: 0xC076,
	54580 - 44032: 0xC077,
	54581 - 44032: 0xC078,
	54582 - 44032: 0xC079,
	54583 - 44032: 0xC07A,
	54584 - 44032: 0xC081,
	54585 - 44032: 0xC082,
	54586 - 44032: 0xC083,
	54587 - 44032: 0xC084,
	54588 - 44032: 0xC7C7,
	54589 - 44032: 0xC7C8,
	54590 - 44032: 0xC085,
	54591 - 44032: 0xC086,
	54592 - 44032: 0xC7C9,
	54593 - 44032: 0xC087,
	54594 - 44032: 0xC088,
	54595 - 44032: 0xC089,
	54596 - 44032: 0xC7CA,
	54597 - 44032: 0xC08A,
	54598 - 44032: 0xC08B,
	54599 - 44032: 0xC08C,
	54600 - 44032: 0xC08D,
	54601 - 44032: 0xC08E,
	54602 - 44032: 0xC08F,
	54603 - 44032: 0xC090,
	54604 - 44032: 0xC7CB,
	54605 - 44032: 0xC7CC,
	54606 - 44032: 0xC091,
	54607 - 44032: 0xC7CD,
	54608 - 44032: 0xC092,
	54609 - 44032: 0xC7CE,
	54610 - 44032: 0xC093,
	54611 - 44032: 0xC094,
	54612 - 44032: 0xC095,
	54613 - 44032: 0xC096,
	54614 - 44032: 0xC097,
	54615 - 44032: 0xC098,
	54616 - 44032: 0xC7CF,
	54617 - 44032: 0xC7D0,
	54618 - 44032: 0xC099,
	54619 - 44032: 0xC09A,
	54620 - 44032: 0xC7D1,
	54621 - 44032: 0xC09B,
	54622 - 44032: 0xC09C,
	54623 - 44032: 0xC09D,
	54624 - 44032: 0xC7D2,
	54625 - 44032: 0xC09E,
	54626 - 44032: 0xC09F,
	54627 - 44032: 0xC0A0,
	54628 - 44032: 0xC141,
	54629 - 44032: 0xC7D3,
	54630 - 44032: 0xC142,
	54631 - 44032: 0xC143,
	54632 - 44032: 0xC7D4,
	54633 - 44032: 0xC7D5,
	54634 - 44032: 0xC144,
	54635 - 44032: 0xC7D6,
	54636 - 44032: 0xC145,
	54637 - 44032: 0xC7D7,
	54638 - 44032: 0xC146,
	54639 - 44032: 0xC147,
	54640 - 44032: 0xC148,
	54641 - 44032: 0xC149,
	54642 - 44032: 0xC14A,
	54643 - 44032: 0xC14B,
	54644 - 44032: 0xC7D8,
	54645 - 44032: 0xC7D9,
	54646 - 44032: 0xC14C,
	54647 - 44032: 0xC14D,
	54648 - 44032: 0xC7DA,
	54649 - 44032: 0xC14E,
	54650 - 44032: 0xC14F,
	54651 - 44032: 0xC150,
	54652 - 44032: 0xC7DB,
	54653 - 44032: 0xC151,
	54654 - 44032: 0xC152,
	54655 - 44032: 0xC153,
	54656 - 44032: 0xC154,
	54657 - 44032: 0xC155,
	54658 - 44032: 0xC156,
	54659 - 44032: 0xC157,
	54660 - 44032: 0xC7DC,
	54661 - 44032: 0xC7DD,
	54662 - 44032: 0xC158,
	54663 - 44032: 0xC7DE,
	54664 - 44032: 0xC7DF,
	54665 - 44032: 0xC7E0,
	54666 - 44032: 0xC159,
	54667 - 44032: 0xC15A,
	54668 - 44032: 0xC161,
	54669 - 44032: 0xC162,
	54670 - 44032: 0xC163,
	54671 - 44032: 0xC164,
	54672 - 44032: 0xC7E1,
	54673 - 44032: 0xC165,
	54674 - 44032: 0xC166,
	54675 - 44032: 0xC167,
	54676 - 44032: 0xC168,
	54677 - 44032: 0xC169,
	54678 - 44032: 0xC16A,
	54679 - 44032: 0xC16B,
	54680 - 44032: 0xC16C,
	54681 - 44032: 0xC16D,
	54682 - 44032: 0xC16E,
	54683 - 44032: 0xC16F,
	54684 - 44032: 0xC170,
	54685 - 44032: 0xC171,
	54686 - 44032: 0xC172,
	54687 - 44032: 0xC173,
	54688 - 44032: 0xC174,
	54689 - 44032: 0xC175,
	54690 - 44032: 0xC176,
	54691 - 44032: 0xC177,
	54692 - 44032: 0xC178,
	54693 - 44032: 0xC7E2,
	54694 - 44032: 0xC179,
	54695 - 44032: 0xC17A,
	54696 - 44032: 0xC181,
	54697 - 44032: 0xC182,
	54698 - 44032: 0xC183,
	54699 - 44032: 0xC184,
	54700 - 44032: 0xC185,
	54701 - 44032: 0xC186,
	54702 - 44032: 0xC187,
	54703 - 44032: 0xC188,
	54704 - 44032: 0xC189,
	54705 - 44032: 0xC18A,
	54706 - 44032: 0xC18B,
	54707 - 44032: 0xC18C,
	54708 - 44032: 0xC18D,
	54709 - 44032: 0xC18E,
	54710 - 44032: 0xC18F,
	54711 - 44032: 0xC190,
	54712 - 44032: 0xC191,
	54713 - 44032: 0xC192,
	54714 - 44032: 0xC193,
	54715 - 44032: 0xC194,
	54716 - 44032: 0xC195,
	54717 - 44032: 0xC196,
	54718 - 44032: 0xC197,
	54719 - 44032: 0xC198,
	54720 - 44032: 0xC199,
	54721 - 44032: 0xC19A,
	54722 - 44032: 0xC19B,
	54723 - 44032: 0xC19C,
	54724 - 44032: 0xC19D,
	54725 - 44032: 0xC19E,
	54726 - 44032: 0xC19F,
	54727 - 44032: 0xC1A0,
	54728 - 44032: 0xC7E3,
	54729 - 44032: 0xC7E4,
	54730 - 44032: 0xC241,
	54731 - 44032: 0xC242,
	54732 - 44032: 0xC7E5,
	54733 - 44032: 0xC243,
	54734 - 44032: 0xC244,
	54735 - 44032: 0xC245,
	54736 - 44032: 0xC7E6,
	54737 - 44032: 0xC246,
	54738 - 44032: 0xC7E7,
	54739 - 44032: 0xC247,
	54740 - 44032: 0xC248,
	54741 - 44032: 0xC249,
	54742 - 44032: 0xC24A,
	54743 - 44032: 0xC24B,
	54744 - 44032: 0xC7E8,
	54745 - 44032: 0xC7E9,
	54746 - 44032: 0xC24C,
	54747 - 44032: 0xC7EA,
	54748 - 44032: 0xC24D,
	54749 - 44032: 0xC7EB,
	54750 - 44032: 0xC24E,
	54751 - 44032: 0xC24F,
	54752 - 44032: 0xC250,
	54753 - 44032: 0xC251,
	54754 - 44032: 0xC252,
	54755 - 44032: 0xC253,
	54756 - 44032: 0xC7EC,
	54757 - 44032: 0xC7ED,
	54758 - 44032: 0xC254,
	54759 - 44032: 0xC255,
	54760 - 44032: 0xC7EE,
	54761 - 44032: 0xC256,
	54762 - 44032: 0xC257,
	54763 - 44032: 0xC258,
	54764 - 44032: 0xC7EF,
	54765 - 44032: 0xC259,
	54766 - 44032: 0xC25A,
	54767 - 44032: 0xC261,
	54768 - 44032: 0xC262,
	54769 - 44032: 0xC263,
	54770 - 44032: 0xC264,
	54771 - 44032: 0xC265,
	54772 - 44032: 0xC7F0,
	54773 - 44032: 0xC7F1,
	54774 - 44032: 0xC266,
	54775 - 44032: 0xC7F2,
	54776 - 44032: 0xC267,
	54777 - 44032: 0xC7F3,
	54778 - 44032: 0xC268,
	54779 - 44032: 0xC269,
	54780 - 44032: 0xC26A,
	54781 - 44032: 0xC26B,
	54782 - 44032: 0xC26C,
	54783 - 44032: 0xC26D,
	54784 - 44032: 0xC7F4,
	54785 - 44032: 0xC7F5,
	54786 - 44032: 0xC26E,
	54787 - 44032: 0xC26F,
	54788 - 44032: 0xC7F6,
	54789 - 44032: 0xC270,
	54790 - 44032: 0xC271,
	54791 - 44032: 0xC272,
	54792 - 44032: 0xC7F7,
	54793 - 44032: 0xC273,
	54794 - 44032: 0xC274,
	54795 - 44032: 0xC275,
	54796 - 44032: 0xC276,
	54797 - 44032: 0xC277,
	54798 - 44032: 0xC278,
	54799 - 44032: 0xC279,
	54800 - 44032: 0xC7F8,
	54801 - 44032: 0xC7F9,
	54802 - 44032: 0xC27A,
	54803 - 44032: 0xC7FA,
	54804 - 44032: 0xC7FB,
	54805 - 44032: 0xC7FC,
	54806 - 44032: 0xC281,
	54807 - 44032: 0xC282,
	54808 - 44032: 0xC283,
	54809 - 44032: 0xC284,
	54810 - 44032: 0xC285,
	54811 - 44032: 0xC286,
	54812 - 44032: 0xC7FD,
	54813 - 44032: 0xC287,
	54814 - 44032: 0xC288,
	54815 - 44032: 0xC289,
	54816 - 44032: 0xC7FE,
	54817 - 44032: 0xC28A,
	54818 - 44032: 0xC28B,
	54819 - 44032: 0xC28C,
	54820 - 44032: 0xC8A1,
	54821 - 44032: 0xC28D,
	54822 - 44032: 0xC28E,
	54823 - 44032: 0xC28F,
	54824 - 44032: 0xC290,
	54825 - 44032: 0xC291,
	54826 - 44032: 0xC292,
	54827 - 44032: 0xC293,
	54828 - 44032: 0xC294,
	54829 - 44032: 0xC8A2,
	54830 - 44032: 0xC295,
	54831 - 44032: 0xC296,
	54832 - 44032: 0xC297,
	54833 - 44032: 0xC298,
	54834 - 44032: 0xC299,
	54835 - 44032: 0xC29A,
	54836 - 44032: 0xC29B,
	54837 - 44032: 0xC29C,
	54838 - 44032: 0xC29D,
	54839 - 44032: 0xC29E,
	54840 - 44032: 0xC8A3,
	54841 - 44032: 0xC8A4,
	54842 - 44032: 0xC29F,
	54843 - 44032: 0xC2A0,
	54844 - 44032: 0xC8A5,
	54845 - 44032: 0xC341,
	54846 - 44032: 0xC342,
	54847 - 44032: 0xC343,
	54848 - 44032: 0xC8A6,
	54849 - 44032: 0xC344,
	54850 - 44032: 0xC345,
	54851 - 44032: 0xC346,
	54852 - 44032: 0xC347,
	54853 - 44032: 0xC8A7,
	54854 - 44032: 0xC348,
	54855 - 44032: 0xC349,
	54856 - 44032: 0xC8A8,
	54857 - 44032: 0xC8A9,
	54858 - 44032: 0xC34A,
	54859 - 44032: 0xC8AA,
	54860 - 44032: 0xC34B,
	54861 - 44032: 0xC8AB,
	54862 - 44032: 0xC34C,
	54863 - 44032: 0xC34D,
	54864 - 44032: 0xC34E,
	54865 - 44032: 0xC8AC,
	54866 - 44032: 0xC34F,
	54867 - 44032: 0xC350,
	54868 - 44032: 0xC8AD,
	54869 - 44032: 0xC8AE,
	54870 - 44032: 0xC351,
	54871 - 44032: 0xC352,
	54872 - 44032: 0xC8AF,
	54873 - 44032: 0xC353,
	54874 - 44032: 0xC354,
	54875 - 44032: 0xC355,
	54876 - 44032: 0xC8B0,
	54877 - 44032: 0xC356,
	54878 - 44032: 0xC357,
	54879 - 44032: 0xC358,
	54880 - 44032: 0xC359,
	54881 - 44032: 0xC35A,
	54882 - 44032: 0xC361,
	54883 - 44032: 0xC362,
	54884 - 44032: 0xC363,
	54885 - 44032: 0xC364,
	54886 - 44032: 0xC365,
	54887 - 44032: 0xC8B1,
	54888 - 44032: 0xC366,
	54889 - 44032: 0xC8B2,
	54890 - 44032: 0xC367,
	54891 - 44032: 0xC368,
	54892 - 44032: 0xC369,
	54893 - 44032: 0xC36A,
	54894 - 44032: 0xC36B,
	54895 - 44032: 0xC36C,
	54896 - 44032: 0xC8B3,
	54897 - 44032: 0xC8B4,
	54898 - 44032: 0xC36D,
	54899 - 44032: 0xC36E,
	54900 - 44032: 0xC8B5,
	54901 - 44032: 0xC36F,
	54902 - 44032: 0xC370,
	54903 - 44032: 0xC371,
	54904 - 44032: 0xC372,
	54905 - 44032: 0xC373,
	54906 - 44032: 0xC374,
	54907 - 44032: 0xC375,
	54908 - 44032: 0xC376,
	54909 - 44032: 0xC377,
	54910 - 44032: 0xC378,
	54911 - 44032: 0xC379,
	54912 - 44032: 0xC37A,
	54913 - 44032: 0xC381,
	54914 - 44032: 0xC382,
	54915 - 44032: 0xC8B6,
	54916 - 44032: 0xC383,
	54917 - 44032: 0xC8B7,
	54918 - 44032: 0xC384,
	54919 - 44032: 0xC385,
	54920 - 44032: 0xC386,
	54921 - 44032: 0xC387,
	54922 - 44032: 0xC388,
	54923 - 44032: 0xC389,
	54924 - 44032: 0xC8B8,
	54925 - 44032: 0xC8B9,
	54926 - 44032: 0xC38A,
	54927 - 44032: 0xC38B,
	54928 - 44032: 0xC8BA,
	54929 - 44032: 0xC38C,
	54930 - 44032: 0xC38D,
	54931 - 44032: 0xC38E,
	54932 - 44032: 0xC8BB,
	54933 - 44032: 0xC38F,
	54934 - 44032: 0xC390,
	54935 - 44032: 0xC391,
	54936 - 44032: 0xC392,
	54937 - 44032: 0xC393,
	54938 - 44032: 0xC394,
	54939 - 44032: 0xC395,
	54940 - 44032: 0xC396,
	54941 - 44032: 0xC8BC,
	54942 - 44032: 0xC397,
	54943 - 44032: 0xC8BD,
	54944 - 44032: 0xC398,
	54945 - 44032: 0xC8BE,
	54946 - 44032: 0xC399,
	54947 - 44032: 0xC39A,
	54948 - 44032: 0xC39B,
	54949 - 44032: 0xC39C,
	54950 - 44032: 0xC39D,
	54951 - 44032: 0xC39E,
	54952 - 44032: 0xC8BF,
	54953 - 44032: 0xC39F,
	54954 - 44032: 0xC3A0,
	54955 - 44032: 0xC441,
	54956 - 44032: 0xC8C0,
	54957 - 44032: 0xC442,
	54958 - 44032: 0xC443,
	54959 - 44032: 0xC444,
	54960 - 44032: 0xC8C1,
	54961 - 44032: 0xC445,
	54962 - 44032: 0xC446,
	54963 - 44032: 0xC447,
	54964 - 44032: 0xC448,
	54965 - 44032: 0xC449,
	54966 - 44032: 0xC44A,
	54967 - 44032: 0xC44B,
	54968 - 44032: 0xC44C,
	54969 - 44032: 0xC8C2,
	54970 - 44032: 0xC44D,
	54971 - 44032: 0xC8C3,
	54972 - 44032: 0xC44E,
	54973 - 44032: 0xC44F,
	54974 - 44032: 0xC450,
	54975 - 44032: 0xC451,
	54976 - 44032: 0xC452,
	54977 - 44032: 0xC453,
	54978 - 44032: 0xC454,
	54979 - 44032: 0xC455,
	54980 - 44032: 0xC8C4,
	54981 - 44032: 0xC8C5,
	54982 - 44032: 0xC456,
	54983 - 44032: 0xC457,
	54984 - 44032: 0xC8C6,
	54985 - 44032: 0xC458,
	54986 - 44032: 0xC459,
	54987 - 44032: 0xC45A,
	54988 - 44032: 0xC8C7,
	54989 - 44032: 0xC461,
	54990 - 44032: 0xC462,
	54991 - 44032: 0xC463,
	54992 - 44032: 0xC464,
	54993 - 44032: 0xC8C8,
	54994 - 44032: 0xC465,
	54995 - 44032: 0xC466,
	54996 - 44032: 0xC8C9,
	54997 - 44032: 0xC467,
	54998 - 44032: 0xC468,
	54999 - 44032: 0xC8CA,
	55000 - 44032: 0xC469,
	55001 - 44032: 0xC8CB,
	55002 - 44032: 0xC46A,
	55003 - 44032: 0xC46B,
	55004 - 44032: 0xC46C,
	55005 - 44032: 0xC46D,
	55006 - 44032: 0xC46E,
	55007 - 44032: 0xC46F,
	55008 - 44032: 0xC8CC,
	55009 - 44032: 0xC470,
	55010 - 44032: 0xC471,
	55011 - 44032: 0xC472,
	55012 - 44032: 0xC8CD,
	55013 - 44032: 0xC473,
	55014 - 44032: 0xC474,
	55015 - 44032: 0xC475,
	55016 - 44032: 0xC8CE,
	55017 - 44032: 0xC476,
	55018 - 44032: 0xC477,
	55019 - 44032: 0xC478,
	55020 - 44032: 0xC479,
	55021 - 44032: 0xC47A,
	55022 - 44032: 0xC481,
	55023 - 44032: 0xC482,
	55024 - 44032: 0xC8CF,
	55025 - 44032: 0xC483,
	55026 - 44032: 0xC484,
	55027 - 44032: 0xC485,
	55028 - 44032: 0xC486,
	55029 - 44032: 0xC8D0,
	55030 - 44032: 0xC487,
	55031 - 44032: 0xC488,
	55032 - 44032: 0xC489,
	55033 - 44032: 0xC48A,
	55034 - 44032: 0xC48B,
	55035 - 44032: 0xC48C,
	55036 - 44032: 0xC8D1,
	55037 - 44032: 0xC8D2,
	55038 - 44032: 0xC48D,
	55039 - 44032: 0xC48E,
	55040 - 44032: 0xC8D3,
	55041 - 44032: 0xC48F,
	55042 - 44032: 0xC490,
	55043 - 44032: 0xC491,
	55044 - 44032: 0xC8D4,
	55045 - 44032: 0xC492,
	55046 - 44032: 0xC493,
	55047 - 44032: 0xC494,
	55048 - 44032: 0xC495,
	55049 - 44032: 0xC496,
	55050 - 44032: 0xC497,
	55051 - 44032: 0xC498,
	55052 - 44032: 0xC499,
	55053 - 44032: 0xC49A,
	55054 - 44032: 0xC49B,
	55055 - 44032: 0xC49C,
	55056 - 44032: 0xC49D,
	55057 - 44032: 0xC8D5,
	55058 - 44032: 0xC49E,
	55059 - 44032: 0xC49F,
	55060 - 44032: 0xC4A0,
	55061 - 44032: 0xC541,
	55062 - 44032: 0xC542,
	55063 - 44032: 0xC543,
	55064 - 44032: 0xC8D6,
	55065 - 44032: 0xC8D7,
	55066 - 44032: 0xC544,
	55067 - 44032: 0xC545,
	55068 - 44032: 0xC8D8,
	55069 - 44032: 0xC546,
	55070 - 44032: 0xC547,
	55071 - 44032: 0xC548,
	55072 - 44032: 0xC8D9,
	55073 - 44032: 0xC549,
	55074 - 44032: 0xC54A,
	55075 - 44032: 0xC54B,
	55076 - 44032: 0xC54C,
	55077 - 44032: 0xC54D,
	55078 - 44032: 0xC54E,
	55079 - 44032: 0xC54F,
	55080 - 44032: 0xC8DA,
	55081 - 44032: 0xC8DB,
	55082 - 44032: 0xC550,
	55083 - 44032: 0xC8DC,
	55084 - 44032: 0xC551,
	55085 - 44032: 0xC8DD,
	55086 - 44032: 0xC552,
	55087 - 44032: 0xC553,
	55088 - 44032: 0xC554,
	55089 - 44032: 0xC555,
	55090 - 44032: 0xC556,
	55091 - 44032: 0xC557,
	55092 - 44032: 0xC8DE,
	55093 - 44032: 0xC8DF,
	55094 - 44032: 0xC558,
	55095 - 44032: 0xC559,
	55096 - 44032: 0xC8E0,
	55097 - 44032: 0xC55A,
	55098 - 44032: 0xC561,
	55099 - 44032: 0xC562,
	55100 - 44032: 0xC8E1,
	55101 - 44032: 0xC563,
	55102 - 44032: 0xC564,
	55103 - 44032: 0xC565,
	55104 - 44032: 0xC566,
	55105 - 44032: 0xC567,
	55106 - 44032: 0xC568,
	55107 - 44032: 0xC569,
	55108 - 44032: 0xC8E2,
	55109 - 44032: 0xC56A,
	55110 - 44032: 0xC56B,
	55111 - 44032: 0xC8E3,
	55112 - 44032: 0xC56C,
	55113 - 44032: 0xC8E4,
	55114 - 44032: 0xC56D,
	55115 - 44032: 0xC56E,
	55116 - 44032: 0xC56F,
	55117 - 44032: 0xC570,
	55118 - 44032: 0xC571,
	55119 - 44032: 0xC572,
	55120 - 44032: 0xC8E5,
	55121 - 44032: 0xC8E6,
	55122 - 44032: 0xC573,
	55123 - 44032: 0xC574,
	55124 - 44032: 0xC8E7,
	55125 - 44032: 0xC575,
	55126 - 44032: 0xC8E8,
	55127 - 44032: 0xC8E9,
	55128 - 44032: 0xC8EA,
	55129 - 44032: 0xC8EB,
	55130 - 44032: 0xC576,
	55131 - 44032: 0xC577,
	55132 - 44032: 0xC578,
	55133 - 44032: 0xC579,
	55134 - 44032: 0xC57A,
	55135 - 44032: 0xC581,
	55136 - 44032: 0xC8EC,
	55137 - 44032: 0xC8ED,
	55138 - 44032: 0xC582,
	55139 - 44032: 0xC8EE,
	55140 - 44032: 0xC583,
	55141 - 44032: 0xC8EF,
	55142 - 44032: 0xC584,
	55143 - 44032: 0xC585,
	55144 - 44032: 0xC586,
	55145 - 44032: 0xC8F0,
	55146 - 44032: 0xC587,
	55147 - 44032: 0xC588,
	55148 - 44032: 0xC8F1,
	55149 - 44032: 0xC589,
	55150 - 44032: 0xC58A,
	55151 - 44032: 0xC58B,
	55152 - 44032: 0xC8F2,
	55153 - 44032: 0xC58C,
	55154 - 44032: 0xC58D,
	55155 - 44032: 0xC58E,
	55156 - 44032: 0xC8F3,
	55157 - 44032: 0xC58F,
	55158 - 44032: 0xC590,
	55159 - 44032: 0xC591,
	55160 - 44032: 0xC592,
	55161 - 44032: 0xC593,
	55162 - 44032: 0xC594,
	55163 - 44032: 0xC595,
	55164 - 44032: 0xC8F4,
	55165 - 44032: 0xC8F5,
	55166 - 44032: 0xC596,
	55167 - 44032: 0xC597,
	55168 - 44032: 0xC598,
	55169 - 44032: 0xC8F6,
	55170 - 44032: 0xC599,
	55171 - 44032: 0xC59A,
	55172 - 44032: 0xC59B,
	55173 - 44032: 0xC59C,
	55174 - 44032: 0xC59D,
	55175 - 44032: 0xC59E,
	55176 - 44032: 0xC8F7,
	55177 - 44032: 0xC8F8,
	55178 - 44032: 0xC59F,
	55179 - 44032: 0xC5A0,
	55180 - 44032: 0xC8F9,
	55181 - 44032: 0xC641,
	55182 - 44032: 0xC642,
	55183 - 44032: 0xC643,
	55184 - 44032: 0xC8FA,
	55185 - 44032: 0xC644,
	55186 - 44032: 0xC645,
	55187 - 44032: 0xC646,
	55188 - 44032: 0xC647,
	55189 - 44032: 0xC648,
	55190 - 44032: 0xC649,
	55191 - 44032: 0xC64A,
	55192 - 44032: 0xC8FB,
	55193 - 44032: 0xC8FC,
	55194 - 44032: 0xC64B,
	55195 - 44032: 0xC8FD,
	55196 - 44032: 0xC64C,
	55197 - 44032: 0xC8FE,
	55198 - 44032: 0xC64D,
	55199 - 44032: 0xC64E,
	55200 - 44032: 0xC64F,
	55201 - 44032: 0xC650,
	55202 - 44032: 0xC651,
	55203 - 44032: 0xC652,
}

const encode2Low, encode2High = 8213, 9838

var encode2 = [...]uint16{
	8213 - 8213: 0xA1AA,
	8216 - 8213: 0xA1AE,
	8217 - 8213: 0xA1AF,
	8220 - 8213: 0xA1B0,
	8221 - 8213: 0xA1B1,
	8224 - 8213: 0xA2D3,
	8225 - 8213: 0xA2D4,
	8229 - 8213: 0xA1A5,
	8230 - 8213: 0xA1A6,
	8240 - 8213: 0xA2B6,
	8242 - 8213: 0xA1C7,
	8243 - 8213: 0xA1C8,
	8251 - 8213: 0xA1D8,
	8308 - 8213: 0xA9F9,
	8319 - 8213: 0xA9FA,
	8321 - 8213: 0xA9FB,
	8322 - 8213: 0xA9FC,
	8323 - 8213: 0xA9FD,
	8324 - 8213: 0xA9FE,
	8364 - 8213: 0xA2E6,
	8451 - 8213: 0xA1C9,
	8457 - 8213: 0xA2B5,
	8467 - 8213: 0xA7A4,
	8470 - 8213: 0xA2E0,
	8481 - 8213: 0xA2E5,
	8482 - 8213: 0xA2E2,
	8486 - 8213: 0xA7D9,
	8491 - 8213: 0xA1CA,
	8531 - 8213: 0xA8F7,
	8532 - 8213: 0xA8F8,
	8539 - 8213: 0xA8FB,
	8540 - 8213: 0xA8FC,
	8541 - 8213: 0xA8FD,
	8542 - 8213: 0xA8FE,
	8544 - 8213: 0xA5B0,
	8545 - 8213: 0xA5B1,
	8546 - 8213: 0xA5B2,
	8547 - 8213: 0xA5B3,
	8548 - 8213: 0xA5B4,
	8549 - 8213: 0xA5B5,
	8550 - 8213: 0xA5B6,
	8551 - 8213: 0xA5B7,
	8552 - 8213: 0xA5B8,
	8553 - 8213: 0xA5B9,
	8560 - 8213: 0xA5A1,
	8561 - 8213: 0xA5A2,
	8562 - 8213: 0xA5A3,
	8563 - 8213: 0xA5A4,
	8564 - 8213: 0xA5A5,
	8565 - 8213: 0xA5A6,
	8566 - 8213: 0xA5A7,
	8567 - 8213: 0xA5A8,
	8568 - 8213: 0xA5A9,
	8569 - 8213: 0xA5AA,
	8592 - 8213: 0xA1E7,
	8593 - 8213: 0xA1E8,
	8594 - 8213: 0xA1E6,
	8595 - 8213: 0xA1E9,
	8596 - 8213: 0xA1EA,
	8597 - 8213: 0xA2D5,
	8598 - 8213: 0xA2D8,
	8599 - 8213: 0xA2D6,
	8600 - 8213: 0xA2D9,
	8601 - 8213: 0xA2D7,
	8658 - 8213: 0xA2A1,
	8660 - 8213: 0xA2A2,
	8704 - 8213: 0xA2A3,
	8706 - 8213: 0xA1D3,
	8707 - 8213: 0xA2A4,
	8711 - 8213: 0xA1D4,
	8712 - 8213: 0xA1F4,
	8715 - 8213: 0xA1F5,
	8719 - 8213: 0xA2B3,
	8721 - 8213: 0xA2B2,
	8730 - 8213: 0xA1EE,
	8733 - 8213: 0xA1F0,
	8734 - 8213: 0xA1C4,
	8736 - 8213: 0xA1D0,
	8741 - 8213: 0xA1AB,
	8743 - 8213: 0xA1FC,
	8744 - 8213: 0xA1FD,
	8745 - 8213: 0xA1FB,
	8746 - 8213: 0xA1FA,
	8747 - 8213: 0xA1F2,
	8748 - 8213: 0xA1F3,
	8750 - 8213: 0xA2B1,
	8756 - 8213: 0xA1C5,
	8757 - 8213: 0xA1F1,
	8764 - 8213: 0xA1AD,
	8765 - 8213: 0xA1EF,
	8786 - 8213: 0xA1D6,
	8800 - 8213: 0xA1C1,
	8801 - 8213: 0xA1D5,
	8804 - 8213: 0xA1C2,
	8805 - 8213: 0xA1C3,
	8810 - 8213: 0xA1EC,
	8811 - 8213: 0xA1ED,
	8834 - 8213: 0xA1F8,
	8835 - 8213: 0xA1F9,
	8838 - 8213: 0xA1F6,
	8839 - 8213: 0xA1F7,
	8857 - 8213: 0xA2C1,
	8869 - 8213: 0xA1D1,
	8978 - 8213: 0xA1D2,
	9312 - 8213: 0xA8E7,
	9313 - 8213: 0xA8E8,
	9314 - 8213: 0xA8E9,
	9315 - 8213: 0xA8EA,
	9316 - 8213: 0xA8EB,
	9317 - 8213: 0xA8EC,
	9318 - 8213: 0xA8ED,
	9319 - 8213: 0xA8EE,
	9320 - 8213: 0xA8EF,
	9321 - 8213: 0xA8F0,
	9322 - 8213: 0xA8F1,
	9323 - 8213: 0xA8F2,
	9324 - 8213: 0xA8F3,
	9325 - 8213: 0xA8F4,
	9326 - 8213: 0xA8F5,
	9332 - 8213: 0xA9E7,
	9333 - 8213: 0xA9E8,
	9334 - 8213: 0xA9E9,
	9335 - 8213: 0xA9EA,
	9336 - 8213: 0xA9EB,
	9337 - 8213: 0xA9EC,
	9338 - 8213: 0xA9ED,
	9339 - 8213: 0xA9EE,
	9340 - 8213: 0xA9EF,
	9341 - 8213: 0xA9F0,
	9342 - 8213: 0xA9F1,
	9343 - 8213: 0xA9F2,
	9344 - 8213: 0xA9F3,
	9345 - 8213: 0xA9F4,
	9346 - 8213: 0xA9F5,
	9372 - 8213: 0xA9CD,
	9373 - 8213: 0xA9CE,
	9374 - 8213: 0xA9CF,
	9375 - 8213: 0xA9D0,
	9376 - 8213: 0xA9D1,
	9377 - 8213: 0xA9D2,
	9378 - 8213: 0xA9D3,
	9379 - 8213: 0xA9D4,
	9380 - 8213: 0xA9D5,
	9381 - 8213: 0xA9D6,
	9382 - 8213: 0xA9D7,
	9383 - 8213: 0xA9D8,
	9384 - 8213: 0xA9D9,
	9385 - 8213: 0xA9DA,
	9386 - 8213: 0xA9DB,
	9387 - 8213: 0xA9DC,
	9388 - 8213: 0xA9DD,
	9389 - 8213: 0xA9DE,
	9390 - 8213: 0xA9DF,
	9391 - 8213: 0xA9E0,
	9392 - 8213: 0xA9E1,
	9393 - 8213: 0xA9E2,
	9394 - 8213: 0xA9E3,
	9395 - 8213: 0xA9E4,
	9396 - 8213: 0xA9E5,
	9397 - 8213: 0xA9E6,
	9424 - 8213: 0xA8CD,
	9425 - 8213: 0xA8CE,
	9426 - 8213: 0xA8CF,
	9427 - 8213: 0xA8D0,
	9428 - 8213: 0xA8D1,
	9429 - 8213: 0xA8D2,
	9430 - 8213: 0xA8D3,
	9431 - 8213: 0xA8D4,
	9432 - 8213: 0xA8D5,
	9433 - 8213: 0xA8D6,
	9434 - 8213: 0xA8D7,
	9435 - 8213: 0xA8D8,
	9436 - 8213: 0xA8D9,
	9437 - 8213: 0xA8DA,
	9438 - 8213: 0xA8DB,
	9439 - 8213: 0xA8DC,
	9440 - 8213: 0xA8DD,
	9441 - 8213: 0xA8DE,
	9442 - 8213: 0xA8DF,
	9443 - 8213: 0xA8E0,
	9444 - 8213: 0xA8E1,
	9445 - 8213: 0xA8E2,
	9446 - 8213: 0xA8E3,
	9447 - 8213: 0xA8E4,
	9448 - 8213: 0xA8E5,
	9449 - 8213: 0xA8E6,
	9472 - 8213: 0xA6A1,
	9473 - 8213: 0xA6AC,
	9474 - 8213: 0xA6A2,
	9475 - 8213: 0xA6AD,
	9484 - 8213: 0xA6A3,
	9485 - 8213: 0xA6C8,
	9486 - 8213: 0xA6C7,
	9487 - 8213: 0xA6AE,
	9488 - 8213: 0xA6A4,
	9489 - 8213: 0xA6C2,
	9490 - 8213: 0xA6C1,
	9491 - 8213: 0xA6AF,
	9492 - 8213: 0xA6A6,
	9493 - 8213: 0xA6C6,
	9494 - 8213: 0xA6C5,
	9495 - 8213: 0xA6B1,
	9496 - 8213: 0xA6A5,
	9497 - 8213: 0xA6C4,
	9498 - 8213: 0xA6C3,
	9499 - 8213: 0xA6B0,
	9500 - 8213: 0xA6A7,
	9501 - 8213: 0xA6BC,
	9502 - 8213: 0xA6C9,
	9503 - 8213: 0xA6CA,
	9504 - 8213: 0xA6B7,
	9505 - 8213: 0xA6CB,
	9506 - 8213: 0xA6CC,
	9507 - 8213: 0xA6B2,
	9508 - 8213: 0xA6A9,
	9509 - 8213: 0xA6BE,
	9510 - 8213: 0xA6CD,
	9511 - 8213: 0xA6CE,
	9512 - 8213: 0xA6B9,
	9513 - 8213: 0xA6CF,
	9514 - 8213: 0xA6D0,
	9515 - 8213: 0xA6B4,
	9516 - 8213: 0xA6A8,
	9517 - 8213: 0xA6D1,
	9518 - 8213: 0xA6D2,
	9519 - 8213: 0xA6B8,
	9520 - 8213: 0xA6BD,
	9521 - 8213: 0xA6D3,
	9522 - 8213: 0xA6D4,
	9523 - 8213: 0xA6B3,
	9524 - 8213: 0xA6AA,
	9525 - 8213: 0xA6D5,
	9526 - 8213: 0xA6D6,
	9527 - 8213: 0xA6BA,
	9528 - 8213: 0xA6BF,
	9529 - 8213: 0xA6D7,
	9530 - 8213: 0xA6D8,
	9531 - 8213: 0xA6B5,
	9532 - 8213: 0xA6AB,
	9533 - 8213: 0xA6D9,
	9534 - 8213: 0xA6DA,
	9535 - 8213: 0xA6BB,
	9536 - 8213: 0xA6DB,
	9537 - 8213: 0xA6DC,
	9538 - 8213: 0xA6C0,
	9539 - 8213: 0xA6DD,
	9540 - 8213: 0xA6DE,
	9541 - 8213: 0xA6DF,
	9542 - 8213: 0xA6E0,
	9543 - 8213: 0xA6E1,
	9544 - 8213: 0xA6E2,
	9545 - 8213: 0xA6E3,
	9546 - 8213: 0xA6E4,
	9547 - 8213: 0xA6B6,
	9618 - 8213: 0xA2C6,
	9632 - 8213: 0xA1E1,
	9633 - 8213: 0xA1E0,
	9635 - 8213: 0xA2C3,
	9636 - 8213: 0xA2C7,
	9637 - 8213: 0xA2C8,
	9638 - 8213: 0xA2CB,
	9639 - 8213: 0xA2CA,
	9640 - 8213: 0xA2C9,
	9641 - 8213: 0xA2CC,
	9650 - 8213: 0xA1E3,
	9651 - 8213: 0xA1E2,
	9654 - 8213: 0xA2BA,
	9655 - 8213: 0xA2B9,
	9660 - 8213: 0xA1E5,
	9661 - 8213: 0xA1E4,
	9664 - 8213: 0xA2B8,
	9665 - 8213: 0xA2B7,
	9670 - 8213: 0xA1DF,
	9671 - 8213: 0xA1DE,
	9672 - 8213: 0xA2C2,
	9675 - 8213: 0xA1DB,
	9678 - 8213: 0xA1DD,
	9679 - 8213: 0xA1DC,
	9680 - 8213: 0xA2C4,
	9681 - 8213: 0xA2C5,
	9733 - 8213: 0xA1DA,
	9734 - 8213: 0xA1D9,
	9742 - 8213: 0xA2CF,
	9743 - 8213: 0xA2CE,
	9756 - 8213: 0xA2D0,
	9758 - 8213: 0xA2D1,
	9792 - 8213: 0xA1CF,
	9794 - 8213: 0xA1CE,
	9824 - 8213: 0xA2BC,
	9825 - 8213: 0xA2BD,
	9827 - 8213: 0xA2C0,
	9828 - 8213: 0xA2BB,
	9829 - 8213: 0xA2BE,
	9831 - 8213: 0xA2BF,
	9832 - 8213: 0xA2CD,
	9833 - 8213: 0xA2DB,
	9834 - 8213: 0xA2DC,
	9836 - 8213: 0xA2DD,
	9837 - 8213: 0xA2DA,
}

const encode3Low, encode3High = 12288, 13278

var encode3 = [...]uint16{
	12288 - 12288: 0xA1A1,
	12289 - 12288: 0xA1A2,
	12290 - 12288: 0xA1A3,
	12291 - 12288: 0xA1A8,
	12296 - 12288: 0xA1B4,
	12297 - 12288: 0xA1B5,
	12298 - 12288: 0xA1B6,
	12299 - 12288: 0xA1B7,
	12300 - 12288: 0xA1B8,
	12301 - 12288: 0xA1B9,
	12302 - 12288: 0xA1BA,
	12303 - 12288: 0xA1BB,
	12304 - 12288: 0xA1BC,
	12305 - 12288: 0xA1BD,
	12307 - 12288: 0xA1EB,
	12308 - 12288: 0xA1B2,
	12309 - 12288: 0xA1B3,
	12353 - 12288: 0xAAA1,
	12354 - 12288: 0xAAA2,
	12355 - 12288: 0xAAA3,
	12356 - 12288: 0xAAA4,
	12357 - 12288: 0xAAA5,
	12358 - 12288: 0xAAA6,
	12359 - 12288: 0xAAA7,
	12360 - 12288: 0xAAA8,
	12361 - 12288: 0xAAA9,
	12362 - 12288: 0xAAAA,
	12363 - 12288: 0xAAAB,
	12364 - 12288: 0xAAAC,
	12365 - 12288: 0xAAAD,
	12366 - 12288: 0xAAAE,
	12367 - 12288: 0xAAAF,
	12368 - 12288: 0xAAB0,
	12369 - 12288: 0xAAB1,
	12370 - 12288: 0xAAB2,
	12371 - 12288: 0xAAB3,
	12372 - 12288: 0xAAB4,
	12373 - 12288: 0xAAB5,
	12374 - 12288: 0xAAB6,
	12375 - 12288: 0xAAB7,
	12376 - 12288: 0xAAB8,
	12377 - 12288: 0xAAB9,
	12378 - 12288: 0xAABA,
	12379 - 12288: 0xAABB,
	12380 - 12288: 0xAABC,
	12381 - 12288: 0xAABD,
	12382 - 12288: 0xAABE,
	12383 - 12288: 0xAABF,
	12384 - 12288: 0xAAC0,
	12385 - 12288: 0xAAC1,
	12386 - 12288: 0xAAC2,
	12387 - 12288: 0xAAC3,
	12388 - 12288: 0xAAC4,
	12389 - 12288: 0xAAC5,
	12390 - 12288: 0xAAC6,
	12391 - 12288: 0xAAC7,
	12392 - 12288: 0xAAC8,
	12393 - 12288: 0xAAC9,
	12394 - 12288: 0xAACA,
	12395 - 12288: 0xAACB,
	12396 - 12288: 0xAACC,
	12397 - 12288: 0xAACD,
	12398 - 12288: 0xAACE,
	12399 - 12288: 0xAACF,
	12400 - 12288: 0xAAD0,
	12401 - 12288: 0xAAD1,
	12402 - 12288: 0xAAD2,
	12403 - 12288: 0xAAD3,
	12404 - 12288: 0xAAD4,
	12405 - 12288: 0xAAD5,
	12406 - 12288: 0xAAD6,
	12407 - 12288: 0xAAD7,
	12408 - 12288: 0xAAD8,
	12409 - 12288: 0xAAD9,
	12410 - 12288: 0xAADA,
	12411 - 12288: 0xAADB,
	12412 - 12288: 0xAADC,
	12413 - 12288: 0xAADD,
	12414 - 12288: 0xAADE,
	12415 - 12288: 0xAADF,
	12416 - 12288: 0xAAE0,
	12417 - 12288: 0xAAE1,
	12418 - 12288: 0xAAE2,
	12419 - 12288: 0xAAE3,
	12420 - 12288: 0xAAE4,
	12421 - 12288: 0xAAE5,
	12422 - 12288: 0xAAE6,
	12423 - 12288: 0xAAE7,
	12424 - 12288: 0xAAE8,
	12425 - 12288: 0xAAE9,
	12426 - 12288: 0xAAEA,
	12427 - 12288: 0xAAEB,
	12428 - 12288: 0xAAEC,
	12429 - 12288: 0xAAED,
	12430 - 12288: 0xAAEE,
	12431 - 12288: 0xAAEF,
	12432 - 12288: 0xAAF0,
	12433 - 12288: 0xAAF1,
	12434 - 12288: 0xAAF2,
	12435 - 12288: 0xAAF3,
	12449 - 12288: 0xABA1,
	12450 - 12288: 0xABA2,
	12451 - 12288: 0xABA3,
	12452 - 12288: 0xABA4,
	12453 - 12288: 0xABA5,
	12454 - 12288: 0xABA6,
	12455 - 12288: 0xABA7,
	12456 - 12288: 0xABA8,
	12457 - 12288: 0xABA9,
	12458 - 12288: 0xABAA,
	12459 - 12288: 0xABAB,
	12460 - 12288: 0xABAC,
	12461 - 12288: 0xABAD,
	12462 - 12288: 0xABAE,
	12463 - 12288: 0xABAF,
	12464 - 12288: 0xABB0,
	12465 - 12288: 0xABB1,
	12466 - 12288: 0xABB2,
	12467 - 12288: 0xABB3,
	12468 - 12288: 0xABB4,
	12469 - 12288: 0xABB5,
	12470 - 12288: 0xABB6,
	12471 - 12288: 0xABB7,
	12472 - 12288: 0xABB8,
	12473 - 12288: 0xABB9,
	12474 - 12288: 0xABBA,
	12475 - 12288: 0xABBB,
	12476 - 12288: 0xABBC,
	12477 - 12288: 0xABBD,
	12478 - 12288: 0xABBE,
	12479 - 12288: 0xABBF,
	12480 - 12288: 0xABC0,
	12481 - 12288: 0xABC1,
	12482 - 12288: 0xABC2,
	12483 - 12288: 0xABC3,
	12484 - 12288: 0xABC4,
	12485 - 12288: 0xABC5,
	12486 - 12288: 0xABC6,
	12487 - 12288: 0xABC7,
	12488 - 12288: 0xABC8,
	12489 - 12288: 0xABC9,
	12490 - 12288: 0xABCA,
	12491 - 12288: 0xABCB,
	12492 - 12288: 0xABCC,
	12493 - 12288: 0xABCD,
	12494 - 12288: 0xABCE,
	12495 - 12288: 0xABCF,
	12496 - 12288: 0xABD0,
	12497 - 12288: 0xABD1,
	12498 - 12288: 0xABD2,
	12499 - 12288: 0xABD3,
	12500 - 12288: 0xABD4,
	12501 - 12288: 0xABD5,
	12502 - 12288: 0xABD6,
	12503 - 12288: 0xABD7,
	12504 - 12288: 0xABD8,
	12505 - 12288: 0xABD9,
	12506 - 12288: 0xABDA,
	12507 - 12288: 0xABDB,
	12508 - 12288: 0xABDC,
	12509 - 12288: 0xABDD,
	12510 - 12288: 0xABDE,
	12511 - 12288: 0xABDF,
	12512 - 12288: 0xABE0,
	12513 - 12288: 0xABE1,
	12514 - 12288: 0xABE2,
	12515 - 12288: 0xABE3,
	12516 - 12288: 0xABE4,
	12517 - 12288: 0xABE5,
	12518 - 12288: 0xABE6,
	12519 - 12288: 0xABE7,
	12520 - 12288: 0xABE8,
	12521 - 12288: 0xABE9,
	12522 - 12288: 0xABEA,
	12523 - 12288: 0xABEB,
	12524 - 12288: 0xABEC,
	12525 - 12288: 0xABED,
	12526 - 12288: 0xABEE,
	12527 - 12288: 0xABEF,
	12528 - 12288: 0xABF0,
	12529 - 12288: 0xABF1,
	12530 - 12288: 0xABF2,
	12531 - 12288: 0xABF3,
	12532 - 12288: 0xABF4,
	12533 - 12288: 0xABF5,
	12534 - 12288: 0xABF6,
	12593 - 12288: 0xA4A1,
	12594 - 12288: 0xA4A2,
	12595 - 12288: 0xA4A3,
	12596 - 12288: 0xA4A4,
	12597 - 12288: 0xA4A5,
	12598 - 12288: 0xA4A6,
	12599 - 12288: 0xA4A7,
	12600 - 12288: 0xA4A8,
	12601 - 12288: 0xA4A9,
	12602 - 12288: 0xA4AA,
	12603 - 12288: 0xA4AB,
	12604 - 12288: 0xA4AC,
	12605 - 12288: 0xA4AD,
	12606 - 12288: 0xA4AE,
	12607 - 12288: 0xA4AF,
	12608 - 12288: 0xA4B0,
	12609 - 12288: 0xA4B1,
	12610 - 12288: 0xA4B2,
	12611 - 12288: 0xA4B3,
	12612 - 12288: 0xA4B4,
	12613 - 12288: 0xA4B5,
	12614 - 12288: 0xA4B6,
	12615 - 12288: 0xA4B7,
	12616 - 12288: 0xA4B8,
	12617 - 12288: 0xA4B9,
	12618 - 12288: 0xA4BA,
	12619 - 12288: 0xA4BB,
	12620 - 12288: 0xA4BC,
	12621 - 12288: 0xA4BD,
	12622 - 12288: 0xA4BE,
	12623 - 12288: 0xA4BF,
	12624 - 12288: 0xA4C0,
	12625 - 12288: 0xA4C1,
	12626 - 12288: 0xA4C2,
	12627 - 12288: 0xA4C3,
	12628 - 12288: 0xA4C4,
	12629 - 12288: 0xA4C5,
	12630 - 12288: 0xA4C6,
	12631 - 12288: 0xA4C7,
	12632 - 12288: 0xA4C8,
	12633 - 12288: 0xA4C9,
	12634 - 12288: 0xA4CA,
	12635 - 12288: 0xA4CB,
	12636 - 12288: 0xA4CC,
	12637 - 12288: 0xA4CD,
	12638 - 12288: 0xA4CE,
	12639 - 12288: 0xA4CF,
	12640 - 12288: 0xA4D0,
	12641 - 12288: 0xA4D1,
	12642 - 12288: 0xA4D2,
	12643 - 12288: 0xA4D3,
	12644 - 12288: 0xA4D4,
	12645 - 12288: 0xA4D5,
	12646 - 12288: 0xA4D6,
	12647 - 12288: 0xA4D7,
	12648 - 12288: 0xA4D8,
	12649 - 12288: 0xA4D9,
	12650 - 12288: 0xA4DA,
	12651 - 12288: 0xA4DB,
	12652 - 12288: 0xA4DC,
	12653 - 12288: 0xA4DD,
	12654 - 12288: 0xA4DE,
	12655 - 12288: 0xA4DF,
	12656 - 12288: 0xA4E0,
	12657 - 12288: 0xA4E1,
	12658 - 12288: 0xA4E2,
	12659 - 12288: 0xA4E3,
	12660 - 12288: 0xA4E4,
	12661 - 12288: 0xA4E5,
	12662 - 12288: 0xA4E6,
	12663 - 12288: 0xA4E7,
	12664 - 12288: 0xA4E8,
	12665 - 12288: 0xA4E9,
	12666 - 12288: 0xA4EA,
	12667 - 12288: 0xA4EB,
	12668 - 12288: 0xA4EC,
	12669 - 12288: 0xA4ED,
	12670 - 12288: 0xA4EE,
	12671 - 12288: 0xA4EF,
	12672 - 12288: 0xA4F0,
	12673 - 12288: 0xA4F1,
	12674 - 12288: 0xA4F2,
	12675 - 12288: 0xA4F3,
	12676 - 12288: 0xA4F4,
	12677 - 12288: 0xA4F5,
	12678 - 12288: 0xA4F6,
	12679 - 12288: 0xA4F7,
	12680 - 12288: 0xA4F8,
	12681 - 12288: 0xA4F9,
	12682 - 12288: 0xA4FA,
	12683 - 12288: 0xA4FB,
	12684 - 12288: 0xA4FC,
	12685 - 12288: 0xA4FD,
	12686 - 12288: 0xA4FE,
	12800 - 12288: 0xA9B1,
	12801 - 12288: 0xA9B2,
	12802 - 12288: 0xA9B3,
	12803 - 12288: 0xA9B4,
	12804 - 12288: 0xA9B5,
	12805 - 12288: 0xA9B6,
	12806 - 12288: 0xA9B7,
	12807 - 12288: 0xA9B8,
	12808 - 12288: 0xA9B9,
	12809 - 12288: 0xA9BA,
	12810 - 12288: 0xA9BB,
	12811 - 12288: 0xA9BC,
	12812 - 12288: 0xA9BD,
	12813 - 12288: 0xA9BE,
	12814 - 12288: 0xA9BF,
	12815 - 12288: 0xA9C0,
	12816 - 12288: 0xA9C1,
	12817 - 12288: 0xA9C2,
	12818 - 12288: 0xA9C3,
	12819 - 12288: 0xA9C4,
	12820 - 12288: 0xA9C5,
	12821 - 12288: 0xA9C6,
	12822 - 12288: 0xA9C7,
	12823 - 12288: 0xA9C8,
	12824 - 12288: 0xA9C9,
	12825 - 12288: 0xA9CA,
	12826 - 12288: 0xA9CB,
	12827 - 12288: 0xA9CC,
	12828 - 12288: 0xA2DF,
	12896 - 12288: 0xA8B1,
	12897 - 12288: 0xA8B2,
	12898 - 12288: 0xA8B3,
	12899 - 12288: 0xA8B4,
	12900 - 12288: 0xA8B5,
	12901 - 12288: 0xA8B6,
	12902 - 12288: 0xA8B7,
	12903 - 12288: 0xA8B8,
	12904 - 12288: 0xA8B9,
	12905 - 12288: 0xA8BA,
	12906 - 12288: 0xA8BB,
	12907 - 12288: 0xA8BC,
	12908 - 12288: 0xA8BD,
	12909 - 12288: 0xA8BE,
	12910 - 12288: 0xA8BF,
	12911 - 12288: 0xA8C0,
	12912 - 12288: 0xA8C1,
	12913 - 12288: 0xA8C2,
	12914 - 12288: 0xA8C3,
	12915 - 12288: 0xA8C4,
	12916 - 12288: 0xA8C5,
	12917 - 12288: 0xA8C6,
	12918 - 12288: 0xA8C7,
	12919 - 12288: 0xA8C8,
	12920 - 12288: 0xA8C9,
	12921 - 12288: 0xA8CA,
	12922 - 12288: 0xA8CB,
	12923 - 12288: 0xA8CC,
	12927 - 12288: 0xA2DE,
	13184 - 12288: 0xA7C9,
	13185 - 12288: 0xA7CA,
	13186 - 12288: 0xA7CB,
	13187 - 12288: 0xA7CC,
	13188 - 12288: 0xA7CD,
	13192 - 12288: 0xA7BA,
	13193 - 12288: 0xA7BB,
	13194 - 12288: 0xA7DC,
	13195 - 12288: 0xA7DD,
	13196 - 12288: 0xA7DE,
	13197 - 12288: 0xA7B6,
	13198 - 12288: 0xA7B7,
	13199 - 12288: 0xA7B8,
	13200 - 12288: 0xA7D4,
	13201 - 12288: 0xA7D5,
	13202 - 12288: 0xA7D6,
	13203 - 12288: 0xA7D7,
	13204 - 12288: 0xA7D8,
	13205 - 12288: 0xA7A1,
	13206 - 12288: 0xA7A2,
	13207 - 12288: 0xA7A3,
	13208 - 12288: 0xA7A5,
	13209 - 12288: 0xA7AB,
	13210 - 12288: 0xA7AC,
	13211 - 12288: 0xA7AD,
	13212 - 12288: 0xA7AE,
	13213 - 12288: 0xA7AF,
	13214 - 12288: 0xA7B0,
	13215 - 12288: 0xA7B1,
	13216 - 12288: 0xA7B2,
	13217 - 12288: 0xA7B3,
	13218 - 12288: 0xA7B4,
	13219 - 12288: 0xA7A7,
	13220 - 12288: 0xA7A8,
	13221 - 12288: 0xA7A9,
	13222 - 12288: 0xA7AA,
	13223 - 12288: 0xA7BD,
	13224 - 12288: 0xA7BE,
	13225 - 12288: 0xA7E5,
	13226 - 12288: 0xA7E6,
	13227 - 12288: 0xA7E7,
	13228 - 12288: 0xA7E8,
	13229 - 12288: 0xA7E1,
	13230 - 12288: 0xA7E2,
	13231 - 12288: 0xA7E3,
	13232 - 12288: 0xA7BF,
	13233 - 12288: 0xA7C0,
	13234 - 12288: 0xA7C1,
	13235 - 12288: 0xA7C2,
	13236 - 12288: 0xA7C3,
	13237 - 12288: 0xA7C4,
	13238 - 12288: 0xA7C5,
	13239 - 12288: 0xA7C6,
	13240 - 12288: 0xA7C7,
	13241 - 12288: 0xA7C8,
	13242 - 12288: 0xA7CE,
	13243 - 12288: 0xA7CF,
	13244 - 12288: 0xA7D0,
	13245 - 12288: 0xA7D1,
	13246 - 12288: 0xA7D2,
	13247 - 12288: 0xA7D3,
	13248 - 12288: 0xA7DA,
	13249 - 12288: 0xA7DB,
	13250 - 12288: 0xA2E3,
	13251 - 12288: 0xA7EC,
	13252 - 12288: 0xA7A6,
	13253 - 12288: 0xA7E0,
	13254 - 12288: 0xA7EF,
	13255 - 12288: 0xA2E1,
	13256 - 12288: 0xA7BC,
	13257 - 12288: 0xA7ED,
	13258 - 12288: 0xA7B5,
	13263 - 12288: 0xA7B9,
	13264 - 12288: 0xA7EA,
	13267 - 12288: 0xA7EB,
	13270 - 12288: 0xA7DF,
	13272 - 12288: 0xA2E4,
	13275 - 12288: 0xA7E4,
	13276 - 12288: 0xA7EE,
	13277 - 12288: 0xA7E9,
}

const encode4Low, encode4High = 161, 1106

var encode4 = [...]uint16{
	161 - 161:  0xA2AE,
	164 - 161:  0xA2B4,
	167 - 161:  0xA1D7,
	168 - 161:  0xA1A7,
	170 - 161:  0xA8A3,
	173 - 161:  0xA1A9,
	174 - 161:  0xA2E7,
	176 - 161:  0xA1C6,
	177 - 161:  0xA1BE,
	178 - 161:  0xA9F7,
	179 - 161:  0xA9F8,
	180 - 161:  0xA2A5,
	182 - 161:  0xA2D2,
	183 - 161:  0xA1A4,
	184 - 161:  0xA2AC,
	185 - 161:  0xA9F6,
	186 - 161:  0xA8AC,
	188 - 161:  0xA8F9,
	189 - 161:  0xA8F6,
	190 - 161:  0xA8FA,
	191 - 161:  0xA2AF,
	198 - 161:  0xA8A1,
	208 - 161:  0xA8A2,
	215 - 161:  0xA1BF,
	216 - 161:  0xA8AA,
	222 - 161:  0xA8AD,
	223 - 161:  0xA9AC,
	230 - 161:  0xA9A1,
	240 - 161:  0xA9A3,
	247 - 161:  0xA1C0,
	248 - 161:  0xA9AA,
	254 - 161:  0xA9AD,
	273 - 161:  0xA9A2,
	294 - 161:  0xA8A4,
	295 - 161:  0xA9A4,
	305 - 161:  0xA9A5,
	306 - 161:  0xA8A6,
	307 - 161:  0xA9A6,
	312 - 161:  0xA9A7,
	319 - 161:  0xA8A8,
	320 - 161:  0xA9A8,
	321 - 161:  0xA8A9,
	322 - 161:  0xA9A9,
	329 - 161:  0xA9B0,
	330 - 161:  0xA8AF,
	331 - 161:  0xA9AF,
	338 - 161:  0xA8AB,
	339 - 161:  0xA9AB,
	358 - 161:  0xA8AE,
	359 - 161:  0xA9AE,
	711 - 161:  0xA2A7,
	720 - 161:  0xA2B0,
	728 - 161:  0xA2A8,
	729 - 161:  0xA2AB,
	730 - 161:  0xA2AA,
	731 - 161:  0xA2AD,
	733 - 161:  0xA2A9,
	913 - 161:  0xA5C1,
	914 - 161:  0xA5C2,
	915 - 161:  0xA5C3,
	916 - 161:  0xA5C4,
	917 - 161:  0xA5C5,
	918 - 161:  0xA5C6,
	919 - 161:  0xA5C7,
	920 - 161:  0xA5C8,
	921 - 161:  0xA5C9,
	922 - 161:  0xA5CA,
	923 - 161:  0xA5CB,
	924 - 161:  0xA5CC,
	925 - 161:  0xA5CD,
	926 - 161:  0xA5CE,
	927 - 161:  0xA5CF,
	928 - 161:  0xA5D0,
	929 - 161:  0xA5D1,
	931 - 161:  0xA5D2,
	932 - 161:  0xA5D3,
	933 - 161:  0xA5D4,
	934 - 161:  0xA5D5,
	935 - 161:  0xA5D6,
	936 - 161:  0xA5D7,
	937 - 161:  0xA5D8,
	945 - 161:  0xA5E1,
	946 - 161:  0xA5E2,
	947 - 161:  0xA5E3,
	948 - 161:  0xA5E4,
	949 - 161:  0xA5E5,
	950 - 161:  0xA5E6,
	951 - 161:  0xA5E7,
	952 - 161:  0xA5E8,
	953 - 161:  0xA5E9,
	954 - 161:  0xA5EA,
	955 - 161:  0xA5EB,
	956 - 161:  0xA5EC,
	957 - 161:  0xA5ED,
	958 - 161:  0xA5EE,
	959 - 161:  0xA5EF,
	960 - 161:  0xA5F0,
	961 - 161:  0xA5F1,
	963 - 161:  0xA5F2,
	964 - 161:  0xA5F3,
	965 - 161:  0xA5F4,
	966 - 161:  0xA5F5,
	967 - 161:  0xA5F6,
	968 - 161:  0xA5F7,
	969 - 161:  0xA5F8,
	1025 - 161: 0xACA7,
	1040 - 161: 0xACA1,
	1041 - 161: 0xACA2,
	1042 - 161: 0xACA3,
	1043 - 161: 0xACA4,
	1044 - 161: 0xACA5,
	1045 - 161: 0xACA6,
	1046 - 161: 0xACA8,
	1047 - 161: 0xACA9,
	1048 - 161: 0xACAA,
	1049 - 161: 0xACAB,
	1050 - 161: 0xACAC,
	1051 - 161: 0xACAD,
	1052 - 161: 0xACAE,
	1053 - 161: 0xACAF,
	1054 - 161: 0xACB0,
	1055 - 161: 0xACB1,
	1056 - 161: 0xACB2,
	1057 - 161: 0xACB3,
	1058 - 161: 0xACB4,
	1059 - 161: 0xACB5,
	1060 - 161: 0xACB6,
	1061 - 161: 0xACB7,
	1062 - 161: 0xACB8,
	1063 - 161: 0xACB9,
	1064 - 161: 0xACBA,
	1065 - 161: 0xACBB,
	1066 - 161: 0xACBC,
	1067 - 161: 0xACBD,
	1068 - 161: 0xACBE,
	1069 - 161: 0xACBF,
	1070 - 161: 0xACC0,
	1071 - 161: 0xACC1,
	1072 - 161: 0xACD1,
	1073 - 161: 0xACD2,
	1074 - 161: 0xACD3,
	1075 - 161: 0xACD4,
	1076 - 161: 0xACD5,
	1077 - 161: 0xACD6,
	1078 - 161: 0xACD8,
	1079 - 161: 0xACD9,
	1080 - 161: 0xACDA,
	1081 - 161: 0xACDB,
	1082 - 161: 0xACDC,
	1083 - 161: 0xACDD,
	1084 - 161: 0xACDE,
	1085 - 161: 0xACDF,
	1086 - 161: 0xACE0,
	1087 - 161: 0xACE1,
	1088 - 161: 0xACE2,
	1089 - 161: 0xACE3,
	1090 - 161: 0xACE4,
	1091 - 161: 0xACE5,
	1092 - 161: 0xACE6,
	1093 - 161: 0xACE7,
	1094 - 161: 0xACE8,
	1095 - 161: 0xACE9,
	1096 - 161: 0xACEA,
	1097 - 161: 0xACEB,
	1098 - 161: 0xACEC,
	1099 - 161: 0xACED,
	1100 - 161: 0xACEE,
	1101 - 161: 0xACEF,
	1102 - 161: 0xACF0,
	1103 - 161: 0xACF1,
	1105 - 161: 0xACD7,
}

const encode5Low, encode5High = 63744, 64012

var encode5 = [...]uint16{
	63744 - 63744: 0xCBD0,
	63745 - 63744: 0xCBD6,
	63746 - 63744: 0xCBE7,
	63747 - 63744: 0xCDCF,
	63748 - 63744: 0xCDE8,
	63749 - 63744: 0xCEAD,
	63750 - 63744: 0xCFFB,
	63751 - 63744: 0xD0A2,
	63752 - 63744: 0xD0B8,
	63753 - 63744: 0xD0D0,
	63754 - 63744: 0xD0DD,
	63755 - 63744: 0xD1D4,
	63756 - 63744: 0xD1D5,
	63757 - 63744: 0xD1D8,
	63758 - 63744: 0xD1DB,
	63759 - 63744: 0xD1DC,
	63760 - 63744: 0xD1DD,
	63761 - 63744: 0xD1DE,
	63762 - 63744: 0xD1DF,
	63763 - 63744: 0xD1E0,
	63764 - 63744: 0xD1E2,
	63765 - 63744: 0xD1E3,
	63766 - 63744: 0xD1E4,
	63767 - 63744: 0xD1E5,
	63768 - 63744: 0xD1E6,
	63769 - 63744: 0xD1E8,
	63770 - 63744: 0xD1E9,
	63771 - 63744: 0xD1EA,
	63772 - 63744: 0xD1EB,
	63773 - 63744: 0xD1ED,
	63774 - 63744: 0xD1EF,
	63775 - 63744: 0xD1F0,
	63776 - 63744: 0xD1F2,
	63777 - 63744: 0xD1F6,
	63778 - 63744: 0xD1FA,
	63779 - 63744: 0xD1FC,
	63780 - 63744: 0xD1FD,
	63781 - 63744: 0xD1FE,
	63782 - 63744: 0xD2A2,
	63783 - 63744: 0xD2A3,
	63784 - 63744: 0xD2A7,
	63785 - 63744: 0xD2A8,
	63786 - 63744: 0xD2A9,
	63787 - 63744: 0xD2AA,
	63788 - 63744: 0xD2AB,
	63789 - 63744: 0xD2AD,
	63790 - 63744: 0xD2B2,
	63791 - 63744: 0xD2BE,
	63792 - 63744: 0xD2C2,
	63793 - 63744: 0xD2C3,
	63794 - 63744: 0xD2C4,
	63795 - 63744: 0xD2C6,
	63796 - 63744: 0xD2C7,
	63797 - 63744: 0xD2C8,
	63798 - 63744: 0xD2C9,
	63799 - 63744: 0xD2CA,
	63800 - 63744: 0xD2CB,
	63801 - 63744: 0xD2CD,
	63802 - 63744: 0xD2CE,
	63803 - 63744: 0xD2CF,
	63804 - 63744: 0xD2D0,
	63805 - 63744: 0xD2D1,
	63806 - 63744: 0xD2D2,
	63807 - 63744: 0xD2D3,
	63808 - 63744: 0xD2D4,
	63809 - 63744: 0xD2D5,
	63810 - 63744: 0xD2D6,
	63811 - 63744: 0xD2D7,
	63812 - 63744: 0xD2D9,
	63813 - 63744: 0xD2DA,
	63814 - 63744: 0xD2DE,
	63815 - 63744: 0xD2DF,
	63816 - 63744: 0xD2E1,
	63817 - 63744: 0xD2E2,
	63818 - 63744: 0xD2E4,
	63819 - 63744: 0xD2E5,
	63820 - 63744: 0xD2E6,
	63821 - 63744: 0xD2E7,
	63822 - 63744: 0xD2E8,
	63823 - 63744: 0xD2E9,
	63824 - 63744: 0xD2EA,
	63825 - 63744: 0xD2EB,
	63826 - 63744: 0xD2F0,
	63827 - 63744: 0xD2F1,
	63828 - 63744: 0xD2F2,
	63829 - 63744: 0xD2F3,
	63830 - 63744: 0xD2F4,
	63831 - 63744: 0xD2F5,
	63832 - 63744: 0xD2F7,
	63833 - 63744: 0xD2F8,
	63834 - 63744: 0xD4E6,
	63835 - 63744: 0xD4FC,
	63836 - 63744: 0xD5A5,
	63837 - 63744: 0xD5AB,
	63838 - 63744: 0xD5AE,
	63839 - 63744: 0xD6B8,
	63840 - 63744: 0xD6CD,
	63841 - 63744: 0xD7CB,
	63842 - 63744: 0xD7E4,
	63843 - 63744: 0xDBC5,
	63844 - 63744: 0xDBE4,
	63845 - 63744: 0xDCA5,
	63846 - 63744: 0xDDA5,
	63847 - 63744: 0xDDD5,
	63848 - 63744: 0xDDF4,
	63849 - 63744: 0xDEFC,
	63850 - 63744: 0xDEFE,
	63851 - 63744: 0xDFB3,
	63852 - 63744: 0xDFE1,
	63853 - 63744: 0xDFE8,
	63854 - 63744: 0xE0F1,
	63855 - 63744: 0xE1AD,
	63856 - 63744: 0xE1ED,
	63857 - 63744: 0xE3F5,
	63858 - 63744: 0xE4A1,
	63859 - 63744: 0xE4A9,
	63860 - 63744: 0xE5AE,
	63861 - 63744: 0xE5B1,
	63862 - 63744: 0xE5B2,
	63863 - 63744: 0xE5B9,
	63864 - 63744: 0xE5BB,
	63865 - 63744: 0xE5BC,
	63866 - 63744: 0xE5C4,
	63867 - 63744: 0xE5CE,
	63868 - 63744: 0xE5D0,
	63869 - 63744: 0xE5D2,
	63870 - 63744: 0xE5D6,
	63871 - 63744: 0xE5FA,
	63872 - 63744: 0xE5FB,
	63873 - 63744: 0xE5FC,
	63874 - 63744: 0xE5FE,
	63875 - 63744: 0xE6A1,
	63876 - 63744: 0xE6A4,
	63877 - 63744: 0xE6A7,
	63878 - 63744: 0xE6AD,
	63879 - 63744: 0xE6AF,
	63880 - 63744: 0xE6B0,
	63881 - 63744: 0xE6B1,
	63882 - 63744: 0xE6B3,
	63883 - 63744: 0xE6B7,
	63884 - 63744: 0xE6B8,
	63885 - 63744: 0xE6BC,
	63886 - 63744: 0xE6C4,
	63887 - 63744: 0xE6C6,
	63888 - 63744: 0xE6C7,
	63889 - 63744: 0xE6CA,
	63890 - 63744: 0xE6D2,
	63891 - 63744: 0xE6D6,
	63892 - 63744: 0xE6D9,
	63893 - 63744: 0xE6DC,
	63894 - 63744: 0xE6DF,
	63895 - 63744: 0xE6E1,
	63896 - 63744: 0xE6E4,
	63897 - 63744: 0xE6E5,
	63898 - 63744: 0xE6E6,
	63899 - 63744: 0xE6E8,
	63900 - 63744: 0xE6EA,
	63901 - 63744: 0xE6EB,
	63902 - 63744: 0xE6EC,
	63903 - 63744: 0xE6EF,
	63904 - 63744: 0xE6F1,
	63905 - 63744: 0xE6F2,
	63906 - 63744: 0xE6F5,
	63907 - 63744: 0xE6F6,
	63908 - 63744: 0xE6F7,
	63909 - 63744: 0xE6F9,
	63910 - 63744: 0xE7A1,
	63911 - 63744: 0xE7A6,
	63912 - 63744: 0xE7A9,
	63913 - 63744: 0xE7AA,
	63914 - 63744: 0xE7AC,
	63915 - 63744: 0xE7AD,
	63916 - 63744: 0xE7B0,
	63917 - 63744: 0xE7BF,
	63918 - 63744: 0xE7C1,
	63919 - 63744: 0xE7C6,
	63920 - 63744: 0xE7C7,
	63921 - 63744: 0xE7CB,
	63922 - 63744: 0xE7CD,
	63923 - 63744: 0xE7CF,
	63924 - 63744: 0xE7D0,
	63925 - 63744: 0xE7D3,
	63926 - 63744: 0xE7DF,
	63927 - 63744: 0xE7E4,
	63928 - 63744: 0xE7E6,
	63929 - 63744: 0xE7F7,
	63930 - 63744: 0xE8E7,
	63931 - 63744: 0xE8E8,
	63932 - 63744: 0xE8F0,
	63933 - 63744: 0xE8F1,
	63934 - 63744: 0xE8F7,
	63935 - 63744: 0xE8F9,
	63936 - 63744: 0xE8FB,
	63937 - 63744: 0xE8FE,
	63938 - 63744: 0xE9A7,
	63939 - 63744: 0xE9AC,
	63940 - 63744: 0xE9CC,
	63941 - 63744: 0xE9F7,
	63942 - 63744: 0xEAC1,
	63943 - 63744: 0xEAE5,
	63944 - 63744: 0xEAF4,
	63945 - 63744: 0xEAF7,
	63946 - 63744: 0xEAFC,
	63947 - 63744: 0xEAFE,
	63948 - 63744: 0xEBA4,
	63949 - 63744: 0xEBA7,
	63950 - 63744: 0xEBA9,
	63951 - 63744: 0xEBAA,
	63952 - 63744: 0xEBBA,
	63953 - 63744: 0xEBBB,
	63954 - 63744: 0xEBBD,
	63955 - 63744: 0xEBC1,
	63956 - 63744: 0xEBC2,
	63957 - 63744: 0xEBC6,
	63958 - 63744: 0xEBC7,
	63959 - 63744: 0xEBCC,
	63960 - 63744: 0xEBCF,
	63961 - 63744: 0xEBD0,
	63962 - 63744: 0xEBD1,
	63963 - 63744: 0xEBD2,
	63964 - 63744: 0xEBD8,
	63965 - 63744: 0xECA6,
	63966 - 63744: 0xECA7,
	63967 - 63744: 0xECAA,
	63968 - 63744: 0xECAF,
	63969 - 63744: 0xECB0,
	63970 - 63744: 0xECB1,
	63971 - 63744: 0xECB2,
	63972 - 63744: 0xECB5,
	63973 - 63744: 0xECB8,
	63974 - 63744: 0xECBA,
	63975 - 63744: 0xECC0,
	63976 - 63744: 0xECC1,
	63977 - 63744: 0xECC5,
	63978 - 63744: 0xECC6,
	63979 - 63744: 0xECC9,
	63980 - 63744: 0xECCA,
	63981 - 63744: 0xECD5,
	63982 - 63744: 0xECDD,
	63983 - 63744: 0xECDE,
	63984 - 63744: 0xECE1,
	63985 - 63744: 0xECE4,
	63986 - 63744: 0xECE7,
	63987 - 63744: 0xECE8,
	63988 - 63744: 0xECF7,
	63989 - 63744: 0xECF8,
	63990 - 63744: 0xECFA,
	63991 - 63744: 0xEDA1,
	63992 - 63744: 0xEDA2,
	63993 - 63744: 0xEDA3,
	63994 - 63744: 0xEDEE,
	63995 - 63744: 0xEEDB,
	63996 - 63744: 0xF2BD,
	63997 - 63744: 0xF2FA,
	63998 - 63744: 0xF3B1,
	63999 - 63744: 0xF4A7,
	64000 - 63744: 0xF4EE,
	64001 - 63744: 0xF6F4,
	64002 - 63744: 0xF6F6,
	64003 - 63744: 0xF7B8,
	64004 - 63744: 0xF7C8,
	64005 - 63744: 0xF7D3,
	64006 - 63744: 0xF8DB,
	64007 - 63744: 0xF8F0,
	64008 - 63744: 0xFAA1,
	64009 - 63744: 0xFAA2,
	64010 - 63744: 0xFAE6,
	64011 - 63744: 0xFCA9,
}

const encode6Low, encode6High = 65281, 65511

var encode6 = [...]uint16{
	65281 - 65281: 0xA3A1,
	65282 - 65281: 0xA3A2,
	65283 - 65281: 0xA3A3,
	65284 - 65281: 0xA3A4,
	65285 - 65281: 0xA3A5,
	65286 - 65281: 0xA3A6,
	65287 - 65281: 0xA3A7,
	65288 - 65281: 0xA3A8,
	65289 - 65281: 0xA3A9,
	65290 - 65281: 0xA3AA,
	65291 - 65281: 0xA3AB,
	65292 - 65281: 0xA3AC,
	65293 - 65281: 0xA3AD,
	65294 - 65281: 0xA3AE,
	65295 - 65281: 0xA3AF,
	65296 - 65281: 0xA3B0,
	65297 - 65281: 0xA3B1,
	65298 - 65281: 0xA3B2,
	65299 - 65281: 0xA3B3,
	65300 - 65281: 0xA3B4,
	65301 - 65281: 0xA3B5,
	65302 - 65281: 0xA3B6,
	65303 - 65281: 0xA3B7,
	65304 - 65281: 0xA3B8,
	65305 - 65281: 0xA3B9,
	65306 - 65281: 0xA3BA,
	65307 - 65281: 0xA3BB,
	65308 - 65281: 0xA3BC,
	65309 - 65281: 0xA3BD,
	65310 - 65281: 0xA3BE,
	65311 - 65281: 0xA3BF,
	65312 - 65281: 0xA3C0,
	65313 - 65281: 0xA3C1,
	65314 - 65281: 0xA3C2,
	65315 - 65281: 0xA3C3,
	65316 - 65281: 0xA3C4,
	65317 - 65281: 0xA3C5,
	65318 - 65281: 0xA3C6,
	65319 - 65281: 0xA3C7,
	65320 - 65281: 0xA3C8,
	65321 - 65281: 0xA3C9,
	65322 - 65281: 0xA3CA,
	65323 - 65281: 0xA3CB,
	65324 - 65281: 0xA3CC,
	65325 - 65281: 0xA3CD,
	65326 - 65281: 0xA3CE,
	65327 - 65281: 0xA3CF,
	65328 - 65281: 0xA3D0,
	65329 - 65281: 0xA3D1,
	65330 - 65281: 0xA3D2,
	65331 - 65281: 0xA3D3,
	65332 - 65281: 0xA3D4,
	65333 - 65281: 0xA3D5,
	65334 - 65281: 0xA3D6,
	65335 - 65281: 0xA3D7,
	65336 - 65281: 0xA3D8,
	65337 - 65281: 0xA3D9,
	65338 - 65281: 0xA3DA,
	65339 - 65281: 0xA3DB,
	65340 - 65281: 0xA1AC,
	65341 - 65281: 0xA3DD,
	65342 - 65281: 0xA3DE,
	65343 - 65281: 0xA3DF,
	65344 - 65281: 0xA3E0,
	65345 - 65281: 0xA3E1,
	65346 - 65281: 0xA3E2,
	65347 - 65281: 0xA3E3,
	65348 - 65281: 0xA3E4,
	65349 - 65281: 0xA3E5,
	65350 - 65281: 0xA3E6,
	65351 - 65281: 0xA3E7,
	65352 - 65281: 0xA3E8,
	65353 - 65281: 0xA3E9,
	65354 - 65281: 0xA3EA,
	65355 - 65281: 0xA3EB,
	65356 - 65281: 0xA3EC,
	65357 - 65281: 0xA3ED,
	65358 - 65281: 0xA3EE,
	65359 - 65281: 0xA3EF,
	65360 - 65281: 0xA3F0,
	65361 - 65281: 0xA3F1,
	65362 - 65281: 0xA3F2,
	65363 - 65281: 0xA3F3,
	65364 - 65281: 0xA3F4,
	65365 - 65281: 0xA3F5,
	65366 - 65281: 0xA3F6,
	65367 - 65281: 0xA3F7,
	65368 - 65281: 0xA3F8,
	65369 - 65281: 0xA3F9,
	65370 - 65281: 0xA3FA,
	65371 - 65281: 0xA3FB,
	65372 - 65281: 0xA3FC,
	65373 - 65281: 0xA3FD,
	65374 - 65281: 0xA2A6,
	65504 - 65281: 0xA1CB,
	65505 - 65281: 0xA1CC,
	65506 - 65281: 0xA1FE,
	65507 - 65281: 0xA3FE,
	65509 - 65281: 0xA1CD,
	65510 - 65281: 0xA3DC,
}
07070100000F0B000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/simplifiedchinese   07070100000F0C000081A4000000000000000000000001645E367C00000156000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/simplifiedchinese/all.go    // Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package simplifiedchinese

import (
	"golang.org/x/text/encoding"
)

// All is a list of all defined encodings in this package.
var All = []encoding.Encoding{GB18030, GBK, HZGB2312}
  07070100000F0D000081A4000000000000000000000001645E367C000018F5000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/simplifiedchinese/gbk.go    // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package simplifiedchinese

import (
	"unicode/utf8"

	"golang.org/x/text/encoding"
	"golang.org/x/text/encoding/internal"
	"golang.org/x/text/encoding/internal/identifier"
	"golang.org/x/text/transform"
)

var (
	// GB18030 is the GB18030 encoding.
	GB18030 encoding.Encoding = &gbk18030
	// GBK is the GBK encoding. It encodes an extension of the GB2312 character set
	// and is also known as Code Page 936.
	GBK encoding.Encoding = &gbk
)

var gbk = internal.Encoding{
	&internal.SimpleEncoding{
		gbkDecoder{gb18030: false},
		gbkEncoder{gb18030: false},
	},
	"GBK",
	identifier.GBK,
}

var gbk18030 = internal.Encoding{
	&internal.SimpleEncoding{
		gbkDecoder{gb18030: true},
		gbkEncoder{gb18030: true},
	},
	"GB18030",
	identifier.GB18030,
}

type gbkDecoder struct {
	transform.NopResetter
	gb18030 bool
}

func (d gbkDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	r, size := rune(0), 0
loop:
	for ; nSrc < len(src); nSrc += size {
		switch c0 := src[nSrc]; {
		case c0 < utf8.RuneSelf:
			r, size = rune(c0), 1

		// Microsoft's Code Page 936 extends GBK 1.0 to encode the euro sign U+20AC
		// as 0x80. The HTML5 specification at http://encoding.spec.whatwg.org/#gbk
		// says to treat "gbk" as Code Page 936.
		// GBK’s decoder is gb18030’s decoder. https://encoding.spec.whatwg.org/#gbk-decoder
		// If byte is 0x80, return code point U+20AC. https://encoding.spec.whatwg.org/#gb18030-decoder
		case c0 == 0x80:
			r, size = '€', 1

		case c0 < 0xff:
			if nSrc+1 >= len(src) {
				if !atEOF {
					err = transform.ErrShortSrc
					break loop
				}
				r, size = utf8.RuneError, 1
				goto write
			}
			c1 := src[nSrc+1]
			switch {
			case 0x40 <= c1 && c1 < 0x7f:
				c1 -= 0x40
			case 0x80 <= c1 && c1 < 0xff:
				c1 -= 0x41
			case d.gb18030 && 0x30 <= c1 && c1 < 0x40:
				if nSrc+3 >= len(src) {
					if !atEOF {
						err = transform.ErrShortSrc
						break loop
					}
					// The second byte here is always ASCII, so we can set size
					// to 1 in all cases.
					r, size = utf8.RuneError, 1
					goto write
				}
				c2 := src[nSrc+2]
				if c2 < 0x81 || 0xff <= c2 {
					r, size = utf8.RuneError, 1
					goto write
				}
				c3 := src[nSrc+3]
				if c3 < 0x30 || 0x3a <= c3 {
					r, size = utf8.RuneError, 1
					goto write
				}
				size = 4
				r = ((rune(c0-0x81)*10+rune(c1-0x30))*126+rune(c2-0x81))*10 + rune(c3-0x30)
				if r < 39420 {
					i, j := 0, len(gb18030)
					for i < j {
						h := i + (j-i)/2
						if r >= rune(gb18030[h][0]) {
							i = h + 1
						} else {
							j = h
						}
					}
					dec := &gb18030[i-1]
					r += rune(dec[1]) - rune(dec[0])
					goto write
				}
				r -= 189000
				if 0 <= r && r < 0x100000 {
					r += 0x10000
				} else {
					r, size = utf8.RuneError, 1
				}
				goto write
			default:
				r, size = utf8.RuneError, 1
				goto write
			}
			r, size = '\ufffd', 2
			if i := int(c0-0x81)*190 + int(c1); i < len(decode) {
				r = rune(decode[i])
				if r == 0 {
					r = '\ufffd'
				}
			}

		default:
			r, size = utf8.RuneError, 1
		}

	write:
		if nDst+utf8.RuneLen(r) > len(dst) {
			err = transform.ErrShortDst
			break loop
		}
		nDst += utf8.EncodeRune(dst[nDst:], r)
	}
	return nDst, nSrc, err
}

type gbkEncoder struct {
	transform.NopResetter
	gb18030 bool
}

func (e gbkEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	r, r2, size := rune(0), rune(0), 0
	for ; nSrc < len(src); nSrc += size {
		r = rune(src[nSrc])

		// Decode a 1-byte rune.
		if r < utf8.RuneSelf {
			size = 1

		} else {
			// Decode a multi-byte rune.
			r, size = utf8.DecodeRune(src[nSrc:])
			if size == 1 {
				// All valid runes of size 1 (those below utf8.RuneSelf) were
				// handled above. We have invalid UTF-8 or we haven't seen the
				// full character yet.
				if !atEOF && !utf8.FullRune(src[nSrc:]) {
					err = transform.ErrShortSrc
					break
				}
			}

			// func init checks that the switch covers all tables.
			switch {
			case encode0Low <= r && r < encode0High:
				if r2 = rune(encode0[r-encode0Low]); r2 != 0 {
					goto write2
				}
			case encode1Low <= r && r < encode1High:
				// Microsoft's Code Page 936 extends GBK 1.0 to encode the euro sign U+20AC
				// as 0x80. The HTML5 specification at http://encoding.spec.whatwg.org/#gbk
				// says to treat "gbk" as Code Page 936.
				// GBK’s encoder is gb18030’s encoder with its _is GBK_ set to true. https://encoding.spec.whatwg.org/#gbk-encoder
				// If _is GBK_ is true and code point is U+20AC, return byte 0x80. https://encoding.spec.whatwg.org/#gb18030-encoder
				if !e.gb18030 && r == '€' {
					r = 0x80
					goto write1
				}
				if r2 = rune(encode1[r-encode1Low]); r2 != 0 {
					goto write2
				}
			case encode2Low <= r && r < encode2High:
				if r2 = rune(encode2[r-encode2Low]); r2 != 0 {
					goto write2
				}
			case encode3Low <= r && r < encode3High:
				if r2 = rune(encode3[r-encode3Low]); r2 != 0 {
					goto write2
				}
			case encode4Low <= r && r < encode4High:
				if r2 = rune(encode4[r-encode4Low]); r2 != 0 {
					goto write2
				}
			}

			if e.gb18030 {
				if r < 0x10000 {
					i, j := 0, len(gb18030)
					for i < j {
						h := i + (j-i)/2
						if r >= rune(gb18030[h][1]) {
							i = h + 1
						} else {
							j = h
						}
					}
					dec := &gb18030[i-1]
					r += rune(dec[0]) - rune(dec[1])
					goto write4
				} else if r < 0x110000 {
					r += 189000 - 0x10000
					goto write4
				}
			}
			err = internal.ErrASCIIReplacement
			break
		}

	write1:
		if nDst >= len(dst) {
			err = transform.ErrShortDst
			break
		}
		dst[nDst] = uint8(r)
		nDst++
		continue

	write2:
		if nDst+2 > len(dst) {
			err = transform.ErrShortDst
			break
		}
		dst[nDst+0] = uint8(r2 >> 8)
		dst[nDst+1] = uint8(r2)
		nDst += 2
		continue

	write4:
		if nDst+4 > len(dst) {
			err = transform.ErrShortDst
			break
		}
		dst[nDst+3] = uint8(r%10 + 0x30)
		r /= 10
		dst[nDst+2] = uint8(r%126 + 0x81)
		r /= 126
		dst[nDst+1] = uint8(r%10 + 0x30)
		r /= 10
		dst[nDst+0] = uint8(r + 0x81)
		nDst += 4
		continue
	}
	return nDst, nSrc, err
}

func init() {
	// Check that the hard-coded encode switch covers all tables.
	if numEncodeTables != 5 {
		panic("bad numEncodeTables")
	}
}
   07070100000F0E000081A4000000000000000000000001645E367C00001425000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.go   // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package simplifiedchinese

import (
	"unicode/utf8"

	"golang.org/x/text/encoding"
	"golang.org/x/text/encoding/internal"
	"golang.org/x/text/encoding/internal/identifier"
	"golang.org/x/text/transform"
)

// HZGB2312 is the HZ-GB2312 encoding.
var HZGB2312 encoding.Encoding = &hzGB2312

var hzGB2312 = internal.Encoding{
	internal.FuncEncoding{hzGB2312NewDecoder, hzGB2312NewEncoder},
	"HZ-GB2312",
	identifier.HZGB2312,
}

func hzGB2312NewDecoder() transform.Transformer {
	return new(hzGB2312Decoder)
}

func hzGB2312NewEncoder() transform.Transformer {
	return new(hzGB2312Encoder)
}

const (
	asciiState = iota
	gbState
)

type hzGB2312Decoder int

func (d *hzGB2312Decoder) Reset() {
	*d = asciiState
}

func (d *hzGB2312Decoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	r, size := rune(0), 0
loop:
	for ; nSrc < len(src); nSrc += size {
		c0 := src[nSrc]
		if c0 >= utf8.RuneSelf {
			r, size = utf8.RuneError, 1
			goto write
		}

		if c0 == '~' {
			if nSrc+1 >= len(src) {
				if !atEOF {
					err = transform.ErrShortSrc
					break loop
				}
				r, size = utf8.RuneError, 1
				goto write
			}
			size = 2
			switch src[nSrc+1] {
			case '{':
				*d = gbState
				continue
			case '}':
				*d = asciiState
				continue
			case '~':
				if nDst >= len(dst) {
					err = transform.ErrShortDst
					break loop
				}
				dst[nDst] = '~'
				nDst++
				continue
			case '\n':
				continue
			default:
				r = utf8.RuneError
				goto write
			}
		}

		if *d == asciiState {
			r, size = rune(c0), 1
		} else {
			if nSrc+1 >= len(src) {
				if !atEOF {
					err = transform.ErrShortSrc
					break loop
				}
				r, size = utf8.RuneError, 1
				goto write
			}
			size = 2
			c1 := src[nSrc+1]
			if c0 < 0x21 || 0x7e <= c0 || c1 < 0x21 || 0x7f <= c1 {
				// error
			} else if i := int(c0-0x01)*190 + int(c1+0x3f); i < len(decode) {
				r = rune(decode[i])
				if r != 0 {
					goto write
				}
			}
			if c1 > utf8.RuneSelf {
				// Be consistent and always treat non-ASCII as a single error.
				size = 1
			}
			r = utf8.RuneError
		}

	write:
		if nDst+utf8.RuneLen(r) > len(dst) {
			err = transform.ErrShortDst
			break loop
		}
		nDst += utf8.EncodeRune(dst[nDst:], r)
	}
	return nDst, nSrc, err
}

type hzGB2312Encoder int

func (d *hzGB2312Encoder) Reset() {
	*d = asciiState
}

func (e *hzGB2312Encoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	r, size := rune(0), 0
	for ; nSrc < len(src); nSrc += size {
		r = rune(src[nSrc])

		// Decode a 1-byte rune.
		if r < utf8.RuneSelf {
			size = 1
			if r == '~' {
				if nDst+2 > len(dst) {
					err = transform.ErrShortDst
					break
				}
				dst[nDst+0] = '~'
				dst[nDst+1] = '~'
				nDst += 2
				continue
			} else if *e != asciiState {
				if nDst+3 > len(dst) {
					err = transform.ErrShortDst
					break
				}
				*e = asciiState
				dst[nDst+0] = '~'
				dst[nDst+1] = '}'
				nDst += 2
			} else if nDst >= len(dst) {
				err = transform.ErrShortDst
				break
			}
			dst[nDst] = uint8(r)
			nDst += 1
			continue

		}

		// Decode a multi-byte rune.
		r, size = utf8.DecodeRune(src[nSrc:])
		if size == 1 {
			// All valid runes of size 1 (those below utf8.RuneSelf) were
			// handled above. We have invalid UTF-8 or we haven't seen the
			// full character yet.
			if !atEOF && !utf8.FullRune(src[nSrc:]) {
				err = transform.ErrShortSrc
				break
			}
		}

		// func init checks that the switch covers all tables.
		switch {
		case encode0Low <= r && r < encode0High:
			if r = rune(encode0[r-encode0Low]); r != 0 {
				goto writeGB
			}
		case encode1Low <= r && r < encode1High:
			if r = rune(encode1[r-encode1Low]); r != 0 {
				goto writeGB
			}
		case encode2Low <= r && r < encode2High:
			if r = rune(encode2[r-encode2Low]); r != 0 {
				goto writeGB
			}
		case encode3Low <= r && r < encode3High:
			if r = rune(encode3[r-encode3Low]); r != 0 {
				goto writeGB
			}
		case encode4Low <= r && r < encode4High:
			if r = rune(encode4[r-encode4Low]); r != 0 {
				goto writeGB
			}
		}

	terminateInASCIIState:
		// Switch back to ASCII state in case of error so that an ASCII
		// replacement character can be written in the correct state.
		if *e != asciiState {
			if nDst+2 > len(dst) {
				err = transform.ErrShortDst
				break
			}
			dst[nDst+0] = '~'
			dst[nDst+1] = '}'
			nDst += 2
		}
		err = internal.ErrASCIIReplacement
		break

	writeGB:
		c0 := uint8(r>>8) - 0x80
		c1 := uint8(r) - 0x80
		if c0 < 0x21 || 0x7e <= c0 || c1 < 0x21 || 0x7f <= c1 {
			goto terminateInASCIIState
		}
		if *e == asciiState {
			if nDst+4 > len(dst) {
				err = transform.ErrShortDst
				break
			}
			*e = gbState
			dst[nDst+0] = '~'
			dst[nDst+1] = '{'
			nDst += 2
		} else if nDst+2 > len(dst) {
			err = transform.ErrShortDst
			break
		}
		dst[nDst+0] = c0
		dst[nDst+1] = c1
		nDst += 2
		continue
	}
	// TODO: should one always terminate in ASCII state to make it safe to
	// concatenate two HZ-GB2312-encoded strings?
	return nDst, nSrc, err
}
   07070100000F0F000081A4000000000000000000000001645E367C000D699E000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/simplifiedchinese/tables.go // generated by go run maketables.go; DO NOT EDIT

// Package simplifiedchinese provides Simplified Chinese encodings such as GBK.
package simplifiedchinese // import "golang.org/x/text/encoding/simplifiedchinese"

// gb18030 is the table from http://encoding.spec.whatwg.org/index-gb18030.txt
var gb18030 = [...][2]uint16{
	{0x0000, 0x0080},
	{0x0024, 0x00a5},
	{0x0026, 0x00a9},
	{0x002d, 0x00b2},
	{0x0032, 0x00b8},
	{0x0051, 0x00d8},
	{0x0059, 0x00e2},
	{0x005f, 0x00eb},
	{0x0060, 0x00ee},
	{0x0064, 0x00f4},
	{0x0067, 0x00f8},
	{0x0068, 0x00fb},
	{0x0069, 0x00fd},
	{0x006d, 0x0102},
	{0x007e, 0x0114},
	{0x0085, 0x011c},
	{0x0094, 0x012c},
	{0x00ac, 0x0145},
	{0x00af, 0x0149},
	{0x00b3, 0x014e},
	{0x00d0, 0x016c},
	{0x0132, 0x01cf},
	{0x0133, 0x01d1},
	{0x0134, 0x01d3},
	{0x0135, 0x01d5},
	{0x0136, 0x01d7},
	{0x0137, 0x01d9},
	{0x0138, 0x01db},
	{0x0139, 0x01dd},
	{0x0155, 0x01fa},
	{0x01ac, 0x0252},
	{0x01bb, 0x0262},
	{0x0220, 0x02c8},
	{0x0221, 0x02cc},
	{0x022e, 0x02da},
	{0x02e5, 0x03a2},
	{0x02e6, 0x03aa},
	{0x02ed, 0x03c2},
	{0x02ee, 0x03ca},
	{0x0325, 0x0402},
	{0x0333, 0x0450},
	{0x0334, 0x0452},
	{0x1ef2, 0x2011},
	{0x1ef4, 0x2017},
	{0x1ef5, 0x201a},
	{0x1ef7, 0x201e},
	{0x1efe, 0x2027},
	{0x1f07, 0x2031},
	{0x1f08, 0x2034},
	{0x1f09, 0x2036},
	{0x1f0e, 0x203c},
	{0x1f7e, 0x20ad},
	{0x1fd4, 0x2104},
	{0x1fd5, 0x2106},
	{0x1fd8, 0x210a},
	{0x1fe4, 0x2117},
	{0x1fee, 0x2122},
	{0x202c, 0x216c},
	{0x2030, 0x217a},
	{0x2046, 0x2194},
	{0x2048, 0x219a},
	{0x20b6, 0x2209},
	{0x20bc, 0x2210},
	{0x20bd, 0x2212},
	{0x20c0, 0x2216},
	{0x20c4, 0x221b},
	{0x20c6, 0x2221},
	{0x20c8, 0x2224},
	{0x20c9, 0x2226},
	{0x20ca, 0x222c},
	{0x20cc, 0x222f},
	{0x20d1, 0x2238},
	{0x20d6, 0x223e},
	{0x20e0, 0x2249},
	{0x20e3, 0x224d},
	{0x20e8, 0x2253},
	{0x20f5, 0x2262},
	{0x20f7, 0x2268},
	{0x20fd, 0x2270},
	{0x2122, 0x2296},
	{0x2125, 0x229a},
	{0x2130, 0x22a6},
	{0x2149, 0x22c0},
	{0x219b, 0x2313},
	{0x22e8, 0x246a},
	{0x22f2, 0x249c},
	{0x2356, 0x254c},
	{0x235a, 0x2574},
	{0x2367, 0x2590},
	{0x236a, 0x2596},
	{0x2374, 0x25a2},
	{0x2384, 0x25b4},
	{0x238c, 0x25be},
	{0x2394, 0x25c8},
	{0x2397, 0x25cc},
	{0x2399, 0x25d0},
	{0x23ab, 0x25e6},
	{0x23ca, 0x2607},
	{0x23cc, 0x260a},
	{0x2402, 0x2641},
	{0x2403, 0x2643},
	{0x2c41, 0x2e82},
	{0x2c43, 0x2e85},
	{0x2c46, 0x2e89},
	{0x2c48, 0x2e8d},
	{0x2c52, 0x2e98},
	{0x2c61, 0x2ea8},
	{0x2c63, 0x2eab},
	{0x2c66, 0x2eaf},
	{0x2c6a, 0x2eb4},
	{0x2c6c, 0x2eb8},
	{0x2c6f, 0x2ebc},
	{0x2c7d, 0x2ecb},
	{0x2da2, 0x2ffc},
	{0x2da6, 0x3004},
	{0x2da7, 0x3018},
	{0x2dac, 0x301f},
	{0x2dae, 0x302a},
	{0x2dc2, 0x303f},
	{0x2dc4, 0x3094},
	{0x2dcb, 0x309f},
	{0x2dcd, 0x30f7},
	{0x2dd2, 0x30ff},
	{0x2dd8, 0x312a},
	{0x2ece, 0x322a},
	{0x2ed5, 0x3232},
	{0x2f46, 0x32a4},
	{0x3030, 0x3390},
	{0x303c, 0x339f},
	{0x303e, 0x33a2},
	{0x3060, 0x33c5},
	{0x3069, 0x33cf},
	{0x306b, 0x33d3},
	{0x306d, 0x33d6},
	{0x30de, 0x3448},
	{0x3109, 0x3474},
	{0x3233, 0x359f},
	{0x32a2, 0x360f},
	{0x32ad, 0x361b},
	{0x35aa, 0x3919},
	{0x35ff, 0x396f},
	{0x365f, 0x39d1},
	{0x366d, 0x39e0},
	{0x3700, 0x3a74},
	{0x37da, 0x3b4f},
	{0x38f9, 0x3c6f},
	{0x396a, 0x3ce1},
	{0x3cdf, 0x4057},
	{0x3de7, 0x4160},
	{0x3fbe, 0x4338},
	{0x4032, 0x43ad},
	{0x4036, 0x43b2},
	{0x4061, 0x43de},
	{0x4159, 0x44d7},
	{0x42ce, 0x464d},
	{0x42e2, 0x4662},
	{0x43a3, 0x4724},
	{0x43a8, 0x472a},
	{0x43fa, 0x477d},
	{0x440a, 0x478e},
	{0x45c3, 0x4948},
	{0x45f5, 0x497b},
	{0x45f7, 0x497e},
	{0x45fb, 0x4984},
	{0x45fc, 0x4987},
	{0x4610, 0x499c},
	{0x4613, 0x49a0},
	{0x4629, 0x49b8},
	{0x48e8, 0x4c78},
	{0x490f, 0x4ca4},
	{0x497e, 0x4d1a},
	{0x4a12, 0x4daf},
	{0x4a63, 0x9fa6},
	{0x82bd, 0xe76c},
	{0x82be, 0xe7c8},
	{0x82bf, 0xe7e7},
	{0x82cc, 0xe815},
	{0x82cd, 0xe819},
	{0x82d2, 0xe81f},
	{0x82d9, 0xe827},
	{0x82dd, 0xe82d},
	{0x82e1, 0xe833},
	{0x82e9, 0xe83c},
	{0x82f0, 0xe844},
	{0x8300, 0xe856},
	{0x830e, 0xe865},
	{0x93d5, 0xf92d},
	{0x9421, 0xf97a},
	{0x943c, 0xf996},
	{0x948d, 0xf9e8},
	{0x9496, 0xf9f2},
	{0x94b0, 0xfa10},
	{0x94b1, 0xfa12},
	{0x94b2, 0xfa15},
	{0x94b5, 0xfa19},
	{0x94bb, 0xfa22},
	{0x94bc, 0xfa25},
	{0x94be, 0xfa2a},
	{0x98c4, 0xfe32},
	{0x98c5, 0xfe45},
	{0x98c9, 0xfe53},
	{0x98ca, 0xfe58},
	{0x98cb, 0xfe67},
	{0x98cc, 0xfe6c},
	{0x9961, 0xff5f},
	{0x99e2, 0xffe6},
}

// decode is the decoding table from GBK code to Unicode.
// It is defined at http://encoding.spec.whatwg.org/index-gbk.txt
var decode = [...]uint16{
	0:     0x4E02,
	1:     0x4E04,
	2:     0x4E05,
	3:     0x4E06,
	4:     0x4E0F,
	5:     0x4E12,
	6:     0x4E17,
	7:     0x4E1F,
	8:     0x4E20,
	9:     0x4E21,
	10:    0x4E23,
	11:    0x4E26,
	12:    0x4E29,
	13:    0x4E2E,
	14:    0x4E2F,
	15:    0x4E31,
	16:    0x4E33,
	17:    0x4E35,
	18:    0x4E37,
	19:    0x4E3C,
	20:    0x4E40,
	21:    0x4E41,
	22:    0x4E42,
	23:    0x4E44,
	24:    0x4E46,
	25:    0x4E4A,
	26:    0x4E51,
	27:    0x4E55,
	28:    0x4E57,
	29:    0x4E5A,
	30:    0x4E5B,
	31:    0x4E62,
	32:    0x4E63,
	33:    0x4E64,
	34:    0x4E65,
	35:    0x4E67,
	36:    0x4E68,
	37:    0x4E6A,
	38:    0x4E6B,
	39:    0x4E6C,
	40:    0x4E6D,
	41:    0x4E6E,
	42:    0x4E6F,
	43:    0x4E72,
	44:    0x4E74,
	45:    0x4E75,
	46:    0x4E76,
	47:    0x4E77,
	48:    0x4E78,
	49:    0x4E79,
	50:    0x4E7A,
	51:    0x4E7B,
	52:    0x4E7C,
	53:    0x4E7D,
	54:    0x4E7F,
	55:    0x4E80,
	56:    0x4E81,
	57:    0x4E82,
	58:    0x4E83,
	59:    0x4E84,
	60:    0x4E85,
	61:    0x4E87,
	62:    0x4E8A,
	63:    0x4E90,
	64:    0x4E96,
	65:    0x4E97,
	66:    0x4E99,
	67:    0x4E9C,
	68:    0x4E9D,
	69:    0x4E9E,
	70:    0x4EA3,
	71:    0x4EAA,
	72:    0x4EAF,
	73:    0x4EB0,
	74:    0x4EB1,
	75:    0x4EB4,
	76:    0x4EB6,
	77:    0x4EB7,
	78:    0x4EB8,
	79:    0x4EB9,
	80:    0x4EBC,
	81:    0x4EBD,
	82:    0x4EBE,
	83:    0x4EC8,
	84:    0x4ECC,
	85:    0x4ECF,
	86:    0x4ED0,
	87:    0x4ED2,
	88:    0x4EDA,
	89:    0x4EDB,
	90:    0x4EDC,
	91:    0x4EE0,
	92:    0x4EE2,
	93:    0x4EE6,
	94:    0x4EE7,
	95:    0x4EE9,
	96:    0x4EED,
	97:    0x4EEE,
	98:    0x4EEF,
	99:    0x4EF1,
	100:   0x4EF4,
	101:   0x4EF8,
	102:   0x4EF9,
	103:   0x4EFA,
	104:   0x4EFC,
	105:   0x4EFE,
	106:   0x4F00,
	107:   0x4F02,
	108:   0x4F03,
	109:   0x4F04,
	110:   0x4F05,
	111:   0x4F06,
	112:   0x4F07,
	113:   0x4F08,
	114:   0x4F0B,
	115:   0x4F0C,
	116:   0x4F12,
	117:   0x4F13,
	118:   0x4F14,
	119:   0x4F15,
	120:   0x4F16,
	121:   0x4F1C,
	122:   0x4F1D,
	123:   0x4F21,
	124:   0x4F23,
	125:   0x4F28,
	126:   0x4F29,
	127:   0x4F2C,
	128:   0x4F2D,
	129:   0x4F2E,
	130:   0x4F31,
	131:   0x4F33,
	132:   0x4F35,
	133:   0x4F37,
	134:   0x4F39,
	135:   0x4F3B,
	136:   0x4F3E,
	137:   0x4F3F,
	138:   0x4F40,
	139:   0x4F41,
	140:   0x4F42,
	141:   0x4F44,
	142:   0x4F45,
	143:   0x4F47,
	144:   0x4F48,
	145:   0x4F49,
	146:   0x4F4A,
	147:   0x4F4B,
	148:   0x4F4C,
	149:   0x4F52,
	150:   0x4F54,
	151:   0x4F56,
	152:   0x4F61,
	153:   0x4F62,
	154:   0x4F66,
	155:   0x4F68,
	156:   0x4F6A,
	157:   0x4F6B,
	158:   0x4F6D,
	159:   0x4F6E,
	160:   0x4F71,
	161:   0x4F72,
	162:   0x4F75,
	163:   0x4F77,
	164:   0x4F78,
	165:   0x4F79,
	166:   0x4F7A,
	167:   0x4F7D,
	168:   0x4F80,
	169:   0x4F81,
	170:   0x4F82,
	171:   0x4F85,
	172:   0x4F86,
	173:   0x4F87,
	174:   0x4F8A,
	175:   0x4F8C,
	176:   0x4F8E,
	177:   0x4F90,
	178:   0x4F92,
	179:   0x4F93,
	180:   0x4F95,
	181:   0x4F96,
	182:   0x4F98,
	183:   0x4F99,
	184:   0x4F9A,
	185:   0x4F9C,
	186:   0x4F9E,
	187:   0x4F9F,
	188:   0x4FA1,
	189:   0x4FA2,
	190:   0x4FA4,
	191:   0x4FAB,
	192:   0x4FAD,
	193:   0x4FB0,
	194:   0x4FB1,
	195:   0x4FB2,
	196:   0x4FB3,
	197:   0x4FB4,
	198:   0x4FB6,
	199:   0x4FB7,
	200:   0x4FB8,
	201:   0x4FB9,
	202:   0x4FBA,
	203:   0x4FBB,
	204:   0x4FBC,
	205:   0x4FBD,
	206:   0x4FBE,
	207:   0x4FC0,
	208:   0x4FC1,
	209:   0x4FC2,
	210:   0x4FC6,
	211:   0x4FC7,
	212:   0x4FC8,
	213:   0x4FC9,
	214:   0x4FCB,
	215:   0x4FCC,
	216:   0x4FCD,
	217:   0x4FD2,
	218:   0x4FD3,
	219:   0x4FD4,
	220:   0x4FD5,
	221:   0x4FD6,
	222:   0x4FD9,
	223:   0x4FDB,
	224:   0x4FE0,
	225:   0x4FE2,
	226:   0x4FE4,
	227:   0x4FE5,
	228:   0x4FE7,
	229:   0x4FEB,
	230:   0x4FEC,
	231:   0x4FF0,
	232:   0x4FF2,
	233:   0x4FF4,
	234:   0x4FF5,
	235:   0x4FF6,
	236:   0x4FF7,
	237:   0x4FF9,
	238:   0x4FFB,
	239:   0x4FFC,
	240:   0x4FFD,
	241:   0x4FFF,
	242:   0x5000,
	243:   0x5001,
	244:   0x5002,
	245:   0x5003,
	246:   0x5004,
	247:   0x5005,
	248:   0x5006,
	249:   0x5007,
	250:   0x5008,
	251:   0x5009,
	252:   0x500A,
	253:   0x500B,
	254:   0x500E,
	255:   0x5010,
	256:   0x5011,
	257:   0x5013,
	258:   0x5015,
	259:   0x5016,
	260:   0x5017,
	261:   0x501B,
	262:   0x501D,
	263:   0x501E,
	264:   0x5020,
	265:   0x5022,
	266:   0x5023,
	267:   0x5024,
	268:   0x5027,
	269:   0x502B,
	270:   0x502F,
	271:   0x5030,
	272:   0x5031,
	273:   0x5032,
	274:   0x5033,
	275:   0x5034,
	276:   0x5035,
	277:   0x5036,
	278:   0x5037,
	279:   0x5038,
	280:   0x5039,
	281:   0x503B,
	282:   0x503D,
	283:   0x503F,
	284:   0x5040,
	285:   0x5041,
	286:   0x5042,
	287:   0x5044,
	288:   0x5045,
	289:   0x5046,
	290:   0x5049,
	291:   0x504A,
	292:   0x504B,
	293:   0x504D,
	294:   0x5050,
	295:   0x5051,
	296:   0x5052,
	297:   0x5053,
	298:   0x5054,
	299:   0x5056,
	300:   0x5057,
	301:   0x5058,
	302:   0x5059,
	303:   0x505B,
	304:   0x505D,
	305:   0x505E,
	306:   0x505F,
	307:   0x5060,
	308:   0x5061,
	309:   0x5062,
	310:   0x5063,
	311:   0x5064,
	312:   0x5066,
	313:   0x5067,
	314:   0x5068,
	315:   0x5069,
	316:   0x506A,
	317:   0x506B,
	318:   0x506D,
	319:   0x506E,
	320:   0x506F,
	321:   0x5070,
	322:   0x5071,
	323:   0x5072,
	324:   0x5073,
	325:   0x5074,
	326:   0x5075,
	327:   0x5078,
	328:   0x5079,
	329:   0x507A,
	330:   0x507C,
	331:   0x507D,
	332:   0x5081,
	333:   0x5082,
	334:   0x5083,
	335:   0x5084,
	336:   0x5086,
	337:   0x5087,
	338:   0x5089,
	339:   0x508A,
	340:   0x508B,
	341:   0x508C,
	342:   0x508E,
	343:   0x508F,
	344:   0x5090,
	345:   0x5091,
	346:   0x5092,
	347:   0x5093,
	348:   0x5094,
	349:   0x5095,
	350:   0x5096,
	351:   0x5097,
	352:   0x5098,
	353:   0x5099,
	354:   0x509A,
	355:   0x509B,
	356:   0x509C,
	357:   0x509D,
	358:   0x509E,
	359:   0x509F,
	360:   0x50A0,
	361:   0x50A1,
	362:   0x50A2,
	363:   0x50A4,
	364:   0x50A6,
	365:   0x50AA,
	366:   0x50AB,
	367:   0x50AD,
	368:   0x50AE,
	369:   0x50AF,
	370:   0x50B0,
	371:   0x50B1,
	372:   0x50B3,
	373:   0x50B4,
	374:   0x50B5,
	375:   0x50B6,
	376:   0x50B7,
	377:   0x50B8,
	378:   0x50B9,
	379:   0x50BC,
	380:   0x50BD,
	381:   0x50BE,
	382:   0x50BF,
	383:   0x50C0,
	384:   0x50C1,
	385:   0x50C2,
	386:   0x50C3,
	387:   0x50C4,
	388:   0x50C5,
	389:   0x50C6,
	390:   0x50C7,
	391:   0x50C8,
	392:   0x50C9,
	393:   0x50CA,
	394:   0x50CB,
	395:   0x50CC,
	396:   0x50CD,
	397:   0x50CE,
	398:   0x50D0,
	399:   0x50D1,
	400:   0x50D2,
	401:   0x50D3,
	402:   0x50D4,
	403:   0x50D5,
	404:   0x50D7,
	405:   0x50D8,
	406:   0x50D9,
	407:   0x50DB,
	408:   0x50DC,
	409:   0x50DD,
	410:   0x50DE,
	411:   0x50DF,
	412:   0x50E0,
	413:   0x50E1,
	414:   0x50E2,
	415:   0x50E3,
	416:   0x50E4,
	417:   0x50E5,
	418:   0x50E8,
	419:   0x50E9,
	420:   0x50EA,
	421:   0x50EB,
	422:   0x50EF,
	423:   0x50F0,
	424:   0x50F1,
	425:   0x50F2,
	426:   0x50F4,
	427:   0x50F6,
	428:   0x50F7,
	429:   0x50F8,
	430:   0x50F9,
	431:   0x50FA,
	432:   0x50FC,
	433:   0x50FD,
	434:   0x50FE,
	435:   0x50FF,
	436:   0x5100,
	437:   0x5101,
	438:   0x5102,
	439:   0x5103,
	440:   0x5104,
	441:   0x5105,
	442:   0x5108,
	443:   0x5109,
	444:   0x510A,
	445:   0x510C,
	446:   0x510D,
	447:   0x510E,
	448:   0x510F,
	449:   0x5110,
	450:   0x5111,
	451:   0x5113,
	452:   0x5114,
	453:   0x5115,
	454:   0x5116,
	455:   0x5117,
	456:   0x5118,
	457:   0x5119,
	458:   0x511A,
	459:   0x511B,
	460:   0x511C,
	461:   0x511D,
	462:   0x511E,
	463:   0x511F,
	464:   0x5120,
	465:   0x5122,
	466:   0x5123,
	467:   0x5124,
	468:   0x5125,
	469:   0x5126,
	470:   0x5127,
	471:   0x5128,
	472:   0x5129,
	473:   0x512A,
	474:   0x512B,
	475:   0x512C,
	476:   0x512D,
	477:   0x512E,
	478:   0x512F,
	479:   0x5130,
	480:   0x5131,
	481:   0x5132,
	482:   0x5133,
	483:   0x5134,
	484:   0x5135,
	485:   0x5136,
	486:   0x5137,
	487:   0x5138,
	488:   0x5139,
	489:   0x513A,
	490:   0x513B,
	491:   0x513C,
	492:   0x513D,
	493:   0x513E,
	494:   0x5142,
	495:   0x5147,
	496:   0x514A,
	497:   0x514C,
	498:   0x514E,
	499:   0x514F,
	500:   0x5150,
	501:   0x5152,
	502:   0x5153,
	503:   0x5157,
	504:   0x5158,
	505:   0x5159,
	506:   0x515B,
	507:   0x515D,
	508:   0x515E,
	509:   0x515F,
	510:   0x5160,
	511:   0x5161,
	512:   0x5163,
	513:   0x5164,
	514:   0x5166,
	515:   0x5167,
	516:   0x5169,
	517:   0x516A,
	518:   0x516F,
	519:   0x5172,
	520:   0x517A,
	521:   0x517E,
	522:   0x517F,
	523:   0x5183,
	524:   0x5184,
	525:   0x5186,
	526:   0x5187,
	527:   0x518A,
	528:   0x518B,
	529:   0x518E,
	530:   0x518F,
	531:   0x5190,
	532:   0x5191,
	533:   0x5193,
	534:   0x5194,
	535:   0x5198,
	536:   0x519A,
	537:   0x519D,
	538:   0x519E,
	539:   0x519F,
	540:   0x51A1,
	541:   0x51A3,
	542:   0x51A6,
	543:   0x51A7,
	544:   0x51A8,
	545:   0x51A9,
	546:   0x51AA,
	547:   0x51AD,
	548:   0x51AE,
	549:   0x51B4,
	550:   0x51B8,
	551:   0x51B9,
	552:   0x51BA,
	553:   0x51BE,
	554:   0x51BF,
	555:   0x51C1,
	556:   0x51C2,
	557:   0x51C3,
	558:   0x51C5,
	559:   0x51C8,
	560:   0x51CA,
	561:   0x51CD,
	562:   0x51CE,
	563:   0x51D0,
	564:   0x51D2,
	565:   0x51D3,
	566:   0x51D4,
	567:   0x51D5,
	568:   0x51D6,
	569:   0x51D7,
	570:   0x51D8,
	571:   0x51D9,
	572:   0x51DA,
	573:   0x51DC,
	574:   0x51DE,
	575:   0x51DF,
	576:   0x51E2,
	577:   0x51E3,
	578:   0x51E5,
	579:   0x51E6,
	580:   0x51E7,
	581:   0x51E8,
	582:   0x51E9,
	583:   0x51EA,
	584:   0x51EC,
	585:   0x51EE,
	586:   0x51F1,
	587:   0x51F2,
	588:   0x51F4,
	589:   0x51F7,
	590:   0x51FE,
	591:   0x5204,
	592:   0x5205,
	593:   0x5209,
	594:   0x520B,
	595:   0x520C,
	596:   0x520F,
	597:   0x5210,
	598:   0x5213,
	599:   0x5214,
	600:   0x5215,
	601:   0x521C,
	602:   0x521E,
	603:   0x521F,
	604:   0x5221,
	605:   0x5222,
	606:   0x5223,
	607:   0x5225,
	608:   0x5226,
	609:   0x5227,
	610:   0x522A,
	611:   0x522C,
	612:   0x522F,
	613:   0x5231,
	614:   0x5232,
	615:   0x5234,
	616:   0x5235,
	617:   0x523C,
	618:   0x523E,
	619:   0x5244,
	620:   0x5245,
	621:   0x5246,
	622:   0x5247,
	623:   0x5248,
	624:   0x5249,
	625:   0x524B,
	626:   0x524E,
	627:   0x524F,
	628:   0x5252,
	629:   0x5253,
	630:   0x5255,
	631:   0x5257,
	632:   0x5258,
	633:   0x5259,
	634:   0x525A,
	635:   0x525B,
	636:   0x525D,
	637:   0x525F,
	638:   0x5260,
	639:   0x5262,
	640:   0x5263,
	641:   0x5264,
	642:   0x5266,
	643:   0x5268,
	644:   0x526B,
	645:   0x526C,
	646:   0x526D,
	647:   0x526E,
	648:   0x5270,
	649:   0x5271,
	650:   0x5273,
	651:   0x5274,
	652:   0x5275,
	653:   0x5276,
	654:   0x5277,
	655:   0x5278,
	656:   0x5279,
	657:   0x527A,
	658:   0x527B,
	659:   0x527C,
	660:   0x527E,
	661:   0x5280,
	662:   0x5283,
	663:   0x5284,
	664:   0x5285,
	665:   0x5286,
	666:   0x5287,
	667:   0x5289,
	668:   0x528A,
	669:   0x528B,
	670:   0x528C,
	671:   0x528D,
	672:   0x528E,
	673:   0x528F,
	674:   0x5291,
	675:   0x5292,
	676:   0x5294,
	677:   0x5295,
	678:   0x5296,
	679:   0x5297,
	680:   0x5298,
	681:   0x5299,
	682:   0x529A,
	683:   0x529C,
	684:   0x52A4,
	685:   0x52A5,
	686:   0x52A6,
	687:   0x52A7,
	688:   0x52AE,
	689:   0x52AF,
	690:   0x52B0,
	691:   0x52B4,
	692:   0x52B5,
	693:   0x52B6,
	694:   0x52B7,
	695:   0x52B8,
	696:   0x52B9,
	697:   0x52BA,
	698:   0x52BB,
	699:   0x52BC,
	700:   0x52BD,
	701:   0x52C0,
	702:   0x52C1,
	703:   0x52C2,
	704:   0x52C4,
	705:   0x52C5,
	706:   0x52C6,
	707:   0x52C8,
	708:   0x52CA,
	709:   0x52CC,
	710:   0x52CD,
	711:   0x52CE,
	712:   0x52CF,
	713:   0x52D1,
	714:   0x52D3,
	715:   0x52D4,
	716:   0x52D5,
	717:   0x52D7,
	718:   0x52D9,
	719:   0x52DA,
	720:   0x52DB,
	721:   0x52DC,
	722:   0x52DD,
	723:   0x52DE,
	724:   0x52E0,
	725:   0x52E1,
	726:   0x52E2,
	727:   0x52E3,
	728:   0x52E5,
	729:   0x52E6,
	730:   0x52E7,
	731:   0x52E8,
	732:   0x52E9,
	733:   0x52EA,
	734:   0x52EB,
	735:   0x52EC,
	736:   0x52ED,
	737:   0x52EE,
	738:   0x52EF,
	739:   0x52F1,
	740:   0x52F2,
	741:   0x52F3,
	742:   0x52F4,
	743:   0x52F5,
	744:   0x52F6,
	745:   0x52F7,
	746:   0x52F8,
	747:   0x52FB,
	748:   0x52FC,
	749:   0x52FD,
	750:   0x5301,
	751:   0x5302,
	752:   0x5303,
	753:   0x5304,
	754:   0x5307,
	755:   0x5309,
	756:   0x530A,
	757:   0x530B,
	758:   0x530C,
	759:   0x530E,
	760:   0x5311,
	761:   0x5312,
	762:   0x5313,
	763:   0x5314,
	764:   0x5318,
	765:   0x531B,
	766:   0x531C,
	767:   0x531E,
	768:   0x531F,
	769:   0x5322,
	770:   0x5324,
	771:   0x5325,
	772:   0x5327,
	773:   0x5328,
	774:   0x5329,
	775:   0x532B,
	776:   0x532C,
	777:   0x532D,
	778:   0x532F,
	779:   0x5330,
	780:   0x5331,
	781:   0x5332,
	782:   0x5333,
	783:   0x5334,
	784:   0x5335,
	785:   0x5336,
	786:   0x5337,
	787:   0x5338,
	788:   0x533C,
	789:   0x533D,
	790:   0x5340,
	791:   0x5342,
	792:   0x5344,
	793:   0x5346,
	794:   0x534B,
	795:   0x534C,
	796:   0x534D,
	797:   0x5350,
	798:   0x5354,
	799:   0x5358,
	800:   0x5359,
	801:   0x535B,
	802:   0x535D,
	803:   0x5365,
	804:   0x5368,
	805:   0x536A,
	806:   0x536C,
	807:   0x536D,
	808:   0x5372,
	809:   0x5376,
	810:   0x5379,
	811:   0x537B,
	812:   0x537C,
	813:   0x537D,
	814:   0x537E,
	815:   0x5380,
	816:   0x5381,
	817:   0x5383,
	818:   0x5387,
	819:   0x5388,
	820:   0x538A,
	821:   0x538E,
	822:   0x538F,
	823:   0x5390,
	824:   0x5391,
	825:   0x5392,
	826:   0x5393,
	827:   0x5394,
	828:   0x5396,
	829:   0x5397,
	830:   0x5399,
	831:   0x539B,
	832:   0x539C,
	833:   0x539E,
	834:   0x53A0,
	835:   0x53A1,
	836:   0x53A4,
	837:   0x53A7,
	838:   0x53AA,
	839:   0x53AB,
	840:   0x53AC,
	841:   0x53AD,
	842:   0x53AF,
	843:   0x53B0,
	844:   0x53B1,
	845:   0x53B2,
	846:   0x53B3,
	847:   0x53B4,
	848:   0x53B5,
	849:   0x53B7,
	850:   0x53B8,
	851:   0x53B9,
	852:   0x53BA,
	853:   0x53BC,
	854:   0x53BD,
	855:   0x53BE,
	856:   0x53C0,
	857:   0x53C3,
	858:   0x53C4,
	859:   0x53C5,
	860:   0x53C6,
	861:   0x53C7,
	862:   0x53CE,
	863:   0x53CF,
	864:   0x53D0,
	865:   0x53D2,
	866:   0x53D3,
	867:   0x53D5,
	868:   0x53DA,
	869:   0x53DC,
	870:   0x53DD,
	871:   0x53DE,
	872:   0x53E1,
	873:   0x53E2,
	874:   0x53E7,
	875:   0x53F4,
	876:   0x53FA,
	877:   0x53FE,
	878:   0x53FF,
	879:   0x5400,
	880:   0x5402,
	881:   0x5405,
	882:   0x5407,
	883:   0x540B,
	884:   0x5414,
	885:   0x5418,
	886:   0x5419,
	887:   0x541A,
	888:   0x541C,
	889:   0x5422,
	890:   0x5424,
	891:   0x5425,
	892:   0x542A,
	893:   0x5430,
	894:   0x5433,
	895:   0x5436,
	896:   0x5437,
	897:   0x543A,
	898:   0x543D,
	899:   0x543F,
	900:   0x5441,
	901:   0x5442,
	902:   0x5444,
	903:   0x5445,
	904:   0x5447,
	905:   0x5449,
	906:   0x544C,
	907:   0x544D,
	908:   0x544E,
	909:   0x544F,
	910:   0x5451,
	911:   0x545A,
	912:   0x545D,
	913:   0x545E,
	914:   0x545F,
	915:   0x5460,
	916:   0x5461,
	917:   0x5463,
	918:   0x5465,
	919:   0x5467,
	920:   0x5469,
	921:   0x546A,
	922:   0x546B,
	923:   0x546C,
	924:   0x546D,
	925:   0x546E,
	926:   0x546F,
	927:   0x5470,
	928:   0x5474,
	929:   0x5479,
	930:   0x547A,
	931:   0x547E,
	932:   0x547F,
	933:   0x5481,
	934:   0x5483,
	935:   0x5485,
	936:   0x5487,
	937:   0x5488,
	938:   0x5489,
	939:   0x548A,
	940:   0x548D,
	941:   0x5491,
	942:   0x5493,
	943:   0x5497,
	944:   0x5498,
	945:   0x549C,
	946:   0x549E,
	947:   0x549F,
	948:   0x54A0,
	949:   0x54A1,
	950:   0x54A2,
	951:   0x54A5,
	952:   0x54AE,
	953:   0x54B0,
	954:   0x54B2,
	955:   0x54B5,
	956:   0x54B6,
	957:   0x54B7,
	958:   0x54B9,
	959:   0x54BA,
	960:   0x54BC,
	961:   0x54BE,
	962:   0x54C3,
	963:   0x54C5,
	964:   0x54CA,
	965:   0x54CB,
	966:   0x54D6,
	967:   0x54D8,
	968:   0x54DB,
	969:   0x54E0,
	970:   0x54E1,
	971:   0x54E2,
	972:   0x54E3,
	973:   0x54E4,
	974:   0x54EB,
	975:   0x54EC,
	976:   0x54EF,
	977:   0x54F0,
	978:   0x54F1,
	979:   0x54F4,
	980:   0x54F5,
	981:   0x54F6,
	982:   0x54F7,
	983:   0x54F8,
	984:   0x54F9,
	985:   0x54FB,
	986:   0x54FE,
	987:   0x5500,
	988:   0x5502,
	989:   0x5503,
	990:   0x5504,
	991:   0x5505,
	992:   0x5508,
	993:   0x550A,
	994:   0x550B,
	995:   0x550C,
	996:   0x550D,
	997:   0x550E,
	998:   0x5512,
	999:   0x5513,
	1000:  0x5515,
	1001:  0x5516,
	1002:  0x5517,
	1003:  0x5518,
	1004:  0x5519,
	1005:  0x551A,
	1006:  0x551C,
	1007:  0x551D,
	1008:  0x551E,
	1009:  0x551F,
	1010:  0x5521,
	1011:  0x5525,
	1012:  0x5526,
	1013:  0x5528,
	1014:  0x5529,
	1015:  0x552B,
	1016:  0x552D,
	1017:  0x5532,
	1018:  0x5534,
	1019:  0x5535,
	1020:  0x5536,
	1021:  0x5538,
	1022:  0x5539,
	1023:  0x553A,
	1024:  0x553B,
	1025:  0x553D,
	1026:  0x5540,
	1027:  0x5542,
	1028:  0x5545,
	1029:  0x5547,
	1030:  0x5548,
	1031:  0x554B,
	1032:  0x554C,
	1033:  0x554D,
	1034:  0x554E,
	1035:  0x554F,
	1036:  0x5551,
	1037:  0x5552,
	1038:  0x5553,
	1039:  0x5554,
	1040:  0x5557,
	1041:  0x5558,
	1042:  0x5559,
	1043:  0x555A,
	1044:  0x555B,
	1045:  0x555D,
	1046:  0x555E,
	1047:  0x555F,
	1048:  0x5560,
	1049:  0x5562,
	1050:  0x5563,
	1051:  0x5568,
	1052:  0x5569,
	1053:  0x556B,
	1054:  0x556F,
	1055:  0x5570,
	1056:  0x5571,
	1057:  0x5572,
	1058:  0x5573,
	1059:  0x5574,
	1060:  0x5579,
	1061:  0x557A,
	1062:  0x557D,
	1063:  0x557F,
	1064:  0x5585,
	1065:  0x5586,
	1066:  0x558C,
	1067:  0x558D,
	1068:  0x558E,
	1069:  0x5590,
	1070:  0x5592,
	1071:  0x5593,
	1072:  0x5595,
	1073:  0x5596,
	1074:  0x5597,
	1075:  0x559A,
	1076:  0x559B,
	1077:  0x559E,
	1078:  0x55A0,
	1079:  0x55A1,
	1080:  0x55A2,
	1081:  0x55A3,
	1082:  0x55A4,
	1083:  0x55A5,
	1084:  0x55A6,
	1085:  0x55A8,
	1086:  0x55A9,
	1087:  0x55AA,
	1088:  0x55AB,
	1089:  0x55AC,
	1090:  0x55AD,
	1091:  0x55AE,
	1092:  0x55AF,
	1093:  0x55B0,
	1094:  0x55B2,
	1095:  0x55B4,
	1096:  0x55B6,
	1097:  0x55B8,
	1098:  0x55BA,
	1099:  0x55BC,
	1100:  0x55BF,
	1101:  0x55C0,
	1102:  0x55C1,
	1103:  0x55C2,
	1104:  0x55C3,
	1105:  0x55C6,
	1106:  0x55C7,
	1107:  0x55C8,
	1108:  0x55CA,
	1109:  0x55CB,
	1110:  0x55CE,
	1111:  0x55CF,
	1112:  0x55D0,
	1113:  0x55D5,
	1114:  0x55D7,
	1115:  0x55D8,
	1116:  0x55D9,
	1117:  0x55DA,
	1118:  0x55DB,
	1119:  0x55DE,
	1120:  0x55E0,
	1121:  0x55E2,
	1122:  0x55E7,
	1123:  0x55E9,
	1124:  0x55ED,
	1125:  0x55EE,
	1126:  0x55F0,
	1127:  0x55F1,
	1128:  0x55F4,
	1129:  0x55F6,
	1130:  0x55F8,
	1131:  0x55F9,
	1132:  0x55FA,
	1133:  0x55FB,
	1134:  0x55FC,
	1135:  0x55FF,
	1136:  0x5602,
	1137:  0x5603,
	1138:  0x5604,
	1139:  0x5605,
	1140:  0x5606,
	1141:  0x5607,
	1142:  0x560A,
	1143:  0x560B,
	1144:  0x560D,
	1145:  0x5610,
	1146:  0x5611,
	1147:  0x5612,
	1148:  0x5613,
	1149:  0x5614,
	1150:  0x5615,
	1151:  0x5616,
	1152:  0x5617,
	1153:  0x5619,
	1154:  0x561A,
	1155:  0x561C,
	1156:  0x561D,
	1157:  0x5620,
	1158:  0x5621,
	1159:  0x5622,
	1160:  0x5625,
	1161:  0x5626,
	1162:  0x5628,
	1163:  0x5629,
	1164:  0x562A,
	1165:  0x562B,
	1166:  0x562E,
	1167:  0x562F,
	1168:  0x5630,
	1169:  0x5633,
	1170:  0x5635,
	1171:  0x5637,
	1172:  0x5638,
	1173:  0x563A,
	1174:  0x563C,
	1175:  0x563D,
	1176:  0x563E,
	1177:  0x5640,
	1178:  0x5641,
	1179:  0x5642,
	1180:  0x5643,
	1181:  0x5644,
	1182:  0x5645,
	1183:  0x5646,
	1184:  0x5647,
	1185:  0x5648,
	1186:  0x5649,
	1187:  0x564A,
	1188:  0x564B,
	1189:  0x564F,
	1190:  0x5650,
	1191:  0x5651,
	1192:  0x5652,
	1193:  0x5653,
	1194:  0x5655,
	1195:  0x5656,
	1196:  0x565A,
	1197:  0x565B,
	1198:  0x565D,
	1199:  0x565E,
	1200:  0x565F,
	1201:  0x5660,
	1202:  0x5661,
	1203:  0x5663,
	1204:  0x5665,
	1205:  0x5666,
	1206:  0x5667,
	1207:  0x566D,
	1208:  0x566E,
	1209:  0x566F,
	1210:  0x5670,
	1211:  0x5672,
	1212:  0x5673,
	1213:  0x5674,
	1214:  0x5675,
	1215:  0x5677,
	1216:  0x5678,
	1217:  0x5679,
	1218:  0x567A,
	1219:  0x567D,
	1220:  0x567E,
	1221:  0x567F,
	1222:  0x5680,
	1223:  0x5681,
	1224:  0x5682,
	1225:  0x5683,
	1226:  0x5684,
	1227:  0x5687,
	1228:  0x5688,
	1229:  0x5689,
	1230:  0x568A,
	1231:  0x568B,
	1232:  0x568C,
	1233:  0x568D,
	1234:  0x5690,
	1235:  0x5691,
	1236:  0x5692,
	1237:  0x5694,
	1238:  0x5695,
	1239:  0x5696,
	1240:  0x5697,
	1241:  0x5698,
	1242:  0x5699,
	1243:  0x569A,
	1244:  0x569B,
	1245:  0x569C,
	1246:  0x569D,
	1247:  0x569E,
	1248:  0x569F,
	1249:  0x56A0,
	1250:  0x56A1,
	1251:  0x56A2,
	1252:  0x56A4,
	1253:  0x56A5,
	1254:  0x56A6,
	1255:  0x56A7,
	1256:  0x56A8,
	1257:  0x56A9,
	1258:  0x56AA,
	1259:  0x56AB,
	1260:  0x56AC,
	1261:  0x56AD,
	1262:  0x56AE,
	1263:  0x56B0,
	1264:  0x56B1,
	1265:  0x56B2,
	1266:  0x56B3,
	1267:  0x56B4,
	1268:  0x56B5,
	1269:  0x56B6,
	1270:  0x56B8,
	1271:  0x56B9,
	1272:  0x56BA,
	1273:  0x56BB,
	1274:  0x56BD,
	1275:  0x56BE,
	1276:  0x56BF,
	1277:  0x56C0,
	1278:  0x56C1,
	1279:  0x56C2,
	1280:  0x56C3,
	1281:  0x56C4,
	1282:  0x56C5,
	1283:  0x56C6,
	1284:  0x56C7,
	1285:  0x56C8,
	1286:  0x56C9,
	1287:  0x56CB,
	1288:  0x56CC,
	1289:  0x56CD,
	1290:  0x56CE,
	1291:  0x56CF,
	1292:  0x56D0,
	1293:  0x56D1,
	1294:  0x56D2,
	1295:  0x56D3,
	1296:  0x56D5,
	1297:  0x56D6,
	1298:  0x56D8,
	1299:  0x56D9,
	1300:  0x56DC,
	1301:  0x56E3,
	1302:  0x56E5,
	1303:  0x56E6,
	1304:  0x56E7,
	1305:  0x56E8,
	1306:  0x56E9,
	1307:  0x56EA,
	1308:  0x56EC,
	1309:  0x56EE,
	1310:  0x56EF,
	1311:  0x56F2,
	1312:  0x56F3,
	1313:  0x56F6,
	1314:  0x56F7,
	1315:  0x56F8,
	1316:  0x56FB,
	1317:  0x56FC,
	1318:  0x5700,
	1319:  0x5701,
	1320:  0x5702,
	1321:  0x5705,
	1322:  0x5707,
	1323:  0x570B,
	1324:  0x570C,
	1325:  0x570D,
	1326:  0x570E,
	1327:  0x570F,
	1328:  0x5710,
	1329:  0x5711,
	1330:  0x5712,
	1331:  0x5713,
	1332:  0x5714,
	1333:  0x5715,
	1334:  0x5716,
	1335:  0x5717,
	1336:  0x5718,
	1337:  0x5719,
	1338:  0x571A,
	1339:  0x571B,
	1340:  0x571D,
	1341:  0x571E,
	1342:  0x5720,
	1343:  0x5721,
	1344:  0x5722,
	1345:  0x5724,
	1346:  0x5725,
	1347:  0x5726,
	1348:  0x5727,
	1349:  0x572B,
	1350:  0x5731,
	1351:  0x5732,
	1352:  0x5734,
	1353:  0x5735,
	1354:  0x5736,
	1355:  0x5737,
	1356:  0x5738,
	1357:  0x573C,
	1358:  0x573D,
	1359:  0x573F,
	1360:  0x5741,
	1361:  0x5743,
	1362:  0x5744,
	1363:  0x5745,
	1364:  0x5746,
	1365:  0x5748,
	1366:  0x5749,
	1367:  0x574B,
	1368:  0x5752,
	1369:  0x5753,
	1370:  0x5754,
	1371:  0x5755,
	1372:  0x5756,
	1373:  0x5758,
	1374:  0x5759,
	1375:  0x5762,
	1376:  0x5763,
	1377:  0x5765,
	1378:  0x5767,
	1379:  0x576C,
	1380:  0x576E,
	1381:  0x5770,
	1382:  0x5771,
	1383:  0x5772,
	1384:  0x5774,
	1385:  0x5775,
	1386:  0x5778,
	1387:  0x5779,
	1388:  0x577A,
	1389:  0x577D,
	1390:  0x577E,
	1391:  0x577F,
	1392:  0x5780,
	1393:  0x5781,
	1394:  0x5787,
	1395:  0x5788,
	1396:  0x5789,
	1397:  0x578A,
	1398:  0x578D,
	1399:  0x578E,
	1400:  0x578F,
	1401:  0x5790,
	1402:  0x5791,
	1403:  0x5794,
	1404:  0x5795,
	1405:  0x5796,
	1406:  0x5797,
	1407:  0x5798,
	1408:  0x5799,
	1409:  0x579A,
	1410:  0x579C,
	1411:  0x579D,
	1412:  0x579E,
	1413:  0x579F,
	1414:  0x57A5,
	1415:  0x57A8,
	1416:  0x57AA,
	1417:  0x57AC,
	1418:  0x57AF,
	1419:  0x57B0,
	1420:  0x57B1,
	1421:  0x57B3,
	1422:  0x57B5,
	1423:  0x57B6,
	1424:  0x57B7,
	1425:  0x57B9,
	1426:  0x57BA,
	1427:  0x57BB,
	1428:  0x57BC,
	1429:  0x57BD,
	1430:  0x57BE,
	1431:  0x57BF,
	1432:  0x57C0,
	1433:  0x57C1,
	1434:  0x57C4,
	1435:  0x57C5,
	1436:  0x57C6,
	1437:  0x57C7,
	1438:  0x57C8,
	1439:  0x57C9,
	1440:  0x57CA,
	1441:  0x57CC,
	1442:  0x57CD,
	1443:  0x57D0,
	1444:  0x57D1,
	1445:  0x57D3,
	1446:  0x57D6,
	1447:  0x57D7,
	1448:  0x57DB,
	1449:  0x57DC,
	1450:  0x57DE,
	1451:  0x57E1,
	1452:  0x57E2,
	1453:  0x57E3,
	1454:  0x57E5,
	1455:  0x57E6,
	1456:  0x57E7,
	1457:  0x57E8,
	1458:  0x57E9,
	1459:  0x57EA,
	1460:  0x57EB,
	1461:  0x57EC,
	1462:  0x57EE,
	1463:  0x57F0,
	1464:  0x57F1,
	1465:  0x57F2,
	1466:  0x57F3,
	1467:  0x57F5,
	1468:  0x57F6,
	1469:  0x57F7,
	1470:  0x57FB,
	1471:  0x57FC,
	1472:  0x57FE,
	1473:  0x57FF,
	1474:  0x5801,
	1475:  0x5803,
	1476:  0x5804,
	1477:  0x5805,
	1478:  0x5808,
	1479:  0x5809,
	1480:  0x580A,
	1481:  0x580C,
	1482:  0x580E,
	1483:  0x580F,
	1484:  0x5810,
	1485:  0x5812,
	1486:  0x5813,
	1487:  0x5814,
	1488:  0x5816,
	1489:  0x5817,
	1490:  0x5818,
	1491:  0x581A,
	1492:  0x581B,
	1493:  0x581C,
	1494:  0x581D,
	1495:  0x581F,
	1496:  0x5822,
	1497:  0x5823,
	1498:  0x5825,
	1499:  0x5826,
	1500:  0x5827,
	1501:  0x5828,
	1502:  0x5829,
	1503:  0x582B,
	1504:  0x582C,
	1505:  0x582D,
	1506:  0x582E,
	1507:  0x582F,
	1508:  0x5831,
	1509:  0x5832,
	1510:  0x5833,
	1511:  0x5834,
	1512:  0x5836,
	1513:  0x5837,
	1514:  0x5838,
	1515:  0x5839,
	1516:  0x583A,
	1517:  0x583B,
	1518:  0x583C,
	1519:  0x583D,
	1520:  0x583E,
	1521:  0x583F,
	1522:  0x5840,
	1523:  0x5841,
	1524:  0x5842,
	1525:  0x5843,
	1526:  0x5845,
	1527:  0x5846,
	1528:  0x5847,
	1529:  0x5848,
	1530:  0x5849,
	1531:  0x584A,
	1532:  0x584B,
	1533:  0x584E,
	1534:  0x584F,
	1535:  0x5850,
	1536:  0x5852,
	1537:  0x5853,
	1538:  0x5855,
	1539:  0x5856,
	1540:  0x5857,
	1541:  0x5859,
	1542:  0x585A,
	1543:  0x585B,
	1544:  0x585C,
	1545:  0x585D,
	1546:  0x585F,
	1547:  0x5860,
	1548:  0x5861,
	1549:  0x5862,
	1550:  0x5863,
	1551:  0x5864,
	1552:  0x5866,
	1553:  0x5867,
	1554:  0x5868,
	1555:  0x5869,
	1556:  0x586A,
	1557:  0x586D,
	1558:  0x586E,
	1559:  0x586F,
	1560:  0x5870,
	1561:  0x5871,
	1562:  0x5872,
	1563:  0x5873,
	1564:  0x5874,
	1565:  0x5875,
	1566:  0x5876,
	1567:  0x5877,
	1568:  0x5878,
	1569:  0x5879,
	1570:  0x587A,
	1571:  0x587B,
	1572:  0x587C,
	1573:  0x587D,
	1574:  0x587F,
	1575:  0x5882,
	1576:  0x5884,
	1577:  0x5886,
	1578:  0x5887,
	1579:  0x5888,
	1580:  0x588A,
	1581:  0x588B,
	1582:  0x588C,
	1583:  0x588D,
	1584:  0x588E,
	1585:  0x588F,
	1586:  0x5890,
	1587:  0x5891,
	1588:  0x5894,
	1589:  0x5895,
	1590:  0x5896,
	1591:  0x5897,
	1592:  0x5898,
	1593:  0x589B,
	1594:  0x589C,
	1595:  0x589D,
	1596:  0x58A0,
	1597:  0x58A1,
	1598:  0x58A2,
	1599:  0x58A3,
	1600:  0x58A4,
	1601:  0x58A5,
	1602:  0x58A6,
	1603:  0x58A7,
	1604:  0x58AA,
	1605:  0x58AB,
	1606:  0x58AC,
	1607:  0x58AD,
	1608:  0x58AE,
	1609:  0x58AF,
	1610:  0x58B0,
	1611:  0x58B1,
	1612:  0x58B2,
	1613:  0x58B3,
	1614:  0x58B4,
	1615:  0x58B5,
	1616:  0x58B6,
	1617:  0x58B7,
	1618:  0x58B8,
	1619:  0x58B9,
	1620:  0x58BA,
	1621:  0x58BB,
	1622:  0x58BD,
	1623:  0x58BE,
	1624:  0x58BF,
	1625:  0x58C0,
	1626:  0x58C2,
	1627:  0x58C3,
	1628:  0x58C4,
	1629:  0x58C6,
	1630:  0x58C7,
	1631:  0x58C8,
	1632:  0x58C9,
	1633:  0x58CA,
	1634:  0x58CB,
	1635:  0x58CC,
	1636:  0x58CD,
	1637:  0x58CE,
	1638:  0x58CF,
	1639:  0x58D0,
	1640:  0x58D2,
	1641:  0x58D3,
	1642:  0x58D4,
	1643:  0x58D6,
	1644:  0x58D7,
	1645:  0x58D8,
	1646:  0x58D9,
	1647:  0x58DA,
	1648:  0x58DB,
	1649:  0x58DC,
	1650:  0x58DD,
	1651:  0x58DE,
	1652:  0x58DF,
	1653:  0x58E0,
	1654:  0x58E1,
	1655:  0x58E2,
	1656:  0x58E3,
	1657:  0x58E5,
	1658:  0x58E6,
	1659:  0x58E7,
	1660:  0x58E8,
	1661:  0x58E9,
	1662:  0x58EA,
	1663:  0x58ED,
	1664:  0x58EF,
	1665:  0x58F1,
	1666:  0x58F2,
	1667:  0x58F4,
	1668:  0x58F5,
	1669:  0x58F7,
	1670:  0x58F8,
	1671:  0x58FA,
	1672:  0x58FB,
	1673:  0x58FC,
	1674:  0x58FD,
	1675:  0x58FE,
	1676:  0x58FF,
	1677:  0x5900,
	1678:  0x5901,
	1679:  0x5903,
	1680:  0x5905,
	1681:  0x5906,
	1682:  0x5908,
	1683:  0x5909,
	1684:  0x590A,
	1685:  0x590B,
	1686:  0x590C,
	1687:  0x590E,
	1688:  0x5910,
	1689:  0x5911,
	1690:  0x5912,
	1691:  0x5913,
	1692:  0x5917,
	1693:  0x5918,
	1694:  0x591B,
	1695:  0x591D,
	1696:  0x591E,
	1697:  0x5920,
	1698:  0x5921,
	1699:  0x5922,
	1700:  0x5923,
	1701:  0x5926,
	1702:  0x5928,
	1703:  0x592C,
	1704:  0x5930,
	1705:  0x5932,
	1706:  0x5933,
	1707:  0x5935,
	1708:  0x5936,
	1709:  0x593B,
	1710:  0x593D,
	1711:  0x593E,
	1712:  0x593F,
	1713:  0x5940,
	1714:  0x5943,
	1715:  0x5945,
	1716:  0x5946,
	1717:  0x594A,
	1718:  0x594C,
	1719:  0x594D,
	1720:  0x5950,
	1721:  0x5952,
	1722:  0x5953,
	1723:  0x5959,
	1724:  0x595B,
	1725:  0x595C,
	1726:  0x595D,
	1727:  0x595E,
	1728:  0x595F,
	1729:  0x5961,
	1730:  0x5963,
	1731:  0x5964,
	1732:  0x5966,
	1733:  0x5967,
	1734:  0x5968,
	1735:  0x5969,
	1736:  0x596A,
	1737:  0x596B,
	1738:  0x596C,
	1739:  0x596D,
	1740:  0x596E,
	1741:  0x596F,
	1742:  0x5970,
	1743:  0x5971,
	1744:  0x5972,
	1745:  0x5975,
	1746:  0x5977,
	1747:  0x597A,
	1748:  0x597B,
	1749:  0x597C,
	1750:  0x597E,
	1751:  0x597F,
	1752:  0x5980,
	1753:  0x5985,
	1754:  0x5989,
	1755:  0x598B,
	1756:  0x598C,
	1757:  0x598E,
	1758:  0x598F,
	1759:  0x5990,
	1760:  0x5991,
	1761:  0x5994,
	1762:  0x5995,
	1763:  0x5998,
	1764:  0x599A,
	1765:  0x599B,
	1766:  0x599C,
	1767:  0x599D,
	1768:  0x599F,
	1769:  0x59A0,
	1770:  0x59A1,
	1771:  0x59A2,
	1772:  0x59A6,
	1773:  0x59A7,
	1774:  0x59AC,
	1775:  0x59AD,
	1776:  0x59B0,
	1777:  0x59B1,
	1778:  0x59B3,
	1779:  0x59B4,
	1780:  0x59B5,
	1781:  0x59B6,
	1782:  0x59B7,
	1783:  0x59B8,
	1784:  0x59BA,
	1785:  0x59BC,
	1786:  0x59BD,
	1787:  0x59BF,
	1788:  0x59C0,
	1789:  0x59C1,
	1790:  0x59C2,
	1791:  0x59C3,
	1792:  0x59C4,
	1793:  0x59C5,
	1794:  0x59C7,
	1795:  0x59C8,
	1796:  0x59C9,
	1797:  0x59CC,
	1798:  0x59CD,
	1799:  0x59CE,
	1800:  0x59CF,
	1801:  0x59D5,
	1802:  0x59D6,
	1803:  0x59D9,
	1804:  0x59DB,
	1805:  0x59DE,
	1806:  0x59DF,
	1807:  0x59E0,
	1808:  0x59E1,
	1809:  0x59E2,
	1810:  0x59E4,
	1811:  0x59E6,
	1812:  0x59E7,
	1813:  0x59E9,
	1814:  0x59EA,
	1815:  0x59EB,
	1816:  0x59ED,
	1817:  0x59EE,
	1818:  0x59EF,
	1819:  0x59F0,
	1820:  0x59F1,
	1821:  0x59F2,
	1822:  0x59F3,
	1823:  0x59F4,
	1824:  0x59F5,
	1825:  0x59F6,
	1826:  0x59F7,
	1827:  0x59F8,
	1828:  0x59FA,
	1829:  0x59FC,
	1830:  0x59FD,
	1831:  0x59FE,
	1832:  0x5A00,
	1833:  0x5A02,
	1834:  0x5A0A,
	1835:  0x5A0B,
	1836:  0x5A0D,
	1837:  0x5A0E,
	1838:  0x5A0F,
	1839:  0x5A10,
	1840:  0x5A12,
	1841:  0x5A14,
	1842:  0x5A15,
	1843:  0x5A16,
	1844:  0x5A17,
	1845:  0x5A19,
	1846:  0x5A1A,
	1847:  0x5A1B,
	1848:  0x5A1D,
	1849:  0x5A1E,
	1850:  0x5A21,
	1851:  0x5A22,
	1852:  0x5A24,
	1853:  0x5A26,
	1854:  0x5A27,
	1855:  0x5A28,
	1856:  0x5A2A,
	1857:  0x5A2B,
	1858:  0x5A2C,
	1859:  0x5A2D,
	1860:  0x5A2E,
	1861:  0x5A2F,
	1862:  0x5A30,
	1863:  0x5A33,
	1864:  0x5A35,
	1865:  0x5A37,
	1866:  0x5A38,
	1867:  0x5A39,
	1868:  0x5A3A,
	1869:  0x5A3B,
	1870:  0x5A3D,
	1871:  0x5A3E,
	1872:  0x5A3F,
	1873:  0x5A41,
	1874:  0x5A42,
	1875:  0x5A43,
	1876:  0x5A44,
	1877:  0x5A45,
	1878:  0x5A47,
	1879:  0x5A48,
	1880:  0x5A4B,
	1881:  0x5A4C,
	1882:  0x5A4D,
	1883:  0x5A4E,
	1884:  0x5A4F,
	1885:  0x5A50,
	1886:  0x5A51,
	1887:  0x5A52,
	1888:  0x5A53,
	1889:  0x5A54,
	1890:  0x5A56,
	1891:  0x5A57,
	1892:  0x5A58,
	1893:  0x5A59,
	1894:  0x5A5B,
	1895:  0x5A5C,
	1896:  0x5A5D,
	1897:  0x5A5E,
	1898:  0x5A5F,
	1899:  0x5A60,
	1900:  0x5A61,
	1901:  0x5A63,
	1902:  0x5A64,
	1903:  0x5A65,
	1904:  0x5A66,
	1905:  0x5A68,
	1906:  0x5A69,
	1907:  0x5A6B,
	1908:  0x5A6C,
	1909:  0x5A6D,
	1910:  0x5A6E,
	1911:  0x5A6F,
	1912:  0x5A70,
	1913:  0x5A71,
	1914:  0x5A72,
	1915:  0x5A73,
	1916:  0x5A78,
	1917:  0x5A79,
	1918:  0x5A7B,
	1919:  0x5A7C,
	1920:  0x5A7D,
	1921:  0x5A7E,
	1922:  0x5A80,
	1923:  0x5A81,
	1924:  0x5A82,
	1925:  0x5A83,
	1926:  0x5A84,
	1927:  0x5A85,
	1928:  0x5A86,
	1929:  0x5A87,
	1930:  0x5A88,
	1931:  0x5A89,
	1932:  0x5A8A,
	1933:  0x5A8B,
	1934:  0x5A8C,
	1935:  0x5A8D,
	1936:  0x5A8E,
	1937:  0x5A8F,
	1938:  0x5A90,
	1939:  0x5A91,
	1940:  0x5A93,
	1941:  0x5A94,
	1942:  0x5A95,
	1943:  0x5A96,
	1944:  0x5A97,
	1945:  0x5A98,
	1946:  0x5A99,
	1947:  0x5A9C,
	1948:  0x5A9D,
	1949:  0x5A9E,
	1950:  0x5A9F,
	1951:  0x5AA0,
	1952:  0x5AA1,
	1953:  0x5AA2,
	1954:  0x5AA3,
	1955:  0x5AA4,
	1956:  0x5AA5,
	1957:  0x5AA6,
	1958:  0x5AA7,
	1959:  0x5AA8,
	1960:  0x5AA9,
	1961:  0x5AAB,
	1962:  0x5AAC,
	1963:  0x5AAD,
	1964:  0x5AAE,
	1965:  0x5AAF,
	1966:  0x5AB0,
	1967:  0x5AB1,
	1968:  0x5AB4,
	1969:  0x5AB6,
	1970:  0x5AB7,
	1971:  0x5AB9,
	1972:  0x5ABA,
	1973:  0x5ABB,
	1974:  0x5ABC,
	1975:  0x5ABD,
	1976:  0x5ABF,
	1977:  0x5AC0,
	1978:  0x5AC3,
	1979:  0x5AC4,
	1980:  0x5AC5,
	1981:  0x5AC6,
	1982:  0x5AC7,
	1983:  0x5AC8,
	1984:  0x5ACA,
	1985:  0x5ACB,
	1986:  0x5ACD,
	1987:  0x5ACE,
	1988:  0x5ACF,
	1989:  0x5AD0,
	1990:  0x5AD1,
	1991:  0x5AD3,
	1992:  0x5AD5,
	1993:  0x5AD7,
	1994:  0x5AD9,
	1995:  0x5ADA,
	1996:  0x5ADB,
	1997:  0x5ADD,
	1998:  0x5ADE,
	1999:  0x5ADF,
	2000:  0x5AE2,
	2001:  0x5AE4,
	2002:  0x5AE5,
	2003:  0x5AE7,
	2004:  0x5AE8,
	2005:  0x5AEA,
	2006:  0x5AEC,
	2007:  0x5AED,
	2008:  0x5AEE,
	2009:  0x5AEF,
	2010:  0x5AF0,
	2011:  0x5AF2,
	2012:  0x5AF3,
	2013:  0x5AF4,
	2014:  0x5AF5,
	2015:  0x5AF6,
	2016:  0x5AF7,
	2017:  0x5AF8,
	2018:  0x5AF9,
	2019:  0x5AFA,
	2020:  0x5AFB,
	2021:  0x5AFC,
	2022:  0x5AFD,
	2023:  0x5AFE,
	2024:  0x5AFF,
	2025:  0x5B00,
	2026:  0x5B01,
	2027:  0x5B02,
	2028:  0x5B03,
	2029:  0x5B04,
	2030:  0x5B05,
	2031:  0x5B06,
	2032:  0x5B07,
	2033:  0x5B08,
	2034:  0x5B0A,
	2035:  0x5B0B,
	2036:  0x5B0C,
	2037:  0x5B0D,
	2038:  0x5B0E,
	2039:  0x5B0F,
	2040:  0x5B10,
	2041:  0x5B11,
	2042:  0x5B12,
	2043:  0x5B13,
	2044:  0x5B14,
	2045:  0x5B15,
	2046:  0x5B18,
	2047:  0x5B19,
	2048:  0x5B1A,
	2049:  0x5B1B,
	2050:  0x5B1C,
	2051:  0x5B1D,
	2052:  0x5B1E,
	2053:  0x5B1F,
	2054:  0x5B20,
	2055:  0x5B21,
	2056:  0x5B22,
	2057:  0x5B23,
	2058:  0x5B24,
	2059:  0x5B25,
	2060:  0x5B26,
	2061:  0x5B27,
	2062:  0x5B28,
	2063:  0x5B29,
	2064:  0x5B2A,
	2065:  0x5B2B,
	2066:  0x5B2C,
	2067:  0x5B2D,
	2068:  0x5B2E,
	2069:  0x5B2F,
	2070:  0x5B30,
	2071:  0x5B31,
	2072:  0x5B33,
	2073:  0x5B35,
	2074:  0x5B36,
	2075:  0x5B38,
	2076:  0x5B39,
	2077:  0x5B3A,
	2078:  0x5B3B,
	2079:  0x5B3C,
	2080:  0x5B3D,
	2081:  0x5B3E,
	2082:  0x5B3F,
	2083:  0x5B41,
	2084:  0x5B42,
	2085:  0x5B43,
	2086:  0x5B44,
	2087:  0x5B45,
	2088:  0x5B46,
	2089:  0x5B47,
	2090:  0x5B48,
	2091:  0x5B49,
	2092:  0x5B4A,
	2093:  0x5B4B,
	2094:  0x5B4C,
	2095:  0x5B4D,
	2096:  0x5B4E,
	2097:  0x5B4F,
	2098:  0x5B52,
	2099:  0x5B56,
	2100:  0x5B5E,
	2101:  0x5B60,
	2102:  0x5B61,
	2103:  0x5B67,
	2104:  0x5B68,
	2105:  0x5B6B,
	2106:  0x5B6D,
	2107:  0x5B6E,
	2108:  0x5B6F,
	2109:  0x5B72,
	2110:  0x5B74,
	2111:  0x5B76,
	2112:  0x5B77,
	2113:  0x5B78,
	2114:  0x5B79,
	2115:  0x5B7B,
	2116:  0x5B7C,
	2117:  0x5B7E,
	2118:  0x5B7F,
	2119:  0x5B82,
	2120:  0x5B86,
	2121:  0x5B8A,
	2122:  0x5B8D,
	2123:  0x5B8E,
	2124:  0x5B90,
	2125:  0x5B91,
	2126:  0x5B92,
	2127:  0x5B94,
	2128:  0x5B96,
	2129:  0x5B9F,
	2130:  0x5BA7,
	2131:  0x5BA8,
	2132:  0x5BA9,
	2133:  0x5BAC,
	2134:  0x5BAD,
	2135:  0x5BAE,
	2136:  0x5BAF,
	2137:  0x5BB1,
	2138:  0x5BB2,
	2139:  0x5BB7,
	2140:  0x5BBA,
	2141:  0x5BBB,
	2142:  0x5BBC,
	2143:  0x5BC0,
	2144:  0x5BC1,
	2145:  0x5BC3,
	2146:  0x5BC8,
	2147:  0x5BC9,
	2148:  0x5BCA,
	2149:  0x5BCB,
	2150:  0x5BCD,
	2151:  0x5BCE,
	2152:  0x5BCF,
	2153:  0x5BD1,
	2154:  0x5BD4,
	2155:  0x5BD5,
	2156:  0x5BD6,
	2157:  0x5BD7,
	2158:  0x5BD8,
	2159:  0x5BD9,
	2160:  0x5BDA,
	2161:  0x5BDB,
	2162:  0x5BDC,
	2163:  0x5BE0,
	2164:  0x5BE2,
	2165:  0x5BE3,
	2166:  0x5BE6,
	2167:  0x5BE7,
	2168:  0x5BE9,
	2169:  0x5BEA,
	2170:  0x5BEB,
	2171:  0x5BEC,
	2172:  0x5BED,
	2173:  0x5BEF,
	2174:  0x5BF1,
	2175:  0x5BF2,
	2176:  0x5BF3,
	2177:  0x5BF4,
	2178:  0x5BF5,
	2179:  0x5BF6,
	2180:  0x5BF7,
	2181:  0x5BFD,
	2182:  0x5BFE,
	2183:  0x5C00,
	2184:  0x5C02,
	2185:  0x5C03,
	2186:  0x5C05,
	2187:  0x5C07,
	2188:  0x5C08,
	2189:  0x5C0B,
	2190:  0x5C0C,
	2191:  0x5C0D,
	2192:  0x5C0E,
	2193:  0x5C10,
	2194:  0x5C12,
	2195:  0x5C13,
	2196:  0x5C17,
	2197:  0x5C19,
	2198:  0x5C1B,
	2199:  0x5C1E,
	2200:  0x5C1F,
	2201:  0x5C20,
	2202:  0x5C21,
	2203:  0x5C23,
	2204:  0x5C26,
	2205:  0x5C28,
	2206:  0x5C29,
	2207:  0x5C2A,
	2208:  0x5C2B,
	2209:  0x5C2D,
	2210:  0x5C2E,
	2211:  0x5C2F,
	2212:  0x5C30,
	2213:  0x5C32,
	2214:  0x5C33,
	2215:  0x5C35,
	2216:  0x5C36,
	2217:  0x5C37,
	2218:  0x5C43,
	2219:  0x5C44,
	2220:  0x5C46,
	2221:  0x5C47,
	2222:  0x5C4C,
	2223:  0x5C4D,
	2224:  0x5C52,
	2225:  0x5C53,
	2226:  0x5C54,
	2227:  0x5C56,
	2228:  0x5C57,
	2229:  0x5C58,
	2230:  0x5C5A,
	2231:  0x5C5B,
	2232:  0x5C5C,
	2233:  0x5C5D,
	2234:  0x5C5F,
	2235:  0x5C62,
	2236:  0x5C64,
	2237:  0x5C67,
	2238:  0x5C68,
	2239:  0x5C69,
	2240:  0x5C6A,
	2241:  0x5C6B,
	2242:  0x5C6C,
	2243:  0x5C6D,
	2244:  0x5C70,
	2245:  0x5C72,
	2246:  0x5C73,
	2247:  0x5C74,
	2248:  0x5C75,
	2249:  0x5C76,
	2250:  0x5C77,
	2251:  0x5C78,
	2252:  0x5C7B,
	2253:  0x5C7C,
	2254:  0x5C7D,
	2255:  0x5C7E,
	2256:  0x5C80,
	2257:  0x5C83,
	2258:  0x5C84,
	2259:  0x5C85,
	2260:  0x5C86,
	2261:  0x5C87,
	2262:  0x5C89,
	2263:  0x5C8A,
	2264:  0x5C8B,
	2265:  0x5C8E,
	2266:  0x5C8F,
	2267:  0x5C92,
	2268:  0x5C93,
	2269:  0x5C95,
	2270:  0x5C9D,
	2271:  0x5C9E,
	2272:  0x5C9F,
	2273:  0x5CA0,
	2274:  0x5CA1,
	2275:  0x5CA4,
	2276:  0x5CA5,
	2277:  0x5CA6,
	2278:  0x5CA7,
	2279:  0x5CA8,
	2280:  0x5CAA,
	2281:  0x5CAE,
	2282:  0x5CAF,
	2283:  0x5CB0,
	2284:  0x5CB2,
	2285:  0x5CB4,
	2286:  0x5CB6,
	2287:  0x5CB9,
	2288:  0x5CBA,
	2289:  0x5CBB,
	2290:  0x5CBC,
	2291:  0x5CBE,
	2292:  0x5CC0,
	2293:  0x5CC2,
	2294:  0x5CC3,
	2295:  0x5CC5,
	2296:  0x5CC6,
	2297:  0x5CC7,
	2298:  0x5CC8,
	2299:  0x5CC9,
	2300:  0x5CCA,
	2301:  0x5CCC,
	2302:  0x5CCD,
	2303:  0x5CCE,
	2304:  0x5CCF,
	2305:  0x5CD0,
	2306:  0x5CD1,
	2307:  0x5CD3,
	2308:  0x5CD4,
	2309:  0x5CD5,
	2310:  0x5CD6,
	2311:  0x5CD7,
	2312:  0x5CD8,
	2313:  0x5CDA,
	2314:  0x5CDB,
	2315:  0x5CDC,
	2316:  0x5CDD,
	2317:  0x5CDE,
	2318:  0x5CDF,
	2319:  0x5CE0,
	2320:  0x5CE2,
	2321:  0x5CE3,
	2322:  0x5CE7,
	2323:  0x5CE9,
	2324:  0x5CEB,
	2325:  0x5CEC,
	2326:  0x5CEE,
	2327:  0x5CEF,
	2328:  0x5CF1,
	2329:  0x5CF2,
	2330:  0x5CF3,
	2331:  0x5CF4,
	2332:  0x5CF5,
	2333:  0x5CF6,
	2334:  0x5CF7,
	2335:  0x5CF8,
	2336:  0x5CF9,
	2337:  0x5CFA,
	2338:  0x5CFC,
	2339:  0x5CFD,
	2340:  0x5CFE,
	2341:  0x5CFF,
	2342:  0x5D00,
	2343:  0x5D01,
	2344:  0x5D04,
	2345:  0x5D05,
	2346:  0x5D08,
	2347:  0x5D09,
	2348:  0x5D0A,
	2349:  0x5D0B,
	2350:  0x5D0C,
	2351:  0x5D0D,
	2352:  0x5D0F,
	2353:  0x5D10,
	2354:  0x5D11,
	2355:  0x5D12,
	2356:  0x5D13,
	2357:  0x5D15,
	2358:  0x5D17,
	2359:  0x5D18,
	2360:  0x5D19,
	2361:  0x5D1A,
	2362:  0x5D1C,
	2363:  0x5D1D,
	2364:  0x5D1F,
	2365:  0x5D20,
	2366:  0x5D21,
	2367:  0x5D22,
	2368:  0x5D23,
	2369:  0x5D25,
	2370:  0x5D28,
	2371:  0x5D2A,
	2372:  0x5D2B,
	2373:  0x5D2C,
	2374:  0x5D2F,
	2375:  0x5D30,
	2376:  0x5D31,
	2377:  0x5D32,
	2378:  0x5D33,
	2379:  0x5D35,
	2380:  0x5D36,
	2381:  0x5D37,
	2382:  0x5D38,
	2383:  0x5D39,
	2384:  0x5D3A,
	2385:  0x5D3B,
	2386:  0x5D3C,
	2387:  0x5D3F,
	2388:  0x5D40,
	2389:  0x5D41,
	2390:  0x5D42,
	2391:  0x5D43,
	2392:  0x5D44,
	2393:  0x5D45,
	2394:  0x5D46,
	2395:  0x5D48,
	2396:  0x5D49,
	2397:  0x5D4D,
	2398:  0x5D4E,
	2399:  0x5D4F,
	2400:  0x5D50,
	2401:  0x5D51,
	2402:  0x5D52,
	2403:  0x5D53,
	2404:  0x5D54,
	2405:  0x5D55,
	2406:  0x5D56,
	2407:  0x5D57,
	2408:  0x5D59,
	2409:  0x5D5A,
	2410:  0x5D5C,
	2411:  0x5D5E,
	2412:  0x5D5F,
	2413:  0x5D60,
	2414:  0x5D61,
	2415:  0x5D62,
	2416:  0x5D63,
	2417:  0x5D64,
	2418:  0x5D65,
	2419:  0x5D66,
	2420:  0x5D67,
	2421:  0x5D68,
	2422:  0x5D6A,
	2423:  0x5D6D,
	2424:  0x5D6E,
	2425:  0x5D70,
	2426:  0x5D71,
	2427:  0x5D72,
	2428:  0x5D73,
	2429:  0x5D75,
	2430:  0x5D76,
	2431:  0x5D77,
	2432:  0x5D78,
	2433:  0x5D79,
	2434:  0x5D7A,
	2435:  0x5D7B,
	2436:  0x5D7C,
	2437:  0x5D7D,
	2438:  0x5D7E,
	2439:  0x5D7F,
	2440:  0x5D80,
	2441:  0x5D81,
	2442:  0x5D83,
	2443:  0x5D84,
	2444:  0x5D85,
	2445:  0x5D86,
	2446:  0x5D87,
	2447:  0x5D88,
	2448:  0x5D89,
	2449:  0x5D8A,
	2450:  0x5D8B,
	2451:  0x5D8C,
	2452:  0x5D8D,
	2453:  0x5D8E,
	2454:  0x5D8F,
	2455:  0x5D90,
	2456:  0x5D91,
	2457:  0x5D92,
	2458:  0x5D93,
	2459:  0x5D94,
	2460:  0x5D95,
	2461:  0x5D96,
	2462:  0x5D97,
	2463:  0x5D98,
	2464:  0x5D9A,
	2465:  0x5D9B,
	2466:  0x5D9C,
	2467:  0x5D9E,
	2468:  0x5D9F,
	2469:  0x5DA0,
	2470:  0x5DA1,
	2471:  0x5DA2,
	2472:  0x5DA3,
	2473:  0x5DA4,
	2474:  0x5DA5,
	2475:  0x5DA6,
	2476:  0x5DA7,
	2477:  0x5DA8,
	2478:  0x5DA9,
	2479:  0x5DAA,
	2480:  0x5DAB,
	2481:  0x5DAC,
	2482:  0x5DAD,
	2483:  0x5DAE,
	2484:  0x5DAF,
	2485:  0x5DB0,
	2486:  0x5DB1,
	2487:  0x5DB2,
	2488:  0x5DB3,
	2489:  0x5DB4,
	2490:  0x5DB5,
	2491:  0x5DB6,
	2492:  0x5DB8,
	2493:  0x5DB9,
	2494:  0x5DBA,
	2495:  0x5DBB,
	2496:  0x5DBC,
	2497:  0x5DBD,
	2498:  0x5DBE,
	2499:  0x5DBF,
	2500:  0x5DC0,
	2501:  0x5DC1,
	2502:  0x5DC2,
	2503:  0x5DC3,
	2504:  0x5DC4,
	2505:  0x5DC6,
	2506:  0x5DC7,
	2507:  0x5DC8,
	2508:  0x5DC9,
	2509:  0x5DCA,
	2510:  0x5DCB,
	2511:  0x5DCC,
	2512:  0x5DCE,
	2513:  0x5DCF,
	2514:  0x5DD0,
	2515:  0x5DD1,
	2516:  0x5DD2,
	2517:  0x5DD3,
	2518:  0x5DD4,
	2519:  0x5DD5,
	2520:  0x5DD6,
	2521:  0x5DD7,
	2522:  0x5DD8,
	2523:  0x5DD9,
	2524:  0x5DDA,
	2525:  0x5DDC,
	2526:  0x5DDF,
	2527:  0x5DE0,
	2528:  0x5DE3,
	2529:  0x5DE4,
	2530:  0x5DEA,
	2531:  0x5DEC,
	2532:  0x5DED,
	2533:  0x5DF0,
	2534:  0x5DF5,
	2535:  0x5DF6,
	2536:  0x5DF8,
	2537:  0x5DF9,
	2538:  0x5DFA,
	2539:  0x5DFB,
	2540:  0x5DFC,
	2541:  0x5DFF,
	2542:  0x5E00,
	2543:  0x5E04,
	2544:  0x5E07,
	2545:  0x5E09,
	2546:  0x5E0A,
	2547:  0x5E0B,
	2548:  0x5E0D,
	2549:  0x5E0E,
	2550:  0x5E12,
	2551:  0x5E13,
	2552:  0x5E17,
	2553:  0x5E1E,
	2554:  0x5E1F,
	2555:  0x5E20,
	2556:  0x5E21,
	2557:  0x5E22,
	2558:  0x5E23,
	2559:  0x5E24,
	2560:  0x5E25,
	2561:  0x5E28,
	2562:  0x5E29,
	2563:  0x5E2A,
	2564:  0x5E2B,
	2565:  0x5E2C,
	2566:  0x5E2F,
	2567:  0x5E30,
	2568:  0x5E32,
	2569:  0x5E33,
	2570:  0x5E34,
	2571:  0x5E35,
	2572:  0x5E36,
	2573:  0x5E39,
	2574:  0x5E3A,
	2575:  0x5E3E,
	2576:  0x5E3F,
	2577:  0x5E40,
	2578:  0x5E41,
	2579:  0x5E43,
	2580:  0x5E46,
	2581:  0x5E47,
	2582:  0x5E48,
	2583:  0x5E49,
	2584:  0x5E4A,
	2585:  0x5E4B,
	2586:  0x5E4D,
	2587:  0x5E4E,
	2588:  0x5E4F,
	2589:  0x5E50,
	2590:  0x5E51,
	2591:  0x5E52,
	2592:  0x5E53,
	2593:  0x5E56,
	2594:  0x5E57,
	2595:  0x5E58,
	2596:  0x5E59,
	2597:  0x5E5A,
	2598:  0x5E5C,
	2599:  0x5E5D,
	2600:  0x5E5F,
	2601:  0x5E60,
	2602:  0x5E63,
	2603:  0x5E64,
	2604:  0x5E65,
	2605:  0x5E66,
	2606:  0x5E67,
	2607:  0x5E68,
	2608:  0x5E69,
	2609:  0x5E6A,
	2610:  0x5E6B,
	2611:  0x5E6C,
	2612:  0x5E6D,
	2613:  0x5E6E,
	2614:  0x5E6F,
	2615:  0x5E70,
	2616:  0x5E71,
	2617:  0x5E75,
	2618:  0x5E77,
	2619:  0x5E79,
	2620:  0x5E7E,
	2621:  0x5E81,
	2622:  0x5E82,
	2623:  0x5E83,
	2624:  0x5E85,
	2625:  0x5E88,
	2626:  0x5E89,
	2627:  0x5E8C,
	2628:  0x5E8D,
	2629:  0x5E8E,
	2630:  0x5E92,
	2631:  0x5E98,
	2632:  0x5E9B,
	2633:  0x5E9D,
	2634:  0x5EA1,
	2635:  0x5EA2,
	2636:  0x5EA3,
	2637:  0x5EA4,
	2638:  0x5EA8,
	2639:  0x5EA9,
	2640:  0x5EAA,
	2641:  0x5EAB,
	2642:  0x5EAC,
	2643:  0x5EAE,
	2644:  0x5EAF,
	2645:  0x5EB0,
	2646:  0x5EB1,
	2647:  0x5EB2,
	2648:  0x5EB4,
	2649:  0x5EBA,
	2650:  0x5EBB,
	2651:  0x5EBC,
	2652:  0x5EBD,
	2653:  0x5EBF,
	2654:  0x5EC0,
	2655:  0x5EC1,
	2656:  0x5EC2,
	2657:  0x5EC3,
	2658:  0x5EC4,
	2659:  0x5EC5,
	2660:  0x5EC6,
	2661:  0x5EC7,
	2662:  0x5EC8,
	2663:  0x5ECB,
	2664:  0x5ECC,
	2665:  0x5ECD,
	2666:  0x5ECE,
	2667:  0x5ECF,
	2668:  0x5ED0,
	2669:  0x5ED4,
	2670:  0x5ED5,
	2671:  0x5ED7,
	2672:  0x5ED8,
	2673:  0x5ED9,
	2674:  0x5EDA,
	2675:  0x5EDC,
	2676:  0x5EDD,
	2677:  0x5EDE,
	2678:  0x5EDF,
	2679:  0x5EE0,
	2680:  0x5EE1,
	2681:  0x5EE2,
	2682:  0x5EE3,
	2683:  0x5EE4,
	2684:  0x5EE5,
	2685:  0x5EE6,
	2686:  0x5EE7,
	2687:  0x5EE9,
	2688:  0x5EEB,
	2689:  0x5EEC,
	2690:  0x5EED,
	2691:  0x5EEE,
	2692:  0x5EEF,
	2693:  0x5EF0,
	2694:  0x5EF1,
	2695:  0x5EF2,
	2696:  0x5EF3,
	2697:  0x5EF5,
	2698:  0x5EF8,
	2699:  0x5EF9,
	2700:  0x5EFB,
	2701:  0x5EFC,
	2702:  0x5EFD,
	2703:  0x5F05,
	2704:  0x5F06,
	2705:  0x5F07,
	2706:  0x5F09,
	2707:  0x5F0C,
	2708:  0x5F0D,
	2709:  0x5F0E,
	2710:  0x5F10,
	2711:  0x5F12,
	2712:  0x5F14,
	2713:  0x5F16,
	2714:  0x5F19,
	2715:  0x5F1A,
	2716:  0x5F1C,
	2717:  0x5F1D,
	2718:  0x5F1E,
	2719:  0x5F21,
	2720:  0x5F22,
	2721:  0x5F23,
	2722:  0x5F24,
	2723:  0x5F28,
	2724:  0x5F2B,
	2725:  0x5F2C,
	2726:  0x5F2E,
	2727:  0x5F30,
	2728:  0x5F32,
	2729:  0x5F33,
	2730:  0x5F34,
	2731:  0x5F35,
	2732:  0x5F36,
	2733:  0x5F37,
	2734:  0x5F38,
	2735:  0x5F3B,
	2736:  0x5F3D,
	2737:  0x5F3E,
	2738:  0x5F3F,
	2739:  0x5F41,
	2740:  0x5F42,
	2741:  0x5F43,
	2742:  0x5F44,
	2743:  0x5F45,
	2744:  0x5F46,
	2745:  0x5F47,
	2746:  0x5F48,
	2747:  0x5F49,
	2748:  0x5F4A,
	2749:  0x5F4B,
	2750:  0x5F4C,
	2751:  0x5F4D,
	2752:  0x5F4E,
	2753:  0x5F4F,
	2754:  0x5F51,
	2755:  0x5F54,
	2756:  0x5F59,
	2757:  0x5F5A,
	2758:  0x5F5B,
	2759:  0x5F5C,
	2760:  0x5F5E,
	2761:  0x5F5F,
	2762:  0x5F60,
	2763:  0x5F63,
	2764:  0x5F65,
	2765:  0x5F67,
	2766:  0x5F68,
	2767:  0x5F6B,
	2768:  0x5F6E,
	2769:  0x5F6F,
	2770:  0x5F72,
	2771:  0x5F74,
	2772:  0x5F75,
	2773:  0x5F76,
	2774:  0x5F78,
	2775:  0x5F7A,
	2776:  0x5F7D,
	2777:  0x5F7E,
	2778:  0x5F7F,
	2779:  0x5F83,
	2780:  0x5F86,
	2781:  0x5F8D,
	2782:  0x5F8E,
	2783:  0x5F8F,
	2784:  0x5F91,
	2785:  0x5F93,
	2786:  0x5F94,
	2787:  0x5F96,
	2788:  0x5F9A,
	2789:  0x5F9B,
	2790:  0x5F9D,
	2791:  0x5F9E,
	2792:  0x5F9F,
	2793:  0x5FA0,
	2794:  0x5FA2,
	2795:  0x5FA3,
	2796:  0x5FA4,
	2797:  0x5FA5,
	2798:  0x5FA6,
	2799:  0x5FA7,
	2800:  0x5FA9,
	2801:  0x5FAB,
	2802:  0x5FAC,
	2803:  0x5FAF,
	2804:  0x5FB0,
	2805:  0x5FB1,
	2806:  0x5FB2,
	2807:  0x5FB3,
	2808:  0x5FB4,
	2809:  0x5FB6,
	2810:  0x5FB8,
	2811:  0x5FB9,
	2812:  0x5FBA,
	2813:  0x5FBB,
	2814:  0x5FBE,
	2815:  0x5FBF,
	2816:  0x5FC0,
	2817:  0x5FC1,
	2818:  0x5FC2,
	2819:  0x5FC7,
	2820:  0x5FC8,
	2821:  0x5FCA,
	2822:  0x5FCB,
	2823:  0x5FCE,
	2824:  0x5FD3,
	2825:  0x5FD4,
	2826:  0x5FD5,
	2827:  0x5FDA,
	2828:  0x5FDB,
	2829:  0x5FDC,
	2830:  0x5FDE,
	2831:  0x5FDF,
	2832:  0x5FE2,
	2833:  0x5FE3,
	2834:  0x5FE5,
	2835:  0x5FE6,
	2836:  0x5FE8,
	2837:  0x5FE9,
	2838:  0x5FEC,
	2839:  0x5FEF,
	2840:  0x5FF0,
	2841:  0x5FF2,
	2842:  0x5FF3,
	2843:  0x5FF4,
	2844:  0x5FF6,
	2845:  0x5FF7,
	2846:  0x5FF9,
	2847:  0x5FFA,
	2848:  0x5FFC,
	2849:  0x6007,
	2850:  0x6008,
	2851:  0x6009,
	2852:  0x600B,
	2853:  0x600C,
	2854:  0x6010,
	2855:  0x6011,
	2856:  0x6013,
	2857:  0x6017,
	2858:  0x6018,
	2859:  0x601A,
	2860:  0x601E,
	2861:  0x601F,
	2862:  0x6022,
	2863:  0x6023,
	2864:  0x6024,
	2865:  0x602C,
	2866:  0x602D,
	2867:  0x602E,
	2868:  0x6030,
	2869:  0x6031,
	2870:  0x6032,
	2871:  0x6033,
	2872:  0x6034,
	2873:  0x6036,
	2874:  0x6037,
	2875:  0x6038,
	2876:  0x6039,
	2877:  0x603A,
	2878:  0x603D,
	2879:  0x603E,
	2880:  0x6040,
	2881:  0x6044,
	2882:  0x6045,
	2883:  0x6046,
	2884:  0x6047,
	2885:  0x6048,
	2886:  0x6049,
	2887:  0x604A,
	2888:  0x604C,
	2889:  0x604E,
	2890:  0x604F,
	2891:  0x6051,
	2892:  0x6053,
	2893:  0x6054,
	2894:  0x6056,
	2895:  0x6057,
	2896:  0x6058,
	2897:  0x605B,
	2898:  0x605C,
	2899:  0x605E,
	2900:  0x605F,
	2901:  0x6060,
	2902:  0x6061,
	2903:  0x6065,
	2904:  0x6066,
	2905:  0x606E,
	2906:  0x6071,
	2907:  0x6072,
	2908:  0x6074,
	2909:  0x6075,
	2910:  0x6077,
	2911:  0x607E,
	2912:  0x6080,
	2913:  0x6081,
	2914:  0x6082,
	2915:  0x6085,
	2916:  0x6086,
	2917:  0x6087,
	2918:  0x6088,
	2919:  0x608A,
	2920:  0x608B,
	2921:  0x608E,
	2922:  0x608F,
	2923:  0x6090,
	2924:  0x6091,
	2925:  0x6093,
	2926:  0x6095,
	2927:  0x6097,
	2928:  0x6098,
	2929:  0x6099,
	2930:  0x609C,
	2931:  0x609E,
	2932:  0x60A1,
	2933:  0x60A2,
	2934:  0x60A4,
	2935:  0x60A5,
	2936:  0x60A7,
	2937:  0x60A9,
	2938:  0x60AA,
	2939:  0x60AE,
	2940:  0x60B0,
	2941:  0x60B3,
	2942:  0x60B5,
	2943:  0x60B6,
	2944:  0x60B7,
	2945:  0x60B9,
	2946:  0x60BA,
	2947:  0x60BD,
	2948:  0x60BE,
	2949:  0x60BF,
	2950:  0x60C0,
	2951:  0x60C1,
	2952:  0x60C2,
	2953:  0x60C3,
	2954:  0x60C4,
	2955:  0x60C7,
	2956:  0x60C8,
	2957:  0x60C9,
	2958:  0x60CC,
	2959:  0x60CD,
	2960:  0x60CE,
	2961:  0x60CF,
	2962:  0x60D0,
	2963:  0x60D2,
	2964:  0x60D3,
	2965:  0x60D4,
	2966:  0x60D6,
	2967:  0x60D7,
	2968:  0x60D9,
	2969:  0x60DB,
	2970:  0x60DE,
	2971:  0x60E1,
	2972:  0x60E2,
	2973:  0x60E3,
	2974:  0x60E4,
	2975:  0x60E5,
	2976:  0x60EA,
	2977:  0x60F1,
	2978:  0x60F2,
	2979:  0x60F5,
	2980:  0x60F7,
	2981:  0x60F8,
	2982:  0x60FB,
	2983:  0x60FC,
	2984:  0x60FD,
	2985:  0x60FE,
	2986:  0x60FF,
	2987:  0x6102,
	2988:  0x6103,
	2989:  0x6104,
	2990:  0x6105,
	2991:  0x6107,
	2992:  0x610A,
	2993:  0x610B,
	2994:  0x610C,
	2995:  0x6110,
	2996:  0x6111,
	2997:  0x6112,
	2998:  0x6113,
	2999:  0x6114,
	3000:  0x6116,
	3001:  0x6117,
	3002:  0x6118,
	3003:  0x6119,
	3004:  0x611B,
	3005:  0x611C,
	3006:  0x611D,
	3007:  0x611E,
	3008:  0x6121,
	3009:  0x6122,
	3010:  0x6125,
	3011:  0x6128,
	3012:  0x6129,
	3013:  0x612A,
	3014:  0x612C,
	3015:  0x612D,
	3016:  0x612E,
	3017:  0x612F,
	3018:  0x6130,
	3019:  0x6131,
	3020:  0x6132,
	3021:  0x6133,
	3022:  0x6134,
	3023:  0x6135,
	3024:  0x6136,
	3025:  0x6137,
	3026:  0x6138,
	3027:  0x6139,
	3028:  0x613A,
	3029:  0x613B,
	3030:  0x613C,
	3031:  0x613D,
	3032:  0x613E,
	3033:  0x6140,
	3034:  0x6141,
	3035:  0x6142,
	3036:  0x6143,
	3037:  0x6144,
	3038:  0x6145,
	3039:  0x6146,
	3040:  0x6147,
	3041:  0x6149,
	3042:  0x614B,
	3043:  0x614D,
	3044:  0x614F,
	3045:  0x6150,
	3046:  0x6152,
	3047:  0x6153,
	3048:  0x6154,
	3049:  0x6156,
	3050:  0x6157,
	3051:  0x6158,
	3052:  0x6159,
	3053:  0x615A,
	3054:  0x615B,
	3055:  0x615C,
	3056:  0x615E,
	3057:  0x615F,
	3058:  0x6160,
	3059:  0x6161,
	3060:  0x6163,
	3061:  0x6164,
	3062:  0x6165,
	3063:  0x6166,
	3064:  0x6169,
	3065:  0x616A,
	3066:  0x616B,
	3067:  0x616C,
	3068:  0x616D,
	3069:  0x616E,
	3070:  0x616F,
	3071:  0x6171,
	3072:  0x6172,
	3073:  0x6173,
	3074:  0x6174,
	3075:  0x6176,
	3076:  0x6178,
	3077:  0x6179,
	3078:  0x617A,
	3079:  0x617B,
	3080:  0x617C,
	3081:  0x617D,
	3082:  0x617E,
	3083:  0x617F,
	3084:  0x6180,
	3085:  0x6181,
	3086:  0x6182,
	3087:  0x6183,
	3088:  0x6184,
	3089:  0x6185,
	3090:  0x6186,
	3091:  0x6187,
	3092:  0x6188,
	3093:  0x6189,
	3094:  0x618A,
	3095:  0x618C,
	3096:  0x618D,
	3097:  0x618F,
	3098:  0x6190,
	3099:  0x6191,
	3100:  0x6192,
	3101:  0x6193,
	3102:  0x6195,
	3103:  0x6196,
	3104:  0x6197,
	3105:  0x6198,
	3106:  0x6199,
	3107:  0x619A,
	3108:  0x619B,
	3109:  0x619C,
	3110:  0x619E,
	3111:  0x619F,
	3112:  0x61A0,
	3113:  0x61A1,
	3114:  0x61A2,
	3115:  0x61A3,
	3116:  0x61A4,
	3117:  0x61A5,
	3118:  0x61A6,
	3119:  0x61AA,
	3120:  0x61AB,
	3121:  0x61AD,
	3122:  0x61AE,
	3123:  0x61AF,
	3124:  0x61B0,
	3125:  0x61B1,
	3126:  0x61B2,
	3127:  0x61B3,
	3128:  0x61B4,
	3129:  0x61B5,
	3130:  0x61B6,
	3131:  0x61B8,
	3132:  0x61B9,
	3133:  0x61BA,
	3134:  0x61BB,
	3135:  0x61BC,
	3136:  0x61BD,
	3137:  0x61BF,
	3138:  0x61C0,
	3139:  0x61C1,
	3140:  0x61C3,
	3141:  0x61C4,
	3142:  0x61C5,
	3143:  0x61C6,
	3144:  0x61C7,
	3145:  0x61C9,
	3146:  0x61CC,
	3147:  0x61CD,
	3148:  0x61CE,
	3149:  0x61CF,
	3150:  0x61D0,
	3151:  0x61D3,
	3152:  0x61D5,
	3153:  0x61D6,
	3154:  0x61D7,
	3155:  0x61D8,
	3156:  0x61D9,
	3157:  0x61DA,
	3158:  0x61DB,
	3159:  0x61DC,
	3160:  0x61DD,
	3161:  0x61DE,
	3162:  0x61DF,
	3163:  0x61E0,
	3164:  0x61E1,
	3165:  0x61E2,
	3166:  0x61E3,
	3167:  0x61E4,
	3168:  0x61E5,
	3169:  0x61E7,
	3170:  0x61E8,
	3171:  0x61E9,
	3172:  0x61EA,
	3173:  0x61EB,
	3174:  0x61EC,
	3175:  0x61ED,
	3176:  0x61EE,
	3177:  0x61EF,
	3178:  0x61F0,
	3179:  0x61F1,
	3180:  0x61F2,
	3181:  0x61F3,
	3182:  0x61F4,
	3183:  0x61F6,
	3184:  0x61F7,
	3185:  0x61F8,
	3186:  0x61F9,
	3187:  0x61FA,
	3188:  0x61FB,
	3189:  0x61FC,
	3190:  0x61FD,
	3191:  0x61FE,
	3192:  0x6200,
	3193:  0x6201,
	3194:  0x6202,
	3195:  0x6203,
	3196:  0x6204,
	3197:  0x6205,
	3198:  0x6207,
	3199:  0x6209,
	3200:  0x6213,
	3201:  0x6214,
	3202:  0x6219,
	3203:  0x621C,
	3204:  0x621D,
	3205:  0x621E,
	3206:  0x6220,
	3207:  0x6223,
	3208:  0x6226,
	3209:  0x6227,
	3210:  0x6228,
	3211:  0x6229,
	3212:  0x622B,
	3213:  0x622D,
	3214:  0x622F,
	3215:  0x6230,
	3216:  0x6231,
	3217:  0x6232,
	3218:  0x6235,
	3219:  0x6236,
	3220:  0x6238,
	3221:  0x6239,
	3222:  0x623A,
	3223:  0x623B,
	3224:  0x623C,
	3225:  0x6242,
	3226:  0x6244,
	3227:  0x6245,
	3228:  0x6246,
	3229:  0x624A,
	3230:  0x624F,
	3231:  0x6250,
	3232:  0x6255,
	3233:  0x6256,
	3234:  0x6257,
	3235:  0x6259,
	3236:  0x625A,
	3237:  0x625C,
	3238:  0x625D,
	3239:  0x625E,
	3240:  0x625F,
	3241:  0x6260,
	3242:  0x6261,
	3243:  0x6262,
	3244:  0x6264,
	3245:  0x6265,
	3246:  0x6268,
	3247:  0x6271,
	3248:  0x6272,
	3249:  0x6274,
	3250:  0x6275,
	3251:  0x6277,
	3252:  0x6278,
	3253:  0x627A,
	3254:  0x627B,
	3255:  0x627D,
	3256:  0x6281,
	3257:  0x6282,
	3258:  0x6283,
	3259:  0x6285,
	3260:  0x6286,
	3261:  0x6287,
	3262:  0x6288,
	3263:  0x628B,
	3264:  0x628C,
	3265:  0x628D,
	3266:  0x628E,
	3267:  0x628F,
	3268:  0x6290,
	3269:  0x6294,
	3270:  0x6299,
	3271:  0x629C,
	3272:  0x629D,
	3273:  0x629E,
	3274:  0x62A3,
	3275:  0x62A6,
	3276:  0x62A7,
	3277:  0x62A9,
	3278:  0x62AA,
	3279:  0x62AD,
	3280:  0x62AE,
	3281:  0x62AF,
	3282:  0x62B0,
	3283:  0x62B2,
	3284:  0x62B3,
	3285:  0x62B4,
	3286:  0x62B6,
	3287:  0x62B7,
	3288:  0x62B8,
	3289:  0x62BA,
	3290:  0x62BE,
	3291:  0x62C0,
	3292:  0x62C1,
	3293:  0x62C3,
	3294:  0x62CB,
	3295:  0x62CF,
	3296:  0x62D1,
	3297:  0x62D5,
	3298:  0x62DD,
	3299:  0x62DE,
	3300:  0x62E0,
	3301:  0x62E1,
	3302:  0x62E4,
	3303:  0x62EA,
	3304:  0x62EB,
	3305:  0x62F0,
	3306:  0x62F2,
	3307:  0x62F5,
	3308:  0x62F8,
	3309:  0x62F9,
	3310:  0x62FA,
	3311:  0x62FB,
	3312:  0x6300,
	3313:  0x6303,
	3314:  0x6304,
	3315:  0x6305,
	3316:  0x6306,
	3317:  0x630A,
	3318:  0x630B,
	3319:  0x630C,
	3320:  0x630D,
	3321:  0x630F,
	3322:  0x6310,
	3323:  0x6312,
	3324:  0x6313,
	3325:  0x6314,
	3326:  0x6315,
	3327:  0x6317,
	3328:  0x6318,
	3329:  0x6319,
	3330:  0x631C,
	3331:  0x6326,
	3332:  0x6327,
	3333:  0x6329,
	3334:  0x632C,
	3335:  0x632D,
	3336:  0x632E,
	3337:  0x6330,
	3338:  0x6331,
	3339:  0x6333,
	3340:  0x6334,
	3341:  0x6335,
	3342:  0x6336,
	3343:  0x6337,
	3344:  0x6338,
	3345:  0x633B,
	3346:  0x633C,
	3347:  0x633E,
	3348:  0x633F,
	3349:  0x6340,
	3350:  0x6341,
	3351:  0x6344,
	3352:  0x6347,
	3353:  0x6348,
	3354:  0x634A,
	3355:  0x6351,
	3356:  0x6352,
	3357:  0x6353,
	3358:  0x6354,
	3359:  0x6356,
	3360:  0x6357,
	3361:  0x6358,
	3362:  0x6359,
	3363:  0x635A,
	3364:  0x635B,
	3365:  0x635C,
	3366:  0x635D,
	3367:  0x6360,
	3368:  0x6364,
	3369:  0x6365,
	3370:  0x6366,
	3371:  0x6368,
	3372:  0x636A,
	3373:  0x636B,
	3374:  0x636C,
	3375:  0x636F,
	3376:  0x6370,
	3377:  0x6372,
	3378:  0x6373,
	3379:  0x6374,
	3380:  0x6375,
	3381:  0x6378,
	3382:  0x6379,
	3383:  0x637C,
	3384:  0x637D,
	3385:  0x637E,
	3386:  0x637F,
	3387:  0x6381,
	3388:  0x6383,
	3389:  0x6384,
	3390:  0x6385,
	3391:  0x6386,
	3392:  0x638B,
	3393:  0x638D,
	3394:  0x6391,
	3395:  0x6393,
	3396:  0x6394,
	3397:  0x6395,
	3398:  0x6397,
	3399:  0x6399,
	3400:  0x639A,
	3401:  0x639B,
	3402:  0x639C,
	3403:  0x639D,
	3404:  0x639E,
	3405:  0x639F,
	3406:  0x63A1,
	3407:  0x63A4,
	3408:  0x63A6,
	3409:  0x63AB,
	3410:  0x63AF,
	3411:  0x63B1,
	3412:  0x63B2,
	3413:  0x63B5,
	3414:  0x63B6,
	3415:  0x63B9,
	3416:  0x63BB,
	3417:  0x63BD,
	3418:  0x63BF,
	3419:  0x63C0,
	3420:  0x63C1,
	3421:  0x63C2,
	3422:  0x63C3,
	3423:  0x63C5,
	3424:  0x63C7,
	3425:  0x63C8,
	3426:  0x63CA,
	3427:  0x63CB,
	3428:  0x63CC,
	3429:  0x63D1,
	3430:  0x63D3,
	3431:  0x63D4,
	3432:  0x63D5,
	3433:  0x63D7,
	3434:  0x63D8,
	3435:  0x63D9,
	3436:  0x63DA,
	3437:  0x63DB,
	3438:  0x63DC,
	3439:  0x63DD,
	3440:  0x63DF,
	3441:  0x63E2,
	3442:  0x63E4,
	3443:  0x63E5,
	3444:  0x63E6,
	3445:  0x63E7,
	3446:  0x63E8,
	3447:  0x63EB,
	3448:  0x63EC,
	3449:  0x63EE,
	3450:  0x63EF,
	3451:  0x63F0,
	3452:  0x63F1,
	3453:  0x63F3,
	3454:  0x63F5,
	3455:  0x63F7,
	3456:  0x63F9,
	3457:  0x63FA,
	3458:  0x63FB,
	3459:  0x63FC,
	3460:  0x63FE,
	3461:  0x6403,
	3462:  0x6404,
	3463:  0x6406,
	3464:  0x6407,
	3465:  0x6408,
	3466:  0x6409,
	3467:  0x640A,
	3468:  0x640D,
	3469:  0x640E,
	3470:  0x6411,
	3471:  0x6412,
	3472:  0x6415,
	3473:  0x6416,
	3474:  0x6417,
	3475:  0x6418,
	3476:  0x6419,
	3477:  0x641A,
	3478:  0x641D,
	3479:  0x641F,
	3480:  0x6422,
	3481:  0x6423,
	3482:  0x6424,
	3483:  0x6425,
	3484:  0x6427,
	3485:  0x6428,
	3486:  0x6429,
	3487:  0x642B,
	3488:  0x642E,
	3489:  0x642F,
	3490:  0x6430,
	3491:  0x6431,
	3492:  0x6432,
	3493:  0x6433,
	3494:  0x6435,
	3495:  0x6436,
	3496:  0x6437,
	3497:  0x6438,
	3498:  0x6439,
	3499:  0x643B,
	3500:  0x643C,
	3501:  0x643E,
	3502:  0x6440,
	3503:  0x6442,
	3504:  0x6443,
	3505:  0x6449,
	3506:  0x644B,
	3507:  0x644C,
	3508:  0x644D,
	3509:  0x644E,
	3510:  0x644F,
	3511:  0x6450,
	3512:  0x6451,
	3513:  0x6453,
	3514:  0x6455,
	3515:  0x6456,
	3516:  0x6457,
	3517:  0x6459,
	3518:  0x645A,
	3519:  0x645B,
	3520:  0x645C,
	3521:  0x645D,
	3522:  0x645F,
	3523:  0x6460,
	3524:  0x6461,
	3525:  0x6462,
	3526:  0x6463,
	3527:  0x6464,
	3528:  0x6465,
	3529:  0x6466,
	3530:  0x6468,
	3531:  0x646A,
	3532:  0x646B,
	3533:  0x646C,
	3534:  0x646E,
	3535:  0x646F,
	3536:  0x6470,
	3537:  0x6471,
	3538:  0x6472,
	3539:  0x6473,
	3540:  0x6474,
	3541:  0x6475,
	3542:  0x6476,
	3543:  0x6477,
	3544:  0x647B,
	3545:  0x647C,
	3546:  0x647D,
	3547:  0x647E,
	3548:  0x647F,
	3549:  0x6480,
	3550:  0x6481,
	3551:  0x6483,
	3552:  0x6486,
	3553:  0x6488,
	3554:  0x6489,
	3555:  0x648A,
	3556:  0x648B,
	3557:  0x648C,
	3558:  0x648D,
	3559:  0x648E,
	3560:  0x648F,
	3561:  0x6490,
	3562:  0x6493,
	3563:  0x6494,
	3564:  0x6497,
	3565:  0x6498,
	3566:  0x649A,
	3567:  0x649B,
	3568:  0x649C,
	3569:  0x649D,
	3570:  0x649F,
	3571:  0x64A0,
	3572:  0x64A1,
	3573:  0x64A2,
	3574:  0x64A3,
	3575:  0x64A5,
	3576:  0x64A6,
	3577:  0x64A7,
	3578:  0x64A8,
	3579:  0x64AA,
	3580:  0x64AB,
	3581:  0x64AF,
	3582:  0x64B1,
	3583:  0x64B2,
	3584:  0x64B3,
	3585:  0x64B4,
	3586:  0x64B6,
	3587:  0x64B9,
	3588:  0x64BB,
	3589:  0x64BD,
	3590:  0x64BE,
	3591:  0x64BF,
	3592:  0x64C1,
	3593:  0x64C3,
	3594:  0x64C4,
	3595:  0x64C6,
	3596:  0x64C7,
	3597:  0x64C8,
	3598:  0x64C9,
	3599:  0x64CA,
	3600:  0x64CB,
	3601:  0x64CC,
	3602:  0x64CF,
	3603:  0x64D1,
	3604:  0x64D3,
	3605:  0x64D4,
	3606:  0x64D5,
	3607:  0x64D6,
	3608:  0x64D9,
	3609:  0x64DA,
	3610:  0x64DB,
	3611:  0x64DC,
	3612:  0x64DD,
	3613:  0x64DF,
	3614:  0x64E0,
	3615:  0x64E1,
	3616:  0x64E3,
	3617:  0x64E5,
	3618:  0x64E7,
	3619:  0x64E8,
	3620:  0x64E9,
	3621:  0x64EA,
	3622:  0x64EB,
	3623:  0x64EC,
	3624:  0x64ED,
	3625:  0x64EE,
	3626:  0x64EF,
	3627:  0x64F0,
	3628:  0x64F1,
	3629:  0x64F2,
	3630:  0x64F3,
	3631:  0x64F4,
	3632:  0x64F5,
	3633:  0x64F6,
	3634:  0x64F7,
	3635:  0x64F8,
	3636:  0x64F9,
	3637:  0x64FA,
	3638:  0x64FB,
	3639:  0x64FC,
	3640:  0x64FD,
	3641:  0x64FE,
	3642:  0x64FF,
	3643:  0x6501,
	3644:  0x6502,
	3645:  0x6503,
	3646:  0x6504,
	3647:  0x6505,
	3648:  0x6506,
	3649:  0x6507,
	3650:  0x6508,
	3651:  0x650A,
	3652:  0x650B,
	3653:  0x650C,
	3654:  0x650D,
	3655:  0x650E,
	3656:  0x650F,
	3657:  0x6510,
	3658:  0x6511,
	3659:  0x6513,
	3660:  0x6514,
	3661:  0x6515,
	3662:  0x6516,
	3663:  0x6517,
	3664:  0x6519,
	3665:  0x651A,
	3666:  0x651B,
	3667:  0x651C,
	3668:  0x651D,
	3669:  0x651E,
	3670:  0x651F,
	3671:  0x6520,
	3672:  0x6521,
	3673:  0x6522,
	3674:  0x6523,
	3675:  0x6524,
	3676:  0x6526,
	3677:  0x6527,
	3678:  0x6528,
	3679:  0x6529,
	3680:  0x652A,
	3681:  0x652C,
	3682:  0x652D,
	3683:  0x6530,
	3684:  0x6531,
	3685:  0x6532,
	3686:  0x6533,
	3687:  0x6537,
	3688:  0x653A,
	3689:  0x653C,
	3690:  0x653D,
	3691:  0x6540,
	3692:  0x6541,
	3693:  0x6542,
	3694:  0x6543,
	3695:  0x6544,
	3696:  0x6546,
	3697:  0x6547,
	3698:  0x654A,
	3699:  0x654B,
	3700:  0x654D,
	3701:  0x654E,
	3702:  0x6550,
	3703:  0x6552,
	3704:  0x6553,
	3705:  0x6554,
	3706:  0x6557,
	3707:  0x6558,
	3708:  0x655A,
	3709:  0x655C,
	3710:  0x655F,
	3711:  0x6560,
	3712:  0x6561,
	3713:  0x6564,
	3714:  0x6565,
	3715:  0x6567,
	3716:  0x6568,
	3717:  0x6569,
	3718:  0x656A,
	3719:  0x656D,
	3720:  0x656E,
	3721:  0x656F,
	3722:  0x6571,
	3723:  0x6573,
	3724:  0x6575,
	3725:  0x6576,
	3726:  0x6578,
	3727:  0x6579,
	3728:  0x657A,
	3729:  0x657B,
	3730:  0x657C,
	3731:  0x657D,
	3732:  0x657E,
	3733:  0x657F,
	3734:  0x6580,
	3735:  0x6581,
	3736:  0x6582,
	3737:  0x6583,
	3738:  0x6584,
	3739:  0x6585,
	3740:  0x6586,
	3741:  0x6588,
	3742:  0x6589,
	3743:  0x658A,
	3744:  0x658D,
	3745:  0x658E,
	3746:  0x658F,
	3747:  0x6592,
	3748:  0x6594,
	3749:  0x6595,
	3750:  0x6596,
	3751:  0x6598,
	3752:  0x659A,
	3753:  0x659D,
	3754:  0x659E,
	3755:  0x65A0,
	3756:  0x65A2,
	3757:  0x65A3,
	3758:  0x65A6,
	3759:  0x65A8,
	3760:  0x65AA,
	3761:  0x65AC,
	3762:  0x65AE,
	3763:  0x65B1,
	3764:  0x65B2,
	3765:  0x65B3,
	3766:  0x65B4,
	3767:  0x65B5,
	3768:  0x65B6,
	3769:  0x65B7,
	3770:  0x65B8,
	3771:  0x65BA,
	3772:  0x65BB,
	3773:  0x65BE,
	3774:  0x65BF,
	3775:  0x65C0,
	3776:  0x65C2,
	3777:  0x65C7,
	3778:  0x65C8,
	3779:  0x65C9,
	3780:  0x65CA,
	3781:  0x65CD,
	3782:  0x65D0,
	3783:  0x65D1,
	3784:  0x65D3,
	3785:  0x65D4,
	3786:  0x65D5,
	3787:  0x65D8,
	3788:  0x65D9,
	3789:  0x65DA,
	3790:  0x65DB,
	3791:  0x65DC,
	3792:  0x65DD,
	3793:  0x65DE,
	3794:  0x65DF,
	3795:  0x65E1,
	3796:  0x65E3,
	3797:  0x65E4,
	3798:  0x65EA,
	3799:  0x65EB,
	3800:  0x65F2,
	3801:  0x65F3,
	3802:  0x65F4,
	3803:  0x65F5,
	3804:  0x65F8,
	3805:  0x65F9,
	3806:  0x65FB,
	3807:  0x65FC,
	3808:  0x65FD,
	3809:  0x65FE,
	3810:  0x65FF,
	3811:  0x6601,
	3812:  0x6604,
	3813:  0x6605,
	3814:  0x6607,
	3815:  0x6608,
	3816:  0x6609,
	3817:  0x660B,
	3818:  0x660D,
	3819:  0x6610,
	3820:  0x6611,
	3821:  0x6612,
	3822:  0x6616,
	3823:  0x6617,
	3824:  0x6618,
	3825:  0x661A,
	3826:  0x661B,
	3827:  0x661C,
	3828:  0x661E,
	3829:  0x6621,
	3830:  0x6622,
	3831:  0x6623,
	3832:  0x6624,
	3833:  0x6626,
	3834:  0x6629,
	3835:  0x662A,
	3836:  0x662B,
	3837:  0x662C,
	3838:  0x662E,
	3839:  0x6630,
	3840:  0x6632,
	3841:  0x6633,
	3842:  0x6637,
	3843:  0x6638,
	3844:  0x6639,
	3845:  0x663A,
	3846:  0x663B,
	3847:  0x663D,
	3848:  0x663F,
	3849:  0x6640,
	3850:  0x6642,
	3851:  0x6644,
	3852:  0x6645,
	3853:  0x6646,
	3854:  0x6647,
	3855:  0x6648,
	3856:  0x6649,
	3857:  0x664A,
	3858:  0x664D,
	3859:  0x664E,
	3860:  0x6650,
	3861:  0x6651,
	3862:  0x6658,
	3863:  0x6659,
	3864:  0x665B,
	3865:  0x665C,
	3866:  0x665D,
	3867:  0x665E,
	3868:  0x6660,
	3869:  0x6662,
	3870:  0x6663,
	3871:  0x6665,
	3872:  0x6667,
	3873:  0x6669,
	3874:  0x666A,
	3875:  0x666B,
	3876:  0x666C,
	3877:  0x666D,
	3878:  0x6671,
	3879:  0x6672,
	3880:  0x6673,
	3881:  0x6675,
	3882:  0x6678,
	3883:  0x6679,
	3884:  0x667B,
	3885:  0x667C,
	3886:  0x667D,
	3887:  0x667F,
	3888:  0x6680,
	3889:  0x6681,
	3890:  0x6683,
	3891:  0x6685,
	3892:  0x6686,
	3893:  0x6688,
	3894:  0x6689,
	3895:  0x668A,
	3896:  0x668B,
	3897:  0x668D,
	3898:  0x668E,
	3899:  0x668F,
	3900:  0x6690,
	3901:  0x6692,
	3902:  0x6693,
	3903:  0x6694,
	3904:  0x6695,
	3905:  0x6698,
	3906:  0x6699,
	3907:  0x669A,
	3908:  0x669B,
	3909:  0x669C,
	3910:  0x669E,
	3911:  0x669F,
	3912:  0x66A0,
	3913:  0x66A1,
	3914:  0x66A2,
	3915:  0x66A3,
	3916:  0x66A4,
	3917:  0x66A5,
	3918:  0x66A6,
	3919:  0x66A9,
	3920:  0x66AA,
	3921:  0x66AB,
	3922:  0x66AC,
	3923:  0x66AD,
	3924:  0x66AF,
	3925:  0x66B0,
	3926:  0x66B1,
	3927:  0x66B2,
	3928:  0x66B3,
	3929:  0x66B5,
	3930:  0x66B6,
	3931:  0x66B7,
	3932:  0x66B8,
	3933:  0x66BA,
	3934:  0x66BB,
	3935:  0x66BC,
	3936:  0x66BD,
	3937:  0x66BF,
	3938:  0x66C0,
	3939:  0x66C1,
	3940:  0x66C2,
	3941:  0x66C3,
	3942:  0x66C4,
	3943:  0x66C5,
	3944:  0x66C6,
	3945:  0x66C7,
	3946:  0x66C8,
	3947:  0x66C9,
	3948:  0x66CA,
	3949:  0x66CB,
	3950:  0x66CC,
	3951:  0x66CD,
	3952:  0x66CE,
	3953:  0x66CF,
	3954:  0x66D0,
	3955:  0x66D1,
	3956:  0x66D2,
	3957:  0x66D3,
	3958:  0x66D4,
	3959:  0x66D5,
	3960:  0x66D6,
	3961:  0x66D7,
	3962:  0x66D8,
	3963:  0x66DA,
	3964:  0x66DE,
	3965:  0x66DF,
	3966:  0x66E0,
	3967:  0x66E1,
	3968:  0x66E2,
	3969:  0x66E3,
	3970:  0x66E4,
	3971:  0x66E5,
	3972:  0x66E7,
	3973:  0x66E8,
	3974:  0x66EA,
	3975:  0x66EB,
	3976:  0x66EC,
	3977:  0x66ED,
	3978:  0x66EE,
	3979:  0x66EF,
	3980:  0x66F1,
	3981:  0x66F5,
	3982:  0x66F6,
	3983:  0x66F8,
	3984:  0x66FA,
	3985:  0x66FB,
	3986:  0x66FD,
	3987:  0x6701,
	3988:  0x6702,
	3989:  0x6703,
	3990:  0x6704,
	3991:  0x6705,
	3992:  0x6706,
	3993:  0x6707,
	3994:  0x670C,
	3995:  0x670E,
	3996:  0x670F,
	3997:  0x6711,
	3998:  0x6712,
	3999:  0x6713,
	4000:  0x6716,
	4001:  0x6718,
	4002:  0x6719,
	4003:  0x671A,
	4004:  0x671C,
	4005:  0x671E,
	4006:  0x6720,
	4007:  0x6721,
	4008:  0x6722,
	4009:  0x6723,
	4010:  0x6724,
	4011:  0x6725,
	4012:  0x6727,
	4013:  0x6729,
	4014:  0x672E,
	4015:  0x6730,
	4016:  0x6732,
	4017:  0x6733,
	4018:  0x6736,
	4019:  0x6737,
	4020:  0x6738,
	4021:  0x6739,
	4022:  0x673B,
	4023:  0x673C,
	4024:  0x673E,
	4025:  0x673F,
	4026:  0x6741,
	4027:  0x6744,
	4028:  0x6745,
	4029:  0x6747,
	4030:  0x674A,
	4031:  0x674B,
	4032:  0x674D,
	4033:  0x6752,
	4034:  0x6754,
	4035:  0x6755,
	4036:  0x6757,
	4037:  0x6758,
	4038:  0x6759,
	4039:  0x675A,
	4040:  0x675B,
	4041:  0x675D,
	4042:  0x6762,
	4043:  0x6763,
	4044:  0x6764,
	4045:  0x6766,
	4046:  0x6767,
	4047:  0x676B,
	4048:  0x676C,
	4049:  0x676E,
	4050:  0x6771,
	4051:  0x6774,
	4052:  0x6776,
	4053:  0x6778,
	4054:  0x6779,
	4055:  0x677A,
	4056:  0x677B,
	4057:  0x677D,
	4058:  0x6780,
	4059:  0x6782,
	4060:  0x6783,
	4061:  0x6785,
	4062:  0x6786,
	4063:  0x6788,
	4064:  0x678A,
	4065:  0x678C,
	4066:  0x678D,
	4067:  0x678E,
	4068:  0x678F,
	4069:  0x6791,
	4070:  0x6792,
	4071:  0x6793,
	4072:  0x6794,
	4073:  0x6796,
	4074:  0x6799,
	4075:  0x679B,
	4076:  0x679F,
	4077:  0x67A0,
	4078:  0x67A1,
	4079:  0x67A4,
	4080:  0x67A6,
	4081:  0x67A9,
	4082:  0x67AC,
	4083:  0x67AE,
	4084:  0x67B1,
	4085:  0x67B2,
	4086:  0x67B4,
	4087:  0x67B9,
	4088:  0x67BA,
	4089:  0x67BB,
	4090:  0x67BC,
	4091:  0x67BD,
	4092:  0x67BE,
	4093:  0x67BF,
	4094:  0x67C0,
	4095:  0x67C2,
	4096:  0x67C5,
	4097:  0x67C6,
	4098:  0x67C7,
	4099:  0x67C8,
	4100:  0x67C9,
	4101:  0x67CA,
	4102:  0x67CB,
	4103:  0x67CC,
	4104:  0x67CD,
	4105:  0x67CE,
	4106:  0x67D5,
	4107:  0x67D6,
	4108:  0x67D7,
	4109:  0x67DB,
	4110:  0x67DF,
	4111:  0x67E1,
	4112:  0x67E3,
	4113:  0x67E4,
	4114:  0x67E6,
	4115:  0x67E7,
	4116:  0x67E8,
	4117:  0x67EA,
	4118:  0x67EB,
	4119:  0x67ED,
	4120:  0x67EE,
	4121:  0x67F2,
	4122:  0x67F5,
	4123:  0x67F6,
	4124:  0x67F7,
	4125:  0x67F8,
	4126:  0x67F9,
	4127:  0x67FA,
	4128:  0x67FB,
	4129:  0x67FC,
	4130:  0x67FE,
	4131:  0x6801,
	4132:  0x6802,
	4133:  0x6803,
	4134:  0x6804,
	4135:  0x6806,
	4136:  0x680D,
	4137:  0x6810,
	4138:  0x6812,
	4139:  0x6814,
	4140:  0x6815,
	4141:  0x6818,
	4142:  0x6819,
	4143:  0x681A,
	4144:  0x681B,
	4145:  0x681C,
	4146:  0x681E,
	4147:  0x681F,
	4148:  0x6820,
	4149:  0x6822,
	4150:  0x6823,
	4151:  0x6824,
	4152:  0x6825,
	4153:  0x6826,
	4154:  0x6827,
	4155:  0x6828,
	4156:  0x682B,
	4157:  0x682C,
	4158:  0x682D,
	4159:  0x682E,
	4160:  0x682F,
	4161:  0x6830,
	4162:  0x6831,
	4163:  0x6834,
	4164:  0x6835,
	4165:  0x6836,
	4166:  0x683A,
	4167:  0x683B,
	4168:  0x683F,
	4169:  0x6847,
	4170:  0x684B,
	4171:  0x684D,
	4172:  0x684F,
	4173:  0x6852,
	4174:  0x6856,
	4175:  0x6857,
	4176:  0x6858,
	4177:  0x6859,
	4178:  0x685A,
	4179:  0x685B,
	4180:  0x685C,
	4181:  0x685D,
	4182:  0x685E,
	4183:  0x685F,
	4184:  0x686A,
	4185:  0x686C,
	4186:  0x686D,
	4187:  0x686E,
	4188:  0x686F,
	4189:  0x6870,
	4190:  0x6871,
	4191:  0x6872,
	4192:  0x6873,
	4193:  0x6875,
	4194:  0x6878,
	4195:  0x6879,
	4196:  0x687A,
	4197:  0x687B,
	4198:  0x687C,
	4199:  0x687D,
	4200:  0x687E,
	4201:  0x687F,
	4202:  0x6880,
	4203:  0x6882,
	4204:  0x6884,
	4205:  0x6887,
	4206:  0x6888,
	4207:  0x6889,
	4208:  0x688A,
	4209:  0x688B,
	4210:  0x688C,
	4211:  0x688D,
	4212:  0x688E,
	4213:  0x6890,
	4214:  0x6891,
	4215:  0x6892,
	4216:  0x6894,
	4217:  0x6895,
	4218:  0x6896,
	4219:  0x6898,
	4220:  0x6899,
	4221:  0x689A,
	4222:  0x689B,
	4223:  0x689C,
	4224:  0x689D,
	4225:  0x689E,
	4226:  0x689F,
	4227:  0x68A0,
	4228:  0x68A1,
	4229:  0x68A3,
	4230:  0x68A4,
	4231:  0x68A5,
	4232:  0x68A9,
	4233:  0x68AA,
	4234:  0x68AB,
	4235:  0x68AC,
	4236:  0x68AE,
	4237:  0x68B1,
	4238:  0x68B2,
	4239:  0x68B4,
	4240:  0x68B6,
	4241:  0x68B7,
	4242:  0x68B8,
	4243:  0x68B9,
	4244:  0x68BA,
	4245:  0x68BB,
	4246:  0x68BC,
	4247:  0x68BD,
	4248:  0x68BE,
	4249:  0x68BF,
	4250:  0x68C1,
	4251:  0x68C3,
	4252:  0x68C4,
	4253:  0x68C5,
	4254:  0x68C6,
	4255:  0x68C7,
	4256:  0x68C8,
	4257:  0x68CA,
	4258:  0x68CC,
	4259:  0x68CE,
	4260:  0x68CF,
	4261:  0x68D0,
	4262:  0x68D1,
	4263:  0x68D3,
	4264:  0x68D4,
	4265:  0x68D6,
	4266:  0x68D7,
	4267:  0x68D9,
	4268:  0x68DB,
	4269:  0x68DC,
	4270:  0x68DD,
	4271:  0x68DE,
	4272:  0x68DF,
	4273:  0x68E1,
	4274:  0x68E2,
	4275:  0x68E4,
	4276:  0x68E5,
	4277:  0x68E6,
	4278:  0x68E7,
	4279:  0x68E8,
	4280:  0x68E9,
	4281:  0x68EA,
	4282:  0x68EB,
	4283:  0x68EC,
	4284:  0x68ED,
	4285:  0x68EF,
	4286:  0x68F2,
	4287:  0x68F3,
	4288:  0x68F4,
	4289:  0x68F6,
	4290:  0x68F7,
	4291:  0x68F8,
	4292:  0x68FB,
	4293:  0x68FD,
	4294:  0x68FE,
	4295:  0x68FF,
	4296:  0x6900,
	4297:  0x6902,
	4298:  0x6903,
	4299:  0x6904,
	4300:  0x6906,
	4301:  0x6907,
	4302:  0x6908,
	4303:  0x6909,
	4304:  0x690A,
	4305:  0x690C,
	4306:  0x690F,
	4307:  0x6911,
	4308:  0x6913,
	4309:  0x6914,
	4310:  0x6915,
	4311:  0x6916,
	4312:  0x6917,
	4313:  0x6918,
	4314:  0x6919,
	4315:  0x691A,
	4316:  0x691B,
	4317:  0x691C,
	4318:  0x691D,
	4319:  0x691E,
	4320:  0x6921,
	4321:  0x6922,
	4322:  0x6923,
	4323:  0x6925,
	4324:  0x6926,
	4325:  0x6927,
	4326:  0x6928,
	4327:  0x6929,
	4328:  0x692A,
	4329:  0x692B,
	4330:  0x692C,
	4331:  0x692E,
	4332:  0x692F,
	4333:  0x6931,
	4334:  0x6932,
	4335:  0x6933,
	4336:  0x6935,
	4337:  0x6936,
	4338:  0x6937,
	4339:  0x6938,
	4340:  0x693A,
	4341:  0x693B,
	4342:  0x693C,
	4343:  0x693E,
	4344:  0x6940,
	4345:  0x6941,
	4346:  0x6943,
	4347:  0x6944,
	4348:  0x6945,
	4349:  0x6946,
	4350:  0x6947,
	4351:  0x6948,
	4352:  0x6949,
	4353:  0x694A,
	4354:  0x694B,
	4355:  0x694C,
	4356:  0x694D,
	4357:  0x694E,
	4358:  0x694F,
	4359:  0x6950,
	4360:  0x6951,
	4361:  0x6952,
	4362:  0x6953,
	4363:  0x6955,
	4364:  0x6956,
	4365:  0x6958,
	4366:  0x6959,
	4367:  0x695B,
	4368:  0x695C,
	4369:  0x695F,
	4370:  0x6961,
	4371:  0x6962,
	4372:  0x6964,
	4373:  0x6965,
	4374:  0x6967,
	4375:  0x6968,
	4376:  0x6969,
	4377:  0x696A,
	4378:  0x696C,
	4379:  0x696D,
	4380:  0x696F,
	4381:  0x6970,
	4382:  0x6972,
	4383:  0x6973,
	4384:  0x6974,
	4385:  0x6975,
	4386:  0x6976,
	4387:  0x697A,
	4388:  0x697B,
	4389:  0x697D,
	4390:  0x697E,
	4391:  0x697F,
	4392:  0x6981,
	4393:  0x6983,
	4394:  0x6985,
	4395:  0x698A,
	4396:  0x698B,
	4397:  0x698C,
	4398:  0x698E,
	4399:  0x698F,
	4400:  0x6990,
	4401:  0x6991,
	4402:  0x6992,
	4403:  0x6993,
	4404:  0x6996,
	4405:  0x6997,
	4406:  0x6999,
	4407:  0x699A,
	4408:  0x699D,
	4409:  0x699E,
	4410:  0x699F,
	4411:  0x69A0,
	4412:  0x69A1,
	4413:  0x69A2,
	4414:  0x69A3,
	4415:  0x69A4,
	4416:  0x69A5,
	4417:  0x69A6,
	4418:  0x69A9,
	4419:  0x69AA,
	4420:  0x69AC,
	4421:  0x69AE,
	4422:  0x69AF,
	4423:  0x69B0,
	4424:  0x69B2,
	4425:  0x69B3,
	4426:  0x69B5,
	4427:  0x69B6,
	4428:  0x69B8,
	4429:  0x69B9,
	4430:  0x69BA,
	4431:  0x69BC,
	4432:  0x69BD,
	4433:  0x69BE,
	4434:  0x69BF,
	4435:  0x69C0,
	4436:  0x69C2,
	4437:  0x69C3,
	4438:  0x69C4,
	4439:  0x69C5,
	4440:  0x69C6,
	4441:  0x69C7,
	4442:  0x69C8,
	4443:  0x69C9,
	4444:  0x69CB,
	4445:  0x69CD,
	4446:  0x69CF,
	4447:  0x69D1,
	4448:  0x69D2,
	4449:  0x69D3,
	4450:  0x69D5,
	4451:  0x69D6,
	4452:  0x69D7,
	4453:  0x69D8,
	4454:  0x69D9,
	4455:  0x69DA,
	4456:  0x69DC,
	4457:  0x69DD,
	4458:  0x69DE,
	4459:  0x69E1,
	4460:  0x69E2,
	4461:  0x69E3,
	4462:  0x69E4,
	4463:  0x69E5,
	4464:  0x69E6,
	4465:  0x69E7,
	4466:  0x69E8,
	4467:  0x69E9,
	4468:  0x69EA,
	4469:  0x69EB,
	4470:  0x69EC,
	4471:  0x69EE,
	4472:  0x69EF,
	4473:  0x69F0,
	4474:  0x69F1,
	4475:  0x69F3,
	4476:  0x69F4,
	4477:  0x69F5,
	4478:  0x69F6,
	4479:  0x69F7,
	4480:  0x69F8,
	4481:  0x69F9,
	4482:  0x69FA,
	4483:  0x69FB,
	4484:  0x69FC,
	4485:  0x69FE,
	4486:  0x6A00,
	4487:  0x6A01,
	4488:  0x6A02,
	4489:  0x6A03,
	4490:  0x6A04,
	4491:  0x6A05,
	4492:  0x6A06,
	4493:  0x6A07,
	4494:  0x6A08,
	4495:  0x6A09,
	4496:  0x6A0B,
	4497:  0x6A0C,
	4498:  0x6A0D,
	4499:  0x6A0E,
	4500:  0x6A0F,
	4501:  0x6A10,
	4502:  0x6A11,
	4503:  0x6A12,
	4504:  0x6A13,
	4505:  0x6A14,
	4506:  0x6A15,
	4507:  0x6A16,
	4508:  0x6A19,
	4509:  0x6A1A,
	4510:  0x6A1B,
	4511:  0x6A1C,
	4512:  0x6A1D,
	4513:  0x6A1E,
	4514:  0x6A20,
	4515:  0x6A22,
	4516:  0x6A23,
	4517:  0x6A24,
	4518:  0x6A25,
	4519:  0x6A26,
	4520:  0x6A27,
	4521:  0x6A29,
	4522:  0x6A2B,
	4523:  0x6A2C,
	4524:  0x6A2D,
	4525:  0x6A2E,
	4526:  0x6A30,
	4527:  0x6A32,
	4528:  0x6A33,
	4529:  0x6A34,
	4530:  0x6A36,
	4531:  0x6A37,
	4532:  0x6A38,
	4533:  0x6A39,
	4534:  0x6A3A,
	4535:  0x6A3B,
	4536:  0x6A3C,
	4537:  0x6A3F,
	4538:  0x6A40,
	4539:  0x6A41,
	4540:  0x6A42,
	4541:  0x6A43,
	4542:  0x6A45,
	4543:  0x6A46,
	4544:  0x6A48,
	4545:  0x6A49,
	4546:  0x6A4A,
	4547:  0x6A4B,
	4548:  0x6A4C,
	4549:  0x6A4D,
	4550:  0x6A4E,
	4551:  0x6A4F,
	4552:  0x6A51,
	4553:  0x6A52,
	4554:  0x6A53,
	4555:  0x6A54,
	4556:  0x6A55,
	4557:  0x6A56,
	4558:  0x6A57,
	4559:  0x6A5A,
	4560:  0x6A5C,
	4561:  0x6A5D,
	4562:  0x6A5E,
	4563:  0x6A5F,
	4564:  0x6A60,
	4565:  0x6A62,
	4566:  0x6A63,
	4567:  0x6A64,
	4568:  0x6A66,
	4569:  0x6A67,
	4570:  0x6A68,
	4571:  0x6A69,
	4572:  0x6A6A,
	4573:  0x6A6B,
	4574:  0x6A6C,
	4575:  0x6A6D,
	4576:  0x6A6E,
	4577:  0x6A6F,
	4578:  0x6A70,
	4579:  0x6A72,
	4580:  0x6A73,
	4581:  0x6A74,
	4582:  0x6A75,
	4583:  0x6A76,
	4584:  0x6A77,
	4585:  0x6A78,
	4586:  0x6A7A,
	4587:  0x6A7B,
	4588:  0x6A7D,
	4589:  0x6A7E,
	4590:  0x6A7F,
	4591:  0x6A81,
	4592:  0x6A82,
	4593:  0x6A83,
	4594:  0x6A85,
	4595:  0x6A86,
	4596:  0x6A87,
	4597:  0x6A88,
	4598:  0x6A89,
	4599:  0x6A8A,
	4600:  0x6A8B,
	4601:  0x6A8C,
	4602:  0x6A8D,
	4603:  0x6A8F,
	4604:  0x6A92,
	4605:  0x6A93,
	4606:  0x6A94,
	4607:  0x6A95,
	4608:  0x6A96,
	4609:  0x6A98,
	4610:  0x6A99,
	4611:  0x6A9A,
	4612:  0x6A9B,
	4613:  0x6A9C,
	4614:  0x6A9D,
	4615:  0x6A9E,
	4616:  0x6A9F,
	4617:  0x6AA1,
	4618:  0x6AA2,
	4619:  0x6AA3,
	4620:  0x6AA4,
	4621:  0x6AA5,
	4622:  0x6AA6,
	4623:  0x6AA7,
	4624:  0x6AA8,
	4625:  0x6AAA,
	4626:  0x6AAD,
	4627:  0x6AAE,
	4628:  0x6AAF,
	4629:  0x6AB0,
	4630:  0x6AB1,
	4631:  0x6AB2,
	4632:  0x6AB3,
	4633:  0x6AB4,
	4634:  0x6AB5,
	4635:  0x6AB6,
	4636:  0x6AB7,
	4637:  0x6AB8,
	4638:  0x6AB9,
	4639:  0x6ABA,
	4640:  0x6ABB,
	4641:  0x6ABC,
	4642:  0x6ABD,
	4643:  0x6ABE,
	4644:  0x6ABF,
	4645:  0x6AC0,
	4646:  0x6AC1,
	4647:  0x6AC2,
	4648:  0x6AC3,
	4649:  0x6AC4,
	4650:  0x6AC5,
	4651:  0x6AC6,
	4652:  0x6AC7,
	4653:  0x6AC8,
	4654:  0x6AC9,
	4655:  0x6ACA,
	4656:  0x6ACB,
	4657:  0x6ACC,
	4658:  0x6ACD,
	4659:  0x6ACE,
	4660:  0x6ACF,
	4661:  0x6AD0,
	4662:  0x6AD1,
	4663:  0x6AD2,
	4664:  0x6AD3,
	4665:  0x6AD4,
	4666:  0x6AD5,
	4667:  0x6AD6,
	4668:  0x6AD7,
	4669:  0x6AD8,
	4670:  0x6AD9,
	4671:  0x6ADA,
	4672:  0x6ADB,
	4673:  0x6ADC,
	4674:  0x6ADD,
	4675:  0x6ADE,
	4676:  0x6ADF,
	4677:  0x6AE0,
	4678:  0x6AE1,
	4679:  0x6AE2,
	4680:  0x6AE3,
	4681:  0x6AE4,
	4682:  0x6AE5,
	4683:  0x6AE6,
	4684:  0x6AE7,
	4685:  0x6AE8,
	4686:  0x6AE9,
	4687:  0x6AEA,
	4688:  0x6AEB,
	4689:  0x6AEC,
	4690:  0x6AED,
	4691:  0x6AEE,
	4692:  0x6AEF,
	4693:  0x6AF0,
	4694:  0x6AF1,
	4695:  0x6AF2,
	4696:  0x6AF3,
	4697:  0x6AF4,
	4698:  0x6AF5,
	4699:  0x6AF6,
	4700:  0x6AF7,
	4701:  0x6AF8,
	4702:  0x6AF9,
	4703:  0x6AFA,
	4704:  0x6AFB,
	4705:  0x6AFC,
	4706:  0x6AFD,
	4707:  0x6AFE,
	4708:  0x6AFF,
	4709:  0x6B00,
	4710:  0x6B01,
	4711:  0x6B02,
	4712:  0x6B03,
	4713:  0x6B04,
	4714:  0x6B05,
	4715:  0x6B06,
	4716:  0x6B07,
	4717:  0x6B08,
	4718:  0x6B09,
	4719:  0x6B0A,
	4720:  0x6B0B,
	4721:  0x6B0C,
	4722:  0x6B0D,
	4723:  0x6B0E,
	4724:  0x6B0F,
	4725:  0x6B10,
	4726:  0x6B11,
	4727:  0x6B12,
	4728:  0x6B13,
	4729:  0x6B14,
	4730:  0x6B15,
	4731:  0x6B16,
	4732:  0x6B17,
	4733:  0x6B18,
	4734:  0x6B19,
	4735:  0x6B1A,
	4736:  0x6B1B,
	4737:  0x6B1C,
	4738:  0x6B1D,
	4739:  0x6B1E,
	4740:  0x6B1F,
	4741:  0x6B25,
	4742:  0x6B26,
	4743:  0x6B28,
	4744:  0x6B29,
	4745:  0x6B2A,
	4746:  0x6B2B,
	4747:  0x6B2C,
	4748:  0x6B2D,
	4749:  0x6B2E,
	4750:  0x6B2F,
	4751:  0x6B30,
	4752:  0x6B31,
	4753:  0x6B33,
	4754:  0x6B34,
	4755:  0x6B35,
	4756:  0x6B36,
	4757:  0x6B38,
	4758:  0x6B3B,
	4759:  0x6B3C,
	4760:  0x6B3D,
	4761:  0x6B3F,
	4762:  0x6B40,
	4763:  0x6B41,
	4764:  0x6B42,
	4765:  0x6B44,
	4766:  0x6B45,
	4767:  0x6B48,
	4768:  0x6B4A,
	4769:  0x6B4B,
	4770:  0x6B4D,
	4771:  0x6B4E,
	4772:  0x6B4F,
	4773:  0x6B50,
	4774:  0x6B51,
	4775:  0x6B52,
	4776:  0x6B53,
	4777:  0x6B54,
	4778:  0x6B55,
	4779:  0x6B56,
	4780:  0x6B57,
	4781:  0x6B58,
	4782:  0x6B5A,
	4783:  0x6B5B,
	4784:  0x6B5C,
	4785:  0x6B5D,
	4786:  0x6B5E,
	4787:  0x6B5F,
	4788:  0x6B60,
	4789:  0x6B61,
	4790:  0x6B68,
	4791:  0x6B69,
	4792:  0x6B6B,
	4793:  0x6B6C,
	4794:  0x6B6D,
	4795:  0x6B6E,
	4796:  0x6B6F,
	4797:  0x6B70,
	4798:  0x6B71,
	4799:  0x6B72,
	4800:  0x6B73,
	4801:  0x6B74,
	4802:  0x6B75,
	4803:  0x6B76,
	4804:  0x6B77,
	4805:  0x6B78,
	4806:  0x6B7A,
	4807:  0x6B7D,
	4808:  0x6B7E,
	4809:  0x6B7F,
	4810:  0x6B80,
	4811:  0x6B85,
	4812:  0x6B88,
	4813:  0x6B8C,
	4814:  0x6B8E,
	4815:  0x6B8F,
	4816:  0x6B90,
	4817:  0x6B91,
	4818:  0x6B94,
	4819:  0x6B95,
	4820:  0x6B97,
	4821:  0x6B98,
	4822:  0x6B99,
	4823:  0x6B9C,
	4824:  0x6B9D,
	4825:  0x6B9E,
	4826:  0x6B9F,
	4827:  0x6BA0,
	4828:  0x6BA2,
	4829:  0x6BA3,
	4830:  0x6BA4,
	4831:  0x6BA5,
	4832:  0x6BA6,
	4833:  0x6BA7,
	4834:  0x6BA8,
	4835:  0x6BA9,
	4836:  0x6BAB,
	4837:  0x6BAC,
	4838:  0x6BAD,
	4839:  0x6BAE,
	4840:  0x6BAF,
	4841:  0x6BB0,
	4842:  0x6BB1,
	4843:  0x6BB2,
	4844:  0x6BB6,
	4845:  0x6BB8,
	4846:  0x6BB9,
	4847:  0x6BBA,
	4848:  0x6BBB,
	4849:  0x6BBC,
	4850:  0x6BBD,
	4851:  0x6BBE,
	4852:  0x6BC0,
	4853:  0x6BC3,
	4854:  0x6BC4,
	4855:  0x6BC6,
	4856:  0x6BC7,
	4857:  0x6BC8,
	4858:  0x6BC9,
	4859:  0x6BCA,
	4860:  0x6BCC,
	4861:  0x6BCE,
	4862:  0x6BD0,
	4863:  0x6BD1,
	4864:  0x6BD8,
	4865:  0x6BDA,
	4866:  0x6BDC,
	4867:  0x6BDD,
	4868:  0x6BDE,
	4869:  0x6BDF,
	4870:  0x6BE0,
	4871:  0x6BE2,
	4872:  0x6BE3,
	4873:  0x6BE4,
	4874:  0x6BE5,
	4875:  0x6BE6,
	4876:  0x6BE7,
	4877:  0x6BE8,
	4878:  0x6BE9,
	4879:  0x6BEC,
	4880:  0x6BED,
	4881:  0x6BEE,
	4882:  0x6BF0,
	4883:  0x6BF1,
	4884:  0x6BF2,
	4885:  0x6BF4,
	4886:  0x6BF6,
	4887:  0x6BF7,
	4888:  0x6BF8,
	4889:  0x6BFA,
	4890:  0x6BFB,
	4891:  0x6BFC,
	4892:  0x6BFE,
	4893:  0x6BFF,
	4894:  0x6C00,
	4895:  0x6C01,
	4896:  0x6C02,
	4897:  0x6C03,
	4898:  0x6C04,
	4899:  0x6C08,
	4900:  0x6C09,
	4901:  0x6C0A,
	4902:  0x6C0B,
	4903:  0x6C0C,
	4904:  0x6C0E,
	4905:  0x6C12,
	4906:  0x6C17,
	4907:  0x6C1C,
	4908:  0x6C1D,
	4909:  0x6C1E,
	4910:  0x6C20,
	4911:  0x6C23,
	4912:  0x6C25,
	4913:  0x6C2B,
	4914:  0x6C2C,
	4915:  0x6C2D,
	4916:  0x6C31,
	4917:  0x6C33,
	4918:  0x6C36,
	4919:  0x6C37,
	4920:  0x6C39,
	4921:  0x6C3A,
	4922:  0x6C3B,
	4923:  0x6C3C,
	4924:  0x6C3E,
	4925:  0x6C3F,
	4926:  0x6C43,
	4927:  0x6C44,
	4928:  0x6C45,
	4929:  0x6C48,
	4930:  0x6C4B,
	4931:  0x6C4C,
	4932:  0x6C4D,
	4933:  0x6C4E,
	4934:  0x6C4F,
	4935:  0x6C51,
	4936:  0x6C52,
	4937:  0x6C53,
	4938:  0x6C56,
	4939:  0x6C58,
	4940:  0x6C59,
	4941:  0x6C5A,
	4942:  0x6C62,
	4943:  0x6C63,
	4944:  0x6C65,
	4945:  0x6C66,
	4946:  0x6C67,
	4947:  0x6C6B,
	4948:  0x6C6C,
	4949:  0x6C6D,
	4950:  0x6C6E,
	4951:  0x6C6F,
	4952:  0x6C71,
	4953:  0x6C73,
	4954:  0x6C75,
	4955:  0x6C77,
	4956:  0x6C78,
	4957:  0x6C7A,
	4958:  0x6C7B,
	4959:  0x6C7C,
	4960:  0x6C7F,
	4961:  0x6C80,
	4962:  0x6C84,
	4963:  0x6C87,
	4964:  0x6C8A,
	4965:  0x6C8B,
	4966:  0x6C8D,
	4967:  0x6C8E,
	4968:  0x6C91,
	4969:  0x6C92,
	4970:  0x6C95,
	4971:  0x6C96,
	4972:  0x6C97,
	4973:  0x6C98,
	4974:  0x6C9A,
	4975:  0x6C9C,
	4976:  0x6C9D,
	4977:  0x6C9E,
	4978:  0x6CA0,
	4979:  0x6CA2,
	4980:  0x6CA8,
	4981:  0x6CAC,
	4982:  0x6CAF,
	4983:  0x6CB0,
	4984:  0x6CB4,
	4985:  0x6CB5,
	4986:  0x6CB6,
	4987:  0x6CB7,
	4988:  0x6CBA,
	4989:  0x6CC0,
	4990:  0x6CC1,
	4991:  0x6CC2,
	4992:  0x6CC3,
	4993:  0x6CC6,
	4994:  0x6CC7,
	4995:  0x6CC8,
	4996:  0x6CCB,
	4997:  0x6CCD,
	4998:  0x6CCE,
	4999:  0x6CCF,
	5000:  0x6CD1,
	5001:  0x6CD2,
	5002:  0x6CD8,
	5003:  0x6CD9,
	5004:  0x6CDA,
	5005:  0x6CDC,
	5006:  0x6CDD,
	5007:  0x6CDF,
	5008:  0x6CE4,
	5009:  0x6CE6,
	5010:  0x6CE7,
	5011:  0x6CE9,
	5012:  0x6CEC,
	5013:  0x6CED,
	5014:  0x6CF2,
	5015:  0x6CF4,
	5016:  0x6CF9,
	5017:  0x6CFF,
	5018:  0x6D00,
	5019:  0x6D02,
	5020:  0x6D03,
	5021:  0x6D05,
	5022:  0x6D06,
	5023:  0x6D08,
	5024:  0x6D09,
	5025:  0x6D0A,
	5026:  0x6D0D,
	5027:  0x6D0F,
	5028:  0x6D10,
	5029:  0x6D11,
	5030:  0x6D13,
	5031:  0x6D14,
	5032:  0x6D15,
	5033:  0x6D16,
	5034:  0x6D18,
	5035:  0x6D1C,
	5036:  0x6D1D,
	5037:  0x6D1F,
	5038:  0x6D20,
	5039:  0x6D21,
	5040:  0x6D22,
	5041:  0x6D23,
	5042:  0x6D24,
	5043:  0x6D26,
	5044:  0x6D28,
	5045:  0x6D29,
	5046:  0x6D2C,
	5047:  0x6D2D,
	5048:  0x6D2F,
	5049:  0x6D30,
	5050:  0x6D34,
	5051:  0x6D36,
	5052:  0x6D37,
	5053:  0x6D38,
	5054:  0x6D3A,
	5055:  0x6D3F,
	5056:  0x6D40,
	5057:  0x6D42,
	5058:  0x6D44,
	5059:  0x6D49,
	5060:  0x6D4C,
	5061:  0x6D50,
	5062:  0x6D55,
	5063:  0x6D56,
	5064:  0x6D57,
	5065:  0x6D58,
	5066:  0x6D5B,
	5067:  0x6D5D,
	5068:  0x6D5F,
	5069:  0x6D61,
	5070:  0x6D62,
	5071:  0x6D64,
	5072:  0x6D65,
	5073:  0x6D67,
	5074:  0x6D68,
	5075:  0x6D6B,
	5076:  0x6D6C,
	5077:  0x6D6D,
	5078:  0x6D70,
	5079:  0x6D71,
	5080:  0x6D72,
	5081:  0x6D73,
	5082:  0x6D75,
	5083:  0x6D76,
	5084:  0x6D79,
	5085:  0x6D7A,
	5086:  0x6D7B,
	5087:  0x6D7D,
	5088:  0x6D7E,
	5089:  0x6D7F,
	5090:  0x6D80,
	5091:  0x6D81,
	5092:  0x6D83,
	5093:  0x6D84,
	5094:  0x6D86,
	5095:  0x6D87,
	5096:  0x6D8A,
	5097:  0x6D8B,
	5098:  0x6D8D,
	5099:  0x6D8F,
	5100:  0x6D90,
	5101:  0x6D92,
	5102:  0x6D96,
	5103:  0x6D97,
	5104:  0x6D98,
	5105:  0x6D99,
	5106:  0x6D9A,
	5107:  0x6D9C,
	5108:  0x6DA2,
	5109:  0x6DA5,
	5110:  0x6DAC,
	5111:  0x6DAD,
	5112:  0x6DB0,
	5113:  0x6DB1,
	5114:  0x6DB3,
	5115:  0x6DB4,
	5116:  0x6DB6,
	5117:  0x6DB7,
	5118:  0x6DB9,
	5119:  0x6DBA,
	5120:  0x6DBB,
	5121:  0x6DBC,
	5122:  0x6DBD,
	5123:  0x6DBE,
	5124:  0x6DC1,
	5125:  0x6DC2,
	5126:  0x6DC3,
	5127:  0x6DC8,
	5128:  0x6DC9,
	5129:  0x6DCA,
	5130:  0x6DCD,
	5131:  0x6DCE,
	5132:  0x6DCF,
	5133:  0x6DD0,
	5134:  0x6DD2,
	5135:  0x6DD3,
	5136:  0x6DD4,
	5137:  0x6DD5,
	5138:  0x6DD7,
	5139:  0x6DDA,
	5140:  0x6DDB,
	5141:  0x6DDC,
	5142:  0x6DDF,
	5143:  0x6DE2,
	5144:  0x6DE3,
	5145:  0x6DE5,
	5146:  0x6DE7,
	5147:  0x6DE8,
	5148:  0x6DE9,
	5149:  0x6DEA,
	5150:  0x6DED,
	5151:  0x6DEF,
	5152:  0x6DF0,
	5153:  0x6DF2,
	5154:  0x6DF4,
	5155:  0x6DF5,
	5156:  0x6DF6,
	5157:  0x6DF8,
	5158:  0x6DFA,
	5159:  0x6DFD,
	5160:  0x6DFE,
	5161:  0x6DFF,
	5162:  0x6E00,
	5163:  0x6E01,
	5164:  0x6E02,
	5165:  0x6E03,
	5166:  0x6E04,
	5167:  0x6E06,
	5168:  0x6E07,
	5169:  0x6E08,
	5170:  0x6E09,
	5171:  0x6E0B,
	5172:  0x6E0F,
	5173:  0x6E12,
	5174:  0x6E13,
	5175:  0x6E15,
	5176:  0x6E18,
	5177:  0x6E19,
	5178:  0x6E1B,
	5179:  0x6E1C,
	5180:  0x6E1E,
	5181:  0x6E1F,
	5182:  0x6E22,
	5183:  0x6E26,
	5184:  0x6E27,
	5185:  0x6E28,
	5186:  0x6E2A,
	5187:  0x6E2C,
	5188:  0x6E2E,
	5189:  0x6E30,
	5190:  0x6E31,
	5191:  0x6E33,
	5192:  0x6E35,
	5193:  0x6E36,
	5194:  0x6E37,
	5195:  0x6E39,
	5196:  0x6E3B,
	5197:  0x6E3C,
	5198:  0x6E3D,
	5199:  0x6E3E,
	5200:  0x6E3F,
	5201:  0x6E40,
	5202:  0x6E41,
	5203:  0x6E42,
	5204:  0x6E45,
	5205:  0x6E46,
	5206:  0x6E47,
	5207:  0x6E48,
	5208:  0x6E49,
	5209:  0x6E4A,
	5210:  0x6E4B,
	5211:  0x6E4C,
	5212:  0x6E4F,
	5213:  0x6E50,
	5214:  0x6E51,
	5215:  0x6E52,
	5216:  0x6E55,
	5217:  0x6E57,
	5218:  0x6E59,
	5219:  0x6E5A,
	5220:  0x6E5C,
	5221:  0x6E5D,
	5222:  0x6E5E,
	5223:  0x6E60,
	5224:  0x6E61,
	5225:  0x6E62,
	5226:  0x6E63,
	5227:  0x6E64,
	5228:  0x6E65,
	5229:  0x6E66,
	5230:  0x6E67,
	5231:  0x6E68,
	5232:  0x6E69,
	5233:  0x6E6A,
	5234:  0x6E6C,
	5235:  0x6E6D,
	5236:  0x6E6F,
	5237:  0x6E70,
	5238:  0x6E71,
	5239:  0x6E72,
	5240:  0x6E73,
	5241:  0x6E74,
	5242:  0x6E75,
	5243:  0x6E76,
	5244:  0x6E77,
	5245:  0x6E78,
	5246:  0x6E79,
	5247:  0x6E7A,
	5248:  0x6E7B,
	5249:  0x6E7C,
	5250:  0x6E7D,
	5251:  0x6E80,
	5252:  0x6E81,
	5253:  0x6E82,
	5254:  0x6E84,
	5255:  0x6E87,
	5256:  0x6E88,
	5257:  0x6E8A,
	5258:  0x6E8B,
	5259:  0x6E8C,
	5260:  0x6E8D,
	5261:  0x6E8E,
	5262:  0x6E91,
	5263:  0x6E92,
	5264:  0x6E93,
	5265:  0x6E94,
	5266:  0x6E95,
	5267:  0x6E96,
	5268:  0x6E97,
	5269:  0x6E99,
	5270:  0x6E9A,
	5271:  0x6E9B,
	5272:  0x6E9D,
	5273:  0x6E9E,
	5274:  0x6EA0,
	5275:  0x6EA1,
	5276:  0x6EA3,
	5277:  0x6EA4,
	5278:  0x6EA6,
	5279:  0x6EA8,
	5280:  0x6EA9,
	5281:  0x6EAB,
	5282:  0x6EAC,
	5283:  0x6EAD,
	5284:  0x6EAE,
	5285:  0x6EB0,
	5286:  0x6EB3,
	5287:  0x6EB5,
	5288:  0x6EB8,
	5289:  0x6EB9,
	5290:  0x6EBC,
	5291:  0x6EBE,
	5292:  0x6EBF,
	5293:  0x6EC0,
	5294:  0x6EC3,
	5295:  0x6EC4,
	5296:  0x6EC5,
	5297:  0x6EC6,
	5298:  0x6EC8,
	5299:  0x6EC9,
	5300:  0x6ECA,
	5301:  0x6ECC,
	5302:  0x6ECD,
	5303:  0x6ECE,
	5304:  0x6ED0,
	5305:  0x6ED2,
	5306:  0x6ED6,
	5307:  0x6ED8,
	5308:  0x6ED9,
	5309:  0x6EDB,
	5310:  0x6EDC,
	5311:  0x6EDD,
	5312:  0x6EE3,
	5313:  0x6EE7,
	5314:  0x6EEA,
	5315:  0x6EEB,
	5316:  0x6EEC,
	5317:  0x6EED,
	5318:  0x6EEE,
	5319:  0x6EEF,
	5320:  0x6EF0,
	5321:  0x6EF1,
	5322:  0x6EF2,
	5323:  0x6EF3,
	5324:  0x6EF5,
	5325:  0x6EF6,
	5326:  0x6EF7,
	5327:  0x6EF8,
	5328:  0x6EFA,
	5329:  0x6EFB,
	5330:  0x6EFC,
	5331:  0x6EFD,
	5332:  0x6EFE,
	5333:  0x6EFF,
	5334:  0x6F00,
	5335:  0x6F01,
	5336:  0x6F03,
	5337:  0x6F04,
	5338:  0x6F05,
	5339:  0x6F07,
	5340:  0x6F08,
	5341:  0x6F0A,
	5342:  0x6F0B,
	5343:  0x6F0C,
	5344:  0x6F0D,
	5345:  0x6F0E,
	5346:  0x6F10,
	5347:  0x6F11,
	5348:  0x6F12,
	5349:  0x6F16,
	5350:  0x6F17,
	5351:  0x6F18,
	5352:  0x6F19,
	5353:  0x6F1A,
	5354:  0x6F1B,
	5355:  0x6F1C,
	5356:  0x6F1D,
	5357:  0x6F1E,
	5358:  0x6F1F,
	5359:  0x6F21,
	5360:  0x6F22,
	5361:  0x6F23,
	5362:  0x6F25,
	5363:  0x6F26,
	5364:  0x6F27,
	5365:  0x6F28,
	5366:  0x6F2C,
	5367:  0x6F2E,
	5368:  0x6F30,
	5369:  0x6F32,
	5370:  0x6F34,
	5371:  0x6F35,
	5372:  0x6F37,
	5373:  0x6F38,
	5374:  0x6F39,
	5375:  0x6F3A,
	5376:  0x6F3B,
	5377:  0x6F3C,
	5378:  0x6F3D,
	5379:  0x6F3F,
	5380:  0x6F40,
	5381:  0x6F41,
	5382:  0x6F42,
	5383:  0x6F43,
	5384:  0x6F44,
	5385:  0x6F45,
	5386:  0x6F48,
	5387:  0x6F49,
	5388:  0x6F4A,
	5389:  0x6F4C,
	5390:  0x6F4E,
	5391:  0x6F4F,
	5392:  0x6F50,
	5393:  0x6F51,
	5394:  0x6F52,
	5395:  0x6F53,
	5396:  0x6F54,
	5397:  0x6F55,
	5398:  0x6F56,
	5399:  0x6F57,
	5400:  0x6F59,
	5401:  0x6F5A,
	5402:  0x6F5B,
	5403:  0x6F5D,
	5404:  0x6F5F,
	5405:  0x6F60,
	5406:  0x6F61,
	5407:  0x6F63,
	5408:  0x6F64,
	5409:  0x6F65,
	5410:  0x6F67,
	5411:  0x6F68,
	5412:  0x6F69,
	5413:  0x6F6A,
	5414:  0x6F6B,
	5415:  0x6F6C,
	5416:  0x6F6F,
	5417:  0x6F70,
	5418:  0x6F71,
	5419:  0x6F73,
	5420:  0x6F75,
	5421:  0x6F76,
	5422:  0x6F77,
	5423:  0x6F79,
	5424:  0x6F7B,
	5425:  0x6F7D,
	5426:  0x6F7E,
	5427:  0x6F7F,
	5428:  0x6F80,
	5429:  0x6F81,
	5430:  0x6F82,
	5431:  0x6F83,
	5432:  0x6F85,
	5433:  0x6F86,
	5434:  0x6F87,
	5435:  0x6F8A,
	5436:  0x6F8B,
	5437:  0x6F8F,
	5438:  0x6F90,
	5439:  0x6F91,
	5440:  0x6F92,
	5441:  0x6F93,
	5442:  0x6F94,
	5443:  0x6F95,
	5444:  0x6F96,
	5445:  0x6F97,
	5446:  0x6F98,
	5447:  0x6F99,
	5448:  0x6F9A,
	5449:  0x6F9B,
	5450:  0x6F9D,
	5451:  0x6F9E,
	5452:  0x6F9F,
	5453:  0x6FA0,
	5454:  0x6FA2,
	5455:  0x6FA3,
	5456:  0x6FA4,
	5457:  0x6FA5,
	5458:  0x6FA6,
	5459:  0x6FA8,
	5460:  0x6FA9,
	5461:  0x6FAA,
	5462:  0x6FAB,
	5463:  0x6FAC,
	5464:  0x6FAD,
	5465:  0x6FAE,
	5466:  0x6FAF,
	5467:  0x6FB0,
	5468:  0x6FB1,
	5469:  0x6FB2,
	5470:  0x6FB4,
	5471:  0x6FB5,
	5472:  0x6FB7,
	5473:  0x6FB8,
	5474:  0x6FBA,
	5475:  0x6FBB,
	5476:  0x6FBC,
	5477:  0x6FBD,
	5478:  0x6FBE,
	5479:  0x6FBF,
	5480:  0x6FC1,
	5481:  0x6FC3,
	5482:  0x6FC4,
	5483:  0x6FC5,
	5484:  0x6FC6,
	5485:  0x6FC7,
	5486:  0x6FC8,
	5487:  0x6FCA,
	5488:  0x6FCB,
	5489:  0x6FCC,
	5490:  0x6FCD,
	5491:  0x6FCE,
	5492:  0x6FCF,
	5493:  0x6FD0,
	5494:  0x6FD3,
	5495:  0x6FD4,
	5496:  0x6FD5,
	5497:  0x6FD6,
	5498:  0x6FD7,
	5499:  0x6FD8,
	5500:  0x6FD9,
	5501:  0x6FDA,
	5502:  0x6FDB,
	5503:  0x6FDC,
	5504:  0x6FDD,
	5505:  0x6FDF,
	5506:  0x6FE2,
	5507:  0x6FE3,
	5508:  0x6FE4,
	5509:  0x6FE5,
	5510:  0x6FE6,
	5511:  0x6FE7,
	5512:  0x6FE8,
	5513:  0x6FE9,
	5514:  0x6FEA,
	5515:  0x6FEB,
	5516:  0x6FEC,
	5517:  0x6FED,
	5518:  0x6FF0,
	5519:  0x6FF1,
	5520:  0x6FF2,
	5521:  0x6FF3,
	5522:  0x6FF4,
	5523:  0x6FF5,
	5524:  0x6FF6,
	5525:  0x6FF7,
	5526:  0x6FF8,
	5527:  0x6FF9,
	5528:  0x6FFA,
	5529:  0x6FFB,
	5530:  0x6FFC,
	5531:  0x6FFD,
	5532:  0x6FFE,
	5533:  0x6FFF,
	5534:  0x7000,
	5535:  0x7001,
	5536:  0x7002,
	5537:  0x7003,
	5538:  0x7004,
	5539:  0x7005,
	5540:  0x7006,
	5541:  0x7007,
	5542:  0x7008,
	5543:  0x7009,
	5544:  0x700A,
	5545:  0x700B,
	5546:  0x700C,
	5547:  0x700D,
	5548:  0x700E,
	5549:  0x700F,
	5550:  0x7010,
	5551:  0x7012,
	5552:  0x7013,
	5553:  0x7014,
	5554:  0x7015,
	5555:  0x7016,
	5556:  0x7017,
	5557:  0x7018,
	5558:  0x7019,
	5559:  0x701C,
	5560:  0x701D,
	5561:  0x701E,
	5562:  0x701F,
	5563:  0x7020,
	5564:  0x7021,
	5565:  0x7022,
	5566:  0x7024,
	5567:  0x7025,
	5568:  0x7026,
	5569:  0x7027,
	5570:  0x7028,
	5571:  0x7029,
	5572:  0x702A,
	5573:  0x702B,
	5574:  0x702C,
	5575:  0x702D,
	5576:  0x702E,
	5577:  0x702F,
	5578:  0x7030,
	5579:  0x7031,
	5580:  0x7032,
	5581:  0x7033,
	5582:  0x7034,
	5583:  0x7036,
	5584:  0x7037,
	5585:  0x7038,
	5586:  0x703A,
	5587:  0x703B,
	5588:  0x703C,
	5589:  0x703D,
	5590:  0x703E,
	5591:  0x703F,
	5592:  0x7040,
	5593:  0x7041,
	5594:  0x7042,
	5595:  0x7043,
	5596:  0x7044,
	5597:  0x7045,
	5598:  0x7046,
	5599:  0x7047,
	5600:  0x7048,
	5601:  0x7049,
	5602:  0x704A,
	5603:  0x704B,
	5604:  0x704D,
	5605:  0x704E,
	5606:  0x7050,
	5607:  0x7051,
	5608:  0x7052,
	5609:  0x7053,
	5610:  0x7054,
	5611:  0x7055,
	5612:  0x7056,
	5613:  0x7057,
	5614:  0x7058,
	5615:  0x7059,
	5616:  0x705A,
	5617:  0x705B,
	5618:  0x705C,
	5619:  0x705D,
	5620:  0x705F,
	5621:  0x7060,
	5622:  0x7061,
	5623:  0x7062,
	5624:  0x7063,
	5625:  0x7064,
	5626:  0x7065,
	5627:  0x7066,
	5628:  0x7067,
	5629:  0x7068,
	5630:  0x7069,
	5631:  0x706A,
	5632:  0x706E,
	5633:  0x7071,
	5634:  0x7072,
	5635:  0x7073,
	5636:  0x7074,
	5637:  0x7077,
	5638:  0x7079,
	5639:  0x707A,
	5640:  0x707B,
	5641:  0x707D,
	5642:  0x7081,
	5643:  0x7082,
	5644:  0x7083,
	5645:  0x7084,
	5646:  0x7086,
	5647:  0x7087,
	5648:  0x7088,
	5649:  0x708B,
	5650:  0x708C,
	5651:  0x708D,
	5652:  0x708F,
	5653:  0x7090,
	5654:  0x7091,
	5655:  0x7093,
	5656:  0x7097,
	5657:  0x7098,
	5658:  0x709A,
	5659:  0x709B,
	5660:  0x709E,
	5661:  0x709F,
	5662:  0x70A0,
	5663:  0x70A1,
	5664:  0x70A2,
	5665:  0x70A3,
	5666:  0x70A4,
	5667:  0x70A5,
	5668:  0x70A6,
	5669:  0x70A7,
	5670:  0x70A8,
	5671:  0x70A9,
	5672:  0x70AA,
	5673:  0x70B0,
	5674:  0x70B2,
	5675:  0x70B4,
	5676:  0x70B5,
	5677:  0x70B6,
	5678:  0x70BA,
	5679:  0x70BE,
	5680:  0x70BF,
	5681:  0x70C4,
	5682:  0x70C5,
	5683:  0x70C6,
	5684:  0x70C7,
	5685:  0x70C9,
	5686:  0x70CB,
	5687:  0x70CC,
	5688:  0x70CD,
	5689:  0x70CE,
	5690:  0x70CF,
	5691:  0x70D0,
	5692:  0x70D1,
	5693:  0x70D2,
	5694:  0x70D3,
	5695:  0x70D4,
	5696:  0x70D5,
	5697:  0x70D6,
	5698:  0x70D7,
	5699:  0x70DA,
	5700:  0x70DC,
	5701:  0x70DD,
	5702:  0x70DE,
	5703:  0x70E0,
	5704:  0x70E1,
	5705:  0x70E2,
	5706:  0x70E3,
	5707:  0x70E5,
	5708:  0x70EA,
	5709:  0x70EE,
	5710:  0x70F0,
	5711:  0x70F1,
	5712:  0x70F2,
	5713:  0x70F3,
	5714:  0x70F4,
	5715:  0x70F5,
	5716:  0x70F6,
	5717:  0x70F8,
	5718:  0x70FA,
	5719:  0x70FB,
	5720:  0x70FC,
	5721:  0x70FE,
	5722:  0x70FF,
	5723:  0x7100,
	5724:  0x7101,
	5725:  0x7102,
	5726:  0x7103,
	5727:  0x7104,
	5728:  0x7105,
	5729:  0x7106,
	5730:  0x7107,
	5731:  0x7108,
	5732:  0x710B,
	5733:  0x710C,
	5734:  0x710D,
	5735:  0x710E,
	5736:  0x710F,
	5737:  0x7111,
	5738:  0x7112,
	5739:  0x7114,
	5740:  0x7117,
	5741:  0x711B,
	5742:  0x711C,
	5743:  0x711D,
	5744:  0x711E,
	5745:  0x711F,
	5746:  0x7120,
	5747:  0x7121,
	5748:  0x7122,
	5749:  0x7123,
	5750:  0x7124,
	5751:  0x7125,
	5752:  0x7127,
	5753:  0x7128,
	5754:  0x7129,
	5755:  0x712A,
	5756:  0x712B,
	5757:  0x712C,
	5758:  0x712D,
	5759:  0x712E,
	5760:  0x7132,
	5761:  0x7133,
	5762:  0x7134,
	5763:  0x7135,
	5764:  0x7137,
	5765:  0x7138,
	5766:  0x7139,
	5767:  0x713A,
	5768:  0x713B,
	5769:  0x713C,
	5770:  0x713D,
	5771:  0x713E,
	5772:  0x713F,
	5773:  0x7140,
	5774:  0x7141,
	5775:  0x7142,
	5776:  0x7143,
	5777:  0x7144,
	5778:  0x7146,
	5779:  0x7147,
	5780:  0x7148,
	5781:  0x7149,
	5782:  0x714B,
	5783:  0x714D,
	5784:  0x714F,
	5785:  0x7150,
	5786:  0x7151,
	5787:  0x7152,
	5788:  0x7153,
	5789:  0x7154,
	5790:  0x7155,
	5791:  0x7156,
	5792:  0x7157,
	5793:  0x7158,
	5794:  0x7159,
	5795:  0x715A,
	5796:  0x715B,
	5797:  0x715D,
	5798:  0x715F,
	5799:  0x7160,
	5800:  0x7161,
	5801:  0x7162,
	5802:  0x7163,
	5803:  0x7165,
	5804:  0x7169,
	5805:  0x716A,
	5806:  0x716B,
	5807:  0x716C,
	5808:  0x716D,
	5809:  0x716F,
	5810:  0x7170,
	5811:  0x7171,
	5812:  0x7174,
	5813:  0x7175,
	5814:  0x7176,
	5815:  0x7177,
	5816:  0x7179,
	5817:  0x717B,
	5818:  0x717C,
	5819:  0x717E,
	5820:  0x717F,
	5821:  0x7180,
	5822:  0x7181,
	5823:  0x7182,
	5824:  0x7183,
	5825:  0x7185,
	5826:  0x7186,
	5827:  0x7187,
	5828:  0x7188,
	5829:  0x7189,
	5830:  0x718B,
	5831:  0x718C,
	5832:  0x718D,
	5833:  0x718E,
	5834:  0x7190,
	5835:  0x7191,
	5836:  0x7192,
	5837:  0x7193,
	5838:  0x7195,
	5839:  0x7196,
	5840:  0x7197,
	5841:  0x719A,
	5842:  0x719B,
	5843:  0x719C,
	5844:  0x719D,
	5845:  0x719E,
	5846:  0x71A1,
	5847:  0x71A2,
	5848:  0x71A3,
	5849:  0x71A4,
	5850:  0x71A5,
	5851:  0x71A6,
	5852:  0x71A7,
	5853:  0x71A9,
	5854:  0x71AA,
	5855:  0x71AB,
	5856:  0x71AD,
	5857:  0x71AE,
	5858:  0x71AF,
	5859:  0x71B0,
	5860:  0x71B1,
	5861:  0x71B2,
	5862:  0x71B4,
	5863:  0x71B6,
	5864:  0x71B7,
	5865:  0x71B8,
	5866:  0x71BA,
	5867:  0x71BB,
	5868:  0x71BC,
	5869:  0x71BD,
	5870:  0x71BE,
	5871:  0x71BF,
	5872:  0x71C0,
	5873:  0x71C1,
	5874:  0x71C2,
	5875:  0x71C4,
	5876:  0x71C5,
	5877:  0x71C6,
	5878:  0x71C7,
	5879:  0x71C8,
	5880:  0x71C9,
	5881:  0x71CA,
	5882:  0x71CB,
	5883:  0x71CC,
	5884:  0x71CD,
	5885:  0x71CF,
	5886:  0x71D0,
	5887:  0x71D1,
	5888:  0x71D2,
	5889:  0x71D3,
	5890:  0x71D6,
	5891:  0x71D7,
	5892:  0x71D8,
	5893:  0x71D9,
	5894:  0x71DA,
	5895:  0x71DB,
	5896:  0x71DC,
	5897:  0x71DD,
	5898:  0x71DE,
	5899:  0x71DF,
	5900:  0x71E1,
	5901:  0x71E2,
	5902:  0x71E3,
	5903:  0x71E4,
	5904:  0x71E6,
	5905:  0x71E8,
	5906:  0x71E9,
	5907:  0x71EA,
	5908:  0x71EB,
	5909:  0x71EC,
	5910:  0x71ED,
	5911:  0x71EF,
	5912:  0x71F0,
	5913:  0x71F1,
	5914:  0x71F2,
	5915:  0x71F3,
	5916:  0x71F4,
	5917:  0x71F5,
	5918:  0x71F6,
	5919:  0x71F7,
	5920:  0x71F8,
	5921:  0x71FA,
	5922:  0x71FB,
	5923:  0x71FC,
	5924:  0x71FD,
	5925:  0x71FE,
	5926:  0x71FF,
	5927:  0x7200,
	5928:  0x7201,
	5929:  0x7202,
	5930:  0x7203,
	5931:  0x7204,
	5932:  0x7205,
	5933:  0x7207,
	5934:  0x7208,
	5935:  0x7209,
	5936:  0x720A,
	5937:  0x720B,
	5938:  0x720C,
	5939:  0x720D,
	5940:  0x720E,
	5941:  0x720F,
	5942:  0x7210,
	5943:  0x7211,
	5944:  0x7212,
	5945:  0x7213,
	5946:  0x7214,
	5947:  0x7215,
	5948:  0x7216,
	5949:  0x7217,
	5950:  0x7218,
	5951:  0x7219,
	5952:  0x721A,
	5953:  0x721B,
	5954:  0x721C,
	5955:  0x721E,
	5956:  0x721F,
	5957:  0x7220,
	5958:  0x7221,
	5959:  0x7222,
	5960:  0x7223,
	5961:  0x7224,
	5962:  0x7225,
	5963:  0x7226,
	5964:  0x7227,
	5965:  0x7229,
	5966:  0x722B,
	5967:  0x722D,
	5968:  0x722E,
	5969:  0x722F,
	5970:  0x7232,
	5971:  0x7233,
	5972:  0x7234,
	5973:  0x723A,
	5974:  0x723C,
	5975:  0x723E,
	5976:  0x7240,
	5977:  0x7241,
	5978:  0x7242,
	5979:  0x7243,
	5980:  0x7244,
	5981:  0x7245,
	5982:  0x7246,
	5983:  0x7249,
	5984:  0x724A,
	5985:  0x724B,
	5986:  0x724E,
	5987:  0x724F,
	5988:  0x7250,
	5989:  0x7251,
	5990:  0x7253,
	5991:  0x7254,
	5992:  0x7255,
	5993:  0x7257,
	5994:  0x7258,
	5995:  0x725A,
	5996:  0x725C,
	5997:  0x725E,
	5998:  0x7260,
	5999:  0x7263,
	6000:  0x7264,
	6001:  0x7265,
	6002:  0x7268,
	6003:  0x726A,
	6004:  0x726B,
	6005:  0x726C,
	6006:  0x726D,
	6007:  0x7270,
	6008:  0x7271,
	6009:  0x7273,
	6010:  0x7274,
	6011:  0x7276,
	6012:  0x7277,
	6013:  0x7278,
	6014:  0x727B,
	6015:  0x727C,
	6016:  0x727D,
	6017:  0x7282,
	6018:  0x7283,
	6019:  0x7285,
	6020:  0x7286,
	6021:  0x7287,
	6022:  0x7288,
	6023:  0x7289,
	6024:  0x728C,
	6025:  0x728E,
	6026:  0x7290,
	6027:  0x7291,
	6028:  0x7293,
	6029:  0x7294,
	6030:  0x7295,
	6031:  0x7296,
	6032:  0x7297,
	6033:  0x7298,
	6034:  0x7299,
	6035:  0x729A,
	6036:  0x729B,
	6037:  0x729C,
	6038:  0x729D,
	6039:  0x729E,
	6040:  0x72A0,
	6041:  0x72A1,
	6042:  0x72A2,
	6043:  0x72A3,
	6044:  0x72A4,
	6045:  0x72A5,
	6046:  0x72A6,
	6047:  0x72A7,
	6048:  0x72A8,
	6049:  0x72A9,
	6050:  0x72AA,
	6051:  0x72AB,
	6052:  0x72AE,
	6053:  0x72B1,
	6054:  0x72B2,
	6055:  0x72B3,
	6056:  0x72B5,
	6057:  0x72BA,
	6058:  0x72BB,
	6059:  0x72BC,
	6060:  0x72BD,
	6061:  0x72BE,
	6062:  0x72BF,
	6063:  0x72C0,
	6064:  0x72C5,
	6065:  0x72C6,
	6066:  0x72C7,
	6067:  0x72C9,
	6068:  0x72CA,
	6069:  0x72CB,
	6070:  0x72CC,
	6071:  0x72CF,
	6072:  0x72D1,
	6073:  0x72D3,
	6074:  0x72D4,
	6075:  0x72D5,
	6076:  0x72D6,
	6077:  0x72D8,
	6078:  0x72DA,
	6079:  0x72DB,
	6176:  0x3000,
	6177:  0x3001,
	6178:  0x3002,
	6179:  0x00B7,
	6180:  0x02C9,
	6181:  0x02C7,
	6182:  0x00A8,
	6183:  0x3003,
	6184:  0x3005,
	6185:  0x2014,
	6186:  0xFF5E,
	6187:  0x2016,
	6188:  0x2026,
	6189:  0x2018,
	6190:  0x2019,
	6191:  0x201C,
	6192:  0x201D,
	6193:  0x3014,
	6194:  0x3015,
	6195:  0x3008,
	6196:  0x3009,
	6197:  0x300A,
	6198:  0x300B,
	6199:  0x300C,
	6200:  0x300D,
	6201:  0x300E,
	6202:  0x300F,
	6203:  0x3016,
	6204:  0x3017,
	6205:  0x3010,
	6206:  0x3011,
	6207:  0x00B1,
	6208:  0x00D7,
	6209:  0x00F7,
	6210:  0x2236,
	6211:  0x2227,
	6212:  0x2228,
	6213:  0x2211,
	6214:  0x220F,
	6215:  0x222A,
	6216:  0x2229,
	6217:  0x2208,
	6218:  0x2237,
	6219:  0x221A,
	6220:  0x22A5,
	6221:  0x2225,
	6222:  0x2220,
	6223:  0x2312,
	6224:  0x2299,
	6225:  0x222B,
	6226:  0x222E,
	6227:  0x2261,
	6228:  0x224C,
	6229:  0x2248,
	6230:  0x223D,
	6231:  0x221D,
	6232:  0x2260,
	6233:  0x226E,
	6234:  0x226F,
	6235:  0x2264,
	6236:  0x2265,
	6237:  0x221E,
	6238:  0x2235,
	6239:  0x2234,
	6240:  0x2642,
	6241:  0x2640,
	6242:  0x00B0,
	6243:  0x2032,
	6244:  0x2033,
	6245:  0x2103,
	6246:  0xFF04,
	6247:  0x00A4,
	6248:  0xFFE0,
	6249:  0xFFE1,
	6250:  0x2030,
	6251:  0x00A7,
	6252:  0x2116,
	6253:  0x2606,
	6254:  0x2605,
	6255:  0x25CB,
	6256:  0x25CF,
	6257:  0x25CE,
	6258:  0x25C7,
	6259:  0x25C6,
	6260:  0x25A1,
	6261:  0x25A0,
	6262:  0x25B3,
	6263:  0x25B2,
	6264:  0x203B,
	6265:  0x2192,
	6266:  0x2190,
	6267:  0x2191,
	6268:  0x2193,
	6269:  0x3013,
	6366:  0x2170,
	6367:  0x2171,
	6368:  0x2172,
	6369:  0x2173,
	6370:  0x2174,
	6371:  0x2175,
	6372:  0x2176,
	6373:  0x2177,
	6374:  0x2178,
	6375:  0x2179,
	6382:  0x2488,
	6383:  0x2489,
	6384:  0x248A,
	6385:  0x248B,
	6386:  0x248C,
	6387:  0x248D,
	6388:  0x248E,
	6389:  0x248F,
	6390:  0x2490,
	6391:  0x2491,
	6392:  0x2492,
	6393:  0x2493,
	6394:  0x2494,
	6395:  0x2495,
	6396:  0x2496,
	6397:  0x2497,
	6398:  0x2498,
	6399:  0x2499,
	6400:  0x249A,
	6401:  0x249B,
	6402:  0x2474,
	6403:  0x2475,
	6404:  0x2476,
	6405:  0x2477,
	6406:  0x2478,
	6407:  0x2479,
	6408:  0x247A,
	6409:  0x247B,
	6410:  0x247C,
	6411:  0x247D,
	6412:  0x247E,
	6413:  0x247F,
	6414:  0x2480,
	6415:  0x2481,
	6416:  0x2482,
	6417:  0x2483,
	6418:  0x2484,
	6419:  0x2485,
	6420:  0x2486,
	6421:  0x2487,
	6422:  0x2460,
	6423:  0x2461,
	6424:  0x2462,
	6425:  0x2463,
	6426:  0x2464,
	6427:  0x2465,
	6428:  0x2466,
	6429:  0x2467,
	6430:  0x2468,
	6431:  0x2469,
	6432:  0x20AC,
	6434:  0x3220,
	6435:  0x3221,
	6436:  0x3222,
	6437:  0x3223,
	6438:  0x3224,
	6439:  0x3225,
	6440:  0x3226,
	6441:  0x3227,
	6442:  0x3228,
	6443:  0x3229,
	6446:  0x2160,
	6447:  0x2161,
	6448:  0x2162,
	6449:  0x2163,
	6450:  0x2164,
	6451:  0x2165,
	6452:  0x2166,
	6453:  0x2167,
	6454:  0x2168,
	6455:  0x2169,
	6456:  0x216A,
	6457:  0x216B,
	6555:  0x3000,
	6556:  0xFF01,
	6557:  0xFF02,
	6558:  0xFF03,
	6559:  0xFFE5,
	6560:  0xFF05,
	6561:  0xFF06,
	6562:  0xFF07,
	6563:  0xFF08,
	6564:  0xFF09,
	6565:  0xFF0A,
	6566:  0xFF0B,
	6567:  0xFF0C,
	6568:  0xFF0D,
	6569:  0xFF0E,
	6570:  0xFF0F,
	6571:  0xFF10,
	6572:  0xFF11,
	6573:  0xFF12,
	6574:  0xFF13,
	6575:  0xFF14,
	6576:  0xFF15,
	6577:  0xFF16,
	6578:  0xFF17,
	6579:  0xFF18,
	6580:  0xFF19,
	6581:  0xFF1A,
	6582:  0xFF1B,
	6583:  0xFF1C,
	6584:  0xFF1D,
	6585:  0xFF1E,
	6586:  0xFF1F,
	6587:  0xFF20,
	6588:  0xFF21,
	6589:  0xFF22,
	6590:  0xFF23,
	6591:  0xFF24,
	6592:  0xFF25,
	6593:  0xFF26,
	6594:  0xFF27,
	6595:  0xFF28,
	6596:  0xFF29,
	6597:  0xFF2A,
	6598:  0xFF2B,
	6599:  0xFF2C,
	6600:  0xFF2D,
	6601:  0xFF2E,
	6602:  0xFF2F,
	6603:  0xFF30,
	6604:  0xFF31,
	6605:  0xFF32,
	6606:  0xFF33,
	6607:  0xFF34,
	6608:  0xFF35,
	6609:  0xFF36,
	6610:  0xFF37,
	6611:  0xFF38,
	6612:  0xFF39,
	6613:  0xFF3A,
	6614:  0xFF3B,
	6615:  0xFF3C,
	6616:  0xFF3D,
	6617:  0xFF3E,
	6618:  0xFF3F,
	6619:  0xFF40,
	6620:  0xFF41,
	6621:  0xFF42,
	6622:  0xFF43,
	6623:  0xFF44,
	6624:  0xFF45,
	6625:  0xFF46,
	6626:  0xFF47,
	6627:  0xFF48,
	6628:  0xFF49,
	6629:  0xFF4A,
	6630:  0xFF4B,
	6631:  0xFF4C,
	6632:  0xFF4D,
	6633:  0xFF4E,
	6634:  0xFF4F,
	6635:  0xFF50,
	6636:  0xFF51,
	6637:  0xFF52,
	6638:  0xFF53,
	6639:  0xFF54,
	6640:  0xFF55,
	6641:  0xFF56,
	6642:  0xFF57,
	6643:  0xFF58,
	6644:  0xFF59,
	6645:  0xFF5A,
	6646:  0xFF5B,
	6647:  0xFF5C,
	6648:  0xFF5D,
	6649:  0xFFE3,
	6746:  0x3041,
	6747:  0x3042,
	6748:  0x3043,
	6749:  0x3044,
	6750:  0x3045,
	6751:  0x3046,
	6752:  0x3047,
	6753:  0x3048,
	6754:  0x3049,
	6755:  0x304A,
	6756:  0x304B,
	6757:  0x304C,
	6758:  0x304D,
	6759:  0x304E,
	6760:  0x304F,
	6761:  0x3050,
	6762:  0x3051,
	6763:  0x3052,
	6764:  0x3053,
	6765:  0x3054,
	6766:  0x3055,
	6767:  0x3056,
	6768:  0x3057,
	6769:  0x3058,
	6770:  0x3059,
	6771:  0x305A,
	6772:  0x305B,
	6773:  0x305C,
	6774:  0x305D,
	6775:  0x305E,
	6776:  0x305F,
	6777:  0x3060,
	6778:  0x3061,
	6779:  0x3062,
	6780:  0x3063,
	6781:  0x3064,
	6782:  0x3065,
	6783:  0x3066,
	6784:  0x3067,
	6785:  0x3068,
	6786:  0x3069,
	6787:  0x306A,
	6788:  0x306B,
	6789:  0x306C,
	6790:  0x306D,
	6791:  0x306E,
	6792:  0x306F,
	6793:  0x3070,
	6794:  0x3071,
	6795:  0x3072,
	6796:  0x3073,
	6797:  0x3074,
	6798:  0x3075,
	6799:  0x3076,
	6800:  0x3077,
	6801:  0x3078,
	6802:  0x3079,
	6803:  0x307A,
	6804:  0x307B,
	6805:  0x307C,
	6806:  0x307D,
	6807:  0x307E,
	6808:  0x307F,
	6809:  0x3080,
	6810:  0x3081,
	6811:  0x3082,
	6812:  0x3083,
	6813:  0x3084,
	6814:  0x3085,
	6815:  0x3086,
	6816:  0x3087,
	6817:  0x3088,
	6818:  0x3089,
	6819:  0x308A,
	6820:  0x308B,
	6821:  0x308C,
	6822:  0x308D,
	6823:  0x308E,
	6824:  0x308F,
	6825:  0x3090,
	6826:  0x3091,
	6827:  0x3092,
	6828:  0x3093,
	6936:  0x30A1,
	6937:  0x30A2,
	6938:  0x30A3,
	6939:  0x30A4,
	6940:  0x30A5,
	6941:  0x30A6,
	6942:  0x30A7,
	6943:  0x30A8,
	6944:  0x30A9,
	6945:  0x30AA,
	6946:  0x30AB,
	6947:  0x30AC,
	6948:  0x30AD,
	6949:  0x30AE,
	6950:  0x30AF,
	6951:  0x30B0,
	6952:  0x30B1,
	6953:  0x30B2,
	6954:  0x30B3,
	6955:  0x30B4,
	6956:  0x30B5,
	6957:  0x30B6,
	6958:  0x30B7,
	6959:  0x30B8,
	6960:  0x30B9,
	6961:  0x30BA,
	6962:  0x30BB,
	6963:  0x30BC,
	6964:  0x30BD,
	6965:  0x30BE,
	6966:  0x30BF,
	6967:  0x30C0,
	6968:  0x30C1,
	6969:  0x30C2,
	6970:  0x30C3,
	6971:  0x30C4,
	6972:  0x30C5,
	6973:  0x30C6,
	6974:  0x30C7,
	6975:  0x30C8,
	6976:  0x30C9,
	6977:  0x30CA,
	6978:  0x30CB,
	6979:  0x30CC,
	6980:  0x30CD,
	6981:  0x30CE,
	6982:  0x30CF,
	6983:  0x30D0,
	6984:  0x30D1,
	6985:  0x30D2,
	6986:  0x30D3,
	6987:  0x30D4,
	6988:  0x30D5,
	6989:  0x30D6,
	6990:  0x30D7,
	6991:  0x30D8,
	6992:  0x30D9,
	6993:  0x30DA,
	6994:  0x30DB,
	6995:  0x30DC,
	6996:  0x30DD,
	6997:  0x30DE,
	6998:  0x30DF,
	6999:  0x30E0,
	7000:  0x30E1,
	7001:  0x30E2,
	7002:  0x30E3,
	7003:  0x30E4,
	7004:  0x30E5,
	7005:  0x30E6,
	7006:  0x30E7,
	7007:  0x30E8,
	7008:  0x30E9,
	7009:  0x30EA,
	7010:  0x30EB,
	7011:  0x30EC,
	7012:  0x30ED,
	7013:  0x30EE,
	7014:  0x30EF,
	7015:  0x30F0,
	7016:  0x30F1,
	7017:  0x30F2,
	7018:  0x30F3,
	7019:  0x30F4,
	7020:  0x30F5,
	7021:  0x30F6,
	7126:  0x0391,
	7127:  0x0392,
	7128:  0x0393,
	7129:  0x0394,
	7130:  0x0395,
	7131:  0x0396,
	7132:  0x0397,
	7133:  0x0398,
	7134:  0x0399,
	7135:  0x039A,
	7136:  0x039B,
	7137:  0x039C,
	7138:  0x039D,
	7139:  0x039E,
	7140:  0x039F,
	7141:  0x03A0,
	7142:  0x03A1,
	7143:  0x03A3,
	7144:  0x03A4,
	7145:  0x03A5,
	7146:  0x03A6,
	7147:  0x03A7,
	7148:  0x03A8,
	7149:  0x03A9,
	7158:  0x03B1,
	7159:  0x03B2,
	7160:  0x03B3,
	7161:  0x03B4,
	7162:  0x03B5,
	7163:  0x03B6,
	7164:  0x03B7,
	7165:  0x03B8,
	7166:  0x03B9,
	7167:  0x03BA,
	7168:  0x03BB,
	7169:  0x03BC,
	7170:  0x03BD,
	7171:  0x03BE,
	7172:  0x03BF,
	7173:  0x03C0,
	7174:  0x03C1,
	7175:  0x03C3,
	7176:  0x03C4,
	7177:  0x03C5,
	7178:  0x03C6,
	7179:  0x03C7,
	7180:  0x03C8,
	7181:  0x03C9,
	7189:  0xFE35,
	7190:  0xFE36,
	7191:  0xFE39,
	7192:  0xFE3A,
	7193:  0xFE3F,
	7194:  0xFE40,
	7195:  0xFE3D,
	7196:  0xFE3E,
	7197:  0xFE41,
	7198:  0xFE42,
	7199:  0xFE43,
	7200:  0xFE44,
	7203:  0xFE3B,
	7204:  0xFE3C,
	7205:  0xFE37,
	7206:  0xFE38,
	7207:  0xFE31,
	7209:  0xFE33,
	7210:  0xFE34,
	7316:  0x0410,
	7317:  0x0411,
	7318:  0x0412,
	7319:  0x0413,
	7320:  0x0414,
	7321:  0x0415,
	7322:  0x0401,
	7323:  0x0416,
	7324:  0x0417,
	7325:  0x0418,
	7326:  0x0419,
	7327:  0x041A,
	7328:  0x041B,
	7329:  0x041C,
	7330:  0x041D,
	7331:  0x041E,
	7332:  0x041F,
	7333:  0x0420,
	7334:  0x0421,
	7335:  0x0422,
	7336:  0x0423,
	7337:  0x0424,
	7338:  0x0425,
	7339:  0x0426,
	7340:  0x0427,
	7341:  0x0428,
	7342:  0x0429,
	7343:  0x042A,
	7344:  0x042B,
	7345:  0x042C,
	7346:  0x042D,
	7347:  0x042E,
	7348:  0x042F,
	7364:  0x0430,
	7365:  0x0431,
	7366:  0x0432,
	7367:  0x0433,
	7368:  0x0434,
	7369:  0x0435,
	7370:  0x0451,
	7371:  0x0436,
	7372:  0x0437,
	7373:  0x0438,
	7374:  0x0439,
	7375:  0x043A,
	7376:  0x043B,
	7377:  0x043C,
	7378:  0x043D,
	7379:  0x043E,
	7380:  0x043F,
	7381:  0x0440,
	7382:  0x0441,
	7383:  0x0442,
	7384:  0x0443,
	7385:  0x0444,
	7386:  0x0445,
	7387:  0x0446,
	7388:  0x0447,
	7389:  0x0448,
	7390:  0x0449,
	7391:  0x044A,
	7392:  0x044B,
	7393:  0x044C,
	7394:  0x044D,
	7395:  0x044E,
	7396:  0x044F,
	7410:  0x02CA,
	7411:  0x02CB,
	7412:  0x02D9,
	7413:  0x2013,
	7414:  0x2015,
	7415:  0x2025,
	7416:  0x2035,
	7417:  0x2105,
	7418:  0x2109,
	7419:  0x2196,
	7420:  0x2197,
	7421:  0x2198,
	7422:  0x2199,
	7423:  0x2215,
	7424:  0x221F,
	7425:  0x2223,
	7426:  0x2252,
	7427:  0x2266,
	7428:  0x2267,
	7429:  0x22BF,
	7430:  0x2550,
	7431:  0x2551,
	7432:  0x2552,
	7433:  0x2553,
	7434:  0x2554,
	7435:  0x2555,
	7436:  0x2556,
	7437:  0x2557,
	7438:  0x2558,
	7439:  0x2559,
	7440:  0x255A,
	7441:  0x255B,
	7442:  0x255C,
	7443:  0x255D,
	7444:  0x255E,
	7445:  0x255F,
	7446:  0x2560,
	7447:  0x2561,
	7448:  0x2562,
	7449:  0x2563,
	7450:  0x2564,
	7451:  0x2565,
	7452:  0x2566,
	7453:  0x2567,
	7454:  0x2568,
	7455:  0x2569,
	7456:  0x256A,
	7457:  0x256B,
	7458:  0x256C,
	7459:  0x256D,
	7460:  0x256E,
	7461:  0x256F,
	7462:  0x2570,
	7463:  0x2571,
	7464:  0x2572,
	7465:  0x2573,
	7466:  0x2581,
	7467:  0x2582,
	7468:  0x2583,
	7469:  0x2584,
	7470:  0x2585,
	7471:  0x2586,
	7472:  0x2587,
	7473:  0x2588,
	7474:  0x2589,
	7475:  0x258A,
	7476:  0x258B,
	7477:  0x258C,
	7478:  0x258D,
	7479:  0x258E,
	7480:  0x258F,
	7481:  0x2593,
	7482:  0x2594,
	7483:  0x2595,
	7484:  0x25BC,
	7485:  0x25BD,
	7486:  0x25E2,
	7487:  0x25E3,
	7488:  0x25E4,
	7489:  0x25E5,
	7490:  0x2609,
	7491:  0x2295,
	7492:  0x3012,
	7493:  0x301D,
	7494:  0x301E,
	7506:  0x0101,
	7507:  0x00E1,
	7508:  0x01CE,
	7509:  0x00E0,
	7510:  0x0113,
	7511:  0x00E9,
	7512:  0x011B,
	7513:  0x00E8,
	7514:  0x012B,
	7515:  0x00ED,
	7516:  0x01D0,
	7517:  0x00EC,
	7518:  0x014D,
	7519:  0x00F3,
	7520:  0x01D2,
	7521:  0x00F2,
	7522:  0x016B,
	7523:  0x00FA,
	7524:  0x01D4,
	7525:  0x00F9,
	7526:  0x01D6,
	7527:  0x01D8,
	7528:  0x01DA,
	7529:  0x01DC,
	7530:  0x00FC,
	7531:  0x00EA,
	7532:  0x0251,
	7534:  0x0144,
	7535:  0x0148,
	7536:  0x01F9,
	7537:  0x0261,
	7542:  0x3105,
	7543:  0x3106,
	7544:  0x3107,
	7545:  0x3108,
	7546:  0x3109,
	7547:  0x310A,
	7548:  0x310B,
	7549:  0x310C,
	7550:  0x310D,
	7551:  0x310E,
	7552:  0x310F,
	7553:  0x3110,
	7554:  0x3111,
	7555:  0x3112,
	7556:  0x3113,
	7557:  0x3114,
	7558:  0x3115,
	7559:  0x3116,
	7560:  0x3117,
	7561:  0x3118,
	7562:  0x3119,
	7563:  0x311A,
	7564:  0x311B,
	7565:  0x311C,
	7566:  0x311D,
	7567:  0x311E,
	7568:  0x311F,
	7569:  0x3120,
	7570:  0x3121,
	7571:  0x3122,
	7572:  0x3123,
	7573:  0x3124,
	7574:  0x3125,
	7575:  0x3126,
	7576:  0x3127,
	7577:  0x3128,
	7578:  0x3129,
	7600:  0x3021,
	7601:  0x3022,
	7602:  0x3023,
	7603:  0x3024,
	7604:  0x3025,
	7605:  0x3026,
	7606:  0x3027,
	7607:  0x3028,
	7608:  0x3029,
	7609:  0x32A3,
	7610:  0x338E,
	7611:  0x338F,
	7612:  0x339C,
	7613:  0x339D,
	7614:  0x339E,
	7615:  0x33A1,
	7616:  0x33C4,
	7617:  0x33CE,
	7618:  0x33D1,
	7619:  0x33D2,
	7620:  0x33D5,
	7621:  0xFE30,
	7622:  0xFFE2,
	7623:  0xFFE4,
	7625:  0x2121,
	7626:  0x3231,
	7628:  0x2010,
	7632:  0x30FC,
	7633:  0x309B,
	7634:  0x309C,
	7635:  0x30FD,
	7636:  0x30FE,
	7637:  0x3006,
	7638:  0x309D,
	7639:  0x309E,
	7640:  0xFE49,
	7641:  0xFE4A,
	7642:  0xFE4B,
	7643:  0xFE4C,
	7644:  0xFE4D,
	7645:  0xFE4E,
	7646:  0xFE4F,
	7647:  0xFE50,
	7648:  0xFE51,
	7649:  0xFE52,
	7650:  0xFE54,
	7651:  0xFE55,
	7652:  0xFE56,
	7653:  0xFE57,
	7654:  0xFE59,
	7655:  0xFE5A,
	7656:  0xFE5B,
	7657:  0xFE5C,
	7658:  0xFE5D,
	7659:  0xFE5E,
	7660:  0xFE5F,
	7661:  0xFE60,
	7662:  0xFE61,
	7663:  0xFE62,
	7664:  0xFE63,
	7665:  0xFE64,
	7666:  0xFE65,
	7667:  0xFE66,
	7668:  0xFE68,
	7669:  0xFE69,
	7670:  0xFE6A,
	7671:  0xFE6B,
	7672:  0x303E,
	7673:  0x2FF0,
	7674:  0x2FF1,
	7675:  0x2FF2,
	7676:  0x2FF3,
	7677:  0x2FF4,
	7678:  0x2FF5,
	7679:  0x2FF6,
	7680:  0x2FF7,
	7681:  0x2FF8,
	7682:  0x2FF9,
	7683:  0x2FFA,
	7684:  0x2FFB,
	7685:  0x3007,
	7699:  0x2500,
	7700:  0x2501,
	7701:  0x2502,
	7702:  0x2503,
	7703:  0x2504,
	7704:  0x2505,
	7705:  0x2506,
	7706:  0x2507,
	7707:  0x2508,
	7708:  0x2509,
	7709:  0x250A,
	7710:  0x250B,
	7711:  0x250C,
	7712:  0x250D,
	7713:  0x250E,
	7714:  0x250F,
	7715:  0x2510,
	7716:  0x2511,
	7717:  0x2512,
	7718:  0x2513,
	7719:  0x2514,
	7720:  0x2515,
	7721:  0x2516,
	7722:  0x2517,
	7723:  0x2518,
	7724:  0x2519,
	7725:  0x251A,
	7726:  0x251B,
	7727:  0x251C,
	7728:  0x251D,
	7729:  0x251E,
	7730:  0x251F,
	7731:  0x2520,
	7732:  0x2521,
	7733:  0x2522,
	7734:  0x2523,
	7735:  0x2524,
	7736:  0x2525,
	7737:  0x2526,
	7738:  0x2527,
	7739:  0x2528,
	7740:  0x2529,
	7741:  0x252A,
	7742:  0x252B,
	7743:  0x252C,
	7744:  0x252D,
	7745:  0x252E,
	7746:  0x252F,
	7747:  0x2530,
	7748:  0x2531,
	7749:  0x2532,
	7750:  0x2533,
	7751:  0x2534,
	7752:  0x2535,
	7753:  0x2536,
	7754:  0x2537,
	7755:  0x2538,
	7756:  0x2539,
	7757:  0x253A,
	7758:  0x253B,
	7759:  0x253C,
	7760:  0x253D,
	7761:  0x253E,
	7762:  0x253F,
	7763:  0x2540,
	7764:  0x2541,
	7765:  0x2542,
	7766:  0x2543,
	7767:  0x2544,
	7768:  0x2545,
	7769:  0x2546,
	7770:  0x2547,
	7771:  0x2548,
	7772:  0x2549,
	7773:  0x254A,
	7774:  0x254B,
	7790:  0x72DC,
	7791:  0x72DD,
	7792:  0x72DF,
	7793:  0x72E2,
	7794:  0x72E3,
	7795:  0x72E4,
	7796:  0x72E5,
	7797:  0x72E6,
	7798:  0x72E7,
	7799:  0x72EA,
	7800:  0x72EB,
	7801:  0x72F5,
	7802:  0x72F6,
	7803:  0x72F9,
	7804:  0x72FD,
	7805:  0x72FE,
	7806:  0x72FF,
	7807:  0x7300,
	7808:  0x7302,
	7809:  0x7304,
	7810:  0x7305,
	7811:  0x7306,
	7812:  0x7307,
	7813:  0x7308,
	7814:  0x7309,
	7815:  0x730B,
	7816:  0x730C,
	7817:  0x730D,
	7818:  0x730F,
	7819:  0x7310,
	7820:  0x7311,
	7821:  0x7312,
	7822:  0x7314,
	7823:  0x7318,
	7824:  0x7319,
	7825:  0x731A,
	7826:  0x731F,
	7827:  0x7320,
	7828:  0x7323,
	7829:  0x7324,
	7830:  0x7326,
	7831:  0x7327,
	7832:  0x7328,
	7833:  0x732D,
	7834:  0x732F,
	7835:  0x7330,
	7836:  0x7332,
	7837:  0x7333,
	7838:  0x7335,
	7839:  0x7336,
	7840:  0x733A,
	7841:  0x733B,
	7842:  0x733C,
	7843:  0x733D,
	7844:  0x7340,
	7845:  0x7341,
	7846:  0x7342,
	7847:  0x7343,
	7848:  0x7344,
	7849:  0x7345,
	7850:  0x7346,
	7851:  0x7347,
	7852:  0x7348,
	7853:  0x7349,
	7854:  0x734A,
	7855:  0x734B,
	7856:  0x734C,
	7857:  0x734E,
	7858:  0x734F,
	7859:  0x7351,
	7860:  0x7353,
	7861:  0x7354,
	7862:  0x7355,
	7863:  0x7356,
	7864:  0x7358,
	7865:  0x7359,
	7866:  0x735A,
	7867:  0x735B,
	7868:  0x735C,
	7869:  0x735D,
	7870:  0x735E,
	7871:  0x735F,
	7872:  0x7361,
	7873:  0x7362,
	7874:  0x7363,
	7875:  0x7364,
	7876:  0x7365,
	7877:  0x7366,
	7878:  0x7367,
	7879:  0x7368,
	7880:  0x7369,
	7881:  0x736A,
	7882:  0x736B,
	7883:  0x736E,
	7884:  0x7370,
	7885:  0x7371,
	7980:  0x7372,
	7981:  0x7373,
	7982:  0x7374,
	7983:  0x7375,
	7984:  0x7376,
	7985:  0x7377,
	7986:  0x7378,
	7987:  0x7379,
	7988:  0x737A,
	7989:  0x737B,
	7990:  0x737C,
	7991:  0x737D,
	7992:  0x737F,
	7993:  0x7380,
	7994:  0x7381,
	7995:  0x7382,
	7996:  0x7383,
	7997:  0x7385,
	7998:  0x7386,
	7999:  0x7388,
	8000:  0x738A,
	8001:  0x738C,
	8002:  0x738D,
	8003:  0x738F,
	8004:  0x7390,
	8005:  0x7392,
	8006:  0x7393,
	8007:  0x7394,
	8008:  0x7395,
	8009:  0x7397,
	8010:  0x7398,
	8011:  0x7399,
	8012:  0x739A,
	8013:  0x739C,
	8014:  0x739D,
	8015:  0x739E,
	8016:  0x73A0,
	8017:  0x73A1,
	8018:  0x73A3,
	8019:  0x73A4,
	8020:  0x73A5,
	8021:  0x73A6,
	8022:  0x73A7,
	8023:  0x73A8,
	8024:  0x73AA,
	8025:  0x73AC,
	8026:  0x73AD,
	8027:  0x73B1,
	8028:  0x73B4,
	8029:  0x73B5,
	8030:  0x73B6,
	8031:  0x73B8,
	8032:  0x73B9,
	8033:  0x73BC,
	8034:  0x73BD,
	8035:  0x73BE,
	8036:  0x73BF,
	8037:  0x73C1,
	8038:  0x73C3,
	8039:  0x73C4,
	8040:  0x73C5,
	8041:  0x73C6,
	8042:  0x73C7,
	8043:  0x73CB,
	8044:  0x73CC,
	8045:  0x73CE,
	8046:  0x73D2,
	8047:  0x73D3,
	8048:  0x73D4,
	8049:  0x73D5,
	8050:  0x73D6,
	8051:  0x73D7,
	8052:  0x73D8,
	8053:  0x73DA,
	8054:  0x73DB,
	8055:  0x73DC,
	8056:  0x73DD,
	8057:  0x73DF,
	8058:  0x73E1,
	8059:  0x73E2,
	8060:  0x73E3,
	8061:  0x73E4,
	8062:  0x73E6,
	8063:  0x73E8,
	8064:  0x73EA,
	8065:  0x73EB,
	8066:  0x73EC,
	8067:  0x73EE,
	8068:  0x73EF,
	8069:  0x73F0,
	8070:  0x73F1,
	8071:  0x73F3,
	8072:  0x73F4,
	8073:  0x73F5,
	8074:  0x73F6,
	8075:  0x73F7,
	8170:  0x73F8,
	8171:  0x73F9,
	8172:  0x73FA,
	8173:  0x73FB,
	8174:  0x73FC,
	8175:  0x73FD,
	8176:  0x73FE,
	8177:  0x73FF,
	8178:  0x7400,
	8179:  0x7401,
	8180:  0x7402,
	8181:  0x7404,
	8182:  0x7407,
	8183:  0x7408,
	8184:  0x740B,
	8185:  0x740C,
	8186:  0x740D,
	8187:  0x740E,
	8188:  0x7411,
	8189:  0x7412,
	8190:  0x7413,
	8191:  0x7414,
	8192:  0x7415,
	8193:  0x7416,
	8194:  0x7417,
	8195:  0x7418,
	8196:  0x7419,
	8197:  0x741C,
	8198:  0x741D,
	8199:  0x741E,
	8200:  0x741F,
	8201:  0x7420,
	8202:  0x7421,
	8203:  0x7423,
	8204:  0x7424,
	8205:  0x7427,
	8206:  0x7429,
	8207:  0x742B,
	8208:  0x742D,
	8209:  0x742F,
	8210:  0x7431,
	8211:  0x7432,
	8212:  0x7437,
	8213:  0x7438,
	8214:  0x7439,
	8215:  0x743A,
	8216:  0x743B,
	8217:  0x743D,
	8218:  0x743E,
	8219:  0x743F,
	8220:  0x7440,
	8221:  0x7442,
	8222:  0x7443,
	8223:  0x7444,
	8224:  0x7445,
	8225:  0x7446,
	8226:  0x7447,
	8227:  0x7448,
	8228:  0x7449,
	8229:  0x744A,
	8230:  0x744B,
	8231:  0x744C,
	8232:  0x744D,
	8233:  0x744E,
	8234:  0x744F,
	8235:  0x7450,
	8236:  0x7451,
	8237:  0x7452,
	8238:  0x7453,
	8239:  0x7454,
	8240:  0x7456,
	8241:  0x7458,
	8242:  0x745D,
	8243:  0x7460,
	8244:  0x7461,
	8245:  0x7462,
	8246:  0x7463,
	8247:  0x7464,
	8248:  0x7465,
	8249:  0x7466,
	8250:  0x7467,
	8251:  0x7468,
	8252:  0x7469,
	8253:  0x746A,
	8254:  0x746B,
	8255:  0x746C,
	8256:  0x746E,
	8257:  0x746F,
	8258:  0x7471,
	8259:  0x7472,
	8260:  0x7473,
	8261:  0x7474,
	8262:  0x7475,
	8263:  0x7478,
	8264:  0x7479,
	8265:  0x747A,
	8360:  0x747B,
	8361:  0x747C,
	8362:  0x747D,
	8363:  0x747F,
	8364:  0x7482,
	8365:  0x7484,
	8366:  0x7485,
	8367:  0x7486,
	8368:  0x7488,
	8369:  0x7489,
	8370:  0x748A,
	8371:  0x748C,
	8372:  0x748D,
	8373:  0x748F,
	8374:  0x7491,
	8375:  0x7492,
	8376:  0x7493,
	8377:  0x7494,
	8378:  0x7495,
	8379:  0x7496,
	8380:  0x7497,
	8381:  0x7498,
	8382:  0x7499,
	8383:  0x749A,
	8384:  0x749B,
	8385:  0x749D,
	8386:  0x749F,
	8387:  0x74A0,
	8388:  0x74A1,
	8389:  0x74A2,
	8390:  0x74A3,
	8391:  0x74A4,
	8392:  0x74A5,
	8393:  0x74A6,
	8394:  0x74AA,
	8395:  0x74AB,
	8396:  0x74AC,
	8397:  0x74AD,
	8398:  0x74AE,
	8399:  0x74AF,
	8400:  0x74B0,
	8401:  0x74B1,
	8402:  0x74B2,
	8403:  0x74B3,
	8404:  0x74B4,
	8405:  0x74B5,
	8406:  0x74B6,
	8407:  0x74B7,
	8408:  0x74B8,
	8409:  0x74B9,
	8410:  0x74BB,
	8411:  0x74BC,
	8412:  0x74BD,
	8413:  0x74BE,
	8414:  0x74BF,
	8415:  0x74C0,
	8416:  0x74C1,
	8417:  0x74C2,
	8418:  0x74C3,
	8419:  0x74C4,
	8420:  0x74C5,
	8421:  0x74C6,
	8422:  0x74C7,
	8423:  0x74C8,
	8424:  0x74C9,
	8425:  0x74CA,
	8426:  0x74CB,
	8427:  0x74CC,
	8428:  0x74CD,
	8429:  0x74CE,
	8430:  0x74CF,
	8431:  0x74D0,
	8432:  0x74D1,
	8433:  0x74D3,
	8434:  0x74D4,
	8435:  0x74D5,
	8436:  0x74D6,
	8437:  0x74D7,
	8438:  0x74D8,
	8439:  0x74D9,
	8440:  0x74DA,
	8441:  0x74DB,
	8442:  0x74DD,
	8443:  0x74DF,
	8444:  0x74E1,
	8445:  0x74E5,
	8446:  0x74E7,
	8447:  0x74E8,
	8448:  0x74E9,
	8449:  0x74EA,
	8450:  0x74EB,
	8451:  0x74EC,
	8452:  0x74ED,
	8453:  0x74F0,
	8454:  0x74F1,
	8455:  0x74F2,
	8550:  0x74F3,
	8551:  0x74F5,
	8552:  0x74F8,
	8553:  0x74F9,
	8554:  0x74FA,
	8555:  0x74FB,
	8556:  0x74FC,
	8557:  0x74FD,
	8558:  0x74FE,
	8559:  0x7500,
	8560:  0x7501,
	8561:  0x7502,
	8562:  0x7503,
	8563:  0x7505,
	8564:  0x7506,
	8565:  0x7507,
	8566:  0x7508,
	8567:  0x7509,
	8568:  0x750A,
	8569:  0x750B,
	8570:  0x750C,
	8571:  0x750E,
	8572:  0x7510,
	8573:  0x7512,
	8574:  0x7514,
	8575:  0x7515,
	8576:  0x7516,
	8577:  0x7517,
	8578:  0x751B,
	8579:  0x751D,
	8580:  0x751E,
	8581:  0x7520,
	8582:  0x7521,
	8583:  0x7522,
	8584:  0x7523,
	8585:  0x7524,
	8586:  0x7526,
	8587:  0x7527,
	8588:  0x752A,
	8589:  0x752E,
	8590:  0x7534,
	8591:  0x7536,
	8592:  0x7539,
	8593:  0x753C,
	8594:  0x753D,
	8595:  0x753F,
	8596:  0x7541,
	8597:  0x7542,
	8598:  0x7543,
	8599:  0x7544,
	8600:  0x7546,
	8601:  0x7547,
	8602:  0x7549,
	8603:  0x754A,
	8604:  0x754D,
	8605:  0x7550,
	8606:  0x7551,
	8607:  0x7552,
	8608:  0x7553,
	8609:  0x7555,
	8610:  0x7556,
	8611:  0x7557,
	8612:  0x7558,
	8613:  0x755D,
	8614:  0x755E,
	8615:  0x755F,
	8616:  0x7560,
	8617:  0x7561,
	8618:  0x7562,
	8619:  0x7563,
	8620:  0x7564,
	8621:  0x7567,
	8622:  0x7568,
	8623:  0x7569,
	8624:  0x756B,
	8625:  0x756C,
	8626:  0x756D,
	8627:  0x756E,
	8628:  0x756F,
	8629:  0x7570,
	8630:  0x7571,
	8631:  0x7573,
	8632:  0x7575,
	8633:  0x7576,
	8634:  0x7577,
	8635:  0x757A,
	8636:  0x757B,
	8637:  0x757C,
	8638:  0x757D,
	8639:  0x757E,
	8640:  0x7580,
	8641:  0x7581,
	8642:  0x7582,
	8643:  0x7584,
	8644:  0x7585,
	8645:  0x7587,
	8740:  0x7588,
	8741:  0x7589,
	8742:  0x758A,
	8743:  0x758C,
	8744:  0x758D,
	8745:  0x758E,
	8746:  0x7590,
	8747:  0x7593,
	8748:  0x7595,
	8749:  0x7598,
	8750:  0x759B,
	8751:  0x759C,
	8752:  0x759E,
	8753:  0x75A2,
	8754:  0x75A6,
	8755:  0x75A7,
	8756:  0x75A8,
	8757:  0x75A9,
	8758:  0x75AA,
	8759:  0x75AD,
	8760:  0x75B6,
	8761:  0x75B7,
	8762:  0x75BA,
	8763:  0x75BB,
	8764:  0x75BF,
	8765:  0x75C0,
	8766:  0x75C1,
	8767:  0x75C6,
	8768:  0x75CB,
	8769:  0x75CC,
	8770:  0x75CE,
	8771:  0x75CF,
	8772:  0x75D0,
	8773:  0x75D1,
	8774:  0x75D3,
	8775:  0x75D7,
	8776:  0x75D9,
	8777:  0x75DA,
	8778:  0x75DC,
	8779:  0x75DD,
	8780:  0x75DF,
	8781:  0x75E0,
	8782:  0x75E1,
	8783:  0x75E5,
	8784:  0x75E9,
	8785:  0x75EC,
	8786:  0x75ED,
	8787:  0x75EE,
	8788:  0x75EF,
	8789:  0x75F2,
	8790:  0x75F3,
	8791:  0x75F5,
	8792:  0x75F6,
	8793:  0x75F7,
	8794:  0x75F8,
	8795:  0x75FA,
	8796:  0x75FB,
	8797:  0x75FD,
	8798:  0x75FE,
	8799:  0x7602,
	8800:  0x7604,
	8801:  0x7606,
	8802:  0x7607,
	8803:  0x7608,
	8804:  0x7609,
	8805:  0x760B,
	8806:  0x760D,
	8807:  0x760E,
	8808:  0x760F,
	8809:  0x7611,
	8810:  0x7612,
	8811:  0x7613,
	8812:  0x7614,
	8813:  0x7616,
	8814:  0x761A,
	8815:  0x761C,
	8816:  0x761D,
	8817:  0x761E,
	8818:  0x7621,
	8819:  0x7623,
	8820:  0x7627,
	8821:  0x7628,
	8822:  0x762C,
	8823:  0x762E,
	8824:  0x762F,
	8825:  0x7631,
	8826:  0x7632,
	8827:  0x7636,
	8828:  0x7637,
	8829:  0x7639,
	8830:  0x763A,
	8831:  0x763B,
	8832:  0x763D,
	8833:  0x7641,
	8834:  0x7642,
	8835:  0x7644,
	8930:  0x7645,
	8931:  0x7646,
	8932:  0x7647,
	8933:  0x7648,
	8934:  0x7649,
	8935:  0x764A,
	8936:  0x764B,
	8937:  0x764E,
	8938:  0x764F,
	8939:  0x7650,
	8940:  0x7651,
	8941:  0x7652,
	8942:  0x7653,
	8943:  0x7655,
	8944:  0x7657,
	8945:  0x7658,
	8946:  0x7659,
	8947:  0x765A,
	8948:  0x765B,
	8949:  0x765D,
	8950:  0x765F,
	8951:  0x7660,
	8952:  0x7661,
	8953:  0x7662,
	8954:  0x7664,
	8955:  0x7665,
	8956:  0x7666,
	8957:  0x7667,
	8958:  0x7668,
	8959:  0x7669,
	8960:  0x766A,
	8961:  0x766C,
	8962:  0x766D,
	8963:  0x766E,
	8964:  0x7670,
	8965:  0x7671,
	8966:  0x7672,
	8967:  0x7673,
	8968:  0x7674,
	8969:  0x7675,
	8970:  0x7676,
	8971:  0x7677,
	8972:  0x7679,
	8973:  0x767A,
	8974:  0x767C,
	8975:  0x767F,
	8976:  0x7680,
	8977:  0x7681,
	8978:  0x7683,
	8979:  0x7685,
	8980:  0x7689,
	8981:  0x768A,
	8982:  0x768C,
	8983:  0x768D,
	8984:  0x768F,
	8985:  0x7690,
	8986:  0x7692,
	8987:  0x7694,
	8988:  0x7695,
	8989:  0x7697,
	8990:  0x7698,
	8991:  0x769A,
	8992:  0x769B,
	8993:  0x769C,
	8994:  0x769D,
	8995:  0x769E,
	8996:  0x769F,
	8997:  0x76A0,
	8998:  0x76A1,
	8999:  0x76A2,
	9000:  0x76A3,
	9001:  0x76A5,
	9002:  0x76A6,
	9003:  0x76A7,
	9004:  0x76A8,
	9005:  0x76A9,
	9006:  0x76AA,
	9007:  0x76AB,
	9008:  0x76AC,
	9009:  0x76AD,
	9010:  0x76AF,
	9011:  0x76B0,
	9012:  0x76B3,
	9013:  0x76B5,
	9014:  0x76B6,
	9015:  0x76B7,
	9016:  0x76B8,
	9017:  0x76B9,
	9018:  0x76BA,
	9019:  0x76BB,
	9020:  0x76BC,
	9021:  0x76BD,
	9022:  0x76BE,
	9023:  0x76C0,
	9024:  0x76C1,
	9025:  0x76C3,
	9026:  0x554A,
	9027:  0x963F,
	9028:  0x57C3,
	9029:  0x6328,
	9030:  0x54CE,
	9031:  0x5509,
	9032:  0x54C0,
	9033:  0x7691,
	9034:  0x764C,
	9035:  0x853C,
	9036:  0x77EE,
	9037:  0x827E,
	9038:  0x788D,
	9039:  0x7231,
	9040:  0x9698,
	9041:  0x978D,
	9042:  0x6C28,
	9043:  0x5B89,
	9044:  0x4FFA,
	9045:  0x6309,
	9046:  0x6697,
	9047:  0x5CB8,
	9048:  0x80FA,
	9049:  0x6848,
	9050:  0x80AE,
	9051:  0x6602,
	9052:  0x76CE,
	9053:  0x51F9,
	9054:  0x6556,
	9055:  0x71AC,
	9056:  0x7FF1,
	9057:  0x8884,
	9058:  0x50B2,
	9059:  0x5965,
	9060:  0x61CA,
	9061:  0x6FB3,
	9062:  0x82AD,
	9063:  0x634C,
	9064:  0x6252,
	9065:  0x53ED,
	9066:  0x5427,
	9067:  0x7B06,
	9068:  0x516B,
	9069:  0x75A4,
	9070:  0x5DF4,
	9071:  0x62D4,
	9072:  0x8DCB,
	9073:  0x9776,
	9074:  0x628A,
	9075:  0x8019,
	9076:  0x575D,
	9077:  0x9738,
	9078:  0x7F62,
	9079:  0x7238,
	9080:  0x767D,
	9081:  0x67CF,
	9082:  0x767E,
	9083:  0x6446,
	9084:  0x4F70,
	9085:  0x8D25,
	9086:  0x62DC,
	9087:  0x7A17,
	9088:  0x6591,
	9089:  0x73ED,
	9090:  0x642C,
	9091:  0x6273,
	9092:  0x822C,
	9093:  0x9881,
	9094:  0x677F,
	9095:  0x7248,
	9096:  0x626E,
	9097:  0x62CC,
	9098:  0x4F34,
	9099:  0x74E3,
	9100:  0x534A,
	9101:  0x529E,
	9102:  0x7ECA,
	9103:  0x90A6,
	9104:  0x5E2E,
	9105:  0x6886,
	9106:  0x699C,
	9107:  0x8180,
	9108:  0x7ED1,
	9109:  0x68D2,
	9110:  0x78C5,
	9111:  0x868C,
	9112:  0x9551,
	9113:  0x508D,
	9114:  0x8C24,
	9115:  0x82DE,
	9116:  0x80DE,
	9117:  0x5305,
	9118:  0x8912,
	9119:  0x5265,
	9120:  0x76C4,
	9121:  0x76C7,
	9122:  0x76C9,
	9123:  0x76CB,
	9124:  0x76CC,
	9125:  0x76D3,
	9126:  0x76D5,
	9127:  0x76D9,
	9128:  0x76DA,
	9129:  0x76DC,
	9130:  0x76DD,
	9131:  0x76DE,
	9132:  0x76E0,
	9133:  0x76E1,
	9134:  0x76E2,
	9135:  0x76E3,
	9136:  0x76E4,
	9137:  0x76E6,
	9138:  0x76E7,
	9139:  0x76E8,
	9140:  0x76E9,
	9141:  0x76EA,
	9142:  0x76EB,
	9143:  0x76EC,
	9144:  0x76ED,
	9145:  0x76F0,
	9146:  0x76F3,
	9147:  0x76F5,
	9148:  0x76F6,
	9149:  0x76F7,
	9150:  0x76FA,
	9151:  0x76FB,
	9152:  0x76FD,
	9153:  0x76FF,
	9154:  0x7700,
	9155:  0x7702,
	9156:  0x7703,
	9157:  0x7705,
	9158:  0x7706,
	9159:  0x770A,
	9160:  0x770C,
	9161:  0x770E,
	9162:  0x770F,
	9163:  0x7710,
	9164:  0x7711,
	9165:  0x7712,
	9166:  0x7713,
	9167:  0x7714,
	9168:  0x7715,
	9169:  0x7716,
	9170:  0x7717,
	9171:  0x7718,
	9172:  0x771B,
	9173:  0x771C,
	9174:  0x771D,
	9175:  0x771E,
	9176:  0x7721,
	9177:  0x7723,
	9178:  0x7724,
	9179:  0x7725,
	9180:  0x7727,
	9181:  0x772A,
	9182:  0x772B,
	9183:  0x772C,
	9184:  0x772E,
	9185:  0x7730,
	9186:  0x7731,
	9187:  0x7732,
	9188:  0x7733,
	9189:  0x7734,
	9190:  0x7739,
	9191:  0x773B,
	9192:  0x773D,
	9193:  0x773E,
	9194:  0x773F,
	9195:  0x7742,
	9196:  0x7744,
	9197:  0x7745,
	9198:  0x7746,
	9199:  0x7748,
	9200:  0x7749,
	9201:  0x774A,
	9202:  0x774B,
	9203:  0x774C,
	9204:  0x774D,
	9205:  0x774E,
	9206:  0x774F,
	9207:  0x7752,
	9208:  0x7753,
	9209:  0x7754,
	9210:  0x7755,
	9211:  0x7756,
	9212:  0x7757,
	9213:  0x7758,
	9214:  0x7759,
	9215:  0x775C,
	9216:  0x8584,
	9217:  0x96F9,
	9218:  0x4FDD,
	9219:  0x5821,
	9220:  0x9971,
	9221:  0x5B9D,
	9222:  0x62B1,
	9223:  0x62A5,
	9224:  0x66B4,
	9225:  0x8C79,
	9226:  0x9C8D,
	9227:  0x7206,
	9228:  0x676F,
	9229:  0x7891,
	9230:  0x60B2,
	9231:  0x5351,
	9232:  0x5317,
	9233:  0x8F88,
	9234:  0x80CC,
	9235:  0x8D1D,
	9236:  0x94A1,
	9237:  0x500D,
	9238:  0x72C8,
	9239:  0x5907,
	9240:  0x60EB,
	9241:  0x7119,
	9242:  0x88AB,
	9243:  0x5954,
	9244:  0x82EF,
	9245:  0x672C,
	9246:  0x7B28,
	9247:  0x5D29,
	9248:  0x7EF7,
	9249:  0x752D,
	9250:  0x6CF5,
	9251:  0x8E66,
	9252:  0x8FF8,
	9253:  0x903C,
	9254:  0x9F3B,
	9255:  0x6BD4,
	9256:  0x9119,
	9257:  0x7B14,
	9258:  0x5F7C,
	9259:  0x78A7,
	9260:  0x84D6,
	9261:  0x853D,
	9262:  0x6BD5,
	9263:  0x6BD9,
	9264:  0x6BD6,
	9265:  0x5E01,
	9266:  0x5E87,
	9267:  0x75F9,
	9268:  0x95ED,
	9269:  0x655D,
	9270:  0x5F0A,
	9271:  0x5FC5,
	9272:  0x8F9F,
	9273:  0x58C1,
	9274:  0x81C2,
	9275:  0x907F,
	9276:  0x965B,
	9277:  0x97AD,
	9278:  0x8FB9,
	9279:  0x7F16,
	9280:  0x8D2C,
	9281:  0x6241,
	9282:  0x4FBF,
	9283:  0x53D8,
	9284:  0x535E,
	9285:  0x8FA8,
	9286:  0x8FA9,
	9287:  0x8FAB,
	9288:  0x904D,
	9289:  0x6807,
	9290:  0x5F6A,
	9291:  0x8198,
	9292:  0x8868,
	9293:  0x9CD6,
	9294:  0x618B,
	9295:  0x522B,
	9296:  0x762A,
	9297:  0x5F6C,
	9298:  0x658C,
	9299:  0x6FD2,
	9300:  0x6EE8,
	9301:  0x5BBE,
	9302:  0x6448,
	9303:  0x5175,
	9304:  0x51B0,
	9305:  0x67C4,
	9306:  0x4E19,
	9307:  0x79C9,
	9308:  0x997C,
	9309:  0x70B3,
	9310:  0x775D,
	9311:  0x775E,
	9312:  0x775F,
	9313:  0x7760,
	9314:  0x7764,
	9315:  0x7767,
	9316:  0x7769,
	9317:  0x776A,
	9318:  0x776D,
	9319:  0x776E,
	9320:  0x776F,
	9321:  0x7770,
	9322:  0x7771,
	9323:  0x7772,
	9324:  0x7773,
	9325:  0x7774,
	9326:  0x7775,
	9327:  0x7776,
	9328:  0x7777,
	9329:  0x7778,
	9330:  0x777A,
	9331:  0x777B,
	9332:  0x777C,
	9333:  0x7781,
	9334:  0x7782,
	9335:  0x7783,
	9336:  0x7786,
	9337:  0x7787,
	9338:  0x7788,
	9339:  0x7789,
	9340:  0x778A,
	9341:  0x778B,
	9342:  0x778F,
	9343:  0x7790,
	9344:  0x7793,
	9345:  0x7794,
	9346:  0x7795,
	9347:  0x7796,
	9348:  0x7797,
	9349:  0x7798,
	9350:  0x7799,
	9351:  0x779A,
	9352:  0x779B,
	9353:  0x779C,
	9354:  0x779D,
	9355:  0x779E,
	9356:  0x77A1,
	9357:  0x77A3,
	9358:  0x77A4,
	9359:  0x77A6,
	9360:  0x77A8,
	9361:  0x77AB,
	9362:  0x77AD,
	9363:  0x77AE,
	9364:  0x77AF,
	9365:  0x77B1,
	9366:  0x77B2,
	9367:  0x77B4,
	9368:  0x77B6,
	9369:  0x77B7,
	9370:  0x77B8,
	9371:  0x77B9,
	9372:  0x77BA,
	9373:  0x77BC,
	9374:  0x77BE,
	9375:  0x77C0,
	9376:  0x77C1,
	9377:  0x77C2,
	9378:  0x77C3,
	9379:  0x77C4,
	9380:  0x77C5,
	9381:  0x77C6,
	9382:  0x77C7,
	9383:  0x77C8,
	9384:  0x77C9,
	9385:  0x77CA,
	9386:  0x77CB,
	9387:  0x77CC,
	9388:  0x77CE,
	9389:  0x77CF,
	9390:  0x77D0,
	9391:  0x77D1,
	9392:  0x77D2,
	9393:  0x77D3,
	9394:  0x77D4,
	9395:  0x77D5,
	9396:  0x77D6,
	9397:  0x77D8,
	9398:  0x77D9,
	9399:  0x77DA,
	9400:  0x77DD,
	9401:  0x77DE,
	9402:  0x77DF,
	9403:  0x77E0,
	9404:  0x77E1,
	9405:  0x77E4,
	9406:  0x75C5,
	9407:  0x5E76,
	9408:  0x73BB,
	9409:  0x83E0,
	9410:  0x64AD,
	9411:  0x62E8,
	9412:  0x94B5,
	9413:  0x6CE2,
	9414:  0x535A,
	9415:  0x52C3,
	9416:  0x640F,
	9417:  0x94C2,
	9418:  0x7B94,
	9419:  0x4F2F,
	9420:  0x5E1B,
	9421:  0x8236,
	9422:  0x8116,
	9423:  0x818A,
	9424:  0x6E24,
	9425:  0x6CCA,
	9426:  0x9A73,
	9427:  0x6355,
	9428:  0x535C,
	9429:  0x54FA,
	9430:  0x8865,
	9431:  0x57E0,
	9432:  0x4E0D,
	9433:  0x5E03,
	9434:  0x6B65,
	9435:  0x7C3F,
	9436:  0x90E8,
	9437:  0x6016,
	9438:  0x64E6,
	9439:  0x731C,
	9440:  0x88C1,
	9441:  0x6750,
	9442:  0x624D,
	9443:  0x8D22,
	9444:  0x776C,
	9445:  0x8E29,
	9446:  0x91C7,
	9447:  0x5F69,
	9448:  0x83DC,
	9449:  0x8521,
	9450:  0x9910,
	9451:  0x53C2,
	9452:  0x8695,
	9453:  0x6B8B,
	9454:  0x60ED,
	9455:  0x60E8,
	9456:  0x707F,
	9457:  0x82CD,
	9458:  0x8231,
	9459:  0x4ED3,
	9460:  0x6CA7,
	9461:  0x85CF,
	9462:  0x64CD,
	9463:  0x7CD9,
	9464:  0x69FD,
	9465:  0x66F9,
	9466:  0x8349,
	9467:  0x5395,
	9468:  0x7B56,
	9469:  0x4FA7,
	9470:  0x518C,
	9471:  0x6D4B,
	9472:  0x5C42,
	9473:  0x8E6D,
	9474:  0x63D2,
	9475:  0x53C9,
	9476:  0x832C,
	9477:  0x8336,
	9478:  0x67E5,
	9479:  0x78B4,
	9480:  0x643D,
	9481:  0x5BDF,
	9482:  0x5C94,
	9483:  0x5DEE,
	9484:  0x8BE7,
	9485:  0x62C6,
	9486:  0x67F4,
	9487:  0x8C7A,
	9488:  0x6400,
	9489:  0x63BA,
	9490:  0x8749,
	9491:  0x998B,
	9492:  0x8C17,
	9493:  0x7F20,
	9494:  0x94F2,
	9495:  0x4EA7,
	9496:  0x9610,
	9497:  0x98A4,
	9498:  0x660C,
	9499:  0x7316,
	9500:  0x77E6,
	9501:  0x77E8,
	9502:  0x77EA,
	9503:  0x77EF,
	9504:  0x77F0,
	9505:  0x77F1,
	9506:  0x77F2,
	9507:  0x77F4,
	9508:  0x77F5,
	9509:  0x77F7,
	9510:  0x77F9,
	9511:  0x77FA,
	9512:  0x77FB,
	9513:  0x77FC,
	9514:  0x7803,
	9515:  0x7804,
	9516:  0x7805,
	9517:  0x7806,
	9518:  0x7807,
	9519:  0x7808,
	9520:  0x780A,
	9521:  0x780B,
	9522:  0x780E,
	9523:  0x780F,
	9524:  0x7810,
	9525:  0x7813,
	9526:  0x7815,
	9527:  0x7819,
	9528:  0x781B,
	9529:  0x781E,
	9530:  0x7820,
	9531:  0x7821,
	9532:  0x7822,
	9533:  0x7824,
	9534:  0x7828,
	9535:  0x782A,
	9536:  0x782B,
	9537:  0x782E,
	9538:  0x782F,
	9539:  0x7831,
	9540:  0x7832,
	9541:  0x7833,
	9542:  0x7835,
	9543:  0x7836,
	9544:  0x783D,
	9545:  0x783F,
	9546:  0x7841,
	9547:  0x7842,
	9548:  0x7843,
	9549:  0x7844,
	9550:  0x7846,
	9551:  0x7848,
	9552:  0x7849,
	9553:  0x784A,
	9554:  0x784B,
	9555:  0x784D,
	9556:  0x784F,
	9557:  0x7851,
	9558:  0x7853,
	9559:  0x7854,
	9560:  0x7858,
	9561:  0x7859,
	9562:  0x785A,
	9563:  0x785B,
	9564:  0x785C,
	9565:  0x785E,
	9566:  0x785F,
	9567:  0x7860,
	9568:  0x7861,
	9569:  0x7862,
	9570:  0x7863,
	9571:  0x7864,
	9572:  0x7865,
	9573:  0x7866,
	9574:  0x7867,
	9575:  0x7868,
	9576:  0x7869,
	9577:  0x786F,
	9578:  0x7870,
	9579:  0x7871,
	9580:  0x7872,
	9581:  0x7873,
	9582:  0x7874,
	9583:  0x7875,
	9584:  0x7876,
	9585:  0x7878,
	9586:  0x7879,
	9587:  0x787A,
	9588:  0x787B,
	9589:  0x787D,
	9590:  0x787E,
	9591:  0x787F,
	9592:  0x7880,
	9593:  0x7881,
	9594:  0x7882,
	9595:  0x7883,
	9596:  0x573A,
	9597:  0x5C1D,
	9598:  0x5E38,
	9599:  0x957F,
	9600:  0x507F,
	9601:  0x80A0,
	9602:  0x5382,
	9603:  0x655E,
	9604:  0x7545,
	9605:  0x5531,
	9606:  0x5021,
	9607:  0x8D85,
	9608:  0x6284,
	9609:  0x949E,
	9610:  0x671D,
	9611:  0x5632,
	9612:  0x6F6E,
	9613:  0x5DE2,
	9614:  0x5435,
	9615:  0x7092,
	9616:  0x8F66,
	9617:  0x626F,
	9618:  0x64A4,
	9619:  0x63A3,
	9620:  0x5F7B,
	9621:  0x6F88,
	9622:  0x90F4,
	9623:  0x81E3,
	9624:  0x8FB0,
	9625:  0x5C18,
	9626:  0x6668,
	9627:  0x5FF1,
	9628:  0x6C89,
	9629:  0x9648,
	9630:  0x8D81,
	9631:  0x886C,
	9632:  0x6491,
	9633:  0x79F0,
	9634:  0x57CE,
	9635:  0x6A59,
	9636:  0x6210,
	9637:  0x5448,
	9638:  0x4E58,
	9639:  0x7A0B,
	9640:  0x60E9,
	9641:  0x6F84,
	9642:  0x8BDA,
	9643:  0x627F,
	9644:  0x901E,
	9645:  0x9A8B,
	9646:  0x79E4,
	9647:  0x5403,
	9648:  0x75F4,
	9649:  0x6301,
	9650:  0x5319,
	9651:  0x6C60,
	9652:  0x8FDF,
	9653:  0x5F1B,
	9654:  0x9A70,
	9655:  0x803B,
	9656:  0x9F7F,
	9657:  0x4F88,
	9658:  0x5C3A,
	9659:  0x8D64,
	9660:  0x7FC5,
	9661:  0x65A5,
	9662:  0x70BD,
	9663:  0x5145,
	9664:  0x51B2,
	9665:  0x866B,
	9666:  0x5D07,
	9667:  0x5BA0,
	9668:  0x62BD,
	9669:  0x916C,
	9670:  0x7574,
	9671:  0x8E0C,
	9672:  0x7A20,
	9673:  0x6101,
	9674:  0x7B79,
	9675:  0x4EC7,
	9676:  0x7EF8,
	9677:  0x7785,
	9678:  0x4E11,
	9679:  0x81ED,
	9680:  0x521D,
	9681:  0x51FA,
	9682:  0x6A71,
	9683:  0x53A8,
	9684:  0x8E87,
	9685:  0x9504,
	9686:  0x96CF,
	9687:  0x6EC1,
	9688:  0x9664,
	9689:  0x695A,
	9690:  0x7884,
	9691:  0x7885,
	9692:  0x7886,
	9693:  0x7888,
	9694:  0x788A,
	9695:  0x788B,
	9696:  0x788F,
	9697:  0x7890,
	9698:  0x7892,
	9699:  0x7894,
	9700:  0x7895,
	9701:  0x7896,
	9702:  0x7899,
	9703:  0x789D,
	9704:  0x789E,
	9705:  0x78A0,
	9706:  0x78A2,
	9707:  0x78A4,
	9708:  0x78A6,
	9709:  0x78A8,
	9710:  0x78A9,
	9711:  0x78AA,
	9712:  0x78AB,
	9713:  0x78AC,
	9714:  0x78AD,
	9715:  0x78AE,
	9716:  0x78AF,
	9717:  0x78B5,
	9718:  0x78B6,
	9719:  0x78B7,
	9720:  0x78B8,
	9721:  0x78BA,
	9722:  0x78BB,
	9723:  0x78BC,
	9724:  0x78BD,
	9725:  0x78BF,
	9726:  0x78C0,
	9727:  0x78C2,
	9728:  0x78C3,
	9729:  0x78C4,
	9730:  0x78C6,
	9731:  0x78C7,
	9732:  0x78C8,
	9733:  0x78CC,
	9734:  0x78CD,
	9735:  0x78CE,
	9736:  0x78CF,
	9737:  0x78D1,
	9738:  0x78D2,
	9739:  0x78D3,
	9740:  0x78D6,
	9741:  0x78D7,
	9742:  0x78D8,
	9743:  0x78DA,
	9744:  0x78DB,
	9745:  0x78DC,
	9746:  0x78DD,
	9747:  0x78DE,
	9748:  0x78DF,
	9749:  0x78E0,
	9750:  0x78E1,
	9751:  0x78E2,
	9752:  0x78E3,
	9753:  0x78E4,
	9754:  0x78E5,
	9755:  0x78E6,
	9756:  0x78E7,
	9757:  0x78E9,
	9758:  0x78EA,
	9759:  0x78EB,
	9760:  0x78ED,
	9761:  0x78EE,
	9762:  0x78EF,
	9763:  0x78F0,
	9764:  0x78F1,
	9765:  0x78F3,
	9766:  0x78F5,
	9767:  0x78F6,
	9768:  0x78F8,
	9769:  0x78F9,
	9770:  0x78FB,
	9771:  0x78FC,
	9772:  0x78FD,
	9773:  0x78FE,
	9774:  0x78FF,
	9775:  0x7900,
	9776:  0x7902,
	9777:  0x7903,
	9778:  0x7904,
	9779:  0x7906,
	9780:  0x7907,
	9781:  0x7908,
	9782:  0x7909,
	9783:  0x790A,
	9784:  0x790B,
	9785:  0x790C,
	9786:  0x7840,
	9787:  0x50A8,
	9788:  0x77D7,
	9789:  0x6410,
	9790:  0x89E6,
	9791:  0x5904,
	9792:  0x63E3,
	9793:  0x5DDD,
	9794:  0x7A7F,
	9795:  0x693D,
	9796:  0x4F20,
	9797:  0x8239,
	9798:  0x5598,
	9799:  0x4E32,
	9800:  0x75AE,
	9801:  0x7A97,
	9802:  0x5E62,
	9803:  0x5E8A,
	9804:  0x95EF,
	9805:  0x521B,
	9806:  0x5439,
	9807:  0x708A,
	9808:  0x6376,
	9809:  0x9524,
	9810:  0x5782,
	9811:  0x6625,
	9812:  0x693F,
	9813:  0x9187,
	9814:  0x5507,
	9815:  0x6DF3,
	9816:  0x7EAF,
	9817:  0x8822,
	9818:  0x6233,
	9819:  0x7EF0,
	9820:  0x75B5,
	9821:  0x8328,
	9822:  0x78C1,
	9823:  0x96CC,
	9824:  0x8F9E,
	9825:  0x6148,
	9826:  0x74F7,
	9827:  0x8BCD,
	9828:  0x6B64,
	9829:  0x523A,
	9830:  0x8D50,
	9831:  0x6B21,
	9832:  0x806A,
	9833:  0x8471,
	9834:  0x56F1,
	9835:  0x5306,
	9836:  0x4ECE,
	9837:  0x4E1B,
	9838:  0x51D1,
	9839:  0x7C97,
	9840:  0x918B,
	9841:  0x7C07,
	9842:  0x4FC3,
	9843:  0x8E7F,
	9844:  0x7BE1,
	9845:  0x7A9C,
	9846:  0x6467,
	9847:  0x5D14,
	9848:  0x50AC,
	9849:  0x8106,
	9850:  0x7601,
	9851:  0x7CB9,
	9852:  0x6DEC,
	9853:  0x7FE0,
	9854:  0x6751,
	9855:  0x5B58,
	9856:  0x5BF8,
	9857:  0x78CB,
	9858:  0x64AE,
	9859:  0x6413,
	9860:  0x63AA,
	9861:  0x632B,
	9862:  0x9519,
	9863:  0x642D,
	9864:  0x8FBE,
	9865:  0x7B54,
	9866:  0x7629,
	9867:  0x6253,
	9868:  0x5927,
	9869:  0x5446,
	9870:  0x6B79,
	9871:  0x50A3,
	9872:  0x6234,
	9873:  0x5E26,
	9874:  0x6B86,
	9875:  0x4EE3,
	9876:  0x8D37,
	9877:  0x888B,
	9878:  0x5F85,
	9879:  0x902E,
	9880:  0x790D,
	9881:  0x790E,
	9882:  0x790F,
	9883:  0x7910,
	9884:  0x7911,
	9885:  0x7912,
	9886:  0x7914,
	9887:  0x7915,
	9888:  0x7916,
	9889:  0x7917,
	9890:  0x7918,
	9891:  0x7919,
	9892:  0x791A,
	9893:  0x791B,
	9894:  0x791C,
	9895:  0x791D,
	9896:  0x791F,
	9897:  0x7920,
	9898:  0x7921,
	9899:  0x7922,
	9900:  0x7923,
	9901:  0x7925,
	9902:  0x7926,
	9903:  0x7927,
	9904:  0x7928,
	9905:  0x7929,
	9906:  0x792A,
	9907:  0x792B,
	9908:  0x792C,
	9909:  0x792D,
	9910:  0x792E,
	9911:  0x792F,
	9912:  0x7930,
	9913:  0x7931,
	9914:  0x7932,
	9915:  0x7933,
	9916:  0x7935,
	9917:  0x7936,
	9918:  0x7937,
	9919:  0x7938,
	9920:  0x7939,
	9921:  0x793D,
	9922:  0x793F,
	9923:  0x7942,
	9924:  0x7943,
	9925:  0x7944,
	9926:  0x7945,
	9927:  0x7947,
	9928:  0x794A,
	9929:  0x794B,
	9930:  0x794C,
	9931:  0x794D,
	9932:  0x794E,
	9933:  0x794F,
	9934:  0x7950,
	9935:  0x7951,
	9936:  0x7952,
	9937:  0x7954,
	9938:  0x7955,
	9939:  0x7958,
	9940:  0x7959,
	9941:  0x7961,
	9942:  0x7963,
	9943:  0x7964,
	9944:  0x7966,
	9945:  0x7969,
	9946:  0x796A,
	9947:  0x796B,
	9948:  0x796C,
	9949:  0x796E,
	9950:  0x7970,
	9951:  0x7971,
	9952:  0x7972,
	9953:  0x7973,
	9954:  0x7974,
	9955:  0x7975,
	9956:  0x7976,
	9957:  0x7979,
	9958:  0x797B,
	9959:  0x797C,
	9960:  0x797D,
	9961:  0x797E,
	9962:  0x797F,
	9963:  0x7982,
	9964:  0x7983,
	9965:  0x7986,
	9966:  0x7987,
	9967:  0x7988,
	9968:  0x7989,
	9969:  0x798B,
	9970:  0x798C,
	9971:  0x798D,
	9972:  0x798E,
	9973:  0x7990,
	9974:  0x7991,
	9975:  0x7992,
	9976:  0x6020,
	9977:  0x803D,
	9978:  0x62C5,
	9979:  0x4E39,
	9980:  0x5355,
	9981:  0x90F8,
	9982:  0x63B8,
	9983:  0x80C6,
	9984:  0x65E6,
	9985:  0x6C2E,
	9986:  0x4F46,
	9987:  0x60EE,
	9988:  0x6DE1,
	9989:  0x8BDE,
	9990:  0x5F39,
	9991:  0x86CB,
	9992:  0x5F53,
	9993:  0x6321,
	9994:  0x515A,
	9995:  0x8361,
	9996:  0x6863,
	9997:  0x5200,
	9998:  0x6363,
	9999:  0x8E48,
	10000: 0x5012,
	10001: 0x5C9B,
	10002: 0x7977,
	10003: 0x5BFC,
	10004: 0x5230,
	10005: 0x7A3B,
	10006: 0x60BC,
	10007: 0x9053,
	10008: 0x76D7,
	10009: 0x5FB7,
	10010: 0x5F97,
	10011: 0x7684,
	10012: 0x8E6C,
	10013: 0x706F,
	10014: 0x767B,
	10015: 0x7B49,
	10016: 0x77AA,
	10017: 0x51F3,
	10018: 0x9093,
	10019: 0x5824,
	10020: 0x4F4E,
	10021: 0x6EF4,
	10022: 0x8FEA,
	10023: 0x654C,
	10024: 0x7B1B,
	10025: 0x72C4,
	10026: 0x6DA4,
	10027: 0x7FDF,
	10028: 0x5AE1,
	10029: 0x62B5,
	10030: 0x5E95,
	10031: 0x5730,
	10032: 0x8482,
	10033: 0x7B2C,
	10034: 0x5E1D,
	10035: 0x5F1F,
	10036: 0x9012,
	10037: 0x7F14,
	10038: 0x98A0,
	10039: 0x6382,
	10040: 0x6EC7,
	10041: 0x7898,
	10042: 0x70B9,
	10043: 0x5178,
	10044: 0x975B,
	10045: 0x57AB,
	10046: 0x7535,
	10047: 0x4F43,
	10048: 0x7538,
	10049: 0x5E97,
	10050: 0x60E6,
	10051: 0x5960,
	10052: 0x6DC0,
	10053: 0x6BBF,
	10054: 0x7889,
	10055: 0x53FC,
	10056: 0x96D5,
	10057: 0x51CB,
	10058: 0x5201,
	10059: 0x6389,
	10060: 0x540A,
	10061: 0x9493,
	10062: 0x8C03,
	10063: 0x8DCC,
	10064: 0x7239,
	10065: 0x789F,
	10066: 0x8776,
	10067: 0x8FED,
	10068: 0x8C0D,
	10069: 0x53E0,
	10070: 0x7993,
	10071: 0x7994,
	10072: 0x7995,
	10073: 0x7996,
	10074: 0x7997,
	10075: 0x7998,
	10076: 0x7999,
	10077: 0x799B,
	10078: 0x799C,
	10079: 0x799D,
	10080: 0x799E,
	10081: 0x799F,
	10082: 0x79A0,
	10083: 0x79A1,
	10084: 0x79A2,
	10085: 0x79A3,
	10086: 0x79A4,
	10087: 0x79A5,
	10088: 0x79A6,
	10089: 0x79A8,
	10090: 0x79A9,
	10091: 0x79AA,
	10092: 0x79AB,
	10093: 0x79AC,
	10094: 0x79AD,
	10095: 0x79AE,
	10096: 0x79AF,
	10097: 0x79B0,
	10098: 0x79B1,
	10099: 0x79B2,
	10100: 0x79B4,
	10101: 0x79B5,
	10102: 0x79B6,
	10103: 0x79B7,
	10104: 0x79B8,
	10105: 0x79BC,
	10106: 0x79BF,
	10107: 0x79C2,
	10108: 0x79C4,
	10109: 0x79C5,
	10110: 0x79C7,
	10111: 0x79C8,
	10112: 0x79CA,
	10113: 0x79CC,
	10114: 0x79CE,
	10115: 0x79CF,
	10116: 0x79D0,
	10117: 0x79D3,
	10118: 0x79D4,
	10119: 0x79D6,
	10120: 0x79D7,
	10121: 0x79D9,
	10122: 0x79DA,
	10123: 0x79DB,
	10124: 0x79DC,
	10125: 0x79DD,
	10126: 0x79DE,
	10127: 0x79E0,
	10128: 0x79E1,
	10129: 0x79E2,
	10130: 0x79E5,
	10131: 0x79E8,
	10132: 0x79EA,
	10133: 0x79EC,
	10134: 0x79EE,
	10135: 0x79F1,
	10136: 0x79F2,
	10137: 0x79F3,
	10138: 0x79F4,
	10139: 0x79F5,
	10140: 0x79F6,
	10141: 0x79F7,
	10142: 0x79F9,
	10143: 0x79FA,
	10144: 0x79FC,
	10145: 0x79FE,
	10146: 0x79FF,
	10147: 0x7A01,
	10148: 0x7A04,
	10149: 0x7A05,
	10150: 0x7A07,
	10151: 0x7A08,
	10152: 0x7A09,
	10153: 0x7A0A,
	10154: 0x7A0C,
	10155: 0x7A0F,
	10156: 0x7A10,
	10157: 0x7A11,
	10158: 0x7A12,
	10159: 0x7A13,
	10160: 0x7A15,
	10161: 0x7A16,
	10162: 0x7A18,
	10163: 0x7A19,
	10164: 0x7A1B,
	10165: 0x7A1C,
	10166: 0x4E01,
	10167: 0x76EF,
	10168: 0x53EE,
	10169: 0x9489,
	10170: 0x9876,
	10171: 0x9F0E,
	10172: 0x952D,
	10173: 0x5B9A,
	10174: 0x8BA2,
	10175: 0x4E22,
	10176: 0x4E1C,
	10177: 0x51AC,
	10178: 0x8463,
	10179: 0x61C2,
	10180: 0x52A8,
	10181: 0x680B,
	10182: 0x4F97,
	10183: 0x606B,
	10184: 0x51BB,
	10185: 0x6D1E,
	10186: 0x515C,
	10187: 0x6296,
	10188: 0x6597,
	10189: 0x9661,
	10190: 0x8C46,
	10191: 0x9017,
	10192: 0x75D8,
	10193: 0x90FD,
	10194: 0x7763,
	10195: 0x6BD2,
	10196: 0x728A,
	10197: 0x72EC,
	10198: 0x8BFB,
	10199: 0x5835,
	10200: 0x7779,
	10201: 0x8D4C,
	10202: 0x675C,
	10203: 0x9540,
	10204: 0x809A,
	10205: 0x5EA6,
	10206: 0x6E21,
	10207: 0x5992,
	10208: 0x7AEF,
	10209: 0x77ED,
	10210: 0x953B,
	10211: 0x6BB5,
	10212: 0x65AD,
	10213: 0x7F0E,
	10214: 0x5806,
	10215: 0x5151,
	10216: 0x961F,
	10217: 0x5BF9,
	10218: 0x58A9,
	10219: 0x5428,
	10220: 0x8E72,
	10221: 0x6566,
	10222: 0x987F,
	10223: 0x56E4,
	10224: 0x949D,
	10225: 0x76FE,
	10226: 0x9041,
	10227: 0x6387,
	10228: 0x54C6,
	10229: 0x591A,
	10230: 0x593A,
	10231: 0x579B,
	10232: 0x8EB2,
	10233: 0x6735,
	10234: 0x8DFA,
	10235: 0x8235,
	10236: 0x5241,
	10237: 0x60F0,
	10238: 0x5815,
	10239: 0x86FE,
	10240: 0x5CE8,
	10241: 0x9E45,
	10242: 0x4FC4,
	10243: 0x989D,
	10244: 0x8BB9,
	10245: 0x5A25,
	10246: 0x6076,
	10247: 0x5384,
	10248: 0x627C,
	10249: 0x904F,
	10250: 0x9102,
	10251: 0x997F,
	10252: 0x6069,
	10253: 0x800C,
	10254: 0x513F,
	10255: 0x8033,
	10256: 0x5C14,
	10257: 0x9975,
	10258: 0x6D31,
	10259: 0x4E8C,
	10260: 0x7A1D,
	10261: 0x7A1F,
	10262: 0x7A21,
	10263: 0x7A22,
	10264: 0x7A24,
	10265: 0x7A25,
	10266: 0x7A26,
	10267: 0x7A27,
	10268: 0x7A28,
	10269: 0x7A29,
	10270: 0x7A2A,
	10271: 0x7A2B,
	10272: 0x7A2C,
	10273: 0x7A2D,
	10274: 0x7A2E,
	10275: 0x7A2F,
	10276: 0x7A30,
	10277: 0x7A31,
	10278: 0x7A32,
	10279: 0x7A34,
	10280: 0x7A35,
	10281: 0x7A36,
	10282: 0x7A38,
	10283: 0x7A3A,
	10284: 0x7A3E,
	10285: 0x7A40,
	10286: 0x7A41,
	10287: 0x7A42,
	10288: 0x7A43,
	10289: 0x7A44,
	10290: 0x7A45,
	10291: 0x7A47,
	10292: 0x7A48,
	10293: 0x7A49,
	10294: 0x7A4A,
	10295: 0x7A4B,
	10296: 0x7A4C,
	10297: 0x7A4D,
	10298: 0x7A4E,
	10299: 0x7A4F,
	10300: 0x7A50,
	10301: 0x7A52,
	10302: 0x7A53,
	10303: 0x7A54,
	10304: 0x7A55,
	10305: 0x7A56,
	10306: 0x7A58,
	10307: 0x7A59,
	10308: 0x7A5A,
	10309: 0x7A5B,
	10310: 0x7A5C,
	10311: 0x7A5D,
	10312: 0x7A5E,
	10313: 0x7A5F,
	10314: 0x7A60,
	10315: 0x7A61,
	10316: 0x7A62,
	10317: 0x7A63,
	10318: 0x7A64,
	10319: 0x7A65,
	10320: 0x7A66,
	10321: 0x7A67,
	10322: 0x7A68,
	10323: 0x7A69,
	10324: 0x7A6A,
	10325: 0x7A6B,
	10326: 0x7A6C,
	10327: 0x7A6D,
	10328: 0x7A6E,
	10329: 0x7A6F,
	10330: 0x7A71,
	10331: 0x7A72,
	10332: 0x7A73,
	10333: 0x7A75,
	10334: 0x7A7B,
	10335: 0x7A7C,
	10336: 0x7A7D,
	10337: 0x7A7E,
	10338: 0x7A82,
	10339: 0x7A85,
	10340: 0x7A87,
	10341: 0x7A89,
	10342: 0x7A8A,
	10343: 0x7A8B,
	10344: 0x7A8C,
	10345: 0x7A8E,
	10346: 0x7A8F,
	10347: 0x7A90,
	10348: 0x7A93,
	10349: 0x7A94,
	10350: 0x7A99,
	10351: 0x7A9A,
	10352: 0x7A9B,
	10353: 0x7A9E,
	10354: 0x7AA1,
	10355: 0x7AA2,
	10356: 0x8D30,
	10357: 0x53D1,
	10358: 0x7F5A,
	10359: 0x7B4F,
	10360: 0x4F10,
	10361: 0x4E4F,
	10362: 0x9600,
	10363: 0x6CD5,
	10364: 0x73D0,
	10365: 0x85E9,
	10366: 0x5E06,
	10367: 0x756A,
	10368: 0x7FFB,
	10369: 0x6A0A,
	10370: 0x77FE,
	10371: 0x9492,
	10372: 0x7E41,
	10373: 0x51E1,
	10374: 0x70E6,
	10375: 0x53CD,
	10376: 0x8FD4,
	10377: 0x8303,
	10378: 0x8D29,
	10379: 0x72AF,
	10380: 0x996D,
	10381: 0x6CDB,
	10382: 0x574A,
	10383: 0x82B3,
	10384: 0x65B9,
	10385: 0x80AA,
	10386: 0x623F,
	10387: 0x9632,
	10388: 0x59A8,
	10389: 0x4EFF,
	10390: 0x8BBF,
	10391: 0x7EBA,
	10392: 0x653E,
	10393: 0x83F2,
	10394: 0x975E,
	10395: 0x5561,
	10396: 0x98DE,
	10397: 0x80A5,
	10398: 0x532A,
	10399: 0x8BFD,
	10400: 0x5420,
	10401: 0x80BA,
	10402: 0x5E9F,
	10403: 0x6CB8,
	10404: 0x8D39,
	10405: 0x82AC,
	10406: 0x915A,
	10407: 0x5429,
	10408: 0x6C1B,
	10409: 0x5206,
	10410: 0x7EB7,
	10411: 0x575F,
	10412: 0x711A,
	10413: 0x6C7E,
	10414: 0x7C89,
	10415: 0x594B,
	10416: 0x4EFD,
	10417: 0x5FFF,
	10418: 0x6124,
	10419: 0x7CAA,
	10420: 0x4E30,
	10421: 0x5C01,
	10422: 0x67AB,
	10423: 0x8702,
	10424: 0x5CF0,
	10425: 0x950B,
	10426: 0x98CE,
	10427: 0x75AF,
	10428: 0x70FD,
	10429: 0x9022,
	10430: 0x51AF,
	10431: 0x7F1D,
	10432: 0x8BBD,
	10433: 0x5949,
	10434: 0x51E4,
	10435: 0x4F5B,
	10436: 0x5426,
	10437: 0x592B,
	10438: 0x6577,
	10439: 0x80A4,
	10440: 0x5B75,
	10441: 0x6276,
	10442: 0x62C2,
	10443: 0x8F90,
	10444: 0x5E45,
	10445: 0x6C1F,
	10446: 0x7B26,
	10447: 0x4F0F,
	10448: 0x4FD8,
	10449: 0x670D,
	10450: 0x7AA3,
	10451: 0x7AA4,
	10452: 0x7AA7,
	10453: 0x7AA9,
	10454: 0x7AAA,
	10455: 0x7AAB,
	10456: 0x7AAE,
	10457: 0x7AAF,
	10458: 0x7AB0,
	10459: 0x7AB1,
	10460: 0x7AB2,
	10461: 0x7AB4,
	10462: 0x7AB5,
	10463: 0x7AB6,
	10464: 0x7AB7,
	10465: 0x7AB8,
	10466: 0x7AB9,
	10467: 0x7ABA,
	10468: 0x7ABB,
	10469: 0x7ABC,
	10470: 0x7ABD,
	10471: 0x7ABE,
	10472: 0x7AC0,
	10473: 0x7AC1,
	10474: 0x7AC2,
	10475: 0x7AC3,
	10476: 0x7AC4,
	10477: 0x7AC5,
	10478: 0x7AC6,
	10479: 0x7AC7,
	10480: 0x7AC8,
	10481: 0x7AC9,
	10482: 0x7ACA,
	10483: 0x7ACC,
	10484: 0x7ACD,
	10485: 0x7ACE,
	10486: 0x7ACF,
	10487: 0x7AD0,
	10488: 0x7AD1,
	10489: 0x7AD2,
	10490: 0x7AD3,
	10491: 0x7AD4,
	10492: 0x7AD5,
	10493: 0x7AD7,
	10494: 0x7AD8,
	10495: 0x7ADA,
	10496: 0x7ADB,
	10497: 0x7ADC,
	10498: 0x7ADD,
	10499: 0x7AE1,
	10500: 0x7AE2,
	10501: 0x7AE4,
	10502: 0x7AE7,
	10503: 0x7AE8,
	10504: 0x7AE9,
	10505: 0x7AEA,
	10506: 0x7AEB,
	10507: 0x7AEC,
	10508: 0x7AEE,
	10509: 0x7AF0,
	10510: 0x7AF1,
	10511: 0x7AF2,
	10512: 0x7AF3,
	10513: 0x7AF4,
	10514: 0x7AF5,
	10515: 0x7AF6,
	10516: 0x7AF7,
	10517: 0x7AF8,
	10518: 0x7AFB,
	10519: 0x7AFC,
	10520: 0x7AFE,
	10521: 0x7B00,
	10522: 0x7B01,
	10523: 0x7B02,
	10524: 0x7B05,
	10525: 0x7B07,
	10526: 0x7B09,
	10527: 0x7B0C,
	10528: 0x7B0D,
	10529: 0x7B0E,
	10530: 0x7B10,
	10531: 0x7B12,
	10532: 0x7B13,
	10533: 0x7B16,
	10534: 0x7B17,
	10535: 0x7B18,
	10536: 0x7B1A,
	10537: 0x7B1C,
	10538: 0x7B1D,
	10539: 0x7B1F,
	10540: 0x7B21,
	10541: 0x7B22,
	10542: 0x7B23,
	10543: 0x7B27,
	10544: 0x7B29,
	10545: 0x7B2D,
	10546: 0x6D6E,
	10547: 0x6DAA,
	10548: 0x798F,
	10549: 0x88B1,
	10550: 0x5F17,
	10551: 0x752B,
	10552: 0x629A,
	10553: 0x8F85,
	10554: 0x4FEF,
	10555: 0x91DC,
	10556: 0x65A7,
	10557: 0x812F,
	10558: 0x8151,
	10559: 0x5E9C,
	10560: 0x8150,
	10561: 0x8D74,
	10562: 0x526F,
	10563: 0x8986,
	10564: 0x8D4B,
	10565: 0x590D,
	10566: 0x5085,
	10567: 0x4ED8,
	10568: 0x961C,
	10569: 0x7236,
	10570: 0x8179,
	10571: 0x8D1F,
	10572: 0x5BCC,
	10573: 0x8BA3,
	10574: 0x9644,
	10575: 0x5987,
	10576: 0x7F1A,
	10577: 0x5490,
	10578: 0x5676,
	10579: 0x560E,
	10580: 0x8BE5,
	10581: 0x6539,
	10582: 0x6982,
	10583: 0x9499,
	10584: 0x76D6,
	10585: 0x6E89,
	10586: 0x5E72,
	10587: 0x7518,
	10588: 0x6746,
	10589: 0x67D1,
	10590: 0x7AFF,
	10591: 0x809D,
	10592: 0x8D76,
	10593: 0x611F,
	10594: 0x79C6,
	10595: 0x6562,
	10596: 0x8D63,
	10597: 0x5188,
	10598: 0x521A,
	10599: 0x94A2,
	10600: 0x7F38,
	10601: 0x809B,
	10602: 0x7EB2,
	10603: 0x5C97,
	10604: 0x6E2F,
	10605: 0x6760,
	10606: 0x7BD9,
	10607: 0x768B,
	10608: 0x9AD8,
	10609: 0x818F,
	10610: 0x7F94,
	10611: 0x7CD5,
	10612: 0x641E,
	10613: 0x9550,
	10614: 0x7A3F,
	10615: 0x544A,
	10616: 0x54E5,
	10617: 0x6B4C,
	10618: 0x6401,
	10619: 0x6208,
	10620: 0x9E3D,
	10621: 0x80F3,
	10622: 0x7599,
	10623: 0x5272,
	10624: 0x9769,
	10625: 0x845B,
	10626: 0x683C,
	10627: 0x86E4,
	10628: 0x9601,
	10629: 0x9694,
	10630: 0x94EC,
	10631: 0x4E2A,
	10632: 0x5404,
	10633: 0x7ED9,
	10634: 0x6839,
	10635: 0x8DDF,
	10636: 0x8015,
	10637: 0x66F4,
	10638: 0x5E9A,
	10639: 0x7FB9,
	10640: 0x7B2F,
	10641: 0x7B30,
	10642: 0x7B32,
	10643: 0x7B34,
	10644: 0x7B35,
	10645: 0x7B36,
	10646: 0x7B37,
	10647: 0x7B39,
	10648: 0x7B3B,
	10649: 0x7B3D,
	10650: 0x7B3F,
	10651: 0x7B40,
	10652: 0x7B41,
	10653: 0x7B42,
	10654: 0x7B43,
	10655: 0x7B44,
	10656: 0x7B46,
	10657: 0x7B48,
	10658: 0x7B4A,
	10659: 0x7B4D,
	10660: 0x7B4E,
	10661: 0x7B53,
	10662: 0x7B55,
	10663: 0x7B57,
	10664: 0x7B59,
	10665: 0x7B5C,
	10666: 0x7B5E,
	10667: 0x7B5F,
	10668: 0x7B61,
	10669: 0x7B63,
	10670: 0x7B64,
	10671: 0x7B65,
	10672: 0x7B66,
	10673: 0x7B67,
	10674: 0x7B68,
	10675: 0x7B69,
	10676: 0x7B6A,
	10677: 0x7B6B,
	10678: 0x7B6C,
	10679: 0x7B6D,
	10680: 0x7B6F,
	10681: 0x7B70,
	10682: 0x7B73,
	10683: 0x7B74,
	10684: 0x7B76,
	10685: 0x7B78,
	10686: 0x7B7A,
	10687: 0x7B7C,
	10688: 0x7B7D,
	10689: 0x7B7F,
	10690: 0x7B81,
	10691: 0x7B82,
	10692: 0x7B83,
	10693: 0x7B84,
	10694: 0x7B86,
	10695: 0x7B87,
	10696: 0x7B88,
	10697: 0x7B89,
	10698: 0x7B8A,
	10699: 0x7B8B,
	10700: 0x7B8C,
	10701: 0x7B8E,
	10702: 0x7B8F,
	10703: 0x7B91,
	10704: 0x7B92,
	10705: 0x7B93,
	10706: 0x7B96,
	10707: 0x7B98,
	10708: 0x7B99,
	10709: 0x7B9A,
	10710: 0x7B9B,
	10711: 0x7B9E,
	10712: 0x7B9F,
	10713: 0x7BA0,
	10714: 0x7BA3,
	10715: 0x7BA4,
	10716: 0x7BA5,
	10717: 0x7BAE,
	10718: 0x7BAF,
	10719: 0x7BB0,
	10720: 0x7BB2,
	10721: 0x7BB3,
	10722: 0x7BB5,
	10723: 0x7BB6,
	10724: 0x7BB7,
	10725: 0x7BB9,
	10726: 0x7BBA,
	10727: 0x7BBB,
	10728: 0x7BBC,
	10729: 0x7BBD,
	10730: 0x7BBE,
	10731: 0x7BBF,
	10732: 0x7BC0,
	10733: 0x7BC2,
	10734: 0x7BC3,
	10735: 0x7BC4,
	10736: 0x57C2,
	10737: 0x803F,
	10738: 0x6897,
	10739: 0x5DE5,
	10740: 0x653B,
	10741: 0x529F,
	10742: 0x606D,
	10743: 0x9F9A,
	10744: 0x4F9B,
	10745: 0x8EAC,
	10746: 0x516C,
	10747: 0x5BAB,
	10748: 0x5F13,
	10749: 0x5DE9,
	10750: 0x6C5E,
	10751: 0x62F1,
	10752: 0x8D21,
	10753: 0x5171,
	10754: 0x94A9,
	10755: 0x52FE,
	10756: 0x6C9F,
	10757: 0x82DF,
	10758: 0x72D7,
	10759: 0x57A2,
	10760: 0x6784,
	10761: 0x8D2D,
	10762: 0x591F,
	10763: 0x8F9C,
	10764: 0x83C7,
	10765: 0x5495,
	10766: 0x7B8D,
	10767: 0x4F30,
	10768: 0x6CBD,
	10769: 0x5B64,
	10770: 0x59D1,
	10771: 0x9F13,
	10772: 0x53E4,
	10773: 0x86CA,
	10774: 0x9AA8,
	10775: 0x8C37,
	10776: 0x80A1,
	10777: 0x6545,
	10778: 0x987E,
	10779: 0x56FA,
	10780: 0x96C7,
	10781: 0x522E,
	10782: 0x74DC,
	10783: 0x5250,
	10784: 0x5BE1,
	10785: 0x6302,
	10786: 0x8902,
	10787: 0x4E56,
	10788: 0x62D0,
	10789: 0x602A,
	10790: 0x68FA,
	10791: 0x5173,
	10792: 0x5B98,
	10793: 0x51A0,
	10794: 0x89C2,
	10795: 0x7BA1,
	10796: 0x9986,
	10797: 0x7F50,
	10798: 0x60EF,
	10799: 0x704C,
	10800: 0x8D2F,
	10801: 0x5149,
	10802: 0x5E7F,
	10803: 0x901B,
	10804: 0x7470,
	10805: 0x89C4,
	10806: 0x572D,
	10807: 0x7845,
	10808: 0x5F52,
	10809: 0x9F9F,
	10810: 0x95FA,
	10811: 0x8F68,
	10812: 0x9B3C,
	10813: 0x8BE1,
	10814: 0x7678,
	10815: 0x6842,
	10816: 0x67DC,
	10817: 0x8DEA,
	10818: 0x8D35,
	10819: 0x523D,
	10820: 0x8F8A,
	10821: 0x6EDA,
	10822: 0x68CD,
	10823: 0x9505,
	10824: 0x90ED,
	10825: 0x56FD,
	10826: 0x679C,
	10827: 0x88F9,
	10828: 0x8FC7,
	10829: 0x54C8,
	10830: 0x7BC5,
	10831: 0x7BC8,
	10832: 0x7BC9,
	10833: 0x7BCA,
	10834: 0x7BCB,
	10835: 0x7BCD,
	10836: 0x7BCE,
	10837: 0x7BCF,
	10838: 0x7BD0,
	10839: 0x7BD2,
	10840: 0x7BD4,
	10841: 0x7BD5,
	10842: 0x7BD6,
	10843: 0x7BD7,
	10844: 0x7BD8,
	10845: 0x7BDB,
	10846: 0x7BDC,
	10847: 0x7BDE,
	10848: 0x7BDF,
	10849: 0x7BE0,
	10850: 0x7BE2,
	10851: 0x7BE3,
	10852: 0x7BE4,
	10853: 0x7BE7,
	10854: 0x7BE8,
	10855: 0x7BE9,
	10856: 0x7BEB,
	10857: 0x7BEC,
	10858: 0x7BED,
	10859: 0x7BEF,
	10860: 0x7BF0,
	10861: 0x7BF2,
	10862: 0x7BF3,
	10863: 0x7BF4,
	10864: 0x7BF5,
	10865: 0x7BF6,
	10866: 0x7BF8,
	10867: 0x7BF9,
	10868: 0x7BFA,
	10869: 0x7BFB,
	10870: 0x7BFD,
	10871: 0x7BFF,
	10872: 0x7C00,
	10873: 0x7C01,
	10874: 0x7C02,
	10875: 0x7C03,
	10876: 0x7C04,
	10877: 0x7C05,
	10878: 0x7C06,
	10879: 0x7C08,
	10880: 0x7C09,
	10881: 0x7C0A,
	10882: 0x7C0D,
	10883: 0x7C0E,
	10884: 0x7C10,
	10885: 0x7C11,
	10886: 0x7C12,
	10887: 0x7C13,
	10888: 0x7C14,
	10889: 0x7C15,
	10890: 0x7C17,
	10891: 0x7C18,
	10892: 0x7C19,
	10893: 0x7C1A,
	10894: 0x7C1B,
	10895: 0x7C1C,
	10896: 0x7C1D,
	10897: 0x7C1E,
	10898: 0x7C20,
	10899: 0x7C21,
	10900: 0x7C22,
	10901: 0x7C23,
	10902: 0x7C24,
	10903: 0x7C25,
	10904: 0x7C28,
	10905: 0x7C29,
	10906: 0x7C2B,
	10907: 0x7C2C,
	10908: 0x7C2D,
	10909: 0x7C2E,
	10910: 0x7C2F,
	10911: 0x7C30,
	10912: 0x7C31,
	10913: 0x7C32,
	10914: 0x7C33,
	10915: 0x7C34,
	10916: 0x7C35,
	10917: 0x7C36,
	10918: 0x7C37,
	10919: 0x7C39,
	10920: 0x7C3A,
	10921: 0x7C3B,
	10922: 0x7C3C,
	10923: 0x7C3D,
	10924: 0x7C3E,
	10925: 0x7C42,
	10926: 0x9AB8,
	10927: 0x5B69,
	10928: 0x6D77,
	10929: 0x6C26,
	10930: 0x4EA5,
	10931: 0x5BB3,
	10932: 0x9A87,
	10933: 0x9163,
	10934: 0x61A8,
	10935: 0x90AF,
	10936: 0x97E9,
	10937: 0x542B,
	10938: 0x6DB5,
	10939: 0x5BD2,
	10940: 0x51FD,
	10941: 0x558A,
	10942: 0x7F55,
	10943: 0x7FF0,
	10944: 0x64BC,
	10945: 0x634D,
	10946: 0x65F1,
	10947: 0x61BE,
	10948: 0x608D,
	10949: 0x710A,
	10950: 0x6C57,
	10951: 0x6C49,
	10952: 0x592F,
	10953: 0x676D,
	10954: 0x822A,
	10955: 0x58D5,
	10956: 0x568E,
	10957: 0x8C6A,
	10958: 0x6BEB,
	10959: 0x90DD,
	10960: 0x597D,
	10961: 0x8017,
	10962: 0x53F7,
	10963: 0x6D69,
	10964: 0x5475,
	10965: 0x559D,
	10966: 0x8377,
	10967: 0x83CF,
	10968: 0x6838,
	10969: 0x79BE,
	10970: 0x548C,
	10971: 0x4F55,
	10972: 0x5408,
	10973: 0x76D2,
	10974: 0x8C89,
	10975: 0x9602,
	10976: 0x6CB3,
	10977: 0x6DB8,
	10978: 0x8D6B,
	10979: 0x8910,
	10980: 0x9E64,
	10981: 0x8D3A,
	10982: 0x563F,
	10983: 0x9ED1,
	10984: 0x75D5,
	10985: 0x5F88,
	10986: 0x72E0,
	10987: 0x6068,
	10988: 0x54FC,
	10989: 0x4EA8,
	10990: 0x6A2A,
	10991: 0x8861,
	10992: 0x6052,
	10993: 0x8F70,
	10994: 0x54C4,
	10995: 0x70D8,
	10996: 0x8679,
	10997: 0x9E3F,
	10998: 0x6D2A,
	10999: 0x5B8F,
	11000: 0x5F18,
	11001: 0x7EA2,
	11002: 0x5589,
	11003: 0x4FAF,
	11004: 0x7334,
	11005: 0x543C,
	11006: 0x539A,
	11007: 0x5019,
	11008: 0x540E,
	11009: 0x547C,
	11010: 0x4E4E,
	11011: 0x5FFD,
	11012: 0x745A,
	11013: 0x58F6,
	11014: 0x846B,
	11015: 0x80E1,
	11016: 0x8774,
	11017: 0x72D0,
	11018: 0x7CCA,
	11019: 0x6E56,
	11020: 0x7C43,
	11021: 0x7C44,
	11022: 0x7C45,
	11023: 0x7C46,
	11024: 0x7C47,
	11025: 0x7C48,
	11026: 0x7C49,
	11027: 0x7C4A,
	11028: 0x7C4B,
	11029: 0x7C4C,
	11030: 0x7C4E,
	11031: 0x7C4F,
	11032: 0x7C50,
	11033: 0x7C51,
	11034: 0x7C52,
	11035: 0x7C53,
	11036: 0x7C54,
	11037: 0x7C55,
	11038: 0x7C56,
	11039: 0x7C57,
	11040: 0x7C58,
	11041: 0x7C59,
	11042: 0x7C5A,
	11043: 0x7C5B,
	11044: 0x7C5C,
	11045: 0x7C5D,
	11046: 0x7C5E,
	11047: 0x7C5F,
	11048: 0x7C60,
	11049: 0x7C61,
	11050: 0x7C62,
	11051: 0x7C63,
	11052: 0x7C64,
	11053: 0x7C65,
	11054: 0x7C66,
	11055: 0x7C67,
	11056: 0x7C68,
	11057: 0x7C69,
	11058: 0x7C6A,
	11059: 0x7C6B,
	11060: 0x7C6C,
	11061: 0x7C6D,
	11062: 0x7C6E,
	11063: 0x7C6F,
	11064: 0x7C70,
	11065: 0x7C71,
	11066: 0x7C72,
	11067: 0x7C75,
	11068: 0x7C76,
	11069: 0x7C77,
	11070: 0x7C78,
	11071: 0x7C79,
	11072: 0x7C7A,
	11073: 0x7C7E,
	11074: 0x7C7F,
	11075: 0x7C80,
	11076: 0x7C81,
	11077: 0x7C82,
	11078: 0x7C83,
	11079: 0x7C84,
	11080: 0x7C85,
	11081: 0x7C86,
	11082: 0x7C87,
	11083: 0x7C88,
	11084: 0x7C8A,
	11085: 0x7C8B,
	11086: 0x7C8C,
	11087: 0x7C8D,
	11088: 0x7C8E,
	11089: 0x7C8F,
	11090: 0x7C90,
	11091: 0x7C93,
	11092: 0x7C94,
	11093: 0x7C96,
	11094: 0x7C99,
	11095: 0x7C9A,
	11096: 0x7C9B,
	11097: 0x7CA0,
	11098: 0x7CA1,
	11099: 0x7CA3,
	11100: 0x7CA6,
	11101: 0x7CA7,
	11102: 0x7CA8,
	11103: 0x7CA9,
	11104: 0x7CAB,
	11105: 0x7CAC,
	11106: 0x7CAD,
	11107: 0x7CAF,
	11108: 0x7CB0,
	11109: 0x7CB4,
	11110: 0x7CB5,
	11111: 0x7CB6,
	11112: 0x7CB7,
	11113: 0x7CB8,
	11114: 0x7CBA,
	11115: 0x7CBB,
	11116: 0x5F27,
	11117: 0x864E,
	11118: 0x552C,
	11119: 0x62A4,
	11120: 0x4E92,
	11121: 0x6CAA,
	11122: 0x6237,
	11123: 0x82B1,
	11124: 0x54D7,
	11125: 0x534E,
	11126: 0x733E,
	11127: 0x6ED1,
	11128: 0x753B,
	11129: 0x5212,
	11130: 0x5316,
	11131: 0x8BDD,
	11132: 0x69D0,
	11133: 0x5F8A,
	11134: 0x6000,
	11135: 0x6DEE,
	11136: 0x574F,
	11137: 0x6B22,
	11138: 0x73AF,
	11139: 0x6853,
	11140: 0x8FD8,
	11141: 0x7F13,
	11142: 0x6362,
	11143: 0x60A3,
	11144: 0x5524,
	11145: 0x75EA,
	11146: 0x8C62,
	11147: 0x7115,
	11148: 0x6DA3,
	11149: 0x5BA6,
	11150: 0x5E7B,
	11151: 0x8352,
	11152: 0x614C,
	11153: 0x9EC4,
	11154: 0x78FA,
	11155: 0x8757,
	11156: 0x7C27,
	11157: 0x7687,
	11158: 0x51F0,
	11159: 0x60F6,
	11160: 0x714C,
	11161: 0x6643,
	11162: 0x5E4C,
	11163: 0x604D,
	11164: 0x8C0E,
	11165: 0x7070,
	11166: 0x6325,
	11167: 0x8F89,
	11168: 0x5FBD,
	11169: 0x6062,
	11170: 0x86D4,
	11171: 0x56DE,
	11172: 0x6BC1,
	11173: 0x6094,
	11174: 0x6167,
	11175: 0x5349,
	11176: 0x60E0,
	11177: 0x6666,
	11178: 0x8D3F,
	11179: 0x79FD,
	11180: 0x4F1A,
	11181: 0x70E9,
	11182: 0x6C47,
	11183: 0x8BB3,
	11184: 0x8BF2,
	11185: 0x7ED8,
	11186: 0x8364,
	11187: 0x660F,
	11188: 0x5A5A,
	11189: 0x9B42,
	11190: 0x6D51,
	11191: 0x6DF7,
	11192: 0x8C41,
	11193: 0x6D3B,
	11194: 0x4F19,
	11195: 0x706B,
	11196: 0x83B7,
	11197: 0x6216,
	11198: 0x60D1,
	11199: 0x970D,
	11200: 0x8D27,
	11201: 0x7978,
	11202: 0x51FB,
	11203: 0x573E,
	11204: 0x57FA,
	11205: 0x673A,
	11206: 0x7578,
	11207: 0x7A3D,
	11208: 0x79EF,
	11209: 0x7B95,
	11210: 0x7CBF,
	11211: 0x7CC0,
	11212: 0x7CC2,
	11213: 0x7CC3,
	11214: 0x7CC4,
	11215: 0x7CC6,
	11216: 0x7CC9,
	11217: 0x7CCB,
	11218: 0x7CCE,
	11219: 0x7CCF,
	11220: 0x7CD0,
	11221: 0x7CD1,
	11222: 0x7CD2,
	11223: 0x7CD3,
	11224: 0x7CD4,
	11225: 0x7CD8,
	11226: 0x7CDA,
	11227: 0x7CDB,
	11228: 0x7CDD,
	11229: 0x7CDE,
	11230: 0x7CE1,
	11231: 0x7CE2,
	11232: 0x7CE3,
	11233: 0x7CE4,
	11234: 0x7CE5,
	11235: 0x7CE6,
	11236: 0x7CE7,
	11237: 0x7CE9,
	11238: 0x7CEA,
	11239: 0x7CEB,
	11240: 0x7CEC,
	11241: 0x7CED,
	11242: 0x7CEE,
	11243: 0x7CF0,
	11244: 0x7CF1,
	11245: 0x7CF2,
	11246: 0x7CF3,
	11247: 0x7CF4,
	11248: 0x7CF5,
	11249: 0x7CF6,
	11250: 0x7CF7,
	11251: 0x7CF9,
	11252: 0x7CFA,
	11253: 0x7CFC,
	11254: 0x7CFD,
	11255: 0x7CFE,
	11256: 0x7CFF,
	11257: 0x7D00,
	11258: 0x7D01,
	11259: 0x7D02,
	11260: 0x7D03,
	11261: 0x7D04,
	11262: 0x7D05,
	11263: 0x7D06,
	11264: 0x7D07,
	11265: 0x7D08,
	11266: 0x7D09,
	11267: 0x7D0B,
	11268: 0x7D0C,
	11269: 0x7D0D,
	11270: 0x7D0E,
	11271: 0x7D0F,
	11272: 0x7D10,
	11273: 0x7D11,
	11274: 0x7D12,
	11275: 0x7D13,
	11276: 0x7D14,
	11277: 0x7D15,
	11278: 0x7D16,
	11279: 0x7D17,
	11280: 0x7D18,
	11281: 0x7D19,
	11282: 0x7D1A,
	11283: 0x7D1B,
	11284: 0x7D1C,
	11285: 0x7D1D,
	11286: 0x7D1E,
	11287: 0x7D1F,
	11288: 0x7D21,
	11289: 0x7D23,
	11290: 0x7D24,
	11291: 0x7D25,
	11292: 0x7D26,
	11293: 0x7D28,
	11294: 0x7D29,
	11295: 0x7D2A,
	11296: 0x7D2C,
	11297: 0x7D2D,
	11298: 0x7D2E,
	11299: 0x7D30,
	11300: 0x7D31,
	11301: 0x7D32,
	11302: 0x7D33,
	11303: 0x7D34,
	11304: 0x7D35,
	11305: 0x7D36,
	11306: 0x808C,
	11307: 0x9965,
	11308: 0x8FF9,
	11309: 0x6FC0,
	11310: 0x8BA5,
	11311: 0x9E21,
	11312: 0x59EC,
	11313: 0x7EE9,
	11314: 0x7F09,
	11315: 0x5409,
	11316: 0x6781,
	11317: 0x68D8,
	11318: 0x8F91,
	11319: 0x7C4D,
	11320: 0x96C6,
	11321: 0x53CA,
	11322: 0x6025,
	11323: 0x75BE,
	11324: 0x6C72,
	11325: 0x5373,
	11326: 0x5AC9,
	11327: 0x7EA7,
	11328: 0x6324,
	11329: 0x51E0,
	11330: 0x810A,
	11331: 0x5DF1,
	11332: 0x84DF,
	11333: 0x6280,
	11334: 0x5180,
	11335: 0x5B63,
	11336: 0x4F0E,
	11337: 0x796D,
	11338: 0x5242,
	11339: 0x60B8,
	11340: 0x6D4E,
	11341: 0x5BC4,
	11342: 0x5BC2,
	11343: 0x8BA1,
	11344: 0x8BB0,
	11345: 0x65E2,
	11346: 0x5FCC,
	11347: 0x9645,
	11348: 0x5993,
	11349: 0x7EE7,
	11350: 0x7EAA,
	11351: 0x5609,
	11352: 0x67B7,
	11353: 0x5939,
	11354: 0x4F73,
	11355: 0x5BB6,
	11356: 0x52A0,
	11357: 0x835A,
	11358: 0x988A,
	11359: 0x8D3E,
	11360: 0x7532,
	11361: 0x94BE,
	11362: 0x5047,
	11363: 0x7A3C,
	11364: 0x4EF7,
	11365: 0x67B6,
	11366: 0x9A7E,
	11367: 0x5AC1,
	11368: 0x6B7C,
	11369: 0x76D1,
	11370: 0x575A,
	11371: 0x5C16,
	11372: 0x7B3A,
	11373: 0x95F4,
	11374: 0x714E,
	11375: 0x517C,
	11376: 0x80A9,
	11377: 0x8270,
	11378: 0x5978,
	11379: 0x7F04,
	11380: 0x8327,
	11381: 0x68C0,
	11382: 0x67EC,
	11383: 0x78B1,
	11384: 0x7877,
	11385: 0x62E3,
	11386: 0x6361,
	11387: 0x7B80,
	11388: 0x4FED,
	11389: 0x526A,
	11390: 0x51CF,
	11391: 0x8350,
	11392: 0x69DB,
	11393: 0x9274,
	11394: 0x8DF5,
	11395: 0x8D31,
	11396: 0x89C1,
	11397: 0x952E,
	11398: 0x7BAD,
	11399: 0x4EF6,
	11400: 0x7D37,
	11401: 0x7D38,
	11402: 0x7D39,
	11403: 0x7D3A,
	11404: 0x7D3B,
	11405: 0x7D3C,
	11406: 0x7D3D,
	11407: 0x7D3E,
	11408: 0x7D3F,
	11409: 0x7D40,
	11410: 0x7D41,
	11411: 0x7D42,
	11412: 0x7D43,
	11413: 0x7D44,
	11414: 0x7D45,
	11415: 0x7D46,
	11416: 0x7D47,
	11417: 0x7D48,
	11418: 0x7D49,
	11419: 0x7D4A,
	11420: 0x7D4B,
	11421: 0x7D4C,
	11422: 0x7D4D,
	11423: 0x7D4E,
	11424: 0x7D4F,
	11425: 0x7D50,
	11426: 0x7D51,
	11427: 0x7D52,
	11428: 0x7D53,
	11429: 0x7D54,
	11430: 0x7D55,
	11431: 0x7D56,
	11432: 0x7D57,
	11433: 0x7D58,
	11434: 0x7D59,
	11435: 0x7D5A,
	11436: 0x7D5B,
	11437: 0x7D5C,
	11438: 0x7D5D,
	11439: 0x7D5E,
	11440: 0x7D5F,
	11441: 0x7D60,
	11442: 0x7D61,
	11443: 0x7D62,
	11444: 0x7D63,
	11445: 0x7D64,
	11446: 0x7D65,
	11447: 0x7D66,
	11448: 0x7D67,
	11449: 0x7D68,
	11450: 0x7D69,
	11451: 0x7D6A,
	11452: 0x7D6B,
	11453: 0x7D6C,
	11454: 0x7D6D,
	11455: 0x7D6F,
	11456: 0x7D70,
	11457: 0x7D71,
	11458: 0x7D72,
	11459: 0x7D73,
	11460: 0x7D74,
	11461: 0x7D75,
	11462: 0x7D76,
	11463: 0x7D78,
	11464: 0x7D79,
	11465: 0x7D7A,
	11466: 0x7D7B,
	11467: 0x7D7C,
	11468: 0x7D7D,
	11469: 0x7D7E,
	11470: 0x7D7F,
	11471: 0x7D80,
	11472: 0x7D81,
	11473: 0x7D82,
	11474: 0x7D83,
	11475: 0x7D84,
	11476: 0x7D85,
	11477: 0x7D86,
	11478: 0x7D87,
	11479: 0x7D88,
	11480: 0x7D89,
	11481: 0x7D8A,
	11482: 0x7D8B,
	11483: 0x7D8C,
	11484: 0x7D8D,
	11485: 0x7D8E,
	11486: 0x7D8F,
	11487: 0x7D90,
	11488: 0x7D91,
	11489: 0x7D92,
	11490: 0x7D93,
	11491: 0x7D94,
	11492: 0x7D95,
	11493: 0x7D96,
	11494: 0x7D97,
	11495: 0x7D98,
	11496: 0x5065,
	11497: 0x8230,
	11498: 0x5251,
	11499: 0x996F,
	11500: 0x6E10,
	11501: 0x6E85,
	11502: 0x6DA7,
	11503: 0x5EFA,
	11504: 0x50F5,
	11505: 0x59DC,
	11506: 0x5C06,
	11507: 0x6D46,
	11508: 0x6C5F,
	11509: 0x7586,
	11510: 0x848B,
	11511: 0x6868,
	11512: 0x5956,
	11513: 0x8BB2,
	11514: 0x5320,
	11515: 0x9171,
	11516: 0x964D,
	11517: 0x8549,
	11518: 0x6912,
	11519: 0x7901,
	11520: 0x7126,
	11521: 0x80F6,
	11522: 0x4EA4,
	11523: 0x90CA,
	11524: 0x6D47,
	11525: 0x9A84,
	11526: 0x5A07,
	11527: 0x56BC,
	11528: 0x6405,
	11529: 0x94F0,
	11530: 0x77EB,
	11531: 0x4FA5,
	11532: 0x811A,
	11533: 0x72E1,
	11534: 0x89D2,
	11535: 0x997A,
	11536: 0x7F34,
	11537: 0x7EDE,
	11538: 0x527F,
	11539: 0x6559,
	11540: 0x9175,
	11541: 0x8F7F,
	11542: 0x8F83,
	11543: 0x53EB,
	11544: 0x7A96,
	11545: 0x63ED,
	11546: 0x63A5,
	11547: 0x7686,
	11548: 0x79F8,
	11549: 0x8857,
	11550: 0x9636,
	11551: 0x622A,
	11552: 0x52AB,
	11553: 0x8282,
	11554: 0x6854,
	11555: 0x6770,
	11556: 0x6377,
	11557: 0x776B,
	11558: 0x7AED,
	11559: 0x6D01,
	11560: 0x7ED3,
	11561: 0x89E3,
	11562: 0x59D0,
	11563: 0x6212,
	11564: 0x85C9,
	11565: 0x82A5,
	11566: 0x754C,
	11567: 0x501F,
	11568: 0x4ECB,
	11569: 0x75A5,
	11570: 0x8BEB,
	11571: 0x5C4A,
	11572: 0x5DFE,
	11573: 0x7B4B,
	11574: 0x65A4,
	11575: 0x91D1,
	11576: 0x4ECA,
	11577: 0x6D25,
	11578: 0x895F,
	11579: 0x7D27,
	11580: 0x9526,
	11581: 0x4EC5,
	11582: 0x8C28,
	11583: 0x8FDB,
	11584: 0x9773,
	11585: 0x664B,
	11586: 0x7981,
	11587: 0x8FD1,
	11588: 0x70EC,
	11589: 0x6D78,
	11590: 0x7D99,
	11591: 0x7D9A,
	11592: 0x7D9B,
	11593: 0x7D9C,
	11594: 0x7D9D,
	11595: 0x7D9E,
	11596: 0x7D9F,
	11597: 0x7DA0,
	11598: 0x7DA1,
	11599: 0x7DA2,
	11600: 0x7DA3,
	11601: 0x7DA4,
	11602: 0x7DA5,
	11603: 0x7DA7,
	11604: 0x7DA8,
	11605: 0x7DA9,
	11606: 0x7DAA,
	11607: 0x7DAB,
	11608: 0x7DAC,
	11609: 0x7DAD,
	11610: 0x7DAF,
	11611: 0x7DB0,
	11612: 0x7DB1,
	11613: 0x7DB2,
	11614: 0x7DB3,
	11615: 0x7DB4,
	11616: 0x7DB5,
	11617: 0x7DB6,
	11618: 0x7DB7,
	11619: 0x7DB8,
	11620: 0x7DB9,
	11621: 0x7DBA,
	11622: 0x7DBB,
	11623: 0x7DBC,
	11624: 0x7DBD,
	11625: 0x7DBE,
	11626: 0x7DBF,
	11627: 0x7DC0,
	11628: 0x7DC1,
	11629: 0x7DC2,
	11630: 0x7DC3,
	11631: 0x7DC4,
	11632: 0x7DC5,
	11633: 0x7DC6,
	11634: 0x7DC7,
	11635: 0x7DC8,
	11636: 0x7DC9,
	11637: 0x7DCA,
	11638: 0x7DCB,
	11639: 0x7DCC,
	11640: 0x7DCD,
	11641: 0x7DCE,
	11642: 0x7DCF,
	11643: 0x7DD0,
	11644: 0x7DD1,
	11645: 0x7DD2,
	11646: 0x7DD3,
	11647: 0x7DD4,
	11648: 0x7DD5,
	11649: 0x7DD6,
	11650: 0x7DD7,
	11651: 0x7DD8,
	11652: 0x7DD9,
	11653: 0x7DDA,
	11654: 0x7DDB,
	11655: 0x7DDC,
	11656: 0x7DDD,
	11657: 0x7DDE,
	11658: 0x7DDF,
	11659: 0x7DE0,
	11660: 0x7DE1,
	11661: 0x7DE2,
	11662: 0x7DE3,
	11663: 0x7DE4,
	11664: 0x7DE5,
	11665: 0x7DE6,
	11666: 0x7DE7,
	11667: 0x7DE8,
	11668: 0x7DE9,
	11669: 0x7DEA,
	11670: 0x7DEB,
	11671: 0x7DEC,
	11672: 0x7DED,
	11673: 0x7DEE,
	11674: 0x7DEF,
	11675: 0x7DF0,
	11676: 0x7DF1,
	11677: 0x7DF2,
	11678: 0x7DF3,
	11679: 0x7DF4,
	11680: 0x7DF5,
	11681: 0x7DF6,
	11682: 0x7DF7,
	11683: 0x7DF8,
	11684: 0x7DF9,
	11685: 0x7DFA,
	11686: 0x5C3D,
	11687: 0x52B2,
	11688: 0x8346,
	11689: 0x5162,
	11690: 0x830E,
	11691: 0x775B,
	11692: 0x6676,
	11693: 0x9CB8,
	11694: 0x4EAC,
	11695: 0x60CA,
	11696: 0x7CBE,
	11697: 0x7CB3,
	11698: 0x7ECF,
	11699: 0x4E95,
	11700: 0x8B66,
	11701: 0x666F,
	11702: 0x9888,
	11703: 0x9759,
	11704: 0x5883,
	11705: 0x656C,
	11706: 0x955C,
	11707: 0x5F84,
	11708: 0x75C9,
	11709: 0x9756,
	11710: 0x7ADF,
	11711: 0x7ADE,
	11712: 0x51C0,
	11713: 0x70AF,
	11714: 0x7A98,
	11715: 0x63EA,
	11716: 0x7A76,
	11717: 0x7EA0,
	11718: 0x7396,
	11719: 0x97ED,
	11720: 0x4E45,
	11721: 0x7078,
	11722: 0x4E5D,
	11723: 0x9152,
	11724: 0x53A9,
	11725: 0x6551,
	11726: 0x65E7,
	11727: 0x81FC,
	11728: 0x8205,
	11729: 0x548E,
	11730: 0x5C31,
	11731: 0x759A,
	11732: 0x97A0,
	11733: 0x62D8,
	11734: 0x72D9,
	11735: 0x75BD,
	11736: 0x5C45,
	11737: 0x9A79,
	11738: 0x83CA,
	11739: 0x5C40,
	11740: 0x5480,
	11741: 0x77E9,
	11742: 0x4E3E,
	11743: 0x6CAE,
	11744: 0x805A,
	11745: 0x62D2,
	11746: 0x636E,
	11747: 0x5DE8,
	11748: 0x5177,
	11749: 0x8DDD,
	11750: 0x8E1E,
	11751: 0x952F,
	11752: 0x4FF1,
	11753: 0x53E5,
	11754: 0x60E7,
	11755: 0x70AC,
	11756: 0x5267,
	11757: 0x6350,
	11758: 0x9E43,
	11759: 0x5A1F,
	11760: 0x5026,
	11761: 0x7737,
	11762: 0x5377,
	11763: 0x7EE2,
	11764: 0x6485,
	11765: 0x652B,
	11766: 0x6289,
	11767: 0x6398,
	11768: 0x5014,
	11769: 0x7235,
	11770: 0x89C9,
	11771: 0x51B3,
	11772: 0x8BC0,
	11773: 0x7EDD,
	11774: 0x5747,
	11775: 0x83CC,
	11776: 0x94A7,
	11777: 0x519B,
	11778: 0x541B,
	11779: 0x5CFB,
	11780: 0x7DFB,
	11781: 0x7DFC,
	11782: 0x7DFD,
	11783: 0x7DFE,
	11784: 0x7DFF,
	11785: 0x7E00,
	11786: 0x7E01,
	11787: 0x7E02,
	11788: 0x7E03,
	11789: 0x7E04,
	11790: 0x7E05,
	11791: 0x7E06,
	11792: 0x7E07,
	11793: 0x7E08,
	11794: 0x7E09,
	11795: 0x7E0A,
	11796: 0x7E0B,
	11797: 0x7E0C,
	11798: 0x7E0D,
	11799: 0x7E0E,
	11800: 0x7E0F,
	11801: 0x7E10,
	11802: 0x7E11,
	11803: 0x7E12,
	11804: 0x7E13,
	11805: 0x7E14,
	11806: 0x7E15,
	11807: 0x7E16,
	11808: 0x7E17,
	11809: 0x7E18,
	11810: 0x7E19,
	11811: 0x7E1A,
	11812: 0x7E1B,
	11813: 0x7E1C,
	11814: 0x7E1D,
	11815: 0x7E1E,
	11816: 0x7E1F,
	11817: 0x7E20,
	11818: 0x7E21,
	11819: 0x7E22,
	11820: 0x7E23,
	11821: 0x7E24,
	11822: 0x7E25,
	11823: 0x7E26,
	11824: 0x7E27,
	11825: 0x7E28,
	11826: 0x7E29,
	11827: 0x7E2A,
	11828: 0x7E2B,
	11829: 0x7E2C,
	11830: 0x7E2D,
	11831: 0x7E2E,
	11832: 0x7E2F,
	11833: 0x7E30,
	11834: 0x7E31,
	11835: 0x7E32,
	11836: 0x7E33,
	11837: 0x7E34,
	11838: 0x7E35,
	11839: 0x7E36,
	11840: 0x7E37,
	11841: 0x7E38,
	11842: 0x7E39,
	11843: 0x7E3A,
	11844: 0x7E3C,
	11845: 0x7E3D,
	11846: 0x7E3E,
	11847: 0x7E3F,
	11848: 0x7E40,
	11849: 0x7E42,
	11850: 0x7E43,
	11851: 0x7E44,
	11852: 0x7E45,
	11853: 0x7E46,
	11854: 0x7E48,
	11855: 0x7E49,
	11856: 0x7E4A,
	11857: 0x7E4B,
	11858: 0x7E4C,
	11859: 0x7E4D,
	11860: 0x7E4E,
	11861: 0x7E4F,
	11862: 0x7E50,
	11863: 0x7E51,
	11864: 0x7E52,
	11865: 0x7E53,
	11866: 0x7E54,
	11867: 0x7E55,
	11868: 0x7E56,
	11869: 0x7E57,
	11870: 0x7E58,
	11871: 0x7E59,
	11872: 0x7E5A,
	11873: 0x7E5B,
	11874: 0x7E5C,
	11875: 0x7E5D,
	11876: 0x4FCA,
	11877: 0x7AE3,
	11878: 0x6D5A,
	11879: 0x90E1,
	11880: 0x9A8F,
	11881: 0x5580,
	11882: 0x5496,
	11883: 0x5361,
	11884: 0x54AF,
	11885: 0x5F00,
	11886: 0x63E9,
	11887: 0x6977,
	11888: 0x51EF,
	11889: 0x6168,
	11890: 0x520A,
	11891: 0x582A,
	11892: 0x52D8,
	11893: 0x574E,
	11894: 0x780D,
	11895: 0x770B,
	11896: 0x5EB7,
	11897: 0x6177,
	11898: 0x7CE0,
	11899: 0x625B,
	11900: 0x6297,
	11901: 0x4EA2,
	11902: 0x7095,
	11903: 0x8003,
	11904: 0x62F7,
	11905: 0x70E4,
	11906: 0x9760,
	11907: 0x5777,
	11908: 0x82DB,
	11909: 0x67EF,
	11910: 0x68F5,
	11911: 0x78D5,
	11912: 0x9897,
	11913: 0x79D1,
	11914: 0x58F3,
	11915: 0x54B3,
	11916: 0x53EF,
	11917: 0x6E34,
	11918: 0x514B,
	11919: 0x523B,
	11920: 0x5BA2,
	11921: 0x8BFE,
	11922: 0x80AF,
	11923: 0x5543,
	11924: 0x57A6,
	11925: 0x6073,
	11926: 0x5751,
	11927: 0x542D,
	11928: 0x7A7A,
	11929: 0x6050,
	11930: 0x5B54,
	11931: 0x63A7,
	11932: 0x62A0,
	11933: 0x53E3,
	11934: 0x6263,
	11935: 0x5BC7,
	11936: 0x67AF,
	11937: 0x54ED,
	11938: 0x7A9F,
	11939: 0x82E6,
	11940: 0x9177,
	11941: 0x5E93,
	11942: 0x88E4,
	11943: 0x5938,
	11944: 0x57AE,
	11945: 0x630E,
	11946: 0x8DE8,
	11947: 0x80EF,
	11948: 0x5757,
	11949: 0x7B77,
	11950: 0x4FA9,
	11951: 0x5FEB,
	11952: 0x5BBD,
	11953: 0x6B3E,
	11954: 0x5321,
	11955: 0x7B50,
	11956: 0x72C2,
	11957: 0x6846,
	11958: 0x77FF,
	11959: 0x7736,
	11960: 0x65F7,
	11961: 0x51B5,
	11962: 0x4E8F,
	11963: 0x76D4,
	11964: 0x5CBF,
	11965: 0x7AA5,
	11966: 0x8475,
	11967: 0x594E,
	11968: 0x9B41,
	11969: 0x5080,
	11970: 0x7E5E,
	11971: 0x7E5F,
	11972: 0x7E60,
	11973: 0x7E61,
	11974: 0x7E62,
	11975: 0x7E63,
	11976: 0x7E64,
	11977: 0x7E65,
	11978: 0x7E66,
	11979: 0x7E67,
	11980: 0x7E68,
	11981: 0x7E69,
	11982: 0x7E6A,
	11983: 0x7E6B,
	11984: 0x7E6C,
	11985: 0x7E6D,
	11986: 0x7E6E,
	11987: 0x7E6F,
	11988: 0x7E70,
	11989: 0x7E71,
	11990: 0x7E72,
	11991: 0x7E73,
	11992: 0x7E74,
	11993: 0x7E75,
	11994: 0x7E76,
	11995: 0x7E77,
	11996: 0x7E78,
	11997: 0x7E79,
	11998: 0x7E7A,
	11999: 0x7E7B,
	12000: 0x7E7C,
	12001: 0x7E7D,
	12002: 0x7E7E,
	12003: 0x7E7F,
	12004: 0x7E80,
	12005: 0x7E81,
	12006: 0x7E83,
	12007: 0x7E84,
	12008: 0x7E85,
	12009: 0x7E86,
	12010: 0x7E87,
	12011: 0x7E88,
	12012: 0x7E89,
	12013: 0x7E8A,
	12014: 0x7E8B,
	12015: 0x7E8C,
	12016: 0x7E8D,
	12017: 0x7E8E,
	12018: 0x7E8F,
	12019: 0x7E90,
	12020: 0x7E91,
	12021: 0x7E92,
	12022: 0x7E93,
	12023: 0x7E94,
	12024: 0x7E95,
	12025: 0x7E96,
	12026: 0x7E97,
	12027: 0x7E98,
	12028: 0x7E99,
	12029: 0x7E9A,
	12030: 0x7E9C,
	12031: 0x7E9D,
	12032: 0x7E9E,
	12033: 0x7EAE,
	12034: 0x7EB4,
	12035: 0x7EBB,
	12036: 0x7EBC,
	12037: 0x7ED6,
	12038: 0x7EE4,
	12039: 0x7EEC,
	12040: 0x7EF9,
	12041: 0x7F0A,
	12042: 0x7F10,
	12043: 0x7F1E,
	12044: 0x7F37,
	12045: 0x7F39,
	12046: 0x7F3B,
	12047: 0x7F3C,
	12048: 0x7F3D,
	12049: 0x7F3E,
	12050: 0x7F3F,
	12051: 0x7F40,
	12052: 0x7F41,
	12053: 0x7F43,
	12054: 0x7F46,
	12055: 0x7F47,
	12056: 0x7F48,
	12057: 0x7F49,
	12058: 0x7F4A,
	12059: 0x7F4B,
	12060: 0x7F4C,
	12061: 0x7F4D,
	12062: 0x7F4E,
	12063: 0x7F4F,
	12064: 0x7F52,
	12065: 0x7F53,
	12066: 0x9988,
	12067: 0x6127,
	12068: 0x6E83,
	12069: 0x5764,
	12070: 0x6606,
	12071: 0x6346,
	12072: 0x56F0,
	12073: 0x62EC,
	12074: 0x6269,
	12075: 0x5ED3,
	12076: 0x9614,
	12077: 0x5783,
	12078: 0x62C9,
	12079: 0x5587,
	12080: 0x8721,
	12081: 0x814A,
	12082: 0x8FA3,
	12083: 0x5566,
	12084: 0x83B1,
	12085: 0x6765,
	12086: 0x8D56,
	12087: 0x84DD,
	12088: 0x5A6A,
	12089: 0x680F,
	12090: 0x62E6,
	12091: 0x7BEE,
	12092: 0x9611,
	12093: 0x5170,
	12094: 0x6F9C,
	12095: 0x8C30,
	12096: 0x63FD,
	12097: 0x89C8,
	12098: 0x61D2,
	12099: 0x7F06,
	12100: 0x70C2,
	12101: 0x6EE5,
	12102: 0x7405,
	12103: 0x6994,
	12104: 0x72FC,
	12105: 0x5ECA,
	12106: 0x90CE,
	12107: 0x6717,
	12108: 0x6D6A,
	12109: 0x635E,
	12110: 0x52B3,
	12111: 0x7262,
	12112: 0x8001,
	12113: 0x4F6C,
	12114: 0x59E5,
	12115: 0x916A,
	12116: 0x70D9,
	12117: 0x6D9D,
	12118: 0x52D2,
	12119: 0x4E50,
	12120: 0x96F7,
	12121: 0x956D,
	12122: 0x857E,
	12123: 0x78CA,
	12124: 0x7D2F,
	12125: 0x5121,
	12126: 0x5792,
	12127: 0x64C2,
	12128: 0x808B,
	12129: 0x7C7B,
	12130: 0x6CEA,
	12131: 0x68F1,
	12132: 0x695E,
	12133: 0x51B7,
	12134: 0x5398,
	12135: 0x68A8,
	12136: 0x7281,
	12137: 0x9ECE,
	12138: 0x7BF1,
	12139: 0x72F8,
	12140: 0x79BB,
	12141: 0x6F13,
	12142: 0x7406,
	12143: 0x674E,
	12144: 0x91CC,
	12145: 0x9CA4,
	12146: 0x793C,
	12147: 0x8389,
	12148: 0x8354,
	12149: 0x540F,
	12150: 0x6817,
	12151: 0x4E3D,
	12152: 0x5389,
	12153: 0x52B1,
	12154: 0x783E,
	12155: 0x5386,
	12156: 0x5229,
	12157: 0x5088,
	12158: 0x4F8B,
	12159: 0x4FD0,
	12160: 0x7F56,
	12161: 0x7F59,
	12162: 0x7F5B,
	12163: 0x7F5C,
	12164: 0x7F5D,
	12165: 0x7F5E,
	12166: 0x7F60,
	12167: 0x7F63,
	12168: 0x7F64,
	12169: 0x7F65,
	12170: 0x7F66,
	12171: 0x7F67,
	12172: 0x7F6B,
	12173: 0x7F6C,
	12174: 0x7F6D,
	12175: 0x7F6F,
	12176: 0x7F70,
	12177: 0x7F73,
	12178: 0x7F75,
	12179: 0x7F76,
	12180: 0x7F77,
	12181: 0x7F78,
	12182: 0x7F7A,
	12183: 0x7F7B,
	12184: 0x7F7C,
	12185: 0x7F7D,
	12186: 0x7F7F,
	12187: 0x7F80,
	12188: 0x7F82,
	12189: 0x7F83,
	12190: 0x7F84,
	12191: 0x7F85,
	12192: 0x7F86,
	12193: 0x7F87,
	12194: 0x7F88,
	12195: 0x7F89,
	12196: 0x7F8B,
	12197: 0x7F8D,
	12198: 0x7F8F,
	12199: 0x7F90,
	12200: 0x7F91,
	12201: 0x7F92,
	12202: 0x7F93,
	12203: 0x7F95,
	12204: 0x7F96,
	12205: 0x7F97,
	12206: 0x7F98,
	12207: 0x7F99,
	12208: 0x7F9B,
	12209: 0x7F9C,
	12210: 0x7FA0,
	12211: 0x7FA2,
	12212: 0x7FA3,
	12213: 0x7FA5,
	12214: 0x7FA6,
	12215: 0x7FA8,
	12216: 0x7FA9,
	12217: 0x7FAA,
	12218: 0x7FAB,
	12219: 0x7FAC,
	12220: 0x7FAD,
	12221: 0x7FAE,
	12222: 0x7FB1,
	12223: 0x7FB3,
	12224: 0x7FB4,
	12225: 0x7FB5,
	12226: 0x7FB6,
	12227: 0x7FB7,
	12228: 0x7FBA,
	12229: 0x7FBB,
	12230: 0x7FBE,
	12231: 0x7FC0,
	12232: 0x7FC2,
	12233: 0x7FC3,
	12234: 0x7FC4,
	12235: 0x7FC6,
	12236: 0x7FC7,
	12237: 0x7FC8,
	12238: 0x7FC9,
	12239: 0x7FCB,
	12240: 0x7FCD,
	12241: 0x7FCF,
	12242: 0x7FD0,
	12243: 0x7FD1,
	12244: 0x7FD2,
	12245: 0x7FD3,
	12246: 0x7FD6,
	12247: 0x7FD7,
	12248: 0x7FD9,
	12249: 0x7FDA,
	12250: 0x7FDB,
	12251: 0x7FDC,
	12252: 0x7FDD,
	12253: 0x7FDE,
	12254: 0x7FE2,
	12255: 0x7FE3,
	12256: 0x75E2,
	12257: 0x7ACB,
	12258: 0x7C92,
	12259: 0x6CA5,
	12260: 0x96B6,
	12261: 0x529B,
	12262: 0x7483,
	12263: 0x54E9,
	12264: 0x4FE9,
	12265: 0x8054,
	12266: 0x83B2,
	12267: 0x8FDE,
	12268: 0x9570,
	12269: 0x5EC9,
	12270: 0x601C,
	12271: 0x6D9F,
	12272: 0x5E18,
	12273: 0x655B,
	12274: 0x8138,
	12275: 0x94FE,
	12276: 0x604B,
	12277: 0x70BC,
	12278: 0x7EC3,
	12279: 0x7CAE,
	12280: 0x51C9,
	12281: 0x6881,
	12282: 0x7CB1,
	12283: 0x826F,
	12284: 0x4E24,
	12285: 0x8F86,
	12286: 0x91CF,
	12287: 0x667E,
	12288: 0x4EAE,
	12289: 0x8C05,
	12290: 0x64A9,
	12291: 0x804A,
	12292: 0x50DA,
	12293: 0x7597,
	12294: 0x71CE,
	12295: 0x5BE5,
	12296: 0x8FBD,
	12297: 0x6F66,
	12298: 0x4E86,
	12299: 0x6482,
	12300: 0x9563,
	12301: 0x5ED6,
	12302: 0x6599,
	12303: 0x5217,
	12304: 0x88C2,
	12305: 0x70C8,
	12306: 0x52A3,
	12307: 0x730E,
	12308: 0x7433,
	12309: 0x6797,
	12310: 0x78F7,
	12311: 0x9716,
	12312: 0x4E34,
	12313: 0x90BB,
	12314: 0x9CDE,
	12315: 0x6DCB,
	12316: 0x51DB,
	12317: 0x8D41,
	12318: 0x541D,
	12319: 0x62CE,
	12320: 0x73B2,
	12321: 0x83F1,
	12322: 0x96F6,
	12323: 0x9F84,
	12324: 0x94C3,
	12325: 0x4F36,
	12326: 0x7F9A,
	12327: 0x51CC,
	12328: 0x7075,
	12329: 0x9675,
	12330: 0x5CAD,
	12331: 0x9886,
	12332: 0x53E6,
	12333: 0x4EE4,
	12334: 0x6E9C,
	12335: 0x7409,
	12336: 0x69B4,
	12337: 0x786B,
	12338: 0x998F,
	12339: 0x7559,
	12340: 0x5218,
	12341: 0x7624,
	12342: 0x6D41,
	12343: 0x67F3,
	12344: 0x516D,
	12345: 0x9F99,
	12346: 0x804B,
	12347: 0x5499,
	12348: 0x7B3C,
	12349: 0x7ABF,
	12350: 0x7FE4,
	12351: 0x7FE7,
	12352: 0x7FE8,
	12353: 0x7FEA,
	12354: 0x7FEB,
	12355: 0x7FEC,
	12356: 0x7FED,
	12357: 0x7FEF,
	12358: 0x7FF2,
	12359: 0x7FF4,
	12360: 0x7FF5,
	12361: 0x7FF6,
	12362: 0x7FF7,
	12363: 0x7FF8,
	12364: 0x7FF9,
	12365: 0x7FFA,
	12366: 0x7FFD,
	12367: 0x7FFE,
	12368: 0x7FFF,
	12369: 0x8002,
	12370: 0x8007,
	12371: 0x8008,
	12372: 0x8009,
	12373: 0x800A,
	12374: 0x800E,
	12375: 0x800F,
	12376: 0x8011,
	12377: 0x8013,
	12378: 0x801A,
	12379: 0x801B,
	12380: 0x801D,
	12381: 0x801E,
	12382: 0x801F,
	12383: 0x8021,
	12384: 0x8023,
	12385: 0x8024,
	12386: 0x802B,
	12387: 0x802C,
	12388: 0x802D,
	12389: 0x802E,
	12390: 0x802F,
	12391: 0x8030,
	12392: 0x8032,
	12393: 0x8034,
	12394: 0x8039,
	12395: 0x803A,
	12396: 0x803C,
	12397: 0x803E,
	12398: 0x8040,
	12399: 0x8041,
	12400: 0x8044,
	12401: 0x8045,
	12402: 0x8047,
	12403: 0x8048,
	12404: 0x8049,
	12405: 0x804E,
	12406: 0x804F,
	12407: 0x8050,
	12408: 0x8051,
	12409: 0x8053,
	12410: 0x8055,
	12411: 0x8056,
	12412: 0x8057,
	12413: 0x8059,
	12414: 0x805B,
	12415: 0x805C,
	12416: 0x805D,
	12417: 0x805E,
	12418: 0x805F,
	12419: 0x8060,
	12420: 0x8061,
	12421: 0x8062,
	12422: 0x8063,
	12423: 0x8064,
	12424: 0x8065,
	12425: 0x8066,
	12426: 0x8067,
	12427: 0x8068,
	12428: 0x806B,
	12429: 0x806C,
	12430: 0x806D,
	12431: 0x806E,
	12432: 0x806F,
	12433: 0x8070,
	12434: 0x8072,
	12435: 0x8073,
	12436: 0x8074,
	12437: 0x8075,
	12438: 0x8076,
	12439: 0x8077,
	12440: 0x8078,
	12441: 0x8079,
	12442: 0x807A,
	12443: 0x807B,
	12444: 0x807C,
	12445: 0x807D,
	12446: 0x9686,
	12447: 0x5784,
	12448: 0x62E2,
	12449: 0x9647,
	12450: 0x697C,
	12451: 0x5A04,
	12452: 0x6402,
	12453: 0x7BD3,
	12454: 0x6F0F,
	12455: 0x964B,
	12456: 0x82A6,
	12457: 0x5362,
	12458: 0x9885,
	12459: 0x5E90,
	12460: 0x7089,
	12461: 0x63B3,
	12462: 0x5364,
	12463: 0x864F,
	12464: 0x9C81,
	12465: 0x9E93,
	12466: 0x788C,
	12467: 0x9732,
	12468: 0x8DEF,
	12469: 0x8D42,
	12470: 0x9E7F,
	12471: 0x6F5E,
	12472: 0x7984,
	12473: 0x5F55,
	12474: 0x9646,
	12475: 0x622E,
	12476: 0x9A74,
	12477: 0x5415,
	12478: 0x94DD,
	12479: 0x4FA3,
	12480: 0x65C5,
	12481: 0x5C65,
	12482: 0x5C61,
	12483: 0x7F15,
	12484: 0x8651,
	12485: 0x6C2F,
	12486: 0x5F8B,
	12487: 0x7387,
	12488: 0x6EE4,
	12489: 0x7EFF,
	12490: 0x5CE6,
	12491: 0x631B,
	12492: 0x5B6A,
	12493: 0x6EE6,
	12494: 0x5375,
	12495: 0x4E71,
	12496: 0x63A0,
	12497: 0x7565,
	12498: 0x62A1,
	12499: 0x8F6E,
	12500: 0x4F26,
	12501: 0x4ED1,
	12502: 0x6CA6,
	12503: 0x7EB6,
	12504: 0x8BBA,
	12505: 0x841D,
	12506: 0x87BA,
	12507: 0x7F57,
	12508: 0x903B,
	12509: 0x9523,
	12510: 0x7BA9,
	12511: 0x9AA1,
	12512: 0x88F8,
	12513: 0x843D,
	12514: 0x6D1B,
	12515: 0x9A86,
	12516: 0x7EDC,
	12517: 0x5988,
	12518: 0x9EBB,
	12519: 0x739B,
	12520: 0x7801,
	12521: 0x8682,
	12522: 0x9A6C,
	12523: 0x9A82,
	12524: 0x561B,
	12525: 0x5417,
	12526: 0x57CB,
	12527: 0x4E70,
	12528: 0x9EA6,
	12529: 0x5356,
	12530: 0x8FC8,
	12531: 0x8109,
	12532: 0x7792,
	12533: 0x9992,
	12534: 0x86EE,
	12535: 0x6EE1,
	12536: 0x8513,
	12537: 0x66FC,
	12538: 0x6162,
	12539: 0x6F2B,
	12540: 0x807E,
	12541: 0x8081,
	12542: 0x8082,
	12543: 0x8085,
	12544: 0x8088,
	12545: 0x808A,
	12546: 0x808D,
	12547: 0x808E,
	12548: 0x808F,
	12549: 0x8090,
	12550: 0x8091,
	12551: 0x8092,
	12552: 0x8094,
	12553: 0x8095,
	12554: 0x8097,
	12555: 0x8099,
	12556: 0x809E,
	12557: 0x80A3,
	12558: 0x80A6,
	12559: 0x80A7,
	12560: 0x80A8,
	12561: 0x80AC,
	12562: 0x80B0,
	12563: 0x80B3,
	12564: 0x80B5,
	12565: 0x80B6,
	12566: 0x80B8,
	12567: 0x80B9,
	12568: 0x80BB,
	12569: 0x80C5,
	12570: 0x80C7,
	12571: 0x80C8,
	12572: 0x80C9,
	12573: 0x80CA,
	12574: 0x80CB,
	12575: 0x80CF,
	12576: 0x80D0,
	12577: 0x80D1,
	12578: 0x80D2,
	12579: 0x80D3,
	12580: 0x80D4,
	12581: 0x80D5,
	12582: 0x80D8,
	12583: 0x80DF,
	12584: 0x80E0,
	12585: 0x80E2,
	12586: 0x80E3,
	12587: 0x80E6,
	12588: 0x80EE,
	12589: 0x80F5,
	12590: 0x80F7,
	12591: 0x80F9,
	12592: 0x80FB,
	12593: 0x80FE,
	12594: 0x80FF,
	12595: 0x8100,
	12596: 0x8101,
	12597: 0x8103,
	12598: 0x8104,
	12599: 0x8105,
	12600: 0x8107,
	12601: 0x8108,
	12602: 0x810B,
	12603: 0x810C,
	12604: 0x8115,
	12605: 0x8117,
	12606: 0x8119,
	12607: 0x811B,
	12608: 0x811C,
	12609: 0x811D,
	12610: 0x811F,
	12611: 0x8120,
	12612: 0x8121,
	12613: 0x8122,
	12614: 0x8123,
	12615: 0x8124,
	12616: 0x8125,
	12617: 0x8126,
	12618: 0x8127,
	12619: 0x8128,
	12620: 0x8129,
	12621: 0x812A,
	12622: 0x812B,
	12623: 0x812D,
	12624: 0x812E,
	12625: 0x8130,
	12626: 0x8133,
	12627: 0x8134,
	12628: 0x8135,
	12629: 0x8137,
	12630: 0x8139,
	12631: 0x813A,
	12632: 0x813B,
	12633: 0x813C,
	12634: 0x813D,
	12635: 0x813F,
	12636: 0x8C29,
	12637: 0x8292,
	12638: 0x832B,
	12639: 0x76F2,
	12640: 0x6C13,
	12641: 0x5FD9,
	12642: 0x83BD,
	12643: 0x732B,
	12644: 0x8305,
	12645: 0x951A,
	12646: 0x6BDB,
	12647: 0x77DB,
	12648: 0x94C6,
	12649: 0x536F,
	12650: 0x8302,
	12651: 0x5192,
	12652: 0x5E3D,
	12653: 0x8C8C,
	12654: 0x8D38,
	12655: 0x4E48,
	12656: 0x73AB,
	12657: 0x679A,
	12658: 0x6885,
	12659: 0x9176,
	12660: 0x9709,
	12661: 0x7164,
	12662: 0x6CA1,
	12663: 0x7709,
	12664: 0x5A92,
	12665: 0x9541,
	12666: 0x6BCF,
	12667: 0x7F8E,
	12668: 0x6627,
	12669: 0x5BD0,
	12670: 0x59B9,
	12671: 0x5A9A,
	12672: 0x95E8,
	12673: 0x95F7,
	12674: 0x4EEC,
	12675: 0x840C,
	12676: 0x8499,
	12677: 0x6AAC,
	12678: 0x76DF,
	12679: 0x9530,
	12680: 0x731B,
	12681: 0x68A6,
	12682: 0x5B5F,
	12683: 0x772F,
	12684: 0x919A,
	12685: 0x9761,
	12686: 0x7CDC,
	12687: 0x8FF7,
	12688: 0x8C1C,
	12689: 0x5F25,
	12690: 0x7C73,
	12691: 0x79D8,
	12692: 0x89C5,
	12693: 0x6CCC,
	12694: 0x871C,
	12695: 0x5BC6,
	12696: 0x5E42,
	12697: 0x68C9,
	12698: 0x7720,
	12699: 0x7EF5,
	12700: 0x5195,
	12701: 0x514D,
	12702: 0x52C9,
	12703: 0x5A29,
	12704: 0x7F05,
	12705: 0x9762,
	12706: 0x82D7,
	12707: 0x63CF,
	12708: 0x7784,
	12709: 0x85D0,
	12710: 0x79D2,
	12711: 0x6E3A,
	12712: 0x5E99,
	12713: 0x5999,
	12714: 0x8511,
	12715: 0x706D,
	12716: 0x6C11,
	12717: 0x62BF,
	12718: 0x76BF,
	12719: 0x654F,
	12720: 0x60AF,
	12721: 0x95FD,
	12722: 0x660E,
	12723: 0x879F,
	12724: 0x9E23,
	12725: 0x94ED,
	12726: 0x540D,
	12727: 0x547D,
	12728: 0x8C2C,
	12729: 0x6478,
	12730: 0x8140,
	12731: 0x8141,
	12732: 0x8142,
	12733: 0x8143,
	12734: 0x8144,
	12735: 0x8145,
	12736: 0x8147,
	12737: 0x8149,
	12738: 0x814D,
	12739: 0x814E,
	12740: 0x814F,
	12741: 0x8152,
	12742: 0x8156,
	12743: 0x8157,
	12744: 0x8158,
	12745: 0x815B,
	12746: 0x815C,
	12747: 0x815D,
	12748: 0x815E,
	12749: 0x815F,
	12750: 0x8161,
	12751: 0x8162,
	12752: 0x8163,
	12753: 0x8164,
	12754: 0x8166,
	12755: 0x8168,
	12756: 0x816A,
	12757: 0x816B,
	12758: 0x816C,
	12759: 0x816F,
	12760: 0x8172,
	12761: 0x8173,
	12762: 0x8175,
	12763: 0x8176,
	12764: 0x8177,
	12765: 0x8178,
	12766: 0x8181,
	12767: 0x8183,
	12768: 0x8184,
	12769: 0x8185,
	12770: 0x8186,
	12771: 0x8187,
	12772: 0x8189,
	12773: 0x818B,
	12774: 0x818C,
	12775: 0x818D,
	12776: 0x818E,
	12777: 0x8190,
	12778: 0x8192,
	12779: 0x8193,
	12780: 0x8194,
	12781: 0x8195,
	12782: 0x8196,
	12783: 0x8197,
	12784: 0x8199,
	12785: 0x819A,
	12786: 0x819E,
	12787: 0x819F,
	12788: 0x81A0,
	12789: 0x81A1,
	12790: 0x81A2,
	12791: 0x81A4,
	12792: 0x81A5,
	12793: 0x81A7,
	12794: 0x81A9,
	12795: 0x81AB,
	12796: 0x81AC,
	12797: 0x81AD,
	12798: 0x81AE,
	12799: 0x81AF,
	12800: 0x81B0,
	12801: 0x81B1,
	12802: 0x81B2,
	12803: 0x81B4,
	12804: 0x81B5,
	12805: 0x81B6,
	12806: 0x81B7,
	12807: 0x81B8,
	12808: 0x81B9,
	12809: 0x81BC,
	12810: 0x81BD,
	12811: 0x81BE,
	12812: 0x81BF,
	12813: 0x81C4,
	12814: 0x81C5,
	12815: 0x81C7,
	12816: 0x81C8,
	12817: 0x81C9,
	12818: 0x81CB,
	12819: 0x81CD,
	12820: 0x81CE,
	12821: 0x81CF,
	12822: 0x81D0,
	12823: 0x81D1,
	12824: 0x81D2,
	12825: 0x81D3,
	12826: 0x6479,
	12827: 0x8611,
	12828: 0x6A21,
	12829: 0x819C,
	12830: 0x78E8,
	12831: 0x6469,
	12832: 0x9B54,
	12833: 0x62B9,
	12834: 0x672B,
	12835: 0x83AB,
	12836: 0x58A8,
	12837: 0x9ED8,
	12838: 0x6CAB,
	12839: 0x6F20,
	12840: 0x5BDE,
	12841: 0x964C,
	12842: 0x8C0B,
	12843: 0x725F,
	12844: 0x67D0,
	12845: 0x62C7,
	12846: 0x7261,
	12847: 0x4EA9,
	12848: 0x59C6,
	12849: 0x6BCD,
	12850: 0x5893,
	12851: 0x66AE,
	12852: 0x5E55,
	12853: 0x52DF,
	12854: 0x6155,
	12855: 0x6728,
	12856: 0x76EE,
	12857: 0x7766,
	12858: 0x7267,
	12859: 0x7A46,
	12860: 0x62FF,
	12861: 0x54EA,
	12862: 0x5450,
	12863: 0x94A0,
	12864: 0x90A3,
	12865: 0x5A1C,
	12866: 0x7EB3,
	12867: 0x6C16,
	12868: 0x4E43,
	12869: 0x5976,
	12870: 0x8010,
	12871: 0x5948,
	12872: 0x5357,
	12873: 0x7537,
	12874: 0x96BE,
	12875: 0x56CA,
	12876: 0x6320,
	12877: 0x8111,
	12878: 0x607C,
	12879: 0x95F9,
	12880: 0x6DD6,
	12881: 0x5462,
	12882: 0x9981,
	12883: 0x5185,
	12884: 0x5AE9,
	12885: 0x80FD,
	12886: 0x59AE,
	12887: 0x9713,
	12888: 0x502A,
	12889: 0x6CE5,
	12890: 0x5C3C,
	12891: 0x62DF,
	12892: 0x4F60,
	12893: 0x533F,
	12894: 0x817B,
	12895: 0x9006,
	12896: 0x6EBA,
	12897: 0x852B,
	12898: 0x62C8,
	12899: 0x5E74,
	12900: 0x78BE,
	12901: 0x64B5,
	12902: 0x637B,
	12903: 0x5FF5,
	12904: 0x5A18,
	12905: 0x917F,
	12906: 0x9E1F,
	12907: 0x5C3F,
	12908: 0x634F,
	12909: 0x8042,
	12910: 0x5B7D,
	12911: 0x556E,
	12912: 0x954A,
	12913: 0x954D,
	12914: 0x6D85,
	12915: 0x60A8,
	12916: 0x67E0,
	12917: 0x72DE,
	12918: 0x51DD,
	12919: 0x5B81,
	12920: 0x81D4,
	12921: 0x81D5,
	12922: 0x81D6,
	12923: 0x81D7,
	12924: 0x81D8,
	12925: 0x81D9,
	12926: 0x81DA,
	12927: 0x81DB,
	12928: 0x81DC,
	12929: 0x81DD,
	12930: 0x81DE,
	12931: 0x81DF,
	12932: 0x81E0,
	12933: 0x81E1,
	12934: 0x81E2,
	12935: 0x81E4,
	12936: 0x81E5,
	12937: 0x81E6,
	12938: 0x81E8,
	12939: 0x81E9,
	12940: 0x81EB,
	12941: 0x81EE,
	12942: 0x81EF,
	12943: 0x81F0,
	12944: 0x81F1,
	12945: 0x81F2,
	12946: 0x81F5,
	12947: 0x81F6,
	12948: 0x81F7,
	12949: 0x81F8,
	12950: 0x81F9,
	12951: 0x81FA,
	12952: 0x81FD,
	12953: 0x81FF,
	12954: 0x8203,
	12955: 0x8207,
	12956: 0x8208,
	12957: 0x8209,
	12958: 0x820A,
	12959: 0x820B,
	12960: 0x820E,
	12961: 0x820F,
	12962: 0x8211,
	12963: 0x8213,
	12964: 0x8215,
	12965: 0x8216,
	12966: 0x8217,
	12967: 0x8218,
	12968: 0x8219,
	12969: 0x821A,
	12970: 0x821D,
	12971: 0x8220,
	12972: 0x8224,
	12973: 0x8225,
	12974: 0x8226,
	12975: 0x8227,
	12976: 0x8229,
	12977: 0x822E,
	12978: 0x8232,
	12979: 0x823A,
	12980: 0x823C,
	12981: 0x823D,
	12982: 0x823F,
	12983: 0x8240,
	12984: 0x8241,
	12985: 0x8242,
	12986: 0x8243,
	12987: 0x8245,
	12988: 0x8246,
	12989: 0x8248,
	12990: 0x824A,
	12991: 0x824C,
	12992: 0x824D,
	12993: 0x824E,
	12994: 0x8250,
	12995: 0x8251,
	12996: 0x8252,
	12997: 0x8253,
	12998: 0x8254,
	12999: 0x8255,
	13000: 0x8256,
	13001: 0x8257,
	13002: 0x8259,
	13003: 0x825B,
	13004: 0x825C,
	13005: 0x825D,
	13006: 0x825E,
	13007: 0x8260,
	13008: 0x8261,
	13009: 0x8262,
	13010: 0x8263,
	13011: 0x8264,
	13012: 0x8265,
	13013: 0x8266,
	13014: 0x8267,
	13015: 0x8269,
	13016: 0x62E7,
	13017: 0x6CDE,
	13018: 0x725B,
	13019: 0x626D,
	13020: 0x94AE,
	13021: 0x7EBD,
	13022: 0x8113,
	13023: 0x6D53,
	13024: 0x519C,
	13025: 0x5F04,
	13026: 0x5974,
	13027: 0x52AA,
	13028: 0x6012,
	13029: 0x5973,
	13030: 0x6696,
	13031: 0x8650,
	13032: 0x759F,
	13033: 0x632A,
	13034: 0x61E6,
	13035: 0x7CEF,
	13036: 0x8BFA,
	13037: 0x54E6,
	13038: 0x6B27,
	13039: 0x9E25,
	13040: 0x6BB4,
	13041: 0x85D5,
	13042: 0x5455,
	13043: 0x5076,
	13044: 0x6CA4,
	13045: 0x556A,
	13046: 0x8DB4,
	13047: 0x722C,
	13048: 0x5E15,
	13049: 0x6015,
	13050: 0x7436,
	13051: 0x62CD,
	13052: 0x6392,
	13053: 0x724C,
	13054: 0x5F98,
	13055: 0x6E43,
	13056: 0x6D3E,
	13057: 0x6500,
	13058: 0x6F58,
	13059: 0x76D8,
	13060: 0x78D0,
	13061: 0x76FC,
	13062: 0x7554,
	13063: 0x5224,
	13064: 0x53DB,
	13065: 0x4E53,
	13066: 0x5E9E,
	13067: 0x65C1,
	13068: 0x802A,
	13069: 0x80D6,
	13070: 0x629B,
	13071: 0x5486,
	13072: 0x5228,
	13073: 0x70AE,
	13074: 0x888D,
	13075: 0x8DD1,
	13076: 0x6CE1,
	13077: 0x5478,
	13078: 0x80DA,
	13079: 0x57F9,
	13080: 0x88F4,
	13081: 0x8D54,
	13082: 0x966A,
	13083: 0x914D,
	13084: 0x4F69,
	13085: 0x6C9B,
	13086: 0x55B7,
	13087: 0x76C6,
	13088: 0x7830,
	13089: 0x62A8,
	13090: 0x70F9,
	13091: 0x6F8E,
	13092: 0x5F6D,
	13093: 0x84EC,
	13094: 0x68DA,
	13095: 0x787C,
	13096: 0x7BF7,
	13097: 0x81A8,
	13098: 0x670B,
	13099: 0x9E4F,
	13100: 0x6367,
	13101: 0x78B0,
	13102: 0x576F,
	13103: 0x7812,
	13104: 0x9739,
	13105: 0x6279,
	13106: 0x62AB,
	13107: 0x5288,
	13108: 0x7435,
	13109: 0x6BD7,
	13110: 0x826A,
	13111: 0x826B,
	13112: 0x826C,
	13113: 0x826D,
	13114: 0x8271,
	13115: 0x8275,
	13116: 0x8276,
	13117: 0x8277,
	13118: 0x8278,
	13119: 0x827B,
	13120: 0x827C,
	13121: 0x8280,
	13122: 0x8281,
	13123: 0x8283,
	13124: 0x8285,
	13125: 0x8286,
	13126: 0x8287,
	13127: 0x8289,
	13128: 0x828C,
	13129: 0x8290,
	13130: 0x8293,
	13131: 0x8294,
	13132: 0x8295,
	13133: 0x8296,
	13134: 0x829A,
	13135: 0x829B,
	13136: 0x829E,
	13137: 0x82A0,
	13138: 0x82A2,
	13139: 0x82A3,
	13140: 0x82A7,
	13141: 0x82B2,
	13142: 0x82B5,
	13143: 0x82B6,
	13144: 0x82BA,
	13145: 0x82BB,
	13146: 0x82BC,
	13147: 0x82BF,
	13148: 0x82C0,
	13149: 0x82C2,
	13150: 0x82C3,
	13151: 0x82C5,
	13152: 0x82C6,
	13153: 0x82C9,
	13154: 0x82D0,
	13155: 0x82D6,
	13156: 0x82D9,
	13157: 0x82DA,
	13158: 0x82DD,
	13159: 0x82E2,
	13160: 0x82E7,
	13161: 0x82E8,
	13162: 0x82E9,
	13163: 0x82EA,
	13164: 0x82EC,
	13165: 0x82ED,
	13166: 0x82EE,
	13167: 0x82F0,
	13168: 0x82F2,
	13169: 0x82F3,
	13170: 0x82F5,
	13171: 0x82F6,
	13172: 0x82F8,
	13173: 0x82FA,
	13174: 0x82FC,
	13175: 0x82FD,
	13176: 0x82FE,
	13177: 0x82FF,
	13178: 0x8300,
	13179: 0x830A,
	13180: 0x830B,
	13181: 0x830D,
	13182: 0x8310,
	13183: 0x8312,
	13184: 0x8313,
	13185: 0x8316,
	13186: 0x8318,
	13187: 0x8319,
	13188: 0x831D,
	13189: 0x831E,
	13190: 0x831F,
	13191: 0x8320,
	13192: 0x8321,
	13193: 0x8322,
	13194: 0x8323,
	13195: 0x8324,
	13196: 0x8325,
	13197: 0x8326,
	13198: 0x8329,
	13199: 0x832A,
	13200: 0x832E,
	13201: 0x8330,
	13202: 0x8332,
	13203: 0x8337,
	13204: 0x833B,
	13205: 0x833D,
	13206: 0x5564,
	13207: 0x813E,
	13208: 0x75B2,
	13209: 0x76AE,
	13210: 0x5339,
	13211: 0x75DE,
	13212: 0x50FB,
	13213: 0x5C41,
	13214: 0x8B6C,
	13215: 0x7BC7,
	13216: 0x504F,
	13217: 0x7247,
	13218: 0x9A97,
	13219: 0x98D8,
	13220: 0x6F02,
	13221: 0x74E2,
	13222: 0x7968,
	13223: 0x6487,
	13224: 0x77A5,
	13225: 0x62FC,
	13226: 0x9891,
	13227: 0x8D2B,
	13228: 0x54C1,
	13229: 0x8058,
	13230: 0x4E52,
	13231: 0x576A,
	13232: 0x82F9,
	13233: 0x840D,
	13234: 0x5E73,
	13235: 0x51ED,
	13236: 0x74F6,
	13237: 0x8BC4,
	13238: 0x5C4F,
	13239: 0x5761,
	13240: 0x6CFC,
	13241: 0x9887,
	13242: 0x5A46,
	13243: 0x7834,
	13244: 0x9B44,
	13245: 0x8FEB,
	13246: 0x7C95,
	13247: 0x5256,
	13248: 0x6251,
	13249: 0x94FA,
	13250: 0x4EC6,
	13251: 0x8386,
	13252: 0x8461,
	13253: 0x83E9,
	13254: 0x84B2,
	13255: 0x57D4,
	13256: 0x6734,
	13257: 0x5703,
	13258: 0x666E,
	13259: 0x6D66,
	13260: 0x8C31,
	13261: 0x66DD,
	13262: 0x7011,
	13263: 0x671F,
	13264: 0x6B3A,
	13265: 0x6816,
	13266: 0x621A,
	13267: 0x59BB,
	13268: 0x4E03,
	13269: 0x51C4,
	13270: 0x6F06,
	13271: 0x67D2,
	13272: 0x6C8F,
	13273: 0x5176,
	13274: 0x68CB,
	13275: 0x5947,
	13276: 0x6B67,
	13277: 0x7566,
	13278: 0x5D0E,
	13279: 0x8110,
	13280: 0x9F50,
	13281: 0x65D7,
	13282: 0x7948,
	13283: 0x7941,
	13284: 0x9A91,
	13285: 0x8D77,
	13286: 0x5C82,
	13287: 0x4E5E,
	13288: 0x4F01,
	13289: 0x542F,
	13290: 0x5951,
	13291: 0x780C,
	13292: 0x5668,
	13293: 0x6C14,
	13294: 0x8FC4,
	13295: 0x5F03,
	13296: 0x6C7D,
	13297: 0x6CE3,
	13298: 0x8BAB,
	13299: 0x6390,
	13300: 0x833E,
	13301: 0x833F,
	13302: 0x8341,
	13303: 0x8342,
	13304: 0x8344,
	13305: 0x8345,
	13306: 0x8348,
	13307: 0x834A,
	13308: 0x834B,
	13309: 0x834C,
	13310: 0x834D,
	13311: 0x834E,
	13312: 0x8353,
	13313: 0x8355,
	13314: 0x8356,
	13315: 0x8357,
	13316: 0x8358,
	13317: 0x8359,
	13318: 0x835D,
	13319: 0x8362,
	13320: 0x8370,
	13321: 0x8371,
	13322: 0x8372,
	13323: 0x8373,
	13324: 0x8374,
	13325: 0x8375,
	13326: 0x8376,
	13327: 0x8379,
	13328: 0x837A,
	13329: 0x837E,
	13330: 0x837F,
	13331: 0x8380,
	13332: 0x8381,
	13333: 0x8382,
	13334: 0x8383,
	13335: 0x8384,
	13336: 0x8387,
	13337: 0x8388,
	13338: 0x838A,
	13339: 0x838B,
	13340: 0x838C,
	13341: 0x838D,
	13342: 0x838F,
	13343: 0x8390,
	13344: 0x8391,
	13345: 0x8394,
	13346: 0x8395,
	13347: 0x8396,
	13348: 0x8397,
	13349: 0x8399,
	13350: 0x839A,
	13351: 0x839D,
	13352: 0x839F,
	13353: 0x83A1,
	13354: 0x83A2,
	13355: 0x83A3,
	13356: 0x83A4,
	13357: 0x83A5,
	13358: 0x83A6,
	13359: 0x83A7,
	13360: 0x83AC,
	13361: 0x83AD,
	13362: 0x83AE,
	13363: 0x83AF,
	13364: 0x83B5,
	13365: 0x83BB,
	13366: 0x83BE,
	13367: 0x83BF,
	13368: 0x83C2,
	13369: 0x83C3,
	13370: 0x83C4,
	13371: 0x83C6,
	13372: 0x83C8,
	13373: 0x83C9,
	13374: 0x83CB,
	13375: 0x83CD,
	13376: 0x83CE,
	13377: 0x83D0,
	13378: 0x83D1,
	13379: 0x83D2,
	13380: 0x83D3,
	13381: 0x83D5,
	13382: 0x83D7,
	13383: 0x83D9,
	13384: 0x83DA,
	13385: 0x83DB,
	13386: 0x83DE,
	13387: 0x83E2,
	13388: 0x83E3,
	13389: 0x83E4,
	13390: 0x83E6,
	13391: 0x83E7,
	13392: 0x83E8,
	13393: 0x83EB,
	13394: 0x83EC,
	13395: 0x83ED,
	13396: 0x6070,
	13397: 0x6D3D,
	13398: 0x7275,
	13399: 0x6266,
	13400: 0x948E,
	13401: 0x94C5,
	13402: 0x5343,
	13403: 0x8FC1,
	13404: 0x7B7E,
	13405: 0x4EDF,
	13406: 0x8C26,
	13407: 0x4E7E,
	13408: 0x9ED4,
	13409: 0x94B1,
	13410: 0x94B3,
	13411: 0x524D,
	13412: 0x6F5C,
	13413: 0x9063,
	13414: 0x6D45,
	13415: 0x8C34,
	13416: 0x5811,
	13417: 0x5D4C,
	13418: 0x6B20,
	13419: 0x6B49,
	13420: 0x67AA,
	13421: 0x545B,
	13422: 0x8154,
	13423: 0x7F8C,
	13424: 0x5899,
	13425: 0x8537,
	13426: 0x5F3A,
	13427: 0x62A2,
	13428: 0x6A47,
	13429: 0x9539,
	13430: 0x6572,
	13431: 0x6084,
	13432: 0x6865,
	13433: 0x77A7,
	13434: 0x4E54,
	13435: 0x4FA8,
	13436: 0x5DE7,
	13437: 0x9798,
	13438: 0x64AC,
	13439: 0x7FD8,
	13440: 0x5CED,
	13441: 0x4FCF,
	13442: 0x7A8D,
	13443: 0x5207,
	13444: 0x8304,
	13445: 0x4E14,
	13446: 0x602F,
	13447: 0x7A83,
	13448: 0x94A6,
	13449: 0x4FB5,
	13450: 0x4EB2,
	13451: 0x79E6,
	13452: 0x7434,
	13453: 0x52E4,
	13454: 0x82B9,
	13455: 0x64D2,
	13456: 0x79BD,
	13457: 0x5BDD,
	13458: 0x6C81,
	13459: 0x9752,
	13460: 0x8F7B,
	13461: 0x6C22,
	13462: 0x503E,
	13463: 0x537F,
	13464: 0x6E05,
	13465: 0x64CE,
	13466: 0x6674,
	13467: 0x6C30,
	13468: 0x60C5,
	13469: 0x9877,
	13470: 0x8BF7,
	13471: 0x5E86,
	13472: 0x743C,
	13473: 0x7A77,
	13474: 0x79CB,
	13475: 0x4E18,
	13476: 0x90B1,
	13477: 0x7403,
	13478: 0x6C42,
	13479: 0x56DA,
	13480: 0x914B,
	13481: 0x6CC5,
	13482: 0x8D8B,
	13483: 0x533A,
	13484: 0x86C6,
	13485: 0x66F2,
	13486: 0x8EAF,
	13487: 0x5C48,
	13488: 0x9A71,
	13489: 0x6E20,
	13490: 0x83EE,
	13491: 0x83EF,
	13492: 0x83F3,
	13493: 0x83F4,
	13494: 0x83F5,
	13495: 0x83F6,
	13496: 0x83F7,
	13497: 0x83FA,
	13498: 0x83FB,
	13499: 0x83FC,
	13500: 0x83FE,
	13501: 0x83FF,
	13502: 0x8400,
	13503: 0x8402,
	13504: 0x8405,
	13505: 0x8407,
	13506: 0x8408,
	13507: 0x8409,
	13508: 0x840A,
	13509: 0x8410,
	13510: 0x8412,
	13511: 0x8413,
	13512: 0x8414,
	13513: 0x8415,
	13514: 0x8416,
	13515: 0x8417,
	13516: 0x8419,
	13517: 0x841A,
	13518: 0x841B,
	13519: 0x841E,
	13520: 0x841F,
	13521: 0x8420,
	13522: 0x8421,
	13523: 0x8422,
	13524: 0x8423,
	13525: 0x8429,
	13526: 0x842A,
	13527: 0x842B,
	13528: 0x842C,
	13529: 0x842D,
	13530: 0x842E,
	13531: 0x842F,
	13532: 0x8430,
	13533: 0x8432,
	13534: 0x8433,
	13535: 0x8434,
	13536: 0x8435,
	13537: 0x8436,
	13538: 0x8437,
	13539: 0x8439,
	13540: 0x843A,
	13541: 0x843B,
	13542: 0x843E,
	13543: 0x843F,
	13544: 0x8440,
	13545: 0x8441,
	13546: 0x8442,
	13547: 0x8443,
	13548: 0x8444,
	13549: 0x8445,
	13550: 0x8447,
	13551: 0x8448,
	13552: 0x8449,
	13553: 0x844A,
	13554: 0x844B,
	13555: 0x844C,
	13556: 0x844D,
	13557: 0x844E,
	13558: 0x844F,
	13559: 0x8450,
	13560: 0x8452,
	13561: 0x8453,
	13562: 0x8454,
	13563: 0x8455,
	13564: 0x8456,
	13565: 0x8458,
	13566: 0x845D,
	13567: 0x845E,
	13568: 0x845F,
	13569: 0x8460,
	13570: 0x8462,
	13571: 0x8464,
	13572: 0x8465,
	13573: 0x8466,
	13574: 0x8467,
	13575: 0x8468,
	13576: 0x846A,
	13577: 0x846E,
	13578: 0x846F,
	13579: 0x8470,
	13580: 0x8472,
	13581: 0x8474,
	13582: 0x8477,
	13583: 0x8479,
	13584: 0x847B,
	13585: 0x847C,
	13586: 0x53D6,
	13587: 0x5A36,
	13588: 0x9F8B,
	13589: 0x8DA3,
	13590: 0x53BB,
	13591: 0x5708,
	13592: 0x98A7,
	13593: 0x6743,
	13594: 0x919B,
	13595: 0x6CC9,
	13596: 0x5168,
	13597: 0x75CA,
	13598: 0x62F3,
	13599: 0x72AC,
	13600: 0x5238,
	13601: 0x529D,
	13602: 0x7F3A,
	13603: 0x7094,
	13604: 0x7638,
	13605: 0x5374,
	13606: 0x9E4A,
	13607: 0x69B7,
	13608: 0x786E,
	13609: 0x96C0,
	13610: 0x88D9,
	13611: 0x7FA4,
	13612: 0x7136,
	13613: 0x71C3,
	13614: 0x5189,
	13615: 0x67D3,
	13616: 0x74E4,
	13617: 0x58E4,
	13618: 0x6518,
	13619: 0x56B7,
	13620: 0x8BA9,
	13621: 0x9976,
	13622: 0x6270,
	13623: 0x7ED5,
	13624: 0x60F9,
	13625: 0x70ED,
	13626: 0x58EC,
	13627: 0x4EC1,
	13628: 0x4EBA,
	13629: 0x5FCD,
	13630: 0x97E7,
	13631: 0x4EFB,
	13632: 0x8BA4,
	13633: 0x5203,
	13634: 0x598A,
	13635: 0x7EAB,
	13636: 0x6254,
	13637: 0x4ECD,
	13638: 0x65E5,
	13639: 0x620E,
	13640: 0x8338,
	13641: 0x84C9,
	13642: 0x8363,
	13643: 0x878D,
	13644: 0x7194,
	13645: 0x6EB6,
	13646: 0x5BB9,
	13647: 0x7ED2,
	13648: 0x5197,
	13649: 0x63C9,
	13650: 0x67D4,
	13651: 0x8089,
	13652: 0x8339,
	13653: 0x8815,
	13654: 0x5112,
	13655: 0x5B7A,
	13656: 0x5982,
	13657: 0x8FB1,
	13658: 0x4E73,
	13659: 0x6C5D,
	13660: 0x5165,
	13661: 0x8925,
	13662: 0x8F6F,
	13663: 0x962E,
	13664: 0x854A,
	13665: 0x745E,
	13666: 0x9510,
	13667: 0x95F0,
	13668: 0x6DA6,
	13669: 0x82E5,
	13670: 0x5F31,
	13671: 0x6492,
	13672: 0x6D12,
	13673: 0x8428,
	13674: 0x816E,
	13675: 0x9CC3,
	13676: 0x585E,
	13677: 0x8D5B,
	13678: 0x4E09,
	13679: 0x53C1,
	13680: 0x847D,
	13681: 0x847E,
	13682: 0x847F,
	13683: 0x8480,
	13684: 0x8481,
	13685: 0x8483,
	13686: 0x8484,
	13687: 0x8485,
	13688: 0x8486,
	13689: 0x848A,
	13690: 0x848D,
	13691: 0x848F,
	13692: 0x8490,
	13693: 0x8491,
	13694: 0x8492,
	13695: 0x8493,
	13696: 0x8494,
	13697: 0x8495,
	13698: 0x8496,
	13699: 0x8498,
	13700: 0x849A,
	13701: 0x849B,
	13702: 0x849D,
	13703: 0x849E,
	13704: 0x849F,
	13705: 0x84A0,
	13706: 0x84A2,
	13707: 0x84A3,
	13708: 0x84A4,
	13709: 0x84A5,
	13710: 0x84A6,
	13711: 0x84A7,
	13712: 0x84A8,
	13713: 0x84A9,
	13714: 0x84AA,
	13715: 0x84AB,
	13716: 0x84AC,
	13717: 0x84AD,
	13718: 0x84AE,
	13719: 0x84B0,
	13720: 0x84B1,
	13721: 0x84B3,
	13722: 0x84B5,
	13723: 0x84B6,
	13724: 0x84B7,
	13725: 0x84BB,
	13726: 0x84BC,
	13727: 0x84BE,
	13728: 0x84C0,
	13729: 0x84C2,
	13730: 0x84C3,
	13731: 0x84C5,
	13732: 0x84C6,
	13733: 0x84C7,
	13734: 0x84C8,
	13735: 0x84CB,
	13736: 0x84CC,
	13737: 0x84CE,
	13738: 0x84CF,
	13739: 0x84D2,
	13740: 0x84D4,
	13741: 0x84D5,
	13742: 0x84D7,
	13743: 0x84D8,
	13744: 0x84D9,
	13745: 0x84DA,
	13746: 0x84DB,
	13747: 0x84DC,
	13748: 0x84DE,
	13749: 0x84E1,
	13750: 0x84E2,
	13751: 0x84E4,
	13752: 0x84E7,
	13753: 0x84E8,
	13754: 0x84E9,
	13755: 0x84EA,
	13756: 0x84EB,
	13757: 0x84ED,
	13758: 0x84EE,
	13759: 0x84EF,
	13760: 0x84F1,
	13761: 0x84F2,
	13762: 0x84F3,
	13763: 0x84F4,
	13764: 0x84F5,
	13765: 0x84F6,
	13766: 0x84F7,
	13767: 0x84F8,
	13768: 0x84F9,
	13769: 0x84FA,
	13770: 0x84FB,
	13771: 0x84FD,
	13772: 0x84FE,
	13773: 0x8500,
	13774: 0x8501,
	13775: 0x8502,
	13776: 0x4F1E,
	13777: 0x6563,
	13778: 0x6851,
	13779: 0x55D3,
	13780: 0x4E27,
	13781: 0x6414,
	13782: 0x9A9A,
	13783: 0x626B,
	13784: 0x5AC2,
	13785: 0x745F,
	13786: 0x8272,
	13787: 0x6DA9,
	13788: 0x68EE,
	13789: 0x50E7,
	13790: 0x838E,
	13791: 0x7802,
	13792: 0x6740,
	13793: 0x5239,
	13794: 0x6C99,
	13795: 0x7EB1,
	13796: 0x50BB,
	13797: 0x5565,
	13798: 0x715E,
	13799: 0x7B5B,
	13800: 0x6652,
	13801: 0x73CA,
	13802: 0x82EB,
	13803: 0x6749,
	13804: 0x5C71,
	13805: 0x5220,
	13806: 0x717D,
	13807: 0x886B,
	13808: 0x95EA,
	13809: 0x9655,
	13810: 0x64C5,
	13811: 0x8D61,
	13812: 0x81B3,
	13813: 0x5584,
	13814: 0x6C55,
	13815: 0x6247,
	13816: 0x7F2E,
	13817: 0x5892,
	13818: 0x4F24,
	13819: 0x5546,
	13820: 0x8D4F,
	13821: 0x664C,
	13822: 0x4E0A,
	13823: 0x5C1A,
	13824: 0x88F3,
	13825: 0x68A2,
	13826: 0x634E,
	13827: 0x7A0D,
	13828: 0x70E7,
	13829: 0x828D,
	13830: 0x52FA,
	13831: 0x97F6,
	13832: 0x5C11,
	13833: 0x54E8,
	13834: 0x90B5,
	13835: 0x7ECD,
	13836: 0x5962,
	13837: 0x8D4A,
	13838: 0x86C7,
	13839: 0x820C,
	13840: 0x820D,
	13841: 0x8D66,
	13842: 0x6444,
	13843: 0x5C04,
	13844: 0x6151,
	13845: 0x6D89,
	13846: 0x793E,
	13847: 0x8BBE,
	13848: 0x7837,
	13849: 0x7533,
	13850: 0x547B,
	13851: 0x4F38,
	13852: 0x8EAB,
	13853: 0x6DF1,
	13854: 0x5A20,
	13855: 0x7EC5,
	13856: 0x795E,
	13857: 0x6C88,
	13858: 0x5BA1,
	13859: 0x5A76,
	13860: 0x751A,
	13861: 0x80BE,
	13862: 0x614E,
	13863: 0x6E17,
	13864: 0x58F0,
	13865: 0x751F,
	13866: 0x7525,
	13867: 0x7272,
	13868: 0x5347,
	13869: 0x7EF3,
	13870: 0x8503,
	13871: 0x8504,
	13872: 0x8505,
	13873: 0x8506,
	13874: 0x8507,
	13875: 0x8508,
	13876: 0x8509,
	13877: 0x850A,
	13878: 0x850B,
	13879: 0x850D,
	13880: 0x850E,
	13881: 0x850F,
	13882: 0x8510,
	13883: 0x8512,
	13884: 0x8514,
	13885: 0x8515,
	13886: 0x8516,
	13887: 0x8518,
	13888: 0x8519,
	13889: 0x851B,
	13890: 0x851C,
	13891: 0x851D,
	13892: 0x851E,
	13893: 0x8520,
	13894: 0x8522,
	13895: 0x8523,
	13896: 0x8524,
	13897: 0x8525,
	13898: 0x8526,
	13899: 0x8527,
	13900: 0x8528,
	13901: 0x8529,
	13902: 0x852A,
	13903: 0x852D,
	13904: 0x852E,
	13905: 0x852F,
	13906: 0x8530,
	13907: 0x8531,
	13908: 0x8532,
	13909: 0x8533,
	13910: 0x8534,
	13911: 0x8535,
	13912: 0x8536,
	13913: 0x853E,
	13914: 0x853F,
	13915: 0x8540,
	13916: 0x8541,
	13917: 0x8542,
	13918: 0x8544,
	13919: 0x8545,
	13920: 0x8546,
	13921: 0x8547,
	13922: 0x854B,
	13923: 0x854C,
	13924: 0x854D,
	13925: 0x854E,
	13926: 0x854F,
	13927: 0x8550,
	13928: 0x8551,
	13929: 0x8552,
	13930: 0x8553,
	13931: 0x8554,
	13932: 0x8555,
	13933: 0x8557,
	13934: 0x8558,
	13935: 0x855A,
	13936: 0x855B,
	13937: 0x855C,
	13938: 0x855D,
	13939: 0x855F,
	13940: 0x8560,
	13941: 0x8561,
	13942: 0x8562,
	13943: 0x8563,
	13944: 0x8565,
	13945: 0x8566,
	13946: 0x8567,
	13947: 0x8569,
	13948: 0x856A,
	13949: 0x856B,
	13950: 0x856C,
	13951: 0x856D,
	13952: 0x856E,
	13953: 0x856F,
	13954: 0x8570,
	13955: 0x8571,
	13956: 0x8573,
	13957: 0x8575,
	13958: 0x8576,
	13959: 0x8577,
	13960: 0x8578,
	13961: 0x857C,
	13962: 0x857D,
	13963: 0x857F,
	13964: 0x8580,
	13965: 0x8581,
	13966: 0x7701,
	13967: 0x76DB,
	13968: 0x5269,
	13969: 0x80DC,
	13970: 0x5723,
	13971: 0x5E08,
	13972: 0x5931,
	13973: 0x72EE,
	13974: 0x65BD,
	13975: 0x6E7F,
	13976: 0x8BD7,
	13977: 0x5C38,
	13978: 0x8671,
	13979: 0x5341,
	13980: 0x77F3,
	13981: 0x62FE,
	13982: 0x65F6,
	13983: 0x4EC0,
	13984: 0x98DF,
	13985: 0x8680,
	13986: 0x5B9E,
	13987: 0x8BC6,
	13988: 0x53F2,
	13989: 0x77E2,
	13990: 0x4F7F,
	13991: 0x5C4E,
	13992: 0x9A76,
	13993: 0x59CB,
	13994: 0x5F0F,
	13995: 0x793A,
	13996: 0x58EB,
	13997: 0x4E16,
	13998: 0x67FF,
	13999: 0x4E8B,
	14000: 0x62ED,
	14001: 0x8A93,
	14002: 0x901D,
	14003: 0x52BF,
	14004: 0x662F,
	14005: 0x55DC,
	14006: 0x566C,
	14007: 0x9002,
	14008: 0x4ED5,
	14009: 0x4F8D,
	14010: 0x91CA,
	14011: 0x9970,
	14012: 0x6C0F,
	14013: 0x5E02,
	14014: 0x6043,
	14015: 0x5BA4,
	14016: 0x89C6,
	14017: 0x8BD5,
	14018: 0x6536,
	14019: 0x624B,
	14020: 0x9996,
	14021: 0x5B88,
	14022: 0x5BFF,
	14023: 0x6388,
	14024: 0x552E,
	14025: 0x53D7,
	14026: 0x7626,
	14027: 0x517D,
	14028: 0x852C,
	14029: 0x67A2,
	14030: 0x68B3,
	14031: 0x6B8A,
	14032: 0x6292,
	14033: 0x8F93,
	14034: 0x53D4,
	14035: 0x8212,
	14036: 0x6DD1,
	14037: 0x758F,
	14038: 0x4E66,
	14039: 0x8D4E,
	14040: 0x5B70,
	14041: 0x719F,
	14042: 0x85AF,
	14043: 0x6691,
	14044: 0x66D9,
	14045: 0x7F72,
	14046: 0x8700,
	14047: 0x9ECD,
	14048: 0x9F20,
	14049: 0x5C5E,
	14050: 0x672F,
	14051: 0x8FF0,
	14052: 0x6811,
	14053: 0x675F,
	14054: 0x620D,
	14055: 0x7AD6,
	14056: 0x5885,
	14057: 0x5EB6,
	14058: 0x6570,
	14059: 0x6F31,
	14060: 0x8582,
	14061: 0x8583,
	14062: 0x8586,
	14063: 0x8588,
	14064: 0x8589,
	14065: 0x858A,
	14066: 0x858B,
	14067: 0x858C,
	14068: 0x858D,
	14069: 0x858E,
	14070: 0x8590,
	14071: 0x8591,
	14072: 0x8592,
	14073: 0x8593,
	14074: 0x8594,
	14075: 0x8595,
	14076: 0x8596,
	14077: 0x8597,
	14078: 0x8598,
	14079: 0x8599,
	14080: 0x859A,
	14081: 0x859D,
	14082: 0x859E,
	14083: 0x859F,
	14084: 0x85A0,
	14085: 0x85A1,
	14086: 0x85A2,
	14087: 0x85A3,
	14088: 0x85A5,
	14089: 0x85A6,
	14090: 0x85A7,
	14091: 0x85A9,
	14092: 0x85AB,
	14093: 0x85AC,
	14094: 0x85AD,
	14095: 0x85B1,
	14096: 0x85B2,
	14097: 0x85B3,
	14098: 0x85B4,
	14099: 0x85B5,
	14100: 0x85B6,
	14101: 0x85B8,
	14102: 0x85BA,
	14103: 0x85BB,
	14104: 0x85BC,
	14105: 0x85BD,
	14106: 0x85BE,
	14107: 0x85BF,
	14108: 0x85C0,
	14109: 0x85C2,
	14110: 0x85C3,
	14111: 0x85C4,
	14112: 0x85C5,
	14113: 0x85C6,
	14114: 0x85C7,
	14115: 0x85C8,
	14116: 0x85CA,
	14117: 0x85CB,
	14118: 0x85CC,
	14119: 0x85CD,
	14120: 0x85CE,
	14121: 0x85D1,
	14122: 0x85D2,
	14123: 0x85D4,
	14124: 0x85D6,
	14125: 0x85D7,
	14126: 0x85D8,
	14127: 0x85D9,
	14128: 0x85DA,
	14129: 0x85DB,
	14130: 0x85DD,
	14131: 0x85DE,
	14132: 0x85DF,
	14133: 0x85E0,
	14134: 0x85E1,
	14135: 0x85E2,
	14136: 0x85E3,
	14137: 0x85E5,
	14138: 0x85E6,
	14139: 0x85E7,
	14140: 0x85E8,
	14141: 0x85EA,
	14142: 0x85EB,
	14143: 0x85EC,
	14144: 0x85ED,
	14145: 0x85EE,
	14146: 0x85EF,
	14147: 0x85F0,
	14148: 0x85F1,
	14149: 0x85F2,
	14150: 0x85F3,
	14151: 0x85F4,
	14152: 0x85F5,
	14153: 0x85F6,
	14154: 0x85F7,
	14155: 0x85F8,
	14156: 0x6055,
	14157: 0x5237,
	14158: 0x800D,
	14159: 0x6454,
	14160: 0x8870,
	14161: 0x7529,
	14162: 0x5E05,
	14163: 0x6813,
	14164: 0x62F4,
	14165: 0x971C,
	14166: 0x53CC,
	14167: 0x723D,
	14168: 0x8C01,
	14169: 0x6C34,
	14170: 0x7761,
	14171: 0x7A0E,
	14172: 0x542E,
	14173: 0x77AC,
	14174: 0x987A,
	14175: 0x821C,
	14176: 0x8BF4,
	14177: 0x7855,
	14178: 0x6714,
	14179: 0x70C1,
	14180: 0x65AF,
	14181: 0x6495,
	14182: 0x5636,
	14183: 0x601D,
	14184: 0x79C1,
	14185: 0x53F8,
	14186: 0x4E1D,
	14187: 0x6B7B,
	14188: 0x8086,
	14189: 0x5BFA,
	14190: 0x55E3,
	14191: 0x56DB,
	14192: 0x4F3A,
	14193: 0x4F3C,
	14194: 0x9972,
	14195: 0x5DF3,
	14196: 0x677E,
	14197: 0x8038,
	14198: 0x6002,
	14199: 0x9882,
	14200: 0x9001,
	14201: 0x5B8B,
	14202: 0x8BBC,
	14203: 0x8BF5,
	14204: 0x641C,
	14205: 0x8258,
	14206: 0x64DE,
	14207: 0x55FD,
	14208: 0x82CF,
	14209: 0x9165,
	14210: 0x4FD7,
	14211: 0x7D20,
	14212: 0x901F,
	14213: 0x7C9F,
	14214: 0x50F3,
	14215: 0x5851,
	14216: 0x6EAF,
	14217: 0x5BBF,
	14218: 0x8BC9,
	14219: 0x8083,
	14220: 0x9178,
	14221: 0x849C,
	14222: 0x7B97,
	14223: 0x867D,
	14224: 0x968B,
	14225: 0x968F,
	14226: 0x7EE5,
	14227: 0x9AD3,
	14228: 0x788E,
	14229: 0x5C81,
	14230: 0x7A57,
	14231: 0x9042,
	14232: 0x96A7,
	14233: 0x795F,
	14234: 0x5B59,
	14235: 0x635F,
	14236: 0x7B0B,
	14237: 0x84D1,
	14238: 0x68AD,
	14239: 0x5506,
	14240: 0x7F29,
	14241: 0x7410,
	14242: 0x7D22,
	14243: 0x9501,
	14244: 0x6240,
	14245: 0x584C,
	14246: 0x4ED6,
	14247: 0x5B83,
	14248: 0x5979,
	14249: 0x5854,
	14250: 0x85F9,
	14251: 0x85FA,
	14252: 0x85FC,
	14253: 0x85FD,
	14254: 0x85FE,
	14255: 0x8600,
	14256: 0x8601,
	14257: 0x8602,
	14258: 0x8603,
	14259: 0x8604,
	14260: 0x8606,
	14261: 0x8607,
	14262: 0x8608,
	14263: 0x8609,
	14264: 0x860A,
	14265: 0x860B,
	14266: 0x860C,
	14267: 0x860D,
	14268: 0x860E,
	14269: 0x860F,
	14270: 0x8610,
	14271: 0x8612,
	14272: 0x8613,
	14273: 0x8614,
	14274: 0x8615,
	14275: 0x8617,
	14276: 0x8618,
	14277: 0x8619,
	14278: 0x861A,
	14279: 0x861B,
	14280: 0x861C,
	14281: 0x861D,
	14282: 0x861E,
	14283: 0x861F,
	14284: 0x8620,
	14285: 0x8621,
	14286: 0x8622,
	14287: 0x8623,
	14288: 0x8624,
	14289: 0x8625,
	14290: 0x8626,
	14291: 0x8628,
	14292: 0x862A,
	14293: 0x862B,
	14294: 0x862C,
	14295: 0x862D,
	14296: 0x862E,
	14297: 0x862F,
	14298: 0x8630,
	14299: 0x8631,
	14300: 0x8632,
	14301: 0x8633,
	14302: 0x8634,
	14303: 0x8635,
	14304: 0x8636,
	14305: 0x8637,
	14306: 0x8639,
	14307: 0x863A,
	14308: 0x863B,
	14309: 0x863D,
	14310: 0x863E,
	14311: 0x863F,
	14312: 0x8640,
	14313: 0x8641,
	14314: 0x8642,
	14315: 0x8643,
	14316: 0x8644,
	14317: 0x8645,
	14318: 0x8646,
	14319: 0x8647,
	14320: 0x8648,
	14321: 0x8649,
	14322: 0x864A,
	14323: 0x864B,
	14324: 0x864C,
	14325: 0x8652,
	14326: 0x8653,
	14327: 0x8655,
	14328: 0x8656,
	14329: 0x8657,
	14330: 0x8658,
	14331: 0x8659,
	14332: 0x865B,
	14333: 0x865C,
	14334: 0x865D,
	14335: 0x865F,
	14336: 0x8660,
	14337: 0x8661,
	14338: 0x8663,
	14339: 0x8664,
	14340: 0x8665,
	14341: 0x8666,
	14342: 0x8667,
	14343: 0x8668,
	14344: 0x8669,
	14345: 0x866A,
	14346: 0x736D,
	14347: 0x631E,
	14348: 0x8E4B,
	14349: 0x8E0F,
	14350: 0x80CE,
	14351: 0x82D4,
	14352: 0x62AC,
	14353: 0x53F0,
	14354: 0x6CF0,
	14355: 0x915E,
	14356: 0x592A,
	14357: 0x6001,
	14358: 0x6C70,
	14359: 0x574D,
	14360: 0x644A,
	14361: 0x8D2A,
	14362: 0x762B,
	14363: 0x6EE9,
	14364: 0x575B,
	14365: 0x6A80,
	14366: 0x75F0,
	14367: 0x6F6D,
	14368: 0x8C2D,
	14369: 0x8C08,
	14370: 0x5766,
	14371: 0x6BEF,
	14372: 0x8892,
	14373: 0x78B3,
	14374: 0x63A2,
	14375: 0x53F9,
	14376: 0x70AD,
	14377: 0x6C64,
	14378: 0x5858,
	14379: 0x642A,
	14380: 0x5802,
	14381: 0x68E0,
	14382: 0x819B,
	14383: 0x5510,
	14384: 0x7CD6,
	14385: 0x5018,
	14386: 0x8EBA,
	14387: 0x6DCC,
	14388: 0x8D9F,
	14389: 0x70EB,
	14390: 0x638F,
	14391: 0x6D9B,
	14392: 0x6ED4,
	14393: 0x7EE6,
	14394: 0x8404,
	14395: 0x6843,
	14396: 0x9003,
	14397: 0x6DD8,
	14398: 0x9676,
	14399: 0x8BA8,
	14400: 0x5957,
	14401: 0x7279,
	14402: 0x85E4,
	14403: 0x817E,
	14404: 0x75BC,
	14405: 0x8A8A,
	14406: 0x68AF,
	14407: 0x5254,
	14408: 0x8E22,
	14409: 0x9511,
	14410: 0x63D0,
	14411: 0x9898,
	14412: 0x8E44,
	14413: 0x557C,
	14414: 0x4F53,
	14415: 0x66FF,
	14416: 0x568F,
	14417: 0x60D5,
	14418: 0x6D95,
	14419: 0x5243,
	14420: 0x5C49,
	14421: 0x5929,
	14422: 0x6DFB,
	14423: 0x586B,
	14424: 0x7530,
	14425: 0x751C,
	14426: 0x606C,
	14427: 0x8214,
	14428: 0x8146,
	14429: 0x6311,
	14430: 0x6761,
	14431: 0x8FE2,
	14432: 0x773A,
	14433: 0x8DF3,
	14434: 0x8D34,
	14435: 0x94C1,
	14436: 0x5E16,
	14437: 0x5385,
	14438: 0x542C,
	14439: 0x70C3,
	14440: 0x866D,
	14441: 0x866F,
	14442: 0x8670,
	14443: 0x8672,
	14444: 0x8673,
	14445: 0x8674,
	14446: 0x8675,
	14447: 0x8676,
	14448: 0x8677,
	14449: 0x8678,
	14450: 0x8683,
	14451: 0x8684,
	14452: 0x8685,
	14453: 0x8686,
	14454: 0x8687,
	14455: 0x8688,
	14456: 0x8689,
	14457: 0x868E,
	14458: 0x868F,
	14459: 0x8690,
	14460: 0x8691,
	14461: 0x8692,
	14462: 0x8694,
	14463: 0x8696,
	14464: 0x8697,
	14465: 0x8698,
	14466: 0x8699,
	14467: 0x869A,
	14468: 0x869B,
	14469: 0x869E,
	14470: 0x869F,
	14471: 0x86A0,
	14472: 0x86A1,
	14473: 0x86A2,
	14474: 0x86A5,
	14475: 0x86A6,
	14476: 0x86AB,
	14477: 0x86AD,
	14478: 0x86AE,
	14479: 0x86B2,
	14480: 0x86B3,
	14481: 0x86B7,
	14482: 0x86B8,
	14483: 0x86B9,
	14484: 0x86BB,
	14485: 0x86BC,
	14486: 0x86BD,
	14487: 0x86BE,
	14488: 0x86BF,
	14489: 0x86C1,
	14490: 0x86C2,
	14491: 0x86C3,
	14492: 0x86C5,
	14493: 0x86C8,
	14494: 0x86CC,
	14495: 0x86CD,
	14496: 0x86D2,
	14497: 0x86D3,
	14498: 0x86D5,
	14499: 0x86D6,
	14500: 0x86D7,
	14501: 0x86DA,
	14502: 0x86DC,
	14503: 0x86DD,
	14504: 0x86E0,
	14505: 0x86E1,
	14506: 0x86E2,
	14507: 0x86E3,
	14508: 0x86E5,
	14509: 0x86E6,
	14510: 0x86E7,
	14511: 0x86E8,
	14512: 0x86EA,
	14513: 0x86EB,
	14514: 0x86EC,
	14515: 0x86EF,
	14516: 0x86F5,
	14517: 0x86F6,
	14518: 0x86F7,
	14519: 0x86FA,
	14520: 0x86FB,
	14521: 0x86FC,
	14522: 0x86FD,
	14523: 0x86FF,
	14524: 0x8701,
	14525: 0x8704,
	14526: 0x8705,
	14527: 0x8706,
	14528: 0x870B,
	14529: 0x870C,
	14530: 0x870E,
	14531: 0x870F,
	14532: 0x8710,
	14533: 0x8711,
	14534: 0x8714,
	14535: 0x8716,
	14536: 0x6C40,
	14537: 0x5EF7,
	14538: 0x505C,
	14539: 0x4EAD,
	14540: 0x5EAD,
	14541: 0x633A,
	14542: 0x8247,
	14543: 0x901A,
	14544: 0x6850,
	14545: 0x916E,
	14546: 0x77B3,
	14547: 0x540C,
	14548: 0x94DC,
	14549: 0x5F64,
	14550: 0x7AE5,
	14551: 0x6876,
	14552: 0x6345,
	14553: 0x7B52,
	14554: 0x7EDF,
	14555: 0x75DB,
	14556: 0x5077,
	14557: 0x6295,
	14558: 0x5934,
	14559: 0x900F,
	14560: 0x51F8,
	14561: 0x79C3,
	14562: 0x7A81,
	14563: 0x56FE,
	14564: 0x5F92,
	14565: 0x9014,
	14566: 0x6D82,
	14567: 0x5C60,
	14568: 0x571F,
	14569: 0x5410,
	14570: 0x5154,
	14571: 0x6E4D,
	14572: 0x56E2,
	14573: 0x63A8,
	14574: 0x9893,
	14575: 0x817F,
	14576: 0x8715,
	14577: 0x892A,
	14578: 0x9000,
	14579: 0x541E,
	14580: 0x5C6F,
	14581: 0x81C0,
	14582: 0x62D6,
	14583: 0x6258,
	14584: 0x8131,
	14585: 0x9E35,
	14586: 0x9640,
	14587: 0x9A6E,
	14588: 0x9A7C,
	14589: 0x692D,
	14590: 0x59A5,
	14591: 0x62D3,
	14592: 0x553E,
	14593: 0x6316,
	14594: 0x54C7,
	14595: 0x86D9,
	14596: 0x6D3C,
	14597: 0x5A03,
	14598: 0x74E6,
	14599: 0x889C,
	14600: 0x6B6A,
	14601: 0x5916,
	14602: 0x8C4C,
	14603: 0x5F2F,
	14604: 0x6E7E,
	14605: 0x73A9,
	14606: 0x987D,
	14607: 0x4E38,
	14608: 0x70F7,
	14609: 0x5B8C,
	14610: 0x7897,
	14611: 0x633D,
	14612: 0x665A,
	14613: 0x7696,
	14614: 0x60CB,
	14615: 0x5B9B,
	14616: 0x5A49,
	14617: 0x4E07,
	14618: 0x8155,
	14619: 0x6C6A,
	14620: 0x738B,
	14621: 0x4EA1,
	14622: 0x6789,
	14623: 0x7F51,
	14624: 0x5F80,
	14625: 0x65FA,
	14626: 0x671B,
	14627: 0x5FD8,
	14628: 0x5984,
	14629: 0x5A01,
	14630: 0x8719,
	14631: 0x871B,
	14632: 0x871D,
	14633: 0x871F,
	14634: 0x8720,
	14635: 0x8724,
	14636: 0x8726,
	14637: 0x8727,
	14638: 0x8728,
	14639: 0x872A,
	14640: 0x872B,
	14641: 0x872C,
	14642: 0x872D,
	14643: 0x872F,
	14644: 0x8730,
	14645: 0x8732,
	14646: 0x8733,
	14647: 0x8735,
	14648: 0x8736,
	14649: 0x8738,
	14650: 0x8739,
	14651: 0x873A,
	14652: 0x873C,
	14653: 0x873D,
	14654: 0x8740,
	14655: 0x8741,
	14656: 0x8742,
	14657: 0x8743,
	14658: 0x8744,
	14659: 0x8745,
	14660: 0x8746,
	14661: 0x874A,
	14662: 0x874B,
	14663: 0x874D,
	14664: 0x874F,
	14665: 0x8750,
	14666: 0x8751,
	14667: 0x8752,
	14668: 0x8754,
	14669: 0x8755,
	14670: 0x8756,
	14671: 0x8758,
	14672: 0x875A,
	14673: 0x875B,
	14674: 0x875C,
	14675: 0x875D,
	14676: 0x875E,
	14677: 0x875F,
	14678: 0x8761,
	14679: 0x8762,
	14680: 0x8766,
	14681: 0x8767,
	14682: 0x8768,
	14683: 0x8769,
	14684: 0x876A,
	14685: 0x876B,
	14686: 0x876C,
	14687: 0x876D,
	14688: 0x876F,
	14689: 0x8771,
	14690: 0x8772,
	14691: 0x8773,
	14692: 0x8775,
	14693: 0x8777,
	14694: 0x8778,
	14695: 0x8779,
	14696: 0x877A,
	14697: 0x877F,
	14698: 0x8780,
	14699: 0x8781,
	14700: 0x8784,
	14701: 0x8786,
	14702: 0x8787,
	14703: 0x8789,
	14704: 0x878A,
	14705: 0x878C,
	14706: 0x878E,
	14707: 0x878F,
	14708: 0x8790,
	14709: 0x8791,
	14710: 0x8792,
	14711: 0x8794,
	14712: 0x8795,
	14713: 0x8796,
	14714: 0x8798,
	14715: 0x8799,
	14716: 0x879A,
	14717: 0x879B,
	14718: 0x879C,
	14719: 0x879D,
	14720: 0x879E,
	14721: 0x87A0,
	14722: 0x87A1,
	14723: 0x87A2,
	14724: 0x87A3,
	14725: 0x87A4,
	14726: 0x5DCD,
	14727: 0x5FAE,
	14728: 0x5371,
	14729: 0x97E6,
	14730: 0x8FDD,
	14731: 0x6845,
	14732: 0x56F4,
	14733: 0x552F,
	14734: 0x60DF,
	14735: 0x4E3A,
	14736: 0x6F4D,
	14737: 0x7EF4,
	14738: 0x82C7,
	14739: 0x840E,
	14740: 0x59D4,
	14741: 0x4F1F,
	14742: 0x4F2A,
	14743: 0x5C3E,
	14744: 0x7EAC,
	14745: 0x672A,
	14746: 0x851A,
	14747: 0x5473,
	14748: 0x754F,
	14749: 0x80C3,
	14750: 0x5582,
	14751: 0x9B4F,
	14752: 0x4F4D,
	14753: 0x6E2D,
	14754: 0x8C13,
	14755: 0x5C09,
	14756: 0x6170,
	14757: 0x536B,
	14758: 0x761F,
	14759: 0x6E29,
	14760: 0x868A,
	14761: 0x6587,
	14762: 0x95FB,
	14763: 0x7EB9,
	14764: 0x543B,
	14765: 0x7A33,
	14766: 0x7D0A,
	14767: 0x95EE,
	14768: 0x55E1,
	14769: 0x7FC1,
	14770: 0x74EE,
	14771: 0x631D,
	14772: 0x8717,
	14773: 0x6DA1,
	14774: 0x7A9D,
	14775: 0x6211,
	14776: 0x65A1,
	14777: 0x5367,
	14778: 0x63E1,
	14779: 0x6C83,
	14780: 0x5DEB,
	14781: 0x545C,
	14782: 0x94A8,
	14783: 0x4E4C,
	14784: 0x6C61,
	14785: 0x8BEC,
	14786: 0x5C4B,
	14787: 0x65E0,
	14788: 0x829C,
	14789: 0x68A7,
	14790: 0x543E,
	14791: 0x5434,
	14792: 0x6BCB,
	14793: 0x6B66,
	14794: 0x4E94,
	14795: 0x6342,
	14796: 0x5348,
	14797: 0x821E,
	14798: 0x4F0D,
	14799: 0x4FAE,
	14800: 0x575E,
	14801: 0x620A,
	14802: 0x96FE,
	14803: 0x6664,
	14804: 0x7269,
	14805: 0x52FF,
	14806: 0x52A1,
	14807: 0x609F,
	14808: 0x8BEF,
	14809: 0x6614,
	14810: 0x7199,
	14811: 0x6790,
	14812: 0x897F,
	14813: 0x7852,
	14814: 0x77FD,
	14815: 0x6670,
	14816: 0x563B,
	14817: 0x5438,
	14818: 0x9521,
	14819: 0x727A,
	14820: 0x87A5,
	14821: 0x87A6,
	14822: 0x87A7,
	14823: 0x87A9,
	14824: 0x87AA,
	14825: 0x87AE,
	14826: 0x87B0,
	14827: 0x87B1,
	14828: 0x87B2,
	14829: 0x87B4,
	14830: 0x87B6,
	14831: 0x87B7,
	14832: 0x87B8,
	14833: 0x87B9,
	14834: 0x87BB,
	14835: 0x87BC,
	14836: 0x87BE,
	14837: 0x87BF,
	14838: 0x87C1,
	14839: 0x87C2,
	14840: 0x87C3,
	14841: 0x87C4,
	14842: 0x87C5,
	14843: 0x87C7,
	14844: 0x87C8,
	14845: 0x87C9,
	14846: 0x87CC,
	14847: 0x87CD,
	14848: 0x87CE,
	14849: 0x87CF,
	14850: 0x87D0,
	14851: 0x87D4,
	14852: 0x87D5,
	14853: 0x87D6,
	14854: 0x87D7,
	14855: 0x87D8,
	14856: 0x87D9,
	14857: 0x87DA,
	14858: 0x87DC,
	14859: 0x87DD,
	14860: 0x87DE,
	14861: 0x87DF,
	14862: 0x87E1,
	14863: 0x87E2,
	14864: 0x87E3,
	14865: 0x87E4,
	14866: 0x87E6,
	14867: 0x87E7,
	14868: 0x87E8,
	14869: 0x87E9,
	14870: 0x87EB,
	14871: 0x87EC,
	14872: 0x87ED,
	14873: 0x87EF,
	14874: 0x87F0,
	14875: 0x87F1,
	14876: 0x87F2,
	14877: 0x87F3,
	14878: 0x87F4,
	14879: 0x87F5,
	14880: 0x87F6,
	14881: 0x87F7,
	14882: 0x87F8,
	14883: 0x87FA,
	14884: 0x87FB,
	14885: 0x87FC,
	14886: 0x87FD,
	14887: 0x87FF,
	14888: 0x8800,
	14889: 0x8801,
	14890: 0x8802,
	14891: 0x8804,
	14892: 0x8805,
	14893: 0x8806,
	14894: 0x8807,
	14895: 0x8808,
	14896: 0x8809,
	14897: 0x880B,
	14898: 0x880C,
	14899: 0x880D,
	14900: 0x880E,
	14901: 0x880F,
	14902: 0x8810,
	14903: 0x8811,
	14904: 0x8812,
	14905: 0x8814,
	14906: 0x8817,
	14907: 0x8818,
	14908: 0x8819,
	14909: 0x881A,
	14910: 0x881C,
	14911: 0x881D,
	14912: 0x881E,
	14913: 0x881F,
	14914: 0x8820,
	14915: 0x8823,
	14916: 0x7A00,
	14917: 0x606F,
	14918: 0x5E0C,
	14919: 0x6089,
	14920: 0x819D,
	14921: 0x5915,
	14922: 0x60DC,
	14923: 0x7184,
	14924: 0x70EF,
	14925: 0x6EAA,
	14926: 0x6C50,
	14927: 0x7280,
	14928: 0x6A84,
	14929: 0x88AD,
	14930: 0x5E2D,
	14931: 0x4E60,
	14932: 0x5AB3,
	14933: 0x559C,
	14934: 0x94E3,
	14935: 0x6D17,
	14936: 0x7CFB,
	14937: 0x9699,
	14938: 0x620F,
	14939: 0x7EC6,
	14940: 0x778E,
	14941: 0x867E,
	14942: 0x5323,
	14943: 0x971E,
	14944: 0x8F96,
	14945: 0x6687,
	14946: 0x5CE1,
	14947: 0x4FA0,
	14948: 0x72ED,
	14949: 0x4E0B,
	14950: 0x53A6,
	14951: 0x590F,
	14952: 0x5413,
	14953: 0x6380,
	14954: 0x9528,
	14955: 0x5148,
	14956: 0x4ED9,
	14957: 0x9C9C,
	14958: 0x7EA4,
	14959: 0x54B8,
	14960: 0x8D24,
	14961: 0x8854,
	14962: 0x8237,
	14963: 0x95F2,
	14964: 0x6D8E,
	14965: 0x5F26,
	14966: 0x5ACC,
	14967: 0x663E,
	14968: 0x9669,
	14969: 0x73B0,
	14970: 0x732E,
	14971: 0x53BF,
	14972: 0x817A,
	14973: 0x9985,
	14974: 0x7FA1,
	14975: 0x5BAA,
	14976: 0x9677,
	14977: 0x9650,
	14978: 0x7EBF,
	14979: 0x76F8,
	14980: 0x53A2,
	14981: 0x9576,
	14982: 0x9999,
	14983: 0x7BB1,
	14984: 0x8944,
	14985: 0x6E58,
	14986: 0x4E61,
	14987: 0x7FD4,
	14988: 0x7965,
	14989: 0x8BE6,
	14990: 0x60F3,
	14991: 0x54CD,
	14992: 0x4EAB,
	14993: 0x9879,
	14994: 0x5DF7,
	14995: 0x6A61,
	14996: 0x50CF,
	14997: 0x5411,
	14998: 0x8C61,
	14999: 0x8427,
	15000: 0x785D,
	15001: 0x9704,
	15002: 0x524A,
	15003: 0x54EE,
	15004: 0x56A3,
	15005: 0x9500,
	15006: 0x6D88,
	15007: 0x5BB5,
	15008: 0x6DC6,
	15009: 0x6653,
	15010: 0x8824,
	15011: 0x8825,
	15012: 0x8826,
	15013: 0x8827,
	15014: 0x8828,
	15015: 0x8829,
	15016: 0x882A,
	15017: 0x882B,
	15018: 0x882C,
	15019: 0x882D,
	15020: 0x882E,
	15021: 0x882F,
	15022: 0x8830,
	15023: 0x8831,
	15024: 0x8833,
	15025: 0x8834,
	15026: 0x8835,
	15027: 0x8836,
	15028: 0x8837,
	15029: 0x8838,
	15030: 0x883A,
	15031: 0x883B,
	15032: 0x883D,
	15033: 0x883E,
	15034: 0x883F,
	15035: 0x8841,
	15036: 0x8842,
	15037: 0x8843,
	15038: 0x8846,
	15039: 0x8847,
	15040: 0x8848,
	15041: 0x8849,
	15042: 0x884A,
	15043: 0x884B,
	15044: 0x884E,
	15045: 0x884F,
	15046: 0x8850,
	15047: 0x8851,
	15048: 0x8852,
	15049: 0x8853,
	15050: 0x8855,
	15051: 0x8856,
	15052: 0x8858,
	15053: 0x885A,
	15054: 0x885B,
	15055: 0x885C,
	15056: 0x885D,
	15057: 0x885E,
	15058: 0x885F,
	15059: 0x8860,
	15060: 0x8866,
	15061: 0x8867,
	15062: 0x886A,
	15063: 0x886D,
	15064: 0x886F,
	15065: 0x8871,
	15066: 0x8873,
	15067: 0x8874,
	15068: 0x8875,
	15069: 0x8876,
	15070: 0x8878,
	15071: 0x8879,
	15072: 0x887A,
	15073: 0x887B,
	15074: 0x887C,
	15075: 0x8880,
	15076: 0x8883,
	15077: 0x8886,
	15078: 0x8887,
	15079: 0x8889,
	15080: 0x888A,
	15081: 0x888C,
	15082: 0x888E,
	15083: 0x888F,
	15084: 0x8890,
	15085: 0x8891,
	15086: 0x8893,
	15087: 0x8894,
	15088: 0x8895,
	15089: 0x8897,
	15090: 0x8898,
	15091: 0x8899,
	15092: 0x889A,
	15093: 0x889B,
	15094: 0x889D,
	15095: 0x889E,
	15096: 0x889F,
	15097: 0x88A0,
	15098: 0x88A1,
	15099: 0x88A3,
	15100: 0x88A5,
	15101: 0x88A6,
	15102: 0x88A7,
	15103: 0x88A8,
	15104: 0x88A9,
	15105: 0x88AA,
	15106: 0x5C0F,
	15107: 0x5B5D,
	15108: 0x6821,
	15109: 0x8096,
	15110: 0x5578,
	15111: 0x7B11,
	15112: 0x6548,
	15113: 0x6954,
	15114: 0x4E9B,
	15115: 0x6B47,
	15116: 0x874E,
	15117: 0x978B,
	15118: 0x534F,
	15119: 0x631F,
	15120: 0x643A,
	15121: 0x90AA,
	15122: 0x659C,
	15123: 0x80C1,
	15124: 0x8C10,
	15125: 0x5199,
	15126: 0x68B0,
	15127: 0x5378,
	15128: 0x87F9,
	15129: 0x61C8,
	15130: 0x6CC4,
	15131: 0x6CFB,
	15132: 0x8C22,
	15133: 0x5C51,
	15134: 0x85AA,
	15135: 0x82AF,
	15136: 0x950C,
	15137: 0x6B23,
	15138: 0x8F9B,
	15139: 0x65B0,
	15140: 0x5FFB,
	15141: 0x5FC3,
	15142: 0x4FE1,
	15143: 0x8845,
	15144: 0x661F,
	15145: 0x8165,
	15146: 0x7329,
	15147: 0x60FA,
	15148: 0x5174,
	15149: 0x5211,
	15150: 0x578B,
	15151: 0x5F62,
	15152: 0x90A2,
	15153: 0x884C,
	15154: 0x9192,
	15155: 0x5E78,
	15156: 0x674F,
	15157: 0x6027,
	15158: 0x59D3,
	15159: 0x5144,
	15160: 0x51F6,
	15161: 0x80F8,
	15162: 0x5308,
	15163: 0x6C79,
	15164: 0x96C4,
	15165: 0x718A,
	15166: 0x4F11,
	15167: 0x4FEE,
	15168: 0x7F9E,
	15169: 0x673D,
	15170: 0x55C5,
	15171: 0x9508,
	15172: 0x79C0,
	15173: 0x8896,
	15174: 0x7EE3,
	15175: 0x589F,
	15176: 0x620C,
	15177: 0x9700,
	15178: 0x865A,
	15179: 0x5618,
	15180: 0x987B,
	15181: 0x5F90,
	15182: 0x8BB8,
	15183: 0x84C4,
	15184: 0x9157,
	15185: 0x53D9,
	15186: 0x65ED,
	15187: 0x5E8F,
	15188: 0x755C,
	15189: 0x6064,
	15190: 0x7D6E,
	15191: 0x5A7F,
	15192: 0x7EEA,
	15193: 0x7EED,
	15194: 0x8F69,
	15195: 0x55A7,
	15196: 0x5BA3,
	15197: 0x60AC,
	15198: 0x65CB,
	15199: 0x7384,
	15200: 0x88AC,
	15201: 0x88AE,
	15202: 0x88AF,
	15203: 0x88B0,
	15204: 0x88B2,
	15205: 0x88B3,
	15206: 0x88B4,
	15207: 0x88B5,
	15208: 0x88B6,
	15209: 0x88B8,
	15210: 0x88B9,
	15211: 0x88BA,
	15212: 0x88BB,
	15213: 0x88BD,
	15214: 0x88BE,
	15215: 0x88BF,
	15216: 0x88C0,
	15217: 0x88C3,
	15218: 0x88C4,
	15219: 0x88C7,
	15220: 0x88C8,
	15221: 0x88CA,
	15222: 0x88CB,
	15223: 0x88CC,
	15224: 0x88CD,
	15225: 0x88CF,
	15226: 0x88D0,
	15227: 0x88D1,
	15228: 0x88D3,
	15229: 0x88D6,
	15230: 0x88D7,
	15231: 0x88DA,
	15232: 0x88DB,
	15233: 0x88DC,
	15234: 0x88DD,
	15235: 0x88DE,
	15236: 0x88E0,
	15237: 0x88E1,
	15238: 0x88E6,
	15239: 0x88E7,
	15240: 0x88E9,
	15241: 0x88EA,
	15242: 0x88EB,
	15243: 0x88EC,
	15244: 0x88ED,
	15245: 0x88EE,
	15246: 0x88EF,
	15247: 0x88F2,
	15248: 0x88F5,
	15249: 0x88F6,
	15250: 0x88F7,
	15251: 0x88FA,
	15252: 0x88FB,
	15253: 0x88FD,
	15254: 0x88FF,
	15255: 0x8900,
	15256: 0x8901,
	15257: 0x8903,
	15258: 0x8904,
	15259: 0x8905,
	15260: 0x8906,
	15261: 0x8907,
	15262: 0x8908,
	15263: 0x8909,
	15264: 0x890B,
	15265: 0x890C,
	15266: 0x890D,
	15267: 0x890E,
	15268: 0x890F,
	15269: 0x8911,
	15270: 0x8914,
	15271: 0x8915,
	15272: 0x8916,
	15273: 0x8917,
	15274: 0x8918,
	15275: 0x891C,
	15276: 0x891D,
	15277: 0x891E,
	15278: 0x891F,
	15279: 0x8920,
	15280: 0x8922,
	15281: 0x8923,
	15282: 0x8924,
	15283: 0x8926,
	15284: 0x8927,
	15285: 0x8928,
	15286: 0x8929,
	15287: 0x892C,
	15288: 0x892D,
	15289: 0x892E,
	15290: 0x892F,
	15291: 0x8931,
	15292: 0x8932,
	15293: 0x8933,
	15294: 0x8935,
	15295: 0x8937,
	15296: 0x9009,
	15297: 0x7663,
	15298: 0x7729,
	15299: 0x7EDA,
	15300: 0x9774,
	15301: 0x859B,
	15302: 0x5B66,
	15303: 0x7A74,
	15304: 0x96EA,
	15305: 0x8840,
	15306: 0x52CB,
	15307: 0x718F,
	15308: 0x5FAA,
	15309: 0x65EC,
	15310: 0x8BE2,
	15311: 0x5BFB,
	15312: 0x9A6F,
	15313: 0x5DE1,
	15314: 0x6B89,
	15315: 0x6C5B,
	15316: 0x8BAD,
	15317: 0x8BAF,
	15318: 0x900A,
	15319: 0x8FC5,
	15320: 0x538B,
	15321: 0x62BC,
	15322: 0x9E26,
	15323: 0x9E2D,
	15324: 0x5440,
	15325: 0x4E2B,
	15326: 0x82BD,
	15327: 0x7259,
	15328: 0x869C,
	15329: 0x5D16,
	15330: 0x8859,
	15331: 0x6DAF,
	15332: 0x96C5,
	15333: 0x54D1,
	15334: 0x4E9A,
	15335: 0x8BB6,
	15336: 0x7109,
	15337: 0x54BD,
	15338: 0x9609,
	15339: 0x70DF,
	15340: 0x6DF9,
	15341: 0x76D0,
	15342: 0x4E25,
	15343: 0x7814,
	15344: 0x8712,
	15345: 0x5CA9,
	15346: 0x5EF6,
	15347: 0x8A00,
	15348: 0x989C,
	15349: 0x960E,
	15350: 0x708E,
	15351: 0x6CBF,
	15352: 0x5944,
	15353: 0x63A9,
	15354: 0x773C,
	15355: 0x884D,
	15356: 0x6F14,
	15357: 0x8273,
	15358: 0x5830,
	15359: 0x71D5,
	15360: 0x538C,
	15361: 0x781A,
	15362: 0x96C1,
	15363: 0x5501,
	15364: 0x5F66,
	15365: 0x7130,
	15366: 0x5BB4,
	15367: 0x8C1A,
	15368: 0x9A8C,
	15369: 0x6B83,
	15370: 0x592E,
	15371: 0x9E2F,
	15372: 0x79E7,
	15373: 0x6768,
	15374: 0x626C,
	15375: 0x4F6F,
	15376: 0x75A1,
	15377: 0x7F8A,
	15378: 0x6D0B,
	15379: 0x9633,
	15380: 0x6C27,
	15381: 0x4EF0,
	15382: 0x75D2,
	15383: 0x517B,
	15384: 0x6837,
	15385: 0x6F3E,
	15386: 0x9080,
	15387: 0x8170,
	15388: 0x5996,
	15389: 0x7476,
	15390: 0x8938,
	15391: 0x8939,
	15392: 0x893A,
	15393: 0x893B,
	15394: 0x893C,
	15395: 0x893D,
	15396: 0x893E,
	15397: 0x893F,
	15398: 0x8940,
	15399: 0x8942,
	15400: 0x8943,
	15401: 0x8945,
	15402: 0x8946,
	15403: 0x8947,
	15404: 0x8948,
	15405: 0x8949,
	15406: 0x894A,
	15407: 0x894B,
	15408: 0x894C,
	15409: 0x894D,
	15410: 0x894E,
	15411: 0x894F,
	15412: 0x8950,
	15413: 0x8951,
	15414: 0x8952,
	15415: 0x8953,
	15416: 0x8954,
	15417: 0x8955,
	15418: 0x8956,
	15419: 0x8957,
	15420: 0x8958,
	15421: 0x8959,
	15422: 0x895A,
	15423: 0x895B,
	15424: 0x895C,
	15425: 0x895D,
	15426: 0x8960,
	15427: 0x8961,
	15428: 0x8962,
	15429: 0x8963,
	15430: 0x8964,
	15431: 0x8965,
	15432: 0x8967,
	15433: 0x8968,
	15434: 0x8969,
	15435: 0x896A,
	15436: 0x896B,
	15437: 0x896C,
	15438: 0x896D,
	15439: 0x896E,
	15440: 0x896F,
	15441: 0x8970,
	15442: 0x8971,
	15443: 0x8972,
	15444: 0x8973,
	15445: 0x8974,
	15446: 0x8975,
	15447: 0x8976,
	15448: 0x8977,
	15449: 0x8978,
	15450: 0x8979,
	15451: 0x897A,
	15452: 0x897C,
	15453: 0x897D,
	15454: 0x897E,
	15455: 0x8980,
	15456: 0x8982,
	15457: 0x8984,
	15458: 0x8985,
	15459: 0x8987,
	15460: 0x8988,
	15461: 0x8989,
	15462: 0x898A,
	15463: 0x898B,
	15464: 0x898C,
	15465: 0x898D,
	15466: 0x898E,
	15467: 0x898F,
	15468: 0x8990,
	15469: 0x8991,
	15470: 0x8992,
	15471: 0x8993,
	15472: 0x8994,
	15473: 0x8995,
	15474: 0x8996,
	15475: 0x8997,
	15476: 0x8998,
	15477: 0x8999,
	15478: 0x899A,
	15479: 0x899B,
	15480: 0x899C,
	15481: 0x899D,
	15482: 0x899E,
	15483: 0x899F,
	15484: 0x89A0,
	15485: 0x89A1,
	15486: 0x6447,
	15487: 0x5C27,
	15488: 0x9065,
	15489: 0x7A91,
	15490: 0x8C23,
	15491: 0x59DA,
	15492: 0x54AC,
	15493: 0x8200,
	15494: 0x836F,
	15495: 0x8981,
	15496: 0x8000,
	15497: 0x6930,
	15498: 0x564E,
	15499: 0x8036,
	15500: 0x7237,
	15501: 0x91CE,
	15502: 0x51B6,
	15503: 0x4E5F,
	15504: 0x9875,
	15505: 0x6396,
	15506: 0x4E1A,
	15507: 0x53F6,
	15508: 0x66F3,
	15509: 0x814B,
	15510: 0x591C,
	15511: 0x6DB2,
	15512: 0x4E00,
	15513: 0x58F9,
	15514: 0x533B,
	15515: 0x63D6,
	15516: 0x94F1,
	15517: 0x4F9D,
	15518: 0x4F0A,
	15519: 0x8863,
	15520: 0x9890,
	15521: 0x5937,
	15522: 0x9057,
	15523: 0x79FB,
	15524: 0x4EEA,
	15525: 0x80F0,
	15526: 0x7591,
	15527: 0x6C82,
	15528: 0x5B9C,
	15529: 0x59E8,
	15530: 0x5F5D,
	15531: 0x6905,
	15532: 0x8681,
	15533: 0x501A,
	15534: 0x5DF2,
	15535: 0x4E59,
	15536: 0x77E3,
	15537: 0x4EE5,
	15538: 0x827A,
	15539: 0x6291,
	15540: 0x6613,
	15541: 0x9091,
	15542: 0x5C79,
	15543: 0x4EBF,
	15544: 0x5F79,
	15545: 0x81C6,
	15546: 0x9038,
	15547: 0x8084,
	15548: 0x75AB,
	15549: 0x4EA6,
	15550: 0x88D4,
	15551: 0x610F,
	15552: 0x6BC5,
	15553: 0x5FC6,
	15554: 0x4E49,
	15555: 0x76CA,
	15556: 0x6EA2,
	15557: 0x8BE3,
	15558: 0x8BAE,
	15559: 0x8C0A,
	15560: 0x8BD1,
	15561: 0x5F02,
	15562: 0x7FFC,
	15563: 0x7FCC,
	15564: 0x7ECE,
	15565: 0x8335,
	15566: 0x836B,
	15567: 0x56E0,
	15568: 0x6BB7,
	15569: 0x97F3,
	15570: 0x9634,
	15571: 0x59FB,
	15572: 0x541F,
	15573: 0x94F6,
	15574: 0x6DEB,
	15575: 0x5BC5,
	15576: 0x996E,
	15577: 0x5C39,
	15578: 0x5F15,
	15579: 0x9690,
	15580: 0x89A2,
	15581: 0x89A3,
	15582: 0x89A4,
	15583: 0x89A5,
	15584: 0x89A6,
	15585: 0x89A7,
	15586: 0x89A8,
	15587: 0x89A9,
	15588: 0x89AA,
	15589: 0x89AB,
	15590: 0x89AC,
	15591: 0x89AD,
	15592: 0x89AE,
	15593: 0x89AF,
	15594: 0x89B0,
	15595: 0x89B1,
	15596: 0x89B2,
	15597: 0x89B3,
	15598: 0x89B4,
	15599: 0x89B5,
	15600: 0x89B6,
	15601: 0x89B7,
	15602: 0x89B8,
	15603: 0x89B9,
	15604: 0x89BA,
	15605: 0x89BB,
	15606: 0x89BC,
	15607: 0x89BD,
	15608: 0x89BE,
	15609: 0x89BF,
	15610: 0x89C0,
	15611: 0x89C3,
	15612: 0x89CD,
	15613: 0x89D3,
	15614: 0x89D4,
	15615: 0x89D5,
	15616: 0x89D7,
	15617: 0x89D8,
	15618: 0x89D9,
	15619: 0x89DB,
	15620: 0x89DD,
	15621: 0x89DF,
	15622: 0x89E0,
	15623: 0x89E1,
	15624: 0x89E2,
	15625: 0x89E4,
	15626: 0x89E7,
	15627: 0x89E8,
	15628: 0x89E9,
	15629: 0x89EA,
	15630: 0x89EC,
	15631: 0x89ED,
	15632: 0x89EE,
	15633: 0x89F0,
	15634: 0x89F1,
	15635: 0x89F2,
	15636: 0x89F4,
	15637: 0x89F5,
	15638: 0x89F6,
	15639: 0x89F7,
	15640: 0x89F8,
	15641: 0x89F9,
	15642: 0x89FA,
	15643: 0x89FB,
	15644: 0x89FC,
	15645: 0x89FD,
	15646: 0x89FE,
	15647: 0x89FF,
	15648: 0x8A01,
	15649: 0x8A02,
	15650: 0x8A03,
	15651: 0x8A04,
	15652: 0x8A05,
	15653: 0x8A06,
	15654: 0x8A08,
	15655: 0x8A09,
	15656: 0x8A0A,
	15657: 0x8A0B,
	15658: 0x8A0C,
	15659: 0x8A0D,
	15660: 0x8A0E,
	15661: 0x8A0F,
	15662: 0x8A10,
	15663: 0x8A11,
	15664: 0x8A12,
	15665: 0x8A13,
	15666: 0x8A14,
	15667: 0x8A15,
	15668: 0x8A16,
	15669: 0x8A17,
	15670: 0x8A18,
	15671: 0x8A19,
	15672: 0x8A1A,
	15673: 0x8A1B,
	15674: 0x8A1C,
	15675: 0x8A1D,
	15676: 0x5370,
	15677: 0x82F1,
	15678: 0x6A31,
	15679: 0x5A74,
	15680: 0x9E70,
	15681: 0x5E94,
	15682: 0x7F28,
	15683: 0x83B9,
	15684: 0x8424,
	15685: 0x8425,
	15686: 0x8367,
	15687: 0x8747,
	15688: 0x8FCE,
	15689: 0x8D62,
	15690: 0x76C8,
	15691: 0x5F71,
	15692: 0x9896,
	15693: 0x786C,
	15694: 0x6620,
	15695: 0x54DF,
	15696: 0x62E5,
	15697: 0x4F63,
	15698: 0x81C3,
	15699: 0x75C8,
	15700: 0x5EB8,
	15701: 0x96CD,
	15702: 0x8E0A,
	15703: 0x86F9,
	15704: 0x548F,
	15705: 0x6CF3,
	15706: 0x6D8C,
	15707: 0x6C38,
	15708: 0x607F,
	15709: 0x52C7,
	15710: 0x7528,
	15711: 0x5E7D,
	15712: 0x4F18,
	15713: 0x60A0,
	15714: 0x5FE7,
	15715: 0x5C24,
	15716: 0x7531,
	15717: 0x90AE,
	15718: 0x94C0,
	15719: 0x72B9,
	15720: 0x6CB9,
	15721: 0x6E38,
	15722: 0x9149,
	15723: 0x6709,
	15724: 0x53CB,
	15725: 0x53F3,
	15726: 0x4F51,
	15727: 0x91C9,
	15728: 0x8BF1,
	15729: 0x53C8,
	15730: 0x5E7C,
	15731: 0x8FC2,
	15732: 0x6DE4,
	15733: 0x4E8E,
	15734: 0x76C2,
	15735: 0x6986,
	15736: 0x865E,
	15737: 0x611A,
	15738: 0x8206,
	15739: 0x4F59,
	15740: 0x4FDE,
	15741: 0x903E,
	15742: 0x9C7C,
	15743: 0x6109,
	15744: 0x6E1D,
	15745: 0x6E14,
	15746: 0x9685,
	15747: 0x4E88,
	15748: 0x5A31,
	15749: 0x96E8,
	15750: 0x4E0E,
	15751: 0x5C7F,
	15752: 0x79B9,
	15753: 0x5B87,
	15754: 0x8BED,
	15755: 0x7FBD,
	15756: 0x7389,
	15757: 0x57DF,
	15758: 0x828B,
	15759: 0x90C1,
	15760: 0x5401,
	15761: 0x9047,
	15762: 0x55BB,
	15763: 0x5CEA,
	15764: 0x5FA1,
	15765: 0x6108,
	15766: 0x6B32,
	15767: 0x72F1,
	15768: 0x80B2,
	15769: 0x8A89,
	15770: 0x8A1E,
	15771: 0x8A1F,
	15772: 0x8A20,
	15773: 0x8A21,
	15774: 0x8A22,
	15775: 0x8A23,
	15776: 0x8A24,
	15777: 0x8A25,
	15778: 0x8A26,
	15779: 0x8A27,
	15780: 0x8A28,
	15781: 0x8A29,
	15782: 0x8A2A,
	15783: 0x8A2B,
	15784: 0x8A2C,
	15785: 0x8A2D,
	15786: 0x8A2E,
	15787: 0x8A2F,
	15788: 0x8A30,
	15789: 0x8A31,
	15790: 0x8A32,
	15791: 0x8A33,
	15792: 0x8A34,
	15793: 0x8A35,
	15794: 0x8A36,
	15795: 0x8A37,
	15796: 0x8A38,
	15797: 0x8A39,
	15798: 0x8A3A,
	15799: 0x8A3B,
	15800: 0x8A3C,
	15801: 0x8A3D,
	15802: 0x8A3F,
	15803: 0x8A40,
	15804: 0x8A41,
	15805: 0x8A42,
	15806: 0x8A43,
	15807: 0x8A44,
	15808: 0x8A45,
	15809: 0x8A46,
	15810: 0x8A47,
	15811: 0x8A49,
	15812: 0x8A4A,
	15813: 0x8A4B,
	15814: 0x8A4C,
	15815: 0x8A4D,
	15816: 0x8A4E,
	15817: 0x8A4F,
	15818: 0x8A50,
	15819: 0x8A51,
	15820: 0x8A52,
	15821: 0x8A53,
	15822: 0x8A54,
	15823: 0x8A55,
	15824: 0x8A56,
	15825: 0x8A57,
	15826: 0x8A58,
	15827: 0x8A59,
	15828: 0x8A5A,
	15829: 0x8A5B,
	15830: 0x8A5C,
	15831: 0x8A5D,
	15832: 0x8A5E,
	15833: 0x8A5F,
	15834: 0x8A60,
	15835: 0x8A61,
	15836: 0x8A62,
	15837: 0x8A63,
	15838: 0x8A64,
	15839: 0x8A65,
	15840: 0x8A66,
	15841: 0x8A67,
	15842: 0x8A68,
	15843: 0x8A69,
	15844: 0x8A6A,
	15845: 0x8A6B,
	15846: 0x8A6C,
	15847: 0x8A6D,
	15848: 0x8A6E,
	15849: 0x8A6F,
	15850: 0x8A70,
	15851: 0x8A71,
	15852: 0x8A72,
	15853: 0x8A73,
	15854: 0x8A74,
	15855: 0x8A75,
	15856: 0x8A76,
	15857: 0x8A77,
	15858: 0x8A78,
	15859: 0x8A7A,
	15860: 0x8A7B,
	15861: 0x8A7C,
	15862: 0x8A7D,
	15863: 0x8A7E,
	15864: 0x8A7F,
	15865: 0x8A80,
	15866: 0x6D74,
	15867: 0x5BD3,
	15868: 0x88D5,
	15869: 0x9884,
	15870: 0x8C6B,
	15871: 0x9A6D,
	15872: 0x9E33,
	15873: 0x6E0A,
	15874: 0x51A4,
	15875: 0x5143,
	15876: 0x57A3,
	15877: 0x8881,
	15878: 0x539F,
	15879: 0x63F4,
	15880: 0x8F95,
	15881: 0x56ED,
	15882: 0x5458,
	15883: 0x5706,
	15884: 0x733F,
	15885: 0x6E90,
	15886: 0x7F18,
	15887: 0x8FDC,
	15888: 0x82D1,
	15889: 0x613F,
	15890: 0x6028,
	15891: 0x9662,
	15892: 0x66F0,
	15893: 0x7EA6,
	15894: 0x8D8A,
	15895: 0x8DC3,
	15896: 0x94A5,
	15897: 0x5CB3,
	15898: 0x7CA4,
	15899: 0x6708,
	15900: 0x60A6,
	15901: 0x9605,
	15902: 0x8018,
	15903: 0x4E91,
	15904: 0x90E7,
	15905: 0x5300,
	15906: 0x9668,
	15907: 0x5141,
	15908: 0x8FD0,
	15909: 0x8574,
	15910: 0x915D,
	15911: 0x6655,
	15912: 0x97F5,
	15913: 0x5B55,
	15914: 0x531D,
	15915: 0x7838,
	15916: 0x6742,
	15917: 0x683D,
	15918: 0x54C9,
	15919: 0x707E,
	15920: 0x5BB0,
	15921: 0x8F7D,
	15922: 0x518D,
	15923: 0x5728,
	15924: 0x54B1,
	15925: 0x6512,
	15926: 0x6682,
	15927: 0x8D5E,
	15928: 0x8D43,
	15929: 0x810F,
	15930: 0x846C,
	15931: 0x906D,
	15932: 0x7CDF,
	15933: 0x51FF,
	15934: 0x85FB,
	15935: 0x67A3,
	15936: 0x65E9,
	15937: 0x6FA1,
	15938: 0x86A4,
	15939: 0x8E81,
	15940: 0x566A,
	15941: 0x9020,
	15942: 0x7682,
	15943: 0x7076,
	15944: 0x71E5,
	15945: 0x8D23,
	15946: 0x62E9,
	15947: 0x5219,
	15948: 0x6CFD,
	15949: 0x8D3C,
	15950: 0x600E,
	15951: 0x589E,
	15952: 0x618E,
	15953: 0x66FE,
	15954: 0x8D60,
	15955: 0x624E,
	15956: 0x55B3,
	15957: 0x6E23,
	15958: 0x672D,
	15959: 0x8F67,
	15960: 0x8A81,
	15961: 0x8A82,
	15962: 0x8A83,
	15963: 0x8A84,
	15964: 0x8A85,
	15965: 0x8A86,
	15966: 0x8A87,
	15967: 0x8A88,
	15968: 0x8A8B,
	15969: 0x8A8C,
	15970: 0x8A8D,
	15971: 0x8A8E,
	15972: 0x8A8F,
	15973: 0x8A90,
	15974: 0x8A91,
	15975: 0x8A92,
	15976: 0x8A94,
	15977: 0x8A95,
	15978: 0x8A96,
	15979: 0x8A97,
	15980: 0x8A98,
	15981: 0x8A99,
	15982: 0x8A9A,
	15983: 0x8A9B,
	15984: 0x8A9C,
	15985: 0x8A9D,
	15986: 0x8A9E,
	15987: 0x8A9F,
	15988: 0x8AA0,
	15989: 0x8AA1,
	15990: 0x8AA2,
	15991: 0x8AA3,
	15992: 0x8AA4,
	15993: 0x8AA5,
	15994: 0x8AA6,
	15995: 0x8AA7,
	15996: 0x8AA8,
	15997: 0x8AA9,
	15998: 0x8AAA,
	15999: 0x8AAB,
	16000: 0x8AAC,
	16001: 0x8AAD,
	16002: 0x8AAE,
	16003: 0x8AAF,
	16004: 0x8AB0,
	16005: 0x8AB1,
	16006: 0x8AB2,
	16007: 0x8AB3,
	16008: 0x8AB4,
	16009: 0x8AB5,
	16010: 0x8AB6,
	16011: 0x8AB7,
	16012: 0x8AB8,
	16013: 0x8AB9,
	16014: 0x8ABA,
	16015: 0x8ABB,
	16016: 0x8ABC,
	16017: 0x8ABD,
	16018: 0x8ABE,
	16019: 0x8ABF,
	16020: 0x8AC0,
	16021: 0x8AC1,
	16022: 0x8AC2,
	16023: 0x8AC3,
	16024: 0x8AC4,
	16025: 0x8AC5,
	16026: 0x8AC6,
	16027: 0x8AC7,
	16028: 0x8AC8,
	16029: 0x8AC9,
	16030: 0x8ACA,
	16031: 0x8ACB,
	16032: 0x8ACC,
	16033: 0x8ACD,
	16034: 0x8ACE,
	16035: 0x8ACF,
	16036: 0x8AD0,
	16037: 0x8AD1,
	16038: 0x8AD2,
	16039: 0x8AD3,
	16040: 0x8AD4,
	16041: 0x8AD5,
	16042: 0x8AD6,
	16043: 0x8AD7,
	16044: 0x8AD8,
	16045: 0x8AD9,
	16046: 0x8ADA,
	16047: 0x8ADB,
	16048: 0x8ADC,
	16049: 0x8ADD,
	16050: 0x8ADE,
	16051: 0x8ADF,
	16052: 0x8AE0,
	16053: 0x8AE1,
	16054: 0x8AE2,
	16055: 0x8AE3,
	16056: 0x94E1,
	16057: 0x95F8,
	16058: 0x7728,
	16059: 0x6805,
	16060: 0x69A8,
	16061: 0x548B,
	16062: 0x4E4D,
	16063: 0x70B8,
	16064: 0x8BC8,
	16065: 0x6458,
	16066: 0x658B,
	16067: 0x5B85,
	16068: 0x7A84,
	16069: 0x503A,
	16070: 0x5BE8,
	16071: 0x77BB,
	16072: 0x6BE1,
	16073: 0x8A79,
	16074: 0x7C98,
	16075: 0x6CBE,
	16076: 0x76CF,
	16077: 0x65A9,
	16078: 0x8F97,
	16079: 0x5D2D,
	16080: 0x5C55,
	16081: 0x8638,
	16082: 0x6808,
	16083: 0x5360,
	16084: 0x6218,
	16085: 0x7AD9,
	16086: 0x6E5B,
	16087: 0x7EFD,
	16088: 0x6A1F,
	16089: 0x7AE0,
	16090: 0x5F70,
	16091: 0x6F33,
	16092: 0x5F20,
	16093: 0x638C,
	16094: 0x6DA8,
	16095: 0x6756,
	16096: 0x4E08,
	16097: 0x5E10,
	16098: 0x8D26,
	16099: 0x4ED7,
	16100: 0x80C0,
	16101: 0x7634,
	16102: 0x969C,
	16103: 0x62DB,
	16104: 0x662D,
	16105: 0x627E,
	16106: 0x6CBC,
	16107: 0x8D75,
	16108: 0x7167,
	16109: 0x7F69,
	16110: 0x5146,
	16111: 0x8087,
	16112: 0x53EC,
	16113: 0x906E,
	16114: 0x6298,
	16115: 0x54F2,
	16116: 0x86F0,
	16117: 0x8F99,
	16118: 0x8005,
	16119: 0x9517,
	16120: 0x8517,
	16121: 0x8FD9,
	16122: 0x6D59,
	16123: 0x73CD,
	16124: 0x659F,
	16125: 0x771F,
	16126: 0x7504,
	16127: 0x7827,
	16128: 0x81FB,
	16129: 0x8D1E,
	16130: 0x9488,
	16131: 0x4FA6,
	16132: 0x6795,
	16133: 0x75B9,
	16134: 0x8BCA,
	16135: 0x9707,
	16136: 0x632F,
	16137: 0x9547,
	16138: 0x9635,
	16139: 0x84B8,
	16140: 0x6323,
	16141: 0x7741,
	16142: 0x5F81,
	16143: 0x72F0,
	16144: 0x4E89,
	16145: 0x6014,
	16146: 0x6574,
	16147: 0x62EF,
	16148: 0x6B63,
	16149: 0x653F,
	16150: 0x8AE4,
	16151: 0x8AE5,
	16152: 0x8AE6,
	16153: 0x8AE7,
	16154: 0x8AE8,
	16155: 0x8AE9,
	16156: 0x8AEA,
	16157: 0x8AEB,
	16158: 0x8AEC,
	16159: 0x8AED,
	16160: 0x8AEE,
	16161: 0x8AEF,
	16162: 0x8AF0,
	16163: 0x8AF1,
	16164: 0x8AF2,
	16165: 0x8AF3,
	16166: 0x8AF4,
	16167: 0x8AF5,
	16168: 0x8AF6,
	16169: 0x8AF7,
	16170: 0x8AF8,
	16171: 0x8AF9,
	16172: 0x8AFA,
	16173: 0x8AFB,
	16174: 0x8AFC,
	16175: 0x8AFD,
	16176: 0x8AFE,
	16177: 0x8AFF,
	16178: 0x8B00,
	16179: 0x8B01,
	16180: 0x8B02,
	16181: 0x8B03,
	16182: 0x8B04,
	16183: 0x8B05,
	16184: 0x8B06,
	16185: 0x8B08,
	16186: 0x8B09,
	16187: 0x8B0A,
	16188: 0x8B0B,
	16189: 0x8B0C,
	16190: 0x8B0D,
	16191: 0x8B0E,
	16192: 0x8B0F,
	16193: 0x8B10,
	16194: 0x8B11,
	16195: 0x8B12,
	16196: 0x8B13,
	16197: 0x8B14,
	16198: 0x8B15,
	16199: 0x8B16,
	16200: 0x8B17,
	16201: 0x8B18,
	16202: 0x8B19,
	16203: 0x8B1A,
	16204: 0x8B1B,
	16205: 0x8B1C,
	16206: 0x8B1D,
	16207: 0x8B1E,
	16208: 0x8B1F,
	16209: 0x8B20,
	16210: 0x8B21,
	16211: 0x8B22,
	16212: 0x8B23,
	16213: 0x8B24,
	16214: 0x8B25,
	16215: 0x8B27,
	16216: 0x8B28,
	16217: 0x8B29,
	16218: 0x8B2A,
	16219: 0x8B2B,
	16220: 0x8B2C,
	16221: 0x8B2D,
	16222: 0x8B2E,
	16223: 0x8B2F,
	16224: 0x8B30,
	16225: 0x8B31,
	16226: 0x8B32,
	16227: 0x8B33,
	16228: 0x8B34,
	16229: 0x8B35,
	16230: 0x8B36,
	16231: 0x8B37,
	16232: 0x8B38,
	16233: 0x8B39,
	16234: 0x8B3A,
	16235: 0x8B3B,
	16236: 0x8B3C,
	16237: 0x8B3D,
	16238: 0x8B3E,
	16239: 0x8B3F,
	16240: 0x8B40,
	16241: 0x8B41,
	16242: 0x8B42,
	16243: 0x8B43,
	16244: 0x8B44,
	16245: 0x8B45,
	16246: 0x5E27,
	16247: 0x75C7,
	16248: 0x90D1,
	16249: 0x8BC1,
	16250: 0x829D,
	16251: 0x679D,
	16252: 0x652F,
	16253: 0x5431,
	16254: 0x8718,
	16255: 0x77E5,
	16256: 0x80A2,
	16257: 0x8102,
	16258: 0x6C41,
	16259: 0x4E4B,
	16260: 0x7EC7,
	16261: 0x804C,
	16262: 0x76F4,
	16263: 0x690D,
	16264: 0x6B96,
	16265: 0x6267,
	16266: 0x503C,
	16267: 0x4F84,
	16268: 0x5740,
	16269: 0x6307,
	16270: 0x6B62,
	16271: 0x8DBE,
	16272: 0x53EA,
	16273: 0x65E8,
	16274: 0x7EB8,
	16275: 0x5FD7,
	16276: 0x631A,
	16277: 0x63B7,
	16278: 0x81F3,
	16279: 0x81F4,
	16280: 0x7F6E,
	16281: 0x5E1C,
	16282: 0x5CD9,
	16283: 0x5236,
	16284: 0x667A,
	16285: 0x79E9,
	16286: 0x7A1A,
	16287: 0x8D28,
	16288: 0x7099,
	16289: 0x75D4,
	16290: 0x6EDE,
	16291: 0x6CBB,
	16292: 0x7A92,
	16293: 0x4E2D,
	16294: 0x76C5,
	16295: 0x5FE0,
	16296: 0x949F,
	16297: 0x8877,
	16298: 0x7EC8,
	16299: 0x79CD,
	16300: 0x80BF,
	16301: 0x91CD,
	16302: 0x4EF2,
	16303: 0x4F17,
	16304: 0x821F,
	16305: 0x5468,
	16306: 0x5DDE,
	16307: 0x6D32,
	16308: 0x8BCC,
	16309: 0x7CA5,
	16310: 0x8F74,
	16311: 0x8098,
	16312: 0x5E1A,
	16313: 0x5492,
	16314: 0x76B1,
	16315: 0x5B99,
	16316: 0x663C,
	16317: 0x9AA4,
	16318: 0x73E0,
	16319: 0x682A,
	16320: 0x86DB,
	16321: 0x6731,
	16322: 0x732A,
	16323: 0x8BF8,
	16324: 0x8BDB,
	16325: 0x9010,
	16326: 0x7AF9,
	16327: 0x70DB,
	16328: 0x716E,
	16329: 0x62C4,
	16330: 0x77A9,
	16331: 0x5631,
	16332: 0x4E3B,
	16333: 0x8457,
	16334: 0x67F1,
	16335: 0x52A9,
	16336: 0x86C0,
	16337: 0x8D2E,
	16338: 0x94F8,
	16339: 0x7B51,
	16340: 0x8B46,
	16341: 0x8B47,
	16342: 0x8B48,
	16343: 0x8B49,
	16344: 0x8B4A,
	16345: 0x8B4B,
	16346: 0x8B4C,
	16347: 0x8B4D,
	16348: 0x8B4E,
	16349: 0x8B4F,
	16350: 0x8B50,
	16351: 0x8B51,
	16352: 0x8B52,
	16353: 0x8B53,
	16354: 0x8B54,
	16355: 0x8B55,
	16356: 0x8B56,
	16357: 0x8B57,
	16358: 0x8B58,
	16359: 0x8B59,
	16360: 0x8B5A,
	16361: 0x8B5B,
	16362: 0x8B5C,
	16363: 0x8B5D,
	16364: 0x8B5E,
	16365: 0x8B5F,
	16366: 0x8B60,
	16367: 0x8B61,
	16368: 0x8B62,
	16369: 0x8B63,
	16370: 0x8B64,
	16371: 0x8B65,
	16372: 0x8B67,
	16373: 0x8B68,
	16374: 0x8B69,
	16375: 0x8B6A,
	16376: 0x8B6B,
	16377: 0x8B6D,
	16378: 0x8B6E,
	16379: 0x8B6F,
	16380: 0x8B70,
	16381: 0x8B71,
	16382: 0x8B72,
	16383: 0x8B73,
	16384: 0x8B74,
	16385: 0x8B75,
	16386: 0x8B76,
	16387: 0x8B77,
	16388: 0x8B78,
	16389: 0x8B79,
	16390: 0x8B7A,
	16391: 0x8B7B,
	16392: 0x8B7C,
	16393: 0x8B7D,
	16394: 0x8B7E,
	16395: 0x8B7F,
	16396: 0x8B80,
	16397: 0x8B81,
	16398: 0x8B82,
	16399: 0x8B83,
	16400: 0x8B84,
	16401: 0x8B85,
	16402: 0x8B86,
	16403: 0x8B87,
	16404: 0x8B88,
	16405: 0x8B89,
	16406: 0x8B8A,
	16407: 0x8B8B,
	16408: 0x8B8C,
	16409: 0x8B8D,
	16410: 0x8B8E,
	16411: 0x8B8F,
	16412: 0x8B90,
	16413: 0x8B91,
	16414: 0x8B92,
	16415: 0x8B93,
	16416: 0x8B94,
	16417: 0x8B95,
	16418: 0x8B96,
	16419: 0x8B97,
	16420: 0x8B98,
	16421: 0x8B99,
	16422: 0x8B9A,
	16423: 0x8B9B,
	16424: 0x8B9C,
	16425: 0x8B9D,
	16426: 0x8B9E,
	16427: 0x8B9F,
	16428: 0x8BAC,
	16429: 0x8BB1,
	16430: 0x8BBB,
	16431: 0x8BC7,
	16432: 0x8BD0,
	16433: 0x8BEA,
	16434: 0x8C09,
	16435: 0x8C1E,
	16436: 0x4F4F,
	16437: 0x6CE8,
	16438: 0x795D,
	16439: 0x9A7B,
	16440: 0x6293,
	16441: 0x722A,
	16442: 0x62FD,
	16443: 0x4E13,
	16444: 0x7816,
	16445: 0x8F6C,
	16446: 0x64B0,
	16447: 0x8D5A,
	16448: 0x7BC6,
	16449: 0x6869,
	16450: 0x5E84,
	16451: 0x88C5,
	16452: 0x5986,
	16453: 0x649E,
	16454: 0x58EE,
	16455: 0x72B6,
	16456: 0x690E,
	16457: 0x9525,
	16458: 0x8FFD,
	16459: 0x8D58,
	16460: 0x5760,
	16461: 0x7F00,
	16462: 0x8C06,
	16463: 0x51C6,
	16464: 0x6349,
	16465: 0x62D9,
	16466: 0x5353,
	16467: 0x684C,
	16468: 0x7422,
	16469: 0x8301,
	16470: 0x914C,
	16471: 0x5544,
	16472: 0x7740,
	16473: 0x707C,
	16474: 0x6D4A,
	16475: 0x5179,
	16476: 0x54A8,
	16477: 0x8D44,
	16478: 0x59FF,
	16479: 0x6ECB,
	16480: 0x6DC4,
	16481: 0x5B5C,
	16482: 0x7D2B,
	16483: 0x4ED4,
	16484: 0x7C7D,
	16485: 0x6ED3,
	16486: 0x5B50,
	16487: 0x81EA,
	16488: 0x6E0D,
	16489: 0x5B57,
	16490: 0x9B03,
	16491: 0x68D5,
	16492: 0x8E2A,
	16493: 0x5B97,
	16494: 0x7EFC,
	16495: 0x603B,
	16496: 0x7EB5,
	16497: 0x90B9,
	16498: 0x8D70,
	16499: 0x594F,
	16500: 0x63CD,
	16501: 0x79DF,
	16502: 0x8DB3,
	16503: 0x5352,
	16504: 0x65CF,
	16505: 0x7956,
	16506: 0x8BC5,
	16507: 0x963B,
	16508: 0x7EC4,
	16509: 0x94BB,
	16510: 0x7E82,
	16511: 0x5634,
	16512: 0x9189,
	16513: 0x6700,
	16514: 0x7F6A,
	16515: 0x5C0A,
	16516: 0x9075,
	16517: 0x6628,
	16518: 0x5DE6,
	16519: 0x4F50,
	16520: 0x67DE,
	16521: 0x505A,
	16522: 0x4F5C,
	16523: 0x5750,
	16524: 0x5EA7,
	16530: 0x8C38,
	16531: 0x8C39,
	16532: 0x8C3A,
	16533: 0x8C3B,
	16534: 0x8C3C,
	16535: 0x8C3D,
	16536: 0x8C3E,
	16537: 0x8C3F,
	16538: 0x8C40,
	16539: 0x8C42,
	16540: 0x8C43,
	16541: 0x8C44,
	16542: 0x8C45,
	16543: 0x8C48,
	16544: 0x8C4A,
	16545: 0x8C4B,
	16546: 0x8C4D,
	16547: 0x8C4E,
	16548: 0x8C4F,
	16549: 0x8C50,
	16550: 0x8C51,
	16551: 0x8C52,
	16552: 0x8C53,
	16553: 0x8C54,
	16554: 0x8C56,
	16555: 0x8C57,
	16556: 0x8C58,
	16557: 0x8C59,
	16558: 0x8C5B,
	16559: 0x8C5C,
	16560: 0x8C5D,
	16561: 0x8C5E,
	16562: 0x8C5F,
	16563: 0x8C60,
	16564: 0x8C63,
	16565: 0x8C64,
	16566: 0x8C65,
	16567: 0x8C66,
	16568: 0x8C67,
	16569: 0x8C68,
	16570: 0x8C69,
	16571: 0x8C6C,
	16572: 0x8C6D,
	16573: 0x8C6E,
	16574: 0x8C6F,
	16575: 0x8C70,
	16576: 0x8C71,
	16577: 0x8C72,
	16578: 0x8C74,
	16579: 0x8C75,
	16580: 0x8C76,
	16581: 0x8C77,
	16582: 0x8C7B,
	16583: 0x8C7C,
	16584: 0x8C7D,
	16585: 0x8C7E,
	16586: 0x8C7F,
	16587: 0x8C80,
	16588: 0x8C81,
	16589: 0x8C83,
	16590: 0x8C84,
	16591: 0x8C86,
	16592: 0x8C87,
	16593: 0x8C88,
	16594: 0x8C8B,
	16595: 0x8C8D,
	16596: 0x8C8E,
	16597: 0x8C8F,
	16598: 0x8C90,
	16599: 0x8C91,
	16600: 0x8C92,
	16601: 0x8C93,
	16602: 0x8C95,
	16603: 0x8C96,
	16604: 0x8C97,
	16605: 0x8C99,
	16606: 0x8C9A,
	16607: 0x8C9B,
	16608: 0x8C9C,
	16609: 0x8C9D,
	16610: 0x8C9E,
	16611: 0x8C9F,
	16612: 0x8CA0,
	16613: 0x8CA1,
	16614: 0x8CA2,
	16615: 0x8CA3,
	16616: 0x8CA4,
	16617: 0x8CA5,
	16618: 0x8CA6,
	16619: 0x8CA7,
	16620: 0x8CA8,
	16621: 0x8CA9,
	16622: 0x8CAA,
	16623: 0x8CAB,
	16624: 0x8CAC,
	16625: 0x8CAD,
	16626: 0x4E8D,
	16627: 0x4E0C,
	16628: 0x5140,
	16629: 0x4E10,
	16630: 0x5EFF,
	16631: 0x5345,
	16632: 0x4E15,
	16633: 0x4E98,
	16634: 0x4E1E,
	16635: 0x9B32,
	16636: 0x5B6C,
	16637: 0x5669,
	16638: 0x4E28,
	16639: 0x79BA,
	16640: 0x4E3F,
	16641: 0x5315,
	16642: 0x4E47,
	16643: 0x592D,
	16644: 0x723B,
	16645: 0x536E,
	16646: 0x6C10,
	16647: 0x56DF,
	16648: 0x80E4,
	16649: 0x9997,
	16650: 0x6BD3,
	16651: 0x777E,
	16652: 0x9F17,
	16653: 0x4E36,
	16654: 0x4E9F,
	16655: 0x9F10,
	16656: 0x4E5C,
	16657: 0x4E69,
	16658: 0x4E93,
	16659: 0x8288,
	16660: 0x5B5B,
	16661: 0x556C,
	16662: 0x560F,
	16663: 0x4EC4,
	16664: 0x538D,
	16665: 0x539D,
	16666: 0x53A3,
	16667: 0x53A5,
	16668: 0x53AE,
	16669: 0x9765,
	16670: 0x8D5D,
	16671: 0x531A,
	16672: 0x53F5,
	16673: 0x5326,
	16674: 0x532E,
	16675: 0x533E,
	16676: 0x8D5C,
	16677: 0x5366,
	16678: 0x5363,
	16679: 0x5202,
	16680: 0x5208,
	16681: 0x520E,
	16682: 0x522D,
	16683: 0x5233,
	16684: 0x523F,
	16685: 0x5240,
	16686: 0x524C,
	16687: 0x525E,
	16688: 0x5261,
	16689: 0x525C,
	16690: 0x84AF,
	16691: 0x527D,
	16692: 0x5282,
	16693: 0x5281,
	16694: 0x5290,
	16695: 0x5293,
	16696: 0x5182,
	16697: 0x7F54,
	16698: 0x4EBB,
	16699: 0x4EC3,
	16700: 0x4EC9,
	16701: 0x4EC2,
	16702: 0x4EE8,
	16703: 0x4EE1,
	16704: 0x4EEB,
	16705: 0x4EDE,
	16706: 0x4F1B,
	16707: 0x4EF3,
	16708: 0x4F22,
	16709: 0x4F64,
	16710: 0x4EF5,
	16711: 0x4F25,
	16712: 0x4F27,
	16713: 0x4F09,
	16714: 0x4F2B,
	16715: 0x4F5E,
	16716: 0x4F67,
	16717: 0x6538,
	16718: 0x4F5A,
	16719: 0x4F5D,
	16720: 0x8CAE,
	16721: 0x8CAF,
	16722: 0x8CB0,
	16723: 0x8CB1,
	16724: 0x8CB2,
	16725: 0x8CB3,
	16726: 0x8CB4,
	16727: 0x8CB5,
	16728: 0x8CB6,
	16729: 0x8CB7,
	16730: 0x8CB8,
	16731: 0x8CB9,
	16732: 0x8CBA,
	16733: 0x8CBB,
	16734: 0x8CBC,
	16735: 0x8CBD,
	16736: 0x8CBE,
	16737: 0x8CBF,
	16738: 0x8CC0,
	16739: 0x8CC1,
	16740: 0x8CC2,
	16741: 0x8CC3,
	16742: 0x8CC4,
	16743: 0x8CC5,
	16744: 0x8CC6,
	16745: 0x8CC7,
	16746: 0x8CC8,
	16747: 0x8CC9,
	16748: 0x8CCA,
	16749: 0x8CCB,
	16750: 0x8CCC,
	16751: 0x8CCD,
	16752: 0x8CCE,
	16753: 0x8CCF,
	16754: 0x8CD0,
	16755: 0x8CD1,
	16756: 0x8CD2,
	16757: 0x8CD3,
	16758: 0x8CD4,
	16759: 0x8CD5,
	16760: 0x8CD6,
	16761: 0x8CD7,
	16762: 0x8CD8,
	16763: 0x8CD9,
	16764: 0x8CDA,
	16765: 0x8CDB,
	16766: 0x8CDC,
	16767: 0x8CDD,
	16768: 0x8CDE,
	16769: 0x8CDF,
	16770: 0x8CE0,
	16771: 0x8CE1,
	16772: 0x8CE2,
	16773: 0x8CE3,
	16774: 0x8CE4,
	16775: 0x8CE5,
	16776: 0x8CE6,
	16777: 0x8CE7,
	16778: 0x8CE8,
	16779: 0x8CE9,
	16780: 0x8CEA,
	16781: 0x8CEB,
	16782: 0x8CEC,
	16783: 0x8CED,
	16784: 0x8CEE,
	16785: 0x8CEF,
	16786: 0x8CF0,
	16787: 0x8CF1,
	16788: 0x8CF2,
	16789: 0x8CF3,
	16790: 0x8CF4,
	16791: 0x8CF5,
	16792: 0x8CF6,
	16793: 0x8CF7,
	16794: 0x8CF8,
	16795: 0x8CF9,
	16796: 0x8CFA,
	16797: 0x8CFB,
	16798: 0x8CFC,
	16799: 0x8CFD,
	16800: 0x8CFE,
	16801: 0x8CFF,
	16802: 0x8D00,
	16803: 0x8D01,
	16804: 0x8D02,
	16805: 0x8D03,
	16806: 0x8D04,
	16807: 0x8D05,
	16808: 0x8D06,
	16809: 0x8D07,
	16810: 0x8D08,
	16811: 0x8D09,
	16812: 0x8D0A,
	16813: 0x8D0B,
	16814: 0x8D0C,
	16815: 0x8D0D,
	16816: 0x4F5F,
	16817: 0x4F57,
	16818: 0x4F32,
	16819: 0x4F3D,
	16820: 0x4F76,
	16821: 0x4F74,
	16822: 0x4F91,
	16823: 0x4F89,
	16824: 0x4F83,
	16825: 0x4F8F,
	16826: 0x4F7E,
	16827: 0x4F7B,
	16828: 0x4FAA,
	16829: 0x4F7C,
	16830: 0x4FAC,
	16831: 0x4F94,
	16832: 0x4FE6,
	16833: 0x4FE8,
	16834: 0x4FEA,
	16835: 0x4FC5,
	16836: 0x4FDA,
	16837: 0x4FE3,
	16838: 0x4FDC,
	16839: 0x4FD1,
	16840: 0x4FDF,
	16841: 0x4FF8,
	16842: 0x5029,
	16843: 0x504C,
	16844: 0x4FF3,
	16845: 0x502C,
	16846: 0x500F,
	16847: 0x502E,
	16848: 0x502D,
	16849: 0x4FFE,
	16850: 0x501C,
	16851: 0x500C,
	16852: 0x5025,
	16853: 0x5028,
	16854: 0x507E,
	16855: 0x5043,
	16856: 0x5055,
	16857: 0x5048,
	16858: 0x504E,
	16859: 0x506C,
	16860: 0x507B,
	16861: 0x50A5,
	16862: 0x50A7,
	16863: 0x50A9,
	16864: 0x50BA,
	16865: 0x50D6,
	16866: 0x5106,
	16867: 0x50ED,
	16868: 0x50EC,
	16869: 0x50E6,
	16870: 0x50EE,
	16871: 0x5107,
	16872: 0x510B,
	16873: 0x4EDD,
	16874: 0x6C3D,
	16875: 0x4F58,
	16876: 0x4F65,
	16877: 0x4FCE,
	16878: 0x9FA0,
	16879: 0x6C46,
	16880: 0x7C74,
	16881: 0x516E,
	16882: 0x5DFD,
	16883: 0x9EC9,
	16884: 0x9998,
	16885: 0x5181,
	16886: 0x5914,
	16887: 0x52F9,
	16888: 0x530D,
	16889: 0x8A07,
	16890: 0x5310,
	16891: 0x51EB,
	16892: 0x5919,
	16893: 0x5155,
	16894: 0x4EA0,
	16895: 0x5156,
	16896: 0x4EB3,
	16897: 0x886E,
	16898: 0x88A4,
	16899: 0x4EB5,
	16900: 0x8114,
	16901: 0x88D2,
	16902: 0x7980,
	16903: 0x5B34,
	16904: 0x8803,
	16905: 0x7FB8,
	16906: 0x51AB,
	16907: 0x51B1,
	16908: 0x51BD,
	16909: 0x51BC,
	16910: 0x8D0E,
	16911: 0x8D0F,
	16912: 0x8D10,
	16913: 0x8D11,
	16914: 0x8D12,
	16915: 0x8D13,
	16916: 0x8D14,
	16917: 0x8D15,
	16918: 0x8D16,
	16919: 0x8D17,
	16920: 0x8D18,
	16921: 0x8D19,
	16922: 0x8D1A,
	16923: 0x8D1B,
	16924: 0x8D1C,
	16925: 0x8D20,
	16926: 0x8D51,
	16927: 0x8D52,
	16928: 0x8D57,
	16929: 0x8D5F,
	16930: 0x8D65,
	16931: 0x8D68,
	16932: 0x8D69,
	16933: 0x8D6A,
	16934: 0x8D6C,
	16935: 0x8D6E,
	16936: 0x8D6F,
	16937: 0x8D71,
	16938: 0x8D72,
	16939: 0x8D78,
	16940: 0x8D79,
	16941: 0x8D7A,
	16942: 0x8D7B,
	16943: 0x8D7C,
	16944: 0x8D7D,
	16945: 0x8D7E,
	16946: 0x8D7F,
	16947: 0x8D80,
	16948: 0x8D82,
	16949: 0x8D83,
	16950: 0x8D86,
	16951: 0x8D87,
	16952: 0x8D88,
	16953: 0x8D89,
	16954: 0x8D8C,
	16955: 0x8D8D,
	16956: 0x8D8E,
	16957: 0x8D8F,
	16958: 0x8D90,
	16959: 0x8D92,
	16960: 0x8D93,
	16961: 0x8D95,
	16962: 0x8D96,
	16963: 0x8D97,
	16964: 0x8D98,
	16965: 0x8D99,
	16966: 0x8D9A,
	16967: 0x8D9B,
	16968: 0x8D9C,
	16969: 0x8D9D,
	16970: 0x8D9E,
	16971: 0x8DA0,
	16972: 0x8DA1,
	16973: 0x8DA2,
	16974: 0x8DA4,
	16975: 0x8DA5,
	16976: 0x8DA6,
	16977: 0x8DA7,
	16978: 0x8DA8,
	16979: 0x8DA9,
	16980: 0x8DAA,
	16981: 0x8DAB,
	16982: 0x8DAC,
	16983: 0x8DAD,
	16984: 0x8DAE,
	16985: 0x8DAF,
	16986: 0x8DB0,
	16987: 0x8DB2,
	16988: 0x8DB6,
	16989: 0x8DB7,
	16990: 0x8DB9,
	16991: 0x8DBB,
	16992: 0x8DBD,
	16993: 0x8DC0,
	16994: 0x8DC1,
	16995: 0x8DC2,
	16996: 0x8DC5,
	16997: 0x8DC7,
	16998: 0x8DC8,
	16999: 0x8DC9,
	17000: 0x8DCA,
	17001: 0x8DCD,
	17002: 0x8DD0,
	17003: 0x8DD2,
	17004: 0x8DD3,
	17005: 0x8DD4,
	17006: 0x51C7,
	17007: 0x5196,
	17008: 0x51A2,
	17009: 0x51A5,
	17010: 0x8BA0,
	17011: 0x8BA6,
	17012: 0x8BA7,
	17013: 0x8BAA,
	17014: 0x8BB4,
	17015: 0x8BB5,
	17016: 0x8BB7,
	17017: 0x8BC2,
	17018: 0x8BC3,
	17019: 0x8BCB,
	17020: 0x8BCF,
	17021: 0x8BCE,
	17022: 0x8BD2,
	17023: 0x8BD3,
	17024: 0x8BD4,
	17025: 0x8BD6,
	17026: 0x8BD8,
	17027: 0x8BD9,
	17028: 0x8BDC,
	17029: 0x8BDF,
	17030: 0x8BE0,
	17031: 0x8BE4,
	17032: 0x8BE8,
	17033: 0x8BE9,
	17034: 0x8BEE,
	17035: 0x8BF0,
	17036: 0x8BF3,
	17037: 0x8BF6,
	17038: 0x8BF9,
	17039: 0x8BFC,
	17040: 0x8BFF,
	17041: 0x8C00,
	17042: 0x8C02,
	17043: 0x8C04,
	17044: 0x8C07,
	17045: 0x8C0C,
	17046: 0x8C0F,
	17047: 0x8C11,
	17048: 0x8C12,
	17049: 0x8C14,
	17050: 0x8C15,
	17051: 0x8C16,
	17052: 0x8C19,
	17053: 0x8C1B,
	17054: 0x8C18,
	17055: 0x8C1D,
	17056: 0x8C1F,
	17057: 0x8C20,
	17058: 0x8C21,
	17059: 0x8C25,
	17060: 0x8C27,
	17061: 0x8C2A,
	17062: 0x8C2B,
	17063: 0x8C2E,
	17064: 0x8C2F,
	17065: 0x8C32,
	17066: 0x8C33,
	17067: 0x8C35,
	17068: 0x8C36,
	17069: 0x5369,
	17070: 0x537A,
	17071: 0x961D,
	17072: 0x9622,
	17073: 0x9621,
	17074: 0x9631,
	17075: 0x962A,
	17076: 0x963D,
	17077: 0x963C,
	17078: 0x9642,
	17079: 0x9649,
	17080: 0x9654,
	17081: 0x965F,
	17082: 0x9667,
	17083: 0x966C,
	17084: 0x9672,
	17085: 0x9674,
	17086: 0x9688,
	17087: 0x968D,
	17088: 0x9697,
	17089: 0x96B0,
	17090: 0x9097,
	17091: 0x909B,
	17092: 0x909D,
	17093: 0x9099,
	17094: 0x90AC,
	17095: 0x90A1,
	17096: 0x90B4,
	17097: 0x90B3,
	17098: 0x90B6,
	17099: 0x90BA,
	17100: 0x8DD5,
	17101: 0x8DD8,
	17102: 0x8DD9,
	17103: 0x8DDC,
	17104: 0x8DE0,
	17105: 0x8DE1,
	17106: 0x8DE2,
	17107: 0x8DE5,
	17108: 0x8DE6,
	17109: 0x8DE7,
	17110: 0x8DE9,
	17111: 0x8DED,
	17112: 0x8DEE,
	17113: 0x8DF0,
	17114: 0x8DF1,
	17115: 0x8DF2,
	17116: 0x8DF4,
	17117: 0x8DF6,
	17118: 0x8DFC,
	17119: 0x8DFE,
	17120: 0x8DFF,
	17121: 0x8E00,
	17122: 0x8E01,
	17123: 0x8E02,
	17124: 0x8E03,
	17125: 0x8E04,
	17126: 0x8E06,
	17127: 0x8E07,
	17128: 0x8E08,
	17129: 0x8E0B,
	17130: 0x8E0D,
	17131: 0x8E0E,
	17132: 0x8E10,
	17133: 0x8E11,
	17134: 0x8E12,
	17135: 0x8E13,
	17136: 0x8E15,
	17137: 0x8E16,
	17138: 0x8E17,
	17139: 0x8E18,
	17140: 0x8E19,
	17141: 0x8E1A,
	17142: 0x8E1B,
	17143: 0x8E1C,
	17144: 0x8E20,
	17145: 0x8E21,
	17146: 0x8E24,
	17147: 0x8E25,
	17148: 0x8E26,
	17149: 0x8E27,
	17150: 0x8E28,
	17151: 0x8E2B,
	17152: 0x8E2D,
	17153: 0x8E30,
	17154: 0x8E32,
	17155: 0x8E33,
	17156: 0x8E34,
	17157: 0x8E36,
	17158: 0x8E37,
	17159: 0x8E38,
	17160: 0x8E3B,
	17161: 0x8E3C,
	17162: 0x8E3E,
	17163: 0x8E3F,
	17164: 0x8E43,
	17165: 0x8E45,
	17166: 0x8E46,
	17167: 0x8E4C,
	17168: 0x8E4D,
	17169: 0x8E4E,
	17170: 0x8E4F,
	17171: 0x8E50,
	17172: 0x8E53,
	17173: 0x8E54,
	17174: 0x8E55,
	17175: 0x8E56,
	17176: 0x8E57,
	17177: 0x8E58,
	17178: 0x8E5A,
	17179: 0x8E5B,
	17180: 0x8E5C,
	17181: 0x8E5D,
	17182: 0x8E5E,
	17183: 0x8E5F,
	17184: 0x8E60,
	17185: 0x8E61,
	17186: 0x8E62,
	17187: 0x8E63,
	17188: 0x8E64,
	17189: 0x8E65,
	17190: 0x8E67,
	17191: 0x8E68,
	17192: 0x8E6A,
	17193: 0x8E6B,
	17194: 0x8E6E,
	17195: 0x8E71,
	17196: 0x90B8,
	17197: 0x90B0,
	17198: 0x90CF,
	17199: 0x90C5,
	17200: 0x90BE,
	17201: 0x90D0,
	17202: 0x90C4,
	17203: 0x90C7,
	17204: 0x90D3,
	17205: 0x90E6,
	17206: 0x90E2,
	17207: 0x90DC,
	17208: 0x90D7,
	17209: 0x90DB,
	17210: 0x90EB,
	17211: 0x90EF,
	17212: 0x90FE,
	17213: 0x9104,
	17214: 0x9122,
	17215: 0x911E,
	17216: 0x9123,
	17217: 0x9131,
	17218: 0x912F,
	17219: 0x9139,
	17220: 0x9143,
	17221: 0x9146,
	17222: 0x520D,
	17223: 0x5942,
	17224: 0x52A2,
	17225: 0x52AC,
	17226: 0x52AD,
	17227: 0x52BE,
	17228: 0x54FF,
	17229: 0x52D0,
	17230: 0x52D6,
	17231: 0x52F0,
	17232: 0x53DF,
	17233: 0x71EE,
	17234: 0x77CD,
	17235: 0x5EF4,
	17236: 0x51F5,
	17237: 0x51FC,
	17238: 0x9B2F,
	17239: 0x53B6,
	17240: 0x5F01,
	17241: 0x755A,
	17242: 0x5DEF,
	17243: 0x574C,
	17244: 0x57A9,
	17245: 0x57A1,
	17246: 0x587E,
	17247: 0x58BC,
	17248: 0x58C5,
	17249: 0x58D1,
	17250: 0x5729,
	17251: 0x572C,
	17252: 0x572A,
	17253: 0x5733,
	17254: 0x5739,
	17255: 0x572E,
	17256: 0x572F,
	17257: 0x575C,
	17258: 0x573B,
	17259: 0x5742,
	17260: 0x5769,
	17261: 0x5785,
	17262: 0x576B,
	17263: 0x5786,
	17264: 0x577C,
	17265: 0x577B,
	17266: 0x5768,
	17267: 0x576D,
	17268: 0x5776,
	17269: 0x5773,
	17270: 0x57AD,
	17271: 0x57A4,
	17272: 0x578C,
	17273: 0x57B2,
	17274: 0x57CF,
	17275: 0x57A7,
	17276: 0x57B4,
	17277: 0x5793,
	17278: 0x57A0,
	17279: 0x57D5,
	17280: 0x57D8,
	17281: 0x57DA,
	17282: 0x57D9,
	17283: 0x57D2,
	17284: 0x57B8,
	17285: 0x57F4,
	17286: 0x57EF,
	17287: 0x57F8,
	17288: 0x57E4,
	17289: 0x57DD,
	17290: 0x8E73,
	17291: 0x8E75,
	17292: 0x8E77,
	17293: 0x8E78,
	17294: 0x8E79,
	17295: 0x8E7A,
	17296: 0x8E7B,
	17297: 0x8E7D,
	17298: 0x8E7E,
	17299: 0x8E80,
	17300: 0x8E82,
	17301: 0x8E83,
	17302: 0x8E84,
	17303: 0x8E86,
	17304: 0x8E88,
	17305: 0x8E89,
	17306: 0x8E8A,
	17307: 0x8E8B,
	17308: 0x8E8C,
	17309: 0x8E8D,
	17310: 0x8E8E,
	17311: 0x8E91,
	17312: 0x8E92,
	17313: 0x8E93,
	17314: 0x8E95,
	17315: 0x8E96,
	17316: 0x8E97,
	17317: 0x8E98,
	17318: 0x8E99,
	17319: 0x8E9A,
	17320: 0x8E9B,
	17321: 0x8E9D,
	17322: 0x8E9F,
	17323: 0x8EA0,
	17324: 0x8EA1,
	17325: 0x8EA2,
	17326: 0x8EA3,
	17327: 0x8EA4,
	17328: 0x8EA5,
	17329: 0x8EA6,
	17330: 0x8EA7,
	17331: 0x8EA8,
	17332: 0x8EA9,
	17333: 0x8EAA,
	17334: 0x8EAD,
	17335: 0x8EAE,
	17336: 0x8EB0,
	17337: 0x8EB1,
	17338: 0x8EB3,
	17339: 0x8EB4,
	17340: 0x8EB5,
	17341: 0x8EB6,
	17342: 0x8EB7,
	17343: 0x8EB8,
	17344: 0x8EB9,
	17345: 0x8EBB,
	17346: 0x8EBC,
	17347: 0x8EBD,
	17348: 0x8EBE,
	17349: 0x8EBF,
	17350: 0x8EC0,
	17351: 0x8EC1,
	17352: 0x8EC2,
	17353: 0x8EC3,
	17354: 0x8EC4,
	17355: 0x8EC5,
	17356: 0x8EC6,
	17357: 0x8EC7,
	17358: 0x8EC8,
	17359: 0x8EC9,
	17360: 0x8ECA,
	17361: 0x8ECB,
	17362: 0x8ECC,
	17363: 0x8ECD,
	17364: 0x8ECF,
	17365: 0x8ED0,
	17366: 0x8ED1,
	17367: 0x8ED2,
	17368: 0x8ED3,
	17369: 0x8ED4,
	17370: 0x8ED5,
	17371: 0x8ED6,
	17372: 0x8ED7,
	17373: 0x8ED8,
	17374: 0x8ED9,
	17375: 0x8EDA,
	17376: 0x8EDB,
	17377: 0x8EDC,
	17378: 0x8EDD,
	17379: 0x8EDE,
	17380: 0x8EDF,
	17381: 0x8EE0,
	17382: 0x8EE1,
	17383: 0x8EE2,
	17384: 0x8EE3,
	17385: 0x8EE4,
	17386: 0x580B,
	17387: 0x580D,
	17388: 0x57FD,
	17389: 0x57ED,
	17390: 0x5800,
	17391: 0x581E,
	17392: 0x5819,
	17393: 0x5844,
	17394: 0x5820,
	17395: 0x5865,
	17396: 0x586C,
	17397: 0x5881,
	17398: 0x5889,
	17399: 0x589A,
	17400: 0x5880,
	17401: 0x99A8,
	17402: 0x9F19,
	17403: 0x61FF,
	17404: 0x8279,
	17405: 0x827D,
	17406: 0x827F,
	17407: 0x828F,
	17408: 0x828A,
	17409: 0x82A8,
	17410: 0x8284,
	17411: 0x828E,
	17412: 0x8291,
	17413: 0x8297,
	17414: 0x8299,
	17415: 0x82AB,
	17416: 0x82B8,
	17417: 0x82BE,
	17418: 0x82B0,
	17419: 0x82C8,
	17420: 0x82CA,
	17421: 0x82E3,
	17422: 0x8298,
	17423: 0x82B7,
	17424: 0x82AE,
	17425: 0x82CB,
	17426: 0x82CC,
	17427: 0x82C1,
	17428: 0x82A9,
	17429: 0x82B4,
	17430: 0x82A1,
	17431: 0x82AA,
	17432: 0x829F,
	17433: 0x82C4,
	17434: 0x82CE,
	17435: 0x82A4,
	17436: 0x82E1,
	17437: 0x8309,
	17438: 0x82F7,
	17439: 0x82E4,
	17440: 0x830F,
	17441: 0x8307,
	17442: 0x82DC,
	17443: 0x82F4,
	17444: 0x82D2,
	17445: 0x82D8,
	17446: 0x830C,
	17447: 0x82FB,
	17448: 0x82D3,
	17449: 0x8311,
	17450: 0x831A,
	17451: 0x8306,
	17452: 0x8314,
	17453: 0x8315,
	17454: 0x82E0,
	17455: 0x82D5,
	17456: 0x831C,
	17457: 0x8351,
	17458: 0x835B,
	17459: 0x835C,
	17460: 0x8308,
	17461: 0x8392,
	17462: 0x833C,
	17463: 0x8334,
	17464: 0x8331,
	17465: 0x839B,
	17466: 0x835E,
	17467: 0x832F,
	17468: 0x834F,
	17469: 0x8347,
	17470: 0x8343,
	17471: 0x835F,
	17472: 0x8340,
	17473: 0x8317,
	17474: 0x8360,
	17475: 0x832D,
	17476: 0x833A,
	17477: 0x8333,
	17478: 0x8366,
	17479: 0x8365,
	17480: 0x8EE5,
	17481: 0x8EE6,
	17482: 0x8EE7,
	17483: 0x8EE8,
	17484: 0x8EE9,
	17485: 0x8EEA,
	17486: 0x8EEB,
	17487: 0x8EEC,
	17488: 0x8EED,
	17489: 0x8EEE,
	17490: 0x8EEF,
	17491: 0x8EF0,
	17492: 0x8EF1,
	17493: 0x8EF2,
	17494: 0x8EF3,
	17495: 0x8EF4,
	17496: 0x8EF5,
	17497: 0x8EF6,
	17498: 0x8EF7,
	17499: 0x8EF8,
	17500: 0x8EF9,
	17501: 0x8EFA,
	17502: 0x8EFB,
	17503: 0x8EFC,
	17504: 0x8EFD,
	17505: 0x8EFE,
	17506: 0x8EFF,
	17507: 0x8F00,
	17508: 0x8F01,
	17509: 0x8F02,
	17510: 0x8F03,
	17511: 0x8F04,
	17512: 0x8F05,
	17513: 0x8F06,
	17514: 0x8F07,
	17515: 0x8F08,
	17516: 0x8F09,
	17517: 0x8F0A,
	17518: 0x8F0B,
	17519: 0x8F0C,
	17520: 0x8F0D,
	17521: 0x8F0E,
	17522: 0x8F0F,
	17523: 0x8F10,
	17524: 0x8F11,
	17525: 0x8F12,
	17526: 0x8F13,
	17527: 0x8F14,
	17528: 0x8F15,
	17529: 0x8F16,
	17530: 0x8F17,
	17531: 0x8F18,
	17532: 0x8F19,
	17533: 0x8F1A,
	17534: 0x8F1B,
	17535: 0x8F1C,
	17536: 0x8F1D,
	17537: 0x8F1E,
	17538: 0x8F1F,
	17539: 0x8F20,
	17540: 0x8F21,
	17541: 0x8F22,
	17542: 0x8F23,
	17543: 0x8F24,
	17544: 0x8F25,
	17545: 0x8F26,
	17546: 0x8F27,
	17547: 0x8F28,
	17548: 0x8F29,
	17549: 0x8F2A,
	17550: 0x8F2B,
	17551: 0x8F2C,
	17552: 0x8F2D,
	17553: 0x8F2E,
	17554: 0x8F2F,
	17555: 0x8F30,
	17556: 0x8F31,
	17557: 0x8F32,
	17558: 0x8F33,
	17559: 0x8F34,
	17560: 0x8F35,
	17561: 0x8F36,
	17562: 0x8F37,
	17563: 0x8F38,
	17564: 0x8F39,
	17565: 0x8F3A,
	17566: 0x8F3B,
	17567: 0x8F3C,
	17568: 0x8F3D,
	17569: 0x8F3E,
	17570: 0x8F3F,
	17571: 0x8F40,
	17572: 0x8F41,
	17573: 0x8F42,
	17574: 0x8F43,
	17575: 0x8F44,
	17576: 0x8368,
	17577: 0x831B,
	17578: 0x8369,
	17579: 0x836C,
	17580: 0x836A,
	17581: 0x836D,
	17582: 0x836E,
	17583: 0x83B0,
	17584: 0x8378,
	17585: 0x83B3,
	17586: 0x83B4,
	17587: 0x83A0,
	17588: 0x83AA,
	17589: 0x8393,
	17590: 0x839C,
	17591: 0x8385,
	17592: 0x837C,
	17593: 0x83B6,
	17594: 0x83A9,
	17595: 0x837D,
	17596: 0x83B8,
	17597: 0x837B,
	17598: 0x8398,
	17599: 0x839E,
	17600: 0x83A8,
	17601: 0x83BA,
	17602: 0x83BC,
	17603: 0x83C1,
	17604: 0x8401,
	17605: 0x83E5,
	17606: 0x83D8,
	17607: 0x5807,
	17608: 0x8418,
	17609: 0x840B,
	17610: 0x83DD,
	17611: 0x83FD,
	17612: 0x83D6,
	17613: 0x841C,
	17614: 0x8438,
	17615: 0x8411,
	17616: 0x8406,
	17617: 0x83D4,
	17618: 0x83DF,
	17619: 0x840F,
	17620: 0x8403,
	17621: 0x83F8,
	17622: 0x83F9,
	17623: 0x83EA,
	17624: 0x83C5,
	17625: 0x83C0,
	17626: 0x8426,
	17627: 0x83F0,
	17628: 0x83E1,
	17629: 0x845C,
	17630: 0x8451,
	17631: 0x845A,
	17632: 0x8459,
	17633: 0x8473,
	17634: 0x8487,
	17635: 0x8488,
	17636: 0x847A,
	17637: 0x8489,
	17638: 0x8478,
	17639: 0x843C,
	17640: 0x8446,
	17641: 0x8469,
	17642: 0x8476,
	17643: 0x848C,
	17644: 0x848E,
	17645: 0x8431,
	17646: 0x846D,
	17647: 0x84C1,
	17648: 0x84CD,
	17649: 0x84D0,
	17650: 0x84E6,
	17651: 0x84BD,
	17652: 0x84D3,
	17653: 0x84CA,
	17654: 0x84BF,
	17655: 0x84BA,
	17656: 0x84E0,
	17657: 0x84A1,
	17658: 0x84B9,
	17659: 0x84B4,
	17660: 0x8497,
	17661: 0x84E5,
	17662: 0x84E3,
	17663: 0x850C,
	17664: 0x750D,
	17665: 0x8538,
	17666: 0x84F0,
	17667: 0x8539,
	17668: 0x851F,
	17669: 0x853A,
	17670: 0x8F45,
	17671: 0x8F46,
	17672: 0x8F47,
	17673: 0x8F48,
	17674: 0x8F49,
	17675: 0x8F4A,
	17676: 0x8F4B,
	17677: 0x8F4C,
	17678: 0x8F4D,
	17679: 0x8F4E,
	17680: 0x8F4F,
	17681: 0x8F50,
	17682: 0x8F51,
	17683: 0x8F52,
	17684: 0x8F53,
	17685: 0x8F54,
	17686: 0x8F55,
	17687: 0x8F56,
	17688: 0x8F57,
	17689: 0x8F58,
	17690: 0x8F59,
	17691: 0x8F5A,
	17692: 0x8F5B,
	17693: 0x8F5C,
	17694: 0x8F5D,
	17695: 0x8F5E,
	17696: 0x8F5F,
	17697: 0x8F60,
	17698: 0x8F61,
	17699: 0x8F62,
	17700: 0x8F63,
	17701: 0x8F64,
	17702: 0x8F65,
	17703: 0x8F6A,
	17704: 0x8F80,
	17705: 0x8F8C,
	17706: 0x8F92,
	17707: 0x8F9D,
	17708: 0x8FA0,
	17709: 0x8FA1,
	17710: 0x8FA2,
	17711: 0x8FA4,
	17712: 0x8FA5,
	17713: 0x8FA6,
	17714: 0x8FA7,
	17715: 0x8FAA,
	17716: 0x8FAC,
	17717: 0x8FAD,
	17718: 0x8FAE,
	17719: 0x8FAF,
	17720: 0x8FB2,
	17721: 0x8FB3,
	17722: 0x8FB4,
	17723: 0x8FB5,
	17724: 0x8FB7,
	17725: 0x8FB8,
	17726: 0x8FBA,
	17727: 0x8FBB,
	17728: 0x8FBC,
	17729: 0x8FBF,
	17730: 0x8FC0,
	17731: 0x8FC3,
	17732: 0x8FC6,
	17733: 0x8FC9,
	17734: 0x8FCA,
	17735: 0x8FCB,
	17736: 0x8FCC,
	17737: 0x8FCD,
	17738: 0x8FCF,
	17739: 0x8FD2,
	17740: 0x8FD6,
	17741: 0x8FD7,
	17742: 0x8FDA,
	17743: 0x8FE0,
	17744: 0x8FE1,
	17745: 0x8FE3,
	17746: 0x8FE7,
	17747: 0x8FEC,
	17748: 0x8FEF,
	17749: 0x8FF1,
	17750: 0x8FF2,
	17751: 0x8FF4,
	17752: 0x8FF5,
	17753: 0x8FF6,
	17754: 0x8FFA,
	17755: 0x8FFB,
	17756: 0x8FFC,
	17757: 0x8FFE,
	17758: 0x8FFF,
	17759: 0x9007,
	17760: 0x9008,
	17761: 0x900C,
	17762: 0x900E,
	17763: 0x9013,
	17764: 0x9015,
	17765: 0x9018,
	17766: 0x8556,
	17767: 0x853B,
	17768: 0x84FF,
	17769: 0x84FC,
	17770: 0x8559,
	17771: 0x8548,
	17772: 0x8568,
	17773: 0x8564,
	17774: 0x855E,
	17775: 0x857A,
	17776: 0x77A2,
	17777: 0x8543,
	17778: 0x8572,
	17779: 0x857B,
	17780: 0x85A4,
	17781: 0x85A8,
	17782: 0x8587,
	17783: 0x858F,
	17784: 0x8579,
	17785: 0x85AE,
	17786: 0x859C,
	17787: 0x8585,
	17788: 0x85B9,
	17789: 0x85B7,
	17790: 0x85B0,
	17791: 0x85D3,
	17792: 0x85C1,
	17793: 0x85DC,
	17794: 0x85FF,
	17795: 0x8627,
	17796: 0x8605,
	17797: 0x8629,
	17798: 0x8616,
	17799: 0x863C,
	17800: 0x5EFE,
	17801: 0x5F08,
	17802: 0x593C,
	17803: 0x5941,
	17804: 0x8037,
	17805: 0x5955,
	17806: 0x595A,
	17807: 0x5958,
	17808: 0x530F,
	17809: 0x5C22,
	17810: 0x5C25,
	17811: 0x5C2C,
	17812: 0x5C34,
	17813: 0x624C,
	17814: 0x626A,
	17815: 0x629F,
	17816: 0x62BB,
	17817: 0x62CA,
	17818: 0x62DA,
	17819: 0x62D7,
	17820: 0x62EE,
	17821: 0x6322,
	17822: 0x62F6,
	17823: 0x6339,
	17824: 0x634B,
	17825: 0x6343,
	17826: 0x63AD,
	17827: 0x63F6,
	17828: 0x6371,
	17829: 0x637A,
	17830: 0x638E,
	17831: 0x63B4,
	17832: 0x636D,
	17833: 0x63AC,
	17834: 0x638A,
	17835: 0x6369,
	17836: 0x63AE,
	17837: 0x63BC,
	17838: 0x63F2,
	17839: 0x63F8,
	17840: 0x63E0,
	17841: 0x63FF,
	17842: 0x63C4,
	17843: 0x63DE,
	17844: 0x63CE,
	17845: 0x6452,
	17846: 0x63C6,
	17847: 0x63BE,
	17848: 0x6445,
	17849: 0x6441,
	17850: 0x640B,
	17851: 0x641B,
	17852: 0x6420,
	17853: 0x640C,
	17854: 0x6426,
	17855: 0x6421,
	17856: 0x645E,
	17857: 0x6484,
	17858: 0x646D,
	17859: 0x6496,
	17860: 0x9019,
	17861: 0x901C,
	17862: 0x9023,
	17863: 0x9024,
	17864: 0x9025,
	17865: 0x9027,
	17866: 0x9028,
	17867: 0x9029,
	17868: 0x902A,
	17869: 0x902B,
	17870: 0x902C,
	17871: 0x9030,
	17872: 0x9031,
	17873: 0x9032,
	17874: 0x9033,
	17875: 0x9034,
	17876: 0x9037,
	17877: 0x9039,
	17878: 0x903A,
	17879: 0x903D,
	17880: 0x903F,
	17881: 0x9040,
	17882: 0x9043,
	17883: 0x9045,
	17884: 0x9046,
	17885: 0x9048,
	17886: 0x9049,
	17887: 0x904A,
	17888: 0x904B,
	17889: 0x904C,
	17890: 0x904E,
	17891: 0x9054,
	17892: 0x9055,
	17893: 0x9056,
	17894: 0x9059,
	17895: 0x905A,
	17896: 0x905C,
	17897: 0x905D,
	17898: 0x905E,
	17899: 0x905F,
	17900: 0x9060,
	17901: 0x9061,
	17902: 0x9064,
	17903: 0x9066,
	17904: 0x9067,
	17905: 0x9069,
	17906: 0x906A,
	17907: 0x906B,
	17908: 0x906C,
	17909: 0x906F,
	17910: 0x9070,
	17911: 0x9071,
	17912: 0x9072,
	17913: 0x9073,
	17914: 0x9076,
	17915: 0x9077,
	17916: 0x9078,
	17917: 0x9079,
	17918: 0x907A,
	17919: 0x907B,
	17920: 0x907C,
	17921: 0x907E,
	17922: 0x9081,
	17923: 0x9084,
	17924: 0x9085,
	17925: 0x9086,
	17926: 0x9087,
	17927: 0x9089,
	17928: 0x908A,
	17929: 0x908C,
	17930: 0x908D,
	17931: 0x908E,
	17932: 0x908F,
	17933: 0x9090,
	17934: 0x9092,
	17935: 0x9094,
	17936: 0x9096,
	17937: 0x9098,
	17938: 0x909A,
	17939: 0x909C,
	17940: 0x909E,
	17941: 0x909F,
	17942: 0x90A0,
	17943: 0x90A4,
	17944: 0x90A5,
	17945: 0x90A7,
	17946: 0x90A8,
	17947: 0x90A9,
	17948: 0x90AB,
	17949: 0x90AD,
	17950: 0x90B2,
	17951: 0x90B7,
	17952: 0x90BC,
	17953: 0x90BD,
	17954: 0x90BF,
	17955: 0x90C0,
	17956: 0x647A,
	17957: 0x64B7,
	17958: 0x64B8,
	17959: 0x6499,
	17960: 0x64BA,
	17961: 0x64C0,
	17962: 0x64D0,
	17963: 0x64D7,
	17964: 0x64E4,
	17965: 0x64E2,
	17966: 0x6509,
	17967: 0x6525,
	17968: 0x652E,
	17969: 0x5F0B,
	17970: 0x5FD2,
	17971: 0x7519,
	17972: 0x5F11,
	17973: 0x535F,
	17974: 0x53F1,
	17975: 0x53FD,
	17976: 0x53E9,
	17977: 0x53E8,
	17978: 0x53FB,
	17979: 0x5412,
	17980: 0x5416,
	17981: 0x5406,
	17982: 0x544B,
	17983: 0x5452,
	17984: 0x5453,
	17985: 0x5454,
	17986: 0x5456,
	17987: 0x5443,
	17988: 0x5421,
	17989: 0x5457,
	17990: 0x5459,
	17991: 0x5423,
	17992: 0x5432,
	17993: 0x5482,
	17994: 0x5494,
	17995: 0x5477,
	17996: 0x5471,
	17997: 0x5464,
	17998: 0x549A,
	17999: 0x549B,
	18000: 0x5484,
	18001: 0x5476,
	18002: 0x5466,
	18003: 0x549D,
	18004: 0x54D0,
	18005: 0x54AD,
	18006: 0x54C2,
	18007: 0x54B4,
	18008: 0x54D2,
	18009: 0x54A7,
	18010: 0x54A6,
	18011: 0x54D3,
	18012: 0x54D4,
	18013: 0x5472,
	18014: 0x54A3,
	18015: 0x54D5,
	18016: 0x54BB,
	18017: 0x54BF,
	18018: 0x54CC,
	18019: 0x54D9,
	18020: 0x54DA,
	18021: 0x54DC,
	18022: 0x54A9,
	18023: 0x54AA,
	18024: 0x54A4,
	18025: 0x54DD,
	18026: 0x54CF,
	18027: 0x54DE,
	18028: 0x551B,
	18029: 0x54E7,
	18030: 0x5520,
	18031: 0x54FD,
	18032: 0x5514,
	18033: 0x54F3,
	18034: 0x5522,
	18035: 0x5523,
	18036: 0x550F,
	18037: 0x5511,
	18038: 0x5527,
	18039: 0x552A,
	18040: 0x5567,
	18041: 0x558F,
	18042: 0x55B5,
	18043: 0x5549,
	18044: 0x556D,
	18045: 0x5541,
	18046: 0x5555,
	18047: 0x553F,
	18048: 0x5550,
	18049: 0x553C,
	18050: 0x90C2,
	18051: 0x90C3,
	18052: 0x90C6,
	18053: 0x90C8,
	18054: 0x90C9,
	18055: 0x90CB,
	18056: 0x90CC,
	18057: 0x90CD,
	18058: 0x90D2,
	18059: 0x90D4,
	18060: 0x90D5,
	18061: 0x90D6,
	18062: 0x90D8,
	18063: 0x90D9,
	18064: 0x90DA,
	18065: 0x90DE,
	18066: 0x90DF,
	18067: 0x90E0,
	18068: 0x90E3,
	18069: 0x90E4,
	18070: 0x90E5,
	18071: 0x90E9,
	18072: 0x90EA,
	18073: 0x90EC,
	18074: 0x90EE,
	18075: 0x90F0,
	18076: 0x90F1,
	18077: 0x90F2,
	18078: 0x90F3,
	18079: 0x90F5,
	18080: 0x90F6,
	18081: 0x90F7,
	18082: 0x90F9,
	18083: 0x90FA,
	18084: 0x90FB,
	18085: 0x90FC,
	18086: 0x90FF,
	18087: 0x9100,
	18088: 0x9101,
	18089: 0x9103,
	18090: 0x9105,
	18091: 0x9106,
	18092: 0x9107,
	18093: 0x9108,
	18094: 0x9109,
	18095: 0x910A,
	18096: 0x910B,
	18097: 0x910C,
	18098: 0x910D,
	18099: 0x910E,
	18100: 0x910F,
	18101: 0x9110,
	18102: 0x9111,
	18103: 0x9112,
	18104: 0x9113,
	18105: 0x9114,
	18106: 0x9115,
	18107: 0x9116,
	18108: 0x9117,
	18109: 0x9118,
	18110: 0x911A,
	18111: 0x911B,
	18112: 0x911C,
	18113: 0x911D,
	18114: 0x911F,
	18115: 0x9120,
	18116: 0x9121,
	18117: 0x9124,
	18118: 0x9125,
	18119: 0x9126,
	18120: 0x9127,
	18121: 0x9128,
	18122: 0x9129,
	18123: 0x912A,
	18124: 0x912B,
	18125: 0x912C,
	18126: 0x912D,
	18127: 0x912E,
	18128: 0x9130,
	18129: 0x9132,
	18130: 0x9133,
	18131: 0x9134,
	18132: 0x9135,
	18133: 0x9136,
	18134: 0x9137,
	18135: 0x9138,
	18136: 0x913A,
	18137: 0x913B,
	18138: 0x913C,
	18139: 0x913D,
	18140: 0x913E,
	18141: 0x913F,
	18142: 0x9140,
	18143: 0x9141,
	18144: 0x9142,
	18145: 0x9144,
	18146: 0x5537,
	18147: 0x5556,
	18148: 0x5575,
	18149: 0x5576,
	18150: 0x5577,
	18151: 0x5533,
	18152: 0x5530,
	18153: 0x555C,
	18154: 0x558B,
	18155: 0x55D2,
	18156: 0x5583,
	18157: 0x55B1,
	18158: 0x55B9,
	18159: 0x5588,
	18160: 0x5581,
	18161: 0x559F,
	18162: 0x557E,
	18163: 0x55D6,
	18164: 0x5591,
	18165: 0x557B,
	18166: 0x55DF,
	18167: 0x55BD,
	18168: 0x55BE,
	18169: 0x5594,
	18170: 0x5599,
	18171: 0x55EA,
	18172: 0x55F7,
	18173: 0x55C9,
	18174: 0x561F,
	18175: 0x55D1,
	18176: 0x55EB,
	18177: 0x55EC,
	18178: 0x55D4,
	18179: 0x55E6,
	18180: 0x55DD,
	18181: 0x55C4,
	18182: 0x55EF,
	18183: 0x55E5,
	18184: 0x55F2,
	18185: 0x55F3,
	18186: 0x55CC,
	18187: 0x55CD,
	18188: 0x55E8,
	18189: 0x55F5,
	18190: 0x55E4,
	18191: 0x8F94,
	18192: 0x561E,
	18193: 0x5608,
	18194: 0x560C,
	18195: 0x5601,
	18196: 0x5624,
	18197: 0x5623,
	18198: 0x55FE,
	18199: 0x5600,
	18200: 0x5627,
	18201: 0x562D,
	18202: 0x5658,
	18203: 0x5639,
	18204: 0x5657,
	18205: 0x562C,
	18206: 0x564D,
	18207: 0x5662,
	18208: 0x5659,
	18209: 0x565C,
	18210: 0x564C,
	18211: 0x5654,
	18212: 0x5686,
	18213: 0x5664,
	18214: 0x5671,
	18215: 0x566B,
	18216: 0x567B,
	18217: 0x567C,
	18218: 0x5685,
	18219: 0x5693,
	18220: 0x56AF,
	18221: 0x56D4,
	18222: 0x56D7,
	18223: 0x56DD,
	18224: 0x56E1,
	18225: 0x56F5,
	18226: 0x56EB,
	18227: 0x56F9,
	18228: 0x56FF,
	18229: 0x5704,
	18230: 0x570A,
	18231: 0x5709,
	18232: 0x571C,
	18233: 0x5E0F,
	18234: 0x5E19,
	18235: 0x5E14,
	18236: 0x5E11,
	18237: 0x5E31,
	18238: 0x5E3B,
	18239: 0x5E3C,
	18240: 0x9145,
	18241: 0x9147,
	18242: 0x9148,
	18243: 0x9151,
	18244: 0x9153,
	18245: 0x9154,
	18246: 0x9155,
	18247: 0x9156,
	18248: 0x9158,
	18249: 0x9159,
	18250: 0x915B,
	18251: 0x915C,
	18252: 0x915F,
	18253: 0x9160,
	18254: 0x9166,
	18255: 0x9167,
	18256: 0x9168,
	18257: 0x916B,
	18258: 0x916D,
	18259: 0x9173,
	18260: 0x917A,
	18261: 0x917B,
	18262: 0x917C,
	18263: 0x9180,
	18264: 0x9181,
	18265: 0x9182,
	18266: 0x9183,
	18267: 0x9184,
	18268: 0x9186,
	18269: 0x9188,
	18270: 0x918A,
	18271: 0x918E,
	18272: 0x918F,
	18273: 0x9193,
	18274: 0x9194,
	18275: 0x9195,
	18276: 0x9196,
	18277: 0x9197,
	18278: 0x9198,
	18279: 0x9199,
	18280: 0x919C,
	18281: 0x919D,
	18282: 0x919E,
	18283: 0x919F,
	18284: 0x91A0,
	18285: 0x91A1,
	18286: 0x91A4,
	18287: 0x91A5,
	18288: 0x91A6,
	18289: 0x91A7,
	18290: 0x91A8,
	18291: 0x91A9,
	18292: 0x91AB,
	18293: 0x91AC,
	18294: 0x91B0,
	18295: 0x91B1,
	18296: 0x91B2,
	18297: 0x91B3,
	18298: 0x91B6,
	18299: 0x91B7,
	18300: 0x91B8,
	18301: 0x91B9,
	18302: 0x91BB,
	18303: 0x91BC,
	18304: 0x91BD,
	18305: 0x91BE,
	18306: 0x91BF,
	18307: 0x91C0,
	18308: 0x91C1,
	18309: 0x91C2,
	18310: 0x91C3,
	18311: 0x91C4,
	18312: 0x91C5,
	18313: 0x91C6,
	18314: 0x91C8,
	18315: 0x91CB,
	18316: 0x91D0,
	18317: 0x91D2,
	18318: 0x91D3,
	18319: 0x91D4,
	18320: 0x91D5,
	18321: 0x91D6,
	18322: 0x91D7,
	18323: 0x91D8,
	18324: 0x91D9,
	18325: 0x91DA,
	18326: 0x91DB,
	18327: 0x91DD,
	18328: 0x91DE,
	18329: 0x91DF,
	18330: 0x91E0,
	18331: 0x91E1,
	18332: 0x91E2,
	18333: 0x91E3,
	18334: 0x91E4,
	18335: 0x91E5,
	18336: 0x5E37,
	18337: 0x5E44,
	18338: 0x5E54,
	18339: 0x5E5B,
	18340: 0x5E5E,
	18341: 0x5E61,
	18342: 0x5C8C,
	18343: 0x5C7A,
	18344: 0x5C8D,
	18345: 0x5C90,
	18346: 0x5C96,
	18347: 0x5C88,
	18348: 0x5C98,
	18349: 0x5C99,
	18350: 0x5C91,
	18351: 0x5C9A,
	18352: 0x5C9C,
	18353: 0x5CB5,
	18354: 0x5CA2,
	18355: 0x5CBD,
	18356: 0x5CAC,
	18357: 0x5CAB,
	18358: 0x5CB1,
	18359: 0x5CA3,
	18360: 0x5CC1,
	18361: 0x5CB7,
	18362: 0x5CC4,
	18363: 0x5CD2,
	18364: 0x5CE4,
	18365: 0x5CCB,
	18366: 0x5CE5,
	18367: 0x5D02,
	18368: 0x5D03,
	18369: 0x5D27,
	18370: 0x5D26,
	18371: 0x5D2E,
	18372: 0x5D24,
	18373: 0x5D1E,
	18374: 0x5D06,
	18375: 0x5D1B,
	18376: 0x5D58,
	18377: 0x5D3E,
	18378: 0x5D34,
	18379: 0x5D3D,
	18380: 0x5D6C,
	18381: 0x5D5B,
	18382: 0x5D6F,
	18383: 0x5D5D,
	18384: 0x5D6B,
	18385: 0x5D4B,
	18386: 0x5D4A,
	18387: 0x5D69,
	18388: 0x5D74,
	18389: 0x5D82,
	18390: 0x5D99,
	18391: 0x5D9D,
	18392: 0x8C73,
	18393: 0x5DB7,
	18394: 0x5DC5,
	18395: 0x5F73,
	18396: 0x5F77,
	18397: 0x5F82,
	18398: 0x5F87,
	18399: 0x5F89,
	18400: 0x5F8C,
	18401: 0x5F95,
	18402: 0x5F99,
	18403: 0x5F9C,
	18404: 0x5FA8,
	18405: 0x5FAD,
	18406: 0x5FB5,
	18407: 0x5FBC,
	18408: 0x8862,
	18409: 0x5F61,
	18410: 0x72AD,
	18411: 0x72B0,
	18412: 0x72B4,
	18413: 0x72B7,
	18414: 0x72B8,
	18415: 0x72C3,
	18416: 0x72C1,
	18417: 0x72CE,
	18418: 0x72CD,
	18419: 0x72D2,
	18420: 0x72E8,
	18421: 0x72EF,
	18422: 0x72E9,
	18423: 0x72F2,
	18424: 0x72F4,
	18425: 0x72F7,
	18426: 0x7301,
	18427: 0x72F3,
	18428: 0x7303,
	18429: 0x72FA,
	18430: 0x91E6,
	18431: 0x91E7,
	18432: 0x91E8,
	18433: 0x91E9,
	18434: 0x91EA,
	18435: 0x91EB,
	18436: 0x91EC,
	18437: 0x91ED,
	18438: 0x91EE,
	18439: 0x91EF,
	18440: 0x91F0,
	18441: 0x91F1,
	18442: 0x91F2,
	18443: 0x91F3,
	18444: 0x91F4,
	18445: 0x91F5,
	18446: 0x91F6,
	18447: 0x91F7,
	18448: 0x91F8,
	18449: 0x91F9,
	18450: 0x91FA,
	18451: 0x91FB,
	18452: 0x91FC,
	18453: 0x91FD,
	18454: 0x91FE,
	18455: 0x91FF,
	18456: 0x9200,
	18457: 0x9201,
	18458: 0x9202,
	18459: 0x9203,
	18460: 0x9204,
	18461: 0x9205,
	18462: 0x9206,
	18463: 0x9207,
	18464: 0x9208,
	18465: 0x9209,
	18466: 0x920A,
	18467: 0x920B,
	18468: 0x920C,
	18469: 0x920D,
	18470: 0x920E,
	18471: 0x920F,
	18472: 0x9210,
	18473: 0x9211,
	18474: 0x9212,
	18475: 0x9213,
	18476: 0x9214,
	18477: 0x9215,
	18478: 0x9216,
	18479: 0x9217,
	18480: 0x9218,
	18481: 0x9219,
	18482: 0x921A,
	18483: 0x921B,
	18484: 0x921C,
	18485: 0x921D,
	18486: 0x921E,
	18487: 0x921F,
	18488: 0x9220,
	18489: 0x9221,
	18490: 0x9222,
	18491: 0x9223,
	18492: 0x9224,
	18493: 0x9225,
	18494: 0x9226,
	18495: 0x9227,
	18496: 0x9228,
	18497: 0x9229,
	18498: 0x922A,
	18499: 0x922B,
	18500: 0x922C,
	18501: 0x922D,
	18502: 0x922E,
	18503: 0x922F,
	18504: 0x9230,
	18505: 0x9231,
	18506: 0x9232,
	18507: 0x9233,
	18508: 0x9234,
	18509: 0x9235,
	18510: 0x9236,
	18511: 0x9237,
	18512: 0x9238,
	18513: 0x9239,
	18514: 0x923A,
	18515: 0x923B,
	18516: 0x923C,
	18517: 0x923D,
	18518: 0x923E,
	18519: 0x923F,
	18520: 0x9240,
	18521: 0x9241,
	18522: 0x9242,
	18523: 0x9243,
	18524: 0x9244,
	18525: 0x9245,
	18526: 0x72FB,
	18527: 0x7317,
	18528: 0x7313,
	18529: 0x7321,
	18530: 0x730A,
	18531: 0x731E,
	18532: 0x731D,
	18533: 0x7315,
	18534: 0x7322,
	18535: 0x7339,
	18536: 0x7325,
	18537: 0x732C,
	18538: 0x7338,
	18539: 0x7331,
	18540: 0x7350,
	18541: 0x734D,
	18542: 0x7357,
	18543: 0x7360,
	18544: 0x736C,
	18545: 0x736F,
	18546: 0x737E,
	18547: 0x821B,
	18548: 0x5925,
	18549: 0x98E7,
	18550: 0x5924,
	18551: 0x5902,
	18552: 0x9963,
	18553: 0x9967,
	18554: 0x9968,
	18555: 0x9969,
	18556: 0x996A,
	18557: 0x996B,
	18558: 0x996C,
	18559: 0x9974,
	18560: 0x9977,
	18561: 0x997D,
	18562: 0x9980,
	18563: 0x9984,
	18564: 0x9987,
	18565: 0x998A,
	18566: 0x998D,
	18567: 0x9990,
	18568: 0x9991,
	18569: 0x9993,
	18570: 0x9994,
	18571: 0x9995,
	18572: 0x5E80,
	18573: 0x5E91,
	18574: 0x5E8B,
	18575: 0x5E96,
	18576: 0x5EA5,
	18577: 0x5EA0,
	18578: 0x5EB9,
	18579: 0x5EB5,
	18580: 0x5EBE,
	18581: 0x5EB3,
	18582: 0x8D53,
	18583: 0x5ED2,
	18584: 0x5ED1,
	18585: 0x5EDB,
	18586: 0x5EE8,
	18587: 0x5EEA,
	18588: 0x81BA,
	18589: 0x5FC4,
	18590: 0x5FC9,
	18591: 0x5FD6,
	18592: 0x5FCF,
	18593: 0x6003,
	18594: 0x5FEE,
	18595: 0x6004,
	18596: 0x5FE1,
	18597: 0x5FE4,
	18598: 0x5FFE,
	18599: 0x6005,
	18600: 0x6006,
	18601: 0x5FEA,
	18602: 0x5FED,
	18603: 0x5FF8,
	18604: 0x6019,
	18605: 0x6035,
	18606: 0x6026,
	18607: 0x601B,
	18608: 0x600F,
	18609: 0x600D,
	18610: 0x6029,
	18611: 0x602B,
	18612: 0x600A,
	18613: 0x603F,
	18614: 0x6021,
	18615: 0x6078,
	18616: 0x6079,
	18617: 0x607B,
	18618: 0x607A,
	18619: 0x6042,
	18620: 0x9246,
	18621: 0x9247,
	18622: 0x9248,
	18623: 0x9249,
	18624: 0x924A,
	18625: 0x924B,
	18626: 0x924C,
	18627: 0x924D,
	18628: 0x924E,
	18629: 0x924F,
	18630: 0x9250,
	18631: 0x9251,
	18632: 0x9252,
	18633: 0x9253,
	18634: 0x9254,
	18635: 0x9255,
	18636: 0x9256,
	18637: 0x9257,
	18638: 0x9258,
	18639: 0x9259,
	18640: 0x925A,
	18641: 0x925B,
	18642: 0x925C,
	18643: 0x925D,
	18644: 0x925E,
	18645: 0x925F,
	18646: 0x9260,
	18647: 0x9261,
	18648: 0x9262,
	18649: 0x9263,
	18650: 0x9264,
	18651: 0x9265,
	18652: 0x9266,
	18653: 0x9267,
	18654: 0x9268,
	18655: 0x9269,
	18656: 0x926A,
	18657: 0x926B,
	18658: 0x926C,
	18659: 0x926D,
	18660: 0x926E,
	18661: 0x926F,
	18662: 0x9270,
	18663: 0x9271,
	18664: 0x9272,
	18665: 0x9273,
	18666: 0x9275,
	18667: 0x9276,
	18668: 0x9277,
	18669: 0x9278,
	18670: 0x9279,
	18671: 0x927A,
	18672: 0x927B,
	18673: 0x927C,
	18674: 0x927D,
	18675: 0x927E,
	18676: 0x927F,
	18677: 0x9280,
	18678: 0x9281,
	18679: 0x9282,
	18680: 0x9283,
	18681: 0x9284,
	18682: 0x9285,
	18683: 0x9286,
	18684: 0x9287,
	18685: 0x9288,
	18686: 0x9289,
	18687: 0x928A,
	18688: 0x928B,
	18689: 0x928C,
	18690: 0x928D,
	18691: 0x928F,
	18692: 0x9290,
	18693: 0x9291,
	18694: 0x9292,
	18695: 0x9293,
	18696: 0x9294,
	18697: 0x9295,
	18698: 0x9296,
	18699: 0x9297,
	18700: 0x9298,
	18701: 0x9299,
	18702: 0x929A,
	18703: 0x929B,
	18704: 0x929C,
	18705: 0x929D,
	18706: 0x929E,
	18707: 0x929F,
	18708: 0x92A0,
	18709: 0x92A1,
	18710: 0x92A2,
	18711: 0x92A3,
	18712: 0x92A4,
	18713: 0x92A5,
	18714: 0x92A6,
	18715: 0x92A7,
	18716: 0x606A,
	18717: 0x607D,
	18718: 0x6096,
	18719: 0x609A,
	18720: 0x60AD,
	18721: 0x609D,
	18722: 0x6083,
	18723: 0x6092,
	18724: 0x608C,
	18725: 0x609B,
	18726: 0x60EC,
	18727: 0x60BB,
	18728: 0x60B1,
	18729: 0x60DD,
	18730: 0x60D8,
	18731: 0x60C6,
	18732: 0x60DA,
	18733: 0x60B4,
	18734: 0x6120,
	18735: 0x6126,
	18736: 0x6115,
	18737: 0x6123,
	18738: 0x60F4,
	18739: 0x6100,
	18740: 0x610E,
	18741: 0x612B,
	18742: 0x614A,
	18743: 0x6175,
	18744: 0x61AC,
	18745: 0x6194,
	18746: 0x61A7,
	18747: 0x61B7,
	18748: 0x61D4,
	18749: 0x61F5,
	18750: 0x5FDD,
	18751: 0x96B3,
	18752: 0x95E9,
	18753: 0x95EB,
	18754: 0x95F1,
	18755: 0x95F3,
	18756: 0x95F5,
	18757: 0x95F6,
	18758: 0x95FC,
	18759: 0x95FE,
	18760: 0x9603,
	18761: 0x9604,
	18762: 0x9606,
	18763: 0x9608,
	18764: 0x960A,
	18765: 0x960B,
	18766: 0x960C,
	18767: 0x960D,
	18768: 0x960F,
	18769: 0x9612,
	18770: 0x9615,
	18771: 0x9616,
	18772: 0x9617,
	18773: 0x9619,
	18774: 0x961A,
	18775: 0x4E2C,
	18776: 0x723F,
	18777: 0x6215,
	18778: 0x6C35,
	18779: 0x6C54,
	18780: 0x6C5C,
	18781: 0x6C4A,
	18782: 0x6CA3,
	18783: 0x6C85,
	18784: 0x6C90,
	18785: 0x6C94,
	18786: 0x6C8C,
	18787: 0x6C68,
	18788: 0x6C69,
	18789: 0x6C74,
	18790: 0x6C76,
	18791: 0x6C86,
	18792: 0x6CA9,
	18793: 0x6CD0,
	18794: 0x6CD4,
	18795: 0x6CAD,
	18796: 0x6CF7,
	18797: 0x6CF8,
	18798: 0x6CF1,
	18799: 0x6CD7,
	18800: 0x6CB2,
	18801: 0x6CE0,
	18802: 0x6CD6,
	18803: 0x6CFA,
	18804: 0x6CEB,
	18805: 0x6CEE,
	18806: 0x6CB1,
	18807: 0x6CD3,
	18808: 0x6CEF,
	18809: 0x6CFE,
	18810: 0x92A8,
	18811: 0x92A9,
	18812: 0x92AA,
	18813: 0x92AB,
	18814: 0x92AC,
	18815: 0x92AD,
	18816: 0x92AF,
	18817: 0x92B0,
	18818: 0x92B1,
	18819: 0x92B2,
	18820: 0x92B3,
	18821: 0x92B4,
	18822: 0x92B5,
	18823: 0x92B6,
	18824: 0x92B7,
	18825: 0x92B8,
	18826: 0x92B9,
	18827: 0x92BA,
	18828: 0x92BB,
	18829: 0x92BC,
	18830: 0x92BD,
	18831: 0x92BE,
	18832: 0x92BF,
	18833: 0x92C0,
	18834: 0x92C1,
	18835: 0x92C2,
	18836: 0x92C3,
	18837: 0x92C4,
	18838: 0x92C5,
	18839: 0x92C6,
	18840: 0x92C7,
	18841: 0x92C9,
	18842: 0x92CA,
	18843: 0x92CB,
	18844: 0x92CC,
	18845: 0x92CD,
	18846: 0x92CE,
	18847: 0x92CF,
	18848: 0x92D0,
	18849: 0x92D1,
	18850: 0x92D2,
	18851: 0x92D3,
	18852: 0x92D4,
	18853: 0x92D5,
	18854: 0x92D6,
	18855: 0x92D7,
	18856: 0x92D8,
	18857: 0x92D9,
	18858: 0x92DA,
	18859: 0x92DB,
	18860: 0x92DC,
	18861: 0x92DD,
	18862: 0x92DE,
	18863: 0x92DF,
	18864: 0x92E0,
	18865: 0x92E1,
	18866: 0x92E2,
	18867: 0x92E3,
	18868: 0x92E4,
	18869: 0x92E5,
	18870: 0x92E6,
	18871: 0x92E7,
	18872: 0x92E8,
	18873: 0x92E9,
	18874: 0x92EA,
	18875: 0x92EB,
	18876: 0x92EC,
	18877: 0x92ED,
	18878: 0x92EE,
	18879: 0x92EF,
	18880: 0x92F0,
	18881: 0x92F1,
	18882: 0x92F2,
	18883: 0x92F3,
	18884: 0x92F4,
	18885: 0x92F5,
	18886: 0x92F6,
	18887: 0x92F7,
	18888: 0x92F8,
	18889: 0x92F9,
	18890: 0x92FA,
	18891: 0x92FB,
	18892: 0x92FC,
	18893: 0x92FD,
	18894: 0x92FE,
	18895: 0x92FF,
	18896: 0x9300,
	18897: 0x9301,
	18898: 0x9302,
	18899: 0x9303,
	18900: 0x9304,
	18901: 0x9305,
	18902: 0x9306,
	18903: 0x9307,
	18904: 0x9308,
	18905: 0x9309,
	18906: 0x6D39,
	18907: 0x6D27,
	18908: 0x6D0C,
	18909: 0x6D43,
	18910: 0x6D48,
	18911: 0x6D07,
	18912: 0x6D04,
	18913: 0x6D19,
	18914: 0x6D0E,
	18915: 0x6D2B,
	18916: 0x6D4D,
	18917: 0x6D2E,
	18918: 0x6D35,
	18919: 0x6D1A,
	18920: 0x6D4F,
	18921: 0x6D52,
	18922: 0x6D54,
	18923: 0x6D33,
	18924: 0x6D91,
	18925: 0x6D6F,
	18926: 0x6D9E,
	18927: 0x6DA0,
	18928: 0x6D5E,
	18929: 0x6D93,
	18930: 0x6D94,
	18931: 0x6D5C,
	18932: 0x6D60,
	18933: 0x6D7C,
	18934: 0x6D63,
	18935: 0x6E1A,
	18936: 0x6DC7,
	18937: 0x6DC5,
	18938: 0x6DDE,
	18939: 0x6E0E,
	18940: 0x6DBF,
	18941: 0x6DE0,
	18942: 0x6E11,
	18943: 0x6DE6,
	18944: 0x6DDD,
	18945: 0x6DD9,
	18946: 0x6E16,
	18947: 0x6DAB,
	18948: 0x6E0C,
	18949: 0x6DAE,
	18950: 0x6E2B,
	18951: 0x6E6E,
	18952: 0x6E4E,
	18953: 0x6E6B,
	18954: 0x6EB2,
	18955: 0x6E5F,
	18956: 0x6E86,
	18957: 0x6E53,
	18958: 0x6E54,
	18959: 0x6E32,
	18960: 0x6E25,
	18961: 0x6E44,
	18962: 0x6EDF,
	18963: 0x6EB1,
	18964: 0x6E98,
	18965: 0x6EE0,
	18966: 0x6F2D,
	18967: 0x6EE2,
	18968: 0x6EA5,
	18969: 0x6EA7,
	18970: 0x6EBD,
	18971: 0x6EBB,
	18972: 0x6EB7,
	18973: 0x6ED7,
	18974: 0x6EB4,
	18975: 0x6ECF,
	18976: 0x6E8F,
	18977: 0x6EC2,
	18978: 0x6E9F,
	18979: 0x6F62,
	18980: 0x6F46,
	18981: 0x6F47,
	18982: 0x6F24,
	18983: 0x6F15,
	18984: 0x6EF9,
	18985: 0x6F2F,
	18986: 0x6F36,
	18987: 0x6F4B,
	18988: 0x6F74,
	18989: 0x6F2A,
	18990: 0x6F09,
	18991: 0x6F29,
	18992: 0x6F89,
	18993: 0x6F8D,
	18994: 0x6F8C,
	18995: 0x6F78,
	18996: 0x6F72,
	18997: 0x6F7C,
	18998: 0x6F7A,
	18999: 0x6FD1,
	19000: 0x930A,
	19001: 0x930B,
	19002: 0x930C,
	19003: 0x930D,
	19004: 0x930E,
	19005: 0x930F,
	19006: 0x9310,
	19007: 0x9311,
	19008: 0x9312,
	19009: 0x9313,
	19010: 0x9314,
	19011: 0x9315,
	19012: 0x9316,
	19013: 0x9317,
	19014: 0x9318,
	19015: 0x9319,
	19016: 0x931A,
	19017: 0x931B,
	19018: 0x931C,
	19019: 0x931D,
	19020: 0x931E,
	19021: 0x931F,
	19022: 0x9320,
	19023: 0x9321,
	19024: 0x9322,
	19025: 0x9323,
	19026: 0x9324,
	19027: 0x9325,
	19028: 0x9326,
	19029: 0x9327,
	19030: 0x9328,
	19031: 0x9329,
	19032: 0x932A,
	19033: 0x932B,
	19034: 0x932C,
	19035: 0x932D,
	19036: 0x932E,
	19037: 0x932F,
	19038: 0x9330,
	19039: 0x9331,
	19040: 0x9332,
	19041: 0x9333,
	19042: 0x9334,
	19043: 0x9335,
	19044: 0x9336,
	19045: 0x9337,
	19046: 0x9338,
	19047: 0x9339,
	19048: 0x933A,
	19049: 0x933B,
	19050: 0x933C,
	19051: 0x933D,
	19052: 0x933F,
	19053: 0x9340,
	19054: 0x9341,
	19055: 0x9342,
	19056: 0x9343,
	19057: 0x9344,
	19058: 0x9345,
	19059: 0x9346,
	19060: 0x9347,
	19061: 0x9348,
	19062: 0x9349,
	19063: 0x934A,
	19064: 0x934B,
	19065: 0x934C,
	19066: 0x934D,
	19067: 0x934E,
	19068: 0x934F,
	19069: 0x9350,
	19070: 0x9351,
	19071: 0x9352,
	19072: 0x9353,
	19073: 0x9354,
	19074: 0x9355,
	19075: 0x9356,
	19076: 0x9357,
	19077: 0x9358,
	19078: 0x9359,
	19079: 0x935A,
	19080: 0x935B,
	19081: 0x935C,
	19082: 0x935D,
	19083: 0x935E,
	19084: 0x935F,
	19085: 0x9360,
	19086: 0x9361,
	19087: 0x9362,
	19088: 0x9363,
	19089: 0x9364,
	19090: 0x9365,
	19091: 0x9366,
	19092: 0x9367,
	19093: 0x9368,
	19094: 0x9369,
	19095: 0x936B,
	19096: 0x6FC9,
	19097: 0x6FA7,
	19098: 0x6FB9,
	19099: 0x6FB6,
	19100: 0x6FC2,
	19101: 0x6FE1,
	19102: 0x6FEE,
	19103: 0x6FDE,
	19104: 0x6FE0,
	19105: 0x6FEF,
	19106: 0x701A,
	19107: 0x7023,
	19108: 0x701B,
	19109: 0x7039,
	19110: 0x7035,
	19111: 0x704F,
	19112: 0x705E,
	19113: 0x5B80,
	19114: 0x5B84,
	19115: 0x5B95,
	19116: 0x5B93,
	19117: 0x5BA5,
	19118: 0x5BB8,
	19119: 0x752F,
	19120: 0x9A9E,
	19121: 0x6434,
	19122: 0x5BE4,
	19123: 0x5BEE,
	19124: 0x8930,
	19125: 0x5BF0,
	19126: 0x8E47,
	19127: 0x8B07,
	19128: 0x8FB6,
	19129: 0x8FD3,
	19130: 0x8FD5,
	19131: 0x8FE5,
	19132: 0x8FEE,
	19133: 0x8FE4,
	19134: 0x8FE9,
	19135: 0x8FE6,
	19136: 0x8FF3,
	19137: 0x8FE8,
	19138: 0x9005,
	19139: 0x9004,
	19140: 0x900B,
	19141: 0x9026,
	19142: 0x9011,
	19143: 0x900D,
	19144: 0x9016,
	19145: 0x9021,
	19146: 0x9035,
	19147: 0x9036,
	19148: 0x902D,
	19149: 0x902F,
	19150: 0x9044,
	19151: 0x9051,
	19152: 0x9052,
	19153: 0x9050,
	19154: 0x9068,
	19155: 0x9058,
	19156: 0x9062,
	19157: 0x905B,
	19158: 0x66B9,
	19159: 0x9074,
	19160: 0x907D,
	19161: 0x9082,
	19162: 0x9088,
	19163: 0x9083,
	19164: 0x908B,
	19165: 0x5F50,
	19166: 0x5F57,
	19167: 0x5F56,
	19168: 0x5F58,
	19169: 0x5C3B,
	19170: 0x54AB,
	19171: 0x5C50,
	19172: 0x5C59,
	19173: 0x5B71,
	19174: 0x5C63,
	19175: 0x5C66,
	19176: 0x7FBC,
	19177: 0x5F2A,
	19178: 0x5F29,
	19179: 0x5F2D,
	19180: 0x8274,
	19181: 0x5F3C,
	19182: 0x9B3B,
	19183: 0x5C6E,
	19184: 0x5981,
	19185: 0x5983,
	19186: 0x598D,
	19187: 0x59A9,
	19188: 0x59AA,
	19189: 0x59A3,
	19190: 0x936C,
	19191: 0x936D,
	19192: 0x936E,
	19193: 0x936F,
	19194: 0x9370,
	19195: 0x9371,
	19196: 0x9372,
	19197: 0x9373,
	19198: 0x9374,
	19199: 0x9375,
	19200: 0x9376,
	19201: 0x9377,
	19202: 0x9378,
	19203: 0x9379,
	19204: 0x937A,
	19205: 0x937B,
	19206: 0x937C,
	19207: 0x937D,
	19208: 0x937E,
	19209: 0x937F,
	19210: 0x9380,
	19211: 0x9381,
	19212: 0x9382,
	19213: 0x9383,
	19214: 0x9384,
	19215: 0x9385,
	19216: 0x9386,
	19217: 0x9387,
	19218: 0x9388,
	19219: 0x9389,
	19220: 0x938A,
	19221: 0x938B,
	19222: 0x938C,
	19223: 0x938D,
	19224: 0x938E,
	19225: 0x9390,
	19226: 0x9391,
	19227: 0x9392,
	19228: 0x9393,
	19229: 0x9394,
	19230: 0x9395,
	19231: 0x9396,
	19232: 0x9397,
	19233: 0x9398,
	19234: 0x9399,
	19235: 0x939A,
	19236: 0x939B,
	19237: 0x939C,
	19238: 0x939D,
	19239: 0x939E,
	19240: 0x939F,
	19241: 0x93A0,
	19242: 0x93A1,
	19243: 0x93A2,
	19244: 0x93A3,
	19245: 0x93A4,
	19246: 0x93A5,
	19247: 0x93A6,
	19248: 0x93A7,
	19249: 0x93A8,
	19250: 0x93A9,
	19251: 0x93AA,
	19252: 0x93AB,
	19253: 0x93AC,
	19254: 0x93AD,
	19255: 0x93AE,
	19256: 0x93AF,
	19257: 0x93B0,
	19258: 0x93B1,
	19259: 0x93B2,
	19260: 0x93B3,
	19261: 0x93B4,
	19262: 0x93B5,
	19263: 0x93B6,
	19264: 0x93B7,
	19265: 0x93B8,
	19266: 0x93B9,
	19267: 0x93BA,
	19268: 0x93BB,
	19269: 0x93BC,
	19270: 0x93BD,
	19271: 0x93BE,
	19272: 0x93BF,
	19273: 0x93C0,
	19274: 0x93C1,
	19275: 0x93C2,
	19276: 0x93C3,
	19277: 0x93C4,
	19278: 0x93C5,
	19279: 0x93C6,
	19280: 0x93C7,
	19281: 0x93C8,
	19282: 0x93C9,
	19283: 0x93CB,
	19284: 0x93CC,
	19285: 0x93CD,
	19286: 0x5997,
	19287: 0x59CA,
	19288: 0x59AB,
	19289: 0x599E,
	19290: 0x59A4,
	19291: 0x59D2,
	19292: 0x59B2,
	19293: 0x59AF,
	19294: 0x59D7,
	19295: 0x59BE,
	19296: 0x5A05,
	19297: 0x5A06,
	19298: 0x59DD,
	19299: 0x5A08,
	19300: 0x59E3,
	19301: 0x59D8,
	19302: 0x59F9,
	19303: 0x5A0C,
	19304: 0x5A09,
	19305: 0x5A32,
	19306: 0x5A34,
	19307: 0x5A11,
	19308: 0x5A23,
	19309: 0x5A13,
	19310: 0x5A40,
	19311: 0x5A67,
	19312: 0x5A4A,
	19313: 0x5A55,
	19314: 0x5A3C,
	19315: 0x5A62,
	19316: 0x5A75,
	19317: 0x80EC,
	19318: 0x5AAA,
	19319: 0x5A9B,
	19320: 0x5A77,
	19321: 0x5A7A,
	19322: 0x5ABE,
	19323: 0x5AEB,
	19324: 0x5AB2,
	19325: 0x5AD2,
	19326: 0x5AD4,
	19327: 0x5AB8,
	19328: 0x5AE0,
	19329: 0x5AE3,
	19330: 0x5AF1,
	19331: 0x5AD6,
	19332: 0x5AE6,
	19333: 0x5AD8,
	19334: 0x5ADC,
	19335: 0x5B09,
	19336: 0x5B17,
	19337: 0x5B16,
	19338: 0x5B32,
	19339: 0x5B37,
	19340: 0x5B40,
	19341: 0x5C15,
	19342: 0x5C1C,
	19343: 0x5B5A,
	19344: 0x5B65,
	19345: 0x5B73,
	19346: 0x5B51,
	19347: 0x5B53,
	19348: 0x5B62,
	19349: 0x9A75,
	19350: 0x9A77,
	19351: 0x9A78,
	19352: 0x9A7A,
	19353: 0x9A7F,
	19354: 0x9A7D,
	19355: 0x9A80,
	19356: 0x9A81,
	19357: 0x9A85,
	19358: 0x9A88,
	19359: 0x9A8A,
	19360: 0x9A90,
	19361: 0x9A92,
	19362: 0x9A93,
	19363: 0x9A96,
	19364: 0x9A98,
	19365: 0x9A9B,
	19366: 0x9A9C,
	19367: 0x9A9D,
	19368: 0x9A9F,
	19369: 0x9AA0,
	19370: 0x9AA2,
	19371: 0x9AA3,
	19372: 0x9AA5,
	19373: 0x9AA7,
	19374: 0x7E9F,
	19375: 0x7EA1,
	19376: 0x7EA3,
	19377: 0x7EA5,
	19378: 0x7EA8,
	19379: 0x7EA9,
	19380: 0x93CE,
	19381: 0x93CF,
	19382: 0x93D0,
	19383: 0x93D1,
	19384: 0x93D2,
	19385: 0x93D3,
	19386: 0x93D4,
	19387: 0x93D5,
	19388: 0x93D7,
	19389: 0x93D8,
	19390: 0x93D9,
	19391: 0x93DA,
	19392: 0x93DB,
	19393: 0x93DC,
	19394: 0x93DD,
	19395: 0x93DE,
	19396: 0x93DF,
	19397: 0x93E0,
	19398: 0x93E1,
	19399: 0x93E2,
	19400: 0x93E3,
	19401: 0x93E4,
	19402: 0x93E5,
	19403: 0x93E6,
	19404: 0x93E7,
	19405: 0x93E8,
	19406: 0x93E9,
	19407: 0x93EA,
	19408: 0x93EB,
	19409: 0x93EC,
	19410: 0x93ED,
	19411: 0x93EE,
	19412: 0x93EF,
	19413: 0x93F0,
	19414: 0x93F1,
	19415: 0x93F2,
	19416: 0x93F3,
	19417: 0x93F4,
	19418: 0x93F5,
	19419: 0x93F6,
	19420: 0x93F7,
	19421: 0x93F8,
	19422: 0x93F9,
	19423: 0x93FA,
	19424: 0x93FB,
	19425: 0x93FC,
	19426: 0x93FD,
	19427: 0x93FE,
	19428: 0x93FF,
	19429: 0x9400,
	19430: 0x9401,
	19431: 0x9402,
	19432: 0x9403,
	19433: 0x9404,
	19434: 0x9405,
	19435: 0x9406,
	19436: 0x9407,
	19437: 0x9408,
	19438: 0x9409,
	19439: 0x940A,
	19440: 0x940B,
	19441: 0x940C,
	19442: 0x940D,
	19443: 0x940E,
	19444: 0x940F,
	19445: 0x9410,
	19446: 0x9411,
	19447: 0x9412,
	19448: 0x9413,
	19449: 0x9414,
	19450: 0x9415,
	19451: 0x9416,
	19452: 0x9417,
	19453: 0x9418,
	19454: 0x9419,
	19455: 0x941A,
	19456: 0x941B,
	19457: 0x941C,
	19458: 0x941D,
	19459: 0x941E,
	19460: 0x941F,
	19461: 0x9420,
	19462: 0x9421,
	19463: 0x9422,
	19464: 0x9423,
	19465: 0x9424,
	19466: 0x9425,
	19467: 0x9426,
	19468: 0x9427,
	19469: 0x9428,
	19470: 0x9429,
	19471: 0x942A,
	19472: 0x942B,
	19473: 0x942C,
	19474: 0x942D,
	19475: 0x942E,
	19476: 0x7EAD,
	19477: 0x7EB0,
	19478: 0x7EBE,
	19479: 0x7EC0,
	19480: 0x7EC1,
	19481: 0x7EC2,
	19482: 0x7EC9,
	19483: 0x7ECB,
	19484: 0x7ECC,
	19485: 0x7ED0,
	19486: 0x7ED4,
	19487: 0x7ED7,
	19488: 0x7EDB,
	19489: 0x7EE0,
	19490: 0x7EE1,
	19491: 0x7EE8,
	19492: 0x7EEB,
	19493: 0x7EEE,
	19494: 0x7EEF,
	19495: 0x7EF1,
	19496: 0x7EF2,
	19497: 0x7F0D,
	19498: 0x7EF6,
	19499: 0x7EFA,
	19500: 0x7EFB,
	19501: 0x7EFE,
	19502: 0x7F01,
	19503: 0x7F02,
	19504: 0x7F03,
	19505: 0x7F07,
	19506: 0x7F08,
	19507: 0x7F0B,
	19508: 0x7F0C,
	19509: 0x7F0F,
	19510: 0x7F11,
	19511: 0x7F12,
	19512: 0x7F17,
	19513: 0x7F19,
	19514: 0x7F1C,
	19515: 0x7F1B,
	19516: 0x7F1F,
	19517: 0x7F21,
	19518: 0x7F22,
	19519: 0x7F23,
	19520: 0x7F24,
	19521: 0x7F25,
	19522: 0x7F26,
	19523: 0x7F27,
	19524: 0x7F2A,
	19525: 0x7F2B,
	19526: 0x7F2C,
	19527: 0x7F2D,
	19528: 0x7F2F,
	19529: 0x7F30,
	19530: 0x7F31,
	19531: 0x7F32,
	19532: 0x7F33,
	19533: 0x7F35,
	19534: 0x5E7A,
	19535: 0x757F,
	19536: 0x5DDB,
	19537: 0x753E,
	19538: 0x9095,
	19539: 0x738E,
	19540: 0x7391,
	19541: 0x73AE,
	19542: 0x73A2,
	19543: 0x739F,
	19544: 0x73CF,
	19545: 0x73C2,
	19546: 0x73D1,
	19547: 0x73B7,
	19548: 0x73B3,
	19549: 0x73C0,
	19550: 0x73C9,
	19551: 0x73C8,
	19552: 0x73E5,
	19553: 0x73D9,
	19554: 0x987C,
	19555: 0x740A,
	19556: 0x73E9,
	19557: 0x73E7,
	19558: 0x73DE,
	19559: 0x73BA,
	19560: 0x73F2,
	19561: 0x740F,
	19562: 0x742A,
	19563: 0x745B,
	19564: 0x7426,
	19565: 0x7425,
	19566: 0x7428,
	19567: 0x7430,
	19568: 0x742E,
	19569: 0x742C,
	19570: 0x942F,
	19571: 0x9430,
	19572: 0x9431,
	19573: 0x9432,
	19574: 0x9433,
	19575: 0x9434,
	19576: 0x9435,
	19577: 0x9436,
	19578: 0x9437,
	19579: 0x9438,
	19580: 0x9439,
	19581: 0x943A,
	19582: 0x943B,
	19583: 0x943C,
	19584: 0x943D,
	19585: 0x943F,
	19586: 0x9440,
	19587: 0x9441,
	19588: 0x9442,
	19589: 0x9443,
	19590: 0x9444,
	19591: 0x9445,
	19592: 0x9446,
	19593: 0x9447,
	19594: 0x9448,
	19595: 0x9449,
	19596: 0x944A,
	19597: 0x944B,
	19598: 0x944C,
	19599: 0x944D,
	19600: 0x944E,
	19601: 0x944F,
	19602: 0x9450,
	19603: 0x9451,
	19604: 0x9452,
	19605: 0x9453,
	19606: 0x9454,
	19607: 0x9455,
	19608: 0x9456,
	19609: 0x9457,
	19610: 0x9458,
	19611: 0x9459,
	19612: 0x945A,
	19613: 0x945B,
	19614: 0x945C,
	19615: 0x945D,
	19616: 0x945E,
	19617: 0x945F,
	19618: 0x9460,
	19619: 0x9461,
	19620: 0x9462,
	19621: 0x9463,
	19622: 0x9464,
	19623: 0x9465,
	19624: 0x9466,
	19625: 0x9467,
	19626: 0x9468,
	19627: 0x9469,
	19628: 0x946A,
	19629: 0x946C,
	19630: 0x946D,
	19631: 0x946E,
	19632: 0x946F,
	19633: 0x9470,
	19634: 0x9471,
	19635: 0x9472,
	19636: 0x9473,
	19637: 0x9474,
	19638: 0x9475,
	19639: 0x9476,
	19640: 0x9477,
	19641: 0x9478,
	19642: 0x9479,
	19643: 0x947A,
	19644: 0x947B,
	19645: 0x947C,
	19646: 0x947D,
	19647: 0x947E,
	19648: 0x947F,
	19649: 0x9480,
	19650: 0x9481,
	19651: 0x9482,
	19652: 0x9483,
	19653: 0x9484,
	19654: 0x9491,
	19655: 0x9496,
	19656: 0x9498,
	19657: 0x94C7,
	19658: 0x94CF,
	19659: 0x94D3,
	19660: 0x94D4,
	19661: 0x94DA,
	19662: 0x94E6,
	19663: 0x94FB,
	19664: 0x951C,
	19665: 0x9520,
	19666: 0x741B,
	19667: 0x741A,
	19668: 0x7441,
	19669: 0x745C,
	19670: 0x7457,
	19671: 0x7455,
	19672: 0x7459,
	19673: 0x7477,
	19674: 0x746D,
	19675: 0x747E,
	19676: 0x749C,
	19677: 0x748E,
	19678: 0x7480,
	19679: 0x7481,
	19680: 0x7487,
	19681: 0x748B,
	19682: 0x749E,
	19683: 0x74A8,
	19684: 0x74A9,
	19685: 0x7490,
	19686: 0x74A7,
	19687: 0x74D2,
	19688: 0x74BA,
	19689: 0x97EA,
	19690: 0x97EB,
	19691: 0x97EC,
	19692: 0x674C,
	19693: 0x6753,
	19694: 0x675E,
	19695: 0x6748,
	19696: 0x6769,
	19697: 0x67A5,
	19698: 0x6787,
	19699: 0x676A,
	19700: 0x6773,
	19701: 0x6798,
	19702: 0x67A7,
	19703: 0x6775,
	19704: 0x67A8,
	19705: 0x679E,
	19706: 0x67AD,
	19707: 0x678B,
	19708: 0x6777,
	19709: 0x677C,
	19710: 0x67F0,
	19711: 0x6809,
	19712: 0x67D8,
	19713: 0x680A,
	19714: 0x67E9,
	19715: 0x67B0,
	19716: 0x680C,
	19717: 0x67D9,
	19718: 0x67B5,
	19719: 0x67DA,
	19720: 0x67B3,
	19721: 0x67DD,
	19722: 0x6800,
	19723: 0x67C3,
	19724: 0x67B8,
	19725: 0x67E2,
	19726: 0x680E,
	19727: 0x67C1,
	19728: 0x67FD,
	19729: 0x6832,
	19730: 0x6833,
	19731: 0x6860,
	19732: 0x6861,
	19733: 0x684E,
	19734: 0x6862,
	19735: 0x6844,
	19736: 0x6864,
	19737: 0x6883,
	19738: 0x681D,
	19739: 0x6855,
	19740: 0x6866,
	19741: 0x6841,
	19742: 0x6867,
	19743: 0x6840,
	19744: 0x683E,
	19745: 0x684A,
	19746: 0x6849,
	19747: 0x6829,
	19748: 0x68B5,
	19749: 0x688F,
	19750: 0x6874,
	19751: 0x6877,
	19752: 0x6893,
	19753: 0x686B,
	19754: 0x68C2,
	19755: 0x696E,
	19756: 0x68FC,
	19757: 0x691F,
	19758: 0x6920,
	19759: 0x68F9,
	19760: 0x9527,
	19761: 0x9533,
	19762: 0x953D,
	19763: 0x9543,
	19764: 0x9548,
	19765: 0x954B,
	19766: 0x9555,
	19767: 0x955A,
	19768: 0x9560,
	19769: 0x956E,
	19770: 0x9574,
	19771: 0x9575,
	19772: 0x9577,
	19773: 0x9578,
	19774: 0x9579,
	19775: 0x957A,
	19776: 0x957B,
	19777: 0x957C,
	19778: 0x957D,
	19779: 0x957E,
	19780: 0x9580,
	19781: 0x9581,
	19782: 0x9582,
	19783: 0x9583,
	19784: 0x9584,
	19785: 0x9585,
	19786: 0x9586,
	19787: 0x9587,
	19788: 0x9588,
	19789: 0x9589,
	19790: 0x958A,
	19791: 0x958B,
	19792: 0x958C,
	19793: 0x958D,
	19794: 0x958E,
	19795: 0x958F,
	19796: 0x9590,
	19797: 0x9591,
	19798: 0x9592,
	19799: 0x9593,
	19800: 0x9594,
	19801: 0x9595,
	19802: 0x9596,
	19803: 0x9597,
	19804: 0x9598,
	19805: 0x9599,
	19806: 0x959A,
	19807: 0x959B,
	19808: 0x959C,
	19809: 0x959D,
	19810: 0x959E,
	19811: 0x959F,
	19812: 0x95A0,
	19813: 0x95A1,
	19814: 0x95A2,
	19815: 0x95A3,
	19816: 0x95A4,
	19817: 0x95A5,
	19818: 0x95A6,
	19819: 0x95A7,
	19820: 0x95A8,
	19821: 0x95A9,
	19822: 0x95AA,
	19823: 0x95AB,
	19824: 0x95AC,
	19825: 0x95AD,
	19826: 0x95AE,
	19827: 0x95AF,
	19828: 0x95B0,
	19829: 0x95B1,
	19830: 0x95B2,
	19831: 0x95B3,
	19832: 0x95B4,
	19833: 0x95B5,
	19834: 0x95B6,
	19835: 0x95B7,
	19836: 0x95B8,
	19837: 0x95B9,
	19838: 0x95BA,
	19839: 0x95BB,
	19840: 0x95BC,
	19841: 0x95BD,
	19842: 0x95BE,
	19843: 0x95BF,
	19844: 0x95C0,
	19845: 0x95C1,
	19846: 0x95C2,
	19847: 0x95C3,
	19848: 0x95C4,
	19849: 0x95C5,
	19850: 0x95C6,
	19851: 0x95C7,
	19852: 0x95C8,
	19853: 0x95C9,
	19854: 0x95CA,
	19855: 0x95CB,
	19856: 0x6924,
	19857: 0x68F0,
	19858: 0x690B,
	19859: 0x6901,
	19860: 0x6957,
	19861: 0x68E3,
	19862: 0x6910,
	19863: 0x6971,
	19864: 0x6939,
	19865: 0x6960,
	19866: 0x6942,
	19867: 0x695D,
	19868: 0x6984,
	19869: 0x696B,
	19870: 0x6980,
	19871: 0x6998,
	19872: 0x6978,
	19873: 0x6934,
	19874: 0x69CC,
	19875: 0x6987,
	19876: 0x6988,
	19877: 0x69CE,
	19878: 0x6989,
	19879: 0x6966,
	19880: 0x6963,
	19881: 0x6979,
	19882: 0x699B,
	19883: 0x69A7,
	19884: 0x69BB,
	19885: 0x69AB,
	19886: 0x69AD,
	19887: 0x69D4,
	19888: 0x69B1,
	19889: 0x69C1,
	19890: 0x69CA,
	19891: 0x69DF,
	19892: 0x6995,
	19893: 0x69E0,
	19894: 0x698D,
	19895: 0x69FF,
	19896: 0x6A2F,
	19897: 0x69ED,
	19898: 0x6A17,
	19899: 0x6A18,
	19900: 0x6A65,
	19901: 0x69F2,
	19902: 0x6A44,
	19903: 0x6A3E,
	19904: 0x6AA0,
	19905: 0x6A50,
	19906: 0x6A5B,
	19907: 0x6A35,
	19908: 0x6A8E,
	19909: 0x6A79,
	19910: 0x6A3D,
	19911: 0x6A28,
	19912: 0x6A58,
	19913: 0x6A7C,
	19914: 0x6A91,
	19915: 0x6A90,
	19916: 0x6AA9,
	19917: 0x6A97,
	19918: 0x6AAB,
	19919: 0x7337,
	19920: 0x7352,
	19921: 0x6B81,
	19922: 0x6B82,
	19923: 0x6B87,
	19924: 0x6B84,
	19925: 0x6B92,
	19926: 0x6B93,
	19927: 0x6B8D,
	19928: 0x6B9A,
	19929: 0x6B9B,
	19930: 0x6BA1,
	19931: 0x6BAA,
	19932: 0x8F6B,
	19933: 0x8F6D,
	19934: 0x8F71,
	19935: 0x8F72,
	19936: 0x8F73,
	19937: 0x8F75,
	19938: 0x8F76,
	19939: 0x8F78,
	19940: 0x8F77,
	19941: 0x8F79,
	19942: 0x8F7A,
	19943: 0x8F7C,
	19944: 0x8F7E,
	19945: 0x8F81,
	19946: 0x8F82,
	19947: 0x8F84,
	19948: 0x8F87,
	19949: 0x8F8B,
	19950: 0x95CC,
	19951: 0x95CD,
	19952: 0x95CE,
	19953: 0x95CF,
	19954: 0x95D0,
	19955: 0x95D1,
	19956: 0x95D2,
	19957: 0x95D3,
	19958: 0x95D4,
	19959: 0x95D5,
	19960: 0x95D6,
	19961: 0x95D7,
	19962: 0x95D8,
	19963: 0x95D9,
	19964: 0x95DA,
	19965: 0x95DB,
	19966: 0x95DC,
	19967: 0x95DD,
	19968: 0x95DE,
	19969: 0x95DF,
	19970: 0x95E0,
	19971: 0x95E1,
	19972: 0x95E2,
	19973: 0x95E3,
	19974: 0x95E4,
	19975: 0x95E5,
	19976: 0x95E6,
	19977: 0x95E7,
	19978: 0x95EC,
	19979: 0x95FF,
	19980: 0x9607,
	19981: 0x9613,
	19982: 0x9618,
	19983: 0x961B,
	19984: 0x961E,
	19985: 0x9620,
	19986: 0x9623,
	19987: 0x9624,
	19988: 0x9625,
	19989: 0x9626,
	19990: 0x9627,
	19991: 0x9628,
	19992: 0x9629,
	19993: 0x962B,
	19994: 0x962C,
	19995: 0x962D,
	19996: 0x962F,
	19997: 0x9630,
	19998: 0x9637,
	19999: 0x9638,
	20000: 0x9639,
	20001: 0x963A,
	20002: 0x963E,
	20003: 0x9641,
	20004: 0x9643,
	20005: 0x964A,
	20006: 0x964E,
	20007: 0x964F,
	20008: 0x9651,
	20009: 0x9652,
	20010: 0x9653,
	20011: 0x9656,
	20012: 0x9657,
	20013: 0x9658,
	20014: 0x9659,
	20015: 0x965A,
	20016: 0x965C,
	20017: 0x965D,
	20018: 0x965E,
	20019: 0x9660,
	20020: 0x9663,
	20021: 0x9665,
	20022: 0x9666,
	20023: 0x966B,
	20024: 0x966D,
	20025: 0x966E,
	20026: 0x966F,
	20027: 0x9670,
	20028: 0x9671,
	20029: 0x9673,
	20030: 0x9678,
	20031: 0x9679,
	20032: 0x967A,
	20033: 0x967B,
	20034: 0x967C,
	20035: 0x967D,
	20036: 0x967E,
	20037: 0x967F,
	20038: 0x9680,
	20039: 0x9681,
	20040: 0x9682,
	20041: 0x9683,
	20042: 0x9684,
	20043: 0x9687,
	20044: 0x9689,
	20045: 0x968A,
	20046: 0x8F8D,
	20047: 0x8F8E,
	20048: 0x8F8F,
	20049: 0x8F98,
	20050: 0x8F9A,
	20051: 0x8ECE,
	20052: 0x620B,
	20053: 0x6217,
	20054: 0x621B,
	20055: 0x621F,
	20056: 0x6222,
	20057: 0x6221,
	20058: 0x6225,
	20059: 0x6224,
	20060: 0x622C,
	20061: 0x81E7,
	20062: 0x74EF,
	20063: 0x74F4,
	20064: 0x74FF,
	20065: 0x750F,
	20066: 0x7511,
	20067: 0x7513,
	20068: 0x6534,
	20069: 0x65EE,
	20070: 0x65EF,
	20071: 0x65F0,
	20072: 0x660A,
	20073: 0x6619,
	20074: 0x6772,
	20075: 0x6603,
	20076: 0x6615,
	20077: 0x6600,
	20078: 0x7085,
	20079: 0x66F7,
	20080: 0x661D,
	20081: 0x6634,
	20082: 0x6631,
	20083: 0x6636,
	20084: 0x6635,
	20085: 0x8006,
	20086: 0x665F,
	20087: 0x6654,
	20088: 0x6641,
	20089: 0x664F,
	20090: 0x6656,
	20091: 0x6661,
	20092: 0x6657,
	20093: 0x6677,
	20094: 0x6684,
	20095: 0x668C,
	20096: 0x66A7,
	20097: 0x669D,
	20098: 0x66BE,
	20099: 0x66DB,
	20100: 0x66DC,
	20101: 0x66E6,
	20102: 0x66E9,
	20103: 0x8D32,
	20104: 0x8D33,
	20105: 0x8D36,
	20106: 0x8D3B,
	20107: 0x8D3D,
	20108: 0x8D40,
	20109: 0x8D45,
	20110: 0x8D46,
	20111: 0x8D48,
	20112: 0x8D49,
	20113: 0x8D47,
	20114: 0x8D4D,
	20115: 0x8D55,
	20116: 0x8D59,
	20117: 0x89C7,
	20118: 0x89CA,
	20119: 0x89CB,
	20120: 0x89CC,
	20121: 0x89CE,
	20122: 0x89CF,
	20123: 0x89D0,
	20124: 0x89D1,
	20125: 0x726E,
	20126: 0x729F,
	20127: 0x725D,
	20128: 0x7266,
	20129: 0x726F,
	20130: 0x727E,
	20131: 0x727F,
	20132: 0x7284,
	20133: 0x728B,
	20134: 0x728D,
	20135: 0x728F,
	20136: 0x7292,
	20137: 0x6308,
	20138: 0x6332,
	20139: 0x63B0,
	20140: 0x968C,
	20141: 0x968E,
	20142: 0x9691,
	20143: 0x9692,
	20144: 0x9693,
	20145: 0x9695,
	20146: 0x9696,
	20147: 0x969A,
	20148: 0x969B,
	20149: 0x969D,
	20150: 0x969E,
	20151: 0x969F,
	20152: 0x96A0,
	20153: 0x96A1,
	20154: 0x96A2,
	20155: 0x96A3,
	20156: 0x96A4,
	20157: 0x96A5,
	20158: 0x96A6,
	20159: 0x96A8,
	20160: 0x96A9,
	20161: 0x96AA,
	20162: 0x96AB,
	20163: 0x96AC,
	20164: 0x96AD,
	20165: 0x96AE,
	20166: 0x96AF,
	20167: 0x96B1,
	20168: 0x96B2,
	20169: 0x96B4,
	20170: 0x96B5,
	20171: 0x96B7,
	20172: 0x96B8,
	20173: 0x96BA,
	20174: 0x96BB,
	20175: 0x96BF,
	20176: 0x96C2,
	20177: 0x96C3,
	20178: 0x96C8,
	20179: 0x96CA,
	20180: 0x96CB,
	20181: 0x96D0,
	20182: 0x96D1,
	20183: 0x96D3,
	20184: 0x96D4,
	20185: 0x96D6,
	20186: 0x96D7,
	20187: 0x96D8,
	20188: 0x96D9,
	20189: 0x96DA,
	20190: 0x96DB,
	20191: 0x96DC,
	20192: 0x96DD,
	20193: 0x96DE,
	20194: 0x96DF,
	20195: 0x96E1,
	20196: 0x96E2,
	20197: 0x96E3,
	20198: 0x96E4,
	20199: 0x96E5,
	20200: 0x96E6,
	20201: 0x96E7,
	20202: 0x96EB,
	20203: 0x96EC,
	20204: 0x96ED,
	20205: 0x96EE,
	20206: 0x96F0,
	20207: 0x96F1,
	20208: 0x96F2,
	20209: 0x96F4,
	20210: 0x96F5,
	20211: 0x96F8,
	20212: 0x96FA,
	20213: 0x96FB,
	20214: 0x96FC,
	20215: 0x96FD,
	20216: 0x96FF,
	20217: 0x9702,
	20218: 0x9703,
	20219: 0x9705,
	20220: 0x970A,
	20221: 0x970B,
	20222: 0x970C,
	20223: 0x9710,
	20224: 0x9711,
	20225: 0x9712,
	20226: 0x9714,
	20227: 0x9715,
	20228: 0x9717,
	20229: 0x9718,
	20230: 0x9719,
	20231: 0x971A,
	20232: 0x971B,
	20233: 0x971D,
	20234: 0x971F,
	20235: 0x9720,
	20236: 0x643F,
	20237: 0x64D8,
	20238: 0x8004,
	20239: 0x6BEA,
	20240: 0x6BF3,
	20241: 0x6BFD,
	20242: 0x6BF5,
	20243: 0x6BF9,
	20244: 0x6C05,
	20245: 0x6C07,
	20246: 0x6C06,
	20247: 0x6C0D,
	20248: 0x6C15,
	20249: 0x6C18,
	20250: 0x6C19,
	20251: 0x6C1A,
	20252: 0x6C21,
	20253: 0x6C29,
	20254: 0x6C24,
	20255: 0x6C2A,
	20256: 0x6C32,
	20257: 0x6535,
	20258: 0x6555,
	20259: 0x656B,
	20260: 0x724D,
	20261: 0x7252,
	20262: 0x7256,
	20263: 0x7230,
	20264: 0x8662,
	20265: 0x5216,
	20266: 0x809F,
	20267: 0x809C,
	20268: 0x8093,
	20269: 0x80BC,
	20270: 0x670A,
	20271: 0x80BD,
	20272: 0x80B1,
	20273: 0x80AB,
	20274: 0x80AD,
	20275: 0x80B4,
	20276: 0x80B7,
	20277: 0x80E7,
	20278: 0x80E8,
	20279: 0x80E9,
	20280: 0x80EA,
	20281: 0x80DB,
	20282: 0x80C2,
	20283: 0x80C4,
	20284: 0x80D9,
	20285: 0x80CD,
	20286: 0x80D7,
	20287: 0x6710,
	20288: 0x80DD,
	20289: 0x80EB,
	20290: 0x80F1,
	20291: 0x80F4,
	20292: 0x80ED,
	20293: 0x810D,
	20294: 0x810E,
	20295: 0x80F2,
	20296: 0x80FC,
	20297: 0x6715,
	20298: 0x8112,
	20299: 0x8C5A,
	20300: 0x8136,
	20301: 0x811E,
	20302: 0x812C,
	20303: 0x8118,
	20304: 0x8132,
	20305: 0x8148,
	20306: 0x814C,
	20307: 0x8153,
	20308: 0x8174,
	20309: 0x8159,
	20310: 0x815A,
	20311: 0x8171,
	20312: 0x8160,
	20313: 0x8169,
	20314: 0x817C,
	20315: 0x817D,
	20316: 0x816D,
	20317: 0x8167,
	20318: 0x584D,
	20319: 0x5AB5,
	20320: 0x8188,
	20321: 0x8182,
	20322: 0x8191,
	20323: 0x6ED5,
	20324: 0x81A3,
	20325: 0x81AA,
	20326: 0x81CC,
	20327: 0x6726,
	20328: 0x81CA,
	20329: 0x81BB,
	20330: 0x9721,
	20331: 0x9722,
	20332: 0x9723,
	20333: 0x9724,
	20334: 0x9725,
	20335: 0x9726,
	20336: 0x9727,
	20337: 0x9728,
	20338: 0x9729,
	20339: 0x972B,
	20340: 0x972C,
	20341: 0x972E,
	20342: 0x972F,
	20343: 0x9731,
	20344: 0x9733,
	20345: 0x9734,
	20346: 0x9735,
	20347: 0x9736,
	20348: 0x9737,
	20349: 0x973A,
	20350: 0x973B,
	20351: 0x973C,
	20352: 0x973D,
	20353: 0x973F,
	20354: 0x9740,
	20355: 0x9741,
	20356: 0x9742,
	20357: 0x9743,
	20358: 0x9744,
	20359: 0x9745,
	20360: 0x9746,
	20361: 0x9747,
	20362: 0x9748,
	20363: 0x9749,
	20364: 0x974A,
	20365: 0x974B,
	20366: 0x974C,
	20367: 0x974D,
	20368: 0x974E,
	20369: 0x974F,
	20370: 0x9750,
	20371: 0x9751,
	20372: 0x9754,
	20373: 0x9755,
	20374: 0x9757,
	20375: 0x9758,
	20376: 0x975A,
	20377: 0x975C,
	20378: 0x975D,
	20379: 0x975F,
	20380: 0x9763,
	20381: 0x9764,
	20382: 0x9766,
	20383: 0x9767,
	20384: 0x9768,
	20385: 0x976A,
	20386: 0x976B,
	20387: 0x976C,
	20388: 0x976D,
	20389: 0x976E,
	20390: 0x976F,
	20391: 0x9770,
	20392: 0x9771,
	20393: 0x9772,
	20394: 0x9775,
	20395: 0x9777,
	20396: 0x9778,
	20397: 0x9779,
	20398: 0x977A,
	20399: 0x977B,
	20400: 0x977D,
	20401: 0x977E,
	20402: 0x977F,
	20403: 0x9780,
	20404: 0x9781,
	20405: 0x9782,
	20406: 0x9783,
	20407: 0x9784,
	20408: 0x9786,
	20409: 0x9787,
	20410: 0x9788,
	20411: 0x9789,
	20412: 0x978A,
	20413: 0x978C,
	20414: 0x978E,
	20415: 0x978F,
	20416: 0x9790,
	20417: 0x9793,
	20418: 0x9795,
	20419: 0x9796,
	20420: 0x9797,
	20421: 0x9799,
	20422: 0x979A,
	20423: 0x979B,
	20424: 0x979C,
	20425: 0x979D,
	20426: 0x81C1,
	20427: 0x81A6,
	20428: 0x6B24,
	20429: 0x6B37,
	20430: 0x6B39,
	20431: 0x6B43,
	20432: 0x6B46,
	20433: 0x6B59,
	20434: 0x98D1,
	20435: 0x98D2,
	20436: 0x98D3,
	20437: 0x98D5,
	20438: 0x98D9,
	20439: 0x98DA,
	20440: 0x6BB3,
	20441: 0x5F40,
	20442: 0x6BC2,
	20443: 0x89F3,
	20444: 0x6590,
	20445: 0x9F51,
	20446: 0x6593,
	20447: 0x65BC,
	20448: 0x65C6,
	20449: 0x65C4,
	20450: 0x65C3,
	20451: 0x65CC,
	20452: 0x65CE,
	20453: 0x65D2,
	20454: 0x65D6,
	20455: 0x7080,
	20456: 0x709C,
	20457: 0x7096,
	20458: 0x709D,
	20459: 0x70BB,
	20460: 0x70C0,
	20461: 0x70B7,
	20462: 0x70AB,
	20463: 0x70B1,
	20464: 0x70E8,
	20465: 0x70CA,
	20466: 0x7110,
	20467: 0x7113,
	20468: 0x7116,
	20469: 0x712F,
	20470: 0x7131,
	20471: 0x7173,
	20472: 0x715C,
	20473: 0x7168,
	20474: 0x7145,
	20475: 0x7172,
	20476: 0x714A,
	20477: 0x7178,
	20478: 0x717A,
	20479: 0x7198,
	20480: 0x71B3,
	20481: 0x71B5,
	20482: 0x71A8,
	20483: 0x71A0,
	20484: 0x71E0,
	20485: 0x71D4,
	20486: 0x71E7,
	20487: 0x71F9,
	20488: 0x721D,
	20489: 0x7228,
	20490: 0x706C,
	20491: 0x7118,
	20492: 0x7166,
	20493: 0x71B9,
	20494: 0x623E,
	20495: 0x623D,
	20496: 0x6243,
	20497: 0x6248,
	20498: 0x6249,
	20499: 0x793B,
	20500: 0x7940,
	20501: 0x7946,
	20502: 0x7949,
	20503: 0x795B,
	20504: 0x795C,
	20505: 0x7953,
	20506: 0x795A,
	20507: 0x7962,
	20508: 0x7957,
	20509: 0x7960,
	20510: 0x796F,
	20511: 0x7967,
	20512: 0x797A,
	20513: 0x7985,
	20514: 0x798A,
	20515: 0x799A,
	20516: 0x79A7,
	20517: 0x79B3,
	20518: 0x5FD1,
	20519: 0x5FD0,
	20520: 0x979E,
	20521: 0x979F,
	20522: 0x97A1,
	20523: 0x97A2,
	20524: 0x97A4,
	20525: 0x97A5,
	20526: 0x97A6,
	20527: 0x97A7,
	20528: 0x97A8,
	20529: 0x97A9,
	20530: 0x97AA,
	20531: 0x97AC,
	20532: 0x97AE,
	20533: 0x97B0,
	20534: 0x97B1,
	20535: 0x97B3,
	20536: 0x97B5,
	20537: 0x97B6,
	20538: 0x97B7,
	20539: 0x97B8,
	20540: 0x97B9,
	20541: 0x97BA,
	20542: 0x97BB,
	20543: 0x97BC,
	20544: 0x97BD,
	20545: 0x97BE,
	20546: 0x97BF,
	20547: 0x97C0,
	20548: 0x97C1,
	20549: 0x97C2,
	20550: 0x97C3,
	20551: 0x97C4,
	20552: 0x97C5,
	20553: 0x97C6,
	20554: 0x97C7,
	20555: 0x97C8,
	20556: 0x97C9,
	20557: 0x97CA,
	20558: 0x97CB,
	20559: 0x97CC,
	20560: 0x97CD,
	20561: 0x97CE,
	20562: 0x97CF,
	20563: 0x97D0,
	20564: 0x97D1,
	20565: 0x97D2,
	20566: 0x97D3,
	20567: 0x97D4,
	20568: 0x97D5,
	20569: 0x97D6,
	20570: 0x97D7,
	20571: 0x97D8,
	20572: 0x97D9,
	20573: 0x97DA,
	20574: 0x97DB,
	20575: 0x97DC,
	20576: 0x97DD,
	20577: 0x97DE,
	20578: 0x97DF,
	20579: 0x97E0,
	20580: 0x97E1,
	20581: 0x97E2,
	20582: 0x97E3,
	20583: 0x97E4,
	20584: 0x97E5,
	20585: 0x97E8,
	20586: 0x97EE,
	20587: 0x97EF,
	20588: 0x97F0,
	20589: 0x97F1,
	20590: 0x97F2,
	20591: 0x97F4,
	20592: 0x97F7,
	20593: 0x97F8,
	20594: 0x97F9,
	20595: 0x97FA,
	20596: 0x97FB,
	20597: 0x97FC,
	20598: 0x97FD,
	20599: 0x97FE,
	20600: 0x97FF,
	20601: 0x9800,
	20602: 0x9801,
	20603: 0x9802,
	20604: 0x9803,
	20605: 0x9804,
	20606: 0x9805,
	20607: 0x9806,
	20608: 0x9807,
	20609: 0x9808,
	20610: 0x9809,
	20611: 0x980A,
	20612: 0x980B,
	20613: 0x980C,
	20614: 0x980D,
	20615: 0x980E,
	20616: 0x603C,
	20617: 0x605D,
	20618: 0x605A,
	20619: 0x6067,
	20620: 0x6041,
	20621: 0x6059,
	20622: 0x6063,
	20623: 0x60AB,
	20624: 0x6106,
	20625: 0x610D,
	20626: 0x615D,
	20627: 0x61A9,
	20628: 0x619D,
	20629: 0x61CB,
	20630: 0x61D1,
	20631: 0x6206,
	20632: 0x8080,
	20633: 0x807F,
	20634: 0x6C93,
	20635: 0x6CF6,
	20636: 0x6DFC,
	20637: 0x77F6,
	20638: 0x77F8,
	20639: 0x7800,
	20640: 0x7809,
	20641: 0x7817,
	20642: 0x7818,
	20643: 0x7811,
	20644: 0x65AB,
	20645: 0x782D,
	20646: 0x781C,
	20647: 0x781D,
	20648: 0x7839,
	20649: 0x783A,
	20650: 0x783B,
	20651: 0x781F,
	20652: 0x783C,
	20653: 0x7825,
	20654: 0x782C,
	20655: 0x7823,
	20656: 0x7829,
	20657: 0x784E,
	20658: 0x786D,
	20659: 0x7856,
	20660: 0x7857,
	20661: 0x7826,
	20662: 0x7850,
	20663: 0x7847,
	20664: 0x784C,
	20665: 0x786A,
	20666: 0x789B,
	20667: 0x7893,
	20668: 0x789A,
	20669: 0x7887,
	20670: 0x789C,
	20671: 0x78A1,
	20672: 0x78A3,
	20673: 0x78B2,
	20674: 0x78B9,
	20675: 0x78A5,
	20676: 0x78D4,
	20677: 0x78D9,
	20678: 0x78C9,
	20679: 0x78EC,
	20680: 0x78F2,
	20681: 0x7905,
	20682: 0x78F4,
	20683: 0x7913,
	20684: 0x7924,
	20685: 0x791E,
	20686: 0x7934,
	20687: 0x9F9B,
	20688: 0x9EF9,
	20689: 0x9EFB,
	20690: 0x9EFC,
	20691: 0x76F1,
	20692: 0x7704,
	20693: 0x770D,
	20694: 0x76F9,
	20695: 0x7707,
	20696: 0x7708,
	20697: 0x771A,
	20698: 0x7722,
	20699: 0x7719,
	20700: 0x772D,
	20701: 0x7726,
	20702: 0x7735,
	20703: 0x7738,
	20704: 0x7750,
	20705: 0x7751,
	20706: 0x7747,
	20707: 0x7743,
	20708: 0x775A,
	20709: 0x7768,
	20710: 0x980F,
	20711: 0x9810,
	20712: 0x9811,
	20713: 0x9812,
	20714: 0x9813,
	20715: 0x9814,
	20716: 0x9815,
	20717: 0x9816,
	20718: 0x9817,
	20719: 0x9818,
	20720: 0x9819,
	20721: 0x981A,
	20722: 0x981B,
	20723: 0x981C,
	20724: 0x981D,
	20725: 0x981E,
	20726: 0x981F,
	20727: 0x9820,
	20728: 0x9821,
	20729: 0x9822,
	20730: 0x9823,
	20731: 0x9824,
	20732: 0x9825,
	20733: 0x9826,
	20734: 0x9827,
	20735: 0x9828,
	20736: 0x9829,
	20737: 0x982A,
	20738: 0x982B,
	20739: 0x982C,
	20740: 0x982D,
	20741: 0x982E,
	20742: 0x982F,
	20743: 0x9830,
	20744: 0x9831,
	20745: 0x9832,
	20746: 0x9833,
	20747: 0x9834,
	20748: 0x9835,
	20749: 0x9836,
	20750: 0x9837,
	20751: 0x9838,
	20752: 0x9839,
	20753: 0x983A,
	20754: 0x983B,
	20755: 0x983C,
	20756: 0x983D,
	20757: 0x983E,
	20758: 0x983F,
	20759: 0x9840,
	20760: 0x9841,
	20761: 0x9842,
	20762: 0x9843,
	20763: 0x9844,
	20764: 0x9845,
	20765: 0x9846,
	20766: 0x9847,
	20767: 0x9848,
	20768: 0x9849,
	20769: 0x984A,
	20770: 0x984B,
	20771: 0x984C,
	20772: 0x984D,
	20773: 0x984E,
	20774: 0x984F,
	20775: 0x9850,
	20776: 0x9851,
	20777: 0x9852,
	20778: 0x9853,
	20779: 0x9854,
	20780: 0x9855,
	20781: 0x9856,
	20782: 0x9857,
	20783: 0x9858,
	20784: 0x9859,
	20785: 0x985A,
	20786: 0x985B,
	20787: 0x985C,
	20788: 0x985D,
	20789: 0x985E,
	20790: 0x985F,
	20791: 0x9860,
	20792: 0x9861,
	20793: 0x9862,
	20794: 0x9863,
	20795: 0x9864,
	20796: 0x9865,
	20797: 0x9866,
	20798: 0x9867,
	20799: 0x9868,
	20800: 0x9869,
	20801: 0x986A,
	20802: 0x986B,
	20803: 0x986C,
	20804: 0x986D,
	20805: 0x986E,
	20806: 0x7762,
	20807: 0x7765,
	20808: 0x777F,
	20809: 0x778D,
	20810: 0x777D,
	20811: 0x7780,
	20812: 0x778C,
	20813: 0x7791,
	20814: 0x779F,
	20815: 0x77A0,
	20816: 0x77B0,
	20817: 0x77B5,
	20818: 0x77BD,
	20819: 0x753A,
	20820: 0x7540,
	20821: 0x754E,
	20822: 0x754B,
	20823: 0x7548,
	20824: 0x755B,
	20825: 0x7572,
	20826: 0x7579,
	20827: 0x7583,
	20828: 0x7F58,
	20829: 0x7F61,
	20830: 0x7F5F,
	20831: 0x8A48,
	20832: 0x7F68,
	20833: 0x7F74,
	20834: 0x7F71,
	20835: 0x7F79,
	20836: 0x7F81,
	20837: 0x7F7E,
	20838: 0x76CD,
	20839: 0x76E5,
	20840: 0x8832,
	20841: 0x9485,
	20842: 0x9486,
	20843: 0x9487,
	20844: 0x948B,
	20845: 0x948A,
	20846: 0x948C,
	20847: 0x948D,
	20848: 0x948F,
	20849: 0x9490,
	20850: 0x9494,
	20851: 0x9497,
	20852: 0x9495,
	20853: 0x949A,
	20854: 0x949B,
	20855: 0x949C,
	20856: 0x94A3,
	20857: 0x94A4,
	20858: 0x94AB,
	20859: 0x94AA,
	20860: 0x94AD,
	20861: 0x94AC,
	20862: 0x94AF,
	20863: 0x94B0,
	20864: 0x94B2,
	20865: 0x94B4,
	20866: 0x94B6,
	20867: 0x94B7,
	20868: 0x94B8,
	20869: 0x94B9,
	20870: 0x94BA,
	20871: 0x94BC,
	20872: 0x94BD,
	20873: 0x94BF,
	20874: 0x94C4,
	20875: 0x94C8,
	20876: 0x94C9,
	20877: 0x94CA,
	20878: 0x94CB,
	20879: 0x94CC,
	20880: 0x94CD,
	20881: 0x94CE,
	20882: 0x94D0,
	20883: 0x94D1,
	20884: 0x94D2,
	20885: 0x94D5,
	20886: 0x94D6,
	20887: 0x94D7,
	20888: 0x94D9,
	20889: 0x94D8,
	20890: 0x94DB,
	20891: 0x94DE,
	20892: 0x94DF,
	20893: 0x94E0,
	20894: 0x94E2,
	20895: 0x94E4,
	20896: 0x94E5,
	20897: 0x94E7,
	20898: 0x94E8,
	20899: 0x94EA,
	20900: 0x986F,
	20901: 0x9870,
	20902: 0x9871,
	20903: 0x9872,
	20904: 0x9873,
	20905: 0x9874,
	20906: 0x988B,
	20907: 0x988E,
	20908: 0x9892,
	20909: 0x9895,
	20910: 0x9899,
	20911: 0x98A3,
	20912: 0x98A8,
	20913: 0x98A9,
	20914: 0x98AA,
	20915: 0x98AB,
	20916: 0x98AC,
	20917: 0x98AD,
	20918: 0x98AE,
	20919: 0x98AF,
	20920: 0x98B0,
	20921: 0x98B1,
	20922: 0x98B2,
	20923: 0x98B3,
	20924: 0x98B4,
	20925: 0x98B5,
	20926: 0x98B6,
	20927: 0x98B7,
	20928: 0x98B8,
	20929: 0x98B9,
	20930: 0x98BA,
	20931: 0x98BB,
	20932: 0x98BC,
	20933: 0x98BD,
	20934: 0x98BE,
	20935: 0x98BF,
	20936: 0x98C0,
	20937: 0x98C1,
	20938: 0x98C2,
	20939: 0x98C3,
	20940: 0x98C4,
	20941: 0x98C5,
	20942: 0x98C6,
	20943: 0x98C7,
	20944: 0x98C8,
	20945: 0x98C9,
	20946: 0x98CA,
	20947: 0x98CB,
	20948: 0x98CC,
	20949: 0x98CD,
	20950: 0x98CF,
	20951: 0x98D0,
	20952: 0x98D4,
	20953: 0x98D6,
	20954: 0x98D7,
	20955: 0x98DB,
	20956: 0x98DC,
	20957: 0x98DD,
	20958: 0x98E0,
	20959: 0x98E1,
	20960: 0x98E2,
	20961: 0x98E3,
	20962: 0x98E4,
	20963: 0x98E5,
	20964: 0x98E6,
	20965: 0x98E9,
	20966: 0x98EA,
	20967: 0x98EB,
	20968: 0x98EC,
	20969: 0x98ED,
	20970: 0x98EE,
	20971: 0x98EF,
	20972: 0x98F0,
	20973: 0x98F1,
	20974: 0x98F2,
	20975: 0x98F3,
	20976: 0x98F4,
	20977: 0x98F5,
	20978: 0x98F6,
	20979: 0x98F7,
	20980: 0x98F8,
	20981: 0x98F9,
	20982: 0x98FA,
	20983: 0x98FB,
	20984: 0x98FC,
	20985: 0x98FD,
	20986: 0x98FE,
	20987: 0x98FF,
	20988: 0x9900,
	20989: 0x9901,
	20990: 0x9902,
	20991: 0x9903,
	20992: 0x9904,
	20993: 0x9905,
	20994: 0x9906,
	20995: 0x9907,
	20996: 0x94E9,
	20997: 0x94EB,
	20998: 0x94EE,
	20999: 0x94EF,
	21000: 0x94F3,
	21001: 0x94F4,
	21002: 0x94F5,
	21003: 0x94F7,
	21004: 0x94F9,
	21005: 0x94FC,
	21006: 0x94FD,
	21007: 0x94FF,
	21008: 0x9503,
	21009: 0x9502,
	21010: 0x9506,
	21011: 0x9507,
	21012: 0x9509,
	21013: 0x950A,
	21014: 0x950D,
	21015: 0x950E,
	21016: 0x950F,
	21017: 0x9512,
	21018: 0x9513,
	21019: 0x9514,
	21020: 0x9515,
	21021: 0x9516,
	21022: 0x9518,
	21023: 0x951B,
	21024: 0x951D,
	21025: 0x951E,
	21026: 0x951F,
	21027: 0x9522,
	21028: 0x952A,
	21029: 0x952B,
	21030: 0x9529,
	21031: 0x952C,
	21032: 0x9531,
	21033: 0x9532,
	21034: 0x9534,
	21035: 0x9536,
	21036: 0x9537,
	21037: 0x9538,
	21038: 0x953C,
	21039: 0x953E,
	21040: 0x953F,
	21041: 0x9542,
	21042: 0x9535,
	21043: 0x9544,
	21044: 0x9545,
	21045: 0x9546,
	21046: 0x9549,
	21047: 0x954C,
	21048: 0x954E,
	21049: 0x954F,
	21050: 0x9552,
	21051: 0x9553,
	21052: 0x9554,
	21053: 0x9556,
	21054: 0x9557,
	21055: 0x9558,
	21056: 0x9559,
	21057: 0x955B,
	21058: 0x955E,
	21059: 0x955F,
	21060: 0x955D,
	21061: 0x9561,
	21062: 0x9562,
	21063: 0x9564,
	21064: 0x9565,
	21065: 0x9566,
	21066: 0x9567,
	21067: 0x9568,
	21068: 0x9569,
	21069: 0x956A,
	21070: 0x956B,
	21071: 0x956C,
	21072: 0x956F,
	21073: 0x9571,
	21074: 0x9572,
	21075: 0x9573,
	21076: 0x953A,
	21077: 0x77E7,
	21078: 0x77EC,
	21079: 0x96C9,
	21080: 0x79D5,
	21081: 0x79ED,
	21082: 0x79E3,
	21083: 0x79EB,
	21084: 0x7A06,
	21085: 0x5D47,
	21086: 0x7A03,
	21087: 0x7A02,
	21088: 0x7A1E,
	21089: 0x7A14,
	21090: 0x9908,
	21091: 0x9909,
	21092: 0x990A,
	21093: 0x990B,
	21094: 0x990C,
	21095: 0x990E,
	21096: 0x990F,
	21097: 0x9911,
	21098: 0x9912,
	21099: 0x9913,
	21100: 0x9914,
	21101: 0x9915,
	21102: 0x9916,
	21103: 0x9917,
	21104: 0x9918,
	21105: 0x9919,
	21106: 0x991A,
	21107: 0x991B,
	21108: 0x991C,
	21109: 0x991D,
	21110: 0x991E,
	21111: 0x991F,
	21112: 0x9920,
	21113: 0x9921,
	21114: 0x9922,
	21115: 0x9923,
	21116: 0x9924,
	21117: 0x9925,
	21118: 0x9926,
	21119: 0x9927,
	21120: 0x9928,
	21121: 0x9929,
	21122: 0x992A,
	21123: 0x992B,
	21124: 0x992C,
	21125: 0x992D,
	21126: 0x992F,
	21127: 0x9930,
	21128: 0x9931,
	21129: 0x9932,
	21130: 0x9933,
	21131: 0x9934,
	21132: 0x9935,
	21133: 0x9936,
	21134: 0x9937,
	21135: 0x9938,
	21136: 0x9939,
	21137: 0x993A,
	21138: 0x993B,
	21139: 0x993C,
	21140: 0x993D,
	21141: 0x993E,
	21142: 0x993F,
	21143: 0x9940,
	21144: 0x9941,
	21145: 0x9942,
	21146: 0x9943,
	21147: 0x9944,
	21148: 0x9945,
	21149: 0x9946,
	21150: 0x9947,
	21151: 0x9948,
	21152: 0x9949,
	21153: 0x994A,
	21154: 0x994B,
	21155: 0x994C,
	21156: 0x994D,
	21157: 0x994E,
	21158: 0x994F,
	21159: 0x9950,
	21160: 0x9951,
	21161: 0x9952,
	21162: 0x9953,
	21163: 0x9956,
	21164: 0x9957,
	21165: 0x9958,
	21166: 0x9959,
	21167: 0x995A,
	21168: 0x995B,
	21169: 0x995C,
	21170: 0x995D,
	21171: 0x995E,
	21172: 0x995F,
	21173: 0x9960,
	21174: 0x9961,
	21175: 0x9962,
	21176: 0x9964,
	21177: 0x9966,
	21178: 0x9973,
	21179: 0x9978,
	21180: 0x9979,
	21181: 0x997B,
	21182: 0x997E,
	21183: 0x9982,
	21184: 0x9983,
	21185: 0x9989,
	21186: 0x7A39,
	21187: 0x7A37,
	21188: 0x7A51,
	21189: 0x9ECF,
	21190: 0x99A5,
	21191: 0x7A70,
	21192: 0x7688,
	21193: 0x768E,
	21194: 0x7693,
	21195: 0x7699,
	21196: 0x76A4,
	21197: 0x74DE,
	21198: 0x74E0,
	21199: 0x752C,
	21200: 0x9E20,
	21201: 0x9E22,
	21202: 0x9E28,
	21203: 0x9E29,
	21204: 0x9E2A,
	21205: 0x9E2B,
	21206: 0x9E2C,
	21207: 0x9E32,
	21208: 0x9E31,
	21209: 0x9E36,
	21210: 0x9E38,
	21211: 0x9E37,
	21212: 0x9E39,
	21213: 0x9E3A,
	21214: 0x9E3E,
	21215: 0x9E41,
	21216: 0x9E42,
	21217: 0x9E44,
	21218: 0x9E46,
	21219: 0x9E47,
	21220: 0x9E48,
	21221: 0x9E49,
	21222: 0x9E4B,
	21223: 0x9E4C,
	21224: 0x9E4E,
	21225: 0x9E51,
	21226: 0x9E55,
	21227: 0x9E57,
	21228: 0x9E5A,
	21229: 0x9E5B,
	21230: 0x9E5C,
	21231: 0x9E5E,
	21232: 0x9E63,
	21233: 0x9E66,
	21234: 0x9E67,
	21235: 0x9E68,
	21236: 0x9E69,
	21237: 0x9E6A,
	21238: 0x9E6B,
	21239: 0x9E6C,
	21240: 0x9E71,
	21241: 0x9E6D,
	21242: 0x9E73,
	21243: 0x7592,
	21244: 0x7594,
	21245: 0x7596,
	21246: 0x75A0,
	21247: 0x759D,
	21248: 0x75AC,
	21249: 0x75A3,
	21250: 0x75B3,
	21251: 0x75B4,
	21252: 0x75B8,
	21253: 0x75C4,
	21254: 0x75B1,
	21255: 0x75B0,
	21256: 0x75C3,
	21257: 0x75C2,
	21258: 0x75D6,
	21259: 0x75CD,
	21260: 0x75E3,
	21261: 0x75E8,
	21262: 0x75E6,
	21263: 0x75E4,
	21264: 0x75EB,
	21265: 0x75E7,
	21266: 0x7603,
	21267: 0x75F1,
	21268: 0x75FC,
	21269: 0x75FF,
	21270: 0x7610,
	21271: 0x7600,
	21272: 0x7605,
	21273: 0x760C,
	21274: 0x7617,
	21275: 0x760A,
	21276: 0x7625,
	21277: 0x7618,
	21278: 0x7615,
	21279: 0x7619,
	21280: 0x998C,
	21281: 0x998E,
	21282: 0x999A,
	21283: 0x999B,
	21284: 0x999C,
	21285: 0x999D,
	21286: 0x999E,
	21287: 0x999F,
	21288: 0x99A0,
	21289: 0x99A1,
	21290: 0x99A2,
	21291: 0x99A3,
	21292: 0x99A4,
	21293: 0x99A6,
	21294: 0x99A7,
	21295: 0x99A9,
	21296: 0x99AA,
	21297: 0x99AB,
	21298: 0x99AC,
	21299: 0x99AD,
	21300: 0x99AE,
	21301: 0x99AF,
	21302: 0x99B0,
	21303: 0x99B1,
	21304: 0x99B2,
	21305: 0x99B3,
	21306: 0x99B4,
	21307: 0x99B5,
	21308: 0x99B6,
	21309: 0x99B7,
	21310: 0x99B8,
	21311: 0x99B9,
	21312: 0x99BA,
	21313: 0x99BB,
	21314: 0x99BC,
	21315: 0x99BD,
	21316: 0x99BE,
	21317: 0x99BF,
	21318: 0x99C0,
	21319: 0x99C1,
	21320: 0x99C2,
	21321: 0x99C3,
	21322: 0x99C4,
	21323: 0x99C5,
	21324: 0x99C6,
	21325: 0x99C7,
	21326: 0x99C8,
	21327: 0x99C9,
	21328: 0x99CA,
	21329: 0x99CB,
	21330: 0x99CC,
	21331: 0x99CD,
	21332: 0x99CE,
	21333: 0x99CF,
	21334: 0x99D0,
	21335: 0x99D1,
	21336: 0x99D2,
	21337: 0x99D3,
	21338: 0x99D4,
	21339: 0x99D5,
	21340: 0x99D6,
	21341: 0x99D7,
	21342: 0x99D8,
	21343: 0x99D9,
	21344: 0x99DA,
	21345: 0x99DB,
	21346: 0x99DC,
	21347: 0x99DD,
	21348: 0x99DE,
	21349: 0x99DF,
	21350: 0x99E0,
	21351: 0x99E1,
	21352: 0x99E2,
	21353: 0x99E3,
	21354: 0x99E4,
	21355: 0x99E5,
	21356: 0x99E6,
	21357: 0x99E7,
	21358: 0x99E8,
	21359: 0x99E9,
	21360: 0x99EA,
	21361: 0x99EB,
	21362: 0x99EC,
	21363: 0x99ED,
	21364: 0x99EE,
	21365: 0x99EF,
	21366: 0x99F0,
	21367: 0x99F1,
	21368: 0x99F2,
	21369: 0x99F3,
	21370: 0x99F4,
	21371: 0x99F5,
	21372: 0x99F6,
	21373: 0x99F7,
	21374: 0x99F8,
	21375: 0x99F9,
	21376: 0x761B,
	21377: 0x763C,
	21378: 0x7622,
	21379: 0x7620,
	21380: 0x7640,
	21381: 0x762D,
	21382: 0x7630,
	21383: 0x763F,
	21384: 0x7635,
	21385: 0x7643,
	21386: 0x763E,
	21387: 0x7633,
	21388: 0x764D,
	21389: 0x765E,
	21390: 0x7654,
	21391: 0x765C,
	21392: 0x7656,
	21393: 0x766B,
	21394: 0x766F,
	21395: 0x7FCA,
	21396: 0x7AE6,
	21397: 0x7A78,
	21398: 0x7A79,
	21399: 0x7A80,
	21400: 0x7A86,
	21401: 0x7A88,
	21402: 0x7A95,
	21403: 0x7AA6,
	21404: 0x7AA0,
	21405: 0x7AAC,
	21406: 0x7AA8,
	21407: 0x7AAD,
	21408: 0x7AB3,
	21409: 0x8864,
	21410: 0x8869,
	21411: 0x8872,
	21412: 0x887D,
	21413: 0x887F,
	21414: 0x8882,
	21415: 0x88A2,
	21416: 0x88C6,
	21417: 0x88B7,
	21418: 0x88BC,
	21419: 0x88C9,
	21420: 0x88E2,
	21421: 0x88CE,
	21422: 0x88E3,
	21423: 0x88E5,
	21424: 0x88F1,
	21425: 0x891A,
	21426: 0x88FC,
	21427: 0x88E8,
	21428: 0x88FE,
	21429: 0x88F0,
	21430: 0x8921,
	21431: 0x8919,
	21432: 0x8913,
	21433: 0x891B,
	21434: 0x890A,
	21435: 0x8934,
	21436: 0x892B,
	21437: 0x8936,
	21438: 0x8941,
	21439: 0x8966,
	21440: 0x897B,
	21441: 0x758B,
	21442: 0x80E5,
	21443: 0x76B2,
	21444: 0x76B4,
	21445: 0x77DC,
	21446: 0x8012,
	21447: 0x8014,
	21448: 0x8016,
	21449: 0x801C,
	21450: 0x8020,
	21451: 0x8022,
	21452: 0x8025,
	21453: 0x8026,
	21454: 0x8027,
	21455: 0x8029,
	21456: 0x8028,
	21457: 0x8031,
	21458: 0x800B,
	21459: 0x8035,
	21460: 0x8043,
	21461: 0x8046,
	21462: 0x804D,
	21463: 0x8052,
	21464: 0x8069,
	21465: 0x8071,
	21466: 0x8983,
	21467: 0x9878,
	21468: 0x9880,
	21469: 0x9883,
	21470: 0x99FA,
	21471: 0x99FB,
	21472: 0x99FC,
	21473: 0x99FD,
	21474: 0x99FE,
	21475: 0x99FF,
	21476: 0x9A00,
	21477: 0x9A01,
	21478: 0x9A02,
	21479: 0x9A03,
	21480: 0x9A04,
	21481: 0x9A05,
	21482: 0x9A06,
	21483: 0x9A07,
	21484: 0x9A08,
	21485: 0x9A09,
	21486: 0x9A0A,
	21487: 0x9A0B,
	21488: 0x9A0C,
	21489: 0x9A0D,
	21490: 0x9A0E,
	21491: 0x9A0F,
	21492: 0x9A10,
	21493: 0x9A11,
	21494: 0x9A12,
	21495: 0x9A13,
	21496: 0x9A14,
	21497: 0x9A15,
	21498: 0x9A16,
	21499: 0x9A17,
	21500: 0x9A18,
	21501: 0x9A19,
	21502: 0x9A1A,
	21503: 0x9A1B,
	21504: 0x9A1C,
	21505: 0x9A1D,
	21506: 0x9A1E,
	21507: 0x9A1F,
	21508: 0x9A20,
	21509: 0x9A21,
	21510: 0x9A22,
	21511: 0x9A23,
	21512: 0x9A24,
	21513: 0x9A25,
	21514: 0x9A26,
	21515: 0x9A27,
	21516: 0x9A28,
	21517: 0x9A29,
	21518: 0x9A2A,
	21519: 0x9A2B,
	21520: 0x9A2C,
	21521: 0x9A2D,
	21522: 0x9A2E,
	21523: 0x9A2F,
	21524: 0x9A30,
	21525: 0x9A31,
	21526: 0x9A32,
	21527: 0x9A33,
	21528: 0x9A34,
	21529: 0x9A35,
	21530: 0x9A36,
	21531: 0x9A37,
	21532: 0x9A38,
	21533: 0x9A39,
	21534: 0x9A3A,
	21535: 0x9A3B,
	21536: 0x9A3C,
	21537: 0x9A3D,
	21538: 0x9A3E,
	21539: 0x9A3F,
	21540: 0x9A40,
	21541: 0x9A41,
	21542: 0x9A42,
	21543: 0x9A43,
	21544: 0x9A44,
	21545: 0x9A45,
	21546: 0x9A46,
	21547: 0x9A47,
	21548: 0x9A48,
	21549: 0x9A49,
	21550: 0x9A4A,
	21551: 0x9A4B,
	21552: 0x9A4C,
	21553: 0x9A4D,
	21554: 0x9A4E,
	21555: 0x9A4F,
	21556: 0x9A50,
	21557: 0x9A51,
	21558: 0x9A52,
	21559: 0x9A53,
	21560: 0x9A54,
	21561: 0x9A55,
	21562: 0x9A56,
	21563: 0x9A57,
	21564: 0x9A58,
	21565: 0x9A59,
	21566: 0x9889,
	21567: 0x988C,
	21568: 0x988D,
	21569: 0x988F,
	21570: 0x9894,
	21571: 0x989A,
	21572: 0x989B,
	21573: 0x989E,
	21574: 0x989F,
	21575: 0x98A1,
	21576: 0x98A2,
	21577: 0x98A5,
	21578: 0x98A6,
	21579: 0x864D,
	21580: 0x8654,
	21581: 0x866C,
	21582: 0x866E,
	21583: 0x867F,
	21584: 0x867A,
	21585: 0x867C,
	21586: 0x867B,
	21587: 0x86A8,
	21588: 0x868D,
	21589: 0x868B,
	21590: 0x86AC,
	21591: 0x869D,
	21592: 0x86A7,
	21593: 0x86A3,
	21594: 0x86AA,
	21595: 0x8693,
	21596: 0x86A9,
	21597: 0x86B6,
	21598: 0x86C4,
	21599: 0x86B5,
	21600: 0x86CE,
	21601: 0x86B0,
	21602: 0x86BA,
	21603: 0x86B1,
	21604: 0x86AF,
	21605: 0x86C9,
	21606: 0x86CF,
	21607: 0x86B4,
	21608: 0x86E9,
	21609: 0x86F1,
	21610: 0x86F2,
	21611: 0x86ED,
	21612: 0x86F3,
	21613: 0x86D0,
	21614: 0x8713,
	21615: 0x86DE,
	21616: 0x86F4,
	21617: 0x86DF,
	21618: 0x86D8,
	21619: 0x86D1,
	21620: 0x8703,
	21621: 0x8707,
	21622: 0x86F8,
	21623: 0x8708,
	21624: 0x870A,
	21625: 0x870D,
	21626: 0x8709,
	21627: 0x8723,
	21628: 0x873B,
	21629: 0x871E,
	21630: 0x8725,
	21631: 0x872E,
	21632: 0x871A,
	21633: 0x873E,
	21634: 0x8748,
	21635: 0x8734,
	21636: 0x8731,
	21637: 0x8729,
	21638: 0x8737,
	21639: 0x873F,
	21640: 0x8782,
	21641: 0x8722,
	21642: 0x877D,
	21643: 0x877E,
	21644: 0x877B,
	21645: 0x8760,
	21646: 0x8770,
	21647: 0x874C,
	21648: 0x876E,
	21649: 0x878B,
	21650: 0x8753,
	21651: 0x8763,
	21652: 0x877C,
	21653: 0x8764,
	21654: 0x8759,
	21655: 0x8765,
	21656: 0x8793,
	21657: 0x87AF,
	21658: 0x87A8,
	21659: 0x87D2,
	21660: 0x9A5A,
	21661: 0x9A5B,
	21662: 0x9A5C,
	21663: 0x9A5D,
	21664: 0x9A5E,
	21665: 0x9A5F,
	21666: 0x9A60,
	21667: 0x9A61,
	21668: 0x9A62,
	21669: 0x9A63,
	21670: 0x9A64,
	21671: 0x9A65,
	21672: 0x9A66,
	21673: 0x9A67,
	21674: 0x9A68,
	21675: 0x9A69,
	21676: 0x9A6A,
	21677: 0x9A6B,
	21678: 0x9A72,
	21679: 0x9A83,
	21680: 0x9A89,
	21681: 0x9A8D,
	21682: 0x9A8E,
	21683: 0x9A94,
	21684: 0x9A95,
	21685: 0x9A99,
	21686: 0x9AA6,
	21687: 0x9AA9,
	21688: 0x9AAA,
	21689: 0x9AAB,
	21690: 0x9AAC,
	21691: 0x9AAD,
	21692: 0x9AAE,
	21693: 0x9AAF,
	21694: 0x9AB2,
	21695: 0x9AB3,
	21696: 0x9AB4,
	21697: 0x9AB5,
	21698: 0x9AB9,
	21699: 0x9ABB,
	21700: 0x9ABD,
	21701: 0x9ABE,
	21702: 0x9ABF,
	21703: 0x9AC3,
	21704: 0x9AC4,
	21705: 0x9AC6,
	21706: 0x9AC7,
	21707: 0x9AC8,
	21708: 0x9AC9,
	21709: 0x9ACA,
	21710: 0x9ACD,
	21711: 0x9ACE,
	21712: 0x9ACF,
	21713: 0x9AD0,
	21714: 0x9AD2,
	21715: 0x9AD4,
	21716: 0x9AD5,
	21717: 0x9AD6,
	21718: 0x9AD7,
	21719: 0x9AD9,
	21720: 0x9ADA,
	21721: 0x9ADB,
	21722: 0x9ADC,
	21723: 0x9ADD,
	21724: 0x9ADE,
	21725: 0x9AE0,
	21726: 0x9AE2,
	21727: 0x9AE3,
	21728: 0x9AE4,
	21729: 0x9AE5,
	21730: 0x9AE7,
	21731: 0x9AE8,
	21732: 0x9AE9,
	21733: 0x9AEA,
	21734: 0x9AEC,
	21735: 0x9AEE,
	21736: 0x9AF0,
	21737: 0x9AF1,
	21738: 0x9AF2,
	21739: 0x9AF3,
	21740: 0x9AF4,
	21741: 0x9AF5,
	21742: 0x9AF6,
	21743: 0x9AF7,
	21744: 0x9AF8,
	21745: 0x9AFA,
	21746: 0x9AFC,
	21747: 0x9AFD,
	21748: 0x9AFE,
	21749: 0x9AFF,
	21750: 0x9B00,
	21751: 0x9B01,
	21752: 0x9B02,
	21753: 0x9B04,
	21754: 0x9B05,
	21755: 0x9B06,
	21756: 0x87C6,
	21757: 0x8788,
	21758: 0x8785,
	21759: 0x87AD,
	21760: 0x8797,
	21761: 0x8783,
	21762: 0x87AB,
	21763: 0x87E5,
	21764: 0x87AC,
	21765: 0x87B5,
	21766: 0x87B3,
	21767: 0x87CB,
	21768: 0x87D3,
	21769: 0x87BD,
	21770: 0x87D1,
	21771: 0x87C0,
	21772: 0x87CA,
	21773: 0x87DB,
	21774: 0x87EA,
	21775: 0x87E0,
	21776: 0x87EE,
	21777: 0x8816,
	21778: 0x8813,
	21779: 0x87FE,
	21780: 0x880A,
	21781: 0x881B,
	21782: 0x8821,
	21783: 0x8839,
	21784: 0x883C,
	21785: 0x7F36,
	21786: 0x7F42,
	21787: 0x7F44,
	21788: 0x7F45,
	21789: 0x8210,
	21790: 0x7AFA,
	21791: 0x7AFD,
	21792: 0x7B08,
	21793: 0x7B03,
	21794: 0x7B04,
	21795: 0x7B15,
	21796: 0x7B0A,
	21797: 0x7B2B,
	21798: 0x7B0F,
	21799: 0x7B47,
	21800: 0x7B38,
	21801: 0x7B2A,
	21802: 0x7B19,
	21803: 0x7B2E,
	21804: 0x7B31,
	21805: 0x7B20,
	21806: 0x7B25,
	21807: 0x7B24,
	21808: 0x7B33,
	21809: 0x7B3E,
	21810: 0x7B1E,
	21811: 0x7B58,
	21812: 0x7B5A,
	21813: 0x7B45,
	21814: 0x7B75,
	21815: 0x7B4C,
	21816: 0x7B5D,
	21817: 0x7B60,
	21818: 0x7B6E,
	21819: 0x7B7B,
	21820: 0x7B62,
	21821: 0x7B72,
	21822: 0x7B71,
	21823: 0x7B90,
	21824: 0x7BA6,
	21825: 0x7BA7,
	21826: 0x7BB8,
	21827: 0x7BAC,
	21828: 0x7B9D,
	21829: 0x7BA8,
	21830: 0x7B85,
	21831: 0x7BAA,
	21832: 0x7B9C,
	21833: 0x7BA2,
	21834: 0x7BAB,
	21835: 0x7BB4,
	21836: 0x7BD1,
	21837: 0x7BC1,
	21838: 0x7BCC,
	21839: 0x7BDD,
	21840: 0x7BDA,
	21841: 0x7BE5,
	21842: 0x7BE6,
	21843: 0x7BEA,
	21844: 0x7C0C,
	21845: 0x7BFE,
	21846: 0x7BFC,
	21847: 0x7C0F,
	21848: 0x7C16,
	21849: 0x7C0B,
	21850: 0x9B07,
	21851: 0x9B09,
	21852: 0x9B0A,
	21853: 0x9B0B,
	21854: 0x9B0C,
	21855: 0x9B0D,
	21856: 0x9B0E,
	21857: 0x9B10,
	21858: 0x9B11,
	21859: 0x9B12,
	21860: 0x9B14,
	21861: 0x9B15,
	21862: 0x9B16,
	21863: 0x9B17,
	21864: 0x9B18,
	21865: 0x9B19,
	21866: 0x9B1A,
	21867: 0x9B1B,
	21868: 0x9B1C,
	21869: 0x9B1D,
	21870: 0x9B1E,
	21871: 0x9B20,
	21872: 0x9B21,
	21873: 0x9B22,
	21874: 0x9B24,
	21875: 0x9B25,
	21876: 0x9B26,
	21877: 0x9B27,
	21878: 0x9B28,
	21879: 0x9B29,
	21880: 0x9B2A,
	21881: 0x9B2B,
	21882: 0x9B2C,
	21883: 0x9B2D,
	21884: 0x9B2E,
	21885: 0x9B30,
	21886: 0x9B31,
	21887: 0x9B33,
	21888: 0x9B34,
	21889: 0x9B35,
	21890: 0x9B36,
	21891: 0x9B37,
	21892: 0x9B38,
	21893: 0x9B39,
	21894: 0x9B3A,
	21895: 0x9B3D,
	21896: 0x9B3E,
	21897: 0x9B3F,
	21898: 0x9B40,
	21899: 0x9B46,
	21900: 0x9B4A,
	21901: 0x9B4B,
	21902: 0x9B4C,
	21903: 0x9B4E,
	21904: 0x9B50,
	21905: 0x9B52,
	21906: 0x9B53,
	21907: 0x9B55,
	21908: 0x9B56,
	21909: 0x9B57,
	21910: 0x9B58,
	21911: 0x9B59,
	21912: 0x9B5A,
	21913: 0x9B5B,
	21914: 0x9B5C,
	21915: 0x9B5D,
	21916: 0x9B5E,
	21917: 0x9B5F,
	21918: 0x9B60,
	21919: 0x9B61,
	21920: 0x9B62,
	21921: 0x9B63,
	21922: 0x9B64,
	21923: 0x9B65,
	21924: 0x9B66,
	21925: 0x9B67,
	21926: 0x9B68,
	21927: 0x9B69,
	21928: 0x9B6A,
	21929: 0x9B6B,
	21930: 0x9B6C,
	21931: 0x9B6D,
	21932: 0x9B6E,
	21933: 0x9B6F,
	21934: 0x9B70,
	21935: 0x9B71,
	21936: 0x9B72,
	21937: 0x9B73,
	21938: 0x9B74,
	21939: 0x9B75,
	21940: 0x9B76,
	21941: 0x9B77,
	21942: 0x9B78,
	21943: 0x9B79,
	21944: 0x9B7A,
	21945: 0x9B7B,
	21946: 0x7C1F,
	21947: 0x7C2A,
	21948: 0x7C26,
	21949: 0x7C38,
	21950: 0x7C41,
	21951: 0x7C40,
	21952: 0x81FE,
	21953: 0x8201,
	21954: 0x8202,
	21955: 0x8204,
	21956: 0x81EC,
	21957: 0x8844,
	21958: 0x8221,
	21959: 0x8222,
	21960: 0x8223,
	21961: 0x822D,
	21962: 0x822F,
	21963: 0x8228,
	21964: 0x822B,
	21965: 0x8238,
	21966: 0x823B,
	21967: 0x8233,
	21968: 0x8234,
	21969: 0x823E,
	21970: 0x8244,
	21971: 0x8249,
	21972: 0x824B,
	21973: 0x824F,
	21974: 0x825A,
	21975: 0x825F,
	21976: 0x8268,
	21977: 0x887E,
	21978: 0x8885,
	21979: 0x8888,
	21980: 0x88D8,
	21981: 0x88DF,
	21982: 0x895E,
	21983: 0x7F9D,
	21984: 0x7F9F,
	21985: 0x7FA7,
	21986: 0x7FAF,
	21987: 0x7FB0,
	21988: 0x7FB2,
	21989: 0x7C7C,
	21990: 0x6549,
	21991: 0x7C91,
	21992: 0x7C9D,
	21993: 0x7C9C,
	21994: 0x7C9E,
	21995: 0x7CA2,
	21996: 0x7CB2,
	21997: 0x7CBC,
	21998: 0x7CBD,
	21999: 0x7CC1,
	22000: 0x7CC7,
	22001: 0x7CCC,
	22002: 0x7CCD,
	22003: 0x7CC8,
	22004: 0x7CC5,
	22005: 0x7CD7,
	22006: 0x7CE8,
	22007: 0x826E,
	22008: 0x66A8,
	22009: 0x7FBF,
	22010: 0x7FCE,
	22011: 0x7FD5,
	22012: 0x7FE5,
	22013: 0x7FE1,
	22014: 0x7FE6,
	22015: 0x7FE9,
	22016: 0x7FEE,
	22017: 0x7FF3,
	22018: 0x7CF8,
	22019: 0x7D77,
	22020: 0x7DA6,
	22021: 0x7DAE,
	22022: 0x7E47,
	22023: 0x7E9B,
	22024: 0x9EB8,
	22025: 0x9EB4,
	22026: 0x8D73,
	22027: 0x8D84,
	22028: 0x8D94,
	22029: 0x8D91,
	22030: 0x8DB1,
	22031: 0x8D67,
	22032: 0x8D6D,
	22033: 0x8C47,
	22034: 0x8C49,
	22035: 0x914A,
	22036: 0x9150,
	22037: 0x914E,
	22038: 0x914F,
	22039: 0x9164,
	22040: 0x9B7C,
	22041: 0x9B7D,
	22042: 0x9B7E,
	22043: 0x9B7F,
	22044: 0x9B80,
	22045: 0x9B81,
	22046: 0x9B82,
	22047: 0x9B83,
	22048: 0x9B84,
	22049: 0x9B85,
	22050: 0x9B86,
	22051: 0x9B87,
	22052: 0x9B88,
	22053: 0x9B89,
	22054: 0x9B8A,
	22055: 0x9B8B,
	22056: 0x9B8C,
	22057: 0x9B8D,
	22058: 0x9B8E,
	22059: 0x9B8F,
	22060: 0x9B90,
	22061: 0x9B91,
	22062: 0x9B92,
	22063: 0x9B93,
	22064: 0x9B94,
	22065: 0x9B95,
	22066: 0x9B96,
	22067: 0x9B97,
	22068: 0x9B98,
	22069: 0x9B99,
	22070: 0x9B9A,
	22071: 0x9B9B,
	22072: 0x9B9C,
	22073: 0x9B9D,
	22074: 0x9B9E,
	22075: 0x9B9F,
	22076: 0x9BA0,
	22077: 0x9BA1,
	22078: 0x9BA2,
	22079: 0x9BA3,
	22080: 0x9BA4,
	22081: 0x9BA5,
	22082: 0x9BA6,
	22083: 0x9BA7,
	22084: 0x9BA8,
	22085: 0x9BA9,
	22086: 0x9BAA,
	22087: 0x9BAB,
	22088: 0x9BAC,
	22089: 0x9BAD,
	22090: 0x9BAE,
	22091: 0x9BAF,
	22092: 0x9BB0,
	22093: 0x9BB1,
	22094: 0x9BB2,
	22095: 0x9BB3,
	22096: 0x9BB4,
	22097: 0x9BB5,
	22098: 0x9BB6,
	22099: 0x9BB7,
	22100: 0x9BB8,
	22101: 0x9BB9,
	22102: 0x9BBA,
	22103: 0x9BBB,
	22104: 0x9BBC,
	22105: 0x9BBD,
	22106: 0x9BBE,
	22107: 0x9BBF,
	22108: 0x9BC0,
	22109: 0x9BC1,
	22110: 0x9BC2,
	22111: 0x9BC3,
	22112: 0x9BC4,
	22113: 0x9BC5,
	22114: 0x9BC6,
	22115: 0x9BC7,
	22116: 0x9BC8,
	22117: 0x9BC9,
	22118: 0x9BCA,
	22119: 0x9BCB,
	22120: 0x9BCC,
	22121: 0x9BCD,
	22122: 0x9BCE,
	22123: 0x9BCF,
	22124: 0x9BD0,
	22125: 0x9BD1,
	22126: 0x9BD2,
	22127: 0x9BD3,
	22128: 0x9BD4,
	22129: 0x9BD5,
	22130: 0x9BD6,
	22131: 0x9BD7,
	22132: 0x9BD8,
	22133: 0x9BD9,
	22134: 0x9BDA,
	22135: 0x9BDB,
	22136: 0x9162,
	22137: 0x9161,
	22138: 0x9170,
	22139: 0x9169,
	22140: 0x916F,
	22141: 0x917D,
	22142: 0x917E,
	22143: 0x9172,
	22144: 0x9174,
	22145: 0x9179,
	22146: 0x918C,
	22147: 0x9185,
	22148: 0x9190,
	22149: 0x918D,
	22150: 0x9191,
	22151: 0x91A2,
	22152: 0x91A3,
	22153: 0x91AA,
	22154: 0x91AD,
	22155: 0x91AE,
	22156: 0x91AF,
	22157: 0x91B5,
	22158: 0x91B4,
	22159: 0x91BA,
	22160: 0x8C55,
	22161: 0x9E7E,
	22162: 0x8DB8,
	22163: 0x8DEB,
	22164: 0x8E05,
	22165: 0x8E59,
	22166: 0x8E69,
	22167: 0x8DB5,
	22168: 0x8DBF,
	22169: 0x8DBC,
	22170: 0x8DBA,
	22171: 0x8DC4,
	22172: 0x8DD6,
	22173: 0x8DD7,
	22174: 0x8DDA,
	22175: 0x8DDE,
	22176: 0x8DCE,
	22177: 0x8DCF,
	22178: 0x8DDB,
	22179: 0x8DC6,
	22180: 0x8DEC,
	22181: 0x8DF7,
	22182: 0x8DF8,
	22183: 0x8DE3,
	22184: 0x8DF9,
	22185: 0x8DFB,
	22186: 0x8DE4,
	22187: 0x8E09,
	22188: 0x8DFD,
	22189: 0x8E14,
	22190: 0x8E1D,
	22191: 0x8E1F,
	22192: 0x8E2C,
	22193: 0x8E2E,
	22194: 0x8E23,
	22195: 0x8E2F,
	22196: 0x8E3A,
	22197: 0x8E40,
	22198: 0x8E39,
	22199: 0x8E35,
	22200: 0x8E3D,
	22201: 0x8E31,
	22202: 0x8E49,
	22203: 0x8E41,
	22204: 0x8E42,
	22205: 0x8E51,
	22206: 0x8E52,
	22207: 0x8E4A,
	22208: 0x8E70,
	22209: 0x8E76,
	22210: 0x8E7C,
	22211: 0x8E6F,
	22212: 0x8E74,
	22213: 0x8E85,
	22214: 0x8E8F,
	22215: 0x8E94,
	22216: 0x8E90,
	22217: 0x8E9C,
	22218: 0x8E9E,
	22219: 0x8C78,
	22220: 0x8C82,
	22221: 0x8C8A,
	22222: 0x8C85,
	22223: 0x8C98,
	22224: 0x8C94,
	22225: 0x659B,
	22226: 0x89D6,
	22227: 0x89DE,
	22228: 0x89DA,
	22229: 0x89DC,
	22230: 0x9BDC,
	22231: 0x9BDD,
	22232: 0x9BDE,
	22233: 0x9BDF,
	22234: 0x9BE0,
	22235: 0x9BE1,
	22236: 0x9BE2,
	22237: 0x9BE3,
	22238: 0x9BE4,
	22239: 0x9BE5,
	22240: 0x9BE6,
	22241: 0x9BE7,
	22242: 0x9BE8,
	22243: 0x9BE9,
	22244: 0x9BEA,
	22245: 0x9BEB,
	22246: 0x9BEC,
	22247: 0x9BED,
	22248: 0x9BEE,
	22249: 0x9BEF,
	22250: 0x9BF0,
	22251: 0x9BF1,
	22252: 0x9BF2,
	22253: 0x9BF3,
	22254: 0x9BF4,
	22255: 0x9BF5,
	22256: 0x9BF6,
	22257: 0x9BF7,
	22258: 0x9BF8,
	22259: 0x9BF9,
	22260: 0x9BFA,
	22261: 0x9BFB,
	22262: 0x9BFC,
	22263: 0x9BFD,
	22264: 0x9BFE,
	22265: 0x9BFF,
	22266: 0x9C00,
	22267: 0x9C01,
	22268: 0x9C02,
	22269: 0x9C03,
	22270: 0x9C04,
	22271: 0x9C05,
	22272: 0x9C06,
	22273: 0x9C07,
	22274: 0x9C08,
	22275: 0x9C09,
	22276: 0x9C0A,
	22277: 0x9C0B,
	22278: 0x9C0C,
	22279: 0x9C0D,
	22280: 0x9C0E,
	22281: 0x9C0F,
	22282: 0x9C10,
	22283: 0x9C11,
	22284: 0x9C12,
	22285: 0x9C13,
	22286: 0x9C14,
	22287: 0x9C15,
	22288: 0x9C16,
	22289: 0x9C17,
	22290: 0x9C18,
	22291: 0x9C19,
	22292: 0x9C1A,
	22293: 0x9C1B,
	22294: 0x9C1C,
	22295: 0x9C1D,
	22296: 0x9C1E,
	22297: 0x9C1F,
	22298: 0x9C20,
	22299: 0x9C21,
	22300: 0x9C22,
	22301: 0x9C23,
	22302: 0x9C24,
	22303: 0x9C25,
	22304: 0x9C26,
	22305: 0x9C27,
	22306: 0x9C28,
	22307: 0x9C29,
	22308: 0x9C2A,
	22309: 0x9C2B,
	22310: 0x9C2C,
	22311: 0x9C2D,
	22312: 0x9C2E,
	22313: 0x9C2F,
	22314: 0x9C30,
	22315: 0x9C31,
	22316: 0x9C32,
	22317: 0x9C33,
	22318: 0x9C34,
	22319: 0x9C35,
	22320: 0x9C36,
	22321: 0x9C37,
	22322: 0x9C38,
	22323: 0x9C39,
	22324: 0x9C3A,
	22325: 0x9C3B,
	22326: 0x89E5,
	22327: 0x89EB,
	22328: 0x89EF,
	22329: 0x8A3E,
	22330: 0x8B26,
	22331: 0x9753,
	22332: 0x96E9,
	22333: 0x96F3,
	22334: 0x96EF,
	22335: 0x9706,
	22336: 0x9701,
	22337: 0x9708,
	22338: 0x970F,
	22339: 0x970E,
	22340: 0x972A,
	22341: 0x972D,
	22342: 0x9730,
	22343: 0x973E,
	22344: 0x9F80,
	22345: 0x9F83,
	22346: 0x9F85,
	22347: 0x9F86,
	22348: 0x9F87,
	22349: 0x9F88,
	22350: 0x9F89,
	22351: 0x9F8A,
	22352: 0x9F8C,
	22353: 0x9EFE,
	22354: 0x9F0B,
	22355: 0x9F0D,
	22356: 0x96B9,
	22357: 0x96BC,
	22358: 0x96BD,
	22359: 0x96CE,
	22360: 0x96D2,
	22361: 0x77BF,
	22362: 0x96E0,
	22363: 0x928E,
	22364: 0x92AE,
	22365: 0x92C8,
	22366: 0x933E,
	22367: 0x936A,
	22368: 0x93CA,
	22369: 0x938F,
	22370: 0x943E,
	22371: 0x946B,
	22372: 0x9C7F,
	22373: 0x9C82,
	22374: 0x9C85,
	22375: 0x9C86,
	22376: 0x9C87,
	22377: 0x9C88,
	22378: 0x7A23,
	22379: 0x9C8B,
	22380: 0x9C8E,
	22381: 0x9C90,
	22382: 0x9C91,
	22383: 0x9C92,
	22384: 0x9C94,
	22385: 0x9C95,
	22386: 0x9C9A,
	22387: 0x9C9B,
	22388: 0x9C9E,
	22389: 0x9C9F,
	22390: 0x9CA0,
	22391: 0x9CA1,
	22392: 0x9CA2,
	22393: 0x9CA3,
	22394: 0x9CA5,
	22395: 0x9CA6,
	22396: 0x9CA7,
	22397: 0x9CA8,
	22398: 0x9CA9,
	22399: 0x9CAB,
	22400: 0x9CAD,
	22401: 0x9CAE,
	22402: 0x9CB0,
	22403: 0x9CB1,
	22404: 0x9CB2,
	22405: 0x9CB3,
	22406: 0x9CB4,
	22407: 0x9CB5,
	22408: 0x9CB6,
	22409: 0x9CB7,
	22410: 0x9CBA,
	22411: 0x9CBB,
	22412: 0x9CBC,
	22413: 0x9CBD,
	22414: 0x9CC4,
	22415: 0x9CC5,
	22416: 0x9CC6,
	22417: 0x9CC7,
	22418: 0x9CCA,
	22419: 0x9CCB,
	22420: 0x9C3C,
	22421: 0x9C3D,
	22422: 0x9C3E,
	22423: 0x9C3F,
	22424: 0x9C40,
	22425: 0x9C41,
	22426: 0x9C42,
	22427: 0x9C43,
	22428: 0x9C44,
	22429: 0x9C45,
	22430: 0x9C46,
	22431: 0x9C47,
	22432: 0x9C48,
	22433: 0x9C49,
	22434: 0x9C4A,
	22435: 0x9C4B,
	22436: 0x9C4C,
	22437: 0x9C4D,
	22438: 0x9C4E,
	22439: 0x9C4F,
	22440: 0x9C50,
	22441: 0x9C51,
	22442: 0x9C52,
	22443: 0x9C53,
	22444: 0x9C54,
	22445: 0x9C55,
	22446: 0x9C56,
	22447: 0x9C57,
	22448: 0x9C58,
	22449: 0x9C59,
	22450: 0x9C5A,
	22451: 0x9C5B,
	22452: 0x9C5C,
	22453: 0x9C5D,
	22454: 0x9C5E,
	22455: 0x9C5F,
	22456: 0x9C60,
	22457: 0x9C61,
	22458: 0x9C62,
	22459: 0x9C63,
	22460: 0x9C64,
	22461: 0x9C65,
	22462: 0x9C66,
	22463: 0x9C67,
	22464: 0x9C68,
	22465: 0x9C69,
	22466: 0x9C6A,
	22467: 0x9C6B,
	22468: 0x9C6C,
	22469: 0x9C6D,
	22470: 0x9C6E,
	22471: 0x9C6F,
	22472: 0x9C70,
	22473: 0x9C71,
	22474: 0x9C72,
	22475: 0x9C73,
	22476: 0x9C74,
	22477: 0x9C75,
	22478: 0x9C76,
	22479: 0x9C77,
	22480: 0x9C78,
	22481: 0x9C79,
	22482: 0x9C7A,
	22483: 0x9C7B,
	22484: 0x9C7D,
	22485: 0x9C7E,
	22486: 0x9C80,
	22487: 0x9C83,
	22488: 0x9C84,
	22489: 0x9C89,
	22490: 0x9C8A,
	22491: 0x9C8C,
	22492: 0x9C8F,
	22493: 0x9C93,
	22494: 0x9C96,
	22495: 0x9C97,
	22496: 0x9C98,
	22497: 0x9C99,
	22498: 0x9C9D,
	22499: 0x9CAA,
	22500: 0x9CAC,
	22501: 0x9CAF,
	22502: 0x9CB9,
	22503: 0x9CBE,
	22504: 0x9CBF,
	22505: 0x9CC0,
	22506: 0x9CC1,
	22507: 0x9CC2,
	22508: 0x9CC8,
	22509: 0x9CC9,
	22510: 0x9CD1,
	22511: 0x9CD2,
	22512: 0x9CDA,
	22513: 0x9CDB,
	22514: 0x9CE0,
	22515: 0x9CE1,
	22516: 0x9CCC,
	22517: 0x9CCD,
	22518: 0x9CCE,
	22519: 0x9CCF,
	22520: 0x9CD0,
	22521: 0x9CD3,
	22522: 0x9CD4,
	22523: 0x9CD5,
	22524: 0x9CD7,
	22525: 0x9CD8,
	22526: 0x9CD9,
	22527: 0x9CDC,
	22528: 0x9CDD,
	22529: 0x9CDF,
	22530: 0x9CE2,
	22531: 0x977C,
	22532: 0x9785,
	22533: 0x9791,
	22534: 0x9792,
	22535: 0x9794,
	22536: 0x97AF,
	22537: 0x97AB,
	22538: 0x97A3,
	22539: 0x97B2,
	22540: 0x97B4,
	22541: 0x9AB1,
	22542: 0x9AB0,
	22543: 0x9AB7,
	22544: 0x9E58,
	22545: 0x9AB6,
	22546: 0x9ABA,
	22547: 0x9ABC,
	22548: 0x9AC1,
	22549: 0x9AC0,
	22550: 0x9AC5,
	22551: 0x9AC2,
	22552: 0x9ACB,
	22553: 0x9ACC,
	22554: 0x9AD1,
	22555: 0x9B45,
	22556: 0x9B43,
	22557: 0x9B47,
	22558: 0x9B49,
	22559: 0x9B48,
	22560: 0x9B4D,
	22561: 0x9B51,
	22562: 0x98E8,
	22563: 0x990D,
	22564: 0x992E,
	22565: 0x9955,
	22566: 0x9954,
	22567: 0x9ADF,
	22568: 0x9AE1,
	22569: 0x9AE6,
	22570: 0x9AEF,
	22571: 0x9AEB,
	22572: 0x9AFB,
	22573: 0x9AED,
	22574: 0x9AF9,
	22575: 0x9B08,
	22576: 0x9B0F,
	22577: 0x9B13,
	22578: 0x9B1F,
	22579: 0x9B23,
	22580: 0x9EBD,
	22581: 0x9EBE,
	22582: 0x7E3B,
	22583: 0x9E82,
	22584: 0x9E87,
	22585: 0x9E88,
	22586: 0x9E8B,
	22587: 0x9E92,
	22588: 0x93D6,
	22589: 0x9E9D,
	22590: 0x9E9F,
	22591: 0x9EDB,
	22592: 0x9EDC,
	22593: 0x9EDD,
	22594: 0x9EE0,
	22595: 0x9EDF,
	22596: 0x9EE2,
	22597: 0x9EE9,
	22598: 0x9EE7,
	22599: 0x9EE5,
	22600: 0x9EEA,
	22601: 0x9EEF,
	22602: 0x9F22,
	22603: 0x9F2C,
	22604: 0x9F2F,
	22605: 0x9F39,
	22606: 0x9F37,
	22607: 0x9F3D,
	22608: 0x9F3E,
	22609: 0x9F44,
	22610: 0x9CE3,
	22611: 0x9CE4,
	22612: 0x9CE5,
	22613: 0x9CE6,
	22614: 0x9CE7,
	22615: 0x9CE8,
	22616: 0x9CE9,
	22617: 0x9CEA,
	22618: 0x9CEB,
	22619: 0x9CEC,
	22620: 0x9CED,
	22621: 0x9CEE,
	22622: 0x9CEF,
	22623: 0x9CF0,
	22624: 0x9CF1,
	22625: 0x9CF2,
	22626: 0x9CF3,
	22627: 0x9CF4,
	22628: 0x9CF5,
	22629: 0x9CF6,
	22630: 0x9CF7,
	22631: 0x9CF8,
	22632: 0x9CF9,
	22633: 0x9CFA,
	22634: 0x9CFB,
	22635: 0x9CFC,
	22636: 0x9CFD,
	22637: 0x9CFE,
	22638: 0x9CFF,
	22639: 0x9D00,
	22640: 0x9D01,
	22641: 0x9D02,
	22642: 0x9D03,
	22643: 0x9D04,
	22644: 0x9D05,
	22645: 0x9D06,
	22646: 0x9D07,
	22647: 0x9D08,
	22648: 0x9D09,
	22649: 0x9D0A,
	22650: 0x9D0B,
	22651: 0x9D0C,
	22652: 0x9D0D,
	22653: 0x9D0E,
	22654: 0x9D0F,
	22655: 0x9D10,
	22656: 0x9D11,
	22657: 0x9D12,
	22658: 0x9D13,
	22659: 0x9D14,
	22660: 0x9D15,
	22661: 0x9D16,
	22662: 0x9D17,
	22663: 0x9D18,
	22664: 0x9D19,
	22665: 0x9D1A,
	22666: 0x9D1B,
	22667: 0x9D1C,
	22668: 0x9D1D,
	22669: 0x9D1E,
	22670: 0x9D1F,
	22671: 0x9D20,
	22672: 0x9D21,
	22673: 0x9D22,
	22674: 0x9D23,
	22675: 0x9D24,
	22676: 0x9D25,
	22677: 0x9D26,
	22678: 0x9D27,
	22679: 0x9D28,
	22680: 0x9D29,
	22681: 0x9D2A,
	22682: 0x9D2B,
	22683: 0x9D2C,
	22684: 0x9D2D,
	22685: 0x9D2E,
	22686: 0x9D2F,
	22687: 0x9D30,
	22688: 0x9D31,
	22689: 0x9D32,
	22690: 0x9D33,
	22691: 0x9D34,
	22692: 0x9D35,
	22693: 0x9D36,
	22694: 0x9D37,
	22695: 0x9D38,
	22696: 0x9D39,
	22697: 0x9D3A,
	22698: 0x9D3B,
	22699: 0x9D3C,
	22700: 0x9D3D,
	22701: 0x9D3E,
	22702: 0x9D3F,
	22703: 0x9D40,
	22704: 0x9D41,
	22705: 0x9D42,
	22800: 0x9D43,
	22801: 0x9D44,
	22802: 0x9D45,
	22803: 0x9D46,
	22804: 0x9D47,
	22805: 0x9D48,
	22806: 0x9D49,
	22807: 0x9D4A,
	22808: 0x9D4B,
	22809: 0x9D4C,
	22810: 0x9D4D,
	22811: 0x9D4E,
	22812: 0x9D4F,
	22813: 0x9D50,
	22814: 0x9D51,
	22815: 0x9D52,
	22816: 0x9D53,
	22817: 0x9D54,
	22818: 0x9D55,
	22819: 0x9D56,
	22820: 0x9D57,
	22821: 0x9D58,
	22822: 0x9D59,
	22823: 0x9D5A,
	22824: 0x9D5B,
	22825: 0x9D5C,
	22826: 0x9D5D,
	22827: 0x9D5E,
	22828: 0x9D5F,
	22829: 0x9D60,
	22830: 0x9D61,
	22831: 0x9D62,
	22832: 0x9D63,
	22833: 0x9D64,
	22834: 0x9D65,
	22835: 0x9D66,
	22836: 0x9D67,
	22837: 0x9D68,
	22838: 0x9D69,
	22839: 0x9D6A,
	22840: 0x9D6B,
	22841: 0x9D6C,
	22842: 0x9D6D,
	22843: 0x9D6E,
	22844: 0x9D6F,
	22845: 0x9D70,
	22846: 0x9D71,
	22847: 0x9D72,
	22848: 0x9D73,
	22849: 0x9D74,
	22850: 0x9D75,
	22851: 0x9D76,
	22852: 0x9D77,
	22853: 0x9D78,
	22854: 0x9D79,
	22855: 0x9D7A,
	22856: 0x9D7B,
	22857: 0x9D7C,
	22858: 0x9D7D,
	22859: 0x9D7E,
	22860: 0x9D7F,
	22861: 0x9D80,
	22862: 0x9D81,
	22863: 0x9D82,
	22864: 0x9D83,
	22865: 0x9D84,
	22866: 0x9D85,
	22867: 0x9D86,
	22868: 0x9D87,
	22869: 0x9D88,
	22870: 0x9D89,
	22871: 0x9D8A,
	22872: 0x9D8B,
	22873: 0x9D8C,
	22874: 0x9D8D,
	22875: 0x9D8E,
	22876: 0x9D8F,
	22877: 0x9D90,
	22878: 0x9D91,
	22879: 0x9D92,
	22880: 0x9D93,
	22881: 0x9D94,
	22882: 0x9D95,
	22883: 0x9D96,
	22884: 0x9D97,
	22885: 0x9D98,
	22886: 0x9D99,
	22887: 0x9D9A,
	22888: 0x9D9B,
	22889: 0x9D9C,
	22890: 0x9D9D,
	22891: 0x9D9E,
	22892: 0x9D9F,
	22893: 0x9DA0,
	22894: 0x9DA1,
	22895: 0x9DA2,
	22990: 0x9DA3,
	22991: 0x9DA4,
	22992: 0x9DA5,
	22993: 0x9DA6,
	22994: 0x9DA7,
	22995: 0x9DA8,
	22996: 0x9DA9,
	22997: 0x9DAA,
	22998: 0x9DAB,
	22999: 0x9DAC,
	23000: 0x9DAD,
	23001: 0x9DAE,
	23002: 0x9DAF,
	23003: 0x9DB0,
	23004: 0x9DB1,
	23005: 0x9DB2,
	23006: 0x9DB3,
	23007: 0x9DB4,
	23008: 0x9DB5,
	23009: 0x9DB6,
	23010: 0x9DB7,
	23011: 0x9DB8,
	23012: 0x9DB9,
	23013: 0x9DBA,
	23014: 0x9DBB,
	23015: 0x9DBC,
	23016: 0x9DBD,
	23017: 0x9DBE,
	23018: 0x9DBF,
	23019: 0x9DC0,
	23020: 0x9DC1,
	23021: 0x9DC2,
	23022: 0x9DC3,
	23023: 0x9DC4,
	23024: 0x9DC5,
	23025: 0x9DC6,
	23026: 0x9DC7,
	23027: 0x9DC8,
	23028: 0x9DC9,
	23029: 0x9DCA,
	23030: 0x9DCB,
	23031: 0x9DCC,
	23032: 0x9DCD,
	23033: 0x9DCE,
	23034: 0x9DCF,
	23035: 0x9DD0,
	23036: 0x9DD1,
	23037: 0x9DD2,
	23038: 0x9DD3,
	23039: 0x9DD4,
	23040: 0x9DD5,
	23041: 0x9DD6,
	23042: 0x9DD7,
	23043: 0x9DD8,
	23044: 0x9DD9,
	23045: 0x9DDA,
	23046: 0x9DDB,
	23047: 0x9DDC,
	23048: 0x9DDD,
	23049: 0x9DDE,
	23050: 0x9DDF,
	23051: 0x9DE0,
	23052: 0x9DE1,
	23053: 0x9DE2,
	23054: 0x9DE3,
	23055: 0x9DE4,
	23056: 0x9DE5,
	23057: 0x9DE6,
	23058: 0x9DE7,
	23059: 0x9DE8,
	23060: 0x9DE9,
	23061: 0x9DEA,
	23062: 0x9DEB,
	23063: 0x9DEC,
	23064: 0x9DED,
	23065: 0x9DEE,
	23066: 0x9DEF,
	23067: 0x9DF0,
	23068: 0x9DF1,
	23069: 0x9DF2,
	23070: 0x9DF3,
	23071: 0x9DF4,
	23072: 0x9DF5,
	23073: 0x9DF6,
	23074: 0x9DF7,
	23075: 0x9DF8,
	23076: 0x9DF9,
	23077: 0x9DFA,
	23078: 0x9DFB,
	23079: 0x9DFC,
	23080: 0x9DFD,
	23081: 0x9DFE,
	23082: 0x9DFF,
	23083: 0x9E00,
	23084: 0x9E01,
	23085: 0x9E02,
	23180: 0x9E03,
	23181: 0x9E04,
	23182: 0x9E05,
	23183: 0x9E06,
	23184: 0x9E07,
	23185: 0x9E08,
	23186: 0x9E09,
	23187: 0x9E0A,
	23188: 0x9E0B,
	23189: 0x9E0C,
	23190: 0x9E0D,
	23191: 0x9E0E,
	23192: 0x9E0F,
	23193: 0x9E10,
	23194: 0x9E11,
	23195: 0x9E12,
	23196: 0x9E13,
	23197: 0x9E14,
	23198: 0x9E15,
	23199: 0x9E16,
	23200: 0x9E17,
	23201: 0x9E18,
	23202: 0x9E19,
	23203: 0x9E1A,
	23204: 0x9E1B,
	23205: 0x9E1C,
	23206: 0x9E1D,
	23207: 0x9E1E,
	23208: 0x9E24,
	23209: 0x9E27,
	23210: 0x9E2E,
	23211: 0x9E30,
	23212: 0x9E34,
	23213: 0x9E3B,
	23214: 0x9E3C,
	23215: 0x9E40,
	23216: 0x9E4D,
	23217: 0x9E50,
	23218: 0x9E52,
	23219: 0x9E53,
	23220: 0x9E54,
	23221: 0x9E56,
	23222: 0x9E59,
	23223: 0x9E5D,
	23224: 0x9E5F,
	23225: 0x9E60,
	23226: 0x9E61,
	23227: 0x9E62,
	23228: 0x9E65,
	23229: 0x9E6E,
	23230: 0x9E6F,
	23231: 0x9E72,
	23232: 0x9E74,
	23233: 0x9E75,
	23234: 0x9E76,
	23235: 0x9E77,
	23236: 0x9E78,
	23237: 0x9E79,
	23238: 0x9E7A,
	23239: 0x9E7B,
	23240: 0x9E7C,
	23241: 0x9E7D,
	23242: 0x9E80,
	23243: 0x9E81,
	23244: 0x9E83,
	23245: 0x9E84,
	23246: 0x9E85,
	23247: 0x9E86,
	23248: 0x9E89,
	23249: 0x9E8A,
	23250: 0x9E8C,
	23251: 0x9E8D,
	23252: 0x9E8E,
	23253: 0x9E8F,
	23254: 0x9E90,
	23255: 0x9E91,
	23256: 0x9E94,
	23257: 0x9E95,
	23258: 0x9E96,
	23259: 0x9E97,
	23260: 0x9E98,
	23261: 0x9E99,
	23262: 0x9E9A,
	23263: 0x9E9B,
	23264: 0x9E9C,
	23265: 0x9E9E,
	23266: 0x9EA0,
	23267: 0x9EA1,
	23268: 0x9EA2,
	23269: 0x9EA3,
	23270: 0x9EA4,
	23271: 0x9EA5,
	23272: 0x9EA7,
	23273: 0x9EA8,
	23274: 0x9EA9,
	23275: 0x9EAA,
	23370: 0x9EAB,
	23371: 0x9EAC,
	23372: 0x9EAD,
	23373: 0x9EAE,
	23374: 0x9EAF,
	23375: 0x9EB0,
	23376: 0x9EB1,
	23377: 0x9EB2,
	23378: 0x9EB3,
	23379: 0x9EB5,
	23380: 0x9EB6,
	23381: 0x9EB7,
	23382: 0x9EB9,
	23383: 0x9EBA,
	23384: 0x9EBC,
	23385: 0x9EBF,
	23386: 0x9EC0,
	23387: 0x9EC1,
	23388: 0x9EC2,
	23389: 0x9EC3,
	23390: 0x9EC5,
	23391: 0x9EC6,
	23392: 0x9EC7,
	23393: 0x9EC8,
	23394: 0x9ECA,
	23395: 0x9ECB,
	23396: 0x9ECC,
	23397: 0x9ED0,
	23398: 0x9ED2,
	23399: 0x9ED3,
	23400: 0x9ED5,
	23401: 0x9ED6,
	23402: 0x9ED7,
	23403: 0x9ED9,
	23404: 0x9EDA,
	23405: 0x9EDE,
	23406: 0x9EE1,
	23407: 0x9EE3,
	23408: 0x9EE4,
	23409: 0x9EE6,
	23410: 0x9EE8,
	23411: 0x9EEB,
	23412: 0x9EEC,
	23413: 0x9EED,
	23414: 0x9EEE,
	23415: 0x9EF0,
	23416: 0x9EF1,
	23417: 0x9EF2,
	23418: 0x9EF3,
	23419: 0x9EF4,
	23420: 0x9EF5,
	23421: 0x9EF6,
	23422: 0x9EF7,
	23423: 0x9EF8,
	23424: 0x9EFA,
	23425: 0x9EFD,
	23426: 0x9EFF,
	23427: 0x9F00,
	23428: 0x9F01,
	23429: 0x9F02,
	23430: 0x9F03,
	23431: 0x9F04,
	23432: 0x9F05,
	23433: 0x9F06,
	23434: 0x9F07,
	23435: 0x9F08,
	23436: 0x9F09,
	23437: 0x9F0A,
	23438: 0x9F0C,
	23439: 0x9F0F,
	23440: 0x9F11,
	23441: 0x9F12,
	23442: 0x9F14,
	23443: 0x9F15,
	23444: 0x9F16,
	23445: 0x9F18,
	23446: 0x9F1A,
	23447: 0x9F1B,
	23448: 0x9F1C,
	23449: 0x9F1D,
	23450: 0x9F1E,
	23451: 0x9F1F,
	23452: 0x9F21,
	23453: 0x9F23,
	23454: 0x9F24,
	23455: 0x9F25,
	23456: 0x9F26,
	23457: 0x9F27,
	23458: 0x9F28,
	23459: 0x9F29,
	23460: 0x9F2A,
	23461: 0x9F2B,
	23462: 0x9F2D,
	23463: 0x9F2E,
	23464: 0x9F30,
	23465: 0x9F31,
	23560: 0x9F32,
	23561: 0x9F33,
	23562: 0x9F34,
	23563: 0x9F35,
	23564: 0x9F36,
	23565: 0x9F38,
	23566: 0x9F3A,
	23567: 0x9F3C,
	23568: 0x9F3F,
	23569: 0x9F40,
	23570: 0x9F41,
	23571: 0x9F42,
	23572: 0x9F43,
	23573: 0x9F45,
	23574: 0x9F46,
	23575: 0x9F47,
	23576: 0x9F48,
	23577: 0x9F49,
	23578: 0x9F4A,
	23579: 0x9F4B,
	23580: 0x9F4C,
	23581: 0x9F4D,
	23582: 0x9F4E,
	23583: 0x9F4F,
	23584: 0x9F52,
	23585: 0x9F53,
	23586: 0x9F54,
	23587: 0x9F55,
	23588: 0x9F56,
	23589: 0x9F57,
	23590: 0x9F58,
	23591: 0x9F59,
	23592: 0x9F5A,
	23593: 0x9F5B,
	23594: 0x9F5C,
	23595: 0x9F5D,
	23596: 0x9F5E,
	23597: 0x9F5F,
	23598: 0x9F60,
	23599: 0x9F61,
	23600: 0x9F62,
	23601: 0x9F63,
	23602: 0x9F64,
	23603: 0x9F65,
	23604: 0x9F66,
	23605: 0x9F67,
	23606: 0x9F68,
	23607: 0x9F69,
	23608: 0x9F6A,
	23609: 0x9F6B,
	23610: 0x9F6C,
	23611: 0x9F6D,
	23612: 0x9F6E,
	23613: 0x9F6F,
	23614: 0x9F70,
	23615: 0x9F71,
	23616: 0x9F72,
	23617: 0x9F73,
	23618: 0x9F74,
	23619: 0x9F75,
	23620: 0x9F76,
	23621: 0x9F77,
	23622: 0x9F78,
	23623: 0x9F79,
	23624: 0x9F7A,
	23625: 0x9F7B,
	23626: 0x9F7C,
	23627: 0x9F7D,
	23628: 0x9F7E,
	23629: 0x9F81,
	23630: 0x9F82,
	23631: 0x9F8D,
	23632: 0x9F8E,
	23633: 0x9F8F,
	23634: 0x9F90,
	23635: 0x9F91,
	23636: 0x9F92,
	23637: 0x9F93,
	23638: 0x9F94,
	23639: 0x9F95,
	23640: 0x9F96,
	23641: 0x9F97,
	23642: 0x9F98,
	23643: 0x9F9C,
	23644: 0x9F9D,
	23645: 0x9F9E,
	23646: 0x9FA1,
	23647: 0x9FA2,
	23648: 0x9FA3,
	23649: 0x9FA4,
	23650: 0x9FA5,
	23651: 0xF92C,
	23652: 0xF979,
	23653: 0xF995,
	23654: 0xF9E7,
	23655: 0xF9F1,
	23750: 0xFA0C,
	23751: 0xFA0D,
	23752: 0xFA0E,
	23753: 0xFA0F,
	23754: 0xFA11,
	23755: 0xFA13,
	23756: 0xFA14,
	23757: 0xFA18,
	23758: 0xFA1F,
	23759: 0xFA20,
	23760: 0xFA21,
	23761: 0xFA23,
	23762: 0xFA24,
	23763: 0xFA27,
	23764: 0xFA28,
	23765: 0xFA29,
	23766: 0x2E81,
	23770: 0x2E84,
	23771: 0x3473,
	23772: 0x3447,
	23773: 0x2E88,
	23774: 0x2E8B,
	23776: 0x359E,
	23777: 0x361A,
	23778: 0x360E,
	23779: 0x2E8C,
	23780: 0x2E97,
	23781: 0x396E,
	23782: 0x3918,
	23784: 0x39CF,
	23785: 0x39DF,
	23786: 0x3A73,
	23787: 0x39D0,
	23790: 0x3B4E,
	23791: 0x3C6E,
	23792: 0x3CE0,
	23793: 0x2EA7,
	23796: 0x2EAA,
	23797: 0x4056,
	23798: 0x415F,
	23799: 0x2EAE,
	23800: 0x4337,
	23801: 0x2EB3,
	23802: 0x2EB6,
	23803: 0x2EB7,
	23805: 0x43B1,
	23806: 0x43AC,
	23807: 0x2EBB,
	23808: 0x43DD,
	23809: 0x44D6,
	23810: 0x4661,
	23811: 0x464C,
	23813: 0x4723,
	23814: 0x4729,
	23815: 0x477C,
	23816: 0x478D,
	23817: 0x2ECA,
	23818: 0x4947,
	23819: 0x497A,
	23820: 0x497D,
	23821: 0x4982,
	23822: 0x4983,
	23823: 0x4985,
	23824: 0x4986,
	23825: 0x499F,
	23826: 0x499B,
	23827: 0x49B7,
	23828: 0x49B6,
	23831: 0x4CA3,
	23832: 0x4C9F,
	23833: 0x4CA0,
	23834: 0x4CA1,
	23835: 0x4C77,
	23836: 0x4CA2,
	23837: 0x4D13,
	23838: 0x4D14,
	23839: 0x4D15,
	23840: 0x4D16,
	23841: 0x4D17,
	23842: 0x4D18,
	23843: 0x4D19,
	23844: 0x4DAE,
}

const numEncodeTables = 5

// encodeX are the encoding tables from Unicode to GBK code,
// sorted by decreasing length.
// encode0: 28965 entries for runes in [11905, 40870).
// encode1:  1587 entries for runes in [ 8208,  9795).
// encode2:   942 entries for runes in [  164,  1106).
// encode3:   438 entries for runes in [65072, 65510).
// encode4:   254 entries for runes in [63788, 64042).

const encode0Low, encode0High = 11905, 40870

var encode0 = [...]uint16{
	11905 - 11905: 0xFE50,
	11908 - 11905: 0xFE54,
	11912 - 11905: 0xFE57,
	11915 - 11905: 0xFE58,
	11916 - 11905: 0xFE5D,
	11927 - 11905: 0xFE5E,
	11943 - 11905: 0xFE6B,
	11946 - 11905: 0xFE6E,
	11950 - 11905: 0xFE71,
	11955 - 11905: 0xFE73,
	11958 - 11905: 0xFE74,
	11959 - 11905: 0xFE75,
	11963 - 11905: 0xFE79,
	11978 - 11905: 0xFE84,
	12272 - 11905: 0xA98A,
	12273 - 11905: 0xA98B,
	12274 - 11905: 0xA98C,
	12275 - 11905: 0xA98D,
	12276 - 11905: 0xA98E,
	12277 - 11905: 0xA98F,
	12278 - 11905: 0xA990,
	12279 - 11905: 0xA991,
	12280 - 11905: 0xA992,
	12281 - 11905: 0xA993,
	12282 - 11905: 0xA994,
	12283 - 11905: 0xA995,
	12288 - 11905: 0xA1A1,
	12289 - 11905: 0xA1A2,
	12290 - 11905: 0xA1A3,
	12291 - 11905: 0xA1A8,
	12293 - 11905: 0xA1A9,
	12294 - 11905: 0xA965,
	12295 - 11905: 0xA996,
	12296 - 11905: 0xA1B4,
	12297 - 11905: 0xA1B5,
	12298 - 11905: 0xA1B6,
	12299 - 11905: 0xA1B7,
	12300 - 11905: 0xA1B8,
	12301 - 11905: 0xA1B9,
	12302 - 11905: 0xA1BA,
	12303 - 11905: 0xA1BB,
	12304 - 11905: 0xA1BE,
	12305 - 11905: 0xA1BF,
	12306 - 11905: 0xA893,
	12307 - 11905: 0xA1FE,
	12308 - 11905: 0xA1B2,
	12309 - 11905: 0xA1B3,
	12310 - 11905: 0xA1BC,
	12311 - 11905: 0xA1BD,
	12317 - 11905: 0xA894,
	12318 - 11905: 0xA895,
	12321 - 11905: 0xA940,
	12322 - 11905: 0xA941,
	12323 - 11905: 0xA942,
	12324 - 11905: 0xA943,
	12325 - 11905: 0xA944,
	12326 - 11905: 0xA945,
	12327 - 11905: 0xA946,
	12328 - 11905: 0xA947,
	12329 - 11905: 0xA948,
	12350 - 11905: 0xA989,
	12353 - 11905: 0xA4A1,
	12354 - 11905: 0xA4A2,
	12355 - 11905: 0xA4A3,
	12356 - 11905: 0xA4A4,
	12357 - 11905: 0xA4A5,
	12358 - 11905: 0xA4A6,
	12359 - 11905: 0xA4A7,
	12360 - 11905: 0xA4A8,
	12361 - 11905: 0xA4A9,
	12362 - 11905: 0xA4AA,
	12363 - 11905: 0xA4AB,
	12364 - 11905: 0xA4AC,
	12365 - 11905: 0xA4AD,
	12366 - 11905: 0xA4AE,
	12367 - 11905: 0xA4AF,
	12368 - 11905: 0xA4B0,
	12369 - 11905: 0xA4B1,
	12370 - 11905: 0xA4B2,
	12371 - 11905: 0xA4B3,
	12372 - 11905: 0xA4B4,
	12373 - 11905: 0xA4B5,
	12374 - 11905: 0xA4B6,
	12375 - 11905: 0xA4B7,
	12376 - 11905: 0xA4B8,
	12377 - 11905: 0xA4B9,
	12378 - 11905: 0xA4BA,
	12379 - 11905: 0xA4BB,
	12380 - 11905: 0xA4BC,
	12381 - 11905: 0xA4BD,
	12382 - 11905: 0xA4BE,
	12383 - 11905: 0xA4BF,
	12384 - 11905: 0xA4C0,
	12385 - 11905: 0xA4C1,
	12386 - 11905: 0xA4C2,
	12387 - 11905: 0xA4C3,
	12388 - 11905: 0xA4C4,
	12389 - 11905: 0xA4C5,
	12390 - 11905: 0xA4C6,
	12391 - 11905: 0xA4C7,
	12392 - 11905: 0xA4C8,
	12393 - 11905: 0xA4C9,
	12394 - 11905: 0xA4CA,
	12395 - 11905: 0xA4CB,
	12396 - 11905: 0xA4CC,
	12397 - 11905: 0xA4CD,
	12398 - 11905: 0xA4CE,
	12399 - 11905: 0xA4CF,
	12400 - 11905: 0xA4D0,
	12401 - 11905: 0xA4D1,
	12402 - 11905: 0xA4D2,
	12403 - 11905: 0xA4D3,
	12404 - 11905: 0xA4D4,
	12405 - 11905: 0xA4D5,
	12406 - 11905: 0xA4D6,
	12407 - 11905: 0xA4D7,
	12408 - 11905: 0xA4D8,
	12409 - 11905: 0xA4D9,
	12410 - 11905: 0xA4DA,
	12411 - 11905: 0xA4DB,
	12412 - 11905: 0xA4DC,
	12413 - 11905: 0xA4DD,
	12414 - 11905: 0xA4DE,
	12415 - 11905: 0xA4DF,
	12416 - 11905: 0xA4E0,
	12417 - 11905: 0xA4E1,
	12418 - 11905: 0xA4E2,
	12419 - 11905: 0xA4E3,
	12420 - 11905: 0xA4E4,
	12421 - 11905: 0xA4E5,
	12422 - 11905: 0xA4E6,
	12423 - 11905: 0xA4E7,
	12424 - 11905: 0xA4E8,
	12425 - 11905: 0xA4E9,
	12426 - 11905: 0xA4EA,
	12427 - 11905: 0xA4EB,
	12428 - 11905: 0xA4EC,
	12429 - 11905: 0xA4ED,
	12430 - 11905: 0xA4EE,
	12431 - 11905: 0xA4EF,
	12432 - 11905: 0xA4F0,
	12433 - 11905: 0xA4F1,
	12434 - 11905: 0xA4F2,
	12435 - 11905: 0xA4F3,
	12443 - 11905: 0xA961,
	12444 - 11905: 0xA962,
	12445 - 11905: 0xA966,
	12446 - 11905: 0xA967,
	12449 - 11905: 0xA5A1,
	12450 - 11905: 0xA5A2,
	12451 - 11905: 0xA5A3,
	12452 - 11905: 0xA5A4,
	12453 - 11905: 0xA5A5,
	12454 - 11905: 0xA5A6,
	12455 - 11905: 0xA5A7,
	12456 - 11905: 0xA5A8,
	12457 - 11905: 0xA5A9,
	12458 - 11905: 0xA5AA,
	12459 - 11905: 0xA5AB,
	12460 - 11905: 0xA5AC,
	12461 - 11905: 0xA5AD,
	12462 - 11905: 0xA5AE,
	12463 - 11905: 0xA5AF,
	12464 - 11905: 0xA5B0,
	12465 - 11905: 0xA5B1,
	12466 - 11905: 0xA5B2,
	12467 - 11905: 0xA5B3,
	12468 - 11905: 0xA5B4,
	12469 - 11905: 0xA5B5,
	12470 - 11905: 0xA5B6,
	12471 - 11905: 0xA5B7,
	12472 - 11905: 0xA5B8,
	12473 - 11905: 0xA5B9,
	12474 - 11905: 0xA5BA,
	12475 - 11905: 0xA5BB,
	12476 - 11905: 0xA5BC,
	12477 - 11905: 0xA5BD,
	12478 - 11905: 0xA5BE,
	12479 - 11905: 0xA5BF,
	12480 - 11905: 0xA5C0,
	12481 - 11905: 0xA5C1,
	12482 - 11905: 0xA5C2,
	12483 - 11905: 0xA5C3,
	12484 - 11905: 0xA5C4,
	12485 - 11905: 0xA5C5,
	12486 - 11905: 0xA5C6,
	12487 - 11905: 0xA5C7,
	12488 - 11905: 0xA5C8,
	12489 - 11905: 0xA5C9,
	12490 - 11905: 0xA5CA,
	12491 - 11905: 0xA5CB,
	12492 - 11905: 0xA5CC,
	12493 - 11905: 0xA5CD,
	12494 - 11905: 0xA5CE,
	12495 - 11905: 0xA5CF,
	12496 - 11905: 0xA5D0,
	12497 - 11905: 0xA5D1,
	12498 - 11905: 0xA5D2,
	12499 - 11905: 0xA5D3,
	12500 - 11905: 0xA5D4,
	12501 - 11905: 0xA5D5,
	12502 - 11905: 0xA5D6,
	12503 - 11905: 0xA5D7,
	12504 - 11905: 0xA5D8,
	12505 - 11905: 0xA5D9,
	12506 - 11905: 0xA5DA,
	12507 - 11905: 0xA5DB,
	12508 - 11905: 0xA5DC,
	12509 - 11905: 0xA5DD,
	12510 - 11905: 0xA5DE,
	12511 - 11905: 0xA5DF,
	12512 - 11905: 0xA5E0,
	12513 - 11905: 0xA5E1,
	12514 - 11905: 0xA5E2,
	12515 - 11905: 0xA5E3,
	12516 - 11905: 0xA5E4,
	12517 - 11905: 0xA5E5,
	12518 - 11905: 0xA5E6,
	12519 - 11905: 0xA5E7,
	12520 - 11905: 0xA5E8,
	12521 - 11905: 0xA5E9,
	12522 - 11905: 0xA5EA,
	12523 - 11905: 0xA5EB,
	12524 - 11905: 0xA5EC,
	12525 - 11905: 0xA5ED,
	12526 - 11905: 0xA5EE,
	12527 - 11905: 0xA5EF,
	12528 - 11905: 0xA5F0,
	12529 - 11905: 0xA5F1,
	12530 - 11905: 0xA5F2,
	12531 - 11905: 0xA5F3,
	12532 - 11905: 0xA5F4,
	12533 - 11905: 0xA5F5,
	12534 - 11905: 0xA5F6,
	12540 - 11905: 0xA960,
	12541 - 11905: 0xA963,
	12542 - 11905: 0xA964,
	12549 - 11905: 0xA8C5,
	12550 - 11905: 0xA8C6,
	12551 - 11905: 0xA8C7,
	12552 - 11905: 0xA8C8,
	12553 - 11905: 0xA8C9,
	12554 - 11905: 0xA8CA,
	12555 - 11905: 0xA8CB,
	12556 - 11905: 0xA8CC,
	12557 - 11905: 0xA8CD,
	12558 - 11905: 0xA8CE,
	12559 - 11905: 0xA8CF,
	12560 - 11905: 0xA8D0,
	12561 - 11905: 0xA8D1,
	12562 - 11905: 0xA8D2,
	12563 - 11905: 0xA8D3,
	12564 - 11905: 0xA8D4,
	12565 - 11905: 0xA8D5,
	12566 - 11905: 0xA8D6,
	12567 - 11905: 0xA8D7,
	12568 - 11905: 0xA8D8,
	12569 - 11905: 0xA8D9,
	12570 - 11905: 0xA8DA,
	12571 - 11905: 0xA8DB,
	12572 - 11905: 0xA8DC,
	12573 - 11905: 0xA8DD,
	12574 - 11905: 0xA8DE,
	12575 - 11905: 0xA8DF,
	12576 - 11905: 0xA8E0,
	12577 - 11905: 0xA8E1,
	12578 - 11905: 0xA8E2,
	12579 - 11905: 0xA8E3,
	12580 - 11905: 0xA8E4,
	12581 - 11905: 0xA8E5,
	12582 - 11905: 0xA8E6,
	12583 - 11905: 0xA8E7,
	12584 - 11905: 0xA8E8,
	12585 - 11905: 0xA8E9,
	12832 - 11905: 0xA2E5,
	12833 - 11905: 0xA2E6,
	12834 - 11905: 0xA2E7,
	12835 - 11905: 0xA2E8,
	12836 - 11905: 0xA2E9,
	12837 - 11905: 0xA2EA,
	12838 - 11905: 0xA2EB,
	12839 - 11905: 0xA2EC,
	12840 - 11905: 0xA2ED,
	12841 - 11905: 0xA2EE,
	12849 - 11905: 0xA95A,
	12963 - 11905: 0xA949,
	13198 - 11905: 0xA94A,
	13199 - 11905: 0xA94B,
	13212 - 11905: 0xA94C,
	13213 - 11905: 0xA94D,
	13214 - 11905: 0xA94E,
	13217 - 11905: 0xA94F,
	13252 - 11905: 0xA950,
	13262 - 11905: 0xA951,
	13265 - 11905: 0xA952,
	13266 - 11905: 0xA953,
	13269 - 11905: 0xA954,
	13383 - 11905: 0xFE56,
	13427 - 11905: 0xFE55,
	13726 - 11905: 0xFE5A,
	13838 - 11905: 0xFE5C,
	13850 - 11905: 0xFE5B,
	14616 - 11905: 0xFE60,
	14702 - 11905: 0xFE5F,
	14799 - 11905: 0xFE62,
	14800 - 11905: 0xFE65,
	14815 - 11905: 0xFE63,
	14963 - 11905: 0xFE64,
	15182 - 11905: 0xFE68,
	15470 - 11905: 0xFE69,
	15584 - 11905: 0xFE6A,
	16470 - 11905: 0xFE6F,
	16735 - 11905: 0xFE70,
	17207 - 11905: 0xFE72,
	17324 - 11905: 0xFE78,
	17329 - 11905: 0xFE77,
	17373 - 11905: 0xFE7A,
	17622 - 11905: 0xFE7B,
	17996 - 11905: 0xFE7D,
	18017 - 11905: 0xFE7C,
	18211 - 11905: 0xFE80,
	18217 - 11905: 0xFE81,
	18300 - 11905: 0xFE82,
	18317 - 11905: 0xFE83,
	18759 - 11905: 0xFE85,
	18810 - 11905: 0xFE86,
	18813 - 11905: 0xFE87,
	18818 - 11905: 0xFE88,
	18819 - 11905: 0xFE89,
	18821 - 11905: 0xFE8A,
	18822 - 11905: 0xFE8B,
	18843 - 11905: 0xFE8D,
	18847 - 11905: 0xFE8C,
	18870 - 11905: 0xFE8F,
	18871 - 11905: 0xFE8E,
	19575 - 11905: 0xFE96,
	19615 - 11905: 0xFE93,
	19616 - 11905: 0xFE94,
	19617 - 11905: 0xFE95,
	19618 - 11905: 0xFE97,
	19619 - 11905: 0xFE92,
	19731 - 11905: 0xFE98,
	19732 - 11905: 0xFE99,
	19733 - 11905: 0xFE9A,
	19734 - 11905: 0xFE9B,
	19735 - 11905: 0xFE9C,
	19736 - 11905: 0xFE9D,
	19737 - 11905: 0xFE9E,
	19886 - 11905: 0xFE9F,
	19968 - 11905: 0xD2BB,
	19969 - 11905: 0xB6A1,
	19970 - 11905: 0x8140,
	19971 - 11905: 0xC6DF,
	19972 - 11905: 0x8141,
	19973 - 11905: 0x8142,
	19974 - 11905: 0x8143,
	19975 - 11905: 0xCDF2,
	19976 - 11905: 0xD5C9,
	19977 - 11905: 0xC8FD,
	19978 - 11905: 0xC9CF,
	19979 - 11905: 0xCFC2,
	19980 - 11905: 0xD8A2,
	19981 - 11905: 0xB2BB,
	19982 - 11905: 0xD3EB,
	19983 - 11905: 0x8144,
	19984 - 11905: 0xD8A4,
	19985 - 11905: 0xB3F3,
	19986 - 11905: 0x8145,
	19987 - 11905: 0xD7A8,
	19988 - 11905: 0xC7D2,
	19989 - 11905: 0xD8A7,
	19990 - 11905: 0xCAC0,
	19991 - 11905: 0x8146,
	19992 - 11905: 0xC7F0,
	19993 - 11905: 0xB1FB,
	19994 - 11905: 0xD2B5,
	19995 - 11905: 0xB4D4,
	19996 - 11905: 0xB6AB,
	19997 - 11905: 0xCBBF,
	19998 - 11905: 0xD8A9,
	19999 - 11905: 0x8147,
	20000 - 11905: 0x8148,
	20001 - 11905: 0x8149,
	20002 - 11905: 0xB6AA,
	20003 - 11905: 0x814A,
	20004 - 11905: 0xC1BD,
	20005 - 11905: 0xD1CF,
	20006 - 11905: 0x814B,
	20007 - 11905: 0xC9A5,
	20008 - 11905: 0xD8AD,
	20009 - 11905: 0x814C,
	20010 - 11905: 0xB8F6,
	20011 - 11905: 0xD1BE,
	20012 - 11905: 0xE3DC,
	20013 - 11905: 0xD6D0,
	20014 - 11905: 0x814D,
	20015 - 11905: 0x814E,
	20016 - 11905: 0xB7E1,
	20017 - 11905: 0x814F,
	20018 - 11905: 0xB4AE,
	20019 - 11905: 0x8150,
	20020 - 11905: 0xC1D9,
	20021 - 11905: 0x8151,
	20022 - 11905: 0xD8BC,
	20023 - 11905: 0x8152,
	20024 - 11905: 0xCDE8,
	20025 - 11905: 0xB5A4,
	20026 - 11905: 0xCEAA,
	20027 - 11905: 0xD6F7,
	20028 - 11905: 0x8153,
	20029 - 11905: 0xC0F6,
	20030 - 11905: 0xBED9,
	20031 - 11905: 0xD8AF,
	20032 - 11905: 0x8154,
	20033 - 11905: 0x8155,
	20034 - 11905: 0x8156,
	20035 - 11905: 0xC4CB,
	20036 - 11905: 0x8157,
	20037 - 11905: 0xBEC3,
	20038 - 11905: 0x8158,
	20039 - 11905: 0xD8B1,
	20040 - 11905: 0xC3B4,
	20041 - 11905: 0xD2E5,
	20042 - 11905: 0x8159,
	20043 - 11905: 0xD6AE,
	20044 - 11905: 0xCEDA,
	20045 - 11905: 0xD5A7,
	20046 - 11905: 0xBAF5,
	20047 - 11905: 0xB7A6,
	20048 - 11905: 0xC0D6,
	20049 - 11905: 0x815A,
	20050 - 11905: 0xC6B9,
	20051 - 11905: 0xC5D2,
	20052 - 11905: 0xC7C7,
	20053 - 11905: 0x815B,
	20054 - 11905: 0xB9D4,
	20055 - 11905: 0x815C,
	20056 - 11905: 0xB3CB,
	20057 - 11905: 0xD2D2,
	20058 - 11905: 0x815D,
	20059 - 11905: 0x815E,
	20060 - 11905: 0xD8BF,
	20061 - 11905: 0xBEC5,
	20062 - 11905: 0xC6F2,
	20063 - 11905: 0xD2B2,
	20064 - 11905: 0xCFB0,
	20065 - 11905: 0xCFE7,
	20066 - 11905: 0x815F,
	20067 - 11905: 0x8160,
	20068 - 11905: 0x8161,
	20069 - 11905: 0x8162,
	20070 - 11905: 0xCAE9,
	20071 - 11905: 0x8163,
	20072 - 11905: 0x8164,
	20073 - 11905: 0xD8C0,
	20074 - 11905: 0x8165,
	20075 - 11905: 0x8166,
	20076 - 11905: 0x8167,
	20077 - 11905: 0x8168,
	20078 - 11905: 0x8169,
	20079 - 11905: 0x816A,
	20080 - 11905: 0xC2F2,
	20081 - 11905: 0xC2D2,
	20082 - 11905: 0x816B,
	20083 - 11905: 0xC8E9,
	20084 - 11905: 0x816C,
	20085 - 11905: 0x816D,
	20086 - 11905: 0x816E,
	20087 - 11905: 0x816F,
	20088 - 11905: 0x8170,
	20089 - 11905: 0x8171,
	20090 - 11905: 0x8172,
	20091 - 11905: 0x8173,
	20092 - 11905: 0x8174,
	20093 - 11905: 0x8175,
	20094 - 11905: 0xC7AC,
	20095 - 11905: 0x8176,
	20096 - 11905: 0x8177,
	20097 - 11905: 0x8178,
	20098 - 11905: 0x8179,
	20099 - 11905: 0x817A,
	20100 - 11905: 0x817B,
	20101 - 11905: 0x817C,
	20102 - 11905: 0xC1CB,
	20103 - 11905: 0x817D,
	20104 - 11905: 0xD3E8,
	20105 - 11905: 0xD5F9,
	20106 - 11905: 0x817E,
	20107 - 11905: 0xCAC2,
	20108 - 11905: 0xB6FE,
	20109 - 11905: 0xD8A1,
	20110 - 11905: 0xD3DA,
	20111 - 11905: 0xBFF7,
	20112 - 11905: 0x8180,
	20113 - 11905: 0xD4C6,
	20114 - 11905: 0xBBA5,
	20115 - 11905: 0xD8C1,
	20116 - 11905: 0xCEE5,
	20117 - 11905: 0xBEAE,
	20118 - 11905: 0x8181,
	20119 - 11905: 0x8182,
	20120 - 11905: 0xD8A8,
	20121 - 11905: 0x8183,
	20122 - 11905: 0xD1C7,
	20123 - 11905: 0xD0A9,
	20124 - 11905: 0x8184,
	20125 - 11905: 0x8185,
	20126 - 11905: 0x8186,
	20127 - 11905: 0xD8BD,
	20128 - 11905: 0xD9EF,
	20129 - 11905: 0xCDF6,
	20130 - 11905: 0xBFBA,
	20131 - 11905: 0x8187,
	20132 - 11905: 0xBDBB,
	20133 - 11905: 0xBAA5,
	20134 - 11905: 0xD2E0,
	20135 - 11905: 0xB2FA,
	20136 - 11905: 0xBAE0,
	20137 - 11905: 0xC4B6,
	20138 - 11905: 0x8188,
	20139 - 11905: 0xCFED,
	20140 - 11905: 0xBEA9,
	20141 - 11905: 0xCDA4,
	20142 - 11905: 0xC1C1,
	20143 - 11905: 0x8189,
	20144 - 11905: 0x818A,
	20145 - 11905: 0x818B,
	20146 - 11905: 0xC7D7,
	20147 - 11905: 0xD9F1,
	20148 - 11905: 0x818C,
	20149 - 11905: 0xD9F4,
	20150 - 11905: 0x818D,
	20151 - 11905: 0x818E,
	20152 - 11905: 0x818F,
	20153 - 11905: 0x8190,
	20154 - 11905: 0xC8CB,
	20155 - 11905: 0xD8E9,
	20156 - 11905: 0x8191,
	20157 - 11905: 0x8192,
	20158 - 11905: 0x8193,
	20159 - 11905: 0xD2DA,
	20160 - 11905: 0xCAB2,
	20161 - 11905: 0xC8CA,
	20162 - 11905: 0xD8EC,
	20163 - 11905: 0xD8EA,
	20164 - 11905: 0xD8C6,
	20165 - 11905: 0xBDF6,
	20166 - 11905: 0xC6CD,
	20167 - 11905: 0xB3F0,
	20168 - 11905: 0x8194,
	20169 - 11905: 0xD8EB,
	20170 - 11905: 0xBDF1,
	20171 - 11905: 0xBDE9,
	20172 - 11905: 0x8195,
	20173 - 11905: 0xC8D4,
	20174 - 11905: 0xB4D3,
	20175 - 11905: 0x8196,
	20176 - 11905: 0x8197,
	20177 - 11905: 0xC2D8,
	20178 - 11905: 0x8198,
	20179 - 11905: 0xB2D6,
	20180 - 11905: 0xD7D0,
	20181 - 11905: 0xCACB,
	20182 - 11905: 0xCBFB,
	20183 - 11905: 0xD5CC,
	20184 - 11905: 0xB8B6,
	20185 - 11905: 0xCFC9,
	20186 - 11905: 0x8199,
	20187 - 11905: 0x819A,
	20188 - 11905: 0x819B,
	20189 - 11905: 0xD9DA,
	20190 - 11905: 0xD8F0,
	20191 - 11905: 0xC7AA,
	20192 - 11905: 0x819C,
	20193 - 11905: 0xD8EE,
	20194 - 11905: 0x819D,
	20195 - 11905: 0xB4FA,
	20196 - 11905: 0xC1EE,
	20197 - 11905: 0xD2D4,
	20198 - 11905: 0x819E,
	20199 - 11905: 0x819F,
	20200 - 11905: 0xD8ED,
	20201 - 11905: 0x81A0,
	20202 - 11905: 0xD2C7,
	20203 - 11905: 0xD8EF,
	20204 - 11905: 0xC3C7,
	20205 - 11905: 0x81A1,
	20206 - 11905: 0x81A2,
	20207 - 11905: 0x81A3,
	20208 - 11905: 0xD1F6,
	20209 - 11905: 0x81A4,
	20210 - 11905: 0xD6D9,
	20211 - 11905: 0xD8F2,
	20212 - 11905: 0x81A5,
	20213 - 11905: 0xD8F5,
	20214 - 11905: 0xBCFE,
	20215 - 11905: 0xBCDB,
	20216 - 11905: 0x81A6,
	20217 - 11905: 0x81A7,
	20218 - 11905: 0x81A8,
	20219 - 11905: 0xC8CE,
	20220 - 11905: 0x81A9,
	20221 - 11905: 0xB7DD,
	20222 - 11905: 0x81AA,
	20223 - 11905: 0xB7C2,
	20224 - 11905: 0x81AB,
	20225 - 11905: 0xC6F3,
	20226 - 11905: 0x81AC,
	20227 - 11905: 0x81AD,
	20228 - 11905: 0x81AE,
	20229 - 11905: 0x81AF,
	20230 - 11905: 0x81B0,
	20231 - 11905: 0x81B1,
	20232 - 11905: 0x81B2,
	20233 - 11905: 0xD8F8,
	20234 - 11905: 0xD2C1,
	20235 - 11905: 0x81B3,
	20236 - 11905: 0x81B4,
	20237 - 11905: 0xCEE9,
	20238 - 11905: 0xBCBF,
	20239 - 11905: 0xB7FC,
	20240 - 11905: 0xB7A5,
	20241 - 11905: 0xD0DD,
	20242 - 11905: 0x81B5,
	20243 - 11905: 0x81B6,
	20244 - 11905: 0x81B7,
	20245 - 11905: 0x81B8,
	20246 - 11905: 0x81B9,
	20247 - 11905: 0xD6DA,
	20248 - 11905: 0xD3C5,
	20249 - 11905: 0xBBEF,
	20250 - 11905: 0xBBE1,
	20251 - 11905: 0xD8F1,
	20252 - 11905: 0x81BA,
	20253 - 11905: 0x81BB,
	20254 - 11905: 0xC9A1,
	20255 - 11905: 0xCEB0,
	20256 - 11905: 0xB4AB,
	20257 - 11905: 0x81BC,
	20258 - 11905: 0xD8F3,
	20259 - 11905: 0x81BD,
	20260 - 11905: 0xC9CB,
	20261 - 11905: 0xD8F6,
	20262 - 11905: 0xC2D7,
	20263 - 11905: 0xD8F7,
	20264 - 11905: 0x81BE,
	20265 - 11905: 0x81BF,
	20266 - 11905: 0xCEB1,
	20267 - 11905: 0xD8F9,
	20268 - 11905: 0x81C0,
	20269 - 11905: 0x81C1,
	20270 - 11905: 0x81C2,
	20271 - 11905: 0xB2AE,
	20272 - 11905: 0xB9C0,
	20273 - 11905: 0x81C3,
	20274 - 11905: 0xD9A3,
	20275 - 11905: 0x81C4,
	20276 - 11905: 0xB0E9,
	20277 - 11905: 0x81C5,
	20278 - 11905: 0xC1E6,
	20279 - 11905: 0x81C6,
	20280 - 11905: 0xC9EC,
	20281 - 11905: 0x81C7,
	20282 - 11905: 0xCBC5,
	20283 - 11905: 0x81C8,
	20284 - 11905: 0xCBC6,
	20285 - 11905: 0xD9A4,
	20286 - 11905: 0x81C9,
	20287 - 11905: 0x81CA,
	20288 - 11905: 0x81CB,
	20289 - 11905: 0x81CC,
	20290 - 11905: 0x81CD,
	20291 - 11905: 0xB5E8,
	20292 - 11905: 0x81CE,
	20293 - 11905: 0x81CF,
	20294 - 11905: 0xB5AB,
	20295 - 11905: 0x81D0,
	20296 - 11905: 0x81D1,
	20297 - 11905: 0x81D2,
	20298 - 11905: 0x81D3,
	20299 - 11905: 0x81D4,
	20300 - 11905: 0x81D5,
	20301 - 11905: 0xCEBB,
	20302 - 11905: 0xB5CD,
	20303 - 11905: 0xD7A1,
	20304 - 11905: 0xD7F4,
	20305 - 11905: 0xD3D3,
	20306 - 11905: 0x81D6,
	20307 - 11905: 0xCCE5,
	20308 - 11905: 0x81D7,
	20309 - 11905: 0xBACE,
	20310 - 11905: 0x81D8,
	20311 - 11905: 0xD9A2,
	20312 - 11905: 0xD9DC,
	20313 - 11905: 0xD3E0,
	20314 - 11905: 0xD8FD,
	20315 - 11905: 0xB7F0,
	20316 - 11905: 0xD7F7,
	20317 - 11905: 0xD8FE,
	20318 - 11905: 0xD8FA,
	20319 - 11905: 0xD9A1,
	20320 - 11905: 0xC4E3,
	20321 - 11905: 0x81D9,
	20322 - 11905: 0x81DA,
	20323 - 11905: 0xD3B6,
	20324 - 11905: 0xD8F4,
	20325 - 11905: 0xD9DD,
	20326 - 11905: 0x81DB,
	20327 - 11905: 0xD8FB,
	20328 - 11905: 0x81DC,
	20329 - 11905: 0xC5E5,
	20330 - 11905: 0x81DD,
	20331 - 11905: 0x81DE,
	20332 - 11905: 0xC0D0,
	20333 - 11905: 0x81DF,
	20334 - 11905: 0x81E0,
	20335 - 11905: 0xD1F0,
	20336 - 11905: 0xB0DB,
	20337 - 11905: 0x81E1,
	20338 - 11905: 0x81E2,
	20339 - 11905: 0xBCD1,
	20340 - 11905: 0xD9A6,
	20341 - 11905: 0x81E3,
	20342 - 11905: 0xD9A5,
	20343 - 11905: 0x81E4,
	20344 - 11905: 0x81E5,
	20345 - 11905: 0x81E6,
	20346 - 11905: 0x81E7,
	20347 - 11905: 0xD9AC,
	20348 - 11905: 0xD9AE,
	20349 - 11905: 0x81E8,
	20350 - 11905: 0xD9AB,
	20351 - 11905: 0xCAB9,
	20352 - 11905: 0x81E9,
	20353 - 11905: 0x81EA,
	20354 - 11905: 0x81EB,
	20355 - 11905: 0xD9A9,
	20356 - 11905: 0xD6B6,
	20357 - 11905: 0x81EC,
	20358 - 11905: 0x81ED,
	20359 - 11905: 0x81EE,
	20360 - 11905: 0xB3DE,
	20361 - 11905: 0xD9A8,
	20362 - 11905: 0x81EF,
	20363 - 11905: 0xC0FD,
	20364 - 11905: 0x81F0,
	20365 - 11905: 0xCACC,
	20366 - 11905: 0x81F1,
	20367 - 11905: 0xD9AA,
	20368 - 11905: 0x81F2,
	20369 - 11905: 0xD9A7,
	20370 - 11905: 0x81F3,
	20371 - 11905: 0x81F4,
	20372 - 11905: 0xD9B0,
	20373 - 11905: 0x81F5,
	20374 - 11905: 0x81F6,
	20375 - 11905: 0xB6B1,
	20376 - 11905: 0x81F7,
	20377 - 11905: 0x81F8,
	20378 - 11905: 0x81F9,
	20379 - 11905: 0xB9A9,
	20380 - 11905: 0x81FA,
	20381 - 11905: 0xD2C0,
	20382 - 11905: 0x81FB,
	20383 - 11905: 0x81FC,
	20384 - 11905: 0xCFC0,
	20385 - 11905: 0x81FD,
	20386 - 11905: 0x81FE,
	20387 - 11905: 0xC2C2,
	20388 - 11905: 0x8240,
	20389 - 11905: 0xBDC4,
	20390 - 11905: 0xD5EC,
	20391 - 11905: 0xB2E0,
	20392 - 11905: 0xC7C8,
	20393 - 11905: 0xBFEB,
	20394 - 11905: 0xD9AD,
	20395 - 11905: 0x8241,
	20396 - 11905: 0xD9AF,
	20397 - 11905: 0x8242,
	20398 - 11905: 0xCEEA,
	20399 - 11905: 0xBAEE,
	20400 - 11905: 0x8243,
	20401 - 11905: 0x8244,
	20402 - 11905: 0x8245,
	20403 - 11905: 0x8246,
	20404 - 11905: 0x8247,
	20405 - 11905: 0xC7D6,
	20406 - 11905: 0x8248,
	20407 - 11905: 0x8249,
	20408 - 11905: 0x824A,
	20409 - 11905: 0x824B,
	20410 - 11905: 0x824C,
	20411 - 11905: 0x824D,
	20412 - 11905: 0x824E,
	20413 - 11905: 0x824F,
	20414 - 11905: 0x8250,
	20415 - 11905: 0xB1E3,
	20416 - 11905: 0x8251,
	20417 - 11905: 0x8252,
	20418 - 11905: 0x8253,
	20419 - 11905: 0xB4D9,
	20420 - 11905: 0xB6ED,
	20421 - 11905: 0xD9B4,
	20422 - 11905: 0x8254,
	20423 - 11905: 0x8255,
	20424 - 11905: 0x8256,
	20425 - 11905: 0x8257,
	20426 - 11905: 0xBFA1,
	20427 - 11905: 0x8258,
	20428 - 11905: 0x8259,
	20429 - 11905: 0x825A,
	20430 - 11905: 0xD9DE,
	20431 - 11905: 0xC7CE,
	20432 - 11905: 0xC0FE,
	20433 - 11905: 0xD9B8,
	20434 - 11905: 0x825B,
	20435 - 11905: 0x825C,
	20436 - 11905: 0x825D,
	20437 - 11905: 0x825E,
	20438 - 11905: 0x825F,
	20439 - 11905: 0xCBD7,
	20440 - 11905: 0xB7FD,
	20441 - 11905: 0x8260,
	20442 - 11905: 0xD9B5,
	20443 - 11905: 0x8261,
	20444 - 11905: 0xD9B7,
	20445 - 11905: 0xB1A3,
	20446 - 11905: 0xD3E1,
	20447 - 11905: 0xD9B9,
	20448 - 11905: 0x8262,
	20449 - 11905: 0xD0C5,
	20450 - 11905: 0x8263,
	20451 - 11905: 0xD9B6,
	20452 - 11905: 0x8264,
	20453 - 11905: 0x8265,
	20454 - 11905: 0xD9B1,
	20455 - 11905: 0x8266,
	20456 - 11905: 0xD9B2,
	20457 - 11905: 0xC1A9,
	20458 - 11905: 0xD9B3,
	20459 - 11905: 0x8267,
	20460 - 11905: 0x8268,
	20461 - 11905: 0xBCF3,
	20462 - 11905: 0xD0DE,
	20463 - 11905: 0xB8A9,
	20464 - 11905: 0x8269,
	20465 - 11905: 0xBEE3,
	20466 - 11905: 0x826A,
	20467 - 11905: 0xD9BD,
	20468 - 11905: 0x826B,
	20469 - 11905: 0x826C,
	20470 - 11905: 0x826D,
	20471 - 11905: 0x826E,
	20472 - 11905: 0xD9BA,
	20473 - 11905: 0x826F,
	20474 - 11905: 0xB0B3,
	20475 - 11905: 0x8270,
	20476 - 11905: 0x8271,
	20477 - 11905: 0x8272,
	20478 - 11905: 0xD9C2,
	20479 - 11905: 0x8273,
	20480 - 11905: 0x8274,
	20481 - 11905: 0x8275,
	20482 - 11905: 0x8276,
	20483 - 11905: 0x8277,
	20484 - 11905: 0x8278,
	20485 - 11905: 0x8279,
	20486 - 11905: 0x827A,
	20487 - 11905: 0x827B,
	20488 - 11905: 0x827C,
	20489 - 11905: 0x827D,
	20490 - 11905: 0x827E,
	20491 - 11905: 0x8280,
	20492 - 11905: 0xD9C4,
	20493 - 11905: 0xB1B6,
	20494 - 11905: 0x8281,
	20495 - 11905: 0xD9BF,
	20496 - 11905: 0x8282,
	20497 - 11905: 0x8283,
	20498 - 11905: 0xB5B9,
	20499 - 11905: 0x8284,
	20500 - 11905: 0xBEF3,
	20501 - 11905: 0x8285,
	20502 - 11905: 0x8286,
	20503 - 11905: 0x8287,
	20504 - 11905: 0xCCC8,
	20505 - 11905: 0xBAF2,
	20506 - 11905: 0xD2D0,
	20507 - 11905: 0x8288,
	20508 - 11905: 0xD9C3,
	20509 - 11905: 0x8289,
	20510 - 11905: 0x828A,
	20511 - 11905: 0xBDE8,
	20512 - 11905: 0x828B,
	20513 - 11905: 0xB3AB,
	20514 - 11905: 0x828C,
	20515 - 11905: 0x828D,
	20516 - 11905: 0x828E,
	20517 - 11905: 0xD9C5,
	20518 - 11905: 0xBEEB,
	20519 - 11905: 0x828F,
	20520 - 11905: 0xD9C6,
	20521 - 11905: 0xD9BB,
	20522 - 11905: 0xC4DF,
	20523 - 11905: 0x8290,
	20524 - 11905: 0xD9BE,
	20525 - 11905: 0xD9C1,
	20526 - 11905: 0xD9C0,
	20527 - 11905: 0x8291,
	20528 - 11905: 0x8292,
	20529 - 11905: 0x8293,
	20530 - 11905: 0x8294,
	20531 - 11905: 0x8295,
	20532 - 11905: 0x8296,
	20533 - 11905: 0x8297,
	20534 - 11905: 0x8298,
	20535 - 11905: 0x8299,
	20536 - 11905: 0x829A,
	20537 - 11905: 0x829B,
	20538 - 11905: 0xD5AE,
	20539 - 11905: 0x829C,
	20540 - 11905: 0xD6B5,
	20541 - 11905: 0x829D,
	20542 - 11905: 0xC7E3,
	20543 - 11905: 0x829E,
	20544 - 11905: 0x829F,
	20545 - 11905: 0x82A0,
	20546 - 11905: 0x82A1,
	20547 - 11905: 0xD9C8,
	20548 - 11905: 0x82A2,
	20549 - 11905: 0x82A3,
	20550 - 11905: 0x82A4,
	20551 - 11905: 0xBCD9,
	20552 - 11905: 0xD9CA,
	20553 - 11905: 0x82A5,
	20554 - 11905: 0x82A6,
	20555 - 11905: 0x82A7,
	20556 - 11905: 0xD9BC,
	20557 - 11905: 0x82A8,
	20558 - 11905: 0xD9CB,
	20559 - 11905: 0xC6AB,
	20560 - 11905: 0x82A9,
	20561 - 11905: 0x82AA,
	20562 - 11905: 0x82AB,
	20563 - 11905: 0x82AC,
	20564 - 11905: 0x82AD,
	20565 - 11905: 0xD9C9,
	20566 - 11905: 0x82AE,
	20567 - 11905: 0x82AF,
	20568 - 11905: 0x82B0,
	20569 - 11905: 0x82B1,
	20570 - 11905: 0xD7F6,
	20571 - 11905: 0x82B2,
	20572 - 11905: 0xCDA3,
	20573 - 11905: 0x82B3,
	20574 - 11905: 0x82B4,
	20575 - 11905: 0x82B5,
	20576 - 11905: 0x82B6,
	20577 - 11905: 0x82B7,
	20578 - 11905: 0x82B8,
	20579 - 11905: 0x82B9,
	20580 - 11905: 0x82BA,
	20581 - 11905: 0xBDA1,
	20582 - 11905: 0x82BB,
	20583 - 11905: 0x82BC,
	20584 - 11905: 0x82BD,
	20585 - 11905: 0x82BE,
	20586 - 11905: 0x82BF,
	20587 - 11905: 0x82C0,
	20588 - 11905: 0xD9CC,
	20589 - 11905: 0x82C1,
	20590 - 11905: 0x82C2,
	20591 - 11905: 0x82C3,
	20592 - 11905: 0x82C4,
	20593 - 11905: 0x82C5,
	20594 - 11905: 0x82C6,
	20595 - 11905: 0x82C7,
	20596 - 11905: 0x82C8,
	20597 - 11905: 0x82C9,
	20598 - 11905: 0xC5BC,
	20599 - 11905: 0xCDB5,
	20600 - 11905: 0x82CA,
	20601 - 11905: 0x82CB,
	20602 - 11905: 0x82CC,
	20603 - 11905: 0xD9CD,
	20604 - 11905: 0x82CD,
	20605 - 11905: 0x82CE,
	20606 - 11905: 0xD9C7,
	20607 - 11905: 0xB3A5,
	20608 - 11905: 0xBFFE,
	20609 - 11905: 0x82CF,
	20610 - 11905: 0x82D0,
	20611 - 11905: 0x82D1,
	20612 - 11905: 0x82D2,
	20613 - 11905: 0xB8B5,
	20614 - 11905: 0x82D3,
	20615 - 11905: 0x82D4,
	20616 - 11905: 0xC0FC,
	20617 - 11905: 0x82D5,
	20618 - 11905: 0x82D6,
	20619 - 11905: 0x82D7,
	20620 - 11905: 0x82D8,
	20621 - 11905: 0xB0F8,
	20622 - 11905: 0x82D9,
	20623 - 11905: 0x82DA,
	20624 - 11905: 0x82DB,
	20625 - 11905: 0x82DC,
	20626 - 11905: 0x82DD,
	20627 - 11905: 0x82DE,
	20628 - 11905: 0x82DF,
	20629 - 11905: 0x82E0,
	20630 - 11905: 0x82E1,
	20631 - 11905: 0x82E2,
	20632 - 11905: 0x82E3,
	20633 - 11905: 0x82E4,
	20634 - 11905: 0x82E5,
	20635 - 11905: 0x82E6,
	20636 - 11905: 0x82E7,
	20637 - 11905: 0x82E8,
	20638 - 11905: 0x82E9,
	20639 - 11905: 0x82EA,
	20640 - 11905: 0x82EB,
	20641 - 11905: 0x82EC,
	20642 - 11905: 0x82ED,
	20643 - 11905: 0xB4F6,
	20644 - 11905: 0x82EE,
	20645 - 11905: 0xD9CE,
	20646 - 11905: 0x82EF,
	20647 - 11905: 0xD9CF,
	20648 - 11905: 0xB4A2,
	20649 - 11905: 0xD9D0,
	20650 - 11905: 0x82F0,
	20651 - 11905: 0x82F1,
	20652 - 11905: 0xB4DF,
	20653 - 11905: 0x82F2,
	20654 - 11905: 0x82F3,
	20655 - 11905: 0x82F4,
	20656 - 11905: 0x82F5,
	20657 - 11905: 0x82F6,
	20658 - 11905: 0xB0C1,
	20659 - 11905: 0x82F7,
	20660 - 11905: 0x82F8,
	20661 - 11905: 0x82F9,
	20662 - 11905: 0x82FA,
	20663 - 11905: 0x82FB,
	20664 - 11905: 0x82FC,
	20665 - 11905: 0x82FD,
	20666 - 11905: 0xD9D1,
	20667 - 11905: 0xC9B5,
	20668 - 11905: 0x82FE,
	20669 - 11905: 0x8340,
	20670 - 11905: 0x8341,
	20671 - 11905: 0x8342,
	20672 - 11905: 0x8343,
	20673 - 11905: 0x8344,
	20674 - 11905: 0x8345,
	20675 - 11905: 0x8346,
	20676 - 11905: 0x8347,
	20677 - 11905: 0x8348,
	20678 - 11905: 0x8349,
	20679 - 11905: 0x834A,
	20680 - 11905: 0x834B,
	20681 - 11905: 0x834C,
	20682 - 11905: 0x834D,
	20683 - 11905: 0x834E,
	20684 - 11905: 0x834F,
	20685 - 11905: 0x8350,
	20686 - 11905: 0x8351,
	20687 - 11905: 0xCFF1,
	20688 - 11905: 0x8352,
	20689 - 11905: 0x8353,
	20690 - 11905: 0x8354,
	20691 - 11905: 0x8355,
	20692 - 11905: 0x8356,
	20693 - 11905: 0x8357,
	20694 - 11905: 0xD9D2,
	20695 - 11905: 0x8358,
	20696 - 11905: 0x8359,
	20697 - 11905: 0x835A,
	20698 - 11905: 0xC1C5,
	20699 - 11905: 0x835B,
	20700 - 11905: 0x835C,
	20701 - 11905: 0x835D,
	20702 - 11905: 0x835E,
	20703 - 11905: 0x835F,
	20704 - 11905: 0x8360,
	20705 - 11905: 0x8361,
	20706 - 11905: 0x8362,
	20707 - 11905: 0x8363,
	20708 - 11905: 0x8364,
	20709 - 11905: 0x8365,
	20710 - 11905: 0xD9D6,
	20711 - 11905: 0xC9AE,
	20712 - 11905: 0x8366,
	20713 - 11905: 0x8367,
	20714 - 11905: 0x8368,
	20715 - 11905: 0x8369,
	20716 - 11905: 0xD9D5,
	20717 - 11905: 0xD9D4,
	20718 - 11905: 0xD9D7,
	20719 - 11905: 0x836A,
	20720 - 11905: 0x836B,
	20721 - 11905: 0x836C,
	20722 - 11905: 0x836D,
	20723 - 11905: 0xCBDB,
	20724 - 11905: 0x836E,
	20725 - 11905: 0xBDA9,
	20726 - 11905: 0x836F,
	20727 - 11905: 0x8370,
	20728 - 11905: 0x8371,
	20729 - 11905: 0x8372,
	20730 - 11905: 0x8373,
	20731 - 11905: 0xC6A7,
	20732 - 11905: 0x8374,
	20733 - 11905: 0x8375,
	20734 - 11905: 0x8376,
	20735 - 11905: 0x8377,
	20736 - 11905: 0x8378,
	20737 - 11905: 0x8379,
	20738 - 11905: 0x837A,
	20739 - 11905: 0x837B,
	20740 - 11905: 0x837C,
	20741 - 11905: 0x837D,
	20742 - 11905: 0xD9D3,
	20743 - 11905: 0xD9D8,
	20744 - 11905: 0x837E,
	20745 - 11905: 0x8380,
	20746 - 11905: 0x8381,
	20747 - 11905: 0xD9D9,
	20748 - 11905: 0x8382,
	20749 - 11905: 0x8383,
	20750 - 11905: 0x8384,
	20751 - 11905: 0x8385,
	20752 - 11905: 0x8386,
	20753 - 11905: 0x8387,
	20754 - 11905: 0xC8E5,
	20755 - 11905: 0x8388,
	20756 - 11905: 0x8389,
	20757 - 11905: 0x838A,
	20758 - 11905: 0x838B,
	20759 - 11905: 0x838C,
	20760 - 11905: 0x838D,
	20761 - 11905: 0x838E,
	20762 - 11905: 0x838F,
	20763 - 11905: 0x8390,
	20764 - 11905: 0x8391,
	20765 - 11905: 0x8392,
	20766 - 11905: 0x8393,
	20767 - 11905: 0x8394,
	20768 - 11905: 0x8395,
	20769 - 11905: 0xC0DC,
	20770 - 11905: 0x8396,
	20771 - 11905: 0x8397,
	20772 - 11905: 0x8398,
	20773 - 11905: 0x8399,
	20774 - 11905: 0x839A,
	20775 - 11905: 0x839B,
	20776 - 11905: 0x839C,
	20777 - 11905: 0x839D,
	20778 - 11905: 0x839E,
	20779 - 11905: 0x839F,
	20780 - 11905: 0x83A0,
	20781 - 11905: 0x83A1,
	20782 - 11905: 0x83A2,
	20783 - 11905: 0x83A3,
	20784 - 11905: 0x83A4,
	20785 - 11905: 0x83A5,
	20786 - 11905: 0x83A6,
	20787 - 11905: 0x83A7,
	20788 - 11905: 0x83A8,
	20789 - 11905: 0x83A9,
	20790 - 11905: 0x83AA,
	20791 - 11905: 0x83AB,
	20792 - 11905: 0x83AC,
	20793 - 11905: 0x83AD,
	20794 - 11905: 0x83AE,
	20795 - 11905: 0x83AF,
	20796 - 11905: 0x83B0,
	20797 - 11905: 0x83B1,
	20798 - 11905: 0x83B2,
	20799 - 11905: 0xB6F9,
	20800 - 11905: 0xD8A3,
	20801 - 11905: 0xD4CA,
	20802 - 11905: 0x83B3,
	20803 - 11905: 0xD4AA,
	20804 - 11905: 0xD0D6,
	20805 - 11905: 0xB3E4,
	20806 - 11905: 0xD5D7,
	20807 - 11905: 0x83B4,
	20808 - 11905: 0xCFC8,
	20809 - 11905: 0xB9E2,
	20810 - 11905: 0x83B5,
	20811 - 11905: 0xBFCB,
	20812 - 11905: 0x83B6,
	20813 - 11905: 0xC3E2,
	20814 - 11905: 0x83B7,
	20815 - 11905: 0x83B8,
	20816 - 11905: 0x83B9,
	20817 - 11905: 0xB6D2,
	20818 - 11905: 0x83BA,
	20819 - 11905: 0x83BB,
	20820 - 11905: 0xCDC3,
	20821 - 11905: 0xD9EE,
	20822 - 11905: 0xD9F0,
	20823 - 11905: 0x83BC,
	20824 - 11905: 0x83BD,
	20825 - 11905: 0x83BE,
	20826 - 11905: 0xB5B3,
	20827 - 11905: 0x83BF,
	20828 - 11905: 0xB6B5,
	20829 - 11905: 0x83C0,
	20830 - 11905: 0x83C1,
	20831 - 11905: 0x83C2,
	20832 - 11905: 0x83C3,
	20833 - 11905: 0x83C4,
	20834 - 11905: 0xBEA4,
	20835 - 11905: 0x83C5,
	20836 - 11905: 0x83C6,
	20837 - 11905: 0xC8EB,
	20838 - 11905: 0x83C7,
	20839 - 11905: 0x83C8,
	20840 - 11905: 0xC8AB,
	20841 - 11905: 0x83C9,
	20842 - 11905: 0x83CA,
	20843 - 11905: 0xB0CB,
	20844 - 11905: 0xB9AB,
	20845 - 11905: 0xC1F9,
	20846 - 11905: 0xD9E2,
	20847 - 11905: 0x83CB,
	20848 - 11905: 0xC0BC,
	20849 - 11905: 0xB9B2,
	20850 - 11905: 0x83CC,
	20851 - 11905: 0xB9D8,
	20852 - 11905: 0xD0CB,
	20853 - 11905: 0xB1F8,
	20854 - 11905: 0xC6E4,
	20855 - 11905: 0xBEDF,
	20856 - 11905: 0xB5E4,
	20857 - 11905: 0xD7C8,
	20858 - 11905: 0x83CD,
	20859 - 11905: 0xD1F8,
	20860 - 11905: 0xBCE6,
	20861 - 11905: 0xCADE,
	20862 - 11905: 0x83CE,
	20863 - 11905: 0x83CF,
	20864 - 11905: 0xBCBD,
	20865 - 11905: 0xD9E6,
	20866 - 11905: 0xD8E7,
	20867 - 11905: 0x83D0,
	20868 - 11905: 0x83D1,
	20869 - 11905: 0xC4DA,
	20870 - 11905: 0x83D2,
	20871 - 11905: 0x83D3,
	20872 - 11905: 0xB8D4,
	20873 - 11905: 0xC8BD,
	20874 - 11905: 0x83D4,
	20875 - 11905: 0x83D5,
	20876 - 11905: 0xB2E1,
	20877 - 11905: 0xD4D9,
	20878 - 11905: 0x83D6,
	20879 - 11905: 0x83D7,
	20880 - 11905: 0x83D8,
	20881 - 11905: 0x83D9,
	20882 - 11905: 0xC3B0,
	20883 - 11905: 0x83DA,
	20884 - 11905: 0x83DB,
	20885 - 11905: 0xC3E1,
	20886 - 11905: 0xDAA2,
	20887 - 11905: 0xC8DF,
	20888 - 11905: 0x83DC,
	20889 - 11905: 0xD0B4,
	20890 - 11905: 0x83DD,
	20891 - 11905: 0xBEFC,
	20892 - 11905: 0xC5A9,
	20893 - 11905: 0x83DE,
	20894 - 11905: 0x83DF,
	20895 - 11905: 0x83E0,
	20896 - 11905: 0xB9DA,
	20897 - 11905: 0x83E1,
	20898 - 11905: 0xDAA3,
	20899 - 11905: 0x83E2,
	20900 - 11905: 0xD4A9,
	20901 - 11905: 0xDAA4,
	20902 - 11905: 0x83E3,
	20903 - 11905: 0x83E4,
	20904 - 11905: 0x83E5,
	20905 - 11905: 0x83E6,
	20906 - 11905: 0x83E7,
	20907 - 11905: 0xD9FB,
	20908 - 11905: 0xB6AC,
	20909 - 11905: 0x83E8,
	20910 - 11905: 0x83E9,
	20911 - 11905: 0xB7EB,
	20912 - 11905: 0xB1F9,
	20913 - 11905: 0xD9FC,
	20914 - 11905: 0xB3E5,
	20915 - 11905: 0xBEF6,
	20916 - 11905: 0x83EA,
	20917 - 11905: 0xBFF6,
	20918 - 11905: 0xD2B1,
	20919 - 11905: 0xC0E4,
	20920 - 11905: 0x83EB,
	20921 - 11905: 0x83EC,
	20922 - 11905: 0x83ED,
	20923 - 11905: 0xB6B3,
	20924 - 11905: 0xD9FE,
	20925 - 11905: 0xD9FD,
	20926 - 11905: 0x83EE,
	20927 - 11905: 0x83EF,
	20928 - 11905: 0xBEBB,
	20929 - 11905: 0x83F0,
	20930 - 11905: 0x83F1,
	20931 - 11905: 0x83F2,
	20932 - 11905: 0xC6E0,
	20933 - 11905: 0x83F3,
	20934 - 11905: 0xD7BC,
	20935 - 11905: 0xDAA1,
	20936 - 11905: 0x83F4,
	20937 - 11905: 0xC1B9,
	20938 - 11905: 0x83F5,
	20939 - 11905: 0xB5F2,
	20940 - 11905: 0xC1E8,
	20941 - 11905: 0x83F6,
	20942 - 11905: 0x83F7,
	20943 - 11905: 0xBCF5,
	20944 - 11905: 0x83F8,
	20945 - 11905: 0xB4D5,
	20946 - 11905: 0x83F9,
	20947 - 11905: 0x83FA,
	20948 - 11905: 0x83FB,
	20949 - 11905: 0x83FC,
	20950 - 11905: 0x83FD,
	20951 - 11905: 0x83FE,
	20952 - 11905: 0x8440,
	20953 - 11905: 0x8441,
	20954 - 11905: 0x8442,
	20955 - 11905: 0xC1DD,
	20956 - 11905: 0x8443,
	20957 - 11905: 0xC4FD,
	20958 - 11905: 0x8444,
	20959 - 11905: 0x8445,
	20960 - 11905: 0xBCB8,
	20961 - 11905: 0xB7B2,
	20962 - 11905: 0x8446,
	20963 - 11905: 0x8447,
	20964 - 11905: 0xB7EF,
	20965 - 11905: 0x8448,
	20966 - 11905: 0x8449,
	20967 - 11905: 0x844A,
	20968 - 11905: 0x844B,
	20969 - 11905: 0x844C,
	20970 - 11905: 0x844D,
	20971 - 11905: 0xD9EC,
	20972 - 11905: 0x844E,
	20973 - 11905: 0xC6BE,
	20974 - 11905: 0x844F,
	20975 - 11905: 0xBFAD,
	20976 - 11905: 0xBBCB,
	20977 - 11905: 0x8450,
	20978 - 11905: 0x8451,
	20979 - 11905: 0xB5CA,
	20980 - 11905: 0x8452,
	20981 - 11905: 0xDBC9,
	20982 - 11905: 0xD0D7,
	20983 - 11905: 0x8453,
	20984 - 11905: 0xCDB9,
	20985 - 11905: 0xB0BC,
	20986 - 11905: 0xB3F6,
	20987 - 11905: 0xBBF7,
	20988 - 11905: 0xDBCA,
	20989 - 11905: 0xBAAF,
	20990 - 11905: 0x8454,
	20991 - 11905: 0xD4E4,
	20992 - 11905: 0xB5B6,
	20993 - 11905: 0xB5F3,
	20994 - 11905: 0xD8D6,
	20995 - 11905: 0xC8D0,
	20996 - 11905: 0x8455,
	20997 - 11905: 0x8456,
	20998 - 11905: 0xB7D6,
	20999 - 11905: 0xC7D0,
	21000 - 11905: 0xD8D7,
	21001 - 11905: 0x8457,
	21002 - 11905: 0xBFAF,
	21003 - 11905: 0x8458,
	21004 - 11905: 0x8459,
	21005 - 11905: 0xDBBB,
	21006 - 11905: 0xD8D8,
	21007 - 11905: 0x845A,
	21008 - 11905: 0x845B,
	21009 - 11905: 0xD0CC,
	21010 - 11905: 0xBBAE,
	21011 - 11905: 0x845C,
	21012 - 11905: 0x845D,
	21013 - 11905: 0x845E,
	21014 - 11905: 0xEBBE,
	21015 - 11905: 0xC1D0,
	21016 - 11905: 0xC1F5,
	21017 - 11905: 0xD4F2,
	21018 - 11905: 0xB8D5,
	21019 - 11905: 0xB4B4,
	21020 - 11905: 0x845F,
	21021 - 11905: 0xB3F5,
	21022 - 11905: 0x8460,
	21023 - 11905: 0x8461,
	21024 - 11905: 0xC9BE,
	21025 - 11905: 0x8462,
	21026 - 11905: 0x8463,
	21027 - 11905: 0x8464,
	21028 - 11905: 0xC5D0,
	21029 - 11905: 0x8465,
	21030 - 11905: 0x8466,
	21031 - 11905: 0x8467,
	21032 - 11905: 0xC5D9,
	21033 - 11905: 0xC0FB,
	21034 - 11905: 0x8468,
	21035 - 11905: 0xB1F0,
	21036 - 11905: 0x8469,
	21037 - 11905: 0xD8D9,
	21038 - 11905: 0xB9CE,
	21039 - 11905: 0x846A,
	21040 - 11905: 0xB5BD,
	21041 - 11905: 0x846B,
	21042 - 11905: 0x846C,
	21043 - 11905: 0xD8DA,
	21044 - 11905: 0x846D,
	21045 - 11905: 0x846E,
	21046 - 11905: 0xD6C6,
	21047 - 11905: 0xCBA2,
	21048 - 11905: 0xC8AF,
	21049 - 11905: 0xC9B2,
	21050 - 11905: 0xB4CC,
	21051 - 11905: 0xBFCC,
	21052 - 11905: 0x846F,
	21053 - 11905: 0xB9F4,
	21054 - 11905: 0x8470,
	21055 - 11905: 0xD8DB,
	21056 - 11905: 0xD8DC,
	21057 - 11905: 0xB6E7,
	21058 - 11905: 0xBCC1,
	21059 - 11905: 0xCCEA,
	21060 - 11905: 0x8471,
	21061 - 11905: 0x8472,
	21062 - 11905: 0x8473,
	21063 - 11905: 0x8474,
	21064 - 11905: 0x8475,
	21065 - 11905: 0x8476,
	21066 - 11905: 0xCFF7,
	21067 - 11905: 0x8477,
	21068 - 11905: 0xD8DD,
	21069 - 11905: 0xC7B0,
	21070 - 11905: 0x8478,
	21071 - 11905: 0x8479,
	21072 - 11905: 0xB9D0,
	21073 - 11905: 0xBDA3,
	21074 - 11905: 0x847A,
	21075 - 11905: 0x847B,
	21076 - 11905: 0xCCDE,
	21077 - 11905: 0x847C,
	21078 - 11905: 0xC6CA,
	21079 - 11905: 0x847D,
	21080 - 11905: 0x847E,
	21081 - 11905: 0x8480,
	21082 - 11905: 0x8481,
	21083 - 11905: 0x8482,
	21084 - 11905: 0xD8E0,
	21085 - 11905: 0x8483,
	21086 - 11905: 0xD8DE,
	21087 - 11905: 0x8484,
	21088 - 11905: 0x8485,
	21089 - 11905: 0xD8DF,
	21090 - 11905: 0x8486,
	21091 - 11905: 0x8487,
	21092 - 11905: 0x8488,
	21093 - 11905: 0xB0FE,
	21094 - 11905: 0x8489,
	21095 - 11905: 0xBEE7,
	21096 - 11905: 0x848A,
	21097 - 11905: 0xCAA3,
	21098 - 11905: 0xBCF4,
	21099 - 11905: 0x848B,
	21100 - 11905: 0x848C,
	21101 - 11905: 0x848D,
	21102 - 11905: 0x848E,
	21103 - 11905: 0xB8B1,
	21104 - 11905: 0x848F,
	21105 - 11905: 0x8490,
	21106 - 11905: 0xB8EE,
	21107 - 11905: 0x8491,
	21108 - 11905: 0x8492,
	21109 - 11905: 0x8493,
	21110 - 11905: 0x8494,
	21111 - 11905: 0x8495,
	21112 - 11905: 0x8496,
	21113 - 11905: 0x8497,
	21114 - 11905: 0x8498,
	21115 - 11905: 0x8499,
	21116 - 11905: 0x849A,
	21117 - 11905: 0xD8E2,
	21118 - 11905: 0x849B,
	21119 - 11905: 0xBDCB,
	21120 - 11905: 0x849C,
	21121 - 11905: 0xD8E4,
	21122 - 11905: 0xD8E3,
	21123 - 11905: 0x849D,
	21124 - 11905: 0x849E,
	21125 - 11905: 0x849F,
	21126 - 11905: 0x84A0,
	21127 - 11905: 0x84A1,
	21128 - 11905: 0xC5FC,
	21129 - 11905: 0x84A2,
	21130 - 11905: 0x84A3,
	21131 - 11905: 0x84A4,
	21132 - 11905: 0x84A5,
	21133 - 11905: 0x84A6,
	21134 - 11905: 0x84A7,
	21135 - 11905: 0x84A8,
	21136 - 11905: 0xD8E5,
	21137 - 11905: 0x84A9,
	21138 - 11905: 0x84AA,
	21139 - 11905: 0xD8E6,
	21140 - 11905: 0x84AB,
	21141 - 11905: 0x84AC,
	21142 - 11905: 0x84AD,
	21143 - 11905: 0x84AE,
	21144 - 11905: 0x84AF,
	21145 - 11905: 0x84B0,
	21146 - 11905: 0x84B1,
	21147 - 11905: 0xC1A6,
	21148 - 11905: 0x84B2,
	21149 - 11905: 0xC8B0,
	21150 - 11905: 0xB0EC,
	21151 - 11905: 0xB9A6,
	21152 - 11905: 0xBCD3,
	21153 - 11905: 0xCEF1,
	21154 - 11905: 0xDBBD,
	21155 - 11905: 0xC1D3,
	21156 - 11905: 0x84B3,
	21157 - 11905: 0x84B4,
	21158 - 11905: 0x84B5,
	21159 - 11905: 0x84B6,
	21160 - 11905: 0xB6AF,
	21161 - 11905: 0xD6FA,
	21162 - 11905: 0xC5AC,
	21163 - 11905: 0xBDD9,
	21164 - 11905: 0xDBBE,
	21165 - 11905: 0xDBBF,
	21166 - 11905: 0x84B7,
	21167 - 11905: 0x84B8,
	21168 - 11905: 0x84B9,
	21169 - 11905: 0xC0F8,
	21170 - 11905: 0xBEA2,
	21171 - 11905: 0xC0CD,
	21172 - 11905: 0x84BA,
	21173 - 11905: 0x84BB,
	21174 - 11905: 0x84BC,
	21175 - 11905: 0x84BD,
	21176 - 11905: 0x84BE,
	21177 - 11905: 0x84BF,
	21178 - 11905: 0x84C0,
	21179 - 11905: 0x84C1,
	21180 - 11905: 0x84C2,
	21181 - 11905: 0x84C3,
	21182 - 11905: 0xDBC0,
	21183 - 11905: 0xCAC6,
	21184 - 11905: 0x84C4,
	21185 - 11905: 0x84C5,
	21186 - 11905: 0x84C6,
	21187 - 11905: 0xB2AA,
	21188 - 11905: 0x84C7,
	21189 - 11905: 0x84C8,
	21190 - 11905: 0x84C9,
	21191 - 11905: 0xD3C2,
	21192 - 11905: 0x84CA,
	21193 - 11905: 0xC3E3,
	21194 - 11905: 0x84CB,
	21195 - 11905: 0xD1AB,
	21196 - 11905: 0x84CC,
	21197 - 11905: 0x84CD,
	21198 - 11905: 0x84CE,
	21199 - 11905: 0x84CF,
	21200 - 11905: 0xDBC2,
	21201 - 11905: 0x84D0,
	21202 - 11905: 0xC0D5,
	21203 - 11905: 0x84D1,
	21204 - 11905: 0x84D2,
	21205 - 11905: 0x84D3,
	21206 - 11905: 0xDBC3,
	21207 - 11905: 0x84D4,
	21208 - 11905: 0xBFB1,
	21209 - 11905: 0x84D5,
	21210 - 11905: 0x84D6,
	21211 - 11905: 0x84D7,
	21212 - 11905: 0x84D8,
	21213 - 11905: 0x84D9,
	21214 - 11905: 0x84DA,
	21215 - 11905: 0xC4BC,
	21216 - 11905: 0x84DB,
	21217 - 11905: 0x84DC,
	21218 - 11905: 0x84DD,
	21219 - 11905: 0x84DE,
	21220 - 11905: 0xC7DA,
	21221 - 11905: 0x84DF,
	21222 - 11905: 0x84E0,
	21223 - 11905: 0x84E1,
	21224 - 11905: 0x84E2,
	21225 - 11905: 0x84E3,
	21226 - 11905: 0x84E4,
	21227 - 11905: 0x84E5,
	21228 - 11905: 0x84E6,
	21229 - 11905: 0x84E7,
	21230 - 11905: 0x84E8,
	21231 - 11905: 0x84E9,
	21232 - 11905: 0xDBC4,
	21233 - 11905: 0x84EA,
	21234 - 11905: 0x84EB,
	21235 - 11905: 0x84EC,
	21236 - 11905: 0x84ED,
	21237 - 11905: 0x84EE,
	21238 - 11905: 0x84EF,
	21239 - 11905: 0x84F0,
	21240 - 11905: 0x84F1,
	21241 - 11905: 0xD9E8,
	21242 - 11905: 0xC9D7,
	21243 - 11905: 0x84F2,
	21244 - 11905: 0x84F3,
	21245 - 11905: 0x84F4,
	21246 - 11905: 0xB9B4,
	21247 - 11905: 0xCEF0,
	21248 - 11905: 0xD4C8,
	21249 - 11905: 0x84F5,
	21250 - 11905: 0x84F6,
	21251 - 11905: 0x84F7,
	21252 - 11905: 0x84F8,
	21253 - 11905: 0xB0FC,
	21254 - 11905: 0xB4D2,
	21255 - 11905: 0x84F9,
	21256 - 11905: 0xD0D9,
	21257 - 11905: 0x84FA,
	21258 - 11905: 0x84FB,
	21259 - 11905: 0x84FC,
	21260 - 11905: 0x84FD,
	21261 - 11905: 0xD9E9,
	21262 - 11905: 0x84FE,
	21263 - 11905: 0xDECB,
	21264 - 11905: 0xD9EB,
	21265 - 11905: 0x8540,
	21266 - 11905: 0x8541,
	21267 - 11905: 0x8542,
	21268 - 11905: 0x8543,
	21269 - 11905: 0xD8B0,
	21270 - 11905: 0xBBAF,
	21271 - 11905: 0xB1B1,
	21272 - 11905: 0x8544,
	21273 - 11905: 0xB3D7,
	21274 - 11905: 0xD8CE,
	21275 - 11905: 0x8545,
	21276 - 11905: 0x8546,
	21277 - 11905: 0xD4D1,
	21278 - 11905: 0x8547,
	21279 - 11905: 0x8548,
	21280 - 11905: 0xBDB3,
	21281 - 11905: 0xBFEF,
	21282 - 11905: 0x8549,
	21283 - 11905: 0xCFBB,
	21284 - 11905: 0x854A,
	21285 - 11905: 0x854B,
	21286 - 11905: 0xD8D0,
	21287 - 11905: 0x854C,
	21288 - 11905: 0x854D,
	21289 - 11905: 0x854E,
	21290 - 11905: 0xB7CB,
	21291 - 11905: 0x854F,
	21292 - 11905: 0x8550,
	21293 - 11905: 0x8551,
	21294 - 11905: 0xD8D1,
	21295 - 11905: 0x8552,
	21296 - 11905: 0x8553,
	21297 - 11905: 0x8554,
	21298 - 11905: 0x8555,
	21299 - 11905: 0x8556,
	21300 - 11905: 0x8557,
	21301 - 11905: 0x8558,
	21302 - 11905: 0x8559,
	21303 - 11905: 0x855A,
	21304 - 11905: 0x855B,
	21305 - 11905: 0xC6A5,
	21306 - 11905: 0xC7F8,
	21307 - 11905: 0xD2BD,
	21308 - 11905: 0x855C,
	21309 - 11905: 0x855D,
	21310 - 11905: 0xD8D2,
	21311 - 11905: 0xC4E4,
	21312 - 11905: 0x855E,
	21313 - 11905: 0xCAAE,
	21314 - 11905: 0x855F,
	21315 - 11905: 0xC7A7,
	21316 - 11905: 0x8560,
	21317 - 11905: 0xD8A6,
	21318 - 11905: 0x8561,
	21319 - 11905: 0xC9FD,
	21320 - 11905: 0xCEE7,
	21321 - 11905: 0xBBDC,
	21322 - 11905: 0xB0EB,
	21323 - 11905: 0x8562,
	21324 - 11905: 0x8563,
	21325 - 11905: 0x8564,
	21326 - 11905: 0xBBAA,
	21327 - 11905: 0xD0AD,
	21328 - 11905: 0x8565,
	21329 - 11905: 0xB1B0,
	21330 - 11905: 0xD7E4,
	21331 - 11905: 0xD7BF,
	21332 - 11905: 0x8566,
	21333 - 11905: 0xB5A5,
	21334 - 11905: 0xC2F4,
	21335 - 11905: 0xC4CF,
	21336 - 11905: 0x8567,
	21337 - 11905: 0x8568,
	21338 - 11905: 0xB2A9,
	21339 - 11905: 0x8569,
	21340 - 11905: 0xB2B7,
	21341 - 11905: 0x856A,
	21342 - 11905: 0xB1E5,
	21343 - 11905: 0xDFB2,
	21344 - 11905: 0xD5BC,
	21345 - 11905: 0xBFA8,
	21346 - 11905: 0xC2AC,
	21347 - 11905: 0xD8D5,
	21348 - 11905: 0xC2B1,
	21349 - 11905: 0x856B,
	21350 - 11905: 0xD8D4,
	21351 - 11905: 0xCED4,
	21352 - 11905: 0x856C,
	21353 - 11905: 0xDAE0,
	21354 - 11905: 0x856D,
	21355 - 11905: 0xCEC0,
	21356 - 11905: 0x856E,
	21357 - 11905: 0x856F,
	21358 - 11905: 0xD8B4,
	21359 - 11905: 0xC3AE,
	21360 - 11905: 0xD3A1,
	21361 - 11905: 0xCEA3,
	21362 - 11905: 0x8570,
	21363 - 11905: 0xBCB4,
	21364 - 11905: 0xC8B4,
	21365 - 11905: 0xC2D1,
	21366 - 11905: 0x8571,
	21367 - 11905: 0xBEED,
	21368 - 11905: 0xD0B6,
	21369 - 11905: 0x8572,
	21370 - 11905: 0xDAE1,
	21371 - 11905: 0x8573,
	21372 - 11905: 0x8574,
	21373 - 11905: 0x8575,
	21374 - 11905: 0x8576,
	21375 - 11905: 0xC7E4,
	21376 - 11905: 0x8577,
	21377 - 11905: 0x8578,
	21378 - 11905: 0xB3A7,
	21379 - 11905: 0x8579,
	21380 - 11905: 0xB6F2,
	21381 - 11905: 0xCCFC,
	21382 - 11905: 0xC0FA,
	21383 - 11905: 0x857A,
	21384 - 11905: 0x857B,
	21385 - 11905: 0xC0F7,
	21386 - 11905: 0x857C,
	21387 - 11905: 0xD1B9,
	21388 - 11905: 0xD1E1,
	21389 - 11905: 0xD8C7,
	21390 - 11905: 0x857D,
	21391 - 11905: 0x857E,
	21392 - 11905: 0x8580,
	21393 - 11905: 0x8581,
	21394 - 11905: 0x8582,
	21395 - 11905: 0x8583,
	21396 - 11905: 0x8584,
	21397 - 11905: 0xB2DE,
	21398 - 11905: 0x8585,
	21399 - 11905: 0x8586,
	21400 - 11905: 0xC0E5,
	21401 - 11905: 0x8587,
	21402 - 11905: 0xBAF1,
	21403 - 11905: 0x8588,
	21404 - 11905: 0x8589,
	21405 - 11905: 0xD8C8,
	21406 - 11905: 0x858A,
	21407 - 11905: 0xD4AD,
	21408 - 11905: 0x858B,
	21409 - 11905: 0x858C,
	21410 - 11905: 0xCFE1,
	21411 - 11905: 0xD8C9,
	21412 - 11905: 0x858D,
	21413 - 11905: 0xD8CA,
	21414 - 11905: 0xCFC3,
	21415 - 11905: 0x858E,
	21416 - 11905: 0xB3F8,
	21417 - 11905: 0xBEC7,
	21418 - 11905: 0x858F,
	21419 - 11905: 0x8590,
	21420 - 11905: 0x8591,
	21421 - 11905: 0x8592,
	21422 - 11905: 0xD8CB,
	21423 - 11905: 0x8593,
	21424 - 11905: 0x8594,
	21425 - 11905: 0x8595,
	21426 - 11905: 0x8596,
	21427 - 11905: 0x8597,
	21428 - 11905: 0x8598,
	21429 - 11905: 0x8599,
	21430 - 11905: 0xDBCC,
	21431 - 11905: 0x859A,
	21432 - 11905: 0x859B,
	21433 - 11905: 0x859C,
	21434 - 11905: 0x859D,
	21435 - 11905: 0xC8A5,
	21436 - 11905: 0x859E,
	21437 - 11905: 0x859F,
	21438 - 11905: 0x85A0,
	21439 - 11905: 0xCFD8,
	21440 - 11905: 0x85A1,
	21441 - 11905: 0xC8FE,
	21442 - 11905: 0xB2CE,
	21443 - 11905: 0x85A2,
	21444 - 11905: 0x85A3,
	21445 - 11905: 0x85A4,
	21446 - 11905: 0x85A5,
	21447 - 11905: 0x85A6,
	21448 - 11905: 0xD3D6,
	21449 - 11905: 0xB2E6,
	21450 - 11905: 0xBCB0,
	21451 - 11905: 0xD3D1,
	21452 - 11905: 0xCBAB,
	21453 - 11905: 0xB7B4,
	21454 - 11905: 0x85A7,
	21455 - 11905: 0x85A8,
	21456 - 11905: 0x85A9,
	21457 - 11905: 0xB7A2,
	21458 - 11905: 0x85AA,
	21459 - 11905: 0x85AB,
	21460 - 11905: 0xCAE5,
	21461 - 11905: 0x85AC,
	21462 - 11905: 0xC8A1,
	21463 - 11905: 0xCADC,
	21464 - 11905: 0xB1E4,
	21465 - 11905: 0xD0F0,
	21466 - 11905: 0x85AD,
	21467 - 11905: 0xC5D1,
	21468 - 11905: 0x85AE,
	21469 - 11905: 0x85AF,
	21470 - 11905: 0x85B0,
	21471 - 11905: 0xDBC5,
	21472 - 11905: 0xB5FE,
	21473 - 11905: 0x85B1,
	21474 - 11905: 0x85B2,
	21475 - 11905: 0xBFDA,
	21476 - 11905: 0xB9C5,
	21477 - 11905: 0xBEE4,
	21478 - 11905: 0xC1ED,
	21479 - 11905: 0x85B3,
	21480 - 11905: 0xDFB6,
	21481 - 11905: 0xDFB5,
	21482 - 11905: 0xD6BB,
	21483 - 11905: 0xBDD0,
	21484 - 11905: 0xD5D9,
	21485 - 11905: 0xB0C8,
	21486 - 11905: 0xB6A3,
	21487 - 11905: 0xBFC9,
	21488 - 11905: 0xCCA8,
	21489 - 11905: 0xDFB3,
	21490 - 11905: 0xCAB7,
	21491 - 11905: 0xD3D2,
	21492 - 11905: 0x85B4,
	21493 - 11905: 0xD8CF,
	21494 - 11905: 0xD2B6,
	21495 - 11905: 0xBAC5,
	21496 - 11905: 0xCBBE,
	21497 - 11905: 0xCCBE,
	21498 - 11905: 0x85B5,
	21499 - 11905: 0xDFB7,
	21500 - 11905: 0xB5F0,
	21501 - 11905: 0xDFB4,
	21502 - 11905: 0x85B6,
	21503 - 11905: 0x85B7,
	21504 - 11905: 0x85B8,
	21505 - 11905: 0xD3F5,
	21506 - 11905: 0x85B9,
	21507 - 11905: 0xB3D4,
	21508 - 11905: 0xB8F7,
	21509 - 11905: 0x85BA,
	21510 - 11905: 0xDFBA,
	21511 - 11905: 0x85BB,
	21512 - 11905: 0xBACF,
	21513 - 11905: 0xBCAA,
	21514 - 11905: 0xB5F5,
	21515 - 11905: 0x85BC,
	21516 - 11905: 0xCDAC,
	21517 - 11905: 0xC3FB,
	21518 - 11905: 0xBAF3,
	21519 - 11905: 0xC0F4,
	21520 - 11905: 0xCDC2,
	21521 - 11905: 0xCFF2,
	21522 - 11905: 0xDFB8,
	21523 - 11905: 0xCFC5,
	21524 - 11905: 0x85BD,
	21525 - 11905: 0xC2C0,
	21526 - 11905: 0xDFB9,
	21527 - 11905: 0xC2F0,
	21528 - 11905: 0x85BE,
	21529 - 11905: 0x85BF,
	21530 - 11905: 0x85C0,
	21531 - 11905: 0xBEFD,
	21532 - 11905: 0x85C1,
	21533 - 11905: 0xC1DF,
	21534 - 11905: 0xCDCC,
	21535 - 11905: 0xD2F7,
	21536 - 11905: 0xB7CD,
	21537 - 11905: 0xDFC1,
	21538 - 11905: 0x85C2,
	21539 - 11905: 0xDFC4,
	21540 - 11905: 0x85C3,
	21541 - 11905: 0x85C4,
	21542 - 11905: 0xB7F1,
	21543 - 11905: 0xB0C9,
	21544 - 11905: 0xB6D6,
	21545 - 11905: 0xB7D4,
	21546 - 11905: 0x85C5,
	21547 - 11905: 0xBAAC,
	21548 - 11905: 0xCCFD,
	21549 - 11905: 0xBFD4,
	21550 - 11905: 0xCBB1,
	21551 - 11905: 0xC6F4,
	21552 - 11905: 0x85C6,
	21553 - 11905: 0xD6A8,
	21554 - 11905: 0xDFC5,
	21555 - 11905: 0x85C7,
	21556 - 11905: 0xCEE2,
	21557 - 11905: 0xB3B3,
	21558 - 11905: 0x85C8,
	21559 - 11905: 0x85C9,
	21560 - 11905: 0xCEFC,
	21561 - 11905: 0xB4B5,
	21562 - 11905: 0x85CA,
	21563 - 11905: 0xCEC7,
	21564 - 11905: 0xBAF0,
	21565 - 11905: 0x85CB,
	21566 - 11905: 0xCEE1,
	21567 - 11905: 0x85CC,
	21568 - 11905: 0xD1BD,
	21569 - 11905: 0x85CD,
	21570 - 11905: 0x85CE,
	21571 - 11905: 0xDFC0,
	21572 - 11905: 0x85CF,
	21573 - 11905: 0x85D0,
	21574 - 11905: 0xB4F4,
	21575 - 11905: 0x85D1,
	21576 - 11905: 0xB3CA,
	21577 - 11905: 0x85D2,
	21578 - 11905: 0xB8E6,
	21579 - 11905: 0xDFBB,
	21580 - 11905: 0x85D3,
	21581 - 11905: 0x85D4,
	21582 - 11905: 0x85D5,
	21583 - 11905: 0x85D6,
	21584 - 11905: 0xC4C5,
	21585 - 11905: 0x85D7,
	21586 - 11905: 0xDFBC,
	21587 - 11905: 0xDFBD,
	21588 - 11905: 0xDFBE,
	21589 - 11905: 0xC5BB,
	21590 - 11905: 0xDFBF,
	21591 - 11905: 0xDFC2,
	21592 - 11905: 0xD4B1,
	21593 - 11905: 0xDFC3,
	21594 - 11905: 0x85D8,
	21595 - 11905: 0xC7BA,
	21596 - 11905: 0xCED8,
	21597 - 11905: 0x85D9,
	21598 - 11905: 0x85DA,
	21599 - 11905: 0x85DB,
	21600 - 11905: 0x85DC,
	21601 - 11905: 0x85DD,
	21602 - 11905: 0xC4D8,
	21603 - 11905: 0x85DE,
	21604 - 11905: 0xDFCA,
	21605 - 11905: 0x85DF,
	21606 - 11905: 0xDFCF,
	21607 - 11905: 0x85E0,
	21608 - 11905: 0xD6DC,
	21609 - 11905: 0x85E1,
	21610 - 11905: 0x85E2,
	21611 - 11905: 0x85E3,
	21612 - 11905: 0x85E4,
	21613 - 11905: 0x85E5,
	21614 - 11905: 0x85E6,
	21615 - 11905: 0x85E7,
	21616 - 11905: 0x85E8,
	21617 - 11905: 0xDFC9,
	21618 - 11905: 0xDFDA,
	21619 - 11905: 0xCEB6,
	21620 - 11905: 0x85E9,
	21621 - 11905: 0xBAC7,
	21622 - 11905: 0xDFCE,
	21623 - 11905: 0xDFC8,
	21624 - 11905: 0xC5DE,
	21625 - 11905: 0x85EA,
	21626 - 11905: 0x85EB,
	21627 - 11905: 0xC9EB,
	21628 - 11905: 0xBAF4,
	21629 - 11905: 0xC3FC,
	21630 - 11905: 0x85EC,
	21631 - 11905: 0x85ED,
	21632 - 11905: 0xBED7,
	21633 - 11905: 0x85EE,
	21634 - 11905: 0xDFC6,
	21635 - 11905: 0x85EF,
	21636 - 11905: 0xDFCD,
	21637 - 11905: 0x85F0,
	21638 - 11905: 0xC5D8,
	21639 - 11905: 0x85F1,
	21640 - 11905: 0x85F2,
	21641 - 11905: 0x85F3,
	21642 - 11905: 0x85F4,
	21643 - 11905: 0xD5A6,
	21644 - 11905: 0xBACD,
	21645 - 11905: 0x85F5,
	21646 - 11905: 0xBECC,
	21647 - 11905: 0xD3BD,
	21648 - 11905: 0xB8C0,
	21649 - 11905: 0x85F6,
	21650 - 11905: 0xD6E4,
	21651 - 11905: 0x85F7,
	21652 - 11905: 0xDFC7,
	21653 - 11905: 0xB9BE,
	21654 - 11905: 0xBFA7,
	21655 - 11905: 0x85F8,
	21656 - 11905: 0x85F9,
	21657 - 11905: 0xC1FC,
	21658 - 11905: 0xDFCB,
	21659 - 11905: 0xDFCC,
	21660 - 11905: 0x85FA,
	21661 - 11905: 0xDFD0,
	21662 - 11905: 0x85FB,
	21663 - 11905: 0x85FC,
	21664 - 11905: 0x85FD,
	21665 - 11905: 0x85FE,
	21666 - 11905: 0x8640,
	21667 - 11905: 0xDFDB,
	21668 - 11905: 0xDFE5,
	21669 - 11905: 0x8641,
	21670 - 11905: 0xDFD7,
	21671 - 11905: 0xDFD6,
	21672 - 11905: 0xD7C9,
	21673 - 11905: 0xDFE3,
	21674 - 11905: 0xDFE4,
	21675 - 11905: 0xE5EB,
	21676 - 11905: 0xD2A7,
	21677 - 11905: 0xDFD2,
	21678 - 11905: 0x8642,
	21679 - 11905: 0xBFA9,
	21680 - 11905: 0x8643,
	21681 - 11905: 0xD4DB,
	21682 - 11905: 0x8644,
	21683 - 11905: 0xBFC8,
	21684 - 11905: 0xDFD4,
	21685 - 11905: 0x8645,
	21686 - 11905: 0x8646,
	21687 - 11905: 0x8647,
	21688 - 11905: 0xCFCC,
	21689 - 11905: 0x8648,
	21690 - 11905: 0x8649,
	21691 - 11905: 0xDFDD,
	21692 - 11905: 0x864A,
	21693 - 11905: 0xD1CA,
	21694 - 11905: 0x864B,
	21695 - 11905: 0xDFDE,
	21696 - 11905: 0xB0A7,
	21697 - 11905: 0xC6B7,
	21698 - 11905: 0xDFD3,
	21699 - 11905: 0x864C,
	21700 - 11905: 0xBAE5,
	21701 - 11905: 0x864D,
	21702 - 11905: 0xB6DF,
	21703 - 11905: 0xCDDB,
	21704 - 11905: 0xB9FE,
	21705 - 11905: 0xD4D5,
	21706 - 11905: 0x864E,
	21707 - 11905: 0x864F,
	21708 - 11905: 0xDFDF,
	21709 - 11905: 0xCFEC,
	21710 - 11905: 0xB0A5,
	21711 - 11905: 0xDFE7,
	21712 - 11905: 0xDFD1,
	21713 - 11905: 0xD1C6,
	21714 - 11905: 0xDFD5,
	21715 - 11905: 0xDFD8,
	21716 - 11905: 0xDFD9,
	21717 - 11905: 0xDFDC,
	21718 - 11905: 0x8650,
	21719 - 11905: 0xBBA9,
	21720 - 11905: 0x8651,
	21721 - 11905: 0xDFE0,
	21722 - 11905: 0xDFE1,
	21723 - 11905: 0x8652,
	21724 - 11905: 0xDFE2,
	21725 - 11905: 0xDFE6,
	21726 - 11905: 0xDFE8,
	21727 - 11905: 0xD3B4,
	21728 - 11905: 0x8653,
	21729 - 11905: 0x8654,
	21730 - 11905: 0x8655,
	21731 - 11905: 0x8656,
	21732 - 11905: 0x8657,
	21733 - 11905: 0xB8E7,
	21734 - 11905: 0xC5B6,
	21735 - 11905: 0xDFEA,
	21736 - 11905: 0xC9DA,
	21737 - 11905: 0xC1A8,
	21738 - 11905: 0xC4C4,
	21739 - 11905: 0x8658,
	21740 - 11905: 0x8659,
	21741 - 11905: 0xBFDE,
	21742 - 11905: 0xCFF8,
	21743 - 11905: 0x865A,
	21744 - 11905: 0x865B,
	21745 - 11905: 0x865C,
	21746 - 11905: 0xD5DC,
	21747 - 11905: 0xDFEE,
	21748 - 11905: 0x865D,
	21749 - 11905: 0x865E,
	21750 - 11905: 0x865F,
	21751 - 11905: 0x8660,
	21752 - 11905: 0x8661,
	21753 - 11905: 0x8662,
	21754 - 11905: 0xB2B8,
	21755 - 11905: 0x8663,
	21756 - 11905: 0xBADF,
	21757 - 11905: 0xDFEC,
	21758 - 11905: 0x8664,
	21759 - 11905: 0xDBC1,
	21760 - 11905: 0x8665,
	21761 - 11905: 0xD1E4,
	21762 - 11905: 0x8666,
	21763 - 11905: 0x8667,
	21764 - 11905: 0x8668,
	21765 - 11905: 0x8669,
	21766 - 11905: 0xCBF4,
	21767 - 11905: 0xB4BD,
	21768 - 11905: 0x866A,
	21769 - 11905: 0xB0A6,
	21770 - 11905: 0x866B,
	21771 - 11905: 0x866C,
	21772 - 11905: 0x866D,
	21773 - 11905: 0x866E,
	21774 - 11905: 0x866F,
	21775 - 11905: 0xDFF1,
	21776 - 11905: 0xCCC6,
	21777 - 11905: 0xDFF2,
	21778 - 11905: 0x8670,
	21779 - 11905: 0x8671,
	21780 - 11905: 0xDFED,
	21781 - 11905: 0x8672,
	21782 - 11905: 0x8673,
	21783 - 11905: 0x8674,
	21784 - 11905: 0x8675,
	21785 - 11905: 0x8676,
	21786 - 11905: 0x8677,
	21787 - 11905: 0xDFE9,
	21788 - 11905: 0x8678,
	21789 - 11905: 0x8679,
	21790 - 11905: 0x867A,
	21791 - 11905: 0x867B,
	21792 - 11905: 0xDFEB,
	21793 - 11905: 0x867C,
	21794 - 11905: 0xDFEF,
	21795 - 11905: 0xDFF0,
	21796 - 11905: 0xBBBD,
	21797 - 11905: 0x867D,
	21798 - 11905: 0x867E,
	21799 - 11905: 0xDFF3,
	21800 - 11905: 0x8680,
	21801 - 11905: 0x8681,
	21802 - 11905: 0xDFF4,
	21803 - 11905: 0x8682,
	21804 - 11905: 0xBBA3,
	21805 - 11905: 0x8683,
	21806 - 11905: 0xCADB,
	21807 - 11905: 0xCEA8,
	21808 - 11905: 0xE0A7,
	21809 - 11905: 0xB3AA,
	21810 - 11905: 0x8684,
	21811 - 11905: 0xE0A6,
	21812 - 11905: 0x8685,
	21813 - 11905: 0x8686,
	21814 - 11905: 0x8687,
	21815 - 11905: 0xE0A1,
	21816 - 11905: 0x8688,
	21817 - 11905: 0x8689,
	21818 - 11905: 0x868A,
	21819 - 11905: 0x868B,
	21820 - 11905: 0xDFFE,
	21821 - 11905: 0x868C,
	21822 - 11905: 0xCDD9,
	21823 - 11905: 0xDFFC,
	21824 - 11905: 0x868D,
	21825 - 11905: 0xDFFA,
	21826 - 11905: 0x868E,
	21827 - 11905: 0xBFD0,
	21828 - 11905: 0xD7C4,
	21829 - 11905: 0x868F,
	21830 - 11905: 0xC9CC,
	21831 - 11905: 0x8690,
	21832 - 11905: 0x8691,
	21833 - 11905: 0xDFF8,
	21834 - 11905: 0xB0A1,
	21835 - 11905: 0x8692,
	21836 - 11905: 0x8693,
	21837 - 11905: 0x8694,
	21838 - 11905: 0x8695,
	21839 - 11905: 0x8696,
	21840 - 11905: 0xDFFD,
	21841 - 11905: 0x8697,
	21842 - 11905: 0x8698,
	21843 - 11905: 0x8699,
	21844 - 11905: 0x869A,
	21845 - 11905: 0xDFFB,
	21846 - 11905: 0xE0A2,
	21847 - 11905: 0x869B,
	21848 - 11905: 0x869C,
	21849 - 11905: 0x869D,
	21850 - 11905: 0x869E,
	21851 - 11905: 0x869F,
	21852 - 11905: 0xE0A8,
	21853 - 11905: 0x86A0,
	21854 - 11905: 0x86A1,
	21855 - 11905: 0x86A2,
	21856 - 11905: 0x86A3,
	21857 - 11905: 0xB7C8,
	21858 - 11905: 0x86A4,
	21859 - 11905: 0x86A5,
	21860 - 11905: 0xC6A1,
	21861 - 11905: 0xC9B6,
	21862 - 11905: 0xC0B2,
	21863 - 11905: 0xDFF5,
	21864 - 11905: 0x86A6,
	21865 - 11905: 0x86A7,
	21866 - 11905: 0xC5BE,
	21867 - 11905: 0x86A8,
	21868 - 11905: 0xD8C4,
	21869 - 11905: 0xDFF9,
	21870 - 11905: 0xC4F6,
	21871 - 11905: 0x86A9,
	21872 - 11905: 0x86AA,
	21873 - 11905: 0x86AB,
	21874 - 11905: 0x86AC,
	21875 - 11905: 0x86AD,
	21876 - 11905: 0x86AE,
	21877 - 11905: 0xE0A3,
	21878 - 11905: 0xE0A4,
	21879 - 11905: 0xE0A5,
	21880 - 11905: 0xD0A5,
	21881 - 11905: 0x86AF,
	21882 - 11905: 0x86B0,
	21883 - 11905: 0xE0B4,
	21884 - 11905: 0xCCE4,
	21885 - 11905: 0x86B1,
	21886 - 11905: 0xE0B1,
	21887 - 11905: 0x86B2,
	21888 - 11905: 0xBFA6,
	21889 - 11905: 0xE0AF,
	21890 - 11905: 0xCEB9,
	21891 - 11905: 0xE0AB,
	21892 - 11905: 0xC9C6,
	21893 - 11905: 0x86B3,
	21894 - 11905: 0x86B4,
	21895 - 11905: 0xC0AE,
	21896 - 11905: 0xE0AE,
	21897 - 11905: 0xBAED,
	21898 - 11905: 0xBAB0,
	21899 - 11905: 0xE0A9,
	21900 - 11905: 0x86B5,
	21901 - 11905: 0x86B6,
	21902 - 11905: 0x86B7,
	21903 - 11905: 0xDFF6,
	21904 - 11905: 0x86B8,
	21905 - 11905: 0xE0B3,
	21906 - 11905: 0x86B9,
	21907 - 11905: 0x86BA,
	21908 - 11905: 0xE0B8,
	21909 - 11905: 0x86BB,
	21910 - 11905: 0x86BC,
	21911 - 11905: 0x86BD,
	21912 - 11905: 0xB4AD,
	21913 - 11905: 0xE0B9,
	21914 - 11905: 0x86BE,
	21915 - 11905: 0x86BF,
	21916 - 11905: 0xCFB2,
	21917 - 11905: 0xBAC8,
	21918 - 11905: 0x86C0,
	21919 - 11905: 0xE0B0,
	21920 - 11905: 0x86C1,
	21921 - 11905: 0x86C2,
	21922 - 11905: 0x86C3,
	21923 - 11905: 0x86C4,
	21924 - 11905: 0x86C5,
	21925 - 11905: 0x86C6,
	21926 - 11905: 0x86C7,
	21927 - 11905: 0xD0FA,
	21928 - 11905: 0x86C8,
	21929 - 11905: 0x86C9,
	21930 - 11905: 0x86CA,
	21931 - 11905: 0x86CB,
	21932 - 11905: 0x86CC,
	21933 - 11905: 0x86CD,
	21934 - 11905: 0x86CE,
	21935 - 11905: 0x86CF,
	21936 - 11905: 0x86D0,
	21937 - 11905: 0xE0AC,
	21938 - 11905: 0x86D1,
	21939 - 11905: 0xD4FB,
	21940 - 11905: 0x86D2,
	21941 - 11905: 0xDFF7,
	21942 - 11905: 0x86D3,
	21943 - 11905: 0xC5E7,
	21944 - 11905: 0x86D4,
	21945 - 11905: 0xE0AD,
	21946 - 11905: 0x86D5,
	21947 - 11905: 0xD3F7,
	21948 - 11905: 0x86D6,
	21949 - 11905: 0xE0B6,
	21950 - 11905: 0xE0B7,
	21951 - 11905: 0x86D7,
	21952 - 11905: 0x86D8,
	21953 - 11905: 0x86D9,
	21954 - 11905: 0x86DA,
	21955 - 11905: 0x86DB,
	21956 - 11905: 0xE0C4,
	21957 - 11905: 0xD0E1,
	21958 - 11905: 0x86DC,
	21959 - 11905: 0x86DD,
	21960 - 11905: 0x86DE,
	21961 - 11905: 0xE0BC,
	21962 - 11905: 0x86DF,
	21963 - 11905: 0x86E0,
	21964 - 11905: 0xE0C9,
	21965 - 11905: 0xE0CA,
	21966 - 11905: 0x86E1,
	21967 - 11905: 0x86E2,
	21968 - 11905: 0x86E3,
	21969 - 11905: 0xE0BE,
	21970 - 11905: 0xE0AA,
	21971 - 11905: 0xC9A4,
	21972 - 11905: 0xE0C1,
	21973 - 11905: 0x86E4,
	21974 - 11905: 0xE0B2,
	21975 - 11905: 0x86E5,
	21976 - 11905: 0x86E6,
	21977 - 11905: 0x86E7,
	21978 - 11905: 0x86E8,
	21979 - 11905: 0x86E9,
	21980 - 11905: 0xCAC8,
	21981 - 11905: 0xE0C3,
	21982 - 11905: 0x86EA,
	21983 - 11905: 0xE0B5,
	21984 - 11905: 0x86EB,
	21985 - 11905: 0xCECB,
	21986 - 11905: 0x86EC,
	21987 - 11905: 0xCBC3,
	21988 - 11905: 0xE0CD,
	21989 - 11905: 0xE0C6,
	21990 - 11905: 0xE0C2,
	21991 - 11905: 0x86ED,
	21992 - 11905: 0xE0CB,
	21993 - 11905: 0x86EE,
	21994 - 11905: 0xE0BA,
	21995 - 11905: 0xE0BF,
	21996 - 11905: 0xE0C0,
	21997 - 11905: 0x86EF,
	21998 - 11905: 0x86F0,
	21999 - 11905: 0xE0C5,
	22000 - 11905: 0x86F1,
	22001 - 11905: 0x86F2,
	22002 - 11905: 0xE0C7,
	22003 - 11905: 0xE0C8,
	22004 - 11905: 0x86F3,
	22005 - 11905: 0xE0CC,
	22006 - 11905: 0x86F4,
	22007 - 11905: 0xE0BB,
	22008 - 11905: 0x86F5,
	22009 - 11905: 0x86F6,
	22010 - 11905: 0x86F7,
	22011 - 11905: 0x86F8,
	22012 - 11905: 0x86F9,
	22013 - 11905: 0xCBD4,
	22014 - 11905: 0xE0D5,
	22015 - 11905: 0x86FA,
	22016 - 11905: 0xE0D6,
	22017 - 11905: 0xE0D2,
	22018 - 11905: 0x86FB,
	22019 - 11905: 0x86FC,
	22020 - 11905: 0x86FD,
	22021 - 11905: 0x86FE,
	22022 - 11905: 0x8740,
	22023 - 11905: 0x8741,
	22024 - 11905: 0xE0D0,
	22025 - 11905: 0xBCCE,
	22026 - 11905: 0x8742,
	22027 - 11905: 0x8743,
	22028 - 11905: 0xE0D1,
	22029 - 11905: 0x8744,
	22030 - 11905: 0xB8C2,
	22031 - 11905: 0xD8C5,
	22032 - 11905: 0x8745,
	22033 - 11905: 0x8746,
	22034 - 11905: 0x8747,
	22035 - 11905: 0x8748,
	22036 - 11905: 0x8749,
	22037 - 11905: 0x874A,
	22038 - 11905: 0x874B,
	22039 - 11905: 0x874C,
	22040 - 11905: 0xD0EA,
	22041 - 11905: 0x874D,
	22042 - 11905: 0x874E,
	22043 - 11905: 0xC2EF,
	22044 - 11905: 0x874F,
	22045 - 11905: 0x8750,
	22046 - 11905: 0xE0CF,
	22047 - 11905: 0xE0BD,
	22048 - 11905: 0x8751,
	22049 - 11905: 0x8752,
	22050 - 11905: 0x8753,
	22051 - 11905: 0xE0D4,
	22052 - 11905: 0xE0D3,
	22053 - 11905: 0x8754,
	22054 - 11905: 0x8755,
	22055 - 11905: 0xE0D7,
	22056 - 11905: 0x8756,
	22057 - 11905: 0x8757,
	22058 - 11905: 0x8758,
	22059 - 11905: 0x8759,
	22060 - 11905: 0xE0DC,
	22061 - 11905: 0xE0D8,
	22062 - 11905: 0x875A,
	22063 - 11905: 0x875B,
	22064 - 11905: 0x875C,
	22065 - 11905: 0xD6F6,
	22066 - 11905: 0xB3B0,
	22067 - 11905: 0x875D,
	22068 - 11905: 0xD7EC,
	22069 - 11905: 0x875E,
	22070 - 11905: 0xCBBB,
	22071 - 11905: 0x875F,
	22072 - 11905: 0x8760,
	22073 - 11905: 0xE0DA,
	22074 - 11905: 0x8761,
	22075 - 11905: 0xCEFB,
	22076 - 11905: 0x8762,
	22077 - 11905: 0x8763,
	22078 - 11905: 0x8764,
	22079 - 11905: 0xBAD9,
	22080 - 11905: 0x8765,
	22081 - 11905: 0x8766,
	22082 - 11905: 0x8767,
	22083 - 11905: 0x8768,
	22084 - 11905: 0x8769,
	22085 - 11905: 0x876A,
	22086 - 11905: 0x876B,
	22087 - 11905: 0x876C,
	22088 - 11905: 0x876D,
	22089 - 11905: 0x876E,
	22090 - 11905: 0x876F,
	22091 - 11905: 0x8770,
	22092 - 11905: 0xE0E1,
	22093 - 11905: 0xE0DD,
	22094 - 11905: 0xD2AD,
	22095 - 11905: 0x8771,
	22096 - 11905: 0x8772,
	22097 - 11905: 0x8773,
	22098 - 11905: 0x8774,
	22099 - 11905: 0x8775,
	22100 - 11905: 0xE0E2,
	22101 - 11905: 0x8776,
	22102 - 11905: 0x8777,
	22103 - 11905: 0xE0DB,
	22104 - 11905: 0xE0D9,
	22105 - 11905: 0xE0DF,
	22106 - 11905: 0x8778,
	22107 - 11905: 0x8779,
	22108 - 11905: 0xE0E0,
	22109 - 11905: 0x877A,
	22110 - 11905: 0x877B,
	22111 - 11905: 0x877C,
	22112 - 11905: 0x877D,
	22113 - 11905: 0x877E,
	22114 - 11905: 0xE0DE,
	22115 - 11905: 0x8780,
	22116 - 11905: 0xE0E4,
	22117 - 11905: 0x8781,
	22118 - 11905: 0x8782,
	22119 - 11905: 0x8783,
	22120 - 11905: 0xC6F7,
	22121 - 11905: 0xD8AC,
	22122 - 11905: 0xD4EB,
	22123 - 11905: 0xE0E6,
	22124 - 11905: 0xCAC9,
	22125 - 11905: 0x8784,
	22126 - 11905: 0x8785,
	22127 - 11905: 0x8786,
	22128 - 11905: 0x8787,
	22129 - 11905: 0xE0E5,
	22130 - 11905: 0x8788,
	22131 - 11905: 0x8789,
	22132 - 11905: 0x878A,
	22133 - 11905: 0x878B,
	22134 - 11905: 0xB8C1,
	22135 - 11905: 0x878C,
	22136 - 11905: 0x878D,
	22137 - 11905: 0x878E,
	22138 - 11905: 0x878F,
	22139 - 11905: 0xE0E7,
	22140 - 11905: 0xE0E8,
	22141 - 11905: 0x8790,
	22142 - 11905: 0x8791,
	22143 - 11905: 0x8792,
	22144 - 11905: 0x8793,
	22145 - 11905: 0x8794,
	22146 - 11905: 0x8795,
	22147 - 11905: 0x8796,
	22148 - 11905: 0x8797,
	22149 - 11905: 0xE0E9,
	22150 - 11905: 0xE0E3,
	22151 - 11905: 0x8798,
	22152 - 11905: 0x8799,
	22153 - 11905: 0x879A,
	22154 - 11905: 0x879B,
	22155 - 11905: 0x879C,
	22156 - 11905: 0x879D,
	22157 - 11905: 0x879E,
	22158 - 11905: 0xBABF,
	22159 - 11905: 0xCCE7,
	22160 - 11905: 0x879F,
	22161 - 11905: 0x87A0,
	22162 - 11905: 0x87A1,
	22163 - 11905: 0xE0EA,
	22164 - 11905: 0x87A2,
	22165 - 11905: 0x87A3,
	22166 - 11905: 0x87A4,
	22167 - 11905: 0x87A5,
	22168 - 11905: 0x87A6,
	22169 - 11905: 0x87A7,
	22170 - 11905: 0x87A8,
	22171 - 11905: 0x87A9,
	22172 - 11905: 0x87AA,
	22173 - 11905: 0x87AB,
	22174 - 11905: 0x87AC,
	22175 - 11905: 0x87AD,
	22176 - 11905: 0x87AE,
	22177 - 11905: 0x87AF,
	22178 - 11905: 0x87B0,
	22179 - 11905: 0xCFF9,
	22180 - 11905: 0x87B1,
	22181 - 11905: 0x87B2,
	22182 - 11905: 0x87B3,
	22183 - 11905: 0x87B4,
	22184 - 11905: 0x87B5,
	22185 - 11905: 0x87B6,
	22186 - 11905: 0x87B7,
	22187 - 11905: 0x87B8,
	22188 - 11905: 0x87B9,
	22189 - 11905: 0x87BA,
	22190 - 11905: 0x87BB,
	22191 - 11905: 0xE0EB,
	22192 - 11905: 0x87BC,
	22193 - 11905: 0x87BD,
	22194 - 11905: 0x87BE,
	22195 - 11905: 0x87BF,
	22196 - 11905: 0x87C0,
	22197 - 11905: 0x87C1,
	22198 - 11905: 0x87C2,
	22199 - 11905: 0xC8C2,
	22200 - 11905: 0x87C3,
	22201 - 11905: 0x87C4,
	22202 - 11905: 0x87C5,
	22203 - 11905: 0x87C6,
	22204 - 11905: 0xBDC0,
	22205 - 11905: 0x87C7,
	22206 - 11905: 0x87C8,
	22207 - 11905: 0x87C9,
	22208 - 11905: 0x87CA,
	22209 - 11905: 0x87CB,
	22210 - 11905: 0x87CC,
	22211 - 11905: 0x87CD,
	22212 - 11905: 0x87CE,
	22213 - 11905: 0x87CF,
	22214 - 11905: 0x87D0,
	22215 - 11905: 0x87D1,
	22216 - 11905: 0x87D2,
	22217 - 11905: 0x87D3,
	22218 - 11905: 0xC4D2,
	22219 - 11905: 0x87D4,
	22220 - 11905: 0x87D5,
	22221 - 11905: 0x87D6,
	22222 - 11905: 0x87D7,
	22223 - 11905: 0x87D8,
	22224 - 11905: 0x87D9,
	22225 - 11905: 0x87DA,
	22226 - 11905: 0x87DB,
	22227 - 11905: 0x87DC,
	22228 - 11905: 0xE0EC,
	22229 - 11905: 0x87DD,
	22230 - 11905: 0x87DE,
	22231 - 11905: 0xE0ED,
	22232 - 11905: 0x87DF,
	22233 - 11905: 0x87E0,
	22234 - 11905: 0xC7F4,
	22235 - 11905: 0xCBC4,
	22236 - 11905: 0x87E1,
	22237 - 11905: 0xE0EE,
	22238 - 11905: 0xBBD8,
	22239 - 11905: 0xD8B6,
	22240 - 11905: 0xD2F2,
	22241 - 11905: 0xE0EF,
	22242 - 11905: 0xCDC5,
	22243 - 11905: 0x87E2,
	22244 - 11905: 0xB6DA,
	22245 - 11905: 0x87E3,
	22246 - 11905: 0x87E4,
	22247 - 11905: 0x87E5,
	22248 - 11905: 0x87E6,
	22249 - 11905: 0x87E7,
	22250 - 11905: 0x87E8,
	22251 - 11905: 0xE0F1,
	22252 - 11905: 0x87E9,
	22253 - 11905: 0xD4B0,
	22254 - 11905: 0x87EA,
	22255 - 11905: 0x87EB,
	22256 - 11905: 0xC0A7,
	22257 - 11905: 0xB4D1,
	22258 - 11905: 0x87EC,
	22259 - 11905: 0x87ED,
	22260 - 11905: 0xCEA7,
	22261 - 11905: 0xE0F0,
	22262 - 11905: 0x87EE,
	22263 - 11905: 0x87EF,
	22264 - 11905: 0x87F0,
	22265 - 11905: 0xE0F2,
	22266 - 11905: 0xB9CC,
	22267 - 11905: 0x87F1,
	22268 - 11905: 0x87F2,
	22269 - 11905: 0xB9FA,
	22270 - 11905: 0xCDBC,
	22271 - 11905: 0xE0F3,
	22272 - 11905: 0x87F3,
	22273 - 11905: 0x87F4,
	22274 - 11905: 0x87F5,
	22275 - 11905: 0xC6D4,
	22276 - 11905: 0xE0F4,
	22277 - 11905: 0x87F6,
	22278 - 11905: 0xD4B2,
	22279 - 11905: 0x87F7,
	22280 - 11905: 0xC8A6,
	22281 - 11905: 0xE0F6,
	22282 - 11905: 0xE0F5,
	22283 - 11905: 0x87F8,
	22284 - 11905: 0x87F9,
	22285 - 11905: 0x87FA,
	22286 - 11905: 0x87FB,
	22287 - 11905: 0x87FC,
	22288 - 11905: 0x87FD,
	22289 - 11905: 0x87FE,
	22290 - 11905: 0x8840,
	22291 - 11905: 0x8841,
	22292 - 11905: 0x8842,
	22293 - 11905: 0x8843,
	22294 - 11905: 0x8844,
	22295 - 11905: 0x8845,
	22296 - 11905: 0x8846,
	22297 - 11905: 0x8847,
	22298 - 11905: 0x8848,
	22299 - 11905: 0x8849,
	22300 - 11905: 0xE0F7,
	22301 - 11905: 0x884A,
	22302 - 11905: 0x884B,
	22303 - 11905: 0xCDC1,
	22304 - 11905: 0x884C,
	22305 - 11905: 0x884D,
	22306 - 11905: 0x884E,
	22307 - 11905: 0xCAA5,
	22308 - 11905: 0x884F,
	22309 - 11905: 0x8850,
	22310 - 11905: 0x8851,
	22311 - 11905: 0x8852,
	22312 - 11905: 0xD4DA,
	22313 - 11905: 0xDBD7,
	22314 - 11905: 0xDBD9,
	22315 - 11905: 0x8853,
	22316 - 11905: 0xDBD8,
	22317 - 11905: 0xB9E7,
	22318 - 11905: 0xDBDC,
	22319 - 11905: 0xDBDD,
	22320 - 11905: 0xB5D8,
	22321 - 11905: 0x8854,
	22322 - 11905: 0x8855,
	22323 - 11905: 0xDBDA,
	22324 - 11905: 0x8856,
	22325 - 11905: 0x8857,
	22326 - 11905: 0x8858,
	22327 - 11905: 0x8859,
	22328 - 11905: 0x885A,
	22329 - 11905: 0xDBDB,
	22330 - 11905: 0xB3A1,
	22331 - 11905: 0xDBDF,
	22332 - 11905: 0x885B,
	22333 - 11905: 0x885C,
	22334 - 11905: 0xBBF8,
	22335 - 11905: 0x885D,
	22336 - 11905: 0xD6B7,
	22337 - 11905: 0x885E,
	22338 - 11905: 0xDBE0,
	22339 - 11905: 0x885F,
	22340 - 11905: 0x8860,
	22341 - 11905: 0x8861,
	22342 - 11905: 0x8862,
	22343 - 11905: 0xBEF9,
	22344 - 11905: 0x8863,
	22345 - 11905: 0x8864,
	22346 - 11905: 0xB7BB,
	22347 - 11905: 0x8865,
	22348 - 11905: 0xDBD0,
	22349 - 11905: 0xCCAE,
	22350 - 11905: 0xBFB2,
	22351 - 11905: 0xBBB5,
	22352 - 11905: 0xD7F8,
	22353 - 11905: 0xBFD3,
	22354 - 11905: 0x8866,
	22355 - 11905: 0x8867,
	22356 - 11905: 0x8868,
	22357 - 11905: 0x8869,
	22358 - 11905: 0x886A,
	22359 - 11905: 0xBFE9,
	22360 - 11905: 0x886B,
	22361 - 11905: 0x886C,
	22362 - 11905: 0xBCE1,
	22363 - 11905: 0xCCB3,
	22364 - 11905: 0xDBDE,
	22365 - 11905: 0xB0D3,
	22366 - 11905: 0xCEEB,
	22367 - 11905: 0xB7D8,
	22368 - 11905: 0xD7B9,
	22369 - 11905: 0xC6C2,
	22370 - 11905: 0x886D,
	22371 - 11905: 0x886E,
	22372 - 11905: 0xC0A4,
	22373 - 11905: 0x886F,
	22374 - 11905: 0xCCB9,
	22375 - 11905: 0x8870,
	22376 - 11905: 0xDBE7,
	22377 - 11905: 0xDBE1,
	22378 - 11905: 0xC6BA,
	22379 - 11905: 0xDBE3,
	22380 - 11905: 0x8871,
	22381 - 11905: 0xDBE8,
	22382 - 11905: 0x8872,
	22383 - 11905: 0xC5F7,
	22384 - 11905: 0x8873,
	22385 - 11905: 0x8874,
	22386 - 11905: 0x8875,
	22387 - 11905: 0xDBEA,
	22388 - 11905: 0x8876,
	22389 - 11905: 0x8877,
	22390 - 11905: 0xDBE9,
	22391 - 11905: 0xBFC0,
	22392 - 11905: 0x8878,
	22393 - 11905: 0x8879,
	22394 - 11905: 0x887A,
	22395 - 11905: 0xDBE6,
	22396 - 11905: 0xDBE5,
	22397 - 11905: 0x887B,
	22398 - 11905: 0x887C,
	22399 - 11905: 0x887D,
	22400 - 11905: 0x887E,
	22401 - 11905: 0x8880,
	22402 - 11905: 0xB4B9,
	22403 - 11905: 0xC0AC,
	22404 - 11905: 0xC2A2,
	22405 - 11905: 0xDBE2,
	22406 - 11905: 0xDBE4,
	22407 - 11905: 0x8881,
	22408 - 11905: 0x8882,
	22409 - 11905: 0x8883,
	22410 - 11905: 0x8884,
	22411 - 11905: 0xD0CD,
	22412 - 11905: 0xDBED,
	22413 - 11905: 0x8885,
	22414 - 11905: 0x8886,
	22415 - 11905: 0x8887,
	22416 - 11905: 0x8888,
	22417 - 11905: 0x8889,
	22418 - 11905: 0xC0DD,
	22419 - 11905: 0xDBF2,
	22420 - 11905: 0x888A,
	22421 - 11905: 0x888B,
	22422 - 11905: 0x888C,
	22423 - 11905: 0x888D,
	22424 - 11905: 0x888E,
	22425 - 11905: 0x888F,
	22426 - 11905: 0x8890,
	22427 - 11905: 0xB6E2,
	22428 - 11905: 0x8891,
	22429 - 11905: 0x8892,
	22430 - 11905: 0x8893,
	22431 - 11905: 0x8894,
	22432 - 11905: 0xDBF3,
	22433 - 11905: 0xDBD2,
	22434 - 11905: 0xB9B8,
	22435 - 11905: 0xD4AB,
	22436 - 11905: 0xDBEC,
	22437 - 11905: 0x8895,
	22438 - 11905: 0xBFD1,
	22439 - 11905: 0xDBF0,
	22440 - 11905: 0x8896,
	22441 - 11905: 0xDBD1,
	22442 - 11905: 0x8897,
	22443 - 11905: 0xB5E6,
	22444 - 11905: 0x8898,
	22445 - 11905: 0xDBEB,
	22446 - 11905: 0xBFE5,
	22447 - 11905: 0x8899,
	22448 - 11905: 0x889A,
	22449 - 11905: 0x889B,
	22450 - 11905: 0xDBEE,
	22451 - 11905: 0x889C,
	22452 - 11905: 0xDBF1,
	22453 - 11905: 0x889D,
	22454 - 11905: 0x889E,
	22455 - 11905: 0x889F,
	22456 - 11905: 0xDBF9,
	22457 - 11905: 0x88A0,
	22458 - 11905: 0x88A1,
	22459 - 11905: 0x88A2,
	22460 - 11905: 0x88A3,
	22461 - 11905: 0x88A4,
	22462 - 11905: 0x88A5,
	22463 - 11905: 0x88A6,
	22464 - 11905: 0x88A7,
	22465 - 11905: 0x88A8,
	22466 - 11905: 0xB9A1,
	22467 - 11905: 0xB0A3,
	22468 - 11905: 0x88A9,
	22469 - 11905: 0x88AA,
	22470 - 11905: 0x88AB,
	22471 - 11905: 0x88AC,
	22472 - 11905: 0x88AD,
	22473 - 11905: 0x88AE,
	22474 - 11905: 0x88AF,
	22475 - 11905: 0xC2F1,
	22476 - 11905: 0x88B0,
	22477 - 11905: 0x88B1,
	22478 - 11905: 0xB3C7,
	22479 - 11905: 0xDBEF,
	22480 - 11905: 0x88B2,
	22481 - 11905: 0x88B3,
	22482 - 11905: 0xDBF8,
	22483 - 11905: 0x88B4,
	22484 - 11905: 0xC6D2,
	22485 - 11905: 0xDBF4,
	22486 - 11905: 0x88B5,
	22487 - 11905: 0x88B6,
	22488 - 11905: 0xDBF5,
	22489 - 11905: 0xDBF7,
	22490 - 11905: 0xDBF6,
	22491 - 11905: 0x88B7,
	22492 - 11905: 0x88B8,
	22493 - 11905: 0xDBFE,
	22494 - 11905: 0x88B9,
	22495 - 11905: 0xD3F2,
	22496 - 11905: 0xB2BA,
	22497 - 11905: 0x88BA,
	22498 - 11905: 0x88BB,
	22499 - 11905: 0x88BC,
	22500 - 11905: 0xDBFD,
	22501 - 11905: 0x88BD,
	22502 - 11905: 0x88BE,
	22503 - 11905: 0x88BF,
	22504 - 11905: 0x88C0,
	22505 - 11905: 0x88C1,
	22506 - 11905: 0x88C2,
	22507 - 11905: 0x88C3,
	22508 - 11905: 0x88C4,
	22509 - 11905: 0xDCA4,
	22510 - 11905: 0x88C5,
	22511 - 11905: 0xDBFB,
	22512 - 11905: 0x88C6,
	22513 - 11905: 0x88C7,
	22514 - 11905: 0x88C8,
	22515 - 11905: 0x88C9,
	22516 - 11905: 0xDBFA,
	22517 - 11905: 0x88CA,
	22518 - 11905: 0x88CB,
	22519 - 11905: 0x88CC,
	22520 - 11905: 0xDBFC,
	22521 - 11905: 0xC5E0,
	22522 - 11905: 0xBBF9,
	22523 - 11905: 0x88CD,
	22524 - 11905: 0x88CE,
	22525 - 11905: 0xDCA3,
	22526 - 11905: 0x88CF,
	22527 - 11905: 0x88D0,
	22528 - 11905: 0xDCA5,
	22529 - 11905: 0x88D1,
	22530 - 11905: 0xCCC3,
	22531 - 11905: 0x88D2,
	22532 - 11905: 0x88D3,
	22533 - 11905: 0x88D4,
	22534 - 11905: 0xB6D1,
	22535 - 11905: 0xDDC0,
	22536 - 11905: 0x88D5,
	22537 - 11905: 0x88D6,
	22538 - 11905: 0x88D7,
	22539 - 11905: 0xDCA1,
	22540 - 11905: 0x88D8,
	22541 - 11905: 0xDCA2,
	22542 - 11905: 0x88D9,
	22543 - 11905: 0x88DA,
	22544 - 11905: 0x88DB,
	22545 - 11905: 0xC7B5,
	22546 - 11905: 0x88DC,
	22547 - 11905: 0x88DD,
	22548 - 11905: 0x88DE,
	22549 - 11905: 0xB6E9,
	22550 - 11905: 0x88DF,
	22551 - 11905: 0x88E0,
	22552 - 11905: 0x88E1,
	22553 - 11905: 0xDCA7,
	22554 - 11905: 0x88E2,
	22555 - 11905: 0x88E3,
	22556 - 11905: 0x88E4,
	22557 - 11905: 0x88E5,
	22558 - 11905: 0xDCA6,
	22559 - 11905: 0x88E6,
	22560 - 11905: 0xDCA9,
	22561 - 11905: 0xB1A4,
	22562 - 11905: 0x88E7,
	22563 - 11905: 0x88E8,
	22564 - 11905: 0xB5CC,
	22565 - 11905: 0x88E9,
	22566 - 11905: 0x88EA,
	22567 - 11905: 0x88EB,
	22568 - 11905: 0x88EC,
	22569 - 11905: 0x88ED,
	22570 - 11905: 0xBFB0,
	22571 - 11905: 0x88EE,
	22572 - 11905: 0x88EF,
	22573 - 11905: 0x88F0,
	22574 - 11905: 0x88F1,
	22575 - 11905: 0x88F2,
	22576 - 11905: 0xD1DF,
	22577 - 11905: 0x88F3,
	22578 - 11905: 0x88F4,
	22579 - 11905: 0x88F5,
	22580 - 11905: 0x88F6,
	22581 - 11905: 0xB6C2,
	22582 - 11905: 0x88F7,
	22583 - 11905: 0x88F8,
	22584 - 11905: 0x88F9,
	22585 - 11905: 0x88FA,
	22586 - 11905: 0x88FB,
	22587 - 11905: 0x88FC,
	22588 - 11905: 0x88FD,
	22589 - 11905: 0x88FE,
	22590 - 11905: 0x8940,
	22591 - 11905: 0x8941,
	22592 - 11905: 0x8942,
	22593 - 11905: 0x8943,
	22594 - 11905: 0x8944,
	22595 - 11905: 0x8945,
	22596 - 11905: 0xDCA8,
	22597 - 11905: 0x8946,
	22598 - 11905: 0x8947,
	22599 - 11905: 0x8948,
	22600 - 11905: 0x8949,
	22601 - 11905: 0x894A,
	22602 - 11905: 0x894B,
	22603 - 11905: 0x894C,
	22604 - 11905: 0xCBFA,
	22605 - 11905: 0xEBF3,
	22606 - 11905: 0x894D,
	22607 - 11905: 0x894E,
	22608 - 11905: 0x894F,
	22609 - 11905: 0xCBDC,
	22610 - 11905: 0x8950,
	22611 - 11905: 0x8951,
	22612 - 11905: 0xCBFE,
	22613 - 11905: 0x8952,
	22614 - 11905: 0x8953,
	22615 - 11905: 0x8954,
	22616 - 11905: 0xCCC1,
	22617 - 11905: 0x8955,
	22618 - 11905: 0x8956,
	22619 - 11905: 0x8957,
	22620 - 11905: 0x8958,
	22621 - 11905: 0x8959,
	22622 - 11905: 0xC8FB,
	22623 - 11905: 0x895A,
	22624 - 11905: 0x895B,
	22625 - 11905: 0x895C,
	22626 - 11905: 0x895D,
	22627 - 11905: 0x895E,
	22628 - 11905: 0x895F,
	22629 - 11905: 0xDCAA,
	22630 - 11905: 0x8960,
	22631 - 11905: 0x8961,
	22632 - 11905: 0x8962,
	22633 - 11905: 0x8963,
	22634 - 11905: 0x8964,
	22635 - 11905: 0xCCEE,
	22636 - 11905: 0xDCAB,
	22637 - 11905: 0x8965,
	22638 - 11905: 0x8966,
	22639 - 11905: 0x8967,
	22640 - 11905: 0x8968,
	22641 - 11905: 0x8969,
	22642 - 11905: 0x896A,
	22643 - 11905: 0x896B,
	22644 - 11905: 0x896C,
	22645 - 11905: 0x896D,
	22646 - 11905: 0x896E,
	22647 - 11905: 0x896F,
	22648 - 11905: 0x8970,
	22649 - 11905: 0x8971,
	22650 - 11905: 0x8972,
	22651 - 11905: 0x8973,
	22652 - 11905: 0x8974,
	22653 - 11905: 0x8975,
	22654 - 11905: 0xDBD3,
	22655 - 11905: 0x8976,
	22656 - 11905: 0xDCAF,
	22657 - 11905: 0xDCAC,
	22658 - 11905: 0x8977,
	22659 - 11905: 0xBEB3,
	22660 - 11905: 0x8978,
	22661 - 11905: 0xCAFB,
	22662 - 11905: 0x8979,
	22663 - 11905: 0x897A,
	22664 - 11905: 0x897B,
	22665 - 11905: 0xDCAD,
	22666 - 11905: 0x897C,
	22667 - 11905: 0x897D,
	22668 - 11905: 0x897E,
	22669 - 11905: 0x8980,
	22670 - 11905: 0x8981,
	22671 - 11905: 0x8982,
	22672 - 11905: 0x8983,
	22673 - 11905: 0x8984,
	22674 - 11905: 0xC9CA,
	22675 - 11905: 0xC4B9,
	22676 - 11905: 0x8985,
	22677 - 11905: 0x8986,
	22678 - 11905: 0x8987,
	22679 - 11905: 0x8988,
	22680 - 11905: 0x8989,
	22681 - 11905: 0xC7BD,
	22682 - 11905: 0xDCAE,
	22683 - 11905: 0x898A,
	22684 - 11905: 0x898B,
	22685 - 11905: 0x898C,
	22686 - 11905: 0xD4F6,
	22687 - 11905: 0xD0E6,
	22688 - 11905: 0x898D,
	22689 - 11905: 0x898E,
	22690 - 11905: 0x898F,
	22691 - 11905: 0x8990,
	22692 - 11905: 0x8991,
	22693 - 11905: 0x8992,
	22694 - 11905: 0x8993,
	22695 - 11905: 0x8994,
	22696 - 11905: 0xC4AB,
	22697 - 11905: 0xB6D5,
	22698 - 11905: 0x8995,
	22699 - 11905: 0x8996,
	22700 - 11905: 0x8997,
	22701 - 11905: 0x8998,
	22702 - 11905: 0x8999,
	22703 - 11905: 0x899A,
	22704 - 11905: 0x899B,
	22705 - 11905: 0x899C,
	22706 - 11905: 0x899D,
	22707 - 11905: 0x899E,
	22708 - 11905: 0x899F,
	22709 - 11905: 0x89A0,
	22710 - 11905: 0x89A1,
	22711 - 11905: 0x89A2,
	22712 - 11905: 0x89A3,
	22713 - 11905: 0x89A4,
	22714 - 11905: 0x89A5,
	22715 - 11905: 0x89A6,
	22716 - 11905: 0xDBD4,
	22717 - 11905: 0x89A7,
	22718 - 11905: 0x89A8,
	22719 - 11905: 0x89A9,
	22720 - 11905: 0x89AA,
	22721 - 11905: 0xB1DA,
	22722 - 11905: 0x89AB,
	22723 - 11905: 0x89AC,
	22724 - 11905: 0x89AD,
	22725 - 11905: 0xDBD5,
	22726 - 11905: 0x89AE,
	22727 - 11905: 0x89AF,
	22728 - 11905: 0x89B0,
	22729 - 11905: 0x89B1,
	22730 - 11905: 0x89B2,
	22731 - 11905: 0x89B3,
	22732 - 11905: 0x89B4,
	22733 - 11905: 0x89B5,
	22734 - 11905: 0x89B6,
	22735 - 11905: 0x89B7,
	22736 - 11905: 0x89B8,
	22737 - 11905: 0xDBD6,
	22738 - 11905: 0x89B9,
	22739 - 11905: 0x89BA,
	22740 - 11905: 0x89BB,
	22741 - 11905: 0xBABE,
	22742 - 11905: 0x89BC,
	22743 - 11905: 0x89BD,
	22744 - 11905: 0x89BE,
	22745 - 11905: 0x89BF,
	22746 - 11905: 0x89C0,
	22747 - 11905: 0x89C1,
	22748 - 11905: 0x89C2,
	22749 - 11905: 0x89C3,
	22750 - 11905: 0x89C4,
	22751 - 11905: 0x89C5,
	22752 - 11905: 0x89C6,
	22753 - 11905: 0x89C7,
	22754 - 11905: 0x89C8,
	22755 - 11905: 0x89C9,
	22756 - 11905: 0xC8C0,
	22757 - 11905: 0x89CA,
	22758 - 11905: 0x89CB,
	22759 - 11905: 0x89CC,
	22760 - 11905: 0x89CD,
	22761 - 11905: 0x89CE,
	22762 - 11905: 0x89CF,
	22763 - 11905: 0xCABF,
	22764 - 11905: 0xC8C9,
	22765 - 11905: 0x89D0,
	22766 - 11905: 0xD7B3,
	22767 - 11905: 0x89D1,
	22768 - 11905: 0xC9F9,
	22769 - 11905: 0x89D2,
	22770 - 11905: 0x89D3,
	22771 - 11905: 0xBFC7,
	22772 - 11905: 0x89D4,
	22773 - 11905: 0x89D5,
	22774 - 11905: 0xBAF8,
	22775 - 11905: 0x89D6,
	22776 - 11905: 0x89D7,
	22777 - 11905: 0xD2BC,
	22778 - 11905: 0x89D8,
	22779 - 11905: 0x89D9,
	22780 - 11905: 0x89DA,
	22781 - 11905: 0x89DB,
	22782 - 11905: 0x89DC,
	22783 - 11905: 0x89DD,
	22784 - 11905: 0x89DE,
	22785 - 11905: 0x89DF,
	22786 - 11905: 0xE2BA,
	22787 - 11905: 0x89E0,
	22788 - 11905: 0xB4A6,
	22789 - 11905: 0x89E1,
	22790 - 11905: 0x89E2,
	22791 - 11905: 0xB1B8,
	22792 - 11905: 0x89E3,
	22793 - 11905: 0x89E4,
	22794 - 11905: 0x89E5,
	22795 - 11905: 0x89E6,
	22796 - 11905: 0x89E7,
	22797 - 11905: 0xB8B4,
	22798 - 11905: 0x89E8,
	22799 - 11905: 0xCFC4,
	22800 - 11905: 0x89E9,
	22801 - 11905: 0x89EA,
	22802 - 11905: 0x89EB,
	22803 - 11905: 0x89EC,
	22804 - 11905: 0xD9E7,
	22805 - 11905: 0xCFA6,
	22806 - 11905: 0xCDE2,
	22807 - 11905: 0x89ED,
	22808 - 11905: 0x89EE,
	22809 - 11905: 0xD9ED,
	22810 - 11905: 0xB6E0,
	22811 - 11905: 0x89EF,
	22812 - 11905: 0xD2B9,
	22813 - 11905: 0x89F0,
	22814 - 11905: 0x89F1,
	22815 - 11905: 0xB9BB,
	22816 - 11905: 0x89F2,
	22817 - 11905: 0x89F3,
	22818 - 11905: 0x89F4,
	22819 - 11905: 0x89F5,
	22820 - 11905: 0xE2B9,
	22821 - 11905: 0xE2B7,
	22822 - 11905: 0x89F6,
	22823 - 11905: 0xB4F3,
	22824 - 11905: 0x89F7,
	22825 - 11905: 0xCCEC,
	22826 - 11905: 0xCCAB,
	22827 - 11905: 0xB7F2,
	22828 - 11905: 0x89F8,
	22829 - 11905: 0xD8B2,
	22830 - 11905: 0xD1EB,
	22831 - 11905: 0xBABB,
	22832 - 11905: 0x89F9,
	22833 - 11905: 0xCAA7,
	22834 - 11905: 0x89FA,
	22835 - 11905: 0x89FB,
	22836 - 11905: 0xCDB7,
	22837 - 11905: 0x89FC,
	22838 - 11905: 0x89FD,
	22839 - 11905: 0xD2C4,
	22840 - 11905: 0xBFE4,
	22841 - 11905: 0xBCD0,
	22842 - 11905: 0xB6E1,
	22843 - 11905: 0x89FE,
	22844 - 11905: 0xDEC5,
	22845 - 11905: 0x8A40,
	22846 - 11905: 0x8A41,
	22847 - 11905: 0x8A42,
	22848 - 11905: 0x8A43,
	22849 - 11905: 0xDEC6,
	22850 - 11905: 0xDBBC,
	22851 - 11905: 0x8A44,
	22852 - 11905: 0xD1D9,
	22853 - 11905: 0x8A45,
	22854 - 11905: 0x8A46,
	22855 - 11905: 0xC6E6,
	22856 - 11905: 0xC4CE,
	22857 - 11905: 0xB7EE,
	22858 - 11905: 0x8A47,
	22859 - 11905: 0xB7DC,
	22860 - 11905: 0x8A48,
	22861 - 11905: 0x8A49,
	22862 - 11905: 0xBFFC,
	22863 - 11905: 0xD7E0,
	22864 - 11905: 0x8A4A,
	22865 - 11905: 0xC6F5,
	22866 - 11905: 0x8A4B,
	22867 - 11905: 0x8A4C,
	22868 - 11905: 0xB1BC,
	22869 - 11905: 0xDEC8,
	22870 - 11905: 0xBDB1,
	22871 - 11905: 0xCCD7,
	22872 - 11905: 0xDECA,
	22873 - 11905: 0x8A4D,
	22874 - 11905: 0xDEC9,
	22875 - 11905: 0x8A4E,
	22876 - 11905: 0x8A4F,
	22877 - 11905: 0x8A50,
	22878 - 11905: 0x8A51,
	22879 - 11905: 0x8A52,
	22880 - 11905: 0xB5EC,
	22881 - 11905: 0x8A53,
	22882 - 11905: 0xC9DD,
	22883 - 11905: 0x8A54,
	22884 - 11905: 0x8A55,
	22885 - 11905: 0xB0C2,
	22886 - 11905: 0x8A56,
	22887 - 11905: 0x8A57,
	22888 - 11905: 0x8A58,
	22889 - 11905: 0x8A59,
	22890 - 11905: 0x8A5A,
	22891 - 11905: 0x8A5B,
	22892 - 11905: 0x8A5C,
	22893 - 11905: 0x8A5D,
	22894 - 11905: 0x8A5E,
	22895 - 11905: 0x8A5F,
	22896 - 11905: 0x8A60,
	22897 - 11905: 0x8A61,
	22898 - 11905: 0x8A62,
	22899 - 11905: 0xC5AE,
	22900 - 11905: 0xC5AB,
	22901 - 11905: 0x8A63,
	22902 - 11905: 0xC4CC,
	22903 - 11905: 0x8A64,
	22904 - 11905: 0xBCE9,
	22905 - 11905: 0xCBFD,
	22906 - 11905: 0x8A65,
	22907 - 11905: 0x8A66,
	22908 - 11905: 0x8A67,
	22909 - 11905: 0xBAC3,
	22910 - 11905: 0x8A68,
	22911 - 11905: 0x8A69,
	22912 - 11905: 0x8A6A,
	22913 - 11905: 0xE5F9,
	22914 - 11905: 0xC8E7,
	22915 - 11905: 0xE5FA,
	22916 - 11905: 0xCDFD,
	22917 - 11905: 0x8A6B,
	22918 - 11905: 0xD7B1,
	22919 - 11905: 0xB8BE,
	22920 - 11905: 0xC2E8,
	22921 - 11905: 0x8A6C,
	22922 - 11905: 0xC8D1,
	22923 - 11905: 0x8A6D,
	22924 - 11905: 0x8A6E,
	22925 - 11905: 0xE5FB,
	22926 - 11905: 0x8A6F,
	22927 - 11905: 0x8A70,
	22928 - 11905: 0x8A71,
	22929 - 11905: 0x8A72,
	22930 - 11905: 0xB6CA,
	22931 - 11905: 0xBCCB,
	22932 - 11905: 0x8A73,
	22933 - 11905: 0x8A74,
	22934 - 11905: 0xD1FD,
	22935 - 11905: 0xE6A1,
	22936 - 11905: 0x8A75,
	22937 - 11905: 0xC3EE,
	22938 - 11905: 0x8A76,
	22939 - 11905: 0x8A77,
	22940 - 11905: 0x8A78,
	22941 - 11905: 0x8A79,
	22942 - 11905: 0xE6A4,
	22943 - 11905: 0x8A7A,
	22944 - 11905: 0x8A7B,
	22945 - 11905: 0x8A7C,
	22946 - 11905: 0x8A7D,
	22947 - 11905: 0xE5FE,
	22948 - 11905: 0xE6A5,
	22949 - 11905: 0xCDD7,
	22950 - 11905: 0x8A7E,
	22951 - 11905: 0x8A80,
	22952 - 11905: 0xB7C1,
	22953 - 11905: 0xE5FC,
	22954 - 11905: 0xE5FD,
	22955 - 11905: 0xE6A3,
	22956 - 11905: 0x8A81,
	22957 - 11905: 0x8A82,
	22958 - 11905: 0xC4DD,
	22959 - 11905: 0xE6A8,
	22960 - 11905: 0x8A83,
	22961 - 11905: 0x8A84,
	22962 - 11905: 0xE6A7,
	22963 - 11905: 0x8A85,
	22964 - 11905: 0x8A86,
	22965 - 11905: 0x8A87,
	22966 - 11905: 0x8A88,
	22967 - 11905: 0x8A89,
	22968 - 11905: 0x8A8A,
	22969 - 11905: 0xC3C3,
	22970 - 11905: 0x8A8B,
	22971 - 11905: 0xC6DE,
	22972 - 11905: 0x8A8C,
	22973 - 11905: 0x8A8D,
	22974 - 11905: 0xE6AA,
	22975 - 11905: 0x8A8E,
	22976 - 11905: 0x8A8F,
	22977 - 11905: 0x8A90,
	22978 - 11905: 0x8A91,
	22979 - 11905: 0x8A92,
	22980 - 11905: 0x8A93,
	22981 - 11905: 0x8A94,
	22982 - 11905: 0xC4B7,
	22983 - 11905: 0x8A95,
	22984 - 11905: 0x8A96,
	22985 - 11905: 0x8A97,
	22986 - 11905: 0xE6A2,
	22987 - 11905: 0xCABC,
	22988 - 11905: 0x8A98,
	22989 - 11905: 0x8A99,
	22990 - 11905: 0x8A9A,
	22991 - 11905: 0x8A9B,
	22992 - 11905: 0xBDE3,
	22993 - 11905: 0xB9C3,
	22994 - 11905: 0xE6A6,
	22995 - 11905: 0xD0D5,
	22996 - 11905: 0xCEAF,
	22997 - 11905: 0x8A9C,
	22998 - 11905: 0x8A9D,
	22999 - 11905: 0xE6A9,
	23000 - 11905: 0xE6B0,
	23001 - 11905: 0x8A9E,
	23002 - 11905: 0xD2A6,
	23003 - 11905: 0x8A9F,
	23004 - 11905: 0xBDAA,
	23005 - 11905: 0xE6AD,
	23006 - 11905: 0x8AA0,
	23007 - 11905: 0x8AA1,
	23008 - 11905: 0x8AA2,
	23009 - 11905: 0x8AA3,
	23010 - 11905: 0x8AA4,
	23011 - 11905: 0xE6AF,
	23012 - 11905: 0x8AA5,
	23013 - 11905: 0xC0D1,
	23014 - 11905: 0x8AA6,
	23015 - 11905: 0x8AA7,
	23016 - 11905: 0xD2CC,
	23017 - 11905: 0x8AA8,
	23018 - 11905: 0x8AA9,
	23019 - 11905: 0x8AAA,
	23020 - 11905: 0xBCA7,
	23021 - 11905: 0x8AAB,
	23022 - 11905: 0x8AAC,
	23023 - 11905: 0x8AAD,
	23024 - 11905: 0x8AAE,
	23025 - 11905: 0x8AAF,
	23026 - 11905: 0x8AB0,
	23027 - 11905: 0x8AB1,
	23028 - 11905: 0x8AB2,
	23029 - 11905: 0x8AB3,
	23030 - 11905: 0x8AB4,
	23031 - 11905: 0x8AB5,
	23032 - 11905: 0x8AB6,
	23033 - 11905: 0xE6B1,
	23034 - 11905: 0x8AB7,
	23035 - 11905: 0xD2F6,
	23036 - 11905: 0x8AB8,
	23037 - 11905: 0x8AB9,
	23038 - 11905: 0x8ABA,
	23039 - 11905: 0xD7CB,
	23040 - 11905: 0x8ABB,
	23041 - 11905: 0xCDFE,
	23042 - 11905: 0x8ABC,
	23043 - 11905: 0xCDDE,
	23044 - 11905: 0xC2A6,
	23045 - 11905: 0xE6AB,
	23046 - 11905: 0xE6AC,
	23047 - 11905: 0xBDBF,
	23048 - 11905: 0xE6AE,
	23049 - 11905: 0xE6B3,
	23050 - 11905: 0x8ABD,
	23051 - 11905: 0x8ABE,
	23052 - 11905: 0xE6B2,
	23053 - 11905: 0x8ABF,
	23054 - 11905: 0x8AC0,
	23055 - 11905: 0x8AC1,
	23056 - 11905: 0x8AC2,
	23057 - 11905: 0xE6B6,
	23058 - 11905: 0x8AC3,
	23059 - 11905: 0xE6B8,
	23060 - 11905: 0x8AC4,
	23061 - 11905: 0x8AC5,
	23062 - 11905: 0x8AC6,
	23063 - 11905: 0x8AC7,
	23064 - 11905: 0xC4EF,
	23065 - 11905: 0x8AC8,
	23066 - 11905: 0x8AC9,
	23067 - 11905: 0x8ACA,
	23068 - 11905: 0xC4C8,
	23069 - 11905: 0x8ACB,
	23070 - 11905: 0x8ACC,
	23071 - 11905: 0xBEEA,
	23072 - 11905: 0xC9EF,
	23073 - 11905: 0x8ACD,
	23074 - 11905: 0x8ACE,
	23075 - 11905: 0xE6B7,
	23076 - 11905: 0x8ACF,
	23077 - 11905: 0xB6F0,
	23078 - 11905: 0x8AD0,
	23079 - 11905: 0x8AD1,
	23080 - 11905: 0x8AD2,
	23081 - 11905: 0xC3E4,
	23082 - 11905: 0x8AD3,
	23083 - 11905: 0x8AD4,
	23084 - 11905: 0x8AD5,
	23085 - 11905: 0x8AD6,
	23086 - 11905: 0x8AD7,
	23087 - 11905: 0x8AD8,
	23088 - 11905: 0x8AD9,
	23089 - 11905: 0xD3E9,
	23090 - 11905: 0xE6B4,
	23091 - 11905: 0x8ADA,
	23092 - 11905: 0xE6B5,
	23093 - 11905: 0x8ADB,
	23094 - 11905: 0xC8A2,
	23095 - 11905: 0x8ADC,
	23096 - 11905: 0x8ADD,
	23097 - 11905: 0x8ADE,
	23098 - 11905: 0x8ADF,
	23099 - 11905: 0x8AE0,
	23100 - 11905: 0xE6BD,
	23101 - 11905: 0x8AE1,
	23102 - 11905: 0x8AE2,
	23103 - 11905: 0x8AE3,
	23104 - 11905: 0xE6B9,
	23105 - 11905: 0x8AE4,
	23106 - 11905: 0x8AE5,
	23107 - 11905: 0x8AE6,
	23108 - 11905: 0x8AE7,
	23109 - 11905: 0x8AE8,
	23110 - 11905: 0xC6C5,
	23111 - 11905: 0x8AE9,
	23112 - 11905: 0x8AEA,
	23113 - 11905: 0xCDF1,
	23114 - 11905: 0xE6BB,
	23115 - 11905: 0x8AEB,
	23116 - 11905: 0x8AEC,
	23117 - 11905: 0x8AED,
	23118 - 11905: 0x8AEE,
	23119 - 11905: 0x8AEF,
	23120 - 11905: 0x8AF0,
	23121 - 11905: 0x8AF1,
	23122 - 11905: 0x8AF2,
	23123 - 11905: 0x8AF3,
	23124 - 11905: 0x8AF4,
	23125 - 11905: 0xE6BC,
	23126 - 11905: 0x8AF5,
	23127 - 11905: 0x8AF6,
	23128 - 11905: 0x8AF7,
	23129 - 11905: 0x8AF8,
	23130 - 11905: 0xBBE9,
	23131 - 11905: 0x8AF9,
	23132 - 11905: 0x8AFA,
	23133 - 11905: 0x8AFB,
	23134 - 11905: 0x8AFC,
	23135 - 11905: 0x8AFD,
	23136 - 11905: 0x8AFE,
	23137 - 11905: 0x8B40,
	23138 - 11905: 0xE6BE,
	23139 - 11905: 0x8B41,
	23140 - 11905: 0x8B42,
	23141 - 11905: 0x8B43,
	23142 - 11905: 0x8B44,
	23143 - 11905: 0xE6BA,
	23144 - 11905: 0x8B45,
	23145 - 11905: 0x8B46,
	23146 - 11905: 0xC0B7,
	23147 - 11905: 0x8B47,
	23148 - 11905: 0x8B48,
	23149 - 11905: 0x8B49,
	23150 - 11905: 0x8B4A,
	23151 - 11905: 0x8B4B,
	23152 - 11905: 0x8B4C,
	23153 - 11905: 0x8B4D,
	23154 - 11905: 0x8B4E,
	23155 - 11905: 0x8B4F,
	23156 - 11905: 0xD3A4,
	23157 - 11905: 0xE6BF,
	23158 - 11905: 0xC9F4,
	23159 - 11905: 0xE6C3,
	23160 - 11905: 0x8B50,
	23161 - 11905: 0x8B51,
	23162 - 11905: 0xE6C4,
	23163 - 11905: 0x8B52,
	23164 - 11905: 0x8B53,
	23165 - 11905: 0x8B54,
	23166 - 11905: 0x8B55,
	23167 - 11905: 0xD0F6,
	23168 - 11905: 0x8B56,
	23169 - 11905: 0x8B57,
	23170 - 11905: 0x8B58,
	23171 - 11905: 0x8B59,
	23172 - 11905: 0x8B5A,
	23173 - 11905: 0x8B5B,
	23174 - 11905: 0x8B5C,
	23175 - 11905: 0x8B5D,
	23176 - 11905: 0x8B5E,
	23177 - 11905: 0x8B5F,
	23178 - 11905: 0x8B60,
	23179 - 11905: 0x8B61,
	23180 - 11905: 0x8B62,
	23181 - 11905: 0x8B63,
	23182 - 11905: 0x8B64,
	23183 - 11905: 0x8B65,
	23184 - 11905: 0x8B66,
	23185 - 11905: 0x8B67,
	23186 - 11905: 0xC3BD,
	23187 - 11905: 0x8B68,
	23188 - 11905: 0x8B69,
	23189 - 11905: 0x8B6A,
	23190 - 11905: 0x8B6B,
	23191 - 11905: 0x8B6C,
	23192 - 11905: 0x8B6D,
	23193 - 11905: 0x8B6E,
	23194 - 11905: 0xC3C4,
	23195 - 11905: 0xE6C2,
	23196 - 11905: 0x8B6F,
	23197 - 11905: 0x8B70,
	23198 - 11905: 0x8B71,
	23199 - 11905: 0x8B72,
	23200 - 11905: 0x8B73,
	23201 - 11905: 0x8B74,
	23202 - 11905: 0x8B75,
	23203 - 11905: 0x8B76,
	23204 - 11905: 0x8B77,
	23205 - 11905: 0x8B78,
	23206 - 11905: 0x8B79,
	23207 - 11905: 0x8B7A,
	23208 - 11905: 0x8B7B,
	23209 - 11905: 0x8B7C,
	23210 - 11905: 0xE6C1,
	23211 - 11905: 0x8B7D,
	23212 - 11905: 0x8B7E,
	23213 - 11905: 0x8B80,
	23214 - 11905: 0x8B81,
	23215 - 11905: 0x8B82,
	23216 - 11905: 0x8B83,
	23217 - 11905: 0x8B84,
	23218 - 11905: 0xE6C7,
	23219 - 11905: 0xCFB1,
	23220 - 11905: 0x8B85,
	23221 - 11905: 0xEBF4,
	23222 - 11905: 0x8B86,
	23223 - 11905: 0x8B87,
	23224 - 11905: 0xE6CA,
	23225 - 11905: 0x8B88,
	23226 - 11905: 0x8B89,
	23227 - 11905: 0x8B8A,
	23228 - 11905: 0x8B8B,
	23229 - 11905: 0x8B8C,
	23230 - 11905: 0xE6C5,
	23231 - 11905: 0x8B8D,
	23232 - 11905: 0x8B8E,
	23233 - 11905: 0xBCDE,
	23234 - 11905: 0xC9A9,
	23235 - 11905: 0x8B8F,
	23236 - 11905: 0x8B90,
	23237 - 11905: 0x8B91,
	23238 - 11905: 0x8B92,
	23239 - 11905: 0x8B93,
	23240 - 11905: 0x8B94,
	23241 - 11905: 0xBCB5,
	23242 - 11905: 0x8B95,
	23243 - 11905: 0x8B96,
	23244 - 11905: 0xCFD3,
	23245 - 11905: 0x8B97,
	23246 - 11905: 0x8B98,
	23247 - 11905: 0x8B99,
	23248 - 11905: 0x8B9A,
	23249 - 11905: 0x8B9B,
	23250 - 11905: 0xE6C8,
	23251 - 11905: 0x8B9C,
	23252 - 11905: 0xE6C9,
	23253 - 11905: 0x8B9D,
	23254 - 11905: 0xE6CE,
	23255 - 11905: 0x8B9E,
	23256 - 11905: 0xE6D0,
	23257 - 11905: 0x8B9F,
	23258 - 11905: 0x8BA0,
	23259 - 11905: 0x8BA1,
	23260 - 11905: 0xE6D1,
	23261 - 11905: 0x8BA2,
	23262 - 11905: 0x8BA3,
	23263 - 11905: 0x8BA4,
	23264 - 11905: 0xE6CB,
	23265 - 11905: 0xB5D5,
	23266 - 11905: 0x8BA5,
	23267 - 11905: 0xE6CC,
	23268 - 11905: 0x8BA6,
	23269 - 11905: 0x8BA7,
	23270 - 11905: 0xE6CF,
	23271 - 11905: 0x8BA8,
	23272 - 11905: 0x8BA9,
	23273 - 11905: 0xC4DB,
	23274 - 11905: 0x8BAA,
	23275 - 11905: 0xE6C6,
	23276 - 11905: 0x8BAB,
	23277 - 11905: 0x8BAC,
	23278 - 11905: 0x8BAD,
	23279 - 11905: 0x8BAE,
	23280 - 11905: 0x8BAF,
	23281 - 11905: 0xE6CD,
	23282 - 11905: 0x8BB0,
	23283 - 11905: 0x8BB1,
	23284 - 11905: 0x8BB2,
	23285 - 11905: 0x8BB3,
	23286 - 11905: 0x8BB4,
	23287 - 11905: 0x8BB5,
	23288 - 11905: 0x8BB6,
	23289 - 11905: 0x8BB7,
	23290 - 11905: 0x8BB8,
	23291 - 11905: 0x8BB9,
	23292 - 11905: 0x8BBA,
	23293 - 11905: 0x8BBB,
	23294 - 11905: 0x8BBC,
	23295 - 11905: 0x8BBD,
	23296 - 11905: 0x8BBE,
	23297 - 11905: 0x8BBF,
	23298 - 11905: 0x8BC0,
	23299 - 11905: 0x8BC1,
	23300 - 11905: 0x8BC2,
	23301 - 11905: 0x8BC3,
	23302 - 11905: 0x8BC4,
	23303 - 11905: 0x8BC5,
	23304 - 11905: 0x8BC6,
	23305 - 11905: 0xE6D2,
	23306 - 11905: 0x8BC7,
	23307 - 11905: 0x8BC8,
	23308 - 11905: 0x8BC9,
	23309 - 11905: 0x8BCA,
	23310 - 11905: 0x8BCB,
	23311 - 11905: 0x8BCC,
	23312 - 11905: 0x8BCD,
	23313 - 11905: 0x8BCE,
	23314 - 11905: 0x8BCF,
	23315 - 11905: 0x8BD0,
	23316 - 11905: 0x8BD1,
	23317 - 11905: 0x8BD2,
	23318 - 11905: 0xE6D4,
	23319 - 11905: 0xE6D3,
	23320 - 11905: 0x8BD3,
	23321 - 11905: 0x8BD4,
	23322 - 11905: 0x8BD5,
	23323 - 11905: 0x8BD6,
	23324 - 11905: 0x8BD7,
	23325 - 11905: 0x8BD8,
	23326 - 11905: 0x8BD9,
	23327 - 11905: 0x8BDA,
	23328 - 11905: 0x8BDB,
	23329 - 11905: 0x8BDC,
	23330 - 11905: 0x8BDD,
	23331 - 11905: 0x8BDE,
	23332 - 11905: 0x8BDF,
	23333 - 11905: 0x8BE0,
	23334 - 11905: 0x8BE1,
	23335 - 11905: 0x8BE2,
	23336 - 11905: 0x8BE3,
	23337 - 11905: 0x8BE4,
	23338 - 11905: 0x8BE5,
	23339 - 11905: 0x8BE6,
	23340 - 11905: 0x8BE7,
	23341 - 11905: 0x8BE8,
	23342 - 11905: 0x8BE9,
	23343 - 11905: 0x8BEA,
	23344 - 11905: 0x8BEB,
	23345 - 11905: 0x8BEC,
	23346 - 11905: 0xE6D5,
	23347 - 11905: 0x8BED,
	23348 - 11905: 0xD9F8,
	23349 - 11905: 0x8BEE,
	23350 - 11905: 0x8BEF,
	23351 - 11905: 0xE6D6,
	23352 - 11905: 0x8BF0,
	23353 - 11905: 0x8BF1,
	23354 - 11905: 0x8BF2,
	23355 - 11905: 0x8BF3,
	23356 - 11905: 0x8BF4,
	23357 - 11905: 0x8BF5,
	23358 - 11905: 0x8BF6,
	23359 - 11905: 0x8BF7,
	23360 - 11905: 0xE6D7,
	23361 - 11905: 0x8BF8,
	23362 - 11905: 0x8BF9,
	23363 - 11905: 0x8BFA,
	23364 - 11905: 0x8BFB,
	23365 - 11905: 0x8BFC,
	23366 - 11905: 0x8BFD,
	23367 - 11905: 0x8BFE,
	23368 - 11905: 0x8C40,
	23369 - 11905: 0x8C41,
	23370 - 11905: 0x8C42,
	23371 - 11905: 0x8C43,
	23372 - 11905: 0x8C44,
	23373 - 11905: 0x8C45,
	23374 - 11905: 0x8C46,
	23375 - 11905: 0x8C47,
	23376 - 11905: 0xD7D3,
	23377 - 11905: 0xE6DD,
	23378 - 11905: 0x8C48,
	23379 - 11905: 0xE6DE,
	23380 - 11905: 0xBFD7,
	23381 - 11905: 0xD4D0,
	23382 - 11905: 0x8C49,
	23383 - 11905: 0xD7D6,
	23384 - 11905: 0xB4E6,
	23385 - 11905: 0xCBEF,
	23386 - 11905: 0xE6DA,
	23387 - 11905: 0xD8C3,
	23388 - 11905: 0xD7CE,
	23389 - 11905: 0xD0A2,
	23390 - 11905: 0x8C4A,
	23391 - 11905: 0xC3CF,
	23392 - 11905: 0x8C4B,
	23393 - 11905: 0x8C4C,
	23394 - 11905: 0xE6DF,
	23395 - 11905: 0xBCBE,
	23396 - 11905: 0xB9C2,
	23397 - 11905: 0xE6DB,
	23398 - 11905: 0xD1A7,
	23399 - 11905: 0x8C4D,
	23400 - 11905: 0x8C4E,
	23401 - 11905: 0xBAA2,
	23402 - 11905: 0xC2CF,
	23403 - 11905: 0x8C4F,
	23404 - 11905: 0xD8AB,
	23405 - 11905: 0x8C50,
	23406 - 11905: 0x8C51,
	23407 - 11905: 0x8C52,
	23408 - 11905: 0xCAEB,
	23409 - 11905: 0xE5EE,
	23410 - 11905: 0x8C53,
	23411 - 11905: 0xE6DC,
	23412 - 11905: 0x8C54,
	23413 - 11905: 0xB7F5,
	23414 - 11905: 0x8C55,
	23415 - 11905: 0x8C56,
	23416 - 11905: 0x8C57,
	23417 - 11905: 0x8C58,
	23418 - 11905: 0xC8E6,
	23419 - 11905: 0x8C59,
	23420 - 11905: 0x8C5A,
	23421 - 11905: 0xC4F5,
	23422 - 11905: 0x8C5B,
	23423 - 11905: 0x8C5C,
	23424 - 11905: 0xE5B2,
	23425 - 11905: 0xC4FE,
	23426 - 11905: 0x8C5D,
	23427 - 11905: 0xCBFC,
	23428 - 11905: 0xE5B3,
	23429 - 11905: 0xD5AC,
	23430 - 11905: 0x8C5E,
	23431 - 11905: 0xD3EE,
	23432 - 11905: 0xCAD8,
	23433 - 11905: 0xB0B2,
	23434 - 11905: 0x8C5F,
	23435 - 11905: 0xCBCE,
	23436 - 11905: 0xCDEA,
	23437 - 11905: 0x8C60,
	23438 - 11905: 0x8C61,
	23439 - 11905: 0xBAEA,
	23440 - 11905: 0x8C62,
	23441 - 11905: 0x8C63,
	23442 - 11905: 0x8C64,
	23443 - 11905: 0xE5B5,
	23444 - 11905: 0x8C65,
	23445 - 11905: 0xE5B4,
	23446 - 11905: 0x8C66,
	23447 - 11905: 0xD7DA,
	23448 - 11905: 0xB9D9,
	23449 - 11905: 0xD6E6,
	23450 - 11905: 0xB6A8,
	23451 - 11905: 0xCDF0,
	23452 - 11905: 0xD2CB,
	23453 - 11905: 0xB1A6,
	23454 - 11905: 0xCAB5,
	23455 - 11905: 0x8C67,
	23456 - 11905: 0xB3E8,
	23457 - 11905: 0xC9F3,
	23458 - 11905: 0xBFCD,
	23459 - 11905: 0xD0FB,
	23460 - 11905: 0xCAD2,
	23461 - 11905: 0xE5B6,
	23462 - 11905: 0xBBC2,
	23463 - 11905: 0x8C68,
	23464 - 11905: 0x8C69,
	23465 - 11905: 0x8C6A,
	23466 - 11905: 0xCFDC,
	23467 - 11905: 0xB9AC,
	23468 - 11905: 0x8C6B,
	23469 - 11905: 0x8C6C,
	23470 - 11905: 0x8C6D,
	23471 - 11905: 0x8C6E,
	23472 - 11905: 0xD4D7,
	23473 - 11905: 0x8C6F,
	23474 - 11905: 0x8C70,
	23475 - 11905: 0xBAA6,
	23476 - 11905: 0xD1E7,
	23477 - 11905: 0xCFFC,
	23478 - 11905: 0xBCD2,
	23479 - 11905: 0x8C71,
	23480 - 11905: 0xE5B7,
	23481 - 11905: 0xC8DD,
	23482 - 11905: 0x8C72,
	23483 - 11905: 0x8C73,
	23484 - 11905: 0x8C74,
	23485 - 11905: 0xBFED,
	23486 - 11905: 0xB1F6,
	23487 - 11905: 0xCBDE,
	23488 - 11905: 0x8C75,
	23489 - 11905: 0x8C76,
	23490 - 11905: 0xBCC5,
	23491 - 11905: 0x8C77,
	23492 - 11905: 0xBCC4,
	23493 - 11905: 0xD2FA,
	23494 - 11905: 0xC3DC,
	23495 - 11905: 0xBFDC,
	23496 - 11905: 0x8C78,
	23497 - 11905: 0x8C79,
	23498 - 11905: 0x8C7A,
	23499 - 11905: 0x8C7B,
	23500 - 11905: 0xB8BB,
	23501 - 11905: 0x8C7C,
	23502 - 11905: 0x8C7D,
	23503 - 11905: 0x8C7E,
	23504 - 11905: 0xC3C2,
	23505 - 11905: 0x8C80,
	23506 - 11905: 0xBAAE,
	23507 - 11905: 0xD4A2,
	23508 - 11905: 0x8C81,
	23509 - 11905: 0x8C82,
	23510 - 11905: 0x8C83,
	23511 - 11905: 0x8C84,
	23512 - 11905: 0x8C85,
	23513 - 11905: 0x8C86,
	23514 - 11905: 0x8C87,
	23515 - 11905: 0x8C88,
	23516 - 11905: 0x8C89,
	23517 - 11905: 0xC7DE,
	23518 - 11905: 0xC4AF,
	23519 - 11905: 0xB2EC,
	23520 - 11905: 0x8C8A,
	23521 - 11905: 0xB9D1,
	23522 - 11905: 0x8C8B,
	23523 - 11905: 0x8C8C,
	23524 - 11905: 0xE5BB,
	23525 - 11905: 0xC1C8,
	23526 - 11905: 0x8C8D,
	23527 - 11905: 0x8C8E,
	23528 - 11905: 0xD5AF,
	23529 - 11905: 0x8C8F,
	23530 - 11905: 0x8C90,
	23531 - 11905: 0x8C91,
	23532 - 11905: 0x8C92,
	23533 - 11905: 0x8C93,
	23534 - 11905: 0xE5BC,
	23535 - 11905: 0x8C94,
	23536 - 11905: 0xE5BE,
	23537 - 11905: 0x8C95,
	23538 - 11905: 0x8C96,
	23539 - 11905: 0x8C97,
	23540 - 11905: 0x8C98,
	23541 - 11905: 0x8C99,
	23542 - 11905: 0x8C9A,
	23543 - 11905: 0x8C9B,
	23544 - 11905: 0xB4E7,
	23545 - 11905: 0xB6D4,
	23546 - 11905: 0xCBC2,
	23547 - 11905: 0xD1B0,
	23548 - 11905: 0xB5BC,
	23549 - 11905: 0x8C9C,
	23550 - 11905: 0x8C9D,
	23551 - 11905: 0xCAD9,
	23552 - 11905: 0x8C9E,
	23553 - 11905: 0xB7E2,
	23554 - 11905: 0x8C9F,
	23555 - 11905: 0x8CA0,
	23556 - 11905: 0xC9E4,
	23557 - 11905: 0x8CA1,
	23558 - 11905: 0xBDAB,
	23559 - 11905: 0x8CA2,
	23560 - 11905: 0x8CA3,
	23561 - 11905: 0xCEBE,
	23562 - 11905: 0xD7F0,
	23563 - 11905: 0x8CA4,
	23564 - 11905: 0x8CA5,
	23565 - 11905: 0x8CA6,
	23566 - 11905: 0x8CA7,
	23567 - 11905: 0xD0A1,
	23568 - 11905: 0x8CA8,
	23569 - 11905: 0xC9D9,
	23570 - 11905: 0x8CA9,
	23571 - 11905: 0x8CAA,
	23572 - 11905: 0xB6FB,
	23573 - 11905: 0xE6D8,
	23574 - 11905: 0xBCE2,
	23575 - 11905: 0x8CAB,
	23576 - 11905: 0xB3BE,
	23577 - 11905: 0x8CAC,
	23578 - 11905: 0xC9D0,
	23579 - 11905: 0x8CAD,
	23580 - 11905: 0xE6D9,
	23581 - 11905: 0xB3A2,
	23582 - 11905: 0x8CAE,
	23583 - 11905: 0x8CAF,
	23584 - 11905: 0x8CB0,
	23585 - 11905: 0x8CB1,
	23586 - 11905: 0xDECC,
	23587 - 11905: 0x8CB2,
	23588 - 11905: 0xD3C8,
	23589 - 11905: 0xDECD,
	23590 - 11905: 0x8CB3,
	23591 - 11905: 0xD2A2,
	23592 - 11905: 0x8CB4,
	23593 - 11905: 0x8CB5,
	23594 - 11905: 0x8CB6,
	23595 - 11905: 0x8CB7,
	23596 - 11905: 0xDECE,
	23597 - 11905: 0x8CB8,
	23598 - 11905: 0x8CB9,
	23599 - 11905: 0x8CBA,
	23600 - 11905: 0x8CBB,
	23601 - 11905: 0xBECD,
	23602 - 11905: 0x8CBC,
	23603 - 11905: 0x8CBD,
	23604 - 11905: 0xDECF,
	23605 - 11905: 0x8CBE,
	23606 - 11905: 0x8CBF,
	23607 - 11905: 0x8CC0,
	23608 - 11905: 0xCAAC,
	23609 - 11905: 0xD2FC,
	23610 - 11905: 0xB3DF,
	23611 - 11905: 0xE5EA,
	23612 - 11905: 0xC4E1,
	23613 - 11905: 0xBEA1,
	23614 - 11905: 0xCEB2,
	23615 - 11905: 0xC4F2,
	23616 - 11905: 0xBED6,
	23617 - 11905: 0xC6A8,
	23618 - 11905: 0xB2E3,
	23619 - 11905: 0x8CC1,
	23620 - 11905: 0x8CC2,
	23621 - 11905: 0xBED3,
	23622 - 11905: 0x8CC3,
	23623 - 11905: 0x8CC4,
	23624 - 11905: 0xC7FC,
	23625 - 11905: 0xCCEB,
	23626 - 11905: 0xBDEC,
	23627 - 11905: 0xCEDD,
	23628 - 11905: 0x8CC5,
	23629 - 11905: 0x8CC6,
	23630 - 11905: 0xCABA,
	23631 - 11905: 0xC6C1,
	23632 - 11905: 0xE5EC,
	23633 - 11905: 0xD0BC,
	23634 - 11905: 0x8CC7,
	23635 - 11905: 0x8CC8,
	23636 - 11905: 0x8CC9,
	23637 - 11905: 0xD5B9,
	23638 - 11905: 0x8CCA,
	23639 - 11905: 0x8CCB,
	23640 - 11905: 0x8CCC,
	23641 - 11905: 0xE5ED,
	23642 - 11905: 0x8CCD,
	23643 - 11905: 0x8CCE,
	23644 - 11905: 0x8CCF,
	23645 - 11905: 0x8CD0,
	23646 - 11905: 0xCAF4,
	23647 - 11905: 0x8CD1,
	23648 - 11905: 0xCDC0,
	23649 - 11905: 0xC2C5,
	23650 - 11905: 0x8CD2,
	23651 - 11905: 0xE5EF,
	23652 - 11905: 0x8CD3,
	23653 - 11905: 0xC2C4,
	23654 - 11905: 0xE5F0,
	23655 - 11905: 0x8CD4,
	23656 - 11905: 0x8CD5,
	23657 - 11905: 0x8CD6,
	23658 - 11905: 0x8CD7,
	23659 - 11905: 0x8CD8,
	23660 - 11905: 0x8CD9,
	23661 - 11905: 0x8CDA,
	23662 - 11905: 0xE5F8,
	23663 - 11905: 0xCDCD,
	23664 - 11905: 0x8CDB,
	23665 - 11905: 0xC9BD,
	23666 - 11905: 0x8CDC,
	23667 - 11905: 0x8CDD,
	23668 - 11905: 0x8CDE,
	23669 - 11905: 0x8CDF,
	23670 - 11905: 0x8CE0,
	23671 - 11905: 0x8CE1,
	23672 - 11905: 0x8CE2,
	23673 - 11905: 0xD2D9,
	23674 - 11905: 0xE1A8,
	23675 - 11905: 0x8CE3,
	23676 - 11905: 0x8CE4,
	23677 - 11905: 0x8CE5,
	23678 - 11905: 0x8CE6,
	23679 - 11905: 0xD3EC,
	23680 - 11905: 0x8CE7,
	23681 - 11905: 0xCBEA,
	23682 - 11905: 0xC6F1,
	23683 - 11905: 0x8CE8,
	23684 - 11905: 0x8CE9,
	23685 - 11905: 0x8CEA,
	23686 - 11905: 0x8CEB,
	23687 - 11905: 0x8CEC,
	23688 - 11905: 0xE1AC,
	23689 - 11905: 0x8CED,
	23690 - 11905: 0x8CEE,
	23691 - 11905: 0x8CEF,
	23692 - 11905: 0xE1A7,
	23693 - 11905: 0xE1A9,
	23694 - 11905: 0x8CF0,
	23695 - 11905: 0x8CF1,
	23696 - 11905: 0xE1AA,
	23697 - 11905: 0xE1AF,
	23698 - 11905: 0x8CF2,
	23699 - 11905: 0x8CF3,
	23700 - 11905: 0xB2ED,
	23701 - 11905: 0x8CF4,
	23702 - 11905: 0xE1AB,
	23703 - 11905: 0xB8DA,
	23704 - 11905: 0xE1AD,
	23705 - 11905: 0xE1AE,
	23706 - 11905: 0xE1B0,
	23707 - 11905: 0xB5BA,
	23708 - 11905: 0xE1B1,
	23709 - 11905: 0x8CF5,
	23710 - 11905: 0x8CF6,
	23711 - 11905: 0x8CF7,
	23712 - 11905: 0x8CF8,
	23713 - 11905: 0x8CF9,
	23714 - 11905: 0xE1B3,
	23715 - 11905: 0xE1B8,
	23716 - 11905: 0x8CFA,
	23717 - 11905: 0x8CFB,
	23718 - 11905: 0x8CFC,
	23719 - 11905: 0x8CFD,
	23720 - 11905: 0x8CFE,
	23721 - 11905: 0xD1D2,
	23722 - 11905: 0x8D40,
	23723 - 11905: 0xE1B6,
	23724 - 11905: 0xE1B5,
	23725 - 11905: 0xC1EB,
	23726 - 11905: 0x8D41,
	23727 - 11905: 0x8D42,
	23728 - 11905: 0x8D43,
	23729 - 11905: 0xE1B7,
	23730 - 11905: 0x8D44,
	23731 - 11905: 0xD4C0,
	23732 - 11905: 0x8D45,
	23733 - 11905: 0xE1B2,
	23734 - 11905: 0x8D46,
	23735 - 11905: 0xE1BA,
	23736 - 11905: 0xB0B6,
	23737 - 11905: 0x8D47,
	23738 - 11905: 0x8D48,
	23739 - 11905: 0x8D49,
	23740 - 11905: 0x8D4A,
	23741 - 11905: 0xE1B4,
	23742 - 11905: 0x8D4B,
	23743 - 11905: 0xBFF9,
	23744 - 11905: 0x8D4C,
	23745 - 11905: 0xE1B9,
	23746 - 11905: 0x8D4D,
	23747 - 11905: 0x8D4E,
	23748 - 11905: 0xE1BB,
	23749 - 11905: 0x8D4F,
	23750 - 11905: 0x8D50,
	23751 - 11905: 0x8D51,
	23752 - 11905: 0x8D52,
	23753 - 11905: 0x8D53,
	23754 - 11905: 0x8D54,
	23755 - 11905: 0xE1BE,
	23756 - 11905: 0x8D55,
	23757 - 11905: 0x8D56,
	23758 - 11905: 0x8D57,
	23759 - 11905: 0x8D58,
	23760 - 11905: 0x8D59,
	23761 - 11905: 0x8D5A,
	23762 - 11905: 0xE1BC,
	23763 - 11905: 0x8D5B,
	23764 - 11905: 0x8D5C,
	23765 - 11905: 0x8D5D,
	23766 - 11905: 0x8D5E,
	23767 - 11905: 0x8D5F,
	23768 - 11905: 0x8D60,
	23769 - 11905: 0xD6C5,
	23770 - 11905: 0x8D61,
	23771 - 11905: 0x8D62,
	23772 - 11905: 0x8D63,
	23773 - 11905: 0x8D64,
	23774 - 11905: 0x8D65,
	23775 - 11905: 0x8D66,
	23776 - 11905: 0x8D67,
	23777 - 11905: 0xCFBF,
	23778 - 11905: 0x8D68,
	23779 - 11905: 0x8D69,
	23780 - 11905: 0xE1BD,
	23781 - 11905: 0xE1BF,
	23782 - 11905: 0xC2CD,
	23783 - 11905: 0x8D6A,
	23784 - 11905: 0xB6EB,
	23785 - 11905: 0x8D6B,
	23786 - 11905: 0xD3F8,
	23787 - 11905: 0x8D6C,
	23788 - 11905: 0x8D6D,
	23789 - 11905: 0xC7CD,
	23790 - 11905: 0x8D6E,
	23791 - 11905: 0x8D6F,
	23792 - 11905: 0xB7E5,
	23793 - 11905: 0x8D70,
	23794 - 11905: 0x8D71,
	23795 - 11905: 0x8D72,
	23796 - 11905: 0x8D73,
	23797 - 11905: 0x8D74,
	23798 - 11905: 0x8D75,
	23799 - 11905: 0x8D76,
	23800 - 11905: 0x8D77,
	23801 - 11905: 0x8D78,
	23802 - 11905: 0x8D79,
	23803 - 11905: 0xBEFE,
	23804 - 11905: 0x8D7A,
	23805 - 11905: 0x8D7B,
	23806 - 11905: 0x8D7C,
	23807 - 11905: 0x8D7D,
	23808 - 11905: 0x8D7E,
	23809 - 11905: 0x8D80,
	23810 - 11905: 0xE1C0,
	23811 - 11905: 0xE1C1,
	23812 - 11905: 0x8D81,
	23813 - 11905: 0x8D82,
	23814 - 11905: 0xE1C7,
	23815 - 11905: 0xB3E7,
	23816 - 11905: 0x8D83,
	23817 - 11905: 0x8D84,
	23818 - 11905: 0x8D85,
	23819 - 11905: 0x8D86,
	23820 - 11905: 0x8D87,
	23821 - 11905: 0x8D88,
	23822 - 11905: 0xC6E9,
	23823 - 11905: 0x8D89,
	23824 - 11905: 0x8D8A,
	23825 - 11905: 0x8D8B,
	23826 - 11905: 0x8D8C,
	23827 - 11905: 0x8D8D,
	23828 - 11905: 0xB4DE,
	23829 - 11905: 0x8D8E,
	23830 - 11905: 0xD1C2,
	23831 - 11905: 0x8D8F,
	23832 - 11905: 0x8D90,
	23833 - 11905: 0x8D91,
	23834 - 11905: 0x8D92,
	23835 - 11905: 0xE1C8,
	23836 - 11905: 0x8D93,
	23837 - 11905: 0x8D94,
	23838 - 11905: 0xE1C6,
	23839 - 11905: 0x8D95,
	23840 - 11905: 0x8D96,
	23841 - 11905: 0x8D97,
	23842 - 11905: 0x8D98,
	23843 - 11905: 0x8D99,
	23844 - 11905: 0xE1C5,
	23845 - 11905: 0x8D9A,
	23846 - 11905: 0xE1C3,
	23847 - 11905: 0xE1C2,
	23848 - 11905: 0x8D9B,
	23849 - 11905: 0xB1C0,
	23850 - 11905: 0x8D9C,
	23851 - 11905: 0x8D9D,
	23852 - 11905: 0x8D9E,
	23853 - 11905: 0xD5B8,
	23854 - 11905: 0xE1C4,
	23855 - 11905: 0x8D9F,
	23856 - 11905: 0x8DA0,
	23857 - 11905: 0x8DA1,
	23858 - 11905: 0x8DA2,
	23859 - 11905: 0x8DA3,
	23860 - 11905: 0xE1CB,
	23861 - 11905: 0x8DA4,
	23862 - 11905: 0x8DA5,
	23863 - 11905: 0x8DA6,
	23864 - 11905: 0x8DA7,
	23865 - 11905: 0x8DA8,
	23866 - 11905: 0x8DA9,
	23867 - 11905: 0x8DAA,
	23868 - 11905: 0x8DAB,
	23869 - 11905: 0xE1CC,
	23870 - 11905: 0xE1CA,
	23871 - 11905: 0x8DAC,
	23872 - 11905: 0x8DAD,
	23873 - 11905: 0x8DAE,
	23874 - 11905: 0x8DAF,
	23875 - 11905: 0x8DB0,
	23876 - 11905: 0x8DB1,
	23877 - 11905: 0x8DB2,
	23878 - 11905: 0x8DB3,
	23879 - 11905: 0xEFFA,
	23880 - 11905: 0x8DB4,
	23881 - 11905: 0x8DB5,
	23882 - 11905: 0xE1D3,
	23883 - 11905: 0xE1D2,
	23884 - 11905: 0xC7B6,
	23885 - 11905: 0x8DB6,
	23886 - 11905: 0x8DB7,
	23887 - 11905: 0x8DB8,
	23888 - 11905: 0x8DB9,
	23889 - 11905: 0x8DBA,
	23890 - 11905: 0x8DBB,
	23891 - 11905: 0x8DBC,
	23892 - 11905: 0x8DBD,
	23893 - 11905: 0x8DBE,
	23894 - 11905: 0x8DBF,
	23895 - 11905: 0x8DC0,
	23896 - 11905: 0xE1C9,
	23897 - 11905: 0x8DC1,
	23898 - 11905: 0x8DC2,
	23899 - 11905: 0xE1CE,
	23900 - 11905: 0x8DC3,
	23901 - 11905: 0xE1D0,
	23902 - 11905: 0x8DC4,
	23903 - 11905: 0x8DC5,
	23904 - 11905: 0x8DC6,
	23905 - 11905: 0x8DC7,
	23906 - 11905: 0x8DC8,
	23907 - 11905: 0x8DC9,
	23908 - 11905: 0x8DCA,
	23909 - 11905: 0x8DCB,
	23910 - 11905: 0x8DCC,
	23911 - 11905: 0x8DCD,
	23912 - 11905: 0x8DCE,
	23913 - 11905: 0xE1D4,
	23914 - 11905: 0x8DCF,
	23915 - 11905: 0xE1D1,
	23916 - 11905: 0xE1CD,
	23917 - 11905: 0x8DD0,
	23918 - 11905: 0x8DD1,
	23919 - 11905: 0xE1CF,
	23920 - 11905: 0x8DD2,
	23921 - 11905: 0x8DD3,
	23922 - 11905: 0x8DD4,
	23923 - 11905: 0x8DD5,
	23924 - 11905: 0xE1D5,
	23925 - 11905: 0x8DD6,
	23926 - 11905: 0x8DD7,
	23927 - 11905: 0x8DD8,
	23928 - 11905: 0x8DD9,
	23929 - 11905: 0x8DDA,
	23930 - 11905: 0x8DDB,
	23931 - 11905: 0x8DDC,
	23932 - 11905: 0x8DDD,
	23933 - 11905: 0x8DDE,
	23934 - 11905: 0x8DDF,
	23935 - 11905: 0x8DE0,
	23936 - 11905: 0x8DE1,
	23937 - 11905: 0x8DE2,
	23938 - 11905: 0xE1D6,
	23939 - 11905: 0x8DE3,
	23940 - 11905: 0x8DE4,
	23941 - 11905: 0x8DE5,
	23942 - 11905: 0x8DE6,
	23943 - 11905: 0x8DE7,
	23944 - 11905: 0x8DE8,
	23945 - 11905: 0x8DE9,
	23946 - 11905: 0x8DEA,
	23947 - 11905: 0x8DEB,
	23948 - 11905: 0x8DEC,
	23949 - 11905: 0x8DED,
	23950 - 11905: 0x8DEE,
	23951 - 11905: 0x8DEF,
	23952 - 11905: 0x8DF0,
	23953 - 11905: 0x8DF1,
	23954 - 11905: 0x8DF2,
	23955 - 11905: 0x8DF3,
	23956 - 11905: 0x8DF4,
	23957 - 11905: 0x8DF5,
	23958 - 11905: 0x8DF6,
	23959 - 11905: 0x8DF7,
	23960 - 11905: 0x8DF8,
	23961 - 11905: 0xE1D7,
	23962 - 11905: 0x8DF9,
	23963 - 11905: 0x8DFA,
	23964 - 11905: 0x8DFB,
	23965 - 11905: 0xE1D8,
	23966 - 11905: 0x8DFC,
	23967 - 11905: 0x8DFD,
	23968 - 11905: 0x8DFE,
	23969 - 11905: 0x8E40,
	23970 - 11905: 0x8E41,
	23971 - 11905: 0x8E42,
	23972 - 11905: 0x8E43,
	23973 - 11905: 0x8E44,
	23974 - 11905: 0x8E45,
	23975 - 11905: 0x8E46,
	23976 - 11905: 0x8E47,
	23977 - 11905: 0x8E48,
	23978 - 11905: 0x8E49,
	23979 - 11905: 0x8E4A,
	23980 - 11905: 0x8E4B,
	23981 - 11905: 0x8E4C,
	23982 - 11905: 0x8E4D,
	23983 - 11905: 0x8E4E,
	23984 - 11905: 0x8E4F,
	23985 - 11905: 0x8E50,
	23986 - 11905: 0x8E51,
	23987 - 11905: 0x8E52,
	23988 - 11905: 0x8E53,
	23989 - 11905: 0x8E54,
	23990 - 11905: 0x8E55,
	23991 - 11905: 0xE1DA,
	23992 - 11905: 0x8E56,
	23993 - 11905: 0x8E57,
	23994 - 11905: 0x8E58,
	23995 - 11905: 0x8E59,
	23996 - 11905: 0x8E5A,
	23997 - 11905: 0x8E5B,
	23998 - 11905: 0x8E5C,
	23999 - 11905: 0x8E5D,
	24000 - 11905: 0x8E5E,
	24001 - 11905: 0x8E5F,
	24002 - 11905: 0x8E60,
	24003 - 11905: 0x8E61,
	24004 - 11905: 0x8E62,
	24005 - 11905: 0xE1DB,
	24006 - 11905: 0x8E63,
	24007 - 11905: 0x8E64,
	24008 - 11905: 0x8E65,
	24009 - 11905: 0x8E66,
	24010 - 11905: 0x8E67,
	24011 - 11905: 0x8E68,
	24012 - 11905: 0x8E69,
	24013 - 11905: 0xCEA1,
	24014 - 11905: 0x8E6A,
	24015 - 11905: 0x8E6B,
	24016 - 11905: 0x8E6C,
	24017 - 11905: 0x8E6D,
	24018 - 11905: 0x8E6E,
	24019 - 11905: 0x8E6F,
	24020 - 11905: 0x8E70,
	24021 - 11905: 0x8E71,
	24022 - 11905: 0x8E72,
	24023 - 11905: 0x8E73,
	24024 - 11905: 0x8E74,
	24025 - 11905: 0x8E75,
	24026 - 11905: 0x8E76,
	24027 - 11905: 0xE7DD,
	24028 - 11905: 0x8E77,
	24029 - 11905: 0xB4A8,
	24030 - 11905: 0xD6DD,
	24031 - 11905: 0x8E78,
	24032 - 11905: 0x8E79,
	24033 - 11905: 0xD1B2,
	24034 - 11905: 0xB3B2,
	24035 - 11905: 0x8E7A,
	24036 - 11905: 0x8E7B,
	24037 - 11905: 0xB9A4,
	24038 - 11905: 0xD7F3,
	24039 - 11905: 0xC7C9,
	24040 - 11905: 0xBEDE,
	24041 - 11905: 0xB9AE,
	24042 - 11905: 0x8E7C,
	24043 - 11905: 0xCED7,
	24044 - 11905: 0x8E7D,
	24045 - 11905: 0x8E7E,
	24046 - 11905: 0xB2EE,
	24047 - 11905: 0xDBCF,
	24048 - 11905: 0x8E80,
	24049 - 11905: 0xBCBA,
	24050 - 11905: 0xD2D1,
	24051 - 11905: 0xCBC8,
	24052 - 11905: 0xB0CD,
	24053 - 11905: 0x8E81,
	24054 - 11905: 0x8E82,
	24055 - 11905: 0xCFEF,
	24056 - 11905: 0x8E83,
	24057 - 11905: 0x8E84,
	24058 - 11905: 0x8E85,
	24059 - 11905: 0x8E86,
	24060 - 11905: 0x8E87,
	24061 - 11905: 0xD9E3,
	24062 - 11905: 0xBDED,
	24063 - 11905: 0x8E88,
	24064 - 11905: 0x8E89,
	24065 - 11905: 0xB1D2,
	24066 - 11905: 0xCAD0,
	24067 - 11905: 0xB2BC,
	24068 - 11905: 0x8E8A,
	24069 - 11905: 0xCBA7,
	24070 - 11905: 0xB7AB,
	24071 - 11905: 0x8E8B,
	24072 - 11905: 0xCAA6,
	24073 - 11905: 0x8E8C,
	24074 - 11905: 0x8E8D,
	24075 - 11905: 0x8E8E,
	24076 - 11905: 0xCFA3,
	24077 - 11905: 0x8E8F,
	24078 - 11905: 0x8E90,
	24079 - 11905: 0xE0F8,
	24080 - 11905: 0xD5CA,
	24081 - 11905: 0xE0FB,
	24082 - 11905: 0x8E91,
	24083 - 11905: 0x8E92,
	24084 - 11905: 0xE0FA,
	24085 - 11905: 0xC5C1,
	24086 - 11905: 0xCCFB,
	24087 - 11905: 0x8E93,
	24088 - 11905: 0xC1B1,
	24089 - 11905: 0xE0F9,
	24090 - 11905: 0xD6E3,
	24091 - 11905: 0xB2AF,
	24092 - 11905: 0xD6C4,
	24093 - 11905: 0xB5DB,
	24094 - 11905: 0x8E94,
	24095 - 11905: 0x8E95,
	24096 - 11905: 0x8E96,
	24097 - 11905: 0x8E97,
	24098 - 11905: 0x8E98,
	24099 - 11905: 0x8E99,
	24100 - 11905: 0x8E9A,
	24101 - 11905: 0x8E9B,
	24102 - 11905: 0xB4F8,
	24103 - 11905: 0xD6A1,
	24104 - 11905: 0x8E9C,
	24105 - 11905: 0x8E9D,
	24106 - 11905: 0x8E9E,
	24107 - 11905: 0x8E9F,
	24108 - 11905: 0x8EA0,
	24109 - 11905: 0xCFAF,
	24110 - 11905: 0xB0EF,
	24111 - 11905: 0x8EA1,
	24112 - 11905: 0x8EA2,
	24113 - 11905: 0xE0FC,
	24114 - 11905: 0x8EA3,
	24115 - 11905: 0x8EA4,
	24116 - 11905: 0x8EA5,
	24117 - 11905: 0x8EA6,
	24118 - 11905: 0x8EA7,
	24119 - 11905: 0xE1A1,
	24120 - 11905: 0xB3A3,
	24121 - 11905: 0x8EA8,
	24122 - 11905: 0x8EA9,
	24123 - 11905: 0xE0FD,
	24124 - 11905: 0xE0FE,
	24125 - 11905: 0xC3B1,
	24126 - 11905: 0x8EAA,
	24127 - 11905: 0x8EAB,
	24128 - 11905: 0x8EAC,
	24129 - 11905: 0x8EAD,
	24130 - 11905: 0xC3DD,
	24131 - 11905: 0x8EAE,
	24132 - 11905: 0xE1A2,
	24133 - 11905: 0xB7F9,
	24134 - 11905: 0x8EAF,
	24135 - 11905: 0x8EB0,
	24136 - 11905: 0x8EB1,
	24137 - 11905: 0x8EB2,
	24138 - 11905: 0x8EB3,
	24139 - 11905: 0x8EB4,
	24140 - 11905: 0xBBCF,
	24141 - 11905: 0x8EB5,
	24142 - 11905: 0x8EB6,
	24143 - 11905: 0x8EB7,
	24144 - 11905: 0x8EB8,
	24145 - 11905: 0x8EB9,
	24146 - 11905: 0x8EBA,
	24147 - 11905: 0x8EBB,
	24148 - 11905: 0xE1A3,
	24149 - 11905: 0xC4BB,
	24150 - 11905: 0x8EBC,
	24151 - 11905: 0x8EBD,
	24152 - 11905: 0x8EBE,
	24153 - 11905: 0x8EBF,
	24154 - 11905: 0x8EC0,
	24155 - 11905: 0xE1A4,
	24156 - 11905: 0x8EC1,
	24157 - 11905: 0x8EC2,
	24158 - 11905: 0xE1A5,
	24159 - 11905: 0x8EC3,
	24160 - 11905: 0x8EC4,
	24161 - 11905: 0xE1A6,
	24162 - 11905: 0xB4B1,
	24163 - 11905: 0x8EC5,
	24164 - 11905: 0x8EC6,
	24165 - 11905: 0x8EC7,
	24166 - 11905: 0x8EC8,
	24167 - 11905: 0x8EC9,
	24168 - 11905: 0x8ECA,
	24169 - 11905: 0x8ECB,
	24170 - 11905: 0x8ECC,
	24171 - 11905: 0x8ECD,
	24172 - 11905: 0x8ECE,
	24173 - 11905: 0x8ECF,
	24174 - 11905: 0x8ED0,
	24175 - 11905: 0x8ED1,
	24176 - 11905: 0x8ED2,
	24177 - 11905: 0x8ED3,
	24178 - 11905: 0xB8C9,
	24179 - 11905: 0xC6BD,
	24180 - 11905: 0xC4EA,
	24181 - 11905: 0x8ED4,
	24182 - 11905: 0xB2A2,
	24183 - 11905: 0x8ED5,
	24184 - 11905: 0xD0D2,
	24185 - 11905: 0x8ED6,
	24186 - 11905: 0xE7DB,
	24187 - 11905: 0xBBC3,
	24188 - 11905: 0xD3D7,
	24189 - 11905: 0xD3C4,
	24190 - 11905: 0x8ED7,
	24191 - 11905: 0xB9E3,
	24192 - 11905: 0xE2CF,
	24193 - 11905: 0x8ED8,
	24194 - 11905: 0x8ED9,
	24195 - 11905: 0x8EDA,
	24196 - 11905: 0xD7AF,
	24197 - 11905: 0x8EDB,
	24198 - 11905: 0xC7EC,
	24199 - 11905: 0xB1D3,
	24200 - 11905: 0x8EDC,
	24201 - 11905: 0x8EDD,
	24202 - 11905: 0xB4B2,
	24203 - 11905: 0xE2D1,
	24204 - 11905: 0x8EDE,
	24205 - 11905: 0x8EDF,
	24206 - 11905: 0x8EE0,
	24207 - 11905: 0xD0F2,
	24208 - 11905: 0xC2AE,
	24209 - 11905: 0xE2D0,
	24210 - 11905: 0x8EE1,
	24211 - 11905: 0xBFE2,
	24212 - 11905: 0xD3A6,
	24213 - 11905: 0xB5D7,
	24214 - 11905: 0xE2D2,
	24215 - 11905: 0xB5EA,
	24216 - 11905: 0x8EE2,
	24217 - 11905: 0xC3ED,
	24218 - 11905: 0xB8FD,
	24219 - 11905: 0x8EE3,
	24220 - 11905: 0xB8AE,
	24221 - 11905: 0x8EE4,
	24222 - 11905: 0xC5D3,
	24223 - 11905: 0xB7CF,
	24224 - 11905: 0xE2D4,
	24225 - 11905: 0x8EE5,
	24226 - 11905: 0x8EE6,
	24227 - 11905: 0x8EE7,
	24228 - 11905: 0x8EE8,
	24229 - 11905: 0xE2D3,
	24230 - 11905: 0xB6C8,
	24231 - 11905: 0xD7F9,
	24232 - 11905: 0x8EE9,
	24233 - 11905: 0x8EEA,
	24234 - 11905: 0x8EEB,
	24235 - 11905: 0x8EEC,
	24236 - 11905: 0x8EED,
	24237 - 11905: 0xCDA5,
	24238 - 11905: 0x8EEE,
	24239 - 11905: 0x8EEF,
	24240 - 11905: 0x8EF0,
	24241 - 11905: 0x8EF1,
	24242 - 11905: 0x8EF2,
	24243 - 11905: 0xE2D8,
	24244 - 11905: 0x8EF3,
	24245 - 11905: 0xE2D6,
	24246 - 11905: 0xCAFC,
	24247 - 11905: 0xBFB5,
	24248 - 11905: 0xD3B9,
	24249 - 11905: 0xE2D5,
	24250 - 11905: 0x8EF4,
	24251 - 11905: 0x8EF5,
	24252 - 11905: 0x8EF6,
	24253 - 11905: 0x8EF7,
	24254 - 11905: 0xE2D7,
	24255 - 11905: 0x8EF8,
	24256 - 11905: 0x8EF9,
	24257 - 11905: 0x8EFA,
	24258 - 11905: 0x8EFB,
	24259 - 11905: 0x8EFC,
	24260 - 11905: 0x8EFD,
	24261 - 11905: 0x8EFE,
	24262 - 11905: 0x8F40,
	24263 - 11905: 0x8F41,
	24264 - 11905: 0x8F42,
	24265 - 11905: 0xC1AE,
	24266 - 11905: 0xC0C8,
	24267 - 11905: 0x8F43,
	24268 - 11905: 0x8F44,
	24269 - 11905: 0x8F45,
	24270 - 11905: 0x8F46,
	24271 - 11905: 0x8F47,
	24272 - 11905: 0x8F48,
	24273 - 11905: 0xE2DB,
	24274 - 11905: 0xE2DA,
	24275 - 11905: 0xC0AA,
	24276 - 11905: 0x8F49,
	24277 - 11905: 0x8F4A,
	24278 - 11905: 0xC1CE,
	24279 - 11905: 0x8F4B,
	24280 - 11905: 0x8F4C,
	24281 - 11905: 0x8F4D,
	24282 - 11905: 0x8F4E,
	24283 - 11905: 0xE2DC,
	24284 - 11905: 0x8F4F,
	24285 - 11905: 0x8F50,
	24286 - 11905: 0x8F51,
	24287 - 11905: 0x8F52,
	24288 - 11905: 0x8F53,
	24289 - 11905: 0x8F54,
	24290 - 11905: 0x8F55,
	24291 - 11905: 0x8F56,
	24292 - 11905: 0x8F57,
	24293 - 11905: 0x8F58,
	24294 - 11905: 0x8F59,
	24295 - 11905: 0x8F5A,
	24296 - 11905: 0xE2DD,
	24297 - 11905: 0x8F5B,
	24298 - 11905: 0xE2DE,
	24299 - 11905: 0x8F5C,
	24300 - 11905: 0x8F5D,
	24301 - 11905: 0x8F5E,
	24302 - 11905: 0x8F5F,
	24303 - 11905: 0x8F60,
	24304 - 11905: 0x8F61,
	24305 - 11905: 0x8F62,
	24306 - 11905: 0x8F63,
	24307 - 11905: 0x8F64,
	24308 - 11905: 0xDBC8,
	24309 - 11905: 0x8F65,
	24310 - 11905: 0xD1D3,
	24311 - 11905: 0xCDA2,
	24312 - 11905: 0x8F66,
	24313 - 11905: 0x8F67,
	24314 - 11905: 0xBDA8,
	24315 - 11905: 0x8F68,
	24316 - 11905: 0x8F69,
	24317 - 11905: 0x8F6A,
	24318 - 11905: 0xDEC3,
	24319 - 11905: 0xD8A5,
	24320 - 11905: 0xBFAA,
	24321 - 11905: 0xDBCD,
	24322 - 11905: 0xD2EC,
	24323 - 11905: 0xC6FA,
	24324 - 11905: 0xC5AA,
	24325 - 11905: 0x8F6B,
	24326 - 11905: 0x8F6C,
	24327 - 11905: 0x8F6D,
	24328 - 11905: 0xDEC4,
	24329 - 11905: 0x8F6E,
	24330 - 11905: 0xB1D7,
	24331 - 11905: 0xDFAE,
	24332 - 11905: 0x8F6F,
	24333 - 11905: 0x8F70,
	24334 - 11905: 0x8F71,
	24335 - 11905: 0xCABD,
	24336 - 11905: 0x8F72,
	24337 - 11905: 0xDFB1,
	24338 - 11905: 0x8F73,
	24339 - 11905: 0xB9AD,
	24340 - 11905: 0x8F74,
	24341 - 11905: 0xD2FD,
	24342 - 11905: 0x8F75,
	24343 - 11905: 0xB8A5,
	24344 - 11905: 0xBAEB,
	24345 - 11905: 0x8F76,
	24346 - 11905: 0x8F77,
	24347 - 11905: 0xB3DA,
	24348 - 11905: 0x8F78,
	24349 - 11905: 0x8F79,
	24350 - 11905: 0x8F7A,
	24351 - 11905: 0xB5DC,
	24352 - 11905: 0xD5C5,
	24353 - 11905: 0x8F7B,
	24354 - 11905: 0x8F7C,
	24355 - 11905: 0x8F7D,
	24356 - 11905: 0x8F7E,
	24357 - 11905: 0xC3D6,
	24358 - 11905: 0xCFD2,
	24359 - 11905: 0xBBA1,
	24360 - 11905: 0x8F80,
	24361 - 11905: 0xE5F3,
	24362 - 11905: 0xE5F2,
	24363 - 11905: 0x8F81,
	24364 - 11905: 0x8F82,
	24365 - 11905: 0xE5F4,
	24366 - 11905: 0x8F83,
	24367 - 11905: 0xCDE4,
	24368 - 11905: 0x8F84,
	24369 - 11905: 0xC8F5,
	24370 - 11905: 0x8F85,
	24371 - 11905: 0x8F86,
	24372 - 11905: 0x8F87,
	24373 - 11905: 0x8F88,
	24374 - 11905: 0x8F89,
	24375 - 11905: 0x8F8A,
	24376 - 11905: 0x8F8B,
	24377 - 11905: 0xB5AF,
	24378 - 11905: 0xC7BF,
	24379 - 11905: 0x8F8C,
	24380 - 11905: 0xE5F6,
	24381 - 11905: 0x8F8D,
	24382 - 11905: 0x8F8E,
	24383 - 11905: 0x8F8F,
	24384 - 11905: 0xECB0,
	24385 - 11905: 0x8F90,
	24386 - 11905: 0x8F91,
	24387 - 11905: 0x8F92,
	24388 - 11905: 0x8F93,
	24389 - 11905: 0x8F94,
	24390 - 11905: 0x8F95,
	24391 - 11905: 0x8F96,
	24392 - 11905: 0x8F97,
	24393 - 11905: 0x8F98,
	24394 - 11905: 0x8F99,
	24395 - 11905: 0x8F9A,
	24396 - 11905: 0x8F9B,
	24397 - 11905: 0x8F9C,
	24398 - 11905: 0x8F9D,
	24399 - 11905: 0x8F9E,
	24400 - 11905: 0xE5E6,
	24401 - 11905: 0x8F9F,
	24402 - 11905: 0xB9E9,
	24403 - 11905: 0xB5B1,
	24404 - 11905: 0x8FA0,
	24405 - 11905: 0xC2BC,
	24406 - 11905: 0xE5E8,
	24407 - 11905: 0xE5E7,
	24408 - 11905: 0xE5E9,
	24409 - 11905: 0x8FA1,
	24410 - 11905: 0x8FA2,
	24411 - 11905: 0x8FA3,
	24412 - 11905: 0x8FA4,
	24413 - 11905: 0xD2CD,
	24414 - 11905: 0x8FA5,
	24415 - 11905: 0x8FA6,
	24416 - 11905: 0x8FA7,
	24417 - 11905: 0xE1EA,
	24418 - 11905: 0xD0CE,
	24419 - 11905: 0x8FA8,
	24420 - 11905: 0xCDAE,
	24421 - 11905: 0x8FA9,
	24422 - 11905: 0xD1E5,
	24423 - 11905: 0x8FAA,
	24424 - 11905: 0x8FAB,
	24425 - 11905: 0xB2CA,
	24426 - 11905: 0xB1EB,
	24427 - 11905: 0x8FAC,
	24428 - 11905: 0xB1F2,
	24429 - 11905: 0xC5ED,
	24430 - 11905: 0x8FAD,
	24431 - 11905: 0x8FAE,
	24432 - 11905: 0xD5C3,
	24433 - 11905: 0xD3B0,
	24434 - 11905: 0x8FAF,
	24435 - 11905: 0xE1DC,
	24436 - 11905: 0x8FB0,
	24437 - 11905: 0x8FB1,
	24438 - 11905: 0x8FB2,
	24439 - 11905: 0xE1DD,
	24440 - 11905: 0x8FB3,
	24441 - 11905: 0xD2DB,
	24442 - 11905: 0x8FB4,
	24443 - 11905: 0xB3B9,
	24444 - 11905: 0xB1CB,
	24445 - 11905: 0x8FB5,
	24446 - 11905: 0x8FB6,
	24447 - 11905: 0x8FB7,
	24448 - 11905: 0xCDF9,
	24449 - 11905: 0xD5F7,
	24450 - 11905: 0xE1DE,
	24451 - 11905: 0x8FB8,
	24452 - 11905: 0xBEB6,
	24453 - 11905: 0xB4FD,
	24454 - 11905: 0x8FB9,
	24455 - 11905: 0xE1DF,
	24456 - 11905: 0xBADC,
	24457 - 11905: 0xE1E0,
	24458 - 11905: 0xBBB2,
	24459 - 11905: 0xC2C9,
	24460 - 11905: 0xE1E1,
	24461 - 11905: 0x8FBA,
	24462 - 11905: 0x8FBB,
	24463 - 11905: 0x8FBC,
	24464 - 11905: 0xD0EC,
	24465 - 11905: 0x8FBD,
	24466 - 11905: 0xCDBD,
	24467 - 11905: 0x8FBE,
	24468 - 11905: 0x8FBF,
	24469 - 11905: 0xE1E2,
	24470 - 11905: 0x8FC0,
	24471 - 11905: 0xB5C3,
	24472 - 11905: 0xC5C7,
	24473 - 11905: 0xE1E3,
	24474 - 11905: 0x8FC1,
	24475 - 11905: 0x8FC2,
	24476 - 11905: 0xE1E4,
	24477 - 11905: 0x8FC3,
	24478 - 11905: 0x8FC4,
	24479 - 11905: 0x8FC5,
	24480 - 11905: 0x8FC6,
	24481 - 11905: 0xD3F9,
	24482 - 11905: 0x8FC7,
	24483 - 11905: 0x8FC8,
	24484 - 11905: 0x8FC9,
	24485 - 11905: 0x8FCA,
	24486 - 11905: 0x8FCB,
	24487 - 11905: 0x8FCC,
	24488 - 11905: 0xE1E5,
	24489 - 11905: 0x8FCD,
	24490 - 11905: 0xD1AD,
	24491 - 11905: 0x8FCE,
	24492 - 11905: 0x8FCF,
	24493 - 11905: 0xE1E6,
	24494 - 11905: 0xCEA2,
	24495 - 11905: 0x8FD0,
	24496 - 11905: 0x8FD1,
	24497 - 11905: 0x8FD2,
	24498 - 11905: 0x8FD3,
	24499 - 11905: 0x8FD4,
	24500 - 11905: 0x8FD5,
	24501 - 11905: 0xE1E7,
	24502 - 11905: 0x8FD6,
	24503 - 11905: 0xB5C2,
	24504 - 11905: 0x8FD7,
	24505 - 11905: 0x8FD8,
	24506 - 11905: 0x8FD9,
	24507 - 11905: 0x8FDA,
	24508 - 11905: 0xE1E8,
	24509 - 11905: 0xBBD5,
	24510 - 11905: 0x8FDB,
	24511 - 11905: 0x8FDC,
	24512 - 11905: 0x8FDD,
	24513 - 11905: 0x8FDE,
	24514 - 11905: 0x8FDF,
	24515 - 11905: 0xD0C4,
	24516 - 11905: 0xE2E0,
	24517 - 11905: 0xB1D8,
	24518 - 11905: 0xD2E4,
	24519 - 11905: 0x8FE0,
	24520 - 11905: 0x8FE1,
	24521 - 11905: 0xE2E1,
	24522 - 11905: 0x8FE2,
	24523 - 11905: 0x8FE3,
	24524 - 11905: 0xBCC9,
	24525 - 11905: 0xC8CC,
	24526 - 11905: 0x8FE4,
	24527 - 11905: 0xE2E3,
	24528 - 11905: 0xECFE,
	24529 - 11905: 0xECFD,
	24530 - 11905: 0xDFAF,
	24531 - 11905: 0x8FE5,
	24532 - 11905: 0x8FE6,
	24533 - 11905: 0x8FE7,
	24534 - 11905: 0xE2E2,
	24535 - 11905: 0xD6BE,
	24536 - 11905: 0xCDFC,
	24537 - 11905: 0xC3A6,
	24538 - 11905: 0x8FE8,
	24539 - 11905: 0x8FE9,
	24540 - 11905: 0x8FEA,
	24541 - 11905: 0xE3C3,
	24542 - 11905: 0x8FEB,
	24543 - 11905: 0x8FEC,
	24544 - 11905: 0xD6D2,
	24545 - 11905: 0xE2E7,
	24546 - 11905: 0x8FED,
	24547 - 11905: 0x8FEE,
	24548 - 11905: 0xE2E8,
	24549 - 11905: 0x8FEF,
	24550 - 11905: 0x8FF0,
	24551 - 11905: 0xD3C7,
	24552 - 11905: 0x8FF1,
	24553 - 11905: 0x8FF2,
	24554 - 11905: 0xE2EC,
	24555 - 11905: 0xBFEC,
	24556 - 11905: 0x8FF3,
	24557 - 11905: 0xE2ED,
	24558 - 11905: 0xE2E5,
	24559 - 11905: 0x8FF4,
	24560 - 11905: 0x8FF5,
	24561 - 11905: 0xB3C0,
	24562 - 11905: 0x8FF6,
	24563 - 11905: 0x8FF7,
	24564 - 11905: 0x8FF8,
	24565 - 11905: 0xC4EE,
	24566 - 11905: 0x8FF9,
	24567 - 11905: 0x8FFA,
	24568 - 11905: 0xE2EE,
	24569 - 11905: 0x8FFB,
	24570 - 11905: 0x8FFC,
	24571 - 11905: 0xD0C3,
	24572 - 11905: 0x8FFD,
	24573 - 11905: 0xBAF6,
	24574 - 11905: 0xE2E9,
	24575 - 11905: 0xB7DE,
	24576 - 11905: 0xBBB3,
	24577 - 11905: 0xCCAC,
	24578 - 11905: 0xCBCB,
	24579 - 11905: 0xE2E4,
	24580 - 11905: 0xE2E6,
	24581 - 11905: 0xE2EA,
	24582 - 11905: 0xE2EB,
	24583 - 11905: 0x8FFE,
	24584 - 11905: 0x9040,
	24585 - 11905: 0x9041,
	24586 - 11905: 0xE2F7,
	24587 - 11905: 0x9042,
	24588 - 11905: 0x9043,
	24589 - 11905: 0xE2F4,
	24590 - 11905: 0xD4F5,
	24591 - 11905: 0xE2F3,
	24592 - 11905: 0x9044,
	24593 - 11905: 0x9045,
	24594 - 11905: 0xC5AD,
	24595 - 11905: 0x9046,
	24596 - 11905: 0xD5FA,
	24597 - 11905: 0xC5C2,
	24598 - 11905: 0xB2C0,
	24599 - 11905: 0x9047,
	24600 - 11905: 0x9048,
	24601 - 11905: 0xE2EF,
	24602 - 11905: 0x9049,
	24603 - 11905: 0xE2F2,
	24604 - 11905: 0xC1AF,
	24605 - 11905: 0xCBBC,
	24606 - 11905: 0x904A,
	24607 - 11905: 0x904B,
	24608 - 11905: 0xB5A1,
	24609 - 11905: 0xE2F9,
	24610 - 11905: 0x904C,
	24611 - 11905: 0x904D,
	24612 - 11905: 0x904E,
	24613 - 11905: 0xBCB1,
	24614 - 11905: 0xE2F1,
	24615 - 11905: 0xD0D4,
	24616 - 11905: 0xD4B9,
	24617 - 11905: 0xE2F5,
	24618 - 11905: 0xB9D6,
	24619 - 11905: 0xE2F6,
	24620 - 11905: 0x904F,
	24621 - 11905: 0x9050,
	24622 - 11905: 0x9051,
	24623 - 11905: 0xC7D3,
	24624 - 11905: 0x9052,
	24625 - 11905: 0x9053,
	24626 - 11905: 0x9054,
	24627 - 11905: 0x9055,
	24628 - 11905: 0x9056,
	24629 - 11905: 0xE2F0,
	24630 - 11905: 0x9057,
	24631 - 11905: 0x9058,
	24632 - 11905: 0x9059,
	24633 - 11905: 0x905A,
	24634 - 11905: 0x905B,
	24635 - 11905: 0xD7DC,
	24636 - 11905: 0xEDA1,
	24637 - 11905: 0x905C,
	24638 - 11905: 0x905D,
	24639 - 11905: 0xE2F8,
	24640 - 11905: 0x905E,
	24641 - 11905: 0xEDA5,
	24642 - 11905: 0xE2FE,
	24643 - 11905: 0xCAD1,
	24644 - 11905: 0x905F,
	24645 - 11905: 0x9060,
	24646 - 11905: 0x9061,
	24647 - 11905: 0x9062,
	24648 - 11905: 0x9063,
	24649 - 11905: 0x9064,
	24650 - 11905: 0x9065,
	24651 - 11905: 0xC1B5,
	24652 - 11905: 0x9066,
	24653 - 11905: 0xBBD0,
	24654 - 11905: 0x9067,
	24655 - 11905: 0x9068,
	24656 - 11905: 0xBFD6,
	24657 - 11905: 0x9069,
	24658 - 11905: 0xBAE3,
	24659 - 11905: 0x906A,
	24660 - 11905: 0x906B,
	24661 - 11905: 0xCBA1,
	24662 - 11905: 0x906C,
	24663 - 11905: 0x906D,
	24664 - 11905: 0x906E,
	24665 - 11905: 0xEDA6,
	24666 - 11905: 0xEDA3,
	24667 - 11905: 0x906F,
	24668 - 11905: 0x9070,
	24669 - 11905: 0xEDA2,
	24670 - 11905: 0x9071,
	24671 - 11905: 0x9072,
	24672 - 11905: 0x9073,
	24673 - 11905: 0x9074,
	24674 - 11905: 0xBBD6,
	24675 - 11905: 0xEDA7,
	24676 - 11905: 0xD0F4,
	24677 - 11905: 0x9075,
	24678 - 11905: 0x9076,
	24679 - 11905: 0xEDA4,
	24680 - 11905: 0xBADE,
	24681 - 11905: 0xB6F7,
	24682 - 11905: 0xE3A1,
	24683 - 11905: 0xB6B2,
	24684 - 11905: 0xCCF1,
	24685 - 11905: 0xB9A7,
	24686 - 11905: 0x9077,
	24687 - 11905: 0xCFA2,
	24688 - 11905: 0xC7A1,
	24689 - 11905: 0x9078,
	24690 - 11905: 0x9079,
	24691 - 11905: 0xBFD2,
	24692 - 11905: 0x907A,
	24693 - 11905: 0x907B,
	24694 - 11905: 0xB6F1,
	24695 - 11905: 0x907C,
	24696 - 11905: 0xE2FA,
	24697 - 11905: 0xE2FB,
	24698 - 11905: 0xE2FD,
	24699 - 11905: 0xE2FC,
	24700 - 11905: 0xC4D5,
	24701 - 11905: 0xE3A2,
	24702 - 11905: 0x907D,
	24703 - 11905: 0xD3C1,
	24704 - 11905: 0x907E,
	24705 - 11905: 0x9080,
	24706 - 11905: 0x9081,
	24707 - 11905: 0xE3A7,
	24708 - 11905: 0xC7C4,
	24709 - 11905: 0x9082,
	24710 - 11905: 0x9083,
	24711 - 11905: 0x9084,
	24712 - 11905: 0x9085,
	24713 - 11905: 0xCFA4,
	24714 - 11905: 0x9086,
	24715 - 11905: 0x9087,
	24716 - 11905: 0xE3A9,
	24717 - 11905: 0xBAB7,
	24718 - 11905: 0x9088,
	24719 - 11905: 0x9089,
	24720 - 11905: 0x908A,
	24721 - 11905: 0x908B,
	24722 - 11905: 0xE3A8,
	24723 - 11905: 0x908C,
	24724 - 11905: 0xBBDA,
	24725 - 11905: 0x908D,
	24726 - 11905: 0xE3A3,
	24727 - 11905: 0x908E,
	24728 - 11905: 0x908F,
	24729 - 11905: 0x9090,
	24730 - 11905: 0xE3A4,
	24731 - 11905: 0xE3AA,
	24732 - 11905: 0x9091,
	24733 - 11905: 0xE3A6,
	24734 - 11905: 0x9092,
	24735 - 11905: 0xCEF2,
	24736 - 11905: 0xD3C6,
	24737 - 11905: 0x9093,
	24738 - 11905: 0x9094,
	24739 - 11905: 0xBBBC,
	24740 - 11905: 0x9095,
	24741 - 11905: 0x9096,
	24742 - 11905: 0xD4C3,
	24743 - 11905: 0x9097,
	24744 - 11905: 0xC4FA,
	24745 - 11905: 0x9098,
	24746 - 11905: 0x9099,
	24747 - 11905: 0xEDA8,
	24748 - 11905: 0xD0FC,
	24749 - 11905: 0xE3A5,
	24750 - 11905: 0x909A,
	24751 - 11905: 0xC3F5,
	24752 - 11905: 0x909B,
	24753 - 11905: 0xE3AD,
	24754 - 11905: 0xB1AF,
	24755 - 11905: 0x909C,
	24756 - 11905: 0xE3B2,
	24757 - 11905: 0x909D,
	24758 - 11905: 0x909E,
	24759 - 11905: 0x909F,
	24760 - 11905: 0xBCC2,
	24761 - 11905: 0x90A0,
	24762 - 11905: 0x90A1,
	24763 - 11905: 0xE3AC,
	24764 - 11905: 0xB5BF,
	24765 - 11905: 0x90A2,
	24766 - 11905: 0x90A3,
	24767 - 11905: 0x90A4,
	24768 - 11905: 0x90A5,
	24769 - 11905: 0x90A6,
	24770 - 11905: 0x90A7,
	24771 - 11905: 0x90A8,
	24772 - 11905: 0x90A9,
	24773 - 11905: 0xC7E9,
	24774 - 11905: 0xE3B0,
	24775 - 11905: 0x90AA,
	24776 - 11905: 0x90AB,
	24777 - 11905: 0x90AC,
	24778 - 11905: 0xBEAA,
	24779 - 11905: 0xCDEF,
	24780 - 11905: 0x90AD,
	24781 - 11905: 0x90AE,
	24782 - 11905: 0x90AF,
	24783 - 11905: 0x90B0,
	24784 - 11905: 0x90B1,
	24785 - 11905: 0xBBF3,
	24786 - 11905: 0x90B2,
	24787 - 11905: 0x90B3,
	24788 - 11905: 0x90B4,
	24789 - 11905: 0xCCE8,
	24790 - 11905: 0x90B5,
	24791 - 11905: 0x90B6,
	24792 - 11905: 0xE3AF,
	24793 - 11905: 0x90B7,
	24794 - 11905: 0xE3B1,
	24795 - 11905: 0x90B8,
	24796 - 11905: 0xCFA7,
	24797 - 11905: 0xE3AE,
	24798 - 11905: 0x90B9,
	24799 - 11905: 0xCEA9,
	24800 - 11905: 0xBBDD,
	24801 - 11905: 0x90BA,
	24802 - 11905: 0x90BB,
	24803 - 11905: 0x90BC,
	24804 - 11905: 0x90BD,
	24805 - 11905: 0x90BE,
	24806 - 11905: 0xB5EB,
	24807 - 11905: 0xBEE5,
	24808 - 11905: 0xB2D2,
	24809 - 11905: 0xB3CD,
	24810 - 11905: 0x90BF,
	24811 - 11905: 0xB1B9,
	24812 - 11905: 0xE3AB,
	24813 - 11905: 0xB2D1,
	24814 - 11905: 0xB5AC,
	24815 - 11905: 0xB9DF,
	24816 - 11905: 0xB6E8,
	24817 - 11905: 0x90C0,
	24818 - 11905: 0x90C1,
	24819 - 11905: 0xCFEB,
	24820 - 11905: 0xE3B7,
	24821 - 11905: 0x90C2,
	24822 - 11905: 0xBBCC,
	24823 - 11905: 0x90C3,
	24824 - 11905: 0x90C4,
	24825 - 11905: 0xC8C7,
	24826 - 11905: 0xD0CA,
	24827 - 11905: 0x90C5,
	24828 - 11905: 0x90C6,
	24829 - 11905: 0x90C7,
	24830 - 11905: 0x90C8,
	24831 - 11905: 0x90C9,
	24832 - 11905: 0xE3B8,
	24833 - 11905: 0xB3EE,
	24834 - 11905: 0x90CA,
	24835 - 11905: 0x90CB,
	24836 - 11905: 0x90CC,
	24837 - 11905: 0x90CD,
	24838 - 11905: 0xEDA9,
	24839 - 11905: 0x90CE,
	24840 - 11905: 0xD3FA,
	24841 - 11905: 0xD3E4,
	24842 - 11905: 0x90CF,
	24843 - 11905: 0x90D0,
	24844 - 11905: 0x90D1,
	24845 - 11905: 0xEDAA,
	24846 - 11905: 0xE3B9,
	24847 - 11905: 0xD2E2,
	24848 - 11905: 0x90D2,
	24849 - 11905: 0x90D3,
	24850 - 11905: 0x90D4,
	24851 - 11905: 0x90D5,
	24852 - 11905: 0x90D6,
	24853 - 11905: 0xE3B5,
	24854 - 11905: 0x90D7,
	24855 - 11905: 0x90D8,
	24856 - 11905: 0x90D9,
	24857 - 11905: 0x90DA,
	24858 - 11905: 0xD3DE,
	24859 - 11905: 0x90DB,
	24860 - 11905: 0x90DC,
	24861 - 11905: 0x90DD,
	24862 - 11905: 0x90DE,
	24863 - 11905: 0xB8D0,
	24864 - 11905: 0xE3B3,
	24865 - 11905: 0x90DF,
	24866 - 11905: 0x90E0,
	24867 - 11905: 0xE3B6,
	24868 - 11905: 0xB7DF,
	24869 - 11905: 0x90E1,
	24870 - 11905: 0xE3B4,
	24871 - 11905: 0xC0A2,
	24872 - 11905: 0x90E2,
	24873 - 11905: 0x90E3,
	24874 - 11905: 0x90E4,
	24875 - 11905: 0xE3BA,
	24876 - 11905: 0x90E5,
	24877 - 11905: 0x90E6,
	24878 - 11905: 0x90E7,
	24879 - 11905: 0x90E8,
	24880 - 11905: 0x90E9,
	24881 - 11905: 0x90EA,
	24882 - 11905: 0x90EB,
	24883 - 11905: 0x90EC,
	24884 - 11905: 0x90ED,
	24885 - 11905: 0x90EE,
	24886 - 11905: 0x90EF,
	24887 - 11905: 0x90F0,
	24888 - 11905: 0x90F1,
	24889 - 11905: 0x90F2,
	24890 - 11905: 0x90F3,
	24891 - 11905: 0x90F4,
	24892 - 11905: 0x90F5,
	24893 - 11905: 0x90F6,
	24894 - 11905: 0x90F7,
	24895 - 11905: 0xD4B8,
	24896 - 11905: 0x90F8,
	24897 - 11905: 0x90F9,
	24898 - 11905: 0x90FA,
	24899 - 11905: 0x90FB,
	24900 - 11905: 0x90FC,
	24901 - 11905: 0x90FD,
	24902 - 11905: 0x90FE,
	24903 - 11905: 0x9140,
	24904 - 11905: 0xB4C8,
	24905 - 11905: 0x9141,
	24906 - 11905: 0xE3BB,
	24907 - 11905: 0x9142,
	24908 - 11905: 0xBBC5,
	24909 - 11905: 0x9143,
	24910 - 11905: 0xC9F7,
	24911 - 11905: 0x9144,
	24912 - 11905: 0x9145,
	24913 - 11905: 0xC9E5,
	24914 - 11905: 0x9146,
	24915 - 11905: 0x9147,
	24916 - 11905: 0x9148,
	24917 - 11905: 0xC4BD,
	24918 - 11905: 0x9149,
	24919 - 11905: 0x914A,
	24920 - 11905: 0x914B,
	24921 - 11905: 0x914C,
	24922 - 11905: 0x914D,
	24923 - 11905: 0x914E,
	24924 - 11905: 0x914F,
	24925 - 11905: 0xEDAB,
	24926 - 11905: 0x9150,
	24927 - 11905: 0x9151,
	24928 - 11905: 0x9152,
	24929 - 11905: 0x9153,
	24930 - 11905: 0xC2FD,
	24931 - 11905: 0x9154,
	24932 - 11905: 0x9155,
	24933 - 11905: 0x9156,
	24934 - 11905: 0x9157,
	24935 - 11905: 0xBBDB,
	24936 - 11905: 0xBFAE,
	24937 - 11905: 0x9158,
	24938 - 11905: 0x9159,
	24939 - 11905: 0x915A,
	24940 - 11905: 0x915B,
	24941 - 11905: 0x915C,
	24942 - 11905: 0x915D,
	24943 - 11905: 0x915E,
	24944 - 11905: 0xCEBF,
	24945 - 11905: 0x915F,
	24946 - 11905: 0x9160,
	24947 - 11905: 0x9161,
	24948 - 11905: 0x9162,
	24949 - 11905: 0xE3BC,
	24950 - 11905: 0x9163,
	24951 - 11905: 0xBFB6,
	24952 - 11905: 0x9164,
	24953 - 11905: 0x9165,
	24954 - 11905: 0x9166,
	24955 - 11905: 0x9167,
	24956 - 11905: 0x9168,
	24957 - 11905: 0x9169,
	24958 - 11905: 0x916A,
	24959 - 11905: 0x916B,
	24960 - 11905: 0x916C,
	24961 - 11905: 0x916D,
	24962 - 11905: 0x916E,
	24963 - 11905: 0x916F,
	24964 - 11905: 0x9170,
	24965 - 11905: 0x9171,
	24966 - 11905: 0x9172,
	24967 - 11905: 0x9173,
	24968 - 11905: 0x9174,
	24969 - 11905: 0x9175,
	24970 - 11905: 0x9176,
	24971 - 11905: 0xB1EF,
	24972 - 11905: 0x9177,
	24973 - 11905: 0x9178,
	24974 - 11905: 0xD4F7,
	24975 - 11905: 0x9179,
	24976 - 11905: 0x917A,
	24977 - 11905: 0x917B,
	24978 - 11905: 0x917C,
	24979 - 11905: 0x917D,
	24980 - 11905: 0xE3BE,
	24981 - 11905: 0x917E,
	24982 - 11905: 0x9180,
	24983 - 11905: 0x9181,
	24984 - 11905: 0x9182,
	24985 - 11905: 0x9183,
	24986 - 11905: 0x9184,
	24987 - 11905: 0x9185,
	24988 - 11905: 0x9186,
	24989 - 11905: 0xEDAD,
	24990 - 11905: 0x9187,
	24991 - 11905: 0x9188,
	24992 - 11905: 0x9189,
	24993 - 11905: 0x918A,
	24994 - 11905: 0x918B,
	24995 - 11905: 0x918C,
	24996 - 11905: 0x918D,
	24997 - 11905: 0x918E,
	24998 - 11905: 0x918F,
	24999 - 11905: 0xE3BF,
	25000 - 11905: 0xBAA9,
	25001 - 11905: 0xEDAC,
	25002 - 11905: 0x9190,
	25003 - 11905: 0x9191,
	25004 - 11905: 0xE3BD,
	25005 - 11905: 0x9192,
	25006 - 11905: 0x9193,
	25007 - 11905: 0x9194,
	25008 - 11905: 0x9195,
	25009 - 11905: 0x9196,
	25010 - 11905: 0x9197,
	25011 - 11905: 0x9198,
	25012 - 11905: 0x9199,
	25013 - 11905: 0x919A,
	25014 - 11905: 0x919B,
	25015 - 11905: 0xE3C0,
	25016 - 11905: 0x919C,
	25017 - 11905: 0x919D,
	25018 - 11905: 0x919E,
	25019 - 11905: 0x919F,
	25020 - 11905: 0x91A0,
	25021 - 11905: 0x91A1,
	25022 - 11905: 0xBAB6,
	25023 - 11905: 0x91A2,
	25024 - 11905: 0x91A3,
	25025 - 11905: 0x91A4,
	25026 - 11905: 0xB6AE,
	25027 - 11905: 0x91A5,
	25028 - 11905: 0x91A6,
	25029 - 11905: 0x91A7,
	25030 - 11905: 0x91A8,
	25031 - 11905: 0x91A9,
	25032 - 11905: 0xD0B8,
	25033 - 11905: 0x91AA,
	25034 - 11905: 0xB0C3,
	25035 - 11905: 0xEDAE,
	25036 - 11905: 0x91AB,
	25037 - 11905: 0x91AC,
	25038 - 11905: 0x91AD,
	25039 - 11905: 0x91AE,
	25040 - 11905: 0x91AF,
	25041 - 11905: 0xEDAF,
	25042 - 11905: 0xC0C1,
	25043 - 11905: 0x91B0,
	25044 - 11905: 0xE3C1,
	25045 - 11905: 0x91B1,
	25046 - 11905: 0x91B2,
	25047 - 11905: 0x91B3,
	25048 - 11905: 0x91B4,
	25049 - 11905: 0x91B5,
	25050 - 11905: 0x91B6,
	25051 - 11905: 0x91B7,
	25052 - 11905: 0x91B8,
	25053 - 11905: 0x91B9,
	25054 - 11905: 0x91BA,
	25055 - 11905: 0x91BB,
	25056 - 11905: 0x91BC,
	25057 - 11905: 0x91BD,
	25058 - 11905: 0x91BE,
	25059 - 11905: 0x91BF,
	25060 - 11905: 0x91C0,
	25061 - 11905: 0x91C1,
	25062 - 11905: 0xC5B3,
	25063 - 11905: 0x91C2,
	25064 - 11905: 0x91C3,
	25065 - 11905: 0x91C4,
	25066 - 11905: 0x91C5,
	25067 - 11905: 0x91C6,
	25068 - 11905: 0x91C7,
	25069 - 11905: 0x91C8,
	25070 - 11905: 0x91C9,
	25071 - 11905: 0x91CA,
	25072 - 11905: 0x91CB,
	25073 - 11905: 0x91CC,
	25074 - 11905: 0x91CD,
	25075 - 11905: 0x91CE,
	25076 - 11905: 0x91CF,
	25077 - 11905: 0xE3C2,
	25078 - 11905: 0x91D0,
	25079 - 11905: 0x91D1,
	25080 - 11905: 0x91D2,
	25081 - 11905: 0x91D3,
	25082 - 11905: 0x91D4,
	25083 - 11905: 0x91D5,
	25084 - 11905: 0x91D6,
	25085 - 11905: 0x91D7,
	25086 - 11905: 0x91D8,
	25087 - 11905: 0xDCB2,
	25088 - 11905: 0x91D9,
	25089 - 11905: 0x91DA,
	25090 - 11905: 0x91DB,
	25091 - 11905: 0x91DC,
	25092 - 11905: 0x91DD,
	25093 - 11905: 0x91DE,
	25094 - 11905: 0xEDB0,
	25095 - 11905: 0x91DF,
	25096 - 11905: 0xB8EA,
	25097 - 11905: 0x91E0,
	25098 - 11905: 0xCEEC,
	25099 - 11905: 0xEAA7,
	25100 - 11905: 0xD0E7,
	25101 - 11905: 0xCAF9,
	25102 - 11905: 0xC8D6,
	25103 - 11905: 0xCFB7,
	25104 - 11905: 0xB3C9,
	25105 - 11905: 0xCED2,
	25106 - 11905: 0xBDE4,
	25107 - 11905: 0x91E1,
	25108 - 11905: 0x91E2,
	25109 - 11905: 0xE3DE,
	25110 - 11905: 0xBBF2,
	25111 - 11905: 0xEAA8,
	25112 - 11905: 0xD5BD,
	25113 - 11905: 0x91E3,
	25114 - 11905: 0xC6DD,
	25115 - 11905: 0xEAA9,
	25116 - 11905: 0x91E4,
	25117 - 11905: 0x91E5,
	25118 - 11905: 0x91E6,
	25119 - 11905: 0xEAAA,
	25120 - 11905: 0x91E7,
	25121 - 11905: 0xEAAC,
	25122 - 11905: 0xEAAB,
	25123 - 11905: 0x91E8,
	25124 - 11905: 0xEAAE,
	25125 - 11905: 0xEAAD,
	25126 - 11905: 0x91E9,
	25127 - 11905: 0x91EA,
	25128 - 11905: 0x91EB,
	25129 - 11905: 0x91EC,
	25130 - 11905: 0xBDD8,
	25131 - 11905: 0x91ED,
	25132 - 11905: 0xEAAF,
	25133 - 11905: 0x91EE,
	25134 - 11905: 0xC2BE,
	25135 - 11905: 0x91EF,
	25136 - 11905: 0x91F0,
	25137 - 11905: 0x91F1,
	25138 - 11905: 0x91F2,
	25139 - 11905: 0xB4C1,
	25140 - 11905: 0xB4F7,
	25141 - 11905: 0x91F3,
	25142 - 11905: 0x91F4,
	25143 - 11905: 0xBBA7,
	25144 - 11905: 0x91F5,
	25145 - 11905: 0x91F6,
	25146 - 11905: 0x91F7,
	25147 - 11905: 0x91F8,
	25148 - 11905: 0x91F9,
	25149 - 11905: 0xECE6,
	25150 - 11905: 0xECE5,
	25151 - 11905: 0xB7BF,
	25152 - 11905: 0xCBF9,
	25153 - 11905: 0xB1E2,
	25154 - 11905: 0x91FA,
	25155 - 11905: 0xECE7,
	25156 - 11905: 0x91FB,
	25157 - 11905: 0x91FC,
	25158 - 11905: 0x91FD,
	25159 - 11905: 0xC9C8,
	25160 - 11905: 0xECE8,
	25161 - 11905: 0xECE9,
	25162 - 11905: 0x91FE,
	25163 - 11905: 0xCAD6,
	25164 - 11905: 0xDED0,
	25165 - 11905: 0xB2C5,
	25166 - 11905: 0xD4FA,
	25167 - 11905: 0x9240,
	25168 - 11905: 0x9241,
	25169 - 11905: 0xC6CB,
	25170 - 11905: 0xB0C7,
	25171 - 11905: 0xB4F2,
	25172 - 11905: 0xC8D3,
	25173 - 11905: 0x9242,
	25174 - 11905: 0x9243,
	25175 - 11905: 0x9244,
	25176 - 11905: 0xCDD0,
	25177 - 11905: 0x9245,
	25178 - 11905: 0x9246,
	25179 - 11905: 0xBFB8,
	25180 - 11905: 0x9247,
	25181 - 11905: 0x9248,
	25182 - 11905: 0x9249,
	25183 - 11905: 0x924A,
	25184 - 11905: 0x924B,
	25185 - 11905: 0x924C,
	25186 - 11905: 0x924D,
	25187 - 11905: 0xBFDB,
	25188 - 11905: 0x924E,
	25189 - 11905: 0x924F,
	25190 - 11905: 0xC7A4,
	25191 - 11905: 0xD6B4,
	25192 - 11905: 0x9250,
	25193 - 11905: 0xC0A9,
	25194 - 11905: 0xDED1,
	25195 - 11905: 0xC9A8,
	25196 - 11905: 0xD1EF,
	25197 - 11905: 0xC5A4,
	25198 - 11905: 0xB0E7,
	25199 - 11905: 0xB3B6,
	25200 - 11905: 0xC8C5,
	25201 - 11905: 0x9251,
	25202 - 11905: 0x9252,
	25203 - 11905: 0xB0E2,
	25204 - 11905: 0x9253,
	25205 - 11905: 0x9254,
	25206 - 11905: 0xB7F6,
	25207 - 11905: 0x9255,
	25208 - 11905: 0x9256,
	25209 - 11905: 0xC5FA,
	25210 - 11905: 0x9257,
	25211 - 11905: 0x9258,
	25212 - 11905: 0xB6F3,
	25213 - 11905: 0x9259,
	25214 - 11905: 0xD5D2,
	25215 - 11905: 0xB3D0,
	25216 - 11905: 0xBCBC,
	25217 - 11905: 0x925A,
	25218 - 11905: 0x925B,
	25219 - 11905: 0x925C,
	25220 - 11905: 0xB3AD,
	25221 - 11905: 0x925D,
	25222 - 11905: 0x925E,
	25223 - 11905: 0x925F,
	25224 - 11905: 0x9260,
	25225 - 11905: 0xBEF1,
	25226 - 11905: 0xB0D1,
	25227 - 11905: 0x9261,
	25228 - 11905: 0x9262,
	25229 - 11905: 0x9263,
	25230 - 11905: 0x9264,
	25231 - 11905: 0x9265,
	25232 - 11905: 0x9266,
	25233 - 11905: 0xD2D6,
	25234 - 11905: 0xCAE3,
	25235 - 11905: 0xD7A5,
	25236 - 11905: 0x9267,
	25237 - 11905: 0xCDB6,
	25238 - 11905: 0xB6B6,
	25239 - 11905: 0xBFB9,
	25240 - 11905: 0xD5DB,
	25241 - 11905: 0x9268,
	25242 - 11905: 0xB8A7,
	25243 - 11905: 0xC5D7,
	25244 - 11905: 0x9269,
	25245 - 11905: 0x926A,
	25246 - 11905: 0x926B,
	25247 - 11905: 0xDED2,
	25248 - 11905: 0xBFD9,
	25249 - 11905: 0xC2D5,
	25250 - 11905: 0xC7C0,
	25251 - 11905: 0x926C,
	25252 - 11905: 0xBBA4,
	25253 - 11905: 0xB1A8,
	25254 - 11905: 0x926D,
	25255 - 11905: 0x926E,
	25256 - 11905: 0xC5EA,
	25257 - 11905: 0x926F,
	25258 - 11905: 0x9270,
	25259 - 11905: 0xC5FB,
	25260 - 11905: 0xCCA7,
	25261 - 11905: 0x9271,
	25262 - 11905: 0x9272,
	25263 - 11905: 0x9273,
	25264 - 11905: 0x9274,
	25265 - 11905: 0xB1A7,
	25266 - 11905: 0x9275,
	25267 - 11905: 0x9276,
	25268 - 11905: 0x9277,
	25269 - 11905: 0xB5D6,
	25270 - 11905: 0x9278,
	25271 - 11905: 0x9279,
	25272 - 11905: 0x927A,
	25273 - 11905: 0xC4A8,
	25274 - 11905: 0x927B,
	25275 - 11905: 0xDED3,
	25276 - 11905: 0xD1BA,
	25277 - 11905: 0xB3E9,
	25278 - 11905: 0x927C,
	25279 - 11905: 0xC3F2,
	25280 - 11905: 0x927D,
	25281 - 11905: 0x927E,
	25282 - 11905: 0xB7F7,
	25283 - 11905: 0x9280,
	25284 - 11905: 0xD6F4,
	25285 - 11905: 0xB5A3,
	25286 - 11905: 0xB2F0,
	25287 - 11905: 0xC4B4,
	25288 - 11905: 0xC4E9,
	25289 - 11905: 0xC0AD,
	25290 - 11905: 0xDED4,
	25291 - 11905: 0x9281,
	25292 - 11905: 0xB0E8,
	25293 - 11905: 0xC5C4,
	25294 - 11905: 0xC1E0,
	25295 - 11905: 0x9282,
	25296 - 11905: 0xB9D5,
	25297 - 11905: 0x9283,
	25298 - 11905: 0xBEDC,
	25299 - 11905: 0xCDD8,
	25300 - 11905: 0xB0CE,
	25301 - 11905: 0x9284,
	25302 - 11905: 0xCDCF,
	25303 - 11905: 0xDED6,
	25304 - 11905: 0xBED0,
	25305 - 11905: 0xD7BE,
	25306 - 11905: 0xDED5,
	25307 - 11905: 0xD5D0,
	25308 - 11905: 0xB0DD,
	25309 - 11905: 0x9285,
	25310 - 11905: 0x9286,
	25311 - 11905: 0xC4E2,
	25312 - 11905: 0x9287,
	25313 - 11905: 0x9288,
	25314 - 11905: 0xC2A3,
	25315 - 11905: 0xBCF0,
	25316 - 11905: 0x9289,
	25317 - 11905: 0xD3B5,
	25318 - 11905: 0xC0B9,
	25319 - 11905: 0xC5A1,
	25320 - 11905: 0xB2A6,
	25321 - 11905: 0xD4F1,
	25322 - 11905: 0x928A,
	25323 - 11905: 0x928B,
	25324 - 11905: 0xC0A8,
	25325 - 11905: 0xCAC3,
	25326 - 11905: 0xDED7,
	25327 - 11905: 0xD5FC,
	25328 - 11905: 0x928C,
	25329 - 11905: 0xB9B0,
	25330 - 11905: 0x928D,
	25331 - 11905: 0xC8AD,
	25332 - 11905: 0xCBA9,
	25333 - 11905: 0x928E,
	25334 - 11905: 0xDED9,
	25335 - 11905: 0xBFBD,
	25336 - 11905: 0x928F,
	25337 - 11905: 0x9290,
	25338 - 11905: 0x9291,
	25339 - 11905: 0x9292,
	25340 - 11905: 0xC6B4,
	25341 - 11905: 0xD7A7,
	25342 - 11905: 0xCAB0,
	25343 - 11905: 0xC4C3,
	25344 - 11905: 0x9293,
	25345 - 11905: 0xB3D6,
	25346 - 11905: 0xB9D2,
	25347 - 11905: 0x9294,
	25348 - 11905: 0x9295,
	25349 - 11905: 0x9296,
	25350 - 11905: 0x9297,
	25351 - 11905: 0xD6B8,
	25352 - 11905: 0xEAFC,
	25353 - 11905: 0xB0B4,
	25354 - 11905: 0x9298,
	25355 - 11905: 0x9299,
	25356 - 11905: 0x929A,
	25357 - 11905: 0x929B,
	25358 - 11905: 0xBFE6,
	25359 - 11905: 0x929C,
	25360 - 11905: 0x929D,
	25361 - 11905: 0xCCF4,
	25362 - 11905: 0x929E,
	25363 - 11905: 0x929F,
	25364 - 11905: 0x92A0,
	25365 - 11905: 0x92A1,
	25366 - 11905: 0xCDDA,
	25367 - 11905: 0x92A2,
	25368 - 11905: 0x92A3,
	25369 - 11905: 0x92A4,
	25370 - 11905: 0xD6BF,
	25371 - 11905: 0xC2CE,
	25372 - 11905: 0x92A5,
	25373 - 11905: 0xCECE,
	25374 - 11905: 0xCCA2,
	25375 - 11905: 0xD0AE,
	25376 - 11905: 0xC4D3,
	25377 - 11905: 0xB5B2,
	25378 - 11905: 0xDED8,
	25379 - 11905: 0xD5F5,
	25380 - 11905: 0xBCB7,
	25381 - 11905: 0xBBD3,
	25382 - 11905: 0x92A6,
	25383 - 11905: 0x92A7,
	25384 - 11905: 0xB0A4,
	25385 - 11905: 0x92A8,
	25386 - 11905: 0xC5B2,
	25387 - 11905: 0xB4EC,
	25388 - 11905: 0x92A9,
	25389 - 11905: 0x92AA,
	25390 - 11905: 0x92AB,
	25391 - 11905: 0xD5F1,
	25392 - 11905: 0x92AC,
	25393 - 11905: 0x92AD,
	25394 - 11905: 0xEAFD,
	25395 - 11905: 0x92AE,
	25396 - 11905: 0x92AF,
	25397 - 11905: 0x92B0,
	25398 - 11905: 0x92B1,
	25399 - 11905: 0x92B2,
	25400 - 11905: 0x92B3,
	25401 - 11905: 0xDEDA,
	25402 - 11905: 0xCDA6,
	25403 - 11905: 0x92B4,
	25404 - 11905: 0x92B5,
	25405 - 11905: 0xCDEC,
	25406 - 11905: 0x92B6,
	25407 - 11905: 0x92B7,
	25408 - 11905: 0x92B8,
	25409 - 11905: 0x92B9,
	25410 - 11905: 0xCEE6,
	25411 - 11905: 0xDEDC,
	25412 - 11905: 0x92BA,
	25413 - 11905: 0xCDB1,
	25414 - 11905: 0xC0A6,
	25415 - 11905: 0x92BB,
	25416 - 11905: 0x92BC,
	25417 - 11905: 0xD7BD,
	25418 - 11905: 0x92BD,
	25419 - 11905: 0xDEDB,
	25420 - 11905: 0xB0C6,
	25421 - 11905: 0xBAB4,
	25422 - 11905: 0xC9D3,
	25423 - 11905: 0xC4F3,
	25424 - 11905: 0xBEE8,
	25425 - 11905: 0x92BE,
	25426 - 11905: 0x92BF,
	25427 - 11905: 0x92C0,
	25428 - 11905: 0x92C1,
	25429 - 11905: 0xB2B6,
	25430 - 11905: 0x92C2,
	25431 - 11905: 0x92C3,
	25432 - 11905: 0x92C4,
	25433 - 11905: 0x92C5,
	25434 - 11905: 0x92C6,
	25435 - 11905: 0x92C7,
	25436 - 11905: 0x92C8,
	25437 - 11905: 0x92C9,
	25438 - 11905: 0xC0CC,
	25439 - 11905: 0xCBF0,
	25440 - 11905: 0x92CA,
	25441 - 11905: 0xBCF1,
	25442 - 11905: 0xBBBB,
	25443 - 11905: 0xB5B7,
	25444 - 11905: 0x92CB,
	25445 - 11905: 0x92CC,
	25446 - 11905: 0x92CD,
	25447 - 11905: 0xC5F5,
	25448 - 11905: 0x92CE,
	25449 - 11905: 0xDEE6,
	25450 - 11905: 0x92CF,
	25451 - 11905: 0x92D0,
	25452 - 11905: 0x92D1,
	25453 - 11905: 0xDEE3,
	25454 - 11905: 0xBEDD,
	25455 - 11905: 0x92D2,
	25456 - 11905: 0x92D3,
	25457 - 11905: 0xDEDF,
	25458 - 11905: 0x92D4,
	25459 - 11905: 0x92D5,
	25460 - 11905: 0x92D6,
	25461 - 11905: 0x92D7,
	25462 - 11905: 0xB4B7,
	25463 - 11905: 0xBDDD,
	25464 - 11905: 0x92D8,
	25465 - 11905: 0x92D9,
	25466 - 11905: 0xDEE0,
	25467 - 11905: 0xC4ED,
	25468 - 11905: 0x92DA,
	25469 - 11905: 0x92DB,
	25470 - 11905: 0x92DC,
	25471 - 11905: 0x92DD,
	25472 - 11905: 0xCFC6,
	25473 - 11905: 0x92DE,
	25474 - 11905: 0xB5E0,
	25475 - 11905: 0x92DF,
	25476 - 11905: 0x92E0,
	25477 - 11905: 0x92E1,
	25478 - 11905: 0x92E2,
	25479 - 11905: 0xB6DE,
	25480 - 11905: 0xCADA,
	25481 - 11905: 0xB5F4,
	25482 - 11905: 0xDEE5,
	25483 - 11905: 0x92E3,
	25484 - 11905: 0xD5C6,
	25485 - 11905: 0x92E4,
	25486 - 11905: 0xDEE1,
	25487 - 11905: 0xCCCD,
	25488 - 11905: 0xC6FE,
	25489 - 11905: 0x92E5,
	25490 - 11905: 0xC5C5,
	25491 - 11905: 0x92E6,
	25492 - 11905: 0x92E7,
	25493 - 11905: 0x92E8,
	25494 - 11905: 0xD2B4,
	25495 - 11905: 0x92E9,
	25496 - 11905: 0xBEF2,
	25497 - 11905: 0x92EA,
	25498 - 11905: 0x92EB,
	25499 - 11905: 0x92EC,
	25500 - 11905: 0x92ED,
	25501 - 11905: 0x92EE,
	25502 - 11905: 0x92EF,
	25503 - 11905: 0x92F0,
	25504 - 11905: 0xC2D3,
	25505 - 11905: 0x92F1,
	25506 - 11905: 0xCCBD,
	25507 - 11905: 0xB3B8,
	25508 - 11905: 0x92F2,
	25509 - 11905: 0xBDD3,
	25510 - 11905: 0x92F3,
	25511 - 11905: 0xBFD8,
	25512 - 11905: 0xCDC6,
	25513 - 11905: 0xD1DA,
	25514 - 11905: 0xB4EB,
	25515 - 11905: 0x92F4,
	25516 - 11905: 0xDEE4,
	25517 - 11905: 0xDEDD,
	25518 - 11905: 0xDEE7,
	25519 - 11905: 0x92F5,
	25520 - 11905: 0xEAFE,
	25521 - 11905: 0x92F6,
	25522 - 11905: 0x92F7,
	25523 - 11905: 0xC2B0,
	25524 - 11905: 0xDEE2,
	25525 - 11905: 0x92F8,
	25526 - 11905: 0x92F9,
	25527 - 11905: 0xD6C0,
	25528 - 11905: 0xB5A7,
	25529 - 11905: 0x92FA,
	25530 - 11905: 0xB2F4,
	25531 - 11905: 0x92FB,
	25532 - 11905: 0xDEE8,
	25533 - 11905: 0x92FC,
	25534 - 11905: 0xDEF2,
	25535 - 11905: 0x92FD,
	25536 - 11905: 0x92FE,
	25537 - 11905: 0x9340,
	25538 - 11905: 0x9341,
	25539 - 11905: 0x9342,
	25540 - 11905: 0xDEED,
	25541 - 11905: 0x9343,
	25542 - 11905: 0xDEF1,
	25543 - 11905: 0x9344,
	25544 - 11905: 0x9345,
	25545 - 11905: 0xC8E0,
	25546 - 11905: 0x9346,
	25547 - 11905: 0x9347,
	25548 - 11905: 0x9348,
	25549 - 11905: 0xD7E1,
	25550 - 11905: 0xDEEF,
	25551 - 11905: 0xC3E8,
	25552 - 11905: 0xCCE1,
	25553 - 11905: 0x9349,
	25554 - 11905: 0xB2E5,
	25555 - 11905: 0x934A,
	25556 - 11905: 0x934B,
	25557 - 11905: 0x934C,
	25558 - 11905: 0xD2BE,
	25559 - 11905: 0x934D,
	25560 - 11905: 0x934E,
	25561 - 11905: 0x934F,
	25562 - 11905: 0x9350,
	25563 - 11905: 0x9351,
	25564 - 11905: 0x9352,
	25565 - 11905: 0x9353,
	25566 - 11905: 0xDEEE,
	25567 - 11905: 0x9354,
	25568 - 11905: 0xDEEB,
	25569 - 11905: 0xCED5,
	25570 - 11905: 0x9355,
	25571 - 11905: 0xB4A7,
	25572 - 11905: 0x9356,
	25573 - 11905: 0x9357,
	25574 - 11905: 0x9358,
	25575 - 11905: 0x9359,
	25576 - 11905: 0x935A,
	25577 - 11905: 0xBFAB,
	25578 - 11905: 0xBEBE,
	25579 - 11905: 0x935B,
	25580 - 11905: 0x935C,
	25581 - 11905: 0xBDD2,
	25582 - 11905: 0x935D,
	25583 - 11905: 0x935E,
	25584 - 11905: 0x935F,
	25585 - 11905: 0x9360,
	25586 - 11905: 0xDEE9,
	25587 - 11905: 0x9361,
	25588 - 11905: 0xD4AE,
	25589 - 11905: 0x9362,
	25590 - 11905: 0xDEDE,
	25591 - 11905: 0x9363,
	25592 - 11905: 0xDEEA,
	25593 - 11905: 0x9364,
	25594 - 11905: 0x9365,
	25595 - 11905: 0x9366,
	25596 - 11905: 0x9367,
	25597 - 11905: 0xC0BF,
	25598 - 11905: 0x9368,
	25599 - 11905: 0xDEEC,
	25600 - 11905: 0xB2F3,
	25601 - 11905: 0xB8E9,
	25602 - 11905: 0xC2A7,
	25603 - 11905: 0x9369,
	25604 - 11905: 0x936A,
	25605 - 11905: 0xBDC1,
	25606 - 11905: 0x936B,
	25607 - 11905: 0x936C,
	25608 - 11905: 0x936D,
	25609 - 11905: 0x936E,
	25610 - 11905: 0x936F,
	25611 - 11905: 0xDEF5,
	25612 - 11905: 0xDEF8,
	25613 - 11905: 0x9370,
	25614 - 11905: 0x9371,
	25615 - 11905: 0xB2AB,
	25616 - 11905: 0xB4A4,
	25617 - 11905: 0x9372,
	25618 - 11905: 0x9373,
	25619 - 11905: 0xB4EA,
	25620 - 11905: 0xC9A6,
	25621 - 11905: 0x9374,
	25622 - 11905: 0x9375,
	25623 - 11905: 0x9376,
	25624 - 11905: 0x9377,
	25625 - 11905: 0x9378,
	25626 - 11905: 0x9379,
	25627 - 11905: 0xDEF6,
	25628 - 11905: 0xCBD1,
	25629 - 11905: 0x937A,
	25630 - 11905: 0xB8E3,
	25631 - 11905: 0x937B,
	25632 - 11905: 0xDEF7,
	25633 - 11905: 0xDEFA,
	25634 - 11905: 0x937C,
	25635 - 11905: 0x937D,
	25636 - 11905: 0x937E,
	25637 - 11905: 0x9380,
	25638 - 11905: 0xDEF9,
	25639 - 11905: 0x9381,
	25640 - 11905: 0x9382,
	25641 - 11905: 0x9383,
	25642 - 11905: 0xCCC2,
	25643 - 11905: 0x9384,
	25644 - 11905: 0xB0E1,
	25645 - 11905: 0xB4EE,
	25646 - 11905: 0x9385,
	25647 - 11905: 0x9386,
	25648 - 11905: 0x9387,
	25649 - 11905: 0x9388,
	25650 - 11905: 0x9389,
	25651 - 11905: 0x938A,
	25652 - 11905: 0xE5BA,
	25653 - 11905: 0x938B,
	25654 - 11905: 0x938C,
	25655 - 11905: 0x938D,
	25656 - 11905: 0x938E,
	25657 - 11905: 0x938F,
	25658 - 11905: 0xD0AF,
	25659 - 11905: 0x9390,
	25660 - 11905: 0x9391,
	25661 - 11905: 0xB2EB,
	25662 - 11905: 0x9392,
	25663 - 11905: 0xEBA1,
	25664 - 11905: 0x9393,
	25665 - 11905: 0xDEF4,
	25666 - 11905: 0x9394,
	25667 - 11905: 0x9395,
	25668 - 11905: 0xC9E3,
	25669 - 11905: 0xDEF3,
	25670 - 11905: 0xB0DA,
	25671 - 11905: 0xD2A1,
	25672 - 11905: 0xB1F7,
	25673 - 11905: 0x9396,
	25674 - 11905: 0xCCAF,
	25675 - 11905: 0x9397,
	25676 - 11905: 0x9398,
	25677 - 11905: 0x9399,
	25678 - 11905: 0x939A,
	25679 - 11905: 0x939B,
	25680 - 11905: 0x939C,
	25681 - 11905: 0x939D,
	25682 - 11905: 0xDEF0,
	25683 - 11905: 0x939E,
	25684 - 11905: 0xCBA4,
	25685 - 11905: 0x939F,
	25686 - 11905: 0x93A0,
	25687 - 11905: 0x93A1,
	25688 - 11905: 0xD5AA,
	25689 - 11905: 0x93A2,
	25690 - 11905: 0x93A3,
	25691 - 11905: 0x93A4,
	25692 - 11905: 0x93A5,
	25693 - 11905: 0x93A6,
	25694 - 11905: 0xDEFB,
	25695 - 11905: 0x93A7,
	25696 - 11905: 0x93A8,
	25697 - 11905: 0x93A9,
	25698 - 11905: 0x93AA,
	25699 - 11905: 0x93AB,
	25700 - 11905: 0x93AC,
	25701 - 11905: 0x93AD,
	25702 - 11905: 0x93AE,
	25703 - 11905: 0xB4DD,
	25704 - 11905: 0x93AF,
	25705 - 11905: 0xC4A6,
	25706 - 11905: 0x93B0,
	25707 - 11905: 0x93B1,
	25708 - 11905: 0x93B2,
	25709 - 11905: 0xDEFD,
	25710 - 11905: 0x93B3,
	25711 - 11905: 0x93B4,
	25712 - 11905: 0x93B5,
	25713 - 11905: 0x93B6,
	25714 - 11905: 0x93B7,
	25715 - 11905: 0x93B8,
	25716 - 11905: 0x93B9,
	25717 - 11905: 0x93BA,
	25718 - 11905: 0x93BB,
	25719 - 11905: 0x93BC,
	25720 - 11905: 0xC3FE,
	25721 - 11905: 0xC4A1,
	25722 - 11905: 0xDFA1,
	25723 - 11905: 0x93BD,
	25724 - 11905: 0x93BE,
	25725 - 11905: 0x93BF,
	25726 - 11905: 0x93C0,
	25727 - 11905: 0x93C1,
	25728 - 11905: 0x93C2,
	25729 - 11905: 0x93C3,
	25730 - 11905: 0xC1CC,
	25731 - 11905: 0x93C4,
	25732 - 11905: 0xDEFC,
	25733 - 11905: 0xBEEF,
	25734 - 11905: 0x93C5,
	25735 - 11905: 0xC6B2,
	25736 - 11905: 0x93C6,
	25737 - 11905: 0x93C7,
	25738 - 11905: 0x93C8,
	25739 - 11905: 0x93C9,
	25740 - 11905: 0x93CA,
	25741 - 11905: 0x93CB,
	25742 - 11905: 0x93CC,
	25743 - 11905: 0x93CD,
	25744 - 11905: 0x93CE,
	25745 - 11905: 0xB3C5,
	25746 - 11905: 0xC8F6,
	25747 - 11905: 0x93CF,
	25748 - 11905: 0x93D0,
	25749 - 11905: 0xCBBA,
	25750 - 11905: 0xDEFE,
	25751 - 11905: 0x93D1,
	25752 - 11905: 0x93D2,
	25753 - 11905: 0xDFA4,
	25754 - 11905: 0x93D3,
	25755 - 11905: 0x93D4,
	25756 - 11905: 0x93D5,
	25757 - 11905: 0x93D6,
	25758 - 11905: 0xD7B2,
	25759 - 11905: 0x93D7,
	25760 - 11905: 0x93D8,
	25761 - 11905: 0x93D9,
	25762 - 11905: 0x93DA,
	25763 - 11905: 0x93DB,
	25764 - 11905: 0xB3B7,
	25765 - 11905: 0x93DC,
	25766 - 11905: 0x93DD,
	25767 - 11905: 0x93DE,
	25768 - 11905: 0x93DF,
	25769 - 11905: 0xC1C3,
	25770 - 11905: 0x93E0,
	25771 - 11905: 0x93E1,
	25772 - 11905: 0xC7CB,
	25773 - 11905: 0xB2A5,
	25774 - 11905: 0xB4E9,
	25775 - 11905: 0x93E2,
	25776 - 11905: 0xD7AB,
	25777 - 11905: 0x93E3,
	25778 - 11905: 0x93E4,
	25779 - 11905: 0x93E5,
	25780 - 11905: 0x93E6,
	25781 - 11905: 0xC4EC,
	25782 - 11905: 0x93E7,
	25783 - 11905: 0xDFA2,
	25784 - 11905: 0xDFA3,
	25785 - 11905: 0x93E8,
	25786 - 11905: 0xDFA5,
	25787 - 11905: 0x93E9,
	25788 - 11905: 0xBAB3,
	25789 - 11905: 0x93EA,
	25790 - 11905: 0x93EB,
	25791 - 11905: 0x93EC,
	25792 - 11905: 0xDFA6,
	25793 - 11905: 0x93ED,
	25794 - 11905: 0xC0DE,
	25795 - 11905: 0x93EE,
	25796 - 11905: 0x93EF,
	25797 - 11905: 0xC9C3,
	25798 - 11905: 0x93F0,
	25799 - 11905: 0x93F1,
	25800 - 11905: 0x93F2,
	25801 - 11905: 0x93F3,
	25802 - 11905: 0x93F4,
	25803 - 11905: 0x93F5,
	25804 - 11905: 0x93F6,
	25805 - 11905: 0xB2D9,
	25806 - 11905: 0xC7E6,
	25807 - 11905: 0x93F7,
	25808 - 11905: 0xDFA7,
	25809 - 11905: 0x93F8,
	25810 - 11905: 0xC7DC,
	25811 - 11905: 0x93F9,
	25812 - 11905: 0x93FA,
	25813 - 11905: 0x93FB,
	25814 - 11905: 0x93FC,
	25815 - 11905: 0xDFA8,
	25816 - 11905: 0xEBA2,
	25817 - 11905: 0x93FD,
	25818 - 11905: 0x93FE,
	25819 - 11905: 0x9440,
	25820 - 11905: 0x9441,
	25821 - 11905: 0x9442,
	25822 - 11905: 0xCBD3,
	25823 - 11905: 0x9443,
	25824 - 11905: 0x9444,
	25825 - 11905: 0x9445,
	25826 - 11905: 0xDFAA,
	25827 - 11905: 0x9446,
	25828 - 11905: 0xDFA9,
	25829 - 11905: 0x9447,
	25830 - 11905: 0xB2C1,
	25831 - 11905: 0x9448,
	25832 - 11905: 0x9449,
	25833 - 11905: 0x944A,
	25834 - 11905: 0x944B,
	25835 - 11905: 0x944C,
	25836 - 11905: 0x944D,
	25837 - 11905: 0x944E,
	25838 - 11905: 0x944F,
	25839 - 11905: 0x9450,
	25840 - 11905: 0x9451,
	25841 - 11905: 0x9452,
	25842 - 11905: 0x9453,
	25843 - 11905: 0x9454,
	25844 - 11905: 0x9455,
	25845 - 11905: 0x9456,
	25846 - 11905: 0x9457,
	25847 - 11905: 0x9458,
	25848 - 11905: 0x9459,
	25849 - 11905: 0x945A,
	25850 - 11905: 0x945B,
	25851 - 11905: 0x945C,
	25852 - 11905: 0x945D,
	25853 - 11905: 0x945E,
	25854 - 11905: 0x945F,
	25855 - 11905: 0x9460,
	25856 - 11905: 0xC5CA,
	25857 - 11905: 0x9461,
	25858 - 11905: 0x9462,
	25859 - 11905: 0x9463,
	25860 - 11905: 0x9464,
	25861 - 11905: 0x9465,
	25862 - 11905: 0x9466,
	25863 - 11905: 0x9467,
	25864 - 11905: 0x9468,
	25865 - 11905: 0xDFAB,
	25866 - 11905: 0x9469,
	25867 - 11905: 0x946A,
	25868 - 11905: 0x946B,
	25869 - 11905: 0x946C,
	25870 - 11905: 0x946D,
	25871 - 11905: 0x946E,
	25872 - 11905: 0x946F,
	25873 - 11905: 0x9470,
	25874 - 11905: 0xD4DC,
	25875 - 11905: 0x9471,
	25876 - 11905: 0x9472,
	25877 - 11905: 0x9473,
	25878 - 11905: 0x9474,
	25879 - 11905: 0x9475,
	25880 - 11905: 0xC8C1,
	25881 - 11905: 0x9476,
	25882 - 11905: 0x9477,
	25883 - 11905: 0x9478,
	25884 - 11905: 0x9479,
	25885 - 11905: 0x947A,
	25886 - 11905: 0x947B,
	25887 - 11905: 0x947C,
	25888 - 11905: 0x947D,
	25889 - 11905: 0x947E,
	25890 - 11905: 0x9480,
	25891 - 11905: 0x9481,
	25892 - 11905: 0x9482,
	25893 - 11905: 0xDFAC,
	25894 - 11905: 0x9483,
	25895 - 11905: 0x9484,
	25896 - 11905: 0x9485,
	25897 - 11905: 0x9486,
	25898 - 11905: 0x9487,
	25899 - 11905: 0xBEF0,
	25900 - 11905: 0x9488,
	25901 - 11905: 0x9489,
	25902 - 11905: 0xDFAD,
	25903 - 11905: 0xD6A7,
	25904 - 11905: 0x948A,
	25905 - 11905: 0x948B,
	25906 - 11905: 0x948C,
	25907 - 11905: 0x948D,
	25908 - 11905: 0xEAB7,
	25909 - 11905: 0xEBB6,
	25910 - 11905: 0xCAD5,
	25911 - 11905: 0x948E,
	25912 - 11905: 0xD8FC,
	25913 - 11905: 0xB8C4,
	25914 - 11905: 0x948F,
	25915 - 11905: 0xB9A5,
	25916 - 11905: 0x9490,
	25917 - 11905: 0x9491,
	25918 - 11905: 0xB7C5,
	25919 - 11905: 0xD5FE,
	25920 - 11905: 0x9492,
	25921 - 11905: 0x9493,
	25922 - 11905: 0x9494,
	25923 - 11905: 0x9495,
	25924 - 11905: 0x9496,
	25925 - 11905: 0xB9CA,
	25926 - 11905: 0x9497,
	25927 - 11905: 0x9498,
	25928 - 11905: 0xD0A7,
	25929 - 11905: 0xF4CD,
	25930 - 11905: 0x9499,
	25931 - 11905: 0x949A,
	25932 - 11905: 0xB5D0,
	25933 - 11905: 0x949B,
	25934 - 11905: 0x949C,
	25935 - 11905: 0xC3F4,
	25936 - 11905: 0x949D,
	25937 - 11905: 0xBEC8,
	25938 - 11905: 0x949E,
	25939 - 11905: 0x949F,
	25940 - 11905: 0x94A0,
	25941 - 11905: 0xEBB7,
	25942 - 11905: 0xB0BD,
	25943 - 11905: 0x94A1,
	25944 - 11905: 0x94A2,
	25945 - 11905: 0xBDCC,
	25946 - 11905: 0x94A3,
	25947 - 11905: 0xC1B2,
	25948 - 11905: 0x94A4,
	25949 - 11905: 0xB1D6,
	25950 - 11905: 0xB3A8,
	25951 - 11905: 0x94A5,
	25952 - 11905: 0x94A6,
	25953 - 11905: 0x94A7,
	25954 - 11905: 0xB8D2,
	25955 - 11905: 0xC9A2,
	25956 - 11905: 0x94A8,
	25957 - 11905: 0x94A9,
	25958 - 11905: 0xB6D8,
	25959 - 11905: 0x94AA,
	25960 - 11905: 0x94AB,
	25961 - 11905: 0x94AC,
	25962 - 11905: 0x94AD,
	25963 - 11905: 0xEBB8,
	25964 - 11905: 0xBEB4,
	25965 - 11905: 0x94AE,
	25966 - 11905: 0x94AF,
	25967 - 11905: 0x94B0,
	25968 - 11905: 0xCAFD,
	25969 - 11905: 0x94B1,
	25970 - 11905: 0xC7C3,
	25971 - 11905: 0x94B2,
	25972 - 11905: 0xD5FB,
	25973 - 11905: 0x94B3,
	25974 - 11905: 0x94B4,
	25975 - 11905: 0xB7F3,
	25976 - 11905: 0x94B5,
	25977 - 11905: 0x94B6,
	25978 - 11905: 0x94B7,
	25979 - 11905: 0x94B8,
	25980 - 11905: 0x94B9,
	25981 - 11905: 0x94BA,
	25982 - 11905: 0x94BB,
	25983 - 11905: 0x94BC,
	25984 - 11905: 0x94BD,
	25985 - 11905: 0x94BE,
	25986 - 11905: 0x94BF,
	25987 - 11905: 0x94C0,
	25988 - 11905: 0x94C1,
	25989 - 11905: 0x94C2,
	25990 - 11905: 0x94C3,
	25991 - 11905: 0xCEC4,
	25992 - 11905: 0x94C4,
	25993 - 11905: 0x94C5,
	25994 - 11905: 0x94C6,
	25995 - 11905: 0xD5AB,
	25996 - 11905: 0xB1F3,
	25997 - 11905: 0x94C7,
	25998 - 11905: 0x94C8,
	25999 - 11905: 0x94C9,
	26000 - 11905: 0xECB3,
	26001 - 11905: 0xB0DF,
	26002 - 11905: 0x94CA,
	26003 - 11905: 0xECB5,
	26004 - 11905: 0x94CB,
	26005 - 11905: 0x94CC,
	26006 - 11905: 0x94CD,
	26007 - 11905: 0xB6B7,
	26008 - 11905: 0x94CE,
	26009 - 11905: 0xC1CF,
	26010 - 11905: 0x94CF,
	26011 - 11905: 0xF5FA,
	26012 - 11905: 0xD0B1,
	26013 - 11905: 0x94D0,
	26014 - 11905: 0x94D1,
	26015 - 11905: 0xD5E5,
	26016 - 11905: 0x94D2,
	26017 - 11905: 0xCED3,
	26018 - 11905: 0x94D3,
	26019 - 11905: 0x94D4,
	26020 - 11905: 0xBDEF,
	26021 - 11905: 0xB3E2,
	26022 - 11905: 0x94D5,
	26023 - 11905: 0xB8AB,
	26024 - 11905: 0x94D6,
	26025 - 11905: 0xD5B6,
	26026 - 11905: 0x94D7,
	26027 - 11905: 0xEDBD,
	26028 - 11905: 0x94D8,
	26029 - 11905: 0xB6CF,
	26030 - 11905: 0x94D9,
	26031 - 11905: 0xCBB9,
	26032 - 11905: 0xD0C2,
	26033 - 11905: 0x94DA,
	26034 - 11905: 0x94DB,
	26035 - 11905: 0x94DC,
	26036 - 11905: 0x94DD,
	26037 - 11905: 0x94DE,
	26038 - 11905: 0x94DF,
	26039 - 11905: 0x94E0,
	26040 - 11905: 0x94E1,
	26041 - 11905: 0xB7BD,
	26042 - 11905: 0x94E2,
	26043 - 11905: 0x94E3,
	26044 - 11905: 0xECB6,
	26045 - 11905: 0xCAA9,
	26046 - 11905: 0x94E4,
	26047 - 11905: 0x94E5,
	26048 - 11905: 0x94E6,
	26049 - 11905: 0xC5D4,
	26050 - 11905: 0x94E7,
	26051 - 11905: 0xECB9,
	26052 - 11905: 0xECB8,
	26053 - 11905: 0xC2C3,
	26054 - 11905: 0xECB7,
	26055 - 11905: 0x94E8,
	26056 - 11905: 0x94E9,
	26057 - 11905: 0x94EA,
	26058 - 11905: 0x94EB,
	26059 - 11905: 0xD0FD,
	26060 - 11905: 0xECBA,
	26061 - 11905: 0x94EC,
	26062 - 11905: 0xECBB,
	26063 - 11905: 0xD7E5,
	26064 - 11905: 0x94ED,
	26065 - 11905: 0x94EE,
	26066 - 11905: 0xECBC,
	26067 - 11905: 0x94EF,
	26068 - 11905: 0x94F0,
	26069 - 11905: 0x94F1,
	26070 - 11905: 0xECBD,
	26071 - 11905: 0xC6EC,
	26072 - 11905: 0x94F2,
	26073 - 11905: 0x94F3,
	26074 - 11905: 0x94F4,
	26075 - 11905: 0x94F5,
	26076 - 11905: 0x94F6,
	26077 - 11905: 0x94F7,
	26078 - 11905: 0x94F8,
	26079 - 11905: 0x94F9,
	26080 - 11905: 0xCEDE,
	26081 - 11905: 0x94FA,
	26082 - 11905: 0xBCC8,
	26083 - 11905: 0x94FB,
	26084 - 11905: 0x94FC,
	26085 - 11905: 0xC8D5,
	26086 - 11905: 0xB5A9,
	26087 - 11905: 0xBEC9,
	26088 - 11905: 0xD6BC,
	26089 - 11905: 0xD4E7,
	26090 - 11905: 0x94FD,
	26091 - 11905: 0x94FE,
	26092 - 11905: 0xD1AE,
	26093 - 11905: 0xD0F1,
	26094 - 11905: 0xEAB8,
	26095 - 11905: 0xEAB9,
	26096 - 11905: 0xEABA,
	26097 - 11905: 0xBAB5,
	26098 - 11905: 0x9540,
	26099 - 11905: 0x9541,
	26100 - 11905: 0x9542,
	26101 - 11905: 0x9543,
	26102 - 11905: 0xCAB1,
	26103 - 11905: 0xBFF5,
	26104 - 11905: 0x9544,
	26105 - 11905: 0x9545,
	26106 - 11905: 0xCDFA,
	26107 - 11905: 0x9546,
	26108 - 11905: 0x9547,
	26109 - 11905: 0x9548,
	26110 - 11905: 0x9549,
	26111 - 11905: 0x954A,
	26112 - 11905: 0xEAC0,
	26113 - 11905: 0x954B,
	26114 - 11905: 0xB0BA,
	26115 - 11905: 0xEABE,
	26116 - 11905: 0x954C,
	26117 - 11905: 0x954D,
	26118 - 11905: 0xC0A5,
	26119 - 11905: 0x954E,
	26120 - 11905: 0x954F,
	26121 - 11905: 0x9550,
	26122 - 11905: 0xEABB,
	26123 - 11905: 0x9551,
	26124 - 11905: 0xB2FD,
	26125 - 11905: 0x9552,
	26126 - 11905: 0xC3F7,
	26127 - 11905: 0xBBE8,
	26128 - 11905: 0x9553,
	26129 - 11905: 0x9554,
	26130 - 11905: 0x9555,
	26131 - 11905: 0xD2D7,
	26132 - 11905: 0xCEF4,
	26133 - 11905: 0xEABF,
	26134 - 11905: 0x9556,
	26135 - 11905: 0x9557,
	26136 - 11905: 0x9558,
	26137 - 11905: 0xEABC,
	26138 - 11905: 0x9559,
	26139 - 11905: 0x955A,
	26140 - 11905: 0x955B,
	26141 - 11905: 0xEAC3,
	26142 - 11905: 0x955C,
	26143 - 11905: 0xD0C7,
	26144 - 11905: 0xD3B3,
	26145 - 11905: 0x955D,
	26146 - 11905: 0x955E,
	26147 - 11905: 0x955F,
	26148 - 11905: 0x9560,
	26149 - 11905: 0xB4BA,
	26150 - 11905: 0x9561,
	26151 - 11905: 0xC3C1,
	26152 - 11905: 0xD7F2,
	26153 - 11905: 0x9562,
	26154 - 11905: 0x9563,
	26155 - 11905: 0x9564,
	26156 - 11905: 0x9565,
	26157 - 11905: 0xD5D1,
	26158 - 11905: 0x9566,
	26159 - 11905: 0xCAC7,
	26160 - 11905: 0x9567,
	26161 - 11905: 0xEAC5,
	26162 - 11905: 0x9568,
	26163 - 11905: 0x9569,
	26164 - 11905: 0xEAC4,
	26165 - 11905: 0xEAC7,
	26166 - 11905: 0xEAC6,
	26167 - 11905: 0x956A,
	26168 - 11905: 0x956B,
	26169 - 11905: 0x956C,
	26170 - 11905: 0x956D,
	26171 - 11905: 0x956E,
	26172 - 11905: 0xD6E7,
	26173 - 11905: 0x956F,
	26174 - 11905: 0xCFD4,
	26175 - 11905: 0x9570,
	26176 - 11905: 0x9571,
	26177 - 11905: 0xEACB,
	26178 - 11905: 0x9572,
	26179 - 11905: 0xBBCE,
	26180 - 11905: 0x9573,
	26181 - 11905: 0x9574,
	26182 - 11905: 0x9575,
	26183 - 11905: 0x9576,
	26184 - 11905: 0x9577,
	26185 - 11905: 0x9578,
	26186 - 11905: 0x9579,
	26187 - 11905: 0xBDFA,
	26188 - 11905: 0xC9CE,
	26189 - 11905: 0x957A,
	26190 - 11905: 0x957B,
	26191 - 11905: 0xEACC,
	26192 - 11905: 0x957C,
	26193 - 11905: 0x957D,
	26194 - 11905: 0xC9B9,
	26195 - 11905: 0xCFFE,
	26196 - 11905: 0xEACA,
	26197 - 11905: 0xD4CE,
	26198 - 11905: 0xEACD,
	26199 - 11905: 0xEACF,
	26200 - 11905: 0x957E,
	26201 - 11905: 0x9580,
	26202 - 11905: 0xCDED,
	26203 - 11905: 0x9581,
	26204 - 11905: 0x9582,
	26205 - 11905: 0x9583,
	26206 - 11905: 0x9584,
	26207 - 11905: 0xEAC9,
	26208 - 11905: 0x9585,
	26209 - 11905: 0xEACE,
	26210 - 11905: 0x9586,
	26211 - 11905: 0x9587,
	26212 - 11905: 0xCEEE,
	26213 - 11905: 0x9588,
	26214 - 11905: 0xBBDE,
	26215 - 11905: 0x9589,
	26216 - 11905: 0xB3BF,
	26217 - 11905: 0x958A,
	26218 - 11905: 0x958B,
	26219 - 11905: 0x958C,
	26220 - 11905: 0x958D,
	26221 - 11905: 0x958E,
	26222 - 11905: 0xC6D5,
	26223 - 11905: 0xBEB0,
	26224 - 11905: 0xCEFA,
	26225 - 11905: 0x958F,
	26226 - 11905: 0x9590,
	26227 - 11905: 0x9591,
	26228 - 11905: 0xC7E7,
	26229 - 11905: 0x9592,
	26230 - 11905: 0xBEA7,
	26231 - 11905: 0xEAD0,
	26232 - 11905: 0x9593,
	26233 - 11905: 0x9594,
	26234 - 11905: 0xD6C7,
	26235 - 11905: 0x9595,
	26236 - 11905: 0x9596,
	26237 - 11905: 0x9597,
	26238 - 11905: 0xC1C0,
	26239 - 11905: 0x9598,
	26240 - 11905: 0x9599,
	26241 - 11905: 0x959A,
	26242 - 11905: 0xD4DD,
	26243 - 11905: 0x959B,
	26244 - 11905: 0xEAD1,
	26245 - 11905: 0x959C,
	26246 - 11905: 0x959D,
	26247 - 11905: 0xCFBE,
	26248 - 11905: 0x959E,
	26249 - 11905: 0x959F,
	26250 - 11905: 0x95A0,
	26251 - 11905: 0x95A1,
	26252 - 11905: 0xEAD2,
	26253 - 11905: 0x95A2,
	26254 - 11905: 0x95A3,
	26255 - 11905: 0x95A4,
	26256 - 11905: 0x95A5,
	26257 - 11905: 0xCAEE,
	26258 - 11905: 0x95A6,
	26259 - 11905: 0x95A7,
	26260 - 11905: 0x95A8,
	26261 - 11905: 0x95A9,
	26262 - 11905: 0xC5AF,
	26263 - 11905: 0xB0B5,
	26264 - 11905: 0x95AA,
	26265 - 11905: 0x95AB,
	26266 - 11905: 0x95AC,
	26267 - 11905: 0x95AD,
	26268 - 11905: 0x95AE,
	26269 - 11905: 0xEAD4,
	26270 - 11905: 0x95AF,
	26271 - 11905: 0x95B0,
	26272 - 11905: 0x95B1,
	26273 - 11905: 0x95B2,
	26274 - 11905: 0x95B3,
	26275 - 11905: 0x95B4,
	26276 - 11905: 0x95B5,
	26277 - 11905: 0x95B6,
	26278 - 11905: 0x95B7,
	26279 - 11905: 0xEAD3,
	26280 - 11905: 0xF4DF,
	26281 - 11905: 0x95B8,
	26282 - 11905: 0x95B9,
	26283 - 11905: 0x95BA,
	26284 - 11905: 0x95BB,
	26285 - 11905: 0x95BC,
	26286 - 11905: 0xC4BA,
	26287 - 11905: 0x95BD,
	26288 - 11905: 0x95BE,
	26289 - 11905: 0x95BF,
	26290 - 11905: 0x95C0,
	26291 - 11905: 0x95C1,
	26292 - 11905: 0xB1A9,
	26293 - 11905: 0x95C2,
	26294 - 11905: 0x95C3,
	26295 - 11905: 0x95C4,
	26296 - 11905: 0x95C5,
	26297 - 11905: 0xE5DF,
	26298 - 11905: 0x95C6,
	26299 - 11905: 0x95C7,
	26300 - 11905: 0x95C8,
	26301 - 11905: 0x95C9,
	26302 - 11905: 0xEAD5,
	26303 - 11905: 0x95CA,
	26304 - 11905: 0x95CB,
	26305 - 11905: 0x95CC,
	26306 - 11905: 0x95CD,
	26307 - 11905: 0x95CE,
	26308 - 11905: 0x95CF,
	26309 - 11905: 0x95D0,
	26310 - 11905: 0x95D1,
	26311 - 11905: 0x95D2,
	26312 - 11905: 0x95D3,
	26313 - 11905: 0x95D4,
	26314 - 11905: 0x95D5,
	26315 - 11905: 0x95D6,
	26316 - 11905: 0x95D7,
	26317 - 11905: 0x95D8,
	26318 - 11905: 0x95D9,
	26319 - 11905: 0x95DA,
	26320 - 11905: 0x95DB,
	26321 - 11905: 0x95DC,
	26322 - 11905: 0x95DD,
	26323 - 11905: 0x95DE,
	26324 - 11905: 0x95DF,
	26325 - 11905: 0x95E0,
	26326 - 11905: 0x95E1,
	26327 - 11905: 0x95E2,
	26328 - 11905: 0x95E3,
	26329 - 11905: 0xCAEF,
	26330 - 11905: 0x95E4,
	26331 - 11905: 0xEAD6,
	26332 - 11905: 0xEAD7,
	26333 - 11905: 0xC6D8,
	26334 - 11905: 0x95E5,
	26335 - 11905: 0x95E6,
	26336 - 11905: 0x95E7,
	26337 - 11905: 0x95E8,
	26338 - 11905: 0x95E9,
	26339 - 11905: 0x95EA,
	26340 - 11905: 0x95EB,
	26341 - 11905: 0x95EC,
	26342 - 11905: 0xEAD8,
	26343 - 11905: 0x95ED,
	26344 - 11905: 0x95EE,
	26345 - 11905: 0xEAD9,
	26346 - 11905: 0x95EF,
	26347 - 11905: 0x95F0,
	26348 - 11905: 0x95F1,
	26349 - 11905: 0x95F2,
	26350 - 11905: 0x95F3,
	26351 - 11905: 0x95F4,
	26352 - 11905: 0xD4BB,
	26353 - 11905: 0x95F5,
	26354 - 11905: 0xC7FA,
	26355 - 11905: 0xD2B7,
	26356 - 11905: 0xB8FC,
	26357 - 11905: 0x95F6,
	26358 - 11905: 0x95F7,
	26359 - 11905: 0xEAC2,
	26360 - 11905: 0x95F8,
	26361 - 11905: 0xB2DC,
	26362 - 11905: 0x95F9,
	26363 - 11905: 0x95FA,
	26364 - 11905: 0xC2FC,
	26365 - 11905: 0x95FB,
	26366 - 11905: 0xD4F8,
	26367 - 11905: 0xCCE6,
	26368 - 11905: 0xD7EE,
	26369 - 11905: 0x95FC,
	26370 - 11905: 0x95FD,
	26371 - 11905: 0x95FE,
	26372 - 11905: 0x9640,
	26373 - 11905: 0x9641,
	26374 - 11905: 0x9642,
	26375 - 11905: 0x9643,
	26376 - 11905: 0xD4C2,
	26377 - 11905: 0xD3D0,
	26378 - 11905: 0xEBC3,
	26379 - 11905: 0xC5F3,
	26380 - 11905: 0x9644,
	26381 - 11905: 0xB7FE,
	26382 - 11905: 0x9645,
	26383 - 11905: 0x9646,
	26384 - 11905: 0xEBD4,
	26385 - 11905: 0x9647,
	26386 - 11905: 0x9648,
	26387 - 11905: 0x9649,
	26388 - 11905: 0xCBB7,
	26389 - 11905: 0xEBDE,
	26390 - 11905: 0x964A,
	26391 - 11905: 0xC0CA,
	26392 - 11905: 0x964B,
	26393 - 11905: 0x964C,
	26394 - 11905: 0x964D,
	26395 - 11905: 0xCDFB,
	26396 - 11905: 0x964E,
	26397 - 11905: 0xB3AF,
	26398 - 11905: 0x964F,
	26399 - 11905: 0xC6DA,
	26400 - 11905: 0x9650,
	26401 - 11905: 0x9651,
	26402 - 11905: 0x9652,
	26403 - 11905: 0x9653,
	26404 - 11905: 0x9654,
	26405 - 11905: 0x9655,
	26406 - 11905: 0xEBFC,
	26407 - 11905: 0x9656,
	26408 - 11905: 0xC4BE,
	26409 - 11905: 0x9657,
	26410 - 11905: 0xCEB4,
	26411 - 11905: 0xC4A9,
	26412 - 11905: 0xB1BE,
	26413 - 11905: 0xD4FD,
	26414 - 11905: 0x9658,
	26415 - 11905: 0xCAF5,
	26416 - 11905: 0x9659,
	26417 - 11905: 0xD6EC,
	26418 - 11905: 0x965A,
	26419 - 11905: 0x965B,
	26420 - 11905: 0xC6D3,
	26421 - 11905: 0xB6E4,
	26422 - 11905: 0x965C,
	26423 - 11905: 0x965D,
	26424 - 11905: 0x965E,
	26425 - 11905: 0x965F,
	26426 - 11905: 0xBBFA,
	26427 - 11905: 0x9660,
	26428 - 11905: 0x9661,
	26429 - 11905: 0xD0E0,
	26430 - 11905: 0x9662,
	26431 - 11905: 0x9663,
	26432 - 11905: 0xC9B1,
	26433 - 11905: 0x9664,
	26434 - 11905: 0xD4D3,
	26435 - 11905: 0xC8A8,
	26436 - 11905: 0x9665,
	26437 - 11905: 0x9666,
	26438 - 11905: 0xB8CB,
	26439 - 11905: 0x9667,
	26440 - 11905: 0xE8BE,
	26441 - 11905: 0xC9BC,
	26442 - 11905: 0x9668,
	26443 - 11905: 0x9669,
	26444 - 11905: 0xE8BB,
	26445 - 11905: 0x966A,
	26446 - 11905: 0xC0EE,
	26447 - 11905: 0xD0D3,
	26448 - 11905: 0xB2C4,
	26449 - 11905: 0xB4E5,
	26450 - 11905: 0x966B,
	26451 - 11905: 0xE8BC,
	26452 - 11905: 0x966C,
	26453 - 11905: 0x966D,
	26454 - 11905: 0xD5C8,
	26455 - 11905: 0x966E,
	26456 - 11905: 0x966F,
	26457 - 11905: 0x9670,
	26458 - 11905: 0x9671,
	26459 - 11905: 0x9672,
	26460 - 11905: 0xB6C5,
	26461 - 11905: 0x9673,
	26462 - 11905: 0xE8BD,
	26463 - 11905: 0xCAF8,
	26464 - 11905: 0xB8DC,
	26465 - 11905: 0xCCF5,
	26466 - 11905: 0x9674,
	26467 - 11905: 0x9675,
	26468 - 11905: 0x9676,
	26469 - 11905: 0xC0B4,
	26470 - 11905: 0x9677,
	26471 - 11905: 0x9678,
	26472 - 11905: 0xD1EE,
	26473 - 11905: 0xE8BF,
	26474 - 11905: 0xE8C2,
	26475 - 11905: 0x9679,
	26476 - 11905: 0x967A,
	26477 - 11905: 0xBABC,
	26478 - 11905: 0x967B,
	26479 - 11905: 0xB1AD,
	26480 - 11905: 0xBDDC,
	26481 - 11905: 0x967C,
	26482 - 11905: 0xEABD,
	26483 - 11905: 0xE8C3,
	26484 - 11905: 0x967D,
	26485 - 11905: 0xE8C6,
	26486 - 11905: 0x967E,
	26487 - 11905: 0xE8CB,
	26488 - 11905: 0x9680,
	26489 - 11905: 0x9681,
	26490 - 11905: 0x9682,
	26491 - 11905: 0x9683,
	26492 - 11905: 0xE8CC,
	26493 - 11905: 0x9684,
	26494 - 11905: 0xCBC9,
	26495 - 11905: 0xB0E5,
	26496 - 11905: 0x9685,
	26497 - 11905: 0xBCAB,
	26498 - 11905: 0x9686,
	26499 - 11905: 0x9687,
	26500 - 11905: 0xB9B9,
	26501 - 11905: 0x9688,
	26502 - 11905: 0x9689,
	26503 - 11905: 0xE8C1,
	26504 - 11905: 0x968A,
	26505 - 11905: 0xCDF7,
	26506 - 11905: 0x968B,
	26507 - 11905: 0xE8CA,
	26508 - 11905: 0x968C,
	26509 - 11905: 0x968D,
	26510 - 11905: 0x968E,
	26511 - 11905: 0x968F,
	26512 - 11905: 0xCEF6,
	26513 - 11905: 0x9690,
	26514 - 11905: 0x9691,
	26515 - 11905: 0x9692,
	26516 - 11905: 0x9693,
	26517 - 11905: 0xD5ED,
	26518 - 11905: 0x9694,
	26519 - 11905: 0xC1D6,
	26520 - 11905: 0xE8C4,
	26521 - 11905: 0x9695,
	26522 - 11905: 0xC3B6,
	26523 - 11905: 0x9696,
	26524 - 11905: 0xB9FB,
	26525 - 11905: 0xD6A6,
	26526 - 11905: 0xE8C8,
	26527 - 11905: 0x9697,
	26528 - 11905: 0x9698,
	26529 - 11905: 0x9699,
	26530 - 11905: 0xCAE0,
	26531 - 11905: 0xD4E6,
	26532 - 11905: 0x969A,
	26533 - 11905: 0xE8C0,
	26534 - 11905: 0x969B,
	26535 - 11905: 0xE8C5,
	26536 - 11905: 0xE8C7,
	26537 - 11905: 0x969C,
	26538 - 11905: 0xC7B9,
	26539 - 11905: 0xB7E3,
	26540 - 11905: 0x969D,
	26541 - 11905: 0xE8C9,
	26542 - 11905: 0x969E,
	26543 - 11905: 0xBFDD,
	26544 - 11905: 0xE8D2,
	26545 - 11905: 0x969F,
	26546 - 11905: 0x96A0,
	26547 - 11905: 0xE8D7,
	26548 - 11905: 0x96A1,
	26549 - 11905: 0xE8D5,
	26550 - 11905: 0xBCDC,
	26551 - 11905: 0xBCCF,
	26552 - 11905: 0xE8DB,
	26553 - 11905: 0x96A2,
	26554 - 11905: 0x96A3,
	26555 - 11905: 0x96A4,
	26556 - 11905: 0x96A5,
	26557 - 11905: 0x96A6,
	26558 - 11905: 0x96A7,
	26559 - 11905: 0x96A8,
	26560 - 11905: 0x96A9,
	26561 - 11905: 0xE8DE,
	26562 - 11905: 0x96AA,
	26563 - 11905: 0xE8DA,
	26564 - 11905: 0xB1FA,
	26565 - 11905: 0x96AB,
	26566 - 11905: 0x96AC,
	26567 - 11905: 0x96AD,
	26568 - 11905: 0x96AE,
	26569 - 11905: 0x96AF,
	26570 - 11905: 0x96B0,
	26571 - 11905: 0x96B1,
	26572 - 11905: 0x96B2,
	26573 - 11905: 0x96B3,
	26574 - 11905: 0x96B4,
	26575 - 11905: 0xB0D8,
	26576 - 11905: 0xC4B3,
	26577 - 11905: 0xB8CC,
	26578 - 11905: 0xC6E2,
	26579 - 11905: 0xC8BE,
	26580 - 11905: 0xC8E1,
	26581 - 11905: 0x96B5,
	26582 - 11905: 0x96B6,
	26583 - 11905: 0x96B7,
	26584 - 11905: 0xE8CF,
	26585 - 11905: 0xE8D4,
	26586 - 11905: 0xE8D6,
	26587 - 11905: 0x96B8,
	26588 - 11905: 0xB9F1,
	26589 - 11905: 0xE8D8,
	26590 - 11905: 0xD7F5,
	26591 - 11905: 0x96B9,
	26592 - 11905: 0xC4FB,
	26593 - 11905: 0x96BA,
	26594 - 11905: 0xE8DC,
	26595 - 11905: 0x96BB,
	26596 - 11905: 0x96BC,
	26597 - 11905: 0xB2E9,
	26598 - 11905: 0x96BD,
	26599 - 11905: 0x96BE,
	26600 - 11905: 0x96BF,
	26601 - 11905: 0xE8D1,
	26602 - 11905: 0x96C0,
	26603 - 11905: 0x96C1,
	26604 - 11905: 0xBCED,
	26605 - 11905: 0x96C2,
	26606 - 11905: 0x96C3,
	26607 - 11905: 0xBFC2,
	26608 - 11905: 0xE8CD,
	26609 - 11905: 0xD6F9,
	26610 - 11905: 0x96C4,
	26611 - 11905: 0xC1F8,
	26612 - 11905: 0xB2F1,
	26613 - 11905: 0x96C5,
	26614 - 11905: 0x96C6,
	26615 - 11905: 0x96C7,
	26616 - 11905: 0x96C8,
	26617 - 11905: 0x96C9,
	26618 - 11905: 0x96CA,
	26619 - 11905: 0x96CB,
	26620 - 11905: 0x96CC,
	26621 - 11905: 0xE8DF,
	26622 - 11905: 0x96CD,
	26623 - 11905: 0xCAC1,
	26624 - 11905: 0xE8D9,
	26625 - 11905: 0x96CE,
	26626 - 11905: 0x96CF,
	26627 - 11905: 0x96D0,
	26628 - 11905: 0x96D1,
	26629 - 11905: 0xD5A4,
	26630 - 11905: 0x96D2,
	26631 - 11905: 0xB1EA,
	26632 - 11905: 0xD5BB,
	26633 - 11905: 0xE8CE,
	26634 - 11905: 0xE8D0,
	26635 - 11905: 0xB6B0,
	26636 - 11905: 0xE8D3,
	26637 - 11905: 0x96D3,
	26638 - 11905: 0xE8DD,
	26639 - 11905: 0xC0B8,
	26640 - 11905: 0x96D4,
	26641 - 11905: 0xCAF7,
	26642 - 11905: 0x96D5,
	26643 - 11905: 0xCBA8,
	26644 - 11905: 0x96D6,
	26645 - 11905: 0x96D7,
	26646 - 11905: 0xC6DC,
	26647 - 11905: 0xC0F5,
	26648 - 11905: 0x96D8,
	26649 - 11905: 0x96D9,
	26650 - 11905: 0x96DA,
	26651 - 11905: 0x96DB,
	26652 - 11905: 0x96DC,
	26653 - 11905: 0xE8E9,
	26654 - 11905: 0x96DD,
	26655 - 11905: 0x96DE,
	26656 - 11905: 0x96DF,
	26657 - 11905: 0xD0A3,
	26658 - 11905: 0x96E0,
	26659 - 11905: 0x96E1,
	26660 - 11905: 0x96E2,
	26661 - 11905: 0x96E3,
	26662 - 11905: 0x96E4,
	26663 - 11905: 0x96E5,
	26664 - 11905: 0x96E6,
	26665 - 11905: 0xE8F2,
	26666 - 11905: 0xD6EA,
	26667 - 11905: 0x96E7,
	26668 - 11905: 0x96E8,
	26669 - 11905: 0x96E9,
	26670 - 11905: 0x96EA,
	26671 - 11905: 0x96EB,
	26672 - 11905: 0x96EC,
	26673 - 11905: 0x96ED,
	26674 - 11905: 0xE8E0,
	26675 - 11905: 0xE8E1,
	26676 - 11905: 0x96EE,
	26677 - 11905: 0x96EF,
	26678 - 11905: 0x96F0,
	26679 - 11905: 0xD1F9,
	26680 - 11905: 0xBACB,
	26681 - 11905: 0xB8F9,
	26682 - 11905: 0x96F1,
	26683 - 11905: 0x96F2,
	26684 - 11905: 0xB8F1,
	26685 - 11905: 0xD4D4,
	26686 - 11905: 0xE8EF,
	26687 - 11905: 0x96F3,
	26688 - 11905: 0xE8EE,
	26689 - 11905: 0xE8EC,
	26690 - 11905: 0xB9F0,
	26691 - 11905: 0xCCD2,
	26692 - 11905: 0xE8E6,
	26693 - 11905: 0xCEA6,
	26694 - 11905: 0xBFF2,
	26695 - 11905: 0x96F4,
	26696 - 11905: 0xB0B8,
	26697 - 11905: 0xE8F1,
	26698 - 11905: 0xE8F0,
	26699 - 11905: 0x96F5,
	26700 - 11905: 0xD7C0,
	26701 - 11905: 0x96F6,
	26702 - 11905: 0xE8E4,
	26703 - 11905: 0x96F7,
	26704 - 11905: 0xCDA9,
	26705 - 11905: 0xC9A3,
	26706 - 11905: 0x96F8,
	26707 - 11905: 0xBBB8,
	26708 - 11905: 0xBDDB,
	26709 - 11905: 0xE8EA,
	26710 - 11905: 0x96F9,
	26711 - 11905: 0x96FA,
	26712 - 11905: 0x96FB,
	26713 - 11905: 0x96FC,
	26714 - 11905: 0x96FD,
	26715 - 11905: 0x96FE,
	26716 - 11905: 0x9740,
	26717 - 11905: 0x9741,
	26718 - 11905: 0x9742,
	26719 - 11905: 0x9743,
	26720 - 11905: 0xE8E2,
	26721 - 11905: 0xE8E3,
	26722 - 11905: 0xE8E5,
	26723 - 11905: 0xB5B5,
	26724 - 11905: 0xE8E7,
	26725 - 11905: 0xC7C5,
	26726 - 11905: 0xE8EB,
	26727 - 11905: 0xE8ED,
	26728 - 11905: 0xBDB0,
	26729 - 11905: 0xD7AE,
	26730 - 11905: 0x9744,
	26731 - 11905: 0xE8F8,
	26732 - 11905: 0x9745,
	26733 - 11905: 0x9746,
	26734 - 11905: 0x9747,
	26735 - 11905: 0x9748,
	26736 - 11905: 0x9749,
	26737 - 11905: 0x974A,
	26738 - 11905: 0x974B,
	26739 - 11905: 0x974C,
	26740 - 11905: 0xE8F5,
	26741 - 11905: 0x974D,
	26742 - 11905: 0xCDB0,
	26743 - 11905: 0xE8F6,
	26744 - 11905: 0x974E,
	26745 - 11905: 0x974F,
	26746 - 11905: 0x9750,
	26747 - 11905: 0x9751,
	26748 - 11905: 0x9752,
	26749 - 11905: 0x9753,
	26750 - 11905: 0x9754,
	26751 - 11905: 0x9755,
	26752 - 11905: 0x9756,
	26753 - 11905: 0xC1BA,
	26754 - 11905: 0x9757,
	26755 - 11905: 0xE8E8,
	26756 - 11905: 0x9758,
	26757 - 11905: 0xC3B7,
	26758 - 11905: 0xB0F0,
	26759 - 11905: 0x9759,
	26760 - 11905: 0x975A,
	26761 - 11905: 0x975B,
	26762 - 11905: 0x975C,
	26763 - 11905: 0x975D,
	26764 - 11905: 0x975E,
	26765 - 11905: 0x975F,
	26766 - 11905: 0x9760,
	26767 - 11905: 0xE8F4,
	26768 - 11905: 0x9761,
	26769 - 11905: 0x9762,
	26770 - 11905: 0x9763,
	26771 - 11905: 0xE8F7,
	26772 - 11905: 0x9764,
	26773 - 11905: 0x9765,
	26774 - 11905: 0x9766,
	26775 - 11905: 0xB9A3,
	26776 - 11905: 0x9767,
	26777 - 11905: 0x9768,
	26778 - 11905: 0x9769,
	26779 - 11905: 0x976A,
	26780 - 11905: 0x976B,
	26781 - 11905: 0x976C,
	26782 - 11905: 0x976D,
	26783 - 11905: 0x976E,
	26784 - 11905: 0x976F,
	26785 - 11905: 0x9770,
	26786 - 11905: 0xC9D2,
	26787 - 11905: 0x9771,
	26788 - 11905: 0x9772,
	26789 - 11905: 0x9773,
	26790 - 11905: 0xC3CE,
	26791 - 11905: 0xCEE0,
	26792 - 11905: 0xC0E6,
	26793 - 11905: 0x9774,
	26794 - 11905: 0x9775,
	26795 - 11905: 0x9776,
	26796 - 11905: 0x9777,
	26797 - 11905: 0xCBF3,
	26798 - 11905: 0x9778,
	26799 - 11905: 0xCCDD,
	26800 - 11905: 0xD0B5,
	26801 - 11905: 0x9779,
	26802 - 11905: 0x977A,
	26803 - 11905: 0xCAE1,
	26804 - 11905: 0x977B,
	26805 - 11905: 0xE8F3,
	26806 - 11905: 0x977C,
	26807 - 11905: 0x977D,
	26808 - 11905: 0x977E,
	26809 - 11905: 0x9780,
	26810 - 11905: 0x9781,
	26811 - 11905: 0x9782,
	26812 - 11905: 0x9783,
	26813 - 11905: 0x9784,
	26814 - 11905: 0x9785,
	26815 - 11905: 0x9786,
	26816 - 11905: 0xBCEC,
	26817 - 11905: 0x9787,
	26818 - 11905: 0xE8F9,
	26819 - 11905: 0x9788,
	26820 - 11905: 0x9789,
	26821 - 11905: 0x978A,
	26822 - 11905: 0x978B,
	26823 - 11905: 0x978C,
	26824 - 11905: 0x978D,
	26825 - 11905: 0xC3DE,
	26826 - 11905: 0x978E,
	26827 - 11905: 0xC6E5,
	26828 - 11905: 0x978F,
	26829 - 11905: 0xB9F7,
	26830 - 11905: 0x9790,
	26831 - 11905: 0x9791,
	26832 - 11905: 0x9792,
	26833 - 11905: 0x9793,
	26834 - 11905: 0xB0F4,
	26835 - 11905: 0x9794,
	26836 - 11905: 0x9795,
	26837 - 11905: 0xD7D8,
	26838 - 11905: 0x9796,
	26839 - 11905: 0x9797,
	26840 - 11905: 0xBCAC,
	26841 - 11905: 0x9798,
	26842 - 11905: 0xC5EF,
	26843 - 11905: 0x9799,
	26844 - 11905: 0x979A,
	26845 - 11905: 0x979B,
	26846 - 11905: 0x979C,
	26847 - 11905: 0x979D,
	26848 - 11905: 0xCCC4,
	26849 - 11905: 0x979E,
	26850 - 11905: 0x979F,
	26851 - 11905: 0xE9A6,
	26852 - 11905: 0x97A0,
	26853 - 11905: 0x97A1,
	26854 - 11905: 0x97A2,
	26855 - 11905: 0x97A3,
	26856 - 11905: 0x97A4,
	26857 - 11905: 0x97A5,
	26858 - 11905: 0x97A6,
	26859 - 11905: 0x97A7,
	26860 - 11905: 0x97A8,
	26861 - 11905: 0x97A9,
	26862 - 11905: 0xC9AD,
	26863 - 11905: 0x97AA,
	26864 - 11905: 0xE9A2,
	26865 - 11905: 0xC0E2,
	26866 - 11905: 0x97AB,
	26867 - 11905: 0x97AC,
	26868 - 11905: 0x97AD,
	26869 - 11905: 0xBFC3,
	26870 - 11905: 0x97AE,
	26871 - 11905: 0x97AF,
	26872 - 11905: 0x97B0,
	26873 - 11905: 0xE8FE,
	26874 - 11905: 0xB9D7,
	26875 - 11905: 0x97B1,
	26876 - 11905: 0xE8FB,
	26877 - 11905: 0x97B2,
	26878 - 11905: 0x97B3,
	26879 - 11905: 0x97B4,
	26880 - 11905: 0x97B5,
	26881 - 11905: 0xE9A4,
	26882 - 11905: 0x97B6,
	26883 - 11905: 0x97B7,
	26884 - 11905: 0x97B8,
	26885 - 11905: 0xD2CE,
	26886 - 11905: 0x97B9,
	26887 - 11905: 0x97BA,
	26888 - 11905: 0x97BB,
	26889 - 11905: 0x97BC,
	26890 - 11905: 0x97BD,
	26891 - 11905: 0xE9A3,
	26892 - 11905: 0x97BE,
	26893 - 11905: 0xD6B2,
	26894 - 11905: 0xD7B5,
	26895 - 11905: 0x97BF,
	26896 - 11905: 0xE9A7,
	26897 - 11905: 0x97C0,
	26898 - 11905: 0xBDB7,
	26899 - 11905: 0x97C1,
	26900 - 11905: 0x97C2,
	26901 - 11905: 0x97C3,
	26902 - 11905: 0x97C4,
	26903 - 11905: 0x97C5,
	26904 - 11905: 0x97C6,
	26905 - 11905: 0x97C7,
	26906 - 11905: 0x97C8,
	26907 - 11905: 0x97C9,
	26908 - 11905: 0x97CA,
	26909 - 11905: 0x97CB,
	26910 - 11905: 0x97CC,
	26911 - 11905: 0xE8FC,
	26912 - 11905: 0xE8FD,
	26913 - 11905: 0x97CD,
	26914 - 11905: 0x97CE,
	26915 - 11905: 0x97CF,
	26916 - 11905: 0xE9A1,
	26917 - 11905: 0x97D0,
	26918 - 11905: 0x97D1,
	26919 - 11905: 0x97D2,
	26920 - 11905: 0x97D3,
	26921 - 11905: 0x97D4,
	26922 - 11905: 0x97D5,
	26923 - 11905: 0x97D6,
	26924 - 11905: 0x97D7,
	26925 - 11905: 0xCDD6,
	26926 - 11905: 0x97D8,
	26927 - 11905: 0x97D9,
	26928 - 11905: 0xD2AC,
	26929 - 11905: 0x97DA,
	26930 - 11905: 0x97DB,
	26931 - 11905: 0x97DC,
	26932 - 11905: 0xE9B2,
	26933 - 11905: 0x97DD,
	26934 - 11905: 0x97DE,
	26935 - 11905: 0x97DF,
	26936 - 11905: 0x97E0,
	26937 - 11905: 0xE9A9,
	26938 - 11905: 0x97E1,
	26939 - 11905: 0x97E2,
	26940 - 11905: 0x97E3,
	26941 - 11905: 0xB4AA,
	26942 - 11905: 0x97E4,
	26943 - 11905: 0xB4BB,
	26944 - 11905: 0x97E5,
	26945 - 11905: 0x97E6,
	26946 - 11905: 0xE9AB,
	26947 - 11905: 0x97E7,
	26948 - 11905: 0x97E8,
	26949 - 11905: 0x97E9,
	26950 - 11905: 0x97EA,
	26951 - 11905: 0x97EB,
	26952 - 11905: 0x97EC,
	26953 - 11905: 0x97ED,
	26954 - 11905: 0x97EE,
	26955 - 11905: 0x97EF,
	26956 - 11905: 0x97F0,
	26957 - 11905: 0x97F1,
	26958 - 11905: 0x97F2,
	26959 - 11905: 0x97F3,
	26960 - 11905: 0x97F4,
	26961 - 11905: 0x97F5,
	26962 - 11905: 0x97F6,
	26963 - 11905: 0x97F7,
	26964 - 11905: 0xD0A8,
	26965 - 11905: 0x97F8,
	26966 - 11905: 0x97F9,
	26967 - 11905: 0xE9A5,
	26968 - 11905: 0x97FA,
	26969 - 11905: 0x97FB,
	26970 - 11905: 0xB3FE,
	26971 - 11905: 0x97FC,
	26972 - 11905: 0x97FD,
	26973 - 11905: 0xE9AC,
	26974 - 11905: 0xC0E3,
	26975 - 11905: 0x97FE,
	26976 - 11905: 0xE9AA,
	26977 - 11905: 0x9840,
	26978 - 11905: 0x9841,
	26979 - 11905: 0xE9B9,
	26980 - 11905: 0x9842,
	26981 - 11905: 0x9843,
	26982 - 11905: 0xE9B8,
	26983 - 11905: 0x9844,
	26984 - 11905: 0x9845,
	26985 - 11905: 0x9846,
	26986 - 11905: 0x9847,
	26987 - 11905: 0xE9AE,
	26988 - 11905: 0x9848,
	26989 - 11905: 0x9849,
	26990 - 11905: 0xE8FA,
	26991 - 11905: 0x984A,
	26992 - 11905: 0x984B,
	26993 - 11905: 0xE9A8,
	26994 - 11905: 0x984C,
	26995 - 11905: 0x984D,
	26996 - 11905: 0x984E,
	26997 - 11905: 0x984F,
	26998 - 11905: 0x9850,
	26999 - 11905: 0xBFAC,
	27000 - 11905: 0xE9B1,
	27001 - 11905: 0xE9BA,
	27002 - 11905: 0x9851,
	27003 - 11905: 0x9852,
	27004 - 11905: 0xC2A5,
	27005 - 11905: 0x9853,
	27006 - 11905: 0x9854,
	27007 - 11905: 0x9855,
	27008 - 11905: 0xE9AF,
	27009 - 11905: 0x9856,
	27010 - 11905: 0xB8C5,
	27011 - 11905: 0x9857,
	27012 - 11905: 0xE9AD,
	27013 - 11905: 0x9858,
	27014 - 11905: 0xD3DC,
	27015 - 11905: 0xE9B4,
	27016 - 11905: 0xE9B5,
	27017 - 11905: 0xE9B7,
	27018 - 11905: 0x9859,
	27019 - 11905: 0x985A,
	27020 - 11905: 0x985B,
	27021 - 11905: 0xE9C7,
	27022 - 11905: 0x985C,
	27023 - 11905: 0x985D,
	27024 - 11905: 0x985E,
	27025 - 11905: 0x985F,
	27026 - 11905: 0x9860,
	27027 - 11905: 0x9861,
	27028 - 11905: 0xC0C6,
	27029 - 11905: 0xE9C5,
	27030 - 11905: 0x9862,
	27031 - 11905: 0x9863,
	27032 - 11905: 0xE9B0,
	27033 - 11905: 0x9864,
	27034 - 11905: 0x9865,
	27035 - 11905: 0xE9BB,
	27036 - 11905: 0xB0F1,
	27037 - 11905: 0x9866,
	27038 - 11905: 0x9867,
	27039 - 11905: 0x9868,
	27040 - 11905: 0x9869,
	27041 - 11905: 0x986A,
	27042 - 11905: 0x986B,
	27043 - 11905: 0x986C,
	27044 - 11905: 0x986D,
	27045 - 11905: 0x986E,
	27046 - 11905: 0x986F,
	27047 - 11905: 0xE9BC,
	27048 - 11905: 0xD5A5,
	27049 - 11905: 0x9870,
	27050 - 11905: 0x9871,
	27051 - 11905: 0xE9BE,
	27052 - 11905: 0x9872,
	27053 - 11905: 0xE9BF,
	27054 - 11905: 0x9873,
	27055 - 11905: 0x9874,
	27056 - 11905: 0x9875,
	27057 - 11905: 0xE9C1,
	27058 - 11905: 0x9876,
	27059 - 11905: 0x9877,
	27060 - 11905: 0xC1F1,
	27061 - 11905: 0x9878,
	27062 - 11905: 0x9879,
	27063 - 11905: 0xC8B6,
	27064 - 11905: 0x987A,
	27065 - 11905: 0x987B,
	27066 - 11905: 0x987C,
	27067 - 11905: 0xE9BD,
	27068 - 11905: 0x987D,
	27069 - 11905: 0x987E,
	27070 - 11905: 0x9880,
	27071 - 11905: 0x9881,
	27072 - 11905: 0x9882,
	27073 - 11905: 0xE9C2,
	27074 - 11905: 0x9883,
	27075 - 11905: 0x9884,
	27076 - 11905: 0x9885,
	27077 - 11905: 0x9886,
	27078 - 11905: 0x9887,
	27079 - 11905: 0x9888,
	27080 - 11905: 0x9889,
	27081 - 11905: 0x988A,
	27082 - 11905: 0xE9C3,
	27083 - 11905: 0x988B,
	27084 - 11905: 0xE9B3,
	27085 - 11905: 0x988C,
	27086 - 11905: 0xE9B6,
	27087 - 11905: 0x988D,
	27088 - 11905: 0xBBB1,
	27089 - 11905: 0x988E,
	27090 - 11905: 0x988F,
	27091 - 11905: 0x9890,
	27092 - 11905: 0xE9C0,
	27093 - 11905: 0x9891,
	27094 - 11905: 0x9892,
	27095 - 11905: 0x9893,
	27096 - 11905: 0x9894,
	27097 - 11905: 0x9895,
	27098 - 11905: 0x9896,
	27099 - 11905: 0xBCF7,
	27100 - 11905: 0x9897,
	27101 - 11905: 0x9898,
	27102 - 11905: 0x9899,
	27103 - 11905: 0xE9C4,
	27104 - 11905: 0xE9C6,
	27105 - 11905: 0x989A,
	27106 - 11905: 0x989B,
	27107 - 11905: 0x989C,
	27108 - 11905: 0x989D,
	27109 - 11905: 0x989E,
	27110 - 11905: 0x989F,
	27111 - 11905: 0x98A0,
	27112 - 11905: 0x98A1,
	27113 - 11905: 0x98A2,
	27114 - 11905: 0x98A3,
	27115 - 11905: 0x98A4,
	27116 - 11905: 0x98A5,
	27117 - 11905: 0xE9CA,
	27118 - 11905: 0x98A6,
	27119 - 11905: 0x98A7,
	27120 - 11905: 0x98A8,
	27121 - 11905: 0x98A9,
	27122 - 11905: 0xE9CE,
	27123 - 11905: 0x98AA,
	27124 - 11905: 0x98AB,
	27125 - 11905: 0x98AC,
	27126 - 11905: 0x98AD,
	27127 - 11905: 0x98AE,
	27128 - 11905: 0x98AF,
	27129 - 11905: 0x98B0,
	27130 - 11905: 0x98B1,
	27131 - 11905: 0x98B2,
	27132 - 11905: 0x98B3,
	27133 - 11905: 0xB2DB,
	27134 - 11905: 0x98B4,
	27135 - 11905: 0xE9C8,
	27136 - 11905: 0x98B5,
	27137 - 11905: 0x98B6,
	27138 - 11905: 0x98B7,
	27139 - 11905: 0x98B8,
	27140 - 11905: 0x98B9,
	27141 - 11905: 0x98BA,
	27142 - 11905: 0x98BB,
	27143 - 11905: 0x98BC,
	27144 - 11905: 0x98BD,
	27145 - 11905: 0x98BE,
	27146 - 11905: 0xB7AE,
	27147 - 11905: 0x98BF,
	27148 - 11905: 0x98C0,
	27149 - 11905: 0x98C1,
	27150 - 11905: 0x98C2,
	27151 - 11905: 0x98C3,
	27152 - 11905: 0x98C4,
	27153 - 11905: 0x98C5,
	27154 - 11905: 0x98C6,
	27155 - 11905: 0x98C7,
	27156 - 11905: 0x98C8,
	27157 - 11905: 0x98C9,
	27158 - 11905: 0x98CA,
	27159 - 11905: 0xE9CB,
	27160 - 11905: 0xE9CC,
	27161 - 11905: 0x98CB,
	27162 - 11905: 0x98CC,
	27163 - 11905: 0x98CD,
	27164 - 11905: 0x98CE,
	27165 - 11905: 0x98CF,
	27166 - 11905: 0x98D0,
	27167 - 11905: 0xD5C1,
	27168 - 11905: 0x98D1,
	27169 - 11905: 0xC4A3,
	27170 - 11905: 0x98D2,
	27171 - 11905: 0x98D3,
	27172 - 11905: 0x98D4,
	27173 - 11905: 0x98D5,
	27174 - 11905: 0x98D6,
	27175 - 11905: 0x98D7,
	27176 - 11905: 0xE9D8,
	27177 - 11905: 0x98D8,
	27178 - 11905: 0xBAE1,
	27179 - 11905: 0x98D9,
	27180 - 11905: 0x98DA,
	27181 - 11905: 0x98DB,
	27182 - 11905: 0x98DC,
	27183 - 11905: 0xE9C9,
	27184 - 11905: 0x98DD,
	27185 - 11905: 0xD3A3,
	27186 - 11905: 0x98DE,
	27187 - 11905: 0x98DF,
	27188 - 11905: 0x98E0,
	27189 - 11905: 0xE9D4,
	27190 - 11905: 0x98E1,
	27191 - 11905: 0x98E2,
	27192 - 11905: 0x98E3,
	27193 - 11905: 0x98E4,
	27194 - 11905: 0x98E5,
	27195 - 11905: 0x98E6,
	27196 - 11905: 0x98E7,
	27197 - 11905: 0xE9D7,
	27198 - 11905: 0xE9D0,
	27199 - 11905: 0x98E8,
	27200 - 11905: 0x98E9,
	27201 - 11905: 0x98EA,
	27202 - 11905: 0x98EB,
	27203 - 11905: 0x98EC,
	27204 - 11905: 0xE9CF,
	27205 - 11905: 0x98ED,
	27206 - 11905: 0x98EE,
	27207 - 11905: 0xC7C1,
	27208 - 11905: 0x98EF,
	27209 - 11905: 0x98F0,
	27210 - 11905: 0x98F1,
	27211 - 11905: 0x98F2,
	27212 - 11905: 0x98F3,
	27213 - 11905: 0x98F4,
	27214 - 11905: 0x98F5,
	27215 - 11905: 0x98F6,
	27216 - 11905: 0xE9D2,
	27217 - 11905: 0x98F7,
	27218 - 11905: 0x98F8,
	27219 - 11905: 0x98F9,
	27220 - 11905: 0x98FA,
	27221 - 11905: 0x98FB,
	27222 - 11905: 0x98FC,
	27223 - 11905: 0x98FD,
	27224 - 11905: 0xE9D9,
	27225 - 11905: 0xB3C8,
	27226 - 11905: 0x98FE,
	27227 - 11905: 0xE9D3,
	27228 - 11905: 0x9940,
	27229 - 11905: 0x9941,
	27230 - 11905: 0x9942,
	27231 - 11905: 0x9943,
	27232 - 11905: 0x9944,
	27233 - 11905: 0xCFF0,
	27234 - 11905: 0x9945,
	27235 - 11905: 0x9946,
	27236 - 11905: 0x9947,
	27237 - 11905: 0xE9CD,
	27238 - 11905: 0x9948,
	27239 - 11905: 0x9949,
	27240 - 11905: 0x994A,
	27241 - 11905: 0x994B,
	27242 - 11905: 0x994C,
	27243 - 11905: 0x994D,
	27244 - 11905: 0x994E,
	27245 - 11905: 0x994F,
	27246 - 11905: 0x9950,
	27247 - 11905: 0x9951,
	27248 - 11905: 0x9952,
	27249 - 11905: 0xB3F7,
	27250 - 11905: 0x9953,
	27251 - 11905: 0x9954,
	27252 - 11905: 0x9955,
	27253 - 11905: 0x9956,
	27254 - 11905: 0x9957,
	27255 - 11905: 0x9958,
	27256 - 11905: 0x9959,
	27257 - 11905: 0xE9D6,
	27258 - 11905: 0x995A,
	27259 - 11905: 0x995B,
	27260 - 11905: 0xE9DA,
	27261 - 11905: 0x995C,
	27262 - 11905: 0x995D,
	27263 - 11905: 0x995E,
	27264 - 11905: 0xCCB4,
	27265 - 11905: 0x995F,
	27266 - 11905: 0x9960,
	27267 - 11905: 0x9961,
	27268 - 11905: 0xCFAD,
	27269 - 11905: 0x9962,
	27270 - 11905: 0x9963,
	27271 - 11905: 0x9964,
	27272 - 11905: 0x9965,
	27273 - 11905: 0x9966,
	27274 - 11905: 0x9967,
	27275 - 11905: 0x9968,
	27276 - 11905: 0x9969,
	27277 - 11905: 0x996A,
	27278 - 11905: 0xE9D5,
	27279 - 11905: 0x996B,
	27280 - 11905: 0xE9DC,
	27281 - 11905: 0xE9DB,
	27282 - 11905: 0x996C,
	27283 - 11905: 0x996D,
	27284 - 11905: 0x996E,
	27285 - 11905: 0x996F,
	27286 - 11905: 0x9970,
	27287 - 11905: 0xE9DE,
	27288 - 11905: 0x9971,
	27289 - 11905: 0x9972,
	27290 - 11905: 0x9973,
	27291 - 11905: 0x9974,
	27292 - 11905: 0x9975,
	27293 - 11905: 0x9976,
	27294 - 11905: 0x9977,
	27295 - 11905: 0x9978,
	27296 - 11905: 0xE9D1,
	27297 - 11905: 0x9979,
	27298 - 11905: 0x997A,
	27299 - 11905: 0x997B,
	27300 - 11905: 0x997C,
	27301 - 11905: 0x997D,
	27302 - 11905: 0x997E,
	27303 - 11905: 0x9980,
	27304 - 11905: 0x9981,
	27305 - 11905: 0xE9DD,
	27306 - 11905: 0x9982,
	27307 - 11905: 0xE9DF,
	27308 - 11905: 0xC3CA,
	27309 - 11905: 0x9983,
	27310 - 11905: 0x9984,
	27311 - 11905: 0x9985,
	27312 - 11905: 0x9986,
	27313 - 11905: 0x9987,
	27314 - 11905: 0x9988,
	27315 - 11905: 0x9989,
	27316 - 11905: 0x998A,
	27317 - 11905: 0x998B,
	27318 - 11905: 0x998C,
	27319 - 11905: 0x998D,
	27320 - 11905: 0x998E,
	27321 - 11905: 0x998F,
	27322 - 11905: 0x9990,
	27323 - 11905: 0x9991,
	27324 - 11905: 0x9992,
	27325 - 11905: 0x9993,
	27326 - 11905: 0x9994,
	27327 - 11905: 0x9995,
	27328 - 11905: 0x9996,
	27329 - 11905: 0x9997,
	27330 - 11905: 0x9998,
	27331 - 11905: 0x9999,
	27332 - 11905: 0x999A,
	27333 - 11905: 0x999B,
	27334 - 11905: 0x999C,
	27335 - 11905: 0x999D,
	27336 - 11905: 0x999E,
	27337 - 11905: 0x999F,
	27338 - 11905: 0x99A0,
	27339 - 11905: 0x99A1,
	27340 - 11905: 0x99A2,
	27341 - 11905: 0x99A3,
	27342 - 11905: 0x99A4,
	27343 - 11905: 0x99A5,
	27344 - 11905: 0x99A6,
	27345 - 11905: 0x99A7,
	27346 - 11905: 0x99A8,
	27347 - 11905: 0x99A9,
	27348 - 11905: 0x99AA,
	27349 - 11905: 0x99AB,
	27350 - 11905: 0x99AC,
	27351 - 11905: 0x99AD,
	27352 - 11905: 0x99AE,
	27353 - 11905: 0x99AF,
	27354 - 11905: 0x99B0,
	27355 - 11905: 0x99B1,
	27356 - 11905: 0x99B2,
	27357 - 11905: 0x99B3,
	27358 - 11905: 0x99B4,
	27359 - 11905: 0x99B5,
	27360 - 11905: 0x99B6,
	27361 - 11905: 0x99B7,
	27362 - 11905: 0x99B8,
	27363 - 11905: 0x99B9,
	27364 - 11905: 0x99BA,
	27365 - 11905: 0x99BB,
	27366 - 11905: 0x99BC,
	27367 - 11905: 0x99BD,
	27368 - 11905: 0x99BE,
	27369 - 11905: 0x99BF,
	27370 - 11905: 0x99C0,
	27371 - 11905: 0x99C1,
	27372 - 11905: 0x99C2,
	27373 - 11905: 0x99C3,
	27374 - 11905: 0x99C4,
	27375 - 11905: 0x99C5,
	27376 - 11905: 0x99C6,
	27377 - 11905: 0x99C7,
	27378 - 11905: 0x99C8,
	27379 - 11905: 0x99C9,
	27380 - 11905: 0x99CA,
	27381 - 11905: 0x99CB,
	27382 - 11905: 0x99CC,
	27383 - 11905: 0x99CD,
	27384 - 11905: 0x99CE,
	27385 - 11905: 0x99CF,
	27386 - 11905: 0x99D0,
	27387 - 11905: 0x99D1,
	27388 - 11905: 0x99D2,
	27389 - 11905: 0x99D3,
	27390 - 11905: 0x99D4,
	27391 - 11905: 0x99D5,
	27392 - 11905: 0x99D6,
	27393 - 11905: 0x99D7,
	27394 - 11905: 0x99D8,
	27395 - 11905: 0x99D9,
	27396 - 11905: 0x99DA,
	27397 - 11905: 0x99DB,
	27398 - 11905: 0x99DC,
	27399 - 11905: 0x99DD,
	27400 - 11905: 0x99DE,
	27401 - 11905: 0x99DF,
	27402 - 11905: 0x99E0,
	27403 - 11905: 0x99E1,
	27404 - 11905: 0x99E2,
	27405 - 11905: 0x99E3,
	27406 - 11905: 0x99E4,
	27407 - 11905: 0x99E5,
	27408 - 11905: 0x99E6,
	27409 - 11905: 0x99E7,
	27410 - 11905: 0x99E8,
	27411 - 11905: 0x99E9,
	27412 - 11905: 0x99EA,
	27413 - 11905: 0x99EB,
	27414 - 11905: 0x99EC,
	27415 - 11905: 0x99ED,
	27416 - 11905: 0x99EE,
	27417 - 11905: 0x99EF,
	27418 - 11905: 0x99F0,
	27419 - 11905: 0x99F1,
	27420 - 11905: 0x99F2,
	27421 - 11905: 0x99F3,
	27422 - 11905: 0x99F4,
	27423 - 11905: 0x99F5,
	27424 - 11905: 0xC7B7,
	27425 - 11905: 0xB4CE,
	27426 - 11905: 0xBBB6,
	27427 - 11905: 0xD0C0,
	27428 - 11905: 0xECA3,
	27429 - 11905: 0x99F6,
	27430 - 11905: 0x99F7,
	27431 - 11905: 0xC5B7,
	27432 - 11905: 0x99F8,
	27433 - 11905: 0x99F9,
	27434 - 11905: 0x99FA,
	27435 - 11905: 0x99FB,
	27436 - 11905: 0x99FC,
	27437 - 11905: 0x99FD,
	27438 - 11905: 0x99FE,
	27439 - 11905: 0x9A40,
	27440 - 11905: 0x9A41,
	27441 - 11905: 0x9A42,
	27442 - 11905: 0xD3FB,
	27443 - 11905: 0x9A43,
	27444 - 11905: 0x9A44,
	27445 - 11905: 0x9A45,
	27446 - 11905: 0x9A46,
	27447 - 11905: 0xECA4,
	27448 - 11905: 0x9A47,
	27449 - 11905: 0xECA5,
	27450 - 11905: 0xC6DB,
	27451 - 11905: 0x9A48,
	27452 - 11905: 0x9A49,
	27453 - 11905: 0x9A4A,
	27454 - 11905: 0xBFEE,
	27455 - 11905: 0x9A4B,
	27456 - 11905: 0x9A4C,
	27457 - 11905: 0x9A4D,
	27458 - 11905: 0x9A4E,
	27459 - 11905: 0xECA6,
	27460 - 11905: 0x9A4F,
	27461 - 11905: 0x9A50,
	27462 - 11905: 0xECA7,
	27463 - 11905: 0xD0AA,
	27464 - 11905: 0x9A51,
	27465 - 11905: 0xC7B8,
	27466 - 11905: 0x9A52,
	27467 - 11905: 0x9A53,
	27468 - 11905: 0xB8E8,
	27469 - 11905: 0x9A54,
	27470 - 11905: 0x9A55,
	27471 - 11905: 0x9A56,
	27472 - 11905: 0x9A57,
	27473 - 11905: 0x9A58,
	27474 - 11905: 0x9A59,
	27475 - 11905: 0x9A5A,
	27476 - 11905: 0x9A5B,
	27477 - 11905: 0x9A5C,
	27478 - 11905: 0x9A5D,
	27479 - 11905: 0x9A5E,
	27480 - 11905: 0x9A5F,
	27481 - 11905: 0xECA8,
	27482 - 11905: 0x9A60,
	27483 - 11905: 0x9A61,
	27484 - 11905: 0x9A62,
	27485 - 11905: 0x9A63,
	27486 - 11905: 0x9A64,
	27487 - 11905: 0x9A65,
	27488 - 11905: 0x9A66,
	27489 - 11905: 0x9A67,
	27490 - 11905: 0xD6B9,
	27491 - 11905: 0xD5FD,
	27492 - 11905: 0xB4CB,
	27493 - 11905: 0xB2BD,
	27494 - 11905: 0xCEE4,
	27495 - 11905: 0xC6E7,
	27496 - 11905: 0x9A68,
	27497 - 11905: 0x9A69,
	27498 - 11905: 0xCDE1,
	27499 - 11905: 0x9A6A,
	27500 - 11905: 0x9A6B,
	27501 - 11905: 0x9A6C,
	27502 - 11905: 0x9A6D,
	27503 - 11905: 0x9A6E,
	27504 - 11905: 0x9A6F,
	27505 - 11905: 0x9A70,
	27506 - 11905: 0x9A71,
	27507 - 11905: 0x9A72,
	27508 - 11905: 0x9A73,
	27509 - 11905: 0x9A74,
	27510 - 11905: 0x9A75,
	27511 - 11905: 0x9A76,
	27512 - 11905: 0x9A77,
	27513 - 11905: 0xB4F5,
	27514 - 11905: 0x9A78,
	27515 - 11905: 0xCBC0,
	27516 - 11905: 0xBCDF,
	27517 - 11905: 0x9A79,
	27518 - 11905: 0x9A7A,
	27519 - 11905: 0x9A7B,
	27520 - 11905: 0x9A7C,
	27521 - 11905: 0xE9E2,
	27522 - 11905: 0xE9E3,
	27523 - 11905: 0xD1EA,
	27524 - 11905: 0xE9E5,
	27525 - 11905: 0x9A7D,
	27526 - 11905: 0xB4F9,
	27527 - 11905: 0xE9E4,
	27528 - 11905: 0x9A7E,
	27529 - 11905: 0xD1B3,
	27530 - 11905: 0xCAE2,
	27531 - 11905: 0xB2D0,
	27532 - 11905: 0x9A80,
	27533 - 11905: 0xE9E8,
	27534 - 11905: 0x9A81,
	27535 - 11905: 0x9A82,
	27536 - 11905: 0x9A83,
	27537 - 11905: 0x9A84,
	27538 - 11905: 0xE9E6,
	27539 - 11905: 0xE9E7,
	27540 - 11905: 0x9A85,
	27541 - 11905: 0x9A86,
	27542 - 11905: 0xD6B3,
	27543 - 11905: 0x9A87,
	27544 - 11905: 0x9A88,
	27545 - 11905: 0x9A89,
	27546 - 11905: 0xE9E9,
	27547 - 11905: 0xE9EA,
	27548 - 11905: 0x9A8A,
	27549 - 11905: 0x9A8B,
	27550 - 11905: 0x9A8C,
	27551 - 11905: 0x9A8D,
	27552 - 11905: 0x9A8E,
	27553 - 11905: 0xE9EB,
	27554 - 11905: 0x9A8F,
	27555 - 11905: 0x9A90,
	27556 - 11905: 0x9A91,
	27557 - 11905: 0x9A92,
	27558 - 11905: 0x9A93,
	27559 - 11905: 0x9A94,
	27560 - 11905: 0x9A95,
	27561 - 11905: 0x9A96,
	27562 - 11905: 0xE9EC,
	27563 - 11905: 0x9A97,
	27564 - 11905: 0x9A98,
	27565 - 11905: 0x9A99,
	27566 - 11905: 0x9A9A,
	27567 - 11905: 0x9A9B,
	27568 - 11905: 0x9A9C,
	27569 - 11905: 0x9A9D,
	27570 - 11905: 0x9A9E,
	27571 - 11905: 0xECAF,
	27572 - 11905: 0xC5B9,
	27573 - 11905: 0xB6CE,
	27574 - 11905: 0x9A9F,
	27575 - 11905: 0xD2F3,
	27576 - 11905: 0x9AA0,
	27577 - 11905: 0x9AA1,
	27578 - 11905: 0x9AA2,
	27579 - 11905: 0x9AA3,
	27580 - 11905: 0x9AA4,
	27581 - 11905: 0x9AA5,
	27582 - 11905: 0x9AA6,
	27583 - 11905: 0xB5EE,
	27584 - 11905: 0x9AA7,
	27585 - 11905: 0xBBD9,
	27586 - 11905: 0xECB1,
	27587 - 11905: 0x9AA8,
	27588 - 11905: 0x9AA9,
	27589 - 11905: 0xD2E3,
	27590 - 11905: 0x9AAA,
	27591 - 11905: 0x9AAB,
	27592 - 11905: 0x9AAC,
	27593 - 11905: 0x9AAD,
	27594 - 11905: 0x9AAE,
	27595 - 11905: 0xCEE3,
	27596 - 11905: 0x9AAF,
	27597 - 11905: 0xC4B8,
	27598 - 11905: 0x9AB0,
	27599 - 11905: 0xC3BF,
	27600 - 11905: 0x9AB1,
	27601 - 11905: 0x9AB2,
	27602 - 11905: 0xB6BE,
	27603 - 11905: 0xD8B9,
	27604 - 11905: 0xB1C8,
	27605 - 11905: 0xB1CF,
	27606 - 11905: 0xB1D1,
	27607 - 11905: 0xC5FE,
	27608 - 11905: 0x9AB3,
	27609 - 11905: 0xB1D0,
	27610 - 11905: 0x9AB4,
	27611 - 11905: 0xC3AB,
	27612 - 11905: 0x9AB5,
	27613 - 11905: 0x9AB6,
	27614 - 11905: 0x9AB7,
	27615 - 11905: 0x9AB8,
	27616 - 11905: 0x9AB9,
	27617 - 11905: 0xD5B1,
	27618 - 11905: 0x9ABA,
	27619 - 11905: 0x9ABB,
	27620 - 11905: 0x9ABC,
	27621 - 11905: 0x9ABD,
	27622 - 11905: 0x9ABE,
	27623 - 11905: 0x9ABF,
	27624 - 11905: 0x9AC0,
	27625 - 11905: 0x9AC1,
	27626 - 11905: 0xEBA4,
	27627 - 11905: 0xBAC1,
	27628 - 11905: 0x9AC2,
	27629 - 11905: 0x9AC3,
	27630 - 11905: 0x9AC4,
	27631 - 11905: 0xCCBA,
	27632 - 11905: 0x9AC5,
	27633 - 11905: 0x9AC6,
	27634 - 11905: 0x9AC7,
	27635 - 11905: 0xEBA5,
	27636 - 11905: 0x9AC8,
	27637 - 11905: 0xEBA7,
	27638 - 11905: 0x9AC9,
	27639 - 11905: 0x9ACA,
	27640 - 11905: 0x9ACB,
	27641 - 11905: 0xEBA8,
	27642 - 11905: 0x9ACC,
	27643 - 11905: 0x9ACD,
	27644 - 11905: 0x9ACE,
	27645 - 11905: 0xEBA6,
	27646 - 11905: 0x9ACF,
	27647 - 11905: 0x9AD0,
	27648 - 11905: 0x9AD1,
	27649 - 11905: 0x9AD2,
	27650 - 11905: 0x9AD3,
	27651 - 11905: 0x9AD4,
	27652 - 11905: 0x9AD5,
	27653 - 11905: 0xEBA9,
	27654 - 11905: 0xEBAB,
	27655 - 11905: 0xEBAA,
	27656 - 11905: 0x9AD6,
	27657 - 11905: 0x9AD7,
	27658 - 11905: 0x9AD8,
	27659 - 11905: 0x9AD9,
	27660 - 11905: 0x9ADA,
	27661 - 11905: 0xEBAC,
	27662 - 11905: 0x9ADB,
	27663 - 11905: 0xCACF,
	27664 - 11905: 0xD8B5,
	27665 - 11905: 0xC3F1,
	27666 - 11905: 0x9ADC,
	27667 - 11905: 0xC3A5,
	27668 - 11905: 0xC6F8,
	27669 - 11905: 0xEBAD,
	27670 - 11905: 0xC4CA,
	27671 - 11905: 0x9ADD,
	27672 - 11905: 0xEBAE,
	27673 - 11905: 0xEBAF,
	27674 - 11905: 0xEBB0,
	27675 - 11905: 0xB7D5,
	27676 - 11905: 0x9ADE,
	27677 - 11905: 0x9ADF,
	27678 - 11905: 0x9AE0,
	27679 - 11905: 0xB7FA,
	27680 - 11905: 0x9AE1,
	27681 - 11905: 0xEBB1,
	27682 - 11905: 0xC7E2,
	27683 - 11905: 0x9AE2,
	27684 - 11905: 0xEBB3,
	27685 - 11905: 0x9AE3,
	27686 - 11905: 0xBAA4,
	27687 - 11905: 0xD1F5,
	27688 - 11905: 0xB0B1,
	27689 - 11905: 0xEBB2,
	27690 - 11905: 0xEBB4,
	27691 - 11905: 0x9AE4,
	27692 - 11905: 0x9AE5,
	27693 - 11905: 0x9AE6,
	27694 - 11905: 0xB5AA,
	27695 - 11905: 0xC2C8,
	27696 - 11905: 0xC7E8,
	27697 - 11905: 0x9AE7,
	27698 - 11905: 0xEBB5,
	27699 - 11905: 0x9AE8,
	27700 - 11905: 0xCBAE,
	27701 - 11905: 0xE3DF,
	27702 - 11905: 0x9AE9,
	27703 - 11905: 0x9AEA,
	27704 - 11905: 0xD3C0,
	27705 - 11905: 0x9AEB,
	27706 - 11905: 0x9AEC,
	27707 - 11905: 0x9AED,
	27708 - 11905: 0x9AEE,
	27709 - 11905: 0xD9DB,
	27710 - 11905: 0x9AEF,
	27711 - 11905: 0x9AF0,
	27712 - 11905: 0xCDA1,
	27713 - 11905: 0xD6AD,
	27714 - 11905: 0xC7F3,
	27715 - 11905: 0x9AF1,
	27716 - 11905: 0x9AF2,
	27717 - 11905: 0x9AF3,
	27718 - 11905: 0xD9E0,
	27719 - 11905: 0xBBE3,
	27720 - 11905: 0x9AF4,
	27721 - 11905: 0xBABA,
	27722 - 11905: 0xE3E2,
	27723 - 11905: 0x9AF5,
	27724 - 11905: 0x9AF6,
	27725 - 11905: 0x9AF7,
	27726 - 11905: 0x9AF8,
	27727 - 11905: 0x9AF9,
	27728 - 11905: 0xCFAB,
	27729 - 11905: 0x9AFA,
	27730 - 11905: 0x9AFB,
	27731 - 11905: 0x9AFC,
	27732 - 11905: 0xE3E0,
	27733 - 11905: 0xC9C7,
	27734 - 11905: 0x9AFD,
	27735 - 11905: 0xBAB9,
	27736 - 11905: 0x9AFE,
	27737 - 11905: 0x9B40,
	27738 - 11905: 0x9B41,
	27739 - 11905: 0xD1B4,
	27740 - 11905: 0xE3E1,
	27741 - 11905: 0xC8EA,
	27742 - 11905: 0xB9AF,
	27743 - 11905: 0xBDAD,
	27744 - 11905: 0xB3D8,
	27745 - 11905: 0xCEDB,
	27746 - 11905: 0x9B42,
	27747 - 11905: 0x9B43,
	27748 - 11905: 0xCCC0,
	27749 - 11905: 0x9B44,
	27750 - 11905: 0x9B45,
	27751 - 11905: 0x9B46,
	27752 - 11905: 0xE3E8,
	27753 - 11905: 0xE3E9,
	27754 - 11905: 0xCDF4,
	27755 - 11905: 0x9B47,
	27756 - 11905: 0x9B48,
	27757 - 11905: 0x9B49,
	27758 - 11905: 0x9B4A,
	27759 - 11905: 0x9B4B,
	27760 - 11905: 0xCCAD,
	27761 - 11905: 0x9B4C,
	27762 - 11905: 0xBCB3,
	27763 - 11905: 0x9B4D,
	27764 - 11905: 0xE3EA,
	27765 - 11905: 0x9B4E,
	27766 - 11905: 0xE3EB,
	27767 - 11905: 0x9B4F,
	27768 - 11905: 0x9B50,
	27769 - 11905: 0xD0DA,
	27770 - 11905: 0x9B51,
	27771 - 11905: 0x9B52,
	27772 - 11905: 0x9B53,
	27773 - 11905: 0xC6FB,
	27774 - 11905: 0xB7DA,
	27775 - 11905: 0x9B54,
	27776 - 11905: 0x9B55,
	27777 - 11905: 0xC7DF,
	27778 - 11905: 0xD2CA,
	27779 - 11905: 0xCED6,
	27780 - 11905: 0x9B56,
	27781 - 11905: 0xE3E4,
	27782 - 11905: 0xE3EC,
	27783 - 11905: 0x9B57,
	27784 - 11905: 0xC9F2,
	27785 - 11905: 0xB3C1,
	27786 - 11905: 0x9B58,
	27787 - 11905: 0x9B59,
	27788 - 11905: 0xE3E7,
	27789 - 11905: 0x9B5A,
	27790 - 11905: 0x9B5B,
	27791 - 11905: 0xC6E3,
	27792 - 11905: 0xE3E5,
	27793 - 11905: 0x9B5C,
	27794 - 11905: 0x9B5D,
	27795 - 11905: 0xEDB3,
	27796 - 11905: 0xE3E6,
	27797 - 11905: 0x9B5E,
	27798 - 11905: 0x9B5F,
	27799 - 11905: 0x9B60,
	27800 - 11905: 0x9B61,
	27801 - 11905: 0xC9B3,
	27802 - 11905: 0x9B62,
	27803 - 11905: 0xC5E6,
	27804 - 11905: 0x9B63,
	27805 - 11905: 0x9B64,
	27806 - 11905: 0x9B65,
	27807 - 11905: 0xB9B5,
	27808 - 11905: 0x9B66,
	27809 - 11905: 0xC3BB,
	27810 - 11905: 0x9B67,
	27811 - 11905: 0xE3E3,
	27812 - 11905: 0xC5BD,
	27813 - 11905: 0xC1A4,
	27814 - 11905: 0xC2D9,
	27815 - 11905: 0xB2D7,
	27816 - 11905: 0x9B68,
	27817 - 11905: 0xE3ED,
	27818 - 11905: 0xBBA6,
	27819 - 11905: 0xC4AD,
	27820 - 11905: 0x9B69,
	27821 - 11905: 0xE3F0,
	27822 - 11905: 0xBEDA,
	27823 - 11905: 0x9B6A,
	27824 - 11905: 0x9B6B,
	27825 - 11905: 0xE3FB,
	27826 - 11905: 0xE3F5,
	27827 - 11905: 0xBAD3,
	27828 - 11905: 0x9B6C,
	27829 - 11905: 0x9B6D,
	27830 - 11905: 0x9B6E,
	27831 - 11905: 0x9B6F,
	27832 - 11905: 0xB7D0,
	27833 - 11905: 0xD3CD,
	27834 - 11905: 0x9B70,
	27835 - 11905: 0xD6CE,
	27836 - 11905: 0xD5D3,
	27837 - 11905: 0xB9C1,
	27838 - 11905: 0xD5B4,
	27839 - 11905: 0xD1D8,
	27840 - 11905: 0x9B71,
	27841 - 11905: 0x9B72,
	27842 - 11905: 0x9B73,
	27843 - 11905: 0x9B74,
	27844 - 11905: 0xD0B9,
	27845 - 11905: 0xC7F6,
	27846 - 11905: 0x9B75,
	27847 - 11905: 0x9B76,
	27848 - 11905: 0x9B77,
	27849 - 11905: 0xC8AA,
	27850 - 11905: 0xB2B4,
	27851 - 11905: 0x9B78,
	27852 - 11905: 0xC3DA,
	27853 - 11905: 0x9B79,
	27854 - 11905: 0x9B7A,
	27855 - 11905: 0x9B7B,
	27856 - 11905: 0xE3EE,
	27857 - 11905: 0x9B7C,
	27858 - 11905: 0x9B7D,
	27859 - 11905: 0xE3FC,
	27860 - 11905: 0xE3EF,
	27861 - 11905: 0xB7A8,
	27862 - 11905: 0xE3F7,
	27863 - 11905: 0xE3F4,
	27864 - 11905: 0x9B7E,
	27865 - 11905: 0x9B80,
	27866 - 11905: 0x9B81,
	27867 - 11905: 0xB7BA,
	27868 - 11905: 0x9B82,
	27869 - 11905: 0x9B83,
	27870 - 11905: 0xC5A2,
	27871 - 11905: 0x9B84,
	27872 - 11905: 0xE3F6,
	27873 - 11905: 0xC5DD,
	27874 - 11905: 0xB2A8,
	27875 - 11905: 0xC6FC,
	27876 - 11905: 0x9B85,
	27877 - 11905: 0xC4E0,
	27878 - 11905: 0x9B86,
	27879 - 11905: 0x9B87,
	27880 - 11905: 0xD7A2,
	27881 - 11905: 0x9B88,
	27882 - 11905: 0xC0E1,
	27883 - 11905: 0xE3F9,
	27884 - 11905: 0x9B89,
	27885 - 11905: 0x9B8A,
	27886 - 11905: 0xE3FA,
	27887 - 11905: 0xE3FD,
	27888 - 11905: 0xCCA9,
	27889 - 11905: 0xE3F3,
	27890 - 11905: 0x9B8B,
	27891 - 11905: 0xD3BE,
	27892 - 11905: 0x9B8C,
	27893 - 11905: 0xB1C3,
	27894 - 11905: 0xEDB4,
	27895 - 11905: 0xE3F1,
	27896 - 11905: 0xE3F2,
	27897 - 11905: 0x9B8D,
	27898 - 11905: 0xE3F8,
	27899 - 11905: 0xD0BA,
	27900 - 11905: 0xC6C3,
	27901 - 11905: 0xD4F3,
	27902 - 11905: 0xE3FE,
	27903 - 11905: 0x9B8E,
	27904 - 11905: 0x9B8F,
	27905 - 11905: 0xBDE0,
	27906 - 11905: 0x9B90,
	27907 - 11905: 0x9B91,
	27908 - 11905: 0xE4A7,
	27909 - 11905: 0x9B92,
	27910 - 11905: 0x9B93,
	27911 - 11905: 0xE4A6,
	27912 - 11905: 0x9B94,
	27913 - 11905: 0x9B95,
	27914 - 11905: 0x9B96,
	27915 - 11905: 0xD1F3,
	27916 - 11905: 0xE4A3,
	27917 - 11905: 0x9B97,
	27918 - 11905: 0xE4A9,
	27919 - 11905: 0x9B98,
	27920 - 11905: 0x9B99,
	27921 - 11905: 0x9B9A,
	27922 - 11905: 0xC8F7,
	27923 - 11905: 0x9B9B,
	27924 - 11905: 0x9B9C,
	27925 - 11905: 0x9B9D,
	27926 - 11905: 0x9B9E,
	27927 - 11905: 0xCFB4,
	27928 - 11905: 0x9B9F,
	27929 - 11905: 0xE4A8,
	27930 - 11905: 0xE4AE,
	27931 - 11905: 0xC2E5,
	27932 - 11905: 0x9BA0,
	27933 - 11905: 0x9BA1,
	27934 - 11905: 0xB6B4,
	27935 - 11905: 0x9BA2,
	27936 - 11905: 0x9BA3,
	27937 - 11905: 0x9BA4,
	27938 - 11905: 0x9BA5,
	27939 - 11905: 0x9BA6,
	27940 - 11905: 0x9BA7,
	27941 - 11905: 0xBDF2,
	27942 - 11905: 0x9BA8,
	27943 - 11905: 0xE4A2,
	27944 - 11905: 0x9BA9,
	27945 - 11905: 0x9BAA,
	27946 - 11905: 0xBAE9,
	27947 - 11905: 0xE4AA,
	27948 - 11905: 0x9BAB,
	27949 - 11905: 0x9BAC,
	27950 - 11905: 0xE4AC,
	27951 - 11905: 0x9BAD,
	27952 - 11905: 0x9BAE,
	27953 - 11905: 0xB6FD,
	27954 - 11905: 0xD6DE,
	27955 - 11905: 0xE4B2,
	27956 - 11905: 0x9BAF,
	27957 - 11905: 0xE4AD,
	27958 - 11905: 0x9BB0,
	27959 - 11905: 0x9BB1,
	27960 - 11905: 0x9BB2,
	27961 - 11905: 0xE4A1,
	27962 - 11905: 0x9BB3,
	27963 - 11905: 0xBBEE,
	27964 - 11905: 0xCDDD,
	27965 - 11905: 0xC7A2,
	27966 - 11905: 0xC5C9,
	27967 - 11905: 0x9BB4,
	27968 - 11905: 0x9BB5,
	27969 - 11905: 0xC1F7,
	27970 - 11905: 0x9BB6,
	27971 - 11905: 0xE4A4,
	27972 - 11905: 0x9BB7,
	27973 - 11905: 0xC7B3,
	27974 - 11905: 0xBDAC,
	27975 - 11905: 0xBDBD,
	27976 - 11905: 0xE4A5,
	27977 - 11905: 0x9BB8,
	27978 - 11905: 0xD7C7,
	27979 - 11905: 0xB2E2,
	27980 - 11905: 0x9BB9,
	27981 - 11905: 0xE4AB,
	27982 - 11905: 0xBCC3,
	27983 - 11905: 0xE4AF,
	27984 - 11905: 0x9BBA,
	27985 - 11905: 0xBBEB,
	27986 - 11905: 0xE4B0,
	27987 - 11905: 0xC5A8,
	27988 - 11905: 0xE4B1,
	27989 - 11905: 0x9BBB,
	27990 - 11905: 0x9BBC,
	27991 - 11905: 0x9BBD,
	27992 - 11905: 0x9BBE,
	27993 - 11905: 0xD5E3,
	27994 - 11905: 0xBFA3,
	27995 - 11905: 0x9BBF,
	27996 - 11905: 0xE4BA,
	27997 - 11905: 0x9BC0,
	27998 - 11905: 0xE4B7,
	27999 - 11905: 0x9BC1,
	28000 - 11905: 0xE4BB,
	28001 - 11905: 0x9BC2,
	28002 - 11905: 0x9BC3,
	28003 - 11905: 0xE4BD,
	28004 - 11905: 0x9BC4,
	28005 - 11905: 0x9BC5,
	28006 - 11905: 0xC6D6,
	28007 - 11905: 0x9BC6,
	28008 - 11905: 0x9BC7,
	28009 - 11905: 0xBAC6,
	28010 - 11905: 0xC0CB,
	28011 - 11905: 0x9BC8,
	28012 - 11905: 0x9BC9,
	28013 - 11905: 0x9BCA,
	28014 - 11905: 0xB8A1,
	28015 - 11905: 0xE4B4,
	28016 - 11905: 0x9BCB,
	28017 - 11905: 0x9BCC,
	28018 - 11905: 0x9BCD,
	28019 - 11905: 0x9BCE,
	28020 - 11905: 0xD4A1,
	28021 - 11905: 0x9BCF,
	28022 - 11905: 0x9BD0,
	28023 - 11905: 0xBAA3,
	28024 - 11905: 0xBDFE,
	28025 - 11905: 0x9BD1,
	28026 - 11905: 0x9BD2,
	28027 - 11905: 0x9BD3,
	28028 - 11905: 0xE4BC,
	28029 - 11905: 0x9BD4,
	28030 - 11905: 0x9BD5,
	28031 - 11905: 0x9BD6,
	28032 - 11905: 0x9BD7,
	28033 - 11905: 0x9BD8,
	28034 - 11905: 0xCDBF,
	28035 - 11905: 0x9BD9,
	28036 - 11905: 0x9BDA,
	28037 - 11905: 0xC4F9,
	28038 - 11905: 0x9BDB,
	28039 - 11905: 0x9BDC,
	28040 - 11905: 0xCFFB,
	28041 - 11905: 0xC9E6,
	28042 - 11905: 0x9BDD,
	28043 - 11905: 0x9BDE,
	28044 - 11905: 0xD3BF,
	28045 - 11905: 0x9BDF,
	28046 - 11905: 0xCFD1,
	28047 - 11905: 0x9BE0,
	28048 - 11905: 0x9BE1,
	28049 - 11905: 0xE4B3,
	28050 - 11905: 0x9BE2,
	28051 - 11905: 0xE4B8,
	28052 - 11905: 0xE4B9,
	28053 - 11905: 0xCCE9,
	28054 - 11905: 0x9BE3,
	28055 - 11905: 0x9BE4,
	28056 - 11905: 0x9BE5,
	28057 - 11905: 0x9BE6,
	28058 - 11905: 0x9BE7,
	28059 - 11905: 0xCCCE,
	28060 - 11905: 0x9BE8,
	28061 - 11905: 0xC0D4,
	28062 - 11905: 0xE4B5,
	28063 - 11905: 0xC1B0,
	28064 - 11905: 0xE4B6,
	28065 - 11905: 0xCED0,
	28066 - 11905: 0x9BE9,
	28067 - 11905: 0xBBC1,
	28068 - 11905: 0xB5D3,
	28069 - 11905: 0x9BEA,
	28070 - 11905: 0xC8F3,
	28071 - 11905: 0xBDA7,
	28072 - 11905: 0xD5C7,
	28073 - 11905: 0xC9AC,
	28074 - 11905: 0xB8A2,
	28075 - 11905: 0xE4CA,
	28076 - 11905: 0x9BEB,
	28077 - 11905: 0x9BEC,
	28078 - 11905: 0xE4CC,
	28079 - 11905: 0xD1C4,
	28080 - 11905: 0x9BED,
	28081 - 11905: 0x9BEE,
	28082 - 11905: 0xD2BA,
	28083 - 11905: 0x9BEF,
	28084 - 11905: 0x9BF0,
	28085 - 11905: 0xBAAD,
	28086 - 11905: 0x9BF1,
	28087 - 11905: 0x9BF2,
	28088 - 11905: 0xBAD4,
	28089 - 11905: 0x9BF3,
	28090 - 11905: 0x9BF4,
	28091 - 11905: 0x9BF5,
	28092 - 11905: 0x9BF6,
	28093 - 11905: 0x9BF7,
	28094 - 11905: 0x9BF8,
	28095 - 11905: 0xE4C3,
	28096 - 11905: 0xB5ED,
	28097 - 11905: 0x9BF9,
	28098 - 11905: 0x9BFA,
	28099 - 11905: 0x9BFB,
	28100 - 11905: 0xD7CD,
	28101 - 11905: 0xE4C0,
	28102 - 11905: 0xCFFD,
	28103 - 11905: 0xE4BF,
	28104 - 11905: 0x9BFC,
	28105 - 11905: 0x9BFD,
	28106 - 11905: 0x9BFE,
	28107 - 11905: 0xC1DC,
	28108 - 11905: 0xCCCA,
	28109 - 11905: 0x9C40,
	28110 - 11905: 0x9C41,
	28111 - 11905: 0x9C42,
	28112 - 11905: 0x9C43,
	28113 - 11905: 0xCAE7,
	28114 - 11905: 0x9C44,
	28115 - 11905: 0x9C45,
	28116 - 11905: 0x9C46,
	28117 - 11905: 0x9C47,
	28118 - 11905: 0xC4D7,
	28119 - 11905: 0x9C48,
	28120 - 11905: 0xCCD4,
	28121 - 11905: 0xE4C8,
	28122 - 11905: 0x9C49,
	28123 - 11905: 0x9C4A,
	28124 - 11905: 0x9C4B,
	28125 - 11905: 0xE4C7,
	28126 - 11905: 0xE4C1,
	28127 - 11905: 0x9C4C,
	28128 - 11905: 0xE4C4,
	28129 - 11905: 0xB5AD,
	28130 - 11905: 0x9C4D,
	28131 - 11905: 0x9C4E,
	28132 - 11905: 0xD3D9,
	28133 - 11905: 0x9C4F,
	28134 - 11905: 0xE4C6,
	28135 - 11905: 0x9C50,
	28136 - 11905: 0x9C51,
	28137 - 11905: 0x9C52,
	28138 - 11905: 0x9C53,
	28139 - 11905: 0xD2F9,
	28140 - 11905: 0xB4E3,
	28141 - 11905: 0x9C54,
	28142 - 11905: 0xBBB4,
	28143 - 11905: 0x9C55,
	28144 - 11905: 0x9C56,
	28145 - 11905: 0xC9EE,
	28146 - 11905: 0x9C57,
	28147 - 11905: 0xB4BE,
	28148 - 11905: 0x9C58,
	28149 - 11905: 0x9C59,
	28150 - 11905: 0x9C5A,
	28151 - 11905: 0xBBEC,
	28152 - 11905: 0x9C5B,
	28153 - 11905: 0xD1CD,
	28154 - 11905: 0x9C5C,
	28155 - 11905: 0xCCED,
	28156 - 11905: 0xEDB5,
	28157 - 11905: 0x9C5D,
	28158 - 11905: 0x9C5E,
	28159 - 11905: 0x9C5F,
	28160 - 11905: 0x9C60,
	28161 - 11905: 0x9C61,
	28162 - 11905: 0x9C62,
	28163 - 11905: 0x9C63,
	28164 - 11905: 0x9C64,
	28165 - 11905: 0xC7E5,
	28166 - 11905: 0x9C65,
	28167 - 11905: 0x9C66,
	28168 - 11905: 0x9C67,
	28169 - 11905: 0x9C68,
	28170 - 11905: 0xD4A8,
	28171 - 11905: 0x9C69,
	28172 - 11905: 0xE4CB,
	28173 - 11905: 0xD7D5,
	28174 - 11905: 0xE4C2,
	28175 - 11905: 0x9C6A,
	28176 - 11905: 0xBDA5,
	28177 - 11905: 0xE4C5,
	28178 - 11905: 0x9C6B,
	28179 - 11905: 0x9C6C,
	28180 - 11905: 0xD3E6,
	28181 - 11905: 0x9C6D,
	28182 - 11905: 0xE4C9,
	28183 - 11905: 0xC9F8,
	28184 - 11905: 0x9C6E,
	28185 - 11905: 0x9C6F,
	28186 - 11905: 0xE4BE,
	28187 - 11905: 0x9C70,
	28188 - 11905: 0x9C71,
	28189 - 11905: 0xD3E5,
	28190 - 11905: 0x9C72,
	28191 - 11905: 0x9C73,
	28192 - 11905: 0xC7FE,
	28193 - 11905: 0xB6C9,
	28194 - 11905: 0x9C74,
	28195 - 11905: 0xD4FC,
	28196 - 11905: 0xB2B3,
	28197 - 11905: 0xE4D7,
	28198 - 11905: 0x9C75,
	28199 - 11905: 0x9C76,
	28200 - 11905: 0x9C77,
	28201 - 11905: 0xCEC2,
	28202 - 11905: 0x9C78,
	28203 - 11905: 0xE4CD,
	28204 - 11905: 0x9C79,
	28205 - 11905: 0xCEBC,
	28206 - 11905: 0x9C7A,
	28207 - 11905: 0xB8DB,
	28208 - 11905: 0x9C7B,
	28209 - 11905: 0x9C7C,
	28210 - 11905: 0xE4D6,
	28211 - 11905: 0x9C7D,
	28212 - 11905: 0xBFCA,
	28213 - 11905: 0x9C7E,
	28214 - 11905: 0x9C80,
	28215 - 11905: 0x9C81,
	28216 - 11905: 0xD3CE,
	28217 - 11905: 0x9C82,
	28218 - 11905: 0xC3EC,
	28219 - 11905: 0x9C83,
	28220 - 11905: 0x9C84,
	28221 - 11905: 0x9C85,
	28222 - 11905: 0x9C86,
	28223 - 11905: 0x9C87,
	28224 - 11905: 0x9C88,
	28225 - 11905: 0x9C89,
	28226 - 11905: 0x9C8A,
	28227 - 11905: 0xC5C8,
	28228 - 11905: 0xE4D8,
	28229 - 11905: 0x9C8B,
	28230 - 11905: 0x9C8C,
	28231 - 11905: 0x9C8D,
	28232 - 11905: 0x9C8E,
	28233 - 11905: 0x9C8F,
	28234 - 11905: 0x9C90,
	28235 - 11905: 0x9C91,
	28236 - 11905: 0x9C92,
	28237 - 11905: 0xCDC4,
	28238 - 11905: 0xE4CF,
	28239 - 11905: 0x9C93,
	28240 - 11905: 0x9C94,
	28241 - 11905: 0x9C95,
	28242 - 11905: 0x9C96,
	28243 - 11905: 0xE4D4,
	28244 - 11905: 0xE4D5,
	28245 - 11905: 0x9C97,
	28246 - 11905: 0xBAFE,
	28247 - 11905: 0x9C98,
	28248 - 11905: 0xCFE6,
	28249 - 11905: 0x9C99,
	28250 - 11905: 0x9C9A,
	28251 - 11905: 0xD5BF,
	28252 - 11905: 0x9C9B,
	28253 - 11905: 0x9C9C,
	28254 - 11905: 0x9C9D,
	28255 - 11905: 0xE4D2,
	28256 - 11905: 0x9C9E,
	28257 - 11905: 0x9C9F,
	28258 - 11905: 0x9CA0,
	28259 - 11905: 0x9CA1,
	28260 - 11905: 0x9CA2,
	28261 - 11905: 0x9CA3,
	28262 - 11905: 0x9CA4,
	28263 - 11905: 0x9CA5,
	28264 - 11905: 0x9CA6,
	28265 - 11905: 0x9CA7,
	28266 - 11905: 0x9CA8,
	28267 - 11905: 0xE4D0,
	28268 - 11905: 0x9CA9,
	28269 - 11905: 0x9CAA,
	28270 - 11905: 0xE4CE,
	28271 - 11905: 0x9CAB,
	28272 - 11905: 0x9CAC,
	28273 - 11905: 0x9CAD,
	28274 - 11905: 0x9CAE,
	28275 - 11905: 0x9CAF,
	28276 - 11905: 0x9CB0,
	28277 - 11905: 0x9CB1,
	28278 - 11905: 0x9CB2,
	28279 - 11905: 0x9CB3,
	28280 - 11905: 0x9CB4,
	28281 - 11905: 0x9CB5,
	28282 - 11905: 0x9CB6,
	28283 - 11905: 0x9CB7,
	28284 - 11905: 0x9CB8,
	28285 - 11905: 0x9CB9,
	28286 - 11905: 0xCDE5,
	28287 - 11905: 0xCAAA,
	28288 - 11905: 0x9CBA,
	28289 - 11905: 0x9CBB,
	28290 - 11905: 0x9CBC,
	28291 - 11905: 0xC0A3,
	28292 - 11905: 0x9CBD,
	28293 - 11905: 0xBDA6,
	28294 - 11905: 0xE4D3,
	28295 - 11905: 0x9CBE,
	28296 - 11905: 0x9CBF,
	28297 - 11905: 0xB8C8,
	28298 - 11905: 0x9CC0,
	28299 - 11905: 0x9CC1,
	28300 - 11905: 0x9CC2,
	28301 - 11905: 0x9CC3,
	28302 - 11905: 0x9CC4,
	28303 - 11905: 0xE4E7,
	28304 - 11905: 0xD4B4,
	28305 - 11905: 0x9CC5,
	28306 - 11905: 0x9CC6,
	28307 - 11905: 0x9CC7,
	28308 - 11905: 0x9CC8,
	28309 - 11905: 0x9CC9,
	28310 - 11905: 0x9CCA,
	28311 - 11905: 0x9CCB,
	28312 - 11905: 0xE4DB,
	28313 - 11905: 0x9CCC,
	28314 - 11905: 0x9CCD,
	28315 - 11905: 0x9CCE,
	28316 - 11905: 0xC1EF,
	28317 - 11905: 0x9CCF,
	28318 - 11905: 0x9CD0,
	28319 - 11905: 0xE4E9,
	28320 - 11905: 0x9CD1,
	28321 - 11905: 0x9CD2,
	28322 - 11905: 0xD2E7,
	28323 - 11905: 0x9CD3,
	28324 - 11905: 0x9CD4,
	28325 - 11905: 0xE4DF,
	28326 - 11905: 0x9CD5,
	28327 - 11905: 0xE4E0,
	28328 - 11905: 0x9CD6,
	28329 - 11905: 0x9CD7,
	28330 - 11905: 0xCFAA,
	28331 - 11905: 0x9CD8,
	28332 - 11905: 0x9CD9,
	28333 - 11905: 0x9CDA,
	28334 - 11905: 0x9CDB,
	28335 - 11905: 0xCBDD,
	28336 - 11905: 0x9CDC,
	28337 - 11905: 0xE4DA,
	28338 - 11905: 0xE4D1,
	28339 - 11905: 0x9CDD,
	28340 - 11905: 0xE4E5,
	28341 - 11905: 0x9CDE,
	28342 - 11905: 0xC8DC,
	28343 - 11905: 0xE4E3,
	28344 - 11905: 0x9CDF,
	28345 - 11905: 0x9CE0,
	28346 - 11905: 0xC4E7,
	28347 - 11905: 0xE4E2,
	28348 - 11905: 0x9CE1,
	28349 - 11905: 0xE4E1,
	28350 - 11905: 0x9CE2,
	28351 - 11905: 0x9CE3,
	28352 - 11905: 0x9CE4,
	28353 - 11905: 0xB3FC,
	28354 - 11905: 0xE4E8,
	28355 - 11905: 0x9CE5,
	28356 - 11905: 0x9CE6,
	28357 - 11905: 0x9CE7,
	28358 - 11905: 0x9CE8,
	28359 - 11905: 0xB5E1,
	28360 - 11905: 0x9CE9,
	28361 - 11905: 0x9CEA,
	28362 - 11905: 0x9CEB,
	28363 - 11905: 0xD7CC,
	28364 - 11905: 0x9CEC,
	28365 - 11905: 0x9CED,
	28366 - 11905: 0x9CEE,
	28367 - 11905: 0xE4E6,
	28368 - 11905: 0x9CEF,
	28369 - 11905: 0xBBAC,
	28370 - 11905: 0x9CF0,
	28371 - 11905: 0xD7D2,
	28372 - 11905: 0xCCCF,
	28373 - 11905: 0xEBF8,
	28374 - 11905: 0x9CF1,
	28375 - 11905: 0xE4E4,
	28376 - 11905: 0x9CF2,
	28377 - 11905: 0x9CF3,
	28378 - 11905: 0xB9F6,
	28379 - 11905: 0x9CF4,
	28380 - 11905: 0x9CF5,
	28381 - 11905: 0x9CF6,
	28382 - 11905: 0xD6CD,
	28383 - 11905: 0xE4D9,
	28384 - 11905: 0xE4DC,
	28385 - 11905: 0xC2FA,
	28386 - 11905: 0xE4DE,
	28387 - 11905: 0x9CF7,
	28388 - 11905: 0xC2CB,
	28389 - 11905: 0xC0C4,
	28390 - 11905: 0xC2D0,
	28391 - 11905: 0x9CF8,
	28392 - 11905: 0xB1F5,
	28393 - 11905: 0xCCB2,
	28394 - 11905: 0x9CF9,
	28395 - 11905: 0x9CFA,
	28396 - 11905: 0x9CFB,
	28397 - 11905: 0x9CFC,
	28398 - 11905: 0x9CFD,
	28399 - 11905: 0x9CFE,
	28400 - 11905: 0x9D40,
	28401 - 11905: 0x9D41,
	28402 - 11905: 0x9D42,
	28403 - 11905: 0x9D43,
	28404 - 11905: 0xB5CE,
	28405 - 11905: 0x9D44,
	28406 - 11905: 0x9D45,
	28407 - 11905: 0x9D46,
	28408 - 11905: 0x9D47,
	28409 - 11905: 0xE4EF,
	28410 - 11905: 0x9D48,
	28411 - 11905: 0x9D49,
	28412 - 11905: 0x9D4A,
	28413 - 11905: 0x9D4B,
	28414 - 11905: 0x9D4C,
	28415 - 11905: 0x9D4D,
	28416 - 11905: 0x9D4E,
	28417 - 11905: 0x9D4F,
	28418 - 11905: 0xC6AF,
	28419 - 11905: 0x9D50,
	28420 - 11905: 0x9D51,
	28421 - 11905: 0x9D52,
	28422 - 11905: 0xC6E1,
	28423 - 11905: 0x9D53,
	28424 - 11905: 0x9D54,
	28425 - 11905: 0xE4F5,
	28426 - 11905: 0x9D55,
	28427 - 11905: 0x9D56,
	28428 - 11905: 0x9D57,
	28429 - 11905: 0x9D58,
	28430 - 11905: 0x9D59,
	28431 - 11905: 0xC2A9,
	28432 - 11905: 0x9D5A,
	28433 - 11905: 0x9D5B,
	28434 - 11905: 0x9D5C,
	28435 - 11905: 0xC0EC,
	28436 - 11905: 0xD1DD,
	28437 - 11905: 0xE4EE,
	28438 - 11905: 0x9D5D,
	28439 - 11905: 0x9D5E,
	28440 - 11905: 0x9D5F,
	28441 - 11905: 0x9D60,
	28442 - 11905: 0x9D61,
	28443 - 11905: 0x9D62,
	28444 - 11905: 0x9D63,
	28445 - 11905: 0x9D64,
	28446 - 11905: 0x9D65,
	28447 - 11905: 0x9D66,
	28448 - 11905: 0xC4AE,
	28449 - 11905: 0x9D67,
	28450 - 11905: 0x9D68,
	28451 - 11905: 0x9D69,
	28452 - 11905: 0xE4ED,
	28453 - 11905: 0x9D6A,
	28454 - 11905: 0x9D6B,
	28455 - 11905: 0x9D6C,
	28456 - 11905: 0x9D6D,
	28457 - 11905: 0xE4F6,
	28458 - 11905: 0xE4F4,
	28459 - 11905: 0xC2FE,
	28460 - 11905: 0x9D6E,
	28461 - 11905: 0xE4DD,
	28462 - 11905: 0x9D6F,
	28463 - 11905: 0xE4F0,
	28464 - 11905: 0x9D70,
	28465 - 11905: 0xCAFE,
	28466 - 11905: 0x9D71,
	28467 - 11905: 0xD5C4,
	28468 - 11905: 0x9D72,
	28469 - 11905: 0x9D73,
	28470 - 11905: 0xE4F1,
	28471 - 11905: 0x9D74,
	28472 - 11905: 0x9D75,
	28473 - 11905: 0x9D76,
	28474 - 11905: 0x9D77,
	28475 - 11905: 0x9D78,
	28476 - 11905: 0x9D79,
	28477 - 11905: 0x9D7A,
	28478 - 11905: 0xD1FA,
	28479 - 11905: 0x9D7B,
	28480 - 11905: 0x9D7C,
	28481 - 11905: 0x9D7D,
	28482 - 11905: 0x9D7E,
	28483 - 11905: 0x9D80,
	28484 - 11905: 0x9D81,
	28485 - 11905: 0x9D82,
	28486 - 11905: 0xE4EB,
	28487 - 11905: 0xE4EC,
	28488 - 11905: 0x9D83,
	28489 - 11905: 0x9D84,
	28490 - 11905: 0x9D85,
	28491 - 11905: 0xE4F2,
	28492 - 11905: 0x9D86,
	28493 - 11905: 0xCEAB,
	28494 - 11905: 0x9D87,
	28495 - 11905: 0x9D88,
	28496 - 11905: 0x9D89,
	28497 - 11905: 0x9D8A,
	28498 - 11905: 0x9D8B,
	28499 - 11905: 0x9D8C,
	28500 - 11905: 0x9D8D,
	28501 - 11905: 0x9D8E,
	28502 - 11905: 0x9D8F,
	28503 - 11905: 0x9D90,
	28504 - 11905: 0xC5CB,
	28505 - 11905: 0x9D91,
	28506 - 11905: 0x9D92,
	28507 - 11905: 0x9D93,
	28508 - 11905: 0xC7B1,
	28509 - 11905: 0x9D94,
	28510 - 11905: 0xC2BA,
	28511 - 11905: 0x9D95,
	28512 - 11905: 0x9D96,
	28513 - 11905: 0x9D97,
	28514 - 11905: 0xE4EA,
	28515 - 11905: 0x9D98,
	28516 - 11905: 0x9D99,
	28517 - 11905: 0x9D9A,
	28518 - 11905: 0xC1CA,
	28519 - 11905: 0x9D9B,
	28520 - 11905: 0x9D9C,
	28521 - 11905: 0x9D9D,
	28522 - 11905: 0x9D9E,
	28523 - 11905: 0x9D9F,
	28524 - 11905: 0x9DA0,
	28525 - 11905: 0xCCB6,
	28526 - 11905: 0xB3B1,
	28527 - 11905: 0x9DA1,
	28528 - 11905: 0x9DA2,
	28529 - 11905: 0x9DA3,
	28530 - 11905: 0xE4FB,
	28531 - 11905: 0x9DA4,
	28532 - 11905: 0xE4F3,
	28533 - 11905: 0x9DA5,
	28534 - 11905: 0x9DA6,
	28535 - 11905: 0x9DA7,
	28536 - 11905: 0xE4FA,
	28537 - 11905: 0x9DA8,
	28538 - 11905: 0xE4FD,
	28539 - 11905: 0x9DA9,
	28540 - 11905: 0xE4FC,
	28541 - 11905: 0x9DAA,
	28542 - 11905: 0x9DAB,
	28543 - 11905: 0x9DAC,
	28544 - 11905: 0x9DAD,
	28545 - 11905: 0x9DAE,
	28546 - 11905: 0x9DAF,
	28547 - 11905: 0x9DB0,
	28548 - 11905: 0xB3CE,
	28549 - 11905: 0x9DB1,
	28550 - 11905: 0x9DB2,
	28551 - 11905: 0x9DB3,
	28552 - 11905: 0xB3BA,
	28553 - 11905: 0xE4F7,
	28554 - 11905: 0x9DB4,
	28555 - 11905: 0x9DB5,
	28556 - 11905: 0xE4F9,
	28557 - 11905: 0xE4F8,
	28558 - 11905: 0xC5EC,
	28559 - 11905: 0x9DB6,
	28560 - 11905: 0x9DB7,
	28561 - 11905: 0x9DB8,
	28562 - 11905: 0x9DB9,
	28563 - 11905: 0x9DBA,
	28564 - 11905: 0x9DBB,
	28565 - 11905: 0x9DBC,
	28566 - 11905: 0x9DBD,
	28567 - 11905: 0x9DBE,
	28568 - 11905: 0x9DBF,
	28569 - 11905: 0x9DC0,
	28570 - 11905: 0x9DC1,
	28571 - 11905: 0x9DC2,
	28572 - 11905: 0xC0BD,
	28573 - 11905: 0x9DC3,
	28574 - 11905: 0x9DC4,
	28575 - 11905: 0x9DC5,
	28576 - 11905: 0x9DC6,
	28577 - 11905: 0xD4E8,
	28578 - 11905: 0x9DC7,
	28579 - 11905: 0x9DC8,
	28580 - 11905: 0x9DC9,
	28581 - 11905: 0x9DCA,
	28582 - 11905: 0x9DCB,
	28583 - 11905: 0xE5A2,
	28584 - 11905: 0x9DCC,
	28585 - 11905: 0x9DCD,
	28586 - 11905: 0x9DCE,
	28587 - 11905: 0x9DCF,
	28588 - 11905: 0x9DD0,
	28589 - 11905: 0x9DD1,
	28590 - 11905: 0x9DD2,
	28591 - 11905: 0x9DD3,
	28592 - 11905: 0x9DD4,
	28593 - 11905: 0x9DD5,
	28594 - 11905: 0x9DD6,
	28595 - 11905: 0xB0C4,
	28596 - 11905: 0x9DD7,
	28597 - 11905: 0x9DD8,
	28598 - 11905: 0xE5A4,
	28599 - 11905: 0x9DD9,
	28600 - 11905: 0x9DDA,
	28601 - 11905: 0xE5A3,
	28602 - 11905: 0x9DDB,
	28603 - 11905: 0x9DDC,
	28604 - 11905: 0x9DDD,
	28605 - 11905: 0x9DDE,
	28606 - 11905: 0x9DDF,
	28607 - 11905: 0x9DE0,
	28608 - 11905: 0xBCA4,
	28609 - 11905: 0x9DE1,
	28610 - 11905: 0xE5A5,
	28611 - 11905: 0x9DE2,
	28612 - 11905: 0x9DE3,
	28613 - 11905: 0x9DE4,
	28614 - 11905: 0x9DE5,
	28615 - 11905: 0x9DE6,
	28616 - 11905: 0x9DE7,
	28617 - 11905: 0xE5A1,
	28618 - 11905: 0x9DE8,
	28619 - 11905: 0x9DE9,
	28620 - 11905: 0x9DEA,
	28621 - 11905: 0x9DEB,
	28622 - 11905: 0x9DEC,
	28623 - 11905: 0x9DED,
	28624 - 11905: 0x9DEE,
	28625 - 11905: 0xE4FE,
	28626 - 11905: 0xB1F4,
	28627 - 11905: 0x9DEF,
	28628 - 11905: 0x9DF0,
	28629 - 11905: 0x9DF1,
	28630 - 11905: 0x9DF2,
	28631 - 11905: 0x9DF3,
	28632 - 11905: 0x9DF4,
	28633 - 11905: 0x9DF5,
	28634 - 11905: 0x9DF6,
	28635 - 11905: 0x9DF7,
	28636 - 11905: 0x9DF8,
	28637 - 11905: 0x9DF9,
	28638 - 11905: 0xE5A8,
	28639 - 11905: 0x9DFA,
	28640 - 11905: 0xE5A9,
	28641 - 11905: 0xE5A6,
	28642 - 11905: 0x9DFB,
	28643 - 11905: 0x9DFC,
	28644 - 11905: 0x9DFD,
	28645 - 11905: 0x9DFE,
	28646 - 11905: 0x9E40,
	28647 - 11905: 0x9E41,
	28648 - 11905: 0x9E42,
	28649 - 11905: 0x9E43,
	28650 - 11905: 0x9E44,
	28651 - 11905: 0x9E45,
	28652 - 11905: 0x9E46,
	28653 - 11905: 0x9E47,
	28654 - 11905: 0xE5A7,
	28655 - 11905: 0xE5AA,
	28656 - 11905: 0x9E48,
	28657 - 11905: 0x9E49,
	28658 - 11905: 0x9E4A,
	28659 - 11905: 0x9E4B,
	28660 - 11905: 0x9E4C,
	28661 - 11905: 0x9E4D,
	28662 - 11905: 0x9E4E,
	28663 - 11905: 0x9E4F,
	28664 - 11905: 0x9E50,
	28665 - 11905: 0x9E51,
	28666 - 11905: 0x9E52,
	28667 - 11905: 0x9E53,
	28668 - 11905: 0x9E54,
	28669 - 11905: 0x9E55,
	28670 - 11905: 0x9E56,
	28671 - 11905: 0x9E57,
	28672 - 11905: 0x9E58,
	28673 - 11905: 0x9E59,
	28674 - 11905: 0x9E5A,
	28675 - 11905: 0x9E5B,
	28676 - 11905: 0x9E5C,
	28677 - 11905: 0x9E5D,
	28678 - 11905: 0x9E5E,
	28679 - 11905: 0x9E5F,
	28680 - 11905: 0x9E60,
	28681 - 11905: 0x9E61,
	28682 - 11905: 0x9E62,
	28683 - 11905: 0x9E63,
	28684 - 11905: 0x9E64,
	28685 - 11905: 0x9E65,
	28686 - 11905: 0x9E66,
	28687 - 11905: 0x9E67,
	28688 - 11905: 0x9E68,
	28689 - 11905: 0xC6D9,
	28690 - 11905: 0x9E69,
	28691 - 11905: 0x9E6A,
	28692 - 11905: 0x9E6B,
	28693 - 11905: 0x9E6C,
	28694 - 11905: 0x9E6D,
	28695 - 11905: 0x9E6E,
	28696 - 11905: 0x9E6F,
	28697 - 11905: 0x9E70,
	28698 - 11905: 0xE5AB,
	28699 - 11905: 0xE5AD,
	28700 - 11905: 0x9E71,
	28701 - 11905: 0x9E72,
	28702 - 11905: 0x9E73,
	28703 - 11905: 0x9E74,
	28704 - 11905: 0x9E75,
	28705 - 11905: 0x9E76,
	28706 - 11905: 0x9E77,
	28707 - 11905: 0xE5AC,
	28708 - 11905: 0x9E78,
	28709 - 11905: 0x9E79,
	28710 - 11905: 0x9E7A,
	28711 - 11905: 0x9E7B,
	28712 - 11905: 0x9E7C,
	28713 - 11905: 0x9E7D,
	28714 - 11905: 0x9E7E,
	28715 - 11905: 0x9E80,
	28716 - 11905: 0x9E81,
	28717 - 11905: 0x9E82,
	28718 - 11905: 0x9E83,
	28719 - 11905: 0x9E84,
	28720 - 11905: 0x9E85,
	28721 - 11905: 0x9E86,
	28722 - 11905: 0x9E87,
	28723 - 11905: 0x9E88,
	28724 - 11905: 0x9E89,
	28725 - 11905: 0xE5AF,
	28726 - 11905: 0x9E8A,
	28727 - 11905: 0x9E8B,
	28728 - 11905: 0x9E8C,
	28729 - 11905: 0xE5AE,
	28730 - 11905: 0x9E8D,
	28731 - 11905: 0x9E8E,
	28732 - 11905: 0x9E8F,
	28733 - 11905: 0x9E90,
	28734 - 11905: 0x9E91,
	28735 - 11905: 0x9E92,
	28736 - 11905: 0x9E93,
	28737 - 11905: 0x9E94,
	28738 - 11905: 0x9E95,
	28739 - 11905: 0x9E96,
	28740 - 11905: 0x9E97,
	28741 - 11905: 0x9E98,
	28742 - 11905: 0x9E99,
	28743 - 11905: 0x9E9A,
	28744 - 11905: 0x9E9B,
	28745 - 11905: 0x9E9C,
	28746 - 11905: 0x9E9D,
	28747 - 11905: 0x9E9E,
	28748 - 11905: 0xB9E0,
	28749 - 11905: 0x9E9F,
	28750 - 11905: 0x9EA0,
	28751 - 11905: 0xE5B0,
	28752 - 11905: 0x9EA1,
	28753 - 11905: 0x9EA2,
	28754 - 11905: 0x9EA3,
	28755 - 11905: 0x9EA4,
	28756 - 11905: 0x9EA5,
	28757 - 11905: 0x9EA6,
	28758 - 11905: 0x9EA7,
	28759 - 11905: 0x9EA8,
	28760 - 11905: 0x9EA9,
	28761 - 11905: 0x9EAA,
	28762 - 11905: 0x9EAB,
	28763 - 11905: 0x9EAC,
	28764 - 11905: 0x9EAD,
	28765 - 11905: 0x9EAE,
	28766 - 11905: 0xE5B1,
	28767 - 11905: 0x9EAF,
	28768 - 11905: 0x9EB0,
	28769 - 11905: 0x9EB1,
	28770 - 11905: 0x9EB2,
	28771 - 11905: 0x9EB3,
	28772 - 11905: 0x9EB4,
	28773 - 11905: 0x9EB5,
	28774 - 11905: 0x9EB6,
	28775 - 11905: 0x9EB7,
	28776 - 11905: 0x9EB8,
	28777 - 11905: 0x9EB9,
	28778 - 11905: 0x9EBA,
	28779 - 11905: 0xBBF0,
	28780 - 11905: 0xECE1,
	28781 - 11905: 0xC3F0,
	28782 - 11905: 0x9EBB,
	28783 - 11905: 0xB5C6,
	28784 - 11905: 0xBBD2,
	28785 - 11905: 0x9EBC,
	28786 - 11905: 0x9EBD,
	28787 - 11905: 0x9EBE,
	28788 - 11905: 0x9EBF,
	28789 - 11905: 0xC1E9,
	28790 - 11905: 0xD4EE,
	28791 - 11905: 0x9EC0,
	28792 - 11905: 0xBEC4,
	28793 - 11905: 0x9EC1,
	28794 - 11905: 0x9EC2,
	28795 - 11905: 0x9EC3,
	28796 - 11905: 0xD7C6,
	28797 - 11905: 0x9EC4,
	28798 - 11905: 0xD4D6,
	28799 - 11905: 0xB2D3,
	28800 - 11905: 0xECBE,
	28801 - 11905: 0x9EC5,
	28802 - 11905: 0x9EC6,
	28803 - 11905: 0x9EC7,
	28804 - 11905: 0x9EC8,
	28805 - 11905: 0xEAC1,
	28806 - 11905: 0x9EC9,
	28807 - 11905: 0x9ECA,
	28808 - 11905: 0x9ECB,
	28809 - 11905: 0xC2AF,
	28810 - 11905: 0xB4B6,
	28811 - 11905: 0x9ECC,
	28812 - 11905: 0x9ECD,
	28813 - 11905: 0x9ECE,
	28814 - 11905: 0xD1D7,
	28815 - 11905: 0x9ECF,
	28816 - 11905: 0x9ED0,
	28817 - 11905: 0x9ED1,
	28818 - 11905: 0xB3B4,
	28819 - 11905: 0x9ED2,
	28820 - 11905: 0xC8B2,
	28821 - 11905: 0xBFBB,
	28822 - 11905: 0xECC0,
	28823 - 11905: 0x9ED3,
	28824 - 11905: 0x9ED4,
	28825 - 11905: 0xD6CB,
	28826 - 11905: 0x9ED5,
	28827 - 11905: 0x9ED6,
	28828 - 11905: 0xECBF,
	28829 - 11905: 0xECC1,
	28830 - 11905: 0x9ED7,
	28831 - 11905: 0x9ED8,
	28832 - 11905: 0x9ED9,
	28833 - 11905: 0x9EDA,
	28834 - 11905: 0x9EDB,
	28835 - 11905: 0x9EDC,
	28836 - 11905: 0x9EDD,
	28837 - 11905: 0x9EDE,
	28838 - 11905: 0x9EDF,
	28839 - 11905: 0x9EE0,
	28840 - 11905: 0x9EE1,
	28841 - 11905: 0x9EE2,
	28842 - 11905: 0x9EE3,
	28843 - 11905: 0xECC5,
	28844 - 11905: 0xBEE6,
	28845 - 11905: 0xCCBF,
	28846 - 11905: 0xC5DA,
	28847 - 11905: 0xBEBC,
	28848 - 11905: 0x9EE4,
	28849 - 11905: 0xECC6,
	28850 - 11905: 0x9EE5,
	28851 - 11905: 0xB1FE,
	28852 - 11905: 0x9EE6,
	28853 - 11905: 0x9EE7,
	28854 - 11905: 0x9EE8,
	28855 - 11905: 0xECC4,
	28856 - 11905: 0xD5A8,
	28857 - 11905: 0xB5E3,
	28858 - 11905: 0x9EE9,
	28859 - 11905: 0xECC2,
	28860 - 11905: 0xC1B6,
	28861 - 11905: 0xB3E3,
	28862 - 11905: 0x9EEA,
	28863 - 11905: 0x9EEB,
	28864 - 11905: 0xECC3,
	28865 - 11905: 0xCBB8,
	28866 - 11905: 0xC0C3,
	28867 - 11905: 0xCCFE,
	28868 - 11905: 0x9EEC,
	28869 - 11905: 0x9EED,
	28870 - 11905: 0x9EEE,
	28871 - 11905: 0x9EEF,
	28872 - 11905: 0xC1D2,
	28873 - 11905: 0x9EF0,
	28874 - 11905: 0xECC8,
	28875 - 11905: 0x9EF1,
	28876 - 11905: 0x9EF2,
	28877 - 11905: 0x9EF3,
	28878 - 11905: 0x9EF4,
	28879 - 11905: 0x9EF5,
	28880 - 11905: 0x9EF6,
	28881 - 11905: 0x9EF7,
	28882 - 11905: 0x9EF8,
	28883 - 11905: 0x9EF9,
	28884 - 11905: 0x9EFA,
	28885 - 11905: 0x9EFB,
	28886 - 11905: 0x9EFC,
	28887 - 11905: 0x9EFD,
	28888 - 11905: 0xBAE6,
	28889 - 11905: 0xC0D3,
	28890 - 11905: 0x9EFE,
	28891 - 11905: 0xD6F2,
	28892 - 11905: 0x9F40,
	28893 - 11905: 0x9F41,
	28894 - 11905: 0x9F42,
	28895 - 11905: 0xD1CC,
	28896 - 11905: 0x9F43,
	28897 - 11905: 0x9F44,
	28898 - 11905: 0x9F45,
	28899 - 11905: 0x9F46,
	28900 - 11905: 0xBFBE,
	28901 - 11905: 0x9F47,
	28902 - 11905: 0xB7B3,
	28903 - 11905: 0xC9D5,
	28904 - 11905: 0xECC7,
	28905 - 11905: 0xBBE2,
	28906 - 11905: 0x9F48,
	28907 - 11905: 0xCCCC,
	28908 - 11905: 0xBDFD,
	28909 - 11905: 0xC8C8,
	28910 - 11905: 0x9F49,
	28911 - 11905: 0xCFA9,
	28912 - 11905: 0x9F4A,
	28913 - 11905: 0x9F4B,
	28914 - 11905: 0x9F4C,
	28915 - 11905: 0x9F4D,
	28916 - 11905: 0x9F4E,
	28917 - 11905: 0x9F4F,
	28918 - 11905: 0x9F50,
	28919 - 11905: 0xCDE9,
	28920 - 11905: 0x9F51,
	28921 - 11905: 0xC5EB,
	28922 - 11905: 0x9F52,
	28923 - 11905: 0x9F53,
	28924 - 11905: 0x9F54,
	28925 - 11905: 0xB7E9,
	28926 - 11905: 0x9F55,
	28927 - 11905: 0x9F56,
	28928 - 11905: 0x9F57,
	28929 - 11905: 0x9F58,
	28930 - 11905: 0x9F59,
	28931 - 11905: 0x9F5A,
	28932 - 11905: 0x9F5B,
	28933 - 11905: 0x9F5C,
	28934 - 11905: 0x9F5D,
	28935 - 11905: 0x9F5E,
	28936 - 11905: 0x9F5F,
	28937 - 11905: 0xD1C9,
	28938 - 11905: 0xBAB8,
	28939 - 11905: 0x9F60,
	28940 - 11905: 0x9F61,
	28941 - 11905: 0x9F62,
	28942 - 11905: 0x9F63,
	28943 - 11905: 0x9F64,
	28944 - 11905: 0xECC9,
	28945 - 11905: 0x9F65,
	28946 - 11905: 0x9F66,
	28947 - 11905: 0xECCA,
	28948 - 11905: 0x9F67,
	28949 - 11905: 0xBBC0,
	28950 - 11905: 0xECCB,
	28951 - 11905: 0x9F68,
	28952 - 11905: 0xECE2,
	28953 - 11905: 0xB1BA,
	28954 - 11905: 0xB7D9,
	28955 - 11905: 0x9F69,
	28956 - 11905: 0x9F6A,
	28957 - 11905: 0x9F6B,
	28958 - 11905: 0x9F6C,
	28959 - 11905: 0x9F6D,
	28960 - 11905: 0x9F6E,
	28961 - 11905: 0x9F6F,
	28962 - 11905: 0x9F70,
	28963 - 11905: 0x9F71,
	28964 - 11905: 0x9F72,
	28965 - 11905: 0x9F73,
	28966 - 11905: 0xBDB9,
	28967 - 11905: 0x9F74,
	28968 - 11905: 0x9F75,
	28969 - 11905: 0x9F76,
	28970 - 11905: 0x9F77,
	28971 - 11905: 0x9F78,
	28972 - 11905: 0x9F79,
	28973 - 11905: 0x9F7A,
	28974 - 11905: 0x9F7B,
	28975 - 11905: 0xECCC,
	28976 - 11905: 0xD1E6,
	28977 - 11905: 0xECCD,
	28978 - 11905: 0x9F7C,
	28979 - 11905: 0x9F7D,
	28980 - 11905: 0x9F7E,
	28981 - 11905: 0x9F80,
	28982 - 11905: 0xC8BB,
	28983 - 11905: 0x9F81,
	28984 - 11905: 0x9F82,
	28985 - 11905: 0x9F83,
	28986 - 11905: 0x9F84,
	28987 - 11905: 0x9F85,
	28988 - 11905: 0x9F86,
	28989 - 11905: 0x9F87,
	28990 - 11905: 0x9F88,
	28991 - 11905: 0x9F89,
	28992 - 11905: 0x9F8A,
	28993 - 11905: 0x9F8B,
	28994 - 11905: 0x9F8C,
	28995 - 11905: 0x9F8D,
	28996 - 11905: 0x9F8E,
	28997 - 11905: 0xECD1,
	28998 - 11905: 0x9F8F,
	28999 - 11905: 0x9F90,
	29000 - 11905: 0x9F91,
	29001 - 11905: 0x9F92,
	29002 - 11905: 0xECD3,
	29003 - 11905: 0x9F93,
	29004 - 11905: 0xBBCD,
	29005 - 11905: 0x9F94,
	29006 - 11905: 0xBCE5,
	29007 - 11905: 0x9F95,
	29008 - 11905: 0x9F96,
	29009 - 11905: 0x9F97,
	29010 - 11905: 0x9F98,
	29011 - 11905: 0x9F99,
	29012 - 11905: 0x9F9A,
	29013 - 11905: 0x9F9B,
	29014 - 11905: 0x9F9C,
	29015 - 11905: 0x9F9D,
	29016 - 11905: 0x9F9E,
	29017 - 11905: 0x9F9F,
	29018 - 11905: 0x9FA0,
	29019 - 11905: 0x9FA1,
	29020 - 11905: 0xECCF,
	29021 - 11905: 0x9FA2,
	29022 - 11905: 0xC9B7,
	29023 - 11905: 0x9FA3,
	29024 - 11905: 0x9FA4,
	29025 - 11905: 0x9FA5,
	29026 - 11905: 0x9FA6,
	29027 - 11905: 0x9FA7,
	29028 - 11905: 0xC3BA,
	29029 - 11905: 0x9FA8,
	29030 - 11905: 0xECE3,
	29031 - 11905: 0xD5D5,
	29032 - 11905: 0xECD0,
	29033 - 11905: 0x9FA9,
	29034 - 11905: 0x9FAA,
	29035 - 11905: 0x9FAB,
	29036 - 11905: 0x9FAC,
	29037 - 11905: 0x9FAD,
	29038 - 11905: 0xD6F3,
	29039 - 11905: 0x9FAE,
	29040 - 11905: 0x9FAF,
	29041 - 11905: 0x9FB0,
	29042 - 11905: 0xECD2,
	29043 - 11905: 0xECCE,
	29044 - 11905: 0x9FB1,
	29045 - 11905: 0x9FB2,
	29046 - 11905: 0x9FB3,
	29047 - 11905: 0x9FB4,
	29048 - 11905: 0xECD4,
	29049 - 11905: 0x9FB5,
	29050 - 11905: 0xECD5,
	29051 - 11905: 0x9FB6,
	29052 - 11905: 0x9FB7,
	29053 - 11905: 0xC9BF,
	29054 - 11905: 0x9FB8,
	29055 - 11905: 0x9FB9,
	29056 - 11905: 0x9FBA,
	29057 - 11905: 0x9FBB,
	29058 - 11905: 0x9FBC,
	29059 - 11905: 0x9FBD,
	29060 - 11905: 0xCFA8,
	29061 - 11905: 0x9FBE,
	29062 - 11905: 0x9FBF,
	29063 - 11905: 0x9FC0,
	29064 - 11905: 0x9FC1,
	29065 - 11905: 0x9FC2,
	29066 - 11905: 0xD0DC,
	29067 - 11905: 0x9FC3,
	29068 - 11905: 0x9FC4,
	29069 - 11905: 0x9FC5,
	29070 - 11905: 0x9FC6,
	29071 - 11905: 0xD1AC,
	29072 - 11905: 0x9FC7,
	29073 - 11905: 0x9FC8,
	29074 - 11905: 0x9FC9,
	29075 - 11905: 0x9FCA,
	29076 - 11905: 0xC8DB,
	29077 - 11905: 0x9FCB,
	29078 - 11905: 0x9FCC,
	29079 - 11905: 0x9FCD,
	29080 - 11905: 0xECD6,
	29081 - 11905: 0xCEF5,
	29082 - 11905: 0x9FCE,
	29083 - 11905: 0x9FCF,
	29084 - 11905: 0x9FD0,
	29085 - 11905: 0x9FD1,
	29086 - 11905: 0x9FD2,
	29087 - 11905: 0xCAEC,
	29088 - 11905: 0xECDA,
	29089 - 11905: 0x9FD3,
	29090 - 11905: 0x9FD4,
	29091 - 11905: 0x9FD5,
	29092 - 11905: 0x9FD6,
	29093 - 11905: 0x9FD7,
	29094 - 11905: 0x9FD8,
	29095 - 11905: 0x9FD9,
	29096 - 11905: 0xECD9,
	29097 - 11905: 0x9FDA,
	29098 - 11905: 0x9FDB,
	29099 - 11905: 0x9FDC,
	29100 - 11905: 0xB0BE,
	29101 - 11905: 0x9FDD,
	29102 - 11905: 0x9FDE,
	29103 - 11905: 0x9FDF,
	29104 - 11905: 0x9FE0,
	29105 - 11905: 0x9FE1,
	29106 - 11905: 0x9FE2,
	29107 - 11905: 0xECD7,
	29108 - 11905: 0x9FE3,
	29109 - 11905: 0xECD8,
	29110 - 11905: 0x9FE4,
	29111 - 11905: 0x9FE5,
	29112 - 11905: 0x9FE6,
	29113 - 11905: 0xECE4,
	29114 - 11905: 0x9FE7,
	29115 - 11905: 0x9FE8,
	29116 - 11905: 0x9FE9,
	29117 - 11905: 0x9FEA,
	29118 - 11905: 0x9FEB,
	29119 - 11905: 0x9FEC,
	29120 - 11905: 0x9FED,
	29121 - 11905: 0x9FEE,
	29122 - 11905: 0x9FEF,
	29123 - 11905: 0xC8BC,
	29124 - 11905: 0x9FF0,
	29125 - 11905: 0x9FF1,
	29126 - 11905: 0x9FF2,
	29127 - 11905: 0x9FF3,
	29128 - 11905: 0x9FF4,
	29129 - 11905: 0x9FF5,
	29130 - 11905: 0x9FF6,
	29131 - 11905: 0x9FF7,
	29132 - 11905: 0x9FF8,
	29133 - 11905: 0x9FF9,
	29134 - 11905: 0xC1C7,
	29135 - 11905: 0x9FFA,
	29136 - 11905: 0x9FFB,
	29137 - 11905: 0x9FFC,
	29138 - 11905: 0x9FFD,
	29139 - 11905: 0x9FFE,
	29140 - 11905: 0xECDC,
	29141 - 11905: 0xD1E0,
	29142 - 11905: 0xA040,
	29143 - 11905: 0xA041,
	29144 - 11905: 0xA042,
	29145 - 11905: 0xA043,
	29146 - 11905: 0xA044,
	29147 - 11905: 0xA045,
	29148 - 11905: 0xA046,
	29149 - 11905: 0xA047,
	29150 - 11905: 0xA048,
	29151 - 11905: 0xA049,
	29152 - 11905: 0xECDB,
	29153 - 11905: 0xA04A,
	29154 - 11905: 0xA04B,
	29155 - 11905: 0xA04C,
	29156 - 11905: 0xA04D,
	29157 - 11905: 0xD4EF,
	29158 - 11905: 0xA04E,
	29159 - 11905: 0xECDD,
	29160 - 11905: 0xA04F,
	29161 - 11905: 0xA050,
	29162 - 11905: 0xA051,
	29163 - 11905: 0xA052,
	29164 - 11905: 0xA053,
	29165 - 11905: 0xA054,
	29166 - 11905: 0xDBC6,
	29167 - 11905: 0xA055,
	29168 - 11905: 0xA056,
	29169 - 11905: 0xA057,
	29170 - 11905: 0xA058,
	29171 - 11905: 0xA059,
	29172 - 11905: 0xA05A,
	29173 - 11905: 0xA05B,
	29174 - 11905: 0xA05C,
	29175 - 11905: 0xA05D,
	29176 - 11905: 0xA05E,
	29177 - 11905: 0xECDE,
	29178 - 11905: 0xA05F,
	29179 - 11905: 0xA060,
	29180 - 11905: 0xA061,
	29181 - 11905: 0xA062,
	29182 - 11905: 0xA063,
	29183 - 11905: 0xA064,
	29184 - 11905: 0xA065,
	29185 - 11905: 0xA066,
	29186 - 11905: 0xA067,
	29187 - 11905: 0xA068,
	29188 - 11905: 0xA069,
	29189 - 11905: 0xA06A,
	29190 - 11905: 0xB1AC,
	29191 - 11905: 0xA06B,
	29192 - 11905: 0xA06C,
	29193 - 11905: 0xA06D,
	29194 - 11905: 0xA06E,
	29195 - 11905: 0xA06F,
	29196 - 11905: 0xA070,
	29197 - 11905: 0xA071,
	29198 - 11905: 0xA072,
	29199 - 11905: 0xA073,
	29200 - 11905: 0xA074,
	29201 - 11905: 0xA075,
	29202 - 11905: 0xA076,
	29203 - 11905: 0xA077,
	29204 - 11905: 0xA078,
	29205 - 11905: 0xA079,
	29206 - 11905: 0xA07A,
	29207 - 11905: 0xA07B,
	29208 - 11905: 0xA07C,
	29209 - 11905: 0xA07D,
	29210 - 11905: 0xA07E,
	29211 - 11905: 0xA080,
	29212 - 11905: 0xA081,
	29213 - 11905: 0xECDF,
	29214 - 11905: 0xA082,
	29215 - 11905: 0xA083,
	29216 - 11905: 0xA084,
	29217 - 11905: 0xA085,
	29218 - 11905: 0xA086,
	29219 - 11905: 0xA087,
	29220 - 11905: 0xA088,
	29221 - 11905: 0xA089,
	29222 - 11905: 0xA08A,
	29223 - 11905: 0xA08B,
	29224 - 11905: 0xECE0,
	29225 - 11905: 0xA08C,
	29226 - 11905: 0xD7A6,
	29227 - 11905: 0xA08D,
	29228 - 11905: 0xC5C0,
	29229 - 11905: 0xA08E,
	29230 - 11905: 0xA08F,
	29231 - 11905: 0xA090,
	29232 - 11905: 0xEBBC,
	29233 - 11905: 0xB0AE,
	29234 - 11905: 0xA091,
	29235 - 11905: 0xA092,
	29236 - 11905: 0xA093,
	29237 - 11905: 0xBEF4,
	29238 - 11905: 0xB8B8,
	29239 - 11905: 0xD2AF,
	29240 - 11905: 0xB0D6,
	29241 - 11905: 0xB5F9,
	29242 - 11905: 0xA094,
	29243 - 11905: 0xD8B3,
	29244 - 11905: 0xA095,
	29245 - 11905: 0xCBAC,
	29246 - 11905: 0xA096,
	29247 - 11905: 0xE3DD,
	29248 - 11905: 0xA097,
	29249 - 11905: 0xA098,
	29250 - 11905: 0xA099,
	29251 - 11905: 0xA09A,
	29252 - 11905: 0xA09B,
	29253 - 11905: 0xA09C,
	29254 - 11905: 0xA09D,
	29255 - 11905: 0xC6AC,
	29256 - 11905: 0xB0E6,
	29257 - 11905: 0xA09E,
	29258 - 11905: 0xA09F,
	29259 - 11905: 0xA0A0,
	29260 - 11905: 0xC5C6,
	29261 - 11905: 0xEBB9,
	29262 - 11905: 0xA0A1,
	29263 - 11905: 0xA0A2,
	29264 - 11905: 0xA0A3,
	29265 - 11905: 0xA0A4,
	29266 - 11905: 0xEBBA,
	29267 - 11905: 0xA0A5,
	29268 - 11905: 0xA0A6,
	29269 - 11905: 0xA0A7,
	29270 - 11905: 0xEBBB,
	29271 - 11905: 0xA0A8,
	29272 - 11905: 0xA0A9,
	29273 - 11905: 0xD1C0,
	29274 - 11905: 0xA0AA,
	29275 - 11905: 0xC5A3,
	29276 - 11905: 0xA0AB,
	29277 - 11905: 0xEAF2,
	29278 - 11905: 0xA0AC,
	29279 - 11905: 0xC4B2,
	29280 - 11905: 0xA0AD,
	29281 - 11905: 0xC4B5,
	29282 - 11905: 0xC0CE,
	29283 - 11905: 0xA0AE,
	29284 - 11905: 0xA0AF,
	29285 - 11905: 0xA0B0,
	29286 - 11905: 0xEAF3,
	29287 - 11905: 0xC4C1,
	29288 - 11905: 0xA0B1,
	29289 - 11905: 0xCEEF,
	29290 - 11905: 0xA0B2,
	29291 - 11905: 0xA0B3,
	29292 - 11905: 0xA0B4,
	29293 - 11905: 0xA0B5,
	29294 - 11905: 0xEAF0,
	29295 - 11905: 0xEAF4,
	29296 - 11905: 0xA0B6,
	29297 - 11905: 0xA0B7,
	29298 - 11905: 0xC9FC,
	29299 - 11905: 0xA0B8,
	29300 - 11905: 0xA0B9,
	29301 - 11905: 0xC7A3,
	29302 - 11905: 0xA0BA,
	29303 - 11905: 0xA0BB,
	29304 - 11905: 0xA0BC,
	29305 - 11905: 0xCCD8,
	29306 - 11905: 0xCEFE,
	29307 - 11905: 0xA0BD,
	29308 - 11905: 0xA0BE,
	29309 - 11905: 0xA0BF,
	29310 - 11905: 0xEAF5,
	29311 - 11905: 0xEAF6,
	29312 - 11905: 0xCFAC,
	29313 - 11905: 0xC0E7,
	29314 - 11905: 0xA0C0,
	29315 - 11905: 0xA0C1,
	29316 - 11905: 0xEAF7,
	29317 - 11905: 0xA0C2,
	29318 - 11905: 0xA0C3,
	29319 - 11905: 0xA0C4,
	29320 - 11905: 0xA0C5,
	29321 - 11905: 0xA0C6,
	29322 - 11905: 0xB6BF,
	29323 - 11905: 0xEAF8,
	29324 - 11905: 0xA0C7,
	29325 - 11905: 0xEAF9,
	29326 - 11905: 0xA0C8,
	29327 - 11905: 0xEAFA,
	29328 - 11905: 0xA0C9,
	29329 - 11905: 0xA0CA,
	29330 - 11905: 0xEAFB,
	29331 - 11905: 0xA0CB,
	29332 - 11905: 0xA0CC,
	29333 - 11905: 0xA0CD,
	29334 - 11905: 0xA0CE,
	29335 - 11905: 0xA0CF,
	29336 - 11905: 0xA0D0,
	29337 - 11905: 0xA0D1,
	29338 - 11905: 0xA0D2,
	29339 - 11905: 0xA0D3,
	29340 - 11905: 0xA0D4,
	29341 - 11905: 0xA0D5,
	29342 - 11905: 0xA0D6,
	29343 - 11905: 0xEAF1,
	29344 - 11905: 0xA0D7,
	29345 - 11905: 0xA0D8,
	29346 - 11905: 0xA0D9,
	29347 - 11905: 0xA0DA,
	29348 - 11905: 0xA0DB,
	29349 - 11905: 0xA0DC,
	29350 - 11905: 0xA0DD,
	29351 - 11905: 0xA0DE,
	29352 - 11905: 0xA0DF,
	29353 - 11905: 0xA0E0,
	29354 - 11905: 0xA0E1,
	29355 - 11905: 0xA0E2,
	29356 - 11905: 0xC8AE,
	29357 - 11905: 0xE1EB,
	29358 - 11905: 0xA0E3,
	29359 - 11905: 0xB7B8,
	29360 - 11905: 0xE1EC,
	29361 - 11905: 0xA0E4,
	29362 - 11905: 0xA0E5,
	29363 - 11905: 0xA0E6,
	29364 - 11905: 0xE1ED,
	29365 - 11905: 0xA0E7,
	29366 - 11905: 0xD7B4,
	29367 - 11905: 0xE1EE,
	29368 - 11905: 0xE1EF,
	29369 - 11905: 0xD3CC,
	29370 - 11905: 0xA0E8,
	29371 - 11905: 0xA0E9,
	29372 - 11905: 0xA0EA,
	29373 - 11905: 0xA0EB,
	29374 - 11905: 0xA0EC,
	29375 - 11905: 0xA0ED,
	29376 - 11905: 0xA0EE,
	29377 - 11905: 0xE1F1,
	29378 - 11905: 0xBFF1,
	29379 - 11905: 0xE1F0,
	29380 - 11905: 0xB5D2,
	29381 - 11905: 0xA0EF,
	29382 - 11905: 0xA0F0,
	29383 - 11905: 0xA0F1,
	29384 - 11905: 0xB1B7,
	29385 - 11905: 0xA0F2,
	29386 - 11905: 0xA0F3,
	29387 - 11905: 0xA0F4,
	29388 - 11905: 0xA0F5,
	29389 - 11905: 0xE1F3,
	29390 - 11905: 0xE1F2,
	29391 - 11905: 0xA0F6,
	29392 - 11905: 0xBAFC,
	29393 - 11905: 0xA0F7,
	29394 - 11905: 0xE1F4,
	29395 - 11905: 0xA0F8,
	29396 - 11905: 0xA0F9,
	29397 - 11905: 0xA0FA,
	29398 - 11905: 0xA0FB,
	29399 - 11905: 0xB9B7,
	29400 - 11905: 0xA0FC,
	29401 - 11905: 0xBED1,
	29402 - 11905: 0xA0FD,
	29403 - 11905: 0xA0FE,
	29404 - 11905: 0xAA40,
	29405 - 11905: 0xAA41,
	29406 - 11905: 0xC4FC,
	29407 - 11905: 0xAA42,
	29408 - 11905: 0xBADD,
	29409 - 11905: 0xBDC6,
	29410 - 11905: 0xAA43,
	29411 - 11905: 0xAA44,
	29412 - 11905: 0xAA45,
	29413 - 11905: 0xAA46,
	29414 - 11905: 0xAA47,
	29415 - 11905: 0xAA48,
	29416 - 11905: 0xE1F5,
	29417 - 11905: 0xE1F7,
	29418 - 11905: 0xAA49,
	29419 - 11905: 0xAA4A,
	29420 - 11905: 0xB6C0,
	29421 - 11905: 0xCFC1,
	29422 - 11905: 0xCAA8,
	29423 - 11905: 0xE1F6,
	29424 - 11905: 0xD5F8,
	29425 - 11905: 0xD3FC,
	29426 - 11905: 0xE1F8,
	29427 - 11905: 0xE1FC,
	29428 - 11905: 0xE1F9,
	29429 - 11905: 0xAA4B,
	29430 - 11905: 0xAA4C,
	29431 - 11905: 0xE1FA,
	29432 - 11905: 0xC0EA,
	29433 - 11905: 0xAA4D,
	29434 - 11905: 0xE1FE,
	29435 - 11905: 0xE2A1,
	29436 - 11905: 0xC0C7,
	29437 - 11905: 0xAA4E,
	29438 - 11905: 0xAA4F,
	29439 - 11905: 0xAA50,
	29440 - 11905: 0xAA51,
	29441 - 11905: 0xE1FB,
	29442 - 11905: 0xAA52,
	29443 - 11905: 0xE1FD,
	29444 - 11905: 0xAA53,
	29445 - 11905: 0xAA54,
	29446 - 11905: 0xAA55,
	29447 - 11905: 0xAA56,
	29448 - 11905: 0xAA57,
	29449 - 11905: 0xAA58,
	29450 - 11905: 0xE2A5,
	29451 - 11905: 0xAA59,
	29452 - 11905: 0xAA5A,
	29453 - 11905: 0xAA5B,
	29454 - 11905: 0xC1D4,
	29455 - 11905: 0xAA5C,
	29456 - 11905: 0xAA5D,
	29457 - 11905: 0xAA5E,
	29458 - 11905: 0xAA5F,
	29459 - 11905: 0xE2A3,
	29460 - 11905: 0xAA60,
	29461 - 11905: 0xE2A8,
	29462 - 11905: 0xB2FE,
	29463 - 11905: 0xE2A2,
	29464 - 11905: 0xAA61,
	29465 - 11905: 0xAA62,
	29466 - 11905: 0xAA63,
	29467 - 11905: 0xC3CD,
	29468 - 11905: 0xB2C2,
	29469 - 11905: 0xE2A7,
	29470 - 11905: 0xE2A6,
	29471 - 11905: 0xAA64,
	29472 - 11905: 0xAA65,
	29473 - 11905: 0xE2A4,
	29474 - 11905: 0xE2A9,
	29475 - 11905: 0xAA66,
	29476 - 11905: 0xAA67,
	29477 - 11905: 0xE2AB,
	29478 - 11905: 0xAA68,
	29479 - 11905: 0xAA69,
	29480 - 11905: 0xAA6A,
	29481 - 11905: 0xD0C9,
	29482 - 11905: 0xD6ED,
	29483 - 11905: 0xC3A8,
	29484 - 11905: 0xE2AC,
	29485 - 11905: 0xAA6B,
	29486 - 11905: 0xCFD7,
	29487 - 11905: 0xAA6C,
	29488 - 11905: 0xAA6D,
	29489 - 11905: 0xE2AE,
	29490 - 11905: 0xAA6E,
	29491 - 11905: 0xAA6F,
	29492 - 11905: 0xBAEF,
	29493 - 11905: 0xAA70,
	29494 - 11905: 0xAA71,
	29495 - 11905: 0xE9E0,
	29496 - 11905: 0xE2AD,
	29497 - 11905: 0xE2AA,
	29498 - 11905: 0xAA72,
	29499 - 11905: 0xAA73,
	29500 - 11905: 0xAA74,
	29501 - 11905: 0xAA75,
	29502 - 11905: 0xBBAB,
	29503 - 11905: 0xD4B3,
	29504 - 11905: 0xAA76,
	29505 - 11905: 0xAA77,
	29506 - 11905: 0xAA78,
	29507 - 11905: 0xAA79,
	29508 - 11905: 0xAA7A,
	29509 - 11905: 0xAA7B,
	29510 - 11905: 0xAA7C,
	29511 - 11905: 0xAA7D,
	29512 - 11905: 0xAA7E,
	29513 - 11905: 0xAA80,
	29514 - 11905: 0xAA81,
	29515 - 11905: 0xAA82,
	29516 - 11905: 0xAA83,
	29517 - 11905: 0xE2B0,
	29518 - 11905: 0xAA84,
	29519 - 11905: 0xAA85,
	29520 - 11905: 0xE2AF,
	29521 - 11905: 0xAA86,
	29522 - 11905: 0xE9E1,
	29523 - 11905: 0xAA87,
	29524 - 11905: 0xAA88,
	29525 - 11905: 0xAA89,
	29526 - 11905: 0xAA8A,
	29527 - 11905: 0xE2B1,
	29528 - 11905: 0xAA8B,
	29529 - 11905: 0xAA8C,
	29530 - 11905: 0xAA8D,
	29531 - 11905: 0xAA8E,
	29532 - 11905: 0xAA8F,
	29533 - 11905: 0xAA90,
	29534 - 11905: 0xAA91,
	29535 - 11905: 0xAA92,
	29536 - 11905: 0xE2B2,
	29537 - 11905: 0xAA93,
	29538 - 11905: 0xAA94,
	29539 - 11905: 0xAA95,
	29540 - 11905: 0xAA96,
	29541 - 11905: 0xAA97,
	29542 - 11905: 0xAA98,
	29543 - 11905: 0xAA99,
	29544 - 11905: 0xAA9A,
	29545 - 11905: 0xAA9B,
	29546 - 11905: 0xAA9C,
	29547 - 11905: 0xAA9D,
	29548 - 11905: 0xE2B3,
	29549 - 11905: 0xCCA1,
	29550 - 11905: 0xAA9E,
	29551 - 11905: 0xE2B4,
	29552 - 11905: 0xAA9F,
	29553 - 11905: 0xAAA0,
	29554 - 11905: 0xAB40,
	29555 - 11905: 0xAB41,
	29556 - 11905: 0xAB42,
	29557 - 11905: 0xAB43,
	29558 - 11905: 0xAB44,
	29559 - 11905: 0xAB45,
	29560 - 11905: 0xAB46,
	29561 - 11905: 0xAB47,
	29562 - 11905: 0xAB48,
	29563 - 11905: 0xAB49,
	29564 - 11905: 0xAB4A,
	29565 - 11905: 0xAB4B,
	29566 - 11905: 0xE2B5,
	29567 - 11905: 0xAB4C,
	29568 - 11905: 0xAB4D,
	29569 - 11905: 0xAB4E,
	29570 - 11905: 0xAB4F,
	29571 - 11905: 0xAB50,
	29572 - 11905: 0xD0FE,
	29573 - 11905: 0xAB51,
	29574 - 11905: 0xAB52,
	29575 - 11905: 0xC2CA,
	29576 - 11905: 0xAB53,
	29577 - 11905: 0xD3F1,
	29578 - 11905: 0xAB54,
	29579 - 11905: 0xCDF5,
	29580 - 11905: 0xAB55,
	29581 - 11905: 0xAB56,
	29582 - 11905: 0xE7E0,
	29583 - 11905: 0xAB57,
	29584 - 11905: 0xAB58,
	29585 - 11905: 0xE7E1,
	29586 - 11905: 0xAB59,
	29587 - 11905: 0xAB5A,
	29588 - 11905: 0xAB5B,
	29589 - 11905: 0xAB5C,
	29590 - 11905: 0xBEC1,
	29591 - 11905: 0xAB5D,
	29592 - 11905: 0xAB5E,
	29593 - 11905: 0xAB5F,
	29594 - 11905: 0xAB60,
	29595 - 11905: 0xC2EA,
	29596 - 11905: 0xAB61,
	29597 - 11905: 0xAB62,
	29598 - 11905: 0xAB63,
	29599 - 11905: 0xE7E4,
	29600 - 11905: 0xAB64,
	29601 - 11905: 0xAB65,
	29602 - 11905: 0xE7E3,
	29603 - 11905: 0xAB66,
	29604 - 11905: 0xAB67,
	29605 - 11905: 0xAB68,
	29606 - 11905: 0xAB69,
	29607 - 11905: 0xAB6A,
	29608 - 11905: 0xAB6B,
	29609 - 11905: 0xCDE6,
	29610 - 11905: 0xAB6C,
	29611 - 11905: 0xC3B5,
	29612 - 11905: 0xAB6D,
	29613 - 11905: 0xAB6E,
	29614 - 11905: 0xE7E2,
	29615 - 11905: 0xBBB7,
	29616 - 11905: 0xCFD6,
	29617 - 11905: 0xAB6F,
	29618 - 11905: 0xC1E1,
	29619 - 11905: 0xE7E9,
	29620 - 11905: 0xAB70,
	29621 - 11905: 0xAB71,
	29622 - 11905: 0xAB72,
	29623 - 11905: 0xE7E8,
	29624 - 11905: 0xAB73,
	29625 - 11905: 0xAB74,
	29626 - 11905: 0xE7F4,
	29627 - 11905: 0xB2A3,
	29628 - 11905: 0xAB75,
	29629 - 11905: 0xAB76,
	29630 - 11905: 0xAB77,
	29631 - 11905: 0xAB78,
	29632 - 11905: 0xE7EA,
	29633 - 11905: 0xAB79,
	29634 - 11905: 0xE7E6,
	29635 - 11905: 0xAB7A,
	29636 - 11905: 0xAB7B,
	29637 - 11905: 0xAB7C,
	29638 - 11905: 0xAB7D,
	29639 - 11905: 0xAB7E,
	29640 - 11905: 0xE7EC,
	29641 - 11905: 0xE7EB,
	29642 - 11905: 0xC9BA,
	29643 - 11905: 0xAB80,
	29644 - 11905: 0xAB81,
	29645 - 11905: 0xD5E4,
	29646 - 11905: 0xAB82,
	29647 - 11905: 0xE7E5,
	29648 - 11905: 0xB7A9,
	29649 - 11905: 0xE7E7,
	29650 - 11905: 0xAB83,
	29651 - 11905: 0xAB84,
	29652 - 11905: 0xAB85,
	29653 - 11905: 0xAB86,
	29654 - 11905: 0xAB87,
	29655 - 11905: 0xAB88,
	29656 - 11905: 0xAB89,
	29657 - 11905: 0xE7EE,
	29658 - 11905: 0xAB8A,
	29659 - 11905: 0xAB8B,
	29660 - 11905: 0xAB8C,
	29661 - 11905: 0xAB8D,
	29662 - 11905: 0xE7F3,
	29663 - 11905: 0xAB8E,
	29664 - 11905: 0xD6E9,
	29665 - 11905: 0xAB8F,
	29666 - 11905: 0xAB90,
	29667 - 11905: 0xAB91,
	29668 - 11905: 0xAB92,
	29669 - 11905: 0xE7ED,
	29670 - 11905: 0xAB93,
	29671 - 11905: 0xE7F2,
	29672 - 11905: 0xAB94,
	29673 - 11905: 0xE7F1,
	29674 - 11905: 0xAB95,
	29675 - 11905: 0xAB96,
	29676 - 11905: 0xAB97,
	29677 - 11905: 0xB0E0,
	29678 - 11905: 0xAB98,
	29679 - 11905: 0xAB99,
	29680 - 11905: 0xAB9A,
	29681 - 11905: 0xAB9B,
	29682 - 11905: 0xE7F5,
	29683 - 11905: 0xAB9C,
	29684 - 11905: 0xAB9D,
	29685 - 11905: 0xAB9E,
	29686 - 11905: 0xAB9F,
	29687 - 11905: 0xABA0,
	29688 - 11905: 0xAC40,
	29689 - 11905: 0xAC41,
	29690 - 11905: 0xAC42,
	29691 - 11905: 0xAC43,
	29692 - 11905: 0xAC44,
	29693 - 11905: 0xAC45,
	29694 - 11905: 0xAC46,
	29695 - 11905: 0xAC47,
	29696 - 11905: 0xAC48,
	29697 - 11905: 0xAC49,
	29698 - 11905: 0xAC4A,
	29699 - 11905: 0xC7F2,
	29700 - 11905: 0xAC4B,
	29701 - 11905: 0xC0C5,
	29702 - 11905: 0xC0ED,
	29703 - 11905: 0xAC4C,
	29704 - 11905: 0xAC4D,
	29705 - 11905: 0xC1F0,
	29706 - 11905: 0xE7F0,
	29707 - 11905: 0xAC4E,
	29708 - 11905: 0xAC4F,
	29709 - 11905: 0xAC50,
	29710 - 11905: 0xAC51,
	29711 - 11905: 0xE7F6,
	29712 - 11905: 0xCBF6,
	29713 - 11905: 0xAC52,
	29714 - 11905: 0xAC53,
	29715 - 11905: 0xAC54,
	29716 - 11905: 0xAC55,
	29717 - 11905: 0xAC56,
	29718 - 11905: 0xAC57,
	29719 - 11905: 0xAC58,
	29720 - 11905: 0xAC59,
	29721 - 11905: 0xAC5A,
	29722 - 11905: 0xE8A2,
	29723 - 11905: 0xE8A1,
	29724 - 11905: 0xAC5B,
	29725 - 11905: 0xAC5C,
	29726 - 11905: 0xAC5D,
	29727 - 11905: 0xAC5E,
	29728 - 11905: 0xAC5F,
	29729 - 11905: 0xAC60,
	29730 - 11905: 0xD7C1,
	29731 - 11905: 0xAC61,
	29732 - 11905: 0xAC62,
	29733 - 11905: 0xE7FA,
	29734 - 11905: 0xE7F9,
	29735 - 11905: 0xAC63,
	29736 - 11905: 0xE7FB,
	29737 - 11905: 0xAC64,
	29738 - 11905: 0xE7F7,
	29739 - 11905: 0xAC65,
	29740 - 11905: 0xE7FE,
	29741 - 11905: 0xAC66,
	29742 - 11905: 0xE7FD,
	29743 - 11905: 0xAC67,
	29744 - 11905: 0xE7FC,
	29745 - 11905: 0xAC68,
	29746 - 11905: 0xAC69,
	29747 - 11905: 0xC1D5,
	29748 - 11905: 0xC7D9,
	29749 - 11905: 0xC5FD,
	29750 - 11905: 0xC5C3,
	29751 - 11905: 0xAC6A,
	29752 - 11905: 0xAC6B,
	29753 - 11905: 0xAC6C,
	29754 - 11905: 0xAC6D,
	29755 - 11905: 0xAC6E,
	29756 - 11905: 0xC7ED,
	29757 - 11905: 0xAC6F,
	29758 - 11905: 0xAC70,
	29759 - 11905: 0xAC71,
	29760 - 11905: 0xAC72,
	29761 - 11905: 0xE8A3,
	29762 - 11905: 0xAC73,
	29763 - 11905: 0xAC74,
	29764 - 11905: 0xAC75,
	29765 - 11905: 0xAC76,
	29766 - 11905: 0xAC77,
	29767 - 11905: 0xAC78,
	29768 - 11905: 0xAC79,
	29769 - 11905: 0xAC7A,
	29770 - 11905: 0xAC7B,
	29771 - 11905: 0xAC7C,
	29772 - 11905: 0xAC7D,
	29773 - 11905: 0xAC7E,
	29774 - 11905: 0xAC80,
	29775 - 11905: 0xAC81,
	29776 - 11905: 0xAC82,
	29777 - 11905: 0xAC83,
	29778 - 11905: 0xAC84,
	29779 - 11905: 0xAC85,
	29780 - 11905: 0xAC86,
	29781 - 11905: 0xE8A6,
	29782 - 11905: 0xAC87,
	29783 - 11905: 0xE8A5,
	29784 - 11905: 0xAC88,
	29785 - 11905: 0xE8A7,
	29786 - 11905: 0xBAF7,
	29787 - 11905: 0xE7F8,
	29788 - 11905: 0xE8A4,
	29789 - 11905: 0xAC89,
	29790 - 11905: 0xC8F0,
	29791 - 11905: 0xC9AA,
	29792 - 11905: 0xAC8A,
	29793 - 11905: 0xAC8B,
	29794 - 11905: 0xAC8C,
	29795 - 11905: 0xAC8D,
	29796 - 11905: 0xAC8E,
	29797 - 11905: 0xAC8F,
	29798 - 11905: 0xAC90,
	29799 - 11905: 0xAC91,
	29800 - 11905: 0xAC92,
	29801 - 11905: 0xAC93,
	29802 - 11905: 0xAC94,
	29803 - 11905: 0xAC95,
	29804 - 11905: 0xAC96,
	29805 - 11905: 0xE8A9,
	29806 - 11905: 0xAC97,
	29807 - 11905: 0xAC98,
	29808 - 11905: 0xB9E5,
	29809 - 11905: 0xAC99,
	29810 - 11905: 0xAC9A,
	29811 - 11905: 0xAC9B,
	29812 - 11905: 0xAC9C,
	29813 - 11905: 0xAC9D,
	29814 - 11905: 0xD1FE,
	29815 - 11905: 0xE8A8,
	29816 - 11905: 0xAC9E,
	29817 - 11905: 0xAC9F,
	29818 - 11905: 0xACA0,
	29819 - 11905: 0xAD40,
	29820 - 11905: 0xAD41,
	29821 - 11905: 0xAD42,
	29822 - 11905: 0xE8AA,
	29823 - 11905: 0xAD43,
	29824 - 11905: 0xE8AD,
	29825 - 11905: 0xE8AE,
	29826 - 11905: 0xAD44,
	29827 - 11905: 0xC1A7,
	29828 - 11905: 0xAD45,
	29829 - 11905: 0xAD46,
	29830 - 11905: 0xAD47,
	29831 - 11905: 0xE8AF,
	29832 - 11905: 0xAD48,
	29833 - 11905: 0xAD49,
	29834 - 11905: 0xAD4A,
	29835 - 11905: 0xE8B0,
	29836 - 11905: 0xAD4B,
	29837 - 11905: 0xAD4C,
	29838 - 11905: 0xE8AC,
	29839 - 11905: 0xAD4D,
	29840 - 11905: 0xE8B4,
	29841 - 11905: 0xAD4E,
	29842 - 11905: 0xAD4F,
	29843 - 11905: 0xAD50,
	29844 - 11905: 0xAD51,
	29845 - 11905: 0xAD52,
	29846 - 11905: 0xAD53,
	29847 - 11905: 0xAD54,
	29848 - 11905: 0xAD55,
	29849 - 11905: 0xAD56,
	29850 - 11905: 0xAD57,
	29851 - 11905: 0xAD58,
	29852 - 11905: 0xE8AB,
	29853 - 11905: 0xAD59,
	29854 - 11905: 0xE8B1,
	29855 - 11905: 0xAD5A,
	29856 - 11905: 0xAD5B,
	29857 - 11905: 0xAD5C,
	29858 - 11905: 0xAD5D,
	29859 - 11905: 0xAD5E,
	29860 - 11905: 0xAD5F,
	29861 - 11905: 0xAD60,
	29862 - 11905: 0xAD61,
	29863 - 11905: 0xE8B5,
	29864 - 11905: 0xE8B2,
	29865 - 11905: 0xE8B3,
	29866 - 11905: 0xAD62,
	29867 - 11905: 0xAD63,
	29868 - 11905: 0xAD64,
	29869 - 11905: 0xAD65,
	29870 - 11905: 0xAD66,
	29871 - 11905: 0xAD67,
	29872 - 11905: 0xAD68,
	29873 - 11905: 0xAD69,
	29874 - 11905: 0xAD6A,
	29875 - 11905: 0xAD6B,
	29876 - 11905: 0xAD6C,
	29877 - 11905: 0xAD6D,
	29878 - 11905: 0xAD6E,
	29879 - 11905: 0xAD6F,
	29880 - 11905: 0xAD70,
	29881 - 11905: 0xAD71,
	29882 - 11905: 0xE8B7,
	29883 - 11905: 0xAD72,
	29884 - 11905: 0xAD73,
	29885 - 11905: 0xAD74,
	29886 - 11905: 0xAD75,
	29887 - 11905: 0xAD76,
	29888 - 11905: 0xAD77,
	29889 - 11905: 0xAD78,
	29890 - 11905: 0xAD79,
	29891 - 11905: 0xAD7A,
	29892 - 11905: 0xAD7B,
	29893 - 11905: 0xAD7C,
	29894 - 11905: 0xAD7D,
	29895 - 11905: 0xAD7E,
	29896 - 11905: 0xAD80,
	29897 - 11905: 0xAD81,
	29898 - 11905: 0xAD82,
	29899 - 11905: 0xAD83,
	29900 - 11905: 0xAD84,
	29901 - 11905: 0xAD85,
	29902 - 11905: 0xAD86,
	29903 - 11905: 0xAD87,
	29904 - 11905: 0xAD88,
	29905 - 11905: 0xAD89,
	29906 - 11905: 0xE8B6,
	29907 - 11905: 0xAD8A,
	29908 - 11905: 0xAD8B,
	29909 - 11905: 0xAD8C,
	29910 - 11905: 0xAD8D,
	29911 - 11905: 0xAD8E,
	29912 - 11905: 0xAD8F,
	29913 - 11905: 0xAD90,
	29914 - 11905: 0xAD91,
	29915 - 11905: 0xAD92,
	29916 - 11905: 0xB9CF,
	29917 - 11905: 0xAD93,
	29918 - 11905: 0xF0AC,
	29919 - 11905: 0xAD94,
	29920 - 11905: 0xF0AD,
	29921 - 11905: 0xAD95,
	29922 - 11905: 0xC6B0,
	29923 - 11905: 0xB0EA,
	29924 - 11905: 0xC8BF,
	29925 - 11905: 0xAD96,
	29926 - 11905: 0xCDDF,
	29927 - 11905: 0xAD97,
	29928 - 11905: 0xAD98,
	29929 - 11905: 0xAD99,
	29930 - 11905: 0xAD9A,
	29931 - 11905: 0xAD9B,
	29932 - 11905: 0xAD9C,
	29933 - 11905: 0xAD9D,
	29934 - 11905: 0xCECD,
	29935 - 11905: 0xEAB1,
	29936 - 11905: 0xAD9E,
	29937 - 11905: 0xAD9F,
	29938 - 11905: 0xADA0,
	29939 - 11905: 0xAE40,
	29940 - 11905: 0xEAB2,
	29941 - 11905: 0xAE41,
	29942 - 11905: 0xC6BF,
	29943 - 11905: 0xB4C9,
	29944 - 11905: 0xAE42,
	29945 - 11905: 0xAE43,
	29946 - 11905: 0xAE44,
	29947 - 11905: 0xAE45,
	29948 - 11905: 0xAE46,
	29949 - 11905: 0xAE47,
	29950 - 11905: 0xAE48,
	29951 - 11905: 0xEAB3,
	29952 - 11905: 0xAE49,
	29953 - 11905: 0xAE4A,
	29954 - 11905: 0xAE4B,
	29955 - 11905: 0xAE4C,
	29956 - 11905: 0xD5E7,
	29957 - 11905: 0xAE4D,
	29958 - 11905: 0xAE4E,
	29959 - 11905: 0xAE4F,
	29960 - 11905: 0xAE50,
	29961 - 11905: 0xAE51,
	29962 - 11905: 0xAE52,
	29963 - 11905: 0xAE53,
	29964 - 11905: 0xAE54,
	29965 - 11905: 0xDDF9,
	29966 - 11905: 0xAE55,
	29967 - 11905: 0xEAB4,
	29968 - 11905: 0xAE56,
	29969 - 11905: 0xEAB5,
	29970 - 11905: 0xAE57,
	29971 - 11905: 0xEAB6,
	29972 - 11905: 0xAE58,
	29973 - 11905: 0xAE59,
	29974 - 11905: 0xAE5A,
	29975 - 11905: 0xAE5B,
	29976 - 11905: 0xB8CA,
	29977 - 11905: 0xDFB0,
	29978 - 11905: 0xC9F5,
	29979 - 11905: 0xAE5C,
	29980 - 11905: 0xCCF0,
	29981 - 11905: 0xAE5D,
	29982 - 11905: 0xAE5E,
	29983 - 11905: 0xC9FA,
	29984 - 11905: 0xAE5F,
	29985 - 11905: 0xAE60,
	29986 - 11905: 0xAE61,
	29987 - 11905: 0xAE62,
	29988 - 11905: 0xAE63,
	29989 - 11905: 0xC9FB,
	29990 - 11905: 0xAE64,
	29991 - 11905: 0xAE65,
	29992 - 11905: 0xD3C3,
	29993 - 11905: 0xCBA6,
	29994 - 11905: 0xAE66,
	29995 - 11905: 0xB8A6,
	29996 - 11905: 0xF0AE,
	29997 - 11905: 0xB1C2,
	29998 - 11905: 0xAE67,
	29999 - 11905: 0xE5B8,
	30000 - 11905: 0xCCEF,
	30001 - 11905: 0xD3C9,
	30002 - 11905: 0xBCD7,
	30003 - 11905: 0xC9EA,
	30004 - 11905: 0xAE68,
	30005 - 11905: 0xB5E7,
	30006 - 11905: 0xAE69,
	30007 - 11905: 0xC4D0,
	30008 - 11905: 0xB5E9,
	30009 - 11905: 0xAE6A,
	30010 - 11905: 0xEEAE,
	30011 - 11905: 0xBBAD,
	30012 - 11905: 0xAE6B,
	30013 - 11905: 0xAE6C,
	30014 - 11905: 0xE7DE,
	30015 - 11905: 0xAE6D,
	30016 - 11905: 0xEEAF,
	30017 - 11905: 0xAE6E,
	30018 - 11905: 0xAE6F,
	30019 - 11905: 0xAE70,
	30020 - 11905: 0xAE71,
	30021 - 11905: 0xB3A9,
	30022 - 11905: 0xAE72,
	30023 - 11905: 0xAE73,
	30024 - 11905: 0xEEB2,
	30025 - 11905: 0xAE74,
	30026 - 11905: 0xAE75,
	30027 - 11905: 0xEEB1,
	30028 - 11905: 0xBDE7,
	30029 - 11905: 0xAE76,
	30030 - 11905: 0xEEB0,
	30031 - 11905: 0xCEB7,
	30032 - 11905: 0xAE77,
	30033 - 11905: 0xAE78,
	30034 - 11905: 0xAE79,
	30035 - 11905: 0xAE7A,
	30036 - 11905: 0xC5CF,
	30037 - 11905: 0xAE7B,
	30038 - 11905: 0xAE7C,
	30039 - 11905: 0xAE7D,
	30040 - 11905: 0xAE7E,
	30041 - 11905: 0xC1F4,
	30042 - 11905: 0xDBCE,
	30043 - 11905: 0xEEB3,
	30044 - 11905: 0xD0F3,
	30045 - 11905: 0xAE80,
	30046 - 11905: 0xAE81,
	30047 - 11905: 0xAE82,
	30048 - 11905: 0xAE83,
	30049 - 11905: 0xAE84,
	30050 - 11905: 0xAE85,
	30051 - 11905: 0xAE86,
	30052 - 11905: 0xAE87,
	30053 - 11905: 0xC2D4,
	30054 - 11905: 0xC6E8,
	30055 - 11905: 0xAE88,
	30056 - 11905: 0xAE89,
	30057 - 11905: 0xAE8A,
	30058 - 11905: 0xB7AC,
	30059 - 11905: 0xAE8B,
	30060 - 11905: 0xAE8C,
	30061 - 11905: 0xAE8D,
	30062 - 11905: 0xAE8E,
	30063 - 11905: 0xAE8F,
	30064 - 11905: 0xAE90,
	30065 - 11905: 0xAE91,
	30066 - 11905: 0xEEB4,
	30067 - 11905: 0xAE92,
	30068 - 11905: 0xB3EB,
	30069 - 11905: 0xAE93,
	30070 - 11905: 0xAE94,
	30071 - 11905: 0xAE95,
	30072 - 11905: 0xBBFB,
	30073 - 11905: 0xEEB5,
	30074 - 11905: 0xAE96,
	30075 - 11905: 0xAE97,
	30076 - 11905: 0xAE98,
	30077 - 11905: 0xAE99,
	30078 - 11905: 0xAE9A,
	30079 - 11905: 0xE7DC,
	30080 - 11905: 0xAE9B,
	30081 - 11905: 0xAE9C,
	30082 - 11905: 0xAE9D,
	30083 - 11905: 0xEEB6,
	30084 - 11905: 0xAE9E,
	30085 - 11905: 0xAE9F,
	30086 - 11905: 0xBDAE,
	30087 - 11905: 0xAEA0,
	30088 - 11905: 0xAF40,
	30089 - 11905: 0xAF41,
	30090 - 11905: 0xAF42,
	30091 - 11905: 0xF1E2,
	30092 - 11905: 0xAF43,
	30093 - 11905: 0xAF44,
	30094 - 11905: 0xAF45,
	30095 - 11905: 0xCAE8,
	30096 - 11905: 0xAF46,
	30097 - 11905: 0xD2C9,
	30098 - 11905: 0xF0DA,
	30099 - 11905: 0xAF47,
	30100 - 11905: 0xF0DB,
	30101 - 11905: 0xAF48,
	30102 - 11905: 0xF0DC,
	30103 - 11905: 0xC1C6,
	30104 - 11905: 0xAF49,
	30105 - 11905: 0xB8ED,
	30106 - 11905: 0xBECE,
	30107 - 11905: 0xAF4A,
	30108 - 11905: 0xAF4B,
	30109 - 11905: 0xF0DE,
	30110 - 11905: 0xAF4C,
	30111 - 11905: 0xC5B1,
	30112 - 11905: 0xF0DD,
	30113 - 11905: 0xD1F1,
	30114 - 11905: 0xAF4D,
	30115 - 11905: 0xF0E0,
	30116 - 11905: 0xB0CC,
	30117 - 11905: 0xBDEA,
	30118 - 11905: 0xAF4E,
	30119 - 11905: 0xAF4F,
	30120 - 11905: 0xAF50,
	30121 - 11905: 0xAF51,
	30122 - 11905: 0xAF52,
	30123 - 11905: 0xD2DF,
	30124 - 11905: 0xF0DF,
	30125 - 11905: 0xAF53,
	30126 - 11905: 0xB4AF,
	30127 - 11905: 0xB7E8,
	30128 - 11905: 0xF0E6,
	30129 - 11905: 0xF0E5,
	30130 - 11905: 0xC6A3,
	30131 - 11905: 0xF0E1,
	30132 - 11905: 0xF0E2,
	30133 - 11905: 0xB4C3,
	30134 - 11905: 0xAF54,
	30135 - 11905: 0xAF55,
	30136 - 11905: 0xF0E3,
	30137 - 11905: 0xD5EE,
	30138 - 11905: 0xAF56,
	30139 - 11905: 0xAF57,
	30140 - 11905: 0xCCDB,
	30141 - 11905: 0xBED2,
	30142 - 11905: 0xBCB2,
	30143 - 11905: 0xAF58,
	30144 - 11905: 0xAF59,
	30145 - 11905: 0xAF5A,
	30146 - 11905: 0xF0E8,
	30147 - 11905: 0xF0E7,
	30148 - 11905: 0xF0E4,
	30149 - 11905: 0xB2A1,
	30150 - 11905: 0xAF5B,
	30151 - 11905: 0xD6A2,
	30152 - 11905: 0xD3B8,
	30153 - 11905: 0xBEB7,
	30154 - 11905: 0xC8AC,
	30155 - 11905: 0xAF5C,
	30156 - 11905: 0xAF5D,
	30157 - 11905: 0xF0EA,
	30158 - 11905: 0xAF5E,
	30159 - 11905: 0xAF5F,
	30160 - 11905: 0xAF60,
	30161 - 11905: 0xAF61,
	30162 - 11905: 0xD1F7,
	30163 - 11905: 0xAF62,
	30164 - 11905: 0xD6CC,
	30165 - 11905: 0xBADB,
	30166 - 11905: 0xF0E9,
	30167 - 11905: 0xAF63,
	30168 - 11905: 0xB6BB,
	30169 - 11905: 0xAF64,
	30170 - 11905: 0xAF65,
	30171 - 11905: 0xCDB4,
	30172 - 11905: 0xAF66,
	30173 - 11905: 0xAF67,
	30174 - 11905: 0xC6A6,
	30175 - 11905: 0xAF68,
	30176 - 11905: 0xAF69,
	30177 - 11905: 0xAF6A,
	30178 - 11905: 0xC1A1,
	30179 - 11905: 0xF0EB,
	30180 - 11905: 0xF0EE,
	30181 - 11905: 0xAF6B,
	30182 - 11905: 0xF0ED,
	30183 - 11905: 0xF0F0,
	30184 - 11905: 0xF0EC,
	30185 - 11905: 0xAF6C,
	30186 - 11905: 0xBBBE,
	30187 - 11905: 0xF0EF,
	30188 - 11905: 0xAF6D,
	30189 - 11905: 0xAF6E,
	30190 - 11905: 0xAF6F,
	30191 - 11905: 0xAF70,
	30192 - 11905: 0xCCB5,
	30193 - 11905: 0xF0F2,
	30194 - 11905: 0xAF71,
	30195 - 11905: 0xAF72,
	30196 - 11905: 0xB3D5,
	30197 - 11905: 0xAF73,
	30198 - 11905: 0xAF74,
	30199 - 11905: 0xAF75,
	30200 - 11905: 0xAF76,
	30201 - 11905: 0xB1D4,
	30202 - 11905: 0xAF77,
	30203 - 11905: 0xAF78,
	30204 - 11905: 0xF0F3,
	30205 - 11905: 0xAF79,
	30206 - 11905: 0xAF7A,
	30207 - 11905: 0xF0F4,
	30208 - 11905: 0xF0F6,
	30209 - 11905: 0xB4E1,
	30210 - 11905: 0xAF7B,
	30211 - 11905: 0xF0F1,
	30212 - 11905: 0xAF7C,
	30213 - 11905: 0xF0F7,
	30214 - 11905: 0xAF7D,
	30215 - 11905: 0xAF7E,
	30216 - 11905: 0xAF80,
	30217 - 11905: 0xAF81,
	30218 - 11905: 0xF0FA,
	30219 - 11905: 0xAF82,
	30220 - 11905: 0xF0F8,
	30221 - 11905: 0xAF83,
	30222 - 11905: 0xAF84,
	30223 - 11905: 0xAF85,
	30224 - 11905: 0xF0F5,
	30225 - 11905: 0xAF86,
	30226 - 11905: 0xAF87,
	30227 - 11905: 0xAF88,
	30228 - 11905: 0xAF89,
	30229 - 11905: 0xF0FD,
	30230 - 11905: 0xAF8A,
	30231 - 11905: 0xF0F9,
	30232 - 11905: 0xF0FC,
	30233 - 11905: 0xF0FE,
	30234 - 11905: 0xAF8B,
	30235 - 11905: 0xF1A1,
	30236 - 11905: 0xAF8C,
	30237 - 11905: 0xAF8D,
	30238 - 11905: 0xAF8E,
	30239 - 11905: 0xCEC1,
	30240 - 11905: 0xF1A4,
	30241 - 11905: 0xAF8F,
	30242 - 11905: 0xF1A3,
	30243 - 11905: 0xAF90,
	30244 - 11905: 0xC1F6,
	30245 - 11905: 0xF0FB,
	30246 - 11905: 0xCADD,
	30247 - 11905: 0xAF91,
	30248 - 11905: 0xAF92,
	30249 - 11905: 0xB4F1,
	30250 - 11905: 0xB1F1,
	30251 - 11905: 0xCCB1,
	30252 - 11905: 0xAF93,
	30253 - 11905: 0xF1A6,
	30254 - 11905: 0xAF94,
	30255 - 11905: 0xAF95,
	30256 - 11905: 0xF1A7,
	30257 - 11905: 0xAF96,
	30258 - 11905: 0xAF97,
	30259 - 11905: 0xF1AC,
	30260 - 11905: 0xD5CE,
	30261 - 11905: 0xF1A9,
	30262 - 11905: 0xAF98,
	30263 - 11905: 0xAF99,
	30264 - 11905: 0xC8B3,
	30265 - 11905: 0xAF9A,
	30266 - 11905: 0xAF9B,
	30267 - 11905: 0xAF9C,
	30268 - 11905: 0xF1A2,
	30269 - 11905: 0xAF9D,
	30270 - 11905: 0xF1AB,
	30271 - 11905: 0xF1A8,
	30272 - 11905: 0xF1A5,
	30273 - 11905: 0xAF9E,
	30274 - 11905: 0xAF9F,
	30275 - 11905: 0xF1AA,
	30276 - 11905: 0xAFA0,
	30277 - 11905: 0xB040,
	30278 - 11905: 0xB041,
	30279 - 11905: 0xB042,
	30280 - 11905: 0xB043,
	30281 - 11905: 0xB044,
	30282 - 11905: 0xB045,
	30283 - 11905: 0xB046,
	30284 - 11905: 0xB0A9,
	30285 - 11905: 0xF1AD,
	30286 - 11905: 0xB047,
	30287 - 11905: 0xB048,
	30288 - 11905: 0xB049,
	30289 - 11905: 0xB04A,
	30290 - 11905: 0xB04B,
	30291 - 11905: 0xB04C,
	30292 - 11905: 0xF1AF,
	30293 - 11905: 0xB04D,
	30294 - 11905: 0xF1B1,
	30295 - 11905: 0xB04E,
	30296 - 11905: 0xB04F,
	30297 - 11905: 0xB050,
	30298 - 11905: 0xB051,
	30299 - 11905: 0xB052,
	30300 - 11905: 0xF1B0,
	30301 - 11905: 0xB053,
	30302 - 11905: 0xF1AE,
	30303 - 11905: 0xB054,
	30304 - 11905: 0xB055,
	30305 - 11905: 0xB056,
	30306 - 11905: 0xB057,
	30307 - 11905: 0xD1A2,
	30308 - 11905: 0xB058,
	30309 - 11905: 0xB059,
	30310 - 11905: 0xB05A,
	30311 - 11905: 0xB05B,
	30312 - 11905: 0xB05C,
	30313 - 11905: 0xB05D,
	30314 - 11905: 0xB05E,
	30315 - 11905: 0xF1B2,
	30316 - 11905: 0xB05F,
	30317 - 11905: 0xB060,
	30318 - 11905: 0xB061,
	30319 - 11905: 0xF1B3,
	30320 - 11905: 0xB062,
	30321 - 11905: 0xB063,
	30322 - 11905: 0xB064,
	30323 - 11905: 0xB065,
	30324 - 11905: 0xB066,
	30325 - 11905: 0xB067,
	30326 - 11905: 0xB068,
	30327 - 11905: 0xB069,
	30328 - 11905: 0xB9EF,
	30329 - 11905: 0xB06A,
	30330 - 11905: 0xB06B,
	30331 - 11905: 0xB5C7,
	30332 - 11905: 0xB06C,
	30333 - 11905: 0xB0D7,
	30334 - 11905: 0xB0D9,
	30335 - 11905: 0xB06D,
	30336 - 11905: 0xB06E,
	30337 - 11905: 0xB06F,
	30338 - 11905: 0xD4ED,
	30339 - 11905: 0xB070,
	30340 - 11905: 0xB5C4,
	30341 - 11905: 0xB071,
	30342 - 11905: 0xBDD4,
	30343 - 11905: 0xBBCA,
	30344 - 11905: 0xF0A7,
	30345 - 11905: 0xB072,
	30346 - 11905: 0xB073,
	30347 - 11905: 0xB8DE,
	30348 - 11905: 0xB074,
	30349 - 11905: 0xB075,
	30350 - 11905: 0xF0A8,
	30351 - 11905: 0xB076,
	30352 - 11905: 0xB077,
	30353 - 11905: 0xB0A8,
	30354 - 11905: 0xB078,
	30355 - 11905: 0xF0A9,
	30356 - 11905: 0xB079,
	30357 - 11905: 0xB07A,
	30358 - 11905: 0xCDEE,
	30359 - 11905: 0xB07B,
	30360 - 11905: 0xB07C,
	30361 - 11905: 0xF0AA,
	30362 - 11905: 0xB07D,
	30363 - 11905: 0xB07E,
	30364 - 11905: 0xB080,
	30365 - 11905: 0xB081,
	30366 - 11905: 0xB082,
	30367 - 11905: 0xB083,
	30368 - 11905: 0xB084,
	30369 - 11905: 0xB085,
	30370 - 11905: 0xB086,
	30371 - 11905: 0xB087,
	30372 - 11905: 0xF0AB,
	30373 - 11905: 0xB088,
	30374 - 11905: 0xB089,
	30375 - 11905: 0xB08A,
	30376 - 11905: 0xB08B,
	30377 - 11905: 0xB08C,
	30378 - 11905: 0xB08D,
	30379 - 11905: 0xB08E,
	30380 - 11905: 0xB08F,
	30381 - 11905: 0xB090,
	30382 - 11905: 0xC6A4,
	30383 - 11905: 0xB091,
	30384 - 11905: 0xB092,
	30385 - 11905: 0xD6E5,
	30386 - 11905: 0xF1E4,
	30387 - 11905: 0xB093,
	30388 - 11905: 0xF1E5,
	30389 - 11905: 0xB094,
	30390 - 11905: 0xB095,
	30391 - 11905: 0xB096,
	30392 - 11905: 0xB097,
	30393 - 11905: 0xB098,
	30394 - 11905: 0xB099,
	30395 - 11905: 0xB09A,
	30396 - 11905: 0xB09B,
	30397 - 11905: 0xB09C,
	30398 - 11905: 0xB09D,
	30399 - 11905: 0xC3F3,
	30400 - 11905: 0xB09E,
	30401 - 11905: 0xB09F,
	30402 - 11905: 0xD3DB,
	30403 - 11905: 0xB0A0,
	30404 - 11905: 0xB140,
	30405 - 11905: 0xD6D1,
	30406 - 11905: 0xC5E8,
	30407 - 11905: 0xB141,
	30408 - 11905: 0xD3AF,
	30409 - 11905: 0xB142,
	30410 - 11905: 0xD2E6,
	30411 - 11905: 0xB143,
	30412 - 11905: 0xB144,
	30413 - 11905: 0xEEC1,
	30414 - 11905: 0xB0BB,
	30415 - 11905: 0xD5B5,
	30416 - 11905: 0xD1CE,
	30417 - 11905: 0xBCE0,
	30418 - 11905: 0xBAD0,
	30419 - 11905: 0xB145,
	30420 - 11905: 0xBFF8,
	30421 - 11905: 0xB146,
	30422 - 11905: 0xB8C7,
	30423 - 11905: 0xB5C1,
	30424 - 11905: 0xC5CC,
	30425 - 11905: 0xB147,
	30426 - 11905: 0xB148,
	30427 - 11905: 0xCAA2,
	30428 - 11905: 0xB149,
	30429 - 11905: 0xB14A,
	30430 - 11905: 0xB14B,
	30431 - 11905: 0xC3CB,
	30432 - 11905: 0xB14C,
	30433 - 11905: 0xB14D,
	30434 - 11905: 0xB14E,
	30435 - 11905: 0xB14F,
	30436 - 11905: 0xB150,
	30437 - 11905: 0xEEC2,
	30438 - 11905: 0xB151,
	30439 - 11905: 0xB152,
	30440 - 11905: 0xB153,
	30441 - 11905: 0xB154,
	30442 - 11905: 0xB155,
	30443 - 11905: 0xB156,
	30444 - 11905: 0xB157,
	30445 - 11905: 0xB158,
	30446 - 11905: 0xC4BF,
	30447 - 11905: 0xB6A2,
	30448 - 11905: 0xB159,
	30449 - 11905: 0xEDEC,
	30450 - 11905: 0xC3A4,
	30451 - 11905: 0xB15A,
	30452 - 11905: 0xD6B1,
	30453 - 11905: 0xB15B,
	30454 - 11905: 0xB15C,
	30455 - 11905: 0xB15D,
	30456 - 11905: 0xCFE0,
	30457 - 11905: 0xEDEF,
	30458 - 11905: 0xB15E,
	30459 - 11905: 0xB15F,
	30460 - 11905: 0xC5CE,
	30461 - 11905: 0xB160,
	30462 - 11905: 0xB6DC,
	30463 - 11905: 0xB161,
	30464 - 11905: 0xB162,
	30465 - 11905: 0xCAA1,
	30466 - 11905: 0xB163,
	30467 - 11905: 0xB164,
	30468 - 11905: 0xEDED,
	30469 - 11905: 0xB165,
	30470 - 11905: 0xB166,
	30471 - 11905: 0xEDF0,
	30472 - 11905: 0xEDF1,
	30473 - 11905: 0xC3BC,
	30474 - 11905: 0xB167,
	30475 - 11905: 0xBFB4,
	30476 - 11905: 0xB168,
	30477 - 11905: 0xEDEE,
	30478 - 11905: 0xB169,
	30479 - 11905: 0xB16A,
	30480 - 11905: 0xB16B,
	30481 - 11905: 0xB16C,
	30482 - 11905: 0xB16D,
	30483 - 11905: 0xB16E,
	30484 - 11905: 0xB16F,
	30485 - 11905: 0xB170,
	30486 - 11905: 0xB171,
	30487 - 11905: 0xB172,
	30488 - 11905: 0xB173,
	30489 - 11905: 0xEDF4,
	30490 - 11905: 0xEDF2,
	30491 - 11905: 0xB174,
	30492 - 11905: 0xB175,
	30493 - 11905: 0xB176,
	30494 - 11905: 0xB177,
	30495 - 11905: 0xD5E6,
	30496 - 11905: 0xC3DF,
	30497 - 11905: 0xB178,
	30498 - 11905: 0xEDF3,
	30499 - 11905: 0xB179,
	30500 - 11905: 0xB17A,
	30501 - 11905: 0xB17B,
	30502 - 11905: 0xEDF6,
	30503 - 11905: 0xB17C,
	30504 - 11905: 0xD5A3,
	30505 - 11905: 0xD1A3,
	30506 - 11905: 0xB17D,
	30507 - 11905: 0xB17E,
	30508 - 11905: 0xB180,
	30509 - 11905: 0xEDF5,
	30510 - 11905: 0xB181,
	30511 - 11905: 0xC3D0,
	30512 - 11905: 0xB182,
	30513 - 11905: 0xB183,
	30514 - 11905: 0xB184,
	30515 - 11905: 0xB185,
	30516 - 11905: 0xB186,
	30517 - 11905: 0xEDF7,
	30518 - 11905: 0xBFF4,
	30519 - 11905: 0xBEEC,
	30520 - 11905: 0xEDF8,
	30521 - 11905: 0xB187,
	30522 - 11905: 0xCCF7,
	30523 - 11905: 0xB188,
	30524 - 11905: 0xD1DB,
	30525 - 11905: 0xB189,
	30526 - 11905: 0xB18A,
	30527 - 11905: 0xB18B,
	30528 - 11905: 0xD7C5,
	30529 - 11905: 0xD5F6,
	30530 - 11905: 0xB18C,
	30531 - 11905: 0xEDFC,
	30532 - 11905: 0xB18D,
	30533 - 11905: 0xB18E,
	30534 - 11905: 0xB18F,
	30535 - 11905: 0xEDFB,
	30536 - 11905: 0xB190,
	30537 - 11905: 0xB191,
	30538 - 11905: 0xB192,
	30539 - 11905: 0xB193,
	30540 - 11905: 0xB194,
	30541 - 11905: 0xB195,
	30542 - 11905: 0xB196,
	30543 - 11905: 0xB197,
	30544 - 11905: 0xEDF9,
	30545 - 11905: 0xEDFA,
	30546 - 11905: 0xB198,
	30547 - 11905: 0xB199,
	30548 - 11905: 0xB19A,
	30549 - 11905: 0xB19B,
	30550 - 11905: 0xB19C,
	30551 - 11905: 0xB19D,
	30552 - 11905: 0xB19E,
	30553 - 11905: 0xB19F,
	30554 - 11905: 0xEDFD,
	30555 - 11905: 0xBEA6,
	30556 - 11905: 0xB1A0,
	30557 - 11905: 0xB240,
	30558 - 11905: 0xB241,
	30559 - 11905: 0xB242,
	30560 - 11905: 0xB243,
	30561 - 11905: 0xCBAF,
	30562 - 11905: 0xEEA1,
	30563 - 11905: 0xB6BD,
	30564 - 11905: 0xB244,
	30565 - 11905: 0xEEA2,
	30566 - 11905: 0xC4C0,
	30567 - 11905: 0xB245,
	30568 - 11905: 0xEDFE,
	30569 - 11905: 0xB246,
	30570 - 11905: 0xB247,
	30571 - 11905: 0xBDDE,
	30572 - 11905: 0xB2C7,
	30573 - 11905: 0xB248,
	30574 - 11905: 0xB249,
	30575 - 11905: 0xB24A,
	30576 - 11905: 0xB24B,
	30577 - 11905: 0xB24C,
	30578 - 11905: 0xB24D,
	30579 - 11905: 0xB24E,
	30580 - 11905: 0xB24F,
	30581 - 11905: 0xB250,
	30582 - 11905: 0xB251,
	30583 - 11905: 0xB252,
	30584 - 11905: 0xB253,
	30585 - 11905: 0xB6C3,
	30586 - 11905: 0xB254,
	30587 - 11905: 0xB255,
	30588 - 11905: 0xB256,
	30589 - 11905: 0xEEA5,
	30590 - 11905: 0xD8BA,
	30591 - 11905: 0xEEA3,
	30592 - 11905: 0xEEA6,
	30593 - 11905: 0xB257,
	30594 - 11905: 0xB258,
	30595 - 11905: 0xB259,
	30596 - 11905: 0xC3E9,
	30597 - 11905: 0xB3F2,
	30598 - 11905: 0xB25A,
	30599 - 11905: 0xB25B,
	30600 - 11905: 0xB25C,
	30601 - 11905: 0xB25D,
	30602 - 11905: 0xB25E,
	30603 - 11905: 0xB25F,
	30604 - 11905: 0xEEA7,
	30605 - 11905: 0xEEA4,
	30606 - 11905: 0xCFB9,
	30607 - 11905: 0xB260,
	30608 - 11905: 0xB261,
	30609 - 11905: 0xEEA8,
	30610 - 11905: 0xC2F7,
	30611 - 11905: 0xB262,
	30612 - 11905: 0xB263,
	30613 - 11905: 0xB264,
	30614 - 11905: 0xB265,
	30615 - 11905: 0xB266,
	30616 - 11905: 0xB267,
	30617 - 11905: 0xB268,
	30618 - 11905: 0xB269,
	30619 - 11905: 0xB26A,
	30620 - 11905: 0xB26B,
	30621 - 11905: 0xB26C,
	30622 - 11905: 0xB26D,
	30623 - 11905: 0xEEA9,
	30624 - 11905: 0xEEAA,
	30625 - 11905: 0xB26E,
	30626 - 11905: 0xDEAB,
	30627 - 11905: 0xB26F,
	30628 - 11905: 0xB270,
	30629 - 11905: 0xC6B3,
	30630 - 11905: 0xB271,
	30631 - 11905: 0xC7C6,
	30632 - 11905: 0xB272,
	30633 - 11905: 0xD6F5,
	30634 - 11905: 0xB5C9,
	30635 - 11905: 0xB273,
	30636 - 11905: 0xCBB2,
	30637 - 11905: 0xB274,
	30638 - 11905: 0xB275,
	30639 - 11905: 0xB276,
	30640 - 11905: 0xEEAB,
	30641 - 11905: 0xB277,
	30642 - 11905: 0xB278,
	30643 - 11905: 0xCDAB,
	30644 - 11905: 0xB279,
	30645 - 11905: 0xEEAC,
	30646 - 11905: 0xB27A,
	30647 - 11905: 0xB27B,
	30648 - 11905: 0xB27C,
	30649 - 11905: 0xB27D,
	30650 - 11905: 0xB27E,
	30651 - 11905: 0xD5B0,
	30652 - 11905: 0xB280,
	30653 - 11905: 0xEEAD,
	30654 - 11905: 0xB281,
	30655 - 11905: 0xF6C4,
	30656 - 11905: 0xB282,
	30657 - 11905: 0xB283,
	30658 - 11905: 0xB284,
	30659 - 11905: 0xB285,
	30660 - 11905: 0xB286,
	30661 - 11905: 0xB287,
	30662 - 11905: 0xB288,
	30663 - 11905: 0xB289,
	30664 - 11905: 0xB28A,
	30665 - 11905: 0xB28B,
	30666 - 11905: 0xB28C,
	30667 - 11905: 0xB28D,
	30668 - 11905: 0xB28E,
	30669 - 11905: 0xDBC7,
	30670 - 11905: 0xB28F,
	30671 - 11905: 0xB290,
	30672 - 11905: 0xB291,
	30673 - 11905: 0xB292,
	30674 - 11905: 0xB293,
	30675 - 11905: 0xB294,
	30676 - 11905: 0xB295,
	30677 - 11905: 0xB296,
	30678 - 11905: 0xB297,
	30679 - 11905: 0xB4A3,
	30680 - 11905: 0xB298,
	30681 - 11905: 0xB299,
	30682 - 11905: 0xB29A,
	30683 - 11905: 0xC3AC,
	30684 - 11905: 0xF1E6,
	30685 - 11905: 0xB29B,
	30686 - 11905: 0xB29C,
	30687 - 11905: 0xB29D,
	30688 - 11905: 0xB29E,
	30689 - 11905: 0xB29F,
	30690 - 11905: 0xCAB8,
	30691 - 11905: 0xD2D3,
	30692 - 11905: 0xB2A0,
	30693 - 11905: 0xD6AA,
	30694 - 11905: 0xB340,
	30695 - 11905: 0xEFF2,
	30696 - 11905: 0xB341,
	30697 - 11905: 0xBED8,
	30698 - 11905: 0xB342,
	30699 - 11905: 0xBDC3,
	30700 - 11905: 0xEFF3,
	30701 - 11905: 0xB6CC,
	30702 - 11905: 0xB0AB,
	30703 - 11905: 0xB343,
	30704 - 11905: 0xB344,
	30705 - 11905: 0xB345,
	30706 - 11905: 0xB346,
	30707 - 11905: 0xCAAF,
	30708 - 11905: 0xB347,
	30709 - 11905: 0xB348,
	30710 - 11905: 0xEDB6,
	30711 - 11905: 0xB349,
	30712 - 11905: 0xEDB7,
	30713 - 11905: 0xB34A,
	30714 - 11905: 0xB34B,
	30715 - 11905: 0xB34C,
	30716 - 11905: 0xB34D,
	30717 - 11905: 0xCEF9,
	30718 - 11905: 0xB7AF,
	30719 - 11905: 0xBFF3,
	30720 - 11905: 0xEDB8,
	30721 - 11905: 0xC2EB,
	30722 - 11905: 0xC9B0,
	30723 - 11905: 0xB34E,
	30724 - 11905: 0xB34F,
	30725 - 11905: 0xB350,
	30726 - 11905: 0xB351,
	30727 - 11905: 0xB352,
	30728 - 11905: 0xB353,
	30729 - 11905: 0xEDB9,
	30730 - 11905: 0xB354,
	30731 - 11905: 0xB355,
	30732 - 11905: 0xC6F6,
	30733 - 11905: 0xBFB3,
	30734 - 11905: 0xB356,
	30735 - 11905: 0xB357,
	30736 - 11905: 0xB358,
	30737 - 11905: 0xEDBC,
	30738 - 11905: 0xC5F8,
	30739 - 11905: 0xB359,
	30740 - 11905: 0xD1D0,
	30741 - 11905: 0xB35A,
	30742 - 11905: 0xD7A9,
	30743 - 11905: 0xEDBA,
	30744 - 11905: 0xEDBB,
	30745 - 11905: 0xB35B,
	30746 - 11905: 0xD1E2,
	30747 - 11905: 0xB35C,
	30748 - 11905: 0xEDBF,
	30749 - 11905: 0xEDC0,
	30750 - 11905: 0xB35D,
	30751 - 11905: 0xEDC4,
	30752 - 11905: 0xB35E,
	30753 - 11905: 0xB35F,
	30754 - 11905: 0xB360,
	30755 - 11905: 0xEDC8,
	30756 - 11905: 0xB361,
	30757 - 11905: 0xEDC6,
	30758 - 11905: 0xEDCE,
	30759 - 11905: 0xD5E8,
	30760 - 11905: 0xB362,
	30761 - 11905: 0xEDC9,
	30762 - 11905: 0xB363,
	30763 - 11905: 0xB364,
	30764 - 11905: 0xEDC7,
	30765 - 11905: 0xEDBE,
	30766 - 11905: 0xB365,
	30767 - 11905: 0xB366,
	30768 - 11905: 0xC5E9,
	30769 - 11905: 0xB367,
	30770 - 11905: 0xB368,
	30771 - 11905: 0xB369,
	30772 - 11905: 0xC6C6,
	30773 - 11905: 0xB36A,
	30774 - 11905: 0xB36B,
	30775 - 11905: 0xC9E9,
	30776 - 11905: 0xD4D2,
	30777 - 11905: 0xEDC1,
	30778 - 11905: 0xEDC2,
	30779 - 11905: 0xEDC3,
	30780 - 11905: 0xEDC5,
	30781 - 11905: 0xB36C,
	30782 - 11905: 0xC0F9,
	30783 - 11905: 0xB36D,
	30784 - 11905: 0xB4A1,
	30785 - 11905: 0xB36E,
	30786 - 11905: 0xB36F,
	30787 - 11905: 0xB370,
	30788 - 11905: 0xB371,
	30789 - 11905: 0xB9E8,
	30790 - 11905: 0xB372,
	30791 - 11905: 0xEDD0,
	30792 - 11905: 0xB373,
	30793 - 11905: 0xB374,
	30794 - 11905: 0xB375,
	30795 - 11905: 0xB376,
	30796 - 11905: 0xEDD1,
	30797 - 11905: 0xB377,
	30798 - 11905: 0xEDCA,
	30799 - 11905: 0xB378,
	30800 - 11905: 0xEDCF,
	30801 - 11905: 0xB379,
	30802 - 11905: 0xCEF8,
	30803 - 11905: 0xB37A,
	30804 - 11905: 0xB37B,
	30805 - 11905: 0xCBB6,
	30806 - 11905: 0xEDCC,
	30807 - 11905: 0xEDCD,
	30808 - 11905: 0xB37C,
	30809 - 11905: 0xB37D,
	30810 - 11905: 0xB37E,
	30811 - 11905: 0xB380,
	30812 - 11905: 0xB381,
	30813 - 11905: 0xCFF5,
	30814 - 11905: 0xB382,
	30815 - 11905: 0xB383,
	30816 - 11905: 0xB384,
	30817 - 11905: 0xB385,
	30818 - 11905: 0xB386,
	30819 - 11905: 0xB387,
	30820 - 11905: 0xB388,
	30821 - 11905: 0xB389,
	30822 - 11905: 0xB38A,
	30823 - 11905: 0xB38B,
	30824 - 11905: 0xB38C,
	30825 - 11905: 0xB38D,
	30826 - 11905: 0xEDD2,
	30827 - 11905: 0xC1F2,
	30828 - 11905: 0xD3B2,
	30829 - 11905: 0xEDCB,
	30830 - 11905: 0xC8B7,
	30831 - 11905: 0xB38E,
	30832 - 11905: 0xB38F,
	30833 - 11905: 0xB390,
	30834 - 11905: 0xB391,
	30835 - 11905: 0xB392,
	30836 - 11905: 0xB393,
	30837 - 11905: 0xB394,
	30838 - 11905: 0xB395,
	30839 - 11905: 0xBCEF,
	30840 - 11905: 0xB396,
	30841 - 11905: 0xB397,
	30842 - 11905: 0xB398,
	30843 - 11905: 0xB399,
	30844 - 11905: 0xC5F0,
	30845 - 11905: 0xB39A,
	30846 - 11905: 0xB39B,
	30847 - 11905: 0xB39C,
	30848 - 11905: 0xB39D,
	30849 - 11905: 0xB39E,
	30850 - 11905: 0xB39F,
	30851 - 11905: 0xB3A0,
	30852 - 11905: 0xB440,
	30853 - 11905: 0xB441,
	30854 - 11905: 0xB442,
	30855 - 11905: 0xEDD6,
	30856 - 11905: 0xB443,
	30857 - 11905: 0xB5EF,
	30858 - 11905: 0xB444,
	30859 - 11905: 0xB445,
	30860 - 11905: 0xC2B5,
	30861 - 11905: 0xB0AD,
	30862 - 11905: 0xCBE9,
	30863 - 11905: 0xB446,
	30864 - 11905: 0xB447,
	30865 - 11905: 0xB1AE,
	30866 - 11905: 0xB448,
	30867 - 11905: 0xEDD4,
	30868 - 11905: 0xB449,
	30869 - 11905: 0xB44A,
	30870 - 11905: 0xB44B,
	30871 - 11905: 0xCDEB,
	30872 - 11905: 0xB5E2,
	30873 - 11905: 0xB44C,
	30874 - 11905: 0xEDD5,
	30875 - 11905: 0xEDD3,
	30876 - 11905: 0xEDD7,
	30877 - 11905: 0xB44D,
	30878 - 11905: 0xB44E,
	30879 - 11905: 0xB5FA,
	30880 - 11905: 0xB44F,
	30881 - 11905: 0xEDD8,
	30882 - 11905: 0xB450,
	30883 - 11905: 0xEDD9,
	30884 - 11905: 0xB451,
	30885 - 11905: 0xEDDC,
	30886 - 11905: 0xB452,
	30887 - 11905: 0xB1CC,
	30888 - 11905: 0xB453,
	30889 - 11905: 0xB454,
	30890 - 11905: 0xB455,
	30891 - 11905: 0xB456,
	30892 - 11905: 0xB457,
	30893 - 11905: 0xB458,
	30894 - 11905: 0xB459,
	30895 - 11905: 0xB45A,
	30896 - 11905: 0xC5F6,
	30897 - 11905: 0xBCEE,
	30898 - 11905: 0xEDDA,
	30899 - 11905: 0xCCBC,
	30900 - 11905: 0xB2EA,
	30901 - 11905: 0xB45B,
	30902 - 11905: 0xB45C,
	30903 - 11905: 0xB45D,
	30904 - 11905: 0xB45E,
	30905 - 11905: 0xEDDB,
	30906 - 11905: 0xB45F,
	30907 - 11905: 0xB460,
	30908 - 11905: 0xB461,
	30909 - 11905: 0xB462,
	30910 - 11905: 0xC4EB,
	30911 - 11905: 0xB463,
	30912 - 11905: 0xB464,
	30913 - 11905: 0xB4C5,
	30914 - 11905: 0xB465,
	30915 - 11905: 0xB466,
	30916 - 11905: 0xB467,
	30917 - 11905: 0xB0F5,
	30918 - 11905: 0xB468,
	30919 - 11905: 0xB469,
	30920 - 11905: 0xB46A,
	30921 - 11905: 0xEDDF,
	30922 - 11905: 0xC0DA,
	30923 - 11905: 0xB4E8,
	30924 - 11905: 0xB46B,
	30925 - 11905: 0xB46C,
	30926 - 11905: 0xB46D,
	30927 - 11905: 0xB46E,
	30928 - 11905: 0xC5CD,
	30929 - 11905: 0xB46F,
	30930 - 11905: 0xB470,
	30931 - 11905: 0xB471,
	30932 - 11905: 0xEDDD,
	30933 - 11905: 0xBFC4,
	30934 - 11905: 0xB472,
	30935 - 11905: 0xB473,
	30936 - 11905: 0xB474,
	30937 - 11905: 0xEDDE,
	30938 - 11905: 0xB475,
	30939 - 11905: 0xB476,
	30940 - 11905: 0xB477,
	30941 - 11905: 0xB478,
	30942 - 11905: 0xB479,
	30943 - 11905: 0xB47A,
	30944 - 11905: 0xB47B,
	30945 - 11905: 0xB47C,
	30946 - 11905: 0xB47D,
	30947 - 11905: 0xB47E,
	30948 - 11905: 0xB480,
	30949 - 11905: 0xB481,
	30950 - 11905: 0xB482,
	30951 - 11905: 0xB483,
	30952 - 11905: 0xC4A5,
	30953 - 11905: 0xB484,
	30954 - 11905: 0xB485,
	30955 - 11905: 0xB486,
	30956 - 11905: 0xEDE0,
	30957 - 11905: 0xB487,
	30958 - 11905: 0xB488,
	30959 - 11905: 0xB489,
	30960 - 11905: 0xB48A,
	30961 - 11905: 0xB48B,
	30962 - 11905: 0xEDE1,
	30963 - 11905: 0xB48C,
	30964 - 11905: 0xEDE3,
	30965 - 11905: 0xB48D,
	30966 - 11905: 0xB48E,
	30967 - 11905: 0xC1D7,
	30968 - 11905: 0xB48F,
	30969 - 11905: 0xB490,
	30970 - 11905: 0xBBC7,
	30971 - 11905: 0xB491,
	30972 - 11905: 0xB492,
	30973 - 11905: 0xB493,
	30974 - 11905: 0xB494,
	30975 - 11905: 0xB495,
	30976 - 11905: 0xB496,
	30977 - 11905: 0xBDB8,
	30978 - 11905: 0xB497,
	30979 - 11905: 0xB498,
	30980 - 11905: 0xB499,
	30981 - 11905: 0xEDE2,
	30982 - 11905: 0xB49A,
	30983 - 11905: 0xB49B,
	30984 - 11905: 0xB49C,
	30985 - 11905: 0xB49D,
	30986 - 11905: 0xB49E,
	30987 - 11905: 0xB49F,
	30988 - 11905: 0xB4A0,
	30989 - 11905: 0xB540,
	30990 - 11905: 0xB541,
	30991 - 11905: 0xB542,
	30992 - 11905: 0xB543,
	30993 - 11905: 0xB544,
	30994 - 11905: 0xB545,
	30995 - 11905: 0xEDE4,
	30996 - 11905: 0xB546,
	30997 - 11905: 0xB547,
	30998 - 11905: 0xB548,
	30999 - 11905: 0xB549,
	31000 - 11905: 0xB54A,
	31001 - 11905: 0xB54B,
	31002 - 11905: 0xB54C,
	31003 - 11905: 0xB54D,
	31004 - 11905: 0xB54E,
	31005 - 11905: 0xB54F,
	31006 - 11905: 0xEDE6,
	31007 - 11905: 0xB550,
	31008 - 11905: 0xB551,
	31009 - 11905: 0xB552,
	31010 - 11905: 0xB553,
	31011 - 11905: 0xB554,
	31012 - 11905: 0xEDE5,
	31013 - 11905: 0xB555,
	31014 - 11905: 0xB556,
	31015 - 11905: 0xB557,
	31016 - 11905: 0xB558,
	31017 - 11905: 0xB559,
	31018 - 11905: 0xB55A,
	31019 - 11905: 0xB55B,
	31020 - 11905: 0xB55C,
	31021 - 11905: 0xB55D,
	31022 - 11905: 0xB55E,
	31023 - 11905: 0xB55F,
	31024 - 11905: 0xB560,
	31025 - 11905: 0xB561,
	31026 - 11905: 0xB562,
	31027 - 11905: 0xB563,
	31028 - 11905: 0xEDE7,
	31029 - 11905: 0xB564,
	31030 - 11905: 0xB565,
	31031 - 11905: 0xB566,
	31032 - 11905: 0xB567,
	31033 - 11905: 0xB568,
	31034 - 11905: 0xCABE,
	31035 - 11905: 0xECEA,
	31036 - 11905: 0xC0F1,
	31037 - 11905: 0xB569,
	31038 - 11905: 0xC9E7,
	31039 - 11905: 0xB56A,
	31040 - 11905: 0xECEB,
	31041 - 11905: 0xC6EE,
	31042 - 11905: 0xB56B,
	31043 - 11905: 0xB56C,
	31044 - 11905: 0xB56D,
	31045 - 11905: 0xB56E,
	31046 - 11905: 0xECEC,
	31047 - 11905: 0xB56F,
	31048 - 11905: 0xC6ED,
	31049 - 11905: 0xECED,
	31050 - 11905: 0xB570,
	31051 - 11905: 0xB571,
	31052 - 11905: 0xB572,
	31053 - 11905: 0xB573,
	31054 - 11905: 0xB574,
	31055 - 11905: 0xB575,
	31056 - 11905: 0xB576,
	31057 - 11905: 0xB577,
	31058 - 11905: 0xB578,
	31059 - 11905: 0xECF0,
	31060 - 11905: 0xB579,
	31061 - 11905: 0xB57A,
	31062 - 11905: 0xD7E6,
	31063 - 11905: 0xECF3,
	31064 - 11905: 0xB57B,
	31065 - 11905: 0xB57C,
	31066 - 11905: 0xECF1,
	31067 - 11905: 0xECEE,
	31068 - 11905: 0xECEF,
	31069 - 11905: 0xD7A3,
	31070 - 11905: 0xC9F1,
	31071 - 11905: 0xCBEE,
	31072 - 11905: 0xECF4,
	31073 - 11905: 0xB57D,
	31074 - 11905: 0xECF2,
	31075 - 11905: 0xB57E,
	31076 - 11905: 0xB580,
	31077 - 11905: 0xCFE9,
	31078 - 11905: 0xB581,
	31079 - 11905: 0xECF6,
	31080 - 11905: 0xC6B1,
	31081 - 11905: 0xB582,
	31082 - 11905: 0xB583,
	31083 - 11905: 0xB584,
	31084 - 11905: 0xB585,
	31085 - 11905: 0xBCC0,
	31086 - 11905: 0xB586,
	31087 - 11905: 0xECF5,
	31088 - 11905: 0xB587,
	31089 - 11905: 0xB588,
	31090 - 11905: 0xB589,
	31091 - 11905: 0xB58A,
	31092 - 11905: 0xB58B,
	31093 - 11905: 0xB58C,
	31094 - 11905: 0xB58D,
	31095 - 11905: 0xB5BB,
	31096 - 11905: 0xBBF6,
	31097 - 11905: 0xB58E,
	31098 - 11905: 0xECF7,
	31099 - 11905: 0xB58F,
	31100 - 11905: 0xB590,
	31101 - 11905: 0xB591,
	31102 - 11905: 0xB592,
	31103 - 11905: 0xB593,
	31104 - 11905: 0xD9F7,
	31105 - 11905: 0xBDFB,
	31106 - 11905: 0xB594,
	31107 - 11905: 0xB595,
	31108 - 11905: 0xC2BB,
	31109 - 11905: 0xECF8,
	31110 - 11905: 0xB596,
	31111 - 11905: 0xB597,
	31112 - 11905: 0xB598,
	31113 - 11905: 0xB599,
	31114 - 11905: 0xECF9,
	31115 - 11905: 0xB59A,
	31116 - 11905: 0xB59B,
	31117 - 11905: 0xB59C,
	31118 - 11905: 0xB59D,
	31119 - 11905: 0xB8A3,
	31120 - 11905: 0xB59E,
	31121 - 11905: 0xB59F,
	31122 - 11905: 0xB5A0,
	31123 - 11905: 0xB640,
	31124 - 11905: 0xB641,
	31125 - 11905: 0xB642,
	31126 - 11905: 0xB643,
	31127 - 11905: 0xB644,
	31128 - 11905: 0xB645,
	31129 - 11905: 0xB646,
	31130 - 11905: 0xECFA,
	31131 - 11905: 0xB647,
	31132 - 11905: 0xB648,
	31133 - 11905: 0xB649,
	31134 - 11905: 0xB64A,
	31135 - 11905: 0xB64B,
	31136 - 11905: 0xB64C,
	31137 - 11905: 0xB64D,
	31138 - 11905: 0xB64E,
	31139 - 11905: 0xB64F,
	31140 - 11905: 0xB650,
	31141 - 11905: 0xB651,
	31142 - 11905: 0xB652,
	31143 - 11905: 0xECFB,
	31144 - 11905: 0xB653,
	31145 - 11905: 0xB654,
	31146 - 11905: 0xB655,
	31147 - 11905: 0xB656,
	31148 - 11905: 0xB657,
	31149 - 11905: 0xB658,
	31150 - 11905: 0xB659,
	31151 - 11905: 0xB65A,
	31152 - 11905: 0xB65B,
	31153 - 11905: 0xB65C,
	31154 - 11905: 0xB65D,
	31155 - 11905: 0xECFC,
	31156 - 11905: 0xB65E,
	31157 - 11905: 0xB65F,
	31158 - 11905: 0xB660,
	31159 - 11905: 0xB661,
	31160 - 11905: 0xB662,
	31161 - 11905: 0xD3ED,
	31162 - 11905: 0xD8AE,
	31163 - 11905: 0xC0EB,
	31164 - 11905: 0xB663,
	31165 - 11905: 0xC7DD,
	31166 - 11905: 0xBACC,
	31167 - 11905: 0xB664,
	31168 - 11905: 0xD0E3,
	31169 - 11905: 0xCBBD,
	31170 - 11905: 0xB665,
	31171 - 11905: 0xCDBA,
	31172 - 11905: 0xB666,
	31173 - 11905: 0xB667,
	31174 - 11905: 0xB8D1,
	31175 - 11905: 0xB668,
	31176 - 11905: 0xB669,
	31177 - 11905: 0xB1FC,
	31178 - 11905: 0xB66A,
	31179 - 11905: 0xC7EF,
	31180 - 11905: 0xB66B,
	31181 - 11905: 0xD6D6,
	31182 - 11905: 0xB66C,
	31183 - 11905: 0xB66D,
	31184 - 11905: 0xB66E,
	31185 - 11905: 0xBFC6,
	31186 - 11905: 0xC3EB,
	31187 - 11905: 0xB66F,
	31188 - 11905: 0xB670,
	31189 - 11905: 0xEFF5,
	31190 - 11905: 0xB671,
	31191 - 11905: 0xB672,
	31192 - 11905: 0xC3D8,
	31193 - 11905: 0xB673,
	31194 - 11905: 0xB674,
	31195 - 11905: 0xB675,
	31196 - 11905: 0xB676,
	31197 - 11905: 0xB677,
	31198 - 11905: 0xB678,
	31199 - 11905: 0xD7E2,
	31200 - 11905: 0xB679,
	31201 - 11905: 0xB67A,
	31202 - 11905: 0xB67B,
	31203 - 11905: 0xEFF7,
	31204 - 11905: 0xB3D3,
	31205 - 11905: 0xB67C,
	31206 - 11905: 0xC7D8,
	31207 - 11905: 0xD1ED,
	31208 - 11905: 0xB67D,
	31209 - 11905: 0xD6C8,
	31210 - 11905: 0xB67E,
	31211 - 11905: 0xEFF8,
	31212 - 11905: 0xB680,
	31213 - 11905: 0xEFF6,
	31214 - 11905: 0xB681,
	31215 - 11905: 0xBBFD,
	31216 - 11905: 0xB3C6,
	31217 - 11905: 0xB682,
	31218 - 11905: 0xB683,
	31219 - 11905: 0xB684,
	31220 - 11905: 0xB685,
	31221 - 11905: 0xB686,
	31222 - 11905: 0xB687,
	31223 - 11905: 0xB688,
	31224 - 11905: 0xBDD5,
	31225 - 11905: 0xB689,
	31226 - 11905: 0xB68A,
	31227 - 11905: 0xD2C6,
	31228 - 11905: 0xB68B,
	31229 - 11905: 0xBBE0,
	31230 - 11905: 0xB68C,
	31231 - 11905: 0xB68D,
	31232 - 11905: 0xCFA1,
	31233 - 11905: 0xB68E,
	31234 - 11905: 0xEFFC,
	31235 - 11905: 0xEFFB,
	31236 - 11905: 0xB68F,
	31237 - 11905: 0xB690,
	31238 - 11905: 0xEFF9,
	31239 - 11905: 0xB691,
	31240 - 11905: 0xB692,
	31241 - 11905: 0xB693,
	31242 - 11905: 0xB694,
	31243 - 11905: 0xB3CC,
	31244 - 11905: 0xB695,
	31245 - 11905: 0xC9D4,
	31246 - 11905: 0xCBB0,
	31247 - 11905: 0xB696,
	31248 - 11905: 0xB697,
	31249 - 11905: 0xB698,
	31250 - 11905: 0xB699,
	31251 - 11905: 0xB69A,
	31252 - 11905: 0xEFFE,
	31253 - 11905: 0xB69B,
	31254 - 11905: 0xB69C,
	31255 - 11905: 0xB0DE,
	31256 - 11905: 0xB69D,
	31257 - 11905: 0xB69E,
	31258 - 11905: 0xD6C9,
	31259 - 11905: 0xB69F,
	31260 - 11905: 0xB6A0,
	31261 - 11905: 0xB740,
	31262 - 11905: 0xEFFD,
	31263 - 11905: 0xB741,
	31264 - 11905: 0xB3ED,
	31265 - 11905: 0xB742,
	31266 - 11905: 0xB743,
	31267 - 11905: 0xF6D5,
	31268 - 11905: 0xB744,
	31269 - 11905: 0xB745,
	31270 - 11905: 0xB746,
	31271 - 11905: 0xB747,
	31272 - 11905: 0xB748,
	31273 - 11905: 0xB749,
	31274 - 11905: 0xB74A,
	31275 - 11905: 0xB74B,
	31276 - 11905: 0xB74C,
	31277 - 11905: 0xB74D,
	31278 - 11905: 0xB74E,
	31279 - 11905: 0xB74F,
	31280 - 11905: 0xB750,
	31281 - 11905: 0xB751,
	31282 - 11905: 0xB752,
	31283 - 11905: 0xCEC8,
	31284 - 11905: 0xB753,
	31285 - 11905: 0xB754,
	31286 - 11905: 0xB755,
	31287 - 11905: 0xF0A2,
	31288 - 11905: 0xB756,
	31289 - 11905: 0xF0A1,
	31290 - 11905: 0xB757,
	31291 - 11905: 0xB5BE,
	31292 - 11905: 0xBCDA,
	31293 - 11905: 0xBBFC,
	31294 - 11905: 0xB758,
	31295 - 11905: 0xB8E5,
	31296 - 11905: 0xB759,
	31297 - 11905: 0xB75A,
	31298 - 11905: 0xB75B,
	31299 - 11905: 0xB75C,
	31300 - 11905: 0xB75D,
	31301 - 11905: 0xB75E,
	31302 - 11905: 0xC4C2,
	31303 - 11905: 0xB75F,
	31304 - 11905: 0xB760,
	31305 - 11905: 0xB761,
	31306 - 11905: 0xB762,
	31307 - 11905: 0xB763,
	31308 - 11905: 0xB764,
	31309 - 11905: 0xB765,
	31310 - 11905: 0xB766,
	31311 - 11905: 0xB767,
	31312 - 11905: 0xB768,
	31313 - 11905: 0xF0A3,
	31314 - 11905: 0xB769,
	31315 - 11905: 0xB76A,
	31316 - 11905: 0xB76B,
	31317 - 11905: 0xB76C,
	31318 - 11905: 0xB76D,
	31319 - 11905: 0xCBEB,
	31320 - 11905: 0xB76E,
	31321 - 11905: 0xB76F,
	31322 - 11905: 0xB770,
	31323 - 11905: 0xB771,
	31324 - 11905: 0xB772,
	31325 - 11905: 0xB773,
	31326 - 11905: 0xB774,
	31327 - 11905: 0xB775,
	31328 - 11905: 0xB776,
	31329 - 11905: 0xB777,
	31330 - 11905: 0xB778,
	31331 - 11905: 0xB779,
	31332 - 11905: 0xB77A,
	31333 - 11905: 0xB77B,
	31334 - 11905: 0xB77C,
	31335 - 11905: 0xB77D,
	31336 - 11905: 0xB77E,
	31337 - 11905: 0xB780,
	31338 - 11905: 0xB781,
	31339 - 11905: 0xB782,
	31340 - 11905: 0xB783,
	31341 - 11905: 0xB784,
	31342 - 11905: 0xB785,
	31343 - 11905: 0xB786,
	31344 - 11905: 0xF0A6,
	31345 - 11905: 0xB787,
	31346 - 11905: 0xB788,
	31347 - 11905: 0xB789,
	31348 - 11905: 0xD1A8,
	31349 - 11905: 0xB78A,
	31350 - 11905: 0xBEBF,
	31351 - 11905: 0xC7EE,
	31352 - 11905: 0xF1B6,
	31353 - 11905: 0xF1B7,
	31354 - 11905: 0xBFD5,
	31355 - 11905: 0xB78B,
	31356 - 11905: 0xB78C,
	31357 - 11905: 0xB78D,
	31358 - 11905: 0xB78E,
	31359 - 11905: 0xB4A9,
	31360 - 11905: 0xF1B8,
	31361 - 11905: 0xCDBB,
	31362 - 11905: 0xB78F,
	31363 - 11905: 0xC7D4,
	31364 - 11905: 0xD5AD,
	31365 - 11905: 0xB790,
	31366 - 11905: 0xF1B9,
	31367 - 11905: 0xB791,
	31368 - 11905: 0xF1BA,
	31369 - 11905: 0xB792,
	31370 - 11905: 0xB793,
	31371 - 11905: 0xB794,
	31372 - 11905: 0xB795,
	31373 - 11905: 0xC7CF,
	31374 - 11905: 0xB796,
	31375 - 11905: 0xB797,
	31376 - 11905: 0xB798,
	31377 - 11905: 0xD2A4,
	31378 - 11905: 0xD6CF,
	31379 - 11905: 0xB799,
	31380 - 11905: 0xB79A,
	31381 - 11905: 0xF1BB,
	31382 - 11905: 0xBDD1,
	31383 - 11905: 0xB4B0,
	31384 - 11905: 0xBEBD,
	31385 - 11905: 0xB79B,
	31386 - 11905: 0xB79C,
	31387 - 11905: 0xB79D,
	31388 - 11905: 0xB4DC,
	31389 - 11905: 0xCED1,
	31390 - 11905: 0xB79E,
	31391 - 11905: 0xBFDF,
	31392 - 11905: 0xF1BD,
	31393 - 11905: 0xB79F,
	31394 - 11905: 0xB7A0,
	31395 - 11905: 0xB840,
	31396 - 11905: 0xB841,
	31397 - 11905: 0xBFFA,
	31398 - 11905: 0xF1BC,
	31399 - 11905: 0xB842,
	31400 - 11905: 0xF1BF,
	31401 - 11905: 0xB843,
	31402 - 11905: 0xB844,
	31403 - 11905: 0xB845,
	31404 - 11905: 0xF1BE,
	31405 - 11905: 0xF1C0,
	31406 - 11905: 0xB846,
	31407 - 11905: 0xB847,
	31408 - 11905: 0xB848,
	31409 - 11905: 0xB849,
	31410 - 11905: 0xB84A,
	31411 - 11905: 0xF1C1,
	31412 - 11905: 0xB84B,
	31413 - 11905: 0xB84C,
	31414 - 11905: 0xB84D,
	31415 - 11905: 0xB84E,
	31416 - 11905: 0xB84F,
	31417 - 11905: 0xB850,
	31418 - 11905: 0xB851,
	31419 - 11905: 0xB852,
	31420 - 11905: 0xB853,
	31421 - 11905: 0xB854,
	31422 - 11905: 0xB855,
	31423 - 11905: 0xC1FE,
	31424 - 11905: 0xB856,
	31425 - 11905: 0xB857,
	31426 - 11905: 0xB858,
	31427 - 11905: 0xB859,
	31428 - 11905: 0xB85A,
	31429 - 11905: 0xB85B,
	31430 - 11905: 0xB85C,
	31431 - 11905: 0xB85D,
	31432 - 11905: 0xB85E,
	31433 - 11905: 0xB85F,
	31434 - 11905: 0xB860,
	31435 - 11905: 0xC1A2,
	31436 - 11905: 0xB861,
	31437 - 11905: 0xB862,
	31438 - 11905: 0xB863,
	31439 - 11905: 0xB864,
	31440 - 11905: 0xB865,
	31441 - 11905: 0xB866,
	31442 - 11905: 0xB867,
	31443 - 11905: 0xB868,
	31444 - 11905: 0xB869,
	31445 - 11905: 0xB86A,
	31446 - 11905: 0xCAFA,
	31447 - 11905: 0xB86B,
	31448 - 11905: 0xB86C,
	31449 - 11905: 0xD5BE,
	31450 - 11905: 0xB86D,
	31451 - 11905: 0xB86E,
	31452 - 11905: 0xB86F,
	31453 - 11905: 0xB870,
	31454 - 11905: 0xBEBA,
	31455 - 11905: 0xBEB9,
	31456 - 11905: 0xD5C2,
	31457 - 11905: 0xB871,
	31458 - 11905: 0xB872,
	31459 - 11905: 0xBFA2,
	31460 - 11905: 0xB873,
	31461 - 11905: 0xCDAF,
	31462 - 11905: 0xF1B5,
	31463 - 11905: 0xB874,
	31464 - 11905: 0xB875,
	31465 - 11905: 0xB876,
	31466 - 11905: 0xB877,
	31467 - 11905: 0xB878,
	31468 - 11905: 0xB879,
	31469 - 11905: 0xBDDF,
	31470 - 11905: 0xB87A,
	31471 - 11905: 0xB6CB,
	31472 - 11905: 0xB87B,
	31473 - 11905: 0xB87C,
	31474 - 11905: 0xB87D,
	31475 - 11905: 0xB87E,
	31476 - 11905: 0xB880,
	31477 - 11905: 0xB881,
	31478 - 11905: 0xB882,
	31479 - 11905: 0xB883,
	31480 - 11905: 0xB884,
	31481 - 11905: 0xD6F1,
	31482 - 11905: 0xF3C3,
	31483 - 11905: 0xB885,
	31484 - 11905: 0xB886,
	31485 - 11905: 0xF3C4,
	31486 - 11905: 0xB887,
	31487 - 11905: 0xB8CD,
	31488 - 11905: 0xB888,
	31489 - 11905: 0xB889,
	31490 - 11905: 0xB88A,
	31491 - 11905: 0xF3C6,
	31492 - 11905: 0xF3C7,
	31493 - 11905: 0xB88B,
	31494 - 11905: 0xB0CA,
	31495 - 11905: 0xB88C,
	31496 - 11905: 0xF3C5,
	31497 - 11905: 0xB88D,
	31498 - 11905: 0xF3C9,
	31499 - 11905: 0xCBF1,
	31500 - 11905: 0xB88E,
	31501 - 11905: 0xB88F,
	31502 - 11905: 0xB890,
	31503 - 11905: 0xF3CB,
	31504 - 11905: 0xB891,
	31505 - 11905: 0xD0A6,
	31506 - 11905: 0xB892,
	31507 - 11905: 0xB893,
	31508 - 11905: 0xB1CA,
	31509 - 11905: 0xF3C8,
	31510 - 11905: 0xB894,
	31511 - 11905: 0xB895,
	31512 - 11905: 0xB896,
	31513 - 11905: 0xF3CF,
	31514 - 11905: 0xB897,
	31515 - 11905: 0xB5D1,
	31516 - 11905: 0xB898,
	31517 - 11905: 0xB899,
	31518 - 11905: 0xF3D7,
	31519 - 11905: 0xB89A,
	31520 - 11905: 0xF3D2,
	31521 - 11905: 0xB89B,
	31522 - 11905: 0xB89C,
	31523 - 11905: 0xB89D,
	31524 - 11905: 0xF3D4,
	31525 - 11905: 0xF3D3,
	31526 - 11905: 0xB7FB,
	31527 - 11905: 0xB89E,
	31528 - 11905: 0xB1BF,
	31529 - 11905: 0xB89F,
	31530 - 11905: 0xF3CE,
	31531 - 11905: 0xF3CA,
	31532 - 11905: 0xB5DA,
	31533 - 11905: 0xB8A0,
	31534 - 11905: 0xF3D0,
	31535 - 11905: 0xB940,
	31536 - 11905: 0xB941,
	31537 - 11905: 0xF3D1,
	31538 - 11905: 0xB942,
	31539 - 11905: 0xF3D5,
	31540 - 11905: 0xB943,
	31541 - 11905: 0xB944,
	31542 - 11905: 0xB945,
	31543 - 11905: 0xB946,
	31544 - 11905: 0xF3CD,
	31545 - 11905: 0xB947,
	31546 - 11905: 0xBCE3,
	31547 - 11905: 0xB948,
	31548 - 11905: 0xC1FD,
	31549 - 11905: 0xB949,
	31550 - 11905: 0xF3D6,
	31551 - 11905: 0xB94A,
	31552 - 11905: 0xB94B,
	31553 - 11905: 0xB94C,
	31554 - 11905: 0xB94D,
	31555 - 11905: 0xB94E,
	31556 - 11905: 0xB94F,
	31557 - 11905: 0xF3DA,
	31558 - 11905: 0xB950,
	31559 - 11905: 0xF3CC,
	31560 - 11905: 0xB951,
	31561 - 11905: 0xB5C8,
	31562 - 11905: 0xB952,
	31563 - 11905: 0xBDEE,
	31564 - 11905: 0xF3DC,
	31565 - 11905: 0xB953,
	31566 - 11905: 0xB954,
	31567 - 11905: 0xB7A4,
	31568 - 11905: 0xBFF0,
	31569 - 11905: 0xD6FE,
	31570 - 11905: 0xCDB2,
	31571 - 11905: 0xB955,
	31572 - 11905: 0xB4F0,
	31573 - 11905: 0xB956,
	31574 - 11905: 0xB2DF,
	31575 - 11905: 0xB957,
	31576 - 11905: 0xF3D8,
	31577 - 11905: 0xB958,
	31578 - 11905: 0xF3D9,
	31579 - 11905: 0xC9B8,
	31580 - 11905: 0xB959,
	31581 - 11905: 0xF3DD,
	31582 - 11905: 0xB95A,
	31583 - 11905: 0xB95B,
	31584 - 11905: 0xF3DE,
	31585 - 11905: 0xB95C,
	31586 - 11905: 0xF3E1,
	31587 - 11905: 0xB95D,
	31588 - 11905: 0xB95E,
	31589 - 11905: 0xB95F,
	31590 - 11905: 0xB960,
	31591 - 11905: 0xB961,
	31592 - 11905: 0xB962,
	31593 - 11905: 0xB963,
	31594 - 11905: 0xB964,
	31595 - 11905: 0xB965,
	31596 - 11905: 0xB966,
	31597 - 11905: 0xB967,
	31598 - 11905: 0xF3DF,
	31599 - 11905: 0xB968,
	31600 - 11905: 0xB969,
	31601 - 11905: 0xF3E3,
	31602 - 11905: 0xF3E2,
	31603 - 11905: 0xB96A,
	31604 - 11905: 0xB96B,
	31605 - 11905: 0xF3DB,
	31606 - 11905: 0xB96C,
	31607 - 11905: 0xBFEA,
	31608 - 11905: 0xB96D,
	31609 - 11905: 0xB3EF,
	31610 - 11905: 0xB96E,
	31611 - 11905: 0xF3E0,
	31612 - 11905: 0xB96F,
	31613 - 11905: 0xB970,
	31614 - 11905: 0xC7A9,
	31615 - 11905: 0xB971,
	31616 - 11905: 0xBCF2,
	31617 - 11905: 0xB972,
	31618 - 11905: 0xB973,
	31619 - 11905: 0xB974,
	31620 - 11905: 0xB975,
	31621 - 11905: 0xF3EB,
	31622 - 11905: 0xB976,
	31623 - 11905: 0xB977,
	31624 - 11905: 0xB978,
	31625 - 11905: 0xB979,
	31626 - 11905: 0xB97A,
	31627 - 11905: 0xB97B,
	31628 - 11905: 0xB97C,
	31629 - 11905: 0xB9BF,
	31630 - 11905: 0xB97D,
	31631 - 11905: 0xB97E,
	31632 - 11905: 0xF3E4,
	31633 - 11905: 0xB980,
	31634 - 11905: 0xB981,
	31635 - 11905: 0xB982,
	31636 - 11905: 0xB2AD,
	31637 - 11905: 0xBBFE,
	31638 - 11905: 0xB983,
	31639 - 11905: 0xCBE3,
	31640 - 11905: 0xB984,
	31641 - 11905: 0xB985,
	31642 - 11905: 0xB986,
	31643 - 11905: 0xB987,
	31644 - 11905: 0xF3ED,
	31645 - 11905: 0xF3E9,
	31646 - 11905: 0xB988,
	31647 - 11905: 0xB989,
	31648 - 11905: 0xB98A,
	31649 - 11905: 0xB9DC,
	31650 - 11905: 0xF3EE,
	31651 - 11905: 0xB98B,
	31652 - 11905: 0xB98C,
	31653 - 11905: 0xB98D,
	31654 - 11905: 0xF3E5,
	31655 - 11905: 0xF3E6,
	31656 - 11905: 0xF3EA,
	31657 - 11905: 0xC2E1,
	31658 - 11905: 0xF3EC,
	31659 - 11905: 0xF3EF,
	31660 - 11905: 0xF3E8,
	31661 - 11905: 0xBCFD,
	31662 - 11905: 0xB98E,
	31663 - 11905: 0xB98F,
	31664 - 11905: 0xB990,
	31665 - 11905: 0xCFE4,
	31666 - 11905: 0xB991,
	31667 - 11905: 0xB992,
	31668 - 11905: 0xF3F0,
	31669 - 11905: 0xB993,
	31670 - 11905: 0xB994,
	31671 - 11905: 0xB995,
	31672 - 11905: 0xF3E7,
	31673 - 11905: 0xB996,
	31674 - 11905: 0xB997,
	31675 - 11905: 0xB998,
	31676 - 11905: 0xB999,
	31677 - 11905: 0xB99A,
	31678 - 11905: 0xB99B,
	31679 - 11905: 0xB99C,
	31680 - 11905: 0xB99D,
	31681 - 11905: 0xF3F2,
	31682 - 11905: 0xB99E,
	31683 - 11905: 0xB99F,
	31684 - 11905: 0xB9A0,
	31685 - 11905: 0xBA40,
	31686 - 11905: 0xD7AD,
	31687 - 11905: 0xC6AA,
	31688 - 11905: 0xBA41,
	31689 - 11905: 0xBA42,
	31690 - 11905: 0xBA43,
	31691 - 11905: 0xBA44,
	31692 - 11905: 0xF3F3,
	31693 - 11905: 0xBA45,
	31694 - 11905: 0xBA46,
	31695 - 11905: 0xBA47,
	31696 - 11905: 0xBA48,
	31697 - 11905: 0xF3F1,
	31698 - 11905: 0xBA49,
	31699 - 11905: 0xC2A8,
	31700 - 11905: 0xBA4A,
	31701 - 11905: 0xBA4B,
	31702 - 11905: 0xBA4C,
	31703 - 11905: 0xBA4D,
	31704 - 11905: 0xBA4E,
	31705 - 11905: 0xB8DD,
	31706 - 11905: 0xF3F5,
	31707 - 11905: 0xBA4F,
	31708 - 11905: 0xBA50,
	31709 - 11905: 0xF3F4,
	31710 - 11905: 0xBA51,
	31711 - 11905: 0xBA52,
	31712 - 11905: 0xBA53,
	31713 - 11905: 0xB4DB,
	31714 - 11905: 0xBA54,
	31715 - 11905: 0xBA55,
	31716 - 11905: 0xBA56,
	31717 - 11905: 0xF3F6,
	31718 - 11905: 0xF3F7,
	31719 - 11905: 0xBA57,
	31720 - 11905: 0xBA58,
	31721 - 11905: 0xBA59,
	31722 - 11905: 0xF3F8,
	31723 - 11905: 0xBA5A,
	31724 - 11905: 0xBA5B,
	31725 - 11905: 0xBA5C,
	31726 - 11905: 0xC0BA,
	31727 - 11905: 0xBA5D,
	31728 - 11905: 0xBA5E,
	31729 - 11905: 0xC0E9,
	31730 - 11905: 0xBA5F,
	31731 - 11905: 0xBA60,
	31732 - 11905: 0xBA61,
	31733 - 11905: 0xBA62,
	31734 - 11905: 0xBA63,
	31735 - 11905: 0xC5F1,
	31736 - 11905: 0xBA64,
	31737 - 11905: 0xBA65,
	31738 - 11905: 0xBA66,
	31739 - 11905: 0xBA67,
	31740 - 11905: 0xF3FB,
	31741 - 11905: 0xBA68,
	31742 - 11905: 0xF3FA,
	31743 - 11905: 0xBA69,
	31744 - 11905: 0xBA6A,
	31745 - 11905: 0xBA6B,
	31746 - 11905: 0xBA6C,
	31747 - 11905: 0xBA6D,
	31748 - 11905: 0xBA6E,
	31749 - 11905: 0xBA6F,
	31750 - 11905: 0xBA70,
	31751 - 11905: 0xB4D8,
	31752 - 11905: 0xBA71,
	31753 - 11905: 0xBA72,
	31754 - 11905: 0xBA73,
	31755 - 11905: 0xF3FE,
	31756 - 11905: 0xF3F9,
	31757 - 11905: 0xBA74,
	31758 - 11905: 0xBA75,
	31759 - 11905: 0xF3FC,
	31760 - 11905: 0xBA76,
	31761 - 11905: 0xBA77,
	31762 - 11905: 0xBA78,
	31763 - 11905: 0xBA79,
	31764 - 11905: 0xBA7A,
	31765 - 11905: 0xBA7B,
	31766 - 11905: 0xF3FD,
	31767 - 11905: 0xBA7C,
	31768 - 11905: 0xBA7D,
	31769 - 11905: 0xBA7E,
	31770 - 11905: 0xBA80,
	31771 - 11905: 0xBA81,
	31772 - 11905: 0xBA82,
	31773 - 11905: 0xBA83,
	31774 - 11905: 0xBA84,
	31775 - 11905: 0xF4A1,
	31776 - 11905: 0xBA85,
	31777 - 11905: 0xBA86,
	31778 - 11905: 0xBA87,
	31779 - 11905: 0xBA88,
	31780 - 11905: 0xBA89,
	31781 - 11905: 0xBA8A,
	31782 - 11905: 0xF4A3,
	31783 - 11905: 0xBBC9,
	31784 - 11905: 0xBA8B,
	31785 - 11905: 0xBA8C,
	31786 - 11905: 0xF4A2,
	31787 - 11905: 0xBA8D,
	31788 - 11905: 0xBA8E,
	31789 - 11905: 0xBA8F,
	31790 - 11905: 0xBA90,
	31791 - 11905: 0xBA91,
	31792 - 11905: 0xBA92,
	31793 - 11905: 0xBA93,
	31794 - 11905: 0xBA94,
	31795 - 11905: 0xBA95,
	31796 - 11905: 0xBA96,
	31797 - 11905: 0xBA97,
	31798 - 11905: 0xBA98,
	31799 - 11905: 0xBA99,
	31800 - 11905: 0xF4A4,
	31801 - 11905: 0xBA9A,
	31802 - 11905: 0xBA9B,
	31803 - 11905: 0xBA9C,
	31804 - 11905: 0xBA9D,
	31805 - 11905: 0xBA9E,
	31806 - 11905: 0xBA9F,
	31807 - 11905: 0xB2BE,
	31808 - 11905: 0xF4A6,
	31809 - 11905: 0xF4A5,
	31810 - 11905: 0xBAA0,
	31811 - 11905: 0xBB40,
	31812 - 11905: 0xBB41,
	31813 - 11905: 0xBB42,
	31814 - 11905: 0xBB43,
	31815 - 11905: 0xBB44,
	31816 - 11905: 0xBB45,
	31817 - 11905: 0xBB46,
	31818 - 11905: 0xBB47,
	31819 - 11905: 0xBB48,
	31820 - 11905: 0xBB49,
	31821 - 11905: 0xBCAE,
	31822 - 11905: 0xBB4A,
	31823 - 11905: 0xBB4B,
	31824 - 11905: 0xBB4C,
	31825 - 11905: 0xBB4D,
	31826 - 11905: 0xBB4E,
	31827 - 11905: 0xBB4F,
	31828 - 11905: 0xBB50,
	31829 - 11905: 0xBB51,
	31830 - 11905: 0xBB52,
	31831 - 11905: 0xBB53,
	31832 - 11905: 0xBB54,
	31833 - 11905: 0xBB55,
	31834 - 11905: 0xBB56,
	31835 - 11905: 0xBB57,
	31836 - 11905: 0xBB58,
	31837 - 11905: 0xBB59,
	31838 - 11905: 0xBB5A,
	31839 - 11905: 0xBB5B,
	31840 - 11905: 0xBB5C,
	31841 - 11905: 0xBB5D,
	31842 - 11905: 0xBB5E,
	31843 - 11905: 0xBB5F,
	31844 - 11905: 0xBB60,
	31845 - 11905: 0xBB61,
	31846 - 11905: 0xBB62,
	31847 - 11905: 0xBB63,
	31848 - 11905: 0xBB64,
	31849 - 11905: 0xBB65,
	31850 - 11905: 0xBB66,
	31851 - 11905: 0xBB67,
	31852 - 11905: 0xBB68,
	31853 - 11905: 0xBB69,
	31854 - 11905: 0xBB6A,
	31855 - 11905: 0xBB6B,
	31856 - 11905: 0xBB6C,
	31857 - 11905: 0xBB6D,
	31858 - 11905: 0xBB6E,
	31859 - 11905: 0xC3D7,
	31860 - 11905: 0xD9E1,
	31861 - 11905: 0xBB6F,
	31862 - 11905: 0xBB70,
	31863 - 11905: 0xBB71,
	31864 - 11905: 0xBB72,
	31865 - 11905: 0xBB73,
	31866 - 11905: 0xBB74,
	31867 - 11905: 0xC0E0,
	31868 - 11905: 0xF4CC,
	31869 - 11905: 0xD7D1,
	31870 - 11905: 0xBB75,
	31871 - 11905: 0xBB76,
	31872 - 11905: 0xBB77,
	31873 - 11905: 0xBB78,
	31874 - 11905: 0xBB79,
	31875 - 11905: 0xBB7A,
	31876 - 11905: 0xBB7B,
	31877 - 11905: 0xBB7C,
	31878 - 11905: 0xBB7D,
	31879 - 11905: 0xBB7E,
	31880 - 11905: 0xBB80,
	31881 - 11905: 0xB7DB,
	31882 - 11905: 0xBB81,
	31883 - 11905: 0xBB82,
	31884 - 11905: 0xBB83,
	31885 - 11905: 0xBB84,
	31886 - 11905: 0xBB85,
	31887 - 11905: 0xBB86,
	31888 - 11905: 0xBB87,
	31889 - 11905: 0xF4CE,
	31890 - 11905: 0xC1A3,
	31891 - 11905: 0xBB88,
	31892 - 11905: 0xBB89,
	31893 - 11905: 0xC6C9,
	31894 - 11905: 0xBB8A,
	31895 - 11905: 0xB4D6,
	31896 - 11905: 0xD5B3,
	31897 - 11905: 0xBB8B,
	31898 - 11905: 0xBB8C,
	31899 - 11905: 0xBB8D,
	31900 - 11905: 0xF4D0,
	31901 - 11905: 0xF4CF,
	31902 - 11905: 0xF4D1,
	31903 - 11905: 0xCBDA,
	31904 - 11905: 0xBB8E,
	31905 - 11905: 0xBB8F,
	31906 - 11905: 0xF4D2,
	31907 - 11905: 0xBB90,
	31908 - 11905: 0xD4C1,
	31909 - 11905: 0xD6E0,
	31910 - 11905: 0xBB91,
	31911 - 11905: 0xBB92,
	31912 - 11905: 0xBB93,
	31913 - 11905: 0xBB94,
	31914 - 11905: 0xB7E0,
	31915 - 11905: 0xBB95,
	31916 - 11905: 0xBB96,
	31917 - 11905: 0xBB97,
	31918 - 11905: 0xC1B8,
	31919 - 11905: 0xBB98,
	31920 - 11905: 0xBB99,
	31921 - 11905: 0xC1BB,
	31922 - 11905: 0xF4D3,
	31923 - 11905: 0xBEAC,
	31924 - 11905: 0xBB9A,
	31925 - 11905: 0xBB9B,
	31926 - 11905: 0xBB9C,
	31927 - 11905: 0xBB9D,
	31928 - 11905: 0xBB9E,
	31929 - 11905: 0xB4E2,
	31930 - 11905: 0xBB9F,
	31931 - 11905: 0xBBA0,
	31932 - 11905: 0xF4D4,
	31933 - 11905: 0xF4D5,
	31934 - 11905: 0xBEAB,
	31935 - 11905: 0xBC40,
	31936 - 11905: 0xBC41,
	31937 - 11905: 0xF4D6,
	31938 - 11905: 0xBC42,
	31939 - 11905: 0xBC43,
	31940 - 11905: 0xBC44,
	31941 - 11905: 0xF4DB,
	31942 - 11905: 0xBC45,
	31943 - 11905: 0xF4D7,
	31944 - 11905: 0xF4DA,
	31945 - 11905: 0xBC46,
	31946 - 11905: 0xBAFD,
	31947 - 11905: 0xBC47,
	31948 - 11905: 0xF4D8,
	31949 - 11905: 0xF4D9,
	31950 - 11905: 0xBC48,
	31951 - 11905: 0xBC49,
	31952 - 11905: 0xBC4A,
	31953 - 11905: 0xBC4B,
	31954 - 11905: 0xBC4C,
	31955 - 11905: 0xBC4D,
	31956 - 11905: 0xBC4E,
	31957 - 11905: 0xB8E2,
	31958 - 11905: 0xCCC7,
	31959 - 11905: 0xF4DC,
	31960 - 11905: 0xBC4F,
	31961 - 11905: 0xB2DA,
	31962 - 11905: 0xBC50,
	31963 - 11905: 0xBC51,
	31964 - 11905: 0xC3D3,
	31965 - 11905: 0xBC52,
	31966 - 11905: 0xBC53,
	31967 - 11905: 0xD4E3,
	31968 - 11905: 0xBFB7,
	31969 - 11905: 0xBC54,
	31970 - 11905: 0xBC55,
	31971 - 11905: 0xBC56,
	31972 - 11905: 0xBC57,
	31973 - 11905: 0xBC58,
	31974 - 11905: 0xBC59,
	31975 - 11905: 0xBC5A,
	31976 - 11905: 0xF4DD,
	31977 - 11905: 0xBC5B,
	31978 - 11905: 0xBC5C,
	31979 - 11905: 0xBC5D,
	31980 - 11905: 0xBC5E,
	31981 - 11905: 0xBC5F,
	31982 - 11905: 0xBC60,
	31983 - 11905: 0xC5B4,
	31984 - 11905: 0xBC61,
	31985 - 11905: 0xBC62,
	31986 - 11905: 0xBC63,
	31987 - 11905: 0xBC64,
	31988 - 11905: 0xBC65,
	31989 - 11905: 0xBC66,
	31990 - 11905: 0xBC67,
	31991 - 11905: 0xBC68,
	31992 - 11905: 0xF4E9,
	31993 - 11905: 0xBC69,
	31994 - 11905: 0xBC6A,
	31995 - 11905: 0xCFB5,
	31996 - 11905: 0xBC6B,
	31997 - 11905: 0xBC6C,
	31998 - 11905: 0xBC6D,
	31999 - 11905: 0xBC6E,
	32000 - 11905: 0xBC6F,
	32001 - 11905: 0xBC70,
	32002 - 11905: 0xBC71,
	32003 - 11905: 0xBC72,
	32004 - 11905: 0xBC73,
	32005 - 11905: 0xBC74,
	32006 - 11905: 0xBC75,
	32007 - 11905: 0xBC76,
	32008 - 11905: 0xBC77,
	32009 - 11905: 0xBC78,
	32010 - 11905: 0xCEC9,
	32011 - 11905: 0xBC79,
	32012 - 11905: 0xBC7A,
	32013 - 11905: 0xBC7B,
	32014 - 11905: 0xBC7C,
	32015 - 11905: 0xBC7D,
	32016 - 11905: 0xBC7E,
	32017 - 11905: 0xBC80,
	32018 - 11905: 0xBC81,
	32019 - 11905: 0xBC82,
	32020 - 11905: 0xBC83,
	32021 - 11905: 0xBC84,
	32022 - 11905: 0xBC85,
	32023 - 11905: 0xBC86,
	32024 - 11905: 0xBC87,
	32025 - 11905: 0xBC88,
	32026 - 11905: 0xBC89,
	32027 - 11905: 0xBC8A,
	32028 - 11905: 0xBC8B,
	32029 - 11905: 0xBC8C,
	32030 - 11905: 0xBC8D,
	32031 - 11905: 0xBC8E,
	32032 - 11905: 0xCBD8,
	32033 - 11905: 0xBC8F,
	32034 - 11905: 0xCBF7,
	32035 - 11905: 0xBC90,
	32036 - 11905: 0xBC91,
	32037 - 11905: 0xBC92,
	32038 - 11905: 0xBC93,
	32039 - 11905: 0xBDF4,
	32040 - 11905: 0xBC94,
	32041 - 11905: 0xBC95,
	32042 - 11905: 0xBC96,
	32043 - 11905: 0xD7CF,
	32044 - 11905: 0xBC97,
	32045 - 11905: 0xBC98,
	32046 - 11905: 0xBC99,
	32047 - 11905: 0xC0DB,
	32048 - 11905: 0xBC9A,
	32049 - 11905: 0xBC9B,
	32050 - 11905: 0xBC9C,
	32051 - 11905: 0xBC9D,
	32052 - 11905: 0xBC9E,
	32053 - 11905: 0xBC9F,
	32054 - 11905: 0xBCA0,
	32055 - 11905: 0xBD40,
	32056 - 11905: 0xBD41,
	32057 - 11905: 0xBD42,
	32058 - 11905: 0xBD43,
	32059 - 11905: 0xBD44,
	32060 - 11905: 0xBD45,
	32061 - 11905: 0xBD46,
	32062 - 11905: 0xBD47,
	32063 - 11905: 0xBD48,
	32064 - 11905: 0xBD49,
	32065 - 11905: 0xBD4A,
	32066 - 11905: 0xBD4B,
	32067 - 11905: 0xBD4C,
	32068 - 11905: 0xBD4D,
	32069 - 11905: 0xBD4E,
	32070 - 11905: 0xBD4F,
	32071 - 11905: 0xBD50,
	32072 - 11905: 0xBD51,
	32073 - 11905: 0xBD52,
	32074 - 11905: 0xBD53,
	32075 - 11905: 0xBD54,
	32076 - 11905: 0xBD55,
	32077 - 11905: 0xBD56,
	32078 - 11905: 0xBD57,
	32079 - 11905: 0xBD58,
	32080 - 11905: 0xBD59,
	32081 - 11905: 0xBD5A,
	32082 - 11905: 0xBD5B,
	32083 - 11905: 0xBD5C,
	32084 - 11905: 0xBD5D,
	32085 - 11905: 0xBD5E,
	32086 - 11905: 0xBD5F,
	32087 - 11905: 0xBD60,
	32088 - 11905: 0xBD61,
	32089 - 11905: 0xBD62,
	32090 - 11905: 0xBD63,
	32091 - 11905: 0xBD64,
	32092 - 11905: 0xBD65,
	32093 - 11905: 0xBD66,
	32094 - 11905: 0xBD67,
	32095 - 11905: 0xBD68,
	32096 - 11905: 0xBD69,
	32097 - 11905: 0xBD6A,
	32098 - 11905: 0xBD6B,
	32099 - 11905: 0xBD6C,
	32100 - 11905: 0xBD6D,
	32101 - 11905: 0xBD6E,
	32102 - 11905: 0xBD6F,
	32103 - 11905: 0xBD70,
	32104 - 11905: 0xBD71,
	32105 - 11905: 0xBD72,
	32106 - 11905: 0xBD73,
	32107 - 11905: 0xBD74,
	32108 - 11905: 0xBD75,
	32109 - 11905: 0xBD76,
	32110 - 11905: 0xD0F5,
	32111 - 11905: 0xBD77,
	32112 - 11905: 0xBD78,
	32113 - 11905: 0xBD79,
	32114 - 11905: 0xBD7A,
	32115 - 11905: 0xBD7B,
	32116 - 11905: 0xBD7C,
	32117 - 11905: 0xBD7D,
	32118 - 11905: 0xBD7E,
	32119 - 11905: 0xF4EA,
	32120 - 11905: 0xBD80,
	32121 - 11905: 0xBD81,
	32122 - 11905: 0xBD82,
	32123 - 11905: 0xBD83,
	32124 - 11905: 0xBD84,
	32125 - 11905: 0xBD85,
	32126 - 11905: 0xBD86,
	32127 - 11905: 0xBD87,
	32128 - 11905: 0xBD88,
	32129 - 11905: 0xBD89,
	32130 - 11905: 0xBD8A,
	32131 - 11905: 0xBD8B,
	32132 - 11905: 0xBD8C,
	32133 - 11905: 0xBD8D,
	32134 - 11905: 0xBD8E,
	32135 - 11905: 0xBD8F,
	32136 - 11905: 0xBD90,
	32137 - 11905: 0xBD91,
	32138 - 11905: 0xBD92,
	32139 - 11905: 0xBD93,
	32140 - 11905: 0xBD94,
	32141 - 11905: 0xBD95,
	32142 - 11905: 0xBD96,
	32143 - 11905: 0xBD97,
	32144 - 11905: 0xBD98,
	32145 - 11905: 0xBD99,
	32146 - 11905: 0xBD9A,
	32147 - 11905: 0xBD9B,
	32148 - 11905: 0xBD9C,
	32149 - 11905: 0xBD9D,
	32150 - 11905: 0xBD9E,
	32151 - 11905: 0xBD9F,
	32152 - 11905: 0xBDA0,
	32153 - 11905: 0xBE40,
	32154 - 11905: 0xBE41,
	32155 - 11905: 0xBE42,
	32156 - 11905: 0xBE43,
	32157 - 11905: 0xBE44,
	32158 - 11905: 0xBE45,
	32159 - 11905: 0xBE46,
	32160 - 11905: 0xBE47,
	32161 - 11905: 0xBE48,
	32162 - 11905: 0xBE49,
	32163 - 11905: 0xBE4A,
	32164 - 11905: 0xBE4B,
	32165 - 11905: 0xBE4C,
	32166 - 11905: 0xF4EB,
	32167 - 11905: 0xBE4D,
	32168 - 11905: 0xBE4E,
	32169 - 11905: 0xBE4F,
	32170 - 11905: 0xBE50,
	32171 - 11905: 0xBE51,
	32172 - 11905: 0xBE52,
	32173 - 11905: 0xBE53,
	32174 - 11905: 0xF4EC,
	32175 - 11905: 0xBE54,
	32176 - 11905: 0xBE55,
	32177 - 11905: 0xBE56,
	32178 - 11905: 0xBE57,
	32179 - 11905: 0xBE58,
	32180 - 11905: 0xBE59,
	32181 - 11905: 0xBE5A,
	32182 - 11905: 0xBE5B,
	32183 - 11905: 0xBE5C,
	32184 - 11905: 0xBE5D,
	32185 - 11905: 0xBE5E,
	32186 - 11905: 0xBE5F,
	32187 - 11905: 0xBE60,
	32188 - 11905: 0xBE61,
	32189 - 11905: 0xBE62,
	32190 - 11905: 0xBE63,
	32191 - 11905: 0xBE64,
	32192 - 11905: 0xBE65,
	32193 - 11905: 0xBE66,
	32194 - 11905: 0xBE67,
	32195 - 11905: 0xBE68,
	32196 - 11905: 0xBE69,
	32197 - 11905: 0xBE6A,
	32198 - 11905: 0xBE6B,
	32199 - 11905: 0xBE6C,
	32200 - 11905: 0xBE6D,
	32201 - 11905: 0xBE6E,
	32202 - 11905: 0xBE6F,
	32203 - 11905: 0xBE70,
	32204 - 11905: 0xBE71,
	32205 - 11905: 0xBE72,
	32206 - 11905: 0xBE73,
	32207 - 11905: 0xBE74,
	32208 - 11905: 0xBE75,
	32209 - 11905: 0xBE76,
	32210 - 11905: 0xBE77,
	32211 - 11905: 0xBE78,
	32212 - 11905: 0xBE79,
	32213 - 11905: 0xBE7A,
	32214 - 11905: 0xBE7B,
	32215 - 11905: 0xBE7C,
	32216 - 11905: 0xBE7D,
	32217 - 11905: 0xBE7E,
	32218 - 11905: 0xBE80,
	32219 - 11905: 0xBE81,
	32220 - 11905: 0xBE82,
	32221 - 11905: 0xBE83,
	32222 - 11905: 0xBE84,
	32223 - 11905: 0xBE85,
	32224 - 11905: 0xBE86,
	32225 - 11905: 0xBE87,
	32226 - 11905: 0xBE88,
	32227 - 11905: 0xBE89,
	32228 - 11905: 0xBE8A,
	32229 - 11905: 0xBE8B,
	32230 - 11905: 0xBE8C,
	32231 - 11905: 0xBE8D,
	32232 - 11905: 0xBE8E,
	32233 - 11905: 0xBE8F,
	32234 - 11905: 0xBE90,
	32235 - 11905: 0xBE91,
	32236 - 11905: 0xBE92,
	32237 - 11905: 0xBE93,
	32238 - 11905: 0xBE94,
	32239 - 11905: 0xBE95,
	32240 - 11905: 0xBE96,
	32241 - 11905: 0xBE97,
	32242 - 11905: 0xBE98,
	32243 - 11905: 0xBE99,
	32244 - 11905: 0xBE9A,
	32245 - 11905: 0xBE9B,
	32246 - 11905: 0xBE9C,
	32247 - 11905: 0xBE9D,
	32248 - 11905: 0xBE9E,
	32249 - 11905: 0xBE9F,
	32250 - 11905: 0xBEA0,
	32251 - 11905: 0xBF40,
	32252 - 11905: 0xBF41,
	32253 - 11905: 0xBF42,
	32254 - 11905: 0xBF43,
	32255 - 11905: 0xBF44,
	32256 - 11905: 0xBF45,
	32257 - 11905: 0xBF46,
	32258 - 11905: 0xBF47,
	32259 - 11905: 0xBF48,
	32260 - 11905: 0xBF49,
	32261 - 11905: 0xBF4A,
	32262 - 11905: 0xBF4B,
	32263 - 11905: 0xBF4C,
	32264 - 11905: 0xBF4D,
	32265 - 11905: 0xBF4E,
	32266 - 11905: 0xBF4F,
	32267 - 11905: 0xBF50,
	32268 - 11905: 0xBF51,
	32269 - 11905: 0xBF52,
	32270 - 11905: 0xBF53,
	32271 - 11905: 0xBF54,
	32272 - 11905: 0xBF55,
	32273 - 11905: 0xBF56,
	32274 - 11905: 0xBF57,
	32275 - 11905: 0xBF58,
	32276 - 11905: 0xBF59,
	32277 - 11905: 0xBF5A,
	32278 - 11905: 0xBF5B,
	32279 - 11905: 0xBF5C,
	32280 - 11905: 0xBF5D,
	32281 - 11905: 0xBF5E,
	32282 - 11905: 0xBF5F,
	32283 - 11905: 0xBF60,
	32284 - 11905: 0xBF61,
	32285 - 11905: 0xBF62,
	32286 - 11905: 0xBF63,
	32287 - 11905: 0xBF64,
	32288 - 11905: 0xBF65,
	32289 - 11905: 0xBF66,
	32290 - 11905: 0xBF67,
	32291 - 11905: 0xBF68,
	32292 - 11905: 0xBF69,
	32293 - 11905: 0xBF6A,
	32294 - 11905: 0xBF6B,
	32295 - 11905: 0xBF6C,
	32296 - 11905: 0xBF6D,
	32297 - 11905: 0xBF6E,
	32298 - 11905: 0xBF6F,
	32299 - 11905: 0xBF70,
	32300 - 11905: 0xBF71,
	32301 - 11905: 0xBF72,
	32302 - 11905: 0xBF73,
	32303 - 11905: 0xBF74,
	32304 - 11905: 0xBF75,
	32305 - 11905: 0xBF76,
	32306 - 11905: 0xBF77,
	32307 - 11905: 0xBF78,
	32308 - 11905: 0xBF79,
	32309 - 11905: 0xBF7A,
	32310 - 11905: 0xBF7B,
	32311 - 11905: 0xBF7C,
	32312 - 11905: 0xBF7D,
	32313 - 11905: 0xBF7E,
	32314 - 11905: 0xBF80,
	32315 - 11905: 0xF7E3,
	32316 - 11905: 0xBF81,
	32317 - 11905: 0xBF82,
	32318 - 11905: 0xBF83,
	32319 - 11905: 0xBF84,
	32320 - 11905: 0xBF85,
	32321 - 11905: 0xB7B1,
	32322 - 11905: 0xBF86,
	32323 - 11905: 0xBF87,
	32324 - 11905: 0xBF88,
	32325 - 11905: 0xBF89,
	32326 - 11905: 0xBF8A,
	32327 - 11905: 0xF4ED,
	32328 - 11905: 0xBF8B,
	32329 - 11905: 0xBF8C,
	32330 - 11905: 0xBF8D,
	32331 - 11905: 0xBF8E,
	32332 - 11905: 0xBF8F,
	32333 - 11905: 0xBF90,
	32334 - 11905: 0xBF91,
	32335 - 11905: 0xBF92,
	32336 - 11905: 0xBF93,
	32337 - 11905: 0xBF94,
	32338 - 11905: 0xBF95,
	32339 - 11905: 0xBF96,
	32340 - 11905: 0xBF97,
	32341 - 11905: 0xBF98,
	32342 - 11905: 0xBF99,
	32343 - 11905: 0xBF9A,
	32344 - 11905: 0xBF9B,
	32345 - 11905: 0xBF9C,
	32346 - 11905: 0xBF9D,
	32347 - 11905: 0xBF9E,
	32348 - 11905: 0xBF9F,
	32349 - 11905: 0xBFA0,
	32350 - 11905: 0xC040,
	32351 - 11905: 0xC041,
	32352 - 11905: 0xC042,
	32353 - 11905: 0xC043,
	32354 - 11905: 0xC044,
	32355 - 11905: 0xC045,
	32356 - 11905: 0xC046,
	32357 - 11905: 0xC047,
	32358 - 11905: 0xC048,
	32359 - 11905: 0xC049,
	32360 - 11905: 0xC04A,
	32361 - 11905: 0xC04B,
	32362 - 11905: 0xC04C,
	32363 - 11905: 0xC04D,
	32364 - 11905: 0xC04E,
	32365 - 11905: 0xC04F,
	32366 - 11905: 0xC050,
	32367 - 11905: 0xC051,
	32368 - 11905: 0xC052,
	32369 - 11905: 0xC053,
	32370 - 11905: 0xC054,
	32371 - 11905: 0xC055,
	32372 - 11905: 0xC056,
	32373 - 11905: 0xC057,
	32374 - 11905: 0xC058,
	32375 - 11905: 0xC059,
	32376 - 11905: 0xC05A,
	32377 - 11905: 0xC05B,
	32378 - 11905: 0xC05C,
	32379 - 11905: 0xC05D,
	32380 - 11905: 0xC05E,
	32381 - 11905: 0xC05F,
	32382 - 11905: 0xC060,
	32383 - 11905: 0xC061,
	32384 - 11905: 0xC062,
	32385 - 11905: 0xC063,
	32386 - 11905: 0xD7EB,
	32387 - 11905: 0xC064,
	32388 - 11905: 0xC065,
	32389 - 11905: 0xC066,
	32390 - 11905: 0xC067,
	32391 - 11905: 0xC068,
	32392 - 11905: 0xC069,
	32393 - 11905: 0xC06A,
	32394 - 11905: 0xC06B,
	32395 - 11905: 0xC06C,
	32396 - 11905: 0xC06D,
	32397 - 11905: 0xC06E,
	32398 - 11905: 0xC06F,
	32399 - 11905: 0xC070,
	32400 - 11905: 0xC071,
	32401 - 11905: 0xC072,
	32402 - 11905: 0xC073,
	32403 - 11905: 0xC074,
	32404 - 11905: 0xC075,
	32405 - 11905: 0xC076,
	32406 - 11905: 0xC077,
	32407 - 11905: 0xC078,
	32408 - 11905: 0xC079,
	32409 - 11905: 0xC07A,
	32410 - 11905: 0xC07B,
	32411 - 11905: 0xF4EE,
	32412 - 11905: 0xC07C,
	32413 - 11905: 0xC07D,
	32414 - 11905: 0xC07E,
	32415 - 11905: 0xE6F9,
	32416 - 11905: 0xBEC0,
	32417 - 11905: 0xE6FA,
	32418 - 11905: 0xBAEC,
	32419 - 11905: 0xE6FB,
	32420 - 11905: 0xCFCB,
	32421 - 11905: 0xE6FC,
	32422 - 11905: 0xD4BC,
	32423 - 11905: 0xBCB6,
	32424 - 11905: 0xE6FD,
	32425 - 11905: 0xE6FE,
	32426 - 11905: 0xBCCD,
	32427 - 11905: 0xC8D2,
	32428 - 11905: 0xCEB3,
	32429 - 11905: 0xE7A1,
	32430 - 11905: 0xC080,
	32431 - 11905: 0xB4BF,
	32432 - 11905: 0xE7A2,
	32433 - 11905: 0xC9B4,
	32434 - 11905: 0xB8D9,
	32435 - 11905: 0xC4C9,
	32436 - 11905: 0xC081,
	32437 - 11905: 0xD7DD,
	32438 - 11905: 0xC2DA,
	32439 - 11905: 0xB7D7,
	32440 - 11905: 0xD6BD,
	32441 - 11905: 0xCEC6,
	32442 - 11905: 0xB7C4,
	32443 - 11905: 0xC082,
	32444 - 11905: 0xC083,
	32445 - 11905: 0xC5A6,
	32446 - 11905: 0xE7A3,
	32447 - 11905: 0xCFDF,
	32448 - 11905: 0xE7A4,
	32449 - 11905: 0xE7A5,
	32450 - 11905: 0xE7A6,
	32451 - 11905: 0xC1B7,
	32452 - 11905: 0xD7E9,
	32453 - 11905: 0xC9F0,
	32454 - 11905: 0xCFB8,
	32455 - 11905: 0xD6AF,
	32456 - 11905: 0xD6D5,
	32457 - 11905: 0xE7A7,
	32458 - 11905: 0xB0ED,
	32459 - 11905: 0xE7A8,
	32460 - 11905: 0xE7A9,
	32461 - 11905: 0xC9DC,
	32462 - 11905: 0xD2EF,
	32463 - 11905: 0xBEAD,
	32464 - 11905: 0xE7AA,
	32465 - 11905: 0xB0F3,
	32466 - 11905: 0xC8DE,
	32467 - 11905: 0xBDE1,
	32468 - 11905: 0xE7AB,
	32469 - 11905: 0xC8C6,
	32470 - 11905: 0xC084,
	32471 - 11905: 0xE7AC,
	32472 - 11905: 0xBBE6,
	32473 - 11905: 0xB8F8,
	32474 - 11905: 0xD1A4,
	32475 - 11905: 0xE7AD,
	32476 - 11905: 0xC2E7,
	32477 - 11905: 0xBEF8,
	32478 - 11905: 0xBDCA,
	32479 - 11905: 0xCDB3,
	32480 - 11905: 0xE7AE,
	32481 - 11905: 0xE7AF,
	32482 - 11905: 0xBEEE,
	32483 - 11905: 0xD0E5,
	32484 - 11905: 0xC085,
	32485 - 11905: 0xCBE7,
	32486 - 11905: 0xCCD0,
	32487 - 11905: 0xBCCC,
	32488 - 11905: 0xE7B0,
	32489 - 11905: 0xBCA8,
	32490 - 11905: 0xD0F7,
	32491 - 11905: 0xE7B1,
	32492 - 11905: 0xC086,
	32493 - 11905: 0xD0F8,
	32494 - 11905: 0xE7B2,
	32495 - 11905: 0xE7B3,
	32496 - 11905: 0xB4C2,
	32497 - 11905: 0xE7B4,
	32498 - 11905: 0xE7B5,
	32499 - 11905: 0xC9FE,
	32500 - 11905: 0xCEAC,
	32501 - 11905: 0xC3E0,
	32502 - 11905: 0xE7B7,
	32503 - 11905: 0xB1C1,
	32504 - 11905: 0xB3F1,
	32505 - 11905: 0xC087,
	32506 - 11905: 0xE7B8,
	32507 - 11905: 0xE7B9,
	32508 - 11905: 0xD7DB,
	32509 - 11905: 0xD5C0,
	32510 - 11905: 0xE7BA,
	32511 - 11905: 0xC2CC,
	32512 - 11905: 0xD7BA,
	32513 - 11905: 0xE7BB,
	32514 - 11905: 0xE7BC,
	32515 - 11905: 0xE7BD,
	32516 - 11905: 0xBCEA,
	32517 - 11905: 0xC3E5,
	32518 - 11905: 0xC0C2,
	32519 - 11905: 0xE7BE,
	32520 - 11905: 0xE7BF,
	32521 - 11905: 0xBCA9,
	32522 - 11905: 0xC088,
	32523 - 11905: 0xE7C0,
	32524 - 11905: 0xE7C1,
	32525 - 11905: 0xE7B6,
	32526 - 11905: 0xB6D0,
	32527 - 11905: 0xE7C2,
	32528 - 11905: 0xC089,
	32529 - 11905: 0xE7C3,
	32530 - 11905: 0xE7C4,
	32531 - 11905: 0xBBBA,
	32532 - 11905: 0xB5DE,
	32533 - 11905: 0xC2C6,
	32534 - 11905: 0xB1E0,
	32535 - 11905: 0xE7C5,
	32536 - 11905: 0xD4B5,
	32537 - 11905: 0xE7C6,
	32538 - 11905: 0xB8BF,
	32539 - 11905: 0xE7C8,
	32540 - 11905: 0xE7C7,
	32541 - 11905: 0xB7EC,
	32542 - 11905: 0xC08A,
	32543 - 11905: 0xE7C9,
	32544 - 11905: 0xB2F8,
	32545 - 11905: 0xE7CA,
	32546 - 11905: 0xE7CB,
	32547 - 11905: 0xE7CC,
	32548 - 11905: 0xE7CD,
	32549 - 11905: 0xE7CE,
	32550 - 11905: 0xE7CF,
	32551 - 11905: 0xE7D0,
	32552 - 11905: 0xD3A7,
	32553 - 11905: 0xCBF5,
	32554 - 11905: 0xE7D1,
	32555 - 11905: 0xE7D2,
	32556 - 11905: 0xE7D3,
	32557 - 11905: 0xE7D4,
	32558 - 11905: 0xC9C9,
	32559 - 11905: 0xE7D5,
	32560 - 11905: 0xE7D6,
	32561 - 11905: 0xE7D7,
	32562 - 11905: 0xE7D8,
	32563 - 11905: 0xE7D9,
	32564 - 11905: 0xBDC9,
	32565 - 11905: 0xE7DA,
	32566 - 11905: 0xF3BE,
	32567 - 11905: 0xC08B,
	32568 - 11905: 0xB8D7,
	32569 - 11905: 0xC08C,
	32570 - 11905: 0xC8B1,
	32571 - 11905: 0xC08D,
	32572 - 11905: 0xC08E,
	32573 - 11905: 0xC08F,
	32574 - 11905: 0xC090,
	32575 - 11905: 0xC091,
	32576 - 11905: 0xC092,
	32577 - 11905: 0xC093,
	32578 - 11905: 0xF3BF,
	32579 - 11905: 0xC094,
	32580 - 11905: 0xF3C0,
	32581 - 11905: 0xF3C1,
	32582 - 11905: 0xC095,
	32583 - 11905: 0xC096,
	32584 - 11905: 0xC097,
	32585 - 11905: 0xC098,
	32586 - 11905: 0xC099,
	32587 - 11905: 0xC09A,
	32588 - 11905: 0xC09B,
	32589 - 11905: 0xC09C,
	32590 - 11905: 0xC09D,
	32591 - 11905: 0xC09E,
	32592 - 11905: 0xB9DE,
	32593 - 11905: 0xCDF8,
	32594 - 11905: 0xC09F,
	32595 - 11905: 0xC0A0,
	32596 - 11905: 0xD8E8,
	32597 - 11905: 0xBAB1,
	32598 - 11905: 0xC140,
	32599 - 11905: 0xC2DE,
	32600 - 11905: 0xEEB7,
	32601 - 11905: 0xC141,
	32602 - 11905: 0xB7A3,
	32603 - 11905: 0xC142,
	32604 - 11905: 0xC143,
	32605 - 11905: 0xC144,
	32606 - 11905: 0xC145,
	32607 - 11905: 0xEEB9,
	32608 - 11905: 0xC146,
	32609 - 11905: 0xEEB8,
	32610 - 11905: 0xB0D5,
	32611 - 11905: 0xC147,
	32612 - 11905: 0xC148,
	32613 - 11905: 0xC149,
	32614 - 11905: 0xC14A,
	32615 - 11905: 0xC14B,
	32616 - 11905: 0xEEBB,
	32617 - 11905: 0xD5D6,
	32618 - 11905: 0xD7EF,
	32619 - 11905: 0xC14C,
	32620 - 11905: 0xC14D,
	32621 - 11905: 0xC14E,
	32622 - 11905: 0xD6C3,
	32623 - 11905: 0xC14F,
	32624 - 11905: 0xC150,
	32625 - 11905: 0xEEBD,
	32626 - 11905: 0xCAF0,
	32627 - 11905: 0xC151,
	32628 - 11905: 0xEEBC,
	32629 - 11905: 0xC152,
	32630 - 11905: 0xC153,
	32631 - 11905: 0xC154,
	32632 - 11905: 0xC155,
	32633 - 11905: 0xEEBE,
	32634 - 11905: 0xC156,
	32635 - 11905: 0xC157,
	32636 - 11905: 0xC158,
	32637 - 11905: 0xC159,
	32638 - 11905: 0xEEC0,
	32639 - 11905: 0xC15A,
	32640 - 11905: 0xC15B,
	32641 - 11905: 0xEEBF,
	32642 - 11905: 0xC15C,
	32643 - 11905: 0xC15D,
	32644 - 11905: 0xC15E,
	32645 - 11905: 0xC15F,
	32646 - 11905: 0xC160,
	32647 - 11905: 0xC161,
	32648 - 11905: 0xC162,
	32649 - 11905: 0xC163,
	32650 - 11905: 0xD1F2,
	32651 - 11905: 0xC164,
	32652 - 11905: 0xC7BC,
	32653 - 11905: 0xC165,
	32654 - 11905: 0xC3C0,
	32655 - 11905: 0xC166,
	32656 - 11905: 0xC167,
	32657 - 11905: 0xC168,
	32658 - 11905: 0xC169,
	32659 - 11905: 0xC16A,
	32660 - 11905: 0xB8E1,
	32661 - 11905: 0xC16B,
	32662 - 11905: 0xC16C,
	32663 - 11905: 0xC16D,
	32664 - 11905: 0xC16E,
	32665 - 11905: 0xC16F,
	32666 - 11905: 0xC1E7,
	32667 - 11905: 0xC170,
	32668 - 11905: 0xC171,
	32669 - 11905: 0xF4C6,
	32670 - 11905: 0xD0DF,
	32671 - 11905: 0xF4C7,
	32672 - 11905: 0xC172,
	32673 - 11905: 0xCFDB,
	32674 - 11905: 0xC173,
	32675 - 11905: 0xC174,
	32676 - 11905: 0xC8BA,
	32677 - 11905: 0xC175,
	32678 - 11905: 0xC176,
	32679 - 11905: 0xF4C8,
	32680 - 11905: 0xC177,
	32681 - 11905: 0xC178,
	32682 - 11905: 0xC179,
	32683 - 11905: 0xC17A,
	32684 - 11905: 0xC17B,
	32685 - 11905: 0xC17C,
	32686 - 11905: 0xC17D,
	32687 - 11905: 0xF4C9,
	32688 - 11905: 0xF4CA,
	32689 - 11905: 0xC17E,
	32690 - 11905: 0xF4CB,
	32691 - 11905: 0xC180,
	32692 - 11905: 0xC181,
	32693 - 11905: 0xC182,
	32694 - 11905: 0xC183,
	32695 - 11905: 0xC184,
	32696 - 11905: 0xD9FA,
	32697 - 11905: 0xB8FE,
	32698 - 11905: 0xC185,
	32699 - 11905: 0xC186,
	32700 - 11905: 0xE5F1,
	32701 - 11905: 0xD3F0,
	32702 - 11905: 0xC187,
	32703 - 11905: 0xF4E0,
	32704 - 11905: 0xC188,
	32705 - 11905: 0xCECC,
	32706 - 11905: 0xC189,
	32707 - 11905: 0xC18A,
	32708 - 11905: 0xC18B,
	32709 - 11905: 0xB3E1,
	32710 - 11905: 0xC18C,
	32711 - 11905: 0xC18D,
	32712 - 11905: 0xC18E,
	32713 - 11905: 0xC18F,
	32714 - 11905: 0xF1B4,
	32715 - 11905: 0xC190,
	32716 - 11905: 0xD2EE,
	32717 - 11905: 0xC191,
	32718 - 11905: 0xF4E1,
	32719 - 11905: 0xC192,
	32720 - 11905: 0xC193,
	32721 - 11905: 0xC194,
	32722 - 11905: 0xC195,
	32723 - 11905: 0xC196,
	32724 - 11905: 0xCFE8,
	32725 - 11905: 0xF4E2,
	32726 - 11905: 0xC197,
	32727 - 11905: 0xC198,
	32728 - 11905: 0xC7CC,
	32729 - 11905: 0xC199,
	32730 - 11905: 0xC19A,
	32731 - 11905: 0xC19B,
	32732 - 11905: 0xC19C,
	32733 - 11905: 0xC19D,
	32734 - 11905: 0xC19E,
	32735 - 11905: 0xB5D4,
	32736 - 11905: 0xB4E4,
	32737 - 11905: 0xF4E4,
	32738 - 11905: 0xC19F,
	32739 - 11905: 0xC1A0,
	32740 - 11905: 0xC240,
	32741 - 11905: 0xF4E3,
	32742 - 11905: 0xF4E5,
	32743 - 11905: 0xC241,
	32744 - 11905: 0xC242,
	32745 - 11905: 0xF4E6,
	32746 - 11905: 0xC243,
	32747 - 11905: 0xC244,
	32748 - 11905: 0xC245,
	32749 - 11905: 0xC246,
	32750 - 11905: 0xF4E7,
	32751 - 11905: 0xC247,
	32752 - 11905: 0xBAB2,
	32753 - 11905: 0xB0BF,
	32754 - 11905: 0xC248,
	32755 - 11905: 0xF4E8,
	32756 - 11905: 0xC249,
	32757 - 11905: 0xC24A,
	32758 - 11905: 0xC24B,
	32759 - 11905: 0xC24C,
	32760 - 11905: 0xC24D,
	32761 - 11905: 0xC24E,
	32762 - 11905: 0xC24F,
	32763 - 11905: 0xB7AD,
	32764 - 11905: 0xD2ED,
	32765 - 11905: 0xC250,
	32766 - 11905: 0xC251,
	32767 - 11905: 0xC252,
	32768 - 11905: 0xD2AB,
	32769 - 11905: 0xC0CF,
	32770 - 11905: 0xC253,
	32771 - 11905: 0xBFBC,
	32772 - 11905: 0xEBA3,
	32773 - 11905: 0xD5DF,
	32774 - 11905: 0xEAC8,
	32775 - 11905: 0xC254,
	32776 - 11905: 0xC255,
	32777 - 11905: 0xC256,
	32778 - 11905: 0xC257,
	32779 - 11905: 0xF1F3,
	32780 - 11905: 0xB6F8,
	32781 - 11905: 0xCBA3,
	32782 - 11905: 0xC258,
	32783 - 11905: 0xC259,
	32784 - 11905: 0xC4CD,
	32785 - 11905: 0xC25A,
	32786 - 11905: 0xF1E7,
	32787 - 11905: 0xC25B,
	32788 - 11905: 0xF1E8,
	32789 - 11905: 0xB8FB,
	32790 - 11905: 0xF1E9,
	32791 - 11905: 0xBAC4,
	32792 - 11905: 0xD4C5,
	32793 - 11905: 0xB0D2,
	32794 - 11905: 0xC25C,
	32795 - 11905: 0xC25D,
	32796 - 11905: 0xF1EA,
	32797 - 11905: 0xC25E,
	32798 - 11905: 0xC25F,
	32799 - 11905: 0xC260,
	32800 - 11905: 0xF1EB,
	32801 - 11905: 0xC261,
	32802 - 11905: 0xF1EC,
	32803 - 11905: 0xC262,
	32804 - 11905: 0xC263,
	32805 - 11905: 0xF1ED,
	32806 - 11905: 0xF1EE,
	32807 - 11905: 0xF1EF,
	32808 - 11905: 0xF1F1,
	32809 - 11905: 0xF1F0,
	32810 - 11905: 0xC5D5,
	32811 - 11905: 0xC264,
	32812 - 11905: 0xC265,
	32813 - 11905: 0xC266,
	32814 - 11905: 0xC267,
	32815 - 11905: 0xC268,
	32816 - 11905: 0xC269,
	32817 - 11905: 0xF1F2,
	32818 - 11905: 0xC26A,
	32819 - 11905: 0xB6FA,
	32820 - 11905: 0xC26B,
	32821 - 11905: 0xF1F4,
	32822 - 11905: 0xD2AE,
	32823 - 11905: 0xDEC7,
	32824 - 11905: 0xCBCA,
	32825 - 11905: 0xC26C,
	32826 - 11905: 0xC26D,
	32827 - 11905: 0xB3DC,
	32828 - 11905: 0xC26E,
	32829 - 11905: 0xB5A2,
	32830 - 11905: 0xC26F,
	32831 - 11905: 0xB9A2,
	32832 - 11905: 0xC270,
	32833 - 11905: 0xC271,
	32834 - 11905: 0xC4F4,
	32835 - 11905: 0xF1F5,
	32836 - 11905: 0xC272,
	32837 - 11905: 0xC273,
	32838 - 11905: 0xF1F6,
	32839 - 11905: 0xC274,
	32840 - 11905: 0xC275,
	32841 - 11905: 0xC276,
	32842 - 11905: 0xC1C4,
	32843 - 11905: 0xC1FB,
	32844 - 11905: 0xD6B0,
	32845 - 11905: 0xF1F7,
	32846 - 11905: 0xC277,
	32847 - 11905: 0xC278,
	32848 - 11905: 0xC279,
	32849 - 11905: 0xC27A,
	32850 - 11905: 0xF1F8,
	32851 - 11905: 0xC27B,
	32852 - 11905: 0xC1AA,
	32853 - 11905: 0xC27C,
	32854 - 11905: 0xC27D,
	32855 - 11905: 0xC27E,
	32856 - 11905: 0xC6B8,
	32857 - 11905: 0xC280,
	32858 - 11905: 0xBEDB,
	32859 - 11905: 0xC281,
	32860 - 11905: 0xC282,
	32861 - 11905: 0xC283,
	32862 - 11905: 0xC284,
	32863 - 11905: 0xC285,
	32864 - 11905: 0xC286,
	32865 - 11905: 0xC287,
	32866 - 11905: 0xC288,
	32867 - 11905: 0xC289,
	32868 - 11905: 0xC28A,
	32869 - 11905: 0xC28B,
	32870 - 11905: 0xC28C,
	32871 - 11905: 0xC28D,
	32872 - 11905: 0xC28E,
	32873 - 11905: 0xF1F9,
	32874 - 11905: 0xB4CF,
	32875 - 11905: 0xC28F,
	32876 - 11905: 0xC290,
	32877 - 11905: 0xC291,
	32878 - 11905: 0xC292,
	32879 - 11905: 0xC293,
	32880 - 11905: 0xC294,
	32881 - 11905: 0xF1FA,
	32882 - 11905: 0xC295,
	32883 - 11905: 0xC296,
	32884 - 11905: 0xC297,
	32885 - 11905: 0xC298,
	32886 - 11905: 0xC299,
	32887 - 11905: 0xC29A,
	32888 - 11905: 0xC29B,
	32889 - 11905: 0xC29C,
	32890 - 11905: 0xC29D,
	32891 - 11905: 0xC29E,
	32892 - 11905: 0xC29F,
	32893 - 11905: 0xC2A0,
	32894 - 11905: 0xC340,
	32895 - 11905: 0xEDB2,
	32896 - 11905: 0xEDB1,
	32897 - 11905: 0xC341,
	32898 - 11905: 0xC342,
	32899 - 11905: 0xCBE0,
	32900 - 11905: 0xD2DE,
	32901 - 11905: 0xC343,
	32902 - 11905: 0xCBC1,
	32903 - 11905: 0xD5D8,
	32904 - 11905: 0xC344,
	32905 - 11905: 0xC8E2,
	32906 - 11905: 0xC345,
	32907 - 11905: 0xC0DF,
	32908 - 11905: 0xBCA1,
	32909 - 11905: 0xC346,
	32910 - 11905: 0xC347,
	32911 - 11905: 0xC348,
	32912 - 11905: 0xC349,
	32913 - 11905: 0xC34A,
	32914 - 11905: 0xC34B,
	32915 - 11905: 0xEBC1,
	32916 - 11905: 0xC34C,
	32917 - 11905: 0xC34D,
	32918 - 11905: 0xD0A4,
	32919 - 11905: 0xC34E,
	32920 - 11905: 0xD6E2,
	32921 - 11905: 0xC34F,
	32922 - 11905: 0xB6C7,
	32923 - 11905: 0xB8D8,
	32924 - 11905: 0xEBC0,
	32925 - 11905: 0xB8CE,
	32926 - 11905: 0xC350,
	32927 - 11905: 0xEBBF,
	32928 - 11905: 0xB3A6,
	32929 - 11905: 0xB9C9,
	32930 - 11905: 0xD6AB,
	32931 - 11905: 0xC351,
	32932 - 11905: 0xB7F4,
	32933 - 11905: 0xB7CA,
	32934 - 11905: 0xC352,
	32935 - 11905: 0xC353,
	32936 - 11905: 0xC354,
	32937 - 11905: 0xBCE7,
	32938 - 11905: 0xB7BE,
	32939 - 11905: 0xEBC6,
	32940 - 11905: 0xC355,
	32941 - 11905: 0xEBC7,
	32942 - 11905: 0xB0B9,
	32943 - 11905: 0xBFCF,
	32944 - 11905: 0xC356,
	32945 - 11905: 0xEBC5,
	32946 - 11905: 0xD3FD,
	32947 - 11905: 0xC357,
	32948 - 11905: 0xEBC8,
	32949 - 11905: 0xC358,
	32950 - 11905: 0xC359,
	32951 - 11905: 0xEBC9,
	32952 - 11905: 0xC35A,
	32953 - 11905: 0xC35B,
	32954 - 11905: 0xB7CE,
	32955 - 11905: 0xC35C,
	32956 - 11905: 0xEBC2,
	32957 - 11905: 0xEBC4,
	32958 - 11905: 0xC9F6,
	32959 - 11905: 0xD6D7,
	32960 - 11905: 0xD5CD,
	32961 - 11905: 0xD0B2,
	32962 - 11905: 0xEBCF,
	32963 - 11905: 0xCEB8,
	32964 - 11905: 0xEBD0,
	32965 - 11905: 0xC35D,
	32966 - 11905: 0xB5A8,
	32967 - 11905: 0xC35E,
	32968 - 11905: 0xC35F,
	32969 - 11905: 0xC360,
	32970 - 11905: 0xC361,
	32971 - 11905: 0xC362,
	32972 - 11905: 0xB1B3,
	32973 - 11905: 0xEBD2,
	32974 - 11905: 0xCCA5,
	32975 - 11905: 0xC363,
	32976 - 11905: 0xC364,
	32977 - 11905: 0xC365,
	32978 - 11905: 0xC366,
	32979 - 11905: 0xC367,
	32980 - 11905: 0xC368,
	32981 - 11905: 0xC369,
	32982 - 11905: 0xC5D6,
	32983 - 11905: 0xEBD3,
	32984 - 11905: 0xC36A,
	32985 - 11905: 0xEBD1,
	32986 - 11905: 0xC5DF,
	32987 - 11905: 0xEBCE,
	32988 - 11905: 0xCAA4,
	32989 - 11905: 0xEBD5,
	32990 - 11905: 0xB0FB,
	32991 - 11905: 0xC36B,
	32992 - 11905: 0xC36C,
	32993 - 11905: 0xBAFA,
	32994 - 11905: 0xC36D,
	32995 - 11905: 0xC36E,
	32996 - 11905: 0xD8B7,
	32997 - 11905: 0xF1E3,
	32998 - 11905: 0xC36F,
	32999 - 11905: 0xEBCA,
	33000 - 11905: 0xEBCB,
	33001 - 11905: 0xEBCC,
	33002 - 11905: 0xEBCD,
	33003 - 11905: 0xEBD6,
	33004 - 11905: 0xE6C0,
	33005 - 11905: 0xEBD9,
	33006 - 11905: 0xC370,
	33007 - 11905: 0xBFE8,
	33008 - 11905: 0xD2C8,
	33009 - 11905: 0xEBD7,
	33010 - 11905: 0xEBDC,
	33011 - 11905: 0xB8EC,
	33012 - 11905: 0xEBD8,
	33013 - 11905: 0xC371,
	33014 - 11905: 0xBDBA,
	33015 - 11905: 0xC372,
	33016 - 11905: 0xD0D8,
	33017 - 11905: 0xC373,
	33018 - 11905: 0xB0B7,
	33019 - 11905: 0xC374,
	33020 - 11905: 0xEBDD,
	33021 - 11905: 0xC4DC,
	33022 - 11905: 0xC375,
	33023 - 11905: 0xC376,
	33024 - 11905: 0xC377,
	33025 - 11905: 0xC378,
	33026 - 11905: 0xD6AC,
	33027 - 11905: 0xC379,
	33028 - 11905: 0xC37A,
	33029 - 11905: 0xC37B,
	33030 - 11905: 0xB4E0,
	33031 - 11905: 0xC37C,
	33032 - 11905: 0xC37D,
	33033 - 11905: 0xC2F6,
	33034 - 11905: 0xBCB9,
	33035 - 11905: 0xC37E,
	33036 - 11905: 0xC380,
	33037 - 11905: 0xEBDA,
	33038 - 11905: 0xEBDB,
	33039 - 11905: 0xD4E0,
	33040 - 11905: 0xC6EA,
	33041 - 11905: 0xC4D4,
	33042 - 11905: 0xEBDF,
	33043 - 11905: 0xC5A7,
	33044 - 11905: 0xD9F5,
	33045 - 11905: 0xC381,
	33046 - 11905: 0xB2B1,
	33047 - 11905: 0xC382,
	33048 - 11905: 0xEBE4,
	33049 - 11905: 0xC383,
	33050 - 11905: 0xBDC5,
	33051 - 11905: 0xC384,
	33052 - 11905: 0xC385,
	33053 - 11905: 0xC386,
	33054 - 11905: 0xEBE2,
	33055 - 11905: 0xC387,
	33056 - 11905: 0xC388,
	33057 - 11905: 0xC389,
	33058 - 11905: 0xC38A,
	33059 - 11905: 0xC38B,
	33060 - 11905: 0xC38C,
	33061 - 11905: 0xC38D,
	33062 - 11905: 0xC38E,
	33063 - 11905: 0xC38F,
	33064 - 11905: 0xC390,
	33065 - 11905: 0xC391,
	33066 - 11905: 0xC392,
	33067 - 11905: 0xC393,
	33068 - 11905: 0xEBE3,
	33069 - 11905: 0xC394,
	33070 - 11905: 0xC395,
	33071 - 11905: 0xB8AC,
	33072 - 11905: 0xC396,
	33073 - 11905: 0xCDD1,
	33074 - 11905: 0xEBE5,
	33075 - 11905: 0xC397,
	33076 - 11905: 0xC398,
	33077 - 11905: 0xC399,
	33078 - 11905: 0xEBE1,
	33079 - 11905: 0xC39A,
	33080 - 11905: 0xC1B3,
	33081 - 11905: 0xC39B,
	33082 - 11905: 0xC39C,
	33083 - 11905: 0xC39D,
	33084 - 11905: 0xC39E,
	33085 - 11905: 0xC39F,
	33086 - 11905: 0xC6A2,
	33087 - 11905: 0xC3A0,
	33088 - 11905: 0xC440,
	33089 - 11905: 0xC441,
	33090 - 11905: 0xC442,
	33091 - 11905: 0xC443,
	33092 - 11905: 0xC444,
	33093 - 11905: 0xC445,
	33094 - 11905: 0xCCF3,
	33095 - 11905: 0xC446,
	33096 - 11905: 0xEBE6,
	33097 - 11905: 0xC447,
	33098 - 11905: 0xC0B0,
	33099 - 11905: 0xD2B8,
	33100 - 11905: 0xEBE7,
	33101 - 11905: 0xC448,
	33102 - 11905: 0xC449,
	33103 - 11905: 0xC44A,
	33104 - 11905: 0xB8AF,
	33105 - 11905: 0xB8AD,
	33106 - 11905: 0xC44B,
	33107 - 11905: 0xEBE8,
	33108 - 11905: 0xC7BB,
	33109 - 11905: 0xCDF3,
	33110 - 11905: 0xC44C,
	33111 - 11905: 0xC44D,
	33112 - 11905: 0xC44E,
	33113 - 11905: 0xEBEA,
	33114 - 11905: 0xEBEB,
	33115 - 11905: 0xC44F,
	33116 - 11905: 0xC450,
	33117 - 11905: 0xC451,
	33118 - 11905: 0xC452,
	33119 - 11905: 0xC453,
	33120 - 11905: 0xEBED,
	33121 - 11905: 0xC454,
	33122 - 11905: 0xC455,
	33123 - 11905: 0xC456,
	33124 - 11905: 0xC457,
	33125 - 11905: 0xD0C8,
	33126 - 11905: 0xC458,
	33127 - 11905: 0xEBF2,
	33128 - 11905: 0xC459,
	33129 - 11905: 0xEBEE,
	33130 - 11905: 0xC45A,
	33131 - 11905: 0xC45B,
	33132 - 11905: 0xC45C,
	33133 - 11905: 0xEBF1,
	33134 - 11905: 0xC8F9,
	33135 - 11905: 0xC45D,
	33136 - 11905: 0xD1FC,
	33137 - 11905: 0xEBEC,
	33138 - 11905: 0xC45E,
	33139 - 11905: 0xC45F,
	33140 - 11905: 0xEBE9,
	33141 - 11905: 0xC460,
	33142 - 11905: 0xC461,
	33143 - 11905: 0xC462,
	33144 - 11905: 0xC463,
	33145 - 11905: 0xB8B9,
	33146 - 11905: 0xCFD9,
	33147 - 11905: 0xC4E5,
	33148 - 11905: 0xEBEF,
	33149 - 11905: 0xEBF0,
	33150 - 11905: 0xCCDA,
	33151 - 11905: 0xCDC8,
	33152 - 11905: 0xB0F2,
	33153 - 11905: 0xC464,
	33154 - 11905: 0xEBF6,
	33155 - 11905: 0xC465,
	33156 - 11905: 0xC466,
	33157 - 11905: 0xC467,
	33158 - 11905: 0xC468,
	33159 - 11905: 0xC469,
	33160 - 11905: 0xEBF5,
	33161 - 11905: 0xC46A,
	33162 - 11905: 0xB2B2,
	33163 - 11905: 0xC46B,
	33164 - 11905: 0xC46C,
	33165 - 11905: 0xC46D,
	33166 - 11905: 0xC46E,
	33167 - 11905: 0xB8E0,
	33168 - 11905: 0xC46F,
	33169 - 11905: 0xEBF7,
	33170 - 11905: 0xC470,
	33171 - 11905: 0xC471,
	33172 - 11905: 0xC472,
	33173 - 11905: 0xC473,
	33174 - 11905: 0xC474,
	33175 - 11905: 0xC475,
	33176 - 11905: 0xB1EC,
	33177 - 11905: 0xC476,
	33178 - 11905: 0xC477,
	33179 - 11905: 0xCCC5,
	33180 - 11905: 0xC4A4,
	33181 - 11905: 0xCFA5,
	33182 - 11905: 0xC478,
	33183 - 11905: 0xC479,
	33184 - 11905: 0xC47A,
	33185 - 11905: 0xC47B,
	33186 - 11905: 0xC47C,
	33187 - 11905: 0xEBF9,
	33188 - 11905: 0xC47D,
	33189 - 11905: 0xC47E,
	33190 - 11905: 0xECA2,
	33191 - 11905: 0xC480,
	33192 - 11905: 0xC5F2,
	33193 - 11905: 0xC481,
	33194 - 11905: 0xEBFA,
	33195 - 11905: 0xC482,
	33196 - 11905: 0xC483,
	33197 - 11905: 0xC484,
	33198 - 11905: 0xC485,
	33199 - 11905: 0xC486,
	33200 - 11905: 0xC487,
	33201 - 11905: 0xC488,
	33202 - 11905: 0xC489,
	33203 - 11905: 0xC9C5,
	33204 - 11905: 0xC48A,
	33205 - 11905: 0xC48B,
	33206 - 11905: 0xC48C,
	33207 - 11905: 0xC48D,
	33208 - 11905: 0xC48E,
	33209 - 11905: 0xC48F,
	33210 - 11905: 0xE2DF,
	33211 - 11905: 0xEBFE,
	33212 - 11905: 0xC490,
	33213 - 11905: 0xC491,
	33214 - 11905: 0xC492,
	33215 - 11905: 0xC493,
	33216 - 11905: 0xCDCE,
	33217 - 11905: 0xECA1,
	33218 - 11905: 0xB1DB,
	33219 - 11905: 0xD3B7,
	33220 - 11905: 0xC494,
	33221 - 11905: 0xC495,
	33222 - 11905: 0xD2DC,
	33223 - 11905: 0xC496,
	33224 - 11905: 0xC497,
	33225 - 11905: 0xC498,
	33226 - 11905: 0xEBFD,
	33227 - 11905: 0xC499,
	33228 - 11905: 0xEBFB,
	33229 - 11905: 0xC49A,
	33230 - 11905: 0xC49B,
	33231 - 11905: 0xC49C,
	33232 - 11905: 0xC49D,
	33233 - 11905: 0xC49E,
	33234 - 11905: 0xC49F,
	33235 - 11905: 0xC4A0,
	33236 - 11905: 0xC540,
	33237 - 11905: 0xC541,
	33238 - 11905: 0xC542,
	33239 - 11905: 0xC543,
	33240 - 11905: 0xC544,
	33241 - 11905: 0xC545,
	33242 - 11905: 0xC546,
	33243 - 11905: 0xC547,
	33244 - 11905: 0xC548,
	33245 - 11905: 0xC549,
	33246 - 11905: 0xC54A,
	33247 - 11905: 0xC54B,
	33248 - 11905: 0xC54C,
	33249 - 11905: 0xC54D,
	33250 - 11905: 0xC54E,
	33251 - 11905: 0xB3BC,
	33252 - 11905: 0xC54F,
	33253 - 11905: 0xC550,
	33254 - 11905: 0xC551,
	33255 - 11905: 0xEAB0,
	33256 - 11905: 0xC552,
	33257 - 11905: 0xC553,
	33258 - 11905: 0xD7D4,
	33259 - 11905: 0xC554,
	33260 - 11905: 0xF4AB,
	33261 - 11905: 0xB3F4,
	33262 - 11905: 0xC555,
	33263 - 11905: 0xC556,
	33264 - 11905: 0xC557,
	33265 - 11905: 0xC558,
	33266 - 11905: 0xC559,
	33267 - 11905: 0xD6C1,
	33268 - 11905: 0xD6C2,
	33269 - 11905: 0xC55A,
	33270 - 11905: 0xC55B,
	33271 - 11905: 0xC55C,
	33272 - 11905: 0xC55D,
	33273 - 11905: 0xC55E,
	33274 - 11905: 0xC55F,
	33275 - 11905: 0xD5E9,
	33276 - 11905: 0xBECA,
	33277 - 11905: 0xC560,
	33278 - 11905: 0xF4A7,
	33279 - 11905: 0xC561,
	33280 - 11905: 0xD2A8,
	33281 - 11905: 0xF4A8,
	33282 - 11905: 0xF4A9,
	33283 - 11905: 0xC562,
	33284 - 11905: 0xF4AA,
	33285 - 11905: 0xBECB,
	33286 - 11905: 0xD3DF,
	33287 - 11905: 0xC563,
	33288 - 11905: 0xC564,
	33289 - 11905: 0xC565,
	33290 - 11905: 0xC566,
	33291 - 11905: 0xC567,
	33292 - 11905: 0xC9E0,
	33293 - 11905: 0xC9E1,
	33294 - 11905: 0xC568,
	33295 - 11905: 0xC569,
	33296 - 11905: 0xF3C2,
	33297 - 11905: 0xC56A,
	33298 - 11905: 0xCAE6,
	33299 - 11905: 0xC56B,
	33300 - 11905: 0xCCF2,
	33301 - 11905: 0xC56C,
	33302 - 11905: 0xC56D,
	33303 - 11905: 0xC56E,
	33304 - 11905: 0xC56F,
	33305 - 11905: 0xC570,
	33306 - 11905: 0xC571,
	33307 - 11905: 0xE2B6,
	33308 - 11905: 0xCBB4,
	33309 - 11905: 0xC572,
	33310 - 11905: 0xCEE8,
	33311 - 11905: 0xD6DB,
	33312 - 11905: 0xC573,
	33313 - 11905: 0xF4AD,
	33314 - 11905: 0xF4AE,
	33315 - 11905: 0xF4AF,
	33316 - 11905: 0xC574,
	33317 - 11905: 0xC575,
	33318 - 11905: 0xC576,
	33319 - 11905: 0xC577,
	33320 - 11905: 0xF4B2,
	33321 - 11905: 0xC578,
	33322 - 11905: 0xBABD,
	33323 - 11905: 0xF4B3,
	33324 - 11905: 0xB0E3,
	33325 - 11905: 0xF4B0,
	33326 - 11905: 0xC579,
	33327 - 11905: 0xF4B1,
	33328 - 11905: 0xBDA2,
	33329 - 11905: 0xB2D5,
	33330 - 11905: 0xC57A,
	33331 - 11905: 0xF4B6,
	33332 - 11905: 0xF4B7,
	33333 - 11905: 0xB6E6,
	33334 - 11905: 0xB2B0,
	33335 - 11905: 0xCFCF,
	33336 - 11905: 0xF4B4,
	33337 - 11905: 0xB4AC,
	33338 - 11905: 0xC57B,
	33339 - 11905: 0xF4B5,
	33340 - 11905: 0xC57C,
	33341 - 11905: 0xC57D,
	33342 - 11905: 0xF4B8,
	33343 - 11905: 0xC57E,
	33344 - 11905: 0xC580,
	33345 - 11905: 0xC581,
	33346 - 11905: 0xC582,
	33347 - 11905: 0xC583,
	33348 - 11905: 0xF4B9,
	33349 - 11905: 0xC584,
	33350 - 11905: 0xC585,
	33351 - 11905: 0xCDA7,
	33352 - 11905: 0xC586,
	33353 - 11905: 0xF4BA,
	33354 - 11905: 0xC587,
	33355 - 11905: 0xF4BB,
	33356 - 11905: 0xC588,
	33357 - 11905: 0xC589,
	33358 - 11905: 0xC58A,
	33359 - 11905: 0xF4BC,
	33360 - 11905: 0xC58B,
	33361 - 11905: 0xC58C,
	33362 - 11905: 0xC58D,
	33363 - 11905: 0xC58E,
	33364 - 11905: 0xC58F,
	33365 - 11905: 0xC590,
	33366 - 11905: 0xC591,
	33367 - 11905: 0xC592,
	33368 - 11905: 0xCBD2,
	33369 - 11905: 0xC593,
	33370 - 11905: 0xF4BD,
	33371 - 11905: 0xC594,
	33372 - 11905: 0xC595,
	33373 - 11905: 0xC596,
	33374 - 11905: 0xC597,
	33375 - 11905: 0xF4BE,
	33376 - 11905: 0xC598,
	33377 - 11905: 0xC599,
	33378 - 11905: 0xC59A,
	33379 - 11905: 0xC59B,
	33380 - 11905: 0xC59C,
	33381 - 11905: 0xC59D,
	33382 - 11905: 0xC59E,
	33383 - 11905: 0xC59F,
	33384 - 11905: 0xF4BF,
	33385 - 11905: 0xC5A0,
	33386 - 11905: 0xC640,
	33387 - 11905: 0xC641,
	33388 - 11905: 0xC642,
	33389 - 11905: 0xC643,
	33390 - 11905: 0xF4DE,
	33391 - 11905: 0xC1BC,
	33392 - 11905: 0xBCE8,
	33393 - 11905: 0xC644,
	33394 - 11905: 0xC9AB,
	33395 - 11905: 0xD1DE,
	33396 - 11905: 0xE5F5,
	33397 - 11905: 0xC645,
	33398 - 11905: 0xC646,
	33399 - 11905: 0xC647,
	33400 - 11905: 0xC648,
	33401 - 11905: 0xDCB3,
	33402 - 11905: 0xD2D5,
	33403 - 11905: 0xC649,
	33404 - 11905: 0xC64A,
	33405 - 11905: 0xDCB4,
	33406 - 11905: 0xB0AC,
	33407 - 11905: 0xDCB5,
	33408 - 11905: 0xC64B,
	33409 - 11905: 0xC64C,
	33410 - 11905: 0xBDDA,
	33411 - 11905: 0xC64D,
	33412 - 11905: 0xDCB9,
	33413 - 11905: 0xC64E,
	33414 - 11905: 0xC64F,
	33415 - 11905: 0xC650,
	33416 - 11905: 0xD8C2,
	33417 - 11905: 0xC651,
	33418 - 11905: 0xDCB7,
	33419 - 11905: 0xD3F3,
	33420 - 11905: 0xC652,
	33421 - 11905: 0xC9D6,
	33422 - 11905: 0xDCBA,
	33423 - 11905: 0xDCB6,
	33424 - 11905: 0xC653,
	33425 - 11905: 0xDCBB,
	33426 - 11905: 0xC3A2,
	33427 - 11905: 0xC654,
	33428 - 11905: 0xC655,
	33429 - 11905: 0xC656,
	33430 - 11905: 0xC657,
	33431 - 11905: 0xDCBC,
	33432 - 11905: 0xDCC5,
	33433 - 11905: 0xDCBD,
	33434 - 11905: 0xC658,
	33435 - 11905: 0xC659,
	33436 - 11905: 0xCEDF,
	33437 - 11905: 0xD6A5,
	33438 - 11905: 0xC65A,
	33439 - 11905: 0xDCCF,
	33440 - 11905: 0xC65B,
	33441 - 11905: 0xDCCD,
	33442 - 11905: 0xC65C,
	33443 - 11905: 0xC65D,
	33444 - 11905: 0xDCD2,
	33445 - 11905: 0xBDE6,
	33446 - 11905: 0xC2AB,
	33447 - 11905: 0xC65E,
	33448 - 11905: 0xDCB8,
	33449 - 11905: 0xDCCB,
	33450 - 11905: 0xDCCE,
	33451 - 11905: 0xDCBE,
	33452 - 11905: 0xB7D2,
	33453 - 11905: 0xB0C5,
	33454 - 11905: 0xDCC7,
	33455 - 11905: 0xD0BE,
	33456 - 11905: 0xDCC1,
	33457 - 11905: 0xBBA8,
	33458 - 11905: 0xC65F,
	33459 - 11905: 0xB7BC,
	33460 - 11905: 0xDCCC,
	33461 - 11905: 0xC660,
	33462 - 11905: 0xC661,
	33463 - 11905: 0xDCC6,
	33464 - 11905: 0xDCBF,
	33465 - 11905: 0xC7DB,
	33466 - 11905: 0xC662,
	33467 - 11905: 0xC663,
	33468 - 11905: 0xC664,
	33469 - 11905: 0xD1BF,
	33470 - 11905: 0xDCC0,
	33471 - 11905: 0xC665,
	33472 - 11905: 0xC666,
	33473 - 11905: 0xDCCA,
	33474 - 11905: 0xC667,
	33475 - 11905: 0xC668,
	33476 - 11905: 0xDCD0,
	33477 - 11905: 0xC669,
	33478 - 11905: 0xC66A,
	33479 - 11905: 0xCEAD,
	33480 - 11905: 0xDCC2,
	33481 - 11905: 0xC66B,
	33482 - 11905: 0xDCC3,
	33483 - 11905: 0xDCC8,
	33484 - 11905: 0xDCC9,
	33485 - 11905: 0xB2D4,
	33486 - 11905: 0xDCD1,
	33487 - 11905: 0xCBD5,
	33488 - 11905: 0xC66C,
	33489 - 11905: 0xD4B7,
	33490 - 11905: 0xDCDB,
	33491 - 11905: 0xDCDF,
	33492 - 11905: 0xCCA6,
	33493 - 11905: 0xDCE6,
	33494 - 11905: 0xC66D,
	33495 - 11905: 0xC3E7,
	33496 - 11905: 0xDCDC,
	33497 - 11905: 0xC66E,
	33498 - 11905: 0xC66F,
	33499 - 11905: 0xBFC1,
	33500 - 11905: 0xDCD9,
	33501 - 11905: 0xC670,
	33502 - 11905: 0xB0FA,
	33503 - 11905: 0xB9B6,
	33504 - 11905: 0xDCE5,
	33505 - 11905: 0xDCD3,
	33506 - 11905: 0xC671,
	33507 - 11905: 0xDCC4,
	33508 - 11905: 0xDCD6,
	33509 - 11905: 0xC8F4,
	33510 - 11905: 0xBFE0,
	33511 - 11905: 0xC672,
	33512 - 11905: 0xC673,
	33513 - 11905: 0xC674,
	33514 - 11905: 0xC675,
	33515 - 11905: 0xC9BB,
	33516 - 11905: 0xC676,
	33517 - 11905: 0xC677,
	33518 - 11905: 0xC678,
	33519 - 11905: 0xB1BD,
	33520 - 11905: 0xC679,
	33521 - 11905: 0xD3A2,
	33522 - 11905: 0xC67A,
	33523 - 11905: 0xC67B,
	33524 - 11905: 0xDCDA,
	33525 - 11905: 0xC67C,
	33526 - 11905: 0xC67D,
	33527 - 11905: 0xDCD5,
	33528 - 11905: 0xC67E,
	33529 - 11905: 0xC6BB,
	33530 - 11905: 0xC680,
	33531 - 11905: 0xDCDE,
	33532 - 11905: 0xC681,
	33533 - 11905: 0xC682,
	33534 - 11905: 0xC683,
	33535 - 11905: 0xC684,
	33536 - 11905: 0xC685,
	33537 - 11905: 0xD7C2,
	33538 - 11905: 0xC3AF,
	33539 - 11905: 0xB7B6,
	33540 - 11905: 0xC7D1,
	33541 - 11905: 0xC3A9,
	33542 - 11905: 0xDCE2,
	33543 - 11905: 0xDCD8,
	33544 - 11905: 0xDCEB,
	33545 - 11905: 0xDCD4,
	33546 - 11905: 0xC686,
	33547 - 11905: 0xC687,
	33548 - 11905: 0xDCDD,
	33549 - 11905: 0xC688,
	33550 - 11905: 0xBEA5,
	33551 - 11905: 0xDCD7,
	33552 - 11905: 0xC689,
	33553 - 11905: 0xDCE0,
	33554 - 11905: 0xC68A,
	33555 - 11905: 0xC68B,
	33556 - 11905: 0xDCE3,
	33557 - 11905: 0xDCE4,
	33558 - 11905: 0xC68C,
	33559 - 11905: 0xDCF8,
	33560 - 11905: 0xC68D,
	33561 - 11905: 0xC68E,
	33562 - 11905: 0xDCE1,
	33563 - 11905: 0xDDA2,
	33564 - 11905: 0xDCE7,
	33565 - 11905: 0xC68F,
	33566 - 11905: 0xC690,
	33567 - 11905: 0xC691,
	33568 - 11905: 0xC692,
	33569 - 11905: 0xC693,
	33570 - 11905: 0xC694,
	33571 - 11905: 0xC695,
	33572 - 11905: 0xC696,
	33573 - 11905: 0xC697,
	33574 - 11905: 0xC698,
	33575 - 11905: 0xBCEB,
	33576 - 11905: 0xB4C4,
	33577 - 11905: 0xC699,
	33578 - 11905: 0xC69A,
	33579 - 11905: 0xC3A3,
	33580 - 11905: 0xB2E7,
	33581 - 11905: 0xDCFA,
	33582 - 11905: 0xC69B,
	33583 - 11905: 0xDCF2,
	33584 - 11905: 0xC69C,
	33585 - 11905: 0xDCEF,
	33586 - 11905: 0xC69D,
	33587 - 11905: 0xDCFC,
	33588 - 11905: 0xDCEE,
	33589 - 11905: 0xD2F0,
	33590 - 11905: 0xB2E8,
	33591 - 11905: 0xC69E,
	33592 - 11905: 0xC8D7,
	33593 - 11905: 0xC8E3,
	33594 - 11905: 0xDCFB,
	33595 - 11905: 0xC69F,
	33596 - 11905: 0xDCED,
	33597 - 11905: 0xC6A0,
	33598 - 11905: 0xC740,
	33599 - 11905: 0xC741,
	33600 - 11905: 0xDCF7,
	33601 - 11905: 0xC742,
	33602 - 11905: 0xC743,
	33603 - 11905: 0xDCF5,
	33604 - 11905: 0xC744,
	33605 - 11905: 0xC745,
	33606 - 11905: 0xBEA3,
	33607 - 11905: 0xDCF4,
	33608 - 11905: 0xC746,
	33609 - 11905: 0xB2DD,
	33610 - 11905: 0xC747,
	33611 - 11905: 0xC748,
	33612 - 11905: 0xC749,
	33613 - 11905: 0xC74A,
	33614 - 11905: 0xC74B,
	33615 - 11905: 0xDCF3,
	33616 - 11905: 0xBCF6,
	33617 - 11905: 0xDCE8,
	33618 - 11905: 0xBBC4,
	33619 - 11905: 0xC74C,
	33620 - 11905: 0xC0F3,
	33621 - 11905: 0xC74D,
	33622 - 11905: 0xC74E,
	33623 - 11905: 0xC74F,
	33624 - 11905: 0xC750,
	33625 - 11905: 0xC751,
	33626 - 11905: 0xBCD4,
	33627 - 11905: 0xDCE9,
	33628 - 11905: 0xDCEA,
	33629 - 11905: 0xC752,
	33630 - 11905: 0xDCF1,
	33631 - 11905: 0xDCF6,
	33632 - 11905: 0xDCF9,
	33633 - 11905: 0xB5B4,
	33634 - 11905: 0xC753,
	33635 - 11905: 0xC8D9,
	33636 - 11905: 0xBBE7,
	33637 - 11905: 0xDCFE,
	33638 - 11905: 0xDCFD,
	33639 - 11905: 0xD3AB,
	33640 - 11905: 0xDDA1,
	33641 - 11905: 0xDDA3,
	33642 - 11905: 0xDDA5,
	33643 - 11905: 0xD2F1,
	33644 - 11905: 0xDDA4,
	33645 - 11905: 0xDDA6,
	33646 - 11905: 0xDDA7,
	33647 - 11905: 0xD2A9,
	33648 - 11905: 0xC754,
	33649 - 11905: 0xC755,
	33650 - 11905: 0xC756,
	33651 - 11905: 0xC757,
	33652 - 11905: 0xC758,
	33653 - 11905: 0xC759,
	33654 - 11905: 0xC75A,
	33655 - 11905: 0xBAC9,
	33656 - 11905: 0xDDA9,
	33657 - 11905: 0xC75B,
	33658 - 11905: 0xC75C,
	33659 - 11905: 0xDDB6,
	33660 - 11905: 0xDDB1,
	33661 - 11905: 0xDDB4,
	33662 - 11905: 0xC75D,
	33663 - 11905: 0xC75E,
	33664 - 11905: 0xC75F,
	33665 - 11905: 0xC760,
	33666 - 11905: 0xC761,
	33667 - 11905: 0xC762,
	33668 - 11905: 0xC763,
	33669 - 11905: 0xDDB0,
	33670 - 11905: 0xC6CE,
	33671 - 11905: 0xC764,
	33672 - 11905: 0xC765,
	33673 - 11905: 0xC0F2,
	33674 - 11905: 0xC766,
	33675 - 11905: 0xC767,
	33676 - 11905: 0xC768,
	33677 - 11905: 0xC769,
	33678 - 11905: 0xC9AF,
	33679 - 11905: 0xC76A,
	33680 - 11905: 0xC76B,
	33681 - 11905: 0xC76C,
	33682 - 11905: 0xDCEC,
	33683 - 11905: 0xDDAE,
	33684 - 11905: 0xC76D,
	33685 - 11905: 0xC76E,
	33686 - 11905: 0xC76F,
	33687 - 11905: 0xC770,
	33688 - 11905: 0xDDB7,
	33689 - 11905: 0xC771,
	33690 - 11905: 0xC772,
	33691 - 11905: 0xDCF0,
	33692 - 11905: 0xDDAF,
	33693 - 11905: 0xC773,
	33694 - 11905: 0xDDB8,
	33695 - 11905: 0xC774,
	33696 - 11905: 0xDDAC,
	33697 - 11905: 0xC775,
	33698 - 11905: 0xC776,
	33699 - 11905: 0xC777,
	33700 - 11905: 0xC778,
	33701 - 11905: 0xC779,
	33702 - 11905: 0xC77A,
	33703 - 11905: 0xC77B,
	33704 - 11905: 0xDDB9,
	33705 - 11905: 0xDDB3,
	33706 - 11905: 0xDDAD,
	33707 - 11905: 0xC4AA,
	33708 - 11905: 0xC77C,
	33709 - 11905: 0xC77D,
	33710 - 11905: 0xC77E,
	33711 - 11905: 0xC780,
	33712 - 11905: 0xDDA8,
	33713 - 11905: 0xC0B3,
	33714 - 11905: 0xC1AB,
	33715 - 11905: 0xDDAA,
	33716 - 11905: 0xDDAB,
	33717 - 11905: 0xC781,
	33718 - 11905: 0xDDB2,
	33719 - 11905: 0xBBF1,
	33720 - 11905: 0xDDB5,
	33721 - 11905: 0xD3A8,
	33722 - 11905: 0xDDBA,
	33723 - 11905: 0xC782,
	33724 - 11905: 0xDDBB,
	33725 - 11905: 0xC3A7,
	33726 - 11905: 0xC783,
	33727 - 11905: 0xC784,
	33728 - 11905: 0xDDD2,
	33729 - 11905: 0xDDBC,
	33730 - 11905: 0xC785,
	33731 - 11905: 0xC786,
	33732 - 11905: 0xC787,
	33733 - 11905: 0xDDD1,
	33734 - 11905: 0xC788,
	33735 - 11905: 0xB9BD,
	33736 - 11905: 0xC789,
	33737 - 11905: 0xC78A,
	33738 - 11905: 0xBED5,
	33739 - 11905: 0xC78B,
	33740 - 11905: 0xBEFA,
	33741 - 11905: 0xC78C,
	33742 - 11905: 0xC78D,
	33743 - 11905: 0xBACA,
	33744 - 11905: 0xC78E,
	33745 - 11905: 0xC78F,
	33746 - 11905: 0xC790,
	33747 - 11905: 0xC791,
	33748 - 11905: 0xDDCA,
	33749 - 11905: 0xC792,
	33750 - 11905: 0xDDC5,
	33751 - 11905: 0xC793,
	33752 - 11905: 0xDDBF,
	33753 - 11905: 0xC794,
	33754 - 11905: 0xC795,
	33755 - 11905: 0xC796,
	33756 - 11905: 0xB2CB,
	33757 - 11905: 0xDDC3,
	33758 - 11905: 0xC797,
	33759 - 11905: 0xDDCB,
	33760 - 11905: 0xB2A4,
	33761 - 11905: 0xDDD5,
	33762 - 11905: 0xC798,
	33763 - 11905: 0xC799,
	33764 - 11905: 0xC79A,
	33765 - 11905: 0xDDBE,
	33766 - 11905: 0xC79B,
	33767 - 11905: 0xC79C,
	33768 - 11905: 0xC79D,
	33769 - 11905: 0xC6D0,
	33770 - 11905: 0xDDD0,
	33771 - 11905: 0xC79E,
	33772 - 11905: 0xC79F,
	33773 - 11905: 0xC7A0,
	33774 - 11905: 0xC840,
	33775 - 11905: 0xC841,
	33776 - 11905: 0xDDD4,
	33777 - 11905: 0xC1E2,
	33778 - 11905: 0xB7C6,
	33779 - 11905: 0xC842,
	33780 - 11905: 0xC843,
	33781 - 11905: 0xC844,
	33782 - 11905: 0xC845,
	33783 - 11905: 0xC846,
	33784 - 11905: 0xDDCE,
	33785 - 11905: 0xDDCF,
	33786 - 11905: 0xC847,
	33787 - 11905: 0xC848,
	33788 - 11905: 0xC849,
	33789 - 11905: 0xDDC4,
	33790 - 11905: 0xC84A,
	33791 - 11905: 0xC84B,
	33792 - 11905: 0xC84C,
	33793 - 11905: 0xDDBD,
	33794 - 11905: 0xC84D,
	33795 - 11905: 0xDDCD,
	33796 - 11905: 0xCCD1,
	33797 - 11905: 0xC84E,
	33798 - 11905: 0xDDC9,
	33799 - 11905: 0xC84F,
	33800 - 11905: 0xC850,
	33801 - 11905: 0xC851,
	33802 - 11905: 0xC852,
	33803 - 11905: 0xDDC2,
	33804 - 11905: 0xC3C8,
	33805 - 11905: 0xC6BC,
	33806 - 11905: 0xCEAE,
	33807 - 11905: 0xDDCC,
	33808 - 11905: 0xC853,
	33809 - 11905: 0xDDC8,
	33810 - 11905: 0xC854,
	33811 - 11905: 0xC855,
	33812 - 11905: 0xC856,
	33813 - 11905: 0xC857,
	33814 - 11905: 0xC858,
	33815 - 11905: 0xC859,
	33816 - 11905: 0xDDC1,
	33817 - 11905: 0xC85A,
	33818 - 11905: 0xC85B,
	33819 - 11905: 0xC85C,
	33820 - 11905: 0xDDC6,
	33821 - 11905: 0xC2DC,
	33822 - 11905: 0xC85D,
	33823 - 11905: 0xC85E,
	33824 - 11905: 0xC85F,
	33825 - 11905: 0xC860,
	33826 - 11905: 0xC861,
	33827 - 11905: 0xC862,
	33828 - 11905: 0xD3A9,
	33829 - 11905: 0xD3AA,
	33830 - 11905: 0xDDD3,
	33831 - 11905: 0xCFF4,
	33832 - 11905: 0xC8F8,
	33833 - 11905: 0xC863,
	33834 - 11905: 0xC864,
	33835 - 11905: 0xC865,
	33836 - 11905: 0xC866,
	33837 - 11905: 0xC867,
	33838 - 11905: 0xC868,
	33839 - 11905: 0xC869,
	33840 - 11905: 0xC86A,
	33841 - 11905: 0xDDE6,
	33842 - 11905: 0xC86B,
	33843 - 11905: 0xC86C,
	33844 - 11905: 0xC86D,
	33845 - 11905: 0xC86E,
	33846 - 11905: 0xC86F,
	33847 - 11905: 0xC870,
	33848 - 11905: 0xDDC7,
	33849 - 11905: 0xC871,
	33850 - 11905: 0xC872,
	33851 - 11905: 0xC873,
	33852 - 11905: 0xDDE0,
	33853 - 11905: 0xC2E4,
	33854 - 11905: 0xC874,
	33855 - 11905: 0xC875,
	33856 - 11905: 0xC876,
	33857 - 11905: 0xC877,
	33858 - 11905: 0xC878,
	33859 - 11905: 0xC879,
	33860 - 11905: 0xC87A,
	33861 - 11905: 0xC87B,
	33862 - 11905: 0xDDE1,
	33863 - 11905: 0xC87C,
	33864 - 11905: 0xC87D,
	33865 - 11905: 0xC87E,
	33866 - 11905: 0xC880,
	33867 - 11905: 0xC881,
	33868 - 11905: 0xC882,
	33869 - 11905: 0xC883,
	33870 - 11905: 0xC884,
	33871 - 11905: 0xC885,
	33872 - 11905: 0xC886,
	33873 - 11905: 0xDDD7,
	33874 - 11905: 0xC887,
	33875 - 11905: 0xC888,
	33876 - 11905: 0xC889,
	33877 - 11905: 0xC88A,
	33878 - 11905: 0xC88B,
	33879 - 11905: 0xD6F8,
	33880 - 11905: 0xC88C,
	33881 - 11905: 0xDDD9,
	33882 - 11905: 0xDDD8,
	33883 - 11905: 0xB8F0,
	33884 - 11905: 0xDDD6,
	33885 - 11905: 0xC88D,
	33886 - 11905: 0xC88E,
	33887 - 11905: 0xC88F,
	33888 - 11905: 0xC890,
	33889 - 11905: 0xC6CF,
	33890 - 11905: 0xC891,
	33891 - 11905: 0xB6AD,
	33892 - 11905: 0xC892,
	33893 - 11905: 0xC893,
	33894 - 11905: 0xC894,
	33895 - 11905: 0xC895,
	33896 - 11905: 0xC896,
	33897 - 11905: 0xDDE2,
	33898 - 11905: 0xC897,
	33899 - 11905: 0xBAF9,
	33900 - 11905: 0xD4E1,
	33901 - 11905: 0xDDE7,
	33902 - 11905: 0xC898,
	33903 - 11905: 0xC899,
	33904 - 11905: 0xC89A,
	33905 - 11905: 0xB4D0,
	33906 - 11905: 0xC89B,
	33907 - 11905: 0xDDDA,
	33908 - 11905: 0xC89C,
	33909 - 11905: 0xBFFB,
	33910 - 11905: 0xDDE3,
	33911 - 11905: 0xC89D,
	33912 - 11905: 0xDDDF,
	33913 - 11905: 0xC89E,
	33914 - 11905: 0xDDDD,
	33915 - 11905: 0xC89F,
	33916 - 11905: 0xC8A0,
	33917 - 11905: 0xC940,
	33918 - 11905: 0xC941,
	33919 - 11905: 0xC942,
	33920 - 11905: 0xC943,
	33921 - 11905: 0xC944,
	33922 - 11905: 0xB5D9,
	33923 - 11905: 0xC945,
	33924 - 11905: 0xC946,
	33925 - 11905: 0xC947,
	33926 - 11905: 0xC948,
	33927 - 11905: 0xDDDB,
	33928 - 11905: 0xDDDC,
	33929 - 11905: 0xDDDE,
	33930 - 11905: 0xC949,
	33931 - 11905: 0xBDAF,
	33932 - 11905: 0xDDE4,
	33933 - 11905: 0xC94A,
	33934 - 11905: 0xDDE5,
	33935 - 11905: 0xC94B,
	33936 - 11905: 0xC94C,
	33937 - 11905: 0xC94D,
	33938 - 11905: 0xC94E,
	33939 - 11905: 0xC94F,
	33940 - 11905: 0xC950,
	33941 - 11905: 0xC951,
	33942 - 11905: 0xC952,
	33943 - 11905: 0xDDF5,
	33944 - 11905: 0xC953,
	33945 - 11905: 0xC3C9,
	33946 - 11905: 0xC954,
	33947 - 11905: 0xC955,
	33948 - 11905: 0xCBE2,
	33949 - 11905: 0xC956,
	33950 - 11905: 0xC957,
	33951 - 11905: 0xC958,
	33952 - 11905: 0xC959,
	33953 - 11905: 0xDDF2,
	33954 - 11905: 0xC95A,
	33955 - 11905: 0xC95B,
	33956 - 11905: 0xC95C,
	33957 - 11905: 0xC95D,
	33958 - 11905: 0xC95E,
	33959 - 11905: 0xC95F,
	33960 - 11905: 0xC960,
	33961 - 11905: 0xC961,
	33962 - 11905: 0xC962,
	33963 - 11905: 0xC963,
	33964 - 11905: 0xC964,
	33965 - 11905: 0xC965,
	33966 - 11905: 0xC966,
	33967 - 11905: 0xD8E1,
	33968 - 11905: 0xC967,
	33969 - 11905: 0xC968,
	33970 - 11905: 0xC6D1,
	33971 - 11905: 0xC969,
	33972 - 11905: 0xDDF4,
	33973 - 11905: 0xC96A,
	33974 - 11905: 0xC96B,
	33975 - 11905: 0xC96C,
	33976 - 11905: 0xD5F4,
	33977 - 11905: 0xDDF3,
	33978 - 11905: 0xDDF0,
	33979 - 11905: 0xC96D,
	33980 - 11905: 0xC96E,
	33981 - 11905: 0xDDEC,
	33982 - 11905: 0xC96F,
	33983 - 11905: 0xDDEF,
	33984 - 11905: 0xC970,
	33985 - 11905: 0xDDE8,
	33986 - 11905: 0xC971,
	33987 - 11905: 0xC972,
	33988 - 11905: 0xD0EE,
	33989 - 11905: 0xC973,
	33990 - 11905: 0xC974,
	33991 - 11905: 0xC975,
	33992 - 11905: 0xC976,
	33993 - 11905: 0xC8D8,
	33994 - 11905: 0xDDEE,
	33995 - 11905: 0xC977,
	33996 - 11905: 0xC978,
	33997 - 11905: 0xDDE9,
	33998 - 11905: 0xC979,
	33999 - 11905: 0xC97A,
	34000 - 11905: 0xDDEA,
	34001 - 11905: 0xCBF2,
	34002 - 11905: 0xC97B,
	34003 - 11905: 0xDDED,
	34004 - 11905: 0xC97C,
	34005 - 11905: 0xC97D,
	34006 - 11905: 0xB1CD,
	34007 - 11905: 0xC97E,
	34008 - 11905: 0xC980,
	34009 - 11905: 0xC981,
	34010 - 11905: 0xC982,
	34011 - 11905: 0xC983,
	34012 - 11905: 0xC984,
	34013 - 11905: 0xC0B6,
	34014 - 11905: 0xC985,
	34015 - 11905: 0xBCBB,
	34016 - 11905: 0xDDF1,
	34017 - 11905: 0xC986,
	34018 - 11905: 0xC987,
	34019 - 11905: 0xDDF7,
	34020 - 11905: 0xC988,
	34021 - 11905: 0xDDF6,
	34022 - 11905: 0xDDEB,
	34023 - 11905: 0xC989,
	34024 - 11905: 0xC98A,
	34025 - 11905: 0xC98B,
	34026 - 11905: 0xC98C,
	34027 - 11905: 0xC98D,
	34028 - 11905: 0xC5EE,
	34029 - 11905: 0xC98E,
	34030 - 11905: 0xC98F,
	34031 - 11905: 0xC990,
	34032 - 11905: 0xDDFB,
	34033 - 11905: 0xC991,
	34034 - 11905: 0xC992,
	34035 - 11905: 0xC993,
	34036 - 11905: 0xC994,
	34037 - 11905: 0xC995,
	34038 - 11905: 0xC996,
	34039 - 11905: 0xC997,
	34040 - 11905: 0xC998,
	34041 - 11905: 0xC999,
	34042 - 11905: 0xC99A,
	34043 - 11905: 0xC99B,
	34044 - 11905: 0xDEA4,
	34045 - 11905: 0xC99C,
	34046 - 11905: 0xC99D,
	34047 - 11905: 0xDEA3,
	34048 - 11905: 0xC99E,
	34049 - 11905: 0xC99F,
	34050 - 11905: 0xC9A0,
	34051 - 11905: 0xCA40,
	34052 - 11905: 0xCA41,
	34053 - 11905: 0xCA42,
	34054 - 11905: 0xCA43,
	34055 - 11905: 0xCA44,
	34056 - 11905: 0xCA45,
	34057 - 11905: 0xCA46,
	34058 - 11905: 0xCA47,
	34059 - 11905: 0xCA48,
	34060 - 11905: 0xDDF8,
	34061 - 11905: 0xCA49,
	34062 - 11905: 0xCA4A,
	34063 - 11905: 0xCA4B,
	34064 - 11905: 0xCA4C,
	34065 - 11905: 0xC3EF,
	34066 - 11905: 0xCA4D,
	34067 - 11905: 0xC2FB,
	34068 - 11905: 0xCA4E,
	34069 - 11905: 0xCA4F,
	34070 - 11905: 0xCA50,
	34071 - 11905: 0xD5E1,
	34072 - 11905: 0xCA51,
	34073 - 11905: 0xCA52,
	34074 - 11905: 0xCEB5,
	34075 - 11905: 0xCA53,
	34076 - 11905: 0xCA54,
	34077 - 11905: 0xCA55,
	34078 - 11905: 0xCA56,
	34079 - 11905: 0xDDFD,
	34080 - 11905: 0xCA57,
	34081 - 11905: 0xB2CC,
	34082 - 11905: 0xCA58,
	34083 - 11905: 0xCA59,
	34084 - 11905: 0xCA5A,
	34085 - 11905: 0xCA5B,
	34086 - 11905: 0xCA5C,
	34087 - 11905: 0xCA5D,
	34088 - 11905: 0xCA5E,
	34089 - 11905: 0xCA5F,
	34090 - 11905: 0xCA60,
	34091 - 11905: 0xC4E8,
	34092 - 11905: 0xCADF,
	34093 - 11905: 0xCA61,
	34094 - 11905: 0xCA62,
	34095 - 11905: 0xCA63,
	34096 - 11905: 0xCA64,
	34097 - 11905: 0xCA65,
	34098 - 11905: 0xCA66,
	34099 - 11905: 0xCA67,
	34100 - 11905: 0xCA68,
	34101 - 11905: 0xCA69,
	34102 - 11905: 0xCA6A,
	34103 - 11905: 0xC7BE,
	34104 - 11905: 0xDDFA,
	34105 - 11905: 0xDDFC,
	34106 - 11905: 0xDDFE,
	34107 - 11905: 0xDEA2,
	34108 - 11905: 0xB0AA,
	34109 - 11905: 0xB1CE,
	34110 - 11905: 0xCA6B,
	34111 - 11905: 0xCA6C,
	34112 - 11905: 0xCA6D,
	34113 - 11905: 0xCA6E,
	34114 - 11905: 0xCA6F,
	34115 - 11905: 0xDEAC,
	34116 - 11905: 0xCA70,
	34117 - 11905: 0xCA71,
	34118 - 11905: 0xCA72,
	34119 - 11905: 0xCA73,
	34120 - 11905: 0xDEA6,
	34121 - 11905: 0xBDB6,
	34122 - 11905: 0xC8EF,
	34123 - 11905: 0xCA74,
	34124 - 11905: 0xCA75,
	34125 - 11905: 0xCA76,
	34126 - 11905: 0xCA77,
	34127 - 11905: 0xCA78,
	34128 - 11905: 0xCA79,
	34129 - 11905: 0xCA7A,
	34130 - 11905: 0xCA7B,
	34131 - 11905: 0xCA7C,
	34132 - 11905: 0xCA7D,
	34133 - 11905: 0xCA7E,
	34134 - 11905: 0xDEA1,
	34135 - 11905: 0xCA80,
	34136 - 11905: 0xCA81,
	34137 - 11905: 0xDEA5,
	34138 - 11905: 0xCA82,
	34139 - 11905: 0xCA83,
	34140 - 11905: 0xCA84,
	34141 - 11905: 0xCA85,
	34142 - 11905: 0xDEA9,
	34143 - 11905: 0xCA86,
	34144 - 11905: 0xCA87,
	34145 - 11905: 0xCA88,
	34146 - 11905: 0xCA89,
	34147 - 11905: 0xCA8A,
	34148 - 11905: 0xDEA8,
	34149 - 11905: 0xCA8B,
	34150 - 11905: 0xCA8C,
	34151 - 11905: 0xCA8D,
	34152 - 11905: 0xDEA7,
	34153 - 11905: 0xCA8E,
	34154 - 11905: 0xCA8F,
	34155 - 11905: 0xCA90,
	34156 - 11905: 0xCA91,
	34157 - 11905: 0xCA92,
	34158 - 11905: 0xCA93,
	34159 - 11905: 0xCA94,
	34160 - 11905: 0xCA95,
	34161 - 11905: 0xCA96,
	34162 - 11905: 0xDEAD,
	34163 - 11905: 0xCA97,
	34164 - 11905: 0xD4CC,
	34165 - 11905: 0xCA98,
	34166 - 11905: 0xCA99,
	34167 - 11905: 0xCA9A,
	34168 - 11905: 0xCA9B,
	34169 - 11905: 0xDEB3,
	34170 - 11905: 0xDEAA,
	34171 - 11905: 0xDEAE,
	34172 - 11905: 0xCA9C,
	34173 - 11905: 0xCA9D,
	34174 - 11905: 0xC0D9,
	34175 - 11905: 0xCA9E,
	34176 - 11905: 0xCA9F,
	34177 - 11905: 0xCAA0,
	34178 - 11905: 0xCB40,
	34179 - 11905: 0xCB41,
	34180 - 11905: 0xB1A1,
	34181 - 11905: 0xDEB6,
	34182 - 11905: 0xCB42,
	34183 - 11905: 0xDEB1,
	34184 - 11905: 0xCB43,
	34185 - 11905: 0xCB44,
	34186 - 11905: 0xCB45,
	34187 - 11905: 0xCB46,
	34188 - 11905: 0xCB47,
	34189 - 11905: 0xCB48,
	34190 - 11905: 0xCB49,
	34191 - 11905: 0xDEB2,
	34192 - 11905: 0xCB4A,
	34193 - 11905: 0xCB4B,
	34194 - 11905: 0xCB4C,
	34195 - 11905: 0xCB4D,
	34196 - 11905: 0xCB4E,
	34197 - 11905: 0xCB4F,
	34198 - 11905: 0xCB50,
	34199 - 11905: 0xCB51,
	34200 - 11905: 0xCB52,
	34201 - 11905: 0xCB53,
	34202 - 11905: 0xCB54,
	34203 - 11905: 0xD1A6,
	34204 - 11905: 0xDEB5,
	34205 - 11905: 0xCB55,
	34206 - 11905: 0xCB56,
	34207 - 11905: 0xCB57,
	34208 - 11905: 0xCB58,
	34209 - 11905: 0xCB59,
	34210 - 11905: 0xCB5A,
	34211 - 11905: 0xCB5B,
	34212 - 11905: 0xDEAF,
	34213 - 11905: 0xCB5C,
	34214 - 11905: 0xCB5D,
	34215 - 11905: 0xCB5E,
	34216 - 11905: 0xDEB0,
	34217 - 11905: 0xCB5F,
	34218 - 11905: 0xD0BD,
	34219 - 11905: 0xCB60,
	34220 - 11905: 0xCB61,
	34221 - 11905: 0xCB62,
	34222 - 11905: 0xDEB4,
	34223 - 11905: 0xCAED,
	34224 - 11905: 0xDEB9,
	34225 - 11905: 0xCB63,
	34226 - 11905: 0xCB64,
	34227 - 11905: 0xCB65,
	34228 - 11905: 0xCB66,
	34229 - 11905: 0xCB67,
	34230 - 11905: 0xCB68,
	34231 - 11905: 0xDEB8,
	34232 - 11905: 0xCB69,
	34233 - 11905: 0xDEB7,
	34234 - 11905: 0xCB6A,
	34235 - 11905: 0xCB6B,
	34236 - 11905: 0xCB6C,
	34237 - 11905: 0xCB6D,
	34238 - 11905: 0xCB6E,
	34239 - 11905: 0xCB6F,
	34240 - 11905: 0xCB70,
	34241 - 11905: 0xDEBB,
	34242 - 11905: 0xCB71,
	34243 - 11905: 0xCB72,
	34244 - 11905: 0xCB73,
	34245 - 11905: 0xCB74,
	34246 - 11905: 0xCB75,
	34247 - 11905: 0xCB76,
	34248 - 11905: 0xCB77,
	34249 - 11905: 0xBDE5,
	34250 - 11905: 0xCB78,
	34251 - 11905: 0xCB79,
	34252 - 11905: 0xCB7A,
	34253 - 11905: 0xCB7B,
	34254 - 11905: 0xCB7C,
	34255 - 11905: 0xB2D8,
	34256 - 11905: 0xC3EA,
	34257 - 11905: 0xCB7D,
	34258 - 11905: 0xCB7E,
	34259 - 11905: 0xDEBA,
	34260 - 11905: 0xCB80,
	34261 - 11905: 0xC5BA,
	34262 - 11905: 0xCB81,
	34263 - 11905: 0xCB82,
	34264 - 11905: 0xCB83,
	34265 - 11905: 0xCB84,
	34266 - 11905: 0xCB85,
	34267 - 11905: 0xCB86,
	34268 - 11905: 0xDEBC,
	34269 - 11905: 0xCB87,
	34270 - 11905: 0xCB88,
	34271 - 11905: 0xCB89,
	34272 - 11905: 0xCB8A,
	34273 - 11905: 0xCB8B,
	34274 - 11905: 0xCB8C,
	34275 - 11905: 0xCB8D,
	34276 - 11905: 0xCCD9,
	34277 - 11905: 0xCB8E,
	34278 - 11905: 0xCB8F,
	34279 - 11905: 0xCB90,
	34280 - 11905: 0xCB91,
	34281 - 11905: 0xB7AA,
	34282 - 11905: 0xCB92,
	34283 - 11905: 0xCB93,
	34284 - 11905: 0xCB94,
	34285 - 11905: 0xCB95,
	34286 - 11905: 0xCB96,
	34287 - 11905: 0xCB97,
	34288 - 11905: 0xCB98,
	34289 - 11905: 0xCB99,
	34290 - 11905: 0xCB9A,
	34291 - 11905: 0xCB9B,
	34292 - 11905: 0xCB9C,
	34293 - 11905: 0xCB9D,
	34294 - 11905: 0xCB9E,
	34295 - 11905: 0xCB9F,
	34296 - 11905: 0xCBA0,
	34297 - 11905: 0xCC40,
	34298 - 11905: 0xCC41,
	34299 - 11905: 0xD4E5,
	34300 - 11905: 0xCC42,
	34301 - 11905: 0xCC43,
	34302 - 11905: 0xCC44,
	34303 - 11905: 0xDEBD,
	34304 - 11905: 0xCC45,
	34305 - 11905: 0xCC46,
	34306 - 11905: 0xCC47,
	34307 - 11905: 0xCC48,
	34308 - 11905: 0xCC49,
	34309 - 11905: 0xDEBF,
	34310 - 11905: 0xCC4A,
	34311 - 11905: 0xCC4B,
	34312 - 11905: 0xCC4C,
	34313 - 11905: 0xCC4D,
	34314 - 11905: 0xCC4E,
	34315 - 11905: 0xCC4F,
	34316 - 11905: 0xCC50,
	34317 - 11905: 0xCC51,
	34318 - 11905: 0xCC52,
	34319 - 11905: 0xCC53,
	34320 - 11905: 0xCC54,
	34321 - 11905: 0xC4A2,
	34322 - 11905: 0xCC55,
	34323 - 11905: 0xCC56,
	34324 - 11905: 0xCC57,
	34325 - 11905: 0xCC58,
	34326 - 11905: 0xDEC1,
	34327 - 11905: 0xCC59,
	34328 - 11905: 0xCC5A,
	34329 - 11905: 0xCC5B,
	34330 - 11905: 0xCC5C,
	34331 - 11905: 0xCC5D,
	34332 - 11905: 0xCC5E,
	34333 - 11905: 0xCC5F,
	34334 - 11905: 0xCC60,
	34335 - 11905: 0xCC61,
	34336 - 11905: 0xCC62,
	34337 - 11905: 0xCC63,
	34338 - 11905: 0xCC64,
	34339 - 11905: 0xCC65,
	34340 - 11905: 0xCC66,
	34341 - 11905: 0xCC67,
	34342 - 11905: 0xCC68,
	34343 - 11905: 0xDEBE,
	34344 - 11905: 0xCC69,
	34345 - 11905: 0xDEC0,
	34346 - 11905: 0xCC6A,
	34347 - 11905: 0xCC6B,
	34348 - 11905: 0xCC6C,
	34349 - 11905: 0xCC6D,
	34350 - 11905: 0xCC6E,
	34351 - 11905: 0xCC6F,
	34352 - 11905: 0xCC70,
	34353 - 11905: 0xCC71,
	34354 - 11905: 0xCC72,
	34355 - 11905: 0xCC73,
	34356 - 11905: 0xCC74,
	34357 - 11905: 0xCC75,
	34358 - 11905: 0xCC76,
	34359 - 11905: 0xCC77,
	34360 - 11905: 0xD5BA,
	34361 - 11905: 0xCC78,
	34362 - 11905: 0xCC79,
	34363 - 11905: 0xCC7A,
	34364 - 11905: 0xDEC2,
	34365 - 11905: 0xCC7B,
	34366 - 11905: 0xCC7C,
	34367 - 11905: 0xCC7D,
	34368 - 11905: 0xCC7E,
	34369 - 11905: 0xCC80,
	34370 - 11905: 0xCC81,
	34371 - 11905: 0xCC82,
	34372 - 11905: 0xCC83,
	34373 - 11905: 0xCC84,
	34374 - 11905: 0xCC85,
	34375 - 11905: 0xCC86,
	34376 - 11905: 0xCC87,
	34377 - 11905: 0xCC88,
	34378 - 11905: 0xCC89,
	34379 - 11905: 0xCC8A,
	34380 - 11905: 0xCC8B,
	34381 - 11905: 0xF2AE,
	34382 - 11905: 0xBBA2,
	34383 - 11905: 0xC2B2,
	34384 - 11905: 0xC5B0,
	34385 - 11905: 0xC2C7,
	34386 - 11905: 0xCC8C,
	34387 - 11905: 0xCC8D,
	34388 - 11905: 0xF2AF,
	34389 - 11905: 0xCC8E,
	34390 - 11905: 0xCC8F,
	34391 - 11905: 0xCC90,
	34392 - 11905: 0xCC91,
	34393 - 11905: 0xCC92,
	34394 - 11905: 0xD0E9,
	34395 - 11905: 0xCC93,
	34396 - 11905: 0xCC94,
	34397 - 11905: 0xCC95,
	34398 - 11905: 0xD3DD,
	34399 - 11905: 0xCC96,
	34400 - 11905: 0xCC97,
	34401 - 11905: 0xCC98,
	34402 - 11905: 0xEBBD,
	34403 - 11905: 0xCC99,
	34404 - 11905: 0xCC9A,
	34405 - 11905: 0xCC9B,
	34406 - 11905: 0xCC9C,
	34407 - 11905: 0xCC9D,
	34408 - 11905: 0xCC9E,
	34409 - 11905: 0xCC9F,
	34410 - 11905: 0xCCA0,
	34411 - 11905: 0xB3E6,
	34412 - 11905: 0xF2B0,
	34413 - 11905: 0xCD40,
	34414 - 11905: 0xF2B1,
	34415 - 11905: 0xCD41,
	34416 - 11905: 0xCD42,
	34417 - 11905: 0xCAAD,
	34418 - 11905: 0xCD43,
	34419 - 11905: 0xCD44,
	34420 - 11905: 0xCD45,
	34421 - 11905: 0xCD46,
	34422 - 11905: 0xCD47,
	34423 - 11905: 0xCD48,
	34424 - 11905: 0xCD49,
	34425 - 11905: 0xBAE7,
	34426 - 11905: 0xF2B3,
	34427 - 11905: 0xF2B5,
	34428 - 11905: 0xF2B4,
	34429 - 11905: 0xCBE4,
	34430 - 11905: 0xCFBA,
	34431 - 11905: 0xF2B2,
	34432 - 11905: 0xCAB4,
	34433 - 11905: 0xD2CF,
	34434 - 11905: 0xC2EC,
	34435 - 11905: 0xCD4A,
	34436 - 11905: 0xCD4B,
	34437 - 11905: 0xCD4C,
	34438 - 11905: 0xCD4D,
	34439 - 11905: 0xCD4E,
	34440 - 11905: 0xCD4F,
	34441 - 11905: 0xCD50,
	34442 - 11905: 0xCEC3,
	34443 - 11905: 0xF2B8,
	34444 - 11905: 0xB0F6,
	34445 - 11905: 0xF2B7,
	34446 - 11905: 0xCD51,
	34447 - 11905: 0xCD52,
	34448 - 11905: 0xCD53,
	34449 - 11905: 0xCD54,
	34450 - 11905: 0xCD55,
	34451 - 11905: 0xF2BE,
	34452 - 11905: 0xCD56,
	34453 - 11905: 0xB2CF,
	34454 - 11905: 0xCD57,
	34455 - 11905: 0xCD58,
	34456 - 11905: 0xCD59,
	34457 - 11905: 0xCD5A,
	34458 - 11905: 0xCD5B,
	34459 - 11905: 0xCD5C,
	34460 - 11905: 0xD1C1,
	34461 - 11905: 0xF2BA,
	34462 - 11905: 0xCD5D,
	34463 - 11905: 0xCD5E,
	34464 - 11905: 0xCD5F,
	34465 - 11905: 0xCD60,
	34466 - 11905: 0xCD61,
	34467 - 11905: 0xF2BC,
	34468 - 11905: 0xD4E9,
	34469 - 11905: 0xCD62,
	34470 - 11905: 0xCD63,
	34471 - 11905: 0xF2BB,
	34472 - 11905: 0xF2B6,
	34473 - 11905: 0xF2BF,
	34474 - 11905: 0xF2BD,
	34475 - 11905: 0xCD64,
	34476 - 11905: 0xF2B9,
	34477 - 11905: 0xCD65,
	34478 - 11905: 0xCD66,
	34479 - 11905: 0xF2C7,
	34480 - 11905: 0xF2C4,
	34481 - 11905: 0xF2C6,
	34482 - 11905: 0xCD67,
	34483 - 11905: 0xCD68,
	34484 - 11905: 0xF2CA,
	34485 - 11905: 0xF2C2,
	34486 - 11905: 0xF2C0,
	34487 - 11905: 0xCD69,
	34488 - 11905: 0xCD6A,
	34489 - 11905: 0xCD6B,
	34490 - 11905: 0xF2C5,
	34491 - 11905: 0xCD6C,
	34492 - 11905: 0xCD6D,
	34493 - 11905: 0xCD6E,
	34494 - 11905: 0xCD6F,
	34495 - 11905: 0xCD70,
	34496 - 11905: 0xD6FB,
	34497 - 11905: 0xCD71,
	34498 - 11905: 0xCD72,
	34499 - 11905: 0xCD73,
	34500 - 11905: 0xF2C1,
	34501 - 11905: 0xCD74,
	34502 - 11905: 0xC7F9,
	34503 - 11905: 0xC9DF,
	34504 - 11905: 0xCD75,
	34505 - 11905: 0xF2C8,
	34506 - 11905: 0xB9C6,
	34507 - 11905: 0xB5B0,
	34508 - 11905: 0xCD76,
	34509 - 11905: 0xCD77,
	34510 - 11905: 0xF2C3,
	34511 - 11905: 0xF2C9,
	34512 - 11905: 0xF2D0,
	34513 - 11905: 0xF2D6,
	34514 - 11905: 0xCD78,
	34515 - 11905: 0xCD79,
	34516 - 11905: 0xBBD7,
	34517 - 11905: 0xCD7A,
	34518 - 11905: 0xCD7B,
	34519 - 11905: 0xCD7C,
	34520 - 11905: 0xF2D5,
	34521 - 11905: 0xCDDC,
	34522 - 11905: 0xCD7D,
	34523 - 11905: 0xD6EB,
	34524 - 11905: 0xCD7E,
	34525 - 11905: 0xCD80,
	34526 - 11905: 0xF2D2,
	34527 - 11905: 0xF2D4,
	34528 - 11905: 0xCD81,
	34529 - 11905: 0xCD82,
	34530 - 11905: 0xCD83,
	34531 - 11905: 0xCD84,
	34532 - 11905: 0xB8F2,
	34533 - 11905: 0xCD85,
	34534 - 11905: 0xCD86,
	34535 - 11905: 0xCD87,
	34536 - 11905: 0xCD88,
	34537 - 11905: 0xF2CB,
	34538 - 11905: 0xCD89,
	34539 - 11905: 0xCD8A,
	34540 - 11905: 0xCD8B,
	34541 - 11905: 0xF2CE,
	34542 - 11905: 0xC2F9,
	34543 - 11905: 0xCD8C,
	34544 - 11905: 0xD5DD,
	34545 - 11905: 0xF2CC,
	34546 - 11905: 0xF2CD,
	34547 - 11905: 0xF2CF,
	34548 - 11905: 0xF2D3,
	34549 - 11905: 0xCD8D,
	34550 - 11905: 0xCD8E,
	34551 - 11905: 0xCD8F,
	34552 - 11905: 0xF2D9,
	34553 - 11905: 0xD3BC,
	34554 - 11905: 0xCD90,
	34555 - 11905: 0xCD91,
	34556 - 11905: 0xCD92,
	34557 - 11905: 0xCD93,
	34558 - 11905: 0xB6EA,
	34559 - 11905: 0xCD94,
	34560 - 11905: 0xCAF1,
	34561 - 11905: 0xCD95,
	34562 - 11905: 0xB7E4,
	34563 - 11905: 0xF2D7,
	34564 - 11905: 0xCD96,
	34565 - 11905: 0xCD97,
	34566 - 11905: 0xCD98,
	34567 - 11905: 0xF2D8,
	34568 - 11905: 0xF2DA,
	34569 - 11905: 0xF2DD,
	34570 - 11905: 0xF2DB,
	34571 - 11905: 0xCD99,
	34572 - 11905: 0xCD9A,
	34573 - 11905: 0xF2DC,
	34574 - 11905: 0xCD9B,
	34575 - 11905: 0xCD9C,
	34576 - 11905: 0xCD9D,
	34577 - 11905: 0xCD9E,
	34578 - 11905: 0xD1D1,
	34579 - 11905: 0xF2D1,
	34580 - 11905: 0xCD9F,
	34581 - 11905: 0xCDC9,
	34582 - 11905: 0xCDA0,
	34583 - 11905: 0xCECF,
	34584 - 11905: 0xD6A9,
	34585 - 11905: 0xCE40,
	34586 - 11905: 0xF2E3,
	34587 - 11905: 0xCE41,
	34588 - 11905: 0xC3DB,
	34589 - 11905: 0xCE42,
	34590 - 11905: 0xF2E0,
	34591 - 11905: 0xCE43,
	34592 - 11905: 0xCE44,
	34593 - 11905: 0xC0AF,
	34594 - 11905: 0xF2EC,
	34595 - 11905: 0xF2DE,
	34596 - 11905: 0xCE45,
	34597 - 11905: 0xF2E1,
	34598 - 11905: 0xCE46,
	34599 - 11905: 0xCE47,
	34600 - 11905: 0xCE48,
	34601 - 11905: 0xF2E8,
	34602 - 11905: 0xCE49,
	34603 - 11905: 0xCE4A,
	34604 - 11905: 0xCE4B,
	34605 - 11905: 0xCE4C,
	34606 - 11905: 0xF2E2,
	34607 - 11905: 0xCE4D,
	34608 - 11905: 0xCE4E,
	34609 - 11905: 0xF2E7,
	34610 - 11905: 0xCE4F,
	34611 - 11905: 0xCE50,
	34612 - 11905: 0xF2E6,
	34613 - 11905: 0xCE51,
	34614 - 11905: 0xCE52,
	34615 - 11905: 0xF2E9,
	34616 - 11905: 0xCE53,
	34617 - 11905: 0xCE54,
	34618 - 11905: 0xCE55,
	34619 - 11905: 0xF2DF,
	34620 - 11905: 0xCE56,
	34621 - 11905: 0xCE57,
	34622 - 11905: 0xF2E4,
	34623 - 11905: 0xF2EA,
	34624 - 11905: 0xCE58,
	34625 - 11905: 0xCE59,
	34626 - 11905: 0xCE5A,
	34627 - 11905: 0xCE5B,
	34628 - 11905: 0xCE5C,
	34629 - 11905: 0xCE5D,
	34630 - 11905: 0xCE5E,
	34631 - 11905: 0xD3AC,
	34632 - 11905: 0xF2E5,
	34633 - 11905: 0xB2F5,
	34634 - 11905: 0xCE5F,
	34635 - 11905: 0xCE60,
	34636 - 11905: 0xF2F2,
	34637 - 11905: 0xCE61,
	34638 - 11905: 0xD0AB,
	34639 - 11905: 0xCE62,
	34640 - 11905: 0xCE63,
	34641 - 11905: 0xCE64,
	34642 - 11905: 0xCE65,
	34643 - 11905: 0xF2F5,
	34644 - 11905: 0xCE66,
	34645 - 11905: 0xCE67,
	34646 - 11905: 0xCE68,
	34647 - 11905: 0xBBC8,
	34648 - 11905: 0xCE69,
	34649 - 11905: 0xF2F9,
	34650 - 11905: 0xCE6A,
	34651 - 11905: 0xCE6B,
	34652 - 11905: 0xCE6C,
	34653 - 11905: 0xCE6D,
	34654 - 11905: 0xCE6E,
	34655 - 11905: 0xCE6F,
	34656 - 11905: 0xF2F0,
	34657 - 11905: 0xCE70,
	34658 - 11905: 0xCE71,
	34659 - 11905: 0xF2F6,
	34660 - 11905: 0xF2F8,
	34661 - 11905: 0xF2FA,
	34662 - 11905: 0xCE72,
	34663 - 11905: 0xCE73,
	34664 - 11905: 0xCE74,
	34665 - 11905: 0xCE75,
	34666 - 11905: 0xCE76,
	34667 - 11905: 0xCE77,
	34668 - 11905: 0xCE78,
	34669 - 11905: 0xCE79,
	34670 - 11905: 0xF2F3,
	34671 - 11905: 0xCE7A,
	34672 - 11905: 0xF2F1,
	34673 - 11905: 0xCE7B,
	34674 - 11905: 0xCE7C,
	34675 - 11905: 0xCE7D,
	34676 - 11905: 0xBAFB,
	34677 - 11905: 0xCE7E,
	34678 - 11905: 0xB5FB,
	34679 - 11905: 0xCE80,
	34680 - 11905: 0xCE81,
	34681 - 11905: 0xCE82,
	34682 - 11905: 0xCE83,
	34683 - 11905: 0xF2EF,
	34684 - 11905: 0xF2F7,
	34685 - 11905: 0xF2ED,
	34686 - 11905: 0xF2EE,
	34687 - 11905: 0xCE84,
	34688 - 11905: 0xCE85,
	34689 - 11905: 0xCE86,
	34690 - 11905: 0xF2EB,
	34691 - 11905: 0xF3A6,
	34692 - 11905: 0xCE87,
	34693 - 11905: 0xF3A3,
	34694 - 11905: 0xCE88,
	34695 - 11905: 0xCE89,
	34696 - 11905: 0xF3A2,
	34697 - 11905: 0xCE8A,
	34698 - 11905: 0xCE8B,
	34699 - 11905: 0xF2F4,
	34700 - 11905: 0xCE8C,
	34701 - 11905: 0xC8DA,
	34702 - 11905: 0xCE8D,
	34703 - 11905: 0xCE8E,
	34704 - 11905: 0xCE8F,
	34705 - 11905: 0xCE90,
	34706 - 11905: 0xCE91,
	34707 - 11905: 0xF2FB,
	34708 - 11905: 0xCE92,
	34709 - 11905: 0xCE93,
	34710 - 11905: 0xCE94,
	34711 - 11905: 0xF3A5,
	34712 - 11905: 0xCE95,
	34713 - 11905: 0xCE96,
	34714 - 11905: 0xCE97,
	34715 - 11905: 0xCE98,
	34716 - 11905: 0xCE99,
	34717 - 11905: 0xCE9A,
	34718 - 11905: 0xCE9B,
	34719 - 11905: 0xC3F8,
	34720 - 11905: 0xCE9C,
	34721 - 11905: 0xCE9D,
	34722 - 11905: 0xCE9E,
	34723 - 11905: 0xCE9F,
	34724 - 11905: 0xCEA0,
	34725 - 11905: 0xCF40,
	34726 - 11905: 0xCF41,
	34727 - 11905: 0xCF42,
	34728 - 11905: 0xF2FD,
	34729 - 11905: 0xCF43,
	34730 - 11905: 0xCF44,
	34731 - 11905: 0xF3A7,
	34732 - 11905: 0xF3A9,
	34733 - 11905: 0xF3A4,
	34734 - 11905: 0xCF45,
	34735 - 11905: 0xF2FC,
	34736 - 11905: 0xCF46,
	34737 - 11905: 0xCF47,
	34738 - 11905: 0xCF48,
	34739 - 11905: 0xF3AB,
	34740 - 11905: 0xCF49,
	34741 - 11905: 0xF3AA,
	34742 - 11905: 0xCF4A,
	34743 - 11905: 0xCF4B,
	34744 - 11905: 0xCF4C,
	34745 - 11905: 0xCF4D,
	34746 - 11905: 0xC2DD,
	34747 - 11905: 0xCF4E,
	34748 - 11905: 0xCF4F,
	34749 - 11905: 0xF3AE,
	34750 - 11905: 0xCF50,
	34751 - 11905: 0xCF51,
	34752 - 11905: 0xF3B0,
	34753 - 11905: 0xCF52,
	34754 - 11905: 0xCF53,
	34755 - 11905: 0xCF54,
	34756 - 11905: 0xCF55,
	34757 - 11905: 0xCF56,
	34758 - 11905: 0xF3A1,
	34759 - 11905: 0xCF57,
	34760 - 11905: 0xCF58,
	34761 - 11905: 0xCF59,
	34762 - 11905: 0xF3B1,
	34763 - 11905: 0xF3AC,
	34764 - 11905: 0xCF5A,
	34765 - 11905: 0xCF5B,
	34766 - 11905: 0xCF5C,
	34767 - 11905: 0xCF5D,
	34768 - 11905: 0xCF5E,
	34769 - 11905: 0xF3AF,
	34770 - 11905: 0xF2FE,
	34771 - 11905: 0xF3AD,
	34772 - 11905: 0xCF5F,
	34773 - 11905: 0xCF60,
	34774 - 11905: 0xCF61,
	34775 - 11905: 0xCF62,
	34776 - 11905: 0xCF63,
	34777 - 11905: 0xCF64,
	34778 - 11905: 0xCF65,
	34779 - 11905: 0xF3B2,
	34780 - 11905: 0xCF66,
	34781 - 11905: 0xCF67,
	34782 - 11905: 0xCF68,
	34783 - 11905: 0xCF69,
	34784 - 11905: 0xF3B4,
	34785 - 11905: 0xCF6A,
	34786 - 11905: 0xCF6B,
	34787 - 11905: 0xCF6C,
	34788 - 11905: 0xCF6D,
	34789 - 11905: 0xF3A8,
	34790 - 11905: 0xCF6E,
	34791 - 11905: 0xCF6F,
	34792 - 11905: 0xCF70,
	34793 - 11905: 0xCF71,
	34794 - 11905: 0xF3B3,
	34795 - 11905: 0xCF72,
	34796 - 11905: 0xCF73,
	34797 - 11905: 0xCF74,
	34798 - 11905: 0xF3B5,
	34799 - 11905: 0xCF75,
	34800 - 11905: 0xCF76,
	34801 - 11905: 0xCF77,
	34802 - 11905: 0xCF78,
	34803 - 11905: 0xCF79,
	34804 - 11905: 0xCF7A,
	34805 - 11905: 0xCF7B,
	34806 - 11905: 0xCF7C,
	34807 - 11905: 0xCF7D,
	34808 - 11905: 0xCF7E,
	34809 - 11905: 0xD0B7,
	34810 - 11905: 0xCF80,
	34811 - 11905: 0xCF81,
	34812 - 11905: 0xCF82,
	34813 - 11905: 0xCF83,
	34814 - 11905: 0xF3B8,
	34815 - 11905: 0xCF84,
	34816 - 11905: 0xCF85,
	34817 - 11905: 0xCF86,
	34818 - 11905: 0xCF87,
	34819 - 11905: 0xD9F9,
	34820 - 11905: 0xCF88,
	34821 - 11905: 0xCF89,
	34822 - 11905: 0xCF8A,
	34823 - 11905: 0xCF8B,
	34824 - 11905: 0xCF8C,
	34825 - 11905: 0xCF8D,
	34826 - 11905: 0xF3B9,
	34827 - 11905: 0xCF8E,
	34828 - 11905: 0xCF8F,
	34829 - 11905: 0xCF90,
	34830 - 11905: 0xCF91,
	34831 - 11905: 0xCF92,
	34832 - 11905: 0xCF93,
	34833 - 11905: 0xCF94,
	34834 - 11905: 0xCF95,
	34835 - 11905: 0xF3B7,
	34836 - 11905: 0xCF96,
	34837 - 11905: 0xC8E4,
	34838 - 11905: 0xF3B6,
	34839 - 11905: 0xCF97,
	34840 - 11905: 0xCF98,
	34841 - 11905: 0xCF99,
	34842 - 11905: 0xCF9A,
	34843 - 11905: 0xF3BA,
	34844 - 11905: 0xCF9B,
	34845 - 11905: 0xCF9C,
	34846 - 11905: 0xCF9D,
	34847 - 11905: 0xCF9E,
	34848 - 11905: 0xCF9F,
	34849 - 11905: 0xF3BB,
	34850 - 11905: 0xB4C0,
	34851 - 11905: 0xCFA0,
	34852 - 11905: 0xD040,
	34853 - 11905: 0xD041,
	34854 - 11905: 0xD042,
	34855 - 11905: 0xD043,
	34856 - 11905: 0xD044,
	34857 - 11905: 0xD045,
	34858 - 11905: 0xD046,
	34859 - 11905: 0xD047,
	34860 - 11905: 0xD048,
	34861 - 11905: 0xD049,
	34862 - 11905: 0xD04A,
	34863 - 11905: 0xD04B,
	34864 - 11905: 0xD04C,
	34865 - 11905: 0xD04D,
	34866 - 11905: 0xEEC3,
	34867 - 11905: 0xD04E,
	34868 - 11905: 0xD04F,
	34869 - 11905: 0xD050,
	34870 - 11905: 0xD051,
	34871 - 11905: 0xD052,
	34872 - 11905: 0xD053,
	34873 - 11905: 0xF3BC,
	34874 - 11905: 0xD054,
	34875 - 11905: 0xD055,
	34876 - 11905: 0xF3BD,
	34877 - 11905: 0xD056,
	34878 - 11905: 0xD057,
	34879 - 11905: 0xD058,
	34880 - 11905: 0xD1AA,
	34881 - 11905: 0xD059,
	34882 - 11905: 0xD05A,
	34883 - 11905: 0xD05B,
	34884 - 11905: 0xF4AC,
	34885 - 11905: 0xD0C6,
	34886 - 11905: 0xD05C,
	34887 - 11905: 0xD05D,
	34888 - 11905: 0xD05E,
	34889 - 11905: 0xD05F,
	34890 - 11905: 0xD060,
	34891 - 11905: 0xD061,
	34892 - 11905: 0xD0D0,
	34893 - 11905: 0xD1DC,
	34894 - 11905: 0xD062,
	34895 - 11905: 0xD063,
	34896 - 11905: 0xD064,
	34897 - 11905: 0xD065,
	34898 - 11905: 0xD066,
	34899 - 11905: 0xD067,
	34900 - 11905: 0xCFCE,
	34901 - 11905: 0xD068,
	34902 - 11905: 0xD069,
	34903 - 11905: 0xBDD6,
	34904 - 11905: 0xD06A,
	34905 - 11905: 0xD1C3,
	34906 - 11905: 0xD06B,
	34907 - 11905: 0xD06C,
	34908 - 11905: 0xD06D,
	34909 - 11905: 0xD06E,
	34910 - 11905: 0xD06F,
	34911 - 11905: 0xD070,
	34912 - 11905: 0xD071,
	34913 - 11905: 0xBAE2,
	34914 - 11905: 0xE1E9,
	34915 - 11905: 0xD2C2,
	34916 - 11905: 0xF1C2,
	34917 - 11905: 0xB2B9,
	34918 - 11905: 0xD072,
	34919 - 11905: 0xD073,
	34920 - 11905: 0xB1ED,
	34921 - 11905: 0xF1C3,
	34922 - 11905: 0xD074,
	34923 - 11905: 0xC9C0,
	34924 - 11905: 0xB3C4,
	34925 - 11905: 0xD075,
	34926 - 11905: 0xD9F2,
	34927 - 11905: 0xD076,
	34928 - 11905: 0xCBA5,
	34929 - 11905: 0xD077,
	34930 - 11905: 0xF1C4,
	34931 - 11905: 0xD078,
	34932 - 11905: 0xD079,
	34933 - 11905: 0xD07A,
	34934 - 11905: 0xD07B,
	34935 - 11905: 0xD6D4,
	34936 - 11905: 0xD07C,
	34937 - 11905: 0xD07D,
	34938 - 11905: 0xD07E,
	34939 - 11905: 0xD080,
	34940 - 11905: 0xD081,
	34941 - 11905: 0xF1C5,
	34942 - 11905: 0xF4C0,
	34943 - 11905: 0xF1C6,
	34944 - 11905: 0xD082,
	34945 - 11905: 0xD4AC,
	34946 - 11905: 0xF1C7,
	34947 - 11905: 0xD083,
	34948 - 11905: 0xB0C0,
	34949 - 11905: 0xF4C1,
	34950 - 11905: 0xD084,
	34951 - 11905: 0xD085,
	34952 - 11905: 0xF4C2,
	34953 - 11905: 0xD086,
	34954 - 11905: 0xD087,
	34955 - 11905: 0xB4FC,
	34956 - 11905: 0xD088,
	34957 - 11905: 0xC5DB,
	34958 - 11905: 0xD089,
	34959 - 11905: 0xD08A,
	34960 - 11905: 0xD08B,
	34961 - 11905: 0xD08C,
	34962 - 11905: 0xCCBB,
	34963 - 11905: 0xD08D,
	34964 - 11905: 0xD08E,
	34965 - 11905: 0xD08F,
	34966 - 11905: 0xD0E4,
	34967 - 11905: 0xD090,
	34968 - 11905: 0xD091,
	34969 - 11905: 0xD092,
	34970 - 11905: 0xD093,
	34971 - 11905: 0xD094,
	34972 - 11905: 0xCDE0,
	34973 - 11905: 0xD095,
	34974 - 11905: 0xD096,
	34975 - 11905: 0xD097,
	34976 - 11905: 0xD098,
	34977 - 11905: 0xD099,
	34978 - 11905: 0xF1C8,
	34979 - 11905: 0xD09A,
	34980 - 11905: 0xD9F3,
	34981 - 11905: 0xD09B,
	34982 - 11905: 0xD09C,
	34983 - 11905: 0xD09D,
	34984 - 11905: 0xD09E,
	34985 - 11905: 0xD09F,
	34986 - 11905: 0xD0A0,
	34987 - 11905: 0xB1BB,
	34988 - 11905: 0xD140,
	34989 - 11905: 0xCFAE,
	34990 - 11905: 0xD141,
	34991 - 11905: 0xD142,
	34992 - 11905: 0xD143,
	34993 - 11905: 0xB8A4,
	34994 - 11905: 0xD144,
	34995 - 11905: 0xD145,
	34996 - 11905: 0xD146,
	34997 - 11905: 0xD147,
	34998 - 11905: 0xD148,
	34999 - 11905: 0xF1CA,
	35000 - 11905: 0xD149,
	35001 - 11905: 0xD14A,
	35002 - 11905: 0xD14B,
	35003 - 11905: 0xD14C,
	35004 - 11905: 0xF1CB,
	35005 - 11905: 0xD14D,
	35006 - 11905: 0xD14E,
	35007 - 11905: 0xD14F,
	35008 - 11905: 0xD150,
	35009 - 11905: 0xB2C3,
	35010 - 11905: 0xC1D1,
	35011 - 11905: 0xD151,
	35012 - 11905: 0xD152,
	35013 - 11905: 0xD7B0,
	35014 - 11905: 0xF1C9,
	35015 - 11905: 0xD153,
	35016 - 11905: 0xD154,
	35017 - 11905: 0xF1CC,
	35018 - 11905: 0xD155,
	35019 - 11905: 0xD156,
	35020 - 11905: 0xD157,
	35021 - 11905: 0xD158,
	35022 - 11905: 0xF1CE,
	35023 - 11905: 0xD159,
	35024 - 11905: 0xD15A,
	35025 - 11905: 0xD15B,
	35026 - 11905: 0xD9F6,
	35027 - 11905: 0xD15C,
	35028 - 11905: 0xD2E1,
	35029 - 11905: 0xD4A3,
	35030 - 11905: 0xD15D,
	35031 - 11905: 0xD15E,
	35032 - 11905: 0xF4C3,
	35033 - 11905: 0xC8B9,
	35034 - 11905: 0xD15F,
	35035 - 11905: 0xD160,
	35036 - 11905: 0xD161,
	35037 - 11905: 0xD162,
	35038 - 11905: 0xD163,
	35039 - 11905: 0xF4C4,
	35040 - 11905: 0xD164,
	35041 - 11905: 0xD165,
	35042 - 11905: 0xF1CD,
	35043 - 11905: 0xF1CF,
	35044 - 11905: 0xBFE3,
	35045 - 11905: 0xF1D0,
	35046 - 11905: 0xD166,
	35047 - 11905: 0xD167,
	35048 - 11905: 0xF1D4,
	35049 - 11905: 0xD168,
	35050 - 11905: 0xD169,
	35051 - 11905: 0xD16A,
	35052 - 11905: 0xD16B,
	35053 - 11905: 0xD16C,
	35054 - 11905: 0xD16D,
	35055 - 11905: 0xD16E,
	35056 - 11905: 0xF1D6,
	35057 - 11905: 0xF1D1,
	35058 - 11905: 0xD16F,
	35059 - 11905: 0xC9D1,
	35060 - 11905: 0xC5E1,
	35061 - 11905: 0xD170,
	35062 - 11905: 0xD171,
	35063 - 11905: 0xD172,
	35064 - 11905: 0xC2E3,
	35065 - 11905: 0xB9FC,
	35066 - 11905: 0xD173,
	35067 - 11905: 0xD174,
	35068 - 11905: 0xF1D3,
	35069 - 11905: 0xD175,
	35070 - 11905: 0xF1D5,
	35071 - 11905: 0xD176,
	35072 - 11905: 0xD177,
	35073 - 11905: 0xD178,
	35074 - 11905: 0xB9D3,
	35075 - 11905: 0xD179,
	35076 - 11905: 0xD17A,
	35077 - 11905: 0xD17B,
	35078 - 11905: 0xD17C,
	35079 - 11905: 0xD17D,
	35080 - 11905: 0xD17E,
	35081 - 11905: 0xD180,
	35082 - 11905: 0xF1DB,
	35083 - 11905: 0xD181,
	35084 - 11905: 0xD182,
	35085 - 11905: 0xD183,
	35086 - 11905: 0xD184,
	35087 - 11905: 0xD185,
	35088 - 11905: 0xBAD6,
	35089 - 11905: 0xD186,
	35090 - 11905: 0xB0FD,
	35091 - 11905: 0xF1D9,
	35092 - 11905: 0xD187,
	35093 - 11905: 0xD188,
	35094 - 11905: 0xD189,
	35095 - 11905: 0xD18A,
	35096 - 11905: 0xD18B,
	35097 - 11905: 0xF1D8,
	35098 - 11905: 0xF1D2,
	35099 - 11905: 0xF1DA,
	35100 - 11905: 0xD18C,
	35101 - 11905: 0xD18D,
	35102 - 11905: 0xD18E,
	35103 - 11905: 0xD18F,
	35104 - 11905: 0xD190,
	35105 - 11905: 0xF1D7,
	35106 - 11905: 0xD191,
	35107 - 11905: 0xD192,
	35108 - 11905: 0xD193,
	35109 - 11905: 0xC8EC,
	35110 - 11905: 0xD194,
	35111 - 11905: 0xD195,
	35112 - 11905: 0xD196,
	35113 - 11905: 0xD197,
	35114 - 11905: 0xCDCA,
	35115 - 11905: 0xF1DD,
	35116 - 11905: 0xD198,
	35117 - 11905: 0xD199,
	35118 - 11905: 0xD19A,
	35119 - 11905: 0xD19B,
	35120 - 11905: 0xE5BD,
	35121 - 11905: 0xD19C,
	35122 - 11905: 0xD19D,
	35123 - 11905: 0xD19E,
	35124 - 11905: 0xF1DC,
	35125 - 11905: 0xD19F,
	35126 - 11905: 0xF1DE,
	35127 - 11905: 0xD1A0,
	35128 - 11905: 0xD240,
	35129 - 11905: 0xD241,
	35130 - 11905: 0xD242,
	35131 - 11905: 0xD243,
	35132 - 11905: 0xD244,
	35133 - 11905: 0xD245,
	35134 - 11905: 0xD246,
	35135 - 11905: 0xD247,
	35136 - 11905: 0xD248,
	35137 - 11905: 0xF1DF,
	35138 - 11905: 0xD249,
	35139 - 11905: 0xD24A,
	35140 - 11905: 0xCFE5,
	35141 - 11905: 0xD24B,
	35142 - 11905: 0xD24C,
	35143 - 11905: 0xD24D,
	35144 - 11905: 0xD24E,
	35145 - 11905: 0xD24F,
	35146 - 11905: 0xD250,
	35147 - 11905: 0xD251,
	35148 - 11905: 0xD252,
	35149 - 11905: 0xD253,
	35150 - 11905: 0xD254,
	35151 - 11905: 0xD255,
	35152 - 11905: 0xD256,
	35153 - 11905: 0xD257,
	35154 - 11905: 0xD258,
	35155 - 11905: 0xD259,
	35156 - 11905: 0xD25A,
	35157 - 11905: 0xD25B,
	35158 - 11905: 0xD25C,
	35159 - 11905: 0xD25D,
	35160 - 11905: 0xD25E,
	35161 - 11905: 0xD25F,
	35162 - 11905: 0xD260,
	35163 - 11905: 0xD261,
	35164 - 11905: 0xD262,
	35165 - 11905: 0xD263,
	35166 - 11905: 0xF4C5,
	35167 - 11905: 0xBDF3,
	35168 - 11905: 0xD264,
	35169 - 11905: 0xD265,
	35170 - 11905: 0xD266,
	35171 - 11905: 0xD267,
	35172 - 11905: 0xD268,
	35173 - 11905: 0xD269,
	35174 - 11905: 0xF1E0,
	35175 - 11905: 0xD26A,
	35176 - 11905: 0xD26B,
	35177 - 11905: 0xD26C,
	35178 - 11905: 0xD26D,
	35179 - 11905: 0xD26E,
	35180 - 11905: 0xD26F,
	35181 - 11905: 0xD270,
	35182 - 11905: 0xD271,
	35183 - 11905: 0xD272,
	35184 - 11905: 0xD273,
	35185 - 11905: 0xD274,
	35186 - 11905: 0xD275,
	35187 - 11905: 0xD276,
	35188 - 11905: 0xD277,
	35189 - 11905: 0xD278,
	35190 - 11905: 0xD279,
	35191 - 11905: 0xD27A,
	35192 - 11905: 0xD27B,
	35193 - 11905: 0xD27C,
	35194 - 11905: 0xD27D,
	35195 - 11905: 0xF1E1,
	35196 - 11905: 0xD27E,
	35197 - 11905: 0xD280,
	35198 - 11905: 0xD281,
	35199 - 11905: 0xCEF7,
	35200 - 11905: 0xD282,
	35201 - 11905: 0xD2AA,
	35202 - 11905: 0xD283,
	35203 - 11905: 0xF1FB,
	35204 - 11905: 0xD284,
	35205 - 11905: 0xD285,
	35206 - 11905: 0xB8B2,
	35207 - 11905: 0xD286,
	35208 - 11905: 0xD287,
	35209 - 11905: 0xD288,
	35210 - 11905: 0xD289,
	35211 - 11905: 0xD28A,
	35212 - 11905: 0xD28B,
	35213 - 11905: 0xD28C,
	35214 - 11905: 0xD28D,
	35215 - 11905: 0xD28E,
	35216 - 11905: 0xD28F,
	35217 - 11905: 0xD290,
	35218 - 11905: 0xD291,
	35219 - 11905: 0xD292,
	35220 - 11905: 0xD293,
	35221 - 11905: 0xD294,
	35222 - 11905: 0xD295,
	35223 - 11905: 0xD296,
	35224 - 11905: 0xD297,
	35225 - 11905: 0xD298,
	35226 - 11905: 0xD299,
	35227 - 11905: 0xD29A,
	35228 - 11905: 0xD29B,
	35229 - 11905: 0xD29C,
	35230 - 11905: 0xD29D,
	35231 - 11905: 0xD29E,
	35232 - 11905: 0xD29F,
	35233 - 11905: 0xD2A0,
	35234 - 11905: 0xD340,
	35235 - 11905: 0xD341,
	35236 - 11905: 0xD342,
	35237 - 11905: 0xD343,
	35238 - 11905: 0xD344,
	35239 - 11905: 0xD345,
	35240 - 11905: 0xD346,
	35241 - 11905: 0xD347,
	35242 - 11905: 0xD348,
	35243 - 11905: 0xD349,
	35244 - 11905: 0xD34A,
	35245 - 11905: 0xD34B,
	35246 - 11905: 0xD34C,
	35247 - 11905: 0xD34D,
	35248 - 11905: 0xD34E,
	35249 - 11905: 0xD34F,
	35250 - 11905: 0xD350,
	35251 - 11905: 0xD351,
	35252 - 11905: 0xD352,
	35253 - 11905: 0xD353,
	35254 - 11905: 0xD354,
	35255 - 11905: 0xD355,
	35256 - 11905: 0xD356,
	35257 - 11905: 0xD357,
	35258 - 11905: 0xD358,
	35259 - 11905: 0xD359,
	35260 - 11905: 0xD35A,
	35261 - 11905: 0xD35B,
	35262 - 11905: 0xD35C,
	35263 - 11905: 0xD35D,
	35264 - 11905: 0xD35E,
	35265 - 11905: 0xBCFB,
	35266 - 11905: 0xB9DB,
	35267 - 11905: 0xD35F,
	35268 - 11905: 0xB9E6,
	35269 - 11905: 0xC3D9,
	35270 - 11905: 0xCAD3,
	35271 - 11905: 0xEAE8,
	35272 - 11905: 0xC0C0,
	35273 - 11905: 0xBEF5,
	35274 - 11905: 0xEAE9,
	35275 - 11905: 0xEAEA,
	35276 - 11905: 0xEAEB,
	35277 - 11905: 0xD360,
	35278 - 11905: 0xEAEC,
	35279 - 11905: 0xEAED,
	35280 - 11905: 0xEAEE,
	35281 - 11905: 0xEAEF,
	35282 - 11905: 0xBDC7,
	35283 - 11905: 0xD361,
	35284 - 11905: 0xD362,
	35285 - 11905: 0xD363,
	35286 - 11905: 0xF5FB,
	35287 - 11905: 0xD364,
	35288 - 11905: 0xD365,
	35289 - 11905: 0xD366,
	35290 - 11905: 0xF5FD,
	35291 - 11905: 0xD367,
	35292 - 11905: 0xF5FE,
	35293 - 11905: 0xD368,
	35294 - 11905: 0xF5FC,
	35295 - 11905: 0xD369,
	35296 - 11905: 0xD36A,
	35297 - 11905: 0xD36B,
	35298 - 11905: 0xD36C,
	35299 - 11905: 0xBDE2,
	35300 - 11905: 0xD36D,
	35301 - 11905: 0xF6A1,
	35302 - 11905: 0xB4A5,
	35303 - 11905: 0xD36E,
	35304 - 11905: 0xD36F,
	35305 - 11905: 0xD370,
	35306 - 11905: 0xD371,
	35307 - 11905: 0xF6A2,
	35308 - 11905: 0xD372,
	35309 - 11905: 0xD373,
	35310 - 11905: 0xD374,
	35311 - 11905: 0xF6A3,
	35312 - 11905: 0xD375,
	35313 - 11905: 0xD376,
	35314 - 11905: 0xD377,
	35315 - 11905: 0xECB2,
	35316 - 11905: 0xD378,
	35317 - 11905: 0xD379,
	35318 - 11905: 0xD37A,
	35319 - 11905: 0xD37B,
	35320 - 11905: 0xD37C,
	35321 - 11905: 0xD37D,
	35322 - 11905: 0xD37E,
	35323 - 11905: 0xD380,
	35324 - 11905: 0xD381,
	35325 - 11905: 0xD382,
	35326 - 11905: 0xD383,
	35327 - 11905: 0xD384,
	35328 - 11905: 0xD1D4,
	35329 - 11905: 0xD385,
	35330 - 11905: 0xD386,
	35331 - 11905: 0xD387,
	35332 - 11905: 0xD388,
	35333 - 11905: 0xD389,
	35334 - 11905: 0xD38A,
	35335 - 11905: 0xD9EA,
	35336 - 11905: 0xD38B,
	35337 - 11905: 0xD38C,
	35338 - 11905: 0xD38D,
	35339 - 11905: 0xD38E,
	35340 - 11905: 0xD38F,
	35341 - 11905: 0xD390,
	35342 - 11905: 0xD391,
	35343 - 11905: 0xD392,
	35344 - 11905: 0xD393,
	35345 - 11905: 0xD394,
	35346 - 11905: 0xD395,
	35347 - 11905: 0xD396,
	35348 - 11905: 0xD397,
	35349 - 11905: 0xD398,
	35350 - 11905: 0xD399,
	35351 - 11905: 0xD39A,
	35352 - 11905: 0xD39B,
	35353 - 11905: 0xD39C,
	35354 - 11905: 0xD39D,
	35355 - 11905: 0xD39E,
	35356 - 11905: 0xD39F,
	35357 - 11905: 0xD3A0,
	35358 - 11905: 0xD440,
	35359 - 11905: 0xD441,
	35360 - 11905: 0xD442,
	35361 - 11905: 0xD443,
	35362 - 11905: 0xD444,
	35363 - 11905: 0xD445,
	35364 - 11905: 0xD446,
	35365 - 11905: 0xD447,
	35366 - 11905: 0xD448,
	35367 - 11905: 0xD449,
	35368 - 11905: 0xD44A,
	35369 - 11905: 0xD44B,
	35370 - 11905: 0xD44C,
	35371 - 11905: 0xD44D,
	35372 - 11905: 0xD44E,
	35373 - 11905: 0xD44F,
	35374 - 11905: 0xD450,
	35375 - 11905: 0xD451,
	35376 - 11905: 0xD452,
	35377 - 11905: 0xD453,
	35378 - 11905: 0xD454,
	35379 - 11905: 0xD455,
	35380 - 11905: 0xD456,
	35381 - 11905: 0xD457,
	35382 - 11905: 0xD458,
	35383 - 11905: 0xD459,
	35384 - 11905: 0xD45A,
	35385 - 11905: 0xD45B,
	35386 - 11905: 0xD45C,
	35387 - 11905: 0xD45D,
	35388 - 11905: 0xD45E,
	35389 - 11905: 0xD45F,
	35390 - 11905: 0xF6A4,
	35391 - 11905: 0xD460,
	35392 - 11905: 0xD461,
	35393 - 11905: 0xD462,
	35394 - 11905: 0xD463,
	35395 - 11905: 0xD464,
	35396 - 11905: 0xD465,
	35397 - 11905: 0xD466,
	35398 - 11905: 0xD467,
	35399 - 11905: 0xD468,
	35400 - 11905: 0xEEBA,
	35401 - 11905: 0xD469,
	35402 - 11905: 0xD46A,
	35403 - 11905: 0xD46B,
	35404 - 11905: 0xD46C,
	35405 - 11905: 0xD46D,
	35406 - 11905: 0xD46E,
	35407 - 11905: 0xD46F,
	35408 - 11905: 0xD470,
	35409 - 11905: 0xD471,
	35410 - 11905: 0xD472,
	35411 - 11905: 0xD473,
	35412 - 11905: 0xD474,
	35413 - 11905: 0xD475,
	35414 - 11905: 0xD476,
	35415 - 11905: 0xD477,
	35416 - 11905: 0xD478,
	35417 - 11905: 0xD479,
	35418 - 11905: 0xD47A,
	35419 - 11905: 0xD47B,
	35420 - 11905: 0xD47C,
	35421 - 11905: 0xD47D,
	35422 - 11905: 0xD47E,
	35423 - 11905: 0xD480,
	35424 - 11905: 0xD481,
	35425 - 11905: 0xD482,
	35426 - 11905: 0xD483,
	35427 - 11905: 0xD484,
	35428 - 11905: 0xD485,
	35429 - 11905: 0xD486,
	35430 - 11905: 0xD487,
	35431 - 11905: 0xD488,
	35432 - 11905: 0xD489,
	35433 - 11905: 0xD48A,
	35434 - 11905: 0xD48B,
	35435 - 11905: 0xD48C,
	35436 - 11905: 0xD48D,
	35437 - 11905: 0xD48E,
	35438 - 11905: 0xD48F,
	35439 - 11905: 0xD490,
	35440 - 11905: 0xD491,
	35441 - 11905: 0xD492,
	35442 - 11905: 0xD493,
	35443 - 11905: 0xD494,
	35444 - 11905: 0xD495,
	35445 - 11905: 0xD496,
	35446 - 11905: 0xD497,
	35447 - 11905: 0xD498,
	35448 - 11905: 0xD499,
	35449 - 11905: 0xD5B2,
	35450 - 11905: 0xD49A,
	35451 - 11905: 0xD49B,
	35452 - 11905: 0xD49C,
	35453 - 11905: 0xD49D,
	35454 - 11905: 0xD49E,
	35455 - 11905: 0xD49F,
	35456 - 11905: 0xD4A0,
	35457 - 11905: 0xD540,
	35458 - 11905: 0xD541,
	35459 - 11905: 0xD542,
	35460 - 11905: 0xD543,
	35461 - 11905: 0xD544,
	35462 - 11905: 0xD545,
	35463 - 11905: 0xD546,
	35464 - 11905: 0xD547,
	35465 - 11905: 0xD3FE,
	35466 - 11905: 0xCCDC,
	35467 - 11905: 0xD548,
	35468 - 11905: 0xD549,
	35469 - 11905: 0xD54A,
	35470 - 11905: 0xD54B,
	35471 - 11905: 0xD54C,
	35472 - 11905: 0xD54D,
	35473 - 11905: 0xD54E,
	35474 - 11905: 0xD54F,
	35475 - 11905: 0xCAC4,
	35476 - 11905: 0xD550,
	35477 - 11905: 0xD551,
	35478 - 11905: 0xD552,
	35479 - 11905: 0xD553,
	35480 - 11905: 0xD554,
	35481 - 11905: 0xD555,
	35482 - 11905: 0xD556,
	35483 - 11905: 0xD557,
	35484 - 11905: 0xD558,
	35485 - 11905: 0xD559,
	35486 - 11905: 0xD55A,
	35487 - 11905: 0xD55B,
	35488 - 11905: 0xD55C,
	35489 - 11905: 0xD55D,
	35490 - 11905: 0xD55E,
	35491 - 11905: 0xD55F,
	35492 - 11905: 0xD560,
	35493 - 11905: 0xD561,
	35494 - 11905: 0xD562,
	35495 - 11905: 0xD563,
	35496 - 11905: 0xD564,
	35497 - 11905: 0xD565,
	35498 - 11905: 0xD566,
	35499 - 11905: 0xD567,
	35500 - 11905: 0xD568,
	35501 - 11905: 0xD569,
	35502 - 11905: 0xD56A,
	35503 - 11905: 0xD56B,
	35504 - 11905: 0xD56C,
	35505 - 11905: 0xD56D,
	35506 - 11905: 0xD56E,
	35507 - 11905: 0xD56F,
	35508 - 11905: 0xD570,
	35509 - 11905: 0xD571,
	35510 - 11905: 0xD572,
	35511 - 11905: 0xD573,
	35512 - 11905: 0xD574,
	35513 - 11905: 0xD575,
	35514 - 11905: 0xD576,
	35515 - 11905: 0xD577,
	35516 - 11905: 0xD578,
	35517 - 11905: 0xD579,
	35518 - 11905: 0xD57A,
	35519 - 11905: 0xD57B,
	35520 - 11905: 0xD57C,
	35521 - 11905: 0xD57D,
	35522 - 11905: 0xD57E,
	35523 - 11905: 0xD580,
	35524 - 11905: 0xD581,
	35525 - 11905: 0xD582,
	35526 - 11905: 0xD583,
	35527 - 11905: 0xD584,
	35528 - 11905: 0xD585,
	35529 - 11905: 0xD586,
	35530 - 11905: 0xD587,
	35531 - 11905: 0xD588,
	35532 - 11905: 0xD589,
	35533 - 11905: 0xD58A,
	35534 - 11905: 0xD58B,
	35535 - 11905: 0xD58C,
	35536 - 11905: 0xD58D,
	35537 - 11905: 0xD58E,
	35538 - 11905: 0xD58F,
	35539 - 11905: 0xD590,
	35540 - 11905: 0xD591,
	35541 - 11905: 0xD592,
	35542 - 11905: 0xD593,
	35543 - 11905: 0xD594,
	35544 - 11905: 0xD595,
	35545 - 11905: 0xD596,
	35546 - 11905: 0xD597,
	35547 - 11905: 0xD598,
	35548 - 11905: 0xD599,
	35549 - 11905: 0xD59A,
	35550 - 11905: 0xD59B,
	35551 - 11905: 0xD59C,
	35552 - 11905: 0xD59D,
	35553 - 11905: 0xD59E,
	35554 - 11905: 0xD59F,
	35555 - 11905: 0xD5A0,
	35556 - 11905: 0xD640,
	35557 - 11905: 0xD641,
	35558 - 11905: 0xD642,
	35559 - 11905: 0xD643,
	35560 - 11905: 0xD644,
	35561 - 11905: 0xD645,
	35562 - 11905: 0xD646,
	35563 - 11905: 0xD647,
	35564 - 11905: 0xD648,
	35565 - 11905: 0xD649,
	35566 - 11905: 0xD64A,
	35567 - 11905: 0xD64B,
	35568 - 11905: 0xD64C,
	35569 - 11905: 0xD64D,
	35570 - 11905: 0xD64E,
	35571 - 11905: 0xD64F,
	35572 - 11905: 0xD650,
	35573 - 11905: 0xD651,
	35574 - 11905: 0xD652,
	35575 - 11905: 0xD653,
	35576 - 11905: 0xD654,
	35577 - 11905: 0xD655,
	35578 - 11905: 0xD656,
	35579 - 11905: 0xD657,
	35580 - 11905: 0xD658,
	35581 - 11905: 0xD659,
	35582 - 11905: 0xD65A,
	35583 - 11905: 0xD65B,
	35584 - 11905: 0xD65C,
	35585 - 11905: 0xD65D,
	35586 - 11905: 0xD65E,
	35587 - 11905: 0xD65F,
	35588 - 11905: 0xD660,
	35589 - 11905: 0xD661,
	35590 - 11905: 0xD662,
	35591 - 11905: 0xE5C0,
	35592 - 11905: 0xD663,
	35593 - 11905: 0xD664,
	35594 - 11905: 0xD665,
	35595 - 11905: 0xD666,
	35596 - 11905: 0xD667,
	35597 - 11905: 0xD668,
	35598 - 11905: 0xD669,
	35599 - 11905: 0xD66A,
	35600 - 11905: 0xD66B,
	35601 - 11905: 0xD66C,
	35602 - 11905: 0xD66D,
	35603 - 11905: 0xD66E,
	35604 - 11905: 0xD66F,
	35605 - 11905: 0xD670,
	35606 - 11905: 0xD671,
	35607 - 11905: 0xD672,
	35608 - 11905: 0xD673,
	35609 - 11905: 0xD674,
	35610 - 11905: 0xD675,
	35611 - 11905: 0xD676,
	35612 - 11905: 0xD677,
	35613 - 11905: 0xD678,
	35614 - 11905: 0xD679,
	35615 - 11905: 0xD67A,
	35616 - 11905: 0xD67B,
	35617 - 11905: 0xD67C,
	35618 - 11905: 0xD67D,
	35619 - 11905: 0xD67E,
	35620 - 11905: 0xD680,
	35621 - 11905: 0xD681,
	35622 - 11905: 0xF6A5,
	35623 - 11905: 0xD682,
	35624 - 11905: 0xD683,
	35625 - 11905: 0xD684,
	35626 - 11905: 0xD685,
	35627 - 11905: 0xD686,
	35628 - 11905: 0xD687,
	35629 - 11905: 0xD688,
	35630 - 11905: 0xD689,
	35631 - 11905: 0xD68A,
	35632 - 11905: 0xD68B,
	35633 - 11905: 0xD68C,
	35634 - 11905: 0xD68D,
	35635 - 11905: 0xD68E,
	35636 - 11905: 0xD68F,
	35637 - 11905: 0xD690,
	35638 - 11905: 0xD691,
	35639 - 11905: 0xD692,
	35640 - 11905: 0xD693,
	35641 - 11905: 0xD694,
	35642 - 11905: 0xD695,
	35643 - 11905: 0xD696,
	35644 - 11905: 0xD697,
	35645 - 11905: 0xD698,
	35646 - 11905: 0xD699,
	35647 - 11905: 0xD69A,
	35648 - 11905: 0xD69B,
	35649 - 11905: 0xD69C,
	35650 - 11905: 0xD69D,
	35651 - 11905: 0xD69E,
	35652 - 11905: 0xD69F,
	35653 - 11905: 0xD6A0,
	35654 - 11905: 0xD740,
	35655 - 11905: 0xD741,
	35656 - 11905: 0xD742,
	35657 - 11905: 0xD743,
	35658 - 11905: 0xD744,
	35659 - 11905: 0xD745,
	35660 - 11905: 0xD746,
	35661 - 11905: 0xD747,
	35662 - 11905: 0xD748,
	35663 - 11905: 0xD749,
	35664 - 11905: 0xD74A,
	35665 - 11905: 0xD74B,
	35666 - 11905: 0xD74C,
	35667 - 11905: 0xD74D,
	35668 - 11905: 0xD74E,
	35669 - 11905: 0xD74F,
	35670 - 11905: 0xD750,
	35671 - 11905: 0xD751,
	35672 - 11905: 0xD752,
	35673 - 11905: 0xD753,
	35674 - 11905: 0xD754,
	35675 - 11905: 0xD755,
	35676 - 11905: 0xD756,
	35677 - 11905: 0xD757,
	35678 - 11905: 0xD758,
	35679 - 11905: 0xD759,
	35680 - 11905: 0xD75A,
	35681 - 11905: 0xD75B,
	35682 - 11905: 0xD75C,
	35683 - 11905: 0xD75D,
	35684 - 11905: 0xD75E,
	35685 - 11905: 0xD75F,
	35686 - 11905: 0xBEAF,
	35687 - 11905: 0xD760,
	35688 - 11905: 0xD761,
	35689 - 11905: 0xD762,
	35690 - 11905: 0xD763,
	35691 - 11905: 0xD764,
	35692 - 11905: 0xC6A9,
	35693 - 11905: 0xD765,
	35694 - 11905: 0xD766,
	35695 - 11905: 0xD767,
	35696 - 11905: 0xD768,
	35697 - 11905: 0xD769,
	35698 - 11905: 0xD76A,
	35699 - 11905: 0xD76B,
	35700 - 11905: 0xD76C,
	35701 - 11905: 0xD76D,
	35702 - 11905: 0xD76E,
	35703 - 11905: 0xD76F,
	35704 - 11905: 0xD770,
	35705 - 11905: 0xD771,
	35706 - 11905: 0xD772,
	35707 - 11905: 0xD773,
	35708 - 11905: 0xD774,
	35709 - 11905: 0xD775,
	35710 - 11905: 0xD776,
	35711 - 11905: 0xD777,
	35712 - 11905: 0xD778,
	35713 - 11905: 0xD779,
	35714 - 11905: 0xD77A,
	35715 - 11905: 0xD77B,
	35716 - 11905: 0xD77C,
	35717 - 11905: 0xD77D,
	35718 - 11905: 0xD77E,
	35719 - 11905: 0xD780,
	35720 - 11905: 0xD781,
	35721 - 11905: 0xD782,
	35722 - 11905: 0xD783,
	35723 - 11905: 0xD784,
	35724 - 11905: 0xD785,
	35725 - 11905: 0xD786,
	35726 - 11905: 0xD787,
	35727 - 11905: 0xD788,
	35728 - 11905: 0xD789,
	35729 - 11905: 0xD78A,
	35730 - 11905: 0xD78B,
	35731 - 11905: 0xD78C,
	35732 - 11905: 0xD78D,
	35733 - 11905: 0xD78E,
	35734 - 11905: 0xD78F,
	35735 - 11905: 0xD790,
	35736 - 11905: 0xD791,
	35737 - 11905: 0xD792,
	35738 - 11905: 0xD793,
	35739 - 11905: 0xD794,
	35740 - 11905: 0xD795,
	35741 - 11905: 0xD796,
	35742 - 11905: 0xD797,
	35743 - 11905: 0xD798,
	35744 - 11905: 0xDAA5,
	35745 - 11905: 0xBCC6,
	35746 - 11905: 0xB6A9,
	35747 - 11905: 0xB8BC,
	35748 - 11905: 0xC8CF,
	35749 - 11905: 0xBCA5,
	35750 - 11905: 0xDAA6,
	35751 - 11905: 0xDAA7,
	35752 - 11905: 0xCCD6,
	35753 - 11905: 0xC8C3,
	35754 - 11905: 0xDAA8,
	35755 - 11905: 0xC6FD,
	35756 - 11905: 0xD799,
	35757 - 11905: 0xD1B5,
	35758 - 11905: 0xD2E9,
	35759 - 11905: 0xD1B6,
	35760 - 11905: 0xBCC7,
	35761 - 11905: 0xD79A,
	35762 - 11905: 0xBDB2,
	35763 - 11905: 0xBBE4,
	35764 - 11905: 0xDAA9,
	35765 - 11905: 0xDAAA,
	35766 - 11905: 0xD1C8,
	35767 - 11905: 0xDAAB,
	35768 - 11905: 0xD0ED,
	35769 - 11905: 0xB6EF,
	35770 - 11905: 0xC2DB,
	35771 - 11905: 0xD79B,
	35772 - 11905: 0xCBCF,
	35773 - 11905: 0xB7ED,
	35774 - 11905: 0xC9E8,
	35775 - 11905: 0xB7C3,
	35776 - 11905: 0xBEF7,
	35777 - 11905: 0xD6A4,
	35778 - 11905: 0xDAAC,
	35779 - 11905: 0xDAAD,
	35780 - 11905: 0xC6C0,
	35781 - 11905: 0xD7E7,
	35782 - 11905: 0xCAB6,
	35783 - 11905: 0xD79C,
	35784 - 11905: 0xD5A9,
	35785 - 11905: 0xCBDF,
	35786 - 11905: 0xD5EF,
	35787 - 11905: 0xDAAE,
	35788 - 11905: 0xD6DF,
	35789 - 11905: 0xB4CA,
	35790 - 11905: 0xDAB0,
	35791 - 11905: 0xDAAF,
	35792 - 11905: 0xD79D,
	35793 - 11905: 0xD2EB,
	35794 - 11905: 0xDAB1,
	35795 - 11905: 0xDAB2,
	35796 - 11905: 0xDAB3,
	35797 - 11905: 0xCAD4,
	35798 - 11905: 0xDAB4,
	35799 - 11905: 0xCAAB,
	35800 - 11905: 0xDAB5,
	35801 - 11905: 0xDAB6,
	35802 - 11905: 0xB3CF,
	35803 - 11905: 0xD6EF,
	35804 - 11905: 0xDAB7,
	35805 - 11905: 0xBBB0,
	35806 - 11905: 0xB5AE,
	35807 - 11905: 0xDAB8,
	35808 - 11905: 0xDAB9,
	35809 - 11905: 0xB9EE,
	35810 - 11905: 0xD1AF,
	35811 - 11905: 0xD2E8,
	35812 - 11905: 0xDABA,
	35813 - 11905: 0xB8C3,
	35814 - 11905: 0xCFEA,
	35815 - 11905: 0xB2EF,
	35816 - 11905: 0xDABB,
	35817 - 11905: 0xDABC,
	35818 - 11905: 0xD79E,
	35819 - 11905: 0xBDEB,
	35820 - 11905: 0xCEDC,
	35821 - 11905: 0xD3EF,
	35822 - 11905: 0xDABD,
	35823 - 11905: 0xCEF3,
	35824 - 11905: 0xDABE,
	35825 - 11905: 0xD3D5,
	35826 - 11905: 0xBBE5,
	35827 - 11905: 0xDABF,
	35828 - 11905: 0xCBB5,
	35829 - 11905: 0xCBD0,
	35830 - 11905: 0xDAC0,
	35831 - 11905: 0xC7EB,
	35832 - 11905: 0xD6EE,
	35833 - 11905: 0xDAC1,
	35834 - 11905: 0xC5B5,
	35835 - 11905: 0xB6C1,
	35836 - 11905: 0xDAC2,
	35837 - 11905: 0xB7CC,
	35838 - 11905: 0xBFCE,
	35839 - 11905: 0xDAC3,
	35840 - 11905: 0xDAC4,
	35841 - 11905: 0xCBAD,
	35842 - 11905: 0xDAC5,
	35843 - 11905: 0xB5F7,
	35844 - 11905: 0xDAC6,
	35845 - 11905: 0xC1C2,
	35846 - 11905: 0xD7BB,
	35847 - 11905: 0xDAC7,
	35848 - 11905: 0xCCB8,
	35849 - 11905: 0xD79F,
	35850 - 11905: 0xD2EA,
	35851 - 11905: 0xC4B1,
	35852 - 11905: 0xDAC8,
	35853 - 11905: 0xB5FD,
	35854 - 11905: 0xBBD1,
	35855 - 11905: 0xDAC9,
	35856 - 11905: 0xD0B3,
	35857 - 11905: 0xDACA,
	35858 - 11905: 0xDACB,
	35859 - 11905: 0xCEBD,
	35860 - 11905: 0xDACC,
	35861 - 11905: 0xDACD,
	35862 - 11905: 0xDACE,
	35863 - 11905: 0xB2F7,
	35864 - 11905: 0xDAD1,
	35865 - 11905: 0xDACF,
	35866 - 11905: 0xD1E8,
	35867 - 11905: 0xDAD0,
	35868 - 11905: 0xC3D5,
	35869 - 11905: 0xDAD2,
	35870 - 11905: 0xD7A0,
	35871 - 11905: 0xDAD3,
	35872 - 11905: 0xDAD4,
	35873 - 11905: 0xDAD5,
	35874 - 11905: 0xD0BB,
	35875 - 11905: 0xD2A5,
	35876 - 11905: 0xB0F9,
	35877 - 11905: 0xDAD6,
	35878 - 11905: 0xC7AB,
	35879 - 11905: 0xDAD7,
	35880 - 11905: 0xBDF7,
	35881 - 11905: 0xC3A1,
	35882 - 11905: 0xDAD8,
	35883 - 11905: 0xDAD9,
	35884 - 11905: 0xC3FD,
	35885 - 11905: 0xCCB7,
	35886 - 11905: 0xDADA,
	35887 - 11905: 0xDADB,
	35888 - 11905: 0xC0BE,
	35889 - 11905: 0xC6D7,
	35890 - 11905: 0xDADC,
	35891 - 11905: 0xDADD,
	35892 - 11905: 0xC7B4,
	35893 - 11905: 0xDADE,
	35894 - 11905: 0xDADF,
	35895 - 11905: 0xB9C8,
	35896 - 11905: 0xD840,
	35897 - 11905: 0xD841,
	35898 - 11905: 0xD842,
	35899 - 11905: 0xD843,
	35900 - 11905: 0xD844,
	35901 - 11905: 0xD845,
	35902 - 11905: 0xD846,
	35903 - 11905: 0xD847,
	35904 - 11905: 0xD848,
	35905 - 11905: 0xBBED,
	35906 - 11905: 0xD849,
	35907 - 11905: 0xD84A,
	35908 - 11905: 0xD84B,
	35909 - 11905: 0xD84C,
	35910 - 11905: 0xB6B9,
	35911 - 11905: 0xF4F8,
	35912 - 11905: 0xD84D,
	35913 - 11905: 0xF4F9,
	35914 - 11905: 0xD84E,
	35915 - 11905: 0xD84F,
	35916 - 11905: 0xCDE3,
	35917 - 11905: 0xD850,
	35918 - 11905: 0xD851,
	35919 - 11905: 0xD852,
	35920 - 11905: 0xD853,
	35921 - 11905: 0xD854,
	35922 - 11905: 0xD855,
	35923 - 11905: 0xD856,
	35924 - 11905: 0xD857,
	35925 - 11905: 0xF5B9,
	35926 - 11905: 0xD858,
	35927 - 11905: 0xD859,
	35928 - 11905: 0xD85A,
	35929 - 11905: 0xD85B,
	35930 - 11905: 0xEBE0,
	35931 - 11905: 0xD85C,
	35932 - 11905: 0xD85D,
	35933 - 11905: 0xD85E,
	35934 - 11905: 0xD85F,
	35935 - 11905: 0xD860,
	35936 - 11905: 0xD861,
	35937 - 11905: 0xCFF3,
	35938 - 11905: 0xBBBF,
	35939 - 11905: 0xD862,
	35940 - 11905: 0xD863,
	35941 - 11905: 0xD864,
	35942 - 11905: 0xD865,
	35943 - 11905: 0xD866,
	35944 - 11905: 0xD867,
	35945 - 11905: 0xD868,
	35946 - 11905: 0xBAC0,
	35947 - 11905: 0xD4A5,
	35948 - 11905: 0xD869,
	35949 - 11905: 0xD86A,
	35950 - 11905: 0xD86B,
	35951 - 11905: 0xD86C,
	35952 - 11905: 0xD86D,
	35953 - 11905: 0xD86E,
	35954 - 11905: 0xD86F,
	35955 - 11905: 0xE1D9,
	35956 - 11905: 0xD870,
	35957 - 11905: 0xD871,
	35958 - 11905: 0xD872,
	35959 - 11905: 0xD873,
	35960 - 11905: 0xF5F4,
	35961 - 11905: 0xB1AA,
	35962 - 11905: 0xB2F2,
	35963 - 11905: 0xD874,
	35964 - 11905: 0xD875,
	35965 - 11905: 0xD876,
	35966 - 11905: 0xD877,
	35967 - 11905: 0xD878,
	35968 - 11905: 0xD879,
	35969 - 11905: 0xD87A,
	35970 - 11905: 0xF5F5,
	35971 - 11905: 0xD87B,
	35972 - 11905: 0xD87C,
	35973 - 11905: 0xF5F7,
	35974 - 11905: 0xD87D,
	35975 - 11905: 0xD87E,
	35976 - 11905: 0xD880,
	35977 - 11905: 0xBAD1,
	35978 - 11905: 0xF5F6,
	35979 - 11905: 0xD881,
	35980 - 11905: 0xC3B2,
	35981 - 11905: 0xD882,
	35982 - 11905: 0xD883,
	35983 - 11905: 0xD884,
	35984 - 11905: 0xD885,
	35985 - 11905: 0xD886,
	35986 - 11905: 0xD887,
	35987 - 11905: 0xD888,
	35988 - 11905: 0xF5F9,
	35989 - 11905: 0xD889,
	35990 - 11905: 0xD88A,
	35991 - 11905: 0xD88B,
	35992 - 11905: 0xF5F8,
	35993 - 11905: 0xD88C,
	35994 - 11905: 0xD88D,
	35995 - 11905: 0xD88E,
	35996 - 11905: 0xD88F,
	35997 - 11905: 0xD890,
	35998 - 11905: 0xD891,
	35999 - 11905: 0xD892,
	36000 - 11905: 0xD893,
	36001 - 11905: 0xD894,
	36002 - 11905: 0xD895,
	36003 - 11905: 0xD896,
	36004 - 11905: 0xD897,
	36005 - 11905: 0xD898,
	36006 - 11905: 0xD899,
	36007 - 11905: 0xD89A,
	36008 - 11905: 0xD89B,
	36009 - 11905: 0xD89C,
	36010 - 11905: 0xD89D,
	36011 - 11905: 0xD89E,
	36012 - 11905: 0xD89F,
	36013 - 11905: 0xD8A0,
	36014 - 11905: 0xD940,
	36015 - 11905: 0xD941,
	36016 - 11905: 0xD942,
	36017 - 11905: 0xD943,
	36018 - 11905: 0xD944,
	36019 - 11905: 0xD945,
	36020 - 11905: 0xD946,
	36021 - 11905: 0xD947,
	36022 - 11905: 0xD948,
	36023 - 11905: 0xD949,
	36024 - 11905: 0xD94A,
	36025 - 11905: 0xD94B,
	36026 - 11905: 0xD94C,
	36027 - 11905: 0xD94D,
	36028 - 11905: 0xD94E,
	36029 - 11905: 0xD94F,
	36030 - 11905: 0xD950,
	36031 - 11905: 0xD951,
	36032 - 11905: 0xD952,
	36033 - 11905: 0xD953,
	36034 - 11905: 0xD954,
	36035 - 11905: 0xD955,
	36036 - 11905: 0xD956,
	36037 - 11905: 0xD957,
	36038 - 11905: 0xD958,
	36039 - 11905: 0xD959,
	36040 - 11905: 0xD95A,
	36041 - 11905: 0xD95B,
	36042 - 11905: 0xD95C,
	36043 - 11905: 0xD95D,
	36044 - 11905: 0xD95E,
	36045 - 11905: 0xD95F,
	36046 - 11905: 0xD960,
	36047 - 11905: 0xD961,
	36048 - 11905: 0xD962,
	36049 - 11905: 0xD963,
	36050 - 11905: 0xD964,
	36051 - 11905: 0xD965,
	36052 - 11905: 0xD966,
	36053 - 11905: 0xD967,
	36054 - 11905: 0xD968,
	36055 - 11905: 0xD969,
	36056 - 11905: 0xD96A,
	36057 - 11905: 0xD96B,
	36058 - 11905: 0xD96C,
	36059 - 11905: 0xD96D,
	36060 - 11905: 0xD96E,
	36061 - 11905: 0xD96F,
	36062 - 11905: 0xD970,
	36063 - 11905: 0xD971,
	36064 - 11905: 0xD972,
	36065 - 11905: 0xD973,
	36066 - 11905: 0xD974,
	36067 - 11905: 0xD975,
	36068 - 11905: 0xD976,
	36069 - 11905: 0xD977,
	36070 - 11905: 0xD978,
	36071 - 11905: 0xD979,
	36072 - 11905: 0xD97A,
	36073 - 11905: 0xD97B,
	36074 - 11905: 0xD97C,
	36075 - 11905: 0xD97D,
	36076 - 11905: 0xD97E,
	36077 - 11905: 0xD980,
	36078 - 11905: 0xD981,
	36079 - 11905: 0xD982,
	36080 - 11905: 0xD983,
	36081 - 11905: 0xD984,
	36082 - 11905: 0xD985,
	36083 - 11905: 0xD986,
	36084 - 11905: 0xD987,
	36085 - 11905: 0xD988,
	36086 - 11905: 0xD989,
	36087 - 11905: 0xD98A,
	36088 - 11905: 0xD98B,
	36089 - 11905: 0xD98C,
	36090 - 11905: 0xD98D,
	36091 - 11905: 0xD98E,
	36092 - 11905: 0xD98F,
	36093 - 11905: 0xD990,
	36094 - 11905: 0xD991,
	36095 - 11905: 0xD992,
	36096 - 11905: 0xD993,
	36097 - 11905: 0xD994,
	36098 - 11905: 0xD995,
	36099 - 11905: 0xD996,
	36100 - 11905: 0xD997,
	36101 - 11905: 0xD998,
	36102 - 11905: 0xD999,
	36103 - 11905: 0xD99A,
	36104 - 11905: 0xD99B,
	36105 - 11905: 0xD99C,
	36106 - 11905: 0xD99D,
	36107 - 11905: 0xD99E,
	36108 - 11905: 0xD99F,
	36109 - 11905: 0xD9A0,
	36110 - 11905: 0xDA40,
	36111 - 11905: 0xDA41,
	36112 - 11905: 0xDA42,
	36113 - 11905: 0xDA43,
	36114 - 11905: 0xDA44,
	36115 - 11905: 0xDA45,
	36116 - 11905: 0xDA46,
	36117 - 11905: 0xDA47,
	36118 - 11905: 0xDA48,
	36119 - 11905: 0xDA49,
	36120 - 11905: 0xDA4A,
	36121 - 11905: 0xDA4B,
	36122 - 11905: 0xDA4C,
	36123 - 11905: 0xDA4D,
	36124 - 11905: 0xDA4E,
	36125 - 11905: 0xB1B4,
	36126 - 11905: 0xD5EA,
	36127 - 11905: 0xB8BA,
	36128 - 11905: 0xDA4F,
	36129 - 11905: 0xB9B1,
	36130 - 11905: 0xB2C6,
	36131 - 11905: 0xD4F0,
	36132 - 11905: 0xCFCD,
	36133 - 11905: 0xB0DC,
	36134 - 11905: 0xD5CB,
	36135 - 11905: 0xBBF5,
	36136 - 11905: 0xD6CA,
	36137 - 11905: 0xB7B7,
	36138 - 11905: 0xCCB0,
	36139 - 11905: 0xC6B6,
	36140 - 11905: 0xB1E1,
	36141 - 11905: 0xB9BA,
	36142 - 11905: 0xD6FC,
	36143 - 11905: 0xB9E1,
	36144 - 11905: 0xB7A1,
	36145 - 11905: 0xBCFA,
	36146 - 11905: 0xEADA,
	36147 - 11905: 0xEADB,
	36148 - 11905: 0xCCF9,
	36149 - 11905: 0xB9F3,
	36150 - 11905: 0xEADC,
	36151 - 11905: 0xB4FB,
	36152 - 11905: 0xC3B3,
	36153 - 11905: 0xB7D1,
	36154 - 11905: 0xBAD8,
	36155 - 11905: 0xEADD,
	36156 - 11905: 0xD4F4,
	36157 - 11905: 0xEADE,
	36158 - 11905: 0xBCD6,
	36159 - 11905: 0xBBDF,
	36160 - 11905: 0xEADF,
	36161 - 11905: 0xC1DE,
	36162 - 11905: 0xC2B8,
	36163 - 11905: 0xD4DF,
	36164 - 11905: 0xD7CA,
	36165 - 11905: 0xEAE0,
	36166 - 11905: 0xEAE1,
	36167 - 11905: 0xEAE4,
	36168 - 11905: 0xEAE2,
	36169 - 11905: 0xEAE3,
	36170 - 11905: 0xC9DE,
	36171 - 11905: 0xB8B3,
	36172 - 11905: 0xB6C4,
	36173 - 11905: 0xEAE5,
	36174 - 11905: 0xCAEA,
	36175 - 11905: 0xC9CD,
	36176 - 11905: 0xB4CD,
	36177 - 11905: 0xDA50,
	36178 - 11905: 0xDA51,
	36179 - 11905: 0xE2D9,
	36180 - 11905: 0xC5E2,
	36181 - 11905: 0xEAE6,
	36182 - 11905: 0xC0B5,
	36183 - 11905: 0xDA52,
	36184 - 11905: 0xD7B8,
	36185 - 11905: 0xEAE7,
	36186 - 11905: 0xD7AC,
	36187 - 11905: 0xC8FC,
	36188 - 11905: 0xD8D3,
	36189 - 11905: 0xD8CD,
	36190 - 11905: 0xD4DE,
	36191 - 11905: 0xDA53,
	36192 - 11905: 0xD4F9,
	36193 - 11905: 0xC9C4,
	36194 - 11905: 0xD3AE,
	36195 - 11905: 0xB8D3,
	36196 - 11905: 0xB3E0,
	36197 - 11905: 0xDA54,
	36198 - 11905: 0xC9E2,
	36199 - 11905: 0xF4F6,
	36200 - 11905: 0xDA55,
	36201 - 11905: 0xDA56,
	36202 - 11905: 0xDA57,
	36203 - 11905: 0xBAD5,
	36204 - 11905: 0xDA58,
	36205 - 11905: 0xF4F7,
	36206 - 11905: 0xDA59,
	36207 - 11905: 0xDA5A,
	36208 - 11905: 0xD7DF,
	36209 - 11905: 0xDA5B,
	36210 - 11905: 0xDA5C,
	36211 - 11905: 0xF4F1,
	36212 - 11905: 0xB8B0,
	36213 - 11905: 0xD5D4,
	36214 - 11905: 0xB8CF,
	36215 - 11905: 0xC6F0,
	36216 - 11905: 0xDA5D,
	36217 - 11905: 0xDA5E,
	36218 - 11905: 0xDA5F,
	36219 - 11905: 0xDA60,
	36220 - 11905: 0xDA61,
	36221 - 11905: 0xDA62,
	36222 - 11905: 0xDA63,
	36223 - 11905: 0xDA64,
	36224 - 11905: 0xDA65,
	36225 - 11905: 0xB3C3,
	36226 - 11905: 0xDA66,
	36227 - 11905: 0xDA67,
	36228 - 11905: 0xF4F2,
	36229 - 11905: 0xB3AC,
	36230 - 11905: 0xDA68,
	36231 - 11905: 0xDA69,
	36232 - 11905: 0xDA6A,
	36233 - 11905: 0xDA6B,
	36234 - 11905: 0xD4BD,
	36235 - 11905: 0xC7F7,
	36236 - 11905: 0xDA6C,
	36237 - 11905: 0xDA6D,
	36238 - 11905: 0xDA6E,
	36239 - 11905: 0xDA6F,
	36240 - 11905: 0xDA70,
	36241 - 11905: 0xF4F4,
	36242 - 11905: 0xDA71,
	36243 - 11905: 0xDA72,
	36244 - 11905: 0xF4F3,
	36245 - 11905: 0xDA73,
	36246 - 11905: 0xDA74,
	36247 - 11905: 0xDA75,
	36248 - 11905: 0xDA76,
	36249 - 11905: 0xDA77,
	36250 - 11905: 0xDA78,
	36251 - 11905: 0xDA79,
	36252 - 11905: 0xDA7A,
	36253 - 11905: 0xDA7B,
	36254 - 11905: 0xDA7C,
	36255 - 11905: 0xCCCB,
	36256 - 11905: 0xDA7D,
	36257 - 11905: 0xDA7E,
	36258 - 11905: 0xDA80,
	36259 - 11905: 0xC8A4,
	36260 - 11905: 0xDA81,
	36261 - 11905: 0xDA82,
	36262 - 11905: 0xDA83,
	36263 - 11905: 0xDA84,
	36264 - 11905: 0xDA85,
	36265 - 11905: 0xDA86,
	36266 - 11905: 0xDA87,
	36267 - 11905: 0xDA88,
	36268 - 11905: 0xDA89,
	36269 - 11905: 0xDA8A,
	36270 - 11905: 0xDA8B,
	36271 - 11905: 0xDA8C,
	36272 - 11905: 0xDA8D,
	36273 - 11905: 0xF4F5,
	36274 - 11905: 0xDA8E,
	36275 - 11905: 0xD7E3,
	36276 - 11905: 0xC5BF,
	36277 - 11905: 0xF5C0,
	36278 - 11905: 0xDA8F,
	36279 - 11905: 0xDA90,
	36280 - 11905: 0xF5BB,
	36281 - 11905: 0xDA91,
	36282 - 11905: 0xF5C3,
	36283 - 11905: 0xDA92,
	36284 - 11905: 0xF5C2,
	36285 - 11905: 0xDA93,
	36286 - 11905: 0xD6BA,
	36287 - 11905: 0xF5C1,
	36288 - 11905: 0xDA94,
	36289 - 11905: 0xDA95,
	36290 - 11905: 0xDA96,
	36291 - 11905: 0xD4BE,
	36292 - 11905: 0xF5C4,
	36293 - 11905: 0xDA97,
	36294 - 11905: 0xF5CC,
	36295 - 11905: 0xDA98,
	36296 - 11905: 0xDA99,
	36297 - 11905: 0xDA9A,
	36298 - 11905: 0xDA9B,
	36299 - 11905: 0xB0CF,
	36300 - 11905: 0xB5F8,
	36301 - 11905: 0xDA9C,
	36302 - 11905: 0xF5C9,
	36303 - 11905: 0xF5CA,
	36304 - 11905: 0xDA9D,
	36305 - 11905: 0xC5DC,
	36306 - 11905: 0xDA9E,
	36307 - 11905: 0xDA9F,
	36308 - 11905: 0xDAA0,
	36309 - 11905: 0xDB40,
	36310 - 11905: 0xF5C5,
	36311 - 11905: 0xF5C6,
	36312 - 11905: 0xDB41,
	36313 - 11905: 0xDB42,
	36314 - 11905: 0xF5C7,
	36315 - 11905: 0xF5CB,
	36316 - 11905: 0xDB43,
	36317 - 11905: 0xBEE0,
	36318 - 11905: 0xF5C8,
	36319 - 11905: 0xB8FA,
	36320 - 11905: 0xDB44,
	36321 - 11905: 0xDB45,
	36322 - 11905: 0xDB46,
	36323 - 11905: 0xF5D0,
	36324 - 11905: 0xF5D3,
	36325 - 11905: 0xDB47,
	36326 - 11905: 0xDB48,
	36327 - 11905: 0xDB49,
	36328 - 11905: 0xBFE7,
	36329 - 11905: 0xDB4A,
	36330 - 11905: 0xB9F2,
	36331 - 11905: 0xF5BC,
	36332 - 11905: 0xF5CD,
	36333 - 11905: 0xDB4B,
	36334 - 11905: 0xDB4C,
	36335 - 11905: 0xC2B7,
	36336 - 11905: 0xDB4D,
	36337 - 11905: 0xDB4E,
	36338 - 11905: 0xDB4F,
	36339 - 11905: 0xCCF8,
	36340 - 11905: 0xDB50,
	36341 - 11905: 0xBCF9,
	36342 - 11905: 0xDB51,
	36343 - 11905: 0xF5CE,
	36344 - 11905: 0xF5CF,
	36345 - 11905: 0xF5D1,
	36346 - 11905: 0xB6E5,
	36347 - 11905: 0xF5D2,
	36348 - 11905: 0xDB52,
	36349 - 11905: 0xF5D5,
	36350 - 11905: 0xDB53,
	36351 - 11905: 0xDB54,
	36352 - 11905: 0xDB55,
	36353 - 11905: 0xDB56,
	36354 - 11905: 0xDB57,
	36355 - 11905: 0xDB58,
	36356 - 11905: 0xDB59,
	36357 - 11905: 0xF5BD,
	36358 - 11905: 0xDB5A,
	36359 - 11905: 0xDB5B,
	36360 - 11905: 0xDB5C,
	36361 - 11905: 0xF5D4,
	36362 - 11905: 0xD3BB,
	36363 - 11905: 0xDB5D,
	36364 - 11905: 0xB3EC,
	36365 - 11905: 0xDB5E,
	36366 - 11905: 0xDB5F,
	36367 - 11905: 0xCCA4,
	36368 - 11905: 0xDB60,
	36369 - 11905: 0xDB61,
	36370 - 11905: 0xDB62,
	36371 - 11905: 0xDB63,
	36372 - 11905: 0xF5D6,
	36373 - 11905: 0xDB64,
	36374 - 11905: 0xDB65,
	36375 - 11905: 0xDB66,
	36376 - 11905: 0xDB67,
	36377 - 11905: 0xDB68,
	36378 - 11905: 0xDB69,
	36379 - 11905: 0xDB6A,
	36380 - 11905: 0xDB6B,
	36381 - 11905: 0xF5D7,
	36382 - 11905: 0xBEE1,
	36383 - 11905: 0xF5D8,
	36384 - 11905: 0xDB6C,
	36385 - 11905: 0xDB6D,
	36386 - 11905: 0xCCDF,
	36387 - 11905: 0xF5DB,
	36388 - 11905: 0xDB6E,
	36389 - 11905: 0xDB6F,
	36390 - 11905: 0xDB70,
	36391 - 11905: 0xDB71,
	36392 - 11905: 0xDB72,
	36393 - 11905: 0xB2C8,
	36394 - 11905: 0xD7D9,
	36395 - 11905: 0xDB73,
	36396 - 11905: 0xF5D9,
	36397 - 11905: 0xDB74,
	36398 - 11905: 0xF5DA,
	36399 - 11905: 0xF5DC,
	36400 - 11905: 0xDB75,
	36401 - 11905: 0xF5E2,
	36402 - 11905: 0xDB76,
	36403 - 11905: 0xDB77,
	36404 - 11905: 0xDB78,
	36405 - 11905: 0xF5E0,
	36406 - 11905: 0xDB79,
	36407 - 11905: 0xDB7A,
	36408 - 11905: 0xDB7B,
	36409 - 11905: 0xF5DF,
	36410 - 11905: 0xF5DD,
	36411 - 11905: 0xDB7C,
	36412 - 11905: 0xDB7D,
	36413 - 11905: 0xF5E1,
	36414 - 11905: 0xDB7E,
	36415 - 11905: 0xDB80,
	36416 - 11905: 0xF5DE,
	36417 - 11905: 0xF5E4,
	36418 - 11905: 0xF5E5,
	36419 - 11905: 0xDB81,
	36420 - 11905: 0xCCE3,
	36421 - 11905: 0xDB82,
	36422 - 11905: 0xDB83,
	36423 - 11905: 0xE5BF,
	36424 - 11905: 0xB5B8,
	36425 - 11905: 0xF5E3,
	36426 - 11905: 0xF5E8,
	36427 - 11905: 0xCCA3,
	36428 - 11905: 0xDB84,
	36429 - 11905: 0xDB85,
	36430 - 11905: 0xDB86,
	36431 - 11905: 0xDB87,
	36432 - 11905: 0xDB88,
	36433 - 11905: 0xF5E6,
	36434 - 11905: 0xF5E7,
	36435 - 11905: 0xDB89,
	36436 - 11905: 0xDB8A,
	36437 - 11905: 0xDB8B,
	36438 - 11905: 0xDB8C,
	36439 - 11905: 0xDB8D,
	36440 - 11905: 0xDB8E,
	36441 - 11905: 0xF5BE,
	36442 - 11905: 0xDB8F,
	36443 - 11905: 0xDB90,
	36444 - 11905: 0xDB91,
	36445 - 11905: 0xDB92,
	36446 - 11905: 0xDB93,
	36447 - 11905: 0xDB94,
	36448 - 11905: 0xDB95,
	36449 - 11905: 0xDB96,
	36450 - 11905: 0xDB97,
	36451 - 11905: 0xDB98,
	36452 - 11905: 0xDB99,
	36453 - 11905: 0xDB9A,
	36454 - 11905: 0xB1C4,
	36455 - 11905: 0xDB9B,
	36456 - 11905: 0xDB9C,
	36457 - 11905: 0xF5BF,
	36458 - 11905: 0xDB9D,
	36459 - 11905: 0xDB9E,
	36460 - 11905: 0xB5C5,
	36461 - 11905: 0xB2E4,
	36462 - 11905: 0xDB9F,
	36463 - 11905: 0xF5EC,
	36464 - 11905: 0xF5E9,
	36465 - 11905: 0xDBA0,
	36466 - 11905: 0xB6D7,
	36467 - 11905: 0xDC40,
	36468 - 11905: 0xF5ED,
	36469 - 11905: 0xDC41,
	36470 - 11905: 0xF5EA,
	36471 - 11905: 0xDC42,
	36472 - 11905: 0xDC43,
	36473 - 11905: 0xDC44,
	36474 - 11905: 0xDC45,
	36475 - 11905: 0xDC46,
	36476 - 11905: 0xF5EB,
	36477 - 11905: 0xDC47,
	36478 - 11905: 0xDC48,
	36479 - 11905: 0xB4DA,
	36480 - 11905: 0xDC49,
	36481 - 11905: 0xD4EA,
	36482 - 11905: 0xDC4A,
	36483 - 11905: 0xDC4B,
	36484 - 11905: 0xDC4C,
	36485 - 11905: 0xF5EE,
	36486 - 11905: 0xDC4D,
	36487 - 11905: 0xB3F9,
	36488 - 11905: 0xDC4E,
	36489 - 11905: 0xDC4F,
	36490 - 11905: 0xDC50,
	36491 - 11905: 0xDC51,
	36492 - 11905: 0xDC52,
	36493 - 11905: 0xDC53,
	36494 - 11905: 0xDC54,
	36495 - 11905: 0xF5EF,
	36496 - 11905: 0xF5F1,
	36497 - 11905: 0xDC55,
	36498 - 11905: 0xDC56,
	36499 - 11905: 0xDC57,
	36500 - 11905: 0xF5F0,
	36501 - 11905: 0xDC58,
	36502 - 11905: 0xDC59,
	36503 - 11905: 0xDC5A,
	36504 - 11905: 0xDC5B,
	36505 - 11905: 0xDC5C,
	36506 - 11905: 0xDC5D,
	36507 - 11905: 0xDC5E,
	36508 - 11905: 0xF5F2,
	36509 - 11905: 0xDC5F,
	36510 - 11905: 0xF5F3,
	36511 - 11905: 0xDC60,
	36512 - 11905: 0xDC61,
	36513 - 11905: 0xDC62,
	36514 - 11905: 0xDC63,
	36515 - 11905: 0xDC64,
	36516 - 11905: 0xDC65,
	36517 - 11905: 0xDC66,
	36518 - 11905: 0xDC67,
	36519 - 11905: 0xDC68,
	36520 - 11905: 0xDC69,
	36521 - 11905: 0xDC6A,
	36522 - 11905: 0xDC6B,
	36523 - 11905: 0xC9ED,
	36524 - 11905: 0xB9AA,
	36525 - 11905: 0xDC6C,
	36526 - 11905: 0xDC6D,
	36527 - 11905: 0xC7FB,
	36528 - 11905: 0xDC6E,
	36529 - 11905: 0xDC6F,
	36530 - 11905: 0xB6E3,
	36531 - 11905: 0xDC70,
	36532 - 11905: 0xDC71,
	36533 - 11905: 0xDC72,
	36534 - 11905: 0xDC73,
	36535 - 11905: 0xDC74,
	36536 - 11905: 0xDC75,
	36537 - 11905: 0xDC76,
	36538 - 11905: 0xCCC9,
	36539 - 11905: 0xDC77,
	36540 - 11905: 0xDC78,
	36541 - 11905: 0xDC79,
	36542 - 11905: 0xDC7A,
	36543 - 11905: 0xDC7B,
	36544 - 11905: 0xDC7C,
	36545 - 11905: 0xDC7D,
	36546 - 11905: 0xDC7E,
	36547 - 11905: 0xDC80,
	36548 - 11905: 0xDC81,
	36549 - 11905: 0xDC82,
	36550 - 11905: 0xDC83,
	36551 - 11905: 0xDC84,
	36552 - 11905: 0xDC85,
	36553 - 11905: 0xDC86,
	36554 - 11905: 0xDC87,
	36555 - 11905: 0xDC88,
	36556 - 11905: 0xDC89,
	36557 - 11905: 0xDC8A,
	36558 - 11905: 0xEAA6,
	36559 - 11905: 0xDC8B,
	36560 - 11905: 0xDC8C,
	36561 - 11905: 0xDC8D,
	36562 - 11905: 0xDC8E,
	36563 - 11905: 0xDC8F,
	36564 - 11905: 0xDC90,
	36565 - 11905: 0xDC91,
	36566 - 11905: 0xDC92,
	36567 - 11905: 0xDC93,
	36568 - 11905: 0xDC94,
	36569 - 11905: 0xDC95,
	36570 - 11905: 0xDC96,
	36571 - 11905: 0xDC97,
	36572 - 11905: 0xDC98,
	36573 - 11905: 0xDC99,
	36574 - 11905: 0xDC9A,
	36575 - 11905: 0xDC9B,
	36576 - 11905: 0xDC9C,
	36577 - 11905: 0xDC9D,
	36578 - 11905: 0xDC9E,
	36579 - 11905: 0xDC9F,
	36580 - 11905: 0xDCA0,
	36581 - 11905: 0xDD40,
	36582 - 11905: 0xDD41,
	36583 - 11905: 0xDD42,
	36584 - 11905: 0xDD43,
	36585 - 11905: 0xDD44,
	36586 - 11905: 0xDD45,
	36587 - 11905: 0xDD46,
	36588 - 11905: 0xDD47,
	36589 - 11905: 0xDD48,
	36590 - 11905: 0xDD49,
	36591 - 11905: 0xDD4A,
	36592 - 11905: 0xDD4B,
	36593 - 11905: 0xDD4C,
	36594 - 11905: 0xDD4D,
	36595 - 11905: 0xDD4E,
	36596 - 11905: 0xDD4F,
	36597 - 11905: 0xDD50,
	36598 - 11905: 0xDD51,
	36599 - 11905: 0xDD52,
	36600 - 11905: 0xDD53,
	36601 - 11905: 0xDD54,
	36602 - 11905: 0xDD55,
	36603 - 11905: 0xDD56,
	36604 - 11905: 0xDD57,
	36605 - 11905: 0xDD58,
	36606 - 11905: 0xDD59,
	36607 - 11905: 0xDD5A,
	36608 - 11905: 0xDD5B,
	36609 - 11905: 0xDD5C,
	36610 - 11905: 0xDD5D,
	36611 - 11905: 0xDD5E,
	36612 - 11905: 0xDD5F,
	36613 - 11905: 0xDD60,
	36614 - 11905: 0xDD61,
	36615 - 11905: 0xDD62,
	36616 - 11905: 0xDD63,
	36617 - 11905: 0xDD64,
	36618 - 11905: 0xDD65,
	36619 - 11905: 0xDD66,
	36620 - 11905: 0xDD67,
	36621 - 11905: 0xDD68,
	36622 - 11905: 0xDD69,
	36623 - 11905: 0xDD6A,
	36624 - 11905: 0xDD6B,
	36625 - 11905: 0xDD6C,
	36626 - 11905: 0xDD6D,
	36627 - 11905: 0xDD6E,
	36628 - 11905: 0xDD6F,
	36629 - 11905: 0xDD70,
	36630 - 11905: 0xDD71,
	36631 - 11905: 0xDD72,
	36632 - 11905: 0xDD73,
	36633 - 11905: 0xDD74,
	36634 - 11905: 0xDD75,
	36635 - 11905: 0xDD76,
	36636 - 11905: 0xDD77,
	36637 - 11905: 0xDD78,
	36638 - 11905: 0xDD79,
	36639 - 11905: 0xDD7A,
	36640 - 11905: 0xDD7B,
	36641 - 11905: 0xDD7C,
	36642 - 11905: 0xDD7D,
	36643 - 11905: 0xDD7E,
	36644 - 11905: 0xDD80,
	36645 - 11905: 0xDD81,
	36646 - 11905: 0xDD82,
	36647 - 11905: 0xDD83,
	36648 - 11905: 0xDD84,
	36649 - 11905: 0xDD85,
	36650 - 11905: 0xDD86,
	36651 - 11905: 0xDD87,
	36652 - 11905: 0xDD88,
	36653 - 11905: 0xDD89,
	36654 - 11905: 0xDD8A,
	36655 - 11905: 0xDD8B,
	36656 - 11905: 0xDD8C,
	36657 - 11905: 0xDD8D,
	36658 - 11905: 0xDD8E,
	36659 - 11905: 0xDD8F,
	36660 - 11905: 0xDD90,
	36661 - 11905: 0xDD91,
	36662 - 11905: 0xDD92,
	36663 - 11905: 0xDD93,
	36664 - 11905: 0xDD94,
	36665 - 11905: 0xDD95,
	36666 - 11905: 0xDD96,
	36667 - 11905: 0xDD97,
	36668 - 11905: 0xDD98,
	36669 - 11905: 0xDD99,
	36670 - 11905: 0xDD9A,
	36671 - 11905: 0xDD9B,
	36672 - 11905: 0xDD9C,
	36673 - 11905: 0xDD9D,
	36674 - 11905: 0xDD9E,
	36675 - 11905: 0xDD9F,
	36676 - 11905: 0xDDA0,
	36677 - 11905: 0xDE40,
	36678 - 11905: 0xDE41,
	36679 - 11905: 0xDE42,
	36680 - 11905: 0xDE43,
	36681 - 11905: 0xDE44,
	36682 - 11905: 0xDE45,
	36683 - 11905: 0xDE46,
	36684 - 11905: 0xDE47,
	36685 - 11905: 0xDE48,
	36686 - 11905: 0xDE49,
	36687 - 11905: 0xDE4A,
	36688 - 11905: 0xDE4B,
	36689 - 11905: 0xDE4C,
	36690 - 11905: 0xDE4D,
	36691 - 11905: 0xDE4E,
	36692 - 11905: 0xDE4F,
	36693 - 11905: 0xDE50,
	36694 - 11905: 0xDE51,
	36695 - 11905: 0xDE52,
	36696 - 11905: 0xDE53,
	36697 - 11905: 0xDE54,
	36698 - 11905: 0xDE55,
	36699 - 11905: 0xDE56,
	36700 - 11905: 0xDE57,
	36701 - 11905: 0xDE58,
	36702 - 11905: 0xDE59,
	36703 - 11905: 0xDE5A,
	36704 - 11905: 0xDE5B,
	36705 - 11905: 0xDE5C,
	36706 - 11905: 0xDE5D,
	36707 - 11905: 0xDE5E,
	36708 - 11905: 0xDE5F,
	36709 - 11905: 0xDE60,
	36710 - 11905: 0xB3B5,
	36711 - 11905: 0xD4FE,
	36712 - 11905: 0xB9EC,
	36713 - 11905: 0xD0F9,
	36714 - 11905: 0xDE61,
	36715 - 11905: 0xE9ED,
	36716 - 11905: 0xD7AA,
	36717 - 11905: 0xE9EE,
	36718 - 11905: 0xC2D6,
	36719 - 11905: 0xC8ED,
	36720 - 11905: 0xBAE4,
	36721 - 11905: 0xE9EF,
	36722 - 11905: 0xE9F0,
	36723 - 11905: 0xE9F1,
	36724 - 11905: 0xD6E1,
	36725 - 11905: 0xE9F2,
	36726 - 11905: 0xE9F3,
	36727 - 11905: 0xE9F5,
	36728 - 11905: 0xE9F4,
	36729 - 11905: 0xE9F6,
	36730 - 11905: 0xE9F7,
	36731 - 11905: 0xC7E1,
	36732 - 11905: 0xE9F8,
	36733 - 11905: 0xD4D8,
	36734 - 11905: 0xE9F9,
	36735 - 11905: 0xBDCE,
	36736 - 11905: 0xDE62,
	36737 - 11905: 0xE9FA,
	36738 - 11905: 0xE9FB,
	36739 - 11905: 0xBDCF,
	36740 - 11905: 0xE9FC,
	36741 - 11905: 0xB8A8,
	36742 - 11905: 0xC1BE,
	36743 - 11905: 0xE9FD,
	36744 - 11905: 0xB1B2,
	36745 - 11905: 0xBBD4,
	36746 - 11905: 0xB9F5,
	36747 - 11905: 0xE9FE,
	36748 - 11905: 0xDE63,
	36749 - 11905: 0xEAA1,
	36750 - 11905: 0xEAA2,
	36751 - 11905: 0xEAA3,
	36752 - 11905: 0xB7F8,
	36753 - 11905: 0xBCAD,
	36754 - 11905: 0xDE64,
	36755 - 11905: 0xCAE4,
	36756 - 11905: 0xE0CE,
	36757 - 11905: 0xD4AF,
	36758 - 11905: 0xCFBD,
	36759 - 11905: 0xD5B7,
	36760 - 11905: 0xEAA4,
	36761 - 11905: 0xD5DE,
	36762 - 11905: 0xEAA5,
	36763 - 11905: 0xD0C1,
	36764 - 11905: 0xB9BC,
	36765 - 11905: 0xDE65,
	36766 - 11905: 0xB4C7,
	36767 - 11905: 0xB1D9,
	36768 - 11905: 0xDE66,
	36769 - 11905: 0xDE67,
	36770 - 11905: 0xDE68,
	36771 - 11905: 0xC0B1,
	36772 - 11905: 0xDE69,
	36773 - 11905: 0xDE6A,
	36774 - 11905: 0xDE6B,
	36775 - 11905: 0xDE6C,
	36776 - 11905: 0xB1E6,
	36777 - 11905: 0xB1E7,
	36778 - 11905: 0xDE6D,
	36779 - 11905: 0xB1E8,
	36780 - 11905: 0xDE6E,
	36781 - 11905: 0xDE6F,
	36782 - 11905: 0xDE70,
	36783 - 11905: 0xDE71,
	36784 - 11905: 0xB3BD,
	36785 - 11905: 0xC8E8,
	36786 - 11905: 0xDE72,
	36787 - 11905: 0xDE73,
	36788 - 11905: 0xDE74,
	36789 - 11905: 0xDE75,
	36790 - 11905: 0xE5C1,
	36791 - 11905: 0xDE76,
	36792 - 11905: 0xDE77,
	36793 - 11905: 0xB1DF,
	36794 - 11905: 0xDE78,
	36795 - 11905: 0xDE79,
	36796 - 11905: 0xDE7A,
	36797 - 11905: 0xC1C9,
	36798 - 11905: 0xB4EF,
	36799 - 11905: 0xDE7B,
	36800 - 11905: 0xDE7C,
	36801 - 11905: 0xC7A8,
	36802 - 11905: 0xD3D8,
	36803 - 11905: 0xDE7D,
	36804 - 11905: 0xC6F9,
	36805 - 11905: 0xD1B8,
	36806 - 11905: 0xDE7E,
	36807 - 11905: 0xB9FD,
	36808 - 11905: 0xC2F5,
	36809 - 11905: 0xDE80,
	36810 - 11905: 0xDE81,
	36811 - 11905: 0xDE82,
	36812 - 11905: 0xDE83,
	36813 - 11905: 0xDE84,
	36814 - 11905: 0xD3AD,
	36815 - 11905: 0xDE85,
	36816 - 11905: 0xD4CB,
	36817 - 11905: 0xBDFC,
	36818 - 11905: 0xDE86,
	36819 - 11905: 0xE5C2,
	36820 - 11905: 0xB7B5,
	36821 - 11905: 0xE5C3,
	36822 - 11905: 0xDE87,
	36823 - 11905: 0xDE88,
	36824 - 11905: 0xBBB9,
	36825 - 11905: 0xD5E2,
	36826 - 11905: 0xDE89,
	36827 - 11905: 0xBDF8,
	36828 - 11905: 0xD4B6,
	36829 - 11905: 0xCEA5,
	36830 - 11905: 0xC1AC,
	36831 - 11905: 0xB3D9,
	36832 - 11905: 0xDE8A,
	36833 - 11905: 0xDE8B,
	36834 - 11905: 0xCCF6,
	36835 - 11905: 0xDE8C,
	36836 - 11905: 0xE5C6,
	36837 - 11905: 0xE5C4,
	36838 - 11905: 0xE5C8,
	36839 - 11905: 0xDE8D,
	36840 - 11905: 0xE5CA,
	36841 - 11905: 0xE5C7,
	36842 - 11905: 0xB5CF,
	36843 - 11905: 0xC6C8,
	36844 - 11905: 0xDE8E,
	36845 - 11905: 0xB5FC,
	36846 - 11905: 0xE5C5,
	36847 - 11905: 0xDE8F,
	36848 - 11905: 0xCAF6,
	36849 - 11905: 0xDE90,
	36850 - 11905: 0xDE91,
	36851 - 11905: 0xE5C9,
	36852 - 11905: 0xDE92,
	36853 - 11905: 0xDE93,
	36854 - 11905: 0xDE94,
	36855 - 11905: 0xC3D4,
	36856 - 11905: 0xB1C5,
	36857 - 11905: 0xBCA3,
	36858 - 11905: 0xDE95,
	36859 - 11905: 0xDE96,
	36860 - 11905: 0xDE97,
	36861 - 11905: 0xD7B7,
	36862 - 11905: 0xDE98,
	36863 - 11905: 0xDE99,
	36864 - 11905: 0xCDCB,
	36865 - 11905: 0xCBCD,
	36866 - 11905: 0xCACA,
	36867 - 11905: 0xCCD3,
	36868 - 11905: 0xE5CC,
	36869 - 11905: 0xE5CB,
	36870 - 11905: 0xC4E6,
	36871 - 11905: 0xDE9A,
	36872 - 11905: 0xDE9B,
	36873 - 11905: 0xD1A1,
	36874 - 11905: 0xD1B7,
	36875 - 11905: 0xE5CD,
	36876 - 11905: 0xDE9C,
	36877 - 11905: 0xE5D0,
	36878 - 11905: 0xDE9D,
	36879 - 11905: 0xCDB8,
	36880 - 11905: 0xD6F0,
	36881 - 11905: 0xE5CF,
	36882 - 11905: 0xB5DD,
	36883 - 11905: 0xDE9E,
	36884 - 11905: 0xCDBE,
	36885 - 11905: 0xDE9F,
	36886 - 11905: 0xE5D1,
	36887 - 11905: 0xB6BA,
	36888 - 11905: 0xDEA0,
	36889 - 11905: 0xDF40,
	36890 - 11905: 0xCDA8,
	36891 - 11905: 0xB9E4,
	36892 - 11905: 0xDF41,
	36893 - 11905: 0xCAC5,
	36894 - 11905: 0xB3D1,
	36895 - 11905: 0xCBD9,
	36896 - 11905: 0xD4EC,
	36897 - 11905: 0xE5D2,
	36898 - 11905: 0xB7EA,
	36899 - 11905: 0xDF42,
	36900 - 11905: 0xDF43,
	36901 - 11905: 0xDF44,
	36902 - 11905: 0xE5CE,
	36903 - 11905: 0xDF45,
	36904 - 11905: 0xDF46,
	36905 - 11905: 0xDF47,
	36906 - 11905: 0xDF48,
	36907 - 11905: 0xDF49,
	36908 - 11905: 0xDF4A,
	36909 - 11905: 0xE5D5,
	36910 - 11905: 0xB4FE,
	36911 - 11905: 0xE5D6,
	36912 - 11905: 0xDF4B,
	36913 - 11905: 0xDF4C,
	36914 - 11905: 0xDF4D,
	36915 - 11905: 0xDF4E,
	36916 - 11905: 0xDF4F,
	36917 - 11905: 0xE5D3,
	36918 - 11905: 0xE5D4,
	36919 - 11905: 0xDF50,
	36920 - 11905: 0xD2DD,
	36921 - 11905: 0xDF51,
	36922 - 11905: 0xDF52,
	36923 - 11905: 0xC2DF,
	36924 - 11905: 0xB1C6,
	36925 - 11905: 0xDF53,
	36926 - 11905: 0xD3E2,
	36927 - 11905: 0xDF54,
	36928 - 11905: 0xDF55,
	36929 - 11905: 0xB6DD,
	36930 - 11905: 0xCBEC,
	36931 - 11905: 0xDF56,
	36932 - 11905: 0xE5D7,
	36933 - 11905: 0xDF57,
	36934 - 11905: 0xDF58,
	36935 - 11905: 0xD3F6,
	36936 - 11905: 0xDF59,
	36937 - 11905: 0xDF5A,
	36938 - 11905: 0xDF5B,
	36939 - 11905: 0xDF5C,
	36940 - 11905: 0xDF5D,
	36941 - 11905: 0xB1E9,
	36942 - 11905: 0xDF5E,
	36943 - 11905: 0xB6F4,
	36944 - 11905: 0xE5DA,
	36945 - 11905: 0xE5D8,
	36946 - 11905: 0xE5D9,
	36947 - 11905: 0xB5C0,
	36948 - 11905: 0xDF5F,
	36949 - 11905: 0xDF60,
	36950 - 11905: 0xDF61,
	36951 - 11905: 0xD2C5,
	36952 - 11905: 0xE5DC,
	36953 - 11905: 0xDF62,
	36954 - 11905: 0xDF63,
	36955 - 11905: 0xE5DE,
	36956 - 11905: 0xDF64,
	36957 - 11905: 0xDF65,
	36958 - 11905: 0xDF66,
	36959 - 11905: 0xDF67,
	36960 - 11905: 0xDF68,
	36961 - 11905: 0xDF69,
	36962 - 11905: 0xE5DD,
	36963 - 11905: 0xC7B2,
	36964 - 11905: 0xDF6A,
	36965 - 11905: 0xD2A3,
	36966 - 11905: 0xDF6B,
	36967 - 11905: 0xDF6C,
	36968 - 11905: 0xE5DB,
	36969 - 11905: 0xDF6D,
	36970 - 11905: 0xDF6E,
	36971 - 11905: 0xDF6F,
	36972 - 11905: 0xDF70,
	36973 - 11905: 0xD4E2,
	36974 - 11905: 0xD5DA,
	36975 - 11905: 0xDF71,
	36976 - 11905: 0xDF72,
	36977 - 11905: 0xDF73,
	36978 - 11905: 0xDF74,
	36979 - 11905: 0xDF75,
	36980 - 11905: 0xE5E0,
	36981 - 11905: 0xD7F1,
	36982 - 11905: 0xDF76,
	36983 - 11905: 0xDF77,
	36984 - 11905: 0xDF78,
	36985 - 11905: 0xDF79,
	36986 - 11905: 0xDF7A,
	36987 - 11905: 0xDF7B,
	36988 - 11905: 0xDF7C,
	36989 - 11905: 0xE5E1,
	36990 - 11905: 0xDF7D,
	36991 - 11905: 0xB1DC,
	36992 - 11905: 0xD1FB,
	36993 - 11905: 0xDF7E,
	36994 - 11905: 0xE5E2,
	36995 - 11905: 0xE5E4,
	36996 - 11905: 0xDF80,
	36997 - 11905: 0xDF81,
	36998 - 11905: 0xDF82,
	36999 - 11905: 0xDF83,
	37000 - 11905: 0xE5E3,
	37001 - 11905: 0xDF84,
	37002 - 11905: 0xDF85,
	37003 - 11905: 0xE5E5,
	37004 - 11905: 0xDF86,
	37005 - 11905: 0xDF87,
	37006 - 11905: 0xDF88,
	37007 - 11905: 0xDF89,
	37008 - 11905: 0xDF8A,
	37009 - 11905: 0xD2D8,
	37010 - 11905: 0xDF8B,
	37011 - 11905: 0xB5CB,
	37012 - 11905: 0xDF8C,
	37013 - 11905: 0xE7DF,
	37014 - 11905: 0xDF8D,
	37015 - 11905: 0xDAF5,
	37016 - 11905: 0xDF8E,
	37017 - 11905: 0xDAF8,
	37018 - 11905: 0xDF8F,
	37019 - 11905: 0xDAF6,
	37020 - 11905: 0xDF90,
	37021 - 11905: 0xDAF7,
	37022 - 11905: 0xDF91,
	37023 - 11905: 0xDF92,
	37024 - 11905: 0xDF93,
	37025 - 11905: 0xDAFA,
	37026 - 11905: 0xD0CF,
	37027 - 11905: 0xC4C7,
	37028 - 11905: 0xDF94,
	37029 - 11905: 0xDF95,
	37030 - 11905: 0xB0EE,
	37031 - 11905: 0xDF96,
	37032 - 11905: 0xDF97,
	37033 - 11905: 0xDF98,
	37034 - 11905: 0xD0B0,
	37035 - 11905: 0xDF99,
	37036 - 11905: 0xDAF9,
	37037 - 11905: 0xDF9A,
	37038 - 11905: 0xD3CA,
	37039 - 11905: 0xBAAA,
	37040 - 11905: 0xDBA2,
	37041 - 11905: 0xC7F1,
	37042 - 11905: 0xDF9B,
	37043 - 11905: 0xDAFC,
	37044 - 11905: 0xDAFB,
	37045 - 11905: 0xC9DB,
	37046 - 11905: 0xDAFD,
	37047 - 11905: 0xDF9C,
	37048 - 11905: 0xDBA1,
	37049 - 11905: 0xD7DE,
	37050 - 11905: 0xDAFE,
	37051 - 11905: 0xC1DA,
	37052 - 11905: 0xDF9D,
	37053 - 11905: 0xDF9E,
	37054 - 11905: 0xDBA5,
	37055 - 11905: 0xDF9F,
	37056 - 11905: 0xDFA0,
	37057 - 11905: 0xD3F4,
	37058 - 11905: 0xE040,
	37059 - 11905: 0xE041,
	37060 - 11905: 0xDBA7,
	37061 - 11905: 0xDBA4,
	37062 - 11905: 0xE042,
	37063 - 11905: 0xDBA8,
	37064 - 11905: 0xE043,
	37065 - 11905: 0xE044,
	37066 - 11905: 0xBDBC,
	37067 - 11905: 0xE045,
	37068 - 11905: 0xE046,
	37069 - 11905: 0xE047,
	37070 - 11905: 0xC0C9,
	37071 - 11905: 0xDBA3,
	37072 - 11905: 0xDBA6,
	37073 - 11905: 0xD6A3,
	37074 - 11905: 0xE048,
	37075 - 11905: 0xDBA9,
	37076 - 11905: 0xE049,
	37077 - 11905: 0xE04A,
	37078 - 11905: 0xE04B,
	37079 - 11905: 0xDBAD,
	37080 - 11905: 0xE04C,
	37081 - 11905: 0xE04D,
	37082 - 11905: 0xE04E,
	37083 - 11905: 0xDBAE,
	37084 - 11905: 0xDBAC,
	37085 - 11905: 0xBAC2,
	37086 - 11905: 0xE04F,
	37087 - 11905: 0xE050,
	37088 - 11905: 0xE051,
	37089 - 11905: 0xBFA4,
	37090 - 11905: 0xDBAB,
	37091 - 11905: 0xE052,
	37092 - 11905: 0xE053,
	37093 - 11905: 0xE054,
	37094 - 11905: 0xDBAA,
	37095 - 11905: 0xD4C7,
	37096 - 11905: 0xB2BF,
	37097 - 11905: 0xE055,
	37098 - 11905: 0xE056,
	37099 - 11905: 0xDBAF,
	37100 - 11905: 0xE057,
	37101 - 11905: 0xB9F9,
	37102 - 11905: 0xE058,
	37103 - 11905: 0xDBB0,
	37104 - 11905: 0xE059,
	37105 - 11905: 0xE05A,
	37106 - 11905: 0xE05B,
	37107 - 11905: 0xE05C,
	37108 - 11905: 0xB3BB,
	37109 - 11905: 0xE05D,
	37110 - 11905: 0xE05E,
	37111 - 11905: 0xE05F,
	37112 - 11905: 0xB5A6,
	37113 - 11905: 0xE060,
	37114 - 11905: 0xE061,
	37115 - 11905: 0xE062,
	37116 - 11905: 0xE063,
	37117 - 11905: 0xB6BC,
	37118 - 11905: 0xDBB1,
	37119 - 11905: 0xE064,
	37120 - 11905: 0xE065,
	37121 - 11905: 0xE066,
	37122 - 11905: 0xB6F5,
	37123 - 11905: 0xE067,
	37124 - 11905: 0xDBB2,
	37125 - 11905: 0xE068,
	37126 - 11905: 0xE069,
	37127 - 11905: 0xE06A,
	37128 - 11905: 0xE06B,
	37129 - 11905: 0xE06C,
	37130 - 11905: 0xE06D,
	37131 - 11905: 0xE06E,
	37132 - 11905: 0xE06F,
	37133 - 11905: 0xE070,
	37134 - 11905: 0xE071,
	37135 - 11905: 0xE072,
	37136 - 11905: 0xE073,
	37137 - 11905: 0xE074,
	37138 - 11905: 0xE075,
	37139 - 11905: 0xE076,
	37140 - 11905: 0xE077,
	37141 - 11905: 0xE078,
	37142 - 11905: 0xE079,
	37143 - 11905: 0xE07A,
	37144 - 11905: 0xE07B,
	37145 - 11905: 0xB1C9,
	37146 - 11905: 0xE07C,
	37147 - 11905: 0xE07D,
	37148 - 11905: 0xE07E,
	37149 - 11905: 0xE080,
	37150 - 11905: 0xDBB4,
	37151 - 11905: 0xE081,
	37152 - 11905: 0xE082,
	37153 - 11905: 0xE083,
	37154 - 11905: 0xDBB3,
	37155 - 11905: 0xDBB5,
	37156 - 11905: 0xE084,
	37157 - 11905: 0xE085,
	37158 - 11905: 0xE086,
	37159 - 11905: 0xE087,
	37160 - 11905: 0xE088,
	37161 - 11905: 0xE089,
	37162 - 11905: 0xE08A,
	37163 - 11905: 0xE08B,
	37164 - 11905: 0xE08C,
	37165 - 11905: 0xE08D,
	37166 - 11905: 0xE08E,
	37167 - 11905: 0xDBB7,
	37168 - 11905: 0xE08F,
	37169 - 11905: 0xDBB6,
	37170 - 11905: 0xE090,
	37171 - 11905: 0xE091,
	37172 - 11905: 0xE092,
	37173 - 11905: 0xE093,
	37174 - 11905: 0xE094,
	37175 - 11905: 0xE095,
	37176 - 11905: 0xE096,
	37177 - 11905: 0xDBB8,
	37178 - 11905: 0xE097,
	37179 - 11905: 0xE098,
	37180 - 11905: 0xE099,
	37181 - 11905: 0xE09A,
	37182 - 11905: 0xE09B,
	37183 - 11905: 0xE09C,
	37184 - 11905: 0xE09D,
	37185 - 11905: 0xE09E,
	37186 - 11905: 0xE09F,
	37187 - 11905: 0xDBB9,
	37188 - 11905: 0xE0A0,
	37189 - 11905: 0xE140,
	37190 - 11905: 0xDBBA,
	37191 - 11905: 0xE141,
	37192 - 11905: 0xE142,
	37193 - 11905: 0xD3CF,
	37194 - 11905: 0xF4FA,
	37195 - 11905: 0xC7F5,
	37196 - 11905: 0xD7C3,
	37197 - 11905: 0xC5E4,
	37198 - 11905: 0xF4FC,
	37199 - 11905: 0xF4FD,
	37200 - 11905: 0xF4FB,
	37201 - 11905: 0xE143,
	37202 - 11905: 0xBEC6,
	37203 - 11905: 0xE144,
	37204 - 11905: 0xE145,
	37205 - 11905: 0xE146,
	37206 - 11905: 0xE147,
	37207 - 11905: 0xD0EF,
	37208 - 11905: 0xE148,
	37209 - 11905: 0xE149,
	37210 - 11905: 0xB7D3,
	37211 - 11905: 0xE14A,
	37212 - 11905: 0xE14B,
	37213 - 11905: 0xD4CD,
	37214 - 11905: 0xCCAA,
	37215 - 11905: 0xE14C,
	37216 - 11905: 0xE14D,
	37217 - 11905: 0xF5A2,
	37218 - 11905: 0xF5A1,
	37219 - 11905: 0xBAA8,
	37220 - 11905: 0xF4FE,
	37221 - 11905: 0xCBD6,
	37222 - 11905: 0xE14E,
	37223 - 11905: 0xE14F,
	37224 - 11905: 0xE150,
	37225 - 11905: 0xF5A4,
	37226 - 11905: 0xC0D2,
	37227 - 11905: 0xE151,
	37228 - 11905: 0xB3EA,
	37229 - 11905: 0xE152,
	37230 - 11905: 0xCDAA,
	37231 - 11905: 0xF5A5,
	37232 - 11905: 0xF5A3,
	37233 - 11905: 0xBDB4,
	37234 - 11905: 0xF5A8,
	37235 - 11905: 0xE153,
	37236 - 11905: 0xF5A9,
	37237 - 11905: 0xBDCD,
	37238 - 11905: 0xC3B8,
	37239 - 11905: 0xBFE1,
	37240 - 11905: 0xCBE1,
	37241 - 11905: 0xF5AA,
	37242 - 11905: 0xE154,
	37243 - 11905: 0xE155,
	37244 - 11905: 0xE156,
	37245 - 11905: 0xF5A6,
	37246 - 11905: 0xF5A7,
	37247 - 11905: 0xC4F0,
	37248 - 11905: 0xE157,
	37249 - 11905: 0xE158,
	37250 - 11905: 0xE159,
	37251 - 11905: 0xE15A,
	37252 - 11905: 0xE15B,
	37253 - 11905: 0xF5AC,
	37254 - 11905: 0xE15C,
	37255 - 11905: 0xB4BC,
	37256 - 11905: 0xE15D,
	37257 - 11905: 0xD7ED,
	37258 - 11905: 0xE15E,
	37259 - 11905: 0xB4D7,
	37260 - 11905: 0xF5AB,
	37261 - 11905: 0xF5AE,
	37262 - 11905: 0xE15F,
	37263 - 11905: 0xE160,
	37264 - 11905: 0xF5AD,
	37265 - 11905: 0xF5AF,
	37266 - 11905: 0xD0D1,
	37267 - 11905: 0xE161,
	37268 - 11905: 0xE162,
	37269 - 11905: 0xE163,
	37270 - 11905: 0xE164,
	37271 - 11905: 0xE165,
	37272 - 11905: 0xE166,
	37273 - 11905: 0xE167,
	37274 - 11905: 0xC3D1,
	37275 - 11905: 0xC8A9,
	37276 - 11905: 0xE168,
	37277 - 11905: 0xE169,
	37278 - 11905: 0xE16A,
	37279 - 11905: 0xE16B,
	37280 - 11905: 0xE16C,
	37281 - 11905: 0xE16D,
	37282 - 11905: 0xF5B0,
	37283 - 11905: 0xF5B1,
	37284 - 11905: 0xE16E,
	37285 - 11905: 0xE16F,
	37286 - 11905: 0xE170,
	37287 - 11905: 0xE171,
	37288 - 11905: 0xE172,
	37289 - 11905: 0xE173,
	37290 - 11905: 0xF5B2,
	37291 - 11905: 0xE174,
	37292 - 11905: 0xE175,
	37293 - 11905: 0xF5B3,
	37294 - 11905: 0xF5B4,
	37295 - 11905: 0xF5B5,
	37296 - 11905: 0xE176,
	37297 - 11905: 0xE177,
	37298 - 11905: 0xE178,
	37299 - 11905: 0xE179,
	37300 - 11905: 0xF5B7,
	37301 - 11905: 0xF5B6,
	37302 - 11905: 0xE17A,
	37303 - 11905: 0xE17B,
	37304 - 11905: 0xE17C,
	37305 - 11905: 0xE17D,
	37306 - 11905: 0xF5B8,
	37307 - 11905: 0xE17E,
	37308 - 11905: 0xE180,
	37309 - 11905: 0xE181,
	37310 - 11905: 0xE182,
	37311 - 11905: 0xE183,
	37312 - 11905: 0xE184,
	37313 - 11905: 0xE185,
	37314 - 11905: 0xE186,
	37315 - 11905: 0xE187,
	37316 - 11905: 0xE188,
	37317 - 11905: 0xE189,
	37318 - 11905: 0xE18A,
	37319 - 11905: 0xB2C9,
	37320 - 11905: 0xE18B,
	37321 - 11905: 0xD3D4,
	37322 - 11905: 0xCACD,
	37323 - 11905: 0xE18C,
	37324 - 11905: 0xC0EF,
	37325 - 11905: 0xD6D8,
	37326 - 11905: 0xD2B0,
	37327 - 11905: 0xC1BF,
	37328 - 11905: 0xE18D,
	37329 - 11905: 0xBDF0,
	37330 - 11905: 0xE18E,
	37331 - 11905: 0xE18F,
	37332 - 11905: 0xE190,
	37333 - 11905: 0xE191,
	37334 - 11905: 0xE192,
	37335 - 11905: 0xE193,
	37336 - 11905: 0xE194,
	37337 - 11905: 0xE195,
	37338 - 11905: 0xE196,
	37339 - 11905: 0xE197,
	37340 - 11905: 0xB8AA,
	37341 - 11905: 0xE198,
	37342 - 11905: 0xE199,
	37343 - 11905: 0xE19A,
	37344 - 11905: 0xE19B,
	37345 - 11905: 0xE19C,
	37346 - 11905: 0xE19D,
	37347 - 11905: 0xE19E,
	37348 - 11905: 0xE19F,
	37349 - 11905: 0xE1A0,
	37350 - 11905: 0xE240,
	37351 - 11905: 0xE241,
	37352 - 11905: 0xE242,
	37353 - 11905: 0xE243,
	37354 - 11905: 0xE244,
	37355 - 11905: 0xE245,
	37356 - 11905: 0xE246,
	37357 - 11905: 0xE247,
	37358 - 11905: 0xE248,
	37359 - 11905: 0xE249,
	37360 - 11905: 0xE24A,
	37361 - 11905: 0xE24B,
	37362 - 11905: 0xE24C,
	37363 - 11905: 0xE24D,
	37364 - 11905: 0xE24E,
	37365 - 11905: 0xE24F,
	37366 - 11905: 0xE250,
	37367 - 11905: 0xE251,
	37368 - 11905: 0xE252,
	37369 - 11905: 0xE253,
	37370 - 11905: 0xE254,
	37371 - 11905: 0xE255,
	37372 - 11905: 0xE256,
	37373 - 11905: 0xE257,
	37374 - 11905: 0xE258,
	37375 - 11905: 0xE259,
	37376 - 11905: 0xE25A,
	37377 - 11905: 0xE25B,
	37378 - 11905: 0xE25C,
	37379 - 11905: 0xE25D,
	37380 - 11905: 0xE25E,
	37381 - 11905: 0xE25F,
	37382 - 11905: 0xE260,
	37383 - 11905: 0xE261,
	37384 - 11905: 0xE262,
	37385 - 11905: 0xE263,
	37386 - 11905: 0xE264,
	37387 - 11905: 0xE265,
	37388 - 11905: 0xE266,
	37389 - 11905: 0xE267,
	37390 - 11905: 0xE268,
	37391 - 11905: 0xE269,
	37392 - 11905: 0xE26A,
	37393 - 11905: 0xE26B,
	37394 - 11905: 0xE26C,
	37395 - 11905: 0xE26D,
	37396 - 11905: 0xE26E,
	37397 - 11905: 0xE26F,
	37398 - 11905: 0xE270,
	37399 - 11905: 0xE271,
	37400 - 11905: 0xE272,
	37401 - 11905: 0xE273,
	37402 - 11905: 0xE274,
	37403 - 11905: 0xE275,
	37404 - 11905: 0xE276,
	37405 - 11905: 0xE277,
	37406 - 11905: 0xE278,
	37407 - 11905: 0xE279,
	37408 - 11905: 0xE27A,
	37409 - 11905: 0xE27B,
	37410 - 11905: 0xE27C,
	37411 - 11905: 0xE27D,
	37412 - 11905: 0xE27E,
	37413 - 11905: 0xE280,
	37414 - 11905: 0xE281,
	37415 - 11905: 0xE282,
	37416 - 11905: 0xE283,
	37417 - 11905: 0xE284,
	37418 - 11905: 0xE285,
	37419 - 11905: 0xE286,
	37420 - 11905: 0xE287,
	37421 - 11905: 0xE288,
	37422 - 11905: 0xE289,
	37423 - 11905: 0xE28A,
	37424 - 11905: 0xE28B,
	37425 - 11905: 0xE28C,
	37426 - 11905: 0xE28D,
	37427 - 11905: 0xE28E,
	37428 - 11905: 0xE28F,
	37429 - 11905: 0xE290,
	37430 - 11905: 0xE291,
	37431 - 11905: 0xE292,
	37432 - 11905: 0xE293,
	37433 - 11905: 0xE294,
	37434 - 11905: 0xE295,
	37435 - 11905: 0xE296,
	37436 - 11905: 0xE297,
	37437 - 11905: 0xE298,
	37438 - 11905: 0xE299,
	37439 - 11905: 0xE29A,
	37440 - 11905: 0xE29B,
	37441 - 11905: 0xE29C,
	37442 - 11905: 0xE29D,
	37443 - 11905: 0xE29E,
	37444 - 11905: 0xE29F,
	37445 - 11905: 0xE2A0,
	37446 - 11905: 0xE340,
	37447 - 11905: 0xE341,
	37448 - 11905: 0xE342,
	37449 - 11905: 0xE343,
	37450 - 11905: 0xE344,
	37451 - 11905: 0xE345,
	37452 - 11905: 0xE346,
	37453 - 11905: 0xE347,
	37454 - 11905: 0xE348,
	37455 - 11905: 0xE349,
	37456 - 11905: 0xE34A,
	37457 - 11905: 0xE34B,
	37458 - 11905: 0xE34C,
	37459 - 11905: 0xE34D,
	37460 - 11905: 0xE34E,
	37461 - 11905: 0xE34F,
	37462 - 11905: 0xE350,
	37463 - 11905: 0xE351,
	37464 - 11905: 0xE352,
	37465 - 11905: 0xE353,
	37466 - 11905: 0xE354,
	37467 - 11905: 0xE355,
	37468 - 11905: 0xE356,
	37469 - 11905: 0xE357,
	37470 - 11905: 0xE358,
	37471 - 11905: 0xE359,
	37472 - 11905: 0xE35A,
	37473 - 11905: 0xE35B,
	37474 - 11905: 0xE35C,
	37475 - 11905: 0xE35D,
	37476 - 11905: 0xE35E,
	37477 - 11905: 0xE35F,
	37478 - 11905: 0xE360,
	37479 - 11905: 0xE361,
	37480 - 11905: 0xE362,
	37481 - 11905: 0xE363,
	37482 - 11905: 0xE364,
	37483 - 11905: 0xE365,
	37484 - 11905: 0xE366,
	37485 - 11905: 0xE367,
	37486 - 11905: 0xE368,
	37487 - 11905: 0xE369,
	37488 - 11905: 0xE36A,
	37489 - 11905: 0xE36B,
	37490 - 11905: 0xE36C,
	37491 - 11905: 0xE36D,
	37492 - 11905: 0xBCF8,
	37493 - 11905: 0xE36E,
	37494 - 11905: 0xE36F,
	37495 - 11905: 0xE370,
	37496 - 11905: 0xE371,
	37497 - 11905: 0xE372,
	37498 - 11905: 0xE373,
	37499 - 11905: 0xE374,
	37500 - 11905: 0xE375,
	37501 - 11905: 0xE376,
	37502 - 11905: 0xE377,
	37503 - 11905: 0xE378,
	37504 - 11905: 0xE379,
	37505 - 11905: 0xE37A,
	37506 - 11905: 0xE37B,
	37507 - 11905: 0xE37C,
	37508 - 11905: 0xE37D,
	37509 - 11905: 0xE37E,
	37510 - 11905: 0xE380,
	37511 - 11905: 0xE381,
	37512 - 11905: 0xE382,
	37513 - 11905: 0xE383,
	37514 - 11905: 0xE384,
	37515 - 11905: 0xE385,
	37516 - 11905: 0xE386,
	37517 - 11905: 0xE387,
	37518 - 11905: 0xF6C6,
	37519 - 11905: 0xE388,
	37520 - 11905: 0xE389,
	37521 - 11905: 0xE38A,
	37522 - 11905: 0xE38B,
	37523 - 11905: 0xE38C,
	37524 - 11905: 0xE38D,
	37525 - 11905: 0xE38E,
	37526 - 11905: 0xE38F,
	37527 - 11905: 0xE390,
	37528 - 11905: 0xE391,
	37529 - 11905: 0xE392,
	37530 - 11905: 0xE393,
	37531 - 11905: 0xE394,
	37532 - 11905: 0xE395,
	37533 - 11905: 0xE396,
	37534 - 11905: 0xE397,
	37535 - 11905: 0xE398,
	37536 - 11905: 0xE399,
	37537 - 11905: 0xE39A,
	37538 - 11905: 0xE39B,
	37539 - 11905: 0xE39C,
	37540 - 11905: 0xE39D,
	37541 - 11905: 0xE39E,
	37542 - 11905: 0xE39F,
	37543 - 11905: 0xE3A0,
	37544 - 11905: 0xE440,
	37545 - 11905: 0xE441,
	37546 - 11905: 0xE442,
	37547 - 11905: 0xE443,
	37548 - 11905: 0xE444,
	37549 - 11905: 0xE445,
	37550 - 11905: 0xF6C7,
	37551 - 11905: 0xE446,
	37552 - 11905: 0xE447,
	37553 - 11905: 0xE448,
	37554 - 11905: 0xE449,
	37555 - 11905: 0xE44A,
	37556 - 11905: 0xE44B,
	37557 - 11905: 0xE44C,
	37558 - 11905: 0xE44D,
	37559 - 11905: 0xE44E,
	37560 - 11905: 0xE44F,
	37561 - 11905: 0xE450,
	37562 - 11905: 0xE451,
	37563 - 11905: 0xE452,
	37564 - 11905: 0xE453,
	37565 - 11905: 0xE454,
	37566 - 11905: 0xE455,
	37567 - 11905: 0xE456,
	37568 - 11905: 0xE457,
	37569 - 11905: 0xE458,
	37570 - 11905: 0xE459,
	37571 - 11905: 0xE45A,
	37572 - 11905: 0xE45B,
	37573 - 11905: 0xE45C,
	37574 - 11905: 0xE45D,
	37575 - 11905: 0xE45E,
	37576 - 11905: 0xF6C8,
	37577 - 11905: 0xE45F,
	37578 - 11905: 0xE460,
	37579 - 11905: 0xE461,
	37580 - 11905: 0xE462,
	37581 - 11905: 0xE463,
	37582 - 11905: 0xE464,
	37583 - 11905: 0xE465,
	37584 - 11905: 0xE466,
	37585 - 11905: 0xE467,
	37586 - 11905: 0xE468,
	37587 - 11905: 0xE469,
	37588 - 11905: 0xE46A,
	37589 - 11905: 0xE46B,
	37590 - 11905: 0xE46C,
	37591 - 11905: 0xE46D,
	37592 - 11905: 0xE46E,
	37593 - 11905: 0xE46F,
	37594 - 11905: 0xE470,
	37595 - 11905: 0xE471,
	37596 - 11905: 0xE472,
	37597 - 11905: 0xE473,
	37598 - 11905: 0xE474,
	37599 - 11905: 0xE475,
	37600 - 11905: 0xE476,
	37601 - 11905: 0xE477,
	37602 - 11905: 0xE478,
	37603 - 11905: 0xE479,
	37604 - 11905: 0xE47A,
	37605 - 11905: 0xE47B,
	37606 - 11905: 0xE47C,
	37607 - 11905: 0xE47D,
	37608 - 11905: 0xE47E,
	37609 - 11905: 0xE480,
	37610 - 11905: 0xE481,
	37611 - 11905: 0xE482,
	37612 - 11905: 0xE483,
	37613 - 11905: 0xE484,
	37614 - 11905: 0xE485,
	37615 - 11905: 0xE486,
	37616 - 11905: 0xE487,
	37617 - 11905: 0xE488,
	37618 - 11905: 0xE489,
	37619 - 11905: 0xE48A,
	37620 - 11905: 0xE48B,
	37621 - 11905: 0xE48C,
	37622 - 11905: 0xE48D,
	37623 - 11905: 0xE48E,
	37624 - 11905: 0xE48F,
	37625 - 11905: 0xE490,
	37626 - 11905: 0xE491,
	37627 - 11905: 0xE492,
	37628 - 11905: 0xE493,
	37629 - 11905: 0xE494,
	37630 - 11905: 0xE495,
	37631 - 11905: 0xE496,
	37632 - 11905: 0xE497,
	37633 - 11905: 0xE498,
	37634 - 11905: 0xE499,
	37635 - 11905: 0xE49A,
	37636 - 11905: 0xE49B,
	37637 - 11905: 0xE49C,
	37638 - 11905: 0xE49D,
	37639 - 11905: 0xE49E,
	37640 - 11905: 0xE49F,
	37641 - 11905: 0xE4A0,
	37642 - 11905: 0xE540,
	37643 - 11905: 0xE541,
	37644 - 11905: 0xE542,
	37645 - 11905: 0xE543,
	37646 - 11905: 0xE544,
	37647 - 11905: 0xE545,
	37648 - 11905: 0xE546,
	37649 - 11905: 0xE547,
	37650 - 11905: 0xE548,
	37651 - 11905: 0xE549,
	37652 - 11905: 0xE54A,
	37653 - 11905: 0xE54B,
	37654 - 11905: 0xE54C,
	37655 - 11905: 0xE54D,
	37656 - 11905: 0xE54E,
	37657 - 11905: 0xE54F,
	37658 - 11905: 0xE550,
	37659 - 11905: 0xE551,
	37660 - 11905: 0xE552,
	37661 - 11905: 0xE553,
	37662 - 11905: 0xE554,
	37663 - 11905: 0xE555,
	37664 - 11905: 0xE556,
	37665 - 11905: 0xE557,
	37666 - 11905: 0xE558,
	37667 - 11905: 0xE559,
	37668 - 11905: 0xE55A,
	37669 - 11905: 0xE55B,
	37670 - 11905: 0xE55C,
	37671 - 11905: 0xE55D,
	37672 - 11905: 0xE55E,
	37673 - 11905: 0xE55F,
	37674 - 11905: 0xE560,
	37675 - 11905: 0xE561,
	37676 - 11905: 0xE562,
	37677 - 11905: 0xE563,
	37678 - 11905: 0xE564,
	37679 - 11905: 0xE565,
	37680 - 11905: 0xE566,
	37681 - 11905: 0xE567,
	37682 - 11905: 0xE568,
	37683 - 11905: 0xE569,
	37684 - 11905: 0xE56A,
	37685 - 11905: 0xE56B,
	37686 - 11905: 0xE56C,
	37687 - 11905: 0xE56D,
	37688 - 11905: 0xE56E,
	37689 - 11905: 0xE56F,
	37690 - 11905: 0xE570,
	37691 - 11905: 0xE571,
	37692 - 11905: 0xE572,
	37693 - 11905: 0xE573,
	37694 - 11905: 0xF6C9,
	37695 - 11905: 0xE574,
	37696 - 11905: 0xE575,
	37697 - 11905: 0xE576,
	37698 - 11905: 0xE577,
	37699 - 11905: 0xE578,
	37700 - 11905: 0xE579,
	37701 - 11905: 0xE57A,
	37702 - 11905: 0xE57B,
	37703 - 11905: 0xE57C,
	37704 - 11905: 0xE57D,
	37705 - 11905: 0xE57E,
	37706 - 11905: 0xE580,
	37707 - 11905: 0xE581,
	37708 - 11905: 0xE582,
	37709 - 11905: 0xE583,
	37710 - 11905: 0xE584,
	37711 - 11905: 0xE585,
	37712 - 11905: 0xE586,
	37713 - 11905: 0xE587,
	37714 - 11905: 0xE588,
	37715 - 11905: 0xE589,
	37716 - 11905: 0xE58A,
	37717 - 11905: 0xE58B,
	37718 - 11905: 0xE58C,
	37719 - 11905: 0xE58D,
	37720 - 11905: 0xE58E,
	37721 - 11905: 0xE58F,
	37722 - 11905: 0xE590,
	37723 - 11905: 0xE591,
	37724 - 11905: 0xE592,
	37725 - 11905: 0xE593,
	37726 - 11905: 0xE594,
	37727 - 11905: 0xE595,
	37728 - 11905: 0xE596,
	37729 - 11905: 0xE597,
	37730 - 11905: 0xE598,
	37731 - 11905: 0xE599,
	37732 - 11905: 0xE59A,
	37733 - 11905: 0xE59B,
	37734 - 11905: 0xE59C,
	37735 - 11905: 0xE59D,
	37736 - 11905: 0xE59E,
	37737 - 11905: 0xE59F,
	37738 - 11905: 0xF6CA,
	37739 - 11905: 0xE5A0,
	37740 - 11905: 0xE640,
	37741 - 11905: 0xE641,
	37742 - 11905: 0xE642,
	37743 - 11905: 0xE643,
	37744 - 11905: 0xE644,
	37745 - 11905: 0xE645,
	37746 - 11905: 0xE646,
	37747 - 11905: 0xE647,
	37748 - 11905: 0xE648,
	37749 - 11905: 0xE649,
	37750 - 11905: 0xE64A,
	37751 - 11905: 0xE64B,
	37752 - 11905: 0xE64C,
	37753 - 11905: 0xE64D,
	37754 - 11905: 0xE64E,
	37755 - 11905: 0xE64F,
	37756 - 11905: 0xE650,
	37757 - 11905: 0xE651,
	37758 - 11905: 0xE652,
	37759 - 11905: 0xE653,
	37760 - 11905: 0xE654,
	37761 - 11905: 0xE655,
	37762 - 11905: 0xE656,
	37763 - 11905: 0xE657,
	37764 - 11905: 0xE658,
	37765 - 11905: 0xE659,
	37766 - 11905: 0xE65A,
	37767 - 11905: 0xE65B,
	37768 - 11905: 0xE65C,
	37769 - 11905: 0xE65D,
	37770 - 11905: 0xE65E,
	37771 - 11905: 0xE65F,
	37772 - 11905: 0xE660,
	37773 - 11905: 0xE661,
	37774 - 11905: 0xE662,
	37775 - 11905: 0xF6CC,
	37776 - 11905: 0xE663,
	37777 - 11905: 0xE664,
	37778 - 11905: 0xE665,
	37779 - 11905: 0xE666,
	37780 - 11905: 0xE667,
	37781 - 11905: 0xE668,
	37782 - 11905: 0xE669,
	37783 - 11905: 0xE66A,
	37784 - 11905: 0xE66B,
	37785 - 11905: 0xE66C,
	37786 - 11905: 0xE66D,
	37787 - 11905: 0xE66E,
	37788 - 11905: 0xE66F,
	37789 - 11905: 0xE670,
	37790 - 11905: 0xE671,
	37791 - 11905: 0xE672,
	37792 - 11905: 0xE673,
	37793 - 11905: 0xE674,
	37794 - 11905: 0xE675,
	37795 - 11905: 0xE676,
	37796 - 11905: 0xE677,
	37797 - 11905: 0xE678,
	37798 - 11905: 0xE679,
	37799 - 11905: 0xE67A,
	37800 - 11905: 0xE67B,
	37801 - 11905: 0xE67C,
	37802 - 11905: 0xE67D,
	37803 - 11905: 0xE67E,
	37804 - 11905: 0xE680,
	37805 - 11905: 0xE681,
	37806 - 11905: 0xE682,
	37807 - 11905: 0xE683,
	37808 - 11905: 0xE684,
	37809 - 11905: 0xE685,
	37810 - 11905: 0xE686,
	37811 - 11905: 0xE687,
	37812 - 11905: 0xE688,
	37813 - 11905: 0xE689,
	37814 - 11905: 0xE68A,
	37815 - 11905: 0xE68B,
	37816 - 11905: 0xE68C,
	37817 - 11905: 0xE68D,
	37818 - 11905: 0xE68E,
	37819 - 11905: 0xE68F,
	37820 - 11905: 0xE690,
	37821 - 11905: 0xE691,
	37822 - 11905: 0xE692,
	37823 - 11905: 0xE693,
	37824 - 11905: 0xE694,
	37825 - 11905: 0xE695,
	37826 - 11905: 0xE696,
	37827 - 11905: 0xE697,
	37828 - 11905: 0xE698,
	37829 - 11905: 0xE699,
	37830 - 11905: 0xE69A,
	37831 - 11905: 0xE69B,
	37832 - 11905: 0xE69C,
	37833 - 11905: 0xE69D,
	37834 - 11905: 0xF6CB,
	37835 - 11905: 0xE69E,
	37836 - 11905: 0xE69F,
	37837 - 11905: 0xE6A0,
	37838 - 11905: 0xE740,
	37839 - 11905: 0xE741,
	37840 - 11905: 0xE742,
	37841 - 11905: 0xE743,
	37842 - 11905: 0xE744,
	37843 - 11905: 0xE745,
	37844 - 11905: 0xE746,
	37845 - 11905: 0xE747,
	37846 - 11905: 0xF7E9,
	37847 - 11905: 0xE748,
	37848 - 11905: 0xE749,
	37849 - 11905: 0xE74A,
	37850 - 11905: 0xE74B,
	37851 - 11905: 0xE74C,
	37852 - 11905: 0xE74D,
	37853 - 11905: 0xE74E,
	37854 - 11905: 0xE74F,
	37855 - 11905: 0xE750,
	37856 - 11905: 0xE751,
	37857 - 11905: 0xE752,
	37858 - 11905: 0xE753,
	37859 - 11905: 0xE754,
	37860 - 11905: 0xE755,
	37861 - 11905: 0xE756,
	37862 - 11905: 0xE757,
	37863 - 11905: 0xE758,
	37864 - 11905: 0xE759,
	37865 - 11905: 0xE75A,
	37866 - 11905: 0xE75B,
	37867 - 11905: 0xE75C,
	37868 - 11905: 0xE75D,
	37869 - 11905: 0xE75E,
	37870 - 11905: 0xE75F,
	37871 - 11905: 0xE760,
	37872 - 11905: 0xE761,
	37873 - 11905: 0xE762,
	37874 - 11905: 0xE763,
	37875 - 11905: 0xE764,
	37876 - 11905: 0xE765,
	37877 - 11905: 0xE766,
	37878 - 11905: 0xE767,
	37879 - 11905: 0xE768,
	37880 - 11905: 0xE769,
	37881 - 11905: 0xE76A,
	37882 - 11905: 0xE76B,
	37883 - 11905: 0xE76C,
	37884 - 11905: 0xE76D,
	37885 - 11905: 0xE76E,
	37886 - 11905: 0xE76F,
	37887 - 11905: 0xE770,
	37888 - 11905: 0xE771,
	37889 - 11905: 0xE772,
	37890 - 11905: 0xE773,
	37891 - 11905: 0xE774,
	37892 - 11905: 0xE775,
	37893 - 11905: 0xE776,
	37894 - 11905: 0xE777,
	37895 - 11905: 0xE778,
	37896 - 11905: 0xE779,
	37897 - 11905: 0xE77A,
	37898 - 11905: 0xE77B,
	37899 - 11905: 0xE77C,
	37900 - 11905: 0xE77D,
	37901 - 11905: 0xE77E,
	37902 - 11905: 0xE780,
	37903 - 11905: 0xE781,
	37904 - 11905: 0xE782,
	37905 - 11905: 0xE783,
	37906 - 11905: 0xE784,
	37907 - 11905: 0xE785,
	37908 - 11905: 0xE786,
	37909 - 11905: 0xE787,
	37910 - 11905: 0xE788,
	37911 - 11905: 0xE789,
	37912 - 11905: 0xE78A,
	37913 - 11905: 0xE78B,
	37914 - 11905: 0xE78C,
	37915 - 11905: 0xE78D,
	37916 - 11905: 0xE78E,
	37917 - 11905: 0xE78F,
	37918 - 11905: 0xE790,
	37919 - 11905: 0xE791,
	37920 - 11905: 0xE792,
	37921 - 11905: 0xE793,
	37922 - 11905: 0xE794,
	37923 - 11905: 0xE795,
	37924 - 11905: 0xE796,
	37925 - 11905: 0xE797,
	37926 - 11905: 0xE798,
	37927 - 11905: 0xE799,
	37928 - 11905: 0xE79A,
	37929 - 11905: 0xE79B,
	37930 - 11905: 0xE79C,
	37931 - 11905: 0xE79D,
	37932 - 11905: 0xE79E,
	37933 - 11905: 0xE79F,
	37934 - 11905: 0xE7A0,
	37935 - 11905: 0xE840,
	37936 - 11905: 0xE841,
	37937 - 11905: 0xE842,
	37938 - 11905: 0xE843,
	37939 - 11905: 0xE844,
	37940 - 11905: 0xE845,
	37941 - 11905: 0xE846,
	37942 - 11905: 0xE847,
	37943 - 11905: 0xE848,
	37944 - 11905: 0xE849,
	37945 - 11905: 0xE84A,
	37946 - 11905: 0xE84B,
	37947 - 11905: 0xE84C,
	37948 - 11905: 0xE84D,
	37949 - 11905: 0xE84E,
	37950 - 11905: 0xF6CD,
	37951 - 11905: 0xE84F,
	37952 - 11905: 0xE850,
	37953 - 11905: 0xE851,
	37954 - 11905: 0xE852,
	37955 - 11905: 0xE853,
	37956 - 11905: 0xE854,
	37957 - 11905: 0xE855,
	37958 - 11905: 0xE856,
	37959 - 11905: 0xE857,
	37960 - 11905: 0xE858,
	37961 - 11905: 0xE859,
	37962 - 11905: 0xE85A,
	37963 - 11905: 0xE85B,
	37964 - 11905: 0xE85C,
	37965 - 11905: 0xE85D,
	37966 - 11905: 0xE85E,
	37967 - 11905: 0xE85F,
	37968 - 11905: 0xE860,
	37969 - 11905: 0xE861,
	37970 - 11905: 0xE862,
	37971 - 11905: 0xE863,
	37972 - 11905: 0xE864,
	37973 - 11905: 0xE865,
	37974 - 11905: 0xE866,
	37975 - 11905: 0xE867,
	37976 - 11905: 0xE868,
	37977 - 11905: 0xE869,
	37978 - 11905: 0xE86A,
	37979 - 11905: 0xE86B,
	37980 - 11905: 0xE86C,
	37981 - 11905: 0xE86D,
	37982 - 11905: 0xE86E,
	37983 - 11905: 0xE86F,
	37984 - 11905: 0xE870,
	37985 - 11905: 0xE871,
	37986 - 11905: 0xE872,
	37987 - 11905: 0xE873,
	37988 - 11905: 0xE874,
	37989 - 11905: 0xE875,
	37990 - 11905: 0xE876,
	37991 - 11905: 0xE877,
	37992 - 11905: 0xE878,
	37993 - 11905: 0xE879,
	37994 - 11905: 0xE87A,
	37995 - 11905: 0xF6CE,
	37996 - 11905: 0xE87B,
	37997 - 11905: 0xE87C,
	37998 - 11905: 0xE87D,
	37999 - 11905: 0xE87E,
	38000 - 11905: 0xE880,
	38001 - 11905: 0xE881,
	38002 - 11905: 0xE882,
	38003 - 11905: 0xE883,
	38004 - 11905: 0xE884,
	38005 - 11905: 0xE885,
	38006 - 11905: 0xE886,
	38007 - 11905: 0xE887,
	38008 - 11905: 0xE888,
	38009 - 11905: 0xE889,
	38010 - 11905: 0xE88A,
	38011 - 11905: 0xE88B,
	38012 - 11905: 0xE88C,
	38013 - 11905: 0xE88D,
	38014 - 11905: 0xE88E,
	38015 - 11905: 0xE88F,
	38016 - 11905: 0xE890,
	38017 - 11905: 0xE891,
	38018 - 11905: 0xE892,
	38019 - 11905: 0xE893,
	38020 - 11905: 0xE894,
	38021 - 11905: 0xEEC4,
	38022 - 11905: 0xEEC5,
	38023 - 11905: 0xEEC6,
	38024 - 11905: 0xD5EB,
	38025 - 11905: 0xB6A4,
	38026 - 11905: 0xEEC8,
	38027 - 11905: 0xEEC7,
	38028 - 11905: 0xEEC9,
	38029 - 11905: 0xEECA,
	38030 - 11905: 0xC7A5,
	38031 - 11905: 0xEECB,
	38032 - 11905: 0xEECC,
	38033 - 11905: 0xE895,
	38034 - 11905: 0xB7B0,
	38035 - 11905: 0xB5F6,
	38036 - 11905: 0xEECD,
	38037 - 11905: 0xEECF,
	38038 - 11905: 0xE896,
	38039 - 11905: 0xEECE,
	38040 - 11905: 0xE897,
	38041 - 11905: 0xB8C6,
	38042 - 11905: 0xEED0,
	38043 - 11905: 0xEED1,
	38044 - 11905: 0xEED2,
	38045 - 11905: 0xB6DB,
	38046 - 11905: 0xB3AE,
	38047 - 11905: 0xD6D3,
	38048 - 11905: 0xC4C6,
	38049 - 11905: 0xB1B5,
	38050 - 11905: 0xB8D6,
	38051 - 11905: 0xEED3,
	38052 - 11905: 0xEED4,
	38053 - 11905: 0xD4BF,
	38054 - 11905: 0xC7D5,
	38055 - 11905: 0xBEFB,
	38056 - 11905: 0xCED9,
	38057 - 11905: 0xB9B3,
	38058 - 11905: 0xEED6,
	38059 - 11905: 0xEED5,
	38060 - 11905: 0xEED8,
	38061 - 11905: 0xEED7,
	38062 - 11905: 0xC5A5,
	38063 - 11905: 0xEED9,
	38064 - 11905: 0xEEDA,
	38065 - 11905: 0xC7AE,
	38066 - 11905: 0xEEDB,
	38067 - 11905: 0xC7AF,
	38068 - 11905: 0xEEDC,
	38069 - 11905: 0xB2A7,
	38070 - 11905: 0xEEDD,
	38071 - 11905: 0xEEDE,
	38072 - 11905: 0xEEDF,
	38073 - 11905: 0xEEE0,
	38074 - 11905: 0xEEE1,
	38075 - 11905: 0xD7EA,
	38076 - 11905: 0xEEE2,
	38077 - 11905: 0xEEE3,
	38078 - 11905: 0xBCD8,
	38079 - 11905: 0xEEE4,
	38080 - 11905: 0xD3CB,
	38081 - 11905: 0xCCFA,
	38082 - 11905: 0xB2AC,
	38083 - 11905: 0xC1E5,
	38084 - 11905: 0xEEE5,
	38085 - 11905: 0xC7A6,
	38086 - 11905: 0xC3AD,
	38087 - 11905: 0xE898,
	38088 - 11905: 0xEEE6,
	38089 - 11905: 0xEEE7,
	38090 - 11905: 0xEEE8,
	38091 - 11905: 0xEEE9,
	38092 - 11905: 0xEEEA,
	38093 - 11905: 0xEEEB,
	38094 - 11905: 0xEEEC,
	38095 - 11905: 0xE899,
	38096 - 11905: 0xEEED,
	38097 - 11905: 0xEEEE,
	38098 - 11905: 0xEEEF,
	38099 - 11905: 0xE89A,
	38100 - 11905: 0xE89B,
	38101 - 11905: 0xEEF0,
	38102 - 11905: 0xEEF1,
	38103 - 11905: 0xEEF2,
	38104 - 11905: 0xEEF4,
	38105 - 11905: 0xEEF3,
	38106 - 11905: 0xE89C,
	38107 - 11905: 0xEEF5,
	38108 - 11905: 0xCDAD,
	38109 - 11905: 0xC2C1,
	38110 - 11905: 0xEEF6,
	38111 - 11905: 0xEEF7,
	38112 - 11905: 0xEEF8,
	38113 - 11905: 0xD5A1,
	38114 - 11905: 0xEEF9,
	38115 - 11905: 0xCFB3,
	38116 - 11905: 0xEEFA,
	38117 - 11905: 0xEEFB,
	38118 - 11905: 0xE89D,
	38119 - 11905: 0xEEFC,
	38120 - 11905: 0xEEFD,
	38121 - 11905: 0xEFA1,
	38122 - 11905: 0xEEFE,
	38123 - 11905: 0xEFA2,
	38124 - 11905: 0xB8F5,
	38125 - 11905: 0xC3FA,
	38126 - 11905: 0xEFA3,
	38127 - 11905: 0xEFA4,
	38128 - 11905: 0xBDC2,
	38129 - 11905: 0xD2BF,
	38130 - 11905: 0xB2F9,
	38131 - 11905: 0xEFA5,
	38132 - 11905: 0xEFA6,
	38133 - 11905: 0xEFA7,
	38134 - 11905: 0xD2F8,
	38135 - 11905: 0xEFA8,
	38136 - 11905: 0xD6FD,
	38137 - 11905: 0xEFA9,
	38138 - 11905: 0xC6CC,
	38139 - 11905: 0xE89E,
	38140 - 11905: 0xEFAA,
	38141 - 11905: 0xEFAB,
	38142 - 11905: 0xC1B4,
	38143 - 11905: 0xEFAC,
	38144 - 11905: 0xCFFA,
	38145 - 11905: 0xCBF8,
	38146 - 11905: 0xEFAE,
	38147 - 11905: 0xEFAD,
	38148 - 11905: 0xB3FA,
	38149 - 11905: 0xB9F8,
	38150 - 11905: 0xEFAF,
	38151 - 11905: 0xEFB0,
	38152 - 11905: 0xD0E2,
	38153 - 11905: 0xEFB1,
	38154 - 11905: 0xEFB2,
	38155 - 11905: 0xB7E6,
	38156 - 11905: 0xD0BF,
	38157 - 11905: 0xEFB3,
	38158 - 11905: 0xEFB4,
	38159 - 11905: 0xEFB5,
	38160 - 11905: 0xC8F1,
	38161 - 11905: 0xCCE0,
	38162 - 11905: 0xEFB6,
	38163 - 11905: 0xEFB7,
	38164 - 11905: 0xEFB8,
	38165 - 11905: 0xEFB9,
	38166 - 11905: 0xEFBA,
	38167 - 11905: 0xD5E0,
	38168 - 11905: 0xEFBB,
	38169 - 11905: 0xB4ED,
	38170 - 11905: 0xC3AA,
	38171 - 11905: 0xEFBC,
	38172 - 11905: 0xE89F,
	38173 - 11905: 0xEFBD,
	38174 - 11905: 0xEFBE,
	38175 - 11905: 0xEFBF,
	38176 - 11905: 0xE8A0,
	38177 - 11905: 0xCEFD,
	38178 - 11905: 0xEFC0,
	38179 - 11905: 0xC2E0,
	38180 - 11905: 0xB4B8,
	38181 - 11905: 0xD7B6,
	38182 - 11905: 0xBDF5,
	38183 - 11905: 0xE940,
	38184 - 11905: 0xCFC7,
	38185 - 11905: 0xEFC3,
	38186 - 11905: 0xEFC1,
	38187 - 11905: 0xEFC2,
	38188 - 11905: 0xEFC4,
	38189 - 11905: 0xB6A7,
	38190 - 11905: 0xBCFC,
	38191 - 11905: 0xBEE2,
	38192 - 11905: 0xC3CC,
	38193 - 11905: 0xEFC5,
	38194 - 11905: 0xEFC6,
	38195 - 11905: 0xE941,
	38196 - 11905: 0xEFC7,
	38197 - 11905: 0xEFCF,
	38198 - 11905: 0xEFC8,
	38199 - 11905: 0xEFC9,
	38200 - 11905: 0xEFCA,
	38201 - 11905: 0xC7C2,
	38202 - 11905: 0xEFF1,
	38203 - 11905: 0xB6CD,
	38204 - 11905: 0xEFCB,
	38205 - 11905: 0xE942,
	38206 - 11905: 0xEFCC,
	38207 - 11905: 0xEFCD,
	38208 - 11905: 0xB6C6,
	38209 - 11905: 0xC3BE,
	38210 - 11905: 0xEFCE,
	38211 - 11905: 0xE943,
	38212 - 11905: 0xEFD0,
	38213 - 11905: 0xEFD1,
	38214 - 11905: 0xEFD2,
	38215 - 11905: 0xD5F2,
	38216 - 11905: 0xE944,
	38217 - 11905: 0xEFD3,
	38218 - 11905: 0xC4F7,
	38219 - 11905: 0xE945,
	38220 - 11905: 0xEFD4,
	38221 - 11905: 0xC4F8,
	38222 - 11905: 0xEFD5,
	38223 - 11905: 0xEFD6,
	38224 - 11905: 0xB8E4,
	38225 - 11905: 0xB0F7,
	38226 - 11905: 0xEFD7,
	38227 - 11905: 0xEFD8,
	38228 - 11905: 0xEFD9,
	38229 - 11905: 0xE946,
	38230 - 11905: 0xEFDA,
	38231 - 11905: 0xEFDB,
	38232 - 11905: 0xEFDC,
	38233 - 11905: 0xEFDD,
	38234 - 11905: 0xE947,
	38235 - 11905: 0xEFDE,
	38236 - 11905: 0xBEB5,
	38237 - 11905: 0xEFE1,
	38238 - 11905: 0xEFDF,
	38239 - 11905: 0xEFE0,
	38240 - 11905: 0xE948,
	38241 - 11905: 0xEFE2,
	38242 - 11905: 0xEFE3,
	38243 - 11905: 0xC1CD,
	38244 - 11905: 0xEFE4,
	38245 - 11905: 0xEFE5,
	38246 - 11905: 0xEFE6,
	38247 - 11905: 0xEFE7,
	38248 - 11905: 0xEFE8,
	38249 - 11905: 0xEFE9,
	38250 - 11905: 0xEFEA,
	38251 - 11905: 0xEFEB,
	38252 - 11905: 0xEFEC,
	38253 - 11905: 0xC0D8,
	38254 - 11905: 0xE949,
	38255 - 11905: 0xEFED,
	38256 - 11905: 0xC1AD,
	38257 - 11905: 0xEFEE,
	38258 - 11905: 0xEFEF,
	38259 - 11905: 0xEFF0,
	38260 - 11905: 0xE94A,
	38261 - 11905: 0xE94B,
	38262 - 11905: 0xCFE2,
	38263 - 11905: 0xE94C,
	38264 - 11905: 0xE94D,
	38265 - 11905: 0xE94E,
	38266 - 11905: 0xE94F,
	38267 - 11905: 0xE950,
	38268 - 11905: 0xE951,
	38269 - 11905: 0xE952,
	38270 - 11905: 0xE953,
	38271 - 11905: 0xB3A4,
	38272 - 11905: 0xE954,
	38273 - 11905: 0xE955,
	38274 - 11905: 0xE956,
	38275 - 11905: 0xE957,
	38276 - 11905: 0xE958,
	38277 - 11905: 0xE959,
	38278 - 11905: 0xE95A,
	38279 - 11905: 0xE95B,
	38280 - 11905: 0xE95C,
	38281 - 11905: 0xE95D,
	38282 - 11905: 0xE95E,
	38283 - 11905: 0xE95F,
	38284 - 11905: 0xE960,
	38285 - 11905: 0xE961,
	38286 - 11905: 0xE962,
	38287 - 11905: 0xE963,
	38288 - 11905: 0xE964,
	38289 - 11905: 0xE965,
	38290 - 11905: 0xE966,
	38291 - 11905: 0xE967,
	38292 - 11905: 0xE968,
	38293 - 11905: 0xE969,
	38294 - 11905: 0xE96A,
	38295 - 11905: 0xE96B,
	38296 - 11905: 0xE96C,
	38297 - 11905: 0xE96D,
	38298 - 11905: 0xE96E,
	38299 - 11905: 0xE96F,
	38300 - 11905: 0xE970,
	38301 - 11905: 0xE971,
	38302 - 11905: 0xE972,
	38303 - 11905: 0xE973,
	38304 - 11905: 0xE974,
	38305 - 11905: 0xE975,
	38306 - 11905: 0xE976,
	38307 - 11905: 0xE977,
	38308 - 11905: 0xE978,
	38309 - 11905: 0xE979,
	38310 - 11905: 0xE97A,
	38311 - 11905: 0xE97B,
	38312 - 11905: 0xE97C,
	38313 - 11905: 0xE97D,
	38314 - 11905: 0xE97E,
	38315 - 11905: 0xE980,
	38316 - 11905: 0xE981,
	38317 - 11905: 0xE982,
	38318 - 11905: 0xE983,
	38319 - 11905: 0xE984,
	38320 - 11905: 0xE985,
	38321 - 11905: 0xE986,
	38322 - 11905: 0xE987,
	38323 - 11905: 0xE988,
	38324 - 11905: 0xE989,
	38325 - 11905: 0xE98A,
	38326 - 11905: 0xE98B,
	38327 - 11905: 0xE98C,
	38328 - 11905: 0xE98D,
	38329 - 11905: 0xE98E,
	38330 - 11905: 0xE98F,
	38331 - 11905: 0xE990,
	38332 - 11905: 0xE991,
	38333 - 11905: 0xE992,
	38334 - 11905: 0xE993,
	38335 - 11905: 0xE994,
	38336 - 11905: 0xE995,
	38337 - 11905: 0xE996,
	38338 - 11905: 0xE997,
	38339 - 11905: 0xE998,
	38340 - 11905: 0xE999,
	38341 - 11905: 0xE99A,
	38342 - 11905: 0xE99B,
	38343 - 11905: 0xE99C,
	38344 - 11905: 0xE99D,
	38345 - 11905: 0xE99E,
	38346 - 11905: 0xE99F,
	38347 - 11905: 0xE9A0,
	38348 - 11905: 0xEA40,
	38349 - 11905: 0xEA41,
	38350 - 11905: 0xEA42,
	38351 - 11905: 0xEA43,
	38352 - 11905: 0xEA44,
	38353 - 11905: 0xEA45,
	38354 - 11905: 0xEA46,
	38355 - 11905: 0xEA47,
	38356 - 11905: 0xEA48,
	38357 - 11905: 0xEA49,
	38358 - 11905: 0xEA4A,
	38359 - 11905: 0xEA4B,
	38360 - 11905: 0xEA4C,
	38361 - 11905: 0xEA4D,
	38362 - 11905: 0xEA4E,
	38363 - 11905: 0xEA4F,
	38364 - 11905: 0xEA50,
	38365 - 11905: 0xEA51,
	38366 - 11905: 0xEA52,
	38367 - 11905: 0xEA53,
	38368 - 11905: 0xEA54,
	38369 - 11905: 0xEA55,
	38370 - 11905: 0xEA56,
	38371 - 11905: 0xEA57,
	38372 - 11905: 0xEA58,
	38373 - 11905: 0xEA59,
	38374 - 11905: 0xEA5A,
	38375 - 11905: 0xEA5B,
	38376 - 11905: 0xC3C5,
	38377 - 11905: 0xE3C5,
	38378 - 11905: 0xC9C1,
	38379 - 11905: 0xE3C6,
	38380 - 11905: 0xEA5C,
	38381 - 11905: 0xB1D5,
	38382 - 11905: 0xCECA,
	38383 - 11905: 0xB4B3,
	38384 - 11905: 0xC8F2,
	38385 - 11905: 0xE3C7,
	38386 - 11905: 0xCFD0,
	38387 - 11905: 0xE3C8,
	38388 - 11905: 0xBCE4,
	38389 - 11905: 0xE3C9,
	38390 - 11905: 0xE3CA,
	38391 - 11905: 0xC3C6,
	38392 - 11905: 0xD5A2,
	38393 - 11905: 0xC4D6,
	38394 - 11905: 0xB9EB,
	38395 - 11905: 0xCEC5,
	38396 - 11905: 0xE3CB,
	38397 - 11905: 0xC3F6,
	38398 - 11905: 0xE3CC,
	38399 - 11905: 0xEA5D,
	38400 - 11905: 0xB7A7,
	38401 - 11905: 0xB8F3,
	38402 - 11905: 0xBAD2,
	38403 - 11905: 0xE3CD,
	38404 - 11905: 0xE3CE,
	38405 - 11905: 0xD4C4,
	38406 - 11905: 0xE3CF,
	38407 - 11905: 0xEA5E,
	38408 - 11905: 0xE3D0,
	38409 - 11905: 0xD1CB,
	38410 - 11905: 0xE3D1,
	38411 - 11905: 0xE3D2,
	38412 - 11905: 0xE3D3,
	38413 - 11905: 0xE3D4,
	38414 - 11905: 0xD1D6,
	38415 - 11905: 0xE3D5,
	38416 - 11905: 0xB2FB,
	38417 - 11905: 0xC0BB,
	38418 - 11905: 0xE3D6,
	38419 - 11905: 0xEA5F,
	38420 - 11905: 0xC0AB,
	38421 - 11905: 0xE3D7,
	38422 - 11905: 0xE3D8,
	38423 - 11905: 0xE3D9,
	38424 - 11905: 0xEA60,
	38425 - 11905: 0xE3DA,
	38426 - 11905: 0xE3DB,
	38427 - 11905: 0xEA61,
	38428 - 11905: 0xB8B7,
	38429 - 11905: 0xDAE2,
	38430 - 11905: 0xEA62,
	38431 - 11905: 0xB6D3,
	38432 - 11905: 0xEA63,
	38433 - 11905: 0xDAE4,
	38434 - 11905: 0xDAE3,
	38435 - 11905: 0xEA64,
	38436 - 11905: 0xEA65,
	38437 - 11905: 0xEA66,
	38438 - 11905: 0xEA67,
	38439 - 11905: 0xEA68,
	38440 - 11905: 0xEA69,
	38441 - 11905: 0xEA6A,
	38442 - 11905: 0xDAE6,
	38443 - 11905: 0xEA6B,
	38444 - 11905: 0xEA6C,
	38445 - 11905: 0xEA6D,
	38446 - 11905: 0xC8EE,
	38447 - 11905: 0xEA6E,
	38448 - 11905: 0xEA6F,
	38449 - 11905: 0xDAE5,
	38450 - 11905: 0xB7C0,
	38451 - 11905: 0xD1F4,
	38452 - 11905: 0xD2F5,
	38453 - 11905: 0xD5F3,
	38454 - 11905: 0xBDD7,
	38455 - 11905: 0xEA70,
	38456 - 11905: 0xEA71,
	38457 - 11905: 0xEA72,
	38458 - 11905: 0xEA73,
	38459 - 11905: 0xD7E8,
	38460 - 11905: 0xDAE8,
	38461 - 11905: 0xDAE7,
	38462 - 11905: 0xEA74,
	38463 - 11905: 0xB0A2,
	38464 - 11905: 0xCDD3,
	38465 - 11905: 0xEA75,
	38466 - 11905: 0xDAE9,
	38467 - 11905: 0xEA76,
	38468 - 11905: 0xB8BD,
	38469 - 11905: 0xBCCA,
	38470 - 11905: 0xC2BD,
	38471 - 11905: 0xC2A4,
	38472 - 11905: 0xB3C2,
	38473 - 11905: 0xDAEA,
	38474 - 11905: 0xEA77,
	38475 - 11905: 0xC2AA,
	38476 - 11905: 0xC4B0,
	38477 - 11905: 0xBDB5,
	38478 - 11905: 0xEA78,
	38479 - 11905: 0xEA79,
	38480 - 11905: 0xCFDE,
	38481 - 11905: 0xEA7A,
	38482 - 11905: 0xEA7B,
	38483 - 11905: 0xEA7C,
	38484 - 11905: 0xDAEB,
	38485 - 11905: 0xC9C2,
	38486 - 11905: 0xEA7D,
	38487 - 11905: 0xEA7E,
	38488 - 11905: 0xEA80,
	38489 - 11905: 0xEA81,
	38490 - 11905: 0xEA82,
	38491 - 11905: 0xB1DD,
	38492 - 11905: 0xEA83,
	38493 - 11905: 0xEA84,
	38494 - 11905: 0xEA85,
	38495 - 11905: 0xDAEC,
	38496 - 11905: 0xEA86,
	38497 - 11905: 0xB6B8,
	38498 - 11905: 0xD4BA,
	38499 - 11905: 0xEA87,
	38500 - 11905: 0xB3FD,
	38501 - 11905: 0xEA88,
	38502 - 11905: 0xEA89,
	38503 - 11905: 0xDAED,
	38504 - 11905: 0xD4C9,
	38505 - 11905: 0xCFD5,
	38506 - 11905: 0xC5E3,
	38507 - 11905: 0xEA8A,
	38508 - 11905: 0xDAEE,
	38509 - 11905: 0xEA8B,
	38510 - 11905: 0xEA8C,
	38511 - 11905: 0xEA8D,
	38512 - 11905: 0xEA8E,
	38513 - 11905: 0xEA8F,
	38514 - 11905: 0xDAEF,
	38515 - 11905: 0xEA90,
	38516 - 11905: 0xDAF0,
	38517 - 11905: 0xC1EA,
	38518 - 11905: 0xCCD5,
	38519 - 11905: 0xCFDD,
	38520 - 11905: 0xEA91,
	38521 - 11905: 0xEA92,
	38522 - 11905: 0xEA93,
	38523 - 11905: 0xEA94,
	38524 - 11905: 0xEA95,
	38525 - 11905: 0xEA96,
	38526 - 11905: 0xEA97,
	38527 - 11905: 0xEA98,
	38528 - 11905: 0xEA99,
	38529 - 11905: 0xEA9A,
	38530 - 11905: 0xEA9B,
	38531 - 11905: 0xEA9C,
	38532 - 11905: 0xEA9D,
	38533 - 11905: 0xD3E7,
	38534 - 11905: 0xC2A1,
	38535 - 11905: 0xEA9E,
	38536 - 11905: 0xDAF1,
	38537 - 11905: 0xEA9F,
	38538 - 11905: 0xEAA0,
	38539 - 11905: 0xCBE5,
	38540 - 11905: 0xEB40,
	38541 - 11905: 0xDAF2,
	38542 - 11905: 0xEB41,
	38543 - 11905: 0xCBE6,
	38544 - 11905: 0xD2FE,
	38545 - 11905: 0xEB42,
	38546 - 11905: 0xEB43,
	38547 - 11905: 0xEB44,
	38548 - 11905: 0xB8F4,
	38549 - 11905: 0xEB45,
	38550 - 11905: 0xEB46,
	38551 - 11905: 0xDAF3,
	38552 - 11905: 0xB0AF,
	38553 - 11905: 0xCFB6,
	38554 - 11905: 0xEB47,
	38555 - 11905: 0xEB48,
	38556 - 11905: 0xD5CF,
	38557 - 11905: 0xEB49,
	38558 - 11905: 0xEB4A,
	38559 - 11905: 0xEB4B,
	38560 - 11905: 0xEB4C,
	38561 - 11905: 0xEB4D,
	38562 - 11905: 0xEB4E,
	38563 - 11905: 0xEB4F,
	38564 - 11905: 0xEB50,
	38565 - 11905: 0xEB51,
	38566 - 11905: 0xEB52,
	38567 - 11905: 0xCBED,
	38568 - 11905: 0xEB53,
	38569 - 11905: 0xEB54,
	38570 - 11905: 0xEB55,
	38571 - 11905: 0xEB56,
	38572 - 11905: 0xEB57,
	38573 - 11905: 0xEB58,
	38574 - 11905: 0xEB59,
	38575 - 11905: 0xEB5A,
	38576 - 11905: 0xDAF4,
	38577 - 11905: 0xEB5B,
	38578 - 11905: 0xEB5C,
	38579 - 11905: 0xE3C4,
	38580 - 11905: 0xEB5D,
	38581 - 11905: 0xEB5E,
	38582 - 11905: 0xC1A5,
	38583 - 11905: 0xEB5F,
	38584 - 11905: 0xEB60,
	38585 - 11905: 0xF6BF,
	38586 - 11905: 0xEB61,
	38587 - 11905: 0xEB62,
	38588 - 11905: 0xF6C0,
	38589 - 11905: 0xF6C1,
	38590 - 11905: 0xC4D1,
	38591 - 11905: 0xEB63,
	38592 - 11905: 0xC8B8,
	38593 - 11905: 0xD1E3,
	38594 - 11905: 0xEB64,
	38595 - 11905: 0xEB65,
	38596 - 11905: 0xD0DB,
	38597 - 11905: 0xD1C5,
	38598 - 11905: 0xBCAF,
	38599 - 11905: 0xB9CD,
	38600 - 11905: 0xEB66,
	38601 - 11905: 0xEFF4,
	38602 - 11905: 0xEB67,
	38603 - 11905: 0xEB68,
	38604 - 11905: 0xB4C6,
	38605 - 11905: 0xD3BA,
	38606 - 11905: 0xF6C2,
	38607 - 11905: 0xB3FB,
	38608 - 11905: 0xEB69,
	38609 - 11905: 0xEB6A,
	38610 - 11905: 0xF6C3,
	38611 - 11905: 0xEB6B,
	38612 - 11905: 0xEB6C,
	38613 - 11905: 0xB5F1,
	38614 - 11905: 0xEB6D,
	38615 - 11905: 0xEB6E,
	38616 - 11905: 0xEB6F,
	38617 - 11905: 0xEB70,
	38618 - 11905: 0xEB71,
	38619 - 11905: 0xEB72,
	38620 - 11905: 0xEB73,
	38621 - 11905: 0xEB74,
	38622 - 11905: 0xEB75,
	38623 - 11905: 0xEB76,
	38624 - 11905: 0xF6C5,
	38625 - 11905: 0xEB77,
	38626 - 11905: 0xEB78,
	38627 - 11905: 0xEB79,
	38628 - 11905: 0xEB7A,
	38629 - 11905: 0xEB7B,
	38630 - 11905: 0xEB7C,
	38631 - 11905: 0xEB7D,
	38632 - 11905: 0xD3EA,
	38633 - 11905: 0xF6A7,
	38634 - 11905: 0xD1A9,
	38635 - 11905: 0xEB7E,
	38636 - 11905: 0xEB80,
	38637 - 11905: 0xEB81,
	38638 - 11905: 0xEB82,
	38639 - 11905: 0xF6A9,
	38640 - 11905: 0xEB83,
	38641 - 11905: 0xEB84,
	38642 - 11905: 0xEB85,
	38643 - 11905: 0xF6A8,
	38644 - 11905: 0xEB86,
	38645 - 11905: 0xEB87,
	38646 - 11905: 0xC1E3,
	38647 - 11905: 0xC0D7,
	38648 - 11905: 0xEB88,
	38649 - 11905: 0xB1A2,
	38650 - 11905: 0xEB89,
	38651 - 11905: 0xEB8A,
	38652 - 11905: 0xEB8B,
	38653 - 11905: 0xEB8C,
	38654 - 11905: 0xCEED,
	38655 - 11905: 0xEB8D,
	38656 - 11905: 0xD0E8,
	38657 - 11905: 0xF6AB,
	38658 - 11905: 0xEB8E,
	38659 - 11905: 0xEB8F,
	38660 - 11905: 0xCFF6,
	38661 - 11905: 0xEB90,
	38662 - 11905: 0xF6AA,
	38663 - 11905: 0xD5F0,
	38664 - 11905: 0xF6AC,
	38665 - 11905: 0xC3B9,
	38666 - 11905: 0xEB91,
	38667 - 11905: 0xEB92,
	38668 - 11905: 0xEB93,
	38669 - 11905: 0xBBF4,
	38670 - 11905: 0xF6AE,
	38671 - 11905: 0xF6AD,
	38672 - 11905: 0xEB94,
	38673 - 11905: 0xEB95,
	38674 - 11905: 0xEB96,
	38675 - 11905: 0xC4DE,
	38676 - 11905: 0xEB97,
	38677 - 11905: 0xEB98,
	38678 - 11905: 0xC1D8,
	38679 - 11905: 0xEB99,
	38680 - 11905: 0xEB9A,
	38681 - 11905: 0xEB9B,
	38682 - 11905: 0xEB9C,
	38683 - 11905: 0xEB9D,
	38684 - 11905: 0xCBAA,
	38685 - 11905: 0xEB9E,
	38686 - 11905: 0xCFBC,
	38687 - 11905: 0xEB9F,
	38688 - 11905: 0xEBA0,
	38689 - 11905: 0xEC40,
	38690 - 11905: 0xEC41,
	38691 - 11905: 0xEC42,
	38692 - 11905: 0xEC43,
	38693 - 11905: 0xEC44,
	38694 - 11905: 0xEC45,
	38695 - 11905: 0xEC46,
	38696 - 11905: 0xEC47,
	38697 - 11905: 0xEC48,
	38698 - 11905: 0xF6AF,
	38699 - 11905: 0xEC49,
	38700 - 11905: 0xEC4A,
	38701 - 11905: 0xF6B0,
	38702 - 11905: 0xEC4B,
	38703 - 11905: 0xEC4C,
	38704 - 11905: 0xF6B1,
	38705 - 11905: 0xEC4D,
	38706 - 11905: 0xC2B6,
	38707 - 11905: 0xEC4E,
	38708 - 11905: 0xEC4F,
	38709 - 11905: 0xEC50,
	38710 - 11905: 0xEC51,
	38711 - 11905: 0xEC52,
	38712 - 11905: 0xB0D4,
	38713 - 11905: 0xC5F9,
	38714 - 11905: 0xEC53,
	38715 - 11905: 0xEC54,
	38716 - 11905: 0xEC55,
	38717 - 11905: 0xEC56,
	38718 - 11905: 0xF6B2,
	38719 - 11905: 0xEC57,
	38720 - 11905: 0xEC58,
	38721 - 11905: 0xEC59,
	38722 - 11905: 0xEC5A,
	38723 - 11905: 0xEC5B,
	38724 - 11905: 0xEC5C,
	38725 - 11905: 0xEC5D,
	38726 - 11905: 0xEC5E,
	38727 - 11905: 0xEC5F,
	38728 - 11905: 0xEC60,
	38729 - 11905: 0xEC61,
	38730 - 11905: 0xEC62,
	38731 - 11905: 0xEC63,
	38732 - 11905: 0xEC64,
	38733 - 11905: 0xEC65,
	38734 - 11905: 0xEC66,
	38735 - 11905: 0xEC67,
	38736 - 11905: 0xEC68,
	38737 - 11905: 0xEC69,
	38738 - 11905: 0xC7E0,
	38739 - 11905: 0xF6A6,
	38740 - 11905: 0xEC6A,
	38741 - 11905: 0xEC6B,
	38742 - 11905: 0xBEB8,
	38743 - 11905: 0xEC6C,
	38744 - 11905: 0xEC6D,
	38745 - 11905: 0xBEB2,
	38746 - 11905: 0xEC6E,
	38747 - 11905: 0xB5E5,
	38748 - 11905: 0xEC6F,
	38749 - 11905: 0xEC70,
	38750 - 11905: 0xB7C7,
	38751 - 11905: 0xEC71,
	38752 - 11905: 0xBFBF,
	38753 - 11905: 0xC3D2,
	38754 - 11905: 0xC3E6,
	38755 - 11905: 0xEC72,
	38756 - 11905: 0xEC73,
	38757 - 11905: 0xD8CC,
	38758 - 11905: 0xEC74,
	38759 - 11905: 0xEC75,
	38760 - 11905: 0xEC76,
	38761 - 11905: 0xB8EF,
	38762 - 11905: 0xEC77,
	38763 - 11905: 0xEC78,
	38764 - 11905: 0xEC79,
	38765 - 11905: 0xEC7A,
	38766 - 11905: 0xEC7B,
	38767 - 11905: 0xEC7C,
	38768 - 11905: 0xEC7D,
	38769 - 11905: 0xEC7E,
	38770 - 11905: 0xEC80,
	38771 - 11905: 0xBDF9,
	38772 - 11905: 0xD1A5,
	38773 - 11905: 0xEC81,
	38774 - 11905: 0xB0D0,
	38775 - 11905: 0xEC82,
	38776 - 11905: 0xEC83,
	38777 - 11905: 0xEC84,
	38778 - 11905: 0xEC85,
	38779 - 11905: 0xEC86,
	38780 - 11905: 0xF7B0,
	38781 - 11905: 0xEC87,
	38782 - 11905: 0xEC88,
	38783 - 11905: 0xEC89,
	38784 - 11905: 0xEC8A,
	38785 - 11905: 0xEC8B,
	38786 - 11905: 0xEC8C,
	38787 - 11905: 0xEC8D,
	38788 - 11905: 0xEC8E,
	38789 - 11905: 0xF7B1,
	38790 - 11905: 0xEC8F,
	38791 - 11905: 0xEC90,
	38792 - 11905: 0xEC91,
	38793 - 11905: 0xEC92,
	38794 - 11905: 0xEC93,
	38795 - 11905: 0xD0AC,
	38796 - 11905: 0xEC94,
	38797 - 11905: 0xB0B0,
	38798 - 11905: 0xEC95,
	38799 - 11905: 0xEC96,
	38800 - 11905: 0xEC97,
	38801 - 11905: 0xF7B2,
	38802 - 11905: 0xF7B3,
	38803 - 11905: 0xEC98,
	38804 - 11905: 0xF7B4,
	38805 - 11905: 0xEC99,
	38806 - 11905: 0xEC9A,
	38807 - 11905: 0xEC9B,
	38808 - 11905: 0xC7CA,
	38809 - 11905: 0xEC9C,
	38810 - 11905: 0xEC9D,
	38811 - 11905: 0xEC9E,
	38812 - 11905: 0xEC9F,
	38813 - 11905: 0xECA0,
	38814 - 11905: 0xED40,
	38815 - 11905: 0xED41,
	38816 - 11905: 0xBECF,
	38817 - 11905: 0xED42,
	38818 - 11905: 0xED43,
	38819 - 11905: 0xF7B7,
	38820 - 11905: 0xED44,
	38821 - 11905: 0xED45,
	38822 - 11905: 0xED46,
	38823 - 11905: 0xED47,
	38824 - 11905: 0xED48,
	38825 - 11905: 0xED49,
	38826 - 11905: 0xED4A,
	38827 - 11905: 0xF7B6,
	38828 - 11905: 0xED4B,
	38829 - 11905: 0xB1DE,
	38830 - 11905: 0xED4C,
	38831 - 11905: 0xF7B5,
	38832 - 11905: 0xED4D,
	38833 - 11905: 0xED4E,
	38834 - 11905: 0xF7B8,
	38835 - 11905: 0xED4F,
	38836 - 11905: 0xF7B9,
	38837 - 11905: 0xED50,
	38838 - 11905: 0xED51,
	38839 - 11905: 0xED52,
	38840 - 11905: 0xED53,
	38841 - 11905: 0xED54,
	38842 - 11905: 0xED55,
	38843 - 11905: 0xED56,
	38844 - 11905: 0xED57,
	38845 - 11905: 0xED58,
	38846 - 11905: 0xED59,
	38847 - 11905: 0xED5A,
	38848 - 11905: 0xED5B,
	38849 - 11905: 0xED5C,
	38850 - 11905: 0xED5D,
	38851 - 11905: 0xED5E,
	38852 - 11905: 0xED5F,
	38853 - 11905: 0xED60,
	38854 - 11905: 0xED61,
	38855 - 11905: 0xED62,
	38856 - 11905: 0xED63,
	38857 - 11905: 0xED64,
	38858 - 11905: 0xED65,
	38859 - 11905: 0xED66,
	38860 - 11905: 0xED67,
	38861 - 11905: 0xED68,
	38862 - 11905: 0xED69,
	38863 - 11905: 0xED6A,
	38864 - 11905: 0xED6B,
	38865 - 11905: 0xED6C,
	38866 - 11905: 0xED6D,
	38867 - 11905: 0xED6E,
	38868 - 11905: 0xED6F,
	38869 - 11905: 0xED70,
	38870 - 11905: 0xED71,
	38871 - 11905: 0xED72,
	38872 - 11905: 0xED73,
	38873 - 11905: 0xED74,
	38874 - 11905: 0xED75,
	38875 - 11905: 0xED76,
	38876 - 11905: 0xED77,
	38877 - 11905: 0xED78,
	38878 - 11905: 0xED79,
	38879 - 11905: 0xED7A,
	38880 - 11905: 0xED7B,
	38881 - 11905: 0xED7C,
	38882 - 11905: 0xED7D,
	38883 - 11905: 0xED7E,
	38884 - 11905: 0xED80,
	38885 - 11905: 0xED81,
	38886 - 11905: 0xCEA4,
	38887 - 11905: 0xC8CD,
	38888 - 11905: 0xED82,
	38889 - 11905: 0xBAAB,
	38890 - 11905: 0xE8B8,
	38891 - 11905: 0xE8B9,
	38892 - 11905: 0xE8BA,
	38893 - 11905: 0xBEC2,
	38894 - 11905: 0xED83,
	38895 - 11905: 0xED84,
	38896 - 11905: 0xED85,
	38897 - 11905: 0xED86,
	38898 - 11905: 0xED87,
	38899 - 11905: 0xD2F4,
	38900 - 11905: 0xED88,
	38901 - 11905: 0xD4CF,
	38902 - 11905: 0xC9D8,
	38903 - 11905: 0xED89,
	38904 - 11905: 0xED8A,
	38905 - 11905: 0xED8B,
	38906 - 11905: 0xED8C,
	38907 - 11905: 0xED8D,
	38908 - 11905: 0xED8E,
	38909 - 11905: 0xED8F,
	38910 - 11905: 0xED90,
	38911 - 11905: 0xED91,
	38912 - 11905: 0xED92,
	38913 - 11905: 0xED93,
	38914 - 11905: 0xED94,
	38915 - 11905: 0xED95,
	38916 - 11905: 0xED96,
	38917 - 11905: 0xED97,
	38918 - 11905: 0xED98,
	38919 - 11905: 0xED99,
	38920 - 11905: 0xED9A,
	38921 - 11905: 0xED9B,
	38922 - 11905: 0xED9C,
	38923 - 11905: 0xED9D,
	38924 - 11905: 0xED9E,
	38925 - 11905: 0xED9F,
	38926 - 11905: 0xEDA0,
	38927 - 11905: 0xEE40,
	38928 - 11905: 0xEE41,
	38929 - 11905: 0xEE42,
	38930 - 11905: 0xEE43,
	38931 - 11905: 0xEE44,
	38932 - 11905: 0xEE45,
	38933 - 11905: 0xEE46,
	38934 - 11905: 0xEE47,
	38935 - 11905: 0xEE48,
	38936 - 11905: 0xEE49,
	38937 - 11905: 0xEE4A,
	38938 - 11905: 0xEE4B,
	38939 - 11905: 0xEE4C,
	38940 - 11905: 0xEE4D,
	38941 - 11905: 0xEE4E,
	38942 - 11905: 0xEE4F,
	38943 - 11905: 0xEE50,
	38944 - 11905: 0xEE51,
	38945 - 11905: 0xEE52,
	38946 - 11905: 0xEE53,
	38947 - 11905: 0xEE54,
	38948 - 11905: 0xEE55,
	38949 - 11905: 0xEE56,
	38950 - 11905: 0xEE57,
	38951 - 11905: 0xEE58,
	38952 - 11905: 0xEE59,
	38953 - 11905: 0xEE5A,
	38954 - 11905: 0xEE5B,
	38955 - 11905: 0xEE5C,
	38956 - 11905: 0xEE5D,
	38957 - 11905: 0xEE5E,
	38958 - 11905: 0xEE5F,
	38959 - 11905: 0xEE60,
	38960 - 11905: 0xEE61,
	38961 - 11905: 0xEE62,
	38962 - 11905: 0xEE63,
	38963 - 11905: 0xEE64,
	38964 - 11905: 0xEE65,
	38965 - 11905: 0xEE66,
	38966 - 11905: 0xEE67,
	38967 - 11905: 0xEE68,
	38968 - 11905: 0xEE69,
	38969 - 11905: 0xEE6A,
	38970 - 11905: 0xEE6B,
	38971 - 11905: 0xEE6C,
	38972 - 11905: 0xEE6D,
	38973 - 11905: 0xEE6E,
	38974 - 11905: 0xEE6F,
	38975 - 11905: 0xEE70,
	38976 - 11905: 0xEE71,
	38977 - 11905: 0xEE72,
	38978 - 11905: 0xEE73,
	38979 - 11905: 0xEE74,
	38980 - 11905: 0xEE75,
	38981 - 11905: 0xEE76,
	38982 - 11905: 0xEE77,
	38983 - 11905: 0xEE78,
	38984 - 11905: 0xEE79,
	38985 - 11905: 0xEE7A,
	38986 - 11905: 0xEE7B,
	38987 - 11905: 0xEE7C,
	38988 - 11905: 0xEE7D,
	38989 - 11905: 0xEE7E,
	38990 - 11905: 0xEE80,
	38991 - 11905: 0xEE81,
	38992 - 11905: 0xEE82,
	38993 - 11905: 0xEE83,
	38994 - 11905: 0xEE84,
	38995 - 11905: 0xEE85,
	38996 - 11905: 0xEE86,
	38997 - 11905: 0xEE87,
	38998 - 11905: 0xEE88,
	38999 - 11905: 0xEE89,
	39000 - 11905: 0xEE8A,
	39001 - 11905: 0xEE8B,
	39002 - 11905: 0xEE8C,
	39003 - 11905: 0xEE8D,
	39004 - 11905: 0xEE8E,
	39005 - 11905: 0xEE8F,
	39006 - 11905: 0xEE90,
	39007 - 11905: 0xEE91,
	39008 - 11905: 0xEE92,
	39009 - 11905: 0xEE93,
	39010 - 11905: 0xEE94,
	39011 - 11905: 0xEE95,
	39012 - 11905: 0xEE96,
	39013 - 11905: 0xEE97,
	39014 - 11905: 0xEE98,
	39015 - 11905: 0xEE99,
	39016 - 11905: 0xEE9A,
	39017 - 11905: 0xEE9B,
	39018 - 11905: 0xEE9C,
	39019 - 11905: 0xEE9D,
	39020 - 11905: 0xEE9E,
	39021 - 11905: 0xEE9F,
	39022 - 11905: 0xEEA0,
	39023 - 11905: 0xEF40,
	39024 - 11905: 0xEF41,
	39025 - 11905: 0xEF42,
	39026 - 11905: 0xEF43,
	39027 - 11905: 0xEF44,
	39028 - 11905: 0xEF45,
	39029 - 11905: 0xD2B3,
	39030 - 11905: 0xB6A5,
	39031 - 11905: 0xC7EA,
	39032 - 11905: 0xF1FC,
	39033 - 11905: 0xCFEE,
	39034 - 11905: 0xCBB3,
	39035 - 11905: 0xD0EB,
	39036 - 11905: 0xE7EF,
	39037 - 11905: 0xCDE7,
	39038 - 11905: 0xB9CB,
	39039 - 11905: 0xB6D9,
	39040 - 11905: 0xF1FD,
	39041 - 11905: 0xB0E4,
	39042 - 11905: 0xCBCC,
	39043 - 11905: 0xF1FE,
	39044 - 11905: 0xD4A4,
	39045 - 11905: 0xC2AD,
	39046 - 11905: 0xC1EC,
	39047 - 11905: 0xC6C4,
	39048 - 11905: 0xBEB1,
	39049 - 11905: 0xF2A1,
	39050 - 11905: 0xBCD5,
	39051 - 11905: 0xEF46,
	39052 - 11905: 0xF2A2,
	39053 - 11905: 0xF2A3,
	39054 - 11905: 0xEF47,
	39055 - 11905: 0xF2A4,
	39056 - 11905: 0xD2C3,
	39057 - 11905: 0xC6B5,
	39058 - 11905: 0xEF48,
	39059 - 11905: 0xCDC7,
	39060 - 11905: 0xF2A5,
	39061 - 11905: 0xEF49,
	39062 - 11905: 0xD3B1,
	39063 - 11905: 0xBFC5,
	39064 - 11905: 0xCCE2,
	39065 - 11905: 0xEF4A,
	39066 - 11905: 0xF2A6,
	39067 - 11905: 0xF2A7,
	39068 - 11905: 0xD1D5,
	39069 - 11905: 0xB6EE,
	39070 - 11905: 0xF2A8,
	39071 - 11905: 0xF2A9,
	39072 - 11905: 0xB5DF,
	39073 - 11905: 0xF2AA,
	39074 - 11905: 0xF2AB,
	39075 - 11905: 0xEF4B,
	39076 - 11905: 0xB2FC,
	39077 - 11905: 0xF2AC,
	39078 - 11905: 0xF2AD,
	39079 - 11905: 0xC8A7,
	39080 - 11905: 0xEF4C,
	39081 - 11905: 0xEF4D,
	39082 - 11905: 0xEF4E,
	39083 - 11905: 0xEF4F,
	39084 - 11905: 0xEF50,
	39085 - 11905: 0xEF51,
	39086 - 11905: 0xEF52,
	39087 - 11905: 0xEF53,
	39088 - 11905: 0xEF54,
	39089 - 11905: 0xEF55,
	39090 - 11905: 0xEF56,
	39091 - 11905: 0xEF57,
	39092 - 11905: 0xEF58,
	39093 - 11905: 0xEF59,
	39094 - 11905: 0xEF5A,
	39095 - 11905: 0xEF5B,
	39096 - 11905: 0xEF5C,
	39097 - 11905: 0xEF5D,
	39098 - 11905: 0xEF5E,
	39099 - 11905: 0xEF5F,
	39100 - 11905: 0xEF60,
	39101 - 11905: 0xEF61,
	39102 - 11905: 0xEF62,
	39103 - 11905: 0xEF63,
	39104 - 11905: 0xEF64,
	39105 - 11905: 0xEF65,
	39106 - 11905: 0xEF66,
	39107 - 11905: 0xEF67,
	39108 - 11905: 0xEF68,
	39109 - 11905: 0xEF69,
	39110 - 11905: 0xEF6A,
	39111 - 11905: 0xEF6B,
	39112 - 11905: 0xEF6C,
	39113 - 11905: 0xEF6D,
	39114 - 11905: 0xEF6E,
	39115 - 11905: 0xEF6F,
	39116 - 11905: 0xEF70,
	39117 - 11905: 0xEF71,
	39118 - 11905: 0xB7E7,
	39119 - 11905: 0xEF72,
	39120 - 11905: 0xEF73,
	39121 - 11905: 0xECA9,
	39122 - 11905: 0xECAA,
	39123 - 11905: 0xECAB,
	39124 - 11905: 0xEF74,
	39125 - 11905: 0xECAC,
	39126 - 11905: 0xEF75,
	39127 - 11905: 0xEF76,
	39128 - 11905: 0xC6AE,
	39129 - 11905: 0xECAD,
	39130 - 11905: 0xECAE,
	39131 - 11905: 0xEF77,
	39132 - 11905: 0xEF78,
	39133 - 11905: 0xEF79,
	39134 - 11905: 0xB7C9,
	39135 - 11905: 0xCAB3,
	39136 - 11905: 0xEF7A,
	39137 - 11905: 0xEF7B,
	39138 - 11905: 0xEF7C,
	39139 - 11905: 0xEF7D,
	39140 - 11905: 0xEF7E,
	39141 - 11905: 0xEF80,
	39142 - 11905: 0xEF81,
	39143 - 11905: 0xE2B8,
	39144 - 11905: 0xF7CF,
	39145 - 11905: 0xEF82,
	39146 - 11905: 0xEF83,
	39147 - 11905: 0xEF84,
	39148 - 11905: 0xEF85,
	39149 - 11905: 0xEF86,
	39150 - 11905: 0xEF87,
	39151 - 11905: 0xEF88,
	39152 - 11905: 0xEF89,
	39153 - 11905: 0xEF8A,
	39154 - 11905: 0xEF8B,
	39155 - 11905: 0xEF8C,
	39156 - 11905: 0xEF8D,
	39157 - 11905: 0xEF8E,
	39158 - 11905: 0xEF8F,
	39159 - 11905: 0xEF90,
	39160 - 11905: 0xEF91,
	39161 - 11905: 0xEF92,
	39162 - 11905: 0xEF93,
	39163 - 11905: 0xEF94,
	39164 - 11905: 0xEF95,
	39165 - 11905: 0xEF96,
	39166 - 11905: 0xEF97,
	39167 - 11905: 0xEF98,
	39168 - 11905: 0xEF99,
	39169 - 11905: 0xEF9A,
	39170 - 11905: 0xEF9B,
	39171 - 11905: 0xEF9C,
	39172 - 11905: 0xEF9D,
	39173 - 11905: 0xEF9E,
	39174 - 11905: 0xEF9F,
	39175 - 11905: 0xEFA0,
	39176 - 11905: 0xF040,
	39177 - 11905: 0xF041,
	39178 - 11905: 0xF042,
	39179 - 11905: 0xF043,
	39180 - 11905: 0xF044,
	39181 - 11905: 0xF7D0,
	39182 - 11905: 0xF045,
	39183 - 11905: 0xF046,
	39184 - 11905: 0xB2CD,
	39185 - 11905: 0xF047,
	39186 - 11905: 0xF048,
	39187 - 11905: 0xF049,
	39188 - 11905: 0xF04A,
	39189 - 11905: 0xF04B,
	39190 - 11905: 0xF04C,
	39191 - 11905: 0xF04D,
	39192 - 11905: 0xF04E,
	39193 - 11905: 0xF04F,
	39194 - 11905: 0xF050,
	39195 - 11905: 0xF051,
	39196 - 11905: 0xF052,
	39197 - 11905: 0xF053,
	39198 - 11905: 0xF054,
	39199 - 11905: 0xF055,
	39200 - 11905: 0xF056,
	39201 - 11905: 0xF057,
	39202 - 11905: 0xF058,
	39203 - 11905: 0xF059,
	39204 - 11905: 0xF05A,
	39205 - 11905: 0xF05B,
	39206 - 11905: 0xF05C,
	39207 - 11905: 0xF05D,
	39208 - 11905: 0xF05E,
	39209 - 11905: 0xF05F,
	39210 - 11905: 0xF060,
	39211 - 11905: 0xF061,
	39212 - 11905: 0xF062,
	39213 - 11905: 0xF063,
	39214 - 11905: 0xF7D1,
	39215 - 11905: 0xF064,
	39216 - 11905: 0xF065,
	39217 - 11905: 0xF066,
	39218 - 11905: 0xF067,
	39219 - 11905: 0xF068,
	39220 - 11905: 0xF069,
	39221 - 11905: 0xF06A,
	39222 - 11905: 0xF06B,
	39223 - 11905: 0xF06C,
	39224 - 11905: 0xF06D,
	39225 - 11905: 0xF06E,
	39226 - 11905: 0xF06F,
	39227 - 11905: 0xF070,
	39228 - 11905: 0xF071,
	39229 - 11905: 0xF072,
	39230 - 11905: 0xF073,
	39231 - 11905: 0xF074,
	39232 - 11905: 0xF075,
	39233 - 11905: 0xF076,
	39234 - 11905: 0xF077,
	39235 - 11905: 0xF078,
	39236 - 11905: 0xF079,
	39237 - 11905: 0xF07A,
	39238 - 11905: 0xF07B,
	39239 - 11905: 0xF07C,
	39240 - 11905: 0xF07D,
	39241 - 11905: 0xF07E,
	39242 - 11905: 0xF080,
	39243 - 11905: 0xF081,
	39244 - 11905: 0xF082,
	39245 - 11905: 0xF083,
	39246 - 11905: 0xF084,
	39247 - 11905: 0xF085,
	39248 - 11905: 0xF086,
	39249 - 11905: 0xF087,
	39250 - 11905: 0xF088,
	39251 - 11905: 0xF089,
	39252 - 11905: 0xF7D3,
	39253 - 11905: 0xF7D2,
	39254 - 11905: 0xF08A,
	39255 - 11905: 0xF08B,
	39256 - 11905: 0xF08C,
	39257 - 11905: 0xF08D,
	39258 - 11905: 0xF08E,
	39259 - 11905: 0xF08F,
	39260 - 11905: 0xF090,
	39261 - 11905: 0xF091,
	39262 - 11905: 0xF092,
	39263 - 11905: 0xF093,
	39264 - 11905: 0xF094,
	39265 - 11905: 0xF095,
	39266 - 11905: 0xF096,
	39267 - 11905: 0xE2BB,
	39268 - 11905: 0xF097,
	39269 - 11905: 0xBCA2,
	39270 - 11905: 0xF098,
	39271 - 11905: 0xE2BC,
	39272 - 11905: 0xE2BD,
	39273 - 11905: 0xE2BE,
	39274 - 11905: 0xE2BF,
	39275 - 11905: 0xE2C0,
	39276 - 11905: 0xE2C1,
	39277 - 11905: 0xB7B9,
	39278 - 11905: 0xD2FB,
	39279 - 11905: 0xBDA4,
	39280 - 11905: 0xCACE,
	39281 - 11905: 0xB1A5,
	39282 - 11905: 0xCBC7,
	39283 - 11905: 0xF099,
	39284 - 11905: 0xE2C2,
	39285 - 11905: 0xB6FC,
	39286 - 11905: 0xC8C4,
	39287 - 11905: 0xE2C3,
	39288 - 11905: 0xF09A,
	39289 - 11905: 0xF09B,
	39290 - 11905: 0xBDC8,
	39291 - 11905: 0xF09C,
	39292 - 11905: 0xB1FD,
	39293 - 11905: 0xE2C4,
	39294 - 11905: 0xF09D,
	39295 - 11905: 0xB6F6,
	39296 - 11905: 0xE2C5,
	39297 - 11905: 0xC4D9,
	39298 - 11905: 0xF09E,
	39299 - 11905: 0xF09F,
	39300 - 11905: 0xE2C6,
	39301 - 11905: 0xCFDA,
	39302 - 11905: 0xB9DD,
	39303 - 11905: 0xE2C7,
	39304 - 11905: 0xC0A1,
	39305 - 11905: 0xF0A0,
	39306 - 11905: 0xE2C8,
	39307 - 11905: 0xB2F6,
	39308 - 11905: 0xF140,
	39309 - 11905: 0xE2C9,
	39310 - 11905: 0xF141,
	39311 - 11905: 0xC1F3,
	39312 - 11905: 0xE2CA,
	39313 - 11905: 0xE2CB,
	39314 - 11905: 0xC2F8,
	39315 - 11905: 0xE2CC,
	39316 - 11905: 0xE2CD,
	39317 - 11905: 0xE2CE,
	39318 - 11905: 0xCAD7,
	39319 - 11905: 0xD8B8,
	39320 - 11905: 0xD9E5,
	39321 - 11905: 0xCFE3,
	39322 - 11905: 0xF142,
	39323 - 11905: 0xF143,
	39324 - 11905: 0xF144,
	39325 - 11905: 0xF145,
	39326 - 11905: 0xF146,
	39327 - 11905: 0xF147,
	39328 - 11905: 0xF148,
	39329 - 11905: 0xF149,
	39330 - 11905: 0xF14A,
	39331 - 11905: 0xF14B,
	39332 - 11905: 0xF14C,
	39333 - 11905: 0xF0A5,
	39334 - 11905: 0xF14D,
	39335 - 11905: 0xF14E,
	39336 - 11905: 0xDCB0,
	39337 - 11905: 0xF14F,
	39338 - 11905: 0xF150,
	39339 - 11905: 0xF151,
	39340 - 11905: 0xF152,
	39341 - 11905: 0xF153,
	39342 - 11905: 0xF154,
	39343 - 11905: 0xF155,
	39344 - 11905: 0xF156,
	39345 - 11905: 0xF157,
	39346 - 11905: 0xF158,
	39347 - 11905: 0xF159,
	39348 - 11905: 0xF15A,
	39349 - 11905: 0xF15B,
	39350 - 11905: 0xF15C,
	39351 - 11905: 0xF15D,
	39352 - 11905: 0xF15E,
	39353 - 11905: 0xF15F,
	39354 - 11905: 0xF160,
	39355 - 11905: 0xF161,
	39356 - 11905: 0xF162,
	39357 - 11905: 0xF163,
	39358 - 11905: 0xF164,
	39359 - 11905: 0xF165,
	39360 - 11905: 0xF166,
	39361 - 11905: 0xF167,
	39362 - 11905: 0xF168,
	39363 - 11905: 0xF169,
	39364 - 11905: 0xF16A,
	39365 - 11905: 0xF16B,
	39366 - 11905: 0xF16C,
	39367 - 11905: 0xF16D,
	39368 - 11905: 0xF16E,
	39369 - 11905: 0xF16F,
	39370 - 11905: 0xF170,
	39371 - 11905: 0xF171,
	39372 - 11905: 0xF172,
	39373 - 11905: 0xF173,
	39374 - 11905: 0xF174,
	39375 - 11905: 0xF175,
	39376 - 11905: 0xF176,
	39377 - 11905: 0xF177,
	39378 - 11905: 0xF178,
	39379 - 11905: 0xF179,
	39380 - 11905: 0xF17A,
	39381 - 11905: 0xF17B,
	39382 - 11905: 0xF17C,
	39383 - 11905: 0xF17D,
	39384 - 11905: 0xF17E,
	39385 - 11905: 0xF180,
	39386 - 11905: 0xF181,
	39387 - 11905: 0xF182,
	39388 - 11905: 0xF183,
	39389 - 11905: 0xF184,
	39390 - 11905: 0xF185,
	39391 - 11905: 0xF186,
	39392 - 11905: 0xF187,
	39393 - 11905: 0xF188,
	39394 - 11905: 0xF189,
	39395 - 11905: 0xF18A,
	39396 - 11905: 0xF18B,
	39397 - 11905: 0xF18C,
	39398 - 11905: 0xF18D,
	39399 - 11905: 0xF18E,
	39400 - 11905: 0xF18F,
	39401 - 11905: 0xF190,
	39402 - 11905: 0xF191,
	39403 - 11905: 0xF192,
	39404 - 11905: 0xF193,
	39405 - 11905: 0xF194,
	39406 - 11905: 0xF195,
	39407 - 11905: 0xF196,
	39408 - 11905: 0xF197,
	39409 - 11905: 0xF198,
	39410 - 11905: 0xF199,
	39411 - 11905: 0xF19A,
	39412 - 11905: 0xF19B,
	39413 - 11905: 0xF19C,
	39414 - 11905: 0xF19D,
	39415 - 11905: 0xF19E,
	39416 - 11905: 0xF19F,
	39417 - 11905: 0xF1A0,
	39418 - 11905: 0xF240,
	39419 - 11905: 0xF241,
	39420 - 11905: 0xF242,
	39421 - 11905: 0xF243,
	39422 - 11905: 0xF244,
	39423 - 11905: 0xF245,
	39424 - 11905: 0xF246,
	39425 - 11905: 0xF247,
	39426 - 11905: 0xF248,
	39427 - 11905: 0xF249,
	39428 - 11905: 0xF24A,
	39429 - 11905: 0xF24B,
	39430 - 11905: 0xF24C,
	39431 - 11905: 0xF24D,
	39432 - 11905: 0xF24E,
	39433 - 11905: 0xF24F,
	39434 - 11905: 0xF250,
	39435 - 11905: 0xF251,
	39436 - 11905: 0xF252,
	39437 - 11905: 0xF253,
	39438 - 11905: 0xF254,
	39439 - 11905: 0xF255,
	39440 - 11905: 0xF256,
	39441 - 11905: 0xF257,
	39442 - 11905: 0xF258,
	39443 - 11905: 0xF259,
	39444 - 11905: 0xF25A,
	39445 - 11905: 0xF25B,
	39446 - 11905: 0xF25C,
	39447 - 11905: 0xF25D,
	39448 - 11905: 0xF25E,
	39449 - 11905: 0xF25F,
	39450 - 11905: 0xF260,
	39451 - 11905: 0xF261,
	39452 - 11905: 0xF262,
	39453 - 11905: 0xF263,
	39454 - 11905: 0xF264,
	39455 - 11905: 0xF265,
	39456 - 11905: 0xF266,
	39457 - 11905: 0xF267,
	39458 - 11905: 0xF268,
	39459 - 11905: 0xF269,
	39460 - 11905: 0xF26A,
	39461 - 11905: 0xF26B,
	39462 - 11905: 0xF26C,
	39463 - 11905: 0xF26D,
	39464 - 11905: 0xF26E,
	39465 - 11905: 0xF26F,
	39466 - 11905: 0xF270,
	39467 - 11905: 0xF271,
	39468 - 11905: 0xF272,
	39469 - 11905: 0xF273,
	39470 - 11905: 0xF274,
	39471 - 11905: 0xF275,
	39472 - 11905: 0xF276,
	39473 - 11905: 0xF277,
	39474 - 11905: 0xF278,
	39475 - 11905: 0xF279,
	39476 - 11905: 0xF27A,
	39477 - 11905: 0xF27B,
	39478 - 11905: 0xF27C,
	39479 - 11905: 0xF27D,
	39480 - 11905: 0xF27E,
	39481 - 11905: 0xF280,
	39482 - 11905: 0xF281,
	39483 - 11905: 0xF282,
	39484 - 11905: 0xF283,
	39485 - 11905: 0xF284,
	39486 - 11905: 0xF285,
	39487 - 11905: 0xF286,
	39488 - 11905: 0xF287,
	39489 - 11905: 0xF288,
	39490 - 11905: 0xF289,
	39491 - 11905: 0xF28A,
	39492 - 11905: 0xF28B,
	39493 - 11905: 0xF28C,
	39494 - 11905: 0xF28D,
	39495 - 11905: 0xF28E,
	39496 - 11905: 0xF28F,
	39497 - 11905: 0xF290,
	39498 - 11905: 0xF291,
	39499 - 11905: 0xF292,
	39500 - 11905: 0xF293,
	39501 - 11905: 0xF294,
	39502 - 11905: 0xF295,
	39503 - 11905: 0xF296,
	39504 - 11905: 0xF297,
	39505 - 11905: 0xF298,
	39506 - 11905: 0xF299,
	39507 - 11905: 0xF29A,
	39508 - 11905: 0xF29B,
	39509 - 11905: 0xF29C,
	39510 - 11905: 0xF29D,
	39511 - 11905: 0xF29E,
	39512 - 11905: 0xF29F,
	39513 - 11905: 0xF2A0,
	39514 - 11905: 0xF340,
	39515 - 11905: 0xF341,
	39516 - 11905: 0xF342,
	39517 - 11905: 0xF343,
	39518 - 11905: 0xF344,
	39519 - 11905: 0xF345,
	39520 - 11905: 0xF346,
	39521 - 11905: 0xF347,
	39522 - 11905: 0xF348,
	39523 - 11905: 0xF349,
	39524 - 11905: 0xF34A,
	39525 - 11905: 0xF34B,
	39526 - 11905: 0xF34C,
	39527 - 11905: 0xF34D,
	39528 - 11905: 0xF34E,
	39529 - 11905: 0xF34F,
	39530 - 11905: 0xF350,
	39531 - 11905: 0xF351,
	39532 - 11905: 0xC2ED,
	39533 - 11905: 0xD4A6,
	39534 - 11905: 0xCDD4,
	39535 - 11905: 0xD1B1,
	39536 - 11905: 0xB3DB,
	39537 - 11905: 0xC7FD,
	39538 - 11905: 0xF352,
	39539 - 11905: 0xB2B5,
	39540 - 11905: 0xC2BF,
	39541 - 11905: 0xE6E0,
	39542 - 11905: 0xCABB,
	39543 - 11905: 0xE6E1,
	39544 - 11905: 0xE6E2,
	39545 - 11905: 0xBED4,
	39546 - 11905: 0xE6E3,
	39547 - 11905: 0xD7A4,
	39548 - 11905: 0xCDD5,
	39549 - 11905: 0xE6E5,
	39550 - 11905: 0xBCDD,
	39551 - 11905: 0xE6E4,
	39552 - 11905: 0xE6E6,
	39553 - 11905: 0xE6E7,
	39554 - 11905: 0xC2EE,
	39555 - 11905: 0xF353,
	39556 - 11905: 0xBDBE,
	39557 - 11905: 0xE6E8,
	39558 - 11905: 0xC2E6,
	39559 - 11905: 0xBAA7,
	39560 - 11905: 0xE6E9,
	39561 - 11905: 0xF354,
	39562 - 11905: 0xE6EA,
	39563 - 11905: 0xB3D2,
	39564 - 11905: 0xD1E9,
	39565 - 11905: 0xF355,
	39566 - 11905: 0xF356,
	39567 - 11905: 0xBFA5,
	39568 - 11905: 0xE6EB,
	39569 - 11905: 0xC6EF,
	39570 - 11905: 0xE6EC,
	39571 - 11905: 0xE6ED,
	39572 - 11905: 0xF357,
	39573 - 11905: 0xF358,
	39574 - 11905: 0xE6EE,
	39575 - 11905: 0xC6AD,
	39576 - 11905: 0xE6EF,
	39577 - 11905: 0xF359,
	39578 - 11905: 0xC9A7,
	39579 - 11905: 0xE6F0,
	39580 - 11905: 0xE6F1,
	39581 - 11905: 0xE6F2,
	39582 - 11905: 0xE5B9,
	39583 - 11905: 0xE6F3,
	39584 - 11905: 0xE6F4,
	39585 - 11905: 0xC2E2,
	39586 - 11905: 0xE6F5,
	39587 - 11905: 0xE6F6,
	39588 - 11905: 0xD6E8,
	39589 - 11905: 0xE6F7,
	39590 - 11905: 0xF35A,
	39591 - 11905: 0xE6F8,
	39592 - 11905: 0xB9C7,
	39593 - 11905: 0xF35B,
	39594 - 11905: 0xF35C,
	39595 - 11905: 0xF35D,
	39596 - 11905: 0xF35E,
	39597 - 11905: 0xF35F,
	39598 - 11905: 0xF360,
	39599 - 11905: 0xF361,
	39600 - 11905: 0xF7BB,
	39601 - 11905: 0xF7BA,
	39602 - 11905: 0xF362,
	39603 - 11905: 0xF363,
	39604 - 11905: 0xF364,
	39605 - 11905: 0xF365,
	39606 - 11905: 0xF7BE,
	39607 - 11905: 0xF7BC,
	39608 - 11905: 0xBAA1,
	39609 - 11905: 0xF366,
	39610 - 11905: 0xF7BF,
	39611 - 11905: 0xF367,
	39612 - 11905: 0xF7C0,
	39613 - 11905: 0xF368,
	39614 - 11905: 0xF369,
	39615 - 11905: 0xF36A,
	39616 - 11905: 0xF7C2,
	39617 - 11905: 0xF7C1,
	39618 - 11905: 0xF7C4,
	39619 - 11905: 0xF36B,
	39620 - 11905: 0xF36C,
	39621 - 11905: 0xF7C3,
	39622 - 11905: 0xF36D,
	39623 - 11905: 0xF36E,
	39624 - 11905: 0xF36F,
	39625 - 11905: 0xF370,
	39626 - 11905: 0xF371,
	39627 - 11905: 0xF7C5,
	39628 - 11905: 0xF7C6,
	39629 - 11905: 0xF372,
	39630 - 11905: 0xF373,
	39631 - 11905: 0xF374,
	39632 - 11905: 0xF375,
	39633 - 11905: 0xF7C7,
	39634 - 11905: 0xF376,
	39635 - 11905: 0xCBE8,
	39636 - 11905: 0xF377,
	39637 - 11905: 0xF378,
	39638 - 11905: 0xF379,
	39639 - 11905: 0xF37A,
	39640 - 11905: 0xB8DF,
	39641 - 11905: 0xF37B,
	39642 - 11905: 0xF37C,
	39643 - 11905: 0xF37D,
	39644 - 11905: 0xF37E,
	39645 - 11905: 0xF380,
	39646 - 11905: 0xF381,
	39647 - 11905: 0xF7D4,
	39648 - 11905: 0xF382,
	39649 - 11905: 0xF7D5,
	39650 - 11905: 0xF383,
	39651 - 11905: 0xF384,
	39652 - 11905: 0xF385,
	39653 - 11905: 0xF386,
	39654 - 11905: 0xF7D6,
	39655 - 11905: 0xF387,
	39656 - 11905: 0xF388,
	39657 - 11905: 0xF389,
	39658 - 11905: 0xF38A,
	39659 - 11905: 0xF7D8,
	39660 - 11905: 0xF38B,
	39661 - 11905: 0xF7DA,
	39662 - 11905: 0xF38C,
	39663 - 11905: 0xF7D7,
	39664 - 11905: 0xF38D,
	39665 - 11905: 0xF38E,
	39666 - 11905: 0xF38F,
	39667 - 11905: 0xF390,
	39668 - 11905: 0xF391,
	39669 - 11905: 0xF392,
	39670 - 11905: 0xF393,
	39671 - 11905: 0xF394,
	39672 - 11905: 0xF395,
	39673 - 11905: 0xF7DB,
	39674 - 11905: 0xF396,
	39675 - 11905: 0xF7D9,
	39676 - 11905: 0xF397,
	39677 - 11905: 0xF398,
	39678 - 11905: 0xF399,
	39679 - 11905: 0xF39A,
	39680 - 11905: 0xF39B,
	39681 - 11905: 0xF39C,
	39682 - 11905: 0xF39D,
	39683 - 11905: 0xD7D7,
	39684 - 11905: 0xF39E,
	39685 - 11905: 0xF39F,
	39686 - 11905: 0xF3A0,
	39687 - 11905: 0xF440,
	39688 - 11905: 0xF7DC,
	39689 - 11905: 0xF441,
	39690 - 11905: 0xF442,
	39691 - 11905: 0xF443,
	39692 - 11905: 0xF444,
	39693 - 11905: 0xF445,
	39694 - 11905: 0xF446,
	39695 - 11905: 0xF7DD,
	39696 - 11905: 0xF447,
	39697 - 11905: 0xF448,
	39698 - 11905: 0xF449,
	39699 - 11905: 0xF7DE,
	39700 - 11905: 0xF44A,
	39701 - 11905: 0xF44B,
	39702 - 11905: 0xF44C,
	39703 - 11905: 0xF44D,
	39704 - 11905: 0xF44E,
	39705 - 11905: 0xF44F,
	39706 - 11905: 0xF450,
	39707 - 11905: 0xF451,
	39708 - 11905: 0xF452,
	39709 - 11905: 0xF453,
	39710 - 11905: 0xF454,
	39711 - 11905: 0xF7DF,
	39712 - 11905: 0xF455,
	39713 - 11905: 0xF456,
	39714 - 11905: 0xF457,
	39715 - 11905: 0xF7E0,
	39716 - 11905: 0xF458,
	39717 - 11905: 0xF459,
	39718 - 11905: 0xF45A,
	39719 - 11905: 0xF45B,
	39720 - 11905: 0xF45C,
	39721 - 11905: 0xF45D,
	39722 - 11905: 0xF45E,
	39723 - 11905: 0xF45F,
	39724 - 11905: 0xF460,
	39725 - 11905: 0xF461,
	39726 - 11905: 0xF462,
	39727 - 11905: 0xDBCB,
	39728 - 11905: 0xF463,
	39729 - 11905: 0xF464,
	39730 - 11905: 0xD8AA,
	39731 - 11905: 0xF465,
	39732 - 11905: 0xF466,
	39733 - 11905: 0xF467,
	39734 - 11905: 0xF468,
	39735 - 11905: 0xF469,
	39736 - 11905: 0xF46A,
	39737 - 11905: 0xF46B,
	39738 - 11905: 0xF46C,
	39739 - 11905: 0xE5F7,
	39740 - 11905: 0xB9ED,
	39741 - 11905: 0xF46D,
	39742 - 11905: 0xF46E,
	39743 - 11905: 0xF46F,
	39744 - 11905: 0xF470,
	39745 - 11905: 0xBFFD,
	39746 - 11905: 0xBBEA,
	39747 - 11905: 0xF7C9,
	39748 - 11905: 0xC6C7,
	39749 - 11905: 0xF7C8,
	39750 - 11905: 0xF471,
	39751 - 11905: 0xF7CA,
	39752 - 11905: 0xF7CC,
	39753 - 11905: 0xF7CB,
	39754 - 11905: 0xF472,
	39755 - 11905: 0xF473,
	39756 - 11905: 0xF474,
	39757 - 11905: 0xF7CD,
	39758 - 11905: 0xF475,
	39759 - 11905: 0xCEBA,
	39760 - 11905: 0xF476,
	39761 - 11905: 0xF7CE,
	39762 - 11905: 0xF477,
	39763 - 11905: 0xF478,
	39764 - 11905: 0xC4A7,
	39765 - 11905: 0xF479,
	39766 - 11905: 0xF47A,
	39767 - 11905: 0xF47B,
	39768 - 11905: 0xF47C,
	39769 - 11905: 0xF47D,
	39770 - 11905: 0xF47E,
	39771 - 11905: 0xF480,
	39772 - 11905: 0xF481,
	39773 - 11905: 0xF482,
	39774 - 11905: 0xF483,
	39775 - 11905: 0xF484,
	39776 - 11905: 0xF485,
	39777 - 11905: 0xF486,
	39778 - 11905: 0xF487,
	39779 - 11905: 0xF488,
	39780 - 11905: 0xF489,
	39781 - 11905: 0xF48A,
	39782 - 11905: 0xF48B,
	39783 - 11905: 0xF48C,
	39784 - 11905: 0xF48D,
	39785 - 11905: 0xF48E,
	39786 - 11905: 0xF48F,
	39787 - 11905: 0xF490,
	39788 - 11905: 0xF491,
	39789 - 11905: 0xF492,
	39790 - 11905: 0xF493,
	39791 - 11905: 0xF494,
	39792 - 11905: 0xF495,
	39793 - 11905: 0xF496,
	39794 - 11905: 0xF497,
	39795 - 11905: 0xF498,
	39796 - 11905: 0xF499,
	39797 - 11905: 0xF49A,
	39798 - 11905: 0xF49B,
	39799 - 11905: 0xF49C,
	39800 - 11905: 0xF49D,
	39801 - 11905: 0xF49E,
	39802 - 11905: 0xF49F,
	39803 - 11905: 0xF4A0,
	39804 - 11905: 0xF540,
	39805 - 11905: 0xF541,
	39806 - 11905: 0xF542,
	39807 - 11905: 0xF543,
	39808 - 11905: 0xF544,
	39809 - 11905: 0xF545,
	39810 - 11905: 0xF546,
	39811 - 11905: 0xF547,
	39812 - 11905: 0xF548,
	39813 - 11905: 0xF549,
	39814 - 11905: 0xF54A,
	39815 - 11905: 0xF54B,
	39816 - 11905: 0xF54C,
	39817 - 11905: 0xF54D,
	39818 - 11905: 0xF54E,
	39819 - 11905: 0xF54F,
	39820 - 11905: 0xF550,
	39821 - 11905: 0xF551,
	39822 - 11905: 0xF552,
	39823 - 11905: 0xF553,
	39824 - 11905: 0xF554,
	39825 - 11905: 0xF555,
	39826 - 11905: 0xF556,
	39827 - 11905: 0xF557,
	39828 - 11905: 0xF558,
	39829 - 11905: 0xF559,
	39830 - 11905: 0xF55A,
	39831 - 11905: 0xF55B,
	39832 - 11905: 0xF55C,
	39833 - 11905: 0xF55D,
	39834 - 11905: 0xF55E,
	39835 - 11905: 0xF55F,
	39836 - 11905: 0xF560,
	39837 - 11905: 0xF561,
	39838 - 11905: 0xF562,
	39839 - 11905: 0xF563,
	39840 - 11905: 0xF564,
	39841 - 11905: 0xF565,
	39842 - 11905: 0xF566,
	39843 - 11905: 0xF567,
	39844 - 11905: 0xF568,
	39845 - 11905: 0xF569,
	39846 - 11905: 0xF56A,
	39847 - 11905: 0xF56B,
	39848 - 11905: 0xF56C,
	39849 - 11905: 0xF56D,
	39850 - 11905: 0xF56E,
	39851 - 11905: 0xF56F,
	39852 - 11905: 0xF570,
	39853 - 11905: 0xF571,
	39854 - 11905: 0xF572,
	39855 - 11905: 0xF573,
	39856 - 11905: 0xF574,
	39857 - 11905: 0xF575,
	39858 - 11905: 0xF576,
	39859 - 11905: 0xF577,
	39860 - 11905: 0xF578,
	39861 - 11905: 0xF579,
	39862 - 11905: 0xF57A,
	39863 - 11905: 0xF57B,
	39864 - 11905: 0xF57C,
	39865 - 11905: 0xF57D,
	39866 - 11905: 0xF57E,
	39867 - 11905: 0xF580,
	39868 - 11905: 0xF581,
	39869 - 11905: 0xF582,
	39870 - 11905: 0xF583,
	39871 - 11905: 0xF584,
	39872 - 11905: 0xF585,
	39873 - 11905: 0xF586,
	39874 - 11905: 0xF587,
	39875 - 11905: 0xF588,
	39876 - 11905: 0xF589,
	39877 - 11905: 0xF58A,
	39878 - 11905: 0xF58B,
	39879 - 11905: 0xF58C,
	39880 - 11905: 0xF58D,
	39881 - 11905: 0xF58E,
	39882 - 11905: 0xF58F,
	39883 - 11905: 0xF590,
	39884 - 11905: 0xF591,
	39885 - 11905: 0xF592,
	39886 - 11905: 0xF593,
	39887 - 11905: 0xF594,
	39888 - 11905: 0xF595,
	39889 - 11905: 0xF596,
	39890 - 11905: 0xF597,
	39891 - 11905: 0xF598,
	39892 - 11905: 0xF599,
	39893 - 11905: 0xF59A,
	39894 - 11905: 0xF59B,
	39895 - 11905: 0xF59C,
	39896 - 11905: 0xF59D,
	39897 - 11905: 0xF59E,
	39898 - 11905: 0xF59F,
	39899 - 11905: 0xF5A0,
	39900 - 11905: 0xF640,
	39901 - 11905: 0xF641,
	39902 - 11905: 0xF642,
	39903 - 11905: 0xF643,
	39904 - 11905: 0xF644,
	39905 - 11905: 0xF645,
	39906 - 11905: 0xF646,
	39907 - 11905: 0xF647,
	39908 - 11905: 0xF648,
	39909 - 11905: 0xF649,
	39910 - 11905: 0xF64A,
	39911 - 11905: 0xF64B,
	39912 - 11905: 0xF64C,
	39913 - 11905: 0xF64D,
	39914 - 11905: 0xF64E,
	39915 - 11905: 0xF64F,
	39916 - 11905: 0xF650,
	39917 - 11905: 0xF651,
	39918 - 11905: 0xF652,
	39919 - 11905: 0xF653,
	39920 - 11905: 0xF654,
	39921 - 11905: 0xF655,
	39922 - 11905: 0xF656,
	39923 - 11905: 0xF657,
	39924 - 11905: 0xF658,
	39925 - 11905: 0xF659,
	39926 - 11905: 0xF65A,
	39927 - 11905: 0xF65B,
	39928 - 11905: 0xF65C,
	39929 - 11905: 0xF65D,
	39930 - 11905: 0xF65E,
	39931 - 11905: 0xF65F,
	39932 - 11905: 0xF660,
	39933 - 11905: 0xF661,
	39934 - 11905: 0xF662,
	39935 - 11905: 0xF663,
	39936 - 11905: 0xF664,
	39937 - 11905: 0xF665,
	39938 - 11905: 0xF666,
	39939 - 11905: 0xF667,
	39940 - 11905: 0xF668,
	39941 - 11905: 0xF669,
	39942 - 11905: 0xF66A,
	39943 - 11905: 0xF66B,
	39944 - 11905: 0xF66C,
	39945 - 11905: 0xF66D,
	39946 - 11905: 0xF66E,
	39947 - 11905: 0xF66F,
	39948 - 11905: 0xF670,
	39949 - 11905: 0xF671,
	39950 - 11905: 0xF672,
	39951 - 11905: 0xF673,
	39952 - 11905: 0xF674,
	39953 - 11905: 0xF675,
	39954 - 11905: 0xF676,
	39955 - 11905: 0xF677,
	39956 - 11905: 0xF678,
	39957 - 11905: 0xF679,
	39958 - 11905: 0xF67A,
	39959 - 11905: 0xF67B,
	39960 - 11905: 0xF67C,
	39961 - 11905: 0xF67D,
	39962 - 11905: 0xF67E,
	39963 - 11905: 0xF680,
	39964 - 11905: 0xF681,
	39965 - 11905: 0xF682,
	39966 - 11905: 0xF683,
	39967 - 11905: 0xF684,
	39968 - 11905: 0xF685,
	39969 - 11905: 0xF686,
	39970 - 11905: 0xF687,
	39971 - 11905: 0xF688,
	39972 - 11905: 0xF689,
	39973 - 11905: 0xF68A,
	39974 - 11905: 0xF68B,
	39975 - 11905: 0xF68C,
	39976 - 11905: 0xF68D,
	39977 - 11905: 0xF68E,
	39978 - 11905: 0xF68F,
	39979 - 11905: 0xF690,
	39980 - 11905: 0xF691,
	39981 - 11905: 0xF692,
	39982 - 11905: 0xF693,
	39983 - 11905: 0xF694,
	39984 - 11905: 0xF695,
	39985 - 11905: 0xF696,
	39986 - 11905: 0xF697,
	39987 - 11905: 0xF698,
	39988 - 11905: 0xF699,
	39989 - 11905: 0xF69A,
	39990 - 11905: 0xF69B,
	39991 - 11905: 0xF69C,
	39992 - 11905: 0xF69D,
	39993 - 11905: 0xF69E,
	39994 - 11905: 0xF69F,
	39995 - 11905: 0xF6A0,
	39996 - 11905: 0xF740,
	39997 - 11905: 0xF741,
	39998 - 11905: 0xF742,
	39999 - 11905: 0xF743,
	40000 - 11905: 0xF744,
	40001 - 11905: 0xF745,
	40002 - 11905: 0xF746,
	40003 - 11905: 0xF747,
	40004 - 11905: 0xF748,
	40005 - 11905: 0xF749,
	40006 - 11905: 0xF74A,
	40007 - 11905: 0xF74B,
	40008 - 11905: 0xF74C,
	40009 - 11905: 0xF74D,
	40010 - 11905: 0xF74E,
	40011 - 11905: 0xF74F,
	40012 - 11905: 0xF750,
	40013 - 11905: 0xF751,
	40014 - 11905: 0xF752,
	40015 - 11905: 0xF753,
	40016 - 11905: 0xF754,
	40017 - 11905: 0xF755,
	40018 - 11905: 0xF756,
	40019 - 11905: 0xF757,
	40020 - 11905: 0xF758,
	40021 - 11905: 0xF759,
	40022 - 11905: 0xF75A,
	40023 - 11905: 0xF75B,
	40024 - 11905: 0xF75C,
	40025 - 11905: 0xF75D,
	40026 - 11905: 0xF75E,
	40027 - 11905: 0xF75F,
	40028 - 11905: 0xF760,
	40029 - 11905: 0xF761,
	40030 - 11905: 0xF762,
	40031 - 11905: 0xF763,
	40032 - 11905: 0xF764,
	40033 - 11905: 0xF765,
	40034 - 11905: 0xF766,
	40035 - 11905: 0xF767,
	40036 - 11905: 0xF768,
	40037 - 11905: 0xF769,
	40038 - 11905: 0xF76A,
	40039 - 11905: 0xF76B,
	40040 - 11905: 0xF76C,
	40041 - 11905: 0xF76D,
	40042 - 11905: 0xF76E,
	40043 - 11905: 0xF76F,
	40044 - 11905: 0xF770,
	40045 - 11905: 0xF771,
	40046 - 11905: 0xF772,
	40047 - 11905: 0xF773,
	40048 - 11905: 0xF774,
	40049 - 11905: 0xF775,
	40050 - 11905: 0xF776,
	40051 - 11905: 0xF777,
	40052 - 11905: 0xF778,
	40053 - 11905: 0xF779,
	40054 - 11905: 0xF77A,
	40055 - 11905: 0xF77B,
	40056 - 11905: 0xF77C,
	40057 - 11905: 0xF77D,
	40058 - 11905: 0xF77E,
	40059 - 11905: 0xF780,
	40060 - 11905: 0xD3E3,
	40061 - 11905: 0xF781,
	40062 - 11905: 0xF782,
	40063 - 11905: 0xF6CF,
	40064 - 11905: 0xF783,
	40065 - 11905: 0xC2B3,
	40066 - 11905: 0xF6D0,
	40067 - 11905: 0xF784,
	40068 - 11905: 0xF785,
	40069 - 11905: 0xF6D1,
	40070 - 11905: 0xF6D2,
	40071 - 11905: 0xF6D3,
	40072 - 11905: 0xF6D4,
	40073 - 11905: 0xF786,
	40074 - 11905: 0xF787,
	40075 - 11905: 0xF6D6,
	40076 - 11905: 0xF788,
	40077 - 11905: 0xB1AB,
	40078 - 11905: 0xF6D7,
	40079 - 11905: 0xF789,
	40080 - 11905: 0xF6D8,
	40081 - 11905: 0xF6D9,
	40082 - 11905: 0xF6DA,
	40083 - 11905: 0xF78A,
	40084 - 11905: 0xF6DB,
	40085 - 11905: 0xF6DC,
	40086 - 11905: 0xF78B,
	40087 - 11905: 0xF78C,
	40088 - 11905: 0xF78D,
	40089 - 11905: 0xF78E,
	40090 - 11905: 0xF6DD,
	40091 - 11905: 0xF6DE,
	40092 - 11905: 0xCFCA,
	40093 - 11905: 0xF78F,
	40094 - 11905: 0xF6DF,
	40095 - 11905: 0xF6E0,
	40096 - 11905: 0xF6E1,
	40097 - 11905: 0xF6E2,
	40098 - 11905: 0xF6E3,
	40099 - 11905: 0xF6E4,
	40100 - 11905: 0xC0F0,
	40101 - 11905: 0xF6E5,
	40102 - 11905: 0xF6E6,
	40103 - 11905: 0xF6E7,
	40104 - 11905: 0xF6E8,
	40105 - 11905: 0xF6E9,
	40106 - 11905: 0xF790,
	40107 - 11905: 0xF6EA,
	40108 - 11905: 0xF791,
	40109 - 11905: 0xF6EB,
	40110 - 11905: 0xF6EC,
	40111 - 11905: 0xF792,
	40112 - 11905: 0xF6ED,
	40113 - 11905: 0xF6EE,
	40114 - 11905: 0xF6EF,
	40115 - 11905: 0xF6F0,
	40116 - 11905: 0xF6F1,
	40117 - 11905: 0xF6F2,
	40118 - 11905: 0xF6F3,
	40119 - 11905: 0xF6F4,
	40120 - 11905: 0xBEA8,
	40121 - 11905: 0xF793,
	40122 - 11905: 0xF6F5,
	40123 - 11905: 0xF6F6,
	40124 - 11905: 0xF6F7,
	40125 - 11905: 0xF6F8,
	40126 - 11905: 0xF794,
	40127 - 11905: 0xF795,
	40128 - 11905: 0xF796,
	40129 - 11905: 0xF797,
	40130 - 11905: 0xF798,
	40131 - 11905: 0xC8FA,
	40132 - 11905: 0xF6F9,
	40133 - 11905: 0xF6FA,
	40134 - 11905: 0xF6FB,
	40135 - 11905: 0xF6FC,
	40136 - 11905: 0xF799,
	40137 - 11905: 0xF79A,
	40138 - 11905: 0xF6FD,
	40139 - 11905: 0xF6FE,
	40140 - 11905: 0xF7A1,
	40141 - 11905: 0xF7A2,
	40142 - 11905: 0xF7A3,
	40143 - 11905: 0xF7A4,
	40144 - 11905: 0xF7A5,
	40145 - 11905: 0xF79B,
	40146 - 11905: 0xF79C,
	40147 - 11905: 0xF7A6,
	40148 - 11905: 0xF7A7,
	40149 - 11905: 0xF7A8,
	40150 - 11905: 0xB1EE,
	40151 - 11905: 0xF7A9,
	40152 - 11905: 0xF7AA,
	40153 - 11905: 0xF7AB,
	40154 - 11905: 0xF79D,
	40155 - 11905: 0xF79E,
	40156 - 11905: 0xF7AC,
	40157 - 11905: 0xF7AD,
	40158 - 11905: 0xC1DB,
	40159 - 11905: 0xF7AE,
	40160 - 11905: 0xF79F,
	40161 - 11905: 0xF7A0,
	40162 - 11905: 0xF7AF,
	40163 - 11905: 0xF840,
	40164 - 11905: 0xF841,
	40165 - 11905: 0xF842,
	40166 - 11905: 0xF843,
	40167 - 11905: 0xF844,
	40168 - 11905: 0xF845,
	40169 - 11905: 0xF846,
	40170 - 11905: 0xF847,
	40171 - 11905: 0xF848,
	40172 - 11905: 0xF849,
	40173 - 11905: 0xF84A,
	40174 - 11905: 0xF84B,
	40175 - 11905: 0xF84C,
	40176 - 11905: 0xF84D,
	40177 - 11905: 0xF84E,
	40178 - 11905: 0xF84F,
	40179 - 11905: 0xF850,
	40180 - 11905: 0xF851,
	40181 - 11905: 0xF852,
	40182 - 11905: 0xF853,
	40183 - 11905: 0xF854,
	40184 - 11905: 0xF855,
	40185 - 11905: 0xF856,
	40186 - 11905: 0xF857,
	40187 - 11905: 0xF858,
	40188 - 11905: 0xF859,
	40189 - 11905: 0xF85A,
	40190 - 11905: 0xF85B,
	40191 - 11905: 0xF85C,
	40192 - 11905: 0xF85D,
	40193 - 11905: 0xF85E,
	40194 - 11905: 0xF85F,
	40195 - 11905: 0xF860,
	40196 - 11905: 0xF861,
	40197 - 11905: 0xF862,
	40198 - 11905: 0xF863,
	40199 - 11905: 0xF864,
	40200 - 11905: 0xF865,
	40201 - 11905: 0xF866,
	40202 - 11905: 0xF867,
	40203 - 11905: 0xF868,
	40204 - 11905: 0xF869,
	40205 - 11905: 0xF86A,
	40206 - 11905: 0xF86B,
	40207 - 11905: 0xF86C,
	40208 - 11905: 0xF86D,
	40209 - 11905: 0xF86E,
	40210 - 11905: 0xF86F,
	40211 - 11905: 0xF870,
	40212 - 11905: 0xF871,
	40213 - 11905: 0xF872,
	40214 - 11905: 0xF873,
	40215 - 11905: 0xF874,
	40216 - 11905: 0xF875,
	40217 - 11905: 0xF876,
	40218 - 11905: 0xF877,
	40219 - 11905: 0xF878,
	40220 - 11905: 0xF879,
	40221 - 11905: 0xF87A,
	40222 - 11905: 0xF87B,
	40223 - 11905: 0xF87C,
	40224 - 11905: 0xF87D,
	40225 - 11905: 0xF87E,
	40226 - 11905: 0xF880,
	40227 - 11905: 0xF881,
	40228 - 11905: 0xF882,
	40229 - 11905: 0xF883,
	40230 - 11905: 0xF884,
	40231 - 11905: 0xF885,
	40232 - 11905: 0xF886,
	40233 - 11905: 0xF887,
	40234 - 11905: 0xF888,
	40235 - 11905: 0xF889,
	40236 - 11905: 0xF88A,
	40237 - 11905: 0xF88B,
	40238 - 11905: 0xF88C,
	40239 - 11905: 0xF88D,
	40240 - 11905: 0xF88E,
	40241 - 11905: 0xF88F,
	40242 - 11905: 0xF890,
	40243 - 11905: 0xF891,
	40244 - 11905: 0xF892,
	40245 - 11905: 0xF893,
	40246 - 11905: 0xF894,
	40247 - 11905: 0xF895,
	40248 - 11905: 0xF896,
	40249 - 11905: 0xF897,
	40250 - 11905: 0xF898,
	40251 - 11905: 0xF899,
	40252 - 11905: 0xF89A,
	40253 - 11905: 0xF89B,
	40254 - 11905: 0xF89C,
	40255 - 11905: 0xF89D,
	40256 - 11905: 0xF89E,
	40257 - 11905: 0xF89F,
	40258 - 11905: 0xF8A0,
	40259 - 11905: 0xF940,
	40260 - 11905: 0xF941,
	40261 - 11905: 0xF942,
	40262 - 11905: 0xF943,
	40263 - 11905: 0xF944,
	40264 - 11905: 0xF945,
	40265 - 11905: 0xF946,
	40266 - 11905: 0xF947,
	40267 - 11905: 0xF948,
	40268 - 11905: 0xF949,
	40269 - 11905: 0xF94A,
	40270 - 11905: 0xF94B,
	40271 - 11905: 0xF94C,
	40272 - 11905: 0xF94D,
	40273 - 11905: 0xF94E,
	40274 - 11905: 0xF94F,
	40275 - 11905: 0xF950,
	40276 - 11905: 0xF951,
	40277 - 11905: 0xF952,
	40278 - 11905: 0xF953,
	40279 - 11905: 0xF954,
	40280 - 11905: 0xF955,
	40281 - 11905: 0xF956,
	40282 - 11905: 0xF957,
	40283 - 11905: 0xF958,
	40284 - 11905: 0xF959,
	40285 - 11905: 0xF95A,
	40286 - 11905: 0xF95B,
	40287 - 11905: 0xF95C,
	40288 - 11905: 0xF95D,
	40289 - 11905: 0xF95E,
	40290 - 11905: 0xF95F,
	40291 - 11905: 0xF960,
	40292 - 11905: 0xF961,
	40293 - 11905: 0xF962,
	40294 - 11905: 0xF963,
	40295 - 11905: 0xF964,
	40296 - 11905: 0xF965,
	40297 - 11905: 0xF966,
	40298 - 11905: 0xF967,
	40299 - 11905: 0xF968,
	40300 - 11905: 0xF969,
	40301 - 11905: 0xF96A,
	40302 - 11905: 0xF96B,
	40303 - 11905: 0xF96C,
	40304 - 11905: 0xF96D,
	40305 - 11905: 0xF96E,
	40306 - 11905: 0xF96F,
	40307 - 11905: 0xF970,
	40308 - 11905: 0xF971,
	40309 - 11905: 0xF972,
	40310 - 11905: 0xF973,
	40311 - 11905: 0xF974,
	40312 - 11905: 0xF975,
	40313 - 11905: 0xF976,
	40314 - 11905: 0xF977,
	40315 - 11905: 0xF978,
	40316 - 11905: 0xF979,
	40317 - 11905: 0xF97A,
	40318 - 11905: 0xF97B,
	40319 - 11905: 0xF97C,
	40320 - 11905: 0xF97D,
	40321 - 11905: 0xF97E,
	40322 - 11905: 0xF980,
	40323 - 11905: 0xF981,
	40324 - 11905: 0xF982,
	40325 - 11905: 0xF983,
	40326 - 11905: 0xF984,
	40327 - 11905: 0xF985,
	40328 - 11905: 0xF986,
	40329 - 11905: 0xF987,
	40330 - 11905: 0xF988,
	40331 - 11905: 0xF989,
	40332 - 11905: 0xF98A,
	40333 - 11905: 0xF98B,
	40334 - 11905: 0xF98C,
	40335 - 11905: 0xF98D,
	40336 - 11905: 0xF98E,
	40337 - 11905: 0xF98F,
	40338 - 11905: 0xF990,
	40339 - 11905: 0xF991,
	40340 - 11905: 0xF992,
	40341 - 11905: 0xF993,
	40342 - 11905: 0xF994,
	40343 - 11905: 0xF995,
	40344 - 11905: 0xF996,
	40345 - 11905: 0xF997,
	40346 - 11905: 0xF998,
	40347 - 11905: 0xF999,
	40348 - 11905: 0xF99A,
	40349 - 11905: 0xF99B,
	40350 - 11905: 0xF99C,
	40351 - 11905: 0xF99D,
	40352 - 11905: 0xF99E,
	40353 - 11905: 0xF99F,
	40354 - 11905: 0xF9A0,
	40355 - 11905: 0xFA40,
	40356 - 11905: 0xFA41,
	40357 - 11905: 0xFA42,
	40358 - 11905: 0xFA43,
	40359 - 11905: 0xFA44,
	40360 - 11905: 0xFA45,
	40361 - 11905: 0xFA46,
	40362 - 11905: 0xFA47,
	40363 - 11905: 0xFA48,
	40364 - 11905: 0xFA49,
	40365 - 11905: 0xFA4A,
	40366 - 11905: 0xFA4B,
	40367 - 11905: 0xFA4C,
	40368 - 11905: 0xFA4D,
	40369 - 11905: 0xFA4E,
	40370 - 11905: 0xFA4F,
	40371 - 11905: 0xFA50,
	40372 - 11905: 0xFA51,
	40373 - 11905: 0xFA52,
	40374 - 11905: 0xFA53,
	40375 - 11905: 0xFA54,
	40376 - 11905: 0xFA55,
	40377 - 11905: 0xFA56,
	40378 - 11905: 0xFA57,
	40379 - 11905: 0xFA58,
	40380 - 11905: 0xFA59,
	40381 - 11905: 0xFA5A,
	40382 - 11905: 0xFA5B,
	40383 - 11905: 0xFA5C,
	40384 - 11905: 0xFA5D,
	40385 - 11905: 0xFA5E,
	40386 - 11905: 0xFA5F,
	40387 - 11905: 0xFA60,
	40388 - 11905: 0xFA61,
	40389 - 11905: 0xFA62,
	40390 - 11905: 0xFA63,
	40391 - 11905: 0xFA64,
	40392 - 11905: 0xFA65,
	40393 - 11905: 0xFA66,
	40394 - 11905: 0xFA67,
	40395 - 11905: 0xFA68,
	40396 - 11905: 0xFA69,
	40397 - 11905: 0xFA6A,
	40398 - 11905: 0xFA6B,
	40399 - 11905: 0xFA6C,
	40400 - 11905: 0xFA6D,
	40401 - 11905: 0xFA6E,
	40402 - 11905: 0xFA6F,
	40403 - 11905: 0xFA70,
	40404 - 11905: 0xFA71,
	40405 - 11905: 0xFA72,
	40406 - 11905: 0xFA73,
	40407 - 11905: 0xFA74,
	40408 - 11905: 0xFA75,
	40409 - 11905: 0xFA76,
	40410 - 11905: 0xFA77,
	40411 - 11905: 0xFA78,
	40412 - 11905: 0xFA79,
	40413 - 11905: 0xFA7A,
	40414 - 11905: 0xFA7B,
	40415 - 11905: 0xFA7C,
	40416 - 11905: 0xFA7D,
	40417 - 11905: 0xFA7E,
	40418 - 11905: 0xFA80,
	40419 - 11905: 0xFA81,
	40420 - 11905: 0xFA82,
	40421 - 11905: 0xFA83,
	40422 - 11905: 0xFA84,
	40423 - 11905: 0xFA85,
	40424 - 11905: 0xFA86,
	40425 - 11905: 0xFA87,
	40426 - 11905: 0xFA88,
	40427 - 11905: 0xFA89,
	40428 - 11905: 0xFA8A,
	40429 - 11905: 0xFA8B,
	40430 - 11905: 0xFA8C,
	40431 - 11905: 0xFA8D,
	40432 - 11905: 0xFA8E,
	40433 - 11905: 0xFA8F,
	40434 - 11905: 0xFA90,
	40435 - 11905: 0xFA91,
	40436 - 11905: 0xFA92,
	40437 - 11905: 0xFA93,
	40438 - 11905: 0xFA94,
	40439 - 11905: 0xFA95,
	40440 - 11905: 0xFA96,
	40441 - 11905: 0xFA97,
	40442 - 11905: 0xFA98,
	40443 - 11905: 0xFA99,
	40444 - 11905: 0xFA9A,
	40445 - 11905: 0xFA9B,
	40446 - 11905: 0xFA9C,
	40447 - 11905: 0xFA9D,
	40448 - 11905: 0xFA9E,
	40449 - 11905: 0xFA9F,
	40450 - 11905: 0xFAA0,
	40451 - 11905: 0xFB40,
	40452 - 11905: 0xFB41,
	40453 - 11905: 0xFB42,
	40454 - 11905: 0xFB43,
	40455 - 11905: 0xFB44,
	40456 - 11905: 0xFB45,
	40457 - 11905: 0xFB46,
	40458 - 11905: 0xFB47,
	40459 - 11905: 0xFB48,
	40460 - 11905: 0xFB49,
	40461 - 11905: 0xFB4A,
	40462 - 11905: 0xFB4B,
	40463 - 11905: 0xFB4C,
	40464 - 11905: 0xFB4D,
	40465 - 11905: 0xFB4E,
	40466 - 11905: 0xFB4F,
	40467 - 11905: 0xFB50,
	40468 - 11905: 0xFB51,
	40469 - 11905: 0xFB52,
	40470 - 11905: 0xFB53,
	40471 - 11905: 0xFB54,
	40472 - 11905: 0xFB55,
	40473 - 11905: 0xFB56,
	40474 - 11905: 0xFB57,
	40475 - 11905: 0xFB58,
	40476 - 11905: 0xFB59,
	40477 - 11905: 0xFB5A,
	40478 - 11905: 0xFB5B,
	40479 - 11905: 0xC4F1,
	40480 - 11905: 0xF0AF,
	40481 - 11905: 0xBCA6,
	40482 - 11905: 0xF0B0,
	40483 - 11905: 0xC3F9,
	40484 - 11905: 0xFB5C,
	40485 - 11905: 0xC5B8,
	40486 - 11905: 0xD1BB,
	40487 - 11905: 0xFB5D,
	40488 - 11905: 0xF0B1,
	40489 - 11905: 0xF0B2,
	40490 - 11905: 0xF0B3,
	40491 - 11905: 0xF0B4,
	40492 - 11905: 0xF0B5,
	40493 - 11905: 0xD1BC,
	40494 - 11905: 0xFB5E,
	40495 - 11905: 0xD1EC,
	40496 - 11905: 0xFB5F,
	40497 - 11905: 0xF0B7,
	40498 - 11905: 0xF0B6,
	40499 - 11905: 0xD4A7,
	40500 - 11905: 0xFB60,
	40501 - 11905: 0xCDD2,
	40502 - 11905: 0xF0B8,
	40503 - 11905: 0xF0BA,
	40504 - 11905: 0xF0B9,
	40505 - 11905: 0xF0BB,
	40506 - 11905: 0xF0BC,
	40507 - 11905: 0xFB61,
	40508 - 11905: 0xFB62,
	40509 - 11905: 0xB8EB,
	40510 - 11905: 0xF0BD,
	40511 - 11905: 0xBAE8,
	40512 - 11905: 0xFB63,
	40513 - 11905: 0xF0BE,
	40514 - 11905: 0xF0BF,
	40515 - 11905: 0xBEE9,
	40516 - 11905: 0xF0C0,
	40517 - 11905: 0xB6EC,
	40518 - 11905: 0xF0C1,
	40519 - 11905: 0xF0C2,
	40520 - 11905: 0xF0C3,
	40521 - 11905: 0xF0C4,
	40522 - 11905: 0xC8B5,
	40523 - 11905: 0xF0C5,
	40524 - 11905: 0xF0C6,
	40525 - 11905: 0xFB64,
	40526 - 11905: 0xF0C7,
	40527 - 11905: 0xC5F4,
	40528 - 11905: 0xFB65,
	40529 - 11905: 0xF0C8,
	40530 - 11905: 0xFB66,
	40531 - 11905: 0xFB67,
	40532 - 11905: 0xFB68,
	40533 - 11905: 0xF0C9,
	40534 - 11905: 0xFB69,
	40535 - 11905: 0xF0CA,
	40536 - 11905: 0xF7BD,
	40537 - 11905: 0xFB6A,
	40538 - 11905: 0xF0CB,
	40539 - 11905: 0xF0CC,
	40540 - 11905: 0xF0CD,
	40541 - 11905: 0xFB6B,
	40542 - 11905: 0xF0CE,
	40543 - 11905: 0xFB6C,
	40544 - 11905: 0xFB6D,
	40545 - 11905: 0xFB6E,
	40546 - 11905: 0xFB6F,
	40547 - 11905: 0xF0CF,
	40548 - 11905: 0xBAD7,
	40549 - 11905: 0xFB70,
	40550 - 11905: 0xF0D0,
	40551 - 11905: 0xF0D1,
	40552 - 11905: 0xF0D2,
	40553 - 11905: 0xF0D3,
	40554 - 11905: 0xF0D4,
	40555 - 11905: 0xF0D5,
	40556 - 11905: 0xF0D6,
	40557 - 11905: 0xF0D8,
	40558 - 11905: 0xFB71,
	40559 - 11905: 0xFB72,
	40560 - 11905: 0xD3A5,
	40561 - 11905: 0xF0D7,
	40562 - 11905: 0xFB73,
	40563 - 11905: 0xF0D9,
	40564 - 11905: 0xFB74,
	40565 - 11905: 0xFB75,
	40566 - 11905: 0xFB76,
	40567 - 11905: 0xFB77,
	40568 - 11905: 0xFB78,
	40569 - 11905: 0xFB79,
	40570 - 11905: 0xFB7A,
	40571 - 11905: 0xFB7B,
	40572 - 11905: 0xFB7C,
	40573 - 11905: 0xFB7D,
	40574 - 11905: 0xF5BA,
	40575 - 11905: 0xC2B9,
	40576 - 11905: 0xFB7E,
	40577 - 11905: 0xFB80,
	40578 - 11905: 0xF7E4,
	40579 - 11905: 0xFB81,
	40580 - 11905: 0xFB82,
	40581 - 11905: 0xFB83,
	40582 - 11905: 0xFB84,
	40583 - 11905: 0xF7E5,
	40584 - 11905: 0xF7E6,
	40585 - 11905: 0xFB85,
	40586 - 11905: 0xFB86,
	40587 - 11905: 0xF7E7,
	40588 - 11905: 0xFB87,
	40589 - 11905: 0xFB88,
	40590 - 11905: 0xFB89,
	40591 - 11905: 0xFB8A,
	40592 - 11905: 0xFB8B,
	40593 - 11905: 0xFB8C,
	40594 - 11905: 0xF7E8,
	40595 - 11905: 0xC2B4,
	40596 - 11905: 0xFB8D,
	40597 - 11905: 0xFB8E,
	40598 - 11905: 0xFB8F,
	40599 - 11905: 0xFB90,
	40600 - 11905: 0xFB91,
	40601 - 11905: 0xFB92,
	40602 - 11905: 0xFB93,
	40603 - 11905: 0xFB94,
	40604 - 11905: 0xFB95,
	40605 - 11905: 0xF7EA,
	40606 - 11905: 0xFB96,
	40607 - 11905: 0xF7EB,
	40608 - 11905: 0xFB97,
	40609 - 11905: 0xFB98,
	40610 - 11905: 0xFB99,
	40611 - 11905: 0xFB9A,
	40612 - 11905: 0xFB9B,
	40613 - 11905: 0xFB9C,
	40614 - 11905: 0xC2F3,
	40615 - 11905: 0xFB9D,
	40616 - 11905: 0xFB9E,
	40617 - 11905: 0xFB9F,
	40618 - 11905: 0xFBA0,
	40619 - 11905: 0xFC40,
	40620 - 11905: 0xFC41,
	40621 - 11905: 0xFC42,
	40622 - 11905: 0xFC43,
	40623 - 11905: 0xFC44,
	40624 - 11905: 0xFC45,
	40625 - 11905: 0xFC46,
	40626 - 11905: 0xFC47,
	40627 - 11905: 0xFC48,
	40628 - 11905: 0xF4F0,
	40629 - 11905: 0xFC49,
	40630 - 11905: 0xFC4A,
	40631 - 11905: 0xFC4B,
	40632 - 11905: 0xF4EF,
	40633 - 11905: 0xFC4C,
	40634 - 11905: 0xFC4D,
	40635 - 11905: 0xC2E9,
	40636 - 11905: 0xFC4E,
	40637 - 11905: 0xF7E1,
	40638 - 11905: 0xF7E2,
	40639 - 11905: 0xFC4F,
	40640 - 11905: 0xFC50,
	40641 - 11905: 0xFC51,
	40642 - 11905: 0xFC52,
	40643 - 11905: 0xFC53,
	40644 - 11905: 0xBBC6,
	40645 - 11905: 0xFC54,
	40646 - 11905: 0xFC55,
	40647 - 11905: 0xFC56,
	40648 - 11905: 0xFC57,
	40649 - 11905: 0xD9E4,
	40650 - 11905: 0xFC58,
	40651 - 11905: 0xFC59,
	40652 - 11905: 0xFC5A,
	40653 - 11905: 0xCAF2,
	40654 - 11905: 0xC0E8,
	40655 - 11905: 0xF0A4,
	40656 - 11905: 0xFC5B,
	40657 - 11905: 0xBADA,
	40658 - 11905: 0xFC5C,
	40659 - 11905: 0xFC5D,
	40660 - 11905: 0xC7AD,
	40661 - 11905: 0xFC5E,
	40662 - 11905: 0xFC5F,
	40663 - 11905: 0xFC60,
	40664 - 11905: 0xC4AC,
	40665 - 11905: 0xFC61,
	40666 - 11905: 0xFC62,
	40667 - 11905: 0xF7EC,
	40668 - 11905: 0xF7ED,
	40669 - 11905: 0xF7EE,
	40670 - 11905: 0xFC63,
	40671 - 11905: 0xF7F0,
	40672 - 11905: 0xF7EF,
	40673 - 11905: 0xFC64,
	40674 - 11905: 0xF7F1,
	40675 - 11905: 0xFC65,
	40676 - 11905: 0xFC66,
	40677 - 11905: 0xF7F4,
	40678 - 11905: 0xFC67,
	40679 - 11905: 0xF7F3,
	40680 - 11905: 0xFC68,
	40681 - 11905: 0xF7F2,
	40682 - 11905: 0xF7F5,
	40683 - 11905: 0xFC69,
	40684 - 11905: 0xFC6A,
	40685 - 11905: 0xFC6B,
	40686 - 11905: 0xFC6C,
	40687 - 11905: 0xF7F6,
	40688 - 11905: 0xFC6D,
	40689 - 11905: 0xFC6E,
	40690 - 11905: 0xFC6F,
	40691 - 11905: 0xFC70,
	40692 - 11905: 0xFC71,
	40693 - 11905: 0xFC72,
	40694 - 11905: 0xFC73,
	40695 - 11905: 0xFC74,
	40696 - 11905: 0xFC75,
	40697 - 11905: 0xEDE9,
	40698 - 11905: 0xFC76,
	40699 - 11905: 0xEDEA,
	40700 - 11905: 0xEDEB,
	40701 - 11905: 0xFC77,
	40702 - 11905: 0xF6BC,
	40703 - 11905: 0xFC78,
	40704 - 11905: 0xFC79,
	40705 - 11905: 0xFC7A,
	40706 - 11905: 0xFC7B,
	40707 - 11905: 0xFC7C,
	40708 - 11905: 0xFC7D,
	40709 - 11905: 0xFC7E,
	40710 - 11905: 0xFC80,
	40711 - 11905: 0xFC81,
	40712 - 11905: 0xFC82,
	40713 - 11905: 0xFC83,
	40714 - 11905: 0xFC84,
	40715 - 11905: 0xF6BD,
	40716 - 11905: 0xFC85,
	40717 - 11905: 0xF6BE,
	40718 - 11905: 0xB6A6,
	40719 - 11905: 0xFC86,
	40720 - 11905: 0xD8BE,
	40721 - 11905: 0xFC87,
	40722 - 11905: 0xFC88,
	40723 - 11905: 0xB9C4,
	40724 - 11905: 0xFC89,
	40725 - 11905: 0xFC8A,
	40726 - 11905: 0xFC8B,
	40727 - 11905: 0xD8BB,
	40728 - 11905: 0xFC8C,
	40729 - 11905: 0xDCB1,
	40730 - 11905: 0xFC8D,
	40731 - 11905: 0xFC8E,
	40732 - 11905: 0xFC8F,
	40733 - 11905: 0xFC90,
	40734 - 11905: 0xFC91,
	40735 - 11905: 0xFC92,
	40736 - 11905: 0xCAF3,
	40737 - 11905: 0xFC93,
	40738 - 11905: 0xF7F7,
	40739 - 11905: 0xFC94,
	40740 - 11905: 0xFC95,
	40741 - 11905: 0xFC96,
	40742 - 11905: 0xFC97,
	40743 - 11905: 0xFC98,
	40744 - 11905: 0xFC99,
	40745 - 11905: 0xFC9A,
	40746 - 11905: 0xFC9B,
	40747 - 11905: 0xFC9C,
	40748 - 11905: 0xF7F8,
	40749 - 11905: 0xFC9D,
	40750 - 11905: 0xFC9E,
	40751 - 11905: 0xF7F9,
	40752 - 11905: 0xFC9F,
	40753 - 11905: 0xFCA0,
	40754 - 11905: 0xFD40,
	40755 - 11905: 0xFD41,
	40756 - 11905: 0xFD42,
	40757 - 11905: 0xFD43,
	40758 - 11905: 0xFD44,
	40759 - 11905: 0xF7FB,
	40760 - 11905: 0xFD45,
	40761 - 11905: 0xF7FA,
	40762 - 11905: 0xFD46,
	40763 - 11905: 0xB1C7,
	40764 - 11905: 0xFD47,
	40765 - 11905: 0xF7FC,
	40766 - 11905: 0xF7FD,
	40767 - 11905: 0xFD48,
	40768 - 11905: 0xFD49,
	40769 - 11905: 0xFD4A,
	40770 - 11905: 0xFD4B,
	40771 - 11905: 0xFD4C,
	40772 - 11905: 0xF7FE,
	40773 - 11905: 0xFD4D,
	40774 - 11905: 0xFD4E,
	40775 - 11905: 0xFD4F,
	40776 - 11905: 0xFD50,
	40777 - 11905: 0xFD51,
	40778 - 11905: 0xFD52,
	40779 - 11905: 0xFD53,
	40780 - 11905: 0xFD54,
	40781 - 11905: 0xFD55,
	40782 - 11905: 0xFD56,
	40783 - 11905: 0xFD57,
	40784 - 11905: 0xC6EB,
	40785 - 11905: 0xECB4,
	40786 - 11905: 0xFD58,
	40787 - 11905: 0xFD59,
	40788 - 11905: 0xFD5A,
	40789 - 11905: 0xFD5B,
	40790 - 11905: 0xFD5C,
	40791 - 11905: 0xFD5D,
	40792 - 11905: 0xFD5E,
	40793 - 11905: 0xFD5F,
	40794 - 11905: 0xFD60,
	40795 - 11905: 0xFD61,
	40796 - 11905: 0xFD62,
	40797 - 11905: 0xFD63,
	40798 - 11905: 0xFD64,
	40799 - 11905: 0xFD65,
	40800 - 11905: 0xFD66,
	40801 - 11905: 0xFD67,
	40802 - 11905: 0xFD68,
	40803 - 11905: 0xFD69,
	40804 - 11905: 0xFD6A,
	40805 - 11905: 0xFD6B,
	40806 - 11905: 0xFD6C,
	40807 - 11905: 0xFD6D,
	40808 - 11905: 0xFD6E,
	40809 - 11905: 0xFD6F,
	40810 - 11905: 0xFD70,
	40811 - 11905: 0xFD71,
	40812 - 11905: 0xFD72,
	40813 - 11905: 0xFD73,
	40814 - 11905: 0xFD74,
	40815 - 11905: 0xFD75,
	40816 - 11905: 0xFD76,
	40817 - 11905: 0xFD77,
	40818 - 11905: 0xFD78,
	40819 - 11905: 0xFD79,
	40820 - 11905: 0xFD7A,
	40821 - 11905: 0xFD7B,
	40822 - 11905: 0xFD7C,
	40823 - 11905: 0xFD7D,
	40824 - 11905: 0xFD7E,
	40825 - 11905: 0xFD80,
	40826 - 11905: 0xFD81,
	40827 - 11905: 0xFD82,
	40828 - 11905: 0xFD83,
	40829 - 11905: 0xFD84,
	40830 - 11905: 0xFD85,
	40831 - 11905: 0xB3DD,
	40832 - 11905: 0xF6B3,
	40833 - 11905: 0xFD86,
	40834 - 11905: 0xFD87,
	40835 - 11905: 0xF6B4,
	40836 - 11905: 0xC1E4,
	40837 - 11905: 0xF6B5,
	40838 - 11905: 0xF6B6,
	40839 - 11905: 0xF6B7,
	40840 - 11905: 0xF6B8,
	40841 - 11905: 0xF6B9,
	40842 - 11905: 0xF6BA,
	40843 - 11905: 0xC8A3,
	40844 - 11905: 0xF6BB,
	40845 - 11905: 0xFD88,
	40846 - 11905: 0xFD89,
	40847 - 11905: 0xFD8A,
	40848 - 11905: 0xFD8B,
	40849 - 11905: 0xFD8C,
	40850 - 11905: 0xFD8D,
	40851 - 11905: 0xFD8E,
	40852 - 11905: 0xFD8F,
	40853 - 11905: 0xFD90,
	40854 - 11905: 0xFD91,
	40855 - 11905: 0xFD92,
	40856 - 11905: 0xFD93,
	40857 - 11905: 0xC1FA,
	40858 - 11905: 0xB9A8,
	40859 - 11905: 0xEDE8,
	40860 - 11905: 0xFD94,
	40861 - 11905: 0xFD95,
	40862 - 11905: 0xFD96,
	40863 - 11905: 0xB9EA,
	40864 - 11905: 0xD9DF,
	40865 - 11905: 0xFD97,
	40866 - 11905: 0xFD98,
	40867 - 11905: 0xFD99,
	40868 - 11905: 0xFD9A,
	40869 - 11905: 0xFD9B,
}

const encode1Low, encode1High = 8208, 9795

var encode1 = [...]uint16{
	8208 - 8208: 0xA95C,
	8211 - 8208: 0xA843,
	8212 - 8208: 0xA1AA,
	8213 - 8208: 0xA844,
	8214 - 8208: 0xA1AC,
	8216 - 8208: 0xA1AE,
	8217 - 8208: 0xA1AF,
	8220 - 8208: 0xA1B0,
	8221 - 8208: 0xA1B1,
	8229 - 8208: 0xA845,
	8230 - 8208: 0xA1AD,
	8240 - 8208: 0xA1EB,
	8242 - 8208: 0xA1E4,
	8243 - 8208: 0xA1E5,
	8245 - 8208: 0xA846,
	8251 - 8208: 0xA1F9,
	8364 - 8208: 0xA2E3,
	8451 - 8208: 0xA1E6,
	8453 - 8208: 0xA847,
	8457 - 8208: 0xA848,
	8470 - 8208: 0xA1ED,
	8481 - 8208: 0xA959,
	8544 - 8208: 0xA2F1,
	8545 - 8208: 0xA2F2,
	8546 - 8208: 0xA2F3,
	8547 - 8208: 0xA2F4,
	8548 - 8208: 0xA2F5,
	8549 - 8208: 0xA2F6,
	8550 - 8208: 0xA2F7,
	8551 - 8208: 0xA2F8,
	8552 - 8208: 0xA2F9,
	8553 - 8208: 0xA2FA,
	8554 - 8208: 0xA2FB,
	8555 - 8208: 0xA2FC,
	8560 - 8208: 0xA2A1,
	8561 - 8208: 0xA2A2,
	8562 - 8208: 0xA2A3,
	8563 - 8208: 0xA2A4,
	8564 - 8208: 0xA2A5,
	8565 - 8208: 0xA2A6,
	8566 - 8208: 0xA2A7,
	8567 - 8208: 0xA2A8,
	8568 - 8208: 0xA2A9,
	8569 - 8208: 0xA2AA,
	8592 - 8208: 0xA1FB,
	8593 - 8208: 0xA1FC,
	8594 - 8208: 0xA1FA,
	8595 - 8208: 0xA1FD,
	8598 - 8208: 0xA849,
	8599 - 8208: 0xA84A,
	8600 - 8208: 0xA84B,
	8601 - 8208: 0xA84C,
	8712 - 8208: 0xA1CA,
	8719 - 8208: 0xA1C7,
	8721 - 8208: 0xA1C6,
	8725 - 8208: 0xA84D,
	8730 - 8208: 0xA1CC,
	8733 - 8208: 0xA1D8,
	8734 - 8208: 0xA1DE,
	8735 - 8208: 0xA84E,
	8736 - 8208: 0xA1CF,
	8739 - 8208: 0xA84F,
	8741 - 8208: 0xA1CE,
	8743 - 8208: 0xA1C4,
	8744 - 8208: 0xA1C5,
	8745 - 8208: 0xA1C9,
	8746 - 8208: 0xA1C8,
	8747 - 8208: 0xA1D2,
	8750 - 8208: 0xA1D3,
	8756 - 8208: 0xA1E0,
	8757 - 8208: 0xA1DF,
	8758 - 8208: 0xA1C3,
	8759 - 8208: 0xA1CB,
	8765 - 8208: 0xA1D7,
	8776 - 8208: 0xA1D6,
	8780 - 8208: 0xA1D5,
	8786 - 8208: 0xA850,
	8800 - 8208: 0xA1D9,
	8801 - 8208: 0xA1D4,
	8804 - 8208: 0xA1DC,
	8805 - 8208: 0xA1DD,
	8806 - 8208: 0xA851,
	8807 - 8208: 0xA852,
	8814 - 8208: 0xA1DA,
	8815 - 8208: 0xA1DB,
	8853 - 8208: 0xA892,
	8857 - 8208: 0xA1D1,
	8869 - 8208: 0xA1CD,
	8895 - 8208: 0xA853,
	8978 - 8208: 0xA1D0,
	9312 - 8208: 0xA2D9,
	9313 - 8208: 0xA2DA,
	9314 - 8208: 0xA2DB,
	9315 - 8208: 0xA2DC,
	9316 - 8208: 0xA2DD,
	9317 - 8208: 0xA2DE,
	9318 - 8208: 0xA2DF,
	9319 - 8208: 0xA2E0,
	9320 - 8208: 0xA2E1,
	9321 - 8208: 0xA2E2,
	9332 - 8208: 0xA2C5,
	9333 - 8208: 0xA2C6,
	9334 - 8208: 0xA2C7,
	9335 - 8208: 0xA2C8,
	9336 - 8208: 0xA2C9,
	9337 - 8208: 0xA2CA,
	9338 - 8208: 0xA2CB,
	9339 - 8208: 0xA2CC,
	9340 - 8208: 0xA2CD,
	9341 - 8208: 0xA2CE,
	9342 - 8208: 0xA2CF,
	9343 - 8208: 0xA2D0,
	9344 - 8208: 0xA2D1,
	9345 - 8208: 0xA2D2,
	9346 - 8208: 0xA2D3,
	9347 - 8208: 0xA2D4,
	9348 - 8208: 0xA2D5,
	9349 - 8208: 0xA2D6,
	9350 - 8208: 0xA2D7,
	9351 - 8208: 0xA2D8,
	9352 - 8208: 0xA2B1,
	9353 - 8208: 0xA2B2,
	9354 - 8208: 0xA2B3,
	9355 - 8208: 0xA2B4,
	9356 - 8208: 0xA2B5,
	9357 - 8208: 0xA2B6,
	9358 - 8208: 0xA2B7,
	9359 - 8208: 0xA2B8,
	9360 - 8208: 0xA2B9,
	9361 - 8208: 0xA2BA,
	9362 - 8208: 0xA2BB,
	9363 - 8208: 0xA2BC,
	9364 - 8208: 0xA2BD,
	9365 - 8208: 0xA2BE,
	9366 - 8208: 0xA2BF,
	9367 - 8208: 0xA2C0,
	9368 - 8208: 0xA2C1,
	9369 - 8208: 0xA2C2,
	9370 - 8208: 0xA2C3,
	9371 - 8208: 0xA2C4,
	9472 - 8208: 0xA9A4,
	9473 - 8208: 0xA9A5,
	9474 - 8208: 0xA9A6,
	9475 - 8208: 0xA9A7,
	9476 - 8208: 0xA9A8,
	9477 - 8208: 0xA9A9,
	9478 - 8208: 0xA9AA,
	9479 - 8208: 0xA9AB,
	9480 - 8208: 0xA9AC,
	9481 - 8208: 0xA9AD,
	9482 - 8208: 0xA9AE,
	9483 - 8208: 0xA9AF,
	9484 - 8208: 0xA9B0,
	9485 - 8208: 0xA9B1,
	9486 - 8208: 0xA9B2,
	9487 - 8208: 0xA9B3,
	9488 - 8208: 0xA9B4,
	9489 - 8208: 0xA9B5,
	9490 - 8208: 0xA9B6,
	9491 - 8208: 0xA9B7,
	9492 - 8208: 0xA9B8,
	9493 - 8208: 0xA9B9,
	9494 - 8208: 0xA9BA,
	9495 - 8208: 0xA9BB,
	9496 - 8208: 0xA9BC,
	9497 - 8208: 0xA9BD,
	9498 - 8208: 0xA9BE,
	9499 - 8208: 0xA9BF,
	9500 - 8208: 0xA9C0,
	9501 - 8208: 0xA9C1,
	9502 - 8208: 0xA9C2,
	9503 - 8208: 0xA9C3,
	9504 - 8208: 0xA9C4,
	9505 - 8208: 0xA9C5,
	9506 - 8208: 0xA9C6,
	9507 - 8208: 0xA9C7,
	9508 - 8208: 0xA9C8,
	9509 - 8208: 0xA9C9,
	9510 - 8208: 0xA9CA,
	9511 - 8208: 0xA9CB,
	9512 - 8208: 0xA9CC,
	9513 - 8208: 0xA9CD,
	9514 - 8208: 0xA9CE,
	9515 - 8208: 0xA9CF,
	9516 - 8208: 0xA9D0,
	9517 - 8208: 0xA9D1,
	9518 - 8208: 0xA9D2,
	9519 - 8208: 0xA9D3,
	9520 - 8208: 0xA9D4,
	9521 - 8208: 0xA9D5,
	9522 - 8208: 0xA9D6,
	9523 - 8208: 0xA9D7,
	9524 - 8208: 0xA9D8,
	9525 - 8208: 0xA9D9,
	9526 - 8208: 0xA9DA,
	9527 - 8208: 0xA9DB,
	9528 - 8208: 0xA9DC,
	9529 - 8208: 0xA9DD,
	9530 - 8208: 0xA9DE,
	9531 - 8208: 0xA9DF,
	9532 - 8208: 0xA9E0,
	9533 - 8208: 0xA9E1,
	9534 - 8208: 0xA9E2,
	9535 - 8208: 0xA9E3,
	9536 - 8208: 0xA9E4,
	9537 - 8208: 0xA9E5,
	9538 - 8208: 0xA9E6,
	9539 - 8208: 0xA9E7,
	9540 - 8208: 0xA9E8,
	9541 - 8208: 0xA9E9,
	9542 - 8208: 0xA9EA,
	9543 - 8208: 0xA9EB,
	9544 - 8208: 0xA9EC,
	9545 - 8208: 0xA9ED,
	9546 - 8208: 0xA9EE,
	9547 - 8208: 0xA9EF,
	9552 - 8208: 0xA854,
	9553 - 8208: 0xA855,
	9554 - 8208: 0xA856,
	9555 - 8208: 0xA857,
	9556 - 8208: 0xA858,
	9557 - 8208: 0xA859,
	9558 - 8208: 0xA85A,
	9559 - 8208: 0xA85B,
	9560 - 8208: 0xA85C,
	9561 - 8208: 0xA85D,
	9562 - 8208: 0xA85E,
	9563 - 8208: 0xA85F,
	9564 - 8208: 0xA860,
	9565 - 8208: 0xA861,
	9566 - 8208: 0xA862,
	9567 - 8208: 0xA863,
	9568 - 8208: 0xA864,
	9569 - 8208: 0xA865,
	9570 - 8208: 0xA866,
	9571 - 8208: 0xA867,
	9572 - 8208: 0xA868,
	9573 - 8208: 0xA869,
	9574 - 8208: 0xA86A,
	9575 - 8208: 0xA86B,
	9576 - 8208: 0xA86C,
	9577 - 8208: 0xA86D,
	9578 - 8208: 0xA86E,
	9579 - 8208: 0xA86F,
	9580 - 8208: 0xA870,
	9581 - 8208: 0xA871,
	9582 - 8208: 0xA872,
	9583 - 8208: 0xA873,
	9584 - 8208: 0xA874,
	9585 - 8208: 0xA875,
	9586 - 8208: 0xA876,
	9587 - 8208: 0xA877,
	9601 - 8208: 0xA878,
	9602 - 8208: 0xA879,
	9603 - 8208: 0xA87A,
	9604 - 8208: 0xA87B,
	9605 - 8208: 0xA87C,
	9606 - 8208: 0xA87D,
	9607 - 8208: 0xA87E,
	9608 - 8208: 0xA880,
	9609 - 8208: 0xA881,
	9610 - 8208: 0xA882,
	9611 - 8208: 0xA883,
	9612 - 8208: 0xA884,
	9613 - 8208: 0xA885,
	9614 - 8208: 0xA886,
	9615 - 8208: 0xA887,
	9619 - 8208: 0xA888,
	9620 - 8208: 0xA889,
	9621 - 8208: 0xA88A,
	9632 - 8208: 0xA1F6,
	9633 - 8208: 0xA1F5,
	9650 - 8208: 0xA1F8,
	9651 - 8208: 0xA1F7,
	9660 - 8208: 0xA88B,
	9661 - 8208: 0xA88C,
	9670 - 8208: 0xA1F4,
	9671 - 8208: 0xA1F3,
	9675 - 8208: 0xA1F0,
	9678 - 8208: 0xA1F2,
	9679 - 8208: 0xA1F1,
	9698 - 8208: 0xA88D,
	9699 - 8208: 0xA88E,
	9700 - 8208: 0xA88F,
	9701 - 8208: 0xA890,
	9733 - 8208: 0xA1EF,
	9734 - 8208: 0xA1EE,
	9737 - 8208: 0xA891,
	9792 - 8208: 0xA1E2,
	9794 - 8208: 0xA1E1,
}

const encode2Low, encode2High = 164, 1106

var encode2 = [...]uint16{
	164 - 164:  0xA1E8,
	167 - 164:  0xA1EC,
	168 - 164:  0xA1A7,
	176 - 164:  0xA1E3,
	177 - 164:  0xA1C0,
	183 - 164:  0xA1A4,
	215 - 164:  0xA1C1,
	224 - 164:  0xA8A4,
	225 - 164:  0xA8A2,
	232 - 164:  0xA8A8,
	233 - 164:  0xA8A6,
	234 - 164:  0xA8BA,
	236 - 164:  0xA8AC,
	237 - 164:  0xA8AA,
	242 - 164:  0xA8B0,
	243 - 164:  0xA8AE,
	247 - 164:  0xA1C2,
	249 - 164:  0xA8B4,
	250 - 164:  0xA8B2,
	252 - 164:  0xA8B9,
	257 - 164:  0xA8A1,
	275 - 164:  0xA8A5,
	283 - 164:  0xA8A7,
	299 - 164:  0xA8A9,
	324 - 164:  0xA8BD,
	328 - 164:  0xA8BE,
	333 - 164:  0xA8AD,
	363 - 164:  0xA8B1,
	462 - 164:  0xA8A3,
	464 - 164:  0xA8AB,
	466 - 164:  0xA8AF,
	468 - 164:  0xA8B3,
	470 - 164:  0xA8B5,
	472 - 164:  0xA8B6,
	474 - 164:  0xA8B7,
	476 - 164:  0xA8B8,
	505 - 164:  0xA8BF,
	593 - 164:  0xA8BB,
	609 - 164:  0xA8C0,
	711 - 164:  0xA1A6,
	713 - 164:  0xA1A5,
	714 - 164:  0xA840,
	715 - 164:  0xA841,
	729 - 164:  0xA842,
	913 - 164:  0xA6A1,
	914 - 164:  0xA6A2,
	915 - 164:  0xA6A3,
	916 - 164:  0xA6A4,
	917 - 164:  0xA6A5,
	918 - 164:  0xA6A6,
	919 - 164:  0xA6A7,
	920 - 164:  0xA6A8,
	921 - 164:  0xA6A9,
	922 - 164:  0xA6AA,
	923 - 164:  0xA6AB,
	924 - 164:  0xA6AC,
	925 - 164:  0xA6AD,
	926 - 164:  0xA6AE,
	927 - 164:  0xA6AF,
	928 - 164:  0xA6B0,
	929 - 164:  0xA6B1,
	931 - 164:  0xA6B2,
	932 - 164:  0xA6B3,
	933 - 164:  0xA6B4,
	934 - 164:  0xA6B5,
	935 - 164:  0xA6B6,
	936 - 164:  0xA6B7,
	937 - 164:  0xA6B8,
	945 - 164:  0xA6C1,
	946 - 164:  0xA6C2,
	947 - 164:  0xA6C3,
	948 - 164:  0xA6C4,
	949 - 164:  0xA6C5,
	950 - 164:  0xA6C6,
	951 - 164:  0xA6C7,
	952 - 164:  0xA6C8,
	953 - 164:  0xA6C9,
	954 - 164:  0xA6CA,
	955 - 164:  0xA6CB,
	956 - 164:  0xA6CC,
	957 - 164:  0xA6CD,
	958 - 164:  0xA6CE,
	959 - 164:  0xA6CF,
	960 - 164:  0xA6D0,
	961 - 164:  0xA6D1,
	963 - 164:  0xA6D2,
	964 - 164:  0xA6D3,
	965 - 164:  0xA6D4,
	966 - 164:  0xA6D5,
	967 - 164:  0xA6D6,
	968 - 164:  0xA6D7,
	969 - 164:  0xA6D8,
	1025 - 164: 0xA7A7,
	1040 - 164: 0xA7A1,
	1041 - 164: 0xA7A2,
	1042 - 164: 0xA7A3,
	1043 - 164: 0xA7A4,
	1044 - 164: 0xA7A5,
	1045 - 164: 0xA7A6,
	1046 - 164: 0xA7A8,
	1047 - 164: 0xA7A9,
	1048 - 164: 0xA7AA,
	1049 - 164: 0xA7AB,
	1050 - 164: 0xA7AC,
	1051 - 164: 0xA7AD,
	1052 - 164: 0xA7AE,
	1053 - 164: 0xA7AF,
	1054 - 164: 0xA7B0,
	1055 - 164: 0xA7B1,
	1056 - 164: 0xA7B2,
	1057 - 164: 0xA7B3,
	1058 - 164: 0xA7B4,
	1059 - 164: 0xA7B5,
	1060 - 164: 0xA7B6,
	1061 - 164: 0xA7B7,
	1062 - 164: 0xA7B8,
	1063 - 164: 0xA7B9,
	1064 - 164: 0xA7BA,
	1065 - 164: 0xA7BB,
	1066 - 164: 0xA7BC,
	1067 - 164: 0xA7BD,
	1068 - 164: 0xA7BE,
	1069 - 164: 0xA7BF,
	1070 - 164: 0xA7C0,
	1071 - 164: 0xA7C1,
	1072 - 164: 0xA7D1,
	1073 - 164: 0xA7D2,
	1074 - 164: 0xA7D3,
	1075 - 164: 0xA7D4,
	1076 - 164: 0xA7D5,
	1077 - 164: 0xA7D6,
	1078 - 164: 0xA7D8,
	1079 - 164: 0xA7D9,
	1080 - 164: 0xA7DA,
	1081 - 164: 0xA7DB,
	1082 - 164: 0xA7DC,
	1083 - 164: 0xA7DD,
	1084 - 164: 0xA7DE,
	1085 - 164: 0xA7DF,
	1086 - 164: 0xA7E0,
	1087 - 164: 0xA7E1,
	1088 - 164: 0xA7E2,
	1089 - 164: 0xA7E3,
	1090 - 164: 0xA7E4,
	1091 - 164: 0xA7E5,
	1092 - 164: 0xA7E6,
	1093 - 164: 0xA7E7,
	1094 - 164: 0xA7E8,
	1095 - 164: 0xA7E9,
	1096 - 164: 0xA7EA,
	1097 - 164: 0xA7EB,
	1098 - 164: 0xA7EC,
	1099 - 164: 0xA7ED,
	1100 - 164: 0xA7EE,
	1101 - 164: 0xA7EF,
	1102 - 164: 0xA7F0,
	1103 - 164: 0xA7F1,
	1105 - 164: 0xA7D7,
}

const encode3Low, encode3High = 65072, 65510

var encode3 = [...]uint16{
	65072 - 65072: 0xA955,
	65073 - 65072: 0xA6F2,
	65075 - 65072: 0xA6F4,
	65076 - 65072: 0xA6F5,
	65077 - 65072: 0xA6E0,
	65078 - 65072: 0xA6E1,
	65079 - 65072: 0xA6F0,
	65080 - 65072: 0xA6F1,
	65081 - 65072: 0xA6E2,
	65082 - 65072: 0xA6E3,
	65083 - 65072: 0xA6EE,
	65084 - 65072: 0xA6EF,
	65085 - 65072: 0xA6E6,
	65086 - 65072: 0xA6E7,
	65087 - 65072: 0xA6E4,
	65088 - 65072: 0xA6E5,
	65089 - 65072: 0xA6E8,
	65090 - 65072: 0xA6E9,
	65091 - 65072: 0xA6EA,
	65092 - 65072: 0xA6EB,
	65097 - 65072: 0xA968,
	65098 - 65072: 0xA969,
	65099 - 65072: 0xA96A,
	65100 - 65072: 0xA96B,
	65101 - 65072: 0xA96C,
	65102 - 65072: 0xA96D,
	65103 - 65072: 0xA96E,
	65104 - 65072: 0xA96F,
	65105 - 65072: 0xA970,
	65106 - 65072: 0xA971,
	65108 - 65072: 0xA972,
	65109 - 65072: 0xA973,
	65110 - 65072: 0xA974,
	65111 - 65072: 0xA975,
	65113 - 65072: 0xA976,
	65114 - 65072: 0xA977,
	65115 - 65072: 0xA978,
	65116 - 65072: 0xA979,
	65117 - 65072: 0xA97A,
	65118 - 65072: 0xA97B,
	65119 - 65072: 0xA97C,
	65120 - 65072: 0xA97D,
	65121 - 65072: 0xA97E,
	65122 - 65072: 0xA980,
	65123 - 65072: 0xA981,
	65124 - 65072: 0xA982,
	65125 - 65072: 0xA983,
	65126 - 65072: 0xA984,
	65128 - 65072: 0xA985,
	65129 - 65072: 0xA986,
	65130 - 65072: 0xA987,
	65131 - 65072: 0xA988,
	65281 - 65072: 0xA3A1,
	65282 - 65072: 0xA3A2,
	65283 - 65072: 0xA3A3,
	65284 - 65072: 0xA1E7,
	65285 - 65072: 0xA3A5,
	65286 - 65072: 0xA3A6,
	65287 - 65072: 0xA3A7,
	65288 - 65072: 0xA3A8,
	65289 - 65072: 0xA3A9,
	65290 - 65072: 0xA3AA,
	65291 - 65072: 0xA3AB,
	65292 - 65072: 0xA3AC,
	65293 - 65072: 0xA3AD,
	65294 - 65072: 0xA3AE,
	65295 - 65072: 0xA3AF,
	65296 - 65072: 0xA3B0,
	65297 - 65072: 0xA3B1,
	65298 - 65072: 0xA3B2,
	65299 - 65072: 0xA3B3,
	65300 - 65072: 0xA3B4,
	65301 - 65072: 0xA3B5,
	65302 - 65072: 0xA3B6,
	65303 - 65072: 0xA3B7,
	65304 - 65072: 0xA3B8,
	65305 - 65072: 0xA3B9,
	65306 - 65072: 0xA3BA,
	65307 - 65072: 0xA3BB,
	65308 - 65072: 0xA3BC,
	65309 - 65072: 0xA3BD,
	65310 - 65072: 0xA3BE,
	65311 - 65072: 0xA3BF,
	65312 - 65072: 0xA3C0,
	65313 - 65072: 0xA3C1,
	65314 - 65072: 0xA3C2,
	65315 - 65072: 0xA3C3,
	65316 - 65072: 0xA3C4,
	65317 - 65072: 0xA3C5,
	65318 - 65072: 0xA3C6,
	65319 - 65072: 0xA3C7,
	65320 - 65072: 0xA3C8,
	65321 - 65072: 0xA3C9,
	65322 - 65072: 0xA3CA,
	65323 - 65072: 0xA3CB,
	65324 - 65072: 0xA3CC,
	65325 - 65072: 0xA3CD,
	65326 - 65072: 0xA3CE,
	65327 - 65072: 0xA3CF,
	65328 - 65072: 0xA3D0,
	65329 - 65072: 0xA3D1,
	65330 - 65072: 0xA3D2,
	65331 - 65072: 0xA3D3,
	65332 - 65072: 0xA3D4,
	65333 - 65072: 0xA3D5,
	65334 - 65072: 0xA3D6,
	65335 - 65072: 0xA3D7,
	65336 - 65072: 0xA3D8,
	65337 - 65072: 0xA3D9,
	65338 - 65072: 0xA3DA,
	65339 - 65072: 0xA3DB,
	65340 - 65072: 0xA3DC,
	65341 - 65072: 0xA3DD,
	65342 - 65072: 0xA3DE,
	65343 - 65072: 0xA3DF,
	65344 - 65072: 0xA3E0,
	65345 - 65072: 0xA3E1,
	65346 - 65072: 0xA3E2,
	65347 - 65072: 0xA3E3,
	65348 - 65072: 0xA3E4,
	65349 - 65072: 0xA3E5,
	65350 - 65072: 0xA3E6,
	65351 - 65072: 0xA3E7,
	65352 - 65072: 0xA3E8,
	65353 - 65072: 0xA3E9,
	65354 - 65072: 0xA3EA,
	65355 - 65072: 0xA3EB,
	65356 - 65072: 0xA3EC,
	65357 - 65072: 0xA3ED,
	65358 - 65072: 0xA3EE,
	65359 - 65072: 0xA3EF,
	65360 - 65072: 0xA3F0,
	65361 - 65072: 0xA3F1,
	65362 - 65072: 0xA3F2,
	65363 - 65072: 0xA3F3,
	65364 - 65072: 0xA3F4,
	65365 - 65072: 0xA3F5,
	65366 - 65072: 0xA3F6,
	65367 - 65072: 0xA3F7,
	65368 - 65072: 0xA3F8,
	65369 - 65072: 0xA3F9,
	65370 - 65072: 0xA3FA,
	65371 - 65072: 0xA3FB,
	65372 - 65072: 0xA3FC,
	65373 - 65072: 0xA3FD,
	65374 - 65072: 0xA1AB,
	65504 - 65072: 0xA1E9,
	65505 - 65072: 0xA1EA,
	65506 - 65072: 0xA956,
	65507 - 65072: 0xA3FE,
	65508 - 65072: 0xA957,
	65509 - 65072: 0xA3A4,
}

const encode4Low, encode4High = 63788, 64042

var encode4 = [...]uint16{
	63788 - 63788: 0xFD9C,
	63865 - 63788: 0xFD9D,
	63893 - 63788: 0xFD9E,
	63975 - 63788: 0xFD9F,
	63985 - 63788: 0xFDA0,
	64012 - 63788: 0xFE40,
	64013 - 63788: 0xFE41,
	64014 - 63788: 0xFE42,
	64015 - 63788: 0xFE43,
	64017 - 63788: 0xFE44,
	64019 - 63788: 0xFE45,
	64020 - 63788: 0xFE46,
	64024 - 63788: 0xFE47,
	64031 - 63788: 0xFE48,
	64032 - 63788: 0xFE49,
	64033 - 63788: 0xFE4A,
	64035 - 63788: 0xFE4B,
	64036 - 63788: 0xFE4C,
	64039 - 63788: 0xFE4D,
	64040 - 63788: 0xFE4E,
	64041 - 63788: 0xFE4F,
}
  07070100000F10000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/traditionalchinese  07070100000F11000081A4000000000000000000000001645E367C000011D7000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/traditionalchinese/big5.go  // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package traditionalchinese

import (
	"unicode/utf8"

	"golang.org/x/text/encoding"
	"golang.org/x/text/encoding/internal"
	"golang.org/x/text/encoding/internal/identifier"
	"golang.org/x/text/transform"
)

// All is a list of all defined encodings in this package.
var All = []encoding.Encoding{Big5}

// Big5 is the Big5 encoding, also known as Code Page 950.
var Big5 encoding.Encoding = &big5

var big5 = internal.Encoding{
	&internal.SimpleEncoding{big5Decoder{}, big5Encoder{}},
	"Big5",
	identifier.Big5,
}

type big5Decoder struct{ transform.NopResetter }

func (big5Decoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	r, size, s := rune(0), 0, ""
loop:
	for ; nSrc < len(src); nSrc += size {
		switch c0 := src[nSrc]; {
		case c0 < utf8.RuneSelf:
			r, size = rune(c0), 1

		case 0x81 <= c0 && c0 < 0xff:
			if nSrc+1 >= len(src) {
				if !atEOF {
					err = transform.ErrShortSrc
					break loop
				}
				r, size = utf8.RuneError, 1
				goto write
			}
			c1 := src[nSrc+1]
			switch {
			case 0x40 <= c1 && c1 < 0x7f:
				c1 -= 0x40
			case 0xa1 <= c1 && c1 < 0xff:
				c1 -= 0x62
			case c1 < 0x40:
				r, size = utf8.RuneError, 1
				goto write
			default:
				r, size = utf8.RuneError, 2
				goto write
			}
			r, size = '\ufffd', 2
			if i := int(c0-0x81)*157 + int(c1); i < len(decode) {
				if 1133 <= i && i < 1167 {
					// The two-rune special cases for LATIN CAPITAL / SMALL E WITH CIRCUMFLEX
					// AND MACRON / CARON are from http://encoding.spec.whatwg.org/#big5
					switch i {
					case 1133:
						s = "\u00CA\u0304"
						goto writeStr
					case 1135:
						s = "\u00CA\u030C"
						goto writeStr
					case 1164:
						s = "\u00EA\u0304"
						goto writeStr
					case 1166:
						s = "\u00EA\u030C"
						goto writeStr
					}
				}
				r = rune(decode[i])
				if r == 0 {
					r = '\ufffd'
				}
			}

		default:
			r, size = utf8.RuneError, 1
		}

	write:
		if nDst+utf8.RuneLen(r) > len(dst) {
			err = transform.ErrShortDst
			break loop
		}
		nDst += utf8.EncodeRune(dst[nDst:], r)
		continue loop

	writeStr:
		if nDst+len(s) > len(dst) {
			err = transform.ErrShortDst
			break loop
		}
		nDst += copy(dst[nDst:], s)
		continue loop
	}
	return nDst, nSrc, err
}

type big5Encoder struct{ transform.NopResetter }

func (big5Encoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	r, size := rune(0), 0
	for ; nSrc < len(src); nSrc += size {
		r = rune(src[nSrc])

		// Decode a 1-byte rune.
		if r < utf8.RuneSelf {
			size = 1
			if nDst >= len(dst) {
				err = transform.ErrShortDst
				break
			}
			dst[nDst] = uint8(r)
			nDst++
			continue

		} else {
			// Decode a multi-byte rune.
			r, size = utf8.DecodeRune(src[nSrc:])
			if size == 1 {
				// All valid runes of size 1 (those below utf8.RuneSelf) were
				// handled above. We have invalid UTF-8 or we haven't seen the
				// full character yet.
				if !atEOF && !utf8.FullRune(src[nSrc:]) {
					err = transform.ErrShortSrc
					break
				}
			}
		}

		if r >= utf8.RuneSelf {
			// func init checks that the switch covers all tables.
			switch {
			case encode0Low <= r && r < encode0High:
				if r = rune(encode0[r-encode0Low]); r != 0 {
					goto write2
				}
			case encode1Low <= r && r < encode1High:
				if r = rune(encode1[r-encode1Low]); r != 0 {
					goto write2
				}
			case encode2Low <= r && r < encode2High:
				if r = rune(encode2[r-encode2Low]); r != 0 {
					goto write2
				}
			case encode3Low <= r && r < encode3High:
				if r = rune(encode3[r-encode3Low]); r != 0 {
					goto write2
				}
			case encode4Low <= r && r < encode4High:
				if r = rune(encode4[r-encode4Low]); r != 0 {
					goto write2
				}
			case encode5Low <= r && r < encode5High:
				if r = rune(encode5[r-encode5Low]); r != 0 {
					goto write2
				}
			case encode6Low <= r && r < encode6High:
				if r = rune(encode6[r-encode6Low]); r != 0 {
					goto write2
				}
			case encode7Low <= r && r < encode7High:
				if r = rune(encode7[r-encode7Low]); r != 0 {
					goto write2
				}
			}
			err = internal.ErrASCIIReplacement
			break
		}

	write2:
		if nDst+2 > len(dst) {
			err = transform.ErrShortDst
			break
		}
		dst[nDst+0] = uint8(r >> 8)
		dst[nDst+1] = uint8(r)
		nDst += 2
		continue
	}
	return nDst, nSrc, err
}

func init() {
	// Check that the hard-coded encode switch covers all tables.
	if numEncodeTables != 8 {
		panic("bad numEncodeTables")
	}
}
 07070100000F12000081A4000000000000000000000001645E367C000C8251000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/traditionalchinese/tables.go    // generated by go run maketables.go; DO NOT EDIT

// Package traditionalchinese provides Traditional Chinese encodings such as Big5.
package traditionalchinese // import "golang.org/x/text/encoding/traditionalchinese"

// decode is the decoding table from Big5 code to Unicode.
// It is defined at http://encoding.spec.whatwg.org/index-big5.txt
var decode = [...]uint32{
	942:   0x000043F0,
	943:   0x00004C32,
	944:   0x00004603,
	945:   0x000045A6,
	946:   0x00004578,
	947:   0x00027267,
	948:   0x00004D77,
	949:   0x000045B3,
	950:   0x00027CB1,
	951:   0x00004CE2,
	952:   0x00027CC5,
	953:   0x00003B95,
	954:   0x00004736,
	955:   0x00004744,
	956:   0x00004C47,
	957:   0x00004C40,
	958:   0x000242BF,
	959:   0x00023617,
	960:   0x00027352,
	961:   0x00026E8B,
	962:   0x000270D2,
	963:   0x00004C57,
	964:   0x0002A351,
	965:   0x0000474F,
	966:   0x000045DA,
	967:   0x00004C85,
	968:   0x00027C6C,
	969:   0x00004D07,
	970:   0x00004AA4,
	971:   0x000046A1,
	972:   0x00026B23,
	973:   0x00007225,
	974:   0x00025A54,
	975:   0x00021A63,
	976:   0x00023E06,
	977:   0x00023F61,
	978:   0x0000664D,
	979:   0x000056FB,
	981:   0x00007D95,
	982:   0x0000591D,
	983:   0x00028BB9,
	984:   0x00003DF4,
	985:   0x00009734,
	986:   0x00027BEF,
	987:   0x00005BDB,
	988:   0x00021D5E,
	989:   0x00005AA4,
	990:   0x00003625,
	991:   0x00029EB0,
	992:   0x00005AD1,
	993:   0x00005BB7,
	994:   0x00005CFC,
	995:   0x0000676E,
	996:   0x00008593,
	997:   0x00029945,
	998:   0x00007461,
	999:   0x0000749D,
	1000:  0x00003875,
	1001:  0x00021D53,
	1002:  0x0002369E,
	1003:  0x00026021,
	1004:  0x00003EEC,
	1005:  0x000258DE,
	1006:  0x00003AF5,
	1007:  0x00007AFC,
	1008:  0x00009F97,
	1009:  0x00024161,
	1010:  0x0002890D,
	1011:  0x000231EA,
	1012:  0x00020A8A,
	1013:  0x0002325E,
	1014:  0x0000430A,
	1015:  0x00008484,
	1016:  0x00009F96,
	1017:  0x0000942F,
	1018:  0x00004930,
	1019:  0x00008613,
	1020:  0x00005896,
	1021:  0x0000974A,
	1022:  0x00009218,
	1023:  0x000079D0,
	1024:  0x00007A32,
	1025:  0x00006660,
	1026:  0x00006A29,
	1027:  0x0000889D,
	1028:  0x0000744C,
	1029:  0x00007BC5,
	1030:  0x00006782,
	1031:  0x00007A2C,
	1032:  0x0000524F,
	1033:  0x00009046,
	1034:  0x000034E6,
	1035:  0x000073C4,
	1036:  0x00025DB9,
	1037:  0x000074C6,
	1038:  0x00009FC7,
	1039:  0x000057B3,
	1040:  0x0000492F,
	1041:  0x0000544C,
	1042:  0x00004131,
	1043:  0x0002368E,
	1044:  0x00005818,
	1045:  0x00007A72,
	1046:  0x00027B65,
	1047:  0x00008B8F,
	1048:  0x000046AE,
	1049:  0x00026E88,
	1050:  0x00004181,
	1051:  0x00025D99,
	1052:  0x00007BAE,
	1053:  0x000224BC,
	1054:  0x00009FC8,
	1055:  0x000224C1,
	1056:  0x000224C9,
	1057:  0x000224CC,
	1058:  0x00009FC9,
	1059:  0x00008504,
	1060:  0x000235BB,
	1061:  0x000040B4,
	1062:  0x00009FCA,
	1063:  0x000044E1,
	1064:  0x0002ADFF,
	1065:  0x000062C1,
	1066:  0x0000706E,
	1067:  0x00009FCB,
	1099:  0x000031C0,
	1100:  0x000031C1,
	1101:  0x000031C2,
	1102:  0x000031C3,
	1103:  0x000031C4,
	1104:  0x0002010C,
	1105:  0x000031C5,
	1106:  0x000200D1,
	1107:  0x000200CD,
	1108:  0x000031C6,
	1109:  0x000031C7,
	1110:  0x000200CB,
	1111:  0x00021FE8,
	1112:  0x000031C8,
	1113:  0x000200CA,
	1114:  0x000031C9,
	1115:  0x000031CA,
	1116:  0x000031CB,
	1117:  0x000031CC,
	1118:  0x0002010E,
	1119:  0x000031CD,
	1120:  0x000031CE,
	1121:  0x00000100,
	1122:  0x000000C1,
	1123:  0x000001CD,
	1124:  0x000000C0,
	1125:  0x00000112,
	1126:  0x000000C9,
	1127:  0x0000011A,
	1128:  0x000000C8,
	1129:  0x0000014C,
	1130:  0x000000D3,
	1131:  0x000001D1,
	1132:  0x000000D2,
	1134:  0x00001EBE,
	1136:  0x00001EC0,
	1137:  0x000000CA,
	1138:  0x00000101,
	1139:  0x000000E1,
	1140:  0x000001CE,
	1141:  0x000000E0,
	1142:  0x00000251,
	1143:  0x00000113,
	1144:  0x000000E9,
	1145:  0x0000011B,
	1146:  0x000000E8,
	1147:  0x0000012B,
	1148:  0x000000ED,
	1149:  0x000001D0,
	1150:  0x000000EC,
	1151:  0x0000014D,
	1152:  0x000000F3,
	1153:  0x000001D2,
	1154:  0x000000F2,
	1155:  0x0000016B,
	1156:  0x000000FA,
	1157:  0x000001D4,
	1158:  0x000000F9,
	1159:  0x000001D6,
	1160:  0x000001D8,
	1161:  0x000001DA,
	1162:  0x000001DC,
	1163:  0x000000FC,
	1165:  0x00001EBF,
	1167:  0x00001EC1,
	1168:  0x000000EA,
	1169:  0x00000261,
	1170:  0x000023DA,
	1171:  0x000023DB,
	1256:  0x0002A3A9,
	1257:  0x00021145,
	1259:  0x0000650A,
	1262:  0x00004E3D,
	1263:  0x00006EDD,
	1264:  0x00009D4E,
	1265:  0x000091DF,
	1268:  0x00027735,
	1269:  0x00006491,
	1270:  0x00004F1A,
	1271:  0x00004F28,
	1272:  0x00004FA8,
	1273:  0x00005156,
	1274:  0x00005174,
	1275:  0x0000519C,
	1276:  0x000051E4,
	1277:  0x000052A1,
	1278:  0x000052A8,
	1279:  0x0000533B,
	1280:  0x0000534E,
	1281:  0x000053D1,
	1282:  0x000053D8,
	1283:  0x000056E2,
	1284:  0x000058F0,
	1285:  0x00005904,
	1286:  0x00005907,
	1287:  0x00005932,
	1288:  0x00005934,
	1289:  0x00005B66,
	1290:  0x00005B9E,
	1291:  0x00005B9F,
	1292:  0x00005C9A,
	1293:  0x00005E86,
	1294:  0x0000603B,
	1295:  0x00006589,
	1296:  0x000067FE,
	1297:  0x00006804,
	1298:  0x00006865,
	1299:  0x00006D4E,
	1300:  0x000070BC,
	1301:  0x00007535,
	1302:  0x00007EA4,
	1303:  0x00007EAC,
	1304:  0x00007EBA,
	1305:  0x00007EC7,
	1306:  0x00007ECF,
	1307:  0x00007EDF,
	1308:  0x00007F06,
	1309:  0x00007F37,
	1310:  0x0000827A,
	1311:  0x000082CF,
	1312:  0x0000836F,
	1313:  0x000089C6,
	1314:  0x00008BBE,
	1315:  0x00008BE2,
	1316:  0x00008F66,
	1317:  0x00008F67,
	1318:  0x00008F6E,
	1319:  0x00007411,
	1320:  0x00007CFC,
	1321:  0x00007DCD,
	1322:  0x00006946,
	1323:  0x00007AC9,
	1324:  0x00005227,
	1329:  0x0000918C,
	1330:  0x000078B8,
	1331:  0x0000915E,
	1332:  0x000080BC,
	1334:  0x00008D0B,
	1335:  0x000080F6,
	1336:  0x000209E7,
	1339:  0x0000809F,
	1340:  0x00009EC7,
	1341:  0x00004CCD,
	1342:  0x00009DC9,
	1343:  0x00009E0C,
	1344:  0x00004C3E,
	1345:  0x00029DF6,
	1346:  0x0002700E,
	1347:  0x00009E0A,
	1348:  0x0002A133,
	1349:  0x000035C1,
	1351:  0x00006E9A,
	1352:  0x0000823E,
	1353:  0x00007519,
	1355:  0x00004911,
	1356:  0x00009A6C,
	1357:  0x00009A8F,
	1358:  0x00009F99,
	1359:  0x00007987,
	1360:  0x0002846C,
	1361:  0x00021DCA,
	1362:  0x000205D0,
	1363:  0x00022AE6,
	1364:  0x00004E24,
	1365:  0x00004E81,
	1366:  0x00004E80,
	1367:  0x00004E87,
	1368:  0x00004EBF,
	1369:  0x00004EEB,
	1370:  0x00004F37,
	1371:  0x0000344C,
	1372:  0x00004FBD,
	1373:  0x00003E48,
	1374:  0x00005003,
	1375:  0x00005088,
	1376:  0x0000347D,
	1377:  0x00003493,
	1378:  0x000034A5,
	1379:  0x00005186,
	1380:  0x00005905,
	1381:  0x000051DB,
	1382:  0x000051FC,
	1383:  0x00005205,
	1384:  0x00004E89,
	1385:  0x00005279,
	1386:  0x00005290,
	1387:  0x00005327,
	1388:  0x000035C7,
	1389:  0x000053A9,
	1390:  0x00003551,
	1391:  0x000053B0,
	1392:  0x00003553,
	1393:  0x000053C2,
	1394:  0x00005423,
	1395:  0x0000356D,
	1396:  0x00003572,
	1397:  0x00003681,
	1398:  0x00005493,
	1399:  0x000054A3,
	1400:  0x000054B4,
	1401:  0x000054B9,
	1402:  0x000054D0,
	1403:  0x000054EF,
	1404:  0x00005518,
	1405:  0x00005523,
	1406:  0x00005528,
	1407:  0x00003598,
	1408:  0x0000553F,
	1409:  0x000035A5,
	1410:  0x000035BF,
	1411:  0x000055D7,
	1412:  0x000035C5,
	1413:  0x00027D84,
	1414:  0x00005525,
	1416:  0x00020C42,
	1417:  0x00020D15,
	1418:  0x0002512B,
	1419:  0x00005590,
	1420:  0x00022CC6,
	1421:  0x000039EC,
	1422:  0x00020341,
	1423:  0x00008E46,
	1424:  0x00024DB8,
	1425:  0x000294E5,
	1426:  0x00004053,
	1427:  0x000280BE,
	1428:  0x0000777A,
	1429:  0x00022C38,
	1430:  0x00003A34,
	1431:  0x000047D5,
	1432:  0x0002815D,
	1433:  0x000269F2,
	1434:  0x00024DEA,
	1435:  0x000064DD,
	1436:  0x00020D7C,
	1437:  0x00020FB4,
	1438:  0x00020CD5,
	1439:  0x000210F4,
	1440:  0x0000648D,
	1441:  0x00008E7E,
	1442:  0x00020E96,
	1443:  0x00020C0B,
	1444:  0x00020F64,
	1445:  0x00022CA9,
	1446:  0x00028256,
	1447:  0x000244D3,
	1449:  0x00020D46,
	1450:  0x00029A4D,
	1451:  0x000280E9,
	1452:  0x000047F4,
	1453:  0x00024EA7,
	1454:  0x00022CC2,
	1455:  0x00009AB2,
	1456:  0x00003A67,
	1457:  0x000295F4,
	1458:  0x00003FED,
	1459:  0x00003506,
	1460:  0x000252C7,
	1461:  0x000297D4,
	1462:  0x000278C8,
	1463:  0x00022D44,
	1464:  0x00009D6E,
	1465:  0x00009815,
	1467:  0x000043D9,
	1468:  0x000260A5,
	1469:  0x000064B4,
	1470:  0x000054E3,
	1471:  0x00022D4C,
	1472:  0x00022BCA,
	1473:  0x00021077,
	1474:  0x000039FB,
	1475:  0x0002106F,
	1476:  0x000266DA,
	1477:  0x00026716,
	1478:  0x000279A0,
	1479:  0x000064EA,
	1480:  0x00025052,
	1481:  0x00020C43,
	1482:  0x00008E68,
	1483:  0x000221A1,
	1484:  0x00028B4C,
	1485:  0x00020731,
	1487:  0x0000480B,
	1488:  0x000201A9,
	1489:  0x00003FFA,
	1490:  0x00005873,
	1491:  0x00022D8D,
	1493:  0x000245C8,
	1494:  0x000204FC,
	1495:  0x00026097,
	1496:  0x00020F4C,
	1497:  0x00020D96,
	1498:  0x00005579,
	1499:  0x000040BB,
	1500:  0x000043BA,
	1502:  0x00004AB4,
	1503:  0x00022A66,
	1504:  0x0002109D,
	1505:  0x000081AA,
	1506:  0x000098F5,
	1507:  0x00020D9C,
	1508:  0x00006379,
	1509:  0x000039FE,
	1510:  0x00022775,
	1511:  0x00008DC0,
	1512:  0x000056A1,
	1513:  0x0000647C,
	1514:  0x00003E43,
	1516:  0x0002A601,
	1517:  0x00020E09,
	1518:  0x00022ACF,
	1519:  0x00022CC9,
	1521:  0x000210C8,
	1522:  0x000239C2,
	1523:  0x00003992,
	1524:  0x00003A06,
	1525:  0x0002829B,
	1526:  0x00003578,
	1527:  0x00025E49,
	1528:  0x000220C7,
	1529:  0x00005652,
	1530:  0x00020F31,
	1531:  0x00022CB2,
	1532:  0x00029720,
	1533:  0x000034BC,
	1534:  0x00006C3D,
	1535:  0x00024E3B,
	1538:  0x00027574,
	1539:  0x00022E8B,
	1540:  0x00022208,
	1541:  0x0002A65B,
	1542:  0x00028CCD,
	1543:  0x00020E7A,
	1544:  0x00020C34,
	1545:  0x0002681C,
	1546:  0x00007F93,
	1547:  0x000210CF,
	1548:  0x00022803,
	1549:  0x00022939,
	1550:  0x000035FB,
	1551:  0x000251E3,
	1552:  0x00020E8C,
	1553:  0x00020F8D,
	1554:  0x00020EAA,
	1555:  0x00003F93,
	1556:  0x00020F30,
	1557:  0x00020D47,
	1558:  0x0002114F,
	1559:  0x00020E4C,
	1561:  0x00020EAB,
	1562:  0x00020BA9,
	1563:  0x00020D48,
	1564:  0x000210C0,
	1565:  0x0002113D,
	1566:  0x00003FF9,
	1567:  0x00022696,
	1568:  0x00006432,
	1569:  0x00020FAD,
	1570:  0x000233F4,
	1571:  0x00027639,
	1572:  0x00022BCE,
	1573:  0x00020D7E,
	1574:  0x00020D7F,
	1575:  0x00022C51,
	1576:  0x00022C55,
	1577:  0x00003A18,
	1578:  0x00020E98,
	1579:  0x000210C7,
	1580:  0x00020F2E,
	1581:  0x0002A632,
	1582:  0x00026B50,
	1583:  0x00028CD2,
	1584:  0x00028D99,
	1585:  0x00028CCA,
	1586:  0x000095AA,
	1587:  0x000054CC,
	1588:  0x000082C4,
	1589:  0x000055B9,
	1591:  0x00029EC3,
	1592:  0x00009C26,
	1593:  0x00009AB6,
	1594:  0x0002775E,
	1595:  0x00022DEE,
	1596:  0x00007140,
	1597:  0x0000816D,
	1598:  0x000080EC,
	1599:  0x00005C1C,
	1600:  0x00026572,
	1601:  0x00008134,
	1602:  0x00003797,
	1603:  0x0000535F,
	1604:  0x000280BD,
	1605:  0x000091B6,
	1606:  0x00020EFA,
	1607:  0x00020E0F,
	1608:  0x00020E77,
	1609:  0x00020EFB,
	1610:  0x000035DD,
	1611:  0x00024DEB,
	1612:  0x00003609,
	1613:  0x00020CD6,
	1614:  0x000056AF,
	1615:  0x000227B5,
	1616:  0x000210C9,
	1617:  0x00020E10,
	1618:  0x00020E78,
	1619:  0x00021078,
	1620:  0x00021148,
	1621:  0x00028207,
	1622:  0x00021455,
	1623:  0x00020E79,
	1624:  0x00024E50,
	1625:  0x00022DA4,
	1626:  0x00005A54,
	1627:  0x0002101D,
	1628:  0x0002101E,
	1629:  0x000210F5,
	1630:  0x000210F6,
	1631:  0x0000579C,
	1632:  0x00020E11,
	1633:  0x00027694,
	1634:  0x000282CD,
	1635:  0x00020FB5,
	1636:  0x00020E7B,
	1637:  0x0002517E,
	1638:  0x00003703,
	1639:  0x00020FB6,
	1640:  0x00021180,
	1641:  0x000252D8,
	1642:  0x0002A2BD,
	1643:  0x000249DA,
	1644:  0x0002183A,
	1645:  0x00024177,
	1646:  0x0002827C,
	1647:  0x00005899,
	1648:  0x00005268,
	1649:  0x0000361A,
	1650:  0x0002573D,
	1651:  0x00007BB2,
	1652:  0x00005B68,
	1653:  0x00004800,
	1654:  0x00004B2C,
	1655:  0x00009F27,
	1656:  0x000049E7,
	1657:  0x00009C1F,
	1658:  0x00009B8D,
	1659:  0x00025B74,
	1660:  0x0002313D,
	1661:  0x000055FB,
	1662:  0x000035F2,
	1663:  0x00005689,
	1664:  0x00004E28,
	1665:  0x00005902,
	1666:  0x00021BC1,
	1667:  0x0002F878,
	1668:  0x00009751,
	1669:  0x00020086,
	1670:  0x00004E5B,
	1671:  0x00004EBB,
	1672:  0x0000353E,
	1673:  0x00005C23,
	1674:  0x00005F51,
	1675:  0x00005FC4,
	1676:  0x000038FA,
	1677:  0x0000624C,
	1678:  0x00006535,
	1679:  0x00006B7A,
	1680:  0x00006C35,
	1681:  0x00006C3A,
	1682:  0x0000706C,
	1683:  0x0000722B,
	1684:  0x00004E2C,
	1685:  0x000072AD,
	1686:  0x000248E9,
	1687:  0x00007F52,
	1688:  0x0000793B,
	1689:  0x00007CF9,
	1690:  0x00007F53,
	1691:  0x0002626A,
	1692:  0x000034C1,
	1694:  0x0002634B,
	1695:  0x00008002,
	1696:  0x00008080,
	1697:  0x00026612,
	1698:  0x00026951,
	1699:  0x0000535D,
	1700:  0x00008864,
	1701:  0x000089C1,
	1702:  0x000278B2,
	1703:  0x00008BA0,
	1704:  0x00008D1D,
	1705:  0x00009485,
	1706:  0x00009578,
	1707:  0x0000957F,
	1708:  0x000095E8,
	1709:  0x00028E0F,
	1710:  0x000097E6,
	1711:  0x00009875,
	1712:  0x000098CE,
	1713:  0x000098DE,
	1714:  0x00009963,
	1715:  0x00029810,
	1716:  0x00009C7C,
	1717:  0x00009E1F,
	1718:  0x00009EC4,
	1719:  0x00006B6F,
	1720:  0x0000F907,
	1721:  0x00004E37,
	1722:  0x00020087,
	1723:  0x0000961D,
	1724:  0x00006237,
	1725:  0x000094A2,
	1727:  0x0000503B,
	1728:  0x00006DFE,
	1729:  0x00029C73,
	1730:  0x00009FA6,
	1731:  0x00003DC9,
	1732:  0x0000888F,
	1733:  0x0002414E,
	1734:  0x00007077,
	1735:  0x00005CF5,
	1736:  0x00004B20,
	1737:  0x000251CD,
	1738:  0x00003559,
	1739:  0x00025D30,
	1740:  0x00006122,
	1741:  0x00028A32,
	1742:  0x00008FA7,
	1743:  0x000091F6,
	1744:  0x00007191,
	1745:  0x00006719,
	1746:  0x000073BA,
	1747:  0x00023281,
	1748:  0x0002A107,
	1749:  0x00003C8B,
	1750:  0x00021980,
	1751:  0x00004B10,
	1752:  0x000078E4,
	1753:  0x00007402,
	1754:  0x000051AE,
	1755:  0x0002870F,
	1756:  0x00004009,
	1757:  0x00006A63,
	1758:  0x0002A2BA,
	1759:  0x00004223,
	1760:  0x0000860F,
	1761:  0x00020A6F,
	1762:  0x00007A2A,
	1763:  0x00029947,
	1764:  0x00028AEA,
	1765:  0x00009755,
	1766:  0x0000704D,
	1767:  0x00005324,
	1768:  0x0002207E,
	1769:  0x000093F4,
	1770:  0x000076D9,
	1771:  0x000289E3,
	1772:  0x00009FA7,
	1773:  0x000077DD,
	1774:  0x00004EA3,
	1775:  0x00004FF0,
	1776:  0x000050BC,
	1777:  0x00004E2F,
	1778:  0x00004F17,
	1779:  0x00009FA8,
	1780:  0x00005434,
	1781:  0x00007D8B,
	1782:  0x00005892,
	1783:  0x000058D0,
	1784:  0x00021DB6,
	1785:  0x00005E92,
	1786:  0x00005E99,
	1787:  0x00005FC2,
	1788:  0x00022712,
	1789:  0x0000658B,
	1790:  0x000233F9,
	1791:  0x00006919,
	1792:  0x00006A43,
	1793:  0x00023C63,
	1794:  0x00006CFF,
	1796:  0x00007200,
	1797:  0x00024505,
	1798:  0x0000738C,
	1799:  0x00003EDB,
	1800:  0x00024A13,
	1801:  0x00005B15,
	1802:  0x000074B9,
	1803:  0x00008B83,
	1804:  0x00025CA4,
	1805:  0x00025695,
	1806:  0x00007A93,
	1807:  0x00007BEC,
	1808:  0x00007CC3,
	1809:  0x00007E6C,
	1810:  0x000082F8,
	1811:  0x00008597,
	1812:  0x00009FA9,
	1813:  0x00008890,
	1814:  0x00009FAA,
	1815:  0x00008EB9,
	1816:  0x00009FAB,
	1817:  0x00008FCF,
	1818:  0x0000855F,
	1819:  0x000099E0,
	1820:  0x00009221,
	1821:  0x00009FAC,
	1822:  0x00028DB9,
	1823:  0x0002143F,
	1824:  0x00004071,
	1825:  0x000042A2,
	1826:  0x00005A1A,
	1830:  0x00009868,
	1831:  0x0000676B,
	1832:  0x00004276,
	1833:  0x0000573D,
	1835:  0x000085D6,
	1836:  0x0002497B,
	1837:  0x000082BF,
	1838:  0x0002710D,
	1839:  0x00004C81,
	1840:  0x00026D74,
	1841:  0x00005D7B,
	1842:  0x00026B15,
	1843:  0x00026FBE,
	1844:  0x00009FAD,
	1845:  0x00009FAE,
	1846:  0x00005B96,
	1847:  0x00009FAF,
	1848:  0x000066E7,
	1849:  0x00007E5B,
	1850:  0x00006E57,
	1851:  0x000079CA,
	1852:  0x00003D88,
	1853:  0x000044C3,
	1854:  0x00023256,
	1855:  0x00022796,
	1856:  0x0000439A,
	1857:  0x00004536,
	1859:  0x00005CD5,
	1860:  0x00023B1A,
	1861:  0x00008AF9,
	1862:  0x00005C78,
	1863:  0x00003D12,
	1864:  0x00023551,
	1865:  0x00005D78,
	1866:  0x00009FB2,
	1867:  0x00007157,
	1868:  0x00004558,
	1869:  0x000240EC,
	1870:  0x00021E23,
	1871:  0x00004C77,
	1872:  0x00003978,
	1873:  0x0000344A,
	1874:  0x000201A4,
	1875:  0x00026C41,
	1876:  0x00008ACC,
	1877:  0x00004FB4,
	1878:  0x00020239,
	1879:  0x000059BF,
	1880:  0x0000816C,
	1881:  0x00009856,
	1882:  0x000298FA,
	1883:  0x00005F3B,
	1884:  0x00020B9F,
	1886:  0x000221C1,
	1887:  0x0002896D,
	1888:  0x00004102,
	1889:  0x000046BB,
	1890:  0x00029079,
	1891:  0x00003F07,
	1892:  0x00009FB3,
	1893:  0x0002A1B5,
	1894:  0x000040F8,
	1895:  0x000037D6,
	1896:  0x000046F7,
	1897:  0x00026C46,
	1898:  0x0000417C,
	1899:  0x000286B2,
	1900:  0x000273FF,
	1901:  0x0000456D,
	1902:  0x000038D4,
	1903:  0x0002549A,
	1904:  0x00004561,
	1905:  0x0000451B,
	1906:  0x00004D89,
	1907:  0x00004C7B,
	1908:  0x00004D76,
	1909:  0x000045EA,
	1910:  0x00003FC8,
	1911:  0x00024B0F,
	1912:  0x00003661,
	1913:  0x000044DE,
	1914:  0x000044BD,
	1915:  0x000041ED,
	1916:  0x00005D3E,
	1917:  0x00005D48,
	1918:  0x00005D56,
	1919:  0x00003DFC,
	1920:  0x0000380F,
	1921:  0x00005DA4,
	1922:  0x00005DB9,
	1923:  0x00003820,
	1924:  0x00003838,
	1925:  0x00005E42,
	1926:  0x00005EBD,
	1927:  0x00005F25,
	1928:  0x00005F83,
	1929:  0x00003908,
	1930:  0x00003914,
	1931:  0x0000393F,
	1932:  0x0000394D,
	1933:  0x000060D7,
	1934:  0x0000613D,
	1935:  0x00005CE5,
	1936:  0x00003989,
	1937:  0x000061B7,
	1938:  0x000061B9,
	1939:  0x000061CF,
	1940:  0x000039B8,
	1941:  0x0000622C,
	1942:  0x00006290,
	1943:  0x000062E5,
	1944:  0x00006318,
	1945:  0x000039F8,
	1946:  0x000056B1,
	1947:  0x00003A03,
	1948:  0x000063E2,
	1949:  0x000063FB,
	1950:  0x00006407,
	1951:  0x0000645A,
	1952:  0x00003A4B,
	1953:  0x000064C0,
	1954:  0x00005D15,
	1955:  0x00005621,
	1956:  0x00009F9F,
	1957:  0x00003A97,
	1958:  0x00006586,
	1959:  0x00003ABD,
	1960:  0x000065FF,
	1961:  0x00006653,
	1962:  0x00003AF2,
	1963:  0x00006692,
	1964:  0x00003B22,
	1965:  0x00006716,
	1966:  0x00003B42,
	1967:  0x000067A4,
	1968:  0x00006800,
	1969:  0x00003B58,
	1970:  0x0000684A,
	1971:  0x00006884,
	1972:  0x00003B72,
	1973:  0x00003B71,
	1974:  0x00003B7B,
	1975:  0x00006909,
	1976:  0x00006943,
	1977:  0x0000725C,
	1978:  0x00006964,
	1979:  0x0000699F,
	1980:  0x00006985,
	1981:  0x00003BBC,
	1982:  0x000069D6,
	1983:  0x00003BDD,
	1984:  0x00006A65,
	1985:  0x00006A74,
	1986:  0x00006A71,
	1987:  0x00006A82,
	1988:  0x00003BEC,
	1989:  0x00006A99,
	1990:  0x00003BF2,
	1991:  0x00006AAB,
	1992:  0x00006AB5,
	1993:  0x00006AD4,
	1994:  0x00006AF6,
	1995:  0x00006B81,
	1996:  0x00006BC1,
	1997:  0x00006BEA,
	1998:  0x00006C75,
	1999:  0x00006CAA,
	2000:  0x00003CCB,
	2001:  0x00006D02,
	2002:  0x00006D06,
	2003:  0x00006D26,
	2004:  0x00006D81,
	2005:  0x00003CEF,
	2006:  0x00006DA4,
	2007:  0x00006DB1,
	2008:  0x00006E15,
	2009:  0x00006E18,
	2010:  0x00006E29,
	2011:  0x00006E86,
	2012:  0x000289C0,
	2013:  0x00006EBB,
	2014:  0x00006EE2,
	2015:  0x00006EDA,
	2016:  0x00009F7F,
	2017:  0x00006EE8,
	2018:  0x00006EE9,
	2019:  0x00006F24,
	2020:  0x00006F34,
	2021:  0x00003D46,
	2022:  0x00023F41,
	2023:  0x00006F81,
	2024:  0x00006FBE,
	2025:  0x00003D6A,
	2026:  0x00003D75,
	2027:  0x000071B7,
	2028:  0x00005C99,
	2029:  0x00003D8A,
	2030:  0x0000702C,
	2031:  0x00003D91,
	2032:  0x00007050,
	2033:  0x00007054,
	2034:  0x0000706F,
	2035:  0x0000707F,
	2036:  0x00007089,
	2037:  0x00020325,
	2038:  0x000043C1,
	2039:  0x000035F1,
	2040:  0x00020ED8,
	2041:  0x00023ED7,
	2042:  0x000057BE,
	2043:  0x00026ED3,
	2044:  0x0000713E,
	2045:  0x000257E0,
	2046:  0x0000364E,
	2047:  0x000069A2,
	2048:  0x00028BE9,
	2049:  0x00005B74,
	2050:  0x00007A49,
	2051:  0x000258E1,
	2052:  0x000294D9,
	2053:  0x00007A65,
	2054:  0x00007A7D,
	2055:  0x000259AC,
	2056:  0x00007ABB,
	2057:  0x00007AB0,
	2058:  0x00007AC2,
	2059:  0x00007AC3,
	2060:  0x000071D1,
	2061:  0x0002648D,
	2062:  0x000041CA,
	2063:  0x00007ADA,
	2064:  0x00007ADD,
	2065:  0x00007AEA,
	2066:  0x000041EF,
	2067:  0x000054B2,
	2068:  0x00025C01,
	2069:  0x00007B0B,
	2070:  0x00007B55,
	2071:  0x00007B29,
	2072:  0x0002530E,
	2073:  0x00025CFE,
	2074:  0x00007BA2,
	2075:  0x00007B6F,
	2076:  0x0000839C,
	2077:  0x00025BB4,
	2078:  0x00026C7F,
	2079:  0x00007BD0,
	2080:  0x00008421,
	2081:  0x00007B92,
	2082:  0x00007BB8,
	2083:  0x00025D20,
	2084:  0x00003DAD,
	2085:  0x00025C65,
	2086:  0x00008492,
	2087:  0x00007BFA,
	2088:  0x00007C06,
	2089:  0x00007C35,
	2090:  0x00025CC1,
	2091:  0x00007C44,
	2092:  0x00007C83,
	2093:  0x00024882,
	2094:  0x00007CA6,
	2095:  0x0000667D,
	2096:  0x00024578,
	2097:  0x00007CC9,
	2098:  0x00007CC7,
	2099:  0x00007CE6,
	2100:  0x00007C74,
	2101:  0x00007CF3,
	2102:  0x00007CF5,
	2103:  0x00007CCE,
	2104:  0x00007E67,
	2105:  0x0000451D,
	2106:  0x00026E44,
	2107:  0x00007D5D,
	2108:  0x00026ED6,
	2109:  0x0000748D,
	2110:  0x00007D89,
	2111:  0x00007DAB,
	2112:  0x00007135,
	2113:  0x00007DB3,
	2114:  0x00007DD2,
	2115:  0x00024057,
	2116:  0x00026029,
	2117:  0x00007DE4,
	2118:  0x00003D13,
	2119:  0x00007DF5,
	2120:  0x000217F9,
	2121:  0x00007DE5,
	2122:  0x0002836D,
	2123:  0x00007E1D,
	2124:  0x00026121,
	2125:  0x0002615A,
	2126:  0x00007E6E,
	2127:  0x00007E92,
	2128:  0x0000432B,
	2129:  0x0000946C,
	2130:  0x00007E27,
	2131:  0x00007F40,
	2132:  0x00007F41,
	2133:  0x00007F47,
	2134:  0x00007936,
	2135:  0x000262D0,
	2136:  0x000099E1,
	2137:  0x00007F97,
	2138:  0x00026351,
	2139:  0x00007FA3,
	2140:  0x00021661,
	2141:  0x00020068,
	2142:  0x0000455C,
	2143:  0x00023766,
	2144:  0x00004503,
	2145:  0x0002833A,
	2146:  0x00007FFA,
	2147:  0x00026489,
	2148:  0x00008005,
	2149:  0x00008008,
	2150:  0x0000801D,
	2151:  0x00008028,
	2152:  0x0000802F,
	2153:  0x0002A087,
	2154:  0x00026CC3,
	2155:  0x0000803B,
	2156:  0x0000803C,
	2157:  0x00008061,
	2158:  0x00022714,
	2159:  0x00004989,
	2160:  0x00026626,
	2161:  0x00023DE3,
	2162:  0x000266E8,
	2163:  0x00006725,
	2164:  0x000080A7,
	2165:  0x00028A48,
	2166:  0x00008107,
	2167:  0x0000811A,
	2168:  0x000058B0,
	2169:  0x000226F6,
	2170:  0x00006C7F,
	2171:  0x00026498,
	2172:  0x00024FB8,
	2173:  0x000064E7,
	2174:  0x0002148A,
	2175:  0x00008218,
	2176:  0x0002185E,
	2177:  0x00006A53,
	2178:  0x00024A65,
	2179:  0x00024A95,
	2180:  0x0000447A,
	2181:  0x00008229,
	2182:  0x00020B0D,
	2183:  0x00026A52,
	2184:  0x00023D7E,
	2185:  0x00004FF9,
	2186:  0x000214FD,
	2187:  0x000084E2,
	2188:  0x00008362,
	2189:  0x00026B0A,
	2190:  0x000249A7,
	2191:  0x00023530,
	2192:  0x00021773,
	2193:  0x00023DF8,
	2194:  0x000082AA,
	2195:  0x0000691B,
	2196:  0x0002F994,
	2197:  0x000041DB,
	2198:  0x0000854B,
	2199:  0x000082D0,
	2200:  0x0000831A,
	2201:  0x00020E16,
	2202:  0x000217B4,
	2203:  0x000036C1,
	2204:  0x0002317D,
	2205:  0x0002355A,
	2206:  0x0000827B,
	2207:  0x000082E2,
	2208:  0x00008318,
	2209:  0x00023E8B,
	2210:  0x00026DA3,
	2211:  0x00026B05,
	2212:  0x00026B97,
	2213:  0x000235CE,
	2214:  0x00003DBF,
	2215:  0x0000831D,
	2216:  0x000055EC,
	2217:  0x00008385,
	2218:  0x0000450B,
	2219:  0x00026DA5,
	2220:  0x000083AC,
	2221:  0x000083C1,
	2222:  0x000083D3,
	2223:  0x0000347E,
	2224:  0x00026ED4,
	2225:  0x00006A57,
	2226:  0x0000855A,
	2227:  0x00003496,
	2228:  0x00026E42,
	2229:  0x00022EEF,
	2230:  0x00008458,
	2231:  0x00025BE4,
	2232:  0x00008471,
	2233:  0x00003DD3,
	2234:  0x000044E4,
	2235:  0x00006AA7,
	2236:  0x0000844A,
	2237:  0x00023CB5,
	2238:  0x00007958,
	2239:  0x000084A8,
	2240:  0x00026B96,
	2241:  0x00026E77,
	2242:  0x00026E43,
	2243:  0x000084DE,
	2244:  0x0000840F,
	2245:  0x00008391,
	2246:  0x000044A0,
	2247:  0x00008493,
	2248:  0x000084E4,
	2249:  0x00025C91,
	2250:  0x00004240,
	2251:  0x00025CC0,
	2252:  0x00004543,
	2253:  0x00008534,
	2254:  0x00005AF2,
	2255:  0x00026E99,
	2256:  0x00004527,
	2257:  0x00008573,
	2258:  0x00004516,
	2259:  0x000067BF,
	2260:  0x00008616,
	2261:  0x00028625,
	2262:  0x0002863B,
	2263:  0x000085C1,
	2264:  0x00027088,
	2265:  0x00008602,
	2266:  0x00021582,
	2267:  0x000270CD,
	2268:  0x0002F9B2,
	2269:  0x0000456A,
	2270:  0x00008628,
	2271:  0x00003648,
	2272:  0x000218A2,
	2273:  0x000053F7,
	2274:  0x0002739A,
	2275:  0x0000867E,
	2276:  0x00008771,
	2277:  0x0002A0F8,
	2278:  0x000087EE,
	2279:  0x00022C27,
	2280:  0x000087B1,
	2281:  0x000087DA,
	2282:  0x0000880F,
	2283:  0x00005661,
	2284:  0x0000866C,
	2285:  0x00006856,
	2286:  0x0000460F,
	2287:  0x00008845,
	2288:  0x00008846,
	2289:  0x000275E0,
	2290:  0x00023DB9,
	2291:  0x000275E4,
	2292:  0x0000885E,
	2293:  0x0000889C,
	2294:  0x0000465B,
	2295:  0x000088B4,
	2296:  0x000088B5,
	2297:  0x000063C1,
	2298:  0x000088C5,
	2299:  0x00007777,
	2300:  0x0002770F,
	2301:  0x00008987,
	2302:  0x0000898A,
	2303:  0x000089A6,
	2304:  0x000089A9,
	2305:  0x000089A7,
	2306:  0x000089BC,
	2307:  0x00028A25,
	2308:  0x000089E7,
	2309:  0x00027924,
	2310:  0x00027ABD,
	2311:  0x00008A9C,
	2312:  0x00007793,
	2313:  0x000091FE,
	2314:  0x00008A90,
	2315:  0x00027A59,
	2316:  0x00007AE9,
	2317:  0x00027B3A,
	2318:  0x00023F8F,
	2319:  0x00004713,
	2320:  0x00027B38,
	2321:  0x0000717C,
	2322:  0x00008B0C,
	2323:  0x00008B1F,
	2324:  0x00025430,
	2325:  0x00025565,
	2326:  0x00008B3F,
	2327:  0x00008B4C,
	2328:  0x00008B4D,
	2329:  0x00008AA9,
	2330:  0x00024A7A,
	2331:  0x00008B90,
	2332:  0x00008B9B,
	2333:  0x00008AAF,
	2334:  0x000216DF,
	2335:  0x00004615,
	2336:  0x0000884F,
	2337:  0x00008C9B,
	2338:  0x00027D54,
	2339:  0x00027D8F,
	2340:  0x0002F9D4,
	2341:  0x00003725,
	2342:  0x00027D53,
	2343:  0x00008CD6,
	2344:  0x00027D98,
	2345:  0x00027DBD,
	2346:  0x00008D12,
	2347:  0x00008D03,
	2348:  0x00021910,
	2349:  0x00008CDB,
	2350:  0x0000705C,
	2351:  0x00008D11,
	2352:  0x00024CC9,
	2353:  0x00003ED0,
	2354:  0x00008D77,
	2355:  0x00008DA9,
	2356:  0x00028002,
	2357:  0x00021014,
	2358:  0x0002498A,
	2359:  0x00003B7C,
	2360:  0x000281BC,
	2361:  0x0002710C,
	2362:  0x00007AE7,
	2363:  0x00008EAD,
	2364:  0x00008EB6,
	2365:  0x00008EC3,
	2366:  0x000092D4,
	2367:  0x00008F19,
	2368:  0x00008F2D,
	2369:  0x00028365,
	2370:  0x00028412,
	2371:  0x00008FA5,
	2372:  0x00009303,
	2373:  0x0002A29F,
	2374:  0x00020A50,
	2375:  0x00008FB3,
	2376:  0x0000492A,
	2377:  0x000289DE,
	2378:  0x0002853D,
	2379:  0x00023DBB,
	2380:  0x00005EF8,
	2381:  0x00023262,
	2382:  0x00008FF9,
	2383:  0x0002A014,
	2384:  0x000286BC,
	2385:  0x00028501,
	2386:  0x00022325,
	2387:  0x00003980,
	2388:  0x00026ED7,
	2389:  0x00009037,
	2390:  0x0002853C,
	2391:  0x00027ABE,
	2392:  0x00009061,
	2393:  0x0002856C,
	2394:  0x0002860B,
	2395:  0x000090A8,
	2396:  0x00028713,
	2397:  0x000090C4,
	2398:  0x000286E6,
	2399:  0x000090AE,
	2400:  0x000090FD,
	2401:  0x00009167,
	2402:  0x00003AF0,
	2403:  0x000091A9,
	2404:  0x000091C4,
	2405:  0x00007CAC,
	2406:  0x00028933,
	2407:  0x00021E89,
	2408:  0x0000920E,
	2409:  0x00006C9F,
	2410:  0x00009241,
	2411:  0x00009262,
	2412:  0x000255B9,
	2413:  0x000092B9,
	2414:  0x00028AC6,
	2415:  0x00023C9B,
	2416:  0x00028B0C,
	2417:  0x000255DB,
	2418:  0x00020D31,
	2419:  0x0000932C,
	2420:  0x0000936B,
	2421:  0x00028AE1,
	2422:  0x00028BEB,
	2423:  0x0000708F,
	2424:  0x00005AC3,
	2425:  0x00028AE2,
	2426:  0x00028AE5,
	2427:  0x00004965,
	2428:  0x00009244,
	2429:  0x00028BEC,
	2430:  0x00028C39,
	2431:  0x00028BFF,
	2432:  0x00009373,
	2433:  0x0000945B,
	2434:  0x00008EBC,
	2435:  0x00009585,
	2436:  0x000095A6,
	2437:  0x00009426,
	2438:  0x000095A0,
	2439:  0x00006FF6,
	2440:  0x000042B9,
	2441:  0x0002267A,
	2442:  0x000286D8,
	2443:  0x0002127C,
	2444:  0x00023E2E,
	2445:  0x000049DF,
	2446:  0x00006C1C,
	2447:  0x0000967B,
	2448:  0x00009696,
	2449:  0x0000416C,
	2450:  0x000096A3,
	2451:  0x00026ED5,
	2452:  0x000061DA,
	2453:  0x000096B6,
	2454:  0x000078F5,
	2455:  0x00028AE0,
	2456:  0x000096BD,
	2457:  0x000053CC,
	2458:  0x000049A1,
	2459:  0x00026CB8,
	2460:  0x00020274,
	2461:  0x00026410,
	2462:  0x000290AF,
	2463:  0x000290E5,
	2464:  0x00024AD1,
	2465:  0x00021915,
	2466:  0x0002330A,
	2467:  0x00009731,
	2468:  0x00008642,
	2469:  0x00009736,
	2470:  0x00004A0F,
	2471:  0x0000453D,
	2472:  0x00004585,
	2473:  0x00024AE9,
	2474:  0x00007075,
	2475:  0x00005B41,
	2476:  0x0000971B,
	2477:  0x0000975C,
	2478:  0x000291D5,
	2479:  0x00009757,
	2480:  0x00005B4A,
	2481:  0x000291EB,
	2482:  0x0000975F,
	2483:  0x00009425,
	2484:  0x000050D0,
	2485:  0x000230B7,
	2486:  0x000230BC,
	2487:  0x00009789,
	2488:  0x0000979F,
	2489:  0x000097B1,
	2490:  0x000097BE,
	2491:  0x000097C0,
	2492:  0x000097D2,
	2493:  0x000097E0,
	2494:  0x0002546C,
	2495:  0x000097EE,
	2496:  0x0000741C,
	2497:  0x00029433,
	2498:  0x000097FF,
	2499:  0x000097F5,
	2500:  0x0002941D,
	2501:  0x0002797A,
	2502:  0x00004AD1,
	2503:  0x00009834,
	2504:  0x00009833,
	2505:  0x0000984B,
	2506:  0x00009866,
	2507:  0x00003B0E,
	2508:  0x00027175,
	2509:  0x00003D51,
	2510:  0x00020630,
	2511:  0x0002415C,
	2512:  0x00025706,
	2513:  0x000098CA,
	2514:  0x000098B7,
	2515:  0x000098C8,
	2516:  0x000098C7,
	2517:  0x00004AFF,
	2518:  0x00026D27,
	2519:  0x000216D3,
	2520:  0x000055B0,
	2521:  0x000098E1,
	2522:  0x000098E6,
	2523:  0x000098EC,
	2524:  0x00009378,
	2525:  0x00009939,
	2526:  0x00024A29,
	2527:  0x00004B72,
	2528:  0x00029857,
	2529:  0x00029905,
	2530:  0x000099F5,
	2531:  0x00009A0C,
	2532:  0x00009A3B,
	2533:  0x00009A10,
	2534:  0x00009A58,
	2535:  0x00025725,
	2536:  0x000036C4,
	2537:  0x000290B1,
	2538:  0x00029BD5,
	2539:  0x00009AE0,
	2540:  0x00009AE2,
	2541:  0x00029B05,
	2542:  0x00009AF4,
	2543:  0x00004C0E,
	2544:  0x00009B14,
	2545:  0x00009B2D,
	2546:  0x00028600,
	2547:  0x00005034,
	2548:  0x00009B34,
	2549:  0x000269A8,
	2550:  0x000038C3,
	2551:  0x0002307D,
	2552:  0x00009B50,
	2553:  0x00009B40,
	2554:  0x00029D3E,
	2555:  0x00005A45,
	2556:  0x00021863,
	2557:  0x00009B8E,
	2558:  0x0002424B,
	2559:  0x00009C02,
	2560:  0x00009BFF,
	2561:  0x00009C0C,
	2562:  0x00029E68,
	2563:  0x00009DD4,
	2564:  0x00029FB7,
	2565:  0x0002A192,
	2566:  0x0002A1AB,
	2567:  0x0002A0E1,
	2568:  0x0002A123,
	2569:  0x0002A1DF,
	2570:  0x00009D7E,
	2571:  0x00009D83,
	2572:  0x0002A134,
	2573:  0x00009E0E,
	2574:  0x00006888,
	2575:  0x00009DC4,
	2576:  0x0002215B,
	2577:  0x0002A193,
	2578:  0x0002A220,
	2579:  0x0002193B,
	2580:  0x0002A233,
	2581:  0x00009D39,
	2582:  0x0002A0B9,
	2583:  0x0002A2B4,
	2584:  0x00009E90,
	2585:  0x00009E95,
	2586:  0x00009E9E,
	2587:  0x00009EA2,
	2588:  0x00004D34,
	2589:  0x00009EAA,
	2590:  0x00009EAF,
	2591:  0x00024364,
	2592:  0x00009EC1,
	2593:  0x00003B60,
	2594:  0x000039E5,
	2595:  0x00003D1D,
	2596:  0x00004F32,
	2597:  0x000037BE,
	2598:  0x00028C2B,
	2599:  0x00009F02,
	2600:  0x00009F08,
	2601:  0x00004B96,
	2602:  0x00009424,
	2603:  0x00026DA2,
	2604:  0x00009F17,
	2605:  0x00009F16,
	2606:  0x00009F39,
	2607:  0x0000569F,
	2608:  0x0000568A,
	2609:  0x00009F45,
	2610:  0x000099B8,
	2611:  0x0002908B,
	2612:  0x000097F2,
	2613:  0x0000847F,
	2614:  0x00009F62,
	2615:  0x00009F69,
	2616:  0x00007ADC,
	2617:  0x00009F8E,
	2618:  0x00007216,
	2619:  0x00004BBE,
	2620:  0x00024975,
	2621:  0x000249BB,
	2622:  0x00007177,
	2623:  0x000249F8,
	2624:  0x00024348,
	2625:  0x00024A51,
	2626:  0x0000739E,
	2627:  0x00028BDA,
	2628:  0x000218FA,
	2629:  0x0000799F,
	2630:  0x0002897E,
	2631:  0x00028E36,
	2632:  0x00009369,
	2633:  0x000093F3,
	2634:  0x00028A44,
	2635:  0x000092EC,
	2636:  0x00009381,
	2637:  0x000093CB,
	2638:  0x0002896C,
	2639:  0x000244B9,
	2640:  0x00007217,
	2641:  0x00003EEB,
	2642:  0x00007772,
	2643:  0x00007A43,
	2644:  0x000070D0,
	2645:  0x00024473,
	2646:  0x000243F8,
	2647:  0x0000717E,
	2648:  0x000217EF,
	2649:  0x000070A3,
	2650:  0x000218BE,
	2651:  0x00023599,
	2652:  0x00003EC7,
	2653:  0x00021885,
	2654:  0x0002542F,
	2655:  0x000217F8,
	2656:  0x00003722,
	2657:  0x000216FB,
	2658:  0x00021839,
	2659:  0x000036E1,
	2660:  0x00021774,
	2661:  0x000218D1,
	2662:  0x00025F4B,
	2663:  0x00003723,
	2664:  0x000216C0,
	2665:  0x0000575B,
	2666:  0x00024A25,
	2667:  0x000213FE,
	2668:  0x000212A8,
	2669:  0x000213C6,
	2670:  0x000214B6,
	2671:  0x00008503,
	2672:  0x000236A6,
	2673:  0x00008503,
	2674:  0x00008455,
	2675:  0x00024994,
	2676:  0x00027165,
	2677:  0x00023E31,
	2678:  0x0002555C,
	2679:  0x00023EFB,
	2680:  0x00027052,
	2681:  0x000044F4,
	2682:  0x000236EE,
	2683:  0x0002999D,
	2684:  0x00026F26,
	2685:  0x000067F9,
	2686:  0x00003733,
	2687:  0x00003C15,
	2688:  0x00003DE7,
	2689:  0x0000586C,
	2690:  0x00021922,
	2691:  0x00006810,
	2692:  0x00004057,
	2693:  0x0002373F,
	2694:  0x000240E1,
	2695:  0x0002408B,
	2696:  0x0002410F,
	2697:  0x00026C21,
	2698:  0x000054CB,
	2699:  0x0000569E,
	2700:  0x000266B1,
	2701:  0x00005692,
	2702:  0x00020FDF,
	2703:  0x00020BA8,
	2704:  0x00020E0D,
	2705:  0x000093C6,
	2706:  0x00028B13,
	2707:  0x0000939C,
	2708:  0x00004EF8,
	2709:  0x0000512B,
	2710:  0x00003819,
	2711:  0x00024436,
	2712:  0x00004EBC,
	2713:  0x00020465,
	2714:  0x0002037F,
	2715:  0x00004F4B,
	2716:  0x00004F8A,
	2717:  0x00025651,
	2718:  0x00005A68,
	2719:  0x000201AB,
	2720:  0x000203CB,
	2721:  0x00003999,
	2722:  0x0002030A,
	2723:  0x00020414,
	2724:  0x00003435,
	2725:  0x00004F29,
	2726:  0x000202C0,
	2727:  0x00028EB3,
	2728:  0x00020275,
	2729:  0x00008ADA,
	2730:  0x0002020C,
	2731:  0x00004E98,
	2732:  0x000050CD,
	2733:  0x0000510D,
	2734:  0x00004FA2,
	2735:  0x00004F03,
	2736:  0x00024A0E,
	2737:  0x00023E8A,
	2738:  0x00004F42,
	2739:  0x0000502E,
	2740:  0x0000506C,
	2741:  0x00005081,
	2742:  0x00004FCC,
	2743:  0x00004FE5,
	2744:  0x00005058,
	2745:  0x000050FC,
	2746:  0x00005159,
	2747:  0x0000515B,
	2748:  0x0000515D,
	2749:  0x0000515E,
	2750:  0x00006E76,
	2751:  0x00023595,
	2752:  0x00023E39,
	2753:  0x00023EBF,
	2754:  0x00006D72,
	2755:  0x00021884,
	2756:  0x00023E89,
	2757:  0x000051A8,
	2758:  0x000051C3,
	2759:  0x000205E0,
	2760:  0x000044DD,
	2761:  0x000204A3,
	2762:  0x00020492,
	2763:  0x00020491,
	2764:  0x00008D7A,
	2765:  0x00028A9C,
	2766:  0x0002070E,
	2767:  0x00005259,
	2768:  0x000052A4,
	2769:  0x00020873,
	2770:  0x000052E1,
	2771:  0x0000936E,
	2772:  0x0000467A,
	2773:  0x0000718C,
	2774:  0x0002438C,
	2775:  0x00020C20,
	2776:  0x000249AC,
	2777:  0x000210E4,
	2778:  0x000069D1,
	2779:  0x00020E1D,
	2780:  0x00007479,
	2781:  0x00003EDE,
	2782:  0x00007499,
	2783:  0x00007414,
	2784:  0x00007456,
	2785:  0x00007398,
	2786:  0x00004B8E,
	2787:  0x00024ABC,
	2788:  0x0002408D,
	2789:  0x000053D0,
	2790:  0x00003584,
	2791:  0x0000720F,
	2792:  0x000240C9,
	2793:  0x000055B4,
	2794:  0x00020345,
	2795:  0x000054CD,
	2796:  0x00020BC6,
	2797:  0x0000571D,
	2798:  0x0000925D,
	2799:  0x000096F4,
	2800:  0x00009366,
	2801:  0x000057DD,
	2802:  0x0000578D,
	2803:  0x0000577F,
	2804:  0x0000363E,
	2805:  0x000058CB,
	2806:  0x00005A99,
	2807:  0x00028A46,
	2808:  0x000216FA,
	2809:  0x0002176F,
	2810:  0x00021710,
	2811:  0x00005A2C,
	2812:  0x000059B8,
	2813:  0x0000928F,
	2814:  0x00005A7E,
	2815:  0x00005ACF,
	2816:  0x00005A12,
	2817:  0x00025946,
	2818:  0x000219F3,
	2819:  0x00021861,
	2820:  0x00024295,
	2821:  0x000036F5,
	2822:  0x00006D05,
	2823:  0x00007443,
	2824:  0x00005A21,
	2825:  0x00025E83,
	2826:  0x00005A81,
	2827:  0x00028BD7,
	2828:  0x00020413,
	2829:  0x000093E0,
	2830:  0x0000748C,
	2831:  0x00021303,
	2832:  0x00007105,
	2833:  0x00004972,
	2834:  0x00009408,
	2835:  0x000289FB,
	2836:  0x000093BD,
	2837:  0x000037A0,
	2838:  0x00005C1E,
	2839:  0x00005C9E,
	2840:  0x00005E5E,
	2841:  0x00005E48,
	2842:  0x00021996,
	2843:  0x0002197C,
	2844:  0x00023AEE,
	2845:  0x00005ECD,
	2846:  0x00005B4F,
	2847:  0x00021903,
	2848:  0x00021904,
	2849:  0x00003701,
	2850:  0x000218A0,
	2851:  0x000036DD,
	2852:  0x000216FE,
	2853:  0x000036D3,
	2854:  0x0000812A,
	2855:  0x00028A47,
	2856:  0x00021DBA,
	2857:  0x00023472,
	2858:  0x000289A8,
	2859:  0x00005F0C,
	2860:  0x00005F0E,
	2861:  0x00021927,
	2862:  0x000217AB,
	2863:  0x00005A6B,
	2864:  0x0002173B,
	2865:  0x00005B44,
	2866:  0x00008614,
	2867:  0x000275FD,
	2868:  0x00008860,
	2869:  0x0000607E,
	2870:  0x00022860,
	2871:  0x0002262B,
	2872:  0x00005FDB,
	2873:  0x00003EB8,
	2874:  0x000225AF,
	2875:  0x000225BE,
	2876:  0x00029088,
	2877:  0x00026F73,
	2878:  0x000061C0,
	2879:  0x0002003E,
	2880:  0x00020046,
	2881:  0x0002261B,
	2882:  0x00006199,
	2883:  0x00006198,
	2884:  0x00006075,
	2885:  0x00022C9B,
	2886:  0x00022D07,
	2887:  0x000246D4,
	2888:  0x0002914D,
	2889:  0x00006471,
	2890:  0x00024665,
	2891:  0x00022B6A,
	2892:  0x00003A29,
	2893:  0x00022B22,
	2894:  0x00023450,
	2895:  0x000298EA,
	2896:  0x00022E78,
	2897:  0x00006337,
	2898:  0x0002A45B,
	2899:  0x000064B6,
	2900:  0x00006331,
	2901:  0x000063D1,
	2902:  0x000249E3,
	2903:  0x00022D67,
	2904:  0x000062A4,
	2905:  0x00022CA1,
	2906:  0x0000643B,
	2907:  0x0000656B,
	2908:  0x00006972,
	2909:  0x00003BF4,
	2910:  0x0002308E,
	2911:  0x000232AD,
	2912:  0x00024989,
	2913:  0x000232AB,
	2914:  0x0000550D,
	2915:  0x000232E0,
	2916:  0x000218D9,
	2917:  0x0002943F,
	2918:  0x000066CE,
	2919:  0x00023289,
	2920:  0x000231B3,
	2921:  0x00003AE0,
	2922:  0x00004190,
	2923:  0x00025584,
	2924:  0x00028B22,
	2925:  0x0002558F,
	2926:  0x000216FC,
	2927:  0x0002555B,
	2928:  0x00025425,
	2929:  0x000078EE,
	2930:  0x00023103,
	2931:  0x0002182A,
	2932:  0x00023234,
	2933:  0x00003464,
	2934:  0x0002320F,
	2935:  0x00023182,
	2936:  0x000242C9,
	2937:  0x0000668E,
	2938:  0x00026D24,
	2939:  0x0000666B,
	2940:  0x00004B93,
	2941:  0x00006630,
	2942:  0x00027870,
	2943:  0x00021DEB,
	2944:  0x00006663,
	2945:  0x000232D2,
	2946:  0x000232E1,
	2947:  0x0000661E,
	2948:  0x00025872,
	2949:  0x000038D1,
	2950:  0x0002383A,
	2951:  0x000237BC,
	2952:  0x00003B99,
	2953:  0x000237A2,
	2954:  0x000233FE,
	2955:  0x000074D0,
	2956:  0x00003B96,
	2957:  0x0000678F,
	2958:  0x0002462A,
	2959:  0x000068B6,
	2960:  0x0000681E,
	2961:  0x00003BC4,
	2962:  0x00006ABE,
	2963:  0x00003863,
	2964:  0x000237D5,
	2965:  0x00024487,
	2966:  0x00006A33,
	2967:  0x00006A52,
	2968:  0x00006AC9,
	2969:  0x00006B05,
	2970:  0x00021912,
	2971:  0x00006511,
	2972:  0x00006898,
	2973:  0x00006A4C,
	2974:  0x00003BD7,
	2975:  0x00006A7A,
	2976:  0x00006B57,
	2977:  0x00023FC0,
	2978:  0x00023C9A,
	2979:  0x000093A0,
	2980:  0x000092F2,
	2981:  0x00028BEA,
	2982:  0x00028ACB,
	2983:  0x00009289,
	2984:  0x0002801E,
	2985:  0x000289DC,
	2986:  0x00009467,
	2987:  0x00006DA5,
	2988:  0x00006F0B,
	2989:  0x000249EC,
	2990:  0x00006D67,
	2991:  0x00023F7F,
	2992:  0x00003D8F,
	2993:  0x00006E04,
	2994:  0x0002403C,
	2995:  0x00005A3D,
	2996:  0x00006E0A,
	2997:  0x00005847,
	2998:  0x00006D24,
	2999:  0x00007842,
	3000:  0x0000713B,
	3001:  0x0002431A,
	3002:  0x00024276,
	3003:  0x000070F1,
	3004:  0x00007250,
	3005:  0x00007287,
	3006:  0x00007294,
	3007:  0x0002478F,
	3008:  0x00024725,
	3009:  0x00005179,
	3010:  0x00024AA4,
	3011:  0x000205EB,
	3012:  0x0000747A,
	3013:  0x00023EF8,
	3014:  0x0002365F,
	3015:  0x00024A4A,
	3016:  0x00024917,
	3017:  0x00025FE1,
	3018:  0x00003F06,
	3019:  0x00003EB1,
	3020:  0x00024ADF,
	3021:  0x00028C23,
	3022:  0x00023F35,
	3023:  0x000060A7,
	3024:  0x00003EF3,
	3025:  0x000074CC,
	3026:  0x0000743C,
	3027:  0x00009387,
	3028:  0x00007437,
	3029:  0x0000449F,
	3030:  0x00026DEA,
	3031:  0x00004551,
	3032:  0x00007583,
	3033:  0x00003F63,
	3034:  0x00024CD9,
	3035:  0x00024D06,
	3036:  0x00003F58,
	3037:  0x00007555,
	3038:  0x00007673,
	3039:  0x0002A5C6,
	3040:  0x00003B19,
	3041:  0x00007468,
	3042:  0x00028ACC,
	3043:  0x000249AB,
	3044:  0x0002498E,
	3045:  0x00003AFB,
	3046:  0x00003DCD,
	3047:  0x00024A4E,
	3048:  0x00003EFF,
	3049:  0x000249C5,
	3050:  0x000248F3,
	3051:  0x000091FA,
	3052:  0x00005732,
	3053:  0x00009342,
	3054:  0x00028AE3,
	3055:  0x00021864,
	3056:  0x000050DF,
	3057:  0x00025221,
	3058:  0x000251E7,
	3059:  0x00007778,
	3060:  0x00023232,
	3061:  0x0000770E,
	3062:  0x0000770F,
	3063:  0x0000777B,
	3064:  0x00024697,
	3065:  0x00023781,
	3066:  0x00003A5E,
	3067:  0x000248F0,
	3068:  0x00007438,
	3069:  0x0000749B,
	3070:  0x00003EBF,
	3071:  0x00024ABA,
	3072:  0x00024AC7,
	3073:  0x000040C8,
	3074:  0x00024A96,
	3075:  0x000261AE,
	3076:  0x00009307,
	3077:  0x00025581,
	3078:  0x0000781E,
	3079:  0x0000788D,
	3080:  0x00007888,
	3081:  0x000078D2,
	3082:  0x000073D0,
	3083:  0x00007959,
	3084:  0x00027741,
	3085:  0x000256E3,
	3086:  0x0000410E,
	3087:  0x0000799B,
	3088:  0x00008496,
	3089:  0x000079A5,
	3090:  0x00006A2D,
	3091:  0x00023EFA,
	3092:  0x00007A3A,
	3093:  0x000079F4,
	3094:  0x0000416E,
	3095:  0x000216E6,
	3096:  0x00004132,
	3097:  0x00009235,
	3098:  0x000079F1,
	3099:  0x00020D4C,
	3100:  0x0002498C,
	3101:  0x00020299,
	3102:  0x00023DBA,
	3103:  0x0002176E,
	3104:  0x00003597,
	3105:  0x0000556B,
	3106:  0x00003570,
	3107:  0x000036AA,
	3108:  0x000201D4,
	3109:  0x00020C0D,
	3110:  0x00007AE2,
	3111:  0x00005A59,
	3112:  0x000226F5,
	3113:  0x00025AAF,
	3114:  0x00025A9C,
	3115:  0x00005A0D,
	3116:  0x0002025B,
	3117:  0x000078F0,
	3118:  0x00005A2A,
	3119:  0x00025BC6,
	3120:  0x00007AFE,
	3121:  0x000041F9,
	3122:  0x00007C5D,
	3123:  0x00007C6D,
	3124:  0x00004211,
	3125:  0x00025BB3,
	3126:  0x00025EBC,
	3127:  0x00025EA6,
	3128:  0x00007CCD,
	3129:  0x000249F9,
	3130:  0x000217B0,
	3131:  0x00007C8E,
	3132:  0x00007C7C,
	3133:  0x00007CAE,
	3134:  0x00006AB2,
	3135:  0x00007DDC,
	3136:  0x00007E07,
	3137:  0x00007DD3,
	3138:  0x00007F4E,
	3139:  0x00026261,
	3140:  0x0002615C,
	3141:  0x00027B48,
	3142:  0x00007D97,
	3143:  0x00025E82,
	3144:  0x0000426A,
	3145:  0x00026B75,
	3146:  0x00020916,
	3147:  0x000067D6,
	3148:  0x0002004E,
	3149:  0x000235CF,
	3150:  0x000057C4,
	3151:  0x00026412,
	3152:  0x000263F8,
	3153:  0x00024962,
	3154:  0x00007FDD,
	3155:  0x00007B27,
	3156:  0x0002082C,
	3157:  0x00025AE9,
	3158:  0x00025D43,
	3159:  0x00007B0C,
	3160:  0x00025E0E,
	3161:  0x000099E6,
	3162:  0x00008645,
	3163:  0x00009A63,
	3164:  0x00006A1C,
	3165:  0x0002343F,
	3166:  0x000039E2,
	3167:  0x000249F7,
	3168:  0x000265AD,
	3169:  0x00009A1F,
	3170:  0x000265A0,
	3171:  0x00008480,
	3172:  0x00027127,
	3173:  0x00026CD1,
	3174:  0x000044EA,
	3175:  0x00008137,
	3176:  0x00004402,
	3177:  0x000080C6,
	3178:  0x00008109,
	3179:  0x00008142,
	3180:  0x000267B4,
	3181:  0x000098C3,
	3182:  0x00026A42,
	3183:  0x00008262,
	3184:  0x00008265,
	3185:  0x00026A51,
	3186:  0x00008453,
	3187:  0x00026DA7,
	3188:  0x00008610,
	3189:  0x0002721B,
	3190:  0x00005A86,
	3191:  0x0000417F,
	3192:  0x00021840,
	3193:  0x00005B2B,
	3194:  0x000218A1,
	3195:  0x00005AE4,
	3196:  0x000218D8,
	3197:  0x000086A0,
	3198:  0x0002F9BC,
	3199:  0x00023D8F,
	3200:  0x0000882D,
	3201:  0x00027422,
	3202:  0x00005A02,
	3203:  0x0000886E,
	3204:  0x00004F45,
	3205:  0x00008887,
	3206:  0x000088BF,
	3207:  0x000088E6,
	3208:  0x00008965,
	3209:  0x0000894D,
	3210:  0x00025683,
	3211:  0x00008954,
	3212:  0x00027785,
	3213:  0x00027784,
	3214:  0x00028BF5,
	3215:  0x00028BD9,
	3216:  0x00028B9C,
	3217:  0x000289F9,
	3218:  0x00003EAD,
	3219:  0x000084A3,
	3220:  0x000046F5,
	3221:  0x000046CF,
	3222:  0x000037F2,
	3223:  0x00008A3D,
	3224:  0x00008A1C,
	3225:  0x00029448,
	3226:  0x00005F4D,
	3227:  0x0000922B,
	3228:  0x00024284,
	3229:  0x000065D4,
	3230:  0x00007129,
	3231:  0x000070C4,
	3232:  0x00021845,
	3233:  0x00009D6D,
	3234:  0x00008C9F,
	3235:  0x00008CE9,
	3236:  0x00027DDC,
	3237:  0x0000599A,
	3238:  0x000077C3,
	3239:  0x000059F0,
	3240:  0x0000436E,
	3241:  0x000036D4,
	3242:  0x00008E2A,
	3243:  0x00008EA7,
	3244:  0x00024C09,
	3245:  0x00008F30,
	3246:  0x00008F4A,
	3247:  0x000042F4,
	3248:  0x00006C58,
	3249:  0x00006FBB,
	3250:  0x00022321,
	3251:  0x0000489B,
	3252:  0x00006F79,
	3253:  0x00006E8B,
	3254:  0x000217DA,
	3255:  0x00009BE9,
	3256:  0x000036B5,
	3257:  0x0002492F,
	3258:  0x000090BB,
	3259:  0x00009097,
	3260:  0x00005571,
	3261:  0x00004906,
	3262:  0x000091BB,
	3263:  0x00009404,
	3264:  0x00028A4B,
	3265:  0x00004062,
	3266:  0x00028AFC,
	3267:  0x00009427,
	3268:  0x00028C1D,
	3269:  0x00028C3B,
	3270:  0x000084E5,
	3271:  0x00008A2B,
	3272:  0x00009599,
	3273:  0x000095A7,
	3274:  0x00009597,
	3275:  0x00009596,
	3276:  0x00028D34,
	3277:  0x00007445,
	3278:  0x00003EC2,
	3279:  0x000248FF,
	3280:  0x00024A42,
	3281:  0x000243EA,
	3282:  0x00003EE7,
	3283:  0x00023225,
	3284:  0x0000968F,
	3285:  0x00028EE7,
	3286:  0x00028E66,
	3287:  0x00028E65,
	3288:  0x00003ECC,
	3289:  0x000249ED,
	3290:  0x00024A78,
	3291:  0x00023FEE,
	3292:  0x00007412,
	3293:  0x0000746B,
	3294:  0x00003EFC,
	3295:  0x00009741,
	3296:  0x000290B0,
	3297:  0x00006847,
	3298:  0x00004A1D,
	3299:  0x00029093,
	3300:  0x000257DF,
	3301:  0x0000975D,
	3302:  0x00009368,
	3303:  0x00028989,
	3304:  0x00028C26,
	3305:  0x00028B2F,
	3306:  0x000263BE,
	3307:  0x000092BA,
	3308:  0x00005B11,
	3309:  0x00008B69,
	3310:  0x0000493C,
	3311:  0x000073F9,
	3312:  0x0002421B,
	3313:  0x0000979B,
	3314:  0x00009771,
	3315:  0x00009938,
	3316:  0x00020F26,
	3317:  0x00005DC1,
	3318:  0x00028BC5,
	3319:  0x00024AB2,
	3320:  0x0000981F,
	3321:  0x000294DA,
	3322:  0x000092F6,
	3323:  0x000295D7,
	3324:  0x000091E5,
	3325:  0x000044C0,
	3326:  0x00028B50,
	3327:  0x00024A67,
	3328:  0x00028B64,
	3329:  0x000098DC,
	3330:  0x00028A45,
	3331:  0x00003F00,
	3332:  0x0000922A,
	3333:  0x00004925,
	3334:  0x00008414,
	3335:  0x0000993B,
	3336:  0x0000994D,
	3337:  0x00027B06,
	3338:  0x00003DFD,
	3339:  0x0000999B,
	3340:  0x00004B6F,
	3341:  0x000099AA,
	3342:  0x00009A5C,
	3343:  0x00028B65,
	3344:  0x000258C8,
	3345:  0x00006A8F,
	3346:  0x00009A21,
	3347:  0x00005AFE,
	3348:  0x00009A2F,
	3349:  0x000298F1,
	3350:  0x00004B90,
	3351:  0x00029948,
	3352:  0x000099BC,
	3353:  0x00004BBD,
	3354:  0x00004B97,
	3355:  0x0000937D,
	3356:  0x00005872,
	3357:  0x00021302,
	3358:  0x00005822,
	3359:  0x000249B8,
	3360:  0x000214E8,
	3361:  0x00007844,
	3362:  0x0002271F,
	3363:  0x00023DB8,
	3364:  0x000068C5,
	3365:  0x00003D7D,
	3366:  0x00009458,
	3367:  0x00003927,
	3368:  0x00006150,
	3369:  0x00022781,
	3370:  0x0002296B,
	3371:  0x00006107,
	3372:  0x00009C4F,
	3373:  0x00009C53,
	3374:  0x00009C7B,
	3375:  0x00009C35,
	3376:  0x00009C10,
	3377:  0x00009B7F,
	3378:  0x00009BCF,
	3379:  0x00029E2D,
	3380:  0x00009B9F,
	3381:  0x0002A1F5,
	3382:  0x0002A0FE,
	3383:  0x00009D21,
	3384:  0x00004CAE,
	3385:  0x00024104,
	3386:  0x00009E18,
	3387:  0x00004CB0,
	3388:  0x00009D0C,
	3389:  0x0002A1B4,
	3390:  0x0002A0ED,
	3391:  0x0002A0F3,
	3392:  0x0002992F,
	3393:  0x00009DA5,
	3394:  0x000084BD,
	3395:  0x00026E12,
	3396:  0x00026FDF,
	3397:  0x00026B82,
	3398:  0x000085FC,
	3399:  0x00004533,
	3400:  0x00026DA4,
	3401:  0x00026E84,
	3402:  0x00026DF0,
	3403:  0x00008420,
	3404:  0x000085EE,
	3405:  0x00026E00,
	3406:  0x000237D7,
	3407:  0x00026064,
	3408:  0x000079E2,
	3409:  0x0002359C,
	3410:  0x00023640,
	3411:  0x0000492D,
	3412:  0x000249DE,
	3413:  0x00003D62,
	3414:  0x000093DB,
	3415:  0x000092BE,
	3416:  0x00009348,
	3417:  0x000202BF,
	3418:  0x000078B9,
	3419:  0x00009277,
	3420:  0x0000944D,
	3421:  0x00004FE4,
	3422:  0x00003440,
	3423:  0x00009064,
	3424:  0x0002555D,
	3425:  0x0000783D,
	3426:  0x00007854,
	3427:  0x000078B6,
	3428:  0x0000784B,
	3429:  0x00021757,
	3430:  0x000231C9,
	3431:  0x00024941,
	3432:  0x0000369A,
	3433:  0x00004F72,
	3434:  0x00006FDA,
	3435:  0x00006FD9,
	3436:  0x0000701E,
	3437:  0x0000701E,
	3438:  0x00005414,
	3439:  0x000241B5,
	3440:  0x000057BB,
	3441:  0x000058F3,
	3442:  0x0000578A,
	3443:  0x00009D16,
	3444:  0x000057D7,
	3445:  0x00007134,
	3446:  0x000034AF,
	3447:  0x000241AC,
	3448:  0x000071EB,
	3449:  0x00026C40,
	3450:  0x00024F97,
	3451:  0x00005B28,
	3452:  0x000217B5,
	3453:  0x00028A49,
	3454:  0x0000610C,
	3455:  0x00005ACE,
	3456:  0x00005A0B,
	3457:  0x000042BC,
	3458:  0x00024488,
	3459:  0x0000372C,
	3460:  0x00004B7B,
	3461:  0x000289FC,
	3462:  0x000093BB,
	3463:  0x000093B8,
	3464:  0x000218D6,
	3465:  0x00020F1D,
	3466:  0x00008472,
	3467:  0x00026CC0,
	3468:  0x00021413,
	3469:  0x000242FA,
	3470:  0x00022C26,
	3471:  0x000243C1,
	3472:  0x00005994,
	3473:  0x00023DB7,
	3474:  0x00026741,
	3475:  0x00007DA8,
	3476:  0x0002615B,
	3477:  0x000260A4,
	3478:  0x000249B9,
	3479:  0x0002498B,
	3480:  0x000289FA,
	3481:  0x000092E5,
	3482:  0x000073E2,
	3483:  0x00003EE9,
	3484:  0x000074B4,
	3485:  0x00028B63,
	3486:  0x0002189F,
	3487:  0x00003EE1,
	3488:  0x00024AB3,
	3489:  0x00006AD8,
	3490:  0x000073F3,
	3491:  0x000073FB,
	3492:  0x00003ED6,
	3493:  0x00024A3E,
	3494:  0x00024A94,
	3495:  0x000217D9,
	3496:  0x00024A66,
	3497:  0x000203A7,
	3498:  0x00021424,
	3499:  0x000249E5,
	3500:  0x00007448,
	3501:  0x00024916,
	3502:  0x000070A5,
	3503:  0x00024976,
	3504:  0x00009284,
	3505:  0x000073E6,
	3506:  0x0000935F,
	3507:  0x000204FE,
	3508:  0x00009331,
	3509:  0x00028ACE,
	3510:  0x00028A16,
	3511:  0x00009386,
	3512:  0x00028BE7,
	3513:  0x000255D5,
	3514:  0x00004935,
	3515:  0x00028A82,
	3516:  0x0000716B,
	3517:  0x00024943,
	3518:  0x00020CFF,
	3519:  0x000056A4,
	3520:  0x0002061A,
	3521:  0x00020BEB,
	3522:  0x00020CB8,
	3523:  0x00005502,
	3524:  0x000079C4,
	3525:  0x000217FA,
	3526:  0x00007DFE,
	3527:  0x000216C2,
	3528:  0x00024A50,
	3529:  0x00021852,
	3530:  0x0000452E,
	3531:  0x00009401,
	3532:  0x0000370A,
	3533:  0x00028AC0,
	3534:  0x000249AD,
	3535:  0x000059B0,
	3536:  0x000218BF,
	3537:  0x00021883,
	3538:  0x00027484,
	3539:  0x00005AA1,
	3540:  0x000036E2,
	3541:  0x00023D5B,
	3542:  0x000036B0,
	3543:  0x0000925F,
	3544:  0x00005A79,
	3545:  0x00028A81,
	3546:  0x00021862,
	3547:  0x00009374,
	3548:  0x00003CCD,
	3549:  0x00020AB4,
	3550:  0x00004A96,
	3551:  0x0000398A,
	3552:  0x000050F4,
	3553:  0x00003D69,
	3554:  0x00003D4C,
	3555:  0x0002139C,
	3556:  0x00007175,
	3557:  0x000042FB,
	3558:  0x00028218,
	3559:  0x00006E0F,
	3560:  0x000290E4,
	3561:  0x000044EB,
	3562:  0x00006D57,
	3563:  0x00027E4F,
	3564:  0x00007067,
	3565:  0x00006CAF,
	3566:  0x00003CD6,
	3567:  0x00023FED,
	3568:  0x00023E2D,
	3569:  0x00006E02,
	3570:  0x00006F0C,
	3571:  0x00003D6F,
	3572:  0x000203F5,
	3573:  0x00007551,
	3574:  0x000036BC,
	3575:  0x000034C8,
	3576:  0x00004680,
	3577:  0x00003EDA,
	3578:  0x00004871,
	3579:  0x000059C4,
	3580:  0x0000926E,
	3581:  0x0000493E,
	3582:  0x00008F41,
	3583:  0x00028C1C,
	3584:  0x00026BC0,
	3585:  0x00005812,
	3586:  0x000057C8,
	3587:  0x000036D6,
	3588:  0x00021452,
	3589:  0x000070FE,
	3590:  0x00024362,
	3591:  0x00024A71,
	3592:  0x00022FE3,
	3593:  0x000212B0,
	3594:  0x000223BD,
	3595:  0x000068B9,
	3596:  0x00006967,
	3597:  0x00021398,
	3598:  0x000234E5,
	3599:  0x00027BF4,
	3600:  0x000236DF,
	3601:  0x00028A83,
	3602:  0x000237D6,
	3603:  0x000233FA,
	3604:  0x00024C9F,
	3605:  0x00006A1A,
	3606:  0x000236AD,
	3607:  0x00026CB7,
	3608:  0x0000843E,
	3609:  0x000044DF,
	3610:  0x000044CE,
	3611:  0x00026D26,
	3612:  0x00026D51,
	3613:  0x00026C82,
	3614:  0x00026FDE,
	3615:  0x00006F17,
	3616:  0x00027109,
	3617:  0x0000833D,
	3618:  0x0002173A,
	3619:  0x000083ED,
	3620:  0x00026C80,
	3621:  0x00027053,
	3622:  0x000217DB,
	3623:  0x00005989,
	3624:  0x00005A82,
	3625:  0x000217B3,
	3626:  0x00005A61,
	3627:  0x00005A71,
	3628:  0x00021905,
	3629:  0x000241FC,
	3630:  0x0000372D,
	3631:  0x000059EF,
	3632:  0x0002173C,
	3633:  0x000036C7,
	3634:  0x0000718E,
	3635:  0x00009390,
	3636:  0x0000669A,
	3637:  0x000242A5,
	3638:  0x00005A6E,
	3639:  0x00005A2B,
	3640:  0x00024293,
	3641:  0x00006A2B,
	3642:  0x00023EF9,
	3643:  0x00027736,
	3644:  0x0002445B,
	3645:  0x000242CA,
	3646:  0x0000711D,
	3647:  0x00024259,
	3648:  0x000289E1,
	3649:  0x00004FB0,
	3650:  0x00026D28,
	3651:  0x00005CC2,
	3652:  0x000244CE,
	3653:  0x00027E4D,
	3654:  0x000243BD,
	3655:  0x00006A0C,
	3656:  0x00024256,
	3657:  0x00021304,
	3658:  0x000070A6,
	3659:  0x00007133,
	3660:  0x000243E9,
	3661:  0x00003DA5,
	3662:  0x00006CDF,
	3663:  0x0002F825,
	3664:  0x00024A4F,
	3665:  0x00007E65,
	3666:  0x000059EB,
	3667:  0x00005D2F,
	3668:  0x00003DF3,
	3669:  0x00005F5C,
	3670:  0x00024A5D,
	3671:  0x000217DF,
	3672:  0x00007DA4,
	3673:  0x00008426,
	3674:  0x00005485,
	3675:  0x00023AFA,
	3676:  0x00023300,
	3677:  0x00020214,
	3678:  0x0000577E,
	3679:  0x000208D5,
	3680:  0x00020619,
	3681:  0x00003FE5,
	3682:  0x00021F9E,
	3683:  0x0002A2B6,
	3684:  0x00007003,
	3685:  0x0002915B,
	3686:  0x00005D70,
	3687:  0x0000738F,
	3688:  0x00007CD3,
	3689:  0x00028A59,
	3690:  0x00029420,
	3691:  0x00004FC8,
	3692:  0x00007FE7,
	3693:  0x000072CD,
	3694:  0x00007310,
	3695:  0x00027AF4,
	3696:  0x00007338,
	3697:  0x00007339,
	3698:  0x000256F6,
	3699:  0x00007341,
	3700:  0x00007348,
	3701:  0x00003EA9,
	3702:  0x00027B18,
	3703:  0x0000906C,
	3704:  0x000071F5,
	3705:  0x000248F2,
	3706:  0x000073E1,
	3707:  0x000081F6,
	3708:  0x00003ECA,
	3709:  0x0000770C,
	3710:  0x00003ED1,
	3711:  0x00006CA2,
	3712:  0x000056FD,
	3713:  0x00007419,
	3714:  0x0000741E,
	3715:  0x0000741F,
	3716:  0x00003EE2,
	3717:  0x00003EF0,
	3718:  0x00003EF4,
	3719:  0x00003EFA,
	3720:  0x000074D3,
	3721:  0x00003F0E,
	3722:  0x00003F53,
	3723:  0x00007542,
	3724:  0x0000756D,
	3725:  0x00007572,
	3726:  0x0000758D,
	3727:  0x00003F7C,
	3728:  0x000075C8,
	3729:  0x000075DC,
	3730:  0x00003FC0,
	3731:  0x0000764D,
	3732:  0x00003FD7,
	3733:  0x00007674,
	3734:  0x00003FDC,
	3735:  0x0000767A,
	3736:  0x00024F5C,
	3737:  0x00007188,
	3738:  0x00005623,
	3739:  0x00008980,
	3740:  0x00005869,
	3741:  0x0000401D,
	3742:  0x00007743,
	3743:  0x00004039,
	3744:  0x00006761,
	3745:  0x00004045,
	3746:  0x000035DB,
	3747:  0x00007798,
	3748:  0x0000406A,
	3749:  0x0000406F,
	3750:  0x00005C5E,
	3751:  0x000077BE,
	3752:  0x000077CB,
	3753:  0x000058F2,
	3754:  0x00007818,
	3755:  0x000070B9,
	3756:  0x0000781C,
	3757:  0x000040A8,
	3758:  0x00007839,
	3759:  0x00007847,
	3760:  0x00007851,
	3761:  0x00007866,
	3762:  0x00008448,
	3763:  0x00025535,
	3764:  0x00007933,
	3765:  0x00006803,
	3766:  0x00007932,
	3767:  0x00004103,
	3768:  0x00004109,
	3769:  0x00007991,
	3770:  0x00007999,
	3771:  0x00008FBB,
	3772:  0x00007A06,
	3773:  0x00008FBC,
	3774:  0x00004167,
	3775:  0x00007A91,
	3776:  0x000041B2,
	3777:  0x00007ABC,
	3778:  0x00008279,
	3779:  0x000041C4,
	3780:  0x00007ACF,
	3781:  0x00007ADB,
	3782:  0x000041CF,
	3783:  0x00004E21,
	3784:  0x00007B62,
	3785:  0x00007B6C,
	3786:  0x00007B7B,
	3787:  0x00007C12,
	3788:  0x00007C1B,
	3789:  0x00004260,
	3790:  0x0000427A,
	3791:  0x00007C7B,
	3792:  0x00007C9C,
	3793:  0x0000428C,
	3794:  0x00007CB8,
	3795:  0x00004294,
	3796:  0x00007CED,
	3797:  0x00008F93,
	3798:  0x000070C0,
	3799:  0x00020CCF,
	3800:  0x00007DCF,
	3801:  0x00007DD4,
	3802:  0x00007DD0,
	3803:  0x00007DFD,
	3804:  0x00007FAE,
	3805:  0x00007FB4,
	3806:  0x0000729F,
	3807:  0x00004397,
	3808:  0x00008020,
	3809:  0x00008025,
	3810:  0x00007B39,
	3811:  0x0000802E,
	3812:  0x00008031,
	3813:  0x00008054,
	3814:  0x00003DCC,
	3815:  0x000057B4,
	3816:  0x000070A0,
	3817:  0x000080B7,
	3818:  0x000080E9,
	3819:  0x000043ED,
	3820:  0x0000810C,
	3821:  0x0000732A,
	3822:  0x0000810E,
	3823:  0x00008112,
	3824:  0x00007560,
	3825:  0x00008114,
	3826:  0x00004401,
	3827:  0x00003B39,
	3828:  0x00008156,
	3829:  0x00008159,
	3830:  0x0000815A,
	3831:  0x00004413,
	3832:  0x0000583A,
	3833:  0x0000817C,
	3834:  0x00008184,
	3835:  0x00004425,
	3836:  0x00008193,
	3837:  0x0000442D,
	3838:  0x000081A5,
	3839:  0x000057EF,
	3840:  0x000081C1,
	3841:  0x000081E4,
	3842:  0x00008254,
	3843:  0x0000448F,
	3844:  0x000082A6,
	3845:  0x00008276,
	3846:  0x000082CA,
	3847:  0x000082D8,
	3848:  0x000082FF,
	3849:  0x000044B0,
	3850:  0x00008357,
	3851:  0x00009669,
	3852:  0x0000698A,
	3853:  0x00008405,
	3854:  0x000070F5,
	3855:  0x00008464,
	3856:  0x000060E3,
	3857:  0x00008488,
	3858:  0x00004504,
	3859:  0x000084BE,
	3860:  0x000084E1,
	3861:  0x000084F8,
	3862:  0x00008510,
	3863:  0x00008538,
	3864:  0x00008552,
	3865:  0x0000453B,
	3866:  0x0000856F,
	3867:  0x00008570,
	3868:  0x000085E0,
	3869:  0x00004577,
	3870:  0x00008672,
	3871:  0x00008692,
	3872:  0x000086B2,
	3873:  0x000086EF,
	3874:  0x00009645,
	3875:  0x0000878B,
	3876:  0x00004606,
	3877:  0x00004617,
	3878:  0x000088AE,
	3879:  0x000088FF,
	3880:  0x00008924,
	3881:  0x00008947,
	3882:  0x00008991,
	3883:  0x00027967,
	3884:  0x00008A29,
	3885:  0x00008A38,
	3886:  0x00008A94,
	3887:  0x00008AB4,
	3888:  0x00008C51,
	3889:  0x00008CD4,
	3890:  0x00008CF2,
	3891:  0x00008D1C,
	3892:  0x00004798,
	3893:  0x0000585F,
	3894:  0x00008DC3,
	3895:  0x000047ED,
	3896:  0x00004EEE,
	3897:  0x00008E3A,
	3898:  0x000055D8,
	3899:  0x00005754,
	3900:  0x00008E71,
	3901:  0x000055F5,
	3902:  0x00008EB0,
	3903:  0x00004837,
	3904:  0x00008ECE,
	3905:  0x00008EE2,
	3906:  0x00008EE4,
	3907:  0x00008EED,
	3908:  0x00008EF2,
	3909:  0x00008FB7,
	3910:  0x00008FC1,
	3911:  0x00008FCA,
	3912:  0x00008FCC,
	3913:  0x00009033,
	3914:  0x000099C4,
	3915:  0x000048AD,
	3916:  0x000098E0,
	3917:  0x00009213,
	3918:  0x0000491E,
	3919:  0x00009228,
	3920:  0x00009258,
	3921:  0x0000926B,
	3922:  0x000092B1,
	3923:  0x000092AE,
	3924:  0x000092BF,
	3925:  0x000092E3,
	3926:  0x000092EB,
	3927:  0x000092F3,
	3928:  0x000092F4,
	3929:  0x000092FD,
	3930:  0x00009343,
	3931:  0x00009384,
	3932:  0x000093AD,
	3933:  0x00004945,
	3934:  0x00004951,
	3935:  0x00009EBF,
	3936:  0x00009417,
	3937:  0x00005301,
	3938:  0x0000941D,
	3939:  0x0000942D,
	3940:  0x0000943E,
	3941:  0x0000496A,
	3942:  0x00009454,
	3943:  0x00009479,
	3944:  0x0000952D,
	3945:  0x000095A2,
	3946:  0x000049A7,
	3947:  0x000095F4,
	3948:  0x00009633,
	3949:  0x000049E5,
	3950:  0x000067A0,
	3951:  0x00004A24,
	3952:  0x00009740,
	3953:  0x00004A35,
	3954:  0x000097B2,
	3955:  0x000097C2,
	3956:  0x00005654,
	3957:  0x00004AE4,
	3958:  0x000060E8,
	3959:  0x000098B9,
	3960:  0x00004B19,
	3961:  0x000098F1,
	3962:  0x00005844,
	3963:  0x0000990E,
	3964:  0x00009919,
	3965:  0x000051B4,
	3966:  0x0000991C,
	3967:  0x00009937,
	3968:  0x00009942,
	3969:  0x0000995D,
	3970:  0x00009962,
	3971:  0x00004B70,
	3972:  0x000099C5,
	3973:  0x00004B9D,
	3974:  0x00009A3C,
	3975:  0x00009B0F,
	3976:  0x00007A83,
	3977:  0x00009B69,
	3978:  0x00009B81,
	3979:  0x00009BDD,
	3980:  0x00009BF1,
	3981:  0x00009BF4,
	3982:  0x00004C6D,
	3983:  0x00009C20,
	3984:  0x0000376F,
	3985:  0x00021BC2,
	3986:  0x00009D49,
	3987:  0x00009C3A,
	3988:  0x00009EFE,
	3989:  0x00005650,
	3990:  0x00009D93,
	3991:  0x00009DBD,
	3992:  0x00009DC0,
	3993:  0x00009DFC,
	3994:  0x000094F6,
	3995:  0x00008FB6,
	3996:  0x00009E7B,
	3997:  0x00009EAC,
	3998:  0x00009EB1,
	3999:  0x00009EBD,
	4000:  0x00009EC6,
	4001:  0x000094DC,
	4002:  0x00009EE2,
	4003:  0x00009EF1,
	4004:  0x00009EF8,
	4005:  0x00007AC8,
	4006:  0x00009F44,
	4007:  0x00020094,
	4008:  0x000202B7,
	4009:  0x000203A0,
	4010:  0x0000691A,
	4011:  0x000094C3,
	4012:  0x000059AC,
	4013:  0x000204D7,
	4014:  0x00005840,
	4015:  0x000094C1,
	4016:  0x000037B9,
	4017:  0x000205D5,
	4018:  0x00020615,
	4019:  0x00020676,
	4020:  0x000216BA,
	4021:  0x00005757,
	4022:  0x00007173,
	4023:  0x00020AC2,
	4024:  0x00020ACD,
	4025:  0x00020BBF,
	4026:  0x0000546A,
	4027:  0x0002F83B,
	4028:  0x00020BCB,
	4029:  0x0000549E,
	4030:  0x00020BFB,
	4031:  0x00020C3B,
	4032:  0x00020C53,
	4033:  0x00020C65,
	4034:  0x00020C7C,
	4035:  0x000060E7,
	4036:  0x00020C8D,
	4037:  0x0000567A,
	4038:  0x00020CB5,
	4039:  0x00020CDD,
	4040:  0x00020CED,
	4041:  0x00020D6F,
	4042:  0x00020DB2,
	4043:  0x00020DC8,
	4044:  0x00006955,
	4045:  0x00009C2F,
	4046:  0x000087A5,
	4047:  0x00020E04,
	4048:  0x00020E0E,
	4049:  0x00020ED7,
	4050:  0x00020F90,
	4051:  0x00020F2D,
	4052:  0x00020E73,
	4053:  0x00005C20,
	4054:  0x00020FBC,
	4055:  0x00005E0B,
	4056:  0x0002105C,
	4057:  0x0002104F,
	4058:  0x00021076,
	4059:  0x0000671E,
	4060:  0x0002107B,
	4061:  0x00021088,
	4062:  0x00021096,
	4063:  0x00003647,
	4064:  0x000210BF,
	4065:  0x000210D3,
	4066:  0x0002112F,
	4067:  0x0002113B,
	4068:  0x00005364,
	4069:  0x000084AD,
	4070:  0x000212E3,
	4071:  0x00021375,
	4072:  0x00021336,
	4073:  0x00008B81,
	4074:  0x00021577,
	4075:  0x00021619,
	4076:  0x000217C3,
	4077:  0x000217C7,
	4078:  0x00004E78,
	4079:  0x000070BB,
	4080:  0x0002182D,
	4081:  0x0002196A,
	4082:  0x00021A2D,
	4083:  0x00021A45,
	4084:  0x00021C2A,
	4085:  0x00021C70,
	4086:  0x00021CAC,
	4087:  0x00021EC8,
	4088:  0x000062C3,
	4089:  0x00021ED5,
	4090:  0x00021F15,
	4091:  0x00007198,
	4092:  0x00006855,
	4093:  0x00022045,
	4094:  0x000069E9,
	4095:  0x000036C8,
	4096:  0x0002227C,
	4097:  0x000223D7,
	4098:  0x000223FA,
	4099:  0x0002272A,
	4100:  0x00022871,
	4101:  0x0002294F,
	4102:  0x000082FD,
	4103:  0x00022967,
	4104:  0x00022993,
	4105:  0x00022AD5,
	4106:  0x000089A5,
	4107:  0x00022AE8,
	4108:  0x00008FA0,
	4109:  0x00022B0E,
	4110:  0x000097B8,
	4111:  0x00022B3F,
	4112:  0x00009847,
	4113:  0x00009ABD,
	4114:  0x00022C4C,
	4116:  0x00022C88,
	4117:  0x00022CB7,
	4118:  0x00025BE8,
	4119:  0x00022D08,
	4120:  0x00022D12,
	4121:  0x00022DB7,
	4122:  0x00022D95,
	4123:  0x00022E42,
	4124:  0x00022F74,
	4125:  0x00022FCC,
	4126:  0x00023033,
	4127:  0x00023066,
	4128:  0x0002331F,
	4129:  0x000233DE,
	4130:  0x00005FB1,
	4131:  0x00006648,
	4132:  0x000066BF,
	4133:  0x00027A79,
	4134:  0x00023567,
	4135:  0x000235F3,
	4136:  0x00007201,
	4137:  0x000249BA,
	4138:  0x000077D7,
	4139:  0x0002361A,
	4140:  0x00023716,
	4141:  0x00007E87,
	4142:  0x00020346,
	4143:  0x000058B5,
	4144:  0x0000670E,
	4145:  0x00006918,
	4146:  0x00023AA7,
	4147:  0x00027657,
	4148:  0x00025FE2,
	4149:  0x00023E11,
	4150:  0x00023EB9,
	4151:  0x000275FE,
	4152:  0x0002209A,
	4153:  0x000048D0,
	4154:  0x00004AB8,
	4155:  0x00024119,
	4156:  0x00028A9A,
	4157:  0x000242EE,
	4158:  0x0002430D,
	4159:  0x0002403B,
	4160:  0x00024334,
	4161:  0x00024396,
	4162:  0x00024A45,
	4163:  0x000205CA,
	4164:  0x000051D2,
	4165:  0x00020611,
	4166:  0x0000599F,
	4167:  0x00021EA8,
	4168:  0x00003BBE,
	4169:  0x00023CFF,
	4170:  0x00024404,
	4171:  0x000244D6,
	4172:  0x00005788,
	4173:  0x00024674,
	4174:  0x0000399B,
	4175:  0x0002472F,
	4176:  0x000285E8,
	4177:  0x000299C9,
	4178:  0x00003762,
	4179:  0x000221C3,
	4180:  0x00008B5E,
	4181:  0x00028B4E,
	4182:  0x000099D6,
	4183:  0x00024812,
	4184:  0x000248FB,
	4185:  0x00024A15,
	4186:  0x00007209,
	4187:  0x00024AC0,
	4188:  0x00020C78,
	4189:  0x00005965,
	4190:  0x00024EA5,
	4191:  0x00024F86,
	4192:  0x00020779,
	4193:  0x00008EDA,
	4194:  0x0002502C,
	4195:  0x0000528F,
	4196:  0x0000573F,
	4197:  0x00007171,
	4198:  0x00025299,
	4199:  0x00025419,
	4200:  0x00023F4A,
	4201:  0x00024AA7,
	4202:  0x000055BC,
	4203:  0x00025446,
	4204:  0x0002546E,
	4205:  0x00026B52,
	4206:  0x000091D4,
	4207:  0x00003473,
	4208:  0x0002553F,
	4209:  0x00027632,
	4210:  0x0002555E,
	4211:  0x00004718,
	4212:  0x00025562,
	4213:  0x00025566,
	4214:  0x000257C7,
	4215:  0x0002493F,
	4216:  0x0002585D,
	4217:  0x00005066,
	4218:  0x000034FB,
	4219:  0x000233CC,
	4220:  0x000060DE,
	4221:  0x00025903,
	4222:  0x0000477C,
	4223:  0x00028948,
	4224:  0x00025AAE,
	4225:  0x00025B89,
	4226:  0x00025C06,
	4227:  0x00021D90,
	4228:  0x000057A1,
	4229:  0x00007151,
	4230:  0x00006FB6,
	4231:  0x00026102,
	4232:  0x00027C12,
	4233:  0x00009056,
	4234:  0x000261B2,
	4235:  0x00024F9A,
	4236:  0x00008B62,
	4237:  0x00026402,
	4238:  0x0002644A,
	4239:  0x00005D5B,
	4240:  0x00026BF7,
	4241:  0x00008F36,
	4242:  0x00026484,
	4243:  0x0002191C,
	4244:  0x00008AEA,
	4245:  0x000249F6,
	4246:  0x00026488,
	4247:  0x00023FEF,
	4248:  0x00026512,
	4249:  0x00004BC0,
	4250:  0x000265BF,
	4251:  0x000266B5,
	4252:  0x0002271B,
	4253:  0x00009465,
	4254:  0x000257E1,
	4255:  0x00006195,
	4256:  0x00005A27,
	4257:  0x0002F8CD,
	4258:  0x00004FBB,
	4259:  0x000056B9,
	4260:  0x00024521,
	4261:  0x000266FC,
	4262:  0x00004E6A,
	4263:  0x00024934,
	4264:  0x00009656,
	4265:  0x00006D8F,
	4266:  0x00026CBD,
	4267:  0x00003618,
	4268:  0x00008977,
	4269:  0x00026799,
	4270:  0x0002686E,
	4271:  0x00026411,
	4272:  0x0002685E,
	4273:  0x000071DF,
	4274:  0x000268C7,
	4275:  0x00007B42,
	4276:  0x000290C0,
	4277:  0x00020A11,
	4278:  0x00026926,
	4279:  0x00009104,
	4280:  0x00026939,
	4281:  0x00007A45,
	4282:  0x00009DF0,
	4283:  0x000269FA,
	4284:  0x00009A26,
	4285:  0x00026A2D,
	4286:  0x0000365F,
	4287:  0x00026469,
	4288:  0x00020021,
	4289:  0x00007983,
	4290:  0x00026A34,
	4291:  0x00026B5B,
	4292:  0x00005D2C,
	4293:  0x00023519,
	4294:  0x000083CF,
	4295:  0x00026B9D,
	4296:  0x000046D0,
	4297:  0x00026CA4,
	4298:  0x0000753B,
	4299:  0x00008865,
	4300:  0x00026DAE,
	4301:  0x000058B6,
	4302:  0x0000371C,
	4303:  0x0002258D,
	4304:  0x0002704B,
	4305:  0x000271CD,
	4306:  0x00003C54,
	4307:  0x00027280,
	4308:  0x00027285,
	4309:  0x00009281,
	4310:  0x0002217A,
	4311:  0x0002728B,
	4312:  0x00009330,
	4313:  0x000272E6,
	4314:  0x000249D0,
	4315:  0x00006C39,
	4316:  0x0000949F,
	4317:  0x00027450,
	4318:  0x00020EF8,
	4319:  0x00008827,
	4320:  0x000088F5,
	4321:  0x00022926,
	4322:  0x00028473,
	4323:  0x000217B1,
	4324:  0x00006EB8,
	4325:  0x00024A2A,
	4326:  0x00021820,
	4327:  0x000039A4,
	4328:  0x000036B9,
	4329:  0x00005C10,
	4330:  0x000079E3,
	4331:  0x0000453F,
	4332:  0x000066B6,
	4333:  0x00029CAD,
	4334:  0x000298A4,
	4335:  0x00008943,
	4336:  0x000277CC,
	4337:  0x00027858,
	4338:  0x000056D6,
	4339:  0x000040DF,
	4340:  0x0002160A,
	4341:  0x000039A1,
	4342:  0x0002372F,
	4343:  0x000280E8,
	4344:  0x000213C5,
	4345:  0x000071AD,
	4346:  0x00008366,
	4347:  0x000279DD,
	4348:  0x000291A8,
	4349:  0x00005A67,
	4350:  0x00004CB7,
	4351:  0x000270AF,
	4352:  0x000289AB,
	4353:  0x000279FD,
	4354:  0x00027A0A,
	4355:  0x00027B0B,
	4356:  0x00027D66,
	4357:  0x0002417A,
	4358:  0x00007B43,
	4359:  0x0000797E,
	4360:  0x00028009,
	4361:  0x00006FB5,
	4362:  0x0002A2DF,
	4363:  0x00006A03,
	4364:  0x00028318,
	4365:  0x000053A2,
	4366:  0x00026E07,
	4367:  0x000093BF,
	4368:  0x00006836,
	4369:  0x0000975D,
	4370:  0x0002816F,
	4371:  0x00028023,
	4372:  0x000269B5,
	4373:  0x000213ED,
	4374:  0x0002322F,
	4375:  0x00028048,
	4376:  0x00005D85,
	4377:  0x00028C30,
	4378:  0x00028083,
	4379:  0x00005715,
	4380:  0x00009823,
	4381:  0x00028949,
	4382:  0x00005DAB,
	4383:  0x00024988,
	4384:  0x000065BE,
	4385:  0x000069D5,
	4386:  0x000053D2,
	4387:  0x00024AA5,
	4388:  0x00023F81,
	4389:  0x00003C11,
	4390:  0x00006736,
	4391:  0x00028090,
	4392:  0x000280F4,
	4393:  0x0002812E,
	4394:  0x00021FA1,
	4395:  0x0002814F,
	4396:  0x00028189,
	4397:  0x000281AF,
	4398:  0x0002821A,
	4399:  0x00028306,
	4400:  0x0002832F,
	4401:  0x0002838A,
	4402:  0x000035CA,
	4403:  0x00028468,
	4404:  0x000286AA,
	4405:  0x000048FA,
	4406:  0x000063E6,
	4407:  0x00028956,
	4408:  0x00007808,
	4409:  0x00009255,
	4410:  0x000289B8,
	4411:  0x000043F2,
	4412:  0x000289E7,
	4413:  0x000043DF,
	4414:  0x000289E8,
	4415:  0x00028B46,
	4416:  0x00028BD4,
	4417:  0x000059F8,
	4418:  0x00028C09,
	4419:  0x00008F0B,
	4420:  0x00028FC5,
	4421:  0x000290EC,
	4422:  0x00007B51,
	4423:  0x00029110,
	4424:  0x0002913C,
	4425:  0x00003DF7,
	4426:  0x0002915E,
	4427:  0x00024ACA,
	4428:  0x00008FD0,
	4429:  0x0000728F,
	4430:  0x0000568B,
	4431:  0x000294E7,
	4432:  0x000295E9,
	4433:  0x000295B0,
	4434:  0x000295B8,
	4435:  0x00029732,
	4436:  0x000298D1,
	4437:  0x00029949,
	4438:  0x0002996A,
	4439:  0x000299C3,
	4440:  0x00029A28,
	4441:  0x00029B0E,
	4442:  0x00029D5A,
	4443:  0x00029D9B,
	4444:  0x00007E9F,
	4445:  0x00029EF8,
	4446:  0x00029F23,
	4447:  0x00004CA4,
	4448:  0x00009547,
	4449:  0x0002A293,
	4450:  0x000071A2,
	4451:  0x0002A2FF,
	4452:  0x00004D91,
	4453:  0x00009012,
	4454:  0x0002A5CB,
	4455:  0x00004D9C,
	4456:  0x00020C9C,
	4457:  0x00008FBE,
	4458:  0x000055C1,
	4459:  0x00008FBA,
	4460:  0x000224B0,
	4461:  0x00008FB9,
	4462:  0x00024A93,
	4463:  0x00004509,
	4464:  0x00007E7F,
	4465:  0x00006F56,
	4466:  0x00006AB1,
	4467:  0x00004EEA,
	4468:  0x000034E4,
	4469:  0x00028B2C,
	4470:  0x0002789D,
	4471:  0x0000373A,
	4472:  0x00008E80,
	4473:  0x000217F5,
	4474:  0x00028024,
	4475:  0x00028B6C,
	4476:  0x00028B99,
	4477:  0x00027A3E,
	4478:  0x000266AF,
	4479:  0x00003DEB,
	4480:  0x00027655,
	4481:  0x00023CB7,
	4482:  0x00025635,
	4483:  0x00025956,
	4484:  0x00004E9A,
	4485:  0x00025E81,
	4486:  0x00026258,
	4487:  0x000056BF,
	4488:  0x00020E6D,
	4489:  0x00008E0E,
	4490:  0x00005B6D,
	4491:  0x00023E88,
	4492:  0x00024C9E,
	4493:  0x000063DE,
	4494:  0x000062D0,
	4495:  0x000217F6,
	4496:  0x0002187B,
	4497:  0x00006530,
	4498:  0x0000562D,
	4499:  0x00025C4A,
	4500:  0x0000541A,
	4501:  0x00025311,
	4502:  0x00003DC6,
	4503:  0x00029D98,
	4504:  0x00004C7D,
	4505:  0x00005622,
	4506:  0x0000561E,
	4507:  0x00007F49,
	4508:  0x00025ED8,
	4509:  0x00005975,
	4510:  0x00023D40,
	4511:  0x00008770,
	4512:  0x00004E1C,
	4513:  0x00020FEA,
	4514:  0x00020D49,
	4515:  0x000236BA,
	4516:  0x00008117,
	4517:  0x00009D5E,
	4518:  0x00008D18,
	4519:  0x0000763B,
	4520:  0x00009C45,
	4521:  0x0000764E,
	4522:  0x000077B9,
	4523:  0x00009345,
	4524:  0x00005432,
	4525:  0x00008148,
	4526:  0x000082F7,
	4527:  0x00005625,
	4528:  0x00008132,
	4529:  0x00008418,
	4530:  0x000080BD,
	4531:  0x000055EA,
	4532:  0x00007962,
	4533:  0x00005643,
	4534:  0x00005416,
	4535:  0x00020E9D,
	4536:  0x000035CE,
	4537:  0x00005605,
	4538:  0x000055F1,
	4539:  0x000066F1,
	4540:  0x000282E2,
	4541:  0x0000362D,
	4542:  0x00007534,
	4543:  0x000055F0,
	4544:  0x000055BA,
	4545:  0x00005497,
	4546:  0x00005572,
	4547:  0x00020C41,
	4548:  0x00020C96,
	4549:  0x00005ED0,
	4550:  0x00025148,
	4551:  0x00020E76,
	4552:  0x00022C62,
	4553:  0x00020EA2,
	4554:  0x00009EAB,
	4555:  0x00007D5A,
	4556:  0x000055DE,
	4557:  0x00021075,
	4558:  0x0000629D,
	4559:  0x0000976D,
	4560:  0x00005494,
	4561:  0x00008CCD,
	4562:  0x000071F6,
	4563:  0x00009176,
	4564:  0x000063FC,
	4565:  0x000063B9,
	4566:  0x000063FE,
	4567:  0x00005569,
	4568:  0x00022B43,
	4569:  0x00009C72,
	4570:  0x00022EB3,
	4571:  0x0000519A,
	4572:  0x000034DF,
	4573:  0x00020DA7,
	4574:  0x000051A7,
	4575:  0x0000544D,
	4576:  0x0000551E,
	4577:  0x00005513,
	4578:  0x00007666,
	4579:  0x00008E2D,
	4580:  0x0002688A,
	4581:  0x000075B1,
	4582:  0x000080B6,
	4583:  0x00008804,
	4584:  0x00008786,
	4585:  0x000088C7,
	4586:  0x000081B6,
	4587:  0x0000841C,
	4588:  0x000210C1,
	4589:  0x000044EC,
	4590:  0x00007304,
	4591:  0x00024706,
	4592:  0x00005B90,
	4593:  0x0000830B,
	4594:  0x00026893,
	4595:  0x0000567B,
	4596:  0x000226F4,
	4597:  0x00027D2F,
	4598:  0x000241A3,
	4599:  0x00027D73,
	4600:  0x00026ED0,
	4601:  0x000272B6,
	4602:  0x00009170,
	4603:  0x000211D9,
	4604:  0x00009208,
	4605:  0x00023CFC,
	4606:  0x0002A6A9,
	4607:  0x00020EAC,
	4608:  0x00020EF9,
	4609:  0x00007266,
	4610:  0x00021CA2,
	4611:  0x0000474E,
	4612:  0x00024FC2,
	4613:  0x00027FF9,
	4614:  0x00020FEB,
	4615:  0x000040FA,
	4616:  0x00009C5D,
	4617:  0x0000651F,
	4618:  0x00022DA0,
	4619:  0x000048F3,
	4620:  0x000247E0,
	4621:  0x00029D7C,
	4622:  0x00020FEC,
	4623:  0x00020E0A,
	4624:  0x00006062,
	4625:  0x000275A3,
	4626:  0x00020FED,
	4628:  0x00026048,
	4629:  0x00021187,
	4630:  0x000071A3,
	4631:  0x00007E8E,
	4632:  0x00009D50,
	4633:  0x00004E1A,
	4634:  0x00004E04,
	4635:  0x00003577,
	4636:  0x00005B0D,
	4637:  0x00006CB2,
	4638:  0x00005367,
	4639:  0x000036AC,
	4640:  0x000039DC,
	4641:  0x0000537D,
	4642:  0x000036A5,
	4643:  0x00024618,
	4644:  0x0000589A,
	4645:  0x00024B6E,
	4646:  0x0000822D,
	4647:  0x0000544B,
	4648:  0x000057AA,
	4649:  0x00025A95,
	4650:  0x00020979,
	4652:  0x00003A52,
	4653:  0x00022465,
	4654:  0x00007374,
	4655:  0x00029EAC,
	4656:  0x00004D09,
	4657:  0x00009BED,
	4658:  0x00023CFE,
	4659:  0x00029F30,
	4660:  0x00004C5B,
	4661:  0x00024FA9,
	4662:  0x0002959E,
	4663:  0x00029FDE,
	4664:  0x0000845C,
	4665:  0x00023DB6,
	4666:  0x000272B2,
	4667:  0x000267B3,
	4668:  0x00023720,
	4669:  0x0000632E,
	4670:  0x00007D25,
	4671:  0x00023EF7,
	4672:  0x00023E2C,
	4673:  0x00003A2A,
	4674:  0x00009008,
	4675:  0x000052CC,
	4676:  0x00003E74,
	4677:  0x0000367A,
	4678:  0x000045E9,
	4679:  0x0002048E,
	4680:  0x00007640,
	4681:  0x00005AF0,
	4682:  0x00020EB6,
	4683:  0x0000787A,
	4684:  0x00027F2E,
	4685:  0x000058A7,
	4686:  0x000040BF,
	4687:  0x0000567C,
	4688:  0x00009B8B,
	4689:  0x00005D74,
	4690:  0x00007654,
	4691:  0x0002A434,
	4692:  0x00009E85,
	4693:  0x00004CE1,
	4694:  0x000075F9,
	4695:  0x000037FB,
	4696:  0x00006119,
	4697:  0x000230DA,
	4698:  0x000243F2,
	4700:  0x0000565D,
	4701:  0x000212A9,
	4702:  0x000057A7,
	4703:  0x00024963,
	4704:  0x00029E06,
	4705:  0x00005234,
	4706:  0x000270AE,
	4707:  0x000035AD,
	4708:  0x00006C4A,
	4709:  0x00009D7C,
	4710:  0x00007C56,
	4711:  0x00009B39,
	4712:  0x000057DE,
	4713:  0x0002176C,
	4714:  0x00005C53,
	4715:  0x000064D3,
	4716:  0x000294D0,
	4717:  0x00026335,
	4718:  0x00027164,
	4719:  0x000086AD,
	4720:  0x00020D28,
	4721:  0x00026D22,
	4722:  0x00024AE2,
	4723:  0x00020D71,
	4725:  0x000051FE,
	4726:  0x00021F0F,
	4727:  0x00005D8E,
	4728:  0x00009703,
	4729:  0x00021DD1,
	4730:  0x00009E81,
	4731:  0x0000904C,
	4732:  0x00007B1F,
	4733:  0x00009B02,
	4734:  0x00005CD1,
	4735:  0x00007BA3,
	4736:  0x00006268,
	4737:  0x00006335,
	4738:  0x00009AFF,
	4739:  0x00007BCF,
	4740:  0x00009B2A,
	4741:  0x00007C7E,
	4742:  0x00009B2E,
	4743:  0x00007C42,
	4744:  0x00007C86,
	4745:  0x00009C15,
	4746:  0x00007BFC,
	4747:  0x00009B09,
	4748:  0x00009F17,
	4749:  0x00009C1B,
	4750:  0x0002493E,
	4751:  0x00009F5A,
	4752:  0x00005573,
	4753:  0x00005BC3,
	4754:  0x00004FFD,
	4755:  0x00009E98,
	4756:  0x00004FF2,
	4757:  0x00005260,
	4758:  0x00003E06,
	4759:  0x000052D1,
	4760:  0x00005767,
	4761:  0x00005056,
	4762:  0x000059B7,
	4763:  0x00005E12,
	4764:  0x000097C8,
	4765:  0x00009DAB,
	4766:  0x00008F5C,
	4767:  0x00005469,
	4768:  0x000097B4,
	4769:  0x00009940,
	4770:  0x000097BA,
	4771:  0x0000532C,
	4772:  0x00006130,
	4773:  0x0000692C,
	4774:  0x000053DA,
	4775:  0x00009C0A,
	4776:  0x00009D02,
	4777:  0x00004C3B,
	4778:  0x00009641,
	4779:  0x00006980,
	4780:  0x000050A6,
	4781:  0x00007546,
	4782:  0x0002176D,
	4783:  0x000099DA,
	4784:  0x00005273,
	4786:  0x00009159,
	4787:  0x00009681,
	4788:  0x0000915C,
	4790:  0x00009151,
	4791:  0x00028E97,
	4792:  0x0000637F,
	4793:  0x00026D23,
	4794:  0x00006ACA,
	4795:  0x00005611,
	4796:  0x0000918E,
	4797:  0x0000757A,
	4798:  0x00006285,
	4799:  0x000203FC,
	4800:  0x0000734F,
	4801:  0x00007C70,
	4802:  0x00025C21,
	4803:  0x00023CFD,
	4805:  0x00024919,
	4806:  0x000076D6,
	4807:  0x00009B9D,
	4808:  0x00004E2A,
	4809:  0x00020CD4,
	4810:  0x000083BE,
	4811:  0x00008842,
	4813:  0x00005C4A,
	4814:  0x000069C0,
	4815:  0x000050ED,
	4816:  0x0000577A,
	4817:  0x0000521F,
	4818:  0x00005DF5,
	4819:  0x00004ECE,
	4820:  0x00006C31,
	4821:  0x000201F2,
	4822:  0x00004F39,
	4823:  0x0000549C,
	4824:  0x000054DA,
	4825:  0x0000529A,
	4826:  0x00008D82,
	4827:  0x000035FE,
	4828:  0x00005F0C,
	4829:  0x000035F3,
	4831:  0x00006B52,
	4832:  0x0000917C,
	4833:  0x00009FA5,
	4834:  0x00009B97,
	4835:  0x0000982E,
	4836:  0x000098B4,
	4837:  0x00009ABA,
	4838:  0x00009EA8,
	4839:  0x00009E84,
	4840:  0x0000717A,
	4841:  0x00007B14,
	4843:  0x00006BFA,
	4844:  0x00008818,
	4845:  0x00007F78,
	4847:  0x00005620,
	4848:  0x0002A64A,
	4849:  0x00008E77,
	4850:  0x00009F53,
	4852:  0x00008DD4,
	4853:  0x00008E4F,
	4854:  0x00009E1C,
	4855:  0x00008E01,
	4856:  0x00006282,
	4857:  0x0002837D,
	4858:  0x00008E28,
	4859:  0x00008E75,
	4860:  0x00007AD3,
	4861:  0x00024A77,
	4862:  0x00007A3E,
	4863:  0x000078D8,
	4864:  0x00006CEA,
	4865:  0x00008A67,
	4866:  0x00007607,
	4867:  0x00028A5A,
	4868:  0x00009F26,
	4869:  0x00006CCE,
	4870:  0x000087D6,
	4871:  0x000075C3,
	4872:  0x0002A2B2,
	4873:  0x00007853,
	4874:  0x0002F840,
	4875:  0x00008D0C,
	4876:  0x000072E2,
	4877:  0x00007371,
	4878:  0x00008B2D,
	4879:  0x00007302,
	4880:  0x000074F1,
	4881:  0x00008CEB,
	4882:  0x00024ABB,
	4883:  0x0000862F,
	4884:  0x00005FBA,
	4885:  0x000088A0,
	4886:  0x000044B7,
	4888:  0x0002183B,
	4889:  0x00026E05,
	4891:  0x00008A7E,
	4892:  0x0002251B,
	4894:  0x000060FD,
	4895:  0x00007667,
	4896:  0x00009AD7,
	4897:  0x00009D44,
	4898:  0x0000936E,
	4899:  0x00009B8F,
	4900:  0x000087F5,
	4902:  0x0000880F,
	4903:  0x00008CF7,
	4904:  0x0000732C,
	4905:  0x00009721,
	4906:  0x00009BB0,
	4907:  0x000035D6,
	4908:  0x000072B2,
	4909:  0x00004C07,
	4910:  0x00007C51,
	4911:  0x0000994A,
	4912:  0x00026159,
	4913:  0x00006159,
	4914:  0x00004C04,
	4915:  0x00009E96,
	4916:  0x0000617D,
	4918:  0x0000575F,
	4919:  0x0000616F,
	4920:  0x000062A6,
	4921:  0x00006239,
	4922:  0x000062CE,
	4923:  0x00003A5C,
	4924:  0x000061E2,
	4925:  0x000053AA,
	4926:  0x000233F5,
	4927:  0x00006364,
	4928:  0x00006802,
	4929:  0x000035D2,
	4930:  0x00005D57,
	4931:  0x00028BC2,
	4932:  0x00008FDA,
	4933:  0x00028E39,
	4935:  0x000050D9,
	4936:  0x00021D46,
	4937:  0x00007906,
	4938:  0x00005332,
	4939:  0x00009638,
	4940:  0x00020F3B,
	4941:  0x00004065,
	4943:  0x000077FE,
	4945:  0x00007CC2,
	4946:  0x00025F1A,
	4947:  0x00007CDA,
	4948:  0x00007A2D,
	4949:  0x00008066,
	4950:  0x00008063,
	4951:  0x00007D4D,
	4952:  0x00007505,
	4953:  0x000074F2,
	4954:  0x00008994,
	4955:  0x0000821A,
	4956:  0x0000670C,
	4957:  0x00008062,
	4958:  0x00027486,
	4959:  0x0000805B,
	4960:  0x000074F0,
	4961:  0x00008103,
	4962:  0x00007724,
	4963:  0x00008989,
	4964:  0x000267CC,
	4965:  0x00007553,
	4966:  0x00026ED1,
	4967:  0x000087A9,
	4968:  0x000087CE,
	4969:  0x000081C8,
	4970:  0x0000878C,
	4971:  0x00008A49,
	4972:  0x00008CAD,
	4973:  0x00008B43,
	4974:  0x0000772B,
	4975:  0x000074F8,
	4976:  0x000084DA,
	4977:  0x00003635,
	4978:  0x000069B2,
	4979:  0x00008DA6,
	4981:  0x000089A9,
	4982:  0x00007468,
	4983:  0x00006DB9,
	4984:  0x000087C1,
	4985:  0x00024011,
	4986:  0x000074E7,
	4987:  0x00003DDB,
	4988:  0x00007176,
	4989:  0x000060A4,
	4990:  0x0000619C,
	4991:  0x00003CD1,
	4992:  0x00007162,
	4993:  0x00006077,
	4995:  0x00007F71,
	4996:  0x00028B2D,
	4997:  0x00007250,
	4998:  0x000060E9,
	4999:  0x00004B7E,
	5000:  0x00005220,
	5001:  0x00003C18,
	5002:  0x00023CC7,
	5003:  0x00025ED7,
	5004:  0x00027656,
	5005:  0x00025531,
	5006:  0x00021944,
	5007:  0x000212FE,
	5008:  0x00029903,
	5009:  0x00026DDC,
	5010:  0x000270AD,
	5011:  0x00005CC1,
	5012:  0x000261AD,
	5013:  0x00028A0F,
	5014:  0x00023677,
	5015:  0x000200EE,
	5016:  0x00026846,
	5017:  0x00024F0E,
	5018:  0x00004562,
	5019:  0x00005B1F,
	5020:  0x0002634C,
	5021:  0x00009F50,
	5022:  0x00009EA6,
	5023:  0x0002626B,
	5024:  0x00003000,
	5025:  0x0000FF0C,
	5026:  0x00003001,
	5027:  0x00003002,
	5028:  0x0000FF0E,
	5029:  0x00002027,
	5030:  0x0000FF1B,
	5031:  0x0000FF1A,
	5032:  0x0000FF1F,
	5033:  0x0000FF01,
	5034:  0x0000FE30,
	5035:  0x00002026,
	5036:  0x00002025,
	5037:  0x0000FE50,
	5038:  0x0000FE51,
	5039:  0x0000FE52,
	5040:  0x000000B7,
	5041:  0x0000FE54,
	5042:  0x0000FE55,
	5043:  0x0000FE56,
	5044:  0x0000FE57,
	5045:  0x0000FF5C,
	5046:  0x00002013,
	5047:  0x0000FE31,
	5048:  0x00002014,
	5049:  0x0000FE33,
	5050:  0x00002574,
	5051:  0x0000FE34,
	5052:  0x0000FE4F,
	5053:  0x0000FF08,
	5054:  0x0000FF09,
	5055:  0x0000FE35,
	5056:  0x0000FE36,
	5057:  0x0000FF5B,
	5058:  0x0000FF5D,
	5059:  0x0000FE37,
	5060:  0x0000FE38,
	5061:  0x00003014,
	5062:  0x00003015,
	5063:  0x0000FE39,
	5064:  0x0000FE3A,
	5065:  0x00003010,
	5066:  0x00003011,
	5067:  0x0000FE3B,
	5068:  0x0000FE3C,
	5069:  0x0000300A,
	5070:  0x0000300B,
	5071:  0x0000FE3D,
	5072:  0x0000FE3E,
	5073:  0x00003008,
	5074:  0x00003009,
	5075:  0x0000FE3F,
	5076:  0x0000FE40,
	5077:  0x0000300C,
	5078:  0x0000300D,
	5079:  0x0000FE41,
	5080:  0x0000FE42,
	5081:  0x0000300E,
	5082:  0x0000300F,
	5083:  0x0000FE43,
	5084:  0x0000FE44,
	5085:  0x0000FE59,
	5086:  0x0000FE5A,
	5087:  0x0000FE5B,
	5088:  0x0000FE5C,
	5089:  0x0000FE5D,
	5090:  0x0000FE5E,
	5091:  0x00002018,
	5092:  0x00002019,
	5093:  0x0000201C,
	5094:  0x0000201D,
	5095:  0x0000301D,
	5096:  0x0000301E,
	5097:  0x00002035,
	5098:  0x00002032,
	5099:  0x0000FF03,
	5100:  0x0000FF06,
	5101:  0x0000FF0A,
	5102:  0x0000203B,
	5103:  0x000000A7,
	5104:  0x00003003,
	5105:  0x000025CB,
	5106:  0x000025CF,
	5107:  0x000025B3,
	5108:  0x000025B2,
	5109:  0x000025CE,
	5110:  0x00002606,
	5111:  0x00002605,
	5112:  0x000025C7,
	5113:  0x000025C6,
	5114:  0x000025A1,
	5115:  0x000025A0,
	5116:  0x000025BD,
	5117:  0x000025BC,
	5118:  0x000032A3,
	5119:  0x00002105,
	5120:  0x000000AF,
	5121:  0x0000FFE3,
	5122:  0x0000FF3F,
	5123:  0x000002CD,
	5124:  0x0000FE49,
	5125:  0x0000FE4A,
	5126:  0x0000FE4D,
	5127:  0x0000FE4E,
	5128:  0x0000FE4B,
	5129:  0x0000FE4C,
	5130:  0x0000FE5F,
	5131:  0x0000FE60,
	5132:  0x0000FE61,
	5133:  0x0000FF0B,
	5134:  0x0000FF0D,
	5135:  0x000000D7,
	5136:  0x000000F7,
	5137:  0x000000B1,
	5138:  0x0000221A,
	5139:  0x0000FF1C,
	5140:  0x0000FF1E,
	5141:  0x0000FF1D,
	5142:  0x00002266,
	5143:  0x00002267,
	5144:  0x00002260,
	5145:  0x0000221E,
	5146:  0x00002252,
	5147:  0x00002261,
	5148:  0x0000FE62,
	5149:  0x0000FE63,
	5150:  0x0000FE64,
	5151:  0x0000FE65,
	5152:  0x0000FE66,
	5153:  0x0000FF5E,
	5154:  0x00002229,
	5155:  0x0000222A,
	5156:  0x000022A5,
	5157:  0x00002220,
	5158:  0x0000221F,
	5159:  0x000022BF,
	5160:  0x000033D2,
	5161:  0x000033D1,
	5162:  0x0000222B,
	5163:  0x0000222E,
	5164:  0x00002235,
	5165:  0x00002234,
	5166:  0x00002640,
	5167:  0x00002642,
	5168:  0x00002295,
	5169:  0x00002299,
	5170:  0x00002191,
	5171:  0x00002193,
	5172:  0x00002190,
	5173:  0x00002192,
	5174:  0x00002196,
	5175:  0x00002197,
	5176:  0x00002199,
	5177:  0x00002198,
	5178:  0x00002225,
	5179:  0x00002223,
	5180:  0x0000FF0F,
	5181:  0x0000FF3C,
	5182:  0x00002215,
	5183:  0x0000FE68,
	5184:  0x0000FF04,
	5185:  0x0000FFE5,
	5186:  0x00003012,
	5187:  0x0000FFE0,
	5188:  0x0000FFE1,
	5189:  0x0000FF05,
	5190:  0x0000FF20,
	5191:  0x00002103,
	5192:  0x00002109,
	5193:  0x0000FE69,
	5194:  0x0000FE6A,
	5195:  0x0000FE6B,
	5196:  0x000033D5,
	5197:  0x0000339C,
	5198:  0x0000339D,
	5199:  0x0000339E,
	5200:  0x000033CE,
	5201:  0x000033A1,
	5202:  0x0000338E,
	5203:  0x0000338F,
	5204:  0x000033C4,
	5205:  0x000000B0,
	5206:  0x00005159,
	5207:  0x0000515B,
	5208:  0x0000515E,
	5209:  0x0000515D,
	5210:  0x00005161,
	5211:  0x00005163,
	5212:  0x000055E7,
	5213:  0x000074E9,
	5214:  0x00007CCE,
	5215:  0x00002581,
	5216:  0x00002582,
	5217:  0x00002583,
	5218:  0x00002584,
	5219:  0x00002585,
	5220:  0x00002586,
	5221:  0x00002587,
	5222:  0x00002588,
	5223:  0x0000258F,
	5224:  0x0000258E,
	5225:  0x0000258D,
	5226:  0x0000258C,
	5227:  0x0000258B,
	5228:  0x0000258A,
	5229:  0x00002589,
	5230:  0x0000253C,
	5231:  0x00002534,
	5232:  0x0000252C,
	5233:  0x00002524,
	5234:  0x0000251C,
	5235:  0x00002594,
	5236:  0x00002500,
	5237:  0x00002502,
	5238:  0x00002595,
	5239:  0x0000250C,
	5240:  0x00002510,
	5241:  0x00002514,
	5242:  0x00002518,
	5243:  0x0000256D,
	5244:  0x0000256E,
	5245:  0x00002570,
	5246:  0x0000256F,
	5247:  0x00002550,
	5248:  0x0000255E,
	5249:  0x0000256A,
	5250:  0x00002561,
	5251:  0x000025E2,
	5252:  0x000025E3,
	5253:  0x000025E5,
	5254:  0x000025E4,
	5255:  0x00002571,
	5256:  0x00002572,
	5257:  0x00002573,
	5258:  0x0000FF10,
	5259:  0x0000FF11,
	5260:  0x0000FF12,
	5261:  0x0000FF13,
	5262:  0x0000FF14,
	5263:  0x0000FF15,
	5264:  0x0000FF16,
	5265:  0x0000FF17,
	5266:  0x0000FF18,
	5267:  0x0000FF19,
	5268:  0x00002160,
	5269:  0x00002161,
	5270:  0x00002162,
	5271:  0x00002163,
	5272:  0x00002164,
	5273:  0x00002165,
	5274:  0x00002166,
	5275:  0x00002167,
	5276:  0x00002168,
	5277:  0x00002169,
	5278:  0x00003021,
	5279:  0x00003022,
	5280:  0x00003023,
	5281:  0x00003024,
	5282:  0x00003025,
	5283:  0x00003026,
	5284:  0x00003027,
	5285:  0x00003028,
	5286:  0x00003029,
	5287:  0x00005341,
	5288:  0x00005344,
	5289:  0x00005345,
	5290:  0x0000FF21,
	5291:  0x0000FF22,
	5292:  0x0000FF23,
	5293:  0x0000FF24,
	5294:  0x0000FF25,
	5295:  0x0000FF26,
	5296:  0x0000FF27,
	5297:  0x0000FF28,
	5298:  0x0000FF29,
	5299:  0x0000FF2A,
	5300:  0x0000FF2B,
	5301:  0x0000FF2C,
	5302:  0x0000FF2D,
	5303:  0x0000FF2E,
	5304:  0x0000FF2F,
	5305:  0x0000FF30,
	5306:  0x0000FF31,
	5307:  0x0000FF32,
	5308:  0x0000FF33,
	5309:  0x0000FF34,
	5310:  0x0000FF35,
	5311:  0x0000FF36,
	5312:  0x0000FF37,
	5313:  0x0000FF38,
	5314:  0x0000FF39,
	5315:  0x0000FF3A,
	5316:  0x0000FF41,
	5317:  0x0000FF42,
	5318:  0x0000FF43,
	5319:  0x0000FF44,
	5320:  0x0000FF45,
	5321:  0x0000FF46,
	5322:  0x0000FF47,
	5323:  0x0000FF48,
	5324:  0x0000FF49,
	5325:  0x0000FF4A,
	5326:  0x0000FF4B,
	5327:  0x0000FF4C,
	5328:  0x0000FF4D,
	5329:  0x0000FF4E,
	5330:  0x0000FF4F,
	5331:  0x0000FF50,
	5332:  0x0000FF51,
	5333:  0x0000FF52,
	5334:  0x0000FF53,
	5335:  0x0000FF54,
	5336:  0x0000FF55,
	5337:  0x0000FF56,
	5338:  0x0000FF57,
	5339:  0x0000FF58,
	5340:  0x0000FF59,
	5341:  0x0000FF5A,
	5342:  0x00000391,
	5343:  0x00000392,
	5344:  0x00000393,
	5345:  0x00000394,
	5346:  0x00000395,
	5347:  0x00000396,
	5348:  0x00000397,
	5349:  0x00000398,
	5350:  0x00000399,
	5351:  0x0000039A,
	5352:  0x0000039B,
	5353:  0x0000039C,
	5354:  0x0000039D,
	5355:  0x0000039E,
	5356:  0x0000039F,
	5357:  0x000003A0,
	5358:  0x000003A1,
	5359:  0x000003A3,
	5360:  0x000003A4,
	5361:  0x000003A5,
	5362:  0x000003A6,
	5363:  0x000003A7,
	5364:  0x000003A8,
	5365:  0x000003A9,
	5366:  0x000003B1,
	5367:  0x000003B2,
	5368:  0x000003B3,
	5369:  0x000003B4,
	5370:  0x000003B5,
	5371:  0x000003B6,
	5372:  0x000003B7,
	5373:  0x000003B8,
	5374:  0x000003B9,
	5375:  0x000003BA,
	5376:  0x000003BB,
	5377:  0x000003BC,
	5378:  0x000003BD,
	5379:  0x000003BE,
	5380:  0x000003BF,
	5381:  0x000003C0,
	5382:  0x000003C1,
	5383:  0x000003C3,
	5384:  0x000003C4,
	5385:  0x000003C5,
	5386:  0x000003C6,
	5387:  0x000003C7,
	5388:  0x000003C8,
	5389:  0x000003C9,
	5390:  0x00003105,
	5391:  0x00003106,
	5392:  0x00003107,
	5393:  0x00003108,
	5394:  0x00003109,
	5395:  0x0000310A,
	5396:  0x0000310B,
	5397:  0x0000310C,
	5398:  0x0000310D,
	5399:  0x0000310E,
	5400:  0x0000310F,
	5401:  0x00003110,
	5402:  0x00003111,
	5403:  0x00003112,
	5404:  0x00003113,
	5405:  0x00003114,
	5406:  0x00003115,
	5407:  0x00003116,
	5408:  0x00003117,
	5409:  0x00003118,
	5410:  0x00003119,
	5411:  0x0000311A,
	5412:  0x0000311B,
	5413:  0x0000311C,
	5414:  0x0000311D,
	5415:  0x0000311E,
	5416:  0x0000311F,
	5417:  0x00003120,
	5418:  0x00003121,
	5419:  0x00003122,
	5420:  0x00003123,
	5421:  0x00003124,
	5422:  0x00003125,
	5423:  0x00003126,
	5424:  0x00003127,
	5425:  0x00003128,
	5426:  0x00003129,
	5427:  0x000002D9,
	5428:  0x000002C9,
	5429:  0x000002CA,
	5430:  0x000002C7,
	5431:  0x000002CB,
	5432:  0x00002400,
	5433:  0x00002401,
	5434:  0x00002402,
	5435:  0x00002403,
	5436:  0x00002404,
	5437:  0x00002405,
	5438:  0x00002406,
	5439:  0x00002407,
	5440:  0x00002408,
	5441:  0x00002409,
	5442:  0x0000240A,
	5443:  0x0000240B,
	5444:  0x0000240C,
	5445:  0x0000240D,
	5446:  0x0000240E,
	5447:  0x0000240F,
	5448:  0x00002410,
	5449:  0x00002411,
	5450:  0x00002412,
	5451:  0x00002413,
	5452:  0x00002414,
	5453:  0x00002415,
	5454:  0x00002416,
	5455:  0x00002417,
	5456:  0x00002418,
	5457:  0x00002419,
	5458:  0x0000241A,
	5459:  0x0000241B,
	5460:  0x0000241C,
	5461:  0x0000241D,
	5462:  0x0000241E,
	5463:  0x0000241F,
	5464:  0x00002421,
	5465:  0x000020AC,
	5495:  0x00004E00,
	5496:  0x00004E59,
	5497:  0x00004E01,
	5498:  0x00004E03,
	5499:  0x00004E43,
	5500:  0x00004E5D,
	5501:  0x00004E86,
	5502:  0x00004E8C,
	5503:  0x00004EBA,
	5504:  0x0000513F,
	5505:  0x00005165,
	5506:  0x0000516B,
	5507:  0x000051E0,
	5508:  0x00005200,
	5509:  0x00005201,
	5510:  0x0000529B,
	5511:  0x00005315,
	5512:  0x00005341,
	5513:  0x0000535C,
	5514:  0x000053C8,
	5515:  0x00004E09,
	5516:  0x00004E0B,
	5517:  0x00004E08,
	5518:  0x00004E0A,
	5519:  0x00004E2B,
	5520:  0x00004E38,
	5521:  0x000051E1,
	5522:  0x00004E45,
	5523:  0x00004E48,
	5524:  0x00004E5F,
	5525:  0x00004E5E,
	5526:  0x00004E8E,
	5527:  0x00004EA1,
	5528:  0x00005140,
	5529:  0x00005203,
	5530:  0x000052FA,
	5531:  0x00005343,
	5532:  0x000053C9,
	5533:  0x000053E3,
	5534:  0x0000571F,
	5535:  0x000058EB,
	5536:  0x00005915,
	5537:  0x00005927,
	5538:  0x00005973,
	5539:  0x00005B50,
	5540:  0x00005B51,
	5541:  0x00005B53,
	5542:  0x00005BF8,
	5543:  0x00005C0F,
	5544:  0x00005C22,
	5545:  0x00005C38,
	5546:  0x00005C71,
	5547:  0x00005DDD,
	5548:  0x00005DE5,
	5549:  0x00005DF1,
	5550:  0x00005DF2,
	5551:  0x00005DF3,
	5552:  0x00005DFE,
	5553:  0x00005E72,
	5554:  0x00005EFE,
	5555:  0x00005F0B,
	5556:  0x00005F13,
	5557:  0x0000624D,
	5558:  0x00004E11,
	5559:  0x00004E10,
	5560:  0x00004E0D,
	5561:  0x00004E2D,
	5562:  0x00004E30,
	5563:  0x00004E39,
	5564:  0x00004E4B,
	5565:  0x00005C39,
	5566:  0x00004E88,
	5567:  0x00004E91,
	5568:  0x00004E95,
	5569:  0x00004E92,
	5570:  0x00004E94,
	5571:  0x00004EA2,
	5572:  0x00004EC1,
	5573:  0x00004EC0,
	5574:  0x00004EC3,
	5575:  0x00004EC6,
	5576:  0x00004EC7,
	5577:  0x00004ECD,
	5578:  0x00004ECA,
	5579:  0x00004ECB,
	5580:  0x00004EC4,
	5581:  0x00005143,
	5582:  0x00005141,
	5583:  0x00005167,
	5584:  0x0000516D,
	5585:  0x0000516E,
	5586:  0x0000516C,
	5587:  0x00005197,
	5588:  0x000051F6,
	5589:  0x00005206,
	5590:  0x00005207,
	5591:  0x00005208,
	5592:  0x000052FB,
	5593:  0x000052FE,
	5594:  0x000052FF,
	5595:  0x00005316,
	5596:  0x00005339,
	5597:  0x00005348,
	5598:  0x00005347,
	5599:  0x00005345,
	5600:  0x0000535E,
	5601:  0x00005384,
	5602:  0x000053CB,
	5603:  0x000053CA,
	5604:  0x000053CD,
	5605:  0x000058EC,
	5606:  0x00005929,
	5607:  0x0000592B,
	5608:  0x0000592A,
	5609:  0x0000592D,
	5610:  0x00005B54,
	5611:  0x00005C11,
	5612:  0x00005C24,
	5613:  0x00005C3A,
	5614:  0x00005C6F,
	5615:  0x00005DF4,
	5616:  0x00005E7B,
	5617:  0x00005EFF,
	5618:  0x00005F14,
	5619:  0x00005F15,
	5620:  0x00005FC3,
	5621:  0x00006208,
	5622:  0x00006236,
	5623:  0x0000624B,
	5624:  0x0000624E,
	5625:  0x0000652F,
	5626:  0x00006587,
	5627:  0x00006597,
	5628:  0x000065A4,
	5629:  0x000065B9,
	5630:  0x000065E5,
	5631:  0x000066F0,
	5632:  0x00006708,
	5633:  0x00006728,
	5634:  0x00006B20,
	5635:  0x00006B62,
	5636:  0x00006B79,
	5637:  0x00006BCB,
	5638:  0x00006BD4,
	5639:  0x00006BDB,
	5640:  0x00006C0F,
	5641:  0x00006C34,
	5642:  0x0000706B,
	5643:  0x0000722A,
	5644:  0x00007236,
	5645:  0x0000723B,
	5646:  0x00007247,
	5647:  0x00007259,
	5648:  0x0000725B,
	5649:  0x000072AC,
	5650:  0x0000738B,
	5651:  0x00004E19,
	5652:  0x00004E16,
	5653:  0x00004E15,
	5654:  0x00004E14,
	5655:  0x00004E18,
	5656:  0x00004E3B,
	5657:  0x00004E4D,
	5658:  0x00004E4F,
	5659:  0x00004E4E,
	5660:  0x00004EE5,
	5661:  0x00004ED8,
	5662:  0x00004ED4,
	5663:  0x00004ED5,
	5664:  0x00004ED6,
	5665:  0x00004ED7,
	5666:  0x00004EE3,
	5667:  0x00004EE4,
	5668:  0x00004ED9,
	5669:  0x00004EDE,
	5670:  0x00005145,
	5671:  0x00005144,
	5672:  0x00005189,
	5673:  0x0000518A,
	5674:  0x000051AC,
	5675:  0x000051F9,
	5676:  0x000051FA,
	5677:  0x000051F8,
	5678:  0x0000520A,
	5679:  0x000052A0,
	5680:  0x0000529F,
	5681:  0x00005305,
	5682:  0x00005306,
	5683:  0x00005317,
	5684:  0x0000531D,
	5685:  0x00004EDF,
	5686:  0x0000534A,
	5687:  0x00005349,
	5688:  0x00005361,
	5689:  0x00005360,
	5690:  0x0000536F,
	5691:  0x0000536E,
	5692:  0x000053BB,
	5693:  0x000053EF,
	5694:  0x000053E4,
	5695:  0x000053F3,
	5696:  0x000053EC,
	5697:  0x000053EE,
	5698:  0x000053E9,
	5699:  0x000053E8,
	5700:  0x000053FC,
	5701:  0x000053F8,
	5702:  0x000053F5,
	5703:  0x000053EB,
	5704:  0x000053E6,
	5705:  0x000053EA,
	5706:  0x000053F2,
	5707:  0x000053F1,
	5708:  0x000053F0,
	5709:  0x000053E5,
	5710:  0x000053ED,
	5711:  0x000053FB,
	5712:  0x000056DB,
	5713:  0x000056DA,
	5714:  0x00005916,
	5715:  0x0000592E,
	5716:  0x00005931,
	5717:  0x00005974,
	5718:  0x00005976,
	5719:  0x00005B55,
	5720:  0x00005B83,
	5721:  0x00005C3C,
	5722:  0x00005DE8,
	5723:  0x00005DE7,
	5724:  0x00005DE6,
	5725:  0x00005E02,
	5726:  0x00005E03,
	5727:  0x00005E73,
	5728:  0x00005E7C,
	5729:  0x00005F01,
	5730:  0x00005F18,
	5731:  0x00005F17,
	5732:  0x00005FC5,
	5733:  0x0000620A,
	5734:  0x00006253,
	5735:  0x00006254,
	5736:  0x00006252,
	5737:  0x00006251,
	5738:  0x000065A5,
	5739:  0x000065E6,
	5740:  0x0000672E,
	5741:  0x0000672C,
	5742:  0x0000672A,
	5743:  0x0000672B,
	5744:  0x0000672D,
	5745:  0x00006B63,
	5746:  0x00006BCD,
	5747:  0x00006C11,
	5748:  0x00006C10,
	5749:  0x00006C38,
	5750:  0x00006C41,
	5751:  0x00006C40,
	5752:  0x00006C3E,
	5753:  0x000072AF,
	5754:  0x00007384,
	5755:  0x00007389,
	5756:  0x000074DC,
	5757:  0x000074E6,
	5758:  0x00007518,
	5759:  0x0000751F,
	5760:  0x00007528,
	5761:  0x00007529,
	5762:  0x00007530,
	5763:  0x00007531,
	5764:  0x00007532,
	5765:  0x00007533,
	5766:  0x0000758B,
	5767:  0x0000767D,
	5768:  0x000076AE,
	5769:  0x000076BF,
	5770:  0x000076EE,
	5771:  0x000077DB,
	5772:  0x000077E2,
	5773:  0x000077F3,
	5774:  0x0000793A,
	5775:  0x000079BE,
	5776:  0x00007A74,
	5777:  0x00007ACB,
	5778:  0x00004E1E,
	5779:  0x00004E1F,
	5780:  0x00004E52,
	5781:  0x00004E53,
	5782:  0x00004E69,
	5783:  0x00004E99,
	5784:  0x00004EA4,
	5785:  0x00004EA6,
	5786:  0x00004EA5,
	5787:  0x00004EFF,
	5788:  0x00004F09,
	5789:  0x00004F19,
	5790:  0x00004F0A,
	5791:  0x00004F15,
	5792:  0x00004F0D,
	5793:  0x00004F10,
	5794:  0x00004F11,
	5795:  0x00004F0F,
	5796:  0x00004EF2,
	5797:  0x00004EF6,
	5798:  0x00004EFB,
	5799:  0x00004EF0,
	5800:  0x00004EF3,
	5801:  0x00004EFD,
	5802:  0x00004F01,
	5803:  0x00004F0B,
	5804:  0x00005149,
	5805:  0x00005147,
	5806:  0x00005146,
	5807:  0x00005148,
	5808:  0x00005168,
	5809:  0x00005171,
	5810:  0x0000518D,
	5811:  0x000051B0,
	5812:  0x00005217,
	5813:  0x00005211,
	5814:  0x00005212,
	5815:  0x0000520E,
	5816:  0x00005216,
	5817:  0x000052A3,
	5818:  0x00005308,
	5819:  0x00005321,
	5820:  0x00005320,
	5821:  0x00005370,
	5822:  0x00005371,
	5823:  0x00005409,
	5824:  0x0000540F,
	5825:  0x0000540C,
	5826:  0x0000540A,
	5827:  0x00005410,
	5828:  0x00005401,
	5829:  0x0000540B,
	5830:  0x00005404,
	5831:  0x00005411,
	5832:  0x0000540D,
	5833:  0x00005408,
	5834:  0x00005403,
	5835:  0x0000540E,
	5836:  0x00005406,
	5837:  0x00005412,
	5838:  0x000056E0,
	5839:  0x000056DE,
	5840:  0x000056DD,
	5841:  0x00005733,
	5842:  0x00005730,
	5843:  0x00005728,
	5844:  0x0000572D,
	5845:  0x0000572C,
	5846:  0x0000572F,
	5847:  0x00005729,
	5848:  0x00005919,
	5849:  0x0000591A,
	5850:  0x00005937,
	5851:  0x00005938,
	5852:  0x00005984,
	5853:  0x00005978,
	5854:  0x00005983,
	5855:  0x0000597D,
	5856:  0x00005979,
	5857:  0x00005982,
	5858:  0x00005981,
	5859:  0x00005B57,
	5860:  0x00005B58,
	5861:  0x00005B87,
	5862:  0x00005B88,
	5863:  0x00005B85,
	5864:  0x00005B89,
	5865:  0x00005BFA,
	5866:  0x00005C16,
	5867:  0x00005C79,
	5868:  0x00005DDE,
	5869:  0x00005E06,
	5870:  0x00005E76,
	5871:  0x00005E74,
	5872:  0x00005F0F,
	5873:  0x00005F1B,
	5874:  0x00005FD9,
	5875:  0x00005FD6,
	5876:  0x0000620E,
	5877:  0x0000620C,
	5878:  0x0000620D,
	5879:  0x00006210,
	5880:  0x00006263,
	5881:  0x0000625B,
	5882:  0x00006258,
	5883:  0x00006536,
	5884:  0x000065E9,
	5885:  0x000065E8,
	5886:  0x000065EC,
	5887:  0x000065ED,
	5888:  0x000066F2,
	5889:  0x000066F3,
	5890:  0x00006709,
	5891:  0x0000673D,
	5892:  0x00006734,
	5893:  0x00006731,
	5894:  0x00006735,
	5895:  0x00006B21,
	5896:  0x00006B64,
	5897:  0x00006B7B,
	5898:  0x00006C16,
	5899:  0x00006C5D,
	5900:  0x00006C57,
	5901:  0x00006C59,
	5902:  0x00006C5F,
	5903:  0x00006C60,
	5904:  0x00006C50,
	5905:  0x00006C55,
	5906:  0x00006C61,
	5907:  0x00006C5B,
	5908:  0x00006C4D,
	5909:  0x00006C4E,
	5910:  0x00007070,
	5911:  0x0000725F,
	5912:  0x0000725D,
	5913:  0x0000767E,
	5914:  0x00007AF9,
	5915:  0x00007C73,
	5916:  0x00007CF8,
	5917:  0x00007F36,
	5918:  0x00007F8A,
	5919:  0x00007FBD,
	5920:  0x00008001,
	5921:  0x00008003,
	5922:  0x0000800C,
	5923:  0x00008012,
	5924:  0x00008033,
	5925:  0x0000807F,
	5926:  0x00008089,
	5927:  0x0000808B,
	5928:  0x0000808C,
	5929:  0x000081E3,
	5930:  0x000081EA,
	5931:  0x000081F3,
	5932:  0x000081FC,
	5933:  0x0000820C,
	5934:  0x0000821B,
	5935:  0x0000821F,
	5936:  0x0000826E,
	5937:  0x00008272,
	5938:  0x0000827E,
	5939:  0x0000866B,
	5940:  0x00008840,
	5941:  0x0000884C,
	5942:  0x00008863,
	5943:  0x0000897F,
	5944:  0x00009621,
	5945:  0x00004E32,
	5946:  0x00004EA8,
	5947:  0x00004F4D,
	5948:  0x00004F4F,
	5949:  0x00004F47,
	5950:  0x00004F57,
	5951:  0x00004F5E,
	5952:  0x00004F34,
	5953:  0x00004F5B,
	5954:  0x00004F55,
	5955:  0x00004F30,
	5956:  0x00004F50,
	5957:  0x00004F51,
	5958:  0x00004F3D,
	5959:  0x00004F3A,
	5960:  0x00004F38,
	5961:  0x00004F43,
	5962:  0x00004F54,
	5963:  0x00004F3C,
	5964:  0x00004F46,
	5965:  0x00004F63,
	5966:  0x00004F5C,
	5967:  0x00004F60,
	5968:  0x00004F2F,
	5969:  0x00004F4E,
	5970:  0x00004F36,
	5971:  0x00004F59,
	5972:  0x00004F5D,
	5973:  0x00004F48,
	5974:  0x00004F5A,
	5975:  0x0000514C,
	5976:  0x0000514B,
	5977:  0x0000514D,
	5978:  0x00005175,
	5979:  0x000051B6,
	5980:  0x000051B7,
	5981:  0x00005225,
	5982:  0x00005224,
	5983:  0x00005229,
	5984:  0x0000522A,
	5985:  0x00005228,
	5986:  0x000052AB,
	5987:  0x000052A9,
	5988:  0x000052AA,
	5989:  0x000052AC,
	5990:  0x00005323,
	5991:  0x00005373,
	5992:  0x00005375,
	5993:  0x0000541D,
	5994:  0x0000542D,
	5995:  0x0000541E,
	5996:  0x0000543E,
	5997:  0x00005426,
	5998:  0x0000544E,
	5999:  0x00005427,
	6000:  0x00005446,
	6001:  0x00005443,
	6002:  0x00005433,
	6003:  0x00005448,
	6004:  0x00005442,
	6005:  0x0000541B,
	6006:  0x00005429,
	6007:  0x0000544A,
	6008:  0x00005439,
	6009:  0x0000543B,
	6010:  0x00005438,
	6011:  0x0000542E,
	6012:  0x00005435,
	6013:  0x00005436,
	6014:  0x00005420,
	6015:  0x0000543C,
	6016:  0x00005440,
	6017:  0x00005431,
	6018:  0x0000542B,
	6019:  0x0000541F,
	6020:  0x0000542C,
	6021:  0x000056EA,
	6022:  0x000056F0,
	6023:  0x000056E4,
	6024:  0x000056EB,
	6025:  0x0000574A,
	6026:  0x00005751,
	6027:  0x00005740,
	6028:  0x0000574D,
	6029:  0x00005747,
	6030:  0x0000574E,
	6031:  0x0000573E,
	6032:  0x00005750,
	6033:  0x0000574F,
	6034:  0x0000573B,
	6035:  0x000058EF,
	6036:  0x0000593E,
	6037:  0x0000599D,
	6038:  0x00005992,
	6039:  0x000059A8,
	6040:  0x0000599E,
	6041:  0x000059A3,
	6042:  0x00005999,
	6043:  0x00005996,
	6044:  0x0000598D,
	6045:  0x000059A4,
	6046:  0x00005993,
	6047:  0x0000598A,
	6048:  0x000059A5,
	6049:  0x00005B5D,
	6050:  0x00005B5C,
	6051:  0x00005B5A,
	6052:  0x00005B5B,
	6053:  0x00005B8C,
	6054:  0x00005B8B,
	6055:  0x00005B8F,
	6056:  0x00005C2C,
	6057:  0x00005C40,
	6058:  0x00005C41,
	6059:  0x00005C3F,
	6060:  0x00005C3E,
	6061:  0x00005C90,
	6062:  0x00005C91,
	6063:  0x00005C94,
	6064:  0x00005C8C,
	6065:  0x00005DEB,
	6066:  0x00005E0C,
	6067:  0x00005E8F,
	6068:  0x00005E87,
	6069:  0x00005E8A,
	6070:  0x00005EF7,
	6071:  0x00005F04,
	6072:  0x00005F1F,
	6073:  0x00005F64,
	6074:  0x00005F62,
	6075:  0x00005F77,
	6076:  0x00005F79,
	6077:  0x00005FD8,
	6078:  0x00005FCC,
	6079:  0x00005FD7,
	6080:  0x00005FCD,
	6081:  0x00005FF1,
	6082:  0x00005FEB,
	6083:  0x00005FF8,
	6084:  0x00005FEA,
	6085:  0x00006212,
	6086:  0x00006211,
	6087:  0x00006284,
	6088:  0x00006297,
	6089:  0x00006296,
	6090:  0x00006280,
	6091:  0x00006276,
	6092:  0x00006289,
	6093:  0x0000626D,
	6094:  0x0000628A,
	6095:  0x0000627C,
	6096:  0x0000627E,
	6097:  0x00006279,
	6098:  0x00006273,
	6099:  0x00006292,
	6100:  0x0000626F,
	6101:  0x00006298,
	6102:  0x0000626E,
	6103:  0x00006295,
	6104:  0x00006293,
	6105:  0x00006291,
	6106:  0x00006286,
	6107:  0x00006539,
	6108:  0x0000653B,
	6109:  0x00006538,
	6110:  0x000065F1,
	6111:  0x000066F4,
	6112:  0x0000675F,
	6113:  0x0000674E,
	6114:  0x0000674F,
	6115:  0x00006750,
	6116:  0x00006751,
	6117:  0x0000675C,
	6118:  0x00006756,
	6119:  0x0000675E,
	6120:  0x00006749,
	6121:  0x00006746,
	6122:  0x00006760,
	6123:  0x00006753,
	6124:  0x00006757,
	6125:  0x00006B65,
	6126:  0x00006BCF,
	6127:  0x00006C42,
	6128:  0x00006C5E,
	6129:  0x00006C99,
	6130:  0x00006C81,
	6131:  0x00006C88,
	6132:  0x00006C89,
	6133:  0x00006C85,
	6134:  0x00006C9B,
	6135:  0x00006C6A,
	6136:  0x00006C7A,
	6137:  0x00006C90,
	6138:  0x00006C70,
	6139:  0x00006C8C,
	6140:  0x00006C68,
	6141:  0x00006C96,
	6142:  0x00006C92,
	6143:  0x00006C7D,
	6144:  0x00006C83,
	6145:  0x00006C72,
	6146:  0x00006C7E,
	6147:  0x00006C74,
	6148:  0x00006C86,
	6149:  0x00006C76,
	6150:  0x00006C8D,
	6151:  0x00006C94,
	6152:  0x00006C98,
	6153:  0x00006C82,
	6154:  0x00007076,
	6155:  0x0000707C,
	6156:  0x0000707D,
	6157:  0x00007078,
	6158:  0x00007262,
	6159:  0x00007261,
	6160:  0x00007260,
	6161:  0x000072C4,
	6162:  0x000072C2,
	6163:  0x00007396,
	6164:  0x0000752C,
	6165:  0x0000752B,
	6166:  0x00007537,
	6167:  0x00007538,
	6168:  0x00007682,
	6169:  0x000076EF,
	6170:  0x000077E3,
	6171:  0x000079C1,
	6172:  0x000079C0,
	6173:  0x000079BF,
	6174:  0x00007A76,
	6175:  0x00007CFB,
	6176:  0x00007F55,
	6177:  0x00008096,
	6178:  0x00008093,
	6179:  0x0000809D,
	6180:  0x00008098,
	6181:  0x0000809B,
	6182:  0x0000809A,
	6183:  0x000080B2,
	6184:  0x0000826F,
	6185:  0x00008292,
	6186:  0x0000828B,
	6187:  0x0000828D,
	6188:  0x0000898B,
	6189:  0x000089D2,
	6190:  0x00008A00,
	6191:  0x00008C37,
	6192:  0x00008C46,
	6193:  0x00008C55,
	6194:  0x00008C9D,
	6195:  0x00008D64,
	6196:  0x00008D70,
	6197:  0x00008DB3,
	6198:  0x00008EAB,
	6199:  0x00008ECA,
	6200:  0x00008F9B,
	6201:  0x00008FB0,
	6202:  0x00008FC2,
	6203:  0x00008FC6,
	6204:  0x00008FC5,
	6205:  0x00008FC4,
	6206:  0x00005DE1,
	6207:  0x00009091,
	6208:  0x000090A2,
	6209:  0x000090AA,
	6210:  0x000090A6,
	6211:  0x000090A3,
	6212:  0x00009149,
	6213:  0x000091C6,
	6214:  0x000091CC,
	6215:  0x00009632,
	6216:  0x0000962E,
	6217:  0x00009631,
	6218:  0x0000962A,
	6219:  0x0000962C,
	6220:  0x00004E26,
	6221:  0x00004E56,
	6222:  0x00004E73,
	6223:  0x00004E8B,
	6224:  0x00004E9B,
	6225:  0x00004E9E,
	6226:  0x00004EAB,
	6227:  0x00004EAC,
	6228:  0x00004F6F,
	6229:  0x00004F9D,
	6230:  0x00004F8D,
	6231:  0x00004F73,
	6232:  0x00004F7F,
	6233:  0x00004F6C,
	6234:  0x00004F9B,
	6235:  0x00004F8B,
	6236:  0x00004F86,
	6237:  0x00004F83,
	6238:  0x00004F70,
	6239:  0x00004F75,
	6240:  0x00004F88,
	6241:  0x00004F69,
	6242:  0x00004F7B,
	6243:  0x00004F96,
	6244:  0x00004F7E,
	6245:  0x00004F8F,
	6246:  0x00004F91,
	6247:  0x00004F7A,
	6248:  0x00005154,
	6249:  0x00005152,
	6250:  0x00005155,
	6251:  0x00005169,
	6252:  0x00005177,
	6253:  0x00005176,
	6254:  0x00005178,
	6255:  0x000051BD,
	6256:  0x000051FD,
	6257:  0x0000523B,
	6258:  0x00005238,
	6259:  0x00005237,
	6260:  0x0000523A,
	6261:  0x00005230,
	6262:  0x0000522E,
	6263:  0x00005236,
	6264:  0x00005241,
	6265:  0x000052BE,
	6266:  0x000052BB,
	6267:  0x00005352,
	6268:  0x00005354,
	6269:  0x00005353,
	6270:  0x00005351,
	6271:  0x00005366,
	6272:  0x00005377,
	6273:  0x00005378,
	6274:  0x00005379,
	6275:  0x000053D6,
	6276:  0x000053D4,
	6277:  0x000053D7,
	6278:  0x00005473,
	6279:  0x00005475,
	6280:  0x00005496,
	6281:  0x00005478,
	6282:  0x00005495,
	6283:  0x00005480,
	6284:  0x0000547B,
	6285:  0x00005477,
	6286:  0x00005484,
	6287:  0x00005492,
	6288:  0x00005486,
	6289:  0x0000547C,
	6290:  0x00005490,
	6291:  0x00005471,
	6292:  0x00005476,
	6293:  0x0000548C,
	6294:  0x0000549A,
	6295:  0x00005462,
	6296:  0x00005468,
	6297:  0x0000548B,
	6298:  0x0000547D,
	6299:  0x0000548E,
	6300:  0x000056FA,
	6301:  0x00005783,
	6302:  0x00005777,
	6303:  0x0000576A,
	6304:  0x00005769,
	6305:  0x00005761,
	6306:  0x00005766,
	6307:  0x00005764,
	6308:  0x0000577C,
	6309:  0x0000591C,
	6310:  0x00005949,
	6311:  0x00005947,
	6312:  0x00005948,
	6313:  0x00005944,
	6314:  0x00005954,
	6315:  0x000059BE,
	6316:  0x000059BB,
	6317:  0x000059D4,
	6318:  0x000059B9,
	6319:  0x000059AE,
	6320:  0x000059D1,
	6321:  0x000059C6,
	6322:  0x000059D0,
	6323:  0x000059CD,
	6324:  0x000059CB,
	6325:  0x000059D3,
	6326:  0x000059CA,
	6327:  0x000059AF,
	6328:  0x000059B3,
	6329:  0x000059D2,
	6330:  0x000059C5,
	6331:  0x00005B5F,
	6332:  0x00005B64,
	6333:  0x00005B63,
	6334:  0x00005B97,
	6335:  0x00005B9A,
	6336:  0x00005B98,
	6337:  0x00005B9C,
	6338:  0x00005B99,
	6339:  0x00005B9B,
	6340:  0x00005C1A,
	6341:  0x00005C48,
	6342:  0x00005C45,
	6343:  0x00005C46,
	6344:  0x00005CB7,
	6345:  0x00005CA1,
	6346:  0x00005CB8,
	6347:  0x00005CA9,
	6348:  0x00005CAB,
	6349:  0x00005CB1,
	6350:  0x00005CB3,
	6351:  0x00005E18,
	6352:  0x00005E1A,
	6353:  0x00005E16,
	6354:  0x00005E15,
	6355:  0x00005E1B,
	6356:  0x00005E11,
	6357:  0x00005E78,
	6358:  0x00005E9A,
	6359:  0x00005E97,
	6360:  0x00005E9C,
	6361:  0x00005E95,
	6362:  0x00005E96,
	6363:  0x00005EF6,
	6364:  0x00005F26,
	6365:  0x00005F27,
	6366:  0x00005F29,
	6367:  0x00005F80,
	6368:  0x00005F81,
	6369:  0x00005F7F,
	6370:  0x00005F7C,
	6371:  0x00005FDD,
	6372:  0x00005FE0,
	6373:  0x00005FFD,
	6374:  0x00005FF5,
	6375:  0x00005FFF,
	6376:  0x0000600F,
	6377:  0x00006014,
	6378:  0x0000602F,
	6379:  0x00006035,
	6380:  0x00006016,
	6381:  0x0000602A,
	6382:  0x00006015,
	6383:  0x00006021,
	6384:  0x00006027,
	6385:  0x00006029,
	6386:  0x0000602B,
	6387:  0x0000601B,
	6388:  0x00006216,
	6389:  0x00006215,
	6390:  0x0000623F,
	6391:  0x0000623E,
	6392:  0x00006240,
	6393:  0x0000627F,
	6394:  0x000062C9,
	6395:  0x000062CC,
	6396:  0x000062C4,
	6397:  0x000062BF,
	6398:  0x000062C2,
	6399:  0x000062B9,
	6400:  0x000062D2,
	6401:  0x000062DB,
	6402:  0x000062AB,
	6403:  0x000062D3,
	6404:  0x000062D4,
	6405:  0x000062CB,
	6406:  0x000062C8,
	6407:  0x000062A8,
	6408:  0x000062BD,
	6409:  0x000062BC,
	6410:  0x000062D0,
	6411:  0x000062D9,
	6412:  0x000062C7,
	6413:  0x000062CD,
	6414:  0x000062B5,
	6415:  0x000062DA,
	6416:  0x000062B1,
	6417:  0x000062D8,
	6418:  0x000062D6,
	6419:  0x000062D7,
	6420:  0x000062C6,
	6421:  0x000062AC,
	6422:  0x000062CE,
	6423:  0x0000653E,
	6424:  0x000065A7,
	6425:  0x000065BC,
	6426:  0x000065FA,
	6427:  0x00006614,
	6428:  0x00006613,
	6429:  0x0000660C,
	6430:  0x00006606,
	6431:  0x00006602,
	6432:  0x0000660E,
	6433:  0x00006600,
	6434:  0x0000660F,
	6435:  0x00006615,
	6436:  0x0000660A,
	6437:  0x00006607,
	6438:  0x0000670D,
	6439:  0x0000670B,
	6440:  0x0000676D,
	6441:  0x0000678B,
	6442:  0x00006795,
	6443:  0x00006771,
	6444:  0x0000679C,
	6445:  0x00006773,
	6446:  0x00006777,
	6447:  0x00006787,
	6448:  0x0000679D,
	6449:  0x00006797,
	6450:  0x0000676F,
	6451:  0x00006770,
	6452:  0x0000677F,
	6453:  0x00006789,
	6454:  0x0000677E,
	6455:  0x00006790,
	6456:  0x00006775,
	6457:  0x0000679A,
	6458:  0x00006793,
	6459:  0x0000677C,
	6460:  0x0000676A,
	6461:  0x00006772,
	6462:  0x00006B23,
	6463:  0x00006B66,
	6464:  0x00006B67,
	6465:  0x00006B7F,
	6466:  0x00006C13,
	6467:  0x00006C1B,
	6468:  0x00006CE3,
	6469:  0x00006CE8,
	6470:  0x00006CF3,
	6471:  0x00006CB1,
	6472:  0x00006CCC,
	6473:  0x00006CE5,
	6474:  0x00006CB3,
	6475:  0x00006CBD,
	6476:  0x00006CBE,
	6477:  0x00006CBC,
	6478:  0x00006CE2,
	6479:  0x00006CAB,
	6480:  0x00006CD5,
	6481:  0x00006CD3,
	6482:  0x00006CB8,
	6483:  0x00006CC4,
	6484:  0x00006CB9,
	6485:  0x00006CC1,
	6486:  0x00006CAE,
	6487:  0x00006CD7,
	6488:  0x00006CC5,
	6489:  0x00006CF1,
	6490:  0x00006CBF,
	6491:  0x00006CBB,
	6492:  0x00006CE1,
	6493:  0x00006CDB,
	6494:  0x00006CCA,
	6495:  0x00006CAC,
	6496:  0x00006CEF,
	6497:  0x00006CDC,
	6498:  0x00006CD6,
	6499:  0x00006CE0,
	6500:  0x00007095,
	6501:  0x0000708E,
	6502:  0x00007092,
	6503:  0x0000708A,
	6504:  0x00007099,
	6505:  0x0000722C,
	6506:  0x0000722D,
	6507:  0x00007238,
	6508:  0x00007248,
	6509:  0x00007267,
	6510:  0x00007269,
	6511:  0x000072C0,
	6512:  0x000072CE,
	6513:  0x000072D9,
	6514:  0x000072D7,
	6515:  0x000072D0,
	6516:  0x000073A9,
	6517:  0x000073A8,
	6518:  0x0000739F,
	6519:  0x000073AB,
	6520:  0x000073A5,
	6521:  0x0000753D,
	6522:  0x0000759D,
	6523:  0x00007599,
	6524:  0x0000759A,
	6525:  0x00007684,
	6526:  0x000076C2,
	6527:  0x000076F2,
	6528:  0x000076F4,
	6529:  0x000077E5,
	6530:  0x000077FD,
	6531:  0x0000793E,
	6532:  0x00007940,
	6533:  0x00007941,
	6534:  0x000079C9,
	6535:  0x000079C8,
	6536:  0x00007A7A,
	6537:  0x00007A79,
	6538:  0x00007AFA,
	6539:  0x00007CFE,
	6540:  0x00007F54,
	6541:  0x00007F8C,
	6542:  0x00007F8B,
	6543:  0x00008005,
	6544:  0x000080BA,
	6545:  0x000080A5,
	6546:  0x000080A2,
	6547:  0x000080B1,
	6548:  0x000080A1,
	6549:  0x000080AB,
	6550:  0x000080A9,
	6551:  0x000080B4,
	6552:  0x000080AA,
	6553:  0x000080AF,
	6554:  0x000081E5,
	6555:  0x000081FE,
	6556:  0x0000820D,
	6557:  0x000082B3,
	6558:  0x0000829D,
	6559:  0x00008299,
	6560:  0x000082AD,
	6561:  0x000082BD,
	6562:  0x0000829F,
	6563:  0x000082B9,
	6564:  0x000082B1,
	6565:  0x000082AC,
	6566:  0x000082A5,
	6567:  0x000082AF,
	6568:  0x000082B8,
	6569:  0x000082A3,
	6570:  0x000082B0,
	6571:  0x000082BE,
	6572:  0x000082B7,
	6573:  0x0000864E,
	6574:  0x00008671,
	6575:  0x0000521D,
	6576:  0x00008868,
	6577:  0x00008ECB,
	6578:  0x00008FCE,
	6579:  0x00008FD4,
	6580:  0x00008FD1,
	6581:  0x000090B5,
	6582:  0x000090B8,
	6583:  0x000090B1,
	6584:  0x000090B6,
	6585:  0x000091C7,
	6586:  0x000091D1,
	6587:  0x00009577,
	6588:  0x00009580,
	6589:  0x0000961C,
	6590:  0x00009640,
	6591:  0x0000963F,
	6592:  0x0000963B,
	6593:  0x00009644,
	6594:  0x00009642,
	6595:  0x000096B9,
	6596:  0x000096E8,
	6597:  0x00009752,
	6598:  0x0000975E,
	6599:  0x00004E9F,
	6600:  0x00004EAD,
	6601:  0x00004EAE,
	6602:  0x00004FE1,
	6603:  0x00004FB5,
	6604:  0x00004FAF,
	6605:  0x00004FBF,
	6606:  0x00004FE0,
	6607:  0x00004FD1,
	6608:  0x00004FCF,
	6609:  0x00004FDD,
	6610:  0x00004FC3,
	6611:  0x00004FB6,
	6612:  0x00004FD8,
	6613:  0x00004FDF,
	6614:  0x00004FCA,
	6615:  0x00004FD7,
	6616:  0x00004FAE,
	6617:  0x00004FD0,
	6618:  0x00004FC4,
	6619:  0x00004FC2,
	6620:  0x00004FDA,
	6621:  0x00004FCE,
	6622:  0x00004FDE,
	6623:  0x00004FB7,
	6624:  0x00005157,
	6625:  0x00005192,
	6626:  0x00005191,
	6627:  0x000051A0,
	6628:  0x0000524E,
	6629:  0x00005243,
	6630:  0x0000524A,
	6631:  0x0000524D,
	6632:  0x0000524C,
	6633:  0x0000524B,
	6634:  0x00005247,
	6635:  0x000052C7,
	6636:  0x000052C9,
	6637:  0x000052C3,
	6638:  0x000052C1,
	6639:  0x0000530D,
	6640:  0x00005357,
	6641:  0x0000537B,
	6642:  0x0000539A,
	6643:  0x000053DB,
	6644:  0x000054AC,
	6645:  0x000054C0,
	6646:  0x000054A8,
	6647:  0x000054CE,
	6648:  0x000054C9,
	6649:  0x000054B8,
	6650:  0x000054A6,
	6651:  0x000054B3,
	6652:  0x000054C7,
	6653:  0x000054C2,
	6654:  0x000054BD,
	6655:  0x000054AA,
	6656:  0x000054C1,
	6657:  0x000054C4,
	6658:  0x000054C8,
	6659:  0x000054AF,
	6660:  0x000054AB,
	6661:  0x000054B1,
	6662:  0x000054BB,
	6663:  0x000054A9,
	6664:  0x000054A7,
	6665:  0x000054BF,
	6666:  0x000056FF,
	6667:  0x00005782,
	6668:  0x0000578B,
	6669:  0x000057A0,
	6670:  0x000057A3,
	6671:  0x000057A2,
	6672:  0x000057CE,
	6673:  0x000057AE,
	6674:  0x00005793,
	6675:  0x00005955,
	6676:  0x00005951,
	6677:  0x0000594F,
	6678:  0x0000594E,
	6679:  0x00005950,
	6680:  0x000059DC,
	6681:  0x000059D8,
	6682:  0x000059FF,
	6683:  0x000059E3,
	6684:  0x000059E8,
	6685:  0x00005A03,
	6686:  0x000059E5,
	6687:  0x000059EA,
	6688:  0x000059DA,
	6689:  0x000059E6,
	6690:  0x00005A01,
	6691:  0x000059FB,
	6692:  0x00005B69,
	6693:  0x00005BA3,
	6694:  0x00005BA6,
	6695:  0x00005BA4,
	6696:  0x00005BA2,
	6697:  0x00005BA5,
	6698:  0x00005C01,
	6699:  0x00005C4E,
	6700:  0x00005C4F,
	6701:  0x00005C4D,
	6702:  0x00005C4B,
	6703:  0x00005CD9,
	6704:  0x00005CD2,
	6705:  0x00005DF7,
	6706:  0x00005E1D,
	6707:  0x00005E25,
	6708:  0x00005E1F,
	6709:  0x00005E7D,
	6710:  0x00005EA0,
	6711:  0x00005EA6,
	6712:  0x00005EFA,
	6713:  0x00005F08,
	6714:  0x00005F2D,
	6715:  0x00005F65,
	6716:  0x00005F88,
	6717:  0x00005F85,
	6718:  0x00005F8A,
	6719:  0x00005F8B,
	6720:  0x00005F87,
	6721:  0x00005F8C,
	6722:  0x00005F89,
	6723:  0x00006012,
	6724:  0x0000601D,
	6725:  0x00006020,
	6726:  0x00006025,
	6727:  0x0000600E,
	6728:  0x00006028,
	6729:  0x0000604D,
	6730:  0x00006070,
	6731:  0x00006068,
	6732:  0x00006062,
	6733:  0x00006046,
	6734:  0x00006043,
	6735:  0x0000606C,
	6736:  0x0000606B,
	6737:  0x0000606A,
	6738:  0x00006064,
	6739:  0x00006241,
	6740:  0x000062DC,
	6741:  0x00006316,
	6742:  0x00006309,
	6743:  0x000062FC,
	6744:  0x000062ED,
	6745:  0x00006301,
	6746:  0x000062EE,
	6747:  0x000062FD,
	6748:  0x00006307,
	6749:  0x000062F1,
	6750:  0x000062F7,
	6751:  0x000062EF,
	6752:  0x000062EC,
	6753:  0x000062FE,
	6754:  0x000062F4,
	6755:  0x00006311,
	6756:  0x00006302,
	6757:  0x0000653F,
	6758:  0x00006545,
	6759:  0x000065AB,
	6760:  0x000065BD,
	6761:  0x000065E2,
	6762:  0x00006625,
	6763:  0x0000662D,
	6764:  0x00006620,
	6765:  0x00006627,
	6766:  0x0000662F,
	6767:  0x0000661F,
	6768:  0x00006628,
	6769:  0x00006631,
	6770:  0x00006624,
	6771:  0x000066F7,
	6772:  0x000067FF,
	6773:  0x000067D3,
	6774:  0x000067F1,
	6775:  0x000067D4,
	6776:  0x000067D0,
	6777:  0x000067EC,
	6778:  0x000067B6,
	6779:  0x000067AF,
	6780:  0x000067F5,
	6781:  0x000067E9,
	6782:  0x000067EF,
	6783:  0x000067C4,
	6784:  0x000067D1,
	6785:  0x000067B4,
	6786:  0x000067DA,
	6787:  0x000067E5,
	6788:  0x000067B8,
	6789:  0x000067CF,
	6790:  0x000067DE,
	6791:  0x000067F3,
	6792:  0x000067B0,
	6793:  0x000067D9,
	6794:  0x000067E2,
	6795:  0x000067DD,
	6796:  0x000067D2,
	6797:  0x00006B6A,
	6798:  0x00006B83,
	6799:  0x00006B86,
	6800:  0x00006BB5,
	6801:  0x00006BD2,
	6802:  0x00006BD7,
	6803:  0x00006C1F,
	6804:  0x00006CC9,
	6805:  0x00006D0B,
	6806:  0x00006D32,
	6807:  0x00006D2A,
	6808:  0x00006D41,
	6809:  0x00006D25,
	6810:  0x00006D0C,
	6811:  0x00006D31,
	6812:  0x00006D1E,
	6813:  0x00006D17,
	6814:  0x00006D3B,
	6815:  0x00006D3D,
	6816:  0x00006D3E,
	6817:  0x00006D36,
	6818:  0x00006D1B,
	6819:  0x00006CF5,
	6820:  0x00006D39,
	6821:  0x00006D27,
	6822:  0x00006D38,
	6823:  0x00006D29,
	6824:  0x00006D2E,
	6825:  0x00006D35,
	6826:  0x00006D0E,
	6827:  0x00006D2B,
	6828:  0x000070AB,
	6829:  0x000070BA,
	6830:  0x000070B3,
	6831:  0x000070AC,
	6832:  0x000070AF,
	6833:  0x000070AD,
	6834:  0x000070B8,
	6835:  0x000070AE,
	6836:  0x000070A4,
	6837:  0x00007230,
	6838:  0x00007272,
	6839:  0x0000726F,
	6840:  0x00007274,
	6841:  0x000072E9,
	6842:  0x000072E0,
	6843:  0x000072E1,
	6844:  0x000073B7,
	6845:  0x000073CA,
	6846:  0x000073BB,
	6847:  0x000073B2,
	6848:  0x000073CD,
	6849:  0x000073C0,
	6850:  0x000073B3,
	6851:  0x0000751A,
	6852:  0x0000752D,
	6853:  0x0000754F,
	6854:  0x0000754C,
	6855:  0x0000754E,
	6856:  0x0000754B,
	6857:  0x000075AB,
	6858:  0x000075A4,
	6859:  0x000075A5,
	6860:  0x000075A2,
	6861:  0x000075A3,
	6862:  0x00007678,
	6863:  0x00007686,
	6864:  0x00007687,
	6865:  0x00007688,
	6866:  0x000076C8,
	6867:  0x000076C6,
	6868:  0x000076C3,
	6869:  0x000076C5,
	6870:  0x00007701,
	6871:  0x000076F9,
	6872:  0x000076F8,
	6873:  0x00007709,
	6874:  0x0000770B,
	6875:  0x000076FE,
	6876:  0x000076FC,
	6877:  0x00007707,
	6878:  0x000077DC,
	6879:  0x00007802,
	6880:  0x00007814,
	6881:  0x0000780C,
	6882:  0x0000780D,
	6883:  0x00007946,
	6884:  0x00007949,
	6885:  0x00007948,
	6886:  0x00007947,
	6887:  0x000079B9,
	6888:  0x000079BA,
	6889:  0x000079D1,
	6890:  0x000079D2,
	6891:  0x000079CB,
	6892:  0x00007A7F,
	6893:  0x00007A81,
	6894:  0x00007AFF,
	6895:  0x00007AFD,
	6896:  0x00007C7D,
	6897:  0x00007D02,
	6898:  0x00007D05,
	6899:  0x00007D00,
	6900:  0x00007D09,
	6901:  0x00007D07,
	6902:  0x00007D04,
	6903:  0x00007D06,
	6904:  0x00007F38,
	6905:  0x00007F8E,
	6906:  0x00007FBF,
	6907:  0x00008004,
	6908:  0x00008010,
	6909:  0x0000800D,
	6910:  0x00008011,
	6911:  0x00008036,
	6912:  0x000080D6,
	6913:  0x000080E5,
	6914:  0x000080DA,
	6915:  0x000080C3,
	6916:  0x000080C4,
	6917:  0x000080CC,
	6918:  0x000080E1,
	6919:  0x000080DB,
	6920:  0x000080CE,
	6921:  0x000080DE,
	6922:  0x000080E4,
	6923:  0x000080DD,
	6924:  0x000081F4,
	6925:  0x00008222,
	6926:  0x000082E7,
	6927:  0x00008303,
	6928:  0x00008305,
	6929:  0x000082E3,
	6930:  0x000082DB,
	6931:  0x000082E6,
	6932:  0x00008304,
	6933:  0x000082E5,
	6934:  0x00008302,
	6935:  0x00008309,
	6936:  0x000082D2,
	6937:  0x000082D7,
	6938:  0x000082F1,
	6939:  0x00008301,
	6940:  0x000082DC,
	6941:  0x000082D4,
	6942:  0x000082D1,
	6943:  0x000082DE,
	6944:  0x000082D3,
	6945:  0x000082DF,
	6946:  0x000082EF,
	6947:  0x00008306,
	6948:  0x00008650,
	6949:  0x00008679,
	6950:  0x0000867B,
	6951:  0x0000867A,
	6952:  0x0000884D,
	6953:  0x0000886B,
	6954:  0x00008981,
	6955:  0x000089D4,
	6956:  0x00008A08,
	6957:  0x00008A02,
	6958:  0x00008A03,
	6959:  0x00008C9E,
	6960:  0x00008CA0,
	6961:  0x00008D74,
	6962:  0x00008D73,
	6963:  0x00008DB4,
	6964:  0x00008ECD,
	6965:  0x00008ECC,
	6966:  0x00008FF0,
	6967:  0x00008FE6,
	6968:  0x00008FE2,
	6969:  0x00008FEA,
	6970:  0x00008FE5,
	6971:  0x00008FED,
	6972:  0x00008FEB,
	6973:  0x00008FE4,
	6974:  0x00008FE8,
	6975:  0x000090CA,
	6976:  0x000090CE,
	6977:  0x000090C1,
	6978:  0x000090C3,
	6979:  0x0000914B,
	6980:  0x0000914A,
	6981:  0x000091CD,
	6982:  0x00009582,
	6983:  0x00009650,
	6984:  0x0000964B,
	6985:  0x0000964C,
	6986:  0x0000964D,
	6987:  0x00009762,
	6988:  0x00009769,
	6989:  0x000097CB,
	6990:  0x000097ED,
	6991:  0x000097F3,
	6992:  0x00009801,
	6993:  0x000098A8,
	6994:  0x000098DB,
	6995:  0x000098DF,
	6996:  0x00009996,
	6997:  0x00009999,
	6998:  0x00004E58,
	6999:  0x00004EB3,
	7000:  0x0000500C,
	7001:  0x0000500D,
	7002:  0x00005023,
	7003:  0x00004FEF,
	7004:  0x00005026,
	7005:  0x00005025,
	7006:  0x00004FF8,
	7007:  0x00005029,
	7008:  0x00005016,
	7009:  0x00005006,
	7010:  0x0000503C,
	7011:  0x0000501F,
	7012:  0x0000501A,
	7013:  0x00005012,
	7014:  0x00005011,
	7015:  0x00004FFA,
	7016:  0x00005000,
	7017:  0x00005014,
	7018:  0x00005028,
	7019:  0x00004FF1,
	7020:  0x00005021,
	7021:  0x0000500B,
	7022:  0x00005019,
	7023:  0x00005018,
	7024:  0x00004FF3,
	7025:  0x00004FEE,
	7026:  0x0000502D,
	7027:  0x0000502A,
	7028:  0x00004FFE,
	7029:  0x0000502B,
	7030:  0x00005009,
	7031:  0x0000517C,
	7032:  0x000051A4,
	7033:  0x000051A5,
	7034:  0x000051A2,
	7035:  0x000051CD,
	7036:  0x000051CC,
	7037:  0x000051C6,
	7038:  0x000051CB,
	7039:  0x00005256,
	7040:  0x0000525C,
	7041:  0x00005254,
	7042:  0x0000525B,
	7043:  0x0000525D,
	7044:  0x0000532A,
	7045:  0x0000537F,
	7046:  0x0000539F,
	7047:  0x0000539D,
	7048:  0x000053DF,
	7049:  0x000054E8,
	7050:  0x00005510,
	7051:  0x00005501,
	7052:  0x00005537,
	7053:  0x000054FC,
	7054:  0x000054E5,
	7055:  0x000054F2,
	7056:  0x00005506,
	7057:  0x000054FA,
	7058:  0x00005514,
	7059:  0x000054E9,
	7060:  0x000054ED,
	7061:  0x000054E1,
	7062:  0x00005509,
	7063:  0x000054EE,
	7064:  0x000054EA,
	7065:  0x000054E6,
	7066:  0x00005527,
	7067:  0x00005507,
	7068:  0x000054FD,
	7069:  0x0000550F,
	7070:  0x00005703,
	7071:  0x00005704,
	7072:  0x000057C2,
	7073:  0x000057D4,
	7074:  0x000057CB,
	7075:  0x000057C3,
	7076:  0x00005809,
	7077:  0x0000590F,
	7078:  0x00005957,
	7079:  0x00005958,
	7080:  0x0000595A,
	7081:  0x00005A11,
	7082:  0x00005A18,
	7083:  0x00005A1C,
	7084:  0x00005A1F,
	7085:  0x00005A1B,
	7086:  0x00005A13,
	7087:  0x000059EC,
	7088:  0x00005A20,
	7089:  0x00005A23,
	7090:  0x00005A29,
	7091:  0x00005A25,
	7092:  0x00005A0C,
	7093:  0x00005A09,
	7094:  0x00005B6B,
	7095:  0x00005C58,
	7096:  0x00005BB0,
	7097:  0x00005BB3,
	7098:  0x00005BB6,
	7099:  0x00005BB4,
	7100:  0x00005BAE,
	7101:  0x00005BB5,
	7102:  0x00005BB9,
	7103:  0x00005BB8,
	7104:  0x00005C04,
	7105:  0x00005C51,
	7106:  0x00005C55,
	7107:  0x00005C50,
	7108:  0x00005CED,
	7109:  0x00005CFD,
	7110:  0x00005CFB,
	7111:  0x00005CEA,
	7112:  0x00005CE8,
	7113:  0x00005CF0,
	7114:  0x00005CF6,
	7115:  0x00005D01,
	7116:  0x00005CF4,
	7117:  0x00005DEE,
	7118:  0x00005E2D,
	7119:  0x00005E2B,
	7120:  0x00005EAB,
	7121:  0x00005EAD,
	7122:  0x00005EA7,
	7123:  0x00005F31,
	7124:  0x00005F92,
	7125:  0x00005F91,
	7126:  0x00005F90,
	7127:  0x00006059,
	7128:  0x00006063,
	7129:  0x00006065,
	7130:  0x00006050,
	7131:  0x00006055,
	7132:  0x0000606D,
	7133:  0x00006069,
	7134:  0x0000606F,
	7135:  0x00006084,
	7136:  0x0000609F,
	7137:  0x0000609A,
	7138:  0x0000608D,
	7139:  0x00006094,
	7140:  0x0000608C,
	7141:  0x00006085,
	7142:  0x00006096,
	7143:  0x00006247,
	7144:  0x000062F3,
	7145:  0x00006308,
	7146:  0x000062FF,
	7147:  0x0000634E,
	7148:  0x0000633E,
	7149:  0x0000632F,
	7150:  0x00006355,
	7151:  0x00006342,
	7152:  0x00006346,
	7153:  0x0000634F,
	7154:  0x00006349,
	7155:  0x0000633A,
	7156:  0x00006350,
	7157:  0x0000633D,
	7158:  0x0000632A,
	7159:  0x0000632B,
	7160:  0x00006328,
	7161:  0x0000634D,
	7162:  0x0000634C,
	7163:  0x00006548,
	7164:  0x00006549,
	7165:  0x00006599,
	7166:  0x000065C1,
	7167:  0x000065C5,
	7168:  0x00006642,
	7169:  0x00006649,
	7170:  0x0000664F,
	7171:  0x00006643,
	7172:  0x00006652,
	7173:  0x0000664C,
	7174:  0x00006645,
	7175:  0x00006641,
	7176:  0x000066F8,
	7177:  0x00006714,
	7178:  0x00006715,
	7179:  0x00006717,
	7180:  0x00006821,
	7181:  0x00006838,
	7182:  0x00006848,
	7183:  0x00006846,
	7184:  0x00006853,
	7185:  0x00006839,
	7186:  0x00006842,
	7187:  0x00006854,
	7188:  0x00006829,
	7189:  0x000068B3,
	7190:  0x00006817,
	7191:  0x0000684C,
	7192:  0x00006851,
	7193:  0x0000683D,
	7194:  0x000067F4,
	7195:  0x00006850,
	7196:  0x00006840,
	7197:  0x0000683C,
	7198:  0x00006843,
	7199:  0x0000682A,
	7200:  0x00006845,
	7201:  0x00006813,
	7202:  0x00006818,
	7203:  0x00006841,
	7204:  0x00006B8A,
	7205:  0x00006B89,
	7206:  0x00006BB7,
	7207:  0x00006C23,
	7208:  0x00006C27,
	7209:  0x00006C28,
	7210:  0x00006C26,
	7211:  0x00006C24,
	7212:  0x00006CF0,
	7213:  0x00006D6A,
	7214:  0x00006D95,
	7215:  0x00006D88,
	7216:  0x00006D87,
	7217:  0x00006D66,
	7218:  0x00006D78,
	7219:  0x00006D77,
	7220:  0x00006D59,
	7221:  0x00006D93,
	7222:  0x00006D6C,
	7223:  0x00006D89,
	7224:  0x00006D6E,
	7225:  0x00006D5A,
	7226:  0x00006D74,
	7227:  0x00006D69,
	7228:  0x00006D8C,
	7229:  0x00006D8A,
	7230:  0x00006D79,
	7231:  0x00006D85,
	7232:  0x00006D65,
	7233:  0x00006D94,
	7234:  0x000070CA,
	7235:  0x000070D8,
	7236:  0x000070E4,
	7237:  0x000070D9,
	7238:  0x000070C8,
	7239:  0x000070CF,
	7240:  0x00007239,
	7241:  0x00007279,
	7242:  0x000072FC,
	7243:  0x000072F9,
	7244:  0x000072FD,
	7245:  0x000072F8,
	7246:  0x000072F7,
	7247:  0x00007386,
	7248:  0x000073ED,
	7249:  0x00007409,
	7250:  0x000073EE,
	7251:  0x000073E0,
	7252:  0x000073EA,
	7253:  0x000073DE,
	7254:  0x00007554,
	7255:  0x0000755D,
	7256:  0x0000755C,
	7257:  0x0000755A,
	7258:  0x00007559,
	7259:  0x000075BE,
	7260:  0x000075C5,
	7261:  0x000075C7,
	7262:  0x000075B2,
	7263:  0x000075B3,
	7264:  0x000075BD,
	7265:  0x000075BC,
	7266:  0x000075B9,
	7267:  0x000075C2,
	7268:  0x000075B8,
	7269:  0x0000768B,
	7270:  0x000076B0,
	7271:  0x000076CA,
	7272:  0x000076CD,
	7273:  0x000076CE,
	7274:  0x00007729,
	7275:  0x0000771F,
	7276:  0x00007720,
	7277:  0x00007728,
	7278:  0x000077E9,
	7279:  0x00007830,
	7280:  0x00007827,
	7281:  0x00007838,
	7282:  0x0000781D,
	7283:  0x00007834,
	7284:  0x00007837,
	7285:  0x00007825,
	7286:  0x0000782D,
	7287:  0x00007820,
	7288:  0x0000781F,
	7289:  0x00007832,
	7290:  0x00007955,
	7291:  0x00007950,
	7292:  0x00007960,
	7293:  0x0000795F,
	7294:  0x00007956,
	7295:  0x0000795E,
	7296:  0x0000795D,
	7297:  0x00007957,
	7298:  0x0000795A,
	7299:  0x000079E4,
	7300:  0x000079E3,
	7301:  0x000079E7,
	7302:  0x000079DF,
	7303:  0x000079E6,
	7304:  0x000079E9,
	7305:  0x000079D8,
	7306:  0x00007A84,
	7307:  0x00007A88,
	7308:  0x00007AD9,
	7309:  0x00007B06,
	7310:  0x00007B11,
	7311:  0x00007C89,
	7312:  0x00007D21,
	7313:  0x00007D17,
	7314:  0x00007D0B,
	7315:  0x00007D0A,
	7316:  0x00007D20,
	7317:  0x00007D22,
	7318:  0x00007D14,
	7319:  0x00007D10,
	7320:  0x00007D15,
	7321:  0x00007D1A,
	7322:  0x00007D1C,
	7323:  0x00007D0D,
	7324:  0x00007D19,
	7325:  0x00007D1B,
	7326:  0x00007F3A,
	7327:  0x00007F5F,
	7328:  0x00007F94,
	7329:  0x00007FC5,
	7330:  0x00007FC1,
	7331:  0x00008006,
	7332:  0x00008018,
	7333:  0x00008015,
	7334:  0x00008019,
	7335:  0x00008017,
	7336:  0x0000803D,
	7337:  0x0000803F,
	7338:  0x000080F1,
	7339:  0x00008102,
	7340:  0x000080F0,
	7341:  0x00008105,
	7342:  0x000080ED,
	7343:  0x000080F4,
	7344:  0x00008106,
	7345:  0x000080F8,
	7346:  0x000080F3,
	7347:  0x00008108,
	7348:  0x000080FD,
	7349:  0x0000810A,
	7350:  0x000080FC,
	7351:  0x000080EF,
	7352:  0x000081ED,
	7353:  0x000081EC,
	7354:  0x00008200,
	7355:  0x00008210,
	7356:  0x0000822A,
	7357:  0x0000822B,
	7358:  0x00008228,
	7359:  0x0000822C,
	7360:  0x000082BB,
	7361:  0x0000832B,
	7362:  0x00008352,
	7363:  0x00008354,
	7364:  0x0000834A,
	7365:  0x00008338,
	7366:  0x00008350,
	7367:  0x00008349,
	7368:  0x00008335,
	7369:  0x00008334,
	7370:  0x0000834F,
	7371:  0x00008332,
	7372:  0x00008339,
	7373:  0x00008336,
	7374:  0x00008317,
	7375:  0x00008340,
	7376:  0x00008331,
	7377:  0x00008328,
	7378:  0x00008343,
	7379:  0x00008654,
	7380:  0x0000868A,
	7381:  0x000086AA,
	7382:  0x00008693,
	7383:  0x000086A4,
	7384:  0x000086A9,
	7385:  0x0000868C,
	7386:  0x000086A3,
	7387:  0x0000869C,
	7388:  0x00008870,
	7389:  0x00008877,
	7390:  0x00008881,
	7391:  0x00008882,
	7392:  0x0000887D,
	7393:  0x00008879,
	7394:  0x00008A18,
	7395:  0x00008A10,
	7396:  0x00008A0E,
	7397:  0x00008A0C,
	7398:  0x00008A15,
	7399:  0x00008A0A,
	7400:  0x00008A17,
	7401:  0x00008A13,
	7402:  0x00008A16,
	7403:  0x00008A0F,
	7404:  0x00008A11,
	7405:  0x00008C48,
	7406:  0x00008C7A,
	7407:  0x00008C79,
	7408:  0x00008CA1,
	7409:  0x00008CA2,
	7410:  0x00008D77,
	7411:  0x00008EAC,
	7412:  0x00008ED2,
	7413:  0x00008ED4,
	7414:  0x00008ECF,
	7415:  0x00008FB1,
	7416:  0x00009001,
	7417:  0x00009006,
	7418:  0x00008FF7,
	7419:  0x00009000,
	7420:  0x00008FFA,
	7421:  0x00008FF4,
	7422:  0x00009003,
	7423:  0x00008FFD,
	7424:  0x00009005,
	7425:  0x00008FF8,
	7426:  0x00009095,
	7427:  0x000090E1,
	7428:  0x000090DD,
	7429:  0x000090E2,
	7430:  0x00009152,
	7431:  0x0000914D,
	7432:  0x0000914C,
	7433:  0x000091D8,
	7434:  0x000091DD,
	7435:  0x000091D7,
	7436:  0x000091DC,
	7437:  0x000091D9,
	7438:  0x00009583,
	7439:  0x00009662,
	7440:  0x00009663,
	7441:  0x00009661,
	7442:  0x0000965B,
	7443:  0x0000965D,
	7444:  0x00009664,
	7445:  0x00009658,
	7446:  0x0000965E,
	7447:  0x000096BB,
	7448:  0x000098E2,
	7449:  0x000099AC,
	7450:  0x00009AA8,
	7451:  0x00009AD8,
	7452:  0x00009B25,
	7453:  0x00009B32,
	7454:  0x00009B3C,
	7455:  0x00004E7E,
	7456:  0x0000507A,
	7457:  0x0000507D,
	7458:  0x0000505C,
	7459:  0x00005047,
	7460:  0x00005043,
	7461:  0x0000504C,
	7462:  0x0000505A,
	7463:  0x00005049,
	7464:  0x00005065,
	7465:  0x00005076,
	7466:  0x0000504E,
	7467:  0x00005055,
	7468:  0x00005075,
	7469:  0x00005074,
	7470:  0x00005077,
	7471:  0x0000504F,
	7472:  0x0000500F,
	7473:  0x0000506F,
	7474:  0x0000506D,
	7475:  0x0000515C,
	7476:  0x00005195,
	7477:  0x000051F0,
	7478:  0x0000526A,
	7479:  0x0000526F,
	7480:  0x000052D2,
	7481:  0x000052D9,
	7482:  0x000052D8,
	7483:  0x000052D5,
	7484:  0x00005310,
	7485:  0x0000530F,
	7486:  0x00005319,
	7487:  0x0000533F,
	7488:  0x00005340,
	7489:  0x0000533E,
	7490:  0x000053C3,
	7491:  0x000066FC,
	7492:  0x00005546,
	7493:  0x0000556A,
	7494:  0x00005566,
	7495:  0x00005544,
	7496:  0x0000555E,
	7497:  0x00005561,
	7498:  0x00005543,
	7499:  0x0000554A,
	7500:  0x00005531,
	7501:  0x00005556,
	7502:  0x0000554F,
	7503:  0x00005555,
	7504:  0x0000552F,
	7505:  0x00005564,
	7506:  0x00005538,
	7507:  0x0000552E,
	7508:  0x0000555C,
	7509:  0x0000552C,
	7510:  0x00005563,
	7511:  0x00005533,
	7512:  0x00005541,
	7513:  0x00005557,
	7514:  0x00005708,
	7515:  0x0000570B,
	7516:  0x00005709,
	7517:  0x000057DF,
	7518:  0x00005805,
	7519:  0x0000580A,
	7520:  0x00005806,
	7521:  0x000057E0,
	7522:  0x000057E4,
	7523:  0x000057FA,
	7524:  0x00005802,
	7525:  0x00005835,
	7526:  0x000057F7,
	7527:  0x000057F9,
	7528:  0x00005920,
	7529:  0x00005962,
	7530:  0x00005A36,
	7531:  0x00005A41,
	7532:  0x00005A49,
	7533:  0x00005A66,
	7534:  0x00005A6A,
	7535:  0x00005A40,
	7536:  0x00005A3C,
	7537:  0x00005A62,
	7538:  0x00005A5A,
	7539:  0x00005A46,
	7540:  0x00005A4A,
	7541:  0x00005B70,
	7542:  0x00005BC7,
	7543:  0x00005BC5,
	7544:  0x00005BC4,
	7545:  0x00005BC2,
	7546:  0x00005BBF,
	7547:  0x00005BC6,
	7548:  0x00005C09,
	7549:  0x00005C08,
	7550:  0x00005C07,
	7551:  0x00005C60,
	7552:  0x00005C5C,
	7553:  0x00005C5D,
	7554:  0x00005D07,
	7555:  0x00005D06,
	7556:  0x00005D0E,
	7557:  0x00005D1B,
	7558:  0x00005D16,
	7559:  0x00005D22,
	7560:  0x00005D11,
	7561:  0x00005D29,
	7562:  0x00005D14,
	7563:  0x00005D19,
	7564:  0x00005D24,
	7565:  0x00005D27,
	7566:  0x00005D17,
	7567:  0x00005DE2,
	7568:  0x00005E38,
	7569:  0x00005E36,
	7570:  0x00005E33,
	7571:  0x00005E37,
	7572:  0x00005EB7,
	7573:  0x00005EB8,
	7574:  0x00005EB6,
	7575:  0x00005EB5,
	7576:  0x00005EBE,
	7577:  0x00005F35,
	7578:  0x00005F37,
	7579:  0x00005F57,
	7580:  0x00005F6C,
	7581:  0x00005F69,
	7582:  0x00005F6B,
	7583:  0x00005F97,
	7584:  0x00005F99,
	7585:  0x00005F9E,
	7586:  0x00005F98,
	7587:  0x00005FA1,
	7588:  0x00005FA0,
	7589:  0x00005F9C,
	7590:  0x0000607F,
	7591:  0x000060A3,
	7592:  0x00006089,
	7593:  0x000060A0,
	7594:  0x000060A8,
	7595:  0x000060CB,
	7596:  0x000060B4,
	7597:  0x000060E6,
	7598:  0x000060BD,
	7599:  0x000060C5,
	7600:  0x000060BB,
	7601:  0x000060B5,
	7602:  0x000060DC,
	7603:  0x000060BC,
	7604:  0x000060D8,
	7605:  0x000060D5,
	7606:  0x000060C6,
	7607:  0x000060DF,
	7608:  0x000060B8,
	7609:  0x000060DA,
	7610:  0x000060C7,
	7611:  0x0000621A,
	7612:  0x0000621B,
	7613:  0x00006248,
	7614:  0x000063A0,
	7615:  0x000063A7,
	7616:  0x00006372,
	7617:  0x00006396,
	7618:  0x000063A2,
	7619:  0x000063A5,
	7620:  0x00006377,
	7621:  0x00006367,
	7622:  0x00006398,
	7623:  0x000063AA,
	7624:  0x00006371,
	7625:  0x000063A9,
	7626:  0x00006389,
	7627:  0x00006383,
	7628:  0x0000639B,
	7629:  0x0000636B,
	7630:  0x000063A8,
	7631:  0x00006384,
	7632:  0x00006388,
	7633:  0x00006399,
	7634:  0x000063A1,
	7635:  0x000063AC,
	7636:  0x00006392,
	7637:  0x0000638F,
	7638:  0x00006380,
	7639:  0x0000637B,
	7640:  0x00006369,
	7641:  0x00006368,
	7642:  0x0000637A,
	7643:  0x0000655D,
	7644:  0x00006556,
	7645:  0x00006551,
	7646:  0x00006559,
	7647:  0x00006557,
	7648:  0x0000555F,
	7649:  0x0000654F,
	7650:  0x00006558,
	7651:  0x00006555,
	7652:  0x00006554,
	7653:  0x0000659C,
	7654:  0x0000659B,
	7655:  0x000065AC,
	7656:  0x000065CF,
	7657:  0x000065CB,
	7658:  0x000065CC,
	7659:  0x000065CE,
	7660:  0x0000665D,
	7661:  0x0000665A,
	7662:  0x00006664,
	7663:  0x00006668,
	7664:  0x00006666,
	7665:  0x0000665E,
	7666:  0x000066F9,
	7667:  0x000052D7,
	7668:  0x0000671B,
	7669:  0x00006881,
	7670:  0x000068AF,
	7671:  0x000068A2,
	7672:  0x00006893,
	7673:  0x000068B5,
	7674:  0x0000687F,
	7675:  0x00006876,
	7676:  0x000068B1,
	7677:  0x000068A7,
	7678:  0x00006897,
	7679:  0x000068B0,
	7680:  0x00006883,
	7681:  0x000068C4,
	7682:  0x000068AD,
	7683:  0x00006886,
	7684:  0x00006885,
	7685:  0x00006894,
	7686:  0x0000689D,
	7687:  0x000068A8,
	7688:  0x0000689F,
	7689:  0x000068A1,
	7690:  0x00006882,
	7691:  0x00006B32,
	7692:  0x00006BBA,
	7693:  0x00006BEB,
	7694:  0x00006BEC,
	7695:  0x00006C2B,
	7696:  0x00006D8E,
	7697:  0x00006DBC,
	7698:  0x00006DF3,
	7699:  0x00006DD9,
	7700:  0x00006DB2,
	7701:  0x00006DE1,
	7702:  0x00006DCC,
	7703:  0x00006DE4,
	7704:  0x00006DFB,
	7705:  0x00006DFA,
	7706:  0x00006E05,
	7707:  0x00006DC7,
	7708:  0x00006DCB,
	7709:  0x00006DAF,
	7710:  0x00006DD1,
	7711:  0x00006DAE,
	7712:  0x00006DDE,
	7713:  0x00006DF9,
	7714:  0x00006DB8,
	7715:  0x00006DF7,
	7716:  0x00006DF5,
	7717:  0x00006DC5,
	7718:  0x00006DD2,
	7719:  0x00006E1A,
	7720:  0x00006DB5,
	7721:  0x00006DDA,
	7722:  0x00006DEB,
	7723:  0x00006DD8,
	7724:  0x00006DEA,
	7725:  0x00006DF1,
	7726:  0x00006DEE,
	7727:  0x00006DE8,
	7728:  0x00006DC6,
	7729:  0x00006DC4,
	7730:  0x00006DAA,
	7731:  0x00006DEC,
	7732:  0x00006DBF,
	7733:  0x00006DE6,
	7734:  0x000070F9,
	7735:  0x00007109,
	7736:  0x0000710A,
	7737:  0x000070FD,
	7738:  0x000070EF,
	7739:  0x0000723D,
	7740:  0x0000727D,
	7741:  0x00007281,
	7742:  0x0000731C,
	7743:  0x0000731B,
	7744:  0x00007316,
	7745:  0x00007313,
	7746:  0x00007319,
	7747:  0x00007387,
	7748:  0x00007405,
	7749:  0x0000740A,
	7750:  0x00007403,
	7751:  0x00007406,
	7752:  0x000073FE,
	7753:  0x0000740D,
	7754:  0x000074E0,
	7755:  0x000074F6,
	7756:  0x000074F7,
	7757:  0x0000751C,
	7758:  0x00007522,
	7759:  0x00007565,
	7760:  0x00007566,
	7761:  0x00007562,
	7762:  0x00007570,
	7763:  0x0000758F,
	7764:  0x000075D4,
	7765:  0x000075D5,
	7766:  0x000075B5,
	7767:  0x000075CA,
	7768:  0x000075CD,
	7769:  0x0000768E,
	7770:  0x000076D4,
	7771:  0x000076D2,
	7772:  0x000076DB,
	7773:  0x00007737,
	7774:  0x0000773E,
	7775:  0x0000773C,
	7776:  0x00007736,
	7777:  0x00007738,
	7778:  0x0000773A,
	7779:  0x0000786B,
	7780:  0x00007843,
	7781:  0x0000784E,
	7782:  0x00007965,
	7783:  0x00007968,
	7784:  0x0000796D,
	7785:  0x000079FB,
	7786:  0x00007A92,
	7787:  0x00007A95,
	7788:  0x00007B20,
	7789:  0x00007B28,
	7790:  0x00007B1B,
	7791:  0x00007B2C,
	7792:  0x00007B26,
	7793:  0x00007B19,
	7794:  0x00007B1E,
	7795:  0x00007B2E,
	7796:  0x00007C92,
	7797:  0x00007C97,
	7798:  0x00007C95,
	7799:  0x00007D46,
	7800:  0x00007D43,
	7801:  0x00007D71,
	7802:  0x00007D2E,
	7803:  0x00007D39,
	7804:  0x00007D3C,
	7805:  0x00007D40,
	7806:  0x00007D30,
	7807:  0x00007D33,
	7808:  0x00007D44,
	7809:  0x00007D2F,
	7810:  0x00007D42,
	7811:  0x00007D32,
	7812:  0x00007D31,
	7813:  0x00007F3D,
	7814:  0x00007F9E,
	7815:  0x00007F9A,
	7816:  0x00007FCC,
	7817:  0x00007FCE,
	7818:  0x00007FD2,
	7819:  0x0000801C,
	7820:  0x0000804A,
	7821:  0x00008046,
	7822:  0x0000812F,
	7823:  0x00008116,
	7824:  0x00008123,
	7825:  0x0000812B,
	7826:  0x00008129,
	7827:  0x00008130,
	7828:  0x00008124,
	7829:  0x00008202,
	7830:  0x00008235,
	7831:  0x00008237,
	7832:  0x00008236,
	7833:  0x00008239,
	7834:  0x0000838E,
	7835:  0x0000839E,
	7836:  0x00008398,
	7837:  0x00008378,
	7838:  0x000083A2,
	7839:  0x00008396,
	7840:  0x000083BD,
	7841:  0x000083AB,
	7842:  0x00008392,
	7843:  0x0000838A,
	7844:  0x00008393,
	7845:  0x00008389,
	7846:  0x000083A0,
	7847:  0x00008377,
	7848:  0x0000837B,
	7849:  0x0000837C,
	7850:  0x00008386,
	7851:  0x000083A7,
	7852:  0x00008655,
	7853:  0x00005F6A,
	7854:  0x000086C7,
	7855:  0x000086C0,
	7856:  0x000086B6,
	7857:  0x000086C4,
	7858:  0x000086B5,
	7859:  0x000086C6,
	7860:  0x000086CB,
	7861:  0x000086B1,
	7862:  0x000086AF,
	7863:  0x000086C9,
	7864:  0x00008853,
	7865:  0x0000889E,
	7866:  0x00008888,
	7867:  0x000088AB,
	7868:  0x00008892,
	7869:  0x00008896,
	7870:  0x0000888D,
	7871:  0x0000888B,
	7872:  0x00008993,
	7873:  0x0000898F,
	7874:  0x00008A2A,
	7875:  0x00008A1D,
	7876:  0x00008A23,
	7877:  0x00008A25,
	7878:  0x00008A31,
	7879:  0x00008A2D,
	7880:  0x00008A1F,
	7881:  0x00008A1B,
	7882:  0x00008A22,
	7883:  0x00008C49,
	7884:  0x00008C5A,
	7885:  0x00008CA9,
	7886:  0x00008CAC,
	7887:  0x00008CAB,
	7888:  0x00008CA8,
	7889:  0x00008CAA,
	7890:  0x00008CA7,
	7891:  0x00008D67,
	7892:  0x00008D66,
	7893:  0x00008DBE,
	7894:  0x00008DBA,
	7895:  0x00008EDB,
	7896:  0x00008EDF,
	7897:  0x00009019,
	7898:  0x0000900D,
	7899:  0x0000901A,
	7900:  0x00009017,
	7901:  0x00009023,
	7902:  0x0000901F,
	7903:  0x0000901D,
	7904:  0x00009010,
	7905:  0x00009015,
	7906:  0x0000901E,
	7907:  0x00009020,
	7908:  0x0000900F,
	7909:  0x00009022,
	7910:  0x00009016,
	7911:  0x0000901B,
	7912:  0x00009014,
	7913:  0x000090E8,
	7914:  0x000090ED,
	7915:  0x000090FD,
	7916:  0x00009157,
	7917:  0x000091CE,
	7918:  0x000091F5,
	7919:  0x000091E6,
	7920:  0x000091E3,
	7921:  0x000091E7,
	7922:  0x000091ED,
	7923:  0x000091E9,
	7924:  0x00009589,
	7925:  0x0000966A,
	7926:  0x00009675,
	7927:  0x00009673,
	7928:  0x00009678,
	7929:  0x00009670,
	7930:  0x00009674,
	7931:  0x00009676,
	7932:  0x00009677,
	7933:  0x0000966C,
	7934:  0x000096C0,
	7935:  0x000096EA,
	7936:  0x000096E9,
	7937:  0x00007AE0,
	7938:  0x00007ADF,
	7939:  0x00009802,
	7940:  0x00009803,
	7941:  0x00009B5A,
	7942:  0x00009CE5,
	7943:  0x00009E75,
	7944:  0x00009E7F,
	7945:  0x00009EA5,
	7946:  0x00009EBB,
	7947:  0x000050A2,
	7948:  0x0000508D,
	7949:  0x00005085,
	7950:  0x00005099,
	7951:  0x00005091,
	7952:  0x00005080,
	7953:  0x00005096,
	7954:  0x00005098,
	7955:  0x0000509A,
	7956:  0x00006700,
	7957:  0x000051F1,
	7958:  0x00005272,
	7959:  0x00005274,
	7960:  0x00005275,
	7961:  0x00005269,
	7962:  0x000052DE,
	7963:  0x000052DD,
	7964:  0x000052DB,
	7965:  0x0000535A,
	7966:  0x000053A5,
	7967:  0x0000557B,
	7968:  0x00005580,
	7969:  0x000055A7,
	7970:  0x0000557C,
	7971:  0x0000558A,
	7972:  0x0000559D,
	7973:  0x00005598,
	7974:  0x00005582,
	7975:  0x0000559C,
	7976:  0x000055AA,
	7977:  0x00005594,
	7978:  0x00005587,
	7979:  0x0000558B,
	7980:  0x00005583,
	7981:  0x000055B3,
	7982:  0x000055AE,
	7983:  0x0000559F,
	7984:  0x0000553E,
	7985:  0x000055B2,
	7986:  0x0000559A,
	7987:  0x000055BB,
	7988:  0x000055AC,
	7989:  0x000055B1,
	7990:  0x0000557E,
	7991:  0x00005589,
	7992:  0x000055AB,
	7993:  0x00005599,
	7994:  0x0000570D,
	7995:  0x0000582F,
	7996:  0x0000582A,
	7997:  0x00005834,
	7998:  0x00005824,
	7999:  0x00005830,
	8000:  0x00005831,
	8001:  0x00005821,
	8002:  0x0000581D,
	8003:  0x00005820,
	8004:  0x000058F9,
	8005:  0x000058FA,
	8006:  0x00005960,
	8007:  0x00005A77,
	8008:  0x00005A9A,
	8009:  0x00005A7F,
	8010:  0x00005A92,
	8011:  0x00005A9B,
	8012:  0x00005AA7,
	8013:  0x00005B73,
	8014:  0x00005B71,
	8015:  0x00005BD2,
	8016:  0x00005BCC,
	8017:  0x00005BD3,
	8018:  0x00005BD0,
	8019:  0x00005C0A,
	8020:  0x00005C0B,
	8021:  0x00005C31,
	8022:  0x00005D4C,
	8023:  0x00005D50,
	8024:  0x00005D34,
	8025:  0x00005D47,
	8026:  0x00005DFD,
	8027:  0x00005E45,
	8028:  0x00005E3D,
	8029:  0x00005E40,
	8030:  0x00005E43,
	8031:  0x00005E7E,
	8032:  0x00005ECA,
	8033:  0x00005EC1,
	8034:  0x00005EC2,
	8035:  0x00005EC4,
	8036:  0x00005F3C,
	8037:  0x00005F6D,
	8038:  0x00005FA9,
	8039:  0x00005FAA,
	8040:  0x00005FA8,
	8041:  0x000060D1,
	8042:  0x000060E1,
	8043:  0x000060B2,
	8044:  0x000060B6,
	8045:  0x000060E0,
	8046:  0x0000611C,
	8047:  0x00006123,
	8048:  0x000060FA,
	8049:  0x00006115,
	8050:  0x000060F0,
	8051:  0x000060FB,
	8052:  0x000060F4,
	8053:  0x00006168,
	8054:  0x000060F1,
	8055:  0x0000610E,
	8056:  0x000060F6,
	8057:  0x00006109,
	8058:  0x00006100,
	8059:  0x00006112,
	8060:  0x0000621F,
	8061:  0x00006249,
	8062:  0x000063A3,
	8063:  0x0000638C,
	8064:  0x000063CF,
	8065:  0x000063C0,
	8066:  0x000063E9,
	8067:  0x000063C9,
	8068:  0x000063C6,
	8069:  0x000063CD,
	8070:  0x000063D2,
	8071:  0x000063E3,
	8072:  0x000063D0,
	8073:  0x000063E1,
	8074:  0x000063D6,
	8075:  0x000063ED,
	8076:  0x000063EE,
	8077:  0x00006376,
	8078:  0x000063F4,
	8079:  0x000063EA,
	8080:  0x000063DB,
	8081:  0x00006452,
	8082:  0x000063DA,
	8083:  0x000063F9,
	8084:  0x0000655E,
	8085:  0x00006566,
	8086:  0x00006562,
	8087:  0x00006563,
	8088:  0x00006591,
	8089:  0x00006590,
	8090:  0x000065AF,
	8091:  0x0000666E,
	8092:  0x00006670,
	8093:  0x00006674,
	8094:  0x00006676,
	8095:  0x0000666F,
	8096:  0x00006691,
	8097:  0x0000667A,
	8098:  0x0000667E,
	8099:  0x00006677,
	8100:  0x000066FE,
	8101:  0x000066FF,
	8102:  0x0000671F,
	8103:  0x0000671D,
	8104:  0x000068FA,
	8105:  0x000068D5,
	8106:  0x000068E0,
	8107:  0x000068D8,
	8108:  0x000068D7,
	8109:  0x00006905,
	8110:  0x000068DF,
	8111:  0x000068F5,
	8112:  0x000068EE,
	8113:  0x000068E7,
	8114:  0x000068F9,
	8115:  0x000068D2,
	8116:  0x000068F2,
	8117:  0x000068E3,
	8118:  0x000068CB,
	8119:  0x000068CD,
	8120:  0x0000690D,
	8121:  0x00006912,
	8122:  0x0000690E,
	8123:  0x000068C9,
	8124:  0x000068DA,
	8125:  0x0000696E,
	8126:  0x000068FB,
	8127:  0x00006B3E,
	8128:  0x00006B3A,
	8129:  0x00006B3D,
	8130:  0x00006B98,
	8131:  0x00006B96,
	8132:  0x00006BBC,
	8133:  0x00006BEF,
	8134:  0x00006C2E,
	8135:  0x00006C2F,
	8136:  0x00006C2C,
	8137:  0x00006E2F,
	8138:  0x00006E38,
	8139:  0x00006E54,
	8140:  0x00006E21,
	8141:  0x00006E32,
	8142:  0x00006E67,
	8143:  0x00006E4A,
	8144:  0x00006E20,
	8145:  0x00006E25,
	8146:  0x00006E23,
	8147:  0x00006E1B,
	8148:  0x00006E5B,
	8149:  0x00006E58,
	8150:  0x00006E24,
	8151:  0x00006E56,
	8152:  0x00006E6E,
	8153:  0x00006E2D,
	8154:  0x00006E26,
	8155:  0x00006E6F,
	8156:  0x00006E34,
	8157:  0x00006E4D,
	8158:  0x00006E3A,
	8159:  0x00006E2C,
	8160:  0x00006E43,
	8161:  0x00006E1D,
	8162:  0x00006E3E,
	8163:  0x00006ECB,
	8164:  0x00006E89,
	8165:  0x00006E19,
	8166:  0x00006E4E,
	8167:  0x00006E63,
	8168:  0x00006E44,
	8169:  0x00006E72,
	8170:  0x00006E69,
	8171:  0x00006E5F,
	8172:  0x00007119,
	8173:  0x0000711A,
	8174:  0x00007126,
	8175:  0x00007130,
	8176:  0x00007121,
	8177:  0x00007136,
	8178:  0x0000716E,
	8179:  0x0000711C,
	8180:  0x0000724C,
	8181:  0x00007284,
	8182:  0x00007280,
	8183:  0x00007336,
	8184:  0x00007325,
	8185:  0x00007334,
	8186:  0x00007329,
	8187:  0x0000743A,
	8188:  0x0000742A,
	8189:  0x00007433,
	8190:  0x00007422,
	8191:  0x00007425,
	8192:  0x00007435,
	8193:  0x00007436,
	8194:  0x00007434,
	8195:  0x0000742F,
	8196:  0x0000741B,
	8197:  0x00007426,
	8198:  0x00007428,
	8199:  0x00007525,
	8200:  0x00007526,
	8201:  0x0000756B,
	8202:  0x0000756A,
	8203:  0x000075E2,
	8204:  0x000075DB,
	8205:  0x000075E3,
	8206:  0x000075D9,
	8207:  0x000075D8,
	8208:  0x000075DE,
	8209:  0x000075E0,
	8210:  0x0000767B,
	8211:  0x0000767C,
	8212:  0x00007696,
	8213:  0x00007693,
	8214:  0x000076B4,
	8215:  0x000076DC,
	8216:  0x0000774F,
	8217:  0x000077ED,
	8218:  0x0000785D,
	8219:  0x0000786C,
	8220:  0x0000786F,
	8221:  0x00007A0D,
	8222:  0x00007A08,
	8223:  0x00007A0B,
	8224:  0x00007A05,
	8225:  0x00007A00,
	8226:  0x00007A98,
	8227:  0x00007A97,
	8228:  0x00007A96,
	8229:  0x00007AE5,
	8230:  0x00007AE3,
	8231:  0x00007B49,
	8232:  0x00007B56,
	8233:  0x00007B46,
	8234:  0x00007B50,
	8235:  0x00007B52,
	8236:  0x00007B54,
	8237:  0x00007B4D,
	8238:  0x00007B4B,
	8239:  0x00007B4F,
	8240:  0x00007B51,
	8241:  0x00007C9F,
	8242:  0x00007CA5,
	8243:  0x00007D5E,
	8244:  0x00007D50,
	8245:  0x00007D68,
	8246:  0x00007D55,
	8247:  0x00007D2B,
	8248:  0x00007D6E,
	8249:  0x00007D72,
	8250:  0x00007D61,
	8251:  0x00007D66,
	8252:  0x00007D62,
	8253:  0x00007D70,
	8254:  0x00007D73,
	8255:  0x00005584,
	8256:  0x00007FD4,
	8257:  0x00007FD5,
	8258:  0x0000800B,
	8259:  0x00008052,
	8260:  0x00008085,
	8261:  0x00008155,
	8262:  0x00008154,
	8263:  0x0000814B,
	8264:  0x00008151,
	8265:  0x0000814E,
	8266:  0x00008139,
	8267:  0x00008146,
	8268:  0x0000813E,
	8269:  0x0000814C,
	8270:  0x00008153,
	8271:  0x00008174,
	8272:  0x00008212,
	8273:  0x0000821C,
	8274:  0x000083E9,
	8275:  0x00008403,
	8276:  0x000083F8,
	8277:  0x0000840D,
	8278:  0x000083E0,
	8279:  0x000083C5,
	8280:  0x0000840B,
	8281:  0x000083C1,
	8282:  0x000083EF,
	8283:  0x000083F1,
	8284:  0x000083F4,
	8285:  0x00008457,
	8286:  0x0000840A,
	8287:  0x000083F0,
	8288:  0x0000840C,
	8289:  0x000083CC,
	8290:  0x000083FD,
	8291:  0x000083F2,
	8292:  0x000083CA,
	8293:  0x00008438,
	8294:  0x0000840E,
	8295:  0x00008404,
	8296:  0x000083DC,
	8297:  0x00008407,
	8298:  0x000083D4,
	8299:  0x000083DF,
	8300:  0x0000865B,
	8301:  0x000086DF,
	8302:  0x000086D9,
	8303:  0x000086ED,
	8304:  0x000086D4,
	8305:  0x000086DB,
	8306:  0x000086E4,
	8307:  0x000086D0,
	8308:  0x000086DE,
	8309:  0x00008857,
	8310:  0x000088C1,
	8311:  0x000088C2,
	8312:  0x000088B1,
	8313:  0x00008983,
	8314:  0x00008996,
	8315:  0x00008A3B,
	8316:  0x00008A60,
	8317:  0x00008A55,
	8318:  0x00008A5E,
	8319:  0x00008A3C,
	8320:  0x00008A41,
	8321:  0x00008A54,
	8322:  0x00008A5B,
	8323:  0x00008A50,
	8324:  0x00008A46,
	8325:  0x00008A34,
	8326:  0x00008A3A,
	8327:  0x00008A36,
	8328:  0x00008A56,
	8329:  0x00008C61,
	8330:  0x00008C82,
	8331:  0x00008CAF,
	8332:  0x00008CBC,
	8333:  0x00008CB3,
	8334:  0x00008CBD,
	8335:  0x00008CC1,
	8336:  0x00008CBB,
	8337:  0x00008CC0,
	8338:  0x00008CB4,
	8339:  0x00008CB7,
	8340:  0x00008CB6,
	8341:  0x00008CBF,
	8342:  0x00008CB8,
	8343:  0x00008D8A,
	8344:  0x00008D85,
	8345:  0x00008D81,
	8346:  0x00008DCE,
	8347:  0x00008DDD,
	8348:  0x00008DCB,
	8349:  0x00008DDA,
	8350:  0x00008DD1,
	8351:  0x00008DCC,
	8352:  0x00008DDB,
	8353:  0x00008DC6,
	8354:  0x00008EFB,
	8355:  0x00008EF8,
	8356:  0x00008EFC,
	8357:  0x00008F9C,
	8358:  0x0000902E,
	8359:  0x00009035,
	8360:  0x00009031,
	8361:  0x00009038,
	8362:  0x00009032,
	8363:  0x00009036,
	8364:  0x00009102,
	8365:  0x000090F5,
	8366:  0x00009109,
	8367:  0x000090FE,
	8368:  0x00009163,
	8369:  0x00009165,
	8370:  0x000091CF,
	8371:  0x00009214,
	8372:  0x00009215,
	8373:  0x00009223,
	8374:  0x00009209,
	8375:  0x0000921E,
	8376:  0x0000920D,
	8377:  0x00009210,
	8378:  0x00009207,
	8379:  0x00009211,
	8380:  0x00009594,
	8381:  0x0000958F,
	8382:  0x0000958B,
	8383:  0x00009591,
	8384:  0x00009593,
	8385:  0x00009592,
	8386:  0x0000958E,
	8387:  0x0000968A,
	8388:  0x0000968E,
	8389:  0x0000968B,
	8390:  0x0000967D,
	8391:  0x00009685,
	8392:  0x00009686,
	8393:  0x0000968D,
	8394:  0x00009672,
	8395:  0x00009684,
	8396:  0x000096C1,
	8397:  0x000096C5,
	8398:  0x000096C4,
	8399:  0x000096C6,
	8400:  0x000096C7,
	8401:  0x000096EF,
	8402:  0x000096F2,
	8403:  0x000097CC,
	8404:  0x00009805,
	8405:  0x00009806,
	8406:  0x00009808,
	8407:  0x000098E7,
	8408:  0x000098EA,
	8409:  0x000098EF,
	8410:  0x000098E9,
	8411:  0x000098F2,
	8412:  0x000098ED,
	8413:  0x000099AE,
	8414:  0x000099AD,
	8415:  0x00009EC3,
	8416:  0x00009ECD,
	8417:  0x00009ED1,
	8418:  0x00004E82,
	8419:  0x000050AD,
	8420:  0x000050B5,
	8421:  0x000050B2,
	8422:  0x000050B3,
	8423:  0x000050C5,
	8424:  0x000050BE,
	8425:  0x000050AC,
	8426:  0x000050B7,
	8427:  0x000050BB,
	8428:  0x000050AF,
	8429:  0x000050C7,
	8430:  0x0000527F,
	8431:  0x00005277,
	8432:  0x0000527D,
	8433:  0x000052DF,
	8434:  0x000052E6,
	8435:  0x000052E4,
	8436:  0x000052E2,
	8437:  0x000052E3,
	8438:  0x0000532F,
	8439:  0x000055DF,
	8440:  0x000055E8,
	8441:  0x000055D3,
	8442:  0x000055E6,
	8443:  0x000055CE,
	8444:  0x000055DC,
	8445:  0x000055C7,
	8446:  0x000055D1,
	8447:  0x000055E3,
	8448:  0x000055E4,
	8449:  0x000055EF,
	8450:  0x000055DA,
	8451:  0x000055E1,
	8452:  0x000055C5,
	8453:  0x000055C6,
	8454:  0x000055E5,
	8455:  0x000055C9,
	8456:  0x00005712,
	8457:  0x00005713,
	8458:  0x0000585E,
	8459:  0x00005851,
	8460:  0x00005858,
	8461:  0x00005857,
	8462:  0x0000585A,
	8463:  0x00005854,
	8464:  0x0000586B,
	8465:  0x0000584C,
	8466:  0x0000586D,
	8467:  0x0000584A,
	8468:  0x00005862,
	8469:  0x00005852,
	8470:  0x0000584B,
	8471:  0x00005967,
	8472:  0x00005AC1,
	8473:  0x00005AC9,
	8474:  0x00005ACC,
	8475:  0x00005ABE,
	8476:  0x00005ABD,
	8477:  0x00005ABC,
	8478:  0x00005AB3,
	8479:  0x00005AC2,
	8480:  0x00005AB2,
	8481:  0x00005D69,
	8482:  0x00005D6F,
	8483:  0x00005E4C,
	8484:  0x00005E79,
	8485:  0x00005EC9,
	8486:  0x00005EC8,
	8487:  0x00005F12,
	8488:  0x00005F59,
	8489:  0x00005FAC,
	8490:  0x00005FAE,
	8491:  0x0000611A,
	8492:  0x0000610F,
	8493:  0x00006148,
	8494:  0x0000611F,
	8495:  0x000060F3,
	8496:  0x0000611B,
	8497:  0x000060F9,
	8498:  0x00006101,
	8499:  0x00006108,
	8500:  0x0000614E,
	8501:  0x0000614C,
	8502:  0x00006144,
	8503:  0x0000614D,
	8504:  0x0000613E,
	8505:  0x00006134,
	8506:  0x00006127,
	8507:  0x0000610D,
	8508:  0x00006106,
	8509:  0x00006137,
	8510:  0x00006221,
	8511:  0x00006222,
	8512:  0x00006413,
	8513:  0x0000643E,
	8514:  0x0000641E,
	8515:  0x0000642A,
	8516:  0x0000642D,
	8517:  0x0000643D,
	8518:  0x0000642C,
	8519:  0x0000640F,
	8520:  0x0000641C,
	8521:  0x00006414,
	8522:  0x0000640D,
	8523:  0x00006436,
	8524:  0x00006416,
	8525:  0x00006417,
	8526:  0x00006406,
	8527:  0x0000656C,
	8528:  0x0000659F,
	8529:  0x000065B0,
	8530:  0x00006697,
	8531:  0x00006689,
	8532:  0x00006687,
	8533:  0x00006688,
	8534:  0x00006696,
	8535:  0x00006684,
	8536:  0x00006698,
	8537:  0x0000668D,
	8538:  0x00006703,
	8539:  0x00006994,
	8540:  0x0000696D,
	8541:  0x0000695A,
	8542:  0x00006977,
	8543:  0x00006960,
	8544:  0x00006954,
	8545:  0x00006975,
	8546:  0x00006930,
	8547:  0x00006982,
	8548:  0x0000694A,
	8549:  0x00006968,
	8550:  0x0000696B,
	8551:  0x0000695E,
	8552:  0x00006953,
	8553:  0x00006979,
	8554:  0x00006986,
	8555:  0x0000695D,
	8556:  0x00006963,
	8557:  0x0000695B,
	8558:  0x00006B47,
	8559:  0x00006B72,
	8560:  0x00006BC0,
	8561:  0x00006BBF,
	8562:  0x00006BD3,
	8563:  0x00006BFD,
	8564:  0x00006EA2,
	8565:  0x00006EAF,
	8566:  0x00006ED3,
	8567:  0x00006EB6,
	8568:  0x00006EC2,
	8569:  0x00006E90,
	8570:  0x00006E9D,
	8571:  0x00006EC7,
	8572:  0x00006EC5,
	8573:  0x00006EA5,
	8574:  0x00006E98,
	8575:  0x00006EBC,
	8576:  0x00006EBA,
	8577:  0x00006EAB,
	8578:  0x00006ED1,
	8579:  0x00006E96,
	8580:  0x00006E9C,
	8581:  0x00006EC4,
	8582:  0x00006ED4,
	8583:  0x00006EAA,
	8584:  0x00006EA7,
	8585:  0x00006EB4,
	8586:  0x0000714E,
	8587:  0x00007159,
	8588:  0x00007169,
	8589:  0x00007164,
	8590:  0x00007149,
	8591:  0x00007167,
	8592:  0x0000715C,
	8593:  0x0000716C,
	8594:  0x00007166,
	8595:  0x0000714C,
	8596:  0x00007165,
	8597:  0x0000715E,
	8598:  0x00007146,
	8599:  0x00007168,
	8600:  0x00007156,
	8601:  0x0000723A,
	8602:  0x00007252,
	8603:  0x00007337,
	8604:  0x00007345,
	8605:  0x0000733F,
	8606:  0x0000733E,
	8607:  0x0000746F,
	8608:  0x0000745A,
	8609:  0x00007455,
	8610:  0x0000745F,
	8611:  0x0000745E,
	8612:  0x00007441,
	8613:  0x0000743F,
	8614:  0x00007459,
	8615:  0x0000745B,
	8616:  0x0000745C,
	8617:  0x00007576,
	8618:  0x00007578,
	8619:  0x00007600,
	8620:  0x000075F0,
	8621:  0x00007601,
	8622:  0x000075F2,
	8623:  0x000075F1,
	8624:  0x000075FA,
	8625:  0x000075FF,
	8626:  0x000075F4,
	8627:  0x000075F3,
	8628:  0x000076DE,
	8629:  0x000076DF,
	8630:  0x0000775B,
	8631:  0x0000776B,
	8632:  0x00007766,
	8633:  0x0000775E,
	8634:  0x00007763,
	8635:  0x00007779,
	8636:  0x0000776A,
	8637:  0x0000776C,
	8638:  0x0000775C,
	8639:  0x00007765,
	8640:  0x00007768,
	8641:  0x00007762,
	8642:  0x000077EE,
	8643:  0x0000788E,
	8644:  0x000078B0,
	8645:  0x00007897,
	8646:  0x00007898,
	8647:  0x0000788C,
	8648:  0x00007889,
	8649:  0x0000787C,
	8650:  0x00007891,
	8651:  0x00007893,
	8652:  0x0000787F,
	8653:  0x0000797A,
	8654:  0x0000797F,
	8655:  0x00007981,
	8656:  0x0000842C,
	8657:  0x000079BD,
	8658:  0x00007A1C,
	8659:  0x00007A1A,
	8660:  0x00007A20,
	8661:  0x00007A14,
	8662:  0x00007A1F,
	8663:  0x00007A1E,
	8664:  0x00007A9F,
	8665:  0x00007AA0,
	8666:  0x00007B77,
	8667:  0x00007BC0,
	8668:  0x00007B60,
	8669:  0x00007B6E,
	8670:  0x00007B67,
	8671:  0x00007CB1,
	8672:  0x00007CB3,
	8673:  0x00007CB5,
	8674:  0x00007D93,
	8675:  0x00007D79,
	8676:  0x00007D91,
	8677:  0x00007D81,
	8678:  0x00007D8F,
	8679:  0x00007D5B,
	8680:  0x00007F6E,
	8681:  0x00007F69,
	8682:  0x00007F6A,
	8683:  0x00007F72,
	8684:  0x00007FA9,
	8685:  0x00007FA8,
	8686:  0x00007FA4,
	8687:  0x00008056,
	8688:  0x00008058,
	8689:  0x00008086,
	8690:  0x00008084,
	8691:  0x00008171,
	8692:  0x00008170,
	8693:  0x00008178,
	8694:  0x00008165,
	8695:  0x0000816E,
	8696:  0x00008173,
	8697:  0x0000816B,
	8698:  0x00008179,
	8699:  0x0000817A,
	8700:  0x00008166,
	8701:  0x00008205,
	8702:  0x00008247,
	8703:  0x00008482,
	8704:  0x00008477,
	8705:  0x0000843D,
	8706:  0x00008431,
	8707:  0x00008475,
	8708:  0x00008466,
	8709:  0x0000846B,
	8710:  0x00008449,
	8711:  0x0000846C,
	8712:  0x0000845B,
	8713:  0x0000843C,
	8714:  0x00008435,
	8715:  0x00008461,
	8716:  0x00008463,
	8717:  0x00008469,
	8718:  0x0000846D,
	8719:  0x00008446,
	8720:  0x0000865E,
	8721:  0x0000865C,
	8722:  0x0000865F,
	8723:  0x000086F9,
	8724:  0x00008713,
	8725:  0x00008708,
	8726:  0x00008707,
	8727:  0x00008700,
	8728:  0x000086FE,
	8729:  0x000086FB,
	8730:  0x00008702,
	8731:  0x00008703,
	8732:  0x00008706,
	8733:  0x0000870A,
	8734:  0x00008859,
	8735:  0x000088DF,
	8736:  0x000088D4,
	8737:  0x000088D9,
	8738:  0x000088DC,
	8739:  0x000088D8,
	8740:  0x000088DD,
	8741:  0x000088E1,
	8742:  0x000088CA,
	8743:  0x000088D5,
	8744:  0x000088D2,
	8745:  0x0000899C,
	8746:  0x000089E3,
	8747:  0x00008A6B,
	8748:  0x00008A72,
	8749:  0x00008A73,
	8750:  0x00008A66,
	8751:  0x00008A69,
	8752:  0x00008A70,
	8753:  0x00008A87,
	8754:  0x00008A7C,
	8755:  0x00008A63,
	8756:  0x00008AA0,
	8757:  0x00008A71,
	8758:  0x00008A85,
	8759:  0x00008A6D,
	8760:  0x00008A62,
	8761:  0x00008A6E,
	8762:  0x00008A6C,
	8763:  0x00008A79,
	8764:  0x00008A7B,
	8765:  0x00008A3E,
	8766:  0x00008A68,
	8767:  0x00008C62,
	8768:  0x00008C8A,
	8769:  0x00008C89,
	8770:  0x00008CCA,
	8771:  0x00008CC7,
	8772:  0x00008CC8,
	8773:  0x00008CC4,
	8774:  0x00008CB2,
	8775:  0x00008CC3,
	8776:  0x00008CC2,
	8777:  0x00008CC5,
	8778:  0x00008DE1,
	8779:  0x00008DDF,
	8780:  0x00008DE8,
	8781:  0x00008DEF,
	8782:  0x00008DF3,
	8783:  0x00008DFA,
	8784:  0x00008DEA,
	8785:  0x00008DE4,
	8786:  0x00008DE6,
	8787:  0x00008EB2,
	8788:  0x00008F03,
	8789:  0x00008F09,
	8790:  0x00008EFE,
	8791:  0x00008F0A,
	8792:  0x00008F9F,
	8793:  0x00008FB2,
	8794:  0x0000904B,
	8795:  0x0000904A,
	8796:  0x00009053,
	8797:  0x00009042,
	8798:  0x00009054,
	8799:  0x0000903C,
	8800:  0x00009055,
	8801:  0x00009050,
	8802:  0x00009047,
	8803:  0x0000904F,
	8804:  0x0000904E,
	8805:  0x0000904D,
	8806:  0x00009051,
	8807:  0x0000903E,
	8808:  0x00009041,
	8809:  0x00009112,
	8810:  0x00009117,
	8811:  0x0000916C,
	8812:  0x0000916A,
	8813:  0x00009169,
	8814:  0x000091C9,
	8815:  0x00009237,
	8816:  0x00009257,
	8817:  0x00009238,
	8818:  0x0000923D,
	8819:  0x00009240,
	8820:  0x0000923E,
	8821:  0x0000925B,
	8822:  0x0000924B,
	8823:  0x00009264,
	8824:  0x00009251,
	8825:  0x00009234,
	8826:  0x00009249,
	8827:  0x0000924D,
	8828:  0x00009245,
	8829:  0x00009239,
	8830:  0x0000923F,
	8831:  0x0000925A,
	8832:  0x00009598,
	8833:  0x00009698,
	8834:  0x00009694,
	8835:  0x00009695,
	8836:  0x000096CD,
	8837:  0x000096CB,
	8838:  0x000096C9,
	8839:  0x000096CA,
	8840:  0x000096F7,
	8841:  0x000096FB,
	8842:  0x000096F9,
	8843:  0x000096F6,
	8844:  0x00009756,
	8845:  0x00009774,
	8846:  0x00009776,
	8847:  0x00009810,
	8848:  0x00009811,
	8849:  0x00009813,
	8850:  0x0000980A,
	8851:  0x00009812,
	8852:  0x0000980C,
	8853:  0x000098FC,
	8854:  0x000098F4,
	8855:  0x000098FD,
	8856:  0x000098FE,
	8857:  0x000099B3,
	8858:  0x000099B1,
	8859:  0x000099B4,
	8860:  0x00009AE1,
	8861:  0x00009CE9,
	8862:  0x00009E82,
	8863:  0x00009F0E,
	8864:  0x00009F13,
	8865:  0x00009F20,
	8866:  0x000050E7,
	8867:  0x000050EE,
	8868:  0x000050E5,
	8869:  0x000050D6,
	8870:  0x000050ED,
	8871:  0x000050DA,
	8872:  0x000050D5,
	8873:  0x000050CF,
	8874:  0x000050D1,
	8875:  0x000050F1,
	8876:  0x000050CE,
	8877:  0x000050E9,
	8878:  0x00005162,
	8879:  0x000051F3,
	8880:  0x00005283,
	8881:  0x00005282,
	8882:  0x00005331,
	8883:  0x000053AD,
	8884:  0x000055FE,
	8885:  0x00005600,
	8886:  0x0000561B,
	8887:  0x00005617,
	8888:  0x000055FD,
	8889:  0x00005614,
	8890:  0x00005606,
	8891:  0x00005609,
	8892:  0x0000560D,
	8893:  0x0000560E,
	8894:  0x000055F7,
	8895:  0x00005616,
	8896:  0x0000561F,
	8897:  0x00005608,
	8898:  0x00005610,
	8899:  0x000055F6,
	8900:  0x00005718,
	8901:  0x00005716,
	8902:  0x00005875,
	8903:  0x0000587E,
	8904:  0x00005883,
	8905:  0x00005893,
	8906:  0x0000588A,
	8907:  0x00005879,
	8908:  0x00005885,
	8909:  0x0000587D,
	8910:  0x000058FD,
	8911:  0x00005925,
	8912:  0x00005922,
	8913:  0x00005924,
	8914:  0x0000596A,
	8915:  0x00005969,
	8916:  0x00005AE1,
	8917:  0x00005AE6,
	8918:  0x00005AE9,
	8919:  0x00005AD7,
	8920:  0x00005AD6,
	8921:  0x00005AD8,
	8922:  0x00005AE3,
	8923:  0x00005B75,
	8924:  0x00005BDE,
	8925:  0x00005BE7,
	8926:  0x00005BE1,
	8927:  0x00005BE5,
	8928:  0x00005BE6,
	8929:  0x00005BE8,
	8930:  0x00005BE2,
	8931:  0x00005BE4,
	8932:  0x00005BDF,
	8933:  0x00005C0D,
	8934:  0x00005C62,
	8935:  0x00005D84,
	8936:  0x00005D87,
	8937:  0x00005E5B,
	8938:  0x00005E63,
	8939:  0x00005E55,
	8940:  0x00005E57,
	8941:  0x00005E54,
	8942:  0x00005ED3,
	8943:  0x00005ED6,
	8944:  0x00005F0A,
	8945:  0x00005F46,
	8946:  0x00005F70,
	8947:  0x00005FB9,
	8948:  0x00006147,
	8949:  0x0000613F,
	8950:  0x0000614B,
	8951:  0x00006177,
	8952:  0x00006162,
	8953:  0x00006163,
	8954:  0x0000615F,
	8955:  0x0000615A,
	8956:  0x00006158,
	8957:  0x00006175,
	8958:  0x0000622A,
	8959:  0x00006487,
	8960:  0x00006458,
	8961:  0x00006454,
	8962:  0x000064A4,
	8963:  0x00006478,
	8964:  0x0000645F,
	8965:  0x0000647A,
	8966:  0x00006451,
	8967:  0x00006467,
	8968:  0x00006434,
	8969:  0x0000646D,
	8970:  0x0000647B,
	8971:  0x00006572,
	8972:  0x000065A1,
	8973:  0x000065D7,
	8974:  0x000065D6,
	8975:  0x000066A2,
	8976:  0x000066A8,
	8977:  0x0000669D,
	8978:  0x0000699C,
	8979:  0x000069A8,
	8980:  0x00006995,
	8981:  0x000069C1,
	8982:  0x000069AE,
	8983:  0x000069D3,
	8984:  0x000069CB,
	8985:  0x0000699B,
	8986:  0x000069B7,
	8987:  0x000069BB,
	8988:  0x000069AB,
	8989:  0x000069B4,
	8990:  0x000069D0,
	8991:  0x000069CD,
	8992:  0x000069AD,
	8993:  0x000069CC,
	8994:  0x000069A6,
	8995:  0x000069C3,
	8996:  0x000069A3,
	8997:  0x00006B49,
	8998:  0x00006B4C,
	8999:  0x00006C33,
	9000:  0x00006F33,
	9001:  0x00006F14,
	9002:  0x00006EFE,
	9003:  0x00006F13,
	9004:  0x00006EF4,
	9005:  0x00006F29,
	9006:  0x00006F3E,
	9007:  0x00006F20,
	9008:  0x00006F2C,
	9009:  0x00006F0F,
	9010:  0x00006F02,
	9011:  0x00006F22,
	9012:  0x00006EFF,
	9013:  0x00006EEF,
	9014:  0x00006F06,
	9015:  0x00006F31,
	9016:  0x00006F38,
	9017:  0x00006F32,
	9018:  0x00006F23,
	9019:  0x00006F15,
	9020:  0x00006F2B,
	9021:  0x00006F2F,
	9022:  0x00006F88,
	9023:  0x00006F2A,
	9024:  0x00006EEC,
	9025:  0x00006F01,
	9026:  0x00006EF2,
	9027:  0x00006ECC,
	9028:  0x00006EF7,
	9029:  0x00007194,
	9030:  0x00007199,
	9031:  0x0000717D,
	9032:  0x0000718A,
	9033:  0x00007184,
	9034:  0x00007192,
	9035:  0x0000723E,
	9036:  0x00007292,
	9037:  0x00007296,
	9038:  0x00007344,
	9039:  0x00007350,
	9040:  0x00007464,
	9041:  0x00007463,
	9042:  0x0000746A,
	9043:  0x00007470,
	9044:  0x0000746D,
	9045:  0x00007504,
	9046:  0x00007591,
	9047:  0x00007627,
	9048:  0x0000760D,
	9049:  0x0000760B,
	9050:  0x00007609,
	9051:  0x00007613,
	9052:  0x000076E1,
	9053:  0x000076E3,
	9054:  0x00007784,
	9055:  0x0000777D,
	9056:  0x0000777F,
	9057:  0x00007761,
	9058:  0x000078C1,
	9059:  0x0000789F,
	9060:  0x000078A7,
	9061:  0x000078B3,
	9062:  0x000078A9,
	9063:  0x000078A3,
	9064:  0x0000798E,
	9065:  0x0000798F,
	9066:  0x0000798D,
	9067:  0x00007A2E,
	9068:  0x00007A31,
	9069:  0x00007AAA,
	9070:  0x00007AA9,
	9071:  0x00007AED,
	9072:  0x00007AEF,
	9073:  0x00007BA1,
	9074:  0x00007B95,
	9075:  0x00007B8B,
	9076:  0x00007B75,
	9077:  0x00007B97,
	9078:  0x00007B9D,
	9079:  0x00007B94,
	9080:  0x00007B8F,
	9081:  0x00007BB8,
	9082:  0x00007B87,
	9083:  0x00007B84,
	9084:  0x00007CB9,
	9085:  0x00007CBD,
	9086:  0x00007CBE,
	9087:  0x00007DBB,
	9088:  0x00007DB0,
	9089:  0x00007D9C,
	9090:  0x00007DBD,
	9091:  0x00007DBE,
	9092:  0x00007DA0,
	9093:  0x00007DCA,
	9094:  0x00007DB4,
	9095:  0x00007DB2,
	9096:  0x00007DB1,
	9097:  0x00007DBA,
	9098:  0x00007DA2,
	9099:  0x00007DBF,
	9100:  0x00007DB5,
	9101:  0x00007DB8,
	9102:  0x00007DAD,
	9103:  0x00007DD2,
	9104:  0x00007DC7,
	9105:  0x00007DAC,
	9106:  0x00007F70,
	9107:  0x00007FE0,
	9108:  0x00007FE1,
	9109:  0x00007FDF,
	9110:  0x0000805E,
	9111:  0x0000805A,
	9112:  0x00008087,
	9113:  0x00008150,
	9114:  0x00008180,
	9115:  0x0000818F,
	9116:  0x00008188,
	9117:  0x0000818A,
	9118:  0x0000817F,
	9119:  0x00008182,
	9120:  0x000081E7,
	9121:  0x000081FA,
	9122:  0x00008207,
	9123:  0x00008214,
	9124:  0x0000821E,
	9125:  0x0000824B,
	9126:  0x000084C9,
	9127:  0x000084BF,
	9128:  0x000084C6,
	9129:  0x000084C4,
	9130:  0x00008499,
	9131:  0x0000849E,
	9132:  0x000084B2,
	9133:  0x0000849C,
	9134:  0x000084CB,
	9135:  0x000084B8,
	9136:  0x000084C0,
	9137:  0x000084D3,
	9138:  0x00008490,
	9139:  0x000084BC,
	9140:  0x000084D1,
	9141:  0x000084CA,
	9142:  0x0000873F,
	9143:  0x0000871C,
	9144:  0x0000873B,
	9145:  0x00008722,
	9146:  0x00008725,
	9147:  0x00008734,
	9148:  0x00008718,
	9149:  0x00008755,
	9150:  0x00008737,
	9151:  0x00008729,
	9152:  0x000088F3,
	9153:  0x00008902,
	9154:  0x000088F4,
	9155:  0x000088F9,
	9156:  0x000088F8,
	9157:  0x000088FD,
	9158:  0x000088E8,
	9159:  0x0000891A,
	9160:  0x000088EF,
	9161:  0x00008AA6,
	9162:  0x00008A8C,
	9163:  0x00008A9E,
	9164:  0x00008AA3,
	9165:  0x00008A8D,
	9166:  0x00008AA1,
	9167:  0x00008A93,
	9168:  0x00008AA4,
	9169:  0x00008AAA,
	9170:  0x00008AA5,
	9171:  0x00008AA8,
	9172:  0x00008A98,
	9173:  0x00008A91,
	9174:  0x00008A9A,
	9175:  0x00008AA7,
	9176:  0x00008C6A,
	9177:  0x00008C8D,
	9178:  0x00008C8C,
	9179:  0x00008CD3,
	9180:  0x00008CD1,
	9181:  0x00008CD2,
	9182:  0x00008D6B,
	9183:  0x00008D99,
	9184:  0x00008D95,
	9185:  0x00008DFC,
	9186:  0x00008F14,
	9187:  0x00008F12,
	9188:  0x00008F15,
	9189:  0x00008F13,
	9190:  0x00008FA3,
	9191:  0x00009060,
	9192:  0x00009058,
	9193:  0x0000905C,
	9194:  0x00009063,
	9195:  0x00009059,
	9196:  0x0000905E,
	9197:  0x00009062,
	9198:  0x0000905D,
	9199:  0x0000905B,
	9200:  0x00009119,
	9201:  0x00009118,
	9202:  0x0000911E,
	9203:  0x00009175,
	9204:  0x00009178,
	9205:  0x00009177,
	9206:  0x00009174,
	9207:  0x00009278,
	9208:  0x00009280,
	9209:  0x00009285,
	9210:  0x00009298,
	9211:  0x00009296,
	9212:  0x0000927B,
	9213:  0x00009293,
	9214:  0x0000929C,
	9215:  0x000092A8,
	9216:  0x0000927C,
	9217:  0x00009291,
	9218:  0x000095A1,
	9219:  0x000095A8,
	9220:  0x000095A9,
	9221:  0x000095A3,
	9222:  0x000095A5,
	9223:  0x000095A4,
	9224:  0x00009699,
	9225:  0x0000969C,
	9226:  0x0000969B,
	9227:  0x000096CC,
	9228:  0x000096D2,
	9229:  0x00009700,
	9230:  0x0000977C,
	9231:  0x00009785,
	9232:  0x000097F6,
	9233:  0x00009817,
	9234:  0x00009818,
	9235:  0x000098AF,
	9236:  0x000098B1,
	9237:  0x00009903,
	9238:  0x00009905,
	9239:  0x0000990C,
	9240:  0x00009909,
	9241:  0x000099C1,
	9242:  0x00009AAF,
	9243:  0x00009AB0,
	9244:  0x00009AE6,
	9245:  0x00009B41,
	9246:  0x00009B42,
	9247:  0x00009CF4,
	9248:  0x00009CF6,
	9249:  0x00009CF3,
	9250:  0x00009EBC,
	9251:  0x00009F3B,
	9252:  0x00009F4A,
	9253:  0x00005104,
	9254:  0x00005100,
	9255:  0x000050FB,
	9256:  0x000050F5,
	9257:  0x000050F9,
	9258:  0x00005102,
	9259:  0x00005108,
	9260:  0x00005109,
	9261:  0x00005105,
	9262:  0x000051DC,
	9263:  0x00005287,
	9264:  0x00005288,
	9265:  0x00005289,
	9266:  0x0000528D,
	9267:  0x0000528A,
	9268:  0x000052F0,
	9269:  0x000053B2,
	9270:  0x0000562E,
	9271:  0x0000563B,
	9272:  0x00005639,
	9273:  0x00005632,
	9274:  0x0000563F,
	9275:  0x00005634,
	9276:  0x00005629,
	9277:  0x00005653,
	9278:  0x0000564E,
	9279:  0x00005657,
	9280:  0x00005674,
	9281:  0x00005636,
	9282:  0x0000562F,
	9283:  0x00005630,
	9284:  0x00005880,
	9285:  0x0000589F,
	9286:  0x0000589E,
	9287:  0x000058B3,
	9288:  0x0000589C,
	9289:  0x000058AE,
	9290:  0x000058A9,
	9291:  0x000058A6,
	9292:  0x0000596D,
	9293:  0x00005B09,
	9294:  0x00005AFB,
	9295:  0x00005B0B,
	9296:  0x00005AF5,
	9297:  0x00005B0C,
	9298:  0x00005B08,
	9299:  0x00005BEE,
	9300:  0x00005BEC,
	9301:  0x00005BE9,
	9302:  0x00005BEB,
	9303:  0x00005C64,
	9304:  0x00005C65,
	9305:  0x00005D9D,
	9306:  0x00005D94,
	9307:  0x00005E62,
	9308:  0x00005E5F,
	9309:  0x00005E61,
	9310:  0x00005EE2,
	9311:  0x00005EDA,
	9312:  0x00005EDF,
	9313:  0x00005EDD,
	9314:  0x00005EE3,
	9315:  0x00005EE0,
	9316:  0x00005F48,
	9317:  0x00005F71,
	9318:  0x00005FB7,
	9319:  0x00005FB5,
	9320:  0x00006176,
	9321:  0x00006167,
	9322:  0x0000616E,
	9323:  0x0000615D,
	9324:  0x00006155,
	9325:  0x00006182,
	9326:  0x0000617C,
	9327:  0x00006170,
	9328:  0x0000616B,
	9329:  0x0000617E,
	9330:  0x000061A7,
	9331:  0x00006190,
	9332:  0x000061AB,
	9333:  0x0000618E,
	9334:  0x000061AC,
	9335:  0x0000619A,
	9336:  0x000061A4,
	9337:  0x00006194,
	9338:  0x000061AE,
	9339:  0x0000622E,
	9340:  0x00006469,
	9341:  0x0000646F,
	9342:  0x00006479,
	9343:  0x0000649E,
	9344:  0x000064B2,
	9345:  0x00006488,
	9346:  0x00006490,
	9347:  0x000064B0,
	9348:  0x000064A5,
	9349:  0x00006493,
	9350:  0x00006495,
	9351:  0x000064A9,
	9352:  0x00006492,
	9353:  0x000064AE,
	9354:  0x000064AD,
	9355:  0x000064AB,
	9356:  0x0000649A,
	9357:  0x000064AC,
	9358:  0x00006499,
	9359:  0x000064A2,
	9360:  0x000064B3,
	9361:  0x00006575,
	9362:  0x00006577,
	9363:  0x00006578,
	9364:  0x000066AE,
	9365:  0x000066AB,
	9366:  0x000066B4,
	9367:  0x000066B1,
	9368:  0x00006A23,
	9369:  0x00006A1F,
	9370:  0x000069E8,
	9371:  0x00006A01,
	9372:  0x00006A1E,
	9373:  0x00006A19,
	9374:  0x000069FD,
	9375:  0x00006A21,
	9376:  0x00006A13,
	9377:  0x00006A0A,
	9378:  0x000069F3,
	9379:  0x00006A02,
	9380:  0x00006A05,
	9381:  0x000069ED,
	9382:  0x00006A11,
	9383:  0x00006B50,
	9384:  0x00006B4E,
	9385:  0x00006BA4,
	9386:  0x00006BC5,
	9387:  0x00006BC6,
	9388:  0x00006F3F,
	9389:  0x00006F7C,
	9390:  0x00006F84,
	9391:  0x00006F51,
	9392:  0x00006F66,
	9393:  0x00006F54,
	9394:  0x00006F86,
	9395:  0x00006F6D,
	9396:  0x00006F5B,
	9397:  0x00006F78,
	9398:  0x00006F6E,
	9399:  0x00006F8E,
	9400:  0x00006F7A,
	9401:  0x00006F70,
	9402:  0x00006F64,
	9403:  0x00006F97,
	9404:  0x00006F58,
	9405:  0x00006ED5,
	9406:  0x00006F6F,
	9407:  0x00006F60,
	9408:  0x00006F5F,
	9409:  0x0000719F,
	9410:  0x000071AC,
	9411:  0x000071B1,
	9412:  0x000071A8,
	9413:  0x00007256,
	9414:  0x0000729B,
	9415:  0x0000734E,
	9416:  0x00007357,
	9417:  0x00007469,
	9418:  0x0000748B,
	9419:  0x00007483,
	9420:  0x0000747E,
	9421:  0x00007480,
	9422:  0x0000757F,
	9423:  0x00007620,
	9424:  0x00007629,
	9425:  0x0000761F,
	9426:  0x00007624,
	9427:  0x00007626,
	9428:  0x00007621,
	9429:  0x00007622,
	9430:  0x0000769A,
	9431:  0x000076BA,
	9432:  0x000076E4,
	9433:  0x0000778E,
	9434:  0x00007787,
	9435:  0x0000778C,
	9436:  0x00007791,
	9437:  0x0000778B,
	9438:  0x000078CB,
	9439:  0x000078C5,
	9440:  0x000078BA,
	9441:  0x000078CA,
	9442:  0x000078BE,
	9443:  0x000078D5,
	9444:  0x000078BC,
	9445:  0x000078D0,
	9446:  0x00007A3F,
	9447:  0x00007A3C,
	9448:  0x00007A40,
	9449:  0x00007A3D,
	9450:  0x00007A37,
	9451:  0x00007A3B,
	9452:  0x00007AAF,
	9453:  0x00007AAE,
	9454:  0x00007BAD,
	9455:  0x00007BB1,
	9456:  0x00007BC4,
	9457:  0x00007BB4,
	9458:  0x00007BC6,
	9459:  0x00007BC7,
	9460:  0x00007BC1,
	9461:  0x00007BA0,
	9462:  0x00007BCC,
	9463:  0x00007CCA,
	9464:  0x00007DE0,
	9465:  0x00007DF4,
	9466:  0x00007DEF,
	9467:  0x00007DFB,
	9468:  0x00007DD8,
	9469:  0x00007DEC,
	9470:  0x00007DDD,
	9471:  0x00007DE8,
	9472:  0x00007DE3,
	9473:  0x00007DDA,
	9474:  0x00007DDE,
	9475:  0x00007DE9,
	9476:  0x00007D9E,
	9477:  0x00007DD9,
	9478:  0x00007DF2,
	9479:  0x00007DF9,
	9480:  0x00007F75,
	9481:  0x00007F77,
	9482:  0x00007FAF,
	9483:  0x00007FE9,
	9484:  0x00008026,
	9485:  0x0000819B,
	9486:  0x0000819C,
	9487:  0x0000819D,
	9488:  0x000081A0,
	9489:  0x0000819A,
	9490:  0x00008198,
	9491:  0x00008517,
	9492:  0x0000853D,
	9493:  0x0000851A,
	9494:  0x000084EE,
	9495:  0x0000852C,
	9496:  0x0000852D,
	9497:  0x00008513,
	9498:  0x00008511,
	9499:  0x00008523,
	9500:  0x00008521,
	9501:  0x00008514,
	9502:  0x000084EC,
	9503:  0x00008525,
	9504:  0x000084FF,
	9505:  0x00008506,
	9506:  0x00008782,
	9507:  0x00008774,
	9508:  0x00008776,
	9509:  0x00008760,
	9510:  0x00008766,
	9511:  0x00008778,
	9512:  0x00008768,
	9513:  0x00008759,
	9514:  0x00008757,
	9515:  0x0000874C,
	9516:  0x00008753,
	9517:  0x0000885B,
	9518:  0x0000885D,
	9519:  0x00008910,
	9520:  0x00008907,
	9521:  0x00008912,
	9522:  0x00008913,
	9523:  0x00008915,
	9524:  0x0000890A,
	9525:  0x00008ABC,
	9526:  0x00008AD2,
	9527:  0x00008AC7,
	9528:  0x00008AC4,
	9529:  0x00008A95,
	9530:  0x00008ACB,
	9531:  0x00008AF8,
	9532:  0x00008AB2,
	9533:  0x00008AC9,
	9534:  0x00008AC2,
	9535:  0x00008ABF,
	9536:  0x00008AB0,
	9537:  0x00008AD6,
	9538:  0x00008ACD,
	9539:  0x00008AB6,
	9540:  0x00008AB9,
	9541:  0x00008ADB,
	9542:  0x00008C4C,
	9543:  0x00008C4E,
	9544:  0x00008C6C,
	9545:  0x00008CE0,
	9546:  0x00008CDE,
	9547:  0x00008CE6,
	9548:  0x00008CE4,
	9549:  0x00008CEC,
	9550:  0x00008CED,
	9551:  0x00008CE2,
	9552:  0x00008CE3,
	9553:  0x00008CDC,
	9554:  0x00008CEA,
	9555:  0x00008CE1,
	9556:  0x00008D6D,
	9557:  0x00008D9F,
	9558:  0x00008DA3,
	9559:  0x00008E2B,
	9560:  0x00008E10,
	9561:  0x00008E1D,
	9562:  0x00008E22,
	9563:  0x00008E0F,
	9564:  0x00008E29,
	9565:  0x00008E1F,
	9566:  0x00008E21,
	9567:  0x00008E1E,
	9568:  0x00008EBA,
	9569:  0x00008F1D,
	9570:  0x00008F1B,
	9571:  0x00008F1F,
	9572:  0x00008F29,
	9573:  0x00008F26,
	9574:  0x00008F2A,
	9575:  0x00008F1C,
	9576:  0x00008F1E,
	9577:  0x00008F25,
	9578:  0x00009069,
	9579:  0x0000906E,
	9580:  0x00009068,
	9581:  0x0000906D,
	9582:  0x00009077,
	9583:  0x00009130,
	9584:  0x0000912D,
	9585:  0x00009127,
	9586:  0x00009131,
	9587:  0x00009187,
	9588:  0x00009189,
	9589:  0x0000918B,
	9590:  0x00009183,
	9591:  0x000092C5,
	9592:  0x000092BB,
	9593:  0x000092B7,
	9594:  0x000092EA,
	9595:  0x000092AC,
	9596:  0x000092E4,
	9597:  0x000092C1,
	9598:  0x000092B3,
	9599:  0x000092BC,
	9600:  0x000092D2,
	9601:  0x000092C7,
	9602:  0x000092F0,
	9603:  0x000092B2,
	9604:  0x000095AD,
	9605:  0x000095B1,
	9606:  0x00009704,
	9607:  0x00009706,
	9608:  0x00009707,
	9609:  0x00009709,
	9610:  0x00009760,
	9611:  0x0000978D,
	9612:  0x0000978B,
	9613:  0x0000978F,
	9614:  0x00009821,
	9615:  0x0000982B,
	9616:  0x0000981C,
	9617:  0x000098B3,
	9618:  0x0000990A,
	9619:  0x00009913,
	9620:  0x00009912,
	9621:  0x00009918,
	9622:  0x000099DD,
	9623:  0x000099D0,
	9624:  0x000099DF,
	9625:  0x000099DB,
	9626:  0x000099D1,
	9627:  0x000099D5,
	9628:  0x000099D2,
	9629:  0x000099D9,
	9630:  0x00009AB7,
	9631:  0x00009AEE,
	9632:  0x00009AEF,
	9633:  0x00009B27,
	9634:  0x00009B45,
	9635:  0x00009B44,
	9636:  0x00009B77,
	9637:  0x00009B6F,
	9638:  0x00009D06,
	9639:  0x00009D09,
	9640:  0x00009D03,
	9641:  0x00009EA9,
	9642:  0x00009EBE,
	9643:  0x00009ECE,
	9644:  0x000058A8,
	9645:  0x00009F52,
	9646:  0x00005112,
	9647:  0x00005118,
	9648:  0x00005114,
	9649:  0x00005110,
	9650:  0x00005115,
	9651:  0x00005180,
	9652:  0x000051AA,
	9653:  0x000051DD,
	9654:  0x00005291,
	9655:  0x00005293,
	9656:  0x000052F3,
	9657:  0x00005659,
	9658:  0x0000566B,
	9659:  0x00005679,
	9660:  0x00005669,
	9661:  0x00005664,
	9662:  0x00005678,
	9663:  0x0000566A,
	9664:  0x00005668,
	9665:  0x00005665,
	9666:  0x00005671,
	9667:  0x0000566F,
	9668:  0x0000566C,
	9669:  0x00005662,
	9670:  0x00005676,
	9671:  0x000058C1,
	9672:  0x000058BE,
	9673:  0x000058C7,
	9674:  0x000058C5,
	9675:  0x0000596E,
	9676:  0x00005B1D,
	9677:  0x00005B34,
	9678:  0x00005B78,
	9679:  0x00005BF0,
	9680:  0x00005C0E,
	9681:  0x00005F4A,
	9682:  0x000061B2,
	9683:  0x00006191,
	9684:  0x000061A9,
	9685:  0x0000618A,
	9686:  0x000061CD,
	9687:  0x000061B6,
	9688:  0x000061BE,
	9689:  0x000061CA,
	9690:  0x000061C8,
	9691:  0x00006230,
	9692:  0x000064C5,
	9693:  0x000064C1,
	9694:  0x000064CB,
	9695:  0x000064BB,
	9696:  0x000064BC,
	9697:  0x000064DA,
	9698:  0x000064C4,
	9699:  0x000064C7,
	9700:  0x000064C2,
	9701:  0x000064CD,
	9702:  0x000064BF,
	9703:  0x000064D2,
	9704:  0x000064D4,
	9705:  0x000064BE,
	9706:  0x00006574,
	9707:  0x000066C6,
	9708:  0x000066C9,
	9709:  0x000066B9,
	9710:  0x000066C4,
	9711:  0x000066C7,
	9712:  0x000066B8,
	9713:  0x00006A3D,
	9714:  0x00006A38,
	9715:  0x00006A3A,
	9716:  0x00006A59,
	9717:  0x00006A6B,
	9718:  0x00006A58,
	9719:  0x00006A39,
	9720:  0x00006A44,
	9721:  0x00006A62,
	9722:  0x00006A61,
	9723:  0x00006A4B,
	9724:  0x00006A47,
	9725:  0x00006A35,
	9726:  0x00006A5F,
	9727:  0x00006A48,
	9728:  0x00006B59,
	9729:  0x00006B77,
	9730:  0x00006C05,
	9731:  0x00006FC2,
	9732:  0x00006FB1,
	9733:  0x00006FA1,
	9734:  0x00006FC3,
	9735:  0x00006FA4,
	9736:  0x00006FC1,
	9737:  0x00006FA7,
	9738:  0x00006FB3,
	9739:  0x00006FC0,
	9740:  0x00006FB9,
	9741:  0x00006FB6,
	9742:  0x00006FA6,
	9743:  0x00006FA0,
	9744:  0x00006FB4,
	9745:  0x000071BE,
	9746:  0x000071C9,
	9747:  0x000071D0,
	9748:  0x000071D2,
	9749:  0x000071C8,
	9750:  0x000071D5,
	9751:  0x000071B9,
	9752:  0x000071CE,
	9753:  0x000071D9,
	9754:  0x000071DC,
	9755:  0x000071C3,
	9756:  0x000071C4,
	9757:  0x00007368,
	9758:  0x0000749C,
	9759:  0x000074A3,
	9760:  0x00007498,
	9761:  0x0000749F,
	9762:  0x0000749E,
	9763:  0x000074E2,
	9764:  0x0000750C,
	9765:  0x0000750D,
	9766:  0x00007634,
	9767:  0x00007638,
	9768:  0x0000763A,
	9769:  0x000076E7,
	9770:  0x000076E5,
	9771:  0x000077A0,
	9772:  0x0000779E,
	9773:  0x0000779F,
	9774:  0x000077A5,
	9775:  0x000078E8,
	9776:  0x000078DA,
	9777:  0x000078EC,
	9778:  0x000078E7,
	9779:  0x000079A6,
	9780:  0x00007A4D,
	9781:  0x00007A4E,
	9782:  0x00007A46,
	9783:  0x00007A4C,
	9784:  0x00007A4B,
	9785:  0x00007ABA,
	9786:  0x00007BD9,
	9787:  0x00007C11,
	9788:  0x00007BC9,
	9789:  0x00007BE4,
	9790:  0x00007BDB,
	9791:  0x00007BE1,
	9792:  0x00007BE9,
	9793:  0x00007BE6,
	9794:  0x00007CD5,
	9795:  0x00007CD6,
	9796:  0x00007E0A,
	9797:  0x00007E11,
	9798:  0x00007E08,
	9799:  0x00007E1B,
	9800:  0x00007E23,
	9801:  0x00007E1E,
	9802:  0x00007E1D,
	9803:  0x00007E09,
	9804:  0x00007E10,
	9805:  0x00007F79,
	9806:  0x00007FB2,
	9807:  0x00007FF0,
	9808:  0x00007FF1,
	9809:  0x00007FEE,
	9810:  0x00008028,
	9811:  0x000081B3,
	9812:  0x000081A9,
	9813:  0x000081A8,
	9814:  0x000081FB,
	9815:  0x00008208,
	9816:  0x00008258,
	9817:  0x00008259,
	9818:  0x0000854A,
	9819:  0x00008559,
	9820:  0x00008548,
	9821:  0x00008568,
	9822:  0x00008569,
	9823:  0x00008543,
	9824:  0x00008549,
	9825:  0x0000856D,
	9826:  0x0000856A,
	9827:  0x0000855E,
	9828:  0x00008783,
	9829:  0x0000879F,
	9830:  0x0000879E,
	9831:  0x000087A2,
	9832:  0x0000878D,
	9833:  0x00008861,
	9834:  0x0000892A,
	9835:  0x00008932,
	9836:  0x00008925,
	9837:  0x0000892B,
	9838:  0x00008921,
	9839:  0x000089AA,
	9840:  0x000089A6,
	9841:  0x00008AE6,
	9842:  0x00008AFA,
	9843:  0x00008AEB,
	9844:  0x00008AF1,
	9845:  0x00008B00,
	9846:  0x00008ADC,
	9847:  0x00008AE7,
	9848:  0x00008AEE,
	9849:  0x00008AFE,
	9850:  0x00008B01,
	9851:  0x00008B02,
	9852:  0x00008AF7,
	9853:  0x00008AED,
	9854:  0x00008AF3,
	9855:  0x00008AF6,
	9856:  0x00008AFC,
	9857:  0x00008C6B,
	9858:  0x00008C6D,
	9859:  0x00008C93,
	9860:  0x00008CF4,
	9861:  0x00008E44,
	9862:  0x00008E31,
	9863:  0x00008E34,
	9864:  0x00008E42,
	9865:  0x00008E39,
	9866:  0x00008E35,
	9867:  0x00008F3B,
	9868:  0x00008F2F,
	9869:  0x00008F38,
	9870:  0x00008F33,
	9871:  0x00008FA8,
	9872:  0x00008FA6,
	9873:  0x00009075,
	9874:  0x00009074,
	9875:  0x00009078,
	9876:  0x00009072,
	9877:  0x0000907C,
	9878:  0x0000907A,
	9879:  0x00009134,
	9880:  0x00009192,
	9881:  0x00009320,
	9882:  0x00009336,
	9883:  0x000092F8,
	9884:  0x00009333,
	9885:  0x0000932F,
	9886:  0x00009322,
	9887:  0x000092FC,
	9888:  0x0000932B,
	9889:  0x00009304,
	9890:  0x0000931A,
	9891:  0x00009310,
	9892:  0x00009326,
	9893:  0x00009321,
	9894:  0x00009315,
	9895:  0x0000932E,
	9896:  0x00009319,
	9897:  0x000095BB,
	9898:  0x000096A7,
	9899:  0x000096A8,
	9900:  0x000096AA,
	9901:  0x000096D5,
	9902:  0x0000970E,
	9903:  0x00009711,
	9904:  0x00009716,
	9905:  0x0000970D,
	9906:  0x00009713,
	9907:  0x0000970F,
	9908:  0x0000975B,
	9909:  0x0000975C,
	9910:  0x00009766,
	9911:  0x00009798,
	9912:  0x00009830,
	9913:  0x00009838,
	9914:  0x0000983B,
	9915:  0x00009837,
	9916:  0x0000982D,
	9917:  0x00009839,
	9918:  0x00009824,
	9919:  0x00009910,
	9920:  0x00009928,
	9921:  0x0000991E,
	9922:  0x0000991B,
	9923:  0x00009921,
	9924:  0x0000991A,
	9925:  0x000099ED,
	9926:  0x000099E2,
	9927:  0x000099F1,
	9928:  0x00009AB8,
	9929:  0x00009ABC,
	9930:  0x00009AFB,
	9931:  0x00009AED,
	9932:  0x00009B28,
	9933:  0x00009B91,
	9934:  0x00009D15,
	9935:  0x00009D23,
	9936:  0x00009D26,
	9937:  0x00009D28,
	9938:  0x00009D12,
	9939:  0x00009D1B,
	9940:  0x00009ED8,
	9941:  0x00009ED4,
	9942:  0x00009F8D,
	9943:  0x00009F9C,
	9944:  0x0000512A,
	9945:  0x0000511F,
	9946:  0x00005121,
	9947:  0x00005132,
	9948:  0x000052F5,
	9949:  0x0000568E,
	9950:  0x00005680,
	9951:  0x00005690,
	9952:  0x00005685,
	9953:  0x00005687,
	9954:  0x0000568F,
	9955:  0x000058D5,
	9956:  0x000058D3,
	9957:  0x000058D1,
	9958:  0x000058CE,
	9959:  0x00005B30,
	9960:  0x00005B2A,
	9961:  0x00005B24,
	9962:  0x00005B7A,
	9963:  0x00005C37,
	9964:  0x00005C68,
	9965:  0x00005DBC,
	9966:  0x00005DBA,
	9967:  0x00005DBD,
	9968:  0x00005DB8,
	9969:  0x00005E6B,
	9970:  0x00005F4C,
	9971:  0x00005FBD,
	9972:  0x000061C9,
	9973:  0x000061C2,
	9974:  0x000061C7,
	9975:  0x000061E6,
	9976:  0x000061CB,
	9977:  0x00006232,
	9978:  0x00006234,
	9979:  0x000064CE,
	9980:  0x000064CA,
	9981:  0x000064D8,
	9982:  0x000064E0,
	9983:  0x000064F0,
	9984:  0x000064E6,
	9985:  0x000064EC,
	9986:  0x000064F1,
	9987:  0x000064E2,
	9988:  0x000064ED,
	9989:  0x00006582,
	9990:  0x00006583,
	9991:  0x000066D9,
	9992:  0x000066D6,
	9993:  0x00006A80,
	9994:  0x00006A94,
	9995:  0x00006A84,
	9996:  0x00006AA2,
	9997:  0x00006A9C,
	9998:  0x00006ADB,
	9999:  0x00006AA3,
	10000: 0x00006A7E,
	10001: 0x00006A97,
	10002: 0x00006A90,
	10003: 0x00006AA0,
	10004: 0x00006B5C,
	10005: 0x00006BAE,
	10006: 0x00006BDA,
	10007: 0x00006C08,
	10008: 0x00006FD8,
	10009: 0x00006FF1,
	10010: 0x00006FDF,
	10011: 0x00006FE0,
	10012: 0x00006FDB,
	10013: 0x00006FE4,
	10014: 0x00006FEB,
	10015: 0x00006FEF,
	10016: 0x00006F80,
	10017: 0x00006FEC,
	10018: 0x00006FE1,
	10019: 0x00006FE9,
	10020: 0x00006FD5,
	10021: 0x00006FEE,
	10022: 0x00006FF0,
	10023: 0x000071E7,
	10024: 0x000071DF,
	10025: 0x000071EE,
	10026: 0x000071E6,
	10027: 0x000071E5,
	10028: 0x000071ED,
	10029: 0x000071EC,
	10030: 0x000071F4,
	10031: 0x000071E0,
	10032: 0x00007235,
	10033: 0x00007246,
	10034: 0x00007370,
	10035: 0x00007372,
	10036: 0x000074A9,
	10037: 0x000074B0,
	10038: 0x000074A6,
	10039: 0x000074A8,
	10040: 0x00007646,
	10041: 0x00007642,
	10042: 0x0000764C,
	10043: 0x000076EA,
	10044: 0x000077B3,
	10045: 0x000077AA,
	10046: 0x000077B0,
	10047: 0x000077AC,
	10048: 0x000077A7,
	10049: 0x000077AD,
	10050: 0x000077EF,
	10051: 0x000078F7,
	10052: 0x000078FA,
	10053: 0x000078F4,
	10054: 0x000078EF,
	10055: 0x00007901,
	10056: 0x000079A7,
	10057: 0x000079AA,
	10058: 0x00007A57,
	10059: 0x00007ABF,
	10060: 0x00007C07,
	10061: 0x00007C0D,
	10062: 0x00007BFE,
	10063: 0x00007BF7,
	10064: 0x00007C0C,
	10065: 0x00007BE0,
	10066: 0x00007CE0,
	10067: 0x00007CDC,
	10068: 0x00007CDE,
	10069: 0x00007CE2,
	10070: 0x00007CDF,
	10071: 0x00007CD9,
	10072: 0x00007CDD,
	10073: 0x00007E2E,
	10074: 0x00007E3E,
	10075: 0x00007E46,
	10076: 0x00007E37,
	10077: 0x00007E32,
	10078: 0x00007E43,
	10079: 0x00007E2B,
	10080: 0x00007E3D,
	10081: 0x00007E31,
	10082: 0x00007E45,
	10083: 0x00007E41,
	10084: 0x00007E34,
	10085: 0x00007E39,
	10086: 0x00007E48,
	10087: 0x00007E35,
	10088: 0x00007E3F,
	10089: 0x00007E2F,
	10090: 0x00007F44,
	10091: 0x00007FF3,
	10092: 0x00007FFC,
	10093: 0x00008071,
	10094: 0x00008072,
	10095: 0x00008070,
	10096: 0x0000806F,
	10097: 0x00008073,
	10098: 0x000081C6,
	10099: 0x000081C3,
	10100: 0x000081BA,
	10101: 0x000081C2,
	10102: 0x000081C0,
	10103: 0x000081BF,
	10104: 0x000081BD,
	10105: 0x000081C9,
	10106: 0x000081BE,
	10107: 0x000081E8,
	10108: 0x00008209,
	10109: 0x00008271,
	10110: 0x000085AA,
	10111: 0x00008584,
	10112: 0x0000857E,
	10113: 0x0000859C,
	10114: 0x00008591,
	10115: 0x00008594,
	10116: 0x000085AF,
	10117: 0x0000859B,
	10118: 0x00008587,
	10119: 0x000085A8,
	10120: 0x0000858A,
	10121: 0x00008667,
	10122: 0x000087C0,
	10123: 0x000087D1,
	10124: 0x000087B3,
	10125: 0x000087D2,
	10126: 0x000087C6,
	10127: 0x000087AB,
	10128: 0x000087BB,
	10129: 0x000087BA,
	10130: 0x000087C8,
	10131: 0x000087CB,
	10132: 0x0000893B,
	10133: 0x00008936,
	10134: 0x00008944,
	10135: 0x00008938,
	10136: 0x0000893D,
	10137: 0x000089AC,
	10138: 0x00008B0E,
	10139: 0x00008B17,
	10140: 0x00008B19,
	10141: 0x00008B1B,
	10142: 0x00008B0A,
	10143: 0x00008B20,
	10144: 0x00008B1D,
	10145: 0x00008B04,
	10146: 0x00008B10,
	10147: 0x00008C41,
	10148: 0x00008C3F,
	10149: 0x00008C73,
	10150: 0x00008CFA,
	10151: 0x00008CFD,
	10152: 0x00008CFC,
	10153: 0x00008CF8,
	10154: 0x00008CFB,
	10155: 0x00008DA8,
	10156: 0x00008E49,
	10157: 0x00008E4B,
	10158: 0x00008E48,
	10159: 0x00008E4A,
	10160: 0x00008F44,
	10161: 0x00008F3E,
	10162: 0x00008F42,
	10163: 0x00008F45,
	10164: 0x00008F3F,
	10165: 0x0000907F,
	10166: 0x0000907D,
	10167: 0x00009084,
	10168: 0x00009081,
	10169: 0x00009082,
	10170: 0x00009080,
	10171: 0x00009139,
	10172: 0x000091A3,
	10173: 0x0000919E,
	10174: 0x0000919C,
	10175: 0x0000934D,
	10176: 0x00009382,
	10177: 0x00009328,
	10178: 0x00009375,
	10179: 0x0000934A,
	10180: 0x00009365,
	10181: 0x0000934B,
	10182: 0x00009318,
	10183: 0x0000937E,
	10184: 0x0000936C,
	10185: 0x0000935B,
	10186: 0x00009370,
	10187: 0x0000935A,
	10188: 0x00009354,
	10189: 0x000095CA,
	10190: 0x000095CB,
	10191: 0x000095CC,
	10192: 0x000095C8,
	10193: 0x000095C6,
	10194: 0x000096B1,
	10195: 0x000096B8,
	10196: 0x000096D6,
	10197: 0x0000971C,
	10198: 0x0000971E,
	10199: 0x000097A0,
	10200: 0x000097D3,
	10201: 0x00009846,
	10202: 0x000098B6,
	10203: 0x00009935,
	10204: 0x00009A01,
	10205: 0x000099FF,
	10206: 0x00009BAE,
	10207: 0x00009BAB,
	10208: 0x00009BAA,
	10209: 0x00009BAD,
	10210: 0x00009D3B,
	10211: 0x00009D3F,
	10212: 0x00009E8B,
	10213: 0x00009ECF,
	10214: 0x00009EDE,
	10215: 0x00009EDC,
	10216: 0x00009EDD,
	10217: 0x00009EDB,
	10218: 0x00009F3E,
	10219: 0x00009F4B,
	10220: 0x000053E2,
	10221: 0x00005695,
	10222: 0x000056AE,
	10223: 0x000058D9,
	10224: 0x000058D8,
	10225: 0x00005B38,
	10226: 0x00005F5D,
	10227: 0x000061E3,
	10228: 0x00006233,
	10229: 0x000064F4,
	10230: 0x000064F2,
	10231: 0x000064FE,
	10232: 0x00006506,
	10233: 0x000064FA,
	10234: 0x000064FB,
	10235: 0x000064F7,
	10236: 0x000065B7,
	10237: 0x000066DC,
	10238: 0x00006726,
	10239: 0x00006AB3,
	10240: 0x00006AAC,
	10241: 0x00006AC3,
	10242: 0x00006ABB,
	10243: 0x00006AB8,
	10244: 0x00006AC2,
	10245: 0x00006AAE,
	10246: 0x00006AAF,
	10247: 0x00006B5F,
	10248: 0x00006B78,
	10249: 0x00006BAF,
	10250: 0x00007009,
	10251: 0x0000700B,
	10252: 0x00006FFE,
	10253: 0x00007006,
	10254: 0x00006FFA,
	10255: 0x00007011,
	10256: 0x0000700F,
	10257: 0x000071FB,
	10258: 0x000071FC,
	10259: 0x000071FE,
	10260: 0x000071F8,
	10261: 0x00007377,
	10262: 0x00007375,
	10263: 0x000074A7,
	10264: 0x000074BF,
	10265: 0x00007515,
	10266: 0x00007656,
	10267: 0x00007658,
	10268: 0x00007652,
	10269: 0x000077BD,
	10270: 0x000077BF,
	10271: 0x000077BB,
	10272: 0x000077BC,
	10273: 0x0000790E,
	10274: 0x000079AE,
	10275: 0x00007A61,
	10276: 0x00007A62,
	10277: 0x00007A60,
	10278: 0x00007AC4,
	10279: 0x00007AC5,
	10280: 0x00007C2B,
	10281: 0x00007C27,
	10282: 0x00007C2A,
	10283: 0x00007C1E,
	10284: 0x00007C23,
	10285: 0x00007C21,
	10286: 0x00007CE7,
	10287: 0x00007E54,
	10288: 0x00007E55,
	10289: 0x00007E5E,
	10290: 0x00007E5A,
	10291: 0x00007E61,
	10292: 0x00007E52,
	10293: 0x00007E59,
	10294: 0x00007F48,
	10295: 0x00007FF9,
	10296: 0x00007FFB,
	10297: 0x00008077,
	10298: 0x00008076,
	10299: 0x000081CD,
	10300: 0x000081CF,
	10301: 0x0000820A,
	10302: 0x000085CF,
	10303: 0x000085A9,
	10304: 0x000085CD,
	10305: 0x000085D0,
	10306: 0x000085C9,
	10307: 0x000085B0,
	10308: 0x000085BA,
	10309: 0x000085B9,
	10310: 0x000085A6,
	10311: 0x000087EF,
	10312: 0x000087EC,
	10313: 0x000087F2,
	10314: 0x000087E0,
	10315: 0x00008986,
	10316: 0x000089B2,
	10317: 0x000089F4,
	10318: 0x00008B28,
	10319: 0x00008B39,
	10320: 0x00008B2C,
	10321: 0x00008B2B,
	10322: 0x00008C50,
	10323: 0x00008D05,
	10324: 0x00008E59,
	10325: 0x00008E63,
	10326: 0x00008E66,
	10327: 0x00008E64,
	10328: 0x00008E5F,
	10329: 0x00008E55,
	10330: 0x00008EC0,
	10331: 0x00008F49,
	10332: 0x00008F4D,
	10333: 0x00009087,
	10334: 0x00009083,
	10335: 0x00009088,
	10336: 0x000091AB,
	10337: 0x000091AC,
	10338: 0x000091D0,
	10339: 0x00009394,
	10340: 0x0000938A,
	10341: 0x00009396,
	10342: 0x000093A2,
	10343: 0x000093B3,
	10344: 0x000093AE,
	10345: 0x000093AC,
	10346: 0x000093B0,
	10347: 0x00009398,
	10348: 0x0000939A,
	10349: 0x00009397,
	10350: 0x000095D4,
	10351: 0x000095D6,
	10352: 0x000095D0,
	10353: 0x000095D5,
	10354: 0x000096E2,
	10355: 0x000096DC,
	10356: 0x000096D9,
	10357: 0x000096DB,
	10358: 0x000096DE,
	10359: 0x00009724,
	10360: 0x000097A3,
	10361: 0x000097A6,
	10362: 0x000097AD,
	10363: 0x000097F9,
	10364: 0x0000984D,
	10365: 0x0000984F,
	10366: 0x0000984C,
	10367: 0x0000984E,
	10368: 0x00009853,
	10369: 0x000098BA,
	10370: 0x0000993E,
	10371: 0x0000993F,
	10372: 0x0000993D,
	10373: 0x0000992E,
	10374: 0x000099A5,
	10375: 0x00009A0E,
	10376: 0x00009AC1,
	10377: 0x00009B03,
	10378: 0x00009B06,
	10379: 0x00009B4F,
	10380: 0x00009B4E,
	10381: 0x00009B4D,
	10382: 0x00009BCA,
	10383: 0x00009BC9,
	10384: 0x00009BFD,
	10385: 0x00009BC8,
	10386: 0x00009BC0,
	10387: 0x00009D51,
	10388: 0x00009D5D,
	10389: 0x00009D60,
	10390: 0x00009EE0,
	10391: 0x00009F15,
	10392: 0x00009F2C,
	10393: 0x00005133,
	10394: 0x000056A5,
	10395: 0x000058DE,
	10396: 0x000058DF,
	10397: 0x000058E2,
	10398: 0x00005BF5,
	10399: 0x00009F90,
	10400: 0x00005EEC,
	10401: 0x000061F2,
	10402: 0x000061F7,
	10403: 0x000061F6,
	10404: 0x000061F5,
	10405: 0x00006500,
	10406: 0x0000650F,
	10407: 0x000066E0,
	10408: 0x000066DD,
	10409: 0x00006AE5,
	10410: 0x00006ADD,
	10411: 0x00006ADA,
	10412: 0x00006AD3,
	10413: 0x0000701B,
	10414: 0x0000701F,
	10415: 0x00007028,
	10416: 0x0000701A,
	10417: 0x0000701D,
	10418: 0x00007015,
	10419: 0x00007018,
	10420: 0x00007206,
	10421: 0x0000720D,
	10422: 0x00007258,
	10423: 0x000072A2,
	10424: 0x00007378,
	10425: 0x0000737A,
	10426: 0x000074BD,
	10427: 0x000074CA,
	10428: 0x000074E3,
	10429: 0x00007587,
	10430: 0x00007586,
	10431: 0x0000765F,
	10432: 0x00007661,
	10433: 0x000077C7,
	10434: 0x00007919,
	10435: 0x000079B1,
	10436: 0x00007A6B,
	10437: 0x00007A69,
	10438: 0x00007C3E,
	10439: 0x00007C3F,
	10440: 0x00007C38,
	10441: 0x00007C3D,
	10442: 0x00007C37,
	10443: 0x00007C40,
	10444: 0x00007E6B,
	10445: 0x00007E6D,
	10446: 0x00007E79,
	10447: 0x00007E69,
	10448: 0x00007E6A,
	10449: 0x00007F85,
	10450: 0x00007E73,
	10451: 0x00007FB6,
	10452: 0x00007FB9,
	10453: 0x00007FB8,
	10454: 0x000081D8,
	10455: 0x000085E9,
	10456: 0x000085DD,
	10457: 0x000085EA,
	10458: 0x000085D5,
	10459: 0x000085E4,
	10460: 0x000085E5,
	10461: 0x000085F7,
	10462: 0x000087FB,
	10463: 0x00008805,
	10464: 0x0000880D,
	10465: 0x000087F9,
	10466: 0x000087FE,
	10467: 0x00008960,
	10468: 0x0000895F,
	10469: 0x00008956,
	10470: 0x0000895E,
	10471: 0x00008B41,
	10472: 0x00008B5C,
	10473: 0x00008B58,
	10474: 0x00008B49,
	10475: 0x00008B5A,
	10476: 0x00008B4E,
	10477: 0x00008B4F,
	10478: 0x00008B46,
	10479: 0x00008B59,
	10480: 0x00008D08,
	10481: 0x00008D0A,
	10482: 0x00008E7C,
	10483: 0x00008E72,
	10484: 0x00008E87,
	10485: 0x00008E76,
	10486: 0x00008E6C,
	10487: 0x00008E7A,
	10488: 0x00008E74,
	10489: 0x00008F54,
	10490: 0x00008F4E,
	10491: 0x00008FAD,
	10492: 0x0000908A,
	10493: 0x0000908B,
	10494: 0x000091B1,
	10495: 0x000091AE,
	10496: 0x000093E1,
	10497: 0x000093D1,
	10498: 0x000093DF,
	10499: 0x000093C3,
	10500: 0x000093C8,
	10501: 0x000093DC,
	10502: 0x000093DD,
	10503: 0x000093D6,
	10504: 0x000093E2,
	10505: 0x000093CD,
	10506: 0x000093D8,
	10507: 0x000093E4,
	10508: 0x000093D7,
	10509: 0x000093E8,
	10510: 0x000095DC,
	10511: 0x000096B4,
	10512: 0x000096E3,
	10513: 0x0000972A,
	10514: 0x00009727,
	10515: 0x00009761,
	10516: 0x000097DC,
	10517: 0x000097FB,
	10518: 0x0000985E,
	10519: 0x00009858,
	10520: 0x0000985B,
	10521: 0x000098BC,
	10522: 0x00009945,
	10523: 0x00009949,
	10524: 0x00009A16,
	10525: 0x00009A19,
	10526: 0x00009B0D,
	10527: 0x00009BE8,
	10528: 0x00009BE7,
	10529: 0x00009BD6,
	10530: 0x00009BDB,
	10531: 0x00009D89,
	10532: 0x00009D61,
	10533: 0x00009D72,
	10534: 0x00009D6A,
	10535: 0x00009D6C,
	10536: 0x00009E92,
	10537: 0x00009E97,
	10538: 0x00009E93,
	10539: 0x00009EB4,
	10540: 0x000052F8,
	10541: 0x000056A8,
	10542: 0x000056B7,
	10543: 0x000056B6,
	10544: 0x000056B4,
	10545: 0x000056BC,
	10546: 0x000058E4,
	10547: 0x00005B40,
	10548: 0x00005B43,
	10549: 0x00005B7D,
	10550: 0x00005BF6,
	10551: 0x00005DC9,
	10552: 0x000061F8,
	10553: 0x000061FA,
	10554: 0x00006518,
	10555: 0x00006514,
	10556: 0x00006519,
	10557: 0x000066E6,
	10558: 0x00006727,
	10559: 0x00006AEC,
	10560: 0x0000703E,
	10561: 0x00007030,
	10562: 0x00007032,
	10563: 0x00007210,
	10564: 0x0000737B,
	10565: 0x000074CF,
	10566: 0x00007662,
	10567: 0x00007665,
	10568: 0x00007926,
	10569: 0x0000792A,
	10570: 0x0000792C,
	10571: 0x0000792B,
	10572: 0x00007AC7,
	10573: 0x00007AF6,
	10574: 0x00007C4C,
	10575: 0x00007C43,
	10576: 0x00007C4D,
	10577: 0x00007CEF,
	10578: 0x00007CF0,
	10579: 0x00008FAE,
	10580: 0x00007E7D,
	10581: 0x00007E7C,
	10582: 0x00007E82,
	10583: 0x00007F4C,
	10584: 0x00008000,
	10585: 0x000081DA,
	10586: 0x00008266,
	10587: 0x000085FB,
	10588: 0x000085F9,
	10589: 0x00008611,
	10590: 0x000085FA,
	10591: 0x00008606,
	10592: 0x0000860B,
	10593: 0x00008607,
	10594: 0x0000860A,
	10595: 0x00008814,
	10596: 0x00008815,
	10597: 0x00008964,
	10598: 0x000089BA,
	10599: 0x000089F8,
	10600: 0x00008B70,
	10601: 0x00008B6C,
	10602: 0x00008B66,
	10603: 0x00008B6F,
	10604: 0x00008B5F,
	10605: 0x00008B6B,
	10606: 0x00008D0F,
	10607: 0x00008D0D,
	10608: 0x00008E89,
	10609: 0x00008E81,
	10610: 0x00008E85,
	10611: 0x00008E82,
	10612: 0x000091B4,
	10613: 0x000091CB,
	10614: 0x00009418,
	10615: 0x00009403,
	10616: 0x000093FD,
	10617: 0x000095E1,
	10618: 0x00009730,
	10619: 0x000098C4,
	10620: 0x00009952,
	10621: 0x00009951,
	10622: 0x000099A8,
	10623: 0x00009A2B,
	10624: 0x00009A30,
	10625: 0x00009A37,
	10626: 0x00009A35,
	10627: 0x00009C13,
	10628: 0x00009C0D,
	10629: 0x00009E79,
	10630: 0x00009EB5,
	10631: 0x00009EE8,
	10632: 0x00009F2F,
	10633: 0x00009F5F,
	10634: 0x00009F63,
	10635: 0x00009F61,
	10636: 0x00005137,
	10637: 0x00005138,
	10638: 0x000056C1,
	10639: 0x000056C0,
	10640: 0x000056C2,
	10641: 0x00005914,
	10642: 0x00005C6C,
	10643: 0x00005DCD,
	10644: 0x000061FC,
	10645: 0x000061FE,
	10646: 0x0000651D,
	10647: 0x0000651C,
	10648: 0x00006595,
	10649: 0x000066E9,
	10650: 0x00006AFB,
	10651: 0x00006B04,
	10652: 0x00006AFA,
	10653: 0x00006BB2,
	10654: 0x0000704C,
	10655: 0x0000721B,
	10656: 0x000072A7,
	10657: 0x000074D6,
	10658: 0x000074D4,
	10659: 0x00007669,
	10660: 0x000077D3,
	10661: 0x00007C50,
	10662: 0x00007E8F,
	10663: 0x00007E8C,
	10664: 0x00007FBC,
	10665: 0x00008617,
	10666: 0x0000862D,
	10667: 0x0000861A,
	10668: 0x00008823,
	10669: 0x00008822,
	10670: 0x00008821,
	10671: 0x0000881F,
	10672: 0x0000896A,
	10673: 0x0000896C,
	10674: 0x000089BD,
	10675: 0x00008B74,
	10676: 0x00008B77,
	10677: 0x00008B7D,
	10678: 0x00008D13,
	10679: 0x00008E8A,
	10680: 0x00008E8D,
	10681: 0x00008E8B,
	10682: 0x00008F5F,
	10683: 0x00008FAF,
	10684: 0x000091BA,
	10685: 0x0000942E,
	10686: 0x00009433,
	10687: 0x00009435,
	10688: 0x0000943A,
	10689: 0x00009438,
	10690: 0x00009432,
	10691: 0x0000942B,
	10692: 0x000095E2,
	10693: 0x00009738,
	10694: 0x00009739,
	10695: 0x00009732,
	10696: 0x000097FF,
	10697: 0x00009867,
	10698: 0x00009865,
	10699: 0x00009957,
	10700: 0x00009A45,
	10701: 0x00009A43,
	10702: 0x00009A40,
	10703: 0x00009A3E,
	10704: 0x00009ACF,
	10705: 0x00009B54,
	10706: 0x00009B51,
	10707: 0x00009C2D,
	10708: 0x00009C25,
	10709: 0x00009DAF,
	10710: 0x00009DB4,
	10711: 0x00009DC2,
	10712: 0x00009DB8,
	10713: 0x00009E9D,
	10714: 0x00009EEF,
	10715: 0x00009F19,
	10716: 0x00009F5C,
	10717: 0x00009F66,
	10718: 0x00009F67,
	10719: 0x0000513C,
	10720: 0x0000513B,
	10721: 0x000056C8,
	10722: 0x000056CA,
	10723: 0x000056C9,
	10724: 0x00005B7F,
	10725: 0x00005DD4,
	10726: 0x00005DD2,
	10727: 0x00005F4E,
	10728: 0x000061FF,
	10729: 0x00006524,
	10730: 0x00006B0A,
	10731: 0x00006B61,
	10732: 0x00007051,
	10733: 0x00007058,
	10734: 0x00007380,
	10735: 0x000074E4,
	10736: 0x0000758A,
	10737: 0x0000766E,
	10738: 0x0000766C,
	10739: 0x000079B3,
	10740: 0x00007C60,
	10741: 0x00007C5F,
	10742: 0x0000807E,
	10743: 0x0000807D,
	10744: 0x000081DF,
	10745: 0x00008972,
	10746: 0x0000896F,
	10747: 0x000089FC,
	10748: 0x00008B80,
	10749: 0x00008D16,
	10750: 0x00008D17,
	10751: 0x00008E91,
	10752: 0x00008E93,
	10753: 0x00008F61,
	10754: 0x00009148,
	10755: 0x00009444,
	10756: 0x00009451,
	10757: 0x00009452,
	10758: 0x0000973D,
	10759: 0x0000973E,
	10760: 0x000097C3,
	10761: 0x000097C1,
	10762: 0x0000986B,
	10763: 0x00009955,
	10764: 0x00009A55,
	10765: 0x00009A4D,
	10766: 0x00009AD2,
	10767: 0x00009B1A,
	10768: 0x00009C49,
	10769: 0x00009C31,
	10770: 0x00009C3E,
	10771: 0x00009C3B,
	10772: 0x00009DD3,
	10773: 0x00009DD7,
	10774: 0x00009F34,
	10775: 0x00009F6C,
	10776: 0x00009F6A,
	10777: 0x00009F94,
	10778: 0x000056CC,
	10779: 0x00005DD6,
	10780: 0x00006200,
	10781: 0x00006523,
	10782: 0x0000652B,
	10783: 0x0000652A,
	10784: 0x000066EC,
	10785: 0x00006B10,
	10786: 0x000074DA,
	10787: 0x00007ACA,
	10788: 0x00007C64,
	10789: 0x00007C63,
	10790: 0x00007C65,
	10791: 0x00007E93,
	10792: 0x00007E96,
	10793: 0x00007E94,
	10794: 0x000081E2,
	10795: 0x00008638,
	10796: 0x0000863F,
	10797: 0x00008831,
	10798: 0x00008B8A,
	10799: 0x00009090,
	10800: 0x0000908F,
	10801: 0x00009463,
	10802: 0x00009460,
	10803: 0x00009464,
	10804: 0x00009768,
	10805: 0x0000986F,
	10806: 0x0000995C,
	10807: 0x00009A5A,
	10808: 0x00009A5B,
	10809: 0x00009A57,
	10810: 0x00009AD3,
	10811: 0x00009AD4,
	10812: 0x00009AD1,
	10813: 0x00009C54,
	10814: 0x00009C57,
	10815: 0x00009C56,
	10816: 0x00009DE5,
	10817: 0x00009E9F,
	10818: 0x00009EF4,
	10819: 0x000056D1,
	10820: 0x000058E9,
	10821: 0x0000652C,
	10822: 0x0000705E,
	10823: 0x00007671,
	10824: 0x00007672,
	10825: 0x000077D7,
	10826: 0x00007F50,
	10827: 0x00007F88,
	10828: 0x00008836,
	10829: 0x00008839,
	10830: 0x00008862,
	10831: 0x00008B93,
	10832: 0x00008B92,
	10833: 0x00008B96,
	10834: 0x00008277,
	10835: 0x00008D1B,
	10836: 0x000091C0,
	10837: 0x0000946A,
	10838: 0x00009742,
	10839: 0x00009748,
	10840: 0x00009744,
	10841: 0x000097C6,
	10842: 0x00009870,
	10843: 0x00009A5F,
	10844: 0x00009B22,
	10845: 0x00009B58,
	10846: 0x00009C5F,
	10847: 0x00009DF9,
	10848: 0x00009DFA,
	10849: 0x00009E7C,
	10850: 0x00009E7D,
	10851: 0x00009F07,
	10852: 0x00009F77,
	10853: 0x00009F72,
	10854: 0x00005EF3,
	10855: 0x00006B16,
	10856: 0x00007063,
	10857: 0x00007C6C,
	10858: 0x00007C6E,
	10859: 0x0000883B,
	10860: 0x000089C0,
	10861: 0x00008EA1,
	10862: 0x000091C1,
	10863: 0x00009472,
	10864: 0x00009470,
	10865: 0x00009871,
	10866: 0x0000995E,
	10867: 0x00009AD6,
	10868: 0x00009B23,
	10869: 0x00009ECC,
	10870: 0x00007064,
	10871: 0x000077DA,
	10872: 0x00008B9A,
	10873: 0x00009477,
	10874: 0x000097C9,
	10875: 0x00009A62,
	10876: 0x00009A65,
	10877: 0x00007E9C,
	10878: 0x00008B9C,
	10879: 0x00008EAA,
	10880: 0x000091C5,
	10881: 0x0000947D,
	10882: 0x0000947E,
	10883: 0x0000947C,
	10884: 0x00009C77,
	10885: 0x00009C78,
	10886: 0x00009EF7,
	10887: 0x00008C54,
	10888: 0x0000947F,
	10889: 0x00009E1A,
	10890: 0x00007228,
	10891: 0x00009A6A,
	10892: 0x00009B31,
	10893: 0x00009E1B,
	10894: 0x00009E1E,
	10895: 0x00007C72,
	10896: 0x00002460,
	10897: 0x00002461,
	10898: 0x00002462,
	10899: 0x00002463,
	10900: 0x00002464,
	10901: 0x00002465,
	10902: 0x00002466,
	10903: 0x00002467,
	10904: 0x00002468,
	10905: 0x00002469,
	10906: 0x00002474,
	10907: 0x00002475,
	10908: 0x00002476,
	10909: 0x00002477,
	10910: 0x00002478,
	10911: 0x00002479,
	10912: 0x0000247A,
	10913: 0x0000247B,
	10914: 0x0000247C,
	10915: 0x0000247D,
	10916: 0x00002170,
	10917: 0x00002171,
	10918: 0x00002172,
	10919: 0x00002173,
	10920: 0x00002174,
	10921: 0x00002175,
	10922: 0x00002176,
	10923: 0x00002177,
	10924: 0x00002178,
	10925: 0x00002179,
	10926: 0x00004E36,
	10927: 0x00004E3F,
	10928: 0x00004E85,
	10929: 0x00004EA0,
	10930: 0x00005182,
	10931: 0x00005196,
	10932: 0x000051AB,
	10933: 0x000052F9,
	10934: 0x00005338,
	10935: 0x00005369,
	10936: 0x000053B6,
	10937: 0x0000590A,
	10938: 0x00005B80,
	10939: 0x00005DDB,
	10940: 0x00002F33,
	10941: 0x00005E7F,
	10942: 0x00005EF4,
	10943: 0x00005F50,
	10944: 0x00005F61,
	10945: 0x00006534,
	10946: 0x000065E0,
	10947: 0x00007592,
	10948: 0x00007676,
	10949: 0x00008FB5,
	10950: 0x000096B6,
	10951: 0x000000A8,
	10952: 0x000002C6,
	10953: 0x000030FD,
	10954: 0x000030FE,
	10955: 0x0000309D,
	10956: 0x0000309E,
	10957: 0x00003003,
	10958: 0x00004EDD,
	10959: 0x00003005,
	10960: 0x00003006,
	10961: 0x00003007,
	10962: 0x000030FC,
	10963: 0x0000FF3B,
	10964: 0x0000FF3D,
	10965: 0x0000273D,
	10966: 0x00003041,
	10967: 0x00003042,
	10968: 0x00003043,
	10969: 0x00003044,
	10970: 0x00003045,
	10971: 0x00003046,
	10972: 0x00003047,
	10973: 0x00003048,
	10974: 0x00003049,
	10975: 0x0000304A,
	10976: 0x0000304B,
	10977: 0x0000304C,
	10978: 0x0000304D,
	10979: 0x0000304E,
	10980: 0x0000304F,
	10981: 0x00003050,
	10982: 0x00003051,
	10983: 0x00003052,
	10984: 0x00003053,
	10985: 0x00003054,
	10986: 0x00003055,
	10987: 0x00003056,
	10988: 0x00003057,
	10989: 0x00003058,
	10990: 0x00003059,
	10991: 0x0000305A,
	10992: 0x0000305B,
	10993: 0x0000305C,
	10994: 0x0000305D,
	10995: 0x0000305E,
	10996: 0x0000305F,
	10997: 0x00003060,
	10998: 0x00003061,
	10999: 0x00003062,
	11000: 0x00003063,
	11001: 0x00003064,
	11002: 0x00003065,
	11003: 0x00003066,
	11004: 0x00003067,
	11005: 0x00003068,
	11006: 0x00003069,
	11007: 0x0000306A,
	11008: 0x0000306B,
	11009: 0x0000306C,
	11010: 0x0000306D,
	11011: 0x0000306E,
	11012: 0x0000306F,
	11013: 0x00003070,
	11014: 0x00003071,
	11015: 0x00003072,
	11016: 0x00003073,
	11017: 0x00003074,
	11018: 0x00003075,
	11019: 0x00003076,
	11020: 0x00003077,
	11021: 0x00003078,
	11022: 0x00003079,
	11023: 0x0000307A,
	11024: 0x0000307B,
	11025: 0x0000307C,
	11026: 0x0000307D,
	11027: 0x0000307E,
	11028: 0x0000307F,
	11029: 0x00003080,
	11030: 0x00003081,
	11031: 0x00003082,
	11032: 0x00003083,
	11033: 0x00003084,
	11034: 0x00003085,
	11035: 0x00003086,
	11036: 0x00003087,
	11037: 0x00003088,
	11038: 0x00003089,
	11039: 0x0000308A,
	11040: 0x0000308B,
	11041: 0x0000308C,
	11042: 0x0000308D,
	11043: 0x0000308E,
	11044: 0x0000308F,
	11045: 0x00003090,
	11046: 0x00003091,
	11047: 0x00003092,
	11048: 0x00003093,
	11049: 0x000030A1,
	11050: 0x000030A2,
	11051: 0x000030A3,
	11052: 0x000030A4,
	11053: 0x000030A5,
	11054: 0x000030A6,
	11055: 0x000030A7,
	11056: 0x000030A8,
	11057: 0x000030A9,
	11058: 0x000030AA,
	11059: 0x000030AB,
	11060: 0x000030AC,
	11061: 0x000030AD,
	11062: 0x000030AE,
	11063: 0x000030AF,
	11064: 0x000030B0,
	11065: 0x000030B1,
	11066: 0x000030B2,
	11067: 0x000030B3,
	11068: 0x000030B4,
	11069: 0x000030B5,
	11070: 0x000030B6,
	11071: 0x000030B7,
	11072: 0x000030B8,
	11073: 0x000030B9,
	11074: 0x000030BA,
	11075: 0x000030BB,
	11076: 0x000030BC,
	11077: 0x000030BD,
	11078: 0x000030BE,
	11079: 0x000030BF,
	11080: 0x000030C0,
	11081: 0x000030C1,
	11082: 0x000030C2,
	11083: 0x000030C3,
	11084: 0x000030C4,
	11085: 0x000030C5,
	11086: 0x000030C6,
	11087: 0x000030C7,
	11088: 0x000030C8,
	11089: 0x000030C9,
	11090: 0x000030CA,
	11091: 0x000030CB,
	11092: 0x000030CC,
	11093: 0x000030CD,
	11094: 0x000030CE,
	11095: 0x000030CF,
	11096: 0x000030D0,
	11097: 0x000030D1,
	11098: 0x000030D2,
	11099: 0x000030D3,
	11100: 0x000030D4,
	11101: 0x000030D5,
	11102: 0x000030D6,
	11103: 0x000030D7,
	11104: 0x000030D8,
	11105: 0x000030D9,
	11106: 0x000030DA,
	11107: 0x000030DB,
	11108: 0x000030DC,
	11109: 0x000030DD,
	11110: 0x000030DE,
	11111: 0x000030DF,
	11112: 0x000030E0,
	11113: 0x000030E1,
	11114: 0x000030E2,
	11115: 0x000030E3,
	11116: 0x000030E4,
	11117: 0x000030E5,
	11118: 0x000030E6,
	11119: 0x000030E7,
	11120: 0x000030E8,
	11121: 0x000030E9,
	11122: 0x000030EA,
	11123: 0x000030EB,
	11124: 0x000030EC,
	11125: 0x000030ED,
	11126: 0x000030EE,
	11127: 0x000030EF,
	11128: 0x000030F0,
	11129: 0x000030F1,
	11130: 0x000030F2,
	11131: 0x000030F3,
	11132: 0x000030F4,
	11133: 0x000030F5,
	11134: 0x000030F6,
	11135: 0x00000410,
	11136: 0x00000411,
	11137: 0x00000412,
	11138: 0x00000413,
	11139: 0x00000414,
	11140: 0x00000415,
	11141: 0x00000401,
	11142: 0x00000416,
	11143: 0x00000417,
	11144: 0x00000418,
	11145: 0x00000419,
	11146: 0x0000041A,
	11147: 0x0000041B,
	11148: 0x0000041C,
	11149: 0x0000041D,
	11150: 0x0000041E,
	11151: 0x0000041F,
	11152: 0x00000420,
	11153: 0x00000421,
	11154: 0x00000422,
	11155: 0x00000423,
	11156: 0x00000424,
	11157: 0x00000425,
	11158: 0x00000426,
	11159: 0x00000427,
	11160: 0x00000428,
	11161: 0x00000429,
	11162: 0x0000042A,
	11163: 0x0000042B,
	11164: 0x0000042C,
	11165: 0x0000042D,
	11166: 0x0000042E,
	11167: 0x0000042F,
	11168: 0x00000430,
	11169: 0x00000431,
	11170: 0x00000432,
	11171: 0x00000433,
	11172: 0x00000434,
	11173: 0x00000435,
	11174: 0x00000451,
	11175: 0x00000436,
	11176: 0x00000437,
	11177: 0x00000438,
	11178: 0x00000439,
	11179: 0x0000043A,
	11180: 0x0000043B,
	11181: 0x0000043C,
	11182: 0x0000043D,
	11183: 0x0000043E,
	11184: 0x0000043F,
	11185: 0x00000440,
	11186: 0x00000441,
	11187: 0x00000442,
	11188: 0x00000443,
	11189: 0x00000444,
	11190: 0x00000445,
	11191: 0x00000446,
	11192: 0x00000447,
	11193: 0x00000448,
	11194: 0x00000449,
	11195: 0x0000044A,
	11196: 0x0000044B,
	11197: 0x0000044C,
	11198: 0x0000044D,
	11199: 0x0000044E,
	11200: 0x0000044F,
	11201: 0x000021E7,
	11202: 0x000021B8,
	11203: 0x000021B9,
	11204: 0x000031CF,
	11205: 0x000200CC,
	11206: 0x00004E5A,
	11207: 0x0002008A,
	11208: 0x00005202,
	11209: 0x00004491,
	11210: 0x00009FB0,
	11211: 0x00005188,
	11212: 0x00009FB1,
	11213: 0x00027607,
	11254: 0x0000FFE2,
	11255: 0x0000FFE4,
	11256: 0x0000FF07,
	11257: 0x0000FF02,
	11258: 0x00003231,
	11259: 0x00002116,
	11260: 0x00002121,
	11261: 0x0000309B,
	11262: 0x0000309C,
	11263: 0x00002E80,
	11264: 0x00002E84,
	11265: 0x00002E86,
	11266: 0x00002E87,
	11267: 0x00002E88,
	11268: 0x00002E8A,
	11269: 0x00002E8C,
	11270: 0x00002E8D,
	11271: 0x00002E95,
	11272: 0x00002E9C,
	11273: 0x00002E9D,
	11274: 0x00002EA5,
	11275: 0x00002EA7,
	11276: 0x00002EAA,
	11277: 0x00002EAC,
	11278: 0x00002EAE,
	11279: 0x00002EB6,
	11280: 0x00002EBC,
	11281: 0x00002EBE,
	11282: 0x00002EC6,
	11283: 0x00002ECA,
	11284: 0x00002ECC,
	11285: 0x00002ECD,
	11286: 0x00002ECF,
	11287: 0x00002ED6,
	11288: 0x00002ED7,
	11289: 0x00002EDE,
	11290: 0x00002EE3,
	11294: 0x00000283,
	11295: 0x00000250,
	11296: 0x0000025B,
	11297: 0x00000254,
	11298: 0x00000275,
	11299: 0x00000153,
	11300: 0x000000F8,
	11301: 0x0000014B,
	11302: 0x0000028A,
	11303: 0x0000026A,
	11304: 0x00004E42,
	11305: 0x00004E5C,
	11306: 0x000051F5,
	11307: 0x0000531A,
	11308: 0x00005382,
	11309: 0x00004E07,
	11310: 0x00004E0C,
	11311: 0x00004E47,
	11312: 0x00004E8D,
	11313: 0x000056D7,
	11314: 0x0000FA0C,
	11315: 0x00005C6E,
	11316: 0x00005F73,
	11317: 0x00004E0F,
	11318: 0x00005187,
	11319: 0x00004E0E,
	11320: 0x00004E2E,
	11321: 0x00004E93,
	11322: 0x00004EC2,
	11323: 0x00004EC9,
	11324: 0x00004EC8,
	11325: 0x00005198,
	11326: 0x000052FC,
	11327: 0x0000536C,
	11328: 0x000053B9,
	11329: 0x00005720,
	11330: 0x00005903,
	11331: 0x0000592C,
	11332: 0x00005C10,
	11333: 0x00005DFF,
	11334: 0x000065E1,
	11335: 0x00006BB3,
	11336: 0x00006BCC,
	11337: 0x00006C14,
	11338: 0x0000723F,
	11339: 0x00004E31,
	11340: 0x00004E3C,
	11341: 0x00004EE8,
	11342: 0x00004EDC,
	11343: 0x00004EE9,
	11344: 0x00004EE1,
	11345: 0x00004EDD,
	11346: 0x00004EDA,
	11347: 0x0000520C,
	11348: 0x0000531C,
	11349: 0x0000534C,
	11350: 0x00005722,
	11351: 0x00005723,
	11352: 0x00005917,
	11353: 0x0000592F,
	11354: 0x00005B81,
	11355: 0x00005B84,
	11356: 0x00005C12,
	11357: 0x00005C3B,
	11358: 0x00005C74,
	11359: 0x00005C73,
	11360: 0x00005E04,
	11361: 0x00005E80,
	11362: 0x00005E82,
	11363: 0x00005FC9,
	11364: 0x00006209,
	11365: 0x00006250,
	11366: 0x00006C15,
	11367: 0x00006C36,
	11368: 0x00006C43,
	11369: 0x00006C3F,
	11370: 0x00006C3B,
	11371: 0x000072AE,
	11372: 0x000072B0,
	11373: 0x0000738A,
	11374: 0x000079B8,
	11375: 0x0000808A,
	11376: 0x0000961E,
	11377: 0x00004F0E,
	11378: 0x00004F18,
	11379: 0x00004F2C,
	11380: 0x00004EF5,
	11381: 0x00004F14,
	11382: 0x00004EF1,
	11383: 0x00004F00,
	11384: 0x00004EF7,
	11385: 0x00004F08,
	11386: 0x00004F1D,
	11387: 0x00004F02,
	11388: 0x00004F05,
	11389: 0x00004F22,
	11390: 0x00004F13,
	11391: 0x00004F04,
	11392: 0x00004EF4,
	11393: 0x00004F12,
	11394: 0x000051B1,
	11395: 0x00005213,
	11396: 0x00005209,
	11397: 0x00005210,
	11398: 0x000052A6,
	11399: 0x00005322,
	11400: 0x0000531F,
	11401: 0x0000534D,
	11402: 0x0000538A,
	11403: 0x00005407,
	11404: 0x000056E1,
	11405: 0x000056DF,
	11406: 0x0000572E,
	11407: 0x0000572A,
	11408: 0x00005734,
	11409: 0x0000593C,
	11410: 0x00005980,
	11411: 0x0000597C,
	11412: 0x00005985,
	11413: 0x0000597B,
	11414: 0x0000597E,
	11415: 0x00005977,
	11416: 0x0000597F,
	11417: 0x00005B56,
	11418: 0x00005C15,
	11419: 0x00005C25,
	11420: 0x00005C7C,
	11421: 0x00005C7A,
	11422: 0x00005C7B,
	11423: 0x00005C7E,
	11424: 0x00005DDF,
	11425: 0x00005E75,
	11426: 0x00005E84,
	11427: 0x00005F02,
	11428: 0x00005F1A,
	11429: 0x00005F74,
	11430: 0x00005FD5,
	11431: 0x00005FD4,
	11432: 0x00005FCF,
	11433: 0x0000625C,
	11434: 0x0000625E,
	11435: 0x00006264,
	11436: 0x00006261,
	11437: 0x00006266,
	11438: 0x00006262,
	11439: 0x00006259,
	11440: 0x00006260,
	11441: 0x0000625A,
	11442: 0x00006265,
	11443: 0x000065EF,
	11444: 0x000065EE,
	11445: 0x0000673E,
	11446: 0x00006739,
	11447: 0x00006738,
	11448: 0x0000673B,
	11449: 0x0000673A,
	11450: 0x0000673F,
	11451: 0x0000673C,
	11452: 0x00006733,
	11453: 0x00006C18,
	11454: 0x00006C46,
	11455: 0x00006C52,
	11456: 0x00006C5C,
	11457: 0x00006C4F,
	11458: 0x00006C4A,
	11459: 0x00006C54,
	11460: 0x00006C4B,
	11461: 0x00006C4C,
	11462: 0x00007071,
	11463: 0x0000725E,
	11464: 0x000072B4,
	11465: 0x000072B5,
	11466: 0x0000738E,
	11467: 0x0000752A,
	11468: 0x0000767F,
	11469: 0x00007A75,
	11470: 0x00007F51,
	11471: 0x00008278,
	11472: 0x0000827C,
	11473: 0x00008280,
	11474: 0x0000827D,
	11475: 0x0000827F,
	11476: 0x0000864D,
	11477: 0x0000897E,
	11478: 0x00009099,
	11479: 0x00009097,
	11480: 0x00009098,
	11481: 0x0000909B,
	11482: 0x00009094,
	11483: 0x00009622,
	11484: 0x00009624,
	11485: 0x00009620,
	11486: 0x00009623,
	11487: 0x00004F56,
	11488: 0x00004F3B,
	11489: 0x00004F62,
	11490: 0x00004F49,
	11491: 0x00004F53,
	11492: 0x00004F64,
	11493: 0x00004F3E,
	11494: 0x00004F67,
	11495: 0x00004F52,
	11496: 0x00004F5F,
	11497: 0x00004F41,
	11498: 0x00004F58,
	11499: 0x00004F2D,
	11500: 0x00004F33,
	11501: 0x00004F3F,
	11502: 0x00004F61,
	11503: 0x0000518F,
	11504: 0x000051B9,
	11505: 0x0000521C,
	11506: 0x0000521E,
	11507: 0x00005221,
	11508: 0x000052AD,
	11509: 0x000052AE,
	11510: 0x00005309,
	11511: 0x00005363,
	11512: 0x00005372,
	11513: 0x0000538E,
	11514: 0x0000538F,
	11515: 0x00005430,
	11516: 0x00005437,
	11517: 0x0000542A,
	11518: 0x00005454,
	11519: 0x00005445,
	11520: 0x00005419,
	11521: 0x0000541C,
	11522: 0x00005425,
	11523: 0x00005418,
	11524: 0x0000543D,
	11525: 0x0000544F,
	11526: 0x00005441,
	11527: 0x00005428,
	11528: 0x00005424,
	11529: 0x00005447,
	11530: 0x000056EE,
	11531: 0x000056E7,
	11532: 0x000056E5,
	11533: 0x00005741,
	11534: 0x00005745,
	11535: 0x0000574C,
	11536: 0x00005749,
	11537: 0x0000574B,
	11538: 0x00005752,
	11539: 0x00005906,
	11540: 0x00005940,
	11541: 0x000059A6,
	11542: 0x00005998,
	11543: 0x000059A0,
	11544: 0x00005997,
	11545: 0x0000598E,
	11546: 0x000059A2,
	11547: 0x00005990,
	11548: 0x0000598F,
	11549: 0x000059A7,
	11550: 0x000059A1,
	11551: 0x00005B8E,
	11552: 0x00005B92,
	11553: 0x00005C28,
	11554: 0x00005C2A,
	11555: 0x00005C8D,
	11556: 0x00005C8F,
	11557: 0x00005C88,
	11558: 0x00005C8B,
	11559: 0x00005C89,
	11560: 0x00005C92,
	11561: 0x00005C8A,
	11562: 0x00005C86,
	11563: 0x00005C93,
	11564: 0x00005C95,
	11565: 0x00005DE0,
	11566: 0x00005E0A,
	11567: 0x00005E0E,
	11568: 0x00005E8B,
	11569: 0x00005E89,
	11570: 0x00005E8C,
	11571: 0x00005E88,
	11572: 0x00005E8D,
	11573: 0x00005F05,
	11574: 0x00005F1D,
	11575: 0x00005F78,
	11576: 0x00005F76,
	11577: 0x00005FD2,
	11578: 0x00005FD1,
	11579: 0x00005FD0,
	11580: 0x00005FED,
	11581: 0x00005FE8,
	11582: 0x00005FEE,
	11583: 0x00005FF3,
	11584: 0x00005FE1,
	11585: 0x00005FE4,
	11586: 0x00005FE3,
	11587: 0x00005FFA,
	11588: 0x00005FEF,
	11589: 0x00005FF7,
	11590: 0x00005FFB,
	11591: 0x00006000,
	11592: 0x00005FF4,
	11593: 0x0000623A,
	11594: 0x00006283,
	11595: 0x0000628C,
	11596: 0x0000628E,
	11597: 0x0000628F,
	11598: 0x00006294,
	11599: 0x00006287,
	11600: 0x00006271,
	11601: 0x0000627B,
	11602: 0x0000627A,
	11603: 0x00006270,
	11604: 0x00006281,
	11605: 0x00006288,
	11606: 0x00006277,
	11607: 0x0000627D,
	11608: 0x00006272,
	11609: 0x00006274,
	11610: 0x00006537,
	11611: 0x000065F0,
	11612: 0x000065F4,
	11613: 0x000065F3,
	11614: 0x000065F2,
	11615: 0x000065F5,
	11616: 0x00006745,
	11617: 0x00006747,
	11618: 0x00006759,
	11619: 0x00006755,
	11620: 0x0000674C,
	11621: 0x00006748,
	11622: 0x0000675D,
	11623: 0x0000674D,
	11624: 0x0000675A,
	11625: 0x0000674B,
	11626: 0x00006BD0,
	11627: 0x00006C19,
	11628: 0x00006C1A,
	11629: 0x00006C78,
	11630: 0x00006C67,
	11631: 0x00006C6B,
	11632: 0x00006C84,
	11633: 0x00006C8B,
	11634: 0x00006C8F,
	11635: 0x00006C71,
	11636: 0x00006C6F,
	11637: 0x00006C69,
	11638: 0x00006C9A,
	11639: 0x00006C6D,
	11640: 0x00006C87,
	11641: 0x00006C95,
	11642: 0x00006C9C,
	11643: 0x00006C66,
	11644: 0x00006C73,
	11645: 0x00006C65,
	11646: 0x00006C7B,
	11647: 0x00006C8E,
	11648: 0x00007074,
	11649: 0x0000707A,
	11650: 0x00007263,
	11651: 0x000072BF,
	11652: 0x000072BD,
	11653: 0x000072C3,
	11654: 0x000072C6,
	11655: 0x000072C1,
	11656: 0x000072BA,
	11657: 0x000072C5,
	11658: 0x00007395,
	11659: 0x00007397,
	11660: 0x00007393,
	11661: 0x00007394,
	11662: 0x00007392,
	11663: 0x0000753A,
	11664: 0x00007539,
	11665: 0x00007594,
	11666: 0x00007595,
	11667: 0x00007681,
	11668: 0x0000793D,
	11669: 0x00008034,
	11670: 0x00008095,
	11671: 0x00008099,
	11672: 0x00008090,
	11673: 0x00008092,
	11674: 0x0000809C,
	11675: 0x00008290,
	11676: 0x0000828F,
	11677: 0x00008285,
	11678: 0x0000828E,
	11679: 0x00008291,
	11680: 0x00008293,
	11681: 0x0000828A,
	11682: 0x00008283,
	11683: 0x00008284,
	11684: 0x00008C78,
	11685: 0x00008FC9,
	11686: 0x00008FBF,
	11687: 0x0000909F,
	11688: 0x000090A1,
	11689: 0x000090A5,
	11690: 0x0000909E,
	11691: 0x000090A7,
	11692: 0x000090A0,
	11693: 0x00009630,
	11694: 0x00009628,
	11695: 0x0000962F,
	11696: 0x0000962D,
	11697: 0x00004E33,
	11698: 0x00004F98,
	11699: 0x00004F7C,
	11700: 0x00004F85,
	11701: 0x00004F7D,
	11702: 0x00004F80,
	11703: 0x00004F87,
	11704: 0x00004F76,
	11705: 0x00004F74,
	11706: 0x00004F89,
	11707: 0x00004F84,
	11708: 0x00004F77,
	11709: 0x00004F4C,
	11710: 0x00004F97,
	11711: 0x00004F6A,
	11712: 0x00004F9A,
	11713: 0x00004F79,
	11714: 0x00004F81,
	11715: 0x00004F78,
	11716: 0x00004F90,
	11717: 0x00004F9C,
	11718: 0x00004F94,
	11719: 0x00004F9E,
	11720: 0x00004F92,
	11721: 0x00004F82,
	11722: 0x00004F95,
	11723: 0x00004F6B,
	11724: 0x00004F6E,
	11725: 0x0000519E,
	11726: 0x000051BC,
	11727: 0x000051BE,
	11728: 0x00005235,
	11729: 0x00005232,
	11730: 0x00005233,
	11731: 0x00005246,
	11732: 0x00005231,
	11733: 0x000052BC,
	11734: 0x0000530A,
	11735: 0x0000530B,
	11736: 0x0000533C,
	11737: 0x00005392,
	11738: 0x00005394,
	11739: 0x00005487,
	11740: 0x0000547F,
	11741: 0x00005481,
	11742: 0x00005491,
	11743: 0x00005482,
	11744: 0x00005488,
	11745: 0x0000546B,
	11746: 0x0000547A,
	11747: 0x0000547E,
	11748: 0x00005465,
	11749: 0x0000546C,
	11750: 0x00005474,
	11751: 0x00005466,
	11752: 0x0000548D,
	11753: 0x0000546F,
	11754: 0x00005461,
	11755: 0x00005460,
	11756: 0x00005498,
	11757: 0x00005463,
	11758: 0x00005467,
	11759: 0x00005464,
	11760: 0x000056F7,
	11761: 0x000056F9,
	11762: 0x0000576F,
	11763: 0x00005772,
	11764: 0x0000576D,
	11765: 0x0000576B,
	11766: 0x00005771,
	11767: 0x00005770,
	11768: 0x00005776,
	11769: 0x00005780,
	11770: 0x00005775,
	11771: 0x0000577B,
	11772: 0x00005773,
	11773: 0x00005774,
	11774: 0x00005762,
	11775: 0x00005768,
	11776: 0x0000577D,
	11777: 0x0000590C,
	11778: 0x00005945,
	11779: 0x000059B5,
	11780: 0x000059BA,
	11781: 0x000059CF,
	11782: 0x000059CE,
	11783: 0x000059B2,
	11784: 0x000059CC,
	11785: 0x000059C1,
	11786: 0x000059B6,
	11787: 0x000059BC,
	11788: 0x000059C3,
	11789: 0x000059D6,
	11790: 0x000059B1,
	11791: 0x000059BD,
	11792: 0x000059C0,
	11793: 0x000059C8,
	11794: 0x000059B4,
	11795: 0x000059C7,
	11796: 0x00005B62,
	11797: 0x00005B65,
	11798: 0x00005B93,
	11799: 0x00005B95,
	11800: 0x00005C44,
	11801: 0x00005C47,
	11802: 0x00005CAE,
	11803: 0x00005CA4,
	11804: 0x00005CA0,
	11805: 0x00005CB5,
	11806: 0x00005CAF,
	11807: 0x00005CA8,
	11808: 0x00005CAC,
	11809: 0x00005C9F,
	11810: 0x00005CA3,
	11811: 0x00005CAD,
	11812: 0x00005CA2,
	11813: 0x00005CAA,
	11814: 0x00005CA7,
	11815: 0x00005C9D,
	11816: 0x00005CA5,
	11817: 0x00005CB6,
	11818: 0x00005CB0,
	11819: 0x00005CA6,
	11820: 0x00005E17,
	11821: 0x00005E14,
	11822: 0x00005E19,
	11823: 0x00005F28,
	11824: 0x00005F22,
	11825: 0x00005F23,
	11826: 0x00005F24,
	11827: 0x00005F54,
	11828: 0x00005F82,
	11829: 0x00005F7E,
	11830: 0x00005F7D,
	11831: 0x00005FDE,
	11832: 0x00005FE5,
	11833: 0x0000602D,
	11834: 0x00006026,
	11835: 0x00006019,
	11836: 0x00006032,
	11837: 0x0000600B,
	11838: 0x00006034,
	11839: 0x0000600A,
	11840: 0x00006017,
	11841: 0x00006033,
	11842: 0x0000601A,
	11843: 0x0000601E,
	11844: 0x0000602C,
	11845: 0x00006022,
	11846: 0x0000600D,
	11847: 0x00006010,
	11848: 0x0000602E,
	11849: 0x00006013,
	11850: 0x00006011,
	11851: 0x0000600C,
	11852: 0x00006009,
	11853: 0x0000601C,
	11854: 0x00006214,
	11855: 0x0000623D,
	11856: 0x000062AD,
	11857: 0x000062B4,
	11858: 0x000062D1,
	11859: 0x000062BE,
	11860: 0x000062AA,
	11861: 0x000062B6,
	11862: 0x000062CA,
	11863: 0x000062AE,
	11864: 0x000062B3,
	11865: 0x000062AF,
	11866: 0x000062BB,
	11867: 0x000062A9,
	11868: 0x000062B0,
	11869: 0x000062B8,
	11870: 0x0000653D,
	11871: 0x000065A8,
	11872: 0x000065BB,
	11873: 0x00006609,
	11874: 0x000065FC,
	11875: 0x00006604,
	11876: 0x00006612,
	11877: 0x00006608,
	11878: 0x000065FB,
	11879: 0x00006603,
	11880: 0x0000660B,
	11881: 0x0000660D,
	11882: 0x00006605,
	11883: 0x000065FD,
	11884: 0x00006611,
	11885: 0x00006610,
	11886: 0x000066F6,
	11887: 0x0000670A,
	11888: 0x00006785,
	11889: 0x0000676C,
	11890: 0x0000678E,
	11891: 0x00006792,
	11892: 0x00006776,
	11893: 0x0000677B,
	11894: 0x00006798,
	11895: 0x00006786,
	11896: 0x00006784,
	11897: 0x00006774,
	11898: 0x0000678D,
	11899: 0x0000678C,
	11900: 0x0000677A,
	11901: 0x0000679F,
	11902: 0x00006791,
	11903: 0x00006799,
	11904: 0x00006783,
	11905: 0x0000677D,
	11906: 0x00006781,
	11907: 0x00006778,
	11908: 0x00006779,
	11909: 0x00006794,
	11910: 0x00006B25,
	11911: 0x00006B80,
	11912: 0x00006B7E,
	11913: 0x00006BDE,
	11914: 0x00006C1D,
	11915: 0x00006C93,
	11916: 0x00006CEC,
	11917: 0x00006CEB,
	11918: 0x00006CEE,
	11919: 0x00006CD9,
	11920: 0x00006CB6,
	11921: 0x00006CD4,
	11922: 0x00006CAD,
	11923: 0x00006CE7,
	11924: 0x00006CB7,
	11925: 0x00006CD0,
	11926: 0x00006CC2,
	11927: 0x00006CBA,
	11928: 0x00006CC3,
	11929: 0x00006CC6,
	11930: 0x00006CED,
	11931: 0x00006CF2,
	11932: 0x00006CD2,
	11933: 0x00006CDD,
	11934: 0x00006CB4,
	11935: 0x00006C8A,
	11936: 0x00006C9D,
	11937: 0x00006C80,
	11938: 0x00006CDE,
	11939: 0x00006CC0,
	11940: 0x00006D30,
	11941: 0x00006CCD,
	11942: 0x00006CC7,
	11943: 0x00006CB0,
	11944: 0x00006CF9,
	11945: 0x00006CCF,
	11946: 0x00006CE9,
	11947: 0x00006CD1,
	11948: 0x00007094,
	11949: 0x00007098,
	11950: 0x00007085,
	11951: 0x00007093,
	11952: 0x00007086,
	11953: 0x00007084,
	11954: 0x00007091,
	11955: 0x00007096,
	11956: 0x00007082,
	11957: 0x0000709A,
	11958: 0x00007083,
	11959: 0x0000726A,
	11960: 0x000072D6,
	11961: 0x000072CB,
	11962: 0x000072D8,
	11963: 0x000072C9,
	11964: 0x000072DC,
	11965: 0x000072D2,
	11966: 0x000072D4,
	11967: 0x000072DA,
	11968: 0x000072CC,
	11969: 0x000072D1,
	11970: 0x000073A4,
	11971: 0x000073A1,
	11972: 0x000073AD,
	11973: 0x000073A6,
	11974: 0x000073A2,
	11975: 0x000073A0,
	11976: 0x000073AC,
	11977: 0x0000739D,
	11978: 0x000074DD,
	11979: 0x000074E8,
	11980: 0x0000753F,
	11981: 0x00007540,
	11982: 0x0000753E,
	11983: 0x0000758C,
	11984: 0x00007598,
	11985: 0x000076AF,
	11986: 0x000076F3,
	11987: 0x000076F1,
	11988: 0x000076F0,
	11989: 0x000076F5,
	11990: 0x000077F8,
	11991: 0x000077FC,
	11992: 0x000077F9,
	11993: 0x000077FB,
	11994: 0x000077FA,
	11995: 0x000077F7,
	11996: 0x00007942,
	11997: 0x0000793F,
	11998: 0x000079C5,
	11999: 0x00007A78,
	12000: 0x00007A7B,
	12001: 0x00007AFB,
	12002: 0x00007C75,
	12003: 0x00007CFD,
	12004: 0x00008035,
	12005: 0x0000808F,
	12006: 0x000080AE,
	12007: 0x000080A3,
	12008: 0x000080B8,
	12009: 0x000080B5,
	12010: 0x000080AD,
	12011: 0x00008220,
	12012: 0x000082A0,
	12013: 0x000082C0,
	12014: 0x000082AB,
	12015: 0x0000829A,
	12016: 0x00008298,
	12017: 0x0000829B,
	12018: 0x000082B5,
	12019: 0x000082A7,
	12020: 0x000082AE,
	12021: 0x000082BC,
	12022: 0x0000829E,
	12023: 0x000082BA,
	12024: 0x000082B4,
	12025: 0x000082A8,
	12026: 0x000082A1,
	12027: 0x000082A9,
	12028: 0x000082C2,
	12029: 0x000082A4,
	12030: 0x000082C3,
	12031: 0x000082B6,
	12032: 0x000082A2,
	12033: 0x00008670,
	12034: 0x0000866F,
	12035: 0x0000866D,
	12036: 0x0000866E,
	12037: 0x00008C56,
	12038: 0x00008FD2,
	12039: 0x00008FCB,
	12040: 0x00008FD3,
	12041: 0x00008FCD,
	12042: 0x00008FD6,
	12043: 0x00008FD5,
	12044: 0x00008FD7,
	12045: 0x000090B2,
	12046: 0x000090B4,
	12047: 0x000090AF,
	12048: 0x000090B3,
	12049: 0x000090B0,
	12050: 0x00009639,
	12051: 0x0000963D,
	12052: 0x0000963C,
	12053: 0x0000963A,
	12054: 0x00009643,
	12055: 0x00004FCD,
	12056: 0x00004FC5,
	12057: 0x00004FD3,
	12058: 0x00004FB2,
	12059: 0x00004FC9,
	12060: 0x00004FCB,
	12061: 0x00004FC1,
	12062: 0x00004FD4,
	12063: 0x00004FDC,
	12064: 0x00004FD9,
	12065: 0x00004FBB,
	12066: 0x00004FB3,
	12067: 0x00004FDB,
	12068: 0x00004FC7,
	12069: 0x00004FD6,
	12070: 0x00004FBA,
	12071: 0x00004FC0,
	12072: 0x00004FB9,
	12073: 0x00004FEC,
	12074: 0x00005244,
	12075: 0x00005249,
	12076: 0x000052C0,
	12077: 0x000052C2,
	12078: 0x0000533D,
	12079: 0x0000537C,
	12080: 0x00005397,
	12081: 0x00005396,
	12082: 0x00005399,
	12083: 0x00005398,
	12084: 0x000054BA,
	12085: 0x000054A1,
	12086: 0x000054AD,
	12087: 0x000054A5,
	12088: 0x000054CF,
	12089: 0x000054C3,
	12090: 0x0000830D,
	12091: 0x000054B7,
	12092: 0x000054AE,
	12093: 0x000054D6,
	12094: 0x000054B6,
	12095: 0x000054C5,
	12096: 0x000054C6,
	12097: 0x000054A0,
	12098: 0x00005470,
	12099: 0x000054BC,
	12100: 0x000054A2,
	12101: 0x000054BE,
	12102: 0x00005472,
	12103: 0x000054DE,
	12104: 0x000054B0,
	12105: 0x000057B5,
	12106: 0x0000579E,
	12107: 0x0000579F,
	12108: 0x000057A4,
	12109: 0x0000578C,
	12110: 0x00005797,
	12111: 0x0000579D,
	12112: 0x0000579B,
	12113: 0x00005794,
	12114: 0x00005798,
	12115: 0x0000578F,
	12116: 0x00005799,
	12117: 0x000057A5,
	12118: 0x0000579A,
	12119: 0x00005795,
	12120: 0x000058F4,
	12121: 0x0000590D,
	12122: 0x00005953,
	12123: 0x000059E1,
	12124: 0x000059DE,
	12125: 0x000059EE,
	12126: 0x00005A00,
	12127: 0x000059F1,
	12128: 0x000059DD,
	12129: 0x000059FA,
	12130: 0x000059FD,
	12131: 0x000059FC,
	12132: 0x000059F6,
	12133: 0x000059E4,
	12134: 0x000059F2,
	12135: 0x000059F7,
	12136: 0x000059DB,
	12137: 0x000059E9,
	12138: 0x000059F3,
	12139: 0x000059F5,
	12140: 0x000059E0,
	12141: 0x000059FE,
	12142: 0x000059F4,
	12143: 0x000059ED,
	12144: 0x00005BA8,
	12145: 0x00005C4C,
	12146: 0x00005CD0,
	12147: 0x00005CD8,
	12148: 0x00005CCC,
	12149: 0x00005CD7,
	12150: 0x00005CCB,
	12151: 0x00005CDB,
	12152: 0x00005CDE,
	12153: 0x00005CDA,
	12154: 0x00005CC9,
	12155: 0x00005CC7,
	12156: 0x00005CCA,
	12157: 0x00005CD6,
	12158: 0x00005CD3,
	12159: 0x00005CD4,
	12160: 0x00005CCF,
	12161: 0x00005CC8,
	12162: 0x00005CC6,
	12163: 0x00005CCE,
	12164: 0x00005CDF,
	12165: 0x00005CF8,
	12166: 0x00005DF9,
	12167: 0x00005E21,
	12168: 0x00005E22,
	12169: 0x00005E23,
	12170: 0x00005E20,
	12171: 0x00005E24,
	12172: 0x00005EB0,
	12173: 0x00005EA4,
	12174: 0x00005EA2,
	12175: 0x00005E9B,
	12176: 0x00005EA3,
	12177: 0x00005EA5,
	12178: 0x00005F07,
	12179: 0x00005F2E,
	12180: 0x00005F56,
	12181: 0x00005F86,
	12182: 0x00006037,
	12183: 0x00006039,
	12184: 0x00006054,
	12185: 0x00006072,
	12186: 0x0000605E,
	12187: 0x00006045,
	12188: 0x00006053,
	12189: 0x00006047,
	12190: 0x00006049,
	12191: 0x0000605B,
	12192: 0x0000604C,
	12193: 0x00006040,
	12194: 0x00006042,
	12195: 0x0000605F,
	12196: 0x00006024,
	12197: 0x00006044,
	12198: 0x00006058,
	12199: 0x00006066,
	12200: 0x0000606E,
	12201: 0x00006242,
	12202: 0x00006243,
	12203: 0x000062CF,
	12204: 0x0000630D,
	12205: 0x0000630B,
	12206: 0x000062F5,
	12207: 0x0000630E,
	12208: 0x00006303,
	12209: 0x000062EB,
	12210: 0x000062F9,
	12211: 0x0000630F,
	12212: 0x0000630C,
	12213: 0x000062F8,
	12214: 0x000062F6,
	12215: 0x00006300,
	12216: 0x00006313,
	12217: 0x00006314,
	12218: 0x000062FA,
	12219: 0x00006315,
	12220: 0x000062FB,
	12221: 0x000062F0,
	12222: 0x00006541,
	12223: 0x00006543,
	12224: 0x000065AA,
	12225: 0x000065BF,
	12226: 0x00006636,
	12227: 0x00006621,
	12228: 0x00006632,
	12229: 0x00006635,
	12230: 0x0000661C,
	12231: 0x00006626,
	12232: 0x00006622,
	12233: 0x00006633,
	12234: 0x0000662B,
	12235: 0x0000663A,
	12236: 0x0000661D,
	12237: 0x00006634,
	12238: 0x00006639,
	12239: 0x0000662E,
	12240: 0x0000670F,
	12241: 0x00006710,
	12242: 0x000067C1,
	12243: 0x000067F2,
	12244: 0x000067C8,
	12245: 0x000067BA,
	12246: 0x000067DC,
	12247: 0x000067BB,
	12248: 0x000067F8,
	12249: 0x000067D8,
	12250: 0x000067C0,
	12251: 0x000067B7,
	12252: 0x000067C5,
	12253: 0x000067EB,
	12254: 0x000067E4,
	12255: 0x000067DF,
	12256: 0x000067B5,
	12257: 0x000067CD,
	12258: 0x000067B3,
	12259: 0x000067F7,
	12260: 0x000067F6,
	12261: 0x000067EE,
	12262: 0x000067E3,
	12263: 0x000067C2,
	12264: 0x000067B9,
	12265: 0x000067CE,
	12266: 0x000067E7,
	12267: 0x000067F0,
	12268: 0x000067B2,
	12269: 0x000067FC,
	12270: 0x000067C6,
	12271: 0x000067ED,
	12272: 0x000067CC,
	12273: 0x000067AE,
	12274: 0x000067E6,
	12275: 0x000067DB,
	12276: 0x000067FA,
	12277: 0x000067C9,
	12278: 0x000067CA,
	12279: 0x000067C3,
	12280: 0x000067EA,
	12281: 0x000067CB,
	12282: 0x00006B28,
	12283: 0x00006B82,
	12284: 0x00006B84,
	12285: 0x00006BB6,
	12286: 0x00006BD6,
	12287: 0x00006BD8,
	12288: 0x00006BE0,
	12289: 0x00006C20,
	12290: 0x00006C21,
	12291: 0x00006D28,
	12292: 0x00006D34,
	12293: 0x00006D2D,
	12294: 0x00006D1F,
	12295: 0x00006D3C,
	12296: 0x00006D3F,
	12297: 0x00006D12,
	12298: 0x00006D0A,
	12299: 0x00006CDA,
	12300: 0x00006D33,
	12301: 0x00006D04,
	12302: 0x00006D19,
	12303: 0x00006D3A,
	12304: 0x00006D1A,
	12305: 0x00006D11,
	12306: 0x00006D00,
	12307: 0x00006D1D,
	12308: 0x00006D42,
	12309: 0x00006D01,
	12310: 0x00006D18,
	12311: 0x00006D37,
	12312: 0x00006D03,
	12313: 0x00006D0F,
	12314: 0x00006D40,
	12315: 0x00006D07,
	12316: 0x00006D20,
	12317: 0x00006D2C,
	12318: 0x00006D08,
	12319: 0x00006D22,
	12320: 0x00006D09,
	12321: 0x00006D10,
	12322: 0x000070B7,
	12323: 0x0000709F,
	12324: 0x000070BE,
	12325: 0x000070B1,
	12326: 0x000070B0,
	12327: 0x000070A1,
	12328: 0x000070B4,
	12329: 0x000070B5,
	12330: 0x000070A9,
	12331: 0x00007241,
	12332: 0x00007249,
	12333: 0x0000724A,
	12334: 0x0000726C,
	12335: 0x00007270,
	12336: 0x00007273,
	12337: 0x0000726E,
	12338: 0x000072CA,
	12339: 0x000072E4,
	12340: 0x000072E8,
	12341: 0x000072EB,
	12342: 0x000072DF,
	12343: 0x000072EA,
	12344: 0x000072E6,
	12345: 0x000072E3,
	12346: 0x00007385,
	12347: 0x000073CC,
	12348: 0x000073C2,
	12349: 0x000073C8,
	12350: 0x000073C5,
	12351: 0x000073B9,
	12352: 0x000073B6,
	12353: 0x000073B5,
	12354: 0x000073B4,
	12355: 0x000073EB,
	12356: 0x000073BF,
	12357: 0x000073C7,
	12358: 0x000073BE,
	12359: 0x000073C3,
	12360: 0x000073C6,
	12361: 0x000073B8,
	12362: 0x000073CB,
	12363: 0x000074EC,
	12364: 0x000074EE,
	12365: 0x0000752E,
	12366: 0x00007547,
	12367: 0x00007548,
	12368: 0x000075A7,
	12369: 0x000075AA,
	12370: 0x00007679,
	12371: 0x000076C4,
	12372: 0x00007708,
	12373: 0x00007703,
	12374: 0x00007704,
	12375: 0x00007705,
	12376: 0x0000770A,
	12377: 0x000076F7,
	12378: 0x000076FB,
	12379: 0x000076FA,
	12380: 0x000077E7,
	12381: 0x000077E8,
	12382: 0x00007806,
	12383: 0x00007811,
	12384: 0x00007812,
	12385: 0x00007805,
	12386: 0x00007810,
	12387: 0x0000780F,
	12388: 0x0000780E,
	12389: 0x00007809,
	12390: 0x00007803,
	12391: 0x00007813,
	12392: 0x0000794A,
	12393: 0x0000794C,
	12394: 0x0000794B,
	12395: 0x00007945,
	12396: 0x00007944,
	12397: 0x000079D5,
	12398: 0x000079CD,
	12399: 0x000079CF,
	12400: 0x000079D6,
	12401: 0x000079CE,
	12402: 0x00007A80,
	12403: 0x00007A7E,
	12404: 0x00007AD1,
	12405: 0x00007B00,
	12406: 0x00007B01,
	12407: 0x00007C7A,
	12408: 0x00007C78,
	12409: 0x00007C79,
	12410: 0x00007C7F,
	12411: 0x00007C80,
	12412: 0x00007C81,
	12413: 0x00007D03,
	12414: 0x00007D08,
	12415: 0x00007D01,
	12416: 0x00007F58,
	12417: 0x00007F91,
	12418: 0x00007F8D,
	12419: 0x00007FBE,
	12420: 0x00008007,
	12421: 0x0000800E,
	12422: 0x0000800F,
	12423: 0x00008014,
	12424: 0x00008037,
	12425: 0x000080D8,
	12426: 0x000080C7,
	12427: 0x000080E0,
	12428: 0x000080D1,
	12429: 0x000080C8,
	12430: 0x000080C2,
	12431: 0x000080D0,
	12432: 0x000080C5,
	12433: 0x000080E3,
	12434: 0x000080D9,
	12435: 0x000080DC,
	12436: 0x000080CA,
	12437: 0x000080D5,
	12438: 0x000080C9,
	12439: 0x000080CF,
	12440: 0x000080D7,
	12441: 0x000080E6,
	12442: 0x000080CD,
	12443: 0x000081FF,
	12444: 0x00008221,
	12445: 0x00008294,
	12446: 0x000082D9,
	12447: 0x000082FE,
	12448: 0x000082F9,
	12449: 0x00008307,
	12450: 0x000082E8,
	12451: 0x00008300,
	12452: 0x000082D5,
	12453: 0x0000833A,
	12454: 0x000082EB,
	12455: 0x000082D6,
	12456: 0x000082F4,
	12457: 0x000082EC,
	12458: 0x000082E1,
	12459: 0x000082F2,
	12460: 0x000082F5,
	12461: 0x0000830C,
	12462: 0x000082FB,
	12463: 0x000082F6,
	12464: 0x000082F0,
	12465: 0x000082EA,
	12466: 0x000082E4,
	12467: 0x000082E0,
	12468: 0x000082FA,
	12469: 0x000082F3,
	12470: 0x000082ED,
	12471: 0x00008677,
	12472: 0x00008674,
	12473: 0x0000867C,
	12474: 0x00008673,
	12475: 0x00008841,
	12476: 0x0000884E,
	12477: 0x00008867,
	12478: 0x0000886A,
	12479: 0x00008869,
	12480: 0x000089D3,
	12481: 0x00008A04,
	12482: 0x00008A07,
	12483: 0x00008D72,
	12484: 0x00008FE3,
	12485: 0x00008FE1,
	12486: 0x00008FEE,
	12487: 0x00008FE0,
	12488: 0x000090F1,
	12489: 0x000090BD,
	12490: 0x000090BF,
	12491: 0x000090D5,
	12492: 0x000090C5,
	12493: 0x000090BE,
	12494: 0x000090C7,
	12495: 0x000090CB,
	12496: 0x000090C8,
	12497: 0x000091D4,
	12498: 0x000091D3,
	12499: 0x00009654,
	12500: 0x0000964F,
	12501: 0x00009651,
	12502: 0x00009653,
	12503: 0x0000964A,
	12504: 0x0000964E,
	12505: 0x0000501E,
	12506: 0x00005005,
	12507: 0x00005007,
	12508: 0x00005013,
	12509: 0x00005022,
	12510: 0x00005030,
	12511: 0x0000501B,
	12512: 0x00004FF5,
	12513: 0x00004FF4,
	12514: 0x00005033,
	12515: 0x00005037,
	12516: 0x0000502C,
	12517: 0x00004FF6,
	12518: 0x00004FF7,
	12519: 0x00005017,
	12520: 0x0000501C,
	12521: 0x00005020,
	12522: 0x00005027,
	12523: 0x00005035,
	12524: 0x0000502F,
	12525: 0x00005031,
	12526: 0x0000500E,
	12527: 0x0000515A,
	12528: 0x00005194,
	12529: 0x00005193,
	12530: 0x000051CA,
	12531: 0x000051C4,
	12532: 0x000051C5,
	12533: 0x000051C8,
	12534: 0x000051CE,
	12535: 0x00005261,
	12536: 0x0000525A,
	12537: 0x00005252,
	12538: 0x0000525E,
	12539: 0x0000525F,
	12540: 0x00005255,
	12541: 0x00005262,
	12542: 0x000052CD,
	12543: 0x0000530E,
	12544: 0x0000539E,
	12545: 0x00005526,
	12546: 0x000054E2,
	12547: 0x00005517,
	12548: 0x00005512,
	12549: 0x000054E7,
	12550: 0x000054F3,
	12551: 0x000054E4,
	12552: 0x0000551A,
	12553: 0x000054FF,
	12554: 0x00005504,
	12555: 0x00005508,
	12556: 0x000054EB,
	12557: 0x00005511,
	12558: 0x00005505,
	12559: 0x000054F1,
	12560: 0x0000550A,
	12561: 0x000054FB,
	12562: 0x000054F7,
	12563: 0x000054F8,
	12564: 0x000054E0,
	12565: 0x0000550E,
	12566: 0x00005503,
	12567: 0x0000550B,
	12568: 0x00005701,
	12569: 0x00005702,
	12570: 0x000057CC,
	12571: 0x00005832,
	12572: 0x000057D5,
	12573: 0x000057D2,
	12574: 0x000057BA,
	12575: 0x000057C6,
	12576: 0x000057BD,
	12577: 0x000057BC,
	12578: 0x000057B8,
	12579: 0x000057B6,
	12580: 0x000057BF,
	12581: 0x000057C7,
	12582: 0x000057D0,
	12583: 0x000057B9,
	12584: 0x000057C1,
	12585: 0x0000590E,
	12586: 0x0000594A,
	12587: 0x00005A19,
	12588: 0x00005A16,
	12589: 0x00005A2D,
	12590: 0x00005A2E,
	12591: 0x00005A15,
	12592: 0x00005A0F,
	12593: 0x00005A17,
	12594: 0x00005A0A,
	12595: 0x00005A1E,
	12596: 0x00005A33,
	12597: 0x00005B6C,
	12598: 0x00005BA7,
	12599: 0x00005BAD,
	12600: 0x00005BAC,
	12601: 0x00005C03,
	12602: 0x00005C56,
	12603: 0x00005C54,
	12604: 0x00005CEC,
	12605: 0x00005CFF,
	12606: 0x00005CEE,
	12607: 0x00005CF1,
	12608: 0x00005CF7,
	12609: 0x00005D00,
	12610: 0x00005CF9,
	12611: 0x00005E29,
	12612: 0x00005E28,
	12613: 0x00005EA8,
	12614: 0x00005EAE,
	12615: 0x00005EAA,
	12616: 0x00005EAC,
	12617: 0x00005F33,
	12618: 0x00005F30,
	12619: 0x00005F67,
	12620: 0x0000605D,
	12621: 0x0000605A,
	12622: 0x00006067,
	12623: 0x00006041,
	12624: 0x000060A2,
	12625: 0x00006088,
	12626: 0x00006080,
	12627: 0x00006092,
	12628: 0x00006081,
	12629: 0x0000609D,
	12630: 0x00006083,
	12631: 0x00006095,
	12632: 0x0000609B,
	12633: 0x00006097,
	12634: 0x00006087,
	12635: 0x0000609C,
	12636: 0x0000608E,
	12637: 0x00006219,
	12638: 0x00006246,
	12639: 0x000062F2,
	12640: 0x00006310,
	12641: 0x00006356,
	12642: 0x0000632C,
	12643: 0x00006344,
	12644: 0x00006345,
	12645: 0x00006336,
	12646: 0x00006343,
	12647: 0x000063E4,
	12648: 0x00006339,
	12649: 0x0000634B,
	12650: 0x0000634A,
	12651: 0x0000633C,
	12652: 0x00006329,
	12653: 0x00006341,
	12654: 0x00006334,
	12655: 0x00006358,
	12656: 0x00006354,
	12657: 0x00006359,
	12658: 0x0000632D,
	12659: 0x00006347,
	12660: 0x00006333,
	12661: 0x0000635A,
	12662: 0x00006351,
	12663: 0x00006338,
	12664: 0x00006357,
	12665: 0x00006340,
	12666: 0x00006348,
	12667: 0x0000654A,
	12668: 0x00006546,
	12669: 0x000065C6,
	12670: 0x000065C3,
	12671: 0x000065C4,
	12672: 0x000065C2,
	12673: 0x0000664A,
	12674: 0x0000665F,
	12675: 0x00006647,
	12676: 0x00006651,
	12677: 0x00006712,
	12678: 0x00006713,
	12679: 0x0000681F,
	12680: 0x0000681A,
	12681: 0x00006849,
	12682: 0x00006832,
	12683: 0x00006833,
	12684: 0x0000683B,
	12685: 0x0000684B,
	12686: 0x0000684F,
	12687: 0x00006816,
	12688: 0x00006831,
	12689: 0x0000681C,
	12690: 0x00006835,
	12691: 0x0000682B,
	12692: 0x0000682D,
	12693: 0x0000682F,
	12694: 0x0000684E,
	12695: 0x00006844,
	12696: 0x00006834,
	12697: 0x0000681D,
	12698: 0x00006812,
	12699: 0x00006814,
	12700: 0x00006826,
	12701: 0x00006828,
	12702: 0x0000682E,
	12703: 0x0000684D,
	12704: 0x0000683A,
	12705: 0x00006825,
	12706: 0x00006820,
	12707: 0x00006B2C,
	12708: 0x00006B2F,
	12709: 0x00006B2D,
	12710: 0x00006B31,
	12711: 0x00006B34,
	12712: 0x00006B6D,
	12713: 0x00008082,
	12714: 0x00006B88,
	12715: 0x00006BE6,
	12716: 0x00006BE4,
	12717: 0x00006BE8,
	12718: 0x00006BE3,
	12719: 0x00006BE2,
	12720: 0x00006BE7,
	12721: 0x00006C25,
	12722: 0x00006D7A,
	12723: 0x00006D63,
	12724: 0x00006D64,
	12725: 0x00006D76,
	12726: 0x00006D0D,
	12727: 0x00006D61,
	12728: 0x00006D92,
	12729: 0x00006D58,
	12730: 0x00006D62,
	12731: 0x00006D6D,
	12732: 0x00006D6F,
	12733: 0x00006D91,
	12734: 0x00006D8D,
	12735: 0x00006DEF,
	12736: 0x00006D7F,
	12737: 0x00006D86,
	12738: 0x00006D5E,
	12739: 0x00006D67,
	12740: 0x00006D60,
	12741: 0x00006D97,
	12742: 0x00006D70,
	12743: 0x00006D7C,
	12744: 0x00006D5F,
	12745: 0x00006D82,
	12746: 0x00006D98,
	12747: 0x00006D2F,
	12748: 0x00006D68,
	12749: 0x00006D8B,
	12750: 0x00006D7E,
	12751: 0x00006D80,
	12752: 0x00006D84,
	12753: 0x00006D16,
	12754: 0x00006D83,
	12755: 0x00006D7B,
	12756: 0x00006D7D,
	12757: 0x00006D75,
	12758: 0x00006D90,
	12759: 0x000070DC,
	12760: 0x000070D3,
	12761: 0x000070D1,
	12762: 0x000070DD,
	12763: 0x000070CB,
	12764: 0x00007F39,
	12765: 0x000070E2,
	12766: 0x000070D7,
	12767: 0x000070D2,
	12768: 0x000070DE,
	12769: 0x000070E0,
	12770: 0x000070D4,
	12771: 0x000070CD,
	12772: 0x000070C5,
	12773: 0x000070C6,
	12774: 0x000070C7,
	12775: 0x000070DA,
	12776: 0x000070CE,
	12777: 0x000070E1,
	12778: 0x00007242,
	12779: 0x00007278,
	12780: 0x00007277,
	12781: 0x00007276,
	12782: 0x00007300,
	12783: 0x000072FA,
	12784: 0x000072F4,
	12785: 0x000072FE,
	12786: 0x000072F6,
	12787: 0x000072F3,
	12788: 0x000072FB,
	12789: 0x00007301,
	12790: 0x000073D3,
	12791: 0x000073D9,
	12792: 0x000073E5,
	12793: 0x000073D6,
	12794: 0x000073BC,
	12795: 0x000073E7,
	12796: 0x000073E3,
	12797: 0x000073E9,
	12798: 0x000073DC,
	12799: 0x000073D2,
	12800: 0x000073DB,
	12801: 0x000073D4,
	12802: 0x000073DD,
	12803: 0x000073DA,
	12804: 0x000073D7,
	12805: 0x000073D8,
	12806: 0x000073E8,
	12807: 0x000074DE,
	12808: 0x000074DF,
	12809: 0x000074F4,
	12810: 0x000074F5,
	12811: 0x00007521,
	12812: 0x0000755B,
	12813: 0x0000755F,
	12814: 0x000075B0,
	12815: 0x000075C1,
	12816: 0x000075BB,
	12817: 0x000075C4,
	12818: 0x000075C0,
	12819: 0x000075BF,
	12820: 0x000075B6,
	12821: 0x000075BA,
	12822: 0x0000768A,
	12823: 0x000076C9,
	12824: 0x0000771D,
	12825: 0x0000771B,
	12826: 0x00007710,
	12827: 0x00007713,
	12828: 0x00007712,
	12829: 0x00007723,
	12830: 0x00007711,
	12831: 0x00007715,
	12832: 0x00007719,
	12833: 0x0000771A,
	12834: 0x00007722,
	12835: 0x00007727,
	12836: 0x00007823,
	12837: 0x0000782C,
	12838: 0x00007822,
	12839: 0x00007835,
	12840: 0x0000782F,
	12841: 0x00007828,
	12842: 0x0000782E,
	12843: 0x0000782B,
	12844: 0x00007821,
	12845: 0x00007829,
	12846: 0x00007833,
	12847: 0x0000782A,
	12848: 0x00007831,
	12849: 0x00007954,
	12850: 0x0000795B,
	12851: 0x0000794F,
	12852: 0x0000795C,
	12853: 0x00007953,
	12854: 0x00007952,
	12855: 0x00007951,
	12856: 0x000079EB,
	12857: 0x000079EC,
	12858: 0x000079E0,
	12859: 0x000079EE,
	12860: 0x000079ED,
	12861: 0x000079EA,
	12862: 0x000079DC,
	12863: 0x000079DE,
	12864: 0x000079DD,
	12865: 0x00007A86,
	12866: 0x00007A89,
	12867: 0x00007A85,
	12868: 0x00007A8B,
	12869: 0x00007A8C,
	12870: 0x00007A8A,
	12871: 0x00007A87,
	12872: 0x00007AD8,
	12873: 0x00007B10,
	12874: 0x00007B04,
	12875: 0x00007B13,
	12876: 0x00007B05,
	12877: 0x00007B0F,
	12878: 0x00007B08,
	12879: 0x00007B0A,
	12880: 0x00007B0E,
	12881: 0x00007B09,
	12882: 0x00007B12,
	12883: 0x00007C84,
	12884: 0x00007C91,
	12885: 0x00007C8A,
	12886: 0x00007C8C,
	12887: 0x00007C88,
	12888: 0x00007C8D,
	12889: 0x00007C85,
	12890: 0x00007D1E,
	12891: 0x00007D1D,
	12892: 0x00007D11,
	12893: 0x00007D0E,
	12894: 0x00007D18,
	12895: 0x00007D16,
	12896: 0x00007D13,
	12897: 0x00007D1F,
	12898: 0x00007D12,
	12899: 0x00007D0F,
	12900: 0x00007D0C,
	12901: 0x00007F5C,
	12902: 0x00007F61,
	12903: 0x00007F5E,
	12904: 0x00007F60,
	12905: 0x00007F5D,
	12906: 0x00007F5B,
	12907: 0x00007F96,
	12908: 0x00007F92,
	12909: 0x00007FC3,
	12910: 0x00007FC2,
	12911: 0x00007FC0,
	12912: 0x00008016,
	12913: 0x0000803E,
	12914: 0x00008039,
	12915: 0x000080FA,
	12916: 0x000080F2,
	12917: 0x000080F9,
	12918: 0x000080F5,
	12919: 0x00008101,
	12920: 0x000080FB,
	12921: 0x00008100,
	12922: 0x00008201,
	12923: 0x0000822F,
	12924: 0x00008225,
	12925: 0x00008333,
	12926: 0x0000832D,
	12927: 0x00008344,
	12928: 0x00008319,
	12929: 0x00008351,
	12930: 0x00008325,
	12931: 0x00008356,
	12932: 0x0000833F,
	12933: 0x00008341,
	12934: 0x00008326,
	12935: 0x0000831C,
	12936: 0x00008322,
	12937: 0x00008342,
	12938: 0x0000834E,
	12939: 0x0000831B,
	12940: 0x0000832A,
	12941: 0x00008308,
	12942: 0x0000833C,
	12943: 0x0000834D,
	12944: 0x00008316,
	12945: 0x00008324,
	12946: 0x00008320,
	12947: 0x00008337,
	12948: 0x0000832F,
	12949: 0x00008329,
	12950: 0x00008347,
	12951: 0x00008345,
	12952: 0x0000834C,
	12953: 0x00008353,
	12954: 0x0000831E,
	12955: 0x0000832C,
	12956: 0x0000834B,
	12957: 0x00008327,
	12958: 0x00008348,
	12959: 0x00008653,
	12960: 0x00008652,
	12961: 0x000086A2,
	12962: 0x000086A8,
	12963: 0x00008696,
	12964: 0x0000868D,
	12965: 0x00008691,
	12966: 0x0000869E,
	12967: 0x00008687,
	12968: 0x00008697,
	12969: 0x00008686,
	12970: 0x0000868B,
	12971: 0x0000869A,
	12972: 0x00008685,
	12973: 0x000086A5,
	12974: 0x00008699,
	12975: 0x000086A1,
	12976: 0x000086A7,
	12977: 0x00008695,
	12978: 0x00008698,
	12979: 0x0000868E,
	12980: 0x0000869D,
	12981: 0x00008690,
	12982: 0x00008694,
	12983: 0x00008843,
	12984: 0x00008844,
	12985: 0x0000886D,
	12986: 0x00008875,
	12987: 0x00008876,
	12988: 0x00008872,
	12989: 0x00008880,
	12990: 0x00008871,
	12991: 0x0000887F,
	12992: 0x0000886F,
	12993: 0x00008883,
	12994: 0x0000887E,
	12995: 0x00008874,
	12996: 0x0000887C,
	12997: 0x00008A12,
	12998: 0x00008C47,
	12999: 0x00008C57,
	13000: 0x00008C7B,
	13001: 0x00008CA4,
	13002: 0x00008CA3,
	13003: 0x00008D76,
	13004: 0x00008D78,
	13005: 0x00008DB5,
	13006: 0x00008DB7,
	13007: 0x00008DB6,
	13008: 0x00008ED1,
	13009: 0x00008ED3,
	13010: 0x00008FFE,
	13011: 0x00008FF5,
	13012: 0x00009002,
	13013: 0x00008FFF,
	13014: 0x00008FFB,
	13015: 0x00009004,
	13016: 0x00008FFC,
	13017: 0x00008FF6,
	13018: 0x000090D6,
	13019: 0x000090E0,
	13020: 0x000090D9,
	13021: 0x000090DA,
	13022: 0x000090E3,
	13023: 0x000090DF,
	13024: 0x000090E5,
	13025: 0x000090D8,
	13026: 0x000090DB,
	13027: 0x000090D7,
	13028: 0x000090DC,
	13029: 0x000090E4,
	13030: 0x00009150,
	13031: 0x0000914E,
	13032: 0x0000914F,
	13033: 0x000091D5,
	13034: 0x000091E2,
	13035: 0x000091DA,
	13036: 0x0000965C,
	13037: 0x0000965F,
	13038: 0x000096BC,
	13039: 0x000098E3,
	13040: 0x00009ADF,
	13041: 0x00009B2F,
	13042: 0x00004E7F,
	13043: 0x00005070,
	13044: 0x0000506A,
	13045: 0x00005061,
	13046: 0x0000505E,
	13047: 0x00005060,
	13048: 0x00005053,
	13049: 0x0000504B,
	13050: 0x0000505D,
	13051: 0x00005072,
	13052: 0x00005048,
	13053: 0x0000504D,
	13054: 0x00005041,
	13055: 0x0000505B,
	13056: 0x0000504A,
	13057: 0x00005062,
	13058: 0x00005015,
	13059: 0x00005045,
	13060: 0x0000505F,
	13061: 0x00005069,
	13062: 0x0000506B,
	13063: 0x00005063,
	13064: 0x00005064,
	13065: 0x00005046,
	13066: 0x00005040,
	13067: 0x0000506E,
	13068: 0x00005073,
	13069: 0x00005057,
	13070: 0x00005051,
	13071: 0x000051D0,
	13072: 0x0000526B,
	13073: 0x0000526D,
	13074: 0x0000526C,
	13075: 0x0000526E,
	13076: 0x000052D6,
	13077: 0x000052D3,
	13078: 0x0000532D,
	13079: 0x0000539C,
	13080: 0x00005575,
	13081: 0x00005576,
	13082: 0x0000553C,
	13083: 0x0000554D,
	13084: 0x00005550,
	13085: 0x00005534,
	13086: 0x0000552A,
	13087: 0x00005551,
	13088: 0x00005562,
	13089: 0x00005536,
	13090: 0x00005535,
	13091: 0x00005530,
	13092: 0x00005552,
	13093: 0x00005545,
	13094: 0x0000550C,
	13095: 0x00005532,
	13096: 0x00005565,
	13097: 0x0000554E,
	13098: 0x00005539,
	13099: 0x00005548,
	13100: 0x0000552D,
	13101: 0x0000553B,
	13102: 0x00005540,
	13103: 0x0000554B,
	13104: 0x0000570A,
	13105: 0x00005707,
	13106: 0x000057FB,
	13107: 0x00005814,
	13108: 0x000057E2,
	13109: 0x000057F6,
	13110: 0x000057DC,
	13111: 0x000057F4,
	13112: 0x00005800,
	13113: 0x000057ED,
	13114: 0x000057FD,
	13115: 0x00005808,
	13116: 0x000057F8,
	13117: 0x0000580B,
	13118: 0x000057F3,
	13119: 0x000057CF,
	13120: 0x00005807,
	13121: 0x000057EE,
	13122: 0x000057E3,
	13123: 0x000057F2,
	13124: 0x000057E5,
	13125: 0x000057EC,
	13126: 0x000057E1,
	13127: 0x0000580E,
	13128: 0x000057FC,
	13129: 0x00005810,
	13130: 0x000057E7,
	13131: 0x00005801,
	13132: 0x0000580C,
	13133: 0x000057F1,
	13134: 0x000057E9,
	13135: 0x000057F0,
	13136: 0x0000580D,
	13137: 0x00005804,
	13138: 0x0000595C,
	13139: 0x00005A60,
	13140: 0x00005A58,
	13141: 0x00005A55,
	13142: 0x00005A67,
	13143: 0x00005A5E,
	13144: 0x00005A38,
	13145: 0x00005A35,
	13146: 0x00005A6D,
	13147: 0x00005A50,
	13148: 0x00005A5F,
	13149: 0x00005A65,
	13150: 0x00005A6C,
	13151: 0x00005A53,
	13152: 0x00005A64,
	13153: 0x00005A57,
	13154: 0x00005A43,
	13155: 0x00005A5D,
	13156: 0x00005A52,
	13157: 0x00005A44,
	13158: 0x00005A5B,
	13159: 0x00005A48,
	13160: 0x00005A8E,
	13161: 0x00005A3E,
	13162: 0x00005A4D,
	13163: 0x00005A39,
	13164: 0x00005A4C,
	13165: 0x00005A70,
	13166: 0x00005A69,
	13167: 0x00005A47,
	13168: 0x00005A51,
	13169: 0x00005A56,
	13170: 0x00005A42,
	13171: 0x00005A5C,
	13172: 0x00005B72,
	13173: 0x00005B6E,
	13174: 0x00005BC1,
	13175: 0x00005BC0,
	13176: 0x00005C59,
	13177: 0x00005D1E,
	13178: 0x00005D0B,
	13179: 0x00005D1D,
	13180: 0x00005D1A,
	13181: 0x00005D20,
	13182: 0x00005D0C,
	13183: 0x00005D28,
	13184: 0x00005D0D,
	13185: 0x00005D26,
	13186: 0x00005D25,
	13187: 0x00005D0F,
	13188: 0x00005D30,
	13189: 0x00005D12,
	13190: 0x00005D23,
	13191: 0x00005D1F,
	13192: 0x00005D2E,
	13193: 0x00005E3E,
	13194: 0x00005E34,
	13195: 0x00005EB1,
	13196: 0x00005EB4,
	13197: 0x00005EB9,
	13198: 0x00005EB2,
	13199: 0x00005EB3,
	13200: 0x00005F36,
	13201: 0x00005F38,
	13202: 0x00005F9B,
	13203: 0x00005F96,
	13204: 0x00005F9F,
	13205: 0x0000608A,
	13206: 0x00006090,
	13207: 0x00006086,
	13208: 0x000060BE,
	13209: 0x000060B0,
	13210: 0x000060BA,
	13211: 0x000060D3,
	13212: 0x000060D4,
	13213: 0x000060CF,
	13214: 0x000060E4,
	13215: 0x000060D9,
	13216: 0x000060DD,
	13217: 0x000060C8,
	13218: 0x000060B1,
	13219: 0x000060DB,
	13220: 0x000060B7,
	13221: 0x000060CA,
	13222: 0x000060BF,
	13223: 0x000060C3,
	13224: 0x000060CD,
	13225: 0x000060C0,
	13226: 0x00006332,
	13227: 0x00006365,
	13228: 0x0000638A,
	13229: 0x00006382,
	13230: 0x0000637D,
	13231: 0x000063BD,
	13232: 0x0000639E,
	13233: 0x000063AD,
	13234: 0x0000639D,
	13235: 0x00006397,
	13236: 0x000063AB,
	13237: 0x0000638E,
	13238: 0x0000636F,
	13239: 0x00006387,
	13240: 0x00006390,
	13241: 0x0000636E,
	13242: 0x000063AF,
	13243: 0x00006375,
	13244: 0x0000639C,
	13245: 0x0000636D,
	13246: 0x000063AE,
	13247: 0x0000637C,
	13248: 0x000063A4,
	13249: 0x0000633B,
	13250: 0x0000639F,
	13251: 0x00006378,
	13252: 0x00006385,
	13253: 0x00006381,
	13254: 0x00006391,
	13255: 0x0000638D,
	13256: 0x00006370,
	13257: 0x00006553,
	13258: 0x000065CD,
	13259: 0x00006665,
	13260: 0x00006661,
	13261: 0x0000665B,
	13262: 0x00006659,
	13263: 0x0000665C,
	13264: 0x00006662,
	13265: 0x00006718,
	13266: 0x00006879,
	13267: 0x00006887,
	13268: 0x00006890,
	13269: 0x0000689C,
	13270: 0x0000686D,
	13271: 0x0000686E,
	13272: 0x000068AE,
	13273: 0x000068AB,
	13274: 0x00006956,
	13275: 0x0000686F,
	13276: 0x000068A3,
	13277: 0x000068AC,
	13278: 0x000068A9,
	13279: 0x00006875,
	13280: 0x00006874,
	13281: 0x000068B2,
	13282: 0x0000688F,
	13283: 0x00006877,
	13284: 0x00006892,
	13285: 0x0000687C,
	13286: 0x0000686B,
	13287: 0x00006872,
	13288: 0x000068AA,
	13289: 0x00006880,
	13290: 0x00006871,
	13291: 0x0000687E,
	13292: 0x0000689B,
	13293: 0x00006896,
	13294: 0x0000688B,
	13295: 0x000068A0,
	13296: 0x00006889,
	13297: 0x000068A4,
	13298: 0x00006878,
	13299: 0x0000687B,
	13300: 0x00006891,
	13301: 0x0000688C,
	13302: 0x0000688A,
	13303: 0x0000687D,
	13304: 0x00006B36,
	13305: 0x00006B33,
	13306: 0x00006B37,
	13307: 0x00006B38,
	13308: 0x00006B91,
	13309: 0x00006B8F,
	13310: 0x00006B8D,
	13311: 0x00006B8E,
	13312: 0x00006B8C,
	13313: 0x00006C2A,
	13314: 0x00006DC0,
	13315: 0x00006DAB,
	13316: 0x00006DB4,
	13317: 0x00006DB3,
	13318: 0x00006E74,
	13319: 0x00006DAC,
	13320: 0x00006DE9,
	13321: 0x00006DE2,
	13322: 0x00006DB7,
	13323: 0x00006DF6,
	13324: 0x00006DD4,
	13325: 0x00006E00,
	13326: 0x00006DC8,
	13327: 0x00006DE0,
	13328: 0x00006DDF,
	13329: 0x00006DD6,
	13330: 0x00006DBE,
	13331: 0x00006DE5,
	13332: 0x00006DDC,
	13333: 0x00006DDD,
	13334: 0x00006DDB,
	13335: 0x00006DF4,
	13336: 0x00006DCA,
	13337: 0x00006DBD,
	13338: 0x00006DED,
	13339: 0x00006DF0,
	13340: 0x00006DBA,
	13341: 0x00006DD5,
	13342: 0x00006DC2,
	13343: 0x00006DCF,
	13344: 0x00006DC9,
	13345: 0x00006DD0,
	13346: 0x00006DF2,
	13347: 0x00006DD3,
	13348: 0x00006DFD,
	13349: 0x00006DD7,
	13350: 0x00006DCD,
	13351: 0x00006DE3,
	13352: 0x00006DBB,
	13353: 0x000070FA,
	13354: 0x0000710D,
	13355: 0x000070F7,
	13356: 0x00007117,
	13357: 0x000070F4,
	13358: 0x0000710C,
	13359: 0x000070F0,
	13360: 0x00007104,
	13361: 0x000070F3,
	13362: 0x00007110,
	13363: 0x000070FC,
	13364: 0x000070FF,
	13365: 0x00007106,
	13366: 0x00007113,
	13367: 0x00007100,
	13368: 0x000070F8,
	13369: 0x000070F6,
	13370: 0x0000710B,
	13371: 0x00007102,
	13372: 0x0000710E,
	13373: 0x0000727E,
	13374: 0x0000727B,
	13375: 0x0000727C,
	13376: 0x0000727F,
	13377: 0x0000731D,
	13378: 0x00007317,
	13379: 0x00007307,
	13380: 0x00007311,
	13381: 0x00007318,
	13382: 0x0000730A,
	13383: 0x00007308,
	13384: 0x000072FF,
	13385: 0x0000730F,
	13386: 0x0000731E,
	13387: 0x00007388,
	13388: 0x000073F6,
	13389: 0x000073F8,
	13390: 0x000073F5,
	13391: 0x00007404,
	13392: 0x00007401,
	13393: 0x000073FD,
	13394: 0x00007407,
	13395: 0x00007400,
	13396: 0x000073FA,
	13397: 0x000073FC,
	13398: 0x000073FF,
	13399: 0x0000740C,
	13400: 0x0000740B,
	13401: 0x000073F4,
	13402: 0x00007408,
	13403: 0x00007564,
	13404: 0x00007563,
	13405: 0x000075CE,
	13406: 0x000075D2,
	13407: 0x000075CF,
	13408: 0x000075CB,
	13409: 0x000075CC,
	13410: 0x000075D1,
	13411: 0x000075D0,
	13412: 0x0000768F,
	13413: 0x00007689,
	13414: 0x000076D3,
	13415: 0x00007739,
	13416: 0x0000772F,
	13417: 0x0000772D,
	13418: 0x00007731,
	13419: 0x00007732,
	13420: 0x00007734,
	13421: 0x00007733,
	13422: 0x0000773D,
	13423: 0x00007725,
	13424: 0x0000773B,
	13425: 0x00007735,
	13426: 0x00007848,
	13427: 0x00007852,
	13428: 0x00007849,
	13429: 0x0000784D,
	13430: 0x0000784A,
	13431: 0x0000784C,
	13432: 0x00007826,
	13433: 0x00007845,
	13434: 0x00007850,
	13435: 0x00007964,
	13436: 0x00007967,
	13437: 0x00007969,
	13438: 0x0000796A,
	13439: 0x00007963,
	13440: 0x0000796B,
	13441: 0x00007961,
	13442: 0x000079BB,
	13443: 0x000079FA,
	13444: 0x000079F8,
	13445: 0x000079F6,
	13446: 0x000079F7,
	13447: 0x00007A8F,
	13448: 0x00007A94,
	13449: 0x00007A90,
	13450: 0x00007B35,
	13451: 0x00007B47,
	13452: 0x00007B34,
	13453: 0x00007B25,
	13454: 0x00007B30,
	13455: 0x00007B22,
	13456: 0x00007B24,
	13457: 0x00007B33,
	13458: 0x00007B18,
	13459: 0x00007B2A,
	13460: 0x00007B1D,
	13461: 0x00007B31,
	13462: 0x00007B2B,
	13463: 0x00007B2D,
	13464: 0x00007B2F,
	13465: 0x00007B32,
	13466: 0x00007B38,
	13467: 0x00007B1A,
	13468: 0x00007B23,
	13469: 0x00007C94,
	13470: 0x00007C98,
	13471: 0x00007C96,
	13472: 0x00007CA3,
	13473: 0x00007D35,
	13474: 0x00007D3D,
	13475: 0x00007D38,
	13476: 0x00007D36,
	13477: 0x00007D3A,
	13478: 0x00007D45,
	13479: 0x00007D2C,
	13480: 0x00007D29,
	13481: 0x00007D41,
	13482: 0x00007D47,
	13483: 0x00007D3E,
	13484: 0x00007D3F,
	13485: 0x00007D4A,
	13486: 0x00007D3B,
	13487: 0x00007D28,
	13488: 0x00007F63,
	13489: 0x00007F95,
	13490: 0x00007F9C,
	13491: 0x00007F9D,
	13492: 0x00007F9B,
	13493: 0x00007FCA,
	13494: 0x00007FCB,
	13495: 0x00007FCD,
	13496: 0x00007FD0,
	13497: 0x00007FD1,
	13498: 0x00007FC7,
	13499: 0x00007FCF,
	13500: 0x00007FC9,
	13501: 0x0000801F,
	13502: 0x0000801E,
	13503: 0x0000801B,
	13504: 0x00008047,
	13505: 0x00008043,
	13506: 0x00008048,
	13507: 0x00008118,
	13508: 0x00008125,
	13509: 0x00008119,
	13510: 0x0000811B,
	13511: 0x0000812D,
	13512: 0x0000811F,
	13513: 0x0000812C,
	13514: 0x0000811E,
	13515: 0x00008121,
	13516: 0x00008115,
	13517: 0x00008127,
	13518: 0x0000811D,
	13519: 0x00008122,
	13520: 0x00008211,
	13521: 0x00008238,
	13522: 0x00008233,
	13523: 0x0000823A,
	13524: 0x00008234,
	13525: 0x00008232,
	13526: 0x00008274,
	13527: 0x00008390,
	13528: 0x000083A3,
	13529: 0x000083A8,
	13530: 0x0000838D,
	13531: 0x0000837A,
	13532: 0x00008373,
	13533: 0x000083A4,
	13534: 0x00008374,
	13535: 0x0000838F,
	13536: 0x00008381,
	13537: 0x00008395,
	13538: 0x00008399,
	13539: 0x00008375,
	13540: 0x00008394,
	13541: 0x000083A9,
	13542: 0x0000837D,
	13543: 0x00008383,
	13544: 0x0000838C,
	13545: 0x0000839D,
	13546: 0x0000839B,
	13547: 0x000083AA,
	13548: 0x0000838B,
	13549: 0x0000837E,
	13550: 0x000083A5,
	13551: 0x000083AF,
	13552: 0x00008388,
	13553: 0x00008397,
	13554: 0x000083B0,
	13555: 0x0000837F,
	13556: 0x000083A6,
	13557: 0x00008387,
	13558: 0x000083AE,
	13559: 0x00008376,
	13560: 0x0000839A,
	13561: 0x00008659,
	13562: 0x00008656,
	13563: 0x000086BF,
	13564: 0x000086B7,
	13565: 0x000086C2,
	13566: 0x000086C1,
	13567: 0x000086C5,
	13568: 0x000086BA,
	13569: 0x000086B0,
	13570: 0x000086C8,
	13571: 0x000086B9,
	13572: 0x000086B3,
	13573: 0x000086B8,
	13574: 0x000086CC,
	13575: 0x000086B4,
	13576: 0x000086BB,
	13577: 0x000086BC,
	13578: 0x000086C3,
	13579: 0x000086BD,
	13580: 0x000086BE,
	13581: 0x00008852,
	13582: 0x00008889,
	13583: 0x00008895,
	13584: 0x000088A8,
	13585: 0x000088A2,
	13586: 0x000088AA,
	13587: 0x0000889A,
	13588: 0x00008891,
	13589: 0x000088A1,
	13590: 0x0000889F,
	13591: 0x00008898,
	13592: 0x000088A7,
	13593: 0x00008899,
	13594: 0x0000889B,
	13595: 0x00008897,
	13596: 0x000088A4,
	13597: 0x000088AC,
	13598: 0x0000888C,
	13599: 0x00008893,
	13600: 0x0000888E,
	13601: 0x00008982,
	13602: 0x000089D6,
	13603: 0x000089D9,
	13604: 0x000089D5,
	13605: 0x00008A30,
	13606: 0x00008A27,
	13607: 0x00008A2C,
	13608: 0x00008A1E,
	13609: 0x00008C39,
	13610: 0x00008C3B,
	13611: 0x00008C5C,
	13612: 0x00008C5D,
	13613: 0x00008C7D,
	13614: 0x00008CA5,
	13615: 0x00008D7D,
	13616: 0x00008D7B,
	13617: 0x00008D79,
	13618: 0x00008DBC,
	13619: 0x00008DC2,
	13620: 0x00008DB9,
	13621: 0x00008DBF,
	13622: 0x00008DC1,
	13623: 0x00008ED8,
	13624: 0x00008EDE,
	13625: 0x00008EDD,
	13626: 0x00008EDC,
	13627: 0x00008ED7,
	13628: 0x00008EE0,
	13629: 0x00008EE1,
	13630: 0x00009024,
	13631: 0x0000900B,
	13632: 0x00009011,
	13633: 0x0000901C,
	13634: 0x0000900C,
	13635: 0x00009021,
	13636: 0x000090EF,
	13637: 0x000090EA,
	13638: 0x000090F0,
	13639: 0x000090F4,
	13640: 0x000090F2,
	13641: 0x000090F3,
	13642: 0x000090D4,
	13643: 0x000090EB,
	13644: 0x000090EC,
	13645: 0x000090E9,
	13646: 0x00009156,
	13647: 0x00009158,
	13648: 0x0000915A,
	13649: 0x00009153,
	13650: 0x00009155,
	13651: 0x000091EC,
	13652: 0x000091F4,
	13653: 0x000091F1,
	13654: 0x000091F3,
	13655: 0x000091F8,
	13656: 0x000091E4,
	13657: 0x000091F9,
	13658: 0x000091EA,
	13659: 0x000091EB,
	13660: 0x000091F7,
	13661: 0x000091E8,
	13662: 0x000091EE,
	13663: 0x0000957A,
	13664: 0x00009586,
	13665: 0x00009588,
	13666: 0x0000967C,
	13667: 0x0000966D,
	13668: 0x0000966B,
	13669: 0x00009671,
	13670: 0x0000966F,
	13671: 0x000096BF,
	13672: 0x0000976A,
	13673: 0x00009804,
	13674: 0x000098E5,
	13675: 0x00009997,
	13676: 0x0000509B,
	13677: 0x00005095,
	13678: 0x00005094,
	13679: 0x0000509E,
	13680: 0x0000508B,
	13681: 0x000050A3,
	13682: 0x00005083,
	13683: 0x0000508C,
	13684: 0x0000508E,
	13685: 0x0000509D,
	13686: 0x00005068,
	13687: 0x0000509C,
	13688: 0x00005092,
	13689: 0x00005082,
	13690: 0x00005087,
	13691: 0x0000515F,
	13692: 0x000051D4,
	13693: 0x00005312,
	13694: 0x00005311,
	13695: 0x000053A4,
	13696: 0x000053A7,
	13697: 0x00005591,
	13698: 0x000055A8,
	13699: 0x000055A5,
	13700: 0x000055AD,
	13701: 0x00005577,
	13702: 0x00005645,
	13703: 0x000055A2,
	13704: 0x00005593,
	13705: 0x00005588,
	13706: 0x0000558F,
	13707: 0x000055B5,
	13708: 0x00005581,
	13709: 0x000055A3,
	13710: 0x00005592,
	13711: 0x000055A4,
	13712: 0x0000557D,
	13713: 0x0000558C,
	13714: 0x000055A6,
	13715: 0x0000557F,
	13716: 0x00005595,
	13717: 0x000055A1,
	13718: 0x0000558E,
	13719: 0x0000570C,
	13720: 0x00005829,
	13721: 0x00005837,
	13722: 0x00005819,
	13723: 0x0000581E,
	13724: 0x00005827,
	13725: 0x00005823,
	13726: 0x00005828,
	13727: 0x000057F5,
	13728: 0x00005848,
	13729: 0x00005825,
	13730: 0x0000581C,
	13731: 0x0000581B,
	13732: 0x00005833,
	13733: 0x0000583F,
	13734: 0x00005836,
	13735: 0x0000582E,
	13736: 0x00005839,
	13737: 0x00005838,
	13738: 0x0000582D,
	13739: 0x0000582C,
	13740: 0x0000583B,
	13741: 0x00005961,
	13742: 0x00005AAF,
	13743: 0x00005A94,
	13744: 0x00005A9F,
	13745: 0x00005A7A,
	13746: 0x00005AA2,
	13747: 0x00005A9E,
	13748: 0x00005A78,
	13749: 0x00005AA6,
	13750: 0x00005A7C,
	13751: 0x00005AA5,
	13752: 0x00005AAC,
	13753: 0x00005A95,
	13754: 0x00005AAE,
	13755: 0x00005A37,
	13756: 0x00005A84,
	13757: 0x00005A8A,
	13758: 0x00005A97,
	13759: 0x00005A83,
	13760: 0x00005A8B,
	13761: 0x00005AA9,
	13762: 0x00005A7B,
	13763: 0x00005A7D,
	13764: 0x00005A8C,
	13765: 0x00005A9C,
	13766: 0x00005A8F,
	13767: 0x00005A93,
	13768: 0x00005A9D,
	13769: 0x00005BEA,
	13770: 0x00005BCD,
	13771: 0x00005BCB,
	13772: 0x00005BD4,
	13773: 0x00005BD1,
	13774: 0x00005BCA,
	13775: 0x00005BCE,
	13776: 0x00005C0C,
	13777: 0x00005C30,
	13778: 0x00005D37,
	13779: 0x00005D43,
	13780: 0x00005D6B,
	13781: 0x00005D41,
	13782: 0x00005D4B,
	13783: 0x00005D3F,
	13784: 0x00005D35,
	13785: 0x00005D51,
	13786: 0x00005D4E,
	13787: 0x00005D55,
	13788: 0x00005D33,
	13789: 0x00005D3A,
	13790: 0x00005D52,
	13791: 0x00005D3D,
	13792: 0x00005D31,
	13793: 0x00005D59,
	13794: 0x00005D42,
	13795: 0x00005D39,
	13796: 0x00005D49,
	13797: 0x00005D38,
	13798: 0x00005D3C,
	13799: 0x00005D32,
	13800: 0x00005D36,
	13801: 0x00005D40,
	13802: 0x00005D45,
	13803: 0x00005E44,
	13804: 0x00005E41,
	13805: 0x00005F58,
	13806: 0x00005FA6,
	13807: 0x00005FA5,
	13808: 0x00005FAB,
	13809: 0x000060C9,
	13810: 0x000060B9,
	13811: 0x000060CC,
	13812: 0x000060E2,
	13813: 0x000060CE,
	13814: 0x000060C4,
	13815: 0x00006114,
	13816: 0x000060F2,
	13817: 0x0000610A,
	13818: 0x00006116,
	13819: 0x00006105,
	13820: 0x000060F5,
	13821: 0x00006113,
	13822: 0x000060F8,
	13823: 0x000060FC,
	13824: 0x000060FE,
	13825: 0x000060C1,
	13826: 0x00006103,
	13827: 0x00006118,
	13828: 0x0000611D,
	13829: 0x00006110,
	13830: 0x000060FF,
	13831: 0x00006104,
	13832: 0x0000610B,
	13833: 0x0000624A,
	13834: 0x00006394,
	13835: 0x000063B1,
	13836: 0x000063B0,
	13837: 0x000063CE,
	13838: 0x000063E5,
	13839: 0x000063E8,
	13840: 0x000063EF,
	13841: 0x000063C3,
	13842: 0x0000649D,
	13843: 0x000063F3,
	13844: 0x000063CA,
	13845: 0x000063E0,
	13846: 0x000063F6,
	13847: 0x000063D5,
	13848: 0x000063F2,
	13849: 0x000063F5,
	13850: 0x00006461,
	13851: 0x000063DF,
	13852: 0x000063BE,
	13853: 0x000063DD,
	13854: 0x000063DC,
	13855: 0x000063C4,
	13856: 0x000063D8,
	13857: 0x000063D3,
	13858: 0x000063C2,
	13859: 0x000063C7,
	13860: 0x000063CC,
	13861: 0x000063CB,
	13862: 0x000063C8,
	13863: 0x000063F0,
	13864: 0x000063D7,
	13865: 0x000063D9,
	13866: 0x00006532,
	13867: 0x00006567,
	13868: 0x0000656A,
	13869: 0x00006564,
	13870: 0x0000655C,
	13871: 0x00006568,
	13872: 0x00006565,
	13873: 0x0000658C,
	13874: 0x0000659D,
	13875: 0x0000659E,
	13876: 0x000065AE,
	13877: 0x000065D0,
	13878: 0x000065D2,
	13879: 0x0000667C,
	13880: 0x0000666C,
	13881: 0x0000667B,
	13882: 0x00006680,
	13883: 0x00006671,
	13884: 0x00006679,
	13885: 0x0000666A,
	13886: 0x00006672,
	13887: 0x00006701,
	13888: 0x0000690C,
	13889: 0x000068D3,
	13890: 0x00006904,
	13891: 0x000068DC,
	13892: 0x0000692A,
	13893: 0x000068EC,
	13894: 0x000068EA,
	13895: 0x000068F1,
	13896: 0x0000690F,
	13897: 0x000068D6,
	13898: 0x000068F7,
	13899: 0x000068EB,
	13900: 0x000068E4,
	13901: 0x000068F6,
	13902: 0x00006913,
	13903: 0x00006910,
	13904: 0x000068F3,
	13905: 0x000068E1,
	13906: 0x00006907,
	13907: 0x000068CC,
	13908: 0x00006908,
	13909: 0x00006970,
	13910: 0x000068B4,
	13911: 0x00006911,
	13912: 0x000068EF,
	13913: 0x000068C6,
	13914: 0x00006914,
	13915: 0x000068F8,
	13916: 0x000068D0,
	13917: 0x000068FD,
	13918: 0x000068FC,
	13919: 0x000068E8,
	13920: 0x0000690B,
	13921: 0x0000690A,
	13922: 0x00006917,
	13923: 0x000068CE,
	13924: 0x000068C8,
	13925: 0x000068DD,
	13926: 0x000068DE,
	13927: 0x000068E6,
	13928: 0x000068F4,
	13929: 0x000068D1,
	13930: 0x00006906,
	13931: 0x000068D4,
	13932: 0x000068E9,
	13933: 0x00006915,
	13934: 0x00006925,
	13935: 0x000068C7,
	13936: 0x00006B39,
	13937: 0x00006B3B,
	13938: 0x00006B3F,
	13939: 0x00006B3C,
	13940: 0x00006B94,
	13941: 0x00006B97,
	13942: 0x00006B99,
	13943: 0x00006B95,
	13944: 0x00006BBD,
	13945: 0x00006BF0,
	13946: 0x00006BF2,
	13947: 0x00006BF3,
	13948: 0x00006C30,
	13949: 0x00006DFC,
	13950: 0x00006E46,
	13951: 0x00006E47,
	13952: 0x00006E1F,
	13953: 0x00006E49,
	13954: 0x00006E88,
	13955: 0x00006E3C,
	13956: 0x00006E3D,
	13957: 0x00006E45,
	13958: 0x00006E62,
	13959: 0x00006E2B,
	13960: 0x00006E3F,
	13961: 0x00006E41,
	13962: 0x00006E5D,
	13963: 0x00006E73,
	13964: 0x00006E1C,
	13965: 0x00006E33,
	13966: 0x00006E4B,
	13967: 0x00006E40,
	13968: 0x00006E51,
	13969: 0x00006E3B,
	13970: 0x00006E03,
	13971: 0x00006E2E,
	13972: 0x00006E5E,
	13973: 0x00006E68,
	13974: 0x00006E5C,
	13975: 0x00006E61,
	13976: 0x00006E31,
	13977: 0x00006E28,
	13978: 0x00006E60,
	13979: 0x00006E71,
	13980: 0x00006E6B,
	13981: 0x00006E39,
	13982: 0x00006E22,
	13983: 0x00006E30,
	13984: 0x00006E53,
	13985: 0x00006E65,
	13986: 0x00006E27,
	13987: 0x00006E78,
	13988: 0x00006E64,
	13989: 0x00006E77,
	13990: 0x00006E55,
	13991: 0x00006E79,
	13992: 0x00006E52,
	13993: 0x00006E66,
	13994: 0x00006E35,
	13995: 0x00006E36,
	13996: 0x00006E5A,
	13997: 0x00007120,
	13998: 0x0000711E,
	13999: 0x0000712F,
	14000: 0x000070FB,
	14001: 0x0000712E,
	14002: 0x00007131,
	14003: 0x00007123,
	14004: 0x00007125,
	14005: 0x00007122,
	14006: 0x00007132,
	14007: 0x0000711F,
	14008: 0x00007128,
	14009: 0x0000713A,
	14010: 0x0000711B,
	14011: 0x0000724B,
	14012: 0x0000725A,
	14013: 0x00007288,
	14014: 0x00007289,
	14015: 0x00007286,
	14016: 0x00007285,
	14017: 0x0000728B,
	14018: 0x00007312,
	14019: 0x0000730B,
	14020: 0x00007330,
	14021: 0x00007322,
	14022: 0x00007331,
	14023: 0x00007333,
	14024: 0x00007327,
	14025: 0x00007332,
	14026: 0x0000732D,
	14027: 0x00007326,
	14028: 0x00007323,
	14029: 0x00007335,
	14030: 0x0000730C,
	14031: 0x0000742E,
	14032: 0x0000742C,
	14033: 0x00007430,
	14034: 0x0000742B,
	14035: 0x00007416,
	14036: 0x0000741A,
	14037: 0x00007421,
	14038: 0x0000742D,
	14039: 0x00007431,
	14040: 0x00007424,
	14041: 0x00007423,
	14042: 0x0000741D,
	14043: 0x00007429,
	14044: 0x00007420,
	14045: 0x00007432,
	14046: 0x000074FB,
	14047: 0x0000752F,
	14048: 0x0000756F,
	14049: 0x0000756C,
	14050: 0x000075E7,
	14051: 0x000075DA,
	14052: 0x000075E1,
	14053: 0x000075E6,
	14054: 0x000075DD,
	14055: 0x000075DF,
	14056: 0x000075E4,
	14057: 0x000075D7,
	14058: 0x00007695,
	14059: 0x00007692,
	14060: 0x000076DA,
	14061: 0x00007746,
	14062: 0x00007747,
	14063: 0x00007744,
	14064: 0x0000774D,
	14065: 0x00007745,
	14066: 0x0000774A,
	14067: 0x0000774E,
	14068: 0x0000774B,
	14069: 0x0000774C,
	14070: 0x000077DE,
	14071: 0x000077EC,
	14072: 0x00007860,
	14073: 0x00007864,
	14074: 0x00007865,
	14075: 0x0000785C,
	14076: 0x0000786D,
	14077: 0x00007871,
	14078: 0x0000786A,
	14079: 0x0000786E,
	14080: 0x00007870,
	14081: 0x00007869,
	14082: 0x00007868,
	14083: 0x0000785E,
	14084: 0x00007862,
	14085: 0x00007974,
	14086: 0x00007973,
	14087: 0x00007972,
	14088: 0x00007970,
	14089: 0x00007A02,
	14090: 0x00007A0A,
	14091: 0x00007A03,
	14092: 0x00007A0C,
	14093: 0x00007A04,
	14094: 0x00007A99,
	14095: 0x00007AE6,
	14096: 0x00007AE4,
	14097: 0x00007B4A,
	14098: 0x00007B3B,
	14099: 0x00007B44,
	14100: 0x00007B48,
	14101: 0x00007B4C,
	14102: 0x00007B4E,
	14103: 0x00007B40,
	14104: 0x00007B58,
	14105: 0x00007B45,
	14106: 0x00007CA2,
	14107: 0x00007C9E,
	14108: 0x00007CA8,
	14109: 0x00007CA1,
	14110: 0x00007D58,
	14111: 0x00007D6F,
	14112: 0x00007D63,
	14113: 0x00007D53,
	14114: 0x00007D56,
	14115: 0x00007D67,
	14116: 0x00007D6A,
	14117: 0x00007D4F,
	14118: 0x00007D6D,
	14119: 0x00007D5C,
	14120: 0x00007D6B,
	14121: 0x00007D52,
	14122: 0x00007D54,
	14123: 0x00007D69,
	14124: 0x00007D51,
	14125: 0x00007D5F,
	14126: 0x00007D4E,
	14127: 0x00007F3E,
	14128: 0x00007F3F,
	14129: 0x00007F65,
	14130: 0x00007F66,
	14131: 0x00007FA2,
	14132: 0x00007FA0,
	14133: 0x00007FA1,
	14134: 0x00007FD7,
	14135: 0x00008051,
	14136: 0x0000804F,
	14137: 0x00008050,
	14138: 0x000080FE,
	14139: 0x000080D4,
	14140: 0x00008143,
	14141: 0x0000814A,
	14142: 0x00008152,
	14143: 0x0000814F,
	14144: 0x00008147,
	14145: 0x0000813D,
	14146: 0x0000814D,
	14147: 0x0000813A,
	14148: 0x000081E6,
	14149: 0x000081EE,
	14150: 0x000081F7,
	14151: 0x000081F8,
	14152: 0x000081F9,
	14153: 0x00008204,
	14154: 0x0000823C,
	14155: 0x0000823D,
	14156: 0x0000823F,
	14157: 0x00008275,
	14158: 0x0000833B,
	14159: 0x000083CF,
	14160: 0x000083F9,
	14161: 0x00008423,
	14162: 0x000083C0,
	14163: 0x000083E8,
	14164: 0x00008412,
	14165: 0x000083E7,
	14166: 0x000083E4,
	14167: 0x000083FC,
	14168: 0x000083F6,
	14169: 0x00008410,
	14170: 0x000083C6,
	14171: 0x000083C8,
	14172: 0x000083EB,
	14173: 0x000083E3,
	14174: 0x000083BF,
	14175: 0x00008401,
	14176: 0x000083DD,
	14177: 0x000083E5,
	14178: 0x000083D8,
	14179: 0x000083FF,
	14180: 0x000083E1,
	14181: 0x000083CB,
	14182: 0x000083CE,
	14183: 0x000083D6,
	14184: 0x000083F5,
	14185: 0x000083C9,
	14186: 0x00008409,
	14187: 0x0000840F,
	14188: 0x000083DE,
	14189: 0x00008411,
	14190: 0x00008406,
	14191: 0x000083C2,
	14192: 0x000083F3,
	14193: 0x000083D5,
	14194: 0x000083FA,
	14195: 0x000083C7,
	14196: 0x000083D1,
	14197: 0x000083EA,
	14198: 0x00008413,
	14199: 0x000083C3,
	14200: 0x000083EC,
	14201: 0x000083EE,
	14202: 0x000083C4,
	14203: 0x000083FB,
	14204: 0x000083D7,
	14205: 0x000083E2,
	14206: 0x0000841B,
	14207: 0x000083DB,
	14208: 0x000083FE,
	14209: 0x000086D8,
	14210: 0x000086E2,
	14211: 0x000086E6,
	14212: 0x000086D3,
	14213: 0x000086E3,
	14214: 0x000086DA,
	14215: 0x000086EA,
	14216: 0x000086DD,
	14217: 0x000086EB,
	14218: 0x000086DC,
	14219: 0x000086EC,
	14220: 0x000086E9,
	14221: 0x000086D7,
	14222: 0x000086E8,
	14223: 0x000086D1,
	14224: 0x00008848,
	14225: 0x00008856,
	14226: 0x00008855,
	14227: 0x000088BA,
	14228: 0x000088D7,
	14229: 0x000088B9,
	14230: 0x000088B8,
	14231: 0x000088C0,
	14232: 0x000088BE,
	14233: 0x000088B6,
	14234: 0x000088BC,
	14235: 0x000088B7,
	14236: 0x000088BD,
	14237: 0x000088B2,
	14238: 0x00008901,
	14239: 0x000088C9,
	14240: 0x00008995,
	14241: 0x00008998,
	14242: 0x00008997,
	14243: 0x000089DD,
	14244: 0x000089DA,
	14245: 0x000089DB,
	14246: 0x00008A4E,
	14247: 0x00008A4D,
	14248: 0x00008A39,
	14249: 0x00008A59,
	14250: 0x00008A40,
	14251: 0x00008A57,
	14252: 0x00008A58,
	14253: 0x00008A44,
	14254: 0x00008A45,
	14255: 0x00008A52,
	14256: 0x00008A48,
	14257: 0x00008A51,
	14258: 0x00008A4A,
	14259: 0x00008A4C,
	14260: 0x00008A4F,
	14261: 0x00008C5F,
	14262: 0x00008C81,
	14263: 0x00008C80,
	14264: 0x00008CBA,
	14265: 0x00008CBE,
	14266: 0x00008CB0,
	14267: 0x00008CB9,
	14268: 0x00008CB5,
	14269: 0x00008D84,
	14270: 0x00008D80,
	14271: 0x00008D89,
	14272: 0x00008DD8,
	14273: 0x00008DD3,
	14274: 0x00008DCD,
	14275: 0x00008DC7,
	14276: 0x00008DD6,
	14277: 0x00008DDC,
	14278: 0x00008DCF,
	14279: 0x00008DD5,
	14280: 0x00008DD9,
	14281: 0x00008DC8,
	14282: 0x00008DD7,
	14283: 0x00008DC5,
	14284: 0x00008EEF,
	14285: 0x00008EF7,
	14286: 0x00008EFA,
	14287: 0x00008EF9,
	14288: 0x00008EE6,
	14289: 0x00008EEE,
	14290: 0x00008EE5,
	14291: 0x00008EF5,
	14292: 0x00008EE7,
	14293: 0x00008EE8,
	14294: 0x00008EF6,
	14295: 0x00008EEB,
	14296: 0x00008EF1,
	14297: 0x00008EEC,
	14298: 0x00008EF4,
	14299: 0x00008EE9,
	14300: 0x0000902D,
	14301: 0x00009034,
	14302: 0x0000902F,
	14303: 0x00009106,
	14304: 0x0000912C,
	14305: 0x00009104,
	14306: 0x000090FF,
	14307: 0x000090FC,
	14308: 0x00009108,
	14309: 0x000090F9,
	14310: 0x000090FB,
	14311: 0x00009101,
	14312: 0x00009100,
	14313: 0x00009107,
	14314: 0x00009105,
	14315: 0x00009103,
	14316: 0x00009161,
	14317: 0x00009164,
	14318: 0x0000915F,
	14319: 0x00009162,
	14320: 0x00009160,
	14321: 0x00009201,
	14322: 0x0000920A,
	14323: 0x00009225,
	14324: 0x00009203,
	14325: 0x0000921A,
	14326: 0x00009226,
	14327: 0x0000920F,
	14328: 0x0000920C,
	14329: 0x00009200,
	14330: 0x00009212,
	14331: 0x000091FF,
	14332: 0x000091FD,
	14333: 0x00009206,
	14334: 0x00009204,
	14335: 0x00009227,
	14336: 0x00009202,
	14337: 0x0000921C,
	14338: 0x00009224,
	14339: 0x00009219,
	14340: 0x00009217,
	14341: 0x00009205,
	14342: 0x00009216,
	14343: 0x0000957B,
	14344: 0x0000958D,
	14345: 0x0000958C,
	14346: 0x00009590,
	14347: 0x00009687,
	14348: 0x0000967E,
	14349: 0x00009688,
	14350: 0x00009689,
	14351: 0x00009683,
	14352: 0x00009680,
	14353: 0x000096C2,
	14354: 0x000096C8,
	14355: 0x000096C3,
	14356: 0x000096F1,
	14357: 0x000096F0,
	14358: 0x0000976C,
	14359: 0x00009770,
	14360: 0x0000976E,
	14361: 0x00009807,
	14362: 0x000098A9,
	14363: 0x000098EB,
	14364: 0x00009CE6,
	14365: 0x00009EF9,
	14366: 0x00004E83,
	14367: 0x00004E84,
	14368: 0x00004EB6,
	14369: 0x000050BD,
	14370: 0x000050BF,
	14371: 0x000050C6,
	14372: 0x000050AE,
	14373: 0x000050C4,
	14374: 0x000050CA,
	14375: 0x000050B4,
	14376: 0x000050C8,
	14377: 0x000050C2,
	14378: 0x000050B0,
	14379: 0x000050C1,
	14380: 0x000050BA,
	14381: 0x000050B1,
	14382: 0x000050CB,
	14383: 0x000050C9,
	14384: 0x000050B6,
	14385: 0x000050B8,
	14386: 0x000051D7,
	14387: 0x0000527A,
	14388: 0x00005278,
	14389: 0x0000527B,
	14390: 0x0000527C,
	14391: 0x000055C3,
	14392: 0x000055DB,
	14393: 0x000055CC,
	14394: 0x000055D0,
	14395: 0x000055CB,
	14396: 0x000055CA,
	14397: 0x000055DD,
	14398: 0x000055C0,
	14399: 0x000055D4,
	14400: 0x000055C4,
	14401: 0x000055E9,
	14402: 0x000055BF,
	14403: 0x000055D2,
	14404: 0x0000558D,
	14405: 0x000055CF,
	14406: 0x000055D5,
	14407: 0x000055E2,
	14408: 0x000055D6,
	14409: 0x000055C8,
	14410: 0x000055F2,
	14411: 0x000055CD,
	14412: 0x000055D9,
	14413: 0x000055C2,
	14414: 0x00005714,
	14415: 0x00005853,
	14416: 0x00005868,
	14417: 0x00005864,
	14418: 0x0000584F,
	14419: 0x0000584D,
	14420: 0x00005849,
	14421: 0x0000586F,
	14422: 0x00005855,
	14423: 0x0000584E,
	14424: 0x0000585D,
	14425: 0x00005859,
	14426: 0x00005865,
	14427: 0x0000585B,
	14428: 0x0000583D,
	14429: 0x00005863,
	14430: 0x00005871,
	14431: 0x000058FC,
	14432: 0x00005AC7,
	14433: 0x00005AC4,
	14434: 0x00005ACB,
	14435: 0x00005ABA,
	14436: 0x00005AB8,
	14437: 0x00005AB1,
	14438: 0x00005AB5,
	14439: 0x00005AB0,
	14440: 0x00005ABF,
	14441: 0x00005AC8,
	14442: 0x00005ABB,
	14443: 0x00005AC6,
	14444: 0x00005AB7,
	14445: 0x00005AC0,
	14446: 0x00005ACA,
	14447: 0x00005AB4,
	14448: 0x00005AB6,
	14449: 0x00005ACD,
	14450: 0x00005AB9,
	14451: 0x00005A90,
	14452: 0x00005BD6,
	14453: 0x00005BD8,
	14454: 0x00005BD9,
	14455: 0x00005C1F,
	14456: 0x00005C33,
	14457: 0x00005D71,
	14458: 0x00005D63,
	14459: 0x00005D4A,
	14460: 0x00005D65,
	14461: 0x00005D72,
	14462: 0x00005D6C,
	14463: 0x00005D5E,
	14464: 0x00005D68,
	14465: 0x00005D67,
	14466: 0x00005D62,
	14467: 0x00005DF0,
	14468: 0x00005E4F,
	14469: 0x00005E4E,
	14470: 0x00005E4A,
	14471: 0x00005E4D,
	14472: 0x00005E4B,
	14473: 0x00005EC5,
	14474: 0x00005ECC,
	14475: 0x00005EC6,
	14476: 0x00005ECB,
	14477: 0x00005EC7,
	14478: 0x00005F40,
	14479: 0x00005FAF,
	14480: 0x00005FAD,
	14481: 0x000060F7,
	14482: 0x00006149,
	14483: 0x0000614A,
	14484: 0x0000612B,
	14485: 0x00006145,
	14486: 0x00006136,
	14487: 0x00006132,
	14488: 0x0000612E,
	14489: 0x00006146,
	14490: 0x0000612F,
	14491: 0x0000614F,
	14492: 0x00006129,
	14493: 0x00006140,
	14494: 0x00006220,
	14495: 0x00009168,
	14496: 0x00006223,
	14497: 0x00006225,
	14498: 0x00006224,
	14499: 0x000063C5,
	14500: 0x000063F1,
	14501: 0x000063EB,
	14502: 0x00006410,
	14503: 0x00006412,
	14504: 0x00006409,
	14505: 0x00006420,
	14506: 0x00006424,
	14507: 0x00006433,
	14508: 0x00006443,
	14509: 0x0000641F,
	14510: 0x00006415,
	14511: 0x00006418,
	14512: 0x00006439,
	14513: 0x00006437,
	14514: 0x00006422,
	14515: 0x00006423,
	14516: 0x0000640C,
	14517: 0x00006426,
	14518: 0x00006430,
	14519: 0x00006428,
	14520: 0x00006441,
	14521: 0x00006435,
	14522: 0x0000642F,
	14523: 0x0000640A,
	14524: 0x0000641A,
	14525: 0x00006440,
	14526: 0x00006425,
	14527: 0x00006427,
	14528: 0x0000640B,
	14529: 0x000063E7,
	14530: 0x0000641B,
	14531: 0x0000642E,
	14532: 0x00006421,
	14533: 0x0000640E,
	14534: 0x0000656F,
	14535: 0x00006592,
	14536: 0x000065D3,
	14537: 0x00006686,
	14538: 0x0000668C,
	14539: 0x00006695,
	14540: 0x00006690,
	14541: 0x0000668B,
	14542: 0x0000668A,
	14543: 0x00006699,
	14544: 0x00006694,
	14545: 0x00006678,
	14546: 0x00006720,
	14547: 0x00006966,
	14548: 0x0000695F,
	14549: 0x00006938,
	14550: 0x0000694E,
	14551: 0x00006962,
	14552: 0x00006971,
	14553: 0x0000693F,
	14554: 0x00006945,
	14555: 0x0000696A,
	14556: 0x00006939,
	14557: 0x00006942,
	14558: 0x00006957,
	14559: 0x00006959,
	14560: 0x0000697A,
	14561: 0x00006948,
	14562: 0x00006949,
	14563: 0x00006935,
	14564: 0x0000696C,
	14565: 0x00006933,
	14566: 0x0000693D,
	14567: 0x00006965,
	14568: 0x000068F0,
	14569: 0x00006978,
	14570: 0x00006934,
	14571: 0x00006969,
	14572: 0x00006940,
	14573: 0x0000696F,
	14574: 0x00006944,
	14575: 0x00006976,
	14576: 0x00006958,
	14577: 0x00006941,
	14578: 0x00006974,
	14579: 0x0000694C,
	14580: 0x0000693B,
	14581: 0x0000694B,
	14582: 0x00006937,
	14583: 0x0000695C,
	14584: 0x0000694F,
	14585: 0x00006951,
	14586: 0x00006932,
	14587: 0x00006952,
	14588: 0x0000692F,
	14589: 0x0000697B,
	14590: 0x0000693C,
	14591: 0x00006B46,
	14592: 0x00006B45,
	14593: 0x00006B43,
	14594: 0x00006B42,
	14595: 0x00006B48,
	14596: 0x00006B41,
	14597: 0x00006B9B,
	14598: 0x0000FA0D,
	14599: 0x00006BFB,
	14600: 0x00006BFC,
	14601: 0x00006BF9,
	14602: 0x00006BF7,
	14603: 0x00006BF8,
	14604: 0x00006E9B,
	14605: 0x00006ED6,
	14606: 0x00006EC8,
	14607: 0x00006E8F,
	14608: 0x00006EC0,
	14609: 0x00006E9F,
	14610: 0x00006E93,
	14611: 0x00006E94,
	14612: 0x00006EA0,
	14613: 0x00006EB1,
	14614: 0x00006EB9,
	14615: 0x00006EC6,
	14616: 0x00006ED2,
	14617: 0x00006EBD,
	14618: 0x00006EC1,
	14619: 0x00006E9E,
	14620: 0x00006EC9,
	14621: 0x00006EB7,
	14622: 0x00006EB0,
	14623: 0x00006ECD,
	14624: 0x00006EA6,
	14625: 0x00006ECF,
	14626: 0x00006EB2,
	14627: 0x00006EBE,
	14628: 0x00006EC3,
	14629: 0x00006EDC,
	14630: 0x00006ED8,
	14631: 0x00006E99,
	14632: 0x00006E92,
	14633: 0x00006E8E,
	14634: 0x00006E8D,
	14635: 0x00006EA4,
	14636: 0x00006EA1,
	14637: 0x00006EBF,
	14638: 0x00006EB3,
	14639: 0x00006ED0,
	14640: 0x00006ECA,
	14641: 0x00006E97,
	14642: 0x00006EAE,
	14643: 0x00006EA3,
	14644: 0x00007147,
	14645: 0x00007154,
	14646: 0x00007152,
	14647: 0x00007163,
	14648: 0x00007160,
	14649: 0x00007141,
	14650: 0x0000715D,
	14651: 0x00007162,
	14652: 0x00007172,
	14653: 0x00007178,
	14654: 0x0000716A,
	14655: 0x00007161,
	14656: 0x00007142,
	14657: 0x00007158,
	14658: 0x00007143,
	14659: 0x0000714B,
	14660: 0x00007170,
	14661: 0x0000715F,
	14662: 0x00007150,
	14663: 0x00007153,
	14664: 0x00007144,
	14665: 0x0000714D,
	14666: 0x0000715A,
	14667: 0x0000724F,
	14668: 0x0000728D,
	14669: 0x0000728C,
	14670: 0x00007291,
	14671: 0x00007290,
	14672: 0x0000728E,
	14673: 0x0000733C,
	14674: 0x00007342,
	14675: 0x0000733B,
	14676: 0x0000733A,
	14677: 0x00007340,
	14678: 0x0000734A,
	14679: 0x00007349,
	14680: 0x00007444,
	14681: 0x0000744A,
	14682: 0x0000744B,
	14683: 0x00007452,
	14684: 0x00007451,
	14685: 0x00007457,
	14686: 0x00007440,
	14687: 0x0000744F,
	14688: 0x00007450,
	14689: 0x0000744E,
	14690: 0x00007442,
	14691: 0x00007446,
	14692: 0x0000744D,
	14693: 0x00007454,
	14694: 0x000074E1,
	14695: 0x000074FF,
	14696: 0x000074FE,
	14697: 0x000074FD,
	14698: 0x0000751D,
	14699: 0x00007579,
	14700: 0x00007577,
	14701: 0x00006983,
	14702: 0x000075EF,
	14703: 0x0000760F,
	14704: 0x00007603,
	14705: 0x000075F7,
	14706: 0x000075FE,
	14707: 0x000075FC,
	14708: 0x000075F9,
	14709: 0x000075F8,
	14710: 0x00007610,
	14711: 0x000075FB,
	14712: 0x000075F6,
	14713: 0x000075ED,
	14714: 0x000075F5,
	14715: 0x000075FD,
	14716: 0x00007699,
	14717: 0x000076B5,
	14718: 0x000076DD,
	14719: 0x00007755,
	14720: 0x0000775F,
	14721: 0x00007760,
	14722: 0x00007752,
	14723: 0x00007756,
	14724: 0x0000775A,
	14725: 0x00007769,
	14726: 0x00007767,
	14727: 0x00007754,
	14728: 0x00007759,
	14729: 0x0000776D,
	14730: 0x000077E0,
	14731: 0x00007887,
	14732: 0x0000789A,
	14733: 0x00007894,
	14734: 0x0000788F,
	14735: 0x00007884,
	14736: 0x00007895,
	14737: 0x00007885,
	14738: 0x00007886,
	14739: 0x000078A1,
	14740: 0x00007883,
	14741: 0x00007879,
	14742: 0x00007899,
	14743: 0x00007880,
	14744: 0x00007896,
	14745: 0x0000787B,
	14746: 0x0000797C,
	14747: 0x00007982,
	14748: 0x0000797D,
	14749: 0x00007979,
	14750: 0x00007A11,
	14751: 0x00007A18,
	14752: 0x00007A19,
	14753: 0x00007A12,
	14754: 0x00007A17,
	14755: 0x00007A15,
	14756: 0x00007A22,
	14757: 0x00007A13,
	14758: 0x00007A1B,
	14759: 0x00007A10,
	14760: 0x00007AA3,
	14761: 0x00007AA2,
	14762: 0x00007A9E,
	14763: 0x00007AEB,
	14764: 0x00007B66,
	14765: 0x00007B64,
	14766: 0x00007B6D,
	14767: 0x00007B74,
	14768: 0x00007B69,
	14769: 0x00007B72,
	14770: 0x00007B65,
	14771: 0x00007B73,
	14772: 0x00007B71,
	14773: 0x00007B70,
	14774: 0x00007B61,
	14775: 0x00007B78,
	14776: 0x00007B76,
	14777: 0x00007B63,
	14778: 0x00007CB2,
	14779: 0x00007CB4,
	14780: 0x00007CAF,
	14781: 0x00007D88,
	14782: 0x00007D86,
	14783: 0x00007D80,
	14784: 0x00007D8D,
	14785: 0x00007D7F,
	14786: 0x00007D85,
	14787: 0x00007D7A,
	14788: 0x00007D8E,
	14789: 0x00007D7B,
	14790: 0x00007D83,
	14791: 0x00007D7C,
	14792: 0x00007D8C,
	14793: 0x00007D94,
	14794: 0x00007D84,
	14795: 0x00007D7D,
	14796: 0x00007D92,
	14797: 0x00007F6D,
	14798: 0x00007F6B,
	14799: 0x00007F67,
	14800: 0x00007F68,
	14801: 0x00007F6C,
	14802: 0x00007FA6,
	14803: 0x00007FA5,
	14804: 0x00007FA7,
	14805: 0x00007FDB,
	14806: 0x00007FDC,
	14807: 0x00008021,
	14808: 0x00008164,
	14809: 0x00008160,
	14810: 0x00008177,
	14811: 0x0000815C,
	14812: 0x00008169,
	14813: 0x0000815B,
	14814: 0x00008162,
	14815: 0x00008172,
	14816: 0x00006721,
	14817: 0x0000815E,
	14818: 0x00008176,
	14819: 0x00008167,
	14820: 0x0000816F,
	14821: 0x00008144,
	14822: 0x00008161,
	14823: 0x0000821D,
	14824: 0x00008249,
	14825: 0x00008244,
	14826: 0x00008240,
	14827: 0x00008242,
	14828: 0x00008245,
	14829: 0x000084F1,
	14830: 0x0000843F,
	14831: 0x00008456,
	14832: 0x00008476,
	14833: 0x00008479,
	14834: 0x0000848F,
	14835: 0x0000848D,
	14836: 0x00008465,
	14837: 0x00008451,
	14838: 0x00008440,
	14839: 0x00008486,
	14840: 0x00008467,
	14841: 0x00008430,
	14842: 0x0000844D,
	14843: 0x0000847D,
	14844: 0x0000845A,
	14845: 0x00008459,
	14846: 0x00008474,
	14847: 0x00008473,
	14848: 0x0000845D,
	14849: 0x00008507,
	14850: 0x0000845E,
	14851: 0x00008437,
	14852: 0x0000843A,
	14853: 0x00008434,
	14854: 0x0000847A,
	14855: 0x00008443,
	14856: 0x00008478,
	14857: 0x00008432,
	14858: 0x00008445,
	14859: 0x00008429,
	14860: 0x000083D9,
	14861: 0x0000844B,
	14862: 0x0000842F,
	14863: 0x00008442,
	14864: 0x0000842D,
	14865: 0x0000845F,
	14866: 0x00008470,
	14867: 0x00008439,
	14868: 0x0000844E,
	14869: 0x0000844C,
	14870: 0x00008452,
	14871: 0x0000846F,
	14872: 0x000084C5,
	14873: 0x0000848E,
	14874: 0x0000843B,
	14875: 0x00008447,
	14876: 0x00008436,
	14877: 0x00008433,
	14878: 0x00008468,
	14879: 0x0000847E,
	14880: 0x00008444,
	14881: 0x0000842B,
	14882: 0x00008460,
	14883: 0x00008454,
	14884: 0x0000846E,
	14885: 0x00008450,
	14886: 0x0000870B,
	14887: 0x00008704,
	14888: 0x000086F7,
	14889: 0x0000870C,
	14890: 0x000086FA,
	14891: 0x000086D6,
	14892: 0x000086F5,
	14893: 0x0000874D,
	14894: 0x000086F8,
	14895: 0x0000870E,
	14896: 0x00008709,
	14897: 0x00008701,
	14898: 0x000086F6,
	14899: 0x0000870D,
	14900: 0x00008705,
	14901: 0x000088D6,
	14902: 0x000088CB,
	14903: 0x000088CD,
	14904: 0x000088CE,
	14905: 0x000088DE,
	14906: 0x000088DB,
	14907: 0x000088DA,
	14908: 0x000088CC,
	14909: 0x000088D0,
	14910: 0x00008985,
	14911: 0x0000899B,
	14912: 0x000089DF,
	14913: 0x000089E5,
	14914: 0x000089E4,
	14915: 0x000089E1,
	14916: 0x000089E0,
	14917: 0x000089E2,
	14918: 0x000089DC,
	14919: 0x000089E6,
	14920: 0x00008A76,
	14921: 0x00008A86,
	14922: 0x00008A7F,
	14923: 0x00008A61,
	14924: 0x00008A3F,
	14925: 0x00008A77,
	14926: 0x00008A82,
	14927: 0x00008A84,
	14928: 0x00008A75,
	14929: 0x00008A83,
	14930: 0x00008A81,
	14931: 0x00008A74,
	14932: 0x00008A7A,
	14933: 0x00008C3C,
	14934: 0x00008C4B,
	14935: 0x00008C4A,
	14936: 0x00008C65,
	14937: 0x00008C64,
	14938: 0x00008C66,
	14939: 0x00008C86,
	14940: 0x00008C84,
	14941: 0x00008C85,
	14942: 0x00008CCC,
	14943: 0x00008D68,
	14944: 0x00008D69,
	14945: 0x00008D91,
	14946: 0x00008D8C,
	14947: 0x00008D8E,
	14948: 0x00008D8F,
	14949: 0x00008D8D,
	14950: 0x00008D93,
	14951: 0x00008D94,
	14952: 0x00008D90,
	14953: 0x00008D92,
	14954: 0x00008DF0,
	14955: 0x00008DE0,
	14956: 0x00008DEC,
	14957: 0x00008DF1,
	14958: 0x00008DEE,
	14959: 0x00008DD0,
	14960: 0x00008DE9,
	14961: 0x00008DE3,
	14962: 0x00008DE2,
	14963: 0x00008DE7,
	14964: 0x00008DF2,
	14965: 0x00008DEB,
	14966: 0x00008DF4,
	14967: 0x00008F06,
	14968: 0x00008EFF,
	14969: 0x00008F01,
	14970: 0x00008F00,
	14971: 0x00008F05,
	14972: 0x00008F07,
	14973: 0x00008F08,
	14974: 0x00008F02,
	14975: 0x00008F0B,
	14976: 0x00009052,
	14977: 0x0000903F,
	14978: 0x00009044,
	14979: 0x00009049,
	14980: 0x0000903D,
	14981: 0x00009110,
	14982: 0x0000910D,
	14983: 0x0000910F,
	14984: 0x00009111,
	14985: 0x00009116,
	14986: 0x00009114,
	14987: 0x0000910B,
	14988: 0x0000910E,
	14989: 0x0000916E,
	14990: 0x0000916F,
	14991: 0x00009248,
	14992: 0x00009252,
	14993: 0x00009230,
	14994: 0x0000923A,
	14995: 0x00009266,
	14996: 0x00009233,
	14997: 0x00009265,
	14998: 0x0000925E,
	14999: 0x00009283,
	15000: 0x0000922E,
	15001: 0x0000924A,
	15002: 0x00009246,
	15003: 0x0000926D,
	15004: 0x0000926C,
	15005: 0x0000924F,
	15006: 0x00009260,
	15007: 0x00009267,
	15008: 0x0000926F,
	15009: 0x00009236,
	15010: 0x00009261,
	15011: 0x00009270,
	15012: 0x00009231,
	15013: 0x00009254,
	15014: 0x00009263,
	15015: 0x00009250,
	15016: 0x00009272,
	15017: 0x0000924E,
	15018: 0x00009253,
	15019: 0x0000924C,
	15020: 0x00009256,
	15021: 0x00009232,
	15022: 0x0000959F,
	15023: 0x0000959C,
	15024: 0x0000959E,
	15025: 0x0000959B,
	15026: 0x00009692,
	15027: 0x00009693,
	15028: 0x00009691,
	15029: 0x00009697,
	15030: 0x000096CE,
	15031: 0x000096FA,
	15032: 0x000096FD,
	15033: 0x000096F8,
	15034: 0x000096F5,
	15035: 0x00009773,
	15036: 0x00009777,
	15037: 0x00009778,
	15038: 0x00009772,
	15039: 0x0000980F,
	15040: 0x0000980D,
	15041: 0x0000980E,
	15042: 0x000098AC,
	15043: 0x000098F6,
	15044: 0x000098F9,
	15045: 0x000099AF,
	15046: 0x000099B2,
	15047: 0x000099B0,
	15048: 0x000099B5,
	15049: 0x00009AAD,
	15050: 0x00009AAB,
	15051: 0x00009B5B,
	15052: 0x00009CEA,
	15053: 0x00009CED,
	15054: 0x00009CE7,
	15055: 0x00009E80,
	15056: 0x00009EFD,
	15057: 0x000050E6,
	15058: 0x000050D4,
	15059: 0x000050D7,
	15060: 0x000050E8,
	15061: 0x000050F3,
	15062: 0x000050DB,
	15063: 0x000050EA,
	15064: 0x000050DD,
	15065: 0x000050E4,
	15066: 0x000050D3,
	15067: 0x000050EC,
	15068: 0x000050F0,
	15069: 0x000050EF,
	15070: 0x000050E3,
	15071: 0x000050E0,
	15072: 0x000051D8,
	15073: 0x00005280,
	15074: 0x00005281,
	15075: 0x000052E9,
	15076: 0x000052EB,
	15077: 0x00005330,
	15078: 0x000053AC,
	15079: 0x00005627,
	15080: 0x00005615,
	15081: 0x0000560C,
	15082: 0x00005612,
	15083: 0x000055FC,
	15084: 0x0000560F,
	15085: 0x0000561C,
	15086: 0x00005601,
	15087: 0x00005613,
	15088: 0x00005602,
	15089: 0x000055FA,
	15090: 0x0000561D,
	15091: 0x00005604,
	15092: 0x000055FF,
	15093: 0x000055F9,
	15094: 0x00005889,
	15095: 0x0000587C,
	15096: 0x00005890,
	15097: 0x00005898,
	15098: 0x00005886,
	15099: 0x00005881,
	15100: 0x0000587F,
	15101: 0x00005874,
	15102: 0x0000588B,
	15103: 0x0000587A,
	15104: 0x00005887,
	15105: 0x00005891,
	15106: 0x0000588E,
	15107: 0x00005876,
	15108: 0x00005882,
	15109: 0x00005888,
	15110: 0x0000587B,
	15111: 0x00005894,
	15112: 0x0000588F,
	15113: 0x000058FE,
	15114: 0x0000596B,
	15115: 0x00005ADC,
	15116: 0x00005AEE,
	15117: 0x00005AE5,
	15118: 0x00005AD5,
	15119: 0x00005AEA,
	15120: 0x00005ADA,
	15121: 0x00005AED,
	15122: 0x00005AEB,
	15123: 0x00005AF3,
	15124: 0x00005AE2,
	15125: 0x00005AE0,
	15126: 0x00005ADB,
	15127: 0x00005AEC,
	15128: 0x00005ADE,
	15129: 0x00005ADD,
	15130: 0x00005AD9,
	15131: 0x00005AE8,
	15132: 0x00005ADF,
	15133: 0x00005B77,
	15134: 0x00005BE0,
	15135: 0x00005BE3,
	15136: 0x00005C63,
	15137: 0x00005D82,
	15138: 0x00005D80,
	15139: 0x00005D7D,
	15140: 0x00005D86,
	15141: 0x00005D7A,
	15142: 0x00005D81,
	15143: 0x00005D77,
	15144: 0x00005D8A,
	15145: 0x00005D89,
	15146: 0x00005D88,
	15147: 0x00005D7E,
	15148: 0x00005D7C,
	15149: 0x00005D8D,
	15150: 0x00005D79,
	15151: 0x00005D7F,
	15152: 0x00005E58,
	15153: 0x00005E59,
	15154: 0x00005E53,
	15155: 0x00005ED8,
	15156: 0x00005ED1,
	15157: 0x00005ED7,
	15158: 0x00005ECE,
	15159: 0x00005EDC,
	15160: 0x00005ED5,
	15161: 0x00005ED9,
	15162: 0x00005ED2,
	15163: 0x00005ED4,
	15164: 0x00005F44,
	15165: 0x00005F43,
	15166: 0x00005F6F,
	15167: 0x00005FB6,
	15168: 0x0000612C,
	15169: 0x00006128,
	15170: 0x00006141,
	15171: 0x0000615E,
	15172: 0x00006171,
	15173: 0x00006173,
	15174: 0x00006152,
	15175: 0x00006153,
	15176: 0x00006172,
	15177: 0x0000616C,
	15178: 0x00006180,
	15179: 0x00006174,
	15180: 0x00006154,
	15181: 0x0000617A,
	15182: 0x0000615B,
	15183: 0x00006165,
	15184: 0x0000613B,
	15185: 0x0000616A,
	15186: 0x00006161,
	15187: 0x00006156,
	15188: 0x00006229,
	15189: 0x00006227,
	15190: 0x0000622B,
	15191: 0x0000642B,
	15192: 0x0000644D,
	15193: 0x0000645B,
	15194: 0x0000645D,
	15195: 0x00006474,
	15196: 0x00006476,
	15197: 0x00006472,
	15198: 0x00006473,
	15199: 0x0000647D,
	15200: 0x00006475,
	15201: 0x00006466,
	15202: 0x000064A6,
	15203: 0x0000644E,
	15204: 0x00006482,
	15205: 0x0000645E,
	15206: 0x0000645C,
	15207: 0x0000644B,
	15208: 0x00006453,
	15209: 0x00006460,
	15210: 0x00006450,
	15211: 0x0000647F,
	15212: 0x0000643F,
	15213: 0x0000646C,
	15214: 0x0000646B,
	15215: 0x00006459,
	15216: 0x00006465,
	15217: 0x00006477,
	15218: 0x00006573,
	15219: 0x000065A0,
	15220: 0x000066A1,
	15221: 0x000066A0,
	15222: 0x0000669F,
	15223: 0x00006705,
	15224: 0x00006704,
	15225: 0x00006722,
	15226: 0x000069B1,
	15227: 0x000069B6,
	15228: 0x000069C9,
	15229: 0x000069A0,
	15230: 0x000069CE,
	15231: 0x00006996,
	15232: 0x000069B0,
	15233: 0x000069AC,
	15234: 0x000069BC,
	15235: 0x00006991,
	15236: 0x00006999,
	15237: 0x0000698E,
	15238: 0x000069A7,
	15239: 0x0000698D,
	15240: 0x000069A9,
	15241: 0x000069BE,
	15242: 0x000069AF,
	15243: 0x000069BF,
	15244: 0x000069C4,
	15245: 0x000069BD,
	15246: 0x000069A4,
	15247: 0x000069D4,
	15248: 0x000069B9,
	15249: 0x000069CA,
	15250: 0x0000699A,
	15251: 0x000069CF,
	15252: 0x000069B3,
	15253: 0x00006993,
	15254: 0x000069AA,
	15255: 0x000069A1,
	15256: 0x0000699E,
	15257: 0x000069D9,
	15258: 0x00006997,
	15259: 0x00006990,
	15260: 0x000069C2,
	15261: 0x000069B5,
	15262: 0x000069A5,
	15263: 0x000069C6,
	15264: 0x00006B4A,
	15265: 0x00006B4D,
	15266: 0x00006B4B,
	15267: 0x00006B9E,
	15268: 0x00006B9F,
	15269: 0x00006BA0,
	15270: 0x00006BC3,
	15271: 0x00006BC4,
	15272: 0x00006BFE,
	15273: 0x00006ECE,
	15274: 0x00006EF5,
	15275: 0x00006EF1,
	15276: 0x00006F03,
	15277: 0x00006F25,
	15278: 0x00006EF8,
	15279: 0x00006F37,
	15280: 0x00006EFB,
	15281: 0x00006F2E,
	15282: 0x00006F09,
	15283: 0x00006F4E,
	15284: 0x00006F19,
	15285: 0x00006F1A,
	15286: 0x00006F27,
	15287: 0x00006F18,
	15288: 0x00006F3B,
	15289: 0x00006F12,
	15290: 0x00006EED,
	15291: 0x00006F0A,
	15292: 0x00006F36,
	15293: 0x00006F73,
	15294: 0x00006EF9,
	15295: 0x00006EEE,
	15296: 0x00006F2D,
	15297: 0x00006F40,
	15298: 0x00006F30,
	15299: 0x00006F3C,
	15300: 0x00006F35,
	15301: 0x00006EEB,
	15302: 0x00006F07,
	15303: 0x00006F0E,
	15304: 0x00006F43,
	15305: 0x00006F05,
	15306: 0x00006EFD,
	15307: 0x00006EF6,
	15308: 0x00006F39,
	15309: 0x00006F1C,
	15310: 0x00006EFC,
	15311: 0x00006F3A,
	15312: 0x00006F1F,
	15313: 0x00006F0D,
	15314: 0x00006F1E,
	15315: 0x00006F08,
	15316: 0x00006F21,
	15317: 0x00007187,
	15318: 0x00007190,
	15319: 0x00007189,
	15320: 0x00007180,
	15321: 0x00007185,
	15322: 0x00007182,
	15323: 0x0000718F,
	15324: 0x0000717B,
	15325: 0x00007186,
	15326: 0x00007181,
	15327: 0x00007197,
	15328: 0x00007244,
	15329: 0x00007253,
	15330: 0x00007297,
	15331: 0x00007295,
	15332: 0x00007293,
	15333: 0x00007343,
	15334: 0x0000734D,
	15335: 0x00007351,
	15336: 0x0000734C,
	15337: 0x00007462,
	15338: 0x00007473,
	15339: 0x00007471,
	15340: 0x00007475,
	15341: 0x00007472,
	15342: 0x00007467,
	15343: 0x0000746E,
	15344: 0x00007500,
	15345: 0x00007502,
	15346: 0x00007503,
	15347: 0x0000757D,
	15348: 0x00007590,
	15349: 0x00007616,
	15350: 0x00007608,
	15351: 0x0000760C,
	15352: 0x00007615,
	15353: 0x00007611,
	15354: 0x0000760A,
	15355: 0x00007614,
	15356: 0x000076B8,
	15357: 0x00007781,
	15358: 0x0000777C,
	15359: 0x00007785,
	15360: 0x00007782,
	15361: 0x0000776E,
	15362: 0x00007780,
	15363: 0x0000776F,
	15364: 0x0000777E,
	15365: 0x00007783,
	15366: 0x000078B2,
	15367: 0x000078AA,
	15368: 0x000078B4,
	15369: 0x000078AD,
	15370: 0x000078A8,
	15371: 0x0000787E,
	15372: 0x000078AB,
	15373: 0x0000789E,
	15374: 0x000078A5,
	15375: 0x000078A0,
	15376: 0x000078AC,
	15377: 0x000078A2,
	15378: 0x000078A4,
	15379: 0x00007998,
	15380: 0x0000798A,
	15381: 0x0000798B,
	15382: 0x00007996,
	15383: 0x00007995,
	15384: 0x00007994,
	15385: 0x00007993,
	15386: 0x00007997,
	15387: 0x00007988,
	15388: 0x00007992,
	15389: 0x00007990,
	15390: 0x00007A2B,
	15391: 0x00007A4A,
	15392: 0x00007A30,
	15393: 0x00007A2F,
	15394: 0x00007A28,
	15395: 0x00007A26,
	15396: 0x00007AA8,
	15397: 0x00007AAB,
	15398: 0x00007AAC,
	15399: 0x00007AEE,
	15400: 0x00007B88,
	15401: 0x00007B9C,
	15402: 0x00007B8A,
	15403: 0x00007B91,
	15404: 0x00007B90,
	15405: 0x00007B96,
	15406: 0x00007B8D,
	15407: 0x00007B8C,
	15408: 0x00007B9B,
	15409: 0x00007B8E,
	15410: 0x00007B85,
	15411: 0x00007B98,
	15412: 0x00005284,
	15413: 0x00007B99,
	15414: 0x00007BA4,
	15415: 0x00007B82,
	15416: 0x00007CBB,
	15417: 0x00007CBF,
	15418: 0x00007CBC,
	15419: 0x00007CBA,
	15420: 0x00007DA7,
	15421: 0x00007DB7,
	15422: 0x00007DC2,
	15423: 0x00007DA3,
	15424: 0x00007DAA,
	15425: 0x00007DC1,
	15426: 0x00007DC0,
	15427: 0x00007DC5,
	15428: 0x00007D9D,
	15429: 0x00007DCE,
	15430: 0x00007DC4,
	15431: 0x00007DC6,
	15432: 0x00007DCB,
	15433: 0x00007DCC,
	15434: 0x00007DAF,
	15435: 0x00007DB9,
	15436: 0x00007D96,
	15437: 0x00007DBC,
	15438: 0x00007D9F,
	15439: 0x00007DA6,
	15440: 0x00007DAE,
	15441: 0x00007DA9,
	15442: 0x00007DA1,
	15443: 0x00007DC9,
	15444: 0x00007F73,
	15445: 0x00007FE2,
	15446: 0x00007FE3,
	15447: 0x00007FE5,
	15448: 0x00007FDE,
	15449: 0x00008024,
	15450: 0x0000805D,
	15451: 0x0000805C,
	15452: 0x00008189,
	15453: 0x00008186,
	15454: 0x00008183,
	15455: 0x00008187,
	15456: 0x0000818D,
	15457: 0x0000818C,
	15458: 0x0000818B,
	15459: 0x00008215,
	15460: 0x00008497,
	15461: 0x000084A4,
	15462: 0x000084A1,
	15463: 0x0000849F,
	15464: 0x000084BA,
	15465: 0x000084CE,
	15466: 0x000084C2,
	15467: 0x000084AC,
	15468: 0x000084AE,
	15469: 0x000084AB,
	15470: 0x000084B9,
	15471: 0x000084B4,
	15472: 0x000084C1,
	15473: 0x000084CD,
	15474: 0x000084AA,
	15475: 0x0000849A,
	15476: 0x000084B1,
	15477: 0x000084D0,
	15478: 0x0000849D,
	15479: 0x000084A7,
	15480: 0x000084BB,
	15481: 0x000084A2,
	15482: 0x00008494,
	15483: 0x000084C7,
	15484: 0x000084CC,
	15485: 0x0000849B,
	15486: 0x000084A9,
	15487: 0x000084AF,
	15488: 0x000084A8,
	15489: 0x000084D6,
	15490: 0x00008498,
	15491: 0x000084B6,
	15492: 0x000084CF,
	15493: 0x000084A0,
	15494: 0x000084D7,
	15495: 0x000084D4,
	15496: 0x000084D2,
	15497: 0x000084DB,
	15498: 0x000084B0,
	15499: 0x00008491,
	15500: 0x00008661,
	15501: 0x00008733,
	15502: 0x00008723,
	15503: 0x00008728,
	15504: 0x0000876B,
	15505: 0x00008740,
	15506: 0x0000872E,
	15507: 0x0000871E,
	15508: 0x00008721,
	15509: 0x00008719,
	15510: 0x0000871B,
	15511: 0x00008743,
	15512: 0x0000872C,
	15513: 0x00008741,
	15514: 0x0000873E,
	15515: 0x00008746,
	15516: 0x00008720,
	15517: 0x00008732,
	15518: 0x0000872A,
	15519: 0x0000872D,
	15520: 0x0000873C,
	15521: 0x00008712,
	15522: 0x0000873A,
	15523: 0x00008731,
	15524: 0x00008735,
	15525: 0x00008742,
	15526: 0x00008726,
	15527: 0x00008727,
	15528: 0x00008738,
	15529: 0x00008724,
	15530: 0x0000871A,
	15531: 0x00008730,
	15532: 0x00008711,
	15533: 0x000088F7,
	15534: 0x000088E7,
	15535: 0x000088F1,
	15536: 0x000088F2,
	15537: 0x000088FA,
	15538: 0x000088FE,
	15539: 0x000088EE,
	15540: 0x000088FC,
	15541: 0x000088F6,
	15542: 0x000088FB,
	15543: 0x000088F0,
	15544: 0x000088EC,
	15545: 0x000088EB,
	15546: 0x0000899D,
	15547: 0x000089A1,
	15548: 0x0000899F,
	15549: 0x0000899E,
	15550: 0x000089E9,
	15551: 0x000089EB,
	15552: 0x000089E8,
	15553: 0x00008AAB,
	15554: 0x00008A99,
	15555: 0x00008A8B,
	15556: 0x00008A92,
	15557: 0x00008A8F,
	15558: 0x00008A96,
	15559: 0x00008C3D,
	15560: 0x00008C68,
	15561: 0x00008C69,
	15562: 0x00008CD5,
	15563: 0x00008CCF,
	15564: 0x00008CD7,
	15565: 0x00008D96,
	15566: 0x00008E09,
	15567: 0x00008E02,
	15568: 0x00008DFF,
	15569: 0x00008E0D,
	15570: 0x00008DFD,
	15571: 0x00008E0A,
	15572: 0x00008E03,
	15573: 0x00008E07,
	15574: 0x00008E06,
	15575: 0x00008E05,
	15576: 0x00008DFE,
	15577: 0x00008E00,
	15578: 0x00008E04,
	15579: 0x00008F10,
	15580: 0x00008F11,
	15581: 0x00008F0E,
	15582: 0x00008F0D,
	15583: 0x00009123,
	15584: 0x0000911C,
	15585: 0x00009120,
	15586: 0x00009122,
	15587: 0x0000911F,
	15588: 0x0000911D,
	15589: 0x0000911A,
	15590: 0x00009124,
	15591: 0x00009121,
	15592: 0x0000911B,
	15593: 0x0000917A,
	15594: 0x00009172,
	15595: 0x00009179,
	15596: 0x00009173,
	15597: 0x000092A5,
	15598: 0x000092A4,
	15599: 0x00009276,
	15600: 0x0000929B,
	15601: 0x0000927A,
	15602: 0x000092A0,
	15603: 0x00009294,
	15604: 0x000092AA,
	15605: 0x0000928D,
	15606: 0x000092A6,
	15607: 0x0000929A,
	15608: 0x000092AB,
	15609: 0x00009279,
	15610: 0x00009297,
	15611: 0x0000927F,
	15612: 0x000092A3,
	15613: 0x000092EE,
	15614: 0x0000928E,
	15615: 0x00009282,
	15616: 0x00009295,
	15617: 0x000092A2,
	15618: 0x0000927D,
	15619: 0x00009288,
	15620: 0x000092A1,
	15621: 0x0000928A,
	15622: 0x00009286,
	15623: 0x0000928C,
	15624: 0x00009299,
	15625: 0x000092A7,
	15626: 0x0000927E,
	15627: 0x00009287,
	15628: 0x000092A9,
	15629: 0x0000929D,
	15630: 0x0000928B,
	15631: 0x0000922D,
	15632: 0x0000969E,
	15633: 0x000096A1,
	15634: 0x000096FF,
	15635: 0x00009758,
	15636: 0x0000977D,
	15637: 0x0000977A,
	15638: 0x0000977E,
	15639: 0x00009783,
	15640: 0x00009780,
	15641: 0x00009782,
	15642: 0x0000977B,
	15643: 0x00009784,
	15644: 0x00009781,
	15645: 0x0000977F,
	15646: 0x000097CE,
	15647: 0x000097CD,
	15648: 0x00009816,
	15649: 0x000098AD,
	15650: 0x000098AE,
	15651: 0x00009902,
	15652: 0x00009900,
	15653: 0x00009907,
	15654: 0x0000999D,
	15655: 0x0000999C,
	15656: 0x000099C3,
	15657: 0x000099B9,
	15658: 0x000099BB,
	15659: 0x000099BA,
	15660: 0x000099C2,
	15661: 0x000099BD,
	15662: 0x000099C7,
	15663: 0x00009AB1,
	15664: 0x00009AE3,
	15665: 0x00009AE7,
	15666: 0x00009B3E,
	15667: 0x00009B3F,
	15668: 0x00009B60,
	15669: 0x00009B61,
	15670: 0x00009B5F,
	15671: 0x00009CF1,
	15672: 0x00009CF2,
	15673: 0x00009CF5,
	15674: 0x00009EA7,
	15675: 0x000050FF,
	15676: 0x00005103,
	15677: 0x00005130,
	15678: 0x000050F8,
	15679: 0x00005106,
	15680: 0x00005107,
	15681: 0x000050F6,
	15682: 0x000050FE,
	15683: 0x0000510B,
	15684: 0x0000510C,
	15685: 0x000050FD,
	15686: 0x0000510A,
	15687: 0x0000528B,
	15688: 0x0000528C,
	15689: 0x000052F1,
	15690: 0x000052EF,
	15691: 0x00005648,
	15692: 0x00005642,
	15693: 0x0000564C,
	15694: 0x00005635,
	15695: 0x00005641,
	15696: 0x0000564A,
	15697: 0x00005649,
	15698: 0x00005646,
	15699: 0x00005658,
	15700: 0x0000565A,
	15701: 0x00005640,
	15702: 0x00005633,
	15703: 0x0000563D,
	15704: 0x0000562C,
	15705: 0x0000563E,
	15706: 0x00005638,
	15707: 0x0000562A,
	15708: 0x0000563A,
	15709: 0x0000571A,
	15710: 0x000058AB,
	15711: 0x0000589D,
	15712: 0x000058B1,
	15713: 0x000058A0,
	15714: 0x000058A3,
	15715: 0x000058AF,
	15716: 0x000058AC,
	15717: 0x000058A5,
	15718: 0x000058A1,
	15719: 0x000058FF,
	15720: 0x00005AFF,
	15721: 0x00005AF4,
	15722: 0x00005AFD,
	15723: 0x00005AF7,
	15724: 0x00005AF6,
	15725: 0x00005B03,
	15726: 0x00005AF8,
	15727: 0x00005B02,
	15728: 0x00005AF9,
	15729: 0x00005B01,
	15730: 0x00005B07,
	15731: 0x00005B05,
	15732: 0x00005B0F,
	15733: 0x00005C67,
	15734: 0x00005D99,
	15735: 0x00005D97,
	15736: 0x00005D9F,
	15737: 0x00005D92,
	15738: 0x00005DA2,
	15739: 0x00005D93,
	15740: 0x00005D95,
	15741: 0x00005DA0,
	15742: 0x00005D9C,
	15743: 0x00005DA1,
	15744: 0x00005D9A,
	15745: 0x00005D9E,
	15746: 0x00005E69,
	15747: 0x00005E5D,
	15748: 0x00005E60,
	15749: 0x00005E5C,
	15750: 0x00007DF3,
	15751: 0x00005EDB,
	15752: 0x00005EDE,
	15753: 0x00005EE1,
	15754: 0x00005F49,
	15755: 0x00005FB2,
	15756: 0x0000618B,
	15757: 0x00006183,
	15758: 0x00006179,
	15759: 0x000061B1,
	15760: 0x000061B0,
	15761: 0x000061A2,
	15762: 0x00006189,
	15763: 0x0000619B,
	15764: 0x00006193,
	15765: 0x000061AF,
	15766: 0x000061AD,
	15767: 0x0000619F,
	15768: 0x00006192,
	15769: 0x000061AA,
	15770: 0x000061A1,
	15771: 0x0000618D,
	15772: 0x00006166,
	15773: 0x000061B3,
	15774: 0x0000622D,
	15775: 0x0000646E,
	15776: 0x00006470,
	15777: 0x00006496,
	15778: 0x000064A0,
	15779: 0x00006485,
	15780: 0x00006497,
	15781: 0x0000649C,
	15782: 0x0000648F,
	15783: 0x0000648B,
	15784: 0x0000648A,
	15785: 0x0000648C,
	15786: 0x000064A3,
	15787: 0x0000649F,
	15788: 0x00006468,
	15789: 0x000064B1,
	15790: 0x00006498,
	15791: 0x00006576,
	15792: 0x0000657A,
	15793: 0x00006579,
	15794: 0x0000657B,
	15795: 0x000065B2,
	15796: 0x000065B3,
	15797: 0x000066B5,
	15798: 0x000066B0,
	15799: 0x000066A9,
	15800: 0x000066B2,
	15801: 0x000066B7,
	15802: 0x000066AA,
	15803: 0x000066AF,
	15804: 0x00006A00,
	15805: 0x00006A06,
	15806: 0x00006A17,
	15807: 0x000069E5,
	15808: 0x000069F8,
	15809: 0x00006A15,
	15810: 0x000069F1,
	15811: 0x000069E4,
	15812: 0x00006A20,
	15813: 0x000069FF,
	15814: 0x000069EC,
	15815: 0x000069E2,
	15816: 0x00006A1B,
	15817: 0x00006A1D,
	15818: 0x000069FE,
	15819: 0x00006A27,
	15820: 0x000069F2,
	15821: 0x000069EE,
	15822: 0x00006A14,
	15823: 0x000069F7,
	15824: 0x000069E7,
	15825: 0x00006A40,
	15826: 0x00006A08,
	15827: 0x000069E6,
	15828: 0x000069FB,
	15829: 0x00006A0D,
	15830: 0x000069FC,
	15831: 0x000069EB,
	15832: 0x00006A09,
	15833: 0x00006A04,
	15834: 0x00006A18,
	15835: 0x00006A25,
	15836: 0x00006A0F,
	15837: 0x000069F6,
	15838: 0x00006A26,
	15839: 0x00006A07,
	15840: 0x000069F4,
	15841: 0x00006A16,
	15842: 0x00006B51,
	15843: 0x00006BA5,
	15844: 0x00006BA3,
	15845: 0x00006BA2,
	15846: 0x00006BA6,
	15847: 0x00006C01,
	15848: 0x00006C00,
	15849: 0x00006BFF,
	15850: 0x00006C02,
	15851: 0x00006F41,
	15852: 0x00006F26,
	15853: 0x00006F7E,
	15854: 0x00006F87,
	15855: 0x00006FC6,
	15856: 0x00006F92,
	15857: 0x00006F8D,
	15858: 0x00006F89,
	15859: 0x00006F8C,
	15860: 0x00006F62,
	15861: 0x00006F4F,
	15862: 0x00006F85,
	15863: 0x00006F5A,
	15864: 0x00006F96,
	15865: 0x00006F76,
	15866: 0x00006F6C,
	15867: 0x00006F82,
	15868: 0x00006F55,
	15869: 0x00006F72,
	15870: 0x00006F52,
	15871: 0x00006F50,
	15872: 0x00006F57,
	15873: 0x00006F94,
	15874: 0x00006F93,
	15875: 0x00006F5D,
	15876: 0x00006F00,
	15877: 0x00006F61,
	15878: 0x00006F6B,
	15879: 0x00006F7D,
	15880: 0x00006F67,
	15881: 0x00006F90,
	15882: 0x00006F53,
	15883: 0x00006F8B,
	15884: 0x00006F69,
	15885: 0x00006F7F,
	15886: 0x00006F95,
	15887: 0x00006F63,
	15888: 0x00006F77,
	15889: 0x00006F6A,
	15890: 0x00006F7B,
	15891: 0x000071B2,
	15892: 0x000071AF,
	15893: 0x0000719B,
	15894: 0x000071B0,
	15895: 0x000071A0,
	15896: 0x0000719A,
	15897: 0x000071A9,
	15898: 0x000071B5,
	15899: 0x0000719D,
	15900: 0x000071A5,
	15901: 0x0000719E,
	15902: 0x000071A4,
	15903: 0x000071A1,
	15904: 0x000071AA,
	15905: 0x0000719C,
	15906: 0x000071A7,
	15907: 0x000071B3,
	15908: 0x00007298,
	15909: 0x0000729A,
	15910: 0x00007358,
	15911: 0x00007352,
	15912: 0x0000735E,
	15913: 0x0000735F,
	15914: 0x00007360,
	15915: 0x0000735D,
	15916: 0x0000735B,
	15917: 0x00007361,
	15918: 0x0000735A,
	15919: 0x00007359,
	15920: 0x00007362,
	15921: 0x00007487,
	15922: 0x00007489,
	15923: 0x0000748A,
	15924: 0x00007486,
	15925: 0x00007481,
	15926: 0x0000747D,
	15927: 0x00007485,
	15928: 0x00007488,
	15929: 0x0000747C,
	15930: 0x00007479,
	15931: 0x00007508,
	15932: 0x00007507,
	15933: 0x0000757E,
	15934: 0x00007625,
	15935: 0x0000761E,
	15936: 0x00007619,
	15937: 0x0000761D,
	15938: 0x0000761C,
	15939: 0x00007623,
	15940: 0x0000761A,
	15941: 0x00007628,
	15942: 0x0000761B,
	15943: 0x0000769C,
	15944: 0x0000769D,
	15945: 0x0000769E,
	15946: 0x0000769B,
	15947: 0x0000778D,
	15948: 0x0000778F,
	15949: 0x00007789,
	15950: 0x00007788,
	15951: 0x000078CD,
	15952: 0x000078BB,
	15953: 0x000078CF,
	15954: 0x000078CC,
	15955: 0x000078D1,
	15956: 0x000078CE,
	15957: 0x000078D4,
	15958: 0x000078C8,
	15959: 0x000078C3,
	15960: 0x000078C4,
	15961: 0x000078C9,
	15962: 0x0000799A,
	15963: 0x000079A1,
	15964: 0x000079A0,
	15965: 0x0000799C,
	15966: 0x000079A2,
	15967: 0x0000799B,
	15968: 0x00006B76,
	15969: 0x00007A39,
	15970: 0x00007AB2,
	15971: 0x00007AB4,
	15972: 0x00007AB3,
	15973: 0x00007BB7,
	15974: 0x00007BCB,
	15975: 0x00007BBE,
	15976: 0x00007BAC,
	15977: 0x00007BCE,
	15978: 0x00007BAF,
	15979: 0x00007BB9,
	15980: 0x00007BCA,
	15981: 0x00007BB5,
	15982: 0x00007CC5,
	15983: 0x00007CC8,
	15984: 0x00007CCC,
	15985: 0x00007CCB,
	15986: 0x00007DF7,
	15987: 0x00007DDB,
	15988: 0x00007DEA,
	15989: 0x00007DE7,
	15990: 0x00007DD7,
	15991: 0x00007DE1,
	15992: 0x00007E03,
	15993: 0x00007DFA,
	15994: 0x00007DE6,
	15995: 0x00007DF6,
	15996: 0x00007DF1,
	15997: 0x00007DF0,
	15998: 0x00007DEE,
	15999: 0x00007DDF,
	16000: 0x00007F76,
	16001: 0x00007FAC,
	16002: 0x00007FB0,
	16003: 0x00007FAD,
	16004: 0x00007FED,
	16005: 0x00007FEB,
	16006: 0x00007FEA,
	16007: 0x00007FEC,
	16008: 0x00007FE6,
	16009: 0x00007FE8,
	16010: 0x00008064,
	16011: 0x00008067,
	16012: 0x000081A3,
	16013: 0x0000819F,
	16014: 0x0000819E,
	16015: 0x00008195,
	16016: 0x000081A2,
	16017: 0x00008199,
	16018: 0x00008197,
	16019: 0x00008216,
	16020: 0x0000824F,
	16021: 0x00008253,
	16022: 0x00008252,
	16023: 0x00008250,
	16024: 0x0000824E,
	16025: 0x00008251,
	16026: 0x00008524,
	16027: 0x0000853B,
	16028: 0x0000850F,
	16029: 0x00008500,
	16030: 0x00008529,
	16031: 0x0000850E,
	16032: 0x00008509,
	16033: 0x0000850D,
	16034: 0x0000851F,
	16035: 0x0000850A,
	16036: 0x00008527,
	16037: 0x0000851C,
	16038: 0x000084FB,
	16039: 0x0000852B,
	16040: 0x000084FA,
	16041: 0x00008508,
	16042: 0x0000850C,
	16043: 0x000084F4,
	16044: 0x0000852A,
	16045: 0x000084F2,
	16046: 0x00008515,
	16047: 0x000084F7,
	16048: 0x000084EB,
	16049: 0x000084F3,
	16050: 0x000084FC,
	16051: 0x00008512,
	16052: 0x000084EA,
	16053: 0x000084E9,
	16054: 0x00008516,
	16055: 0x000084FE,
	16056: 0x00008528,
	16057: 0x0000851D,
	16058: 0x0000852E,
	16059: 0x00008502,
	16060: 0x000084FD,
	16061: 0x0000851E,
	16062: 0x000084F6,
	16063: 0x00008531,
	16064: 0x00008526,
	16065: 0x000084E7,
	16066: 0x000084E8,
	16067: 0x000084F0,
	16068: 0x000084EF,
	16069: 0x000084F9,
	16070: 0x00008518,
	16071: 0x00008520,
	16072: 0x00008530,
	16073: 0x0000850B,
	16074: 0x00008519,
	16075: 0x0000852F,
	16076: 0x00008662,
	16077: 0x00008756,
	16078: 0x00008763,
	16079: 0x00008764,
	16080: 0x00008777,
	16081: 0x000087E1,
	16082: 0x00008773,
	16083: 0x00008758,
	16084: 0x00008754,
	16085: 0x0000875B,
	16086: 0x00008752,
	16087: 0x00008761,
	16088: 0x0000875A,
	16089: 0x00008751,
	16090: 0x0000875E,
	16091: 0x0000876D,
	16092: 0x0000876A,
	16093: 0x00008750,
	16094: 0x0000874E,
	16095: 0x0000875F,
	16096: 0x0000875D,
	16097: 0x0000876F,
	16098: 0x0000876C,
	16099: 0x0000877A,
	16100: 0x0000876E,
	16101: 0x0000875C,
	16102: 0x00008765,
	16103: 0x0000874F,
	16104: 0x0000877B,
	16105: 0x00008775,
	16106: 0x00008762,
	16107: 0x00008767,
	16108: 0x00008769,
	16109: 0x0000885A,
	16110: 0x00008905,
	16111: 0x0000890C,
	16112: 0x00008914,
	16113: 0x0000890B,
	16114: 0x00008917,
	16115: 0x00008918,
	16116: 0x00008919,
	16117: 0x00008906,
	16118: 0x00008916,
	16119: 0x00008911,
	16120: 0x0000890E,
	16121: 0x00008909,
	16122: 0x000089A2,
	16123: 0x000089A4,
	16124: 0x000089A3,
	16125: 0x000089ED,
	16126: 0x000089F0,
	16127: 0x000089EC,
	16128: 0x00008ACF,
	16129: 0x00008AC6,
	16130: 0x00008AB8,
	16131: 0x00008AD3,
	16132: 0x00008AD1,
	16133: 0x00008AD4,
	16134: 0x00008AD5,
	16135: 0x00008ABB,
	16136: 0x00008AD7,
	16137: 0x00008ABE,
	16138: 0x00008AC0,
	16139: 0x00008AC5,
	16140: 0x00008AD8,
	16141: 0x00008AC3,
	16142: 0x00008ABA,
	16143: 0x00008ABD,
	16144: 0x00008AD9,
	16145: 0x00008C3E,
	16146: 0x00008C4D,
	16147: 0x00008C8F,
	16148: 0x00008CE5,
	16149: 0x00008CDF,
	16150: 0x00008CD9,
	16151: 0x00008CE8,
	16152: 0x00008CDA,
	16153: 0x00008CDD,
	16154: 0x00008CE7,
	16155: 0x00008DA0,
	16156: 0x00008D9C,
	16157: 0x00008DA1,
	16158: 0x00008D9B,
	16159: 0x00008E20,
	16160: 0x00008E23,
	16161: 0x00008E25,
	16162: 0x00008E24,
	16163: 0x00008E2E,
	16164: 0x00008E15,
	16165: 0x00008E1B,
	16166: 0x00008E16,
	16167: 0x00008E11,
	16168: 0x00008E19,
	16169: 0x00008E26,
	16170: 0x00008E27,
	16171: 0x00008E14,
	16172: 0x00008E12,
	16173: 0x00008E18,
	16174: 0x00008E13,
	16175: 0x00008E1C,
	16176: 0x00008E17,
	16177: 0x00008E1A,
	16178: 0x00008F2C,
	16179: 0x00008F24,
	16180: 0x00008F18,
	16181: 0x00008F1A,
	16182: 0x00008F20,
	16183: 0x00008F23,
	16184: 0x00008F16,
	16185: 0x00008F17,
	16186: 0x00009073,
	16187: 0x00009070,
	16188: 0x0000906F,
	16189: 0x00009067,
	16190: 0x0000906B,
	16191: 0x0000912F,
	16192: 0x0000912B,
	16193: 0x00009129,
	16194: 0x0000912A,
	16195: 0x00009132,
	16196: 0x00009126,
	16197: 0x0000912E,
	16198: 0x00009185,
	16199: 0x00009186,
	16200: 0x0000918A,
	16201: 0x00009181,
	16202: 0x00009182,
	16203: 0x00009184,
	16204: 0x00009180,
	16205: 0x000092D0,
	16206: 0x000092C3,
	16207: 0x000092C4,
	16208: 0x000092C0,
	16209: 0x000092D9,
	16210: 0x000092B6,
	16211: 0x000092CF,
	16212: 0x000092F1,
	16213: 0x000092DF,
	16214: 0x000092D8,
	16215: 0x000092E9,
	16216: 0x000092D7,
	16217: 0x000092DD,
	16218: 0x000092CC,
	16219: 0x000092EF,
	16220: 0x000092C2,
	16221: 0x000092E8,
	16222: 0x000092CA,
	16223: 0x000092C8,
	16224: 0x000092CE,
	16225: 0x000092E6,
	16226: 0x000092CD,
	16227: 0x000092D5,
	16228: 0x000092C9,
	16229: 0x000092E0,
	16230: 0x000092DE,
	16231: 0x000092E7,
	16232: 0x000092D1,
	16233: 0x000092D3,
	16234: 0x000092B5,
	16235: 0x000092E1,
	16236: 0x000092C6,
	16237: 0x000092B4,
	16238: 0x0000957C,
	16239: 0x000095AC,
	16240: 0x000095AB,
	16241: 0x000095AE,
	16242: 0x000095B0,
	16243: 0x000096A4,
	16244: 0x000096A2,
	16245: 0x000096D3,
	16246: 0x00009705,
	16247: 0x00009708,
	16248: 0x00009702,
	16249: 0x0000975A,
	16250: 0x0000978A,
	16251: 0x0000978E,
	16252: 0x00009788,
	16253: 0x000097D0,
	16254: 0x000097CF,
	16255: 0x0000981E,
	16256: 0x0000981D,
	16257: 0x00009826,
	16258: 0x00009829,
	16259: 0x00009828,
	16260: 0x00009820,
	16261: 0x0000981B,
	16262: 0x00009827,
	16263: 0x000098B2,
	16264: 0x00009908,
	16265: 0x000098FA,
	16266: 0x00009911,
	16267: 0x00009914,
	16268: 0x00009916,
	16269: 0x00009917,
	16270: 0x00009915,
	16271: 0x000099DC,
	16272: 0x000099CD,
	16273: 0x000099CF,
	16274: 0x000099D3,
	16275: 0x000099D4,
	16276: 0x000099CE,
	16277: 0x000099C9,
	16278: 0x000099D6,
	16279: 0x000099D8,
	16280: 0x000099CB,
	16281: 0x000099D7,
	16282: 0x000099CC,
	16283: 0x00009AB3,
	16284: 0x00009AEC,
	16285: 0x00009AEB,
	16286: 0x00009AF3,
	16287: 0x00009AF2,
	16288: 0x00009AF1,
	16289: 0x00009B46,
	16290: 0x00009B43,
	16291: 0x00009B67,
	16292: 0x00009B74,
	16293: 0x00009B71,
	16294: 0x00009B66,
	16295: 0x00009B76,
	16296: 0x00009B75,
	16297: 0x00009B70,
	16298: 0x00009B68,
	16299: 0x00009B64,
	16300: 0x00009B6C,
	16301: 0x00009CFC,
	16302: 0x00009CFA,
	16303: 0x00009CFD,
	16304: 0x00009CFF,
	16305: 0x00009CF7,
	16306: 0x00009D07,
	16307: 0x00009D00,
	16308: 0x00009CF9,
	16309: 0x00009CFB,
	16310: 0x00009D08,
	16311: 0x00009D05,
	16312: 0x00009D04,
	16313: 0x00009E83,
	16314: 0x00009ED3,
	16315: 0x00009F0F,
	16316: 0x00009F10,
	16317: 0x0000511C,
	16318: 0x00005113,
	16319: 0x00005117,
	16320: 0x0000511A,
	16321: 0x00005111,
	16322: 0x000051DE,
	16323: 0x00005334,
	16324: 0x000053E1,
	16325: 0x00005670,
	16326: 0x00005660,
	16327: 0x0000566E,
	16328: 0x00005673,
	16329: 0x00005666,
	16330: 0x00005663,
	16331: 0x0000566D,
	16332: 0x00005672,
	16333: 0x0000565E,
	16334: 0x00005677,
	16335: 0x0000571C,
	16336: 0x0000571B,
	16337: 0x000058C8,
	16338: 0x000058BD,
	16339: 0x000058C9,
	16340: 0x000058BF,
	16341: 0x000058BA,
	16342: 0x000058C2,
	16343: 0x000058BC,
	16344: 0x000058C6,
	16345: 0x00005B17,
	16346: 0x00005B19,
	16347: 0x00005B1B,
	16348: 0x00005B21,
	16349: 0x00005B14,
	16350: 0x00005B13,
	16351: 0x00005B10,
	16352: 0x00005B16,
	16353: 0x00005B28,
	16354: 0x00005B1A,
	16355: 0x00005B20,
	16356: 0x00005B1E,
	16357: 0x00005BEF,
	16358: 0x00005DAC,
	16359: 0x00005DB1,
	16360: 0x00005DA9,
	16361: 0x00005DA7,
	16362: 0x00005DB5,
	16363: 0x00005DB0,
	16364: 0x00005DAE,
	16365: 0x00005DAA,
	16366: 0x00005DA8,
	16367: 0x00005DB2,
	16368: 0x00005DAD,
	16369: 0x00005DAF,
	16370: 0x00005DB4,
	16371: 0x00005E67,
	16372: 0x00005E68,
	16373: 0x00005E66,
	16374: 0x00005E6F,
	16375: 0x00005EE9,
	16376: 0x00005EE7,
	16377: 0x00005EE6,
	16378: 0x00005EE8,
	16379: 0x00005EE5,
	16380: 0x00005F4B,
	16381: 0x00005FBC,
	16382: 0x0000619D,
	16383: 0x000061A8,
	16384: 0x00006196,
	16385: 0x000061C5,
	16386: 0x000061B4,
	16387: 0x000061C6,
	16388: 0x000061C1,
	16389: 0x000061CC,
	16390: 0x000061BA,
	16391: 0x000061BF,
	16392: 0x000061B8,
	16393: 0x0000618C,
	16394: 0x000064D7,
	16395: 0x000064D6,
	16396: 0x000064D0,
	16397: 0x000064CF,
	16398: 0x000064C9,
	16399: 0x000064BD,
	16400: 0x00006489,
	16401: 0x000064C3,
	16402: 0x000064DB,
	16403: 0x000064F3,
	16404: 0x000064D9,
	16405: 0x00006533,
	16406: 0x0000657F,
	16407: 0x0000657C,
	16408: 0x000065A2,
	16409: 0x000066C8,
	16410: 0x000066BE,
	16411: 0x000066C0,
	16412: 0x000066CA,
	16413: 0x000066CB,
	16414: 0x000066CF,
	16415: 0x000066BD,
	16416: 0x000066BB,
	16417: 0x000066BA,
	16418: 0x000066CC,
	16419: 0x00006723,
	16420: 0x00006A34,
	16421: 0x00006A66,
	16422: 0x00006A49,
	16423: 0x00006A67,
	16424: 0x00006A32,
	16425: 0x00006A68,
	16426: 0x00006A3E,
	16427: 0x00006A5D,
	16428: 0x00006A6D,
	16429: 0x00006A76,
	16430: 0x00006A5B,
	16431: 0x00006A51,
	16432: 0x00006A28,
	16433: 0x00006A5A,
	16434: 0x00006A3B,
	16435: 0x00006A3F,
	16436: 0x00006A41,
	16437: 0x00006A6A,
	16438: 0x00006A64,
	16439: 0x00006A50,
	16440: 0x00006A4F,
	16441: 0x00006A54,
	16442: 0x00006A6F,
	16443: 0x00006A69,
	16444: 0x00006A60,
	16445: 0x00006A3C,
	16446: 0x00006A5E,
	16447: 0x00006A56,
	16448: 0x00006A55,
	16449: 0x00006A4D,
	16450: 0x00006A4E,
	16451: 0x00006A46,
	16452: 0x00006B55,
	16453: 0x00006B54,
	16454: 0x00006B56,
	16455: 0x00006BA7,
	16456: 0x00006BAA,
	16457: 0x00006BAB,
	16458: 0x00006BC8,
	16459: 0x00006BC7,
	16460: 0x00006C04,
	16461: 0x00006C03,
	16462: 0x00006C06,
	16463: 0x00006FAD,
	16464: 0x00006FCB,
	16465: 0x00006FA3,
	16466: 0x00006FC7,
	16467: 0x00006FBC,
	16468: 0x00006FCE,
	16469: 0x00006FC8,
	16470: 0x00006F5E,
	16471: 0x00006FC4,
	16472: 0x00006FBD,
	16473: 0x00006F9E,
	16474: 0x00006FCA,
	16475: 0x00006FA8,
	16476: 0x00007004,
	16477: 0x00006FA5,
	16478: 0x00006FAE,
	16479: 0x00006FBA,
	16480: 0x00006FAC,
	16481: 0x00006FAA,
	16482: 0x00006FCF,
	16483: 0x00006FBF,
	16484: 0x00006FB8,
	16485: 0x00006FA2,
	16486: 0x00006FC9,
	16487: 0x00006FAB,
	16488: 0x00006FCD,
	16489: 0x00006FAF,
	16490: 0x00006FB2,
	16491: 0x00006FB0,
	16492: 0x000071C5,
	16493: 0x000071C2,
	16494: 0x000071BF,
	16495: 0x000071B8,
	16496: 0x000071D6,
	16497: 0x000071C0,
	16498: 0x000071C1,
	16499: 0x000071CB,
	16500: 0x000071D4,
	16501: 0x000071CA,
	16502: 0x000071C7,
	16503: 0x000071CF,
	16504: 0x000071BD,
	16505: 0x000071D8,
	16506: 0x000071BC,
	16507: 0x000071C6,
	16508: 0x000071DA,
	16509: 0x000071DB,
	16510: 0x0000729D,
	16511: 0x0000729E,
	16512: 0x00007369,
	16513: 0x00007366,
	16514: 0x00007367,
	16515: 0x0000736C,
	16516: 0x00007365,
	16517: 0x0000736B,
	16518: 0x0000736A,
	16519: 0x0000747F,
	16520: 0x0000749A,
	16521: 0x000074A0,
	16522: 0x00007494,
	16523: 0x00007492,
	16524: 0x00007495,
	16525: 0x000074A1,
	16526: 0x0000750B,
	16527: 0x00007580,
	16528: 0x0000762F,
	16529: 0x0000762D,
	16530: 0x00007631,
	16531: 0x0000763D,
	16532: 0x00007633,
	16533: 0x0000763C,
	16534: 0x00007635,
	16535: 0x00007632,
	16536: 0x00007630,
	16537: 0x000076BB,
	16538: 0x000076E6,
	16539: 0x0000779A,
	16540: 0x0000779D,
	16541: 0x000077A1,
	16542: 0x0000779C,
	16543: 0x0000779B,
	16544: 0x000077A2,
	16545: 0x000077A3,
	16546: 0x00007795,
	16547: 0x00007799,
	16548: 0x00007797,
	16549: 0x000078DD,
	16550: 0x000078E9,
	16551: 0x000078E5,
	16552: 0x000078EA,
	16553: 0x000078DE,
	16554: 0x000078E3,
	16555: 0x000078DB,
	16556: 0x000078E1,
	16557: 0x000078E2,
	16558: 0x000078ED,
	16559: 0x000078DF,
	16560: 0x000078E0,
	16561: 0x000079A4,
	16562: 0x00007A44,
	16563: 0x00007A48,
	16564: 0x00007A47,
	16565: 0x00007AB6,
	16566: 0x00007AB8,
	16567: 0x00007AB5,
	16568: 0x00007AB1,
	16569: 0x00007AB7,
	16570: 0x00007BDE,
	16571: 0x00007BE3,
	16572: 0x00007BE7,
	16573: 0x00007BDD,
	16574: 0x00007BD5,
	16575: 0x00007BE5,
	16576: 0x00007BDA,
	16577: 0x00007BE8,
	16578: 0x00007BF9,
	16579: 0x00007BD4,
	16580: 0x00007BEA,
	16581: 0x00007BE2,
	16582: 0x00007BDC,
	16583: 0x00007BEB,
	16584: 0x00007BD8,
	16585: 0x00007BDF,
	16586: 0x00007CD2,
	16587: 0x00007CD4,
	16588: 0x00007CD7,
	16589: 0x00007CD0,
	16590: 0x00007CD1,
	16591: 0x00007E12,
	16592: 0x00007E21,
	16593: 0x00007E17,
	16594: 0x00007E0C,
	16595: 0x00007E1F,
	16596: 0x00007E20,
	16597: 0x00007E13,
	16598: 0x00007E0E,
	16599: 0x00007E1C,
	16600: 0x00007E15,
	16601: 0x00007E1A,
	16602: 0x00007E22,
	16603: 0x00007E0B,
	16604: 0x00007E0F,
	16605: 0x00007E16,
	16606: 0x00007E0D,
	16607: 0x00007E14,
	16608: 0x00007E25,
	16609: 0x00007E24,
	16610: 0x00007F43,
	16611: 0x00007F7B,
	16612: 0x00007F7C,
	16613: 0x00007F7A,
	16614: 0x00007FB1,
	16615: 0x00007FEF,
	16616: 0x0000802A,
	16617: 0x00008029,
	16618: 0x0000806C,
	16619: 0x000081B1,
	16620: 0x000081A6,
	16621: 0x000081AE,
	16622: 0x000081B9,
	16623: 0x000081B5,
	16624: 0x000081AB,
	16625: 0x000081B0,
	16626: 0x000081AC,
	16627: 0x000081B4,
	16628: 0x000081B2,
	16629: 0x000081B7,
	16630: 0x000081A7,
	16631: 0x000081F2,
	16632: 0x00008255,
	16633: 0x00008256,
	16634: 0x00008257,
	16635: 0x00008556,
	16636: 0x00008545,
	16637: 0x0000856B,
	16638: 0x0000854D,
	16639: 0x00008553,
	16640: 0x00008561,
	16641: 0x00008558,
	16642: 0x00008540,
	16643: 0x00008546,
	16644: 0x00008564,
	16645: 0x00008541,
	16646: 0x00008562,
	16647: 0x00008544,
	16648: 0x00008551,
	16649: 0x00008547,
	16650: 0x00008563,
	16651: 0x0000853E,
	16652: 0x0000855B,
	16653: 0x00008571,
	16654: 0x0000854E,
	16655: 0x0000856E,
	16656: 0x00008575,
	16657: 0x00008555,
	16658: 0x00008567,
	16659: 0x00008560,
	16660: 0x0000858C,
	16661: 0x00008566,
	16662: 0x0000855D,
	16663: 0x00008554,
	16664: 0x00008565,
	16665: 0x0000856C,
	16666: 0x00008663,
	16667: 0x00008665,
	16668: 0x00008664,
	16669: 0x0000879B,
	16670: 0x0000878F,
	16671: 0x00008797,
	16672: 0x00008793,
	16673: 0x00008792,
	16674: 0x00008788,
	16675: 0x00008781,
	16676: 0x00008796,
	16677: 0x00008798,
	16678: 0x00008779,
	16679: 0x00008787,
	16680: 0x000087A3,
	16681: 0x00008785,
	16682: 0x00008790,
	16683: 0x00008791,
	16684: 0x0000879D,
	16685: 0x00008784,
	16686: 0x00008794,
	16687: 0x0000879C,
	16688: 0x0000879A,
	16689: 0x00008789,
	16690: 0x0000891E,
	16691: 0x00008926,
	16692: 0x00008930,
	16693: 0x0000892D,
	16694: 0x0000892E,
	16695: 0x00008927,
	16696: 0x00008931,
	16697: 0x00008922,
	16698: 0x00008929,
	16699: 0x00008923,
	16700: 0x0000892F,
	16701: 0x0000892C,
	16702: 0x0000891F,
	16703: 0x000089F1,
	16704: 0x00008AE0,
	16705: 0x00008AE2,
	16706: 0x00008AF2,
	16707: 0x00008AF4,
	16708: 0x00008AF5,
	16709: 0x00008ADD,
	16710: 0x00008B14,
	16711: 0x00008AE4,
	16712: 0x00008ADF,
	16713: 0x00008AF0,
	16714: 0x00008AC8,
	16715: 0x00008ADE,
	16716: 0x00008AE1,
	16717: 0x00008AE8,
	16718: 0x00008AFF,
	16719: 0x00008AEF,
	16720: 0x00008AFB,
	16721: 0x00008C91,
	16722: 0x00008C92,
	16723: 0x00008C90,
	16724: 0x00008CF5,
	16725: 0x00008CEE,
	16726: 0x00008CF1,
	16727: 0x00008CF0,
	16728: 0x00008CF3,
	16729: 0x00008D6C,
	16730: 0x00008D6E,
	16731: 0x00008DA5,
	16732: 0x00008DA7,
	16733: 0x00008E33,
	16734: 0x00008E3E,
	16735: 0x00008E38,
	16736: 0x00008E40,
	16737: 0x00008E45,
	16738: 0x00008E36,
	16739: 0x00008E3C,
	16740: 0x00008E3D,
	16741: 0x00008E41,
	16742: 0x00008E30,
	16743: 0x00008E3F,
	16744: 0x00008EBD,
	16745: 0x00008F36,
	16746: 0x00008F2E,
	16747: 0x00008F35,
	16748: 0x00008F32,
	16749: 0x00008F39,
	16750: 0x00008F37,
	16751: 0x00008F34,
	16752: 0x00009076,
	16753: 0x00009079,
	16754: 0x0000907B,
	16755: 0x00009086,
	16756: 0x000090FA,
	16757: 0x00009133,
	16758: 0x00009135,
	16759: 0x00009136,
	16760: 0x00009193,
	16761: 0x00009190,
	16762: 0x00009191,
	16763: 0x0000918D,
	16764: 0x0000918F,
	16765: 0x00009327,
	16766: 0x0000931E,
	16767: 0x00009308,
	16768: 0x0000931F,
	16769: 0x00009306,
	16770: 0x0000930F,
	16771: 0x0000937A,
	16772: 0x00009338,
	16773: 0x0000933C,
	16774: 0x0000931B,
	16775: 0x00009323,
	16776: 0x00009312,
	16777: 0x00009301,
	16778: 0x00009346,
	16779: 0x0000932D,
	16780: 0x0000930E,
	16781: 0x0000930D,
	16782: 0x000092CB,
	16783: 0x0000931D,
	16784: 0x000092FA,
	16785: 0x00009325,
	16786: 0x00009313,
	16787: 0x000092F9,
	16788: 0x000092F7,
	16789: 0x00009334,
	16790: 0x00009302,
	16791: 0x00009324,
	16792: 0x000092FF,
	16793: 0x00009329,
	16794: 0x00009339,
	16795: 0x00009335,
	16796: 0x0000932A,
	16797: 0x00009314,
	16798: 0x0000930C,
	16799: 0x0000930B,
	16800: 0x000092FE,
	16801: 0x00009309,
	16802: 0x00009300,
	16803: 0x000092FB,
	16804: 0x00009316,
	16805: 0x000095BC,
	16806: 0x000095CD,
	16807: 0x000095BE,
	16808: 0x000095B9,
	16809: 0x000095BA,
	16810: 0x000095B6,
	16811: 0x000095BF,
	16812: 0x000095B5,
	16813: 0x000095BD,
	16814: 0x000096A9,
	16815: 0x000096D4,
	16816: 0x0000970B,
	16817: 0x00009712,
	16818: 0x00009710,
	16819: 0x00009799,
	16820: 0x00009797,
	16821: 0x00009794,
	16822: 0x000097F0,
	16823: 0x000097F8,
	16824: 0x00009835,
	16825: 0x0000982F,
	16826: 0x00009832,
	16827: 0x00009924,
	16828: 0x0000991F,
	16829: 0x00009927,
	16830: 0x00009929,
	16831: 0x0000999E,
	16832: 0x000099EE,
	16833: 0x000099EC,
	16834: 0x000099E5,
	16835: 0x000099E4,
	16836: 0x000099F0,
	16837: 0x000099E3,
	16838: 0x000099EA,
	16839: 0x000099E9,
	16840: 0x000099E7,
	16841: 0x00009AB9,
	16842: 0x00009ABF,
	16843: 0x00009AB4,
	16844: 0x00009ABB,
	16845: 0x00009AF6,
	16846: 0x00009AFA,
	16847: 0x00009AF9,
	16848: 0x00009AF7,
	16849: 0x00009B33,
	16850: 0x00009B80,
	16851: 0x00009B85,
	16852: 0x00009B87,
	16853: 0x00009B7C,
	16854: 0x00009B7E,
	16855: 0x00009B7B,
	16856: 0x00009B82,
	16857: 0x00009B93,
	16858: 0x00009B92,
	16859: 0x00009B90,
	16860: 0x00009B7A,
	16861: 0x00009B95,
	16862: 0x00009B7D,
	16863: 0x00009B88,
	16864: 0x00009D25,
	16865: 0x00009D17,
	16866: 0x00009D20,
	16867: 0x00009D1E,
	16868: 0x00009D14,
	16869: 0x00009D29,
	16870: 0x00009D1D,
	16871: 0x00009D18,
	16872: 0x00009D22,
	16873: 0x00009D10,
	16874: 0x00009D19,
	16875: 0x00009D1F,
	16876: 0x00009E88,
	16877: 0x00009E86,
	16878: 0x00009E87,
	16879: 0x00009EAE,
	16880: 0x00009EAD,
	16881: 0x00009ED5,
	16882: 0x00009ED6,
	16883: 0x00009EFA,
	16884: 0x00009F12,
	16885: 0x00009F3D,
	16886: 0x00005126,
	16887: 0x00005125,
	16888: 0x00005122,
	16889: 0x00005124,
	16890: 0x00005120,
	16891: 0x00005129,
	16892: 0x000052F4,
	16893: 0x00005693,
	16894: 0x0000568C,
	16895: 0x0000568D,
	16896: 0x00005686,
	16897: 0x00005684,
	16898: 0x00005683,
	16899: 0x0000567E,
	16900: 0x00005682,
	16901: 0x0000567F,
	16902: 0x00005681,
	16903: 0x000058D6,
	16904: 0x000058D4,
	16905: 0x000058CF,
	16906: 0x000058D2,
	16907: 0x00005B2D,
	16908: 0x00005B25,
	16909: 0x00005B32,
	16910: 0x00005B23,
	16911: 0x00005B2C,
	16912: 0x00005B27,
	16913: 0x00005B26,
	16914: 0x00005B2F,
	16915: 0x00005B2E,
	16916: 0x00005B7B,
	16917: 0x00005BF1,
	16918: 0x00005BF2,
	16919: 0x00005DB7,
	16920: 0x00005E6C,
	16921: 0x00005E6A,
	16922: 0x00005FBE,
	16923: 0x00005FBB,
	16924: 0x000061C3,
	16925: 0x000061B5,
	16926: 0x000061BC,
	16927: 0x000061E7,
	16928: 0x000061E0,
	16929: 0x000061E5,
	16930: 0x000061E4,
	16931: 0x000061E8,
	16932: 0x000061DE,
	16933: 0x000064EF,
	16934: 0x000064E9,
	16935: 0x000064E3,
	16936: 0x000064EB,
	16937: 0x000064E4,
	16938: 0x000064E8,
	16939: 0x00006581,
	16940: 0x00006580,
	16941: 0x000065B6,
	16942: 0x000065DA,
	16943: 0x000066D2,
	16944: 0x00006A8D,
	16945: 0x00006A96,
	16946: 0x00006A81,
	16947: 0x00006AA5,
	16948: 0x00006A89,
	16949: 0x00006A9F,
	16950: 0x00006A9B,
	16951: 0x00006AA1,
	16952: 0x00006A9E,
	16953: 0x00006A87,
	16954: 0x00006A93,
	16955: 0x00006A8E,
	16956: 0x00006A95,
	16957: 0x00006A83,
	16958: 0x00006AA8,
	16959: 0x00006AA4,
	16960: 0x00006A91,
	16961: 0x00006A7F,
	16962: 0x00006AA6,
	16963: 0x00006A9A,
	16964: 0x00006A85,
	16965: 0x00006A8C,
	16966: 0x00006A92,
	16967: 0x00006B5B,
	16968: 0x00006BAD,
	16969: 0x00006C09,
	16970: 0x00006FCC,
	16971: 0x00006FA9,
	16972: 0x00006FF4,
	16973: 0x00006FD4,
	16974: 0x00006FE3,
	16975: 0x00006FDC,
	16976: 0x00006FED,
	16977: 0x00006FE7,
	16978: 0x00006FE6,
	16979: 0x00006FDE,
	16980: 0x00006FF2,
	16981: 0x00006FDD,
	16982: 0x00006FE2,
	16983: 0x00006FE8,
	16984: 0x000071E1,
	16985: 0x000071F1,
	16986: 0x000071E8,
	16987: 0x000071F2,
	16988: 0x000071E4,
	16989: 0x000071F0,
	16990: 0x000071E2,
	16991: 0x00007373,
	16992: 0x0000736E,
	16993: 0x0000736F,
	16994: 0x00007497,
	16995: 0x000074B2,
	16996: 0x000074AB,
	16997: 0x00007490,
	16998: 0x000074AA,
	16999: 0x000074AD,
	17000: 0x000074B1,
	17001: 0x000074A5,
	17002: 0x000074AF,
	17003: 0x00007510,
	17004: 0x00007511,
	17005: 0x00007512,
	17006: 0x0000750F,
	17007: 0x00007584,
	17008: 0x00007643,
	17009: 0x00007648,
	17010: 0x00007649,
	17011: 0x00007647,
	17012: 0x000076A4,
	17013: 0x000076E9,
	17014: 0x000077B5,
	17015: 0x000077AB,
	17016: 0x000077B2,
	17017: 0x000077B7,
	17018: 0x000077B6,
	17019: 0x000077B4,
	17020: 0x000077B1,
	17021: 0x000077A8,
	17022: 0x000077F0,
	17023: 0x000078F3,
	17024: 0x000078FD,
	17025: 0x00007902,
	17026: 0x000078FB,
	17027: 0x000078FC,
	17028: 0x000078F2,
	17029: 0x00007905,
	17030: 0x000078F9,
	17031: 0x000078FE,
	17032: 0x00007904,
	17033: 0x000079AB,
	17034: 0x000079A8,
	17035: 0x00007A5C,
	17036: 0x00007A5B,
	17037: 0x00007A56,
	17038: 0x00007A58,
	17039: 0x00007A54,
	17040: 0x00007A5A,
	17041: 0x00007ABE,
	17042: 0x00007AC0,
	17043: 0x00007AC1,
	17044: 0x00007C05,
	17045: 0x00007C0F,
	17046: 0x00007BF2,
	17047: 0x00007C00,
	17048: 0x00007BFF,
	17049: 0x00007BFB,
	17050: 0x00007C0E,
	17051: 0x00007BF4,
	17052: 0x00007C0B,
	17053: 0x00007BF3,
	17054: 0x00007C02,
	17055: 0x00007C09,
	17056: 0x00007C03,
	17057: 0x00007C01,
	17058: 0x00007BF8,
	17059: 0x00007BFD,
	17060: 0x00007C06,
	17061: 0x00007BF0,
	17062: 0x00007BF1,
	17063: 0x00007C10,
	17064: 0x00007C0A,
	17065: 0x00007CE8,
	17066: 0x00007E2D,
	17067: 0x00007E3C,
	17068: 0x00007E42,
	17069: 0x00007E33,
	17070: 0x00009848,
	17071: 0x00007E38,
	17072: 0x00007E2A,
	17073: 0x00007E49,
	17074: 0x00007E40,
	17075: 0x00007E47,
	17076: 0x00007E29,
	17077: 0x00007E4C,
	17078: 0x00007E30,
	17079: 0x00007E3B,
	17080: 0x00007E36,
	17081: 0x00007E44,
	17082: 0x00007E3A,
	17083: 0x00007F45,
	17084: 0x00007F7F,
	17085: 0x00007F7E,
	17086: 0x00007F7D,
	17087: 0x00007FF4,
	17088: 0x00007FF2,
	17089: 0x0000802C,
	17090: 0x000081BB,
	17091: 0x000081C4,
	17092: 0x000081CC,
	17093: 0x000081CA,
	17094: 0x000081C5,
	17095: 0x000081C7,
	17096: 0x000081BC,
	17097: 0x000081E9,
	17098: 0x0000825B,
	17099: 0x0000825A,
	17100: 0x0000825C,
	17101: 0x00008583,
	17102: 0x00008580,
	17103: 0x0000858F,
	17104: 0x000085A7,
	17105: 0x00008595,
	17106: 0x000085A0,
	17107: 0x0000858B,
	17108: 0x000085A3,
	17109: 0x0000857B,
	17110: 0x000085A4,
	17111: 0x0000859A,
	17112: 0x0000859E,
	17113: 0x00008577,
	17114: 0x0000857C,
	17115: 0x00008589,
	17116: 0x000085A1,
	17117: 0x0000857A,
	17118: 0x00008578,
	17119: 0x00008557,
	17120: 0x0000858E,
	17121: 0x00008596,
	17122: 0x00008586,
	17123: 0x0000858D,
	17124: 0x00008599,
	17125: 0x0000859D,
	17126: 0x00008581,
	17127: 0x000085A2,
	17128: 0x00008582,
	17129: 0x00008588,
	17130: 0x00008585,
	17131: 0x00008579,
	17132: 0x00008576,
	17133: 0x00008598,
	17134: 0x00008590,
	17135: 0x0000859F,
	17136: 0x00008668,
	17137: 0x000087BE,
	17138: 0x000087AA,
	17139: 0x000087AD,
	17140: 0x000087C5,
	17141: 0x000087B0,
	17142: 0x000087AC,
	17143: 0x000087B9,
	17144: 0x000087B5,
	17145: 0x000087BC,
	17146: 0x000087AE,
	17147: 0x000087C9,
	17148: 0x000087C3,
	17149: 0x000087C2,
	17150: 0x000087CC,
	17151: 0x000087B7,
	17152: 0x000087AF,
	17153: 0x000087C4,
	17154: 0x000087CA,
	17155: 0x000087B4,
	17156: 0x000087B6,
	17157: 0x000087BF,
	17158: 0x000087B8,
	17159: 0x000087BD,
	17160: 0x000087DE,
	17161: 0x000087B2,
	17162: 0x00008935,
	17163: 0x00008933,
	17164: 0x0000893C,
	17165: 0x0000893E,
	17166: 0x00008941,
	17167: 0x00008952,
	17168: 0x00008937,
	17169: 0x00008942,
	17170: 0x000089AD,
	17171: 0x000089AF,
	17172: 0x000089AE,
	17173: 0x000089F2,
	17174: 0x000089F3,
	17175: 0x00008B1E,
	17176: 0x00008B18,
	17177: 0x00008B16,
	17178: 0x00008B11,
	17179: 0x00008B05,
	17180: 0x00008B0B,
	17181: 0x00008B22,
	17182: 0x00008B0F,
	17183: 0x00008B12,
	17184: 0x00008B15,
	17185: 0x00008B07,
	17186: 0x00008B0D,
	17187: 0x00008B08,
	17188: 0x00008B06,
	17189: 0x00008B1C,
	17190: 0x00008B13,
	17191: 0x00008B1A,
	17192: 0x00008C4F,
	17193: 0x00008C70,
	17194: 0x00008C72,
	17195: 0x00008C71,
	17196: 0x00008C6F,
	17197: 0x00008C95,
	17198: 0x00008C94,
	17199: 0x00008CF9,
	17200: 0x00008D6F,
	17201: 0x00008E4E,
	17202: 0x00008E4D,
	17203: 0x00008E53,
	17204: 0x00008E50,
	17205: 0x00008E4C,
	17206: 0x00008E47,
	17207: 0x00008F43,
	17208: 0x00008F40,
	17209: 0x00009085,
	17210: 0x0000907E,
	17211: 0x00009138,
	17212: 0x0000919A,
	17213: 0x000091A2,
	17214: 0x0000919B,
	17215: 0x00009199,
	17216: 0x0000919F,
	17217: 0x000091A1,
	17218: 0x0000919D,
	17219: 0x000091A0,
	17220: 0x000093A1,
	17221: 0x00009383,
	17222: 0x000093AF,
	17223: 0x00009364,
	17224: 0x00009356,
	17225: 0x00009347,
	17226: 0x0000937C,
	17227: 0x00009358,
	17228: 0x0000935C,
	17229: 0x00009376,
	17230: 0x00009349,
	17231: 0x00009350,
	17232: 0x00009351,
	17233: 0x00009360,
	17234: 0x0000936D,
	17235: 0x0000938F,
	17236: 0x0000934C,
	17237: 0x0000936A,
	17238: 0x00009379,
	17239: 0x00009357,
	17240: 0x00009355,
	17241: 0x00009352,
	17242: 0x0000934F,
	17243: 0x00009371,
	17244: 0x00009377,
	17245: 0x0000937B,
	17246: 0x00009361,
	17247: 0x0000935E,
	17248: 0x00009363,
	17249: 0x00009367,
	17250: 0x00009380,
	17251: 0x0000934E,
	17252: 0x00009359,
	17253: 0x000095C7,
	17254: 0x000095C0,
	17255: 0x000095C9,
	17256: 0x000095C3,
	17257: 0x000095C5,
	17258: 0x000095B7,
	17259: 0x000096AE,
	17260: 0x000096B0,
	17261: 0x000096AC,
	17262: 0x00009720,
	17263: 0x0000971F,
	17264: 0x00009718,
	17265: 0x0000971D,
	17266: 0x00009719,
	17267: 0x0000979A,
	17268: 0x000097A1,
	17269: 0x0000979C,
	17270: 0x0000979E,
	17271: 0x0000979D,
	17272: 0x000097D5,
	17273: 0x000097D4,
	17274: 0x000097F1,
	17275: 0x00009841,
	17276: 0x00009844,
	17277: 0x0000984A,
	17278: 0x00009849,
	17279: 0x00009845,
	17280: 0x00009843,
	17281: 0x00009925,
	17282: 0x0000992B,
	17283: 0x0000992C,
	17284: 0x0000992A,
	17285: 0x00009933,
	17286: 0x00009932,
	17287: 0x0000992F,
	17288: 0x0000992D,
	17289: 0x00009931,
	17290: 0x00009930,
	17291: 0x00009998,
	17292: 0x000099A3,
	17293: 0x000099A1,
	17294: 0x00009A02,
	17295: 0x000099FA,
	17296: 0x000099F4,
	17297: 0x000099F7,
	17298: 0x000099F9,
	17299: 0x000099F8,
	17300: 0x000099F6,
	17301: 0x000099FB,
	17302: 0x000099FD,
	17303: 0x000099FE,
	17304: 0x000099FC,
	17305: 0x00009A03,
	17306: 0x00009ABE,
	17307: 0x00009AFE,
	17308: 0x00009AFD,
	17309: 0x00009B01,
	17310: 0x00009AFC,
	17311: 0x00009B48,
	17312: 0x00009B9A,
	17313: 0x00009BA8,
	17314: 0x00009B9E,
	17315: 0x00009B9B,
	17316: 0x00009BA6,
	17317: 0x00009BA1,
	17318: 0x00009BA5,
	17319: 0x00009BA4,
	17320: 0x00009B86,
	17321: 0x00009BA2,
	17322: 0x00009BA0,
	17323: 0x00009BAF,
	17324: 0x00009D33,
	17325: 0x00009D41,
	17326: 0x00009D67,
	17327: 0x00009D36,
	17328: 0x00009D2E,
	17329: 0x00009D2F,
	17330: 0x00009D31,
	17331: 0x00009D38,
	17332: 0x00009D30,
	17333: 0x00009D45,
	17334: 0x00009D42,
	17335: 0x00009D43,
	17336: 0x00009D3E,
	17337: 0x00009D37,
	17338: 0x00009D40,
	17339: 0x00009D3D,
	17340: 0x00007FF5,
	17341: 0x00009D2D,
	17342: 0x00009E8A,
	17343: 0x00009E89,
	17344: 0x00009E8D,
	17345: 0x00009EB0,
	17346: 0x00009EC8,
	17347: 0x00009EDA,
	17348: 0x00009EFB,
	17349: 0x00009EFF,
	17350: 0x00009F24,
	17351: 0x00009F23,
	17352: 0x00009F22,
	17353: 0x00009F54,
	17354: 0x00009FA0,
	17355: 0x00005131,
	17356: 0x0000512D,
	17357: 0x0000512E,
	17358: 0x00005698,
	17359: 0x0000569C,
	17360: 0x00005697,
	17361: 0x0000569A,
	17362: 0x0000569D,
	17363: 0x00005699,
	17364: 0x00005970,
	17365: 0x00005B3C,
	17366: 0x00005C69,
	17367: 0x00005C6A,
	17368: 0x00005DC0,
	17369: 0x00005E6D,
	17370: 0x00005E6E,
	17371: 0x000061D8,
	17372: 0x000061DF,
	17373: 0x000061ED,
	17374: 0x000061EE,
	17375: 0x000061F1,
	17376: 0x000061EA,
	17377: 0x000061F0,
	17378: 0x000061EB,
	17379: 0x000061D6,
	17380: 0x000061E9,
	17381: 0x000064FF,
	17382: 0x00006504,
	17383: 0x000064FD,
	17384: 0x000064F8,
	17385: 0x00006501,
	17386: 0x00006503,
	17387: 0x000064FC,
	17388: 0x00006594,
	17389: 0x000065DB,
	17390: 0x000066DA,
	17391: 0x000066DB,
	17392: 0x000066D8,
	17393: 0x00006AC5,
	17394: 0x00006AB9,
	17395: 0x00006ABD,
	17396: 0x00006AE1,
	17397: 0x00006AC6,
	17398: 0x00006ABA,
	17399: 0x00006AB6,
	17400: 0x00006AB7,
	17401: 0x00006AC7,
	17402: 0x00006AB4,
	17403: 0x00006AAD,
	17404: 0x00006B5E,
	17405: 0x00006BC9,
	17406: 0x00006C0B,
	17407: 0x00007007,
	17408: 0x0000700C,
	17409: 0x0000700D,
	17410: 0x00007001,
	17411: 0x00007005,
	17412: 0x00007014,
	17413: 0x0000700E,
	17414: 0x00006FFF,
	17415: 0x00007000,
	17416: 0x00006FFB,
	17417: 0x00007026,
	17418: 0x00006FFC,
	17419: 0x00006FF7,
	17420: 0x0000700A,
	17421: 0x00007201,
	17422: 0x000071FF,
	17423: 0x000071F9,
	17424: 0x00007203,
	17425: 0x000071FD,
	17426: 0x00007376,
	17427: 0x000074B8,
	17428: 0x000074C0,
	17429: 0x000074B5,
	17430: 0x000074C1,
	17431: 0x000074BE,
	17432: 0x000074B6,
	17433: 0x000074BB,
	17434: 0x000074C2,
	17435: 0x00007514,
	17436: 0x00007513,
	17437: 0x0000765C,
	17438: 0x00007664,
	17439: 0x00007659,
	17440: 0x00007650,
	17441: 0x00007653,
	17442: 0x00007657,
	17443: 0x0000765A,
	17444: 0x000076A6,
	17445: 0x000076BD,
	17446: 0x000076EC,
	17447: 0x000077C2,
	17448: 0x000077BA,
	17449: 0x000078FF,
	17450: 0x0000790C,
	17451: 0x00007913,
	17452: 0x00007914,
	17453: 0x00007909,
	17454: 0x00007910,
	17455: 0x00007912,
	17456: 0x00007911,
	17457: 0x000079AD,
	17458: 0x000079AC,
	17459: 0x00007A5F,
	17460: 0x00007C1C,
	17461: 0x00007C29,
	17462: 0x00007C19,
	17463: 0x00007C20,
	17464: 0x00007C1F,
	17465: 0x00007C2D,
	17466: 0x00007C1D,
	17467: 0x00007C26,
	17468: 0x00007C28,
	17469: 0x00007C22,
	17470: 0x00007C25,
	17471: 0x00007C30,
	17472: 0x00007E5C,
	17473: 0x00007E50,
	17474: 0x00007E56,
	17475: 0x00007E63,
	17476: 0x00007E58,
	17477: 0x00007E62,
	17478: 0x00007E5F,
	17479: 0x00007E51,
	17480: 0x00007E60,
	17481: 0x00007E57,
	17482: 0x00007E53,
	17483: 0x00007FB5,
	17484: 0x00007FB3,
	17485: 0x00007FF7,
	17486: 0x00007FF8,
	17487: 0x00008075,
	17488: 0x000081D1,
	17489: 0x000081D2,
	17490: 0x000081D0,
	17491: 0x0000825F,
	17492: 0x0000825E,
	17493: 0x000085B4,
	17494: 0x000085C6,
	17495: 0x000085C0,
	17496: 0x000085C3,
	17497: 0x000085C2,
	17498: 0x000085B3,
	17499: 0x000085B5,
	17500: 0x000085BD,
	17501: 0x000085C7,
	17502: 0x000085C4,
	17503: 0x000085BF,
	17504: 0x000085CB,
	17505: 0x000085CE,
	17506: 0x000085C8,
	17507: 0x000085C5,
	17508: 0x000085B1,
	17509: 0x000085B6,
	17510: 0x000085D2,
	17511: 0x00008624,
	17512: 0x000085B8,
	17513: 0x000085B7,
	17514: 0x000085BE,
	17515: 0x00008669,
	17516: 0x000087E7,
	17517: 0x000087E6,
	17518: 0x000087E2,
	17519: 0x000087DB,
	17520: 0x000087EB,
	17521: 0x000087EA,
	17522: 0x000087E5,
	17523: 0x000087DF,
	17524: 0x000087F3,
	17525: 0x000087E4,
	17526: 0x000087D4,
	17527: 0x000087DC,
	17528: 0x000087D3,
	17529: 0x000087ED,
	17530: 0x000087D8,
	17531: 0x000087E3,
	17532: 0x000087A4,
	17533: 0x000087D7,
	17534: 0x000087D9,
	17535: 0x00008801,
	17536: 0x000087F4,
	17537: 0x000087E8,
	17538: 0x000087DD,
	17539: 0x00008953,
	17540: 0x0000894B,
	17541: 0x0000894F,
	17542: 0x0000894C,
	17543: 0x00008946,
	17544: 0x00008950,
	17545: 0x00008951,
	17546: 0x00008949,
	17547: 0x00008B2A,
	17548: 0x00008B27,
	17549: 0x00008B23,
	17550: 0x00008B33,
	17551: 0x00008B30,
	17552: 0x00008B35,
	17553: 0x00008B47,
	17554: 0x00008B2F,
	17555: 0x00008B3C,
	17556: 0x00008B3E,
	17557: 0x00008B31,
	17558: 0x00008B25,
	17559: 0x00008B37,
	17560: 0x00008B26,
	17561: 0x00008B36,
	17562: 0x00008B2E,
	17563: 0x00008B24,
	17564: 0x00008B3B,
	17565: 0x00008B3D,
	17566: 0x00008B3A,
	17567: 0x00008C42,
	17568: 0x00008C75,
	17569: 0x00008C99,
	17570: 0x00008C98,
	17571: 0x00008C97,
	17572: 0x00008CFE,
	17573: 0x00008D04,
	17574: 0x00008D02,
	17575: 0x00008D00,
	17576: 0x00008E5C,
	17577: 0x00008E62,
	17578: 0x00008E60,
	17579: 0x00008E57,
	17580: 0x00008E56,
	17581: 0x00008E5E,
	17582: 0x00008E65,
	17583: 0x00008E67,
	17584: 0x00008E5B,
	17585: 0x00008E5A,
	17586: 0x00008E61,
	17587: 0x00008E5D,
	17588: 0x00008E69,
	17589: 0x00008E54,
	17590: 0x00008F46,
	17591: 0x00008F47,
	17592: 0x00008F48,
	17593: 0x00008F4B,
	17594: 0x00009128,
	17595: 0x0000913A,
	17596: 0x0000913B,
	17597: 0x0000913E,
	17598: 0x000091A8,
	17599: 0x000091A5,
	17600: 0x000091A7,
	17601: 0x000091AF,
	17602: 0x000091AA,
	17603: 0x000093B5,
	17604: 0x0000938C,
	17605: 0x00009392,
	17606: 0x000093B7,
	17607: 0x0000939B,
	17608: 0x0000939D,
	17609: 0x00009389,
	17610: 0x000093A7,
	17611: 0x0000938E,
	17612: 0x000093AA,
	17613: 0x0000939E,
	17614: 0x000093A6,
	17615: 0x00009395,
	17616: 0x00009388,
	17617: 0x00009399,
	17618: 0x0000939F,
	17619: 0x0000938D,
	17620: 0x000093B1,
	17621: 0x00009391,
	17622: 0x000093B2,
	17623: 0x000093A4,
	17624: 0x000093A8,
	17625: 0x000093B4,
	17626: 0x000093A3,
	17627: 0x000093A5,
	17628: 0x000095D2,
	17629: 0x000095D3,
	17630: 0x000095D1,
	17631: 0x000096B3,
	17632: 0x000096D7,
	17633: 0x000096DA,
	17634: 0x00005DC2,
	17635: 0x000096DF,
	17636: 0x000096D8,
	17637: 0x000096DD,
	17638: 0x00009723,
	17639: 0x00009722,
	17640: 0x00009725,
	17641: 0x000097AC,
	17642: 0x000097AE,
	17643: 0x000097A8,
	17644: 0x000097AB,
	17645: 0x000097A4,
	17646: 0x000097AA,
	17647: 0x000097A2,
	17648: 0x000097A5,
	17649: 0x000097D7,
	17650: 0x000097D9,
	17651: 0x000097D6,
	17652: 0x000097D8,
	17653: 0x000097FA,
	17654: 0x00009850,
	17655: 0x00009851,
	17656: 0x00009852,
	17657: 0x000098B8,
	17658: 0x00009941,
	17659: 0x0000993C,
	17660: 0x0000993A,
	17661: 0x00009A0F,
	17662: 0x00009A0B,
	17663: 0x00009A09,
	17664: 0x00009A0D,
	17665: 0x00009A04,
	17666: 0x00009A11,
	17667: 0x00009A0A,
	17668: 0x00009A05,
	17669: 0x00009A07,
	17670: 0x00009A06,
	17671: 0x00009AC0,
	17672: 0x00009ADC,
	17673: 0x00009B08,
	17674: 0x00009B04,
	17675: 0x00009B05,
	17676: 0x00009B29,
	17677: 0x00009B35,
	17678: 0x00009B4A,
	17679: 0x00009B4C,
	17680: 0x00009B4B,
	17681: 0x00009BC7,
	17682: 0x00009BC6,
	17683: 0x00009BC3,
	17684: 0x00009BBF,
	17685: 0x00009BC1,
	17686: 0x00009BB5,
	17687: 0x00009BB8,
	17688: 0x00009BD3,
	17689: 0x00009BB6,
	17690: 0x00009BC4,
	17691: 0x00009BB9,
	17692: 0x00009BBD,
	17693: 0x00009D5C,
	17694: 0x00009D53,
	17695: 0x00009D4F,
	17696: 0x00009D4A,
	17697: 0x00009D5B,
	17698: 0x00009D4B,
	17699: 0x00009D59,
	17700: 0x00009D56,
	17701: 0x00009D4C,
	17702: 0x00009D57,
	17703: 0x00009D52,
	17704: 0x00009D54,
	17705: 0x00009D5F,
	17706: 0x00009D58,
	17707: 0x00009D5A,
	17708: 0x00009E8E,
	17709: 0x00009E8C,
	17710: 0x00009EDF,
	17711: 0x00009F01,
	17712: 0x00009F00,
	17713: 0x00009F16,
	17714: 0x00009F25,
	17715: 0x00009F2B,
	17716: 0x00009F2A,
	17717: 0x00009F29,
	17718: 0x00009F28,
	17719: 0x00009F4C,
	17720: 0x00009F55,
	17721: 0x00005134,
	17722: 0x00005135,
	17723: 0x00005296,
	17724: 0x000052F7,
	17725: 0x000053B4,
	17726: 0x000056AB,
	17727: 0x000056AD,
	17728: 0x000056A6,
	17729: 0x000056A7,
	17730: 0x000056AA,
	17731: 0x000056AC,
	17732: 0x000058DA,
	17733: 0x000058DD,
	17734: 0x000058DB,
	17735: 0x00005912,
	17736: 0x00005B3D,
	17737: 0x00005B3E,
	17738: 0x00005B3F,
	17739: 0x00005DC3,
	17740: 0x00005E70,
	17741: 0x00005FBF,
	17742: 0x000061FB,
	17743: 0x00006507,
	17744: 0x00006510,
	17745: 0x0000650D,
	17746: 0x00006509,
	17747: 0x0000650C,
	17748: 0x0000650E,
	17749: 0x00006584,
	17750: 0x000065DE,
	17751: 0x000065DD,
	17752: 0x000066DE,
	17753: 0x00006AE7,
	17754: 0x00006AE0,
	17755: 0x00006ACC,
	17756: 0x00006AD1,
	17757: 0x00006AD9,
	17758: 0x00006ACB,
	17759: 0x00006ADF,
	17760: 0x00006ADC,
	17761: 0x00006AD0,
	17762: 0x00006AEB,
	17763: 0x00006ACF,
	17764: 0x00006ACD,
	17765: 0x00006ADE,
	17766: 0x00006B60,
	17767: 0x00006BB0,
	17768: 0x00006C0C,
	17769: 0x00007019,
	17770: 0x00007027,
	17771: 0x00007020,
	17772: 0x00007016,
	17773: 0x0000702B,
	17774: 0x00007021,
	17775: 0x00007022,
	17776: 0x00007023,
	17777: 0x00007029,
	17778: 0x00007017,
	17779: 0x00007024,
	17780: 0x0000701C,
	17781: 0x0000702A,
	17782: 0x0000720C,
	17783: 0x0000720A,
	17784: 0x00007207,
	17785: 0x00007202,
	17786: 0x00007205,
	17787: 0x000072A5,
	17788: 0x000072A6,
	17789: 0x000072A4,
	17790: 0x000072A3,
	17791: 0x000072A1,
	17792: 0x000074CB,
	17793: 0x000074C5,
	17794: 0x000074B7,
	17795: 0x000074C3,
	17796: 0x00007516,
	17797: 0x00007660,
	17798: 0x000077C9,
	17799: 0x000077CA,
	17800: 0x000077C4,
	17801: 0x000077F1,
	17802: 0x0000791D,
	17803: 0x0000791B,
	17804: 0x00007921,
	17805: 0x0000791C,
	17806: 0x00007917,
	17807: 0x0000791E,
	17808: 0x000079B0,
	17809: 0x00007A67,
	17810: 0x00007A68,
	17811: 0x00007C33,
	17812: 0x00007C3C,
	17813: 0x00007C39,
	17814: 0x00007C2C,
	17815: 0x00007C3B,
	17816: 0x00007CEC,
	17817: 0x00007CEA,
	17818: 0x00007E76,
	17819: 0x00007E75,
	17820: 0x00007E78,
	17821: 0x00007E70,
	17822: 0x00007E77,
	17823: 0x00007E6F,
	17824: 0x00007E7A,
	17825: 0x00007E72,
	17826: 0x00007E74,
	17827: 0x00007E68,
	17828: 0x00007F4B,
	17829: 0x00007F4A,
	17830: 0x00007F83,
	17831: 0x00007F86,
	17832: 0x00007FB7,
	17833: 0x00007FFD,
	17834: 0x00007FFE,
	17835: 0x00008078,
	17836: 0x000081D7,
	17837: 0x000081D5,
	17838: 0x00008264,
	17839: 0x00008261,
	17840: 0x00008263,
	17841: 0x000085EB,
	17842: 0x000085F1,
	17843: 0x000085ED,
	17844: 0x000085D9,
	17845: 0x000085E1,
	17846: 0x000085E8,
	17847: 0x000085DA,
	17848: 0x000085D7,
	17849: 0x000085EC,
	17850: 0x000085F2,
	17851: 0x000085F8,
	17852: 0x000085D8,
	17853: 0x000085DF,
	17854: 0x000085E3,
	17855: 0x000085DC,
	17856: 0x000085D1,
	17857: 0x000085F0,
	17858: 0x000085E6,
	17859: 0x000085EF,
	17860: 0x000085DE,
	17861: 0x000085E2,
	17862: 0x00008800,
	17863: 0x000087FA,
	17864: 0x00008803,
	17865: 0x000087F6,
	17866: 0x000087F7,
	17867: 0x00008809,
	17868: 0x0000880C,
	17869: 0x0000880B,
	17870: 0x00008806,
	17871: 0x000087FC,
	17872: 0x00008808,
	17873: 0x000087FF,
	17874: 0x0000880A,
	17875: 0x00008802,
	17876: 0x00008962,
	17877: 0x0000895A,
	17878: 0x0000895B,
	17879: 0x00008957,
	17880: 0x00008961,
	17881: 0x0000895C,
	17882: 0x00008958,
	17883: 0x0000895D,
	17884: 0x00008959,
	17885: 0x00008988,
	17886: 0x000089B7,
	17887: 0x000089B6,
	17888: 0x000089F6,
	17889: 0x00008B50,
	17890: 0x00008B48,
	17891: 0x00008B4A,
	17892: 0x00008B40,
	17893: 0x00008B53,
	17894: 0x00008B56,
	17895: 0x00008B54,
	17896: 0x00008B4B,
	17897: 0x00008B55,
	17898: 0x00008B51,
	17899: 0x00008B42,
	17900: 0x00008B52,
	17901: 0x00008B57,
	17902: 0x00008C43,
	17903: 0x00008C77,
	17904: 0x00008C76,
	17905: 0x00008C9A,
	17906: 0x00008D06,
	17907: 0x00008D07,
	17908: 0x00008D09,
	17909: 0x00008DAC,
	17910: 0x00008DAA,
	17911: 0x00008DAD,
	17912: 0x00008DAB,
	17913: 0x00008E6D,
	17914: 0x00008E78,
	17915: 0x00008E73,
	17916: 0x00008E6A,
	17917: 0x00008E6F,
	17918: 0x00008E7B,
	17919: 0x00008EC2,
	17920: 0x00008F52,
	17921: 0x00008F51,
	17922: 0x00008F4F,
	17923: 0x00008F50,
	17924: 0x00008F53,
	17925: 0x00008FB4,
	17926: 0x00009140,
	17927: 0x0000913F,
	17928: 0x000091B0,
	17929: 0x000091AD,
	17930: 0x000093DE,
	17931: 0x000093C7,
	17932: 0x000093CF,
	17933: 0x000093C2,
	17934: 0x000093DA,
	17935: 0x000093D0,
	17936: 0x000093F9,
	17937: 0x000093EC,
	17938: 0x000093CC,
	17939: 0x000093D9,
	17940: 0x000093A9,
	17941: 0x000093E6,
	17942: 0x000093CA,
	17943: 0x000093D4,
	17944: 0x000093EE,
	17945: 0x000093E3,
	17946: 0x000093D5,
	17947: 0x000093C4,
	17948: 0x000093CE,
	17949: 0x000093C0,
	17950: 0x000093D2,
	17951: 0x000093E7,
	17952: 0x0000957D,
	17953: 0x000095DA,
	17954: 0x000095DB,
	17955: 0x000096E1,
	17956: 0x00009729,
	17957: 0x0000972B,
	17958: 0x0000972C,
	17959: 0x00009728,
	17960: 0x00009726,
	17961: 0x000097B3,
	17962: 0x000097B7,
	17963: 0x000097B6,
	17964: 0x000097DD,
	17965: 0x000097DE,
	17966: 0x000097DF,
	17967: 0x0000985C,
	17968: 0x00009859,
	17969: 0x0000985D,
	17970: 0x00009857,
	17971: 0x000098BF,
	17972: 0x000098BD,
	17973: 0x000098BB,
	17974: 0x000098BE,
	17975: 0x00009948,
	17976: 0x00009947,
	17977: 0x00009943,
	17978: 0x000099A6,
	17979: 0x000099A7,
	17980: 0x00009A1A,
	17981: 0x00009A15,
	17982: 0x00009A25,
	17983: 0x00009A1D,
	17984: 0x00009A24,
	17985: 0x00009A1B,
	17986: 0x00009A22,
	17987: 0x00009A20,
	17988: 0x00009A27,
	17989: 0x00009A23,
	17990: 0x00009A1E,
	17991: 0x00009A1C,
	17992: 0x00009A14,
	17993: 0x00009AC2,
	17994: 0x00009B0B,
	17995: 0x00009B0A,
	17996: 0x00009B0E,
	17997: 0x00009B0C,
	17998: 0x00009B37,
	17999: 0x00009BEA,
	18000: 0x00009BEB,
	18001: 0x00009BE0,
	18002: 0x00009BDE,
	18003: 0x00009BE4,
	18004: 0x00009BE6,
	18005: 0x00009BE2,
	18006: 0x00009BF0,
	18007: 0x00009BD4,
	18008: 0x00009BD7,
	18009: 0x00009BEC,
	18010: 0x00009BDC,
	18011: 0x00009BD9,
	18012: 0x00009BE5,
	18013: 0x00009BD5,
	18014: 0x00009BE1,
	18015: 0x00009BDA,
	18016: 0x00009D77,
	18017: 0x00009D81,
	18018: 0x00009D8A,
	18019: 0x00009D84,
	18020: 0x00009D88,
	18021: 0x00009D71,
	18022: 0x00009D80,
	18023: 0x00009D78,
	18024: 0x00009D86,
	18025: 0x00009D8B,
	18026: 0x00009D8C,
	18027: 0x00009D7D,
	18028: 0x00009D6B,
	18029: 0x00009D74,
	18030: 0x00009D75,
	18031: 0x00009D70,
	18032: 0x00009D69,
	18033: 0x00009D85,
	18034: 0x00009D73,
	18035: 0x00009D7B,
	18036: 0x00009D82,
	18037: 0x00009D6F,
	18038: 0x00009D79,
	18039: 0x00009D7F,
	18040: 0x00009D87,
	18041: 0x00009D68,
	18042: 0x00009E94,
	18043: 0x00009E91,
	18044: 0x00009EC0,
	18045: 0x00009EFC,
	18046: 0x00009F2D,
	18047: 0x00009F40,
	18048: 0x00009F41,
	18049: 0x00009F4D,
	18050: 0x00009F56,
	18051: 0x00009F57,
	18052: 0x00009F58,
	18053: 0x00005337,
	18054: 0x000056B2,
	18055: 0x000056B5,
	18056: 0x000056B3,
	18057: 0x000058E3,
	18058: 0x00005B45,
	18059: 0x00005DC6,
	18060: 0x00005DC7,
	18061: 0x00005EEE,
	18062: 0x00005EEF,
	18063: 0x00005FC0,
	18064: 0x00005FC1,
	18065: 0x000061F9,
	18066: 0x00006517,
	18067: 0x00006516,
	18068: 0x00006515,
	18069: 0x00006513,
	18070: 0x000065DF,
	18071: 0x000066E8,
	18072: 0x000066E3,
	18073: 0x000066E4,
	18074: 0x00006AF3,
	18075: 0x00006AF0,
	18076: 0x00006AEA,
	18077: 0x00006AE8,
	18078: 0x00006AF9,
	18079: 0x00006AF1,
	18080: 0x00006AEE,
	18081: 0x00006AEF,
	18082: 0x0000703C,
	18083: 0x00007035,
	18084: 0x0000702F,
	18085: 0x00007037,
	18086: 0x00007034,
	18087: 0x00007031,
	18088: 0x00007042,
	18089: 0x00007038,
	18090: 0x0000703F,
	18091: 0x0000703A,
	18092: 0x00007039,
	18093: 0x00007040,
	18094: 0x0000703B,
	18095: 0x00007033,
	18096: 0x00007041,
	18097: 0x00007213,
	18098: 0x00007214,
	18099: 0x000072A8,
	18100: 0x0000737D,
	18101: 0x0000737C,
	18102: 0x000074BA,
	18103: 0x000076AB,
	18104: 0x000076AA,
	18105: 0x000076BE,
	18106: 0x000076ED,
	18107: 0x000077CC,
	18108: 0x000077CE,
	18109: 0x000077CF,
	18110: 0x000077CD,
	18111: 0x000077F2,
	18112: 0x00007925,
	18113: 0x00007923,
	18114: 0x00007927,
	18115: 0x00007928,
	18116: 0x00007924,
	18117: 0x00007929,
	18118: 0x000079B2,
	18119: 0x00007A6E,
	18120: 0x00007A6C,
	18121: 0x00007A6D,
	18122: 0x00007AF7,
	18123: 0x00007C49,
	18124: 0x00007C48,
	18125: 0x00007C4A,
	18126: 0x00007C47,
	18127: 0x00007C45,
	18128: 0x00007CEE,
	18129: 0x00007E7B,
	18130: 0x00007E7E,
	18131: 0x00007E81,
	18132: 0x00007E80,
	18133: 0x00007FBA,
	18134: 0x00007FFF,
	18135: 0x00008079,
	18136: 0x000081DB,
	18137: 0x000081D9,
	18138: 0x0000820B,
	18139: 0x00008268,
	18140: 0x00008269,
	18141: 0x00008622,
	18142: 0x000085FF,
	18143: 0x00008601,
	18144: 0x000085FE,
	18145: 0x0000861B,
	18146: 0x00008600,
	18147: 0x000085F6,
	18148: 0x00008604,
	18149: 0x00008609,
	18150: 0x00008605,
	18151: 0x0000860C,
	18152: 0x000085FD,
	18153: 0x00008819,
	18154: 0x00008810,
	18155: 0x00008811,
	18156: 0x00008817,
	18157: 0x00008813,
	18158: 0x00008816,
	18159: 0x00008963,
	18160: 0x00008966,
	18161: 0x000089B9,
	18162: 0x000089F7,
	18163: 0x00008B60,
	18164: 0x00008B6A,
	18165: 0x00008B5D,
	18166: 0x00008B68,
	18167: 0x00008B63,
	18168: 0x00008B65,
	18169: 0x00008B67,
	18170: 0x00008B6D,
	18171: 0x00008DAE,
	18172: 0x00008E86,
	18173: 0x00008E88,
	18174: 0x00008E84,
	18175: 0x00008F59,
	18176: 0x00008F56,
	18177: 0x00008F57,
	18178: 0x00008F55,
	18179: 0x00008F58,
	18180: 0x00008F5A,
	18181: 0x0000908D,
	18182: 0x00009143,
	18183: 0x00009141,
	18184: 0x000091B7,
	18185: 0x000091B5,
	18186: 0x000091B2,
	18187: 0x000091B3,
	18188: 0x0000940B,
	18189: 0x00009413,
	18190: 0x000093FB,
	18191: 0x00009420,
	18192: 0x0000940F,
	18193: 0x00009414,
	18194: 0x000093FE,
	18195: 0x00009415,
	18196: 0x00009410,
	18197: 0x00009428,
	18198: 0x00009419,
	18199: 0x0000940D,
	18200: 0x000093F5,
	18201: 0x00009400,
	18202: 0x000093F7,
	18203: 0x00009407,
	18204: 0x0000940E,
	18205: 0x00009416,
	18206: 0x00009412,
	18207: 0x000093FA,
	18208: 0x00009409,
	18209: 0x000093F8,
	18210: 0x0000940A,
	18211: 0x000093FF,
	18212: 0x000093FC,
	18213: 0x0000940C,
	18214: 0x000093F6,
	18215: 0x00009411,
	18216: 0x00009406,
	18217: 0x000095DE,
	18218: 0x000095E0,
	18219: 0x000095DF,
	18220: 0x0000972E,
	18221: 0x0000972F,
	18222: 0x000097B9,
	18223: 0x000097BB,
	18224: 0x000097FD,
	18225: 0x000097FE,
	18226: 0x00009860,
	18227: 0x00009862,
	18228: 0x00009863,
	18229: 0x0000985F,
	18230: 0x000098C1,
	18231: 0x000098C2,
	18232: 0x00009950,
	18233: 0x0000994E,
	18234: 0x00009959,
	18235: 0x0000994C,
	18236: 0x0000994B,
	18237: 0x00009953,
	18238: 0x00009A32,
	18239: 0x00009A34,
	18240: 0x00009A31,
	18241: 0x00009A2C,
	18242: 0x00009A2A,
	18243: 0x00009A36,
	18244: 0x00009A29,
	18245: 0x00009A2E,
	18246: 0x00009A38,
	18247: 0x00009A2D,
	18248: 0x00009AC7,
	18249: 0x00009ACA,
	18250: 0x00009AC6,
	18251: 0x00009B10,
	18252: 0x00009B12,
	18253: 0x00009B11,
	18254: 0x00009C0B,
	18255: 0x00009C08,
	18256: 0x00009BF7,
	18257: 0x00009C05,
	18258: 0x00009C12,
	18259: 0x00009BF8,
	18260: 0x00009C40,
	18261: 0x00009C07,
	18262: 0x00009C0E,
	18263: 0x00009C06,
	18264: 0x00009C17,
	18265: 0x00009C14,
	18266: 0x00009C09,
	18267: 0x00009D9F,
	18268: 0x00009D99,
	18269: 0x00009DA4,
	18270: 0x00009D9D,
	18271: 0x00009D92,
	18272: 0x00009D98,
	18273: 0x00009D90,
	18274: 0x00009D9B,
	18275: 0x00009DA0,
	18276: 0x00009D94,
	18277: 0x00009D9C,
	18278: 0x00009DAA,
	18279: 0x00009D97,
	18280: 0x00009DA1,
	18281: 0x00009D9A,
	18282: 0x00009DA2,
	18283: 0x00009DA8,
	18284: 0x00009D9E,
	18285: 0x00009DA3,
	18286: 0x00009DBF,
	18287: 0x00009DA9,
	18288: 0x00009D96,
	18289: 0x00009DA6,
	18290: 0x00009DA7,
	18291: 0x00009E99,
	18292: 0x00009E9B,
	18293: 0x00009E9A,
	18294: 0x00009EE5,
	18295: 0x00009EE4,
	18296: 0x00009EE7,
	18297: 0x00009EE6,
	18298: 0x00009F30,
	18299: 0x00009F2E,
	18300: 0x00009F5B,
	18301: 0x00009F60,
	18302: 0x00009F5E,
	18303: 0x00009F5D,
	18304: 0x00009F59,
	18305: 0x00009F91,
	18306: 0x0000513A,
	18307: 0x00005139,
	18308: 0x00005298,
	18309: 0x00005297,
	18310: 0x000056C3,
	18311: 0x000056BD,
	18312: 0x000056BE,
	18313: 0x00005B48,
	18314: 0x00005B47,
	18315: 0x00005DCB,
	18316: 0x00005DCF,
	18317: 0x00005EF1,
	18318: 0x000061FD,
	18319: 0x0000651B,
	18320: 0x00006B02,
	18321: 0x00006AFC,
	18322: 0x00006B03,
	18323: 0x00006AF8,
	18324: 0x00006B00,
	18325: 0x00007043,
	18326: 0x00007044,
	18327: 0x0000704A,
	18328: 0x00007048,
	18329: 0x00007049,
	18330: 0x00007045,
	18331: 0x00007046,
	18332: 0x0000721D,
	18333: 0x0000721A,
	18334: 0x00007219,
	18335: 0x0000737E,
	18336: 0x00007517,
	18337: 0x0000766A,
	18338: 0x000077D0,
	18339: 0x0000792D,
	18340: 0x00007931,
	18341: 0x0000792F,
	18342: 0x00007C54,
	18343: 0x00007C53,
	18344: 0x00007CF2,
	18345: 0x00007E8A,
	18346: 0x00007E87,
	18347: 0x00007E88,
	18348: 0x00007E8B,
	18349: 0x00007E86,
	18350: 0x00007E8D,
	18351: 0x00007F4D,
	18352: 0x00007FBB,
	18353: 0x00008030,
	18354: 0x000081DD,
	18355: 0x00008618,
	18356: 0x0000862A,
	18357: 0x00008626,
	18358: 0x0000861F,
	18359: 0x00008623,
	18360: 0x0000861C,
	18361: 0x00008619,
	18362: 0x00008627,
	18363: 0x0000862E,
	18364: 0x00008621,
	18365: 0x00008620,
	18366: 0x00008629,
	18367: 0x0000861E,
	18368: 0x00008625,
	18369: 0x00008829,
	18370: 0x0000881D,
	18371: 0x0000881B,
	18372: 0x00008820,
	18373: 0x00008824,
	18374: 0x0000881C,
	18375: 0x0000882B,
	18376: 0x0000884A,
	18377: 0x0000896D,
	18378: 0x00008969,
	18379: 0x0000896E,
	18380: 0x0000896B,
	18381: 0x000089FA,
	18382: 0x00008B79,
	18383: 0x00008B78,
	18384: 0x00008B45,
	18385: 0x00008B7A,
	18386: 0x00008B7B,
	18387: 0x00008D10,
	18388: 0x00008D14,
	18389: 0x00008DAF,
	18390: 0x00008E8E,
	18391: 0x00008E8C,
	18392: 0x00008F5E,
	18393: 0x00008F5B,
	18394: 0x00008F5D,
	18395: 0x00009146,
	18396: 0x00009144,
	18397: 0x00009145,
	18398: 0x000091B9,
	18399: 0x0000943F,
	18400: 0x0000943B,
	18401: 0x00009436,
	18402: 0x00009429,
	18403: 0x0000943D,
	18404: 0x0000943C,
	18405: 0x00009430,
	18406: 0x00009439,
	18407: 0x0000942A,
	18408: 0x00009437,
	18409: 0x0000942C,
	18410: 0x00009440,
	18411: 0x00009431,
	18412: 0x000095E5,
	18413: 0x000095E4,
	18414: 0x000095E3,
	18415: 0x00009735,
	18416: 0x0000973A,
	18417: 0x000097BF,
	18418: 0x000097E1,
	18419: 0x00009864,
	18420: 0x000098C9,
	18421: 0x000098C6,
	18422: 0x000098C0,
	18423: 0x00009958,
	18424: 0x00009956,
	18425: 0x00009A39,
	18426: 0x00009A3D,
	18427: 0x00009A46,
	18428: 0x00009A44,
	18429: 0x00009A42,
	18430: 0x00009A41,
	18431: 0x00009A3A,
	18432: 0x00009A3F,
	18433: 0x00009ACD,
	18434: 0x00009B15,
	18435: 0x00009B17,
	18436: 0x00009B18,
	18437: 0x00009B16,
	18438: 0x00009B3A,
	18439: 0x00009B52,
	18440: 0x00009C2B,
	18441: 0x00009C1D,
	18442: 0x00009C1C,
	18443: 0x00009C2C,
	18444: 0x00009C23,
	18445: 0x00009C28,
	18446: 0x00009C29,
	18447: 0x00009C24,
	18448: 0x00009C21,
	18449: 0x00009DB7,
	18450: 0x00009DB6,
	18451: 0x00009DBC,
	18452: 0x00009DC1,
	18453: 0x00009DC7,
	18454: 0x00009DCA,
	18455: 0x00009DCF,
	18456: 0x00009DBE,
	18457: 0x00009DC5,
	18458: 0x00009DC3,
	18459: 0x00009DBB,
	18460: 0x00009DB5,
	18461: 0x00009DCE,
	18462: 0x00009DB9,
	18463: 0x00009DBA,
	18464: 0x00009DAC,
	18465: 0x00009DC8,
	18466: 0x00009DB1,
	18467: 0x00009DAD,
	18468: 0x00009DCC,
	18469: 0x00009DB3,
	18470: 0x00009DCD,
	18471: 0x00009DB2,
	18472: 0x00009E7A,
	18473: 0x00009E9C,
	18474: 0x00009EEB,
	18475: 0x00009EEE,
	18476: 0x00009EED,
	18477: 0x00009F1B,
	18478: 0x00009F18,
	18479: 0x00009F1A,
	18480: 0x00009F31,
	18481: 0x00009F4E,
	18482: 0x00009F65,
	18483: 0x00009F64,
	18484: 0x00009F92,
	18485: 0x00004EB9,
	18486: 0x000056C6,
	18487: 0x000056C5,
	18488: 0x000056CB,
	18489: 0x00005971,
	18490: 0x00005B4B,
	18491: 0x00005B4C,
	18492: 0x00005DD5,
	18493: 0x00005DD1,
	18494: 0x00005EF2,
	18495: 0x00006521,
	18496: 0x00006520,
	18497: 0x00006526,
	18498: 0x00006522,
	18499: 0x00006B0B,
	18500: 0x00006B08,
	18501: 0x00006B09,
	18502: 0x00006C0D,
	18503: 0x00007055,
	18504: 0x00007056,
	18505: 0x00007057,
	18506: 0x00007052,
	18507: 0x0000721E,
	18508: 0x0000721F,
	18509: 0x000072A9,
	18510: 0x0000737F,
	18511: 0x000074D8,
	18512: 0x000074D5,
	18513: 0x000074D9,
	18514: 0x000074D7,
	18515: 0x0000766D,
	18516: 0x000076AD,
	18517: 0x00007935,
	18518: 0x000079B4,
	18519: 0x00007A70,
	18520: 0x00007A71,
	18521: 0x00007C57,
	18522: 0x00007C5C,
	18523: 0x00007C59,
	18524: 0x00007C5B,
	18525: 0x00007C5A,
	18526: 0x00007CF4,
	18527: 0x00007CF1,
	18528: 0x00007E91,
	18529: 0x00007F4F,
	18530: 0x00007F87,
	18531: 0x000081DE,
	18532: 0x0000826B,
	18533: 0x00008634,
	18534: 0x00008635,
	18535: 0x00008633,
	18536: 0x0000862C,
	18537: 0x00008632,
	18538: 0x00008636,
	18539: 0x0000882C,
	18540: 0x00008828,
	18541: 0x00008826,
	18542: 0x0000882A,
	18543: 0x00008825,
	18544: 0x00008971,
	18545: 0x000089BF,
	18546: 0x000089BE,
	18547: 0x000089FB,
	18548: 0x00008B7E,
	18549: 0x00008B84,
	18550: 0x00008B82,
	18551: 0x00008B86,
	18552: 0x00008B85,
	18553: 0x00008B7F,
	18554: 0x00008D15,
	18555: 0x00008E95,
	18556: 0x00008E94,
	18557: 0x00008E9A,
	18558: 0x00008E92,
	18559: 0x00008E90,
	18560: 0x00008E96,
	18561: 0x00008E97,
	18562: 0x00008F60,
	18563: 0x00008F62,
	18564: 0x00009147,
	18565: 0x0000944C,
	18566: 0x00009450,
	18567: 0x0000944A,
	18568: 0x0000944B,
	18569: 0x0000944F,
	18570: 0x00009447,
	18571: 0x00009445,
	18572: 0x00009448,
	18573: 0x00009449,
	18574: 0x00009446,
	18575: 0x0000973F,
	18576: 0x000097E3,
	18577: 0x0000986A,
	18578: 0x00009869,
	18579: 0x000098CB,
	18580: 0x00009954,
	18581: 0x0000995B,
	18582: 0x00009A4E,
	18583: 0x00009A53,
	18584: 0x00009A54,
	18585: 0x00009A4C,
	18586: 0x00009A4F,
	18587: 0x00009A48,
	18588: 0x00009A4A,
	18589: 0x00009A49,
	18590: 0x00009A52,
	18591: 0x00009A50,
	18592: 0x00009AD0,
	18593: 0x00009B19,
	18594: 0x00009B2B,
	18595: 0x00009B3B,
	18596: 0x00009B56,
	18597: 0x00009B55,
	18598: 0x00009C46,
	18599: 0x00009C48,
	18600: 0x00009C3F,
	18601: 0x00009C44,
	18602: 0x00009C39,
	18603: 0x00009C33,
	18604: 0x00009C41,
	18605: 0x00009C3C,
	18606: 0x00009C37,
	18607: 0x00009C34,
	18608: 0x00009C32,
	18609: 0x00009C3D,
	18610: 0x00009C36,
	18611: 0x00009DDB,
	18612: 0x00009DD2,
	18613: 0x00009DDE,
	18614: 0x00009DDA,
	18615: 0x00009DCB,
	18616: 0x00009DD0,
	18617: 0x00009DDC,
	18618: 0x00009DD1,
	18619: 0x00009DDF,
	18620: 0x00009DE9,
	18621: 0x00009DD9,
	18622: 0x00009DD8,
	18623: 0x00009DD6,
	18624: 0x00009DF5,
	18625: 0x00009DD5,
	18626: 0x00009DDD,
	18627: 0x00009EB6,
	18628: 0x00009EF0,
	18629: 0x00009F35,
	18630: 0x00009F33,
	18631: 0x00009F32,
	18632: 0x00009F42,
	18633: 0x00009F6B,
	18634: 0x00009F95,
	18635: 0x00009FA2,
	18636: 0x0000513D,
	18637: 0x00005299,
	18638: 0x000058E8,
	18639: 0x000058E7,
	18640: 0x00005972,
	18641: 0x00005B4D,
	18642: 0x00005DD8,
	18643: 0x0000882F,
	18644: 0x00005F4F,
	18645: 0x00006201,
	18646: 0x00006203,
	18647: 0x00006204,
	18648: 0x00006529,
	18649: 0x00006525,
	18650: 0x00006596,
	18651: 0x000066EB,
	18652: 0x00006B11,
	18653: 0x00006B12,
	18654: 0x00006B0F,
	18655: 0x00006BCA,
	18656: 0x0000705B,
	18657: 0x0000705A,
	18658: 0x00007222,
	18659: 0x00007382,
	18660: 0x00007381,
	18661: 0x00007383,
	18662: 0x00007670,
	18663: 0x000077D4,
	18664: 0x00007C67,
	18665: 0x00007C66,
	18666: 0x00007E95,
	18667: 0x0000826C,
	18668: 0x0000863A,
	18669: 0x00008640,
	18670: 0x00008639,
	18671: 0x0000863C,
	18672: 0x00008631,
	18673: 0x0000863B,
	18674: 0x0000863E,
	18675: 0x00008830,
	18676: 0x00008832,
	18677: 0x0000882E,
	18678: 0x00008833,
	18679: 0x00008976,
	18680: 0x00008974,
	18681: 0x00008973,
	18682: 0x000089FE,
	18683: 0x00008B8C,
	18684: 0x00008B8E,
	18685: 0x00008B8B,
	18686: 0x00008B88,
	18687: 0x00008C45,
	18688: 0x00008D19,
	18689: 0x00008E98,
	18690: 0x00008F64,
	18691: 0x00008F63,
	18692: 0x000091BC,
	18693: 0x00009462,
	18694: 0x00009455,
	18695: 0x0000945D,
	18696: 0x00009457,
	18697: 0x0000945E,
	18698: 0x000097C4,
	18699: 0x000097C5,
	18700: 0x00009800,
	18701: 0x00009A56,
	18702: 0x00009A59,
	18703: 0x00009B1E,
	18704: 0x00009B1F,
	18705: 0x00009B20,
	18706: 0x00009C52,
	18707: 0x00009C58,
	18708: 0x00009C50,
	18709: 0x00009C4A,
	18710: 0x00009C4D,
	18711: 0x00009C4B,
	18712: 0x00009C55,
	18713: 0x00009C59,
	18714: 0x00009C4C,
	18715: 0x00009C4E,
	18716: 0x00009DFB,
	18717: 0x00009DF7,
	18718: 0x00009DEF,
	18719: 0x00009DE3,
	18720: 0x00009DEB,
	18721: 0x00009DF8,
	18722: 0x00009DE4,
	18723: 0x00009DF6,
	18724: 0x00009DE1,
	18725: 0x00009DEE,
	18726: 0x00009DE6,
	18727: 0x00009DF2,
	18728: 0x00009DF0,
	18729: 0x00009DE2,
	18730: 0x00009DEC,
	18731: 0x00009DF4,
	18732: 0x00009DF3,
	18733: 0x00009DE8,
	18734: 0x00009DED,
	18735: 0x00009EC2,
	18736: 0x00009ED0,
	18737: 0x00009EF2,
	18738: 0x00009EF3,
	18739: 0x00009F06,
	18740: 0x00009F1C,
	18741: 0x00009F38,
	18742: 0x00009F37,
	18743: 0x00009F36,
	18744: 0x00009F43,
	18745: 0x00009F4F,
	18746: 0x00009F71,
	18747: 0x00009F70,
	18748: 0x00009F6E,
	18749: 0x00009F6F,
	18750: 0x000056D3,
	18751: 0x000056CD,
	18752: 0x00005B4E,
	18753: 0x00005C6D,
	18754: 0x0000652D,
	18755: 0x000066ED,
	18756: 0x000066EE,
	18757: 0x00006B13,
	18758: 0x0000705F,
	18759: 0x00007061,
	18760: 0x0000705D,
	18761: 0x00007060,
	18762: 0x00007223,
	18763: 0x000074DB,
	18764: 0x000074E5,
	18765: 0x000077D5,
	18766: 0x00007938,
	18767: 0x000079B7,
	18768: 0x000079B6,
	18769: 0x00007C6A,
	18770: 0x00007E97,
	18771: 0x00007F89,
	18772: 0x0000826D,
	18773: 0x00008643,
	18774: 0x00008838,
	18775: 0x00008837,
	18776: 0x00008835,
	18777: 0x0000884B,
	18778: 0x00008B94,
	18779: 0x00008B95,
	18780: 0x00008E9E,
	18781: 0x00008E9F,
	18782: 0x00008EA0,
	18783: 0x00008E9D,
	18784: 0x000091BE,
	18785: 0x000091BD,
	18786: 0x000091C2,
	18787: 0x0000946B,
	18788: 0x00009468,
	18789: 0x00009469,
	18790: 0x000096E5,
	18791: 0x00009746,
	18792: 0x00009743,
	18793: 0x00009747,
	18794: 0x000097C7,
	18795: 0x000097E5,
	18796: 0x00009A5E,
	18797: 0x00009AD5,
	18798: 0x00009B59,
	18799: 0x00009C63,
	18800: 0x00009C67,
	18801: 0x00009C66,
	18802: 0x00009C62,
	18803: 0x00009C5E,
	18804: 0x00009C60,
	18805: 0x00009E02,
	18806: 0x00009DFE,
	18807: 0x00009E07,
	18808: 0x00009E03,
	18809: 0x00009E06,
	18810: 0x00009E05,
	18811: 0x00009E00,
	18812: 0x00009E01,
	18813: 0x00009E09,
	18814: 0x00009DFF,
	18815: 0x00009DFD,
	18816: 0x00009E04,
	18817: 0x00009EA0,
	18818: 0x00009F1E,
	18819: 0x00009F46,
	18820: 0x00009F74,
	18821: 0x00009F75,
	18822: 0x00009F76,
	18823: 0x000056D4,
	18824: 0x0000652E,
	18825: 0x000065B8,
	18826: 0x00006B18,
	18827: 0x00006B19,
	18828: 0x00006B17,
	18829: 0x00006B1A,
	18830: 0x00007062,
	18831: 0x00007226,
	18832: 0x000072AA,
	18833: 0x000077D8,
	18834: 0x000077D9,
	18835: 0x00007939,
	18836: 0x00007C69,
	18837: 0x00007C6B,
	18838: 0x00007CF6,
	18839: 0x00007E9A,
	18840: 0x00007E98,
	18841: 0x00007E9B,
	18842: 0x00007E99,
	18843: 0x000081E0,
	18844: 0x000081E1,
	18845: 0x00008646,
	18846: 0x00008647,
	18847: 0x00008648,
	18848: 0x00008979,
	18849: 0x0000897A,
	18850: 0x0000897C,
	18851: 0x0000897B,
	18852: 0x000089FF,
	18853: 0x00008B98,
	18854: 0x00008B99,
	18855: 0x00008EA5,
	18856: 0x00008EA4,
	18857: 0x00008EA3,
	18858: 0x0000946E,
	18859: 0x0000946D,
	18860: 0x0000946F,
	18861: 0x00009471,
	18862: 0x00009473,
	18863: 0x00009749,
	18864: 0x00009872,
	18865: 0x0000995F,
	18866: 0x00009C68,
	18867: 0x00009C6E,
	18868: 0x00009C6D,
	18869: 0x00009E0B,
	18870: 0x00009E0D,
	18871: 0x00009E10,
	18872: 0x00009E0F,
	18873: 0x00009E12,
	18874: 0x00009E11,
	18875: 0x00009EA1,
	18876: 0x00009EF5,
	18877: 0x00009F09,
	18878: 0x00009F47,
	18879: 0x00009F78,
	18880: 0x00009F7B,
	18881: 0x00009F7A,
	18882: 0x00009F79,
	18883: 0x0000571E,
	18884: 0x00007066,
	18885: 0x00007C6F,
	18886: 0x0000883C,
	18887: 0x00008DB2,
	18888: 0x00008EA6,
	18889: 0x000091C3,
	18890: 0x00009474,
	18891: 0x00009478,
	18892: 0x00009476,
	18893: 0x00009475,
	18894: 0x00009A60,
	18895: 0x00009C74,
	18896: 0x00009C73,
	18897: 0x00009C71,
	18898: 0x00009C75,
	18899: 0x00009E14,
	18900: 0x00009E13,
	18901: 0x00009EF6,
	18902: 0x00009F0A,
	18903: 0x00009FA4,
	18904: 0x00007068,
	18905: 0x00007065,
	18906: 0x00007CF7,
	18907: 0x0000866A,
	18908: 0x0000883E,
	18909: 0x0000883D,
	18910: 0x0000883F,
	18911: 0x00008B9E,
	18912: 0x00008C9C,
	18913: 0x00008EA9,
	18914: 0x00008EC9,
	18915: 0x0000974B,
	18916: 0x00009873,
	18917: 0x00009874,
	18918: 0x000098CC,
	18919: 0x00009961,
	18920: 0x000099AB,
	18921: 0x00009A64,
	18922: 0x00009A66,
	18923: 0x00009A67,
	18924: 0x00009B24,
	18925: 0x00009E15,
	18926: 0x00009E17,
	18927: 0x00009F48,
	18928: 0x00006207,
	18929: 0x00006B1E,
	18930: 0x00007227,
	18931: 0x0000864C,
	18932: 0x00008EA8,
	18933: 0x00009482,
	18934: 0x00009480,
	18935: 0x00009481,
	18936: 0x00009A69,
	18937: 0x00009A68,
	18938: 0x00009B2E,
	18939: 0x00009E19,
	18940: 0x00007229,
	18941: 0x0000864B,
	18942: 0x00008B9F,
	18943: 0x00009483,
	18944: 0x00009C79,
	18945: 0x00009EB7,
	18946: 0x00007675,
	18947: 0x00009A6B,
	18948: 0x00009C7A,
	18949: 0x00009E1D,
	18950: 0x00007069,
	18951: 0x0000706A,
	18952: 0x00009EA4,
	18953: 0x00009F7E,
	18954: 0x00009F49,
	18955: 0x00009F98,
	18956: 0x00007881,
	18957: 0x000092B9,
	18958: 0x000088CF,
	18959: 0x000058BB,
	18960: 0x00006052,
	18961: 0x00007CA7,
	18962: 0x00005AFA,
	18963: 0x00002554,
	18964: 0x00002566,
	18965: 0x00002557,
	18966: 0x00002560,
	18967: 0x0000256C,
	18968: 0x00002563,
	18969: 0x0000255A,
	18970: 0x00002569,
	18971: 0x0000255D,
	18972: 0x00002552,
	18973: 0x00002564,
	18974: 0x00002555,
	18975: 0x0000255E,
	18976: 0x0000256A,
	18977: 0x00002561,
	18978: 0x00002558,
	18979: 0x00002567,
	18980: 0x0000255B,
	18981: 0x00002553,
	18982: 0x00002565,
	18983: 0x00002556,
	18984: 0x0000255F,
	18985: 0x0000256B,
	18986: 0x00002562,
	18987: 0x00002559,
	18988: 0x00002568,
	18989: 0x0000255C,
	18990: 0x00002551,
	18991: 0x00002550,
	18992: 0x0000256D,
	18993: 0x0000256E,
	18994: 0x00002570,
	18995: 0x0000256F,
	18996: 0x0000FFED,
	18997: 0x00020547,
	18998: 0x000092DB,
	18999: 0x000205DF,
	19000: 0x00023FC5,
	19001: 0x0000854C,
	19002: 0x000042B5,
	19003: 0x000073EF,
	19004: 0x000051B5,
	19005: 0x00003649,
	19006: 0x00024942,
	19007: 0x000289E4,
	19008: 0x00009344,
	19009: 0x000219DB,
	19010: 0x000082EE,
	19011: 0x00023CC8,
	19012: 0x0000783C,
	19013: 0x00006744,
	19014: 0x000062DF,
	19015: 0x00024933,
	19016: 0x000289AA,
	19017: 0x000202A0,
	19018: 0x00026BB3,
	19019: 0x00021305,
	19020: 0x00004FAB,
	19021: 0x000224ED,
	19022: 0x00005008,
	19023: 0x00026D29,
	19024: 0x00027A84,
	19025: 0x00023600,
	19026: 0x00024AB1,
	19027: 0x00022513,
	19028: 0x00005029,
	19029: 0x0002037E,
	19030: 0x00005FA4,
	19031: 0x00020380,
	19032: 0x00020347,
	19033: 0x00006EDB,
	19034: 0x0002041F,
	19035: 0x0000507D,
	19036: 0x00005101,
	19037: 0x0000347A,
	19038: 0x0000510E,
	19039: 0x0000986C,
	19040: 0x00003743,
	19041: 0x00008416,
	19042: 0x000249A4,
	19043: 0x00020487,
	19044: 0x00005160,
	19045: 0x000233B4,
	19046: 0x0000516A,
	19047: 0x00020BFF,
	19048: 0x000220FC,
	19049: 0x000202E5,
	19050: 0x00022530,
	19051: 0x0002058E,
	19052: 0x00023233,
	19053: 0x00021983,
	19054: 0x00005B82,
	19055: 0x0000877D,
	19056: 0x000205B3,
	19057: 0x00023C99,
	19058: 0x000051B2,
	19059: 0x000051B8,
	19060: 0x00009D34,
	19061: 0x000051C9,
	19062: 0x000051CF,
	19063: 0x000051D1,
	19064: 0x00003CDC,
	19065: 0x000051D3,
	19066: 0x00024AA6,
	19067: 0x000051B3,
	19068: 0x000051E2,
	19069: 0x00005342,
	19070: 0x000051ED,
	19071: 0x000083CD,
	19072: 0x0000693E,
	19073: 0x0002372D,
	19074: 0x00005F7B,
	19075: 0x0000520B,
	19076: 0x00005226,
	19077: 0x0000523C,
	19078: 0x000052B5,
	19079: 0x00005257,
	19080: 0x00005294,
	19081: 0x000052B9,
	19082: 0x000052C5,
	19083: 0x00007C15,
	19084: 0x00008542,
	19085: 0x000052E0,
	19086: 0x0000860D,
	19087: 0x00026B13,
	19088: 0x00005305,
	19089: 0x00028ADE,
	19090: 0x00005549,
	19091: 0x00006ED9,
	19092: 0x00023F80,
	19093: 0x00020954,
	19094: 0x00023FEC,
	19095: 0x00005333,
	19096: 0x00005344,
	19097: 0x00020BE2,
	19098: 0x00006CCB,
	19099: 0x00021726,
	19100: 0x0000681B,
	19101: 0x000073D5,
	19102: 0x0000604A,
	19103: 0x00003EAA,
	19104: 0x000038CC,
	19105: 0x000216E8,
	19106: 0x000071DD,
	19107: 0x000044A2,
	19108: 0x0000536D,
	19109: 0x00005374,
	19110: 0x000286AB,
	19111: 0x0000537E,
	19112: 0x0000537F,
	19113: 0x00021596,
	19114: 0x00021613,
	19115: 0x000077E6,
	19116: 0x00005393,
	19117: 0x00028A9B,
	19118: 0x000053A0,
	19119: 0x000053AB,
	19120: 0x000053AE,
	19121: 0x000073A7,
	19122: 0x00025772,
	19123: 0x00003F59,
	19124: 0x0000739C,
	19125: 0x000053C1,
	19126: 0x000053C5,
	19127: 0x00006C49,
	19128: 0x00004E49,
	19129: 0x000057FE,
	19130: 0x000053D9,
	19131: 0x00003AAB,
	19132: 0x00020B8F,
	19133: 0x000053E0,
	19134: 0x00023FEB,
	19135: 0x00022DA3,
	19136: 0x000053F6,
	19137: 0x00020C77,
	19138: 0x00005413,
	19139: 0x00007079,
	19140: 0x0000552B,
	19141: 0x00006657,
	19142: 0x00006D5B,
	19143: 0x0000546D,
	19144: 0x00026B53,
	19145: 0x00020D74,
	19146: 0x0000555D,
	19147: 0x0000548F,
	19148: 0x000054A4,
	19149: 0x000047A6,
	19150: 0x0002170D,
	19151: 0x00020EDD,
	19152: 0x00003DB4,
	19153: 0x00020D4D,
	19154: 0x000289BC,
	19155: 0x00022698,
	19156: 0x00005547,
	19157: 0x00004CED,
	19158: 0x0000542F,
	19159: 0x00007417,
	19160: 0x00005586,
	19161: 0x000055A9,
	19162: 0x00005605,
	19163: 0x000218D7,
	19164: 0x0002403A,
	19165: 0x00004552,
	19166: 0x00024435,
	19167: 0x000066B3,
	19168: 0x000210B4,
	19169: 0x00005637,
	19170: 0x000066CD,
	19171: 0x0002328A,
	19172: 0x000066A4,
	19173: 0x000066AD,
	19174: 0x0000564D,
	19175: 0x0000564F,
	19176: 0x000078F1,
	19177: 0x000056F1,
	19178: 0x00009787,
	19179: 0x000053FE,
	19180: 0x00005700,
	19181: 0x000056EF,
	19182: 0x000056ED,
	19183: 0x00028B66,
	19184: 0x00003623,
	19185: 0x0002124F,
	19186: 0x00005746,
	19187: 0x000241A5,
	19188: 0x00006C6E,
	19189: 0x0000708B,
	19190: 0x00005742,
	19191: 0x000036B1,
	19192: 0x00026C7E,
	19193: 0x000057E6,
	19194: 0x00021416,
	19195: 0x00005803,
	19196: 0x00021454,
	19197: 0x00024363,
	19198: 0x00005826,
	19199: 0x00024BF5,
	19200: 0x0000585C,
	19201: 0x000058AA,
	19202: 0x00003561,
	19203: 0x000058E0,
	19204: 0x000058DC,
	19205: 0x0002123C,
	19206: 0x000058FB,
	19207: 0x00005BFF,
	19208: 0x00005743,
	19209: 0x0002A150,
	19210: 0x00024278,
	19211: 0x000093D3,
	19212: 0x000035A1,
	19213: 0x0000591F,
	19214: 0x000068A6,
	19215: 0x000036C3,
	19216: 0x00006E59,
	19217: 0x0002163E,
	19218: 0x00005A24,
	19219: 0x00005553,
	19220: 0x00021692,
	19221: 0x00008505,
	19222: 0x000059C9,
	19223: 0x00020D4E,
	19224: 0x00026C81,
	19225: 0x00026D2A,
	19226: 0x000217DC,
	19227: 0x000059D9,
	19228: 0x000217FB,
	19229: 0x000217B2,
	19230: 0x00026DA6,
	19231: 0x00006D71,
	19232: 0x00021828,
	19233: 0x000216D5,
	19234: 0x000059F9,
	19235: 0x00026E45,
	19236: 0x00005AAB,
	19237: 0x00005A63,
	19238: 0x000036E6,
	19239: 0x000249A9,
	19240: 0x00005A77,
	19241: 0x00003708,
	19242: 0x00005A96,
	19243: 0x00007465,
	19244: 0x00005AD3,
	19245: 0x00026FA1,
	19246: 0x00022554,
	19247: 0x00003D85,
	19248: 0x00021911,
	19249: 0x00003732,
	19250: 0x000216B8,
	19251: 0x00005E83,
	19252: 0x000052D0,
	19253: 0x00005B76,
	19254: 0x00006588,
	19255: 0x00005B7C,
	19256: 0x00027A0E,
	19257: 0x00004004,
	19258: 0x0000485D,
	19259: 0x00020204,
	19260: 0x00005BD5,
	19261: 0x00006160,
	19262: 0x00021A34,
	19263: 0x000259CC,
	19264: 0x000205A5,
	19265: 0x00005BF3,
	19266: 0x00005B9D,
	19267: 0x00004D10,
	19268: 0x00005C05,
	19269: 0x00021B44,
	19270: 0x00005C13,
	19271: 0x000073CE,
	19272: 0x00005C14,
	19273: 0x00021CA5,
	19274: 0x00026B28,
	19275: 0x00005C49,
	19276: 0x000048DD,
	19277: 0x00005C85,
	19278: 0x00005CE9,
	19279: 0x00005CEF,
	19280: 0x00005D8B,
	19281: 0x00021DF9,
	19282: 0x00021E37,
	19283: 0x00005D10,
	19284: 0x00005D18,
	19285: 0x00005D46,
	19286: 0x00021EA4,
	19287: 0x00005CBA,
	19288: 0x00005DD7,
	19289: 0x000082FC,
	19290: 0x0000382D,
	19291: 0x00024901,
	19292: 0x00022049,
	19293: 0x00022173,
	19294: 0x00008287,
	19295: 0x00003836,
	19296: 0x00003BC2,
	19297: 0x00005E2E,
	19298: 0x00006A8A,
	19299: 0x00005E75,
	19300: 0x00005E7A,
	19301: 0x000244BC,
	19302: 0x00020CD3,
	19303: 0x000053A6,
	19304: 0x00004EB7,
	19305: 0x00005ED0,
	19306: 0x000053A8,
	19307: 0x00021771,
	19308: 0x00005E09,
	19309: 0x00005EF4,
	19310: 0x00028482,
	19311: 0x00005EF9,
	19312: 0x00005EFB,
	19313: 0x000038A0,
	19314: 0x00005EFC,
	19315: 0x0000683E,
	19316: 0x0000941B,
	19317: 0x00005F0D,
	19318: 0x000201C1,
	19319: 0x0002F894,
	19320: 0x00003ADE,
	19321: 0x000048AE,
	19322: 0x0002133A,
	19323: 0x00005F3A,
	19324: 0x00026888,
	19325: 0x000223D0,
	19326: 0x00005F58,
	19327: 0x00022471,
	19328: 0x00005F63,
	19329: 0x000097BD,
	19330: 0x00026E6E,
	19331: 0x00005F72,
	19332: 0x00009340,
	19333: 0x00028A36,
	19334: 0x00005FA7,
	19335: 0x00005DB6,
	19336: 0x00003D5F,
	19337: 0x00025250,
	19338: 0x00021F6A,
	19339: 0x000270F8,
	19340: 0x00022668,
	19341: 0x000091D6,
	19342: 0x0002029E,
	19343: 0x00028A29,
	19344: 0x00006031,
	19345: 0x00006685,
	19346: 0x00021877,
	19347: 0x00003963,
	19348: 0x00003DC7,
	19349: 0x00003639,
	19350: 0x00005790,
	19351: 0x000227B4,
	19352: 0x00007971,
	19353: 0x00003E40,
	19354: 0x0000609E,
	19355: 0x000060A4,
	19356: 0x000060B3,
	19357: 0x00024982,
	19358: 0x0002498F,
	19359: 0x00027A53,
	19360: 0x000074A4,
	19361: 0x000050E1,
	19362: 0x00005AA0,
	19363: 0x00006164,
	19364: 0x00008424,
	19365: 0x00006142,
	19366: 0x0002F8A6,
	19367: 0x00026ED2,
	19368: 0x00006181,
	19369: 0x000051F4,
	19370: 0x00020656,
	19371: 0x00006187,
	19372: 0x00005BAA,
	19373: 0x00023FB7,
	19374: 0x0002285F,
	19375: 0x000061D3,
	19376: 0x00028B9D,
	19377: 0x0002995D,
	19378: 0x000061D0,
	19379: 0x00003932,
	19380: 0x00022980,
	19381: 0x000228C1,
	19382: 0x00006023,
	19383: 0x0000615C,
	19384: 0x0000651E,
	19385: 0x0000638B,
	19386: 0x00020118,
	19387: 0x000062C5,
	19388: 0x00021770,
	19389: 0x000062D5,
	19390: 0x00022E0D,
	19391: 0x0000636C,
	19392: 0x000249DF,
	19393: 0x00003A17,
	19394: 0x00006438,
	19395: 0x000063F8,
	19396: 0x0002138E,
	19397: 0x000217FC,
	19398: 0x00006490,
	19399: 0x00006F8A,
	19400: 0x00022E36,
	19401: 0x00009814,
	19402: 0x0002408C,
	19403: 0x0002571D,
	19404: 0x000064E1,
	19405: 0x000064E5,
	19406: 0x0000947B,
	19407: 0x00003A66,
	19408: 0x0000643A,
	19409: 0x00003A57,
	19410: 0x0000654D,
	19411: 0x00006F16,
	19412: 0x00024A28,
	19413: 0x00024A23,
	19414: 0x00006585,
	19415: 0x0000656D,
	19416: 0x0000655F,
	19417: 0x0002307E,
	19418: 0x000065B5,
	19419: 0x00024940,
	19420: 0x00004B37,
	19421: 0x000065D1,
	19422: 0x000040D8,
	19423: 0x00021829,
	19424: 0x000065E0,
	19425: 0x000065E3,
	19426: 0x00005FDF,
	19427: 0x00023400,
	19428: 0x00006618,
	19429: 0x000231F7,
	19430: 0x000231F8,
	19431: 0x00006644,
	19432: 0x000231A4,
	19433: 0x000231A5,
	19434: 0x0000664B,
	19435: 0x00020E75,
	19436: 0x00006667,
	19437: 0x000251E6,
	19438: 0x00006673,
	19439: 0x00006674,
	19440: 0x00021E3D,
	19441: 0x00023231,
	19442: 0x000285F4,
	19443: 0x000231C8,
	19444: 0x00025313,
	19445: 0x000077C5,
	19446: 0x000228F7,
	19447: 0x000099A4,
	19448: 0x00006702,
	19449: 0x0002439C,
	19450: 0x00024A21,
	19451: 0x00003B2B,
	19452: 0x000069FA,
	19453: 0x000237C2,
	19454: 0x0000675E,
	19455: 0x00006767,
	19456: 0x00006762,
	19457: 0x000241CD,
	19458: 0x000290ED,
	19459: 0x000067D7,
	19460: 0x000044E9,
	19461: 0x00006822,
	19462: 0x00006E50,
	19463: 0x0000923C,
	19464: 0x00006801,
	19465: 0x000233E6,
	19466: 0x00026DA0,
	19467: 0x0000685D,
	19468: 0x0002346F,
	19469: 0x000069E1,
	19470: 0x00006A0B,
	19471: 0x00028ADF,
	19472: 0x00006973,
	19473: 0x000068C3,
	19474: 0x000235CD,
	19475: 0x00006901,
	19476: 0x00006900,
	19477: 0x00003D32,
	19478: 0x00003A01,
	19479: 0x0002363C,
	19480: 0x00003B80,
	19481: 0x000067AC,
	19482: 0x00006961,
	19483: 0x00028A4A,
	19484: 0x000042FC,
	19485: 0x00006936,
	19486: 0x00006998,
	19487: 0x00003BA1,
	19488: 0x000203C9,
	19489: 0x00008363,
	19490: 0x00005090,
	19491: 0x000069F9,
	19492: 0x00023659,
	19493: 0x0002212A,
	19494: 0x00006A45,
	19495: 0x00023703,
	19496: 0x00006A9D,
	19497: 0x00003BF3,
	19498: 0x000067B1,
	19499: 0x00006AC8,
	19500: 0x0002919C,
	19501: 0x00003C0D,
	19502: 0x00006B1D,
	19503: 0x00020923,
	19504: 0x000060DE,
	19505: 0x00006B35,
	19506: 0x00006B74,
	19507: 0x000227CD,
	19508: 0x00006EB5,
	19509: 0x00023ADB,
	19510: 0x000203B5,
	19511: 0x00021958,
	19512: 0x00003740,
	19513: 0x00005421,
	19514: 0x00023B5A,
	19515: 0x00006BE1,
	19516: 0x00023EFC,
	19517: 0x00006BDC,
	19518: 0x00006C37,
	19519: 0x0002248B,
	19520: 0x000248F1,
	19521: 0x00026B51,
	19522: 0x00006C5A,
	19523: 0x00008226,
	19524: 0x00006C79,
	19525: 0x00023DBC,
	19526: 0x000044C5,
	19527: 0x00023DBD,
	19528: 0x000241A4,
	19529: 0x0002490C,
	19530: 0x00024900,
	19531: 0x00023CC9,
	19532: 0x000036E5,
	19533: 0x00003CEB,
	19534: 0x00020D32,
	19535: 0x00009B83,
	19536: 0x000231F9,
	19537: 0x00022491,
	19538: 0x00007F8F,
	19539: 0x00006837,
	19540: 0x00026D25,
	19541: 0x00026DA1,
	19542: 0x00026DEB,
	19543: 0x00006D96,
	19544: 0x00006D5C,
	19545: 0x00006E7C,
	19546: 0x00006F04,
	19547: 0x0002497F,
	19548: 0x00024085,
	19549: 0x00026E72,
	19550: 0x00008533,
	19551: 0x00026F74,
	19552: 0x000051C7,
	19553: 0x00006C9C,
	19554: 0x00006E1D,
	19555: 0x0000842E,
	19556: 0x00028B21,
	19557: 0x00006E2F,
	19558: 0x00023E2F,
	19559: 0x00007453,
	19560: 0x00023F82,
	19561: 0x000079CC,
	19562: 0x00006E4F,
	19563: 0x00005A91,
	19564: 0x0002304B,
	19565: 0x00006FF8,
	19566: 0x0000370D,
	19567: 0x00006F9D,
	19568: 0x00023E30,
	19569: 0x00006EFA,
	19570: 0x00021497,
	19571: 0x0002403D,
	19572: 0x00004555,
	19573: 0x000093F0,
	19574: 0x00006F44,
	19575: 0x00006F5C,
	19576: 0x00003D4E,
	19577: 0x00006F74,
	19578: 0x00029170,
	19579: 0x00003D3B,
	19580: 0x00006F9F,
	19581: 0x00024144,
	19582: 0x00006FD3,
	19583: 0x00024091,
	19584: 0x00024155,
	19585: 0x00024039,
	19586: 0x00023FF0,
	19587: 0x00023FB4,
	19588: 0x0002413F,
	19589: 0x000051DF,
	19590: 0x00024156,
	19591: 0x00024157,
	19592: 0x00024140,
	19593: 0x000261DD,
	19594: 0x0000704B,
	19595: 0x0000707E,
	19596: 0x000070A7,
	19597: 0x00007081,
	19598: 0x000070CC,
	19599: 0x000070D5,
	19600: 0x000070D6,
	19601: 0x000070DF,
	19602: 0x00004104,
	19603: 0x00003DE8,
	19604: 0x000071B4,
	19605: 0x00007196,
	19606: 0x00024277,
	19607: 0x0000712B,
	19608: 0x00007145,
	19609: 0x00005A88,
	19610: 0x0000714A,
	19611: 0x0000716E,
	19612: 0x00005C9C,
	19613: 0x00024365,
	19614: 0x0000714F,
	19615: 0x00009362,
	19616: 0x000242C1,
	19617: 0x0000712C,
	19618: 0x0002445A,
	19619: 0x00024A27,
	19620: 0x00024A22,
	19621: 0x000071BA,
	19622: 0x00028BE8,
	19623: 0x000070BD,
	19624: 0x0000720E,
	19625: 0x00009442,
	19626: 0x00007215,
	19627: 0x00005911,
	19628: 0x00009443,
	19629: 0x00007224,
	19630: 0x00009341,
	19631: 0x00025605,
	19632: 0x0000722E,
	19633: 0x00007240,
	19634: 0x00024974,
	19635: 0x000068BD,
	19636: 0x00007255,
	19637: 0x00007257,
	19638: 0x00003E55,
	19639: 0x00023044,
	19640: 0x0000680D,
	19641: 0x00006F3D,
	19642: 0x00007282,
	19643: 0x0000732A,
	19644: 0x0000732B,
	19645: 0x00024823,
	19646: 0x0002882B,
	19647: 0x000048ED,
	19648: 0x00028804,
	19649: 0x00007328,
	19650: 0x0000732E,
	19651: 0x000073CF,
	19652: 0x000073AA,
	19653: 0x00020C3A,
	19654: 0x00026A2E,
	19655: 0x000073C9,
	19656: 0x00007449,
	19657: 0x000241E2,
	19658: 0x000216E7,
	19659: 0x00024A24,
	19660: 0x00006623,
	19661: 0x000036C5,
	19662: 0x000249B7,
	19663: 0x0002498D,
	19664: 0x000249FB,
	19665: 0x000073F7,
	19666: 0x00007415,
	19667: 0x00006903,
	19668: 0x00024A26,
	19669: 0x00007439,
	19670: 0x000205C3,
	19671: 0x00003ED7,
	19672: 0x0000745C,
	19673: 0x000228AD,
	19674: 0x00007460,
	19675: 0x00028EB2,
	19676: 0x00007447,
	19677: 0x000073E4,
	19678: 0x00007476,
	19679: 0x000083B9,
	19680: 0x0000746C,
	19681: 0x00003730,
	19682: 0x00007474,
	19683: 0x000093F1,
	19684: 0x00006A2C,
	19685: 0x00007482,
	19686: 0x00004953,
	19687: 0x00024A8C,
	19688: 0x0002415F,
	19689: 0x00024A79,
	19690: 0x00028B8F,
	19691: 0x00005B46,
	19692: 0x00028C03,
	19693: 0x0002189E,
	19694: 0x000074C8,
	19695: 0x00021988,
	19696: 0x0000750E,
	19697: 0x000074E9,
	19698: 0x0000751E,
	19699: 0x00028ED9,
	19700: 0x00021A4B,
	19701: 0x00005BD7,
	19702: 0x00028EAC,
	19703: 0x00009385,
	19704: 0x0000754D,
	19705: 0x0000754A,
	19706: 0x00007567,
	19707: 0x0000756E,
	19708: 0x00024F82,
	19709: 0x00003F04,
	19710: 0x00024D13,
	19711: 0x0000758E,
	19712: 0x0000745D,
	19713: 0x0000759E,
	19714: 0x000075B4,
	19715: 0x00007602,
	19716: 0x0000762C,
	19717: 0x00007651,
	19718: 0x0000764F,
	19719: 0x0000766F,
	19720: 0x00007676,
	19721: 0x000263F5,
	19722: 0x00007690,
	19723: 0x000081EF,
	19724: 0x000037F8,
	19725: 0x00026911,
	19726: 0x0002690E,
	19727: 0x000076A1,
	19728: 0x000076A5,
	19729: 0x000076B7,
	19730: 0x000076CC,
	19731: 0x00026F9F,
	19732: 0x00008462,
	19733: 0x0002509D,
	19734: 0x0002517D,
	19735: 0x00021E1C,
	19736: 0x0000771E,
	19737: 0x00007726,
	19738: 0x00007740,
	19739: 0x000064AF,
	19740: 0x00025220,
	19741: 0x00007758,
	19742: 0x000232AC,
	19743: 0x000077AF,
	19744: 0x00028964,
	19745: 0x00028968,
	19746: 0x000216C1,
	19747: 0x000077F4,
	19748: 0x00007809,
	19749: 0x00021376,
	19750: 0x00024A12,
	19751: 0x000068CA,
	19752: 0x000078AF,
	19753: 0x000078C7,
	19754: 0x000078D3,
	19755: 0x000096A5,
	19756: 0x0000792E,
	19757: 0x000255E0,
	19758: 0x000078D7,
	19759: 0x00007934,
	19760: 0x000078B1,
	19761: 0x0002760C,
	19762: 0x00008FB8,
	19763: 0x00008884,
	19764: 0x00028B2B,
	19765: 0x00026083,
	19766: 0x0002261C,
	19767: 0x00007986,
	19768: 0x00008900,
	19769: 0x00006902,
	19770: 0x00007980,
	19771: 0x00025857,
	19772: 0x0000799D,
	19773: 0x00027B39,
	19774: 0x0000793C,
	19775: 0x000079A9,
	19776: 0x00006E2A,
	19777: 0x00027126,
	19778: 0x00003EA8,
	19779: 0x000079C6,
	19780: 0x0002910D,
	19781: 0x000079D4,
}

const numEncodeTables = 8

// encodeX are the encoding tables from Unicode to Big5 code,
// sorted by decreasing length.
// encode0: 42633 entries for runes in [131105, 173738).
// encode1: 29004 entries for runes in [ 11904,  40908).
// encode2:  2176 entries for runes in [  7870,  10046).
// encode3:   939 entries for runes in [   167,   1106).
// encode4:   446 entries for runes in [ 65072,  65518).
// encode5:   432 entries for runes in [194597, 195029).
// encode6:   263 entries for runes in [ 63751,  64014).
// encode7:     1 entries for runes in [175615, 175616).

const encode0Low, encode0High = 131105, 173738

var encode0 = [...]uint16{
	131105 - 131105: 0x9C71,
	131134 - 131105: 0x9375,
	131142 - 131105: 0x9376,
	131150 - 131105: 0x9548,
	131176 - 131105: 0x8EC6,
	131206 - 131105: 0x8BC5,
	131207 - 131105: 0x8BFA,
	131210 - 131105: 0xC87C,
	131220 - 131105: 0x9AB4,
	131274 - 131105: 0x884E,
	131275 - 131105: 0x884B,
	131276 - 131105: 0xC87A,
	131277 - 131105: 0x8848,
	131281 - 131105: 0x8847,
	131310 - 131105: 0xA0F6,
	131340 - 131105: 0x8845,
	131342 - 131105: 0x8853,
	131352 - 131105: 0xFCAD,
	131492 - 131105: 0x8CF5,
	131497 - 131105: 0x8AAD,
	131499 - 131105: 0x9272,
	131521 - 131105: 0xFC47,
	131540 - 131105: 0x94DF,
	131570 - 131105: 0x9FD1,
	131588 - 131105: 0xFBCB,
	131596 - 131105: 0x927D,
	131604 - 131105: 0x98A4,
	131641 - 131105: 0x8CF9,
	131675 - 131105: 0x94E7,
	131700 - 131105: 0x90CB,
	131701 - 131105: 0x927B,
	131737 - 131105: 0x94D8,
	131742 - 131105: 0xFC5F,
	131744 - 131105: 0xFA54,
	131767 - 131105: 0x9AB5,
	131775 - 131105: 0x96DA,
	131776 - 131105: 0x9279,
	131813 - 131105: 0xFA74,
	131850 - 131105: 0x9275,
	131877 - 131105: 0x8DFB,
	131905 - 131105: 0x8A49,
	131909 - 131105: 0x92DF,
	131910 - 131105: 0x9B7C,
	131911 - 131105: 0xFA63,
	131966 - 131105: 0xFA60,
	131967 - 131105: 0x926D,
	131968 - 131105: 0xFA62,
	132000 - 131105: 0x9AB6,
	132007 - 131105: 0x976B,
	132021 - 131105: 0xFD6A,
	132041 - 131105: 0xFD54,
	132043 - 131105: 0x9273,
	132085 - 131105: 0x97D8,
	132092 - 131105: 0x9FBB,
	132115 - 131105: 0x9342,
	132116 - 131105: 0x9276,
	132127 - 131105: 0xFA65,
	132197 - 131105: 0x926C,
	132231 - 131105: 0xFA6E,
	132238 - 131105: 0x9EE0,
	132241 - 131105: 0x92C0,
	132242 - 131105: 0x92BF,
	132259 - 131105: 0x92BE,
	132311 - 131105: 0x9ABA,
	132348 - 131105: 0x8AB3,
	132350 - 131105: 0x9775,
	132423 - 131105: 0xFA40,
	132494 - 131105: 0xFA76,
	132517 - 131105: 0xFBD0,
	132531 - 131105: 0xFA7B,
	132547 - 131105: 0xFE6D,
	132554 - 131105: 0x9BB3,
	132560 - 131105: 0x89CC,
	132565 - 131105: 0x9ABE,
	132575 - 131105: 0xFA42,
	132576 - 131105: 0x92BC,
	132587 - 131105: 0x945C,
	132625 - 131105: 0x9BB5,
	132629 - 131105: 0x9ABF,
	132633 - 131105: 0x98A7,
	132634 - 131105: 0x97A4,
	132656 - 131105: 0x90FD,
	132694 - 131105: 0xFC7B,
	132726 - 131105: 0x9AC0,
	132878 - 131105: 0x92C3,
	132913 - 131105: 0x8AAA,
	132985 - 131105: 0x9BD0,
	133164 - 131105: 0x9550,
	133235 - 131105: 0x92C6,
	133333 - 131105: 0x98A6,
	133398 - 131105: 0x9546,
	133411 - 131105: 0xFD63,
	133460 - 131105: 0xFAC2,
	133497 - 131105: 0x9EC3,
	133607 - 131105: 0x89B2,
	133649 - 131105: 0x9C66,
	133712 - 131105: 0x9053,
	133743 - 131105: 0x8C62,
	133770 - 131105: 0x87A8,
	133812 - 131105: 0x97C1,
	133826 - 131105: 0x9AC4,
	133837 - 131105: 0x9AC5,
	133901 - 131105: 0x8EEF,
	134031 - 131105: 0xFAE9,
	134047 - 131105: 0x8D40,
	134056 - 131105: 0x9262,
	134057 - 131105: 0x8AF7,
	134079 - 131105: 0x9AC6,
	134086 - 131105: 0x92E1,
	134091 - 131105: 0x9AC9,
	134114 - 131105: 0xFAC6,
	134123 - 131105: 0x97A5,
	134139 - 131105: 0x9ACB,
	134143 - 131105: 0xFA72,
	134155 - 131105: 0x8A5E,
	134157 - 131105: 0x94E0,
	134176 - 131105: 0x92CC,
	134196 - 131105: 0x8AE5,
	134202 - 131105: 0xFE5C,
	134203 - 131105: 0x9ACC,
	134209 - 131105: 0x9DF9,
	134210 - 131105: 0x8A43,
	134211 - 131105: 0x8AA6,
	134227 - 131105: 0x9ACD,
	134245 - 131105: 0x9ACE,
	134263 - 131105: 0xFAEE,
	134264 - 131105: 0x9BCC,
	134268 - 131105: 0x9ACF,
	134285 - 131105: 0x9AD1,
	134294 - 131105: 0x9DFA,
	134300 - 131105: 0x9D7C,
	134325 - 131105: 0x9AD3,
	134328 - 131105: 0x97A6,
	134351 - 131105: 0x995F,
	134355 - 131105: 0xFBF6,
	134356 - 131105: 0x9FC5,
	134357 - 131105: 0x8A59,
	134358 - 131105: 0x8B6B,
	134365 - 131105: 0x9AD4,
	134381 - 131105: 0x9AD5,
	134399 - 131105: 0x97A2,
	134421 - 131105: 0x8A44,
	134440 - 131105: 0x9F4A,
	134449 - 131105: 0x90A1,
	134450 - 131105: 0xFDA4,
	134470 - 131105: 0x8A64,
	134471 - 131105: 0x8AF2,
	134472 - 131105: 0x8AF8,
	134473 - 131105: 0x9DD8,
	134476 - 131105: 0x94D6,
	134477 - 131105: 0xFAFE,
	134478 - 131105: 0xFBA7,
	134511 - 131105: 0x9AD6,
	134513 - 131105: 0x9F4D,
	134516 - 131105: 0xFAF6,
	134524 - 131105: 0x8A57,
	134526 - 131105: 0x8B43,
	134527 - 131105: 0x8B44,
	134550 - 131105: 0x8AB6,
	134556 - 131105: 0x8AC0,
	134567 - 131105: 0x9E54,
	134578 - 131105: 0x9AD7,
	134600 - 131105: 0x9AD8,
	134660 - 131105: 0x9ADC,
	134665 - 131105: 0x8ACA,
	134666 - 131105: 0x9EA8,
	134669 - 131105: 0x9263,
	134670 - 131105: 0x9ADD,
	134671 - 131105: 0x8B65,
	134672 - 131105: 0x8B6F,
	134673 - 131105: 0x8B7E,
	134678 - 131105: 0x8F43,
	134685 - 131105: 0x92D0,
	134732 - 131105: 0x8AF4,
	134765 - 131105: 0x9DBE,
	134771 - 131105: 0x9AE1,
	134773 - 131105: 0xFCDE,
	134774 - 131105: 0x9DFD,
	134775 - 131105: 0x8B66,
	134776 - 131105: 0x8B70,
	134777 - 131105: 0x8B75,
	134778 - 131105: 0x8AE4,
	134779 - 131105: 0x8BA4,
	134796 - 131105: 0x8AED,
	134806 - 131105: 0x8A5D,
	134808 - 131105: 0x8B48,
	134813 - 131105: 0x9DED,
	134818 - 131105: 0x9E40,
	134826 - 131105: 0x8AEF,
	134827 - 131105: 0x8AF6,
	134828 - 131105: 0x9E76,
	134838 - 131105: 0x9EE3,
	134871 - 131105: 0x9ADE,
	134872 - 131105: 0x8DFE,
	134877 - 131105: 0xFAFC,
	134904 - 131105: 0x9CB1,
	134905 - 131105: 0x9E77,
	134906 - 131105: 0x8B64,
	134907 - 131105: 0x8B67,
	134941 - 131105: 0x974B,
	134950 - 131105: 0x9653,
	134957 - 131105: 0x9AE0,
	134958 - 131105: 0x8B4A,
	134960 - 131105: 0x8AF1,
	134961 - 131105: 0x8AD7,
	134971 - 131105: 0xA0AB,
	134988 - 131105: 0x8AB5,
	135012 - 131105: 0x8A5F,
	135053 - 131105: 0x8AEE,
	135056 - 131105: 0x9ADF,
	135085 - 131105: 0x8AFE,
	135092 - 131105: 0x8A58,
	135093 - 131105: 0x8BA3,
	135094 - 131105: 0x8BA7,
	135100 - 131105: 0x9AE3,
	135135 - 131105: 0x9261,
	135146 - 131105: 0x9DD7,
	135147 - 131105: 0x9E7D,
	135148 - 131105: 0x9EA7,
	135149 - 131105: 0x9EAB,
	135188 - 131105: 0x9042,
	135197 - 131105: 0x8B79,
	135198 - 131105: 0x8B7A,
	135247 - 131105: 0x9AE6,
	135260 - 131105: 0x9AE5,
	135279 - 131105: 0x8A7E,
	135285 - 131105: 0x9E44,
	135286 - 131105: 0x9AE7,
	135287 - 131105: 0x8A7C,
	135288 - 131105: 0x8B71,
	135291 - 131105: 0x9AE9,
	135304 - 131105: 0x9AEA,
	135318 - 131105: 0x9AEB,
	135325 - 131105: 0x8ABD,
	135348 - 131105: 0xFB4E,
	135359 - 131105: 0x9AED,
	135360 - 131105: 0x8AF9,
	135361 - 131105: 0x9E63,
	135367 - 131105: 0x8B49,
	135368 - 131105: 0x8ACE,
	135369 - 131105: 0x8B6E,
	135375 - 131105: 0x8AE8,
	135379 - 131105: 0x9AEE,
	135396 - 131105: 0x92CE,
	135412 - 131105: 0x8A5A,
	135413 - 131105: 0x8B7B,
	135414 - 131105: 0x8B7C,
	135471 - 131105: 0x9AEF,
	135483 - 131105: 0x9AF0,
	135485 - 131105: 0x8AFA,
	135493 - 131105: 0x8941,
	135496 - 131105: 0x8B72,
	135503 - 131105: 0x8AF3,
	135552 - 131105: 0x8BA8,
	135559 - 131105: 0x9EAE,
	135641 - 131105: 0x9E72,
	135740 - 131105: 0xFB73,
	135759 - 131105: 0xFB5F,
	135804 - 131105: 0x90BA,
	135848 - 131105: 0x91FE,
	135849 - 131105: 0x9EF6,
	135856 - 131105: 0x97ED,
	135907 - 131105: 0x9AF3,
	135934 - 131105: 0xA0EE,
	135938 - 131105: 0x967C,
	135939 - 131105: 0x9345,
	135940 - 131105: 0x986E,
	135941 - 131105: 0xFA56,
	135990 - 131105: 0x9AF5,
	135994 - 131105: 0xFC4B,
	136053 - 131105: 0x9AF4,
	136054 - 131105: 0xFEDE,
	136078 - 131105: 0xFCB7,
	136088 - 131105: 0x97F1,
	136092 - 131105: 0x97C7,
	136133 - 131105: 0x9CCB,
	136134 - 131105: 0x9240,
	136173 - 131105: 0x9CE8,
	136190 - 131105: 0x91FD,
	136211 - 131105: 0x974E,
	136214 - 131105: 0xFB68,
	136228 - 131105: 0x976C,
	136255 - 131105: 0x8CC2,
	136274 - 131105: 0x97E8,
	136276 - 131105: 0xFB6A,
	136277 - 131105: 0x8B74,
	136330 - 131105: 0x8EE7,
	136343 - 131105: 0xFDC8,
	136374 - 131105: 0x9241,
	136424 - 131105: 0x96A1,
	136445 - 131105: 0x8EF3,
	136567 - 131105: 0x9AF7,
	136578 - 131105: 0x8FA6,
	136598 - 131105: 0xFAD6,
	136714 - 131105: 0x9CC7,
	136723 - 131105: 0xFAD7,
	136729 - 131105: 0x9AF8,
	136766 - 131105: 0xFBA1,
	136801 - 131105: 0x8EC5,
	136850 - 131105: 0xFBA4,
	136888 - 131105: 0xFBC2,
	136890 - 131105: 0x9AC1,
	136896 - 131105: 0x91FA,
	136897 - 131105: 0xFEDB,
	136898 - 131105: 0x97AB,
	136915 - 131105: 0x9147,
	136917 - 131105: 0xFBB1,
	136927 - 131105: 0x8FEA,
	136934 - 131105: 0x94D2,
	136935 - 131105: 0xFE61,
	136936 - 131105: 0xFACE,
	136954 - 131105: 0x92ED,
	136955 - 131105: 0x91F3,
	136956 - 131105: 0x93C6,
	136958 - 131105: 0x935A,
	136973 - 131105: 0xFAFB,
	136976 - 131105: 0x92EF,
	136998 - 131105: 0xFAC8,
	137018 - 131105: 0x9847,
	137019 - 131105: 0x9366,
	137020 - 131105: 0x9855,
	137047 - 131105: 0x96E6,
	137068 - 131105: 0x9F43,
	137069 - 131105: 0x9FAA,
	137070 - 131105: 0x94DA,
	137071 - 131105: 0x92EE,
	137072 - 131105: 0xFCAF,
	137073 - 131105: 0xFBFB,
	137075 - 131105: 0x8EF9,
	137076 - 131105: 0x91F6,
	137131 - 131105: 0x9364,
	137136 - 131105: 0x94F5,
	137137 - 131105: 0x9CB6,
	137138 - 131105: 0xFBAD,
	137139 - 131105: 0x984E,
	137140 - 131105: 0x8F44,
	137141 - 131105: 0x96FD,
	137155 - 131105: 0x9AF9,
	137159 - 131105: 0x9AFA,
	137177 - 131105: 0x9769,
	137178 - 131105: 0x95D4,
	137179 - 131105: 0x984B,
	137180 - 131105: 0xFBAA,
	137183 - 131105: 0x987C,
	137199 - 131105: 0x91EA,
	137205 - 131105: 0x9DAF,
	137206 - 131105: 0x9DC5,
	137208 - 131105: 0x91F1,
	137209 - 131105: 0x8EB1,
	137210 - 131105: 0x97A9,
	137211 - 131105: 0xFBAC,
	137212 - 131105: 0xFCB8,
	137248 - 131105: 0x9CB9,
	137256 - 131105: 0xFBB0,
	137257 - 131105: 0xFCD2,
	137258 - 131105: 0x93CB,
	137261 - 131105: 0x9AFD,
	137273 - 131105: 0x91F4,
	137274 - 131105: 0x8BAC,
	137275 - 131105: 0xA055,
	137280 - 131105: 0x9574,
	137285 - 131105: 0x95BE,
	137298 - 131105: 0x97AD,
	137310 - 131105: 0x8EE9,
	137313 - 131105: 0x92F8,
	137314 - 131105: 0x97BE,
	137315 - 131105: 0x916C,
	137316 - 131105: 0x94AA,
	137335 - 131105: 0xFC63,
	137339 - 131105: 0x9DC6,
	137347 - 131105: 0x97B5,
	137348 - 131105: 0x92B8,
	137349 - 131105: 0x91EF,
	137374 - 131105: 0xFEA6,
	137375 - 131105: 0x9760,
	137376 - 131105: 0x9358,
	137377 - 131105: 0x9576,
	137378 - 131105: 0x8FAC,
	137406 - 131105: 0x91EC,
	137407 - 131105: 0x97B4,
	137425 - 131105: 0x91F7,
	137430 - 131105: 0x974A,
	137431 - 131105: 0xFB49,
	137432 - 131105: 0x9578,
	137433 - 131105: 0x93BC,
	137466 - 131105: 0x91D6,
	137475 - 131105: 0x9355,
	137476 - 131105: 0x9356,
	137477 - 131105: 0x9851,
	137488 - 131105: 0x8FF8,
	137489 - 131105: 0xFBC0,
	137490 - 131105: 0x93F2,
	137493 - 131105: 0x90D0,
	137500 - 131105: 0x9C44,
	137506 - 131105: 0x9255,
	137511 - 131105: 0x9363,
	137531 - 131105: 0x91A5,
	137540 - 131105: 0xA0ED,
	137560 - 131105: 0xFD6B,
	137578 - 131105: 0x9AFE,
	137596 - 131105: 0x9351,
	137600 - 131105: 0x8C57,
	137603 - 131105: 0xFA78,
	137608 - 131105: 0xFEA8,
	137622 - 131105: 0x9350,
	137691 - 131105: 0xFA4C,
	137715 - 131105: 0x92F7,
	137773 - 131105: 0x9B40,
	137780 - 131105: 0xFBCE,
	137797 - 131105: 0x9B41,
	137803 - 131105: 0xFEAD,
	137827 - 131105: 0x8761,
	138052 - 131105: 0xFBD5,
	138177 - 131105: 0x8BC2,
	138178 - 131105: 0x9A7C,
	138282 - 131105: 0x9B42,
	138352 - 131105: 0x9B43,
	138402 - 131105: 0x9E79,
	138405 - 131105: 0xFBD9,
	138412 - 131105: 0x9B44,
	138566 - 131105: 0xA0A7,
	138579 - 131105: 0x877B,
	138590 - 131105: 0x876E,
	138640 - 131105: 0x9BF3,
	138678 - 131105: 0x8C79,
	138682 - 131105: 0x935E,
	138698 - 131105: 0x89CB,
	138705 - 131105: 0x9F53,
	138731 - 131105: 0x93D7,
	138745 - 131105: 0xFBE1,
	138780 - 131105: 0xFED0,
	138787 - 131105: 0x8CF1,
	138807 - 131105: 0xFBE2,
	138813 - 131105: 0xFCE3,
	138889 - 131105: 0x9074,
	138916 - 131105: 0xFBE6,
	138920 - 131105: 0x9BB7,
	138952 - 131105: 0x9B45,
	138965 - 131105: 0x9B47,
	139023 - 131105: 0x9F50,
	139029 - 131105: 0x9B48,
	139114 - 131105: 0xFC5B,
	139166 - 131105: 0x98A9,
	139169 - 131105: 0x9CFD,
	139240 - 131105: 0x884C,
	139333 - 131105: 0x9B4B,
	139337 - 131105: 0xFBEC,
	139390 - 131105: 0x8C69,
	139418 - 131105: 0x9BA8,
	139463 - 131105: 0x8AD5,
	139516 - 131105: 0xFA73,
	139562 - 131105: 0xFD59,
	139611 - 131105: 0x91A2,
	139635 - 131105: 0xFBED,
	139642 - 131105: 0x9CA9,
	139681 - 131105: 0x8AA8,
	139713 - 131105: 0x8D42,
	139715 - 131105: 0x9BC3,
	139784 - 131105: 0x8AE1,
	139900 - 131105: 0x9B4E,
	140065 - 131105: 0x95D0,
	140069 - 131105: 0x905F,
	140221 - 131105: 0x97EE,
	140240 - 131105: 0xFC4E,
	140247 - 131105: 0x9B4F,
	140282 - 131105: 0x9B50,
	140389 - 131105: 0x9EC6,
	140401 - 131105: 0xFC50,
	140427 - 131105: 0xFD73,
	140433 - 131105: 0xFDA7,
	140464 - 131105: 0x9DA2,
	140476 - 131105: 0x87D1,
	140481 - 131105: 0x87D3,
	140489 - 131105: 0x87D4,
	140492 - 131105: 0x87D5,
	140525 - 131105: 0xFA58,
	140563 - 131105: 0xFA5E,
	140571 - 131105: 0xA059,
	140592 - 131105: 0xFA75,
	140628 - 131105: 0xFBBE,
	140685 - 131105: 0x9CA2,
	140719 - 131105: 0x9370,
	140734 - 131105: 0x9371,
	140827 - 131105: 0x9377,
	140828 - 131105: 0xFEEF,
	140843 - 131105: 0x936D,
	140904 - 131105: 0xFC5D,
	140922 - 131105: 0x90B8,
	140950 - 131105: 0x8AFC,
	140952 - 131105: 0xFB41,
	141044 - 131105: 0x9E6B,
	141045 - 131105: 0x94E3,
	141046 - 131105: 0x8EE2,
	141074 - 131105: 0x8C7D,
	141076 - 131105: 0x8ED7,
	141083 - 131105: 0x9C4D,
	141087 - 131105: 0x96A3,
	141098 - 131105: 0x9B51,
	141173 - 131105: 0x8AC3,
	141185 - 131105: 0x96AA,
	141206 - 131105: 0x8CE2,
	141236 - 131105: 0xFC68,
	141237 - 131105: 0x8B6D,
	141261 - 131105: 0xFD67,
	141315 - 131105: 0x8AE9,
	141407 - 131105: 0xFCA1,
	141408 - 131105: 0x936C,
	141425 - 131105: 0x9B52,
	141485 - 131105: 0xFE70,
	141505 - 131105: 0xFCA8,
	141559 - 131105: 0xFCE9,
	141606 - 131105: 0x9CB4,
	141625 - 131105: 0x8AEA,
	141647 - 131105: 0x9B53,
	141671 - 131105: 0x9B55,
	141675 - 131105: 0x96AB,
	141696 - 131105: 0xFCA7,
	141715 - 131105: 0x9B56,
	141926 - 131105: 0x8ABC,
	142031 - 131105: 0x8ACB,
	142037 - 131105: 0x9B57,
	142054 - 131105: 0x89CD,
	142056 - 131105: 0x9B59,
	142094 - 131105: 0x9B5B,
	142114 - 131105: 0x93A5,
	142143 - 131105: 0x9B5D,
	142147 - 131105: 0x9E4F,
	142186 - 131105: 0x93A3,
	142282 - 131105: 0x8A7B,
	142286 - 131105: 0x8B42,
	142374 - 131105: 0x9750,
	142375 - 131105: 0x8FB3,
	142392 - 131105: 0x8A50,
	142412 - 131105: 0x9B60,
	142417 - 131105: 0x8B45,
	142421 - 131105: 0x8B46,
	142434 - 131105: 0x9DFE,
	142472 - 131105: 0x9B62,
	142491 - 131105: 0x937B,
	142497 - 131105: 0x93B1,
	142505 - 131105: 0x8A60,
	142514 - 131105: 0x8AD8,
	142519 - 131105: 0x9B63,
	142530 - 131105: 0x8A69,
	142534 - 131105: 0x8A47,
	142537 - 131105: 0x8ACC,
	142599 - 131105: 0x937C,
	142600 - 131105: 0x9B65,
	142610 - 131105: 0x9B66,
	142660 - 131105: 0x8A72,
	142668 - 131105: 0x8A7A,
	142695 - 131105: 0x93AF,
	142733 - 131105: 0x8AB0,
	142741 - 131105: 0x9B68,
	142752 - 131105: 0x9EA3,
	142755 - 131105: 0xFAEC,
	142756 - 131105: 0x8B77,
	142775 - 131105: 0x9B67,
	142830 - 131105: 0x8B59,
	142861 - 131105: 0xFCB1,
	142902 - 131105: 0xFCBB,
	142914 - 131105: 0x9B69,
	142968 - 131105: 0x93A8,
	142987 - 131105: 0x8AE0,
	143027 - 131105: 0x9E51,
	143087 - 131105: 0x8F5F,
	143220 - 131105: 0x9B6A,
	143308 - 131105: 0x9B6B,
	143331 - 131105: 0x97EC,
	143411 - 131105: 0x9B6C,
	143428 - 131105: 0xFE4E,
	143435 - 131105: 0xFDC2,
	143462 - 131105: 0x9B6D,
	143485 - 131105: 0x9167,
	143486 - 131105: 0xFCCC,
	143502 - 131105: 0x93B6,
	143543 - 131105: 0x90E4,
	143548 - 131105: 0x90E5,
	143578 - 131105: 0x9EF2,
	143619 - 131105: 0x93CA,
	143677 - 131105: 0x8BBC,
	143741 - 131105: 0x8F46,
	143746 - 131105: 0x93CF,
	143780 - 131105: 0xFCDB,
	143781 - 131105: 0xFCDC,
	143795 - 131105: 0x93C0,
	143816 - 131105: 0xFCE6,
	143817 - 131105: 0x96E7,
	143850 - 131105: 0x87A7,
	143863 - 131105: 0xFCD8,
	143864 - 131105: 0xFCD9,
	143865 - 131105: 0xFDA6,
	143887 - 131105: 0x93CE,
	143909 - 131105: 0x95F1,
	143919 - 131105: 0x9CE9,
	143921 - 131105: 0xFCE4,
	143922 - 131105: 0x94AF,
	143923 - 131105: 0xFA77,
	143924 - 131105: 0x93CC,
	143958 - 131105: 0x8CE1,
	143966 - 131105: 0x87A9,
	143970 - 131105: 0x905A,
	144001 - 131105: 0x8C54,
	144009 - 131105: 0x93BF,
	144010 - 131105: 0xFB51,
	144043 - 131105: 0x93B9,
	144044 - 131105: 0xFED7,
	144045 - 131105: 0x93B7,
	144082 - 131105: 0x93D9,
	144096 - 131105: 0x93BB,
	144097 - 131105: 0x93DA,
	144128 - 131105: 0x98A3,
	144138 - 131105: 0x90D1,
	144159 - 131105: 0x9B6E,
	144308 - 131105: 0xFA70,
	144332 - 131105: 0x9BEB,
	144350 - 131105: 0x9B6F,
	144358 - 131105: 0xFCFC,
	144372 - 131105: 0x8B40,
	144373 - 131105: 0xA07B,
	144377 - 131105: 0x8CA1,
	144378 - 131105: 0x97F7,
	144382 - 131105: 0x93E2,
	144384 - 131105: 0xFCD6,
	144447 - 131105: 0x9559,
	144464 - 131105: 0x93A6,
	144495 - 131105: 0xFD40,
	144498 - 131105: 0x935F,
	144613 - 131105: 0x97F2,
	144665 - 131105: 0x9C76,
	144688 - 131105: 0x8EF8,
	144721 - 131105: 0x8CEB,
	144730 - 131105: 0x8F47,
	144743 - 131105: 0x9B74,
	144789 - 131105: 0x92B4,
	144793 - 131105: 0x91ED,
	144796 - 131105: 0x96D2,
	144827 - 131105: 0x87D8,
	144845 - 131105: 0xFD46,
	144846 - 131105: 0x8F4F,
	144847 - 131105: 0x9549,
	144883 - 131105: 0x9B75,
	144896 - 131105: 0xFA5C,
	144919 - 131105: 0x8751,
	144922 - 131105: 0x9B79,
	144956 - 131105: 0xFD4B,
	144960 - 131105: 0x96D3,
	144985 - 131105: 0xFD58,
	144991 - 131105: 0x945F,
	145015 - 131105: 0xA0F5,
	145038 - 131105: 0x87C7,
	145054 - 131105: 0x877C,
	145062 - 131105: 0x9243,
	145069 - 131105: 0x97FA,
	145082 - 131105: 0x9DD9,
	145119 - 131105: 0x97F4,
	145134 - 131105: 0x924D,
	145155 - 131105: 0xFD5B,
	145174 - 131105: 0x9B7A,
	145184 - 131105: 0x9ED5,
	145197 - 131105: 0xFAAE,
	145199 - 131105: 0x9CC9,
	145215 - 131105: 0x9258,
	145254 - 131105: 0x8EC8,
	145281 - 131105: 0x94B4,
	145314 - 131105: 0x93E1,
	145340 - 131105: 0x93DF,
	145346 - 131105: 0xFCF0,
	145365 - 131105: 0x93EC,
	145366 - 131105: 0x97F6,
	145367 - 131105: 0x96CF,
	145466 - 131105: 0x93DE,
	145858 - 131105: 0x8ACF,
	146087 - 131105: 0x9BA2,
	146139 - 131105: 0xFD69,
	146158 - 131105: 0x9352,
	146170 - 131105: 0x98A2,
	146202 - 131105: 0x8CE7,
	146266 - 131105: 0xFD6E,
	146531 - 131105: 0x8CA4,
	146585 - 131105: 0xFA7C,
	146586 - 131105: 0x93FA,
	146587 - 131105: 0x907C,
	146613 - 131105: 0x8F67,
	146615 - 131105: 0x9DB7,
	146631 - 131105: 0xA0E9,
	146632 - 131105: 0xFA4E,
	146633 - 131105: 0xFDA1,
	146684 - 131105: 0x9E74,
	146685 - 131105: 0x9FBF,
	146686 - 131105: 0x9ECB,
	146687 - 131105: 0x9BB9,
	146752 - 131105: 0x9DD4,
	146779 - 131105: 0x97B9,
	146814 - 131105: 0x8EF1,
	146831 - 131105: 0x957B,
	146870 - 131105: 0x9ED2,
	146871 - 131105: 0x9753,
	146872 - 131105: 0x96A4,
	146873 - 131105: 0x8FBE,
	146874 - 131105: 0x94D9,
	146875 - 131105: 0x9058,
	146876 - 131105: 0xFD79,
	146877 - 131105: 0xFD7B,
	146915 - 131105: 0x8EDA,
	146936 - 131105: 0x8EFA,
	146950 - 131105: 0x8762,
	146961 - 131105: 0x9BA5,
	146988 - 131105: 0x9ED9,
	146989 - 131105: 0x97D4,
	146990 - 131105: 0x90BB,
	146991 - 131105: 0xFDBC,
	146992 - 131105: 0xFDC6,
	146993 - 131105: 0x9248,
	147001 - 131105: 0x92B5,
	147080 - 131105: 0x9DC1,
	147081 - 131105: 0x92B9,
	147082 - 131105: 0x92A6,
	147083 - 131105: 0x8F4B,
	147129 - 131105: 0x9BA6,
	147135 - 131105: 0x92B6,
	147159 - 131105: 0x8E40,
	147191 - 131105: 0x9ED8,
	147192 - 131105: 0x945E,
	147193 - 131105: 0x985F,
	147194 - 131105: 0x94CE,
	147195 - 131105: 0x924A,
	147196 - 131105: 0xFD70,
	147253 - 131105: 0x9467,
	147265 - 131105: 0x8DEC,
	147274 - 131105: 0x9BD8,
	147297 - 131105: 0x8763,
	147327 - 131105: 0x9448,
	147328 - 131105: 0xFAC1,
	147329 - 131105: 0x9CF7,
	147330 - 131105: 0xFDBE,
	147343 - 131105: 0x8FDA,
	147380 - 131105: 0xFDD9,
	147383 - 131105: 0xFC7E,
	147392 - 131105: 0x93F9,
	147397 - 131105: 0xFA43,
	147435 - 131105: 0xFAEB,
	147436 - 131105: 0xFAC3,
	147437 - 131105: 0x97D3,
	147438 - 131105: 0x95F9,
	147439 - 131105: 0x9C48,
	147440 - 131105: 0xFDD8,
	147473 - 131105: 0xA0D8,
	147513 - 131105: 0xFDD7,
	147514 - 131105: 0xFB4A,
	147515 - 131105: 0x9BAF,
	147516 - 131105: 0x944B,
	147517 - 131105: 0xFDC9,
	147543 - 131105: 0x8EAC,
	147589 - 131105: 0xFDB2,
	147595 - 131105: 0x925A,
	147596 - 131105: 0xFCBD,
	147597 - 131105: 0x92D9,
	147601 - 131105: 0xFDD5,
	147657 - 131105: 0x92DD,
	147681 - 131105: 0x9259,
	147692 - 131105: 0x8CF0,
	147716 - 131105: 0x96BA,
	147727 - 131105: 0x925B,
	147737 - 131105: 0x9BAB,
	147775 - 131105: 0xFDDA,
	147776 - 131105: 0xFDDE,
	147780 - 131105: 0xFDD3,
	147790 - 131105: 0x8C46,
	147797 - 131105: 0xFDD6,
	147798 - 131105: 0xFDDC,
	147799 - 131105: 0xFDDD,
	147804 - 131105: 0x90FE,
	147807 - 131105: 0xFEA1,
	147809 - 131105: 0x87A5,
	147831 - 131105: 0x8BAD,
	147834 - 131105: 0x9CD8,
	147875 - 131105: 0x9E6D,
	147876 - 131105: 0xFD7C,
	147877 - 131105: 0xFB61,
	147884 - 131105: 0x96F8,
	147893 - 131105: 0x96F0,
	147917 - 131105: 0xFCF4,
	147938 - 131105: 0xFE60,
	147964 - 131105: 0x9852,
	147995 - 131105: 0x964F,
	148043 - 131105: 0x916E,
	148054 - 131105: 0x986D,
	148057 - 131105: 0x9864,
	148086 - 131105: 0x9453,
	148087 - 131105: 0xFDEC,
	148088 - 131105: 0xFB78,
	148100 - 131105: 0x95BA,
	148115 - 131105: 0x985D,
	148117 - 131105: 0x92F9,
	148133 - 131105: 0x985A,
	148159 - 131105: 0x8750,
	148161 - 131105: 0xFDF6,
	148169 - 131105: 0x93D0,
	148170 - 131105: 0x9862,
	148206 - 131105: 0x9BAD,
	148218 - 131105: 0x974F,
	148237 - 131105: 0x9BAE,
	148250 - 131105: 0x9452,
	148276 - 131105: 0x9BB0,
	148296 - 131105: 0x91D2,
	148322 - 131105: 0x97EA,
	148323 - 131105: 0xFB6B,
	148324 - 131105: 0x91B1,
	148325 - 131105: 0xFDF3,
	148364 - 131105: 0x92CB,
	148374 - 131105: 0x9BB1,
	148380 - 131105: 0xFCEC,
	148413 - 131105: 0x986B,
	148417 - 131105: 0x9751,
	148457 - 131105: 0x9871,
	148458 - 131105: 0x95EF,
	148466 - 131105: 0x9EF3,
	148472 - 131105: 0x91E8,
	148484 - 131105: 0x9BBA,
	148533 - 131105: 0xFB4C,
	148534 - 131105: 0x926A,
	148570 - 131105: 0xFDF8,
	148571 - 131105: 0x9861,
	148595 - 131105: 0x91E7,
	148615 - 131105: 0x93ED,
	148616 - 131105: 0x9744,
	148665 - 131105: 0x91E1,
	148668 - 131105: 0xFBF5,
	148686 - 131105: 0x9869,
	148691 - 131105: 0x8A62,
	148694 - 131105: 0x9BBB,
	148741 - 131105: 0x8CA8,
	148769 - 131105: 0x9C55,
	148856 - 131105: 0x8E77,
	148936 - 131105: 0x8AB2,
	149016 - 131105: 0x9EBC,
	149034 - 131105: 0x93E6,
	149093 - 131105: 0x93A2,
	149108 - 131105: 0x9BBD,
	149143 - 131105: 0x94B3,
	149204 - 131105: 0x937D,
	149254 - 131105: 0x9E66,
	149285 - 131105: 0x9459,
	149295 - 131105: 0x9BBF,
	149391 - 131105: 0x9458,
	149472 - 131105: 0x9EA5,
	149522 - 131105: 0x9BC7,
	149539 - 131105: 0xFE54,
	149634 - 131105: 0x8E74,
	149737 - 131105: 0x8BD6,
	149744 - 131105: 0x94B6,
	149745 - 131105: 0xFD74,
	149746 - 131105: 0x98C0,
	149747 - 131105: 0x94A5,
	149755 - 131105: 0x9BC8,
	149759 - 131105: 0x95ED,
	149760 - 131105: 0xFD7E,
	149761 - 131105: 0xFBEB,
	149772 - 131105: 0xFD7D,
	149782 - 131105: 0x976F,
	149783 - 131105: 0x9461,
	149785 - 131105: 0x9FC1,
	149807 - 131105: 0x95D7,
	149811 - 131105: 0xFA52,
	149812 - 131105: 0x9C58,
	149822 - 131105: 0x9F68,
	149823 - 131105: 0x9BE7,
	149824 - 131105: 0xFCCE,
	149825 - 131105: 0x96E8,
	149826 - 131105: 0xFA49,
	149827 - 131105: 0x97A1,
	149858 - 131105: 0x954D,
	149859 - 131105: 0x9EF8,
	149876 - 131105: 0xFE49,
	149877 - 131105: 0x91CE,
	149878 - 131105: 0x9771,
	149883 - 131105: 0x8CCF,
	149887 - 131105: 0xFDB1,
	149890 - 131105: 0xFC6E,
	149896 - 131105: 0x9CF2,
	149897 - 131105: 0x93B8,
	149898 - 131105: 0x9043,
	149899 - 131105: 0x9759,
	149900 - 131105: 0x94D7,
	149901 - 131105: 0xFE66,
	149902 - 131105: 0x947D,
	149903 - 131105: 0xFC6F,
	149908 - 131105: 0x9246,
	149924 - 131105: 0xFA6D,
	149927 - 131105: 0x8EF7,
	149929 - 131105: 0xFBB7,
	149931 - 131105: 0x947C,
	149932 - 131105: 0x92CD,
	149933 - 131105: 0x97B2,
	149943 - 131105: 0xFE65,
	149944 - 131105: 0x967E,
	149945 - 131105: 0x9758,
	149946 - 131105: 0x9B77,
	149947 - 131105: 0x91CF,
	149957 - 131105: 0x94A4,
	149968 - 131105: 0x9CAD,
	149978 - 131105: 0x8BAB,
	149982 - 131105: 0x96D5,
	149983 - 131105: 0xFCB3,
	149987 - 131105: 0x93AE,
	149989 - 131105: 0x976D,
	149996 - 131105: 0x9446,
	149997 - 131105: 0x95F7,
	150006 - 131105: 0x9C46,
	150007 - 131105: 0x955B,
	150008 - 131105: 0x91D1,
	150009 - 131105: 0x94F4,
	150011 - 131105: 0xFE67,
	150030 - 131105: 0x92A5,
	150034 - 131105: 0xFEDF,
	150035 - 131105: 0x8CAB,
	150037 - 131105: 0x9BC9,
	150049 - 131105: 0xFCED,
	150050 - 131105: 0xFDFA,
	150051 - 131105: 0xFCC8,
	150052 - 131105: 0xFE62,
	150053 - 131105: 0x91FC,
	150054 - 131105: 0xFE6B,
	150055 - 131105: 0xFDF9,
	150056 - 131105: 0xFCC7,
	150057 - 131105: 0x914E,
	150058 - 131105: 0x9CB8,
	150078 - 131105: 0x9767,
	150082 - 131105: 0x95EE,
	150085 - 131105: 0x9BB2,
	150090 - 131105: 0x9460,
	150094 - 131105: 0x94A2,
	150095 - 131105: 0x9875,
	150096 - 131105: 0x97AC,
	150097 - 131105: 0x91D3,
	150109 - 131105: 0x987B,
	150117 - 131105: 0x8EEB,
	150118 - 131105: 0x976A,
	150119 - 131105: 0x965E,
	150129 - 131105: 0x97EB,
	150135 - 131105: 0x9FF9,
	150136 - 131105: 0x95F8,
	150137 - 131105: 0xFEA2,
	150138 - 131105: 0x8FE6,
	150156 - 131105: 0xFE7E,
	150163 - 131105: 0x9DA4,
	150164 - 131105: 0x9768,
	150165 - 131105: 0x8EEC,
	150166 - 131105: 0x94BD,
	150180 - 131105: 0x945B,
	150181 - 131105: 0x9CF6,
	150182 - 131105: 0xFAA7,
	150183 - 131105: 0x9BD9,
	150193 - 131105: 0xFA5D,
	150194 - 131105: 0x9656,
	150195 - 131105: 0x9762,
	150202 - 131105: 0x94BA,
	150203 - 131105: 0xA04F,
	150204 - 131105: 0x92D8,
	150208 - 131105: 0x9BCB,
	150215 - 131105: 0x94BB,
	150218 - 131105: 0x9D5F,
	150225 - 131105: 0x90CF,
	150239 - 131105: 0x9465,
	150242 - 131105: 0x9F4C,
	150249 - 131105: 0x90D8,
	150287 - 131105: 0x8D5B,
	150382 - 131105: 0x9EBE,
	150517 - 131105: 0xFB6D,
	150537 - 131105: 0x95CA,
	150686 - 131105: 0x9DC2,
	150687 - 131105: 0x97F8,
	150729 - 131105: 0x8FFC,
	150745 - 131105: 0x9473,
	150790 - 131105: 0x9474,
	150803 - 131105: 0xFEB7,
	150968 - 131105: 0x8A4B,
	151018 - 131105: 0x8A55,
	151019 - 131105: 0x8B69,
	151099 - 131105: 0x8ADC,
	151120 - 131105: 0x8B76,
	151205 - 131105: 0x9BCE,
	151207 - 131105: 0x8A68,
	151310 - 131105: 0xA0F8,
	151388 - 131105: 0x98DF,
	151426 - 131105: 0xFEB5,
	151430 - 131105: 0x9BCF,
	151447 - 131105: 0x96FB,
	151450 - 131105: 0x9BFB,
	151465 - 131105: 0x9ECE,
	151480 - 131105: 0x8EE5,
	151490 - 131105: 0x9E7B,
	151596 - 131105: 0x9BD2,
	151634 - 131105: 0x8AA5,
	151709 - 131105: 0xFECE,
	151851 - 131105: 0x8A45,
	151880 - 131105: 0x9DFC,
	151933 - 131105: 0xFECF,
	151934 - 131105: 0x8BA5,
	152013 - 131105: 0x8C4A,
	152035 - 131105: 0x8AEC,
	152038 - 131105: 0xFCE0,
	152039 - 131105: 0x94AD,
	152096 - 131105: 0xFED5,
	152097 - 131105: 0x94AC,
	152144 - 131105: 0xFC5A,
	152217 - 131105: 0x9BD6,
	152263 - 131105: 0x8A6F,
	152280 - 131105: 0x8BA9,
	152334 - 131105: 0x8E5F,
	152337 - 131105: 0x9DCB,
	152339 - 131105: 0xFCE7,
	152601 - 131105: 0x9BD7,
	152613 - 131105: 0x93C8,
	152623 - 131105: 0x91F0,
	152624 - 131105: 0x8FE0,
	152646 - 131105: 0x9BDB,
	152684 - 131105: 0x90ED,
	152686 - 131105: 0x9BDC,
	152730 - 131105: 0x8D53,
	152881 - 131105: 0xA0EC,
	152885 - 131105: 0x98FA,
	152895 - 131105: 0x9BE0,
	152923 - 131105: 0x93C7,
	152924 - 131105: 0x9249,
	152925 - 131105: 0x96E1,
	152926 - 131105: 0x9BE2,
	152930 - 131105: 0x9BE4,
	152933 - 131105: 0x8FE1,
	152934 - 131105: 0x9BE5,
	152961 - 131105: 0x94C0,
	152964 - 131105: 0x93C3,
	152975 - 131105: 0x93C5,
	153017 - 131105: 0x9079,
	153045 - 131105: 0x977B,
	153051 - 131105: 0x907E,
	153056 - 131105: 0xFEE6,
	153093 - 131105: 0xFE46,
	153141 - 131105: 0x9DB8,
	153169 - 131105: 0x9270,
	153219 - 131105: 0x95A8,
	153237 - 131105: 0x8CB0,
	153315 - 131105: 0x94C8,
	153334 - 131105: 0x98B9,
	153350 - 131105: 0x9140,
	153373 - 131105: 0xFCBE,
	153381 - 131105: 0x9157,
	153405 - 131105: 0x8BB2,
	153458 - 131105: 0xFADF,
	153543 - 131105: 0x9BE6,
	153567 - 131105: 0x9643,
	153568 - 131105: 0x8E44,
	153569 - 131105: 0x9C4F,
	153687 - 131105: 0xFEF4,
	153693 - 131105: 0x9BE8,
	153714 - 131105: 0x93DC,
	153800 - 131105: 0x966F,
	153822 - 131105: 0x87A1,
	153825 - 131105: 0x8E4A,
	153859 - 131105: 0x9BED,
	153926 - 131105: 0x92F6,
	153942 - 131105: 0x9DB9,
	154028 - 131105: 0x8E4E,
	154060 - 131105: 0xFBCF,
	154196 - 131105: 0x8760,
	154261 - 131105: 0x9EC2,
	154268 - 131105: 0x94E5,
	154286 - 131105: 0x9BF0,
	154287 - 131105: 0x94E4,
	154345 - 131105: 0x9551,
	154484 - 131105: 0x8BBB,
	154505 - 131105: 0x9BF1,
	154547 - 131105: 0x94F0,
	154548 - 131105: 0x8E64,
	154566 - 131105: 0x94EA,
	154596 - 131105: 0x8F61,
	154600 - 131105: 0x9B64,
	154625 - 131105: 0x8E5B,
	154630 - 131105: 0x9BF2,
	154657 - 131105: 0x9FBE,
	154698 - 131105: 0x9DC9,
	154725 - 131105: 0x8E6C,
	154769 - 131105: 0x8F73,
	154788 - 131105: 0x8CAF,
	154816 - 131105: 0x8F75,
	154817 - 131105: 0x8E71,
	154878 - 131105: 0x8E60,
	154912 - 131105: 0x8E6A,
	154928 - 131105: 0x8C4C,
	154947 - 131105: 0x9552,
	155033 - 131105: 0x87CF,
	155065 - 131105: 0x87C0,
	155150 - 131105: 0x9554,
	155209 - 131105: 0x8AD4,
	155265 - 131105: 0x9DBB,
	155266 - 131105: 0x9543,
	155267 - 131105: 0x92FE,
	155302 - 131105: 0x94F2,
	155324 - 131105: 0x94F1,
	155351 - 131105: 0xA0EA,
	155352 - 131105: 0x9DD2,
	155418 - 131105: 0xA0B1,
	155467 - 131105: 0x91F8,
	155617 - 131105: 0x9462,
	155618 - 131105: 0x9BA4,
	155681 - 131105: 0x877D,
	155689 - 131105: 0x8EAD,
	155720 - 131105: 0x9EAD,
	155748 - 131105: 0x96D0,
	155779 - 131105: 0xFEEE,
	155799 - 131105: 0x8AB4,
	155812 - 131105: 0x9757,
	155813 - 131105: 0x8A77,
	155906 - 131105: 0x9BF7,
	155937 - 131105: 0x8EB5,
	155993 - 131105: 0xA06D,
	155994 - 131105: 0x8EB6,
	155995 - 131105: 0x9756,
	155996 - 131105: 0x9540,
	156077 - 131105: 0xA0F3,
	156078 - 131105: 0x94BE,
	156082 - 131105: 0x9BFA,
	156125 - 131105: 0xFDDF,
	156248 - 131105: 0x9DBC,
	156257 - 131105: 0x94FE,
	156266 - 131105: 0x8BDB,
	156267 - 131105: 0xA0FE,
	156368 - 131105: 0x8EC0,
	156469 - 131105: 0x9F47,
	156491 - 131105: 0x8BDE,
	156492 - 131105: 0xA0FB,
	156497 - 131105: 0x8EC3,
	156606 - 131105: 0x9649,
	156661 - 131105: 0xFEC2,
	156664 - 131105: 0x954C,
	156674 - 131105: 0x9BFD,
	156688 - 131105: 0x90CC,
	156689 - 131105: 0x9C60,
	156690 - 131105: 0x954B,
	156746 - 131105: 0x9BFE,
	156777 - 131105: 0x9C70,
	156804 - 131105: 0x9C43,
	156808 - 131105: 0x9C47,
	156809 - 131105: 0x8ECC,
	156813 - 131105: 0x8E54,
	156824 - 131105: 0x8EE4,
	156946 - 131105: 0x9C49,
	157042 - 131105: 0x8B5E,
	157088 - 131105: 0x955E,
	157101 - 131105: 0x955C,
	157119 - 131105: 0x9C4B,
	157202 - 131105: 0x8BE1,
	157222 - 131105: 0x8ED9,
	157359 - 131105: 0x9DB4,
	157361 - 131105: 0x925F,
	157365 - 131105: 0x9C4C,
	157402 - 131105: 0x8AA1,
	157416 - 131105: 0x8EDB,
	157436 - 131105: 0x9C56,
	157462 - 131105: 0x8AA2,
	157505 - 131105: 0x9754,
	157593 - 131105: 0x9C5E,
	157619 - 131105: 0x9ED4,
	157620 - 131105: 0x9568,
	157644 - 131105: 0xA0C3,
	157724 - 131105: 0x8AE6,
	157766 - 131105: 0xA0F7,
	157790 - 131105: 0x9C61,
	157806 - 131105: 0x9C5F,
	157832 - 131105: 0xFC4D,
	157834 - 131105: 0x9E5B,
	157843 - 131105: 0x9E69,
	157895 - 131105: 0x9C63,
	157966 - 131105: 0xFEC7,
	157969 - 131105: 0xFEC6,
	157990 - 131105: 0x9C67,
	158009 - 131105: 0x9C69,
	158033 - 131105: 0x8BE2,
	158120 - 131105: 0x9165,
	158133 - 131105: 0x9CE7,
	158194 - 131105: 0x8A54,
	158202 - 131105: 0x9C6C,
	158253 - 131105: 0x9C6E,
	158254 - 131105: 0xFE5D,
	158260 - 131105: 0x9C73,
	158274 - 131105: 0x956A,
	158289 - 131105: 0x956D,
	158290 - 131105: 0x8EF0,
	158469 - 131105: 0x8F4D,
	158474 - 131105: 0x8EF6,
	158483 - 131105: 0xFABC,
	158485 - 131105: 0x8CD5,
	158499 - 131105: 0x875E,
	158504 - 131105: 0xFBDA,
	158544 - 131105: 0x8B4C,
	158545 - 131105: 0xFD75,
	158546 - 131105: 0x9BDD,
	158547 - 131105: 0xFAF5,
	158555 - 131105: 0x9C74,
	158581 - 131105: 0x9545,
	158594 - 131105: 0x96C6,
	158614 - 131105: 0x8F6A,
	158615 - 131105: 0x8F4E,
	158621 - 131105: 0x9C78,
	158643 - 131105: 0xFA55,
	158656 - 131105: 0x97E4,
	158711 - 131105: 0x9C41,
	158753 - 131105: 0x925C,
	158784 - 131105: 0x96FA,
	158785 - 131105: 0x8CF6,
	158790 - 131105: 0x8D4D,
	158846 - 131105: 0xFB66,
	158847 - 131105: 0x8E65,
	158848 - 131105: 0x9849,
	158849 - 131105: 0xFBA8,
	158850 - 131105: 0x9842,
	158884 - 131105: 0x9C7A,
	158903 - 131105: 0x97FB,
	158904 - 131105: 0x90CA,
	158909 - 131105: 0x9C5B,
	158912 - 131105: 0x974D,
	158915 - 131105: 0x8ED3,
	158929 - 131105: 0x9561,
	159010 - 131105: 0x9F4B,
	159011 - 131105: 0x9FB5,
	159012 - 131105: 0x93D2,
	159013 - 131105: 0xFDAA,
	159014 - 131105: 0x9840,
	159015 - 131105: 0x9146,
	159016 - 131105: 0x9867,
	159017 - 131105: 0xFA5A,
	159018 - 131105: 0xFBA9,
	159057 - 131105: 0x9841,
	159092 - 131105: 0x8CD3,
	159136 - 131105: 0xFCFD,
	159137 - 131105: 0xFDAB,
	159138 - 131105: 0x91BD,
	159139 - 131105: 0x8F4C,
	159140 - 131105: 0x96C9,
	159141 - 131105: 0x8F55,
	159142 - 131105: 0xFBAE,
	159143 - 131105: 0x956F,
	159150 - 131105: 0x9C7D,
	159196 - 131105: 0xA0F0,
	159210 - 131105: 0x946F,
	159211 - 131105: 0xFDAC,
	159216 - 131105: 0x96CB,
	159232 - 131105: 0x96CE,
	159237 - 131105: 0xA056,
	159239 - 131105: 0x9CE1,
	159250 - 131105: 0x96C4,
	159298 - 131105: 0x8F5E,
	159299 - 131105: 0x8F6C,
	159300 - 131105: 0x8EA3,
	159301 - 131105: 0xFBB3,
	159342 - 131105: 0xFC53,
	159346 - 131105: 0xFDB3,
	159351 - 131105: 0x8F6B,
	159364 - 131105: 0x96CA,
	159368 - 131105: 0x87CD,
	159371 - 131105: 0x8753,
	159385 - 131105: 0x8F79,
	159440 - 131105: 0x9E6F,
	159441 - 131105: 0xA0C5,
	159442 - 131105: 0xFC78,
	159443 - 131105: 0x8E42,
	159444 - 131105: 0x8F5A,
	159445 - 131105: 0x90C2,
	159446 - 131105: 0x8EA5,
	159447 - 131105: 0x9061,
	159526 - 131105: 0x924F,
	159603 - 131105: 0x9373,
	159604 - 131105: 0xFDB5,
	159647 - 131105: 0xFECC,
	159649 - 131105: 0xFBBD,
	159678 - 131105: 0x8CD6,
	159710 - 131105: 0x9843,
	159711 - 131105: 0x96C5,
	159758 - 131105: 0x89BC,
	159819 - 131105: 0x9CA3,
	159826 - 131105: 0x924B,
	159827 - 131105: 0x984A,
	159880 - 131105: 0x8FA4,
	159917 - 131105: 0xA0F1,
	159918 - 131105: 0x9EFB,
	159919 - 131105: 0x9CD2,
	159949 - 131105: 0x8FA7,
	159954 - 131105: 0x8754,
	159992 - 131105: 0xFC5C,
	160009 - 131105: 0x9845,
	160012 - 131105: 0x9046,
	160013 - 131105: 0x8CD1,
	160038 - 131105: 0xFEFA,
	160039 - 131105: 0x9560,
	160100 - 131105: 0x9F48,
	160101 - 131105: 0x9247,
	160117 - 131105: 0x90FB,
	160205 - 131105: 0x9CA4,
	160283 - 131105: 0x9571,
	160359 - 131105: 0x8745,
	160384 - 131105: 0x9CA6,
	160389 - 131105: 0x9CA7,
	160395 - 131105: 0x9CAA,
	160434 - 131105: 0x9ED3,
	160438 - 131105: 0x9E70,
	160486 - 131105: 0x9CAC,
	160594 - 131105: 0x8752,
	160666 - 131105: 0x8FAE,
	160767 - 131105: 0x8D50,
	160802 - 131105: 0x957D,
	160848 - 131105: 0x9CB0,
	160900 - 131105: 0x97B6,
	160902 - 131105: 0xA0BD,
	161140 - 131105: 0x8ADF,
	161187 - 131105: 0x9EAA,
	161248 - 131105: 0x8FBD,
	161252 - 131105: 0x8FBF,
	161277 - 131105: 0x9369,
	161278 - 131105: 0x9BA7,
	161287 - 131105: 0xC8A4,
	161292 - 131105: 0xFEEA,
	161330 - 131105: 0x9BE1,
	161337 - 131105: 0x8B41,
	161365 - 131105: 0x9DB6,
	161366 - 131105: 0xA0EB,
	161367 - 131105: 0x9BA3,
	161428 - 131105: 0x8BA1,
	161551 - 131105: 0x8FC8,
	161589 - 131105: 0x894C,
	161590 - 131105: 0x9860,
	161601 - 131105: 0x94C7,
	161630 - 131105: 0x8B58,
	161668 - 131105: 0x95AB,
	161669 - 131105: 0x95AA,
	161740 - 131105: 0x9CC3,
	161880 - 131105: 0x9CC4,
	161904 - 131105: 0x93D6,
	161949 - 131105: 0x9DAC,
	161970 - 131105: 0x8BE6,
	161992 - 131105: 0x8A71,
	162084 - 131105: 0x8FD1,
	162151 - 131105: 0x99D5,
	162170 - 131105: 0x90F4,
	162208 - 131105: 0x8AA3,
	162269 - 131105: 0x9CCE,
	162301 - 131105: 0x9CD4,
	162314 - 131105: 0x9CD5,
	162318 - 131105: 0xFBC8,
	162366 - 131105: 0x9DB3,
	162387 - 131105: 0xFC70,
	162393 - 131105: 0x8FD7,
	162425 - 131105: 0x9B73,
	162436 - 131105: 0xFA5B,
	162493 - 131105: 0x8FD2,
	162494 - 131105: 0x9064,
	162548 - 131105: 0x98B6,
	162566 - 131105: 0x9668,
	162571 - 131105: 0x9CD6,
	162584 - 131105: 0x98BD,
	162616 - 131105: 0x8FDC,
	162617 - 131105: 0xFEF6,
	162618 - 131105: 0x8FD9,
	162632 - 131105: 0x9541,
	162661 - 131105: 0x87CA,
	162799 - 131105: 0x876C,
	162804 - 131105: 0x97F3,
	162834 - 131105: 0x9BF8,
	162924 - 131105: 0x875A,
	162993 - 131105: 0x8748,
	163013 - 131105: 0x874A,
	163119 - 131105: 0x9E6C,
	163155 - 131105: 0x8FF2,
	163156 - 131105: 0x8FEE,
	163174 - 131105: 0x9CD7,
	163187 - 131105: 0x9E6E,
	163204 - 131105: 0x8A40,
	163215 - 131105: 0x8FEF,
	163224 - 131105: 0x8FF4,
	163261 - 131105: 0x8FF5,
	163292 - 131105: 0x95C2,
	163405 - 131105: 0x986A,
	163407 - 131105: 0x97CF,
	163630 - 131105: 0x9EE5,
	163833 - 131105: 0x9E7C,
	163842 - 131105: 0x9041,
	163849 - 131105: 0x9CDB,
	163870 - 131105: 0x9441,
	163875 - 131105: 0x9CE6,
	163876 - 131105: 0x9DB0,
	163912 - 131105: 0x9CEA,
	163971 - 131105: 0x9CED,
	163984 - 131105: 0x9CFA,
	164029 - 131105: 0x8B62,
	164030 - 131105: 0x8A4E,
	164072 - 131105: 0x9CCA,
	164073 - 131105: 0x8A66,
	164084 - 131105: 0x9CFB,
	164142 - 131105: 0x9CFC,
	164175 - 131105: 0x9CFE,
	164189 - 131105: 0x8A53,
	164207 - 131105: 0x9CE5,
	164233 - 131105: 0x9D40,
	164271 - 131105: 0x9D41,
	164284 - 131105: 0x9045,
	164359 - 131105: 0x8B73,
	164376 - 131105: 0x97CA,
	164378 - 131105: 0x9D42,
	164438 - 131105: 0x8A61,
	164476 - 131105: 0x8BAE,
	164507 - 131105: 0x8AD2,
	164557 - 131105: 0x8BA2,
	164578 - 131105: 0x9DF2,
	164614 - 131105: 0x9D43,
	164632 - 131105: 0x9CDF,
	164655 - 131105: 0x9D44,
	164666 - 131105: 0x8ECA,
	164709 - 131105: 0x904E,
	164717 - 131105: 0x8EB3,
	164733 - 131105: 0x9FF5,
	164746 - 131105: 0x9D45,
	164882 - 131105: 0x904F,
	164968 - 131105: 0x9D47,
	164972 - 131105: 0x89CA,
	164979 - 131105: 0x9CB5,
	164994 - 131105: 0xFBFE,
	165121 - 131105: 0x905E,
	165180 - 131105: 0x9063,
	165181 - 131105: 0x9057,
	165228 - 131105: 0x9066,
	165352 - 131105: 0x9BC0,
	165364 - 131105: 0xFCE5,
	165376 - 131105: 0x9162,
	165387 - 131105: 0x9067,
	165413 - 131105: 0x8FA1,
	165435 - 131105: 0x8FA2,
	165546 - 131105: 0x9D48,
	165547 - 131105: 0xFAD3,
	165554 - 131105: 0x8D4F,
	165564 - 131105: 0x905D,
	165592 - 131105: 0x90B9,
	165606 - 131105: 0x906B,
	165647 - 131105: 0x8C5C,
	165651 - 131105: 0x9069,
	165892 - 131105: 0xFE57,
	165931 - 131105: 0xFE55,
	166157 - 131105: 0x87A6,
	166195 - 131105: 0x9073,
	166216 - 131105: 0x9BEF,
	166217 - 131105: 0x9CF0,
	166230 - 131105: 0x9D4B,
	166244 - 131105: 0xFED9,
	166248 - 131105: 0xFEDA,
	166252 - 131105: 0x91E0,
	166253 - 131105: 0x8D43,
	166270 - 131105: 0x91D8,
	166281 - 131105: 0x9646,
	166312 - 131105: 0x9360,
	166314 - 131105: 0xFA53,
	166315 - 131105: 0x9CD3,
	166328 - 131105: 0x9D4E,
	166332 - 131105: 0xFB40,
	166336 - 131105: 0x8DE2,
	166364 - 131105: 0x9442,
	166366 - 131105: 0x9056,
	166369 - 131105: 0x9865,
	166371 - 131105: 0x8C6C,
	166372 - 131105: 0xFA4A,
	166375 - 131105: 0x9D50,
	166376 - 131105: 0x9D52,
	166393 - 131105: 0x95AF,
	166394 - 131105: 0x975A,
	166395 - 131105: 0x9349,
	166396 - 131105: 0x9747,
	166415 - 131105: 0xA0F4,
	166422 - 131105: 0x9778,
	166437 - 131105: 0x8FCF,
	166441 - 131105: 0xFC60,
	166450 - 131105: 0x8C4E,
	166454 - 131105: 0xFC56,
	166468 - 131105: 0x91DC,
	166469 - 131105: 0x9661,
	166470 - 131105: 0x92EC,
	166471 - 131105: 0x935D,
	166472 - 131105: 0x8EDE,
	166473 - 131105: 0x96FE,
	166474 - 131105: 0xFD4F,
	166475 - 131105: 0x95DE,
	166489 - 131105: 0x98B0,
	166490 - 131105: 0xA040,
	166529 - 131105: 0x97BD,
	166530 - 131105: 0x977D,
	166531 - 131105: 0x97F5,
	166554 - 131105: 0x9BAC,
	166555 - 131105: 0xFADA,
	166556 - 131105: 0x92C2,
	166592 - 131105: 0x97B1,
	166598 - 131105: 0x907B,
	166603 - 131105: 0x93FE,
	166604 - 131105: 0x947B,
	166606 - 131105: 0x9777,
	166622 - 131105: 0xFABE,
	166623 - 131105: 0xFD43,
	166624 - 131105: 0x90C6,
	166625 - 131105: 0x90A4,
	166626 - 131105: 0x90A8,
	166627 - 131105: 0x94A9,
	166629 - 131105: 0x90A9,
	166634 - 131105: 0x8C65,
	166652 - 131105: 0x95E0,
	166668 - 131105: 0x907D,
	166675 - 131105: 0x9265,
	166689 - 131105: 0xFDBA,
	166690 - 131105: 0x93C4,
	166699 - 131105: 0xFEED,
	166700 - 131105: 0x9DAB,
	166701 - 131105: 0xA0E3,
	166703 - 131105: 0x9648,
	166726 - 131105: 0x9D53,
	166732 - 131105: 0x8AA9,
	166734 - 131105: 0x9BC5,
	166736 - 131105: 0x965D,
	166755 - 131105: 0x975F,
	166756 - 131105: 0x965F,
	166757 - 131105: 0x966E,
	166758 - 131105: 0xFB5D,
	166764 - 131105: 0x9DB1,
	166799 - 131105: 0xFEA3,
	166809 - 131105: 0x9DB2,
	166812 - 131105: 0x95AE,
	166813 - 131105: 0xFCA3,
	166841 - 131105: 0x8769,
	166850 - 131105: 0xA0A2,
	166853 - 131105: 0x9655,
	166868 - 131105: 0x9D54,
	166871 - 131105: 0x9341,
	166873 - 131105: 0x95AD,
	166874 - 131105: 0x91D5,
	166887 - 131105: 0x977A,
	166888 - 131105: 0xFDFC,
	166889 - 131105: 0x8E47,
	166890 - 131105: 0x93FD,
	166891 - 131105: 0x90A5,
	166892 - 131105: 0x90AC,
	166901 - 131105: 0x95AC,
	166911 - 131105: 0x90AE,
	166915 - 131105: 0xFEA5,
	166921 - 131105: 0x9D56,
	166940 - 131105: 0x97E3,
	166941 - 131105: 0x95E2,
	166947 - 131105: 0x9466,
	166950 - 131105: 0x9647,
	166955 - 131105: 0x91B8,
	166960 - 131105: 0x9CEC,
	166969 - 131105: 0x90AD,
	166971 - 131105: 0x95E3,
	167114 - 131105: 0x8B4F,
	167117 - 131105: 0x8AE3,
	167122 - 131105: 0x8B4D,
	167220 - 131105: 0x95EA,
	167321 - 131105: 0x8B4E,
	167353 - 131105: 0x8CC1,
	167439 - 131105: 0x8BED,
	167478 - 131105: 0x91D9,
	167481 - 131105: 0xA0A4,
	167525 - 131105: 0x95F5,
	167526 - 131105: 0x95F4,
	167575 - 131105: 0x9FB3,
	167596 - 131105: 0xFEAF,
	167602 - 131105: 0xFE72,
	167603 - 131105: 0x927A,
	167641 - 131105: 0xFEAC,
	167655 - 131105: 0x95F3,
	167877 - 131105: 0x9D58,
	168057 - 131105: 0x8D46,
	168072 - 131105: 0x9372,
	168075 - 131105: 0x91C5,
	168083 - 131105: 0x9642,
	168111 - 131105: 0x90CD,
	168112 - 131105: 0x95FE,
	168113 - 131105: 0x9159,
	168128 - 131105: 0x9C65,
	168164 - 131105: 0x97CC,
	168165 - 131105: 0x90CE,
	168172 - 131105: 0x9D59,
	168173 - 131105: 0xFCF5,
	168205 - 131105: 0xFEFD,
	168208 - 131105: 0x9D5B,
	168252 - 131105: 0x9D5C,
	168269 - 131105: 0x937E,
	168283 - 131105: 0x98AC,
	168286 - 131105: 0x9D5E,
	168304 - 131105: 0xFDD0,
	168348 - 131105: 0xFD60,
	168360 - 131105: 0x9CCF,
	168405 - 131105: 0x90DD,
	168427 - 131105: 0x90E0,
	168989 - 131105: 0x90F3,
	168992 - 131105: 0x98B1,
	169011 - 131105: 0x90F0,
	169023 - 131105: 0x93BD,
	169032 - 131105: 0x95B7,
	169168 - 131105: 0x9F46,
	169177 - 131105: 0x8E4B,
	169178 - 131105: 0x9658,
	169189 - 131105: 0x8A4C,
	169191 - 131105: 0x9D63,
	169374 - 131105: 0x9ECF,
	169392 - 131105: 0x9D65,
	169400 - 131105: 0x9D66,
	169431 - 131105: 0x965A,
	169449 - 131105: 0x9D64,
	169460 - 131105: 0x8A6C,
	169760 - 131105: 0x8AD9,
	169778 - 131105: 0x9D67,
	169940 - 131105: 0x8A70,
	170000 - 131105: 0x8BF3,
	170071 - 131105: 0x9150,
	170148 - 131105: 0x9CC1,
	170193 - 131105: 0x9D68,
	170218 - 131105: 0x93A7,
	170225 - 131105: 0x9674,
	170234 - 131105: 0x8CFD,
	170243 - 131105: 0xA0EF,
	170245 - 131105: 0x9151,
	170287 - 131105: 0x96C1,
	170309 - 131105: 0x8777,
	170311 - 131105: 0x8C64,
	170312 - 131105: 0x9676,
	170313 - 131105: 0x9D69,
	170333 - 131105: 0xFCA4,
	170346 - 131105: 0x9D6A,
	170397 - 131105: 0x924E,
	170435 - 131105: 0x9D6B,
	170441 - 131105: 0x9BC1,
	170536 - 131105: 0x9D6C,
	170573 - 131105: 0x8A65,
	170757 - 131105: 0x915D,
	170766 - 131105: 0x9D6D,
	170965 - 131105: 0x915A,
	171123 - 131105: 0x8C42,
	171181 - 131105: 0x9CC0,
	171326 - 131105: 0x916A,
	171354 - 131105: 0x9D6E,
	171388 - 131105: 0x9EA6,
	171416 - 131105: 0x9DCD,
	171419 - 131105: 0x9D6F,
	171510 - 131105: 0x89BB,
	171526 - 131105: 0x9EF9,
	171565 - 131105: 0x96B4,
	171624 - 131105: 0x9172,
	171692 - 131105: 0x9EC8,
	171696 - 131105: 0x8771,
	171715 - 131105: 0x8B55,
	171768 - 131105: 0x9D71,
	171811 - 131105: 0x9D72,
	171824 - 131105: 0x9ECC,
	171959 - 131105: 0x9174,
	171998 - 131105: 0x9ED0,
	172052 - 131105: 0x905C,
	172167 - 131105: 0x8ED2,
	172217 - 131105: 0x91A8,
	172257 - 131105: 0x9177,
	172269 - 131105: 0x96BF,
	172275 - 131105: 0x96C0,
	172280 - 131105: 0x8FB1,
	172286 - 131105: 0x96B7,
	172295 - 131105: 0x8C55,
	172323 - 131105: 0x9178,
	172339 - 131105: 0x89BE,
	172340 - 131105: 0x917C,
	172368 - 131105: 0xFB77,
	172434 - 131105: 0x9175,
	172435 - 131105: 0x91A3,
	172459 - 131105: 0x9176,
	172468 - 131105: 0x96BE,
	172469 - 131105: 0x8D49,
	172511 - 131105: 0x9179,
	172533 - 131105: 0x96B6,
	172576 - 131105: 0x91A4,
	172595 - 131105: 0x91A6,
	172691 - 131105: 0x9D75,
	172703 - 131105: 0x9052,
	172722 - 131105: 0xA045,
	172724 - 131105: 0x91A9,
	172726 - 131105: 0x98AA,
	172730 - 131105: 0x8C5F,
	172733 - 131105: 0x8BAA,
	172767 - 131105: 0x9CDD,
	172799 - 131105: 0x9D77,
	172881 - 131105: 0x8756,
	172969 - 131105: 0x8940,
	173108 - 131105: 0x9EEC,
	173147 - 131105: 0x93AA,
	173510 - 131105: 0x9478,
	173515 - 131105: 0x9D7A,
	173569 - 131105: 0x8AC9,
	173618 - 131105: 0x8B4B,
	173642 - 131105: 0x9FEC,
	173659 - 131105: 0x8AE2,
	173737 - 131105: 0x9E75,
}

const encode1Low, encode1High = 11904, 40908

var encode1 = [...]uint16{
	11904 - 11904: 0xC8D6,
	11908 - 11904: 0xC8D7,
	11910 - 11904: 0xC8D8,
	11911 - 11904: 0xC8D9,
	11912 - 11904: 0xC8DA,
	11914 - 11904: 0xC8DB,
	11916 - 11904: 0xC8DC,
	11917 - 11904: 0xC8DD,
	11925 - 11904: 0xC8DE,
	11932 - 11904: 0xC8DF,
	11933 - 11904: 0xC8E0,
	11941 - 11904: 0xC8E1,
	11943 - 11904: 0xC8E2,
	11946 - 11904: 0xC8E3,
	11948 - 11904: 0xC8E4,
	11950 - 11904: 0xC8E5,
	11958 - 11904: 0xC8E6,
	11964 - 11904: 0xC8E7,
	11966 - 11904: 0xC8E8,
	11974 - 11904: 0xC8E9,
	11978 - 11904: 0xC8EA,
	11980 - 11904: 0xC8EB,
	11981 - 11904: 0xC8EC,
	11983 - 11904: 0xC8ED,
	11990 - 11904: 0xC8EE,
	11991 - 11904: 0xC8EF,
	11998 - 11904: 0xC8F0,
	12003 - 11904: 0xC8F1,
	12083 - 11904: 0xC6CD,
	12288 - 11904: 0xA140,
	12289 - 11904: 0xA142,
	12290 - 11904: 0xA143,
	12291 - 11904: 0xC6DE,
	12293 - 11904: 0xC6E0,
	12294 - 11904: 0xC6E1,
	12295 - 11904: 0xC6E2,
	12296 - 11904: 0xA171,
	12297 - 11904: 0xA172,
	12298 - 11904: 0xA16D,
	12299 - 11904: 0xA16E,
	12300 - 11904: 0xA175,
	12301 - 11904: 0xA176,
	12302 - 11904: 0xA179,
	12303 - 11904: 0xA17A,
	12304 - 11904: 0xA169,
	12305 - 11904: 0xA16A,
	12306 - 11904: 0xA245,
	12308 - 11904: 0xA165,
	12309 - 11904: 0xA166,
	12317 - 11904: 0xA1A9,
	12318 - 11904: 0xA1AA,
	12321 - 11904: 0xA2C3,
	12322 - 11904: 0xA2C4,
	12323 - 11904: 0xA2C5,
	12324 - 11904: 0xA2C6,
	12325 - 11904: 0xA2C7,
	12326 - 11904: 0xA2C8,
	12327 - 11904: 0xA2C9,
	12328 - 11904: 0xA2CA,
	12329 - 11904: 0xA2CB,
	12353 - 11904: 0xC6E7,
	12354 - 11904: 0xC6E8,
	12355 - 11904: 0xC6E9,
	12356 - 11904: 0xC6EA,
	12357 - 11904: 0xC6EB,
	12358 - 11904: 0xC6EC,
	12359 - 11904: 0xC6ED,
	12360 - 11904: 0xC6EE,
	12361 - 11904: 0xC6EF,
	12362 - 11904: 0xC6F0,
	12363 - 11904: 0xC6F1,
	12364 - 11904: 0xC6F2,
	12365 - 11904: 0xC6F3,
	12366 - 11904: 0xC6F4,
	12367 - 11904: 0xC6F5,
	12368 - 11904: 0xC6F6,
	12369 - 11904: 0xC6F7,
	12370 - 11904: 0xC6F8,
	12371 - 11904: 0xC6F9,
	12372 - 11904: 0xC6FA,
	12373 - 11904: 0xC6FB,
	12374 - 11904: 0xC6FC,
	12375 - 11904: 0xC6FD,
	12376 - 11904: 0xC6FE,
	12377 - 11904: 0xC740,
	12378 - 11904: 0xC741,
	12379 - 11904: 0xC742,
	12380 - 11904: 0xC743,
	12381 - 11904: 0xC744,
	12382 - 11904: 0xC745,
	12383 - 11904: 0xC746,
	12384 - 11904: 0xC747,
	12385 - 11904: 0xC748,
	12386 - 11904: 0xC749,
	12387 - 11904: 0xC74A,
	12388 - 11904: 0xC74B,
	12389 - 11904: 0xC74C,
	12390 - 11904: 0xC74D,
	12391 - 11904: 0xC74E,
	12392 - 11904: 0xC74F,
	12393 - 11904: 0xC750,
	12394 - 11904: 0xC751,
	12395 - 11904: 0xC752,
	12396 - 11904: 0xC753,
	12397 - 11904: 0xC754,
	12398 - 11904: 0xC755,
	12399 - 11904: 0xC756,
	12400 - 11904: 0xC757,
	12401 - 11904: 0xC758,
	12402 - 11904: 0xC759,
	12403 - 11904: 0xC75A,
	12404 - 11904: 0xC75B,
	12405 - 11904: 0xC75C,
	12406 - 11904: 0xC75D,
	12407 - 11904: 0xC75E,
	12408 - 11904: 0xC75F,
	12409 - 11904: 0xC760,
	12410 - 11904: 0xC761,
	12411 - 11904: 0xC762,
	12412 - 11904: 0xC763,
	12413 - 11904: 0xC764,
	12414 - 11904: 0xC765,
	12415 - 11904: 0xC766,
	12416 - 11904: 0xC767,
	12417 - 11904: 0xC768,
	12418 - 11904: 0xC769,
	12419 - 11904: 0xC76A,
	12420 - 11904: 0xC76B,
	12421 - 11904: 0xC76C,
	12422 - 11904: 0xC76D,
	12423 - 11904: 0xC76E,
	12424 - 11904: 0xC76F,
	12425 - 11904: 0xC770,
	12426 - 11904: 0xC771,
	12427 - 11904: 0xC772,
	12428 - 11904: 0xC773,
	12429 - 11904: 0xC774,
	12430 - 11904: 0xC775,
	12431 - 11904: 0xC776,
	12432 - 11904: 0xC777,
	12433 - 11904: 0xC778,
	12434 - 11904: 0xC779,
	12435 - 11904: 0xC77A,
	12443 - 11904: 0xC8D4,
	12444 - 11904: 0xC8D5,
	12445 - 11904: 0xC6DC,
	12446 - 11904: 0xC6DD,
	12449 - 11904: 0xC77B,
	12450 - 11904: 0xC77C,
	12451 - 11904: 0xC77D,
	12452 - 11904: 0xC77E,
	12453 - 11904: 0xC7A1,
	12454 - 11904: 0xC7A2,
	12455 - 11904: 0xC7A3,
	12456 - 11904: 0xC7A4,
	12457 - 11904: 0xC7A5,
	12458 - 11904: 0xC7A6,
	12459 - 11904: 0xC7A7,
	12460 - 11904: 0xC7A8,
	12461 - 11904: 0xC7A9,
	12462 - 11904: 0xC7AA,
	12463 - 11904: 0xC7AB,
	12464 - 11904: 0xC7AC,
	12465 - 11904: 0xC7AD,
	12466 - 11904: 0xC7AE,
	12467 - 11904: 0xC7AF,
	12468 - 11904: 0xC7B0,
	12469 - 11904: 0xC7B1,
	12470 - 11904: 0xC7B2,
	12471 - 11904: 0xC7B3,
	12472 - 11904: 0xC7B4,
	12473 - 11904: 0xC7B5,
	12474 - 11904: 0xC7B6,
	12475 - 11904: 0xC7B7,
	12476 - 11904: 0xC7B8,
	12477 - 11904: 0xC7B9,
	12478 - 11904: 0xC7BA,
	12479 - 11904: 0xC7BB,
	12480 - 11904: 0xC7BC,
	12481 - 11904: 0xC7BD,
	12482 - 11904: 0xC7BE,
	12483 - 11904: 0xC7BF,
	12484 - 11904: 0xC7C0,
	12485 - 11904: 0xC7C1,
	12486 - 11904: 0xC7C2,
	12487 - 11904: 0xC7C3,
	12488 - 11904: 0xC7C4,
	12489 - 11904: 0xC7C5,
	12490 - 11904: 0xC7C6,
	12491 - 11904: 0xC7C7,
	12492 - 11904: 0xC7C8,
	12493 - 11904: 0xC7C9,
	12494 - 11904: 0xC7CA,
	12495 - 11904: 0xC7CB,
	12496 - 11904: 0xC7CC,
	12497 - 11904: 0xC7CD,
	12498 - 11904: 0xC7CE,
	12499 - 11904: 0xC7CF,
	12500 - 11904: 0xC7D0,
	12501 - 11904: 0xC7D1,
	12502 - 11904: 0xC7D2,
	12503 - 11904: 0xC7D3,
	12504 - 11904: 0xC7D4,
	12505 - 11904: 0xC7D5,
	12506 - 11904: 0xC7D6,
	12507 - 11904: 0xC7D7,
	12508 - 11904: 0xC7D8,
	12509 - 11904: 0xC7D9,
	12510 - 11904: 0xC7DA,
	12511 - 11904: 0xC7DB,
	12512 - 11904: 0xC7DC,
	12513 - 11904: 0xC7DD,
	12514 - 11904: 0xC7DE,
	12515 - 11904: 0xC7DF,
	12516 - 11904: 0xC7E0,
	12517 - 11904: 0xC7E1,
	12518 - 11904: 0xC7E2,
	12519 - 11904: 0xC7E3,
	12520 - 11904: 0xC7E4,
	12521 - 11904: 0xC7E5,
	12522 - 11904: 0xC7E6,
	12523 - 11904: 0xC7E7,
	12524 - 11904: 0xC7E8,
	12525 - 11904: 0xC7E9,
	12526 - 11904: 0xC7EA,
	12527 - 11904: 0xC7EB,
	12528 - 11904: 0xC7EC,
	12529 - 11904: 0xC7ED,
	12530 - 11904: 0xC7EE,
	12531 - 11904: 0xC7EF,
	12532 - 11904: 0xC7F0,
	12533 - 11904: 0xC7F1,
	12534 - 11904: 0xC7F2,
	12540 - 11904: 0xC6E3,
	12541 - 11904: 0xC6DA,
	12542 - 11904: 0xC6DB,
	12549 - 11904: 0xA374,
	12550 - 11904: 0xA375,
	12551 - 11904: 0xA376,
	12552 - 11904: 0xA377,
	12553 - 11904: 0xA378,
	12554 - 11904: 0xA379,
	12555 - 11904: 0xA37A,
	12556 - 11904: 0xA37B,
	12557 - 11904: 0xA37C,
	12558 - 11904: 0xA37D,
	12559 - 11904: 0xA37E,
	12560 - 11904: 0xA3A1,
	12561 - 11904: 0xA3A2,
	12562 - 11904: 0xA3A3,
	12563 - 11904: 0xA3A4,
	12564 - 11904: 0xA3A5,
	12565 - 11904: 0xA3A6,
	12566 - 11904: 0xA3A7,
	12567 - 11904: 0xA3A8,
	12568 - 11904: 0xA3A9,
	12569 - 11904: 0xA3AA,
	12570 - 11904: 0xA3AB,
	12571 - 11904: 0xA3AC,
	12572 - 11904: 0xA3AD,
	12573 - 11904: 0xA3AE,
	12574 - 11904: 0xA3AF,
	12575 - 11904: 0xA3B0,
	12576 - 11904: 0xA3B1,
	12577 - 11904: 0xA3B2,
	12578 - 11904: 0xA3B3,
	12579 - 11904: 0xA3B4,
	12580 - 11904: 0xA3B5,
	12581 - 11904: 0xA3B6,
	12582 - 11904: 0xA3B7,
	12583 - 11904: 0xA3B8,
	12584 - 11904: 0xA3B9,
	12585 - 11904: 0xA3BA,
	12736 - 11904: 0x8840,
	12737 - 11904: 0x8841,
	12738 - 11904: 0x8842,
	12739 - 11904: 0x8843,
	12740 - 11904: 0x8844,
	12741 - 11904: 0x8846,
	12742 - 11904: 0x8849,
	12743 - 11904: 0x884A,
	12744 - 11904: 0x884D,
	12745 - 11904: 0x884F,
	12746 - 11904: 0x8850,
	12747 - 11904: 0x8851,
	12748 - 11904: 0x8852,
	12749 - 11904: 0x8854,
	12750 - 11904: 0x8855,
	12751 - 11904: 0xC879,
	12849 - 11904: 0xC8D1,
	12963 - 11904: 0xA1C0,
	13198 - 11904: 0xA255,
	13199 - 11904: 0xA256,
	13212 - 11904: 0xA250,
	13213 - 11904: 0xA251,
	13214 - 11904: 0xA252,
	13217 - 11904: 0xA254,
	13252 - 11904: 0xA257,
	13262 - 11904: 0xA253,
	13265 - 11904: 0xA1EB,
	13266 - 11904: 0xA1EA,
	13269 - 11904: 0xA24F,
	13365 - 11904: 0x9277,
	13376 - 11904: 0x96DF,
	13386 - 11904: 0x8CF4,
	13388 - 11904: 0x89D5,
	13412 - 11904: 0x93CD,
	13427 - 11904: 0x9BDF,
	13434 - 11904: 0xFA68,
	13437 - 11904: 0x89DA,
	13438 - 11904: 0x8F59,
	13459 - 11904: 0x89DB,
	13462 - 11904: 0x8F5D,
	13477 - 11904: 0x89DC,
	13487 - 11904: 0x96F7,
	13500 - 11904: 0x8ADA,
	13505 - 11904: 0x8BDC,
	13512 - 11904: 0x97DB,
	13535 - 11904: 0x9E53,
	13540 - 11904: 0x9DAA,
	13542 - 11904: 0x87BE,
	13563 - 11904: 0x9BEA,
	13574 - 11904: 0x8A6E,
	13630 - 11904: 0x8BC8,
	13649 - 11904: 0x89E8,
	13651 - 11904: 0x89EA,
	13657 - 11904: 0x8C4B,
	13665 - 11904: 0xFB70,
	13677 - 11904: 0x89ED,
	13680 - 11904: 0x94DD,
	13682 - 11904: 0x89EE,
	13687 - 11904: 0x9EB4,
	13688 - 11904: 0x8AD3,
	13700 - 11904: 0x92DB,
	13719 - 11904: 0x94DB,
	13720 - 11904: 0x89F9,
	13729 - 11904: 0xFB7A,
	13733 - 11904: 0x89FB,
	13741 - 11904: 0x9EFC,
	13759 - 11904: 0x89FC,
	13761 - 11904: 0x89BF,
	13765 - 11904: 0x89FE,
	13767 - 11904: 0x89E6,
	13770 - 11904: 0x9D46,
	13774 - 11904: 0x9DEE,
	13778 - 11904: 0xA07E,
	13782 - 11904: 0xA068,
	13787 - 11904: 0x98E9,
	13789 - 11904: 0x8B68,
	13809 - 11904: 0x8DFD,
	13810 - 11904: 0x8BBE,
	13811 - 11904: 0x9FD9,
	13819 - 11904: 0x8AEB,
	13822 - 11904: 0x9FD7,
	13833 - 11904: 0x8B6A,
	13848 - 11904: 0x9C5C,
	13850 - 11904: 0x8BB1,
	13859 - 11904: 0xFB5E,
	13861 - 11904: 0x8770,
	13869 - 11904: 0x9DF3,
	13877 - 11904: 0xA0D0,
	13881 - 11904: 0xFC66,
	13886 - 11904: 0x92E9,
	13895 - 11904: 0x9AEC,
	13896 - 11904: 0x8FAB,
	13897 - 11904: 0xFA48,
	13902 - 11904: 0x8E45,
	13919 - 11904: 0x9C6F,
	13921 - 11904: 0x8D5C,
	13946 - 11904: 0x9EDE,
	13953 - 11904: 0x89EF,
	13978 - 11904: 0x96E9,
	13989 - 11904: 0x9EBB,
	13994 - 11904: 0x94DE,
	13996 - 11904: 0x9EB8,
	14000 - 11904: 0x97BA,
	14001 - 11904: 0xFB65,
	14005 - 11904: 0x95D6,
	14009 - 11904: 0x9CBB,
	14012 - 11904: 0x97DA,
	14017 - 11904: 0x8F45,
	14019 - 11904: 0xFB7D,
	14020 - 11904: 0x9158,
	14021 - 11904: 0xFE64,
	14023 - 11904: 0x9856,
	14024 - 11904: 0x9B4D,
	14035 - 11904: 0x935B,
	14036 - 11904: 0x95C7,
	14038 - 11904: 0x97E7,
	14045 - 11904: 0x9359,
	14049 - 11904: 0x91F5,
	14050 - 11904: 0x97B8,
	14053 - 11904: 0xFDA2,
	14054 - 11904: 0xFBB6,
	14069 - 11904: 0x92FA,
	14081 - 11904: 0x9357,
	14083 - 11904: 0x8BA6,
	14088 - 11904: 0xFBB9,
	14090 - 11904: 0x97B0,
	14093 - 11904: 0xFDC4,
	14108 - 11904: 0x9CA1,
	14114 - 11904: 0x91F2,
	14115 - 11904: 0x91F9,
	14117 - 11904: 0x8FF1,
	14124 - 11904: 0x9745,
	14125 - 11904: 0x9853,
	14128 - 11904: 0xFE78,
	14130 - 11904: 0xFBC1,
	14131 - 11904: 0x9251,
	14138 - 11904: 0x9DAD,
	14144 - 11904: 0xFD6C,
	14147 - 11904: 0xFA6B,
	14178 - 11904: 0x9BC2,
	14191 - 11904: 0x9A7B,
	14231 - 11904: 0x8B60,
	14240 - 11904: 0x934B,
	14265 - 11904: 0x9ABD,
	14270 - 11904: 0x91B7,
	14294 - 11904: 0x8D4B,
	14322 - 11904: 0x95B4,
	14328 - 11904: 0xFEC5,
	14331 - 11904: 0x9EF0,
	14351 - 11904: 0x8D64,
	14361 - 11904: 0x9269,
	14368 - 11904: 0x8D67,
	14381 - 11904: 0xFBEA,
	14390 - 11904: 0xFBEF,
	14392 - 11904: 0x8D68,
	14435 - 11904: 0x93EB,
	14453 - 11904: 0x877A,
	14496 - 11904: 0xFC42,
	14531 - 11904: 0x9166,
	14540 - 11904: 0xFACD,
	14545 - 11904: 0x93DD,
	14548 - 11904: 0x8D52,
	14586 - 11904: 0x8BCC,
	14600 - 11904: 0x8D6D,
	14612 - 11904: 0x8D6E,
	14631 - 11904: 0x96A8,
	14642 - 11904: 0xFCA6,
	14655 - 11904: 0x8D6F,
	14669 - 11904: 0x8D70,
	14691 - 11904: 0xFC64,
	14712 - 11904: 0x8CF3,
	14720 - 11904: 0x9060,
	14729 - 11904: 0x8D74,
	14730 - 11904: 0x97C3,
	14738 - 11904: 0x8AD0,
	14745 - 11904: 0x9274,
	14747 - 11904: 0x9BBE,
	14753 - 11904: 0x9CC8,
	14756 - 11904: 0x9CBA,
	14776 - 11904: 0x8D78,
	14812 - 11904: 0x9EB9,
	14818 - 11904: 0x955A,
	14821 - 11904: 0x91B4,
	14828 - 11904: 0x8A48,
	14840 - 11904: 0x8D7D,
	14843 - 11904: 0x8A7D,
	14846 - 11904: 0x8AC2,
	14849 - 11904: 0xFD4A,
	14851 - 11904: 0x8DA1,
	14854 - 11904: 0x8AD1,
	14871 - 11904: 0xFCB4,
	14872 - 11904: 0x8B47,
	14889 - 11904: 0x93A4,
	14890 - 11904: 0x9EDA,
	14900 - 11904: 0x8A51,
	14923 - 11904: 0x8DA6,
	14930 - 11904: 0x9EC5,
	14935 - 11904: 0xFCC4,
	14940 - 11904: 0xA078,
	14942 - 11904: 0x94B5,
	14950 - 11904: 0xFCC2,
	14951 - 11904: 0x8A6B,
	14999 - 11904: 0x8DAB,
	15019 - 11904: 0xFAE8,
	15037 - 11904: 0x8DAD,
	15070 - 11904: 0xFC49,
	15072 - 11904: 0x93C1,
	15088 - 11904: 0x906F,
	15090 - 11904: 0x8DB0,
	15093 - 11904: 0x87A2,
	15099 - 11904: 0x947E,
	15118 - 11904: 0x90FA,
	15129 - 11904: 0x9479,
	15138 - 11904: 0x8DB2,
	15147 - 11904: 0xFCEE,
	15161 - 11904: 0x997B,
	15170 - 11904: 0x8DB4,
	15192 - 11904: 0x8DB7,
	15200 - 11904: 0x91B3,
	15217 - 11904: 0x8DBB,
	15218 - 11904: 0x8DBA,
	15227 - 11904: 0x8DBC,
	15228 - 11904: 0x9044,
	15232 - 11904: 0xFD4C,
	15253 - 11904: 0x874B,
	15254 - 11904: 0x93E4,
	15257 - 11904: 0x93E0,
	15265 - 11904: 0xFD53,
	15292 - 11904: 0x8DC3,
	15294 - 11904: 0x9BB8,
	15298 - 11904: 0xFBF0,
	15300 - 11904: 0x93E9,
	15319 - 11904: 0x93F6,
	15325 - 11904: 0x8DC5,
	15340 - 11904: 0x8DCA,
	15346 - 11904: 0x8DCC,
	15347 - 11904: 0xFD5D,
	15348 - 11904: 0x93B5,
	15373 - 11904: 0xFD61,
	15377 - 11904: 0x9CF8,
	15381 - 11904: 0x9252,
	15384 - 11904: 0xA0E8,
	15444 - 11904: 0x9CA5,
	15499 - 11904: 0x8C56,
	15563 - 11904: 0x8DD6,
	15565 - 11904: 0x97C0,
	15569 - 11904: 0xA0DE,
	15574 - 11904: 0x97D2,
	15580 - 11904: 0xFAA5,
	15595 - 11904: 0xFDA3,
	15599 - 11904: 0x8DDB,
	15634 - 11904: 0x8CEA,
	15635 - 11904: 0x8EAF,
	15645 - 11904: 0x91B5,
	15666 - 11904: 0xFD49,
	15675 - 11904: 0xFDD1,
	15686 - 11904: 0x8DEB,
	15692 - 11904: 0x97C6,
	15694 - 11904: 0xFDCE,
	15697 - 11904: 0x90FC,
	15711 - 11904: 0xFC59,
	15714 - 11904: 0x96D6,
	15721 - 11904: 0x97C5,
	15722 - 11904: 0x8DEF,
	15727 - 11904: 0x97D7,
	15733 - 11904: 0x8DF0,
	15741 - 11904: 0x96A6,
	15749 - 11904: 0xFBBF,
	15752 - 11904: 0x8CDF,
	15754 - 11904: 0x8DF3,
	15759 - 11904: 0x9449,
	15761 - 11904: 0x8DF5,
	15781 - 11904: 0x9872,
	15789 - 11904: 0x8E6B,
	15796 - 11904: 0xFAFD,
	15807 - 11904: 0x8F50,
	15814 - 11904: 0x9DCC,
	15815 - 11904: 0xFC65,
	15817 - 11904: 0x8C44,
	15820 - 11904: 0x996E,
	15821 - 11904: 0x94A1,
	15827 - 11904: 0x8F63,
	15835 - 11904: 0xA0DA,
	15847 - 11904: 0x9253,
	15848 - 11904: 0xFDE9,
	15851 - 11904: 0x9DB5,
	15859 - 11904: 0x9879,
	15860 - 11904: 0x876A,
	15863 - 11904: 0x9D5D,
	15868 - 11904: 0x8D63,
	15869 - 11904: 0x9669,
	15878 - 11904: 0x9F70,
	15936 - 11904: 0xFC6A,
	15939 - 11904: 0x8AC7,
	15944 - 11904: 0x89D7,
	15957 - 11904: 0xFE4D,
	15988 - 11904: 0x9EDD,
	16040 - 11904: 0xFEFB,
	16041 - 11904: 0x98BC,
	16042 - 11904: 0xFACC,
	16045 - 11904: 0x95B0,
	16049 - 11904: 0x9464,
	16056 - 11904: 0x936F,
	16063 - 11904: 0x94B9,
	16066 - 11904: 0x95EC,
	16071 - 11904: 0x91EE,
	16074 - 11904: 0x98C3,
	16076 - 11904: 0x95F6,
	16080 - 11904: 0x8FFD,
	16081 - 11904: 0x98C5,
	16086 - 11904: 0x9766,
	16087 - 11904: 0xFE6E,
	16090 - 11904: 0x97DD,
	16091 - 11904: 0x8CAA,
	16094 - 11904: 0x92D2,
	16097 - 11904: 0x9761,
	16098 - 11904: 0x98CB,
	16103 - 11904: 0x95F0,
	16105 - 11904: 0x975D,
	16107 - 11904: 0x91E3,
	16108 - 11904: 0x877E,
	16112 - 11904: 0x98CC,
	16115 - 11904: 0x9469,
	16116 - 11904: 0x98CD,
	16122 - 11904: 0x98CE,
	16124 - 11904: 0x95FC,
	16127 - 11904: 0x94A3,
	16128 - 11904: 0x9662,
	16132 - 11904: 0xFEB6,
	16134 - 11904: 0x9463,
	16135 - 11904: 0x8D47,
	16142 - 11904: 0x98D0,
	16211 - 11904: 0x98D1,
	16216 - 11904: 0x9475,
	16217 - 11904: 0xFAE0,
	16227 - 11904: 0x9472,
	16252 - 11904: 0x98D6,
	16275 - 11904: 0x8AF0,
	16320 - 11904: 0x98D9,
	16328 - 11904: 0x8D5A,
	16343 - 11904: 0x98DB,
	16348 - 11904: 0x98DD,
	16357 - 11904: 0x98A8,
	16365 - 11904: 0x8A6D,
	16377 - 11904: 0x8AFB,
	16378 - 11904: 0x8AAE,
	16388 - 11904: 0xFBC9,
	16393 - 11904: 0x8C5D,
	16413 - 11904: 0x98E4,
	16441 - 11904: 0x98E6,
	16453 - 11904: 0x98E8,
	16467 - 11904: 0x8A4D,
	16471 - 11904: 0x9257,
	16482 - 11904: 0x95DF,
	16485 - 11904: 0xA0AC,
	16490 - 11904: 0x98EB,
	16495 - 11904: 0x98EC,
	16497 - 11904: 0x8CC3,
	16552 - 11904: 0x98F4,
	16564 - 11904: 0x87D9,
	16571 - 11904: 0x8AB8,
	16575 - 11904: 0x9EE7,
	16584 - 11904: 0x94BC,
	16600 - 11904: 0xFCD1,
	16607 - 11904: 0x9CC6,
	16632 - 11904: 0x8D4A,
	16634 - 11904: 0x9E7E,
	16642 - 11904: 0x8D44,
	16643 - 11904: 0x98FE,
	16644 - 11904: 0xFDE8,
	16649 - 11904: 0x9940,
	16654 - 11904: 0x94C9,
	16689 - 11904: 0x87C6,
	16690 - 11904: 0x94D3,
	16743 - 11904: 0x9946,
	16748 - 11904: 0x90C0,
	16750 - 11904: 0x94D1,
	16764 - 11904: 0x8D4E,
	16767 - 11904: 0x9573,
	16769 - 11904: 0x87CE,
	16784 - 11904: 0x93C2,
	16818 - 11904: 0x9948,
	16836 - 11904: 0x994B,
	16842 - 11904: 0x8E55,
	16847 - 11904: 0x994E,
	16859 - 11904: 0x8EFE,
	16877 - 11904: 0x8D5F,
	16879 - 11904: 0x8E59,
	16889 - 11904: 0x94EC,
	16913 - 11904: 0x94EF,
	16931 - 11904: 0x8C60,
	16960 - 11904: 0x8F74,
	16992 - 11904: 0x9955,
	17002 - 11904: 0x9544,
	17014 - 11904: 0x8CCB,
	17018 - 11904: 0x9956,
	17036 - 11904: 0x9959,
	17044 - 11904: 0x995B,
	17058 - 11904: 0x8CC4,
	17077 - 11904: 0xFA45,
	17081 - 11904: 0x90B7,
	17084 - 11904: 0x9743,
	17140 - 11904: 0x95CD,
	17147 - 11904: 0x97C9,
	17148 - 11904: 0xFD50,
	17162 - 11904: 0x87AA,
	17195 - 11904: 0x8EB9,
	17262 - 11904: 0x95C6,
	17303 - 11904: 0x9967,
	17306 - 11904: 0x8CE3,
	17338 - 11904: 0x8AB9,
	17345 - 11904: 0x8DFC,
	17369 - 11904: 0x8A76,
	17375 - 11904: 0x9D51,
	17389 - 11904: 0x9973,
	17392 - 11904: 0x8740,
	17394 - 11904: 0x9D4F,
	17409 - 11904: 0x997A,
	17410 - 11904: 0x9564,
	17427 - 11904: 0x99A1,
	17445 - 11904: 0x99A5,
	17453 - 11904: 0x99A7,
	17530 - 11904: 0x8EED,
	17551 - 11904: 0x99AD,
	17553 - 11904: 0xC87E,
	17567 - 11904: 0x946E,
	17568 - 11904: 0x8F70,
	17570 - 11904: 0xFAD0,
	17584 - 11904: 0x99B3,
	17591 - 11904: 0xA053,
	17597 - 11904: 0x8D5E,
	17600 - 11904: 0x965C,
	17603 - 11904: 0x8CE0,
	17605 - 11904: 0xFD7A,
	17614 - 11904: 0x97FE,
	17629 - 11904: 0x92BD,
	17630 - 11904: 0x8D5D,
	17631 - 11904: 0x97FD,
	17633 - 11904: 0x87DB,
	17636 - 11904: 0x8F64,
	17641 - 11904: 0xFCF7,
	17642 - 11904: 0x9562,
	17643 - 11904: 0x97CD,
	17644 - 11904: 0x9E64,
	17652 - 11904: 0x924C,
	17667 - 11904: 0x8EC9,
	17668 - 11904: 0x99BC,
	17673 - 11904: 0x9DA5,
	17675 - 11904: 0x8F54,
	17686 - 11904: 0x8F7C,
	17691 - 11904: 0x8D55,
	17693 - 11904: 0x8EA2,
	17703 - 11904: 0x8F7A,
	17710 - 11904: 0x97AE,
	17715 - 11904: 0x96C8,
	17718 - 11904: 0x8CE4,
	17723 - 11904: 0x99C3,
	17725 - 11904: 0x90D6,
	17727 - 11904: 0x9CBE,
	17731 - 11904: 0x8F76,
	17745 - 11904: 0x9470,
	17746 - 11904: 0xFB4B,
	17749 - 11904: 0xFDCA,
	17752 - 11904: 0x8CEF,
	17756 - 11904: 0x8EC7,
	17761 - 11904: 0x8D54,
	17762 - 11904: 0xA0F9,
	17770 - 11904: 0x8FA9,
	17773 - 11904: 0x8D51,
	17783 - 11904: 0x99C7,
	17784 - 11904: 0x8744,
	17797 - 11904: 0x90D7,
	17830 - 11904: 0x8743,
	17843 - 11904: 0x8747,
	17882 - 11904: 0x8758,
	17897 - 11904: 0x9EDF,
	17898 - 11904: 0x8D59,
	17923 - 11904: 0x8742,
	17926 - 11904: 0x99CE,
	17935 - 11904: 0x8FBA,
	17941 - 11904: 0x8FEB,
	17943 - 11904: 0x99CF,
	18011 - 11904: 0x8FC2,
	18042 - 11904: 0x92C9,
	18048 - 11904: 0x97DC,
	18081 - 11904: 0x875D,
	18094 - 11904: 0x87CC,
	18107 - 11904: 0x8D45,
	18127 - 11904: 0x95B3,
	18128 - 11904: 0x9C79,
	18165 - 11904: 0x95B2,
	18167 - 11904: 0x8D4C,
	18195 - 11904: 0x8FDB,
	18200 - 11904: 0x9BE3,
	18230 - 11904: 0x874C,
	18244 - 11904: 0x874D,
	18254 - 11904: 0x9E7A,
	18255 - 11904: 0x8757,
	18300 - 11904: 0x9BEE,
	18328 - 11904: 0x99DE,
	18342 - 11904: 0xFAFA,
	18389 - 11904: 0x8A52,
	18413 - 11904: 0x99E1,
	18420 - 11904: 0x8A67,
	18432 - 11904: 0x8BB5,
	18443 - 11904: 0x8AAC,
	18487 - 11904: 0x99E9,
	18525 - 11904: 0xFBCA,
	18545 - 11904: 0x97DE,
	18587 - 11904: 0x95D1,
	18605 - 11904: 0x99F5,
	18606 - 11904: 0xFC4A,
	18640 - 11904: 0x9BA9,
	18653 - 11904: 0xFBDC,
	18669 - 11904: 0xFE56,
	18675 - 11904: 0x9EA4,
	18682 - 11904: 0x9D49,
	18694 - 11904: 0x95DB,
	18705 - 11904: 0x89C5,
	18718 - 11904: 0x99F8,
	18725 - 11904: 0x9664,
	18730 - 11904: 0x9055,
	18733 - 11904: 0x96D4,
	18735 - 11904: 0x87C4,
	18736 - 11904: 0x87AE,
	18741 - 11904: 0x977C,
	18748 - 11904: 0x964D,
	18750 - 11904: 0x97E1,
	18757 - 11904: 0x9A48,
	18769 - 11904: 0x9A49,
	18771 - 11904: 0xFE7D,
	18789 - 11904: 0x90AA,
	18794 - 11904: 0x9A50,
	18802 - 11904: 0x9347,
	18825 - 11904: 0x8ED8,
	18849 - 11904: 0x90C9,
	18855 - 11904: 0x9A55,
	18911 - 11904: 0x90BC,
	18917 - 11904: 0x9A58,
	18919 - 11904: 0x8BB8,
	18959 - 11904: 0x90D5,
	18973 - 11904: 0x9641,
	18980 - 11904: 0x9A5A,
	18997 - 11904: 0x9A5C,
	19094 - 11904: 0x97C2,
	19108 - 11904: 0x875C,
	19124 - 11904: 0x8ABB,
	19128 - 11904: 0x9BAA,
	19153 - 11904: 0x90F5,
	19172 - 11904: 0x9A60,
	19199 - 11904: 0x9145,
	19216 - 11904: 0x8C58,
	19225 - 11904: 0x9A63,
	19232 - 11904: 0x8C49,
	19244 - 11904: 0x8BB6,
	19255 - 11904: 0xFCCF,
	19311 - 11904: 0x966B,
	19312 - 11904: 0x9A6E,
	19314 - 11904: 0x914F,
	19323 - 11904: 0x9746,
	19326 - 11904: 0xA0E6,
	19342 - 11904: 0x92D7,
	19344 - 11904: 0x9675,
	19347 - 11904: 0x93D4,
	19350 - 11904: 0x91BB,
	19351 - 11904: 0x9679,
	19357 - 11904: 0x9A70,
	19389 - 11904: 0x9678,
	19390 - 11904: 0x91CD,
	19392 - 11904: 0x9C4A,
	19460 - 11904: 0xA06F,
	19463 - 11904: 0xA06A,
	19470 - 11904: 0x915F,
	19506 - 11904: 0x8741,
	19515 - 11904: 0x9FA5,
	19518 - 11904: 0x89BA,
	19520 - 11904: 0x874F,
	19527 - 11904: 0x874E,
	19543 - 11904: 0x8755,
	19547 - 11904: 0x9ECD,
	19565 - 11904: 0x9A79,
	19575 - 11904: 0x8CF2,
	19579 - 11904: 0x8D57,
	19581 - 11904: 0x9DCE,
	19585 - 11904: 0x8CD2,
	19589 - 11904: 0x8759,
	19620 - 11904: 0x9D73,
	19630 - 11904: 0x96B9,
	19632 - 11904: 0x96BC,
	19639 - 11904: 0x9CD1,
	19661 - 11904: 0x89B7,
	19681 - 11904: 0x9EEE,
	19682 - 11904: 0x8749,
	19693 - 11904: 0xFB43,
	19719 - 11904: 0x875B,
	19721 - 11904: 0x9EC9,
	19728 - 11904: 0xFBD3,
	19764 - 11904: 0x91AE,
	19830 - 11904: 0x8D58,
	19831 - 11904: 0x8746,
	19849 - 11904: 0x8D56,
	19857 - 11904: 0x9D78,
	19868 - 11904: 0x9D7B,
	19968 - 11904: 0xA440,
	19969 - 11904: 0xA442,
	19971 - 11904: 0xA443,
	19972 - 11904: 0x9EB3,
	19975 - 11904: 0xC945,
	19976 - 11904: 0xA456,
	19977 - 11904: 0xA454,
	19978 - 11904: 0xA457,
	19979 - 11904: 0xA455,
	19980 - 11904: 0xC946,
	19981 - 11904: 0xA4A3,
	19982 - 11904: 0xC94F,
	19983 - 11904: 0xC94D,
	19984 - 11904: 0xA4A2,
	19985 - 11904: 0xA4A1,
	19988 - 11904: 0xA542,
	19989 - 11904: 0xA541,
	19990 - 11904: 0xA540,
	19992 - 11904: 0xA543,
	19993 - 11904: 0xA4FE,
	19994 - 11904: 0x9EB2,
	19996 - 11904: 0x9DD6,
	19998 - 11904: 0xA5E0,
	19999 - 11904: 0xA5E1,
	20001 - 11904: 0x994F,
	20004 - 11904: 0x89CE,
	20006 - 11904: 0xA8C3,
	20008 - 11904: 0x8BC0,
	20010 - 11904: 0x9FC4,
	20011 - 11904: 0xA458,
	20012 - 11904: 0x8BD4,
	20013 - 11904: 0xA4A4,
	20014 - 11904: 0xC950,
	20015 - 11904: 0x8C72,
	20016 - 11904: 0xA4A5,
	20017 - 11904: 0xC963,
	20018 - 11904: 0xA6EA,
	20019 - 11904: 0xCBB1,
	20022 - 11904: 0xC6BF,
	20023 - 11904: 0x8BF9,
	20024 - 11904: 0xA459,
	20025 - 11904: 0xA4A6,
	20027 - 11904: 0xA544,
	20028 - 11904: 0xC964,
	20029 - 11904: 0x8946,
	20031 - 11904: 0xC6C0,
	20034 - 11904: 0xC940,
	20035 - 11904: 0xA444,
	20037 - 11904: 0xA45B,
	20039 - 11904: 0xC947,
	20040 - 11904: 0xA45C,
	20041 - 11904: 0xFAE5,
	20043 - 11904: 0xA4A7,
	20045 - 11904: 0xA545,
	20046 - 11904: 0xA547,
	20047 - 11904: 0xA546,
	20050 - 11904: 0xA5E2,
	20051 - 11904: 0xA5E3,
	20054 - 11904: 0xA8C4,
	20056 - 11904: 0xADBC,
	20057 - 11904: 0xA441,
	20058 - 11904: 0xC87B,
	20059 - 11904: 0x8BC6,
	20060 - 11904: 0xC941,
	20061 - 11904: 0xA445,
	20062 - 11904: 0xA45E,
	20063 - 11904: 0xA45D,
	20073 - 11904: 0xA5E4,
	20074 - 11904: 0x9C57,
	20083 - 11904: 0xA8C5,
	20088 - 11904: 0x9AFB,
	20094 - 11904: 0xB0AE,
	20095 - 11904: 0xD44B,
	20096 - 11904: 0x89D0,
	20097 - 11904: 0x89CF,
	20098 - 11904: 0xB6C3,
	20099 - 11904: 0xDCB1,
	20100 - 11904: 0xDCB2,
	20101 - 11904: 0xC6C1,
	20102 - 11904: 0xA446,
	20103 - 11904: 0x89D1,
	20104 - 11904: 0xA4A9,
	20105 - 11904: 0x89E2,
	20107 - 11904: 0xA8C6,
	20108 - 11904: 0xA447,
	20109 - 11904: 0xC948,
	20110 - 11904: 0xA45F,
	20113 - 11904: 0xA4AA,
	20114 - 11904: 0xA4AC,
	20115 - 11904: 0xC951,
	20116 - 11904: 0xA4AD,
	20117 - 11904: 0xA4AB,
	20120 - 11904: 0x927E,
	20121 - 11904: 0xA5E5,
	20122 - 11904: 0x9DBA,
	20123 - 11904: 0xA8C7,
	20126 - 11904: 0xA8C8,
	20127 - 11904: 0xAB45,
	20128 - 11904: 0xC6C2,
	20129 - 11904: 0xA460,
	20130 - 11904: 0xA4AE,
	20131 - 11904: 0x8C6F,
	20132 - 11904: 0xA5E6,
	20133 - 11904: 0xA5E8,
	20134 - 11904: 0xA5E7,
	20136 - 11904: 0xA6EB,
	20139 - 11904: 0xA8C9,
	20140 - 11904: 0xA8CA,
	20141 - 11904: 0xAB46,
	20142 - 11904: 0xAB47,
	20147 - 11904: 0xADBD,
	20150 - 11904: 0xDCB3,
	20151 - 11904: 0xFBF8,
	20153 - 11904: 0xF6D6,
	20154 - 11904: 0xA448,
	20155 - 11904: 0x8BC7,
	20156 - 11904: 0x926B,
	20159 - 11904: 0x89D2,
	20160 - 11904: 0xA4B0,
	20161 - 11904: 0xA4AF,
	20162 - 11904: 0xC952,
	20163 - 11904: 0xA4B1,
	20164 - 11904: 0xA4B7,
	20166 - 11904: 0xA4B2,
	20167 - 11904: 0xA4B3,
	20168 - 11904: 0xC954,
	20169 - 11904: 0xC953,
	20170 - 11904: 0xA4B5,
	20171 - 11904: 0xA4B6,
	20173 - 11904: 0xA4B4,
	20174 - 11904: 0x9FCF,
	20180 - 11904: 0xA54A,
	20181 - 11904: 0xA54B,
	20182 - 11904: 0xA54C,
	20183 - 11904: 0xA54D,
	20184 - 11904: 0xA549,
	20185 - 11904: 0xA550,
	20186 - 11904: 0xC96A,
	20188 - 11904: 0xC966,
	20189 - 11904: 0xC969,
	20190 - 11904: 0xA551,
	20191 - 11904: 0xA561,
	20193 - 11904: 0xC968,
	20195 - 11904: 0xA54E,
	20196 - 11904: 0xA54F,
	20197 - 11904: 0xA548,
	20200 - 11904: 0xC965,
	20201 - 11904: 0xC967,
	20202 - 11904: 0x9DA9,
	20203 - 11904: 0x89D3,
	20206 - 11904: 0x99E2,
	20208 - 11904: 0xA5F5,
	20209 - 11904: 0xC9B0,
	20210 - 11904: 0xA5F2,
	20211 - 11904: 0xA5F6,
	20212 - 11904: 0xC9BA,
	20213 - 11904: 0xC9AE,
	20214 - 11904: 0xA5F3,
	20215 - 11904: 0xC9B2,
	20216 - 11904: 0x9267,
	20219 - 11904: 0xA5F4,
	20221 - 11904: 0xA5F7,
	20223 - 11904: 0xA5E9,
	20224 - 11904: 0xC9B1,
	20225 - 11904: 0xA5F8,
	20226 - 11904: 0xC9B5,
	20227 - 11904: 0x92A4,
	20228 - 11904: 0xC9B9,
	20229 - 11904: 0xC9B6,
	20232 - 11904: 0xC9B3,
	20233 - 11904: 0xA5EA,
	20234 - 11904: 0xA5EC,
	20235 - 11904: 0xA5F9,
	20237 - 11904: 0xA5EE,
	20238 - 11904: 0xC9AB,
	20239 - 11904: 0xA5F1,
	20240 - 11904: 0xA5EF,
	20241 - 11904: 0xA5F0,
	20242 - 11904: 0xC9BB,
	20243 - 11904: 0xC9B8,
	20244 - 11904: 0xC9AF,
	20245 - 11904: 0xA5ED,
	20247 - 11904: 0x8C73,
	20248 - 11904: 0xC9AC,
	20249 - 11904: 0xA5EB,
	20250 - 11904: 0x894E,
	20253 - 11904: 0xC9B4,
	20258 - 11904: 0xC9B7,
	20264 - 11904: 0x894F,
	20265 - 11904: 0x9278,
	20268 - 11904: 0xC9AD,
	20269 - 11904: 0xCA66,
	20271 - 11904: 0xA742,
	20272 - 11904: 0xA6F4,
	20274 - 11904: 0x91B6,
	20275 - 11904: 0xCA67,
	20276 - 11904: 0xA6F1,
	20278 - 11904: 0xA744,
	20279 - 11904: 0x89D4,
	20280 - 11904: 0xA6F9,
	20281 - 11904: 0x9FD2,
	20282 - 11904: 0xA6F8,
	20283 - 11904: 0xCA5B,
	20284 - 11904: 0xA6FC,
	20285 - 11904: 0xA6F7,
	20286 - 11904: 0xCA60,
	20287 - 11904: 0xCA68,
	20289 - 11904: 0xCA64,
	20290 - 11904: 0x92A7,
	20291 - 11904: 0xA6FA,
	20293 - 11904: 0x95A2,
	20294 - 11904: 0xA6FD,
	20295 - 11904: 0xA6EE,
	20296 - 11904: 0xA747,
	20297 - 11904: 0xCA5D,
	20299 - 11904: 0x926E,
	20300 - 11904: 0xCBBD,
	20301 - 11904: 0xA6EC,
	20302 - 11904: 0xA743,
	20303 - 11904: 0xA6ED,
	20304 - 11904: 0xA6F5,
	20305 - 11904: 0xA6F6,
	20306 - 11904: 0xCA62,
	20307 - 11904: 0xCA5E,
	20308 - 11904: 0xA6FB,
	20309 - 11904: 0xA6F3,
	20310 - 11904: 0xCA5A,
	20311 - 11904: 0xA6EF,
	20312 - 11904: 0xCA65,
	20313 - 11904: 0xA745,
	20314 - 11904: 0xA748,
	20315 - 11904: 0xA6F2,
	20316 - 11904: 0xA740,
	20317 - 11904: 0xA746,
	20318 - 11904: 0xA6F0,
	20319 - 11904: 0xCA63,
	20320 - 11904: 0xA741,
	20321 - 11904: 0xCA69,
	20322 - 11904: 0xCA5C,
	20323 - 11904: 0xA6FE,
	20324 - 11904: 0xCA5F,
	20327 - 11904: 0xCA61,
	20329 - 11904: 0xA8D8,
	20330 - 11904: 0xCBBF,
	20331 - 11904: 0xCBCB,
	20332 - 11904: 0xA8D0,
	20334 - 11904: 0xCBCC,
	20335 - 11904: 0xA8CB,
	20336 - 11904: 0xA8D5,
	20338 - 11904: 0x96EA,
	20339 - 11904: 0xA8CE,
	20340 - 11904: 0xCBB9,
	20341 - 11904: 0xA8D6,
	20342 - 11904: 0xCBB8,
	20343 - 11904: 0xCBBC,
	20344 - 11904: 0xCBC3,
	20345 - 11904: 0xCBC1,
	20346 - 11904: 0xA8DE,
	20347 - 11904: 0xA8D9,
	20348 - 11904: 0xCBB3,
	20349 - 11904: 0xCBB5,
	20350 - 11904: 0xA8DB,
	20351 - 11904: 0xA8CF,
	20352 - 11904: 0xCBB6,
	20353 - 11904: 0xCBC2,
	20354 - 11904: 0xCBC9,
	20355 - 11904: 0xA8D4,
	20356 - 11904: 0xCBBB,
	20357 - 11904: 0xCBB4,
	20358 - 11904: 0xA8D3,
	20359 - 11904: 0xCBB7,
	20360 - 11904: 0xA8D7,
	20361 - 11904: 0xCBBA,
	20362 - 11904: 0x926F,
	20363 - 11904: 0xA8D2,
	20365 - 11904: 0xA8CD,
	20367 - 11904: 0xA8DC,
	20368 - 11904: 0xCBC4,
	20369 - 11904: 0xA8DD,
	20370 - 11904: 0xCBC8,
	20372 - 11904: 0xCBC6,
	20373 - 11904: 0xCBCA,
	20374 - 11904: 0xA8DA,
	20375 - 11904: 0xCBBE,
	20376 - 11904: 0xCBB2,
	20378 - 11904: 0xCBC0,
	20379 - 11904: 0xA8D1,
	20380 - 11904: 0xCBC5,
	20381 - 11904: 0xA8CC,
	20382 - 11904: 0xCBC7,
	20386 - 11904: 0x92A3,
	20392 - 11904: 0x8950,
	20395 - 11904: 0xFA57,
	20398 - 11904: 0xAB56,
	20399 - 11904: 0xAB4A,
	20400 - 11904: 0x9866,
	20402 - 11904: 0xCDE0,
	20403 - 11904: 0xCDE8,
	20404 - 11904: 0x8CF8,
	20405 - 11904: 0xAB49,
	20406 - 11904: 0xAB51,
	20407 - 11904: 0xAB5D,
	20409 - 11904: 0xCDEE,
	20410 - 11904: 0xCDEC,
	20411 - 11904: 0xCDE7,
	20413 - 11904: 0x89D6,
	20415 - 11904: 0xAB4B,
	20416 - 11904: 0xCDED,
	20417 - 11904: 0xCDE3,
	20418 - 11904: 0xAB59,
	20419 - 11904: 0xAB50,
	20420 - 11904: 0xAB58,
	20421 - 11904: 0xCDDE,
	20423 - 11904: 0xCDEA,
	20424 - 11904: 0x98B2,
	20425 - 11904: 0xCDE1,
	20426 - 11904: 0xAB54,
	20427 - 11904: 0xCDE2,
	20428 - 11904: 0x92AB,
	20429 - 11904: 0xCDDD,
	20430 - 11904: 0xAB5B,
	20431 - 11904: 0xAB4E,
	20432 - 11904: 0xAB57,
	20433 - 11904: 0xAB4D,
	20435 - 11904: 0xCDDF,
	20436 - 11904: 0xCDE4,
	20438 - 11904: 0xCDEB,
	20439 - 11904: 0xAB55,
	20440 - 11904: 0xAB52,
	20441 - 11904: 0xCDE6,
	20442 - 11904: 0xAB5A,
	20443 - 11904: 0xCDE9,
	20444 - 11904: 0xCDE5,
	20445 - 11904: 0xAB4F,
	20446 - 11904: 0xAB5C,
	20447 - 11904: 0xAB53,
	20448 - 11904: 0xAB4C,
	20449 - 11904: 0xAB48,
	20452 - 11904: 0x96DE,
	20453 - 11904: 0x92AC,
	20460 - 11904: 0xCDEF,
	20462 - 11904: 0xADD7,
	20463 - 11904: 0xADC1,
	20464 - 11904: 0x8C70,
	20465 - 11904: 0xADD1,
	20466 - 11904: 0x9F6E,
	20467 - 11904: 0xADD6,
	20468 - 11904: 0xD0D0,
	20469 - 11904: 0xD0CF,
	20470 - 11904: 0xD0D4,
	20471 - 11904: 0xD0D5,
	20472 - 11904: 0xADC4,
	20473 - 11904: 0x8EF2,
	20474 - 11904: 0xADCD,
	20477 - 11904: 0x9F6C,
	20478 - 11904: 0xADDA,
	20480 - 11904: 0xADCE,
	20483 - 11904: 0x89D8,
	20485 - 11904: 0xD0C9,
	20486 - 11904: 0xADC7,
	20487 - 11904: 0xD0CA,
	20488 - 11904: 0xFA59,
	20489 - 11904: 0xADDC,
	20491 - 11904: 0xADD3,
	20492 - 11904: 0xADBE,
	20493 - 11904: 0xADBF,
	20494 - 11904: 0xD0DD,
	20495 - 11904: 0xB0BF,
	20497 - 11904: 0xADCC,
	20498 - 11904: 0xADCB,
	20499 - 11904: 0xD0CB,
	20500 - 11904: 0xADCF,
	20501 - 11904: 0xD45B,
	20502 - 11904: 0xADC6,
	20503 - 11904: 0xD0D6,
	20504 - 11904: 0xADD5,
	20505 - 11904: 0xADD4,
	20506 - 11904: 0xADCA,
	20507 - 11904: 0xD0CE,
	20508 - 11904: 0xD0D7,
	20510 - 11904: 0xD0C8,
	20511 - 11904: 0xADC9,
	20512 - 11904: 0xD0D8,
	20513 - 11904: 0xADD2,
	20514 - 11904: 0xD0CC,
	20515 - 11904: 0xADC0,
	20517 - 11904: 0xADC3,
	20518 - 11904: 0xADC2,
	20519 - 11904: 0xD0D9,
	20520 - 11904: 0xADD0,
	20521 - 11904: 0xFA5F,
	20522 - 11904: 0xADD9,
	20523 - 11904: 0xADDB,
	20524 - 11904: 0xD0D3,
	20525 - 11904: 0xADD8,
	20526 - 11904: 0x92A8,
	20527 - 11904: 0xD0DB,
	20528 - 11904: 0xD0CD,
	20529 - 11904: 0xD0DC,
	20531 - 11904: 0xD0D1,
	20532 - 11904: 0x9163,
	20533 - 11904: 0xD0DA,
	20535 - 11904: 0xD0D2,
	20539 - 11904: 0x8C40,
	20540 - 11904: 0xADC8,
	20544 - 11904: 0xD463,
	20545 - 11904: 0xD457,
	20547 - 11904: 0xB0B3,
	20549 - 11904: 0xD45C,
	20550 - 11904: 0xD462,
	20551 - 11904: 0xB0B2,
	20552 - 11904: 0xD455,
	20553 - 11904: 0xB0B6,
	20554 - 11904: 0xD459,
	20555 - 11904: 0xD452,
	20556 - 11904: 0xB0B4,
	20557 - 11904: 0xD456,
	20558 - 11904: 0xB0B9,
	20559 - 11904: 0xB0BE,
	20561 - 11904: 0xD467,
	20563 - 11904: 0xD451,
	20565 - 11904: 0xB0BA,
	20566 - 11904: 0x9F73,
	20567 - 11904: 0xD466,
	20568 - 11904: 0x92AD,
	20570 - 11904: 0xB0B5,
	20571 - 11904: 0xD458,
	20572 - 11904: 0xB0B1,
	20573 - 11904: 0xD453,
	20574 - 11904: 0xD44F,
	20575 - 11904: 0xD45D,
	20576 - 11904: 0xD450,
	20577 - 11904: 0xD44E,
	20578 - 11904: 0xD45A,
	20579 - 11904: 0xD460,
	20580 - 11904: 0xD461,
	20581 - 11904: 0xB0B7,
	20582 - 11904: 0x9BE9,
	20584 - 11904: 0xD85B,
	20585 - 11904: 0xD45E,
	20586 - 11904: 0xD44D,
	20587 - 11904: 0xD45F,
	20588 - 11904: 0x92A9,
	20589 - 11904: 0xB0C1,
	20590 - 11904: 0xD464,
	20591 - 11904: 0xB0C0,
	20592 - 11904: 0xD44C,
	20594 - 11904: 0xD454,
	20595 - 11904: 0xD465,
	20596 - 11904: 0xB0BC,
	20597 - 11904: 0xB0BB,
	20598 - 11904: 0xB0B8,
	20599 - 11904: 0xB0BD,
	20602 - 11904: 0xB0AF,
	20605 - 11904: 0xFA66,
	20608 - 11904: 0xB3C8,
	20609 - 11904: 0x92AA,
	20610 - 11904: 0xD85E,
	20611 - 11904: 0xD857,
	20613 - 11904: 0xB3C5,
	20615 - 11904: 0xD85F,
	20616 - 11904: 0x89D9,
	20619 - 11904: 0xD855,
	20620 - 11904: 0xD858,
	20621 - 11904: 0xB3C4,
	20622 - 11904: 0xD859,
	20624 - 11904: 0xFD56,
	20625 - 11904: 0xB3C7,
	20626 - 11904: 0xD85D,
	20628 - 11904: 0xD853,
	20629 - 11904: 0xD852,
	20630 - 11904: 0xB3C9,
	20632 - 11904: 0xB3CA,
	20633 - 11904: 0xB3C6,
	20634 - 11904: 0xB3CB,
	20635 - 11904: 0xD851,
	20636 - 11904: 0xD85C,
	20637 - 11904: 0xD85A,
	20638 - 11904: 0xD854,
	20642 - 11904: 0xB3C3,
	20643 - 11904: 0xD856,
	20646 - 11904: 0x9FA8,
	20652 - 11904: 0xB6CA,
	20653 - 11904: 0xB6C4,
	20654 - 11904: 0xDCB7,
	20655 - 11904: 0xB6CD,
	20656 - 11904: 0xDCBD,
	20657 - 11904: 0xDCC0,
	20658 - 11904: 0xB6C6,
	20659 - 11904: 0xB6C7,
	20660 - 11904: 0xDCBA,
	20661 - 11904: 0xB6C5,
	20662 - 11904: 0xDCC3,
	20663 - 11904: 0xB6CB,
	20664 - 11904: 0xDCC4,
	20666 - 11904: 0xDCBF,
	20667 - 11904: 0xB6CC,
	20668 - 11904: 0x8C71,
	20669 - 11904: 0xDCB4,
	20670 - 11904: 0xB6C9,
	20671 - 11904: 0xDCB5,
	20673 - 11904: 0xDCBE,
	20674 - 11904: 0xDCBC,
	20676 - 11904: 0xDCB8,
	20677 - 11904: 0xB6C8,
	20678 - 11904: 0xDCB6,
	20679 - 11904: 0xB6CE,
	20680 - 11904: 0xDCBB,
	20681 - 11904: 0xDCC2,
	20682 - 11904: 0xDCB9,
	20683 - 11904: 0xDCC1,
	20685 - 11904: 0x92A1,
	20686 - 11904: 0xB9B6,
	20687 - 11904: 0xB9B3,
	20688 - 11904: 0x90E3,
	20689 - 11904: 0xB9B4,
	20691 - 11904: 0xE0F9,
	20692 - 11904: 0xE0F1,
	20693 - 11904: 0xB9B2,
	20694 - 11904: 0xB9AF,
	20695 - 11904: 0xE0F2,
	20697 - 11904: 0xA0A6,
	20698 - 11904: 0xB9B1,
	20699 - 11904: 0xE0F5,
	20701 - 11904: 0xE0F7,
	20703 - 11904: 0x94AB,
	20704 - 11904: 0xE0FE,
	20705 - 11904: 0xFC72,
	20707 - 11904: 0xE0FD,
	20708 - 11904: 0xE0F8,
	20709 - 11904: 0xB9AE,
	20710 - 11904: 0xE0F0,
	20711 - 11904: 0xB9AC,
	20712 - 11904: 0xE0F3,
	20713 - 11904: 0xB9B7,
	20714 - 11904: 0xE0F6,
	20716 - 11904: 0xE0FA,
	20717 - 11904: 0xB9B0,
	20718 - 11904: 0xB9AD,
	20719 - 11904: 0xE0FC,
	20720 - 11904: 0xE0FB,
	20721 - 11904: 0xB9B5,
	20723 - 11904: 0xE0F4,
	20724 - 11904: 0x97C4,
	20725 - 11904: 0xBBF8,
	20726 - 11904: 0xE4EC,
	20728 - 11904: 0xE4E9,
	20729 - 11904: 0xBBF9,
	20731 - 11904: 0xBBF7,
	20732 - 11904: 0x92AE,
	20733 - 11904: 0xE4F0,
	20734 - 11904: 0xE4ED,
	20735 - 11904: 0xE4E6,
	20736 - 11904: 0xBBF6,
	20737 - 11904: 0xFA67,
	20738 - 11904: 0xBBFA,
	20739 - 11904: 0xE4E7,
	20740 - 11904: 0xBBF5,
	20741 - 11904: 0xBBFD,
	20742 - 11904: 0xE4EA,
	20743 - 11904: 0xE4EB,
	20744 - 11904: 0xBBFB,
	20745 - 11904: 0xBBFC,
	20746 - 11904: 0xE4F1,
	20747 - 11904: 0xE4EE,
	20748 - 11904: 0xE4EF,
	20749 - 11904: 0x92A2,
	20750 - 11904: 0xFA69,
	20752 - 11904: 0xBEAA,
	20753 - 11904: 0xE8F8,
	20754 - 11904: 0xBEA7,
	20755 - 11904: 0xE8F5,
	20756 - 11904: 0xBEA9,
	20757 - 11904: 0xBEAB,
	20759 - 11904: 0xE8F6,
	20760 - 11904: 0xBEA8,
	20762 - 11904: 0xE8F7,
	20764 - 11904: 0xE8F4,
	20767 - 11904: 0xC076,
	20768 - 11904: 0xECBD,
	20769 - 11904: 0xC077,
	20770 - 11904: 0xECBB,
	20772 - 11904: 0xECBC,
	20773 - 11904: 0xECBA,
	20774 - 11904: 0xECB9,
	20777 - 11904: 0xECBE,
	20778 - 11904: 0xC075,
	20779 - 11904: 0x9268,
	20781 - 11904: 0xEFB8,
	20782 - 11904: 0xEFB9,
	20784 - 11904: 0xE4E8,
	20785 - 11904: 0xEFB7,
	20786 - 11904: 0xC078,
	20787 - 11904: 0xC35F,
	20788 - 11904: 0xF1EB,
	20789 - 11904: 0xF1EC,
	20791 - 11904: 0xC4D7,
	20792 - 11904: 0xC4D8,
	20793 - 11904: 0xF5C1,
	20794 - 11904: 0xF5C0,
	20795 - 11904: 0xC56C,
	20796 - 11904: 0xC56B,
	20797 - 11904: 0xF7D0,
	20799 - 11904: 0xA449,
	20800 - 11904: 0xA461,
	20801 - 11904: 0xA4B9,
	20803 - 11904: 0xA4B8,
	20804 - 11904: 0xA553,
	20805 - 11904: 0xA552,
	20806 - 11904: 0xA5FC,
	20807 - 11904: 0xA5FB,
	20808 - 11904: 0xA5FD,
	20809 - 11904: 0xA5FA,
	20811 - 11904: 0xA74A,
	20812 - 11904: 0xA749,
	20813 - 11904: 0xA74B,
	20818 - 11904: 0xA8E0,
	20820 - 11904: 0xA8DF,
	20821 - 11904: 0xA8E1,
	20822 - 11904: 0x8951,
	20823 - 11904: 0xAB5E,
	20825 - 11904: 0xA259,
	20826 - 11904: 0xD0DE,
	20827 - 11904: 0xA25A,
	20828 - 11904: 0xB0C2,
	20829 - 11904: 0xA25C,
	20830 - 11904: 0xA25B,
	20831 - 11904: 0xD860,
	20832 - 11904: 0xFA6F,
	20833 - 11904: 0xA25D,
	20834 - 11904: 0xB9B8,
	20835 - 11904: 0xA25E,
	20837 - 11904: 0xA44A,
	20839 - 11904: 0xA4BA,
	20840 - 11904: 0xA5FE,
	20841 - 11904: 0xA8E2,
	20842 - 11904: 0xFA71,
	20843 - 11904: 0xA44B,
	20844 - 11904: 0xA4BD,
	20845 - 11904: 0xA4BB,
	20846 - 11904: 0xA4BC,
	20849 - 11904: 0xA640,
	20852 - 11904: 0x8952,
	20853 - 11904: 0xA74C,
	20854 - 11904: 0xA8E4,
	20855 - 11904: 0xA8E3,
	20856 - 11904: 0xA8E5,
	20857 - 11904: 0x945A,
	20860 - 11904: 0xADDD,
	20864 - 11904: 0xBEAC,
	20866 - 11904: 0xC6C3,
	20870 - 11904: 0x89DD,
	20871 - 11904: 0xC94E,
	20872 - 11904: 0xC8A2,
	20873 - 11904: 0xA554,
	20874 - 11904: 0xA555,
	20877 - 11904: 0xA641,
	20879 - 11904: 0xCA6A,
	20881 - 11904: 0xAB60,
	20882 - 11904: 0xAB5F,
	20883 - 11904: 0xD0E0,
	20884 - 11904: 0xD0DF,
	20885 - 11904: 0xB0C3,
	20886 - 11904: 0xC6C4,
	20887 - 11904: 0xA4BE,
	20888 - 11904: 0xC955,
	20890 - 11904: 0x9E52,
	20892 - 11904: 0x8953,
	20894 - 11904: 0xCBCD,
	20896 - 11904: 0xAB61,
	20898 - 11904: 0xADE0,
	20900 - 11904: 0xADDE,
	20901 - 11904: 0xADDF,
	20903 - 11904: 0x9E55,
	20904 - 11904: 0x92BA,
	20906 - 11904: 0xBEAD,
	20907 - 11904: 0xC6C5,
	20908 - 11904: 0xA556,
	20910 - 11904: 0x8C5B,
	20912 - 11904: 0xA642,
	20913 - 11904: 0xC9BC,
	20914 - 11904: 0xFA7D,
	20915 - 11904: 0xFAA8,
	20916 - 11904: 0x9A68,
	20917 - 11904: 0xFA47,
	20918 - 11904: 0xA74D,
	20919 - 11904: 0xA74E,
	20920 - 11904: 0xFA7E,
	20921 - 11904: 0xCA6B,
	20924 - 11904: 0xCBCE,
	20925 - 11904: 0xA8E6,
	20926 - 11904: 0xCBCF,
	20931 - 11904: 0x92BB,
	20932 - 11904: 0xD0E2,
	20933 - 11904: 0xD0E3,
	20934 - 11904: 0xADE3,
	20935 - 11904: 0xFDB6,
	20936 - 11904: 0xD0E4,
	20937 - 11904: 0xFAA2,
	20938 - 11904: 0xD0E1,
	20939 - 11904: 0xADE4,
	20940 - 11904: 0xADE2,
	20941 - 11904: 0xADE1,
	20942 - 11904: 0xD0E5,
	20943 - 11904: 0xFAA3,
	20944 - 11904: 0xD468,
	20945 - 11904: 0xFAA4,
	20946 - 11904: 0x9BB4,
	20947 - 11904: 0xFAA6,
	20948 - 11904: 0xD861,
	20951 - 11904: 0xDCC5,
	20952 - 11904: 0xE140,
	20955 - 11904: 0x89DF,
	20956 - 11904: 0xBBFE,
	20957 - 11904: 0xBEAE,
	20958 - 11904: 0xE8F9,
	20959 - 11904: 0xFDDB,
	20960 - 11904: 0xA44C,
	20961 - 11904: 0xA45A,
	20962 - 11904: 0xFAA9,
	20964 - 11904: 0x8954,
	20973 - 11904: 0xFAAB,
	20976 - 11904: 0xB0C4,
	20977 - 11904: 0xB3CD,
	20979 - 11904: 0xB9B9,
	20980 - 11904: 0xFC7A,
	20981 - 11904: 0xC942,
	20982 - 11904: 0xA4BF,
	20984 - 11904: 0xA559,
	20985 - 11904: 0xA557,
	20986 - 11904: 0xA558,
	20988 - 11904: 0x89E0,
	20989 - 11904: 0xA8E7,
	20990 - 11904: 0x9F4F,
	20992 - 11904: 0xA44D,
	20993 - 11904: 0xA44E,
	20994 - 11904: 0xC87D,
	20995 - 11904: 0xA462,
	20997 - 11904: 0x89E1,
	20998 - 11904: 0xA4C0,
	20999 - 11904: 0xA4C1,
	21000 - 11904: 0xA4C2,
	21001 - 11904: 0xC9BE,
	21002 - 11904: 0xA55A,
	21003 - 11904: 0xFAB0,
	21004 - 11904: 0xC96B,
	21006 - 11904: 0xA646,
	21008 - 11904: 0xC9BF,
	21009 - 11904: 0xA644,
	21010 - 11904: 0xA645,
	21011 - 11904: 0xC9BD,
	21014 - 11904: 0xA647,
	21015 - 11904: 0xA643,
	21020 - 11904: 0xCA6C,
	21021 - 11904: 0xAAEC,
	21022 - 11904: 0xCA6D,
	21023 - 11904: 0x9FCD,
	21024 - 11904: 0xA0E7,
	21025 - 11904: 0xCA6E,
	21028 - 11904: 0xA750,
	21029 - 11904: 0xA74F,
	21030 - 11904: 0xFAB1,
	21031 - 11904: 0x89A6,
	21032 - 11904: 0xA753,
	21033 - 11904: 0xA751,
	21034 - 11904: 0xA752,
	21038 - 11904: 0xA8ED,
	21040 - 11904: 0xA8EC,
	21041 - 11904: 0xCBD4,
	21042 - 11904: 0xCBD1,
	21043 - 11904: 0xCBD2,
	21044 - 11904: 0x9EFA,
	21045 - 11904: 0xCBD0,
	21046 - 11904: 0xA8EE,
	21047 - 11904: 0xA8EA,
	21048 - 11904: 0xA8E9,
	21050 - 11904: 0xA8EB,
	21051 - 11904: 0xA8E8,
	21052 - 11904: 0xFAB2,
	21057 - 11904: 0xA8EF,
	21059 - 11904: 0xAB63,
	21060 - 11904: 0xCDF0,
	21062 - 11904: 0xCBD3,
	21063 - 11904: 0xAB68,
	21065 - 11904: 0xCDF1,
	21066 - 11904: 0xAB64,
	21067 - 11904: 0xAB67,
	21068 - 11904: 0xAB66,
	21069 - 11904: 0xAB65,
	21070 - 11904: 0xAB62,
	21071 - 11904: 0x87BC,
	21074 - 11904: 0xD0E8,
	21076 - 11904: 0xADE7,
	21077 - 11904: 0xD0EB,
	21078 - 11904: 0xADE5,
	21079 - 11904: 0xFAB4,
	21081 - 11904: 0x92C4,
	21082 - 11904: 0xD0E7,
	21083 - 11904: 0xADE8,
	21084 - 11904: 0xADE6,
	21085 - 11904: 0xADE9,
	21086 - 11904: 0xD0E9,
	21087 - 11904: 0xD0EA,
	21088 - 11904: 0x9F6F,
	21089 - 11904: 0xD0E6,
	21090 - 11904: 0xD0EC,
	21096 - 11904: 0x8BB0,
	21097 - 11904: 0xB3D1,
	21098 - 11904: 0xB0C5,
	21099 - 11904: 0xD469,
	21100 - 11904: 0xD46B,
	21101 - 11904: 0xD46A,
	21102 - 11904: 0xD46C,
	21103 - 11904: 0xB0C6,
	21106 - 11904: 0xB3CE,
	21107 - 11904: 0x9FAC,
	21108 - 11904: 0xB3CF,
	21109 - 11904: 0xB3D0,
	21111 - 11904: 0xB6D0,
	21112 - 11904: 0xDCC7,
	21113 - 11904: 0x89E3,
	21114 - 11904: 0xDCC6,
	21115 - 11904: 0xDCC8,
	21116 - 11904: 0xDCC9,
	21117 - 11904: 0xB6D1,
	21119 - 11904: 0xB6CF,
	21120 - 11904: 0xE141,
	21121 - 11904: 0xE142,
	21122 - 11904: 0xB9BB,
	21123 - 11904: 0xB9BA,
	21124 - 11904: 0xE35A,
	21127 - 11904: 0xBC40,
	21128 - 11904: 0xBC41,
	21129 - 11904: 0xBC42,
	21130 - 11904: 0xBC44,
	21131 - 11904: 0xE4F2,
	21132 - 11904: 0xE4F3,
	21133 - 11904: 0xBC43,
	21135 - 11904: 0x9BD3,
	21136 - 11904: 0x89E4,
	21137 - 11904: 0xBEAF,
	21139 - 11904: 0xBEB0,
	21140 - 11904: 0xFAB5,
	21142 - 11904: 0xF1ED,
	21143 - 11904: 0xF5C3,
	21144 - 11904: 0xF5C2,
	21145 - 11904: 0xF7D1,
	21146 - 11904: 0x9FD5,
	21147 - 11904: 0xA44F,
	21151 - 11904: 0xA55C,
	21152 - 11904: 0xA55B,
	21153 - 11904: 0x8955,
	21155 - 11904: 0xA648,
	21156 - 11904: 0x92C5,
	21158 - 11904: 0xC9C0,
	21160 - 11904: 0x8956,
	21161 - 11904: 0xA755,
	21162 - 11904: 0xA756,
	21163 - 11904: 0xA754,
	21164 - 11904: 0xA757,
	21165 - 11904: 0xCA6F,
	21166 - 11904: 0xCA70,
	21173 - 11904: 0xFAB3,
	21177 - 11904: 0xFAB6,
	21179 - 11904: 0xA8F1,
	21180 - 11904: 0xCBD5,
	21182 - 11904: 0xA8F0,
	21184 - 11904: 0xCDF2,
	21185 - 11904: 0xAB6C,
	21186 - 11904: 0xCDF3,
	21187 - 11904: 0xAB6B,
	21189 - 11904: 0xFAB7,
	21191 - 11904: 0xAB69,
	21193 - 11904: 0xAB6A,
	21196 - 11904: 0x9EDC,
	21197 - 11904: 0xD0ED,
	21200 - 11904: 0xFBC4,
	21201 - 11904: 0x9F71,
	21202 - 11904: 0xB0C7,
	21203 - 11904: 0xD46E,
	21205 - 11904: 0xB0CA,
	21206 - 11904: 0xD46D,
	21207 - 11904: 0xB1E5,
	21208 - 11904: 0xB0C9,
	21209 - 11904: 0xB0C8,
	21211 - 11904: 0xB3D4,
	21213 - 11904: 0xB3D3,
	21214 - 11904: 0xB3D2,
	21215 - 11904: 0xB6D2,
	21216 - 11904: 0xFABA,
	21217 - 11904: 0x92C7,
	21218 - 11904: 0xB6D5,
	21219 - 11904: 0xB6D6,
	21220 - 11904: 0xB6D4,
	21222 - 11904: 0xB6D3,
	21225 - 11904: 0xE143,
	21227 - 11904: 0xE144,
	21231 - 11904: 0xE4F5,
	21232 - 11904: 0xBC45,
	21233 - 11904: 0xE4F4,
	21235 - 11904: 0xBEB1,
	21236 - 11904: 0xECBF,
	21237 - 11904: 0xC079,
	21239 - 11904: 0xF1EE,
	21240 - 11904: 0xC455,
	21241 - 11904: 0xC6C6,
	21242 - 11904: 0xA463,
	21243 - 11904: 0xA4C3,
	21244 - 11904: 0xC956,
	21246 - 11904: 0xA4C4,
	21247 - 11904: 0xA4C5,
	21249 - 11904: 0x9A4C,
	21253 - 11904: 0xFABD,
	21254 - 11904: 0xA55E,
	21256 - 11904: 0xA649,
	21257 - 11904: 0xCA71,
	21258 - 11904: 0xCBD6,
	21259 - 11904: 0xCBD7,
	21261 - 11904: 0xAB6D,
	21262 - 11904: 0xD0EE,
	21263 - 11904: 0xB0CC,
	21264 - 11904: 0xB0CB,
	21265 - 11904: 0xD863,
	21266 - 11904: 0xD862,
	21269 - 11904: 0xA450,
	21270 - 11904: 0xA4C6,
	21271 - 11904: 0xA55F,
	21273 - 11904: 0xB0CD,
	21274 - 11904: 0xC943,
	21276 - 11904: 0xC96C,
	21277 - 11904: 0xA560,
	21279 - 11904: 0xC9C2,
	21280 - 11904: 0xA64B,
	21281 - 11904: 0xA64A,
	21282 - 11904: 0xC9C1,
	21283 - 11904: 0xA758,
	21284 - 11904: 0x8C68,
	21287 - 11904: 0x89E5,
	21290 - 11904: 0xADEA,
	21292 - 11904: 0x9F7D,
	21293 - 11904: 0xD46F,
	21295 - 11904: 0xB6D7,
	21296 - 11904: 0xE145,
	21297 - 11904: 0xB9BC,
	21298 - 11904: 0xA0A9,
	21299 - 11904: 0xFAC4,
	21300 - 11904: 0xE8FA,
	21303 - 11904: 0xF3FD,
	21304 - 11904: 0xC6C7,
	21305 - 11904: 0xA4C7,
	21307 - 11904: 0x8957,
	21308 - 11904: 0xCBD8,
	21309 - 11904: 0xCDF4,
	21310 - 11904: 0xB0D0,
	21311 - 11904: 0xB0CE,
	21312 - 11904: 0xB0CF,
	21313 - 11904: 0xA451,
	21314 - 11904: 0xFAAA,
	21315 - 11904: 0xA464,
	21316 - 11904: 0xFAC5,
	21317 - 11904: 0xA4CA,
	21319 - 11904: 0xA4C9,
	21320 - 11904: 0xA4C8,
	21321 - 11904: 0xA563,
	21322 - 11904: 0xA562,
	21324 - 11904: 0xC96D,
	21325 - 11904: 0xC9C3,
	21326 - 11904: 0x8958,
	21329 - 11904: 0xA8F5,
	21330 - 11904: 0xA8F2,
	21331 - 11904: 0xA8F4,
	21332 - 11904: 0xA8F3,
	21335 - 11904: 0xAB6E,
	21338 - 11904: 0xB3D5,
	21340 - 11904: 0xA452,
	21341 - 11904: 0x8BE3,
	21342 - 11904: 0xA4CB,
	21343 - 11904: 0x8B61,
	21344 - 11904: 0xA565,
	21345 - 11904: 0xA564,
	21347 - 11904: 0xCA72,
	21348 - 11904: 0x9AF1,
	21350 - 11904: 0xA8F6,
	21351 - 11904: 0x9EB7,
	21353 - 11904: 0xC6C8,
	21356 - 11904: 0xC957,
	21357 - 11904: 0xFAD1,
	21358 - 11904: 0xA567,
	21359 - 11904: 0xA566,
	21360 - 11904: 0xA64C,
	21361 - 11904: 0xA64D,
	21362 - 11904: 0xCA73,
	21363 - 11904: 0xA759,
	21364 - 11904: 0xFAD2,
	21365 - 11904: 0xA75A,
	21367 - 11904: 0xA8F7,
	21368 - 11904: 0xA8F8,
	21369 - 11904: 0xA8F9,
	21371 - 11904: 0xAB6F,
	21372 - 11904: 0xCDF5,
	21373 - 11904: 0x9EBA,
	21374 - 11904: 0xFAD4,
	21375 - 11904: 0xFAD5,
	21378 - 11904: 0xC944,
	21380 - 11904: 0xA4CC,
	21386 - 11904: 0xC9C4,
	21390 - 11904: 0xCA74,
	21391 - 11904: 0xCA75,
	21394 - 11904: 0xCBD9,
	21395 - 11904: 0xFAD9,
	21396 - 11904: 0xCBDA,
	21398 - 11904: 0xCDF7,
	21399 - 11904: 0xCDF6,
	21400 - 11904: 0xCDF9,
	21401 - 11904: 0xCDF8,
	21402 - 11904: 0xAB70,
	21404 - 11904: 0xD470,
	21405 - 11904: 0xADED,
	21406 - 11904: 0xD0EF,
	21407 - 11904: 0xADEC,
	21408 - 11904: 0xFADB,
	21410 - 11904: 0x9CE0,
	21412 - 11904: 0xD864,
	21413 - 11904: 0xB3D6,
	21414 - 11904: 0xFBF7,
	21415 - 11904: 0xD865,
	21416 - 11904: 0xFBFA,
	21417 - 11904: 0x89E7,
	21418 - 11904: 0xA07A,
	21419 - 11904: 0xFADC,
	21420 - 11904: 0xE146,
	21421 - 11904: 0xB9BD,
	21422 - 11904: 0xFADD,
	21424 - 11904: 0x89E9,
	21426 - 11904: 0xBC46,
	21428 - 11904: 0xF1EF,
	21430 - 11904: 0xC6C9,
	21433 - 11904: 0xC958,
	21435 - 11904: 0xA568,
	21441 - 11904: 0xFAE2,
	21442 - 11904: 0x89EB,
	21443 - 11904: 0xB0D1,
	21445 - 11904: 0xFAE3,
	21448 - 11904: 0xA453,
	21449 - 11904: 0xA465,
	21450 - 11904: 0xA4CE,
	21451 - 11904: 0xA4CD,
	21452 - 11904: 0x90C8,
	21453 - 11904: 0xA4CF,
	21456 - 11904: 0x92DA,
	21457 - 11904: 0x8959,
	21458 - 11904: 0x9CF5,
	21460 - 11904: 0xA8FB,
	21462 - 11904: 0xA8FA,
	21463 - 11904: 0xA8FC,
	21464 - 11904: 0x895A,
	21465 - 11904: 0xFAE7,
	21466 - 11904: 0x9FA2,
	21467 - 11904: 0xAB71,
	21471 - 11904: 0xADEE,
	21472 - 11904: 0xFAEA,
	21473 - 11904: 0xE8FB,
	21474 - 11904: 0xC24F,
	21475 - 11904: 0xA466,
	21476 - 11904: 0xA56A,
	21477 - 11904: 0xA579,
	21478 - 11904: 0xA574,
	21480 - 11904: 0xA56F,
	21481 - 11904: 0xA56E,
	21482 - 11904: 0xA575,
	21483 - 11904: 0xA573,
	21484 - 11904: 0xA56C,
	21485 - 11904: 0xA57A,
	21486 - 11904: 0xA56D,
	21487 - 11904: 0xA569,
	21488 - 11904: 0xA578,
	21489 - 11904: 0xA577,
	21490 - 11904: 0xA576,
	21491 - 11904: 0xA56B,
	21493 - 11904: 0xA572,
	21494 - 11904: 0xFAED,
	21495 - 11904: 0x8FAD,
	21496 - 11904: 0xA571,
	21499 - 11904: 0xA57B,
	21500 - 11904: 0xA570,
	21502 - 11904: 0xFB59,
	21505 - 11904: 0xA653,
	21507 - 11904: 0xA659,
	21508 - 11904: 0xA655,
	21510 - 11904: 0xA65B,
	21511 - 11904: 0xC9C5,
	21512 - 11904: 0xA658,
	21513 - 11904: 0xA64E,
	21514 - 11904: 0xA651,
	21515 - 11904: 0xA654,
	21516 - 11904: 0xA650,
	21517 - 11904: 0xA657,
	21518 - 11904: 0xA65A,
	21519 - 11904: 0xA64F,
	21520 - 11904: 0xA652,
	21521 - 11904: 0xA656,
	21522 - 11904: 0xA65C,
	21523 - 11904: 0xFAEF,
	21524 - 11904: 0x96EF,
	21526 - 11904: 0x9DEC,
	21528 - 11904: 0xCA7E,
	21529 - 11904: 0xCA7B,
	21530 - 11904: 0x9DCA,
	21531 - 11904: 0xA767,
	21532 - 11904: 0xCA7C,
	21533 - 11904: 0xA75B,
	21534 - 11904: 0xA75D,
	21535 - 11904: 0xA775,
	21536 - 11904: 0xA770,
	21537 - 11904: 0xFD6D,
	21539 - 11904: 0x89EC,
	21540 - 11904: 0xCAA5,
	21541 - 11904: 0xCA7D,
	21542 - 11904: 0xA75F,
	21543 - 11904: 0xA761,
	21544 - 11904: 0xCAA4,
	21545 - 11904: 0xA768,
	21546 - 11904: 0xCA78,
	21547 - 11904: 0xA774,
	21548 - 11904: 0xA776,
	21549 - 11904: 0xA75C,
	21550 - 11904: 0xA76D,
	21551 - 11904: 0xFB44,
	21552 - 11904: 0xCA76,
	21553 - 11904: 0xA773,
	21554 - 11904: 0x9DE2,
	21555 - 11904: 0xA764,
	21556 - 11904: 0x8C75,
	21557 - 11904: 0xA76E,
	21558 - 11904: 0xA76F,
	21559 - 11904: 0xCA77,
	21560 - 11904: 0xA76C,
	21561 - 11904: 0xA76A,
	21563 - 11904: 0xA76B,
	21564 - 11904: 0xA771,
	21565 - 11904: 0xCAA1,
	21566 - 11904: 0xA75E,
	21568 - 11904: 0xA772,
	21569 - 11904: 0xCAA3,
	21570 - 11904: 0xA766,
	21571 - 11904: 0xA763,
	21573 - 11904: 0xCA7A,
	21574 - 11904: 0xA762,
	21575 - 11904: 0xCAA6,
	21576 - 11904: 0xA765,
	21578 - 11904: 0xA769,
	21579 - 11904: 0x9EC0,
	21580 - 11904: 0x87C5,
	21581 - 11904: 0x9E56,
	21582 - 11904: 0xA760,
	21583 - 11904: 0xCAA2,
	21588 - 11904: 0xCA79,
	21600 - 11904: 0xCBEB,
	21601 - 11904: 0xCBEA,
	21602 - 11904: 0xA94F,
	21603 - 11904: 0xCBED,
	21604 - 11904: 0xCBEF,
	21605 - 11904: 0xCBE4,
	21606 - 11904: 0xCBE7,
	21607 - 11904: 0xCBEE,
	21608 - 11904: 0xA950,
	21609 - 11904: 0x9F79,
	21610 - 11904: 0x9AC7,
	21611 - 11904: 0xCBE1,
	21612 - 11904: 0xCBE5,
	21613 - 11904: 0xFAF4,
	21615 - 11904: 0xCBE9,
	21616 - 11904: 0xCE49,
	21617 - 11904: 0xA94B,
	21618 - 11904: 0xCE4D,
	21619 - 11904: 0xA8FD,
	21620 - 11904: 0xCBE6,
	21621 - 11904: 0xA8FE,
	21622 - 11904: 0xA94C,
	21623 - 11904: 0xA945,
	21624 - 11904: 0xA941,
	21626 - 11904: 0xCBE2,
	21627 - 11904: 0xA944,
	21628 - 11904: 0xA949,
	21629 - 11904: 0xA952,
	21630 - 11904: 0xCBE3,
	21631 - 11904: 0xCBDC,
	21632 - 11904: 0xA943,
	21633 - 11904: 0xCBDD,
	21634 - 11904: 0xCBDF,
	21636 - 11904: 0xA946,
	21637 - 11904: 0x98A1,
	21638 - 11904: 0xA948,
	21639 - 11904: 0xCBDB,
	21640 - 11904: 0xCBE0,
	21643 - 11904: 0xA951,
	21644 - 11904: 0xA94D,
	21645 - 11904: 0xCBE8,
	21646 - 11904: 0xA953,
	21647 - 11904: 0xFAF8,
	21648 - 11904: 0xA94A,
	21649 - 11904: 0xCBDE,
	21650 - 11904: 0xA947,
	21651 - 11904: 0x89F0,
	21652 - 11904: 0x9E47,
	21653 - 11904: 0xA942,
	21654 - 11904: 0xA940,
	21655 - 11904: 0x9DF7,
	21656 - 11904: 0xCBEC,
	21658 - 11904: 0xA94E,
	21660 - 11904: 0x9FD3,
	21662 - 11904: 0x9ACA,
	21664 - 11904: 0xCE48,
	21665 - 11904: 0xCDFB,
	21666 - 11904: 0xCE4B,
	21667 - 11904: 0x89F1,
	21668 - 11904: 0xFAF9,
	21669 - 11904: 0xCDFD,
	21670 - 11904: 0xAB78,
	21671 - 11904: 0xABA8,
	21672 - 11904: 0xAB74,
	21673 - 11904: 0xABA7,
	21674 - 11904: 0xAB7D,
	21675 - 11904: 0xABA4,
	21676 - 11904: 0xAB72,
	21677 - 11904: 0xCDFC,
	21678 - 11904: 0xCE43,
	21679 - 11904: 0xABA3,
	21680 - 11904: 0xCE4F,
	21681 - 11904: 0xABA5,
	21682 - 11904: 0x8E5A,
	21683 - 11904: 0xAB79,
	21684 - 11904: 0x89F2,
	21686 - 11904: 0xCE45,
	21687 - 11904: 0xCE42,
	21688 - 11904: 0xAB77,
	21689 - 11904: 0x89F3,
	21690 - 11904: 0xCDFA,
	21691 - 11904: 0xABA6,
	21692 - 11904: 0xCE4A,
	21693 - 11904: 0xAB7C,
	21694 - 11904: 0xCE4C,
	21695 - 11904: 0xABA9,
	21696 - 11904: 0xAB73,
	21697 - 11904: 0xAB7E,
	21698 - 11904: 0xAB7B,
	21699 - 11904: 0xCE40,
	21700 - 11904: 0xABA1,
	21701 - 11904: 0xCE46,
	21702 - 11904: 0xCE47,
	21703 - 11904: 0xAB7A,
	21704 - 11904: 0xABA2,
	21705 - 11904: 0xAB76,
	21707 - 11904: 0x925D,
	21708 - 11904: 0x8B51,
	21709 - 11904: 0x92E0,
	21710 - 11904: 0xAB75,
	21711 - 11904: 0xCDFE,
	21712 - 11904: 0x89F4,
	21718 - 11904: 0xCE44,
	21722 - 11904: 0x9FD4,
	21726 - 11904: 0xCE4E,
	21728 - 11904: 0xD144,
	21729 - 11904: 0xADFB,
	21730 - 11904: 0xD0F1,
	21731 - 11904: 0x8A79,
	21732 - 11904: 0xD0F6,
	21733 - 11904: 0xADF4,
	21734 - 11904: 0xAE40,
	21735 - 11904: 0xD0F4,
	21736 - 11904: 0xADEF,
	21737 - 11904: 0xADF9,
	21738 - 11904: 0xADFE,
	21739 - 11904: 0xD0FB,
	21741 - 11904: 0xADFA,
	21742 - 11904: 0xADFD,
	21743 - 11904: 0x89F5,
	21745 - 11904: 0xD0FE,
	21746 - 11904: 0xADF5,
	21747 - 11904: 0xD0F5,
	21751 - 11904: 0xD142,
	21752 - 11904: 0xD143,
	21754 - 11904: 0xADF7,
	21755 - 11904: 0xD141,
	21756 - 11904: 0xADF3,
	21757 - 11904: 0xAE43,
	21759 - 11904: 0xD0F8,
	21761 - 11904: 0xADF1,
	21762 - 11904: 0x97A7,
	21763 - 11904: 0xD146,
	21764 - 11904: 0xD0F9,
	21765 - 11904: 0xD0FD,
	21766 - 11904: 0xADF6,
	21767 - 11904: 0xAE42,
	21768 - 11904: 0xD0FA,
	21769 - 11904: 0xADFC,
	21770 - 11904: 0xD140,
	21771 - 11904: 0xD147,
	21772 - 11904: 0xD4A1,
	21773 - 11904: 0x93BA,
	21774 - 11904: 0xD145,
	21775 - 11904: 0xAE44,
	21776 - 11904: 0xADF0,
	21777 - 11904: 0xD0FC,
	21778 - 11904: 0xD0F3,
	21779 - 11904: 0x9E58,
	21780 - 11904: 0xADF8,
	21783 - 11904: 0xD0F2,
	21784 - 11904: 0x89F6,
	21786 - 11904: 0xD0F7,
	21790 - 11904: 0x9E57,
	21795 - 11904: 0x89F7,
	21797 - 11904: 0x8A41,
	21798 - 11904: 0xD0F0,
	21799 - 11904: 0xAE41,
	21800 - 11904: 0x89F8,
	21802 - 11904: 0xD477,
	21803 - 11904: 0xFAF1,
	21804 - 11904: 0xB0E4,
	21805 - 11904: 0xD4A7,
	21806 - 11904: 0xB0E2,
	21807 - 11904: 0xB0DF,
	21808 - 11904: 0xD47C,
	21809 - 11904: 0xB0DB,
	21810 - 11904: 0xD4A2,
	21811 - 11904: 0xB0E6,
	21812 - 11904: 0xD476,
	21813 - 11904: 0xD47B,
	21814 - 11904: 0xD47A,
	21815 - 11904: 0xADF2,
	21816 - 11904: 0xB0E1,
	21817 - 11904: 0xD4A5,
	21819 - 11904: 0xD4A8,
	21820 - 11904: 0xD473,
	21822 - 11904: 0xB3E8,
	21823 - 11904: 0x89FA,
	21824 - 11904: 0xD4A9,
	21825 - 11904: 0xB0E7,
	21827 - 11904: 0xB0D9,
	21828 - 11904: 0xB0D6,
	21829 - 11904: 0xD47E,
	21830 - 11904: 0xB0D3,
	21831 - 11904: 0xFB42,
	21832 - 11904: 0xD4A6,
	21833 - 11904: 0xFABF,
	21834 - 11904: 0xB0DA,
	21835 - 11904: 0xD4AA,
	21837 - 11904: 0xD474,
	21838 - 11904: 0xD4A4,
	21839 - 11904: 0xB0DD,
	21840 - 11904: 0xD475,
	21841 - 11904: 0xD478,
	21842 - 11904: 0xD47D,
	21843 - 11904: 0xFBA3,
	21845 - 11904: 0xB0DE,
	21846 - 11904: 0xB0DC,
	21847 - 11904: 0xB0E8,
	21852 - 11904: 0xB0E3,
	21853 - 11904: 0xFAF7,
	21854 - 11904: 0xB0D7,
	21855 - 11904: 0xB1D2,
	21857 - 11904: 0xB0D8,
	21858 - 11904: 0xD479,
	21859 - 11904: 0xB0E5,
	21860 - 11904: 0xB0E0,
	21861 - 11904: 0xD4A3,
	21862 - 11904: 0xB0D5,
	21865 - 11904: 0x9E4E,
	21866 - 11904: 0xB0D4,
	21867 - 11904: 0x94DC,
	21873 - 11904: 0x95DA,
	21874 - 11904: 0x9DF8,
	21875 - 11904: 0x9F6A,
	21877 - 11904: 0xD471,
	21878 - 11904: 0xD472,
	21879 - 11904: 0xD86A,
	21881 - 11904: 0x8AB7,
	21883 - 11904: 0xB3D7,
	21884 - 11904: 0xB3DA,
	21885 - 11904: 0xD875,
	21886 - 11904: 0xB3EE,
	21887 - 11904: 0xD878,
	21888 - 11904: 0xB3D8,
	21889 - 11904: 0xD871,
	21890 - 11904: 0xB3DE,
	21891 - 11904: 0xB3E4,
	21892 - 11904: 0xB5BD,
	21894 - 11904: 0xFB46,
	21895 - 11904: 0xB3E2,
	21896 - 11904: 0xD86E,
	21897 - 11904: 0xB3EF,
	21898 - 11904: 0xB3DB,
	21899 - 11904: 0xB3E3,
	21900 - 11904: 0xD876,
	21901 - 11904: 0xDCD7,
	21902 - 11904: 0xD87B,
	21903 - 11904: 0xD86F,
	21904 - 11904: 0x8A46,
	21905 - 11904: 0xD866,
	21906 - 11904: 0xD873,
	21907 - 11904: 0xD86D,
	21908 - 11904: 0xB3E1,
	21909 - 11904: 0xD879,
	21912 - 11904: 0xB3DD,
	21913 - 11904: 0xB3F1,
	21914 - 11904: 0xB3EA,
	21916 - 11904: 0xB3DF,
	21917 - 11904: 0xB3DC,
	21919 - 11904: 0xB3E7,
	21921 - 11904: 0xD87A,
	21922 - 11904: 0xD86C,
	21923 - 11904: 0xD872,
	21924 - 11904: 0xD874,
	21925 - 11904: 0xD868,
	21926 - 11904: 0xD877,
	21927 - 11904: 0xB3D9,
	21928 - 11904: 0xD867,
	21929 - 11904: 0xFB47,
	21930 - 11904: 0xB3E0,
	21931 - 11904: 0xB3F0,
	21932 - 11904: 0xB3EC,
	21933 - 11904: 0xD869,
	21934 - 11904: 0xB3E6,
	21936 - 11904: 0x9148,
	21937 - 11904: 0xB3ED,
	21938 - 11904: 0xB3E9,
	21939 - 11904: 0xB3E5,
	21940 - 11904: 0x92DE,
	21941 - 11904: 0xD870,
	21945 - 11904: 0x8B53,
	21946 - 11904: 0x9DF6,
	21947 - 11904: 0xB3EB,
	21948 - 11904: 0x9BDA,
	21951 - 11904: 0xDCD5,
	21952 - 11904: 0xDCD1,
	21953 - 11904: 0x9D7E,
	21954 - 11904: 0xDCE0,
	21955 - 11904: 0xDCCA,
	21956 - 11904: 0xDCD3,
	21957 - 11904: 0xB6E5,
	21958 - 11904: 0xB6E6,
	21959 - 11904: 0xB6DE,
	21960 - 11904: 0xDCDC,
	21961 - 11904: 0xB6E8,
	21962 - 11904: 0xDCCF,
	21963 - 11904: 0xDCCE,
	21964 - 11904: 0xDCCC,
	21965 - 11904: 0xDCDE,
	21966 - 11904: 0xB6DC,
	21967 - 11904: 0xDCD8,
	21968 - 11904: 0xDCCD,
	21969 - 11904: 0xB6DF,
	21970 - 11904: 0xDCD6,
	21971 - 11904: 0xB6DA,
	21972 - 11904: 0xDCD2,
	21973 - 11904: 0xDCD9,
	21974 - 11904: 0xDCDB,
	21975 - 11904: 0x89FD,
	21976 - 11904: 0x99E4,
	21977 - 11904: 0xDCDF,
	21978 - 11904: 0xB6E3,
	21979 - 11904: 0xDCCB,
	21980 - 11904: 0xB6DD,
	21981 - 11904: 0xDCD0,
	21982 - 11904: 0x9E43,
	21983 - 11904: 0xB6D8,
	21985 - 11904: 0xB6E4,
	21986 - 11904: 0xDCDA,
	21987 - 11904: 0xB6E0,
	21988 - 11904: 0xB6E1,
	21989 - 11904: 0xB6E7,
	21990 - 11904: 0xB6DB,
	21991 - 11904: 0xA25F,
	21992 - 11904: 0xB6D9,
	21993 - 11904: 0xDCD4,
	21994 - 11904: 0x9DE9,
	21996 - 11904: 0x8F52,
	21999 - 11904: 0xB6E2,
	22000 - 11904: 0x9DF5,
	22001 - 11904: 0x9DF0,
	22002 - 11904: 0xDCDD,
	22005 - 11904: 0x99E7,
	22006 - 11904: 0xB9CD,
	22007 - 11904: 0xB9C8,
	22009 - 11904: 0xE155,
	22010 - 11904: 0xE151,
	22011 - 11904: 0x8BBD,
	22012 - 11904: 0xE14B,
	22013 - 11904: 0xB9C2,
	22014 - 11904: 0xB9BE,
	22015 - 11904: 0xE154,
	22016 - 11904: 0xB9BF,
	22017 - 11904: 0xE14E,
	22018 - 11904: 0xE150,
	22020 - 11904: 0xE153,
	22021 - 11904: 0xFB48,
	22022 - 11904: 0xB9C4,
	22024 - 11904: 0xB9CB,
	22025 - 11904: 0xB9C5,
	22028 - 11904: 0xE149,
	22029 - 11904: 0xB9C6,
	22030 - 11904: 0xB9C7,
	22031 - 11904: 0xE14C,
	22032 - 11904: 0xB9CC,
	22033 - 11904: 0x9FB7,
	22034 - 11904: 0xE14A,
	22035 - 11904: 0xE14F,
	22036 - 11904: 0xB9C3,
	22037 - 11904: 0xE148,
	22038 - 11904: 0xB9C9,
	22039 - 11904: 0xB9C1,
	22043 - 11904: 0xB9C0,
	22044 - 11904: 0xE14D,
	22045 - 11904: 0xE152,
	22046 - 11904: 0x9DD0,
	22047 - 11904: 0xB9CA,
	22048 - 11904: 0x9FEB,
	22049 - 11904: 0x8DA9,
	22050 - 11904: 0x9DCF,
	22051 - 11904: 0x98E1,
	22053 - 11904: 0x9DE5,
	22055 - 11904: 0xE147,
	22057 - 11904: 0xBC4D,
	22058 - 11904: 0xE547,
	22060 - 11904: 0xE544,
	22061 - 11904: 0x9DC8,
	22062 - 11904: 0xBC47,
	22063 - 11904: 0xBC53,
	22064 - 11904: 0xBC54,
	22066 - 11904: 0xBC4A,
	22067 - 11904: 0xE542,
	22068 - 11904: 0xBC4C,
	22069 - 11904: 0xE4F9,
	22070 - 11904: 0xBC52,
	22071 - 11904: 0xFB4F,
	22072 - 11904: 0xE546,
	22073 - 11904: 0xBC49,
	22074 - 11904: 0xE548,
	22075 - 11904: 0xBC48,
	22077 - 11904: 0xE543,
	22078 - 11904: 0xE545,
	22079 - 11904: 0xBC4B,
	22080 - 11904: 0xE541,
	22081 - 11904: 0xE4FA,
	22082 - 11904: 0xE4F7,
	22083 - 11904: 0x9DEB,
	22085 - 11904: 0xD86B,
	22086 - 11904: 0xE4FD,
	22088 - 11904: 0xE4F6,
	22089 - 11904: 0xE4FC,
	22090 - 11904: 0xE4FB,
	22092 - 11904: 0xE4F8,
	22093 - 11904: 0xFB54,
	22094 - 11904: 0xBC4F,
	22095 - 11904: 0xFB55,
	22096 - 11904: 0x9AA2,
	22098 - 11904: 0x8AD6,
	22099 - 11904: 0xBC4E,
	22100 - 11904: 0x9A5F,
	22103 - 11904: 0xBC50,
	22104 - 11904: 0xE4FE,
	22105 - 11904: 0xBEB2,
	22106 - 11904: 0xE540,
	22109 - 11904: 0x9EF5,
	22110 - 11904: 0xE945,
	22112 - 11904: 0xE8FD,
	22113 - 11904: 0x8FB7,
	22114 - 11904: 0xBEBE,
	22115 - 11904: 0xE942,
	22116 - 11904: 0xBEB6,
	22117 - 11904: 0xBEBA,
	22118 - 11904: 0xE941,
	22120 - 11904: 0xBEB9,
	22121 - 11904: 0xBEB5,
	22122 - 11904: 0xBEB8,
	22123 - 11904: 0xBEB3,
	22124 - 11904: 0xBEBD,
	22125 - 11904: 0xE943,
	22126 - 11904: 0xE8FE,
	22127 - 11904: 0xBEBC,
	22128 - 11904: 0xE8FC,
	22129 - 11904: 0xBEBB,
	22130 - 11904: 0xE944,
	22131 - 11904: 0xE940,
	22132 - 11904: 0xBC51,
	22134 - 11904: 0xBEBF,
	22135 - 11904: 0xE946,
	22136 - 11904: 0xBEB7,
	22137 - 11904: 0xBEB4,
	22138 - 11904: 0x9AD2,
	22139 - 11904: 0x9E6A,
	22140 - 11904: 0x9EE8,
	22142 - 11904: 0xECC6,
	22143 - 11904: 0xECC8,
	22144 - 11904: 0xC07B,
	22145 - 11904: 0xECC9,
	22146 - 11904: 0xECC7,
	22147 - 11904: 0xECC5,
	22148 - 11904: 0xECC4,
	22149 - 11904: 0xC07D,
	22150 - 11904: 0xECC3,
	22151 - 11904: 0xC07E,
	22153 - 11904: 0x8BBF,
	22154 - 11904: 0x91C2,
	22155 - 11904: 0x9D62,
	22156 - 11904: 0xECC1,
	22157 - 11904: 0xECC2,
	22158 - 11904: 0xC07A,
	22159 - 11904: 0xC0A1,
	22160 - 11904: 0xC07C,
	22162 - 11904: 0x9260,
	22163 - 11904: 0xECC0,
	22165 - 11904: 0xC250,
	22167 - 11904: 0xEFBC,
	22168 - 11904: 0xEFBA,
	22169 - 11904: 0xEFBF,
	22170 - 11904: 0xEFBD,
	22172 - 11904: 0xEFBB,
	22173 - 11904: 0xEFBE,
	22174 - 11904: 0x925E,
	22175 - 11904: 0x91C1,
	22177 - 11904: 0x8AC5,
	22180 - 11904: 0x97A3,
	22181 - 11904: 0xC360,
	22182 - 11904: 0xF1F2,
	22183 - 11904: 0xF1F3,
	22184 - 11904: 0xC456,
	22186 - 11904: 0xF1F4,
	22187 - 11904: 0xF1F0,
	22188 - 11904: 0xF1F5,
	22189 - 11904: 0xF1F1,
	22190 - 11904: 0xC251,
	22191 - 11904: 0x8B6C,
	22193 - 11904: 0x8D7E,
	22194 - 11904: 0xF3FE,
	22195 - 11904: 0xF441,
	22196 - 11904: 0xC459,
	22197 - 11904: 0xF440,
	22198 - 11904: 0xC458,
	22199 - 11904: 0xC457,
	22201 - 11904: 0x9C54,
	22204 - 11904: 0xC45A,
	22205 - 11904: 0xF5C5,
	22206 - 11904: 0xF5C6,
	22207 - 11904: 0x9DBD,
	22208 - 11904: 0xC4DA,
	22209 - 11904: 0xC4D9,
	22210 - 11904: 0xC4DB,
	22211 - 11904: 0xF5C4,
	22213 - 11904: 0xF6D8,
	22214 - 11904: 0xF6D7,
	22216 - 11904: 0xC56D,
	22217 - 11904: 0xC56F,
	22218 - 11904: 0xC56E,
	22219 - 11904: 0xF6D9,
	22220 - 11904: 0xC5C8,
	22221 - 11904: 0xF8A6,
	22225 - 11904: 0xC5F1,
	22227 - 11904: 0xF8A5,
	22228 - 11904: 0xF8EE,
	22230 - 11904: 0x9CC5,
	22231 - 11904: 0xC949,
	22234 - 11904: 0xA57D,
	22235 - 11904: 0xA57C,
	22237 - 11904: 0xA65F,
	22238 - 11904: 0xA65E,
	22239 - 11904: 0xC9C7,
	22240 - 11904: 0xA65D,
	22241 - 11904: 0xC9C6,
	22242 - 11904: 0x895B,
	22244 - 11904: 0xA779,
	22245 - 11904: 0xCAA9,
	22247 - 11904: 0xCAA8,
	22250 - 11904: 0xA777,
	22251 - 11904: 0xA77A,
	22253 - 11904: 0xFB5C,
	22254 - 11904: 0xCAA7,
	22255 - 11904: 0xFB5B,
	22256 - 11904: 0xA778,
	22257 - 11904: 0xFB57,
	22263 - 11904: 0xCBF0,
	22265 - 11904: 0xCBF1,
	22266 - 11904: 0xA954,
	22267 - 11904: 0x8765,
	22269 - 11904: 0x98C7,
	22271 - 11904: 0xABAA,
	22272 - 11904: 0xFB5A,
	22273 - 11904: 0xD148,
	22274 - 11904: 0xD149,
	22275 - 11904: 0xAE45,
	22276 - 11904: 0xAE46,
	22279 - 11904: 0xD4AC,
	22280 - 11904: 0xB0E9,
	22281 - 11904: 0xB0EB,
	22282 - 11904: 0xD4AB,
	22283 - 11904: 0xB0EA,
	22284 - 11904: 0xD87C,
	22285 - 11904: 0xB3F2,
	22290 - 11904: 0xB6E9,
	22291 - 11904: 0xB6EA,
	22292 - 11904: 0xDCE1,
	22293 - 11904: 0x9CEE,
	22294 - 11904: 0xB9CF,
	22296 - 11904: 0xB9CE,
	22298 - 11904: 0xE549,
	22299 - 11904: 0xE948,
	22300 - 11904: 0xE947,
	22301 - 11904: 0x92E2,
	22302 - 11904: 0xF96B,
	22303 - 11904: 0xA467,
	22304 - 11904: 0xC959,
	22306 - 11904: 0xC96E,
	22307 - 11904: 0xC96F,
	22312 - 11904: 0xA662,
	22313 - 11904: 0xA666,
	22314 - 11904: 0xC9C9,
	22316 - 11904: 0xA664,
	22317 - 11904: 0xA663,
	22318 - 11904: 0xC9C8,
	22319 - 11904: 0xA665,
	22320 - 11904: 0xA661,
	22322 - 11904: 0x94A7,
	22323 - 11904: 0xA660,
	22324 - 11904: 0xC9CA,
	22331 - 11904: 0xA7A6,
	22333 - 11904: 0x8CCC,
	22334 - 11904: 0xA7A3,
	22335 - 11904: 0x9BD4,
	22336 - 11904: 0xA77D,
	22337 - 11904: 0xCAAA,
	22338 - 11904: 0xFB64,
	22339 - 11904: 0xFB76,
	22341 - 11904: 0xCAAB,
	22342 - 11904: 0xFB60,
	22343 - 11904: 0xA7A1,
	22345 - 11904: 0xCAAD,
	22346 - 11904: 0xA77B,
	22347 - 11904: 0xCAAE,
	22348 - 11904: 0xCAAC,
	22349 - 11904: 0xA77E,
	22350 - 11904: 0xA7A2,
	22351 - 11904: 0xA7A5,
	22352 - 11904: 0xA7A4,
	22353 - 11904: 0xA77C,
	22354 - 11904: 0xCAAF,
	22356 - 11904: 0x99E5,
	22359 - 11904: 0x9AC2,
	22363 - 11904: 0x91FB,
	22367 - 11904: 0xA073,
	22369 - 11904: 0xA959,
	22370 - 11904: 0xCBFE,
	22372 - 11904: 0xA95B,
	22374 - 11904: 0xA95A,
	22375 - 11904: 0x9F72,
	22376 - 11904: 0xCC40,
	22377 - 11904: 0xA958,
	22378 - 11904: 0xA957,
	22379 - 11904: 0xCBF5,
	22381 - 11904: 0xCBF4,
	22383 - 11904: 0xCBF2,
	22384 - 11904: 0xCBF7,
	22385 - 11904: 0xCBF6,
	22386 - 11904: 0xCBF3,
	22387 - 11904: 0xCBFC,
	22388 - 11904: 0xCBFD,
	22389 - 11904: 0xCBFA,
	22390 - 11904: 0xCBF8,
	22391 - 11904: 0xA956,
	22394 - 11904: 0x9FCC,
	22395 - 11904: 0xCBFB,
	22396 - 11904: 0xA95C,
	22397 - 11904: 0xCC41,
	22398 - 11904: 0x98A5,
	22399 - 11904: 0x92E8,
	22400 - 11904: 0xCBF9,
	22402 - 11904: 0xABAB,
	22403 - 11904: 0xA955,
	22408 - 11904: 0x9BBC,
	22410 - 11904: 0x96F3,
	22411 - 11904: 0xABAC,
	22412 - 11904: 0xCE54,
	22413 - 11904: 0x92E7,
	22415 - 11904: 0xCE5A,
	22416 - 11904: 0xFC67,
	22419 - 11904: 0xABB2,
	22420 - 11904: 0xCE58,
	22421 - 11904: 0xCE5E,
	22423 - 11904: 0xCE55,
	22424 - 11904: 0xCE59,
	22425 - 11904: 0xCE5B,
	22426 - 11904: 0xCE5D,
	22427 - 11904: 0xCE57,
	22428 - 11904: 0x8B7D,
	22429 - 11904: 0xCE56,
	22430 - 11904: 0xCE51,
	22431 - 11904: 0xCE52,
	22432 - 11904: 0xABAD,
	22433 - 11904: 0x9BF4,
	22434 - 11904: 0xABAF,
	22435 - 11904: 0xABAE,
	22436 - 11904: 0xCE53,
	22437 - 11904: 0xCE5C,
	22439 - 11904: 0x9EF7,
	22442 - 11904: 0x9EC1,
	22446 - 11904: 0xABB1,
	22451 - 11904: 0x87C3,
	22452 - 11904: 0x996F,
	22453 - 11904: 0xCE50,
	22454 - 11904: 0xD153,
	22456 - 11904: 0xD152,
	22457 - 11904: 0xD157,
	22458 - 11904: 0xD14E,
	22459 - 11904: 0x96F1,
	22460 - 11904: 0xD151,
	22461 - 11904: 0xD150,
	22462 - 11904: 0x8E41,
	22463 - 11904: 0xD154,
	22465 - 11904: 0xD158,
	22466 - 11904: 0xAE47,
	22467 - 11904: 0xAE4A,
	22468 - 11904: 0x954A,
	22470 - 11904: 0xD14F,
	22471 - 11904: 0xD155,
	22472 - 11904: 0x97E6,
	22475 - 11904: 0xAE49,
	22476 - 11904: 0xD14A,
	22478 - 11904: 0xABB0,
	22479 - 11904: 0xD4BA,
	22480 - 11904: 0xD156,
	22482 - 11904: 0xD14D,
	22484 - 11904: 0xAE48,
	22485 - 11904: 0xD14C,
	22487 - 11904: 0x96F5,
	22492 - 11904: 0xD4B1,
	22493 - 11904: 0x92E6,
	22494 - 11904: 0x9F42,
	22495 - 11904: 0xB0EC,
	22496 - 11904: 0xB0F0,
	22497 - 11904: 0xD4C1,
	22498 - 11904: 0xD4AF,
	22499 - 11904: 0xD4BD,
	22500 - 11904: 0xB0F1,
	22501 - 11904: 0xD4BF,
	22502 - 11904: 0xFB67,
	22503 - 11904: 0xD4C5,
	22505 - 11904: 0xD4C9,
	22508 - 11904: 0xD4C0,
	22509 - 11904: 0xD4B4,
	22510 - 11904: 0xD4BC,
	22511 - 11904: 0x99A9,
	22512 - 11904: 0xD4CA,
	22513 - 11904: 0xD4C8,
	22514 - 11904: 0xD4BE,
	22515 - 11904: 0xD4B9,
	22516 - 11904: 0xD4B2,
	22517 - 11904: 0xD8A6,
	22518 - 11904: 0xD4B0,
	22519 - 11904: 0xB0F5,
	22520 - 11904: 0xD4B7,
	22521 - 11904: 0xB0F6,
	22522 - 11904: 0xB0F2,
	22523 - 11904: 0xD4AD,
	22524 - 11904: 0xD4C3,
	22525 - 11904: 0xD4B5,
	22526 - 11904: 0xFAE6,
	22528 - 11904: 0xD4B3,
	22529 - 11904: 0xD4C6,
	22530 - 11904: 0xB0F3,
	22531 - 11904: 0xFB69,
	22532 - 11904: 0xD4CC,
	22533 - 11904: 0xB0ED,
	22534 - 11904: 0xB0EF,
	22535 - 11904: 0xD4BB,
	22536 - 11904: 0xD4B6,
	22537 - 11904: 0xAE4B,
	22538 - 11904: 0xB0EE,
	22539 - 11904: 0xD4B8,
	22540 - 11904: 0xD4C7,
	22541 - 11904: 0xD4CB,
	22542 - 11904: 0xD4C2,
	22544 - 11904: 0xD4C4,
	22546 - 11904: 0x97E5,
	22548 - 11904: 0xD4AE,
	22552 - 11904: 0x87C8,
	22553 - 11904: 0xD8A1,
	22555 - 11904: 0xD8AA,
	22556 - 11904: 0xD8A9,
	22557 - 11904: 0xB3FA,
	22558 - 11904: 0xD8A2,
	22560 - 11904: 0xB3FB,
	22561 - 11904: 0xB3F9,
	22562 - 11904: 0x967D,
	22563 - 11904: 0xD8A4,
	22564 - 11904: 0xB3F6,
	22565 - 11904: 0xD8A8,
	22566 - 11904: 0xFB6C,
	22567 - 11904: 0xD8A3,
	22568 - 11904: 0xD8A5,
	22569 - 11904: 0xD87D,
	22570 - 11904: 0xB3F4,
	22572 - 11904: 0xD8B2,
	22573 - 11904: 0xD8B1,
	22574 - 11904: 0xD8AE,
	22575 - 11904: 0xB3F3,
	22576 - 11904: 0xB3F7,
	22577 - 11904: 0xB3F8,
	22578 - 11904: 0xD14B,
	22579 - 11904: 0xD8AB,
	22580 - 11904: 0xB3F5,
	22581 - 11904: 0xB0F4,
	22582 - 11904: 0xD8AD,
	22583 - 11904: 0xD87E,
	22584 - 11904: 0xD8B0,
	22585 - 11904: 0xD8AF,
	22586 - 11904: 0x99A2,
	22587 - 11904: 0xD8B3,
	22589 - 11904: 0xDCEF,
	22591 - 11904: 0xD8AC,
	22592 - 11904: 0x9ABB,
	22596 - 11904: 0x9A65,
	22599 - 11904: 0x944E,
	22600 - 11904: 0xD8A7,
	22601 - 11904: 0xDCE7,
	22602 - 11904: 0xB6F4,
	22603 - 11904: 0xB6F7,
	22604 - 11904: 0xB6F2,
	22605 - 11904: 0xDCE6,
	22606 - 11904: 0xDCEA,
	22607 - 11904: 0xDCE5,
	22609 - 11904: 0xB6EC,
	22610 - 11904: 0xB6F6,
	22611 - 11904: 0xDCE2,
	22612 - 11904: 0xB6F0,
	22613 - 11904: 0xDCE9,
	22615 - 11904: 0xB6EE,
	22616 - 11904: 0xB6ED,
	22617 - 11904: 0xDCEC,
	22618 - 11904: 0xB6EF,
	22619 - 11904: 0xDCEE,
	22620 - 11904: 0xFB6E,
	22621 - 11904: 0xDCEB,
	22622 - 11904: 0xB6EB,
	22623 - 11904: 0x99DF,
	22626 - 11904: 0xB6F5,
	22627 - 11904: 0xDCF0,
	22628 - 11904: 0xDCE4,
	22629 - 11904: 0xDCED,
	22632 - 11904: 0xDCE3,
	22633 - 11904: 0x98E3,
	22635 - 11904: 0xB6F1,
	22636 - 11904: 0x9254,
	22637 - 11904: 0xB6F3,
	22639 - 11904: 0xDCE8,
	22641 - 11904: 0xDCF1,
	22642 - 11904: 0x967B,
	22643 - 11904: 0x8AAF,
	22644 - 11904: 0xE15D,
	22645 - 11904: 0xB9D0,
	22646 - 11904: 0xE163,
	22649 - 11904: 0xB9D5,
	22650 - 11904: 0xE15F,
	22651 - 11904: 0xE166,
	22652 - 11904: 0xE157,
	22653 - 11904: 0xB9D7,
	22654 - 11904: 0xB9D1,
	22655 - 11904: 0xE15C,
	22656 - 11904: 0xBC55,
	22657 - 11904: 0xE15B,
	22658 - 11904: 0xE164,
	22659 - 11904: 0xB9D2,
	22661 - 11904: 0xB9D6,
	22662 - 11904: 0xE15A,
	22663 - 11904: 0xE160,
	22664 - 11904: 0xE165,
	22665 - 11904: 0xE156,
	22666 - 11904: 0xB9D4,
	22667 - 11904: 0xE15E,
	22670 - 11904: 0xE162,
	22671 - 11904: 0xE168,
	22672 - 11904: 0xE158,
	22673 - 11904: 0xE161,
	22674 - 11904: 0x8C77,
	22675 - 11904: 0xB9D3,
	22676 - 11904: 0xE167,
	22678 - 11904: 0x87B0,
	22680 - 11904: 0xE159,
	22681 - 11904: 0x8BAF,
	22682 - 11904: 0x9EBD,
	22684 - 11904: 0xBC59,
	22685 - 11904: 0xE54B,
	22686 - 11904: 0xBC57,
	22687 - 11904: 0xBC56,
	22688 - 11904: 0xE54D,
	22689 - 11904: 0xE552,
	22691 - 11904: 0xE54E,
	22693 - 11904: 0xE551,
	22694 - 11904: 0xBC5C,
	22695 - 11904: 0x9EE6,
	22696 - 11904: 0xBEA5,
	22697 - 11904: 0xBC5B,
	22698 - 11904: 0xFB6F,
	22699 - 11904: 0xE54A,
	22700 - 11904: 0xE550,
	22702 - 11904: 0xBC5A,
	22703 - 11904: 0xE54F,
	22704 - 11904: 0x8EE1,
	22705 - 11904: 0xE54C,
	22707 - 11904: 0xBC58,
	22709 - 11904: 0x9B7D,
	22710 - 11904: 0x9C7E,
	22714 - 11904: 0xE94D,
	22715 - 11904: 0xF9D9,
	22716 - 11904: 0xE94F,
	22717 - 11904: 0xE94A,
	22718 - 11904: 0xBEC1,
	22719 - 11904: 0xE94C,
	22721 - 11904: 0xBEC0,
	22722 - 11904: 0xE94E,
	22725 - 11904: 0xBEC3,
	22726 - 11904: 0xE950,
	22727 - 11904: 0xBEC2,
	22728 - 11904: 0xE949,
	22729 - 11904: 0xE94B,
	22731 - 11904: 0x92EA,
	22734 - 11904: 0xC0A5,
	22735 - 11904: 0xECCC,
	22736 - 11904: 0x8C78,
	22737 - 11904: 0xC0A4,
	22738 - 11904: 0xECCD,
	22739 - 11904: 0xC0A3,
	22740 - 11904: 0xECCB,
	22741 - 11904: 0xC0A2,
	22742 - 11904: 0xECCA,
	22744 - 11904: 0xC253,
	22745 - 11904: 0xC252,
	22746 - 11904: 0xF1F6,
	22747 - 11904: 0xF1F8,
	22748 - 11904: 0xFB72,
	22749 - 11904: 0xF1F7,
	22750 - 11904: 0xC361,
	22751 - 11904: 0xC362,
	22752 - 11904: 0xFB71,
	22754 - 11904: 0xC363,
	22755 - 11904: 0xF442,
	22756 - 11904: 0xC45B,
	22759 - 11904: 0xF7D3,
	22760 - 11904: 0xF7D2,
	22761 - 11904: 0xC5F2,
	22763 - 11904: 0xA468,
	22764 - 11904: 0xA4D0,
	22767 - 11904: 0xA7A7,
	22768 - 11904: 0x895C,
	22770 - 11904: 0x98F0,
	22771 - 11904: 0x96F2,
	22772 - 11904: 0xCE5F,
	22777 - 11904: 0xB3FC,
	22778 - 11904: 0xB3FD,
	22779 - 11904: 0xFB74,
	22780 - 11904: 0xDCF2,
	22781 - 11904: 0xB9D8,
	22782 - 11904: 0xE169,
	22783 - 11904: 0xE553,
	22786 - 11904: 0x8BC1,
	22787 - 11904: 0xC95A,
	22788 - 11904: 0x895D,
	22789 - 11904: 0x89DE,
	22790 - 11904: 0xCAB0,
	22791 - 11904: 0x895E,
	22794 - 11904: 0xC6CA,
	22796 - 11904: 0xCC42,
	22797 - 11904: 0xCE60,
	22798 - 11904: 0xD159,
	22799 - 11904: 0xAE4C,
	22801 - 11904: 0xFE42,
	22802 - 11904: 0xF1F9,
	22804 - 11904: 0xC4DC,
	22805 - 11904: 0xA469,
	22806 - 11904: 0xA57E,
	22807 - 11904: 0xC970,
	22809 - 11904: 0xA667,
	22810 - 11904: 0xA668,
	22812 - 11904: 0xA95D,
	22813 - 11904: 0x8768,
	22815 - 11904: 0xFB7B,
	22816 - 11904: 0xB0F7,
	22818 - 11904: 0xB9DA,
	22820 - 11904: 0xB9DB,
	22821 - 11904: 0xB9D9,
	22823 - 11904: 0xA46A,
	22825 - 11904: 0xA4D1,
	22826 - 11904: 0xA4D3,
	22827 - 11904: 0xA4D2,
	22828 - 11904: 0xC95B,
	22829 - 11904: 0xA4D4,
	22830 - 11904: 0xA5A1,
	22831 - 11904: 0xC971,
	22833 - 11904: 0xA5A2,
	22834 - 11904: 0x895F,
	22836 - 11904: 0x8960,
	22839 - 11904: 0xA669,
	22840 - 11904: 0xA66A,
	22844 - 11904: 0xC9CB,
	22846 - 11904: 0xA7A8,
	22848 - 11904: 0xCAB1,
	22852 - 11904: 0xA961,
	22853 - 11904: 0xCC43,
	22855 - 11904: 0xA95F,
	22856 - 11904: 0xA960,
	22857 - 11904: 0xA95E,
	22858 - 11904: 0xD15A,
	22862 - 11904: 0xABB6,
	22863 - 11904: 0xABB5,
	22864 - 11904: 0xABB7,
	22865 - 11904: 0xABB4,
	22867 - 11904: 0xCE61,
	22868 - 11904: 0xA962,
	22869 - 11904: 0xABB3,
	22871 - 11904: 0xAE4D,
	22872 - 11904: 0xAE4E,
	22874 - 11904: 0xAE4F,
	22876 - 11904: 0xD4CD,
	22880 - 11904: 0xB3FE,
	22881 - 11904: 0xD8B4,
	22882 - 11904: 0xB0F8,
	22885 - 11904: 0x9BCD,
	22887 - 11904: 0xB6F8,
	22889 - 11904: 0xB9DD,
	22890 - 11904: 0xB9DC,
	22891 - 11904: 0xE16A,
	22893 - 11904: 0xBC5D,
	22894 - 11904: 0xBEC4,
	22896 - 11904: 0xEFC0,
	22897 - 11904: 0xF6DA,
	22898 - 11904: 0xF7D4,
	22899 - 11904: 0xA46B,
	22900 - 11904: 0xA5A3,
	22901 - 11904: 0x9DD3,
	22902 - 11904: 0xA5A4,
	22903 - 11904: 0xC9D1,
	22904 - 11904: 0xA66C,
	22905 - 11904: 0xA66F,
	22907 - 11904: 0xC9CF,
	22908 - 11904: 0xC9CD,
	22909 - 11904: 0xA66E,
	22910 - 11904: 0xC9D0,
	22911 - 11904: 0xC9D2,
	22912 - 11904: 0xC9CC,
	22913 - 11904: 0xA671,
	22914 - 11904: 0xA670,
	22915 - 11904: 0xA66D,
	22916 - 11904: 0xA66B,
	22917 - 11904: 0xC9CE,
	22921 - 11904: 0x984C,
	22922 - 11904: 0xA7B3,
	22925 - 11904: 0xA7B0,
	22926 - 11904: 0xCAB6,
	22927 - 11904: 0xCAB9,
	22928 - 11904: 0xCAB8,
	22930 - 11904: 0xA7AA,
	22931 - 11904: 0xA7B2,
	22932 - 11904: 0x9752,
	22934 - 11904: 0xA7AF,
	22935 - 11904: 0xCAB5,
	22936 - 11904: 0xCAB3,
	22937 - 11904: 0xA7AE,
	22938 - 11904: 0x95C3,
	22941 - 11904: 0xA7A9,
	22942 - 11904: 0xA7AC,
	22943 - 11904: 0x9BB6,
	22944 - 11904: 0xCAB4,
	22945 - 11904: 0xCABB,
	22946 - 11904: 0xCAB7,
	22947 - 11904: 0xA7AD,
	22948 - 11904: 0xA7B1,
	22949 - 11904: 0xA7B4,
	22950 - 11904: 0xCAB2,
	22951 - 11904: 0xCABA,
	22952 - 11904: 0xA7AB,
	22956 - 11904: 0x9AB9,
	22958 - 11904: 0xA967,
	22959 - 11904: 0xA96F,
	22960 - 11904: 0x97B3,
	22961 - 11904: 0xCC4F,
	22962 - 11904: 0xCC48,
	22963 - 11904: 0xA970,
	22964 - 11904: 0xCC53,
	22965 - 11904: 0xCC44,
	22966 - 11904: 0xCC4B,
	22967 - 11904: 0x9F74,
	22968 - 11904: 0x92F1,
	22969 - 11904: 0xA966,
	22970 - 11904: 0xCC45,
	22971 - 11904: 0xA964,
	22972 - 11904: 0xCC4C,
	22973 - 11904: 0xCC50,
	22974 - 11904: 0xA963,
	22975 - 11904: 0x8CFA,
	22976 - 11904: 0xCC51,
	22977 - 11904: 0xCC4A,
	22979 - 11904: 0xCC4D,
	22980 - 11904: 0x97DF,
	22981 - 11904: 0xA972,
	22982 - 11904: 0xA969,
	22983 - 11904: 0xCC54,
	22984 - 11904: 0xCC52,
	22985 - 11904: 0xFBA6,
	22986 - 11904: 0xA96E,
	22987 - 11904: 0xA96C,
	22988 - 11904: 0xCC49,
	22989 - 11904: 0xA96B,
	22990 - 11904: 0xCC47,
	22991 - 11904: 0xCC46,
	22992 - 11904: 0xA96A,
	22993 - 11904: 0xA968,
	22994 - 11904: 0xA971,
	22995 - 11904: 0xA96D,
	22996 - 11904: 0xA965,
	22998 - 11904: 0xCC4E,
	23000 - 11904: 0xABB9,
	23001 - 11904: 0xFBAB,
	23002 - 11904: 0xABC0,
	23003 - 11904: 0xCE6F,
	23004 - 11904: 0xABB8,
	23005 - 11904: 0xCE67,
	23006 - 11904: 0xCE63,
	23008 - 11904: 0xCE73,
	23009 - 11904: 0xCE62,
	23011 - 11904: 0xABBB,
	23012 - 11904: 0xCE6C,
	23013 - 11904: 0xABBE,
	23014 - 11904: 0xABC1,
	23016 - 11904: 0xABBC,
	23017 - 11904: 0xCE70,
	23018 - 11904: 0xABBF,
	23019 - 11904: 0x9877,
	23020 - 11904: 0xAE56,
	23021 - 11904: 0xCE76,
	23022 - 11904: 0xCE64,
	23023 - 11904: 0x9854,
	23024 - 11904: 0x95C5,
	23025 - 11904: 0xCE66,
	23026 - 11904: 0xCE6D,
	23027 - 11904: 0xCE71,
	23028 - 11904: 0xCE75,
	23029 - 11904: 0xCE72,
	23030 - 11904: 0xCE6B,
	23031 - 11904: 0xCE6E,
	23032 - 11904: 0x9D55,
	23033 - 11904: 0xFBB2,
	23034 - 11904: 0xCE68,
	23035 - 11904: 0xABC3,
	23036 - 11904: 0xCE6A,
	23037 - 11904: 0xCE69,
	23038 - 11904: 0xCE74,
	23039 - 11904: 0xABBA,
	23040 - 11904: 0xCE65,
	23041 - 11904: 0xABC2,
	23042 - 11904: 0x957E,
	23043 - 11904: 0xABBD,
	23049 - 11904: 0xAE5C,
	23050 - 11904: 0xD162,
	23051 - 11904: 0x9742,
	23052 - 11904: 0xAE5B,
	23053 - 11904: 0x94E6,
	23055 - 11904: 0xD160,
	23057 - 11904: 0xAE50,
	23058 - 11904: 0x92F5,
	23059 - 11904: 0xAE55,
	23061 - 11904: 0xD15F,
	23062 - 11904: 0xD15C,
	23063 - 11904: 0xD161,
	23064 - 11904: 0xAE51,
	23065 - 11904: 0xD15B,
	23066 - 11904: 0x8CC5,
	23067 - 11904: 0xAE54,
	23068 - 11904: 0xAE52,
	23070 - 11904: 0xD163,
	23071 - 11904: 0xAE53,
	23072 - 11904: 0xAE57,
	23073 - 11904: 0x92FD,
	23075 - 11904: 0xAE58,
	23076 - 11904: 0xFBA2,
	23077 - 11904: 0xAE5A,
	23079 - 11904: 0x9C51,
	23081 - 11904: 0xAE59,
	23082 - 11904: 0x94E9,
	23083 - 11904: 0x985C,
	23084 - 11904: 0x92F0,
	23085 - 11904: 0xD15D,
	23086 - 11904: 0xD15E,
	23091 - 11904: 0xD164,
	23093 - 11904: 0xD4D4,
	23094 - 11904: 0xB0F9,
	23095 - 11904: 0xD8C2,
	23096 - 11904: 0xD4D3,
	23097 - 11904: 0xD4E6,
	23100 - 11904: 0xB140,
	23101 - 11904: 0x944C,
	23102 - 11904: 0xD4E4,
	23104 - 11904: 0xB0FE,
	23105 - 11904: 0xB0FA,
	23106 - 11904: 0xD4ED,
	23107 - 11904: 0xD4DD,
	23108 - 11904: 0xD4E0,
	23109 - 11904: 0x916B,
	23110 - 11904: 0xB143,
	23111 - 11904: 0xD4EA,
	23112 - 11904: 0xD4E2,
	23113 - 11904: 0xB0FB,
	23114 - 11904: 0xB144,
	23116 - 11904: 0xD4E7,
	23117 - 11904: 0xD4E5,
	23120 - 11904: 0xD4D6,
	23121 - 11904: 0xD4EB,
	23122 - 11904: 0xD4DF,
	23123 - 11904: 0xD4DA,
	23124 - 11904: 0x8B78,
	23125 - 11904: 0xD4D0,
	23126 - 11904: 0xD4EC,
	23127 - 11904: 0xD4DC,
	23128 - 11904: 0xD4CF,
	23129 - 11904: 0x94E2,
	23130 - 11904: 0xB142,
	23131 - 11904: 0xD4E1,
	23132 - 11904: 0xD4EE,
	23133 - 11904: 0xD4DE,
	23134 - 11904: 0xD4D2,
	23135 - 11904: 0xD4D7,
	23136 - 11904: 0xD4CE,
	23137 - 11904: 0x984F,
	23138 - 11904: 0xB141,
	23139 - 11904: 0xFBB5,
	23140 - 11904: 0xD4DB,
	23141 - 11904: 0xD4D8,
	23142 - 11904: 0xB0FC,
	23143 - 11904: 0xD4D1,
	23144 - 11904: 0x9271,
	23145 - 11904: 0xD4E9,
	23146 - 11904: 0xB0FD,
	23147 - 11904: 0x9365,
	23148 - 11904: 0xD4D9,
	23149 - 11904: 0xD4D5,
	23150 - 11904: 0x985B,
	23152 - 11904: 0xD4E8,
	23153 - 11904: 0x9850,
	23159 - 11904: 0xFBB8,
	23160 - 11904: 0xD8BB,
	23161 - 11904: 0x97BC,
	23162 - 11904: 0xD8B8,
	23163 - 11904: 0xD8C9,
	23164 - 11904: 0xD8BD,
	23165 - 11904: 0xD8CA,
	23166 - 11904: 0x92F3,
	23167 - 11904: 0xB442,
	23169 - 11904: 0x9340,
	23170 - 11904: 0x984D,
	23171 - 11904: 0xD8C6,
	23172 - 11904: 0xD8C3,
	23174 - 11904: 0x9572,
	23176 - 11904: 0xFDEF,
	23178 - 11904: 0xD8C4,
	23179 - 11904: 0xD8C7,
	23180 - 11904: 0xD8CB,
	23182 - 11904: 0xD4E3,
	23183 - 11904: 0xD8CD,
	23184 - 11904: 0xDD47,
	23185 - 11904: 0xFDC1,
	23186 - 11904: 0xB443,
	23187 - 11904: 0xD8CE,
	23188 - 11904: 0xD8B6,
	23189 - 11904: 0xD8C0,
	23190 - 11904: 0xFBBA,
	23191 - 11904: 0xD8C5,
	23193 - 11904: 0x92EB,
	23194 - 11904: 0xB441,
	23195 - 11904: 0xB444,
	23196 - 11904: 0xD8CC,
	23197 - 11904: 0xD8CF,
	23198 - 11904: 0xD8BA,
	23199 - 11904: 0xD8B7,
	23200 - 11904: 0xFC73,
	23201 - 11904: 0x97B7,
	23202 - 11904: 0xD8B9,
	23204 - 11904: 0x876F,
	23205 - 11904: 0xD8BE,
	23206 - 11904: 0xD8BC,
	23207 - 11904: 0xB445,
	23209 - 11904: 0xD8C8,
	23211 - 11904: 0xFBB4,
	23212 - 11904: 0xD8BF,
	23214 - 11904: 0xD8C1,
	23215 - 11904: 0xD8B5,
	23216 - 11904: 0xDCFA,
	23217 - 11904: 0xDCF8,
	23218 - 11904: 0xB742,
	23219 - 11904: 0xB740,
	23220 - 11904: 0xDD43,
	23221 - 11904: 0xDCF9,
	23222 - 11904: 0xDD44,
	23223 - 11904: 0xDD40,
	23224 - 11904: 0xDCF7,
	23225 - 11904: 0xDD46,
	23226 - 11904: 0xDCF6,
	23227 - 11904: 0xDCFD,
	23228 - 11904: 0xB6FE,
	23229 - 11904: 0xB6FD,
	23230 - 11904: 0xB6FC,
	23231 - 11904: 0xDCFB,
	23232 - 11904: 0xDD41,
	23233 - 11904: 0xB6F9,
	23234 - 11904: 0xB741,
	23235 - 11904: 0x90A7,
	23236 - 11904: 0xDCF4,
	23238 - 11904: 0xDCFE,
	23239 - 11904: 0xDCF3,
	23240 - 11904: 0xDCFC,
	23241 - 11904: 0xB6FA,
	23242 - 11904: 0xDD42,
	23243 - 11904: 0xDCF5,
	23244 - 11904: 0xB6FB,
	23245 - 11904: 0xDD45,
	23246 - 11904: 0x9741,
	23247 - 11904: 0x92F4,
	23249 - 11904: 0x8772,
	23251 - 11904: 0xFBBC,
	23253 - 11904: 0xE16E,
	23254 - 11904: 0xB9E2,
	23255 - 11904: 0xB9E1,
	23256 - 11904: 0xB9E3,
	23257 - 11904: 0xE17A,
	23258 - 11904: 0xE170,
	23259 - 11904: 0xE176,
	23260 - 11904: 0xE16B,
	23261 - 11904: 0xE179,
	23262 - 11904: 0xE178,
	23263 - 11904: 0xE17C,
	23264 - 11904: 0xE175,
	23265 - 11904: 0xB9DE,
	23266 - 11904: 0xE174,
	23267 - 11904: 0xB9E4,
	23268 - 11904: 0x9577,
	23269 - 11904: 0xE16D,
	23270 - 11904: 0xB9DF,
	23272 - 11904: 0xE17B,
	23273 - 11904: 0xB9E0,
	23274 - 11904: 0xE16F,
	23275 - 11904: 0xE172,
	23276 - 11904: 0xE177,
	23277 - 11904: 0xE171,
	23278 - 11904: 0xE16C,
	23280 - 11904: 0x9EE2,
	23282 - 11904: 0x8F78,
	23283 - 11904: 0xE173,
	23284 - 11904: 0xE555,
	23285 - 11904: 0xBC61,
	23286 - 11904: 0xE558,
	23287 - 11904: 0xE557,
	23288 - 11904: 0xE55A,
	23289 - 11904: 0xE55C,
	23290 - 11904: 0xF9DC,
	23291 - 11904: 0xBC5F,
	23293 - 11904: 0xE556,
	23294 - 11904: 0x9672,
	23295 - 11904: 0xE554,
	23297 - 11904: 0xE55D,
	23298 - 11904: 0xE55B,
	23299 - 11904: 0xE559,
	23301 - 11904: 0xE55F,
	23303 - 11904: 0xE55E,
	23304 - 11904: 0xBC63,
	23305 - 11904: 0xBC5E,
	23307 - 11904: 0xBC60,
	23308 - 11904: 0xBC62,
	23309 - 11904: 0x9EB5,
	23311 - 11904: 0xE560,
	23312 - 11904: 0xE957,
	23313 - 11904: 0x964B,
	23315 - 11904: 0xE956,
	23316 - 11904: 0xE955,
	23317 - 11904: 0x8CAC,
	23318 - 11904: 0xE958,
	23319 - 11904: 0xE951,
	23321 - 11904: 0xE952,
	23322 - 11904: 0xE95A,
	23323 - 11904: 0xE953,
	23325 - 11904: 0xBEC5,
	23326 - 11904: 0xE95C,
	23327 - 11904: 0xA0FA,
	23328 - 11904: 0xE95B,
	23329 - 11904: 0xE954,
	23331 - 11904: 0xECD1,
	23332 - 11904: 0xC0A8,
	23333 - 11904: 0xECCF,
	23334 - 11904: 0xECD4,
	23335 - 11904: 0xECD3,
	23336 - 11904: 0xE959,
	23338 - 11904: 0xC0A7,
	23339 - 11904: 0x9575,
	23340 - 11904: 0xECD2,
	23341 - 11904: 0xECCE,
	23342 - 11904: 0xECD6,
	23343 - 11904: 0xECD5,
	23344 - 11904: 0xC0A6,
	23346 - 11904: 0xECD0,
	23348 - 11904: 0xBEC6,
	23352 - 11904: 0xC254,
	23356 - 11904: 0xEFC1,
	23357 - 11904: 0xF1FA,
	23358 - 11904: 0xF1FB,
	23359 - 11904: 0xF1FC,
	23360 - 11904: 0xC45C,
	23361 - 11904: 0x90DA,
	23363 - 11904: 0xC45D,
	23364 - 11904: 0x9367,
	23365 - 11904: 0xF443,
	23366 - 11904: 0xFEA4,
	23367 - 11904: 0xF5C8,
	23368 - 11904: 0xF5C7,
	23370 - 11904: 0x90DF,
	23371 - 11904: 0xF6DB,
	23372 - 11904: 0xF6DC,
	23373 - 11904: 0xF7D5,
	23374 - 11904: 0xF8A7,
	23375 - 11904: 0x9354,
	23376 - 11904: 0xA46C,
	23377 - 11904: 0xA46D,
	23379 - 11904: 0xA46E,
	23380 - 11904: 0xA4D5,
	23381 - 11904: 0xA5A5,
	23382 - 11904: 0xC9D3,
	23383 - 11904: 0xA672,
	23384 - 11904: 0xA673,
	23386 - 11904: 0xA7B7,
	23387 - 11904: 0xA7B8,
	23388 - 11904: 0xA7B6,
	23389 - 11904: 0xA7B5,
	23391 - 11904: 0xA973,
	23394 - 11904: 0xCC55,
	23395 - 11904: 0xA975,
	23396 - 11904: 0xA974,
	23397 - 11904: 0xCC56,
	23398 - 11904: 0x8961,
	23400 - 11904: 0x8BB4,
	23401 - 11904: 0xABC4,
	23403 - 11904: 0xAE5D,
	23404 - 11904: 0xD165,
	23405 - 11904: 0x9DC0,
	23406 - 11904: 0xD4F0,
	23408 - 11904: 0xB145,
	23409 - 11904: 0xB447,
	23410 - 11904: 0xD4EF,
	23411 - 11904: 0xB446,
	23412 - 11904: 0x8E48,
	23413 - 11904: 0xB9E5,
	23414 - 11904: 0xFBC5,
	23415 - 11904: 0xE17D,
	23416 - 11904: 0xBEC7,
	23418 - 11904: 0xC0A9,
	23419 - 11904: 0xECD7,
	23420 - 11904: 0xFBC7,
	23421 - 11904: 0xC45E,
	23423 - 11904: 0xC570,
	23424 - 11904: 0xC6CB,
	23425 - 11904: 0xC972,
	23426 - 11904: 0xFA79,
	23427 - 11904: 0xA5A6,
	23428 - 11904: 0xC973,
	23429 - 11904: 0xA676,
	23431 - 11904: 0xA674,
	23432 - 11904: 0xA675,
	23433 - 11904: 0xA677,
	23435 - 11904: 0xA7BA,
	23436 - 11904: 0xA7B9,
	23438 - 11904: 0xCABC,
	23439 - 11904: 0xA7BB,
	23440 - 11904: 0x9E67,
	23442 - 11904: 0xCABD,
	23443 - 11904: 0xCC57,
	23445 - 11904: 0xCC58,
	23446 - 11904: 0x8CD9,
	23447 - 11904: 0xA976,
	23448 - 11904: 0xA978,
	23449 - 11904: 0xA97A,
	23450 - 11904: 0xA977,
	23451 - 11904: 0xA97B,
	23452 - 11904: 0xA979,
	23453 - 11904: 0xFBD2,
	23454 - 11904: 0x8962,
	23455 - 11904: 0x8963,
	23458 - 11904: 0xABC8,
	23459 - 11904: 0xABC5,
	23460 - 11904: 0xABC7,
	23461 - 11904: 0xABC9,
	23462 - 11904: 0xABC6,
	23463 - 11904: 0xD166,
	23464 - 11904: 0xCE77,
	23466 - 11904: 0xFC7D,
	23468 - 11904: 0xD168,
	23469 - 11904: 0xD167,
	23470 - 11904: 0xAE63,
	23472 - 11904: 0xAE5F,
	23475 - 11904: 0xAE60,
	23476 - 11904: 0xAE62,
	23477 - 11904: 0xAE64,
	23478 - 11904: 0xAE61,
	23479 - 11904: 0x8773,
	23480 - 11904: 0xAE66,
	23481 - 11904: 0xAE65,
	23487 - 11904: 0xB14A,
	23488 - 11904: 0xD4F2,
	23489 - 11904: 0xD4F1,
	23490 - 11904: 0xB149,
	23491 - 11904: 0x9F6B,
	23492 - 11904: 0xB148,
	23493 - 11904: 0xB147,
	23494 - 11904: 0xB14B,
	23495 - 11904: 0xB146,
	23498 - 11904: 0xD8D5,
	23499 - 11904: 0xD8D2,
	23500 - 11904: 0xB449,
	23501 - 11904: 0xD8D1,
	23502 - 11904: 0xD8D6,
	23504 - 11904: 0xB44B,
	23505 - 11904: 0xD8D4,
	23506 - 11904: 0xB448,
	23507 - 11904: 0xB44A,
	23508 - 11904: 0xD8D3,
	23509 - 11904: 0xFBCC,
	23510 - 11904: 0xDD48,
	23511 - 11904: 0xFEAE,
	23512 - 11904: 0xDD49,
	23513 - 11904: 0xDD4A,
	23515 - 11904: 0x876D,
	23518 - 11904: 0xB9E6,
	23519 - 11904: 0xB9EE,
	23520 - 11904: 0xE17E,
	23521 - 11904: 0xB9E8,
	23522 - 11904: 0xB9EC,
	23523 - 11904: 0xE1A1,
	23524 - 11904: 0xB9ED,
	23525 - 11904: 0xB9E9,
	23526 - 11904: 0xB9EA,
	23527 - 11904: 0xB9E7,
	23528 - 11904: 0xB9EB,
	23529 - 11904: 0xBC66,
	23530 - 11904: 0xD8D0,
	23531 - 11904: 0xBC67,
	23532 - 11904: 0xBC65,
	23534 - 11904: 0xBC64,
	23535 - 11904: 0xE95D,
	23536 - 11904: 0xBEC8,
	23537 - 11904: 0xECD8,
	23538 - 11904: 0xECD9,
	23539 - 11904: 0xFBD1,
	23541 - 11904: 0xC364,
	23542 - 11904: 0xC45F,
	23544 - 11904: 0xA46F,
	23546 - 11904: 0xA678,
	23551 - 11904: 0xFB75,
	23553 - 11904: 0xABCA,
	23555 - 11904: 0xD169,
	23556 - 11904: 0xAE67,
	23557 - 11904: 0xFBD4,
	23559 - 11904: 0xB14E,
	23560 - 11904: 0xB14D,
	23561 - 11904: 0xB14C,
	23562 - 11904: 0xB44C,
	23563 - 11904: 0xB44D,
	23564 - 11904: 0xD8D7,
	23565 - 11904: 0xB9EF,
	23566 - 11904: 0xBEC9,
	23567 - 11904: 0xA470,
	23568 - 11904: 0xC95C,
	23569 - 11904: 0xA4D6,
	23570 - 11904: 0xC974,
	23571 - 11904: 0xFBD6,
	23572 - 11904: 0xFBD8,
	23573 - 11904: 0xC9D4,
	23574 - 11904: 0xA679,
	23578 - 11904: 0xA97C,
	23580 - 11904: 0x8B5D,
	23582 - 11904: 0x934C,
	23583 - 11904: 0xDD4B,
	23584 - 11904: 0x9AE2,
	23586 - 11904: 0xA471,
	23587 - 11904: 0x8BC9,
	23588 - 11904: 0xA4D7,
	23589 - 11904: 0xC9D5,
	23592 - 11904: 0xCABE,
	23594 - 11904: 0xCABF,
	23596 - 11904: 0xA7BC,
	23600 - 11904: 0xD8D8,
	23601 - 11904: 0xB44E,
	23603 - 11904: 0xDD4C,
	23607 - 11904: 0xC0AA,
	23608 - 11904: 0xA472,
	23609 - 11904: 0xA4A8,
	23610 - 11904: 0xA4D8,
	23611 - 11904: 0xC975,
	23612 - 11904: 0xA5A7,
	23614 - 11904: 0xA7C0,
	23615 - 11904: 0xA7BF,
	23616 - 11904: 0xA7BD,
	23617 - 11904: 0xA7BE,
	23620 - 11904: 0xCC59,
	23621 - 11904: 0xA97E,
	23622 - 11904: 0xA9A1,
	23623 - 11904: 0xCC5A,
	23624 - 11904: 0xA97D,
	23625 - 11904: 0xFBDB,
	23626 - 11904: 0x9FC9,
	23627 - 11904: 0xABCE,
	23628 - 11904: 0xCE78,
	23629 - 11904: 0xABCD,
	23630 - 11904: 0xABCB,
	23631 - 11904: 0xABCC,
	23632 - 11904: 0xAE6A,
	23633 - 11904: 0xAE68,
	23635 - 11904: 0x9F44,
	23636 - 11904: 0xD16B,
	23637 - 11904: 0xAE69,
	23638 - 11904: 0xD16A,
	23640 - 11904: 0xAE5E,
	23641 - 11904: 0xD4F3,
	23644 - 11904: 0xB150,
	23645 - 11904: 0xB151,
	23646 - 11904: 0x98ED,
	23648 - 11904: 0xB14F,
	23650 - 11904: 0xB9F0,
	23651 - 11904: 0xE1A2,
	23652 - 11904: 0xBC68,
	23653 - 11904: 0xBC69,
	23655 - 11904: 0xE561,
	23656 - 11904: 0xC0AB,
	23657 - 11904: 0xEFC2,
	23658 - 11904: 0xEFC3,
	23660 - 11904: 0xC4DD,
	23661 - 11904: 0xF8A8,
	23662 - 11904: 0xC94B,
	23663 - 11904: 0xA4D9,
	23665 - 11904: 0xA473,
	23667 - 11904: 0xC977,
	23668 - 11904: 0xC976,
	23672 - 11904: 0x8CE9,
	23673 - 11904: 0xA67A,
	23674 - 11904: 0xC9D7,
	23675 - 11904: 0xC9D8,
	23676 - 11904: 0xC9D6,
	23678 - 11904: 0xC9D9,
	23685 - 11904: 0xFBDD,
	23686 - 11904: 0xCAC7,
	23688 - 11904: 0xCAC2,
	23689 - 11904: 0xCAC4,
	23690 - 11904: 0xCAC6,
	23691 - 11904: 0xCAC3,
	23692 - 11904: 0xA7C4,
	23693 - 11904: 0xCAC0,
	23695 - 11904: 0xCAC1,
	23696 - 11904: 0xA7C1,
	23697 - 11904: 0xA7C2,
	23698 - 11904: 0xCAC5,
	23699 - 11904: 0xCAC8,
	23700 - 11904: 0xA7C3,
	23701 - 11904: 0xCAC9,
	23705 - 11904: 0x8DF2,
	23706 - 11904: 0x8964,
	23708 - 11904: 0xFDF2,
	23709 - 11904: 0xCC68,
	23710 - 11904: 0x934D,
	23711 - 11904: 0xCC62,
	23712 - 11904: 0xCC5D,
	23713 - 11904: 0xA9A3,
	23714 - 11904: 0xCC65,
	23715 - 11904: 0xCC63,
	23716 - 11904: 0xCC5C,
	23717 - 11904: 0xCC69,
	23718 - 11904: 0xCC6C,
	23719 - 11904: 0xCC67,
	23720 - 11904: 0xCC60,
	23721 - 11904: 0xA9A5,
	23722 - 11904: 0xCC66,
	23723 - 11904: 0xA9A6,
	23724 - 11904: 0xCC61,
	23725 - 11904: 0xCC64,
	23726 - 11904: 0xCC5B,
	23727 - 11904: 0xCC5F,
	23728 - 11904: 0xCC6B,
	23729 - 11904: 0xA9A7,
	23731 - 11904: 0xA9A8,
	23733 - 11904: 0xCC5E,
	23734 - 11904: 0xCC6A,
	23735 - 11904: 0xA9A2,
	23736 - 11904: 0xA9A4,
	23738 - 11904: 0xFBE7,
	23745 - 11904: 0xA0F2,
	23746 - 11904: 0x9868,
	23750 - 11904: 0xCEAB,
	23751 - 11904: 0xCEA4,
	23752 - 11904: 0xCEAA,
	23753 - 11904: 0xCEA3,
	23754 - 11904: 0xCEA5,
	23755 - 11904: 0xCE7D,
	23756 - 11904: 0xCE7B,
	23758 - 11904: 0xCEAC,
	23759 - 11904: 0xCEA9,
	23760 - 11904: 0xCE79,
	23761 - 11904: 0x9F58,
	23762 - 11904: 0xABD0,
	23763 - 11904: 0xCEA7,
	23764 - 11904: 0xCEA8,
	23765 - 11904: 0x8CE6,
	23766 - 11904: 0xCEA6,
	23767 - 11904: 0xCE7C,
	23768 - 11904: 0xCE7A,
	23769 - 11904: 0xABCF,
	23770 - 11904: 0xCEA2,
	23771 - 11904: 0xCE7E,
	23774 - 11904: 0xCEA1,
	23775 - 11904: 0xCEAD,
	23781 - 11904: 0x8D73,
	23784 - 11904: 0xAE6F,
	23785 - 11904: 0xFBDE,
	23786 - 11904: 0xAE6E,
	23788 - 11904: 0xD16C,
	23789 - 11904: 0xAE6B,
	23790 - 11904: 0xD16E,
	23791 - 11904: 0xFBDF,
	23792 - 11904: 0xAE70,
	23793 - 11904: 0xD16F,
	23796 - 11904: 0xAE73,
	23797 - 11904: 0x8C48,
	23798 - 11904: 0xAE71,
	23799 - 11904: 0xD170,
	23800 - 11904: 0xCEAE,
	23801 - 11904: 0xD172,
	23803 - 11904: 0xAE6D,
	23804 - 11904: 0x8774,
	23805 - 11904: 0xAE6C,
	23807 - 11904: 0xD16D,
	23808 - 11904: 0xD171,
	23809 - 11904: 0xAE72,
	23814 - 11904: 0xB153,
	23815 - 11904: 0xB152,
	23819 - 11904: 0xD4F5,
	23820 - 11904: 0xD4F9,
	23821 - 11904: 0xD4FB,
	23822 - 11904: 0xB154,
	23823 - 11904: 0xD4FE,
	23824 - 11904: 0xFBE3,
	23825 - 11904: 0xB158,
	23826 - 11904: 0xD541,
	23828 - 11904: 0xB15A,
	23829 - 11904: 0x8DA8,
	23830 - 11904: 0xB156,
	23831 - 11904: 0xB15E,
	23832 - 11904: 0xFBE4,
	23833 - 11904: 0xB15B,
	23834 - 11904: 0xD4F7,
	23835 - 11904: 0xB155,
	23837 - 11904: 0xD4F6,
	23838 - 11904: 0xD4F4,
	23839 - 11904: 0xD543,
	23840 - 11904: 0xD4F8,
	23842 - 11904: 0xB157,
	23843 - 11904: 0xD542,
	23844 - 11904: 0xB15C,
	23845 - 11904: 0xD4FD,
	23846 - 11904: 0xD4FC,
	23847 - 11904: 0xB15D,
	23848 - 11904: 0xD4FA,
	23849 - 11904: 0xB159,
	23852 - 11904: 0x9C75,
	23854 - 11904: 0xD544,
	23855 - 11904: 0x9878,
	23856 - 11904: 0xD540,
	23857 - 11904: 0xD8E7,
	23858 - 11904: 0xD8EE,
	23859 - 11904: 0xD8E3,
	23860 - 11904: 0xB451,
	23861 - 11904: 0xD8DF,
	23862 - 11904: 0xD8EF,
	23863 - 11904: 0xD8D9,
	23864 - 11904: 0xD8EC,
	23865 - 11904: 0xD8EA,
	23866 - 11904: 0xD8E4,
	23868 - 11904: 0xD8ED,
	23869 - 11904: 0xD8E6,
	23870 - 11904: 0x8D60,
	23871 - 11904: 0xD8DE,
	23872 - 11904: 0xD8F0,
	23873 - 11904: 0xD8DC,
	23874 - 11904: 0xD8E9,
	23875 - 11904: 0xD8DA,
	23877 - 11904: 0xD8F1,
	23878 - 11904: 0xFBE5,
	23879 - 11904: 0xB452,
	23880 - 11904: 0x8D61,
	23881 - 11904: 0xD8EB,
	23882 - 11904: 0xDD4F,
	23883 - 11904: 0xD8DD,
	23884 - 11904: 0xB44F,
	23886 - 11904: 0xD8E1,
	23888 - 11904: 0xB450,
	23889 - 11904: 0xD8E0,
	23890 - 11904: 0xD8E5,
	23893 - 11904: 0xD8E2,
	23894 - 11904: 0x8D62,
	23895 - 11904: 0xA0A1,
	23897 - 11904: 0xD8E8,
	23899 - 11904: 0x9C40,
	23902 - 11904: 0xDD53,
	23906 - 11904: 0xDD56,
	23907 - 11904: 0xDD4E,
	23909 - 11904: 0xDD50,
	23911 - 11904: 0xDD55,
	23912 - 11904: 0xDD54,
	23913 - 11904: 0xB743,
	23915 - 11904: 0xD8DB,
	23916 - 11904: 0xDD52,
	23919 - 11904: 0xB744,
	23920 - 11904: 0x98AD,
	23921 - 11904: 0xDD4D,
	23922 - 11904: 0xDD51,
	23924 - 11904: 0x9EEA,
	23927 - 11904: 0xE1A9,
	23928 - 11904: 0x8CEC,
	23929 - 11904: 0xE1B0,
	23930 - 11904: 0xE1A7,
	23931 - 11904: 0x8CD4,
	23932 - 11904: 0xE1AE,
	23933 - 11904: 0xE1A5,
	23934 - 11904: 0xE1AD,
	23935 - 11904: 0xE1B1,
	23936 - 11904: 0xE1A4,
	23937 - 11904: 0xE1A8,
	23938 - 11904: 0xE1A3,
	23940 - 11904: 0xB9F1,
	23941 - 11904: 0x9CEB,
	23942 - 11904: 0xE1A6,
	23943 - 11904: 0xB9F2,
	23944 - 11904: 0xE1AC,
	23945 - 11904: 0xE1AB,
	23946 - 11904: 0xE1AA,
	23947 - 11904: 0xFBE0,
	23949 - 11904: 0xE1AF,
	23950 - 11904: 0x9F51,
	23954 - 11904: 0xE565,
	23955 - 11904: 0xE567,
	23956 - 11904: 0xBC6B,
	23957 - 11904: 0xE568,
	23959 - 11904: 0xE563,
	23961 - 11904: 0xE562,
	23962 - 11904: 0xE56C,
	23964 - 11904: 0xE56A,
	23965 - 11904: 0xBC6A,
	23966 - 11904: 0xE56D,
	23967 - 11904: 0xE564,
	23968 - 11904: 0xE569,
	23969 - 11904: 0xE56B,
	23970 - 11904: 0xE566,
	23972 - 11904: 0x8D65,
	23975 - 11904: 0xE961,
	23976 - 11904: 0xE966,
	23977 - 11904: 0xE960,
	23978 - 11904: 0xE965,
	23979 - 11904: 0x9CF1,
	23980 - 11904: 0xE95E,
	23981 - 11904: 0xE968,
	23982 - 11904: 0xE964,
	23983 - 11904: 0xE969,
	23984 - 11904: 0xE963,
	23985 - 11904: 0xE95F,
	23986 - 11904: 0xE967,
	23988 - 11904: 0xE96A,
	23989 - 11904: 0xE962,
	23990 - 11904: 0xFC58,
	23991 - 11904: 0xECDA,
	23992 - 11904: 0xC0AF,
	23993 - 11904: 0x8D66,
	23994 - 11904: 0xC0AD,
	23996 - 11904: 0xC0AC,
	23997 - 11904: 0xC0AE,
	24000 - 11904: 0xEFC4,
	24001 - 11904: 0x9654,
	24002 - 11904: 0xF172,
	24003 - 11904: 0xF1FD,
	24006 - 11904: 0xF444,
	24007 - 11904: 0xF445,
	24009 - 11904: 0xC460,
	24011 - 11904: 0xF5C9,
	24013 - 11904: 0xC4DE,
	24015 - 11904: 0xF5CA,
	24017 - 11904: 0xF6DE,
	24018 - 11904: 0xC572,
	24020 - 11904: 0xC571,
	24021 - 11904: 0xF6DD,
	24022 - 11904: 0xC5C9,
	24023 - 11904: 0xFBE8,
	24024 - 11904: 0xF7D6,
	24027 - 11904: 0xC6CC,
	24029 - 11904: 0xA474,
	24030 - 11904: 0xA67B,
	24031 - 11904: 0xC9DA,
	24032 - 11904: 0xCACA,
	24033 - 11904: 0xA8B5,
	24034 - 11904: 0xB15F,
	24037 - 11904: 0xA475,
	24038 - 11904: 0xA5AA,
	24039 - 11904: 0xA5A9,
	24040 - 11904: 0xA5A8,
	24043 - 11904: 0xA7C5,
	24046 - 11904: 0xAE74,
	24048 - 11904: 0xDD57,
	24049 - 11904: 0xA476,
	24050 - 11904: 0xA477,
	24051 - 11904: 0xA478,
	24052 - 11904: 0xA4DA,
	24053 - 11904: 0x9FCE,
	24055 - 11904: 0xABD1,
	24057 - 11904: 0xCEAF,
	24061 - 11904: 0xB453,
	24062 - 11904: 0xA479,
	24063 - 11904: 0xC95D,
	24066 - 11904: 0xA5AB,
	24067 - 11904: 0xA5AC,
	24068 - 11904: 0xC978,
	24070 - 11904: 0xA67C,
	24073 - 11904: 0xFBFC,
	24074 - 11904: 0xCACB,
	24075 - 11904: 0x9AE4,
	24076 - 11904: 0xA7C6,
	24078 - 11904: 0xCACC,
	24081 - 11904: 0xA9AE,
	24082 - 11904: 0x9F75,
	24084 - 11904: 0xCC6E,
	24085 - 11904: 0xA9AC,
	24086 - 11904: 0xA9AB,
	24087 - 11904: 0xCC6D,
	24088 - 11904: 0xA9A9,
	24089 - 11904: 0xCC6F,
	24090 - 11904: 0xA9AA,
	24091 - 11904: 0xA9AD,
	24093 - 11904: 0xABD2,
	24095 - 11904: 0xABD4,
	24096 - 11904: 0xCEB3,
	24097 - 11904: 0xCEB0,
	24098 - 11904: 0xCEB1,
	24099 - 11904: 0xCEB2,
	24100 - 11904: 0xCEB4,
	24101 - 11904: 0xABD3,
	24104 - 11904: 0xD174,
	24105 - 11904: 0xD173,
	24107 - 11904: 0xAE76,
	24109 - 11904: 0xAE75,
	24110 - 11904: 0xFBF1,
	24115 - 11904: 0xB162,
	24116 - 11904: 0xD546,
	24118 - 11904: 0xB161,
	24119 - 11904: 0xB163,
	24120 - 11904: 0xB160,
	24125 - 11904: 0xB455,
	24126 - 11904: 0xD545,
	24128 - 11904: 0xB456,
	24129 - 11904: 0xD8F3,
	24130 - 11904: 0x8D69,
	24131 - 11904: 0xB457,
	24132 - 11904: 0xD8F2,
	24133 - 11904: 0xB454,
	24136 - 11904: 0x934F,
	24138 - 11904: 0xDD5A,
	24139 - 11904: 0xDD5C,
	24140 - 11904: 0xB745,
	24141 - 11904: 0xDD5B,
	24142 - 11904: 0xDD59,
	24143 - 11904: 0xDD58,
	24147 - 11904: 0xE1B4,
	24148 - 11904: 0xB9F7,
	24149 - 11904: 0xB9F5,
	24151 - 11904: 0xB9F6,
	24152 - 11904: 0xE1B2,
	24153 - 11904: 0xE1B3,
	24155 - 11904: 0xB9F3,
	24156 - 11904: 0xE571,
	24157 - 11904: 0xE56F,
	24158 - 11904: 0x934E,
	24159 - 11904: 0xBC6D,
	24160 - 11904: 0xE570,
	24161 - 11904: 0xBC6E,
	24162 - 11904: 0xBC6C,
	24163 - 11904: 0xB9F4,
	24166 - 11904: 0xE96D,
	24167 - 11904: 0xE96B,
	24168 - 11904: 0xE96C,
	24169 - 11904: 0xE56E,
	24170 - 11904: 0xECDC,
	24171 - 11904: 0xC0B0,
	24172 - 11904: 0xECDB,
	24173 - 11904: 0xEFC5,
	24174 - 11904: 0xEFC6,
	24175 - 11904: 0xE96E,
	24176 - 11904: 0xF1FE,
	24178 - 11904: 0xA47A,
	24179 - 11904: 0xA5AD,
	24180 - 11904: 0xA67E,
	24181 - 11904: 0xFBF3,
	24182 - 11904: 0xA67D,
	24184 - 11904: 0xA9AF,
	24185 - 11904: 0xB746,
	24186 - 11904: 0xFBF4,
	24187 - 11904: 0xA4DB,
	24188 - 11904: 0xA5AE,
	24189 - 11904: 0xABD5,
	24190 - 11904: 0xB458,
	24191 - 11904: 0xC6CE,
	24192 - 11904: 0xC979,
	24194 - 11904: 0xC97A,
	24195 - 11904: 0xFBC3,
	24196 - 11904: 0xC9DC,
	24198 - 11904: 0x8965,
	24199 - 11904: 0xA7C8,
	24200 - 11904: 0xCAD0,
	24201 - 11904: 0xCACE,
	24202 - 11904: 0xA7C9,
	24203 - 11904: 0xCACD,
	24204 - 11904: 0xCACF,
	24205 - 11904: 0xCAD1,
	24207 - 11904: 0xA7C7,
	24210 - 11904: 0x8C7A,
	24213 - 11904: 0xA9B3,
	24214 - 11904: 0xA9B4,
	24215 - 11904: 0xA9B1,
	24217 - 11904: 0x8C7B,
	24218 - 11904: 0xA9B0,
	24219 - 11904: 0xCEB8,
	24220 - 11904: 0xA9B2,
	24224 - 11904: 0xABD6,
	24226 - 11904: 0xCEB7,
	24227 - 11904: 0xCEB9,
	24228 - 11904: 0xCEB6,
	24229 - 11904: 0xCEBA,
	24230 - 11904: 0xABD7,
	24231 - 11904: 0xAE79,
	24232 - 11904: 0xD175,
	24234 - 11904: 0xD177,
	24235 - 11904: 0xAE77,
	24236 - 11904: 0xD178,
	24237 - 11904: 0xAE78,
	24238 - 11904: 0xD176,
	24240 - 11904: 0xCEB5,
	24241 - 11904: 0xD547,
	24242 - 11904: 0xD54A,
	24243 - 11904: 0xD54B,
	24244 - 11904: 0xD548,
	24245 - 11904: 0xB167,
	24246 - 11904: 0xB166,
	24247 - 11904: 0xB164,
	24248 - 11904: 0xB165,
	24249 - 11904: 0xD549,
	24253 - 11904: 0x8D6A,
	24254 - 11904: 0xB168,
	24257 - 11904: 0xB45A,
	24258 - 11904: 0xB45B,
	24260 - 11904: 0xB45C,
	24261 - 11904: 0xDD5D,
	24262 - 11904: 0xDD5F,
	24263 - 11904: 0xDD61,
	24264 - 11904: 0xB748,
	24265 - 11904: 0xB747,
	24266 - 11904: 0xB459,
	24267 - 11904: 0xDD60,
	24268 - 11904: 0xDD5E,
	24269 - 11904: 0x9353,
	24270 - 11904: 0xE1B8,
	24272 - 11904: 0xFBF9,
	24273 - 11904: 0xE1B6,
	24274 - 11904: 0xE1BC,
	24275 - 11904: 0xB9F8,
	24276 - 11904: 0xE1BD,
	24277 - 11904: 0xE1BA,
	24278 - 11904: 0xB9F9,
	24279 - 11904: 0xE1B7,
	24280 - 11904: 0xE1B5,
	24281 - 11904: 0xE1BB,
	24282 - 11904: 0xBC70,
	24283 - 11904: 0xE573,
	24284 - 11904: 0xE1B9,
	24285 - 11904: 0xBC72,
	24286 - 11904: 0xE574,
	24287 - 11904: 0xBC71,
	24288 - 11904: 0xBC74,
	24289 - 11904: 0xE575,
	24290 - 11904: 0xBC6F,
	24291 - 11904: 0xBC73,
	24293 - 11904: 0xE973,
	24294 - 11904: 0xE971,
	24295 - 11904: 0xE970,
	24296 - 11904: 0xE972,
	24297 - 11904: 0xE96F,
	24300 - 11904: 0xC366,
	24302 - 11904: 0xF446,
	24303 - 11904: 0xF447,
	24305 - 11904: 0xF5CB,
	24306 - 11904: 0xF6DF,
	24307 - 11904: 0xC655,
	24308 - 11904: 0xFBFD,
	24310 - 11904: 0xA9B5,
	24311 - 11904: 0xA7CA,
	24312 - 11904: 0x9059,
	24313 - 11904: 0xFC40,
	24314 - 11904: 0xABD8,
	24315 - 11904: 0xFC41,
	24316 - 11904: 0xFC43,
	24318 - 11904: 0xA47B,
	24319 - 11904: 0xA4DC,
	24321 - 11904: 0xA5AF,
	24322 - 11904: 0xC9DD,
	24324 - 11904: 0xA7CB,
	24325 - 11904: 0xCAD2,
	24327 - 11904: 0xCEBB,
	24328 - 11904: 0xABD9,
	24330 - 11904: 0xB9FA,
	24331 - 11904: 0xA47C,
	24332 - 11904: 0x9FD8,
	24333 - 11904: 0xFC46,
	24334 - 11904: 0x9362,
	24335 - 11904: 0xA6A1,
	24338 - 11904: 0xB749,
	24339 - 11904: 0xA47D,
	24340 - 11904: 0xA4DD,
	24341 - 11904: 0xA4DE,
	24343 - 11904: 0xA5B1,
	24344 - 11904: 0xA5B0,
	24346 - 11904: 0xC9DE,
	24347 - 11904: 0xA6A2,
	24349 - 11904: 0xCAD3,
	24351 - 11904: 0xA7CC,
	24354 - 11904: 0xCC71,
	24355 - 11904: 0xCC72,
	24356 - 11904: 0xCC73,
	24357 - 11904: 0x8D6B,
	24358 - 11904: 0xA9B6,
	24359 - 11904: 0xA9B7,
	24360 - 11904: 0xCC70,
	24361 - 11904: 0xA9B8,
	24365 - 11904: 0xABDA,
	24366 - 11904: 0xCEBC,
	24368 - 11904: 0xD17A,
	24369 - 11904: 0xAE7A,
	24371 - 11904: 0xD179,
	24373 - 11904: 0xB169,
	24374 - 11904: 0xD54C,
	24375 - 11904: 0xB16A,
	24376 - 11904: 0xD54D,
	24378 - 11904: 0xFC4C,
	24379 - 11904: 0x8CFE,
	24380 - 11904: 0xB45D,
	24384 - 11904: 0xDD62,
	24387 - 11904: 0xE1BF,
	24388 - 11904: 0xE1BE,
	24390 - 11904: 0xB9FB,
	24392 - 11904: 0xBC75,
	24393 - 11904: 0xE576,
	24394 - 11904: 0xBECA,
	24395 - 11904: 0xE974,
	24396 - 11904: 0xC0B1,
	24397 - 11904: 0x95B8,
	24398 - 11904: 0xC573,
	24399 - 11904: 0xF7D8,
	24400 - 11904: 0xC6D0,
	24401 - 11904: 0x8BCA,
	24404 - 11904: 0xCC74,
	24406 - 11904: 0xCEBD,
	24407 - 11904: 0xB16B,
	24408 - 11904: 0xFC4F,
	24409 - 11904: 0xB74A,
	24412 - 11904: 0x987A,
	24413 - 11904: 0xC255,
	24417 - 11904: 0xC6D1,
	24418 - 11904: 0xA7CE,
	24419 - 11904: 0xFC51,
	24420 - 11904: 0xA7CD,
	24421 - 11904: 0xABDB,
	24423 - 11904: 0xD17B,
	24425 - 11904: 0xB16D,
	24426 - 11904: 0xB343,
	24427 - 11904: 0xB16E,
	24428 - 11904: 0xB16C,
	24429 - 11904: 0xB45E,
	24431 - 11904: 0xE1C0,
	24432 - 11904: 0xB9FC,
	24433 - 11904: 0xBC76,
	24434 - 11904: 0xFC54,
	24435 - 11904: 0xC94C,
	24436 - 11904: 0xC9DF,
	24438 - 11904: 0xCAD5,
	24439 - 11904: 0xA7CF,
	24440 - 11904: 0xCAD4,
	24441 - 11904: 0xA7D0,
	24443 - 11904: 0xFAAF,
	24444 - 11904: 0xA9BC,
	24445 - 11904: 0xCC77,
	24446 - 11904: 0xCC76,
	24447 - 11904: 0xA9BB,
	24448 - 11904: 0xA9B9,
	24449 - 11904: 0xA9BA,
	24450 - 11904: 0xCC75,
	24451 - 11904: 0x8D6C,
	24453 - 11904: 0xABDD,
	24454 - 11904: 0xCEBE,
	24455 - 11904: 0xABE0,
	24456 - 11904: 0xABDC,
	24457 - 11904: 0xABE2,
	24458 - 11904: 0xABDE,
	24459 - 11904: 0xABDF,
	24460 - 11904: 0xABE1,
	24464 - 11904: 0xAE7D,
	24465 - 11904: 0xAE7C,
	24466 - 11904: 0xAE7B,
	24470 - 11904: 0xD54F,
	24471 - 11904: 0xB16F,
	24472 - 11904: 0xB172,
	24473 - 11904: 0xB170,
	24475 - 11904: 0xD54E,
	24476 - 11904: 0xB175,
	24478 - 11904: 0xB171,
	24479 - 11904: 0xD550,
	24480 - 11904: 0xB174,
	24481 - 11904: 0xB173,
	24484 - 11904: 0xFA61,
	24485 - 11904: 0xD8F6,
	24486 - 11904: 0xD8F5,
	24487 - 11904: 0xFC57,
	24488 - 11904: 0xB461,
	24489 - 11904: 0xB45F,
	24490 - 11904: 0xB460,
	24491 - 11904: 0xD8F7,
	24492 - 11904: 0xB74B,
	24493 - 11904: 0xDD64,
	24494 - 11904: 0xB74C,
	24495 - 11904: 0xDD63,
	24497 - 11904: 0x9B70,
	24498 - 11904: 0xE577,
	24501 - 11904: 0xBC78,
	24502 - 11904: 0xE1C1,
	24503 - 11904: 0xBC77,
	24505 - 11904: 0xB9FD,
	24506 - 11904: 0xA051,
	24507 - 11904: 0xECDE,
	24508 - 11904: 0xE975,
	24509 - 11904: 0xC0B2,
	24510 - 11904: 0xECDD,
	24511 - 11904: 0xF240,
	24512 - 11904: 0xF448,
	24513 - 11904: 0xF449,
	24514 - 11904: 0x8C7C,
	24515 - 11904: 0xA4DF,
	24516 - 11904: 0x8BCB,
	24517 - 11904: 0xA5B2,
	24521 - 11904: 0xC97B,
	24524 - 11904: 0xA7D2,
	24525 - 11904: 0xA7D4,
	24527 - 11904: 0xC9E2,
	24528 - 11904: 0xCAD8,
	24529 - 11904: 0xCAD7,
	24530 - 11904: 0xCAD6,
	24532 - 11904: 0xC9E1,
	24533 - 11904: 0xC9E0,
	24534 - 11904: 0xA6A4,
	24535 - 11904: 0xA7D3,
	24536 - 11904: 0xA7D1,
	24537 - 11904: 0xA6A3,
	24539 - 11904: 0x936E,
	24541 - 11904: 0xA9BD,
	24542 - 11904: 0xCC78,
	24543 - 11904: 0xFCD5,
	24544 - 11904: 0xA9BE,
	24545 - 11904: 0xCADD,
	24547 - 11904: 0xCADF,
	24548 - 11904: 0xCADE,
	24549 - 11904: 0xCC79,
	24552 - 11904: 0xCADA,
	24554 - 11904: 0xA7D8,
	24555 - 11904: 0xA7D6,
	24557 - 11904: 0xCAD9,
	24558 - 11904: 0xCADB,
	24559 - 11904: 0xCAE1,
	24561 - 11904: 0xA7D5,
	24563 - 11904: 0xCADC,
	24564 - 11904: 0xCAE5,
	24565 - 11904: 0xA9C0,
	24567 - 11904: 0xCAE2,
	24568 - 11904: 0xA7D7,
	24570 - 11904: 0xCAE0,
	24571 - 11904: 0xCAE3,
	24573 - 11904: 0xA9BF,
	24575 - 11904: 0xA9C1,
	24576 - 11904: 0xCAE4,
	24585 - 11904: 0xCCAF,
	24586 - 11904: 0xCCA2,
	24587 - 11904: 0xCC7E,
	24588 - 11904: 0xCCAE,
	24589 - 11904: 0xCCA9,
	24590 - 11904: 0xABE7,
	24591 - 11904: 0xA9C2,
	24592 - 11904: 0xCCAA,
	24593 - 11904: 0xCCAD,
	24594 - 11904: 0xABE3,
	24595 - 11904: 0xCCAC,
	24596 - 11904: 0xA9C3,
	24597 - 11904: 0xA9C8,
	24598 - 11904: 0xA9C6,
	24599 - 11904: 0xCCA3,
	24601 - 11904: 0xCC7C,
	24602 - 11904: 0xCCA5,
	24603 - 11904: 0xA9CD,
	24604 - 11904: 0xCCB0,
	24605 - 11904: 0xABE4,
	24606 - 11904: 0xCCA6,
	24608 - 11904: 0xABE5,
	24609 - 11904: 0xA9C9,
	24610 - 11904: 0xCCA8,
	24611 - 11904: 0xFCA9,
	24612 - 11904: 0xCECD,
	24613 - 11904: 0xABE6,
	24614 - 11904: 0xCC7B,
	24615 - 11904: 0xA9CA,
	24616 - 11904: 0xABE8,
	24617 - 11904: 0xA9CB,
	24618 - 11904: 0xA9C7,
	24619 - 11904: 0xA9CC,
	24620 - 11904: 0xCCA7,
	24621 - 11904: 0xCC7A,
	24622 - 11904: 0xCCAB,
	24623 - 11904: 0xA9C4,
	24625 - 11904: 0xFC61,
	24626 - 11904: 0xCC7D,
	24627 - 11904: 0xCCA4,
	24628 - 11904: 0xCCA1,
	24629 - 11904: 0xA9C5,
	24631 - 11904: 0xCEBF,
	24633 - 11904: 0xCEC0,
	24635 - 11904: 0x8966,
	24640 - 11904: 0xCECA,
	24641 - 11904: 0xD1A1,
	24642 - 11904: 0xCECB,
	24643 - 11904: 0xABEE,
	24644 - 11904: 0xCECE,
	24645 - 11904: 0xCEC4,
	24646 - 11904: 0xABED,
	24647 - 11904: 0xCEC6,
	24649 - 11904: 0xCEC7,
	24650 - 11904: 0xFACB,
	24652 - 11904: 0xCEC9,
	24653 - 11904: 0xABE9,
	24656 - 11904: 0xAEA3,
	24658 - 11904: 0xF9DA,
	24659 - 11904: 0xCEC5,
	24660 - 11904: 0xCEC1,
	24661 - 11904: 0xAEA4,
	24664 - 11904: 0xCECF,
	24665 - 11904: 0xAE7E,
	24666 - 11904: 0xD17D,
	24667 - 11904: 0xCEC8,
	24669 - 11904: 0xD17C,
	24670 - 11904: 0xCEC3,
	24671 - 11904: 0xCECC,
	24674 - 11904: 0xABEC,
	24675 - 11904: 0xAEA1,
	24676 - 11904: 0xABF2,
	24677 - 11904: 0xAEA2,
	24678 - 11904: 0xCED0,
	24679 - 11904: 0xD17E,
	24680 - 11904: 0xABEB,
	24681 - 11904: 0xAEA6,
	24682 - 11904: 0xABF1,
	24683 - 11904: 0xABF0,
	24684 - 11904: 0xABEF,
	24685 - 11904: 0xAEA5,
	24686 - 11904: 0xCED1,
	24687 - 11904: 0xAEA7,
	24688 - 11904: 0xABEA,
	24690 - 11904: 0xCEC2,
	24693 - 11904: 0x937A,
	24695 - 11904: 0xA0E0,
	24702 - 11904: 0x936B,
	24703 - 11904: 0xB176,
	24704 - 11904: 0xD1A4,
	24705 - 11904: 0xD1A6,
	24707 - 11904: 0xD1A8,
	24708 - 11904: 0xAEA8,
	24709 - 11904: 0xAEAE,
	24710 - 11904: 0xD553,
	24711 - 11904: 0xD1AC,
	24712 - 11904: 0xD1A3,
	24713 - 11904: 0xB178,
	24714 - 11904: 0xD551,
	24716 - 11904: 0xAEAD,
	24717 - 11904: 0xAEAB,
	24718 - 11904: 0xD1AE,
	24720 - 11904: 0xD552,
	24722 - 11904: 0xD1A5,
	24724 - 11904: 0xAEAC,
	24725 - 11904: 0xD1A9,
	24726 - 11904: 0xAEAF,
	24727 - 11904: 0xD1AB,
	24730 - 11904: 0xAEAA,
	24731 - 11904: 0xD1AA,
	24732 - 11904: 0xD1AD,
	24733 - 11904: 0xD1A7,
	24734 - 11904: 0xFC6B,
	24735 - 11904: 0xAEA9,
	24736 - 11904: 0xB179,
	24738 - 11904: 0xD1A2,
	24739 - 11904: 0xB177,
	24740 - 11904: 0xFC6C,
	24743 - 11904: 0x9468,
	24744 - 11904: 0xB17A,
	24752 - 11904: 0xD555,
	24753 - 11904: 0xD55E,
	24754 - 11904: 0xB464,
	24755 - 11904: 0xFC6D,
	24756 - 11904: 0xB17C,
	24757 - 11904: 0xB1A3,
	24758 - 11904: 0xB465,
	24759 - 11904: 0xD560,
	24760 - 11904: 0xB1AA,
	24761 - 11904: 0xD8F9,
	24762 - 11904: 0xD556,
	24763 - 11904: 0xB1A2,
	24764 - 11904: 0xB1A5,
	24765 - 11904: 0xB17E,
	24766 - 11904: 0xD554,
	24767 - 11904: 0xD562,
	24768 - 11904: 0xD565,
	24769 - 11904: 0xD949,
	24771 - 11904: 0xD563,
	24772 - 11904: 0xD8FD,
	24773 - 11904: 0xB1A1,
	24774 - 11904: 0xB1A8,
	24775 - 11904: 0xB1AC,
	24776 - 11904: 0xD55D,
	24777 - 11904: 0xD8F8,
	24778 - 11904: 0xD561,
	24779 - 11904: 0xB17B,
	24780 - 11904: 0xD8FA,
	24781 - 11904: 0xD564,
	24782 - 11904: 0xD8FC,
	24783 - 11904: 0xD559,
	24785 - 11904: 0xB462,
	24787 - 11904: 0xD557,
	24788 - 11904: 0xD558,
	24789 - 11904: 0xB1A7,
	24791 - 11904: 0x8D71,
	24792 - 11904: 0xB1A6,
	24793 - 11904: 0xD55B,
	24794 - 11904: 0xB1AB,
	24795 - 11904: 0xD55F,
	24796 - 11904: 0xB1A4,
	24797 - 11904: 0xD55C,
	24798 - 11904: 0xFD64,
	24799 - 11904: 0xB1A9,
	24800 - 11904: 0xB466,
	24801 - 11904: 0xB463,
	24802 - 11904: 0xD8FB,
	24803 - 11904: 0x99BA,
	24804 - 11904: 0xD55A,
	24806 - 11904: 0xB17D,
	24807 - 11904: 0x9AD0,
	24808 - 11904: 0x9A61,
	24809 - 11904: 0xA0E5,
	24816 - 11904: 0xB46B,
	24817 - 11904: 0xB46F,
	24818 - 11904: 0xD940,
	24819 - 11904: 0xB751,
	24820 - 11904: 0xB46D,
	24821 - 11904: 0xD944,
	24822 - 11904: 0xB471,
	24823 - 11904: 0xDD65,
	24824 - 11904: 0xD946,
	24825 - 11904: 0xB753,
	24826 - 11904: 0xB469,
	24827 - 11904: 0xB46C,
	24828 - 11904: 0xD947,
	24829 - 11904: 0xA05B,
	24830 - 11904: 0xD948,
	24831 - 11904: 0xD94E,
	24832 - 11904: 0xB473,
	24833 - 11904: 0xB754,
	24835 - 11904: 0xD94A,
	24836 - 11904: 0xD94F,
	24837 - 11904: 0xD943,
	24838 - 11904: 0xB75E,
	24839 - 11904: 0x96AC,
	24840 - 11904: 0xB755,
	24841 - 11904: 0xB472,
	24842 - 11904: 0xD941,
	24843 - 11904: 0xD950,
	24844 - 11904: 0x9740,
	24845 - 11904: 0xB75D,
	24846 - 11904: 0xB470,
	24847 - 11904: 0xB74E,
	24848 - 11904: 0xD94D,
	24850 - 11904: 0xB474,
	24851 - 11904: 0xD945,
	24852 - 11904: 0xD8FE,
	24853 - 11904: 0xB46A,
	24854 - 11904: 0xD942,
	24856 - 11904: 0xD94B,
	24857 - 11904: 0x9EF1,
	24858 - 11904: 0xB74D,
	24859 - 11904: 0xB752,
	24860 - 11904: 0xB467,
	24861 - 11904: 0xD94C,
	24863 - 11904: 0xB750,
	24866 - 11904: 0x8C4D,
	24867 - 11904: 0xB468,
	24871 - 11904: 0xB75C,
	24872 - 11904: 0xE1C3,
	24873 - 11904: 0xDD70,
	24875 - 11904: 0xDD68,
	24876 - 11904: 0xE1C2,
	24878 - 11904: 0xDD6C,
	24879 - 11904: 0xDD6E,
	24880 - 11904: 0x9F7E,
	24882 - 11904: 0xDD6B,
	24884 - 11904: 0xB75B,
	24886 - 11904: 0xDD6A,
	24887 - 11904: 0xB75F,
	24891 - 11904: 0xE1D2,
	24893 - 11904: 0x8D72,
	24894 - 11904: 0xB75A,
	24895 - 11904: 0xBA40,
	24896 - 11904: 0xDD71,
	24897 - 11904: 0xE1C4,
	24898 - 11904: 0xFC76,
	24900 - 11904: 0xB758,
	24901 - 11904: 0xDD69,
	24902 - 11904: 0xDD6D,
	24903 - 11904: 0xB9FE,
	24904 - 11904: 0xB74F,
	24905 - 11904: 0xDD66,
	24906 - 11904: 0xDD67,
	24907 - 11904: 0xBA41,
	24908 - 11904: 0xB757,
	24909 - 11904: 0xB759,
	24910 - 11904: 0xB756,
	24911 - 11904: 0xDD6F,
	24912 - 11904: 0x96A9,
	24914 - 11904: 0xE1C8,
	24915 - 11904: 0xE1C9,
	24916 - 11904: 0xE1CE,
	24917 - 11904: 0xBC7D,
	24918 - 11904: 0xE1D5,
	24920 - 11904: 0xBA47,
	24921 - 11904: 0xA06E,
	24922 - 11904: 0xBA46,
	24923 - 11904: 0xE1D0,
	24924 - 11904: 0xFCAA,
	24925 - 11904: 0xBC7C,
	24926 - 11904: 0xE1C5,
	24927 - 11904: 0xBA45,
	24928 - 11904: 0xFBCD,
	24929 - 11904: 0xE1D4,
	24930 - 11904: 0xBA43,
	24931 - 11904: 0xBA44,
	24932 - 11904: 0xFC74,
	24933 - 11904: 0xE1D1,
	24934 - 11904: 0xE5AA,
	24935 - 11904: 0xBC7A,
	24936 - 11904: 0xB46E,
	24938 - 11904: 0xE1D3,
	24939 - 11904: 0xBCA3,
	24940 - 11904: 0xE1CB,
	24942 - 11904: 0xBC7B,
	24943 - 11904: 0xA074,
	24944 - 11904: 0xBCA2,
	24945 - 11904: 0xE1C6,
	24946 - 11904: 0xE1CA,
	24947 - 11904: 0xE1C7,
	24948 - 11904: 0xE1CD,
	24949 - 11904: 0xBA48,
	24950 - 11904: 0xBC79,
	24951 - 11904: 0xBA42,
	24953 - 11904: 0xE57A,
	24954 - 11904: 0xE1CF,
	24956 - 11904: 0xBCA1,
	24957 - 11904: 0xA071,
	24958 - 11904: 0xBCA4,
	24960 - 11904: 0xE1CC,
	24961 - 11904: 0xFC79,
	24962 - 11904: 0xBC7E,
	24963 - 11904: 0xE579,
	24967 - 11904: 0xFC7C,
	24969 - 11904: 0xE57E,
	24970 - 11904: 0xBECE,
	24971 - 11904: 0xE578,
	24972 - 11904: 0xE9A3,
	24973 - 11904: 0xE5A9,
	24974 - 11904: 0xBCA8,
	24976 - 11904: 0xBCA6,
	24977 - 11904: 0xBECC,
	24978 - 11904: 0xE5A6,
	24979 - 11904: 0xE5A2,
	24980 - 11904: 0xBCAC,
	24981 - 11904: 0x9C50,
	24982 - 11904: 0xE978,
	24984 - 11904: 0x9379,
	24985 - 11904: 0x9378,
	24986 - 11904: 0xBCAA,
	24987 - 11904: 0xE5A1,
	24988 - 11904: 0xA0DD,
	24989 - 11904: 0xE976,
	24991 - 11904: 0xE5A5,
	24993 - 11904: 0xE5A8,
	24994 - 11904: 0xE57D,
	24996 - 11904: 0xBCAB,
	24999 - 11904: 0xBCA5,
	25000 - 11904: 0xE977,
	25001 - 11904: 0xBECD,
	25002 - 11904: 0xE5A7,
	25003 - 11904: 0xBCA7,
	25004 - 11904: 0xBCA9,
	25005 - 11904: 0xE5A4,
	25006 - 11904: 0xBCAD,
	25007 - 11904: 0xE5A3,
	25008 - 11904: 0xE57C,
	25009 - 11904: 0xE57B,
	25010 - 11904: 0xBECB,
	25011 - 11904: 0xE5AB,
	25012 - 11904: 0xE97A,
	25013 - 11904: 0xECE0,
	25014 - 11904: 0xBED0,
	25015 - 11904: 0x8D75,
	25016 - 11904: 0xE9A2,
	25017 - 11904: 0x8D76,
	25018 - 11904: 0xE97E,
	25020 - 11904: 0xECE1,
	25022 - 11904: 0xBED1,
	25023 - 11904: 0xE9A1,
	25024 - 11904: 0x9374,
	25025 - 11904: 0xE97C,
	25026 - 11904: 0xC0B4,
	25027 - 11904: 0xECDF,
	25029 - 11904: 0xE979,
	25030 - 11904: 0xE97B,
	25031 - 11904: 0xC0B5,
	25032 - 11904: 0xBED3,
	25033 - 11904: 0xC0B3,
	25034 - 11904: 0xBED2,
	25035 - 11904: 0xC0B7,
	25036 - 11904: 0xE97D,
	25037 - 11904: 0xBECF,
	25039 - 11904: 0x8D77,
	25040 - 11904: 0xFCA5,
	25043 - 11904: 0xFCA2,
	25046 - 11904: 0xEFCF,
	25048 - 11904: 0xEFC7,
	25050 - 11904: 0x90C3,
	25054 - 11904: 0xECE7,
	25055 - 11904: 0xEFC8,
	25056 - 11904: 0xECE3,
	25058 - 11904: 0xA079,
	25059 - 11904: 0xC256,
	25060 - 11904: 0xECE5,
	25061 - 11904: 0xECE4,
	25062 - 11904: 0xC0B6,
	25063 - 11904: 0xECE2,
	25064 - 11904: 0xECE6,
	25065 - 11904: 0xEFD0,
	25066 - 11904: 0xEFCC,
	25067 - 11904: 0xEFCE,
	25069 - 11904: 0xEFC9,
	25070 - 11904: 0xEFCA,
	25072 - 11904: 0xEFCD,
	25073 - 11904: 0xEFCB,
	25074 - 11904: 0xC367,
	25077 - 11904: 0xC36A,
	25078 - 11904: 0xC369,
	25079 - 11904: 0xC368,
	25080 - 11904: 0xC461,
	25081 - 11904: 0xF44A,
	25082 - 11904: 0xC462,
	25083 - 11904: 0xF241,
	25084 - 11904: 0xC4DF,
	25085 - 11904: 0xF5CC,
	25086 - 11904: 0xC4E0,
	25087 - 11904: 0xC574,
	25088 - 11904: 0xC5CA,
	25089 - 11904: 0xF7D9,
	25091 - 11904: 0xF7DA,
	25092 - 11904: 0xF7DB,
	25095 - 11904: 0xF9BA,
	25096 - 11904: 0xA4E0,
	25097 - 11904: 0xC97C,
	25098 - 11904: 0xA5B3,
	25100 - 11904: 0xA6A6,
	25101 - 11904: 0xA6A7,
	25102 - 11904: 0xA6A5,
	25104 - 11904: 0xA6A8,
	25105 - 11904: 0xA7DA,
	25106 - 11904: 0xA7D9,
	25108 - 11904: 0xCCB1,
	25109 - 11904: 0xA9CF,
	25110 - 11904: 0xA9CE,
	25113 - 11904: 0xD1AF,
	25114 - 11904: 0xB1AD,
	25115 - 11904: 0xB1AE,
	25119 - 11904: 0xB475,
	25120 - 11904: 0xDD72,
	25121 - 11904: 0xB760,
	25122 - 11904: 0xB761,
	25123 - 11904: 0xDD74,
	25124 - 11904: 0xDD76,
	25125 - 11904: 0xDD75,
	25127 - 11904: 0xE1D7,
	25129 - 11904: 0xE1D6,
	25130 - 11904: 0xBA49,
	25131 - 11904: 0xE1D8,
	25132 - 11904: 0x8D79,
	25133 - 11904: 0xE5AC,
	25134 - 11904: 0xBCAE,
	25136 - 11904: 0xBED4,
	25138 - 11904: 0xC0B8,
	25139 - 11904: 0xC257,
	25140 - 11904: 0xC0B9,
	25142 - 11904: 0xA4E1,
	25143 - 11904: 0x8BFC,
	25145 - 11904: 0xA076,
	25146 - 11904: 0xCAE6,
	25149 - 11904: 0xCCB2,
	25150 - 11904: 0xA9D1,
	25151 - 11904: 0xA9D0,
	25152 - 11904: 0xA9D2,
	25153 - 11904: 0xABF3,
	25154 - 11904: 0xCED2,
	25155 - 11904: 0xCED3,
	25158 - 11904: 0xD1B0,
	25159 - 11904: 0xAEB0,
	25160 - 11904: 0xB1AF,
	25161 - 11904: 0xB476,
	25162 - 11904: 0xD951,
	25163 - 11904: 0xA4E2,
	25164 - 11904: 0x8BCD,
	25165 - 11904: 0xA47E,
	25166 - 11904: 0xA4E3,
	25168 - 11904: 0xC97D,
	25169 - 11904: 0xA5B7,
	25170 - 11904: 0xA5B6,
	25171 - 11904: 0xA5B4,
	25172 - 11904: 0xA5B5,
	25176 - 11904: 0xA6AB,
	25177 - 11904: 0xC9E9,
	25178 - 11904: 0xC9EB,
	25179 - 11904: 0xA6AA,
	25180 - 11904: 0xC9E3,
	25182 - 11904: 0xC9E4,
	25184 - 11904: 0xC9EA,
	25185 - 11904: 0xC9E6,
	25186 - 11904: 0xC9E8,
	25187 - 11904: 0xA6A9,
	25188 - 11904: 0xC9E5,
	25189 - 11904: 0xC9EC,
	25190 - 11904: 0xC9E7,
	25192 - 11904: 0x9F5A,
	25197 - 11904: 0xA7E1,
	25198 - 11904: 0xA7EA,
	25199 - 11904: 0xA7E8,
	25200 - 11904: 0xCAF0,
	25201 - 11904: 0xCAED,
	25202 - 11904: 0xCAF5,
	25203 - 11904: 0xA7E6,
	25204 - 11904: 0xCAF6,
	25206 - 11904: 0xA7DF,
	25207 - 11904: 0xCAF3,
	25209 - 11904: 0xA7E5,
	25210 - 11904: 0xCAEF,
	25211 - 11904: 0xCAEE,
	25212 - 11904: 0xA7E3,
	25213 - 11904: 0xCAF4,
	25214 - 11904: 0xA7E4,
	25215 - 11904: 0xA9D3,
	25216 - 11904: 0xA7DE,
	25217 - 11904: 0xCAF1,
	25218 - 11904: 0x9FF4,
	25219 - 11904: 0xCAE7,
	25220 - 11904: 0xA7DB,
	25221 - 11904: 0x9FBA,
	25222 - 11904: 0xA7EE,
	25223 - 11904: 0xCAEC,
	25224 - 11904: 0xCAF2,
	25225 - 11904: 0xA7E0,
	25226 - 11904: 0xA7E2,
	25228 - 11904: 0xCAE8,
	25230 - 11904: 0xCAE9,
	25231 - 11904: 0xCAEA,
	25232 - 11904: 0x8D7A,
	25233 - 11904: 0xA7ED,
	25234 - 11904: 0xA7E7,
	25235 - 11904: 0xA7EC,
	25236 - 11904: 0xCAEB,
	25237 - 11904: 0xA7EB,
	25238 - 11904: 0xA7DD,
	25239 - 11904: 0xA7DC,
	25240 - 11904: 0xA7E9,
	25245 - 11904: 0x9E45,
	25252 - 11904: 0x93B0,
	25254 - 11904: 0xA075,
	25256 - 11904: 0xA9E1,
	25257 - 11904: 0xCCBE,
	25258 - 11904: 0xCCB7,
	25259 - 11904: 0xA9DC,
	25260 - 11904: 0xA9EF,
	25261 - 11904: 0xCCB3,
	25262 - 11904: 0xCCBA,
	25263 - 11904: 0xCCBC,
	25264 - 11904: 0xCCBF,
	25265 - 11904: 0xA9EA,
	25267 - 11904: 0xCCBB,
	25268 - 11904: 0xCCB4,
	25269 - 11904: 0xA9E8,
	25270 - 11904: 0xCCB8,
	25272 - 11904: 0xCCC0,
	25273 - 11904: 0xA9D9,
	25275 - 11904: 0xCCBD,
	25276 - 11904: 0xA9E3,
	25277 - 11904: 0xA9E2,
	25278 - 11904: 0xCCB6,
	25279 - 11904: 0xA9D7,
	25281 - 11904: 0x87DD,
	25282 - 11904: 0xA9D8,
	25283 - 11904: 0x9B46,
	25284 - 11904: 0xA9D6,
	25285 - 11904: 0xFCAE,
	25286 - 11904: 0xA9EE,
	25287 - 11904: 0xA9E6,
	25288 - 11904: 0xA9E0,
	25289 - 11904: 0xA9D4,
	25290 - 11904: 0xCCB9,
	25291 - 11904: 0xA9DF,
	25292 - 11904: 0xA9D5,
	25293 - 11904: 0xA9E7,
	25294 - 11904: 0xA9F0,
	25295 - 11904: 0xCED4,
	25296 - 11904: 0xA9E4,
	25297 - 11904: 0xCCB5,
	25298 - 11904: 0xA9DA,
	25299 - 11904: 0xA9DD,
	25300 - 11904: 0xA9DE,
	25301 - 11904: 0xFCB0,
	25302 - 11904: 0xA9EC,
	25303 - 11904: 0xA9ED,
	25304 - 11904: 0xA9EB,
	25305 - 11904: 0xA9E5,
	25306 - 11904: 0xA9E9,
	25307 - 11904: 0xA9DB,
	25308 - 11904: 0xABF4,
	25311 - 11904: 0xFA51,
	25317 - 11904: 0x8D7B,
	25323 - 11904: 0xCEDA,
	25324 - 11904: 0xAC41,
	25325 - 11904: 0xABF8,
	25326 - 11904: 0xABFA,
	25327 - 11904: 0xAC40,
	25328 - 11904: 0xCEE6,
	25329 - 11904: 0xABFD,
	25330 - 11904: 0xD1B1,
	25331 - 11904: 0xAEB1,
	25332 - 11904: 0xAC43,
	25333 - 11904: 0xCED7,
	25334 - 11904: 0xCEDF,
	25335 - 11904: 0xABFE,
	25336 - 11904: 0xCEDE,
	25337 - 11904: 0xCEDB,
	25338 - 11904: 0xCEE3,
	25339 - 11904: 0xCEE5,
	25340 - 11904: 0xABF7,
	25341 - 11904: 0xABFB,
	25342 - 11904: 0xAC42,
	25343 - 11904: 0xAEB3,
	25344 - 11904: 0xCEE0,
	25345 - 11904: 0xABF9,
	25346 - 11904: 0xAC45,
	25347 - 11904: 0xCED9,
	25351 - 11904: 0xABFC,
	25352 - 11904: 0xAEB2,
	25353 - 11904: 0xABF6,
	25355 - 11904: 0xCED6,
	25356 - 11904: 0xCEDD,
	25357 - 11904: 0xCED5,
	25358 - 11904: 0xCED8,
	25359 - 11904: 0xCEDC,
	25360 - 11904: 0xD1B2,
	25361 - 11904: 0xAC44,
	25363 - 11904: 0xCEE1,
	25364 - 11904: 0xCEE2,
	25365 - 11904: 0xCEE4,
	25366 - 11904: 0xABF5,
	25368 - 11904: 0x8D7C,
	25384 - 11904: 0xAEC1,
	25385 - 11904: 0xD1BE,
	25386 - 11904: 0xAEBF,
	25387 - 11904: 0xAEC0,
	25388 - 11904: 0xD1B4,
	25389 - 11904: 0xD1C4,
	25390 - 11904: 0x9ED6,
	25391 - 11904: 0xAEB6,
	25393 - 11904: 0x93AC,
	25394 - 11904: 0xD566,
	25395 - 11904: 0xD1C6,
	25396 - 11904: 0xD1C0,
	25397 - 11904: 0x9F5B,
	25398 - 11904: 0xD1B7,
	25399 - 11904: 0x93A9,
	25400 - 11904: 0xD1C9,
	25401 - 11904: 0xD1BA,
	25402 - 11904: 0xAEBC,
	25403 - 11904: 0xD57D,
	25404 - 11904: 0xD1BD,
	25405 - 11904: 0xAEBE,
	25406 - 11904: 0xAEB5,
	25408 - 11904: 0xD1CB,
	25409 - 11904: 0xD1BF,
	25410 - 11904: 0xAEB8,
	25411 - 11904: 0xD1B8,
	25412 - 11904: 0xD1B5,
	25413 - 11904: 0xD1B6,
	25414 - 11904: 0xAEB9,
	25415 - 11904: 0xD1C5,
	25416 - 11904: 0xD1CC,
	25417 - 11904: 0xAEBB,
	25418 - 11904: 0xD1BC,
	25419 - 11904: 0xD1BB,
	25420 - 11904: 0xAEC3,
	25421 - 11904: 0xAEC2,
	25422 - 11904: 0xAEB4,
	25423 - 11904: 0xAEBA,
	25424 - 11904: 0xAEBD,
	25425 - 11904: 0xD1C8,
	25428 - 11904: 0xD1C2,
	25429 - 11904: 0xAEB7,
	25430 - 11904: 0xD1B3,
	25431 - 11904: 0xD1CA,
	25432 - 11904: 0xD1C1,
	25433 - 11904: 0xD1C3,
	25434 - 11904: 0xD1C7,
	25444 - 11904: 0xA07C,
	25445 - 11904: 0xD567,
	25447 - 11904: 0xB1B7,
	25448 - 11904: 0xB1CB,
	25449 - 11904: 0xB1CA,
	25451 - 11904: 0xB1BF,
	25452 - 11904: 0xFCB2,
	25453 - 11904: 0xD579,
	25454 - 11904: 0xD575,
	25455 - 11904: 0xD572,
	25456 - 11904: 0xD5A6,
	25457 - 11904: 0xB1BA,
	25458 - 11904: 0xB1B2,
	25461 - 11904: 0xD577,
	25462 - 11904: 0xB4A8,
	25463 - 11904: 0xB1B6,
	25464 - 11904: 0xD5A1,
	25465 - 11904: 0x8AC1,
	25466 - 11904: 0xB1CC,
	25467 - 11904: 0xB1C9,
	25468 - 11904: 0xD57B,
	25469 - 11904: 0xD56A,
	25471 - 11904: 0x9FB4,
	25472 - 11904: 0xB1C8,
	25473 - 11904: 0xD5A3,
	25474 - 11904: 0xD569,
	25475 - 11904: 0xB1BD,
	25476 - 11904: 0xB1C1,
	25477 - 11904: 0xD5A2,
	25479 - 11904: 0xD573,
	25480 - 11904: 0xB1C2,
	25481 - 11904: 0xB1BC,
	25482 - 11904: 0xD568,
	25483 - 11904: 0xFCAC,
	25484 - 11904: 0xB478,
	25485 - 11904: 0xD5A5,
	25486 - 11904: 0xD571,
	25487 - 11904: 0xB1C7,
	25488 - 11904: 0xD574,
	25489 - 11904: 0xD5A4,
	25490 - 11904: 0xB1C6,
	25492 - 11904: 0xD952,
	25494 - 11904: 0xB1B3,
	25495 - 11904: 0xD56F,
	25496 - 11904: 0xB1B8,
	25497 - 11904: 0xB1C3,
	25499 - 11904: 0xB1BE,
	25500 - 11904: 0xD578,
	25501 - 11904: 0xD56E,
	25502 - 11904: 0xD56C,
	25503 - 11904: 0xD57E,
	25504 - 11904: 0xB1B0,
	25505 - 11904: 0xB1C4,
	25506 - 11904: 0xB1B4,
	25507 - 11904: 0xB477,
	25508 - 11904: 0xD57C,
	25509 - 11904: 0xB1B5,
	25511 - 11904: 0xB1B1,
	25512 - 11904: 0xB1C0,
	25513 - 11904: 0xB1BB,
	25514 - 11904: 0xB1B9,
	25515 - 11904: 0xD570,
	25516 - 11904: 0xB1C5,
	25517 - 11904: 0xD56D,
	25518 - 11904: 0xD57A,
	25519 - 11904: 0xD576,
	25520 - 11904: 0xD954,
	25521 - 11904: 0xD953,
	25529 - 11904: 0x9E4C,
	25533 - 11904: 0xD56B,
	25534 - 11904: 0xD964,
	25536 - 11904: 0xB47A,
	25537 - 11904: 0x8FC5,
	25538 - 11904: 0xD96A,
	25539 - 11904: 0xD959,
	25540 - 11904: 0xD967,
	25541 - 11904: 0xDD77,
	25542 - 11904: 0xB47D,
	25543 - 11904: 0xD96B,
	25544 - 11904: 0xD96E,
	25545 - 11904: 0xB47C,
	25546 - 11904: 0xD95C,
	25547 - 11904: 0xD96D,
	25548 - 11904: 0xD96C,
	25549 - 11904: 0xB47E,
	25550 - 11904: 0xD955,
	25551 - 11904: 0xB479,
	25552 - 11904: 0xB4A3,
	25553 - 11904: 0x93AD,
	25554 - 11904: 0xB4A1,
	25555 - 11904: 0xD969,
	25557 - 11904: 0xD95F,
	25558 - 11904: 0xB4A5,
	25559 - 11904: 0xD970,
	25560 - 11904: 0xD968,
	25561 - 11904: 0xD971,
	25562 - 11904: 0xB4AD,
	25563 - 11904: 0xB4AB,
	25564 - 11904: 0xD966,
	25565 - 11904: 0xD965,
	25566 - 11904: 0x9DC3,
	25567 - 11904: 0xD963,
	25568 - 11904: 0xD95D,
	25569 - 11904: 0xB4A4,
	25570 - 11904: 0x8DA2,
	25571 - 11904: 0xB4A2,
	25572 - 11904: 0xD1B9,
	25573 - 11904: 0xD956,
	25574 - 11904: 0x9D4A,
	25575 - 11904: 0xDDB7,
	25576 - 11904: 0xD957,
	25577 - 11904: 0xB47B,
	25578 - 11904: 0xB4AA,
	25579 - 11904: 0xDD79,
	25581 - 11904: 0xB4A6,
	25582 - 11904: 0xB4A7,
	25583 - 11904: 0xD958,
	25584 - 11904: 0xD96F,
	25585 - 11904: 0xDD78,
	25586 - 11904: 0xD960,
	25587 - 11904: 0xD95B,
	25588 - 11904: 0xB4A9,
	25589 - 11904: 0xD961,
	25590 - 11904: 0xD95E,
	25592 - 11904: 0xFCB6,
	25593 - 11904: 0xB4AE,
	25595 - 11904: 0x8DA3,
	25596 - 11904: 0x9E4B,
	25598 - 11904: 0x9E4D,
	25606 - 11904: 0xB770,
	25607 - 11904: 0x8DA4,
	25609 - 11904: 0xDD7C,
	25610 - 11904: 0xDDB1,
	25611 - 11904: 0xDDB6,
	25612 - 11904: 0xDDAA,
	25613 - 11904: 0xB76C,
	25614 - 11904: 0xDDBB,
	25615 - 11904: 0xB769,
	25616 - 11904: 0xDD7A,
	25618 - 11904: 0xDD7B,
	25619 - 11904: 0xB762,
	25620 - 11904: 0xB76B,
	25621 - 11904: 0xDDA4,
	25622 - 11904: 0xB76E,
	25623 - 11904: 0xB76F,
	25624 - 11904: 0xDDA5,
	25626 - 11904: 0xDDB2,
	25627 - 11904: 0xDDB8,
	25628 - 11904: 0xB76A,
	25630 - 11904: 0xB764,
	25631 - 11904: 0xDDA3,
	25632 - 11904: 0xDD7D,
	25633 - 11904: 0xDDBA,
	25634 - 11904: 0xDDA8,
	25635 - 11904: 0xDDA9,
	25636 - 11904: 0xDD7E,
	25637 - 11904: 0xDDB4,
	25638 - 11904: 0xDDAB,
	25639 - 11904: 0xDDB5,
	25640 - 11904: 0xDDAD,
	25642 - 11904: 0xB765,
	25643 - 11904: 0xE1D9,
	25644 - 11904: 0xB768,
	25645 - 11904: 0xB766,
	25646 - 11904: 0xDDB9,
	25647 - 11904: 0xDDB0,
	25648 - 11904: 0xDDAC,
	25650 - 11904: 0x8AFD,
	25651 - 11904: 0xDDA1,
	25652 - 11904: 0xBA53,
	25653 - 11904: 0xDDAF,
	25654 - 11904: 0xB76D,
	25655 - 11904: 0xDDA7,
	25656 - 11904: 0xFCB5,
	25657 - 11904: 0xDDA6,
	25658 - 11904: 0xFCC3,
	25659 - 11904: 0x93B2,
	25661 - 11904: 0xB767,
	25662 - 11904: 0xB763,
	25663 - 11904: 0xE1EE,
	25664 - 11904: 0xDDB3,
	25665 - 11904: 0xDDAE,
	25667 - 11904: 0xDDA2,
	25675 - 11904: 0xE1E9,
	25677 - 11904: 0xE1DA,
	25678 - 11904: 0xE1E5,
	25680 - 11904: 0xE1EC,
	25681 - 11904: 0xBA51,
	25682 - 11904: 0xB4AC,
	25683 - 11904: 0xE1EA,
	25684 - 11904: 0xBA4C,
	25688 - 11904: 0xBA4B,
	25689 - 11904: 0xE1F1,
	25690 - 11904: 0x8DA5,
	25691 - 11904: 0xE1DB,
	25692 - 11904: 0xE1E8,
	25693 - 11904: 0xE1DC,
	25694 - 11904: 0xE1E7,
	25695 - 11904: 0xBA4F,
	25696 - 11904: 0xE1EB,
	25697 - 11904: 0xD962,
	25701 - 11904: 0xE1F2,
	25702 - 11904: 0xE1E3,
	25703 - 11904: 0xBA52,
	25704 - 11904: 0xE5BA,
	25705 - 11904: 0xBCAF,
	25707 - 11904: 0xE1F0,
	25708 - 11904: 0xE1EF,
	25709 - 11904: 0xBA54,
	25710 - 11904: 0xE5AD,
	25711 - 11904: 0xBCB0,
	25712 - 11904: 0xE5AE,
	25713 - 11904: 0x93A1,
	25714 - 11904: 0xE1DF,
	25715 - 11904: 0xE1E0,
	25716 - 11904: 0xE1DD,
	25717 - 11904: 0xE1E2,
	25718 - 11904: 0xE1DE,
	25719 - 11904: 0xE1F3,
	25720 - 11904: 0xBA4E,
	25721 - 11904: 0xBCB1,
	25722 - 11904: 0xBA50,
	25723 - 11904: 0xBA55,
	25724 - 11904: 0x8AC6,
	25725 - 11904: 0xE1E1,
	25727 - 11904: 0xE1ED,
	25730 - 11904: 0xE1E6,
	25733 - 11904: 0xE5B1,
	25735 - 11904: 0xBA4A,
	25736 - 11904: 0xBCB4,
	25737 - 11904: 0xE9AA,
	25738 - 11904: 0xE5B6,
	25739 - 11904: 0xE5B5,
	25740 - 11904: 0xE5B7,
	25741 - 11904: 0x8A5B,
	25743 - 11904: 0xE5B4,
	25744 - 11904: 0xFCB9,
	25745 - 11904: 0x894D,
	25746 - 11904: 0xBCBB,
	25747 - 11904: 0xBCB8,
	25749 - 11904: 0xBCB9,
	25750 - 11904: 0xE5AF,
	25751 - 11904: 0xE5B2,
	25752 - 11904: 0xE5BC,
	25753 - 11904: 0xBCC1,
	25754 - 11904: 0xBCBF,
	25756 - 11904: 0xE5B3,
	25757 - 11904: 0xD95A,
	25758 - 11904: 0xBCB2,
	25759 - 11904: 0xE5B9,
	25760 - 11904: 0xE5B0,
	25762 - 11904: 0xBCC2,
	25763 - 11904: 0xE5B8,
	25764 - 11904: 0xBA4D,
	25765 - 11904: 0xBCB7,
	25766 - 11904: 0xE1E4,
	25769 - 11904: 0xBCBA,
	25771 - 11904: 0xBCBE,
	25772 - 11904: 0xBCC0,
	25773 - 11904: 0xBCBD,
	25774 - 11904: 0xBCBC,
	25775 - 11904: 0xFED4,
	25776 - 11904: 0xBCB6,
	25777 - 11904: 0xE5BB,
	25778 - 11904: 0xBCB3,
	25779 - 11904: 0xBCC3,
	25780 - 11904: 0x8A78,
	25782 - 11904: 0x93AB,
	25787 - 11904: 0xBED8,
	25788 - 11904: 0xBED9,
	25789 - 11904: 0xE9A9,
	25790 - 11904: 0xBEE2,
	25791 - 11904: 0xBEDF,
	25792 - 11904: 0x8DA7,
	25793 - 11904: 0xBED6,
	25794 - 11904: 0xBEDD,
	25795 - 11904: 0xE9AB,
	25796 - 11904: 0xBEDB,
	25797 - 11904: 0xBED5,
	25799 - 11904: 0xBEDC,
	25801 - 11904: 0xE9A8,
	25802 - 11904: 0xC0BB,
	25803 - 11904: 0xBED7,
	25805 - 11904: 0xBEDE,
	25806 - 11904: 0xC0BA,
	25807 - 11904: 0xE9A7,
	25808 - 11904: 0xE9A6,
	25810 - 11904: 0xBEE0,
	25811 - 11904: 0x9F45,
	25812 - 11904: 0xBEE1,
	25814 - 11904: 0xE9A5,
	25815 - 11904: 0xE9A4,
	25816 - 11904: 0xC0BC,
	25817 - 11904: 0xE9AE,
	25818 - 11904: 0xBEDA,
	25819 - 11904: 0xE9AC,
	25821 - 11904: 0x8A56,
	25824 - 11904: 0xC0BD,
	25825 - 11904: 0xFCBF,
	25826 - 11904: 0xC0C2,
	25827 - 11904: 0xECEA,
	25828 - 11904: 0xECEC,
	25829 - 11904: 0xFCC0,
	25830 - 11904: 0xC0BF,
	25831 - 11904: 0x8EE6,
	25832 - 11904: 0xECED,
	25833 - 11904: 0xECE9,
	25834 - 11904: 0x8AA4,
	25835 - 11904: 0xECEB,
	25836 - 11904: 0xC0C0,
	25837 - 11904: 0xC0C3,
	25839 - 11904: 0xECE8,
	25840 - 11904: 0xC0BE,
	25841 - 11904: 0xC0C1,
	25842 - 11904: 0xC259,
	25843 - 11904: 0xE9AD,
	25844 - 11904: 0xC258,
	25847 - 11904: 0xC25E,
	25848 - 11904: 0xEFD4,
	25850 - 11904: 0xC25C,
	25851 - 11904: 0xC25D,
	25852 - 11904: 0xEFD7,
	25853 - 11904: 0xEFD3,
	25854 - 11904: 0xC25A,
	25855 - 11904: 0xEFD1,
	25856 - 11904: 0xC36B,
	25857 - 11904: 0xEFD5,
	25859 - 11904: 0xEFD6,
	25860 - 11904: 0xEFD2,
	25862 - 11904: 0xC25B,
	25863 - 11904: 0xF242,
	25865 - 11904: 0xF245,
	25866 - 11904: 0x8943,
	25868 - 11904: 0xF246,
	25869 - 11904: 0xF244,
	25870 - 11904: 0xF247,
	25871 - 11904: 0xC36C,
	25872 - 11904: 0xF243,
	25873 - 11904: 0x93F3,
	25875 - 11904: 0xF44E,
	25876 - 11904: 0xC464,
	25877 - 11904: 0xF44D,
	25878 - 11904: 0xF44C,
	25879 - 11904: 0xF44B,
	25880 - 11904: 0xC463,
	25881 - 11904: 0xC465,
	25883 - 11904: 0xF5CD,
	25884 - 11904: 0xC4E2,
	25885 - 11904: 0xC4E1,
	25886 - 11904: 0xFCAB,
	25887 - 11904: 0x9EA2,
	25888 - 11904: 0xF6E1,
	25889 - 11904: 0xF6E0,
	25890 - 11904: 0xF6E3,
	25891 - 11904: 0xC5CB,
	25892 - 11904: 0xC575,
	25893 - 11904: 0xF7DD,
	25894 - 11904: 0xF6E2,
	25897 - 11904: 0xF7DC,
	25898 - 11904: 0xC5CD,
	25899 - 11904: 0xC5CC,
	25900 - 11904: 0xC5F3,
	25901 - 11904: 0xF8A9,
	25902 - 11904: 0xF8EF,
	25903 - 11904: 0xA4E4,
	25904 - 11904: 0x9DC7,
	25906 - 11904: 0xD972,
	25907 - 11904: 0xE9AF,
	25908 - 11904: 0xC6D2,
	25909 - 11904: 0x8BCE,
	25910 - 11904: 0xA6AC,
	25911 - 11904: 0xCAF7,
	25912 - 11904: 0xA7F1,
	25913 - 11904: 0xA7EF,
	25915 - 11904: 0xA7F0,
	25917 - 11904: 0xCCC1,
	25918 - 11904: 0xA9F1,
	25919 - 11904: 0xAC46,
	25921 - 11904: 0xCEE7,
	25923 - 11904: 0xCEE8,
	25925 - 11904: 0xAC47,
	25926 - 11904: 0xD1CE,
	25928 - 11904: 0xAEC4,
	25929 - 11904: 0xAEC5,
	25930 - 11904: 0xD1CD,
	25933 - 11904: 0xFCC5,
	25935 - 11904: 0xB1D3,
	25937 - 11904: 0xB1CF,
	25939 - 11904: 0xD5A7,
	25940 - 11904: 0xB1D6,
	25941 - 11904: 0xB1D5,
	25942 - 11904: 0xB1CE,
	25943 - 11904: 0xB1D1,
	25944 - 11904: 0xB1D4,
	25945 - 11904: 0xB1D0,
	25948 - 11904: 0xD976,
	25949 - 11904: 0xB1CD,
	25950 - 11904: 0xB4AF,
	25951 - 11904: 0xFCCB,
	25954 - 11904: 0xB4B1,
	25955 - 11904: 0xB4B2,
	25956 - 11904: 0xD975,
	25957 - 11904: 0xD978,
	25958 - 11904: 0xB4B0,
	25959 - 11904: 0xD973,
	25960 - 11904: 0xD977,
	25962 - 11904: 0xD974,
	25963 - 11904: 0x93B3,
	25964 - 11904: 0xB771,
	25965 - 11904: 0xFCCA,
	25967 - 11904: 0xDDBC,
	25970 - 11904: 0xBA56,
	25971 - 11904: 0xE1F4,
	25972 - 11904: 0xBEE3,
	25973 - 11904: 0xBCC4,
	25974 - 11904: 0xE5BD,
	25975 - 11904: 0xBCC5,
	25976 - 11904: 0xBCC6,
	25977 - 11904: 0xE5BF,
	25978 - 11904: 0xE5BE,
	25979 - 11904: 0xE5C0,
	25980 - 11904: 0xE9B1,
	25983 - 11904: 0xE9B0,
	25984 - 11904: 0xECEF,
	25985 - 11904: 0xECEE,
	25986 - 11904: 0xC0C4,
	25987 - 11904: 0xC0C5,
	25988 - 11904: 0xF248,
	25989 - 11904: 0xFCC9,
	25990 - 11904: 0x8DAC,
	25991 - 11904: 0xA4E5,
	25992 - 11904: 0xFBC6,
	25993 - 11904: 0x8967,
	25995 - 11904: 0x8C7E,
	25996 - 11904: 0xD979,
	26000 - 11904: 0xB4B4,
	26001 - 11904: 0xB4B3,
	26002 - 11904: 0xDDBD,
	26004 - 11904: 0xEFD8,
	26005 - 11904: 0xC4E3,
	26006 - 11904: 0xF7DE,
	26007 - 11904: 0xA4E6,
	26009 - 11904: 0xAEC6,
	26011 - 11904: 0xB1D8,
	26012 - 11904: 0xB1D7,
	26013 - 11904: 0xD97A,
	26014 - 11904: 0xD97B,
	26015 - 11904: 0xB772,
	26016 - 11904: 0xE1F5,
	26017 - 11904: 0xBA57,
	26018 - 11904: 0xE9B2,
	26020 - 11904: 0xA4E7,
	26021 - 11904: 0xA5B8,
	26023 - 11904: 0xA9F2,
	26024 - 11904: 0xCCC2,
	26026 - 11904: 0xCEE9,
	26027 - 11904: 0xAC48,
	26028 - 11904: 0xB1D9,
	26030 - 11904: 0xD97C,
	26031 - 11904: 0xB4B5,
	26032 - 11904: 0xB773,
	26034 - 11904: 0xE5C1,
	26035 - 11904: 0xE5C2,
	26037 - 11904: 0xFCCD,
	26038 - 11904: 0xECF0,
	26039 - 11904: 0xC25F,
	26040 - 11904: 0xF8F0,
	26041 - 11904: 0xA4E8,
	26043 - 11904: 0xCCC3,
	26044 - 11904: 0xA9F3,
	26045 - 11904: 0xAC49,
	26046 - 11904: 0x9CF3,
	26047 - 11904: 0xCEEA,
	26049 - 11904: 0xAEC7,
	26050 - 11904: 0xD1D2,
	26051 - 11904: 0xD1D0,
	26052 - 11904: 0xD1D1,
	26053 - 11904: 0xAEC8,
	26054 - 11904: 0xD1CF,
	26059 - 11904: 0xB1DB,
	26060 - 11904: 0xB1DC,
	26061 - 11904: 0xD5A8,
	26062 - 11904: 0xB1DD,
	26063 - 11904: 0xB1DA,
	26064 - 11904: 0xD97D,
	26065 - 11904: 0xFCD0,
	26066 - 11904: 0xD97E,
	26067 - 11904: 0xDDBE,
	26068 - 11904: 0x95BB,
	26070 - 11904: 0xBA59,
	26071 - 11904: 0xBA58,
	26074 - 11904: 0xECF1,
	26075 - 11904: 0xEFD9,
	26077 - 11904: 0xF24A,
	26078 - 11904: 0xF249,
	26079 - 11904: 0xF44F,
	26080 - 11904: 0xFCD3,
	26081 - 11904: 0xC95E,
	26082 - 11904: 0xAC4A,
	26083 - 11904: 0xFCD4,
	26085 - 11904: 0xA4E9,
	26086 - 11904: 0xA5B9,
	26088 - 11904: 0xA6AE,
	26089 - 11904: 0xA6AD,
	26092 - 11904: 0xA6AF,
	26093 - 11904: 0xA6B0,
	26094 - 11904: 0xC9EE,
	26095 - 11904: 0xC9ED,
	26096 - 11904: 0xCAF8,
	26097 - 11904: 0xA7F2,
	26098 - 11904: 0xCAFB,
	26099 - 11904: 0xCAFA,
	26100 - 11904: 0xCAF9,
	26101 - 11904: 0xCAFC,
	26106 - 11904: 0xA9F4,
	26107 - 11904: 0xCCC9,
	26108 - 11904: 0xCCC5,
	26109 - 11904: 0xCCCE,
	26111 - 11904: 0x8DAE,
	26112 - 11904: 0xA9FB,
	26114 - 11904: 0xA9F9,
	26115 - 11904: 0xCCCA,
	26116 - 11904: 0xCCC6,
	26117 - 11904: 0xCCCD,
	26118 - 11904: 0xA9F8,
	26119 - 11904: 0xAA40,
	26120 - 11904: 0xCCC8,
	26121 - 11904: 0xCCC4,
	26122 - 11904: 0xA9FE,
	26123 - 11904: 0xCCCB,
	26124 - 11904: 0xA9F7,
	26125 - 11904: 0xCCCC,
	26126 - 11904: 0xA9FA,
	26127 - 11904: 0xA9FC,
	26128 - 11904: 0xCCD0,
	26129 - 11904: 0xCCCF,
	26130 - 11904: 0xCCC7,
	26131 - 11904: 0xA9F6,
	26132 - 11904: 0xA9F5,
	26133 - 11904: 0xA9FD,
	26136 - 11904: 0xFCD7,
	26140 - 11904: 0xCEEF,
	26141 - 11904: 0xCEF5,
	26142 - 11904: 0x93DB,
	26143 - 11904: 0xAC50,
	26144 - 11904: 0xAC4D,
	26145 - 11904: 0xCEEC,
	26146 - 11904: 0xCEF1,
	26147 - 11904: 0xFE63,
	26148 - 11904: 0xAC53,
	26149 - 11904: 0xAC4B,
	26150 - 11904: 0xCEF0,
	26151 - 11904: 0xAC4E,
	26152 - 11904: 0xAC51,
	26155 - 11904: 0xCEF3,
	26157 - 11904: 0xAC4C,
	26158 - 11904: 0xCEF8,
	26159 - 11904: 0xAC4F,
	26160 - 11904: 0x93D5,
	26161 - 11904: 0xAC52,
	26162 - 11904: 0xCEED,
	26163 - 11904: 0xCEF2,
	26164 - 11904: 0xCEF6,
	26165 - 11904: 0xCEEE,
	26166 - 11904: 0xCEEB,
	26169 - 11904: 0xCEF7,
	26170 - 11904: 0xCEF4,
	26177 - 11904: 0xAED0,
	26178 - 11904: 0xAEC9,
	26179 - 11904: 0xAECC,
	26180 - 11904: 0xFCDA,
	26181 - 11904: 0xAECF,
	26183 - 11904: 0xD1D5,
	26184 - 11904: 0x9B71,
	26185 - 11904: 0xAECA,
	26186 - 11904: 0xD1D3,
	26187 - 11904: 0xFCDD,
	26188 - 11904: 0xAECE,
	26189 - 11904: 0x8764,
	26191 - 11904: 0xAECB,
	26193 - 11904: 0xD1D6,
	26194 - 11904: 0xAECD,
	26195 - 11904: 0x8DAF,
	26199 - 11904: 0xFAF2,
	26201 - 11904: 0xD5AC,
	26202 - 11904: 0xB1DF,
	26203 - 11904: 0xD5AB,
	26204 - 11904: 0xD5AD,
	26205 - 11904: 0xB1DE,
	26206 - 11904: 0xB1E3,
	26207 - 11904: 0xD1D4,
	26208 - 11904: 0x87B5,
	26209 - 11904: 0xD5AA,
	26210 - 11904: 0xD5AE,
	26211 - 11904: 0x93D8,
	26212 - 11904: 0xB1E0,
	26213 - 11904: 0xD5A9,
	26214 - 11904: 0xB1E2,
	26215 - 11904: 0xFCDF,
	26216 - 11904: 0xB1E1,
	26218 - 11904: 0xD9A7,
	26219 - 11904: 0x93D3,
	26220 - 11904: 0xD9A2,
	26222 - 11904: 0xB4B6,
	26223 - 11904: 0xB4BA,
	26224 - 11904: 0xB4B7,
	26225 - 11904: 0xD9A5,
	26226 - 11904: 0xD9A8,
	26227 - 11904: 0xFCE1,
	26228 - 11904: 0xFCE2,
	26230 - 11904: 0xB4B9,
	26231 - 11904: 0xB4BE,
	26232 - 11904: 0xDDC7,
	26233 - 11904: 0xD9A6,
	26234 - 11904: 0xB4BC,
	26235 - 11904: 0xD9A3,
	26236 - 11904: 0xD9A1,
	26237 - 11904: 0x8E76,
	26238 - 11904: 0xB4BD,
	26240 - 11904: 0xD9A4,
	26244 - 11904: 0xB779,
	26245 - 11904: 0xFC62,
	26246 - 11904: 0xDDBF,
	26247 - 11904: 0xB776,
	26248 - 11904: 0xB777,
	26249 - 11904: 0xB775,
	26250 - 11904: 0xDDC4,
	26251 - 11904: 0xDDC3,
	26252 - 11904: 0xDDC0,
	26253 - 11904: 0xB77B,
	26254 - 11904: 0x93D1,
	26256 - 11904: 0xDDC2,
	26257 - 11904: 0xB4BB,
	26258 - 11904: 0x8DB1,
	26260 - 11904: 0xDDC6,
	26261 - 11904: 0xDDC1,
	26262 - 11904: 0xB778,
	26263 - 11904: 0xB774,
	26264 - 11904: 0xB77A,
	26265 - 11904: 0xDDC5,
	26266 - 11904: 0x9859,
	26269 - 11904: 0xBA5C,
	26271 - 11904: 0xE1F8,
	26272 - 11904: 0xE1F7,
	26273 - 11904: 0xE1F6,
	26274 - 11904: 0xBA5A,
	26276 - 11904: 0xFB52,
	26280 - 11904: 0xBA5B,
	26281 - 11904: 0xE5C5,
	26282 - 11904: 0xE5C8,
	26283 - 11904: 0xBCC8,
	26285 - 11904: 0xFB53,
	26286 - 11904: 0xBCC7,
	26287 - 11904: 0xE5C9,
	26288 - 11904: 0xE5C4,
	26289 - 11904: 0xBCCA,
	26290 - 11904: 0xE5C6,
	26291 - 11904: 0xFB4D,
	26292 - 11904: 0xBCC9,
	26293 - 11904: 0xE5C3,
	26294 - 11904: 0x9CBF,
	26295 - 11904: 0xE5C7,
	26296 - 11904: 0xBEE9,
	26297 - 11904: 0xBEE6,
	26298 - 11904: 0xE9BB,
	26299 - 11904: 0xE9BA,
	26301 - 11904: 0xE9B9,
	26302 - 11904: 0xE9B4,
	26303 - 11904: 0x9B72,
	26304 - 11904: 0xE9B5,
	26308 - 11904: 0xBEE7,
	26310 - 11904: 0xBEE4,
	26311 - 11904: 0xBEE8,
	26312 - 11904: 0xE9B3,
	26313 - 11904: 0xBEE5,
	26314 - 11904: 0xE9B6,
	26315 - 11904: 0xE9B7,
	26316 - 11904: 0xE9BC,
	26317 - 11904: 0xFB50,
	26318 - 11904: 0x93BE,
	26319 - 11904: 0xE9B8,
	26322 - 11904: 0xECF2,
	26326 - 11904: 0xC0C7,
	26328 - 11904: 0xEFDC,
	26329 - 11904: 0xC0C6,
	26330 - 11904: 0xEFDA,
	26331 - 11904: 0xEFDB,
	26332 - 11904: 0xC260,
	26333 - 11904: 0xC36E,
	26334 - 11904: 0xF24B,
	26336 - 11904: 0xC36D,
	26339 - 11904: 0xF451,
	26340 - 11904: 0xF452,
	26342 - 11904: 0xC466,
	26343 - 11904: 0x8CDB,
	26344 - 11904: 0xF450,
	26345 - 11904: 0xC4E4,
	26347 - 11904: 0xF7DF,
	26348 - 11904: 0xC5CE,
	26349 - 11904: 0xF8AA,
	26350 - 11904: 0xF8AB,
	26352 - 11904: 0xA4EA,
	26353 - 11904: 0x9DF1,
	26354 - 11904: 0xA6B1,
	26355 - 11904: 0xA6B2,
	26356 - 11904: 0xA7F3,
	26358 - 11904: 0xCCD1,
	26359 - 11904: 0xAC54,
	26360 - 11904: 0xAED1,
	26361 - 11904: 0xB1E4,
	26364 - 11904: 0xB0D2,
	26366 - 11904: 0xB4BF,
	26367 - 11904: 0xB4C0,
	26368 - 11904: 0xB3CC,
	26369 - 11904: 0xD9A9,
	26370 - 11904: 0xFCEB,
	26371 - 11904: 0xB77C,
	26372 - 11904: 0xE1FA,
	26373 - 11904: 0xE1F9,
	26376 - 11904: 0xA4EB,
	26377 - 11904: 0xA6B3,
	26378 - 11904: 0xCCD2,
	26379 - 11904: 0xAA42,
	26380 - 11904: 0xA0BB,
	26381 - 11904: 0xAA41,
	26382 - 11904: 0x9B7E,
	26383 - 11904: 0xCEF9,
	26384 - 11904: 0xCEFA,
	26386 - 11904: 0xD1D7,
	26387 - 11904: 0xD1D8,
	26388 - 11904: 0xAED2,
	26389 - 11904: 0xAED3,
	26390 - 11904: 0x8DB3,
	26391 - 11904: 0xAED4,
	26392 - 11904: 0xD5AF,
	26393 - 11904: 0x8C52,
	26395 - 11904: 0xB1E6,
	26397 - 11904: 0xB4C2,
	26398 - 11904: 0x9AE8,
	26399 - 11904: 0xB4C1,
	26400 - 11904: 0xDDC8,
	26401 - 11904: 0xDF7A,
	26402 - 11904: 0xE1FB,
	26403 - 11904: 0xE9BD,
	26405 - 11904: 0x8EDC,
	26406 - 11904: 0xC261,
	26407 - 11904: 0xC467,
	26408 - 11904: 0xA4EC,
	26410 - 11904: 0xA5BC,
	26411 - 11904: 0xA5BD,
	26412 - 11904: 0xA5BB,
	26413 - 11904: 0xA5BE,
	26414 - 11904: 0xA5BA,
	26417 - 11904: 0xA6B6,
	26419 - 11904: 0xC9F6,
	26420 - 11904: 0xA6B5,
	26421 - 11904: 0xA6B7,
	26422 - 11904: 0x9CF9,
	26424 - 11904: 0xC9F1,
	26425 - 11904: 0xC9F0,
	26426 - 11904: 0xC9F3,
	26427 - 11904: 0xC9F2,
	26428 - 11904: 0xC9F5,
	26429 - 11904: 0xA6B4,
	26430 - 11904: 0xC9EF,
	26431 - 11904: 0xC9F4,
	26436 - 11904: 0xFA50,
	26437 - 11904: 0xCAFD,
	26438 - 11904: 0xA7FD,
	26439 - 11904: 0xCAFE,
	26440 - 11904: 0xCB43,
	26441 - 11904: 0xA7FC,
	26443 - 11904: 0xCB47,
	26444 - 11904: 0xCB42,
	26445 - 11904: 0xCB45,
	26446 - 11904: 0xA7F5,
	26447 - 11904: 0xA7F6,
	26448 - 11904: 0xA7F7,
	26449 - 11904: 0xA7F8,
	26451 - 11904: 0xA840,
	26453 - 11904: 0xCB41,
	26454 - 11904: 0xA7FA,
	26455 - 11904: 0xA841,
	26457 - 11904: 0xCB40,
	26458 - 11904: 0xCB46,
	26460 - 11904: 0xA7F9,
	26461 - 11904: 0xCB44,
	26462 - 11904: 0xFCF1,
	26463 - 11904: 0xA7F4,
	26464 - 11904: 0xA7FE,
	26465 - 11904: 0x98E7,
	26466 - 11904: 0xFCF3,
	26471 - 11904: 0xFCF2,
	26474 - 11904: 0xAA57,
	26475 - 11904: 0x8CCA,
	26476 - 11904: 0xCCD4,
	26477 - 11904: 0xAA43,
	26478 - 11904: 0x8775,
	26479 - 11904: 0xAA4D,
	26480 - 11904: 0xAA4E,
	26481 - 11904: 0xAA46,
	26482 - 11904: 0xAA58,
	26483 - 11904: 0xAA48,
	26484 - 11904: 0xCCDC,
	26485 - 11904: 0xAA53,
	26486 - 11904: 0xCCD7,
	26487 - 11904: 0xAA49,
	26488 - 11904: 0xCCE6,
	26489 - 11904: 0xCCE7,
	26490 - 11904: 0xCCDF,
	26491 - 11904: 0xCCD8,
	26492 - 11904: 0xAA56,
	26493 - 11904: 0xCCE4,
	26494 - 11904: 0xAA51,
	26495 - 11904: 0xAA4F,
	26497 - 11904: 0xCCE5,
	26498 - 11904: 0x87BA,
	26499 - 11904: 0xCCE3,
	26500 - 11904: 0xCCDB,
	26501 - 11904: 0xCCD3,
	26502 - 11904: 0xCCDA,
	26503 - 11904: 0xAA4A,
	26505 - 11904: 0xAA50,
	26507 - 11904: 0xAA44,
	26508 - 11904: 0xCCDE,
	26509 - 11904: 0xCCDD,
	26510 - 11904: 0xCCD5,
	26511 - 11904: 0x93E5,
	26512 - 11904: 0xAA52,
	26513 - 11904: 0xCCE1,
	26514 - 11904: 0xCCD6,
	26515 - 11904: 0xAA55,
	26516 - 11904: 0xCCE8,
	26517 - 11904: 0xAA45,
	26519 - 11904: 0xAA4C,
	26520 - 11904: 0xCCD9,
	26521 - 11904: 0xCCE2,
	26522 - 11904: 0xAA54,
	26524 - 11904: 0xAA47,
	26525 - 11904: 0xAA4B,
	26527 - 11904: 0xCCE0,
	26528 - 11904: 0x9A59,
	26532 - 11904: 0x8DB5,
	26540 - 11904: 0xFD4D,
	26542 - 11904: 0xCF5B,
	26543 - 11904: 0xAC5C,
	26544 - 11904: 0xAC69,
	26545 - 11904: 0xFD5E,
	26546 - 11904: 0xCF56,
	26547 - 11904: 0xCF4C,
	26548 - 11904: 0xAC62,
	26549 - 11904: 0xCF4A,
	26550 - 11904: 0xAC5B,
	26551 - 11904: 0xCF45,
	26552 - 11904: 0xAC65,
	26553 - 11904: 0xCF52,
	26554 - 11904: 0xCEFE,
	26555 - 11904: 0xCF41,
	26559 - 11904: 0x8F7D,
	26560 - 11904: 0xCF44,
	26561 - 11904: 0xCEFB,
	26562 - 11904: 0xCF51,
	26563 - 11904: 0xCF61,
	26564 - 11904: 0xAC60,
	26565 - 11904: 0xCF46,
	26566 - 11904: 0xCF58,
	26568 - 11904: 0xCEFD,
	26569 - 11904: 0xCF5F,
	26570 - 11904: 0xCF60,
	26571 - 11904: 0xCF63,
	26572 - 11904: 0xCF5A,
	26573 - 11904: 0xCF4B,
	26574 - 11904: 0xCF53,
	26575 - 11904: 0xAC66,
	26576 - 11904: 0xAC59,
	26577 - 11904: 0xAC61,
	26578 - 11904: 0xAC6D,
	26579 - 11904: 0xAC56,
	26580 - 11904: 0xAC58,
	26582 - 11904: 0x9547,
	26583 - 11904: 0xFCF6,
	26584 - 11904: 0xCF43,
	26585 - 11904: 0xAC6A,
	26586 - 11904: 0xAC63,
	26587 - 11904: 0xCF5D,
	26588 - 11904: 0xCF40,
	26589 - 11904: 0xAC6C,
	26590 - 11904: 0xAC67,
	26591 - 11904: 0xCF49,
	26594 - 11904: 0xAC6B,
	26595 - 11904: 0xCF50,
	26596 - 11904: 0xCF48,
	26597 - 11904: 0xAC64,
	26598 - 11904: 0xCF5C,
	26599 - 11904: 0xCF54,
	26601 - 11904: 0xAC5E,
	26602 - 11904: 0xCF62,
	26603 - 11904: 0xCF47,
	26604 - 11904: 0xAC5A,
	26605 - 11904: 0xCF59,
	26606 - 11904: 0xCF4F,
	26607 - 11904: 0xAC5F,
	26608 - 11904: 0xCF55,
	26609 - 11904: 0xAC57,
	26610 - 11904: 0xCEFC,
	26611 - 11904: 0xAC68,
	26612 - 11904: 0xAEE3,
	26613 - 11904: 0xAC5D,
	26614 - 11904: 0xCF4E,
	26615 - 11904: 0xCF4D,
	26616 - 11904: 0xCF42,
	26617 - 11904: 0x9250,
	26618 - 11904: 0xCF5E,
	26620 - 11904: 0xCF57,
	26622 - 11904: 0x8968,
	26623 - 11904: 0xAC55,
	26624 - 11904: 0x8DB6,
	26625 - 11904: 0xFCFB,
	26626 - 11904: 0xA07D,
	26627 - 11904: 0x98FC,
	26628 - 11904: 0x8969,
	26637 - 11904: 0xFE4F,
	26640 - 11904: 0x9256,
	26642 - 11904: 0xD1EC,
	26643 - 11904: 0xAEEA,
	26644 - 11904: 0xD1ED,
	26646 - 11904: 0xD1E1,
	26647 - 11904: 0xAEDF,
	26648 - 11904: 0xAEEB,
	26650 - 11904: 0xD1DA,
	26651 - 11904: 0xFAC9,
	26652 - 11904: 0xD1E3,
	26653 - 11904: 0xD1EB,
	26654 - 11904: 0x93E8,
	26655 - 11904: 0xD1D9,
	26656 - 11904: 0xD1F4,
	26657 - 11904: 0xAED5,
	26658 - 11904: 0xFCF8,
	26661 - 11904: 0xD1F3,
	26662 - 11904: 0xD1EE,
	26664 - 11904: 0xD1EF,
	26665 - 11904: 0xAEDD,
	26666 - 11904: 0xAEE8,
	26667 - 11904: 0xD1E5,
	26669 - 11904: 0xD1E6,
	26670 - 11904: 0xD1F0,
	26671 - 11904: 0xD1E7,
	26673 - 11904: 0xD1E2,
	26674 - 11904: 0xD1DC,
	26675 - 11904: 0xD1DD,
	26676 - 11904: 0xD1EA,
	26677 - 11904: 0xD1E4,
	26678 - 11904: 0x9CE3,
	26679 - 11904: 0xFDA9,
	26680 - 11904: 0xAED6,
	26681 - 11904: 0xAEDA,
	26682 - 11904: 0xD1F2,
	26683 - 11904: 0xD1DE,
	26684 - 11904: 0xAEE6,
	26685 - 11904: 0xAEE2,
	26686 - 11904: 0xFC44,
	26688 - 11904: 0xAEE5,
	26689 - 11904: 0xAEEC,
	26690 - 11904: 0xAEDB,
	26691 - 11904: 0xAEE7,
	26692 - 11904: 0xD1E9,
	26693 - 11904: 0xAEE9,
	26694 - 11904: 0xAED8,
	26695 - 11904: 0x9640,
	26696 - 11904: 0xAED7,
	26697 - 11904: 0xD1DB,
	26698 - 11904: 0x8DB8,
	26699 - 11904: 0xD1DF,
	26700 - 11904: 0xAEE0,
	26701 - 11904: 0xD1F1,
	26702 - 11904: 0xD1E8,
	26703 - 11904: 0xD1E0,
	26704 - 11904: 0xAEE4,
	26705 - 11904: 0xAEE1,
	26707 - 11904: 0xAED9,
	26708 - 11904: 0xAEDC,
	26709 - 11904: 0x9B4A,
	26710 - 11904: 0x8FB9,
	26717 - 11904: 0xFCFE,
	26725 - 11904: 0x896A,
	26731 - 11904: 0xD5C4,
	26733 - 11904: 0xD5B4,
	26734 - 11904: 0xD5B5,
	26735 - 11904: 0xD5B9,
	26737 - 11904: 0xD5C8,
	26738 - 11904: 0xD5C5,
	26740 - 11904: 0xD5BE,
	26741 - 11904: 0xD5BD,
	26742 - 11904: 0xB1ED,
	26743 - 11904: 0xD5C1,
	26744 - 11904: 0xD5D0,
	26745 - 11904: 0xD5B0,
	26747 - 11904: 0xD5D1,
	26748 - 11904: 0xD5C3,
	26749 - 11904: 0xD5D5,
	26750 - 11904: 0xD5C9,
	26751 - 11904: 0xB1EC,
	26752 - 11904: 0xD5C7,
	26753 - 11904: 0xB1E7,
	26754 - 11904: 0xB1FC,
	26755 - 11904: 0xB1F2,
	26756 - 11904: 0x8DB9,
	26757 - 11904: 0xB1F6,
	26758 - 11904: 0xB1F5,
	26759 - 11904: 0xD5B1,
	26760 - 11904: 0x917E,
	26761 - 11904: 0xD5CE,
	26762 - 11904: 0xD5D4,
	26763 - 11904: 0xD5CC,
	26764 - 11904: 0xD5D3,
	26767 - 11904: 0xD5C0,
	26768 - 11904: 0xD5B2,
	26769 - 11904: 0xD5D2,
	26770 - 11904: 0xD5C2,
	26771 - 11904: 0xB1EA,
	26772 - 11904: 0xB1F7,
	26774 - 11904: 0xD5CB,
	26775 - 11904: 0xB1F0,
	26776 - 11904: 0x93F4,
	26779 - 11904: 0xD5CA,
	26780 - 11904: 0xD5B3,
	26781 - 11904: 0xB1F8,
	26783 - 11904: 0xB1FA,
	26784 - 11904: 0xD5CD,
	26785 - 11904: 0xB1FB,
	26786 - 11904: 0xB1E9,
	26787 - 11904: 0xD5BA,
	26788 - 11904: 0xD5CF,
	26790 - 11904: 0xFB7C,
	26791 - 11904: 0xB1EF,
	26792 - 11904: 0xB1F9,
	26793 - 11904: 0xD5BC,
	26794 - 11904: 0xD5C6,
	26795 - 11904: 0xD5B7,
	26796 - 11904: 0xD5BB,
	26797 - 11904: 0xB1F4,
	26798 - 11904: 0xD5B6,
	26799 - 11904: 0xB1E8,
	26800 - 11904: 0xB1F1,
	26801 - 11904: 0xB1EE,
	26802 - 11904: 0xD5BF,
	26803 - 11904: 0xAEDE,
	26804 - 11904: 0xD9C0,
	26805 - 11904: 0xB1EB,
	26806 - 11904: 0x93E7,
	26809 - 11904: 0x97EF,
	26813 - 11904: 0xFE4A,
	26819 - 11904: 0xFD45,
	26820 - 11904: 0xB1F3,
	26821 - 11904: 0x96A5,
	26822 - 11904: 0xD9C3,
	26823 - 11904: 0xD9D9,
	26824 - 11904: 0xD9CE,
	26825 - 11904: 0xB4D6,
	26826 - 11904: 0xFEE0,
	26827 - 11904: 0xB4D1,
	26828 - 11904: 0xD9BD,
	26829 - 11904: 0xB4D2,
	26830 - 11904: 0xD9CD,
	26832 - 11904: 0xD9C6,
	26833 - 11904: 0xD9D3,
	26834 - 11904: 0xB4CE,
	26835 - 11904: 0xD9AB,
	26836 - 11904: 0xD9D5,
	26837 - 11904: 0xB4C4,
	26838 - 11904: 0xD9B3,
	26839 - 11904: 0xB4C7,
	26840 - 11904: 0xB4C6,
	26842 - 11904: 0xB4D7,
	26844 - 11904: 0xD9AD,
	26845 - 11904: 0xD9CF,
	26846 - 11904: 0xD9D0,
	26847 - 11904: 0xB4C9,
	26848 - 11904: 0xB4C5,
	26849 - 11904: 0xD9BB,
	26851 - 11904: 0xB4D0,
	26852 - 11904: 0xD9B6,
	26854 - 11904: 0xD9D1,
	26855 - 11904: 0xB4CC,
	26856 - 11904: 0xD9C9,
	26857 - 11904: 0xD9D6,
	26858 - 11904: 0xD9B0,
	26859 - 11904: 0xD9B5,
	26860 - 11904: 0xD9AF,
	26862 - 11904: 0xB4CB,
	26863 - 11904: 0xD9C2,
	26864 - 11904: 0xDDDE,
	26865 - 11904: 0xD9B1,
	26866 - 11904: 0xB4CF,
	26867 - 11904: 0xD9BA,
	26868 - 11904: 0xD9D2,
	26869 - 11904: 0xB4CA,
	26870 - 11904: 0xD9B7,
	26871 - 11904: 0xD9B4,
	26872 - 11904: 0xD9C5,
	26873 - 11904: 0xB4CD,
	26874 - 11904: 0xB4C3,
	26875 - 11904: 0xB4D9,
	26876 - 11904: 0xD9C8,
	26877 - 11904: 0xD9C7,
	26880 - 11904: 0xFD48,
	26881 - 11904: 0xFD47,
	26882 - 11904: 0xFEF2,
	26883 - 11904: 0xFE6A,
	26884 - 11904: 0xD9AC,
	26885 - 11904: 0xB4C8,
	26886 - 11904: 0xD9D4,
	26887 - 11904: 0xD9BC,
	26888 - 11904: 0xD9BE,
	26889 - 11904: 0x8DBD,
	26890 - 11904: 0xD9CB,
	26891 - 11904: 0xD9CA,
	26892 - 11904: 0xD9AA,
	26893 - 11904: 0xB4D3,
	26894 - 11904: 0xB4D5,
	26895 - 11904: 0xD9B2,
	26896 - 11904: 0xD9B9,
	26897 - 11904: 0xD9C1,
	26898 - 11904: 0xB4D4,
	26899 - 11904: 0xD9B8,
	26900 - 11904: 0xD9C4,
	26901 - 11904: 0xD9D7,
	26903 - 11904: 0xD9CC,
	26904 - 11904: 0x9BA1,
	26905 - 11904: 0x8CA2,
	26906 - 11904: 0x9AB7,
	26907 - 11904: 0x8EFC,
	26917 - 11904: 0xD9D8,
	26922 - 11904: 0xD9AE,
	26924 - 11904: 0x9FA1,
	26927 - 11904: 0xDDF2,
	26928 - 11904: 0xB7A6,
	26930 - 11904: 0xDDF0,
	26931 - 11904: 0xDDDB,
	26932 - 11904: 0xDDE0,
	26933 - 11904: 0xDDD9,
	26934 - 11904: 0xFD51,
	26935 - 11904: 0xDDEC,
	26936 - 11904: 0xDDCB,
	26937 - 11904: 0xDDD2,
	26939 - 11904: 0xDDEA,
	26940 - 11904: 0xDDF4,
	26941 - 11904: 0xDDDC,
	26942 - 11904: 0xFAAD,
	26943 - 11904: 0xDDCF,
	26944 - 11904: 0xDDE2,
	26945 - 11904: 0xDDE7,
	26946 - 11904: 0xDDD3,
	26947 - 11904: 0x8DBE,
	26948 - 11904: 0xDDE4,
	26949 - 11904: 0xDDD0,
	26950 - 11904: 0x89A4,
	26952 - 11904: 0xDDD7,
	26953 - 11904: 0xDDD8,
	26954 - 11904: 0xB7A8,
	26955 - 11904: 0xDDEB,
	26956 - 11904: 0xDDE9,
	26958 - 11904: 0xDDCC,
	26959 - 11904: 0xDDEE,
	26961 - 11904: 0xDDEF,
	26962 - 11904: 0xDDF1,
	26963 - 11904: 0xB7AC,
	26964 - 11904: 0xB7A4,
	26965 - 11904: 0x9AD9,
	26966 - 11904: 0xD5B8,
	26967 - 11904: 0xDDD4,
	26968 - 11904: 0xDDE6,
	26969 - 11904: 0xDDD5,
	26970 - 11904: 0xB7A1,
	26971 - 11904: 0xB7B1,
	26972 - 11904: 0xDDED,
	26973 - 11904: 0xB7AF,
	26974 - 11904: 0xB7AB,
	26975 - 11904: 0xDDCA,
	26976 - 11904: 0xB7A3,
	26977 - 11904: 0xFD4E,
	26978 - 11904: 0xDDCD,
	26979 - 11904: 0xB7B0,
	26980 - 11904: 0x8DC0,
	26981 - 11904: 0xDDDD,
	26982 - 11904: 0xDDC9,
	26983 - 11904: 0x97F0,
	26984 - 11904: 0xB7A9,
	26985 - 11904: 0xDDE1,
	26986 - 11904: 0xDDD1,
	26987 - 11904: 0xB7AA,
	26988 - 11904: 0xDDDA,
	26989 - 11904: 0xB77E,
	26990 - 11904: 0xB4D8,
	26991 - 11904: 0xDDE3,
	26992 - 11904: 0xD9BF,
	26993 - 11904: 0xDDCE,
	26994 - 11904: 0x93B4,
	26995 - 11904: 0xFD44,
	26996 - 11904: 0xDDE8,
	26997 - 11904: 0xB7A5,
	26998 - 11904: 0xDDE5,
	26999 - 11904: 0xB7A2,
	27000 - 11904: 0xDDDF,
	27001 - 11904: 0xB7AD,
	27002 - 11904: 0xDDD6,
	27003 - 11904: 0xDDF3,
	27008 - 11904: 0x9FA7,
	27010 - 11904: 0xB7A7,
	27011 - 11904: 0xDEC6,
	27013 - 11904: 0x8DC2,
	27014 - 11904: 0xB7AE,
	27018 - 11904: 0x99B6,
	27021 - 11904: 0xE24A,
	27022 - 11904: 0xE248,
	27024 - 11904: 0xE25E,
	27025 - 11904: 0xE246,
	27027 - 11904: 0xE258,
	27028 - 11904: 0xB77D,
	27029 - 11904: 0xBA5F,
	27030 - 11904: 0xE242,
	27031 - 11904: 0xE25D,
	27032 - 11904: 0xFD52,
	27033 - 11904: 0xE247,
	27034 - 11904: 0xE255,
	27035 - 11904: 0xBA64,
	27036 - 11904: 0xBA5D,
	27038 - 11904: 0xE25B,
	27039 - 11904: 0x8DC1,
	27040 - 11904: 0xE240,
	27041 - 11904: 0xE25A,
	27042 - 11904: 0x8E46,
	27043 - 11904: 0xBA6F,
	27044 - 11904: 0xE251,
	27045 - 11904: 0xE261,
	27046 - 11904: 0xBA6D,
	27047 - 11904: 0xE249,
	27048 - 11904: 0xBA5E,
	27049 - 11904: 0xE24B,
	27050 - 11904: 0xE259,
	27051 - 11904: 0xBA67,
	27052 - 11904: 0xE244,
	27053 - 11904: 0xBA6B,
	27054 - 11904: 0xBA61,
	27055 - 11904: 0xE24D,
	27056 - 11904: 0xE243,
	27057 - 11904: 0xE1FC,
	27058 - 11904: 0xA0D1,
	27059 - 11904: 0xE257,
	27060 - 11904: 0xBA68,
	27061 - 11904: 0xE260,
	27062 - 11904: 0xE1FD,
	27063 - 11904: 0xBA65,
	27065 - 11904: 0xE253,
	27067 - 11904: 0xBA66,
	27068 - 11904: 0xE245,
	27069 - 11904: 0xE250,
	27070 - 11904: 0xE24C,
	27071 - 11904: 0xE24E,
	27072 - 11904: 0x9FCA,
	27073 - 11904: 0xBA60,
	27074 - 11904: 0xE25F,
	27075 - 11904: 0xBA6E,
	27076 - 11904: 0xE24F,
	27078 - 11904: 0xE262,
	27081 - 11904: 0xE1FE,
	27082 - 11904: 0xE254,
	27083 - 11904: 0xBA63,
	27084 - 11904: 0xBA6C,
	27085 - 11904: 0xBA6A,
	27086 - 11904: 0xE241,
	27087 - 11904: 0xE256,
	27088 - 11904: 0xBA69,
	27089 - 11904: 0x92CF,
	27091 - 11904: 0xBA62,
	27092 - 11904: 0xE252,
	27093 - 11904: 0x9CF4,
	27094 - 11904: 0x8DC4,
	27097 - 11904: 0xE25C,
	27105 - 11904: 0xFD41,
	27106 - 11904: 0xE5D5,
	27108 - 11904: 0xE5D1,
	27109 - 11904: 0xE5CD,
	27110 - 11904: 0xE5E1,
	27111 - 11904: 0xE5DE,
	27112 - 11904: 0xBCCD,
	27113 - 11904: 0x9B4C,
	27115 - 11904: 0xE5E5,
	27116 - 11904: 0xE5D4,
	27117 - 11904: 0xBCD8,
	27118 - 11904: 0xE5DB,
	27121 - 11904: 0xE5D0,
	27122 - 11904: 0xE5DA,
	27123 - 11904: 0xBCD5,
	27124 - 11904: 0xE5EE,
	27126 - 11904: 0xE5EB,
	27127 - 11904: 0xE5DD,
	27128 - 11904: 0xE5CE,
	27129 - 11904: 0xFD57,
	27130 - 11904: 0xFCEF,
	27131 - 11904: 0xE5E2,
	27132 - 11904: 0xE5E4,
	27133 - 11904: 0xBCD1,
	27134 - 11904: 0xE5D8,
	27135 - 11904: 0xE5D3,
	27136 - 11904: 0xE5CA,
	27137 - 11904: 0xBCCE,
	27138 - 11904: 0xBCD6,
	27139 - 11904: 0x9CDE,
	27140 - 11904: 0xE5E7,
	27141 - 11904: 0xBCD7,
	27142 - 11904: 0xE5CB,
	27143 - 11904: 0xE5ED,
	27144 - 11904: 0xE5E0,
	27145 - 11904: 0xE5E6,
	27146 - 11904: 0xBCD4,
	27147 - 11904: 0xFD42,
	27148 - 11904: 0x986C,
	27149 - 11904: 0xE5E3,
	27151 - 11904: 0xE5EA,
	27153 - 11904: 0xBCD9,
	27155 - 11904: 0xBCD3,
	27156 - 11904: 0xE5DC,
	27157 - 11904: 0xE5CF,
	27158 - 11904: 0xE5EF,
	27159 - 11904: 0xE5CC,
	27160 - 11904: 0xE5E8,
	27161 - 11904: 0xBCD0,
	27162 - 11904: 0x97F9,
	27163 - 11904: 0xE5D6,
	27164 - 11904: 0x9558,
	27165 - 11904: 0xE5D7,
	27166 - 11904: 0xBCCF,
	27167 - 11904: 0xBCCC,
	27168 - 11904: 0xE5D2,
	27169 - 11904: 0xBCD2,
	27171 - 11904: 0xBCCB,
	27173 - 11904: 0xE5E9,
	27174 - 11904: 0xE5EC,
	27175 - 11904: 0xE5D9,
	27176 - 11904: 0xE9CA,
	27177 - 11904: 0x87B6,
	27179 - 11904: 0x985E,
	27180 - 11904: 0xFE7B,
	27181 - 11904: 0x94CD,
	27186 - 11904: 0xE9C2,
	27187 - 11904: 0x93EE,
	27188 - 11904: 0xE9BE,
	27189 - 11904: 0xBEF6,
	27192 - 11904: 0xBEEB,
	27193 - 11904: 0xBEF0,
	27194 - 11904: 0xBEEC,
	27195 - 11904: 0xE9CC,
	27196 - 11904: 0xE9D7,
	27197 - 11904: 0xBEEA,
	27198 - 11904: 0xE9C4,
	27199 - 11904: 0xE9CD,
	27200 - 11904: 0xE5DF,
	27201 - 11904: 0xE9CE,
	27203 - 11904: 0x8CA3,
	27204 - 11904: 0xBEF1,
	27205 - 11904: 0xFD5A,
	27206 - 11904: 0xE9DD,
	27207 - 11904: 0xBEF5,
	27208 - 11904: 0xBEF8,
	27209 - 11904: 0xE9C0,
	27211 - 11904: 0xBEF4,
	27212 - 11904: 0x93F5,
	27213 - 11904: 0xE9DB,
	27214 - 11904: 0xE9DC,
	27215 - 11904: 0xE9D2,
	27216 - 11904: 0xE9D1,
	27217 - 11904: 0xE9C9,
	27218 - 11904: 0x93EF,
	27219 - 11904: 0x8EEA,
	27220 - 11904: 0xE9D3,
	27221 - 11904: 0xE9DA,
	27222 - 11904: 0xE9D9,
	27223 - 11904: 0x8F5B,
	27224 - 11904: 0xBEEF,
	27225 - 11904: 0xBEED,
	27226 - 11904: 0xE9CB,
	27227 - 11904: 0xE9C8,
	27229 - 11904: 0xE9C5,
	27230 - 11904: 0xE9D8,
	27231 - 11904: 0xBEF7,
	27232 - 11904: 0xE9D6,
	27233 - 11904: 0xBEF3,
	27234 - 11904: 0xBEF2,
	27235 - 11904: 0x8C5E,
	27236 - 11904: 0xE9D0,
	27237 - 11904: 0x8DC6,
	27238 - 11904: 0xE9BF,
	27239 - 11904: 0xE9C1,
	27240 - 11904: 0xE9C3,
	27241 - 11904: 0xE9D5,
	27242 - 11904: 0xE9CF,
	27243 - 11904: 0xBEEE,
	27245 - 11904: 0xE9C6,
	27247 - 11904: 0xE9D4,
	27249 - 11904: 0x8DC8,
	27252 - 11904: 0x8DC7,
	27254 - 11904: 0xE9C7,
	27258 - 11904: 0x93F7,
	27262 - 11904: 0xC0CF,
	27263 - 11904: 0xED45,
	27264 - 11904: 0xC0C8,
	27265 - 11904: 0xECF5,
	27266 - 11904: 0x8DC9,
	27267 - 11904: 0xED41,
	27268 - 11904: 0xC0CA,
	27269 - 11904: 0xED48,
	27271 - 11904: 0xECFC,
	27273 - 11904: 0xECF7,
	27274 - 11904: 0xFBF2,
	27276 - 11904: 0xED49,
	27277 - 11904: 0xECF3,
	27278 - 11904: 0xECFE,
	27279 - 11904: 0x9670,
	27280 - 11904: 0xC0D1,
	27281 - 11904: 0xED44,
	27282 - 11904: 0xED4A,
	27283 - 11904: 0xECFD,
	27284 - 11904: 0xC0C9,
	27285 - 11904: 0xED40,
	27286 - 11904: 0xECF4,
	27287 - 11904: 0xC0D0,
	27289 - 11904: 0x8DCB,
	27290 - 11904: 0xED47,
	27291 - 11904: 0xECF9,
	27292 - 11904: 0xC0CC,
	27293 - 11904: 0xFD5C,
	27294 - 11904: 0xECFB,
	27295 - 11904: 0xECF8,
	27296 - 11904: 0xC0D2,
	27297 - 11904: 0xECFA,
	27298 - 11904: 0xC0CB,
	27299 - 11904: 0xC0CE,
	27300 - 11904: 0xED43,
	27301 - 11904: 0xECF6,
	27302 - 11904: 0xED46,
	27303 - 11904: 0x8F65,
	27304 - 11904: 0xED42,
	27307 - 11904: 0x8DCD,
	27308 - 11904: 0xC263,
	27309 - 11904: 0xEFE7,
	27310 - 11904: 0xC268,
	27311 - 11904: 0xC269,
	27313 - 11904: 0x9DA8,
	27314 - 11904: 0x94F9,
	27315 - 11904: 0xC262,
	27316 - 11904: 0xEFE6,
	27317 - 11904: 0x8DCE,
	27318 - 11904: 0xEFE3,
	27319 - 11904: 0xEFE4,
	27320 - 11904: 0xC266,
	27321 - 11904: 0xEFDE,
	27322 - 11904: 0xEFE2,
	27323 - 11904: 0xC265,
	27325 - 11904: 0xEFDF,
	27326 - 11904: 0x93EA,
	27330 - 11904: 0xC267,
	27331 - 11904: 0xC264,
	27333 - 11904: 0xEFDD,
	27334 - 11904: 0xEFE1,
	27335 - 11904: 0xEFE5,
	27336 - 11904: 0xFD5F,
	27337 - 11904: 0x93F0,
	27338 - 11904: 0x9FB6,
	27339 - 11904: 0xF251,
	27340 - 11904: 0xF24E,
	27341 - 11904: 0xF257,
	27343 - 11904: 0xF256,
	27344 - 11904: 0xF254,
	27345 - 11904: 0xF24F,
	27347 - 11904: 0xC372,
	27348 - 11904: 0x8DCF,
	27352 - 11904: 0x9763,
	27353 - 11904: 0xF250,
	27354 - 11904: 0xC371,
	27355 - 11904: 0xC0CD,
	27356 - 11904: 0xF253,
	27357 - 11904: 0xC370,
	27358 - 11904: 0xF258,
	27359 - 11904: 0xF252,
	27360 - 11904: 0xF24D,
	27361 - 11904: 0xEFE0,
	27365 - 11904: 0xC36F,
	27367 - 11904: 0xF24C,
	27368 - 11904: 0xF456,
	27370 - 11904: 0xF455,
	27371 - 11904: 0xF255,
	27372 - 11904: 0xC468,
	27374 - 11904: 0xF459,
	27375 - 11904: 0xF45A,
	27376 - 11904: 0xF454,
	27377 - 11904: 0xF458,
	27379 - 11904: 0xF453,
	27382 - 11904: 0x8DD0,
	27384 - 11904: 0xF5D1,
	27385 - 11904: 0xF457,
	27386 - 11904: 0xC4E7,
	27387 - 11904: 0xC4E5,
	27388 - 11904: 0xF5CF,
	27392 - 11904: 0xF5D2,
	27394 - 11904: 0xF5CE,
	27395 - 11904: 0xF5D0,
	27396 - 11904: 0xC4E6,
	27397 - 11904: 0x93F1,
	27400 - 11904: 0xF6E5,
	27401 - 11904: 0xF6E6,
	27402 - 11904: 0xC576,
	27403 - 11904: 0xF6E4,
	27407 - 11904: 0xF7E2,
	27408 - 11904: 0xC5CF,
	27409 - 11904: 0xF7E0,
	27410 - 11904: 0xF7E1,
	27411 - 11904: 0xF8AC,
	27414 - 11904: 0xC656,
	27415 - 11904: 0xF8F3,
	27416 - 11904: 0xF8F1,
	27417 - 11904: 0xF8F2,
	27418 - 11904: 0xF8F4,
	27421 - 11904: 0xFD62,
	27422 - 11904: 0xF9BB,
	27424 - 11904: 0xA4ED,
	27425 - 11904: 0xA6B8,
	27427 - 11904: 0xAA59,
	27429 - 11904: 0xCCE9,
	27432 - 11904: 0xCF64,
	27436 - 11904: 0xD1F5,
	27437 - 11904: 0xD1F7,
	27439 - 11904: 0xD1F6,
	27441 - 11904: 0xD1F8,
	27442 - 11904: 0xB1FD,
	27443 - 11904: 0xD5D7,
	27444 - 11904: 0xD1F9,
	27445 - 11904: 0xFD65,
	27446 - 11904: 0xD5D6,
	27447 - 11904: 0xD5D8,
	27448 - 11904: 0xD5D9,
	27449 - 11904: 0xD9DA,
	27450 - 11904: 0xB4DB,
	27451 - 11904: 0xD9DB,
	27452 - 11904: 0xD9DD,
	27453 - 11904: 0xB4DC,
	27454 - 11904: 0xB4DA,
	27455 - 11904: 0xD9DC,
	27457 - 11904: 0xDDFA,
	27458 - 11904: 0xDDF8,
	27459 - 11904: 0xDDF7,
	27461 - 11904: 0xDDF6,
	27462 - 11904: 0xDDF5,
	27463 - 11904: 0xB7B2,
	27464 - 11904: 0xDDF9,
	27465 - 11904: 0xBA70,
	27466 - 11904: 0xE263,
	27467 - 11904: 0xE265,
	27468 - 11904: 0xBA71,
	27469 - 11904: 0xE264,
	27470 - 11904: 0xBCDB,
	27472 - 11904: 0xBCDA,
	27473 - 11904: 0xE5F0,
	27474 - 11904: 0x9FDB,
	27476 - 11904: 0xE9DF,
	27477 - 11904: 0xE9DE,
	27478 - 11904: 0xE9E0,
	27479 - 11904: 0x93F8,
	27481 - 11904: 0xBEF9,
	27483 - 11904: 0xED4B,
	27484 - 11904: 0xC0D3,
	27486 - 11904: 0xEFE8,
	27487 - 11904: 0xC26A,
	27488 - 11904: 0xF259,
	27489 - 11904: 0xC577,
	27490 - 11904: 0xA4EE,
	27491 - 11904: 0xA5BF,
	27492 - 11904: 0xA6B9,
	27493 - 11904: 0xA842,
	27494 - 11904: 0xAA5A,
	27495 - 11904: 0xAA5B,
	27498 - 11904: 0xAC6E,
	27501 - 11904: 0xD1FA,
	27503 - 11904: 0x8BF7,
	27506 - 11904: 0xB7B3,
	27508 - 11904: 0xFD66,
	27510 - 11904: 0xE6D1,
	27511 - 11904: 0xBEFA,
	27512 - 11904: 0xC26B,
	27513 - 11904: 0xA4EF,
	27514 - 11904: 0x8BCF,
	27515 - 11904: 0xA6BA,
	27518 - 11904: 0xCCEB,
	27519 - 11904: 0xAA5C,
	27520 - 11904: 0xCCEA,
	27521 - 11904: 0x8DD1,
	27522 - 11904: 0xCF65,
	27523 - 11904: 0xAC6F,
	27524 - 11904: 0xCF66,
	27526 - 11904: 0xAC70,
	27528 - 11904: 0xD1FC,
	27529 - 11904: 0xAEEE,
	27530 - 11904: 0xAEED,
	27532 - 11904: 0xD5DE,
	27533 - 11904: 0xD5DC,
	27534 - 11904: 0xD5DD,
	27535 - 11904: 0xD5DB,
	27537 - 11904: 0xD5DA,
	27540 - 11904: 0xD9DE,
	27541 - 11904: 0xD9E1,
	27542 - 11904: 0xB4DE,
	27543 - 11904: 0xD9DF,
	27544 - 11904: 0xB4DD,
	27545 - 11904: 0xD9E0,
	27547 - 11904: 0xDDFB,
	27550 - 11904: 0xE266,
	27551 - 11904: 0xE267,
	27552 - 11904: 0xE268,
	27554 - 11904: 0xE5F3,
	27555 - 11904: 0xE5F2,
	27556 - 11904: 0xBCDC,
	27557 - 11904: 0xE5F1,
	27558 - 11904: 0xE5F4,
	27559 - 11904: 0xE9E1,
	27562 - 11904: 0xE9E2,
	27563 - 11904: 0xE9E3,
	27565 - 11904: 0xED4C,
	27566 - 11904: 0xC0D4,
	27567 - 11904: 0xC26C,
	27568 - 11904: 0xF25A,
	27570 - 11904: 0xC4E8,
	27571 - 11904: 0xC95F,
	27573 - 11904: 0xAC71,
	27574 - 11904: 0xCF67,
	27575 - 11904: 0xAEEF,
	27578 - 11904: 0xB1FE,
	27580 - 11904: 0xB4DF,
	27581 - 11904: 0xD9E2,
	27583 - 11904: 0xB7B5,
	27584 - 11904: 0xB7B4,
	27585 - 11904: 0x8DD2,
	27587 - 11904: 0xE269,
	27588 - 11904: 0xE26A,
	27589 - 11904: 0xBCDD,
	27590 - 11904: 0xBCDE,
	27591 - 11904: 0xE9E5,
	27592 - 11904: 0xE9E4,
	27593 - 11904: 0xEFE9,
	27594 - 11904: 0xF7E3,
	27595 - 11904: 0xA4F0,
	27596 - 11904: 0xC960,
	27597 - 11904: 0xA5C0,
	27599 - 11904: 0xA843,
	27600 - 11904: 0xCB48,
	27602 - 11904: 0xAC72,
	27603 - 11904: 0xB7B6,
	27604 - 11904: 0xA4F1,
	27606 - 11904: 0xCF68,
	27607 - 11904: 0xAC73,
	27608 - 11904: 0xCF69,
	27610 - 11904: 0xC0D5,
	27611 - 11904: 0xA4F2,
	27612 - 11904: 0xFD71,
	27614 - 11904: 0xCCEC,
	27616 - 11904: 0xCF6A,
	27617 - 11904: 0xFD6F,
	27618 - 11904: 0xD242,
	27619 - 11904: 0xD241,
	27620 - 11904: 0xD1FE,
	27622 - 11904: 0xD1FD,
	27623 - 11904: 0xD243,
	27624 - 11904: 0xD240,
	27626 - 11904: 0x8DD3,
	27627 - 11904: 0xB240,
	27628 - 11904: 0xB241,
	27631 - 11904: 0xB4E0,
	27632 - 11904: 0xD9E3,
	27634 - 11904: 0xD9E4,
	27635 - 11904: 0xD9E5,
	27639 - 11904: 0xDE41,
	27640 - 11904: 0xDE42,
	27641 - 11904: 0xDE40,
	27642 - 11904: 0x9FE7,
	27643 - 11904: 0xDDFD,
	27644 - 11904: 0xDDFE,
	27645 - 11904: 0xB7B7,
	27646 - 11904: 0xE26B,
	27647 - 11904: 0xE5F7,
	27648 - 11904: 0xE5F6,
	27649 - 11904: 0xE5F5,
	27650 - 11904: 0xE5F8,
	27651 - 11904: 0xE9E7,
	27652 - 11904: 0xE9E6,
	27653 - 11904: 0xBEFB,
	27654 - 11904: 0xE9E8,
	27656 - 11904: 0xC0D6,
	27657 - 11904: 0xED4D,
	27659 - 11904: 0xEFEA,
	27660 - 11904: 0xF25B,
	27661 - 11904: 0xF6E7,
	27663 - 11904: 0xA4F3,
	27664 - 11904: 0xA5C2,
	27665 - 11904: 0xA5C1,
	27667 - 11904: 0xAA5D,
	27668 - 11904: 0xC961,
	27669 - 11904: 0xC97E,
	27670 - 11904: 0xA6BB,
	27672 - 11904: 0xC9F7,
	27673 - 11904: 0xCB49,
	27674 - 11904: 0xCB4A,
	27675 - 11904: 0xAA5E,
	27676 - 11904: 0x90BD,
	27677 - 11904: 0xCCED,
	27679 - 11904: 0xAC74,
	27680 - 11904: 0xCF6B,
	27681 - 11904: 0xCF6C,
	27683 - 11904: 0xAEF0,
	27684 - 11904: 0xAEF4,
	27685 - 11904: 0xD244,
	27686 - 11904: 0xAEF3,
	27687 - 11904: 0xAEF1,
	27688 - 11904: 0xAEF2,
	27690 - 11904: 0xD5DF,
	27691 - 11904: 0xB242,
	27692 - 11904: 0xB4E3,
	27694 - 11904: 0xB4E1,
	27695 - 11904: 0xB4E2,
	27696 - 11904: 0xD9E6,
	27697 - 11904: 0x9FD0,
	27699 - 11904: 0xBA72,
	27700 - 11904: 0xA4F4,
	27701 - 11904: 0x8BD0,
	27702 - 11904: 0xC9A1,
	27703 - 11904: 0xFD72,
	27704 - 11904: 0xA5C3,
	27705 - 11904: 0x9CAE,
	27706 - 11904: 0x8BD1,
	27707 - 11904: 0xC9A4,
	27709 - 11904: 0x8ADB,
	27710 - 11904: 0xA5C6,
	27711 - 11904: 0xC9A3,
	27712 - 11904: 0xA5C5,
	27713 - 11904: 0xA5C4,
	27714 - 11904: 0xA844,
	27715 - 11904: 0xC9A2,
	27718 - 11904: 0xC9F8,
	27721 - 11904: 0xFAE4,
	27722 - 11904: 0xC9FC,
	27723 - 11904: 0xC9FE,
	27724 - 11904: 0xCA40,
	27725 - 11904: 0xA6C5,
	27726 - 11904: 0xA6C6,
	27727 - 11904: 0xC9FB,
	27728 - 11904: 0xA6C1,
	27730 - 11904: 0xC9F9,
	27732 - 11904: 0xC9FD,
	27733 - 11904: 0xA6C2,
	27735 - 11904: 0xA6BD,
	27736 - 11904: 0x95CE,
	27737 - 11904: 0xA6BE,
	27738 - 11904: 0xFD76,
	27739 - 11904: 0xA6C4,
	27740 - 11904: 0xC9FA,
	27741 - 11904: 0xA6BC,
	27742 - 11904: 0xA845,
	27743 - 11904: 0xA6BF,
	27744 - 11904: 0xA6C0,
	27745 - 11904: 0xA6C3,
	27749 - 11904: 0xCB5B,
	27750 - 11904: 0xCB59,
	27751 - 11904: 0xCB4C,
	27752 - 11904: 0xA851,
	27753 - 11904: 0xCB53,
	27754 - 11904: 0xA84C,
	27755 - 11904: 0xCB4D,
	27757 - 11904: 0xCB55,
	27758 - 11904: 0xFB62,
	27759 - 11904: 0xCB52,
	27760 - 11904: 0xA84F,
	27761 - 11904: 0xCB51,
	27762 - 11904: 0xA856,
	27763 - 11904: 0xCB5A,
	27764 - 11904: 0xA858,
	27765 - 11904: 0x8DD4,
	27766 - 11904: 0xA85A,
	27768 - 11904: 0xCB4B,
	27769 - 11904: 0xFD78,
	27770 - 11904: 0xA84D,
	27771 - 11904: 0xCB5C,
	27773 - 11904: 0xA854,
	27774 - 11904: 0xA857,
	27775 - 11904: 0x8EE3,
	27776 - 11904: 0xCD45,
	27777 - 11904: 0xA847,
	27778 - 11904: 0xA85E,
	27779 - 11904: 0xA855,
	27780 - 11904: 0xCB4E,
	27781 - 11904: 0xA84A,
	27782 - 11904: 0xA859,
	27783 - 11904: 0xCB56,
	27784 - 11904: 0xA848,
	27785 - 11904: 0xA849,
	27786 - 11904: 0xCD43,
	27787 - 11904: 0xCB4F,
	27788 - 11904: 0xA850,
	27789 - 11904: 0xA85B,
	27790 - 11904: 0xCB5D,
	27791 - 11904: 0xCB50,
	27792 - 11904: 0xA84E,
	27794 - 11904: 0xA853,
	27795 - 11904: 0xCCEE,
	27796 - 11904: 0xA85C,
	27797 - 11904: 0xCB57,
	27798 - 11904: 0xA852,
	27800 - 11904: 0xA85D,
	27801 - 11904: 0xA846,
	27802 - 11904: 0xCB54,
	27803 - 11904: 0xA84B,
	27804 - 11904: 0xFDB7,
	27805 - 11904: 0xCD44,
	27807 - 11904: 0x9076,
	27810 - 11904: 0x98C6,
	27818 - 11904: 0x8DD5,
	27819 - 11904: 0xAA6A,
	27820 - 11904: 0xAA7A,
	27821 - 11904: 0xCCF5,
	27822 - 11904: 0xAA71,
	27823 - 11904: 0x97D1,
	27824 - 11904: 0xCD4B,
	27825 - 11904: 0xAA62,
	27826 - 11904: 0x9EB6,
	27827 - 11904: 0xAA65,
	27828 - 11904: 0xCD42,
	27830 - 11904: 0xCCF3,
	27831 - 11904: 0xCCF7,
	27832 - 11904: 0xAA6D,
	27833 - 11904: 0xAA6F,
	27834 - 11904: 0xCCFA,
	27835 - 11904: 0xAA76,
	27836 - 11904: 0xAA68,
	27837 - 11904: 0xAA66,
	27838 - 11904: 0xAA67,
	27839 - 11904: 0xAA75,
	27840 - 11904: 0xCD47,
	27841 - 11904: 0xAA70,
	27842 - 11904: 0xCCF9,
	27843 - 11904: 0xCCFB,
	27844 - 11904: 0xAA6E,
	27845 - 11904: 0xAA73,
	27846 - 11904: 0xCCFC,
	27847 - 11904: 0xCD4A,
	27849 - 11904: 0xAC75,
	27850 - 11904: 0xAA79,
	27851 - 11904: 0xFAC7,
	27852 - 11904: 0xAA63,
	27853 - 11904: 0xCD49,
	27854 - 11904: 0xA042,
	27855 - 11904: 0xCD4D,
	27856 - 11904: 0xCCF8,
	27857 - 11904: 0xCD4F,
	27858 - 11904: 0xCD40,
	27859 - 11904: 0xAA6C,
	27860 - 11904: 0xCCF4,
	27861 - 11904: 0xAA6B,
	27862 - 11904: 0xAA7D,
	27863 - 11904: 0xAA72,
	27865 - 11904: 0xCCF2,
	27866 - 11904: 0xCF75,
	27867 - 11904: 0xAA78,
	27868 - 11904: 0xAA7C,
	27869 - 11904: 0xCD41,
	27870 - 11904: 0xCD46,
	27871 - 11904: 0x9873,
	27872 - 11904: 0xAA7E,
	27873 - 11904: 0xAA77,
	27874 - 11904: 0xAA69,
	27875 - 11904: 0xAA5F,
	27877 - 11904: 0xAA64,
	27879 - 11904: 0xCCF6,
	27880 - 11904: 0xAA60,
	27881 - 11904: 0xCD4E,
	27882 - 11904: 0x9FFC,
	27883 - 11904: 0xCCF0,
	27884 - 11904: 0xCCEF,
	27885 - 11904: 0xCCFD,
	27886 - 11904: 0xCCF1,
	27887 - 11904: 0xAA7B,
	27888 - 11904: 0xAEF5,
	27889 - 11904: 0xAA74,
	27890 - 11904: 0xCCFE,
	27891 - 11904: 0xAA61,
	27893 - 11904: 0xACA6,
	27897 - 11904: 0xCD4C,
	27903 - 11904: 0x8CA5,
	27904 - 11904: 0xCF7C,
	27905 - 11904: 0xCFA1,
	27906 - 11904: 0x8DD7,
	27907 - 11904: 0xCFA4,
	27908 - 11904: 0xCF77,
	27909 - 11904: 0x92FB,
	27910 - 11904: 0x8DD8,
	27911 - 11904: 0xCFA7,
	27912 - 11904: 0xCFAA,
	27913 - 11904: 0xCFAC,
	27914 - 11904: 0xCF74,
	27915 - 11904: 0xAC76,
	27916 - 11904: 0xAC7B,
	27917 - 11904: 0xD249,
	27918 - 11904: 0xACAD,
	27919 - 11904: 0xCFA5,
	27920 - 11904: 0xCFAD,
	27921 - 11904: 0xCF7B,
	27922 - 11904: 0xCF73,
	27926 - 11904: 0xD264,
	27927 - 11904: 0xAC7E,
	27928 - 11904: 0xCFA2,
	27929 - 11904: 0xCF78,
	27930 - 11904: 0xCF7A,
	27931 - 11904: 0xACA5,
	27933 - 11904: 0xCF7D,
	27934 - 11904: 0xAC7D,
	27935 - 11904: 0xCF70,
	27936 - 11904: 0xCFA8,
	27938 - 11904: 0xCFAB,
	27940 - 11904: 0x944F,
	27941 - 11904: 0xAC7A,
	27942 - 11904: 0x8DD9,
	27943 - 11904: 0xACA8,
	27944 - 11904: 0xCF6D,
	27945 - 11904: 0xACAA,
	27946 - 11904: 0xAC78,
	27947 - 11904: 0xACAE,
	27948 - 11904: 0xCFA9,
	27949 - 11904: 0xCF6F,
	27950 - 11904: 0xACAB,
	27951 - 11904: 0xD25E,
	27952 - 11904: 0xCD48,
	27953 - 11904: 0xAC7C,
	27954 - 11904: 0xAC77,
	27955 - 11904: 0xCF76,
	27956 - 11904: 0xCF6E,
	27957 - 11904: 0xACAC,
	27958 - 11904: 0xACA4,
	27959 - 11904: 0xCFA3,
	27960 - 11904: 0xACA9,
	27961 - 11904: 0xACA7,
	27962 - 11904: 0xCF79,
	27963 - 11904: 0xACA1,
	27964 - 11904: 0xCF71,
	27965 - 11904: 0xACA2,
	27966 - 11904: 0xACA3,
	27967 - 11904: 0xCF72,
	27968 - 11904: 0xCFA6,
	27969 - 11904: 0xAC79,
	27970 - 11904: 0xCF7E,
	27982 - 11904: 0x896B,
	27991 - 11904: 0x97CE,
	27992 - 11904: 0xD24C,
	27993 - 11904: 0xAEFD,
	27994 - 11904: 0xAF43,
	27995 - 11904: 0xFAF3,
	27996 - 11904: 0xFDAE,
	27998 - 11904: 0xD255,
	27999 - 11904: 0xD25B,
	28000 - 11904: 0xD257,
	28001 - 11904: 0xD24A,
	28002 - 11904: 0xD24D,
	28003 - 11904: 0xD246,
	28004 - 11904: 0xD247,
	28005 - 11904: 0xAF4A,
	28006 - 11904: 0xAEFA,
	28007 - 11904: 0xD256,
	28008 - 11904: 0xD25F,
	28009 - 11904: 0xAF45,
	28010 - 11904: 0xAEF6,
	28012 - 11904: 0xAF40,
	28013 - 11904: 0xD24E,
	28014 - 11904: 0xAF42,
	28015 - 11904: 0xD24F,
	28016 - 11904: 0xD259,
	28017 - 11904: 0xFBAF,
	28018 - 11904: 0x92B7,
	28020 - 11904: 0xAF44,
	28021 - 11904: 0xD268,
	28022 - 11904: 0xD248,
	28023 - 11904: 0xAEFC,
	28024 - 11904: 0xAEFB,
	28025 - 11904: 0xAF48,
	28026 - 11904: 0xD245,
	28027 - 11904: 0xD266,
	28028 - 11904: 0xD25A,
	28029 - 11904: 0xD267,
	28030 - 11904: 0xD261,
	28031 - 11904: 0xD253,
	28032 - 11904: 0xD262,
	28033 - 11904: 0x8DDA,
	28034 - 11904: 0xD25C,
	28035 - 11904: 0xD265,
	28036 - 11904: 0xD263,
	28037 - 11904: 0xAF49,
	28038 - 11904: 0xD254,
	28039 - 11904: 0xAEF9,
	28040 - 11904: 0xAEF8,
	28041 - 11904: 0xAF41,
	28042 - 11904: 0xAF47,
	28043 - 11904: 0xD260,
	28044 - 11904: 0xAF46,
	28045 - 11904: 0xD251,
	28046 - 11904: 0xB243,
	28047 - 11904: 0x9C5A,
	28048 - 11904: 0xD269,
	28049 - 11904: 0xD250,
	28050 - 11904: 0xD24B,
	28051 - 11904: 0xAEFE,
	28052 - 11904: 0xAF4B,
	28053 - 11904: 0xAEF7,
	28054 - 11904: 0xFDAD,
	28055 - 11904: 0xD258,
	28056 - 11904: 0xD25D,
	28068 - 11904: 0x8DDC,
	28069 - 11904: 0x9444,
	28074 - 11904: 0xB265,
	28075 - 11904: 0xD5E1,
	28076 - 11904: 0xD5E5,
	28078 - 11904: 0xB252,
	28079 - 11904: 0xB250,
	28081 - 11904: 0x8DDD,
	28082 - 11904: 0xB247,
	28083 - 11904: 0xD5E3,
	28084 - 11904: 0xD5E2,
	28085 - 11904: 0xB25B,
	28087 - 11904: 0xD5E8,
	28088 - 11904: 0xB255,
	28089 - 11904: 0xA0D6,
	28090 - 11904: 0xD5FA,
	28091 - 11904: 0xD647,
	28092 - 11904: 0xB244,
	28093 - 11904: 0xD5F7,
	28094 - 11904: 0xD5F0,
	28095 - 11904: 0xB267,
	28096 - 11904: 0xD5E0,
	28098 - 11904: 0xD5FC,
	28100 - 11904: 0xB264,
	28101 - 11904: 0xB258,
	28102 - 11904: 0xB263,
	28103 - 11904: 0xB24E,
	28104 - 11904: 0xD5EC,
	28105 - 11904: 0xD5FE,
	28106 - 11904: 0xD5F6,
	28107 - 11904: 0xB24F,
	28108 - 11904: 0xB249,
	28109 - 11904: 0xD645,
	28111 - 11904: 0xD5FD,
	28112 - 11904: 0xD640,
	28113 - 11904: 0xB251,
	28114 - 11904: 0xB259,
	28115 - 11904: 0xD642,
	28116 - 11904: 0xD5EA,
	28117 - 11904: 0xD5FB,
	28118 - 11904: 0xD5EF,
	28119 - 11904: 0xD644,
	28120 - 11904: 0xB25E,
	28121 - 11904: 0xB246,
	28122 - 11904: 0xB25C,
	28123 - 11904: 0xD5F4,
	28124 - 11904: 0xD5F2,
	28125 - 11904: 0xD5F3,
	28126 - 11904: 0xB253,
	28127 - 11904: 0xD5EE,
	28128 - 11904: 0xD5ED,
	28129 - 11904: 0xB248,
	28130 - 11904: 0xD5E7,
	28131 - 11904: 0xD646,
	28132 - 11904: 0xB24A,
	28133 - 11904: 0xD5F1,
	28134 - 11904: 0xB268,
	28136 - 11904: 0xB262,
	28137 - 11904: 0xD5E6,
	28138 - 11904: 0xB25F,
	28139 - 11904: 0xB25D,
	28140 - 11904: 0xB266,
	28141 - 11904: 0xD5F8,
	28142 - 11904: 0xB261,
	28143 - 11904: 0xD252,
	28144 - 11904: 0xD5F9,
	28145 - 11904: 0xB260,
	28146 - 11904: 0xD641,
	28147 - 11904: 0xB245,
	28148 - 11904: 0xD5F5,
	28149 - 11904: 0xB257,
	28150 - 11904: 0xD5E9,
	28151 - 11904: 0xB256,
	28153 - 11904: 0xB254,
	28154 - 11904: 0xB24C,
	28155 - 11904: 0xB24B,
	28156 - 11904: 0xD9E7,
	28157 - 11904: 0xD643,
	28158 - 11904: 0x8C41,
	28160 - 11904: 0xD5EB,
	28162 - 11904: 0x97D5,
	28163 - 11904: 0xD9FC,
	28164 - 11904: 0x944A,
	28165 - 11904: 0xB24D,
	28170 - 11904: 0x944D,
	28175 - 11904: 0x97CB,
	28181 - 11904: 0x8DDE,
	28184 - 11904: 0x8DDF,
	28185 - 11904: 0xB541,
	28186 - 11904: 0xB25A,
	28187 - 11904: 0xB4EE,
	28188 - 11904: 0xD9F6,
	28189 - 11904: 0xFDB8,
	28191 - 11904: 0xD9EA,
	28192 - 11904: 0xB4EB,
	28193 - 11904: 0xB4E7,
	28194 - 11904: 0xDA49,
	28195 - 11904: 0xB4ED,
	28196 - 11904: 0xB4F1,
	28197 - 11904: 0xB4EC,
	28198 - 11904: 0xB4F5,
	28199 - 11904: 0xDA4D,
	28200 - 11904: 0xDA44,
	28201 - 11904: 0x8DE0,
	28202 - 11904: 0xFEF9,
	28203 - 11904: 0xD9F1,
	28204 - 11904: 0xB4FA,
	28205 - 11904: 0xB4F4,
	28206 - 11904: 0xD9FD,
	28207 - 11904: 0xFDBB,
	28208 - 11904: 0xDA4A,
	28209 - 11904: 0xDA43,
	28210 - 11904: 0xB4E8,
	28211 - 11904: 0xD9F7,
	28212 - 11904: 0xB4F7,
	28213 - 11904: 0xDA55,
	28214 - 11904: 0xDA56,
	28216 - 11904: 0xB4E5,
	28217 - 11904: 0xDA48,
	28218 - 11904: 0xB4F9,
	28219 - 11904: 0xD9FB,
	28220 - 11904: 0xD9ED,
	28221 - 11904: 0xD9EE,
	28222 - 11904: 0xB4FD,
	28223 - 11904: 0xD9F2,
	28224 - 11904: 0xD9F9,
	28225 - 11904: 0xD9F3,
	28227 - 11904: 0xB4FB,
	28228 - 11904: 0xB544,
	28229 - 11904: 0xD9EF,
	28230 - 11904: 0xD9E8,
	28231 - 11904: 0xD9E9,
	28233 - 11904: 0xD9EB,
	28234 - 11904: 0xB4EA,
	28235 - 11904: 0xD9F8,
	28237 - 11904: 0xB4F8,
	28238 - 11904: 0xB542,
	28239 - 11904: 0xFDC0,
	28240 - 11904: 0xFCF9,
	28241 - 11904: 0xD9FA,
	28242 - 11904: 0xDA53,
	28243 - 11904: 0xDA4B,
	28244 - 11904: 0xB4E6,
	28245 - 11904: 0xDA51,
	28246 - 11904: 0xB4F2,
	28247 - 11904: 0x8CDD,
	28248 - 11904: 0xB4F0,
	28249 - 11904: 0xFB7E,
	28250 - 11904: 0xDA57,
	28251 - 11904: 0xB4EF,
	28252 - 11904: 0xDA41,
	28253 - 11904: 0xD9F4,
	28254 - 11904: 0xD9FE,
	28255 - 11904: 0xB547,
	28256 - 11904: 0xDA45,
	28257 - 11904: 0xDA42,
	28258 - 11904: 0xD9F0,
	28259 - 11904: 0xB543,
	28260 - 11904: 0xDA4F,
	28261 - 11904: 0xDA4C,
	28262 - 11904: 0xDA54,
	28263 - 11904: 0xB4E9,
	28264 - 11904: 0xDA40,
	28265 - 11904: 0xB546,
	28267 - 11904: 0xDA47,
	28270 - 11904: 0xB4F3,
	28271 - 11904: 0xB4F6,
	28273 - 11904: 0xDA46,
	28274 - 11904: 0xB545,
	28275 - 11904: 0xD9F5,
	28276 - 11904: 0xD5E4,
	28278 - 11904: 0x92B3,
	28279 - 11904: 0xDA50,
	28280 - 11904: 0xDA4E,
	28281 - 11904: 0xDA52,
	28284 - 11904: 0xFDAF,
	28294 - 11904: 0x8DE1,
	28296 - 11904: 0xD9EC,
	28297 - 11904: 0xB540,
	28299 - 11904: 0x95D3,
	28301 - 11904: 0xDE61,
	28302 - 11904: 0xDE60,
	28303 - 11904: 0xDE46,
	28304 - 11904: 0xB7BD,
	28306 - 11904: 0xDE5F,
	28307 - 11904: 0xDE49,
	28308 - 11904: 0xDE4A,
	28310 - 11904: 0xB7C7,
	28311 - 11904: 0xDE68,
	28312 - 11904: 0xB7C2,
	28313 - 11904: 0xDE5E,
	28314 - 11904: 0x89C1,
	28315 - 11904: 0xDE43,
	28316 - 11904: 0xB7C8,
	28317 - 11904: 0xB7BE,
	28318 - 11904: 0xDE52,
	28319 - 11904: 0xDE48,
	28320 - 11904: 0xDE4B,
	28321 - 11904: 0xDE63,
	28322 - 11904: 0xB7B8,
	28323 - 11904: 0xDE6A,
	28324 - 11904: 0xDE62,
	28325 - 11904: 0xB7C1,
	28326 - 11904: 0xDE57,
	28327 - 11904: 0xB7CC,
	28330 - 11904: 0xB7CB,
	28331 - 11904: 0xB7C5,
	28334 - 11904: 0xDE69,
	28335 - 11904: 0xB7B9,
	28336 - 11904: 0xDE55,
	28337 - 11904: 0xDE4C,
	28338 - 11904: 0xDE59,
	28339 - 11904: 0xDE65,
	28340 - 11904: 0xB7CD,
	28341 - 11904: 0xFD68,
	28342 - 11904: 0xB7BB,
	28343 - 11904: 0xDE54,
	28344 - 11904: 0x9CB7,
	28345 - 11904: 0xDE4D,
	28346 - 11904: 0xB7C4,
	28347 - 11904: 0x8DE3,
	28348 - 11904: 0xB7C3,
	28349 - 11904: 0xDE50,
	28350 - 11904: 0xDE5A,
	28351 - 11904: 0xDE64,
	28352 - 11904: 0xDE47,
	28353 - 11904: 0xDE51,
	28354 - 11904: 0xB7BC,
	28355 - 11904: 0xDE5B,
	28356 - 11904: 0xB7C9,
	28357 - 11904: 0xB7C0,
	28358 - 11904: 0xDE4E,
	28359 - 11904: 0xB7BF,
	28360 - 11904: 0xDE45,
	28361 - 11904: 0xDE53,
	28362 - 11904: 0xDE67,
	28363 - 11904: 0xB4FE,
	28364 - 11904: 0xBAB0,
	28365 - 11904: 0xDE56,
	28366 - 11904: 0xE26C,
	28367 - 11904: 0xDE58,
	28368 - 11904: 0xDE66,
	28369 - 11904: 0xB7C6,
	28370 - 11904: 0xDE4F,
	28371 - 11904: 0xB7BA,
	28372 - 11904: 0xB7CA,
	28373 - 11904: 0xBCF0,
	28374 - 11904: 0xDE44,
	28376 - 11904: 0xDE5D,
	28377 - 11904: 0xFAC0,
	28378 - 11904: 0x8DE5,
	28379 - 11904: 0xFA64,
	28380 - 11904: 0xDE5C,
	28381 - 11904: 0x8947,
	28386 - 11904: 0x8DE4,
	28392 - 11904: 0x8DE7,
	28393 - 11904: 0x8DE8,
	28395 - 11904: 0xE2AA,
	28396 - 11904: 0xBAAD,
	28397 - 11904: 0xE27D,
	28398 - 11904: 0xE2A4,
	28399 - 11904: 0xBAA2,
	28401 - 11904: 0xE26E,
	28402 - 11904: 0xBAAF,
	28404 - 11904: 0xBA77,
	28405 - 11904: 0xE26D,
	28406 - 11904: 0xE2B0,
	28407 - 11904: 0xBAB1,
	28408 - 11904: 0xE271,
	28409 - 11904: 0xE2A3,
	28410 - 11904: 0xFDC7,
	28411 - 11904: 0xE273,
	28412 - 11904: 0xE2B3,
	28413 - 11904: 0xE2AF,
	28414 - 11904: 0xBA75,
	28415 - 11904: 0xBAA1,
	28416 - 11904: 0xE653,
	28417 - 11904: 0xBAAE,
	28418 - 11904: 0xBA7D,
	28419 - 11904: 0xE26F,
	28420 - 11904: 0xFDB0,
	28421 - 11904: 0xE2AE,
	28422 - 11904: 0xBAA3,
	28423 - 11904: 0xE2AB,
	28424 - 11904: 0xE2B8,
	28425 - 11904: 0xE275,
	28426 - 11904: 0xE27E,
	28427 - 11904: 0x9445,
	28428 - 11904: 0x97D6,
	28429 - 11904: 0xE2B6,
	28430 - 11904: 0xE2AC,
	28431 - 11904: 0xBA7C,
	28434 - 11904: 0xE27C,
	28435 - 11904: 0xBA76,
	28436 - 11904: 0xBA74,
	28437 - 11904: 0xBAA8,
	28438 - 11904: 0xFCC6,
	28439 - 11904: 0x9844,
	28440 - 11904: 0xE27A,
	28441 - 11904: 0xE277,
	28442 - 11904: 0xE278,
	28444 - 11904: 0xE2B2,
	28446 - 11904: 0xE2B7,
	28447 - 11904: 0xE2B5,
	28448 - 11904: 0xBA7A,
	28449 - 11904: 0xE2B9,
	28450 - 11904: 0xBA7E,
	28451 - 11904: 0xBAA7,
	28452 - 11904: 0x8DE9,
	28453 - 11904: 0xE270,
	28454 - 11904: 0xE5FA,
	28455 - 11904: 0xE279,
	28457 - 11904: 0xBA78,
	28458 - 11904: 0xBAAC,
	28459 - 11904: 0xBAA9,
	28460 - 11904: 0xBA7B,
	28461 - 11904: 0xE2A5,
	28462 - 11904: 0xE274,
	28463 - 11904: 0xBAAA,
	28464 - 11904: 0xE2A7,
	28465 - 11904: 0xBAA4,
	28466 - 11904: 0xBAA6,
	28467 - 11904: 0xBA73,
	28468 - 11904: 0x8DEA,
	28469 - 11904: 0xE2A9,
	28470 - 11904: 0xE2A1,
	28471 - 11904: 0xE272,
	28472 - 11904: 0xBAA5,
	28473 - 11904: 0xE2B1,
	28474 - 11904: 0xE2B4,
	28475 - 11904: 0xE27B,
	28476 - 11904: 0xE2A8,
	28477 - 11904: 0xFE50,
	28478 - 11904: 0xBA79,
	28479 - 11904: 0xBCDF,
	28480 - 11904: 0xE2A6,
	28481 - 11904: 0xE5F9,
	28483 - 11904: 0xE2AD,
	28484 - 11904: 0xFDCC,
	28494 - 11904: 0xE276,
	28495 - 11904: 0xE644,
	28496 - 11904: 0xE64E,
	28497 - 11904: 0xBCE2,
	28498 - 11904: 0xE64D,
	28499 - 11904: 0xE659,
	28500 - 11904: 0xBCE4,
	28501 - 11904: 0xE64B,
	28502 - 11904: 0x9DA7,
	28503 - 11904: 0xE64F,
	28504 - 11904: 0xBCEF,
	28506 - 11904: 0xE646,
	28507 - 11904: 0xBCE7,
	28508 - 11904: 0xFDCD,
	28509 - 11904: 0xE652,
	28510 - 11904: 0xE9F0,
	28511 - 11904: 0xBCF3,
	28512 - 11904: 0xBCF2,
	28513 - 11904: 0xE654,
	28514 - 11904: 0xE643,
	28515 - 11904: 0xE65E,
	28516 - 11904: 0xBCED,
	28518 - 11904: 0xBCE3,
	28519 - 11904: 0xE657,
	28521 - 11904: 0xE65B,
	28522 - 11904: 0xE660,
	28523 - 11904: 0xE655,
	28524 - 11904: 0xE649,
	28525 - 11904: 0xBCE6,
	28526 - 11904: 0xBCE9,
	28527 - 11904: 0xBCF1,
	28528 - 11904: 0xBCEC,
	28530 - 11904: 0xE64C,
	28531 - 11904: 0xE2A2,
	28532 - 11904: 0xFDCF,
	28534 - 11904: 0xE648,
	28535 - 11904: 0xE65F,
	28536 - 11904: 0xBCE8,
	28537 - 11904: 0x95D2,
	28538 - 11904: 0xBCEB,
	28539 - 11904: 0xE661,
	28540 - 11904: 0xBCE0,
	28541 - 11904: 0xE656,
	28542 - 11904: 0xE5FB,
	28543 - 11904: 0xE65C,
	28544 - 11904: 0xC0DF,
	28545 - 11904: 0x8DED,
	28546 - 11904: 0xE64A,
	28548 - 11904: 0xBCE1,
	28549 - 11904: 0xE645,
	28550 - 11904: 0xBCE5,
	28551 - 11904: 0xE5FC,
	28552 - 11904: 0xBAAB,
	28553 - 11904: 0xE641,
	28554 - 11904: 0xFCBA,
	28555 - 11904: 0xE65A,
	28556 - 11904: 0xE642,
	28557 - 11904: 0xE640,
	28558 - 11904: 0xBCEA,
	28560 - 11904: 0xE658,
	28562 - 11904: 0xE5FE,
	28563 - 11904: 0xE651,
	28564 - 11904: 0xE650,
	28565 - 11904: 0xE65D,
	28566 - 11904: 0xE647,
	28567 - 11904: 0xBCEE,
	28573 - 11904: 0xFDC5,
	28574 - 11904: 0xE9F3,
	28575 - 11904: 0xFDD2,
	28576 - 11904: 0xBF49,
	28577 - 11904: 0xBEFE,
	28578 - 11904: 0xEA40,
	28579 - 11904: 0xE9EB,
	28580 - 11904: 0xBF41,
	28581 - 11904: 0xE9F7,
	28582 - 11904: 0xBF48,
	28583 - 11904: 0xBF43,
	28584 - 11904: 0xE9F5,
	28585 - 11904: 0xED4F,
	28586 - 11904: 0xE9FB,
	28587 - 11904: 0xEA42,
	28588 - 11904: 0xE9FA,
	28589 - 11904: 0xE9E9,
	28590 - 11904: 0xE9F8,
	28591 - 11904: 0xEA44,
	28592 - 11904: 0xEA46,
	28593 - 11904: 0xBEFD,
	28594 - 11904: 0xEA45,
	28595 - 11904: 0xBF44,
	28596 - 11904: 0xBF4A,
	28597 - 11904: 0x9CDC,
	28598 - 11904: 0xBF47,
	28600 - 11904: 0xE9FE,
	28601 - 11904: 0xBF46,
	28602 - 11904: 0xE9F9,
	28603 - 11904: 0x95CF,
	28604 - 11904: 0xE9ED,
	28605 - 11904: 0xE9F2,
	28606 - 11904: 0x8DEE,
	28607 - 11904: 0xE9FD,
	28608 - 11904: 0xBF45,
	28609 - 11904: 0xBF42,
	28610 - 11904: 0xBEFC,
	28611 - 11904: 0xBF40,
	28612 - 11904: 0xE9F1,
	28614 - 11904: 0xE5FD,
	28615 - 11904: 0xE9EC,
	28616 - 11904: 0xE9EF,
	28617 - 11904: 0xEA41,
	28618 - 11904: 0xE9F4,
	28619 - 11904: 0xE9EA,
	28620 - 11904: 0xED4E,
	28621 - 11904: 0xEA43,
	28622 - 11904: 0xE9EE,
	28623 - 11904: 0xE9FC,
	28627 - 11904: 0xFDD4,
	28628 - 11904: 0xED51,
	28629 - 11904: 0xC0E3,
	28632 - 11904: 0xC0D7,
	28633 - 11904: 0x96EC,
	28634 - 11904: 0x96EB,
	28635 - 11904: 0xC0DB,
	28636 - 11904: 0xED53,
	28637 - 11904: 0xED59,
	28638 - 11904: 0xED57,
	28639 - 11904: 0xC0D9,
	28640 - 11904: 0xC0DA,
	28641 - 11904: 0xC0E1,
	28642 - 11904: 0xED5A,
	28643 - 11904: 0xED52,
	28644 - 11904: 0xC0DC,
	28646 - 11904: 0xED56,
	28647 - 11904: 0xED55,
	28648 - 11904: 0xED5B,
	28649 - 11904: 0xC0E2,
	28651 - 11904: 0xC0DD,
	28652 - 11904: 0xC0E0,
	28653 - 11904: 0xED54,
	28654 - 11904: 0xC0E4,
	28655 - 11904: 0xC0DE,
	28656 - 11904: 0xC0E5,
	28657 - 11904: 0xC0D8,
	28658 - 11904: 0xED58,
	28660 - 11904: 0xED50,
	28662 - 11904: 0x90B6,
	28663 - 11904: 0xEFF7,
	28664 - 11904: 0xFDC3,
	28666 - 11904: 0xC271,
	28667 - 11904: 0xEFF4,
	28668 - 11904: 0xEFF6,
	28670 - 11904: 0xC26F,
	28671 - 11904: 0xEFF2,
	28672 - 11904: 0xEFF3,
	28673 - 11904: 0xEFEE,
	28675 - 11904: 0x98AB,
	28676 - 11904: 0xE9F6,
	28677 - 11904: 0xEFEF,
	28678 - 11904: 0xC270,
	28679 - 11904: 0xEFEB,
	28681 - 11904: 0xC26D,
	28682 - 11904: 0xEFF8,
	28683 - 11904: 0xC26E,
	28684 - 11904: 0xEFEC,
	28685 - 11904: 0xEFED,
	28686 - 11904: 0xEFF1,
	28687 - 11904: 0xC273,
	28689 - 11904: 0xC272,
	28692 - 11904: 0xEFF0,
	28693 - 11904: 0xC378,
	28694 - 11904: 0xF25F,
	28695 - 11904: 0xF265,
	28696 - 11904: 0xC379,
	28697 - 11904: 0xF25C,
	28698 - 11904: 0xC376,
	28699 - 11904: 0xC373,
	28700 - 11904: 0xF267,
	28701 - 11904: 0xC377,
	28702 - 11904: 0x96EE,
	28703 - 11904: 0xC374,
	28704 - 11904: 0xF25E,
	28705 - 11904: 0xF261,
	28706 - 11904: 0xF262,
	28707 - 11904: 0xF263,
	28708 - 11904: 0xF266,
	28710 - 11904: 0xEFF5,
	28711 - 11904: 0xF25D,
	28712 - 11904: 0xC375,
	28713 - 11904: 0xF264,
	28714 - 11904: 0xF268,
	28715 - 11904: 0xF260,
	28716 - 11904: 0x8DF4,
	28719 - 11904: 0xF45D,
	28720 - 11904: 0xC46A,
	28721 - 11904: 0xF460,
	28722 - 11904: 0xC46B,
	28723 - 11904: 0xF468,
	28724 - 11904: 0xF45F,
	28725 - 11904: 0xF45C,
	28727 - 11904: 0xF45E,
	28728 - 11904: 0xF462,
	28729 - 11904: 0xF465,
	28730 - 11904: 0xF464,
	28731 - 11904: 0xF467,
	28732 - 11904: 0xF45B,
	28734 - 11904: 0xC469,
	28735 - 11904: 0xF463,
	28736 - 11904: 0xF466,
	28737 - 11904: 0xF469,
	28738 - 11904: 0xF461,
	28739 - 11904: 0xF5D3,
	28740 - 11904: 0xF5D4,
	28741 - 11904: 0xF5D8,
	28742 - 11904: 0xF5D9,
	28744 - 11904: 0xF5D6,
	28745 - 11904: 0xF5D7,
	28746 - 11904: 0xF5D5,
	28747 - 11904: 0xFDE0,
	28748 - 11904: 0xC4E9,
	28749 - 11904: 0x8C67,
	28752 - 11904: 0x8DF6,
	28753 - 11904: 0xC578,
	28754 - 11904: 0xF6EB,
	28756 - 11904: 0x8DF7,
	28757 - 11904: 0xF6E8,
	28758 - 11904: 0xF6E9,
	28759 - 11904: 0xF6EA,
	28760 - 11904: 0xC579,
	28762 - 11904: 0xF7E5,
	28763 - 11904: 0xF7E4,
	28764 - 11904: 0x8FFA,
	28765 - 11904: 0xF8AF,
	28766 - 11904: 0xC5F4,
	28767 - 11904: 0xF8AD,
	28768 - 11904: 0xF8B0,
	28769 - 11904: 0xF8AE,
	28770 - 11904: 0xF8F5,
	28771 - 11904: 0xC657,
	28772 - 11904: 0xC665,
	28773 - 11904: 0xF9A3,
	28774 - 11904: 0xF96C,
	28775 - 11904: 0x97D0,
	28776 - 11904: 0xF9A2,
	28777 - 11904: 0xF9D0,
	28778 - 11904: 0xF9D1,
	28779 - 11904: 0xA4F5,
	28780 - 11904: 0x8BD2,
	28782 - 11904: 0x87DE,
	28783 - 11904: 0x8DF8,
	28784 - 11904: 0xA6C7,
	28785 - 11904: 0xCA41,
	28788 - 11904: 0xCB5E,
	28789 - 11904: 0x90D9,
	28790 - 11904: 0xA85F,
	28791 - 11904: 0x8C47,
	28792 - 11904: 0xA862,
	28793 - 11904: 0xFAF0,
	28794 - 11904: 0xCB5F,
	28796 - 11904: 0xA860,
	28797 - 11904: 0xA861,
	28798 - 11904: 0xFDE1,
	28799 - 11904: 0x8DF9,
	28801 - 11904: 0xFDE3,
	28802 - 11904: 0xCD58,
	28803 - 11904: 0xCD5A,
	28804 - 11904: 0xCD55,
	28805 - 11904: 0xCD52,
	28806 - 11904: 0xCD54,
	28809 - 11904: 0x8DFA,
	28810 - 11904: 0xAAA4,
	28811 - 11904: 0xFB63,
	28814 - 11904: 0xAAA2,
	28815 - 11904: 0x90A6,
	28817 - 11904: 0xCD56,
	28818 - 11904: 0xAAA3,
	28819 - 11904: 0xCD53,
	28820 - 11904: 0xCD50,
	28821 - 11904: 0xAAA1,
	28822 - 11904: 0xCD57,
	28824 - 11904: 0xCD51,
	28825 - 11904: 0xAAA5,
	28826 - 11904: 0xCD59,
	28831 - 11904: 0xCFAF,
	28832 - 11904: 0x9970,
	28833 - 11904: 0xCFB3,
	28835 - 11904: 0x91EB,
	28836 - 11904: 0xACB7,
	28837 - 11904: 0x9770,
	28838 - 11904: 0x986F,
	28839 - 11904: 0xFDE2,
	28841 - 11904: 0xCFB6,
	28843 - 11904: 0xACAF,
	28844 - 11904: 0xACB2,
	28845 - 11904: 0xACB4,
	28846 - 11904: 0xACB6,
	28847 - 11904: 0xACB3,
	28848 - 11904: 0xCFB2,
	28849 - 11904: 0xCFB1,
	28851 - 11904: 0xACB1,
	28852 - 11904: 0xCFB4,
	28853 - 11904: 0xCFB5,
	28855 - 11904: 0xCFAE,
	28856 - 11904: 0xACB5,
	28857 - 11904: 0x98F2,
	28858 - 11904: 0xACB0,
	28859 - 11904: 0x9AFC,
	28860 - 11904: 0x896C,
	28861 - 11904: 0xFDFD,
	28862 - 11904: 0xCFB0,
	28864 - 11904: 0x995E,
	28868 - 11904: 0x95BD,
	28869 - 11904: 0xD277,
	28870 - 11904: 0xD278,
	28871 - 11904: 0xD279,
	28872 - 11904: 0xAF50,
	28874 - 11904: 0xAF4C,
	28875 - 11904: 0xD26E,
	28876 - 11904: 0xFDE4,
	28877 - 11904: 0xD276,
	28878 - 11904: 0xD27B,
	28879 - 11904: 0xAF51,
	28880 - 11904: 0x91E6,
	28881 - 11904: 0xD26C,
	28882 - 11904: 0xD272,
	28883 - 11904: 0xD26B,
	28884 - 11904: 0xD275,
	28885 - 11904: 0xFDE5,
	28886 - 11904: 0xFDE6,
	28887 - 11904: 0xD271,
	28888 - 11904: 0xAF4D,
	28889 - 11904: 0xAF4F,
	28890 - 11904: 0xD27A,
	28892 - 11904: 0xD26A,
	28893 - 11904: 0xD26D,
	28894 - 11904: 0xD273,
	28895 - 11904: 0xFDE7,
	28896 - 11904: 0xD274,
	28897 - 11904: 0xD27C,
	28898 - 11904: 0xD270,
	28900 - 11904: 0xAF4E,
	28911 - 11904: 0xB26D,
	28912 - 11904: 0xD64E,
	28913 - 11904: 0x9454,
	28915 - 11904: 0xD650,
	28916 - 11904: 0xD64C,
	28917 - 11904: 0x99B8,
	28918 - 11904: 0xD658,
	28919 - 11904: 0xD64A,
	28920 - 11904: 0xD657,
	28921 - 11904: 0xB269,
	28922 - 11904: 0xD648,
	28923 - 11904: 0xDA5B,
	28924 - 11904: 0xD652,
	28925 - 11904: 0xB26C,
	28926 - 11904: 0x97E9,
	28927 - 11904: 0xD653,
	28928 - 11904: 0xD656,
	28930 - 11904: 0xD65A,
	28932 - 11904: 0xD64F,
	28933 - 11904: 0x9346,
	28934 - 11904: 0xD654,
	28937 - 11904: 0xB26A,
	28938 - 11904: 0xB26B,
	28939 - 11904: 0xD659,
	28940 - 11904: 0xD64D,
	28941 - 11904: 0xD649,
	28942 - 11904: 0xD65B,
	28944 - 11904: 0xD651,
	28947 - 11904: 0xD655,
	28951 - 11904: 0xD64B,
	28953 - 11904: 0xB548,
	28954 - 11904: 0xB549,
	28955 - 11904: 0xDA65,
	28956 - 11904: 0xB54F,
	28957 - 11904: 0x9863,
	28958 - 11904: 0xDA59,
	28959 - 11904: 0xDA62,
	28960 - 11904: 0xDA58,
	28961 - 11904: 0xB54C,
	28962 - 11904: 0xDA60,
	28963 - 11904: 0xDA5E,
	28965 - 11904: 0xDA5F,
	28966 - 11904: 0xB54A,
	28968 - 11904: 0xDA63,
	28969 - 11904: 0x95BC,
	28971 - 11904: 0xFDED,
	28972 - 11904: 0xFDF7,
	28974 - 11904: 0xDA5C,
	28975 - 11904: 0xDA5A,
	28976 - 11904: 0xB54B,
	28977 - 11904: 0xDA5D,
	28978 - 11904: 0xDA61,
	28979 - 11904: 0x9870,
	28980 - 11904: 0x96F6,
	28981 - 11904: 0x8EA9,
	28982 - 11904: 0xB54D,
	28986 - 11904: 0xDA64,
	28987 - 11904: 0x9451,
	28990 - 11904: 0x8E43,
	28992 - 11904: 0x8B5A,
	28993 - 11904: 0xDE70,
	28994 - 11904: 0xDE77,
	28995 - 11904: 0xDE79,
	28996 - 11904: 0xDEA1,
	28997 - 11904: 0xFDEE,
	28998 - 11904: 0xB7DA,
	28999 - 11904: 0xDE6B,
	29001 - 11904: 0xB7D2,
	29002 - 11904: 0xFDF0,
	29003 - 11904: 0xDE7A,
	29004 - 11904: 0xB7D7,
	29005 - 11904: 0xDEA2,
	29006 - 11904: 0xB7CE,
	29007 - 11904: 0xFDF4,
	29008 - 11904: 0xDE7D,
	29009 - 11904: 0x9BF5,
	29010 - 11904: 0xDE6D,
	29011 - 11904: 0xDE7E,
	29012 - 11904: 0xDE6C,
	29014 - 11904: 0xB7DC,
	29015 - 11904: 0x8CEE,
	29016 - 11904: 0xDE78,
	29017 - 11904: 0xB7CF,
	29018 - 11904: 0xDEA3,
	29020 - 11904: 0xB7D4,
	29021 - 11904: 0xDE71,
	29022 - 11904: 0xB7D9,
	29023 - 11904: 0xDE7C,
	29024 - 11904: 0xDE6F,
	29025 - 11904: 0xDE76,
	29026 - 11904: 0xDE72,
	29027 - 11904: 0xDE6E,
	29028 - 11904: 0xB7D1,
	29029 - 11904: 0xB7D8,
	29030 - 11904: 0xB7D6,
	29031 - 11904: 0xB7D3,
	29032 - 11904: 0xB7DB,
	29033 - 11904: 0xB7D0,
	29034 - 11904: 0xDE75,
	29035 - 11904: 0x977E,
	29036 - 11904: 0xB7D5,
	29038 - 11904: 0xFDF1,
	29040 - 11904: 0xDE7B,
	29041 - 11904: 0x9BD5,
	29042 - 11904: 0xDE73,
	29043 - 11904: 0x9AC3,
	29045 - 11904: 0x97C8,
	29046 - 11904: 0xA0DB,
	29047 - 11904: 0x91D0,
	29048 - 11904: 0xDE74,
	29050 - 11904: 0x9FE4,
	29051 - 11904: 0xE2C1,
	29052 - 11904: 0x8FDD,
	29053 - 11904: 0xBAB4,
	29054 - 11904: 0x91E9,
	29056 - 11904: 0xE2BD,
	29057 - 11904: 0xE2C3,
	29058 - 11904: 0xE2BF,
	29060 - 11904: 0xBAB6,
	29061 - 11904: 0xE2BE,
	29062 - 11904: 0xE2C2,
	29063 - 11904: 0xE2BA,
	29064 - 11904: 0x98E0,
	29065 - 11904: 0xE2BC,
	29066 - 11904: 0xBAB5,
	29068 - 11904: 0x92CA,
	29070 - 11904: 0x9857,
	29071 - 11904: 0xE2C0,
	29072 - 11904: 0xE2BB,
	29073 - 11904: 0x8C51,
	29074 - 11904: 0xBAB7,
	29076 - 11904: 0xBAB2,
	29078 - 11904: 0xFDEB,
	29079 - 11904: 0xE2C4,
	29080 - 11904: 0x9B49,
	29081 - 11904: 0xBAB3,
	29082 - 11904: 0xE667,
	29083 - 11904: 0xE664,
	29084 - 11904: 0xE670,
	29085 - 11904: 0xE66A,
	29086 - 11904: 0xE66C,
	29087 - 11904: 0xBCF4,
	29088 - 11904: 0xE666,
	29089 - 11904: 0xE66E,
	29090 - 11904: 0x9D76,
	29091 - 11904: 0x9EAF,
	29092 - 11904: 0xE66D,
	29093 - 11904: 0xE66B,
	29095 - 11904: 0xE671,
	29096 - 11904: 0xBCF7,
	29097 - 11904: 0xE668,
	29098 - 11904: 0xE66F,
	29100 - 11904: 0xBCF5,
	29101 - 11904: 0x9CCC,
	29103 - 11904: 0xE663,
	29104 - 11904: 0xE665,
	29105 - 11904: 0xBCF6,
	29106 - 11904: 0xE662,
	29107 - 11904: 0xE672,
	29108 - 11904: 0xFDEA,
	29109 - 11904: 0xE669,
	29111 - 11904: 0x8DF1,
	29112 - 11904: 0xEA4A,
	29113 - 11904: 0xBF51,
	29114 - 11904: 0xFDFB,
	29116 - 11904: 0xEA55,
	29117 - 11904: 0xEA53,
	29118 - 11904: 0xBF4B,
	29119 - 11904: 0xEA49,
	29120 - 11904: 0xEA4C,
	29121 - 11904: 0xEA4D,
	29122 - 11904: 0xEA48,
	29123 - 11904: 0xBF55,
	29124 - 11904: 0xBF56,
	29125 - 11904: 0xEA47,
	29126 - 11904: 0xEA56,
	29127 - 11904: 0xEA51,
	29128 - 11904: 0xBF4F,
	29129 - 11904: 0xBF4C,
	29130 - 11904: 0xEA50,
	29131 - 11904: 0xEA4E,
	29134 - 11904: 0xBF52,
	29135 - 11904: 0xEA52,
	29136 - 11904: 0xBF4D,
	29137 - 11904: 0x8E53,
	29138 - 11904: 0xBF4E,
	29140 - 11904: 0xEA4F,
	29141 - 11904: 0xBF50,
	29142 - 11904: 0xEA4B,
	29144 - 11904: 0xEA54,
	29145 - 11904: 0xBF53,
	29146 - 11904: 0xEA57,
	29147 - 11904: 0xEA58,
	29148 - 11904: 0xBF54,
	29149 - 11904: 0xFACF,
	29151 - 11904: 0xC0E7,
	29152 - 11904: 0xC0EE,
	29153 - 11904: 0xED5C,
	29154 - 11904: 0xED62,
	29156 - 11904: 0xED60,
	29157 - 11904: 0xC0EA,
	29158 - 11904: 0xC0E9,
	29159 - 11904: 0xC0E6,
	29160 - 11904: 0xED5E,
	29163 - 11904: 0x96F9,
	29164 - 11904: 0xC0EC,
	29165 - 11904: 0xC0EB,
	29166 - 11904: 0xC0E8,
	29168 - 11904: 0xED61,
	29169 - 11904: 0xED5D,
	29170 - 11904: 0xED5F,
	29172 - 11904: 0xC0ED,
	29173 - 11904: 0x98BF,
	29174 - 11904: 0x9E49,
	29176 - 11904: 0xC277,
	29177 - 11904: 0xEFFB,
	29179 - 11904: 0xC274,
	29180 - 11904: 0xC275,
	29181 - 11904: 0xEFFD,
	29182 - 11904: 0xC276,
	29183 - 11904: 0xEFFA,
	29184 - 11904: 0x8CA7,
	29185 - 11904: 0xEFF9,
	29186 - 11904: 0xF26C,
	29187 - 11904: 0xEFFC,
	29189 - 11904: 0xF26D,
	29190 - 11904: 0xC37A,
	29191 - 11904: 0xF26B,
	29193 - 11904: 0x9BCA,
	29194 - 11904: 0xF26A,
	29196 - 11904: 0xF269,
	29197 - 11904: 0xC37B,
	29198 - 11904: 0xFDFE,
	29199 - 11904: 0x92DC,
	29200 - 11904: 0xC46C,
	29203 - 11904: 0xF46A,
	29204 - 11904: 0xF46B,
	29205 - 11904: 0xFE41,
	29206 - 11904: 0x91CC,
	29207 - 11904: 0x91E2,
	29209 - 11904: 0xF5DC,
	29210 - 11904: 0xF5DB,
	29211 - 11904: 0xC4EA,
	29213 - 11904: 0xF5DA,
	29214 - 11904: 0xF6EC,
	29215 - 11904: 0xF6ED,
	29218 - 11904: 0xF7E6,
	29219 - 11904: 0xF8B1,
	29220 - 11904: 0xFE44,
	29221 - 11904: 0x875F,
	29222 - 11904: 0xF8F6,
	29223 - 11904: 0xF9BC,
	29224 - 11904: 0xC679,
	29225 - 11904: 0xF9C6,
	29226 - 11904: 0xA4F6,
	29227 - 11904: 0x8BD3,
	29228 - 11904: 0xAAA6,
	29229 - 11904: 0xAAA7,
	29230 - 11904: 0xFE47,
	29232 - 11904: 0xACB8,
	29237 - 11904: 0xC0EF,
	29238 - 11904: 0xA4F7,
	29240 - 11904: 0xAAA8,
	29241 - 11904: 0xAF52,
	29242 - 11904: 0xB7DD,
	29243 - 11904: 0xA4F8,
	29245 - 11904: 0xB26E,
	29246 - 11904: 0xBAB8,
	29247 - 11904: 0xC962,
	29248 - 11904: 0xFE48,
	29249 - 11904: 0xCFB7,
	29250 - 11904: 0xD27D,
	29252 - 11904: 0xE2C5,
	29254 - 11904: 0xC0F0,
	29255 - 11904: 0xA4F9,
	29256 - 11904: 0xAAA9,
	29257 - 11904: 0xCFB8,
	29258 - 11904: 0xCFB9,
	29259 - 11904: 0xDA66,
	29260 - 11904: 0xB550,
	29263 - 11904: 0xDEA4,
	29264 - 11904: 0xA0E4,
	29266 - 11904: 0xB7DE,
	29267 - 11904: 0xE2C6,
	29269 - 11904: 0xFE4B,
	29270 - 11904: 0xBCF8,
	29271 - 11904: 0xFE4C,
	29272 - 11904: 0xC37C,
	29273 - 11904: 0xA4FA,
	29274 - 11904: 0xDA67,
	29275 - 11904: 0xA4FB,
	29276 - 11904: 0x8DBF,
	29277 - 11904: 0xA6C9,
	29278 - 11904: 0xCA42,
	29279 - 11904: 0xA6C8,
	29280 - 11904: 0xA865,
	29281 - 11904: 0xA864,
	29282 - 11904: 0xA863,
	29283 - 11904: 0xCB60,
	29286 - 11904: 0x9E78,
	29287 - 11904: 0xAAAA,
	29289 - 11904: 0xAAAB,
	29290 - 11904: 0xCD5B,
	29292 - 11904: 0xCFBA,
	29294 - 11904: 0xCFBD,
	29295 - 11904: 0xACBA,
	29296 - 11904: 0xCFBB,
	29298 - 11904: 0xACB9,
	29299 - 11904: 0xCFBC,
	29300 - 11904: 0xACBB,
	29302 - 11904: 0xD2A2,
	29303 - 11904: 0xD2A1,
	29304 - 11904: 0xD27E,
	29305 - 11904: 0xAF53,
	29307 - 11904: 0xD65D,
	29308 - 11904: 0xD65E,
	29309 - 11904: 0xB26F,
	29310 - 11904: 0xD65C,
	29311 - 11904: 0xD65F,
	29312 - 11904: 0xB552,
	29313 - 11904: 0xB270,
	29314 - 11904: 0xFE51,
	29316 - 11904: 0xB551,
	29317 - 11904: 0xDA6B,
	29318 - 11904: 0xDA6A,
	29319 - 11904: 0x9456,
	29320 - 11904: 0xDA68,
	29321 - 11904: 0xDA69,
	29323 - 11904: 0xDA6C,
	29324 - 11904: 0xDEA6,
	29325 - 11904: 0xDEA5,
	29326 - 11904: 0xDEA9,
	29327 - 11904: 0x9D61,
	29328 - 11904: 0xDEA8,
	29329 - 11904: 0xDEA7,
	29330 - 11904: 0xBAB9,
	29331 - 11904: 0xE2C9,
	29332 - 11904: 0x9457,
	29333 - 11904: 0xE2C8,
	29334 - 11904: 0xBABA,
	29335 - 11904: 0xE2C7,
	29336 - 11904: 0xE673,
	29338 - 11904: 0xE674,
	29339 - 11904: 0xBCF9,
	29341 - 11904: 0xEA59,
	29342 - 11904: 0xEA5A,
	29343 - 11904: 0x9966,
	29345 - 11904: 0xF272,
	29346 - 11904: 0xC37D,
	29347 - 11904: 0xF271,
	29348 - 11904: 0xF270,
	29349 - 11904: 0xF26E,
	29350 - 11904: 0xF26F,
	29351 - 11904: 0xC4EB,
	29352 - 11904: 0xF46C,
	29353 - 11904: 0xF6EE,
	29354 - 11904: 0xF8F7,
	29356 - 11904: 0xA4FC,
	29357 - 11904: 0x8BD5,
	29358 - 11904: 0xC9A5,
	29359 - 11904: 0xA5C7,
	29360 - 11904: 0xC9A6,
	29362 - 11904: 0xA069,
	29364 - 11904: 0xCA43,
	29365 - 11904: 0xCA44,
	29370 - 11904: 0xCB66,
	29373 - 11904: 0xCB62,
	29375 - 11904: 0xCB61,
	29376 - 11904: 0xAAAC,
	29377 - 11904: 0xCB65,
	29378 - 11904: 0xA867,
	29379 - 11904: 0xCB63,
	29380 - 11904: 0xA866,
	29381 - 11904: 0xCB67,
	29382 - 11904: 0xCB64,
	29385 - 11904: 0xCD5F,
	29386 - 11904: 0xCFBE,
	29387 - 11904: 0xCD5D,
	29388 - 11904: 0xCD64,
	29389 - 11904: 0x98B4,
	29390 - 11904: 0xAAAD,
	29392 - 11904: 0xAAB0,
	29393 - 11904: 0xCD65,
	29394 - 11904: 0xCD61,
	29396 - 11904: 0xCD62,
	29398 - 11904: 0xCD5C,
	29399 - 11904: 0xAAAF,
	29400 - 11904: 0xCD5E,
	29401 - 11904: 0xAAAE,
	29402 - 11904: 0xCD63,
	29404 - 11904: 0xCD60,
	29407 - 11904: 0xCFC2,
	29408 - 11904: 0xACBD,
	29409 - 11904: 0xACBE,
	29410 - 11904: 0xA049,
	29411 - 11904: 0xCFC5,
	29412 - 11904: 0xCFBF,
	29414 - 11904: 0xCFC4,
	29416 - 11904: 0xCFC0,
	29417 - 11904: 0xACBC,
	29418 - 11904: 0xCFC3,
	29419 - 11904: 0xCFC1,
	29427 - 11904: 0xD2A8,
	29428 - 11904: 0xD2A5,
	29430 - 11904: 0xD2A7,
	29431 - 11904: 0xAF58,
	29432 - 11904: 0xAF57,
	29433 - 11904: 0xAF55,
	29434 - 11904: 0xD2A4,
	29435 - 11904: 0xD2A9,
	29436 - 11904: 0xAF54,
	29437 - 11904: 0xAF56,
	29438 - 11904: 0xD2A6,
	29439 - 11904: 0xD667,
	29440 - 11904: 0xD2A3,
	29441 - 11904: 0xD2AA,
	29442 - 11904: 0xA04C,
	29444 - 11904: 0x9E65,
	29447 - 11904: 0xD662,
	29448 - 11904: 0xD666,
	29450 - 11904: 0xD665,
	29451 - 11904: 0xDA6E,
	29452 - 11904: 0xDA79,
	29455 - 11904: 0xD668,
	29456 - 11904: 0x98B5,
	29457 - 11904: 0xD663,
	29458 - 11904: 0xDA6D,
	29459 - 11904: 0xB274,
	29462 - 11904: 0xB273,
	29463 - 11904: 0xD661,
	29464 - 11904: 0xD664,
	29465 - 11904: 0xB275,
	29467 - 11904: 0xB272,
	29468 - 11904: 0xB271,
	29469 - 11904: 0xD660,
	29470 - 11904: 0xD669,
	29474 - 11904: 0xDA70,
	29475 - 11904: 0xDA77,
	29477 - 11904: 0xB554,
	29478 - 11904: 0xDA76,
	29479 - 11904: 0xDA73,
	29480 - 11904: 0xFE58,
	29481 - 11904: 0xB556,
	29482 - 11904: 0xFE52,
	29483 - 11904: 0xFE53,
	29484 - 11904: 0xA065,
	29485 - 11904: 0xDA75,
	29486 - 11904: 0xFE59,
	29488 - 11904: 0xDA6F,
	29489 - 11904: 0xDA71,
	29490 - 11904: 0xDA74,
	29491 - 11904: 0xDA72,
	29492 - 11904: 0xB555,
	29493 - 11904: 0xDA78,
	29494 - 11904: 0xB553,
	29495 - 11904: 0xB7DF,
	29496 - 11904: 0x98B7,
	29497 - 11904: 0x98B8,
	29498 - 11904: 0xDEAD,
	29499 - 11904: 0xDEAC,
	29500 - 11904: 0xDEAA,
	29502 - 11904: 0xB7E2,
	29503 - 11904: 0xB7E1,
	29504 - 11904: 0xDEAE,
	29505 - 11904: 0x98BA,
	29506 - 11904: 0xDEAB,
	29507 - 11904: 0xE2CA,
	29508 - 11904: 0xBABB,
	29509 - 11904: 0xB7E0,
	29512 - 11904: 0x98BB,
	29513 - 11904: 0xDEB0,
	29514 - 11904: 0xDEAF,
	29516 - 11904: 0xE2CD,
	29517 - 11904: 0xE2CB,
	29518 - 11904: 0xBCFA,
	29519 - 11904: 0x9FBC,
	29520 - 11904: 0xBABC,
	29521 - 11904: 0xE2CC,
	29522 - 11904: 0xE676,
	29527 - 11904: 0xBCFB,
	29528 - 11904: 0xE675,
	29529 - 11904: 0xE67E,
	29530 - 11904: 0xE67D,
	29531 - 11904: 0xE67B,
	29533 - 11904: 0xE67A,
	29534 - 11904: 0xE677,
	29535 - 11904: 0xE678,
	29536 - 11904: 0xE679,
	29537 - 11904: 0xE67C,
	29538 - 11904: 0xE6A1,
	29541 - 11904: 0xEA5F,
	29542 - 11904: 0xEA5C,
	29543 - 11904: 0xEA5D,
	29544 - 11904: 0xBF57,
	29545 - 11904: 0xEA5B,
	29546 - 11904: 0xEA61,
	29547 - 11904: 0xEA60,
	29548 - 11904: 0xEA5E,
	29550 - 11904: 0xED64,
	29551 - 11904: 0xED65,
	29552 - 11904: 0xC0F1,
	29553 - 11904: 0xA04A,
	29554 - 11904: 0xC0F2,
	29555 - 11904: 0xED63,
	29556 - 11904: 0x9EC7,
	29557 - 11904: 0xC279,
	29558 - 11904: 0xEFFE,
	29559 - 11904: 0xC278,
	29560 - 11904: 0xC37E,
	29562 - 11904: 0xC3A1,
	29563 - 11904: 0xC46D,
	29564 - 11904: 0xF46E,
	29565 - 11904: 0xF46D,
	29566 - 11904: 0xF5DD,
	29567 - 11904: 0xF6EF,
	29568 - 11904: 0xC57A,
	29569 - 11904: 0xF7E8,
	29570 - 11904: 0xF7E7,
	29571 - 11904: 0xF7E9,
	29572 - 11904: 0xA5C8,
	29573 - 11904: 0xCFC6,
	29574 - 11904: 0xAF59,
	29575 - 11904: 0xB276,
	29576 - 11904: 0xD66A,
	29577 - 11904: 0xA5C9,
	29578 - 11904: 0xC9A7,
	29579 - 11904: 0xA4FD,
	29580 - 11904: 0x8CA9,
	29582 - 11904: 0xCA45,
	29583 - 11904: 0x98AE,
	29586 - 11904: 0xCB6C,
	29587 - 11904: 0xCB6A,
	29588 - 11904: 0xCB6B,
	29589 - 11904: 0xCB68,
	29590 - 11904: 0xA868,
	29591 - 11904: 0xCB69,
	29592 - 11904: 0x92D6,
	29596 - 11904: 0xFAE1,
	29597 - 11904: 0xCD6D,
	29598 - 11904: 0x91D4,
	29599 - 11904: 0xAAB3,
	29600 - 11904: 0xCD6B,
	29601 - 11904: 0xCD67,
	29602 - 11904: 0xCD6A,
	29604 - 11904: 0xCD66,
	29605 - 11904: 0xAAB5,
	29606 - 11904: 0xCD69,
	29607 - 11904: 0xFADE,
	29608 - 11904: 0xAAB2,
	29609 - 11904: 0xAAB1,
	29610 - 11904: 0xFE5B,
	29611 - 11904: 0xAAB4,
	29612 - 11904: 0xCD6C,
	29613 - 11904: 0xCD68,
	29618 - 11904: 0xACC2,
	29619 - 11904: 0xACC5,
	29620 - 11904: 0xCFCE,
	29621 - 11904: 0xCFCD,
	29622 - 11904: 0xCFCC,
	29623 - 11904: 0xACBF,
	29624 - 11904: 0xCFD5,
	29625 - 11904: 0xCFCB,
	29626 - 11904: 0x8C53,
	29627 - 11904: 0xACC1,
	29628 - 11904: 0xD2AF,
	29630 - 11904: 0xCFD2,
	29631 - 11904: 0xCFD0,
	29632 - 11904: 0xACC4,
	29634 - 11904: 0xCFC8,
	29635 - 11904: 0xCFD3,
	29636 - 11904: 0x87BF,
	29637 - 11904: 0xCFCA,
	29638 - 11904: 0xCFD4,
	29639 - 11904: 0xCFD1,
	29640 - 11904: 0xCFC9,
	29641 - 11904: 0xFE5E,
	29642 - 11904: 0xACC0,
	29643 - 11904: 0xCFD6,
	29644 - 11904: 0xCFC7,
	29645 - 11904: 0xACC3,
	29646 - 11904: 0xFBD7,
	29647 - 11904: 0xFE5A,
	29648 - 11904: 0x94C5,
	29650 - 11904: 0xD2B4,
	29651 - 11904: 0xD2AB,
	29652 - 11904: 0xD2B6,
	29653 - 11904: 0xFACA,
	29654 - 11904: 0xD2AE,
	29655 - 11904: 0xD2B9,
	29656 - 11904: 0xD2BA,
	29657 - 11904: 0xD2AC,
	29658 - 11904: 0xD2B8,
	29659 - 11904: 0xD2B5,
	29660 - 11904: 0xD2B3,
	29661 - 11904: 0xD2B7,
	29662 - 11904: 0xAF5F,
	29664 - 11904: 0xAF5D,
	29665 - 11904: 0x98C1,
	29666 - 11904: 0x975C,
	29667 - 11904: 0xD2B1,
	29668 - 11904: 0xFE74,
	29669 - 11904: 0xD2AD,
	29670 - 11904: 0x9773,
	29671 - 11904: 0xD2B0,
	29672 - 11904: 0xD2BB,
	29673 - 11904: 0xD2B2,
	29674 - 11904: 0xAF5E,
	29675 - 11904: 0xCFCF,
	29677 - 11904: 0xAF5A,
	29678 - 11904: 0xAF5C,
	29679 - 11904: 0xFA46,
	29683 - 11904: 0x9764,
	29684 - 11904: 0xD678,
	29685 - 11904: 0xD66D,
	29686 - 11904: 0xD66B,
	29687 - 11904: 0xFE68,
	29688 - 11904: 0xD66C,
	29689 - 11904: 0x964E,
	29690 - 11904: 0xD673,
	29691 - 11904: 0x9765,
	29692 - 11904: 0xD674,
	29693 - 11904: 0xD670,
	29694 - 11904: 0xB27B,
	29695 - 11904: 0xD675,
	29696 - 11904: 0xD672,
	29697 - 11904: 0xD66F,
	29698 - 11904: 0x8C5A,
	29699 - 11904: 0xB279,
	29700 - 11904: 0xD66E,
	29701 - 11904: 0xB277,
	29702 - 11904: 0xB27A,
	29703 - 11904: 0xD671,
	29704 - 11904: 0xD679,
	29705 - 11904: 0xAF5B,
	29706 - 11904: 0xB278,
	29707 - 11904: 0xD677,
	29708 - 11904: 0xD676,
	29709 - 11904: 0xB27C,
	29713 - 11904: 0x89A1,
	29714 - 11904: 0x95FA,
	29716 - 11904: 0x92D4,
	29717 - 11904: 0xFE69,
	29718 - 11904: 0xDA7E,
	29719 - 11904: 0xFB45,
	29721 - 11904: 0x98C8,
	29722 - 11904: 0xDAA1,
	29723 - 11904: 0xB560,
	29724 - 11904: 0x90EF,
	29725 - 11904: 0xDAA7,
	29726 - 11904: 0x98C9,
	29727 - 11904: 0x98CA,
	29728 - 11904: 0xDAA9,
	29729 - 11904: 0xDAA2,
	29730 - 11904: 0xB55A,
	29731 - 11904: 0xDAA6,
	29732 - 11904: 0xDAA5,
	29733 - 11904: 0xB55B,
	29734 - 11904: 0xB561,
	29736 - 11904: 0xB562,
	29737 - 11904: 0xDAA8,
	29738 - 11904: 0xB558,
	29739 - 11904: 0xDA7D,
	29740 - 11904: 0xDA7B,
	29741 - 11904: 0xDAA3,
	29742 - 11904: 0xDA7A,
	29743 - 11904: 0xB55F,
	29744 - 11904: 0xDA7C,
	29745 - 11904: 0xDAA4,
	29746 - 11904: 0xDAAA,
	29747 - 11904: 0xB559,
	29748 - 11904: 0xB55E,
	29749 - 11904: 0xB55C,
	29750 - 11904: 0xB55D,
	29751 - 11904: 0x946D,
	29752 - 11904: 0x94B7,
	29753 - 11904: 0xFE6C,
	29754 - 11904: 0xB557,
	29756 - 11904: 0x946B,
	29759 - 11904: 0xB7E9,
	29760 - 11904: 0xDEB7,
	29761 - 11904: 0xB7E8,
	29762 - 11904: 0xDEBB,
	29763 - 11904: 0x92FC,
	29764 - 11904: 0xDEB1,
	29765 - 11904: 0x95EB,
	29766 - 11904: 0xDEBC,
	29767 - 11904: 0xFE73,
	29768 - 11904: 0x976E,
	29769 - 11904: 0xFE5F,
	29770 - 11904: 0xDEB2,
	29771 - 11904: 0xDEB3,
	29772 - 11904: 0x87B8,
	29773 - 11904: 0xDEBD,
	29774 - 11904: 0xDEBA,
	29775 - 11904: 0xDEB8,
	29776 - 11904: 0xDEB9,
	29777 - 11904: 0xDEB5,
	29778 - 11904: 0xDEB4,
	29779 - 11904: 0xFDBD,
	29780 - 11904: 0xDEBE,
	29781 - 11904: 0xB7E5,
	29782 - 11904: 0x92D5,
	29783 - 11904: 0xDEB6,
	29785 - 11904: 0xB7EA,
	29786 - 11904: 0xB7E4,
	29787 - 11904: 0xB7EB,
	29788 - 11904: 0xFE6F,
	29789 - 11904: 0xFEB9,
	29790 - 11904: 0xB7E7,
	29791 - 11904: 0xB7E6,
	29792 - 11904: 0xFE71,
	29793 - 11904: 0x8778,
	29794 - 11904: 0xE2CE,
	29795 - 11904: 0xBABE,
	29796 - 11904: 0xBABD,
	29797 - 11904: 0xFBBB,
	29799 - 11904: 0xE2D3,
	29800 - 11904: 0xA0D5,
	29801 - 11904: 0xBCFC,
	29802 - 11904: 0xBABF,
	29803 - 11904: 0x95FB,
	29804 - 11904: 0xFE77,
	29805 - 11904: 0xBAC1,
	29806 - 11904: 0xE2D4,
	29807 - 11904: 0xB7E3,
	29808 - 11904: 0xBAC0,
	29809 - 11904: 0xE2D0,
	29810 - 11904: 0xE2D2,
	29811 - 11904: 0xE2CF,
	29812 - 11904: 0xFE79,
	29813 - 11904: 0xE2D1,
	29814 - 11904: 0xFE75,
	29817 - 11904: 0xE6AB,
	29818 - 11904: 0x945D,
	29820 - 11904: 0xE6AA,
	29821 - 11904: 0xE6A7,
	29822 - 11904: 0xBD40,
	29823 - 11904: 0xEA62,
	29824 - 11904: 0xBD41,
	29825 - 11904: 0xE6A6,
	29826 - 11904: 0xFE7C,
	29827 - 11904: 0xBCFE,
	29829 - 11904: 0xE6A8,
	29830 - 11904: 0xE6A5,
	29831 - 11904: 0xE6A2,
	29832 - 11904: 0xE6A9,
	29833 - 11904: 0xE6A3,
	29834 - 11904: 0xE6A4,
	29835 - 11904: 0xBCFD,
	29836 - 11904: 0x9344,
	29837 - 11904: 0x8EA6,
	29840 - 11904: 0xED69,
	29842 - 11904: 0xEA66,
	29844 - 11904: 0xEA65,
	29845 - 11904: 0xEA67,
	29847 - 11904: 0xED66,
	29848 - 11904: 0xBF5A,
	29849 - 11904: 0x92D3,
	29850 - 11904: 0xEA63,
	29851 - 11904: 0x94B8,
	29852 - 11904: 0xBF58,
	29853 - 11904: 0x8779,
	29854 - 11904: 0xBF5C,
	29855 - 11904: 0xBF5B,
	29856 - 11904: 0xEA64,
	29857 - 11904: 0xEA68,
	29859 - 11904: 0xBF59,
	29860 - 11904: 0xFC71,
	29861 - 11904: 0xED6D,
	29862 - 11904: 0xC0F5,
	29863 - 11904: 0xC27A,
	29864 - 11904: 0xC0F6,
	29865 - 11904: 0xC0F3,
	29866 - 11904: 0xED6A,
	29867 - 11904: 0xED68,
	29869 - 11904: 0xED6B,
	29871 - 11904: 0xED6E,
	29872 - 11904: 0xC0F4,
	29873 - 11904: 0xED6C,
	29874 - 11904: 0xED67,
	29876 - 11904: 0x975E,
	29877 - 11904: 0xF042,
	29878 - 11904: 0xF045,
	29879 - 11904: 0xF275,
	29880 - 11904: 0xF040,
	29881 - 11904: 0x8CAD,
	29882 - 11904: 0xF46F,
	29883 - 11904: 0xF046,
	29885 - 11904: 0xC3A2,
	29886 - 11904: 0xF044,
	29887 - 11904: 0xC27B,
	29888 - 11904: 0xF041,
	29889 - 11904: 0xF043,
	29890 - 11904: 0xF047,
	29891 - 11904: 0xF276,
	29893 - 11904: 0xF274,
	29894 - 11904: 0x87C1,
	29896 - 11904: 0xFEA7,
	29898 - 11904: 0xC3A3,
	29899 - 11904: 0xF273,
	29900 - 11904: 0x946A,
	29903 - 11904: 0xC46E,
	29904 - 11904: 0x93E3,
	29907 - 11904: 0x98CF,
	29908 - 11904: 0xC4ED,
	29909 - 11904: 0xF6F1,
	29910 - 11904: 0xC4EC,
	29911 - 11904: 0xF6F3,
	29912 - 11904: 0xF6F0,
	29913 - 11904: 0xF6F2,
	29914 - 11904: 0xC5D0,
	29915 - 11904: 0xF8B2,
	29916 - 11904: 0xA5CA,
	29917 - 11904: 0xCD6E,
	29918 - 11904: 0xD2BC,
	29919 - 11904: 0xD2BD,
	29920 - 11904: 0xB27D,
	29921 - 11904: 0xDEBF,
	29922 - 11904: 0xBF5D,
	29923 - 11904: 0xC3A4,
	29924 - 11904: 0xC57B,
	29925 - 11904: 0xF8B3,
	29926 - 11904: 0xA5CB,
	29927 - 11904: 0xA0D9,
	29928 - 11904: 0xCD6F,
	29929 - 11904: 0xFEAA,
	29932 - 11904: 0xCFD7,
	29934 - 11904: 0xCFD8,
	29936 - 11904: 0xA0BF,
	29937 - 11904: 0xA04D,
	29938 - 11904: 0xA0B8,
	29940 - 11904: 0xD2BE,
	29941 - 11904: 0xD2BF,
	29942 - 11904: 0xB27E,
	29943 - 11904: 0xB2A1,
	29944 - 11904: 0xA0CE,
	29947 - 11904: 0xDAAB,
	29949 - 11904: 0xDEC2,
	29950 - 11904: 0xDEC1,
	29951 - 11904: 0xDEC0,
	29952 - 11904: 0xE2D5,
	29954 - 11904: 0xE2D6,
	29955 - 11904: 0xE2D7,
	29956 - 11904: 0xBAC2,
	29957 - 11904: 0xA0B7,
	29959 - 11904: 0xE6AD,
	29960 - 11904: 0xE6AC,
	29963 - 11904: 0xEA69,
	29964 - 11904: 0xBF5E,
	29965 - 11904: 0xBF5F,
	29966 - 11904: 0xFEA9,
	29967 - 11904: 0xED72,
	29968 - 11904: 0xED6F,
	29969 - 11904: 0xED70,
	29970 - 11904: 0xED71,
	29971 - 11904: 0xF049,
	29972 - 11904: 0xF048,
	29973 - 11904: 0xC27C,
	29974 - 11904: 0xF277,
	29975 - 11904: 0xF5DE,
	29976 - 11904: 0xA5CC,
	29977 - 11904: 0x89C3,
	29978 - 11904: 0xACC6,
	29980 - 11904: 0xB2A2,
	29981 - 11904: 0xDEC3,
	29982 - 11904: 0xFEAB,
	29983 - 11904: 0xA5CD,
	29985 - 11904: 0xD2C0,
	29986 - 11904: 0xB2A3,
	29989 - 11904: 0xB563,
	29990 - 11904: 0xB564,
	29992 - 11904: 0xA5CE,
	29993 - 11904: 0xA5CF,
	29994 - 11904: 0xCA46,
	29995 - 11904: 0xA86A,
	29996 - 11904: 0xA869,
	29997 - 11904: 0xACC7,
	29998 - 11904: 0xCFD9,
	29999 - 11904: 0xDAAC,
	30000 - 11904: 0xA5D0,
	30001 - 11904: 0xA5D1,
	30002 - 11904: 0xA5D2,
	30003 - 11904: 0xA5D3,
	30004 - 11904: 0x9DF4,
	30005 - 11904: 0x896D,
	30007 - 11904: 0xA86B,
	30008 - 11904: 0xA86C,
	30009 - 11904: 0xCB6E,
	30010 - 11904: 0xCB6D,
	30011 - 11904: 0x9C7B,
	30013 - 11904: 0xAAB6,
	30014 - 11904: 0xCD72,
	30015 - 11904: 0xCD70,
	30016 - 11904: 0xCD71,
	30018 - 11904: 0x98D2,
	30022 - 11904: 0x9FA9,
	30023 - 11904: 0xCFDA,
	30024 - 11904: 0xCFDB,
	30026 - 11904: 0xFEB2,
	30027 - 11904: 0xACCB,
	30028 - 11904: 0xACC9,
	30029 - 11904: 0xFEB1,
	30030 - 11904: 0xACCA,
	30031 - 11904: 0xACC8,
	30033 - 11904: 0x97D9,
	30035 - 11904: 0xA0C4,
	30036 - 11904: 0xAF60,
	30037 - 11904: 0x9476,
	30041 - 11904: 0xAF64,
	30042 - 11904: 0xAF63,
	30043 - 11904: 0xD2C1,
	30044 - 11904: 0xAF62,
	30045 - 11904: 0xAF61,
	30047 - 11904: 0xD2C2,
	30048 - 11904: 0x9978,
	30050 - 11904: 0xB2A6,
	30051 - 11904: 0xD67B,
	30052 - 11904: 0xD67A,
	30053 - 11904: 0xB2A4,
	30054 - 11904: 0xB2A5,
	30055 - 11904: 0xFEB3,
	30058 - 11904: 0xB566,
	30059 - 11904: 0xB565,
	30060 - 11904: 0xDAAE,
	30061 - 11904: 0x98D3,
	30062 - 11904: 0xFEB4,
	30063 - 11904: 0xDAAD,
	30064 - 11904: 0xB2A7,
	30066 - 11904: 0x98D4,
	30070 - 11904: 0xB7ED,
	30071 - 11904: 0xDEC5,
	30072 - 11904: 0xB7EE,
	30073 - 11904: 0xDEC4,
	30074 - 11904: 0x9FB9,
	30077 - 11904: 0xE2D8,
	30078 - 11904: 0xE6AE,
	30079 - 11904: 0xBD42,
	30080 - 11904: 0xEA6A,
	30083 - 11904: 0x9471,
	30084 - 11904: 0xED73,
	30086 - 11904: 0xC3A6,
	30087 - 11904: 0xC3A5,
	30090 - 11904: 0xC57C,
	30091 - 11904: 0xA5D4,
	30092 - 11904: 0xCD73,
	30093 - 11904: 0x98D5,
	30094 - 11904: 0xFEB8,
	30095 - 11904: 0xB2A8,
	30096 - 11904: 0xE2D9,
	30097 - 11904: 0xBAC3,
	30098 - 11904: 0xC6D4,
	30100 - 11904: 0xCB6F,
	30101 - 11904: 0xCB70,
	30104 - 11904: 0xCD74,
	30105 - 11904: 0xAAB8,
	30106 - 11904: 0xAAB9,
	30109 - 11904: 0xAAB7,
	30110 - 11904: 0xFEBA,
	30114 - 11904: 0xACCF,
	30115 - 11904: 0xACD0,
	30116 - 11904: 0xACCD,
	30117 - 11904: 0xACCE,
	30119 - 11904: 0xCFDC,
	30122 - 11904: 0xCFDD,
	30123 - 11904: 0xACCC,
	30128 - 11904: 0xD2C3,
	30129 - 11904: 0x9E5C,
	30130 - 11904: 0xAF68,
	30131 - 11904: 0xAF69,
	30132 - 11904: 0xFEBB,
	30133 - 11904: 0xB2AB,
	30134 - 11904: 0xD2C9,
	30136 - 11904: 0xAF6E,
	30137 - 11904: 0xAF6C,
	30138 - 11904: 0xD2CA,
	30139 - 11904: 0xD2C5,
	30140 - 11904: 0xAF6B,
	30141 - 11904: 0xAF6A,
	30142 - 11904: 0xAF65,
	30143 - 11904: 0xD2C8,
	30144 - 11904: 0xD2C7,
	30145 - 11904: 0xD2C4,
	30146 - 11904: 0xAF6D,
	30147 - 11904: 0xA044,
	30148 - 11904: 0xD2C6,
	30149 - 11904: 0xAF66,
	30151 - 11904: 0xAF67,
	30152 - 11904: 0x98D7,
	30154 - 11904: 0xB2AC,
	30155 - 11904: 0xD6A1,
	30156 - 11904: 0xD6A2,
	30157 - 11904: 0xB2AD,
	30158 - 11904: 0xD67C,
	30159 - 11904: 0xD67E,
	30160 - 11904: 0xD6A4,
	30161 - 11904: 0xD6A3,
	30162 - 11904: 0xD67D,
	30164 - 11904: 0xB2A9,
	30165 - 11904: 0xB2AA,
	30167 - 11904: 0xDAB6,
	30168 - 11904: 0xB56B,
	30169 - 11904: 0xB56A,
	30170 - 11904: 0xDAB0,
	30171 - 11904: 0xB568,
	30172 - 11904: 0x98D8,
	30173 - 11904: 0xDAB3,
	30174 - 11904: 0xB56C,
	30175 - 11904: 0xDAB4,
	30176 - 11904: 0xB56D,
	30177 - 11904: 0xDAB1,
	30178 - 11904: 0xB567,
	30179 - 11904: 0xB569,
	30180 - 11904: 0xDAB5,
	30182 - 11904: 0xDAB2,
	30183 - 11904: 0xDAAF,
	30189 - 11904: 0xDED2,
	30191 - 11904: 0xDEC7,
	30192 - 11904: 0xB7F0,
	30193 - 11904: 0xB7F3,
	30194 - 11904: 0xB7F2,
	30195 - 11904: 0xB7F7,
	30196 - 11904: 0xB7F6,
	30197 - 11904: 0xDED3,
	30198 - 11904: 0xDED1,
	30199 - 11904: 0xDECA,
	30200 - 11904: 0xDECE,
	30201 - 11904: 0xDECD,
	30202 - 11904: 0xB7F4,
	30203 - 11904: 0xDED0,
	30204 - 11904: 0xDECC,
	30205 - 11904: 0xDED4,
	30206 - 11904: 0xDECB,
	30207 - 11904: 0xB7F5,
	30208 - 11904: 0xB7EF,
	30209 - 11904: 0xB7F1,
	30210 - 11904: 0xFEBC,
	30211 - 11904: 0xDEC9,
	30215 - 11904: 0x9FFE,
	30216 - 11904: 0xE2DB,
	30217 - 11904: 0xBAC7,
	30218 - 11904: 0xE2DF,
	30219 - 11904: 0xBAC6,
	30220 - 11904: 0xE2DC,
	30221 - 11904: 0xBAC5,
	30223 - 11904: 0xDEC8,
	30224 - 11904: 0xDECF,
	30225 - 11904: 0xE2DE,
	30227 - 11904: 0xBAC8,
	30228 - 11904: 0xE2E0,
	30229 - 11904: 0xE2DD,
	30230 - 11904: 0xE2DA,
	30233 - 11904: 0xE6B1,
	30234 - 11904: 0xE6B5,
	30235 - 11904: 0xE6B7,
	30236 - 11904: 0xE6B3,
	30237 - 11904: 0xE6B2,
	30238 - 11904: 0xE6B0,
	30239 - 11904: 0xBD45,
	30240 - 11904: 0xBD43,
	30241 - 11904: 0xBD48,
	30242 - 11904: 0xBD49,
	30243 - 11904: 0xE6B4,
	30244 - 11904: 0xBD46,
	30245 - 11904: 0xE6AF,
	30246 - 11904: 0xBD47,
	30247 - 11904: 0xBAC4,
	30248 - 11904: 0xE6B6,
	30249 - 11904: 0xBD44,
	30252 - 11904: 0xFEBD,
	30253 - 11904: 0xEA6C,
	30255 - 11904: 0xEA6B,
	30256 - 11904: 0xEA73,
	30257 - 11904: 0xEA6D,
	30258 - 11904: 0xEA72,
	30259 - 11904: 0xEA6F,
	30260 - 11904: 0xBF60,
	30261 - 11904: 0xEA71,
	30264 - 11904: 0xBF61,
	30266 - 11904: 0xBF62,
	30267 - 11904: 0x9DDD,
	30268 - 11904: 0xEA70,
	30269 - 11904: 0xEA6E,
	30272 - 11904: 0x9EE1,
	30274 - 11904: 0xC0F8,
	30275 - 11904: 0xED74,
	30278 - 11904: 0xC0F7,
	30279 - 11904: 0xED77,
	30280 - 11904: 0xED75,
	30281 - 11904: 0xED76,
	30284 - 11904: 0xC0F9,
	30285 - 11904: 0x98DA,
	30286 - 11904: 0x9DDF,
	30287 - 11904: 0xFEBF,
	30288 - 11904: 0xF04D,
	30289 - 11904: 0xFEBE,
	30290 - 11904: 0xC2A1,
	30291 - 11904: 0xF04E,
	30292 - 11904: 0x9EEB,
	30294 - 11904: 0xC27D,
	30295 - 11904: 0xF04F,
	30296 - 11904: 0xC27E,
	30297 - 11904: 0xF04C,
	30298 - 11904: 0xF050,
	30300 - 11904: 0xF04A,
	30303 - 11904: 0xC3A7,
	30304 - 11904: 0xF278,
	30305 - 11904: 0xC3A8,
	30306 - 11904: 0xC46F,
	30308 - 11904: 0xF04B,
	30309 - 11904: 0xC470,
	30310 - 11904: 0x9E59,
	30311 - 11904: 0xA05C,
	30313 - 11904: 0xC4EE,
	30314 - 11904: 0xF5DF,
	30316 - 11904: 0xC57E,
	30317 - 11904: 0xF6F4,
	30318 - 11904: 0xC57D,
	30319 - 11904: 0xFEC0,
	30320 - 11904: 0xF7EA,
	30321 - 11904: 0xC5F5,
	30322 - 11904: 0xC5F6,
	30323 - 11904: 0x9477,
	30324 - 11904: 0x98DC,
	30325 - 11904: 0xF9CC,
	30326 - 11904: 0xFEC1,
	30328 - 11904: 0xACD1,
	30329 - 11904: 0xCFDE,
	30330 - 11904: 0x98DE,
	30331 - 11904: 0xB56E,
	30332 - 11904: 0xB56F,
	30333 - 11904: 0xA5D5,
	30334 - 11904: 0xA6CA,
	30335 - 11904: 0xCA47,
	30337 - 11904: 0xCB71,
	30338 - 11904: 0xA86D,
	30340 - 11904: 0xAABA,
	30342 - 11904: 0xACD2,
	30343 - 11904: 0xACD3,
	30344 - 11904: 0xACD4,
	30345 - 11904: 0xD6A6,
	30346 - 11904: 0xD2CB,
	30347 - 11904: 0xAF6F,
	30350 - 11904: 0xB2AE,
	30351 - 11904: 0xD6A5,
	30352 - 11904: 0xFEC3,
	30354 - 11904: 0xDAB8,
	30355 - 11904: 0xB571,
	30357 - 11904: 0xDAB7,
	30358 - 11904: 0xB570,
	30361 - 11904: 0xDED5,
	30362 - 11904: 0xBD4A,
	30363 - 11904: 0xE6BB,
	30364 - 11904: 0xE6B8,
	30365 - 11904: 0xE6B9,
	30366 - 11904: 0xE6BA,
	30369 - 11904: 0xFEC8,
	30372 - 11904: 0xED78,
	30373 - 11904: 0xFEC9,
	30374 - 11904: 0xF051,
	30378 - 11904: 0xF471,
	30379 - 11904: 0xF470,
	30381 - 11904: 0xF6F5,
	30382 - 11904: 0xA5D6,
	30383 - 11904: 0xCD75,
	30384 - 11904: 0xAF70,
	30388 - 11904: 0xB572,
	30389 - 11904: 0xDED6,
	30391 - 11904: 0xFECA,
	30392 - 11904: 0xE2E1,
	30394 - 11904: 0xBD4B,
	30395 - 11904: 0xEA74,
	30397 - 11904: 0xF052,
	30398 - 11904: 0xF472,
	30399 - 11904: 0xA5D7,
	30402 - 11904: 0xAABB,
	30403 - 11904: 0xACD7,
	30404 - 11904: 0xCFDF,
	30405 - 11904: 0xACD8,
	30406 - 11904: 0xACD6,
	30408 - 11904: 0xACD5,
	30409 - 11904: 0xD2CC,
	30410 - 11904: 0xAF71,
	30412 - 11904: 0xFECB,
	30413 - 11904: 0xAF72,
	30414 - 11904: 0xAF73,
	30418 - 11904: 0xB2B0,
	30419 - 11904: 0xD6A7,
	30420 - 11904: 0xB2AF,
	30422 - 11904: 0x9FC2,
	30425 - 11904: 0x8C6B,
	30426 - 11904: 0xDAB9,
	30427 - 11904: 0xB2B1,
	30428 - 11904: 0xB573,
	30429 - 11904: 0xDED7,
	30430 - 11904: 0xB7F8,
	30431 - 11904: 0xB7F9,
	30433 - 11904: 0xBAC9,
	30435 - 11904: 0xBACA,
	30436 - 11904: 0xBD4C,
	30437 - 11904: 0xBF64,
	30438 - 11904: 0xEA75,
	30439 - 11904: 0xBF63,
	30441 - 11904: 0xED79,
	30442 - 11904: 0xC0FA,
	30444 - 11904: 0xF053,
	30445 - 11904: 0xF473,
	30446 - 11904: 0xA5D8,
	30447 - 11904: 0xA86E,
	30448 - 11904: 0xCD78,
	30449 - 11904: 0xCD77,
	30450 - 11904: 0xAABC,
	30451 - 11904: 0xCD76,
	30452 - 11904: 0xAABD,
	30453 - 11904: 0xCD79,
	30455 - 11904: 0xCFE5,
	30456 - 11904: 0xACDB,
	30457 - 11904: 0xACDA,
	30458 - 11904: 0xCFE7,
	30459 - 11904: 0xCFE6,
	30460 - 11904: 0xACDF,
	30462 - 11904: 0xACDE,
	30465 - 11904: 0xACD9,
	30467 - 11904: 0xCFE1,
	30468 - 11904: 0xCFE2,
	30469 - 11904: 0xCFE3,
	30471 - 11904: 0xACE0,
	30472 - 11904: 0xCFE0,
	30473 - 11904: 0xACDC,
	30474 - 11904: 0xCFE4,
	30475 - 11904: 0xACDD,
	30476 - 11904: 0x98C4,
	30478 - 11904: 0x94B0,
	30479 - 11904: 0x94B1,
	30480 - 11904: 0xD2CF,
	30481 - 11904: 0xD2D3,
	30482 - 11904: 0xD2D1,
	30483 - 11904: 0xD2D0,
	30485 - 11904: 0xD2D4,
	30489 - 11904: 0xD2D5,
	30490 - 11904: 0xD2D6,
	30491 - 11904: 0xD2CE,
	30493 - 11904: 0xD2CD,
	30494 - 11904: 0xFED1,
	30495 - 11904: 0xAF75,
	30496 - 11904: 0xAF76,
	30498 - 11904: 0xD2D7,
	30499 - 11904: 0xD2D2,
	30500 - 11904: 0xA0C1,
	30501 - 11904: 0xD6B0,
	30502 - 11904: 0xFED2,
	30503 - 11904: 0xD2D8,
	30504 - 11904: 0xAF77,
	30505 - 11904: 0xAF74,
	30507 - 11904: 0xA0CD,
	30509 - 11904: 0xD6AA,
	30511 - 11904: 0xD6A9,
	30513 - 11904: 0xD6AB,
	30514 - 11904: 0xD6AC,
	30515 - 11904: 0xD6AE,
	30516 - 11904: 0xD6AD,
	30517 - 11904: 0xD6B2,
	30518 - 11904: 0xB2B5,
	30519 - 11904: 0xB2B2,
	30520 - 11904: 0xB2B6,
	30521 - 11904: 0xD6A8,
	30522 - 11904: 0xB2B7,
	30523 - 11904: 0xD6B1,
	30524 - 11904: 0xB2B4,
	30525 - 11904: 0xD6AF,
	30526 - 11904: 0xB2B3,
	30528 - 11904: 0xFED3,
	30531 - 11904: 0x98E5,
	30532 - 11904: 0xDABC,
	30533 - 11904: 0xDABE,
	30534 - 11904: 0xDABA,
	30535 - 11904: 0xDABB,
	30538 - 11904: 0xDABF,
	30539 - 11904: 0xDAC1,
	30540 - 11904: 0xDAC2,
	30541 - 11904: 0xDABD,
	30542 - 11904: 0xDAC0,
	30543 - 11904: 0xB574,
	30546 - 11904: 0xDEDB,
	30548 - 11904: 0xDEE0,
	30549 - 11904: 0xDED8,
	30550 - 11904: 0xDEDC,
	30552 - 11904: 0xFED6,
	30553 - 11904: 0xDEE1,
	30554 - 11904: 0xDEDD,
	30555 - 11904: 0xB7FA,
	30556 - 11904: 0xB843,
	30558 - 11904: 0xB7FD,
	30559 - 11904: 0xDED9,
	30560 - 11904: 0xDEDA,
	30561 - 11904: 0xBACE,
	30562 - 11904: 0xB846,
	30563 - 11904: 0xB7FE,
	30565 - 11904: 0xB844,
	30566 - 11904: 0xB7FC,
	30567 - 11904: 0xDEDF,
	30568 - 11904: 0xB845,
	30569 - 11904: 0xDEDE,
	30570 - 11904: 0xB841,
	30571 - 11904: 0xB7FB,
	30572 - 11904: 0xB842,
	30573 - 11904: 0xDEE2,
	30574 - 11904: 0xE2E6,
	30575 - 11904: 0xE2E8,
	30578 - 11904: 0x91E4,
	30583 - 11904: 0x8FC7,
	30584 - 11904: 0x94AE,
	30585 - 11904: 0xB840,
	30586 - 11904: 0x8A4F,
	30587 - 11904: 0x94B2,
	30588 - 11904: 0xE2E3,
	30589 - 11904: 0xBACC,
	30590 - 11904: 0xE2E9,
	30591 - 11904: 0xBACD,
	30592 - 11904: 0xE2E7,
	30593 - 11904: 0xE2E2,
	30594 - 11904: 0xE2E5,
	30595 - 11904: 0xE2EA,
	30596 - 11904: 0xBACB,
	30597 - 11904: 0xE2E4,
	30599 - 11904: 0xBD4E,
	30600 - 11904: 0xE6BF,
	30601 - 11904: 0xE6BE,
	30603 - 11904: 0xBD51,
	30604 - 11904: 0xBD4F,
	30605 - 11904: 0xE6BC,
	30606 - 11904: 0xBD4D,
	30607 - 11904: 0xE6BD,
	30609 - 11904: 0xBD50,
	30611 - 11904: 0x8FD4,
	30613 - 11904: 0xEA7D,
	30615 - 11904: 0xEAA1,
	30616 - 11904: 0x98EA,
	30617 - 11904: 0xEA7E,
	30618 - 11904: 0xEA76,
	30619 - 11904: 0xEA7A,
	30620 - 11904: 0xEA79,
	30621 - 11904: 0xEA77,
	30622 - 11904: 0xBF66,
	30623 - 11904: 0xBF67,
	30624 - 11904: 0xBF65,
	30625 - 11904: 0xEA78,
	30626 - 11904: 0xEA7B,
	30627 - 11904: 0xEA7C,
	30629 - 11904: 0xBF68,
	30631 - 11904: 0xC140,
	30632 - 11904: 0xEDA3,
	30634 - 11904: 0xC0FC,
	30635 - 11904: 0xED7B,
	30636 - 11904: 0xC0FE,
	30637 - 11904: 0xC141,
	30639 - 11904: 0xFED8,
	30640 - 11904: 0xC0FD,
	30641 - 11904: 0xEDA2,
	30642 - 11904: 0xED7C,
	30643 - 11904: 0xC0FB,
	30644 - 11904: 0xEDA1,
	30645 - 11904: 0xED7A,
	30646 - 11904: 0xED7E,
	30647 - 11904: 0xED7D,
	30649 - 11904: 0x9DE0,
	30650 - 11904: 0xF055,
	30651 - 11904: 0xC2A4,
	30652 - 11904: 0xC2A5,
	30653 - 11904: 0xC2A2,
	30654 - 11904: 0x98EE,
	30655 - 11904: 0xC2A3,
	30658 - 11904: 0xF054,
	30659 - 11904: 0x95C4,
	30660 - 11904: 0xF27B,
	30661 - 11904: 0xFCE8,
	30663 - 11904: 0xC3A9,
	30665 - 11904: 0xF279,
	30666 - 11904: 0xF27A,
	30667 - 11904: 0x98EF,
	30668 - 11904: 0xF474,
	30669 - 11904: 0xF477,
	30670 - 11904: 0xF475,
	30671 - 11904: 0xF476,
	30672 - 11904: 0xF5E0,
	30675 - 11904: 0xC4EF,
	30676 - 11904: 0xF7EB,
	30677 - 11904: 0xF8B4,
	30679 - 11904: 0xC5F7,
	30680 - 11904: 0xF8F8,
	30681 - 11904: 0xF8F9,
	30682 - 11904: 0xC666,
	30683 - 11904: 0xA5D9,
	30684 - 11904: 0xACE1,
	30685 - 11904: 0x8C6E,
	30686 - 11904: 0xDAC3,
	30688 - 11904: 0xDEE3,
	30690 - 11904: 0xA5DA,
	30691 - 11904: 0xA86F,
	30693 - 11904: 0xAABE,
	30694 - 11904: 0xFAD8,
	30695 - 11904: 0xCFE8,
	30696 - 11904: 0xCFE9,
	30697 - 11904: 0xAF78,
	30700 - 11904: 0xDAC4,
	30701 - 11904: 0xB575,
	30702 - 11904: 0xB847,
	30703 - 11904: 0xC142,
	30704 - 11904: 0xEDA4,
	30705 - 11904: 0xF27C,
	30706 - 11904: 0xF478,
	30707 - 11904: 0xA5DB,
	30708 - 11904: 0xFEDC,
	30711 - 11904: 0xCDA1,
	30712 - 11904: 0xCD7A,
	30713 - 11904: 0xCD7C,
	30714 - 11904: 0xCD7E,
	30715 - 11904: 0xCD7D,
	30716 - 11904: 0xCD7B,
	30717 - 11904: 0xAABF,
	30718 - 11904: 0xA0AE,
	30722 - 11904: 0xACE2,
	30723 - 11904: 0xCFF2,
	30725 - 11904: 0xCFED,
	30726 - 11904: 0xCFEA,
	30728 - 11904: 0x9D4C,
	30729 - 11904: 0xFEDD,
	30732 - 11904: 0xACE4,
	30733 - 11904: 0xACE5,
	30734 - 11904: 0xCFF0,
	30735 - 11904: 0xCFEF,
	30736 - 11904: 0xCFEE,
	30737 - 11904: 0xCFEB,
	30738 - 11904: 0xCFEC,
	30739 - 11904: 0xCFF3,
	30740 - 11904: 0xACE3,
	30744 - 11904: 0x98F1,
	30748 - 11904: 0x98F3,
	30749 - 11904: 0xAF7C,
	30750 - 11904: 0x94C1,
	30751 - 11904: 0xAFA4,
	30752 - 11904: 0xAFA3,
	30753 - 11904: 0xD2E1,
	30754 - 11904: 0xD2DB,
	30755 - 11904: 0xD2D9,
	30757 - 11904: 0xAFA1,
	30758 - 11904: 0xD6B9,
	30759 - 11904: 0xAF7A,
	30760 - 11904: 0xD2DE,
	30761 - 11904: 0xD2E2,
	30762 - 11904: 0xD2E4,
	30763 - 11904: 0xD2E0,
	30764 - 11904: 0xD2DA,
	30765 - 11904: 0xAFA2,
	30766 - 11904: 0xD2DF,
	30767 - 11904: 0xD2DD,
	30768 - 11904: 0xAF79,
	30769 - 11904: 0xD2E5,
	30770 - 11904: 0xAFA5,
	30771 - 11904: 0xD2E3,
	30772 - 11904: 0xAF7D,
	30773 - 11904: 0xD2DC,
	30775 - 11904: 0xAF7E,
	30776 - 11904: 0xAF7B,
	30777 - 11904: 0x98F5,
	30780 - 11904: 0xFA4F,
	30781 - 11904: 0x96E2,
	30786 - 11904: 0x9450,
	30787 - 11904: 0xB2B9,
	30788 - 11904: 0x96A2,
	30789 - 11904: 0xD6BA,
	30791 - 11904: 0x98F6,
	30792 - 11904: 0xD6B3,
	30793 - 11904: 0xD6B5,
	30794 - 11904: 0xD6B7,
	30795 - 11904: 0x96E5,
	30796 - 11904: 0xD6B8,
	30797 - 11904: 0xD6B6,
	30798 - 11904: 0xB2BA,
	30800 - 11904: 0xD6BB,
	30801 - 11904: 0x98F7,
	30802 - 11904: 0xD6B4,
	30803 - 11904: 0xA046,
	30804 - 11904: 0x96E3,
	30812 - 11904: 0xDAC8,
	30813 - 11904: 0xB576,
	30814 - 11904: 0xDAD0,
	30816 - 11904: 0xDAC5,
	30818 - 11904: 0xDAD1,
	30820 - 11904: 0xDAC6,
	30821 - 11904: 0xDAC7,
	30822 - 11904: 0x98F8,
	30824 - 11904: 0xDACF,
	30825 - 11904: 0xDACE,
	30826 - 11904: 0xDACB,
	30827 - 11904: 0xB2B8,
	30828 - 11904: 0xB577,
	30829 - 11904: 0xDAC9,
	30830 - 11904: 0xDACC,
	30831 - 11904: 0xB578,
	30832 - 11904: 0xDACD,
	30833 - 11904: 0xDACA,
	30841 - 11904: 0xDEEE,
	30842 - 11904: 0x9EE4,
	30843 - 11904: 0xDEF2,
	30844 - 11904: 0xB84E,
	30846 - 11904: 0xE2F0,
	30847 - 11904: 0xB851,
	30848 - 11904: 0xDEF0,
	30849 - 11904: 0xF9D6,
	30851 - 11904: 0xDEED,
	30852 - 11904: 0xDEE8,
	30853 - 11904: 0xDEEA,
	30854 - 11904: 0xDEEB,
	30855 - 11904: 0xDEE4,
	30856 - 11904: 0x94C3,
	30857 - 11904: 0xB84D,
	30860 - 11904: 0xB84C,
	30861 - 11904: 0x94C2,
	30862 - 11904: 0xB848,
	30863 - 11904: 0xDEE7,
	30865 - 11904: 0xB84F,
	30867 - 11904: 0xB850,
	30868 - 11904: 0xDEE6,
	30869 - 11904: 0xDEE9,
	30870 - 11904: 0xDEF1,
	30871 - 11904: 0xB84A,
	30872 - 11904: 0xB84B,
	30873 - 11904: 0xDEEF,
	30874 - 11904: 0xDEE5,
	30878 - 11904: 0xE2F2,
	30879 - 11904: 0xBAD0,
	30880 - 11904: 0xE2F4,
	30881 - 11904: 0xDEEC,
	30882 - 11904: 0xE2F6,
	30883 - 11904: 0xBAD4,
	30884 - 11904: 0xE2F7,
	30885 - 11904: 0xE2F3,
	30887 - 11904: 0xBAD1,
	30888 - 11904: 0xE2EF,
	30889 - 11904: 0xBAD3,
	30890 - 11904: 0xE2EC,
	30891 - 11904: 0xE2F1,
	30892 - 11904: 0xE2F5,
	30893 - 11904: 0xE2EE,
	30895 - 11904: 0xFEE1,
	30896 - 11904: 0xB849,
	30897 - 11904: 0xFEE9,
	30898 - 11904: 0xE2EB,
	30899 - 11904: 0xBAD2,
	30900 - 11904: 0xE2ED,
	30902 - 11904: 0x96E4,
	30904 - 11904: 0x89AC,
	30905 - 11904: 0x96DB,
	30906 - 11904: 0xBD54,
	30907 - 11904: 0xE6C1,
	30908 - 11904: 0xBD58,
	30910 - 11904: 0xBD56,
	30913 - 11904: 0xBACF,
	30915 - 11904: 0xE6C8,
	30916 - 11904: 0xE6C9,
	30917 - 11904: 0xBD53,
	30919 - 11904: 0xFEE2,
	30920 - 11904: 0xE6C7,
	30921 - 11904: 0xE6CA,
	30922 - 11904: 0xBD55,
	30923 - 11904: 0xBD52,
	30924 - 11904: 0xE6C3,
	30925 - 11904: 0xE6C0,
	30926 - 11904: 0xE6C5,
	30927 - 11904: 0xE6C2,
	30928 - 11904: 0xBD59,
	30929 - 11904: 0xE6C4,
	30930 - 11904: 0x94C4,
	30931 - 11904: 0xFEE3,
	30932 - 11904: 0xE6C6,
	30933 - 11904: 0xBD57,
	30935 - 11904: 0xFEE7,
	30936 - 11904: 0x9FFB,
	30938 - 11904: 0xBF6A,
	30939 - 11904: 0xEAA8,
	30941 - 11904: 0xEAA2,
	30942 - 11904: 0xEAA6,
	30943 - 11904: 0xEAAC,
	30944 - 11904: 0xEAAD,
	30945 - 11904: 0xEAA9,
	30946 - 11904: 0xEAAA,
	30947 - 11904: 0xEAA7,
	30948 - 11904: 0x8C59,
	30949 - 11904: 0xEAA4,
	30951 - 11904: 0xBF6C,
	30952 - 11904: 0xBF69,
	30953 - 11904: 0xEAA3,
	30954 - 11904: 0xEAA5,
	30956 - 11904: 0xBF6B,
	30957 - 11904: 0xEAAB,
	30958 - 11904: 0x93C9,
	30959 - 11904: 0xC146,
	30960 - 11904: 0x94E8,
	30961 - 11904: 0xFB56,
	30962 - 11904: 0xEDAA,
	30963 - 11904: 0xEDA5,
	30964 - 11904: 0xC145,
	30965 - 11904: 0x90C5,
	30967 - 11904: 0xC143,
	30969 - 11904: 0xEDAC,
	30970 - 11904: 0xC144,
	30971 - 11904: 0xEDA8,
	30972 - 11904: 0xEDA9,
	30973 - 11904: 0xEDA6,
	30974 - 11904: 0xEDAD,
	30975 - 11904: 0xF056,
	30977 - 11904: 0xC147,
	30978 - 11904: 0xEDA7,
	30980 - 11904: 0xEDAE,
	30981 - 11904: 0xEDAB,
	30982 - 11904: 0xA0A8,
	30985 - 11904: 0xF05A,
	30988 - 11904: 0xF057,
	30990 - 11904: 0xC2A6,
	30992 - 11904: 0xF05B,
	30993 - 11904: 0xF05D,
	30994 - 11904: 0xF05C,
	30995 - 11904: 0xF058,
	30996 - 11904: 0xF059,
	30999 - 11904: 0xF2A3,
	31001 - 11904: 0xC3AA,
	31003 - 11904: 0xF27E,
	31004 - 11904: 0xF2A2,
	31005 - 11904: 0xF27D,
	31006 - 11904: 0xF2A4,
	31009 - 11904: 0xF2A1,
	31011 - 11904: 0xF47A,
	31012 - 11904: 0xF47D,
	31013 - 11904: 0xF479,
	31014 - 11904: 0xC471,
	31015 - 11904: 0xF47B,
	31016 - 11904: 0xF47C,
	31017 - 11904: 0xF47E,
	31018 - 11904: 0xC472,
	31019 - 11904: 0xC474,
	31020 - 11904: 0xC473,
	31021 - 11904: 0xF5E1,
	31022 - 11904: 0xFEE5,
	31023 - 11904: 0xF5E3,
	31025 - 11904: 0xF5E2,
	31026 - 11904: 0x98FD,
	31027 - 11904: 0x98FB,
	31028 - 11904: 0xFEE8,
	31029 - 11904: 0xF6F6,
	31030 - 11904: 0x8EBF,
	31032 - 11904: 0xF8B5,
	31033 - 11904: 0xF8FA,
	31034 - 11904: 0xA5DC,
	31035 - 11904: 0x8BD8,
	31036 - 11904: 0xFEF7,
	31037 - 11904: 0xCB72,
	31038 - 11904: 0xAAC0,
	31039 - 11904: 0xCDA3,
	31040 - 11904: 0xAAC1,
	31041 - 11904: 0xAAC2,
	31042 - 11904: 0xCDA2,
	31044 - 11904: 0xCFF8,
	31045 - 11904: 0xCFF7,
	31046 - 11904: 0xACE6,
	31047 - 11904: 0xACE9,
	31048 - 11904: 0xACE8,
	31049 - 11904: 0xACE7,
	31050 - 11904: 0xCFF4,
	31051 - 11904: 0xCFF6,
	31052 - 11904: 0xCFF5,
	31055 - 11904: 0xD2E8,
	31056 - 11904: 0xAFA7,
	31057 - 11904: 0xD2EC,
	31058 - 11904: 0xD2EB,
	31059 - 11904: 0xD2EA,
	31060 - 11904: 0xD2E6,
	31061 - 11904: 0xAFA6,
	31062 - 11904: 0xAFAA,
	31063 - 11904: 0xAFAD,
	31064 - 11904: 0x8F68,
	31065 - 11904: 0x94C6,
	31066 - 11904: 0xAFAE,
	31067 - 11904: 0xD2E7,
	31068 - 11904: 0xD2E9,
	31069 - 11904: 0xAFAC,
	31070 - 11904: 0xAFAB,
	31071 - 11904: 0xAFA9,
	31072 - 11904: 0xAFA8,
	31073 - 11904: 0xD6C2,
	31074 - 11904: 0x9DEA,
	31075 - 11904: 0xD6C0,
	31076 - 11904: 0xD6BC,
	31077 - 11904: 0xB2BB,
	31079 - 11904: 0xD6BD,
	31080 - 11904: 0xB2BC,
	31081 - 11904: 0xD6BE,
	31082 - 11904: 0xD6BF,
	31083 - 11904: 0xD6C1,
	31085 - 11904: 0xB2BD,
	31088 - 11904: 0xDAD5,
	31089 - 11904: 0xFC69,
	31090 - 11904: 0xDAD4,
	31091 - 11904: 0xDAD3,
	31092 - 11904: 0xDAD2,
	31097 - 11904: 0xDEF6,
	31098 - 11904: 0xB852,
	31100 - 11904: 0xDEF3,
	31101 - 11904: 0xDEF5,
	31102 - 11904: 0x9CDA,
	31103 - 11904: 0xB853,
	31104 - 11904: 0xFEF3,
	31105 - 11904: 0xB854,
	31106 - 11904: 0xDEF4,
	31107 - 11904: 0x9C72,
	31110 - 11904: 0xFEF0,
	31111 - 11904: 0x89C9,
	31112 - 11904: 0xE341,
	31114 - 11904: 0xE2F9,
	31115 - 11904: 0xE2FA,
	31117 - 11904: 0xBAD7,
	31118 - 11904: 0xBAD5,
	31119 - 11904: 0xBAD6,
	31120 - 11904: 0xE343,
	31121 - 11904: 0x9941,
	31122 - 11904: 0xE342,
	31123 - 11904: 0xE2FE,
	31124 - 11904: 0xE2FD,
	31125 - 11904: 0xE2FC,
	31126 - 11904: 0xE2FB,
	31127 - 11904: 0xE340,
	31128 - 11904: 0xE2F8,
	31129 - 11904: 0x9942,
	31130 - 11904: 0xE6CB,
	31131 - 11904: 0xE6D0,
	31132 - 11904: 0xE6CE,
	31133 - 11904: 0xFEF5,
	31135 - 11904: 0x91D7,
	31136 - 11904: 0xE6CD,
	31137 - 11904: 0xE6CC,
	31138 - 11904: 0xE6CF,
	31140 - 11904: 0xEAAE,
	31141 - 11904: 0x94CC,
	31142 - 11904: 0xBF6D,
	31143 - 11904: 0xC148,
	31144 - 11904: 0xEDB0,
	31145 - 11904: 0xFEF8,
	31146 - 11904: 0xC149,
	31147 - 11904: 0xEDAF,
	31148 - 11904: 0xF05F,
	31149 - 11904: 0xF05E,
	31150 - 11904: 0xC2A7,
	31152 - 11904: 0xF2A5,
	31153 - 11904: 0xC3AB,
	31154 - 11904: 0xF4A1,
	31155 - 11904: 0xC5A1,
	31156 - 11904: 0xF6F7,
	31158 - 11904: 0xF8B7,
	31159 - 11904: 0xF8B6,
	31160 - 11904: 0xC9A8,
	31161 - 11904: 0xACEA,
	31162 - 11904: 0xACEB,
	31163 - 11904: 0xD6C3,
	31165 - 11904: 0xB856,
	31166 - 11904: 0xA5DD,
	31167 - 11904: 0xA872,
	31168 - 11904: 0xA871,
	31169 - 11904: 0xA870,
	31172 - 11904: 0x97A8,
	31173 - 11904: 0xCDA4,
	31174 - 11904: 0xFEFC,
	31176 - 11904: 0xAAC4,
	31177 - 11904: 0xAAC3,
	31178 - 11904: 0x8CDE,
	31179 - 11904: 0xACEE,
	31180 - 11904: 0xFDBF,
	31181 - 11904: 0xCFFA,
	31182 - 11904: 0xCFFD,
	31183 - 11904: 0xCFFB,
	31184 - 11904: 0x87B3,
	31185 - 11904: 0xACEC,
	31186 - 11904: 0xACED,
	31188 - 11904: 0xFEFE,
	31189 - 11904: 0xCFF9,
	31190 - 11904: 0xCFFC,
	31192 - 11904: 0xAFB5,
	31196 - 11904: 0xD2F3,
	31197 - 11904: 0xD2F5,
	31198 - 11904: 0xD2F4,
	31199 - 11904: 0xAFB2,
	31200 - 11904: 0xD2EF,
	31202 - 11904: 0x96D1,
	31203 - 11904: 0xAFB0,
	31204 - 11904: 0xAFAF,
	31206 - 11904: 0xAFB3,
	31207 - 11904: 0xAFB1,
	31209 - 11904: 0xAFB4,
	31210 - 11904: 0xD2F2,
	31211 - 11904: 0xD2ED,
	31212 - 11904: 0xD2EE,
	31213 - 11904: 0xD2F1,
	31214 - 11904: 0xD2F0,
	31217 - 11904: 0x94D5,
	31220 - 11904: 0x94D0,
	31222 - 11904: 0xD6C6,
	31223 - 11904: 0xD6C7,
	31224 - 11904: 0xD6C5,
	31226 - 11904: 0xD6C4,
	31227 - 11904: 0xB2BE,
	31232 - 11904: 0xB57D,
	31234 - 11904: 0xDAD6,
	31235 - 11904: 0xDAD8,
	31236 - 11904: 0xDADA,
	31237 - 11904: 0xB57C,
	31238 - 11904: 0x9944,
	31240 - 11904: 0xB57A,
	31242 - 11904: 0xDAD7,
	31243 - 11904: 0xB57B,
	31244 - 11904: 0xDAD9,
	31245 - 11904: 0xB579,
	31248 - 11904: 0xDF41,
	31249 - 11904: 0xDEF7,
	31250 - 11904: 0xDEFA,
	31251 - 11904: 0xDEFE,
	31252 - 11904: 0xB85A,
	31253 - 11904: 0xDEFC,
	31255 - 11904: 0xDEFB,
	31256 - 11904: 0xDEF8,
	31257 - 11904: 0xDEF9,
	31258 - 11904: 0xB858,
	31259 - 11904: 0xDF40,
	31260 - 11904: 0xB857,
	31262 - 11904: 0xB85C,
	31263 - 11904: 0xB85B,
	31264 - 11904: 0xB859,
	31266 - 11904: 0xDEFD,
	31270 - 11904: 0xE349,
	31272 - 11904: 0xE348,
	31274 - 11904: 0x8C63,
	31275 - 11904: 0xE344,
	31276 - 11904: 0x87BB,
	31277 - 11904: 0xA0B3,
	31278 - 11904: 0xBAD8,
	31279 - 11904: 0xE347,
	31280 - 11904: 0xE346,
	31281 - 11904: 0xBAD9,
	31282 - 11904: 0x87B4,
	31287 - 11904: 0xBD5E,
	31289 - 11904: 0xE6D2,
	31290 - 11904: 0x94CF,
	31291 - 11904: 0xBD5F,
	31292 - 11904: 0xBD5B,
	31293 - 11904: 0xBD5D,
	31294 - 11904: 0x9FFA,
	31295 - 11904: 0xBD5A,
	31296 - 11904: 0xBD5C,
	31299 - 11904: 0x91E5,
	31300 - 11904: 0xEAAF,
	31301 - 11904: 0x9C6A,
	31302 - 11904: 0xBF70,
	31303 - 11904: 0xEAB1,
	31304 - 11904: 0xEAB0,
	31305 - 11904: 0x8E49,
	31306 - 11904: 0xE345,
	31307 - 11904: 0xBF72,
	31308 - 11904: 0xBF71,
	31309 - 11904: 0xBF6E,
	31310 - 11904: 0xBF6F,
	31316 - 11904: 0xEDB5,
	31318 - 11904: 0xEDB3,
	31319 - 11904: 0xC14A,
	31320 - 11904: 0xEDB4,
	31322 - 11904: 0xEDB6,
	31323 - 11904: 0xEDB2,
	31324 - 11904: 0xEDB1,
	31327 - 11904: 0xF060,
	31328 - 11904: 0xC2AA,
	31329 - 11904: 0xC2A8,
	31330 - 11904: 0xC2A9,
	31333 - 11904: 0x8E4C,
	31335 - 11904: 0xF2A6,
	31336 - 11904: 0xF2A7,
	31337 - 11904: 0xC3AD,
	31339 - 11904: 0xC3AC,
	31340 - 11904: 0xF4A3,
	31341 - 11904: 0xF4A4,
	31342 - 11904: 0xF4A2,
	31344 - 11904: 0xF6F8,
	31345 - 11904: 0xF6F9,
	31346 - 11904: 0x87C9,
	31348 - 11904: 0xA5DE,
	31349 - 11904: 0xCA48,
	31350 - 11904: 0xA873,
	31352 - 11904: 0xCDA5,
	31353 - 11904: 0xAAC6,
	31354 - 11904: 0xAAC5,
	31355 - 11904: 0xCDA6,
	31357 - 11904: 0x8E4D,
	31358 - 11904: 0xD040,
	31359 - 11904: 0xACEF,
	31360 - 11904: 0xCFFE,
	31361 - 11904: 0xACF0,
	31363 - 11904: 0x9A73,
	31364 - 11904: 0xAFB6,
	31365 - 11904: 0xD2F8,
	31366 - 11904: 0xD2F6,
	31367 - 11904: 0xD2FC,
	31368 - 11904: 0xAFB7,
	31369 - 11904: 0xD2F7,
	31370 - 11904: 0xD2FB,
	31371 - 11904: 0xD2F9,
	31372 - 11904: 0xD2FA,
	31375 - 11904: 0xD6C8,
	31376 - 11904: 0xD6CA,
	31377 - 11904: 0x9947,
	31378 - 11904: 0xB2BF,
	31379 - 11904: 0x8CB1,
	31380 - 11904: 0xD6C9,
	31381 - 11904: 0xB2C0,
	31382 - 11904: 0xB5A2,
	31383 - 11904: 0xB5A1,
	31384 - 11904: 0xB57E,
	31385 - 11904: 0xDADB,
	31390 - 11904: 0xDF44,
	31391 - 11904: 0xB85D,
	31392 - 11904: 0xB85E,
	31394 - 11904: 0xDF43,
	31395 - 11904: 0xDF42,
	31400 - 11904: 0xE34A,
	31401 - 11904: 0xBADB,
	31402 - 11904: 0xBADA,
	31403 - 11904: 0xE34B,
	31404 - 11904: 0xE34C,
	31406 - 11904: 0xBD61,
	31407 - 11904: 0xBD60,
	31408 - 11904: 0x8E50,
	31409 - 11904: 0xEAB5,
	31410 - 11904: 0xE6D3,
	31411 - 11904: 0xE6D5,
	31412 - 11904: 0xE6D4,
	31413 - 11904: 0xEAB4,
	31414 - 11904: 0xEAB2,
	31415 - 11904: 0xEAB6,
	31416 - 11904: 0xEAB3,
	31418 - 11904: 0xBF73,
	31419 - 11904: 0x8E4F,
	31420 - 11904: 0x9949,
	31422 - 11904: 0xEDB7,
	31423 - 11904: 0xC14B,
	31424 - 11904: 0xEDB8,
	31425 - 11904: 0xEDB9,
	31426 - 11904: 0x8E51,
	31427 - 11904: 0x8E52,
	31428 - 11904: 0xC2AB,
	31429 - 11904: 0xC2AC,
	31431 - 11904: 0xC475,
	31432 - 11904: 0x9AB2,
	31433 - 11904: 0x89A5,
	31434 - 11904: 0xC5D1,
	31435 - 11904: 0xA5DF,
	31439 - 11904: 0x994C,
	31441 - 11904: 0xD041,
	31443 - 11904: 0x9FF8,
	31448 - 11904: 0xD2FD,
	31449 - 11904: 0xAFB8,
	31450 - 11904: 0x8E56,
	31451 - 11904: 0x994D,
	31452 - 11904: 0x91CA,
	31453 - 11904: 0x8E57,
	31455 - 11904: 0xB3BA,
	31456 - 11904: 0xB3B9,
	31458 - 11904: 0x94E1,
	31459 - 11904: 0xB5A4,
	31460 - 11904: 0xDADD,
	31461 - 11904: 0xB5A3,
	31462 - 11904: 0xDADC,
	31463 - 11904: 0x9047,
	31465 - 11904: 0x8FD8,
	31466 - 11904: 0x8E58,
	31467 - 11904: 0xDF45,
	31469 - 11904: 0xBADC,
	31470 - 11904: 0xE34D,
	31471 - 11904: 0xBADD,
	31478 - 11904: 0xC476,
	31479 - 11904: 0xF4A5,
	31481 - 11904: 0xA6CB,
	31482 - 11904: 0xAAC7,
	31483 - 11904: 0xCDA7,
	31484 - 11904: 0x87A3,
	31485 - 11904: 0xACF2,
	31486 - 11904: 0x94EB,
	31487 - 11904: 0xACF1,
	31488 - 11904: 0xD042,
	31489 - 11904: 0xD043,
	31492 - 11904: 0xD340,
	31493 - 11904: 0xD342,
	31494 - 11904: 0xAFB9,
	31496 - 11904: 0xD344,
	31497 - 11904: 0xD347,
	31498 - 11904: 0xD345,
	31499 - 11904: 0x8E5C,
	31500 - 11904: 0x9553,
	31502 - 11904: 0xD346,
	31503 - 11904: 0xD343,
	31504 - 11904: 0xD2FE,
	31505 - 11904: 0xAFBA,
	31506 - 11904: 0xD348,
	31507 - 11904: 0xD341,
	31508 - 11904: 0x9FE5,
	31512 - 11904: 0xD6D3,
	31513 - 11904: 0xB2C6,
	31514 - 11904: 0xD6DC,
	31515 - 11904: 0xB2C3,
	31517 - 11904: 0xD6D5,
	31518 - 11904: 0xB2C7,
	31519 - 11904: 0x9F56,
	31520 - 11904: 0xB2C1,
	31522 - 11904: 0xD6D0,
	31523 - 11904: 0xD6DD,
	31524 - 11904: 0xD6D1,
	31525 - 11904: 0xD6CE,
	31526 - 11904: 0xB2C5,
	31527 - 11904: 0x954F,
	31528 - 11904: 0xB2C2,
	31529 - 11904: 0x8E5E,
	31530 - 11904: 0xD6D4,
	31531 - 11904: 0xD6D7,
	31532 - 11904: 0xB2C4,
	31533 - 11904: 0xD6D8,
	31534 - 11904: 0xB2C8,
	31535 - 11904: 0xD6D9,
	31536 - 11904: 0xD6CF,
	31537 - 11904: 0xD6D6,
	31538 - 11904: 0xD6DA,
	31539 - 11904: 0xD6D2,
	31540 - 11904: 0xD6CD,
	31541 - 11904: 0xD6CB,
	31544 - 11904: 0xD6DB,
	31545 - 11904: 0x996A,
	31547 - 11904: 0xDADF,
	31552 - 11904: 0xDAE4,
	31554 - 11904: 0x9C64,
	31555 - 11904: 0x9CD9,
	31556 - 11904: 0xDAE0,
	31557 - 11904: 0xDAE6,
	31558 - 11904: 0xB5A7,
	31559 - 11904: 0xD6CC,
	31560 - 11904: 0xDAE1,
	31561 - 11904: 0xB5A5,
	31562 - 11904: 0xDADE,
	31563 - 11904: 0xB5AC,
	31564 - 11904: 0xDAE2,
	31565 - 11904: 0xB5AB,
	31566 - 11904: 0xDAE3,
	31567 - 11904: 0xB5AD,
	31568 - 11904: 0xB5A8,
	31569 - 11904: 0xB5AE,
	31570 - 11904: 0xB5A9,
	31572 - 11904: 0xB5AA,
	31573 - 11904: 0x8E5D,
	31574 - 11904: 0xB5A6,
	31576 - 11904: 0xDAE5,
	31584 - 11904: 0xB861,
	31585 - 11904: 0xDF50,
	31586 - 11904: 0x9950,
	31587 - 11904: 0xDF53,
	31588 - 11904: 0xDF47,
	31589 - 11904: 0xDF4C,
	31590 - 11904: 0xDF46,
	31591 - 11904: 0xB863,
	31593 - 11904: 0xDF4A,
	31596 - 11904: 0x9951,
	31597 - 11904: 0xDF48,
	31598 - 11904: 0xB862,
	31599 - 11904: 0x8E62,
	31600 - 11904: 0xDF4F,
	31601 - 11904: 0xDF4E,
	31602 - 11904: 0xDF4B,
	31603 - 11904: 0xDF4D,
	31604 - 11904: 0xDF49,
	31605 - 11904: 0xBAE1,
	31606 - 11904: 0xDF52,
	31607 - 11904: 0xB85F,
	31608 - 11904: 0xDF51,
	31611 - 11904: 0x9952,
	31618 - 11904: 0xE35D,
	31620 - 11904: 0xBAE8,
	31621 - 11904: 0xE358,
	31623 - 11904: 0xBAE7,
	31624 - 11904: 0xE34E,
	31626 - 11904: 0xE350,
	31627 - 11904: 0xBAE0,
	31628 - 11904: 0xE355,
	31629 - 11904: 0xE354,
	31630 - 11904: 0xE357,
	31631 - 11904: 0xBAE5,
	31632 - 11904: 0xE352,
	31633 - 11904: 0xE351,
	31634 - 11904: 0x8E68,
	31636 - 11904: 0xBAE4,
	31637 - 11904: 0xBADF,
	31638 - 11904: 0xE353,
	31639 - 11904: 0xBAE2,
	31640 - 11904: 0xE359,
	31641 - 11904: 0xE35B,
	31643 - 11904: 0xE356,
	31644 - 11904: 0xE34F,
	31645 - 11904: 0xBAE3,
	31648 - 11904: 0xBD69,
	31649 - 11904: 0xBADE,
	31650 - 11904: 0x8E61,
	31651 - 11904: 0x9F59,
	31652 - 11904: 0xE35C,
	31660 - 11904: 0xE6D9,
	31661 - 11904: 0xBD62,
	31662 - 11904: 0x87D0,
	31663 - 11904: 0xE6DB,
	31665 - 11904: 0xBD63,
	31666 - 11904: 0x8BB3,
	31668 - 11904: 0xBD65,
	31669 - 11904: 0xE6DE,
	31671 - 11904: 0xE6D6,
	31672 - 11904: 0xBAE6,
	31673 - 11904: 0xE6DC,
	31678 - 11904: 0xE6D8,
	31680 - 11904: 0xB860,
	31681 - 11904: 0xBD68,
	31684 - 11904: 0xBD64,
	31685 - 11904: 0x87B9,
	31686 - 11904: 0xBD66,
	31687 - 11904: 0xBD67,
	31689 - 11904: 0xBF76,
	31690 - 11904: 0xE6DD,
	31691 - 11904: 0xE6D7,
	31692 - 11904: 0xBD6A,
	31694 - 11904: 0xE6DA,
	31695 - 11904: 0x9F5D,
	31696 - 11904: 0x8E66,
	31700 - 11904: 0xEAC0,
	31701 - 11904: 0xEABB,
	31704 - 11904: 0xEAC5,
	31705 - 11904: 0xBF74,
	31706 - 11904: 0xEABD,
	31707 - 11904: 0xBF78,
	31708 - 11904: 0xEAC3,
	31709 - 11904: 0xEABA,
	31710 - 11904: 0xEAB7,
	31711 - 11904: 0xEAC6,
	31712 - 11904: 0xC151,
	31713 - 11904: 0xBF79,
	31714 - 11904: 0xEAC2,
	31715 - 11904: 0xEAB8,
	31716 - 11904: 0xBF77,
	31717 - 11904: 0xEABC,
	31718 - 11904: 0xBF7B,
	31719 - 11904: 0xEAB9,
	31720 - 11904: 0xEABE,
	31721 - 11904: 0xBF7A,
	31722 - 11904: 0xEAC1,
	31723 - 11904: 0xEAC4,
	31724 - 11904: 0x8CB2,
	31728 - 11904: 0xEDCB,
	31729 - 11904: 0xEDCC,
	31730 - 11904: 0xEDBC,
	31731 - 11904: 0xEDC3,
	31732 - 11904: 0xEDC1,
	31735 - 11904: 0xC14F,
	31736 - 11904: 0xEDC8,
	31737 - 11904: 0xEABF,
	31738 - 11904: 0x8E6E,
	31739 - 11904: 0xEDBF,
	31740 - 11904: 0x9F64,
	31741 - 11904: 0xEDC9,
	31742 - 11904: 0xC14E,
	31743 - 11904: 0xEDBE,
	31744 - 11904: 0xEDBD,
	31745 - 11904: 0xEDC7,
	31746 - 11904: 0xEDC4,
	31747 - 11904: 0xEDC6,
	31749 - 11904: 0xEDBA,
	31750 - 11904: 0xEDCA,
	31751 - 11904: 0xC14C,
	31753 - 11904: 0xEDC5,
	31754 - 11904: 0xEDCE,
	31755 - 11904: 0xEDC2,
	31756 - 11904: 0xC150,
	31757 - 11904: 0xC14D,
	31758 - 11904: 0xEDC0,
	31759 - 11904: 0xEDBB,
	31760 - 11904: 0xEDCD,
	31761 - 11904: 0xBF75,
	31762 - 11904: 0x9953,
	31765 - 11904: 0xFAB8,
	31769 - 11904: 0xF063,
	31771 - 11904: 0x9954,
	31772 - 11904: 0xF061,
	31773 - 11904: 0xF067,
	31774 - 11904: 0xC2B0,
	31775 - 11904: 0xF065,
	31776 - 11904: 0xF064,
	31777 - 11904: 0xC2B2,
	31778 - 11904: 0xF06A,
	31779 - 11904: 0xC2B1,
	31781 - 11904: 0xF06B,
	31782 - 11904: 0xF068,
	31783 - 11904: 0xC2AE,
	31784 - 11904: 0xF069,
	31785 - 11904: 0xF062,
	31786 - 11904: 0xC2AF,
	31787 - 11904: 0xC2AD,
	31788 - 11904: 0xF2AB,
	31789 - 11904: 0xF066,
	31792 - 11904: 0xF06C,
	31795 - 11904: 0xF2A8,
	31797 - 11904: 0x8E70,
	31799 - 11904: 0xC3B2,
	31800 - 11904: 0xC3B0,
	31801 - 11904: 0xF2AA,
	31803 - 11904: 0xF2AC,
	31804 - 11904: 0xF2A9,
	31805 - 11904: 0xC3B1,
	31806 - 11904: 0xC3AE,
	31807 - 11904: 0xC3AF,
	31808 - 11904: 0xC3B3,
	31810 - 11904: 0x9F61,
	31811 - 11904: 0xC478,
	31812 - 11904: 0x8E72,
	31813 - 11904: 0xF4AA,
	31815 - 11904: 0xF4A9,
	31816 - 11904: 0xF4A7,
	31817 - 11904: 0xF4A6,
	31818 - 11904: 0xF4A8,
	31820 - 11904: 0xC477,
	31821 - 11904: 0xC479,
	31824 - 11904: 0xC4F0,
	31825 - 11904: 0xA06B,
	31827 - 11904: 0xF5E5,
	31828 - 11904: 0xF5E4,
	31830 - 11904: 0x9F40,
	31831 - 11904: 0xF6FA,
	31833 - 11904: 0xF6FC,
	31834 - 11904: 0xF6FE,
	31835 - 11904: 0xF6FD,
	31836 - 11904: 0xF6FB,
	31837 - 11904: 0x94ED,
	31839 - 11904: 0xC5A3,
	31840 - 11904: 0xC5A2,
	31843 - 11904: 0xC5D3,
	31844 - 11904: 0xC5D2,
	31845 - 11904: 0xC5D4,
	31846 - 11904: 0xF7ED,
	31847 - 11904: 0xF7EC,
	31849 - 11904: 0xF8FB,
	31850 - 11904: 0xF8B8,
	31851 - 11904: 0xF8FC,
	31852 - 11904: 0xC658,
	31853 - 11904: 0x94EE,
	31854 - 11904: 0xC659,
	31855 - 11904: 0xF96D,
	31856 - 11904: 0x9FBD,
	31858 - 11904: 0xC67E,
	31859 - 11904: 0xA6CC,
	31860 - 11904: 0x8E7B,
	31861 - 11904: 0xCDA8,
	31864 - 11904: 0xD045,
	31865 - 11904: 0xD046,
	31866 - 11904: 0xD044,
	31867 - 11904: 0x9957,
	31868 - 11904: 0x94F7,
	31869 - 11904: 0xACF3,
	31870 - 11904: 0x9F5F,
	31871 - 11904: 0xD047,
	31872 - 11904: 0xD048,
	31873 - 11904: 0xD049,
	31875 - 11904: 0x8E73,
	31876 - 11904: 0xD349,
	31877 - 11904: 0xD34F,
	31878 - 11904: 0x9F62,
	31880 - 11904: 0xD34D,
	31881 - 11904: 0xAFBB,
	31882 - 11904: 0xD34B,
	31884 - 11904: 0xD34C,
	31885 - 11904: 0xD34E,
	31886 - 11904: 0x94F6,
	31889 - 11904: 0xD34A,
	31890 - 11904: 0xB2C9,
	31892 - 11904: 0xD6DE,
	31893 - 11904: 0xB2CB,
	31894 - 11904: 0xD6E0,
	31895 - 11904: 0xB2CA,
	31896 - 11904: 0xD6DF,
	31900 - 11904: 0x9958,
	31902 - 11904: 0xDAE8,
	31903 - 11904: 0xB5AF,
	31905 - 11904: 0xDAEA,
	31906 - 11904: 0xDAE7,
	31907 - 11904: 0xD6E1,
	31909 - 11904: 0xB5B0,
	31910 - 11904: 0x8E75,
	31911 - 11904: 0xF9DB,
	31912 - 11904: 0xDAE9,
	31916 - 11904: 0x9072,
	31918 - 11904: 0x94F8,
	31919 - 11904: 0xDF56,
	31921 - 11904: 0xB864,
	31922 - 11904: 0xDF54,
	31923 - 11904: 0xB865,
	31924 - 11904: 0xDF55,
	31925 - 11904: 0xB866,
	31928 - 11904: 0x995A,
	31929 - 11904: 0xBAE9,
	31930 - 11904: 0xE361,
	31931 - 11904: 0xE35E,
	31932 - 11904: 0xE360,
	31933 - 11904: 0xBAEA,
	31934 - 11904: 0xBAEB,
	31935 - 11904: 0xE35F,
	31938 - 11904: 0xA0B0,
	31939 - 11904: 0x8CB3,
	31941 - 11904: 0xE6DF,
	31943 - 11904: 0x8E79,
	31944 - 11904: 0xE6E0,
	31945 - 11904: 0x8E78,
	31946 - 11904: 0xBD6B,
	31947 - 11904: 0xE6E2,
	31948 - 11904: 0xE6E1,
	31949 - 11904: 0x94F3,
	31950 - 11904: 0xA261,
	31952 - 11904: 0xEACA,
	31953 - 11904: 0xEACB,
	31954 - 11904: 0xEAC7,
	31955 - 11904: 0x98AF,
	31956 - 11904: 0xEAC8,
	31957 - 11904: 0xBF7C,
	31958 - 11904: 0xBF7D,
	31959 - 11904: 0xEAC9,
	31961 - 11904: 0xC157,
	31962 - 11904: 0xA0B2,
	31964 - 11904: 0xC153,
	31965 - 11904: 0xC158,
	31966 - 11904: 0xC154,
	31967 - 11904: 0xC156,
	31968 - 11904: 0xC152,
	31970 - 11904: 0xC155,
	31974 - 11904: 0x8E7A,
	31975 - 11904: 0xC2B3,
	31976 - 11904: 0xEDCF,
	31978 - 11904: 0xF2AE,
	31980 - 11904: 0xF2AD,
	31981 - 11904: 0x995C,
	31982 - 11904: 0xF4AB,
	31983 - 11904: 0xC47A,
	31984 - 11904: 0xC47B,
	31985 - 11904: 0xF741,
	31986 - 11904: 0xF5E6,
	31987 - 11904: 0x8E7C,
	31988 - 11904: 0xF740,
	31989 - 11904: 0x8E7D,
	31990 - 11904: 0xF8FD,
	31991 - 11904: 0xF9A4,
	31992 - 11904: 0xA6CD,
	31993 - 11904: 0x8BD9,
	31995 - 11904: 0xA874,
	31996 - 11904: 0x89A2,
	31997 - 11904: 0xCDA9,
	31998 - 11904: 0xAAC8,
	32000 - 11904: 0xACF6,
	32001 - 11904: 0xD04C,
	32002 - 11904: 0xACF4,
	32003 - 11904: 0xD04A,
	32004 - 11904: 0xACF9,
	32005 - 11904: 0xACF5,
	32006 - 11904: 0xACFA,
	32007 - 11904: 0xACF8,
	32008 - 11904: 0xD04B,
	32009 - 11904: 0xACF7,
	32010 - 11904: 0xAFBF,
	32011 - 11904: 0xAFBE,
	32012 - 11904: 0xD35A,
	32013 - 11904: 0xAFC7,
	32014 - 11904: 0xD353,
	32015 - 11904: 0xD359,
	32016 - 11904: 0xAFC3,
	32017 - 11904: 0xD352,
	32018 - 11904: 0xD358,
	32019 - 11904: 0xD356,
	32020 - 11904: 0xAFC2,
	32021 - 11904: 0xAFC4,
	32022 - 11904: 0xD355,
	32023 - 11904: 0xAFBD,
	32024 - 11904: 0xD354,
	32025 - 11904: 0xAFC8,
	32026 - 11904: 0xAFC5,
	32027 - 11904: 0xAFC9,
	32028 - 11904: 0xAFC6,
	32029 - 11904: 0xD351,
	32030 - 11904: 0xD350,
	32031 - 11904: 0xD357,
	32032 - 11904: 0xAFC0,
	32033 - 11904: 0xAFBC,
	32034 - 11904: 0xAFC1,
	32037 - 11904: 0x9ED7,
	32040 - 11904: 0xD6F0,
	32041 - 11904: 0xD6E9,
	32043 - 11904: 0xB5B5,
	32044 - 11904: 0xD6E8,
	32046 - 11904: 0xB2CF,
	32047 - 11904: 0xB2D6,
	32048 - 11904: 0xB2D3,
	32049 - 11904: 0xB2D9,
	32050 - 11904: 0xB2D8,
	32051 - 11904: 0xB2D4,
	32053 - 11904: 0xD6E2,
	32054 - 11904: 0xD6E5,
	32056 - 11904: 0xD6E4,
	32057 - 11904: 0xB2D0,
	32058 - 11904: 0xD6E6,
	32059 - 11904: 0xD6EF,
	32060 - 11904: 0xB2D1,
	32061 - 11904: 0xD6E3,
	32062 - 11904: 0xD6EC,
	32063 - 11904: 0xD6ED,
	32064 - 11904: 0xB2D2,
	32065 - 11904: 0xD6EA,
	32066 - 11904: 0xB2D7,
	32067 - 11904: 0xB2CD,
	32068 - 11904: 0xB2D5,
	32069 - 11904: 0xD6E7,
	32070 - 11904: 0xB2CC,
	32071 - 11904: 0xD6EB,
	32074 - 11904: 0xD6EE,
	32077 - 11904: 0xA0B6,
	32078 - 11904: 0xDAFB,
	32079 - 11904: 0xDAF2,
	32080 - 11904: 0xB5B2,
	32081 - 11904: 0xDAF9,
	32082 - 11904: 0xDAF6,
	32083 - 11904: 0xDAEE,
	32084 - 11904: 0xDAF7,
	32085 - 11904: 0xB5B4,
	32086 - 11904: 0xDAEF,
	32088 - 11904: 0xDAEB,
	32090 - 11904: 0x9E42,
	32091 - 11904: 0xB86C,
	32092 - 11904: 0xDAF4,
	32093 - 11904: 0x8EA4,
	32094 - 11904: 0xB5B1,
	32095 - 11904: 0xDAFA,
	32097 - 11904: 0xB5B8,
	32098 - 11904: 0xB5BA,
	32099 - 11904: 0xDAED,
	32102 - 11904: 0xB5B9,
	32103 - 11904: 0xDAF0,
	32104 - 11904: 0xB5B3,
	32105 - 11904: 0xDAF8,
	32106 - 11904: 0xDAF1,
	32107 - 11904: 0xDAF5,
	32109 - 11904: 0xDAF3,
	32110 - 11904: 0xB5B6,
	32111 - 11904: 0xDAEC,
	32112 - 11904: 0xB5BB,
	32113 - 11904: 0xB2CE,
	32114 - 11904: 0xB5B7,
	32115 - 11904: 0xB5BC,
	32121 - 11904: 0xB868,
	32122 - 11904: 0xDF5D,
	32123 - 11904: 0xDF5F,
	32124 - 11904: 0xDF61,
	32125 - 11904: 0xDF65,
	32127 - 11904: 0xDF5B,
	32128 - 11904: 0xDF59,
	32129 - 11904: 0xB86A,
	32131 - 11904: 0xDF60,
	32132 - 11904: 0xDF64,
	32133 - 11904: 0xDF5C,
	32134 - 11904: 0xDF58,
	32136 - 11904: 0xDF57,
	32137 - 11904: 0x8EA7,
	32139 - 11904: 0x8C76,
	32140 - 11904: 0xDF62,
	32141 - 11904: 0xDF5A,
	32142 - 11904: 0xDF5E,
	32143 - 11904: 0xB86B,
	32145 - 11904: 0xB869,
	32146 - 11904: 0xDF66,
	32147 - 11904: 0xB867,
	32148 - 11904: 0xDF63,
	32149 - 11904: 0x8767,
	32150 - 11904: 0xE372,
	32151 - 11904: 0x9542,
	32156 - 11904: 0xBAEE,
	32157 - 11904: 0xE36A,
	32158 - 11904: 0xBD78,
	32159 - 11904: 0xE374,
	32160 - 11904: 0xBAF1,
	32161 - 11904: 0xE378,
	32162 - 11904: 0xBAF7,
	32163 - 11904: 0xE365,
	32164 - 11904: 0x987D,
	32166 - 11904: 0xE375,
	32167 - 11904: 0xE362,
	32168 - 11904: 0x9755,
	32169 - 11904: 0xE377,
	32170 - 11904: 0xE366,
	32171 - 11904: 0x8EA8,
	32172 - 11904: 0xBAFE,
	32173 - 11904: 0xBAFB,
	32174 - 11904: 0xE376,
	32175 - 11904: 0xE370,
	32176 - 11904: 0xBAED,
	32177 - 11904: 0xBAF5,
	32178 - 11904: 0xBAF4,
	32179 - 11904: 0x8EAA,
	32180 - 11904: 0xBAF3,
	32181 - 11904: 0xBAF9,
	32183 - 11904: 0xE363,
	32184 - 11904: 0xBAFA,
	32185 - 11904: 0xE371,
	32186 - 11904: 0xBAF6,
	32187 - 11904: 0xBAEC,
	32188 - 11904: 0xE373,
	32189 - 11904: 0xBAEF,
	32190 - 11904: 0xBAF0,
	32191 - 11904: 0xBAF8,
	32192 - 11904: 0xE368,
	32193 - 11904: 0xE367,
	32194 - 11904: 0xE364,
	32196 - 11904: 0xE36C,
	32197 - 11904: 0xE369,
	32198 - 11904: 0xE36D,
	32199 - 11904: 0xBAFD,
	32201 - 11904: 0xE379,
	32202 - 11904: 0xBAF2,
	32203 - 11904: 0xE36E,
	32204 - 11904: 0xE36F,
	32205 - 11904: 0x89A3,
	32206 - 11904: 0xE36B,
	32207 - 11904: 0x9960,
	32208 - 11904: 0x9962,
	32210 - 11904: 0xBAFC,
	32211 - 11904: 0x94FC,
	32212 - 11904: 0x9961,
	32215 - 11904: 0xE6E7,
	32216 - 11904: 0xBD70,
	32217 - 11904: 0xBD79,
	32218 - 11904: 0xBD75,
	32219 - 11904: 0xE6E4,
	32220 - 11904: 0x94FA,
	32221 - 11904: 0xBD72,
	32222 - 11904: 0xBD76,
	32223 - 11904: 0xE6F0,
	32224 - 11904: 0xBD6C,
	32225 - 11904: 0xE6E8,
	32227 - 11904: 0xBD74,
	32228 - 11904: 0x8EAE,
	32229 - 11904: 0x8EB2,
	32230 - 11904: 0xE6EB,
	32231 - 11904: 0xE6E6,
	32232 - 11904: 0xBD73,
	32233 - 11904: 0xBD77,
	32234 - 11904: 0xE6E5,
	32236 - 11904: 0xBD71,
	32238 - 11904: 0xE6EF,
	32239 - 11904: 0xBD6E,
	32240 - 11904: 0xE6EE,
	32241 - 11904: 0xE6ED,
	32242 - 11904: 0xBD7A,
	32243 - 11904: 0xE572,
	32244 - 11904: 0xBD6D,
	32245 - 11904: 0x8EB0,
	32246 - 11904: 0xE6EC,
	32247 - 11904: 0xE6E3,
	32249 - 11904: 0xBD7B,
	32250 - 11904: 0xE6EA,
	32251 - 11904: 0xBD6F,
	32253 - 11904: 0x9963,
	32254 - 11904: 0x97AA,
	32259 - 11904: 0xE6E9,
	32263 - 11904: 0x94FB,
	32264 - 11904: 0xBFA2,
	32265 - 11904: 0xBFA7,
	32266 - 11904: 0xBF7E,
	32267 - 11904: 0xEAD8,
	32268 - 11904: 0xEACF,
	32269 - 11904: 0xEADB,
	32270 - 11904: 0xEAD3,
	32271 - 11904: 0xEAD9,
	32272 - 11904: 0xBFA8,
	32273 - 11904: 0xBFA1,
	32274 - 11904: 0xEACC,
	32275 - 11904: 0xEAD2,
	32276 - 11904: 0xEADC,
	32277 - 11904: 0xEAD5,
	32278 - 11904: 0xEADA,
	32279 - 11904: 0xEACE,
	32282 - 11904: 0xEAD6,
	32283 - 11904: 0xBFA3,
	32284 - 11904: 0xEAD4,
	32285 - 11904: 0xBFA6,
	32286 - 11904: 0xBFA5,
	32287 - 11904: 0xEAD0,
	32288 - 11904: 0xEAD1,
	32289 - 11904: 0xEACD,
	32290 - 11904: 0xEAD7,
	32291 - 11904: 0xBFA4,
	32292 - 11904: 0xEADE,
	32293 - 11904: 0xEADD,
	32295 - 11904: 0x8EBB,
	32297 - 11904: 0xEDDA,
	32298 - 11904: 0xEDD6,
	32299 - 11904: 0xC15F,
	32301 - 11904: 0xEDD0,
	32302 - 11904: 0xC159,
	32303 - 11904: 0xC169,
	32304 - 11904: 0xEDDC,
	32305 - 11904: 0xC161,
	32306 - 11904: 0xC15D,
	32307 - 11904: 0xEDD3,
	32308 - 11904: 0xC164,
	32309 - 11904: 0xC167,
	32310 - 11904: 0xEDDE,
	32311 - 11904: 0xC15C,
	32312 - 11904: 0xEDD5,
	32313 - 11904: 0xC165,
	32314 - 11904: 0xEDE0,
	32315 - 11904: 0xEDDD,
	32316 - 11904: 0xEDD1,
	32317 - 11904: 0xC160,
	32318 - 11904: 0xC15A,
	32319 - 11904: 0xC168,
	32320 - 11904: 0xEDD8,
	32321 - 11904: 0xC163,
	32322 - 11904: 0xEDD2,
	32323 - 11904: 0xC15E,
	32324 - 11904: 0xEDDF,
	32325 - 11904: 0xC162,
	32326 - 11904: 0xC15B,
	32327 - 11904: 0xEDD9,
	32328 - 11904: 0xC166,
	32329 - 11904: 0xEDD7,
	32332 - 11904: 0xEDDB,
	32336 - 11904: 0xF06E,
	32337 - 11904: 0xF074,
	32338 - 11904: 0xC2B9,
	32339 - 11904: 0xF077,
	32340 - 11904: 0xC2B4,
	32341 - 11904: 0xC2B5,
	32342 - 11904: 0xF06F,
	32343 - 11904: 0xF076,
	32344 - 11904: 0xF071,
	32345 - 11904: 0xC2BA,
	32346 - 11904: 0xC2B7,
	32347 - 11904: 0x8CDC,
	32348 - 11904: 0xF06D,
	32350 - 11904: 0xC2B6,
	32351 - 11904: 0xF073,
	32352 - 11904: 0xF075,
	32353 - 11904: 0xC2B8,
	32354 - 11904: 0xF072,
	32355 - 11904: 0xF070,
	32357 - 11904: 0x9876,
	32359 - 11904: 0x8EA1,
	32360 - 11904: 0xF2B8,
	32361 - 11904: 0xC3B7,
	32362 - 11904: 0xC3B8,
	32363 - 11904: 0xC3B4,
	32364 - 11904: 0x8CB4,
	32365 - 11904: 0xC3B5,
	32366 - 11904: 0x8EB7,
	32367 - 11904: 0xF2B4,
	32368 - 11904: 0xF2B2,
	32370 - 11904: 0xF2B6,
	32371 - 11904: 0xC3BA,
	32372 - 11904: 0xF2B7,
	32373 - 11904: 0xF2B0,
	32374 - 11904: 0xF2AF,
	32375 - 11904: 0xF2B3,
	32376 - 11904: 0xF2B1,
	32377 - 11904: 0xC3B6,
	32378 - 11904: 0xF2B5,
	32379 - 11904: 0xF4AC,
	32380 - 11904: 0xC47E,
	32381 - 11904: 0xC47D,
	32382 - 11904: 0xF4AD,
	32383 - 11904: 0x9DA6,
	32384 - 11904: 0xF4AF,
	32385 - 11904: 0xF4AE,
	32386 - 11904: 0xC4A1,
	32390 - 11904: 0xF5EB,
	32391 - 11904: 0xF5E8,
	32392 - 11904: 0xF5E9,
	32394 - 11904: 0xF5E7,
	32395 - 11904: 0xF5EA,
	32396 - 11904: 0xC4F2,
	32397 - 11904: 0xF5EC,
	32398 - 11904: 0x9EB0,
	32399 - 11904: 0xC4F1,
	32401 - 11904: 0xF742,
	32402 - 11904: 0x8EB8,
	32403 - 11904: 0xC5D5,
	32404 - 11904: 0xC5D7,
	32405 - 11904: 0xF7EE,
	32406 - 11904: 0xC5D6,
	32407 - 11904: 0xF8B9,
	32408 - 11904: 0xF940,
	32409 - 11904: 0xF942,
	32410 - 11904: 0xF8FE,
	32411 - 11904: 0xF941,
	32412 - 11904: 0xC66C,
	32415 - 11904: 0x9D70,
	32420 - 11904: 0x896E,
	32428 - 11904: 0x896F,
	32442 - 11904: 0x8970,
	32455 - 11904: 0x8971,
	32463 - 11904: 0x8972,
	32479 - 11904: 0x8973,
	32518 - 11904: 0x8974,
	32566 - 11904: 0xA6CE,
	32567 - 11904: 0x8975,
	32568 - 11904: 0xACFB,
	32569 - 11904: 0xD26F,
	32570 - 11904: 0xAFCA,
	32573 - 11904: 0xB2DA,
	32574 - 11904: 0xDAFC,
	32575 - 11904: 0xDAFD,
	32576 - 11904: 0x8EBC,
	32577 - 11904: 0x8EBD,
	32579 - 11904: 0xEADF,
	32580 - 11904: 0xC16A,
	32581 - 11904: 0xEDE1,
	32583 - 11904: 0x8EBE,
	32584 - 11904: 0xC2BB,
	32585 - 11904: 0x9DD1,
	32586 - 11904: 0xF2BA,
	32587 - 11904: 0xF2B9,
	32588 - 11904: 0xC4A2,
	32589 - 11904: 0xF5ED,
	32590 - 11904: 0x94FD,
	32591 - 11904: 0xF743,
	32592 - 11904: 0xC5F8,
	32593 - 11904: 0xCA49,
	32594 - 11904: 0x8BD7,
	32595 - 11904: 0x8BDA,
	32596 - 11904: 0xAAC9,
	32597 - 11904: 0xA875,
	32600 - 11904: 0xD04D,
	32603 - 11904: 0xD360,
	32604 - 11904: 0xD35B,
	32605 - 11904: 0xD35F,
	32606 - 11904: 0xD35D,
	32607 - 11904: 0xAFCB,
	32608 - 11904: 0xD35E,
	32609 - 11904: 0xD35C,
	32611 - 11904: 0xD6F1,
	32613 - 11904: 0xDAFE,
	32614 - 11904: 0xDB40,
	32615 - 11904: 0xDF69,
	32616 - 11904: 0xDF6A,
	32617 - 11904: 0xB86E,
	32618 - 11904: 0xB86F,
	32619 - 11904: 0xDF68,
	32620 - 11904: 0xDF6B,
	32621 - 11904: 0xDF67,
	32622 - 11904: 0xB86D,
	32624 - 11904: 0xBB40,
	32625 - 11904: 0xA0E2,
	32626 - 11904: 0xB870,
	32627 - 11904: 0xE37A,
	32629 - 11904: 0xBD7C,
	32630 - 11904: 0xE6F1,
	32631 - 11904: 0xBD7D,
	32632 - 11904: 0x9FE9,
	32633 - 11904: 0xBFA9,
	32634 - 11904: 0xEAE2,
	32635 - 11904: 0xEAE0,
	32636 - 11904: 0xEAE1,
	32637 - 11904: 0xEDE4,
	32638 - 11904: 0xEDE3,
	32639 - 11904: 0xEDE2,
	32643 - 11904: 0xF2BB,
	32645 - 11904: 0xC3B9,
	32646 - 11904: 0xF2BC,
	32647 - 11904: 0xF744,
	32648 - 11904: 0xC5F9,
	32649 - 11904: 0xF8BA,
	32650 - 11904: 0xA6CF,
	32651 - 11904: 0xAACB,
	32652 - 11904: 0xAACA,
	32653 - 11904: 0xD04F,
	32654 - 11904: 0xACFC,
	32655 - 11904: 0xFDA8,
	32657 - 11904: 0xD04E,
	32658 - 11904: 0xD362,
	32659 - 11904: 0x8AE7,
	32660 - 11904: 0xAFCC,
	32661 - 11904: 0xD6F2,
	32662 - 11904: 0xD361,
	32663 - 11904: 0x8EC2,
	32666 - 11904: 0xB2DC,
	32667 - 11904: 0xD6F5,
	32668 - 11904: 0xD6F3,
	32669 - 11904: 0xD6F4,
	32670 - 11904: 0xB2DB,
	32672 - 11904: 0xDB42,
	32673 - 11904: 0xDB43,
	32674 - 11904: 0xDB41,
	32675 - 11904: 0x8EC4,
	32676 - 11904: 0xB873,
	32677 - 11904: 0xDF6D,
	32678 - 11904: 0xDF6C,
	32679 - 11904: 0xDF6E,
	32680 - 11904: 0xB872,
	32681 - 11904: 0xB871,
	32684 - 11904: 0xE6F2,
	32685 - 11904: 0xE6F4,
	32686 - 11904: 0x9964,
	32687 - 11904: 0xBD7E,
	32688 - 11904: 0xE6F3,
	32689 - 11904: 0xEAE3,
	32690 - 11904: 0xBFAA,
	32691 - 11904: 0xF079,
	32692 - 11904: 0x9965,
	32693 - 11904: 0xF078,
	32694 - 11904: 0xC3BB,
	32695 - 11904: 0xF2BD,
	32696 - 11904: 0xC3BD,
	32697 - 11904: 0xC3BC,
	32698 - 11904: 0xF4B0,
	32699 - 11904: 0xF5EE,
	32700 - 11904: 0xC4F3,
	32701 - 11904: 0xA6D0,
	32702 - 11904: 0xD050,
	32703 - 11904: 0xACFD,
	32704 - 11904: 0xD365,
	32705 - 11904: 0xAFCE,
	32706 - 11904: 0xD364,
	32707 - 11904: 0xD363,
	32709 - 11904: 0xAFCD,
	32711 - 11904: 0xD6FB,
	32713 - 11904: 0xD6FD,
	32714 - 11904: 0xD6F6,
	32715 - 11904: 0xD6F7,
	32716 - 11904: 0xB2DD,
	32717 - 11904: 0xD6F8,
	32718 - 11904: 0xB2DE,
	32719 - 11904: 0xD6FC,
	32720 - 11904: 0xD6F9,
	32721 - 11904: 0xD6FA,
	32722 - 11904: 0xB2DF,
	32724 - 11904: 0xB5BE,
	32725 - 11904: 0xB5BF,
	32727 - 11904: 0xDB44,
	32731 - 11904: 0xDF6F,
	32732 - 11904: 0xDF70,
	32733 - 11904: 0x954E,
	32734 - 11904: 0xE37E,
	32735 - 11904: 0xBB43,
	32736 - 11904: 0xBB41,
	32737 - 11904: 0xBB42,
	32738 - 11904: 0xE37B,
	32739 - 11904: 0xE37C,
	32741 - 11904: 0xE37D,
	32742 - 11904: 0xE6F9,
	32743 - 11904: 0x98B3,
	32744 - 11904: 0xE6FA,
	32745 - 11904: 0xBDA1,
	32746 - 11904: 0xE6F7,
	32747 - 11904: 0xE6F6,
	32748 - 11904: 0xE6F8,
	32749 - 11904: 0xE6F5,
	32750 - 11904: 0xBFAD,
	32751 - 11904: 0xEAE4,
	32752 - 11904: 0xBFAB,
	32753 - 11904: 0xBFAC,
	32754 - 11904: 0xEDE6,
	32755 - 11904: 0xC16B,
	32756 - 11904: 0xEDE5,
	32757 - 11904: 0xEFA8,
	32759 - 11904: 0xF07A,
	32760 - 11904: 0xF07B,
	32761 - 11904: 0xC2BC,
	32762 - 11904: 0x8ECB,
	32763 - 11904: 0xC2BD,
	32764 - 11904: 0xC16C,
	32765 - 11904: 0xF2BE,
	32766 - 11904: 0xF2BF,
	32767 - 11904: 0xF4B1,
	32768 - 11904: 0xC4A3,
	32769 - 11904: 0xA6D1,
	32770 - 11904: 0x8BDF,
	32771 - 11904: 0xA6D2,
	32772 - 11904: 0xACFE,
	32773 - 11904: 0xAACC,
	32774 - 11904: 0xAFCF,
	32775 - 11904: 0xD051,
	32776 - 11904: 0x8ECE,
	32779 - 11904: 0xB5C0,
	32780 - 11904: 0xA6D3,
	32781 - 11904: 0xAD41,
	32782 - 11904: 0xD052,
	32783 - 11904: 0xD053,
	32784 - 11904: 0xAD40,
	32785 - 11904: 0xAD42,
	32786 - 11904: 0xA6D4,
	32788 - 11904: 0xD054,
	32789 - 11904: 0xAFD1,
	32790 - 11904: 0xD366,
	32791 - 11904: 0xAFD3,
	32792 - 11904: 0xAFD0,
	32793 - 11904: 0xAFD2,
	32795 - 11904: 0xD741,
	32796 - 11904: 0xB2E0,
	32797 - 11904: 0x8ECF,
	32798 - 11904: 0xD740,
	32799 - 11904: 0xD6FE,
	32800 - 11904: 0x9968,
	32801 - 11904: 0xDF71,
	32804 - 11904: 0xE3A1,
	32805 - 11904: 0x9969,
	32806 - 11904: 0xBDA2,
	32808 - 11904: 0xBFAE,
	32809 - 11904: 0xEAE6,
	32810 - 11904: 0xEAE5,
	32812 - 11904: 0xEDE7,
	32814 - 11904: 0x996B,
	32815 - 11904: 0x8ED1,
	32816 - 11904: 0xF5EF,
	32817 - 11904: 0x996C,
	32819 - 11904: 0xA6D5,
	32820 - 11904: 0xCB73,
	32821 - 11904: 0xCDAA,
	32822 - 11904: 0xAD43,
	32823 - 11904: 0xD055,
	32825 - 11904: 0xD368,
	32827 - 11904: 0x8ED4,
	32828 - 11904: 0x8ED5,
	32829 - 11904: 0xAFD4,
	32830 - 11904: 0xD367,
	32831 - 11904: 0xAFD5,
	32835 - 11904: 0xD743,
	32838 - 11904: 0xB2E2,
	32839 - 11904: 0xD742,
	32840 - 11904: 0xD744,
	32842 - 11904: 0xB2E1,
	32847 - 11904: 0xDB46,
	32848 - 11904: 0xDB47,
	32849 - 11904: 0xDB45,
	32850 - 11904: 0xB5C1,
	32852 - 11904: 0x996D,
	32854 - 11904: 0xB874,
	32856 - 11904: 0xB875,
	32858 - 11904: 0xBB45,
	32859 - 11904: 0xA0BE,
	32860 - 11904: 0xE3A3,
	32861 - 11904: 0xE3A2,
	32862 - 11904: 0xBB44,
	32865 - 11904: 0x8ED6,
	32866 - 11904: 0xA0BC,
	32867 - 11904: 0xA0B5,
	32868 - 11904: 0xE6FB,
	32870 - 11904: 0xA0B4,
	32871 - 11904: 0xE6FC,
	32876 - 11904: 0xEAE7,
	32879 - 11904: 0xC170,
	32880 - 11904: 0xC16F,
	32881 - 11904: 0xC16D,
	32882 - 11904: 0xC16E,
	32883 - 11904: 0xC171,
	32885 - 11904: 0xF07C,
	32886 - 11904: 0xC2BF,
	32887 - 11904: 0xC2BE,
	32888 - 11904: 0xF2C0,
	32889 - 11904: 0xF4B2,
	32893 - 11904: 0xC5A5,
	32894 - 11904: 0xC5A4,
	32895 - 11904: 0xA6D6,
	32896 - 11904: 0x8BE0,
	32898 - 11904: 0xD1FB,
	32900 - 11904: 0xB877,
	32901 - 11904: 0xB5C2,
	32902 - 11904: 0xB876,
	32903 - 11904: 0xBB46,
	32905 - 11904: 0xA6D7,
	32906 - 11904: 0xC9A9,
	32907 - 11904: 0xA6D8,
	32908 - 11904: 0xA6D9,
	32911 - 11904: 0xCDAB,
	32912 - 11904: 0xCB76,
	32914 - 11904: 0xCB77,
	32915 - 11904: 0xA877,
	32917 - 11904: 0xCB74,
	32918 - 11904: 0xA876,
	32920 - 11904: 0xA879,
	32921 - 11904: 0xCB75,
	32922 - 11904: 0xA87B,
	32923 - 11904: 0xA87A,
	32924 - 11904: 0xCB78,
	32925 - 11904: 0xA878,
	32927 - 11904: 0x89B5,
	32929 - 11904: 0xAAD1,
	32930 - 11904: 0xAACF,
	32931 - 11904: 0xCDAD,
	32933 - 11904: 0xAACE,
	32935 - 11904: 0x8EDD,
	32937 - 11904: 0xAAD3,
	32938 - 11904: 0xAAD5,
	32939 - 11904: 0xAAD2,
	32941 - 11904: 0xCDB0,
	32942 - 11904: 0xCDAC,
	32943 - 11904: 0xAAD6,
	32945 - 11904: 0xAAD0,
	32946 - 11904: 0xA87C,
	32948 - 11904: 0xAAD4,
	32949 - 11904: 0xCDAF,
	32950 - 11904: 0x9E5D,
	32951 - 11904: 0x9971,
	32952 - 11904: 0xCDAE,
	32954 - 11904: 0xAACD,
	32956 - 11904: 0x89AE,
	32957 - 11904: 0x9DE8,
	32962 - 11904: 0xD05B,
	32963 - 11904: 0xAD47,
	32964 - 11904: 0xAD48,
	32965 - 11904: 0xD05D,
	32966 - 11904: 0x9565,
	32967 - 11904: 0xD057,
	32968 - 11904: 0xD05A,
	32969 - 11904: 0xD063,
	32970 - 11904: 0xD061,
	32972 - 11904: 0xAD49,
	32973 - 11904: 0xD067,
	32974 - 11904: 0xAD4C,
	32975 - 11904: 0xD064,
	32976 - 11904: 0xD05C,
	32977 - 11904: 0xD059,
	32980 - 11904: 0xDB49,
	32981 - 11904: 0xD062,
	32982 - 11904: 0xAD44,
	32983 - 11904: 0xD065,
	32984 - 11904: 0xD056,
	32985 - 11904: 0xD05F,
	32986 - 11904: 0xAD46,
	32987 - 11904: 0xAD4B,
	32988 - 11904: 0xD060,
	32989 - 11904: 0xAD4F,
	32990 - 11904: 0xAD4D,
	32992 - 11904: 0xD058,
	32993 - 11904: 0xAD4A,
	32995 - 11904: 0xD05E,
	32996 - 11904: 0xAD4E,
	32997 - 11904: 0xAD45,
	32998 - 11904: 0xD066,
	33001 - 11904: 0x9972,
	33004 - 11904: 0x8B5C,
	33005 - 11904: 0xAFDA,
	33007 - 11904: 0xAFE3,
	33008 - 11904: 0xAFD8,
	33009 - 11904: 0xAFD6,
	33010 - 11904: 0xD36A,
	33011 - 11904: 0xAFDE,
	33012 - 11904: 0xAFDB,
	33013 - 11904: 0xD36C,
	33014 - 11904: 0x89B1,
	33016 - 11904: 0xAFDD,
	33017 - 11904: 0xD36B,
	33018 - 11904: 0xD369,
	33019 - 11904: 0xD36E,
	33020 - 11904: 0xAFE2,
	33021 - 11904: 0xAFE0,
	33022 - 11904: 0xDB48,
	33024 - 11904: 0xD36F,
	33025 - 11904: 0xD36D,
	33026 - 11904: 0xAFD7,
	33027 - 11904: 0xA0C0,
	33029 - 11904: 0xAFD9,
	33030 - 11904: 0xAFDC,
	33031 - 11904: 0x8EDF,
	33032 - 11904: 0xAFDF,
	33033 - 11904: 0x9566,
	33034 - 11904: 0xAFE1,
	33036 - 11904: 0x9974,
	33038 - 11904: 0x9976,
	33042 - 11904: 0x9977,
	33044 - 11904: 0x9979,
	33045 - 11904: 0xD74E,
	33046 - 11904: 0xB2E4,
	33047 - 11904: 0x9DDA,
	33048 - 11904: 0xD745,
	33049 - 11904: 0xD747,
	33050 - 11904: 0x8EE0,
	33051 - 11904: 0xD748,
	33053 - 11904: 0xD750,
	33054 - 11904: 0xD74C,
	33055 - 11904: 0xD74A,
	33057 - 11904: 0xD74D,
	33058 - 11904: 0xD751,
	33059 - 11904: 0xB2E5,
	33060 - 11904: 0xB2E9,
	33061 - 11904: 0xD746,
	33063 - 11904: 0xD74F,
	33065 - 11904: 0xB2E7,
	33066 - 11904: 0x935C,
	33067 - 11904: 0xB2E6,
	33068 - 11904: 0xD74B,
	33069 - 11904: 0xD749,
	33071 - 11904: 0xB2E3,
	33072 - 11904: 0xB2E8,
	33074 - 11904: 0x9DE6,
	33076 - 11904: 0x8B5F,
	33079 - 11904: 0x9563,
	33081 - 11904: 0xB5C8,
	33082 - 11904: 0xDB51,
	33085 - 11904: 0xDB4F,
	33086 - 11904: 0xB5CA,
	33090 - 11904: 0x9567,
	33091 - 11904: 0xDB4A,
	33092 - 11904: 0xDFA1,
	33094 - 11904: 0xB5C9,
	33095 - 11904: 0xDB4E,
	33096 - 11904: 0x9DE3,
	33098 - 11904: 0xDB4B,
	33099 - 11904: 0xB5C5,
	33100 - 11904: 0xB5CB,
	33101 - 11904: 0xDB50,
	33102 - 11904: 0xB5C7,
	33103 - 11904: 0xDB4D,
	33104 - 11904: 0xBB47,
	33105 - 11904: 0xB5C6,
	33106 - 11904: 0xDB4C,
	33107 - 11904: 0xB5CC,
	33108 - 11904: 0xB5C4,
	33109 - 11904: 0xB5C3,
	33110 - 11904: 0x997C,
	33113 - 11904: 0x997D,
	33114 - 11904: 0x997E,
	33115 - 11904: 0xDF77,
	33116 - 11904: 0xDF75,
	33118 - 11904: 0xDF7B,
	33120 - 11904: 0xDF73,
	33121 - 11904: 0xDFA2,
	33122 - 11904: 0xDF78,
	33124 - 11904: 0xDF72,
	33125 - 11904: 0xB87B,
	33126 - 11904: 0xB8A3,
	33127 - 11904: 0xDF7D,
	33129 - 11904: 0xDF76,
	33131 - 11904: 0xB87E,
	33132 - 11904: 0x8CFB,
	33133 - 11904: 0x8B5B,
	33134 - 11904: 0xB87C,
	33135 - 11904: 0xDF7E,
	33136 - 11904: 0xB879,
	33137 - 11904: 0xB878,
	33138 - 11904: 0xDF79,
	33139 - 11904: 0xB87D,
	33140 - 11904: 0xB5CD,
	33142 - 11904: 0xDF7C,
	33143 - 11904: 0xDF74,
	33144 - 11904: 0xB87A,
	33145 - 11904: 0xB8A1,
	33146 - 11904: 0xB8A2,
	33148 - 11904: 0x99A3,
	33151 - 11904: 0xBB4C,
	33152 - 11904: 0xBB48,
	33154 - 11904: 0xBB4D,
	33155 - 11904: 0xE3A6,
	33156 - 11904: 0x99A4,
	33158 - 11904: 0xE3A5,
	33159 - 11904: 0xE3A7,
	33160 - 11904: 0xBB4A,
	33161 - 11904: 0xE3A4,
	33162 - 11904: 0xBB4B,
	33163 - 11904: 0xE3AA,
	33164 - 11904: 0xE3A9,
	33165 - 11904: 0xE3A8,
	33167 - 11904: 0xBB49,
	33171 - 11904: 0x99A6,
	33173 - 11904: 0xE741,
	33175 - 11904: 0xE744,
	33176 - 11904: 0xBDA8,
	33177 - 11904: 0xE743,
	33178 - 11904: 0xBDA7,
	33179 - 11904: 0xBDA3,
	33180 - 11904: 0xBDA4,
	33181 - 11904: 0xBDA5,
	33182 - 11904: 0xE740,
	33183 - 11904: 0xE6FE,
	33184 - 11904: 0xBDA6,
	33186 - 11904: 0xE742,
	33187 - 11904: 0xE6FD,
	33189 - 11904: 0x99A8,
	33190 - 11904: 0xEAE9,
	33191 - 11904: 0xEAF3,
	33192 - 11904: 0xBFB1,
	33193 - 11904: 0xBFB0,
	33194 - 11904: 0x8ABE,
	33195 - 11904: 0xEAED,
	33196 - 11904: 0xEAEF,
	33198 - 11904: 0xEAEA,
	33200 - 11904: 0xEAEE,
	33201 - 11904: 0xEAE8,
	33202 - 11904: 0xEAF1,
	33203 - 11904: 0xBFAF,
	33204 - 11904: 0xEAF0,
	33205 - 11904: 0xEAEC,
	33206 - 11904: 0x9E61,
	33207 - 11904: 0xEAF2,
	33209 - 11904: 0xEAEB,
	33210 - 11904: 0xC174,
	33211 - 11904: 0xEDE8,
	33212 - 11904: 0xEDEE,
	33213 - 11904: 0xC178,
	33214 - 11904: 0xC17A,
	33215 - 11904: 0xC177,
	33216 - 11904: 0xC176,
	33217 - 11904: 0x99AA,
	33218 - 11904: 0xC175,
	33219 - 11904: 0xC173,
	33220 - 11904: 0xEDE9,
	33221 - 11904: 0xEDEC,
	33222 - 11904: 0xC172,
	33223 - 11904: 0xEDED,
	33224 - 11904: 0xA0C8,
	33225 - 11904: 0xC179,
	33226 - 11904: 0xEDEB,
	33228 - 11904: 0xEDEA,
	33229 - 11904: 0xC2C0,
	33231 - 11904: 0xC2C1,
	33232 - 11904: 0xF0A1,
	33233 - 11904: 0xF07D,
	33234 - 11904: 0xF07E,
	33237 - 11904: 0xF2C2,
	33239 - 11904: 0xF2C1,
	33240 - 11904: 0xC3BE,
	33241 - 11904: 0xF4B4,
	33242 - 11904: 0xC4A4,
	33243 - 11904: 0xF4B3,
	33245 - 11904: 0xF5F0,
	33246 - 11904: 0xF745,
	33247 - 11904: 0xC5A6,
	33248 - 11904: 0xF943,
	33249 - 11904: 0xF944,
	33250 - 11904: 0xC5D8,
	33251 - 11904: 0xA6DA,
	33252 - 11904: 0x99AB,
	33253 - 11904: 0xAAD7,
	33254 - 11904: 0xDB52,
	33255 - 11904: 0xBB4E,
	33256 - 11904: 0xC17B,
	33257 - 11904: 0xEDEF,
	33258 - 11904: 0xA6DB,
	33260 - 11904: 0xAFE5,
	33261 - 11904: 0xAFE4,
	33262 - 11904: 0xDB53,
	33263 - 11904: 0xFEC4,
	33266 - 11904: 0xEAF4,
	33267 - 11904: 0xA6DC,
	33268 - 11904: 0xAD50,
	33270 - 11904: 0x98C2,
	33271 - 11904: 0xDB54,
	33272 - 11904: 0xDB55,
	33273 - 11904: 0xDB56,
	33274 - 11904: 0xBB4F,
	33275 - 11904: 0xBFB2,
	33276 - 11904: 0xA6DD,
	33278 - 11904: 0xAAD8,
	33279 - 11904: 0xD068,
	33280 - 11904: 0xAFE6,
	33281 - 11904: 0xD370,
	33282 - 11904: 0xB2EA,
	33284 - 11904: 0xDB57,
	33285 - 11904: 0xB8A4,
	33287 - 11904: 0xBB50,
	33288 - 11904: 0xBFB3,
	33289 - 11904: 0xC17C,
	33290 - 11904: 0xC2C2,
	33291 - 11904: 0xF4B5,
	33292 - 11904: 0xA6DE,
	33293 - 11904: 0xAAD9,
	33296 - 11904: 0xAFE7,
	33297 - 11904: 0xD752,
	33298 - 11904: 0xB5CE,
	33300 - 11904: 0xBB51,
	33301 - 11904: 0xE3AB,
	33302 - 11904: 0xE745,
	33304 - 11904: 0x8EE8,
	33306 - 11904: 0xA0BA,
	33307 - 11904: 0xA6DF,
	33308 - 11904: 0xB5CF,
	33309 - 11904: 0xDFA3,
	33310 - 11904: 0xBB52,
	33311 - 11904: 0xA6E0,
	33312 - 11904: 0xCDB1,
	33313 - 11904: 0xD069,
	33314 - 11904: 0xAD51,
	33317 - 11904: 0xD372,
	33318 - 11904: 0xFD77,
	33320 - 11904: 0xAFEA,
	33321 - 11904: 0x8EEE,
	33322 - 11904: 0xAFE8,
	33323 - 11904: 0xAFE9,
	33324 - 11904: 0xAFEB,
	33325 - 11904: 0x9EBF,
	33327 - 11904: 0xD371,
	33330 - 11904: 0xD757,
	33331 - 11904: 0xD754,
	33332 - 11904: 0xD756,
	33333 - 11904: 0xB2EB,
	33334 - 11904: 0xB2ED,
	33335 - 11904: 0xB2EC,
	33336 - 11904: 0xD753,
	33337 - 11904: 0xB2EE,
	33338 - 11904: 0xD755,
	33340 - 11904: 0xDB58,
	33341 - 11904: 0xDB59,
	33342 - 11904: 0x89C2,
	33343 - 11904: 0xDB5A,
	33344 - 11904: 0xDFA6,
	33346 - 11904: 0xDFA7,
	33348 - 11904: 0xDFA5,
	33349 - 11904: 0xDFA8,
	33351 - 11904: 0xB8A5,
	33353 - 11904: 0xDFA4,
	33355 - 11904: 0xBB53,
	33358 - 11904: 0xE74A,
	33359 - 11904: 0xE746,
	33360 - 11904: 0xE749,
	33361 - 11904: 0xE74B,
	33362 - 11904: 0xE748,
	33363 - 11904: 0xE747,
	33364 - 11904: 0x99AC,
	33365 - 11904: 0xEAF5,
	33366 - 11904: 0xEAF6,
	33367 - 11904: 0xEAF7,
	33368 - 11904: 0xBFB4,
	33369 - 11904: 0xBFB5,
	33370 - 11904: 0xEDF1,
	33371 - 11904: 0xEDF0,
	33372 - 11904: 0xEDF2,
	33374 - 11904: 0xF0A3,
	33375 - 11904: 0xF0A2,
	33377 - 11904: 0xF2C4,
	33378 - 11904: 0x956B,
	33379 - 11904: 0xF2C5,
	33380 - 11904: 0xF2C3,
	33381 - 11904: 0x956C,
	33382 - 11904: 0xC4A5,
	33384 - 11904: 0xF4B6,
	33385 - 11904: 0xF4B7,
	33387 - 11904: 0xF746,
	33388 - 11904: 0xF7EF,
	33389 - 11904: 0xF8BB,
	33390 - 11904: 0xA6E1,
	33391 - 11904: 0xA87D,
	33393 - 11904: 0xC17D,
	33394 - 11904: 0xA6E2,
	33396 - 11904: 0xD758,
	33397 - 11904: 0xDB5B,
	33398 - 11904: 0x99AF,
	33399 - 11904: 0xC641,
	33400 - 11904: 0xCA4A,
	33401 - 11904: 0x994A,
	33402 - 11904: 0x8976,
	33403 - 11904: 0x8F48,
	33404 - 11904: 0xCA4B,
	33405 - 11904: 0xCA4D,
	33406 - 11904: 0xA6E3,
	33407 - 11904: 0xCA4E,
	33408 - 11904: 0xCA4C,
	33411 - 11904: 0xCBA2,
	33412 - 11904: 0xCBA3,
	33413 - 11904: 0xCB7B,
	33415 - 11904: 0xFBEE,
	33418 - 11904: 0xCBA1,
	33419 - 11904: 0xA8A1,
	33421 - 11904: 0xA8A2,
	33422 - 11904: 0xCB7C,
	33423 - 11904: 0xCB7A,
	33424 - 11904: 0xCB79,
	33425 - 11904: 0xCB7D,
	33426 - 11904: 0xA87E,
	33427 - 11904: 0xCB7E,
	33428 - 11904: 0xD06A,
	33432 - 11904: 0xCDB6,
	33433 - 11904: 0xAADC,
	33434 - 11904: 0xCDB5,
	33435 - 11904: 0xCDB7,
	33437 - 11904: 0xAADB,
	33438 - 11904: 0xCDBC,
	33439 - 11904: 0xAADF,
	33440 - 11904: 0xCDB2,
	33441 - 11904: 0xCDC0,
	33442 - 11904: 0xCDC6,
	33443 - 11904: 0xAAE6,
	33444 - 11904: 0xCDC3,
	33445 - 11904: 0xAAE3,
	33446 - 11904: 0x99AE,
	33447 - 11904: 0xCDB9,
	33448 - 11904: 0xCDBF,
	33449 - 11904: 0xCDC1,
	33450 - 11904: 0x8EFB,
	33451 - 11904: 0xCDB4,
	33452 - 11904: 0xAAE2,
	33453 - 11904: 0xAADD,
	33454 - 11904: 0xCDBA,
	33455 - 11904: 0xAAE4,
	33456 - 11904: 0xAAE7,
	33457 - 11904: 0xAAE1,
	33459 - 11904: 0xAADA,
	33460 - 11904: 0xCDBE,
	33461 - 11904: 0xCDB8,
	33462 - 11904: 0xCDC5,
	33463 - 11904: 0xAAE9,
	33464 - 11904: 0xAAE5,
	33465 - 11904: 0xAAE0,
	33466 - 11904: 0xCDBD,
	33467 - 11904: 0xAFEC,
	33468 - 11904: 0xCDBB,
	33469 - 11904: 0xAADE,
	33470 - 11904: 0xAAE8,
	33471 - 11904: 0x8CD0,
	33472 - 11904: 0xCDB3,
	33474 - 11904: 0xCDC2,
	33475 - 11904: 0xCDC4,
	33476 - 11904: 0x8B52,
	33482 - 11904: 0x99B0,
	33487 - 11904: 0x8977,
	33488 - 11904: 0x8F41,
	33489 - 11904: 0xAD62,
	33490 - 11904: 0xAD5C,
	33491 - 11904: 0xAD64,
	33492 - 11904: 0xAD61,
	33493 - 11904: 0xD071,
	33494 - 11904: 0xD074,
	33495 - 11904: 0xAD5D,
	33496 - 11904: 0x99B1,
	33497 - 11904: 0xD06B,
	33499 - 11904: 0xAD56,
	33500 - 11904: 0xAD60,
	33502 - 11904: 0xAD63,
	33503 - 11904: 0xAD65,
	33504 - 11904: 0xD0A2,
	33505 - 11904: 0xD077,
	33506 - 11904: 0x8F49,
	33507 - 11904: 0xAD55,
	33508 - 11904: 0xD0A1,
	33509 - 11904: 0xAD59,
	33510 - 11904: 0xAD57,
	33511 - 11904: 0xAD52,
	33512 - 11904: 0xD06F,
	33514 - 11904: 0xD07E,
	33515 - 11904: 0xD073,
	33516 - 11904: 0xD076,
	33517 - 11904: 0xD0A5,
	33518 - 11904: 0xFA4D,
	33519 - 11904: 0xAD66,
	33520 - 11904: 0xD07D,
	33521 - 11904: 0xAD5E,
	33522 - 11904: 0xD078,
	33523 - 11904: 0xD0A4,
	33524 - 11904: 0xD075,
	33525 - 11904: 0xD079,
	33526 - 11904: 0xD07C,
	33527 - 11904: 0x9DE4,
	33528 - 11904: 0x8CB5,
	33529 - 11904: 0xD06D,
	33530 - 11904: 0xD0A3,
	33531 - 11904: 0xD07B,
	33532 - 11904: 0xFBE9,
	33533 - 11904: 0x9B54,
	33534 - 11904: 0xD06C,
	33535 - 11904: 0x99B2,
	33536 - 11904: 0xD070,
	33537 - 11904: 0xAD5F,
	33538 - 11904: 0xAD5A,
	33539 - 11904: 0xAD53,
	33540 - 11904: 0xAD58,
	33541 - 11904: 0xAD54,
	33542 - 11904: 0xAD67,
	33543 - 11904: 0xD06E,
	33544 - 11904: 0xD3A5,
	33545 - 11904: 0xAD5B,
	33547 - 11904: 0x9E68,
	33548 - 11904: 0xD07A,
	33549 - 11904: 0xCE41,
	33558 - 11904: 0xD3A8,
	33559 - 11904: 0xAFFA,
	33560 - 11904: 0x8F4A,
	33561 - 11904: 0xD376,
	33562 - 11904: 0x8F42,
	33563 - 11904: 0xD3A3,
	33564 - 11904: 0xD37D,
	33565 - 11904: 0x8F51,
	33566 - 11904: 0xD3B2,
	33568 - 11904: 0xD3AA,
	33570 - 11904: 0xD37E,
	33572 - 11904: 0xD3A9,
	33573 - 11904: 0xD378,
	33574 - 11904: 0xD37C,
	33575 - 11904: 0xD3B5,
	33576 - 11904: 0xAFFD,
	33577 - 11904: 0xD3AD,
	33578 - 11904: 0xD3A4,
	33579 - 11904: 0xAFED,
	33580 - 11904: 0xD3B3,
	33581 - 11904: 0xD374,
	33583 - 11904: 0xD3AC,
	33585 - 11904: 0xAFFC,
	33586 - 11904: 0xAFF7,
	33587 - 11904: 0xD373,
	33588 - 11904: 0xAFF5,
	33589 - 11904: 0xAFF4,
	33590 - 11904: 0xAFF9,
	33591 - 11904: 0xD3AB,
	33592 - 11904: 0xAFF1,
	33593 - 11904: 0xAFF8,
	33594 - 11904: 0xD072,
	33595 - 11904: 0xDB5C,
	33596 - 11904: 0xD3A6,
	33597 - 11904: 0x9846,
	33599 - 11904: 0xD37A,
	33600 - 11904: 0xAFFB,
	33601 - 11904: 0xD37B,
	33602 - 11904: 0xD3A1,
	33603 - 11904: 0xAFFE,
	33604 - 11904: 0xD375,
	33605 - 11904: 0xD3AF,
	33607 - 11904: 0xD3AE,
	33608 - 11904: 0xD3B6,
	33609 - 11904: 0xAFF3,
	33610 - 11904: 0xAFF0,
	33611 - 11904: 0xD3B4,
	33612 - 11904: 0xD3B0,
	33613 - 11904: 0xD3A7,
	33614 - 11904: 0xD3A2,
	33615 - 11904: 0xAFF6,
	33616 - 11904: 0xAFF2,
	33617 - 11904: 0xD377,
	33618 - 11904: 0xAFEE,
	33619 - 11904: 0xD3B1,
	33620 - 11904: 0xAFEF,
	33622 - 11904: 0xD379,
	33623 - 11904: 0x99B4,
	33634 - 11904: 0x8EF5,
	33635 - 11904: 0xFD55,
	33638 - 11904: 0x9CCD,
	33647 - 11904: 0x8978,
	33651 - 11904: 0xD75E,
	33652 - 11904: 0xD760,
	33653 - 11904: 0xD765,
	33654 - 11904: 0xD779,
	33655 - 11904: 0xB2FC,
	33656 - 11904: 0xB2F2,
	33658 - 11904: 0xD75D,
	33659 - 11904: 0xB2FD,
	33660 - 11904: 0xB2FE,
	33661 - 11904: 0xD768,
	33662 - 11904: 0xD76F,
	33663 - 11904: 0xD775,
	33665 - 11904: 0xD762,
	33667 - 11904: 0xD769,
	33669 - 11904: 0x8F53,
	33670 - 11904: 0xB340,
	33671 - 11904: 0xD777,
	33672 - 11904: 0xD772,
	33673 - 11904: 0xB2FA,
	33674 - 11904: 0xB2F8,
	33675 - 11904: 0xD76E,
	33676 - 11904: 0xD76A,
	33677 - 11904: 0xD75C,
	33678 - 11904: 0xB2EF,
	33679 - 11904: 0xD761,
	33680 - 11904: 0xD759,
	33681 - 11904: 0x8F6F,
	33682 - 11904: 0xB2F7,
	33683 - 11904: 0xB2F9,
	33684 - 11904: 0xD766,
	33685 - 11904: 0xD763,
	33686 - 11904: 0xB2F4,
	33687 - 11904: 0xD773,
	33688 - 11904: 0xB2F1,
	33689 - 11904: 0xD764,
	33690 - 11904: 0xD77A,
	33691 - 11904: 0xD76C,
	33692 - 11904: 0x8E63,
	33693 - 11904: 0xD76B,
	33694 - 11904: 0xB2F0,
	33696 - 11904: 0xB2FB,
	33698 - 11904: 0xB2F3,
	33699 - 11904: 0xD75A,
	33700 - 11904: 0xD75F,
	33701 - 11904: 0xD770,
	33702 - 11904: 0xD776,
	33703 - 11904: 0xB341,
	33704 - 11904: 0xD75B,
	33705 - 11904: 0xD767,
	33706 - 11904: 0xD76D,
	33707 - 11904: 0xB2F6,
	33708 - 11904: 0x8F56,
	33710 - 11904: 0xD778,
	33711 - 11904: 0xD771,
	33712 - 11904: 0xD774,
	33721 - 11904: 0xFE76,
	33725 - 11904: 0xB2F5,
	33726 - 11904: 0x9FC6,
	33727 - 11904: 0xDB6C,
	33728 - 11904: 0xDB60,
	33729 - 11904: 0xB5D7,
	33730 - 11904: 0xDB7D,
	33731 - 11904: 0xDBA7,
	33732 - 11904: 0xDBAA,
	33733 - 11904: 0xB5D5,
	33734 - 11904: 0xDB68,
	33735 - 11904: 0xDBA3,
	33736 - 11904: 0xDB69,
	33737 - 11904: 0xDB77,
	33738 - 11904: 0xB5E2,
	33739 - 11904: 0xDB73,
	33740 - 11904: 0xB5DF,
	33741 - 11904: 0xFAAC,
	33742 - 11904: 0xDB74,
	33743 - 11904: 0xDB5D,
	33745 - 11904: 0xDBA4,
	33747 - 11904: 0x8F58,
	33748 - 11904: 0xB5E8,
	33749 - 11904: 0xDBA1,
	33750 - 11904: 0xDB75,
	33751 - 11904: 0xDBAC,
	33752 - 11904: 0xDB70,
	33753 - 11904: 0xDFC8,
	33755 - 11904: 0xDBAF,
	33756 - 11904: 0xB5E6,
	33757 - 11904: 0xDB6E,
	33758 - 11904: 0xDB7A,
	33759 - 11904: 0xB5E9,
	33760 - 11904: 0xB5D4,
	33761 - 11904: 0xDB72,
	33762 - 11904: 0xDBAD,
	33763 - 11904: 0xDB6B,
	33764 - 11904: 0xDB64,
	33765 - 11904: 0xDB6F,
	33767 - 11904: 0xDB63,
	33768 - 11904: 0xDB61,
	33769 - 11904: 0xB5D0,
	33770 - 11904: 0xDBA5,
	33771 - 11904: 0xDB6A,
	33772 - 11904: 0xDBA8,
	33773 - 11904: 0x9848,
	33774 - 11904: 0xDBA9,
	33775 - 11904: 0xB5D8,
	33776 - 11904: 0xB5DD,
	33777 - 11904: 0xB5D9,
	33778 - 11904: 0xB5E1,
	33779 - 11904: 0xDB7E,
	33780 - 11904: 0xB5DA,
	33781 - 11904: 0xDB76,
	33782 - 11904: 0xDB66,
	33784 - 11904: 0xB5D2,
	33785 - 11904: 0xDB5E,
	33786 - 11904: 0xDBA2,
	33787 - 11904: 0xDBAB,
	33788 - 11904: 0xDB65,
	33789 - 11904: 0xB5E0,
	33790 - 11904: 0xDBB0,
	33791 - 11904: 0xDB71,
	33793 - 11904: 0xDB6D,
	33795 - 11904: 0xB5D1,
	33796 - 11904: 0xB5E5,
	33797 - 11904: 0x99B7,
	33798 - 11904: 0xDB7C,
	33799 - 11904: 0xB5E7,
	33801 - 11904: 0xDB78,
	33802 - 11904: 0xB5DC,
	33803 - 11904: 0xB5D6,
	33804 - 11904: 0xB5DE,
	33805 - 11904: 0xB5D3,
	33806 - 11904: 0xB5E4,
	33807 - 11904: 0xDB79,
	33808 - 11904: 0xDB67,
	33809 - 11904: 0xDB7B,
	33810 - 11904: 0xDB62,
	33811 - 11904: 0xDBA6,
	33812 - 11904: 0x9665,
	33814 - 11904: 0xFA6C,
	33816 - 11904: 0x9DE7,
	33819 - 11904: 0xDBAE,
	33820 - 11904: 0x9E62,
	33824 - 11904: 0x96CC,
	33825 - 11904: 0x8E67,
	33827 - 11904: 0xDB5F,
	33828 - 11904: 0xFC75,
	33830 - 11904: 0x987E,
	33833 - 11904: 0xDFC7,
	33835 - 11904: 0xDFDD,
	33836 - 11904: 0xB855,
	33837 - 11904: 0xDFCC,
	33838 - 11904: 0xFDB9,
	33839 - 11904: 0xDFCA,
	33840 - 11904: 0xDFB5,
	33841 - 11904: 0xB8A9,
	33842 - 11904: 0xDFC5,
	33843 - 11904: 0xDFD9,
	33844 - 11904: 0xDFC1,
	33845 - 11904: 0xB8B1,
	33846 - 11904: 0xDFD8,
	33847 - 11904: 0xDFBF,
	33848 - 11904: 0xB5E3,
	33849 - 11904: 0xDFCF,
	33850 - 11904: 0xDFC0,
	33851 - 11904: 0xDFD6,
	33852 - 11904: 0xB8B0,
	33853 - 11904: 0xB8A8,
	33854 - 11904: 0x97FC,
	33855 - 11904: 0xDFAA,
	33856 - 11904: 0xDFB2,
	33858 - 11904: 0xDFCB,
	33859 - 11904: 0xDFC3,
	33860 - 11904: 0xDFDC,
	33861 - 11904: 0xDFC6,
	33862 - 11904: 0xB8B6,
	33863 - 11904: 0xDFD7,
	33864 - 11904: 0x98F9,
	33865 - 11904: 0xB8AD,
	33866 - 11904: 0x8F66,
	33867 - 11904: 0xDFC9,
	33868 - 11904: 0xDFD1,
	33869 - 11904: 0xDFB6,
	33870 - 11904: 0xDFD0,
	33872 - 11904: 0xDFE1,
	33873 - 11904: 0xDFB1,
	33874 - 11904: 0xDFD2,
	33875 - 11904: 0x956E,
	33876 - 11904: 0xDFDF,
	33877 - 11904: 0x9245,
	33878 - 11904: 0xDFAB,
	33879 - 11904: 0xB5DB,
	33880 - 11904: 0x8F60,
	33881 - 11904: 0xDFB9,
	33882 - 11904: 0xDFB8,
	33883 - 11904: 0xB8AF,
	33884 - 11904: 0x9ED1,
	33885 - 11904: 0xDFBC,
	33886 - 11904: 0xDFBE,
	33887 - 11904: 0xDFCD,
	33888 - 11904: 0xDFDE,
	33889 - 11904: 0xB8B2,
	33890 - 11904: 0xFECD,
	33891 - 11904: 0xB8B3,
	33892 - 11904: 0x99B9,
	33893 - 11904: 0xDFB0,
	33894 - 11904: 0xB8AB,
	33895 - 11904: 0xDFB4,
	33896 - 11904: 0xDFDA,
	33897 - 11904: 0xB8B4,
	33899 - 11904: 0xB8AC,
	33900 - 11904: 0xB8AE,
	33901 - 11904: 0xB8B5,
	33902 - 11904: 0xDFE0,
	33903 - 11904: 0xDFD3,
	33904 - 11904: 0xDFCE,
	33905 - 11904: 0x8F62,
	33906 - 11904: 0x974C,
	33907 - 11904: 0xDFBB,
	33908 - 11904: 0xDFBA,
	33909 - 11904: 0xB8AA,
	33910 - 11904: 0xDFAC,
	33911 - 11904: 0xB8A7,
	33912 - 11904: 0xDFC4,
	33913 - 11904: 0xDFAD,
	33914 - 11904: 0xDFC2,
	33917 - 11904: 0xDFB7,
	33918 - 11904: 0xDFDB,
	33919 - 11904: 0x91C7,
	33920 - 11904: 0x955F,
	33922 - 11904: 0xB8A6,
	33924 - 11904: 0x87AB,
	33926 - 11904: 0xDFB3,
	33928 - 11904: 0x99BB,
	33933 - 11904: 0xDFAF,
	33934 - 11904: 0xDFD5,
	33935 - 11904: 0xDFAE,
	33936 - 11904: 0xBB60,
	33937 - 11904: 0xE3D3,
	33938 - 11904: 0x8E6D,
	33939 - 11904: 0x8F71,
	33940 - 11904: 0xE3C2,
	33942 - 11904: 0x94CB,
	33943 - 11904: 0xE3AC,
	33944 - 11904: 0xE3CA,
	33945 - 11904: 0xBB58,
	33946 - 11904: 0xE3BB,
	33947 - 11904: 0xE3C5,
	33948 - 11904: 0xBB5B,
	33949 - 11904: 0xE3BE,
	33950 - 11904: 0xBB59,
	33951 - 11904: 0xE3AF,
	33952 - 11904: 0xE3CD,
	33953 - 11904: 0xE3AE,
	33954 - 11904: 0xE3C1,
	33955 - 11904: 0x95B1,
	33956 - 11904: 0xE3AD,
	33959 - 11904: 0xE3BF,
	33960 - 11904: 0xE3C8,
	33961 - 11904: 0xE3C6,
	33962 - 11904: 0xE3BA,
	33963 - 11904: 0xE3B5,
	33964 - 11904: 0xE3B3,
	33965 - 11904: 0x9AF2,
	33966 - 11904: 0xE3B4,
	33967 - 11904: 0xE3C7,
	33968 - 11904: 0xE3D2,
	33969 - 11904: 0xE3BC,
	33970 - 11904: 0xBB5A,
	33972 - 11904: 0xE3B7,
	33974 - 11904: 0xE3CB,
	33976 - 11904: 0xBB5D,
	33977 - 11904: 0xE3B6,
	33978 - 11904: 0xE3B0,
	33979 - 11904: 0xE3C0,
	33980 - 11904: 0xBB61,
	33981 - 11904: 0x96C3,
	33982 - 11904: 0x99BD,
	33983 - 11904: 0xBB55,
	33984 - 11904: 0xBB5E,
	33985 - 11904: 0xE3B8,
	33986 - 11904: 0xE3B2,
	33988 - 11904: 0xBB57,
	33989 - 11904: 0xDFD4,
	33990 - 11904: 0xBB56,
	33991 - 11904: 0xE3C3,
	33993 - 11904: 0xBB54,
	33994 - 11904: 0xBB63,
	33995 - 11904: 0xBB5C,
	33996 - 11904: 0xE3C4,
	33997 - 11904: 0xE3B9,
	33998 - 11904: 0xE3B1,
	33999 - 11904: 0xE3CC,
	34000 - 11904: 0xE3BD,
	34001 - 11904: 0xBB62,
	34002 - 11904: 0xE3D0,
	34003 - 11904: 0xBB5F,
	34004 - 11904: 0xE3CF,
	34006 - 11904: 0xE3C9,
	34007 - 11904: 0xE3CE,
	34010 - 11904: 0xA0CF,
	34011 - 11904: 0xE3D1,
	34014 - 11904: 0x8F6D,
	34017 - 11904: 0x99BE,
	34018 - 11904: 0x8EF4,
	34020 - 11904: 0x8F72,
	34021 - 11904: 0x95E4,
	34023 - 11904: 0xE773,
	34024 - 11904: 0xE774,
	34025 - 11904: 0xE767,
	34026 - 11904: 0xE766,
	34027 - 11904: 0xE762,
	34028 - 11904: 0xBDB4,
	34030 - 11904: 0xBDAC,
	34031 - 11904: 0xE776,
	34032 - 11904: 0xE775,
	34033 - 11904: 0xDFA9,
	34034 - 11904: 0xE75F,
	34035 - 11904: 0xE763,
	34036 - 11904: 0xE75D,
	34038 - 11904: 0xE770,
	34039 - 11904: 0xE761,
	34040 - 11904: 0x99BF,
	34041 - 11904: 0xE777,
	34042 - 11904: 0xE75A,
	34043 - 11904: 0xE758,
	34044 - 11904: 0xE764,
	34045 - 11904: 0xE76E,
	34046 - 11904: 0xE769,
	34047 - 11904: 0xBDB6,
	34048 - 11904: 0xE74F,
	34050 - 11904: 0xE76D,
	34051 - 11904: 0x9244,
	34052 - 11904: 0x87D7,
	34053 - 11904: 0xFBA5,
	34054 - 11904: 0xBDB7,
	34055 - 11904: 0xDFBD,
	34056 - 11904: 0xE75B,
	34057 - 11904: 0xE752,
	34058 - 11904: 0xE755,
	34059 - 11904: 0xE77B,
	34060 - 11904: 0xE75C,
	34061 - 11904: 0xE753,
	34062 - 11904: 0xE751,
	34063 - 11904: 0xE74E,
	34064 - 11904: 0x99C0,
	34065 - 11904: 0xBDB0,
	34066 - 11904: 0xE765,
	34067 - 11904: 0xBDAF,
	34068 - 11904: 0xBDB3,
	34069 - 11904: 0xE760,
	34070 - 11904: 0xE768,
	34071 - 11904: 0xBDA9,
	34072 - 11904: 0xE778,
	34073 - 11904: 0xE77C,
	34074 - 11904: 0xBDAB,
	34076 - 11904: 0xE757,
	34077 - 11904: 0xE76B,
	34078 - 11904: 0xE76F,
	34079 - 11904: 0xE754,
	34080 - 11904: 0xE779,
	34081 - 11904: 0xBDB2,
	34083 - 11904: 0xBDB1,
	34084 - 11904: 0xE74C,
	34085 - 11904: 0xBDB5,
	34086 - 11904: 0xE772,
	34087 - 11904: 0xE756,
	34088 - 11904: 0xE76A,
	34089 - 11904: 0xE750,
	34090 - 11904: 0xE75E,
	34091 - 11904: 0xE759,
	34092 - 11904: 0xBDAD,
	34093 - 11904: 0xBDAE,
	34094 - 11904: 0xE76C,
	34095 - 11904: 0xE77D,
	34096 - 11904: 0xE77A,
	34097 - 11904: 0xE771,
	34099 - 11904: 0xFDB4,
	34100 - 11904: 0x8F77,
	34104 - 11904: 0x99C1,
	34107 - 11904: 0xE74D,
	34109 - 11904: 0xBDAA,
	34110 - 11904: 0xEB49,
	34112 - 11904: 0xEB40,
	34113 - 11904: 0xEB43,
	34114 - 11904: 0xFAB9,
	34115 - 11904: 0xBFBB,
	34116 - 11904: 0xEB45,
	34117 - 11904: 0xEAF9,
	34118 - 11904: 0xEB41,
	34119 - 11904: 0xEB47,
	34120 - 11904: 0xBFB8,
	34121 - 11904: 0xBFBC,
	34122 - 11904: 0xBFB6,
	34123 - 11904: 0x8F40,
	34124 - 11904: 0xFA44,
	34125 - 11904: 0xEAFB,
	34126 - 11904: 0xEB4C,
	34129 - 11904: 0xEB46,
	34130 - 11904: 0x99C2,
	34131 - 11904: 0xEAFC,
	34132 - 11904: 0xEB55,
	34133 - 11904: 0xEB4F,
	34134 - 11904: 0xEAF8,
	34135 - 11904: 0xEE46,
	34136 - 11904: 0xEAFE,
	34137 - 11904: 0xBFB7,
	34138 - 11904: 0x8F5C,
	34139 - 11904: 0xEB4A,
	34141 - 11904: 0xEB54,
	34142 - 11904: 0xBFBF,
	34143 - 11904: 0x8CBD,
	34144 - 11904: 0xEB51,
	34145 - 11904: 0xEAFD,
	34146 - 11904: 0xEB44,
	34147 - 11904: 0xEB48,
	34148 - 11904: 0xEB42,
	34149 - 11904: 0xEB56,
	34150 - 11904: 0xEB53,
	34151 - 11904: 0xEB50,
	34152 - 11904: 0xBFB9,
	34153 - 11904: 0xBFBA,
	34154 - 11904: 0xBFBE,
	34155 - 11904: 0xEAFA,
	34156 - 11904: 0xEB57,
	34157 - 11904: 0xBFBD,
	34158 - 11904: 0xEB4D,
	34159 - 11904: 0x99C4,
	34160 - 11904: 0x99C5,
	34161 - 11904: 0xEB4B,
	34163 - 11904: 0x8F7B,
	34165 - 11904: 0xEB4E,
	34166 - 11904: 0xEE53,
	34167 - 11904: 0xEE40,
	34168 - 11904: 0xEE45,
	34169 - 11904: 0xEE52,
	34170 - 11904: 0xEE44,
	34171 - 11904: 0xEDFB,
	34172 - 11904: 0xEE41,
	34174 - 11904: 0xC1A2,
	34176 - 11904: 0xEDF4,
	34177 - 11904: 0xEE4D,
	34178 - 11904: 0xEE4F,
	34179 - 11904: 0xEDF3,
	34180 - 11904: 0xC1A1,
	34181 - 11904: 0xEE51,
	34182 - 11904: 0xEE49,
	34183 - 11904: 0xC1A8,
	34184 - 11904: 0xEE50,
	34185 - 11904: 0xEE42,
	34186 - 11904: 0xC1AA,
	34187 - 11904: 0xEDF9,
	34188 - 11904: 0xEB52,
	34189 - 11904: 0xEE4A,
	34190 - 11904: 0xEE47,
	34191 - 11904: 0xEDF5,
	34192 - 11904: 0xEE55,
	34193 - 11904: 0xC1A4,
	34195 - 11904: 0x8776,
	34196 - 11904: 0xC1A5,
	34197 - 11904: 0xEDF7,
	34198 - 11904: 0xEE48,
	34199 - 11904: 0x8CB6,
	34200 - 11904: 0xEE54,
	34201 - 11904: 0xEE4B,
	34202 - 11904: 0xEDFD,
	34203 - 11904: 0xC1A7,
	34204 - 11904: 0xC1A3,
	34205 - 11904: 0xEE4C,
	34206 - 11904: 0xEDFE,
	34207 - 11904: 0xEE56,
	34208 - 11904: 0xEDF8,
	34209 - 11904: 0xEE43,
	34210 - 11904: 0xEE4E,
	34211 - 11904: 0xEDFA,
	34212 - 11904: 0xEDFC,
	34214 - 11904: 0xC2CB,
	34215 - 11904: 0xEDF6,
	34216 - 11904: 0xC1A9,
	34217 - 11904: 0xC2C4,
	34218 - 11904: 0xC17E,
	34223 - 11904: 0xC1A6,
	34224 - 11904: 0xC2C8,
	34225 - 11904: 0xF0B3,
	34227 - 11904: 0xF0A9,
	34228 - 11904: 0xF0A4,
	34229 - 11904: 0xF0AA,
	34230 - 11904: 0xF0B4,
	34231 - 11904: 0xF0B8,
	34232 - 11904: 0xF0B7,
	34233 - 11904: 0xC2CA,
	34234 - 11904: 0xC2C9,
	34237 - 11904: 0xF0AB,
	34238 - 11904: 0xF0B9,
	34239 - 11904: 0xF0AE,
	34240 - 11904: 0xF0A6,
	34241 - 11904: 0x8FA3,
	34242 - 11904: 0xF0A8,
	34243 - 11904: 0xF0A7,
	34244 - 11904: 0xF0AD,
	34245 - 11904: 0xF0B2,
	34246 - 11904: 0xF0A5,
	34247 - 11904: 0xF0AC,
	34248 - 11904: 0xF0B1,
	34249 - 11904: 0xC2C7,
	34251 - 11904: 0xF0AF,
	34253 - 11904: 0xC2C5,
	34254 - 11904: 0xF0B0,
	34255 - 11904: 0xC2C3,
	34256 - 11904: 0xC2C6,
	34257 - 11904: 0xF2D5,
	34258 - 11904: 0xF0B5,
	34261 - 11904: 0xC3C2,
	34262 - 11904: 0x8CCE,
	34263 - 11904: 0xF2CD,
	34264 - 11904: 0xF2D1,
	34265 - 11904: 0xF2C9,
	34266 - 11904: 0xF2CC,
	34268 - 11904: 0xF2D4,
	34269 - 11904: 0xC3C0,
	34270 - 11904: 0xF2D9,
	34271 - 11904: 0xF2D2,
	34272 - 11904: 0x99C6,
	34273 - 11904: 0xF2CA,
	34274 - 11904: 0xF2DA,
	34275 - 11904: 0xF2D3,
	34276 - 11904: 0xC3C3,
	34277 - 11904: 0xC3C4,
	34278 - 11904: 0xF2D7,
	34280 - 11904: 0xF2CB,
	34281 - 11904: 0xC3BF,
	34282 - 11904: 0xC3C1,
	34283 - 11904: 0xF2C6,
	34284 - 11904: 0xF2CE,
	34285 - 11904: 0xF2C8,
	34286 - 11904: 0x96CD,
	34287 - 11904: 0xF2D8,
	34288 - 11904: 0xF2D6,
	34289 - 11904: 0xF2C7,
	34290 - 11904: 0xF2CF,
	34294 - 11904: 0xF4BE,
	34295 - 11904: 0xC3C5,
	34296 - 11904: 0xF2D0,
	34297 - 11904: 0xC4A7,
	34298 - 11904: 0xC4A9,
	34299 - 11904: 0xC4A6,
	34300 - 11904: 0x96C7,
	34301 - 11904: 0xF4C3,
	34302 - 11904: 0xF4BB,
	34303 - 11904: 0xF4B9,
	34304 - 11904: 0xF4BD,
	34305 - 11904: 0xF4BA,
	34306 - 11904: 0x8FA5,
	34308 - 11904: 0xF4BF,
	34309 - 11904: 0xF4C1,
	34310 - 11904: 0xC4AA,
	34311 - 11904: 0xC4AC,
	34313 - 11904: 0xF4C0,
	34314 - 11904: 0xC4AD,
	34315 - 11904: 0xC4AB,
	34316 - 11904: 0xF4C2,
	34317 - 11904: 0xFABB,
	34319 - 11904: 0x8C61,
	34320 - 11904: 0x9570,
	34321 - 11904: 0xC4A8,
	34323 - 11904: 0x87AF,
	34324 - 11904: 0x9368,
	34326 - 11904: 0x8F7E,
	34327 - 11904: 0xC4F4,
	34328 - 11904: 0xF5F1,
	34329 - 11904: 0xF5F7,
	34330 - 11904: 0xC4F6,
	34331 - 11904: 0xF4BC,
	34332 - 11904: 0xF5F6,
	34334 - 11904: 0xF5FD,
	34335 - 11904: 0xF5F4,
	34336 - 11904: 0xF5FB,
	34337 - 11904: 0xF5FA,
	34338 - 11904: 0xF4B8,
	34339 - 11904: 0xF5F5,
	34340 - 11904: 0xF0B6,
	34341 - 11904: 0xF5FE,
	34342 - 11904: 0xF5F3,
	34343 - 11904: 0xF5F8,
	34344 - 11904: 0x8FAA,
	34345 - 11904: 0xF5FC,
	34346 - 11904: 0xF5F2,
	34348 - 11904: 0xF74A,
	34349 - 11904: 0xC4F5,
	34350 - 11904: 0xF5F9,
	34351 - 11904: 0xA050,
	34353 - 11904: 0xF7F4,
	34354 - 11904: 0xF74B,
	34355 - 11904: 0xF749,
	34356 - 11904: 0xF747,
	34357 - 11904: 0xF748,
	34358 - 11904: 0xF74C,
	34360 - 11904: 0xC5D9,
	34361 - 11904: 0xF7F2,
	34362 - 11904: 0xF7F0,
	34363 - 11904: 0xF7F5,
	34364 - 11904: 0xF7F3,
	34366 - 11904: 0xF7F6,
	34367 - 11904: 0xC5DA,
	34368 - 11904: 0xF7F1,
	34370 - 11904: 0x90D3,
	34371 - 11904: 0xF8BC,
	34373 - 11904: 0x9556,
	34374 - 11904: 0xF945,
	34375 - 11904: 0xF946,
	34376 - 11904: 0xF947,
	34379 - 11904: 0xF9C7,
	34380 - 11904: 0xF9BD,
	34381 - 11904: 0xCA4F,
	34382 - 11904: 0xAAEA,
	34384 - 11904: 0xAD68,
	34386 - 11904: 0xD3B8,
	34387 - 11904: 0xD3B7,
	34388 - 11904: 0xB040,
	34389 - 11904: 0xB342,
	34390 - 11904: 0xD77C,
	34393 - 11904: 0xD77B,
	34395 - 11904: 0xB5EA,
	34396 - 11904: 0xB8B8,
	34398 - 11904: 0xB8B7,
	34399 - 11904: 0xB8B9,
	34401 - 11904: 0xE3D4,
	34402 - 11904: 0xE77E,
	34403 - 11904: 0xEB58,
	34404 - 11904: 0xEB5A,
	34405 - 11904: 0xEB59,
	34407 - 11904: 0xC1AB,
	34408 - 11904: 0xEE57,
	34409 - 11904: 0xF0BA,
	34410 - 11904: 0xF9A5,
	34411 - 11904: 0xA6E4,
	34412 - 11904: 0x8FB8,
	34413 - 11904: 0xCDC9,
	34414 - 11904: 0xCDCA,
	34415 - 11904: 0xCDC8,
	34416 - 11904: 0xCDC7,
	34417 - 11904: 0xAAEB,
	34418 - 11904: 0x99C8,
	34419 - 11904: 0xD0A9,
	34420 - 11904: 0xD0A7,
	34423 - 11904: 0xD0A6,
	34425 - 11904: 0xAD69,
	34426 - 11904: 0xAD6B,
	34427 - 11904: 0xAD6A,
	34428 - 11904: 0xD0A8,
	34430 - 11904: 0x8FAF,
	34437 - 11904: 0xD3C4,
	34438 - 11904: 0xD3C1,
	34439 - 11904: 0xD3BF,
	34442 - 11904: 0xB041,
	34443 - 11904: 0xD3C2,
	34444 - 11904: 0xB046,
	34445 - 11904: 0xD3BC,
	34446 - 11904: 0xD3CB,
	34448 - 11904: 0xD3CD,
	34449 - 11904: 0xD3BD,
	34450 - 11904: 0x99C9,
	34451 - 11904: 0xB043,
	34452 - 11904: 0xD3CE,
	34453 - 11904: 0xD3C9,
	34454 - 11904: 0xD3BB,
	34455 - 11904: 0xD3C0,
	34456 - 11904: 0xD3CA,
	34457 - 11904: 0xD3C6,
	34458 - 11904: 0xD3C3,
	34460 - 11904: 0xB048,
	34461 - 11904: 0xD3CC,
	34462 - 11904: 0xD3BE,
	34464 - 11904: 0x9579,
	34465 - 11904: 0xD3C7,
	34466 - 11904: 0xD3B9,
	34467 - 11904: 0xB047,
	34468 - 11904: 0xB044,
	34469 - 11904: 0xD3C5,
	34471 - 11904: 0xD3C8,
	34472 - 11904: 0xD3BA,
	34473 - 11904: 0xB045,
	34474 - 11904: 0xB042,
	34477 - 11904: 0x9F49,
	34479 - 11904: 0xB34C,
	34480 - 11904: 0xD7A5,
	34481 - 11904: 0xB34B,
	34482 - 11904: 0x99CA,
	34483 - 11904: 0xD7A8,
	34484 - 11904: 0xD7AB,
	34485 - 11904: 0xB348,
	34486 - 11904: 0xB346,
	34487 - 11904: 0xD77E,
	34488 - 11904: 0xD7A9,
	34489 - 11904: 0xD7A7,
	34490 - 11904: 0xD7A4,
	34491 - 11904: 0xD7AC,
	34492 - 11904: 0xD7AD,
	34493 - 11904: 0xD7AF,
	34494 - 11904: 0xD7B0,
	34495 - 11904: 0xD77D,
	34496 - 11904: 0xB345,
	34497 - 11904: 0xD7A2,
	34498 - 11904: 0xD7A1,
	34499 - 11904: 0xD7AE,
	34500 - 11904: 0xB347,
	34501 - 11904: 0xD7A3,
	34502 - 11904: 0xB349,
	34503 - 11904: 0xB344,
	34504 - 11904: 0xD7A6,
	34505 - 11904: 0xB34D,
	34507 - 11904: 0xB34A,
	34508 - 11904: 0xD7AA,
	34512 - 11904: 0xB5F1,
	34513 - 11904: 0xDBBF,
	34515 - 11904: 0xDBB4,
	34516 - 11904: 0xB5EE,
	34518 - 11904: 0xDFE7,
	34519 - 11904: 0xDBBD,
	34520 - 11904: 0xDBB1,
	34521 - 11904: 0xB5EC,
	34522 - 11904: 0xDBB6,
	34523 - 11904: 0xB5EF,
	34524 - 11904: 0xDBBA,
	34525 - 11904: 0xDBB8,
	34526 - 11904: 0xB5F2,
	34527 - 11904: 0xB5EB,
	34530 - 11904: 0xDBB2,
	34531 - 11904: 0xDBB5,
	34532 - 11904: 0xB5F0,
	34534 - 11904: 0xDBB3,
	34536 - 11904: 0xDBBE,
	34537 - 11904: 0xDBBC,
	34538 - 11904: 0xDBB7,
	34539 - 11904: 0xDBB9,
	34540 - 11904: 0xDBBB,
	34541 - 11904: 0xB5ED,
	34543 - 11904: 0x99CB,
	34549 - 11904: 0xDFE8,
	34550 - 11904: 0xDFEE,
	34551 - 11904: 0xDFE4,
	34552 - 11904: 0xDFEA,
	34553 - 11904: 0xB8BA,
	34554 - 11904: 0xDFE6,
	34555 - 11904: 0xB8C0,
	34558 - 11904: 0xB8BF,
	34560 - 11904: 0xB8BE,
	34561 - 11904: 0xDFED,
	34562 - 11904: 0xB8C1,
	34563 - 11904: 0xB8C2,
	34564 - 11904: 0xDFE3,
	34565 - 11904: 0xDFF0,
	34566 - 11904: 0xB8C3,
	34567 - 11904: 0xB8BD,
	34568 - 11904: 0xB8BC,
	34569 - 11904: 0xDFEC,
	34570 - 11904: 0xB8C4,
	34571 - 11904: 0xDFE2,
	34572 - 11904: 0xDFE5,
	34573 - 11904: 0xDFEF,
	34574 - 11904: 0xDFEB,
	34577 - 11904: 0xE3F4,
	34578 - 11904: 0xE3E9,
	34579 - 11904: 0xB8BB,
	34584 - 11904: 0xBB6A,
	34585 - 11904: 0xE3DD,
	34586 - 11904: 0xE3F2,
	34587 - 11904: 0xE3DE,
	34588 - 11904: 0xBB65,
	34590 - 11904: 0xE3DB,
	34592 - 11904: 0xE3E4,
	34593 - 11904: 0xE3DC,
	34594 - 11904: 0xBB67,
	34595 - 11904: 0xE3D6,
	34596 - 11904: 0xE3F1,
	34597 - 11904: 0xBB68,
	34598 - 11904: 0xE3EE,
	34599 - 11904: 0xE3EF,
	34600 - 11904: 0xE3D7,
	34601 - 11904: 0xBB6D,
	34602 - 11904: 0xE3E6,
	34604 - 11904: 0xE3E0,
	34605 - 11904: 0xE3E7,
	34606 - 11904: 0xE3DA,
	34608 - 11904: 0xE3F3,
	34609 - 11904: 0xE3EB,
	34610 - 11904: 0xE3E5,
	34611 - 11904: 0xE3D5,
	34612 - 11904: 0xBB69,
	34613 - 11904: 0xE3EC,
	34615 - 11904: 0xBB6C,
	34616 - 11904: 0xE3F0,
	34618 - 11904: 0xE3EA,
	34619 - 11904: 0xBB66,
	34620 - 11904: 0xE3E8,
	34622 - 11904: 0xE3E2,
	34623 - 11904: 0xBB64,
	34624 - 11904: 0xE3D9,
	34625 - 11904: 0xE3E1,
	34626 - 11904: 0xE3ED,
	34627 - 11904: 0xE3DF,
	34630 - 11904: 0xE3E3,
	34636 - 11904: 0xBDC1,
	34637 - 11904: 0xDFE9,
	34638 - 11904: 0xE7B2,
	34639 - 11904: 0xE7BB,
	34640 - 11904: 0xE7B1,
	34641 - 11904: 0xE7AD,
	34642 - 11904: 0xE7AA,
	34643 - 11904: 0xBDC2,
	34644 - 11904: 0xE7A8,
	34645 - 11904: 0xBB6B,
	34646 - 11904: 0xE7A1,
	34647 - 11904: 0xBDC0,
	34648 - 11904: 0xE7A7,
	34649 - 11904: 0xBDBF,
	34650 - 11904: 0xE7AC,
	34651 - 11904: 0xE7A9,
	34652 - 11904: 0xE7B9,
	34653 - 11904: 0xE7B4,
	34654 - 11904: 0xE7AE,
	34655 - 11904: 0xE7B3,
	34656 - 11904: 0xBDBB,
	34657 - 11904: 0xE7AB,
	34658 - 11904: 0xE7BE,
	34659 - 11904: 0xE7A2,
	34660 - 11904: 0xE7A3,
	34661 - 11904: 0xE7BA,
	34662 - 11904: 0xBDBC,
	34663 - 11904: 0xE7BF,
	34664 - 11904: 0xBDBE,
	34665 - 11904: 0xE7C0,
	34666 - 11904: 0xE7B0,
	34667 - 11904: 0xE3D8,
	34668 - 11904: 0xE7B6,
	34669 - 11904: 0xE7AF,
	34670 - 11904: 0xE7B8,
	34671 - 11904: 0xE7B5,
	34672 - 11904: 0x9DD5,
	34673 - 11904: 0x8FB0,
	34675 - 11904: 0xE7A6,
	34676 - 11904: 0xBDB9,
	34677 - 11904: 0xE7BD,
	34678 - 11904: 0xBDBA,
	34679 - 11904: 0xE7A4,
	34680 - 11904: 0xBDBD,
	34681 - 11904: 0xEB64,
	34682 - 11904: 0xE7B7,
	34683 - 11904: 0xE7BC,
	34685 - 11904: 0xFA7A,
	34689 - 11904: 0xEB61,
	34690 - 11904: 0xBDB8,
	34691 - 11904: 0xBFC0,
	34692 - 11904: 0xEB6B,
	34693 - 11904: 0xEB67,
	34694 - 11904: 0x9E5F,
	34695 - 11904: 0xEB65,
	34696 - 11904: 0xEB60,
	34697 - 11904: 0xEB6F,
	34699 - 11904: 0x99CD,
	34700 - 11904: 0xA0C9,
	34701 - 11904: 0xBFC4,
	34703 - 11904: 0xEB5C,
	34704 - 11904: 0xEB68,
	34705 - 11904: 0xEB69,
	34706 - 11904: 0xEB5F,
	34707 - 11904: 0xEB5E,
	34708 - 11904: 0xEB6C,
	34710 - 11904: 0xEB62,
	34711 - 11904: 0xEB5D,
	34712 - 11904: 0xEB63,
	34714 - 11904: 0xEB6E,
	34715 - 11904: 0xEB5B,
	34716 - 11904: 0xEB6D,
	34717 - 11904: 0xEB6A,
	34718 - 11904: 0xBFC2,
	34719 - 11904: 0xBFC1,
	34722 - 11904: 0xBFC3,
	34723 - 11904: 0xEB66,
	34724 - 11904: 0xF0CB,
	34725 - 11904: 0x9ADB,
	34729 - 11904: 0xA0C6,
	34730 - 11904: 0xEE59,
	34731 - 11904: 0xC1B1,
	34732 - 11904: 0xEE5D,
	34733 - 11904: 0xEE5A,
	34734 - 11904: 0xEE61,
	34735 - 11904: 0xEE67,
	34736 - 11904: 0xEE5C,
	34737 - 11904: 0x8FB4,
	34738 - 11904: 0xEE70,
	34739 - 11904: 0xC1AE,
	34740 - 11904: 0xEE6A,
	34741 - 11904: 0xEE5F,
	34742 - 11904: 0xEE6B,
	34743 - 11904: 0xEE66,
	34744 - 11904: 0xEE6D,
	34745 - 11904: 0xEE5E,
	34746 - 11904: 0xC1B3,
	34747 - 11904: 0xC1B2,
	34748 - 11904: 0xEE60,
	34749 - 11904: 0xEE6E,
	34750 - 11904: 0xEE58,
	34751 - 11904: 0xEE6C,
	34752 - 11904: 0xC1AC,
	34753 - 11904: 0xA0D7,
	34754 - 11904: 0xEE64,
	34755 - 11904: 0xEE63,
	34756 - 11904: 0xEE68,
	34757 - 11904: 0xEE5B,
	34758 - 11904: 0xC1B0,
	34760 - 11904: 0xC1B4,
	34761 - 11904: 0xEE62,
	34762 - 11904: 0xEE69,
	34763 - 11904: 0xC1B5,
	34764 - 11904: 0xEE65,
	34766 - 11904: 0xA0C7,
	34769 - 11904: 0xC1AD,
	34770 - 11904: 0xC1AF,
	34771 - 11904: 0xF0C7,
	34772 - 11904: 0xF0C5,
	34774 - 11904: 0xA043,
	34775 - 11904: 0xF0CC,
	34776 - 11904: 0xF0C9,
	34777 - 11904: 0xF0CD,
	34778 - 11904: 0x8FB5,
	34779 - 11904: 0xF0BE,
	34780 - 11904: 0xF0C6,
	34781 - 11904: 0xF0D1,
	34782 - 11904: 0xEE6F,
	34783 - 11904: 0xF0C2,
	34784 - 11904: 0xC2CF,
	34785 - 11904: 0xE7A5,
	34786 - 11904: 0xF0BD,
	34787 - 11904: 0xF0CA,
	34788 - 11904: 0xF0C4,
	34789 - 11904: 0xF0C1,
	34790 - 11904: 0xF0BC,
	34791 - 11904: 0xF0BB,
	34792 - 11904: 0xF0D0,
	34794 - 11904: 0xF0C0,
	34795 - 11904: 0xF0BF,
	34796 - 11904: 0xC2CD,
	34797 - 11904: 0xF0C8,
	34798 - 11904: 0x8FB2,
	34799 - 11904: 0xC2CC,
	34802 - 11904: 0xC2CE,
	34803 - 11904: 0xF0C3,
	34804 - 11904: 0xF0CF,
	34805 - 11904: 0xA061,
	34806 - 11904: 0xF2DE,
	34807 - 11904: 0xF2DF,
	34809 - 11904: 0xC3C9,
	34810 - 11904: 0xF2DC,
	34811 - 11904: 0xC3C6,
	34812 - 11904: 0xF2E4,
	34814 - 11904: 0xC3CA,
	34815 - 11904: 0xF2E6,
	34816 - 11904: 0xF2DB,
	34817 - 11904: 0xF0CE,
	34818 - 11904: 0xF2E8,
	34819 - 11904: 0xF2DD,
	34820 - 11904: 0x9E5E,
	34821 - 11904: 0xC3C7,
	34822 - 11904: 0xF2E3,
	34824 - 11904: 0xF2E5,
	34825 - 11904: 0xF2E0,
	34826 - 11904: 0xF2E7,
	34827 - 11904: 0xF2E2,
	34828 - 11904: 0xF2E1,
	34829 - 11904: 0xC3C8,
	34831 - 11904: 0xA063,
	34832 - 11904: 0xF4C5,
	34833 - 11904: 0xF4C6,
	34835 - 11904: 0xF4C8,
	34836 - 11904: 0xC4AE,
	34837 - 11904: 0xC4AF,
	34838 - 11904: 0xF4C9,
	34839 - 11904: 0xF4C7,
	34840 - 11904: 0x9FE8,
	34841 - 11904: 0xF4C4,
	34843 - 11904: 0xF642,
	34844 - 11904: 0xF645,
	34845 - 11904: 0xF641,
	34847 - 11904: 0xC4FA,
	34848 - 11904: 0xF643,
	34849 - 11904: 0xC4F9,
	34850 - 11904: 0xC4F8,
	34851 - 11904: 0xC4F7,
	34852 - 11904: 0xF644,
	34853 - 11904: 0xF751,
	34854 - 11904: 0xF74F,
	34855 - 11904: 0x9CB2,
	34856 - 11904: 0xF74E,
	34857 - 11904: 0xF640,
	34858 - 11904: 0xF750,
	34859 - 11904: 0xF646,
	34860 - 11904: 0xF74D,
	34861 - 11904: 0x957C,
	34862 - 11904: 0xF7F9,
	34863 - 11904: 0xF7D7,
	34864 - 11904: 0xF7F7,
	34865 - 11904: 0xC5DB,
	34866 - 11904: 0xF7F8,
	34867 - 11904: 0xF7FA,
	34869 - 11904: 0xF8BF,
	34870 - 11904: 0xC5FA,
	34871 - 11904: 0xF8BE,
	34872 - 11904: 0xF8BD,
	34873 - 11904: 0xC5FB,
	34875 - 11904: 0xC65A,
	34876 - 11904: 0xF96E,
	34877 - 11904: 0xF9A7,
	34878 - 11904: 0xF9A6,
	34879 - 11904: 0xF9A8,
	34880 - 11904: 0xA6E5,
	34881 - 11904: 0xD0AA,
	34882 - 11904: 0x9FC7,
	34883 - 11904: 0xD3CF,
	34884 - 11904: 0xD3D0,
	34885 - 11904: 0x8FBB,
	34886 - 11904: 0x8FBC,
	34888 - 11904: 0xDBC0,
	34890 - 11904: 0xF647,
	34891 - 11904: 0xF8C0,
	34892 - 11904: 0xA6E6,
	34893 - 11904: 0xAD6C,
	34894 - 11904: 0xD0AB,
	34895 - 11904: 0x8FEC,
	34898 - 11904: 0xD7B1,
	34899 - 11904: 0xB34E,
	34901 - 11904: 0xDBC2,
	34902 - 11904: 0xDBC1,
	34903 - 11904: 0xB5F3,
	34905 - 11904: 0xB8C5,
	34906 - 11904: 0xE7C1,
	34907 - 11904: 0xBDC3,
	34909 - 11904: 0xBDC4,
	34910 - 11904: 0x8FC0,
	34912 - 11904: 0x936A,
	34913 - 11904: 0xBFC5,
	34914 - 11904: 0xC5FC,
	34915 - 11904: 0xA6E7,
	34916 - 11904: 0x8BE4,
	34917 - 11904: 0x9C7C,
	34919 - 11904: 0xD0AC,
	34920 - 11904: 0xAAED,
	34921 - 11904: 0xD0AE,
	34922 - 11904: 0xD0AD,
	34923 - 11904: 0xAD6D,
	34925 - 11904: 0xD3D1,
	34926 - 11904: 0x95A1,
	34927 - 11904: 0xD3D8,
	34928 - 11904: 0xB049,
	34929 - 11904: 0xD3D6,
	34930 - 11904: 0xD3D4,
	34932 - 11904: 0xD3DB,
	34933 - 11904: 0xD3D2,
	34934 - 11904: 0xD3D3,
	34935 - 11904: 0xB04A,
	34937 - 11904: 0xB04E,
	34940 - 11904: 0xD3DC,
	34941 - 11904: 0xB04D,
	34942 - 11904: 0xD3DA,
	34943 - 11904: 0xD3D7,
	34944 - 11904: 0xD3D5,
	34945 - 11904: 0xB04B,
	34946 - 11904: 0xB04C,
	34947 - 11904: 0xD3D9,
	34948 - 11904: 0xFEEC,
	34951 - 11904: 0x95A3,
	34952 - 11904: 0xB350,
	34953 - 11904: 0xD7B2,
	34955 - 11904: 0xB355,
	34956 - 11904: 0xD7C2,
	34957 - 11904: 0xB354,
	34958 - 11904: 0xD7C4,
	34959 - 11904: 0x8C45,
	34960 - 11904: 0x8CB8,
	34961 - 11904: 0xD7B8,
	34962 - 11904: 0xB352,
	34963 - 11904: 0xD7C3,
	34965 - 11904: 0xD7B3,
	34966 - 11904: 0xB353,
	34967 - 11904: 0xD7BF,
	34968 - 11904: 0xD7BB,
	34969 - 11904: 0xD7BD,
	34970 - 11904: 0xD7B7,
	34971 - 11904: 0xD7BE,
	34972 - 11904: 0x8FC1,
	34973 - 11904: 0x87B7,
	34974 - 11904: 0xB34F,
	34975 - 11904: 0xD7BA,
	34976 - 11904: 0xA052,
	34977 - 11904: 0xD7B9,
	34978 - 11904: 0xD7B5,
	34980 - 11904: 0xD7C0,
	34983 - 11904: 0xD7BC,
	34984 - 11904: 0xD7B4,
	34986 - 11904: 0xD7B6,
	34987 - 11904: 0xB351,
	34988 - 11904: 0xD7C1,
	34990 - 11904: 0x99D0,
	34993 - 11904: 0xB5F6,
	34994 - 11904: 0xDBCD,
	34996 - 11904: 0x8FC3,
	34997 - 11904: 0x8FC4,
	34998 - 11904: 0xDBC9,
	34999 - 11904: 0xDBCB,
	35000 - 11904: 0xDBC6,
	35001 - 11904: 0xDBC5,
	35002 - 11904: 0xDBC3,
	35004 - 11904: 0xDBCA,
	35005 - 11904: 0xDBCC,
	35006 - 11904: 0xDBC8,
	35007 - 11904: 0x95A4,
	35008 - 11904: 0xDBC7,
	35009 - 11904: 0xB5F4,
	35010 - 11904: 0xB5F5,
	35013 - 11904: 0x8FC6,
	35015 - 11904: 0x9E60,
	35017 - 11904: 0xDBCF,
	35018 - 11904: 0xB8CD,
	35019 - 11904: 0xDFF2,
	35020 - 11904: 0xDFF8,
	35021 - 11904: 0xDFF3,
	35022 - 11904: 0xDFF4,
	35023 - 11904: 0xF9D8,
	35024 - 11904: 0xDFF9,
	35026 - 11904: 0xB8CF,
	35028 - 11904: 0xB8C7,
	35029 - 11904: 0xB8CE,
	35030 - 11904: 0xDFF1,
	35031 - 11904: 0xDBC4,
	35032 - 11904: 0xB8CA,
	35033 - 11904: 0xB8C8,
	35034 - 11904: 0xDFF7,
	35035 - 11904: 0xDFF6,
	35036 - 11904: 0xB8C9,
	35037 - 11904: 0xB8CB,
	35038 - 11904: 0xDFF5,
	35039 - 11904: 0xB8C6,
	35041 - 11904: 0xB8CC,
	35046 - 11904: 0x95A5,
	35047 - 11904: 0xE3F6,
	35048 - 11904: 0xBB74,
	35051 - 11904: 0xE442,
	35052 - 11904: 0xE441,
	35054 - 11904: 0xE3FB,
	35055 - 11904: 0xBB76,
	35056 - 11904: 0xE440,
	35057 - 11904: 0xE3F7,
	35058 - 11904: 0xE3F8,
	35059 - 11904: 0xBB6E,
	35060 - 11904: 0xBB70,
	35061 - 11904: 0x9CB3,
	35062 - 11904: 0xE3FD,
	35063 - 11904: 0xE3F5,
	35064 - 11904: 0xBB72,
	35065 - 11904: 0xBB71,
	35066 - 11904: 0xE3F9,
	35067 - 11904: 0xE3FE,
	35068 - 11904: 0xE3FC,
	35069 - 11904: 0xBB73,
	35070 - 11904: 0xE3FA,
	35071 - 11904: 0x99D1,
	35072 - 11904: 0xFEF1,
	35073 - 11904: 0xDBCE,
	35074 - 11904: 0xBB6F,
	35077 - 11904: 0xE7C2,
	35078 - 11904: 0xE7C9,
	35079 - 11904: 0xBDC6,
	35081 - 11904: 0xE7CD,
	35082 - 11904: 0xBDCA,
	35083 - 11904: 0xE7C5,
	35084 - 11904: 0xE7C3,
	35086 - 11904: 0xE7CC,
	35088 - 11904: 0xBDC5,
	35089 - 11904: 0xE7CB,
	35090 - 11904: 0xBDC7,
	35091 - 11904: 0xBDC8,
	35092 - 11904: 0xE7C4,
	35093 - 11904: 0xBDC9,
	35094 - 11904: 0xE7CA,
	35095 - 11904: 0xE7C6,
	35096 - 11904: 0xE7C7,
	35097 - 11904: 0xE7C8,
	35098 - 11904: 0xBB75,
	35102 - 11904: 0xEB70,
	35103 - 11904: 0xEB7C,
	35105 - 11904: 0xBFCA,
	35106 - 11904: 0xEB77,
	35107 - 11904: 0xEB79,
	35108 - 11904: 0x99D2,
	35109 - 11904: 0xBFC8,
	35110 - 11904: 0xEB71,
	35111 - 11904: 0xEB75,
	35113 - 11904: 0xEB78,
	35114 - 11904: 0xBFC6,
	35115 - 11904: 0xBFC9,
	35116 - 11904: 0xEB7B,
	35117 - 11904: 0xEB73,
	35118 - 11904: 0xEB74,
	35119 - 11904: 0xEB7A,
	35120 - 11904: 0xEB72,
	35121 - 11904: 0xEB76,
	35122 - 11904: 0xBFC7,
	35123 - 11904: 0xEE72,
	35125 - 11904: 0xEE71,
	35126 - 11904: 0xC1B7,
	35127 - 11904: 0xEE77,
	35128 - 11904: 0xC1B9,
	35131 - 11904: 0xC1B6,
	35132 - 11904: 0xEE73,
	35133 - 11904: 0xC1BA,
	35134 - 11904: 0xEE74,
	35137 - 11904: 0xEE75,
	35138 - 11904: 0xEE78,
	35139 - 11904: 0x9CC2,
	35140 - 11904: 0xC1B8,
	35142 - 11904: 0xF0D6,
	35143 - 11904: 0x99D3,
	35145 - 11904: 0xF0D9,
	35147 - 11904: 0xF0D3,
	35148 - 11904: 0xF0D5,
	35149 - 11904: 0x95A7,
	35151 - 11904: 0xF0D4,
	35152 - 11904: 0xF0D7,
	35153 - 11904: 0xF0D8,
	35154 - 11904: 0xEE76,
	35155 - 11904: 0xF0D2,
	35156 - 11904: 0x95A9,
	35158 - 11904: 0xC3CD,
	35159 - 11904: 0xF2EC,
	35160 - 11904: 0xF2EF,
	35161 - 11904: 0xF2F1,
	35162 - 11904: 0xF2EA,
	35163 - 11904: 0xF2EB,
	35164 - 11904: 0xF2EE,
	35165 - 11904: 0xF2F0,
	35166 - 11904: 0xC3CE,
	35167 - 11904: 0xC3CC,
	35168 - 11904: 0xC3CB,
	35169 - 11904: 0xF2ED,
	35170 - 11904: 0xF2E9,
	35171 - 11904: 0xF4CA,
	35172 - 11904: 0xC4B0,
	35173 - 11904: 0x95A6,
	35174 - 11904: 0xF4CB,
	35177 - 11904: 0xF649,
	35178 - 11904: 0xC4FB,
	35179 - 11904: 0xF64B,
	35180 - 11904: 0xC4FC,
	35181 - 11904: 0xF648,
	35182 - 11904: 0xF64A,
	35183 - 11904: 0xC5A8,
	35185 - 11904: 0xF752,
	35186 - 11904: 0xC5A7,
	35187 - 11904: 0xF7FD,
	35188 - 11904: 0xF7FC,
	35190 - 11904: 0xF7FB,
	35191 - 11904: 0x9C5D,
	35193 - 11904: 0xF948,
	35194 - 11904: 0xF949,
	35195 - 11904: 0xF94B,
	35196 - 11904: 0xF94A,
	35198 - 11904: 0xCA50,
	35199 - 11904: 0xA6E8,
	35200 - 11904: 0x98E2,
	35201 - 11904: 0xAD6E,
	35202 - 11904: 0xD7C5,
	35203 - 11904: 0xB5F7,
	35205 - 11904: 0xDFFA,
	35206 - 11904: 0xC2D0,
	35207 - 11904: 0x8FC9,
	35208 - 11904: 0xF2F2,
	35209 - 11904: 0xA0C2,
	35210 - 11904: 0x8FCA,
	35211 - 11904: 0xA8A3,
	35215 - 11904: 0xB357,
	35217 - 11904: 0x99D4,
	35219 - 11904: 0xB356,
	35220 - 11904: 0xA0B9,
	35221 - 11904: 0xDBD0,
	35222 - 11904: 0xB5F8,
	35223 - 11904: 0xDBD2,
	35224 - 11904: 0xDBD1,
	35227 - 11904: 0xDFFB,
	35228 - 11904: 0xB8D0,
	35229 - 11904: 0xE443,
	35230 - 11904: 0xE446,
	35231 - 11904: 0xE445,
	35233 - 11904: 0xE444,
	35234 - 11904: 0xE7CE,
	35235 - 11904: 0xE7D0,
	35236 - 11904: 0xE7CF,
	35237 - 11904: 0x9B58,
	35238 - 11904: 0xBFCC,
	35239 - 11904: 0x8FCD,
	35241 - 11904: 0xA0D4,
	35242 - 11904: 0xBFCB,
	35244 - 11904: 0xC1BB,
	35245 - 11904: 0xEE79,
	35246 - 11904: 0xEE7B,
	35247 - 11904: 0xEE7A,
	35250 - 11904: 0xC2D1,
	35254 - 11904: 0xF2F4,
	35255 - 11904: 0xF2F3,
	35257 - 11904: 0xF4CC,
	35258 - 11904: 0xC4B1,
	35260 - 11904: 0x8FCE,
	35261 - 11904: 0xC4FD,
	35262 - 11904: 0xF754,
	35263 - 11904: 0xF753,
	35264 - 11904: 0xC65B,
	35265 - 11904: 0x8BE5,
	35270 - 11904: 0x8979,
	35282 - 11904: 0xA8A4,
	35283 - 11904: 0xD0AF,
	35284 - 11904: 0xAD6F,
	35285 - 11904: 0xD7C8,
	35286 - 11904: 0xD7C6,
	35289 - 11904: 0xD7C7,
	35290 - 11904: 0xDBD4,
	35291 - 11904: 0xDBD5,
	35292 - 11904: 0xE043,
	35293 - 11904: 0xDBD3,
	35295 - 11904: 0xDFFC,
	35296 - 11904: 0xE041,
	35297 - 11904: 0xE040,
	35298 - 11904: 0xE042,
	35299 - 11904: 0xB8D1,
	35300 - 11904: 0xDFFE,
	35301 - 11904: 0xDFFD,
	35302 - 11904: 0xE044,
	35303 - 11904: 0x8FD0,
	35304 - 11904: 0xE449,
	35305 - 11904: 0xE447,
	35307 - 11904: 0xE448,
	35308 - 11904: 0xE7D3,
	35309 - 11904: 0xE7D1,
	35312 - 11904: 0xE7D2,
	35313 - 11904: 0xEB7D,
	35314 - 11904: 0xEE7C,
	35315 - 11904: 0xEE7D,
	35316 - 11904: 0xC2D2,
	35318 - 11904: 0xF2F5,
	35319 - 11904: 0xF4CD,
	35320 - 11904: 0xC4B2,
	35322 - 11904: 0xF64C,
	35323 - 11904: 0xF755,
	35324 - 11904: 0xC5A9,
	35326 - 11904: 0xF7FE,
	35327 - 11904: 0xF94C,
	35328 - 11904: 0xA8A5,
	35330 - 11904: 0xAD71,
	35331 - 11904: 0xAD72,
	35332 - 11904: 0xD0B0,
	35335 - 11904: 0xD0B1,
	35336 - 11904: 0xAD70,
	35338 - 11904: 0xB054,
	35340 - 11904: 0xB052,
	35342 - 11904: 0xB051,
	35343 - 11904: 0xB058,
	35344 - 11904: 0xB050,
	35345 - 11904: 0xB059,
	35346 - 11904: 0xD3DD,
	35347 - 11904: 0xB056,
	35349 - 11904: 0xB053,
	35350 - 11904: 0xB057,
	35351 - 11904: 0xB055,
	35352 - 11904: 0xB04F,
	35355 - 11904: 0xB35F,
	35356 - 11904: 0x95B6,
	35357 - 11904: 0xB359,
	35358 - 11904: 0xD7CC,
	35359 - 11904: 0xB35E,
	35362 - 11904: 0xB360,
	35363 - 11904: 0xB35A,
	35365 - 11904: 0xB35B,
	35367 - 11904: 0xD7CA,
	35369 - 11904: 0x99D6,
	35370 - 11904: 0xB358,
	35371 - 11904: 0x95E5,
	35372 - 11904: 0xD7CB,
	35373 - 11904: 0xB35D,
	35376 - 11904: 0xD7C9,
	35377 - 11904: 0xB35C,
	35380 - 11904: 0xB644,
	35382 - 11904: 0xB646,
	35384 - 11904: 0x99D7,
	35385 - 11904: 0xDBD8,
	35386 - 11904: 0xB645,
	35387 - 11904: 0xB5F9,
	35388 - 11904: 0xB5FD,
	35389 - 11904: 0x95B5,
	35390 - 11904: 0xB8E4,
	35391 - 11904: 0xE049,
	35392 - 11904: 0xDBDA,
	35393 - 11904: 0xB5FE,
	35396 - 11904: 0xDBDD,
	35397 - 11904: 0xDBDE,
	35398 - 11904: 0xB643,
	35400 - 11904: 0xDBE0,
	35401 - 11904: 0xA0CA,
	35402 - 11904: 0xDBE2,
	35404 - 11904: 0xDBE3,
	35405 - 11904: 0xDBD7,
	35406 - 11904: 0xDBD6,
	35407 - 11904: 0xDBE4,
	35408 - 11904: 0xB642,
	35409 - 11904: 0xDBE1,
	35410 - 11904: 0xDBDF,
	35412 - 11904: 0xB640,
	35413 - 11904: 0xB5FB,
	35414 - 11904: 0xB647,
	35415 - 11904: 0xDBDB,
	35416 - 11904: 0xDBDC,
	35417 - 11904: 0xDBD9,
	35419 - 11904: 0xB641,
	35422 - 11904: 0xB5FC,
	35424 - 11904: 0xB5FA,
	35425 - 11904: 0xE048,
	35426 - 11904: 0xB8DF,
	35427 - 11904: 0xB8DA,
	35430 - 11904: 0xB8D5,
	35431 - 11904: 0x9FFD,
	35432 - 11904: 0xB8E5,
	35433 - 11904: 0xB8D6,
	35435 - 11904: 0xB8D2,
	35436 - 11904: 0xB8E1,
	35437 - 11904: 0xB8DE,
	35438 - 11904: 0xB8E0,
	35440 - 11904: 0xB8D7,
	35441 - 11904: 0xB8DC,
	35442 - 11904: 0xB8D3,
	35443 - 11904: 0xB8D4,
	35444 - 11904: 0xE050,
	35445 - 11904: 0xE04D,
	35446 - 11904: 0xE045,
	35447 - 11904: 0xE04A,
	35449 - 11904: 0xB8E2,
	35450 - 11904: 0xE051,
	35451 - 11904: 0xB8E3,
	35452 - 11904: 0xB8D9,
	35454 - 11904: 0xA058,
	35455 - 11904: 0xE047,
	35457 - 11904: 0xE04F,
	35458 - 11904: 0xE04B,
	35459 - 11904: 0xE04E,
	35460 - 11904: 0xE04C,
	35461 - 11904: 0xB8DD,
	35462 - 11904: 0xE046,
	35463 - 11904: 0xB8D8,
	35467 - 11904: 0xE44C,
	35468 - 11904: 0xBB78,
	35469 - 11904: 0xBB7B,
	35471 - 11904: 0xE44E,
	35472 - 11904: 0x8FD6,
	35473 - 11904: 0xBBA5,
	35474 - 11904: 0xE44D,
	35475 - 11904: 0xBB7D,
	35476 - 11904: 0x99D8,
	35477 - 11904: 0xBDCF,
	35478 - 11904: 0xE44F,
	35480 - 11904: 0xBBA4,
	35481 - 11904: 0xE44B,
	35482 - 11904: 0xBBA6,
	35484 - 11904: 0x8FD3,
	35486 - 11904: 0xBB79,
	35488 - 11904: 0xB8DB,
	35489 - 11904: 0xBB7C,
	35491 - 11904: 0xBB7A,
	35492 - 11904: 0xBB7E,
	35493 - 11904: 0xBBA2,
	35494 - 11904: 0xBB77,
	35495 - 11904: 0xBBA7,
	35496 - 11904: 0xBBA3,
	35497 - 11904: 0x8FE5,
	35498 - 11904: 0xBBA1,
	35499 - 11904: 0xE44A,
	35503 - 11904: 0x8FE9,
	35504 - 11904: 0xBDD6,
	35506 - 11904: 0xBDD2,
	35508 - 11904: 0x99D9,
	35510 - 11904: 0xBDD9,
	35512 - 11904: 0xE7D6,
	35513 - 11904: 0xBDDA,
	35514 - 11904: 0xE7E2,
	35515 - 11904: 0xE7DB,
	35516 - 11904: 0xBDCB,
	35517 - 11904: 0xE7E3,
	35518 - 11904: 0xE7DD,
	35519 - 11904: 0xBDD5,
	35520 - 11904: 0xE7DE,
	35522 - 11904: 0xBDD4,
	35523 - 11904: 0xE7E1,
	35524 - 11904: 0xBDCE,
	35525 - 11904: 0xE7DF,
	35526 - 11904: 0xE7D5,
	35527 - 11904: 0xBDCD,
	35528 - 11904: 0xEBAA,
	35529 - 11904: 0xBDD3,
	35531 - 11904: 0xBDD0,
	35532 - 11904: 0x8CF7,
	35533 - 11904: 0xBDD8,
	35535 - 11904: 0xE7D4,
	35537 - 11904: 0xE7D8,
	35538 - 11904: 0xBDCC,
	35539 - 11904: 0xE7D7,
	35540 - 11904: 0xE7D9,
	35541 - 11904: 0xE7DA,
	35542 - 11904: 0xBDD7,
	35543 - 11904: 0xE7DC,
	35544 - 11904: 0xE7E0,
	35545 - 11904: 0xE7E4,
	35546 - 11904: 0x927C,
	35547 - 11904: 0xBDDB,
	35548 - 11904: 0xBFD2,
	35549 - 11904: 0xEBA5,
	35550 - 11904: 0xEBAB,
	35551 - 11904: 0xEBA8,
	35552 - 11904: 0xEB7E,
	35553 - 11904: 0xEBAC,
	35554 - 11904: 0xEBA1,
	35556 - 11904: 0xEBA7,
	35558 - 11904: 0xBFCD,
	35559 - 11904: 0xBFD3,
	35560 - 11904: 0xEBAD,
	35562 - 11904: 0x9C45,
	35563 - 11904: 0xBFCF,
	35565 - 11904: 0xBFD9,
	35566 - 11904: 0xBFD4,
	35567 - 11904: 0xEBAF,
	35568 - 11904: 0xEBA9,
	35569 - 11904: 0xBFD0,
	35570 - 11904: 0xEBA2,
	35571 - 11904: 0xBFDA,
	35572 - 11904: 0xEBA3,
	35573 - 11904: 0xEBA4,
	35574 - 11904: 0xBFDB,
	35575 - 11904: 0xBFD8,
	35576 - 11904: 0xBDD1,
	35577 - 11904: 0x8CE8,
	35578 - 11904: 0xBFCE,
	35579 - 11904: 0xEBB0,
	35580 - 11904: 0xBFDC,
	35582 - 11904: 0xBFD5,
	35583 - 11904: 0xEBAE,
	35584 - 11904: 0xBFD1,
	35585 - 11904: 0xBFD6,
	35586 - 11904: 0xBFD7,
	35588 - 11904: 0xC1C3,
	35589 - 11904: 0xEEA4,
	35590 - 11904: 0xEEAD,
	35591 - 11904: 0xEEAA,
	35592 - 11904: 0xEEAC,
	35594 - 11904: 0xC1C0,
	35595 - 11904: 0xEEA5,
	35596 - 11904: 0x8FDE,
	35597 - 11904: 0xEEAB,
	35598 - 11904: 0xC1BC,
	35599 - 11904: 0xEEA7,
	35600 - 11904: 0xC1C4,
	35601 - 11904: 0xEEA3,
	35602 - 11904: 0xEEA8,
	35603 - 11904: 0xEEAF,
	35604 - 11904: 0xEBA6,
	35605 - 11904: 0xEEA9,
	35606 - 11904: 0xEEA2,
	35607 - 11904: 0xC1BD,
	35608 - 11904: 0xEEA1,
	35609 - 11904: 0xC1BE,
	35610 - 11904: 0xEEB0,
	35611 - 11904: 0xC1BF,
	35612 - 11904: 0xEEAE,
	35613 - 11904: 0xC1C2,
	35614 - 11904: 0xEE7E,
	35615 - 11904: 0x8FDF,
	35616 - 11904: 0xC1C1,
	35618 - 11904: 0xEEA6,
	35619 - 11904: 0xF0DC,
	35620 - 11904: 0xF0EA,
	35621 - 11904: 0xF0E5,
	35622 - 11904: 0xF0E7,
	35623 - 11904: 0xF0DB,
	35624 - 11904: 0xC2D3,
	35626 - 11904: 0xF0DA,
	35627 - 11904: 0xC2D6,
	35628 - 11904: 0xC2D5,
	35629 - 11904: 0xA04B,
	35630 - 11904: 0xF0E9,
	35631 - 11904: 0xF0E1,
	35632 - 11904: 0xF0DE,
	35633 - 11904: 0xF0E4,
	35635 - 11904: 0xF0DD,
	35637 - 11904: 0xF0DF,
	35638 - 11904: 0xF0E8,
	35639 - 11904: 0xF0E6,
	35641 - 11904: 0xC2D4,
	35642 - 11904: 0xF0ED,
	35643 - 11904: 0xF0EB,
	35644 - 11904: 0xF0E2,
	35645 - 11904: 0xF0EC,
	35646 - 11904: 0xF0E3,
	35647 - 11904: 0x8FE2,
	35648 - 11904: 0xF2F9,
	35649 - 11904: 0xC3CF,
	35650 - 11904: 0xF341,
	35651 - 11904: 0xA0CC,
	35653 - 11904: 0xF64F,
	35654 - 11904: 0xC3D6,
	35655 - 11904: 0xF0E0,
	35656 - 11904: 0xF2F7,
	35657 - 11904: 0xC3D2,
	35658 - 11904: 0xF2F8,
	35659 - 11904: 0xF2FD,
	35660 - 11904: 0x8FE3,
	35661 - 11904: 0x8FE4,
	35662 - 11904: 0xC3D4,
	35663 - 11904: 0xC3D5,
	35664 - 11904: 0xF2F6,
	35665 - 11904: 0xF340,
	35666 - 11904: 0xF342,
	35667 - 11904: 0xF2FA,
	35668 - 11904: 0xF2FC,
	35669 - 11904: 0xF2FE,
	35670 - 11904: 0xF2FB,
	35671 - 11904: 0xF343,
	35672 - 11904: 0xC3D1,
	35673 - 11904: 0xC3D7,
	35674 - 11904: 0xC3D3,
	35676 - 11904: 0xC3D0,
	35677 - 11904: 0xF4D0,
	35678 - 11904: 0x9BC4,
	35679 - 11904: 0xC4B7,
	35680 - 11904: 0xF4CE,
	35682 - 11904: 0x9BFC,
	35683 - 11904: 0xF4D2,
	35685 - 11904: 0xF4D3,
	35686 - 11904: 0xC4B5,
	35687 - 11904: 0xF4D4,
	35688 - 11904: 0xF4D1,
	35689 - 11904: 0x964C,
	35690 - 11904: 0xF4CF,
	35691 - 11904: 0xC4B8,
	35692 - 11904: 0xC4B4,
	35693 - 11904: 0xF4D5,
	35695 - 11904: 0xC4B6,
	35696 - 11904: 0xC4B3,
	35700 - 11904: 0xC4FE,
	35703 - 11904: 0xC540,
	35704 - 11904: 0xF64E,
	35705 - 11904: 0xF64D,
	35706 - 11904: 0xF650,
	35707 - 11904: 0xF651,
	35709 - 11904: 0xC541,
	35710 - 11904: 0xF756,
	35711 - 11904: 0xF75B,
	35712 - 11904: 0xC5AA,
	35713 - 11904: 0x9AF6,
	35714 - 11904: 0xF758,
	35715 - 11904: 0x8CAE,
	35716 - 11904: 0xF757,
	35717 - 11904: 0xF75A,
	35718 - 11904: 0xF759,
	35720 - 11904: 0xF843,
	35722 - 11904: 0xC5DC,
	35723 - 11904: 0xF842,
	35724 - 11904: 0xF840,
	35726 - 11904: 0xF841,
	35727 - 11904: 0x87CB,
	35728 - 11904: 0x8FE7,
	35730 - 11904: 0xC5FE,
	35731 - 11904: 0xC5FD,
	35732 - 11904: 0xF8C1,
	35733 - 11904: 0xF8C2,
	35734 - 11904: 0xC640,
	35736 - 11904: 0xF94D,
	35737 - 11904: 0xF94E,
	35738 - 11904: 0xC667,
	35739 - 11904: 0x8FE8,
	35740 - 11904: 0xC66D,
	35742 - 11904: 0xF9A9,
	35743 - 11904: 0xF9C8,
	35744 - 11904: 0x8BE7,
	35774 - 11904: 0x897A,
	35810 - 11904: 0x897B,
	35895 - 11904: 0xA8A6,
	35897 - 11904: 0xD7CD,
	35899 - 11904: 0xD7CE,
	35900 - 11904: 0xE052,
	35901 - 11904: 0xE450,
	35902 - 11904: 0xE7E5,
	35903 - 11904: 0xC1C6,
	35905 - 11904: 0xC1C5,
	35906 - 11904: 0xF0EE,
	35907 - 11904: 0xF344,
	35909 - 11904: 0xF844,
	35910 - 11904: 0xA8A7,
	35911 - 11904: 0xD3DE,
	35912 - 11904: 0xB05A,
	35913 - 11904: 0xB361,
	35914 - 11904: 0xE054,
	35915 - 11904: 0xE053,
	35916 - 11904: 0xBDDC,
	35917 - 11904: 0xE7E6,
	35918 - 11904: 0xBDDD,
	35919 - 11904: 0xEEB1,
	35920 - 11904: 0xC2D7,
	35921 - 11904: 0x99DA,
	35924 - 11904: 0xC676,
	35925 - 11904: 0xA8A8,
	35926 - 11904: 0xCDCB,
	35927 - 11904: 0xD3DF,
	35930 - 11904: 0xB362,
	35932 - 11904: 0xD7CF,
	35933 - 11904: 0xD7D0,
	35935 - 11904: 0xDBE5,
	35937 - 11904: 0xB648,
	35938 - 11904: 0xB8E6,
	35940 - 11904: 0xE056,
	35941 - 11904: 0xE055,
	35942 - 11904: 0xE057,
	35944 - 11904: 0xE451,
	35945 - 11904: 0xE452,
	35946 - 11904: 0xBBA8,
	35947 - 11904: 0xBFDD,
	35948 - 11904: 0xBDDE,
	35949 - 11904: 0xBFDE,
	35951 - 11904: 0xEEB5,
	35952 - 11904: 0xEEB2,
	35953 - 11904: 0xEEB4,
	35954 - 11904: 0xEEB3,
	35955 - 11904: 0xC1C7,
	35957 - 11904: 0xF0EF,
	35958 - 11904: 0xF346,
	35959 - 11904: 0xF345,
	35960 - 11904: 0xCBA4,
	35961 - 11904: 0xB05C,
	35962 - 11904: 0xB05B,
	35963 - 11904: 0xD3E0,
	35965 - 11904: 0xD7D1,
	35968 - 11904: 0xDBE7,
	35969 - 11904: 0xDBE6,
	35970 - 11904: 0xB649,
	35972 - 11904: 0xE059,
	35973 - 11904: 0xE05A,
	35974 - 11904: 0xE058,
	35977 - 11904: 0xB8E8,
	35978 - 11904: 0xB8E7,
	35980 - 11904: 0xBBAA,
	35981 - 11904: 0xBBA9,
	35983 - 11904: 0xE7E7,
	35984 - 11904: 0xEBB3,
	35985 - 11904: 0xEBB1,
	35986 - 11904: 0xEBB2,
	35987 - 11904: 0xBFDF,
	35988 - 11904: 0xEEB7,
	35989 - 11904: 0xEEB6,
	35991 - 11904: 0xF0F2,
	35992 - 11904: 0xF0F1,
	35993 - 11904: 0xF0F0,
	35994 - 11904: 0xF347,
	35995 - 11904: 0x8FED,
	35996 - 11904: 0xF9AA,
	35997 - 11904: 0xA8A9,
	35998 - 11904: 0xAD73,
	35999 - 11904: 0x95C0,
	36000 - 11904: 0xAD74,
	36001 - 11904: 0xB05D,
	36002 - 11904: 0xB05E,
	36003 - 11904: 0xD3E2,
	36004 - 11904: 0xD3E1,
	36005 - 11904: 0xD7D2,
	36007 - 11904: 0xB368,
	36008 - 11904: 0xB366,
	36009 - 11904: 0xB363,
	36010 - 11904: 0xB367,
	36011 - 11904: 0xB365,
	36012 - 11904: 0xB364,
	36013 - 11904: 0xA0CB,
	36015 - 11904: 0xB64A,
	36016 - 11904: 0xDBEA,
	36018 - 11904: 0xB8ED,
	36019 - 11904: 0xB64C,
	36020 - 11904: 0xB651,
	36021 - 11904: 0xDBEC,
	36022 - 11904: 0xB653,
	36023 - 11904: 0xB652,
	36024 - 11904: 0xB655,
	36025 - 11904: 0xDBEB,
	36026 - 11904: 0xDBE8,
	36027 - 11904: 0xB64F,
	36028 - 11904: 0xB64B,
	36029 - 11904: 0xB64D,
	36030 - 11904: 0xDBE9,
	36031 - 11904: 0xB654,
	36032 - 11904: 0xB650,
	36033 - 11904: 0xB64E,
	36034 - 11904: 0xB8EF,
	36035 - 11904: 0xB8EE,
	36036 - 11904: 0xB8EC,
	36037 - 11904: 0xB8F0,
	36039 - 11904: 0xB8EA,
	36040 - 11904: 0xB8EB,
	36042 - 11904: 0xB8E9,
	36044 - 11904: 0xE05B,
	36045 - 11904: 0x9E48,
	36047 - 11904: 0xE454,
	36049 - 11904: 0xBBAC,
	36050 - 11904: 0xBBAD,
	36051 - 11904: 0xBBAB,
	36052 - 11904: 0x99DB,
	36053 - 11904: 0xE453,
	36054 - 11904: 0x8FF3,
	36055 - 11904: 0xE455,
	36057 - 11904: 0xE7EA,
	36058 - 11904: 0xE7EC,
	36059 - 11904: 0x8FF9,
	36060 - 11904: 0xBDE7,
	36061 - 11904: 0xE7ED,
	36062 - 11904: 0xBDE0,
	36063 - 11904: 0xE7E9,
	36064 - 11904: 0xBDDF,
	36065 - 11904: 0xBDE9,
	36066 - 11904: 0xBDE5,
	36067 - 11904: 0xBDE6,
	36068 - 11904: 0xBDE2,
	36069 - 11904: 0xE7E8,
	36070 - 11904: 0xBDE1,
	36071 - 11904: 0xE7EE,
	36072 - 11904: 0xE7EB,
	36073 - 11904: 0x95C1,
	36074 - 11904: 0xBDE8,
	36075 - 11904: 0xA04E,
	36076 - 11904: 0xBDE3,
	36077 - 11904: 0xBDE4,
	36078 - 11904: 0xEBB5,
	36080 - 11904: 0xEBB7,
	36081 - 11904: 0xEBB6,
	36082 - 11904: 0x99DC,
	36083 - 11904: 0xEBB8,
	36084 - 11904: 0xBFE0,
	36085 - 11904: 0xEBB4,
	36087 - 11904: 0xA064,
	36088 - 11904: 0xC1CB,
	36089 - 11904: 0xEEB8,
	36090 - 11904: 0xC1C8,
	36091 - 11904: 0xC1CC,
	36092 - 11904: 0xC1CA,
	36093 - 11904: 0xC1C9,
	36094 - 11904: 0xF0F3,
	36096 - 11904: 0xF0F6,
	36098 - 11904: 0xF0F5,
	36099 - 11904: 0x8FF7,
	36100 - 11904: 0xF0F4,
	36101 - 11904: 0xC2D8,
	36102 - 11904: 0xF348,
	36103 - 11904: 0xF349,
	36104 - 11904: 0xC3D8,
	36105 - 11904: 0xF34A,
	36106 - 11904: 0xC3D9,
	36107 - 11904: 0x89B0,
	36108 - 11904: 0xA048,
	36109 - 11904: 0xC4BA,
	36111 - 11904: 0xC4B9,
	36112 - 11904: 0xF652,
	36113 - 11904: 0x8FFB,
	36114 - 11904: 0x8FF6,
	36115 - 11904: 0xC542,
	36116 - 11904: 0xF653,
	36117 - 11904: 0xF75C,
	36118 - 11904: 0xC5AB,
	36119 - 11904: 0xC5AC,
	36120 - 11904: 0x9DDC,
	36121 - 11904: 0xF845,
	36123 - 11904: 0xC642,
	36124 - 11904: 0x99DD,
	36125 - 11904: 0x8BE8,
	36196 - 11904: 0xA8AA,
	36198 - 11904: 0xB36A,
	36199 - 11904: 0xB369,
	36200 - 11904: 0xE05C,
	36201 - 11904: 0xE05D,
	36203 - 11904: 0xBBAE,
	36204 - 11904: 0xEBB9,
	36205 - 11904: 0xBDEA,
	36206 - 11904: 0xEBBA,
	36207 - 11904: 0xEEB9,
	36208 - 11904: 0xA8AB,
	36210 - 11904: 0xD0B2,
	36211 - 11904: 0xAD76,
	36212 - 11904: 0xAD75,
	36214 - 11904: 0xD3E3,
	36215 - 11904: 0xB05F,
	36216 - 11904: 0xD3E4,
	36217 - 11904: 0xD7D5,
	36218 - 11904: 0x92C1,
	36219 - 11904: 0xD7D4,
	36221 - 11904: 0xD7D3,
	36224 - 11904: 0xDBEE,
	36225 - 11904: 0xB658,
	36226 - 11904: 0x9FD6,
	36228 - 11904: 0xDBED,
	36229 - 11904: 0xB657,
	36233 - 11904: 0xDBEF,
	36234 - 11904: 0xB656,
	36236 - 11904: 0xE05F,
	36237 - 11904: 0xE062,
	36238 - 11904: 0xE060,
	36239 - 11904: 0xE061,
	36240 - 11904: 0xE065,
	36241 - 11904: 0xE05E,
	36242 - 11904: 0xE066,
	36243 - 11904: 0xE063,
	36244 - 11904: 0xE064,
	36245 - 11904: 0xBBB0,
	36246 - 11904: 0xE456,
	36249 - 11904: 0xBBAF,
	36251 - 11904: 0xE7F2,
	36252 - 11904: 0xE7F0,
	36255 - 11904: 0xBDEB,
	36256 - 11904: 0xE7EF,
	36257 - 11904: 0xE7F1,
	36259 - 11904: 0xBDEC,
	36261 - 11904: 0xEBBB,
	36262 - 11904: 0xA0D2,
	36263 - 11904: 0xEBBC,
	36264 - 11904: 0xC1CD,
	36265 - 11904: 0x9040,
	36266 - 11904: 0xF34C,
	36267 - 11904: 0xF34E,
	36268 - 11904: 0xF34B,
	36269 - 11904: 0xF34D,
	36270 - 11904: 0xF4D6,
	36271 - 11904: 0xF654,
	36274 - 11904: 0xF96F,
	36275 - 11904: 0xA8AC,
	36276 - 11904: 0xAD77,
	36277 - 11904: 0xD3E5,
	36278 - 11904: 0xD3E7,
	36279 - 11904: 0xD3E6,
	36281 - 11904: 0xD7D8,
	36282 - 11904: 0xB36C,
	36284 - 11904: 0xD7D6,
	36286 - 11904: 0xB36B,
	36287 - 11904: 0xD7D9,
	36288 - 11904: 0x8AC4,
	36289 - 11904: 0xD7DA,
	36290 - 11904: 0xD7D7,
	36291 - 11904: 0x99E0,
	36293 - 11904: 0xDBFB,
	36294 - 11904: 0xB660,
	36295 - 11904: 0xDBF3,
	36296 - 11904: 0xDBF9,
	36299 - 11904: 0xB65B,
	36300 - 11904: 0xB65E,
	36301 - 11904: 0xDBF2,
	36302 - 11904: 0xB659,
	36303 - 11904: 0xDBF6,
	36304 - 11904: 0xE06C,
	36305 - 11904: 0xB65D,
	36307 - 11904: 0xDBF1,
	36308 - 11904: 0x9FF0,
	36309 - 11904: 0xDBF7,
	36310 - 11904: 0xDBF4,
	36311 - 11904: 0xDBFA,
	36312 - 11904: 0xDBF0,
	36313 - 11904: 0xDBF8,
	36314 - 11904: 0xB65C,
	36315 - 11904: 0xB65F,
	36316 - 11904: 0xDBF5,
	36317 - 11904: 0xB65A,
	36319 - 11904: 0xB8F2,
	36320 - 11904: 0xE068,
	36321 - 11904: 0xB8F1,
	36322 - 11904: 0xE06F,
	36323 - 11904: 0xE06E,
	36324 - 11904: 0xB8F8,
	36326 - 11904: 0xB8F9,
	36327 - 11904: 0xE070,
	36328 - 11904: 0xB8F3,
	36329 - 11904: 0xE06D,
	36330 - 11904: 0xB8F7,
	36331 - 11904: 0xE072,
	36332 - 11904: 0xE069,
	36334 - 11904: 0xE06B,
	36335 - 11904: 0xB8F4,
	36336 - 11904: 0xE067,
	36337 - 11904: 0xE06A,
	36338 - 11904: 0xE071,
	36339 - 11904: 0xB8F5,
	36340 - 11904: 0xE073,
	36346 - 11904: 0xB8F6,
	36348 - 11904: 0xBBB1,
	36349 - 11904: 0xE45B,
	36350 - 11904: 0xE461,
	36351 - 11904: 0xE459,
	36352 - 11904: 0xE462,
	36353 - 11904: 0x9FF3,
	36354 - 11904: 0xE458,
	36355 - 11904: 0xE45D,
	36356 - 11904: 0xE463,
	36357 - 11904: 0xE460,
	36358 - 11904: 0xE45F,
	36359 - 11904: 0xE45E,
	36361 - 11904: 0xE457,
	36362 - 11904: 0xE45C,
	36365 - 11904: 0xE45A,
	36366 - 11904: 0x9DBF,
	36367 - 11904: 0xBDF1,
	36368 - 11904: 0xBDEE,
	36369 - 11904: 0xE7FB,
	36370 - 11904: 0xE841,
	36371 - 11904: 0xE843,
	36372 - 11904: 0xE840,
	36373 - 11904: 0xE7F8,
	36374 - 11904: 0xE7FA,
	36375 - 11904: 0xE845,
	36376 - 11904: 0xE842,
	36377 - 11904: 0xE7FC,
	36378 - 11904: 0xE846,
	36379 - 11904: 0xE7F9,
	36380 - 11904: 0xE844,
	36381 - 11904: 0xBDEF,
	36382 - 11904: 0xBDF5,
	36383 - 11904: 0xBDF3,
	36384 - 11904: 0xE7F3,
	36385 - 11904: 0xBDF4,
	36386 - 11904: 0xBDF0,
	36387 - 11904: 0xE7F4,
	36388 - 11904: 0xE7F6,
	36389 - 11904: 0xE7F5,
	36390 - 11904: 0xE7FD,
	36391 - 11904: 0xE7FE,
	36392 - 11904: 0x9FF6,
	36393 - 11904: 0xBDF2,
	36394 - 11904: 0x95C8,
	36395 - 11904: 0xBDED,
	36397 - 11904: 0x9E5A,
	36398 - 11904: 0xE7F7,
	36400 - 11904: 0xEBC6,
	36401 - 11904: 0xBFE2,
	36403 - 11904: 0xEBBD,
	36404 - 11904: 0xBFE3,
	36405 - 11904: 0xBFE6,
	36406 - 11904: 0xEBC2,
	36408 - 11904: 0xEBBF,
	36409 - 11904: 0xBFE5,
	36410 - 11904: 0x99E3,
	36412 - 11904: 0xEBC3,
	36413 - 11904: 0xEBC4,
	36414 - 11904: 0xEBBE,
	36415 - 11904: 0xEBC7,
	36416 - 11904: 0xEBC0,
	36417 - 11904: 0xEBC5,
	36418 - 11904: 0xBFE4,
	36420 - 11904: 0xBFE1,
	36421 - 11904: 0xEBC1,
	36422 - 11904: 0x8A4A,
	36423 - 11904: 0xEEBF,
	36424 - 11904: 0xC1D0,
	36425 - 11904: 0xC1CE,
	36426 - 11904: 0xC1D1,
	36427 - 11904: 0xC1CF,
	36428 - 11904: 0xEEBE,
	36429 - 11904: 0xEEBB,
	36430 - 11904: 0xEEBA,
	36431 - 11904: 0x9FF1,
	36432 - 11904: 0xEEBD,
	36435 - 11904: 0xEEBC,
	36436 - 11904: 0xF145,
	36437 - 11904: 0xC2DE,
	36438 - 11904: 0xF0FB,
	36439 - 11904: 0xF0FA,
	36441 - 11904: 0xC2D9,
	36442 - 11904: 0xF141,
	36443 - 11904: 0xF140,
	36444 - 11904: 0xF0F7,
	36445 - 11904: 0xF143,
	36446 - 11904: 0xF0FC,
	36447 - 11904: 0xC2DD,
	36448 - 11904: 0xF0F9,
	36449 - 11904: 0xF142,
	36450 - 11904: 0xF0F8,
	36451 - 11904: 0xC2DA,
	36452 - 11904: 0xC2DC,
	36453 - 11904: 0xF0FD,
	36454 - 11904: 0xC2DB,
	36455 - 11904: 0xF0FE,
	36456 - 11904: 0x8AA7,
	36457 - 11904: 0xF144,
	36458 - 11904: 0xF352,
	36460 - 11904: 0xC3DE,
	36461 - 11904: 0xF34F,
	36463 - 11904: 0xF353,
	36465 - 11904: 0x99E6,
	36466 - 11904: 0xC3DB,
	36467 - 11904: 0xF351,
	36468 - 11904: 0xC3E0,
	36469 - 11904: 0x9FF7,
	36470 - 11904: 0xC3DD,
	36471 - 11904: 0x9FED,
	36472 - 11904: 0xF350,
	36474 - 11904: 0xC3DF,
	36475 - 11904: 0xF354,
	36476 - 11904: 0xC3DA,
	36478 - 11904: 0x8A5C,
	36480 - 11904: 0x9DAE,
	36481 - 11904: 0xC4BC,
	36482 - 11904: 0xC4BE,
	36484 - 11904: 0xF4D9,
	36485 - 11904: 0xC4BD,
	36486 - 11904: 0xF4D7,
	36487 - 11904: 0xC3DC,
	36488 - 11904: 0xF4D8,
	36489 - 11904: 0xC4BB,
	36490 - 11904: 0xC543,
	36491 - 11904: 0xC545,
	36492 - 11904: 0xF656,
	36493 - 11904: 0xC544,
	36494 - 11904: 0xF655,
	36496 - 11904: 0xF761,
	36497 - 11904: 0xC5AD,
	36498 - 11904: 0xF760,
	36499 - 11904: 0xC5AE,
	36500 - 11904: 0xF75E,
	36501 - 11904: 0xF75D,
	36502 - 11904: 0xF762,
	36503 - 11904: 0xF763,
	36504 - 11904: 0xF846,
	36506 - 11904: 0xF75F,
	36509 - 11904: 0xF8C6,
	36510 - 11904: 0xF8C3,
	36511 - 11904: 0xF8C4,
	36512 - 11904: 0xF8C5,
	36513 - 11904: 0xC65C,
	36515 - 11904: 0xF951,
	36516 - 11904: 0xF950,
	36517 - 11904: 0xF94F,
	36518 - 11904: 0xF970,
	36519 - 11904: 0x95C9,
	36520 - 11904: 0xF9BE,
	36521 - 11904: 0xF9AB,
	36522 - 11904: 0xC66E,
	36523 - 11904: 0xA8AD,
	36524 - 11904: 0xB060,
	36525 - 11904: 0x9048,
	36528 - 11904: 0x99E8,
	36530 - 11904: 0xB8FA,
	36534 - 11904: 0x9049,
	36537 - 11904: 0x8CBA,
	36538 - 11904: 0xBDF6,
	36540 - 11904: 0x90B1,
	36541 - 11904: 0xEBC8,
	36544 - 11904: 0xC2DF,
	36546 - 11904: 0xF355,
	36547 - 11904: 0x904A,
	36553 - 11904: 0xF9AC,
	36554 - 11904: 0xA8AE,
	36555 - 11904: 0xAAEE,
	36556 - 11904: 0xAD79,
	36557 - 11904: 0xAD78,
	36558 - 11904: 0x99EA,
	36559 - 11904: 0xB063,
	36561 - 11904: 0xD3E8,
	36562 - 11904: 0xB061,
	36563 - 11904: 0xD3E9,
	36564 - 11904: 0xB062,
	36567 - 11904: 0xD7DF,
	36568 - 11904: 0xD7DB,
	36570 - 11904: 0x9BD1,
	36571 - 11904: 0xB36D,
	36572 - 11904: 0xD7DE,
	36573 - 11904: 0xD7DD,
	36574 - 11904: 0xD7DC,
	36575 - 11904: 0xB36E,
	36576 - 11904: 0xD7E0,
	36577 - 11904: 0xD7E1,
	36578 - 11904: 0x99EB,
	36580 - 11904: 0x99EC,
	36581 - 11904: 0xDC43,
	36582 - 11904: 0xDC41,
	36583 - 11904: 0xDC45,
	36584 - 11904: 0xDC46,
	36585 - 11904: 0xDC4C,
	36587 - 11904: 0xDC48,
	36588 - 11904: 0xDC4A,
	36589 - 11904: 0x99ED,
	36590 - 11904: 0xDC42,
	36591 - 11904: 0xDBFC,
	36593 - 11904: 0xDC49,
	36594 - 11904: 0x99EE,
	36596 - 11904: 0xDC4B,
	36597 - 11904: 0xDC44,
	36598 - 11904: 0xDC47,
	36599 - 11904: 0xDBFD,
	36600 - 11904: 0xB662,
	36601 - 11904: 0xDC40,
	36602 - 11904: 0xDBFE,
	36603 - 11904: 0xB661,
	36604 - 11904: 0xB663,
	36606 - 11904: 0xB8FD,
	36607 - 11904: 0xE075,
	36608 - 11904: 0xE077,
	36609 - 11904: 0xE076,
	36610 - 11904: 0xE07B,
	36611 - 11904: 0xB8FB,
	36613 - 11904: 0xE078,
	36614 - 11904: 0xE074,
	36615 - 11904: 0xE079,
	36616 - 11904: 0xE07A,
	36617 - 11904: 0xB8FC,
	36618 - 11904: 0xB8FE,
	36619 - 11904: 0xE07C,
	36621 - 11904: 0xE467,
	36622 - 11904: 0xE466,
	36624 - 11904: 0xE464,
	36625 - 11904: 0xE465,
	36626 - 11904: 0xBBB3,
	36627 - 11904: 0xBBB5,
	36628 - 11904: 0xBBB2,
	36629 - 11904: 0xBBB4,
	36630 - 11904: 0xE84D,
	36631 - 11904: 0xE84E,
	36632 - 11904: 0xE849,
	36633 - 11904: 0x904C,
	36634 - 11904: 0xE84A,
	36635 - 11904: 0xBDF8,
	36636 - 11904: 0xBDFD,
	36637 - 11904: 0xBDF7,
	36638 - 11904: 0xBDFE,
	36639 - 11904: 0xBDF9,
	36640 - 11904: 0xE84B,
	36643 - 11904: 0xE84C,
	36644 - 11904: 0xE848,
	36645 - 11904: 0xBE40,
	36646 - 11904: 0xBDFB,
	36649 - 11904: 0xBDFA,
	36650 - 11904: 0xBDFC,
	36652 - 11904: 0xE847,
	36653 - 11904: 0x904D,
	36654 - 11904: 0xEBCA,
	36655 - 11904: 0xBFE8,
	36656 - 11904: 0x95CB,
	36658 - 11904: 0xEBCC,
	36659 - 11904: 0xBFEA,
	36660 - 11904: 0xEBCF,
	36661 - 11904: 0xEBCB,
	36662 - 11904: 0xEBC9,
	36663 - 11904: 0xEBCE,
	36664 - 11904: 0xBFE9,
	36665 - 11904: 0xEBCD,
	36667 - 11904: 0xBFE7,
	36670 - 11904: 0xC1D3,
	36671 - 11904: 0xC1D6,
	36672 - 11904: 0xEEC1,
	36673 - 11904: 0x97E2,
	36674 - 11904: 0xC1D4,
	36675 - 11904: 0xEEC0,
	36676 - 11904: 0xC1D2,
	36677 - 11904: 0xC1D5,
	36678 - 11904: 0xF146,
	36679 - 11904: 0xF147,
	36680 - 11904: 0xF148,
	36681 - 11904: 0xC2E0,
	36682 - 11904: 0x95CC,
	36683 - 11904: 0xF149,
	36685 - 11904: 0xC2E1,
	36686 - 11904: 0xC3E2,
	36687 - 11904: 0xF358,
	36688 - 11904: 0xF359,
	36689 - 11904: 0xF357,
	36690 - 11904: 0xF356,
	36691 - 11904: 0xF35A,
	36692 - 11904: 0xC3E1,
	36693 - 11904: 0xF4DD,
	36694 - 11904: 0xF4DB,
	36695 - 11904: 0xF4DC,
	36696 - 11904: 0xF4DE,
	36697 - 11904: 0xF4DA,
	36698 - 11904: 0xF4DF,
	36699 - 11904: 0xF658,
	36700 - 11904: 0x9F78,
	36701 - 11904: 0xF659,
	36702 - 11904: 0xF657,
	36703 - 11904: 0xC546,
	36704 - 11904: 0xF764,
	36705 - 11904: 0xC5AF,
	36706 - 11904: 0xF765,
	36707 - 11904: 0xF848,
	36708 - 11904: 0xF847,
	36710 - 11904: 0x897C,
	36711 - 11904: 0x897D,
	36718 - 11904: 0x897E,
	36755 - 11904: 0x995D,
	36763 - 11904: 0xA8AF,
	36764 - 11904: 0xB664,
	36767 - 11904: 0xB940,
	36768 - 11904: 0x9B5A,
	36771 - 11904: 0xBBB6,
	36773 - 11904: 0x9050,
	36774 - 11904: 0xBFEC,
	36775 - 11904: 0x8C4F,
	36776 - 11904: 0xBFEB,
	36781 - 11904: 0xC3E3,
	36782 - 11904: 0xC47C,
	36783 - 11904: 0xC547,
	36784 - 11904: 0xA8B0,
	36785 - 11904: 0xB064,
	36786 - 11904: 0xB941,
	36787 - 11904: 0x9054,
	36788 - 11904: 0xF35B,
	36789 - 11904: 0xC6D6,
	36790 - 11904: 0x9AA8,
	36791 - 11904: 0x99EF,
	36792 - 11904: 0xFEEB,
	36793 - 11904: 0x9DA3,
	36794 - 11904: 0x9DA1,
	36795 - 11904: 0x9943,
	36796 - 11904: 0x9945,
	36798 - 11904: 0x9D7D,
	36799 - 11904: 0xCBA6,
	36801 - 11904: 0x99F0,
	36802 - 11904: 0xA8B1,
	36804 - 11904: 0xA8B4,
	36805 - 11904: 0xA8B3,
	36806 - 11904: 0xA8B2,
	36809 - 11904: 0xCBA5,
	36810 - 11904: 0x99F1,
	36811 - 11904: 0xCDCD,
	36812 - 11904: 0x99F2,
	36813 - 11904: 0xCDCF,
	36814 - 11904: 0xAAEF,
	36815 - 11904: 0x8CBC,
	36816 - 11904: 0x9D60,
	36817 - 11904: 0xAAF1,
	36818 - 11904: 0xCDCC,
	36819 - 11904: 0xCDCE,
	36820 - 11904: 0xAAF0,
	36821 - 11904: 0xCDD1,
	36822 - 11904: 0xCDD0,
	36823 - 11904: 0xCDD2,
	36826 - 11904: 0xA0A3,
	36832 - 11904: 0xD0B6,
	36833 - 11904: 0xD0B4,
	36834 - 11904: 0xAD7C,
	36835 - 11904: 0xD0B3,
	36836 - 11904: 0xADA3,
	36837 - 11904: 0xAD7E,
	36838 - 11904: 0xAD7B,
	36840 - 11904: 0xADA4,
	36842 - 11904: 0xAD7D,
	36843 - 11904: 0xADA2,
	36845 - 11904: 0xADA1,
	36846 - 11904: 0xD0B5,
	36848 - 11904: 0xAD7A,
	36852 - 11904: 0xB06A,
	36853 - 11904: 0xD3EB,
	36854 - 11904: 0xD3F1,
	36855 - 11904: 0xB067,
	36856 - 11904: 0xB06E,
	36857 - 11904: 0x905B,
	36858 - 11904: 0xB069,
	36859 - 11904: 0xD3EE,
	36860 - 11904: 0xD3F0,
	36861 - 11904: 0xB06C,
	36862 - 11904: 0xD3EA,
	36863 - 11904: 0xD3ED,
	36864 - 11904: 0xB068,
	36865 - 11904: 0xB065,
	36866 - 11904: 0xD3EC,
	36867 - 11904: 0xB06B,
	36868 - 11904: 0xD3EF,
	36869 - 11904: 0xB06D,
	36870 - 11904: 0xB066,
	36872 - 11904: 0x9EDB,
	36875 - 11904: 0xD7E3,
	36876 - 11904: 0xD7E6,
	36877 - 11904: 0xB370,
	36879 - 11904: 0xB37A,
	36880 - 11904: 0xB376,
	36881 - 11904: 0xD7E4,
	36882 - 11904: 0x9D79,
	36884 - 11904: 0xB37E,
	36885 - 11904: 0xB377,
	36886 - 11904: 0xB37C,
	36887 - 11904: 0xB372,
	36889 - 11904: 0xB36F,
	36890 - 11904: 0xB371,
	36891 - 11904: 0xB37D,
	36892 - 11904: 0xD7E5,
	36893 - 11904: 0xB375,
	36894 - 11904: 0xB378,
	36895 - 11904: 0xB374,
	36896 - 11904: 0xB379,
	36897 - 11904: 0xD7E7,
	36898 - 11904: 0xB37B,
	36899 - 11904: 0xB373,
	36900 - 11904: 0xD7E2,
	36909 - 11904: 0xDC4D,
	36910 - 11904: 0xB665,
	36911 - 11904: 0xDC4F,
	36913 - 11904: 0xB667,
	36914 - 11904: 0xB669,
	36915 - 11904: 0x99F3,
	36916 - 11904: 0xDC4E,
	36917 - 11904: 0xB666,
	36918 - 11904: 0xB66A,
	36919 - 11904: 0x9062,
	36920 - 11904: 0xB668,
	36924 - 11904: 0xB947,
	36925 - 11904: 0xE0A3,
	36926 - 11904: 0xB94F,
	36927 - 11904: 0xE07E,
	36929 - 11904: 0xB950,
	36930 - 11904: 0xB945,
	36932 - 11904: 0xE0A1,
	36934 - 11904: 0x87BD,
	36935 - 11904: 0xB94A,
	36937 - 11904: 0xE0A2,
	36938 - 11904: 0xB943,
	36939 - 11904: 0xB942,
	36940 - 11904: 0x9F55,
	36941 - 11904: 0xB94D,
	36942 - 11904: 0xB94C,
	36943 - 11904: 0xB94B,
	36944 - 11904: 0xB949,
	36945 - 11904: 0xB94E,
	36946 - 11904: 0xE07D,
	36947 - 11904: 0xB944,
	36948 - 11904: 0xB946,
	36949 - 11904: 0xB948,
	36950 - 11904: 0x9BF9,
	36952 - 11904: 0xBBB8,
	36953 - 11904: 0xBBBB,
	36955 - 11904: 0xBBBF,
	36956 - 11904: 0xBBB9,
	36957 - 11904: 0xBBBE,
	36958 - 11904: 0xBBBC,
	36960 - 11904: 0xBBB7,
	36961 - 11904: 0x9065,
	36962 - 11904: 0xBBBD,
	36963 - 11904: 0xBBBA,
	36964 - 11904: 0x96E0,
	36967 - 11904: 0xE852,
	36968 - 11904: 0xBE43,
	36969 - 11904: 0xBE41,
	36971 - 11904: 0xE853,
	36972 - 11904: 0x98BE,
	36973 - 11904: 0xBE44,
	36974 - 11904: 0xBE42,
	36975 - 11904: 0xE851,
	36976 - 11904: 0xE850,
	36978 - 11904: 0xBFF0,
	36979 - 11904: 0xE84F,
	36980 - 11904: 0xBFEE,
	36981 - 11904: 0xBFED,
	36982 - 11904: 0xEBD0,
	36983 - 11904: 0xBE45,
	36984 - 11904: 0xBFEF,
	36985 - 11904: 0xEBD1,
	36986 - 11904: 0xBFF2,
	36987 - 11904: 0xEBD2,
	36988 - 11904: 0xBFF1,
	36989 - 11904: 0xC1D8,
	36990 - 11904: 0xEEC3,
	36991 - 11904: 0xC1D7,
	36992 - 11904: 0xC1DC,
	36993 - 11904: 0xC1DA,
	36994 - 11904: 0xC1DB,
	36995 - 11904: 0xC2E3,
	36996 - 11904: 0xC1D9,
	36997 - 11904: 0xEEC2,
	36998 - 11904: 0xEBD3,
	36999 - 11904: 0xC2E2,
	37000 - 11904: 0xC2E4,
	37002 - 11904: 0xC3E4,
	37003 - 11904: 0xC3E5,
	37005 - 11904: 0xF4E0,
	37007 - 11904: 0xC5DE,
	37008 - 11904: 0xC5DD,
	37009 - 11904: 0xA8B6,
	37012 - 11904: 0xCA55,
	37013 - 11904: 0xB06F,
	37015 - 11904: 0xCA52,
	37016 - 11904: 0xCA53,
	37017 - 11904: 0xCA51,
	37019 - 11904: 0xCA54,
	37022 - 11904: 0xCBAA,
	37023 - 11904: 0xCBA7,
	37024 - 11904: 0xCBAC,
	37025 - 11904: 0xCBA8,
	37026 - 11904: 0xA8B7,
	37027 - 11904: 0xA8BA,
	37029 - 11904: 0xCBA9,
	37030 - 11904: 0xA8B9,
	37031 - 11904: 0xCBAB,
	37032 - 11904: 0x9068,
	37034 - 11904: 0xA8B8,
	37038 - 11904: 0x906C,
	37039 - 11904: 0xCDD5,
	37040 - 11904: 0xCDD7,
	37041 - 11904: 0xAAF4,
	37042 - 11904: 0xCDD3,
	37043 - 11904: 0xCDD6,
	37044 - 11904: 0xCDD4,
	37045 - 11904: 0xAAF2,
	37046 - 11904: 0xAAF5,
	37048 - 11904: 0xAAF3,
	37051 - 11904: 0x95D8,
	37053 - 11904: 0xD0B8,
	37054 - 11904: 0xD0BC,
	37055 - 11904: 0xD0B9,
	37057 - 11904: 0xADA7,
	37059 - 11904: 0xADA8,
	37060 - 11904: 0x906A,
	37061 - 11904: 0xD0BB,
	37063 - 11904: 0xD0BD,
	37064 - 11904: 0xD0BF,
	37066 - 11904: 0xADA5,
	37067 - 11904: 0xD0BE,
	37070 - 11904: 0xADA6,
	37076 - 11904: 0xD7EE,
	37077 - 11904: 0xD0BA,
	37078 - 11904: 0xD3F2,
	37079 - 11904: 0xD3FB,
	37080 - 11904: 0xD3F9,
	37081 - 11904: 0xD3F4,
	37082 - 11904: 0xD3F5,
	37083 - 11904: 0xD3FA,
	37084 - 11904: 0xD3FC,
	37085 - 11904: 0xB071,
	37087 - 11904: 0xD3F7,
	37088 - 11904: 0xD3F3,
	37089 - 11904: 0xB070,
	37090 - 11904: 0xB072,
	37091 - 11904: 0xD3F6,
	37092 - 11904: 0xD3FD,
	37093 - 11904: 0xD3F8,
	37096 - 11904: 0xB3A1,
	37097 - 11904: 0xD7F1,
	37098 - 11904: 0xD7E9,
	37099 - 11904: 0xD7EF,
	37100 - 11904: 0xD7F0,
	37101 - 11904: 0xB3A2,
	37103 - 11904: 0xD7E8,
	37104 - 11904: 0xD7EA,
	37105 - 11904: 0xD0B7,
	37106 - 11904: 0xD7EC,
	37107 - 11904: 0xD7ED,
	37108 - 11904: 0xD7EB,
	37109 - 11904: 0xB66C,
	37113 - 11904: 0xDC56,
	37114 - 11904: 0xEBD4,
	37115 - 11904: 0xDC57,
	37116 - 11904: 0xDC54,
	37117 - 11904: 0xB3A3,
	37118 - 11904: 0xB66E,
	37119 - 11904: 0xDC53,
	37120 - 11904: 0xDC59,
	37121 - 11904: 0xDC58,
	37122 - 11904: 0xB66B,
	37123 - 11904: 0xDC5C,
	37124 - 11904: 0xDC52,
	37125 - 11904: 0xDC5B,
	37126 - 11904: 0xDC50,
	37127 - 11904: 0xDC5A,
	37128 - 11904: 0xDC55,
	37129 - 11904: 0xB66D,
	37131 - 11904: 0xE0AA,
	37133 - 11904: 0xE0A5,
	37134 - 11904: 0xE0AB,
	37135 - 11904: 0xE0A6,
	37136 - 11904: 0xE0A4,
	37137 - 11904: 0xE0A7,
	37138 - 11904: 0xB951,
	37140 - 11904: 0xE0A9,
	37142 - 11904: 0xE0A8,
	37143 - 11904: 0xB952,
	37144 - 11904: 0xBBC1,
	37145 - 11904: 0xBBC0,
	37146 - 11904: 0xE46E,
	37147 - 11904: 0xE471,
	37148 - 11904: 0xE469,
	37149 - 11904: 0xE46D,
	37150 - 11904: 0xBBC2,
	37151 - 11904: 0xE46C,
	37152 - 11904: 0xE46A,
	37153 - 11904: 0xE470,
	37154 - 11904: 0xE46B,
	37155 - 11904: 0xE468,
	37156 - 11904: 0xE46F,
	37158 - 11904: 0xE859,
	37159 - 11904: 0xBE48,
	37160 - 11904: 0xF14A,
	37161 - 11904: 0xE856,
	37162 - 11904: 0xE857,
	37163 - 11904: 0xE855,
	37164 - 11904: 0xDC51,
	37165 - 11904: 0xBE47,
	37166 - 11904: 0xE85A,
	37167 - 11904: 0xE854,
	37168 - 11904: 0xBE46,
	37169 - 11904: 0xBE49,
	37170 - 11904: 0xE858,
	37171 - 11904: 0xEBD5,
	37172 - 11904: 0xBFF3,
	37173 - 11904: 0xEBD6,
	37174 - 11904: 0xEBD7,
	37176 - 11904: 0xEEC4,
	37177 - 11904: 0xC1DD,
	37178 - 11904: 0xF14B,
	37179 - 11904: 0xF14C,
	37182 - 11904: 0xF14D,
	37183 - 11904: 0xF35D,
	37184 - 11904: 0xF35C,
	37185 - 11904: 0xF4E2,
	37187 - 11904: 0xF4E1,
	37188 - 11904: 0xF65B,
	37189 - 11904: 0xF65C,
	37190 - 11904: 0xF65A,
	37191 - 11904: 0xF766,
	37192 - 11904: 0xC5B0,
	37193 - 11904: 0xA8BB,
	37194 - 11904: 0xADAA,
	37195 - 11904: 0xADA9,
	37196 - 11904: 0xB075,
	37197 - 11904: 0xB074,
	37198 - 11904: 0xD440,
	37199 - 11904: 0xD441,
	37200 - 11904: 0xD3FE,
	37201 - 11904: 0x9FB2,
	37202 - 11904: 0xB073,
	37203 - 11904: 0xD7F5,
	37205 - 11904: 0xD7F6,
	37206 - 11904: 0xD7F2,
	37207 - 11904: 0xB3A4,
	37208 - 11904: 0xD7F3,
	37209 - 11904: 0x9FAE,
	37210 - 11904: 0xD7F4,
	37212 - 11904: 0x9FB0,
	37214 - 11904: 0x89AD,
	37215 - 11904: 0xDC5F,
	37216 - 11904: 0xDC61,
	37217 - 11904: 0xDC5D,
	37218 - 11904: 0xDC60,
	37219 - 11904: 0xB66F,
	37220 - 11904: 0xDC5E,
	37221 - 11904: 0xB670,
	37223 - 11904: 0x906E,
	37224 - 11904: 0xDD73,
	37225 - 11904: 0xB955,
	37226 - 11904: 0xB954,
	37228 - 11904: 0xB953,
	37230 - 11904: 0xE0AC,
	37231 - 11904: 0xE0AD,
	37232 - 11904: 0x9E71,
	37234 - 11904: 0xE473,
	37235 - 11904: 0xE475,
	37236 - 11904: 0xBBC6,
	37237 - 11904: 0xBBC3,
	37238 - 11904: 0x9E4A,
	37239 - 11904: 0xBBC5,
	37240 - 11904: 0xBBC4,
	37241 - 11904: 0xE474,
	37242 - 11904: 0xE472,
	37244 - 11904: 0x9FDC,
	37248 - 11904: 0xE861,
	37249 - 11904: 0xE85E,
	37250 - 11904: 0xE85F,
	37251 - 11904: 0xBE4D,
	37252 - 11904: 0xE860,
	37253 - 11904: 0xE85B,
	37254 - 11904: 0xE85C,
	37255 - 11904: 0xBE4A,
	37257 - 11904: 0xBE4B,
	37258 - 11904: 0xE85D,
	37259 - 11904: 0xBE4C,
	37260 - 11904: 0x89AB,
	37261 - 11904: 0xEBDB,
	37262 - 11904: 0x9FB8,
	37263 - 11904: 0xEBDC,
	37264 - 11904: 0xEBD9,
	37265 - 11904: 0xEBDA,
	37266 - 11904: 0xBFF4,
	37267 - 11904: 0xEBD8,
	37273 - 11904: 0xEEC8,
	37274 - 11904: 0xEEC5,
	37275 - 11904: 0xEEC7,
	37276 - 11904: 0xC1E0,
	37277 - 11904: 0xEECB,
	37278 - 11904: 0xC1DF,
	37279 - 11904: 0xEEC9,
	37280 - 11904: 0xEECC,
	37281 - 11904: 0xEECA,
	37282 - 11904: 0xEEC6,
	37283 - 11904: 0xC1DE,
	37285 - 11904: 0xF14F,
	37287 - 11904: 0xF150,
	37288 - 11904: 0xF14E,
	37289 - 11904: 0x9070,
	37290 - 11904: 0xF152,
	37291 - 11904: 0xC2E5,
	37292 - 11904: 0xC2E6,
	37293 - 11904: 0xF35F,
	37294 - 11904: 0xC3E7,
	37295 - 11904: 0xF151,
	37296 - 11904: 0xF35E,
	37297 - 11904: 0xC3E6,
	37298 - 11904: 0xF4E5,
	37299 - 11904: 0xF4E6,
	37300 - 11904: 0xC4BF,
	37301 - 11904: 0xF4E4,
	37302 - 11904: 0x8B63,
	37303 - 11904: 0xF4E3,
	37305 - 11904: 0xF65D,
	37306 - 11904: 0xC548,
	37307 - 11904: 0x95DC,
	37308 - 11904: 0xF849,
	37309 - 11904: 0xF8C8,
	37310 - 11904: 0xF8C7,
	37312 - 11904: 0xC643,
	37313 - 11904: 0xC65D,
	37314 - 11904: 0xF8C9,
	37315 - 11904: 0xF971,
	37316 - 11904: 0x9071,
	37317 - 11904: 0xC66F,
	37318 - 11904: 0xA8BC,
	37319 - 11904: 0xAAF6,
	37321 - 11904: 0xB956,
	37323 - 11904: 0xC4C0,
	37324 - 11904: 0xA8BD,
	37325 - 11904: 0xADAB,
	37326 - 11904: 0xB3A5,
	37327 - 11904: 0xB671,
	37328 - 11904: 0xC2E7,
	37329 - 11904: 0xAAF7,
	37331 - 11904: 0xD0C1,
	37332 - 11904: 0xD0C0,
	37333 - 11904: 0xD442,
	37334 - 11904: 0xFC5E,
	37335 - 11904: 0xB078,
	37336 - 11904: 0xB076,
	37337 - 11904: 0xB07A,
	37338 - 11904: 0xD444,
	37340 - 11904: 0xB079,
	37341 - 11904: 0xB077,
	37343 - 11904: 0x8949,
	37346 - 11904: 0xD443,
	37347 - 11904: 0xB3A8,
	37348 - 11904: 0xD7FC,
	37349 - 11904: 0x965B,
	37350 - 11904: 0xB3A7,
	37351 - 11904: 0xB3A9,
	37352 - 11904: 0xD842,
	37353 - 11904: 0xB3AB,
	37354 - 11904: 0xD7FE,
	37355 - 11904: 0xD840,
	37356 - 11904: 0xD7F7,
	37357 - 11904: 0xB3AA,
	37358 - 11904: 0xD843,
	37361 - 11904: 0xD7F9,
	37363 - 11904: 0xD7FA,
	37364 - 11904: 0xD7F8,
	37365 - 11904: 0xB3A6,
	37366 - 11904: 0x8C50,
	37367 - 11904: 0xD841,
	37368 - 11904: 0xD7FB,
	37369 - 11904: 0xD7FD,
	37370 - 11904: 0x94A6,
	37373 - 11904: 0xDC6D,
	37374 - 11904: 0x8FD5,
	37375 - 11904: 0xDC6C,
	37376 - 11904: 0xDC6A,
	37377 - 11904: 0xDC62,
	37378 - 11904: 0xDC71,
	37379 - 11904: 0xDC65,
	37380 - 11904: 0xDC6F,
	37381 - 11904: 0xDC76,
	37382 - 11904: 0xDC6E,
	37383 - 11904: 0xB679,
	37384 - 11904: 0x9E73,
	37385 - 11904: 0xB675,
	37386 - 11904: 0xDC63,
	37388 - 11904: 0xDC69,
	37389 - 11904: 0xB677,
	37390 - 11904: 0x9075,
	37391 - 11904: 0xDC68,
	37392 - 11904: 0xB678,
	37393 - 11904: 0xB67A,
	37394 - 11904: 0xDC6B,
	37395 - 11904: 0x99F7,
	37396 - 11904: 0xB672,
	37397 - 11904: 0xB673,
	37398 - 11904: 0xDC77,
	37399 - 11904: 0xDC75,
	37400 - 11904: 0x87B2,
	37401 - 11904: 0xDC74,
	37402 - 11904: 0xDC66,
	37404 - 11904: 0xDC72,
	37406 - 11904: 0xB676,
	37409 - 11904: 0x8CBF,
	37411 - 11904: 0xB674,
	37412 - 11904: 0xDC73,
	37413 - 11904: 0xDC64,
	37414 - 11904: 0xDC67,
	37415 - 11904: 0xDC70,
	37416 - 11904: 0x99F9,
	37418 - 11904: 0x9663,
	37419 - 11904: 0x95B9,
	37421 - 11904: 0xE4BA,
	37422 - 11904: 0xE0B7,
	37424 - 11904: 0xE0B0,
	37425 - 11904: 0xE0C3,
	37426 - 11904: 0xE0CC,
	37427 - 11904: 0xE0B3,
	37428 - 11904: 0xB961,
	37429 - 11904: 0x94D4,
	37430 - 11904: 0xE0C0,
	37431 - 11904: 0xB957,
	37432 - 11904: 0xB959,
	37433 - 11904: 0xB965,
	37434 - 11904: 0xE0B1,
	37436 - 11904: 0xFCFA,
	37437 - 11904: 0xB95A,
	37438 - 11904: 0xB95C,
	37439 - 11904: 0xB966,
	37440 - 11904: 0xB95B,
	37441 - 11904: 0x9077,
	37444 - 11904: 0x90AB,
	37445 - 11904: 0xB964,
	37446 - 11904: 0xE0B9,
	37448 - 11904: 0xE0AE,
	37449 - 11904: 0xB962,
	37450 - 11904: 0xE0B8,
	37451 - 11904: 0xB95E,
	37452 - 11904: 0xE0CA,
	37453 - 11904: 0xB963,
	37454 - 11904: 0xE0C8,
	37455 - 11904: 0xE0BC,
	37456 - 11904: 0xE0C6,
	37457 - 11904: 0xB960,
	37458 - 11904: 0xE0AF,
	37459 - 11904: 0xE0C9,
	37460 - 11904: 0xE0C4,
	37461 - 11904: 0x9D4D,
	37462 - 11904: 0xE0CB,
	37463 - 11904: 0xB958,
	37464 - 11904: 0x99FA,
	37466 - 11904: 0xB967,
	37467 - 11904: 0xB95D,
	37469 - 11904: 0x92E3,
	37470 - 11904: 0xE0B5,
	37471 - 11904: 0x97BB,
	37472 - 11904: 0xE0BD,
	37473 - 11904: 0xE0C1,
	37474 - 11904: 0x9078,
	37475 - 11904: 0xE0C5,
	37476 - 11904: 0xB95F,
	37477 - 11904: 0xE0B4,
	37478 - 11904: 0xE0B2,
	37479 - 11904: 0xE0BE,
	37483 - 11904: 0x99FB,
	37484 - 11904: 0xE0BB,
	37485 - 11904: 0xE0BA,
	37486 - 11904: 0x97E0,
	37487 - 11904: 0xE0BF,
	37488 - 11904: 0xE0C2,
	37490 - 11904: 0xE0C7,
	37494 - 11904: 0xE478,
	37495 - 11904: 0x96DC,
	37496 - 11904: 0xBBC7,
	37497 - 11904: 0xE4A4,
	37498 - 11904: 0xE47A,
	37499 - 11904: 0xBBCC,
	37500 - 11904: 0xBBD0,
	37501 - 11904: 0xE4AD,
	37502 - 11904: 0xE4B5,
	37503 - 11904: 0xE4A6,
	37504 - 11904: 0xBBC8,
	37505 - 11904: 0x9CA8,
	37506 - 11904: 0xE4AA,
	37507 - 11904: 0xE0B6,
	37508 - 11904: 0x9772,
	37509 - 11904: 0xBBC9,
	37510 - 11904: 0xE4B1,
	37511 - 11904: 0xE4B6,
	37512 - 11904: 0xE4AE,
	37513 - 11904: 0x9440,
	37514 - 11904: 0xE4B0,
	37515 - 11904: 0xE4B9,
	37516 - 11904: 0xE4B2,
	37517 - 11904: 0xE47E,
	37518 - 11904: 0xE4A9,
	37519 - 11904: 0x92F2,
	37521 - 11904: 0xBBD1,
	37523 - 11904: 0xBBCD,
	37524 - 11904: 0xE47C,
	37525 - 11904: 0xE4AB,
	37526 - 11904: 0xBBCB,
	37527 - 11904: 0xE4A5,
	37528 - 11904: 0xBBCA,
	37529 - 11904: 0xE4B3,
	37530 - 11904: 0xE4A2,
	37531 - 11904: 0xE479,
	37532 - 11904: 0xBBCE,
	37533 - 11904: 0xE4B8,
	37536 - 11904: 0xE47B,
	37537 - 11904: 0xE4AF,
	37538 - 11904: 0xE4AC,
	37539 - 11904: 0xE4A7,
	37540 - 11904: 0xE477,
	37541 - 11904: 0xE476,
	37542 - 11904: 0xE4A1,
	37543 - 11904: 0xE4B4,
	37544 - 11904: 0xBBCF,
	37545 - 11904: 0xE4B7,
	37546 - 11904: 0xE47D,
	37547 - 11904: 0xE4A3,
	37548 - 11904: 0xBE52,
	37550 - 11904: 0x99FD,
	37553 - 11904: 0x99FC,
	37554 - 11904: 0xBE5A,
	37555 - 11904: 0xBE55,
	37556 - 11904: 0xE8A4,
	37557 - 11904: 0xE8A1,
	37558 - 11904: 0xE867,
	37559 - 11904: 0xBE50,
	37561 - 11904: 0xF9D7,
	37562 - 11904: 0x964A,
	37563 - 11904: 0xBE4F,
	37564 - 11904: 0xBE56,
	37566 - 11904: 0x96D8,
	37567 - 11904: 0x99FE,
	37568 - 11904: 0xE865,
	37569 - 11904: 0xBE54,
	37570 - 11904: 0xE871,
	37571 - 11904: 0xE863,
	37572 - 11904: 0xE864,
	37573 - 11904: 0xBE4E,
	37574 - 11904: 0xE8A3,
	37575 - 11904: 0xBE58,
	37576 - 11904: 0xE874,
	37577 - 11904: 0xE879,
	37578 - 11904: 0xE873,
	37579 - 11904: 0xEBEE,
	37580 - 11904: 0xE86F,
	37581 - 11904: 0xE877,
	37582 - 11904: 0xE875,
	37583 - 11904: 0xE868,
	37584 - 11904: 0xE862,
	37585 - 11904: 0xE87D,
	37586 - 11904: 0xBE57,
	37587 - 11904: 0xE87E,
	37588 - 11904: 0x904B,
	37589 - 11904: 0xE878,
	37591 - 11904: 0xE86D,
	37592 - 11904: 0xE86B,
	37593 - 11904: 0xE866,
	37595 - 11904: 0xFA41,
	37597 - 11904: 0xE86E,
	37598 - 11904: 0xE87B,
	37599 - 11904: 0xE86A,
	37600 - 11904: 0xE87A,
	37601 - 11904: 0xE8A2,
	37603 - 11904: 0x9A40,
	37604 - 11904: 0xBE53,
	37605 - 11904: 0x975B,
	37606 - 11904: 0xE876,
	37607 - 11904: 0xE87C,
	37608 - 11904: 0xE872,
	37609 - 11904: 0xE86C,
	37610 - 11904: 0xBE51,
	37611 - 11904: 0x9A41,
	37612 - 11904: 0x91DD,
	37614 - 11904: 0xE4A8,
	37615 - 11904: 0xE870,
	37616 - 11904: 0xBE59,
	37617 - 11904: 0xE869,
	37618 - 11904: 0x93FC,
	37619 - 11904: 0x9A42,
	37620 - 11904: 0x9A43,
	37622 - 11904: 0x9659,
	37623 - 11904: 0xEBF4,
	37624 - 11904: 0xBFF7,
	37625 - 11904: 0xEBF3,
	37626 - 11904: 0xEBF0,
	37627 - 11904: 0xEC44,
	37628 - 11904: 0xBFFB,
	37629 - 11904: 0x9A44,
	37630 - 11904: 0xEC41,
	37631 - 11904: 0xEBF8,
	37632 - 11904: 0xEC43,
	37633 - 11904: 0xEBE9,
	37634 - 11904: 0xEBF6,
	37635 - 11904: 0x9051,
	37636 - 11904: 0xBFFD,
	37638 - 11904: 0xEBE1,
	37639 - 11904: 0x94BF,
	37640 - 11904: 0xEBDF,
	37641 - 11904: 0xEC42,
	37643 - 11904: 0xEC40,
	37644 - 11904: 0xEBFE,
	37645 - 11904: 0xEBED,
	37646 - 11904: 0xEBEC,
	37647 - 11904: 0xEBE2,
	37648 - 11904: 0xC040,
	37650 - 11904: 0xEBE8,
	37651 - 11904: 0xEBF2,
	37652 - 11904: 0xEBFD,
	37653 - 11904: 0xC043,
	37654 - 11904: 0xEC45,
	37656 - 11904: 0xC1E8,
	37657 - 11904: 0xC045,
	37658 - 11904: 0xBFFE,
	37659 - 11904: 0xEBE6,
	37661 - 11904: 0xEBEF,
	37662 - 11904: 0xEBDE,
	37663 - 11904: 0xEBE0,
	37664 - 11904: 0xBFF5,
	37665 - 11904: 0xC042,
	37666 - 11904: 0xBFFA,
	37667 - 11904: 0xEBE7,
	37668 - 11904: 0xEBF7,
	37669 - 11904: 0xEBF1,
	37670 - 11904: 0xC041,
	37671 - 11904: 0xEBDD,
	37672 - 11904: 0xC1E3,
	37673 - 11904: 0xEBF9,
	37674 - 11904: 0xEBFC,
	37675 - 11904: 0xBFFC,
	37676 - 11904: 0x90A2,
	37677 - 11904: 0xEBEB,
	37678 - 11904: 0xC044,
	37679 - 11904: 0xBFF9,
	37680 - 11904: 0x9CAB,
	37681 - 11904: 0x9776,
	37683 - 11904: 0xBFF8,
	37684 - 11904: 0xEBF5,
	37685 - 11904: 0xEBFB,
	37686 - 11904: 0xBFF6,
	37688 - 11904: 0xEBE4,
	37689 - 11904: 0xEBFA,
	37692 - 11904: 0xEBE5,
	37696 - 11904: 0xFC55,
	37697 - 11904: 0xFE45,
	37698 - 11904: 0x94A8,
	37699 - 11904: 0x9A45,
	37700 - 11904: 0xFA4B,
	37701 - 11904: 0x9DE1,
	37702 - 11904: 0xEBEA,
	37703 - 11904: 0xEED2,
	37704 - 11904: 0x96D9,
	37705 - 11904: 0xEED7,
	37706 - 11904: 0xC1E5,
	37707 - 11904: 0xC1E7,
	37708 - 11904: 0xEEDD,
	37709 - 11904: 0xC1E1,
	37710 - 11904: 0xEEEC,
	37711 - 11904: 0xEEE3,
	37712 - 11904: 0xEED8,
	37713 - 11904: 0xEED9,
	37714 - 11904: 0xEEE2,
	37716 - 11904: 0xC1EE,
	37717 - 11904: 0xEEE1,
	37718 - 11904: 0xEED1,
	37719 - 11904: 0xEEE0,
	37720 - 11904: 0xEED4,
	37721 - 11904: 0xEEED,
	37722 - 11904: 0xC1ED,
	37723 - 11904: 0xC1EB,
	37724 - 11904: 0xEED5,
	37726 - 11904: 0xEEE8,
	37727 - 11904: 0x9774,
	37728 - 11904: 0xEEDA,
	37729 - 11904: 0xEEE7,
	37730 - 11904: 0xFDF5,
	37731 - 11904: 0xEEE9,
	37732 - 11904: 0xEED0,
	37733 - 11904: 0xC1E6,
	37734 - 11904: 0x92E5,
	37735 - 11904: 0xEEEA,
	37736 - 11904: 0x9645,
	37737 - 11904: 0x91DA,
	37738 - 11904: 0xEEDE,
	37739 - 11904: 0x90A3,
	37740 - 11904: 0xC1EA,
	37741 - 11904: 0xEEDB,
	37742 - 11904: 0xA05F,
	37744 - 11904: 0xC1EC,
	37745 - 11904: 0xEEE4,
	37747 - 11904: 0x90AF,
	37748 - 11904: 0x97BF,
	37749 - 11904: 0xC1E4,
	37750 - 11904: 0xEED6,
	37751 - 11904: 0xEEE5,
	37752 - 11904: 0x914C,
	37753 - 11904: 0xEEDF,
	37754 - 11904: 0xEBE3,
	37755 - 11904: 0xEEE6,
	37756 - 11904: 0xEED3,
	37757 - 11904: 0x967A,
	37758 - 11904: 0xC1E9,
	37760 - 11904: 0xEEEB,
	37761 - 11904: 0x91DE,
	37762 - 11904: 0xC1E2,
	37763 - 11904: 0xEECE,
	37764 - 11904: 0x9A46,
	37765 - 11904: 0xFEB0,
	37766 - 11904: 0x9779,
	37767 - 11904: 0x946C,
	37768 - 11904: 0xF160,
	37769 - 11904: 0xF159,
	37770 - 11904: 0xC2E9,
	37772 - 11904: 0xF154,
	37773 - 11904: 0xF163,
	37774 - 11904: 0xF15B,
	37775 - 11904: 0xEEDC,
	37776 - 11904: 0x9858,
	37777 - 11904: 0xF165,
	37778 - 11904: 0xF155,
	37780 - 11904: 0xC2E8,
	37781 - 11904: 0xF15F,
	37782 - 11904: 0xC2EA,
	37783 - 11904: 0xC2F2,
	37784 - 11904: 0xC2F0,
	37785 - 11904: 0xF161,
	37786 - 11904: 0xC2F1,
	37787 - 11904: 0xF157,
	37788 - 11904: 0x9266,
	37789 - 11904: 0xF158,
	37790 - 11904: 0xF15D,
	37791 - 11904: 0xF162,
	37792 - 11904: 0x93FB,
	37793 - 11904: 0xEECD,
	37794 - 11904: 0xC2EB,
	37795 - 11904: 0xF16A,
	37796 - 11904: 0xF167,
	37797 - 11904: 0xF16B,
	37798 - 11904: 0xF15E,
	37799 - 11904: 0xF15A,
	37800 - 11904: 0xF168,
	37801 - 11904: 0xF36A,
	37802 - 11904: 0xF15C,
	37804 - 11904: 0xC2EE,
	37805 - 11904: 0x9A47,
	37806 - 11904: 0xC2ED,
	37807 - 11904: 0xEECF,
	37808 - 11904: 0xC2EF,
	37809 - 11904: 0xF164,
	37810 - 11904: 0xF166,
	37811 - 11904: 0xC2EC,
	37812 - 11904: 0xF169,
	37813 - 11904: 0xF153,
	37815 - 11904: 0xF156,
	37816 - 11904: 0x9749,
	37819 - 11904: 0x9748,
	37821 - 11904: 0x934A,
	37823 - 11904: 0x9CE2,
	37824 - 11904: 0xF373,
	37826 - 11904: 0xF363,
	37827 - 11904: 0xC3EB,
	37828 - 11904: 0xF371,
	37830 - 11904: 0x9264,
	37831 - 11904: 0xF361,
	37832 - 11904: 0xC3EC,
	37834 - 11904: 0xF36C,
	37835 - 11904: 0x91DF,
	37836 - 11904: 0xF368,
	37837 - 11904: 0xC3F1,
	37838 - 11904: 0xF372,
	37839 - 11904: 0xF362,
	37840 - 11904: 0xF365,
	37841 - 11904: 0xC3E9,
	37842 - 11904: 0xF374,
	37843 - 11904: 0xFB79,
	37844 - 11904: 0xF36D,
	37845 - 11904: 0xF370,
	37846 - 11904: 0xC3EF,
	37847 - 11904: 0xC3F4,
	37848 - 11904: 0xC3F2,
	37849 - 11904: 0xF369,
	37850 - 11904: 0xF364,
	37851 - 11904: 0x96D7,
	37852 - 11904: 0xC3ED,
	37853 - 11904: 0xC3EE,
	37854 - 11904: 0xF360,
	37855 - 11904: 0xC3EA,
	37856 - 11904: 0x9343,
	37857 - 11904: 0xC3E8,
	37858 - 11904: 0xC3F0,
	37859 - 11904: 0xF36F,
	37860 - 11904: 0xC3F3,
	37862 - 11904: 0xF36B,
	37863 - 11904: 0xF375,
	37864 - 11904: 0xC3F5,
	37868 - 11904: 0xF367,
	37870 - 11904: 0xF36E,
	37872 - 11904: 0xFDCB,
	37873 - 11904: 0xFE7A,
	37875 - 11904: 0x91DB,
	37876 - 11904: 0x8C6A,
	37877 - 11904: 0xF4F3,
	37878 - 11904: 0xF542,
	37879 - 11904: 0xF4F5,
	37880 - 11904: 0xF4FC,
	37881 - 11904: 0xF366,
	37882 - 11904: 0xF4FA,
	37883 - 11904: 0xF4E9,
	37884 - 11904: 0xF540,
	37885 - 11904: 0xC4C3,
	37886 - 11904: 0xF4ED,
	37887 - 11904: 0xF4FE,
	37888 - 11904: 0xF4F4,
	37889 - 11904: 0x97AF,
	37891 - 11904: 0xC4C2,
	37892 - 11904: 0x95DD,
	37894 - 11904: 0xF544,
	37895 - 11904: 0xF4F6,
	37896 - 11904: 0x9348,
	37897 - 11904: 0xF4FB,
	37898 - 11904: 0xF4FD,
	37899 - 11904: 0xF4E7,
	37900 - 11904: 0xF541,
	37901 - 11904: 0xF4F2,
	37902 - 11904: 0xF4F7,
	37903 - 11904: 0xF4EB,
	37904 - 11904: 0xF4EF,
	37905 - 11904: 0xF543,
	37906 - 11904: 0xF4F9,
	37907 - 11904: 0xF4E8,
	37908 - 11904: 0xF4EC,
	37909 - 11904: 0xF4EE,
	37910 - 11904: 0xF4F8,
	37911 - 11904: 0x9A4B,
	37912 - 11904: 0xC4C1,
	37913 - 11904: 0xF4F1,
	37915 - 11904: 0xFC45,
	37917 - 11904: 0x9A4D,
	37920 - 11904: 0xF4EA,
	37924 - 11904: 0x91BC,
	37925 - 11904: 0x90E2,
	37926 - 11904: 0x90B4,
	37927 - 11904: 0x95E1,
	37928 - 11904: 0xF4F0,
	37929 - 11904: 0xF661,
	37930 - 11904: 0xF666,
	37931 - 11904: 0xC54F,
	37932 - 11904: 0xF668,
	37933 - 11904: 0x9A4E,
	37934 - 11904: 0xC549,
	37935 - 11904: 0x87AD,
	37936 - 11904: 0xF664,
	37937 - 11904: 0xF66A,
	37938 - 11904: 0xC54E,
	37939 - 11904: 0xC54A,
	37941 - 11904: 0xC54B,
	37942 - 11904: 0xF660,
	37943 - 11904: 0xF667,
	37944 - 11904: 0xC54D,
	37945 - 11904: 0xF665,
	37946 - 11904: 0xC54C,
	37947 - 11904: 0xF65F,
	37948 - 11904: 0xF663,
	37949 - 11904: 0xF662,
	37950 - 11904: 0x9A4F,
	37951 - 11904: 0xF65E,
	37952 - 11904: 0xF669,
	37954 - 11904: 0xFE40,
	37955 - 11904: 0xFE43,
	37956 - 11904: 0xC5B1,
	37957 - 11904: 0xF76D,
	37958 - 11904: 0xF770,
	37959 - 11904: 0xF76C,
	37960 - 11904: 0xF76E,
	37961 - 11904: 0xF76F,
	37962 - 11904: 0xF769,
	37963 - 11904: 0xF76A,
	37964 - 11904: 0xF767,
	37965 - 11904: 0x96DD,
	37967 - 11904: 0xF76B,
	37968 - 11904: 0xF768,
	37969 - 11904: 0xC5B2,
	37970 - 11904: 0xC5B3,
	37972 - 11904: 0x9A51,
	37973 - 11904: 0xF84B,
	37975 - 11904: 0xF84D,
	37976 - 11904: 0x96A7,
	37979 - 11904: 0x90B0,
	37981 - 11904: 0xF84C,
	37982 - 11904: 0xF84E,
	37984 - 11904: 0xC5E0,
	37986 - 11904: 0xF84A,
	37987 - 11904: 0xC5DF,
	37988 - 11904: 0xC5E1,
	37989 - 11904: 0x9C4E,
	37991 - 11904: 0x9443,
	37992 - 11904: 0xF8CB,
	37993 - 11904: 0xF8CC,
	37994 - 11904: 0xC644,
	37995 - 11904: 0xF8CA,
	37996 - 11904: 0x8EBA,
	37997 - 11904: 0xF953,
	37998 - 11904: 0xF952,
	37999 - 11904: 0xF954,
	38000 - 11904: 0xC65F,
	38001 - 11904: 0xF955,
	38002 - 11904: 0xC65E,
	38003 - 11904: 0xF956,
	38004 - 11904: 0xF972,
	38005 - 11904: 0xF975,
	38006 - 11904: 0xF974,
	38007 - 11904: 0xC668,
	38008 - 11904: 0xF973,
	38009 - 11904: 0x9A52,
	38011 - 11904: 0xFCC1,
	38012 - 11904: 0xC672,
	38013 - 11904: 0xC670,
	38014 - 11904: 0xC671,
	38015 - 11904: 0xC677,
	38016 - 11904: 0xF9C0,
	38017 - 11904: 0xF9C1,
	38018 - 11904: 0xF9BF,
	38019 - 11904: 0xF9C9,
	38021 - 11904: 0x8BE9,
	38047 - 11904: 0x9CAF,
	38050 - 11904: 0x8BFD,
	38081 - 11904: 0x9ABC,
	38083 - 11904: 0x9AB8,
	38108 - 11904: 0x9AAE,
	38134 - 11904: 0x9AA7,
	38189 - 11904: 0x9A53,
	38215 - 11904: 0x9D74,
	38263 - 11904: 0xAAF8,
	38264 - 11904: 0x8BEA,
	38266 - 11904: 0xD844,
	38267 - 11904: 0xDC78,
	38268 - 11904: 0xE8A5,
	38269 - 11904: 0xF376,
	38271 - 11904: 0x8BEB,
	38272 - 11904: 0xAAF9,
	38274 - 11904: 0xADAC,
	38275 - 11904: 0xB07B,
	38277 - 11904: 0x90B2,
	38278 - 11904: 0xD845,
	38280 - 11904: 0xD846,
	38281 - 11904: 0xB3AC,
	38283 - 11904: 0xB67D,
	38284 - 11904: 0xDC7A,
	38285 - 11904: 0xDC79,
	38286 - 11904: 0xB6A3,
	38287 - 11904: 0xB67C,
	38288 - 11904: 0xDC7B,
	38289 - 11904: 0xB67E,
	38290 - 11904: 0xB6A2,
	38291 - 11904: 0xB6A1,
	38292 - 11904: 0xB67B,
	38294 - 11904: 0x95E9,
	38295 - 11904: 0x95E8,
	38296 - 11904: 0xB968,
	38297 - 11904: 0x95E6,
	38299 - 11904: 0xE0D0,
	38300 - 11904: 0xE0CE,
	38302 - 11904: 0xE0CF,
	38303 - 11904: 0xE0CD,
	38304 - 11904: 0x90B5,
	38305 - 11904: 0xBBD2,
	38306 - 11904: 0x9A54,
	38307 - 11904: 0xBBD5,
	38308 - 11904: 0xBBD7,
	38309 - 11904: 0xBBD6,
	38310 - 11904: 0x90B3,
	38311 - 11904: 0x95E7,
	38312 - 11904: 0xBBD3,
	38313 - 11904: 0xBBD4,
	38314 - 11904: 0x8B50,
	38315 - 11904: 0xE8A7,
	38316 - 11904: 0xE8A6,
	38317 - 11904: 0xBE5B,
	38318 - 11904: 0xE8A8,
	38320 - 11904: 0xE8A9,
	38321 - 11904: 0xBE5C,
	38325 - 11904: 0xEC4D,
	38326 - 11904: 0xEC4B,
	38327 - 11904: 0xEEF3,
	38329 - 11904: 0xEC49,
	38330 - 11904: 0xEC4A,
	38331 - 11904: 0xC046,
	38332 - 11904: 0xEC46,
	38333 - 11904: 0xEC4E,
	38334 - 11904: 0xEC48,
	38335 - 11904: 0xEC4C,
	38336 - 11904: 0xEEEF,
	38339 - 11904: 0xEEF1,
	38341 - 11904: 0xEEF2,
	38342 - 11904: 0xC1F3,
	38343 - 11904: 0xEEEE,
	38344 - 11904: 0xC1F2,
	38345 - 11904: 0xEEF0,
	38346 - 11904: 0xC1EF,
	38347 - 11904: 0xC1F0,
	38348 - 11904: 0xC1F1,
	38349 - 11904: 0xEC47,
	38352 - 11904: 0xC2F5,
	38353 - 11904: 0xF16E,
	38354 - 11904: 0xF16C,
	38355 - 11904: 0xF16D,
	38356 - 11904: 0xC2F3,
	38357 - 11904: 0xC2F6,
	38358 - 11904: 0xC2F4,
	38362 - 11904: 0xF377,
	38363 - 11904: 0xF378,
	38364 - 11904: 0xC3F6,
	38366 - 11904: 0xF545,
	38367 - 11904: 0xF547,
	38368 - 11904: 0xF546,
	38369 - 11904: 0xC4C4,
	38370 - 11904: 0xC550,
	38371 - 11904: 0xF66D,
	38372 - 11904: 0xF66C,
	38373 - 11904: 0xF66B,
	38376 - 11904: 0x8BEC,
	38388 - 11904: 0x9A56,
	38428 - 11904: 0xAAFA,
	38429 - 11904: 0x8BFB,
	38430 - 11904: 0xC9AA,
	38432 - 11904: 0xCA58,
	38433 - 11904: 0xA6E9,
	38434 - 11904: 0xCA56,
	38435 - 11904: 0xCA59,
	38436 - 11904: 0xCA57,
	38440 - 11904: 0xCBAE,
	38442 - 11904: 0xA8C1,
	38444 - 11904: 0xA8C2,
	38445 - 11904: 0xCBB0,
	38446 - 11904: 0xA8BF,
	38447 - 11904: 0xCBAF,
	38448 - 11904: 0xCBAD,
	38449 - 11904: 0xA8C0,
	38450 - 11904: 0xA8BE,
	38451 - 11904: 0x9A57,
	38456 - 11904: 0xA0AA,
	38457 - 11904: 0xCDD8,
	38458 - 11904: 0xCDDB,
	38459 - 11904: 0xAAFD,
	38460 - 11904: 0xCDDA,
	38461 - 11904: 0xCDD9,
	38463 - 11904: 0xAAFC,
	38464 - 11904: 0xAAFB,
	38465 - 11904: 0x9FA6,
	38466 - 11904: 0xAB40,
	38467 - 11904: 0xCDDC,
	38468 - 11904: 0xAAFE,
	38469 - 11904: 0x99CC,
	38474 - 11904: 0xD0C6,
	38475 - 11904: 0xADAE,
	38476 - 11904: 0xADAF,
	38477 - 11904: 0xADB0,
	38478 - 11904: 0xD0C7,
	38479 - 11904: 0xD0C3,
	38480 - 11904: 0xADAD,
	38481 - 11904: 0xD0C4,
	38483 - 11904: 0xD0C5,
	38484 - 11904: 0xD0C2,
	38486 - 11904: 0x9C59,
	38488 - 11904: 0xB0A4,
	38491 - 11904: 0xB0A1,
	38492 - 11904: 0xD445,
	38493 - 11904: 0xB0A2,
	38494 - 11904: 0xB0A5,
	38495 - 11904: 0xD446,
	38497 - 11904: 0xB07E,
	38498 - 11904: 0xB07C,
	38499 - 11904: 0xB07D,
	38500 - 11904: 0xB0A3,
	38505 - 11904: 0x99B5,
	38506 - 11904: 0xB3AD,
	38507 - 11904: 0xD849,
	38508 - 11904: 0xB3B5,
	38509 - 11904: 0xD848,
	38511 - 11904: 0xD84B,
	38512 - 11904: 0xB3B1,
	38513 - 11904: 0xD84A,
	38514 - 11904: 0xB6AB,
	38515 - 11904: 0xB3AF,
	38516 - 11904: 0xB3B2,
	38517 - 11904: 0xB3AE,
	38518 - 11904: 0xB3B3,
	38519 - 11904: 0xB3B4,
	38520 - 11904: 0xB3B0,
	38523 - 11904: 0x90BE,
	38524 - 11904: 0xD847,
	38525 - 11904: 0xB6A7,
	38526 - 11904: 0xDC7D,
	38528 - 11904: 0xDCA3,
	38529 - 11904: 0x9FAF,
	38531 - 11904: 0xDCA2,
	38532 - 11904: 0xB6AC,
	38533 - 11904: 0xB6A8,
	38534 - 11904: 0xB6A9,
	38535 - 11904: 0xDC7C,
	38536 - 11904: 0xDC7E,
	38537 - 11904: 0xDCA1,
	38538 - 11904: 0xB6A4,
	38539 - 11904: 0xB6A6,
	38541 - 11904: 0xB6AA,
	38542 - 11904: 0xB6A5,
	38543 - 11904: 0x95F2,
	38545 - 11904: 0xE0D3,
	38546 - 11904: 0xE0D1,
	38547 - 11904: 0xE0D2,
	38548 - 11904: 0xB96A,
	38549 - 11904: 0xB96B,
	38550 - 11904: 0x90BF,
	38551 - 11904: 0xE0D4,
	38552 - 11904: 0xB969,
	38553 - 11904: 0xBBD8,
	38555 - 11904: 0xBBDA,
	38556 - 11904: 0xBBD9,
	38558 - 11904: 0xE4BB,
	38561 - 11904: 0xE4BC,
	38562 - 11904: 0xE8AB,
	38563 - 11904: 0x90C1,
	38564 - 11904: 0xE8AA,
	38565 - 11904: 0xFEE4,
	38567 - 11904: 0xC047,
	38568 - 11904: 0xC048,
	38569 - 11904: 0xEC4F,
	38570 - 11904: 0xC049,
	38572 - 11904: 0xEEF6,
	38574 - 11904: 0xEEF4,
	38576 - 11904: 0xEEF5,
	38577 - 11904: 0xC1F4,
	38579 - 11904: 0xF16F,
	38580 - 11904: 0xC3F7,
	38582 - 11904: 0xC6D7,
	38584 - 11904: 0xC1F5,
	38585 - 11904: 0xAB41,
	38587 - 11904: 0xB0A6,
	38588 - 11904: 0xD447,
	38589 - 11904: 0x90C7,
	38591 - 11904: 0xD84C,
	38592 - 11904: 0xB3B6,
	38593 - 11904: 0xB6AD,
	38594 - 11904: 0xDCA4,
	38595 - 11904: 0xDCA6,
	38596 - 11904: 0xB6AF,
	38597 - 11904: 0xB6AE,
	38598 - 11904: 0xB6B0,
	38599 - 11904: 0xB6B1,
	38600 - 11904: 0xDCA5,
	38601 - 11904: 0xB96E,
	38602 - 11904: 0xB96F,
	38603 - 11904: 0xB96D,
	38604 - 11904: 0xBBDB,
	38605 - 11904: 0xB96C,
	38606 - 11904: 0xE0D5,
	38610 - 11904: 0xBBDC,
	38611 - 11904: 0xE8AC,
	38612 - 11904: 0xEC50,
	38613 - 11904: 0xC04A,
	38614 - 11904: 0xC1F6,
	38615 - 11904: 0xF170,
	38616 - 11904: 0xF174,
	38617 - 11904: 0xC2F9,
	38618 - 11904: 0xF171,
	38619 - 11904: 0xC2FA,
	38620 - 11904: 0xC2F8,
	38621 - 11904: 0xF175,
	38622 - 11904: 0xC2FB,
	38623 - 11904: 0xF173,
	38625 - 11904: 0xF379,
	38626 - 11904: 0xC2F7,
	38627 - 11904: 0xC3F8,
	38629 - 11904: 0xF8CD,
	38632 - 11904: 0xAB42,
	38633 - 11904: 0xB3B8,
	38634 - 11904: 0xB3B7,
	38639 - 11904: 0xB6B2,
	38640 - 11904: 0xDCA8,
	38641 - 11904: 0xDCA7,
	38642 - 11904: 0xB6B3,
	38644 - 11904: 0x92E4,
	38645 - 11904: 0xE0D9,
	38646 - 11904: 0xB973,
	38647 - 11904: 0xB970,
	38648 - 11904: 0xE0D8,
	38649 - 11904: 0xB972,
	38650 - 11904: 0xE0D6,
	38651 - 11904: 0xB971,
	38653 - 11904: 0xE0D7,
	38655 - 11904: 0xE4BD,
	38656 - 11904: 0xBBDD,
	38658 - 11904: 0xE8AF,
	38659 - 11904: 0x9F52,
	38660 - 11904: 0xBE5D,
	38661 - 11904: 0xE8AD,
	38662 - 11904: 0xBE5E,
	38663 - 11904: 0xBE5F,
	38664 - 11904: 0xE8AE,
	38665 - 11904: 0xBE60,
	38667 - 11904: 0xEC51,
	38669 - 11904: 0xC04E,
	38670 - 11904: 0xC04B,
	38671 - 11904: 0xC050,
	38672 - 11904: 0xEC53,
	38673 - 11904: 0xC04C,
	38674 - 11904: 0xEC52,
	38675 - 11904: 0xC04F,
	38678 - 11904: 0xC04D,
	38680 - 11904: 0xEEF9,
	38681 - 11904: 0xEEFB,
	38683 - 11904: 0x90DB,
	38684 - 11904: 0xC1F7,
	38685 - 11904: 0xEEFA,
	38686 - 11904: 0xC1F8,
	38687 - 11904: 0xEEF8,
	38688 - 11904: 0xEEF7,
	38689 - 11904: 0xA066,
	38690 - 11904: 0xF177,
	38691 - 11904: 0xF176,
	38692 - 11904: 0xC2FC,
	38693 - 11904: 0xF178,
	38694 - 11904: 0xF37E,
	38695 - 11904: 0xC3FA,
	38696 - 11904: 0xF37D,
	38697 - 11904: 0xF37A,
	38698 - 11904: 0xC3F9,
	38699 - 11904: 0xF37B,
	38700 - 11904: 0xF37C,
	38702 - 11904: 0xF548,
	38703 - 11904: 0xF549,
	38704 - 11904: 0xC4C5,
	38705 - 11904: 0x90D2,
	38706 - 11904: 0xC553,
	38708 - 11904: 0x876B,
	38709 - 11904: 0xF66E,
	38710 - 11904: 0x90D4,
	38712 - 11904: 0xC551,
	38713 - 11904: 0xC552,
	38714 - 11904: 0xF66F,
	38717 - 11904: 0xC5B4,
	38718 - 11904: 0xC5B5,
	38719 - 11904: 0xF771,
	38720 - 11904: 0x9A5B,
	38721 - 11904: 0x95FD,
	38722 - 11904: 0xC645,
	38723 - 11904: 0xF8CF,
	38724 - 11904: 0xC647,
	38726 - 11904: 0xF8CE,
	38727 - 11904: 0xF8D0,
	38728 - 11904: 0xC646,
	38729 - 11904: 0xF957,
	38730 - 11904: 0x87B1,
	38731 - 11904: 0xF9AD,
	38737 - 11904: 0x8BC4,
	38738 - 11904: 0xAB43,
	38741 - 11904: 0x8C66,
	38742 - 11904: 0xB974,
	38743 - 11904: 0x90DE,
	38744 - 11904: 0xE4BE,
	38746 - 11904: 0xE8B0,
	38747 - 11904: 0xC051,
	38748 - 11904: 0xC052,
	38749 - 11904: 0x9CE4,
	38750 - 11904: 0xAB44,
	38751 - 11904: 0x90E1,
	38752 - 11904: 0xBE61,
	38753 - 11904: 0xC3FB,
	38754 - 11904: 0xADB1,
	38758 - 11904: 0xC053,
	38760 - 11904: 0xC5E2,
	38761 - 11904: 0xADB2,
	38762 - 11904: 0xD84D,
	38764 - 11904: 0xDCA9,
	38765 - 11904: 0x9E46,
	38766 - 11904: 0xDCAB,
	38768 - 11904: 0xDCAA,
	38769 - 11904: 0x9651,
	38770 - 11904: 0xE0DD,
	38771 - 11904: 0xE0DA,
	38772 - 11904: 0xB975,
	38774 - 11904: 0xB976,
	38775 - 11904: 0xE0DB,
	38776 - 11904: 0xE0DC,
	38778 - 11904: 0xE4C0,
	38779 - 11904: 0xE4C5,
	38780 - 11904: 0xBBDE,
	38781 - 11904: 0xE4BF,
	38782 - 11904: 0xE4C1,
	38783 - 11904: 0xE4C8,
	38784 - 11904: 0xE4C3,
	38785 - 11904: 0xE4C7,
	38786 - 11904: 0xE4C4,
	38787 - 11904: 0xE4C2,
	38788 - 11904: 0xE4C6,
	38789 - 11904: 0xBBDF,
	38791 - 11904: 0xFB58,
	38792 - 11904: 0xE8B3,
	38793 - 11904: 0x90E6,
	38794 - 11904: 0xE8B1,
	38795 - 11904: 0xBE63,
	38797 - 11904: 0xBE62,
	38798 - 11904: 0xE8B2,
	38799 - 11904: 0xBE64,
	38804 - 11904: 0xEC56,
	38807 - 11904: 0xEC55,
	38808 - 11904: 0xC054,
	38809 - 11904: 0xEC54,
	38810 - 11904: 0xEEFC,
	38811 - 11904: 0x9650,
	38812 - 11904: 0xEEFE,
	38813 - 11904: 0xEF41,
	38814 - 11904: 0xEF40,
	38815 - 11904: 0x90E7,
	38816 - 11904: 0xC1F9,
	38817 - 11904: 0xEEFD,
	38818 - 11904: 0xF1A1,
	38819 - 11904: 0xC2FD,
	38820 - 11904: 0xF17D,
	38821 - 11904: 0xF1A2,
	38822 - 11904: 0xC2FE,
	38824 - 11904: 0xF17B,
	38826 - 11904: 0xF17E,
	38827 - 11904: 0xF17C,
	38828 - 11904: 0xF179,
	38829 - 11904: 0xC340,
	38830 - 11904: 0xF17A,
	38833 - 11904: 0x90E8,
	38834 - 11904: 0x9A5D,
	38835 - 11904: 0xF3A1,
	38836 - 11904: 0x9F7A,
	38838 - 11904: 0xF3A3,
	38839 - 11904: 0xF3A2,
	38840 - 11904: 0x9B5C,
	38841 - 11904: 0xF54A,
	38842 - 11904: 0x9F7C,
	38843 - 11904: 0xF54B,
	38845 - 11904: 0xFC52,
	38846 - 11904: 0x90E9,
	38847 - 11904: 0xF670,
	38848 - 11904: 0x90EA,
	38849 - 11904: 0xC5B7,
	38850 - 11904: 0x9A5E,
	38851 - 11904: 0xC5B6,
	38852 - 11904: 0xF84F,
	38853 - 11904: 0xF850,
	38854 - 11904: 0xC648,
	38855 - 11904: 0xF8D1,
	38856 - 11904: 0x9F76,
	38857 - 11904: 0xC669,
	38859 - 11904: 0xADB3,
	38860 - 11904: 0xB6B4,
	38861 - 11904: 0xE4CA,
	38862 - 11904: 0xE4C9,
	38863 - 11904: 0xE8B5,
	38864 - 11904: 0xE8B4,
	38866 - 11904: 0x90EB,
	38867 - 11904: 0xC1FA,
	38868 - 11904: 0xEF43,
	38869 - 11904: 0xEF42,
	38870 - 11904: 0xF1A5,
	38871 - 11904: 0xF1A3,
	38872 - 11904: 0xF1A6,
	38873 - 11904: 0xF1A4,
	38876 - 11904: 0xC3FC,
	38877 - 11904: 0xF3A4,
	38878 - 11904: 0xF3A5,
	38879 - 11904: 0xF3A6,
	38880 - 11904: 0x90EC,
	38881 - 11904: 0xF671,
	38883 - 11904: 0xF772,
	38885 - 11904: 0xF8D2,
	38886 - 11904: 0x8BEE,
	38893 - 11904: 0xADB4,
	38894 - 11904: 0x90EE,
	38896 - 11904: 0xEC57,
	38897 - 11904: 0xEF44,
	38898 - 11904: 0x91C6,
	38899 - 11904: 0xADB5,
	38901 - 11904: 0x90F2,
	38902 - 11904: 0xBBE0,
	38904 - 11904: 0xEC58,
	38905 - 11904: 0xC341,
	38906 - 11904: 0xF1A7,
	38907 - 11904: 0xC3FD,
	38909 - 11904: 0xF54C,
	38910 - 11904: 0xF54D,
	38911 - 11904: 0xC554,
	38912 - 11904: 0xF851,
	38913 - 11904: 0xADB6,
	38914 - 11904: 0xB3BB,
	38915 - 11904: 0xB3BC,
	38916 - 11904: 0xD84E,
	38917 - 11904: 0xB6B5,
	38918 - 11904: 0xB6B6,
	38919 - 11904: 0xDCAC,
	38920 - 11904: 0xB6B7,
	38922 - 11904: 0xB97A,
	38924 - 11904: 0xB97C,
	38925 - 11904: 0xE0DF,
	38926 - 11904: 0xE0E0,
	38927 - 11904: 0xE0DE,
	38928 - 11904: 0xB977,
	38929 - 11904: 0xB978,
	38930 - 11904: 0xB97B,
	38931 - 11904: 0xB979,
	38932 - 11904: 0xFCBC,
	38933 - 11904: 0x8A74,
	38934 - 11904: 0xE4CB,
	38935 - 11904: 0xBBE1,
	38936 - 11904: 0xBBE2,
	38939 - 11904: 0xE8BC,
	38940 - 11904: 0xBE67,
	38941 - 11904: 0xE8B7,
	38942 - 11904: 0xE8B6,
	38943 - 11904: 0x9657,
	38944 - 11904: 0xE8BB,
	38945 - 11904: 0xBE65,
	38947 - 11904: 0x9CEF,
	38948 - 11904: 0xC05B,
	38950 - 11904: 0xE8B8,
	38951 - 11904: 0xE8BD,
	38952 - 11904: 0xE8BA,
	38953 - 11904: 0xE8B9,
	38955 - 11904: 0xBE66,
	38957 - 11904: 0xC059,
	38958 - 11904: 0x9FDF,
	38959 - 11904: 0xEC5A,
	38960 - 11904: 0xC055,
	38962 - 11904: 0xEC5B,
	38963 - 11904: 0x90F7,
	38964 - 11904: 0x90F6,
	38965 - 11904: 0xEC59,
	38967 - 11904: 0xC058,
	38968 - 11904: 0xC056,
	38969 - 11904: 0xC05A,
	38971 - 11904: 0xC057,
	38977 - 11904: 0xEF45,
	38979 - 11904: 0xEF4A,
	38980 - 11904: 0xEF46,
	38981 - 11904: 0xEF49,
	38982 - 11904: 0xC1FB,
	38983 - 11904: 0x9B5E,
	38984 - 11904: 0xEDD4,
	38985 - 11904: 0xEF48,
	38986 - 11904: 0xEF47,
	38987 - 11904: 0x90F8,
	38988 - 11904: 0xC344,
	38989 - 11904: 0xC342,
	38990 - 11904: 0xC345,
	38991 - 11904: 0xC343,
	38992 - 11904: 0xF1A8,
	38993 - 11904: 0xF1A9,
	38994 - 11904: 0xF1AA,
	38995 - 11904: 0xC346,
	38998 - 11904: 0x8CFC,
	38999 - 11904: 0xF3AA,
	39000 - 11904: 0xC440,
	39001 - 11904: 0xF3A8,
	39003 - 11904: 0xC441,
	39004 - 11904: 0xF3A7,
	39005 - 11904: 0xF3A9,
	39006 - 11904: 0xC3FE,
	39007 - 11904: 0xF551,
	39008 - 11904: 0xF54E,
	39010 - 11904: 0xF54F,
	39011 - 11904: 0xF550,
	39012 - 11904: 0xF672,
	39013 - 11904: 0xC556,
	39014 - 11904: 0x90F9,
	39015 - 11904: 0xC555,
	39016 - 11904: 0x8CC9,
	39017 - 11904: 0xF774,
	39018 - 11904: 0xF773,
	39019 - 11904: 0xC5B8,
	39020 - 11904: 0xFA6A,
	39023 - 11904: 0xC5E3,
	39024 - 11904: 0xC649,
	39025 - 11904: 0xC660,
	39026 - 11904: 0xF958,
	39027 - 11904: 0xF9AE,
	39028 - 11904: 0xF9AF,
	39029 - 11904: 0x8BEF,
	39080 - 11904: 0xADB7,
	39081 - 11904: 0xDCAD,
	39084 - 11904: 0xE0E1,
	39085 - 11904: 0xE4CC,
	39086 - 11904: 0xE4CD,
	39087 - 11904: 0xBBE3,
	39089 - 11904: 0xBBE4,
	39090 - 11904: 0xE8BE,
	39091 - 11904: 0xBE68,
	39092 - 11904: 0x9FE0,
	39094 - 11904: 0xC1FC,
	39095 - 11904: 0x9142,
	39096 - 11904: 0xF1AB,
	39097 - 11904: 0x9A62,
	39098 - 11904: 0xC347,
	39099 - 11904: 0xF3AD,
	39100 - 11904: 0xC442,
	39101 - 11904: 0xF3AC,
	39102 - 11904: 0xF3AE,
	39103 - 11904: 0xF3AB,
	39104 - 11904: 0xF675,
	39105 - 11904: 0xF552,
	39106 - 11904: 0xF553,
	39107 - 11904: 0x9569,
	39108 - 11904: 0xC4C6,
	39110 - 11904: 0xF674,
	39111 - 11904: 0x9144,
	39112 - 11904: 0x9143,
	39113 - 11904: 0xF673,
	39114 - 11904: 0x9141,
	39115 - 11904: 0xF775,
	39116 - 11904: 0xF9B0,
	39118 - 11904: 0x8BF0,
	39131 - 11904: 0xADB8,
	39132 - 11904: 0x9660,
	39134 - 11904: 0x8BF1,
	39135 - 11904: 0xADB9,
	39136 - 11904: 0x99F6,
	39137 - 11904: 0x9149,
	39138 - 11904: 0xB0A7,
	39139 - 11904: 0xD448,
	39141 - 11904: 0xD84F,
	39142 - 11904: 0x914A,
	39143 - 11904: 0xB6B8,
	39145 - 11904: 0xB6BB,
	39146 - 11904: 0xB6B9,
	39147 - 11904: 0xDCAE,
	39148 - 11904: 0x914B,
	39149 - 11904: 0xB6BD,
	39151 - 11904: 0xB6BA,
	39153 - 11904: 0x9A64,
	39154 - 11904: 0xB6BC,
	39156 - 11904: 0xB97E,
	39157 - 11904: 0x8ABF,
	39158 - 11904: 0xE0E2,
	39161 - 11904: 0xE0E3,
	39162 - 11904: 0xE8C0,
	39164 - 11904: 0xB97D,
	39165 - 11904: 0xB9A1,
	39166 - 11904: 0xB9A2,
	39168 - 11904: 0xE4CF,
	39170 - 11904: 0xE4CE,
	39171 - 11904: 0xBBE5,
	39173 - 11904: 0xBBE6,
	39175 - 11904: 0xE4D0,
	39176 - 11904: 0xE8BF,
	39177 - 11904: 0xBBE8,
	39178 - 11904: 0xBE69,
	39180 - 11904: 0xBBE7,
	39182 - 11904: 0x9A66,
	39184 - 11904: 0xC05C,
	39185 - 11904: 0xE8C1,
	39186 - 11904: 0xBE6B,
	39187 - 11904: 0xBE6A,
	39188 - 11904: 0xE8C2,
	39189 - 11904: 0xE8C5,
	39190 - 11904: 0xE8C3,
	39191 - 11904: 0xE8C4,
	39192 - 11904: 0xBE6C,
	39193 - 11904: 0x9A67,
	39194 - 11904: 0xC061,
	39195 - 11904: 0xC05F,
	39196 - 11904: 0x9A69,
	39198 - 11904: 0xC05E,
	39199 - 11904: 0xEC5D,
	39201 - 11904: 0xC060,
	39204 - 11904: 0xEC5C,
	39205 - 11904: 0xEF4B,
	39207 - 11904: 0xEC5E,
	39208 - 11904: 0xC05D,
	39209 - 11904: 0xEC5F,
	39210 - 11904: 0xEF4E,
	39211 - 11904: 0xEF4C,
	39212 - 11904: 0xEF4D,
	39213 - 11904: 0xEF52,
	39214 - 11904: 0xC34B,
	39215 - 11904: 0xEF51,
	39216 - 11904: 0xEF54,
	39217 - 11904: 0xEF53,
	39218 - 11904: 0xEF50,
	39219 - 11904: 0xEF4F,
	39221 - 11904: 0xC1FD,
	39223 - 11904: 0x9A6A,
	39224 - 11904: 0x9652,
	39225 - 11904: 0x914D,
	39226 - 11904: 0xF1AE,
	39227 - 11904: 0x9666,
	39228 - 11904: 0xF1AD,
	39229 - 11904: 0xC34A,
	39230 - 11904: 0xC348,
	39231 - 11904: 0xC349,
	39232 - 11904: 0x9F7B,
	39233 - 11904: 0xF1AC,
	39234 - 11904: 0x9A6B,
	39235 - 11904: 0xF3B1,
	39237 - 11904: 0xC443,
	39239 - 11904: 0xF3B0,
	39240 - 11904: 0xF3AF,
	39241 - 11904: 0xC444,
	39242 - 11904: 0xA06C,
	39243 - 11904: 0xF558,
	39244 - 11904: 0xF557,
	39245 - 11904: 0x9667,
	39246 - 11904: 0xF555,
	39248 - 11904: 0xF554,
	39249 - 11904: 0xC4C8,
	39250 - 11904: 0xC4C7,
	39251 - 11904: 0xF559,
	39252 - 11904: 0xF776,
	39253 - 11904: 0xC5B9,
	39254 - 11904: 0xF677,
	39255 - 11904: 0xC557,
	39256 - 11904: 0xF676,
	39257 - 11904: 0xF556,
	39259 - 11904: 0xF777,
	39260 - 11904: 0xC5E4,
	39261 - 11904: 0x9A6C,
	39262 - 11904: 0xC661,
	39263 - 11904: 0xF959,
	39265 - 11904: 0xF9B1,
	39266 - 11904: 0x9A6D,
	39267 - 11904: 0x8BF2,
	39318 - 11904: 0xADBA,
	39319 - 11904: 0xD850,
	39320 - 11904: 0xEF55,
	39321 - 11904: 0xADBB,
	39323 - 11904: 0x966A,
	39324 - 11904: 0xE4D2,
	39325 - 11904: 0xE4D1,
	39326 - 11904: 0xEC60,
	39329 - 11904: 0xEF57,
	39331 - 11904: 0xEF56,
	39332 - 11904: 0xFCEA,
	39333 - 11904: 0xC34C,
	39334 - 11904: 0xF3B2,
	39335 - 11904: 0xF3B3,
	39336 - 11904: 0xC4C9,
	39338 - 11904: 0x966C,
	39339 - 11904: 0xF9B2,
	39340 - 11904: 0xB0A8,
	39341 - 11904: 0xB6BF,
	39342 - 11904: 0xB6BE,
	39343 - 11904: 0xE0E4,
	39344 - 11904: 0xE0E6,
	39345 - 11904: 0xB9A4,
	39346 - 11904: 0xE0E5,
	39347 - 11904: 0xB9A3,
	39348 - 11904: 0xB9A5,
	39349 - 11904: 0xE0E7,
	39352 - 11904: 0x91C4,
	39353 - 11904: 0xE4D4,
	39354 - 11904: 0xE4D6,
	39355 - 11904: 0xE4D5,
	39356 - 11904: 0x9677,
	39357 - 11904: 0xE4D8,
	39361 - 11904: 0xBBE9,
	39362 - 11904: 0xE4D7,
	39363 - 11904: 0xE4D3,
	39364 - 11904: 0x99F4,
	39365 - 11904: 0x9A6F,
	39367 - 11904: 0xE4D9,
	39369 - 11904: 0xE8CC,
	39371 - 11904: 0xE8CF,
	39372 - 11904: 0xE8D1,
	39373 - 11904: 0xE8C7,
	39374 - 11904: 0xE8CB,
	39375 - 11904: 0xE8C8,
	39376 - 11904: 0xBE6E,
	39377 - 11904: 0xBE71,
	39378 - 11904: 0xBE73,
	39379 - 11904: 0xE8C9,
	39380 - 11904: 0xE8CA,
	39381 - 11904: 0xBE72,
	39382 - 11904: 0xE8CD,
	39383 - 11904: 0xE8D0,
	39384 - 11904: 0xE8CE,
	39385 - 11904: 0xBE74,
	39386 - 11904: 0x9FAB,
	39387 - 11904: 0xBE70,
	39388 - 11904: 0xE8C6,
	39389 - 11904: 0xBE6D,
	39391 - 11904: 0xBE6F,
	39392 - 11904: 0x8CBE,
	39393 - 11904: 0x8EC1,
	39394 - 11904: 0xC063,
	39395 - 11904: 0xEC66,
	39396 - 11904: 0xEC64,
	39397 - 11904: 0xEC63,
	39398 - 11904: 0x9555,
	39399 - 11904: 0xEC69,
	39401 - 11904: 0xEC68,
	39402 - 11904: 0xEC67,
	39404 - 11904: 0xEC62,
	39405 - 11904: 0xC062,
	39406 - 11904: 0xEC61,
	39408 - 11904: 0xEC65,
	39409 - 11904: 0xC064,
	39412 - 11904: 0xEF5A,
	39413 - 11904: 0x9152,
	39414 - 11904: 0xEF5E,
	39415 - 11904: 0xEF5B,
	39416 - 11904: 0xEF5D,
	39417 - 11904: 0xEF5C,
	39418 - 11904: 0xEF59,
	39419 - 11904: 0xEF5F,
	39420 - 11904: 0xEF62,
	39421 - 11904: 0xEF60,
	39422 - 11904: 0xEF61,
	39423 - 11904: 0xC240,
	39425 - 11904: 0xC1FE,
	39426 - 11904: 0xEF58,
	39427 - 11904: 0xEF63,
	39428 - 11904: 0xF1B3,
	39429 - 11904: 0xF1B6,
	39430 - 11904: 0xF1B8,
	39431 - 11904: 0xF1B7,
	39433 - 11904: 0xF1B1,
	39434 - 11904: 0xF1B5,
	39435 - 11904: 0xF1B0,
	39436 - 11904: 0x9153,
	39437 - 11904: 0xF1B2,
	39438 - 11904: 0xC34D,
	39439 - 11904: 0xF1AF,
	39440 - 11904: 0x9155,
	39441 - 11904: 0xF1B4,
	39444 - 11904: 0xF3C0,
	39445 - 11904: 0xF3B5,
	39446 - 11904: 0xC445,
	39449 - 11904: 0xC446,
	39450 - 11904: 0xF3B4,
	39451 - 11904: 0xF3B9,
	39452 - 11904: 0xF3BF,
	39453 - 11904: 0xF3B7,
	39454 - 11904: 0xF3BE,
	39455 - 11904: 0x955D,
	39456 - 11904: 0xF3BB,
	39457 - 11904: 0x9671,
	39458 - 11904: 0xF3BA,
	39459 - 11904: 0xF3BD,
	39460 - 11904: 0xF3B8,
	39461 - 11904: 0xF3B6,
	39462 - 11904: 0x9C6D,
	39463 - 11904: 0xF3BC,
	39465 - 11904: 0xF560,
	39466 - 11904: 0xF55E,
	39467 - 11904: 0xC4CA,
	39468 - 11904: 0xF55D,
	39469 - 11904: 0xF563,
	39470 - 11904: 0xF561,
	39471 - 11904: 0x9673,
	39472 - 11904: 0xC4CB,
	39473 - 11904: 0xF55C,
	39474 - 11904: 0xF55A,
	39476 - 11904: 0xF55B,
	39477 - 11904: 0xC4CD,
	39478 - 11904: 0xF55F,
	39479 - 11904: 0xC4CC,
	39480 - 11904: 0xF562,
	39481 - 11904: 0xF678,
	39482 - 11904: 0xF67E,
	39483 - 11904: 0x9154,
	39484 - 11904: 0x9A71,
	39485 - 11904: 0xF679,
	39486 - 11904: 0xC55B,
	39487 - 11904: 0xF6A1,
	39488 - 11904: 0xC55A,
	39489 - 11904: 0xF67D,
	39490 - 11904: 0xF67C,
	39491 - 11904: 0xC559,
	39492 - 11904: 0xF67B,
	39493 - 11904: 0xC558,
	39494 - 11904: 0xF67A,
	39496 - 11904: 0xF77D,
	39497 - 11904: 0xF7A1,
	39498 - 11904: 0xF77E,
	39500 - 11904: 0xF77B,
	39501 - 11904: 0xC5BB,
	39502 - 11904: 0xF778,
	39503 - 11904: 0xF77C,
	39504 - 11904: 0xF7A3,
	39506 - 11904: 0xF7A2,
	39507 - 11904: 0xF779,
	39508 - 11904: 0xF77A,
	39509 - 11904: 0xC5BA,
	39510 - 11904: 0xF852,
	39511 - 11904: 0xC5E7,
	39512 - 11904: 0x9156,
	39513 - 11904: 0xF853,
	39514 - 11904: 0xC5E5,
	39515 - 11904: 0xC5E6,
	39516 - 11904: 0x966D,
	39518 - 11904: 0xF8D3,
	39519 - 11904: 0xC64A,
	39520 - 11904: 0xF976,
	39522 - 11904: 0xC66A,
	39523 - 11904: 0x9557,
	39524 - 11904: 0xF9B3,
	39525 - 11904: 0xC66B,
	39526 - 11904: 0xF9B4,
	39527 - 11904: 0xF9B5,
	39528 - 11904: 0xF9C3,
	39529 - 11904: 0xF9C2,
	39530 - 11904: 0xC67A,
	39531 - 11904: 0xF9CD,
	39532 - 11904: 0x89C6,
	39567 - 11904: 0x89C7,
	39592 - 11904: 0xB0A9,
	39595 - 11904: 0xE0E9,
	39597 - 11904: 0xE0E8,
	39599 - 11904: 0xBBEA,
	39600 - 11904: 0xBBEB,
	39601 - 11904: 0xE4DA,
	39602 - 11904: 0x8A6A,
	39603 - 11904: 0xE8D2,
	39604 - 11904: 0xEC6C,
	39606 - 11904: 0x8B57,
	39607 - 11904: 0xBE75,
	39608 - 11904: 0xC065,
	39609 - 11904: 0xEC6A,
	39610 - 11904: 0x9FE1,
	39611 - 11904: 0xEC6D,
	39612 - 11904: 0xC066,
	39613 - 11904: 0x9B5F,
	39614 - 11904: 0xEF64,
	39615 - 11904: 0xEC6B,
	39616 - 11904: 0xF1B9,
	39617 - 11904: 0xC34E,
	39618 - 11904: 0xF3C1,
	39622 - 11904: 0xF566,
	39623 - 11904: 0xF564,
	39626 - 11904: 0xF565,
	39629 - 11904: 0xF6A2,
	39631 - 11904: 0xC55C,
	39632 - 11904: 0xF7A4,
	39633 - 11904: 0xC5EA,
	39634 - 11904: 0xC5BC,
	39635 - 11904: 0xC5E8,
	39636 - 11904: 0xC5E9,
	39637 - 11904: 0xF8D4,
	39638 - 11904: 0xC662,
	39639 - 11904: 0xA05D,
	39640 - 11904: 0xB0AA,
	39644 - 11904: 0xF1BA,
	39647 - 11904: 0xD449,
	39648 - 11904: 0x915B,
	39649 - 11904: 0xB9A6,
	39650 - 11904: 0x915C,
	39651 - 11904: 0xE4DB,
	39654 - 11904: 0xBBEC,
	39655 - 11904: 0xE4DC,
	39659 - 11904: 0xE8D4,
	39660 - 11904: 0xE8D3,
	39661 - 11904: 0xC068,
	39662 - 11904: 0xBE76,
	39663 - 11904: 0xBE77,
	39665 - 11904: 0xE8D7,
	39666 - 11904: 0xE8D6,
	39667 - 11904: 0xE8D5,
	39668 - 11904: 0x915E,
	39670 - 11904: 0xEC6E,
	39671 - 11904: 0xEC71,
	39673 - 11904: 0xEC70,
	39674 - 11904: 0xEC6F,
	39675 - 11904: 0xC067,
	39676 - 11904: 0xEF68,
	39677 - 11904: 0xEF66,
	39678 - 11904: 0xEF65,
	39679 - 11904: 0x9F5C,
	39681 - 11904: 0xEF67,
	39682 - 11904: 0x9F57,
	39683 - 11904: 0xC34F,
	39684 - 11904: 0xF1BC,
	39685 - 11904: 0xF1BD,
	39686 - 11904: 0xC350,
	39688 - 11904: 0xF1BB,
	39689 - 11904: 0x9F65,
	39690 - 11904: 0xF3C3,
	39691 - 11904: 0xF3C2,
	39692 - 11904: 0xF3C5,
	39693 - 11904: 0xC447,
	39694 - 11904: 0xF3C4,
	39695 - 11904: 0x9A72,
	39696 - 11904: 0xF567,
	39697 - 11904: 0xF569,
	39698 - 11904: 0xF568,
	39700 - 11904: 0x9160,
	39701 - 11904: 0xF6A3,
	39702 - 11904: 0xF6A6,
	39703 - 11904: 0xF6A4,
	39704 - 11904: 0xF6A5,
	39705 - 11904: 0xF7A5,
	39706 - 11904: 0xC5BD,
	39710 - 11904: 0xF854,
	39711 - 11904: 0xF855,
	39712 - 11904: 0xF856,
	39714 - 11904: 0xC64B,
	39715 - 11904: 0xC663,
	39716 - 11904: 0xF9B6,
	39717 - 11904: 0xB0AB,
	39719 - 11904: 0xBE78,
	39720 - 11904: 0xC069,
	39721 - 11904: 0xF1BE,
	39722 - 11904: 0x9F5E,
	39723 - 11904: 0xF7A6,
	39725 - 11904: 0x9161,
	39726 - 11904: 0xF9C4,
	39727 - 11904: 0xD44A,
	39729 - 11904: 0xC67B,
	39730 - 11904: 0xB0AC,
	39731 - 11904: 0xEC72,
	39732 - 11904: 0x9164,
	39733 - 11904: 0xF1BF,
	39735 - 11904: 0xF3C6,
	39737 - 11904: 0x9F41,
	39738 - 11904: 0xF6A7,
	39739 - 11904: 0xF7A7,
	39740 - 11904: 0xB0AD,
	39742 - 11904: 0xE4DD,
	39743 - 11904: 0xE4DE,
	39744 - 11904: 0x9169,
	39745 - 11904: 0xBBED,
	39746 - 11904: 0xBBEE,
	39747 - 11904: 0xE8D9,
	39748 - 11904: 0xBE7A,
	39749 - 11904: 0xBE79,
	39750 - 11904: 0xE8D8,
	39752 - 11904: 0xEF69,
	39754 - 11904: 0xF1C0,
	39755 - 11904: 0xF1C2,
	39756 - 11904: 0xF1C1,
	39757 - 11904: 0xC353,
	39758 - 11904: 0xC352,
	39759 - 11904: 0xC351,
	39760 - 11904: 0x9168,
	39761 - 11904: 0xC55E,
	39762 - 11904: 0xF6A8,
	39764 - 11904: 0xC55D,
	39765 - 11904: 0xF7A9,
	39766 - 11904: 0xF7A8,
	39768 - 11904: 0xC64C,
	39769 - 11904: 0xF8D5,
	39770 - 11904: 0xB3BD,
	39771 - 11904: 0xE0EA,
	39775 - 11904: 0xE4E1,
	39776 - 11904: 0xE4DF,
	39777 - 11904: 0xE4E0,
	39780 - 11904: 0xE8E2,
	39782 - 11904: 0xE8DD,
	39783 - 11904: 0xE8DA,
	39784 - 11904: 0xE8E1,
	39785 - 11904: 0x9A74,
	39788 - 11904: 0xE8E3,
	39791 - 11904: 0xBE7C,
	39792 - 11904: 0xE8E0,
	39793 - 11904: 0xE8DC,
	39796 - 11904: 0xE8DB,
	39797 - 11904: 0xE8DF,
	39798 - 11904: 0xE8DE,
	39799 - 11904: 0xBE7B,
	39802 - 11904: 0xEC7D,
	39803 - 11904: 0xEC78,
	39804 - 11904: 0xEC76,
	39805 - 11904: 0xECA1,
	39806 - 11904: 0xEC77,
	39807 - 11904: 0x96B2,
	39808 - 11904: 0xEC73,
	39809 - 11904: 0x9A75,
	39810 - 11904: 0xEC79,
	39811 - 11904: 0xFDA5,
	39813 - 11904: 0xEC74,
	39814 - 11904: 0xEF72,
	39815 - 11904: 0xEC75,
	39816 - 11904: 0xECA2,
	39819 - 11904: 0x9EE9,
	39821 - 11904: 0x8BBA,
	39822 - 11904: 0x916D,
	39823 - 11904: 0xA060,
	39824 - 11904: 0xEC7C,
	39825 - 11904: 0xC06A,
	39826 - 11904: 0xEC7B,
	39827 - 11904: 0xEC7A,
	39829 - 11904: 0xEC7E,
	39831 - 11904: 0x9FDE,
	39834 - 11904: 0xEF6A,
	39835 - 11904: 0xEF6D,
	39837 - 11904: 0x9FC3,
	39838 - 11904: 0xEF6C,
	39839 - 11904: 0x96B5,
	39840 - 11904: 0xEF74,
	39841 - 11904: 0xEF6F,
	39842 - 11904: 0xEF73,
	39844 - 11904: 0xEF71,
	39845 - 11904: 0xEF70,
	39846 - 11904: 0xEF6E,
	39848 - 11904: 0xEF6B,
	39850 - 11904: 0xC243,
	39851 - 11904: 0xC242,
	39853 - 11904: 0xC244,
	39854 - 11904: 0xC241,
	39855 - 11904: 0xEF75,
	39856 - 11904: 0xA067,
	39861 - 11904: 0xF1C8,
	39862 - 11904: 0xF1CB,
	39864 - 11904: 0xF1C9,
	39865 - 11904: 0xF1CD,
	39869 - 11904: 0xF1CE,
	39871 - 11904: 0xF1C6,
	39872 - 11904: 0xC358,
	39873 - 11904: 0xF1C7,
	39875 - 11904: 0xF1C5,
	39876 - 11904: 0xF1CC,
	39878 - 11904: 0xF1C4,
	39879 - 11904: 0xF1C3,
	39880 - 11904: 0xC357,
	39881 - 11904: 0xC355,
	39882 - 11904: 0xC354,
	39887 - 11904: 0x96B3,
	39891 - 11904: 0xF1CA,
	39892 - 11904: 0xF3CF,
	39893 - 11904: 0xF3D5,
	39894 - 11904: 0xC44A,
	39895 - 11904: 0xF3D0,
	39897 - 11904: 0xF3D3,
	39898 - 11904: 0xF3D7,
	39899 - 11904: 0xC44B,
	39900 - 11904: 0xF3D2,
	39901 - 11904: 0x9A76,
	39902 - 11904: 0xF3CA,
	39904 - 11904: 0xF3C9,
	39905 - 11904: 0xF3D6,
	39906 - 11904: 0xF3CD,
	39908 - 11904: 0xF3CB,
	39909 - 11904: 0xF3D4,
	39910 - 11904: 0xF3CC,
	39911 - 11904: 0xC449,
	39912 - 11904: 0xC448,
	39913 - 11904: 0x95D5,
	39914 - 11904: 0xF3C7,
	39915 - 11904: 0xF3C8,
	39916 - 11904: 0xF3D1,
	39917 - 11904: 0x9ECA,
	39920 - 11904: 0xF3CE,
	39921 - 11904: 0x9A77,
	39924 - 11904: 0x9A78,
	39927 - 11904: 0xF56C,
	39928 - 11904: 0xF56F,
	39933 - 11904: 0xC356,
	39935 - 11904: 0x9170,
	39938 - 11904: 0x916F,
	39941 - 11904: 0xF56D,
	39942 - 11904: 0xF573,
	39943 - 11904: 0xF571,
	39944 - 11904: 0xF56B,
	39945 - 11904: 0xF576,
	39946 - 11904: 0x9FA3,
	39947 - 11904: 0xF56A,
	39948 - 11904: 0x9171,
	39949 - 11904: 0xC4CF,
	39950 - 11904: 0xF572,
	39952 - 11904: 0x96B1,
	39954 - 11904: 0xF56E,
	39955 - 11904: 0xC4CE,
	39956 - 11904: 0xF575,
	39957 - 11904: 0x9F63,
	39959 - 11904: 0xF574,
	39963 - 11904: 0x9F67,
	39964 - 11904: 0xF6AB,
	39965 - 11904: 0xF6AA,
	39967 - 11904: 0x8BB9,
	39968 - 11904: 0x9A7A,
	39969 - 11904: 0xF6B1,
	39971 - 11904: 0xF6AD,
	39972 - 11904: 0xF6B0,
	39973 - 11904: 0xC560,
	39974 - 11904: 0x8B56,
	39976 - 11904: 0xF6AE,
	39977 - 11904: 0xF6AF,
	39979 - 11904: 0xF6A9,
	39980 - 11904: 0xF6AC,
	39981 - 11904: 0xC55F,
	39983 - 11904: 0x9ADA,
	39985 - 11904: 0xC5BF,
	39986 - 11904: 0xF7B4,
	39987 - 11904: 0xF7AF,
	39988 - 11904: 0xF7B3,
	39989 - 11904: 0x96B0,
	39990 - 11904: 0xF7B6,
	39991 - 11904: 0xF7B2,
	39993 - 11904: 0xF7AE,
	39994 - 11904: 0x9A7E,
	39995 - 11904: 0xC5C1,
	39996 - 11904: 0xF7B1,
	39997 - 11904: 0xF7B5,
	39998 - 11904: 0xC5C0,
	39999 - 11904: 0xF7AC,
	40000 - 11904: 0xF570,
	40001 - 11904: 0xF7B0,
	40004 - 11904: 0xF7AD,
	40005 - 11904: 0x9DDE,
	40006 - 11904: 0xF7AA,
	40008 - 11904: 0xF7AB,
	40009 - 11904: 0xC5BE,
	40010 - 11904: 0xF85A,
	40011 - 11904: 0xF85C,
	40012 - 11904: 0xF85F,
	40013 - 11904: 0xF85B,
	40014 - 11904: 0xF860,
	40015 - 11904: 0x96AD,
	40016 - 11904: 0xF859,
	40018 - 11904: 0xF857,
	40019 - 11904: 0x96AE,
	40020 - 11904: 0xC5EB,
	40021 - 11904: 0xF85D,
	40022 - 11904: 0xC5ED,
	40023 - 11904: 0xC5EC,
	40024 - 11904: 0xF858,
	40025 - 11904: 0xF85E,
	40029 - 11904: 0x9EA1,
	40030 - 11904: 0xF8DA,
	40031 - 11904: 0xC64D,
	40032 - 11904: 0xF8DB,
	40034 - 11904: 0xF8D9,
	40035 - 11904: 0xF8D6,
	40038 - 11904: 0xF8D8,
	40039 - 11904: 0xF8D7,
	40040 - 11904: 0xF95A,
	40045 - 11904: 0xF95C,
	40046 - 11904: 0xF95B,
	40049 - 11904: 0xF979,
	40050 - 11904: 0x9E50,
	40051 - 11904: 0xF978,
	40052 - 11904: 0xF977,
	40053 - 11904: 0xF97A,
	40055 - 11904: 0xC673,
	40056 - 11904: 0xC674,
	40057 - 11904: 0xF9CA,
	40058 - 11904: 0xF9CE,
	40059 - 11904: 0x96AF,
	40060 - 11904: 0x8BF4,
	40165 - 11904: 0xB3BE,
	40166 - 11904: 0xDCAF,
	40167 - 11904: 0xE0ED,
	40169 - 11904: 0xB9A7,
	40170 - 11904: 0xE0EB,
	40173 - 11904: 0xE0EC,
	40177 - 11904: 0xE4E2,
	40178 - 11904: 0xE4E3,
	40179 - 11904: 0xBBF1,
	40180 - 11904: 0xBBEF,
	40181 - 11904: 0xE4E4,
	40182 - 11904: 0xBBF0,
	40183 - 11904: 0xE8E8,
	40185 - 11904: 0xE8EB,
	40186 - 11904: 0xE8E5,
	40187 - 11904: 0xE8EC,
	40188 - 11904: 0xE8E4,
	40189 - 11904: 0xE8E6,
	40191 - 11904: 0xE8E7,
	40192 - 11904: 0xE8EA,
	40194 - 11904: 0x9FA4,
	40195 - 11904: 0xBEA1,
	40196 - 11904: 0xE8EF,
	40197 - 11904: 0xE8EE,
	40198 - 11904: 0xBE7D,
	40199 - 11904: 0xE8E9,
	40200 - 11904: 0xE8ED,
	40201 - 11904: 0xBE7E,
	40204 - 11904: 0x96BD,
	40208 - 11904: 0xECAC,
	40210 - 11904: 0xC06F,
	40212 - 11904: 0xECA7,
	40213 - 11904: 0xC06B,
	40214 - 11904: 0x96F4,
	40215 - 11904: 0xECA4,
	40216 - 11904: 0xECAA,
	40217 - 11904: 0xECAD,
	40219 - 11904: 0xC070,
	40221 - 11904: 0xECA9,
	40222 - 11904: 0xECA6,
	40223 - 11904: 0xECAE,
	40224 - 11904: 0xECA5,
	40225 - 11904: 0x96B8,
	40226 - 11904: 0xECAB,
	40227 - 11904: 0xC06C,
	40229 - 11904: 0xECA3,
	40230 - 11904: 0xC06D,
	40232 - 11904: 0xC06E,
	40233 - 11904: 0xECA8,
	40237 - 11904: 0xEFA9,
	40238 - 11904: 0xEF7A,
	40239 - 11904: 0xEF7B,
	40240 - 11904: 0xEF7E,
	40241 - 11904: 0xEF7C,
	40243 - 11904: 0xEF76,
	40244 - 11904: 0xFAA1,
	40246 - 11904: 0xEF79,
	40247 - 11904: 0xEFA5,
	40248 - 11904: 0xEF7D,
	40249 - 11904: 0x91A7,
	40251 - 11904: 0xC245,
	40253 - 11904: 0xEFA7,
	40254 - 11904: 0xEFA4,
	40255 - 11904: 0xC246,
	40256 - 11904: 0xEFA6,
	40257 - 11904: 0xEF77,
	40258 - 11904: 0xEFA2,
	40259 - 11904: 0xEFA3,
	40260 - 11904: 0xA05E,
	40261 - 11904: 0xEFA1,
	40265 - 11904: 0x9A7D,
	40266 - 11904: 0xF1D2,
	40267 - 11904: 0xF1D4,
	40268 - 11904: 0xF1D7,
	40270 - 11904: 0x8948,
	40271 - 11904: 0xF1D1,
	40272 - 11904: 0x9EB1,
	40273 - 11904: 0xC359,
	40274 - 11904: 0xF1D9,
	40275 - 11904: 0xF1D0,
	40276 - 11904: 0xF1DA,
	40278 - 11904: 0xF1D6,
	40279 - 11904: 0xF1D8,
	40280 - 11904: 0xF1DC,
	40281 - 11904: 0xF1D5,
	40282 - 11904: 0xF1DD,
	40283 - 11904: 0xF1D3,
	40284 - 11904: 0xF1CF,
	40285 - 11904: 0xC35A,
	40286 - 11904: 0x9DDB,
	40287 - 11904: 0xF1DB,
	40288 - 11904: 0xC35B,
	40289 - 11904: 0xC44D,
	40295 - 11904: 0xEF78,
	40296 - 11904: 0xF3F1,
	40297 - 11904: 0xF3E8,
	40298 - 11904: 0xC44F,
	40299 - 11904: 0xF3E4,
	40300 - 11904: 0xC450,
	40301 - 11904: 0x95BF,
	40302 - 11904: 0x8A73,
	40303 - 11904: 0xF3ED,
	40304 - 11904: 0xF3E7,
	40305 - 11904: 0xF3DD,
	40306 - 11904: 0xC44E,
	40307 - 11904: 0xF3EA,
	40308 - 11904: 0xF3E5,
	40309 - 11904: 0xF3E6,
	40311 - 11904: 0xF3D8,
	40312 - 11904: 0xF3DF,
	40313 - 11904: 0xF3EE,
	40315 - 11904: 0xF3EB,
	40316 - 11904: 0x9EFE,
	40317 - 11904: 0xF3E3,
	40318 - 11904: 0x917A,
	40319 - 11904: 0xF3EF,
	40320 - 11904: 0xF3DE,
	40321 - 11904: 0xF3D9,
	40322 - 11904: 0xF3EC,
	40323 - 11904: 0x917B,
	40324 - 11904: 0xF3DB,
	40325 - 11904: 0xF3E9,
	40326 - 11904: 0xF3E0,
	40327 - 11904: 0xF3F0,
	40328 - 11904: 0xF3DC,
	40329 - 11904: 0xC44C,
	40330 - 11904: 0xF3DA,
	40331 - 11904: 0xF3E1,
	40332 - 11904: 0xF3E2,
	40336 - 11904: 0xF57D,
	40338 - 11904: 0xF57B,
	40339 - 11904: 0x9AA3,
	40340 - 11904: 0xF5A2,
	40342 - 11904: 0xF5AE,
	40343 - 11904: 0xF5A5,
	40344 - 11904: 0xF57C,
	40345 - 11904: 0xF578,
	40346 - 11904: 0xF5A7,
	40347 - 11904: 0xF57E,
	40348 - 11904: 0xF5A3,
	40349 - 11904: 0xF57A,
	40350 - 11904: 0xF5AA,
	40351 - 11904: 0xF577,
	40352 - 11904: 0xF5A1,
	40353 - 11904: 0xF5A6,
	40354 - 11904: 0xF5A8,
	40355 - 11904: 0xF5AB,
	40356 - 11904: 0xF579,
	40357 - 11904: 0x96C2,
	40358 - 11904: 0xF5AF,
	40359 - 11904: 0xF5B0,
	40360 - 11904: 0xF5A9,
	40361 - 11904: 0xF5AD,
	40362 - 11904: 0xF5A4,
	40363 - 11904: 0x9F77,
	40364 - 11904: 0xF6C1,
	40365 - 11904: 0xF6C4,
	40367 - 11904: 0xC561,
	40369 - 11904: 0xF6C3,
	40370 - 11904: 0xF6C8,
	40371 - 11904: 0xF6C6,
	40372 - 11904: 0xC562,
	40373 - 11904: 0xF6BD,
	40374 - 11904: 0xF6B3,
	40375 - 11904: 0xF6B2,
	40376 - 11904: 0xC564,
	40377 - 11904: 0xF6BF,
	40378 - 11904: 0xF6C0,
	40379 - 11904: 0xF6BC,
	40380 - 11904: 0xF6B4,
	40381 - 11904: 0x9AA4,
	40382 - 11904: 0xF6B9,
	40383 - 11904: 0xF5AC,
	40384 - 11904: 0x9AA5,
	40385 - 11904: 0xF6B5,
	40386 - 11904: 0xC563,
	40387 - 11904: 0xF6BB,
	40388 - 11904: 0x91A1,
	40389 - 11904: 0xF6BA,
	40391 - 11904: 0xF6B6,
	40392 - 11904: 0xF6C2,
	40393 - 11904: 0x89B8,
	40394 - 11904: 0xF6B7,
	40395 - 11904: 0xF7BB,
	40396 - 11904: 0xF6C5,
	40397 - 11904: 0xF6C7,
	40398 - 11904: 0xF6BE,
	40399 - 11904: 0xF6B8,
	40400 - 11904: 0xF7BC,
	40401 - 11904: 0xF7BE,
	40402 - 11904: 0xF7B8,
	40403 - 11904: 0xC5C2,
	40404 - 11904: 0x9173,
	40405 - 11904: 0xF7C5,
	40406 - 11904: 0xF7C3,
	40407 - 11904: 0xC5C3,
	40408 - 11904: 0xF7C2,
	40409 - 11904: 0xF7C1,
	40410 - 11904: 0xF7BA,
	40411 - 11904: 0xF7B7,
	40412 - 11904: 0xF7BD,
	40413 - 11904: 0xF7C6,
	40414 - 11904: 0xF7B9,
	40415 - 11904: 0xF7BF,
	40417 - 11904: 0xF869,
	40418 - 11904: 0xF86E,
	40419 - 11904: 0xF864,
	40420 - 11904: 0xF867,
	40421 - 11904: 0xC5EE,
	40422 - 11904: 0xF86B,
	40424 - 11904: 0xF872,
	40425 - 11904: 0xF7C0,
	40427 - 11904: 0xF865,
	40428 - 11904: 0xF86F,
	40429 - 11904: 0xF873,
	40430 - 11904: 0xF86A,
	40431 - 11904: 0xF863,
	40432 - 11904: 0xF86D,
	40434 - 11904: 0xF86C,
	40435 - 11904: 0xF871,
	40436 - 11904: 0xF870,
	40437 - 11904: 0xF7C4,
	40438 - 11904: 0xF868,
	40439 - 11904: 0xF862,
	40440 - 11904: 0xF866,
	40441 - 11904: 0xC64E,
	40442 - 11904: 0xC64F,
	40443 - 11904: 0xF861,
	40444 - 11904: 0x9AA6,
	40445 - 11904: 0xF8E6,
	40446 - 11904: 0xF8DD,
	40447 - 11904: 0xF8E5,
	40448 - 11904: 0xF8E2,
	40449 - 11904: 0xF8E3,
	40450 - 11904: 0xF8DC,
	40451 - 11904: 0xF8DF,
	40452 - 11904: 0xF8E7,
	40453 - 11904: 0xF8E1,
	40454 - 11904: 0xF8E0,
	40455 - 11904: 0xF8DE,
	40457 - 11904: 0xF8E4,
	40458 - 11904: 0x89BD,
	40459 - 11904: 0xF95D,
	40460 - 11904: 0x89B9,
	40461 - 11904: 0xF95E,
	40462 - 11904: 0x917D,
	40463 - 11904: 0xF960,
	40464 - 11904: 0xF95F,
	40465 - 11904: 0xF962,
	40466 - 11904: 0xF961,
	40467 - 11904: 0xF97C,
	40468 - 11904: 0xF97B,
	40469 - 11904: 0xF9B7,
	40471 - 11904: 0xF9B8,
	40472 - 11904: 0x96BB,
	40473 - 11904: 0xF9C5,
	40474 - 11904: 0xC678,
	40475 - 11904: 0xC67C,
	40476 - 11904: 0x9FF2,
	40477 - 11904: 0xF9CF,
	40478 - 11904: 0xC67D,
	40479 - 11904: 0x8BF5,
	40565 - 11904: 0xB3BF,
	40569 - 11904: 0xC4D0,
	40570 - 11904: 0xF6C9,
	40571 - 11904: 0x9AA9,
	40572 - 11904: 0xC650,
	40573 - 11904: 0xC651,
	40575 - 11904: 0xB3C0,
	40576 - 11904: 0xE0EE,
	40577 - 11904: 0x9F54,
	40578 - 11904: 0xB9A8,
	40579 - 11904: 0xE8F0,
	40580 - 11904: 0x9FE3,
	40581 - 11904: 0x9EED,
	40582 - 11904: 0xECB0,
	40583 - 11904: 0xECB1,
	40584 - 11904: 0xECAF,
	40585 - 11904: 0xEFAB,
	40586 - 11904: 0xEFAA,
	40587 - 11904: 0xC247,
	40588 - 11904: 0xF1DF,
	40589 - 11904: 0xEFAC,
	40590 - 11904: 0xF1DE,
	40592 - 11904: 0x91AA,
	40593 - 11904: 0xF3F3,
	40594 - 11904: 0xC451,
	40595 - 11904: 0xC453,
	40596 - 11904: 0xF3F2,
	40597 - 11904: 0x91AB,
	40598 - 11904: 0xA070,
	40599 - 11904: 0xC452,
	40600 - 11904: 0x9F6D,
	40601 - 11904: 0xF5B1,
	40602 - 11904: 0xF5B3,
	40603 - 11904: 0xF5B2,
	40604 - 11904: 0xF6CA,
	40605 - 11904: 0xC565,
	40606 - 11904: 0x91AC,
	40607 - 11904: 0xC5EF,
	40608 - 11904: 0xF8E8,
	40609 - 11904: 0xF963,
	40610 - 11904: 0x91AD,
	40612 - 11904: 0xF9D2,
	40613 - 11904: 0xB3C1,
	40614 - 11904: 0xA0FD,
	40615 - 11904: 0xE4E5,
	40616 - 11904: 0x9FE2,
	40617 - 11904: 0xBEA2,
	40618 - 11904: 0x91AF,
	40619 - 11904: 0x9E41,
	40620 - 11904: 0x9AAA,
	40621 - 11904: 0xECB3,
	40622 - 11904: 0xECB2,
	40623 - 11904: 0x91B0,
	40624 - 11904: 0xEFAD,
	40625 - 11904: 0x9AAB,
	40628 - 11904: 0xC454,
	40629 - 11904: 0xC4D1,
	40630 - 11904: 0xF7C7,
	40631 - 11904: 0xF9CB,
	40635 - 11904: 0xB3C2,
	40636 - 11904: 0xBBF2,
	40637 - 11904: 0x9AAC,
	40638 - 11904: 0xBEA3,
	40639 - 11904: 0x9A4A,
	40640 - 11904: 0xF3F4,
	40641 - 11904: 0x91B2,
	40642 - 11904: 0xF874,
	40643 - 11904: 0xB6C0,
	40644 - 11904: 0x8BF6,
	40646 - 11904: 0x9AAD,
	40647 - 11904: 0x89B6,
	40648 - 11904: 0xEFAE,
	40652 - 11904: 0xC664,
	40653 - 11904: 0xB6C1,
	40654 - 11904: 0xBEA4,
	40655 - 11904: 0xC248,
	40656 - 11904: 0xF875,
	40657 - 11904: 0xB6C2,
	40659 - 11904: 0xE8F1,
	40660 - 11904: 0xC072,
	40661 - 11904: 0xECB4,
	40662 - 11904: 0xECB5,
	40664 - 11904: 0xC071,
	40666 - 11904: 0xEFAF,
	40667 - 11904: 0xC24C,
	40668 - 11904: 0xC24A,
	40669 - 11904: 0xC24B,
	40670 - 11904: 0xC249,
	40671 - 11904: 0xF1E0,
	40672 - 11904: 0xC35C,
	40674 - 11904: 0x9AAF,
	40676 - 11904: 0xF5B5,
	40677 - 11904: 0xF5B4,
	40678 - 11904: 0xF5B7,
	40679 - 11904: 0xF5B6,
	40680 - 11904: 0xC4D2,
	40683 - 11904: 0xF6CB,
	40685 - 11904: 0xF6CD,
	40686 - 11904: 0xF6CC,
	40687 - 11904: 0xC566,
	40688 - 11904: 0xF7C8,
	40689 - 11904: 0x9AB0,
	40690 - 11904: 0xF876,
	40691 - 11904: 0xF877,
	40692 - 11904: 0xC5F0,
	40693 - 11904: 0xF964,
	40694 - 11904: 0xF97D,
	40695 - 11904: 0xC675,
	40696 - 11904: 0x9AB1,
	40697 - 11904: 0xDCB0,
	40698 - 11904: 0xECB6,
	40699 - 11904: 0xEFB0,
	40700 - 11904: 0xF3F5,
	40701 - 11904: 0xE0EF,
	40702 - 11904: 0x9AA1,
	40703 - 11904: 0xEFB1,
	40704 - 11904: 0xF1E2,
	40705 - 11904: 0xF1E1,
	40706 - 11904: 0x91B9,
	40710 - 11904: 0xF878,
	40711 - 11904: 0xC652,
	40712 - 11904: 0x91BA,
	40713 - 11904: 0xF965,
	40714 - 11904: 0xF97E,
	40718 - 11904: 0xB9A9,
	40719 - 11904: 0xE8F2,
	40720 - 11904: 0xE8F3,
	40722 - 11904: 0xECB7,
	40723 - 11904: 0xB9AA,
	40725 - 11904: 0xC35D,
	40726 - 11904: 0xF1E3,
	40727 - 11904: 0x9F66,
	40728 - 11904: 0xF6CF,
	40729 - 11904: 0xC567,
	40730 - 11904: 0xF6D0,
	40731 - 11904: 0xF6CE,
	40732 - 11904: 0xF879,
	40734 - 11904: 0xF8E9,
	40736 - 11904: 0xB9AB,
	40738 - 11904: 0xEFB4,
	40739 - 11904: 0xEFB3,
	40740 - 11904: 0xEFB2,
	40741 - 11904: 0xF1E4,
	40742 - 11904: 0xA041,
	40743 - 11904: 0x8BB7,
	40744 - 11904: 0xF1E8,
	40745 - 11904: 0xF1E7,
	40746 - 11904: 0xF1E6,
	40747 - 11904: 0xF1E5,
	40748 - 11904: 0xC35E,
	40749 - 11904: 0xF3F6,
	40750 - 11904: 0xF5B9,
	40751 - 11904: 0xC4D3,
	40752 - 11904: 0xF5B8,
	40753 - 11904: 0xF6D1,
	40754 - 11904: 0xF7CB,
	40755 - 11904: 0xF7CA,
	40756 - 11904: 0xC5C4,
	40757 - 11904: 0xF7C9,
	40758 - 11904: 0xF87C,
	40759 - 11904: 0xF87B,
	40760 - 11904: 0xF87A,
	40761 - 11904: 0x91C0,
	40763 - 11904: 0xBBF3,
	40765 - 11904: 0xECB8,
	40766 - 11904: 0xC24D,
	40768 - 11904: 0xF3F7,
	40769 - 11904: 0xF3F8,
	40770 - 11904: 0xF7CC,
	40771 - 11904: 0xF87D,
	40772 - 11904: 0x9AB3,
	40773 - 11904: 0x91C3,
	40774 - 11904: 0xF8EA,
	40775 - 11904: 0xF966,
	40776 - 11904: 0xF9B9,
	40777 - 11904: 0xF9D4,
	40778 - 11904: 0xBBF4,
	40779 - 11904: 0xC24E,
	40780 - 11904: 0xF1E9,
	40781 - 11904: 0xF3F9,
	40782 - 11904: 0xF6D2,
	40783 - 11904: 0xF87E,
	40784 - 11904: 0xA0FC,
	40786 - 11904: 0xBEA6,
	40787 - 11904: 0x9FEE,
	40788 - 11904: 0xEFB5,
	40789 - 11904: 0xF1EA,
	40790 - 11904: 0xF3FA,
	40791 - 11904: 0xF3FB,
	40792 - 11904: 0xF3FC,
	40793 - 11904: 0xF5BE,
	40794 - 11904: 0x9F69,
	40795 - 11904: 0xF5BA,
	40796 - 11904: 0xC568,
	40797 - 11904: 0xF5BD,
	40798 - 11904: 0xF5BC,
	40799 - 11904: 0xC4D4,
	40800 - 11904: 0xF5BB,
	40801 - 11904: 0xC4D6,
	40802 - 11904: 0x91C8,
	40803 - 11904: 0xC4D5,
	40804 - 11904: 0xF6D4,
	40805 - 11904: 0xF6D3,
	40806 - 11904: 0xC569,
	40807 - 11904: 0xC56A,
	40809 - 11904: 0x91C9,
	40810 - 11904: 0xC5C6,
	40811 - 11904: 0xF7CD,
	40812 - 11904: 0xC5C5,
	40814 - 11904: 0xF8A3,
	40815 - 11904: 0xF8A4,
	40816 - 11904: 0xF8A2,
	40817 - 11904: 0xF8A1,
	40818 - 11904: 0xC654,
	40820 - 11904: 0xF8EB,
	40821 - 11904: 0xF8EC,
	40822 - 11904: 0xF8ED,
	40823 - 11904: 0xC653,
	40824 - 11904: 0xF967,
	40825 - 11904: 0xF96A,
	40826 - 11904: 0xF969,
	40827 - 11904: 0xF968,
	40830 - 11904: 0xF9D3,
	40831 - 11904: 0x8DE6,
	40845 - 11904: 0xC073,
	40846 - 11904: 0x91CB,
	40848 - 11904: 0xC365,
	40849 - 11904: 0xF5BF,
	40850 - 11904: 0xF6D5,
	40852 - 11904: 0xC5C7,
	40853 - 11904: 0xF7CE,
	40854 - 11904: 0x87AC,
	40855 - 11904: 0x87A4,
	40856 - 11904: 0xF9D5,
	40857 - 11904: 0x89C8,
	40860 - 11904: 0xC074,
	40863 - 11904: 0x8DAA,
	40864 - 11904: 0xEFB6,
	40866 - 11904: 0xF7CF,
	40868 - 11904: 0xF9A1,
	40869 - 11904: 0x9FDD,
	40870 - 11904: 0x8C43,
	40871 - 11904: 0x8C6D,
	40872 - 11904: 0x8C74,
	40873 - 11904: 0x8CB7,
	40874 - 11904: 0x8CB9,
	40875 - 11904: 0x8CBB,
	40876 - 11904: 0x8CC0,
	40877 - 11904: 0x8CD7,
	40878 - 11904: 0x8CD8,
	40879 - 11904: 0x8CDA,
	40880 - 11904: 0xC8A1,
	40881 - 11904: 0xC8A3,
	40882 - 11904: 0x8CED,
	40883 - 11904: 0x8D48,
	40903 - 11904: 0x87C2,
	40904 - 11904: 0x87D2,
	40905 - 11904: 0x87D6,
	40906 - 11904: 0x87DA,
	40907 - 11904: 0x87DF,
}

const encode2Low, encode2High = 7870, 10046

var encode2 = [...]uint16{
	7870 - 7870:  0x8863,
	7871 - 7870:  0x88A4,
	7872 - 7870:  0x8865,
	7873 - 7870:  0x88A6,
	8211 - 7870:  0xA156,
	8212 - 7870:  0xA158,
	8216 - 7870:  0xA1A5,
	8217 - 7870:  0xA1A6,
	8220 - 7870:  0xA1A7,
	8221 - 7870:  0xA1A8,
	8229 - 7870:  0xA14C,
	8230 - 7870:  0xA14B,
	8231 - 7870:  0xA145,
	8242 - 7870:  0xA1AC,
	8245 - 7870:  0xA1AB,
	8251 - 7870:  0xA1B0,
	8364 - 7870:  0xA3E1,
	8451 - 7870:  0xA24A,
	8453 - 7870:  0xA1C1,
	8457 - 7870:  0xA24B,
	8470 - 7870:  0xC8D2,
	8481 - 7870:  0xC8D3,
	8544 - 7870:  0xA2B9,
	8545 - 7870:  0xA2BA,
	8546 - 7870:  0xA2BB,
	8547 - 7870:  0xA2BC,
	8548 - 7870:  0xA2BD,
	8549 - 7870:  0xA2BE,
	8550 - 7870:  0xA2BF,
	8551 - 7870:  0xA2C0,
	8552 - 7870:  0xA2C1,
	8553 - 7870:  0xA2C2,
	8560 - 7870:  0xC6B5,
	8561 - 7870:  0xC6B6,
	8562 - 7870:  0xC6B7,
	8563 - 7870:  0xC6B8,
	8564 - 7870:  0xC6B9,
	8565 - 7870:  0xC6BA,
	8566 - 7870:  0xC6BB,
	8567 - 7870:  0xC6BC,
	8568 - 7870:  0xC6BD,
	8569 - 7870:  0xC6BE,
	8592 - 7870:  0xA1F6,
	8593 - 7870:  0xA1F4,
	8594 - 7870:  0xA1F7,
	8595 - 7870:  0xA1F5,
	8598 - 7870:  0xA1F8,
	8599 - 7870:  0xA1F9,
	8600 - 7870:  0xA1FB,
	8601 - 7870:  0xA1FA,
	8632 - 7870:  0xC877,
	8633 - 7870:  0xC878,
	8679 - 7870:  0xC876,
	8725 - 7870:  0xA241,
	8730 - 7870:  0xA1D4,
	8734 - 7870:  0xA1DB,
	8735 - 7870:  0xA1E8,
	8736 - 7870:  0xA1E7,
	8739 - 7870:  0xA1FD,
	8741 - 7870:  0xA1FC,
	8745 - 7870:  0xA1E4,
	8746 - 7870:  0xA1E5,
	8747 - 7870:  0xA1EC,
	8750 - 7870:  0xA1ED,
	8756 - 7870:  0xA1EF,
	8757 - 7870:  0xA1EE,
	8786 - 7870:  0xA1DC,
	8800 - 7870:  0xA1DA,
	8801 - 7870:  0xA1DD,
	8806 - 7870:  0xA1D8,
	8807 - 7870:  0xA1D9,
	8853 - 7870:  0xA1F2,
	8857 - 7870:  0xA1F3,
	8869 - 7870:  0xA1E6,
	8895 - 7870:  0xA1E9,
	9178 - 7870:  0x88A9,
	9179 - 7870:  0x88AA,
	9216 - 7870:  0xA3C0,
	9217 - 7870:  0xA3C1,
	9218 - 7870:  0xA3C2,
	9219 - 7870:  0xA3C3,
	9220 - 7870:  0xA3C4,
	9221 - 7870:  0xA3C5,
	9222 - 7870:  0xA3C6,
	9223 - 7870:  0xA3C7,
	9224 - 7870:  0xA3C8,
	9225 - 7870:  0xA3C9,
	9226 - 7870:  0xA3CA,
	9227 - 7870:  0xA3CB,
	9228 - 7870:  0xA3CC,
	9229 - 7870:  0xA3CD,
	9230 - 7870:  0xA3CE,
	9231 - 7870:  0xA3CF,
	9232 - 7870:  0xA3D0,
	9233 - 7870:  0xA3D1,
	9234 - 7870:  0xA3D2,
	9235 - 7870:  0xA3D3,
	9236 - 7870:  0xA3D4,
	9237 - 7870:  0xA3D5,
	9238 - 7870:  0xA3D6,
	9239 - 7870:  0xA3D7,
	9240 - 7870:  0xA3D8,
	9241 - 7870:  0xA3D9,
	9242 - 7870:  0xA3DA,
	9243 - 7870:  0xA3DB,
	9244 - 7870:  0xA3DC,
	9245 - 7870:  0xA3DD,
	9246 - 7870:  0xA3DE,
	9247 - 7870:  0xA3DF,
	9249 - 7870:  0xA3E0,
	9312 - 7870:  0xC6A1,
	9313 - 7870:  0xC6A2,
	9314 - 7870:  0xC6A3,
	9315 - 7870:  0xC6A4,
	9316 - 7870:  0xC6A5,
	9317 - 7870:  0xC6A6,
	9318 - 7870:  0xC6A7,
	9319 - 7870:  0xC6A8,
	9320 - 7870:  0xC6A9,
	9321 - 7870:  0xC6AA,
	9332 - 7870:  0xC6AB,
	9333 - 7870:  0xC6AC,
	9334 - 7870:  0xC6AD,
	9335 - 7870:  0xC6AE,
	9336 - 7870:  0xC6AF,
	9337 - 7870:  0xC6B0,
	9338 - 7870:  0xC6B1,
	9339 - 7870:  0xC6B2,
	9340 - 7870:  0xC6B3,
	9341 - 7870:  0xC6B4,
	9472 - 7870:  0xA277,
	9474 - 7870:  0xA278,
	9484 - 7870:  0xA27A,
	9488 - 7870:  0xA27B,
	9492 - 7870:  0xA27C,
	9496 - 7870:  0xA27D,
	9500 - 7870:  0xA275,
	9508 - 7870:  0xA274,
	9516 - 7870:  0xA273,
	9524 - 7870:  0xA272,
	9532 - 7870:  0xA271,
	9552 - 7870:  0xF9F9,
	9553 - 7870:  0xF9F8,
	9554 - 7870:  0xF9E6,
	9555 - 7870:  0xF9EF,
	9556 - 7870:  0xF9DD,
	9557 - 7870:  0xF9E8,
	9558 - 7870:  0xF9F1,
	9559 - 7870:  0xF9DF,
	9560 - 7870:  0xF9EC,
	9561 - 7870:  0xF9F5,
	9562 - 7870:  0xF9E3,
	9563 - 7870:  0xF9EE,
	9564 - 7870:  0xF9F7,
	9565 - 7870:  0xF9E5,
	9566 - 7870:  0xF9E9,
	9567 - 7870:  0xF9F2,
	9568 - 7870:  0xF9E0,
	9569 - 7870:  0xF9EB,
	9570 - 7870:  0xF9F4,
	9571 - 7870:  0xF9E2,
	9572 - 7870:  0xF9E7,
	9573 - 7870:  0xF9F0,
	9574 - 7870:  0xF9DE,
	9575 - 7870:  0xF9ED,
	9576 - 7870:  0xF9F6,
	9577 - 7870:  0xF9E4,
	9578 - 7870:  0xF9EA,
	9579 - 7870:  0xF9F3,
	9580 - 7870:  0xF9E1,
	9581 - 7870:  0xF9FA,
	9582 - 7870:  0xF9FB,
	9583 - 7870:  0xF9FD,
	9584 - 7870:  0xF9FC,
	9585 - 7870:  0xA2AC,
	9586 - 7870:  0xA2AD,
	9587 - 7870:  0xA2AE,
	9588 - 7870:  0xA15A,
	9601 - 7870:  0xA262,
	9602 - 7870:  0xA263,
	9603 - 7870:  0xA264,
	9604 - 7870:  0xA265,
	9605 - 7870:  0xA266,
	9606 - 7870:  0xA267,
	9607 - 7870:  0xA268,
	9608 - 7870:  0xA269,
	9609 - 7870:  0xA270,
	9610 - 7870:  0xA26F,
	9611 - 7870:  0xA26E,
	9612 - 7870:  0xA26D,
	9613 - 7870:  0xA26C,
	9614 - 7870:  0xA26B,
	9615 - 7870:  0xA26A,
	9620 - 7870:  0xA276,
	9621 - 7870:  0xA279,
	9632 - 7870:  0xA1BD,
	9633 - 7870:  0xA1BC,
	9650 - 7870:  0xA1B6,
	9651 - 7870:  0xA1B5,
	9660 - 7870:  0xA1BF,
	9661 - 7870:  0xA1BE,
	9670 - 7870:  0xA1BB,
	9671 - 7870:  0xA1BA,
	9675 - 7870:  0xA1B3,
	9678 - 7870:  0xA1B7,
	9679 - 7870:  0xA1B4,
	9698 - 7870:  0xA2A8,
	9699 - 7870:  0xA2A9,
	9700 - 7870:  0xA2AB,
	9701 - 7870:  0xA2AA,
	9733 - 7870:  0xA1B9,
	9734 - 7870:  0xA1B8,
	9792 - 7870:  0xA1F0,
	9794 - 7870:  0xA1F1,
	10045 - 7870: 0xC6E6,
}

const encode3Low, encode3High = 167, 1106

var encode3 = [...]uint16{
	167 - 167:  0xA1B1,
	168 - 167:  0xC6D8,
	175 - 167:  0xA1C2,
	176 - 167:  0xA258,
	177 - 167:  0xA1D3,
	183 - 167:  0xA150,
	192 - 167:  0x8859,
	193 - 167:  0x8857,
	200 - 167:  0x885D,
	201 - 167:  0x885B,
	202 - 167:  0x8866,
	210 - 167:  0x8861,
	211 - 167:  0x885F,
	215 - 167:  0xA1D1,
	224 - 167:  0x886A,
	225 - 167:  0x8868,
	232 - 167:  0x886F,
	233 - 167:  0x886D,
	234 - 167:  0x88A7,
	236 - 167:  0x8873,
	237 - 167:  0x8871,
	242 - 167:  0x8877,
	243 - 167:  0x8875,
	247 - 167:  0xA1D2,
	248 - 167:  0xC8FB,
	249 - 167:  0x887B,
	250 - 167:  0x8879,
	252 - 167:  0x88A2,
	256 - 167:  0x8856,
	257 - 167:  0x8867,
	274 - 167:  0x885A,
	275 - 167:  0x886C,
	282 - 167:  0x885C,
	283 - 167:  0x886E,
	299 - 167:  0x8870,
	331 - 167:  0xC8FC,
	332 - 167:  0x885E,
	333 - 167:  0x8874,
	339 - 167:  0xC8FA,
	363 - 167:  0x8878,
	461 - 167:  0x8858,
	462 - 167:  0x8869,
	464 - 167:  0x8872,
	465 - 167:  0x8860,
	466 - 167:  0x8876,
	468 - 167:  0x887A,
	470 - 167:  0x887C,
	472 - 167:  0x887D,
	474 - 167:  0x887E,
	476 - 167:  0x88A1,
	592 - 167:  0xC8F6,
	593 - 167:  0x886B,
	596 - 167:  0xC8F8,
	603 - 167:  0xC8F7,
	609 - 167:  0x88A8,
	618 - 167:  0xC8FE,
	629 - 167:  0xC8F9,
	643 - 167:  0xC8F5,
	650 - 167:  0xC8FD,
	710 - 167:  0xC6D9,
	711 - 167:  0xA3BE,
	713 - 167:  0xA3BC,
	714 - 167:  0xA3BD,
	715 - 167:  0xA3BF,
	717 - 167:  0xA1C5,
	729 - 167:  0xA3BB,
	913 - 167:  0xA344,
	914 - 167:  0xA345,
	915 - 167:  0xA346,
	916 - 167:  0xA347,
	917 - 167:  0xA348,
	918 - 167:  0xA349,
	919 - 167:  0xA34A,
	920 - 167:  0xA34B,
	921 - 167:  0xA34C,
	922 - 167:  0xA34D,
	923 - 167:  0xA34E,
	924 - 167:  0xA34F,
	925 - 167:  0xA350,
	926 - 167:  0xA351,
	927 - 167:  0xA352,
	928 - 167:  0xA353,
	929 - 167:  0xA354,
	931 - 167:  0xA355,
	932 - 167:  0xA356,
	933 - 167:  0xA357,
	934 - 167:  0xA358,
	935 - 167:  0xA359,
	936 - 167:  0xA35A,
	937 - 167:  0xA35B,
	945 - 167:  0xA35C,
	946 - 167:  0xA35D,
	947 - 167:  0xA35E,
	948 - 167:  0xA35F,
	949 - 167:  0xA360,
	950 - 167:  0xA361,
	951 - 167:  0xA362,
	952 - 167:  0xA363,
	953 - 167:  0xA364,
	954 - 167:  0xA365,
	955 - 167:  0xA366,
	956 - 167:  0xA367,
	957 - 167:  0xA368,
	958 - 167:  0xA369,
	959 - 167:  0xA36A,
	960 - 167:  0xA36B,
	961 - 167:  0xA36C,
	963 - 167:  0xA36D,
	964 - 167:  0xA36E,
	965 - 167:  0xA36F,
	966 - 167:  0xA370,
	967 - 167:  0xA371,
	968 - 167:  0xA372,
	969 - 167:  0xA373,
	1025 - 167: 0xC7F9,
	1040 - 167: 0xC7F3,
	1041 - 167: 0xC7F4,
	1042 - 167: 0xC7F5,
	1043 - 167: 0xC7F6,
	1044 - 167: 0xC7F7,
	1045 - 167: 0xC7F8,
	1046 - 167: 0xC7FA,
	1047 - 167: 0xC7FB,
	1048 - 167: 0xC7FC,
	1049 - 167: 0xC7FD,
	1050 - 167: 0xC7FE,
	1051 - 167: 0xC840,
	1052 - 167: 0xC841,
	1053 - 167: 0xC842,
	1054 - 167: 0xC843,
	1055 - 167: 0xC844,
	1056 - 167: 0xC845,
	1057 - 167: 0xC846,
	1058 - 167: 0xC847,
	1059 - 167: 0xC848,
	1060 - 167: 0xC849,
	1061 - 167: 0xC84A,
	1062 - 167: 0xC84B,
	1063 - 167: 0xC84C,
	1064 - 167: 0xC84D,
	1065 - 167: 0xC84E,
	1066 - 167: 0xC84F,
	1067 - 167: 0xC850,
	1068 - 167: 0xC851,
	1069 - 167: 0xC852,
	1070 - 167: 0xC853,
	1071 - 167: 0xC854,
	1072 - 167: 0xC855,
	1073 - 167: 0xC856,
	1074 - 167: 0xC857,
	1075 - 167: 0xC858,
	1076 - 167: 0xC859,
	1077 - 167: 0xC85A,
	1078 - 167: 0xC85C,
	1079 - 167: 0xC85D,
	1080 - 167: 0xC85E,
	1081 - 167: 0xC85F,
	1082 - 167: 0xC860,
	1083 - 167: 0xC861,
	1084 - 167: 0xC862,
	1085 - 167: 0xC863,
	1086 - 167: 0xC864,
	1087 - 167: 0xC865,
	1088 - 167: 0xC866,
	1089 - 167: 0xC867,
	1090 - 167: 0xC868,
	1091 - 167: 0xC869,
	1092 - 167: 0xC86A,
	1093 - 167: 0xC86B,
	1094 - 167: 0xC86C,
	1095 - 167: 0xC86D,
	1096 - 167: 0xC86E,
	1097 - 167: 0xC86F,
	1098 - 167: 0xC870,
	1099 - 167: 0xC871,
	1100 - 167: 0xC872,
	1101 - 167: 0xC873,
	1102 - 167: 0xC874,
	1103 - 167: 0xC875,
	1105 - 167: 0xC85B,
}

const encode4Low, encode4High = 65072, 65518

var encode4 = [...]uint16{
	65072 - 65072: 0xA14A,
	65073 - 65072: 0xA157,
	65075 - 65072: 0xA159,
	65076 - 65072: 0xA15B,
	65077 - 65072: 0xA15F,
	65078 - 65072: 0xA160,
	65079 - 65072: 0xA163,
	65080 - 65072: 0xA164,
	65081 - 65072: 0xA167,
	65082 - 65072: 0xA168,
	65083 - 65072: 0xA16B,
	65084 - 65072: 0xA16C,
	65085 - 65072: 0xA16F,
	65086 - 65072: 0xA170,
	65087 - 65072: 0xA173,
	65088 - 65072: 0xA174,
	65089 - 65072: 0xA177,
	65090 - 65072: 0xA178,
	65091 - 65072: 0xA17B,
	65092 - 65072: 0xA17C,
	65097 - 65072: 0xA1C6,
	65098 - 65072: 0xA1C7,
	65099 - 65072: 0xA1CA,
	65100 - 65072: 0xA1CB,
	65101 - 65072: 0xA1C8,
	65102 - 65072: 0xA1C9,
	65103 - 65072: 0xA15C,
	65104 - 65072: 0xA14D,
	65105 - 65072: 0xA14E,
	65106 - 65072: 0xA14F,
	65108 - 65072: 0xA151,
	65109 - 65072: 0xA152,
	65110 - 65072: 0xA153,
	65111 - 65072: 0xA154,
	65113 - 65072: 0xA17D,
	65114 - 65072: 0xA17E,
	65115 - 65072: 0xA1A1,
	65116 - 65072: 0xA1A2,
	65117 - 65072: 0xA1A3,
	65118 - 65072: 0xA1A4,
	65119 - 65072: 0xA1CC,
	65120 - 65072: 0xA1CD,
	65121 - 65072: 0xA1CE,
	65122 - 65072: 0xA1DE,
	65123 - 65072: 0xA1DF,
	65124 - 65072: 0xA1E0,
	65125 - 65072: 0xA1E1,
	65126 - 65072: 0xA1E2,
	65128 - 65072: 0xA242,
	65129 - 65072: 0xA24C,
	65130 - 65072: 0xA24D,
	65131 - 65072: 0xA24E,
	65281 - 65072: 0xA149,
	65282 - 65072: 0xC8D0,
	65283 - 65072: 0xA1AD,
	65284 - 65072: 0xA243,
	65285 - 65072: 0xA248,
	65286 - 65072: 0xA1AE,
	65287 - 65072: 0xC8CF,
	65288 - 65072: 0xA15D,
	65289 - 65072: 0xA15E,
	65290 - 65072: 0xA1AF,
	65291 - 65072: 0xA1CF,
	65292 - 65072: 0xA141,
	65293 - 65072: 0xA1D0,
	65294 - 65072: 0xA144,
	65295 - 65072: 0xA1FE,
	65296 - 65072: 0xA2AF,
	65297 - 65072: 0xA2B0,
	65298 - 65072: 0xA2B1,
	65299 - 65072: 0xA2B2,
	65300 - 65072: 0xA2B3,
	65301 - 65072: 0xA2B4,
	65302 - 65072: 0xA2B5,
	65303 - 65072: 0xA2B6,
	65304 - 65072: 0xA2B7,
	65305 - 65072: 0xA2B8,
	65306 - 65072: 0xA147,
	65307 - 65072: 0xA146,
	65308 - 65072: 0xA1D5,
	65309 - 65072: 0xA1D7,
	65310 - 65072: 0xA1D6,
	65311 - 65072: 0xA148,
	65312 - 65072: 0xA249,
	65313 - 65072: 0xA2CF,
	65314 - 65072: 0xA2D0,
	65315 - 65072: 0xA2D1,
	65316 - 65072: 0xA2D2,
	65317 - 65072: 0xA2D3,
	65318 - 65072: 0xA2D4,
	65319 - 65072: 0xA2D5,
	65320 - 65072: 0xA2D6,
	65321 - 65072: 0xA2D7,
	65322 - 65072: 0xA2D8,
	65323 - 65072: 0xA2D9,
	65324 - 65072: 0xA2DA,
	65325 - 65072: 0xA2DB,
	65326 - 65072: 0xA2DC,
	65327 - 65072: 0xA2DD,
	65328 - 65072: 0xA2DE,
	65329 - 65072: 0xA2DF,
	65330 - 65072: 0xA2E0,
	65331 - 65072: 0xA2E1,
	65332 - 65072: 0xA2E2,
	65333 - 65072: 0xA2E3,
	65334 - 65072: 0xA2E4,
	65335 - 65072: 0xA2E5,
	65336 - 65072: 0xA2E6,
	65337 - 65072: 0xA2E7,
	65338 - 65072: 0xA2E8,
	65339 - 65072: 0xC6E4,
	65340 - 65072: 0xA240,
	65341 - 65072: 0xC6E5,
	65343 - 65072: 0xA1C4,
	65345 - 65072: 0xA2E9,
	65346 - 65072: 0xA2EA,
	65347 - 65072: 0xA2EB,
	65348 - 65072: 0xA2EC,
	65349 - 65072: 0xA2ED,
	65350 - 65072: 0xA2EE,
	65351 - 65072: 0xA2EF,
	65352 - 65072: 0xA2F0,
	65353 - 65072: 0xA2F1,
	65354 - 65072: 0xA2F2,
	65355 - 65072: 0xA2F3,
	65356 - 65072: 0xA2F4,
	65357 - 65072: 0xA2F5,
	65358 - 65072: 0xA2F6,
	65359 - 65072: 0xA2F7,
	65360 - 65072: 0xA2F8,
	65361 - 65072: 0xA2F9,
	65362 - 65072: 0xA2FA,
	65363 - 65072: 0xA2FB,
	65364 - 65072: 0xA2FC,
	65365 - 65072: 0xA2FD,
	65366 - 65072: 0xA2FE,
	65367 - 65072: 0xA340,
	65368 - 65072: 0xA341,
	65369 - 65072: 0xA342,
	65370 - 65072: 0xA343,
	65371 - 65072: 0xA161,
	65372 - 65072: 0xA155,
	65373 - 65072: 0xA162,
	65374 - 65072: 0xA1E3,
	65504 - 65072: 0xA246,
	65505 - 65072: 0xA247,
	65506 - 65072: 0xC8CD,
	65507 - 65072: 0xA1C3,
	65508 - 65072: 0xC8CE,
	65509 - 65072: 0xA244,
	65517 - 65072: 0xF9FE,
}

const encode5Low, encode5High = 194597, 195029

var encode5 = [...]uint16{
	194597 - 194597: 0x9874,
	194619 - 194597: 0x9AC8,
	194624 - 194597: 0xA047,
	194680 - 194597: 0x8BC3,
	194708 - 194597: 0xFC48,
	194726 - 194597: 0xFC77,
	194765 - 194597: 0x9C52,
	194964 - 194597: 0x8EFD,
	194994 - 194597: 0x8FA8,
	195004 - 194597: 0x957A,
	195028 - 194597: 0x8FF0,
}

const encode6Low, encode6High = 63751, 64014

var encode6 = [...]uint16{
	63751 - 63751: 0x8BF8,
	64012 - 63751: 0xC94A,
	64013 - 63751: 0xDDFC,
}

const encode7Low, encode7High = 175615, 175616

var encode7 = [...]uint16{
	175615 - 175615: 0x87DC,
}
   07070100000F13000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/unicode 07070100000F14000081A4000000000000000000000001645E367C00000A94000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/unicode/override.go // Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package unicode

import (
	"golang.org/x/text/transform"
)

// BOMOverride returns a new decoder transformer that is identical to fallback,
// except that the presence of a Byte Order Mark at the start of the input
// causes it to switch to the corresponding Unicode decoding. It will only
// consider BOMs for UTF-8, UTF-16BE, and UTF-16LE.
//
// This differs from using ExpectBOM by allowing a BOM to switch to UTF-8, not
// just UTF-16 variants, and allowing falling back to any encoding scheme.
//
// This technique is recommended by the W3C for use in HTML 5: "For
// compatibility with deployed content, the byte order mark (also known as BOM)
// is considered more authoritative than anything else."
// http://www.w3.org/TR/encoding/#specification-hooks
//
// Using BOMOverride is mostly intended for use cases where the first characters
// of a fallback encoding are known to not be a BOM, for example, for valid HTML
// and most encodings.
func BOMOverride(fallback transform.Transformer) transform.Transformer {
	// TODO: possibly allow a variadic argument of unicode encodings to allow
	// specifying details of which fallbacks are supported as well as
	// specifying the details of the implementations. This would also allow for
	// support for UTF-32, which should not be supported by default.
	return &bomOverride{fallback: fallback}
}

type bomOverride struct {
	fallback transform.Transformer
	current  transform.Transformer
}

func (d *bomOverride) Reset() {
	d.current = nil
	d.fallback.Reset()
}

var (
	// TODO: we could use decode functions here, instead of allocating a new
	// decoder on every NewDecoder as IgnoreBOM decoders can be stateless.
	utf16le = UTF16(LittleEndian, IgnoreBOM)
	utf16be = UTF16(BigEndian, IgnoreBOM)
)

const utf8BOM = "\ufeff"

func (d *bomOverride) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	if d.current != nil {
		return d.current.Transform(dst, src, atEOF)
	}
	if len(src) < 3 && !atEOF {
		return 0, 0, transform.ErrShortSrc
	}
	d.current = d.fallback
	bomSize := 0
	if len(src) >= 2 {
		if src[0] == 0xFF && src[1] == 0xFE {
			d.current = utf16le.NewDecoder()
			bomSize = 2
		} else if src[0] == 0xFE && src[1] == 0xFF {
			d.current = utf16be.NewDecoder()
			bomSize = 2
		} else if len(src) >= 3 &&
			src[0] == utf8BOM[0] &&
			src[1] == utf8BOM[1] &&
			src[2] == utf8BOM[2] {
			d.current = transform.Nop
			bomSize = 3
		}
	}
	if bomSize < len(src) {
		nDst, nSrc, err = d.current.Transform(dst, src[bomSize:], atEOF)
	}
	return nDst, nSrc + bomSize, err
}
07070100000F15000081A4000000000000000000000001645E367C00003AC3000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/text/encoding/unicode/unicode.go  // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package unicode provides Unicode encodings such as UTF-16.
package unicode // import "golang.org/x/text/encoding/unicode"

import (
	"bytes"
	"errors"
	"unicode/utf16"
	"unicode/utf8"

	"golang.org/x/text/encoding"
	"golang.org/x/text/encoding/internal"
	"golang.org/x/text/encoding/internal/identifier"
	"golang.org/x/text/internal/utf8internal"
	"golang.org/x/text/runes"
	"golang.org/x/text/transform"
)

// TODO: I think the Transformers really should return errors on unmatched
// surrogate pairs and odd numbers of bytes. This is not required by RFC 2781,
// which leaves it open, but is suggested by WhatWG. It will allow for all error
// modes as defined by WhatWG: fatal, HTML and Replacement. This would require
// the introduction of some kind of error type for conveying the erroneous code
// point.

// UTF8 is the UTF-8 encoding. It neither removes nor adds byte order marks.
var UTF8 encoding.Encoding = utf8enc

// UTF8BOM is an UTF-8 encoding where the decoder strips a leading byte order
// mark while the encoder adds one.
//
// Some editors add a byte order mark as a signature to UTF-8 files. Although
// the byte order mark is not useful for detecting byte order in UTF-8, it is
// sometimes used as a convention to mark UTF-8-encoded files. This relies on
// the observation that the UTF-8 byte order mark is either an illegal or at
// least very unlikely sequence in any other character encoding.
var UTF8BOM encoding.Encoding = utf8bomEncoding{}

type utf8bomEncoding struct{}

func (utf8bomEncoding) String() string {
	return "UTF-8-BOM"
}

func (utf8bomEncoding) ID() (identifier.MIB, string) {
	return identifier.Unofficial, "x-utf8bom"
}

func (utf8bomEncoding) NewEncoder() *encoding.Encoder {
	return &encoding.Encoder{
		Transformer: &utf8bomEncoder{t: runes.ReplaceIllFormed()},
	}
}

func (utf8bomEncoding) NewDecoder() *encoding.Decoder {
	return &encoding.Decoder{Transformer: &utf8bomDecoder{}}
}

var utf8enc = &internal.Encoding{
	&internal.SimpleEncoding{utf8Decoder{}, runes.ReplaceIllFormed()},
	"UTF-8",
	identifier.UTF8,
}

type utf8bomDecoder struct {
	checked bool
}

func (t *utf8bomDecoder) Reset() {
	t.checked = false
}

func (t *utf8bomDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	if !t.checked {
		if !atEOF && len(src) < len(utf8BOM) {
			if len(src) == 0 {
				return 0, 0, nil
			}
			return 0, 0, transform.ErrShortSrc
		}
		if bytes.HasPrefix(src, []byte(utf8BOM)) {
			nSrc += len(utf8BOM)
			src = src[len(utf8BOM):]
		}
		t.checked = true
	}
	nDst, n, err := utf8Decoder.Transform(utf8Decoder{}, dst[nDst:], src, atEOF)
	nSrc += n
	return nDst, nSrc, err
}

type utf8bomEncoder struct {
	written bool
	t       transform.Transformer
}

func (t *utf8bomEncoder) Reset() {
	t.written = false
	t.t.Reset()
}

func (t *utf8bomEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	if !t.written {
		if len(dst) < len(utf8BOM) {
			return nDst, 0, transform.ErrShortDst
		}
		nDst = copy(dst, utf8BOM)
		t.written = true
	}
	n, nSrc, err := utf8Decoder.Transform(utf8Decoder{}, dst[nDst:], src, atEOF)
	nDst += n
	return nDst, nSrc, err
}

type utf8Decoder struct{ transform.NopResetter }

func (utf8Decoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	var pSrc int // point from which to start copy in src
	var accept utf8internal.AcceptRange

	// The decoder can only make the input larger, not smaller.
	n := len(src)
	if len(dst) < n {
		err = transform.ErrShortDst
		n = len(dst)
		atEOF = false
	}
	for nSrc < n {
		c := src[nSrc]
		if c < utf8.RuneSelf {
			nSrc++
			continue
		}
		first := utf8internal.First[c]
		size := int(first & utf8internal.SizeMask)
		if first == utf8internal.FirstInvalid {
			goto handleInvalid // invalid starter byte
		}
		accept = utf8internal.AcceptRanges[first>>utf8internal.AcceptShift]
		if nSrc+size > n {
			if !atEOF {
				// We may stop earlier than necessary here if the short sequence
				// has invalid bytes. Not checking for this simplifies the code
				// and may avoid duplicate computations in certain conditions.
				if err == nil {
					err = transform.ErrShortSrc
				}
				break
			}
			// Determine the maximal subpart of an ill-formed subsequence.
			switch {
			case nSrc+1 >= n || src[nSrc+1] < accept.Lo || accept.Hi < src[nSrc+1]:
				size = 1
			case nSrc+2 >= n || src[nSrc+2] < utf8internal.LoCB || utf8internal.HiCB < src[nSrc+2]:
				size = 2
			default:
				size = 3 // As we are short, the maximum is 3.
			}
			goto handleInvalid
		}
		if c = src[nSrc+1]; c < accept.Lo || accept.Hi < c {
			size = 1
			goto handleInvalid // invalid continuation byte
		} else if size == 2 {
		} else if c = src[nSrc+2]; c < utf8internal.LoCB || utf8internal.HiCB < c {
			size = 2
			goto handleInvalid // invalid continuation byte
		} else if size == 3 {
		} else if c = src[nSrc+3]; c < utf8internal.LoCB || utf8internal.HiCB < c {
			size = 3
			goto handleInvalid // invalid continuation byte
		}
		nSrc += size
		continue

	handleInvalid:
		// Copy the scanned input so far.
		nDst += copy(dst[nDst:], src[pSrc:nSrc])

		// Append RuneError to the destination.
		const runeError = "\ufffd"
		if nDst+len(runeError) > len(dst) {
			return nDst, nSrc, transform.ErrShortDst
		}
		nDst += copy(dst[nDst:], runeError)

		// Skip the maximal subpart of an ill-formed subsequence according to
		// the W3C standard way instead of the Go way. This Transform is
		// probably the only place in the text repo where it is warranted.
		nSrc += size
		pSrc = nSrc

		// Recompute the maximum source length.
		if sz := len(dst) - nDst; sz < len(src)-nSrc {
			err = transform.ErrShortDst
			n = nSrc + sz
			atEOF = false
		}
	}
	return nDst + copy(dst[nDst:], src[pSrc:nSrc]), nSrc, err
}

// UTF16 returns a UTF-16 Encoding for the given default endianness and byte
// order mark (BOM) policy.
//
// When decoding from UTF-16 to UTF-8, if the BOMPolicy is IgnoreBOM then
// neither BOMs U+FEFF nor noncharacters U+FFFE in the input stream will affect
// the endianness used for decoding, and will instead be output as their
// standard UTF-8 encodings: "\xef\xbb\xbf" and "\xef\xbf\xbe". If the BOMPolicy
// is UseBOM or ExpectBOM a staring BOM is not written to the UTF-8 output.
// Instead, it overrides the default endianness e for the remainder of the
// transformation. Any subsequent BOMs U+FEFF or noncharacters U+FFFE will not
// affect the endianness used, and will instead be output as their standard
// UTF-8 encodings. For UseBOM, if there is no starting BOM, it will proceed
// with the default Endianness. For ExpectBOM, in that case, the transformation
// will return early with an ErrMissingBOM error.
//
// When encoding from UTF-8 to UTF-16, a BOM will be inserted at the start of
// the output if the BOMPolicy is UseBOM or ExpectBOM. Otherwise, a BOM will not
// be inserted. The UTF-8 input does not need to contain a BOM.
//
// There is no concept of a 'native' endianness. If the UTF-16 data is produced
// and consumed in a greater context that implies a certain endianness, use
// IgnoreBOM. Otherwise, use ExpectBOM and always produce and consume a BOM.
//
// In the language of https://www.unicode.org/faq/utf_bom.html#bom10, IgnoreBOM
// corresponds to "Where the precise type of the data stream is known... the
// BOM should not be used" and ExpectBOM corresponds to "A particular
// protocol... may require use of the BOM".
func UTF16(e Endianness, b BOMPolicy) encoding.Encoding {
	return utf16Encoding{config{e, b}, mibValue[e][b&bomMask]}
}

// mibValue maps Endianness and BOMPolicy settings to MIB constants. Note that
// some configurations map to the same MIB identifier. RFC 2781 has requirements
// and recommendations. Some of the "configurations" are merely recommendations,
// so multiple configurations could match.
var mibValue = map[Endianness][numBOMValues]identifier.MIB{
	BigEndian: [numBOMValues]identifier.MIB{
		IgnoreBOM: identifier.UTF16BE,
		UseBOM:    identifier.UTF16, // BigEnding default is preferred by RFC 2781.
		// TODO: acceptBOM | strictBOM would map to UTF16BE as well.
	},
	LittleEndian: [numBOMValues]identifier.MIB{
		IgnoreBOM: identifier.UTF16LE,
		UseBOM:    identifier.UTF16, // LittleEndian default is allowed and preferred on Windows.
		// TODO: acceptBOM | strictBOM would map to UTF16LE as well.
	},
	// ExpectBOM is not widely used and has no valid MIB identifier.
}

// All lists a configuration for each IANA-defined UTF-16 variant.
var All = []encoding.Encoding{
	UTF8,
	UTF16(BigEndian, UseBOM),
	UTF16(BigEndian, IgnoreBOM),
	UTF16(LittleEndian, IgnoreBOM),
}

// BOMPolicy is a UTF-16 encoding's byte order mark policy.
type BOMPolicy uint8

const (
	writeBOM   BOMPolicy = 0x01
	acceptBOM  BOMPolicy = 0x02
	requireBOM BOMPolicy = 0x04
	bomMask    BOMPolicy = 0x07

	// HACK: numBOMValues == 8 triggers a bug in the 1.4 compiler (cannot have a
	// map of an array of length 8 of a type that is also used as a key or value
	// in another map). See golang.org/issue/11354.
	// TODO: consider changing this value back to 8 if the use of 1.4.* has
	// been minimized.
	numBOMValues = 8 + 1

	// IgnoreBOM means to ignore any byte order marks.
	IgnoreBOM BOMPolicy = 0
	// Common and RFC 2781-compliant interpretation for UTF-16BE/LE.

	// UseBOM means that the UTF-16 form may start with a byte order mark, which
	// will be used to override the default encoding.
	UseBOM BOMPolicy = writeBOM | acceptBOM
	// Common and RFC 2781-compliant interpretation for UTF-16.

	// ExpectBOM means that the UTF-16 form must start with a byte order mark,
	// which will be used to override the default encoding.
	ExpectBOM BOMPolicy = writeBOM | acceptBOM | requireBOM
	// Used in Java as Unicode (not to be confused with Java's UTF-16) and
	// ICU's UTF-16,version=1. Not compliant with RFC 2781.

	// TODO (maybe): strictBOM: BOM must match Endianness. This would allow:
	// - UTF-16(B|L)E,version=1: writeBOM | acceptBOM | requireBOM | strictBOM
	//    (UnicodeBig and UnicodeLittle in Java)
	// - RFC 2781-compliant, but less common interpretation for UTF-16(B|L)E:
	//    acceptBOM | strictBOM (e.g. assigned to CheckBOM).
	// This addition would be consistent with supporting ExpectBOM.
)

// Endianness is a UTF-16 encoding's default endianness.
type Endianness bool

const (
	// BigEndian is UTF-16BE.
	BigEndian Endianness = false
	// LittleEndian is UTF-16LE.
	LittleEndian Endianness = true
)

// ErrMissingBOM means that decoding UTF-16 input with ExpectBOM did not find a
// starting byte order mark.
var ErrMissingBOM = errors.New("encoding: missing byte order mark")

type utf16Encoding struct {
	config
	mib identifier.MIB
}

type config struct {
	endianness Endianness
	bomPolicy  BOMPolicy
}

func (u utf16Encoding) NewDecoder() *encoding.Decoder {
	return &encoding.Decoder{Transformer: &utf16Decoder{
		initial: u.config,
		current: u.config,
	}}
}

func (u utf16Encoding) NewEncoder() *encoding.Encoder {
	return &encoding.Encoder{Transformer: &utf16Encoder{
		endianness:       u.endianness,
		initialBOMPolicy: u.bomPolicy,
		currentBOMPolicy: u.bomPolicy,
	}}
}

func (u utf16Encoding) ID() (mib identifier.MIB, other string) {
	return u.mib, ""
}

func (u utf16Encoding) String() string {
	e, b := "B", ""
	if u.endianness == LittleEndian {
		e = "L"
	}
	switch u.bomPolicy {
	case ExpectBOM:
		b = "Expect"
	case UseBOM:
		b = "Use"
	case IgnoreBOM:
		b = "Ignore"
	}
	return "UTF-16" + e + "E (" + b + " BOM)"
}

type utf16Decoder struct {
	initial config
	current config
}

func (u *utf16Decoder) Reset() {
	u.current = u.initial
}

func (u *utf16Decoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	if len(src) < 2 && atEOF && u.current.bomPolicy&requireBOM != 0 {
		return 0, 0, ErrMissingBOM
	}
	if len(src) == 0 {
		return 0, 0, nil
	}
	if len(src) >= 2 && u.current.bomPolicy&acceptBOM != 0 {
		switch {
		case src[0] == 0xfe && src[1] == 0xff:
			u.current.endianness = BigEndian
			nSrc = 2
		case src[0] == 0xff && src[1] == 0xfe:
			u.current.endianness = LittleEndian
			nSrc = 2
		default:
			if u.current.bomPolicy&requireBOM != 0 {
				return 0, 0, ErrMissingBOM
			}
		}
		u.current.bomPolicy = IgnoreBOM
	}

	var r rune
	var dSize, sSize int
	for nSrc < len(src) {
		if nSrc+1 < len(src) {
			x := uint16(src[nSrc+0])<<8 | uint16(src[nSrc+1])
			if u.current.endianness == LittleEndian {
				x = x>>8 | x<<8
			}
			r, sSize = rune(x), 2
			if utf16.IsSurrogate(r) {
				if nSrc+3 < len(src) {
					x = uint16(src[nSrc+2])<<8 | uint16(src[nSrc+3])
					if u.current.endianness == LittleEndian {
						x = x>>8 | x<<8
					}
					// Save for next iteration if it is not a high surrogate.
					if isHighSurrogate(rune(x)) {
						r, sSize = utf16.DecodeRune(r, rune(x)), 4
					}
				} else if !atEOF {
					err = transform.ErrShortSrc
					break
				}
			}
			if dSize = utf8.RuneLen(r); dSize < 0 {
				r, dSize = utf8.RuneError, 3
			}
		} else if atEOF {
			// Single trailing byte.
			r, dSize, sSize = utf8.RuneError, 3, 1
		} else {
			err = transform.ErrShortSrc
			break
		}
		if nDst+dSize > len(dst) {
			err = transform.ErrShortDst
			break
		}
		nDst += utf8.EncodeRune(dst[nDst:], r)
		nSrc += sSize
	}
	return nDst, nSrc, err
}

func isHighSurrogate(r rune) bool {
	return 0xDC00 <= r && r <= 0xDFFF
}

type utf16Encoder struct {
	endianness       Endianness
	initialBOMPolicy BOMPolicy
	currentBOMPolicy BOMPolicy
}

func (u *utf16Encoder) Reset() {
	u.currentBOMPolicy = u.initialBOMPolicy
}

func (u *utf16Encoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	if u.currentBOMPolicy&writeBOM != 0 {
		if len(dst) < 2 {
			return 0, 0, transform.ErrShortDst
		}
		dst[0], dst[1] = 0xfe, 0xff
		u.currentBOMPolicy = IgnoreBOM
		nDst = 2
	}

	r, size := rune(0), 0
	for nSrc < len(src) {
		r = rune(src[nSrc])

		// Decode a 1-byte rune.
		if r < utf8.RuneSelf {
			size = 1

		} else {
			// Decode a multi-byte rune.
			r, size = utf8.DecodeRune(src[nSrc:])
			if size == 1 {
				// All valid runes of size 1 (those below utf8.RuneSelf) were
				// handled above. We have invalid UTF-8 or we haven't seen the
				// full character yet.
				if !atEOF && !utf8.FullRune(src[nSrc:]) {
					err = transform.ErrShortSrc
					break
				}
			}
		}

		if r <= 0xffff {
			if nDst+2 > len(dst) {
				err = transform.ErrShortDst
				break
			}
			dst[nDst+0] = uint8(r >> 8)
			dst[nDst+1] = uint8(r)
			nDst += 2
		} else {
			if nDst+4 > len(dst) {
				err = transform.ErrShortDst
				break
			}
			r1, r2 := utf16.EncodeRune(r)
			dst[nDst+0] = uint8(r1 >> 8)
			dst[nDst+1] = uint8(r1)
			dst[nDst+2] = uint8(r2 >> 8)
			dst[nDst+3] = uint8(r2)
			nDst += 4
		}
		nSrc += size
	}

	if u.endianness == LittleEndian {
		for i := 0; i < nDst; i += 2 {
			dst[i], dst[i+1] = dst[i+1], dst[i]
		}
	}
	return nDst, nSrc, err
}
 07070100000F16000041ED000000000000000000000005645E367C00000000000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/golang.org/x/text/internal 07070100000F17000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/golang.org/x/text/internal/language    07070100000F18000081A4000000000000000000000001645E367C0000014E000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/text/internal/language/common.go  // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.

package language

// This file contains code common to the maketables.go and the package code.

// AliasType is the type of an alias in AliasMap.
type AliasType int8

const (
	Deprecated AliasType = iota
	Macro
	Legacy

	AliasTypeUnknown AliasType = -1
)
  07070100000F19000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/text/internal/language/compact    07070100000F1A000081A4000000000000000000000001645E367C00000355000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/text/internal/language/compact.go // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package language

// CompactCoreInfo is a compact integer with the three core tags encoded.
type CompactCoreInfo uint32

// GetCompactCore generates a uint32 value that is guaranteed to be unique for
// different language, region, and script values.
func GetCompactCore(t Tag) (cci CompactCoreInfo, ok bool) {
	if t.LangID > langNoIndexOffset {
		return 0, false
	}
	cci |= CompactCoreInfo(t.LangID) << (8 + 12)
	cci |= CompactCoreInfo(t.ScriptID) << 12
	cci |= CompactCoreInfo(t.RegionID)
	return cci, true
}

// Tag generates a tag from c.
func (c CompactCoreInfo) Tag() Tag {
	return Tag{
		LangID:   Language(c >> 20),
		RegionID: Region(c & 0x3ff),
		ScriptID: Script(c>>12) & 0xff,
	}
}
   07070100000F1B000081A4000000000000000000000001645E367C000006AB000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/golang.org/x/text/internal/language/compact/compact.go // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package compact defines a compact representation of language tags.
//
// Common language tags (at least all for which locale information is defined
// in CLDR) are assigned a unique index. Each Tag is associated with such an
// ID for selecting language-related resources (such as translations) as well
// as one for selecting regional defaults (currency, number formatting, etc.)
//
// It may want to export this functionality at some point, but at this point
// this is only available for use within x/text.
package compact // import "golang.org/x/text/internal/language/compact"

import (
	"sort"
	"strings"

	"golang.org/x/text/internal/language"
)

// ID is an integer identifying a single tag.
type ID uint16

func getCoreIndex(t language.Tag) (id ID, ok bool) {
	cci, ok := language.GetCompactCore(t)
	if !ok {
		return 0, false
	}
	i := sort.Search(len(coreTags), func(i int) bool {
		return cci <= coreTags[i]
	})
	if i == len(coreTags) || coreTags[i] != cci {
		return 0, false
	}
	return ID(i), true
}

// Parent returns the ID of the parent or the root ID if id is already the root.
func (id ID) Parent() ID {
	return parents[id]
}

// Tag converts id to an internal language Tag.
func (id ID) Tag() language.Tag {
	if int(id) >= len(coreTags) {
		return specialTags[int(id)-len(coreTags)]
	}
	return coreTags[id].Tag()
}

var specialTags []language.Tag

func init() {
	tags := strings.Split(specialTagsStr, " ")
	specialTags = make([]language.Tag, len(tags))
	for i, t := range tags {
		specialTags[i] = language.MustParse(t)
	}
}
 07070100000F1C000081A4000000000000000000000001645E367C00001D17000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/golang.org/x/text/internal/language/compact/language.go    // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:generate go run gen.go gen_index.go -output tables.go
//go:generate go run gen_parents.go

package compact

// TODO: Remove above NOTE after:
// - verifying that tables are dropped correctly (most notably matcher tables).

import (
	"strings"

	"golang.org/x/text/internal/language"
)

// Tag represents a BCP 47 language tag. It is used to specify an instance of a
// specific language or locale. All language tag values are guaranteed to be
// well-formed.
type Tag struct {
	// NOTE: exported tags will become part of the public API.
	language ID
	locale   ID
	full     fullTag // always a language.Tag for now.
}

const _und = 0

type fullTag interface {
	IsRoot() bool
	Parent() language.Tag
}

// Make a compact Tag from a fully specified internal language Tag.
func Make(t language.Tag) (tag Tag) {
	if region := t.TypeForKey("rg"); len(region) == 6 && region[2:] == "zzzz" {
		if r, err := language.ParseRegion(region[:2]); err == nil {
			tFull := t
			t, _ = t.SetTypeForKey("rg", "")
			// TODO: should we not consider "va" for the language tag?
			var exact1, exact2 bool
			tag.language, exact1 = FromTag(t)
			t.RegionID = r
			tag.locale, exact2 = FromTag(t)
			if !exact1 || !exact2 {
				tag.full = tFull
			}
			return tag
		}
	}
	lang, ok := FromTag(t)
	tag.language = lang
	tag.locale = lang
	if !ok {
		tag.full = t
	}
	return tag
}

// Tag returns an internal language Tag version of this tag.
func (t Tag) Tag() language.Tag {
	if t.full != nil {
		return t.full.(language.Tag)
	}
	tag := t.language.Tag()
	if t.language != t.locale {
		loc := t.locale.Tag()
		tag, _ = tag.SetTypeForKey("rg", strings.ToLower(loc.RegionID.String())+"zzzz")
	}
	return tag
}

// IsCompact reports whether this tag is fully defined in terms of ID.
func (t *Tag) IsCompact() bool {
	return t.full == nil
}

// MayHaveVariants reports whether a tag may have variants. If it returns false
// it is guaranteed the tag does not have variants.
func (t Tag) MayHaveVariants() bool {
	return t.full != nil || int(t.language) >= len(coreTags)
}

// MayHaveExtensions reports whether a tag may have extensions. If it returns
// false it is guaranteed the tag does not have them.
func (t Tag) MayHaveExtensions() bool {
	return t.full != nil ||
		int(t.language) >= len(coreTags) ||
		t.language != t.locale
}

// IsRoot returns true if t is equal to language "und".
func (t Tag) IsRoot() bool {
	if t.full != nil {
		return t.full.IsRoot()
	}
	return t.language == _und
}

// Parent returns the CLDR parent of t. In CLDR, missing fields in data for a
// specific language are substituted with fields from the parent language.
// The parent for a language may change for newer versions of CLDR.
func (t Tag) Parent() Tag {
	if t.full != nil {
		return Make(t.full.Parent())
	}
	if t.language != t.locale {
		// Simulate stripping -u-rg-xxxxxx
		return Tag{language: t.language, locale: t.language}
	}
	// TODO: use parent lookup table once cycle from internal package is
	// removed. Probably by internalizing the table and declaring this fast
	// enough.
	// lang := compactID(internal.Parent(uint16(t.language)))
	lang, _ := FromTag(t.language.Tag().Parent())
	return Tag{language: lang, locale: lang}
}

// nextToken returns token t and the rest of the string.
func nextToken(s string) (t, tail string) {
	p := strings.Index(s[1:], "-")
	if p == -1 {
		return s[1:], ""
	}
	p++
	return s[1:p], s[p:]
}

// LanguageID returns an index, where 0 <= index < NumCompactTags, for tags
// for which data exists in the text repository.The index will change over time
// and should not be stored in persistent storage. If t does not match a compact
// index, exact will be false and the compact index will be returned for the
// first match after repeatedly taking the Parent of t.
func LanguageID(t Tag) (id ID, exact bool) {
	return t.language, t.full == nil
}

// RegionalID returns the ID for the regional variant of this tag. This index is
// used to indicate region-specific overrides, such as default currency, default
// calendar and week data, default time cycle, and default measurement system
// and unit preferences.
//
// For instance, the tag en-GB-u-rg-uszzzz specifies British English with US
// settings for currency, number formatting, etc. The CompactIndex for this tag
// will be that for en-GB, while the RegionalID will be the one corresponding to
// en-US.
func RegionalID(t Tag) (id ID, exact bool) {
	return t.locale, t.full == nil
}

// LanguageTag returns t stripped of regional variant indicators.
//
// At the moment this means it is stripped of a regional and variant subtag "rg"
// and "va" in the "u" extension.
func (t Tag) LanguageTag() Tag {
	if t.full == nil {
		return Tag{language: t.language, locale: t.language}
	}
	tt := t.Tag()
	tt.SetTypeForKey("rg", "")
	tt.SetTypeForKey("va", "")
	return Make(tt)
}

// RegionalTag returns the regional variant of the tag.
//
// At the moment this means that the region is set from the regional subtag
// "rg" in the "u" extension.
func (t Tag) RegionalTag() Tag {
	rt := Tag{language: t.locale, locale: t.locale}
	if t.full == nil {
		return rt
	}
	b := language.Builder{}
	tag := t.Tag()
	// tag, _ = tag.SetTypeForKey("rg", "")
	b.SetTag(t.locale.Tag())
	if v := tag.Variants(); v != "" {
		for _, v := range strings.Split(v, "-") {
			b.AddVariant(v)
		}
	}
	for _, e := range tag.Extensions() {
		b.AddExt(e)
	}
	return t
}

// FromTag reports closest matching ID for an internal language Tag.
func FromTag(t language.Tag) (id ID, exact bool) {
	// TODO: perhaps give more frequent tags a lower index.
	// TODO: we could make the indexes stable. This will excluded some
	//       possibilities for optimization, so don't do this quite yet.
	exact = true

	b, s, r := t.Raw()
	if t.HasString() {
		if t.IsPrivateUse() {
			// We have no entries for user-defined tags.
			return 0, false
		}
		hasExtra := false
		if t.HasVariants() {
			if t.HasExtensions() {
				build := language.Builder{}
				build.SetTag(language.Tag{LangID: b, ScriptID: s, RegionID: r})
				build.AddVariant(t.Variants())
				exact = false
				t = build.Make()
			}
			hasExtra = true
		} else if _, ok := t.Extension('u'); ok {
			// TODO: va may mean something else. Consider not considering it.
			// Strip all but the 'va' entry.
			old := t
			variant := t.TypeForKey("va")
			t = language.Tag{LangID: b, ScriptID: s, RegionID: r}
			if variant != "" {
				t, _ = t.SetTypeForKey("va", variant)
				hasExtra = true
			}
			exact = old == t
		} else {
			exact = false
		}
		if hasExtra {
			// We have some variants.
			for i, s := range specialTags {
				if s == t {
					return ID(i + len(coreTags)), exact
				}
			}
			exact = false
		}
	}
	if x, ok := getCoreIndex(t); ok {
		return x, exact
	}
	exact = false
	if r != 0 && s == 0 {
		// Deal with cases where an extra script is inserted for the region.
		t, _ := t.Maximize()
		if x, ok := getCoreIndex(t); ok {
			return x, exact
		}
	}
	for t = t.Parent(); t != root; t = t.Parent() {
		// No variants specified: just compare core components.
		// The key has the form lllssrrr, where l, s, and r are nibbles for
		// respectively the langID, scriptID, and regionID.
		if x, ok := getCoreIndex(t); ok {
			return x, exact
		}
	}
	return 0, exact
}

var root = language.Tag{}
 07070100000F1D000081A4000000000000000000000001645E367C00001AC5000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/golang.org/x/text/internal/language/compact/parents.go // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.

package compact

// parents maps a compact index of a tag to the compact index of the parent of
// this tag.
var parents = []ID{ // 775 elements
	// Entry 0 - 3F
	0x0000, 0x0000, 0x0001, 0x0001, 0x0000, 0x0004, 0x0000, 0x0006,
	0x0000, 0x0008, 0x0000, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a,
	0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a,
	0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a,
	0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0000,
	0x0000, 0x0028, 0x0000, 0x002a, 0x0000, 0x002c, 0x0000, 0x0000,
	0x002f, 0x002e, 0x002e, 0x0000, 0x0033, 0x0000, 0x0035, 0x0000,
	0x0037, 0x0000, 0x0039, 0x0000, 0x003b, 0x0000, 0x0000, 0x003e,
	// Entry 40 - 7F
	0x0000, 0x0040, 0x0040, 0x0000, 0x0043, 0x0043, 0x0000, 0x0046,
	0x0000, 0x0048, 0x0000, 0x0000, 0x004b, 0x004a, 0x004a, 0x0000,
	0x004f, 0x004f, 0x004f, 0x004f, 0x0000, 0x0054, 0x0054, 0x0000,
	0x0057, 0x0000, 0x0059, 0x0000, 0x005b, 0x0000, 0x005d, 0x005d,
	0x0000, 0x0060, 0x0000, 0x0062, 0x0000, 0x0064, 0x0000, 0x0066,
	0x0066, 0x0000, 0x0069, 0x0000, 0x006b, 0x006b, 0x006b, 0x006b,
	0x006b, 0x006b, 0x006b, 0x0000, 0x0073, 0x0000, 0x0075, 0x0000,
	0x0077, 0x0000, 0x0000, 0x007a, 0x0000, 0x007c, 0x0000, 0x007e,
	// Entry 80 - BF
	0x0000, 0x0080, 0x0080, 0x0000, 0x0083, 0x0083, 0x0000, 0x0086,
	0x0087, 0x0087, 0x0087, 0x0086, 0x0088, 0x0087, 0x0087, 0x0087,
	0x0086, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0088,
	0x0087, 0x0087, 0x0087, 0x0087, 0x0088, 0x0087, 0x0088, 0x0087,
	0x0087, 0x0088, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087,
	0x0087, 0x0087, 0x0087, 0x0086, 0x0087, 0x0087, 0x0087, 0x0087,
	0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087,
	0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0086, 0x0087, 0x0086,
	// Entry C0 - FF
	0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087,
	0x0088, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087,
	0x0086, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0088, 0x0087,
	0x0087, 0x0088, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087,
	0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0086, 0x0086, 0x0087,
	0x0087, 0x0086, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0000,
	0x00ef, 0x0000, 0x00f1, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f2,
	0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f1, 0x00f2, 0x00f1, 0x00f1,
	// Entry 100 - 13F
	0x00f2, 0x00f2, 0x00f1, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f1,
	0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x0000, 0x010e,
	0x0000, 0x0110, 0x0000, 0x0112, 0x0000, 0x0114, 0x0114, 0x0000,
	0x0117, 0x0117, 0x0117, 0x0117, 0x0000, 0x011c, 0x0000, 0x011e,
	0x0000, 0x0120, 0x0120, 0x0000, 0x0123, 0x0123, 0x0123, 0x0123,
	0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123,
	0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123,
	0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123,
	// Entry 140 - 17F
	0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123,
	0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123,
	0x0123, 0x0123, 0x0000, 0x0152, 0x0000, 0x0154, 0x0000, 0x0156,
	0x0000, 0x0158, 0x0000, 0x015a, 0x0000, 0x015c, 0x015c, 0x015c,
	0x0000, 0x0160, 0x0000, 0x0000, 0x0163, 0x0000, 0x0165, 0x0000,
	0x0167, 0x0167, 0x0167, 0x0000, 0x016b, 0x0000, 0x016d, 0x0000,
	0x016f, 0x0000, 0x0171, 0x0171, 0x0000, 0x0174, 0x0000, 0x0176,
	0x0000, 0x0178, 0x0000, 0x017a, 0x0000, 0x017c, 0x0000, 0x017e,
	// Entry 180 - 1BF
	0x0000, 0x0000, 0x0000, 0x0182, 0x0000, 0x0184, 0x0184, 0x0184,
	0x0184, 0x0000, 0x0000, 0x0000, 0x018b, 0x0000, 0x0000, 0x018e,
	0x0000, 0x0000, 0x0191, 0x0000, 0x0000, 0x0000, 0x0195, 0x0000,
	0x0197, 0x0000, 0x0000, 0x019a, 0x0000, 0x0000, 0x019d, 0x0000,
	0x019f, 0x0000, 0x01a1, 0x0000, 0x01a3, 0x0000, 0x01a5, 0x0000,
	0x01a7, 0x0000, 0x01a9, 0x0000, 0x01ab, 0x0000, 0x01ad, 0x0000,
	0x01af, 0x0000, 0x01b1, 0x01b1, 0x0000, 0x01b4, 0x0000, 0x01b6,
	0x0000, 0x01b8, 0x0000, 0x01ba, 0x0000, 0x01bc, 0x0000, 0x0000,
	// Entry 1C0 - 1FF
	0x01bf, 0x0000, 0x01c1, 0x0000, 0x01c3, 0x0000, 0x01c5, 0x0000,
	0x01c7, 0x0000, 0x01c9, 0x0000, 0x01cb, 0x01cb, 0x01cb, 0x01cb,
	0x0000, 0x01d0, 0x0000, 0x01d2, 0x01d2, 0x0000, 0x01d5, 0x0000,
	0x01d7, 0x0000, 0x01d9, 0x0000, 0x01db, 0x0000, 0x01dd, 0x0000,
	0x01df, 0x01df, 0x0000, 0x01e2, 0x0000, 0x01e4, 0x0000, 0x01e6,
	0x0000, 0x01e8, 0x0000, 0x01ea, 0x0000, 0x01ec, 0x0000, 0x01ee,
	0x0000, 0x01f0, 0x0000, 0x0000, 0x01f3, 0x0000, 0x01f5, 0x01f5,
	0x01f5, 0x0000, 0x01f9, 0x0000, 0x01fb, 0x0000, 0x01fd, 0x0000,
	// Entry 200 - 23F
	0x01ff, 0x0000, 0x0000, 0x0202, 0x0000, 0x0204, 0x0204, 0x0000,
	0x0207, 0x0000, 0x0209, 0x0209, 0x0000, 0x020c, 0x020c, 0x0000,
	0x020f, 0x020f, 0x020f, 0x020f, 0x020f, 0x020f, 0x020f, 0x0000,
	0x0217, 0x0000, 0x0219, 0x0000, 0x021b, 0x0000, 0x0000, 0x0000,
	0x0000, 0x0000, 0x0221, 0x0000, 0x0000, 0x0224, 0x0000, 0x0226,
	0x0226, 0x0000, 0x0229, 0x0000, 0x022b, 0x022b, 0x0000, 0x0000,
	0x022f, 0x022e, 0x022e, 0x0000, 0x0000, 0x0234, 0x0000, 0x0236,
	0x0000, 0x0238, 0x0000, 0x0244, 0x023a, 0x0244, 0x0244, 0x0244,
	// Entry 240 - 27F
	0x0244, 0x0244, 0x0244, 0x0244, 0x023a, 0x0244, 0x0244, 0x0000,
	0x0247, 0x0247, 0x0247, 0x0000, 0x024b, 0x0000, 0x024d, 0x0000,
	0x024f, 0x024f, 0x0000, 0x0252, 0x0000, 0x0254, 0x0254, 0x0254,
	0x0254, 0x0254, 0x0254, 0x0000, 0x025b, 0x0000, 0x025d, 0x0000,
	0x025f, 0x0000, 0x0261, 0x0000, 0x0263, 0x0000, 0x0265, 0x0000,
	0x0000, 0x0268, 0x0268, 0x0268, 0x0000, 0x026c, 0x0000, 0x026e,
	0x0000, 0x0270, 0x0000, 0x0000, 0x0000, 0x0274, 0x0273, 0x0273,
	0x0000, 0x0278, 0x0000, 0x027a, 0x0000, 0x027c, 0x0000, 0x0000,
	// Entry 280 - 2BF
	0x0000, 0x0000, 0x0281, 0x0000, 0x0000, 0x0284, 0x0000, 0x0286,
	0x0286, 0x0286, 0x0286, 0x0000, 0x028b, 0x028b, 0x028b, 0x0000,
	0x028f, 0x028f, 0x028f, 0x028f, 0x028f, 0x0000, 0x0295, 0x0295,
	0x0295, 0x0295, 0x0000, 0x0000, 0x0000, 0x0000, 0x029d, 0x029d,
	0x029d, 0x0000, 0x02a1, 0x02a1, 0x02a1, 0x02a1, 0x0000, 0x0000,
	0x02a7, 0x02a7, 0x02a7, 0x02a7, 0x0000, 0x02ac, 0x0000, 0x02ae,
	0x02ae, 0x0000, 0x02b1, 0x0000, 0x02b3, 0x0000, 0x02b5, 0x02b5,
	0x0000, 0x0000, 0x02b9, 0x0000, 0x0000, 0x0000, 0x02bd, 0x0000,
	// Entry 2C0 - 2FF
	0x02bf, 0x02bf, 0x0000, 0x0000, 0x02c3, 0x0000, 0x02c5, 0x0000,
	0x02c7, 0x0000, 0x02c9, 0x0000, 0x02cb, 0x0000, 0x02cd, 0x02cd,
	0x0000, 0x0000, 0x02d1, 0x0000, 0x02d3, 0x02d0, 0x02d0, 0x0000,
	0x0000, 0x02d8, 0x02d7, 0x02d7, 0x0000, 0x0000, 0x02dd, 0x0000,
	0x02df, 0x0000, 0x02e1, 0x0000, 0x0000, 0x02e4, 0x0000, 0x02e6,
	0x0000, 0x0000, 0x02e9, 0x0000, 0x02eb, 0x0000, 0x02ed, 0x0000,
	0x02ef, 0x02ef, 0x0000, 0x0000, 0x02f3, 0x02f2, 0x02f2, 0x0000,
	0x02f7, 0x0000, 0x02f9, 0x02f9, 0x02f9, 0x02f9, 0x02f9, 0x0000,
	// Entry 300 - 33F
	0x02ff, 0x0300, 0x02ff, 0x0000, 0x0303, 0x0051, 0x00e6,
} // Size: 1574 bytes

// Total table size 1574 bytes (1KiB); checksum: 895AAF0B
   07070100000F1E000081A4000000000000000000000001645E367C00007D80000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/golang.org/x/text/internal/language/compact/tables.go  // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.

package compact

import "golang.org/x/text/internal/language"

// CLDRVersion is the CLDR version from which the tables in this package are derived.
const CLDRVersion = "32"

// NumCompactTags is the number of common tags. The maximum tag is
// NumCompactTags-1.
const NumCompactTags = 775
const (
	undIndex          ID = 0
	afIndex           ID = 1
	afNAIndex         ID = 2
	afZAIndex         ID = 3
	agqIndex          ID = 4
	agqCMIndex        ID = 5
	akIndex           ID = 6
	akGHIndex         ID = 7
	amIndex           ID = 8
	amETIndex         ID = 9
	arIndex           ID = 10
	ar001Index        ID = 11
	arAEIndex         ID = 12
	arBHIndex         ID = 13
	arDJIndex         ID = 14
	arDZIndex         ID = 15
	arEGIndex         ID = 16
	arEHIndex         ID = 17
	arERIndex         ID = 18
	arILIndex         ID = 19
	arIQIndex         ID = 20
	arJOIndex         ID = 21
	arKMIndex         ID = 22
	arKWIndex         ID = 23
	arLBIndex         ID = 24
	arLYIndex         ID = 25
	arMAIndex         ID = 26
	arMRIndex         ID = 27
	arOMIndex         ID = 28
	arPSIndex         ID = 29
	arQAIndex         ID = 30
	arSAIndex         ID = 31
	arSDIndex         ID = 32
	arSOIndex         ID = 33
	arSSIndex         ID = 34
	arSYIndex         ID = 35
	arTDIndex         ID = 36
	arTNIndex         ID = 37
	arYEIndex         ID = 38
	arsIndex          ID = 39
	asIndex           ID = 40
	asINIndex         ID = 41
	asaIndex          ID = 42
	asaTZIndex        ID = 43
	astIndex          ID = 44
	astESIndex        ID = 45
	azIndex           ID = 46
	azCyrlIndex       ID = 47
	azCyrlAZIndex     ID = 48
	azLatnIndex       ID = 49
	azLatnAZIndex     ID = 50
	basIndex          ID = 51
	basCMIndex        ID = 52
	beIndex           ID = 53
	beBYIndex         ID = 54
	bemIndex          ID = 55
	bemZMIndex        ID = 56
	bezIndex          ID = 57
	bezTZIndex        ID = 58
	bgIndex           ID = 59
	bgBGIndex         ID = 60
	bhIndex           ID = 61
	bmIndex           ID = 62
	bmMLIndex         ID = 63
	bnIndex           ID = 64
	bnBDIndex         ID = 65
	bnINIndex         ID = 66
	boIndex           ID = 67
	boCNIndex         ID = 68
	boINIndex         ID = 69
	brIndex           ID = 70
	brFRIndex         ID = 71
	brxIndex          ID = 72
	brxINIndex        ID = 73
	bsIndex           ID = 74
	bsCyrlIndex       ID = 75
	bsCyrlBAIndex     ID = 76
	bsLatnIndex       ID = 77
	bsLatnBAIndex     ID = 78
	caIndex           ID = 79
	caADIndex         ID = 80
	caESIndex         ID = 81
	caFRIndex         ID = 82
	caITIndex         ID = 83
	ccpIndex          ID = 84
	ccpBDIndex        ID = 85
	ccpINIndex        ID = 86
	ceIndex           ID = 87
	ceRUIndex         ID = 88
	cggIndex          ID = 89
	cggUGIndex        ID = 90
	chrIndex          ID = 91
	chrUSIndex        ID = 92
	ckbIndex          ID = 93
	ckbIQIndex        ID = 94
	ckbIRIndex        ID = 95
	csIndex           ID = 96
	csCZIndex         ID = 97
	cuIndex           ID = 98
	cuRUIndex         ID = 99
	cyIndex           ID = 100
	cyGBIndex         ID = 101
	daIndex           ID = 102
	daDKIndex         ID = 103
	daGLIndex         ID = 104
	davIndex          ID = 105
	davKEIndex        ID = 106
	deIndex           ID = 107
	deATIndex         ID = 108
	deBEIndex         ID = 109
	deCHIndex         ID = 110
	deDEIndex         ID = 111
	deITIndex         ID = 112
	deLIIndex         ID = 113
	deLUIndex         ID = 114
	djeIndex          ID = 115
	djeNEIndex        ID = 116
	dsbIndex          ID = 117
	dsbDEIndex        ID = 118
	duaIndex          ID = 119
	duaCMIndex        ID = 120
	dvIndex           ID = 121
	dyoIndex          ID = 122
	dyoSNIndex        ID = 123
	dzIndex           ID = 124
	dzBTIndex         ID = 125
	ebuIndex          ID = 126
	ebuKEIndex        ID = 127
	eeIndex           ID = 128
	eeGHIndex         ID = 129
	eeTGIndex         ID = 130
	elIndex           ID = 131
	elCYIndex         ID = 132
	elGRIndex         ID = 133
	enIndex           ID = 134
	en001Index        ID = 135
	en150Index        ID = 136
	enAGIndex         ID = 137
	enAIIndex         ID = 138
	enASIndex         ID = 139
	enATIndex         ID = 140
	enAUIndex         ID = 141
	enBBIndex         ID = 142
	enBEIndex         ID = 143
	enBIIndex         ID = 144
	enBMIndex         ID = 145
	enBSIndex         ID = 146
	enBWIndex         ID = 147
	enBZIndex         ID = 148
	enCAIndex         ID = 149
	enCCIndex         ID = 150
	enCHIndex         ID = 151
	enCKIndex         ID = 152
	enCMIndex         ID = 153
	enCXIndex         ID = 154
	enCYIndex         ID = 155
	enDEIndex         ID = 156
	enDGIndex         ID = 157
	enDKIndex         ID = 158
	enDMIndex         ID = 159
	enERIndex         ID = 160
	enFIIndex         ID = 161
	enFJIndex         ID = 162
	enFKIndex         ID = 163
	enFMIndex         ID = 164
	enGBIndex         ID = 165
	enGDIndex         ID = 166
	enGGIndex         ID = 167
	enGHIndex         ID = 168
	enGIIndex         ID = 169
	enGMIndex         ID = 170
	enGUIndex         ID = 171
	enGYIndex         ID = 172
	enHKIndex         ID = 173
	enIEIndex         ID = 174
	enILIndex         ID = 175
	enIMIndex         ID = 176
	enINIndex         ID = 177
	enIOIndex         ID = 178
	enJEIndex         ID = 179
	enJMIndex         ID = 180
	enKEIndex         ID = 181
	enKIIndex         ID = 182
	enKNIndex         ID = 183
	enKYIndex         ID = 184
	enLCIndex         ID = 185
	enLRIndex         ID = 186
	enLSIndex         ID = 187
	enMGIndex         ID = 188
	enMHIndex         ID = 189
	enMOIndex         ID = 190
	enMPIndex         ID = 191
	enMSIndex         ID = 192
	enMTIndex         ID = 193
	enMUIndex         ID = 194
	enMWIndex         ID = 195
	enMYIndex         ID = 196
	enNAIndex         ID = 197
	enNFIndex         ID = 198
	enNGIndex         ID = 199
	enNLIndex         ID = 200
	enNRIndex         ID = 201
	enNUIndex         ID = 202
	enNZIndex         ID = 203
	enPGIndex         ID = 204
	enPHIndex         ID = 205
	enPKIndex         ID = 206
	enPNIndex         ID = 207
	enPRIndex         ID = 208
	enPWIndex         ID = 209
	enRWIndex         ID = 210
	enSBIndex         ID = 211
	enSCIndex         ID = 212
	enSDIndex         ID = 213
	enSEIndex         ID = 214
	enSGIndex         ID = 215
	enSHIndex         ID = 216
	enSIIndex         ID = 217
	enSLIndex         ID = 218
	enSSIndex         ID = 219
	enSXIndex         ID = 220
	enSZIndex         ID = 221
	enTCIndex         ID = 222
	enTKIndex         ID = 223
	enTOIndex         ID = 224
	enTTIndex         ID = 225
	enTVIndex         ID = 226
	enTZIndex         ID = 227
	enUGIndex         ID = 228
	enUMIndex         ID = 229
	enUSIndex         ID = 230
	enVCIndex         ID = 231
	enVGIndex         ID = 232
	enVIIndex         ID = 233
	enVUIndex         ID = 234
	enWSIndex         ID = 235
	enZAIndex         ID = 236
	enZMIndex         ID = 237
	enZWIndex         ID = 238
	eoIndex           ID = 239
	eo001Index        ID = 240
	esIndex           ID = 241
	es419Index        ID = 242
	esARIndex         ID = 243
	esBOIndex         ID = 244
	esBRIndex         ID = 245
	esBZIndex         ID = 246
	esCLIndex         ID = 247
	esCOIndex         ID = 248
	esCRIndex         ID = 249
	esCUIndex         ID = 250
	esDOIndex         ID = 251
	esEAIndex         ID = 252
	esECIndex         ID = 253
	esESIndex         ID = 254
	esGQIndex         ID = 255
	esGTIndex         ID = 256
	esHNIndex         ID = 257
	esICIndex         ID = 258
	esMXIndex         ID = 259
	esNIIndex         ID = 260
	esPAIndex         ID = 261
	esPEIndex         ID = 262
	esPHIndex         ID = 263
	esPRIndex         ID = 264
	esPYIndex         ID = 265
	esSVIndex         ID = 266
	esUSIndex         ID = 267
	esUYIndex         ID = 268
	esVEIndex         ID = 269
	etIndex           ID = 270
	etEEIndex         ID = 271
	euIndex           ID = 272
	euESIndex         ID = 273
	ewoIndex          ID = 274
	ewoCMIndex        ID = 275
	faIndex           ID = 276
	faAFIndex         ID = 277
	faIRIndex         ID = 278
	ffIndex           ID = 279
	ffCMIndex         ID = 280
	ffGNIndex         ID = 281
	ffMRIndex         ID = 282
	ffSNIndex         ID = 283
	fiIndex           ID = 284
	fiFIIndex         ID = 285
	filIndex          ID = 286
	filPHIndex        ID = 287
	foIndex           ID = 288
	foDKIndex         ID = 289
	foFOIndex         ID = 290
	frIndex           ID = 291
	frBEIndex         ID = 292
	frBFIndex         ID = 293
	frBIIndex         ID = 294
	frBJIndex         ID = 295
	frBLIndex         ID = 296
	frCAIndex         ID = 297
	frCDIndex         ID = 298
	frCFIndex         ID = 299
	frCGIndex         ID = 300
	frCHIndex         ID = 301
	frCIIndex         ID = 302
	frCMIndex         ID = 303
	frDJIndex         ID = 304
	frDZIndex         ID = 305
	frFRIndex         ID = 306
	frGAIndex         ID = 307
	frGFIndex         ID = 308
	frGNIndex         ID = 309
	frGPIndex         ID = 310
	frGQIndex         ID = 311
	frHTIndex         ID = 312
	frKMIndex         ID = 313
	frLUIndex         ID = 314
	frMAIndex         ID = 315
	frMCIndex         ID = 316
	frMFIndex         ID = 317
	frMGIndex         ID = 318
	frMLIndex         ID = 319
	frMQIndex         ID = 320
	frMRIndex         ID = 321
	frMUIndex         ID = 322
	frNCIndex         ID = 323
	frNEIndex         ID = 324
	frPFIndex         ID = 325
	frPMIndex         ID = 326
	frREIndex         ID = 327
	frRWIndex         ID = 328
	frSCIndex         ID = 329
	frSNIndex         ID = 330
	frSYIndex         ID = 331
	frTDIndex         ID = 332
	frTGIndex         ID = 333
	frTNIndex         ID = 334
	frVUIndex         ID = 335
	frWFIndex         ID = 336
	frYTIndex         ID = 337
	furIndex          ID = 338
	furITIndex        ID = 339
	fyIndex           ID = 340
	fyNLIndex         ID = 341
	gaIndex           ID = 342
	gaIEIndex         ID = 343
	gdIndex           ID = 344
	gdGBIndex         ID = 345
	glIndex           ID = 346
	glESIndex         ID = 347
	gswIndex          ID = 348
	gswCHIndex        ID = 349
	gswFRIndex        ID = 350
	gswLIIndex        ID = 351
	guIndex           ID = 352
	guINIndex         ID = 353
	guwIndex          ID = 354
	guzIndex          ID = 355
	guzKEIndex        ID = 356
	gvIndex           ID = 357
	gvIMIndex         ID = 358
	haIndex           ID = 359
	haGHIndex         ID = 360
	haNEIndex         ID = 361
	haNGIndex         ID = 362
	hawIndex          ID = 363
	hawUSIndex        ID = 364
	heIndex           ID = 365
	heILIndex         ID = 366
	hiIndex           ID = 367
	hiINIndex         ID = 368
	hrIndex           ID = 369
	hrBAIndex         ID = 370
	hrHRIndex         ID = 371
	hsbIndex          ID = 372
	hsbDEIndex        ID = 373
	huIndex           ID = 374
	huHUIndex         ID = 375
	hyIndex           ID = 376
	hyAMIndex         ID = 377
	idIndex           ID = 378
	idIDIndex         ID = 379
	igIndex           ID = 380
	igNGIndex         ID = 381
	iiIndex           ID = 382
	iiCNIndex         ID = 383
	inIndex           ID = 384
	ioIndex           ID = 385
	isIndex           ID = 386
	isISIndex         ID = 387
	itIndex           ID = 388
	itCHIndex         ID = 389
	itITIndex         ID = 390
	itSMIndex         ID = 391
	itVAIndex         ID = 392
	iuIndex           ID = 393
	iwIndex           ID = 394
	jaIndex           ID = 395
	jaJPIndex         ID = 396
	jboIndex          ID = 397
	jgoIndex          ID = 398
	jgoCMIndex        ID = 399
	jiIndex           ID = 400
	jmcIndex          ID = 401
	jmcTZIndex        ID = 402
	jvIndex           ID = 403
	jwIndex           ID = 404
	kaIndex           ID = 405
	kaGEIndex         ID = 406
	kabIndex          ID = 407
	kabDZIndex        ID = 408
	kajIndex          ID = 409
	kamIndex          ID = 410
	kamKEIndex        ID = 411
	kcgIndex          ID = 412
	kdeIndex          ID = 413
	kdeTZIndex        ID = 414
	keaIndex          ID = 415
	keaCVIndex        ID = 416
	khqIndex          ID = 417
	khqMLIndex        ID = 418
	kiIndex           ID = 419
	kiKEIndex         ID = 420
	kkIndex           ID = 421
	kkKZIndex         ID = 422
	kkjIndex          ID = 423
	kkjCMIndex        ID = 424
	klIndex           ID = 425
	klGLIndex         ID = 426
	klnIndex          ID = 427
	klnKEIndex        ID = 428
	kmIndex           ID = 429
	kmKHIndex         ID = 430
	knIndex           ID = 431
	knINIndex         ID = 432
	koIndex           ID = 433
	koKPIndex         ID = 434
	koKRIndex         ID = 435
	kokIndex          ID = 436
	kokINIndex        ID = 437
	ksIndex           ID = 438
	ksINIndex         ID = 439
	ksbIndex          ID = 440
	ksbTZIndex        ID = 441
	ksfIndex          ID = 442
	ksfCMIndex        ID = 443
	kshIndex          ID = 444
	kshDEIndex        ID = 445
	kuIndex           ID = 446
	kwIndex           ID = 447
	kwGBIndex         ID = 448
	kyIndex           ID = 449
	kyKGIndex         ID = 450
	lagIndex          ID = 451
	lagTZIndex        ID = 452
	lbIndex           ID = 453
	lbLUIndex         ID = 454
	lgIndex           ID = 455
	lgUGIndex         ID = 456
	lktIndex          ID = 457
	lktUSIndex        ID = 458
	lnIndex           ID = 459
	lnAOIndex         ID = 460
	lnCDIndex         ID = 461
	lnCFIndex         ID = 462
	lnCGIndex         ID = 463
	loIndex           ID = 464
	loLAIndex         ID = 465
	lrcIndex          ID = 466
	lrcIQIndex        ID = 467
	lrcIRIndex        ID = 468
	ltIndex           ID = 469
	ltLTIndex         ID = 470
	luIndex           ID = 471
	luCDIndex         ID = 472
	luoIndex          ID = 473
	luoKEIndex        ID = 474
	luyIndex          ID = 475
	luyKEIndex        ID = 476
	lvIndex           ID = 477
	lvLVIndex         ID = 478
	masIndex          ID = 479
	masKEIndex        ID = 480
	masTZIndex        ID = 481
	merIndex          ID = 482
	merKEIndex        ID = 483
	mfeIndex          ID = 484
	mfeMUIndex        ID = 485
	mgIndex           ID = 486
	mgMGIndex         ID = 487
	mghIndex          ID = 488
	mghMZIndex        ID = 489
	mgoIndex          ID = 490
	mgoCMIndex        ID = 491
	mkIndex           ID = 492
	mkMKIndex         ID = 493
	mlIndex           ID = 494
	mlINIndex         ID = 495
	mnIndex           ID = 496
	mnMNIndex         ID = 497
	moIndex           ID = 498
	mrIndex           ID = 499
	mrINIndex         ID = 500
	msIndex           ID = 501
	msBNIndex         ID = 502
	msMYIndex         ID = 503
	msSGIndex         ID = 504
	mtIndex           ID = 505
	mtMTIndex         ID = 506
	muaIndex          ID = 507
	muaCMIndex        ID = 508
	myIndex           ID = 509
	myMMIndex         ID = 510
	mznIndex          ID = 511
	mznIRIndex        ID = 512
	nahIndex          ID = 513
	naqIndex          ID = 514
	naqNAIndex        ID = 515
	nbIndex           ID = 516
	nbNOIndex         ID = 517
	nbSJIndex         ID = 518
	ndIndex           ID = 519
	ndZWIndex         ID = 520
	ndsIndex          ID = 521
	ndsDEIndex        ID = 522
	ndsNLIndex        ID = 523
	neIndex           ID = 524
	neINIndex         ID = 525
	neNPIndex         ID = 526
	nlIndex           ID = 527
	nlAWIndex         ID = 528
	nlBEIndex         ID = 529
	nlBQIndex         ID = 530
	nlCWIndex         ID = 531
	nlNLIndex         ID = 532
	nlSRIndex         ID = 533
	nlSXIndex         ID = 534
	nmgIndex          ID = 535
	nmgCMIndex        ID = 536
	nnIndex           ID = 537
	nnNOIndex         ID = 538
	nnhIndex          ID = 539
	nnhCMIndex        ID = 540
	noIndex           ID = 541
	nqoIndex          ID = 542
	nrIndex           ID = 543
	nsoIndex          ID = 544
	nusIndex          ID = 545
	nusSSIndex        ID = 546
	nyIndex           ID = 547
	nynIndex          ID = 548
	nynUGIndex        ID = 549
	omIndex           ID = 550
	omETIndex         ID = 551
	omKEIndex         ID = 552
	orIndex           ID = 553
	orINIndex         ID = 554
	osIndex           ID = 555
	osGEIndex         ID = 556
	osRUIndex         ID = 557
	paIndex           ID = 558
	paArabIndex       ID = 559
	paArabPKIndex     ID = 560
	paGuruIndex       ID = 561
	paGuruINIndex     ID = 562
	papIndex          ID = 563
	plIndex           ID = 564
	plPLIndex         ID = 565
	prgIndex          ID = 566
	prg001Index       ID = 567
	psIndex           ID = 568
	psAFIndex         ID = 569
	ptIndex           ID = 570
	ptAOIndex         ID = 571
	ptBRIndex         ID = 572
	ptCHIndex         ID = 573
	ptCVIndex         ID = 574
	ptGQIndex         ID = 575
	ptGWIndex         ID = 576
	ptLUIndex         ID = 577
	ptMOIndex         ID = 578
	ptMZIndex         ID = 579
	ptPTIndex         ID = 580
	ptSTIndex         ID = 581
	ptTLIndex         ID = 582
	quIndex           ID = 583
	quBOIndex         ID = 584
	quECIndex         ID = 585
	quPEIndex         ID = 586
	rmIndex           ID = 587
	rmCHIndex         ID = 588
	rnIndex           ID = 589
	rnBIIndex         ID = 590
	roIndex           ID = 591
	roMDIndex         ID = 592
	roROIndex         ID = 593
	rofIndex          ID = 594
	rofTZIndex        ID = 595
	ruIndex           ID = 596
	ruBYIndex         ID = 597
	ruKGIndex         ID = 598
	ruKZIndex         ID = 599
	ruMDIndex         ID = 600
	ruRUIndex         ID = 601
	ruUAIndex         ID = 602
	rwIndex           ID = 603
	rwRWIndex         ID = 604
	rwkIndex          ID = 605
	rwkTZIndex        ID = 606
	sahIndex          ID = 607
	sahRUIndex        ID = 608
	saqIndex          ID = 609
	saqKEIndex        ID = 610
	sbpIndex          ID = 611
	sbpTZIndex        ID = 612
	sdIndex           ID = 613
	sdPKIndex         ID = 614
	sdhIndex          ID = 615
	seIndex           ID = 616
	seFIIndex         ID = 617
	seNOIndex         ID = 618
	seSEIndex         ID = 619
	sehIndex          ID = 620
	sehMZIndex        ID = 621
	sesIndex          ID = 622
	sesMLIndex        ID = 623
	sgIndex           ID = 624
	sgCFIndex         ID = 625
	shIndex           ID = 626
	shiIndex          ID = 627
	shiLatnIndex      ID = 628
	shiLatnMAIndex    ID = 629
	shiTfngIndex      ID = 630
	shiTfngMAIndex    ID = 631
	siIndex           ID = 632
	siLKIndex         ID = 633
	skIndex           ID = 634
	skSKIndex         ID = 635
	slIndex           ID = 636
	slSIIndex         ID = 637
	smaIndex          ID = 638
	smiIndex          ID = 639
	smjIndex          ID = 640
	smnIndex          ID = 641
	smnFIIndex        ID = 642
	smsIndex          ID = 643
	snIndex           ID = 644
	snZWIndex         ID = 645
	soIndex           ID = 646
	soDJIndex         ID = 647
	soETIndex         ID = 648
	soKEIndex         ID = 649
	soSOIndex         ID = 650
	sqIndex           ID = 651
	sqALIndex         ID = 652
	sqMKIndex         ID = 653
	sqXKIndex         ID = 654
	srIndex           ID = 655
	srCyrlIndex       ID = 656
	srCyrlBAIndex     ID = 657
	srCyrlMEIndex     ID = 658
	srCyrlRSIndex     ID = 659
	srCyrlXKIndex     ID = 660
	srLatnIndex       ID = 661
	srLatnBAIndex     ID = 662
	srLatnMEIndex     ID = 663
	srLatnRSIndex     ID = 664
	srLatnXKIndex     ID = 665
	ssIndex           ID = 666
	ssyIndex          ID = 667
	stIndex           ID = 668
	svIndex           ID = 669
	svAXIndex         ID = 670
	svFIIndex         ID = 671
	svSEIndex         ID = 672
	swIndex           ID = 673
	swCDIndex         ID = 674
	swKEIndex         ID = 675
	swTZIndex         ID = 676
	swUGIndex         ID = 677
	syrIndex          ID = 678
	taIndex           ID = 679
	taINIndex         ID = 680
	taLKIndex         ID = 681
	taMYIndex         ID = 682
	taSGIndex         ID = 683
	teIndex           ID = 684
	teINIndex         ID = 685
	teoIndex          ID = 686
	teoKEIndex        ID = 687
	teoUGIndex        ID = 688
	tgIndex           ID = 689
	tgTJIndex         ID = 690
	thIndex           ID = 691
	thTHIndex         ID = 692
	tiIndex           ID = 693
	tiERIndex         ID = 694
	tiETIndex         ID = 695
	tigIndex          ID = 696
	tkIndex           ID = 697
	tkTMIndex         ID = 698
	tlIndex           ID = 699
	tnIndex           ID = 700
	toIndex           ID = 701
	toTOIndex         ID = 702
	trIndex           ID = 703
	trCYIndex         ID = 704
	trTRIndex         ID = 705
	tsIndex           ID = 706
	ttIndex           ID = 707
	ttRUIndex         ID = 708
	twqIndex          ID = 709
	twqNEIndex        ID = 710
	tzmIndex          ID = 711
	tzmMAIndex        ID = 712
	ugIndex           ID = 713
	ugCNIndex         ID = 714
	ukIndex           ID = 715
	ukUAIndex         ID = 716
	urIndex           ID = 717
	urINIndex         ID = 718
	urPKIndex         ID = 719
	uzIndex           ID = 720
	uzArabIndex       ID = 721
	uzArabAFIndex     ID = 722
	uzCyrlIndex       ID = 723
	uzCyrlUZIndex     ID = 724
	uzLatnIndex       ID = 725
	uzLatnUZIndex     ID = 726
	vaiIndex          ID = 727
	vaiLatnIndex      ID = 728
	vaiLatnLRIndex    ID = 729
	vaiVaiiIndex      ID = 730
	vaiVaiiLRIndex    ID = 731
	veIndex           ID = 732
	viIndex           ID = 733
	viVNIndex         ID = 734
	voIndex           ID = 735
	vo001Index        ID = 736
	vunIndex          ID = 737
	vunTZIndex        ID = 738
	waIndex           ID = 739
	waeIndex          ID = 740
	waeCHIndex        ID = 741
	woIndex           ID = 742
	woSNIndex         ID = 743
	xhIndex           ID = 744
	xogIndex          ID = 745
	xogUGIndex        ID = 746
	yavIndex          ID = 747
	yavCMIndex        ID = 748
	yiIndex           ID = 749
	yi001Index        ID = 750
	yoIndex           ID = 751
	yoBJIndex         ID = 752
	yoNGIndex         ID = 753
	yueIndex          ID = 754
	yueHansIndex      ID = 755
	yueHansCNIndex    ID = 756
	yueHantIndex      ID = 757
	yueHantHKIndex    ID = 758
	zghIndex          ID = 759
	zghMAIndex        ID = 760
	zhIndex           ID = 761
	zhHansIndex       ID = 762
	zhHansCNIndex     ID = 763
	zhHansHKIndex     ID = 764
	zhHansMOIndex     ID = 765
	zhHansSGIndex     ID = 766
	zhHantIndex       ID = 767
	zhHantHKIndex     ID = 768
	zhHantMOIndex     ID = 769
	zhHantTWIndex     ID = 770
	zuIndex           ID = 771
	zuZAIndex         ID = 772
	caESvalenciaIndex ID = 773
	enUSuvaposixIndex ID = 774
)

var coreTags = []language.CompactCoreInfo{ // 773 elements
	// Entry 0 - 1F
	0x00000000, 0x01600000, 0x016000d2, 0x01600161,
	0x01c00000, 0x01c00052, 0x02100000, 0x02100080,
	0x02700000, 0x0270006f, 0x03a00000, 0x03a00001,
	0x03a00023, 0x03a00039, 0x03a00062, 0x03a00067,
	0x03a0006b, 0x03a0006c, 0x03a0006d, 0x03a00097,
	0x03a0009b, 0x03a000a1, 0x03a000a8, 0x03a000ac,
	0x03a000b0, 0x03a000b9, 0x03a000ba, 0x03a000c9,
	0x03a000e1, 0x03a000ed, 0x03a000f3, 0x03a00108,
	// Entry 20 - 3F
	0x03a0010b, 0x03a00115, 0x03a00117, 0x03a0011c,
	0x03a00120, 0x03a00128, 0x03a0015e, 0x04000000,
	0x04300000, 0x04300099, 0x04400000, 0x0440012f,
	0x04800000, 0x0480006e, 0x05800000, 0x05820000,
	0x05820032, 0x0585a000, 0x0585a032, 0x05e00000,
	0x05e00052, 0x07100000, 0x07100047, 0x07500000,
	0x07500162, 0x07900000, 0x0790012f, 0x07e00000,
	0x07e00038, 0x08200000, 0x0a000000, 0x0a0000c3,
	// Entry 40 - 5F
	0x0a500000, 0x0a500035, 0x0a500099, 0x0a900000,
	0x0a900053, 0x0a900099, 0x0b200000, 0x0b200078,
	0x0b500000, 0x0b500099, 0x0b700000, 0x0b720000,
	0x0b720033, 0x0b75a000, 0x0b75a033, 0x0d700000,
	0x0d700022, 0x0d70006e, 0x0d700078, 0x0d70009e,
	0x0db00000, 0x0db00035, 0x0db00099, 0x0dc00000,
	0x0dc00106, 0x0df00000, 0x0df00131, 0x0e500000,
	0x0e500135, 0x0e900000, 0x0e90009b, 0x0e90009c,
	// Entry 60 - 7F
	0x0fa00000, 0x0fa0005e, 0x0fe00000, 0x0fe00106,
	0x10000000, 0x1000007b, 0x10100000, 0x10100063,
	0x10100082, 0x10800000, 0x108000a4, 0x10d00000,
	0x10d0002e, 0x10d00036, 0x10d0004e, 0x10d00060,
	0x10d0009e, 0x10d000b2, 0x10d000b7, 0x11700000,
	0x117000d4, 0x11f00000, 0x11f00060, 0x12400000,
	0x12400052, 0x12800000, 0x12b00000, 0x12b00114,
	0x12d00000, 0x12d00043, 0x12f00000, 0x12f000a4,
	// Entry 80 - 9F
	0x13000000, 0x13000080, 0x13000122, 0x13600000,
	0x1360005d, 0x13600087, 0x13900000, 0x13900001,
	0x1390001a, 0x13900025, 0x13900026, 0x1390002d,
	0x1390002e, 0x1390002f, 0x13900034, 0x13900036,
	0x1390003a, 0x1390003d, 0x13900042, 0x13900046,
	0x13900048, 0x13900049, 0x1390004a, 0x1390004e,
	0x13900050, 0x13900052, 0x1390005c, 0x1390005d,
	0x13900060, 0x13900061, 0x13900063, 0x13900064,
	// Entry A0 - BF
	0x1390006d, 0x13900072, 0x13900073, 0x13900074,
	0x13900075, 0x1390007b, 0x1390007c, 0x1390007f,
	0x13900080, 0x13900081, 0x13900083, 0x1390008a,
	0x1390008c, 0x1390008d, 0x13900096, 0x13900097,
	0x13900098, 0x13900099, 0x1390009a, 0x1390009f,
	0x139000a0, 0x139000a4, 0x139000a7, 0x139000a9,
	0x139000ad, 0x139000b1, 0x139000b4, 0x139000b5,
	0x139000bf, 0x139000c0, 0x139000c6, 0x139000c7,
	// Entry C0 - DF
	0x139000ca, 0x139000cb, 0x139000cc, 0x139000ce,
	0x139000d0, 0x139000d2, 0x139000d5, 0x139000d6,
	0x139000d9, 0x139000dd, 0x139000df, 0x139000e0,
	0x139000e6, 0x139000e7, 0x139000e8, 0x139000eb,
	0x139000ec, 0x139000f0, 0x13900107, 0x13900109,
	0x1390010a, 0x1390010b, 0x1390010c, 0x1390010d,
	0x1390010e, 0x1390010f, 0x13900112, 0x13900117,
	0x1390011b, 0x1390011d, 0x1390011f, 0x13900125,
	// Entry E0 - FF
	0x13900129, 0x1390012c, 0x1390012d, 0x1390012f,
	0x13900131, 0x13900133, 0x13900135, 0x13900139,
	0x1390013c, 0x1390013d, 0x1390013f, 0x13900142,
	0x13900161, 0x13900162, 0x13900164, 0x13c00000,
	0x13c00001, 0x13e00000, 0x13e0001f, 0x13e0002c,
	0x13e0003f, 0x13e00041, 0x13e00048, 0x13e00051,
	0x13e00054, 0x13e00056, 0x13e00059, 0x13e00065,
	0x13e00068, 0x13e00069, 0x13e0006e, 0x13e00086,
	// Entry 100 - 11F
	0x13e00089, 0x13e0008f, 0x13e00094, 0x13e000cf,
	0x13e000d8, 0x13e000e2, 0x13e000e4, 0x13e000e7,
	0x13e000ec, 0x13e000f1, 0x13e0011a, 0x13e00135,
	0x13e00136, 0x13e0013b, 0x14000000, 0x1400006a,
	0x14500000, 0x1450006e, 0x14600000, 0x14600052,
	0x14800000, 0x14800024, 0x1480009c, 0x14e00000,
	0x14e00052, 0x14e00084, 0x14e000c9, 0x14e00114,
	0x15100000, 0x15100072, 0x15300000, 0x153000e7,
	// Entry 120 - 13F
	0x15800000, 0x15800063, 0x15800076, 0x15e00000,
	0x15e00036, 0x15e00037, 0x15e0003a, 0x15e0003b,
	0x15e0003c, 0x15e00049, 0x15e0004b, 0x15e0004c,
	0x15e0004d, 0x15e0004e, 0x15e0004f, 0x15e00052,
	0x15e00062, 0x15e00067, 0x15e00078, 0x15e0007a,
	0x15e0007e, 0x15e00084, 0x15e00085, 0x15e00086,
	0x15e00091, 0x15e000a8, 0x15e000b7, 0x15e000ba,
	0x15e000bb, 0x15e000be, 0x15e000bf, 0x15e000c3,
	// Entry 140 - 15F
	0x15e000c8, 0x15e000c9, 0x15e000cc, 0x15e000d3,
	0x15e000d4, 0x15e000e5, 0x15e000ea, 0x15e00102,
	0x15e00107, 0x15e0010a, 0x15e00114, 0x15e0011c,
	0x15e00120, 0x15e00122, 0x15e00128, 0x15e0013f,
	0x15e00140, 0x15e0015f, 0x16900000, 0x1690009e,
	0x16d00000, 0x16d000d9, 0x16e00000, 0x16e00096,
	0x17e00000, 0x17e0007b, 0x19000000, 0x1900006e,
	0x1a300000, 0x1a30004e, 0x1a300078, 0x1a3000b2,
	// Entry 160 - 17F
	0x1a400000, 0x1a400099, 0x1a900000, 0x1ab00000,
	0x1ab000a4, 0x1ac00000, 0x1ac00098, 0x1b400000,
	0x1b400080, 0x1b4000d4, 0x1b4000d6, 0x1b800000,
	0x1b800135, 0x1bc00000, 0x1bc00097, 0x1be00000,
	0x1be00099, 0x1d100000, 0x1d100033, 0x1d100090,
	0x1d200000, 0x1d200060, 0x1d500000, 0x1d500092,
	0x1d700000, 0x1d700028, 0x1e100000, 0x1e100095,
	0x1e700000, 0x1e7000d6, 0x1ea00000, 0x1ea00053,
	// Entry 180 - 19F
	0x1f300000, 0x1f500000, 0x1f800000, 0x1f80009d,
	0x1f900000, 0x1f90004e, 0x1f90009e, 0x1f900113,
	0x1f900138, 0x1fa00000, 0x1fb00000, 0x20000000,
	0x200000a2, 0x20300000, 0x20700000, 0x20700052,
	0x20800000, 0x20a00000, 0x20a0012f, 0x20e00000,
	0x20f00000, 0x21000000, 0x2100007d, 0x21200000,
	0x21200067, 0x21600000, 0x21700000, 0x217000a4,
	0x21f00000, 0x22300000, 0x2230012f, 0x22700000,
	// Entry 1A0 - 1BF
	0x2270005a, 0x23400000, 0x234000c3, 0x23900000,
	0x239000a4, 0x24200000, 0x242000ae, 0x24400000,
	0x24400052, 0x24500000, 0x24500082, 0x24600000,
	0x246000a4, 0x24a00000, 0x24a000a6, 0x25100000,
	0x25100099, 0x25400000, 0x254000aa, 0x254000ab,
	0x25600000, 0x25600099, 0x26a00000, 0x26a00099,
	0x26b00000, 0x26b0012f, 0x26d00000, 0x26d00052,
	0x26e00000, 0x26e00060, 0x27400000, 0x28100000,
	// Entry 1C0 - 1DF
	0x2810007b, 0x28a00000, 0x28a000a5, 0x29100000,
	0x2910012f, 0x29500000, 0x295000b7, 0x2a300000,
	0x2a300131, 0x2af00000, 0x2af00135, 0x2b500000,
	0x2b50002a, 0x2b50004b, 0x2b50004c, 0x2b50004d,
	0x2b800000, 0x2b8000af, 0x2bf00000, 0x2bf0009b,
	0x2bf0009c, 0x2c000000, 0x2c0000b6, 0x2c200000,
	0x2c20004b, 0x2c400000, 0x2c4000a4, 0x2c500000,
	0x2c5000a4, 0x2c700000, 0x2c7000b8, 0x2d100000,
	// Entry 1E0 - 1FF
	0x2d1000a4, 0x2d10012f, 0x2e900000, 0x2e9000a4,
	0x2ed00000, 0x2ed000cc, 0x2f100000, 0x2f1000bf,
	0x2f200000, 0x2f2000d1, 0x2f400000, 0x2f400052,
	0x2ff00000, 0x2ff000c2, 0x30400000, 0x30400099,
	0x30b00000, 0x30b000c5, 0x31000000, 0x31b00000,
	0x31b00099, 0x31f00000, 0x31f0003e, 0x31f000d0,
	0x31f0010d, 0x32000000, 0x320000cb, 0x32500000,
	0x32500052, 0x33100000, 0x331000c4, 0x33a00000,
	// Entry 200 - 21F
	0x33a0009c, 0x34100000, 0x34500000, 0x345000d2,
	0x34700000, 0x347000da, 0x34700110, 0x34e00000,
	0x34e00164, 0x35000000, 0x35000060, 0x350000d9,
	0x35100000, 0x35100099, 0x351000db, 0x36700000,
	0x36700030, 0x36700036, 0x36700040, 0x3670005b,
	0x367000d9, 0x36700116, 0x3670011b, 0x36800000,
	0x36800052, 0x36a00000, 0x36a000da, 0x36c00000,
	0x36c00052, 0x36f00000, 0x37500000, 0x37600000,
	// Entry 220 - 23F
	0x37a00000, 0x38000000, 0x38000117, 0x38700000,
	0x38900000, 0x38900131, 0x39000000, 0x3900006f,
	0x390000a4, 0x39500000, 0x39500099, 0x39800000,
	0x3980007d, 0x39800106, 0x39d00000, 0x39d05000,
	0x39d050e8, 0x39d36000, 0x39d36099, 0x3a100000,
	0x3b300000, 0x3b3000e9, 0x3bd00000, 0x3bd00001,
	0x3be00000, 0x3be00024, 0x3c000000, 0x3c00002a,
	0x3c000041, 0x3c00004e, 0x3c00005a, 0x3c000086,
	// Entry 240 - 25F
	0x3c00008b, 0x3c0000b7, 0x3c0000c6, 0x3c0000d1,
	0x3c0000ee, 0x3c000118, 0x3c000126, 0x3c400000,
	0x3c40003f, 0x3c400069, 0x3c4000e4, 0x3d400000,
	0x3d40004e, 0x3d900000, 0x3d90003a, 0x3dc00000,
	0x3dc000bc, 0x3dc00104, 0x3de00000, 0x3de0012f,
	0x3e200000, 0x3e200047, 0x3e2000a5, 0x3e2000ae,
	0x3e2000bc, 0x3e200106, 0x3e200130, 0x3e500000,
	0x3e500107, 0x3e600000, 0x3e60012f, 0x3eb00000,
	// Entry 260 - 27F
	0x3eb00106, 0x3ec00000, 0x3ec000a4, 0x3f300000,
	0x3f30012f, 0x3fa00000, 0x3fa000e8, 0x3fc00000,
	0x3fd00000, 0x3fd00072, 0x3fd000da, 0x3fd0010c,
	0x3ff00000, 0x3ff000d1, 0x40100000, 0x401000c3,
	0x40200000, 0x4020004c, 0x40700000, 0x40800000,
	0x4085a000, 0x4085a0ba, 0x408e8000, 0x408e80ba,
	0x40c00000, 0x40c000b3, 0x41200000, 0x41200111,
	0x41600000, 0x4160010f, 0x41c00000, 0x41d00000,
	// Entry 280 - 29F
	0x41e00000, 0x41f00000, 0x41f00072, 0x42200000,
	0x42300000, 0x42300164, 0x42900000, 0x42900062,
	0x4290006f, 0x429000a4, 0x42900115, 0x43100000,
	0x43100027, 0x431000c2, 0x4310014d, 0x43200000,
	0x43220000, 0x43220033, 0x432200bd, 0x43220105,
	0x4322014d, 0x4325a000, 0x4325a033, 0x4325a0bd,
	0x4325a105, 0x4325a14d, 0x43700000, 0x43a00000,
	0x43b00000, 0x44400000, 0x44400031, 0x44400072,
	// Entry 2A0 - 2BF
	0x4440010c, 0x44500000, 0x4450004b, 0x445000a4,
	0x4450012f, 0x44500131, 0x44e00000, 0x45000000,
	0x45000099, 0x450000b3, 0x450000d0, 0x4500010d,
	0x46100000, 0x46100099, 0x46400000, 0x464000a4,
	0x46400131, 0x46700000, 0x46700124, 0x46b00000,
	0x46b00123, 0x46f00000, 0x46f0006d, 0x46f0006f,
	0x47100000, 0x47600000, 0x47600127, 0x47a00000,
	0x48000000, 0x48200000, 0x48200129, 0x48a00000,
	// Entry 2C0 - 2DF
	0x48a0005d, 0x48a0012b, 0x48e00000, 0x49400000,
	0x49400106, 0x4a400000, 0x4a4000d4, 0x4a900000,
	0x4a9000ba, 0x4ac00000, 0x4ac00053, 0x4ae00000,
	0x4ae00130, 0x4b400000, 0x4b400099, 0x4b4000e8,
	0x4bc00000, 0x4bc05000, 0x4bc05024, 0x4bc20000,
	0x4bc20137, 0x4bc5a000, 0x4bc5a137, 0x4be00000,
	0x4be5a000, 0x4be5a0b4, 0x4bef1000, 0x4bef10b4,
	0x4c000000, 0x4c300000, 0x4c30013e, 0x4c900000,
	// Entry 2E0 - 2FF
	0x4c900001, 0x4cc00000, 0x4cc0012f, 0x4ce00000,
	0x4cf00000, 0x4cf0004e, 0x4e500000, 0x4e500114,
	0x4f200000, 0x4fb00000, 0x4fb00131, 0x50900000,
	0x50900052, 0x51200000, 0x51200001, 0x51800000,
	0x5180003b, 0x518000d6, 0x51f00000, 0x51f3b000,
	0x51f3b053, 0x51f3c000, 0x51f3c08d, 0x52800000,
	0x528000ba, 0x52900000, 0x5293b000, 0x5293b053,
	0x5293b08d, 0x5293b0c6, 0x5293b10d, 0x5293c000,
	// Entry 300 - 31F
	0x5293c08d, 0x5293c0c6, 0x5293c12e, 0x52f00000,
	0x52f00161,
} // Size: 3116 bytes

const specialTagsStr string = "ca-ES-valencia en-US-u-va-posix"

// Total table size 3147 bytes (3KiB); checksum: 6772C83C
07070100000F1F000081A4000000000000000000000001645E367C00001613000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/golang.org/x/text/internal/language/compact/tags.go    // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package compact

var (
	und = Tag{}

	Und Tag = Tag{}

	Afrikaans            Tag = Tag{language: afIndex, locale: afIndex}
	Amharic              Tag = Tag{language: amIndex, locale: amIndex}
	Arabic               Tag = Tag{language: arIndex, locale: arIndex}
	ModernStandardArabic Tag = Tag{language: ar001Index, locale: ar001Index}
	Azerbaijani          Tag = Tag{language: azIndex, locale: azIndex}
	Bulgarian            Tag = Tag{language: bgIndex, locale: bgIndex}
	Bengali              Tag = Tag{language: bnIndex, locale: bnIndex}
	Catalan              Tag = Tag{language: caIndex, locale: caIndex}
	Czech                Tag = Tag{language: csIndex, locale: csIndex}
	Danish               Tag = Tag{language: daIndex, locale: daIndex}
	German               Tag = Tag{language: deIndex, locale: deIndex}
	Greek                Tag = Tag{language: elIndex, locale: elIndex}
	English              Tag = Tag{language: enIndex, locale: enIndex}
	AmericanEnglish      Tag = Tag{language: enUSIndex, locale: enUSIndex}
	BritishEnglish       Tag = Tag{language: enGBIndex, locale: enGBIndex}
	Spanish              Tag = Tag{language: esIndex, locale: esIndex}
	EuropeanSpanish      Tag = Tag{language: esESIndex, locale: esESIndex}
	LatinAmericanSpanish Tag = Tag{language: es419Index, locale: es419Index}
	Estonian             Tag = Tag{language: etIndex, locale: etIndex}
	Persian              Tag = Tag{language: faIndex, locale: faIndex}
	Finnish              Tag = Tag{language: fiIndex, locale: fiIndex}
	Filipino             Tag = Tag{language: filIndex, locale: filIndex}
	French               Tag = Tag{language: frIndex, locale: frIndex}
	CanadianFrench       Tag = Tag{language: frCAIndex, locale: frCAIndex}
	Gujarati             Tag = Tag{language: guIndex, locale: guIndex}
	Hebrew               Tag = Tag{language: heIndex, locale: heIndex}
	Hindi                Tag = Tag{language: hiIndex, locale: hiIndex}
	Croatian             Tag = Tag{language: hrIndex, locale: hrIndex}
	Hungarian            Tag = Tag{language: huIndex, locale: huIndex}
	Armenian             Tag = Tag{language: hyIndex, locale: hyIndex}
	Indonesian           Tag = Tag{language: idIndex, locale: idIndex}
	Icelandic            Tag = Tag{language: isIndex, locale: isIndex}
	Italian              Tag = Tag{language: itIndex, locale: itIndex}
	Japanese             Tag = Tag{language: jaIndex, locale: jaIndex}
	Georgian             Tag = Tag{language: kaIndex, locale: kaIndex}
	Kazakh               Tag = Tag{language: kkIndex, locale: kkIndex}
	Khmer                Tag = Tag{language: kmIndex, locale: kmIndex}
	Kannada              Tag = Tag{language: knIndex, locale: knIndex}
	Korean               Tag = Tag{language: koIndex, locale: koIndex}
	Kirghiz              Tag = Tag{language: kyIndex, locale: kyIndex}
	Lao                  Tag = Tag{language: loIndex, locale: loIndex}
	Lithuanian           Tag = Tag{language: ltIndex, locale: ltIndex}
	Latvian              Tag = Tag{language: lvIndex, locale: lvIndex}
	Macedonian           Tag = Tag{language: mkIndex, locale: mkIndex}
	Malayalam            Tag = Tag{language: mlIndex, locale: mlIndex}
	Mongolian            Tag = Tag{language: mnIndex, locale: mnIndex}
	Marathi              Tag = Tag{language: mrIndex, locale: mrIndex}
	Malay                Tag = Tag{language: msIndex, locale: msIndex}
	Burmese              Tag = Tag{language: myIndex, locale: myIndex}
	Nepali               Tag = Tag{language: neIndex, locale: neIndex}
	Dutch                Tag = Tag{language: nlIndex, locale: nlIndex}
	Norwegian            Tag = Tag{language: noIndex, locale: noIndex}
	Punjabi              Tag = Tag{language: paIndex, locale: paIndex}
	Polish               Tag = Tag{language: plIndex, locale: plIndex}
	Portuguese           Tag = Tag{language: ptIndex, locale: ptIndex}
	BrazilianPortuguese  Tag = Tag{language: ptBRIndex, locale: ptBRIndex}
	EuropeanPortuguese   Tag = Tag{language: ptPTIndex, locale: ptPTIndex}
	Romanian             Tag = Tag{language: roIndex, locale: roIndex}
	Russian              Tag = Tag{language: ruIndex, locale: ruIndex}
	Sinhala              Tag = Tag{language: siIndex, locale: siIndex}
	Slovak               Tag = Tag{language: skIndex, locale: skIndex}
	Slovenian            Tag = Tag{language: slIndex, locale: slIndex}
	Albanian             Tag = Tag{language: sqIndex, locale: sqIndex}
	Serbian              Tag = Tag{language: srIndex, locale: srIndex}
	SerbianLatin         Tag = Tag{language: srLatnIndex, locale: srLatnIndex}
	Swedish              Tag = Tag{language: svIndex, locale: svIndex}
	Swahili              Tag = Tag{language: swIndex, locale: swIndex}
	Tamil                Tag = Tag{language: taIndex, locale: taIndex}
	Telugu               Tag = Tag{language: teIndex, locale: teIndex}
	Thai                 Tag = Tag{language: thIndex, locale: thIndex}
	Turkish              Tag = Tag{language: trIndex, locale: trIndex}
	Ukrainian            Tag = Tag{language: ukIndex, locale: ukIndex}
	Urdu                 Tag = Tag{language: urIndex, locale: urIndex}
	Uzbek                Tag = Tag{language: uzIndex, locale: uzIndex}
	Vietnamese           Tag = Tag{language: viIndex, locale: viIndex}
	Chinese              Tag = Tag{language: zhIndex, locale: zhIndex}
	SimplifiedChinese    Tag = Tag{language: zhHansIndex, locale: zhHansIndex}
	TraditionalChinese   Tag = Tag{language: zhHantIndex, locale: zhHantIndex}
	Zulu                 Tag = Tag{language: zuIndex, locale: zuIndex}
)
 07070100000F20000081A4000000000000000000000001645E367C00000F29000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/text/internal/language/compose.go // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package language

import (
	"sort"
	"strings"
)

// A Builder allows constructing a Tag from individual components.
// Its main user is Compose in the top-level language package.
type Builder struct {
	Tag Tag

	private    string // the x extension
	variants   []string
	extensions []string
}

// Make returns a new Tag from the current settings.
func (b *Builder) Make() Tag {
	t := b.Tag

	if len(b.extensions) > 0 || len(b.variants) > 0 {
		sort.Sort(sortVariants(b.variants))
		sort.Strings(b.extensions)

		if b.private != "" {
			b.extensions = append(b.extensions, b.private)
		}
		n := maxCoreSize + tokenLen(b.variants...) + tokenLen(b.extensions...)
		buf := make([]byte, n)
		p := t.genCoreBytes(buf)
		t.pVariant = byte(p)
		p += appendTokens(buf[p:], b.variants...)
		t.pExt = uint16(p)
		p += appendTokens(buf[p:], b.extensions...)
		t.str = string(buf[:p])
		// We may not always need to remake the string, but when or when not
		// to do so is rather tricky.
		scan := makeScanner(buf[:p])
		t, _ = parse(&scan, "")
		return t

	} else if b.private != "" {
		t.str = b.private
		t.RemakeString()
	}
	return t
}

// SetTag copies all the settings from a given Tag. Any previously set values
// are discarded.
func (b *Builder) SetTag(t Tag) {
	b.Tag.LangID = t.LangID
	b.Tag.RegionID = t.RegionID
	b.Tag.ScriptID = t.ScriptID
	// TODO: optimize
	b.variants = b.variants[:0]
	if variants := t.Variants(); variants != "" {
		for _, vr := range strings.Split(variants[1:], "-") {
			b.variants = append(b.variants, vr)
		}
	}
	b.extensions, b.private = b.extensions[:0], ""
	for _, e := range t.Extensions() {
		b.AddExt(e)
	}
}

// AddExt adds extension e to the tag. e must be a valid extension as returned
// by Tag.Extension. If the extension already exists, it will be discarded,
// except for a -u extension, where non-existing key-type pairs will added.
func (b *Builder) AddExt(e string) {
	if e[0] == 'x' {
		if b.private == "" {
			b.private = e
		}
		return
	}
	for i, s := range b.extensions {
		if s[0] == e[0] {
			if e[0] == 'u' {
				b.extensions[i] += e[1:]
			}
			return
		}
	}
	b.extensions = append(b.extensions, e)
}

// SetExt sets the extension e to the tag. e must be a valid extension as
// returned by Tag.Extension. If the extension already exists, it will be
// overwritten, except for a -u extension, where the individual key-type pairs
// will be set.
func (b *Builder) SetExt(e string) {
	if e[0] == 'x' {
		b.private = e
		return
	}
	for i, s := range b.extensions {
		if s[0] == e[0] {
			if e[0] == 'u' {
				b.extensions[i] = e + s[1:]
			} else {
				b.extensions[i] = e
			}
			return
		}
	}
	b.extensions = append(b.extensions, e)
}

// AddVariant adds any number of variants.
func (b *Builder) AddVariant(v ...string) {
	for _, v := range v {
		if v != "" {
			b.variants = append(b.variants, v)
		}
	}
}

// ClearVariants removes any variants previously added, including those
// copied from a Tag in SetTag.
func (b *Builder) ClearVariants() {
	b.variants = b.variants[:0]
}

// ClearExtensions removes any extensions previously added, including those
// copied from a Tag in SetTag.
func (b *Builder) ClearExtensions() {
	b.private = ""
	b.extensions = b.extensions[:0]
}

func tokenLen(token ...string) (n int) {
	for _, t := range token {
		n += len(t) + 1
	}
	return
}

func appendTokens(b []byte, token ...string) int {
	p := 0
	for _, t := range token {
		b[p] = '-'
		copy(b[p+1:], t)
		p += 1 + len(t)
	}
	return p
}

type sortVariants []string

func (s sortVariants) Len() int {
	return len(s)
}

func (s sortVariants) Swap(i, j int) {
	s[j], s[i] = s[i], s[j]
}

func (s sortVariants) Less(i, j int) bool {
	return variantIndex[s[i]] < variantIndex[s[j]]
}
   07070100000F21000081A4000000000000000000000001645E367C000002DA000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/text/internal/language/coverage.go    // Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package language

// BaseLanguages returns the list of all supported base languages. It generates
// the list by traversing the internal structures.
func BaseLanguages() []Language {
	base := make([]Language, 0, NumLanguages)
	for i := 0; i < langNoIndexOffset; i++ {
		// We included "und" already for the value 0.
		if i != nonCanonicalUnd {
			base = append(base, Language(i))
		}
	}
	i := langNoIndexOffset
	for _, v := range langNoIndex {
		for k := 0; k < 8; k++ {
			if v&1 == 1 {
				base = append(base, Language(i))
			}
			v >>= 1
			i++
		}
	}
	return base
}
  07070100000F22000081A4000000000000000000000001645E367C00004316000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/text/internal/language/language.go    // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:generate go run gen.go gen_common.go -output tables.go

package language // import "golang.org/x/text/internal/language"

// TODO: Remove above NOTE after:
// - verifying that tables are dropped correctly (most notably matcher tables).

import (
	"errors"
	"fmt"
	"strings"
)

const (
	// maxCoreSize is the maximum size of a BCP 47 tag without variants and
	// extensions. Equals max lang (3) + script (4) + max reg (3) + 2 dashes.
	maxCoreSize = 12

	// max99thPercentileSize is a somewhat arbitrary buffer size that presumably
	// is large enough to hold at least 99% of the BCP 47 tags.
	max99thPercentileSize = 32

	// maxSimpleUExtensionSize is the maximum size of a -u extension with one
	// key-type pair. Equals len("-u-") + key (2) + dash + max value (8).
	maxSimpleUExtensionSize = 14
)

// Tag represents a BCP 47 language tag. It is used to specify an instance of a
// specific language or locale. All language tag values are guaranteed to be
// well-formed. The zero value of Tag is Und.
type Tag struct {
	// TODO: the following fields have the form TagTypeID. This name is chosen
	// to allow refactoring the public package without conflicting with its
	// Base, Script, and Region methods. Once the transition is fully completed
	// the ID can be stripped from the name.

	LangID   Language
	RegionID Region
	// TODO: we will soon run out of positions for ScriptID. Idea: instead of
	// storing lang, region, and ScriptID codes, store only the compact index and
	// have a lookup table from this code to its expansion. This greatly speeds
	// up table lookup, speed up common variant cases.
	// This will also immediately free up 3 extra bytes. Also, the pVariant
	// field can now be moved to the lookup table, as the compact index uniquely
	// determines the offset of a possible variant.
	ScriptID Script
	pVariant byte   // offset in str, includes preceding '-'
	pExt     uint16 // offset of first extension, includes preceding '-'

	// str is the string representation of the Tag. It will only be used if the
	// tag has variants or extensions.
	str string
}

// Make is a convenience wrapper for Parse that omits the error.
// In case of an error, a sensible default is returned.
func Make(s string) Tag {
	t, _ := Parse(s)
	return t
}

// Raw returns the raw base language, script and region, without making an
// attempt to infer their values.
// TODO: consider removing
func (t Tag) Raw() (b Language, s Script, r Region) {
	return t.LangID, t.ScriptID, t.RegionID
}

// equalTags compares language, script and region subtags only.
func (t Tag) equalTags(a Tag) bool {
	return t.LangID == a.LangID && t.ScriptID == a.ScriptID && t.RegionID == a.RegionID
}

// IsRoot returns true if t is equal to language "und".
func (t Tag) IsRoot() bool {
	if int(t.pVariant) < len(t.str) {
		return false
	}
	return t.equalTags(Und)
}

// IsPrivateUse reports whether the Tag consists solely of an IsPrivateUse use
// tag.
func (t Tag) IsPrivateUse() bool {
	return t.str != "" && t.pVariant == 0
}

// RemakeString is used to update t.str in case lang, script or region changed.
// It is assumed that pExt and pVariant still point to the start of the
// respective parts.
func (t *Tag) RemakeString() {
	if t.str == "" {
		return
	}
	extra := t.str[t.pVariant:]
	if t.pVariant > 0 {
		extra = extra[1:]
	}
	if t.equalTags(Und) && strings.HasPrefix(extra, "x-") {
		t.str = extra
		t.pVariant = 0
		t.pExt = 0
		return
	}
	var buf [max99thPercentileSize]byte // avoid extra memory allocation in most cases.
	b := buf[:t.genCoreBytes(buf[:])]
	if extra != "" {
		diff := len(b) - int(t.pVariant)
		b = append(b, '-')
		b = append(b, extra...)
		t.pVariant = uint8(int(t.pVariant) + diff)
		t.pExt = uint16(int(t.pExt) + diff)
	} else {
		t.pVariant = uint8(len(b))
		t.pExt = uint16(len(b))
	}
	t.str = string(b)
}

// genCoreBytes writes a string for the base languages, script and region tags
// to the given buffer and returns the number of bytes written. It will never
// write more than maxCoreSize bytes.
func (t *Tag) genCoreBytes(buf []byte) int {
	n := t.LangID.StringToBuf(buf[:])
	if t.ScriptID != 0 {
		n += copy(buf[n:], "-")
		n += copy(buf[n:], t.ScriptID.String())
	}
	if t.RegionID != 0 {
		n += copy(buf[n:], "-")
		n += copy(buf[n:], t.RegionID.String())
	}
	return n
}

// String returns the canonical string representation of the language tag.
func (t Tag) String() string {
	if t.str != "" {
		return t.str
	}
	if t.ScriptID == 0 && t.RegionID == 0 {
		return t.LangID.String()
	}
	buf := [maxCoreSize]byte{}
	return string(buf[:t.genCoreBytes(buf[:])])
}

// MarshalText implements encoding.TextMarshaler.
func (t Tag) MarshalText() (text []byte, err error) {
	if t.str != "" {
		text = append(text, t.str...)
	} else if t.ScriptID == 0 && t.RegionID == 0 {
		text = append(text, t.LangID.String()...)
	} else {
		buf := [maxCoreSize]byte{}
		text = buf[:t.genCoreBytes(buf[:])]
	}
	return text, nil
}

// UnmarshalText implements encoding.TextUnmarshaler.
func (t *Tag) UnmarshalText(text []byte) error {
	tag, err := Parse(string(text))
	*t = tag
	return err
}

// Variants returns the part of the tag holding all variants or the empty string
// if there are no variants defined.
func (t Tag) Variants() string {
	if t.pVariant == 0 {
		return ""
	}
	return t.str[t.pVariant:t.pExt]
}

// VariantOrPrivateUseTags returns variants or private use tags.
func (t Tag) VariantOrPrivateUseTags() string {
	if t.pExt > 0 {
		return t.str[t.pVariant:t.pExt]
	}
	return t.str[t.pVariant:]
}

// HasString reports whether this tag defines more than just the raw
// components.
func (t Tag) HasString() bool {
	return t.str != ""
}

// Parent returns the CLDR parent of t. In CLDR, missing fields in data for a
// specific language are substituted with fields from the parent language.
// The parent for a language may change for newer versions of CLDR.
func (t Tag) Parent() Tag {
	if t.str != "" {
		// Strip the variants and extensions.
		b, s, r := t.Raw()
		t = Tag{LangID: b, ScriptID: s, RegionID: r}
		if t.RegionID == 0 && t.ScriptID != 0 && t.LangID != 0 {
			base, _ := addTags(Tag{LangID: t.LangID})
			if base.ScriptID == t.ScriptID {
				return Tag{LangID: t.LangID}
			}
		}
		return t
	}
	if t.LangID != 0 {
		if t.RegionID != 0 {
			maxScript := t.ScriptID
			if maxScript == 0 {
				max, _ := addTags(t)
				maxScript = max.ScriptID
			}

			for i := range parents {
				if Language(parents[i].lang) == t.LangID && Script(parents[i].maxScript) == maxScript {
					for _, r := range parents[i].fromRegion {
						if Region(r) == t.RegionID {
							return Tag{
								LangID:   t.LangID,
								ScriptID: Script(parents[i].script),
								RegionID: Region(parents[i].toRegion),
							}
						}
					}
				}
			}

			// Strip the script if it is the default one.
			base, _ := addTags(Tag{LangID: t.LangID})
			if base.ScriptID != maxScript {
				return Tag{LangID: t.LangID, ScriptID: maxScript}
			}
			return Tag{LangID: t.LangID}
		} else if t.ScriptID != 0 {
			// The parent for an base-script pair with a non-default script is
			// "und" instead of the base language.
			base, _ := addTags(Tag{LangID: t.LangID})
			if base.ScriptID != t.ScriptID {
				return Und
			}
			return Tag{LangID: t.LangID}
		}
	}
	return Und
}

// ParseExtension parses s as an extension and returns it on success.
func ParseExtension(s string) (ext string, err error) {
	defer func() {
		if recover() != nil {
			ext = ""
			err = ErrSyntax
		}
	}()

	scan := makeScannerString(s)
	var end int
	if n := len(scan.token); n != 1 {
		return "", ErrSyntax
	}
	scan.toLower(0, len(scan.b))
	end = parseExtension(&scan)
	if end != len(s) {
		return "", ErrSyntax
	}
	return string(scan.b), nil
}

// HasVariants reports whether t has variants.
func (t Tag) HasVariants() bool {
	return uint16(t.pVariant) < t.pExt
}

// HasExtensions reports whether t has extensions.
func (t Tag) HasExtensions() bool {
	return int(t.pExt) < len(t.str)
}

// Extension returns the extension of type x for tag t. It will return
// false for ok if t does not have the requested extension. The returned
// extension will be invalid in this case.
func (t Tag) Extension(x byte) (ext string, ok bool) {
	for i := int(t.pExt); i < len(t.str)-1; {
		var ext string
		i, ext = getExtension(t.str, i)
		if ext[0] == x {
			return ext, true
		}
	}
	return "", false
}

// Extensions returns all extensions of t.
func (t Tag) Extensions() []string {
	e := []string{}
	for i := int(t.pExt); i < len(t.str)-1; {
		var ext string
		i, ext = getExtension(t.str, i)
		e = append(e, ext)
	}
	return e
}

// TypeForKey returns the type associated with the given key, where key and type
// are of the allowed values defined for the Unicode locale extension ('u') in
// https://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers.
// TypeForKey will traverse the inheritance chain to get the correct value.
//
// If there are multiple types associated with a key, only the first will be
// returned. If there is no type associated with a key, it returns the empty
// string.
func (t Tag) TypeForKey(key string) string {
	if _, start, end, _ := t.findTypeForKey(key); end != start {
		s := t.str[start:end]
		if p := strings.IndexByte(s, '-'); p >= 0 {
			s = s[:p]
		}
		return s
	}
	return ""
}

var (
	errPrivateUse       = errors.New("cannot set a key on a private use tag")
	errInvalidArguments = errors.New("invalid key or type")
)

// SetTypeForKey returns a new Tag with the key set to type, where key and type
// are of the allowed values defined for the Unicode locale extension ('u') in
// https://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers.
// An empty value removes an existing pair with the same key.
func (t Tag) SetTypeForKey(key, value string) (Tag, error) {
	if t.IsPrivateUse() {
		return t, errPrivateUse
	}
	if len(key) != 2 {
		return t, errInvalidArguments
	}

	// Remove the setting if value is "".
	if value == "" {
		start, sep, end, _ := t.findTypeForKey(key)
		if start != sep {
			// Remove a possible empty extension.
			switch {
			case t.str[start-2] != '-': // has previous elements.
			case end == len(t.str), // end of string
				end+2 < len(t.str) && t.str[end+2] == '-': // end of extension
				start -= 2
			}
			if start == int(t.pVariant) && end == len(t.str) {
				t.str = ""
				t.pVariant, t.pExt = 0, 0
			} else {
				t.str = fmt.Sprintf("%s%s", t.str[:start], t.str[end:])
			}
		}
		return t, nil
	}

	if len(value) < 3 || len(value) > 8 {
		return t, errInvalidArguments
	}

	var (
		buf    [maxCoreSize + maxSimpleUExtensionSize]byte
		uStart int // start of the -u extension.
	)

	// Generate the tag string if needed.
	if t.str == "" {
		uStart = t.genCoreBytes(buf[:])
		buf[uStart] = '-'
		uStart++
	}

	// Create new key-type pair and parse it to verify.
	b := buf[uStart:]
	copy(b, "u-")
	copy(b[2:], key)
	b[4] = '-'
	b = b[:5+copy(b[5:], value)]
	scan := makeScanner(b)
	if parseExtensions(&scan); scan.err != nil {
		return t, scan.err
	}

	// Assemble the replacement string.
	if t.str == "" {
		t.pVariant, t.pExt = byte(uStart-1), uint16(uStart-1)
		t.str = string(buf[:uStart+len(b)])
	} else {
		s := t.str
		start, sep, end, hasExt := t.findTypeForKey(key)
		if start == sep {
			if hasExt {
				b = b[2:]
			}
			t.str = fmt.Sprintf("%s-%s%s", s[:sep], b, s[end:])
		} else {
			t.str = fmt.Sprintf("%s-%s%s", s[:start+3], value, s[end:])
		}
	}
	return t, nil
}

// findTypeForKey returns the start and end position for the type corresponding
// to key or the point at which to insert the key-value pair if the type
// wasn't found. The hasExt return value reports whether an -u extension was present.
// Note: the extensions are typically very small and are likely to contain
// only one key-type pair.
func (t Tag) findTypeForKey(key string) (start, sep, end int, hasExt bool) {
	p := int(t.pExt)
	if len(key) != 2 || p == len(t.str) || p == 0 {
		return p, p, p, false
	}
	s := t.str

	// Find the correct extension.
	for p++; s[p] != 'u'; p++ {
		if s[p] > 'u' {
			p--
			return p, p, p, false
		}
		if p = nextExtension(s, p); p == len(s) {
			return len(s), len(s), len(s), false
		}
	}
	// Proceed to the hyphen following the extension name.
	p++

	// curKey is the key currently being processed.
	curKey := ""

	// Iterate over keys until we get the end of a section.
	for {
		end = p
		for p++; p < len(s) && s[p] != '-'; p++ {
		}
		n := p - end - 1
		if n <= 2 && curKey == key {
			if sep < end {
				sep++
			}
			return start, sep, end, true
		}
		switch n {
		case 0, // invalid string
			1: // next extension
			return end, end, end, true
		case 2:
			// next key
			curKey = s[end+1 : p]
			if curKey > key {
				return end, end, end, true
			}
			start = end
			sep = p
		}
	}
}

// ParseBase parses a 2- or 3-letter ISO 639 code.
// It returns a ValueError if s is a well-formed but unknown language identifier
// or another error if another error occurred.
func ParseBase(s string) (l Language, err error) {
	defer func() {
		if recover() != nil {
			l = 0
			err = ErrSyntax
		}
	}()

	if n := len(s); n < 2 || 3 < n {
		return 0, ErrSyntax
	}
	var buf [3]byte
	return getLangID(buf[:copy(buf[:], s)])
}

// ParseScript parses a 4-letter ISO 15924 code.
// It returns a ValueError if s is a well-formed but unknown script identifier
// or another error if another error occurred.
func ParseScript(s string) (scr Script, err error) {
	defer func() {
		if recover() != nil {
			scr = 0
			err = ErrSyntax
		}
	}()

	if len(s) != 4 {
		return 0, ErrSyntax
	}
	var buf [4]byte
	return getScriptID(script, buf[:copy(buf[:], s)])
}

// EncodeM49 returns the Region for the given UN M.49 code.
// It returns an error if r is not a valid code.
func EncodeM49(r int) (Region, error) {
	return getRegionM49(r)
}

// ParseRegion parses a 2- or 3-letter ISO 3166-1 or a UN M.49 code.
// It returns a ValueError if s is a well-formed but unknown region identifier
// or another error if another error occurred.
func ParseRegion(s string) (r Region, err error) {
	defer func() {
		if recover() != nil {
			r = 0
			err = ErrSyntax
		}
	}()

	if n := len(s); n < 2 || 3 < n {
		return 0, ErrSyntax
	}
	var buf [3]byte
	return getRegionID(buf[:copy(buf[:], s)])
}

// IsCountry returns whether this region is a country or autonomous area. This
// includes non-standard definitions from CLDR.
func (r Region) IsCountry() bool {
	if r == 0 || r.IsGroup() || r.IsPrivateUse() && r != _XK {
		return false
	}
	return true
}

// IsGroup returns whether this region defines a collection of regions. This
// includes non-standard definitions from CLDR.
func (r Region) IsGroup() bool {
	if r == 0 {
		return false
	}
	return int(regionInclusion[r]) < len(regionContainment)
}

// Contains returns whether Region c is contained by Region r. It returns true
// if c == r.
func (r Region) Contains(c Region) bool {
	if r == c {
		return true
	}
	g := regionInclusion[r]
	if g >= nRegionGroups {
		return false
	}
	m := regionContainment[g]

	d := regionInclusion[c]
	b := regionInclusionBits[d]

	// A contained country may belong to multiple disjoint groups. Matching any
	// of these indicates containment. If the contained region is a group, it
	// must strictly be a subset.
	if d >= nRegionGroups {
		return b&m != 0
	}
	return b&^m == 0
}

var errNoTLD = errors.New("language: region is not a valid ccTLD")

// TLD returns the country code top-level domain (ccTLD). UK is returned for GB.
// In all other cases it returns either the region itself or an error.
//
// This method may return an error for a region for which there exists a
// canonical form with a ccTLD. To get that ccTLD canonicalize r first. The
// region will already be canonicalized it was obtained from a Tag that was
// obtained using any of the default methods.
func (r Region) TLD() (Region, error) {
	// See http://en.wikipedia.org/wiki/Country_code_top-level_domain for the
	// difference between ISO 3166-1 and IANA ccTLD.
	if r == _GB {
		r = _UK
	}
	if (r.typ() & ccTLD) == 0 {
		return 0, errNoTLD
	}
	return r, nil
}

// Canonicalize returns the region or a possible replacement if the region is
// deprecated. It will not return a replacement for deprecated regions that
// are split into multiple regions.
func (r Region) Canonicalize() Region {
	if cr := normRegion(r); cr != 0 {
		return cr
	}
	return r
}

// Variant represents a registered variant of a language as defined by BCP 47.
type Variant struct {
	ID  uint8
	str string
}

// ParseVariant parses and returns a Variant. An error is returned if s is not
// a valid variant.
func ParseVariant(s string) (v Variant, err error) {
	defer func() {
		if recover() != nil {
			v = Variant{}
			err = ErrSyntax
		}
	}()

	s = strings.ToLower(s)
	if id, ok := variantIndex[s]; ok {
		return Variant{id, s}, nil
	}
	return Variant{}, NewValueError([]byte(s))
}

// String returns the string representation of the variant.
func (v Variant) String() string {
	return v.str
}
  07070100000F23000081A4000000000000000000000001645E367C00003063000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/text/internal/language/lookup.go  // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package language

import (
	"bytes"
	"fmt"
	"sort"
	"strconv"

	"golang.org/x/text/internal/tag"
)

// findIndex tries to find the given tag in idx and returns a standardized error
// if it could not be found.
func findIndex(idx tag.Index, key []byte, form string) (index int, err error) {
	if !tag.FixCase(form, key) {
		return 0, ErrSyntax
	}
	i := idx.Index(key)
	if i == -1 {
		return 0, NewValueError(key)
	}
	return i, nil
}

func searchUint(imap []uint16, key uint16) int {
	return sort.Search(len(imap), func(i int) bool {
		return imap[i] >= key
	})
}

type Language uint16

// getLangID returns the langID of s if s is a canonical subtag
// or langUnknown if s is not a canonical subtag.
func getLangID(s []byte) (Language, error) {
	if len(s) == 2 {
		return getLangISO2(s)
	}
	return getLangISO3(s)
}

// TODO language normalization as well as the AliasMaps could be moved to the
// higher level package, but it is a bit tricky to separate the generation.

func (id Language) Canonicalize() (Language, AliasType) {
	return normLang(id)
}

// normLang returns the mapped langID of id according to mapping m.
func normLang(id Language) (Language, AliasType) {
	k := sort.Search(len(AliasMap), func(i int) bool {
		return AliasMap[i].From >= uint16(id)
	})
	if k < len(AliasMap) && AliasMap[k].From == uint16(id) {
		return Language(AliasMap[k].To), AliasTypes[k]
	}
	return id, AliasTypeUnknown
}

// getLangISO2 returns the langID for the given 2-letter ISO language code
// or unknownLang if this does not exist.
func getLangISO2(s []byte) (Language, error) {
	if !tag.FixCase("zz", s) {
		return 0, ErrSyntax
	}
	if i := lang.Index(s); i != -1 && lang.Elem(i)[3] != 0 {
		return Language(i), nil
	}
	return 0, NewValueError(s)
}

const base = 'z' - 'a' + 1

func strToInt(s []byte) uint {
	v := uint(0)
	for i := 0; i < len(s); i++ {
		v *= base
		v += uint(s[i] - 'a')
	}
	return v
}

// converts the given integer to the original ASCII string passed to strToInt.
// len(s) must match the number of characters obtained.
func intToStr(v uint, s []byte) {
	for i := len(s) - 1; i >= 0; i-- {
		s[i] = byte(v%base) + 'a'
		v /= base
	}
}

// getLangISO3 returns the langID for the given 3-letter ISO language code
// or unknownLang if this does not exist.
func getLangISO3(s []byte) (Language, error) {
	if tag.FixCase("und", s) {
		// first try to match canonical 3-letter entries
		for i := lang.Index(s[:2]); i != -1; i = lang.Next(s[:2], i) {
			if e := lang.Elem(i); e[3] == 0 && e[2] == s[2] {
				// We treat "und" as special and always translate it to "unspecified".
				// Note that ZZ and Zzzz are private use and are not treated as
				// unspecified by default.
				id := Language(i)
				if id == nonCanonicalUnd {
					return 0, nil
				}
				return id, nil
			}
		}
		if i := altLangISO3.Index(s); i != -1 {
			return Language(altLangIndex[altLangISO3.Elem(i)[3]]), nil
		}
		n := strToInt(s)
		if langNoIndex[n/8]&(1<<(n%8)) != 0 {
			return Language(n) + langNoIndexOffset, nil
		}
		// Check for non-canonical uses of ISO3.
		for i := lang.Index(s[:1]); i != -1; i = lang.Next(s[:1], i) {
			if e := lang.Elem(i); e[2] == s[1] && e[3] == s[2] {
				return Language(i), nil
			}
		}
		return 0, NewValueError(s)
	}
	return 0, ErrSyntax
}

// StringToBuf writes the string to b and returns the number of bytes
// written.  cap(b) must be >= 3.
func (id Language) StringToBuf(b []byte) int {
	if id >= langNoIndexOffset {
		intToStr(uint(id)-langNoIndexOffset, b[:3])
		return 3
	} else if id == 0 {
		return copy(b, "und")
	}
	l := lang[id<<2:]
	if l[3] == 0 {
		return copy(b, l[:3])
	}
	return copy(b, l[:2])
}

// String returns the BCP 47 representation of the langID.
// Use b as variable name, instead of id, to ensure the variable
// used is consistent with that of Base in which this type is embedded.
func (b Language) String() string {
	if b == 0 {
		return "und"
	} else if b >= langNoIndexOffset {
		b -= langNoIndexOffset
		buf := [3]byte{}
		intToStr(uint(b), buf[:])
		return string(buf[:])
	}
	l := lang.Elem(int(b))
	if l[3] == 0 {
		return l[:3]
	}
	return l[:2]
}

// ISO3 returns the ISO 639-3 language code.
func (b Language) ISO3() string {
	if b == 0 || b >= langNoIndexOffset {
		return b.String()
	}
	l := lang.Elem(int(b))
	if l[3] == 0 {
		return l[:3]
	} else if l[2] == 0 {
		return altLangISO3.Elem(int(l[3]))[:3]
	}
	// This allocation will only happen for 3-letter ISO codes
	// that are non-canonical BCP 47 language identifiers.
	return l[0:1] + l[2:4]
}

// IsPrivateUse reports whether this language code is reserved for private use.
func (b Language) IsPrivateUse() bool {
	return langPrivateStart <= b && b <= langPrivateEnd
}

// SuppressScript returns the script marked as SuppressScript in the IANA
// language tag repository, or 0 if there is no such script.
func (b Language) SuppressScript() Script {
	if b < langNoIndexOffset {
		return Script(suppressScript[b])
	}
	return 0
}

type Region uint16

// getRegionID returns the region id for s if s is a valid 2-letter region code
// or unknownRegion.
func getRegionID(s []byte) (Region, error) {
	if len(s) == 3 {
		if isAlpha(s[0]) {
			return getRegionISO3(s)
		}
		if i, err := strconv.ParseUint(string(s), 10, 10); err == nil {
			return getRegionM49(int(i))
		}
	}
	return getRegionISO2(s)
}

// getRegionISO2 returns the regionID for the given 2-letter ISO country code
// or unknownRegion if this does not exist.
func getRegionISO2(s []byte) (Region, error) {
	i, err := findIndex(regionISO, s, "ZZ")
	if err != nil {
		return 0, err
	}
	return Region(i) + isoRegionOffset, nil
}

// getRegionISO3 returns the regionID for the given 3-letter ISO country code
// or unknownRegion if this does not exist.
func getRegionISO3(s []byte) (Region, error) {
	if tag.FixCase("ZZZ", s) {
		for i := regionISO.Index(s[:1]); i != -1; i = regionISO.Next(s[:1], i) {
			if e := regionISO.Elem(i); e[2] == s[1] && e[3] == s[2] {
				return Region(i) + isoRegionOffset, nil
			}
		}
		for i := 0; i < len(altRegionISO3); i += 3 {
			if tag.Compare(altRegionISO3[i:i+3], s) == 0 {
				return Region(altRegionIDs[i/3]), nil
			}
		}
		return 0, NewValueError(s)
	}
	return 0, ErrSyntax
}

func getRegionM49(n int) (Region, error) {
	if 0 < n && n <= 999 {
		const (
			searchBits = 7
			regionBits = 9
			regionMask = 1<<regionBits - 1
		)
		idx := n >> searchBits
		buf := fromM49[m49Index[idx]:m49Index[idx+1]]
		val := uint16(n) << regionBits // we rely on bits shifting out
		i := sort.Search(len(buf), func(i int) bool {
			return buf[i] >= val
		})
		if r := fromM49[int(m49Index[idx])+i]; r&^regionMask == val {
			return Region(r & regionMask), nil
		}
	}
	var e ValueError
	fmt.Fprint(bytes.NewBuffer([]byte(e.v[:])), n)
	return 0, e
}

// normRegion returns a region if r is deprecated or 0 otherwise.
// TODO: consider supporting BYS (-> BLR), CSK (-> 200 or CZ), PHI (-> PHL) and AFI (-> DJ).
// TODO: consider mapping split up regions to new most populous one (like CLDR).
func normRegion(r Region) Region {
	m := regionOldMap
	k := sort.Search(len(m), func(i int) bool {
		return m[i].From >= uint16(r)
	})
	if k < len(m) && m[k].From == uint16(r) {
		return Region(m[k].To)
	}
	return 0
}

const (
	iso3166UserAssigned = 1 << iota
	ccTLD
	bcp47Region
)

func (r Region) typ() byte {
	return regionTypes[r]
}

// String returns the BCP 47 representation for the region.
// It returns "ZZ" for an unspecified region.
func (r Region) String() string {
	if r < isoRegionOffset {
		if r == 0 {
			return "ZZ"
		}
		return fmt.Sprintf("%03d", r.M49())
	}
	r -= isoRegionOffset
	return regionISO.Elem(int(r))[:2]
}

// ISO3 returns the 3-letter ISO code of r.
// Note that not all regions have a 3-letter ISO code.
// In such cases this method returns "ZZZ".
func (r Region) ISO3() string {
	if r < isoRegionOffset {
		return "ZZZ"
	}
	r -= isoRegionOffset
	reg := regionISO.Elem(int(r))
	switch reg[2] {
	case 0:
		return altRegionISO3[reg[3]:][:3]
	case ' ':
		return "ZZZ"
	}
	return reg[0:1] + reg[2:4]
}

// M49 returns the UN M.49 encoding of r, or 0 if this encoding
// is not defined for r.
func (r Region) M49() int {
	return int(m49[r])
}

// IsPrivateUse reports whether r has the ISO 3166 User-assigned status. This
// may include private-use tags that are assigned by CLDR and used in this
// implementation. So IsPrivateUse and IsCountry can be simultaneously true.
func (r Region) IsPrivateUse() bool {
	return r.typ()&iso3166UserAssigned != 0
}

type Script uint16

// getScriptID returns the script id for string s. It assumes that s
// is of the format [A-Z][a-z]{3}.
func getScriptID(idx tag.Index, s []byte) (Script, error) {
	i, err := findIndex(idx, s, "Zzzz")
	return Script(i), err
}

// String returns the script code in title case.
// It returns "Zzzz" for an unspecified script.
func (s Script) String() string {
	if s == 0 {
		return "Zzzz"
	}
	return script.Elem(int(s))
}

// IsPrivateUse reports whether this script code is reserved for private use.
func (s Script) IsPrivateUse() bool {
	return _Qaaa <= s && s <= _Qabx
}

const (
	maxAltTaglen = len("en-US-POSIX")
	maxLen       = maxAltTaglen
)

var (
	// grandfatheredMap holds a mapping from legacy and grandfathered tags to
	// their base language or index to more elaborate tag.
	grandfatheredMap = map[[maxLen]byte]int16{
		[maxLen]byte{'a', 'r', 't', '-', 'l', 'o', 'j', 'b', 'a', 'n'}: _jbo, // art-lojban
		[maxLen]byte{'i', '-', 'a', 'm', 'i'}:                          _ami, // i-ami
		[maxLen]byte{'i', '-', 'b', 'n', 'n'}:                          _bnn, // i-bnn
		[maxLen]byte{'i', '-', 'h', 'a', 'k'}:                          _hak, // i-hak
		[maxLen]byte{'i', '-', 'k', 'l', 'i', 'n', 'g', 'o', 'n'}:      _tlh, // i-klingon
		[maxLen]byte{'i', '-', 'l', 'u', 'x'}:                          _lb,  // i-lux
		[maxLen]byte{'i', '-', 'n', 'a', 'v', 'a', 'j', 'o'}:           _nv,  // i-navajo
		[maxLen]byte{'i', '-', 'p', 'w', 'n'}:                          _pwn, // i-pwn
		[maxLen]byte{'i', '-', 't', 'a', 'o'}:                          _tao, // i-tao
		[maxLen]byte{'i', '-', 't', 'a', 'y'}:                          _tay, // i-tay
		[maxLen]byte{'i', '-', 't', 's', 'u'}:                          _tsu, // i-tsu
		[maxLen]byte{'n', 'o', '-', 'b', 'o', 'k'}:                     _nb,  // no-bok
		[maxLen]byte{'n', 'o', '-', 'n', 'y', 'n'}:                     _nn,  // no-nyn
		[maxLen]byte{'s', 'g', 'n', '-', 'b', 'e', '-', 'f', 'r'}:      _sfb, // sgn-BE-FR
		[maxLen]byte{'s', 'g', 'n', '-', 'b', 'e', '-', 'n', 'l'}:      _vgt, // sgn-BE-NL
		[maxLen]byte{'s', 'g', 'n', '-', 'c', 'h', '-', 'd', 'e'}:      _sgg, // sgn-CH-DE
		[maxLen]byte{'z', 'h', '-', 'g', 'u', 'o', 'y', 'u'}:           _cmn, // zh-guoyu
		[maxLen]byte{'z', 'h', '-', 'h', 'a', 'k', 'k', 'a'}:           _hak, // zh-hakka
		[maxLen]byte{'z', 'h', '-', 'm', 'i', 'n', '-', 'n', 'a', 'n'}: _nan, // zh-min-nan
		[maxLen]byte{'z', 'h', '-', 'x', 'i', 'a', 'n', 'g'}:           _hsn, // zh-xiang

		// Grandfathered tags with no modern replacement will be converted as
		// follows:
		[maxLen]byte{'c', 'e', 'l', '-', 'g', 'a', 'u', 'l', 'i', 's', 'h'}: -1, // cel-gaulish
		[maxLen]byte{'e', 'n', '-', 'g', 'b', '-', 'o', 'e', 'd'}:           -2, // en-GB-oed
		[maxLen]byte{'i', '-', 'd', 'e', 'f', 'a', 'u', 'l', 't'}:           -3, // i-default
		[maxLen]byte{'i', '-', 'e', 'n', 'o', 'c', 'h', 'i', 'a', 'n'}:      -4, // i-enochian
		[maxLen]byte{'i', '-', 'm', 'i', 'n', 'g', 'o'}:                     -5, // i-mingo
		[maxLen]byte{'z', 'h', '-', 'm', 'i', 'n'}:                          -6, // zh-min

		// CLDR-specific tag.
		[maxLen]byte{'r', 'o', 'o', 't'}:                                    0,  // root
		[maxLen]byte{'e', 'n', '-', 'u', 's', '-', 'p', 'o', 's', 'i', 'x'}: -7, // en_US_POSIX"
	}

	altTagIndex = [...]uint8{0, 17, 31, 45, 61, 74, 86, 102}

	altTags = "xtg-x-cel-gaulishen-GB-oxendicten-x-i-defaultund-x-i-enochiansee-x-i-mingonan-x-zh-minen-US-u-va-posix"
)

func grandfathered(s [maxAltTaglen]byte) (t Tag, ok bool) {
	if v, ok := grandfatheredMap[s]; ok {
		if v < 0 {
			return Make(altTags[altTagIndex[-v-1]:altTagIndex[-v]]), true
		}
		t.LangID = Language(v)
		return t, true
	}
	return t, false
}
 07070100000F24000081A4000000000000000000000001645E367C000016C0000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/text/internal/language/match.go   // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package language

import "errors"

type scriptRegionFlags uint8

const (
	isList = 1 << iota
	scriptInFrom
	regionInFrom
)

func (t *Tag) setUndefinedLang(id Language) {
	if t.LangID == 0 {
		t.LangID = id
	}
}

func (t *Tag) setUndefinedScript(id Script) {
	if t.ScriptID == 0 {
		t.ScriptID = id
	}
}

func (t *Tag) setUndefinedRegion(id Region) {
	if t.RegionID == 0 || t.RegionID.Contains(id) {
		t.RegionID = id
	}
}

// ErrMissingLikelyTagsData indicates no information was available
// to compute likely values of missing tags.
var ErrMissingLikelyTagsData = errors.New("missing likely tags data")

// addLikelySubtags sets subtags to their most likely value, given the locale.
// In most cases this means setting fields for unknown values, but in some
// cases it may alter a value.  It returns an ErrMissingLikelyTagsData error
// if the given locale cannot be expanded.
func (t Tag) addLikelySubtags() (Tag, error) {
	id, err := addTags(t)
	if err != nil {
		return t, err
	} else if id.equalTags(t) {
		return t, nil
	}
	id.RemakeString()
	return id, nil
}

// specializeRegion attempts to specialize a group region.
func specializeRegion(t *Tag) bool {
	if i := regionInclusion[t.RegionID]; i < nRegionGroups {
		x := likelyRegionGroup[i]
		if Language(x.lang) == t.LangID && Script(x.script) == t.ScriptID {
			t.RegionID = Region(x.region)
		}
		return true
	}
	return false
}

// Maximize returns a new tag with missing tags filled in.
func (t Tag) Maximize() (Tag, error) {
	return addTags(t)
}

func addTags(t Tag) (Tag, error) {
	// We leave private use identifiers alone.
	if t.IsPrivateUse() {
		return t, nil
	}
	if t.ScriptID != 0 && t.RegionID != 0 {
		if t.LangID != 0 {
			// already fully specified
			specializeRegion(&t)
			return t, nil
		}
		// Search matches for und-script-region. Note that for these cases
		// region will never be a group so there is no need to check for this.
		list := likelyRegion[t.RegionID : t.RegionID+1]
		if x := list[0]; x.flags&isList != 0 {
			list = likelyRegionList[x.lang : x.lang+uint16(x.script)]
		}
		for _, x := range list {
			// Deviating from the spec. See match_test.go for details.
			if Script(x.script) == t.ScriptID {
				t.setUndefinedLang(Language(x.lang))
				return t, nil
			}
		}
	}
	if t.LangID != 0 {
		// Search matches for lang-script and lang-region, where lang != und.
		if t.LangID < langNoIndexOffset {
			x := likelyLang[t.LangID]
			if x.flags&isList != 0 {
				list := likelyLangList[x.region : x.region+uint16(x.script)]
				if t.ScriptID != 0 {
					for _, x := range list {
						if Script(x.script) == t.ScriptID && x.flags&scriptInFrom != 0 {
							t.setUndefinedRegion(Region(x.region))
							return t, nil
						}
					}
				} else if t.RegionID != 0 {
					count := 0
					goodScript := true
					tt := t
					for _, x := range list {
						// We visit all entries for which the script was not
						// defined, including the ones where the region was not
						// defined. This allows for proper disambiguation within
						// regions.
						if x.flags&scriptInFrom == 0 && t.RegionID.Contains(Region(x.region)) {
							tt.RegionID = Region(x.region)
							tt.setUndefinedScript(Script(x.script))
							goodScript = goodScript && tt.ScriptID == Script(x.script)
							count++
						}
					}
					if count == 1 {
						return tt, nil
					}
					// Even if we fail to find a unique Region, we might have
					// an unambiguous script.
					if goodScript {
						t.ScriptID = tt.ScriptID
					}
				}
			}
		}
	} else {
		// Search matches for und-script.
		if t.ScriptID != 0 {
			x := likelyScript[t.ScriptID]
			if x.region != 0 {
				t.setUndefinedRegion(Region(x.region))
				t.setUndefinedLang(Language(x.lang))
				return t, nil
			}
		}
		// Search matches for und-region. If und-script-region exists, it would
		// have been found earlier.
		if t.RegionID != 0 {
			if i := regionInclusion[t.RegionID]; i < nRegionGroups {
				x := likelyRegionGroup[i]
				if x.region != 0 {
					t.setUndefinedLang(Language(x.lang))
					t.setUndefinedScript(Script(x.script))
					t.RegionID = Region(x.region)
				}
			} else {
				x := likelyRegion[t.RegionID]
				if x.flags&isList != 0 {
					x = likelyRegionList[x.lang]
				}
				if x.script != 0 && x.flags != scriptInFrom {
					t.setUndefinedLang(Language(x.lang))
					t.setUndefinedScript(Script(x.script))
					return t, nil
				}
			}
		}
	}

	// Search matches for lang.
	if t.LangID < langNoIndexOffset {
		x := likelyLang[t.LangID]
		if x.flags&isList != 0 {
			x = likelyLangList[x.region]
		}
		if x.region != 0 {
			t.setUndefinedScript(Script(x.script))
			t.setUndefinedRegion(Region(x.region))
		}
		specializeRegion(&t)
		if t.LangID == 0 {
			t.LangID = _en // default language
		}
		return t, nil
	}
	return t, ErrMissingLikelyTagsData
}

func (t *Tag) setTagsFrom(id Tag) {
	t.LangID = id.LangID
	t.ScriptID = id.ScriptID
	t.RegionID = id.RegionID
}

// minimize removes the region or script subtags from t such that
// t.addLikelySubtags() == t.minimize().addLikelySubtags().
func (t Tag) minimize() (Tag, error) {
	t, err := minimizeTags(t)
	if err != nil {
		return t, err
	}
	t.RemakeString()
	return t, nil
}

// minimizeTags mimics the behavior of the ICU 51 C implementation.
func minimizeTags(t Tag) (Tag, error) {
	if t.equalTags(Und) {
		return t, nil
	}
	max, err := addTags(t)
	if err != nil {
		return t, err
	}
	for _, id := range [...]Tag{
		{LangID: t.LangID},
		{LangID: t.LangID, RegionID: t.RegionID},
		{LangID: t.LangID, ScriptID: t.ScriptID},
	} {
		if x, err := addTags(id); err == nil && max.equalTags(x) {
			t.setTagsFrom(id)
			break
		}
	}
	return t, nil
}
07070100000F25000081A4000000000000000000000001645E367C00003B89000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/text/internal/language/parse.go   // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package language

import (
	"bytes"
	"errors"
	"fmt"
	"sort"

	"golang.org/x/text/internal/tag"
)

// isAlpha returns true if the byte is not a digit.
// b must be an ASCII letter or digit.
func isAlpha(b byte) bool {
	return b > '9'
}

// isAlphaNum returns true if the string contains only ASCII letters or digits.
func isAlphaNum(s []byte) bool {
	for _, c := range s {
		if !('a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || '0' <= c && c <= '9') {
			return false
		}
	}
	return true
}

// ErrSyntax is returned by any of the parsing functions when the
// input is not well-formed, according to BCP 47.
// TODO: return the position at which the syntax error occurred?
var ErrSyntax = errors.New("language: tag is not well-formed")

// ErrDuplicateKey is returned when a tag contains the same key twice with
// different values in the -u section.
var ErrDuplicateKey = errors.New("language: different values for same key in -u extension")

// ValueError is returned by any of the parsing functions when the
// input is well-formed but the respective subtag is not recognized
// as a valid value.
type ValueError struct {
	v [8]byte
}

// NewValueError creates a new ValueError.
func NewValueError(tag []byte) ValueError {
	var e ValueError
	copy(e.v[:], tag)
	return e
}

func (e ValueError) tag() []byte {
	n := bytes.IndexByte(e.v[:], 0)
	if n == -1 {
		n = 8
	}
	return e.v[:n]
}

// Error implements the error interface.
func (e ValueError) Error() string {
	return fmt.Sprintf("language: subtag %q is well-formed but unknown", e.tag())
}

// Subtag returns the subtag for which the error occurred.
func (e ValueError) Subtag() string {
	return string(e.tag())
}

// scanner is used to scan BCP 47 tokens, which are separated by _ or -.
type scanner struct {
	b     []byte
	bytes [max99thPercentileSize]byte
	token []byte
	start int // start position of the current token
	end   int // end position of the current token
	next  int // next point for scan
	err   error
	done  bool
}

func makeScannerString(s string) scanner {
	scan := scanner{}
	if len(s) <= len(scan.bytes) {
		scan.b = scan.bytes[:copy(scan.bytes[:], s)]
	} else {
		scan.b = []byte(s)
	}
	scan.init()
	return scan
}

// makeScanner returns a scanner using b as the input buffer.
// b is not copied and may be modified by the scanner routines.
func makeScanner(b []byte) scanner {
	scan := scanner{b: b}
	scan.init()
	return scan
}

func (s *scanner) init() {
	for i, c := range s.b {
		if c == '_' {
			s.b[i] = '-'
		}
	}
	s.scan()
}

// restToLower converts the string between start and end to lower case.
func (s *scanner) toLower(start, end int) {
	for i := start; i < end; i++ {
		c := s.b[i]
		if 'A' <= c && c <= 'Z' {
			s.b[i] += 'a' - 'A'
		}
	}
}

func (s *scanner) setError(e error) {
	if s.err == nil || (e == ErrSyntax && s.err != ErrSyntax) {
		s.err = e
	}
}

// resizeRange shrinks or grows the array at position oldStart such that
// a new string of size newSize can fit between oldStart and oldEnd.
// Sets the scan point to after the resized range.
func (s *scanner) resizeRange(oldStart, oldEnd, newSize int) {
	s.start = oldStart
	if end := oldStart + newSize; end != oldEnd {
		diff := end - oldEnd
		var b []byte
		if n := len(s.b) + diff; n > cap(s.b) {
			b = make([]byte, n)
			copy(b, s.b[:oldStart])
		} else {
			b = s.b[:n]
		}
		copy(b[end:], s.b[oldEnd:])
		s.b = b
		s.next = end + (s.next - s.end)
		s.end = end
	}
}

// replace replaces the current token with repl.
func (s *scanner) replace(repl string) {
	s.resizeRange(s.start, s.end, len(repl))
	copy(s.b[s.start:], repl)
}

// gobble removes the current token from the input.
// Caller must call scan after calling gobble.
func (s *scanner) gobble(e error) {
	s.setError(e)
	if s.start == 0 {
		s.b = s.b[:+copy(s.b, s.b[s.next:])]
		s.end = 0
	} else {
		s.b = s.b[:s.start-1+copy(s.b[s.start-1:], s.b[s.end:])]
		s.end = s.start - 1
	}
	s.next = s.start
}

// deleteRange removes the given range from s.b before the current token.
func (s *scanner) deleteRange(start, end int) {
	s.b = s.b[:start+copy(s.b[start:], s.b[end:])]
	diff := end - start
	s.next -= diff
	s.start -= diff
	s.end -= diff
}

// scan parses the next token of a BCP 47 string.  Tokens that are larger
// than 8 characters or include non-alphanumeric characters result in an error
// and are gobbled and removed from the output.
// It returns the end position of the last token consumed.
func (s *scanner) scan() (end int) {
	end = s.end
	s.token = nil
	for s.start = s.next; s.next < len(s.b); {
		i := bytes.IndexByte(s.b[s.next:], '-')
		if i == -1 {
			s.end = len(s.b)
			s.next = len(s.b)
			i = s.end - s.start
		} else {
			s.end = s.next + i
			s.next = s.end + 1
		}
		token := s.b[s.start:s.end]
		if i < 1 || i > 8 || !isAlphaNum(token) {
			s.gobble(ErrSyntax)
			continue
		}
		s.token = token
		return end
	}
	if n := len(s.b); n > 0 && s.b[n-1] == '-' {
		s.setError(ErrSyntax)
		s.b = s.b[:len(s.b)-1]
	}
	s.done = true
	return end
}

// acceptMinSize parses multiple tokens of the given size or greater.
// It returns the end position of the last token consumed.
func (s *scanner) acceptMinSize(min int) (end int) {
	end = s.end
	s.scan()
	for ; len(s.token) >= min; s.scan() {
		end = s.end
	}
	return end
}

// Parse parses the given BCP 47 string and returns a valid Tag. If parsing
// failed it returns an error and any part of the tag that could be parsed.
// If parsing succeeded but an unknown value was found, it returns
// ValueError. The Tag returned in this case is just stripped of the unknown
// value. All other values are preserved. It accepts tags in the BCP 47 format
// and extensions to this standard defined in
// https://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers.
func Parse(s string) (t Tag, err error) {
	// TODO: consider supporting old-style locale key-value pairs.
	if s == "" {
		return Und, ErrSyntax
	}
	defer func() {
		if recover() != nil {
			t = Und
			err = ErrSyntax
			return
		}
	}()
	if len(s) <= maxAltTaglen {
		b := [maxAltTaglen]byte{}
		for i, c := range s {
			// Generating invalid UTF-8 is okay as it won't match.
			if 'A' <= c && c <= 'Z' {
				c += 'a' - 'A'
			} else if c == '_' {
				c = '-'
			}
			b[i] = byte(c)
		}
		if t, ok := grandfathered(b); ok {
			return t, nil
		}
	}
	scan := makeScannerString(s)
	return parse(&scan, s)
}

func parse(scan *scanner, s string) (t Tag, err error) {
	t = Und
	var end int
	if n := len(scan.token); n <= 1 {
		scan.toLower(0, len(scan.b))
		if n == 0 || scan.token[0] != 'x' {
			return t, ErrSyntax
		}
		end = parseExtensions(scan)
	} else if n >= 4 {
		return Und, ErrSyntax
	} else { // the usual case
		t, end = parseTag(scan, true)
		if n := len(scan.token); n == 1 {
			t.pExt = uint16(end)
			end = parseExtensions(scan)
		} else if end < len(scan.b) {
			scan.setError(ErrSyntax)
			scan.b = scan.b[:end]
		}
	}
	if int(t.pVariant) < len(scan.b) {
		if end < len(s) {
			s = s[:end]
		}
		if len(s) > 0 && tag.Compare(s, scan.b) == 0 {
			t.str = s
		} else {
			t.str = string(scan.b)
		}
	} else {
		t.pVariant, t.pExt = 0, 0
	}
	return t, scan.err
}

// parseTag parses language, script, region and variants.
// It returns a Tag and the end position in the input that was parsed.
// If doNorm is true, then <lang>-<extlang> will be normalized to <extlang>.
func parseTag(scan *scanner, doNorm bool) (t Tag, end int) {
	var e error
	// TODO: set an error if an unknown lang, script or region is encountered.
	t.LangID, e = getLangID(scan.token)
	scan.setError(e)
	scan.replace(t.LangID.String())
	langStart := scan.start
	end = scan.scan()
	for len(scan.token) == 3 && isAlpha(scan.token[0]) {
		// From http://tools.ietf.org/html/bcp47, <lang>-<extlang> tags are equivalent
		// to a tag of the form <extlang>.
		if doNorm {
			lang, e := getLangID(scan.token)
			if lang != 0 {
				t.LangID = lang
				langStr := lang.String()
				copy(scan.b[langStart:], langStr)
				scan.b[langStart+len(langStr)] = '-'
				scan.start = langStart + len(langStr) + 1
			}
			scan.gobble(e)
		}
		end = scan.scan()
	}
	if len(scan.token) == 4 && isAlpha(scan.token[0]) {
		t.ScriptID, e = getScriptID(script, scan.token)
		if t.ScriptID == 0 {
			scan.gobble(e)
		}
		end = scan.scan()
	}
	if n := len(scan.token); n >= 2 && n <= 3 {
		t.RegionID, e = getRegionID(scan.token)
		if t.RegionID == 0 {
			scan.gobble(e)
		} else {
			scan.replace(t.RegionID.String())
		}
		end = scan.scan()
	}
	scan.toLower(scan.start, len(scan.b))
	t.pVariant = byte(end)
	end = parseVariants(scan, end, t)
	t.pExt = uint16(end)
	return t, end
}

var separator = []byte{'-'}

// parseVariants scans tokens as long as each token is a valid variant string.
// Duplicate variants are removed.
func parseVariants(scan *scanner, end int, t Tag) int {
	start := scan.start
	varIDBuf := [4]uint8{}
	variantBuf := [4][]byte{}
	varID := varIDBuf[:0]
	variant := variantBuf[:0]
	last := -1
	needSort := false
	for ; len(scan.token) >= 4; scan.scan() {
		// TODO: measure the impact of needing this conversion and redesign
		// the data structure if there is an issue.
		v, ok := variantIndex[string(scan.token)]
		if !ok {
			// unknown variant
			// TODO: allow user-defined variants?
			scan.gobble(NewValueError(scan.token))
			continue
		}
		varID = append(varID, v)
		variant = append(variant, scan.token)
		if !needSort {
			if last < int(v) {
				last = int(v)
			} else {
				needSort = true
				// There is no legal combinations of more than 7 variants
				// (and this is by no means a useful sequence).
				const maxVariants = 8
				if len(varID) > maxVariants {
					break
				}
			}
		}
		end = scan.end
	}
	if needSort {
		sort.Sort(variantsSort{varID, variant})
		k, l := 0, -1
		for i, v := range varID {
			w := int(v)
			if l == w {
				// Remove duplicates.
				continue
			}
			varID[k] = varID[i]
			variant[k] = variant[i]
			k++
			l = w
		}
		if str := bytes.Join(variant[:k], separator); len(str) == 0 {
			end = start - 1
		} else {
			scan.resizeRange(start, end, len(str))
			copy(scan.b[scan.start:], str)
			end = scan.end
		}
	}
	return end
}

type variantsSort struct {
	i []uint8
	v [][]byte
}

func (s variantsSort) Len() int {
	return len(s.i)
}

func (s variantsSort) Swap(i, j int) {
	s.i[i], s.i[j] = s.i[j], s.i[i]
	s.v[i], s.v[j] = s.v[j], s.v[i]
}

func (s variantsSort) Less(i, j int) bool {
	return s.i[i] < s.i[j]
}

type bytesSort struct {
	b [][]byte
	n int // first n bytes to compare
}

func (b bytesSort) Len() int {
	return len(b.b)
}

func (b bytesSort) Swap(i, j int) {
	b.b[i], b.b[j] = b.b[j], b.b[i]
}

func (b bytesSort) Less(i, j int) bool {
	for k := 0; k < b.n; k++ {
		if b.b[i][k] == b.b[j][k] {
			continue
		}
		return b.b[i][k] < b.b[j][k]
	}
	return false
}

// parseExtensions parses and normalizes the extensions in the buffer.
// It returns the last position of scan.b that is part of any extension.
// It also trims scan.b to remove excess parts accordingly.
func parseExtensions(scan *scanner) int {
	start := scan.start
	exts := [][]byte{}
	private := []byte{}
	end := scan.end
	for len(scan.token) == 1 {
		extStart := scan.start
		ext := scan.token[0]
		end = parseExtension(scan)
		extension := scan.b[extStart:end]
		if len(extension) < 3 || (ext != 'x' && len(extension) < 4) {
			scan.setError(ErrSyntax)
			end = extStart
			continue
		} else if start == extStart && (ext == 'x' || scan.start == len(scan.b)) {
			scan.b = scan.b[:end]
			return end
		} else if ext == 'x' {
			private = extension
			break
		}
		exts = append(exts, extension)
	}
	sort.Sort(bytesSort{exts, 1})
	if len(private) > 0 {
		exts = append(exts, private)
	}
	scan.b = scan.b[:start]
	if len(exts) > 0 {
		scan.b = append(scan.b, bytes.Join(exts, separator)...)
	} else if start > 0 {
		// Strip trailing '-'.
		scan.b = scan.b[:start-1]
	}
	return end
}

// parseExtension parses a single extension and returns the position of
// the extension end.
func parseExtension(scan *scanner) int {
	start, end := scan.start, scan.end
	switch scan.token[0] {
	case 'u': // https://www.ietf.org/rfc/rfc6067.txt
		attrStart := end
		scan.scan()
		for last := []byte{}; len(scan.token) > 2; scan.scan() {
			if bytes.Compare(scan.token, last) != -1 {
				// Attributes are unsorted. Start over from scratch.
				p := attrStart + 1
				scan.next = p
				attrs := [][]byte{}
				for scan.scan(); len(scan.token) > 2; scan.scan() {
					attrs = append(attrs, scan.token)
					end = scan.end
				}
				sort.Sort(bytesSort{attrs, 3})
				copy(scan.b[p:], bytes.Join(attrs, separator))
				break
			}
			last = scan.token
			end = scan.end
		}
		// Scan key-type sequences. A key is of length 2 and may be followed
		// by 0 or more "type" subtags from 3 to the maximum of 8 letters.
		var last, key []byte
		for attrEnd := end; len(scan.token) == 2; last = key {
			key = scan.token
			end = scan.end
			for scan.scan(); end < scan.end && len(scan.token) > 2; scan.scan() {
				end = scan.end
			}
			// TODO: check key value validity
			if bytes.Compare(key, last) != 1 || scan.err != nil {
				// We have an invalid key or the keys are not sorted.
				// Start scanning keys from scratch and reorder.
				p := attrEnd + 1
				scan.next = p
				keys := [][]byte{}
				for scan.scan(); len(scan.token) == 2; {
					keyStart := scan.start
					end = scan.end
					for scan.scan(); end < scan.end && len(scan.token) > 2; scan.scan() {
						end = scan.end
					}
					keys = append(keys, scan.b[keyStart:end])
				}
				sort.Stable(bytesSort{keys, 2})
				if n := len(keys); n > 0 {
					k := 0
					for i := 1; i < n; i++ {
						if !bytes.Equal(keys[k][:2], keys[i][:2]) {
							k++
							keys[k] = keys[i]
						} else if !bytes.Equal(keys[k], keys[i]) {
							scan.setError(ErrDuplicateKey)
						}
					}
					keys = keys[:k+1]
				}
				reordered := bytes.Join(keys, separator)
				if e := p + len(reordered); e < end {
					scan.deleteRange(e, end)
					end = e
				}
				copy(scan.b[p:], reordered)
				break
			}
		}
	case 't': // https://www.ietf.org/rfc/rfc6497.txt
		scan.scan()
		if n := len(scan.token); n >= 2 && n <= 3 && isAlpha(scan.token[1]) {
			_, end = parseTag(scan, false)
			scan.toLower(start, end)
		}
		for len(scan.token) == 2 && !isAlpha(scan.token[1]) {
			end = scan.acceptMinSize(3)
		}
	case 'x':
		end = scan.acceptMinSize(1)
	default:
		end = scan.acceptMinSize(2)
	}
	return end
}

// getExtension returns the name, body and end position of the extension.
func getExtension(s string, p int) (end int, ext string) {
	if s[p] == '-' {
		p++
	}
	if s[p] == 'x' {
		return len(s), s[p:]
	}
	end = nextExtension(s, p)
	return end, s[p:end]
}

// nextExtension finds the next extension within the string, searching
// for the -<char>- pattern from position p.
// In the fast majority of cases, language tags will have at most
// one extension and extensions tend to be small.
func nextExtension(s string, p int) int {
	for n := len(s) - 3; p < n; {
		if s[p] == '-' {
			if s[p+2] == '-' {
				return p
			}
			p += 3
		} else {
			p++
		}
	}
	return len(s)
}
   07070100000F26000081A4000000000000000000000001645E367C00026134000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/text/internal/language/tables.go  // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.

package language

import "golang.org/x/text/internal/tag"

// CLDRVersion is the CLDR version from which the tables in this package are derived.
const CLDRVersion = "32"

const NumLanguages = 8752

const NumScripts = 258

const NumRegions = 357

type FromTo struct {
	From uint16
	To   uint16
}

const nonCanonicalUnd = 1201
const (
	_af  = 22
	_am  = 39
	_ar  = 58
	_az  = 88
	_bg  = 126
	_bn  = 165
	_ca  = 215
	_cs  = 250
	_da  = 257
	_de  = 269
	_el  = 310
	_en  = 313
	_es  = 318
	_et  = 320
	_fa  = 328
	_fi  = 337
	_fil = 339
	_fr  = 350
	_gu  = 420
	_he  = 444
	_hi  = 446
	_hr  = 465
	_hu  = 469
	_hy  = 471
	_id  = 481
	_is  = 504
	_it  = 505
	_ja  = 512
	_ka  = 528
	_kk  = 578
	_km  = 586
	_kn  = 593
	_ko  = 596
	_ky  = 650
	_lo  = 696
	_lt  = 704
	_lv  = 711
	_mk  = 767
	_ml  = 772
	_mn  = 779
	_mo  = 784
	_mr  = 795
	_ms  = 799
	_mul = 806
	_my  = 817
	_nb  = 839
	_ne  = 849
	_nl  = 871
	_no  = 879
	_pa  = 925
	_pl  = 947
	_pt  = 960
	_ro  = 988
	_ru  = 994
	_sh  = 1031
	_si  = 1036
	_sk  = 1042
	_sl  = 1046
	_sq  = 1073
	_sr  = 1074
	_sv  = 1092
	_sw  = 1093
	_ta  = 1104
	_te  = 1121
	_th  = 1131
	_tl  = 1146
	_tn  = 1152
	_tr  = 1162
	_uk  = 1198
	_ur  = 1204
	_uz  = 1212
	_vi  = 1219
	_zh  = 1321
	_zu  = 1327
	_jbo = 515
	_ami = 1650
	_bnn = 2357
	_hak = 438
	_tlh = 14467
	_lb  = 661
	_nv  = 899
	_pwn = 12055
	_tao = 14188
	_tay = 14198
	_tsu = 14662
	_nn  = 874
	_sfb = 13629
	_vgt = 15701
	_sgg = 13660
	_cmn = 3007
	_nan = 835
	_hsn = 467
)

const langPrivateStart = 0x2f72

const langPrivateEnd = 0x3179

// lang holds an alphabetically sorted list of ISO-639 language identifiers.
// All entries are 4 bytes. The index of the identifier (divided by 4) is the language tag.
// For 2-byte language identifiers, the two successive bytes have the following meaning:
//   - if the first letter of the 2- and 3-letter ISO codes are the same:
//     the second and third letter of the 3-letter ISO code.
//   - otherwise: a 0 and a by 2 bits right-shifted index into altLangISO3.
//
// For 3-byte language identifiers the 4th byte is 0.
const lang tag.Index = "" + // Size: 5324 bytes
	"---\x00aaaraai\x00aak\x00aau\x00abbkabi\x00abq\x00abr\x00abt\x00aby\x00a" +
	"cd\x00ace\x00ach\x00ada\x00ade\x00adj\x00ady\x00adz\x00aeveaeb\x00aey" +
	"\x00affragc\x00agd\x00agg\x00agm\x00ago\x00agq\x00aha\x00ahl\x00aho\x00a" +
	"jg\x00akkaakk\x00ala\x00ali\x00aln\x00alt\x00ammhamm\x00amn\x00amo\x00am" +
	"p\x00anrganc\x00ank\x00ann\x00any\x00aoj\x00aom\x00aoz\x00apc\x00apd\x00" +
	"ape\x00apr\x00aps\x00apz\x00arraarc\x00arh\x00arn\x00aro\x00arq\x00ars" +
	"\x00ary\x00arz\x00assmasa\x00ase\x00asg\x00aso\x00ast\x00ata\x00atg\x00a" +
	"tj\x00auy\x00avvaavl\x00avn\x00avt\x00avu\x00awa\x00awb\x00awo\x00awx" +
	"\x00ayymayb\x00azzebaakbal\x00ban\x00bap\x00bar\x00bas\x00bav\x00bax\x00" +
	"bba\x00bbb\x00bbc\x00bbd\x00bbj\x00bbp\x00bbr\x00bcf\x00bch\x00bci\x00bc" +
	"m\x00bcn\x00bco\x00bcq\x00bcu\x00bdd\x00beelbef\x00beh\x00bej\x00bem\x00" +
	"bet\x00bew\x00bex\x00bez\x00bfd\x00bfq\x00bft\x00bfy\x00bgulbgc\x00bgn" +
	"\x00bgx\x00bhihbhb\x00bhg\x00bhi\x00bhk\x00bhl\x00bho\x00bhy\x00biisbib" +
	"\x00big\x00bik\x00bim\x00bin\x00bio\x00biq\x00bjh\x00bji\x00bjj\x00bjn" +
	"\x00bjo\x00bjr\x00bjt\x00bjz\x00bkc\x00bkm\x00bkq\x00bku\x00bkv\x00blt" +
	"\x00bmambmh\x00bmk\x00bmq\x00bmu\x00bnenbng\x00bnm\x00bnp\x00boodboj\x00" +
	"bom\x00bon\x00bpy\x00bqc\x00bqi\x00bqp\x00bqv\x00brrebra\x00brh\x00brx" +
	"\x00brz\x00bsosbsj\x00bsq\x00bss\x00bst\x00bto\x00btt\x00btv\x00bua\x00b" +
	"uc\x00bud\x00bug\x00buk\x00bum\x00buo\x00bus\x00buu\x00bvb\x00bwd\x00bwr" +
	"\x00bxh\x00bye\x00byn\x00byr\x00bys\x00byv\x00byx\x00bza\x00bze\x00bzf" +
	"\x00bzh\x00bzw\x00caatcan\x00cbj\x00cch\x00ccp\x00ceheceb\x00cfa\x00cgg" +
	"\x00chhachk\x00chm\x00cho\x00chp\x00chr\x00cja\x00cjm\x00cjv\x00ckb\x00c" +
	"kl\x00cko\x00cky\x00cla\x00cme\x00cmg\x00cooscop\x00cps\x00crrecrh\x00cr" +
	"j\x00crk\x00crl\x00crm\x00crs\x00csescsb\x00csw\x00ctd\x00cuhucvhvcyymda" +
	"andad\x00daf\x00dag\x00dah\x00dak\x00dar\x00dav\x00dbd\x00dbq\x00dcc\x00" +
	"ddn\x00deeuded\x00den\x00dga\x00dgh\x00dgi\x00dgl\x00dgr\x00dgz\x00dia" +
	"\x00dje\x00dnj\x00dob\x00doi\x00dop\x00dow\x00dri\x00drs\x00dsb\x00dtm" +
	"\x00dtp\x00dts\x00dty\x00dua\x00duc\x00dud\x00dug\x00dvivdva\x00dww\x00d" +
	"yo\x00dyu\x00dzzodzg\x00ebu\x00eeweefi\x00egl\x00egy\x00eka\x00eky\x00el" +
	"llema\x00emi\x00enngenn\x00enq\x00eopoeri\x00es\x00\x05esu\x00etstetr" +
	"\x00ett\x00etu\x00etx\x00euusewo\x00ext\x00faasfaa\x00fab\x00fag\x00fai" +
	"\x00fan\x00ffulffi\x00ffm\x00fiinfia\x00fil\x00fit\x00fjijflr\x00fmp\x00" +
	"foaofod\x00fon\x00for\x00fpe\x00fqs\x00frrafrc\x00frp\x00frr\x00frs\x00f" +
	"ub\x00fud\x00fue\x00fuf\x00fuh\x00fuq\x00fur\x00fuv\x00fuy\x00fvr\x00fyr" +
	"ygalegaa\x00gaf\x00gag\x00gah\x00gaj\x00gam\x00gan\x00gaw\x00gay\x00gba" +
	"\x00gbf\x00gbm\x00gby\x00gbz\x00gcr\x00gdlagde\x00gdn\x00gdr\x00geb\x00g" +
	"ej\x00gel\x00gez\x00gfk\x00ggn\x00ghs\x00gil\x00gim\x00gjk\x00gjn\x00gju" +
	"\x00gkn\x00gkp\x00gllgglk\x00gmm\x00gmv\x00gnrngnd\x00gng\x00god\x00gof" +
	"\x00goi\x00gom\x00gon\x00gor\x00gos\x00got\x00grb\x00grc\x00grt\x00grw" +
	"\x00gsw\x00guujgub\x00guc\x00gud\x00gur\x00guw\x00gux\x00guz\x00gvlvgvf" +
	"\x00gvr\x00gvs\x00gwc\x00gwi\x00gwt\x00gyi\x00haauhag\x00hak\x00ham\x00h" +
	"aw\x00haz\x00hbb\x00hdy\x00heebhhy\x00hiinhia\x00hif\x00hig\x00hih\x00hi" +
	"l\x00hla\x00hlu\x00hmd\x00hmt\x00hnd\x00hne\x00hnj\x00hnn\x00hno\x00homo" +
	"hoc\x00hoj\x00hot\x00hrrvhsb\x00hsn\x00htathuunhui\x00hyyehzerianaian" +
	"\x00iar\x00iba\x00ibb\x00iby\x00ica\x00ich\x00idndidd\x00idi\x00idu\x00i" +
	"eleife\x00igboigb\x00ige\x00iiiiijj\x00ikpkikk\x00ikt\x00ikw\x00ikx\x00i" +
	"lo\x00imo\x00inndinh\x00iodoiou\x00iri\x00isslittaiukuiw\x00\x03iwm\x00i" +
	"ws\x00izh\x00izi\x00japnjab\x00jam\x00jbo\x00jbu\x00jen\x00jgk\x00jgo" +
	"\x00ji\x00\x06jib\x00jmc\x00jml\x00jra\x00jut\x00jvavjwavkaatkaa\x00kab" +
	"\x00kac\x00kad\x00kai\x00kaj\x00kam\x00kao\x00kbd\x00kbm\x00kbp\x00kbq" +
	"\x00kbx\x00kby\x00kcg\x00kck\x00kcl\x00kct\x00kde\x00kdh\x00kdl\x00kdt" +
	"\x00kea\x00ken\x00kez\x00kfo\x00kfr\x00kfy\x00kgonkge\x00kgf\x00kgp\x00k" +
	"ha\x00khb\x00khn\x00khq\x00khs\x00kht\x00khw\x00khz\x00kiikkij\x00kiu" +
	"\x00kiw\x00kjuakjd\x00kjg\x00kjs\x00kjy\x00kkazkkc\x00kkj\x00klalkln\x00" +
	"klq\x00klt\x00klx\x00kmhmkmb\x00kmh\x00kmo\x00kms\x00kmu\x00kmw\x00knank" +
	"nf\x00knp\x00koorkoi\x00kok\x00kol\x00kos\x00koz\x00kpe\x00kpf\x00kpo" +
	"\x00kpr\x00kpx\x00kqb\x00kqf\x00kqs\x00kqy\x00kraukrc\x00kri\x00krj\x00k" +
	"rl\x00krs\x00kru\x00ksasksb\x00ksd\x00ksf\x00ksh\x00ksj\x00ksr\x00ktb" +
	"\x00ktm\x00kto\x00kuurkub\x00kud\x00kue\x00kuj\x00kum\x00kun\x00kup\x00k" +
	"us\x00kvomkvg\x00kvr\x00kvx\x00kw\x00\x01kwj\x00kwo\x00kxa\x00kxc\x00kxm" +
	"\x00kxp\x00kxw\x00kxz\x00kyirkye\x00kyx\x00kzr\x00laatlab\x00lad\x00lag" +
	"\x00lah\x00laj\x00las\x00lbtzlbe\x00lbu\x00lbw\x00lcm\x00lcp\x00ldb\x00l" +
	"ed\x00lee\x00lem\x00lep\x00leq\x00leu\x00lez\x00lguglgg\x00liimlia\x00li" +
	"d\x00lif\x00lig\x00lih\x00lij\x00lis\x00ljp\x00lki\x00lkt\x00lle\x00lln" +
	"\x00lmn\x00lmo\x00lmp\x00lninlns\x00lnu\x00loaoloj\x00lok\x00lol\x00lor" +
	"\x00los\x00loz\x00lrc\x00ltitltg\x00luublua\x00luo\x00luy\x00luz\x00lvav" +
	"lwl\x00lzh\x00lzz\x00mad\x00maf\x00mag\x00mai\x00mak\x00man\x00mas\x00ma" +
	"w\x00maz\x00mbh\x00mbo\x00mbq\x00mbu\x00mbw\x00mci\x00mcp\x00mcq\x00mcr" +
	"\x00mcu\x00mda\x00mde\x00mdf\x00mdh\x00mdj\x00mdr\x00mdx\x00med\x00mee" +
	"\x00mek\x00men\x00mer\x00met\x00meu\x00mfa\x00mfe\x00mfn\x00mfo\x00mfq" +
	"\x00mglgmgh\x00mgl\x00mgo\x00mgp\x00mgy\x00mhahmhi\x00mhl\x00mirimif\x00" +
	"min\x00mis\x00miw\x00mkkdmki\x00mkl\x00mkp\x00mkw\x00mlalmle\x00mlp\x00m" +
	"ls\x00mmo\x00mmu\x00mmx\x00mnonmna\x00mnf\x00mni\x00mnw\x00moolmoa\x00mo" +
	"e\x00moh\x00mos\x00mox\x00mpp\x00mps\x00mpt\x00mpx\x00mql\x00mrarmrd\x00" +
	"mrj\x00mro\x00mssamtltmtc\x00mtf\x00mti\x00mtr\x00mua\x00mul\x00mur\x00m" +
	"us\x00mva\x00mvn\x00mvy\x00mwk\x00mwr\x00mwv\x00mxc\x00mxm\x00myyamyk" +
	"\x00mym\x00myv\x00myw\x00myx\x00myz\x00mzk\x00mzm\x00mzn\x00mzp\x00mzw" +
	"\x00mzz\x00naaunac\x00naf\x00nah\x00nak\x00nan\x00nap\x00naq\x00nas\x00n" +
	"bobnca\x00nce\x00ncf\x00nch\x00nco\x00ncu\x00nddendc\x00nds\x00neepneb" +
	"\x00new\x00nex\x00nfr\x00ngdonga\x00ngb\x00ngl\x00nhb\x00nhe\x00nhw\x00n" +
	"if\x00nii\x00nij\x00nin\x00niu\x00niy\x00niz\x00njo\x00nkg\x00nko\x00nll" +
	"dnmg\x00nmz\x00nnnonnf\x00nnh\x00nnk\x00nnm\x00noornod\x00noe\x00non\x00" +
	"nop\x00nou\x00nqo\x00nrblnrb\x00nsk\x00nsn\x00nso\x00nss\x00ntm\x00ntr" +
	"\x00nui\x00nup\x00nus\x00nuv\x00nux\x00nvavnwb\x00nxq\x00nxr\x00nyyanym" +
	"\x00nyn\x00nzi\x00occiogc\x00ojjiokr\x00okv\x00omrmong\x00onn\x00ons\x00" +
	"opm\x00orrioro\x00oru\x00osssosa\x00ota\x00otk\x00ozm\x00paanpag\x00pal" +
	"\x00pam\x00pap\x00pau\x00pbi\x00pcd\x00pcm\x00pdc\x00pdt\x00ped\x00peo" +
	"\x00pex\x00pfl\x00phl\x00phn\x00pilipil\x00pip\x00pka\x00pko\x00plolpla" +
	"\x00pms\x00png\x00pnn\x00pnt\x00pon\x00ppo\x00pra\x00prd\x00prg\x00psusp" +
	"ss\x00ptorptp\x00puu\x00pwa\x00quuequc\x00qug\x00rai\x00raj\x00rao\x00rc" +
	"f\x00rej\x00rel\x00res\x00rgn\x00rhg\x00ria\x00rif\x00rjs\x00rkt\x00rmoh" +
	"rmf\x00rmo\x00rmt\x00rmu\x00rnunrna\x00rng\x00roonrob\x00rof\x00roo\x00r" +
	"ro\x00rtm\x00ruusrue\x00rug\x00rw\x00\x04rwk\x00rwo\x00ryu\x00saansaf" +
	"\x00sah\x00saq\x00sas\x00sat\x00sav\x00saz\x00sba\x00sbe\x00sbp\x00scrds" +
	"ck\x00scl\x00scn\x00sco\x00scs\x00sdndsdc\x00sdh\x00semesef\x00seh\x00se" +
	"i\x00ses\x00sgagsga\x00sgs\x00sgw\x00sgz\x00sh\x00\x02shi\x00shk\x00shn" +
	"\x00shu\x00siinsid\x00sig\x00sil\x00sim\x00sjr\x00sklkskc\x00skr\x00sks" +
	"\x00sllvsld\x00sli\x00sll\x00sly\x00smmosma\x00smi\x00smj\x00smn\x00smp" +
	"\x00smq\x00sms\x00snnasnc\x00snk\x00snp\x00snx\x00sny\x00soomsok\x00soq" +
	"\x00sou\x00soy\x00spd\x00spl\x00sps\x00sqqisrrpsrb\x00srn\x00srr\x00srx" +
	"\x00ssswssd\x00ssg\x00ssy\x00stotstk\x00stq\x00suunsua\x00sue\x00suk\x00" +
	"sur\x00sus\x00svweswwaswb\x00swc\x00swg\x00swp\x00swv\x00sxn\x00sxw\x00s" +
	"yl\x00syr\x00szl\x00taamtaj\x00tal\x00tan\x00taq\x00tbc\x00tbd\x00tbf" +
	"\x00tbg\x00tbo\x00tbw\x00tbz\x00tci\x00tcy\x00tdd\x00tdg\x00tdh\x00teelt" +
	"ed\x00tem\x00teo\x00tet\x00tfi\x00tggktgc\x00tgo\x00tgu\x00thhathl\x00th" +
	"q\x00thr\x00tiirtif\x00tig\x00tik\x00tim\x00tio\x00tiv\x00tkuktkl\x00tkr" +
	"\x00tkt\x00tlgltlf\x00tlx\x00tly\x00tmh\x00tmy\x00tnsntnh\x00toontof\x00" +
	"tog\x00toq\x00tpi\x00tpm\x00tpz\x00tqo\x00trurtru\x00trv\x00trw\x00tssot" +
	"sd\x00tsf\x00tsg\x00tsj\x00tsw\x00ttatttd\x00tte\x00ttj\x00ttr\x00tts" +
	"\x00ttt\x00tuh\x00tul\x00tum\x00tuq\x00tvd\x00tvl\x00tvu\x00twwitwh\x00t" +
	"wq\x00txg\x00tyahtya\x00tyv\x00tzm\x00ubu\x00udm\x00ugiguga\x00ukkruli" +
	"\x00umb\x00und\x00unr\x00unx\x00urrduri\x00urt\x00urw\x00usa\x00utr\x00u" +
	"vh\x00uvl\x00uzzbvag\x00vai\x00van\x00veenvec\x00vep\x00viievic\x00viv" +
	"\x00vls\x00vmf\x00vmw\x00voolvot\x00vro\x00vun\x00vut\x00walnwae\x00waj" +
	"\x00wal\x00wan\x00war\x00wbp\x00wbq\x00wbr\x00wci\x00wer\x00wgi\x00whg" +
	"\x00wib\x00wiu\x00wiv\x00wja\x00wji\x00wls\x00wmo\x00wnc\x00wni\x00wnu" +
	"\x00woolwob\x00wos\x00wrs\x00wsk\x00wtm\x00wuu\x00wuv\x00wwa\x00xav\x00x" +
	"bi\x00xcr\x00xes\x00xhhoxla\x00xlc\x00xld\x00xmf\x00xmn\x00xmr\x00xna" +
	"\x00xnr\x00xog\x00xon\x00xpr\x00xrb\x00xsa\x00xsi\x00xsm\x00xsr\x00xwe" +
	"\x00yam\x00yao\x00yap\x00yas\x00yat\x00yav\x00yay\x00yaz\x00yba\x00ybb" +
	"\x00yby\x00yer\x00ygr\x00ygw\x00yiidyko\x00yle\x00ylg\x00yll\x00yml\x00y" +
	"ooryon\x00yrb\x00yre\x00yrl\x00yss\x00yua\x00yue\x00yuj\x00yut\x00yuw" +
	"\x00zahazag\x00zbl\x00zdj\x00zea\x00zgh\x00zhhozhx\x00zia\x00zlm\x00zmi" +
	"\x00zne\x00zuulzxx\x00zza\x00\xff\xff\xff\xff"

const langNoIndexOffset = 1330

// langNoIndex is a bit vector of all 3-letter language codes that are not used as an index
// in lookup tables. The language ids for these language codes are derived directly
// from the letters and are not consecutive.
// Size: 2197 bytes, 2197 elements
var langNoIndex = [2197]uint8{
	// Entry 0 - 3F
	0xff, 0xf8, 0xed, 0xfe, 0xeb, 0xd3, 0x3b, 0xd2,
	0xfb, 0xbf, 0x7a, 0xfa, 0x37, 0x1d, 0x3c, 0x57,
	0x6e, 0x97, 0x73, 0x38, 0xfb, 0xea, 0xbf, 0x70,
	0xad, 0x03, 0xff, 0xff, 0xcf, 0x05, 0x84, 0x62,
	0xe9, 0xbf, 0xfd, 0xbf, 0xbf, 0xf7, 0xfd, 0x77,
	0x0f, 0xff, 0xef, 0x6f, 0xff, 0xfb, 0xdf, 0xe2,
	0xc9, 0xf8, 0x7f, 0x7e, 0x4d, 0xbc, 0x0a, 0x6a,
	0x7c, 0xea, 0xe3, 0xfa, 0x7a, 0xbf, 0x67, 0xff,
	// Entry 40 - 7F
	0xff, 0xff, 0xff, 0xdf, 0x2a, 0x54, 0x91, 0xc0,
	0x5d, 0xe3, 0x97, 0x14, 0x07, 0x20, 0xdd, 0xed,
	0x9f, 0x3f, 0xc9, 0x21, 0xf8, 0x3f, 0x94, 0x35,
	0x7c, 0x5f, 0xff, 0x5f, 0x8e, 0x6e, 0xdf, 0xff,
	0xff, 0xff, 0x55, 0x7c, 0xd3, 0xfd, 0xbf, 0xb5,
	0x7b, 0xdf, 0x7f, 0xf7, 0xca, 0xfe, 0xdb, 0xa3,
	0xa8, 0xff, 0x1f, 0x67, 0x7d, 0xeb, 0xef, 0xce,
	0xff, 0xff, 0x9f, 0xff, 0xb7, 0xef, 0xfe, 0xcf,
	// Entry 80 - BF
	0xdb, 0xff, 0xf3, 0xcd, 0xfb, 0x6f, 0xff, 0xff,
	0xbb, 0xee, 0xf7, 0xbd, 0xdb, 0xff, 0x5f, 0xf7,
	0xfd, 0xf2, 0xfd, 0xff, 0x5e, 0x2f, 0x3b, 0xba,
	0x7e, 0xff, 0xff, 0xfe, 0xf7, 0xff, 0xdd, 0xff,
	0xfd, 0xdf, 0xfb, 0xfe, 0x9d, 0xb4, 0xd3, 0xff,
	0xef, 0xff, 0xdf, 0xf7, 0x7f, 0xb7, 0xfd, 0xd5,
	0xa5, 0x77, 0x40, 0xff, 0x9c, 0xc1, 0x41, 0x2c,
	0x08, 0x21, 0x41, 0x00, 0x50, 0x40, 0x00, 0x80,
	// Entry C0 - FF
	0xfb, 0x4a, 0xf2, 0x9f, 0xb4, 0x42, 0x41, 0x96,
	0x1b, 0x14, 0x08, 0xf3, 0x2b, 0xe7, 0x17, 0x56,
	0x05, 0x7d, 0x0e, 0x1c, 0x37, 0x7b, 0xf3, 0xef,
	0x97, 0xff, 0x5d, 0x38, 0x64, 0x08, 0x00, 0x10,
	0xbc, 0x85, 0xaf, 0xdf, 0xff, 0xff, 0x7b, 0x35,
	0x3e, 0xc7, 0xc7, 0xdf, 0xff, 0x01, 0x81, 0x00,
	0xb0, 0x05, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03,
	0x40, 0x00, 0x40, 0x92, 0x21, 0x50, 0xb1, 0x5d,
	// Entry 100 - 13F
	0xfd, 0xdc, 0xbe, 0x5e, 0x00, 0x00, 0x02, 0x64,
	0x0d, 0x19, 0x41, 0xdf, 0x79, 0x22, 0x00, 0x00,
	0x00, 0x5e, 0x64, 0xdc, 0x24, 0xe5, 0xd9, 0xe3,
	0xfe, 0xff, 0xfd, 0xcb, 0x9f, 0x14, 0x41, 0x0c,
	0x86, 0x00, 0xd1, 0x00, 0xf0, 0xc7, 0x67, 0x5f,
	0x56, 0x99, 0x5e, 0xb5, 0x6c, 0xaf, 0x03, 0x00,
	0x02, 0x00, 0x00, 0x00, 0xc0, 0x37, 0xda, 0x56,
	0x90, 0x69, 0x01, 0x2c, 0x96, 0x69, 0x20, 0xfb,
	// Entry 140 - 17F
	0xff, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x0c, 0x16,
	0x03, 0x00, 0x00, 0xb0, 0x14, 0x03, 0x50, 0x06,
	0x0a, 0x00, 0x01, 0x00, 0x00, 0x10, 0x11, 0x09,
	0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x10,
	0x00, 0x00, 0x44, 0x00, 0x00, 0x10, 0x00, 0x04,
	0x08, 0x00, 0x00, 0x05, 0x00, 0x80, 0x28, 0x04,
	0x00, 0x00, 0x40, 0xd5, 0x2d, 0x00, 0x64, 0x35,
	0x24, 0x52, 0xf4, 0xd5, 0xbf, 0x62, 0xc9, 0x03,
	// Entry 180 - 1BF
	0x00, 0x80, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x04, 0x13, 0x39, 0x01, 0xdd, 0x57, 0x98,
	0x21, 0x18, 0x81, 0x00, 0x00, 0x01, 0x40, 0x82,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x01, 0x40, 0x00, 0x44, 0x00, 0x00, 0x80, 0xea,
	0xa9, 0x39, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
	// Entry 1C0 - 1FF
	0x00, 0x03, 0x28, 0x05, 0x00, 0x00, 0x00, 0x00,
	0x04, 0x20, 0x04, 0xa6, 0x00, 0x04, 0x00, 0x00,
	0x81, 0x50, 0x00, 0x00, 0x00, 0x11, 0x84, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x55,
	0x02, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x40,
	0x30, 0x83, 0x01, 0x00, 0x00, 0x00, 0x11, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x1e, 0xcd, 0xbf, 0x7a, 0xbf,
	// Entry 200 - 23F
	0xdf, 0xc3, 0x83, 0x82, 0xc0, 0xfb, 0x57, 0x27,
	0xed, 0x55, 0xe7, 0x01, 0x00, 0x20, 0xb2, 0xc5,
	0xa4, 0x45, 0x25, 0x9b, 0x02, 0xdf, 0xe1, 0xdf,
	0x03, 0x44, 0x08, 0x90, 0x01, 0x04, 0x81, 0xe3,
	0x92, 0x54, 0xdb, 0x28, 0xd3, 0x5f, 0xfe, 0x6d,
	0x79, 0xed, 0x1c, 0x7d, 0x04, 0x08, 0x00, 0x01,
	0x21, 0x12, 0x64, 0x5f, 0xdd, 0x0e, 0x85, 0x4f,
	0x40, 0x40, 0x00, 0x04, 0xf1, 0xfd, 0x3d, 0x54,
	// Entry 240 - 27F
	0xe8, 0x03, 0xb4, 0x27, 0x23, 0x0d, 0x00, 0x00,
	0x20, 0x7b, 0x78, 0x02, 0x07, 0x84, 0x00, 0xf0,
	0xbb, 0x7e, 0x5a, 0x00, 0x18, 0x04, 0x81, 0x00,
	0x00, 0x00, 0x80, 0x10, 0x90, 0x1c, 0x01, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x10, 0x40, 0x00, 0x04,
	0x08, 0xa0, 0x70, 0xa5, 0x0c, 0x40, 0x00, 0x00,
	0x91, 0x24, 0x04, 0x68, 0x00, 0x20, 0x70, 0xff,
	0x7b, 0x7f, 0x70, 0x00, 0x05, 0x9b, 0xdd, 0x66,
	// Entry 280 - 2BF
	0x03, 0x00, 0x11, 0x00, 0x00, 0x00, 0x40, 0x05,
	0xb5, 0xb6, 0x80, 0x08, 0x04, 0x00, 0x04, 0x51,
	0xe2, 0xef, 0xfd, 0x3f, 0x05, 0x09, 0x08, 0x05,
	0x40, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
	0x0c, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x60,
	0xe7, 0x48, 0x00, 0x81, 0x20, 0xc0, 0x05, 0x80,
	0x03, 0x00, 0x00, 0x00, 0x8c, 0x50, 0x40, 0x04,
	0x84, 0x47, 0x84, 0x40, 0x20, 0x10, 0x00, 0x20,
	// Entry 2C0 - 2FF
	0x02, 0x50, 0x80, 0x11, 0x00, 0x91, 0x6c, 0xe2,
	0x50, 0x27, 0x1d, 0x11, 0x29, 0x06, 0x59, 0xe9,
	0x33, 0x08, 0x00, 0x20, 0x04, 0x40, 0x10, 0x00,
	0x00, 0x00, 0x50, 0x44, 0x92, 0x49, 0xd6, 0x5d,
	0xa7, 0x81, 0x47, 0x97, 0xfb, 0x00, 0x10, 0x00,
	0x08, 0x00, 0x80, 0x00, 0x40, 0x04, 0x00, 0x01,
	0x02, 0x00, 0x01, 0x40, 0x80, 0x00, 0x00, 0x08,
	0xd8, 0xeb, 0xf6, 0x39, 0xc4, 0x8d, 0x12, 0x00,
	// Entry 300 - 33F
	0x00, 0x0c, 0x04, 0x01, 0x20, 0x20, 0xdd, 0xa0,
	0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
	0x04, 0x10, 0xd0, 0x9d, 0x95, 0x13, 0x04, 0x80,
	0x00, 0x01, 0xd0, 0x16, 0x40, 0x00, 0x10, 0xb0,
	0x10, 0x62, 0x4c, 0xd2, 0x02, 0x01, 0x4a, 0x00,
	0x46, 0x04, 0x00, 0x08, 0x02, 0x00, 0x20, 0x80,
	0x00, 0x80, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00,
	0x00, 0xf0, 0xd8, 0x6f, 0x15, 0x02, 0x08, 0x00,
	// Entry 340 - 37F
	0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01,
	0x00, 0x10, 0x00, 0x00, 0x00, 0xf0, 0x84, 0xe3,
	0xdd, 0xbf, 0xf9, 0xf9, 0x3b, 0x7f, 0x7f, 0xdb,
	0xfd, 0xfc, 0xfe, 0xdf, 0xff, 0xfd, 0xff, 0xf6,
	0xfb, 0xfc, 0xf7, 0x1f, 0xff, 0xb3, 0x6c, 0xff,
	0xd9, 0xad, 0xdf, 0xfe, 0xef, 0xba, 0xdf, 0xff,
	0xff, 0xff, 0xb7, 0xdd, 0x7d, 0xbf, 0xab, 0x7f,
	0xfd, 0xfd, 0xdf, 0x2f, 0x9c, 0xdf, 0xf3, 0x6f,
	// Entry 380 - 3BF
	0xdf, 0xdd, 0xff, 0xfb, 0xee, 0xd2, 0xab, 0x5f,
	0xd5, 0xdf, 0x7f, 0xff, 0xeb, 0xff, 0xe4, 0x4d,
	0xf9, 0xff, 0xfe, 0xf7, 0xfd, 0xdf, 0xfb, 0xbf,
	0xee, 0xdb, 0x6f, 0xef, 0xff, 0x7f, 0xff, 0xff,
	0xf7, 0x5f, 0xd3, 0x3b, 0xfd, 0xd9, 0xdf, 0xeb,
	0xbc, 0x08, 0x05, 0x24, 0xff, 0x07, 0x70, 0xfe,
	0xe6, 0x5e, 0x00, 0x08, 0x00, 0x83, 0x3d, 0x1b,
	0x06, 0xe6, 0x72, 0x60, 0xd1, 0x3c, 0x7f, 0x44,
	// Entry 3C0 - 3FF
	0x02, 0x30, 0x9f, 0x7a, 0x16, 0xbd, 0x7f, 0x57,
	0xf2, 0xff, 0x31, 0xff, 0xf2, 0x1e, 0x90, 0xf7,
	0xf1, 0xf9, 0x45, 0x80, 0x01, 0x02, 0x00, 0x00,
	0x40, 0x54, 0x9f, 0x8a, 0xdb, 0xf9, 0x2e, 0x11,
	0x86, 0x51, 0xc0, 0xf3, 0xfb, 0x47, 0x40, 0x01,
	0x05, 0xd1, 0x50, 0x5c, 0x00, 0x40, 0x00, 0x10,
	0x04, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x17, 0xd2,
	0xb9, 0xfd, 0xfc, 0xba, 0xfe, 0xef, 0xc7, 0xbe,
	// Entry 400 - 43F
	0x53, 0x6f, 0xdf, 0xe7, 0xdb, 0x65, 0xbb, 0x7f,
	0xfa, 0xff, 0x77, 0xf3, 0xef, 0xbf, 0xfd, 0xf7,
	0xdf, 0xdf, 0x9b, 0x7f, 0xff, 0xff, 0x7f, 0x6f,
	0xf7, 0xfb, 0xeb, 0xdf, 0xbc, 0xff, 0xbf, 0x6b,
	0x7b, 0xfb, 0xff, 0xce, 0x76, 0xbd, 0xf7, 0xf7,
	0xdf, 0xdc, 0xf7, 0xf7, 0xff, 0xdf, 0xf3, 0xfe,
	0xef, 0xff, 0xff, 0xff, 0xb6, 0x7f, 0x7f, 0xde,
	0xf7, 0xb9, 0xeb, 0x77, 0xff, 0xfb, 0xbf, 0xdf,
	// Entry 440 - 47F
	0xfd, 0xfe, 0xfb, 0xff, 0xfe, 0xeb, 0x1f, 0x7d,
	0x2f, 0xfd, 0xb6, 0xb5, 0xa5, 0xfc, 0xff, 0xfd,
	0x7f, 0x4e, 0xbf, 0x8f, 0xae, 0xff, 0xee, 0xdf,
	0x7f, 0xf7, 0x73, 0x02, 0x02, 0x04, 0xfc, 0xf7,
	0xff, 0xb7, 0xd7, 0xef, 0xfe, 0xcd, 0xf5, 0xce,
	0xe2, 0x8e, 0xe7, 0xbf, 0xb7, 0xff, 0x56, 0xfd,
	0xcd, 0xff, 0xfb, 0xff, 0xdf, 0xd7, 0xea, 0xff,
	0xe5, 0x5f, 0x6d, 0x0f, 0xa7, 0x51, 0x06, 0xc4,
	// Entry 480 - 4BF
	0x93, 0x50, 0x5d, 0xaf, 0xa6, 0xff, 0x99, 0xfb,
	0x63, 0x1d, 0x53, 0xff, 0xef, 0xb7, 0x35, 0x20,
	0x14, 0x00, 0x55, 0x51, 0x82, 0x65, 0xf5, 0x41,
	0xe2, 0xff, 0xfc, 0xdf, 0x02, 0x05, 0xc5, 0x05,
	0x00, 0x22, 0x00, 0x74, 0x69, 0x10, 0x08, 0x05,
	0x41, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x51, 0x20, 0x05, 0x04, 0x01, 0x00, 0x00,
	0x06, 0x01, 0x20, 0x00, 0x18, 0x01, 0x92, 0xf1,
	// Entry 4C0 - 4FF
	0xfd, 0x47, 0x69, 0x06, 0x95, 0x06, 0x57, 0xed,
	0xfb, 0x4d, 0x1c, 0x6b, 0x83, 0x04, 0x62, 0x40,
	0x00, 0x11, 0x42, 0x00, 0x00, 0x00, 0x54, 0x83,
	0xb8, 0x4f, 0x10, 0x8e, 0x89, 0x46, 0xde, 0xf7,
	0x13, 0x31, 0x00, 0x20, 0x00, 0x00, 0x00, 0x90,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x10, 0x00,
	0x01, 0x00, 0x00, 0xf0, 0x5b, 0xf4, 0xbe, 0x3d,
	0xbe, 0xcf, 0xf7, 0xaf, 0x42, 0x04, 0x84, 0x41,
	// Entry 500 - 53F
	0x30, 0xff, 0x79, 0x72, 0x04, 0x00, 0x00, 0x49,
	0x2d, 0x14, 0x27, 0x57, 0xed, 0xf1, 0x3f, 0xe7,
	0x3f, 0x00, 0x00, 0x02, 0xc6, 0xa0, 0x1e, 0xf8,
	0xbb, 0xff, 0xfd, 0xfb, 0xb7, 0xfd, 0xe7, 0xf7,
	0xfd, 0xfc, 0xd5, 0xed, 0x47, 0xf4, 0x7e, 0x10,
	0x01, 0x01, 0x84, 0x6d, 0xff, 0xf7, 0xdd, 0xf9,
	0x5b, 0x05, 0x86, 0xed, 0xf5, 0x77, 0xbd, 0x3c,
	0x00, 0x00, 0x00, 0x42, 0x71, 0x42, 0x00, 0x40,
	// Entry 540 - 57F
	0x00, 0x00, 0x01, 0x43, 0x19, 0x00, 0x08, 0x00,
	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
	// Entry 580 - 5BF
	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
	0xff, 0xab, 0xbd, 0xe7, 0x57, 0xee, 0x13, 0x5d,
	0x09, 0xc1, 0x40, 0x21, 0xfa, 0x17, 0x01, 0x80,
	0x00, 0x00, 0x00, 0x00, 0xf0, 0xce, 0xfb, 0xbf,
	0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
	0x00, 0x30, 0x15, 0xa3, 0x10, 0x00, 0x00, 0x00,
	0x11, 0x04, 0x16, 0x00, 0x00, 0x02, 0x00, 0x81,
	0xa3, 0x01, 0x50, 0x00, 0x00, 0x83, 0x11, 0x40,
	// Entry 5C0 - 5FF
	0x00, 0x00, 0x00, 0xf0, 0xdd, 0x7b, 0x3e, 0x02,
	0xaa, 0x10, 0x5d, 0x98, 0x52, 0x00, 0x80, 0x20,
	0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x02, 0x02,
	0x19, 0x00, 0x10, 0x02, 0x10, 0x61, 0x5a, 0x9d,
	0x31, 0x00, 0x00, 0x00, 0x01, 0x18, 0x02, 0x20,
	0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x20, 0x00,
	0x00, 0x1f, 0xdf, 0xd2, 0xb9, 0xff, 0xfd, 0x3f,
	0x1f, 0x98, 0xcf, 0x9c, 0xff, 0xaf, 0x5f, 0xfe,
	// Entry 600 - 63F
	0x7b, 0x4b, 0x40, 0x10, 0xe1, 0xfd, 0xaf, 0xd9,
	0xb7, 0xf6, 0xfb, 0xb3, 0xc7, 0xff, 0x6f, 0xf1,
	0x73, 0xb1, 0x7f, 0x9f, 0x7f, 0xbd, 0xfc, 0xb7,
	0xee, 0x1c, 0xfa, 0xcb, 0xef, 0xdd, 0xf9, 0xbd,
	0x6e, 0xae, 0x55, 0xfd, 0x6e, 0x81, 0x76, 0x9f,
	0xd4, 0x77, 0xf5, 0x7d, 0xfb, 0xff, 0xeb, 0xfe,
	0xbe, 0x5f, 0x46, 0x5b, 0xe9, 0x5f, 0x50, 0x18,
	0x02, 0xfa, 0xf7, 0x9d, 0x15, 0x97, 0x05, 0x0f,
	// Entry 640 - 67F
	0x75, 0xc4, 0x7d, 0x81, 0x92, 0xf5, 0x57, 0x6c,
	0xff, 0xe4, 0xef, 0x6f, 0xff, 0xfc, 0xdd, 0xde,
	0xfc, 0xfd, 0x76, 0x5f, 0x7a, 0x3f, 0x00, 0x98,
	0x02, 0xfb, 0xa3, 0xef, 0xf3, 0xd6, 0xf2, 0xff,
	0xb9, 0xda, 0x7d, 0xd0, 0x3e, 0x15, 0x7b, 0xb4,
	0xf5, 0x3e, 0xff, 0xff, 0xf1, 0xf7, 0xff, 0xe7,
	0x5f, 0xff, 0xff, 0x9e, 0xdb, 0xf6, 0xd7, 0xb9,
	0xef, 0x27, 0x80, 0xbb, 0xc5, 0xff, 0xff, 0xe3,
	// Entry 680 - 6BF
	0x97, 0x9d, 0xbf, 0x9f, 0xf7, 0xc7, 0xfd, 0x37,
	0xce, 0x7f, 0x04, 0x1d, 0x73, 0x7f, 0xf8, 0xda,
	0x5d, 0xce, 0x7d, 0x06, 0xb9, 0xea, 0x79, 0xa0,
	0x1a, 0x20, 0x00, 0x30, 0x02, 0x04, 0x24, 0x08,
	0x04, 0x00, 0x00, 0x40, 0xd4, 0x02, 0x04, 0x00,
	0x00, 0x04, 0x00, 0x04, 0x00, 0x20, 0x01, 0x06,
	0x50, 0x00, 0x08, 0x00, 0x00, 0x00, 0x24, 0x00,
	0x04, 0x00, 0x10, 0xdc, 0x58, 0xd7, 0x0d, 0x0f,
	// Entry 6C0 - 6FF
	0x14, 0x4d, 0xf1, 0x16, 0x44, 0xd5, 0x42, 0x08,
	0x40, 0x00, 0x00, 0x40, 0x00, 0x08, 0x00, 0x00,
	0x00, 0xdc, 0xfb, 0xcb, 0x0e, 0x58, 0x48, 0x41,
	0x24, 0x20, 0x04, 0x00, 0x30, 0x12, 0x40, 0x00,
	0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x01, 0x00, 0x00, 0x00, 0x80, 0x10, 0x10, 0xab,
	0x6d, 0x93, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x80, 0x80, 0x25, 0x00, 0x00,
	// Entry 700 - 73F
	0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
	0x80, 0x86, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x01,
	0xff, 0x18, 0x02, 0x00, 0x02, 0xf0, 0xfd, 0x79,
	0x3b, 0x00, 0x25, 0x00, 0x00, 0x00, 0x02, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
	0x03, 0x00, 0x09, 0x20, 0x00, 0x00, 0x01, 0x00,
	0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	// Entry 740 - 77F
	0x00, 0x00, 0x00, 0xef, 0xd5, 0xfd, 0xcf, 0x7e,
	0xb0, 0x11, 0x00, 0x00, 0x00, 0x92, 0x01, 0x44,
	0xcd, 0xf9, 0x5c, 0x00, 0x01, 0x00, 0x30, 0x04,
	0x04, 0x55, 0x00, 0x01, 0x04, 0xf4, 0x3f, 0x4a,
	0x01, 0x00, 0x00, 0xb0, 0x80, 0x20, 0x55, 0x75,
	0x97, 0x7c, 0xdf, 0x31, 0xcc, 0x68, 0xd1, 0x03,
	0xd5, 0x57, 0x27, 0x14, 0x01, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x2c, 0xf7, 0xcb, 0x1f, 0x14, 0x60,
	// Entry 780 - 7BF
	0x03, 0x68, 0x01, 0x10, 0x8b, 0x38, 0x8a, 0x01,
	0x00, 0x00, 0x20, 0x00, 0x24, 0x44, 0x00, 0x00,
	0x10, 0x03, 0x11, 0x02, 0x01, 0x00, 0x00, 0xf0,
	0xf5, 0xff, 0xd5, 0x97, 0xbc, 0x70, 0xd6, 0x78,
	0x78, 0x15, 0x50, 0x01, 0xa4, 0x84, 0xa9, 0x41,
	0x00, 0x00, 0x00, 0x6b, 0x39, 0x52, 0x74, 0x00,
	0xe8, 0x30, 0x90, 0x6a, 0x92, 0x00, 0x00, 0x02,
	0xff, 0xef, 0xff, 0x4b, 0x85, 0x53, 0xf4, 0xed,
	// Entry 7C0 - 7FF
	0xdd, 0xbf, 0xf2, 0x5d, 0xc7, 0x0c, 0xd5, 0x42,
	0xfc, 0xff, 0xf7, 0x1f, 0x00, 0x80, 0x40, 0x56,
	0xcc, 0x16, 0x9e, 0xea, 0x35, 0x7d, 0xef, 0xff,
	0xbd, 0xa4, 0xaf, 0x01, 0x44, 0x18, 0x01, 0x4d,
	0x4e, 0x4a, 0x08, 0x50, 0x28, 0x30, 0xe0, 0x80,
	0x10, 0x20, 0x24, 0x00, 0xff, 0x2f, 0xd3, 0x60,
	0xfe, 0x01, 0x02, 0x88, 0x0a, 0x40, 0x16, 0x01,
	0x01, 0x15, 0x2b, 0x3c, 0x01, 0x00, 0x00, 0x10,
	// Entry 800 - 83F
	0x90, 0x49, 0x41, 0x02, 0x02, 0x01, 0xe1, 0xbf,
	0xbf, 0x03, 0x00, 0x00, 0x10, 0xd4, 0xa3, 0xd1,
	0x40, 0x9c, 0x44, 0xdf, 0xf5, 0x8f, 0x66, 0xb3,
	0x55, 0x20, 0xd4, 0xc1, 0xd8, 0x30, 0x3d, 0x80,
	0x00, 0x00, 0x00, 0x04, 0xd4, 0x11, 0xc5, 0x84,
	0x2f, 0x50, 0x00, 0x22, 0x50, 0x6e, 0xbd, 0x93,
	0x07, 0x00, 0x20, 0x10, 0x84, 0xb2, 0x45, 0x10,
	0x06, 0x44, 0x00, 0x00, 0x12, 0x02, 0x11, 0x00,
	// Entry 840 - 87F
	0xf0, 0xfb, 0xfd, 0x7f, 0x05, 0x00, 0x16, 0x81,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02,
	0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x02, 0x28,
	0x84, 0x00, 0x21, 0xc0, 0x23, 0x24, 0x00, 0x00,
	0x00, 0xcb, 0xe4, 0x3a, 0x46, 0x88, 0x14, 0xf1,
	0xef, 0xff, 0x7f, 0x12, 0x01, 0x01, 0x84, 0x50,
	0x07, 0xfc, 0xff, 0xff, 0x0f, 0x01, 0x00, 0x40,
	0x10, 0x38, 0x01, 0x01, 0x1c, 0x12, 0x40, 0xe1,
	// Entry 880 - 8BF
	0x76, 0x16, 0x08, 0x03, 0x10, 0x00, 0x00, 0x00,
	0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x24,
	0x0a, 0x00, 0x80, 0x00, 0x00,
}

// altLangISO3 holds an alphabetically sorted list of 3-letter language code alternatives
// to 2-letter language codes that cannot be derived using the method described above.
// Each 3-letter code is followed by its 1-byte langID.
const altLangISO3 tag.Index = "---\x00cor\x00hbs\x01heb\x02kin\x03spa\x04yid\x05\xff\xff\xff\xff"

// altLangIndex is used to convert indexes in altLangISO3 to langIDs.
// Size: 12 bytes, 6 elements
var altLangIndex = [6]uint16{
	0x0281, 0x0407, 0x01fb, 0x03e5, 0x013e, 0x0208,
}

// AliasMap maps langIDs to their suggested replacements.
// Size: 716 bytes, 179 elements
var AliasMap = [179]FromTo{
	0:   {From: 0x82, To: 0x88},
	1:   {From: 0x187, To: 0x1ae},
	2:   {From: 0x1f3, To: 0x1e1},
	3:   {From: 0x1fb, To: 0x1bc},
	4:   {From: 0x208, To: 0x512},
	5:   {From: 0x20f, To: 0x20e},
	6:   {From: 0x310, To: 0x3dc},
	7:   {From: 0x347, To: 0x36f},
	8:   {From: 0x407, To: 0x432},
	9:   {From: 0x47a, To: 0x153},
	10:  {From: 0x490, To: 0x451},
	11:  {From: 0x4a2, To: 0x21},
	12:  {From: 0x53e, To: 0x544},
	13:  {From: 0x58f, To: 0x12d},
	14:  {From: 0x630, To: 0x1eb1},
	15:  {From: 0x651, To: 0x431},
	16:  {From: 0x662, To: 0x431},
	17:  {From: 0x6ed, To: 0x3a},
	18:  {From: 0x6f8, To: 0x1d7},
	19:  {From: 0x709, To: 0x3625},
	20:  {From: 0x73e, To: 0x21a1},
	21:  {From: 0x7b3, To: 0x56},
	22:  {From: 0x7b9, To: 0x299b},
	23:  {From: 0x7c5, To: 0x58},
	24:  {From: 0x7e6, To: 0x145},
	25:  {From: 0x80c, To: 0x5a},
	26:  {From: 0x815, To: 0x8d},
	27:  {From: 0x87e, To: 0x810},
	28:  {From: 0x8a8, To: 0x8b7},
	29:  {From: 0x8c3, To: 0xee3},
	30:  {From: 0x8fa, To: 0x1dc},
	31:  {From: 0x9ef, To: 0x331},
	32:  {From: 0xa36, To: 0x2c5},
	33:  {From: 0xa3d, To: 0xbf},
	34:  {From: 0xabe, To: 0x3322},
	35:  {From: 0xb38, To: 0x529},
	36:  {From: 0xb75, To: 0x265a},
	37:  {From: 0xb7e, To: 0xbc3},
	38:  {From: 0xb9b, To: 0x44e},
	39:  {From: 0xbbc, To: 0x4229},
	40:  {From: 0xbbf, To: 0x529},
	41:  {From: 0xbfe, To: 0x2da7},
	42:  {From: 0xc2e, To: 0x3181},
	43:  {From: 0xcb9, To: 0xf3},
	44:  {From: 0xd08, To: 0xfa},
	45:  {From: 0xdc8, To: 0x11a},
	46:  {From: 0xdd7, To: 0x32d},
	47:  {From: 0xdf8, To: 0xdfb},
	48:  {From: 0xdfe, To: 0x531},
	49:  {From: 0xe01, To: 0xdf3},
	50:  {From: 0xedf, To: 0x205a},
	51:  {From: 0xee9, To: 0x222e},
	52:  {From: 0xeee, To: 0x2e9a},
	53:  {From: 0xf39, To: 0x367},
	54:  {From: 0x10d0, To: 0x140},
	55:  {From: 0x1104, To: 0x2d0},
	56:  {From: 0x11a0, To: 0x1ec},
	57:  {From: 0x1279, To: 0x21},
	58:  {From: 0x1424, To: 0x15e},
	59:  {From: 0x1470, To: 0x14e},
	60:  {From: 0x151f, To: 0xd9b},
	61:  {From: 0x1523, To: 0x390},
	62:  {From: 0x1532, To: 0x19f},
	63:  {From: 0x1580, To: 0x210},
	64:  {From: 0x1583, To: 0x10d},
	65:  {From: 0x15a3, To: 0x3caf},
	66:  {From: 0x1630, To: 0x222e},
	67:  {From: 0x166a, To: 0x19b},
	68:  {From: 0x16c8, To: 0x136},
	69:  {From: 0x1700, To: 0x29f8},
	70:  {From: 0x1718, To: 0x194},
	71:  {From: 0x1727, To: 0xf3f},
	72:  {From: 0x177a, To: 0x178},
	73:  {From: 0x1809, To: 0x17b6},
	74:  {From: 0x1816, To: 0x18f3},
	75:  {From: 0x188a, To: 0x436},
	76:  {From: 0x1979, To: 0x1d01},
	77:  {From: 0x1a74, To: 0x2bb0},
	78:  {From: 0x1a8a, To: 0x1f8},
	79:  {From: 0x1b5a, To: 0x1fa},
	80:  {From: 0x1b86, To: 0x1515},
	81:  {From: 0x1d64, To: 0x2c9b},
	82:  {From: 0x2038, To: 0x37b1},
	83:  {From: 0x203d, To: 0x20dd},
	84:  {From: 0x205a, To: 0x30b},
	85:  {From: 0x20e3, To: 0x274},
	86:  {From: 0x20ee, To: 0x263},
	87:  {From: 0x20f2, To: 0x22d},
	88:  {From: 0x20f9, To: 0x256},
	89:  {From: 0x210f, To: 0x21eb},
	90:  {From: 0x2135, To: 0x27d},
	91:  {From: 0x2160, To: 0x913},
	92:  {From: 0x2199, To: 0x121},
	93:  {From: 0x21ce, To: 0x1561},
	94:  {From: 0x21e6, To: 0x504},
	95:  {From: 0x21f4, To: 0x49f},
	96:  {From: 0x21fb, To: 0x269},
	97:  {From: 0x222d, To: 0x121},
	98:  {From: 0x2237, To: 0x121},
	99:  {From: 0x2262, To: 0x92a},
	100: {From: 0x2316, To: 0x3226},
	101: {From: 0x236a, To: 0x2835},
	102: {From: 0x2382, To: 0x3365},
	103: {From: 0x2472, To: 0x2c7},
	104: {From: 0x24e4, To: 0x2ff},
	105: {From: 0x24f0, To: 0x2fa},
	106: {From: 0x24fa, To: 0x31f},
	107: {From: 0x2550, To: 0xb5b},
	108: {From: 0x25a9, To: 0xe2},
	109: {From: 0x263e, To: 0x2d0},
	110: {From: 0x26c9, To: 0x26b4},
	111: {From: 0x26f9, To: 0x3c8},
	112: {From: 0x2727, To: 0x3caf},
	113: {From: 0x2755, To: 0x6a4},
	114: {From: 0x2765, To: 0x26b4},
	115: {From: 0x2789, To: 0x4358},
	116: {From: 0x27c9, To: 0x2001},
	117: {From: 0x28ea, To: 0x27b1},
	118: {From: 0x28ef, To: 0x2837},
	119: {From: 0x2914, To: 0x351},
	120: {From: 0x2986, To: 0x2da7},
	121: {From: 0x29f0, To: 0x96b},
	122: {From: 0x2b1a, To: 0x38d},
	123: {From: 0x2bfc, To: 0x395},
	124: {From: 0x2c3f, To: 0x3caf},
	125: {From: 0x2ce1, To: 0x2201},
	126: {From: 0x2cfc, To: 0x3be},
	127: {From: 0x2d13, To: 0x597},
	128: {From: 0x2d47, To: 0x148},
	129: {From: 0x2d48, To: 0x148},
	130: {From: 0x2dff, To: 0x2f1},
	131: {From: 0x2e08, To: 0x19cc},
	132: {From: 0x2e1a, To: 0x2d95},
	133: {From: 0x2e21, To: 0x292},
	134: {From: 0x2e54, To: 0x7d},
	135: {From: 0x2e65, To: 0x2282},
	136: {From: 0x2ea0, To: 0x2e9b},
	137: {From: 0x2eef, To: 0x2ed7},
	138: {From: 0x3193, To: 0x3c4},
	139: {From: 0x3366, To: 0x338e},
	140: {From: 0x342a, To: 0x3dc},
	141: {From: 0x34ee, To: 0x18d0},
	142: {From: 0x35c8, To: 0x2c9b},
	143: {From: 0x35e6, To: 0x412},
	144: {From: 0x3658, To: 0x246},
	145: {From: 0x3676, To: 0x3f4},
	146: {From: 0x36fd, To: 0x445},
	147: {From: 0x37c0, To: 0x121},
	148: {From: 0x3816, To: 0x38f2},
	149: {From: 0x382a, To: 0x2b48},
	150: {From: 0x382b, To: 0x2c9b},
	151: {From: 0x382f, To: 0xa9},
	152: {From: 0x3832, To: 0x3228},
	153: {From: 0x386c, To: 0x39a6},
	154: {From: 0x3892, To: 0x3fc0},
	155: {From: 0x38a5, To: 0x39d7},
	156: {From: 0x38b4, To: 0x1fa4},
	157: {From: 0x38b5, To: 0x2e9a},
	158: {From: 0x395c, To: 0x47e},
	159: {From: 0x3b4e, To: 0xd91},
	160: {From: 0x3b78, To: 0x137},
	161: {From: 0x3c99, To: 0x4bc},
	162: {From: 0x3fbd, To: 0x100},
	163: {From: 0x4208, To: 0xa91},
	164: {From: 0x42be, To: 0x573},
	165: {From: 0x42f9, To: 0x3f60},
	166: {From: 0x4378, To: 0x25a},
	167: {From: 0x43b8, To: 0xe6c},
	168: {From: 0x43cd, To: 0x10f},
	169: {From: 0x44af, To: 0x3322},
	170: {From: 0x44e3, To: 0x512},
	171: {From: 0x45ca, To: 0x2409},
	172: {From: 0x45dd, To: 0x26dc},
	173: {From: 0x4610, To: 0x48ae},
	174: {From: 0x46ae, To: 0x46a0},
	175: {From: 0x473e, To: 0x4745},
	176: {From: 0x4817, To: 0x3503},
	177: {From: 0x4916, To: 0x31f},
	178: {From: 0x49a7, To: 0x523},
}

// Size: 179 bytes, 179 elements
var AliasTypes = [179]AliasType{
	// Entry 0 - 3F
	1, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 1, 0, 0, 1, 2,
	1, 1, 2, 0, 0, 1, 0, 1, 2, 1, 1, 0, 0, 0, 0, 2,
	1, 1, 0, 2, 0, 0, 1, 0, 1, 0, 0, 1, 2, 1, 1, 1,
	1, 0, 0, 0, 0, 2, 1, 1, 1, 1, 2, 1, 0, 1, 1, 2,
	// Entry 40 - 7F
	2, 0, 0, 1, 2, 0, 1, 0, 1, 1, 1, 1, 0, 0, 2, 1,
	0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
	0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 2, 0, 1, 1, 0, 1,
	0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0,
	// Entry 80 - BF
	2, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 2, 0, 0, 2,
	1, 1, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 1,
	0, 1, 2, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1,
	0, 1, 1,
}

const (
	_Latn = 90
	_Hani = 57
	_Hans = 59
	_Hant = 60
	_Qaaa = 147
	_Qaai = 155
	_Qabx = 196
	_Zinh = 252
	_Zyyy = 257
	_Zzzz = 258
)

// script is an alphabetically sorted list of ISO 15924 codes. The index
// of the script in the string, divided by 4, is the internal scriptID.
const script tag.Index = "" + // Size: 1040 bytes
	"----AdlmAfakAghbAhomArabAranArmiArmnAvstBaliBamuBassBatkBengBhksBlisBopo" +
	"BrahBraiBugiBuhdCakmCansCariChamCherChrsCirtCoptCpmnCprtCyrlCyrsDevaDiak" +
	"DogrDsrtDuplEgydEgyhEgypElbaElymEthiGeokGeorGlagGongGonmGothGranGrekGujr" +
	"GuruHanbHangHaniHanoHansHantHatrHebrHiraHluwHmngHmnpHrktHungIndsItalJamo" +
	"JavaJpanJurcKaliKanaKharKhmrKhojKitlKitsKndaKoreKpelKthiLanaLaooLatfLatg" +
	"LatnLekeLepcLimbLinaLinbLisuLomaLyciLydiMahjMakaMandManiMarcMayaMedfMend" +
	"MercMeroMlymModiMongMoonMrooMteiMultMymrNandNarbNbatNewaNkdbNkgbNkooNshu" +
	"OgamOlckOrkhOryaOsgeOsmaOugrPalmPaucPcunPelmPermPhagPhliPhlpPhlvPhnxPiqd" +
	"PlrdPrtiPsinQaaaQaabQaacQaadQaaeQaafQaagQaahQaaiQaajQaakQaalQaamQaanQaao" +
	"QaapQaaqQaarQaasQaatQaauQaavQaawQaaxQaayQaazQabaQabbQabcQabdQabeQabfQabg" +
	"QabhQabiQabjQabkQablQabmQabnQaboQabpQabqQabrQabsQabtQabuQabvQabwQabxRanj" +
	"RjngRohgRoroRunrSamrSaraSarbSaurSgnwShawShrdShuiSiddSindSinhSogdSogoSora" +
	"SoyoSundSyloSyrcSyreSyrjSyrnTagbTakrTaleTaluTamlTangTavtTeluTengTfngTglg" +
	"ThaaThaiTibtTirhTnsaTotoUgarVaiiVispVithWaraWchoWoleXpeoXsuxYeziYiiiZanb" +
	"ZinhZmthZsyeZsymZxxxZyyyZzzz\xff\xff\xff\xff"

// suppressScript is an index from langID to the dominant script for that language,
// if it exists.  If a script is given, it should be suppressed from the language tag.
// Size: 1330 bytes, 1330 elements
var suppressScript = [1330]uint8{
	// Entry 0 - 3F
	0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
	// Entry 40 - 7F
	0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
	// Entry 80 - BF
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	// Entry C0 - FF
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00,
	// Entry 100 - 13F
	0x5a, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0xea, 0x00, 0x00, 0x00, 0x00, 0xec, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00,
	0x00, 0x5a, 0x00, 0x00, 0x5a, 0x00, 0x5a, 0x00,
	// Entry 140 - 17F
	0x5a, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00,
	0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00,
	0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00,
	0x00, 0x5a, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x5a, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	// Entry 180 - 1BF
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x5a, 0x35, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x22, 0x00,
	// Entry 1C0 - 1FF
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x5a, 0x5a, 0x00, 0x5a, 0x5a, 0x00, 0x08,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00,
	0x5a, 0x5a, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00,
	// Entry 200 - 23F
	0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	// Entry 240 - 27F
	0x00, 0x00, 0x20, 0x00, 0x00, 0x5a, 0x00, 0x00,
	0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x52, 0x00, 0x00, 0x53, 0x00, 0x22, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	// Entry 280 - 2BF
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00,
	0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	// Entry 2C0 - 2FF
	0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
	// Entry 300 - 33F
	0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x5a,
	0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00,
	// Entry 340 - 37F
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00,
	0x5a, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a,
	0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x5a,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x5a, 0x00,
	0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00,
	// Entry 380 - 3BF
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x5a, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
	// Entry 3C0 - 3FF
	0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00,
	0x00, 0x5a, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x20, 0x00, 0x00, 0x5a, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	// Entry 400 - 43F
	0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00,
	0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a,
	0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00,
	// Entry 440 - 47F
	0x00, 0x00, 0x00, 0x00, 0x5a, 0x5a, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0xe6, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0xeb, 0x00, 0x00, 0x00, 0x2c,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a,
	0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00,
	// Entry 480 - 4BF
	0x5a, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00,
	0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	// Entry 4C0 - 4FF
	0x5a, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	// Entry 500 - 53F
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a,
	0x00, 0x00,
}

const (
	_001 = 1
	_419 = 31
	_BR  = 65
	_CA  = 73
	_ES  = 110
	_GB  = 123
	_MD  = 188
	_PT  = 238
	_UK  = 306
	_US  = 309
	_ZZ  = 357
	_XA  = 323
	_XC  = 325
	_XK  = 333
)

// isoRegionOffset needs to be added to the index of regionISO to obtain the regionID
// for 2-letter ISO codes. (The first isoRegionOffset regionIDs are reserved for
// the UN.M49 codes used for groups.)
const isoRegionOffset = 32

// regionTypes defines the status of a region for various standards.
// Size: 358 bytes, 358 elements
var regionTypes = [358]uint8{
	// Entry 0 - 3F
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
	// Entry 40 - 7F
	0x06, 0x06, 0x06, 0x06, 0x04, 0x06, 0x06, 0x06,
	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
	0x06, 0x06, 0x06, 0x06, 0x06, 0x04, 0x06, 0x04,
	0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x04,
	0x06, 0x04, 0x06, 0x06, 0x06, 0x06, 0x00, 0x06,
	0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
	0x06, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00,
	0x06, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
	// Entry 80 - BF
	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
	0x06, 0x06, 0x06, 0x00, 0x04, 0x06, 0x06, 0x06,
	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
	0x06, 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06,
	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
	// Entry C0 - FF
	0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00,
	0x06, 0x06, 0x06, 0x06, 0x00, 0x06, 0x04, 0x06,
	0x06, 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06,
	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00,
	0x06, 0x06, 0x00, 0x06, 0x05, 0x05, 0x05, 0x05,
	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
	// Entry 100 - 13F
	0x05, 0x05, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06,
	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x04, 0x06,
	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
	0x06, 0x06, 0x02, 0x06, 0x04, 0x06, 0x06, 0x06,
	0x06, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06,
	// Entry 140 - 17F
	0x06, 0x00, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05,
	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
	0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x06, 0x06,
	0x04, 0x06, 0x06, 0x04, 0x06, 0x05,
}

// regionISO holds a list of alphabetically sorted 2-letter ISO region codes.
// Each 2-letter codes is followed by two bytes with the following meaning:
//   - [A-Z}{2}: the first letter of the 2-letter code plus these two
//     letters form the 3-letter ISO code.
//   - 0, n:     index into altRegionISO3.
const regionISO tag.Index = "" + // Size: 1308 bytes
	"AAAAACSCADNDAEREAFFGAGTGAIIAALLBAMRMANNTAOGOAQTAARRGASSMATUTAUUSAWBWAXLA" +
	"AZZEBAIHBBRBBDGDBEELBFFABGGRBHHRBIDIBJENBLLMBMMUBNRNBOOLBQESBRRABSHSBTTN" +
	"BUURBVVTBWWABYLRBZLZCAANCCCKCDODCFAFCGOGCHHECIIVCKOKCLHLCMMRCNHNCOOLCPPT" +
	"CRRICS\x00\x00CTTECUUBCVPVCWUWCXXRCYYPCZZEDDDRDEEUDGGADJJIDKNKDMMADOOMDY" +
	"HYDZZAEA  ECCUEESTEGGYEHSHERRIESSPETTHEU\x00\x03EZ  FIINFJJIFKLKFMSMFORO" +
	"FQ\x00\x18FRRAFXXXGAABGBBRGDRDGEEOGFUFGGGYGHHAGIIBGLRLGMMBGNINGPLPGQNQGR" +
	"RCGS\x00\x06GTTMGUUMGWNBGYUYHKKGHMMDHNNDHRRVHTTIHUUNHVVOIC  IDDNIERLILSR" +
	"IMMNINNDIOOTIQRQIRRNISSLITTAJEEYJMAMJOORJPPNJTTNKEENKGGZKHHMKIIRKM\x00" +
	"\x09KNNAKP\x00\x0cKRORKWWTKY\x00\x0fKZAZLAAOLBBNLCCALIIELKKALRBRLSSOLTTU" +
	"LUUXLVVALYBYMAARMCCOMDDAMENEMFAFMGDGMHHLMIIDMKKDMLLIMMMRMNNGMOACMPNPMQTQ" +
	"MRRTMSSRMTLTMUUSMVDVMWWIMXEXMYYSMZOZNAAMNCCLNEERNFFKNGGANHHBNIICNLLDNOOR" +
	"NPPLNQ\x00\x1eNRRUNTTZNUIUNZZLOMMNPAANPCCIPEERPFYFPGNGPHHLPKAKPLOLPM\x00" +
	"\x12PNCNPRRIPSSEPTRTPUUSPWLWPYRYPZCZQAATQMMMQNNNQOOOQPPPQQQQQRRRQSSSQTTT" +
	"QU\x00\x03QVVVQWWWQXXXQYYYQZZZREEURHHOROOURS\x00\x15RUUSRWWASAAUSBLBSCYC" +
	"SDDNSEWESGGPSHHNSIVNSJJMSKVKSLLESMMRSNENSOOMSRURSSSDSTTPSUUNSVLVSXXMSYYR" +
	"SZWZTAAATCCATDCDTF\x00\x18TGGOTHHATJJKTKKLTLLSTMKMTNUNTOONTPMPTRURTTTOTV" +
	"UVTWWNTZZAUAKRUGGAUK  UMMIUN  USSAUYRYUZZBVAATVCCTVDDRVEENVGGBVIIRVNNMVU" +
	"UTWFLFWKAKWSSMXAAAXBBBXCCCXDDDXEEEXFFFXGGGXHHHXIIIXJJJXKKKXLLLXMMMXNNNXO" +
	"OOXPPPXQQQXRRRXSSSXTTTXUUUXVVVXWWWXXXXXYYYXZZZYDMDYEEMYT\x00\x1bYUUGZAAF" +
	"ZMMBZRARZWWEZZZZ\xff\xff\xff\xff"

// altRegionISO3 holds a list of 3-letter region codes that cannot be
// mapped to 2-letter codes using the default algorithm. This is a short list.
const altRegionISO3 string = "SCGQUUSGSCOMPRKCYMSPMSRBATFMYTATN"

// altRegionIDs holds a list of regionIDs the positions of which match those
// of the 3-letter ISO codes in altRegionISO3.
// Size: 22 bytes, 11 elements
var altRegionIDs = [11]uint16{
	0x0057, 0x0070, 0x0088, 0x00a8, 0x00aa, 0x00ad, 0x00ea, 0x0105,
	0x0121, 0x015f, 0x00dc,
}

// Size: 80 bytes, 20 elements
var regionOldMap = [20]FromTo{
	0:  {From: 0x44, To: 0xc4},
	1:  {From: 0x58, To: 0xa7},
	2:  {From: 0x5f, To: 0x60},
	3:  {From: 0x66, To: 0x3b},
	4:  {From: 0x79, To: 0x78},
	5:  {From: 0x93, To: 0x37},
	6:  {From: 0xa3, To: 0x133},
	7:  {From: 0xc1, To: 0x133},
	8:  {From: 0xd7, To: 0x13f},
	9:  {From: 0xdc, To: 0x2b},
	10: {From: 0xef, To: 0x133},
	11: {From: 0xf2, To: 0xe2},
	12: {From: 0xfc, To: 0x70},
	13: {From: 0x103, To: 0x164},
	14: {From: 0x12a, To: 0x126},
	15: {From: 0x132, To: 0x7b},
	16: {From: 0x13a, To: 0x13e},
	17: {From: 0x141, To: 0x133},
	18: {From: 0x15d, To: 0x15e},
	19: {From: 0x163, To: 0x4b},
}

// m49 maps regionIDs to UN.M49 codes. The first isoRegionOffset entries are
// codes indicating collections of regions.
// Size: 716 bytes, 358 elements
var m49 = [358]int16{
	// Entry 0 - 3F
	0, 1, 2, 3, 5, 9, 11, 13,
	14, 15, 17, 18, 19, 21, 29, 30,
	34, 35, 39, 53, 54, 57, 61, 142,
	143, 145, 150, 151, 154, 155, 202, 419,
	958, 0, 20, 784, 4, 28, 660, 8,
	51, 530, 24, 10, 32, 16, 40, 36,
	533, 248, 31, 70, 52, 50, 56, 854,
	100, 48, 108, 204, 652, 60, 96, 68,
	// Entry 40 - 7F
	535, 76, 44, 64, 104, 74, 72, 112,
	84, 124, 166, 180, 140, 178, 756, 384,
	184, 152, 120, 156, 170, 0, 188, 891,
	296, 192, 132, 531, 162, 196, 203, 278,
	276, 0, 262, 208, 212, 214, 204, 12,
	0, 218, 233, 818, 732, 232, 724, 231,
	967, 0, 246, 242, 238, 583, 234, 0,
	250, 249, 266, 826, 308, 268, 254, 831,
	// Entry 80 - BF
	288, 292, 304, 270, 324, 312, 226, 300,
	239, 320, 316, 624, 328, 344, 334, 340,
	191, 332, 348, 854, 0, 360, 372, 376,
	833, 356, 86, 368, 364, 352, 380, 832,
	388, 400, 392, 581, 404, 417, 116, 296,
	174, 659, 408, 410, 414, 136, 398, 418,
	422, 662, 438, 144, 430, 426, 440, 442,
	428, 434, 504, 492, 498, 499, 663, 450,
	// Entry C0 - FF
	584, 581, 807, 466, 104, 496, 446, 580,
	474, 478, 500, 470, 480, 462, 454, 484,
	458, 508, 516, 540, 562, 574, 566, 548,
	558, 528, 578, 524, 10, 520, 536, 570,
	554, 512, 591, 0, 604, 258, 598, 608,
	586, 616, 666, 612, 630, 275, 620, 581,
	585, 600, 591, 634, 959, 960, 961, 962,
	963, 964, 965, 966, 967, 968, 969, 970,
	// Entry 100 - 13F
	971, 972, 638, 716, 642, 688, 643, 646,
	682, 90, 690, 729, 752, 702, 654, 705,
	744, 703, 694, 674, 686, 706, 740, 728,
	678, 810, 222, 534, 760, 748, 0, 796,
	148, 260, 768, 764, 762, 772, 626, 795,
	788, 776, 626, 792, 780, 798, 158, 834,
	804, 800, 826, 581, 0, 840, 858, 860,
	336, 670, 704, 862, 92, 850, 704, 548,
	// Entry 140 - 17F
	876, 581, 882, 973, 974, 975, 976, 977,
	978, 979, 980, 981, 982, 983, 984, 985,
	986, 987, 988, 989, 990, 991, 992, 993,
	994, 995, 996, 997, 998, 720, 887, 175,
	891, 710, 894, 180, 716, 999,
}

// m49Index gives indexes into fromM49 based on the three most significant bits
// of a 10-bit UN.M49 code. To search an UN.M49 code in fromM49, search in
//
//	fromM49[m49Index[msb39(code)]:m49Index[msb3(code)+1]]
//
// for an entry where the first 7 bits match the 7 lsb of the UN.M49 code.
// The region code is stored in the 9 lsb of the indexed value.
// Size: 18 bytes, 9 elements
var m49Index = [9]int16{
	0, 59, 108, 143, 181, 220, 259, 291,
	333,
}

// fromM49 contains entries to map UN.M49 codes to regions. See m49Index for details.
// Size: 666 bytes, 333 elements
var fromM49 = [333]uint16{
	// Entry 0 - 3F
	0x0201, 0x0402, 0x0603, 0x0824, 0x0a04, 0x1027, 0x1205, 0x142b,
	0x1606, 0x1867, 0x1a07, 0x1c08, 0x1e09, 0x202d, 0x220a, 0x240b,
	0x260c, 0x2822, 0x2a0d, 0x302a, 0x3825, 0x3a0e, 0x3c0f, 0x3e32,
	0x402c, 0x4410, 0x4611, 0x482f, 0x4e12, 0x502e, 0x5842, 0x6039,
	0x6435, 0x6628, 0x6834, 0x6a13, 0x6c14, 0x7036, 0x7215, 0x783d,
	0x7a16, 0x8043, 0x883f, 0x8c33, 0x9046, 0x9445, 0x9841, 0xa848,
	0xac9a, 0xb509, 0xb93c, 0xc03e, 0xc838, 0xd0c4, 0xd83a, 0xe047,
	0xe8a6, 0xf052, 0xf849, 0x085a, 0x10ad, 0x184c, 0x1c17, 0x1e18,
	// Entry 40 - 7F
	0x20b3, 0x2219, 0x2920, 0x2c1a, 0x2e1b, 0x3051, 0x341c, 0x361d,
	0x3853, 0x3d2e, 0x445c, 0x4c4a, 0x5454, 0x5ca8, 0x5f5f, 0x644d,
	0x684b, 0x7050, 0x7856, 0x7e90, 0x8059, 0x885d, 0x941e, 0x965e,
	0x983b, 0xa063, 0xa864, 0xac65, 0xb469, 0xbd1a, 0xc486, 0xcc6f,
	0xce6f, 0xd06d, 0xd26a, 0xd476, 0xdc74, 0xde88, 0xe473, 0xec72,
	0xf031, 0xf279, 0xf478, 0xfc7e, 0x04e5, 0x0921, 0x0c62, 0x147a,
	0x187d, 0x1c83, 0x26ed, 0x2860, 0x2c5f, 0x3060, 0x4080, 0x4881,
	0x50a7, 0x5887, 0x6082, 0x687c, 0x7085, 0x788a, 0x8089, 0x8884,
	// Entry 80 - BF
	0x908c, 0x9891, 0x9c8e, 0xa138, 0xa88f, 0xb08d, 0xb892, 0xc09d,
	0xc899, 0xd095, 0xd89c, 0xe09b, 0xe896, 0xf097, 0xf89e, 0x004f,
	0x08a0, 0x10a2, 0x1cae, 0x20a1, 0x28a4, 0x30aa, 0x34ab, 0x3cac,
	0x42a5, 0x44af, 0x461f, 0x4cb0, 0x54b5, 0x58b8, 0x5cb4, 0x64b9,
	0x6cb2, 0x70b6, 0x74b7, 0x7cc6, 0x84bf, 0x8cce, 0x94d0, 0x9ccd,
	0xa4c3, 0xaccb, 0xb4c8, 0xbcc9, 0xc0cc, 0xc8cf, 0xd8bb, 0xe0c5,
	0xe4bc, 0xe6bd, 0xe8ca, 0xf0ba, 0xf8d1, 0x00e1, 0x08d2, 0x10dd,
	0x18db, 0x20d9, 0x2429, 0x265b, 0x2a30, 0x2d1b, 0x2e40, 0x30de,
	// Entry C0 - FF
	0x38d3, 0x493f, 0x54e0, 0x5cd8, 0x64d4, 0x6cd6, 0x74df, 0x7cd5,
	0x84da, 0x88c7, 0x8b33, 0x8e75, 0x90c0, 0x92f0, 0x94e8, 0x9ee2,
	0xace6, 0xb0f1, 0xb8e4, 0xc0e7, 0xc8eb, 0xd0e9, 0xd8ee, 0xe08b,
	0xe526, 0xecec, 0xf4f3, 0xfd02, 0x0504, 0x0706, 0x0d07, 0x183c,
	0x1d0e, 0x26a9, 0x2826, 0x2cb1, 0x2ebe, 0x34ea, 0x3d39, 0x4513,
	0x4d18, 0x5508, 0x5d14, 0x6105, 0x650a, 0x6d12, 0x7d0d, 0x7f11,
	0x813e, 0x830f, 0x8515, 0x8d61, 0x9964, 0xa15d, 0xa86e, 0xb117,
	0xb30b, 0xb86c, 0xc10b, 0xc916, 0xd110, 0xd91d, 0xe10c, 0xe84e,
	// Entry 100 - 13F
	0xf11c, 0xf524, 0xf923, 0x0122, 0x0925, 0x1129, 0x192c, 0x2023,
	0x2928, 0x312b, 0x3727, 0x391f, 0x3d2d, 0x4131, 0x4930, 0x4ec2,
	0x5519, 0x646b, 0x747b, 0x7e7f, 0x809f, 0x8298, 0x852f, 0x9135,
	0xa53d, 0xac37, 0xb536, 0xb937, 0xbd3b, 0xd940, 0xe542, 0xed5e,
	0xef5e, 0xf657, 0xfd62, 0x7c20, 0x7ef4, 0x80f5, 0x82f6, 0x84f7,
	0x86f8, 0x88f9, 0x8afa, 0x8cfb, 0x8e70, 0x90fd, 0x92fe, 0x94ff,
	0x9700, 0x9901, 0x9b43, 0x9d44, 0x9f45, 0xa146, 0xa347, 0xa548,
	0xa749, 0xa94a, 0xab4b, 0xad4c, 0xaf4d, 0xb14e, 0xb34f, 0xb550,
	// Entry 140 - 17F
	0xb751, 0xb952, 0xbb53, 0xbd54, 0xbf55, 0xc156, 0xc357, 0xc558,
	0xc759, 0xc95a, 0xcb5b, 0xcd5c, 0xcf65,
}

// Size: 2014 bytes
var variantIndex = map[string]uint8{
	"1606nict": 0x0,
	"1694acad": 0x1,
	"1901":     0x2,
	"1959acad": 0x3,
	"1994":     0x61,
	"1996":     0x4,
	"abl1943":  0x5,
	"akuapem":  0x6,
	"alalc97":  0x63,
	"aluku":    0x7,
	"ao1990":   0x8,
	"aranes":   0x9,
	"arevela":  0xa,
	"arevmda":  0xb,
	"arkaika":  0xc,
	"asante":   0xd,
	"auvern":   0xe,
	"baku1926": 0xf,
	"balanka":  0x10,
	"barla":    0x11,
	"basiceng": 0x12,
	"bauddha":  0x13,
	"biscayan": 0x14,
	"biske":    0x5c,
	"bohoric":  0x15,
	"boont":    0x16,
	"bornholm": 0x17,
	"cisaup":   0x18,
	"colb1945": 0x19,
	"cornu":    0x1a,
	"creiss":   0x1b,
	"dajnko":   0x1c,
	"ekavsk":   0x1d,
	"emodeng":  0x1e,
	"fonipa":   0x64,
	"fonkirsh": 0x65,
	"fonnapa":  0x66,
	"fonupa":   0x67,
	"fonxsamp": 0x68,
	"gascon":   0x1f,
	"grclass":  0x20,
	"grital":   0x21,
	"grmistr":  0x22,
	"hepburn":  0x23,
	"heploc":   0x62,
	"hognorsk": 0x24,
	"hsistemo": 0x25,
	"ijekavsk": 0x26,
	"itihasa":  0x27,
	"ivanchov": 0x28,
	"jauer":    0x29,
	"jyutping": 0x2a,
	"kkcor":    0x2b,
	"kociewie": 0x2c,
	"kscor":    0x2d,
	"laukika":  0x2e,
	"lemosin":  0x2f,
	"lengadoc": 0x30,
	"lipaw":    0x5d,
	"luna1918": 0x31,
	"metelko":  0x32,
	"monoton":  0x33,
	"ndyuka":   0x34,
	"nedis":    0x35,
	"newfound": 0x36,
	"nicard":   0x37,
	"njiva":    0x5e,
	"nulik":    0x38,
	"osojs":    0x5f,
	"oxendict": 0x39,
	"pahawh2":  0x3a,
	"pahawh3":  0x3b,
	"pahawh4":  0x3c,
	"pamaka":   0x3d,
	"peano":    0x3e,
	"petr1708": 0x3f,
	"pinyin":   0x40,
	"polyton":  0x41,
	"provenc":  0x42,
	"puter":    0x43,
	"rigik":    0x44,
	"rozaj":    0x45,
	"rumgr":    0x46,
	"scotland": 0x47,
	"scouse":   0x48,
	"simple":   0x69,
	"solba":    0x60,
	"sotav":    0x49,
	"spanglis": 0x4a,
	"surmiran": 0x4b,
	"sursilv":  0x4c,
	"sutsilv":  0x4d,
	"tarask":   0x4e,
	"tongyong": 0x4f,
	"tunumiit": 0x50,
	"uccor":    0x51,
	"ucrcor":   0x52,
	"ulster":   0x53,
	"unifon":   0x54,
	"vaidika":  0x55,
	"valencia": 0x56,
	"vallader": 0x57,
	"vecdruka": 0x58,
	"vivaraup": 0x59,
	"wadegile": 0x5a,
	"xsistemo": 0x5b,
}

// variantNumSpecialized is the number of specialized variants in variants.
const variantNumSpecialized = 99

// nRegionGroups is the number of region groups.
const nRegionGroups = 33

type likelyLangRegion struct {
	lang   uint16
	region uint16
}

// likelyScript is a lookup table, indexed by scriptID, for the most likely
// languages and regions given a script.
// Size: 1040 bytes, 260 elements
var likelyScript = [260]likelyLangRegion{
	1:   {lang: 0x14e, region: 0x84},
	3:   {lang: 0x2a2, region: 0x106},
	4:   {lang: 0x1f, region: 0x99},
	5:   {lang: 0x3a, region: 0x6b},
	7:   {lang: 0x3b, region: 0x9c},
	8:   {lang: 0x1d7, region: 0x28},
	9:   {lang: 0x13, region: 0x9c},
	10:  {lang: 0x5b, region: 0x95},
	11:  {lang: 0x60, region: 0x52},
	12:  {lang: 0xb9, region: 0xb4},
	13:  {lang: 0x63, region: 0x95},
	14:  {lang: 0xa5, region: 0x35},
	15:  {lang: 0x3e9, region: 0x99},
	17:  {lang: 0x529, region: 0x12e},
	18:  {lang: 0x3b1, region: 0x99},
	19:  {lang: 0x15e, region: 0x78},
	20:  {lang: 0xc2, region: 0x95},
	21:  {lang: 0x9d, region: 0xe7},
	22:  {lang: 0xdb, region: 0x35},
	23:  {lang: 0xf3, region: 0x49},
	24:  {lang: 0x4f0, region: 0x12b},
	25:  {lang: 0xe7, region: 0x13e},
	26:  {lang: 0xe5, region: 0x135},
	29:  {lang: 0xf1, region: 0x6b},
	31:  {lang: 0x1a0, region: 0x5d},
	32:  {lang: 0x3e2, region: 0x106},
	34:  {lang: 0x1be, region: 0x99},
	38:  {lang: 0x15e, region: 0x78},
	41:  {lang: 0x133, region: 0x6b},
	42:  {lang: 0x431, region: 0x27},
	44:  {lang: 0x27, region: 0x6f},
	46:  {lang: 0x210, region: 0x7d},
	47:  {lang: 0xfe, region: 0x38},
	49:  {lang: 0x19b, region: 0x99},
	50:  {lang: 0x19e, region: 0x130},
	51:  {lang: 0x3e9, region: 0x99},
	52:  {lang: 0x136, region: 0x87},
	53:  {lang: 0x1a4, region: 0x99},
	54:  {lang: 0x39d, region: 0x99},
	55:  {lang: 0x529, region: 0x12e},
	56:  {lang: 0x254, region: 0xab},
	57:  {lang: 0x529, region: 0x53},
	58:  {lang: 0x1cb, region: 0xe7},
	59:  {lang: 0x529, region: 0x53},
	60:  {lang: 0x529, region: 0x12e},
	61:  {lang: 0x2fd, region: 0x9b},
	62:  {lang: 0x1bc, region: 0x97},
	63:  {lang: 0x200, region: 0xa2},
	64:  {lang: 0x1c5, region: 0x12b},
	65:  {lang: 0x1ca, region: 0xaf},
	68:  {lang: 0x1d5, region: 0x92},
	70:  {lang: 0x142, region: 0x9e},
	71:  {lang: 0x254, region: 0xab},
	72:  {lang: 0x20e, region: 0x95},
	73:  {lang: 0x200, region: 0xa2},
	75:  {lang: 0x135, region: 0xc4},
	76:  {lang: 0x200, region: 0xa2},
	77:  {lang: 0x3bb, region: 0xe8},
	78:  {lang: 0x24a, region: 0xa6},
	79:  {lang: 0x3fa, region: 0x99},
	82:  {lang: 0x251, region: 0x99},
	83:  {lang: 0x254, region: 0xab},
	85:  {lang: 0x88, region: 0x99},
	86:  {lang: 0x370, region: 0x123},
	87:  {lang: 0x2b8, region: 0xaf},
	92:  {lang: 0x29f, region: 0x99},
	93:  {lang: 0x2a8, region: 0x99},
	94:  {lang: 0x28f, region: 0x87},
	95:  {lang: 0x1a0, region: 0x87},
	96:  {lang: 0x2ac, region: 0x53},
	98:  {lang: 0x4f4, region: 0x12b},
	99:  {lang: 0x4f5, region: 0x12b},
	100: {lang: 0x1be, region: 0x99},
	102: {lang: 0x337, region: 0x9c},
	103: {lang: 0x4f7, region: 0x53},
	104: {lang: 0xa9, region: 0x53},
	107: {lang: 0x2e8, region: 0x112},
	108: {lang: 0x4f8, region: 0x10b},
	109: {lang: 0x4f8, region: 0x10b},
	110: {lang: 0x304, region: 0x99},
	111: {lang: 0x31b, region: 0x99},
	112: {lang: 0x30b, region: 0x53},
	114: {lang: 0x31e, region: 0x35},
	115: {lang: 0x30e, region: 0x99},
	116: {lang: 0x414, region: 0xe8},
	117: {lang: 0x331, region: 0xc4},
	119: {lang: 0x4f9, region: 0x108},
	120: {lang: 0x3b, region: 0xa1},
	121: {lang: 0x353, region: 0xdb},
	124: {lang: 0x2d0, region: 0x84},
	125: {lang: 0x52a, region: 0x53},
	126: {lang: 0x403, region: 0x96},
	127: {lang: 0x3ee, region: 0x99},
	128: {lang: 0x39b, region: 0xc5},
	129: {lang: 0x395, region: 0x99},
	130: {lang: 0x399, region: 0x135},
	131: {lang: 0x429, region: 0x115},
	133: {lang: 0x3b, region: 0x11c},
	134: {lang: 0xfd, region: 0xc4},
	137: {lang: 0x27d, region: 0x106},
	138: {lang: 0x2c9, region: 0x53},
	139: {lang: 0x39f, region: 0x9c},
	140: {lang: 0x39f, region: 0x53},
	142: {lang: 0x3ad, region: 0xb0},
	144: {lang: 0x1c6, region: 0x53},
	145: {lang: 0x4fd, region: 0x9c},
	198: {lang: 0x3cb, region: 0x95},
	201: {lang: 0x372, region: 0x10c},
	202: {lang: 0x420, region: 0x97},
	204: {lang: 0x4ff, region: 0x15e},
	205: {lang: 0x3f0, region: 0x99},
	206: {lang: 0x45, region: 0x135},
	207: {lang: 0x139, region: 0x7b},
	208: {lang: 0x3e9, region: 0x99},
	210: {lang: 0x3e9, region: 0x99},
	211: {lang: 0x3fa, region: 0x99},
	212: {lang: 0x40c, region: 0xb3},
	215: {lang: 0x433, region: 0x99},
	216: {lang: 0xef, region: 0xc5},
	217: {lang: 0x43e, region: 0x95},
	218: {lang: 0x44d, region: 0x35},
	219: {lang: 0x44e, region: 0x9b},
	223: {lang: 0x45a, region: 0xe7},
	224: {lang: 0x11a, region: 0x99},
	225: {lang: 0x45e, region: 0x53},
	226: {lang: 0x232, region: 0x53},
	227: {lang: 0x450, region: 0x99},
	228: {lang: 0x4a5, region: 0x53},
	229: {lang: 0x9f, region: 0x13e},
	230: {lang: 0x461, region: 0x99},
	232: {lang: 0x528, region: 0xba},
	233: {lang: 0x153, region: 0xe7},
	234: {lang: 0x128, region: 0xcd},
	235: {lang: 0x46b, region: 0x123},
	236: {lang: 0xa9, region: 0x53},
	237: {lang: 0x2ce, region: 0x99},
	240: {lang: 0x4ad, region: 0x11c},
	241: {lang: 0x4be, region: 0xb4},
	244: {lang: 0x1ce, region: 0x99},
	247: {lang: 0x3a9, region: 0x9c},
	248: {lang: 0x22, region: 0x9b},
	250: {lang: 0x1ea, region: 0x53},
	251: {lang: 0xef, region: 0xc5},
}

type likelyScriptRegion struct {
	region uint16
	script uint16
	flags  uint8
}

// likelyLang is a lookup table, indexed by langID, for the most likely
// scripts and regions given incomplete information. If more entries exist for a
// given language, region and script are the index and size respectively
// of the list in likelyLangList.
// Size: 7980 bytes, 1330 elements
var likelyLang = [1330]likelyScriptRegion{
	0:    {region: 0x135, script: 0x5a, flags: 0x0},
	1:    {region: 0x6f, script: 0x5a, flags: 0x0},
	2:    {region: 0x165, script: 0x5a, flags: 0x0},
	3:    {region: 0x165, script: 0x5a, flags: 0x0},
	4:    {region: 0x165, script: 0x5a, flags: 0x0},
	5:    {region: 0x7d, script: 0x20, flags: 0x0},
	6:    {region: 0x165, script: 0x5a, flags: 0x0},
	7:    {region: 0x165, script: 0x20, flags: 0x0},
	8:    {region: 0x80, script: 0x5a, flags: 0x0},
	9:    {region: 0x165, script: 0x5a, flags: 0x0},
	10:   {region: 0x165, script: 0x5a, flags: 0x0},
	11:   {region: 0x165, script: 0x5a, flags: 0x0},
	12:   {region: 0x95, script: 0x5a, flags: 0x0},
	13:   {region: 0x131, script: 0x5a, flags: 0x0},
	14:   {region: 0x80, script: 0x5a, flags: 0x0},
	15:   {region: 0x165, script: 0x5a, flags: 0x0},
	16:   {region: 0x165, script: 0x5a, flags: 0x0},
	17:   {region: 0x106, script: 0x20, flags: 0x0},
	18:   {region: 0x165, script: 0x5a, flags: 0x0},
	19:   {region: 0x9c, script: 0x9, flags: 0x0},
	20:   {region: 0x128, script: 0x5, flags: 0x0},
	21:   {region: 0x165, script: 0x5a, flags: 0x0},
	22:   {region: 0x161, script: 0x5a, flags: 0x0},
	23:   {region: 0x165, script: 0x5a, flags: 0x0},
	24:   {region: 0x165, script: 0x5a, flags: 0x0},
	25:   {region: 0x165, script: 0x5a, flags: 0x0},
	26:   {region: 0x165, script: 0x5a, flags: 0x0},
	27:   {region: 0x165, script: 0x5a, flags: 0x0},
	28:   {region: 0x52, script: 0x5a, flags: 0x0},
	29:   {region: 0x165, script: 0x5a, flags: 0x0},
	30:   {region: 0x165, script: 0x5a, flags: 0x0},
	31:   {region: 0x99, script: 0x4, flags: 0x0},
	32:   {region: 0x165, script: 0x5a, flags: 0x0},
	33:   {region: 0x80, script: 0x5a, flags: 0x0},
	34:   {region: 0x9b, script: 0xf8, flags: 0x0},
	35:   {region: 0x165, script: 0x5a, flags: 0x0},
	36:   {region: 0x165, script: 0x5a, flags: 0x0},
	37:   {region: 0x14d, script: 0x5a, flags: 0x0},
	38:   {region: 0x106, script: 0x20, flags: 0x0},
	39:   {region: 0x6f, script: 0x2c, flags: 0x0},
	40:   {region: 0x165, script: 0x5a, flags: 0x0},
	41:   {region: 0x165, script: 0x5a, flags: 0x0},
	42:   {region: 0xd6, script: 0x5a, flags: 0x0},
	43:   {region: 0x165, script: 0x5a, flags: 0x0},
	45:   {region: 0x165, script: 0x5a, flags: 0x0},
	46:   {region: 0x165, script: 0x5a, flags: 0x0},
	47:   {region: 0x165, script: 0x5a, flags: 0x0},
	48:   {region: 0x165, script: 0x5a, flags: 0x0},
	49:   {region: 0x165, script: 0x5a, flags: 0x0},
	50:   {region: 0x165, script: 0x5a, flags: 0x0},
	51:   {region: 0x95, script: 0x5a, flags: 0x0},
	52:   {region: 0x165, script: 0x5, flags: 0x0},
	53:   {region: 0x122, script: 0x5, flags: 0x0},
	54:   {region: 0x165, script: 0x5a, flags: 0x0},
	55:   {region: 0x165, script: 0x5a, flags: 0x0},
	56:   {region: 0x165, script: 0x5a, flags: 0x0},
	57:   {region: 0x165, script: 0x5a, flags: 0x0},
	58:   {region: 0x6b, script: 0x5, flags: 0x0},
	59:   {region: 0x0, script: 0x3, flags: 0x1},
	60:   {region: 0x165, script: 0x5a, flags: 0x0},
	61:   {region: 0x51, script: 0x5a, flags: 0x0},
	62:   {region: 0x3f, script: 0x5a, flags: 0x0},
	63:   {region: 0x67, script: 0x5, flags: 0x0},
	65:   {region: 0xba, script: 0x5, flags: 0x0},
	66:   {region: 0x6b, script: 0x5, flags: 0x0},
	67:   {region: 0x99, script: 0xe, flags: 0x0},
	68:   {region: 0x12f, script: 0x5a, flags: 0x0},
	69:   {region: 0x135, script: 0xce, flags: 0x0},
	70:   {region: 0x165, script: 0x5a, flags: 0x0},
	71:   {region: 0x165, script: 0x5a, flags: 0x0},
	72:   {region: 0x6e, script: 0x5a, flags: 0x0},
	73:   {region: 0x165, script: 0x5a, flags: 0x0},
	74:   {region: 0x165, script: 0x5a, flags: 0x0},
	75:   {region: 0x49, script: 0x5a, flags: 0x0},
	76:   {region: 0x165, script: 0x5a, flags: 0x0},
	77:   {region: 0x106, script: 0x20, flags: 0x0},
	78:   {region: 0x165, script: 0x5, flags: 0x0},
	79:   {region: 0x165, script: 0x5a, flags: 0x0},
	80:   {region: 0x165, script: 0x5a, flags: 0x0},
	81:   {region: 0x165, script: 0x5a, flags: 0x0},
	82:   {region: 0x99, script: 0x22, flags: 0x0},
	83:   {region: 0x165, script: 0x5a, flags: 0x0},
	84:   {region: 0x165, script: 0x5a, flags: 0x0},
	85:   {region: 0x165, script: 0x5a, flags: 0x0},
	86:   {region: 0x3f, script: 0x5a, flags: 0x0},
	87:   {region: 0x165, script: 0x5a, flags: 0x0},
	88:   {region: 0x3, script: 0x5, flags: 0x1},
	89:   {region: 0x106, script: 0x20, flags: 0x0},
	90:   {region: 0xe8, script: 0x5, flags: 0x0},
	91:   {region: 0x95, script: 0x5a, flags: 0x0},
	92:   {region: 0xdb, script: 0x22, flags: 0x0},
	93:   {region: 0x2e, script: 0x5a, flags: 0x0},
	94:   {region: 0x52, script: 0x5a, flags: 0x0},
	95:   {region: 0x165, script: 0x5a, flags: 0x0},
	96:   {region: 0x52, script: 0xb, flags: 0x0},
	97:   {region: 0x165, script: 0x5a, flags: 0x0},
	98:   {region: 0x165, script: 0x5a, flags: 0x0},
	99:   {region: 0x95, script: 0x5a, flags: 0x0},
	100:  {region: 0x165, script: 0x5a, flags: 0x0},
	101:  {region: 0x52, script: 0x5a, flags: 0x0},
	102:  {region: 0x165, script: 0x5a, flags: 0x0},
	103:  {region: 0x165, script: 0x5a, flags: 0x0},
	104:  {region: 0x165, script: 0x5a, flags: 0x0},
	105:  {region: 0x165, script: 0x5a, flags: 0x0},
	106:  {region: 0x4f, script: 0x5a, flags: 0x0},
	107:  {region: 0x165, script: 0x5a, flags: 0x0},
	108:  {region: 0x165, script: 0x5a, flags: 0x0},
	109:  {region: 0x165, script: 0x5a, flags: 0x0},
	110:  {region: 0x165, script: 0x2c, flags: 0x0},
	111:  {region: 0x165, script: 0x5a, flags: 0x0},
	112:  {region: 0x165, script: 0x5a, flags: 0x0},
	113:  {region: 0x47, script: 0x20, flags: 0x0},
	114:  {region: 0x165, script: 0x5a, flags: 0x0},
	115:  {region: 0x165, script: 0x5a, flags: 0x0},
	116:  {region: 0x10b, script: 0x5, flags: 0x0},
	117:  {region: 0x162, script: 0x5a, flags: 0x0},
	118:  {region: 0x165, script: 0x5a, flags: 0x0},
	119:  {region: 0x95, script: 0x5a, flags: 0x0},
	120:  {region: 0x165, script: 0x5a, flags: 0x0},
	121:  {region: 0x12f, script: 0x5a, flags: 0x0},
	122:  {region: 0x52, script: 0x5a, flags: 0x0},
	123:  {region: 0x99, script: 0xe3, flags: 0x0},
	124:  {region: 0xe8, script: 0x5, flags: 0x0},
	125:  {region: 0x99, script: 0x22, flags: 0x0},
	126:  {region: 0x38, script: 0x20, flags: 0x0},
	127:  {region: 0x99, script: 0x22, flags: 0x0},
	128:  {region: 0xe8, script: 0x5, flags: 0x0},
	129:  {region: 0x12b, script: 0x34, flags: 0x0},
	131:  {region: 0x99, script: 0x22, flags: 0x0},
	132:  {region: 0x165, script: 0x5a, flags: 0x0},
	133:  {region: 0x99, script: 0x22, flags: 0x0},
	134:  {region: 0xe7, script: 0x5a, flags: 0x0},
	135:  {region: 0x165, script: 0x5a, flags: 0x0},
	136:  {region: 0x99, script: 0x22, flags: 0x0},
	137:  {region: 0x165, script: 0x5a, flags: 0x0},
	138:  {region: 0x13f, script: 0x5a, flags: 0x0},
	139:  {region: 0x165, script: 0x5a, flags: 0x0},
	140:  {region: 0x165, script: 0x5a, flags: 0x0},
	141:  {region: 0xe7, script: 0x5a, flags: 0x0},
	142:  {region: 0x165, script: 0x5a, flags: 0x0},
	143:  {region: 0xd6, script: 0x5a, flags: 0x0},
	144:  {region: 0x165, script: 0x5a, flags: 0x0},
	145:  {region: 0x165, script: 0x5a, flags: 0x0},
	146:  {region: 0x165, script: 0x5a, flags: 0x0},
	147:  {region: 0x165, script: 0x2c, flags: 0x0},
	148:  {region: 0x99, script: 0x22, flags: 0x0},
	149:  {region: 0x95, script: 0x5a, flags: 0x0},
	150:  {region: 0x165, script: 0x5a, flags: 0x0},
	151:  {region: 0x165, script: 0x5a, flags: 0x0},
	152:  {region: 0x114, script: 0x5a, flags: 0x0},
	153:  {region: 0x165, script: 0x5a, flags: 0x0},
	154:  {region: 0x165, script: 0x5a, flags: 0x0},
	155:  {region: 0x52, script: 0x5a, flags: 0x0},
	156:  {region: 0x165, script: 0x5a, flags: 0x0},
	157:  {region: 0xe7, script: 0x5a, flags: 0x0},
	158:  {region: 0x165, script: 0x5a, flags: 0x0},
	159:  {region: 0x13e, script: 0xe5, flags: 0x0},
	160:  {region: 0xc3, script: 0x5a, flags: 0x0},
	161:  {region: 0x165, script: 0x5a, flags: 0x0},
	162:  {region: 0x165, script: 0x5a, flags: 0x0},
	163:  {region: 0xc3, script: 0x5a, flags: 0x0},
	164:  {region: 0x165, script: 0x5a, flags: 0x0},
	165:  {region: 0x35, script: 0xe, flags: 0x0},
	166:  {region: 0x165, script: 0x5a, flags: 0x0},
	167:  {region: 0x165, script: 0x5a, flags: 0x0},
	168:  {region: 0x165, script: 0x5a, flags: 0x0},
	169:  {region: 0x53, script: 0xec, flags: 0x0},
	170:  {region: 0x165, script: 0x5a, flags: 0x0},
	171:  {region: 0x165, script: 0x5a, flags: 0x0},
	172:  {region: 0x165, script: 0x5a, flags: 0x0},
	173:  {region: 0x99, script: 0xe, flags: 0x0},
	174:  {region: 0x165, script: 0x5a, flags: 0x0},
	175:  {region: 0x9c, script: 0x5, flags: 0x0},
	176:  {region: 0x165, script: 0x5a, flags: 0x0},
	177:  {region: 0x4f, script: 0x5a, flags: 0x0},
	178:  {region: 0x78, script: 0x5a, flags: 0x0},
	179:  {region: 0x99, script: 0x22, flags: 0x0},
	180:  {region: 0xe8, script: 0x5, flags: 0x0},
	181:  {region: 0x99, script: 0x22, flags: 0x0},
	182:  {region: 0x165, script: 0x5a, flags: 0x0},
	183:  {region: 0x33, script: 0x5a, flags: 0x0},
	184:  {region: 0x165, script: 0x5a, flags: 0x0},
	185:  {region: 0xb4, script: 0xc, flags: 0x0},
	186:  {region: 0x52, script: 0x5a, flags: 0x0},
	187:  {region: 0x165, script: 0x2c, flags: 0x0},
	188:  {region: 0xe7, script: 0x5a, flags: 0x0},
	189:  {region: 0x165, script: 0x5a, flags: 0x0},
	190:  {region: 0xe8, script: 0x22, flags: 0x0},
	191:  {region: 0x106, script: 0x20, flags: 0x0},
	192:  {region: 0x15f, script: 0x5a, flags: 0x0},
	193:  {region: 0x165, script: 0x5a, flags: 0x0},
	194:  {region: 0x95, script: 0x5a, flags: 0x0},
	195:  {region: 0x165, script: 0x5a, flags: 0x0},
	196:  {region: 0x52, script: 0x5a, flags: 0x0},
	197:  {region: 0x165, script: 0x5a, flags: 0x0},
	198:  {region: 0x165, script: 0x5a, flags: 0x0},
	199:  {region: 0x165, script: 0x5a, flags: 0x0},
	200:  {region: 0x86, script: 0x5a, flags: 0x0},
	201:  {region: 0x165, script: 0x5a, flags: 0x0},
	202:  {region: 0x165, script: 0x5a, flags: 0x0},
	203:  {region: 0x165, script: 0x5a, flags: 0x0},
	204:  {region: 0x165, script: 0x5a, flags: 0x0},
	205:  {region: 0x6d, script: 0x2c, flags: 0x0},
	206:  {region: 0x165, script: 0x5a, flags: 0x0},
	207:  {region: 0x165, script: 0x5a, flags: 0x0},
	208:  {region: 0x52, script: 0x5a, flags: 0x0},
	209:  {region: 0x165, script: 0x5a, flags: 0x0},
	210:  {region: 0x165, script: 0x5a, flags: 0x0},
	211:  {region: 0xc3, script: 0x5a, flags: 0x0},
	212:  {region: 0x165, script: 0x5a, flags: 0x0},
	213:  {region: 0x165, script: 0x5a, flags: 0x0},
	214:  {region: 0x165, script: 0x5a, flags: 0x0},
	215:  {region: 0x6e, script: 0x5a, flags: 0x0},
	216:  {region: 0x165, script: 0x5a, flags: 0x0},
	217:  {region: 0x165, script: 0x5a, flags: 0x0},
	218:  {region: 0xd6, script: 0x5a, flags: 0x0},
	219:  {region: 0x35, script: 0x16, flags: 0x0},
	220:  {region: 0x106, script: 0x20, flags: 0x0},
	221:  {region: 0xe7, script: 0x5a, flags: 0x0},
	222:  {region: 0x165, script: 0x5a, flags: 0x0},
	223:  {region: 0x131, script: 0x5a, flags: 0x0},
	224:  {region: 0x8a, script: 0x5a, flags: 0x0},
	225:  {region: 0x75, script: 0x5a, flags: 0x0},
	226:  {region: 0x106, script: 0x20, flags: 0x0},
	227:  {region: 0x135, script: 0x5a, flags: 0x0},
	228:  {region: 0x49, script: 0x5a, flags: 0x0},
	229:  {region: 0x135, script: 0x1a, flags: 0x0},
	230:  {region: 0xa6, script: 0x5, flags: 0x0},
	231:  {region: 0x13e, script: 0x19, flags: 0x0},
	232:  {region: 0x165, script: 0x5a, flags: 0x0},
	233:  {region: 0x9b, script: 0x5, flags: 0x0},
	234:  {region: 0x165, script: 0x5a, flags: 0x0},
	235:  {region: 0x165, script: 0x5a, flags: 0x0},
	236:  {region: 0x165, script: 0x5a, flags: 0x0},
	237:  {region: 0x165, script: 0x5a, flags: 0x0},
	238:  {region: 0x165, script: 0x5a, flags: 0x0},
	239:  {region: 0xc5, script: 0xd8, flags: 0x0},
	240:  {region: 0x78, script: 0x5a, flags: 0x0},
	241:  {region: 0x6b, script: 0x1d, flags: 0x0},
	242:  {region: 0xe7, script: 0x5a, flags: 0x0},
	243:  {region: 0x49, script: 0x17, flags: 0x0},
	244:  {region: 0x130, script: 0x20, flags: 0x0},
	245:  {region: 0x49, script: 0x17, flags: 0x0},
	246:  {region: 0x49, script: 0x17, flags: 0x0},
	247:  {region: 0x49, script: 0x17, flags: 0x0},
	248:  {region: 0x49, script: 0x17, flags: 0x0},
	249:  {region: 0x10a, script: 0x5a, flags: 0x0},
	250:  {region: 0x5e, script: 0x5a, flags: 0x0},
	251:  {region: 0xe9, script: 0x5a, flags: 0x0},
	252:  {region: 0x49, script: 0x17, flags: 0x0},
	253:  {region: 0xc4, script: 0x86, flags: 0x0},
	254:  {region: 0x8, script: 0x2, flags: 0x1},
	255:  {region: 0x106, script: 0x20, flags: 0x0},
	256:  {region: 0x7b, script: 0x5a, flags: 0x0},
	257:  {region: 0x63, script: 0x5a, flags: 0x0},
	258:  {region: 0x165, script: 0x5a, flags: 0x0},
	259:  {region: 0x165, script: 0x5a, flags: 0x0},
	260:  {region: 0x165, script: 0x5a, flags: 0x0},
	261:  {region: 0x165, script: 0x5a, flags: 0x0},
	262:  {region: 0x135, script: 0x5a, flags: 0x0},
	263:  {region: 0x106, script: 0x20, flags: 0x0},
	264:  {region: 0xa4, script: 0x5a, flags: 0x0},
	265:  {region: 0x165, script: 0x5a, flags: 0x0},
	266:  {region: 0x165, script: 0x5a, flags: 0x0},
	267:  {region: 0x99, script: 0x5, flags: 0x0},
	268:  {region: 0x165, script: 0x5a, flags: 0x0},
	269:  {region: 0x60, script: 0x5a, flags: 0x0},
	270:  {region: 0x165, script: 0x5a, flags: 0x0},
	271:  {region: 0x49, script: 0x5a, flags: 0x0},
	272:  {region: 0x165, script: 0x5a, flags: 0x0},
	273:  {region: 0x165, script: 0x5a, flags: 0x0},
	274:  {region: 0x165, script: 0x5a, flags: 0x0},
	275:  {region: 0x165, script: 0x5, flags: 0x0},
	276:  {region: 0x49, script: 0x5a, flags: 0x0},
	277:  {region: 0x165, script: 0x5a, flags: 0x0},
	278:  {region: 0x165, script: 0x5a, flags: 0x0},
	279:  {region: 0xd4, script: 0x5a, flags: 0x0},
	280:  {region: 0x4f, script: 0x5a, flags: 0x0},
	281:  {region: 0x165, script: 0x5a, flags: 0x0},
	282:  {region: 0x99, script: 0x5, flags: 0x0},
	283:  {region: 0x165, script: 0x5a, flags: 0x0},
	284:  {region: 0x165, script: 0x5a, flags: 0x0},
	285:  {region: 0x165, script: 0x5a, flags: 0x0},
	286:  {region: 0x165, script: 0x2c, flags: 0x0},
	287:  {region: 0x60, script: 0x5a, flags: 0x0},
	288:  {region: 0xc3, script: 0x5a, flags: 0x0},
	289:  {region: 0xd0, script: 0x5a, flags: 0x0},
	290:  {region: 0x165, script: 0x5a, flags: 0x0},
	291:  {region: 0xdb, script: 0x22, flags: 0x0},
	292:  {region: 0x52, script: 0x5a, flags: 0x0},
	293:  {region: 0x165, script: 0x5a, flags: 0x0},
	294:  {region: 0x165, script: 0x5a, flags: 0x0},
	295:  {region: 0x165, script: 0x5a, flags: 0x0},
	296:  {region: 0xcd, script: 0xea, flags: 0x0},
	297:  {region: 0x165, script: 0x5a, flags: 0x0},
	298:  {region: 0x165, script: 0x5a, flags: 0x0},
	299:  {region: 0x114, script: 0x5a, flags: 0x0},
	300:  {region: 0x37, script: 0x5a, flags: 0x0},
	301:  {region: 0x43, script: 0xec, flags: 0x0},
	302:  {region: 0x165, script: 0x5a, flags: 0x0},
	303:  {region: 0xa4, script: 0x5a, flags: 0x0},
	304:  {region: 0x80, script: 0x5a, flags: 0x0},
	305:  {region: 0xd6, script: 0x5a, flags: 0x0},
	306:  {region: 0x9e, script: 0x5a, flags: 0x0},
	307:  {region: 0x6b, script: 0x29, flags: 0x0},
	308:  {region: 0x165, script: 0x5a, flags: 0x0},
	309:  {region: 0xc4, script: 0x4b, flags: 0x0},
	310:  {region: 0x87, script: 0x34, flags: 0x0},
	311:  {region: 0x165, script: 0x5a, flags: 0x0},
	312:  {region: 0x165, script: 0x5a, flags: 0x0},
	313:  {region: 0xa, script: 0x2, flags: 0x1},
	314:  {region: 0x165, script: 0x5a, flags: 0x0},
	315:  {region: 0x165, script: 0x5a, flags: 0x0},
	316:  {region: 0x1, script: 0x5a, flags: 0x0},
	317:  {region: 0x165, script: 0x5a, flags: 0x0},
	318:  {region: 0x6e, script: 0x5a, flags: 0x0},
	319:  {region: 0x135, script: 0x5a, flags: 0x0},
	320:  {region: 0x6a, script: 0x5a, flags: 0x0},
	321:  {region: 0x165, script: 0x5a, flags: 0x0},
	322:  {region: 0x9e, script: 0x46, flags: 0x0},
	323:  {region: 0x165, script: 0x5a, flags: 0x0},
	324:  {region: 0x165, script: 0x5a, flags: 0x0},
	325:  {region: 0x6e, script: 0x5a, flags: 0x0},
	326:  {region: 0x52, script: 0x5a, flags: 0x0},
	327:  {region: 0x6e, script: 0x5a, flags: 0x0},
	328:  {region: 0x9c, script: 0x5, flags: 0x0},
	329:  {region: 0x165, script: 0x5a, flags: 0x0},
	330:  {region: 0x165, script: 0x5a, flags: 0x0},
	331:  {region: 0x165, script: 0x5a, flags: 0x0},
	332:  {region: 0x165, script: 0x5a, flags: 0x0},
	333:  {region: 0x86, script: 0x5a, flags: 0x0},
	334:  {region: 0xc, script: 0x2, flags: 0x1},
	335:  {region: 0x165, script: 0x5a, flags: 0x0},
	336:  {region: 0xc3, script: 0x5a, flags: 0x0},
	337:  {region: 0x72, script: 0x5a, flags: 0x0},
	338:  {region: 0x10b, script: 0x5, flags: 0x0},
	339:  {region: 0xe7, script: 0x5a, flags: 0x0},
	340:  {region: 0x10c, script: 0x5a, flags: 0x0},
	341:  {region: 0x73, script: 0x5a, flags: 0x0},
	342:  {region: 0x165, script: 0x5a, flags: 0x0},
	343:  {region: 0x165, script: 0x5a, flags: 0x0},
	344:  {region: 0x76, script: 0x5a, flags: 0x0},
	345:  {region: 0x165, script: 0x5a, flags: 0x0},
	346:  {region: 0x3b, script: 0x5a, flags: 0x0},
	347:  {region: 0x165, script: 0x5a, flags: 0x0},
	348:  {region: 0x165, script: 0x5a, flags: 0x0},
	349:  {region: 0x165, script: 0x5a, flags: 0x0},
	350:  {region: 0x78, script: 0x5a, flags: 0x0},
	351:  {region: 0x135, script: 0x5a, flags: 0x0},
	352:  {region: 0x78, script: 0x5a, flags: 0x0},
	353:  {region: 0x60, script: 0x5a, flags: 0x0},
	354:  {region: 0x60, script: 0x5a, flags: 0x0},
	355:  {region: 0x52, script: 0x5, flags: 0x0},
	356:  {region: 0x140, script: 0x5a, flags: 0x0},
	357:  {region: 0x165, script: 0x5a, flags: 0x0},
	358:  {region: 0x84, script: 0x5a, flags: 0x0},
	359:  {region: 0x165, script: 0x5a, flags: 0x0},
	360:  {region: 0xd4, script: 0x5a, flags: 0x0},
	361:  {region: 0x9e, script: 0x5a, flags: 0x0},
	362:  {region: 0xd6, script: 0x5a, flags: 0x0},
	363:  {region: 0x165, script: 0x5a, flags: 0x0},
	364:  {region: 0x10b, script: 0x5a, flags: 0x0},
	365:  {region: 0xd9, script: 0x5a, flags: 0x0},
	366:  {region: 0x96, script: 0x5a, flags: 0x0},
	367:  {region: 0x80, script: 0x5a, flags: 0x0},
	368:  {region: 0x165, script: 0x5a, flags: 0x0},
	369:  {region: 0xbc, script: 0x5a, flags: 0x0},
	370:  {region: 0x165, script: 0x5a, flags: 0x0},
	371:  {region: 0x165, script: 0x5a, flags: 0x0},
	372:  {region: 0x165, script: 0x5a, flags: 0x0},
	373:  {region: 0x53, script: 0x3b, flags: 0x0},
	374:  {region: 0x165, script: 0x5a, flags: 0x0},
	375:  {region: 0x95, script: 0x5a, flags: 0x0},
	376:  {region: 0x165, script: 0x5a, flags: 0x0},
	377:  {region: 0x165, script: 0x5a, flags: 0x0},
	378:  {region: 0x99, script: 0x22, flags: 0x0},
	379:  {region: 0x165, script: 0x5a, flags: 0x0},
	380:  {region: 0x9c, script: 0x5, flags: 0x0},
	381:  {region: 0x7e, script: 0x5a, flags: 0x0},
	382:  {region: 0x7b, script: 0x5a, flags: 0x0},
	383:  {region: 0x165, script: 0x5a, flags: 0x0},
	384:  {region: 0x165, script: 0x5a, flags: 0x0},
	385:  {region: 0x165, script: 0x5a, flags: 0x0},
	386:  {region: 0x165, script: 0x5a, flags: 0x0},
	387:  {region: 0x165, script: 0x5a, flags: 0x0},
	388:  {region: 0x165, script: 0x5a, flags: 0x0},
	389:  {region: 0x6f, script: 0x2c, flags: 0x0},
	390:  {region: 0x165, script: 0x5a, flags: 0x0},
	391:  {region: 0xdb, script: 0x22, flags: 0x0},
	392:  {region: 0x165, script: 0x5a, flags: 0x0},
	393:  {region: 0xa7, script: 0x5a, flags: 0x0},
	394:  {region: 0x165, script: 0x5a, flags: 0x0},
	395:  {region: 0xe8, script: 0x5, flags: 0x0},
	396:  {region: 0x165, script: 0x5a, flags: 0x0},
	397:  {region: 0xe8, script: 0x5, flags: 0x0},
	398:  {region: 0x165, script: 0x5a, flags: 0x0},
	399:  {region: 0x165, script: 0x5a, flags: 0x0},
	400:  {region: 0x6e, script: 0x5a, flags: 0x0},
	401:  {region: 0x9c, script: 0x5, flags: 0x0},
	402:  {region: 0x165, script: 0x5a, flags: 0x0},
	403:  {region: 0x165, script: 0x2c, flags: 0x0},
	404:  {region: 0xf1, script: 0x5a, flags: 0x0},
	405:  {region: 0x165, script: 0x5a, flags: 0x0},
	406:  {region: 0x165, script: 0x5a, flags: 0x0},
	407:  {region: 0x165, script: 0x5a, flags: 0x0},
	408:  {region: 0x165, script: 0x2c, flags: 0x0},
	409:  {region: 0x165, script: 0x5a, flags: 0x0},
	410:  {region: 0x99, script: 0x22, flags: 0x0},
	411:  {region: 0x99, script: 0xe6, flags: 0x0},
	412:  {region: 0x95, script: 0x5a, flags: 0x0},
	413:  {region: 0xd9, script: 0x5a, flags: 0x0},
	414:  {region: 0x130, script: 0x32, flags: 0x0},
	415:  {region: 0x165, script: 0x5a, flags: 0x0},
	416:  {region: 0xe, script: 0x2, flags: 0x1},
	417:  {region: 0x99, script: 0xe, flags: 0x0},
	418:  {region: 0x165, script: 0x5a, flags: 0x0},
	419:  {region: 0x4e, script: 0x5a, flags: 0x0},
	420:  {region: 0x99, script: 0x35, flags: 0x0},
	421:  {region: 0x41, script: 0x5a, flags: 0x0},
	422:  {region: 0x54, script: 0x5a, flags: 0x0},
	423:  {region: 0x165, script: 0x5a, flags: 0x0},
	424:  {region: 0x80, script: 0x5a, flags: 0x0},
	425:  {region: 0x165, script: 0x5a, flags: 0x0},
	426:  {region: 0x165, script: 0x5a, flags: 0x0},
	427:  {region: 0xa4, script: 0x5a, flags: 0x0},
	428:  {region: 0x98, script: 0x5a, flags: 0x0},
	429:  {region: 0x165, script: 0x5a, flags: 0x0},
	430:  {region: 0xdb, script: 0x22, flags: 0x0},
	431:  {region: 0x165, script: 0x5a, flags: 0x0},
	432:  {region: 0x165, script: 0x5, flags: 0x0},
	433:  {region: 0x49, script: 0x5a, flags: 0x0},
	434:  {region: 0x165, script: 0x5, flags: 0x0},
	435:  {region: 0x165, script: 0x5a, flags: 0x0},
	436:  {region: 0x10, script: 0x3, flags: 0x1},
	437:  {region: 0x165, script: 0x5a, flags: 0x0},
	438:  {region: 0x53, script: 0x3b, flags: 0x0},
	439:  {region: 0x165, script: 0x5a, flags: 0x0},
	440:  {region: 0x135, script: 0x5a, flags: 0x0},
	441:  {region: 0x24, script: 0x5, flags: 0x0},
	442:  {region: 0x165, script: 0x5a, flags: 0x0},
	443:  {region: 0x165, script: 0x2c, flags: 0x0},
	444:  {region: 0x97, script: 0x3e, flags: 0x0},
	445:  {region: 0x165, script: 0x5a, flags: 0x0},
	446:  {region: 0x99, script: 0x22, flags: 0x0},
	447:  {region: 0x165, script: 0x5a, flags: 0x0},
	448:  {region: 0x73, script: 0x5a, flags: 0x0},
	449:  {region: 0x165, script: 0x5a, flags: 0x0},
	450:  {region: 0x165, script: 0x5a, flags: 0x0},
	451:  {region: 0xe7, script: 0x5a, flags: 0x0},
	452:  {region: 0x165, script: 0x5a, flags: 0x0},
	453:  {region: 0x12b, script: 0x40, flags: 0x0},
	454:  {region: 0x53, script: 0x90, flags: 0x0},
	455:  {region: 0x165, script: 0x5a, flags: 0x0},
	456:  {region: 0xe8, script: 0x5, flags: 0x0},
	457:  {region: 0x99, script: 0x22, flags: 0x0},
	458:  {region: 0xaf, script: 0x41, flags: 0x0},
	459:  {region: 0xe7, script: 0x5a, flags: 0x0},
	460:  {region: 0xe8, script: 0x5, flags: 0x0},
	461:  {region: 0xe6, script: 0x5a, flags: 0x0},
	462:  {region: 0x99, script: 0x22, flags: 0x0},
	463:  {region: 0x99, script: 0x22, flags: 0x0},
	464:  {region: 0x165, script: 0x5a, flags: 0x0},
	465:  {region: 0x90, script: 0x5a, flags: 0x0},
	466:  {region: 0x60, script: 0x5a, flags: 0x0},
	467:  {region: 0x53, script: 0x3b, flags: 0x0},
	468:  {region: 0x91, script: 0x5a, flags: 0x0},
	469:  {region: 0x92, script: 0x5a, flags: 0x0},
	470:  {region: 0x165, script: 0x5a, flags: 0x0},
	471:  {region: 0x28, script: 0x8, flags: 0x0},
	472:  {region: 0xd2, script: 0x5a, flags: 0x0},
	473:  {region: 0x78, script: 0x5a, flags: 0x0},
	474:  {region: 0x165, script: 0x5a, flags: 0x0},
	475:  {region: 0x165, script: 0x5a, flags: 0x0},
	476:  {region: 0xd0, script: 0x5a, flags: 0x0},
	477:  {region: 0xd6, script: 0x5a, flags: 0x0},
	478:  {region: 0x165, script: 0x5a, flags: 0x0},
	479:  {region: 0x165, script: 0x5a, flags: 0x0},
	480:  {region: 0x165, script: 0x5a, flags: 0x0},
	481:  {region: 0x95, script: 0x5a, flags: 0x0},
	482:  {region: 0x165, script: 0x5a, flags: 0x0},
	483:  {region: 0x165, script: 0x5a, flags: 0x0},
	484:  {region: 0x165, script: 0x5a, flags: 0x0},
	486:  {region: 0x122, script: 0x5a, flags: 0x0},
	487:  {region: 0xd6, script: 0x5a, flags: 0x0},
	488:  {region: 0x165, script: 0x5a, flags: 0x0},
	489:  {region: 0x165, script: 0x5a, flags: 0x0},
	490:  {region: 0x53, script: 0xfa, flags: 0x0},
	491:  {region: 0x165, script: 0x5a, flags: 0x0},
	492:  {region: 0x135, script: 0x5a, flags: 0x0},
	493:  {region: 0x165, script: 0x5a, flags: 0x0},
	494:  {region: 0x49, script: 0x5a, flags: 0x0},
	495:  {region: 0x165, script: 0x5a, flags: 0x0},
	496:  {region: 0x165, script: 0x5a, flags: 0x0},
	497:  {region: 0xe7, script: 0x5a, flags: 0x0},
	498:  {region: 0x165, script: 0x5a, flags: 0x0},
	499:  {region: 0x95, script: 0x5a, flags: 0x0},
	500:  {region: 0x106, script: 0x20, flags: 0x0},
	501:  {region: 0x1, script: 0x5a, flags: 0x0},
	502:  {region: 0x165, script: 0x5a, flags: 0x0},
	503:  {region: 0x165, script: 0x5a, flags: 0x0},
	504:  {region: 0x9d, script: 0x5a, flags: 0x0},
	505:  {region: 0x9e, script: 0x5a, flags: 0x0},
	506:  {region: 0x49, script: 0x17, flags: 0x0},
	507:  {region: 0x97, script: 0x3e, flags: 0x0},
	508:  {region: 0x165, script: 0x5a, flags: 0x0},
	509:  {region: 0x165, script: 0x5a, flags: 0x0},
	510:  {region: 0x106, script: 0x5a, flags: 0x0},
	511:  {region: 0x165, script: 0x5a, flags: 0x0},
	512:  {region: 0xa2, script: 0x49, flags: 0x0},
	513:  {region: 0x165, script: 0x5a, flags: 0x0},
	514:  {region: 0xa0, script: 0x5a, flags: 0x0},
	515:  {region: 0x1, script: 0x5a, flags: 0x0},
	516:  {region: 0x165, script: 0x5a, flags: 0x0},
	517:  {region: 0x165, script: 0x5a, flags: 0x0},
	518:  {region: 0x165, script: 0x5a, flags: 0x0},
	519:  {region: 0x52, script: 0x5a, flags: 0x0},
	520:  {region: 0x130, script: 0x3e, flags: 0x0},
	521:  {region: 0x165, script: 0x5a, flags: 0x0},
	522:  {region: 0x12f, script: 0x5a, flags: 0x0},
	523:  {region: 0xdb, script: 0x22, flags: 0x0},
	524:  {region: 0x165, script: 0x5a, flags: 0x0},
	525:  {region: 0x63, script: 0x5a, flags: 0x0},
	526:  {region: 0x95, script: 0x5a, flags: 0x0},
	527:  {region: 0x95, script: 0x5a, flags: 0x0},
	528:  {region: 0x7d, script: 0x2e, flags: 0x0},
	529:  {region: 0x137, script: 0x20, flags: 0x0},
	530:  {region: 0x67, script: 0x5a, flags: 0x0},
	531:  {region: 0xc4, script: 0x5a, flags: 0x0},
	532:  {region: 0x165, script: 0x5a, flags: 0x0},
	533:  {region: 0x165, script: 0x5a, flags: 0x0},
	534:  {region: 0xd6, script: 0x5a, flags: 0x0},
	535:  {region: 0xa4, script: 0x5a, flags: 0x0},
	536:  {region: 0xc3, script: 0x5a, flags: 0x0},
	537:  {region: 0x106, script: 0x20, flags: 0x0},
	538:  {region: 0x165, script: 0x5a, flags: 0x0},
	539:  {region: 0x165, script: 0x5a, flags: 0x0},
	540:  {region: 0x165, script: 0x5a, flags: 0x0},
	541:  {region: 0x165, script: 0x5a, flags: 0x0},
	542:  {region: 0xd4, script: 0x5, flags: 0x0},
	543:  {region: 0xd6, script: 0x5a, flags: 0x0},
	544:  {region: 0x164, script: 0x5a, flags: 0x0},
	545:  {region: 0x165, script: 0x5a, flags: 0x0},
	546:  {region: 0x165, script: 0x5a, flags: 0x0},
	547:  {region: 0x12f, script: 0x5a, flags: 0x0},
	548:  {region: 0x122, script: 0x5, flags: 0x0},
	549:  {region: 0x165, script: 0x5a, flags: 0x0},
	550:  {region: 0x123, script: 0xeb, flags: 0x0},
	551:  {region: 0x5a, script: 0x5a, flags: 0x0},
	552:  {region: 0x52, script: 0x5a, flags: 0x0},
	553:  {region: 0x165, script: 0x5a, flags: 0x0},
	554:  {region: 0x4f, script: 0x5a, flags: 0x0},
	555:  {region: 0x99, script: 0x22, flags: 0x0},
	556:  {region: 0x99, script: 0x22, flags: 0x0},
	557:  {region: 0x4b, script: 0x5a, flags: 0x0},
	558:  {region: 0x95, script: 0x5a, flags: 0x0},
	559:  {region: 0x165, script: 0x5a, flags: 0x0},
	560:  {region: 0x41, script: 0x5a, flags: 0x0},
	561:  {region: 0x99, script: 0x5a, flags: 0x0},
	562:  {region: 0x53, script: 0xe2, flags: 0x0},
	563:  {region: 0x99, script: 0x22, flags: 0x0},
	564:  {region: 0xc3, script: 0x5a, flags: 0x0},
	565:  {region: 0x165, script: 0x5a, flags: 0x0},
	566:  {region: 0x99, script: 0x75, flags: 0x0},
	567:  {region: 0xe8, script: 0x5, flags: 0x0},
	568:  {region: 0x165, script: 0x5a, flags: 0x0},
	569:  {region: 0xa4, script: 0x5a, flags: 0x0},
	570:  {region: 0x165, script: 0x5a, flags: 0x0},
	571:  {region: 0x12b, script: 0x5a, flags: 0x0},
	572:  {region: 0x165, script: 0x5a, flags: 0x0},
	573:  {region: 0xd2, script: 0x5a, flags: 0x0},
	574:  {region: 0x165, script: 0x5a, flags: 0x0},
	575:  {region: 0xaf, script: 0x57, flags: 0x0},
	576:  {region: 0x165, script: 0x5a, flags: 0x0},
	577:  {region: 0x165, script: 0x5a, flags: 0x0},
	578:  {region: 0x13, script: 0x6, flags: 0x1},
	579:  {region: 0x165, script: 0x5a, flags: 0x0},
	580:  {region: 0x52, script: 0x5a, flags: 0x0},
	581:  {region: 0x82, script: 0x5a, flags: 0x0},
	582:  {region: 0xa4, script: 0x5a, flags: 0x0},
	583:  {region: 0x165, script: 0x5a, flags: 0x0},
	584:  {region: 0x165, script: 0x5a, flags: 0x0},
	585:  {region: 0x165, script: 0x5a, flags: 0x0},
	586:  {region: 0xa6, script: 0x4e, flags: 0x0},
	587:  {region: 0x2a, script: 0x5a, flags: 0x0},
	588:  {region: 0x165, script: 0x5a, flags: 0x0},
	589:  {region: 0x165, script: 0x5a, flags: 0x0},
	590:  {region: 0x165, script: 0x5a, flags: 0x0},
	591:  {region: 0x165, script: 0x5a, flags: 0x0},
	592:  {region: 0x165, script: 0x5a, flags: 0x0},
	593:  {region: 0x99, script: 0x52, flags: 0x0},
	594:  {region: 0x8b, script: 0x5a, flags: 0x0},
	595:  {region: 0x165, script: 0x5a, flags: 0x0},
	596:  {region: 0xab, script: 0x53, flags: 0x0},
	597:  {region: 0x106, script: 0x20, flags: 0x0},
	598:  {region: 0x99, script: 0x22, flags: 0x0},
	599:  {region: 0x165, script: 0x5a, flags: 0x0},
	600:  {region: 0x75, script: 0x5a, flags: 0x0},
	601:  {region: 0x165, script: 0x5a, flags: 0x0},
	602:  {region: 0xb4, script: 0x5a, flags: 0x0},
	603:  {region: 0x165, script: 0x5a, flags: 0x0},
	604:  {region: 0x165, script: 0x5a, flags: 0x0},
	605:  {region: 0x165, script: 0x5a, flags: 0x0},
	606:  {region: 0x165, script: 0x5a, flags: 0x0},
	607:  {region: 0x165, script: 0x5a, flags: 0x0},
	608:  {region: 0x165, script: 0x5a, flags: 0x0},
	609:  {region: 0x165, script: 0x5a, flags: 0x0},
	610:  {region: 0x165, script: 0x2c, flags: 0x0},
	611:  {region: 0x165, script: 0x5a, flags: 0x0},
	612:  {region: 0x106, script: 0x20, flags: 0x0},
	613:  {region: 0x112, script: 0x5a, flags: 0x0},
	614:  {region: 0xe7, script: 0x5a, flags: 0x0},
	615:  {region: 0x106, script: 0x5a, flags: 0x0},
	616:  {region: 0x165, script: 0x5a, flags: 0x0},
	617:  {region: 0x99, script: 0x22, flags: 0x0},
	618:  {region: 0x99, script: 0x5, flags: 0x0},
	619:  {region: 0x12f, script: 0x5a, flags: 0x0},
	620:  {region: 0x165, script: 0x5a, flags: 0x0},
	621:  {region: 0x52, script: 0x5a, flags: 0x0},
	622:  {region: 0x60, script: 0x5a, flags: 0x0},
	623:  {region: 0x165, script: 0x5a, flags: 0x0},
	624:  {region: 0x165, script: 0x5a, flags: 0x0},
	625:  {region: 0x165, script: 0x2c, flags: 0x0},
	626:  {region: 0x165, script: 0x5a, flags: 0x0},
	627:  {region: 0x165, script: 0x5a, flags: 0x0},
	628:  {region: 0x19, script: 0x3, flags: 0x1},
	629:  {region: 0x165, script: 0x5a, flags: 0x0},
	630:  {region: 0x165, script: 0x5a, flags: 0x0},
	631:  {region: 0x165, script: 0x5a, flags: 0x0},
	632:  {region: 0x165, script: 0x5a, flags: 0x0},
	633:  {region: 0x106, script: 0x20, flags: 0x0},
	634:  {region: 0x165, script: 0x5a, flags: 0x0},
	635:  {region: 0x165, script: 0x5a, flags: 0x0},
	636:  {region: 0x165, script: 0x5a, flags: 0x0},
	637:  {region: 0x106, script: 0x20, flags: 0x0},
	638:  {region: 0x165, script: 0x5a, flags: 0x0},
	639:  {region: 0x95, script: 0x5a, flags: 0x0},
	640:  {region: 0xe8, script: 0x5, flags: 0x0},
	641:  {region: 0x7b, script: 0x5a, flags: 0x0},
	642:  {region: 0x165, script: 0x5a, flags: 0x0},
	643:  {region: 0x165, script: 0x5a, flags: 0x0},
	644:  {region: 0x165, script: 0x5a, flags: 0x0},
	645:  {region: 0x165, script: 0x2c, flags: 0x0},
	646:  {region: 0x123, script: 0xeb, flags: 0x0},
	647:  {region: 0xe8, script: 0x5, flags: 0x0},
	648:  {region: 0x165, script: 0x5a, flags: 0x0},
	649:  {region: 0x165, script: 0x5a, flags: 0x0},
	650:  {region: 0x1c, script: 0x5, flags: 0x1},
	651:  {region: 0x165, script: 0x5a, flags: 0x0},
	652:  {region: 0x165, script: 0x5a, flags: 0x0},
	653:  {region: 0x165, script: 0x5a, flags: 0x0},
	654:  {region: 0x138, script: 0x5a, flags: 0x0},
	655:  {region: 0x87, script: 0x5e, flags: 0x0},
	656:  {region: 0x97, script: 0x3e, flags: 0x0},
	657:  {region: 0x12f, script: 0x5a, flags: 0x0},
	658:  {region: 0xe8, script: 0x5, flags: 0x0},
	659:  {region: 0x131, script: 0x5a, flags: 0x0},
	660:  {region: 0x165, script: 0x5a, flags: 0x0},
	661:  {region: 0xb7, script: 0x5a, flags: 0x0},
	662:  {region: 0x106, script: 0x20, flags: 0x0},
	663:  {region: 0x165, script: 0x5a, flags: 0x0},
	664:  {region: 0x95, script: 0x5a, flags: 0x0},
	665:  {region: 0x165, script: 0x5a, flags: 0x0},
	666:  {region: 0x53, script: 0xeb, flags: 0x0},
	667:  {region: 0x165, script: 0x5a, flags: 0x0},
	668:  {region: 0x165, script: 0x5a, flags: 0x0},
	669:  {region: 0x165, script: 0x5a, flags: 0x0},
	670:  {region: 0x165, script: 0x5a, flags: 0x0},
	671:  {region: 0x99, script: 0x5c, flags: 0x0},
	672:  {region: 0x165, script: 0x5a, flags: 0x0},
	673:  {region: 0x165, script: 0x5a, flags: 0x0},
	674:  {region: 0x106, script: 0x20, flags: 0x0},
	675:  {region: 0x131, script: 0x5a, flags: 0x0},
	676:  {region: 0x165, script: 0x5a, flags: 0x0},
	677:  {region: 0xd9, script: 0x5a, flags: 0x0},
	678:  {region: 0x165, script: 0x5a, flags: 0x0},
	679:  {region: 0x165, script: 0x5a, flags: 0x0},
	680:  {region: 0x21, script: 0x2, flags: 0x1},
	681:  {region: 0x165, script: 0x5a, flags: 0x0},
	682:  {region: 0x165, script: 0x5a, flags: 0x0},
	683:  {region: 0x9e, script: 0x5a, flags: 0x0},
	684:  {region: 0x53, script: 0x60, flags: 0x0},
	685:  {region: 0x95, script: 0x5a, flags: 0x0},
	686:  {region: 0x9c, script: 0x5, flags: 0x0},
	687:  {region: 0x135, script: 0x5a, flags: 0x0},
	688:  {region: 0x165, script: 0x5a, flags: 0x0},
	689:  {region: 0x165, script: 0x5a, flags: 0x0},
	690:  {region: 0x99, script: 0xe6, flags: 0x0},
	691:  {region: 0x9e, script: 0x5a, flags: 0x0},
	692:  {region: 0x165, script: 0x5a, flags: 0x0},
	693:  {region: 0x4b, script: 0x5a, flags: 0x0},
	694:  {region: 0x165, script: 0x5a, flags: 0x0},
	695:  {region: 0x165, script: 0x5a, flags: 0x0},
	696:  {region: 0xaf, script: 0x57, flags: 0x0},
	697:  {region: 0x165, script: 0x5a, flags: 0x0},
	698:  {region: 0x165, script: 0x5a, flags: 0x0},
	699:  {region: 0x4b, script: 0x5a, flags: 0x0},
	700:  {region: 0x165, script: 0x5a, flags: 0x0},
	701:  {region: 0x165, script: 0x5a, flags: 0x0},
	702:  {region: 0x162, script: 0x5a, flags: 0x0},
	703:  {region: 0x9c, script: 0x5, flags: 0x0},
	704:  {region: 0xb6, script: 0x5a, flags: 0x0},
	705:  {region: 0xb8, script: 0x5a, flags: 0x0},
	706:  {region: 0x4b, script: 0x5a, flags: 0x0},
	707:  {region: 0x4b, script: 0x5a, flags: 0x0},
	708:  {region: 0xa4, script: 0x5a, flags: 0x0},
	709:  {region: 0xa4, script: 0x5a, flags: 0x0},
	710:  {region: 0x9c, script: 0x5, flags: 0x0},
	711:  {region: 0xb8, script: 0x5a, flags: 0x0},
	712:  {region: 0x123, script: 0xeb, flags: 0x0},
	713:  {region: 0x53, script: 0x3b, flags: 0x0},
	714:  {region: 0x12b, script: 0x5a, flags: 0x0},
	715:  {region: 0x95, script: 0x5a, flags: 0x0},
	716:  {region: 0x52, script: 0x5a, flags: 0x0},
	717:  {region: 0x99, script: 0x22, flags: 0x0},
	718:  {region: 0x99, script: 0x22, flags: 0x0},
	719:  {region: 0x95, script: 0x5a, flags: 0x0},
	720:  {region: 0x23, script: 0x3, flags: 0x1},
	721:  {region: 0xa4, script: 0x5a, flags: 0x0},
	722:  {region: 0x165, script: 0x5a, flags: 0x0},
	723:  {region: 0xcf, script: 0x5a, flags: 0x0},
	724:  {region: 0x165, script: 0x5a, flags: 0x0},
	725:  {region: 0x165, script: 0x5a, flags: 0x0},
	726:  {region: 0x165, script: 0x5a, flags: 0x0},
	727:  {region: 0x165, script: 0x5a, flags: 0x0},
	728:  {region: 0x165, script: 0x5a, flags: 0x0},
	729:  {region: 0x165, script: 0x5a, flags: 0x0},
	730:  {region: 0x165, script: 0x5a, flags: 0x0},
	731:  {region: 0x165, script: 0x5a, flags: 0x0},
	732:  {region: 0x165, script: 0x5a, flags: 0x0},
	733:  {region: 0x165, script: 0x5a, flags: 0x0},
	734:  {region: 0x165, script: 0x5a, flags: 0x0},
	735:  {region: 0x165, script: 0x5, flags: 0x0},
	736:  {region: 0x106, script: 0x20, flags: 0x0},
	737:  {region: 0xe7, script: 0x5a, flags: 0x0},
	738:  {region: 0x165, script: 0x5a, flags: 0x0},
	739:  {region: 0x95, script: 0x5a, flags: 0x0},
	740:  {region: 0x165, script: 0x2c, flags: 0x0},
	741:  {region: 0x165, script: 0x5a, flags: 0x0},
	742:  {region: 0x165, script: 0x5a, flags: 0x0},
	743:  {region: 0x165, script: 0x5a, flags: 0x0},
	744:  {region: 0x112, script: 0x5a, flags: 0x0},
	745:  {region: 0xa4, script: 0x5a, flags: 0x0},
	746:  {region: 0x165, script: 0x5a, flags: 0x0},
	747:  {region: 0x165, script: 0x5a, flags: 0x0},
	748:  {region: 0x123, script: 0x5, flags: 0x0},
	749:  {region: 0xcc, script: 0x5a, flags: 0x0},
	750:  {region: 0x165, script: 0x5a, flags: 0x0},
	751:  {region: 0x165, script: 0x5a, flags: 0x0},
	752:  {region: 0x165, script: 0x5a, flags: 0x0},
	753:  {region: 0xbf, script: 0x5a, flags: 0x0},
	754:  {region: 0xd1, script: 0x5a, flags: 0x0},
	755:  {region: 0x165, script: 0x5a, flags: 0x0},
	756:  {region: 0x52, script: 0x5a, flags: 0x0},
	757:  {region: 0xdb, script: 0x22, flags: 0x0},
	758:  {region: 0x12f, script: 0x5a, flags: 0x0},
	759:  {region: 0xc0, script: 0x5a, flags: 0x0},
	760:  {region: 0x165, script: 0x5a, flags: 0x0},
	761:  {region: 0x165, script: 0x5a, flags: 0x0},
	762:  {region: 0xe0, script: 0x5a, flags: 0x0},
	763:  {region: 0x165, script: 0x5a, flags: 0x0},
	764:  {region: 0x95, script: 0x5a, flags: 0x0},
	765:  {region: 0x9b, script: 0x3d, flags: 0x0},
	766:  {region: 0x165, script: 0x5a, flags: 0x0},
	767:  {region: 0xc2, script: 0x20, flags: 0x0},
	768:  {region: 0x165, script: 0x5, flags: 0x0},
	769:  {region: 0x165, script: 0x5a, flags: 0x0},
	770:  {region: 0x165, script: 0x5a, flags: 0x0},
	771:  {region: 0x165, script: 0x5a, flags: 0x0},
	772:  {region: 0x99, script: 0x6e, flags: 0x0},
	773:  {region: 0x165, script: 0x5a, flags: 0x0},
	774:  {region: 0x165, script: 0x5a, flags: 0x0},
	775:  {region: 0x10b, script: 0x5a, flags: 0x0},
	776:  {region: 0x165, script: 0x5a, flags: 0x0},
	777:  {region: 0x165, script: 0x5a, flags: 0x0},
	778:  {region: 0x165, script: 0x5a, flags: 0x0},
	779:  {region: 0x26, script: 0x3, flags: 0x1},
	780:  {region: 0x165, script: 0x5a, flags: 0x0},
	781:  {region: 0x165, script: 0x5a, flags: 0x0},
	782:  {region: 0x99, script: 0xe, flags: 0x0},
	783:  {region: 0xc4, script: 0x75, flags: 0x0},
	785:  {region: 0x165, script: 0x5a, flags: 0x0},
	786:  {region: 0x49, script: 0x5a, flags: 0x0},
	787:  {region: 0x49, script: 0x5a, flags: 0x0},
	788:  {region: 0x37, script: 0x5a, flags: 0x0},
	789:  {region: 0x165, script: 0x5a, flags: 0x0},
	790:  {region: 0x165, script: 0x5a, flags: 0x0},
	791:  {region: 0x165, script: 0x5a, flags: 0x0},
	792:  {region: 0x165, script: 0x5a, flags: 0x0},
	793:  {region: 0x165, script: 0x5a, flags: 0x0},
	794:  {region: 0x165, script: 0x5a, flags: 0x0},
	795:  {region: 0x99, script: 0x22, flags: 0x0},
	796:  {region: 0xdb, script: 0x22, flags: 0x0},
	797:  {region: 0x106, script: 0x20, flags: 0x0},
	798:  {region: 0x35, script: 0x72, flags: 0x0},
	799:  {region: 0x29, script: 0x3, flags: 0x1},
	800:  {region: 0xcb, script: 0x5a, flags: 0x0},
	801:  {region: 0x165, script: 0x5a, flags: 0x0},
	802:  {region: 0x165, script: 0x5a, flags: 0x0},
	803:  {region: 0x165, script: 0x5a, flags: 0x0},
	804:  {region: 0x99, script: 0x22, flags: 0x0},
	805:  {region: 0x52, script: 0x5a, flags: 0x0},
	807:  {region: 0x165, script: 0x5a, flags: 0x0},
	808:  {region: 0x135, script: 0x5a, flags: 0x0},
	809:  {region: 0x165, script: 0x5a, flags: 0x0},
	810:  {region: 0x165, script: 0x5a, flags: 0x0},
	811:  {region: 0xe8, script: 0x5, flags: 0x0},
	812:  {region: 0xc3, script: 0x5a, flags: 0x0},
	813:  {region: 0x99, script: 0x22, flags: 0x0},
	814:  {region: 0x95, script: 0x5a, flags: 0x0},
	815:  {region: 0x164, script: 0x5a, flags: 0x0},
	816:  {region: 0x165, script: 0x5a, flags: 0x0},
	817:  {region: 0xc4, script: 0x75, flags: 0x0},
	818:  {region: 0x165, script: 0x5a, flags: 0x0},
	819:  {region: 0x165, script: 0x2c, flags: 0x0},
	820:  {region: 0x106, script: 0x20, flags: 0x0},
	821:  {region: 0x165, script: 0x5a, flags: 0x0},
	822:  {region: 0x131, script: 0x5a, flags: 0x0},
	823:  {region: 0x9c, script: 0x66, flags: 0x0},
	824:  {region: 0x165, script: 0x5a, flags: 0x0},
	825:  {region: 0x165, script: 0x5a, flags: 0x0},
	826:  {region: 0x9c, script: 0x5, flags: 0x0},
	827:  {region: 0x165, script: 0x5a, flags: 0x0},
	828:  {region: 0x165, script: 0x5a, flags: 0x0},
	829:  {region: 0x165, script: 0x5a, flags: 0x0},
	830:  {region: 0xdd, script: 0x5a, flags: 0x0},
	831:  {region: 0x165, script: 0x5a, flags: 0x0},
	832:  {region: 0x165, script: 0x5a, flags: 0x0},
	834:  {region: 0x165, script: 0x5a, flags: 0x0},
	835:  {region: 0x53, script: 0x3b, flags: 0x0},
	836:  {region: 0x9e, script: 0x5a, flags: 0x0},
	837:  {region: 0xd2, script: 0x5a, flags: 0x0},
	838:  {region: 0x165, script: 0x5a, flags: 0x0},
	839:  {region: 0xda, script: 0x5a, flags: 0x0},
	840:  {region: 0x165, script: 0x5a, flags: 0x0},
	841:  {region: 0x165, script: 0x5a, flags: 0x0},
	842:  {region: 0x165, script: 0x5a, flags: 0x0},
	843:  {region: 0xcf, script: 0x5a, flags: 0x0},
	844:  {region: 0x165, script: 0x5a, flags: 0x0},
	845:  {region: 0x165, script: 0x5a, flags: 0x0},
	846:  {region: 0x164, script: 0x5a, flags: 0x0},
	847:  {region: 0xd1, script: 0x5a, flags: 0x0},
	848:  {region: 0x60, script: 0x5a, flags: 0x0},
	849:  {region: 0xdb, script: 0x22, flags: 0x0},
	850:  {region: 0x165, script: 0x5a, flags: 0x0},
	851:  {region: 0xdb, script: 0x22, flags: 0x0},
	852:  {region: 0x165, script: 0x5a, flags: 0x0},
	853:  {region: 0x165, script: 0x5a, flags: 0x0},
	854:  {region: 0xd2, script: 0x5a, flags: 0x0},
	855:  {region: 0x165, script: 0x5a, flags: 0x0},
	856:  {region: 0x165, script: 0x5a, flags: 0x0},
	857:  {region: 0xd1, script: 0x5a, flags: 0x0},
	858:  {region: 0x165, script: 0x5a, flags: 0x0},
	859:  {region: 0xcf, script: 0x5a, flags: 0x0},
	860:  {region: 0xcf, script: 0x5a, flags: 0x0},
	861:  {region: 0x165, script: 0x5a, flags: 0x0},
	862:  {region: 0x165, script: 0x5a, flags: 0x0},
	863:  {region: 0x95, script: 0x5a, flags: 0x0},
	864:  {region: 0x165, script: 0x5a, flags: 0x0},
	865:  {region: 0xdf, script: 0x5a, flags: 0x0},
	866:  {region: 0x165, script: 0x5a, flags: 0x0},
	867:  {region: 0x165, script: 0x5a, flags: 0x0},
	868:  {region: 0x99, script: 0x5a, flags: 0x0},
	869:  {region: 0x165, script: 0x5a, flags: 0x0},
	870:  {region: 0x165, script: 0x5a, flags: 0x0},
	871:  {region: 0xd9, script: 0x5a, flags: 0x0},
	872:  {region: 0x52, script: 0x5a, flags: 0x0},
	873:  {region: 0x165, script: 0x5a, flags: 0x0},
	874:  {region: 0xda, script: 0x5a, flags: 0x0},
	875:  {region: 0x165, script: 0x5a, flags: 0x0},
	876:  {region: 0x52, script: 0x5a, flags: 0x0},
	877:  {region: 0x165, script: 0x5a, flags: 0x0},
	878:  {region: 0x165, script: 0x5a, flags: 0x0},
	879:  {region: 0xda, script: 0x5a, flags: 0x0},
	880:  {region: 0x123, script: 0x56, flags: 0x0},
	881:  {region: 0x99, script: 0x22, flags: 0x0},
	882:  {region: 0x10c, script: 0xc9, flags: 0x0},
	883:  {region: 0x165, script: 0x5a, flags: 0x0},
	884:  {region: 0x165, script: 0x5a, flags: 0x0},
	885:  {region: 0x84, script: 0x7c, flags: 0x0},
	886:  {region: 0x161, script: 0x5a, flags: 0x0},
	887:  {region: 0x165, script: 0x5a, flags: 0x0},
	888:  {region: 0x49, script: 0x17, flags: 0x0},
	889:  {region: 0x165, script: 0x5a, flags: 0x0},
	890:  {region: 0x161, script: 0x5a, flags: 0x0},
	891:  {region: 0x165, script: 0x5a, flags: 0x0},
	892:  {region: 0x165, script: 0x5a, flags: 0x0},
	893:  {region: 0x165, script: 0x5a, flags: 0x0},
	894:  {region: 0x165, script: 0x5a, flags: 0x0},
	895:  {region: 0x165, script: 0x5a, flags: 0x0},
	896:  {region: 0x117, script: 0x5a, flags: 0x0},
	897:  {region: 0x165, script: 0x5a, flags: 0x0},
	898:  {region: 0x165, script: 0x5a, flags: 0x0},
	899:  {region: 0x135, script: 0x5a, flags: 0x0},
	900:  {region: 0x165, script: 0x5a, flags: 0x0},
	901:  {region: 0x53, script: 0x5a, flags: 0x0},
	902:  {region: 0x165, script: 0x5a, flags: 0x0},
	903:  {region: 0xce, script: 0x5a, flags: 0x0},
	904:  {region: 0x12f, script: 0x5a, flags: 0x0},
	905:  {region: 0x131, script: 0x5a, flags: 0x0},
	906:  {region: 0x80, script: 0x5a, flags: 0x0},
	907:  {region: 0x78, script: 0x5a, flags: 0x0},
	908:  {region: 0x165, script: 0x5a, flags: 0x0},
	910:  {region: 0x165, script: 0x5a, flags: 0x0},
	911:  {region: 0x165, script: 0x5a, flags: 0x0},
	912:  {region: 0x6f, script: 0x5a, flags: 0x0},
	913:  {region: 0x165, script: 0x5a, flags: 0x0},
	914:  {region: 0x165, script: 0x5a, flags: 0x0},
	915:  {region: 0x165, script: 0x5a, flags: 0x0},
	916:  {region: 0x165, script: 0x5a, flags: 0x0},
	917:  {region: 0x99, script: 0x81, flags: 0x0},
	918:  {region: 0x165, script: 0x5a, flags: 0x0},
	919:  {region: 0x165, script: 0x5, flags: 0x0},
	920:  {region: 0x7d, script: 0x20, flags: 0x0},
	921:  {region: 0x135, script: 0x82, flags: 0x0},
	922:  {region: 0x165, script: 0x5, flags: 0x0},
	923:  {region: 0xc5, script: 0x80, flags: 0x0},
	924:  {region: 0x165, script: 0x5a, flags: 0x0},
	925:  {region: 0x2c, script: 0x3, flags: 0x1},
	926:  {region: 0xe7, script: 0x5a, flags: 0x0},
	927:  {region: 0x2f, script: 0x2, flags: 0x1},
	928:  {region: 0xe7, script: 0x5a, flags: 0x0},
	929:  {region: 0x30, script: 0x5a, flags: 0x0},
	930:  {region: 0xf0, script: 0x5a, flags: 0x0},
	931:  {region: 0x165, script: 0x5a, flags: 0x0},
	932:  {region: 0x78, script: 0x5a, flags: 0x0},
	933:  {region: 0xd6, script: 0x5a, flags: 0x0},
	934:  {region: 0x135, script: 0x5a, flags: 0x0},
	935:  {region: 0x49, script: 0x5a, flags: 0x0},
	936:  {region: 0x165, script: 0x5a, flags: 0x0},
	937:  {region: 0x9c, script: 0xf7, flags: 0x0},
	938:  {region: 0x165, script: 0x5a, flags: 0x0},
	939:  {region: 0x60, script: 0x5a, flags: 0x0},
	940:  {region: 0x165, script: 0x5, flags: 0x0},
	941:  {region: 0xb0, script: 0x8e, flags: 0x0},
	943:  {region: 0x165, script: 0x5a, flags: 0x0},
	944:  {region: 0x165, script: 0x5a, flags: 0x0},
	945:  {region: 0x99, script: 0x12, flags: 0x0},
	946:  {region: 0xa4, script: 0x5a, flags: 0x0},
	947:  {region: 0xe9, script: 0x5a, flags: 0x0},
	948:  {region: 0x165, script: 0x5a, flags: 0x0},
	949:  {region: 0x9e, script: 0x5a, flags: 0x0},
	950:  {region: 0x165, script: 0x5a, flags: 0x0},
	951:  {region: 0x165, script: 0x5a, flags: 0x0},
	952:  {region: 0x87, script: 0x34, flags: 0x0},
	953:  {region: 0x75, script: 0x5a, flags: 0x0},
	954:  {region: 0x165, script: 0x5a, flags: 0x0},
	955:  {region: 0xe8, script: 0x4d, flags: 0x0},
	956:  {region: 0x9c, script: 0x5, flags: 0x0},
	957:  {region: 0x1, script: 0x5a, flags: 0x0},
	958:  {region: 0x24, script: 0x5, flags: 0x0},
	959:  {region: 0x165, script: 0x5a, flags: 0x0},
	960:  {region: 0x41, script: 0x5a, flags: 0x0},
	961:  {region: 0x165, script: 0x5a, flags: 0x0},
	962:  {region: 0x7a, script: 0x5a, flags: 0x0},
	963:  {region: 0x165, script: 0x5a, flags: 0x0},
	964:  {region: 0xe4, script: 0x5a, flags: 0x0},
	965:  {region: 0x89, script: 0x5a, flags: 0x0},
	966:  {region: 0x69, script: 0x5a, flags: 0x0},
	967:  {region: 0x165, script: 0x5a, flags: 0x0},
	968:  {region: 0x99, script: 0x22, flags: 0x0},
	969:  {region: 0x165, script: 0x5a, flags: 0x0},
	970:  {region: 0x102, script: 0x5a, flags: 0x0},
	971:  {region: 0x95, script: 0x5a, flags: 0x0},
	972:  {region: 0x165, script: 0x5a, flags: 0x0},
	973:  {region: 0x165, script: 0x5a, flags: 0x0},
	974:  {region: 0x9e, script: 0x5a, flags: 0x0},
	975:  {region: 0x165, script: 0x5, flags: 0x0},
	976:  {region: 0x99, script: 0x5a, flags: 0x0},
	977:  {region: 0x31, script: 0x2, flags: 0x1},
	978:  {region: 0xdb, script: 0x22, flags: 0x0},
	979:  {region: 0x35, script: 0xe, flags: 0x0},
	980:  {region: 0x4e, script: 0x5a, flags: 0x0},
	981:  {region: 0x72, script: 0x5a, flags: 0x0},
	982:  {region: 0x4e, script: 0x5a, flags: 0x0},
	983:  {region: 0x9c, script: 0x5, flags: 0x0},
	984:  {region: 0x10c, script: 0x5a, flags: 0x0},
	985:  {region: 0x3a, script: 0x5a, flags: 0x0},
	986:  {region: 0x165, script: 0x5a, flags: 0x0},
	987:  {region: 0xd1, script: 0x5a, flags: 0x0},
	988:  {region: 0x104, script: 0x5a, flags: 0x0},
	989:  {region: 0x95, script: 0x5a, flags: 0x0},
	990:  {region: 0x12f, script: 0x5a, flags: 0x0},
	991:  {region: 0x165, script: 0x5a, flags: 0x0},
	992:  {region: 0x165, script: 0x5a, flags: 0x0},
	993:  {region: 0x73, script: 0x5a, flags: 0x0},
	994:  {region: 0x106, script: 0x20, flags: 0x0},
	995:  {region: 0x130, script: 0x20, flags: 0x0},
	996:  {region: 0x109, script: 0x5a, flags: 0x0},
	997:  {region: 0x107, script: 0x5a, flags: 0x0},
	998:  {region: 0x12f, script: 0x5a, flags: 0x0},
	999:  {region: 0x165, script: 0x5a, flags: 0x0},
	1000: {region: 0xa2, script: 0x4c, flags: 0x0},
	1001: {region: 0x99, script: 0x22, flags: 0x0},
	1002: {region: 0x80, script: 0x5a, flags: 0x0},
	1003: {region: 0x106, script: 0x20, flags: 0x0},
	1004: {region: 0xa4, script: 0x5a, flags: 0x0},
	1005: {region: 0x95, script: 0x5a, flags: 0x0},
	1006: {region: 0x99, script: 0x5a, flags: 0x0},
	1007: {region: 0x114, script: 0x5a, flags: 0x0},
	1008: {region: 0x99, script: 0xcd, flags: 0x0},
	1009: {region: 0x165, script: 0x5a, flags: 0x0},
	1010: {region: 0x165, script: 0x5a, flags: 0x0},
	1011: {region: 0x12f, script: 0x5a, flags: 0x0},
	1012: {region: 0x9e, script: 0x5a, flags: 0x0},
	1013: {region: 0x99, script: 0x22, flags: 0x0},
	1014: {region: 0x165, script: 0x5, flags: 0x0},
	1015: {region: 0x9e, script: 0x5a, flags: 0x0},
	1016: {region: 0x7b, script: 0x5a, flags: 0x0},
	1017: {region: 0x49, script: 0x5a, flags: 0x0},
	1018: {region: 0x33, script: 0x4, flags: 0x1},
	1019: {region: 0x9e, script: 0x5a, flags: 0x0},
	1020: {region: 0x9c, script: 0x5, flags: 0x0},
	1021: {region: 0xda, script: 0x5a, flags: 0x0},
	1022: {region: 0x4f, script: 0x5a, flags: 0x0},
	1023: {region: 0xd1, script: 0x5a, flags: 0x0},
	1024: {region: 0xcf, script: 0x5a, flags: 0x0},
	1025: {region: 0xc3, script: 0x5a, flags: 0x0},
	1026: {region: 0x4c, script: 0x5a, flags: 0x0},
	1027: {region: 0x96, script: 0x7e, flags: 0x0},
	1028: {region: 0xb6, script: 0x5a, flags: 0x0},
	1029: {region: 0x165, script: 0x2c, flags: 0x0},
	1030: {region: 0x165, script: 0x5a, flags: 0x0},
	1032: {region: 0xba, script: 0xe8, flags: 0x0},
	1033: {region: 0x165, script: 0x5a, flags: 0x0},
	1034: {region: 0xc4, script: 0x75, flags: 0x0},
	1035: {region: 0x165, script: 0x5, flags: 0x0},
	1036: {region: 0xb3, script: 0xd4, flags: 0x0},
	1037: {region: 0x6f, script: 0x5a, flags: 0x0},
	1038: {region: 0x165, script: 0x5a, flags: 0x0},
	1039: {region: 0x165, script: 0x5a, flags: 0x0},
	1040: {region: 0x165, script: 0x5a, flags: 0x0},
	1041: {region: 0x165, script: 0x5a, flags: 0x0},
	1042: {region: 0x111, script: 0x5a, flags: 0x0},
	1043: {region: 0x165, script: 0x5a, flags: 0x0},
	1044: {region: 0xe8, script: 0x5, flags: 0x0},
	1045: {region: 0x165, script: 0x5a, flags: 0x0},
	1046: {region: 0x10f, script: 0x5a, flags: 0x0},
	1047: {region: 0x165, script: 0x5a, flags: 0x0},
	1048: {region: 0xe9, script: 0x5a, flags: 0x0},
	1049: {region: 0x165, script: 0x5a, flags: 0x0},
	1050: {region: 0x95, script: 0x5a, flags: 0x0},
	1051: {region: 0x142, script: 0x5a, flags: 0x0},
	1052: {region: 0x10c, script: 0x5a, flags: 0x0},
	1054: {region: 0x10c, script: 0x5a, flags: 0x0},
	1055: {region: 0x72, script: 0x5a, flags: 0x0},
	1056: {region: 0x97, script: 0xca, flags: 0x0},
	1057: {region: 0x165, script: 0x5a, flags: 0x0},
	1058: {region: 0x72, script: 0x5a, flags: 0x0},
	1059: {region: 0x164, script: 0x5a, flags: 0x0},
	1060: {region: 0x165, script: 0x5a, flags: 0x0},
	1061: {region: 0xc3, script: 0x5a, flags: 0x0},
	1062: {region: 0x165, script: 0x5a, flags: 0x0},
	1063: {region: 0x165, script: 0x5a, flags: 0x0},
	1064: {region: 0x165, script: 0x5a, flags: 0x0},
	1065: {region: 0x115, script: 0x5a, flags: 0x0},
	1066: {region: 0x165, script: 0x5a, flags: 0x0},
	1067: {region: 0x165, script: 0x5a, flags: 0x0},
	1068: {region: 0x123, script: 0xeb, flags: 0x0},
	1069: {region: 0x165, script: 0x5a, flags: 0x0},
	1070: {region: 0x165, script: 0x5a, flags: 0x0},
	1071: {region: 0x165, script: 0x5a, flags: 0x0},
	1072: {region: 0x165, script: 0x5a, flags: 0x0},
	1073: {region: 0x27, script: 0x5a, flags: 0x0},
	1074: {region: 0x37, script: 0x5, flags: 0x1},
	1075: {region: 0x99, script: 0xd7, flags: 0x0},
	1076: {region: 0x116, script: 0x5a, flags: 0x0},
	1077: {region: 0x114, script: 0x5a, flags: 0x0},
	1078: {region: 0x99, script: 0x22, flags: 0x0},
	1079: {region: 0x161, script: 0x5a, flags: 0x0},
	1080: {region: 0x165, script: 0x5a, flags: 0x0},
	1081: {region: 0x165, script: 0x5a, flags: 0x0},
	1082: {region: 0x6d, script: 0x5a, flags: 0x0},
	1083: {region: 0x161, script: 0x5a, flags: 0x0},
	1084: {region: 0x165, script: 0x5a, flags: 0x0},
	1085: {region: 0x60, script: 0x5a, flags: 0x0},
	1086: {region: 0x95, script: 0x5a, flags: 0x0},
	1087: {region: 0x165, script: 0x5a, flags: 0x0},
	1088: {region: 0x165, script: 0x5a, flags: 0x0},
	1089: {region: 0x12f, script: 0x5a, flags: 0x0},
	1090: {region: 0x165, script: 0x5a, flags: 0x0},
	1091: {region: 0x84, script: 0x5a, flags: 0x0},
	1092: {region: 0x10c, script: 0x5a, flags: 0x0},
	1093: {region: 0x12f, script: 0x5a, flags: 0x0},
	1094: {region: 0x15f, script: 0x5, flags: 0x0},
	1095: {region: 0x4b, script: 0x5a, flags: 0x0},
	1096: {region: 0x60, script: 0x5a, flags: 0x0},
	1097: {region: 0x165, script: 0x5a, flags: 0x0},
	1098: {region: 0x99, script: 0x22, flags: 0x0},
	1099: {region: 0x95, script: 0x5a, flags: 0x0},
	1100: {region: 0x165, script: 0x5a, flags: 0x0},
	1101: {region: 0x35, script: 0xe, flags: 0x0},
	1102: {region: 0x9b, script: 0xdb, flags: 0x0},
	1103: {region: 0xe9, script: 0x5a, flags: 0x0},
	1104: {region: 0x99, script: 0xe3, flags: 0x0},
	1105: {region: 0xdb, script: 0x22, flags: 0x0},
	1106: {region: 0x165, script: 0x5a, flags: 0x0},
	1107: {region: 0x165, script: 0x5a, flags: 0x0},
	1108: {region: 0x165, script: 0x5a, flags: 0x0},
	1109: {region: 0x165, script: 0x5a, flags: 0x0},
	1110: {region: 0x165, script: 0x5a, flags: 0x0},
	1111: {region: 0x165, script: 0x5a, flags: 0x0},
	1112: {region: 0x165, script: 0x5a, flags: 0x0},
	1113: {region: 0x165, script: 0x5a, flags: 0x0},
	1114: {region: 0xe7, script: 0x5a, flags: 0x0},
	1115: {region: 0x165, script: 0x5a, flags: 0x0},
	1116: {region: 0x165, script: 0x5a, flags: 0x0},
	1117: {region: 0x99, script: 0x52, flags: 0x0},
	1118: {region: 0x53, script: 0xe1, flags: 0x0},
	1119: {region: 0xdb, script: 0x22, flags: 0x0},
	1120: {region: 0xdb, script: 0x22, flags: 0x0},
	1121: {region: 0x99, script: 0xe6, flags: 0x0},
	1122: {region: 0x165, script: 0x5a, flags: 0x0},
	1123: {region: 0x112, script: 0x5a, flags: 0x0},
	1124: {region: 0x131, script: 0x5a, flags: 0x0},
	1125: {region: 0x126, script: 0x5a, flags: 0x0},
	1126: {region: 0x165, script: 0x5a, flags: 0x0},
	1127: {region: 0x3c, script: 0x3, flags: 0x1},
	1128: {region: 0x165, script: 0x5a, flags: 0x0},
	1129: {region: 0x165, script: 0x5a, flags: 0x0},
	1130: {region: 0x165, script: 0x5a, flags: 0x0},
	1131: {region: 0x123, script: 0xeb, flags: 0x0},
	1132: {region: 0xdb, script: 0x22, flags: 0x0},
	1133: {region: 0xdb, script: 0x22, flags: 0x0},
	1134: {region: 0xdb, script: 0x22, flags: 0x0},
	1135: {region: 0x6f, script: 0x2c, flags: 0x0},
	1136: {region: 0x165, script: 0x5a, flags: 0x0},
	1137: {region: 0x6d, script: 0x2c, flags: 0x0},
	1138: {region: 0x165, script: 0x5a, flags: 0x0},
	1139: {region: 0x165, script: 0x5a, flags: 0x0},
	1140: {region: 0x165, script: 0x5a, flags: 0x0},
	1141: {region: 0xd6, script: 0x5a, flags: 0x0},
	1142: {region: 0x127, script: 0x5a, flags: 0x0},
	1143: {region: 0x125, script: 0x5a, flags: 0x0},
	1144: {region: 0x32, script: 0x5a, flags: 0x0},
	1145: {region: 0xdb, script: 0x22, flags: 0x0},
	1146: {region: 0xe7, script: 0x5a, flags: 0x0},
	1147: {region: 0x165, script: 0x5a, flags: 0x0},
	1148: {region: 0x165, script: 0x5a, flags: 0x0},
	1149: {region: 0x32, script: 0x5a, flags: 0x0},
	1150: {region: 0xd4, script: 0x5a, flags: 0x0},
	1151: {region: 0x165, script: 0x5a, flags: 0x0},
	1152: {region: 0x161, script: 0x5a, flags: 0x0},
	1153: {region: 0x165, script: 0x5a, flags: 0x0},
	1154: {region: 0x129, script: 0x5a, flags: 0x0},
	1155: {region: 0x165, script: 0x5a, flags: 0x0},
	1156: {region: 0xce, script: 0x5a, flags: 0x0},
	1157: {region: 0x165, script: 0x5a, flags: 0x0},
	1158: {region: 0xe6, script: 0x5a, flags: 0x0},
	1159: {region: 0x165, script: 0x5a, flags: 0x0},
	1160: {region: 0x165, script: 0x5a, flags: 0x0},
	1161: {region: 0x165, script: 0x5a, flags: 0x0},
	1162: {region: 0x12b, script: 0x5a, flags: 0x0},
	1163: {region: 0x12b, script: 0x5a, flags: 0x0},
	1164: {region: 0x12e, script: 0x5a, flags: 0x0},
	1165: {region: 0x165, script: 0x5, flags: 0x0},
	1166: {region: 0x161, script: 0x5a, flags: 0x0},
	1167: {region: 0x87, script: 0x34, flags: 0x0},
	1168: {region: 0xdb, script: 0x22, flags: 0x0},
	1169: {region: 0xe7, script: 0x5a, flags: 0x0},
	1170: {region: 0x43, script: 0xec, flags: 0x0},
	1171: {region: 0x165, script: 0x5a, flags: 0x0},
	1172: {region: 0x106, script: 0x20, flags: 0x0},
	1173: {region: 0x165, script: 0x5a, flags: 0x0},
	1174: {region: 0x165, script: 0x5a, flags: 0x0},
	1175: {region: 0x131, script: 0x5a, flags: 0x0},
	1176: {region: 0x165, script: 0x5a, flags: 0x0},
	1177: {region: 0x123, script: 0xeb, flags: 0x0},
	1178: {region: 0x32, script: 0x5a, flags: 0x0},
	1179: {region: 0x165, script: 0x5a, flags: 0x0},
	1180: {region: 0x165, script: 0x5a, flags: 0x0},
	1181: {region: 0xce, script: 0x5a, flags: 0x0},
	1182: {region: 0x165, script: 0x5a, flags: 0x0},
	1183: {region: 0x165, script: 0x5a, flags: 0x0},
	1184: {region: 0x12d, script: 0x5a, flags: 0x0},
	1185: {region: 0x165, script: 0x5a, flags: 0x0},
	1187: {region: 0x165, script: 0x5a, flags: 0x0},
	1188: {region: 0xd4, script: 0x5a, flags: 0x0},
	1189: {region: 0x53, script: 0xe4, flags: 0x0},
	1190: {region: 0xe5, script: 0x5a, flags: 0x0},
	1191: {region: 0x165, script: 0x5a, flags: 0x0},
	1192: {region: 0x106, script: 0x20, flags: 0x0},
	1193: {region: 0xba, script: 0x5a, flags: 0x0},
	1194: {region: 0x165, script: 0x5a, flags: 0x0},
	1195: {region: 0x106, script: 0x20, flags: 0x0},
	1196: {region: 0x3f, script: 0x4, flags: 0x1},
	1197: {region: 0x11c, script: 0xf0, flags: 0x0},
	1198: {region: 0x130, script: 0x20, flags: 0x0},
	1199: {region: 0x75, script: 0x5a, flags: 0x0},
	1200: {region: 0x2a, script: 0x5a, flags: 0x0},
	1202: {region: 0x43, script: 0x3, flags: 0x1},
	1203: {region: 0x99, script: 0xe, flags: 0x0},
	1204: {region: 0xe8, script: 0x5, flags: 0x0},
	1205: {region: 0x165, script: 0x5a, flags: 0x0},
	1206: {region: 0x165, script: 0x5a, flags: 0x0},
	1207: {region: 0x165, script: 0x5a, flags: 0x0},
	1208: {region: 0x165, script: 0x5a, flags: 0x0},
	1209: {region: 0x165, script: 0x5a, flags: 0x0},
	1210: {region: 0x165, script: 0x5a, flags: 0x0},
	1211: {region: 0x165, script: 0x5a, flags: 0x0},
	1212: {region: 0x46, script: 0x4, flags: 0x1},
	1213: {region: 0x165, script: 0x5a, flags: 0x0},
	1214: {region: 0xb4, script: 0xf1, flags: 0x0},
	1215: {region: 0x165, script: 0x5a, flags: 0x0},
	1216: {region: 0x161, script: 0x5a, flags: 0x0},
	1217: {region: 0x9e, script: 0x5a, flags: 0x0},
	1218: {region: 0x106, script: 0x5a, flags: 0x0},
	1219: {region: 0x13e, script: 0x5a, flags: 0x0},
	1220: {region: 0x11b, script: 0x5a, flags: 0x0},
	1221: {region: 0x165, script: 0x5a, flags: 0x0},
	1222: {region: 0x36, script: 0x5a, flags: 0x0},
	1223: {region: 0x60, script: 0x5a, flags: 0x0},
	1224: {region: 0xd1, script: 0x5a, flags: 0x0},
	1225: {region: 0x1, script: 0x5a, flags: 0x0},
	1226: {region: 0x106, script: 0x5a, flags: 0x0},
	1227: {region: 0x6a, script: 0x5a, flags: 0x0},
	1228: {region: 0x12f, script: 0x5a, flags: 0x0},
	1229: {region: 0x165, script: 0x5a, flags: 0x0},
	1230: {region: 0x36, script: 0x5a, flags: 0x0},
	1231: {region: 0x4e, script: 0x5a, flags: 0x0},
	1232: {region: 0x165, script: 0x5a, flags: 0x0},
	1233: {region: 0x6f, script: 0x2c, flags: 0x0},
	1234: {region: 0x165, script: 0x5a, flags: 0x0},
	1235: {region: 0xe7, script: 0x5a, flags: 0x0},
	1236: {region: 0x2f, script: 0x5a, flags: 0x0},
	1237: {region: 0x99, script: 0xe6, flags: 0x0},
	1238: {region: 0x99, script: 0x22, flags: 0x0},
	1239: {region: 0x165, script: 0x5a, flags: 0x0},
	1240: {region: 0x165, script: 0x5a, flags: 0x0},
	1241: {region: 0x165, script: 0x5a, flags: 0x0},
	1242: {region: 0x165, script: 0x5a, flags: 0x0},
	1243: {region: 0x165, script: 0x5a, flags: 0x0},
	1244: {region: 0x165, script: 0x5a, flags: 0x0},
	1245: {region: 0x165, script: 0x5a, flags: 0x0},
	1246: {region: 0x165, script: 0x5a, flags: 0x0},
	1247: {region: 0x165, script: 0x5a, flags: 0x0},
	1248: {region: 0x140, script: 0x5a, flags: 0x0},
	1249: {region: 0x165, script: 0x5a, flags: 0x0},
	1250: {region: 0x165, script: 0x5a, flags: 0x0},
	1251: {region: 0xa8, script: 0x5, flags: 0x0},
	1252: {region: 0x165, script: 0x5a, flags: 0x0},
	1253: {region: 0x114, script: 0x5a, flags: 0x0},
	1254: {region: 0x165, script: 0x5a, flags: 0x0},
	1255: {region: 0x165, script: 0x5a, flags: 0x0},
	1256: {region: 0x165, script: 0x5a, flags: 0x0},
	1257: {region: 0x165, script: 0x5a, flags: 0x0},
	1258: {region: 0x99, script: 0x22, flags: 0x0},
	1259: {region: 0x53, script: 0x3b, flags: 0x0},
	1260: {region: 0x165, script: 0x5a, flags: 0x0},
	1261: {region: 0x165, script: 0x5a, flags: 0x0},
	1262: {region: 0x41, script: 0x5a, flags: 0x0},
	1263: {region: 0x165, script: 0x5a, flags: 0x0},
	1264: {region: 0x12b, script: 0x18, flags: 0x0},
	1265: {region: 0x165, script: 0x5a, flags: 0x0},
	1266: {region: 0x161, script: 0x5a, flags: 0x0},
	1267: {region: 0x165, script: 0x5a, flags: 0x0},
	1268: {region: 0x12b, script: 0x62, flags: 0x0},
	1269: {region: 0x12b, script: 0x63, flags: 0x0},
	1270: {region: 0x7d, script: 0x2e, flags: 0x0},
	1271: {region: 0x53, script: 0x67, flags: 0x0},
	1272: {region: 0x10b, script: 0x6c, flags: 0x0},
	1273: {region: 0x108, script: 0x77, flags: 0x0},
	1274: {region: 0x99, script: 0x22, flags: 0x0},
	1275: {region: 0x131, script: 0x5a, flags: 0x0},
	1276: {region: 0x165, script: 0x5a, flags: 0x0},
	1277: {region: 0x9c, script: 0x91, flags: 0x0},
	1278: {region: 0x165, script: 0x5a, flags: 0x0},
	1279: {region: 0x15e, script: 0xcc, flags: 0x0},
	1280: {region: 0x165, script: 0x5a, flags: 0x0},
	1281: {region: 0x165, script: 0x5a, flags: 0x0},
	1282: {region: 0xdb, script: 0x22, flags: 0x0},
	1283: {region: 0x165, script: 0x5a, flags: 0x0},
	1284: {region: 0x165, script: 0x5a, flags: 0x0},
	1285: {region: 0xd1, script: 0x5a, flags: 0x0},
	1286: {region: 0x75, script: 0x5a, flags: 0x0},
	1287: {region: 0x165, script: 0x5a, flags: 0x0},
	1288: {region: 0x165, script: 0x5a, flags: 0x0},
	1289: {region: 0x52, script: 0x5a, flags: 0x0},
	1290: {region: 0x165, script: 0x5a, flags: 0x0},
	1291: {region: 0x165, script: 0x5a, flags: 0x0},
	1292: {region: 0x165, script: 0x5a, flags: 0x0},
	1293: {region: 0x52, script: 0x5a, flags: 0x0},
	1294: {region: 0x165, script: 0x5a, flags: 0x0},
	1295: {region: 0x165, script: 0x5a, flags: 0x0},
	1296: {region: 0x165, script: 0x5a, flags: 0x0},
	1297: {region: 0x165, script: 0x5a, flags: 0x0},
	1298: {region: 0x1, script: 0x3e, flags: 0x0},
	1299: {region: 0x165, script: 0x5a, flags: 0x0},
	1300: {region: 0x165, script: 0x5a, flags: 0x0},
	1301: {region: 0x165, script: 0x5a, flags: 0x0},
	1302: {region: 0x165, script: 0x5a, flags: 0x0},
	1303: {region: 0x165, script: 0x5a, flags: 0x0},
	1304: {region: 0xd6, script: 0x5a, flags: 0x0},
	1305: {region: 0x165, script: 0x5a, flags: 0x0},
	1306: {region: 0x165, script: 0x5a, flags: 0x0},
	1307: {region: 0x165, script: 0x5a, flags: 0x0},
	1308: {region: 0x41, script: 0x5a, flags: 0x0},
	1309: {region: 0x165, script: 0x5a, flags: 0x0},
	1310: {region: 0xcf, script: 0x5a, flags: 0x0},
	1311: {region: 0x4a, script: 0x3, flags: 0x1},
	1312: {region: 0x165, script: 0x5a, flags: 0x0},
	1313: {region: 0x165, script: 0x5a, flags: 0x0},
	1314: {region: 0x165, script: 0x5a, flags: 0x0},
	1315: {region: 0x53, script: 0x5a, flags: 0x0},
	1316: {region: 0x10b, script: 0x5a, flags: 0x0},
	1318: {region: 0xa8, script: 0x5, flags: 0x0},
	1319: {region: 0xd9, script: 0x5a, flags: 0x0},
	1320: {region: 0xba, script: 0xe8, flags: 0x0},
	1321: {region: 0x4d, script: 0x14, flags: 0x1},
	1322: {region: 0x53, script: 0x7d, flags: 0x0},
	1323: {region: 0x165, script: 0x5a, flags: 0x0},
	1324: {region: 0x122, script: 0x5a, flags: 0x0},
	1325: {region: 0xd0, script: 0x5a, flags: 0x0},
	1326: {region: 0x165, script: 0x5a, flags: 0x0},
	1327: {region: 0x161, script: 0x5a, flags: 0x0},
	1329: {region: 0x12b, script: 0x5a, flags: 0x0},
}

// likelyLangList holds lists info associated with likelyLang.
// Size: 582 bytes, 97 elements
var likelyLangList = [97]likelyScriptRegion{
	0:  {region: 0x9c, script: 0x7, flags: 0x0},
	1:  {region: 0xa1, script: 0x78, flags: 0x2},
	2:  {region: 0x11c, script: 0x85, flags: 0x2},
	3:  {region: 0x32, script: 0x5a, flags: 0x0},
	4:  {region: 0x9b, script: 0x5, flags: 0x4},
	5:  {region: 0x9c, script: 0x5, flags: 0x4},
	6:  {region: 0x106, script: 0x20, flags: 0x4},
	7:  {region: 0x9c, script: 0x5, flags: 0x2},
	8:  {region: 0x106, script: 0x20, flags: 0x0},
	9:  {region: 0x38, script: 0x2f, flags: 0x2},
	10: {region: 0x135, script: 0x5a, flags: 0x0},
	11: {region: 0x7b, script: 0xcf, flags: 0x2},
	12: {region: 0x114, script: 0x5a, flags: 0x0},
	13: {region: 0x84, script: 0x1, flags: 0x2},
	14: {region: 0x5d, script: 0x1f, flags: 0x0},
	15: {region: 0x87, script: 0x5f, flags: 0x2},
	16: {region: 0xd6, script: 0x5a, flags: 0x0},
	17: {region: 0x52, script: 0x5, flags: 0x4},
	18: {region: 0x10b, script: 0x5, flags: 0x4},
	19: {region: 0xae, script: 0x20, flags: 0x0},
	20: {region: 0x24, script: 0x5, flags: 0x4},
	21: {region: 0x53, script: 0x5, flags: 0x4},
	22: {region: 0x9c, script: 0x5, flags: 0x4},
	23: {region: 0xc5, script: 0x5, flags: 0x4},
	24: {region: 0x53, script: 0x5, flags: 0x2},
	25: {region: 0x12b, script: 0x5a, flags: 0x0},
	26: {region: 0xb0, script: 0x5, flags: 0x4},
	27: {region: 0x9b, script: 0x5, flags: 0x2},
	28: {region: 0xa5, script: 0x20, flags: 0x0},
	29: {region: 0x53, script: 0x5, flags: 0x4},
	30: {region: 0x12b, script: 0x5a, flags: 0x4},
	31: {region: 0x53, script: 0x5, flags: 0x2},
	32: {region: 0x12b, script: 0x5a, flags: 0x2},
	33: {region: 0xdb, script: 0x22, flags: 0x0},
	34: {region: 0x99, script: 0x5d, flags: 0x2},
	35: {region: 0x83, script: 0x5a, flags: 0x0},
	36: {region: 0x84, script: 0x7c, flags: 0x4},
	37: {region: 0x84, script: 0x7c, flags: 0x2},
	38: {region: 0xc5, script: 0x20, flags: 0x0},
	39: {region: 0x53, script: 0x70, flags: 0x4},
	40: {region: 0x53, script: 0x70, flags: 0x2},
	41: {region: 0xd0, script: 0x5a, flags: 0x0},
	42: {region: 0x4a, script: 0x5, flags: 0x4},
	43: {region: 0x95, script: 0x5, flags: 0x4},
	44: {region: 0x99, script: 0x36, flags: 0x0},
	45: {region: 0xe8, script: 0x5, flags: 0x4},
	46: {region: 0xe8, script: 0x5, flags: 0x2},
	47: {region: 0x9c, script: 0x8b, flags: 0x0},
	48: {region: 0x53, script: 0x8c, flags: 0x2},
	49: {region: 0xba, script: 0xe8, flags: 0x0},
	50: {region: 0xd9, script: 0x5a, flags: 0x4},
	51: {region: 0xe8, script: 0x5, flags: 0x0},
	52: {region: 0x99, script: 0x22, flags: 0x2},
	53: {region: 0x99, script: 0x4f, flags: 0x2},
	54: {region: 0x99, script: 0xd3, flags: 0x2},
	55: {region: 0x105, script: 0x20, flags: 0x0},
	56: {region: 0xbd, script: 0x5a, flags: 0x4},
	57: {region: 0x104, script: 0x5a, flags: 0x4},
	58: {region: 0x106, script: 0x5a, flags: 0x4},
	59: {region: 0x12b, script: 0x5a, flags: 0x4},
	60: {region: 0x124, script: 0x20, flags: 0x0},
	61: {region: 0xe8, script: 0x5, flags: 0x4},
	62: {region: 0xe8, script: 0x5, flags: 0x2},
	63: {region: 0x53, script: 0x5, flags: 0x0},
	64: {region: 0xae, script: 0x20, flags: 0x4},
	65: {region: 0xc5, script: 0x20, flags: 0x4},
	66: {region: 0xae, script: 0x20, flags: 0x2},
	67: {region: 0x99, script: 0xe, flags: 0x0},
	68: {region: 0xdb, script: 0x22, flags: 0x4},
	69: {region: 0xdb, script: 0x22, flags: 0x2},
	70: {region: 0x137, script: 0x5a, flags: 0x0},
	71: {region: 0x24, script: 0x5, flags: 0x4},
	72: {region: 0x53, script: 0x20, flags: 0x4},
	73: {region: 0x24, script: 0x5, flags: 0x2},
	74: {region: 0x8d, script: 0x3c, flags: 0x0},
	75: {region: 0x53, script: 0x3b, flags: 0x4},
	76: {region: 0x53, script: 0x3b, flags: 0x2},
	77: {region: 0x53, script: 0x3b, flags: 0x0},
	78: {region: 0x2f, script: 0x3c, flags: 0x4},
	79: {region: 0x3e, script: 0x3c, flags: 0x4},
	80: {region: 0x7b, script: 0x3c, flags: 0x4},
	81: {region: 0x7e, script: 0x3c, flags: 0x4},
	82: {region: 0x8d, script: 0x3c, flags: 0x4},
	83: {region: 0x95, script: 0x3c, flags: 0x4},
	84: {region: 0xc6, script: 0x3c, flags: 0x4},
	85: {region: 0xd0, script: 0x3c, flags: 0x4},
	86: {region: 0xe2, script: 0x3c, flags: 0x4},
	87: {region: 0xe5, script: 0x3c, flags: 0x4},
	88: {region: 0xe7, script: 0x3c, flags: 0x4},
	89: {region: 0x116, script: 0x3c, flags: 0x4},
	90: {region: 0x123, script: 0x3c, flags: 0x4},
	91: {region: 0x12e, script: 0x3c, flags: 0x4},
	92: {region: 0x135, script: 0x3c, flags: 0x4},
	93: {region: 0x13e, script: 0x3c, flags: 0x4},
	94: {region: 0x12e, script: 0x11, flags: 0x2},
	95: {region: 0x12e, script: 0x37, flags: 0x2},
	96: {region: 0x12e, script: 0x3c, flags: 0x2},
}

type likelyLangScript struct {
	lang   uint16
	script uint16
	flags  uint8
}

// likelyRegion is a lookup table, indexed by regionID, for the most likely
// languages and scripts given incomplete information. If more entries exist
// for a given regionID, lang and script are the index and size respectively
// of the list in likelyRegionList.
// TODO: exclude containers and user-definable regions from the list.
// Size: 2148 bytes, 358 elements
var likelyRegion = [358]likelyLangScript{
	34:  {lang: 0xd7, script: 0x5a, flags: 0x0},
	35:  {lang: 0x3a, script: 0x5, flags: 0x0},
	36:  {lang: 0x0, script: 0x2, flags: 0x1},
	39:  {lang: 0x2, script: 0x2, flags: 0x1},
	40:  {lang: 0x4, script: 0x2, flags: 0x1},
	42:  {lang: 0x3c0, script: 0x5a, flags: 0x0},
	43:  {lang: 0x0, script: 0x5a, flags: 0x0},
	44:  {lang: 0x13e, script: 0x5a, flags: 0x0},
	45:  {lang: 0x41b, script: 0x5a, flags: 0x0},
	46:  {lang: 0x10d, script: 0x5a, flags: 0x0},
	48:  {lang: 0x367, script: 0x5a, flags: 0x0},
	49:  {lang: 0x444, script: 0x5a, flags: 0x0},
	50:  {lang: 0x58, script: 0x5a, flags: 0x0},
	51:  {lang: 0x6, script: 0x2, flags: 0x1},
	53:  {lang: 0xa5, script: 0xe, flags: 0x0},
	54:  {lang: 0x367, script: 0x5a, flags: 0x0},
	55:  {lang: 0x15e, script: 0x5a, flags: 0x0},
	56:  {lang: 0x7e, script: 0x20, flags: 0x0},
	57:  {lang: 0x3a, script: 0x5, flags: 0x0},
	58:  {lang: 0x3d9, script: 0x5a, flags: 0x0},
	59:  {lang: 0x15e, script: 0x5a, flags: 0x0},
	60:  {lang: 0x15e, script: 0x5a, flags: 0x0},
	62:  {lang: 0x31f, script: 0x5a, flags: 0x0},
	63:  {lang: 0x13e, script: 0x5a, flags: 0x0},
	64:  {lang: 0x3a1, script: 0x5a, flags: 0x0},
	65:  {lang: 0x3c0, script: 0x5a, flags: 0x0},
	67:  {lang: 0x8, script: 0x2, flags: 0x1},
	69:  {lang: 0x0, script: 0x5a, flags: 0x0},
	71:  {lang: 0x71, script: 0x20, flags: 0x0},
	73:  {lang: 0x512, script: 0x3e, flags: 0x2},
	74:  {lang: 0x31f, script: 0x5, flags: 0x2},
	75:  {lang: 0x445, script: 0x5a, flags: 0x0},
	76:  {lang: 0x15e, script: 0x5a, flags: 0x0},
	77:  {lang: 0x15e, script: 0x5a, flags: 0x0},
	78:  {lang: 0x10d, script: 0x5a, flags: 0x0},
	79:  {lang: 0x15e, script: 0x5a, flags: 0x0},
	81:  {lang: 0x13e, script: 0x5a, flags: 0x0},
	82:  {lang: 0x15e, script: 0x5a, flags: 0x0},
	83:  {lang: 0xa, script: 0x4, flags: 0x1},
	84:  {lang: 0x13e, script: 0x5a, flags: 0x0},
	85:  {lang: 0x0, script: 0x5a, flags: 0x0},
	86:  {lang: 0x13e, script: 0x5a, flags: 0x0},
	89:  {lang: 0x13e, script: 0x5a, flags: 0x0},
	90:  {lang: 0x3c0, script: 0x5a, flags: 0x0},
	91:  {lang: 0x3a1, script: 0x5a, flags: 0x0},
	93:  {lang: 0xe, script: 0x2, flags: 0x1},
	94:  {lang: 0xfa, script: 0x5a, flags: 0x0},
	96:  {lang: 0x10d, script: 0x5a, flags: 0x0},
	98:  {lang: 0x1, script: 0x5a, flags: 0x0},
	99:  {lang: 0x101, script: 0x5a, flags: 0x0},
	101: {lang: 0x13e, script: 0x5a, flags: 0x0},
	103: {lang: 0x10, script: 0x2, flags: 0x1},
	104: {lang: 0x13e, script: 0x5a, flags: 0x0},
	105: {lang: 0x13e, script: 0x5a, flags: 0x0},
	106: {lang: 0x140, script: 0x5a, flags: 0x0},
	107: {lang: 0x3a, script: 0x5, flags: 0x0},
	108: {lang: 0x3a, script: 0x5, flags: 0x0},
	109: {lang: 0x46f, script: 0x2c, flags: 0x0},
	110: {lang: 0x13e, script: 0x5a, flags: 0x0},
	111: {lang: 0x12, script: 0x2, flags: 0x1},
	113: {lang: 0x10d, script: 0x5a, flags: 0x0},
	114: {lang: 0x151, script: 0x5a, flags: 0x0},
	115: {lang: 0x1c0, script: 0x22, flags: 0x2},
	118: {lang: 0x158, script: 0x5a, flags: 0x0},
	120: {lang: 0x15e, script: 0x5a, flags: 0x0},
	122: {lang: 0x15e, script: 0x5a, flags: 0x0},
	123: {lang: 0x14, script: 0x2, flags: 0x1},
	125: {lang: 0x16, script: 0x3, flags: 0x1},
	126: {lang: 0x15e, script: 0x5a, flags: 0x0},
	128: {lang: 0x21, script: 0x5a, flags: 0x0},
	130: {lang: 0x245, script: 0x5a, flags: 0x0},
	132: {lang: 0x15e, script: 0x5a, flags: 0x0},
	133: {lang: 0x15e, script: 0x5a, flags: 0x0},
	134: {lang: 0x13e, script: 0x5a, flags: 0x0},
	135: {lang: 0x19, script: 0x2, flags: 0x1},
	136: {lang: 0x0, script: 0x5a, flags: 0x0},
	137: {lang: 0x13e, script: 0x5a, flags: 0x0},
	139: {lang: 0x3c0, script: 0x5a, flags: 0x0},
	141: {lang: 0x529, script: 0x3c, flags: 0x0},
	142: {lang: 0x0, script: 0x5a, flags: 0x0},
	143: {lang: 0x13e, script: 0x5a, flags: 0x0},
	144: {lang: 0x1d1, script: 0x5a, flags: 0x0},
	145: {lang: 0x1d4, script: 0x5a, flags: 0x0},
	146: {lang: 0x1d5, script: 0x5a, flags: 0x0},
	148: {lang: 0x13e, script: 0x5a, flags: 0x0},
	149: {lang: 0x1b, script: 0x2, flags: 0x1},
	151: {lang: 0x1bc, script: 0x3e, flags: 0x0},
	153: {lang: 0x1d, script: 0x3, flags: 0x1},
	155: {lang: 0x3a, script: 0x5, flags: 0x0},
	156: {lang: 0x20, script: 0x2, flags: 0x1},
	157: {lang: 0x1f8, script: 0x5a, flags: 0x0},
	158: {lang: 0x1f9, script: 0x5a, flags: 0x0},
	161: {lang: 0x3a, script: 0x5, flags: 0x0},
	162: {lang: 0x200, script: 0x49, flags: 0x0},
	164: {lang: 0x445, script: 0x5a, flags: 0x0},
	165: {lang: 0x28a, script: 0x20, flags: 0x0},
	166: {lang: 0x22, script: 0x3, flags: 0x1},
	168: {lang: 0x25, script: 0x2, flags: 0x1},
	170: {lang: 0x254, script: 0x53, flags: 0x0},
	171: {lang: 0x254, script: 0x53, flags: 0x0},
	172: {lang: 0x3a, script: 0x5, flags: 0x0},
	174: {lang: 0x3e2, script: 0x20, flags: 0x0},
	175: {lang: 0x27, script: 0x2, flags: 0x1},
	176: {lang: 0x3a, script: 0x5, flags: 0x0},
	178: {lang: 0x10d, script: 0x5a, flags: 0x0},
	179: {lang: 0x40c, script: 0xd4, flags: 0x0},
	181: {lang: 0x43b, script: 0x5a, flags: 0x0},
	182: {lang: 0x2c0, script: 0x5a, flags: 0x0},
	183: {lang: 0x15e, script: 0x5a, flags: 0x0},
	184: {lang: 0x2c7, script: 0x5a, flags: 0x0},
	185: {lang: 0x3a, script: 0x5, flags: 0x0},
	186: {lang: 0x29, script: 0x2, flags: 0x1},
	187: {lang: 0x15e, script: 0x5a, flags: 0x0},
	188: {lang: 0x2b, script: 0x2, flags: 0x1},
	189: {lang: 0x432, script: 0x5a, flags: 0x0},
	190: {lang: 0x15e, script: 0x5a, flags: 0x0},
	191: {lang: 0x2f1, script: 0x5a, flags: 0x0},
	194: {lang: 0x2d, script: 0x2, flags: 0x1},
	195: {lang: 0xa0, script: 0x5a, flags: 0x0},
	196: {lang: 0x2f, script: 0x2, flags: 0x1},
	197: {lang: 0x31, script: 0x2, flags: 0x1},
	198: {lang: 0x33, script: 0x2, flags: 0x1},
	200: {lang: 0x15e, script: 0x5a, flags: 0x0},
	201: {lang: 0x35, script: 0x2, flags: 0x1},
	203: {lang: 0x320, script: 0x5a, flags: 0x0},
	204: {lang: 0x37, script: 0x3, flags: 0x1},
	205: {lang: 0x128, script: 0xea, flags: 0x0},
	207: {lang: 0x13e, script: 0x5a, flags: 0x0},
	208: {lang: 0x31f, script: 0x5a, flags: 0x0},
	209: {lang: 0x3c0, script: 0x5a, flags: 0x0},
	210: {lang: 0x16, script: 0x5a, flags: 0x0},
	211: {lang: 0x15e, script: 0x5a, flags: 0x0},
	212: {lang: 0x1b4, script: 0x5a, flags: 0x0},
	214: {lang: 0x1b4, script: 0x5, flags: 0x2},
	216: {lang: 0x13e, script: 0x5a, flags: 0x0},
	217: {lang: 0x367, script: 0x5a, flags: 0x0},
	218: {lang: 0x347, script: 0x5a, flags: 0x0},
	219: {lang: 0x351, script: 0x22, flags: 0x0},
	225: {lang: 0x3a, script: 0x5, flags: 0x0},
	226: {lang: 0x13e, script: 0x5a, flags: 0x0},
	228: {lang: 0x13e, script: 0x5a, flags: 0x0},
	229: {lang: 0x15e, script: 0x5a, flags: 0x0},
	230: {lang: 0x486, script: 0x5a, flags: 0x0},
	231: {lang: 0x153, script: 0x5a, flags: 0x0},
	232: {lang: 0x3a, script: 0x3, flags: 0x1},
	233: {lang: 0x3b3, script: 0x5a, flags: 0x0},
	234: {lang: 0x15e, script: 0x5a, flags: 0x0},
	236: {lang: 0x13e, script: 0x5a, flags: 0x0},
	237: {lang: 0x3a, script: 0x5, flags: 0x0},
	238: {lang: 0x3c0, script: 0x5a, flags: 0x0},
	240: {lang: 0x3a2, script: 0x5a, flags: 0x0},
	241: {lang: 0x194, script: 0x5a, flags: 0x0},
	243: {lang: 0x3a, script: 0x5, flags: 0x0},
	258: {lang: 0x15e, script: 0x5a, flags: 0x0},
	260: {lang: 0x3d, script: 0x2, flags: 0x1},
	261: {lang: 0x432, script: 0x20, flags: 0x0},
	262: {lang: 0x3f, script: 0x2, flags: 0x1},
	263: {lang: 0x3e5, script: 0x5a, flags: 0x0},
	264: {lang: 0x3a, script: 0x5, flags: 0x0},
	266: {lang: 0x15e, script: 0x5a, flags: 0x0},
	267: {lang: 0x3a, script: 0x5, flags: 0x0},
	268: {lang: 0x41, script: 0x2, flags: 0x1},
	271: {lang: 0x416, script: 0x5a, flags: 0x0},
	272: {lang: 0x347, script: 0x5a, flags: 0x0},
	273: {lang: 0x43, script: 0x2, flags: 0x1},
	275: {lang: 0x1f9, script: 0x5a, flags: 0x0},
	276: {lang: 0x15e, script: 0x5a, flags: 0x0},
	277: {lang: 0x429, script: 0x5a, flags: 0x0},
	278: {lang: 0x367, script: 0x5a, flags: 0x0},
	280: {lang: 0x3c0, script: 0x5a, flags: 0x0},
	282: {lang: 0x13e, script: 0x5a, flags: 0x0},
	284: {lang: 0x45, script: 0x2, flags: 0x1},
	288: {lang: 0x15e, script: 0x5a, flags: 0x0},
	289: {lang: 0x15e, script: 0x5a, flags: 0x0},
	290: {lang: 0x47, script: 0x2, flags: 0x1},
	291: {lang: 0x49, script: 0x3, flags: 0x1},
	292: {lang: 0x4c, script: 0x2, flags: 0x1},
	293: {lang: 0x477, script: 0x5a, flags: 0x0},
	294: {lang: 0x3c0, script: 0x5a, flags: 0x0},
	295: {lang: 0x476, script: 0x5a, flags: 0x0},
	296: {lang: 0x4e, script: 0x2, flags: 0x1},
	297: {lang: 0x482, script: 0x5a, flags: 0x0},
	299: {lang: 0x50, script: 0x4, flags: 0x1},
	301: {lang: 0x4a0, script: 0x5a, flags: 0x0},
	302: {lang: 0x54, script: 0x2, flags: 0x1},
	303: {lang: 0x445, script: 0x5a, flags: 0x0},
	304: {lang: 0x56, script: 0x3, flags: 0x1},
	305: {lang: 0x445, script: 0x5a, flags: 0x0},
	309: {lang: 0x512, script: 0x3e, flags: 0x2},
	310: {lang: 0x13e, script: 0x5a, flags: 0x0},
	311: {lang: 0x4bc, script: 0x5a, flags: 0x0},
	312: {lang: 0x1f9, script: 0x5a, flags: 0x0},
	315: {lang: 0x13e, script: 0x5a, flags: 0x0},
	318: {lang: 0x4c3, script: 0x5a, flags: 0x0},
	319: {lang: 0x8a, script: 0x5a, flags: 0x0},
	320: {lang: 0x15e, script: 0x5a, flags: 0x0},
	322: {lang: 0x41b, script: 0x5a, flags: 0x0},
	333: {lang: 0x59, script: 0x2, flags: 0x1},
	350: {lang: 0x3a, script: 0x5, flags: 0x0},
	351: {lang: 0x5b, script: 0x2, flags: 0x1},
	356: {lang: 0x423, script: 0x5a, flags: 0x0},
}

// likelyRegionList holds lists info associated with likelyRegion.
// Size: 558 bytes, 93 elements
var likelyRegionList = [93]likelyLangScript{
	0:  {lang: 0x148, script: 0x5, flags: 0x0},
	1:  {lang: 0x476, script: 0x5a, flags: 0x0},
	2:  {lang: 0x431, script: 0x5a, flags: 0x0},
	3:  {lang: 0x2ff, script: 0x20, flags: 0x0},
	4:  {lang: 0x1d7, script: 0x8, flags: 0x0},
	5:  {lang: 0x274, script: 0x5a, flags: 0x0},
	6:  {lang: 0xb7, script: 0x5a, flags: 0x0},
	7:  {lang: 0x432, script: 0x20, flags: 0x0},
	8:  {lang: 0x12d, script: 0xec, flags: 0x0},
	9:  {lang: 0x351, script: 0x22, flags: 0x0},
	10: {lang: 0x529, script: 0x3b, flags: 0x0},
	11: {lang: 0x4ac, script: 0x5, flags: 0x0},
	12: {lang: 0x523, script: 0x5a, flags: 0x0},
	13: {lang: 0x29a, script: 0xeb, flags: 0x0},
	14: {lang: 0x136, script: 0x34, flags: 0x0},
	15: {lang: 0x48a, script: 0x5a, flags: 0x0},
	16: {lang: 0x3a, script: 0x5, flags: 0x0},
	17: {lang: 0x15e, script: 0x5a, flags: 0x0},
	18: {lang: 0x27, script: 0x2c, flags: 0x0},
	19: {lang: 0x139, script: 0x5a, flags: 0x0},
	20: {lang: 0x26a, script: 0x5, flags: 0x2},
	21: {lang: 0x512, script: 0x3e, flags: 0x2},
	22: {lang: 0x210, script: 0x2e, flags: 0x0},
	23: {lang: 0x5, script: 0x20, flags: 0x0},
	24: {lang: 0x274, script: 0x5a, flags: 0x0},
	25: {lang: 0x136, script: 0x34, flags: 0x0},
	26: {lang: 0x2ff, script: 0x20, flags: 0x0},
	27: {lang: 0x1e1, script: 0x5a, flags: 0x0},
	28: {lang: 0x31f, script: 0x5, flags: 0x0},
	29: {lang: 0x1be, script: 0x22, flags: 0x0},
	30: {lang: 0x4b4, script: 0x5, flags: 0x0},
	31: {lang: 0x236, script: 0x75, flags: 0x0},
	32: {lang: 0x148, script: 0x5, flags: 0x0},
	33: {lang: 0x476, script: 0x5a, flags: 0x0},
	34: {lang: 0x24a, script: 0x4e, flags: 0x0},
	35: {lang: 0xe6, script: 0x5, flags: 0x0},
	36: {lang: 0x226, script: 0xeb, flags: 0x0},
	37: {lang: 0x3a, script: 0x5, flags: 0x0},
	38: {lang: 0x15e, script: 0x5a, flags: 0x0},
	39: {lang: 0x2b8, script: 0x57, flags: 0x0},
	40: {lang: 0x226, script: 0xeb, flags: 0x0},
	41: {lang: 0x3a, script: 0x5, flags: 0x0},
	42: {lang: 0x15e, script: 0x5a, flags: 0x0},
	43: {lang: 0x3dc, script: 0x5a, flags: 0x0},
	44: {lang: 0x4ae, script: 0x20, flags: 0x0},
	45: {lang: 0x2ff, script: 0x20, flags: 0x0},
	46: {lang: 0x431, script: 0x5a, flags: 0x0},
	47: {lang: 0x331, script: 0x75, flags: 0x0},
	48: {lang: 0x213, script: 0x5a, flags: 0x0},
	49: {lang: 0x30b, script: 0x20, flags: 0x0},
	50: {lang: 0x242, script: 0x5, flags: 0x0},
	51: {lang: 0x529, script: 0x3c, flags: 0x0},
	52: {lang: 0x3c0, script: 0x5a, flags: 0x0},
	53: {lang: 0x3a, script: 0x5, flags: 0x0},
	54: {lang: 0x15e, script: 0x5a, flags: 0x0},
	55: {lang: 0x2ed, script: 0x5a, flags: 0x0},
	56: {lang: 0x4b4, script: 0x5, flags: 0x0},
	57: {lang: 0x88, script: 0x22, flags: 0x0},
	58: {lang: 0x4b4, script: 0x5, flags: 0x0},
	59: {lang: 0x4b4, script: 0x5, flags: 0x0},
	60: {lang: 0xbe, script: 0x22, flags: 0x0},
	61: {lang: 0x3dc, script: 0x5a, flags: 0x0},
	62: {lang: 0x7e, script: 0x20, flags: 0x0},
	63: {lang: 0x3e2, script: 0x20, flags: 0x0},
	64: {lang: 0x267, script: 0x5a, flags: 0x0},
	65: {lang: 0x444, script: 0x5a, flags: 0x0},
	66: {lang: 0x512, script: 0x3e, flags: 0x0},
	67: {lang: 0x412, script: 0x5a, flags: 0x0},
	68: {lang: 0x4ae, script: 0x20, flags: 0x0},
	69: {lang: 0x3a, script: 0x5, flags: 0x0},
	70: {lang: 0x15e, script: 0x5a, flags: 0x0},
	71: {lang: 0x15e, script: 0x5a, flags: 0x0},
	72: {lang: 0x35, script: 0x5, flags: 0x0},
	73: {lang: 0x46b, script: 0xeb, flags: 0x0},
	74: {lang: 0x2ec, script: 0x5, flags: 0x0},
	75: {lang: 0x30f, script: 0x75, flags: 0x0},
	76: {lang: 0x467, script: 0x20, flags: 0x0},
	77: {lang: 0x148, script: 0x5, flags: 0x0},
	78: {lang: 0x3a, script: 0x5, flags: 0x0},
	79: {lang: 0x15e, script: 0x5a, flags: 0x0},
	80: {lang: 0x48a, script: 0x5a, flags: 0x0},
	81: {lang: 0x58, script: 0x5, flags: 0x0},
	82: {lang: 0x219, script: 0x20, flags: 0x0},
	83: {lang: 0x81, script: 0x34, flags: 0x0},
	84: {lang: 0x529, script: 0x3c, flags: 0x0},
	85: {lang: 0x48c, script: 0x5a, flags: 0x0},
	86: {lang: 0x4ae, script: 0x20, flags: 0x0},
	87: {lang: 0x512, script: 0x3e, flags: 0x0},
	88: {lang: 0x3b3, script: 0x5a, flags: 0x0},
	89: {lang: 0x431, script: 0x5a, flags: 0x0},
	90: {lang: 0x432, script: 0x20, flags: 0x0},
	91: {lang: 0x15e, script: 0x5a, flags: 0x0},
	92: {lang: 0x446, script: 0x5, flags: 0x0},
}

type likelyTag struct {
	lang   uint16
	region uint16
	script uint16
}

// Size: 198 bytes, 33 elements
var likelyRegionGroup = [33]likelyTag{
	1:  {lang: 0x139, region: 0xd6, script: 0x5a},
	2:  {lang: 0x139, region: 0x135, script: 0x5a},
	3:  {lang: 0x3c0, region: 0x41, script: 0x5a},
	4:  {lang: 0x139, region: 0x2f, script: 0x5a},
	5:  {lang: 0x139, region: 0xd6, script: 0x5a},
	6:  {lang: 0x13e, region: 0xcf, script: 0x5a},
	7:  {lang: 0x445, region: 0x12f, script: 0x5a},
	8:  {lang: 0x3a, region: 0x6b, script: 0x5},
	9:  {lang: 0x445, region: 0x4b, script: 0x5a},
	10: {lang: 0x139, region: 0x161, script: 0x5a},
	11: {lang: 0x139, region: 0x135, script: 0x5a},
	12: {lang: 0x139, region: 0x135, script: 0x5a},
	13: {lang: 0x13e, region: 0x59, script: 0x5a},
	14: {lang: 0x529, region: 0x53, script: 0x3b},
	15: {lang: 0x1be, region: 0x99, script: 0x22},
	16: {lang: 0x1e1, region: 0x95, script: 0x5a},
	17: {lang: 0x1f9, region: 0x9e, script: 0x5a},
	18: {lang: 0x139, region: 0x2f, script: 0x5a},
	19: {lang: 0x139, region: 0xe6, script: 0x5a},
	20: {lang: 0x139, region: 0x8a, script: 0x5a},
	21: {lang: 0x41b, region: 0x142, script: 0x5a},
	22: {lang: 0x529, region: 0x53, script: 0x3b},
	23: {lang: 0x4bc, region: 0x137, script: 0x5a},
	24: {lang: 0x3a, region: 0x108, script: 0x5},
	25: {lang: 0x3e2, region: 0x106, script: 0x20},
	26: {lang: 0x3e2, region: 0x106, script: 0x20},
	27: {lang: 0x139, region: 0x7b, script: 0x5a},
	28: {lang: 0x10d, region: 0x60, script: 0x5a},
	29: {lang: 0x139, region: 0xd6, script: 0x5a},
	30: {lang: 0x13e, region: 0x1f, script: 0x5a},
	31: {lang: 0x139, region: 0x9a, script: 0x5a},
	32: {lang: 0x139, region: 0x7b, script: 0x5a},
}

// Size: 264 bytes, 33 elements
var regionContainment = [33]uint64{
	// Entry 0 - 1F
	0x00000001ffffffff, 0x00000000200007a2, 0x0000000000003044, 0x0000000000000008,
	0x00000000803c0010, 0x0000000000000020, 0x0000000000000040, 0x0000000000000080,
	0x0000000000000100, 0x0000000000000200, 0x0000000000000400, 0x000000004000384c,
	0x0000000000001000, 0x0000000000002000, 0x0000000000004000, 0x0000000000008000,
	0x0000000000010000, 0x0000000000020000, 0x0000000000040000, 0x0000000000080000,
	0x0000000000100000, 0x0000000000200000, 0x0000000001c1c000, 0x0000000000800000,
	0x0000000001000000, 0x000000001e020000, 0x0000000004000000, 0x0000000008000000,
	0x0000000010000000, 0x00000000200006a0, 0x0000000040002048, 0x0000000080000000,
	// Entry 20 - 3F
	0x0000000100000000,
}

// regionInclusion maps region identifiers to sets of regions in regionInclusionBits,
// where each set holds all groupings that are directly connected in a region
// containment graph.
// Size: 358 bytes, 358 elements
var regionInclusion = [358]uint8{
	// Entry 0 - 3F
	0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
	0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
	0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
	0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e,
	0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x26, 0x23,
	0x24, 0x26, 0x27, 0x22, 0x28, 0x29, 0x2a, 0x2b,
	0x26, 0x2c, 0x24, 0x23, 0x26, 0x25, 0x2a, 0x2d,
	0x2e, 0x24, 0x2f, 0x2d, 0x26, 0x30, 0x31, 0x28,
	// Entry 40 - 7F
	0x26, 0x28, 0x26, 0x25, 0x31, 0x22, 0x32, 0x33,
	0x34, 0x30, 0x22, 0x27, 0x27, 0x27, 0x35, 0x2d,
	0x29, 0x28, 0x27, 0x36, 0x28, 0x22, 0x34, 0x23,
	0x21, 0x26, 0x2d, 0x26, 0x22, 0x37, 0x2e, 0x35,
	0x2a, 0x22, 0x2f, 0x38, 0x26, 0x26, 0x21, 0x39,
	0x39, 0x28, 0x38, 0x39, 0x39, 0x2f, 0x3a, 0x2f,
	0x20, 0x21, 0x38, 0x3b, 0x28, 0x3c, 0x2c, 0x21,
	0x2a, 0x35, 0x27, 0x38, 0x26, 0x24, 0x28, 0x2c,
	// Entry 80 - BF
	0x2d, 0x23, 0x30, 0x2d, 0x2d, 0x26, 0x27, 0x3a,
	0x22, 0x34, 0x3c, 0x2d, 0x28, 0x36, 0x22, 0x34,
	0x3a, 0x26, 0x2e, 0x21, 0x39, 0x31, 0x38, 0x24,
	0x2c, 0x25, 0x22, 0x24, 0x25, 0x2c, 0x3a, 0x2c,
	0x26, 0x24, 0x36, 0x21, 0x2f, 0x3d, 0x31, 0x3c,
	0x2f, 0x26, 0x36, 0x36, 0x24, 0x26, 0x3d, 0x31,
	0x24, 0x26, 0x35, 0x25, 0x2d, 0x32, 0x38, 0x2a,
	0x38, 0x39, 0x39, 0x35, 0x33, 0x23, 0x26, 0x2f,
	// Entry C0 - FF
	0x3c, 0x21, 0x23, 0x2d, 0x31, 0x36, 0x36, 0x3c,
	0x26, 0x2d, 0x26, 0x3a, 0x2f, 0x25, 0x2f, 0x34,
	0x31, 0x2f, 0x32, 0x3b, 0x2d, 0x2b, 0x2d, 0x21,
	0x34, 0x2a, 0x2c, 0x25, 0x21, 0x3c, 0x24, 0x29,
	0x2b, 0x24, 0x34, 0x21, 0x28, 0x29, 0x3b, 0x31,
	0x25, 0x2e, 0x30, 0x29, 0x26, 0x24, 0x3a, 0x21,
	0x3c, 0x28, 0x21, 0x24, 0x21, 0x21, 0x1f, 0x21,
	0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
	// Entry 100 - 13F
	0x21, 0x21, 0x2f, 0x21, 0x2e, 0x23, 0x33, 0x2f,
	0x24, 0x3b, 0x2f, 0x39, 0x38, 0x31, 0x2d, 0x3a,
	0x2c, 0x2e, 0x2d, 0x23, 0x2d, 0x2f, 0x28, 0x2f,
	0x27, 0x33, 0x34, 0x26, 0x24, 0x32, 0x22, 0x26,
	0x27, 0x22, 0x2d, 0x31, 0x3d, 0x29, 0x31, 0x3d,
	0x39, 0x29, 0x31, 0x24, 0x26, 0x29, 0x36, 0x2f,
	0x33, 0x2f, 0x21, 0x22, 0x21, 0x30, 0x28, 0x3d,
	0x23, 0x26, 0x21, 0x28, 0x26, 0x26, 0x31, 0x3b,
	// Entry 140 - 17F
	0x29, 0x21, 0x29, 0x21, 0x21, 0x21, 0x21, 0x21,
	0x21, 0x21, 0x21, 0x21, 0x21, 0x23, 0x21, 0x21,
	0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
	0x21, 0x21, 0x21, 0x21, 0x21, 0x24, 0x24, 0x2f,
	0x23, 0x32, 0x2f, 0x27, 0x2f, 0x21,
}

// regionInclusionBits is an array of bit vectors where every vector represents
// a set of region groupings.  These sets are used to compute the distance
// between two regions for the purpose of language matching.
// Size: 584 bytes, 73 elements
var regionInclusionBits = [73]uint64{
	// Entry 0 - 1F
	0x0000000102400813, 0x00000000200007a3, 0x0000000000003844, 0x0000000040000808,
	0x00000000803c0011, 0x0000000020000022, 0x0000000040000844, 0x0000000020000082,
	0x0000000000000102, 0x0000000020000202, 0x0000000020000402, 0x000000004000384d,
	0x0000000000001804, 0x0000000040002804, 0x0000000000404000, 0x0000000000408000,
	0x0000000000410000, 0x0000000002020000, 0x0000000000040010, 0x0000000000080010,
	0x0000000000100010, 0x0000000000200010, 0x0000000001c1c001, 0x0000000000c00000,
	0x0000000001400000, 0x000000001e020001, 0x0000000006000000, 0x000000000a000000,
	0x0000000012000000, 0x00000000200006a2, 0x0000000040002848, 0x0000000080000010,
	// Entry 20 - 3F
	0x0000000100000001, 0x0000000000000001, 0x0000000080000000, 0x0000000000020000,
	0x0000000001000000, 0x0000000000008000, 0x0000000000002000, 0x0000000000000200,
	0x0000000000000008, 0x0000000000200000, 0x0000000110000000, 0x0000000000040000,
	0x0000000008000000, 0x0000000000000020, 0x0000000104000000, 0x0000000000000080,
	0x0000000000001000, 0x0000000000010000, 0x0000000000000400, 0x0000000004000000,
	0x0000000000000040, 0x0000000010000000, 0x0000000000004000, 0x0000000101000000,
	0x0000000108000000, 0x0000000000000100, 0x0000000100020000, 0x0000000000080000,
	0x0000000000100000, 0x0000000000800000, 0x00000001ffffffff, 0x0000000122400fb3,
	// Entry 40 - 5F
	0x00000001827c0813, 0x000000014240385f, 0x0000000103c1c813, 0x000000011e420813,
	0x0000000112000001, 0x0000000106000001, 0x0000000101400001, 0x000000010a000001,
	0x0000000102020001,
}

// regionInclusionNext marks, for each entry in regionInclusionBits, the set of
// all groups that are reachable from the groups set in the respective entry.
// Size: 73 bytes, 73 elements
var regionInclusionNext = [73]uint8{
	// Entry 0 - 3F
	0x3e, 0x3f, 0x0b, 0x0b, 0x40, 0x01, 0x0b, 0x01,
	0x01, 0x01, 0x01, 0x41, 0x0b, 0x0b, 0x16, 0x16,
	0x16, 0x19, 0x04, 0x04, 0x04, 0x04, 0x42, 0x16,
	0x16, 0x43, 0x19, 0x19, 0x19, 0x01, 0x0b, 0x04,
	0x00, 0x00, 0x1f, 0x11, 0x18, 0x0f, 0x0d, 0x09,
	0x03, 0x15, 0x44, 0x12, 0x1b, 0x05, 0x45, 0x07,
	0x0c, 0x10, 0x0a, 0x1a, 0x06, 0x1c, 0x0e, 0x46,
	0x47, 0x08, 0x48, 0x13, 0x14, 0x17, 0x3e, 0x3e,
	// Entry 40 - 7F
	0x3e, 0x3e, 0x3e, 0x3e, 0x43, 0x43, 0x42, 0x43,
	0x43,
}

type parentRel struct {
	lang       uint16
	script     uint16
	maxScript  uint16
	toRegion   uint16
	fromRegion []uint16
}

// Size: 414 bytes, 5 elements
var parents = [5]parentRel{
	0: {lang: 0x139, script: 0x0, maxScript: 0x5a, toRegion: 0x1, fromRegion: []uint16{0x1a, 0x25, 0x26, 0x2f, 0x34, 0x36, 0x3d, 0x42, 0x46, 0x48, 0x49, 0x4a, 0x50, 0x52, 0x5c, 0x5d, 0x61, 0x64, 0x6d, 0x73, 0x74, 0x75, 0x7b, 0x7c, 0x7f, 0x80, 0x81, 0x83, 0x8c, 0x8d, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9f, 0xa0, 0xa4, 0xa7, 0xa9, 0xad, 0xb1, 0xb4, 0xb5, 0xbf, 0xc6, 0xca, 0xcb, 0xcc, 0xce, 0xd0, 0xd2, 0xd5, 0xd6, 0xdd, 0xdf, 0xe0, 0xe6, 0xe7, 0xe8, 0xeb, 0xf0, 0x107, 0x109, 0x10a, 0x10b, 0x10d, 0x10e, 0x112, 0x117, 0x11b, 0x11d, 0x11f, 0x125, 0x129, 0x12c, 0x12d, 0x12f, 0x131, 0x139, 0x13c, 0x13f, 0x142, 0x161, 0x162, 0x164}},
	1: {lang: 0x139, script: 0x0, maxScript: 0x5a, toRegion: 0x1a, fromRegion: []uint16{0x2e, 0x4e, 0x60, 0x63, 0x72, 0xd9, 0x10c, 0x10f}},
	2: {lang: 0x13e, script: 0x0, maxScript: 0x5a, toRegion: 0x1f, fromRegion: []uint16{0x2c, 0x3f, 0x41, 0x48, 0x51, 0x54, 0x56, 0x59, 0x65, 0x69, 0x89, 0x8f, 0xcf, 0xd8, 0xe2, 0xe4, 0xec, 0xf1, 0x11a, 0x135, 0x136, 0x13b}},
	3: {lang: 0x3c0, script: 0x0, maxScript: 0x5a, toRegion: 0xee, fromRegion: []uint16{0x2a, 0x4e, 0x5a, 0x86, 0x8b, 0xb7, 0xc6, 0xd1, 0x118, 0x126}},
	4: {lang: 0x529, script: 0x3c, maxScript: 0x3c, toRegion: 0x8d, fromRegion: []uint16{0xc6}},
}

// Total table size 30244 bytes (29KiB); checksum: B6B15F30
07070100000F27000081A4000000000000000000000001645E367C000004BB000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/text/internal/language/tags.go    // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package language

// MustParse is like Parse, but panics if the given BCP 47 tag cannot be parsed.
// It simplifies safe initialization of Tag values.
func MustParse(s string) Tag {
	t, err := Parse(s)
	if err != nil {
		panic(err)
	}
	return t
}

// MustParseBase is like ParseBase, but panics if the given base cannot be parsed.
// It simplifies safe initialization of Base values.
func MustParseBase(s string) Language {
	b, err := ParseBase(s)
	if err != nil {
		panic(err)
	}
	return b
}

// MustParseScript is like ParseScript, but panics if the given script cannot be
// parsed. It simplifies safe initialization of Script values.
func MustParseScript(s string) Script {
	scr, err := ParseScript(s)
	if err != nil {
		panic(err)
	}
	return scr
}

// MustParseRegion is like ParseRegion, but panics if the given region cannot be
// parsed. It simplifies safe initialization of Region values.
func MustParseRegion(s string) Region {
	r, err := ParseRegion(s)
	if err != nil {
		panic(err)
	}
	return r
}

// Und is the root language.
var Und Tag
 07070100000F28000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/golang.org/x/text/internal/tag 07070100000F29000081A4000000000000000000000001645E367C0000096F000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/golang.org/x/text/internal/tag/tag.go  // Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package tag contains functionality handling tags and related data.
package tag // import "golang.org/x/text/internal/tag"

import "sort"

// An Index converts tags to a compact numeric value.
//
// All elements are of size 4. Tags may be up to 4 bytes long. Excess bytes can
// be used to store additional information about the tag.
type Index string

// Elem returns the element data at the given index.
func (s Index) Elem(x int) string {
	return string(s[x*4 : x*4+4])
}

// Index reports the index of the given key or -1 if it could not be found.
// Only the first len(key) bytes from the start of the 4-byte entries will be
// considered for the search and the first match in Index will be returned.
func (s Index) Index(key []byte) int {
	n := len(key)
	// search the index of the first entry with an equal or higher value than
	// key in s.
	index := sort.Search(len(s)/4, func(i int) bool {
		return cmp(s[i*4:i*4+n], key) != -1
	})
	i := index * 4
	if cmp(s[i:i+len(key)], key) != 0 {
		return -1
	}
	return index
}

// Next finds the next occurrence of key after index x, which must have been
// obtained from a call to Index using the same key. It returns x+1 or -1.
func (s Index) Next(key []byte, x int) int {
	if x++; x*4 < len(s) && cmp(s[x*4:x*4+len(key)], key) == 0 {
		return x
	}
	return -1
}

// cmp returns an integer comparing a and b lexicographically.
func cmp(a Index, b []byte) int {
	n := len(a)
	if len(b) < n {
		n = len(b)
	}
	for i, c := range b[:n] {
		switch {
		case a[i] > c:
			return 1
		case a[i] < c:
			return -1
		}
	}
	switch {
	case len(a) < len(b):
		return -1
	case len(a) > len(b):
		return 1
	}
	return 0
}

// Compare returns an integer comparing a and b lexicographically.
func Compare(a string, b []byte) int {
	return cmp(Index(a), b)
}

// FixCase reformats b to the same pattern of cases as form.
// If returns false if string b is malformed.
func FixCase(form string, b []byte) bool {
	if len(form) != len(b) {
		return false
	}
	for i, c := range b {
		if form[i] <= 'Z' {
			if c >= 'a' {
				c -= 'z' - 'Z'
			}
			if c < 'A' || 'Z' < c {
				return false
			}
		} else {
			if c <= 'Z' {
				c += 'z' - 'Z'
			}
			if c < 'a' || 'z' < c {
				return false
			}
		}
		b[i] = c
	}
	return true
}
 07070100000F2A000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/text/internal/utf8internal    07070100000F2B000081A4000000000000000000000001645E367C00000DDB000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/golang.org/x/text/internal/utf8internal/utf8internal.go    // Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package utf8internal contains low-level utf8-related constants, tables, etc.
// that are used internally by the text package.
package utf8internal

// The default lowest and highest continuation byte.
const (
	LoCB = 0x80 // 1000 0000
	HiCB = 0xBF // 1011 1111
)

// Constants related to getting information of first bytes of UTF-8 sequences.
const (
	// ASCII identifies a UTF-8 byte as ASCII.
	ASCII = as

	// FirstInvalid indicates a byte is invalid as a first byte of a UTF-8
	// sequence.
	FirstInvalid = xx

	// SizeMask is a mask for the size bits. Use use x&SizeMask to get the size.
	SizeMask = 7

	// AcceptShift is the right-shift count for the first byte info byte to get
	// the index into the AcceptRanges table. See AcceptRanges.
	AcceptShift = 4

	// The names of these constants are chosen to give nice alignment in the
	// table below. The first nibble is an index into acceptRanges or F for
	// special one-byte cases. The second nibble is the Rune length or the
	// Status for the special one-byte case.
	xx = 0xF1 // invalid: size 1
	as = 0xF0 // ASCII: size 1
	s1 = 0x02 // accept 0, size 2
	s2 = 0x13 // accept 1, size 3
	s3 = 0x03 // accept 0, size 3
	s4 = 0x23 // accept 2, size 3
	s5 = 0x34 // accept 3, size 4
	s6 = 0x04 // accept 0, size 4
	s7 = 0x44 // accept 4, size 4
)

// First is information about the first byte in a UTF-8 sequence.
var First = [256]uint8{
	//   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
	as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x00-0x0F
	as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x10-0x1F
	as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x20-0x2F
	as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x30-0x3F
	as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x40-0x4F
	as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x50-0x5F
	as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x60-0x6F
	as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x70-0x7F
	//   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
	xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0x80-0x8F
	xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0x90-0x9F
	xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0xA0-0xAF
	xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0xB0-0xBF
	xx, xx, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, // 0xC0-0xCF
	s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, // 0xD0-0xDF
	s2, s3, s3, s3, s3, s3, s3, s3, s3, s3, s3, s3, s3, s4, s3, s3, // 0xE0-0xEF
	s5, s6, s6, s6, s7, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0xF0-0xFF
}

// AcceptRange gives the range of valid values for the second byte in a UTF-8
// sequence for any value for First that is not ASCII or FirstInvalid.
type AcceptRange struct {
	Lo uint8 // lowest value for second byte.
	Hi uint8 // highest value for second byte.
}

// AcceptRanges is a slice of AcceptRange values. For a given byte sequence b
//
//	AcceptRanges[First[b[0]]>>AcceptShift]
//
// will give the value of AcceptRange for the multi-byte UTF-8 sequence starting
// at b[0].
var AcceptRanges = [...]AcceptRange{
	0: {LoCB, HiCB},
	1: {0xA0, HiCB},
	2: {LoCB, 0x9F},
	3: {0x90, HiCB},
	4: {LoCB, 0x8F},
}
 07070100000F2C000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/golang.org/x/text/language 07070100000F2D000081A4000000000000000000000001645E367C00001321000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/golang.org/x/text/language/coverage.go // Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package language

import (
	"fmt"
	"sort"

	"golang.org/x/text/internal/language"
)

// The Coverage interface is used to define the level of coverage of an
// internationalization service. Note that not all types are supported by all
// services. As lists may be generated on the fly, it is recommended that users
// of a Coverage cache the results.
type Coverage interface {
	// Tags returns the list of supported tags.
	Tags() []Tag

	// BaseLanguages returns the list of supported base languages.
	BaseLanguages() []Base

	// Scripts returns the list of supported scripts.
	Scripts() []Script

	// Regions returns the list of supported regions.
	Regions() []Region
}

var (
	// Supported defines a Coverage that lists all supported subtags. Tags
	// always returns nil.
	Supported Coverage = allSubtags{}
)

// TODO:
// - Support Variants, numbering systems.
// - CLDR coverage levels.
// - Set of common tags defined in this package.

type allSubtags struct{}

// Regions returns the list of supported regions. As all regions are in a
// consecutive range, it simply returns a slice of numbers in increasing order.
// The "undefined" region is not returned.
func (s allSubtags) Regions() []Region {
	reg := make([]Region, language.NumRegions)
	for i := range reg {
		reg[i] = Region{language.Region(i + 1)}
	}
	return reg
}

// Scripts returns the list of supported scripts. As all scripts are in a
// consecutive range, it simply returns a slice of numbers in increasing order.
// The "undefined" script is not returned.
func (s allSubtags) Scripts() []Script {
	scr := make([]Script, language.NumScripts)
	for i := range scr {
		scr[i] = Script{language.Script(i + 1)}
	}
	return scr
}

// BaseLanguages returns the list of all supported base languages. It generates
// the list by traversing the internal structures.
func (s allSubtags) BaseLanguages() []Base {
	bs := language.BaseLanguages()
	base := make([]Base, len(bs))
	for i, b := range bs {
		base[i] = Base{b}
	}
	return base
}

// Tags always returns nil.
func (s allSubtags) Tags() []Tag {
	return nil
}

// coverage is used by NewCoverage which is used as a convenient way for
// creating Coverage implementations for partially defined data. Very often a
// package will only need to define a subset of slices. coverage provides a
// convenient way to do this. Moreover, packages using NewCoverage, instead of
// their own implementation, will not break if later new slice types are added.
type coverage struct {
	tags    func() []Tag
	bases   func() []Base
	scripts func() []Script
	regions func() []Region
}

func (s *coverage) Tags() []Tag {
	if s.tags == nil {
		return nil
	}
	return s.tags()
}

// bases implements sort.Interface and is used to sort base languages.
type bases []Base

func (b bases) Len() int {
	return len(b)
}

func (b bases) Swap(i, j int) {
	b[i], b[j] = b[j], b[i]
}

func (b bases) Less(i, j int) bool {
	return b[i].langID < b[j].langID
}

// BaseLanguages returns the result from calling s.bases if it is specified or
// otherwise derives the set of supported base languages from tags.
func (s *coverage) BaseLanguages() []Base {
	if s.bases == nil {
		tags := s.Tags()
		if len(tags) == 0 {
			return nil
		}
		a := make([]Base, len(tags))
		for i, t := range tags {
			a[i] = Base{language.Language(t.lang())}
		}
		sort.Sort(bases(a))
		k := 0
		for i := 1; i < len(a); i++ {
			if a[k] != a[i] {
				k++
				a[k] = a[i]
			}
		}
		return a[:k+1]
	}
	return s.bases()
}

func (s *coverage) Scripts() []Script {
	if s.scripts == nil {
		return nil
	}
	return s.scripts()
}

func (s *coverage) Regions() []Region {
	if s.regions == nil {
		return nil
	}
	return s.regions()
}

// NewCoverage returns a Coverage for the given lists. It is typically used by
// packages providing internationalization services to define their level of
// coverage. A list may be of type []T or func() []T, where T is either Tag,
// Base, Script or Region. The returned Coverage derives the value for Bases
// from Tags if no func or slice for []Base is specified. For other unspecified
// types the returned Coverage will return nil for the respective methods.
func NewCoverage(list ...interface{}) Coverage {
	s := &coverage{}
	for _, x := range list {
		switch v := x.(type) {
		case func() []Base:
			s.bases = v
		case func() []Script:
			s.scripts = v
		case func() []Region:
			s.regions = v
		case func() []Tag:
			s.tags = v
		case []Base:
			s.bases = func() []Base { return v }
		case []Script:
			s.scripts = func() []Script { return v }
		case []Region:
			s.regions = func() []Region { return v }
		case []Tag:
			s.tags = func() []Tag { return v }
		default:
			panic(fmt.Sprintf("language: unsupported set type %T", v))
		}
	}
	return s
}
   07070100000F2E000081A4000000000000000000000001645E367C000010F4000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/golang.org/x/text/language/doc.go  // Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package language implements BCP 47 language tags and related functionality.
//
// The most important function of package language is to match a list of
// user-preferred languages to a list of supported languages.
// It alleviates the developer of dealing with the complexity of this process
// and provides the user with the best experience
// (see https://blog.golang.org/matchlang).
//
// # Matching preferred against supported languages
//
// A Matcher for an application that supports English, Australian English,
// Danish, and standard Mandarin can be created as follows:
//
//	var matcher = language.NewMatcher([]language.Tag{
//	    language.English,   // The first language is used as fallback.
//	    language.MustParse("en-AU"),
//	    language.Danish,
//	    language.Chinese,
//	})
//
// This list of supported languages is typically implied by the languages for
// which there exists translations of the user interface.
//
// User-preferred languages usually come as a comma-separated list of BCP 47
// language tags.
// The MatchString finds best matches for such strings:
//
//	handler(w http.ResponseWriter, r *http.Request) {
//	    lang, _ := r.Cookie("lang")
//	    accept := r.Header.Get("Accept-Language")
//	    tag, _ := language.MatchStrings(matcher, lang.String(), accept)
//
//	    // tag should now be used for the initialization of any
//	    // locale-specific service.
//	}
//
// The Matcher's Match method can be used to match Tags directly.
//
// Matchers are aware of the intricacies of equivalence between languages, such
// as deprecated subtags, legacy tags, macro languages, mutual
// intelligibility between scripts and languages, and transparently passing
// BCP 47 user configuration.
// For instance, it will know that a reader of Bokmål Danish can read Norwegian
// and will know that Cantonese ("yue") is a good match for "zh-HK".
//
// # Using match results
//
// To guarantee a consistent user experience to the user it is important to
// use the same language tag for the selection of any locale-specific services.
// For example, it is utterly confusing to substitute spelled-out numbers
// or dates in one language in text of another language.
// More subtly confusing is using the wrong sorting order or casing
// algorithm for a certain language.
//
// All the packages in x/text that provide locale-specific services
// (e.g. collate, cases) should be initialized with the tag that was
// obtained at the start of an interaction with the user.
//
// Note that Tag that is returned by Match and MatchString may differ from any
// of the supported languages, as it may contain carried over settings from
// the user tags.
// This may be inconvenient when your application has some additional
// locale-specific data for your supported languages.
// Match and MatchString both return the index of the matched supported tag
// to simplify associating such data with the matched tag.
//
// # Canonicalization
//
// If one uses the Matcher to compare languages one does not need to
// worry about canonicalization.
//
// The meaning of a Tag varies per application. The language package
// therefore delays canonicalization and preserves information as much
// as possible. The Matcher, however, will always take into account that
// two different tags may represent the same language.
//
// By default, only legacy and deprecated tags are converted into their
// canonical equivalent. All other information is preserved. This approach makes
// the confidence scores more accurate and allows matchers to distinguish
// between variants that are otherwise lost.
//
// As a consequence, two tags that should be treated as identical according to
// BCP 47 or CLDR, like "en-Latn" and "en", will be represented differently. The
// Matcher handles such distinctions, though, and is aware of the
// equivalence relations. The CanonType type can be used to alter the
// canonicalization form.
//
// # References
//
// BCP 47 - Tags for Identifying Languages http://tools.ietf.org/html/bcp47
package language // import "golang.org/x/text/language"

// TODO: explanation on how to match languages for your own locale-specific
// service.
07070100000F2F000081A4000000000000000000000001645E367C00004B8C000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/golang.org/x/text/language/language.go // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:generate go run gen.go -output tables.go

package language

// TODO: Remove above NOTE after:
// - verifying that tables are dropped correctly (most notably matcher tables).

import (
	"strings"

	"golang.org/x/text/internal/language"
	"golang.org/x/text/internal/language/compact"
)

// Tag represents a BCP 47 language tag. It is used to specify an instance of a
// specific language or locale. All language tag values are guaranteed to be
// well-formed.
type Tag compact.Tag

func makeTag(t language.Tag) (tag Tag) {
	return Tag(compact.Make(t))
}

func (t *Tag) tag() language.Tag {
	return (*compact.Tag)(t).Tag()
}

func (t *Tag) isCompact() bool {
	return (*compact.Tag)(t).IsCompact()
}

// TODO: improve performance.
func (t *Tag) lang() language.Language { return t.tag().LangID }
func (t *Tag) region() language.Region { return t.tag().RegionID }
func (t *Tag) script() language.Script { return t.tag().ScriptID }

// Make is a convenience wrapper for Parse that omits the error.
// In case of an error, a sensible default is returned.
func Make(s string) Tag {
	return Default.Make(s)
}

// Make is a convenience wrapper for c.Parse that omits the error.
// In case of an error, a sensible default is returned.
func (c CanonType) Make(s string) Tag {
	t, _ := c.Parse(s)
	return t
}

// Raw returns the raw base language, script and region, without making an
// attempt to infer their values.
func (t Tag) Raw() (b Base, s Script, r Region) {
	tt := t.tag()
	return Base{tt.LangID}, Script{tt.ScriptID}, Region{tt.RegionID}
}

// IsRoot returns true if t is equal to language "und".
func (t Tag) IsRoot() bool {
	return compact.Tag(t).IsRoot()
}

// CanonType can be used to enable or disable various types of canonicalization.
type CanonType int

const (
	// Replace deprecated base languages with their preferred replacements.
	DeprecatedBase CanonType = 1 << iota
	// Replace deprecated scripts with their preferred replacements.
	DeprecatedScript
	// Replace deprecated regions with their preferred replacements.
	DeprecatedRegion
	// Remove redundant scripts.
	SuppressScript
	// Normalize legacy encodings. This includes legacy languages defined in
	// CLDR as well as bibliographic codes defined in ISO-639.
	Legacy
	// Map the dominant language of a macro language group to the macro language
	// subtag. For example cmn -> zh.
	Macro
	// The CLDR flag should be used if full compatibility with CLDR is required.
	// There are a few cases where language.Tag may differ from CLDR. To follow all
	// of CLDR's suggestions, use All|CLDR.
	CLDR

	// Raw can be used to Compose or Parse without Canonicalization.
	Raw CanonType = 0

	// Replace all deprecated tags with their preferred replacements.
	Deprecated = DeprecatedBase | DeprecatedScript | DeprecatedRegion

	// All canonicalizations recommended by BCP 47.
	BCP47 = Deprecated | SuppressScript

	// All canonicalizations.
	All = BCP47 | Legacy | Macro

	// Default is the canonicalization used by Parse, Make and Compose. To
	// preserve as much information as possible, canonicalizations that remove
	// potentially valuable information are not included. The Matcher is
	// designed to recognize similar tags that would be the same if
	// they were canonicalized using All.
	Default = Deprecated | Legacy

	canonLang = DeprecatedBase | Legacy | Macro

	// TODO: LikelyScript, LikelyRegion: suppress similar to ICU.
)

// canonicalize returns the canonicalized equivalent of the tag and
// whether there was any change.
func canonicalize(c CanonType, t language.Tag) (language.Tag, bool) {
	if c == Raw {
		return t, false
	}
	changed := false
	if c&SuppressScript != 0 {
		if t.LangID.SuppressScript() == t.ScriptID {
			t.ScriptID = 0
			changed = true
		}
	}
	if c&canonLang != 0 {
		for {
			if l, aliasType := t.LangID.Canonicalize(); l != t.LangID {
				switch aliasType {
				case language.Legacy:
					if c&Legacy != 0 {
						if t.LangID == _sh && t.ScriptID == 0 {
							t.ScriptID = _Latn
						}
						t.LangID = l
						changed = true
					}
				case language.Macro:
					if c&Macro != 0 {
						// We deviate here from CLDR. The mapping "nb" -> "no"
						// qualifies as a typical Macro language mapping.  However,
						// for legacy reasons, CLDR maps "no", the macro language
						// code for Norwegian, to the dominant variant "nb". This
						// change is currently under consideration for CLDR as well.
						// See https://unicode.org/cldr/trac/ticket/2698 and also
						// https://unicode.org/cldr/trac/ticket/1790 for some of the
						// practical implications. TODO: this check could be removed
						// if CLDR adopts this change.
						if c&CLDR == 0 || t.LangID != _nb {
							changed = true
							t.LangID = l
						}
					}
				case language.Deprecated:
					if c&DeprecatedBase != 0 {
						if t.LangID == _mo && t.RegionID == 0 {
							t.RegionID = _MD
						}
						t.LangID = l
						changed = true
						// Other canonicalization types may still apply.
						continue
					}
				}
			} else if c&Legacy != 0 && t.LangID == _no && c&CLDR != 0 {
				t.LangID = _nb
				changed = true
			}
			break
		}
	}
	if c&DeprecatedScript != 0 {
		if t.ScriptID == _Qaai {
			changed = true
			t.ScriptID = _Zinh
		}
	}
	if c&DeprecatedRegion != 0 {
		if r := t.RegionID.Canonicalize(); r != t.RegionID {
			changed = true
			t.RegionID = r
		}
	}
	return t, changed
}

// Canonicalize returns the canonicalized equivalent of the tag.
func (c CanonType) Canonicalize(t Tag) (Tag, error) {
	// First try fast path.
	if t.isCompact() {
		if _, changed := canonicalize(c, compact.Tag(t).Tag()); !changed {
			return t, nil
		}
	}
	// It is unlikely that one will canonicalize a tag after matching. So do
	// a slow but simple approach here.
	if tag, changed := canonicalize(c, t.tag()); changed {
		tag.RemakeString()
		return makeTag(tag), nil
	}
	return t, nil

}

// Confidence indicates the level of certainty for a given return value.
// For example, Serbian may be written in Cyrillic or Latin script.
// The confidence level indicates whether a value was explicitly specified,
// whether it is typically the only possible value, or whether there is
// an ambiguity.
type Confidence int

const (
	No    Confidence = iota // full confidence that there was no match
	Low                     // most likely value picked out of a set of alternatives
	High                    // value is generally assumed to be the correct match
	Exact                   // exact match or explicitly specified value
)

var confName = []string{"No", "Low", "High", "Exact"}

func (c Confidence) String() string {
	return confName[c]
}

// String returns the canonical string representation of the language tag.
func (t Tag) String() string {
	return t.tag().String()
}

// MarshalText implements encoding.TextMarshaler.
func (t Tag) MarshalText() (text []byte, err error) {
	return t.tag().MarshalText()
}

// UnmarshalText implements encoding.TextUnmarshaler.
func (t *Tag) UnmarshalText(text []byte) error {
	var tag language.Tag
	err := tag.UnmarshalText(text)
	*t = makeTag(tag)
	return err
}

// Base returns the base language of the language tag. If the base language is
// unspecified, an attempt will be made to infer it from the context.
// It uses a variant of CLDR's Add Likely Subtags algorithm. This is subject to change.
func (t Tag) Base() (Base, Confidence) {
	if b := t.lang(); b != 0 {
		return Base{b}, Exact
	}
	tt := t.tag()
	c := High
	if tt.ScriptID == 0 && !tt.RegionID.IsCountry() {
		c = Low
	}
	if tag, err := tt.Maximize(); err == nil && tag.LangID != 0 {
		return Base{tag.LangID}, c
	}
	return Base{0}, No
}

// Script infers the script for the language tag. If it was not explicitly given, it will infer
// a most likely candidate.
// If more than one script is commonly used for a language, the most likely one
// is returned with a low confidence indication. For example, it returns (Cyrl, Low)
// for Serbian.
// If a script cannot be inferred (Zzzz, No) is returned. We do not use Zyyy (undetermined)
// as one would suspect from the IANA registry for BCP 47. In a Unicode context Zyyy marks
// common characters (like 1, 2, 3, '.', etc.) and is therefore more like multiple scripts.
// See https://www.unicode.org/reports/tr24/#Values for more details. Zzzz is also used for
// unknown value in CLDR.  (Zzzz, Exact) is returned if Zzzz was explicitly specified.
// Note that an inferred script is never guaranteed to be the correct one. Latin is
// almost exclusively used for Afrikaans, but Arabic has been used for some texts
// in the past.  Also, the script that is commonly used may change over time.
// It uses a variant of CLDR's Add Likely Subtags algorithm. This is subject to change.
func (t Tag) Script() (Script, Confidence) {
	if scr := t.script(); scr != 0 {
		return Script{scr}, Exact
	}
	tt := t.tag()
	sc, c := language.Script(_Zzzz), No
	if scr := tt.LangID.SuppressScript(); scr != 0 {
		// Note: it is not always the case that a language with a suppress
		// script value is only written in one script (e.g. kk, ms, pa).
		if tt.RegionID == 0 {
			return Script{scr}, High
		}
		sc, c = scr, High
	}
	if tag, err := tt.Maximize(); err == nil {
		if tag.ScriptID != sc {
			sc, c = tag.ScriptID, Low
		}
	} else {
		tt, _ = canonicalize(Deprecated|Macro, tt)
		if tag, err := tt.Maximize(); err == nil && tag.ScriptID != sc {
			sc, c = tag.ScriptID, Low
		}
	}
	return Script{sc}, c
}

// Region returns the region for the language tag. If it was not explicitly given, it will
// infer a most likely candidate from the context.
// It uses a variant of CLDR's Add Likely Subtags algorithm. This is subject to change.
func (t Tag) Region() (Region, Confidence) {
	if r := t.region(); r != 0 {
		return Region{r}, Exact
	}
	tt := t.tag()
	if tt, err := tt.Maximize(); err == nil {
		return Region{tt.RegionID}, Low // TODO: differentiate between high and low.
	}
	tt, _ = canonicalize(Deprecated|Macro, tt)
	if tag, err := tt.Maximize(); err == nil {
		return Region{tag.RegionID}, Low
	}
	return Region{_ZZ}, No // TODO: return world instead of undetermined?
}

// Variants returns the variants specified explicitly for this language tag.
// or nil if no variant was specified.
func (t Tag) Variants() []Variant {
	if !compact.Tag(t).MayHaveVariants() {
		return nil
	}
	v := []Variant{}
	x, str := "", t.tag().Variants()
	for str != "" {
		x, str = nextToken(str)
		v = append(v, Variant{x})
	}
	return v
}

// Parent returns the CLDR parent of t. In CLDR, missing fields in data for a
// specific language are substituted with fields from the parent language.
// The parent for a language may change for newer versions of CLDR.
//
// Parent returns a tag for a less specific language that is mutually
// intelligible or Und if there is no such language. This may not be the same as
// simply stripping the last BCP 47 subtag. For instance, the parent of "zh-TW"
// is "zh-Hant", and the parent of "zh-Hant" is "und".
func (t Tag) Parent() Tag {
	return Tag(compact.Tag(t).Parent())
}

// nextToken returns token t and the rest of the string.
func nextToken(s string) (t, tail string) {
	p := strings.Index(s[1:], "-")
	if p == -1 {
		return s[1:], ""
	}
	p++
	return s[1:p], s[p:]
}

// Extension is a single BCP 47 extension.
type Extension struct {
	s string
}

// String returns the string representation of the extension, including the
// type tag.
func (e Extension) String() string {
	return e.s
}

// ParseExtension parses s as an extension and returns it on success.
func ParseExtension(s string) (e Extension, err error) {
	ext, err := language.ParseExtension(s)
	return Extension{ext}, err
}

// Type returns the one-byte extension type of e. It returns 0 for the zero
// exception.
func (e Extension) Type() byte {
	if e.s == "" {
		return 0
	}
	return e.s[0]
}

// Tokens returns the list of tokens of e.
func (e Extension) Tokens() []string {
	return strings.Split(e.s, "-")
}

// Extension returns the extension of type x for tag t. It will return
// false for ok if t does not have the requested extension. The returned
// extension will be invalid in this case.
func (t Tag) Extension(x byte) (ext Extension, ok bool) {
	if !compact.Tag(t).MayHaveExtensions() {
		return Extension{}, false
	}
	e, ok := t.tag().Extension(x)
	return Extension{e}, ok
}

// Extensions returns all extensions of t.
func (t Tag) Extensions() []Extension {
	if !compact.Tag(t).MayHaveExtensions() {
		return nil
	}
	e := []Extension{}
	for _, ext := range t.tag().Extensions() {
		e = append(e, Extension{ext})
	}
	return e
}

// TypeForKey returns the type associated with the given key, where key and type
// are of the allowed values defined for the Unicode locale extension ('u') in
// https://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers.
// TypeForKey will traverse the inheritance chain to get the correct value.
//
// If there are multiple types associated with a key, only the first will be
// returned. If there is no type associated with a key, it returns the empty
// string.
func (t Tag) TypeForKey(key string) string {
	if !compact.Tag(t).MayHaveExtensions() {
		if key != "rg" && key != "va" {
			return ""
		}
	}
	return t.tag().TypeForKey(key)
}

// SetTypeForKey returns a new Tag with the key set to type, where key and type
// are of the allowed values defined for the Unicode locale extension ('u') in
// https://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers.
// An empty value removes an existing pair with the same key.
func (t Tag) SetTypeForKey(key, value string) (Tag, error) {
	tt, err := t.tag().SetTypeForKey(key, value)
	return makeTag(tt), err
}

// NumCompactTags is the number of compact tags. The maximum tag is
// NumCompactTags-1.
const NumCompactTags = compact.NumCompactTags

// CompactIndex returns an index, where 0 <= index < NumCompactTags, for tags
// for which data exists in the text repository.The index will change over time
// and should not be stored in persistent storage. If t does not match a compact
// index, exact will be false and the compact index will be returned for the
// first match after repeatedly taking the Parent of t.
func CompactIndex(t Tag) (index int, exact bool) {
	id, exact := compact.LanguageID(compact.Tag(t))
	return int(id), exact
}

var root = language.Tag{}

// Base is an ISO 639 language code, used for encoding the base language
// of a language tag.
type Base struct {
	langID language.Language
}

// ParseBase parses a 2- or 3-letter ISO 639 code.
// It returns a ValueError if s is a well-formed but unknown language identifier
// or another error if another error occurred.
func ParseBase(s string) (Base, error) {
	l, err := language.ParseBase(s)
	return Base{l}, err
}

// String returns the BCP 47 representation of the base language.
func (b Base) String() string {
	return b.langID.String()
}

// ISO3 returns the ISO 639-3 language code.
func (b Base) ISO3() string {
	return b.langID.ISO3()
}

// IsPrivateUse reports whether this language code is reserved for private use.
func (b Base) IsPrivateUse() bool {
	return b.langID.IsPrivateUse()
}

// Script is a 4-letter ISO 15924 code for representing scripts.
// It is idiomatically represented in title case.
type Script struct {
	scriptID language.Script
}

// ParseScript parses a 4-letter ISO 15924 code.
// It returns a ValueError if s is a well-formed but unknown script identifier
// or another error if another error occurred.
func ParseScript(s string) (Script, error) {
	sc, err := language.ParseScript(s)
	return Script{sc}, err
}

// String returns the script code in title case.
// It returns "Zzzz" for an unspecified script.
func (s Script) String() string {
	return s.scriptID.String()
}

// IsPrivateUse reports whether this script code is reserved for private use.
func (s Script) IsPrivateUse() bool {
	return s.scriptID.IsPrivateUse()
}

// Region is an ISO 3166-1 or UN M.49 code for representing countries and regions.
type Region struct {
	regionID language.Region
}

// EncodeM49 returns the Region for the given UN M.49 code.
// It returns an error if r is not a valid code.
func EncodeM49(r int) (Region, error) {
	rid, err := language.EncodeM49(r)
	return Region{rid}, err
}

// ParseRegion parses a 2- or 3-letter ISO 3166-1 or a UN M.49 code.
// It returns a ValueError if s is a well-formed but unknown region identifier
// or another error if another error occurred.
func ParseRegion(s string) (Region, error) {
	r, err := language.ParseRegion(s)
	return Region{r}, err
}

// String returns the BCP 47 representation for the region.
// It returns "ZZ" for an unspecified region.
func (r Region) String() string {
	return r.regionID.String()
}

// ISO3 returns the 3-letter ISO code of r.
// Note that not all regions have a 3-letter ISO code.
// In such cases this method returns "ZZZ".
func (r Region) ISO3() string {
	return r.regionID.ISO3()
}

// M49 returns the UN M.49 encoding of r, or 0 if this encoding
// is not defined for r.
func (r Region) M49() int {
	return r.regionID.M49()
}

// IsPrivateUse reports whether r has the ISO 3166 User-assigned status. This
// may include private-use tags that are assigned by CLDR and used in this
// implementation. So IsPrivateUse and IsCountry can be simultaneously true.
func (r Region) IsPrivateUse() bool {
	return r.regionID.IsPrivateUse()
}

// IsCountry returns whether this region is a country or autonomous area. This
// includes non-standard definitions from CLDR.
func (r Region) IsCountry() bool {
	return r.regionID.IsCountry()
}

// IsGroup returns whether this region defines a collection of regions. This
// includes non-standard definitions from CLDR.
func (r Region) IsGroup() bool {
	return r.regionID.IsGroup()
}

// Contains returns whether Region c is contained by Region r. It returns true
// if c == r.
func (r Region) Contains(c Region) bool {
	return r.regionID.Contains(c.regionID)
}

// TLD returns the country code top-level domain (ccTLD). UK is returned for GB.
// In all other cases it returns either the region itself or an error.
//
// This method may return an error for a region for which there exists a
// canonical form with a ccTLD. To get that ccTLD canonicalize r first. The
// region will already be canonicalized it was obtained from a Tag that was
// obtained using any of the default methods.
func (r Region) TLD() (Region, error) {
	tld, err := r.regionID.TLD()
	return Region{tld}, err
}

// Canonicalize returns the region or a possible replacement if the region is
// deprecated. It will not return a replacement for deprecated regions that
// are split into multiple regions.
func (r Region) Canonicalize() Region {
	return Region{r.regionID.Canonicalize()}
}

// Variant represents a registered variant of a language as defined by BCP 47.
type Variant struct {
	variant string
}

// ParseVariant parses and returns a Variant. An error is returned if s is not
// a valid variant.
func ParseVariant(s string) (Variant, error) {
	v, err := language.ParseVariant(s)
	return Variant{v.String()}, err
}

// String returns the string representation of the variant.
func (v Variant) String() string {
	return v.variant
}
07070100000F30000081A4000000000000000000000001645E367C00006465000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/golang.org/x/text/language/match.go    // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package language

import (
	"errors"
	"strings"

	"golang.org/x/text/internal/language"
)

// A MatchOption configures a Matcher.
type MatchOption func(*matcher)

// PreferSameScript will, in the absence of a match, result in the first
// preferred tag with the same script as a supported tag to match this supported
// tag. The default is currently true, but this may change in the future.
func PreferSameScript(preferSame bool) MatchOption {
	return func(m *matcher) { m.preferSameScript = preferSame }
}

// TODO(v1.0.0): consider making Matcher a concrete type, instead of interface.
// There doesn't seem to be too much need for multiple types.
// Making it a concrete type allows MatchStrings to be a method, which will
// improve its discoverability.

// MatchStrings parses and matches the given strings until one of them matches
// the language in the Matcher. A string may be an Accept-Language header as
// handled by ParseAcceptLanguage. The default language is returned if no
// other language matched.
func MatchStrings(m Matcher, lang ...string) (tag Tag, index int) {
	for _, accept := range lang {
		desired, _, err := ParseAcceptLanguage(accept)
		if err != nil {
			continue
		}
		if tag, index, conf := m.Match(desired...); conf != No {
			return tag, index
		}
	}
	tag, index, _ = m.Match()
	return
}

// Matcher is the interface that wraps the Match method.
//
// Match returns the best match for any of the given tags, along with
// a unique index associated with the returned tag and a confidence
// score.
type Matcher interface {
	Match(t ...Tag) (tag Tag, index int, c Confidence)
}

// Comprehends reports the confidence score for a speaker of a given language
// to being able to comprehend the written form of an alternative language.
func Comprehends(speaker, alternative Tag) Confidence {
	_, _, c := NewMatcher([]Tag{alternative}).Match(speaker)
	return c
}

// NewMatcher returns a Matcher that matches an ordered list of preferred tags
// against a list of supported tags based on written intelligibility, closeness
// of dialect, equivalence of subtags and various other rules. It is initialized
// with the list of supported tags. The first element is used as the default
// value in case no match is found.
//
// Its Match method matches the first of the given Tags to reach a certain
// confidence threshold. The tags passed to Match should therefore be specified
// in order of preference. Extensions are ignored for matching.
//
// The index returned by the Match method corresponds to the index of the
// matched tag in t, but is augmented with the Unicode extension ('u')of the
// corresponding preferred tag. This allows user locale options to be passed
// transparently.
func NewMatcher(t []Tag, options ...MatchOption) Matcher {
	return newMatcher(t, options)
}

func (m *matcher) Match(want ...Tag) (t Tag, index int, c Confidence) {
	var tt language.Tag
	match, w, c := m.getBest(want...)
	if match != nil {
		tt, index = match.tag, match.index
	} else {
		// TODO: this should be an option
		tt = m.default_.tag
		if m.preferSameScript {
		outer:
			for _, w := range want {
				script, _ := w.Script()
				if script.scriptID == 0 {
					// Don't do anything if there is no script, such as with
					// private subtags.
					continue
				}
				for i, h := range m.supported {
					if script.scriptID == h.maxScript {
						tt, index = h.tag, i
						break outer
					}
				}
			}
		}
		// TODO: select first language tag based on script.
	}
	if w.RegionID != tt.RegionID && w.RegionID != 0 {
		if w.RegionID != 0 && tt.RegionID != 0 && tt.RegionID.Contains(w.RegionID) {
			tt.RegionID = w.RegionID
			tt.RemakeString()
		} else if r := w.RegionID.String(); len(r) == 2 {
			// TODO: also filter macro and deprecated.
			tt, _ = tt.SetTypeForKey("rg", strings.ToLower(r)+"zzzz")
		}
	}
	// Copy options from the user-provided tag into the result tag. This is hard
	// to do after the fact, so we do it here.
	// TODO: add in alternative variants to -u-va-.
	// TODO: add preferred region to -u-rg-.
	if e := w.Extensions(); len(e) > 0 {
		b := language.Builder{}
		b.SetTag(tt)
		for _, e := range e {
			b.AddExt(e)
		}
		tt = b.Make()
	}
	return makeTag(tt), index, c
}

// ErrMissingLikelyTagsData indicates no information was available
// to compute likely values of missing tags.
var ErrMissingLikelyTagsData = errors.New("missing likely tags data")

// func (t *Tag) setTagsFrom(id Tag) {
// 	t.LangID = id.LangID
// 	t.ScriptID = id.ScriptID
// 	t.RegionID = id.RegionID
// }

// Tag Matching
// CLDR defines an algorithm for finding the best match between two sets of language
// tags. The basic algorithm defines how to score a possible match and then find
// the match with the best score
// (see https://www.unicode.org/reports/tr35/#LanguageMatching).
// Using scoring has several disadvantages. The scoring obfuscates the importance of
// the various factors considered, making the algorithm harder to understand. Using
// scoring also requires the full score to be computed for each pair of tags.
//
// We will use a different algorithm which aims to have the following properties:
// - clarity on the precedence of the various selection factors, and
// - improved performance by allowing early termination of a comparison.
//
// Matching algorithm (overview)
// Input:
//   - supported: a set of supported tags
//   - default:   the default tag to return in case there is no match
//   - desired:   list of desired tags, ordered by preference, starting with
//                the most-preferred.
//
// Algorithm:
//   1) Set the best match to the lowest confidence level
//   2) For each tag in "desired":
//     a) For each tag in "supported":
//        1) compute the match between the two tags.
//        2) if the match is better than the previous best match, replace it
//           with the new match. (see next section)
//     b) if the current best match is Exact and pin is true the result will be
//        frozen to the language found thusfar, although better matches may
//        still be found for the same language.
//   3) If the best match so far is below a certain threshold, return "default".
//
// Ranking:
// We use two phases to determine whether one pair of tags are a better match
// than another pair of tags. First, we determine a rough confidence level. If the
// levels are different, the one with the highest confidence wins.
// Second, if the rough confidence levels are identical, we use a set of tie-breaker
// rules.
//
// The confidence level of matching a pair of tags is determined by finding the
// lowest confidence level of any matches of the corresponding subtags (the
// result is deemed as good as its weakest link).
// We define the following levels:
//   Exact    - An exact match of a subtag, before adding likely subtags.
//   MaxExact - An exact match of a subtag, after adding likely subtags.
//              [See Note 2].
//   High     - High level of mutual intelligibility between different subtag
//              variants.
//   Low      - Low level of mutual intelligibility between different subtag
//              variants.
//   No       - No mutual intelligibility.
//
// The following levels can occur for each type of subtag:
//   Base:    Exact, MaxExact, High, Low, No
//   Script:  Exact, MaxExact [see Note 3], Low, No
//   Region:  Exact, MaxExact, High
//   Variant: Exact, High
//   Private: Exact, No
//
// Any result with a confidence level of Low or higher is deemed a possible match.
// Once a desired tag matches any of the supported tags with a level of MaxExact
// or higher, the next desired tag is not considered (see Step 2.b).
// Note that CLDR provides languageMatching data that defines close equivalence
// classes for base languages, scripts and regions.
//
// Tie-breaking
// If we get the same confidence level for two matches, we apply a sequence of
// tie-breaking rules. The first that succeeds defines the result. The rules are
// applied in the following order.
//   1) Original language was defined and was identical.
//   2) Original region was defined and was identical.
//   3) Distance between two maximized regions was the smallest.
//   4) Original script was defined and was identical.
//   5) Distance from want tag to have tag using the parent relation [see Note 5.]
// If there is still no winner after these rules are applied, the first match
// found wins.
//
// Notes:
// [2] In practice, as matching of Exact is done in a separate phase from
//     matching the other levels, we reuse the Exact level to mean MaxExact in
//     the second phase. As a consequence, we only need the levels defined by
//     the Confidence type. The MaxExact confidence level is mapped to High in
//     the public API.
// [3] We do not differentiate between maximized script values that were derived
//     from suppressScript versus most likely tag data. We determined that in
//     ranking the two, one ranks just after the other. Moreover, the two cannot
//     occur concurrently. As a consequence, they are identical for practical
//     purposes.
// [4] In case of deprecated, macro-equivalents and legacy mappings, we assign
//     the MaxExact level to allow iw vs he to still be a closer match than
//     en-AU vs en-US, for example.
// [5] In CLDR a locale inherits fields that are unspecified for this locale
//     from its parent. Therefore, if a locale is a parent of another locale,
//     it is a strong measure for closeness, especially when no other tie
//     breaker rule applies. One could also argue it is inconsistent, for
//     example, when pt-AO matches pt (which CLDR equates with pt-BR), even
//     though its parent is pt-PT according to the inheritance rules.
//
// Implementation Details:
// There are several performance considerations worth pointing out. Most notably,
// we preprocess as much as possible (within reason) at the time of creation of a
// matcher. This includes:
//   - creating a per-language map, which includes data for the raw base language
//     and its canonicalized variant (if applicable),
//   - expanding entries for the equivalence classes defined in CLDR's
//     languageMatch data.
// The per-language map ensures that typically only a very small number of tags
// need to be considered. The pre-expansion of canonicalized subtags and
// equivalence classes reduces the amount of map lookups that need to be done at
// runtime.

// matcher keeps a set of supported language tags, indexed by language.
type matcher struct {
	default_         *haveTag
	supported        []*haveTag
	index            map[language.Language]*matchHeader
	passSettings     bool
	preferSameScript bool
}

// matchHeader has the lists of tags for exact matches and matches based on
// maximized and canonicalized tags for a given language.
type matchHeader struct {
	haveTags []*haveTag
	original bool
}

// haveTag holds a supported Tag and its maximized script and region. The maximized
// or canonicalized language is not stored as it is not needed during matching.
type haveTag struct {
	tag language.Tag

	// index of this tag in the original list of supported tags.
	index int

	// conf is the maximum confidence that can result from matching this haveTag.
	// When conf < Exact this means it was inserted after applying a CLDR equivalence rule.
	conf Confidence

	// Maximized region and script.
	maxRegion language.Region
	maxScript language.Script

	// altScript may be checked as an alternative match to maxScript. If altScript
	// matches, the confidence level for this match is Low. Theoretically there
	// could be multiple alternative scripts. This does not occur in practice.
	altScript language.Script

	// nextMax is the index of the next haveTag with the same maximized tags.
	nextMax uint16
}

func makeHaveTag(tag language.Tag, index int) (haveTag, language.Language) {
	max := tag
	if tag.LangID != 0 || tag.RegionID != 0 || tag.ScriptID != 0 {
		max, _ = canonicalize(All, max)
		max, _ = max.Maximize()
		max.RemakeString()
	}
	return haveTag{tag, index, Exact, max.RegionID, max.ScriptID, altScript(max.LangID, max.ScriptID), 0}, max.LangID
}

// altScript returns an alternative script that may match the given script with
// a low confidence.  At the moment, the langMatch data allows for at most one
// script to map to another and we rely on this to keep the code simple.
func altScript(l language.Language, s language.Script) language.Script {
	for _, alt := range matchScript {
		// TODO: also match cases where language is not the same.
		if (language.Language(alt.wantLang) == l || language.Language(alt.haveLang) == l) &&
			language.Script(alt.haveScript) == s {
			return language.Script(alt.wantScript)
		}
	}
	return 0
}

// addIfNew adds a haveTag to the list of tags only if it is a unique tag.
// Tags that have the same maximized values are linked by index.
func (h *matchHeader) addIfNew(n haveTag, exact bool) {
	h.original = h.original || exact
	// Don't add new exact matches.
	for _, v := range h.haveTags {
		if equalsRest(v.tag, n.tag) {
			return
		}
	}
	// Allow duplicate maximized tags, but create a linked list to allow quickly
	// comparing the equivalents and bail out.
	for i, v := range h.haveTags {
		if v.maxScript == n.maxScript &&
			v.maxRegion == n.maxRegion &&
			v.tag.VariantOrPrivateUseTags() == n.tag.VariantOrPrivateUseTags() {
			for h.haveTags[i].nextMax != 0 {
				i = int(h.haveTags[i].nextMax)
			}
			h.haveTags[i].nextMax = uint16(len(h.haveTags))
			break
		}
	}
	h.haveTags = append(h.haveTags, &n)
}

// header returns the matchHeader for the given language. It creates one if
// it doesn't already exist.
func (m *matcher) header(l language.Language) *matchHeader {
	if h := m.index[l]; h != nil {
		return h
	}
	h := &matchHeader{}
	m.index[l] = h
	return h
}

func toConf(d uint8) Confidence {
	if d <= 10 {
		return High
	}
	if d < 30 {
		return Low
	}
	return No
}

// newMatcher builds an index for the given supported tags and returns it as
// a matcher. It also expands the index by considering various equivalence classes
// for a given tag.
func newMatcher(supported []Tag, options []MatchOption) *matcher {
	m := &matcher{
		index:            make(map[language.Language]*matchHeader),
		preferSameScript: true,
	}
	for _, o := range options {
		o(m)
	}
	if len(supported) == 0 {
		m.default_ = &haveTag{}
		return m
	}
	// Add supported languages to the index. Add exact matches first to give
	// them precedence.
	for i, tag := range supported {
		tt := tag.tag()
		pair, _ := makeHaveTag(tt, i)
		m.header(tt.LangID).addIfNew(pair, true)
		m.supported = append(m.supported, &pair)
	}
	m.default_ = m.header(supported[0].lang()).haveTags[0]
	// Keep these in two different loops to support the case that two equivalent
	// languages are distinguished, such as iw and he.
	for i, tag := range supported {
		tt := tag.tag()
		pair, max := makeHaveTag(tt, i)
		if max != tt.LangID {
			m.header(max).addIfNew(pair, true)
		}
	}

	// update is used to add indexes in the map for equivalent languages.
	// update will only add entries to original indexes, thus not computing any
	// transitive relations.
	update := func(want, have uint16, conf Confidence) {
		if hh := m.index[language.Language(have)]; hh != nil {
			if !hh.original {
				return
			}
			hw := m.header(language.Language(want))
			for _, ht := range hh.haveTags {
				v := *ht
				if conf < v.conf {
					v.conf = conf
				}
				v.nextMax = 0 // this value needs to be recomputed
				if v.altScript != 0 {
					v.altScript = altScript(language.Language(want), v.maxScript)
				}
				hw.addIfNew(v, conf == Exact && hh.original)
			}
		}
	}

	// Add entries for languages with mutual intelligibility as defined by CLDR's
	// languageMatch data.
	for _, ml := range matchLang {
		update(ml.want, ml.have, toConf(ml.distance))
		if !ml.oneway {
			update(ml.have, ml.want, toConf(ml.distance))
		}
	}

	// Add entries for possible canonicalizations. This is an optimization to
	// ensure that only one map lookup needs to be done at runtime per desired tag.
	// First we match deprecated equivalents. If they are perfect equivalents
	// (their canonicalization simply substitutes a different language code, but
	// nothing else), the match confidence is Exact, otherwise it is High.
	for i, lm := range language.AliasMap {
		// If deprecated codes match and there is no fiddling with the script or
		// or region, we consider it an exact match.
		conf := Exact
		if language.AliasTypes[i] != language.Macro {
			if !isExactEquivalent(language.Language(lm.From)) {
				conf = High
			}
			update(lm.To, lm.From, conf)
		}
		update(lm.From, lm.To, conf)
	}
	return m
}

// getBest gets the best matching tag in m for any of the given tags, taking into
// account the order of preference of the given tags.
func (m *matcher) getBest(want ...Tag) (got *haveTag, orig language.Tag, c Confidence) {
	best := bestMatch{}
	for i, ww := range want {
		w := ww.tag()
		var max language.Tag
		// Check for exact match first.
		h := m.index[w.LangID]
		if w.LangID != 0 {
			if h == nil {
				continue
			}
			// Base language is defined.
			max, _ = canonicalize(Legacy|Deprecated|Macro, w)
			// A region that is added through canonicalization is stronger than
			// a maximized region: set it in the original (e.g. mo -> ro-MD).
			if w.RegionID != max.RegionID {
				w.RegionID = max.RegionID
			}
			// TODO: should we do the same for scripts?
			// See test case: en, sr, nl ; sh ; sr
			max, _ = max.Maximize()
		} else {
			// Base language is not defined.
			if h != nil {
				for i := range h.haveTags {
					have := h.haveTags[i]
					if equalsRest(have.tag, w) {
						return have, w, Exact
					}
				}
			}
			if w.ScriptID == 0 && w.RegionID == 0 {
				// We skip all tags matching und for approximate matching, including
				// private tags.
				continue
			}
			max, _ = w.Maximize()
			if h = m.index[max.LangID]; h == nil {
				continue
			}
		}
		pin := true
		for _, t := range want[i+1:] {
			if w.LangID == t.lang() {
				pin = false
				break
			}
		}
		// Check for match based on maximized tag.
		for i := range h.haveTags {
			have := h.haveTags[i]
			best.update(have, w, max.ScriptID, max.RegionID, pin)
			if best.conf == Exact {
				for have.nextMax != 0 {
					have = h.haveTags[have.nextMax]
					best.update(have, w, max.ScriptID, max.RegionID, pin)
				}
				return best.have, best.want, best.conf
			}
		}
	}
	if best.conf <= No {
		if len(want) != 0 {
			return nil, want[0].tag(), No
		}
		return nil, language.Tag{}, No
	}
	return best.have, best.want, best.conf
}

// bestMatch accumulates the best match so far.
type bestMatch struct {
	have            *haveTag
	want            language.Tag
	conf            Confidence
	pinnedRegion    language.Region
	pinLanguage     bool
	sameRegionGroup bool
	// Cached results from applying tie-breaking rules.
	origLang     bool
	origReg      bool
	paradigmReg  bool
	regGroupDist uint8
	origScript   bool
}

// update updates the existing best match if the new pair is considered to be a
// better match. To determine if the given pair is a better match, it first
// computes the rough confidence level. If this surpasses the current match, it
// will replace it and update the tie-breaker rule cache. If there is a tie, it
// proceeds with applying a series of tie-breaker rules. If there is no
// conclusive winner after applying the tie-breaker rules, it leaves the current
// match as the preferred match.
//
// If pin is true and have and tag are a strong match, it will henceforth only
// consider matches for this language. This corresponds to the idea that most
// users have a strong preference for the first defined language. A user can
// still prefer a second language over a dialect of the preferred language by
// explicitly specifying dialects, e.g. "en, nl, en-GB". In this case pin should
// be false.
func (m *bestMatch) update(have *haveTag, tag language.Tag, maxScript language.Script, maxRegion language.Region, pin bool) {
	// Bail if the maximum attainable confidence is below that of the current best match.
	c := have.conf
	if c < m.conf {
		return
	}
	// Don't change the language once we already have found an exact match.
	if m.pinLanguage && tag.LangID != m.want.LangID {
		return
	}
	// Pin the region group if we are comparing tags for the same language.
	if tag.LangID == m.want.LangID && m.sameRegionGroup {
		_, sameGroup := regionGroupDist(m.pinnedRegion, have.maxRegion, have.maxScript, m.want.LangID)
		if !sameGroup {
			return
		}
	}
	if c == Exact && have.maxScript == maxScript {
		// If there is another language and then another entry of this language,
		// don't pin anything, otherwise pin the language.
		m.pinLanguage = pin
	}
	if equalsRest(have.tag, tag) {
	} else if have.maxScript != maxScript {
		// There is usually very little comprehension between different scripts.
		// In a few cases there may still be Low comprehension. This possibility
		// is pre-computed and stored in have.altScript.
		if Low < m.conf || have.altScript != maxScript {
			return
		}
		c = Low
	} else if have.maxRegion != maxRegion {
		if High < c {
			// There is usually a small difference between languages across regions.
			c = High
		}
	}

	// We store the results of the computations of the tie-breaker rules along
	// with the best match. There is no need to do the checks once we determine
	// we have a winner, but we do still need to do the tie-breaker computations.
	// We use "beaten" to keep track if we still need to do the checks.
	beaten := false // true if the new pair defeats the current one.
	if c != m.conf {
		if c < m.conf {
			return
		}
		beaten = true
	}

	// Tie-breaker rules:
	// We prefer if the pre-maximized language was specified and identical.
	origLang := have.tag.LangID == tag.LangID && tag.LangID != 0
	if !beaten && m.origLang != origLang {
		if m.origLang {
			return
		}
		beaten = true
	}

	// We prefer if the pre-maximized region was specified and identical.
	origReg := have.tag.RegionID == tag.RegionID && tag.RegionID != 0
	if !beaten && m.origReg != origReg {
		if m.origReg {
			return
		}
		beaten = true
	}

	regGroupDist, sameGroup := regionGroupDist(have.maxRegion, maxRegion, maxScript, tag.LangID)
	if !beaten && m.regGroupDist != regGroupDist {
		if regGroupDist > m.regGroupDist {
			return
		}
		beaten = true
	}

	paradigmReg := isParadigmLocale(tag.LangID, have.maxRegion)
	if !beaten && m.paradigmReg != paradigmReg {
		if !paradigmReg {
			return
		}
		beaten = true
	}

	// Next we prefer if the pre-maximized script was specified and identical.
	origScript := have.tag.ScriptID == tag.ScriptID && tag.ScriptID != 0
	if !beaten && m.origScript != origScript {
		if m.origScript {
			return
		}
		beaten = true
	}

	// Update m to the newly found best match.
	if beaten {
		m.have = have
		m.want = tag
		m.conf = c
		m.pinnedRegion = maxRegion
		m.sameRegionGroup = sameGroup
		m.origLang = origLang
		m.origReg = origReg
		m.paradigmReg = paradigmReg
		m.origScript = origScript
		m.regGroupDist = regGroupDist
	}
}

func isParadigmLocale(lang language.Language, r language.Region) bool {
	for _, e := range paradigmLocales {
		if language.Language(e[0]) == lang && (r == language.Region(e[1]) || r == language.Region(e[2])) {
			return true
		}
	}
	return false
}

// regionGroupDist computes the distance between two regions based on their
// CLDR grouping.
func regionGroupDist(a, b language.Region, script language.Script, lang language.Language) (dist uint8, same bool) {
	const defaultDistance = 4

	aGroup := uint(regionToGroups[a]) << 1
	bGroup := uint(regionToGroups[b]) << 1
	for _, ri := range matchRegion {
		if language.Language(ri.lang) == lang && (ri.script == 0 || language.Script(ri.script) == script) {
			group := uint(1 << (ri.group &^ 0x80))
			if 0x80&ri.group == 0 {
				if aGroup&bGroup&group != 0 { // Both regions are in the group.
					return ri.distance, ri.distance == defaultDistance
				}
			} else {
				if (aGroup|bGroup)&group == 0 { // Both regions are not in the group.
					return ri.distance, ri.distance == defaultDistance
				}
			}
		}
	}
	return defaultDistance, true
}

// equalsRest compares everything except the language.
func equalsRest(a, b language.Tag) bool {
	// TODO: don't include extensions in this comparison. To do this efficiently,
	// though, we should handle private tags separately.
	return a.ScriptID == b.ScriptID && a.RegionID == b.RegionID && a.VariantOrPrivateUseTags() == b.VariantOrPrivateUseTags()
}

// isExactEquivalent returns true if canonicalizing the language will not alter
// the script or region of a tag.
func isExactEquivalent(l language.Language) bool {
	for _, o := range notEquivalent {
		if o == l {
			return false
		}
	}
	return true
}

var notEquivalent []language.Language

func init() {
	// Create a list of all languages for which canonicalization may alter the
	// script or region.
	for _, lm := range language.AliasMap {
		tag := language.Tag{LangID: language.Language(lm.From)}
		if tag, _ = canonicalize(All, tag); tag.ScriptID != 0 || tag.RegionID != 0 {
			notEquivalent = append(notEquivalent, language.Language(lm.From))
		}
	}
	// Maximize undefined regions of paradigm locales.
	for i, v := range paradigmLocales {
		t := language.Tag{LangID: language.Language(v[0])}
		max, _ := t.Maximize()
		if v[1] == 0 {
			paradigmLocales[i][1] = uint16(max.RegionID)
		}
		if v[2] == 0 {
			paradigmLocales[i][2] = uint16(max.RegionID)
		}
	}
}
   07070100000F31000081A4000000000000000000000001645E367C00001E0F000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/golang.org/x/text/language/parse.go    // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package language

import (
	"errors"
	"sort"
	"strconv"
	"strings"

	"golang.org/x/text/internal/language"
)

// ValueError is returned by any of the parsing functions when the
// input is well-formed but the respective subtag is not recognized
// as a valid value.
type ValueError interface {
	error

	// Subtag returns the subtag for which the error occurred.
	Subtag() string
}

// Parse parses the given BCP 47 string and returns a valid Tag. If parsing
// failed it returns an error and any part of the tag that could be parsed.
// If parsing succeeded but an unknown value was found, it returns
// ValueError. The Tag returned in this case is just stripped of the unknown
// value. All other values are preserved. It accepts tags in the BCP 47 format
// and extensions to this standard defined in
// https://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers.
// The resulting tag is canonicalized using the default canonicalization type.
func Parse(s string) (t Tag, err error) {
	return Default.Parse(s)
}

// Parse parses the given BCP 47 string and returns a valid Tag. If parsing
// failed it returns an error and any part of the tag that could be parsed.
// If parsing succeeded but an unknown value was found, it returns
// ValueError. The Tag returned in this case is just stripped of the unknown
// value. All other values are preserved. It accepts tags in the BCP 47 format
// and extensions to this standard defined in
// https://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers.
// The resulting tag is canonicalized using the canonicalization type c.
func (c CanonType) Parse(s string) (t Tag, err error) {
	defer func() {
		if recover() != nil {
			t = Tag{}
			err = language.ErrSyntax
		}
	}()

	tt, err := language.Parse(s)
	if err != nil {
		return makeTag(tt), err
	}
	tt, changed := canonicalize(c, tt)
	if changed {
		tt.RemakeString()
	}
	return makeTag(tt), err
}

// Compose creates a Tag from individual parts, which may be of type Tag, Base,
// Script, Region, Variant, []Variant, Extension, []Extension or error. If a
// Base, Script or Region or slice of type Variant or Extension is passed more
// than once, the latter will overwrite the former. Variants and Extensions are
// accumulated, but if two extensions of the same type are passed, the latter
// will replace the former. For -u extensions, though, the key-type pairs are
// added, where later values overwrite older ones. A Tag overwrites all former
// values and typically only makes sense as the first argument. The resulting
// tag is returned after canonicalizing using the Default CanonType. If one or
// more errors are encountered, one of the errors is returned.
func Compose(part ...interface{}) (t Tag, err error) {
	return Default.Compose(part...)
}

// Compose creates a Tag from individual parts, which may be of type Tag, Base,
// Script, Region, Variant, []Variant, Extension, []Extension or error. If a
// Base, Script or Region or slice of type Variant or Extension is passed more
// than once, the latter will overwrite the former. Variants and Extensions are
// accumulated, but if two extensions of the same type are passed, the latter
// will replace the former. For -u extensions, though, the key-type pairs are
// added, where later values overwrite older ones. A Tag overwrites all former
// values and typically only makes sense as the first argument. The resulting
// tag is returned after canonicalizing using CanonType c. If one or more errors
// are encountered, one of the errors is returned.
func (c CanonType) Compose(part ...interface{}) (t Tag, err error) {
	defer func() {
		if recover() != nil {
			t = Tag{}
			err = language.ErrSyntax
		}
	}()

	var b language.Builder
	if err = update(&b, part...); err != nil {
		return und, err
	}
	b.Tag, _ = canonicalize(c, b.Tag)
	return makeTag(b.Make()), err
}

var errInvalidArgument = errors.New("invalid Extension or Variant")

func update(b *language.Builder, part ...interface{}) (err error) {
	for _, x := range part {
		switch v := x.(type) {
		case Tag:
			b.SetTag(v.tag())
		case Base:
			b.Tag.LangID = v.langID
		case Script:
			b.Tag.ScriptID = v.scriptID
		case Region:
			b.Tag.RegionID = v.regionID
		case Variant:
			if v.variant == "" {
				err = errInvalidArgument
				break
			}
			b.AddVariant(v.variant)
		case Extension:
			if v.s == "" {
				err = errInvalidArgument
				break
			}
			b.SetExt(v.s)
		case []Variant:
			b.ClearVariants()
			for _, v := range v {
				b.AddVariant(v.variant)
			}
		case []Extension:
			b.ClearExtensions()
			for _, e := range v {
				b.SetExt(e.s)
			}
		// TODO: support parsing of raw strings based on morphology or just extensions?
		case error:
			if v != nil {
				err = v
			}
		}
	}
	return
}

var errInvalidWeight = errors.New("ParseAcceptLanguage: invalid weight")
var errTagListTooLarge = errors.New("tag list exceeds max length")

// ParseAcceptLanguage parses the contents of an Accept-Language header as
// defined in http://www.ietf.org/rfc/rfc2616.txt and returns a list of Tags and
// a list of corresponding quality weights. It is more permissive than RFC 2616
// and may return non-nil slices even if the input is not valid.
// The Tags will be sorted by highest weight first and then by first occurrence.
// Tags with a weight of zero will be dropped. An error will be returned if the
// input could not be parsed.
func ParseAcceptLanguage(s string) (tag []Tag, q []float32, err error) {
	defer func() {
		if recover() != nil {
			tag = nil
			q = nil
			err = language.ErrSyntax
		}
	}()

	if strings.Count(s, "-") > 1000 {
		return nil, nil, errTagListTooLarge
	}

	var entry string
	for s != "" {
		if entry, s = split(s, ','); entry == "" {
			continue
		}

		entry, weight := split(entry, ';')

		// Scan the language.
		t, err := Parse(entry)
		if err != nil {
			id, ok := acceptFallback[entry]
			if !ok {
				return nil, nil, err
			}
			t = makeTag(language.Tag{LangID: id})
		}

		// Scan the optional weight.
		w := 1.0
		if weight != "" {
			weight = consume(weight, 'q')
			weight = consume(weight, '=')
			// consume returns the empty string when a token could not be
			// consumed, resulting in an error for ParseFloat.
			if w, err = strconv.ParseFloat(weight, 32); err != nil {
				return nil, nil, errInvalidWeight
			}
			// Drop tags with a quality weight of 0.
			if w <= 0 {
				continue
			}
		}

		tag = append(tag, t)
		q = append(q, float32(w))
	}
	sort.Stable(&tagSort{tag, q})
	return tag, q, nil
}

// consume removes a leading token c from s and returns the result or the empty
// string if there is no such token.
func consume(s string, c byte) string {
	if s == "" || s[0] != c {
		return ""
	}
	return strings.TrimSpace(s[1:])
}

func split(s string, c byte) (head, tail string) {
	if i := strings.IndexByte(s, c); i >= 0 {
		return strings.TrimSpace(s[:i]), strings.TrimSpace(s[i+1:])
	}
	return strings.TrimSpace(s), ""
}

// Add hack mapping to deal with a small number of cases that occur
// in Accept-Language (with reasonable frequency).
var acceptFallback = map[string]language.Language{
	"english": _en,
	"deutsch": _de,
	"italian": _it,
	"french":  _fr,
	"*":       _mul, // defined in the spec to match all languages.
}

type tagSort struct {
	tag []Tag
	q   []float32
}

func (s *tagSort) Len() int {
	return len(s.q)
}

func (s *tagSort) Less(i, j int) bool {
	return s.q[i] > s.q[j]
}

func (s *tagSort) Swap(i, j int) {
	s.tag[i], s.tag[j] = s.tag[j], s.tag[i]
	s.q[i], s.q[j] = s.q[j], s.q[i]
}
 07070100000F32000081A4000000000000000000000001645E367C000038F2000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/golang.org/x/text/language/tables.go   // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.

package language

// CLDRVersion is the CLDR version from which the tables in this package are derived.
const CLDRVersion = "32"

const (
	_de  = 269
	_en  = 313
	_fr  = 350
	_it  = 505
	_mo  = 784
	_no  = 879
	_nb  = 839
	_pt  = 960
	_sh  = 1031
	_mul = 806
	_und = 0
)
const (
	_001 = 1
	_419 = 31
	_BR  = 65
	_CA  = 73
	_ES  = 110
	_GB  = 123
	_MD  = 188
	_PT  = 238
	_UK  = 306
	_US  = 309
	_ZZ  = 357
	_XA  = 323
	_XC  = 325
	_XK  = 333
)
const (
	_Latn = 90
	_Hani = 57
	_Hans = 59
	_Hant = 60
	_Qaaa = 147
	_Qaai = 155
	_Qabx = 196
	_Zinh = 252
	_Zyyy = 257
	_Zzzz = 258
)

var regionToGroups = []uint8{ // 358 elements
	// Entry 0 - 3F
	0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04,
	0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00,
	0x00, 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00,
	0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x04,
	// Entry 40 - 7F
	0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00,
	0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x08,
	0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00,
	// Entry 80 - BF
	0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00,
	0x00, 0x04, 0x01, 0x00, 0x04, 0x02, 0x00, 0x04,
	0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
	0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00,
	// Entry C0 - FF
	0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01,
	0x04, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x04, 0x00, 0x05, 0x00, 0x00, 0x00,
	0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	// Entry 100 - 13F
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
	0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x04,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x01, 0x00, 0x05, 0x04, 0x00,
	0x00, 0x04, 0x00, 0x04, 0x04, 0x05, 0x00, 0x00,
	// Entry 140 - 17F
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
} // Size: 382 bytes

var paradigmLocales = [][3]uint16{ // 3 elements
	0: [3]uint16{0x139, 0x0, 0x7b},
	1: [3]uint16{0x13e, 0x0, 0x1f},
	2: [3]uint16{0x3c0, 0x41, 0xee},
} // Size: 42 bytes

type mutualIntelligibility struct {
	want     uint16
	have     uint16
	distance uint8
	oneway   bool
}
type scriptIntelligibility struct {
	wantLang   uint16
	haveLang   uint16
	wantScript uint8
	haveScript uint8
	distance   uint8
}
type regionIntelligibility struct {
	lang     uint16
	script   uint8
	group    uint8
	distance uint8
}

// matchLang holds pairs of langIDs of base languages that are typically
// mutually intelligible. Each pair is associated with a confidence and
// whether the intelligibility goes one or both ways.
var matchLang = []mutualIntelligibility{ // 113 elements
	0:   {want: 0x1d1, have: 0xb7, distance: 0x4, oneway: false},
	1:   {want: 0x407, have: 0xb7, distance: 0x4, oneway: false},
	2:   {want: 0x407, have: 0x1d1, distance: 0x4, oneway: false},
	3:   {want: 0x407, have: 0x432, distance: 0x4, oneway: false},
	4:   {want: 0x43a, have: 0x1, distance: 0x4, oneway: false},
	5:   {want: 0x1a3, have: 0x10d, distance: 0x4, oneway: true},
	6:   {want: 0x295, have: 0x10d, distance: 0x4, oneway: true},
	7:   {want: 0x101, have: 0x36f, distance: 0x8, oneway: false},
	8:   {want: 0x101, have: 0x347, distance: 0x8, oneway: false},
	9:   {want: 0x5, have: 0x3e2, distance: 0xa, oneway: true},
	10:  {want: 0xd, have: 0x139, distance: 0xa, oneway: true},
	11:  {want: 0x16, have: 0x367, distance: 0xa, oneway: true},
	12:  {want: 0x21, have: 0x139, distance: 0xa, oneway: true},
	13:  {want: 0x56, have: 0x13e, distance: 0xa, oneway: true},
	14:  {want: 0x58, have: 0x3e2, distance: 0xa, oneway: true},
	15:  {want: 0x71, have: 0x3e2, distance: 0xa, oneway: true},
	16:  {want: 0x75, have: 0x139, distance: 0xa, oneway: true},
	17:  {want: 0x82, have: 0x1be, distance: 0xa, oneway: true},
	18:  {want: 0xa5, have: 0x139, distance: 0xa, oneway: true},
	19:  {want: 0xb2, have: 0x15e, distance: 0xa, oneway: true},
	20:  {want: 0xdd, have: 0x153, distance: 0xa, oneway: true},
	21:  {want: 0xe5, have: 0x139, distance: 0xa, oneway: true},
	22:  {want: 0xe9, have: 0x3a, distance: 0xa, oneway: true},
	23:  {want: 0xf0, have: 0x15e, distance: 0xa, oneway: true},
	24:  {want: 0xf9, have: 0x15e, distance: 0xa, oneway: true},
	25:  {want: 0x100, have: 0x139, distance: 0xa, oneway: true},
	26:  {want: 0x130, have: 0x139, distance: 0xa, oneway: true},
	27:  {want: 0x13c, have: 0x139, distance: 0xa, oneway: true},
	28:  {want: 0x140, have: 0x151, distance: 0xa, oneway: true},
	29:  {want: 0x145, have: 0x13e, distance: 0xa, oneway: true},
	30:  {want: 0x158, have: 0x101, distance: 0xa, oneway: true},
	31:  {want: 0x16d, have: 0x367, distance: 0xa, oneway: true},
	32:  {want: 0x16e, have: 0x139, distance: 0xa, oneway: true},
	33:  {want: 0x16f, have: 0x139, distance: 0xa, oneway: true},
	34:  {want: 0x17e, have: 0x139, distance: 0xa, oneway: true},
	35:  {want: 0x190, have: 0x13e, distance: 0xa, oneway: true},
	36:  {want: 0x194, have: 0x13e, distance: 0xa, oneway: true},
	37:  {want: 0x1a4, have: 0x1be, distance: 0xa, oneway: true},
	38:  {want: 0x1b4, have: 0x139, distance: 0xa, oneway: true},
	39:  {want: 0x1b8, have: 0x139, distance: 0xa, oneway: true},
	40:  {want: 0x1d4, have: 0x15e, distance: 0xa, oneway: true},
	41:  {want: 0x1d7, have: 0x3e2, distance: 0xa, oneway: true},
	42:  {want: 0x1d9, have: 0x139, distance: 0xa, oneway: true},
	43:  {want: 0x1e7, have: 0x139, distance: 0xa, oneway: true},
	44:  {want: 0x1f8, have: 0x139, distance: 0xa, oneway: true},
	45:  {want: 0x20e, have: 0x1e1, distance: 0xa, oneway: true},
	46:  {want: 0x210, have: 0x139, distance: 0xa, oneway: true},
	47:  {want: 0x22d, have: 0x15e, distance: 0xa, oneway: true},
	48:  {want: 0x242, have: 0x3e2, distance: 0xa, oneway: true},
	49:  {want: 0x24a, have: 0x139, distance: 0xa, oneway: true},
	50:  {want: 0x251, have: 0x139, distance: 0xa, oneway: true},
	51:  {want: 0x265, have: 0x139, distance: 0xa, oneway: true},
	52:  {want: 0x274, have: 0x48a, distance: 0xa, oneway: true},
	53:  {want: 0x28a, have: 0x3e2, distance: 0xa, oneway: true},
	54:  {want: 0x28e, have: 0x1f9, distance: 0xa, oneway: true},
	55:  {want: 0x2a3, have: 0x139, distance: 0xa, oneway: true},
	56:  {want: 0x2b5, have: 0x15e, distance: 0xa, oneway: true},
	57:  {want: 0x2b8, have: 0x139, distance: 0xa, oneway: true},
	58:  {want: 0x2be, have: 0x139, distance: 0xa, oneway: true},
	59:  {want: 0x2c3, have: 0x15e, distance: 0xa, oneway: true},
	60:  {want: 0x2ed, have: 0x139, distance: 0xa, oneway: true},
	61:  {want: 0x2f1, have: 0x15e, distance: 0xa, oneway: true},
	62:  {want: 0x2fa, have: 0x139, distance: 0xa, oneway: true},
	63:  {want: 0x2ff, have: 0x7e, distance: 0xa, oneway: true},
	64:  {want: 0x304, have: 0x139, distance: 0xa, oneway: true},
	65:  {want: 0x30b, have: 0x3e2, distance: 0xa, oneway: true},
	66:  {want: 0x31b, have: 0x1be, distance: 0xa, oneway: true},
	67:  {want: 0x31f, have: 0x1e1, distance: 0xa, oneway: true},
	68:  {want: 0x320, have: 0x139, distance: 0xa, oneway: true},
	69:  {want: 0x331, have: 0x139, distance: 0xa, oneway: true},
	70:  {want: 0x351, have: 0x139, distance: 0xa, oneway: true},
	71:  {want: 0x36a, have: 0x347, distance: 0xa, oneway: false},
	72:  {want: 0x36a, have: 0x36f, distance: 0xa, oneway: true},
	73:  {want: 0x37a, have: 0x139, distance: 0xa, oneway: true},
	74:  {want: 0x387, have: 0x139, distance: 0xa, oneway: true},
	75:  {want: 0x389, have: 0x139, distance: 0xa, oneway: true},
	76:  {want: 0x38b, have: 0x15e, distance: 0xa, oneway: true},
	77:  {want: 0x390, have: 0x139, distance: 0xa, oneway: true},
	78:  {want: 0x395, have: 0x139, distance: 0xa, oneway: true},
	79:  {want: 0x39d, have: 0x139, distance: 0xa, oneway: true},
	80:  {want: 0x3a5, have: 0x139, distance: 0xa, oneway: true},
	81:  {want: 0x3be, have: 0x139, distance: 0xa, oneway: true},
	82:  {want: 0x3c4, have: 0x13e, distance: 0xa, oneway: true},
	83:  {want: 0x3d4, have: 0x10d, distance: 0xa, oneway: true},
	84:  {want: 0x3d9, have: 0x139, distance: 0xa, oneway: true},
	85:  {want: 0x3e5, have: 0x15e, distance: 0xa, oneway: true},
	86:  {want: 0x3e9, have: 0x1be, distance: 0xa, oneway: true},
	87:  {want: 0x3fa, have: 0x139, distance: 0xa, oneway: true},
	88:  {want: 0x40c, have: 0x139, distance: 0xa, oneway: true},
	89:  {want: 0x423, have: 0x139, distance: 0xa, oneway: true},
	90:  {want: 0x429, have: 0x139, distance: 0xa, oneway: true},
	91:  {want: 0x431, have: 0x139, distance: 0xa, oneway: true},
	92:  {want: 0x43b, have: 0x139, distance: 0xa, oneway: true},
	93:  {want: 0x43e, have: 0x1e1, distance: 0xa, oneway: true},
	94:  {want: 0x445, have: 0x139, distance: 0xa, oneway: true},
	95:  {want: 0x450, have: 0x139, distance: 0xa, oneway: true},
	96:  {want: 0x461, have: 0x139, distance: 0xa, oneway: true},
	97:  {want: 0x467, have: 0x3e2, distance: 0xa, oneway: true},
	98:  {want: 0x46f, have: 0x139, distance: 0xa, oneway: true},
	99:  {want: 0x476, have: 0x3e2, distance: 0xa, oneway: true},
	100: {want: 0x3883, have: 0x139, distance: 0xa, oneway: true},
	101: {want: 0x480, have: 0x139, distance: 0xa, oneway: true},
	102: {want: 0x482, have: 0x139, distance: 0xa, oneway: true},
	103: {want: 0x494, have: 0x3e2, distance: 0xa, oneway: true},
	104: {want: 0x49d, have: 0x139, distance: 0xa, oneway: true},
	105: {want: 0x4ac, have: 0x529, distance: 0xa, oneway: true},
	106: {want: 0x4b4, have: 0x139, distance: 0xa, oneway: true},
	107: {want: 0x4bc, have: 0x3e2, distance: 0xa, oneway: true},
	108: {want: 0x4e5, have: 0x15e, distance: 0xa, oneway: true},
	109: {want: 0x4f2, have: 0x139, distance: 0xa, oneway: true},
	110: {want: 0x512, have: 0x139, distance: 0xa, oneway: true},
	111: {want: 0x518, have: 0x139, distance: 0xa, oneway: true},
	112: {want: 0x52f, have: 0x139, distance: 0xa, oneway: true},
} // Size: 702 bytes

// matchScript holds pairs of scriptIDs where readers of one script
// can typically also read the other. Each is associated with a confidence.
var matchScript = []scriptIntelligibility{ // 26 elements
	0:  {wantLang: 0x432, haveLang: 0x432, wantScript: 0x5a, haveScript: 0x20, distance: 0x5},
	1:  {wantLang: 0x432, haveLang: 0x432, wantScript: 0x20, haveScript: 0x5a, distance: 0x5},
	2:  {wantLang: 0x58, haveLang: 0x3e2, wantScript: 0x5a, haveScript: 0x20, distance: 0xa},
	3:  {wantLang: 0xa5, haveLang: 0x139, wantScript: 0xe, haveScript: 0x5a, distance: 0xa},
	4:  {wantLang: 0x1d7, haveLang: 0x3e2, wantScript: 0x8, haveScript: 0x20, distance: 0xa},
	5:  {wantLang: 0x210, haveLang: 0x139, wantScript: 0x2e, haveScript: 0x5a, distance: 0xa},
	6:  {wantLang: 0x24a, haveLang: 0x139, wantScript: 0x4e, haveScript: 0x5a, distance: 0xa},
	7:  {wantLang: 0x251, haveLang: 0x139, wantScript: 0x52, haveScript: 0x5a, distance: 0xa},
	8:  {wantLang: 0x2b8, haveLang: 0x139, wantScript: 0x57, haveScript: 0x5a, distance: 0xa},
	9:  {wantLang: 0x304, haveLang: 0x139, wantScript: 0x6e, haveScript: 0x5a, distance: 0xa},
	10: {wantLang: 0x331, haveLang: 0x139, wantScript: 0x75, haveScript: 0x5a, distance: 0xa},
	11: {wantLang: 0x351, haveLang: 0x139, wantScript: 0x22, haveScript: 0x5a, distance: 0xa},
	12: {wantLang: 0x395, haveLang: 0x139, wantScript: 0x81, haveScript: 0x5a, distance: 0xa},
	13: {wantLang: 0x39d, haveLang: 0x139, wantScript: 0x36, haveScript: 0x5a, distance: 0xa},
	14: {wantLang: 0x3be, haveLang: 0x139, wantScript: 0x5, haveScript: 0x5a, distance: 0xa},
	15: {wantLang: 0x3fa, haveLang: 0x139, wantScript: 0x5, haveScript: 0x5a, distance: 0xa},
	16: {wantLang: 0x40c, haveLang: 0x139, wantScript: 0xd4, haveScript: 0x5a, distance: 0xa},
	17: {wantLang: 0x450, haveLang: 0x139, wantScript: 0xe3, haveScript: 0x5a, distance: 0xa},
	18: {wantLang: 0x461, haveLang: 0x139, wantScript: 0xe6, haveScript: 0x5a, distance: 0xa},
	19: {wantLang: 0x46f, haveLang: 0x139, wantScript: 0x2c, haveScript: 0x5a, distance: 0xa},
	20: {wantLang: 0x476, haveLang: 0x3e2, wantScript: 0x5a, haveScript: 0x20, distance: 0xa},
	21: {wantLang: 0x4b4, haveLang: 0x139, wantScript: 0x5, haveScript: 0x5a, distance: 0xa},
	22: {wantLang: 0x4bc, haveLang: 0x3e2, wantScript: 0x5a, haveScript: 0x20, distance: 0xa},
	23: {wantLang: 0x512, haveLang: 0x139, wantScript: 0x3e, haveScript: 0x5a, distance: 0xa},
	24: {wantLang: 0x529, haveLang: 0x529, wantScript: 0x3b, haveScript: 0x3c, distance: 0xf},
	25: {wantLang: 0x529, haveLang: 0x529, wantScript: 0x3c, haveScript: 0x3b, distance: 0x13},
} // Size: 232 bytes

var matchRegion = []regionIntelligibility{ // 15 elements
	0:  {lang: 0x3a, script: 0x0, group: 0x4, distance: 0x4},
	1:  {lang: 0x3a, script: 0x0, group: 0x84, distance: 0x4},
	2:  {lang: 0x139, script: 0x0, group: 0x1, distance: 0x4},
	3:  {lang: 0x139, script: 0x0, group: 0x81, distance: 0x4},
	4:  {lang: 0x13e, script: 0x0, group: 0x3, distance: 0x4},
	5:  {lang: 0x13e, script: 0x0, group: 0x83, distance: 0x4},
	6:  {lang: 0x3c0, script: 0x0, group: 0x3, distance: 0x4},
	7:  {lang: 0x3c0, script: 0x0, group: 0x83, distance: 0x4},
	8:  {lang: 0x529, script: 0x3c, group: 0x2, distance: 0x4},
	9:  {lang: 0x529, script: 0x3c, group: 0x82, distance: 0x4},
	10: {lang: 0x3a, script: 0x0, group: 0x80, distance: 0x5},
	11: {lang: 0x139, script: 0x0, group: 0x80, distance: 0x5},
	12: {lang: 0x13e, script: 0x0, group: 0x80, distance: 0x5},
	13: {lang: 0x3c0, script: 0x0, group: 0x80, distance: 0x5},
	14: {lang: 0x529, script: 0x3c, group: 0x80, distance: 0x5},
} // Size: 114 bytes

// Total table size 1472 bytes (1KiB); checksum: F86C669
  07070100000F33000081A4000000000000000000000001645E367C000015A9000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/golang.org/x/text/language/tags.go // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package language

import "golang.org/x/text/internal/language/compact"

// TODO: Various sets of commonly use tags and regions.

// MustParse is like Parse, but panics if the given BCP 47 tag cannot be parsed.
// It simplifies safe initialization of Tag values.
func MustParse(s string) Tag {
	t, err := Parse(s)
	if err != nil {
		panic(err)
	}
	return t
}

// MustParse is like Parse, but panics if the given BCP 47 tag cannot be parsed.
// It simplifies safe initialization of Tag values.
func (c CanonType) MustParse(s string) Tag {
	t, err := c.Parse(s)
	if err != nil {
		panic(err)
	}
	return t
}

// MustParseBase is like ParseBase, but panics if the given base cannot be parsed.
// It simplifies safe initialization of Base values.
func MustParseBase(s string) Base {
	b, err := ParseBase(s)
	if err != nil {
		panic(err)
	}
	return b
}

// MustParseScript is like ParseScript, but panics if the given script cannot be
// parsed. It simplifies safe initialization of Script values.
func MustParseScript(s string) Script {
	scr, err := ParseScript(s)
	if err != nil {
		panic(err)
	}
	return scr
}

// MustParseRegion is like ParseRegion, but panics if the given region cannot be
// parsed. It simplifies safe initialization of Region values.
func MustParseRegion(s string) Region {
	r, err := ParseRegion(s)
	if err != nil {
		panic(err)
	}
	return r
}

var (
	und = Tag{}

	Und Tag = Tag{}

	Afrikaans            Tag = Tag(compact.Afrikaans)
	Amharic              Tag = Tag(compact.Amharic)
	Arabic               Tag = Tag(compact.Arabic)
	ModernStandardArabic Tag = Tag(compact.ModernStandardArabic)
	Azerbaijani          Tag = Tag(compact.Azerbaijani)
	Bulgarian            Tag = Tag(compact.Bulgarian)
	Bengali              Tag = Tag(compact.Bengali)
	Catalan              Tag = Tag(compact.Catalan)
	Czech                Tag = Tag(compact.Czech)
	Danish               Tag = Tag(compact.Danish)
	German               Tag = Tag(compact.German)
	Greek                Tag = Tag(compact.Greek)
	English              Tag = Tag(compact.English)
	AmericanEnglish      Tag = Tag(compact.AmericanEnglish)
	BritishEnglish       Tag = Tag(compact.BritishEnglish)
	Spanish              Tag = Tag(compact.Spanish)
	EuropeanSpanish      Tag = Tag(compact.EuropeanSpanish)
	LatinAmericanSpanish Tag = Tag(compact.LatinAmericanSpanish)
	Estonian             Tag = Tag(compact.Estonian)
	Persian              Tag = Tag(compact.Persian)
	Finnish              Tag = Tag(compact.Finnish)
	Filipino             Tag = Tag(compact.Filipino)
	French               Tag = Tag(compact.French)
	CanadianFrench       Tag = Tag(compact.CanadianFrench)
	Gujarati             Tag = Tag(compact.Gujarati)
	Hebrew               Tag = Tag(compact.Hebrew)
	Hindi                Tag = Tag(compact.Hindi)
	Croatian             Tag = Tag(compact.Croatian)
	Hungarian            Tag = Tag(compact.Hungarian)
	Armenian             Tag = Tag(compact.Armenian)
	Indonesian           Tag = Tag(compact.Indonesian)
	Icelandic            Tag = Tag(compact.Icelandic)
	Italian              Tag = Tag(compact.Italian)
	Japanese             Tag = Tag(compact.Japanese)
	Georgian             Tag = Tag(compact.Georgian)
	Kazakh               Tag = Tag(compact.Kazakh)
	Khmer                Tag = Tag(compact.Khmer)
	Kannada              Tag = Tag(compact.Kannada)
	Korean               Tag = Tag(compact.Korean)
	Kirghiz              Tag = Tag(compact.Kirghiz)
	Lao                  Tag = Tag(compact.Lao)
	Lithuanian           Tag = Tag(compact.Lithuanian)
	Latvian              Tag = Tag(compact.Latvian)
	Macedonian           Tag = Tag(compact.Macedonian)
	Malayalam            Tag = Tag(compact.Malayalam)
	Mongolian            Tag = Tag(compact.Mongolian)
	Marathi              Tag = Tag(compact.Marathi)
	Malay                Tag = Tag(compact.Malay)
	Burmese              Tag = Tag(compact.Burmese)
	Nepali               Tag = Tag(compact.Nepali)
	Dutch                Tag = Tag(compact.Dutch)
	Norwegian            Tag = Tag(compact.Norwegian)
	Punjabi              Tag = Tag(compact.Punjabi)
	Polish               Tag = Tag(compact.Polish)
	Portuguese           Tag = Tag(compact.Portuguese)
	BrazilianPortuguese  Tag = Tag(compact.BrazilianPortuguese)
	EuropeanPortuguese   Tag = Tag(compact.EuropeanPortuguese)
	Romanian             Tag = Tag(compact.Romanian)
	Russian              Tag = Tag(compact.Russian)
	Sinhala              Tag = Tag(compact.Sinhala)
	Slovak               Tag = Tag(compact.Slovak)
	Slovenian            Tag = Tag(compact.Slovenian)
	Albanian             Tag = Tag(compact.Albanian)
	Serbian              Tag = Tag(compact.Serbian)
	SerbianLatin         Tag = Tag(compact.SerbianLatin)
	Swedish              Tag = Tag(compact.Swedish)
	Swahili              Tag = Tag(compact.Swahili)
	Tamil                Tag = Tag(compact.Tamil)
	Telugu               Tag = Tag(compact.Telugu)
	Thai                 Tag = Tag(compact.Thai)
	Turkish              Tag = Tag(compact.Turkish)
	Ukrainian            Tag = Tag(compact.Ukrainian)
	Urdu                 Tag = Tag(compact.Urdu)
	Uzbek                Tag = Tag(compact.Uzbek)
	Vietnamese           Tag = Tag(compact.Vietnamese)
	Chinese              Tag = Tag(compact.Chinese)
	SimplifiedChinese    Tag = Tag(compact.SimplifiedChinese)
	TraditionalChinese   Tag = Tag(compact.TraditionalChinese)
	Zulu                 Tag = Tag(compact.Zulu)
)
   07070100000F34000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003300000000elemental-cli-0.3.1/vendor/golang.org/x/text/runes    07070100000F35000081A4000000000000000000000001645E367C000014AD000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/golang.org/x/text/runes/cond.go    // Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package runes

import (
	"unicode/utf8"

	"golang.org/x/text/transform"
)

// Note: below we pass invalid UTF-8 to the tIn and tNotIn transformers as is.
// This is done for various reasons:
// - To retain the semantics of the Nop transformer: if input is passed to a Nop
//   one would expect it to be unchanged.
// - It would be very expensive to pass a converted RuneError to a transformer:
//   a transformer might need more source bytes after RuneError, meaning that
//   the only way to pass it safely is to create a new buffer and manage the
//   intermingling of RuneErrors and normal input.
// - Many transformers leave ill-formed UTF-8 as is, so this is not
//   inconsistent. Generally ill-formed UTF-8 is only replaced if it is a
//   logical consequence of the operation (as for Map) or if it otherwise would
//   pose security concerns (as for Remove).
// - An alternative would be to return an error on ill-formed UTF-8, but this
//   would be inconsistent with other operations.

// If returns a transformer that applies tIn to consecutive runes for which
// s.Contains(r) and tNotIn to consecutive runes for which !s.Contains(r). Reset
// is called on tIn and tNotIn at the start of each run. A Nop transformer will
// substitute a nil value passed to tIn or tNotIn. Invalid UTF-8 is translated
// to RuneError to determine which transformer to apply, but is passed as is to
// the respective transformer.
func If(s Set, tIn, tNotIn transform.Transformer) Transformer {
	if tIn == nil && tNotIn == nil {
		return Transformer{transform.Nop}
	}
	if tIn == nil {
		tIn = transform.Nop
	}
	if tNotIn == nil {
		tNotIn = transform.Nop
	}
	sIn, ok := tIn.(transform.SpanningTransformer)
	if !ok {
		sIn = dummySpan{tIn}
	}
	sNotIn, ok := tNotIn.(transform.SpanningTransformer)
	if !ok {
		sNotIn = dummySpan{tNotIn}
	}

	a := &cond{
		tIn:    sIn,
		tNotIn: sNotIn,
		f:      s.Contains,
	}
	a.Reset()
	return Transformer{a}
}

type dummySpan struct{ transform.Transformer }

func (d dummySpan) Span(src []byte, atEOF bool) (n int, err error) {
	return 0, transform.ErrEndOfSpan
}

type cond struct {
	tIn, tNotIn transform.SpanningTransformer
	f           func(rune) bool
	check       func(rune) bool               // current check to perform
	t           transform.SpanningTransformer // current transformer to use
}

// Reset implements transform.Transformer.
func (t *cond) Reset() {
	t.check = t.is
	t.t = t.tIn
	t.t.Reset() // notIn will be reset on first usage.
}

func (t *cond) is(r rune) bool {
	if t.f(r) {
		return true
	}
	t.check = t.isNot
	t.t = t.tNotIn
	t.tNotIn.Reset()
	return false
}

func (t *cond) isNot(r rune) bool {
	if !t.f(r) {
		return true
	}
	t.check = t.is
	t.t = t.tIn
	t.tIn.Reset()
	return false
}

// This implementation of Span doesn't help all too much, but it needs to be
// there to satisfy this package's Transformer interface.
// TODO: there are certainly room for improvements, though. For example, if
// t.t == transform.Nop (which will a common occurrence) it will save a bundle
// to special-case that loop.
func (t *cond) Span(src []byte, atEOF bool) (n int, err error) {
	p := 0
	for n < len(src) && err == nil {
		// Don't process too much at a time as the Spanner that will be
		// called on this block may terminate early.
		const maxChunk = 4096
		max := len(src)
		if v := n + maxChunk; v < max {
			max = v
		}
		atEnd := false
		size := 0
		current := t.t
		for ; p < max; p += size {
			r := rune(src[p])
			if r < utf8.RuneSelf {
				size = 1
			} else if r, size = utf8.DecodeRune(src[p:]); size == 1 {
				if !atEOF && !utf8.FullRune(src[p:]) {
					err = transform.ErrShortSrc
					break
				}
			}
			if !t.check(r) {
				// The next rune will be the start of a new run.
				atEnd = true
				break
			}
		}
		n2, err2 := current.Span(src[n:p], atEnd || (atEOF && p == len(src)))
		n += n2
		if err2 != nil {
			return n, err2
		}
		// At this point either err != nil or t.check will pass for the rune at p.
		p = n + size
	}
	return n, err
}

func (t *cond) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	p := 0
	for nSrc < len(src) && err == nil {
		// Don't process too much at a time, as the work might be wasted if the
		// destination buffer isn't large enough to hold the result or a
		// transform returns an error early.
		const maxChunk = 4096
		max := len(src)
		if n := nSrc + maxChunk; n < len(src) {
			max = n
		}
		atEnd := false
		size := 0
		current := t.t
		for ; p < max; p += size {
			r := rune(src[p])
			if r < utf8.RuneSelf {
				size = 1
			} else if r, size = utf8.DecodeRune(src[p:]); size == 1 {
				if !atEOF && !utf8.FullRune(src[p:]) {
					err = transform.ErrShortSrc
					break
				}
			}
			if !t.check(r) {
				// The next rune will be the start of a new run.
				atEnd = true
				break
			}
		}
		nDst2, nSrc2, err2 := current.Transform(dst[nDst:], src[nSrc:p], atEnd || (atEOF && p == len(src)))
		nDst += nDst2
		nSrc += nSrc2
		if err2 != nil {
			return nDst, nSrc, err2
		}
		// At this point either err != nil or t.check will pass for the rune at p.
		p = nSrc + size
	}
	return nDst, nSrc, err
}
   07070100000F36000081A4000000000000000000000001645E367C000021E5000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/golang.org/x/text/runes/runes.go   // Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package runes provide transforms for UTF-8 encoded text.
package runes // import "golang.org/x/text/runes"

import (
	"unicode"
	"unicode/utf8"

	"golang.org/x/text/transform"
)

// A Set is a collection of runes.
type Set interface {
	// Contains returns true if r is contained in the set.
	Contains(r rune) bool
}

type setFunc func(rune) bool

func (s setFunc) Contains(r rune) bool {
	return s(r)
}

// Note: using funcs here instead of wrapping types result in cleaner
// documentation and a smaller API.

// In creates a Set with a Contains method that returns true for all runes in
// the given RangeTable.
func In(rt *unicode.RangeTable) Set {
	return setFunc(func(r rune) bool { return unicode.Is(rt, r) })
}

// NotIn creates a Set with a Contains method that returns true for all runes not
// in the given RangeTable.
func NotIn(rt *unicode.RangeTable) Set {
	return setFunc(func(r rune) bool { return !unicode.Is(rt, r) })
}

// Predicate creates a Set with a Contains method that returns f(r).
func Predicate(f func(rune) bool) Set {
	return setFunc(f)
}

// Transformer implements the transform.Transformer interface.
type Transformer struct {
	t transform.SpanningTransformer
}

func (t Transformer) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	return t.t.Transform(dst, src, atEOF)
}

func (t Transformer) Span(b []byte, atEOF bool) (n int, err error) {
	return t.t.Span(b, atEOF)
}

func (t Transformer) Reset() { t.t.Reset() }

// Bytes returns a new byte slice with the result of converting b using t.  It
// calls Reset on t. It returns nil if any error was found. This can only happen
// if an error-producing Transformer is passed to If.
func (t Transformer) Bytes(b []byte) []byte {
	b, _, err := transform.Bytes(t, b)
	if err != nil {
		return nil
	}
	return b
}

// String returns a string with the result of converting s using t. It calls
// Reset on t. It returns the empty string if any error was found. This can only
// happen if an error-producing Transformer is passed to If.
func (t Transformer) String(s string) string {
	s, _, err := transform.String(t, s)
	if err != nil {
		return ""
	}
	return s
}

// TODO:
// - Copy: copying strings and bytes in whole-rune units.
// - Validation (maybe)
// - Well-formed-ness (maybe)

const runeErrorString = string(utf8.RuneError)

// Remove returns a Transformer that removes runes r for which s.Contains(r).
// Illegal input bytes are replaced by RuneError before being passed to f.
func Remove(s Set) Transformer {
	if f, ok := s.(setFunc); ok {
		// This little trick cuts the running time of BenchmarkRemove for sets
		// created by Predicate roughly in half.
		// TODO: special-case RangeTables as well.
		return Transformer{remove(f)}
	}
	return Transformer{remove(s.Contains)}
}

// TODO: remove transform.RemoveFunc.

type remove func(r rune) bool

func (remove) Reset() {}

// Span implements transform.Spanner.
func (t remove) Span(src []byte, atEOF bool) (n int, err error) {
	for r, size := rune(0), 0; n < len(src); {
		if r = rune(src[n]); r < utf8.RuneSelf {
			size = 1
		} else if r, size = utf8.DecodeRune(src[n:]); size == 1 {
			// Invalid rune.
			if !atEOF && !utf8.FullRune(src[n:]) {
				err = transform.ErrShortSrc
			} else {
				err = transform.ErrEndOfSpan
			}
			break
		}
		if t(r) {
			err = transform.ErrEndOfSpan
			break
		}
		n += size
	}
	return
}

// Transform implements transform.Transformer.
func (t remove) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	for r, size := rune(0), 0; nSrc < len(src); {
		if r = rune(src[nSrc]); r < utf8.RuneSelf {
			size = 1
		} else if r, size = utf8.DecodeRune(src[nSrc:]); size == 1 {
			// Invalid rune.
			if !atEOF && !utf8.FullRune(src[nSrc:]) {
				err = transform.ErrShortSrc
				break
			}
			// We replace illegal bytes with RuneError. Not doing so might
			// otherwise turn a sequence of invalid UTF-8 into valid UTF-8.
			// The resulting byte sequence may subsequently contain runes
			// for which t(r) is true that were passed unnoticed.
			if !t(utf8.RuneError) {
				if nDst+3 > len(dst) {
					err = transform.ErrShortDst
					break
				}
				dst[nDst+0] = runeErrorString[0]
				dst[nDst+1] = runeErrorString[1]
				dst[nDst+2] = runeErrorString[2]
				nDst += 3
			}
			nSrc++
			continue
		}
		if t(r) {
			nSrc += size
			continue
		}
		if nDst+size > len(dst) {
			err = transform.ErrShortDst
			break
		}
		for i := 0; i < size; i++ {
			dst[nDst] = src[nSrc]
			nDst++
			nSrc++
		}
	}
	return
}

// Map returns a Transformer that maps the runes in the input using the given
// mapping. Illegal bytes in the input are converted to utf8.RuneError before
// being passed to the mapping func.
func Map(mapping func(rune) rune) Transformer {
	return Transformer{mapper(mapping)}
}

type mapper func(rune) rune

func (mapper) Reset() {}

// Span implements transform.Spanner.
func (t mapper) Span(src []byte, atEOF bool) (n int, err error) {
	for r, size := rune(0), 0; n < len(src); n += size {
		if r = rune(src[n]); r < utf8.RuneSelf {
			size = 1
		} else if r, size = utf8.DecodeRune(src[n:]); size == 1 {
			// Invalid rune.
			if !atEOF && !utf8.FullRune(src[n:]) {
				err = transform.ErrShortSrc
			} else {
				err = transform.ErrEndOfSpan
			}
			break
		}
		if t(r) != r {
			err = transform.ErrEndOfSpan
			break
		}
	}
	return n, err
}

// Transform implements transform.Transformer.
func (t mapper) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	var replacement rune
	var b [utf8.UTFMax]byte

	for r, size := rune(0), 0; nSrc < len(src); {
		if r = rune(src[nSrc]); r < utf8.RuneSelf {
			if replacement = t(r); replacement < utf8.RuneSelf {
				if nDst == len(dst) {
					err = transform.ErrShortDst
					break
				}
				dst[nDst] = byte(replacement)
				nDst++
				nSrc++
				continue
			}
			size = 1
		} else if r, size = utf8.DecodeRune(src[nSrc:]); size == 1 {
			// Invalid rune.
			if !atEOF && !utf8.FullRune(src[nSrc:]) {
				err = transform.ErrShortSrc
				break
			}

			if replacement = t(utf8.RuneError); replacement == utf8.RuneError {
				if nDst+3 > len(dst) {
					err = transform.ErrShortDst
					break
				}
				dst[nDst+0] = runeErrorString[0]
				dst[nDst+1] = runeErrorString[1]
				dst[nDst+2] = runeErrorString[2]
				nDst += 3
				nSrc++
				continue
			}
		} else if replacement = t(r); replacement == r {
			if nDst+size > len(dst) {
				err = transform.ErrShortDst
				break
			}
			for i := 0; i < size; i++ {
				dst[nDst] = src[nSrc]
				nDst++
				nSrc++
			}
			continue
		}

		n := utf8.EncodeRune(b[:], replacement)

		if nDst+n > len(dst) {
			err = transform.ErrShortDst
			break
		}
		for i := 0; i < n; i++ {
			dst[nDst] = b[i]
			nDst++
		}
		nSrc += size
	}
	return
}

// ReplaceIllFormed returns a transformer that replaces all input bytes that are
// not part of a well-formed UTF-8 code sequence with utf8.RuneError.
func ReplaceIllFormed() Transformer {
	return Transformer{&replaceIllFormed{}}
}

type replaceIllFormed struct{ transform.NopResetter }

func (t replaceIllFormed) Span(src []byte, atEOF bool) (n int, err error) {
	for n < len(src) {
		// ASCII fast path.
		if src[n] < utf8.RuneSelf {
			n++
			continue
		}

		r, size := utf8.DecodeRune(src[n:])

		// Look for a valid non-ASCII rune.
		if r != utf8.RuneError || size != 1 {
			n += size
			continue
		}

		// Look for short source data.
		if !atEOF && !utf8.FullRune(src[n:]) {
			err = transform.ErrShortSrc
			break
		}

		// We have an invalid rune.
		err = transform.ErrEndOfSpan
		break
	}
	return n, err
}

func (t replaceIllFormed) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	for nSrc < len(src) {
		// ASCII fast path.
		if r := src[nSrc]; r < utf8.RuneSelf {
			if nDst == len(dst) {
				err = transform.ErrShortDst
				break
			}
			dst[nDst] = r
			nDst++
			nSrc++
			continue
		}

		// Look for a valid non-ASCII rune.
		if _, size := utf8.DecodeRune(src[nSrc:]); size != 1 {
			if size != copy(dst[nDst:], src[nSrc:nSrc+size]) {
				err = transform.ErrShortDst
				break
			}
			nDst += size
			nSrc += size
			continue
		}

		// Look for short source data.
		if !atEOF && !utf8.FullRune(src[nSrc:]) {
			err = transform.ErrShortSrc
			break
		}

		// We have an invalid rune.
		if nDst+3 > len(dst) {
			err = transform.ErrShortDst
			break
		}
		dst[nDst+0] = runeErrorString[0]
		dst[nDst+1] = runeErrorString[1]
		dst[nDst+2] = runeErrorString[2]
		nDst += 3
		nSrc++
	}
	return nDst, nSrc, err
}
   07070100000F37000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/golang.org/x/text/transform    07070100000F38000081A4000000000000000000000001645E367C000056FC000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/golang.org/x/text/transform/transform.go   // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package transform provides reader and writer wrappers that transform the
// bytes passing through as well as various transformations. Example
// transformations provided by other packages include normalization and
// conversion between character sets.
package transform // import "golang.org/x/text/transform"

import (
	"bytes"
	"errors"
	"io"
	"unicode/utf8"
)

var (
	// ErrShortDst means that the destination buffer was too short to
	// receive all of the transformed bytes.
	ErrShortDst = errors.New("transform: short destination buffer")

	// ErrShortSrc means that the source buffer has insufficient data to
	// complete the transformation.
	ErrShortSrc = errors.New("transform: short source buffer")

	// ErrEndOfSpan means that the input and output (the transformed input)
	// are not identical.
	ErrEndOfSpan = errors.New("transform: input and output are not identical")

	// errInconsistentByteCount means that Transform returned success (nil
	// error) but also returned nSrc inconsistent with the src argument.
	errInconsistentByteCount = errors.New("transform: inconsistent byte count returned")

	// errShortInternal means that an internal buffer is not large enough
	// to make progress and the Transform operation must be aborted.
	errShortInternal = errors.New("transform: short internal buffer")
)

// Transformer transforms bytes.
type Transformer interface {
	// Transform writes to dst the transformed bytes read from src, and
	// returns the number of dst bytes written and src bytes read. The
	// atEOF argument tells whether src represents the last bytes of the
	// input.
	//
	// Callers should always process the nDst bytes produced and account
	// for the nSrc bytes consumed before considering the error err.
	//
	// A nil error means that all of the transformed bytes (whether freshly
	// transformed from src or left over from previous Transform calls)
	// were written to dst. A nil error can be returned regardless of
	// whether atEOF is true. If err is nil then nSrc must equal len(src);
	// the converse is not necessarily true.
	//
	// ErrShortDst means that dst was too short to receive all of the
	// transformed bytes. ErrShortSrc means that src had insufficient data
	// to complete the transformation. If both conditions apply, then
	// either error may be returned. Other than the error conditions listed
	// here, implementations are free to report other errors that arise.
	Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error)

	// Reset resets the state and allows a Transformer to be reused.
	Reset()
}

// SpanningTransformer extends the Transformer interface with a Span method
// that determines how much of the input already conforms to the Transformer.
type SpanningTransformer interface {
	Transformer

	// Span returns a position in src such that transforming src[:n] results in
	// identical output src[:n] for these bytes. It does not necessarily return
	// the largest such n. The atEOF argument tells whether src represents the
	// last bytes of the input.
	//
	// Callers should always account for the n bytes consumed before
	// considering the error err.
	//
	// A nil error means that all input bytes are known to be identical to the
	// output produced by the Transformer. A nil error can be returned
	// regardless of whether atEOF is true. If err is nil, then n must
	// equal len(src); the converse is not necessarily true.
	//
	// ErrEndOfSpan means that the Transformer output may differ from the
	// input after n bytes. Note that n may be len(src), meaning that the output
	// would contain additional bytes after otherwise identical output.
	// ErrShortSrc means that src had insufficient data to determine whether the
	// remaining bytes would change. Other than the error conditions listed
	// here, implementations are free to report other errors that arise.
	//
	// Calling Span can modify the Transformer state as a side effect. In
	// effect, it does the transformation just as calling Transform would, only
	// without copying to a destination buffer and only up to a point it can
	// determine the input and output bytes are the same. This is obviously more
	// limited than calling Transform, but can be more efficient in terms of
	// copying and allocating buffers. Calls to Span and Transform may be
	// interleaved.
	Span(src []byte, atEOF bool) (n int, err error)
}

// NopResetter can be embedded by implementations of Transformer to add a nop
// Reset method.
type NopResetter struct{}

// Reset implements the Reset method of the Transformer interface.
func (NopResetter) Reset() {}

// Reader wraps another io.Reader by transforming the bytes read.
type Reader struct {
	r   io.Reader
	t   Transformer
	err error

	// dst[dst0:dst1] contains bytes that have been transformed by t but
	// not yet copied out via Read.
	dst        []byte
	dst0, dst1 int

	// src[src0:src1] contains bytes that have been read from r but not
	// yet transformed through t.
	src        []byte
	src0, src1 int

	// transformComplete is whether the transformation is complete,
	// regardless of whether or not it was successful.
	transformComplete bool
}

const defaultBufSize = 4096

// NewReader returns a new Reader that wraps r by transforming the bytes read
// via t. It calls Reset on t.
func NewReader(r io.Reader, t Transformer) *Reader {
	t.Reset()
	return &Reader{
		r:   r,
		t:   t,
		dst: make([]byte, defaultBufSize),
		src: make([]byte, defaultBufSize),
	}
}

// Read implements the io.Reader interface.
func (r *Reader) Read(p []byte) (int, error) {
	n, err := 0, error(nil)
	for {
		// Copy out any transformed bytes and return the final error if we are done.
		if r.dst0 != r.dst1 {
			n = copy(p, r.dst[r.dst0:r.dst1])
			r.dst0 += n
			if r.dst0 == r.dst1 && r.transformComplete {
				return n, r.err
			}
			return n, nil
		} else if r.transformComplete {
			return 0, r.err
		}

		// Try to transform some source bytes, or to flush the transformer if we
		// are out of source bytes. We do this even if r.r.Read returned an error.
		// As the io.Reader documentation says, "process the n > 0 bytes returned
		// before considering the error".
		if r.src0 != r.src1 || r.err != nil {
			r.dst0 = 0
			r.dst1, n, err = r.t.Transform(r.dst, r.src[r.src0:r.src1], r.err == io.EOF)
			r.src0 += n

			switch {
			case err == nil:
				if r.src0 != r.src1 {
					r.err = errInconsistentByteCount
				}
				// The Transform call was successful; we are complete if we
				// cannot read more bytes into src.
				r.transformComplete = r.err != nil
				continue
			case err == ErrShortDst && (r.dst1 != 0 || n != 0):
				// Make room in dst by copying out, and try again.
				continue
			case err == ErrShortSrc && r.src1-r.src0 != len(r.src) && r.err == nil:
				// Read more bytes into src via the code below, and try again.
			default:
				r.transformComplete = true
				// The reader error (r.err) takes precedence over the
				// transformer error (err) unless r.err is nil or io.EOF.
				if r.err == nil || r.err == io.EOF {
					r.err = err
				}
				continue
			}
		}

		// Move any untransformed source bytes to the start of the buffer
		// and read more bytes.
		if r.src0 != 0 {
			r.src0, r.src1 = 0, copy(r.src, r.src[r.src0:r.src1])
		}
		n, r.err = r.r.Read(r.src[r.src1:])
		r.src1 += n
	}
}

// TODO: implement ReadByte (and ReadRune??).

// Writer wraps another io.Writer by transforming the bytes read.
// The user needs to call Close to flush unwritten bytes that may
// be buffered.
type Writer struct {
	w   io.Writer
	t   Transformer
	dst []byte

	// src[:n] contains bytes that have not yet passed through t.
	src []byte
	n   int
}

// NewWriter returns a new Writer that wraps w by transforming the bytes written
// via t. It calls Reset on t.
func NewWriter(w io.Writer, t Transformer) *Writer {
	t.Reset()
	return &Writer{
		w:   w,
		t:   t,
		dst: make([]byte, defaultBufSize),
		src: make([]byte, defaultBufSize),
	}
}

// Write implements the io.Writer interface. If there are not enough
// bytes available to complete a Transform, the bytes will be buffered
// for the next write. Call Close to convert the remaining bytes.
func (w *Writer) Write(data []byte) (n int, err error) {
	src := data
	if w.n > 0 {
		// Append bytes from data to the last remainder.
		// TODO: limit the amount copied on first try.
		n = copy(w.src[w.n:], data)
		w.n += n
		src = w.src[:w.n]
	}
	for {
		nDst, nSrc, err := w.t.Transform(w.dst, src, false)
		if _, werr := w.w.Write(w.dst[:nDst]); werr != nil {
			return n, werr
		}
		src = src[nSrc:]
		if w.n == 0 {
			n += nSrc
		} else if len(src) <= n {
			// Enough bytes from w.src have been consumed. We make src point
			// to data instead to reduce the copying.
			w.n = 0
			n -= len(src)
			src = data[n:]
			if n < len(data) && (err == nil || err == ErrShortSrc) {
				continue
			}
		}
		switch err {
		case ErrShortDst:
			// This error is okay as long as we are making progress.
			if nDst > 0 || nSrc > 0 {
				continue
			}
		case ErrShortSrc:
			if len(src) < len(w.src) {
				m := copy(w.src, src)
				// If w.n > 0, bytes from data were already copied to w.src and n
				// was already set to the number of bytes consumed.
				if w.n == 0 {
					n += m
				}
				w.n = m
				err = nil
			} else if nDst > 0 || nSrc > 0 {
				// Not enough buffer to store the remainder. Keep processing as
				// long as there is progress. Without this case, transforms that
				// require a lookahead larger than the buffer may result in an
				// error. This is not something one may expect to be common in
				// practice, but it may occur when buffers are set to small
				// sizes during testing.
				continue
			}
		case nil:
			if w.n > 0 {
				err = errInconsistentByteCount
			}
		}
		return n, err
	}
}

// Close implements the io.Closer interface.
func (w *Writer) Close() error {
	src := w.src[:w.n]
	for {
		nDst, nSrc, err := w.t.Transform(w.dst, src, true)
		if _, werr := w.w.Write(w.dst[:nDst]); werr != nil {
			return werr
		}
		if err != ErrShortDst {
			return err
		}
		src = src[nSrc:]
	}
}

type nop struct{ NopResetter }

func (nop) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	n := copy(dst, src)
	if n < len(src) {
		err = ErrShortDst
	}
	return n, n, err
}

func (nop) Span(src []byte, atEOF bool) (n int, err error) {
	return len(src), nil
}

type discard struct{ NopResetter }

func (discard) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	return 0, len(src), nil
}

var (
	// Discard is a Transformer for which all Transform calls succeed
	// by consuming all bytes and writing nothing.
	Discard Transformer = discard{}

	// Nop is a SpanningTransformer that copies src to dst.
	Nop SpanningTransformer = nop{}
)

// chain is a sequence of links. A chain with N Transformers has N+1 links and
// N+1 buffers. Of those N+1 buffers, the first and last are the src and dst
// buffers given to chain.Transform and the middle N-1 buffers are intermediate
// buffers owned by the chain. The i'th link transforms bytes from the i'th
// buffer chain.link[i].b at read offset chain.link[i].p to the i+1'th buffer
// chain.link[i+1].b at write offset chain.link[i+1].n, for i in [0, N).
type chain struct {
	link []link
	err  error
	// errStart is the index at which the error occurred plus 1. Processing
	// errStart at this level at the next call to Transform. As long as
	// errStart > 0, chain will not consume any more source bytes.
	errStart int
}

func (c *chain) fatalError(errIndex int, err error) {
	if i := errIndex + 1; i > c.errStart {
		c.errStart = i
		c.err = err
	}
}

type link struct {
	t Transformer
	// b[p:n] holds the bytes to be transformed by t.
	b []byte
	p int
	n int
}

func (l *link) src() []byte {
	return l.b[l.p:l.n]
}

func (l *link) dst() []byte {
	return l.b[l.n:]
}

// Chain returns a Transformer that applies t in sequence.
func Chain(t ...Transformer) Transformer {
	if len(t) == 0 {
		return nop{}
	}
	c := &chain{link: make([]link, len(t)+1)}
	for i, tt := range t {
		c.link[i].t = tt
	}
	// Allocate intermediate buffers.
	b := make([][defaultBufSize]byte, len(t)-1)
	for i := range b {
		c.link[i+1].b = b[i][:]
	}
	return c
}

// Reset resets the state of Chain. It calls Reset on all the Transformers.
func (c *chain) Reset() {
	for i, l := range c.link {
		if l.t != nil {
			l.t.Reset()
		}
		c.link[i].p, c.link[i].n = 0, 0
	}
}

// TODO: make chain use Span (is going to be fun to implement!)

// Transform applies the transformers of c in sequence.
func (c *chain) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	// Set up src and dst in the chain.
	srcL := &c.link[0]
	dstL := &c.link[len(c.link)-1]
	srcL.b, srcL.p, srcL.n = src, 0, len(src)
	dstL.b, dstL.n = dst, 0
	var lastFull, needProgress bool // for detecting progress

	// i is the index of the next Transformer to apply, for i in [low, high].
	// low is the lowest index for which c.link[low] may still produce bytes.
	// high is the highest index for which c.link[high] has a Transformer.
	// The error returned by Transform determines whether to increase or
	// decrease i. We try to completely fill a buffer before converting it.
	for low, i, high := c.errStart, c.errStart, len(c.link)-2; low <= i && i <= high; {
		in, out := &c.link[i], &c.link[i+1]
		nDst, nSrc, err0 := in.t.Transform(out.dst(), in.src(), atEOF && low == i)
		out.n += nDst
		in.p += nSrc
		if i > 0 && in.p == in.n {
			in.p, in.n = 0, 0
		}
		needProgress, lastFull = lastFull, false
		switch err0 {
		case ErrShortDst:
			// Process the destination buffer next. Return if we are already
			// at the high index.
			if i == high {
				return dstL.n, srcL.p, ErrShortDst
			}
			if out.n != 0 {
				i++
				// If the Transformer at the next index is not able to process any
				// source bytes there is nothing that can be done to make progress
				// and the bytes will remain unprocessed. lastFull is used to
				// detect this and break out of the loop with a fatal error.
				lastFull = true
				continue
			}
			// The destination buffer was too small, but is completely empty.
			// Return a fatal error as this transformation can never complete.
			c.fatalError(i, errShortInternal)
		case ErrShortSrc:
			if i == 0 {
				// Save ErrShortSrc in err. All other errors take precedence.
				err = ErrShortSrc
				break
			}
			// Source bytes were depleted before filling up the destination buffer.
			// Verify we made some progress, move the remaining bytes to the errStart
			// and try to get more source bytes.
			if needProgress && nSrc == 0 || in.n-in.p == len(in.b) {
				// There were not enough source bytes to proceed while the source
				// buffer cannot hold any more bytes. Return a fatal error as this
				// transformation can never complete.
				c.fatalError(i, errShortInternal)
				break
			}
			// in.b is an internal buffer and we can make progress.
			in.p, in.n = 0, copy(in.b, in.src())
			fallthrough
		case nil:
			// if i == low, we have depleted the bytes at index i or any lower levels.
			// In that case we increase low and i. In all other cases we decrease i to
			// fetch more bytes before proceeding to the next index.
			if i > low {
				i--
				continue
			}
		default:
			c.fatalError(i, err0)
		}
		// Exhausted level low or fatal error: increase low and continue
		// to process the bytes accepted so far.
		i++
		low = i
	}

	// If c.errStart > 0, this means we found a fatal error.  We will clear
	// all upstream buffers. At this point, no more progress can be made
	// downstream, as Transform would have bailed while handling ErrShortDst.
	if c.errStart > 0 {
		for i := 1; i < c.errStart; i++ {
			c.link[i].p, c.link[i].n = 0, 0
		}
		err, c.errStart, c.err = c.err, 0, nil
	}
	return dstL.n, srcL.p, err
}

// Deprecated: Use runes.Remove instead.
func RemoveFunc(f func(r rune) bool) Transformer {
	return removeF(f)
}

type removeF func(r rune) bool

func (removeF) Reset() {}

// Transform implements the Transformer interface.
func (t removeF) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	for r, sz := rune(0), 0; len(src) > 0; src = src[sz:] {

		if r = rune(src[0]); r < utf8.RuneSelf {
			sz = 1
		} else {
			r, sz = utf8.DecodeRune(src)

			if sz == 1 {
				// Invalid rune.
				if !atEOF && !utf8.FullRune(src) {
					err = ErrShortSrc
					break
				}
				// We replace illegal bytes with RuneError. Not doing so might
				// otherwise turn a sequence of invalid UTF-8 into valid UTF-8.
				// The resulting byte sequence may subsequently contain runes
				// for which t(r) is true that were passed unnoticed.
				if !t(r) {
					if nDst+3 > len(dst) {
						err = ErrShortDst
						break
					}
					nDst += copy(dst[nDst:], "\uFFFD")
				}
				nSrc++
				continue
			}
		}

		if !t(r) {
			if nDst+sz > len(dst) {
				err = ErrShortDst
				break
			}
			nDst += copy(dst[nDst:], src[:sz])
		}
		nSrc += sz
	}
	return
}

// grow returns a new []byte that is longer than b, and copies the first n bytes
// of b to the start of the new slice.
func grow(b []byte, n int) []byte {
	m := len(b)
	if m <= 32 {
		m = 64
	} else if m <= 256 {
		m *= 2
	} else {
		m += m >> 1
	}
	buf := make([]byte, m)
	copy(buf, b[:n])
	return buf
}

const initialBufSize = 128

// String returns a string with the result of converting s[:n] using t, where
// n <= len(s). If err == nil, n will be len(s). It calls Reset on t.
func String(t Transformer, s string) (result string, n int, err error) {
	t.Reset()
	if s == "" {
		// Fast path for the common case for empty input. Results in about a
		// 86% reduction of running time for BenchmarkStringLowerEmpty.
		if _, _, err := t.Transform(nil, nil, true); err == nil {
			return "", 0, nil
		}
	}

	// Allocate only once. Note that both dst and src escape when passed to
	// Transform.
	buf := [2 * initialBufSize]byte{}
	dst := buf[:initialBufSize:initialBufSize]
	src := buf[initialBufSize : 2*initialBufSize]

	// The input string s is transformed in multiple chunks (starting with a
	// chunk size of initialBufSize). nDst and nSrc are per-chunk (or
	// per-Transform-call) indexes, pDst and pSrc are overall indexes.
	nDst, nSrc := 0, 0
	pDst, pSrc := 0, 0

	// pPrefix is the length of a common prefix: the first pPrefix bytes of the
	// result will equal the first pPrefix bytes of s. It is not guaranteed to
	// be the largest such value, but if pPrefix, len(result) and len(s) are
	// all equal after the final transform (i.e. calling Transform with atEOF
	// being true returned nil error) then we don't need to allocate a new
	// result string.
	pPrefix := 0
	for {
		// Invariant: pDst == pPrefix && pSrc == pPrefix.

		n := copy(src, s[pSrc:])
		nDst, nSrc, err = t.Transform(dst, src[:n], pSrc+n == len(s))
		pDst += nDst
		pSrc += nSrc

		// TODO:  let transformers implement an optional Spanner interface, akin
		// to norm's QuickSpan. This would even allow us to avoid any allocation.
		if !bytes.Equal(dst[:nDst], src[:nSrc]) {
			break
		}
		pPrefix = pSrc
		if err == ErrShortDst {
			// A buffer can only be short if a transformer modifies its input.
			break
		} else if err == ErrShortSrc {
			if nSrc == 0 {
				// No progress was made.
				break
			}
			// Equal so far and !atEOF, so continue checking.
		} else if err != nil || pPrefix == len(s) {
			return string(s[:pPrefix]), pPrefix, err
		}
	}
	// Post-condition: pDst == pPrefix + nDst && pSrc == pPrefix + nSrc.

	// We have transformed the first pSrc bytes of the input s to become pDst
	// transformed bytes. Those transformed bytes are discontiguous: the first
	// pPrefix of them equal s[:pPrefix] and the last nDst of them equal
	// dst[:nDst]. We copy them around, into a new dst buffer if necessary, so
	// that they become one contiguous slice: dst[:pDst].
	if pPrefix != 0 {
		newDst := dst
		if pDst > len(newDst) {
			newDst = make([]byte, len(s)+nDst-nSrc)
		}
		copy(newDst[pPrefix:pDst], dst[:nDst])
		copy(newDst[:pPrefix], s[:pPrefix])
		dst = newDst
	}

	// Prevent duplicate Transform calls with atEOF being true at the end of
	// the input. Also return if we have an unrecoverable error.
	if (err == nil && pSrc == len(s)) ||
		(err != nil && err != ErrShortDst && err != ErrShortSrc) {
		return string(dst[:pDst]), pSrc, err
	}

	// Transform the remaining input, growing dst and src buffers as necessary.
	for {
		n := copy(src, s[pSrc:])
		atEOF := pSrc+n == len(s)
		nDst, nSrc, err := t.Transform(dst[pDst:], src[:n], atEOF)
		pDst += nDst
		pSrc += nSrc

		// If we got ErrShortDst or ErrShortSrc, do not grow as long as we can
		// make progress. This may avoid excessive allocations.
		if err == ErrShortDst {
			if nDst == 0 {
				dst = grow(dst, pDst)
			}
		} else if err == ErrShortSrc {
			if atEOF {
				return string(dst[:pDst]), pSrc, err
			}
			if nSrc == 0 {
				src = grow(src, 0)
			}
		} else if err != nil || pSrc == len(s) {
			return string(dst[:pDst]), pSrc, err
		}
	}
}

// Bytes returns a new byte slice with the result of converting b[:n] using t,
// where n <= len(b). If err == nil, n will be len(b). It calls Reset on t.
func Bytes(t Transformer, b []byte) (result []byte, n int, err error) {
	return doAppend(t, 0, make([]byte, len(b)), b)
}

// Append appends the result of converting src[:n] using t to dst, where
// n <= len(src), If err == nil, n will be len(src). It calls Reset on t.
func Append(t Transformer, dst, src []byte) (result []byte, n int, err error) {
	if len(dst) == cap(dst) {
		n := len(src) + len(dst) // It is okay for this to be 0.
		b := make([]byte, n)
		dst = b[:copy(b, dst)]
	}
	return doAppend(t, len(dst), dst[:cap(dst)], src)
}

func doAppend(t Transformer, pDst int, dst, src []byte) (result []byte, n int, err error) {
	t.Reset()
	pSrc := 0
	for {
		nDst, nSrc, err := t.Transform(dst[pDst:], src[pSrc:], true)
		pDst += nDst
		pSrc += nSrc
		if err != ErrShortDst {
			return dst[:pDst], pSrc, err
		}

		// Grow the destination buffer, but do not grow as long as we can make
		// progress. This may avoid excessive allocations.
		if nDst == 0 {
			dst = grow(dst, pDst)
		}
	}
}
07070100000F39000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/golang.org/x/text/unicode  07070100000F3A000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/golang.org/x/text/unicode/norm 07070100000F3B000081A4000000000000000000000001645E367C00003874000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/text/unicode/norm/composition.go  // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package norm

import "unicode/utf8"

const (
	maxNonStarters = 30
	// The maximum number of characters needed for a buffer is
	// maxNonStarters + 1 for the starter + 1 for the GCJ
	maxBufferSize    = maxNonStarters + 2
	maxNFCExpansion  = 3  // NFC(0x1D160)
	maxNFKCExpansion = 18 // NFKC(0xFDFA)

	maxByteBufferSize = utf8.UTFMax * maxBufferSize // 128
)

// ssState is used for reporting the segment state after inserting a rune.
// It is returned by streamSafe.next.
type ssState int

const (
	// Indicates a rune was successfully added to the segment.
	ssSuccess ssState = iota
	// Indicates a rune starts a new segment and should not be added.
	ssStarter
	// Indicates a rune caused a segment overflow and a CGJ should be inserted.
	ssOverflow
)

// streamSafe implements the policy of when a CGJ should be inserted.
type streamSafe uint8

// first inserts the first rune of a segment. It is a faster version of next if
// it is known p represents the first rune in a segment.
func (ss *streamSafe) first(p Properties) {
	*ss = streamSafe(p.nTrailingNonStarters())
}

// insert returns a ssState value to indicate whether a rune represented by p
// can be inserted.
func (ss *streamSafe) next(p Properties) ssState {
	if *ss > maxNonStarters {
		panic("streamSafe was not reset")
	}
	n := p.nLeadingNonStarters()
	if *ss += streamSafe(n); *ss > maxNonStarters {
		*ss = 0
		return ssOverflow
	}
	// The Stream-Safe Text Processing prescribes that the counting can stop
	// as soon as a starter is encountered. However, there are some starters,
	// like Jamo V and T, that can combine with other runes, leaving their
	// successive non-starters appended to the previous, possibly causing an
	// overflow. We will therefore consider any rune with a non-zero nLead to
	// be a non-starter. Note that it always hold that if nLead > 0 then
	// nLead == nTrail.
	if n == 0 {
		*ss = streamSafe(p.nTrailingNonStarters())
		return ssStarter
	}
	return ssSuccess
}

// backwards is used for checking for overflow and segment starts
// when traversing a string backwards. Users do not need to call first
// for the first rune. The state of the streamSafe retains the count of
// the non-starters loaded.
func (ss *streamSafe) backwards(p Properties) ssState {
	if *ss > maxNonStarters {
		panic("streamSafe was not reset")
	}
	c := *ss + streamSafe(p.nTrailingNonStarters())
	if c > maxNonStarters {
		return ssOverflow
	}
	*ss = c
	if p.nLeadingNonStarters() == 0 {
		return ssStarter
	}
	return ssSuccess
}

func (ss streamSafe) isMax() bool {
	return ss == maxNonStarters
}

// GraphemeJoiner is inserted after maxNonStarters non-starter runes.
const GraphemeJoiner = "\u034F"

// reorderBuffer is used to normalize a single segment.  Characters inserted with
// insert are decomposed and reordered based on CCC. The compose method can
// be used to recombine characters.  Note that the byte buffer does not hold
// the UTF-8 characters in order.  Only the rune array is maintained in sorted
// order. flush writes the resulting segment to a byte array.
type reorderBuffer struct {
	rune  [maxBufferSize]Properties // Per character info.
	byte  [maxByteBufferSize]byte   // UTF-8 buffer. Referenced by runeInfo.pos.
	nbyte uint8                     // Number or bytes.
	ss    streamSafe                // For limiting length of non-starter sequence.
	nrune int                       // Number of runeInfos.
	f     formInfo

	src      input
	nsrc     int
	tmpBytes input

	out    []byte
	flushF func(*reorderBuffer) bool
}

func (rb *reorderBuffer) init(f Form, src []byte) {
	rb.f = *formTable[f]
	rb.src.setBytes(src)
	rb.nsrc = len(src)
	rb.ss = 0
}

func (rb *reorderBuffer) initString(f Form, src string) {
	rb.f = *formTable[f]
	rb.src.setString(src)
	rb.nsrc = len(src)
	rb.ss = 0
}

func (rb *reorderBuffer) setFlusher(out []byte, f func(*reorderBuffer) bool) {
	rb.out = out
	rb.flushF = f
}

// reset discards all characters from the buffer.
func (rb *reorderBuffer) reset() {
	rb.nrune = 0
	rb.nbyte = 0
}

func (rb *reorderBuffer) doFlush() bool {
	if rb.f.composing {
		rb.compose()
	}
	res := rb.flushF(rb)
	rb.reset()
	return res
}

// appendFlush appends the normalized segment to rb.out.
func appendFlush(rb *reorderBuffer) bool {
	for i := 0; i < rb.nrune; i++ {
		start := rb.rune[i].pos
		end := start + rb.rune[i].size
		rb.out = append(rb.out, rb.byte[start:end]...)
	}
	return true
}

// flush appends the normalized segment to out and resets rb.
func (rb *reorderBuffer) flush(out []byte) []byte {
	for i := 0; i < rb.nrune; i++ {
		start := rb.rune[i].pos
		end := start + rb.rune[i].size
		out = append(out, rb.byte[start:end]...)
	}
	rb.reset()
	return out
}

// flushCopy copies the normalized segment to buf and resets rb.
// It returns the number of bytes written to buf.
func (rb *reorderBuffer) flushCopy(buf []byte) int {
	p := 0
	for i := 0; i < rb.nrune; i++ {
		runep := rb.rune[i]
		p += copy(buf[p:], rb.byte[runep.pos:runep.pos+runep.size])
	}
	rb.reset()
	return p
}

// insertOrdered inserts a rune in the buffer, ordered by Canonical Combining Class.
// It returns false if the buffer is not large enough to hold the rune.
// It is used internally by insert and insertString only.
func (rb *reorderBuffer) insertOrdered(info Properties) {
	n := rb.nrune
	b := rb.rune[:]
	cc := info.ccc
	if cc > 0 {
		// Find insertion position + move elements to make room.
		for ; n > 0; n-- {
			if b[n-1].ccc <= cc {
				break
			}
			b[n] = b[n-1]
		}
	}
	rb.nrune += 1
	pos := uint8(rb.nbyte)
	rb.nbyte += utf8.UTFMax
	info.pos = pos
	b[n] = info
}

// insertErr is an error code returned by insert. Using this type instead
// of error improves performance up to 20% for many of the benchmarks.
type insertErr int

const (
	iSuccess insertErr = -iota
	iShortDst
	iShortSrc
)

// insertFlush inserts the given rune in the buffer ordered by CCC.
// If a decomposition with multiple segments are encountered, they leading
// ones are flushed.
// It returns a non-zero error code if the rune was not inserted.
func (rb *reorderBuffer) insertFlush(src input, i int, info Properties) insertErr {
	if rune := src.hangul(i); rune != 0 {
		rb.decomposeHangul(rune)
		return iSuccess
	}
	if info.hasDecomposition() {
		return rb.insertDecomposed(info.Decomposition())
	}
	rb.insertSingle(src, i, info)
	return iSuccess
}

// insertUnsafe inserts the given rune in the buffer ordered by CCC.
// It is assumed there is sufficient space to hold the runes. It is the
// responsibility of the caller to ensure this. This can be done by checking
// the state returned by the streamSafe type.
func (rb *reorderBuffer) insertUnsafe(src input, i int, info Properties) {
	if rune := src.hangul(i); rune != 0 {
		rb.decomposeHangul(rune)
	}
	if info.hasDecomposition() {
		// TODO: inline.
		rb.insertDecomposed(info.Decomposition())
	} else {
		rb.insertSingle(src, i, info)
	}
}

// insertDecomposed inserts an entry in to the reorderBuffer for each rune
// in dcomp. dcomp must be a sequence of decomposed UTF-8-encoded runes.
// It flushes the buffer on each new segment start.
func (rb *reorderBuffer) insertDecomposed(dcomp []byte) insertErr {
	rb.tmpBytes.setBytes(dcomp)
	// As the streamSafe accounting already handles the counting for modifiers,
	// we don't have to call next. However, we do need to keep the accounting
	// intact when flushing the buffer.
	for i := 0; i < len(dcomp); {
		info := rb.f.info(rb.tmpBytes, i)
		if info.BoundaryBefore() && rb.nrune > 0 && !rb.doFlush() {
			return iShortDst
		}
		i += copy(rb.byte[rb.nbyte:], dcomp[i:i+int(info.size)])
		rb.insertOrdered(info)
	}
	return iSuccess
}

// insertSingle inserts an entry in the reorderBuffer for the rune at
// position i. info is the runeInfo for the rune at position i.
func (rb *reorderBuffer) insertSingle(src input, i int, info Properties) {
	src.copySlice(rb.byte[rb.nbyte:], i, i+int(info.size))
	rb.insertOrdered(info)
}

// insertCGJ inserts a Combining Grapheme Joiner (0x034f) into rb.
func (rb *reorderBuffer) insertCGJ() {
	rb.insertSingle(input{str: GraphemeJoiner}, 0, Properties{size: uint8(len(GraphemeJoiner))})
}

// appendRune inserts a rune at the end of the buffer. It is used for Hangul.
func (rb *reorderBuffer) appendRune(r rune) {
	bn := rb.nbyte
	sz := utf8.EncodeRune(rb.byte[bn:], rune(r))
	rb.nbyte += utf8.UTFMax
	rb.rune[rb.nrune] = Properties{pos: bn, size: uint8(sz)}
	rb.nrune++
}

// assignRune sets a rune at position pos. It is used for Hangul and recomposition.
func (rb *reorderBuffer) assignRune(pos int, r rune) {
	bn := rb.rune[pos].pos
	sz := utf8.EncodeRune(rb.byte[bn:], rune(r))
	rb.rune[pos] = Properties{pos: bn, size: uint8(sz)}
}

// runeAt returns the rune at position n. It is used for Hangul and recomposition.
func (rb *reorderBuffer) runeAt(n int) rune {
	inf := rb.rune[n]
	r, _ := utf8.DecodeRune(rb.byte[inf.pos : inf.pos+inf.size])
	return r
}

// bytesAt returns the UTF-8 encoding of the rune at position n.
// It is used for Hangul and recomposition.
func (rb *reorderBuffer) bytesAt(n int) []byte {
	inf := rb.rune[n]
	return rb.byte[inf.pos : int(inf.pos)+int(inf.size)]
}

// For Hangul we combine algorithmically, instead of using tables.
const (
	hangulBase  = 0xAC00 // UTF-8(hangulBase) -> EA B0 80
	hangulBase0 = 0xEA
	hangulBase1 = 0xB0
	hangulBase2 = 0x80

	hangulEnd  = hangulBase + jamoLVTCount // UTF-8(0xD7A4) -> ED 9E A4
	hangulEnd0 = 0xED
	hangulEnd1 = 0x9E
	hangulEnd2 = 0xA4

	jamoLBase  = 0x1100 // UTF-8(jamoLBase) -> E1 84 00
	jamoLBase0 = 0xE1
	jamoLBase1 = 0x84
	jamoLEnd   = 0x1113
	jamoVBase  = 0x1161
	jamoVEnd   = 0x1176
	jamoTBase  = 0x11A7
	jamoTEnd   = 0x11C3

	jamoTCount   = 28
	jamoVCount   = 21
	jamoVTCount  = 21 * 28
	jamoLVTCount = 19 * 21 * 28
)

const hangulUTF8Size = 3

func isHangul(b []byte) bool {
	if len(b) < hangulUTF8Size {
		return false
	}
	b0 := b[0]
	if b0 < hangulBase0 {
		return false
	}
	b1 := b[1]
	switch {
	case b0 == hangulBase0:
		return b1 >= hangulBase1
	case b0 < hangulEnd0:
		return true
	case b0 > hangulEnd0:
		return false
	case b1 < hangulEnd1:
		return true
	}
	return b1 == hangulEnd1 && b[2] < hangulEnd2
}

func isHangulString(b string) bool {
	if len(b) < hangulUTF8Size {
		return false
	}
	b0 := b[0]
	if b0 < hangulBase0 {
		return false
	}
	b1 := b[1]
	switch {
	case b0 == hangulBase0:
		return b1 >= hangulBase1
	case b0 < hangulEnd0:
		return true
	case b0 > hangulEnd0:
		return false
	case b1 < hangulEnd1:
		return true
	}
	return b1 == hangulEnd1 && b[2] < hangulEnd2
}

// Caller must ensure len(b) >= 2.
func isJamoVT(b []byte) bool {
	// True if (rune & 0xff00) == jamoLBase
	return b[0] == jamoLBase0 && (b[1]&0xFC) == jamoLBase1
}

func isHangulWithoutJamoT(b []byte) bool {
	c, _ := utf8.DecodeRune(b)
	c -= hangulBase
	return c < jamoLVTCount && c%jamoTCount == 0
}

// decomposeHangul writes the decomposed Hangul to buf and returns the number
// of bytes written.  len(buf) should be at least 9.
func decomposeHangul(buf []byte, r rune) int {
	const JamoUTF8Len = 3
	r -= hangulBase
	x := r % jamoTCount
	r /= jamoTCount
	utf8.EncodeRune(buf, jamoLBase+r/jamoVCount)
	utf8.EncodeRune(buf[JamoUTF8Len:], jamoVBase+r%jamoVCount)
	if x != 0 {
		utf8.EncodeRune(buf[2*JamoUTF8Len:], jamoTBase+x)
		return 3 * JamoUTF8Len
	}
	return 2 * JamoUTF8Len
}

// decomposeHangul algorithmically decomposes a Hangul rune into
// its Jamo components.
// See https://unicode.org/reports/tr15/#Hangul for details on decomposing Hangul.
func (rb *reorderBuffer) decomposeHangul(r rune) {
	r -= hangulBase
	x := r % jamoTCount
	r /= jamoTCount
	rb.appendRune(jamoLBase + r/jamoVCount)
	rb.appendRune(jamoVBase + r%jamoVCount)
	if x != 0 {
		rb.appendRune(jamoTBase + x)
	}
}

// combineHangul algorithmically combines Jamo character components into Hangul.
// See https://unicode.org/reports/tr15/#Hangul for details on combining Hangul.
func (rb *reorderBuffer) combineHangul(s, i, k int) {
	b := rb.rune[:]
	bn := rb.nrune
	for ; i < bn; i++ {
		cccB := b[k-1].ccc
		cccC := b[i].ccc
		if cccB == 0 {
			s = k - 1
		}
		if s != k-1 && cccB >= cccC {
			// b[i] is blocked by greater-equal cccX below it
			b[k] = b[i]
			k++
		} else {
			l := rb.runeAt(s) // also used to compare to hangulBase
			v := rb.runeAt(i) // also used to compare to jamoT
			switch {
			case jamoLBase <= l && l < jamoLEnd &&
				jamoVBase <= v && v < jamoVEnd:
				// 11xx plus 116x to LV
				rb.assignRune(s, hangulBase+
					(l-jamoLBase)*jamoVTCount+(v-jamoVBase)*jamoTCount)
			case hangulBase <= l && l < hangulEnd &&
				jamoTBase < v && v < jamoTEnd &&
				((l-hangulBase)%jamoTCount) == 0:
				// ACxx plus 11Ax to LVT
				rb.assignRune(s, l+v-jamoTBase)
			default:
				b[k] = b[i]
				k++
			}
		}
	}
	rb.nrune = k
}

// compose recombines the runes in the buffer.
// It should only be used to recompose a single segment, as it will not
// handle alternations between Hangul and non-Hangul characters correctly.
func (rb *reorderBuffer) compose() {
	// Lazily load the map used by the combine func below, but do
	// it outside of the loop.
	recompMapOnce.Do(buildRecompMap)

	// UAX #15, section X5 , including Corrigendum #5
	// "In any character sequence beginning with starter S, a character C is
	//  blocked from S if and only if there is some character B between S
	//  and C, and either B is a starter or it has the same or higher
	//  combining class as C."
	bn := rb.nrune
	if bn == 0 {
		return
	}
	k := 1
	b := rb.rune[:]
	for s, i := 0, 1; i < bn; i++ {
		if isJamoVT(rb.bytesAt(i)) {
			// Redo from start in Hangul mode. Necessary to support
			// U+320E..U+321E in NFKC mode.
			rb.combineHangul(s, i, k)
			return
		}
		ii := b[i]
		// We can only use combineForward as a filter if we later
		// get the info for the combined character. This is more
		// expensive than using the filter. Using combinesBackward()
		// is safe.
		if ii.combinesBackward() {
			cccB := b[k-1].ccc
			cccC := ii.ccc
			blocked := false // b[i] blocked by starter or greater or equal CCC?
			if cccB == 0 {
				s = k - 1
			} else {
				blocked = s != k-1 && cccB >= cccC
			}
			if !blocked {
				combined := combine(rb.runeAt(s), rb.runeAt(i))
				if combined != 0 {
					rb.assignRune(s, combined)
					continue
				}
			}
		}
		b[k] = b[i]
		k++
	}
	rb.nrune = k
}
07070100000F3C000081A4000000000000000000000001645E367C000022D1000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/text/unicode/norm/forminfo.go // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package norm

import "encoding/binary"

// This file contains Form-specific logic and wrappers for data in tables.go.

// Rune info is stored in a separate trie per composing form. A composing form
// and its corresponding decomposing form share the same trie.  Each trie maps
// a rune to a uint16. The values take two forms.  For v >= 0x8000:
//   bits
//   15:    1 (inverse of NFD_QC bit of qcInfo)
//   13..7: qcInfo (see below). isYesD is always true (no decomposition).
//    6..0: ccc (compressed CCC value).
// For v < 0x8000, the respective rune has a decomposition and v is an index
// into a byte array of UTF-8 decomposition sequences and additional info and
// has the form:
//    <header> <decomp_byte>* [<tccc> [<lccc>]]
// The header contains the number of bytes in the decomposition (excluding this
// length byte). The two most significant bits of this length byte correspond
// to bit 5 and 4 of qcInfo (see below).  The byte sequence itself starts at v+1.
// The byte sequence is followed by a trailing and leading CCC if the values
// for these are not zero.  The value of v determines which ccc are appended
// to the sequences.  For v < firstCCC, there are none, for v >= firstCCC,
// the sequence is followed by a trailing ccc, and for v >= firstLeadingCC
// there is an additional leading ccc. The value of tccc itself is the
// trailing CCC shifted left 2 bits. The two least-significant bits of tccc
// are the number of trailing non-starters.

const (
	qcInfoMask      = 0x3F // to clear all but the relevant bits in a qcInfo
	headerLenMask   = 0x3F // extract the length value from the header byte
	headerFlagsMask = 0xC0 // extract the qcInfo bits from the header byte
)

// Properties provides access to normalization properties of a rune.
type Properties struct {
	pos   uint8  // start position in reorderBuffer; used in composition.go
	size  uint8  // length of UTF-8 encoding of this rune
	ccc   uint8  // leading canonical combining class (ccc if not decomposition)
	tccc  uint8  // trailing canonical combining class (ccc if not decomposition)
	nLead uint8  // number of leading non-starters.
	flags qcInfo // quick check flags
	index uint16
}

// functions dispatchable per form
type lookupFunc func(b input, i int) Properties

// formInfo holds Form-specific functions and tables.
type formInfo struct {
	form                     Form
	composing, compatibility bool // form type
	info                     lookupFunc
	nextMain                 iterFunc
}

var formTable = []*formInfo{{
	form:          NFC,
	composing:     true,
	compatibility: false,
	info:          lookupInfoNFC,
	nextMain:      nextComposed,
}, {
	form:          NFD,
	composing:     false,
	compatibility: false,
	info:          lookupInfoNFC,
	nextMain:      nextDecomposed,
}, {
	form:          NFKC,
	composing:     true,
	compatibility: true,
	info:          lookupInfoNFKC,
	nextMain:      nextComposed,
}, {
	form:          NFKD,
	composing:     false,
	compatibility: true,
	info:          lookupInfoNFKC,
	nextMain:      nextDecomposed,
}}

// We do not distinguish between boundaries for NFC, NFD, etc. to avoid
// unexpected behavior for the user.  For example, in NFD, there is a boundary
// after 'a'.  However, 'a' might combine with modifiers, so from the application's
// perspective it is not a good boundary. We will therefore always use the
// boundaries for the combining variants.

// BoundaryBefore returns true if this rune starts a new segment and
// cannot combine with any rune on the left.
func (p Properties) BoundaryBefore() bool {
	if p.ccc == 0 && !p.combinesBackward() {
		return true
	}
	// We assume that the CCC of the first character in a decomposition
	// is always non-zero if different from info.ccc and that we can return
	// false at this point. This is verified by maketables.
	return false
}

// BoundaryAfter returns true if runes cannot combine with or otherwise
// interact with this or previous runes.
func (p Properties) BoundaryAfter() bool {
	// TODO: loosen these conditions.
	return p.isInert()
}

// We pack quick check data in 4 bits:
//
//	5:    Combines forward  (0 == false, 1 == true)
//	4..3: NFC_QC Yes(00), No (10), or Maybe (11)
//	2:    NFD_QC Yes (0) or No (1). No also means there is a decomposition.
//	1..0: Number of trailing non-starters.
//
// When all 4 bits are zero, the character is inert, meaning it is never
// influenced by normalization.
type qcInfo uint8

func (p Properties) isYesC() bool { return p.flags&0x10 == 0 }
func (p Properties) isYesD() bool { return p.flags&0x4 == 0 }

func (p Properties) combinesForward() bool  { return p.flags&0x20 != 0 }
func (p Properties) combinesBackward() bool { return p.flags&0x8 != 0 } // == isMaybe
func (p Properties) hasDecomposition() bool { return p.flags&0x4 != 0 } // == isNoD

func (p Properties) isInert() bool {
	return p.flags&qcInfoMask == 0 && p.ccc == 0
}

func (p Properties) multiSegment() bool {
	return p.index >= firstMulti && p.index < endMulti
}

func (p Properties) nLeadingNonStarters() uint8 {
	return p.nLead
}

func (p Properties) nTrailingNonStarters() uint8 {
	return uint8(p.flags & 0x03)
}

// Decomposition returns the decomposition for the underlying rune
// or nil if there is none.
func (p Properties) Decomposition() []byte {
	// TODO: create the decomposition for Hangul?
	if p.index == 0 {
		return nil
	}
	i := p.index
	n := decomps[i] & headerLenMask
	i++
	return decomps[i : i+uint16(n)]
}

// Size returns the length of UTF-8 encoding of the rune.
func (p Properties) Size() int {
	return int(p.size)
}

// CCC returns the canonical combining class of the underlying rune.
func (p Properties) CCC() uint8 {
	if p.index >= firstCCCZeroExcept {
		return 0
	}
	return ccc[p.ccc]
}

// LeadCCC returns the CCC of the first rune in the decomposition.
// If there is no decomposition, LeadCCC equals CCC.
func (p Properties) LeadCCC() uint8 {
	return ccc[p.ccc]
}

// TrailCCC returns the CCC of the last rune in the decomposition.
// If there is no decomposition, TrailCCC equals CCC.
func (p Properties) TrailCCC() uint8 {
	return ccc[p.tccc]
}

func buildRecompMap() {
	recompMap = make(map[uint32]rune, len(recompMapPacked)/8)
	var buf [8]byte
	for i := 0; i < len(recompMapPacked); i += 8 {
		copy(buf[:], recompMapPacked[i:i+8])
		key := binary.BigEndian.Uint32(buf[:4])
		val := binary.BigEndian.Uint32(buf[4:])
		recompMap[key] = rune(val)
	}
}

// Recomposition
// We use 32-bit keys instead of 64-bit for the two codepoint keys.
// This clips off the bits of three entries, but we know this will not
// result in a collision. In the unlikely event that changes to
// UnicodeData.txt introduce collisions, the compiler will catch it.
// Note that the recomposition map for NFC and NFKC are identical.

// combine returns the combined rune or 0 if it doesn't exist.
//
// The caller is responsible for calling
// recompMapOnce.Do(buildRecompMap) sometime before this is called.
func combine(a, b rune) rune {
	key := uint32(uint16(a))<<16 + uint32(uint16(b))
	if recompMap == nil {
		panic("caller error") // see func comment
	}
	return recompMap[key]
}

func lookupInfoNFC(b input, i int) Properties {
	v, sz := b.charinfoNFC(i)
	return compInfo(v, sz)
}

func lookupInfoNFKC(b input, i int) Properties {
	v, sz := b.charinfoNFKC(i)
	return compInfo(v, sz)
}

// Properties returns properties for the first rune in s.
func (f Form) Properties(s []byte) Properties {
	if f == NFC || f == NFD {
		return compInfo(nfcData.lookup(s))
	}
	return compInfo(nfkcData.lookup(s))
}

// PropertiesString returns properties for the first rune in s.
func (f Form) PropertiesString(s string) Properties {
	if f == NFC || f == NFD {
		return compInfo(nfcData.lookupString(s))
	}
	return compInfo(nfkcData.lookupString(s))
}

// compInfo converts the information contained in v and sz
// to a Properties.  See the comment at the top of the file
// for more information on the format.
func compInfo(v uint16, sz int) Properties {
	if v == 0 {
		return Properties{size: uint8(sz)}
	} else if v >= 0x8000 {
		p := Properties{
			size:  uint8(sz),
			ccc:   uint8(v),
			tccc:  uint8(v),
			flags: qcInfo(v >> 8),
		}
		if p.ccc > 0 || p.combinesBackward() {
			p.nLead = uint8(p.flags & 0x3)
		}
		return p
	}
	// has decomposition
	h := decomps[v]
	f := (qcInfo(h&headerFlagsMask) >> 2) | 0x4
	p := Properties{size: uint8(sz), flags: f, index: v}
	if v >= firstCCC {
		v += uint16(h&headerLenMask) + 1
		c := decomps[v]
		p.tccc = c >> 2
		p.flags |= qcInfo(c & 0x3)
		if v >= firstLeadingCCC {
			p.nLead = c & 0x3
			if v >= firstStarterWithNLead {
				// We were tricked. Remove the decomposition.
				p.flags &= 0x03
				p.index = 0
				return p
			}
			p.ccc = decomps[v+1]
		}
	}
	return p
}
   07070100000F3D000081A4000000000000000000000001645E367C00000816000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/text/unicode/norm/input.go    // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package norm

import "unicode/utf8"

type input struct {
	str   string
	bytes []byte
}

func inputBytes(str []byte) input {
	return input{bytes: str}
}

func inputString(str string) input {
	return input{str: str}
}

func (in *input) setBytes(str []byte) {
	in.str = ""
	in.bytes = str
}

func (in *input) setString(str string) {
	in.str = str
	in.bytes = nil
}

func (in *input) _byte(p int) byte {
	if in.bytes == nil {
		return in.str[p]
	}
	return in.bytes[p]
}

func (in *input) skipASCII(p, max int) int {
	if in.bytes == nil {
		for ; p < max && in.str[p] < utf8.RuneSelf; p++ {
		}
	} else {
		for ; p < max && in.bytes[p] < utf8.RuneSelf; p++ {
		}
	}
	return p
}

func (in *input) skipContinuationBytes(p int) int {
	if in.bytes == nil {
		for ; p < len(in.str) && !utf8.RuneStart(in.str[p]); p++ {
		}
	} else {
		for ; p < len(in.bytes) && !utf8.RuneStart(in.bytes[p]); p++ {
		}
	}
	return p
}

func (in *input) appendSlice(buf []byte, b, e int) []byte {
	if in.bytes != nil {
		return append(buf, in.bytes[b:e]...)
	}
	for i := b; i < e; i++ {
		buf = append(buf, in.str[i])
	}
	return buf
}

func (in *input) copySlice(buf []byte, b, e int) int {
	if in.bytes == nil {
		return copy(buf, in.str[b:e])
	}
	return copy(buf, in.bytes[b:e])
}

func (in *input) charinfoNFC(p int) (uint16, int) {
	if in.bytes == nil {
		return nfcData.lookupString(in.str[p:])
	}
	return nfcData.lookup(in.bytes[p:])
}

func (in *input) charinfoNFKC(p int) (uint16, int) {
	if in.bytes == nil {
		return nfkcData.lookupString(in.str[p:])
	}
	return nfkcData.lookup(in.bytes[p:])
}

func (in *input) hangul(p int) (r rune) {
	var size int
	if in.bytes == nil {
		if !isHangulString(in.str[p:]) {
			return 0
		}
		r, size = utf8.DecodeRuneInString(in.str[p:])
	} else {
		if !isHangul(in.bytes[p:]) {
			return 0
		}
		r, size = utf8.DecodeRune(in.bytes[p:])
	}
	if size != hangulUTF8Size {
		return 0
	}
	return r
}
  07070100000F3E000081A4000000000000000000000001645E367C00002C10000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/golang.org/x/text/unicode/norm/iter.go // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package norm

import (
	"fmt"
	"unicode/utf8"
)

// MaxSegmentSize is the maximum size of a byte buffer needed to consider any
// sequence of starter and non-starter runes for the purpose of normalization.
const MaxSegmentSize = maxByteBufferSize

// An Iter iterates over a string or byte slice, while normalizing it
// to a given Form.
type Iter struct {
	rb     reorderBuffer
	buf    [maxByteBufferSize]byte
	info   Properties // first character saved from previous iteration
	next   iterFunc   // implementation of next depends on form
	asciiF iterFunc

	p        int    // current position in input source
	multiSeg []byte // remainder of multi-segment decomposition
}

type iterFunc func(*Iter) []byte

// Init initializes i to iterate over src after normalizing it to Form f.
func (i *Iter) Init(f Form, src []byte) {
	i.p = 0
	if len(src) == 0 {
		i.setDone()
		i.rb.nsrc = 0
		return
	}
	i.multiSeg = nil
	i.rb.init(f, src)
	i.next = i.rb.f.nextMain
	i.asciiF = nextASCIIBytes
	i.info = i.rb.f.info(i.rb.src, i.p)
	i.rb.ss.first(i.info)
}

// InitString initializes i to iterate over src after normalizing it to Form f.
func (i *Iter) InitString(f Form, src string) {
	i.p = 0
	if len(src) == 0 {
		i.setDone()
		i.rb.nsrc = 0
		return
	}
	i.multiSeg = nil
	i.rb.initString(f, src)
	i.next = i.rb.f.nextMain
	i.asciiF = nextASCIIString
	i.info = i.rb.f.info(i.rb.src, i.p)
	i.rb.ss.first(i.info)
}

// Seek sets the segment to be returned by the next call to Next to start
// at position p.  It is the responsibility of the caller to set p to the
// start of a segment.
func (i *Iter) Seek(offset int64, whence int) (int64, error) {
	var abs int64
	switch whence {
	case 0:
		abs = offset
	case 1:
		abs = int64(i.p) + offset
	case 2:
		abs = int64(i.rb.nsrc) + offset
	default:
		return 0, fmt.Errorf("norm: invalid whence")
	}
	if abs < 0 {
		return 0, fmt.Errorf("norm: negative position")
	}
	if int(abs) >= i.rb.nsrc {
		i.setDone()
		return int64(i.p), nil
	}
	i.p = int(abs)
	i.multiSeg = nil
	i.next = i.rb.f.nextMain
	i.info = i.rb.f.info(i.rb.src, i.p)
	i.rb.ss.first(i.info)
	return abs, nil
}

// returnSlice returns a slice of the underlying input type as a byte slice.
// If the underlying is of type []byte, it will simply return a slice.
// If the underlying is of type string, it will copy the slice to the buffer
// and return that.
func (i *Iter) returnSlice(a, b int) []byte {
	if i.rb.src.bytes == nil {
		return i.buf[:copy(i.buf[:], i.rb.src.str[a:b])]
	}
	return i.rb.src.bytes[a:b]
}

// Pos returns the byte position at which the next call to Next will commence processing.
func (i *Iter) Pos() int {
	return i.p
}

func (i *Iter) setDone() {
	i.next = nextDone
	i.p = i.rb.nsrc
}

// Done returns true if there is no more input to process.
func (i *Iter) Done() bool {
	return i.p >= i.rb.nsrc
}

// Next returns f(i.input[i.Pos():n]), where n is a boundary of i.input.
// For any input a and b for which f(a) == f(b), subsequent calls
// to Next will return the same segments.
// Modifying runes are grouped together with the preceding starter, if such a starter exists.
// Although not guaranteed, n will typically be the smallest possible n.
func (i *Iter) Next() []byte {
	return i.next(i)
}

func nextASCIIBytes(i *Iter) []byte {
	p := i.p + 1
	if p >= i.rb.nsrc {
		p0 := i.p
		i.setDone()
		return i.rb.src.bytes[p0:p]
	}
	if i.rb.src.bytes[p] < utf8.RuneSelf {
		p0 := i.p
		i.p = p
		return i.rb.src.bytes[p0:p]
	}
	i.info = i.rb.f.info(i.rb.src, i.p)
	i.next = i.rb.f.nextMain
	return i.next(i)
}

func nextASCIIString(i *Iter) []byte {
	p := i.p + 1
	if p >= i.rb.nsrc {
		i.buf[0] = i.rb.src.str[i.p]
		i.setDone()
		return i.buf[:1]
	}
	if i.rb.src.str[p] < utf8.RuneSelf {
		i.buf[0] = i.rb.src.str[i.p]
		i.p = p
		return i.buf[:1]
	}
	i.info = i.rb.f.info(i.rb.src, i.p)
	i.next = i.rb.f.nextMain
	return i.next(i)
}

func nextHangul(i *Iter) []byte {
	p := i.p
	next := p + hangulUTF8Size
	if next >= i.rb.nsrc {
		i.setDone()
	} else if i.rb.src.hangul(next) == 0 {
		i.rb.ss.next(i.info)
		i.info = i.rb.f.info(i.rb.src, i.p)
		i.next = i.rb.f.nextMain
		return i.next(i)
	}
	i.p = next
	return i.buf[:decomposeHangul(i.buf[:], i.rb.src.hangul(p))]
}

func nextDone(i *Iter) []byte {
	return nil
}

// nextMulti is used for iterating over multi-segment decompositions
// for decomposing normal forms.
func nextMulti(i *Iter) []byte {
	j := 0
	d := i.multiSeg
	// skip first rune
	for j = 1; j < len(d) && !utf8.RuneStart(d[j]); j++ {
	}
	for j < len(d) {
		info := i.rb.f.info(input{bytes: d}, j)
		if info.BoundaryBefore() {
			i.multiSeg = d[j:]
			return d[:j]
		}
		j += int(info.size)
	}
	// treat last segment as normal decomposition
	i.next = i.rb.f.nextMain
	return i.next(i)
}

// nextMultiNorm is used for iterating over multi-segment decompositions
// for composing normal forms.
func nextMultiNorm(i *Iter) []byte {
	j := 0
	d := i.multiSeg
	for j < len(d) {
		info := i.rb.f.info(input{bytes: d}, j)
		if info.BoundaryBefore() {
			i.rb.compose()
			seg := i.buf[:i.rb.flushCopy(i.buf[:])]
			i.rb.insertUnsafe(input{bytes: d}, j, info)
			i.multiSeg = d[j+int(info.size):]
			return seg
		}
		i.rb.insertUnsafe(input{bytes: d}, j, info)
		j += int(info.size)
	}
	i.multiSeg = nil
	i.next = nextComposed
	return doNormComposed(i)
}

// nextDecomposed is the implementation of Next for forms NFD and NFKD.
func nextDecomposed(i *Iter) (next []byte) {
	outp := 0
	inCopyStart, outCopyStart := i.p, 0
	for {
		if sz := int(i.info.size); sz <= 1 {
			i.rb.ss = 0
			p := i.p
			i.p++ // ASCII or illegal byte.  Either way, advance by 1.
			if i.p >= i.rb.nsrc {
				i.setDone()
				return i.returnSlice(p, i.p)
			} else if i.rb.src._byte(i.p) < utf8.RuneSelf {
				i.next = i.asciiF
				return i.returnSlice(p, i.p)
			}
			outp++
		} else if d := i.info.Decomposition(); d != nil {
			// Note: If leading CCC != 0, then len(d) == 2 and last is also non-zero.
			// Case 1: there is a leftover to copy.  In this case the decomposition
			// must begin with a modifier and should always be appended.
			// Case 2: no leftover. Simply return d if followed by a ccc == 0 value.
			p := outp + len(d)
			if outp > 0 {
				i.rb.src.copySlice(i.buf[outCopyStart:], inCopyStart, i.p)
				// TODO: this condition should not be possible, but we leave it
				// in for defensive purposes.
				if p > len(i.buf) {
					return i.buf[:outp]
				}
			} else if i.info.multiSegment() {
				// outp must be 0 as multi-segment decompositions always
				// start a new segment.
				if i.multiSeg == nil {
					i.multiSeg = d
					i.next = nextMulti
					return nextMulti(i)
				}
				// We are in the last segment.  Treat as normal decomposition.
				d = i.multiSeg
				i.multiSeg = nil
				p = len(d)
			}
			prevCC := i.info.tccc
			if i.p += sz; i.p >= i.rb.nsrc {
				i.setDone()
				i.info = Properties{} // Force BoundaryBefore to succeed.
			} else {
				i.info = i.rb.f.info(i.rb.src, i.p)
			}
			switch i.rb.ss.next(i.info) {
			case ssOverflow:
				i.next = nextCGJDecompose
				fallthrough
			case ssStarter:
				if outp > 0 {
					copy(i.buf[outp:], d)
					return i.buf[:p]
				}
				return d
			}
			copy(i.buf[outp:], d)
			outp = p
			inCopyStart, outCopyStart = i.p, outp
			if i.info.ccc < prevCC {
				goto doNorm
			}
			continue
		} else if r := i.rb.src.hangul(i.p); r != 0 {
			outp = decomposeHangul(i.buf[:], r)
			i.p += hangulUTF8Size
			inCopyStart, outCopyStart = i.p, outp
			if i.p >= i.rb.nsrc {
				i.setDone()
				break
			} else if i.rb.src.hangul(i.p) != 0 {
				i.next = nextHangul
				return i.buf[:outp]
			}
		} else {
			p := outp + sz
			if p > len(i.buf) {
				break
			}
			outp = p
			i.p += sz
		}
		if i.p >= i.rb.nsrc {
			i.setDone()
			break
		}
		prevCC := i.info.tccc
		i.info = i.rb.f.info(i.rb.src, i.p)
		if v := i.rb.ss.next(i.info); v == ssStarter {
			break
		} else if v == ssOverflow {
			i.next = nextCGJDecompose
			break
		}
		if i.info.ccc < prevCC {
			goto doNorm
		}
	}
	if outCopyStart == 0 {
		return i.returnSlice(inCopyStart, i.p)
	} else if inCopyStart < i.p {
		i.rb.src.copySlice(i.buf[outCopyStart:], inCopyStart, i.p)
	}
	return i.buf[:outp]
doNorm:
	// Insert what we have decomposed so far in the reorderBuffer.
	// As we will only reorder, there will always be enough room.
	i.rb.src.copySlice(i.buf[outCopyStart:], inCopyStart, i.p)
	i.rb.insertDecomposed(i.buf[0:outp])
	return doNormDecomposed(i)
}

func doNormDecomposed(i *Iter) []byte {
	for {
		i.rb.insertUnsafe(i.rb.src, i.p, i.info)
		if i.p += int(i.info.size); i.p >= i.rb.nsrc {
			i.setDone()
			break
		}
		i.info = i.rb.f.info(i.rb.src, i.p)
		if i.info.ccc == 0 {
			break
		}
		if s := i.rb.ss.next(i.info); s == ssOverflow {
			i.next = nextCGJDecompose
			break
		}
	}
	// new segment or too many combining characters: exit normalization
	return i.buf[:i.rb.flushCopy(i.buf[:])]
}

func nextCGJDecompose(i *Iter) []byte {
	i.rb.ss = 0
	i.rb.insertCGJ()
	i.next = nextDecomposed
	i.rb.ss.first(i.info)
	buf := doNormDecomposed(i)
	return buf
}

// nextComposed is the implementation of Next for forms NFC and NFKC.
func nextComposed(i *Iter) []byte {
	outp, startp := 0, i.p
	var prevCC uint8
	for {
		if !i.info.isYesC() {
			goto doNorm
		}
		prevCC = i.info.tccc
		sz := int(i.info.size)
		if sz == 0 {
			sz = 1 // illegal rune: copy byte-by-byte
		}
		p := outp + sz
		if p > len(i.buf) {
			break
		}
		outp = p
		i.p += sz
		if i.p >= i.rb.nsrc {
			i.setDone()
			break
		} else if i.rb.src._byte(i.p) < utf8.RuneSelf {
			i.rb.ss = 0
			i.next = i.asciiF
			break
		}
		i.info = i.rb.f.info(i.rb.src, i.p)
		if v := i.rb.ss.next(i.info); v == ssStarter {
			break
		} else if v == ssOverflow {
			i.next = nextCGJCompose
			break
		}
		if i.info.ccc < prevCC {
			goto doNorm
		}
	}
	return i.returnSlice(startp, i.p)
doNorm:
	// reset to start position
	i.p = startp
	i.info = i.rb.f.info(i.rb.src, i.p)
	i.rb.ss.first(i.info)
	if i.info.multiSegment() {
		d := i.info.Decomposition()
		info := i.rb.f.info(input{bytes: d}, 0)
		i.rb.insertUnsafe(input{bytes: d}, 0, info)
		i.multiSeg = d[int(info.size):]
		i.next = nextMultiNorm
		return nextMultiNorm(i)
	}
	i.rb.ss.first(i.info)
	i.rb.insertUnsafe(i.rb.src, i.p, i.info)
	return doNormComposed(i)
}

func doNormComposed(i *Iter) []byte {
	// First rune should already be inserted.
	for {
		if i.p += int(i.info.size); i.p >= i.rb.nsrc {
			i.setDone()
			break
		}
		i.info = i.rb.f.info(i.rb.src, i.p)
		if s := i.rb.ss.next(i.info); s == ssStarter {
			break
		} else if s == ssOverflow {
			i.next = nextCGJCompose
			break
		}
		i.rb.insertUnsafe(i.rb.src, i.p, i.info)
	}
	i.rb.compose()
	seg := i.buf[:i.rb.flushCopy(i.buf[:])]
	return seg
}

func nextCGJCompose(i *Iter) []byte {
	i.rb.ss = 0 // instead of first
	i.rb.insertCGJ()
	i.next = nextComposed
	// Note that we treat any rune with nLeadingNonStarters > 0 as a non-starter,
	// even if they are not. This is particularly dubious for U+FF9E and UFF9A.
	// If we ever change that, insert a check here.
	i.rb.ss.first(i.info)
	i.rb.insertUnsafe(i.rb.src, i.p, i.info)
	return doNormComposed(i)
}
07070100000F3F000081A4000000000000000000000001645E367C00003B86000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/text/unicode/norm/normalize.go    // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Note: the file data_test.go that is generated should not be checked in.
//go:generate go run maketables.go triegen.go
//go:generate go test -tags test

// Package norm contains types and functions for normalizing Unicode strings.
package norm // import "golang.org/x/text/unicode/norm"

import (
	"unicode/utf8"

	"golang.org/x/text/transform"
)

// A Form denotes a canonical representation of Unicode code points.
// The Unicode-defined normalization and equivalence forms are:
//
//	NFC   Unicode Normalization Form C
//	NFD   Unicode Normalization Form D
//	NFKC  Unicode Normalization Form KC
//	NFKD  Unicode Normalization Form KD
//
// For a Form f, this documentation uses the notation f(x) to mean
// the bytes or string x converted to the given form.
// A position n in x is called a boundary if conversion to the form can
// proceed independently on both sides:
//
//	f(x) == append(f(x[0:n]), f(x[n:])...)
//
// References: https://unicode.org/reports/tr15/ and
// https://unicode.org/notes/tn5/.
type Form int

const (
	NFC Form = iota
	NFD
	NFKC
	NFKD
)

// Bytes returns f(b). May return b if f(b) = b.
func (f Form) Bytes(b []byte) []byte {
	src := inputBytes(b)
	ft := formTable[f]
	n, ok := ft.quickSpan(src, 0, len(b), true)
	if ok {
		return b
	}
	out := make([]byte, n, len(b))
	copy(out, b[0:n])
	rb := reorderBuffer{f: *ft, src: src, nsrc: len(b), out: out, flushF: appendFlush}
	return doAppendInner(&rb, n)
}

// String returns f(s).
func (f Form) String(s string) string {
	src := inputString(s)
	ft := formTable[f]
	n, ok := ft.quickSpan(src, 0, len(s), true)
	if ok {
		return s
	}
	out := make([]byte, n, len(s))
	copy(out, s[0:n])
	rb := reorderBuffer{f: *ft, src: src, nsrc: len(s), out: out, flushF: appendFlush}
	return string(doAppendInner(&rb, n))
}

// IsNormal returns true if b == f(b).
func (f Form) IsNormal(b []byte) bool {
	src := inputBytes(b)
	ft := formTable[f]
	bp, ok := ft.quickSpan(src, 0, len(b), true)
	if ok {
		return true
	}
	rb := reorderBuffer{f: *ft, src: src, nsrc: len(b)}
	rb.setFlusher(nil, cmpNormalBytes)
	for bp < len(b) {
		rb.out = b[bp:]
		if bp = decomposeSegment(&rb, bp, true); bp < 0 {
			return false
		}
		bp, _ = rb.f.quickSpan(rb.src, bp, len(b), true)
	}
	return true
}

func cmpNormalBytes(rb *reorderBuffer) bool {
	b := rb.out
	for i := 0; i < rb.nrune; i++ {
		info := rb.rune[i]
		if int(info.size) > len(b) {
			return false
		}
		p := info.pos
		pe := p + info.size
		for ; p < pe; p++ {
			if b[0] != rb.byte[p] {
				return false
			}
			b = b[1:]
		}
	}
	return true
}

// IsNormalString returns true if s == f(s).
func (f Form) IsNormalString(s string) bool {
	src := inputString(s)
	ft := formTable[f]
	bp, ok := ft.quickSpan(src, 0, len(s), true)
	if ok {
		return true
	}
	rb := reorderBuffer{f: *ft, src: src, nsrc: len(s)}
	rb.setFlusher(nil, func(rb *reorderBuffer) bool {
		for i := 0; i < rb.nrune; i++ {
			info := rb.rune[i]
			if bp+int(info.size) > len(s) {
				return false
			}
			p := info.pos
			pe := p + info.size
			for ; p < pe; p++ {
				if s[bp] != rb.byte[p] {
					return false
				}
				bp++
			}
		}
		return true
	})
	for bp < len(s) {
		if bp = decomposeSegment(&rb, bp, true); bp < 0 {
			return false
		}
		bp, _ = rb.f.quickSpan(rb.src, bp, len(s), true)
	}
	return true
}

// patchTail fixes a case where a rune may be incorrectly normalized
// if it is followed by illegal continuation bytes. It returns the
// patched buffer and whether the decomposition is still in progress.
func patchTail(rb *reorderBuffer) bool {
	info, p := lastRuneStart(&rb.f, rb.out)
	if p == -1 || info.size == 0 {
		return true
	}
	end := p + int(info.size)
	extra := len(rb.out) - end
	if extra > 0 {
		// Potentially allocating memory. However, this only
		// happens with ill-formed UTF-8.
		x := make([]byte, 0)
		x = append(x, rb.out[len(rb.out)-extra:]...)
		rb.out = rb.out[:end]
		decomposeToLastBoundary(rb)
		rb.doFlush()
		rb.out = append(rb.out, x...)
		return false
	}
	buf := rb.out[p:]
	rb.out = rb.out[:p]
	decomposeToLastBoundary(rb)
	if s := rb.ss.next(info); s == ssStarter {
		rb.doFlush()
		rb.ss.first(info)
	} else if s == ssOverflow {
		rb.doFlush()
		rb.insertCGJ()
		rb.ss = 0
	}
	rb.insertUnsafe(inputBytes(buf), 0, info)
	return true
}

func appendQuick(rb *reorderBuffer, i int) int {
	if rb.nsrc == i {
		return i
	}
	end, _ := rb.f.quickSpan(rb.src, i, rb.nsrc, true)
	rb.out = rb.src.appendSlice(rb.out, i, end)
	return end
}

// Append returns f(append(out, b...)).
// The buffer out must be nil, empty, or equal to f(out).
func (f Form) Append(out []byte, src ...byte) []byte {
	return f.doAppend(out, inputBytes(src), len(src))
}

func (f Form) doAppend(out []byte, src input, n int) []byte {
	if n == 0 {
		return out
	}
	ft := formTable[f]
	// Attempt to do a quickSpan first so we can avoid initializing the reorderBuffer.
	if len(out) == 0 {
		p, _ := ft.quickSpan(src, 0, n, true)
		out = src.appendSlice(out, 0, p)
		if p == n {
			return out
		}
		rb := reorderBuffer{f: *ft, src: src, nsrc: n, out: out, flushF: appendFlush}
		return doAppendInner(&rb, p)
	}
	rb := reorderBuffer{f: *ft, src: src, nsrc: n}
	return doAppend(&rb, out, 0)
}

func doAppend(rb *reorderBuffer, out []byte, p int) []byte {
	rb.setFlusher(out, appendFlush)
	src, n := rb.src, rb.nsrc
	doMerge := len(out) > 0
	if q := src.skipContinuationBytes(p); q > p {
		// Move leading non-starters to destination.
		rb.out = src.appendSlice(rb.out, p, q)
		p = q
		doMerge = patchTail(rb)
	}
	fd := &rb.f
	if doMerge {
		var info Properties
		if p < n {
			info = fd.info(src, p)
			if !info.BoundaryBefore() || info.nLeadingNonStarters() > 0 {
				if p == 0 {
					decomposeToLastBoundary(rb)
				}
				p = decomposeSegment(rb, p, true)
			}
		}
		if info.size == 0 {
			rb.doFlush()
			// Append incomplete UTF-8 encoding.
			return src.appendSlice(rb.out, p, n)
		}
		if rb.nrune > 0 {
			return doAppendInner(rb, p)
		}
	}
	p = appendQuick(rb, p)
	return doAppendInner(rb, p)
}

func doAppendInner(rb *reorderBuffer, p int) []byte {
	for n := rb.nsrc; p < n; {
		p = decomposeSegment(rb, p, true)
		p = appendQuick(rb, p)
	}
	return rb.out
}

// AppendString returns f(append(out, []byte(s))).
// The buffer out must be nil, empty, or equal to f(out).
func (f Form) AppendString(out []byte, src string) []byte {
	return f.doAppend(out, inputString(src), len(src))
}

// QuickSpan returns a boundary n such that b[0:n] == f(b[0:n]).
// It is not guaranteed to return the largest such n.
func (f Form) QuickSpan(b []byte) int {
	n, _ := formTable[f].quickSpan(inputBytes(b), 0, len(b), true)
	return n
}

// Span implements transform.SpanningTransformer. It returns a boundary n such
// that b[0:n] == f(b[0:n]). It is not guaranteed to return the largest such n.
func (f Form) Span(b []byte, atEOF bool) (n int, err error) {
	n, ok := formTable[f].quickSpan(inputBytes(b), 0, len(b), atEOF)
	if n < len(b) {
		if !ok {
			err = transform.ErrEndOfSpan
		} else {
			err = transform.ErrShortSrc
		}
	}
	return n, err
}

// SpanString returns a boundary n such that s[0:n] == f(s[0:n]).
// It is not guaranteed to return the largest such n.
func (f Form) SpanString(s string, atEOF bool) (n int, err error) {
	n, ok := formTable[f].quickSpan(inputString(s), 0, len(s), atEOF)
	if n < len(s) {
		if !ok {
			err = transform.ErrEndOfSpan
		} else {
			err = transform.ErrShortSrc
		}
	}
	return n, err
}

// quickSpan returns a boundary n such that src[0:n] == f(src[0:n]) and
// whether any non-normalized parts were found. If atEOF is false, n will
// not point past the last segment if this segment might be become
// non-normalized by appending other runes.
func (f *formInfo) quickSpan(src input, i, end int, atEOF bool) (n int, ok bool) {
	var lastCC uint8
	ss := streamSafe(0)
	lastSegStart := i
	for n = end; i < n; {
		if j := src.skipASCII(i, n); i != j {
			i = j
			lastSegStart = i - 1
			lastCC = 0
			ss = 0
			continue
		}
		info := f.info(src, i)
		if info.size == 0 {
			if atEOF {
				// include incomplete runes
				return n, true
			}
			return lastSegStart, true
		}
		// This block needs to be before the next, because it is possible to
		// have an overflow for runes that are starters (e.g. with U+FF9E).
		switch ss.next(info) {
		case ssStarter:
			lastSegStart = i
		case ssOverflow:
			return lastSegStart, false
		case ssSuccess:
			if lastCC > info.ccc {
				return lastSegStart, false
			}
		}
		if f.composing {
			if !info.isYesC() {
				break
			}
		} else {
			if !info.isYesD() {
				break
			}
		}
		lastCC = info.ccc
		i += int(info.size)
	}
	if i == n {
		if !atEOF {
			n = lastSegStart
		}
		return n, true
	}
	return lastSegStart, false
}

// QuickSpanString returns a boundary n such that s[0:n] == f(s[0:n]).
// It is not guaranteed to return the largest such n.
func (f Form) QuickSpanString(s string) int {
	n, _ := formTable[f].quickSpan(inputString(s), 0, len(s), true)
	return n
}

// FirstBoundary returns the position i of the first boundary in b
// or -1 if b contains no boundary.
func (f Form) FirstBoundary(b []byte) int {
	return f.firstBoundary(inputBytes(b), len(b))
}

func (f Form) firstBoundary(src input, nsrc int) int {
	i := src.skipContinuationBytes(0)
	if i >= nsrc {
		return -1
	}
	fd := formTable[f]
	ss := streamSafe(0)
	// We should call ss.first here, but we can't as the first rune is
	// skipped already. This means FirstBoundary can't really determine
	// CGJ insertion points correctly. Luckily it doesn't have to.
	for {
		info := fd.info(src, i)
		if info.size == 0 {
			return -1
		}
		if s := ss.next(info); s != ssSuccess {
			return i
		}
		i += int(info.size)
		if i >= nsrc {
			if !info.BoundaryAfter() && !ss.isMax() {
				return -1
			}
			return nsrc
		}
	}
}

// FirstBoundaryInString returns the position i of the first boundary in s
// or -1 if s contains no boundary.
func (f Form) FirstBoundaryInString(s string) int {
	return f.firstBoundary(inputString(s), len(s))
}

// NextBoundary reports the index of the boundary between the first and next
// segment in b or -1 if atEOF is false and there are not enough bytes to
// determine this boundary.
func (f Form) NextBoundary(b []byte, atEOF bool) int {
	return f.nextBoundary(inputBytes(b), len(b), atEOF)
}

// NextBoundaryInString reports the index of the boundary between the first and
// next segment in b or -1 if atEOF is false and there are not enough bytes to
// determine this boundary.
func (f Form) NextBoundaryInString(s string, atEOF bool) int {
	return f.nextBoundary(inputString(s), len(s), atEOF)
}

func (f Form) nextBoundary(src input, nsrc int, atEOF bool) int {
	if nsrc == 0 {
		if atEOF {
			return 0
		}
		return -1
	}
	fd := formTable[f]
	info := fd.info(src, 0)
	if info.size == 0 {
		if atEOF {
			return 1
		}
		return -1
	}
	ss := streamSafe(0)
	ss.first(info)

	for i := int(info.size); i < nsrc; i += int(info.size) {
		info = fd.info(src, i)
		if info.size == 0 {
			if atEOF {
				return i
			}
			return -1
		}
		// TODO: Using streamSafe to determine the boundary isn't the same as
		// using BoundaryBefore. Determine which should be used.
		if s := ss.next(info); s != ssSuccess {
			return i
		}
	}
	if !atEOF && !info.BoundaryAfter() && !ss.isMax() {
		return -1
	}
	return nsrc
}

// LastBoundary returns the position i of the last boundary in b
// or -1 if b contains no boundary.
func (f Form) LastBoundary(b []byte) int {
	return lastBoundary(formTable[f], b)
}

func lastBoundary(fd *formInfo, b []byte) int {
	i := len(b)
	info, p := lastRuneStart(fd, b)
	if p == -1 {
		return -1
	}
	if info.size == 0 { // ends with incomplete rune
		if p == 0 { // starts with incomplete rune
			return -1
		}
		i = p
		info, p = lastRuneStart(fd, b[:i])
		if p == -1 { // incomplete UTF-8 encoding or non-starter bytes without a starter
			return i
		}
	}
	if p+int(info.size) != i { // trailing non-starter bytes: illegal UTF-8
		return i
	}
	if info.BoundaryAfter() {
		return i
	}
	ss := streamSafe(0)
	v := ss.backwards(info)
	for i = p; i >= 0 && v != ssStarter; i = p {
		info, p = lastRuneStart(fd, b[:i])
		if v = ss.backwards(info); v == ssOverflow {
			break
		}
		if p+int(info.size) != i {
			if p == -1 { // no boundary found
				return -1
			}
			return i // boundary after an illegal UTF-8 encoding
		}
	}
	return i
}

// decomposeSegment scans the first segment in src into rb. It inserts 0x034f
// (Grapheme Joiner) when it encounters a sequence of more than 30 non-starters
// and returns the number of bytes consumed from src or iShortDst or iShortSrc.
func decomposeSegment(rb *reorderBuffer, sp int, atEOF bool) int {
	// Force one character to be consumed.
	info := rb.f.info(rb.src, sp)
	if info.size == 0 {
		return 0
	}
	if s := rb.ss.next(info); s == ssStarter {
		// TODO: this could be removed if we don't support merging.
		if rb.nrune > 0 {
			goto end
		}
	} else if s == ssOverflow {
		rb.insertCGJ()
		goto end
	}
	if err := rb.insertFlush(rb.src, sp, info); err != iSuccess {
		return int(err)
	}
	for {
		sp += int(info.size)
		if sp >= rb.nsrc {
			if !atEOF && !info.BoundaryAfter() {
				return int(iShortSrc)
			}
			break
		}
		info = rb.f.info(rb.src, sp)
		if info.size == 0 {
			if !atEOF {
				return int(iShortSrc)
			}
			break
		}
		if s := rb.ss.next(info); s == ssStarter {
			break
		} else if s == ssOverflow {
			rb.insertCGJ()
			break
		}
		if err := rb.insertFlush(rb.src, sp, info); err != iSuccess {
			return int(err)
		}
	}
end:
	if !rb.doFlush() {
		return int(iShortDst)
	}
	return sp
}

// lastRuneStart returns the runeInfo and position of the last
// rune in buf or the zero runeInfo and -1 if no rune was found.
func lastRuneStart(fd *formInfo, buf []byte) (Properties, int) {
	p := len(buf) - 1
	for ; p >= 0 && !utf8.RuneStart(buf[p]); p-- {
	}
	if p < 0 {
		return Properties{}, -1
	}
	return fd.info(inputBytes(buf), p), p
}

// decomposeToLastBoundary finds an open segment at the end of the buffer
// and scans it into rb. Returns the buffer minus the last segment.
func decomposeToLastBoundary(rb *reorderBuffer) {
	fd := &rb.f
	info, i := lastRuneStart(fd, rb.out)
	if int(info.size) != len(rb.out)-i {
		// illegal trailing continuation bytes
		return
	}
	if info.BoundaryAfter() {
		return
	}
	var add [maxNonStarters + 1]Properties // stores runeInfo in reverse order
	padd := 0
	ss := streamSafe(0)
	p := len(rb.out)
	for {
		add[padd] = info
		v := ss.backwards(info)
		if v == ssOverflow {
			// Note that if we have an overflow, it the string we are appending to
			// is not correctly normalized. In this case the behavior is undefined.
			break
		}
		padd++
		p -= int(info.size)
		if v == ssStarter || p < 0 {
			break
		}
		info, i = lastRuneStart(fd, rb.out[:p])
		if int(info.size) != p-i {
			break
		}
	}
	rb.ss = ss
	// Copy bytes for insertion as we may need to overwrite rb.out.
	var buf [maxBufferSize * utf8.UTFMax]byte
	cp := buf[:copy(buf[:], rb.out[p:])]
	rb.out = rb.out[:p]
	for padd--; padd >= 0; padd-- {
		info = add[padd]
		rb.insertUnsafe(inputBytes(cp), 0, info)
		cp = cp[info.size:]
	}
}
  07070100000F40000081A4000000000000000000000001645E367C00000B8D000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/text/unicode/norm/readwriter.go   // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package norm

import "io"

type normWriter struct {
	rb  reorderBuffer
	w   io.Writer
	buf []byte
}

// Write implements the standard write interface.  If the last characters are
// not at a normalization boundary, the bytes will be buffered for the next
// write. The remaining bytes will be written on close.
func (w *normWriter) Write(data []byte) (n int, err error) {
	// Process data in pieces to keep w.buf size bounded.
	const chunk = 4000

	for len(data) > 0 {
		// Normalize into w.buf.
		m := len(data)
		if m > chunk {
			m = chunk
		}
		w.rb.src = inputBytes(data[:m])
		w.rb.nsrc = m
		w.buf = doAppend(&w.rb, w.buf, 0)
		data = data[m:]
		n += m

		// Write out complete prefix, save remainder.
		// Note that lastBoundary looks back at most 31 runes.
		i := lastBoundary(&w.rb.f, w.buf)
		if i == -1 {
			i = 0
		}
		if i > 0 {
			if _, err = w.w.Write(w.buf[:i]); err != nil {
				break
			}
			bn := copy(w.buf, w.buf[i:])
			w.buf = w.buf[:bn]
		}
	}
	return n, err
}

// Close forces data that remains in the buffer to be written.
func (w *normWriter) Close() error {
	if len(w.buf) > 0 {
		_, err := w.w.Write(w.buf)
		if err != nil {
			return err
		}
	}
	return nil
}

// Writer returns a new writer that implements Write(b)
// by writing f(b) to w. The returned writer may use an
// internal buffer to maintain state across Write calls.
// Calling its Close method writes any buffered data to w.
func (f Form) Writer(w io.Writer) io.WriteCloser {
	wr := &normWriter{rb: reorderBuffer{}, w: w}
	wr.rb.init(f, nil)
	return wr
}

type normReader struct {
	rb           reorderBuffer
	r            io.Reader
	inbuf        []byte
	outbuf       []byte
	bufStart     int
	lastBoundary int
	err          error
}

// Read implements the standard read interface.
func (r *normReader) Read(p []byte) (int, error) {
	for {
		if r.lastBoundary-r.bufStart > 0 {
			n := copy(p, r.outbuf[r.bufStart:r.lastBoundary])
			r.bufStart += n
			if r.lastBoundary-r.bufStart > 0 {
				return n, nil
			}
			return n, r.err
		}
		if r.err != nil {
			return 0, r.err
		}
		outn := copy(r.outbuf, r.outbuf[r.lastBoundary:])
		r.outbuf = r.outbuf[0:outn]
		r.bufStart = 0

		n, err := r.r.Read(r.inbuf)
		r.rb.src = inputBytes(r.inbuf[0:n])
		r.rb.nsrc, r.err = n, err
		if n > 0 {
			r.outbuf = doAppend(&r.rb, r.outbuf, 0)
		}
		if err == io.EOF {
			r.lastBoundary = len(r.outbuf)
		} else {
			r.lastBoundary = lastBoundary(&r.rb.f, r.outbuf)
			if r.lastBoundary == -1 {
				r.lastBoundary = 0
			}
		}
	}
}

// Reader returns a new reader that implements Read
// by reading data from r and returning f(data).
func (f Form) Reader(r io.Reader) io.Reader {
	const chunk = 4000
	buf := make([]byte, chunk)
	rr := &normReader{rb: reorderBuffer{}, r: r, inbuf: buf}
	rr.rb.init(f, buf)
	return rr
}
   07070100000F41000081A4000000000000000000000001645E367C0005D93F000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/text/unicode/norm/tables10.0.0.go // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.

//go:build go1.10 && !go1.13
// +build go1.10,!go1.13

package norm

import "sync"

const (
	// Version is the Unicode edition from which the tables are derived.
	Version = "10.0.0"

	// MaxTransformChunkSize indicates the maximum number of bytes that Transform
	// may need to write atomically for any Form. Making a destination buffer at
	// least this size ensures that Transform can always make progress and that
	// the user does not need to grow the buffer on an ErrShortDst.
	MaxTransformChunkSize = 35 + maxNonStarters*4
)

var ccc = [55]uint8{
	0, 1, 7, 8, 9, 10, 11, 12,
	13, 14, 15, 16, 17, 18, 19, 20,
	21, 22, 23, 24, 25, 26, 27, 28,
	29, 30, 31, 32, 33, 34, 35, 36,
	84, 91, 103, 107, 118, 122, 129, 130,
	132, 202, 214, 216, 218, 220, 222, 224,
	226, 228, 230, 232, 233, 234, 240,
}

const (
	firstMulti            = 0x186D
	firstCCC              = 0x2C9E
	endMulti              = 0x2F60
	firstLeadingCCC       = 0x49AE
	firstCCCZeroExcept    = 0x4A78
	firstStarterWithNLead = 0x4A9F
	lastDecomp            = 0x4AA1
	maxDecomp             = 0x8000
)

// decomps: 19105 bytes
var decomps = [...]byte{
	// Bytes 0 - 3f
	0x00, 0x41, 0x20, 0x41, 0x21, 0x41, 0x22, 0x41,
	0x23, 0x41, 0x24, 0x41, 0x25, 0x41, 0x26, 0x41,
	0x27, 0x41, 0x28, 0x41, 0x29, 0x41, 0x2A, 0x41,
	0x2B, 0x41, 0x2C, 0x41, 0x2D, 0x41, 0x2E, 0x41,
	0x2F, 0x41, 0x30, 0x41, 0x31, 0x41, 0x32, 0x41,
	0x33, 0x41, 0x34, 0x41, 0x35, 0x41, 0x36, 0x41,
	0x37, 0x41, 0x38, 0x41, 0x39, 0x41, 0x3A, 0x41,
	0x3B, 0x41, 0x3C, 0x41, 0x3D, 0x41, 0x3E, 0x41,
	// Bytes 40 - 7f
	0x3F, 0x41, 0x40, 0x41, 0x41, 0x41, 0x42, 0x41,
	0x43, 0x41, 0x44, 0x41, 0x45, 0x41, 0x46, 0x41,
	0x47, 0x41, 0x48, 0x41, 0x49, 0x41, 0x4A, 0x41,
	0x4B, 0x41, 0x4C, 0x41, 0x4D, 0x41, 0x4E, 0x41,
	0x4F, 0x41, 0x50, 0x41, 0x51, 0x41, 0x52, 0x41,
	0x53, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41,
	0x57, 0x41, 0x58, 0x41, 0x59, 0x41, 0x5A, 0x41,
	0x5B, 0x41, 0x5C, 0x41, 0x5D, 0x41, 0x5E, 0x41,
	// Bytes 80 - bf
	0x5F, 0x41, 0x60, 0x41, 0x61, 0x41, 0x62, 0x41,
	0x63, 0x41, 0x64, 0x41, 0x65, 0x41, 0x66, 0x41,
	0x67, 0x41, 0x68, 0x41, 0x69, 0x41, 0x6A, 0x41,
	0x6B, 0x41, 0x6C, 0x41, 0x6D, 0x41, 0x6E, 0x41,
	0x6F, 0x41, 0x70, 0x41, 0x71, 0x41, 0x72, 0x41,
	0x73, 0x41, 0x74, 0x41, 0x75, 0x41, 0x76, 0x41,
	0x77, 0x41, 0x78, 0x41, 0x79, 0x41, 0x7A, 0x41,
	0x7B, 0x41, 0x7C, 0x41, 0x7D, 0x41, 0x7E, 0x42,
	// Bytes c0 - ff
	0xC2, 0xA2, 0x42, 0xC2, 0xA3, 0x42, 0xC2, 0xA5,
	0x42, 0xC2, 0xA6, 0x42, 0xC2, 0xAC, 0x42, 0xC2,
	0xB7, 0x42, 0xC3, 0x86, 0x42, 0xC3, 0xB0, 0x42,
	0xC4, 0xA6, 0x42, 0xC4, 0xA7, 0x42, 0xC4, 0xB1,
	0x42, 0xC5, 0x8B, 0x42, 0xC5, 0x93, 0x42, 0xC6,
	0x8E, 0x42, 0xC6, 0x90, 0x42, 0xC6, 0xAB, 0x42,
	0xC8, 0xA2, 0x42, 0xC8, 0xB7, 0x42, 0xC9, 0x90,
	0x42, 0xC9, 0x91, 0x42, 0xC9, 0x92, 0x42, 0xC9,
	// Bytes 100 - 13f
	0x94, 0x42, 0xC9, 0x95, 0x42, 0xC9, 0x99, 0x42,
	0xC9, 0x9B, 0x42, 0xC9, 0x9C, 0x42, 0xC9, 0x9F,
	0x42, 0xC9, 0xA1, 0x42, 0xC9, 0xA3, 0x42, 0xC9,
	0xA5, 0x42, 0xC9, 0xA6, 0x42, 0xC9, 0xA8, 0x42,
	0xC9, 0xA9, 0x42, 0xC9, 0xAA, 0x42, 0xC9, 0xAB,
	0x42, 0xC9, 0xAD, 0x42, 0xC9, 0xAF, 0x42, 0xC9,
	0xB0, 0x42, 0xC9, 0xB1, 0x42, 0xC9, 0xB2, 0x42,
	0xC9, 0xB3, 0x42, 0xC9, 0xB4, 0x42, 0xC9, 0xB5,
	// Bytes 140 - 17f
	0x42, 0xC9, 0xB8, 0x42, 0xC9, 0xB9, 0x42, 0xC9,
	0xBB, 0x42, 0xCA, 0x81, 0x42, 0xCA, 0x82, 0x42,
	0xCA, 0x83, 0x42, 0xCA, 0x89, 0x42, 0xCA, 0x8A,
	0x42, 0xCA, 0x8B, 0x42, 0xCA, 0x8C, 0x42, 0xCA,
	0x90, 0x42, 0xCA, 0x91, 0x42, 0xCA, 0x92, 0x42,
	0xCA, 0x95, 0x42, 0xCA, 0x9D, 0x42, 0xCA, 0x9F,
	0x42, 0xCA, 0xB9, 0x42, 0xCE, 0x91, 0x42, 0xCE,
	0x92, 0x42, 0xCE, 0x93, 0x42, 0xCE, 0x94, 0x42,
	// Bytes 180 - 1bf
	0xCE, 0x95, 0x42, 0xCE, 0x96, 0x42, 0xCE, 0x97,
	0x42, 0xCE, 0x98, 0x42, 0xCE, 0x99, 0x42, 0xCE,
	0x9A, 0x42, 0xCE, 0x9B, 0x42, 0xCE, 0x9C, 0x42,
	0xCE, 0x9D, 0x42, 0xCE, 0x9E, 0x42, 0xCE, 0x9F,
	0x42, 0xCE, 0xA0, 0x42, 0xCE, 0xA1, 0x42, 0xCE,
	0xA3, 0x42, 0xCE, 0xA4, 0x42, 0xCE, 0xA5, 0x42,
	0xCE, 0xA6, 0x42, 0xCE, 0xA7, 0x42, 0xCE, 0xA8,
	0x42, 0xCE, 0xA9, 0x42, 0xCE, 0xB1, 0x42, 0xCE,
	// Bytes 1c0 - 1ff
	0xB2, 0x42, 0xCE, 0xB3, 0x42, 0xCE, 0xB4, 0x42,
	0xCE, 0xB5, 0x42, 0xCE, 0xB6, 0x42, 0xCE, 0xB7,
	0x42, 0xCE, 0xB8, 0x42, 0xCE, 0xB9, 0x42, 0xCE,
	0xBA, 0x42, 0xCE, 0xBB, 0x42, 0xCE, 0xBC, 0x42,
	0xCE, 0xBD, 0x42, 0xCE, 0xBE, 0x42, 0xCE, 0xBF,
	0x42, 0xCF, 0x80, 0x42, 0xCF, 0x81, 0x42, 0xCF,
	0x82, 0x42, 0xCF, 0x83, 0x42, 0xCF, 0x84, 0x42,
	0xCF, 0x85, 0x42, 0xCF, 0x86, 0x42, 0xCF, 0x87,
	// Bytes 200 - 23f
	0x42, 0xCF, 0x88, 0x42, 0xCF, 0x89, 0x42, 0xCF,
	0x9C, 0x42, 0xCF, 0x9D, 0x42, 0xD0, 0xBD, 0x42,
	0xD1, 0x8A, 0x42, 0xD1, 0x8C, 0x42, 0xD7, 0x90,
	0x42, 0xD7, 0x91, 0x42, 0xD7, 0x92, 0x42, 0xD7,
	0x93, 0x42, 0xD7, 0x94, 0x42, 0xD7, 0x9B, 0x42,
	0xD7, 0x9C, 0x42, 0xD7, 0x9D, 0x42, 0xD7, 0xA2,
	0x42, 0xD7, 0xA8, 0x42, 0xD7, 0xAA, 0x42, 0xD8,
	0xA1, 0x42, 0xD8, 0xA7, 0x42, 0xD8, 0xA8, 0x42,
	// Bytes 240 - 27f
	0xD8, 0xA9, 0x42, 0xD8, 0xAA, 0x42, 0xD8, 0xAB,
	0x42, 0xD8, 0xAC, 0x42, 0xD8, 0xAD, 0x42, 0xD8,
	0xAE, 0x42, 0xD8, 0xAF, 0x42, 0xD8, 0xB0, 0x42,
	0xD8, 0xB1, 0x42, 0xD8, 0xB2, 0x42, 0xD8, 0xB3,
	0x42, 0xD8, 0xB4, 0x42, 0xD8, 0xB5, 0x42, 0xD8,
	0xB6, 0x42, 0xD8, 0xB7, 0x42, 0xD8, 0xB8, 0x42,
	0xD8, 0xB9, 0x42, 0xD8, 0xBA, 0x42, 0xD9, 0x81,
	0x42, 0xD9, 0x82, 0x42, 0xD9, 0x83, 0x42, 0xD9,
	// Bytes 280 - 2bf
	0x84, 0x42, 0xD9, 0x85, 0x42, 0xD9, 0x86, 0x42,
	0xD9, 0x87, 0x42, 0xD9, 0x88, 0x42, 0xD9, 0x89,
	0x42, 0xD9, 0x8A, 0x42, 0xD9, 0xAE, 0x42, 0xD9,
	0xAF, 0x42, 0xD9, 0xB1, 0x42, 0xD9, 0xB9, 0x42,
	0xD9, 0xBA, 0x42, 0xD9, 0xBB, 0x42, 0xD9, 0xBE,
	0x42, 0xD9, 0xBF, 0x42, 0xDA, 0x80, 0x42, 0xDA,
	0x83, 0x42, 0xDA, 0x84, 0x42, 0xDA, 0x86, 0x42,
	0xDA, 0x87, 0x42, 0xDA, 0x88, 0x42, 0xDA, 0x8C,
	// Bytes 2c0 - 2ff
	0x42, 0xDA, 0x8D, 0x42, 0xDA, 0x8E, 0x42, 0xDA,
	0x91, 0x42, 0xDA, 0x98, 0x42, 0xDA, 0xA1, 0x42,
	0xDA, 0xA4, 0x42, 0xDA, 0xA6, 0x42, 0xDA, 0xA9,
	0x42, 0xDA, 0xAD, 0x42, 0xDA, 0xAF, 0x42, 0xDA,
	0xB1, 0x42, 0xDA, 0xB3, 0x42, 0xDA, 0xBA, 0x42,
	0xDA, 0xBB, 0x42, 0xDA, 0xBE, 0x42, 0xDB, 0x81,
	0x42, 0xDB, 0x85, 0x42, 0xDB, 0x86, 0x42, 0xDB,
	0x87, 0x42, 0xDB, 0x88, 0x42, 0xDB, 0x89, 0x42,
	// Bytes 300 - 33f
	0xDB, 0x8B, 0x42, 0xDB, 0x8C, 0x42, 0xDB, 0x90,
	0x42, 0xDB, 0x92, 0x43, 0xE0, 0xBC, 0x8B, 0x43,
	0xE1, 0x83, 0x9C, 0x43, 0xE1, 0x84, 0x80, 0x43,
	0xE1, 0x84, 0x81, 0x43, 0xE1, 0x84, 0x82, 0x43,
	0xE1, 0x84, 0x83, 0x43, 0xE1, 0x84, 0x84, 0x43,
	0xE1, 0x84, 0x85, 0x43, 0xE1, 0x84, 0x86, 0x43,
	0xE1, 0x84, 0x87, 0x43, 0xE1, 0x84, 0x88, 0x43,
	0xE1, 0x84, 0x89, 0x43, 0xE1, 0x84, 0x8A, 0x43,
	// Bytes 340 - 37f
	0xE1, 0x84, 0x8B, 0x43, 0xE1, 0x84, 0x8C, 0x43,
	0xE1, 0x84, 0x8D, 0x43, 0xE1, 0x84, 0x8E, 0x43,
	0xE1, 0x84, 0x8F, 0x43, 0xE1, 0x84, 0x90, 0x43,
	0xE1, 0x84, 0x91, 0x43, 0xE1, 0x84, 0x92, 0x43,
	0xE1, 0x84, 0x94, 0x43, 0xE1, 0x84, 0x95, 0x43,
	0xE1, 0x84, 0x9A, 0x43, 0xE1, 0x84, 0x9C, 0x43,
	0xE1, 0x84, 0x9D, 0x43, 0xE1, 0x84, 0x9E, 0x43,
	0xE1, 0x84, 0xA0, 0x43, 0xE1, 0x84, 0xA1, 0x43,
	// Bytes 380 - 3bf
	0xE1, 0x84, 0xA2, 0x43, 0xE1, 0x84, 0xA3, 0x43,
	0xE1, 0x84, 0xA7, 0x43, 0xE1, 0x84, 0xA9, 0x43,
	0xE1, 0x84, 0xAB, 0x43, 0xE1, 0x84, 0xAC, 0x43,
	0xE1, 0x84, 0xAD, 0x43, 0xE1, 0x84, 0xAE, 0x43,
	0xE1, 0x84, 0xAF, 0x43, 0xE1, 0x84, 0xB2, 0x43,
	0xE1, 0x84, 0xB6, 0x43, 0xE1, 0x85, 0x80, 0x43,
	0xE1, 0x85, 0x87, 0x43, 0xE1, 0x85, 0x8C, 0x43,
	0xE1, 0x85, 0x97, 0x43, 0xE1, 0x85, 0x98, 0x43,
	// Bytes 3c0 - 3ff
	0xE1, 0x85, 0x99, 0x43, 0xE1, 0x85, 0xA0, 0x43,
	0xE1, 0x86, 0x84, 0x43, 0xE1, 0x86, 0x85, 0x43,
	0xE1, 0x86, 0x88, 0x43, 0xE1, 0x86, 0x91, 0x43,
	0xE1, 0x86, 0x92, 0x43, 0xE1, 0x86, 0x94, 0x43,
	0xE1, 0x86, 0x9E, 0x43, 0xE1, 0x86, 0xA1, 0x43,
	0xE1, 0x87, 0x87, 0x43, 0xE1, 0x87, 0x88, 0x43,
	0xE1, 0x87, 0x8C, 0x43, 0xE1, 0x87, 0x8E, 0x43,
	0xE1, 0x87, 0x93, 0x43, 0xE1, 0x87, 0x97, 0x43,
	// Bytes 400 - 43f
	0xE1, 0x87, 0x99, 0x43, 0xE1, 0x87, 0x9D, 0x43,
	0xE1, 0x87, 0x9F, 0x43, 0xE1, 0x87, 0xB1, 0x43,
	0xE1, 0x87, 0xB2, 0x43, 0xE1, 0xB4, 0x82, 0x43,
	0xE1, 0xB4, 0x96, 0x43, 0xE1, 0xB4, 0x97, 0x43,
	0xE1, 0xB4, 0x9C, 0x43, 0xE1, 0xB4, 0x9D, 0x43,
	0xE1, 0xB4, 0xA5, 0x43, 0xE1, 0xB5, 0xBB, 0x43,
	0xE1, 0xB6, 0x85, 0x43, 0xE2, 0x80, 0x82, 0x43,
	0xE2, 0x80, 0x83, 0x43, 0xE2, 0x80, 0x90, 0x43,
	// Bytes 440 - 47f
	0xE2, 0x80, 0x93, 0x43, 0xE2, 0x80, 0x94, 0x43,
	0xE2, 0x82, 0xA9, 0x43, 0xE2, 0x86, 0x90, 0x43,
	0xE2, 0x86, 0x91, 0x43, 0xE2, 0x86, 0x92, 0x43,
	0xE2, 0x86, 0x93, 0x43, 0xE2, 0x88, 0x82, 0x43,
	0xE2, 0x88, 0x87, 0x43, 0xE2, 0x88, 0x91, 0x43,
	0xE2, 0x88, 0x92, 0x43, 0xE2, 0x94, 0x82, 0x43,
	0xE2, 0x96, 0xA0, 0x43, 0xE2, 0x97, 0x8B, 0x43,
	0xE2, 0xA6, 0x85, 0x43, 0xE2, 0xA6, 0x86, 0x43,
	// Bytes 480 - 4bf
	0xE2, 0xB5, 0xA1, 0x43, 0xE3, 0x80, 0x81, 0x43,
	0xE3, 0x80, 0x82, 0x43, 0xE3, 0x80, 0x88, 0x43,
	0xE3, 0x80, 0x89, 0x43, 0xE3, 0x80, 0x8A, 0x43,
	0xE3, 0x80, 0x8B, 0x43, 0xE3, 0x80, 0x8C, 0x43,
	0xE3, 0x80, 0x8D, 0x43, 0xE3, 0x80, 0x8E, 0x43,
	0xE3, 0x80, 0x8F, 0x43, 0xE3, 0x80, 0x90, 0x43,
	0xE3, 0x80, 0x91, 0x43, 0xE3, 0x80, 0x92, 0x43,
	0xE3, 0x80, 0x94, 0x43, 0xE3, 0x80, 0x95, 0x43,
	// Bytes 4c0 - 4ff
	0xE3, 0x80, 0x96, 0x43, 0xE3, 0x80, 0x97, 0x43,
	0xE3, 0x82, 0xA1, 0x43, 0xE3, 0x82, 0xA2, 0x43,
	0xE3, 0x82, 0xA3, 0x43, 0xE3, 0x82, 0xA4, 0x43,
	0xE3, 0x82, 0xA5, 0x43, 0xE3, 0x82, 0xA6, 0x43,
	0xE3, 0x82, 0xA7, 0x43, 0xE3, 0x82, 0xA8, 0x43,
	0xE3, 0x82, 0xA9, 0x43, 0xE3, 0x82, 0xAA, 0x43,
	0xE3, 0x82, 0xAB, 0x43, 0xE3, 0x82, 0xAD, 0x43,
	0xE3, 0x82, 0xAF, 0x43, 0xE3, 0x82, 0xB1, 0x43,
	// Bytes 500 - 53f
	0xE3, 0x82, 0xB3, 0x43, 0xE3, 0x82, 0xB5, 0x43,
	0xE3, 0x82, 0xB7, 0x43, 0xE3, 0x82, 0xB9, 0x43,
	0xE3, 0x82, 0xBB, 0x43, 0xE3, 0x82, 0xBD, 0x43,
	0xE3, 0x82, 0xBF, 0x43, 0xE3, 0x83, 0x81, 0x43,
	0xE3, 0x83, 0x83, 0x43, 0xE3, 0x83, 0x84, 0x43,
	0xE3, 0x83, 0x86, 0x43, 0xE3, 0x83, 0x88, 0x43,
	0xE3, 0x83, 0x8A, 0x43, 0xE3, 0x83, 0x8B, 0x43,
	0xE3, 0x83, 0x8C, 0x43, 0xE3, 0x83, 0x8D, 0x43,
	// Bytes 540 - 57f
	0xE3, 0x83, 0x8E, 0x43, 0xE3, 0x83, 0x8F, 0x43,
	0xE3, 0x83, 0x92, 0x43, 0xE3, 0x83, 0x95, 0x43,
	0xE3, 0x83, 0x98, 0x43, 0xE3, 0x83, 0x9B, 0x43,
	0xE3, 0x83, 0x9E, 0x43, 0xE3, 0x83, 0x9F, 0x43,
	0xE3, 0x83, 0xA0, 0x43, 0xE3, 0x83, 0xA1, 0x43,
	0xE3, 0x83, 0xA2, 0x43, 0xE3, 0x83, 0xA3, 0x43,
	0xE3, 0x83, 0xA4, 0x43, 0xE3, 0x83, 0xA5, 0x43,
	0xE3, 0x83, 0xA6, 0x43, 0xE3, 0x83, 0xA7, 0x43,
	// Bytes 580 - 5bf
	0xE3, 0x83, 0xA8, 0x43, 0xE3, 0x83, 0xA9, 0x43,
	0xE3, 0x83, 0xAA, 0x43, 0xE3, 0x83, 0xAB, 0x43,
	0xE3, 0x83, 0xAC, 0x43, 0xE3, 0x83, 0xAD, 0x43,
	0xE3, 0x83, 0xAF, 0x43, 0xE3, 0x83, 0xB0, 0x43,
	0xE3, 0x83, 0xB1, 0x43, 0xE3, 0x83, 0xB2, 0x43,
	0xE3, 0x83, 0xB3, 0x43, 0xE3, 0x83, 0xBB, 0x43,
	0xE3, 0x83, 0xBC, 0x43, 0xE3, 0x92, 0x9E, 0x43,
	0xE3, 0x92, 0xB9, 0x43, 0xE3, 0x92, 0xBB, 0x43,
	// Bytes 5c0 - 5ff
	0xE3, 0x93, 0x9F, 0x43, 0xE3, 0x94, 0x95, 0x43,
	0xE3, 0x9B, 0xAE, 0x43, 0xE3, 0x9B, 0xBC, 0x43,
	0xE3, 0x9E, 0x81, 0x43, 0xE3, 0xA0, 0xAF, 0x43,
	0xE3, 0xA1, 0xA2, 0x43, 0xE3, 0xA1, 0xBC, 0x43,
	0xE3, 0xA3, 0x87, 0x43, 0xE3, 0xA3, 0xA3, 0x43,
	0xE3, 0xA4, 0x9C, 0x43, 0xE3, 0xA4, 0xBA, 0x43,
	0xE3, 0xA8, 0xAE, 0x43, 0xE3, 0xA9, 0xAC, 0x43,
	0xE3, 0xAB, 0xA4, 0x43, 0xE3, 0xAC, 0x88, 0x43,
	// Bytes 600 - 63f
	0xE3, 0xAC, 0x99, 0x43, 0xE3, 0xAD, 0x89, 0x43,
	0xE3, 0xAE, 0x9D, 0x43, 0xE3, 0xB0, 0x98, 0x43,
	0xE3, 0xB1, 0x8E, 0x43, 0xE3, 0xB4, 0xB3, 0x43,
	0xE3, 0xB6, 0x96, 0x43, 0xE3, 0xBA, 0xAC, 0x43,
	0xE3, 0xBA, 0xB8, 0x43, 0xE3, 0xBC, 0x9B, 0x43,
	0xE3, 0xBF, 0xBC, 0x43, 0xE4, 0x80, 0x88, 0x43,
	0xE4, 0x80, 0x98, 0x43, 0xE4, 0x80, 0xB9, 0x43,
	0xE4, 0x81, 0x86, 0x43, 0xE4, 0x82, 0x96, 0x43,
	// Bytes 640 - 67f
	0xE4, 0x83, 0xA3, 0x43, 0xE4, 0x84, 0xAF, 0x43,
	0xE4, 0x88, 0x82, 0x43, 0xE4, 0x88, 0xA7, 0x43,
	0xE4, 0x8A, 0xA0, 0x43, 0xE4, 0x8C, 0x81, 0x43,
	0xE4, 0x8C, 0xB4, 0x43, 0xE4, 0x8D, 0x99, 0x43,
	0xE4, 0x8F, 0x95, 0x43, 0xE4, 0x8F, 0x99, 0x43,
	0xE4, 0x90, 0x8B, 0x43, 0xE4, 0x91, 0xAB, 0x43,
	0xE4, 0x94, 0xAB, 0x43, 0xE4, 0x95, 0x9D, 0x43,
	0xE4, 0x95, 0xA1, 0x43, 0xE4, 0x95, 0xAB, 0x43,
	// Bytes 680 - 6bf
	0xE4, 0x97, 0x97, 0x43, 0xE4, 0x97, 0xB9, 0x43,
	0xE4, 0x98, 0xB5, 0x43, 0xE4, 0x9A, 0xBE, 0x43,
	0xE4, 0x9B, 0x87, 0x43, 0xE4, 0xA6, 0x95, 0x43,
	0xE4, 0xA7, 0xA6, 0x43, 0xE4, 0xA9, 0xAE, 0x43,
	0xE4, 0xA9, 0xB6, 0x43, 0xE4, 0xAA, 0xB2, 0x43,
	0xE4, 0xAC, 0xB3, 0x43, 0xE4, 0xAF, 0x8E, 0x43,
	0xE4, 0xB3, 0x8E, 0x43, 0xE4, 0xB3, 0xAD, 0x43,
	0xE4, 0xB3, 0xB8, 0x43, 0xE4, 0xB5, 0x96, 0x43,
	// Bytes 6c0 - 6ff
	0xE4, 0xB8, 0x80, 0x43, 0xE4, 0xB8, 0x81, 0x43,
	0xE4, 0xB8, 0x83, 0x43, 0xE4, 0xB8, 0x89, 0x43,
	0xE4, 0xB8, 0x8A, 0x43, 0xE4, 0xB8, 0x8B, 0x43,
	0xE4, 0xB8, 0x8D, 0x43, 0xE4, 0xB8, 0x99, 0x43,
	0xE4, 0xB8, 0xA6, 0x43, 0xE4, 0xB8, 0xA8, 0x43,
	0xE4, 0xB8, 0xAD, 0x43, 0xE4, 0xB8, 0xB2, 0x43,
	0xE4, 0xB8, 0xB6, 0x43, 0xE4, 0xB8, 0xB8, 0x43,
	0xE4, 0xB8, 0xB9, 0x43, 0xE4, 0xB8, 0xBD, 0x43,
	// Bytes 700 - 73f
	0xE4, 0xB8, 0xBF, 0x43, 0xE4, 0xB9, 0x81, 0x43,
	0xE4, 0xB9, 0x99, 0x43, 0xE4, 0xB9, 0x9D, 0x43,
	0xE4, 0xBA, 0x82, 0x43, 0xE4, 0xBA, 0x85, 0x43,
	0xE4, 0xBA, 0x86, 0x43, 0xE4, 0xBA, 0x8C, 0x43,
	0xE4, 0xBA, 0x94, 0x43, 0xE4, 0xBA, 0xA0, 0x43,
	0xE4, 0xBA, 0xA4, 0x43, 0xE4, 0xBA, 0xAE, 0x43,
	0xE4, 0xBA, 0xBA, 0x43, 0xE4, 0xBB, 0x80, 0x43,
	0xE4, 0xBB, 0x8C, 0x43, 0xE4, 0xBB, 0xA4, 0x43,
	// Bytes 740 - 77f
	0xE4, 0xBC, 0x81, 0x43, 0xE4, 0xBC, 0x91, 0x43,
	0xE4, 0xBD, 0xA0, 0x43, 0xE4, 0xBE, 0x80, 0x43,
	0xE4, 0xBE, 0x86, 0x43, 0xE4, 0xBE, 0x8B, 0x43,
	0xE4, 0xBE, 0xAE, 0x43, 0xE4, 0xBE, 0xBB, 0x43,
	0xE4, 0xBE, 0xBF, 0x43, 0xE5, 0x80, 0x82, 0x43,
	0xE5, 0x80, 0xAB, 0x43, 0xE5, 0x81, 0xBA, 0x43,
	0xE5, 0x82, 0x99, 0x43, 0xE5, 0x83, 0x8F, 0x43,
	0xE5, 0x83, 0x9A, 0x43, 0xE5, 0x83, 0xA7, 0x43,
	// Bytes 780 - 7bf
	0xE5, 0x84, 0xAA, 0x43, 0xE5, 0x84, 0xBF, 0x43,
	0xE5, 0x85, 0x80, 0x43, 0xE5, 0x85, 0x85, 0x43,
	0xE5, 0x85, 0x8D, 0x43, 0xE5, 0x85, 0x94, 0x43,
	0xE5, 0x85, 0xA4, 0x43, 0xE5, 0x85, 0xA5, 0x43,
	0xE5, 0x85, 0xA7, 0x43, 0xE5, 0x85, 0xA8, 0x43,
	0xE5, 0x85, 0xA9, 0x43, 0xE5, 0x85, 0xAB, 0x43,
	0xE5, 0x85, 0xAD, 0x43, 0xE5, 0x85, 0xB7, 0x43,
	0xE5, 0x86, 0x80, 0x43, 0xE5, 0x86, 0x82, 0x43,
	// Bytes 7c0 - 7ff
	0xE5, 0x86, 0x8D, 0x43, 0xE5, 0x86, 0x92, 0x43,
	0xE5, 0x86, 0x95, 0x43, 0xE5, 0x86, 0x96, 0x43,
	0xE5, 0x86, 0x97, 0x43, 0xE5, 0x86, 0x99, 0x43,
	0xE5, 0x86, 0xA4, 0x43, 0xE5, 0x86, 0xAB, 0x43,
	0xE5, 0x86, 0xAC, 0x43, 0xE5, 0x86, 0xB5, 0x43,
	0xE5, 0x86, 0xB7, 0x43, 0xE5, 0x87, 0x89, 0x43,
	0xE5, 0x87, 0x8C, 0x43, 0xE5, 0x87, 0x9C, 0x43,
	0xE5, 0x87, 0x9E, 0x43, 0xE5, 0x87, 0xA0, 0x43,
	// Bytes 800 - 83f
	0xE5, 0x87, 0xB5, 0x43, 0xE5, 0x88, 0x80, 0x43,
	0xE5, 0x88, 0x83, 0x43, 0xE5, 0x88, 0x87, 0x43,
	0xE5, 0x88, 0x97, 0x43, 0xE5, 0x88, 0x9D, 0x43,
	0xE5, 0x88, 0xA9, 0x43, 0xE5, 0x88, 0xBA, 0x43,
	0xE5, 0x88, 0xBB, 0x43, 0xE5, 0x89, 0x86, 0x43,
	0xE5, 0x89, 0x8D, 0x43, 0xE5, 0x89, 0xB2, 0x43,
	0xE5, 0x89, 0xB7, 0x43, 0xE5, 0x8A, 0x89, 0x43,
	0xE5, 0x8A, 0x9B, 0x43, 0xE5, 0x8A, 0xA3, 0x43,
	// Bytes 840 - 87f
	0xE5, 0x8A, 0xB3, 0x43, 0xE5, 0x8A, 0xB4, 0x43,
	0xE5, 0x8B, 0x87, 0x43, 0xE5, 0x8B, 0x89, 0x43,
	0xE5, 0x8B, 0x92, 0x43, 0xE5, 0x8B, 0x9E, 0x43,
	0xE5, 0x8B, 0xA4, 0x43, 0xE5, 0x8B, 0xB5, 0x43,
	0xE5, 0x8B, 0xB9, 0x43, 0xE5, 0x8B, 0xBA, 0x43,
	0xE5, 0x8C, 0x85, 0x43, 0xE5, 0x8C, 0x86, 0x43,
	0xE5, 0x8C, 0x95, 0x43, 0xE5, 0x8C, 0x97, 0x43,
	0xE5, 0x8C, 0x9A, 0x43, 0xE5, 0x8C, 0xB8, 0x43,
	// Bytes 880 - 8bf
	0xE5, 0x8C, 0xBB, 0x43, 0xE5, 0x8C, 0xBF, 0x43,
	0xE5, 0x8D, 0x81, 0x43, 0xE5, 0x8D, 0x84, 0x43,
	0xE5, 0x8D, 0x85, 0x43, 0xE5, 0x8D, 0x89, 0x43,
	0xE5, 0x8D, 0x91, 0x43, 0xE5, 0x8D, 0x94, 0x43,
	0xE5, 0x8D, 0x9A, 0x43, 0xE5, 0x8D, 0x9C, 0x43,
	0xE5, 0x8D, 0xA9, 0x43, 0xE5, 0x8D, 0xB0, 0x43,
	0xE5, 0x8D, 0xB3, 0x43, 0xE5, 0x8D, 0xB5, 0x43,
	0xE5, 0x8D, 0xBD, 0x43, 0xE5, 0x8D, 0xBF, 0x43,
	// Bytes 8c0 - 8ff
	0xE5, 0x8E, 0x82, 0x43, 0xE5, 0x8E, 0xB6, 0x43,
	0xE5, 0x8F, 0x83, 0x43, 0xE5, 0x8F, 0x88, 0x43,
	0xE5, 0x8F, 0x8A, 0x43, 0xE5, 0x8F, 0x8C, 0x43,
	0xE5, 0x8F, 0x9F, 0x43, 0xE5, 0x8F, 0xA3, 0x43,
	0xE5, 0x8F, 0xA5, 0x43, 0xE5, 0x8F, 0xAB, 0x43,
	0xE5, 0x8F, 0xAF, 0x43, 0xE5, 0x8F, 0xB1, 0x43,
	0xE5, 0x8F, 0xB3, 0x43, 0xE5, 0x90, 0x86, 0x43,
	0xE5, 0x90, 0x88, 0x43, 0xE5, 0x90, 0x8D, 0x43,
	// Bytes 900 - 93f
	0xE5, 0x90, 0x8F, 0x43, 0xE5, 0x90, 0x9D, 0x43,
	0xE5, 0x90, 0xB8, 0x43, 0xE5, 0x90, 0xB9, 0x43,
	0xE5, 0x91, 0x82, 0x43, 0xE5, 0x91, 0x88, 0x43,
	0xE5, 0x91, 0xA8, 0x43, 0xE5, 0x92, 0x9E, 0x43,
	0xE5, 0x92, 0xA2, 0x43, 0xE5, 0x92, 0xBD, 0x43,
	0xE5, 0x93, 0xB6, 0x43, 0xE5, 0x94, 0x90, 0x43,
	0xE5, 0x95, 0x8F, 0x43, 0xE5, 0x95, 0x93, 0x43,
	0xE5, 0x95, 0x95, 0x43, 0xE5, 0x95, 0xA3, 0x43,
	// Bytes 940 - 97f
	0xE5, 0x96, 0x84, 0x43, 0xE5, 0x96, 0x87, 0x43,
	0xE5, 0x96, 0x99, 0x43, 0xE5, 0x96, 0x9D, 0x43,
	0xE5, 0x96, 0xAB, 0x43, 0xE5, 0x96, 0xB3, 0x43,
	0xE5, 0x96, 0xB6, 0x43, 0xE5, 0x97, 0x80, 0x43,
	0xE5, 0x97, 0x82, 0x43, 0xE5, 0x97, 0xA2, 0x43,
	0xE5, 0x98, 0x86, 0x43, 0xE5, 0x99, 0x91, 0x43,
	0xE5, 0x99, 0xA8, 0x43, 0xE5, 0x99, 0xB4, 0x43,
	0xE5, 0x9B, 0x97, 0x43, 0xE5, 0x9B, 0x9B, 0x43,
	// Bytes 980 - 9bf
	0xE5, 0x9B, 0xB9, 0x43, 0xE5, 0x9C, 0x96, 0x43,
	0xE5, 0x9C, 0x97, 0x43, 0xE5, 0x9C, 0x9F, 0x43,
	0xE5, 0x9C, 0xB0, 0x43, 0xE5, 0x9E, 0x8B, 0x43,
	0xE5, 0x9F, 0x8E, 0x43, 0xE5, 0x9F, 0xB4, 0x43,
	0xE5, 0xA0, 0x8D, 0x43, 0xE5, 0xA0, 0xB1, 0x43,
	0xE5, 0xA0, 0xB2, 0x43, 0xE5, 0xA1, 0x80, 0x43,
	0xE5, 0xA1, 0x9A, 0x43, 0xE5, 0xA1, 0x9E, 0x43,
	0xE5, 0xA2, 0xA8, 0x43, 0xE5, 0xA2, 0xAC, 0x43,
	// Bytes 9c0 - 9ff
	0xE5, 0xA2, 0xB3, 0x43, 0xE5, 0xA3, 0x98, 0x43,
	0xE5, 0xA3, 0x9F, 0x43, 0xE5, 0xA3, 0xAB, 0x43,
	0xE5, 0xA3, 0xAE, 0x43, 0xE5, 0xA3, 0xB0, 0x43,
	0xE5, 0xA3, 0xB2, 0x43, 0xE5, 0xA3, 0xB7, 0x43,
	0xE5, 0xA4, 0x82, 0x43, 0xE5, 0xA4, 0x86, 0x43,
	0xE5, 0xA4, 0x8A, 0x43, 0xE5, 0xA4, 0x95, 0x43,
	0xE5, 0xA4, 0x9A, 0x43, 0xE5, 0xA4, 0x9C, 0x43,
	0xE5, 0xA4, 0xA2, 0x43, 0xE5, 0xA4, 0xA7, 0x43,
	// Bytes a00 - a3f
	0xE5, 0xA4, 0xA9, 0x43, 0xE5, 0xA5, 0x84, 0x43,
	0xE5, 0xA5, 0x88, 0x43, 0xE5, 0xA5, 0x91, 0x43,
	0xE5, 0xA5, 0x94, 0x43, 0xE5, 0xA5, 0xA2, 0x43,
	0xE5, 0xA5, 0xB3, 0x43, 0xE5, 0xA7, 0x98, 0x43,
	0xE5, 0xA7, 0xAC, 0x43, 0xE5, 0xA8, 0x9B, 0x43,
	0xE5, 0xA8, 0xA7, 0x43, 0xE5, 0xA9, 0xA2, 0x43,
	0xE5, 0xA9, 0xA6, 0x43, 0xE5, 0xAA, 0xB5, 0x43,
	0xE5, 0xAC, 0x88, 0x43, 0xE5, 0xAC, 0xA8, 0x43,
	// Bytes a40 - a7f
	0xE5, 0xAC, 0xBE, 0x43, 0xE5, 0xAD, 0x90, 0x43,
	0xE5, 0xAD, 0x97, 0x43, 0xE5, 0xAD, 0xA6, 0x43,
	0xE5, 0xAE, 0x80, 0x43, 0xE5, 0xAE, 0x85, 0x43,
	0xE5, 0xAE, 0x97, 0x43, 0xE5, 0xAF, 0x83, 0x43,
	0xE5, 0xAF, 0x98, 0x43, 0xE5, 0xAF, 0xA7, 0x43,
	0xE5, 0xAF, 0xAE, 0x43, 0xE5, 0xAF, 0xB3, 0x43,
	0xE5, 0xAF, 0xB8, 0x43, 0xE5, 0xAF, 0xBF, 0x43,
	0xE5, 0xB0, 0x86, 0x43, 0xE5, 0xB0, 0x8F, 0x43,
	// Bytes a80 - abf
	0xE5, 0xB0, 0xA2, 0x43, 0xE5, 0xB0, 0xB8, 0x43,
	0xE5, 0xB0, 0xBF, 0x43, 0xE5, 0xB1, 0xA0, 0x43,
	0xE5, 0xB1, 0xA2, 0x43, 0xE5, 0xB1, 0xA4, 0x43,
	0xE5, 0xB1, 0xA5, 0x43, 0xE5, 0xB1, 0xAE, 0x43,
	0xE5, 0xB1, 0xB1, 0x43, 0xE5, 0xB2, 0x8D, 0x43,
	0xE5, 0xB3, 0x80, 0x43, 0xE5, 0xB4, 0x99, 0x43,
	0xE5, 0xB5, 0x83, 0x43, 0xE5, 0xB5, 0x90, 0x43,
	0xE5, 0xB5, 0xAB, 0x43, 0xE5, 0xB5, 0xAE, 0x43,
	// Bytes ac0 - aff
	0xE5, 0xB5, 0xBC, 0x43, 0xE5, 0xB6, 0xB2, 0x43,
	0xE5, 0xB6, 0xBA, 0x43, 0xE5, 0xB7, 0x9B, 0x43,
	0xE5, 0xB7, 0xA1, 0x43, 0xE5, 0xB7, 0xA2, 0x43,
	0xE5, 0xB7, 0xA5, 0x43, 0xE5, 0xB7, 0xA6, 0x43,
	0xE5, 0xB7, 0xB1, 0x43, 0xE5, 0xB7, 0xBD, 0x43,
	0xE5, 0xB7, 0xBE, 0x43, 0xE5, 0xB8, 0xA8, 0x43,
	0xE5, 0xB8, 0xBD, 0x43, 0xE5, 0xB9, 0xA9, 0x43,
	0xE5, 0xB9, 0xB2, 0x43, 0xE5, 0xB9, 0xB4, 0x43,
	// Bytes b00 - b3f
	0xE5, 0xB9, 0xBA, 0x43, 0xE5, 0xB9, 0xBC, 0x43,
	0xE5, 0xB9, 0xBF, 0x43, 0xE5, 0xBA, 0xA6, 0x43,
	0xE5, 0xBA, 0xB0, 0x43, 0xE5, 0xBA, 0xB3, 0x43,
	0xE5, 0xBA, 0xB6, 0x43, 0xE5, 0xBB, 0x89, 0x43,
	0xE5, 0xBB, 0x8A, 0x43, 0xE5, 0xBB, 0x92, 0x43,
	0xE5, 0xBB, 0x93, 0x43, 0xE5, 0xBB, 0x99, 0x43,
	0xE5, 0xBB, 0xAC, 0x43, 0xE5, 0xBB, 0xB4, 0x43,
	0xE5, 0xBB, 0xBE, 0x43, 0xE5, 0xBC, 0x84, 0x43,
	// Bytes b40 - b7f
	0xE5, 0xBC, 0x8B, 0x43, 0xE5, 0xBC, 0x93, 0x43,
	0xE5, 0xBC, 0xA2, 0x43, 0xE5, 0xBD, 0x90, 0x43,
	0xE5, 0xBD, 0x93, 0x43, 0xE5, 0xBD, 0xA1, 0x43,
	0xE5, 0xBD, 0xA2, 0x43, 0xE5, 0xBD, 0xA9, 0x43,
	0xE5, 0xBD, 0xAB, 0x43, 0xE5, 0xBD, 0xB3, 0x43,
	0xE5, 0xBE, 0x8B, 0x43, 0xE5, 0xBE, 0x8C, 0x43,
	0xE5, 0xBE, 0x97, 0x43, 0xE5, 0xBE, 0x9A, 0x43,
	0xE5, 0xBE, 0xA9, 0x43, 0xE5, 0xBE, 0xAD, 0x43,
	// Bytes b80 - bbf
	0xE5, 0xBF, 0x83, 0x43, 0xE5, 0xBF, 0x8D, 0x43,
	0xE5, 0xBF, 0x97, 0x43, 0xE5, 0xBF, 0xB5, 0x43,
	0xE5, 0xBF, 0xB9, 0x43, 0xE6, 0x80, 0x92, 0x43,
	0xE6, 0x80, 0x9C, 0x43, 0xE6, 0x81, 0xB5, 0x43,
	0xE6, 0x82, 0x81, 0x43, 0xE6, 0x82, 0x94, 0x43,
	0xE6, 0x83, 0x87, 0x43, 0xE6, 0x83, 0x98, 0x43,
	0xE6, 0x83, 0xA1, 0x43, 0xE6, 0x84, 0x88, 0x43,
	0xE6, 0x85, 0x84, 0x43, 0xE6, 0x85, 0x88, 0x43,
	// Bytes bc0 - bff
	0xE6, 0x85, 0x8C, 0x43, 0xE6, 0x85, 0x8E, 0x43,
	0xE6, 0x85, 0xA0, 0x43, 0xE6, 0x85, 0xA8, 0x43,
	0xE6, 0x85, 0xBA, 0x43, 0xE6, 0x86, 0x8E, 0x43,
	0xE6, 0x86, 0x90, 0x43, 0xE6, 0x86, 0xA4, 0x43,
	0xE6, 0x86, 0xAF, 0x43, 0xE6, 0x86, 0xB2, 0x43,
	0xE6, 0x87, 0x9E, 0x43, 0xE6, 0x87, 0xB2, 0x43,
	0xE6, 0x87, 0xB6, 0x43, 0xE6, 0x88, 0x80, 0x43,
	0xE6, 0x88, 0x88, 0x43, 0xE6, 0x88, 0x90, 0x43,
	// Bytes c00 - c3f
	0xE6, 0x88, 0x9B, 0x43, 0xE6, 0x88, 0xAE, 0x43,
	0xE6, 0x88, 0xB4, 0x43, 0xE6, 0x88, 0xB6, 0x43,
	0xE6, 0x89, 0x8B, 0x43, 0xE6, 0x89, 0x93, 0x43,
	0xE6, 0x89, 0x9D, 0x43, 0xE6, 0x8A, 0x95, 0x43,
	0xE6, 0x8A, 0xB1, 0x43, 0xE6, 0x8B, 0x89, 0x43,
	0xE6, 0x8B, 0x8F, 0x43, 0xE6, 0x8B, 0x93, 0x43,
	0xE6, 0x8B, 0x94, 0x43, 0xE6, 0x8B, 0xBC, 0x43,
	0xE6, 0x8B, 0xBE, 0x43, 0xE6, 0x8C, 0x87, 0x43,
	// Bytes c40 - c7f
	0xE6, 0x8C, 0xBD, 0x43, 0xE6, 0x8D, 0x90, 0x43,
	0xE6, 0x8D, 0x95, 0x43, 0xE6, 0x8D, 0xA8, 0x43,
	0xE6, 0x8D, 0xBB, 0x43, 0xE6, 0x8E, 0x83, 0x43,
	0xE6, 0x8E, 0xA0, 0x43, 0xE6, 0x8E, 0xA9, 0x43,
	0xE6, 0x8F, 0x84, 0x43, 0xE6, 0x8F, 0x85, 0x43,
	0xE6, 0x8F, 0xA4, 0x43, 0xE6, 0x90, 0x9C, 0x43,
	0xE6, 0x90, 0xA2, 0x43, 0xE6, 0x91, 0x92, 0x43,
	0xE6, 0x91, 0xA9, 0x43, 0xE6, 0x91, 0xB7, 0x43,
	// Bytes c80 - cbf
	0xE6, 0x91, 0xBE, 0x43, 0xE6, 0x92, 0x9A, 0x43,
	0xE6, 0x92, 0x9D, 0x43, 0xE6, 0x93, 0x84, 0x43,
	0xE6, 0x94, 0xAF, 0x43, 0xE6, 0x94, 0xB4, 0x43,
	0xE6, 0x95, 0x8F, 0x43, 0xE6, 0x95, 0x96, 0x43,
	0xE6, 0x95, 0xAC, 0x43, 0xE6, 0x95, 0xB8, 0x43,
	0xE6, 0x96, 0x87, 0x43, 0xE6, 0x96, 0x97, 0x43,
	0xE6, 0x96, 0x99, 0x43, 0xE6, 0x96, 0xA4, 0x43,
	0xE6, 0x96, 0xB0, 0x43, 0xE6, 0x96, 0xB9, 0x43,
	// Bytes cc0 - cff
	0xE6, 0x97, 0x85, 0x43, 0xE6, 0x97, 0xA0, 0x43,
	0xE6, 0x97, 0xA2, 0x43, 0xE6, 0x97, 0xA3, 0x43,
	0xE6, 0x97, 0xA5, 0x43, 0xE6, 0x98, 0x93, 0x43,
	0xE6, 0x98, 0xA0, 0x43, 0xE6, 0x99, 0x89, 0x43,
	0xE6, 0x99, 0xB4, 0x43, 0xE6, 0x9A, 0x88, 0x43,
	0xE6, 0x9A, 0x91, 0x43, 0xE6, 0x9A, 0x9C, 0x43,
	0xE6, 0x9A, 0xB4, 0x43, 0xE6, 0x9B, 0x86, 0x43,
	0xE6, 0x9B, 0xB0, 0x43, 0xE6, 0x9B, 0xB4, 0x43,
	// Bytes d00 - d3f
	0xE6, 0x9B, 0xB8, 0x43, 0xE6, 0x9C, 0x80, 0x43,
	0xE6, 0x9C, 0x88, 0x43, 0xE6, 0x9C, 0x89, 0x43,
	0xE6, 0x9C, 0x97, 0x43, 0xE6, 0x9C, 0x9B, 0x43,
	0xE6, 0x9C, 0xA1, 0x43, 0xE6, 0x9C, 0xA8, 0x43,
	0xE6, 0x9D, 0x8E, 0x43, 0xE6, 0x9D, 0x93, 0x43,
	0xE6, 0x9D, 0x96, 0x43, 0xE6, 0x9D, 0x9E, 0x43,
	0xE6, 0x9D, 0xBB, 0x43, 0xE6, 0x9E, 0x85, 0x43,
	0xE6, 0x9E, 0x97, 0x43, 0xE6, 0x9F, 0xB3, 0x43,
	// Bytes d40 - d7f
	0xE6, 0x9F, 0xBA, 0x43, 0xE6, 0xA0, 0x97, 0x43,
	0xE6, 0xA0, 0x9F, 0x43, 0xE6, 0xA0, 0xAA, 0x43,
	0xE6, 0xA1, 0x92, 0x43, 0xE6, 0xA2, 0x81, 0x43,
	0xE6, 0xA2, 0x85, 0x43, 0xE6, 0xA2, 0x8E, 0x43,
	0xE6, 0xA2, 0xA8, 0x43, 0xE6, 0xA4, 0x94, 0x43,
	0xE6, 0xA5, 0x82, 0x43, 0xE6, 0xA6, 0xA3, 0x43,
	0xE6, 0xA7, 0xAA, 0x43, 0xE6, 0xA8, 0x82, 0x43,
	0xE6, 0xA8, 0x93, 0x43, 0xE6, 0xAA, 0xA8, 0x43,
	// Bytes d80 - dbf
	0xE6, 0xAB, 0x93, 0x43, 0xE6, 0xAB, 0x9B, 0x43,
	0xE6, 0xAC, 0x84, 0x43, 0xE6, 0xAC, 0xA0, 0x43,
	0xE6, 0xAC, 0xA1, 0x43, 0xE6, 0xAD, 0x94, 0x43,
	0xE6, 0xAD, 0xA2, 0x43, 0xE6, 0xAD, 0xA3, 0x43,
	0xE6, 0xAD, 0xB2, 0x43, 0xE6, 0xAD, 0xB7, 0x43,
	0xE6, 0xAD, 0xB9, 0x43, 0xE6, 0xAE, 0x9F, 0x43,
	0xE6, 0xAE, 0xAE, 0x43, 0xE6, 0xAE, 0xB3, 0x43,
	0xE6, 0xAE, 0xBA, 0x43, 0xE6, 0xAE, 0xBB, 0x43,
	// Bytes dc0 - dff
	0xE6, 0xAF, 0x8B, 0x43, 0xE6, 0xAF, 0x8D, 0x43,
	0xE6, 0xAF, 0x94, 0x43, 0xE6, 0xAF, 0x9B, 0x43,
	0xE6, 0xB0, 0x8F, 0x43, 0xE6, 0xB0, 0x94, 0x43,
	0xE6, 0xB0, 0xB4, 0x43, 0xE6, 0xB1, 0x8E, 0x43,
	0xE6, 0xB1, 0xA7, 0x43, 0xE6, 0xB2, 0x88, 0x43,
	0xE6, 0xB2, 0xBF, 0x43, 0xE6, 0xB3, 0x8C, 0x43,
	0xE6, 0xB3, 0x8D, 0x43, 0xE6, 0xB3, 0xA5, 0x43,
	0xE6, 0xB3, 0xA8, 0x43, 0xE6, 0xB4, 0x96, 0x43,
	// Bytes e00 - e3f
	0xE6, 0xB4, 0x9B, 0x43, 0xE6, 0xB4, 0x9E, 0x43,
	0xE6, 0xB4, 0xB4, 0x43, 0xE6, 0xB4, 0xBE, 0x43,
	0xE6, 0xB5, 0x81, 0x43, 0xE6, 0xB5, 0xA9, 0x43,
	0xE6, 0xB5, 0xAA, 0x43, 0xE6, 0xB5, 0xB7, 0x43,
	0xE6, 0xB5, 0xB8, 0x43, 0xE6, 0xB6, 0x85, 0x43,
	0xE6, 0xB7, 0x8B, 0x43, 0xE6, 0xB7, 0x9A, 0x43,
	0xE6, 0xB7, 0xAA, 0x43, 0xE6, 0xB7, 0xB9, 0x43,
	0xE6, 0xB8, 0x9A, 0x43, 0xE6, 0xB8, 0xAF, 0x43,
	// Bytes e40 - e7f
	0xE6, 0xB9, 0xAE, 0x43, 0xE6, 0xBA, 0x80, 0x43,
	0xE6, 0xBA, 0x9C, 0x43, 0xE6, 0xBA, 0xBA, 0x43,
	0xE6, 0xBB, 0x87, 0x43, 0xE6, 0xBB, 0x8B, 0x43,
	0xE6, 0xBB, 0x91, 0x43, 0xE6, 0xBB, 0x9B, 0x43,
	0xE6, 0xBC, 0x8F, 0x43, 0xE6, 0xBC, 0x94, 0x43,
	0xE6, 0xBC, 0xA2, 0x43, 0xE6, 0xBC, 0xA3, 0x43,
	0xE6, 0xBD, 0xAE, 0x43, 0xE6, 0xBF, 0x86, 0x43,
	0xE6, 0xBF, 0xAB, 0x43, 0xE6, 0xBF, 0xBE, 0x43,
	// Bytes e80 - ebf
	0xE7, 0x80, 0x9B, 0x43, 0xE7, 0x80, 0x9E, 0x43,
	0xE7, 0x80, 0xB9, 0x43, 0xE7, 0x81, 0x8A, 0x43,
	0xE7, 0x81, 0xAB, 0x43, 0xE7, 0x81, 0xB0, 0x43,
	0xE7, 0x81, 0xB7, 0x43, 0xE7, 0x81, 0xBD, 0x43,
	0xE7, 0x82, 0x99, 0x43, 0xE7, 0x82, 0xAD, 0x43,
	0xE7, 0x83, 0x88, 0x43, 0xE7, 0x83, 0x99, 0x43,
	0xE7, 0x84, 0xA1, 0x43, 0xE7, 0x85, 0x85, 0x43,
	0xE7, 0x85, 0x89, 0x43, 0xE7, 0x85, 0xAE, 0x43,
	// Bytes ec0 - eff
	0xE7, 0x86, 0x9C, 0x43, 0xE7, 0x87, 0x8E, 0x43,
	0xE7, 0x87, 0x90, 0x43, 0xE7, 0x88, 0x90, 0x43,
	0xE7, 0x88, 0x9B, 0x43, 0xE7, 0x88, 0xA8, 0x43,
	0xE7, 0x88, 0xAA, 0x43, 0xE7, 0x88, 0xAB, 0x43,
	0xE7, 0x88, 0xB5, 0x43, 0xE7, 0x88, 0xB6, 0x43,
	0xE7, 0x88, 0xBB, 0x43, 0xE7, 0x88, 0xBF, 0x43,
	0xE7, 0x89, 0x87, 0x43, 0xE7, 0x89, 0x90, 0x43,
	0xE7, 0x89, 0x99, 0x43, 0xE7, 0x89, 0x9B, 0x43,
	// Bytes f00 - f3f
	0xE7, 0x89, 0xA2, 0x43, 0xE7, 0x89, 0xB9, 0x43,
	0xE7, 0x8A, 0x80, 0x43, 0xE7, 0x8A, 0x95, 0x43,
	0xE7, 0x8A, 0xAC, 0x43, 0xE7, 0x8A, 0xAF, 0x43,
	0xE7, 0x8B, 0x80, 0x43, 0xE7, 0x8B, 0xBC, 0x43,
	0xE7, 0x8C, 0xAA, 0x43, 0xE7, 0x8D, 0xB5, 0x43,
	0xE7, 0x8D, 0xBA, 0x43, 0xE7, 0x8E, 0x84, 0x43,
	0xE7, 0x8E, 0x87, 0x43, 0xE7, 0x8E, 0x89, 0x43,
	0xE7, 0x8E, 0x8B, 0x43, 0xE7, 0x8E, 0xA5, 0x43,
	// Bytes f40 - f7f
	0xE7, 0x8E, 0xB2, 0x43, 0xE7, 0x8F, 0x9E, 0x43,
	0xE7, 0x90, 0x86, 0x43, 0xE7, 0x90, 0x89, 0x43,
	0xE7, 0x90, 0xA2, 0x43, 0xE7, 0x91, 0x87, 0x43,
	0xE7, 0x91, 0x9C, 0x43, 0xE7, 0x91, 0xA9, 0x43,
	0xE7, 0x91, 0xB1, 0x43, 0xE7, 0x92, 0x85, 0x43,
	0xE7, 0x92, 0x89, 0x43, 0xE7, 0x92, 0x98, 0x43,
	0xE7, 0x93, 0x8A, 0x43, 0xE7, 0x93, 0x9C, 0x43,
	0xE7, 0x93, 0xA6, 0x43, 0xE7, 0x94, 0x86, 0x43,
	// Bytes f80 - fbf
	0xE7, 0x94, 0x98, 0x43, 0xE7, 0x94, 0x9F, 0x43,
	0xE7, 0x94, 0xA4, 0x43, 0xE7, 0x94, 0xA8, 0x43,
	0xE7, 0x94, 0xB0, 0x43, 0xE7, 0x94, 0xB2, 0x43,
	0xE7, 0x94, 0xB3, 0x43, 0xE7, 0x94, 0xB7, 0x43,
	0xE7, 0x94, 0xBB, 0x43, 0xE7, 0x94, 0xBE, 0x43,
	0xE7, 0x95, 0x99, 0x43, 0xE7, 0x95, 0xA5, 0x43,
	0xE7, 0x95, 0xB0, 0x43, 0xE7, 0x96, 0x8B, 0x43,
	0xE7, 0x96, 0x92, 0x43, 0xE7, 0x97, 0xA2, 0x43,
	// Bytes fc0 - fff
	0xE7, 0x98, 0x90, 0x43, 0xE7, 0x98, 0x9D, 0x43,
	0xE7, 0x98, 0x9F, 0x43, 0xE7, 0x99, 0x82, 0x43,
	0xE7, 0x99, 0xA9, 0x43, 0xE7, 0x99, 0xB6, 0x43,
	0xE7, 0x99, 0xBD, 0x43, 0xE7, 0x9A, 0xAE, 0x43,
	0xE7, 0x9A, 0xBF, 0x43, 0xE7, 0x9B, 0x8A, 0x43,
	0xE7, 0x9B, 0x9B, 0x43, 0xE7, 0x9B, 0xA3, 0x43,
	0xE7, 0x9B, 0xA7, 0x43, 0xE7, 0x9B, 0xAE, 0x43,
	0xE7, 0x9B, 0xB4, 0x43, 0xE7, 0x9C, 0x81, 0x43,
	// Bytes 1000 - 103f
	0xE7, 0x9C, 0x9E, 0x43, 0xE7, 0x9C, 0x9F, 0x43,
	0xE7, 0x9D, 0x80, 0x43, 0xE7, 0x9D, 0x8A, 0x43,
	0xE7, 0x9E, 0x8B, 0x43, 0xE7, 0x9E, 0xA7, 0x43,
	0xE7, 0x9F, 0x9B, 0x43, 0xE7, 0x9F, 0xA2, 0x43,
	0xE7, 0x9F, 0xB3, 0x43, 0xE7, 0xA1, 0x8E, 0x43,
	0xE7, 0xA1, 0xAB, 0x43, 0xE7, 0xA2, 0x8C, 0x43,
	0xE7, 0xA2, 0x91, 0x43, 0xE7, 0xA3, 0x8A, 0x43,
	0xE7, 0xA3, 0x8C, 0x43, 0xE7, 0xA3, 0xBB, 0x43,
	// Bytes 1040 - 107f
	0xE7, 0xA4, 0xAA, 0x43, 0xE7, 0xA4, 0xBA, 0x43,
	0xE7, 0xA4, 0xBC, 0x43, 0xE7, 0xA4, 0xBE, 0x43,
	0xE7, 0xA5, 0x88, 0x43, 0xE7, 0xA5, 0x89, 0x43,
	0xE7, 0xA5, 0x90, 0x43, 0xE7, 0xA5, 0x96, 0x43,
	0xE7, 0xA5, 0x9D, 0x43, 0xE7, 0xA5, 0x9E, 0x43,
	0xE7, 0xA5, 0xA5, 0x43, 0xE7, 0xA5, 0xBF, 0x43,
	0xE7, 0xA6, 0x81, 0x43, 0xE7, 0xA6, 0x8D, 0x43,
	0xE7, 0xA6, 0x8E, 0x43, 0xE7, 0xA6, 0x8F, 0x43,
	// Bytes 1080 - 10bf
	0xE7, 0xA6, 0xAE, 0x43, 0xE7, 0xA6, 0xB8, 0x43,
	0xE7, 0xA6, 0xBE, 0x43, 0xE7, 0xA7, 0x8A, 0x43,
	0xE7, 0xA7, 0x98, 0x43, 0xE7, 0xA7, 0xAB, 0x43,
	0xE7, 0xA8, 0x9C, 0x43, 0xE7, 0xA9, 0x80, 0x43,
	0xE7, 0xA9, 0x8A, 0x43, 0xE7, 0xA9, 0x8F, 0x43,
	0xE7, 0xA9, 0xB4, 0x43, 0xE7, 0xA9, 0xBA, 0x43,
	0xE7, 0xAA, 0x81, 0x43, 0xE7, 0xAA, 0xB1, 0x43,
	0xE7, 0xAB, 0x8B, 0x43, 0xE7, 0xAB, 0xAE, 0x43,
	// Bytes 10c0 - 10ff
	0xE7, 0xAB, 0xB9, 0x43, 0xE7, 0xAC, 0xA0, 0x43,
	0xE7, 0xAE, 0x8F, 0x43, 0xE7, 0xAF, 0x80, 0x43,
	0xE7, 0xAF, 0x86, 0x43, 0xE7, 0xAF, 0x89, 0x43,
	0xE7, 0xB0, 0xBE, 0x43, 0xE7, 0xB1, 0xA0, 0x43,
	0xE7, 0xB1, 0xB3, 0x43, 0xE7, 0xB1, 0xBB, 0x43,
	0xE7, 0xB2, 0x92, 0x43, 0xE7, 0xB2, 0xBE, 0x43,
	0xE7, 0xB3, 0x92, 0x43, 0xE7, 0xB3, 0x96, 0x43,
	0xE7, 0xB3, 0xA3, 0x43, 0xE7, 0xB3, 0xA7, 0x43,
	// Bytes 1100 - 113f
	0xE7, 0xB3, 0xA8, 0x43, 0xE7, 0xB3, 0xB8, 0x43,
	0xE7, 0xB4, 0x80, 0x43, 0xE7, 0xB4, 0x90, 0x43,
	0xE7, 0xB4, 0xA2, 0x43, 0xE7, 0xB4, 0xAF, 0x43,
	0xE7, 0xB5, 0x82, 0x43, 0xE7, 0xB5, 0x9B, 0x43,
	0xE7, 0xB5, 0xA3, 0x43, 0xE7, 0xB6, 0xA0, 0x43,
	0xE7, 0xB6, 0xBE, 0x43, 0xE7, 0xB7, 0x87, 0x43,
	0xE7, 0xB7, 0xB4, 0x43, 0xE7, 0xB8, 0x82, 0x43,
	0xE7, 0xB8, 0x89, 0x43, 0xE7, 0xB8, 0xB7, 0x43,
	// Bytes 1140 - 117f
	0xE7, 0xB9, 0x81, 0x43, 0xE7, 0xB9, 0x85, 0x43,
	0xE7, 0xBC, 0xB6, 0x43, 0xE7, 0xBC, 0xBE, 0x43,
	0xE7, 0xBD, 0x91, 0x43, 0xE7, 0xBD, 0xB2, 0x43,
	0xE7, 0xBD, 0xB9, 0x43, 0xE7, 0xBD, 0xBA, 0x43,
	0xE7, 0xBE, 0x85, 0x43, 0xE7, 0xBE, 0x8A, 0x43,
	0xE7, 0xBE, 0x95, 0x43, 0xE7, 0xBE, 0x9A, 0x43,
	0xE7, 0xBE, 0xBD, 0x43, 0xE7, 0xBF, 0xBA, 0x43,
	0xE8, 0x80, 0x81, 0x43, 0xE8, 0x80, 0x85, 0x43,
	// Bytes 1180 - 11bf
	0xE8, 0x80, 0x8C, 0x43, 0xE8, 0x80, 0x92, 0x43,
	0xE8, 0x80, 0xB3, 0x43, 0xE8, 0x81, 0x86, 0x43,
	0xE8, 0x81, 0xA0, 0x43, 0xE8, 0x81, 0xAF, 0x43,
	0xE8, 0x81, 0xB0, 0x43, 0xE8, 0x81, 0xBE, 0x43,
	0xE8, 0x81, 0xBF, 0x43, 0xE8, 0x82, 0x89, 0x43,
	0xE8, 0x82, 0x8B, 0x43, 0xE8, 0x82, 0xAD, 0x43,
	0xE8, 0x82, 0xB2, 0x43, 0xE8, 0x84, 0x83, 0x43,
	0xE8, 0x84, 0xBE, 0x43, 0xE8, 0x87, 0x98, 0x43,
	// Bytes 11c0 - 11ff
	0xE8, 0x87, 0xA3, 0x43, 0xE8, 0x87, 0xA8, 0x43,
	0xE8, 0x87, 0xAA, 0x43, 0xE8, 0x87, 0xAD, 0x43,
	0xE8, 0x87, 0xB3, 0x43, 0xE8, 0x87, 0xBC, 0x43,
	0xE8, 0x88, 0x81, 0x43, 0xE8, 0x88, 0x84, 0x43,
	0xE8, 0x88, 0x8C, 0x43, 0xE8, 0x88, 0x98, 0x43,
	0xE8, 0x88, 0x9B, 0x43, 0xE8, 0x88, 0x9F, 0x43,
	0xE8, 0x89, 0xAE, 0x43, 0xE8, 0x89, 0xAF, 0x43,
	0xE8, 0x89, 0xB2, 0x43, 0xE8, 0x89, 0xB8, 0x43,
	// Bytes 1200 - 123f
	0xE8, 0x89, 0xB9, 0x43, 0xE8, 0x8A, 0x8B, 0x43,
	0xE8, 0x8A, 0x91, 0x43, 0xE8, 0x8A, 0x9D, 0x43,
	0xE8, 0x8A, 0xB1, 0x43, 0xE8, 0x8A, 0xB3, 0x43,
	0xE8, 0x8A, 0xBD, 0x43, 0xE8, 0x8B, 0xA5, 0x43,
	0xE8, 0x8B, 0xA6, 0x43, 0xE8, 0x8C, 0x9D, 0x43,
	0xE8, 0x8C, 0xA3, 0x43, 0xE8, 0x8C, 0xB6, 0x43,
	0xE8, 0x8D, 0x92, 0x43, 0xE8, 0x8D, 0x93, 0x43,
	0xE8, 0x8D, 0xA3, 0x43, 0xE8, 0x8E, 0xAD, 0x43,
	// Bytes 1240 - 127f
	0xE8, 0x8E, 0xBD, 0x43, 0xE8, 0x8F, 0x89, 0x43,
	0xE8, 0x8F, 0x8A, 0x43, 0xE8, 0x8F, 0x8C, 0x43,
	0xE8, 0x8F, 0x9C, 0x43, 0xE8, 0x8F, 0xA7, 0x43,
	0xE8, 0x8F, 0xAF, 0x43, 0xE8, 0x8F, 0xB1, 0x43,
	0xE8, 0x90, 0xBD, 0x43, 0xE8, 0x91, 0x89, 0x43,
	0xE8, 0x91, 0x97, 0x43, 0xE8, 0x93, 0xAE, 0x43,
	0xE8, 0x93, 0xB1, 0x43, 0xE8, 0x93, 0xB3, 0x43,
	0xE8, 0x93, 0xBC, 0x43, 0xE8, 0x94, 0x96, 0x43,
	// Bytes 1280 - 12bf
	0xE8, 0x95, 0xA4, 0x43, 0xE8, 0x97, 0x8D, 0x43,
	0xE8, 0x97, 0xBA, 0x43, 0xE8, 0x98, 0x86, 0x43,
	0xE8, 0x98, 0x92, 0x43, 0xE8, 0x98, 0xAD, 0x43,
	0xE8, 0x98, 0xBF, 0x43, 0xE8, 0x99, 0x8D, 0x43,
	0xE8, 0x99, 0x90, 0x43, 0xE8, 0x99, 0x9C, 0x43,
	0xE8, 0x99, 0xA7, 0x43, 0xE8, 0x99, 0xA9, 0x43,
	0xE8, 0x99, 0xAB, 0x43, 0xE8, 0x9A, 0x88, 0x43,
	0xE8, 0x9A, 0xA9, 0x43, 0xE8, 0x9B, 0xA2, 0x43,
	// Bytes 12c0 - 12ff
	0xE8, 0x9C, 0x8E, 0x43, 0xE8, 0x9C, 0xA8, 0x43,
	0xE8, 0x9D, 0xAB, 0x43, 0xE8, 0x9D, 0xB9, 0x43,
	0xE8, 0x9E, 0x86, 0x43, 0xE8, 0x9E, 0xBA, 0x43,
	0xE8, 0x9F, 0xA1, 0x43, 0xE8, 0xA0, 0x81, 0x43,
	0xE8, 0xA0, 0x9F, 0x43, 0xE8, 0xA1, 0x80, 0x43,
	0xE8, 0xA1, 0x8C, 0x43, 0xE8, 0xA1, 0xA0, 0x43,
	0xE8, 0xA1, 0xA3, 0x43, 0xE8, 0xA3, 0x82, 0x43,
	0xE8, 0xA3, 0x8F, 0x43, 0xE8, 0xA3, 0x97, 0x43,
	// Bytes 1300 - 133f
	0xE8, 0xA3, 0x9E, 0x43, 0xE8, 0xA3, 0xA1, 0x43,
	0xE8, 0xA3, 0xB8, 0x43, 0xE8, 0xA3, 0xBA, 0x43,
	0xE8, 0xA4, 0x90, 0x43, 0xE8, 0xA5, 0x81, 0x43,
	0xE8, 0xA5, 0xA4, 0x43, 0xE8, 0xA5, 0xBE, 0x43,
	0xE8, 0xA6, 0x86, 0x43, 0xE8, 0xA6, 0x8B, 0x43,
	0xE8, 0xA6, 0x96, 0x43, 0xE8, 0xA7, 0x92, 0x43,
	0xE8, 0xA7, 0xA3, 0x43, 0xE8, 0xA8, 0x80, 0x43,
	0xE8, 0xAA, 0xA0, 0x43, 0xE8, 0xAA, 0xAA, 0x43,
	// Bytes 1340 - 137f
	0xE8, 0xAA, 0xBF, 0x43, 0xE8, 0xAB, 0x8B, 0x43,
	0xE8, 0xAB, 0x92, 0x43, 0xE8, 0xAB, 0x96, 0x43,
	0xE8, 0xAB, 0xAD, 0x43, 0xE8, 0xAB, 0xB8, 0x43,
	0xE8, 0xAB, 0xBE, 0x43, 0xE8, 0xAC, 0x81, 0x43,
	0xE8, 0xAC, 0xB9, 0x43, 0xE8, 0xAD, 0x98, 0x43,
	0xE8, 0xAE, 0x80, 0x43, 0xE8, 0xAE, 0x8A, 0x43,
	0xE8, 0xB0, 0xB7, 0x43, 0xE8, 0xB1, 0x86, 0x43,
	0xE8, 0xB1, 0x88, 0x43, 0xE8, 0xB1, 0x95, 0x43,
	// Bytes 1380 - 13bf
	0xE8, 0xB1, 0xB8, 0x43, 0xE8, 0xB2, 0x9D, 0x43,
	0xE8, 0xB2, 0xA1, 0x43, 0xE8, 0xB2, 0xA9, 0x43,
	0xE8, 0xB2, 0xAB, 0x43, 0xE8, 0xB3, 0x81, 0x43,
	0xE8, 0xB3, 0x82, 0x43, 0xE8, 0xB3, 0x87, 0x43,
	0xE8, 0xB3, 0x88, 0x43, 0xE8, 0xB3, 0x93, 0x43,
	0xE8, 0xB4, 0x88, 0x43, 0xE8, 0xB4, 0x9B, 0x43,
	0xE8, 0xB5, 0xA4, 0x43, 0xE8, 0xB5, 0xB0, 0x43,
	0xE8, 0xB5, 0xB7, 0x43, 0xE8, 0xB6, 0xB3, 0x43,
	// Bytes 13c0 - 13ff
	0xE8, 0xB6, 0xBC, 0x43, 0xE8, 0xB7, 0x8B, 0x43,
	0xE8, 0xB7, 0xAF, 0x43, 0xE8, 0xB7, 0xB0, 0x43,
	0xE8, 0xBA, 0xAB, 0x43, 0xE8, 0xBB, 0x8A, 0x43,
	0xE8, 0xBB, 0x94, 0x43, 0xE8, 0xBC, 0xA6, 0x43,
	0xE8, 0xBC, 0xAA, 0x43, 0xE8, 0xBC, 0xB8, 0x43,
	0xE8, 0xBC, 0xBB, 0x43, 0xE8, 0xBD, 0xA2, 0x43,
	0xE8, 0xBE, 0x9B, 0x43, 0xE8, 0xBE, 0x9E, 0x43,
	0xE8, 0xBE, 0xB0, 0x43, 0xE8, 0xBE, 0xB5, 0x43,
	// Bytes 1400 - 143f
	0xE8, 0xBE, 0xB6, 0x43, 0xE9, 0x80, 0xA3, 0x43,
	0xE9, 0x80, 0xB8, 0x43, 0xE9, 0x81, 0x8A, 0x43,
	0xE9, 0x81, 0xA9, 0x43, 0xE9, 0x81, 0xB2, 0x43,
	0xE9, 0x81, 0xBC, 0x43, 0xE9, 0x82, 0x8F, 0x43,
	0xE9, 0x82, 0x91, 0x43, 0xE9, 0x82, 0x94, 0x43,
	0xE9, 0x83, 0x8E, 0x43, 0xE9, 0x83, 0x9E, 0x43,
	0xE9, 0x83, 0xB1, 0x43, 0xE9, 0x83, 0xBD, 0x43,
	0xE9, 0x84, 0x91, 0x43, 0xE9, 0x84, 0x9B, 0x43,
	// Bytes 1440 - 147f
	0xE9, 0x85, 0x89, 0x43, 0xE9, 0x85, 0x8D, 0x43,
	0xE9, 0x85, 0xAA, 0x43, 0xE9, 0x86, 0x99, 0x43,
	0xE9, 0x86, 0xB4, 0x43, 0xE9, 0x87, 0x86, 0x43,
	0xE9, 0x87, 0x8C, 0x43, 0xE9, 0x87, 0x8F, 0x43,
	0xE9, 0x87, 0x91, 0x43, 0xE9, 0x88, 0xB4, 0x43,
	0xE9, 0x88, 0xB8, 0x43, 0xE9, 0x89, 0xB6, 0x43,
	0xE9, 0x89, 0xBC, 0x43, 0xE9, 0x8B, 0x97, 0x43,
	0xE9, 0x8B, 0x98, 0x43, 0xE9, 0x8C, 0x84, 0x43,
	// Bytes 1480 - 14bf
	0xE9, 0x8D, 0x8A, 0x43, 0xE9, 0x8F, 0xB9, 0x43,
	0xE9, 0x90, 0x95, 0x43, 0xE9, 0x95, 0xB7, 0x43,
	0xE9, 0x96, 0x80, 0x43, 0xE9, 0x96, 0x8B, 0x43,
	0xE9, 0x96, 0xAD, 0x43, 0xE9, 0x96, 0xB7, 0x43,
	0xE9, 0x98, 0x9C, 0x43, 0xE9, 0x98, 0xAE, 0x43,
	0xE9, 0x99, 0x8B, 0x43, 0xE9, 0x99, 0x8D, 0x43,
	0xE9, 0x99, 0xB5, 0x43, 0xE9, 0x99, 0xB8, 0x43,
	0xE9, 0x99, 0xBC, 0x43, 0xE9, 0x9A, 0x86, 0x43,
	// Bytes 14c0 - 14ff
	0xE9, 0x9A, 0xA3, 0x43, 0xE9, 0x9A, 0xB6, 0x43,
	0xE9, 0x9A, 0xB7, 0x43, 0xE9, 0x9A, 0xB8, 0x43,
	0xE9, 0x9A, 0xB9, 0x43, 0xE9, 0x9B, 0x83, 0x43,
	0xE9, 0x9B, 0xA2, 0x43, 0xE9, 0x9B, 0xA3, 0x43,
	0xE9, 0x9B, 0xA8, 0x43, 0xE9, 0x9B, 0xB6, 0x43,
	0xE9, 0x9B, 0xB7, 0x43, 0xE9, 0x9C, 0xA3, 0x43,
	0xE9, 0x9C, 0xB2, 0x43, 0xE9, 0x9D, 0x88, 0x43,
	0xE9, 0x9D, 0x91, 0x43, 0xE9, 0x9D, 0x96, 0x43,
	// Bytes 1500 - 153f
	0xE9, 0x9D, 0x9E, 0x43, 0xE9, 0x9D, 0xA2, 0x43,
	0xE9, 0x9D, 0xA9, 0x43, 0xE9, 0x9F, 0x8B, 0x43,
	0xE9, 0x9F, 0x9B, 0x43, 0xE9, 0x9F, 0xA0, 0x43,
	0xE9, 0x9F, 0xAD, 0x43, 0xE9, 0x9F, 0xB3, 0x43,
	0xE9, 0x9F, 0xBF, 0x43, 0xE9, 0xA0, 0x81, 0x43,
	0xE9, 0xA0, 0x85, 0x43, 0xE9, 0xA0, 0x8B, 0x43,
	0xE9, 0xA0, 0x98, 0x43, 0xE9, 0xA0, 0xA9, 0x43,
	0xE9, 0xA0, 0xBB, 0x43, 0xE9, 0xA1, 0x9E, 0x43,
	// Bytes 1540 - 157f
	0xE9, 0xA2, 0xA8, 0x43, 0xE9, 0xA3, 0x9B, 0x43,
	0xE9, 0xA3, 0x9F, 0x43, 0xE9, 0xA3, 0xA2, 0x43,
	0xE9, 0xA3, 0xAF, 0x43, 0xE9, 0xA3, 0xBC, 0x43,
	0xE9, 0xA4, 0xA8, 0x43, 0xE9, 0xA4, 0xA9, 0x43,
	0xE9, 0xA6, 0x96, 0x43, 0xE9, 0xA6, 0x99, 0x43,
	0xE9, 0xA6, 0xA7, 0x43, 0xE9, 0xA6, 0xAC, 0x43,
	0xE9, 0xA7, 0x82, 0x43, 0xE9, 0xA7, 0xB1, 0x43,
	0xE9, 0xA7, 0xBE, 0x43, 0xE9, 0xA9, 0xAA, 0x43,
	// Bytes 1580 - 15bf
	0xE9, 0xAA, 0xA8, 0x43, 0xE9, 0xAB, 0x98, 0x43,
	0xE9, 0xAB, 0x9F, 0x43, 0xE9, 0xAC, 0x92, 0x43,
	0xE9, 0xAC, 0xA5, 0x43, 0xE9, 0xAC, 0xAF, 0x43,
	0xE9, 0xAC, 0xB2, 0x43, 0xE9, 0xAC, 0xBC, 0x43,
	0xE9, 0xAD, 0x9A, 0x43, 0xE9, 0xAD, 0xAF, 0x43,
	0xE9, 0xB1, 0x80, 0x43, 0xE9, 0xB1, 0x97, 0x43,
	0xE9, 0xB3, 0xA5, 0x43, 0xE9, 0xB3, 0xBD, 0x43,
	0xE9, 0xB5, 0xA7, 0x43, 0xE9, 0xB6, 0xB4, 0x43,
	// Bytes 15c0 - 15ff
	0xE9, 0xB7, 0xBA, 0x43, 0xE9, 0xB8, 0x9E, 0x43,
	0xE9, 0xB9, 0xB5, 0x43, 0xE9, 0xB9, 0xBF, 0x43,
	0xE9, 0xBA, 0x97, 0x43, 0xE9, 0xBA, 0x9F, 0x43,
	0xE9, 0xBA, 0xA5, 0x43, 0xE9, 0xBA, 0xBB, 0x43,
	0xE9, 0xBB, 0x83, 0x43, 0xE9, 0xBB, 0x8D, 0x43,
	0xE9, 0xBB, 0x8E, 0x43, 0xE9, 0xBB, 0x91, 0x43,
	0xE9, 0xBB, 0xB9, 0x43, 0xE9, 0xBB, 0xBD, 0x43,
	0xE9, 0xBB, 0xBE, 0x43, 0xE9, 0xBC, 0x85, 0x43,
	// Bytes 1600 - 163f
	0xE9, 0xBC, 0x8E, 0x43, 0xE9, 0xBC, 0x8F, 0x43,
	0xE9, 0xBC, 0x93, 0x43, 0xE9, 0xBC, 0x96, 0x43,
	0xE9, 0xBC, 0xA0, 0x43, 0xE9, 0xBC, 0xBB, 0x43,
	0xE9, 0xBD, 0x83, 0x43, 0xE9, 0xBD, 0x8A, 0x43,
	0xE9, 0xBD, 0x92, 0x43, 0xE9, 0xBE, 0x8D, 0x43,
	0xE9, 0xBE, 0x8E, 0x43, 0xE9, 0xBE, 0x9C, 0x43,
	0xE9, 0xBE, 0x9F, 0x43, 0xE9, 0xBE, 0xA0, 0x43,
	0xEA, 0x9C, 0xA7, 0x43, 0xEA, 0x9D, 0xAF, 0x43,
	// Bytes 1640 - 167f
	0xEA, 0xAC, 0xB7, 0x43, 0xEA, 0xAD, 0x92, 0x44,
	0xF0, 0xA0, 0x84, 0xA2, 0x44, 0xF0, 0xA0, 0x94,
	0x9C, 0x44, 0xF0, 0xA0, 0x94, 0xA5, 0x44, 0xF0,
	0xA0, 0x95, 0x8B, 0x44, 0xF0, 0xA0, 0x98, 0xBA,
	0x44, 0xF0, 0xA0, 0xA0, 0x84, 0x44, 0xF0, 0xA0,
	0xA3, 0x9E, 0x44, 0xF0, 0xA0, 0xA8, 0xAC, 0x44,
	0xF0, 0xA0, 0xAD, 0xA3, 0x44, 0xF0, 0xA1, 0x93,
	0xA4, 0x44, 0xF0, 0xA1, 0x9A, 0xA8, 0x44, 0xF0,
	// Bytes 1680 - 16bf
	0xA1, 0x9B, 0xAA, 0x44, 0xF0, 0xA1, 0xA7, 0x88,
	0x44, 0xF0, 0xA1, 0xAC, 0x98, 0x44, 0xF0, 0xA1,
	0xB4, 0x8B, 0x44, 0xF0, 0xA1, 0xB7, 0xA4, 0x44,
	0xF0, 0xA1, 0xB7, 0xA6, 0x44, 0xF0, 0xA2, 0x86,
	0x83, 0x44, 0xF0, 0xA2, 0x86, 0x9F, 0x44, 0xF0,
	0xA2, 0x8C, 0xB1, 0x44, 0xF0, 0xA2, 0x9B, 0x94,
	0x44, 0xF0, 0xA2, 0xA1, 0x84, 0x44, 0xF0, 0xA2,
	0xA1, 0x8A, 0x44, 0xF0, 0xA2, 0xAC, 0x8C, 0x44,
	// Bytes 16c0 - 16ff
	0xF0, 0xA2, 0xAF, 0xB1, 0x44, 0xF0, 0xA3, 0x80,
	0x8A, 0x44, 0xF0, 0xA3, 0x8A, 0xB8, 0x44, 0xF0,
	0xA3, 0x8D, 0x9F, 0x44, 0xF0, 0xA3, 0x8E, 0x93,
	0x44, 0xF0, 0xA3, 0x8E, 0x9C, 0x44, 0xF0, 0xA3,
	0x8F, 0x83, 0x44, 0xF0, 0xA3, 0x8F, 0x95, 0x44,
	0xF0, 0xA3, 0x91, 0xAD, 0x44, 0xF0, 0xA3, 0x9A,
	0xA3, 0x44, 0xF0, 0xA3, 0xA2, 0xA7, 0x44, 0xF0,
	0xA3, 0xAA, 0x8D, 0x44, 0xF0, 0xA3, 0xAB, 0xBA,
	// Bytes 1700 - 173f
	0x44, 0xF0, 0xA3, 0xB2, 0xBC, 0x44, 0xF0, 0xA3,
	0xB4, 0x9E, 0x44, 0xF0, 0xA3, 0xBB, 0x91, 0x44,
	0xF0, 0xA3, 0xBD, 0x9E, 0x44, 0xF0, 0xA3, 0xBE,
	0x8E, 0x44, 0xF0, 0xA4, 0x89, 0xA3, 0x44, 0xF0,
	0xA4, 0x8B, 0xAE, 0x44, 0xF0, 0xA4, 0x8E, 0xAB,
	0x44, 0xF0, 0xA4, 0x98, 0x88, 0x44, 0xF0, 0xA4,
	0x9C, 0xB5, 0x44, 0xF0, 0xA4, 0xA0, 0x94, 0x44,
	0xF0, 0xA4, 0xB0, 0xB6, 0x44, 0xF0, 0xA4, 0xB2,
	// Bytes 1740 - 177f
	0x92, 0x44, 0xF0, 0xA4, 0xBE, 0xA1, 0x44, 0xF0,
	0xA4, 0xBE, 0xB8, 0x44, 0xF0, 0xA5, 0x81, 0x84,
	0x44, 0xF0, 0xA5, 0x83, 0xB2, 0x44, 0xF0, 0xA5,
	0x83, 0xB3, 0x44, 0xF0, 0xA5, 0x84, 0x99, 0x44,
	0xF0, 0xA5, 0x84, 0xB3, 0x44, 0xF0, 0xA5, 0x89,
	0x89, 0x44, 0xF0, 0xA5, 0x90, 0x9D, 0x44, 0xF0,
	0xA5, 0x98, 0xA6, 0x44, 0xF0, 0xA5, 0x9A, 0x9A,
	0x44, 0xF0, 0xA5, 0x9B, 0x85, 0x44, 0xF0, 0xA5,
	// Bytes 1780 - 17bf
	0xA5, 0xBC, 0x44, 0xF0, 0xA5, 0xAA, 0xA7, 0x44,
	0xF0, 0xA5, 0xAE, 0xAB, 0x44, 0xF0, 0xA5, 0xB2,
	0x80, 0x44, 0xF0, 0xA5, 0xB3, 0x90, 0x44, 0xF0,
	0xA5, 0xBE, 0x86, 0x44, 0xF0, 0xA6, 0x87, 0x9A,
	0x44, 0xF0, 0xA6, 0x88, 0xA8, 0x44, 0xF0, 0xA6,
	0x89, 0x87, 0x44, 0xF0, 0xA6, 0x8B, 0x99, 0x44,
	0xF0, 0xA6, 0x8C, 0xBE, 0x44, 0xF0, 0xA6, 0x93,
	0x9A, 0x44, 0xF0, 0xA6, 0x94, 0xA3, 0x44, 0xF0,
	// Bytes 17c0 - 17ff
	0xA6, 0x96, 0xA8, 0x44, 0xF0, 0xA6, 0x9E, 0xA7,
	0x44, 0xF0, 0xA6, 0x9E, 0xB5, 0x44, 0xF0, 0xA6,
	0xAC, 0xBC, 0x44, 0xF0, 0xA6, 0xB0, 0xB6, 0x44,
	0xF0, 0xA6, 0xB3, 0x95, 0x44, 0xF0, 0xA6, 0xB5,
	0xAB, 0x44, 0xF0, 0xA6, 0xBC, 0xAC, 0x44, 0xF0,
	0xA6, 0xBE, 0xB1, 0x44, 0xF0, 0xA7, 0x83, 0x92,
	0x44, 0xF0, 0xA7, 0x8F, 0x8A, 0x44, 0xF0, 0xA7,
	0x99, 0xA7, 0x44, 0xF0, 0xA7, 0xA2, 0xAE, 0x44,
	// Bytes 1800 - 183f
	0xF0, 0xA7, 0xA5, 0xA6, 0x44, 0xF0, 0xA7, 0xB2,
	0xA8, 0x44, 0xF0, 0xA7, 0xBB, 0x93, 0x44, 0xF0,
	0xA7, 0xBC, 0xAF, 0x44, 0xF0, 0xA8, 0x97, 0x92,
	0x44, 0xF0, 0xA8, 0x97, 0xAD, 0x44, 0xF0, 0xA8,
	0x9C, 0xAE, 0x44, 0xF0, 0xA8, 0xAF, 0xBA, 0x44,
	0xF0, 0xA8, 0xB5, 0xB7, 0x44, 0xF0, 0xA9, 0x85,
	0x85, 0x44, 0xF0, 0xA9, 0x87, 0x9F, 0x44, 0xF0,
	0xA9, 0x88, 0x9A, 0x44, 0xF0, 0xA9, 0x90, 0x8A,
	// Bytes 1840 - 187f
	0x44, 0xF0, 0xA9, 0x92, 0x96, 0x44, 0xF0, 0xA9,
	0x96, 0xB6, 0x44, 0xF0, 0xA9, 0xAC, 0xB0, 0x44,
	0xF0, 0xAA, 0x83, 0x8E, 0x44, 0xF0, 0xAA, 0x84,
	0x85, 0x44, 0xF0, 0xAA, 0x88, 0x8E, 0x44, 0xF0,
	0xAA, 0x8A, 0x91, 0x44, 0xF0, 0xAA, 0x8E, 0x92,
	0x44, 0xF0, 0xAA, 0x98, 0x80, 0x42, 0x21, 0x21,
	0x42, 0x21, 0x3F, 0x42, 0x2E, 0x2E, 0x42, 0x30,
	0x2C, 0x42, 0x30, 0x2E, 0x42, 0x31, 0x2C, 0x42,
	// Bytes 1880 - 18bf
	0x31, 0x2E, 0x42, 0x31, 0x30, 0x42, 0x31, 0x31,
	0x42, 0x31, 0x32, 0x42, 0x31, 0x33, 0x42, 0x31,
	0x34, 0x42, 0x31, 0x35, 0x42, 0x31, 0x36, 0x42,
	0x31, 0x37, 0x42, 0x31, 0x38, 0x42, 0x31, 0x39,
	0x42, 0x32, 0x2C, 0x42, 0x32, 0x2E, 0x42, 0x32,
	0x30, 0x42, 0x32, 0x31, 0x42, 0x32, 0x32, 0x42,
	0x32, 0x33, 0x42, 0x32, 0x34, 0x42, 0x32, 0x35,
	0x42, 0x32, 0x36, 0x42, 0x32, 0x37, 0x42, 0x32,
	// Bytes 18c0 - 18ff
	0x38, 0x42, 0x32, 0x39, 0x42, 0x33, 0x2C, 0x42,
	0x33, 0x2E, 0x42, 0x33, 0x30, 0x42, 0x33, 0x31,
	0x42, 0x33, 0x32, 0x42, 0x33, 0x33, 0x42, 0x33,
	0x34, 0x42, 0x33, 0x35, 0x42, 0x33, 0x36, 0x42,
	0x33, 0x37, 0x42, 0x33, 0x38, 0x42, 0x33, 0x39,
	0x42, 0x34, 0x2C, 0x42, 0x34, 0x2E, 0x42, 0x34,
	0x30, 0x42, 0x34, 0x31, 0x42, 0x34, 0x32, 0x42,
	0x34, 0x33, 0x42, 0x34, 0x34, 0x42, 0x34, 0x35,
	// Bytes 1900 - 193f
	0x42, 0x34, 0x36, 0x42, 0x34, 0x37, 0x42, 0x34,
	0x38, 0x42, 0x34, 0x39, 0x42, 0x35, 0x2C, 0x42,
	0x35, 0x2E, 0x42, 0x35, 0x30, 0x42, 0x36, 0x2C,
	0x42, 0x36, 0x2E, 0x42, 0x37, 0x2C, 0x42, 0x37,
	0x2E, 0x42, 0x38, 0x2C, 0x42, 0x38, 0x2E, 0x42,
	0x39, 0x2C, 0x42, 0x39, 0x2E, 0x42, 0x3D, 0x3D,
	0x42, 0x3F, 0x21, 0x42, 0x3F, 0x3F, 0x42, 0x41,
	0x55, 0x42, 0x42, 0x71, 0x42, 0x43, 0x44, 0x42,
	// Bytes 1940 - 197f
	0x44, 0x4A, 0x42, 0x44, 0x5A, 0x42, 0x44, 0x7A,
	0x42, 0x47, 0x42, 0x42, 0x47, 0x79, 0x42, 0x48,
	0x50, 0x42, 0x48, 0x56, 0x42, 0x48, 0x67, 0x42,
	0x48, 0x7A, 0x42, 0x49, 0x49, 0x42, 0x49, 0x4A,
	0x42, 0x49, 0x55, 0x42, 0x49, 0x56, 0x42, 0x49,
	0x58, 0x42, 0x4B, 0x42, 0x42, 0x4B, 0x4B, 0x42,
	0x4B, 0x4D, 0x42, 0x4C, 0x4A, 0x42, 0x4C, 0x6A,
	0x42, 0x4D, 0x42, 0x42, 0x4D, 0x43, 0x42, 0x4D,
	// Bytes 1980 - 19bf
	0x44, 0x42, 0x4D, 0x56, 0x42, 0x4D, 0x57, 0x42,
	0x4E, 0x4A, 0x42, 0x4E, 0x6A, 0x42, 0x4E, 0x6F,
	0x42, 0x50, 0x48, 0x42, 0x50, 0x52, 0x42, 0x50,
	0x61, 0x42, 0x52, 0x73, 0x42, 0x53, 0x44, 0x42,
	0x53, 0x4D, 0x42, 0x53, 0x53, 0x42, 0x53, 0x76,
	0x42, 0x54, 0x4D, 0x42, 0x56, 0x49, 0x42, 0x57,
	0x43, 0x42, 0x57, 0x5A, 0x42, 0x57, 0x62, 0x42,
	0x58, 0x49, 0x42, 0x63, 0x63, 0x42, 0x63, 0x64,
	// Bytes 19c0 - 19ff
	0x42, 0x63, 0x6D, 0x42, 0x64, 0x42, 0x42, 0x64,
	0x61, 0x42, 0x64, 0x6C, 0x42, 0x64, 0x6D, 0x42,
	0x64, 0x7A, 0x42, 0x65, 0x56, 0x42, 0x66, 0x66,
	0x42, 0x66, 0x69, 0x42, 0x66, 0x6C, 0x42, 0x66,
	0x6D, 0x42, 0x68, 0x61, 0x42, 0x69, 0x69, 0x42,
	0x69, 0x6A, 0x42, 0x69, 0x6E, 0x42, 0x69, 0x76,
	0x42, 0x69, 0x78, 0x42, 0x6B, 0x41, 0x42, 0x6B,
	0x56, 0x42, 0x6B, 0x57, 0x42, 0x6B, 0x67, 0x42,
	// Bytes 1a00 - 1a3f
	0x6B, 0x6C, 0x42, 0x6B, 0x6D, 0x42, 0x6B, 0x74,
	0x42, 0x6C, 0x6A, 0x42, 0x6C, 0x6D, 0x42, 0x6C,
	0x6E, 0x42, 0x6C, 0x78, 0x42, 0x6D, 0x32, 0x42,
	0x6D, 0x33, 0x42, 0x6D, 0x41, 0x42, 0x6D, 0x56,
	0x42, 0x6D, 0x57, 0x42, 0x6D, 0x62, 0x42, 0x6D,
	0x67, 0x42, 0x6D, 0x6C, 0x42, 0x6D, 0x6D, 0x42,
	0x6D, 0x73, 0x42, 0x6E, 0x41, 0x42, 0x6E, 0x46,
	0x42, 0x6E, 0x56, 0x42, 0x6E, 0x57, 0x42, 0x6E,
	// Bytes 1a40 - 1a7f
	0x6A, 0x42, 0x6E, 0x6D, 0x42, 0x6E, 0x73, 0x42,
	0x6F, 0x56, 0x42, 0x70, 0x41, 0x42, 0x70, 0x46,
	0x42, 0x70, 0x56, 0x42, 0x70, 0x57, 0x42, 0x70,
	0x63, 0x42, 0x70, 0x73, 0x42, 0x73, 0x72, 0x42,
	0x73, 0x74, 0x42, 0x76, 0x69, 0x42, 0x78, 0x69,
	0x43, 0x28, 0x31, 0x29, 0x43, 0x28, 0x32, 0x29,
	0x43, 0x28, 0x33, 0x29, 0x43, 0x28, 0x34, 0x29,
	0x43, 0x28, 0x35, 0x29, 0x43, 0x28, 0x36, 0x29,
	// Bytes 1a80 - 1abf
	0x43, 0x28, 0x37, 0x29, 0x43, 0x28, 0x38, 0x29,
	0x43, 0x28, 0x39, 0x29, 0x43, 0x28, 0x41, 0x29,
	0x43, 0x28, 0x42, 0x29, 0x43, 0x28, 0x43, 0x29,
	0x43, 0x28, 0x44, 0x29, 0x43, 0x28, 0x45, 0x29,
	0x43, 0x28, 0x46, 0x29, 0x43, 0x28, 0x47, 0x29,
	0x43, 0x28, 0x48, 0x29, 0x43, 0x28, 0x49, 0x29,
	0x43, 0x28, 0x4A, 0x29, 0x43, 0x28, 0x4B, 0x29,
	0x43, 0x28, 0x4C, 0x29, 0x43, 0x28, 0x4D, 0x29,
	// Bytes 1ac0 - 1aff
	0x43, 0x28, 0x4E, 0x29, 0x43, 0x28, 0x4F, 0x29,
	0x43, 0x28, 0x50, 0x29, 0x43, 0x28, 0x51, 0x29,
	0x43, 0x28, 0x52, 0x29, 0x43, 0x28, 0x53, 0x29,
	0x43, 0x28, 0x54, 0x29, 0x43, 0x28, 0x55, 0x29,
	0x43, 0x28, 0x56, 0x29, 0x43, 0x28, 0x57, 0x29,
	0x43, 0x28, 0x58, 0x29, 0x43, 0x28, 0x59, 0x29,
	0x43, 0x28, 0x5A, 0x29, 0x43, 0x28, 0x61, 0x29,
	0x43, 0x28, 0x62, 0x29, 0x43, 0x28, 0x63, 0x29,
	// Bytes 1b00 - 1b3f
	0x43, 0x28, 0x64, 0x29, 0x43, 0x28, 0x65, 0x29,
	0x43, 0x28, 0x66, 0x29, 0x43, 0x28, 0x67, 0x29,
	0x43, 0x28, 0x68, 0x29, 0x43, 0x28, 0x69, 0x29,
	0x43, 0x28, 0x6A, 0x29, 0x43, 0x28, 0x6B, 0x29,
	0x43, 0x28, 0x6C, 0x29, 0x43, 0x28, 0x6D, 0x29,
	0x43, 0x28, 0x6E, 0x29, 0x43, 0x28, 0x6F, 0x29,
	0x43, 0x28, 0x70, 0x29, 0x43, 0x28, 0x71, 0x29,
	0x43, 0x28, 0x72, 0x29, 0x43, 0x28, 0x73, 0x29,
	// Bytes 1b40 - 1b7f
	0x43, 0x28, 0x74, 0x29, 0x43, 0x28, 0x75, 0x29,
	0x43, 0x28, 0x76, 0x29, 0x43, 0x28, 0x77, 0x29,
	0x43, 0x28, 0x78, 0x29, 0x43, 0x28, 0x79, 0x29,
	0x43, 0x28, 0x7A, 0x29, 0x43, 0x2E, 0x2E, 0x2E,
	0x43, 0x31, 0x30, 0x2E, 0x43, 0x31, 0x31, 0x2E,
	0x43, 0x31, 0x32, 0x2E, 0x43, 0x31, 0x33, 0x2E,
	0x43, 0x31, 0x34, 0x2E, 0x43, 0x31, 0x35, 0x2E,
	0x43, 0x31, 0x36, 0x2E, 0x43, 0x31, 0x37, 0x2E,
	// Bytes 1b80 - 1bbf
	0x43, 0x31, 0x38, 0x2E, 0x43, 0x31, 0x39, 0x2E,
	0x43, 0x32, 0x30, 0x2E, 0x43, 0x3A, 0x3A, 0x3D,
	0x43, 0x3D, 0x3D, 0x3D, 0x43, 0x43, 0x6F, 0x2E,
	0x43, 0x46, 0x41, 0x58, 0x43, 0x47, 0x48, 0x7A,
	0x43, 0x47, 0x50, 0x61, 0x43, 0x49, 0x49, 0x49,
	0x43, 0x4C, 0x54, 0x44, 0x43, 0x4C, 0xC2, 0xB7,
	0x43, 0x4D, 0x48, 0x7A, 0x43, 0x4D, 0x50, 0x61,
	0x43, 0x4D, 0xCE, 0xA9, 0x43, 0x50, 0x50, 0x4D,
	// Bytes 1bc0 - 1bff
	0x43, 0x50, 0x50, 0x56, 0x43, 0x50, 0x54, 0x45,
	0x43, 0x54, 0x45, 0x4C, 0x43, 0x54, 0x48, 0x7A,
	0x43, 0x56, 0x49, 0x49, 0x43, 0x58, 0x49, 0x49,
	0x43, 0x61, 0x2F, 0x63, 0x43, 0x61, 0x2F, 0x73,
	0x43, 0x61, 0xCA, 0xBE, 0x43, 0x62, 0x61, 0x72,
	0x43, 0x63, 0x2F, 0x6F, 0x43, 0x63, 0x2F, 0x75,
	0x43, 0x63, 0x61, 0x6C, 0x43, 0x63, 0x6D, 0x32,
	0x43, 0x63, 0x6D, 0x33, 0x43, 0x64, 0x6D, 0x32,
	// Bytes 1c00 - 1c3f
	0x43, 0x64, 0x6D, 0x33, 0x43, 0x65, 0x72, 0x67,
	0x43, 0x66, 0x66, 0x69, 0x43, 0x66, 0x66, 0x6C,
	0x43, 0x67, 0x61, 0x6C, 0x43, 0x68, 0x50, 0x61,
	0x43, 0x69, 0x69, 0x69, 0x43, 0x6B, 0x48, 0x7A,
	0x43, 0x6B, 0x50, 0x61, 0x43, 0x6B, 0x6D, 0x32,
	0x43, 0x6B, 0x6D, 0x33, 0x43, 0x6B, 0xCE, 0xA9,
	0x43, 0x6C, 0x6F, 0x67, 0x43, 0x6C, 0xC2, 0xB7,
	0x43, 0x6D, 0x69, 0x6C, 0x43, 0x6D, 0x6D, 0x32,
	// Bytes 1c40 - 1c7f
	0x43, 0x6D, 0x6D, 0x33, 0x43, 0x6D, 0x6F, 0x6C,
	0x43, 0x72, 0x61, 0x64, 0x43, 0x76, 0x69, 0x69,
	0x43, 0x78, 0x69, 0x69, 0x43, 0xC2, 0xB0, 0x43,
	0x43, 0xC2, 0xB0, 0x46, 0x43, 0xCA, 0xBC, 0x6E,
	0x43, 0xCE, 0xBC, 0x41, 0x43, 0xCE, 0xBC, 0x46,
	0x43, 0xCE, 0xBC, 0x56, 0x43, 0xCE, 0xBC, 0x57,
	0x43, 0xCE, 0xBC, 0x67, 0x43, 0xCE, 0xBC, 0x6C,
	0x43, 0xCE, 0xBC, 0x6D, 0x43, 0xCE, 0xBC, 0x73,
	// Bytes 1c80 - 1cbf
	0x44, 0x28, 0x31, 0x30, 0x29, 0x44, 0x28, 0x31,
	0x31, 0x29, 0x44, 0x28, 0x31, 0x32, 0x29, 0x44,
	0x28, 0x31, 0x33, 0x29, 0x44, 0x28, 0x31, 0x34,
	0x29, 0x44, 0x28, 0x31, 0x35, 0x29, 0x44, 0x28,
	0x31, 0x36, 0x29, 0x44, 0x28, 0x31, 0x37, 0x29,
	0x44, 0x28, 0x31, 0x38, 0x29, 0x44, 0x28, 0x31,
	0x39, 0x29, 0x44, 0x28, 0x32, 0x30, 0x29, 0x44,
	0x30, 0xE7, 0x82, 0xB9, 0x44, 0x31, 0xE2, 0x81,
	// Bytes 1cc0 - 1cff
	0x84, 0x44, 0x31, 0xE6, 0x97, 0xA5, 0x44, 0x31,
	0xE6, 0x9C, 0x88, 0x44, 0x31, 0xE7, 0x82, 0xB9,
	0x44, 0x32, 0xE6, 0x97, 0xA5, 0x44, 0x32, 0xE6,
	0x9C, 0x88, 0x44, 0x32, 0xE7, 0x82, 0xB9, 0x44,
	0x33, 0xE6, 0x97, 0xA5, 0x44, 0x33, 0xE6, 0x9C,
	0x88, 0x44, 0x33, 0xE7, 0x82, 0xB9, 0x44, 0x34,
	0xE6, 0x97, 0xA5, 0x44, 0x34, 0xE6, 0x9C, 0x88,
	0x44, 0x34, 0xE7, 0x82, 0xB9, 0x44, 0x35, 0xE6,
	// Bytes 1d00 - 1d3f
	0x97, 0xA5, 0x44, 0x35, 0xE6, 0x9C, 0x88, 0x44,
	0x35, 0xE7, 0x82, 0xB9, 0x44, 0x36, 0xE6, 0x97,
	0xA5, 0x44, 0x36, 0xE6, 0x9C, 0x88, 0x44, 0x36,
	0xE7, 0x82, 0xB9, 0x44, 0x37, 0xE6, 0x97, 0xA5,
	0x44, 0x37, 0xE6, 0x9C, 0x88, 0x44, 0x37, 0xE7,
	0x82, 0xB9, 0x44, 0x38, 0xE6, 0x97, 0xA5, 0x44,
	0x38, 0xE6, 0x9C, 0x88, 0x44, 0x38, 0xE7, 0x82,
	0xB9, 0x44, 0x39, 0xE6, 0x97, 0xA5, 0x44, 0x39,
	// Bytes 1d40 - 1d7f
	0xE6, 0x9C, 0x88, 0x44, 0x39, 0xE7, 0x82, 0xB9,
	0x44, 0x56, 0x49, 0x49, 0x49, 0x44, 0x61, 0x2E,
	0x6D, 0x2E, 0x44, 0x6B, 0x63, 0x61, 0x6C, 0x44,
	0x70, 0x2E, 0x6D, 0x2E, 0x44, 0x76, 0x69, 0x69,
	0x69, 0x44, 0xD5, 0xA5, 0xD6, 0x82, 0x44, 0xD5,
	0xB4, 0xD5, 0xA5, 0x44, 0xD5, 0xB4, 0xD5, 0xAB,
	0x44, 0xD5, 0xB4, 0xD5, 0xAD, 0x44, 0xD5, 0xB4,
	0xD5, 0xB6, 0x44, 0xD5, 0xBE, 0xD5, 0xB6, 0x44,
	// Bytes 1d80 - 1dbf
	0xD7, 0x90, 0xD7, 0x9C, 0x44, 0xD8, 0xA7, 0xD9,
	0xB4, 0x44, 0xD8, 0xA8, 0xD8, 0xAC, 0x44, 0xD8,
	0xA8, 0xD8, 0xAD, 0x44, 0xD8, 0xA8, 0xD8, 0xAE,
	0x44, 0xD8, 0xA8, 0xD8, 0xB1, 0x44, 0xD8, 0xA8,
	0xD8, 0xB2, 0x44, 0xD8, 0xA8, 0xD9, 0x85, 0x44,
	0xD8, 0xA8, 0xD9, 0x86, 0x44, 0xD8, 0xA8, 0xD9,
	0x87, 0x44, 0xD8, 0xA8, 0xD9, 0x89, 0x44, 0xD8,
	0xA8, 0xD9, 0x8A, 0x44, 0xD8, 0xAA, 0xD8, 0xAC,
	// Bytes 1dc0 - 1dff
	0x44, 0xD8, 0xAA, 0xD8, 0xAD, 0x44, 0xD8, 0xAA,
	0xD8, 0xAE, 0x44, 0xD8, 0xAA, 0xD8, 0xB1, 0x44,
	0xD8, 0xAA, 0xD8, 0xB2, 0x44, 0xD8, 0xAA, 0xD9,
	0x85, 0x44, 0xD8, 0xAA, 0xD9, 0x86, 0x44, 0xD8,
	0xAA, 0xD9, 0x87, 0x44, 0xD8, 0xAA, 0xD9, 0x89,
	0x44, 0xD8, 0xAA, 0xD9, 0x8A, 0x44, 0xD8, 0xAB,
	0xD8, 0xAC, 0x44, 0xD8, 0xAB, 0xD8, 0xB1, 0x44,
	0xD8, 0xAB, 0xD8, 0xB2, 0x44, 0xD8, 0xAB, 0xD9,
	// Bytes 1e00 - 1e3f
	0x85, 0x44, 0xD8, 0xAB, 0xD9, 0x86, 0x44, 0xD8,
	0xAB, 0xD9, 0x87, 0x44, 0xD8, 0xAB, 0xD9, 0x89,
	0x44, 0xD8, 0xAB, 0xD9, 0x8A, 0x44, 0xD8, 0xAC,
	0xD8, 0xAD, 0x44, 0xD8, 0xAC, 0xD9, 0x85, 0x44,
	0xD8, 0xAC, 0xD9, 0x89, 0x44, 0xD8, 0xAC, 0xD9,
	0x8A, 0x44, 0xD8, 0xAD, 0xD8, 0xAC, 0x44, 0xD8,
	0xAD, 0xD9, 0x85, 0x44, 0xD8, 0xAD, 0xD9, 0x89,
	0x44, 0xD8, 0xAD, 0xD9, 0x8A, 0x44, 0xD8, 0xAE,
	// Bytes 1e40 - 1e7f
	0xD8, 0xAC, 0x44, 0xD8, 0xAE, 0xD8, 0xAD, 0x44,
	0xD8, 0xAE, 0xD9, 0x85, 0x44, 0xD8, 0xAE, 0xD9,
	0x89, 0x44, 0xD8, 0xAE, 0xD9, 0x8A, 0x44, 0xD8,
	0xB3, 0xD8, 0xAC, 0x44, 0xD8, 0xB3, 0xD8, 0xAD,
	0x44, 0xD8, 0xB3, 0xD8, 0xAE, 0x44, 0xD8, 0xB3,
	0xD8, 0xB1, 0x44, 0xD8, 0xB3, 0xD9, 0x85, 0x44,
	0xD8, 0xB3, 0xD9, 0x87, 0x44, 0xD8, 0xB3, 0xD9,
	0x89, 0x44, 0xD8, 0xB3, 0xD9, 0x8A, 0x44, 0xD8,
	// Bytes 1e80 - 1ebf
	0xB4, 0xD8, 0xAC, 0x44, 0xD8, 0xB4, 0xD8, 0xAD,
	0x44, 0xD8, 0xB4, 0xD8, 0xAE, 0x44, 0xD8, 0xB4,
	0xD8, 0xB1, 0x44, 0xD8, 0xB4, 0xD9, 0x85, 0x44,
	0xD8, 0xB4, 0xD9, 0x87, 0x44, 0xD8, 0xB4, 0xD9,
	0x89, 0x44, 0xD8, 0xB4, 0xD9, 0x8A, 0x44, 0xD8,
	0xB5, 0xD8, 0xAD, 0x44, 0xD8, 0xB5, 0xD8, 0xAE,
	0x44, 0xD8, 0xB5, 0xD8, 0xB1, 0x44, 0xD8, 0xB5,
	0xD9, 0x85, 0x44, 0xD8, 0xB5, 0xD9, 0x89, 0x44,
	// Bytes 1ec0 - 1eff
	0xD8, 0xB5, 0xD9, 0x8A, 0x44, 0xD8, 0xB6, 0xD8,
	0xAC, 0x44, 0xD8, 0xB6, 0xD8, 0xAD, 0x44, 0xD8,
	0xB6, 0xD8, 0xAE, 0x44, 0xD8, 0xB6, 0xD8, 0xB1,
	0x44, 0xD8, 0xB6, 0xD9, 0x85, 0x44, 0xD8, 0xB6,
	0xD9, 0x89, 0x44, 0xD8, 0xB6, 0xD9, 0x8A, 0x44,
	0xD8, 0xB7, 0xD8, 0xAD, 0x44, 0xD8, 0xB7, 0xD9,
	0x85, 0x44, 0xD8, 0xB7, 0xD9, 0x89, 0x44, 0xD8,
	0xB7, 0xD9, 0x8A, 0x44, 0xD8, 0xB8, 0xD9, 0x85,
	// Bytes 1f00 - 1f3f
	0x44, 0xD8, 0xB9, 0xD8, 0xAC, 0x44, 0xD8, 0xB9,
	0xD9, 0x85, 0x44, 0xD8, 0xB9, 0xD9, 0x89, 0x44,
	0xD8, 0xB9, 0xD9, 0x8A, 0x44, 0xD8, 0xBA, 0xD8,
	0xAC, 0x44, 0xD8, 0xBA, 0xD9, 0x85, 0x44, 0xD8,
	0xBA, 0xD9, 0x89, 0x44, 0xD8, 0xBA, 0xD9, 0x8A,
	0x44, 0xD9, 0x81, 0xD8, 0xAC, 0x44, 0xD9, 0x81,
	0xD8, 0xAD, 0x44, 0xD9, 0x81, 0xD8, 0xAE, 0x44,
	0xD9, 0x81, 0xD9, 0x85, 0x44, 0xD9, 0x81, 0xD9,
	// Bytes 1f40 - 1f7f
	0x89, 0x44, 0xD9, 0x81, 0xD9, 0x8A, 0x44, 0xD9,
	0x82, 0xD8, 0xAD, 0x44, 0xD9, 0x82, 0xD9, 0x85,
	0x44, 0xD9, 0x82, 0xD9, 0x89, 0x44, 0xD9, 0x82,
	0xD9, 0x8A, 0x44, 0xD9, 0x83, 0xD8, 0xA7, 0x44,
	0xD9, 0x83, 0xD8, 0xAC, 0x44, 0xD9, 0x83, 0xD8,
	0xAD, 0x44, 0xD9, 0x83, 0xD8, 0xAE, 0x44, 0xD9,
	0x83, 0xD9, 0x84, 0x44, 0xD9, 0x83, 0xD9, 0x85,
	0x44, 0xD9, 0x83, 0xD9, 0x89, 0x44, 0xD9, 0x83,
	// Bytes 1f80 - 1fbf
	0xD9, 0x8A, 0x44, 0xD9, 0x84, 0xD8, 0xA7, 0x44,
	0xD9, 0x84, 0xD8, 0xAC, 0x44, 0xD9, 0x84, 0xD8,
	0xAD, 0x44, 0xD9, 0x84, 0xD8, 0xAE, 0x44, 0xD9,
	0x84, 0xD9, 0x85, 0x44, 0xD9, 0x84, 0xD9, 0x87,
	0x44, 0xD9, 0x84, 0xD9, 0x89, 0x44, 0xD9, 0x84,
	0xD9, 0x8A, 0x44, 0xD9, 0x85, 0xD8, 0xA7, 0x44,
	0xD9, 0x85, 0xD8, 0xAC, 0x44, 0xD9, 0x85, 0xD8,
	0xAD, 0x44, 0xD9, 0x85, 0xD8, 0xAE, 0x44, 0xD9,
	// Bytes 1fc0 - 1fff
	0x85, 0xD9, 0x85, 0x44, 0xD9, 0x85, 0xD9, 0x89,
	0x44, 0xD9, 0x85, 0xD9, 0x8A, 0x44, 0xD9, 0x86,
	0xD8, 0xAC, 0x44, 0xD9, 0x86, 0xD8, 0xAD, 0x44,
	0xD9, 0x86, 0xD8, 0xAE, 0x44, 0xD9, 0x86, 0xD8,
	0xB1, 0x44, 0xD9, 0x86, 0xD8, 0xB2, 0x44, 0xD9,
	0x86, 0xD9, 0x85, 0x44, 0xD9, 0x86, 0xD9, 0x86,
	0x44, 0xD9, 0x86, 0xD9, 0x87, 0x44, 0xD9, 0x86,
	0xD9, 0x89, 0x44, 0xD9, 0x86, 0xD9, 0x8A, 0x44,
	// Bytes 2000 - 203f
	0xD9, 0x87, 0xD8, 0xAC, 0x44, 0xD9, 0x87, 0xD9,
	0x85, 0x44, 0xD9, 0x87, 0xD9, 0x89, 0x44, 0xD9,
	0x87, 0xD9, 0x8A, 0x44, 0xD9, 0x88, 0xD9, 0xB4,
	0x44, 0xD9, 0x8A, 0xD8, 0xAC, 0x44, 0xD9, 0x8A,
	0xD8, 0xAD, 0x44, 0xD9, 0x8A, 0xD8, 0xAE, 0x44,
	0xD9, 0x8A, 0xD8, 0xB1, 0x44, 0xD9, 0x8A, 0xD8,
	0xB2, 0x44, 0xD9, 0x8A, 0xD9, 0x85, 0x44, 0xD9,
	0x8A, 0xD9, 0x86, 0x44, 0xD9, 0x8A, 0xD9, 0x87,
	// Bytes 2040 - 207f
	0x44, 0xD9, 0x8A, 0xD9, 0x89, 0x44, 0xD9, 0x8A,
	0xD9, 0x8A, 0x44, 0xD9, 0x8A, 0xD9, 0xB4, 0x44,
	0xDB, 0x87, 0xD9, 0xB4, 0x45, 0x28, 0xE1, 0x84,
	0x80, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x82, 0x29,
	0x45, 0x28, 0xE1, 0x84, 0x83, 0x29, 0x45, 0x28,
	0xE1, 0x84, 0x85, 0x29, 0x45, 0x28, 0xE1, 0x84,
	0x86, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x87, 0x29,
	0x45, 0x28, 0xE1, 0x84, 0x89, 0x29, 0x45, 0x28,
	// Bytes 2080 - 20bf
	0xE1, 0x84, 0x8B, 0x29, 0x45, 0x28, 0xE1, 0x84,
	0x8C, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x8E, 0x29,
	0x45, 0x28, 0xE1, 0x84, 0x8F, 0x29, 0x45, 0x28,
	0xE1, 0x84, 0x90, 0x29, 0x45, 0x28, 0xE1, 0x84,
	0x91, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x92, 0x29,
	0x45, 0x28, 0xE4, 0xB8, 0x80, 0x29, 0x45, 0x28,
	0xE4, 0xB8, 0x83, 0x29, 0x45, 0x28, 0xE4, 0xB8,
	0x89, 0x29, 0x45, 0x28, 0xE4, 0xB9, 0x9D, 0x29,
	// Bytes 20c0 - 20ff
	0x45, 0x28, 0xE4, 0xBA, 0x8C, 0x29, 0x45, 0x28,
	0xE4, 0xBA, 0x94, 0x29, 0x45, 0x28, 0xE4, 0xBB,
	0xA3, 0x29, 0x45, 0x28, 0xE4, 0xBC, 0x81, 0x29,
	0x45, 0x28, 0xE4, 0xBC, 0x91, 0x29, 0x45, 0x28,
	0xE5, 0x85, 0xAB, 0x29, 0x45, 0x28, 0xE5, 0x85,
	0xAD, 0x29, 0x45, 0x28, 0xE5, 0x8A, 0xB4, 0x29,
	0x45, 0x28, 0xE5, 0x8D, 0x81, 0x29, 0x45, 0x28,
	0xE5, 0x8D, 0x94, 0x29, 0x45, 0x28, 0xE5, 0x90,
	// Bytes 2100 - 213f
	0x8D, 0x29, 0x45, 0x28, 0xE5, 0x91, 0xBC, 0x29,
	0x45, 0x28, 0xE5, 0x9B, 0x9B, 0x29, 0x45, 0x28,
	0xE5, 0x9C, 0x9F, 0x29, 0x45, 0x28, 0xE5, 0xAD,
	0xA6, 0x29, 0x45, 0x28, 0xE6, 0x97, 0xA5, 0x29,
	0x45, 0x28, 0xE6, 0x9C, 0x88, 0x29, 0x45, 0x28,
	0xE6, 0x9C, 0x89, 0x29, 0x45, 0x28, 0xE6, 0x9C,
	0xA8, 0x29, 0x45, 0x28, 0xE6, 0xA0, 0xAA, 0x29,
	0x45, 0x28, 0xE6, 0xB0, 0xB4, 0x29, 0x45, 0x28,
	// Bytes 2140 - 217f
	0xE7, 0x81, 0xAB, 0x29, 0x45, 0x28, 0xE7, 0x89,
	0xB9, 0x29, 0x45, 0x28, 0xE7, 0x9B, 0xA3, 0x29,
	0x45, 0x28, 0xE7, 0xA4, 0xBE, 0x29, 0x45, 0x28,
	0xE7, 0xA5, 0x9D, 0x29, 0x45, 0x28, 0xE7, 0xA5,
	0xAD, 0x29, 0x45, 0x28, 0xE8, 0x87, 0xAA, 0x29,
	0x45, 0x28, 0xE8, 0x87, 0xB3, 0x29, 0x45, 0x28,
	0xE8, 0xB2, 0xA1, 0x29, 0x45, 0x28, 0xE8, 0xB3,
	0x87, 0x29, 0x45, 0x28, 0xE9, 0x87, 0x91, 0x29,
	// Bytes 2180 - 21bf
	0x45, 0x30, 0xE2, 0x81, 0x84, 0x33, 0x45, 0x31,
	0x30, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x30, 0xE6,
	0x9C, 0x88, 0x45, 0x31, 0x30, 0xE7, 0x82, 0xB9,
	0x45, 0x31, 0x31, 0xE6, 0x97, 0xA5, 0x45, 0x31,
	0x31, 0xE6, 0x9C, 0x88, 0x45, 0x31, 0x31, 0xE7,
	0x82, 0xB9, 0x45, 0x31, 0x32, 0xE6, 0x97, 0xA5,
	0x45, 0x31, 0x32, 0xE6, 0x9C, 0x88, 0x45, 0x31,
	0x32, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x33, 0xE6,
	// Bytes 21c0 - 21ff
	0x97, 0xA5, 0x45, 0x31, 0x33, 0xE7, 0x82, 0xB9,
	0x45, 0x31, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x31,
	0x34, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x35, 0xE6,
	0x97, 0xA5, 0x45, 0x31, 0x35, 0xE7, 0x82, 0xB9,
	0x45, 0x31, 0x36, 0xE6, 0x97, 0xA5, 0x45, 0x31,
	0x36, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x37, 0xE6,
	0x97, 0xA5, 0x45, 0x31, 0x37, 0xE7, 0x82, 0xB9,
	0x45, 0x31, 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x31,
	// Bytes 2200 - 223f
	0x38, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x39, 0xE6,
	0x97, 0xA5, 0x45, 0x31, 0x39, 0xE7, 0x82, 0xB9,
	0x45, 0x31, 0xE2, 0x81, 0x84, 0x32, 0x45, 0x31,
	0xE2, 0x81, 0x84, 0x33, 0x45, 0x31, 0xE2, 0x81,
	0x84, 0x34, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x35,
	0x45, 0x31, 0xE2, 0x81, 0x84, 0x36, 0x45, 0x31,
	0xE2, 0x81, 0x84, 0x37, 0x45, 0x31, 0xE2, 0x81,
	0x84, 0x38, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x39,
	// Bytes 2240 - 227f
	0x45, 0x32, 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x32,
	0x30, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x31, 0xE6,
	0x97, 0xA5, 0x45, 0x32, 0x31, 0xE7, 0x82, 0xB9,
	0x45, 0x32, 0x32, 0xE6, 0x97, 0xA5, 0x45, 0x32,
	0x32, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x33, 0xE6,
	0x97, 0xA5, 0x45, 0x32, 0x33, 0xE7, 0x82, 0xB9,
	0x45, 0x32, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x32,
	0x34, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x35, 0xE6,
	// Bytes 2280 - 22bf
	0x97, 0xA5, 0x45, 0x32, 0x36, 0xE6, 0x97, 0xA5,
	0x45, 0x32, 0x37, 0xE6, 0x97, 0xA5, 0x45, 0x32,
	0x38, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x39, 0xE6,
	0x97, 0xA5, 0x45, 0x32, 0xE2, 0x81, 0x84, 0x33,
	0x45, 0x32, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33,
	0x30, 0xE6, 0x97, 0xA5, 0x45, 0x33, 0x31, 0xE6,
	0x97, 0xA5, 0x45, 0x33, 0xE2, 0x81, 0x84, 0x34,
	0x45, 0x33, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33,
	// Bytes 22c0 - 22ff
	0xE2, 0x81, 0x84, 0x38, 0x45, 0x34, 0xE2, 0x81,
	0x84, 0x35, 0x45, 0x35, 0xE2, 0x81, 0x84, 0x36,
	0x45, 0x35, 0xE2, 0x81, 0x84, 0x38, 0x45, 0x37,
	0xE2, 0x81, 0x84, 0x38, 0x45, 0x41, 0xE2, 0x88,
	0x95, 0x6D, 0x45, 0x56, 0xE2, 0x88, 0x95, 0x6D,
	0x45, 0x6D, 0xE2, 0x88, 0x95, 0x73, 0x46, 0x31,
	0xE2, 0x81, 0x84, 0x31, 0x30, 0x46, 0x43, 0xE2,
	0x88, 0x95, 0x6B, 0x67, 0x46, 0x6D, 0xE2, 0x88,
	// Bytes 2300 - 233f
	0x95, 0x73, 0x32, 0x46, 0xD8, 0xA8, 0xD8, 0xAD,
	0xD9, 0x8A, 0x46, 0xD8, 0xA8, 0xD8, 0xAE, 0xD9,
	0x8A, 0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x85,
	0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x89, 0x46,
	0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8,
	0xAA, 0xD8, 0xAD, 0xD8, 0xAC, 0x46, 0xD8, 0xAA,
	0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8,
	0xAE, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, 0xAE,
	// Bytes 2340 - 237f
	0xD9, 0x89, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, 0xD9,
	0x8A, 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAC,
	0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAD, 0x46,
	0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAE, 0x46, 0xD8,
	0xAA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAA,
	0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD8,
	0xAD, 0xD9, 0x89, 0x46, 0xD8, 0xAC, 0xD8, 0xAD,
	0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD8,
	// Bytes 2380 - 23bf
	0xAD, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x89,
	0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x8A, 0x46,
	0xD8, 0xAD, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8,
	0xAD, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAD,
	0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB3, 0xD8,
	0xAC, 0xD8, 0xAD, 0x46, 0xD8, 0xB3, 0xD8, 0xAC,
	0xD9, 0x89, 0x46, 0xD8, 0xB3, 0xD8, 0xAD, 0xD8,
	0xAC, 0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x89,
	// Bytes 23c0 - 23ff
	0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x8A, 0x46,
	0xD8, 0xB3, 0xD9, 0x85, 0xD8, 0xAC, 0x46, 0xD8,
	0xB3, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, 0xB3,
	0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8,
	0xAC, 0xD9, 0x8A, 0x46, 0xD8, 0xB4, 0xD8, 0xAD,
	0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8, 0xAD, 0xD9,
	0x8A, 0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD8, 0xAE,
	0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD9, 0x85, 0x46,
	// Bytes 2400 - 243f
	0xD8, 0xB5, 0xD8, 0xAD, 0xD8, 0xAD, 0x46, 0xD8,
	0xB5, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xB5,
	0xD9, 0x84, 0xD9, 0x89, 0x46, 0xD8, 0xB5, 0xD9,
	0x84, 0xDB, 0x92, 0x46, 0xD8, 0xB5, 0xD9, 0x85,
	0xD9, 0x85, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9,
	0x89, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, 0x8A,
	0x46, 0xD8, 0xB6, 0xD8, 0xAE, 0xD9, 0x85, 0x46,
	0xD8, 0xB7, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8,
	// Bytes 2440 - 247f
	0xB7, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB7,
	0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB9, 0xD8,
	0xAC, 0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85,
	0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9,
	0x89, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, 0x8A,
	0x46, 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x85, 0x46,
	0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8,
	0xBA, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x81,
	// Bytes 2480 - 24bf
	0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x81, 0xD9,
	0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x82, 0xD9, 0x84,
	0xDB, 0x92, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD8,
	0xAD, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x85,
	0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x8A, 0x46,
	0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9,
	0x83, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x84,
	0xD8, 0xAC, 0xD8, 0xAC, 0x46, 0xD9, 0x84, 0xD8,
	// Bytes 24c0 - 24ff
	0xAC, 0xD9, 0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAC,
	0xD9, 0x8A, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9,
	0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x89,
	0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x8A, 0x46,
	0xD9, 0x84, 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9,
	0x84, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD9, 0x84,
	0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD8,
	0xAC, 0xD8, 0xAD, 0x46, 0xD9, 0x85, 0xD8, 0xAC,
	// Bytes 2500 - 253f
	0xD8, 0xAE, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9,
	0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x8A,
	0x46, 0xD9, 0x85, 0xD8, 0xAD, 0xD8, 0xAC, 0x46,
	0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9,
	0x85, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x85,
	0xD8, 0xAE, 0xD8, 0xAC, 0x46, 0xD9, 0x85, 0xD8,
	0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAE,
	0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD9, 0x85, 0xD9,
	// Bytes 2540 - 257f
	0x8A, 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD8, 0xAD,
	0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x85, 0x46,
	0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x89, 0x46, 0xD9,
	0x86, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x86,
	0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, 0x86, 0xD8,
	0xAD, 0xD9, 0x89, 0x46, 0xD9, 0x86, 0xD8, 0xAD,
	0xD9, 0x8A, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9,
	0x89, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x8A,
	// Bytes 2580 - 25bf
	0x46, 0xD9, 0x87, 0xD9, 0x85, 0xD8, 0xAC, 0x46,
	0xD9, 0x87, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9,
	0x8A, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x8A,
	0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9,
	0x85, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x85,
	0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8,
	0xA7, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAC,
	0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAD, 0x46,
	// Bytes 25c0 - 25ff
	0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAE, 0x46, 0xD9,
	0x8A, 0xD9, 0x94, 0xD8, 0xB1, 0x46, 0xD9, 0x8A,
	0xD9, 0x94, 0xD8, 0xB2, 0x46, 0xD9, 0x8A, 0xD9,
	0x94, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x94,
	0xD9, 0x86, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9,
	0x87, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x88,
	0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x89, 0x46,
	0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x8A, 0x46, 0xD9,
	// Bytes 2600 - 263f
	0x8A, 0xD9, 0x94, 0xDB, 0x86, 0x46, 0xD9, 0x8A,
	0xD9, 0x94, 0xDB, 0x87, 0x46, 0xD9, 0x8A, 0xD9,
	0x94, 0xDB, 0x88, 0x46, 0xD9, 0x8A, 0xD9, 0x94,
	0xDB, 0x90, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB,
	0x95, 0x46, 0xE0, 0xB9, 0x8D, 0xE0, 0xB8, 0xB2,
	0x46, 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0x99, 0x46,
	0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0xA1, 0x46, 0xE0,
	0xBB, 0x8D, 0xE0, 0xBA, 0xB2, 0x46, 0xE0, 0xBD,
	// Bytes 2640 - 267f
	0x80, 0xE0, 0xBE, 0xB5, 0x46, 0xE0, 0xBD, 0x82,
	0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x8C, 0xE0,
	0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x91, 0xE0, 0xBE,
	0xB7, 0x46, 0xE0, 0xBD, 0x96, 0xE0, 0xBE, 0xB7,
	0x46, 0xE0, 0xBD, 0x9B, 0xE0, 0xBE, 0xB7, 0x46,
	0xE0, 0xBE, 0x90, 0xE0, 0xBE, 0xB5, 0x46, 0xE0,
	0xBE, 0x92, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE,
	0x9C, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA1,
	// Bytes 2680 - 26bf
	0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA6, 0xE0,
	0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xAB, 0xE0, 0xBE,
	0xB7, 0x46, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2,
	0x46, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0x46,
	0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0x46, 0xE2,
	0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x46, 0xE3, 0x81,
	0xBB, 0xE3, 0x81, 0x8B, 0x46, 0xE3, 0x82, 0x88,
	0xE3, 0x82, 0x8A, 0x46, 0xE3, 0x82, 0xAD, 0xE3,
	// Bytes 26c0 - 26ff
	0x83, 0xAD, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x82,
	0xB3, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0x88,
	0x46, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xB3, 0x46,
	0xE3, 0x83, 0x8A, 0xE3, 0x83, 0x8E, 0x46, 0xE3,
	0x83, 0x9B, 0xE3, 0x83, 0xB3, 0x46, 0xE3, 0x83,
	0x9F, 0xE3, 0x83, 0xAA, 0x46, 0xE3, 0x83, 0xAA,
	0xE3, 0x83, 0xA9, 0x46, 0xE3, 0x83, 0xAC, 0xE3,
	0x83, 0xA0, 0x46, 0xE5, 0xA4, 0xA7, 0xE6, 0xAD,
	// Bytes 2700 - 273f
	0xA3, 0x46, 0xE5, 0xB9, 0xB3, 0xE6, 0x88, 0x90,
	0x46, 0xE6, 0x98, 0x8E, 0xE6, 0xB2, 0xBB, 0x46,
	0xE6, 0x98, 0xAD, 0xE5, 0x92, 0x8C, 0x47, 0x72,
	0x61, 0x64, 0xE2, 0x88, 0x95, 0x73, 0x47, 0xE3,
	0x80, 0x94, 0x53, 0xE3, 0x80, 0x95, 0x48, 0x28,
	0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x29, 0x48,
	0x28, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x29,
	0x48, 0x28, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1,
	// Bytes 2740 - 277f
	0x29, 0x48, 0x28, 0xE1, 0x84, 0x85, 0xE1, 0x85,
	0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x86, 0xE1,
	0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x87,
	0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84,
	0x89, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1,
	0x84, 0x8B, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28,
	0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x29, 0x48,
	0x28, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xAE, 0x29,
	// Bytes 2780 - 27bf
	0x48, 0x28, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1,
	0x29, 0x48, 0x28, 0xE1, 0x84, 0x8F, 0xE1, 0x85,
	0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x90, 0xE1,
	0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x91,
	0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84,
	0x92, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x72, 0x61,
	0x64, 0xE2, 0x88, 0x95, 0x73, 0x32, 0x48, 0xD8,
	0xA7, 0xD9, 0x83, 0xD8, 0xA8, 0xD8, 0xB1, 0x48,
	// Bytes 27c0 - 27ff
	0xD8, 0xA7, 0xD9, 0x84, 0xD9, 0x84, 0xD9, 0x87,
	0x48, 0xD8, 0xB1, 0xD8, 0xB3, 0xD9, 0x88, 0xD9,
	0x84, 0x48, 0xD8, 0xB1, 0xDB, 0x8C, 0xD8, 0xA7,
	0xD9, 0x84, 0x48, 0xD8, 0xB5, 0xD9, 0x84, 0xD8,
	0xB9, 0xD9, 0x85, 0x48, 0xD8, 0xB9, 0xD9, 0x84,
	0xD9, 0x8A, 0xD9, 0x87, 0x48, 0xD9, 0x85, 0xD8,
	0xAD, 0xD9, 0x85, 0xD8, 0xAF, 0x48, 0xD9, 0x88,
	0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x49, 0xE2,
	// Bytes 2800 - 283f
	0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2,
	0x49, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0xE2,
	0x80, 0xB5, 0x49, 0xE2, 0x88, 0xAB, 0xE2, 0x88,
	0xAB, 0xE2, 0x88, 0xAB, 0x49, 0xE2, 0x88, 0xAE,
	0xE2, 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x49, 0xE3,
	0x80, 0x94, 0xE4, 0xB8, 0x89, 0xE3, 0x80, 0x95,
	0x49, 0xE3, 0x80, 0x94, 0xE4, 0xBA, 0x8C, 0xE3,
	0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE5, 0x8B,
	// Bytes 2840 - 287f
	0x9D, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94,
	0xE5, 0xAE, 0x89, 0xE3, 0x80, 0x95, 0x49, 0xE3,
	0x80, 0x94, 0xE6, 0x89, 0x93, 0xE3, 0x80, 0x95,
	0x49, 0xE3, 0x80, 0x94, 0xE6, 0x95, 0x97, 0xE3,
	0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE6, 0x9C,
	0xAC, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94,
	0xE7, 0x82, 0xB9, 0xE3, 0x80, 0x95, 0x49, 0xE3,
	0x80, 0x94, 0xE7, 0x9B, 0x97, 0xE3, 0x80, 0x95,
	// Bytes 2880 - 28bf
	0x49, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xBC, 0xE3,
	0x83, 0xAB, 0x49, 0xE3, 0x82, 0xA4, 0xE3, 0x83,
	0xB3, 0xE3, 0x83, 0x81, 0x49, 0xE3, 0x82, 0xA6,
	0xE3, 0x82, 0xA9, 0xE3, 0x83, 0xB3, 0x49, 0xE3,
	0x82, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB9,
	0x49, 0xE3, 0x82, 0xAA, 0xE3, 0x83, 0xBC, 0xE3,
	0x83, 0xA0, 0x49, 0xE3, 0x82, 0xAB, 0xE3, 0x82,
	0xA4, 0xE3, 0x83, 0xAA, 0x49, 0xE3, 0x82, 0xB1,
	// Bytes 28c0 - 28ff
	0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xB9, 0x49, 0xE3,
	0x82, 0xB3, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x8A,
	0x49, 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3,
	0x83, 0x81, 0x49, 0xE3, 0x82, 0xBB, 0xE3, 0x83,
	0xB3, 0xE3, 0x83, 0x88, 0x49, 0xE3, 0x83, 0x86,
	0xE3, 0x82, 0x99, 0xE3, 0x82, 0xB7, 0x49, 0xE3,
	0x83, 0x88, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB,
	0x49, 0xE3, 0x83, 0x8E, 0xE3, 0x83, 0x83, 0xE3,
	// Bytes 2900 - 293f
	0x83, 0x88, 0x49, 0xE3, 0x83, 0x8F, 0xE3, 0x82,
	0xA4, 0xE3, 0x83, 0x84, 0x49, 0xE3, 0x83, 0x92,
	0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, 0x49, 0xE3,
	0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xB3,
	0x49, 0xE3, 0x83, 0x95, 0xE3, 0x83, 0xA9, 0xE3,
	0x83, 0xB3, 0x49, 0xE3, 0x83, 0x98, 0xE3, 0x82,
	0x9A, 0xE3, 0x82, 0xBD, 0x49, 0xE3, 0x83, 0x98,
	0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x84, 0x49, 0xE3,
	// Bytes 2940 - 297f
	0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB,
	0x49, 0xE3, 0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3,
	0x83, 0xB3, 0x49, 0xE3, 0x83, 0x9E, 0xE3, 0x82,
	0xA4, 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, 0x9E,
	0xE3, 0x83, 0x83, 0xE3, 0x83, 0x8F, 0x49, 0xE3,
	0x83, 0x9E, 0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xAF,
	0x49, 0xE3, 0x83, 0xA4, 0xE3, 0x83, 0xBC, 0xE3,
	0x83, 0xAB, 0x49, 0xE3, 0x83, 0xA6, 0xE3, 0x82,
	// Bytes 2980 - 29bf
	0xA2, 0xE3, 0x83, 0xB3, 0x49, 0xE3, 0x83, 0xAF,
	0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0x4C, 0xE2,
	0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2,
	0xE2, 0x80, 0xB2, 0x4C, 0xE2, 0x88, 0xAB, 0xE2,
	0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB,
	0x4C, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xAB, 0xE3,
	0x83, 0x95, 0xE3, 0x82, 0xA1, 0x4C, 0xE3, 0x82,
	0xA8, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xAB, 0xE3,
	// Bytes 29c0 - 29ff
	0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x82,
	0x99, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xB3, 0x4C,
	0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83,
	0xB3, 0xE3, 0x83, 0x9E, 0x4C, 0xE3, 0x82, 0xAB,
	0xE3, 0x83, 0xA9, 0xE3, 0x83, 0x83, 0xE3, 0x83,
	0x88, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x83, 0xAD,
	0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC, 0x4C, 0xE3,
	0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x8B,
	// Bytes 2a00 - 2a3f
	0xE3, 0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAD, 0xE3,
	0x83, 0xA5, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC,
	0x4C, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3,
	0x83, 0xA9, 0xE3, 0x83, 0xA0, 0x4C, 0xE3, 0x82,
	0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xBC, 0xE3,
	0x83, 0x8D, 0x4C, 0xE3, 0x82, 0xB5, 0xE3, 0x82,
	0xA4, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C,
	0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83,
	// Bytes 2a40 - 2a7f
	0xBC, 0xE3, 0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x8F,
	0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x83,
	0x84, 0x4C, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A,
	0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C, 0xE3,
	0x83, 0x95, 0xE3, 0x82, 0xA3, 0xE3, 0x83, 0xBC,
	0xE3, 0x83, 0x88, 0x4C, 0xE3, 0x83, 0x98, 0xE3,
	0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xBF,
	0x4C, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3,
	// Bytes 2a80 - 2abf
	0x83, 0x8B, 0xE3, 0x83, 0x92, 0x4C, 0xE3, 0x83,
	0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xB3, 0xE3,
	0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x9B, 0xE3, 0x82,
	0x99, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x88, 0x4C,
	0xE3, 0x83, 0x9E, 0xE3, 0x82, 0xA4, 0xE3, 0x82,
	0xAF, 0xE3, 0x83, 0xAD, 0x4C, 0xE3, 0x83, 0x9F,
	0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83,
	0xB3, 0x4C, 0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xBC,
	// Bytes 2ac0 - 2aff
	0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x4C, 0xE3,
	0x83, 0xAA, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88,
	0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x83, 0xAB, 0xE3,
	0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC,
	0x4C, 0xE6, 0xA0, 0xAA, 0xE5, 0xBC, 0x8F, 0xE4,
	0xBC, 0x9A, 0xE7, 0xA4, 0xBE, 0x4E, 0x28, 0xE1,
	0x84, 0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x92,
	0xE1, 0x85, 0xAE, 0x29, 0x4F, 0xD8, 0xAC, 0xD9,
	// Bytes 2b00 - 2b3f
	0x84, 0x20, 0xD8, 0xAC, 0xD9, 0x84, 0xD8, 0xA7,
	0xD9, 0x84, 0xD9, 0x87, 0x4F, 0xE3, 0x82, 0xA2,
	0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83,
	0xBC, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xA2,
	0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x98, 0xE3, 0x82,
	0x9A, 0xE3, 0x82, 0xA2, 0x4F, 0xE3, 0x82, 0xAD,
	0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xAF, 0xE3, 0x83,
	0x83, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xB5,
	// Bytes 2b40 - 2b7f
	0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x81, 0xE3, 0x83,
	0xBC, 0xE3, 0x83, 0xA0, 0x4F, 0xE3, 0x83, 0x8F,
	0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83,
	0xAC, 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x98,
	0xE3, 0x82, 0xAF, 0xE3, 0x82, 0xBF, 0xE3, 0x83,
	0xBC, 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x9B,
	0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xA4, 0xE3, 0x83,
	0xB3, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x83, 0x9E,
	// Bytes 2b80 - 2bbf
	0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB7, 0xE3, 0x83,
	0xA7, 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xA1,
	0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83,
	0x88, 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xAB,
	0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x95, 0xE3, 0x82,
	0x99, 0xE3, 0x83, 0xAB, 0x51, 0x28, 0xE1, 0x84,
	0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x8C, 0xE1,
	0x85, 0xA5, 0xE1, 0x86, 0xAB, 0x29, 0x52, 0xE3,
	// Bytes 2bc0 - 2bff
	0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB,
	0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83,
	0xBC, 0x52, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD,
	0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83,
	0xA9, 0xE3, 0x83, 0xA0, 0x52, 0xE3, 0x82, 0xAD,
	0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xA1, 0xE3, 0x83,
	0xBC, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x52,
	0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83,
	// Bytes 2c00 - 2c3f
	0xA9, 0xE3, 0x83, 0xA0, 0xE3, 0x83, 0x88, 0xE3,
	0x83, 0xB3, 0x52, 0xE3, 0x82, 0xAF, 0xE3, 0x83,
	0xAB, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0xE3,
	0x82, 0xA4, 0xE3, 0x83, 0xAD, 0x52, 0xE3, 0x83,
	0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3,
	0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88,
	0x52, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3,
	0x82, 0xA2, 0xE3, 0x82, 0xB9, 0xE3, 0x83, 0x88,
	// Bytes 2c40 - 2c7f
	0xE3, 0x83, 0xAB, 0x52, 0xE3, 0x83, 0x95, 0xE3,
	0x82, 0x99, 0xE3, 0x83, 0x83, 0xE3, 0x82, 0xB7,
	0xE3, 0x82, 0xA7, 0xE3, 0x83, 0xAB, 0x52, 0xE3,
	0x83, 0x9F, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0x8F,
	0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83,
	0xAB, 0x52, 0xE3, 0x83, 0xAC, 0xE3, 0x83, 0xB3,
	0xE3, 0x83, 0x88, 0xE3, 0x82, 0xB1, 0xE3, 0x82,
	0x99, 0xE3, 0x83, 0xB3, 0x61, 0xD8, 0xB5, 0xD9,
	// Bytes 2c80 - 2cbf
	0x84, 0xD9, 0x89, 0x20, 0xD8, 0xA7, 0xD9, 0x84,
	0xD9, 0x84, 0xD9, 0x87, 0x20, 0xD8, 0xB9, 0xD9,
	0x84, 0xD9, 0x8A, 0xD9, 0x87, 0x20, 0xD9, 0x88,
	0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x06, 0xE0,
	0xA7, 0x87, 0xE0, 0xA6, 0xBE, 0x01, 0x06, 0xE0,
	0xA7, 0x87, 0xE0, 0xA7, 0x97, 0x01, 0x06, 0xE0,
	0xAD, 0x87, 0xE0, 0xAC, 0xBE, 0x01, 0x06, 0xE0,
	0xAD, 0x87, 0xE0, 0xAD, 0x96, 0x01, 0x06, 0xE0,
	// Bytes 2cc0 - 2cff
	0xAD, 0x87, 0xE0, 0xAD, 0x97, 0x01, 0x06, 0xE0,
	0xAE, 0x92, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0,
	0xAF, 0x86, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0,
	0xAF, 0x86, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0,
	0xAF, 0x87, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0,
	0xB2, 0xBF, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0,
	0xB3, 0x86, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0,
	0xB3, 0x86, 0xE0, 0xB3, 0x96, 0x01, 0x06, 0xE0,
	// Bytes 2d00 - 2d3f
	0xB5, 0x86, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0,
	0xB5, 0x86, 0xE0, 0xB5, 0x97, 0x01, 0x06, 0xE0,
	0xB5, 0x87, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0,
	0xB7, 0x99, 0xE0, 0xB7, 0x9F, 0x01, 0x06, 0xE1,
	0x80, 0xA5, 0xE1, 0x80, 0xAE, 0x01, 0x06, 0xE1,
	0xAC, 0x85, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	0xAC, 0x87, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	0xAC, 0x89, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	// Bytes 2d40 - 2d7f
	0xAC, 0x8B, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	0xAC, 0x8D, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	0xAC, 0x91, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	0xAC, 0xBA, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	0xAC, 0xBC, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	0xAC, 0xBE, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	0xAC, 0xBF, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	0xAD, 0x82, 0xE1, 0xAC, 0xB5, 0x01, 0x08, 0xF0,
	// Bytes 2d80 - 2dbf
	0x91, 0x84, 0xB1, 0xF0, 0x91, 0x84, 0xA7, 0x01,
	0x08, 0xF0, 0x91, 0x84, 0xB2, 0xF0, 0x91, 0x84,
	0xA7, 0x01, 0x08, 0xF0, 0x91, 0x8D, 0x87, 0xF0,
	0x91, 0x8C, 0xBE, 0x01, 0x08, 0xF0, 0x91, 0x8D,
	0x87, 0xF0, 0x91, 0x8D, 0x97, 0x01, 0x08, 0xF0,
	0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xB0, 0x01,
	0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92,
	0xBA, 0x01, 0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0,
	// Bytes 2dc0 - 2dff
	0x91, 0x92, 0xBD, 0x01, 0x08, 0xF0, 0x91, 0x96,
	0xB8, 0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, 0xF0,
	0x91, 0x96, 0xB9, 0xF0, 0x91, 0x96, 0xAF, 0x01,
	0x09, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0xE0,
	0xB3, 0x95, 0x02, 0x09, 0xE0, 0xB7, 0x99, 0xE0,
	0xB7, 0x8F, 0xE0, 0xB7, 0x8A, 0x12, 0x44, 0x44,
	0x5A, 0xCC, 0x8C, 0xC9, 0x44, 0x44, 0x7A, 0xCC,
	0x8C, 0xC9, 0x44, 0x64, 0x7A, 0xCC, 0x8C, 0xC9,
	// Bytes 2e00 - 2e3f
	0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x93, 0xC9,
	0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x94, 0xC9,
	0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x95, 0xB5,
	0x46, 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, 0x01,
	// Bytes 2e40 - 2e7f
	0x46, 0xE1, 0x84, 0x87, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x89, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xAE, 0x01,
	0x46, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x90, 0xE1, 0x85, 0xA1, 0x01,
	// Bytes 2e80 - 2ebf
	0x46, 0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, 0x01,
	0x49, 0xE3, 0x83, 0xA1, 0xE3, 0x82, 0xAB, 0xE3,
	0x82, 0x99, 0x0D, 0x4C, 0xE1, 0x84, 0x8C, 0xE1,
	0x85, 0xAE, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xB4,
	0x01, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99,
	0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D, 0x4C,
	0xE3, 0x82, 0xB3, 0xE3, 0x83, 0xBC, 0xE3, 0x83,
	// Bytes 2ec0 - 2eff
	0x9B, 0xE3, 0x82, 0x9A, 0x0D, 0x4C, 0xE3, 0x83,
	0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3,
	0x82, 0x99, 0x0D, 0x4F, 0xE1, 0x84, 0x8E, 0xE1,
	0x85, 0xA1, 0xE1, 0x86, 0xB7, 0xE1, 0x84, 0x80,
	0xE1, 0x85, 0xA9, 0x01, 0x4F, 0xE3, 0x82, 0xA4,
	0xE3, 0x83, 0x8B, 0xE3, 0x83, 0xB3, 0xE3, 0x82,
	0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3, 0x82,
	0xB7, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xB3, 0xE3,
	// Bytes 2f00 - 2f3f
	0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3,
	0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC,
	0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D, 0x4F,
	0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0xE3, 0x83,
	0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D,
	0x52, 0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xB9, 0xE3,
	0x82, 0xAF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88,
	0xE3, 0x82, 0x99, 0x0D, 0x52, 0xE3, 0x83, 0x95,
	// Bytes 2f40 - 2f7f
	0xE3, 0x82, 0xA1, 0xE3, 0x83, 0xA9, 0xE3, 0x83,
	0x83, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D,
	0x86, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0x01,
	0x86, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8F, 0x01,
	0x03, 0x3C, 0xCC, 0xB8, 0x05, 0x03, 0x3D, 0xCC,
	0xB8, 0x05, 0x03, 0x3E, 0xCC, 0xB8, 0x05, 0x03,
	0x41, 0xCC, 0x80, 0xC9, 0x03, 0x41, 0xCC, 0x81,
	0xC9, 0x03, 0x41, 0xCC, 0x83, 0xC9, 0x03, 0x41,
	// Bytes 2f80 - 2fbf
	0xCC, 0x84, 0xC9, 0x03, 0x41, 0xCC, 0x89, 0xC9,
	0x03, 0x41, 0xCC, 0x8C, 0xC9, 0x03, 0x41, 0xCC,
	0x8F, 0xC9, 0x03, 0x41, 0xCC, 0x91, 0xC9, 0x03,
	0x41, 0xCC, 0xA5, 0xB5, 0x03, 0x41, 0xCC, 0xA8,
	0xA5, 0x03, 0x42, 0xCC, 0x87, 0xC9, 0x03, 0x42,
	0xCC, 0xA3, 0xB5, 0x03, 0x42, 0xCC, 0xB1, 0xB5,
	0x03, 0x43, 0xCC, 0x81, 0xC9, 0x03, 0x43, 0xCC,
	0x82, 0xC9, 0x03, 0x43, 0xCC, 0x87, 0xC9, 0x03,
	// Bytes 2fc0 - 2fff
	0x43, 0xCC, 0x8C, 0xC9, 0x03, 0x44, 0xCC, 0x87,
	0xC9, 0x03, 0x44, 0xCC, 0x8C, 0xC9, 0x03, 0x44,
	0xCC, 0xA3, 0xB5, 0x03, 0x44, 0xCC, 0xA7, 0xA5,
	0x03, 0x44, 0xCC, 0xAD, 0xB5, 0x03, 0x44, 0xCC,
	0xB1, 0xB5, 0x03, 0x45, 0xCC, 0x80, 0xC9, 0x03,
	0x45, 0xCC, 0x81, 0xC9, 0x03, 0x45, 0xCC, 0x83,
	0xC9, 0x03, 0x45, 0xCC, 0x86, 0xC9, 0x03, 0x45,
	0xCC, 0x87, 0xC9, 0x03, 0x45, 0xCC, 0x88, 0xC9,
	// Bytes 3000 - 303f
	0x03, 0x45, 0xCC, 0x89, 0xC9, 0x03, 0x45, 0xCC,
	0x8C, 0xC9, 0x03, 0x45, 0xCC, 0x8F, 0xC9, 0x03,
	0x45, 0xCC, 0x91, 0xC9, 0x03, 0x45, 0xCC, 0xA8,
	0xA5, 0x03, 0x45, 0xCC, 0xAD, 0xB5, 0x03, 0x45,
	0xCC, 0xB0, 0xB5, 0x03, 0x46, 0xCC, 0x87, 0xC9,
	0x03, 0x47, 0xCC, 0x81, 0xC9, 0x03, 0x47, 0xCC,
	0x82, 0xC9, 0x03, 0x47, 0xCC, 0x84, 0xC9, 0x03,
	0x47, 0xCC, 0x86, 0xC9, 0x03, 0x47, 0xCC, 0x87,
	// Bytes 3040 - 307f
	0xC9, 0x03, 0x47, 0xCC, 0x8C, 0xC9, 0x03, 0x47,
	0xCC, 0xA7, 0xA5, 0x03, 0x48, 0xCC, 0x82, 0xC9,
	0x03, 0x48, 0xCC, 0x87, 0xC9, 0x03, 0x48, 0xCC,
	0x88, 0xC9, 0x03, 0x48, 0xCC, 0x8C, 0xC9, 0x03,
	0x48, 0xCC, 0xA3, 0xB5, 0x03, 0x48, 0xCC, 0xA7,
	0xA5, 0x03, 0x48, 0xCC, 0xAE, 0xB5, 0x03, 0x49,
	0xCC, 0x80, 0xC9, 0x03, 0x49, 0xCC, 0x81, 0xC9,
	0x03, 0x49, 0xCC, 0x82, 0xC9, 0x03, 0x49, 0xCC,
	// Bytes 3080 - 30bf
	0x83, 0xC9, 0x03, 0x49, 0xCC, 0x84, 0xC9, 0x03,
	0x49, 0xCC, 0x86, 0xC9, 0x03, 0x49, 0xCC, 0x87,
	0xC9, 0x03, 0x49, 0xCC, 0x89, 0xC9, 0x03, 0x49,
	0xCC, 0x8C, 0xC9, 0x03, 0x49, 0xCC, 0x8F, 0xC9,
	0x03, 0x49, 0xCC, 0x91, 0xC9, 0x03, 0x49, 0xCC,
	0xA3, 0xB5, 0x03, 0x49, 0xCC, 0xA8, 0xA5, 0x03,
	0x49, 0xCC, 0xB0, 0xB5, 0x03, 0x4A, 0xCC, 0x82,
	0xC9, 0x03, 0x4B, 0xCC, 0x81, 0xC9, 0x03, 0x4B,
	// Bytes 30c0 - 30ff
	0xCC, 0x8C, 0xC9, 0x03, 0x4B, 0xCC, 0xA3, 0xB5,
	0x03, 0x4B, 0xCC, 0xA7, 0xA5, 0x03, 0x4B, 0xCC,
	0xB1, 0xB5, 0x03, 0x4C, 0xCC, 0x81, 0xC9, 0x03,
	0x4C, 0xCC, 0x8C, 0xC9, 0x03, 0x4C, 0xCC, 0xA7,
	0xA5, 0x03, 0x4C, 0xCC, 0xAD, 0xB5, 0x03, 0x4C,
	0xCC, 0xB1, 0xB5, 0x03, 0x4D, 0xCC, 0x81, 0xC9,
	0x03, 0x4D, 0xCC, 0x87, 0xC9, 0x03, 0x4D, 0xCC,
	0xA3, 0xB5, 0x03, 0x4E, 0xCC, 0x80, 0xC9, 0x03,
	// Bytes 3100 - 313f
	0x4E, 0xCC, 0x81, 0xC9, 0x03, 0x4E, 0xCC, 0x83,
	0xC9, 0x03, 0x4E, 0xCC, 0x87, 0xC9, 0x03, 0x4E,
	0xCC, 0x8C, 0xC9, 0x03, 0x4E, 0xCC, 0xA3, 0xB5,
	0x03, 0x4E, 0xCC, 0xA7, 0xA5, 0x03, 0x4E, 0xCC,
	0xAD, 0xB5, 0x03, 0x4E, 0xCC, 0xB1, 0xB5, 0x03,
	0x4F, 0xCC, 0x80, 0xC9, 0x03, 0x4F, 0xCC, 0x81,
	0xC9, 0x03, 0x4F, 0xCC, 0x86, 0xC9, 0x03, 0x4F,
	0xCC, 0x89, 0xC9, 0x03, 0x4F, 0xCC, 0x8B, 0xC9,
	// Bytes 3140 - 317f
	0x03, 0x4F, 0xCC, 0x8C, 0xC9, 0x03, 0x4F, 0xCC,
	0x8F, 0xC9, 0x03, 0x4F, 0xCC, 0x91, 0xC9, 0x03,
	0x50, 0xCC, 0x81, 0xC9, 0x03, 0x50, 0xCC, 0x87,
	0xC9, 0x03, 0x52, 0xCC, 0x81, 0xC9, 0x03, 0x52,
	0xCC, 0x87, 0xC9, 0x03, 0x52, 0xCC, 0x8C, 0xC9,
	0x03, 0x52, 0xCC, 0x8F, 0xC9, 0x03, 0x52, 0xCC,
	0x91, 0xC9, 0x03, 0x52, 0xCC, 0xA7, 0xA5, 0x03,
	0x52, 0xCC, 0xB1, 0xB5, 0x03, 0x53, 0xCC, 0x82,
	// Bytes 3180 - 31bf
	0xC9, 0x03, 0x53, 0xCC, 0x87, 0xC9, 0x03, 0x53,
	0xCC, 0xA6, 0xB5, 0x03, 0x53, 0xCC, 0xA7, 0xA5,
	0x03, 0x54, 0xCC, 0x87, 0xC9, 0x03, 0x54, 0xCC,
	0x8C, 0xC9, 0x03, 0x54, 0xCC, 0xA3, 0xB5, 0x03,
	0x54, 0xCC, 0xA6, 0xB5, 0x03, 0x54, 0xCC, 0xA7,
	0xA5, 0x03, 0x54, 0xCC, 0xAD, 0xB5, 0x03, 0x54,
	0xCC, 0xB1, 0xB5, 0x03, 0x55, 0xCC, 0x80, 0xC9,
	0x03, 0x55, 0xCC, 0x81, 0xC9, 0x03, 0x55, 0xCC,
	// Bytes 31c0 - 31ff
	0x82, 0xC9, 0x03, 0x55, 0xCC, 0x86, 0xC9, 0x03,
	0x55, 0xCC, 0x89, 0xC9, 0x03, 0x55, 0xCC, 0x8A,
	0xC9, 0x03, 0x55, 0xCC, 0x8B, 0xC9, 0x03, 0x55,
	0xCC, 0x8C, 0xC9, 0x03, 0x55, 0xCC, 0x8F, 0xC9,
	0x03, 0x55, 0xCC, 0x91, 0xC9, 0x03, 0x55, 0xCC,
	0xA3, 0xB5, 0x03, 0x55, 0xCC, 0xA4, 0xB5, 0x03,
	0x55, 0xCC, 0xA8, 0xA5, 0x03, 0x55, 0xCC, 0xAD,
	0xB5, 0x03, 0x55, 0xCC, 0xB0, 0xB5, 0x03, 0x56,
	// Bytes 3200 - 323f
	0xCC, 0x83, 0xC9, 0x03, 0x56, 0xCC, 0xA3, 0xB5,
	0x03, 0x57, 0xCC, 0x80, 0xC9, 0x03, 0x57, 0xCC,
	0x81, 0xC9, 0x03, 0x57, 0xCC, 0x82, 0xC9, 0x03,
	0x57, 0xCC, 0x87, 0xC9, 0x03, 0x57, 0xCC, 0x88,
	0xC9, 0x03, 0x57, 0xCC, 0xA3, 0xB5, 0x03, 0x58,
	0xCC, 0x87, 0xC9, 0x03, 0x58, 0xCC, 0x88, 0xC9,
	0x03, 0x59, 0xCC, 0x80, 0xC9, 0x03, 0x59, 0xCC,
	0x81, 0xC9, 0x03, 0x59, 0xCC, 0x82, 0xC9, 0x03,
	// Bytes 3240 - 327f
	0x59, 0xCC, 0x83, 0xC9, 0x03, 0x59, 0xCC, 0x84,
	0xC9, 0x03, 0x59, 0xCC, 0x87, 0xC9, 0x03, 0x59,
	0xCC, 0x88, 0xC9, 0x03, 0x59, 0xCC, 0x89, 0xC9,
	0x03, 0x59, 0xCC, 0xA3, 0xB5, 0x03, 0x5A, 0xCC,
	0x81, 0xC9, 0x03, 0x5A, 0xCC, 0x82, 0xC9, 0x03,
	0x5A, 0xCC, 0x87, 0xC9, 0x03, 0x5A, 0xCC, 0x8C,
	0xC9, 0x03, 0x5A, 0xCC, 0xA3, 0xB5, 0x03, 0x5A,
	0xCC, 0xB1, 0xB5, 0x03, 0x61, 0xCC, 0x80, 0xC9,
	// Bytes 3280 - 32bf
	0x03, 0x61, 0xCC, 0x81, 0xC9, 0x03, 0x61, 0xCC,
	0x83, 0xC9, 0x03, 0x61, 0xCC, 0x84, 0xC9, 0x03,
	0x61, 0xCC, 0x89, 0xC9, 0x03, 0x61, 0xCC, 0x8C,
	0xC9, 0x03, 0x61, 0xCC, 0x8F, 0xC9, 0x03, 0x61,
	0xCC, 0x91, 0xC9, 0x03, 0x61, 0xCC, 0xA5, 0xB5,
	0x03, 0x61, 0xCC, 0xA8, 0xA5, 0x03, 0x62, 0xCC,
	0x87, 0xC9, 0x03, 0x62, 0xCC, 0xA3, 0xB5, 0x03,
	0x62, 0xCC, 0xB1, 0xB5, 0x03, 0x63, 0xCC, 0x81,
	// Bytes 32c0 - 32ff
	0xC9, 0x03, 0x63, 0xCC, 0x82, 0xC9, 0x03, 0x63,
	0xCC, 0x87, 0xC9, 0x03, 0x63, 0xCC, 0x8C, 0xC9,
	0x03, 0x64, 0xCC, 0x87, 0xC9, 0x03, 0x64, 0xCC,
	0x8C, 0xC9, 0x03, 0x64, 0xCC, 0xA3, 0xB5, 0x03,
	0x64, 0xCC, 0xA7, 0xA5, 0x03, 0x64, 0xCC, 0xAD,
	0xB5, 0x03, 0x64, 0xCC, 0xB1, 0xB5, 0x03, 0x65,
	0xCC, 0x80, 0xC9, 0x03, 0x65, 0xCC, 0x81, 0xC9,
	0x03, 0x65, 0xCC, 0x83, 0xC9, 0x03, 0x65, 0xCC,
	// Bytes 3300 - 333f
	0x86, 0xC9, 0x03, 0x65, 0xCC, 0x87, 0xC9, 0x03,
	0x65, 0xCC, 0x88, 0xC9, 0x03, 0x65, 0xCC, 0x89,
	0xC9, 0x03, 0x65, 0xCC, 0x8C, 0xC9, 0x03, 0x65,
	0xCC, 0x8F, 0xC9, 0x03, 0x65, 0xCC, 0x91, 0xC9,
	0x03, 0x65, 0xCC, 0xA8, 0xA5, 0x03, 0x65, 0xCC,
	0xAD, 0xB5, 0x03, 0x65, 0xCC, 0xB0, 0xB5, 0x03,
	0x66, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC, 0x81,
	0xC9, 0x03, 0x67, 0xCC, 0x82, 0xC9, 0x03, 0x67,
	// Bytes 3340 - 337f
	0xCC, 0x84, 0xC9, 0x03, 0x67, 0xCC, 0x86, 0xC9,
	0x03, 0x67, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC,
	0x8C, 0xC9, 0x03, 0x67, 0xCC, 0xA7, 0xA5, 0x03,
	0x68, 0xCC, 0x82, 0xC9, 0x03, 0x68, 0xCC, 0x87,
	0xC9, 0x03, 0x68, 0xCC, 0x88, 0xC9, 0x03, 0x68,
	0xCC, 0x8C, 0xC9, 0x03, 0x68, 0xCC, 0xA3, 0xB5,
	0x03, 0x68, 0xCC, 0xA7, 0xA5, 0x03, 0x68, 0xCC,
	0xAE, 0xB5, 0x03, 0x68, 0xCC, 0xB1, 0xB5, 0x03,
	// Bytes 3380 - 33bf
	0x69, 0xCC, 0x80, 0xC9, 0x03, 0x69, 0xCC, 0x81,
	0xC9, 0x03, 0x69, 0xCC, 0x82, 0xC9, 0x03, 0x69,
	0xCC, 0x83, 0xC9, 0x03, 0x69, 0xCC, 0x84, 0xC9,
	0x03, 0x69, 0xCC, 0x86, 0xC9, 0x03, 0x69, 0xCC,
	0x89, 0xC9, 0x03, 0x69, 0xCC, 0x8C, 0xC9, 0x03,
	0x69, 0xCC, 0x8F, 0xC9, 0x03, 0x69, 0xCC, 0x91,
	0xC9, 0x03, 0x69, 0xCC, 0xA3, 0xB5, 0x03, 0x69,
	0xCC, 0xA8, 0xA5, 0x03, 0x69, 0xCC, 0xB0, 0xB5,
	// Bytes 33c0 - 33ff
	0x03, 0x6A, 0xCC, 0x82, 0xC9, 0x03, 0x6A, 0xCC,
	0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0x81, 0xC9, 0x03,
	0x6B, 0xCC, 0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0xA3,
	0xB5, 0x03, 0x6B, 0xCC, 0xA7, 0xA5, 0x03, 0x6B,
	0xCC, 0xB1, 0xB5, 0x03, 0x6C, 0xCC, 0x81, 0xC9,
	0x03, 0x6C, 0xCC, 0x8C, 0xC9, 0x03, 0x6C, 0xCC,
	0xA7, 0xA5, 0x03, 0x6C, 0xCC, 0xAD, 0xB5, 0x03,
	0x6C, 0xCC, 0xB1, 0xB5, 0x03, 0x6D, 0xCC, 0x81,
	// Bytes 3400 - 343f
	0xC9, 0x03, 0x6D, 0xCC, 0x87, 0xC9, 0x03, 0x6D,
	0xCC, 0xA3, 0xB5, 0x03, 0x6E, 0xCC, 0x80, 0xC9,
	0x03, 0x6E, 0xCC, 0x81, 0xC9, 0x03, 0x6E, 0xCC,
	0x83, 0xC9, 0x03, 0x6E, 0xCC, 0x87, 0xC9, 0x03,
	0x6E, 0xCC, 0x8C, 0xC9, 0x03, 0x6E, 0xCC, 0xA3,
	0xB5, 0x03, 0x6E, 0xCC, 0xA7, 0xA5, 0x03, 0x6E,
	0xCC, 0xAD, 0xB5, 0x03, 0x6E, 0xCC, 0xB1, 0xB5,
	0x03, 0x6F, 0xCC, 0x80, 0xC9, 0x03, 0x6F, 0xCC,
	// Bytes 3440 - 347f
	0x81, 0xC9, 0x03, 0x6F, 0xCC, 0x86, 0xC9, 0x03,
	0x6F, 0xCC, 0x89, 0xC9, 0x03, 0x6F, 0xCC, 0x8B,
	0xC9, 0x03, 0x6F, 0xCC, 0x8C, 0xC9, 0x03, 0x6F,
	0xCC, 0x8F, 0xC9, 0x03, 0x6F, 0xCC, 0x91, 0xC9,
	0x03, 0x70, 0xCC, 0x81, 0xC9, 0x03, 0x70, 0xCC,
	0x87, 0xC9, 0x03, 0x72, 0xCC, 0x81, 0xC9, 0x03,
	0x72, 0xCC, 0x87, 0xC9, 0x03, 0x72, 0xCC, 0x8C,
	0xC9, 0x03, 0x72, 0xCC, 0x8F, 0xC9, 0x03, 0x72,
	// Bytes 3480 - 34bf
	0xCC, 0x91, 0xC9, 0x03, 0x72, 0xCC, 0xA7, 0xA5,
	0x03, 0x72, 0xCC, 0xB1, 0xB5, 0x03, 0x73, 0xCC,
	0x82, 0xC9, 0x03, 0x73, 0xCC, 0x87, 0xC9, 0x03,
	0x73, 0xCC, 0xA6, 0xB5, 0x03, 0x73, 0xCC, 0xA7,
	0xA5, 0x03, 0x74, 0xCC, 0x87, 0xC9, 0x03, 0x74,
	0xCC, 0x88, 0xC9, 0x03, 0x74, 0xCC, 0x8C, 0xC9,
	0x03, 0x74, 0xCC, 0xA3, 0xB5, 0x03, 0x74, 0xCC,
	0xA6, 0xB5, 0x03, 0x74, 0xCC, 0xA7, 0xA5, 0x03,
	// Bytes 34c0 - 34ff
	0x74, 0xCC, 0xAD, 0xB5, 0x03, 0x74, 0xCC, 0xB1,
	0xB5, 0x03, 0x75, 0xCC, 0x80, 0xC9, 0x03, 0x75,
	0xCC, 0x81, 0xC9, 0x03, 0x75, 0xCC, 0x82, 0xC9,
	0x03, 0x75, 0xCC, 0x86, 0xC9, 0x03, 0x75, 0xCC,
	0x89, 0xC9, 0x03, 0x75, 0xCC, 0x8A, 0xC9, 0x03,
	0x75, 0xCC, 0x8B, 0xC9, 0x03, 0x75, 0xCC, 0x8C,
	0xC9, 0x03, 0x75, 0xCC, 0x8F, 0xC9, 0x03, 0x75,
	0xCC, 0x91, 0xC9, 0x03, 0x75, 0xCC, 0xA3, 0xB5,
	// Bytes 3500 - 353f
	0x03, 0x75, 0xCC, 0xA4, 0xB5, 0x03, 0x75, 0xCC,
	0xA8, 0xA5, 0x03, 0x75, 0xCC, 0xAD, 0xB5, 0x03,
	0x75, 0xCC, 0xB0, 0xB5, 0x03, 0x76, 0xCC, 0x83,
	0xC9, 0x03, 0x76, 0xCC, 0xA3, 0xB5, 0x03, 0x77,
	0xCC, 0x80, 0xC9, 0x03, 0x77, 0xCC, 0x81, 0xC9,
	0x03, 0x77, 0xCC, 0x82, 0xC9, 0x03, 0x77, 0xCC,
	0x87, 0xC9, 0x03, 0x77, 0xCC, 0x88, 0xC9, 0x03,
	0x77, 0xCC, 0x8A, 0xC9, 0x03, 0x77, 0xCC, 0xA3,
	// Bytes 3540 - 357f
	0xB5, 0x03, 0x78, 0xCC, 0x87, 0xC9, 0x03, 0x78,
	0xCC, 0x88, 0xC9, 0x03, 0x79, 0xCC, 0x80, 0xC9,
	0x03, 0x79, 0xCC, 0x81, 0xC9, 0x03, 0x79, 0xCC,
	0x82, 0xC9, 0x03, 0x79, 0xCC, 0x83, 0xC9, 0x03,
	0x79, 0xCC, 0x84, 0xC9, 0x03, 0x79, 0xCC, 0x87,
	0xC9, 0x03, 0x79, 0xCC, 0x88, 0xC9, 0x03, 0x79,
	0xCC, 0x89, 0xC9, 0x03, 0x79, 0xCC, 0x8A, 0xC9,
	0x03, 0x79, 0xCC, 0xA3, 0xB5, 0x03, 0x7A, 0xCC,
	// Bytes 3580 - 35bf
	0x81, 0xC9, 0x03, 0x7A, 0xCC, 0x82, 0xC9, 0x03,
	0x7A, 0xCC, 0x87, 0xC9, 0x03, 0x7A, 0xCC, 0x8C,
	0xC9, 0x03, 0x7A, 0xCC, 0xA3, 0xB5, 0x03, 0x7A,
	0xCC, 0xB1, 0xB5, 0x04, 0xC2, 0xA8, 0xCC, 0x80,
	0xCA, 0x04, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x04,
	0xC2, 0xA8, 0xCD, 0x82, 0xCA, 0x04, 0xC3, 0x86,
	0xCC, 0x81, 0xC9, 0x04, 0xC3, 0x86, 0xCC, 0x84,
	0xC9, 0x04, 0xC3, 0x98, 0xCC, 0x81, 0xC9, 0x04,
	// Bytes 35c0 - 35ff
	0xC3, 0xA6, 0xCC, 0x81, 0xC9, 0x04, 0xC3, 0xA6,
	0xCC, 0x84, 0xC9, 0x04, 0xC3, 0xB8, 0xCC, 0x81,
	0xC9, 0x04, 0xC5, 0xBF, 0xCC, 0x87, 0xC9, 0x04,
	0xC6, 0xB7, 0xCC, 0x8C, 0xC9, 0x04, 0xCA, 0x92,
	0xCC, 0x8C, 0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x80,
	0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x81, 0xC9, 0x04,
	0xCE, 0x91, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0x91,
	0xCC, 0x86, 0xC9, 0x04, 0xCE, 0x91, 0xCD, 0x85,
	// Bytes 3600 - 363f
	0xD9, 0x04, 0xCE, 0x95, 0xCC, 0x80, 0xC9, 0x04,
	0xCE, 0x95, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x97,
	0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x97, 0xCC, 0x81,
	0xC9, 0x04, 0xCE, 0x97, 0xCD, 0x85, 0xD9, 0x04,
	0xCE, 0x99, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x99,
	0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x84,
	0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x86, 0xC9, 0x04,
	0xCE, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0x9F,
	// Bytes 3640 - 367f
	0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x9F, 0xCC, 0x81,
	0xC9, 0x04, 0xCE, 0xA1, 0xCC, 0x94, 0xC9, 0x04,
	0xCE, 0xA5, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA5,
	0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x84,
	0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x86, 0xC9, 0x04,
	0xCE, 0xA5, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0xA9,
	0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA9, 0xCC, 0x81,
	0xC9, 0x04, 0xCE, 0xA9, 0xCD, 0x85, 0xD9, 0x04,
	// Bytes 3680 - 36bf
	0xCE, 0xB1, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB1,
	0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB1, 0xCD, 0x85,
	0xD9, 0x04, 0xCE, 0xB5, 0xCC, 0x80, 0xC9, 0x04,
	0xCE, 0xB5, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xB7,
	0xCD, 0x85, 0xD9, 0x04, 0xCE, 0xB9, 0xCC, 0x80,
	0xC9, 0x04, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x04,
	0xCE, 0xB9, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB9,
	0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB9, 0xCD, 0x82,
	// Bytes 36c0 - 36ff
	0xC9, 0x04, 0xCE, 0xBF, 0xCC, 0x80, 0xC9, 0x04,
	0xCE, 0xBF, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x81,
	0xCC, 0x93, 0xC9, 0x04, 0xCF, 0x81, 0xCC, 0x94,
	0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x80, 0xC9, 0x04,
	0xCF, 0x85, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x85,
	0xCC, 0x84, 0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x86,
	0xC9, 0x04, 0xCF, 0x85, 0xCD, 0x82, 0xC9, 0x04,
	0xCF, 0x89, 0xCD, 0x85, 0xD9, 0x04, 0xCF, 0x92,
	// Bytes 3700 - 373f
	0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x92, 0xCC, 0x88,
	0xC9, 0x04, 0xD0, 0x86, 0xCC, 0x88, 0xC9, 0x04,
	0xD0, 0x90, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x90,
	0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x93, 0xCC, 0x81,
	0xC9, 0x04, 0xD0, 0x95, 0xCC, 0x80, 0xC9, 0x04,
	0xD0, 0x95, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x95,
	0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x86,
	0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x88, 0xC9, 0x04,
	// Bytes 3740 - 377f
	0xD0, 0x97, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x98,
	0xCC, 0x80, 0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x84,
	0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x86, 0xC9, 0x04,
	0xD0, 0x98, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x9A,
	0xCC, 0x81, 0xC9, 0x04, 0xD0, 0x9E, 0xCC, 0x88,
	0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x84, 0xC9, 0x04,
	0xD0, 0xA3, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xA3,
	0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x8B,
	// Bytes 3780 - 37bf
	0xC9, 0x04, 0xD0, 0xA7, 0xCC, 0x88, 0xC9, 0x04,
	0xD0, 0xAB, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xAD,
	0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x86,
	0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x88, 0xC9, 0x04,
	0xD0, 0xB3, 0xCC, 0x81, 0xC9, 0x04, 0xD0, 0xB5,
	0xCC, 0x80, 0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x86,
	0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x88, 0xC9, 0x04,
	0xD0, 0xB6, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB6,
	// Bytes 37c0 - 37ff
	0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB7, 0xCC, 0x88,
	0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x80, 0xC9, 0x04,
	0xD0, 0xB8, 0xCC, 0x84, 0xC9, 0x04, 0xD0, 0xB8,
	0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x88,
	0xC9, 0x04, 0xD0, 0xBA, 0xCC, 0x81, 0xC9, 0x04,
	0xD0, 0xBE, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x83,
	0xCC, 0x84, 0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x86,
	0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x88, 0xC9, 0x04,
	// Bytes 3800 - 383f
	0xD1, 0x83, 0xCC, 0x8B, 0xC9, 0x04, 0xD1, 0x87,
	0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x8B, 0xCC, 0x88,
	0xC9, 0x04, 0xD1, 0x8D, 0xCC, 0x88, 0xC9, 0x04,
	0xD1, 0x96, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0xB4,
	0xCC, 0x8F, 0xC9, 0x04, 0xD1, 0xB5, 0xCC, 0x8F,
	0xC9, 0x04, 0xD3, 0x98, 0xCC, 0x88, 0xC9, 0x04,
	0xD3, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA8,
	0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA9, 0xCC, 0x88,
	// Bytes 3840 - 387f
	0xC9, 0x04, 0xD8, 0xA7, 0xD9, 0x93, 0xC9, 0x04,
	0xD8, 0xA7, 0xD9, 0x94, 0xC9, 0x04, 0xD8, 0xA7,
	0xD9, 0x95, 0xB5, 0x04, 0xD9, 0x88, 0xD9, 0x94,
	0xC9, 0x04, 0xD9, 0x8A, 0xD9, 0x94, 0xC9, 0x04,
	0xDB, 0x81, 0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x92,
	0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x95, 0xD9, 0x94,
	0xC9, 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x80, 0xCA,
	0x05, 0x41, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05,
	// Bytes 3880 - 38bf
	0x41, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x41,
	0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x41, 0xCC,
	0x86, 0xCC, 0x80, 0xCA, 0x05, 0x41, 0xCC, 0x86,
	0xCC, 0x81, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC,
	0x83, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x89,
	0xCA, 0x05, 0x41, 0xCC, 0x87, 0xCC, 0x84, 0xCA,
	0x05, 0x41, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05,
	0x41, 0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x41,
	// Bytes 38c0 - 38ff
	0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x41, 0xCC,
	0xA3, 0xCC, 0x86, 0xCA, 0x05, 0x43, 0xCC, 0xA7,
	0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC,
	0x80, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x81,
	0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x83, 0xCA,
	0x05, 0x45, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05,
	0x45, 0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x45,
	0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC,
	// Bytes 3900 - 393f
	0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x45, 0xCC, 0xA7,
	0xCC, 0x86, 0xCA, 0x05, 0x49, 0xCC, 0x88, 0xCC,
	0x81, 0xCA, 0x05, 0x4C, 0xCC, 0xA3, 0xCC, 0x84,
	0xCA, 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x80, 0xCA,
	0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05,
	0x4F, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x4F,
	0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x4F, 0xCC,
	0x83, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x83,
	// Bytes 3940 - 397f
	0xCC, 0x84, 0xCA, 0x05, 0x4F, 0xCC, 0x83, 0xCC,
	0x88, 0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x80,
	0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x81, 0xCA,
	0x05, 0x4F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05,
	0x4F, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x4F,
	0xCC, 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x4F, 0xCC,
	0x9B, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x9B,
	0xCC, 0x83, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC,
	// Bytes 3980 - 39bf
	0x89, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0xA3,
	0xB6, 0x05, 0x4F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA,
	0x05, 0x4F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05,
	0x52, 0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x53,
	0xCC, 0x81, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC,
	0x8C, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC, 0xA3,
	0xCC, 0x87, 0xCA, 0x05, 0x55, 0xCC, 0x83, 0xCC,
	0x81, 0xCA, 0x05, 0x55, 0xCC, 0x84, 0xCC, 0x88,
	// Bytes 39c0 - 39ff
	0xCA, 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x80, 0xCA,
	0x05, 0x55, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05,
	0x55, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x55,
	0xCC, 0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x55, 0xCC,
	0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x55, 0xCC, 0x9B,
	0xCC, 0x81, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC,
	0x83, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x89,
	0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6,
	// Bytes 3a00 - 3a3f
	0x05, 0x61, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05,
	0x61, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x61,
	0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x61, 0xCC,
	0x82, 0xCC, 0x89, 0xCA, 0x05, 0x61, 0xCC, 0x86,
	0xCC, 0x80, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC,
	0x81, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x83,
	0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x89, 0xCA,
	0x05, 0x61, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05,
	// Bytes 3a40 - 3a7f
	0x61, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x61,
	0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x61, 0xCC,
	0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x61, 0xCC, 0xA3,
	0xCC, 0x86, 0xCA, 0x05, 0x63, 0xCC, 0xA7, 0xCC,
	0x81, 0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x80,
	0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x81, 0xCA,
	0x05, 0x65, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05,
	0x65, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x65,
	// Bytes 3a80 - 3abf
	0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x65, 0xCC,
	0x84, 0xCC, 0x81, 0xCA, 0x05, 0x65, 0xCC, 0xA3,
	0xCC, 0x82, 0xCA, 0x05, 0x65, 0xCC, 0xA7, 0xCC,
	0x86, 0xCA, 0x05, 0x69, 0xCC, 0x88, 0xCC, 0x81,
	0xCA, 0x05, 0x6C, 0xCC, 0xA3, 0xCC, 0x84, 0xCA,
	0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05,
	0x6F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x6F,
	0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x6F, 0xCC,
	// Bytes 3ac0 - 3aff
	0x82, 0xCC, 0x89, 0xCA, 0x05, 0x6F, 0xCC, 0x83,
	0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC,
	0x84, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC, 0x88,
	0xCA, 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x80, 0xCA,
	0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05,
	0x6F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, 0x6F,
	0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x6F, 0xCC,
	0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x6F, 0xCC, 0x9B,
	// Bytes 3b00 - 3b3f
	0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC,
	0x83, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x89,
	0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6,
	0x05, 0x6F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05,
	0x6F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05, 0x72,
	0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x73, 0xCC,
	0x81, 0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0x8C,
	0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0xA3, 0xCC,
	// Bytes 3b40 - 3b7f
	0x87, 0xCA, 0x05, 0x75, 0xCC, 0x83, 0xCC, 0x81,
	0xCA, 0x05, 0x75, 0xCC, 0x84, 0xCC, 0x88, 0xCA,
	0x05, 0x75, 0xCC, 0x88, 0xCC, 0x80, 0xCA, 0x05,
	0x75, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05, 0x75,
	0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x75, 0xCC,
	0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x75, 0xCC, 0x9B,
	0xCC, 0x80, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC,
	0x81, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x83,
	// Bytes 3b80 - 3bbf
	0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x89, 0xCA,
	0x05, 0x75, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, 0x05,
	0xE1, 0xBE, 0xBF, 0xCC, 0x80, 0xCA, 0x05, 0xE1,
	0xBE, 0xBF, 0xCC, 0x81, 0xCA, 0x05, 0xE1, 0xBE,
	0xBF, 0xCD, 0x82, 0xCA, 0x05, 0xE1, 0xBF, 0xBE,
	0xCC, 0x80, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCC,
	0x81, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCD, 0x82,
	0xCA, 0x05, 0xE2, 0x86, 0x90, 0xCC, 0xB8, 0x05,
	// Bytes 3bc0 - 3bff
	0x05, 0xE2, 0x86, 0x92, 0xCC, 0xB8, 0x05, 0x05,
	0xE2, 0x86, 0x94, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
	0x87, 0x90, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87,
	0x92, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, 0x94,
	0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x83, 0xCC,
	0xB8, 0x05, 0x05, 0xE2, 0x88, 0x88, 0xCC, 0xB8,
	0x05, 0x05, 0xE2, 0x88, 0x8B, 0xCC, 0xB8, 0x05,
	0x05, 0xE2, 0x88, 0xA3, 0xCC, 0xB8, 0x05, 0x05,
	// Bytes 3c00 - 3c3f
	0xE2, 0x88, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
	0x88, 0xBC, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89,
	0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x85,
	0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x88, 0xCC,
	0xB8, 0x05, 0x05, 0xE2, 0x89, 0x8D, 0xCC, 0xB8,
	0x05, 0x05, 0xE2, 0x89, 0xA1, 0xCC, 0xB8, 0x05,
	0x05, 0xE2, 0x89, 0xA4, 0xCC, 0xB8, 0x05, 0x05,
	0xE2, 0x89, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
	// Bytes 3c40 - 3c7f
	0x89, 0xB2, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89,
	0xB3, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB6,
	0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB7, 0xCC,
	0xB8, 0x05, 0x05, 0xE2, 0x89, 0xBA, 0xCC, 0xB8,
	0x05, 0x05, 0xE2, 0x89, 0xBB, 0xCC, 0xB8, 0x05,
	0x05, 0xE2, 0x89, 0xBC, 0xCC, 0xB8, 0x05, 0x05,
	0xE2, 0x89, 0xBD, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
	0x8A, 0x82, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A,
	// Bytes 3c80 - 3cbf
	0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x86,
	0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x87, 0xCC,
	0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x91, 0xCC, 0xB8,
	0x05, 0x05, 0xE2, 0x8A, 0x92, 0xCC, 0xB8, 0x05,
	0x05, 0xE2, 0x8A, 0xA2, 0xCC, 0xB8, 0x05, 0x05,
	0xE2, 0x8A, 0xA8, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
	0x8A, 0xA9, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A,
	0xAB, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB2,
	// Bytes 3cc0 - 3cff
	0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB3, 0xCC,
	0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB4, 0xCC, 0xB8,
	0x05, 0x05, 0xE2, 0x8A, 0xB5, 0xCC, 0xB8, 0x05,
	0x06, 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
	// Bytes 3d00 - 3d3f
	0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x82, 0xCA,
	0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
	// Bytes 3d40 - 3d7f
	0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCD, 0x82, 0xCA,
	0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCD, 0x82, 0xCA,
	// Bytes 3d80 - 3dbf
	0x06, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
	// Bytes 3dc0 - 3dff
	0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB7, 0xCD, 0x82, 0xCD, 0x85, 0xDA,
	// Bytes 3e00 - 3e3f
	0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x82, 0xCA,
	0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCD, 0x82, 0xCA,
	0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
	// Bytes 3e40 - 3e7f
	0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCD, 0x82, 0xCA,
	0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
	0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x80, 0xCA,
	0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xCA,
	0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x82, 0xCA,
	// Bytes 3e80 - 3ebf
	0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
	0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
	0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCD, 0x82, 0xCA,
	0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
	0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
	0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x82, 0xCA,
	0x06, 0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x85, 0xDA,
	0x06, 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x85, 0xDA,
	// Bytes 3ec0 - 3eff
	0x06, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
	0x06, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
	0x06, 0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x85, 0xDA,
	0x06, 0xE0, 0xA4, 0xA8, 0xE0, 0xA4, 0xBC, 0x09,
	0x06, 0xE0, 0xA4, 0xB0, 0xE0, 0xA4, 0xBC, 0x09,
	0x06, 0xE0, 0xA4, 0xB3, 0xE0, 0xA4, 0xBC, 0x09,
	0x06, 0xE0, 0xB1, 0x86, 0xE0, 0xB1, 0x96, 0x85,
	0x06, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8A, 0x11,
	// Bytes 3f00 - 3f3f
	0x06, 0xE3, 0x81, 0x86, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x8B, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x8D, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x8F, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x91, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x93, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x95, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x97, 0xE3, 0x82, 0x99, 0x0D,
	// Bytes 3f40 - 3f7f
	0x06, 0xE3, 0x81, 0x99, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x9B, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x9D, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x9F, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0xA1, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0xA4, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0xA6, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0xA8, 0xE3, 0x82, 0x99, 0x0D,
	// Bytes 3f80 - 3fbf
	0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x9A, 0x0D,
	0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x9A, 0x0D,
	0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x9A, 0x0D,
	0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x9A, 0x0D,
	// Bytes 3fc0 - 3fff
	0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x9A, 0x0D,
	0x06, 0xE3, 0x82, 0x9D, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, 0x0D,
	// Bytes 4000 - 403f
	0x06, 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xBD, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0x81, 0xE3, 0x82, 0x99, 0x0D,
	// Bytes 4040 - 407f
	0x06, 0xE3, 0x83, 0x84, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0x0D,
	0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0x0D,
	0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, 0x0D,
	// Bytes 4080 - 40bf
	0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x9A, 0x0D,
	0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0x0D,
	0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0x0D,
	0x06, 0xE3, 0x83, 0xAF, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0xB0, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0xB1, 0xE3, 0x82, 0x99, 0x0D,
	// Bytes 40c0 - 40ff
	0x06, 0xE3, 0x83, 0xB2, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0xBD, 0xE3, 0x82, 0x99, 0x0D,
	0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCD,
	0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC,
	0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC,
	0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
	0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB,
	0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCD,
	// Bytes 4100 - 413f
	0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCD,
	0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC,
	0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
	0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB,
	0x08, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCD,
	0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, 0x94, 0xCC,
	0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC,
	0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
	// Bytes 4140 - 417f
	0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB,
	0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCD,
	0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC,
	0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC,
	0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
	0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB,
	0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCD,
	0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCD,
	// Bytes 4180 - 41bf
	0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC,
	0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
	0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB,
	0x08, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCD,
	0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, 0x94, 0xCC,
	0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC,
	0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
	0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB,
	// Bytes 41c0 - 41ff
	0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCD,
	0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC,
	0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC,
	0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
	0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB,
	0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCD,
	0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCD,
	0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC,
	// Bytes 4200 - 423f
	0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF,
	0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB,
	0x08, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCD,
	0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, 0x94, 0xCC,
	0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC,
	0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCF,
	0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB,
	0x08, 0xF0, 0x91, 0x82, 0x99, 0xF0, 0x91, 0x82,
	// Bytes 4240 - 427f
	0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82, 0x9B, 0xF0,
	0x91, 0x82, 0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82,
	0xA5, 0xF0, 0x91, 0x82, 0xBA, 0x09, 0x42, 0xC2,
	0xB4, 0x01, 0x43, 0x20, 0xCC, 0x81, 0xC9, 0x43,
	0x20, 0xCC, 0x83, 0xC9, 0x43, 0x20, 0xCC, 0x84,
	0xC9, 0x43, 0x20, 0xCC, 0x85, 0xC9, 0x43, 0x20,
	0xCC, 0x86, 0xC9, 0x43, 0x20, 0xCC, 0x87, 0xC9,
	0x43, 0x20, 0xCC, 0x88, 0xC9, 0x43, 0x20, 0xCC,
	// Bytes 4280 - 42bf
	0x8A, 0xC9, 0x43, 0x20, 0xCC, 0x8B, 0xC9, 0x43,
	0x20, 0xCC, 0x93, 0xC9, 0x43, 0x20, 0xCC, 0x94,
	0xC9, 0x43, 0x20, 0xCC, 0xA7, 0xA5, 0x43, 0x20,
	0xCC, 0xA8, 0xA5, 0x43, 0x20, 0xCC, 0xB3, 0xB5,
	0x43, 0x20, 0xCD, 0x82, 0xC9, 0x43, 0x20, 0xCD,
	0x85, 0xD9, 0x43, 0x20, 0xD9, 0x8B, 0x59, 0x43,
	0x20, 0xD9, 0x8C, 0x5D, 0x43, 0x20, 0xD9, 0x8D,
	0x61, 0x43, 0x20, 0xD9, 0x8E, 0x65, 0x43, 0x20,
	// Bytes 42c0 - 42ff
	0xD9, 0x8F, 0x69, 0x43, 0x20, 0xD9, 0x90, 0x6D,
	0x43, 0x20, 0xD9, 0x91, 0x71, 0x43, 0x20, 0xD9,
	0x92, 0x75, 0x43, 0x41, 0xCC, 0x8A, 0xC9, 0x43,
	0x73, 0xCC, 0x87, 0xC9, 0x44, 0x20, 0xE3, 0x82,
	0x99, 0x0D, 0x44, 0x20, 0xE3, 0x82, 0x9A, 0x0D,
	0x44, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x44, 0xCE,
	0x91, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0x95, 0xCC,
	0x81, 0xC9, 0x44, 0xCE, 0x97, 0xCC, 0x81, 0xC9,
	// Bytes 4300 - 433f
	0x44, 0xCE, 0x99, 0xCC, 0x81, 0xC9, 0x44, 0xCE,
	0x9F, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC,
	0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC, 0x88, 0xC9,
	0x44, 0xCE, 0xA9, 0xCC, 0x81, 0xC9, 0x44, 0xCE,
	0xB1, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xB5, 0xCC,
	0x81, 0xC9, 0x44, 0xCE, 0xB7, 0xCC, 0x81, 0xC9,
	0x44, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x44, 0xCE,
	0xBF, 0xCC, 0x81, 0xC9, 0x44, 0xCF, 0x85, 0xCC,
	// Bytes 4340 - 437f
	0x81, 0xC9, 0x44, 0xCF, 0x89, 0xCC, 0x81, 0xC9,
	0x44, 0xD7, 0x90, 0xD6, 0xB7, 0x31, 0x44, 0xD7,
	0x90, 0xD6, 0xB8, 0x35, 0x44, 0xD7, 0x90, 0xD6,
	0xBC, 0x41, 0x44, 0xD7, 0x91, 0xD6, 0xBC, 0x41,
	0x44, 0xD7, 0x91, 0xD6, 0xBF, 0x49, 0x44, 0xD7,
	0x92, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x93, 0xD6,
	0xBC, 0x41, 0x44, 0xD7, 0x94, 0xD6, 0xBC, 0x41,
	0x44, 0xD7, 0x95, 0xD6, 0xB9, 0x39, 0x44, 0xD7,
	// Bytes 4380 - 43bf
	0x95, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x96, 0xD6,
	0xBC, 0x41, 0x44, 0xD7, 0x98, 0xD6, 0xBC, 0x41,
	0x44, 0xD7, 0x99, 0xD6, 0xB4, 0x25, 0x44, 0xD7,
	0x99, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9A, 0xD6,
	0xBC, 0x41, 0x44, 0xD7, 0x9B, 0xD6, 0xBC, 0x41,
	0x44, 0xD7, 0x9B, 0xD6, 0xBF, 0x49, 0x44, 0xD7,
	0x9C, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9E, 0xD6,
	0xBC, 0x41, 0x44, 0xD7, 0xA0, 0xD6, 0xBC, 0x41,
	// Bytes 43c0 - 43ff
	0x44, 0xD7, 0xA1, 0xD6, 0xBC, 0x41, 0x44, 0xD7,
	0xA3, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6,
	0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6, 0xBF, 0x49,
	0x44, 0xD7, 0xA6, 0xD6, 0xBC, 0x41, 0x44, 0xD7,
	0xA7, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA8, 0xD6,
	0xBC, 0x41, 0x44, 0xD7, 0xA9, 0xD6, 0xBC, 0x41,
	0x44, 0xD7, 0xA9, 0xD7, 0x81, 0x4D, 0x44, 0xD7,
	0xA9, 0xD7, 0x82, 0x51, 0x44, 0xD7, 0xAA, 0xD6,
	// Bytes 4400 - 443f
	0xBC, 0x41, 0x44, 0xD7, 0xB2, 0xD6, 0xB7, 0x31,
	0x44, 0xD8, 0xA7, 0xD9, 0x8B, 0x59, 0x44, 0xD8,
	0xA7, 0xD9, 0x93, 0xC9, 0x44, 0xD8, 0xA7, 0xD9,
	0x94, 0xC9, 0x44, 0xD8, 0xA7, 0xD9, 0x95, 0xB5,
	0x44, 0xD8, 0xB0, 0xD9, 0xB0, 0x79, 0x44, 0xD8,
	0xB1, 0xD9, 0xB0, 0x79, 0x44, 0xD9, 0x80, 0xD9,
	0x8B, 0x59, 0x44, 0xD9, 0x80, 0xD9, 0x8E, 0x65,
	0x44, 0xD9, 0x80, 0xD9, 0x8F, 0x69, 0x44, 0xD9,
	// Bytes 4440 - 447f
	0x80, 0xD9, 0x90, 0x6D, 0x44, 0xD9, 0x80, 0xD9,
	0x91, 0x71, 0x44, 0xD9, 0x80, 0xD9, 0x92, 0x75,
	0x44, 0xD9, 0x87, 0xD9, 0xB0, 0x79, 0x44, 0xD9,
	0x88, 0xD9, 0x94, 0xC9, 0x44, 0xD9, 0x89, 0xD9,
	0xB0, 0x79, 0x44, 0xD9, 0x8A, 0xD9, 0x94, 0xC9,
	0x44, 0xDB, 0x92, 0xD9, 0x94, 0xC9, 0x44, 0xDB,
	0x95, 0xD9, 0x94, 0xC9, 0x45, 0x20, 0xCC, 0x88,
	0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCC,
	// Bytes 4480 - 44bf
	0x81, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCD, 0x82,
	0xCA, 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
	0x45, 0x20, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x45,
	0x20, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x45, 0x20,
	0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC,
	0x94, 0xCC, 0x81, 0xCA, 0x45, 0x20, 0xCC, 0x94,
	0xCD, 0x82, 0xCA, 0x45, 0x20, 0xD9, 0x8C, 0xD9,
	0x91, 0x72, 0x45, 0x20, 0xD9, 0x8D, 0xD9, 0x91,
	// Bytes 44c0 - 44ff
	0x72, 0x45, 0x20, 0xD9, 0x8E, 0xD9, 0x91, 0x72,
	0x45, 0x20, 0xD9, 0x8F, 0xD9, 0x91, 0x72, 0x45,
	0x20, 0xD9, 0x90, 0xD9, 0x91, 0x72, 0x45, 0x20,
	0xD9, 0x91, 0xD9, 0xB0, 0x7A, 0x45, 0xE2, 0xAB,
	0x9D, 0xCC, 0xB8, 0x05, 0x46, 0xCE, 0xB9, 0xCC,
	0x88, 0xCC, 0x81, 0xCA, 0x46, 0xCF, 0x85, 0xCC,
	0x88, 0xCC, 0x81, 0xCA, 0x46, 0xD7, 0xA9, 0xD6,
	0xBC, 0xD7, 0x81, 0x4E, 0x46, 0xD7, 0xA9, 0xD6,
	// Bytes 4500 - 453f
	0xBC, 0xD7, 0x82, 0x52, 0x46, 0xD9, 0x80, 0xD9,
	0x8E, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9,
	0x8F, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9,
	0x90, 0xD9, 0x91, 0x72, 0x46, 0xE0, 0xA4, 0x95,
	0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x96,
	0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x97,
	0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x9C,
	0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA1,
	// Bytes 4540 - 457f
	0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA2,
	0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAB,
	0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAF,
	0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA1,
	0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA2,
	0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xAF,
	0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x96,
	0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x97,
	// Bytes 4580 - 45bf
	0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x9C,
	0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xAB,
	0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB2,
	0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB8,
	0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA1,
	0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA2,
	0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xBE, 0xB2,
	0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE0, 0xBE, 0xB3,
	// Bytes 45c0 - 45ff
	0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE3, 0x83, 0x86,
	0xE3, 0x82, 0x99, 0x0D, 0x48, 0xF0, 0x9D, 0x85,
	0x97, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, 0x48, 0xF0,
	0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xAD,
	0x48, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85,
	0xA5, 0xAD, 0x48, 0xF0, 0x9D, 0x86, 0xBA, 0xF0,
	0x9D, 0x85, 0xA5, 0xAD, 0x49, 0xE0, 0xBE, 0xB2,
	0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x49,
	// Bytes 4600 - 463f
	0xE0, 0xBE, 0xB3, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE,
	0x80, 0x9E, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0,
	0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE,
	0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85,
	0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0,
	0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0,
	0x9D, 0x85, 0xB0, 0xAE, 0x4C, 0xF0, 0x9D, 0x85,
	0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85,
	// Bytes 4640 - 467f
	0xB1, 0xAE, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0,
	0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB2, 0xAE,
	0x4C, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85,
	0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE, 0x4C, 0xF0,
	0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xF0,
	0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0, 0x9D, 0x86,
	0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85,
	0xAE, 0xAE, 0x4C, 0xF0, 0x9D, 0x86, 0xBA, 0xF0,
	// Bytes 4680 - 46bf
	0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE,
	0x83, 0x41, 0xCC, 0x82, 0xC9, 0x83, 0x41, 0xCC,
	0x86, 0xC9, 0x83, 0x41, 0xCC, 0x87, 0xC9, 0x83,
	0x41, 0xCC, 0x88, 0xC9, 0x83, 0x41, 0xCC, 0x8A,
	0xC9, 0x83, 0x41, 0xCC, 0xA3, 0xB5, 0x83, 0x43,
	0xCC, 0xA7, 0xA5, 0x83, 0x45, 0xCC, 0x82, 0xC9,
	0x83, 0x45, 0xCC, 0x84, 0xC9, 0x83, 0x45, 0xCC,
	0xA3, 0xB5, 0x83, 0x45, 0xCC, 0xA7, 0xA5, 0x83,
	// Bytes 46c0 - 46ff
	0x49, 0xCC, 0x88, 0xC9, 0x83, 0x4C, 0xCC, 0xA3,
	0xB5, 0x83, 0x4F, 0xCC, 0x82, 0xC9, 0x83, 0x4F,
	0xCC, 0x83, 0xC9, 0x83, 0x4F, 0xCC, 0x84, 0xC9,
	0x83, 0x4F, 0xCC, 0x87, 0xC9, 0x83, 0x4F, 0xCC,
	0x88, 0xC9, 0x83, 0x4F, 0xCC, 0x9B, 0xAD, 0x83,
	0x4F, 0xCC, 0xA3, 0xB5, 0x83, 0x4F, 0xCC, 0xA8,
	0xA5, 0x83, 0x52, 0xCC, 0xA3, 0xB5, 0x83, 0x53,
	0xCC, 0x81, 0xC9, 0x83, 0x53, 0xCC, 0x8C, 0xC9,
	// Bytes 4700 - 473f
	0x83, 0x53, 0xCC, 0xA3, 0xB5, 0x83, 0x55, 0xCC,
	0x83, 0xC9, 0x83, 0x55, 0xCC, 0x84, 0xC9, 0x83,
	0x55, 0xCC, 0x88, 0xC9, 0x83, 0x55, 0xCC, 0x9B,
	0xAD, 0x83, 0x61, 0xCC, 0x82, 0xC9, 0x83, 0x61,
	0xCC, 0x86, 0xC9, 0x83, 0x61, 0xCC, 0x87, 0xC9,
	0x83, 0x61, 0xCC, 0x88, 0xC9, 0x83, 0x61, 0xCC,
	0x8A, 0xC9, 0x83, 0x61, 0xCC, 0xA3, 0xB5, 0x83,
	0x63, 0xCC, 0xA7, 0xA5, 0x83, 0x65, 0xCC, 0x82,
	// Bytes 4740 - 477f
	0xC9, 0x83, 0x65, 0xCC, 0x84, 0xC9, 0x83, 0x65,
	0xCC, 0xA3, 0xB5, 0x83, 0x65, 0xCC, 0xA7, 0xA5,
	0x83, 0x69, 0xCC, 0x88, 0xC9, 0x83, 0x6C, 0xCC,
	0xA3, 0xB5, 0x83, 0x6F, 0xCC, 0x82, 0xC9, 0x83,
	0x6F, 0xCC, 0x83, 0xC9, 0x83, 0x6F, 0xCC, 0x84,
	0xC9, 0x83, 0x6F, 0xCC, 0x87, 0xC9, 0x83, 0x6F,
	0xCC, 0x88, 0xC9, 0x83, 0x6F, 0xCC, 0x9B, 0xAD,
	0x83, 0x6F, 0xCC, 0xA3, 0xB5, 0x83, 0x6F, 0xCC,
	// Bytes 4780 - 47bf
	0xA8, 0xA5, 0x83, 0x72, 0xCC, 0xA3, 0xB5, 0x83,
	0x73, 0xCC, 0x81, 0xC9, 0x83, 0x73, 0xCC, 0x8C,
	0xC9, 0x83, 0x73, 0xCC, 0xA3, 0xB5, 0x83, 0x75,
	0xCC, 0x83, 0xC9, 0x83, 0x75, 0xCC, 0x84, 0xC9,
	0x83, 0x75, 0xCC, 0x88, 0xC9, 0x83, 0x75, 0xCC,
	0x9B, 0xAD, 0x84, 0xCE, 0x91, 0xCC, 0x93, 0xC9,
	0x84, 0xCE, 0x91, 0xCC, 0x94, 0xC9, 0x84, 0xCE,
	0x95, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x95, 0xCC,
	// Bytes 47c0 - 47ff
	0x94, 0xC9, 0x84, 0xCE, 0x97, 0xCC, 0x93, 0xC9,
	0x84, 0xCE, 0x97, 0xCC, 0x94, 0xC9, 0x84, 0xCE,
	0x99, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x99, 0xCC,
	0x94, 0xC9, 0x84, 0xCE, 0x9F, 0xCC, 0x93, 0xC9,
	0x84, 0xCE, 0x9F, 0xCC, 0x94, 0xC9, 0x84, 0xCE,
	0xA5, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xA9, 0xCC,
	0x93, 0xC9, 0x84, 0xCE, 0xA9, 0xCC, 0x94, 0xC9,
	0x84, 0xCE, 0xB1, 0xCC, 0x80, 0xC9, 0x84, 0xCE,
	// Bytes 4800 - 483f
	0xB1, 0xCC, 0x81, 0xC9, 0x84, 0xCE, 0xB1, 0xCC,
	0x93, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, 0x94, 0xC9,
	0x84, 0xCE, 0xB1, 0xCD, 0x82, 0xC9, 0x84, 0xCE,
	0xB5, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB5, 0xCC,
	0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCC, 0x80, 0xC9,
	0x84, 0xCE, 0xB7, 0xCC, 0x81, 0xC9, 0x84, 0xCE,
	0xB7, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB7, 0xCC,
	0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCD, 0x82, 0xC9,
	// Bytes 4840 - 487f
	0x84, 0xCE, 0xB9, 0xCC, 0x88, 0xC9, 0x84, 0xCE,
	0xB9, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB9, 0xCC,
	0x94, 0xC9, 0x84, 0xCE, 0xBF, 0xCC, 0x93, 0xC9,
	0x84, 0xCE, 0xBF, 0xCC, 0x94, 0xC9, 0x84, 0xCF,
	0x85, 0xCC, 0x88, 0xC9, 0x84, 0xCF, 0x85, 0xCC,
	0x93, 0xC9, 0x84, 0xCF, 0x85, 0xCC, 0x94, 0xC9,
	0x84, 0xCF, 0x89, 0xCC, 0x80, 0xC9, 0x84, 0xCF,
	0x89, 0xCC, 0x81, 0xC9, 0x84, 0xCF, 0x89, 0xCC,
	// Bytes 4880 - 48bf
	0x93, 0xC9, 0x84, 0xCF, 0x89, 0xCC, 0x94, 0xC9,
	0x84, 0xCF, 0x89, 0xCD, 0x82, 0xC9, 0x86, 0xCE,
	0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	0x91, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	0x91, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
	0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	0x91, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
	// Bytes 48c0 - 48ff
	0x97, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
	0x97, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	0x97, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
	0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	0xA9, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	// Bytes 4900 - 493f
	0xA9, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
	0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	0xA9, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
	0xB1, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
	0xB1, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	// Bytes 4940 - 497f
	0xB1, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
	0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	0xB7, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	0xB7, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
	0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	0xB7, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCF,
	// Bytes 4980 - 49bf
	0x89, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCF,
	0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCF,
	0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCF,
	0x89, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCF,
	0x89, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCF,
	0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x42, 0xCC,
	0x80, 0xC9, 0x32, 0x42, 0xCC, 0x81, 0xC9, 0x32,
	0x42, 0xCC, 0x93, 0xC9, 0x32, 0x43, 0xE1, 0x85,
	// Bytes 49c0 - 49ff
	0xA1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA2, 0x01,
	0x00, 0x43, 0xE1, 0x85, 0xA3, 0x01, 0x00, 0x43,
	0xE1, 0x85, 0xA4, 0x01, 0x00, 0x43, 0xE1, 0x85,
	0xA5, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA6, 0x01,
	0x00, 0x43, 0xE1, 0x85, 0xA7, 0x01, 0x00, 0x43,
	0xE1, 0x85, 0xA8, 0x01, 0x00, 0x43, 0xE1, 0x85,
	0xA9, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAA, 0x01,
	0x00, 0x43, 0xE1, 0x85, 0xAB, 0x01, 0x00, 0x43,
	// Bytes 4a00 - 4a3f
	0xE1, 0x85, 0xAC, 0x01, 0x00, 0x43, 0xE1, 0x85,
	0xAD, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAE, 0x01,
	0x00, 0x43, 0xE1, 0x85, 0xAF, 0x01, 0x00, 0x43,
	0xE1, 0x85, 0xB0, 0x01, 0x00, 0x43, 0xE1, 0x85,
	0xB1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB2, 0x01,
	0x00, 0x43, 0xE1, 0x85, 0xB3, 0x01, 0x00, 0x43,
	0xE1, 0x85, 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x85,
	0xB5, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xAA, 0x01,
	// Bytes 4a40 - 4a7f
	0x00, 0x43, 0xE1, 0x86, 0xAC, 0x01, 0x00, 0x43,
	0xE1, 0x86, 0xAD, 0x01, 0x00, 0x43, 0xE1, 0x86,
	0xB0, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB1, 0x01,
	0x00, 0x43, 0xE1, 0x86, 0xB2, 0x01, 0x00, 0x43,
	0xE1, 0x86, 0xB3, 0x01, 0x00, 0x43, 0xE1, 0x86,
	0xB4, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB5, 0x01,
	0x00, 0x44, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x32,
	0x43, 0xE3, 0x82, 0x99, 0x0D, 0x03, 0x43, 0xE3,
	// Bytes 4a80 - 4abf
	0x82, 0x9A, 0x0D, 0x03, 0x46, 0xE0, 0xBD, 0xB1,
	0xE0, 0xBD, 0xB2, 0x9E, 0x26, 0x46, 0xE0, 0xBD,
	0xB1, 0xE0, 0xBD, 0xB4, 0xA2, 0x26, 0x46, 0xE0,
	0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x26, 0x00,
	0x01,
}

// lookup returns the trie value for the first UTF-8 encoding in s and
// the width in bytes of this encoding. The size will be 0 if s does not
// hold enough bytes to complete the encoding. len(s) must be greater than 0.
func (t *nfcTrie) lookup(s []byte) (v uint16, sz int) {
	c0 := s[0]
	switch {
	case c0 < 0x80: // is ASCII
		return nfcValues[c0], 1
	case c0 < 0xC2:
		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
	case c0 < 0xE0: // 2-byte UTF-8
		if len(s) < 2 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c1), 2
	case c0 < 0xF0: // 3-byte UTF-8
		if len(s) < 3 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c2), 3
	case c0 < 0xF8: // 4-byte UTF-8
		if len(s) < 4 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		o = uint32(i)<<6 + uint32(c2)
		i = nfcIndex[o]
		c3 := s[3]
		if c3 < 0x80 || 0xC0 <= c3 {
			return 0, 3 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c3), 4
	}
	// Illegal rune
	return 0, 1
}

// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.
// s must start with a full and valid UTF-8 encoded rune.
func (t *nfcTrie) lookupUnsafe(s []byte) uint16 {
	c0 := s[0]
	if c0 < 0x80 { // is ASCII
		return nfcValues[c0]
	}
	i := nfcIndex[c0]
	if c0 < 0xE0 { // 2-byte UTF-8
		return t.lookupValue(uint32(i), s[1])
	}
	i = nfcIndex[uint32(i)<<6+uint32(s[1])]
	if c0 < 0xF0 { // 3-byte UTF-8
		return t.lookupValue(uint32(i), s[2])
	}
	i = nfcIndex[uint32(i)<<6+uint32(s[2])]
	if c0 < 0xF8 { // 4-byte UTF-8
		return t.lookupValue(uint32(i), s[3])
	}
	return 0
}

// lookupString returns the trie value for the first UTF-8 encoding in s and
// the width in bytes of this encoding. The size will be 0 if s does not
// hold enough bytes to complete the encoding. len(s) must be greater than 0.
func (t *nfcTrie) lookupString(s string) (v uint16, sz int) {
	c0 := s[0]
	switch {
	case c0 < 0x80: // is ASCII
		return nfcValues[c0], 1
	case c0 < 0xC2:
		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
	case c0 < 0xE0: // 2-byte UTF-8
		if len(s) < 2 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c1), 2
	case c0 < 0xF0: // 3-byte UTF-8
		if len(s) < 3 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c2), 3
	case c0 < 0xF8: // 4-byte UTF-8
		if len(s) < 4 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		o = uint32(i)<<6 + uint32(c2)
		i = nfcIndex[o]
		c3 := s[3]
		if c3 < 0x80 || 0xC0 <= c3 {
			return 0, 3 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c3), 4
	}
	// Illegal rune
	return 0, 1
}

// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.
// s must start with a full and valid UTF-8 encoded rune.
func (t *nfcTrie) lookupStringUnsafe(s string) uint16 {
	c0 := s[0]
	if c0 < 0x80 { // is ASCII
		return nfcValues[c0]
	}
	i := nfcIndex[c0]
	if c0 < 0xE0 { // 2-byte UTF-8
		return t.lookupValue(uint32(i), s[1])
	}
	i = nfcIndex[uint32(i)<<6+uint32(s[1])]
	if c0 < 0xF0 { // 3-byte UTF-8
		return t.lookupValue(uint32(i), s[2])
	}
	i = nfcIndex[uint32(i)<<6+uint32(s[2])]
	if c0 < 0xF8 { // 4-byte UTF-8
		return t.lookupValue(uint32(i), s[3])
	}
	return 0
}

// nfcTrie. Total size: 10442 bytes (10.20 KiB). Checksum: 4ba400a9d8208e03.
type nfcTrie struct{}

func newNfcTrie(i int) *nfcTrie {
	return &nfcTrie{}
}

// lookupValue determines the type of block n and looks up the value for b.
func (t *nfcTrie) lookupValue(n uint32, b byte) uint16 {
	switch {
	case n < 45:
		return uint16(nfcValues[n<<6+uint32(b)])
	default:
		n -= 45
		return uint16(nfcSparse.lookup(n, b))
	}
}

// nfcValues: 47 blocks, 3008 entries, 6016 bytes
// The third block is the zero block.
var nfcValues = [3008]uint16{
	// Block 0x0, offset 0x0
	0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000,
	// Block 0x1, offset 0x40
	0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000,
	0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000,
	0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000,
	0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000,
	0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000,
	0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000,
	0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000,
	0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000,
	0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000,
	0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000,
	// Block 0x2, offset 0x80
	// Block 0x3, offset 0xc0
	0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c,
	0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb,
	0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104,
	0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd,
	0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235,
	0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285,
	0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3,
	0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750,
	0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f,
	0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3,
	0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569,
	// Block 0x4, offset 0x100
	0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8,
	0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6,
	0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5,
	0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302,
	0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339,
	0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352,
	0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e,
	0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6,
	0x130: 0x308c, 0x134: 0x30b4, 0x135: 0x33c0,
	0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc,
	0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8,
	// Block 0x5, offset 0x140
	0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118,
	0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f,
	0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c,
	0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483,
	0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d,
	0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba,
	0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796,
	0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2,
	0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528,
	0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267,
	0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0xa000,
	// Block 0x6, offset 0x180
	0x184: 0x8100, 0x185: 0x8100,
	0x186: 0x8100,
	0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140,
	0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8,
	0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50,
	0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5,
	0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf,
	0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd,
	0x1b0: 0x33c5, 0x1b4: 0x3028, 0x1b5: 0x3334,
	0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46,
	0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb,
	// Block 0x7, offset 0x1c0
	0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316,
	0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac,
	0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479,
	0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6,
	0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5,
	0x1de: 0x305a, 0x1df: 0x3366,
	0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b,
	0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769,
	0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f,
	// Block 0x8, offset 0x200
	0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132,
	0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932,
	0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932,
	0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d,
	0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d,
	0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d,
	0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d,
	0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d,
	0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101,
	0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d,
	0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132,
	// Block 0x9, offset 0x240
	0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936,
	0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132,
	0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132,
	0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132,
	0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135,
	0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132,
	0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132,
	0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132,
	0x274: 0x0170,
	0x27a: 0x8100,
	0x27e: 0x0037,
	// Block 0xa, offset 0x280
	0x284: 0x8100, 0x285: 0x35a1,
	0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625,
	0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000,
	0x295: 0xa000, 0x297: 0xa000,
	0x299: 0xa000,
	0x29f: 0xa000, 0x2a1: 0xa000,
	0x2a5: 0xa000, 0x2a9: 0xa000,
	0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9,
	0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000,
	0x2b7: 0xa000, 0x2b9: 0xa000,
	0x2bf: 0xa000,
	// Block 0xb, offset 0x2c0
	0x2c0: 0x3721, 0x2c1: 0x372d, 0x2c3: 0x371b,
	0x2c6: 0xa000, 0x2c7: 0x3709,
	0x2cc: 0x375d, 0x2cd: 0x3745, 0x2ce: 0x376f, 0x2d0: 0xa000,
	0x2d3: 0xa000, 0x2d5: 0xa000, 0x2d6: 0xa000, 0x2d7: 0xa000,
	0x2d8: 0xa000, 0x2d9: 0x3751, 0x2da: 0xa000,
	0x2de: 0xa000, 0x2e3: 0xa000,
	0x2e7: 0xa000,
	0x2eb: 0xa000, 0x2ed: 0xa000,
	0x2f0: 0xa000, 0x2f3: 0xa000, 0x2f5: 0xa000,
	0x2f6: 0xa000, 0x2f7: 0xa000, 0x2f8: 0xa000, 0x2f9: 0x37d5, 0x2fa: 0xa000,
	0x2fe: 0xa000,
	// Block 0xc, offset 0x300
	0x301: 0x3733, 0x302: 0x37b7,
	0x310: 0x370f, 0x311: 0x3793,
	0x312: 0x3715, 0x313: 0x3799, 0x316: 0x3727, 0x317: 0x37ab,
	0x318: 0xa000, 0x319: 0xa000, 0x31a: 0x3829, 0x31b: 0x382f, 0x31c: 0x3739, 0x31d: 0x37bd,
	0x31e: 0x373f, 0x31f: 0x37c3, 0x322: 0x374b, 0x323: 0x37cf,
	0x324: 0x3757, 0x325: 0x37db, 0x326: 0x3763, 0x327: 0x37e7, 0x328: 0xa000, 0x329: 0xa000,
	0x32a: 0x3835, 0x32b: 0x383b, 0x32c: 0x378d, 0x32d: 0x3811, 0x32e: 0x3769, 0x32f: 0x37ed,
	0x330: 0x3775, 0x331: 0x37f9, 0x332: 0x377b, 0x333: 0x37ff, 0x334: 0x3781, 0x335: 0x3805,
	0x338: 0x3787, 0x339: 0x380b,
	// Block 0xd, offset 0x340
	0x351: 0x812d,
	0x352: 0x8132, 0x353: 0x8132, 0x354: 0x8132, 0x355: 0x8132, 0x356: 0x812d, 0x357: 0x8132,
	0x358: 0x8132, 0x359: 0x8132, 0x35a: 0x812e, 0x35b: 0x812d, 0x35c: 0x8132, 0x35d: 0x8132,
	0x35e: 0x8132, 0x35f: 0x8132, 0x360: 0x8132, 0x361: 0x8132, 0x362: 0x812d, 0x363: 0x812d,
	0x364: 0x812d, 0x365: 0x812d, 0x366: 0x812d, 0x367: 0x812d, 0x368: 0x8132, 0x369: 0x8132,
	0x36a: 0x812d, 0x36b: 0x8132, 0x36c: 0x8132, 0x36d: 0x812e, 0x36e: 0x8131, 0x36f: 0x8132,
	0x370: 0x8105, 0x371: 0x8106, 0x372: 0x8107, 0x373: 0x8108, 0x374: 0x8109, 0x375: 0x810a,
	0x376: 0x810b, 0x377: 0x810c, 0x378: 0x810d, 0x379: 0x810e, 0x37a: 0x810e, 0x37b: 0x810f,
	0x37c: 0x8110, 0x37d: 0x8111, 0x37f: 0x8112,
	// Block 0xe, offset 0x380
	0x388: 0xa000, 0x38a: 0xa000, 0x38b: 0x8116,
	0x38c: 0x8117, 0x38d: 0x8118, 0x38e: 0x8119, 0x38f: 0x811a, 0x390: 0x811b, 0x391: 0x811c,
	0x392: 0x811d, 0x393: 0x9932, 0x394: 0x9932, 0x395: 0x992d, 0x396: 0x812d, 0x397: 0x8132,
	0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x8132, 0x39b: 0x8132, 0x39c: 0x812d, 0x39d: 0x8132,
	0x39e: 0x8132, 0x39f: 0x812d,
	0x3b0: 0x811e,
	// Block 0xf, offset 0x3c0
	0x3c5: 0xa000,
	0x3c6: 0x2d26, 0x3c7: 0xa000, 0x3c8: 0x2d2e, 0x3c9: 0xa000, 0x3ca: 0x2d36, 0x3cb: 0xa000,
	0x3cc: 0x2d3e, 0x3cd: 0xa000, 0x3ce: 0x2d46, 0x3d1: 0xa000,
	0x3d2: 0x2d4e,
	0x3f4: 0x8102, 0x3f5: 0x9900,
	0x3fa: 0xa000, 0x3fb: 0x2d56,
	0x3fc: 0xa000, 0x3fd: 0x2d5e, 0x3fe: 0xa000, 0x3ff: 0xa000,
	// Block 0x10, offset 0x400
	0x400: 0x8132, 0x401: 0x8132, 0x402: 0x812d, 0x403: 0x8132, 0x404: 0x8132, 0x405: 0x8132,
	0x406: 0x8132, 0x407: 0x8132, 0x408: 0x8132, 0x409: 0x8132, 0x40a: 0x812d, 0x40b: 0x8132,
	0x40c: 0x8132, 0x40d: 0x8135, 0x40e: 0x812a, 0x40f: 0x812d, 0x410: 0x8129, 0x411: 0x8132,
	0x412: 0x8132, 0x413: 0x8132, 0x414: 0x8132, 0x415: 0x8132, 0x416: 0x8132, 0x417: 0x8132,
	0x418: 0x8132, 0x419: 0x8132, 0x41a: 0x8132, 0x41b: 0x8132, 0x41c: 0x8132, 0x41d: 0x8132,
	0x41e: 0x8132, 0x41f: 0x8132, 0x420: 0x8132, 0x421: 0x8132, 0x422: 0x8132, 0x423: 0x8132,
	0x424: 0x8132, 0x425: 0x8132, 0x426: 0x8132, 0x427: 0x8132, 0x428: 0x8132, 0x429: 0x8132,
	0x42a: 0x8132, 0x42b: 0x8132, 0x42c: 0x8132, 0x42d: 0x8132, 0x42e: 0x8132, 0x42f: 0x8132,
	0x430: 0x8132, 0x431: 0x8132, 0x432: 0x8132, 0x433: 0x8132, 0x434: 0x8132, 0x435: 0x8132,
	0x436: 0x8133, 0x437: 0x8131, 0x438: 0x8131, 0x439: 0x812d, 0x43b: 0x8132,
	0x43c: 0x8134, 0x43d: 0x812d, 0x43e: 0x8132, 0x43f: 0x812d,
	// Block 0x11, offset 0x440
	0x440: 0x2f97, 0x441: 0x32a3, 0x442: 0x2fa1, 0x443: 0x32ad, 0x444: 0x2fa6, 0x445: 0x32b2,
	0x446: 0x2fab, 0x447: 0x32b7, 0x448: 0x38cc, 0x449: 0x3a5b, 0x44a: 0x2fc4, 0x44b: 0x32d0,
	0x44c: 0x2fce, 0x44d: 0x32da, 0x44e: 0x2fdd, 0x44f: 0x32e9, 0x450: 0x2fd3, 0x451: 0x32df,
	0x452: 0x2fd8, 0x453: 0x32e4, 0x454: 0x38ef, 0x455: 0x3a7e, 0x456: 0x38f6, 0x457: 0x3a85,
	0x458: 0x3019, 0x459: 0x3325, 0x45a: 0x301e, 0x45b: 0x332a, 0x45c: 0x3904, 0x45d: 0x3a93,
	0x45e: 0x3023, 0x45f: 0x332f, 0x460: 0x3032, 0x461: 0x333e, 0x462: 0x3050, 0x463: 0x335c,
	0x464: 0x305f, 0x465: 0x336b, 0x466: 0x3055, 0x467: 0x3361, 0x468: 0x3064, 0x469: 0x3370,
	0x46a: 0x3069, 0x46b: 0x3375, 0x46c: 0x30af, 0x46d: 0x33bb, 0x46e: 0x390b, 0x46f: 0x3a9a,
	0x470: 0x30b9, 0x471: 0x33ca, 0x472: 0x30c3, 0x473: 0x33d4, 0x474: 0x30cd, 0x475: 0x33de,
	0x476: 0x46c4, 0x477: 0x4755, 0x478: 0x3912, 0x479: 0x3aa1, 0x47a: 0x30e6, 0x47b: 0x33f7,
	0x47c: 0x30e1, 0x47d: 0x33f2, 0x47e: 0x30eb, 0x47f: 0x33fc,
	// Block 0x12, offset 0x480
	0x480: 0x30f0, 0x481: 0x3401, 0x482: 0x30f5, 0x483: 0x3406, 0x484: 0x3109, 0x485: 0x341a,
	0x486: 0x3113, 0x487: 0x3424, 0x488: 0x3122, 0x489: 0x3433, 0x48a: 0x311d, 0x48b: 0x342e,
	0x48c: 0x3935, 0x48d: 0x3ac4, 0x48e: 0x3943, 0x48f: 0x3ad2, 0x490: 0x394a, 0x491: 0x3ad9,
	0x492: 0x3951, 0x493: 0x3ae0, 0x494: 0x314f, 0x495: 0x3460, 0x496: 0x3154, 0x497: 0x3465,
	0x498: 0x315e, 0x499: 0x346f, 0x49a: 0x46f1, 0x49b: 0x4782, 0x49c: 0x3997, 0x49d: 0x3b26,
	0x49e: 0x3177, 0x49f: 0x3488, 0x4a0: 0x3181, 0x4a1: 0x3492, 0x4a2: 0x4700, 0x4a3: 0x4791,
	0x4a4: 0x399e, 0x4a5: 0x3b2d, 0x4a6: 0x39a5, 0x4a7: 0x3b34, 0x4a8: 0x39ac, 0x4a9: 0x3b3b,
	0x4aa: 0x3190, 0x4ab: 0x34a1, 0x4ac: 0x319a, 0x4ad: 0x34b0, 0x4ae: 0x31ae, 0x4af: 0x34c4,
	0x4b0: 0x31a9, 0x4b1: 0x34bf, 0x4b2: 0x31ea, 0x4b3: 0x3500, 0x4b4: 0x31f9, 0x4b5: 0x350f,
	0x4b6: 0x31f4, 0x4b7: 0x350a, 0x4b8: 0x39b3, 0x4b9: 0x3b42, 0x4ba: 0x39ba, 0x4bb: 0x3b49,
	0x4bc: 0x31fe, 0x4bd: 0x3514, 0x4be: 0x3203, 0x4bf: 0x3519,
	// Block 0x13, offset 0x4c0
	0x4c0: 0x3208, 0x4c1: 0x351e, 0x4c2: 0x320d, 0x4c3: 0x3523, 0x4c4: 0x321c, 0x4c5: 0x3532,
	0x4c6: 0x3217, 0x4c7: 0x352d, 0x4c8: 0x3221, 0x4c9: 0x353c, 0x4ca: 0x3226, 0x4cb: 0x3541,
	0x4cc: 0x322b, 0x4cd: 0x3546, 0x4ce: 0x3249, 0x4cf: 0x3564, 0x4d0: 0x3262, 0x4d1: 0x3582,
	0x4d2: 0x3271, 0x4d3: 0x3591, 0x4d4: 0x3276, 0x4d5: 0x3596, 0x4d6: 0x337a, 0x4d7: 0x34a6,
	0x4d8: 0x3537, 0x4d9: 0x3573, 0x4db: 0x35d1,
	0x4e0: 0x46a1, 0x4e1: 0x4732, 0x4e2: 0x2f83, 0x4e3: 0x328f,
	0x4e4: 0x3878, 0x4e5: 0x3a07, 0x4e6: 0x3871, 0x4e7: 0x3a00, 0x4e8: 0x3886, 0x4e9: 0x3a15,
	0x4ea: 0x387f, 0x4eb: 0x3a0e, 0x4ec: 0x38be, 0x4ed: 0x3a4d, 0x4ee: 0x3894, 0x4ef: 0x3a23,
	0x4f0: 0x388d, 0x4f1: 0x3a1c, 0x4f2: 0x38a2, 0x4f3: 0x3a31, 0x4f4: 0x389b, 0x4f5: 0x3a2a,
	0x4f6: 0x38c5, 0x4f7: 0x3a54, 0x4f8: 0x46b5, 0x4f9: 0x4746, 0x4fa: 0x3000, 0x4fb: 0x330c,
	0x4fc: 0x2fec, 0x4fd: 0x32f8, 0x4fe: 0x38da, 0x4ff: 0x3a69,
	// Block 0x14, offset 0x500
	0x500: 0x38d3, 0x501: 0x3a62, 0x502: 0x38e8, 0x503: 0x3a77, 0x504: 0x38e1, 0x505: 0x3a70,
	0x506: 0x38fd, 0x507: 0x3a8c, 0x508: 0x3091, 0x509: 0x339d, 0x50a: 0x30a5, 0x50b: 0x33b1,
	0x50c: 0x46e7, 0x50d: 0x4778, 0x50e: 0x3136, 0x50f: 0x3447, 0x510: 0x3920, 0x511: 0x3aaf,
	0x512: 0x3919, 0x513: 0x3aa8, 0x514: 0x392e, 0x515: 0x3abd, 0x516: 0x3927, 0x517: 0x3ab6,
	0x518: 0x3989, 0x519: 0x3b18, 0x51a: 0x396d, 0x51b: 0x3afc, 0x51c: 0x3966, 0x51d: 0x3af5,
	0x51e: 0x397b, 0x51f: 0x3b0a, 0x520: 0x3974, 0x521: 0x3b03, 0x522: 0x3982, 0x523: 0x3b11,
	0x524: 0x31e5, 0x525: 0x34fb, 0x526: 0x31c7, 0x527: 0x34dd, 0x528: 0x39e4, 0x529: 0x3b73,
	0x52a: 0x39dd, 0x52b: 0x3b6c, 0x52c: 0x39f2, 0x52d: 0x3b81, 0x52e: 0x39eb, 0x52f: 0x3b7a,
	0x530: 0x39f9, 0x531: 0x3b88, 0x532: 0x3230, 0x533: 0x354b, 0x534: 0x3258, 0x535: 0x3578,
	0x536: 0x3253, 0x537: 0x356e, 0x538: 0x323f, 0x539: 0x355a,
	// Block 0x15, offset 0x540
	0x540: 0x4804, 0x541: 0x480a, 0x542: 0x491e, 0x543: 0x4936, 0x544: 0x4926, 0x545: 0x493e,
	0x546: 0x492e, 0x547: 0x4946, 0x548: 0x47aa, 0x549: 0x47b0, 0x54a: 0x488e, 0x54b: 0x48a6,
	0x54c: 0x4896, 0x54d: 0x48ae, 0x54e: 0x489e, 0x54f: 0x48b6, 0x550: 0x4816, 0x551: 0x481c,
	0x552: 0x3db8, 0x553: 0x3dc8, 0x554: 0x3dc0, 0x555: 0x3dd0,
	0x558: 0x47b6, 0x559: 0x47bc, 0x55a: 0x3ce8, 0x55b: 0x3cf8, 0x55c: 0x3cf0, 0x55d: 0x3d00,
	0x560: 0x482e, 0x561: 0x4834, 0x562: 0x494e, 0x563: 0x4966,
	0x564: 0x4956, 0x565: 0x496e, 0x566: 0x495e, 0x567: 0x4976, 0x568: 0x47c2, 0x569: 0x47c8,
	0x56a: 0x48be, 0x56b: 0x48d6, 0x56c: 0x48c6, 0x56d: 0x48de, 0x56e: 0x48ce, 0x56f: 0x48e6,
	0x570: 0x4846, 0x571: 0x484c, 0x572: 0x3e18, 0x573: 0x3e30, 0x574: 0x3e20, 0x575: 0x3e38,
	0x576: 0x3e28, 0x577: 0x3e40, 0x578: 0x47ce, 0x579: 0x47d4, 0x57a: 0x3d18, 0x57b: 0x3d30,
	0x57c: 0x3d20, 0x57d: 0x3d38, 0x57e: 0x3d28, 0x57f: 0x3d40,
	// Block 0x16, offset 0x580
	0x580: 0x4852, 0x581: 0x4858, 0x582: 0x3e48, 0x583: 0x3e58, 0x584: 0x3e50, 0x585: 0x3e60,
	0x588: 0x47da, 0x589: 0x47e0, 0x58a: 0x3d48, 0x58b: 0x3d58,
	0x58c: 0x3d50, 0x58d: 0x3d60, 0x590: 0x4864, 0x591: 0x486a,
	0x592: 0x3e80, 0x593: 0x3e98, 0x594: 0x3e88, 0x595: 0x3ea0, 0x596: 0x3e90, 0x597: 0x3ea8,
	0x599: 0x47e6, 0x59b: 0x3d68, 0x59d: 0x3d70,
	0x59f: 0x3d78, 0x5a0: 0x487c, 0x5a1: 0x4882, 0x5a2: 0x497e, 0x5a3: 0x4996,
	0x5a4: 0x4986, 0x5a5: 0x499e, 0x5a6: 0x498e, 0x5a7: 0x49a6, 0x5a8: 0x47ec, 0x5a9: 0x47f2,
	0x5aa: 0x48ee, 0x5ab: 0x4906, 0x5ac: 0x48f6, 0x5ad: 0x490e, 0x5ae: 0x48fe, 0x5af: 0x4916,
	0x5b0: 0x47f8, 0x5b1: 0x431e, 0x5b2: 0x3691, 0x5b3: 0x4324, 0x5b4: 0x4822, 0x5b5: 0x432a,
	0x5b6: 0x36a3, 0x5b7: 0x4330, 0x5b8: 0x36c1, 0x5b9: 0x4336, 0x5ba: 0x36d9, 0x5bb: 0x433c,
	0x5bc: 0x4870, 0x5bd: 0x4342,
	// Block 0x17, offset 0x5c0
	0x5c0: 0x3da0, 0x5c1: 0x3da8, 0x5c2: 0x4184, 0x5c3: 0x41a2, 0x5c4: 0x418e, 0x5c5: 0x41ac,
	0x5c6: 0x4198, 0x5c7: 0x41b6, 0x5c8: 0x3cd8, 0x5c9: 0x3ce0, 0x5ca: 0x40d0, 0x5cb: 0x40ee,
	0x5cc: 0x40da, 0x5cd: 0x40f8, 0x5ce: 0x40e4, 0x5cf: 0x4102, 0x5d0: 0x3de8, 0x5d1: 0x3df0,
	0x5d2: 0x41c0, 0x5d3: 0x41de, 0x5d4: 0x41ca, 0x5d5: 0x41e8, 0x5d6: 0x41d4, 0x5d7: 0x41f2,
	0x5d8: 0x3d08, 0x5d9: 0x3d10, 0x5da: 0x410c, 0x5db: 0x412a, 0x5dc: 0x4116, 0x5dd: 0x4134,
	0x5de: 0x4120, 0x5df: 0x413e, 0x5e0: 0x3ec0, 0x5e1: 0x3ec8, 0x5e2: 0x41fc, 0x5e3: 0x421a,
	0x5e4: 0x4206, 0x5e5: 0x4224, 0x5e6: 0x4210, 0x5e7: 0x422e, 0x5e8: 0x3d80, 0x5e9: 0x3d88,
	0x5ea: 0x4148, 0x5eb: 0x4166, 0x5ec: 0x4152, 0x5ed: 0x4170, 0x5ee: 0x415c, 0x5ef: 0x417a,
	0x5f0: 0x3685, 0x5f1: 0x367f, 0x5f2: 0x3d90, 0x5f3: 0x368b, 0x5f4: 0x3d98,
	0x5f6: 0x4810, 0x5f7: 0x3db0, 0x5f8: 0x35f5, 0x5f9: 0x35ef, 0x5fa: 0x35e3, 0x5fb: 0x42ee,
	0x5fc: 0x35fb, 0x5fd: 0x8100, 0x5fe: 0x01d3, 0x5ff: 0xa100,
	// Block 0x18, offset 0x600
	0x600: 0x8100, 0x601: 0x35a7, 0x602: 0x3dd8, 0x603: 0x369d, 0x604: 0x3de0,
	0x606: 0x483a, 0x607: 0x3df8, 0x608: 0x3601, 0x609: 0x42f4, 0x60a: 0x360d, 0x60b: 0x42fa,
	0x60c: 0x3619, 0x60d: 0x3b8f, 0x60e: 0x3b96, 0x60f: 0x3b9d, 0x610: 0x36b5, 0x611: 0x36af,
	0x612: 0x3e00, 0x613: 0x44e4, 0x616: 0x36bb, 0x617: 0x3e10,
	0x618: 0x3631, 0x619: 0x362b, 0x61a: 0x361f, 0x61b: 0x4300, 0x61d: 0x3ba4,
	0x61e: 0x3bab, 0x61f: 0x3bb2, 0x620: 0x36eb, 0x621: 0x36e5, 0x622: 0x3e68, 0x623: 0x44ec,
	0x624: 0x36cd, 0x625: 0x36d3, 0x626: 0x36f1, 0x627: 0x3e78, 0x628: 0x3661, 0x629: 0x365b,
	0x62a: 0x364f, 0x62b: 0x430c, 0x62c: 0x3649, 0x62d: 0x359b, 0x62e: 0x42e8, 0x62f: 0x0081,
	0x632: 0x3eb0, 0x633: 0x36f7, 0x634: 0x3eb8,
	0x636: 0x4888, 0x637: 0x3ed0, 0x638: 0x363d, 0x639: 0x4306, 0x63a: 0x366d, 0x63b: 0x4318,
	0x63c: 0x3679, 0x63d: 0x4256, 0x63e: 0xa100,
	// Block 0x19, offset 0x640
	0x641: 0x3c06, 0x643: 0xa000, 0x644: 0x3c0d, 0x645: 0xa000,
	0x647: 0x3c14, 0x648: 0xa000, 0x649: 0x3c1b,
	0x64d: 0xa000,
	0x660: 0x2f65, 0x661: 0xa000, 0x662: 0x3c29,
	0x664: 0xa000, 0x665: 0xa000,
	0x66d: 0x3c22, 0x66e: 0x2f60, 0x66f: 0x2f6a,
	0x670: 0x3c30, 0x671: 0x3c37, 0x672: 0xa000, 0x673: 0xa000, 0x674: 0x3c3e, 0x675: 0x3c45,
	0x676: 0xa000, 0x677: 0xa000, 0x678: 0x3c4c, 0x679: 0x3c53, 0x67a: 0xa000, 0x67b: 0xa000,
	0x67c: 0xa000, 0x67d: 0xa000,
	// Block 0x1a, offset 0x680
	0x680: 0x3c5a, 0x681: 0x3c61, 0x682: 0xa000, 0x683: 0xa000, 0x684: 0x3c76, 0x685: 0x3c7d,
	0x686: 0xa000, 0x687: 0xa000, 0x688: 0x3c84, 0x689: 0x3c8b,
	0x691: 0xa000,
	0x692: 0xa000,
	0x6a2: 0xa000,
	0x6a8: 0xa000, 0x6a9: 0xa000,
	0x6ab: 0xa000, 0x6ac: 0x3ca0, 0x6ad: 0x3ca7, 0x6ae: 0x3cae, 0x6af: 0x3cb5,
	0x6b2: 0xa000, 0x6b3: 0xa000, 0x6b4: 0xa000, 0x6b5: 0xa000,
	// Block 0x1b, offset 0x6c0
	0x6c6: 0xa000, 0x6cb: 0xa000,
	0x6cc: 0x3f08, 0x6cd: 0xa000, 0x6ce: 0x3f10, 0x6cf: 0xa000, 0x6d0: 0x3f18, 0x6d1: 0xa000,
	0x6d2: 0x3f20, 0x6d3: 0xa000, 0x6d4: 0x3f28, 0x6d5: 0xa000, 0x6d6: 0x3f30, 0x6d7: 0xa000,
	0x6d8: 0x3f38, 0x6d9: 0xa000, 0x6da: 0x3f40, 0x6db: 0xa000, 0x6dc: 0x3f48, 0x6dd: 0xa000,
	0x6de: 0x3f50, 0x6df: 0xa000, 0x6e0: 0x3f58, 0x6e1: 0xa000, 0x6e2: 0x3f60,
	0x6e4: 0xa000, 0x6e5: 0x3f68, 0x6e6: 0xa000, 0x6e7: 0x3f70, 0x6e8: 0xa000, 0x6e9: 0x3f78,
	0x6ef: 0xa000,
	0x6f0: 0x3f80, 0x6f1: 0x3f88, 0x6f2: 0xa000, 0x6f3: 0x3f90, 0x6f4: 0x3f98, 0x6f5: 0xa000,
	0x6f6: 0x3fa0, 0x6f7: 0x3fa8, 0x6f8: 0xa000, 0x6f9: 0x3fb0, 0x6fa: 0x3fb8, 0x6fb: 0xa000,
	0x6fc: 0x3fc0, 0x6fd: 0x3fc8,
	// Block 0x1c, offset 0x700
	0x714: 0x3f00,
	0x719: 0x9903, 0x71a: 0x9903, 0x71b: 0x8100, 0x71c: 0x8100, 0x71d: 0xa000,
	0x71e: 0x3fd0,
	0x726: 0xa000,
	0x72b: 0xa000, 0x72c: 0x3fe0, 0x72d: 0xa000, 0x72e: 0x3fe8, 0x72f: 0xa000,
	0x730: 0x3ff0, 0x731: 0xa000, 0x732: 0x3ff8, 0x733: 0xa000, 0x734: 0x4000, 0x735: 0xa000,
	0x736: 0x4008, 0x737: 0xa000, 0x738: 0x4010, 0x739: 0xa000, 0x73a: 0x4018, 0x73b: 0xa000,
	0x73c: 0x4020, 0x73d: 0xa000, 0x73e: 0x4028, 0x73f: 0xa000,
	// Block 0x1d, offset 0x740
	0x740: 0x4030, 0x741: 0xa000, 0x742: 0x4038, 0x744: 0xa000, 0x745: 0x4040,
	0x746: 0xa000, 0x747: 0x4048, 0x748: 0xa000, 0x749: 0x4050,
	0x74f: 0xa000, 0x750: 0x4058, 0x751: 0x4060,
	0x752: 0xa000, 0x753: 0x4068, 0x754: 0x4070, 0x755: 0xa000, 0x756: 0x4078, 0x757: 0x4080,
	0x758: 0xa000, 0x759: 0x4088, 0x75a: 0x4090, 0x75b: 0xa000, 0x75c: 0x4098, 0x75d: 0x40a0,
	0x76f: 0xa000,
	0x770: 0xa000, 0x771: 0xa000, 0x772: 0xa000, 0x774: 0x3fd8,
	0x777: 0x40a8, 0x778: 0x40b0, 0x779: 0x40b8, 0x77a: 0x40c0,
	0x77d: 0xa000, 0x77e: 0x40c8,
	// Block 0x1e, offset 0x780
	0x780: 0x1377, 0x781: 0x0cfb, 0x782: 0x13d3, 0x783: 0x139f, 0x784: 0x0e57, 0x785: 0x06eb,
	0x786: 0x08df, 0x787: 0x162b, 0x788: 0x162b, 0x789: 0x0a0b, 0x78a: 0x145f, 0x78b: 0x0943,
	0x78c: 0x0a07, 0x78d: 0x0bef, 0x78e: 0x0fcf, 0x78f: 0x115f, 0x790: 0x1297, 0x791: 0x12d3,
	0x792: 0x1307, 0x793: 0x141b, 0x794: 0x0d73, 0x795: 0x0dff, 0x796: 0x0eab, 0x797: 0x0f43,
	0x798: 0x125f, 0x799: 0x1447, 0x79a: 0x1573, 0x79b: 0x070f, 0x79c: 0x08b3, 0x79d: 0x0d87,
	0x79e: 0x0ecf, 0x79f: 0x1293, 0x7a0: 0x15c3, 0x7a1: 0x0ab3, 0x7a2: 0x0e77, 0x7a3: 0x1283,
	0x7a4: 0x1317, 0x7a5: 0x0c23, 0x7a6: 0x11bb, 0x7a7: 0x12df, 0x7a8: 0x0b1f, 0x7a9: 0x0d0f,
	0x7aa: 0x0e17, 0x7ab: 0x0f1b, 0x7ac: 0x1427, 0x7ad: 0x074f, 0x7ae: 0x07e7, 0x7af: 0x0853,
	0x7b0: 0x0c8b, 0x7b1: 0x0d7f, 0x7b2: 0x0ecb, 0x7b3: 0x0fef, 0x7b4: 0x1177, 0x7b5: 0x128b,
	0x7b6: 0x12a3, 0x7b7: 0x13c7, 0x7b8: 0x14ef, 0x7b9: 0x15a3, 0x7ba: 0x15bf, 0x7bb: 0x102b,
	0x7bc: 0x106b, 0x7bd: 0x1123, 0x7be: 0x1243, 0x7bf: 0x147b,
	// Block 0x1f, offset 0x7c0
	0x7c0: 0x15cb, 0x7c1: 0x134b, 0x7c2: 0x09c7, 0x7c3: 0x0b3b, 0x7c4: 0x10db, 0x7c5: 0x119b,
	0x7c6: 0x0eff, 0x7c7: 0x1033, 0x7c8: 0x1397, 0x7c9: 0x14e7, 0x7ca: 0x09c3, 0x7cb: 0x0a8f,
	0x7cc: 0x0d77, 0x7cd: 0x0e2b, 0x7ce: 0x0e5f, 0x7cf: 0x1113, 0x7d0: 0x113b, 0x7d1: 0x14a7,
	0x7d2: 0x084f, 0x7d3: 0x11a7, 0x7d4: 0x07f3, 0x7d5: 0x07ef, 0x7d6: 0x1097, 0x7d7: 0x1127,
	0x7d8: 0x125b, 0x7d9: 0x14af, 0x7da: 0x1367, 0x7db: 0x0c27, 0x7dc: 0x0d73, 0x7dd: 0x1357,
	0x7de: 0x06f7, 0x7df: 0x0a63, 0x7e0: 0x0b93, 0x7e1: 0x0f2f, 0x7e2: 0x0faf, 0x7e3: 0x0873,
	0x7e4: 0x103b, 0x7e5: 0x075f, 0x7e6: 0x0b77, 0x7e7: 0x06d7, 0x7e8: 0x0deb, 0x7e9: 0x0ca3,
	0x7ea: 0x110f, 0x7eb: 0x08c7, 0x7ec: 0x09b3, 0x7ed: 0x0ffb, 0x7ee: 0x1263, 0x7ef: 0x133b,
	0x7f0: 0x0db7, 0x7f1: 0x13f7, 0x7f2: 0x0de3, 0x7f3: 0x0c37, 0x7f4: 0x121b, 0x7f5: 0x0c57,
	0x7f6: 0x0fab, 0x7f7: 0x072b, 0x7f8: 0x07a7, 0x7f9: 0x07eb, 0x7fa: 0x0d53, 0x7fb: 0x10fb,
	0x7fc: 0x11f3, 0x7fd: 0x1347, 0x7fe: 0x145b, 0x7ff: 0x085b,
	// Block 0x20, offset 0x800
	0x800: 0x090f, 0x801: 0x0a17, 0x802: 0x0b2f, 0x803: 0x0cbf, 0x804: 0x0e7b, 0x805: 0x103f,
	0x806: 0x1497, 0x807: 0x157b, 0x808: 0x15cf, 0x809: 0x15e7, 0x80a: 0x0837, 0x80b: 0x0cf3,
	0x80c: 0x0da3, 0x80d: 0x13eb, 0x80e: 0x0afb, 0x80f: 0x0bd7, 0x810: 0x0bf3, 0x811: 0x0c83,
	0x812: 0x0e6b, 0x813: 0x0eb7, 0x814: 0x0f67, 0x815: 0x108b, 0x816: 0x112f, 0x817: 0x1193,
	0x818: 0x13db, 0x819: 0x126b, 0x81a: 0x1403, 0x81b: 0x147f, 0x81c: 0x080f, 0x81d: 0x083b,
	0x81e: 0x0923, 0x81f: 0x0ea7, 0x820: 0x12f3, 0x821: 0x133b, 0x822: 0x0b1b, 0x823: 0x0b8b,
	0x824: 0x0c4f, 0x825: 0x0daf, 0x826: 0x10d7, 0x827: 0x0f23, 0x828: 0x073b, 0x829: 0x097f,
	0x82a: 0x0a63, 0x82b: 0x0ac7, 0x82c: 0x0b97, 0x82d: 0x0f3f, 0x82e: 0x0f5b, 0x82f: 0x116b,
	0x830: 0x118b, 0x831: 0x1463, 0x832: 0x14e3, 0x833: 0x14f3, 0x834: 0x152f, 0x835: 0x0753,
	0x836: 0x107f, 0x837: 0x144f, 0x838: 0x14cb, 0x839: 0x0baf, 0x83a: 0x0717, 0x83b: 0x0777,
	0x83c: 0x0a67, 0x83d: 0x0a87, 0x83e: 0x0caf, 0x83f: 0x0d73,
	// Block 0x21, offset 0x840
	0x840: 0x0ec3, 0x841: 0x0fcb, 0x842: 0x1277, 0x843: 0x1417, 0x844: 0x1623, 0x845: 0x0ce3,
	0x846: 0x14a3, 0x847: 0x0833, 0x848: 0x0d2f, 0x849: 0x0d3b, 0x84a: 0x0e0f, 0x84b: 0x0e47,
	0x84c: 0x0f4b, 0x84d: 0x0fa7, 0x84e: 0x1027, 0x84f: 0x110b, 0x850: 0x153b, 0x851: 0x07af,
	0x852: 0x0c03, 0x853: 0x14b3, 0x854: 0x0767, 0x855: 0x0aab, 0x856: 0x0e2f, 0x857: 0x13df,
	0x858: 0x0b67, 0x859: 0x0bb7, 0x85a: 0x0d43, 0x85b: 0x0f2f, 0x85c: 0x14bb, 0x85d: 0x0817,
	0x85e: 0x08ff, 0x85f: 0x0a97, 0x860: 0x0cd3, 0x861: 0x0d1f, 0x862: 0x0d5f, 0x863: 0x0df3,
	0x864: 0x0f47, 0x865: 0x0fbb, 0x866: 0x1157, 0x867: 0x12f7, 0x868: 0x1303, 0x869: 0x1457,
	0x86a: 0x14d7, 0x86b: 0x0883, 0x86c: 0x0e4b, 0x86d: 0x0903, 0x86e: 0x0ec7, 0x86f: 0x0f6b,
	0x870: 0x1287, 0x871: 0x14bf, 0x872: 0x15ab, 0x873: 0x15d3, 0x874: 0x0d37, 0x875: 0x0e27,
	0x876: 0x11c3, 0x877: 0x10b7, 0x878: 0x10c3, 0x879: 0x10e7, 0x87a: 0x0f17, 0x87b: 0x0e9f,
	0x87c: 0x1363, 0x87d: 0x0733, 0x87e: 0x122b, 0x87f: 0x081b,
	// Block 0x22, offset 0x880
	0x880: 0x080b, 0x881: 0x0b0b, 0x882: 0x0c2b, 0x883: 0x10f3, 0x884: 0x0a53, 0x885: 0x0e03,
	0x886: 0x0cef, 0x887: 0x13e7, 0x888: 0x12e7, 0x889: 0x14ab, 0x88a: 0x1323, 0x88b: 0x0b27,
	0x88c: 0x0787, 0x88d: 0x095b, 0x890: 0x09af,
	0x892: 0x0cdf, 0x895: 0x07f7, 0x896: 0x0f1f, 0x897: 0x0fe3,
	0x898: 0x1047, 0x899: 0x1063, 0x89a: 0x1067, 0x89b: 0x107b, 0x89c: 0x14fb, 0x89d: 0x10eb,
	0x89e: 0x116f, 0x8a0: 0x128f, 0x8a2: 0x1353,
	0x8a5: 0x1407, 0x8a6: 0x1433,
	0x8aa: 0x154f, 0x8ab: 0x1553, 0x8ac: 0x1557, 0x8ad: 0x15bb, 0x8ae: 0x142b, 0x8af: 0x14c7,
	0x8b0: 0x0757, 0x8b1: 0x077b, 0x8b2: 0x078f, 0x8b3: 0x084b, 0x8b4: 0x0857, 0x8b5: 0x0897,
	0x8b6: 0x094b, 0x8b7: 0x0967, 0x8b8: 0x096f, 0x8b9: 0x09ab, 0x8ba: 0x09b7, 0x8bb: 0x0a93,
	0x8bc: 0x0a9b, 0x8bd: 0x0ba3, 0x8be: 0x0bcb, 0x8bf: 0x0bd3,
	// Block 0x23, offset 0x8c0
	0x8c0: 0x0beb, 0x8c1: 0x0c97, 0x8c2: 0x0cc7, 0x8c3: 0x0ce7, 0x8c4: 0x0d57, 0x8c5: 0x0e1b,
	0x8c6: 0x0e37, 0x8c7: 0x0e67, 0x8c8: 0x0ebb, 0x8c9: 0x0edb, 0x8ca: 0x0f4f, 0x8cb: 0x102f,
	0x8cc: 0x104b, 0x8cd: 0x1053, 0x8ce: 0x104f, 0x8cf: 0x1057, 0x8d0: 0x105b, 0x8d1: 0x105f,
	0x8d2: 0x1073, 0x8d3: 0x1077, 0x8d4: 0x109b, 0x8d5: 0x10af, 0x8d6: 0x10cb, 0x8d7: 0x112f,
	0x8d8: 0x1137, 0x8d9: 0x113f, 0x8da: 0x1153, 0x8db: 0x117b, 0x8dc: 0x11cb, 0x8dd: 0x11ff,
	0x8de: 0x11ff, 0x8df: 0x1267, 0x8e0: 0x130f, 0x8e1: 0x1327, 0x8e2: 0x135b, 0x8e3: 0x135f,
	0x8e4: 0x13a3, 0x8e5: 0x13a7, 0x8e6: 0x13ff, 0x8e7: 0x1407, 0x8e8: 0x14db, 0x8e9: 0x151f,
	0x8ea: 0x1537, 0x8eb: 0x0b9b, 0x8ec: 0x171e, 0x8ed: 0x11e3,
	0x8f0: 0x06df, 0x8f1: 0x07e3, 0x8f2: 0x07a3, 0x8f3: 0x074b, 0x8f4: 0x078b, 0x8f5: 0x07b7,
	0x8f6: 0x0847, 0x8f7: 0x0863, 0x8f8: 0x094b, 0x8f9: 0x0937, 0x8fa: 0x0947, 0x8fb: 0x0963,
	0x8fc: 0x09af, 0x8fd: 0x09bf, 0x8fe: 0x0a03, 0x8ff: 0x0a0f,
	// Block 0x24, offset 0x900
	0x900: 0x0a2b, 0x901: 0x0a3b, 0x902: 0x0b23, 0x903: 0x0b2b, 0x904: 0x0b5b, 0x905: 0x0b7b,
	0x906: 0x0bab, 0x907: 0x0bc3, 0x908: 0x0bb3, 0x909: 0x0bd3, 0x90a: 0x0bc7, 0x90b: 0x0beb,
	0x90c: 0x0c07, 0x90d: 0x0c5f, 0x90e: 0x0c6b, 0x90f: 0x0c73, 0x910: 0x0c9b, 0x911: 0x0cdf,
	0x912: 0x0d0f, 0x913: 0x0d13, 0x914: 0x0d27, 0x915: 0x0da7, 0x916: 0x0db7, 0x917: 0x0e0f,
	0x918: 0x0e5b, 0x919: 0x0e53, 0x91a: 0x0e67, 0x91b: 0x0e83, 0x91c: 0x0ebb, 0x91d: 0x1013,
	0x91e: 0x0edf, 0x91f: 0x0f13, 0x920: 0x0f1f, 0x921: 0x0f5f, 0x922: 0x0f7b, 0x923: 0x0f9f,
	0x924: 0x0fc3, 0x925: 0x0fc7, 0x926: 0x0fe3, 0x927: 0x0fe7, 0x928: 0x0ff7, 0x929: 0x100b,
	0x92a: 0x1007, 0x92b: 0x1037, 0x92c: 0x10b3, 0x92d: 0x10cb, 0x92e: 0x10e3, 0x92f: 0x111b,
	0x930: 0x112f, 0x931: 0x114b, 0x932: 0x117b, 0x933: 0x122f, 0x934: 0x1257, 0x935: 0x12cb,
	0x936: 0x1313, 0x937: 0x131f, 0x938: 0x1327, 0x939: 0x133f, 0x93a: 0x1353, 0x93b: 0x1343,
	0x93c: 0x135b, 0x93d: 0x1357, 0x93e: 0x134f, 0x93f: 0x135f,
	// Block 0x25, offset 0x940
	0x940: 0x136b, 0x941: 0x13a7, 0x942: 0x13e3, 0x943: 0x1413, 0x944: 0x144b, 0x945: 0x146b,
	0x946: 0x14b7, 0x947: 0x14db, 0x948: 0x14fb, 0x949: 0x150f, 0x94a: 0x151f, 0x94b: 0x152b,
	0x94c: 0x1537, 0x94d: 0x158b, 0x94e: 0x162b, 0x94f: 0x16b5, 0x950: 0x16b0, 0x951: 0x16e2,
	0x952: 0x0607, 0x953: 0x062f, 0x954: 0x0633, 0x955: 0x1764, 0x956: 0x1791, 0x957: 0x1809,
	0x958: 0x1617, 0x959: 0x1627,
	// Block 0x26, offset 0x980
	0x980: 0x06fb, 0x981: 0x06f3, 0x982: 0x0703, 0x983: 0x1647, 0x984: 0x0747, 0x985: 0x0757,
	0x986: 0x075b, 0x987: 0x0763, 0x988: 0x076b, 0x989: 0x076f, 0x98a: 0x077b, 0x98b: 0x0773,
	0x98c: 0x05b3, 0x98d: 0x165b, 0x98e: 0x078f, 0x98f: 0x0793, 0x990: 0x0797, 0x991: 0x07b3,
	0x992: 0x164c, 0x993: 0x05b7, 0x994: 0x079f, 0x995: 0x07bf, 0x996: 0x1656, 0x997: 0x07cf,
	0x998: 0x07d7, 0x999: 0x0737, 0x99a: 0x07df, 0x99b: 0x07e3, 0x99c: 0x1831, 0x99d: 0x07ff,
	0x99e: 0x0807, 0x99f: 0x05bf, 0x9a0: 0x081f, 0x9a1: 0x0823, 0x9a2: 0x082b, 0x9a3: 0x082f,
	0x9a4: 0x05c3, 0x9a5: 0x0847, 0x9a6: 0x084b, 0x9a7: 0x0857, 0x9a8: 0x0863, 0x9a9: 0x0867,
	0x9aa: 0x086b, 0x9ab: 0x0873, 0x9ac: 0x0893, 0x9ad: 0x0897, 0x9ae: 0x089f, 0x9af: 0x08af,
	0x9b0: 0x08b7, 0x9b1: 0x08bb, 0x9b2: 0x08bb, 0x9b3: 0x08bb, 0x9b4: 0x166a, 0x9b5: 0x0e93,
	0x9b6: 0x08cf, 0x9b7: 0x08d7, 0x9b8: 0x166f, 0x9b9: 0x08e3, 0x9ba: 0x08eb, 0x9bb: 0x08f3,
	0x9bc: 0x091b, 0x9bd: 0x0907, 0x9be: 0x0913, 0x9bf: 0x0917,
	// Block 0x27, offset 0x9c0
	0x9c0: 0x091f, 0x9c1: 0x0927, 0x9c2: 0x092b, 0x9c3: 0x0933, 0x9c4: 0x093b, 0x9c5: 0x093f,
	0x9c6: 0x093f, 0x9c7: 0x0947, 0x9c8: 0x094f, 0x9c9: 0x0953, 0x9ca: 0x095f, 0x9cb: 0x0983,
	0x9cc: 0x0967, 0x9cd: 0x0987, 0x9ce: 0x096b, 0x9cf: 0x0973, 0x9d0: 0x080b, 0x9d1: 0x09cf,
	0x9d2: 0x0997, 0x9d3: 0x099b, 0x9d4: 0x099f, 0x9d5: 0x0993, 0x9d6: 0x09a7, 0x9d7: 0x09a3,
	0x9d8: 0x09bb, 0x9d9: 0x1674, 0x9da: 0x09d7, 0x9db: 0x09db, 0x9dc: 0x09e3, 0x9dd: 0x09ef,
	0x9de: 0x09f7, 0x9df: 0x0a13, 0x9e0: 0x1679, 0x9e1: 0x167e, 0x9e2: 0x0a1f, 0x9e3: 0x0a23,
	0x9e4: 0x0a27, 0x9e5: 0x0a1b, 0x9e6: 0x0a2f, 0x9e7: 0x05c7, 0x9e8: 0x05cb, 0x9e9: 0x0a37,
	0x9ea: 0x0a3f, 0x9eb: 0x0a3f, 0x9ec: 0x1683, 0x9ed: 0x0a5b, 0x9ee: 0x0a5f, 0x9ef: 0x0a63,
	0x9f0: 0x0a6b, 0x9f1: 0x1688, 0x9f2: 0x0a73, 0x9f3: 0x0a77, 0x9f4: 0x0b4f, 0x9f5: 0x0a7f,
	0x9f6: 0x05cf, 0x9f7: 0x0a8b, 0x9f8: 0x0a9b, 0x9f9: 0x0aa7, 0x9fa: 0x0aa3, 0x9fb: 0x1692,
	0x9fc: 0x0aaf, 0x9fd: 0x1697, 0x9fe: 0x0abb, 0x9ff: 0x0ab7,
	// Block 0x28, offset 0xa00
	0xa00: 0x0abf, 0xa01: 0x0acf, 0xa02: 0x0ad3, 0xa03: 0x05d3, 0xa04: 0x0ae3, 0xa05: 0x0aeb,
	0xa06: 0x0aef, 0xa07: 0x0af3, 0xa08: 0x05d7, 0xa09: 0x169c, 0xa0a: 0x05db, 0xa0b: 0x0b0f,
	0xa0c: 0x0b13, 0xa0d: 0x0b17, 0xa0e: 0x0b1f, 0xa0f: 0x1863, 0xa10: 0x0b37, 0xa11: 0x16a6,
	0xa12: 0x16a6, 0xa13: 0x11d7, 0xa14: 0x0b47, 0xa15: 0x0b47, 0xa16: 0x05df, 0xa17: 0x16c9,
	0xa18: 0x179b, 0xa19: 0x0b57, 0xa1a: 0x0b5f, 0xa1b: 0x05e3, 0xa1c: 0x0b73, 0xa1d: 0x0b83,
	0xa1e: 0x0b87, 0xa1f: 0x0b8f, 0xa20: 0x0b9f, 0xa21: 0x05eb, 0xa22: 0x05e7, 0xa23: 0x0ba3,
	0xa24: 0x16ab, 0xa25: 0x0ba7, 0xa26: 0x0bbb, 0xa27: 0x0bbf, 0xa28: 0x0bc3, 0xa29: 0x0bbf,
	0xa2a: 0x0bcf, 0xa2b: 0x0bd3, 0xa2c: 0x0be3, 0xa2d: 0x0bdb, 0xa2e: 0x0bdf, 0xa2f: 0x0be7,
	0xa30: 0x0beb, 0xa31: 0x0bef, 0xa32: 0x0bfb, 0xa33: 0x0bff, 0xa34: 0x0c17, 0xa35: 0x0c1f,
	0xa36: 0x0c2f, 0xa37: 0x0c43, 0xa38: 0x16ba, 0xa39: 0x0c3f, 0xa3a: 0x0c33, 0xa3b: 0x0c4b,
	0xa3c: 0x0c53, 0xa3d: 0x0c67, 0xa3e: 0x16bf, 0xa3f: 0x0c6f,
	// Block 0x29, offset 0xa40
	0xa40: 0x0c63, 0xa41: 0x0c5b, 0xa42: 0x05ef, 0xa43: 0x0c77, 0xa44: 0x0c7f, 0xa45: 0x0c87,
	0xa46: 0x0c7b, 0xa47: 0x05f3, 0xa48: 0x0c97, 0xa49: 0x0c9f, 0xa4a: 0x16c4, 0xa4b: 0x0ccb,
	0xa4c: 0x0cff, 0xa4d: 0x0cdb, 0xa4e: 0x05ff, 0xa4f: 0x0ce7, 0xa50: 0x05fb, 0xa51: 0x05f7,
	0xa52: 0x07c3, 0xa53: 0x07c7, 0xa54: 0x0d03, 0xa55: 0x0ceb, 0xa56: 0x11ab, 0xa57: 0x0663,
	0xa58: 0x0d0f, 0xa59: 0x0d13, 0xa5a: 0x0d17, 0xa5b: 0x0d2b, 0xa5c: 0x0d23, 0xa5d: 0x16dd,
	0xa5e: 0x0603, 0xa5f: 0x0d3f, 0xa60: 0x0d33, 0xa61: 0x0d4f, 0xa62: 0x0d57, 0xa63: 0x16e7,
	0xa64: 0x0d5b, 0xa65: 0x0d47, 0xa66: 0x0d63, 0xa67: 0x0607, 0xa68: 0x0d67, 0xa69: 0x0d6b,
	0xa6a: 0x0d6f, 0xa6b: 0x0d7b, 0xa6c: 0x16ec, 0xa6d: 0x0d83, 0xa6e: 0x060b, 0xa6f: 0x0d8f,
	0xa70: 0x16f1, 0xa71: 0x0d93, 0xa72: 0x060f, 0xa73: 0x0d9f, 0xa74: 0x0dab, 0xa75: 0x0db7,
	0xa76: 0x0dbb, 0xa77: 0x16f6, 0xa78: 0x168d, 0xa79: 0x16fb, 0xa7a: 0x0ddb, 0xa7b: 0x1700,
	0xa7c: 0x0de7, 0xa7d: 0x0def, 0xa7e: 0x0ddf, 0xa7f: 0x0dfb,
	// Block 0x2a, offset 0xa80
	0xa80: 0x0e0b, 0xa81: 0x0e1b, 0xa82: 0x0e0f, 0xa83: 0x0e13, 0xa84: 0x0e1f, 0xa85: 0x0e23,
	0xa86: 0x1705, 0xa87: 0x0e07, 0xa88: 0x0e3b, 0xa89: 0x0e3f, 0xa8a: 0x0613, 0xa8b: 0x0e53,
	0xa8c: 0x0e4f, 0xa8d: 0x170a, 0xa8e: 0x0e33, 0xa8f: 0x0e6f, 0xa90: 0x170f, 0xa91: 0x1714,
	0xa92: 0x0e73, 0xa93: 0x0e87, 0xa94: 0x0e83, 0xa95: 0x0e7f, 0xa96: 0x0617, 0xa97: 0x0e8b,
	0xa98: 0x0e9b, 0xa99: 0x0e97, 0xa9a: 0x0ea3, 0xa9b: 0x1651, 0xa9c: 0x0eb3, 0xa9d: 0x1719,
	0xa9e: 0x0ebf, 0xa9f: 0x1723, 0xaa0: 0x0ed3, 0xaa1: 0x0edf, 0xaa2: 0x0ef3, 0xaa3: 0x1728,
	0xaa4: 0x0f07, 0xaa5: 0x0f0b, 0xaa6: 0x172d, 0xaa7: 0x1732, 0xaa8: 0x0f27, 0xaa9: 0x0f37,
	0xaaa: 0x061b, 0xaab: 0x0f3b, 0xaac: 0x061f, 0xaad: 0x061f, 0xaae: 0x0f53, 0xaaf: 0x0f57,
	0xab0: 0x0f5f, 0xab1: 0x0f63, 0xab2: 0x0f6f, 0xab3: 0x0623, 0xab4: 0x0f87, 0xab5: 0x1737,
	0xab6: 0x0fa3, 0xab7: 0x173c, 0xab8: 0x0faf, 0xab9: 0x16a1, 0xaba: 0x0fbf, 0xabb: 0x1741,
	0xabc: 0x1746, 0xabd: 0x174b, 0xabe: 0x0627, 0xabf: 0x062b,
	// Block 0x2b, offset 0xac0
	0xac0: 0x0ff7, 0xac1: 0x1755, 0xac2: 0x1750, 0xac3: 0x175a, 0xac4: 0x175f, 0xac5: 0x0fff,
	0xac6: 0x1003, 0xac7: 0x1003, 0xac8: 0x100b, 0xac9: 0x0633, 0xaca: 0x100f, 0xacb: 0x0637,
	0xacc: 0x063b, 0xacd: 0x1769, 0xace: 0x1023, 0xacf: 0x102b, 0xad0: 0x1037, 0xad1: 0x063f,
	0xad2: 0x176e, 0xad3: 0x105b, 0xad4: 0x1773, 0xad5: 0x1778, 0xad6: 0x107b, 0xad7: 0x1093,
	0xad8: 0x0643, 0xad9: 0x109b, 0xada: 0x109f, 0xadb: 0x10a3, 0xadc: 0x177d, 0xadd: 0x1782,
	0xade: 0x1782, 0xadf: 0x10bb, 0xae0: 0x0647, 0xae1: 0x1787, 0xae2: 0x10cf, 0xae3: 0x10d3,
	0xae4: 0x064b, 0xae5: 0x178c, 0xae6: 0x10ef, 0xae7: 0x064f, 0xae8: 0x10ff, 0xae9: 0x10f7,
	0xaea: 0x1107, 0xaeb: 0x1796, 0xaec: 0x111f, 0xaed: 0x0653, 0xaee: 0x112b, 0xaef: 0x1133,
	0xaf0: 0x1143, 0xaf1: 0x0657, 0xaf2: 0x17a0, 0xaf3: 0x17a5, 0xaf4: 0x065b, 0xaf5: 0x17aa,
	0xaf6: 0x115b, 0xaf7: 0x17af, 0xaf8: 0x1167, 0xaf9: 0x1173, 0xafa: 0x117b, 0xafb: 0x17b4,
	0xafc: 0x17b9, 0xafd: 0x118f, 0xafe: 0x17be, 0xaff: 0x1197,
	// Block 0x2c, offset 0xb00
	0xb00: 0x16ce, 0xb01: 0x065f, 0xb02: 0x11af, 0xb03: 0x11b3, 0xb04: 0x0667, 0xb05: 0x11b7,
	0xb06: 0x0a33, 0xb07: 0x17c3, 0xb08: 0x17c8, 0xb09: 0x16d3, 0xb0a: 0x16d8, 0xb0b: 0x11d7,
	0xb0c: 0x11db, 0xb0d: 0x13f3, 0xb0e: 0x066b, 0xb0f: 0x1207, 0xb10: 0x1203, 0xb11: 0x120b,
	0xb12: 0x083f, 0xb13: 0x120f, 0xb14: 0x1213, 0xb15: 0x1217, 0xb16: 0x121f, 0xb17: 0x17cd,
	0xb18: 0x121b, 0xb19: 0x1223, 0xb1a: 0x1237, 0xb1b: 0x123b, 0xb1c: 0x1227, 0xb1d: 0x123f,
	0xb1e: 0x1253, 0xb1f: 0x1267, 0xb20: 0x1233, 0xb21: 0x1247, 0xb22: 0x124b, 0xb23: 0x124f,
	0xb24: 0x17d2, 0xb25: 0x17dc, 0xb26: 0x17d7, 0xb27: 0x066f, 0xb28: 0x126f, 0xb29: 0x1273,
	0xb2a: 0x127b, 0xb2b: 0x17f0, 0xb2c: 0x127f, 0xb2d: 0x17e1, 0xb2e: 0x0673, 0xb2f: 0x0677,
	0xb30: 0x17e6, 0xb31: 0x17eb, 0xb32: 0x067b, 0xb33: 0x129f, 0xb34: 0x12a3, 0xb35: 0x12a7,
	0xb36: 0x12ab, 0xb37: 0x12b7, 0xb38: 0x12b3, 0xb39: 0x12bf, 0xb3a: 0x12bb, 0xb3b: 0x12cb,
	0xb3c: 0x12c3, 0xb3d: 0x12c7, 0xb3e: 0x12cf, 0xb3f: 0x067f,
	// Block 0x2d, offset 0xb40
	0xb40: 0x12d7, 0xb41: 0x12db, 0xb42: 0x0683, 0xb43: 0x12eb, 0xb44: 0x12ef, 0xb45: 0x17f5,
	0xb46: 0x12fb, 0xb47: 0x12ff, 0xb48: 0x0687, 0xb49: 0x130b, 0xb4a: 0x05bb, 0xb4b: 0x17fa,
	0xb4c: 0x17ff, 0xb4d: 0x068b, 0xb4e: 0x068f, 0xb4f: 0x1337, 0xb50: 0x134f, 0xb51: 0x136b,
	0xb52: 0x137b, 0xb53: 0x1804, 0xb54: 0x138f, 0xb55: 0x1393, 0xb56: 0x13ab, 0xb57: 0x13b7,
	0xb58: 0x180e, 0xb59: 0x1660, 0xb5a: 0x13c3, 0xb5b: 0x13bf, 0xb5c: 0x13cb, 0xb5d: 0x1665,
	0xb5e: 0x13d7, 0xb5f: 0x13e3, 0xb60: 0x1813, 0xb61: 0x1818, 0xb62: 0x1423, 0xb63: 0x142f,
	0xb64: 0x1437, 0xb65: 0x181d, 0xb66: 0x143b, 0xb67: 0x1467, 0xb68: 0x1473, 0xb69: 0x1477,
	0xb6a: 0x146f, 0xb6b: 0x1483, 0xb6c: 0x1487, 0xb6d: 0x1822, 0xb6e: 0x1493, 0xb6f: 0x0693,
	0xb70: 0x149b, 0xb71: 0x1827, 0xb72: 0x0697, 0xb73: 0x14d3, 0xb74: 0x0ac3, 0xb75: 0x14eb,
	0xb76: 0x182c, 0xb77: 0x1836, 0xb78: 0x069b, 0xb79: 0x069f, 0xb7a: 0x1513, 0xb7b: 0x183b,
	0xb7c: 0x06a3, 0xb7d: 0x1840, 0xb7e: 0x152b, 0xb7f: 0x152b,
	// Block 0x2e, offset 0xb80
	0xb80: 0x1533, 0xb81: 0x1845, 0xb82: 0x154b, 0xb83: 0x06a7, 0xb84: 0x155b, 0xb85: 0x1567,
	0xb86: 0x156f, 0xb87: 0x1577, 0xb88: 0x06ab, 0xb89: 0x184a, 0xb8a: 0x158b, 0xb8b: 0x15a7,
	0xb8c: 0x15b3, 0xb8d: 0x06af, 0xb8e: 0x06b3, 0xb8f: 0x15b7, 0xb90: 0x184f, 0xb91: 0x06b7,
	0xb92: 0x1854, 0xb93: 0x1859, 0xb94: 0x185e, 0xb95: 0x15db, 0xb96: 0x06bb, 0xb97: 0x15ef,
	0xb98: 0x15f7, 0xb99: 0x15fb, 0xb9a: 0x1603, 0xb9b: 0x160b, 0xb9c: 0x1613, 0xb9d: 0x1868,
}

// nfcIndex: 22 blocks, 1408 entries, 1408 bytes
// Block 0 is the zero block.
var nfcIndex = [1408]uint8{
	// Block 0x0, offset 0x0
	// Block 0x1, offset 0x40
	// Block 0x2, offset 0x80
	// Block 0x3, offset 0xc0
	0xc2: 0x2d, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x2e, 0xc7: 0x04,
	0xc8: 0x05, 0xca: 0x2f, 0xcb: 0x30, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x31,
	0xd0: 0x09, 0xd1: 0x32, 0xd2: 0x33, 0xd3: 0x0a, 0xd6: 0x0b, 0xd7: 0x34,
	0xd8: 0x35, 0xd9: 0x0c, 0xdb: 0x36, 0xdc: 0x37, 0xdd: 0x38, 0xdf: 0x39,
	0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05,
	0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a,
	0xf0: 0x13,
	// Block 0x4, offset 0x100
	0x120: 0x3a, 0x121: 0x3b, 0x123: 0x3c, 0x124: 0x3d, 0x125: 0x3e, 0x126: 0x3f, 0x127: 0x40,
	0x128: 0x41, 0x129: 0x42, 0x12a: 0x43, 0x12b: 0x44, 0x12c: 0x3f, 0x12d: 0x45, 0x12e: 0x46, 0x12f: 0x47,
	0x131: 0x48, 0x132: 0x49, 0x133: 0x4a, 0x134: 0x4b, 0x135: 0x4c, 0x137: 0x4d,
	0x138: 0x4e, 0x139: 0x4f, 0x13a: 0x50, 0x13b: 0x51, 0x13c: 0x52, 0x13d: 0x53, 0x13e: 0x54, 0x13f: 0x55,
	// Block 0x5, offset 0x140
	0x140: 0x56, 0x142: 0x57, 0x144: 0x58, 0x145: 0x59, 0x146: 0x5a, 0x147: 0x5b,
	0x14d: 0x5c,
	0x15c: 0x5d, 0x15f: 0x5e,
	0x162: 0x5f, 0x164: 0x60,
	0x168: 0x61, 0x169: 0x62, 0x16a: 0x63, 0x16c: 0x0d, 0x16d: 0x64, 0x16e: 0x65, 0x16f: 0x66,
	0x170: 0x67, 0x173: 0x68, 0x177: 0x0e,
	0x178: 0x0f, 0x179: 0x10, 0x17a: 0x11, 0x17b: 0x12, 0x17c: 0x13, 0x17d: 0x14, 0x17e: 0x15, 0x17f: 0x16,
	// Block 0x6, offset 0x180
	0x180: 0x69, 0x183: 0x6a, 0x184: 0x6b, 0x186: 0x6c, 0x187: 0x6d,
	0x188: 0x6e, 0x189: 0x17, 0x18a: 0x18, 0x18b: 0x6f, 0x18c: 0x70,
	0x1ab: 0x71,
	0x1b3: 0x72, 0x1b5: 0x73, 0x1b7: 0x74,
	// Block 0x7, offset 0x1c0
	0x1c0: 0x75, 0x1c1: 0x19, 0x1c2: 0x1a, 0x1c3: 0x1b, 0x1c4: 0x76, 0x1c5: 0x77,
	0x1c9: 0x78, 0x1cc: 0x79, 0x1cd: 0x7a,
	// Block 0x8, offset 0x200
	0x219: 0x7b, 0x21a: 0x7c, 0x21b: 0x7d,
	0x220: 0x7e, 0x223: 0x7f, 0x224: 0x80, 0x225: 0x81, 0x226: 0x82, 0x227: 0x83,
	0x22a: 0x84, 0x22b: 0x85, 0x22f: 0x86,
	0x230: 0x87, 0x231: 0x88, 0x232: 0x89, 0x233: 0x8a, 0x234: 0x8b, 0x235: 0x8c, 0x236: 0x8d, 0x237: 0x87,
	0x238: 0x88, 0x239: 0x89, 0x23a: 0x8a, 0x23b: 0x8b, 0x23c: 0x8c, 0x23d: 0x8d, 0x23e: 0x87, 0x23f: 0x88,
	// Block 0x9, offset 0x240
	0x240: 0x89, 0x241: 0x8a, 0x242: 0x8b, 0x243: 0x8c, 0x244: 0x8d, 0x245: 0x87, 0x246: 0x88, 0x247: 0x89,
	0x248: 0x8a, 0x249: 0x8b, 0x24a: 0x8c, 0x24b: 0x8d, 0x24c: 0x87, 0x24d: 0x88, 0x24e: 0x89, 0x24f: 0x8a,
	0x250: 0x8b, 0x251: 0x8c, 0x252: 0x8d, 0x253: 0x87, 0x254: 0x88, 0x255: 0x89, 0x256: 0x8a, 0x257: 0x8b,
	0x258: 0x8c, 0x259: 0x8d, 0x25a: 0x87, 0x25b: 0x88, 0x25c: 0x89, 0x25d: 0x8a, 0x25e: 0x8b, 0x25f: 0x8c,
	0x260: 0x8d, 0x261: 0x87, 0x262: 0x88, 0x263: 0x89, 0x264: 0x8a, 0x265: 0x8b, 0x266: 0x8c, 0x267: 0x8d,
	0x268: 0x87, 0x269: 0x88, 0x26a: 0x89, 0x26b: 0x8a, 0x26c: 0x8b, 0x26d: 0x8c, 0x26e: 0x8d, 0x26f: 0x87,
	0x270: 0x88, 0x271: 0x89, 0x272: 0x8a, 0x273: 0x8b, 0x274: 0x8c, 0x275: 0x8d, 0x276: 0x87, 0x277: 0x88,
	0x278: 0x89, 0x279: 0x8a, 0x27a: 0x8b, 0x27b: 0x8c, 0x27c: 0x8d, 0x27d: 0x87, 0x27e: 0x88, 0x27f: 0x89,
	// Block 0xa, offset 0x280
	0x280: 0x8a, 0x281: 0x8b, 0x282: 0x8c, 0x283: 0x8d, 0x284: 0x87, 0x285: 0x88, 0x286: 0x89, 0x287: 0x8a,
	0x288: 0x8b, 0x289: 0x8c, 0x28a: 0x8d, 0x28b: 0x87, 0x28c: 0x88, 0x28d: 0x89, 0x28e: 0x8a, 0x28f: 0x8b,
	0x290: 0x8c, 0x291: 0x8d, 0x292: 0x87, 0x293: 0x88, 0x294: 0x89, 0x295: 0x8a, 0x296: 0x8b, 0x297: 0x8c,
	0x298: 0x8d, 0x299: 0x87, 0x29a: 0x88, 0x29b: 0x89, 0x29c: 0x8a, 0x29d: 0x8b, 0x29e: 0x8c, 0x29f: 0x8d,
	0x2a0: 0x87, 0x2a1: 0x88, 0x2a2: 0x89, 0x2a3: 0x8a, 0x2a4: 0x8b, 0x2a5: 0x8c, 0x2a6: 0x8d, 0x2a7: 0x87,
	0x2a8: 0x88, 0x2a9: 0x89, 0x2aa: 0x8a, 0x2ab: 0x8b, 0x2ac: 0x8c, 0x2ad: 0x8d, 0x2ae: 0x87, 0x2af: 0x88,
	0x2b0: 0x89, 0x2b1: 0x8a, 0x2b2: 0x8b, 0x2b3: 0x8c, 0x2b4: 0x8d, 0x2b5: 0x87, 0x2b6: 0x88, 0x2b7: 0x89,
	0x2b8: 0x8a, 0x2b9: 0x8b, 0x2ba: 0x8c, 0x2bb: 0x8d, 0x2bc: 0x87, 0x2bd: 0x88, 0x2be: 0x89, 0x2bf: 0x8a,
	// Block 0xb, offset 0x2c0
	0x2c0: 0x8b, 0x2c1: 0x8c, 0x2c2: 0x8d, 0x2c3: 0x87, 0x2c4: 0x88, 0x2c5: 0x89, 0x2c6: 0x8a, 0x2c7: 0x8b,
	0x2c8: 0x8c, 0x2c9: 0x8d, 0x2ca: 0x87, 0x2cb: 0x88, 0x2cc: 0x89, 0x2cd: 0x8a, 0x2ce: 0x8b, 0x2cf: 0x8c,
	0x2d0: 0x8d, 0x2d1: 0x87, 0x2d2: 0x88, 0x2d3: 0x89, 0x2d4: 0x8a, 0x2d5: 0x8b, 0x2d6: 0x8c, 0x2d7: 0x8d,
	0x2d8: 0x87, 0x2d9: 0x88, 0x2da: 0x89, 0x2db: 0x8a, 0x2dc: 0x8b, 0x2dd: 0x8c, 0x2de: 0x8e,
	// Block 0xc, offset 0x300
	0x324: 0x1c, 0x325: 0x1d, 0x326: 0x1e, 0x327: 0x1f,
	0x328: 0x20, 0x329: 0x21, 0x32a: 0x22, 0x32b: 0x23, 0x32c: 0x8f, 0x32d: 0x90, 0x32e: 0x91,
	0x331: 0x92, 0x332: 0x93, 0x333: 0x94, 0x334: 0x95,
	0x338: 0x96, 0x339: 0x97, 0x33a: 0x98, 0x33b: 0x99, 0x33e: 0x9a, 0x33f: 0x9b,
	// Block 0xd, offset 0x340
	0x347: 0x9c,
	0x34b: 0x9d, 0x34d: 0x9e,
	0x368: 0x9f, 0x36b: 0xa0,
	// Block 0xe, offset 0x380
	0x381: 0xa1, 0x382: 0xa2, 0x384: 0xa3, 0x385: 0x82, 0x387: 0xa4,
	0x388: 0xa5, 0x38b: 0xa6, 0x38c: 0x3f, 0x38d: 0xa7,
	0x391: 0xa8, 0x392: 0xa9, 0x393: 0xaa, 0x396: 0xab, 0x397: 0xac,
	0x398: 0x73, 0x39a: 0xad, 0x39c: 0xae,
	0x3a8: 0xaf, 0x3a9: 0xb0, 0x3aa: 0xb1,
	0x3b0: 0x73, 0x3b5: 0xb2,
	// Block 0xf, offset 0x3c0
	0x3eb: 0xb3, 0x3ec: 0xb4,
	// Block 0x10, offset 0x400
	0x432: 0xb5,
	// Block 0x11, offset 0x440
	0x445: 0xb6, 0x446: 0xb7, 0x447: 0xb8,
	0x449: 0xb9,
	// Block 0x12, offset 0x480
	0x480: 0xba,
	0x4a3: 0xbb, 0x4a5: 0xbc,
	// Block 0x13, offset 0x4c0
	0x4c8: 0xbd,
	// Block 0x14, offset 0x500
	0x520: 0x24, 0x521: 0x25, 0x522: 0x26, 0x523: 0x27, 0x524: 0x28, 0x525: 0x29, 0x526: 0x2a, 0x527: 0x2b,
	0x528: 0x2c,
	// Block 0x15, offset 0x540
	0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d,
	0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11,
	0x56f: 0x12,
}

// nfcSparseOffset: 145 entries, 290 bytes
var nfcSparseOffset = []uint16{0x0, 0x5, 0x9, 0xb, 0xd, 0x18, 0x28, 0x2a, 0x2f, 0x3a, 0x49, 0x56, 0x5e, 0x62, 0x67, 0x69, 0x7a, 0x82, 0x89, 0x8c, 0x93, 0x97, 0x9b, 0x9d, 0x9f, 0xa8, 0xac, 0xb3, 0xb8, 0xbb, 0xc5, 0xc8, 0xcf, 0xd7, 0xda, 0xdc, 0xde, 0xe0, 0xe5, 0xf6, 0x102, 0x104, 0x10a, 0x10c, 0x10e, 0x110, 0x112, 0x114, 0x116, 0x119, 0x11c, 0x11e, 0x121, 0x124, 0x128, 0x12d, 0x136, 0x138, 0x13b, 0x13d, 0x148, 0x14c, 0x15a, 0x15d, 0x163, 0x169, 0x174, 0x178, 0x17a, 0x17c, 0x17e, 0x180, 0x182, 0x188, 0x18c, 0x18e, 0x190, 0x198, 0x19c, 0x19f, 0x1a1, 0x1a3, 0x1a5, 0x1a8, 0x1aa, 0x1ac, 0x1ae, 0x1b0, 0x1b6, 0x1b9, 0x1bb, 0x1c2, 0x1c8, 0x1ce, 0x1d6, 0x1dc, 0x1e2, 0x1e8, 0x1ec, 0x1fa, 0x203, 0x206, 0x209, 0x20b, 0x20e, 0x210, 0x214, 0x219, 0x21b, 0x21d, 0x222, 0x228, 0x22a, 0x22c, 0x22e, 0x234, 0x237, 0x23a, 0x242, 0x249, 0x24c, 0x24f, 0x251, 0x259, 0x25c, 0x263, 0x266, 0x26c, 0x26e, 0x271, 0x273, 0x275, 0x277, 0x279, 0x27c, 0x27e, 0x280, 0x282, 0x28f, 0x299, 0x29b, 0x29d, 0x2a3, 0x2a5, 0x2a8}

// nfcSparseValues: 682 entries, 2728 bytes
var nfcSparseValues = [682]valueRange{
	// Block 0x0, offset 0x0
	{value: 0x0000, lo: 0x04},
	{value: 0xa100, lo: 0xa8, hi: 0xa8},
	{value: 0x8100, lo: 0xaf, hi: 0xaf},
	{value: 0x8100, lo: 0xb4, hi: 0xb4},
	{value: 0x8100, lo: 0xb8, hi: 0xb8},
	// Block 0x1, offset 0x5
	{value: 0x0091, lo: 0x03},
	{value: 0x46e2, lo: 0xa0, hi: 0xa1},
	{value: 0x4714, lo: 0xaf, hi: 0xb0},
	{value: 0xa000, lo: 0xb7, hi: 0xb7},
	// Block 0x2, offset 0x9
	{value: 0x0000, lo: 0x01},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	// Block 0x3, offset 0xb
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0x98, hi: 0x9d},
	// Block 0x4, offset 0xd
	{value: 0x0006, lo: 0x0a},
	{value: 0xa000, lo: 0x81, hi: 0x81},
	{value: 0xa000, lo: 0x85, hi: 0x85},
	{value: 0xa000, lo: 0x89, hi: 0x89},
	{value: 0x4840, lo: 0x8a, hi: 0x8a},
	{value: 0x485e, lo: 0x8b, hi: 0x8b},
	{value: 0x36c7, lo: 0x8c, hi: 0x8c},
	{value: 0x36df, lo: 0x8d, hi: 0x8d},
	{value: 0x4876, lo: 0x8e, hi: 0x8e},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x36fd, lo: 0x93, hi: 0x94},
	// Block 0x5, offset 0x18
	{value: 0x0000, lo: 0x0f},
	{value: 0xa000, lo: 0x83, hi: 0x83},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0xa000, lo: 0x8b, hi: 0x8b},
	{value: 0xa000, lo: 0x8d, hi: 0x8d},
	{value: 0x37a5, lo: 0x90, hi: 0x90},
	{value: 0x37b1, lo: 0x91, hi: 0x91},
	{value: 0x379f, lo: 0x93, hi: 0x93},
	{value: 0xa000, lo: 0x96, hi: 0x96},
	{value: 0x3817, lo: 0x97, hi: 0x97},
	{value: 0x37e1, lo: 0x9c, hi: 0x9c},
	{value: 0x37c9, lo: 0x9d, hi: 0x9d},
	{value: 0x37f3, lo: 0x9e, hi: 0x9e},
	{value: 0xa000, lo: 0xb4, hi: 0xb5},
	{value: 0x381d, lo: 0xb6, hi: 0xb6},
	{value: 0x3823, lo: 0xb7, hi: 0xb7},
	// Block 0x6, offset 0x28
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x83, hi: 0x87},
	// Block 0x7, offset 0x2a
	{value: 0x0001, lo: 0x04},
	{value: 0x8113, lo: 0x81, hi: 0x82},
	{value: 0x8132, lo: 0x84, hi: 0x84},
	{value: 0x812d, lo: 0x85, hi: 0x85},
	{value: 0x810d, lo: 0x87, hi: 0x87},
	// Block 0x8, offset 0x2f
	{value: 0x0000, lo: 0x0a},
	{value: 0x8132, lo: 0x90, hi: 0x97},
	{value: 0x8119, lo: 0x98, hi: 0x98},
	{value: 0x811a, lo: 0x99, hi: 0x99},
	{value: 0x811b, lo: 0x9a, hi: 0x9a},
	{value: 0x3841, lo: 0xa2, hi: 0xa2},
	{value: 0x3847, lo: 0xa3, hi: 0xa3},
	{value: 0x3853, lo: 0xa4, hi: 0xa4},
	{value: 0x384d, lo: 0xa5, hi: 0xa5},
	{value: 0x3859, lo: 0xa6, hi: 0xa6},
	{value: 0xa000, lo: 0xa7, hi: 0xa7},
	// Block 0x9, offset 0x3a
	{value: 0x0000, lo: 0x0e},
	{value: 0x386b, lo: 0x80, hi: 0x80},
	{value: 0xa000, lo: 0x81, hi: 0x81},
	{value: 0x385f, lo: 0x82, hi: 0x82},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x3865, lo: 0x93, hi: 0x93},
	{value: 0xa000, lo: 0x95, hi: 0x95},
	{value: 0x8132, lo: 0x96, hi: 0x9c},
	{value: 0x8132, lo: 0x9f, hi: 0xa2},
	{value: 0x812d, lo: 0xa3, hi: 0xa3},
	{value: 0x8132, lo: 0xa4, hi: 0xa4},
	{value: 0x8132, lo: 0xa7, hi: 0xa8},
	{value: 0x812d, lo: 0xaa, hi: 0xaa},
	{value: 0x8132, lo: 0xab, hi: 0xac},
	{value: 0x812d, lo: 0xad, hi: 0xad},
	// Block 0xa, offset 0x49
	{value: 0x0000, lo: 0x0c},
	{value: 0x811f, lo: 0x91, hi: 0x91},
	{value: 0x8132, lo: 0xb0, hi: 0xb0},
	{value: 0x812d, lo: 0xb1, hi: 0xb1},
	{value: 0x8132, lo: 0xb2, hi: 0xb3},
	{value: 0x812d, lo: 0xb4, hi: 0xb4},
	{value: 0x8132, lo: 0xb5, hi: 0xb6},
	{value: 0x812d, lo: 0xb7, hi: 0xb9},
	{value: 0x8132, lo: 0xba, hi: 0xba},
	{value: 0x812d, lo: 0xbb, hi: 0xbc},
	{value: 0x8132, lo: 0xbd, hi: 0xbd},
	{value: 0x812d, lo: 0xbe, hi: 0xbe},
	{value: 0x8132, lo: 0xbf, hi: 0xbf},
	// Block 0xb, offset 0x56
	{value: 0x0005, lo: 0x07},
	{value: 0x8132, lo: 0x80, hi: 0x80},
	{value: 0x8132, lo: 0x81, hi: 0x81},
	{value: 0x812d, lo: 0x82, hi: 0x83},
	{value: 0x812d, lo: 0x84, hi: 0x85},
	{value: 0x812d, lo: 0x86, hi: 0x87},
	{value: 0x812d, lo: 0x88, hi: 0x89},
	{value: 0x8132, lo: 0x8a, hi: 0x8a},
	// Block 0xc, offset 0x5e
	{value: 0x0000, lo: 0x03},
	{value: 0x8132, lo: 0xab, hi: 0xb1},
	{value: 0x812d, lo: 0xb2, hi: 0xb2},
	{value: 0x8132, lo: 0xb3, hi: 0xb3},
	// Block 0xd, offset 0x62
	{value: 0x0000, lo: 0x04},
	{value: 0x8132, lo: 0x96, hi: 0x99},
	{value: 0x8132, lo: 0x9b, hi: 0xa3},
	{value: 0x8132, lo: 0xa5, hi: 0xa7},
	{value: 0x8132, lo: 0xa9, hi: 0xad},
	// Block 0xe, offset 0x67
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x99, hi: 0x9b},
	// Block 0xf, offset 0x69
	{value: 0x0000, lo: 0x10},
	{value: 0x8132, lo: 0x94, hi: 0xa1},
	{value: 0x812d, lo: 0xa3, hi: 0xa3},
	{value: 0x8132, lo: 0xa4, hi: 0xa5},
	{value: 0x812d, lo: 0xa6, hi: 0xa6},
	{value: 0x8132, lo: 0xa7, hi: 0xa8},
	{value: 0x812d, lo: 0xa9, hi: 0xa9},
	{value: 0x8132, lo: 0xaa, hi: 0xac},
	{value: 0x812d, lo: 0xad, hi: 0xaf},
	{value: 0x8116, lo: 0xb0, hi: 0xb0},
	{value: 0x8117, lo: 0xb1, hi: 0xb1},
	{value: 0x8118, lo: 0xb2, hi: 0xb2},
	{value: 0x8132, lo: 0xb3, hi: 0xb5},
	{value: 0x812d, lo: 0xb6, hi: 0xb6},
	{value: 0x8132, lo: 0xb7, hi: 0xb8},
	{value: 0x812d, lo: 0xb9, hi: 0xba},
	{value: 0x8132, lo: 0xbb, hi: 0xbf},
	// Block 0x10, offset 0x7a
	{value: 0x0000, lo: 0x07},
	{value: 0xa000, lo: 0xa8, hi: 0xa8},
	{value: 0x3ed8, lo: 0xa9, hi: 0xa9},
	{value: 0xa000, lo: 0xb0, hi: 0xb0},
	{value: 0x3ee0, lo: 0xb1, hi: 0xb1},
	{value: 0xa000, lo: 0xb3, hi: 0xb3},
	{value: 0x3ee8, lo: 0xb4, hi: 0xb4},
	{value: 0x9902, lo: 0xbc, hi: 0xbc},
	// Block 0x11, offset 0x82
	{value: 0x0008, lo: 0x06},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x8132, lo: 0x91, hi: 0x91},
	{value: 0x812d, lo: 0x92, hi: 0x92},
	{value: 0x8132, lo: 0x93, hi: 0x93},
	{value: 0x8132, lo: 0x94, hi: 0x94},
	{value: 0x451c, lo: 0x98, hi: 0x9f},
	// Block 0x12, offset 0x89
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x13, offset 0x8c
	{value: 0x0008, lo: 0x06},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2c9e, lo: 0x8b, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	{value: 0x455c, lo: 0x9c, hi: 0x9d},
	{value: 0x456c, lo: 0x9f, hi: 0x9f},
	// Block 0x14, offset 0x93
	{value: 0x0000, lo: 0x03},
	{value: 0x4594, lo: 0xb3, hi: 0xb3},
	{value: 0x459c, lo: 0xb6, hi: 0xb6},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	// Block 0x15, offset 0x97
	{value: 0x0008, lo: 0x03},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x4574, lo: 0x99, hi: 0x9b},
	{value: 0x458c, lo: 0x9e, hi: 0x9e},
	// Block 0x16, offset 0x9b
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	// Block 0x17, offset 0x9d
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	// Block 0x18, offset 0x9f
	{value: 0x0000, lo: 0x08},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2cb6, lo: 0x88, hi: 0x88},
	{value: 0x2cae, lo: 0x8b, hi: 0x8b},
	{value: 0x2cbe, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x96, hi: 0x97},
	{value: 0x45a4, lo: 0x9c, hi: 0x9c},
	{value: 0x45ac, lo: 0x9d, hi: 0x9d},
	// Block 0x19, offset 0xa8
	{value: 0x0000, lo: 0x03},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x2cc6, lo: 0x94, hi: 0x94},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x1a, offset 0xac
	{value: 0x0000, lo: 0x06},
	{value: 0xa000, lo: 0x86, hi: 0x87},
	{value: 0x2cce, lo: 0x8a, hi: 0x8a},
	{value: 0x2cde, lo: 0x8b, hi: 0x8b},
	{value: 0x2cd6, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	// Block 0x1b, offset 0xb3
	{value: 0x1801, lo: 0x04},
	{value: 0xa000, lo: 0x86, hi: 0x86},
	{value: 0x3ef0, lo: 0x88, hi: 0x88},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x8120, lo: 0x95, hi: 0x96},
	// Block 0x1c, offset 0xb8
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	{value: 0xa000, lo: 0xbf, hi: 0xbf},
	// Block 0x1d, offset 0xbb
	{value: 0x0000, lo: 0x09},
	{value: 0x2ce6, lo: 0x80, hi: 0x80},
	{value: 0x9900, lo: 0x82, hi: 0x82},
	{value: 0xa000, lo: 0x86, hi: 0x86},
	{value: 0x2cee, lo: 0x87, hi: 0x87},
	{value: 0x2cf6, lo: 0x88, hi: 0x88},
	{value: 0x2f50, lo: 0x8a, hi: 0x8a},
	{value: 0x2dd8, lo: 0x8b, hi: 0x8b},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x95, hi: 0x96},
	// Block 0x1e, offset 0xc5
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0xbb, hi: 0xbc},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x1f, offset 0xc8
	{value: 0x0000, lo: 0x06},
	{value: 0xa000, lo: 0x86, hi: 0x87},
	{value: 0x2cfe, lo: 0x8a, hi: 0x8a},
	{value: 0x2d0e, lo: 0x8b, hi: 0x8b},
	{value: 0x2d06, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	// Block 0x20, offset 0xcf
	{value: 0x6bea, lo: 0x07},
	{value: 0x9904, lo: 0x8a, hi: 0x8a},
	{value: 0x9900, lo: 0x8f, hi: 0x8f},
	{value: 0xa000, lo: 0x99, hi: 0x99},
	{value: 0x3ef8, lo: 0x9a, hi: 0x9a},
	{value: 0x2f58, lo: 0x9c, hi: 0x9c},
	{value: 0x2de3, lo: 0x9d, hi: 0x9d},
	{value: 0x2d16, lo: 0x9e, hi: 0x9f},
	// Block 0x21, offset 0xd7
	{value: 0x0000, lo: 0x02},
	{value: 0x8122, lo: 0xb8, hi: 0xb9},
	{value: 0x8104, lo: 0xba, hi: 0xba},
	// Block 0x22, offset 0xda
	{value: 0x0000, lo: 0x01},
	{value: 0x8123, lo: 0x88, hi: 0x8b},
	// Block 0x23, offset 0xdc
	{value: 0x0000, lo: 0x01},
	{value: 0x8124, lo: 0xb8, hi: 0xb9},
	// Block 0x24, offset 0xde
	{value: 0x0000, lo: 0x01},
	{value: 0x8125, lo: 0x88, hi: 0x8b},
	// Block 0x25, offset 0xe0
	{value: 0x0000, lo: 0x04},
	{value: 0x812d, lo: 0x98, hi: 0x99},
	{value: 0x812d, lo: 0xb5, hi: 0xb5},
	{value: 0x812d, lo: 0xb7, hi: 0xb7},
	{value: 0x812b, lo: 0xb9, hi: 0xb9},
	// Block 0x26, offset 0xe5
	{value: 0x0000, lo: 0x10},
	{value: 0x2644, lo: 0x83, hi: 0x83},
	{value: 0x264b, lo: 0x8d, hi: 0x8d},
	{value: 0x2652, lo: 0x92, hi: 0x92},
	{value: 0x2659, lo: 0x97, hi: 0x97},
	{value: 0x2660, lo: 0x9c, hi: 0x9c},
	{value: 0x263d, lo: 0xa9, hi: 0xa9},
	{value: 0x8126, lo: 0xb1, hi: 0xb1},
	{value: 0x8127, lo: 0xb2, hi: 0xb2},
	{value: 0x4a84, lo: 0xb3, hi: 0xb3},
	{value: 0x8128, lo: 0xb4, hi: 0xb4},
	{value: 0x4a8d, lo: 0xb5, hi: 0xb5},
	{value: 0x45b4, lo: 0xb6, hi: 0xb6},
	{value: 0x8200, lo: 0xb7, hi: 0xb7},
	{value: 0x45bc, lo: 0xb8, hi: 0xb8},
	{value: 0x8200, lo: 0xb9, hi: 0xb9},
	{value: 0x8127, lo: 0xba, hi: 0xbd},
	// Block 0x27, offset 0xf6
	{value: 0x0000, lo: 0x0b},
	{value: 0x8127, lo: 0x80, hi: 0x80},
	{value: 0x4a96, lo: 0x81, hi: 0x81},
	{value: 0x8132, lo: 0x82, hi: 0x83},
	{value: 0x8104, lo: 0x84, hi: 0x84},
	{value: 0x8132, lo: 0x86, hi: 0x87},
	{value: 0x266e, lo: 0x93, hi: 0x93},
	{value: 0x2675, lo: 0x9d, hi: 0x9d},
	{value: 0x267c, lo: 0xa2, hi: 0xa2},
	{value: 0x2683, lo: 0xa7, hi: 0xa7},
	{value: 0x268a, lo: 0xac, hi: 0xac},
	{value: 0x2667, lo: 0xb9, hi: 0xb9},
	// Block 0x28, offset 0x102
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x86, hi: 0x86},
	// Block 0x29, offset 0x104
	{value: 0x0000, lo: 0x05},
	{value: 0xa000, lo: 0xa5, hi: 0xa5},
	{value: 0x2d1e, lo: 0xa6, hi: 0xa6},
	{value: 0x9900, lo: 0xae, hi: 0xae},
	{value: 0x8102, lo: 0xb7, hi: 0xb7},
	{value: 0x8104, lo: 0xb9, hi: 0xba},
	// Block 0x2a, offset 0x10a
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x8d, hi: 0x8d},
	// Block 0x2b, offset 0x10c
	{value: 0x0000, lo: 0x01},
	{value: 0xa000, lo: 0x80, hi: 0x92},
	// Block 0x2c, offset 0x10e
	{value: 0x0000, lo: 0x01},
	{value: 0xb900, lo: 0xa1, hi: 0xb5},
	// Block 0x2d, offset 0x110
	{value: 0x0000, lo: 0x01},
	{value: 0x9900, lo: 0xa8, hi: 0xbf},
	// Block 0x2e, offset 0x112
	{value: 0x0000, lo: 0x01},
	{value: 0x9900, lo: 0x80, hi: 0x82},
	// Block 0x2f, offset 0x114
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x9d, hi: 0x9f},
	// Block 0x30, offset 0x116
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x94, hi: 0x94},
	{value: 0x8104, lo: 0xb4, hi: 0xb4},
	// Block 0x31, offset 0x119
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x92, hi: 0x92},
	{value: 0x8132, lo: 0x9d, hi: 0x9d},
	// Block 0x32, offset 0x11c
	{value: 0x0000, lo: 0x01},
	{value: 0x8131, lo: 0xa9, hi: 0xa9},
	// Block 0x33, offset 0x11e
	{value: 0x0004, lo: 0x02},
	{value: 0x812e, lo: 0xb9, hi: 0xba},
	{value: 0x812d, lo: 0xbb, hi: 0xbb},
	// Block 0x34, offset 0x121
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0x97, hi: 0x97},
	{value: 0x812d, lo: 0x98, hi: 0x98},
	// Block 0x35, offset 0x124
	{value: 0x0000, lo: 0x03},
	{value: 0x8104, lo: 0xa0, hi: 0xa0},
	{value: 0x8132, lo: 0xb5, hi: 0xbc},
	{value: 0x812d, lo: 0xbf, hi: 0xbf},
	// Block 0x36, offset 0x128
	{value: 0x0000, lo: 0x04},
	{value: 0x8132, lo: 0xb0, hi: 0xb4},
	{value: 0x812d, lo: 0xb5, hi: 0xba},
	{value: 0x8132, lo: 0xbb, hi: 0xbc},
	{value: 0x812d, lo: 0xbd, hi: 0xbd},
	// Block 0x37, offset 0x12d
	{value: 0x0000, lo: 0x08},
	{value: 0x2d66, lo: 0x80, hi: 0x80},
	{value: 0x2d6e, lo: 0x81, hi: 0x81},
	{value: 0xa000, lo: 0x82, hi: 0x82},
	{value: 0x2d76, lo: 0x83, hi: 0x83},
	{value: 0x8104, lo: 0x84, hi: 0x84},
	{value: 0x8132, lo: 0xab, hi: 0xab},
	{value: 0x812d, lo: 0xac, hi: 0xac},
	{value: 0x8132, lo: 0xad, hi: 0xb3},
	// Block 0x38, offset 0x136
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xaa, hi: 0xab},
	// Block 0x39, offset 0x138
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xa6, hi: 0xa6},
	{value: 0x8104, lo: 0xb2, hi: 0xb3},
	// Block 0x3a, offset 0x13b
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0xb7, hi: 0xb7},
	// Block 0x3b, offset 0x13d
	{value: 0x0000, lo: 0x0a},
	{value: 0x8132, lo: 0x90, hi: 0x92},
	{value: 0x8101, lo: 0x94, hi: 0x94},
	{value: 0x812d, lo: 0x95, hi: 0x99},
	{value: 0x8132, lo: 0x9a, hi: 0x9b},
	{value: 0x812d, lo: 0x9c, hi: 0x9f},
	{value: 0x8132, lo: 0xa0, hi: 0xa0},
	{value: 0x8101, lo: 0xa2, hi: 0xa8},
	{value: 0x812d, lo: 0xad, hi: 0xad},
	{value: 0x8132, lo: 0xb4, hi: 0xb4},
	{value: 0x8132, lo: 0xb8, hi: 0xb9},
	// Block 0x3c, offset 0x148
	{value: 0x0004, lo: 0x03},
	{value: 0x0433, lo: 0x80, hi: 0x81},
	{value: 0x8100, lo: 0x97, hi: 0x97},
	{value: 0x8100, lo: 0xbe, hi: 0xbe},
	// Block 0x3d, offset 0x14c
	{value: 0x0000, lo: 0x0d},
	{value: 0x8132, lo: 0x90, hi: 0x91},
	{value: 0x8101, lo: 0x92, hi: 0x93},
	{value: 0x8132, lo: 0x94, hi: 0x97},
	{value: 0x8101, lo: 0x98, hi: 0x9a},
	{value: 0x8132, lo: 0x9b, hi: 0x9c},
	{value: 0x8132, lo: 0xa1, hi: 0xa1},
	{value: 0x8101, lo: 0xa5, hi: 0xa6},
	{value: 0x8132, lo: 0xa7, hi: 0xa7},
	{value: 0x812d, lo: 0xa8, hi: 0xa8},
	{value: 0x8132, lo: 0xa9, hi: 0xa9},
	{value: 0x8101, lo: 0xaa, hi: 0xab},
	{value: 0x812d, lo: 0xac, hi: 0xaf},
	{value: 0x8132, lo: 0xb0, hi: 0xb0},
	// Block 0x3e, offset 0x15a
	{value: 0x427b, lo: 0x02},
	{value: 0x01b8, lo: 0xa6, hi: 0xa6},
	{value: 0x0057, lo: 0xaa, hi: 0xab},
	// Block 0x3f, offset 0x15d
	{value: 0x0007, lo: 0x05},
	{value: 0xa000, lo: 0x90, hi: 0x90},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0xa000, lo: 0x94, hi: 0x94},
	{value: 0x3bb9, lo: 0x9a, hi: 0x9b},
	{value: 0x3bc7, lo: 0xae, hi: 0xae},
	// Block 0x40, offset 0x163
	{value: 0x000e, lo: 0x05},
	{value: 0x3bce, lo: 0x8d, hi: 0x8e},
	{value: 0x3bd5, lo: 0x8f, hi: 0x8f},
	{value: 0xa000, lo: 0x90, hi: 0x90},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0xa000, lo: 0x94, hi: 0x94},
	// Block 0x41, offset 0x169
	{value: 0x6408, lo: 0x0a},
	{value: 0xa000, lo: 0x83, hi: 0x83},
	{value: 0x3be3, lo: 0x84, hi: 0x84},
	{value: 0xa000, lo: 0x88, hi: 0x88},
	{value: 0x3bea, lo: 0x89, hi: 0x89},
	{value: 0xa000, lo: 0x8b, hi: 0x8b},
	{value: 0x3bf1, lo: 0x8c, hi: 0x8c},
	{value: 0xa000, lo: 0xa3, hi: 0xa3},
	{value: 0x3bf8, lo: 0xa4, hi: 0xa5},
	{value: 0x3bff, lo: 0xa6, hi: 0xa6},
	{value: 0xa000, lo: 0xbc, hi: 0xbc},
	// Block 0x42, offset 0x174
	{value: 0x0007, lo: 0x03},
	{value: 0x3c68, lo: 0xa0, hi: 0xa1},
	{value: 0x3c92, lo: 0xa2, hi: 0xa3},
	{value: 0x3cbc, lo: 0xaa, hi: 0xad},
	// Block 0x43, offset 0x178
	{value: 0x0004, lo: 0x01},
	{value: 0x048b, lo: 0xa9, hi: 0xaa},
	// Block 0x44, offset 0x17a
	{value: 0x0000, lo: 0x01},
	{value: 0x44dd, lo: 0x9c, hi: 0x9c},
	// Block 0x45, offset 0x17c
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xaf, hi: 0xb1},
	// Block 0x46, offset 0x17e
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x47, offset 0x180
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xa0, hi: 0xbf},
	// Block 0x48, offset 0x182
	{value: 0x0000, lo: 0x05},
	{value: 0x812c, lo: 0xaa, hi: 0xaa},
	{value: 0x8131, lo: 0xab, hi: 0xab},
	{value: 0x8133, lo: 0xac, hi: 0xac},
	{value: 0x812e, lo: 0xad, hi: 0xad},
	{value: 0x812f, lo: 0xae, hi: 0xaf},
	// Block 0x49, offset 0x188
	{value: 0x0000, lo: 0x03},
	{value: 0x4a9f, lo: 0xb3, hi: 0xb3},
	{value: 0x4a9f, lo: 0xb5, hi: 0xb6},
	{value: 0x4a9f, lo: 0xba, hi: 0xbf},
	// Block 0x4a, offset 0x18c
	{value: 0x0000, lo: 0x01},
	{value: 0x4a9f, lo: 0x8f, hi: 0xa3},
	// Block 0x4b, offset 0x18e
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0xae, hi: 0xbe},
	// Block 0x4c, offset 0x190
	{value: 0x0000, lo: 0x07},
	{value: 0x8100, lo: 0x84, hi: 0x84},
	{value: 0x8100, lo: 0x87, hi: 0x87},
	{value: 0x8100, lo: 0x90, hi: 0x90},
	{value: 0x8100, lo: 0x9e, hi: 0x9e},
	{value: 0x8100, lo: 0xa1, hi: 0xa1},
	{value: 0x8100, lo: 0xb2, hi: 0xb2},
	{value: 0x8100, lo: 0xbb, hi: 0xbb},
	// Block 0x4d, offset 0x198
	{value: 0x0000, lo: 0x03},
	{value: 0x8100, lo: 0x80, hi: 0x80},
	{value: 0x8100, lo: 0x8b, hi: 0x8b},
	{value: 0x8100, lo: 0x8e, hi: 0x8e},
	// Block 0x4e, offset 0x19c
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0xaf, hi: 0xaf},
	{value: 0x8132, lo: 0xb4, hi: 0xbd},
	// Block 0x4f, offset 0x19f
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x9e, hi: 0x9f},
	// Block 0x50, offset 0x1a1
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xb0, hi: 0xb1},
	// Block 0x51, offset 0x1a3
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x86, hi: 0x86},
	// Block 0x52, offset 0x1a5
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x84, hi: 0x84},
	{value: 0x8132, lo: 0xa0, hi: 0xb1},
	// Block 0x53, offset 0x1a8
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0xab, hi: 0xad},
	// Block 0x54, offset 0x1aa
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x93, hi: 0x93},
	// Block 0x55, offset 0x1ac
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0xb3, hi: 0xb3},
	// Block 0x56, offset 0x1ae
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x80, hi: 0x80},
	// Block 0x57, offset 0x1b0
	{value: 0x0000, lo: 0x05},
	{value: 0x8132, lo: 0xb0, hi: 0xb0},
	{value: 0x8132, lo: 0xb2, hi: 0xb3},
	{value: 0x812d, lo: 0xb4, hi: 0xb4},
	{value: 0x8132, lo: 0xb7, hi: 0xb8},
	{value: 0x8132, lo: 0xbe, hi: 0xbf},
	// Block 0x58, offset 0x1b6
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0x81, hi: 0x81},
	{value: 0x8104, lo: 0xb6, hi: 0xb6},
	// Block 0x59, offset 0x1b9
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xad, hi: 0xad},
	// Block 0x5a, offset 0x1bb
	{value: 0x0000, lo: 0x06},
	{value: 0xe500, lo: 0x80, hi: 0x80},
	{value: 0xc600, lo: 0x81, hi: 0x9b},
	{value: 0xe500, lo: 0x9c, hi: 0x9c},
	{value: 0xc600, lo: 0x9d, hi: 0xb7},
	{value: 0xe500, lo: 0xb8, hi: 0xb8},
	{value: 0xc600, lo: 0xb9, hi: 0xbf},
	// Block 0x5b, offset 0x1c2
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x93},
	{value: 0xe500, lo: 0x94, hi: 0x94},
	{value: 0xc600, lo: 0x95, hi: 0xaf},
	{value: 0xe500, lo: 0xb0, hi: 0xb0},
	{value: 0xc600, lo: 0xb1, hi: 0xbf},
	// Block 0x5c, offset 0x1c8
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x8b},
	{value: 0xe500, lo: 0x8c, hi: 0x8c},
	{value: 0xc600, lo: 0x8d, hi: 0xa7},
	{value: 0xe500, lo: 0xa8, hi: 0xa8},
	{value: 0xc600, lo: 0xa9, hi: 0xbf},
	// Block 0x5d, offset 0x1ce
	{value: 0x0000, lo: 0x07},
	{value: 0xc600, lo: 0x80, hi: 0x83},
	{value: 0xe500, lo: 0x84, hi: 0x84},
	{value: 0xc600, lo: 0x85, hi: 0x9f},
	{value: 0xe500, lo: 0xa0, hi: 0xa0},
	{value: 0xc600, lo: 0xa1, hi: 0xbb},
	{value: 0xe500, lo: 0xbc, hi: 0xbc},
	{value: 0xc600, lo: 0xbd, hi: 0xbf},
	// Block 0x5e, offset 0x1d6
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x97},
	{value: 0xe500, lo: 0x98, hi: 0x98},
	{value: 0xc600, lo: 0x99, hi: 0xb3},
	{value: 0xe500, lo: 0xb4, hi: 0xb4},
	{value: 0xc600, lo: 0xb5, hi: 0xbf},
	// Block 0x5f, offset 0x1dc
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x8f},
	{value: 0xe500, lo: 0x90, hi: 0x90},
	{value: 0xc600, lo: 0x91, hi: 0xab},
	{value: 0xe500, lo: 0xac, hi: 0xac},
	{value: 0xc600, lo: 0xad, hi: 0xbf},
	// Block 0x60, offset 0x1e2
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x87},
	{value: 0xe500, lo: 0x88, hi: 0x88},
	{value: 0xc600, lo: 0x89, hi: 0xa3},
	{value: 0xe500, lo: 0xa4, hi: 0xa4},
	{value: 0xc600, lo: 0xa5, hi: 0xbf},
	// Block 0x61, offset 0x1e8
	{value: 0x0000, lo: 0x03},
	{value: 0xc600, lo: 0x80, hi: 0x87},
	{value: 0xe500, lo: 0x88, hi: 0x88},
	{value: 0xc600, lo: 0x89, hi: 0xa3},
	// Block 0x62, offset 0x1ec
	{value: 0x0006, lo: 0x0d},
	{value: 0x4390, lo: 0x9d, hi: 0x9d},
	{value: 0x8115, lo: 0x9e, hi: 0x9e},
	{value: 0x4402, lo: 0x9f, hi: 0x9f},
	{value: 0x43f0, lo: 0xaa, hi: 0xab},
	{value: 0x44f4, lo: 0xac, hi: 0xac},
	{value: 0x44fc, lo: 0xad, hi: 0xad},
	{value: 0x4348, lo: 0xae, hi: 0xb1},
	{value: 0x4366, lo: 0xb2, hi: 0xb4},
	{value: 0x437e, lo: 0xb5, hi: 0xb6},
	{value: 0x438a, lo: 0xb8, hi: 0xb8},
	{value: 0x4396, lo: 0xb9, hi: 0xbb},
	{value: 0x43ae, lo: 0xbc, hi: 0xbc},
	{value: 0x43b4, lo: 0xbe, hi: 0xbe},
	// Block 0x63, offset 0x1fa
	{value: 0x0006, lo: 0x08},
	{value: 0x43ba, lo: 0x80, hi: 0x81},
	{value: 0x43c6, lo: 0x83, hi: 0x84},
	{value: 0x43d8, lo: 0x86, hi: 0x89},
	{value: 0x43fc, lo: 0x8a, hi: 0x8a},
	{value: 0x4378, lo: 0x8b, hi: 0x8b},
	{value: 0x4360, lo: 0x8c, hi: 0x8c},
	{value: 0x43a8, lo: 0x8d, hi: 0x8d},
	{value: 0x43d2, lo: 0x8e, hi: 0x8e},
	// Block 0x64, offset 0x203
	{value: 0x0000, lo: 0x02},
	{value: 0x8100, lo: 0xa4, hi: 0xa5},
	{value: 0x8100, lo: 0xb0, hi: 0xb1},
	// Block 0x65, offset 0x206
	{value: 0x0000, lo: 0x02},
	{value: 0x8100, lo: 0x9b, hi: 0x9d},
	{value: 0x8200, lo: 0x9e, hi: 0xa3},
	// Block 0x66, offset 0x209
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0x90, hi: 0x90},
	// Block 0x67, offset 0x20b
	{value: 0x0000, lo: 0x02},
	{value: 0x8100, lo: 0x99, hi: 0x99},
	{value: 0x8200, lo: 0xb2, hi: 0xb4},
	// Block 0x68, offset 0x20e
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0xbc, hi: 0xbd},
	// Block 0x69, offset 0x210
	{value: 0x0000, lo: 0x03},
	{value: 0x8132, lo: 0xa0, hi: 0xa6},
	{value: 0x812d, lo: 0xa7, hi: 0xad},
	{value: 0x8132, lo: 0xae, hi: 0xaf},
	// Block 0x6a, offset 0x214
	{value: 0x0000, lo: 0x04},
	{value: 0x8100, lo: 0x89, hi: 0x8c},
	{value: 0x8100, lo: 0xb0, hi: 0xb2},
	{value: 0x8100, lo: 0xb4, hi: 0xb4},
	{value: 0x8100, lo: 0xb6, hi: 0xbf},
	// Block 0x6b, offset 0x219
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0x81, hi: 0x8c},
	// Block 0x6c, offset 0x21b
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0xb5, hi: 0xba},
	// Block 0x6d, offset 0x21d
	{value: 0x0000, lo: 0x04},
	{value: 0x4a9f, lo: 0x9e, hi: 0x9f},
	{value: 0x4a9f, lo: 0xa3, hi: 0xa3},
	{value: 0x4a9f, lo: 0xa5, hi: 0xa6},
	{value: 0x4a9f, lo: 0xaa, hi: 0xaf},
	// Block 0x6e, offset 0x222
	{value: 0x0000, lo: 0x05},
	{value: 0x4a9f, lo: 0x82, hi: 0x87},
	{value: 0x4a9f, lo: 0x8a, hi: 0x8f},
	{value: 0x4a9f, lo: 0x92, hi: 0x97},
	{value: 0x4a9f, lo: 0x9a, hi: 0x9c},
	{value: 0x8100, lo: 0xa3, hi: 0xa3},
	// Block 0x6f, offset 0x228
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0xbd, hi: 0xbd},
	// Block 0x70, offset 0x22a
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0xa0, hi: 0xa0},
	// Block 0x71, offset 0x22c
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xb6, hi: 0xba},
	// Block 0x72, offset 0x22e
	{value: 0x002c, lo: 0x05},
	{value: 0x812d, lo: 0x8d, hi: 0x8d},
	{value: 0x8132, lo: 0x8f, hi: 0x8f},
	{value: 0x8132, lo: 0xb8, hi: 0xb8},
	{value: 0x8101, lo: 0xb9, hi: 0xba},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x73, offset 0x234
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0xa5, hi: 0xa5},
	{value: 0x812d, lo: 0xa6, hi: 0xa6},
	// Block 0x74, offset 0x237
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x86, hi: 0x86},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x75, offset 0x23a
	{value: 0x17fe, lo: 0x07},
	{value: 0xa000, lo: 0x99, hi: 0x99},
	{value: 0x4238, lo: 0x9a, hi: 0x9a},
	{value: 0xa000, lo: 0x9b, hi: 0x9b},
	{value: 0x4242, lo: 0x9c, hi: 0x9c},
	{value: 0xa000, lo: 0xa5, hi: 0xa5},
	{value: 0x424c, lo: 0xab, hi: 0xab},
	{value: 0x8104, lo: 0xb9, hi: 0xba},
	// Block 0x76, offset 0x242
	{value: 0x0000, lo: 0x06},
	{value: 0x8132, lo: 0x80, hi: 0x82},
	{value: 0x9900, lo: 0xa7, hi: 0xa7},
	{value: 0x2d7e, lo: 0xae, hi: 0xae},
	{value: 0x2d88, lo: 0xaf, hi: 0xaf},
	{value: 0xa000, lo: 0xb1, hi: 0xb2},
	{value: 0x8104, lo: 0xb3, hi: 0xb4},
	// Block 0x77, offset 0x249
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x80, hi: 0x80},
	{value: 0x8102, lo: 0x8a, hi: 0x8a},
	// Block 0x78, offset 0x24c
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0xb5, hi: 0xb5},
	{value: 0x8102, lo: 0xb6, hi: 0xb6},
	// Block 0x79, offset 0x24f
	{value: 0x0002, lo: 0x01},
	{value: 0x8102, lo: 0xa9, hi: 0xaa},
	// Block 0x7a, offset 0x251
	{value: 0x0000, lo: 0x07},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2d92, lo: 0x8b, hi: 0x8b},
	{value: 0x2d9c, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	{value: 0x8132, lo: 0xa6, hi: 0xac},
	{value: 0x8132, lo: 0xb0, hi: 0xb4},
	// Block 0x7b, offset 0x259
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x82, hi: 0x82},
	{value: 0x8102, lo: 0x86, hi: 0x86},
	// Block 0x7c, offset 0x25c
	{value: 0x6b5a, lo: 0x06},
	{value: 0x9900, lo: 0xb0, hi: 0xb0},
	{value: 0xa000, lo: 0xb9, hi: 0xb9},
	{value: 0x9900, lo: 0xba, hi: 0xba},
	{value: 0x2db0, lo: 0xbb, hi: 0xbb},
	{value: 0x2da6, lo: 0xbc, hi: 0xbd},
	{value: 0x2dba, lo: 0xbe, hi: 0xbe},
	// Block 0x7d, offset 0x263
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x82, hi: 0x82},
	{value: 0x8102, lo: 0x83, hi: 0x83},
	// Block 0x7e, offset 0x266
	{value: 0x0000, lo: 0x05},
	{value: 0x9900, lo: 0xaf, hi: 0xaf},
	{value: 0xa000, lo: 0xb8, hi: 0xb9},
	{value: 0x2dc4, lo: 0xba, hi: 0xba},
	{value: 0x2dce, lo: 0xbb, hi: 0xbb},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x7f, offset 0x26c
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0x80, hi: 0x80},
	// Block 0x80, offset 0x26e
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0xb6, hi: 0xb6},
	{value: 0x8102, lo: 0xb7, hi: 0xb7},
	// Block 0x81, offset 0x271
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xab, hi: 0xab},
	// Block 0x82, offset 0x273
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xb4, hi: 0xb4},
	// Block 0x83, offset 0x275
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x87, hi: 0x87},
	// Block 0x84, offset 0x277
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x99, hi: 0x99},
	// Block 0x85, offset 0x279
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0x82, hi: 0x82},
	{value: 0x8104, lo: 0x84, hi: 0x85},
	// Block 0x86, offset 0x27c
	{value: 0x0000, lo: 0x01},
	{value: 0x8101, lo: 0xb0, hi: 0xb4},
	// Block 0x87, offset 0x27e
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xb0, hi: 0xb6},
	// Block 0x88, offset 0x280
	{value: 0x0000, lo: 0x01},
	{value: 0x8101, lo: 0x9e, hi: 0x9e},
	// Block 0x89, offset 0x282
	{value: 0x0000, lo: 0x0c},
	{value: 0x45cc, lo: 0x9e, hi: 0x9e},
	{value: 0x45d6, lo: 0x9f, hi: 0x9f},
	{value: 0x460a, lo: 0xa0, hi: 0xa0},
	{value: 0x4618, lo: 0xa1, hi: 0xa1},
	{value: 0x4626, lo: 0xa2, hi: 0xa2},
	{value: 0x4634, lo: 0xa3, hi: 0xa3},
	{value: 0x4642, lo: 0xa4, hi: 0xa4},
	{value: 0x812b, lo: 0xa5, hi: 0xa6},
	{value: 0x8101, lo: 0xa7, hi: 0xa9},
	{value: 0x8130, lo: 0xad, hi: 0xad},
	{value: 0x812b, lo: 0xae, hi: 0xb2},
	{value: 0x812d, lo: 0xbb, hi: 0xbf},
	// Block 0x8a, offset 0x28f
	{value: 0x0000, lo: 0x09},
	{value: 0x812d, lo: 0x80, hi: 0x82},
	{value: 0x8132, lo: 0x85, hi: 0x89},
	{value: 0x812d, lo: 0x8a, hi: 0x8b},
	{value: 0x8132, lo: 0xaa, hi: 0xad},
	{value: 0x45e0, lo: 0xbb, hi: 0xbb},
	{value: 0x45ea, lo: 0xbc, hi: 0xbc},
	{value: 0x4650, lo: 0xbd, hi: 0xbd},
	{value: 0x466c, lo: 0xbe, hi: 0xbe},
	{value: 0x465e, lo: 0xbf, hi: 0xbf},
	// Block 0x8b, offset 0x299
	{value: 0x0000, lo: 0x01},
	{value: 0x467a, lo: 0x80, hi: 0x80},
	// Block 0x8c, offset 0x29b
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x82, hi: 0x84},
	// Block 0x8d, offset 0x29d
	{value: 0x0000, lo: 0x05},
	{value: 0x8132, lo: 0x80, hi: 0x86},
	{value: 0x8132, lo: 0x88, hi: 0x98},
	{value: 0x8132, lo: 0x9b, hi: 0xa1},
	{value: 0x8132, lo: 0xa3, hi: 0xa4},
	{value: 0x8132, lo: 0xa6, hi: 0xaa},
	// Block 0x8e, offset 0x2a3
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x90, hi: 0x96},
	// Block 0x8f, offset 0x2a5
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0x84, hi: 0x89},
	{value: 0x8102, lo: 0x8a, hi: 0x8a},
	// Block 0x90, offset 0x2a8
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0x93, hi: 0x93},
}

// lookup returns the trie value for the first UTF-8 encoding in s and
// the width in bytes of this encoding. The size will be 0 if s does not
// hold enough bytes to complete the encoding. len(s) must be greater than 0.
func (t *nfkcTrie) lookup(s []byte) (v uint16, sz int) {
	c0 := s[0]
	switch {
	case c0 < 0x80: // is ASCII
		return nfkcValues[c0], 1
	case c0 < 0xC2:
		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
	case c0 < 0xE0: // 2-byte UTF-8
		if len(s) < 2 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c1), 2
	case c0 < 0xF0: // 3-byte UTF-8
		if len(s) < 3 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfkcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c2), 3
	case c0 < 0xF8: // 4-byte UTF-8
		if len(s) < 4 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfkcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		o = uint32(i)<<6 + uint32(c2)
		i = nfkcIndex[o]
		c3 := s[3]
		if c3 < 0x80 || 0xC0 <= c3 {
			return 0, 3 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c3), 4
	}
	// Illegal rune
	return 0, 1
}

// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.
// s must start with a full and valid UTF-8 encoded rune.
func (t *nfkcTrie) lookupUnsafe(s []byte) uint16 {
	c0 := s[0]
	if c0 < 0x80 { // is ASCII
		return nfkcValues[c0]
	}
	i := nfkcIndex[c0]
	if c0 < 0xE0 { // 2-byte UTF-8
		return t.lookupValue(uint32(i), s[1])
	}
	i = nfkcIndex[uint32(i)<<6+uint32(s[1])]
	if c0 < 0xF0 { // 3-byte UTF-8
		return t.lookupValue(uint32(i), s[2])
	}
	i = nfkcIndex[uint32(i)<<6+uint32(s[2])]
	if c0 < 0xF8 { // 4-byte UTF-8
		return t.lookupValue(uint32(i), s[3])
	}
	return 0
}

// lookupString returns the trie value for the first UTF-8 encoding in s and
// the width in bytes of this encoding. The size will be 0 if s does not
// hold enough bytes to complete the encoding. len(s) must be greater than 0.
func (t *nfkcTrie) lookupString(s string) (v uint16, sz int) {
	c0 := s[0]
	switch {
	case c0 < 0x80: // is ASCII
		return nfkcValues[c0], 1
	case c0 < 0xC2:
		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
	case c0 < 0xE0: // 2-byte UTF-8
		if len(s) < 2 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c1), 2
	case c0 < 0xF0: // 3-byte UTF-8
		if len(s) < 3 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfkcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c2), 3
	case c0 < 0xF8: // 4-byte UTF-8
		if len(s) < 4 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfkcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		o = uint32(i)<<6 + uint32(c2)
		i = nfkcIndex[o]
		c3 := s[3]
		if c3 < 0x80 || 0xC0 <= c3 {
			return 0, 3 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c3), 4
	}
	// Illegal rune
	return 0, 1
}

// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.
// s must start with a full and valid UTF-8 encoded rune.
func (t *nfkcTrie) lookupStringUnsafe(s string) uint16 {
	c0 := s[0]
	if c0 < 0x80 { // is ASCII
		return nfkcValues[c0]
	}
	i := nfkcIndex[c0]
	if c0 < 0xE0 { // 2-byte UTF-8
		return t.lookupValue(uint32(i), s[1])
	}
	i = nfkcIndex[uint32(i)<<6+uint32(s[1])]
	if c0 < 0xF0 { // 3-byte UTF-8
		return t.lookupValue(uint32(i), s[2])
	}
	i = nfkcIndex[uint32(i)<<6+uint32(s[2])]
	if c0 < 0xF8 { // 4-byte UTF-8
		return t.lookupValue(uint32(i), s[3])
	}
	return 0
}

// nfkcTrie. Total size: 17104 bytes (16.70 KiB). Checksum: d985061cf5307b35.
type nfkcTrie struct{}

func newNfkcTrie(i int) *nfkcTrie {
	return &nfkcTrie{}
}

// lookupValue determines the type of block n and looks up the value for b.
func (t *nfkcTrie) lookupValue(n uint32, b byte) uint16 {
	switch {
	case n < 91:
		return uint16(nfkcValues[n<<6+uint32(b)])
	default:
		n -= 91
		return uint16(nfkcSparse.lookup(n, b))
	}
}

// nfkcValues: 93 blocks, 5952 entries, 11904 bytes
// The third block is the zero block.
var nfkcValues = [5952]uint16{
	// Block 0x0, offset 0x0
	0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000,
	// Block 0x1, offset 0x40
	0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000,
	0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000,
	0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000,
	0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000,
	0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000,
	0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000,
	0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000,
	0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000,
	0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000,
	0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000,
	// Block 0x2, offset 0x80
	// Block 0x3, offset 0xc0
	0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c,
	0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb,
	0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104,
	0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd,
	0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235,
	0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285,
	0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3,
	0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750,
	0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f,
	0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3,
	0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569,
	// Block 0x4, offset 0x100
	0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8,
	0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6,
	0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5,
	0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302,
	0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339,
	0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352,
	0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e,
	0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6,
	0x130: 0x308c, 0x132: 0x195d, 0x133: 0x19e7, 0x134: 0x30b4, 0x135: 0x33c0,
	0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc,
	0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8, 0x13f: 0x1bac,
	// Block 0x5, offset 0x140
	0x140: 0x1c34, 0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118,
	0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f, 0x149: 0x1c5c,
	0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c,
	0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483,
	0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d,
	0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba,
	0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796,
	0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2,
	0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528,
	0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267,
	0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0x00a7,
	// Block 0x6, offset 0x180
	0x184: 0x2dee, 0x185: 0x2df4,
	0x186: 0x2dfa, 0x187: 0x1972, 0x188: 0x1975, 0x189: 0x1a08, 0x18a: 0x1987, 0x18b: 0x198a,
	0x18c: 0x1a3e, 0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140,
	0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8,
	0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50,
	0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5,
	0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf,
	0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd,
	0x1b0: 0x33c5, 0x1b1: 0x1942, 0x1b2: 0x1945, 0x1b3: 0x19cf, 0x1b4: 0x3028, 0x1b5: 0x3334,
	0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46,
	0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb,
	// Block 0x7, offset 0x1c0
	0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316,
	0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac,
	0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479,
	0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6,
	0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5,
	0x1de: 0x305a, 0x1df: 0x3366,
	0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b,
	0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769,
	0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f,
	// Block 0x8, offset 0x200
	0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132,
	0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932,
	0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932,
	0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d,
	0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d,
	0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d,
	0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d,
	0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d,
	0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101,
	0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d,
	0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132,
	// Block 0x9, offset 0x240
	0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936,
	0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132,
	0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132,
	0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132,
	0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135,
	0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132,
	0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132,
	0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132,
	0x274: 0x0170,
	0x27a: 0x42a5,
	0x27e: 0x0037,
	// Block 0xa, offset 0x280
	0x284: 0x425a, 0x285: 0x447b,
	0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625,
	0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000,
	0x295: 0xa000, 0x297: 0xa000,
	0x299: 0xa000,
	0x29f: 0xa000, 0x2a1: 0xa000,
	0x2a5: 0xa000, 0x2a9: 0xa000,
	0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9,
	0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000,
	0x2b7: 0xa000, 0x2b9: 0xa000,
	0x2bf: 0xa000,
	// Block 0xb, offset 0x2c0
	0x2c1: 0xa000, 0x2c5: 0xa000,
	0x2c9: 0xa000, 0x2ca: 0x4840, 0x2cb: 0x485e,
	0x2cc: 0x36c7, 0x2cd: 0x36df, 0x2ce: 0x4876, 0x2d0: 0x01be, 0x2d1: 0x01d0,
	0x2d2: 0x01ac, 0x2d3: 0x430c, 0x2d4: 0x4312, 0x2d5: 0x01fa, 0x2d6: 0x01e8,
	0x2f0: 0x01d6, 0x2f1: 0x01eb, 0x2f2: 0x01ee, 0x2f4: 0x0188, 0x2f5: 0x01c7,
	0x2f9: 0x01a6,
	// Block 0xc, offset 0x300
	0x300: 0x3721, 0x301: 0x372d, 0x303: 0x371b,
	0x306: 0xa000, 0x307: 0x3709,
	0x30c: 0x375d, 0x30d: 0x3745, 0x30e: 0x376f, 0x310: 0xa000,
	0x313: 0xa000, 0x315: 0xa000, 0x316: 0xa000, 0x317: 0xa000,
	0x318: 0xa000, 0x319: 0x3751, 0x31a: 0xa000,
	0x31e: 0xa000, 0x323: 0xa000,
	0x327: 0xa000,
	0x32b: 0xa000, 0x32d: 0xa000,
	0x330: 0xa000, 0x333: 0xa000, 0x335: 0xa000,
	0x336: 0xa000, 0x337: 0xa000, 0x338: 0xa000, 0x339: 0x37d5, 0x33a: 0xa000,
	0x33e: 0xa000,
	// Block 0xd, offset 0x340
	0x341: 0x3733, 0x342: 0x37b7,
	0x350: 0x370f, 0x351: 0x3793,
	0x352: 0x3715, 0x353: 0x3799, 0x356: 0x3727, 0x357: 0x37ab,
	0x358: 0xa000, 0x359: 0xa000, 0x35a: 0x3829, 0x35b: 0x382f, 0x35c: 0x3739, 0x35d: 0x37bd,
	0x35e: 0x373f, 0x35f: 0x37c3, 0x362: 0x374b, 0x363: 0x37cf,
	0x364: 0x3757, 0x365: 0x37db, 0x366: 0x3763, 0x367: 0x37e7, 0x368: 0xa000, 0x369: 0xa000,
	0x36a: 0x3835, 0x36b: 0x383b, 0x36c: 0x378d, 0x36d: 0x3811, 0x36e: 0x3769, 0x36f: 0x37ed,
	0x370: 0x3775, 0x371: 0x37f9, 0x372: 0x377b, 0x373: 0x37ff, 0x374: 0x3781, 0x375: 0x3805,
	0x378: 0x3787, 0x379: 0x380b,
	// Block 0xe, offset 0x380
	0x387: 0x1d61,
	0x391: 0x812d,
	0x392: 0x8132, 0x393: 0x8132, 0x394: 0x8132, 0x395: 0x8132, 0x396: 0x812d, 0x397: 0x8132,
	0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x812e, 0x39b: 0x812d, 0x39c: 0x8132, 0x39d: 0x8132,
	0x39e: 0x8132, 0x39f: 0x8132, 0x3a0: 0x8132, 0x3a1: 0x8132, 0x3a2: 0x812d, 0x3a3: 0x812d,
	0x3a4: 0x812d, 0x3a5: 0x812d, 0x3a6: 0x812d, 0x3a7: 0x812d, 0x3a8: 0x8132, 0x3a9: 0x8132,
	0x3aa: 0x812d, 0x3ab: 0x8132, 0x3ac: 0x8132, 0x3ad: 0x812e, 0x3ae: 0x8131, 0x3af: 0x8132,
	0x3b0: 0x8105, 0x3b1: 0x8106, 0x3b2: 0x8107, 0x3b3: 0x8108, 0x3b4: 0x8109, 0x3b5: 0x810a,
	0x3b6: 0x810b, 0x3b7: 0x810c, 0x3b8: 0x810d, 0x3b9: 0x810e, 0x3ba: 0x810e, 0x3bb: 0x810f,
	0x3bc: 0x8110, 0x3bd: 0x8111, 0x3bf: 0x8112,
	// Block 0xf, offset 0x3c0
	0x3c8: 0xa000, 0x3ca: 0xa000, 0x3cb: 0x8116,
	0x3cc: 0x8117, 0x3cd: 0x8118, 0x3ce: 0x8119, 0x3cf: 0x811a, 0x3d0: 0x811b, 0x3d1: 0x811c,
	0x3d2: 0x811d, 0x3d3: 0x9932, 0x3d4: 0x9932, 0x3d5: 0x992d, 0x3d6: 0x812d, 0x3d7: 0x8132,
	0x3d8: 0x8132, 0x3d9: 0x8132, 0x3da: 0x8132, 0x3db: 0x8132, 0x3dc: 0x812d, 0x3dd: 0x8132,
	0x3de: 0x8132, 0x3df: 0x812d,
	0x3f0: 0x811e, 0x3f5: 0x1d84,
	0x3f6: 0x2013, 0x3f7: 0x204f, 0x3f8: 0x204a,
	// Block 0x10, offset 0x400
	0x405: 0xa000,
	0x406: 0x2d26, 0x407: 0xa000, 0x408: 0x2d2e, 0x409: 0xa000, 0x40a: 0x2d36, 0x40b: 0xa000,
	0x40c: 0x2d3e, 0x40d: 0xa000, 0x40e: 0x2d46, 0x411: 0xa000,
	0x412: 0x2d4e,
	0x434: 0x8102, 0x435: 0x9900,
	0x43a: 0xa000, 0x43b: 0x2d56,
	0x43c: 0xa000, 0x43d: 0x2d5e, 0x43e: 0xa000, 0x43f: 0xa000,
	// Block 0x11, offset 0x440
	0x440: 0x0069, 0x441: 0x006b, 0x442: 0x006f, 0x443: 0x0083, 0x444: 0x00f5, 0x445: 0x00f8,
	0x446: 0x0413, 0x447: 0x0085, 0x448: 0x0089, 0x449: 0x008b, 0x44a: 0x0104, 0x44b: 0x0107,
	0x44c: 0x010a, 0x44d: 0x008f, 0x44f: 0x0097, 0x450: 0x009b, 0x451: 0x00e0,
	0x452: 0x009f, 0x453: 0x00fe, 0x454: 0x0417, 0x455: 0x041b, 0x456: 0x00a1, 0x457: 0x00a9,
	0x458: 0x00ab, 0x459: 0x0423, 0x45a: 0x012b, 0x45b: 0x00ad, 0x45c: 0x0427, 0x45d: 0x01be,
	0x45e: 0x01c1, 0x45f: 0x01c4, 0x460: 0x01fa, 0x461: 0x01fd, 0x462: 0x0093, 0x463: 0x00a5,
	0x464: 0x00ab, 0x465: 0x00ad, 0x466: 0x01be, 0x467: 0x01c1, 0x468: 0x01eb, 0x469: 0x01fa,
	0x46a: 0x01fd,
	0x478: 0x020c,
	// Block 0x12, offset 0x480
	0x49b: 0x00fb, 0x49c: 0x0087, 0x49d: 0x0101,
	0x49e: 0x00d4, 0x49f: 0x010a, 0x4a0: 0x008d, 0x4a1: 0x010d, 0x4a2: 0x0110, 0x4a3: 0x0116,
	0x4a4: 0x011c, 0x4a5: 0x011f, 0x4a6: 0x0122, 0x4a7: 0x042b, 0x4a8: 0x016a, 0x4a9: 0x0128,
	0x4aa: 0x042f, 0x4ab: 0x016d, 0x4ac: 0x0131, 0x4ad: 0x012e, 0x4ae: 0x0134, 0x4af: 0x0137,
	0x4b0: 0x013a, 0x4b1: 0x013d, 0x4b2: 0x0140, 0x4b3: 0x014c, 0x4b4: 0x014f, 0x4b5: 0x00ec,
	0x4b6: 0x0152, 0x4b7: 0x0155, 0x4b8: 0x041f, 0x4b9: 0x0158, 0x4ba: 0x015b, 0x4bb: 0x00b5,
	0x4bc: 0x015e, 0x4bd: 0x0161, 0x4be: 0x0164, 0x4bf: 0x01d0,
	// Block 0x13, offset 0x4c0
	0x4c0: 0x8132, 0x4c1: 0x8132, 0x4c2: 0x812d, 0x4c3: 0x8132, 0x4c4: 0x8132, 0x4c5: 0x8132,
	0x4c6: 0x8132, 0x4c7: 0x8132, 0x4c8: 0x8132, 0x4c9: 0x8132, 0x4ca: 0x812d, 0x4cb: 0x8132,
	0x4cc: 0x8132, 0x4cd: 0x8135, 0x4ce: 0x812a, 0x4cf: 0x812d, 0x4d0: 0x8129, 0x4d1: 0x8132,
	0x4d2: 0x8132, 0x4d3: 0x8132, 0x4d4: 0x8132, 0x4d5: 0x8132, 0x4d6: 0x8132, 0x4d7: 0x8132,
	0x4d8: 0x8132, 0x4d9: 0x8132, 0x4da: 0x8132, 0x4db: 0x8132, 0x4dc: 0x8132, 0x4dd: 0x8132,
	0x4de: 0x8132, 0x4df: 0x8132, 0x4e0: 0x8132, 0x4e1: 0x8132, 0x4e2: 0x8132, 0x4e3: 0x8132,
	0x4e4: 0x8132, 0x4e5: 0x8132, 0x4e6: 0x8132, 0x4e7: 0x8132, 0x4e8: 0x8132, 0x4e9: 0x8132,
	0x4ea: 0x8132, 0x4eb: 0x8132, 0x4ec: 0x8132, 0x4ed: 0x8132, 0x4ee: 0x8132, 0x4ef: 0x8132,
	0x4f0: 0x8132, 0x4f1: 0x8132, 0x4f2: 0x8132, 0x4f3: 0x8132, 0x4f4: 0x8132, 0x4f5: 0x8132,
	0x4f6: 0x8133, 0x4f7: 0x8131, 0x4f8: 0x8131, 0x4f9: 0x812d, 0x4fb: 0x8132,
	0x4fc: 0x8134, 0x4fd: 0x812d, 0x4fe: 0x8132, 0x4ff: 0x812d,
	// Block 0x14, offset 0x500
	0x500: 0x2f97, 0x501: 0x32a3, 0x502: 0x2fa1, 0x503: 0x32ad, 0x504: 0x2fa6, 0x505: 0x32b2,
	0x506: 0x2fab, 0x507: 0x32b7, 0x508: 0x38cc, 0x509: 0x3a5b, 0x50a: 0x2fc4, 0x50b: 0x32d0,
	0x50c: 0x2fce, 0x50d: 0x32da, 0x50e: 0x2fdd, 0x50f: 0x32e9, 0x510: 0x2fd3, 0x511: 0x32df,
	0x512: 0x2fd8, 0x513: 0x32e4, 0x514: 0x38ef, 0x515: 0x3a7e, 0x516: 0x38f6, 0x517: 0x3a85,
	0x518: 0x3019, 0x519: 0x3325, 0x51a: 0x301e, 0x51b: 0x332a, 0x51c: 0x3904, 0x51d: 0x3a93,
	0x51e: 0x3023, 0x51f: 0x332f, 0x520: 0x3032, 0x521: 0x333e, 0x522: 0x3050, 0x523: 0x335c,
	0x524: 0x305f, 0x525: 0x336b, 0x526: 0x3055, 0x527: 0x3361, 0x528: 0x3064, 0x529: 0x3370,
	0x52a: 0x3069, 0x52b: 0x3375, 0x52c: 0x30af, 0x52d: 0x33bb, 0x52e: 0x390b, 0x52f: 0x3a9a,
	0x530: 0x30b9, 0x531: 0x33ca, 0x532: 0x30c3, 0x533: 0x33d4, 0x534: 0x30cd, 0x535: 0x33de,
	0x536: 0x46c4, 0x537: 0x4755, 0x538: 0x3912, 0x539: 0x3aa1, 0x53a: 0x30e6, 0x53b: 0x33f7,
	0x53c: 0x30e1, 0x53d: 0x33f2, 0x53e: 0x30eb, 0x53f: 0x33fc,
	// Block 0x15, offset 0x540
	0x540: 0x30f0, 0x541: 0x3401, 0x542: 0x30f5, 0x543: 0x3406, 0x544: 0x3109, 0x545: 0x341a,
	0x546: 0x3113, 0x547: 0x3424, 0x548: 0x3122, 0x549: 0x3433, 0x54a: 0x311d, 0x54b: 0x342e,
	0x54c: 0x3935, 0x54d: 0x3ac4, 0x54e: 0x3943, 0x54f: 0x3ad2, 0x550: 0x394a, 0x551: 0x3ad9,
	0x552: 0x3951, 0x553: 0x3ae0, 0x554: 0x314f, 0x555: 0x3460, 0x556: 0x3154, 0x557: 0x3465,
	0x558: 0x315e, 0x559: 0x346f, 0x55a: 0x46f1, 0x55b: 0x4782, 0x55c: 0x3997, 0x55d: 0x3b26,
	0x55e: 0x3177, 0x55f: 0x3488, 0x560: 0x3181, 0x561: 0x3492, 0x562: 0x4700, 0x563: 0x4791,
	0x564: 0x399e, 0x565: 0x3b2d, 0x566: 0x39a5, 0x567: 0x3b34, 0x568: 0x39ac, 0x569: 0x3b3b,
	0x56a: 0x3190, 0x56b: 0x34a1, 0x56c: 0x319a, 0x56d: 0x34b0, 0x56e: 0x31ae, 0x56f: 0x34c4,
	0x570: 0x31a9, 0x571: 0x34bf, 0x572: 0x31ea, 0x573: 0x3500, 0x574: 0x31f9, 0x575: 0x350f,
	0x576: 0x31f4, 0x577: 0x350a, 0x578: 0x39b3, 0x579: 0x3b42, 0x57a: 0x39ba, 0x57b: 0x3b49,
	0x57c: 0x31fe, 0x57d: 0x3514, 0x57e: 0x3203, 0x57f: 0x3519,
	// Block 0x16, offset 0x580
	0x580: 0x3208, 0x581: 0x351e, 0x582: 0x320d, 0x583: 0x3523, 0x584: 0x321c, 0x585: 0x3532,
	0x586: 0x3217, 0x587: 0x352d, 0x588: 0x3221, 0x589: 0x353c, 0x58a: 0x3226, 0x58b: 0x3541,
	0x58c: 0x322b, 0x58d: 0x3546, 0x58e: 0x3249, 0x58f: 0x3564, 0x590: 0x3262, 0x591: 0x3582,
	0x592: 0x3271, 0x593: 0x3591, 0x594: 0x3276, 0x595: 0x3596, 0x596: 0x337a, 0x597: 0x34a6,
	0x598: 0x3537, 0x599: 0x3573, 0x59a: 0x1be0, 0x59b: 0x42d7,
	0x5a0: 0x46a1, 0x5a1: 0x4732, 0x5a2: 0x2f83, 0x5a3: 0x328f,
	0x5a4: 0x3878, 0x5a5: 0x3a07, 0x5a6: 0x3871, 0x5a7: 0x3a00, 0x5a8: 0x3886, 0x5a9: 0x3a15,
	0x5aa: 0x387f, 0x5ab: 0x3a0e, 0x5ac: 0x38be, 0x5ad: 0x3a4d, 0x5ae: 0x3894, 0x5af: 0x3a23,
	0x5b0: 0x388d, 0x5b1: 0x3a1c, 0x5b2: 0x38a2, 0x5b3: 0x3a31, 0x5b4: 0x389b, 0x5b5: 0x3a2a,
	0x5b6: 0x38c5, 0x5b7: 0x3a54, 0x5b8: 0x46b5, 0x5b9: 0x4746, 0x5ba: 0x3000, 0x5bb: 0x330c,
	0x5bc: 0x2fec, 0x5bd: 0x32f8, 0x5be: 0x38da, 0x5bf: 0x3a69,
	// Block 0x17, offset 0x5c0
	0x5c0: 0x38d3, 0x5c1: 0x3a62, 0x5c2: 0x38e8, 0x5c3: 0x3a77, 0x5c4: 0x38e1, 0x5c5: 0x3a70,
	0x5c6: 0x38fd, 0x5c7: 0x3a8c, 0x5c8: 0x3091, 0x5c9: 0x339d, 0x5ca: 0x30a5, 0x5cb: 0x33b1,
	0x5cc: 0x46e7, 0x5cd: 0x4778, 0x5ce: 0x3136, 0x5cf: 0x3447, 0x5d0: 0x3920, 0x5d1: 0x3aaf,
	0x5d2: 0x3919, 0x5d3: 0x3aa8, 0x5d4: 0x392e, 0x5d5: 0x3abd, 0x5d6: 0x3927, 0x5d7: 0x3ab6,
	0x5d8: 0x3989, 0x5d9: 0x3b18, 0x5da: 0x396d, 0x5db: 0x3afc, 0x5dc: 0x3966, 0x5dd: 0x3af5,
	0x5de: 0x397b, 0x5df: 0x3b0a, 0x5e0: 0x3974, 0x5e1: 0x3b03, 0x5e2: 0x3982, 0x5e3: 0x3b11,
	0x5e4: 0x31e5, 0x5e5: 0x34fb, 0x5e6: 0x31c7, 0x5e7: 0x34dd, 0x5e8: 0x39e4, 0x5e9: 0x3b73,
	0x5ea: 0x39dd, 0x5eb: 0x3b6c, 0x5ec: 0x39f2, 0x5ed: 0x3b81, 0x5ee: 0x39eb, 0x5ef: 0x3b7a,
	0x5f0: 0x39f9, 0x5f1: 0x3b88, 0x5f2: 0x3230, 0x5f3: 0x354b, 0x5f4: 0x3258, 0x5f5: 0x3578,
	0x5f6: 0x3253, 0x5f7: 0x356e, 0x5f8: 0x323f, 0x5f9: 0x355a,
	// Block 0x18, offset 0x600
	0x600: 0x4804, 0x601: 0x480a, 0x602: 0x491e, 0x603: 0x4936, 0x604: 0x4926, 0x605: 0x493e,
	0x606: 0x492e, 0x607: 0x4946, 0x608: 0x47aa, 0x609: 0x47b0, 0x60a: 0x488e, 0x60b: 0x48a6,
	0x60c: 0x4896, 0x60d: 0x48ae, 0x60e: 0x489e, 0x60f: 0x48b6, 0x610: 0x4816, 0x611: 0x481c,
	0x612: 0x3db8, 0x613: 0x3dc8, 0x614: 0x3dc0, 0x615: 0x3dd0,
	0x618: 0x47b6, 0x619: 0x47bc, 0x61a: 0x3ce8, 0x61b: 0x3cf8, 0x61c: 0x3cf0, 0x61d: 0x3d00,
	0x620: 0x482e, 0x621: 0x4834, 0x622: 0x494e, 0x623: 0x4966,
	0x624: 0x4956, 0x625: 0x496e, 0x626: 0x495e, 0x627: 0x4976, 0x628: 0x47c2, 0x629: 0x47c8,
	0x62a: 0x48be, 0x62b: 0x48d6, 0x62c: 0x48c6, 0x62d: 0x48de, 0x62e: 0x48ce, 0x62f: 0x48e6,
	0x630: 0x4846, 0x631: 0x484c, 0x632: 0x3e18, 0x633: 0x3e30, 0x634: 0x3e20, 0x635: 0x3e38,
	0x636: 0x3e28, 0x637: 0x3e40, 0x638: 0x47ce, 0x639: 0x47d4, 0x63a: 0x3d18, 0x63b: 0x3d30,
	0x63c: 0x3d20, 0x63d: 0x3d38, 0x63e: 0x3d28, 0x63f: 0x3d40,
	// Block 0x19, offset 0x640
	0x640: 0x4852, 0x641: 0x4858, 0x642: 0x3e48, 0x643: 0x3e58, 0x644: 0x3e50, 0x645: 0x3e60,
	0x648: 0x47da, 0x649: 0x47e0, 0x64a: 0x3d48, 0x64b: 0x3d58,
	0x64c: 0x3d50, 0x64d: 0x3d60, 0x650: 0x4864, 0x651: 0x486a,
	0x652: 0x3e80, 0x653: 0x3e98, 0x654: 0x3e88, 0x655: 0x3ea0, 0x656: 0x3e90, 0x657: 0x3ea8,
	0x659: 0x47e6, 0x65b: 0x3d68, 0x65d: 0x3d70,
	0x65f: 0x3d78, 0x660: 0x487c, 0x661: 0x4882, 0x662: 0x497e, 0x663: 0x4996,
	0x664: 0x4986, 0x665: 0x499e, 0x666: 0x498e, 0x667: 0x49a6, 0x668: 0x47ec, 0x669: 0x47f2,
	0x66a: 0x48ee, 0x66b: 0x4906, 0x66c: 0x48f6, 0x66d: 0x490e, 0x66e: 0x48fe, 0x66f: 0x4916,
	0x670: 0x47f8, 0x671: 0x431e, 0x672: 0x3691, 0x673: 0x4324, 0x674: 0x4822, 0x675: 0x432a,
	0x676: 0x36a3, 0x677: 0x4330, 0x678: 0x36c1, 0x679: 0x4336, 0x67a: 0x36d9, 0x67b: 0x433c,
	0x67c: 0x4870, 0x67d: 0x4342,
	// Block 0x1a, offset 0x680
	0x680: 0x3da0, 0x681: 0x3da8, 0x682: 0x4184, 0x683: 0x41a2, 0x684: 0x418e, 0x685: 0x41ac,
	0x686: 0x4198, 0x687: 0x41b6, 0x688: 0x3cd8, 0x689: 0x3ce0, 0x68a: 0x40d0, 0x68b: 0x40ee,
	0x68c: 0x40da, 0x68d: 0x40f8, 0x68e: 0x40e4, 0x68f: 0x4102, 0x690: 0x3de8, 0x691: 0x3df0,
	0x692: 0x41c0, 0x693: 0x41de, 0x694: 0x41ca, 0x695: 0x41e8, 0x696: 0x41d4, 0x697: 0x41f2,
	0x698: 0x3d08, 0x699: 0x3d10, 0x69a: 0x410c, 0x69b: 0x412a, 0x69c: 0x4116, 0x69d: 0x4134,
	0x69e: 0x4120, 0x69f: 0x413e, 0x6a0: 0x3ec0, 0x6a1: 0x3ec8, 0x6a2: 0x41fc, 0x6a3: 0x421a,
	0x6a4: 0x4206, 0x6a5: 0x4224, 0x6a6: 0x4210, 0x6a7: 0x422e, 0x6a8: 0x3d80, 0x6a9: 0x3d88,
	0x6aa: 0x4148, 0x6ab: 0x4166, 0x6ac: 0x4152, 0x6ad: 0x4170, 0x6ae: 0x415c, 0x6af: 0x417a,
	0x6b0: 0x3685, 0x6b1: 0x367f, 0x6b2: 0x3d90, 0x6b3: 0x368b, 0x6b4: 0x3d98,
	0x6b6: 0x4810, 0x6b7: 0x3db0, 0x6b8: 0x35f5, 0x6b9: 0x35ef, 0x6ba: 0x35e3, 0x6bb: 0x42ee,
	0x6bc: 0x35fb, 0x6bd: 0x4287, 0x6be: 0x01d3, 0x6bf: 0x4287,
	// Block 0x1b, offset 0x6c0
	0x6c0: 0x42a0, 0x6c1: 0x4482, 0x6c2: 0x3dd8, 0x6c3: 0x369d, 0x6c4: 0x3de0,
	0x6c6: 0x483a, 0x6c7: 0x3df8, 0x6c8: 0x3601, 0x6c9: 0x42f4, 0x6ca: 0x360d, 0x6cb: 0x42fa,
	0x6cc: 0x3619, 0x6cd: 0x4489, 0x6ce: 0x4490, 0x6cf: 0x4497, 0x6d0: 0x36b5, 0x6d1: 0x36af,
	0x6d2: 0x3e00, 0x6d3: 0x44e4, 0x6d6: 0x36bb, 0x6d7: 0x3e10,
	0x6d8: 0x3631, 0x6d9: 0x362b, 0x6da: 0x361f, 0x6db: 0x4300, 0x6dd: 0x449e,
	0x6de: 0x44a5, 0x6df: 0x44ac, 0x6e0: 0x36eb, 0x6e1: 0x36e5, 0x6e2: 0x3e68, 0x6e3: 0x44ec,
	0x6e4: 0x36cd, 0x6e5: 0x36d3, 0x6e6: 0x36f1, 0x6e7: 0x3e78, 0x6e8: 0x3661, 0x6e9: 0x365b,
	0x6ea: 0x364f, 0x6eb: 0x430c, 0x6ec: 0x3649, 0x6ed: 0x4474, 0x6ee: 0x447b, 0x6ef: 0x0081,
	0x6f2: 0x3eb0, 0x6f3: 0x36f7, 0x6f4: 0x3eb8,
	0x6f6: 0x4888, 0x6f7: 0x3ed0, 0x6f8: 0x363d, 0x6f9: 0x4306, 0x6fa: 0x366d, 0x6fb: 0x4318,
	0x6fc: 0x3679, 0x6fd: 0x425a, 0x6fe: 0x428c,
	// Block 0x1c, offset 0x700
	0x700: 0x1bd8, 0x701: 0x1bdc, 0x702: 0x0047, 0x703: 0x1c54, 0x705: 0x1be8,
	0x706: 0x1bec, 0x707: 0x00e9, 0x709: 0x1c58, 0x70a: 0x008f, 0x70b: 0x0051,
	0x70c: 0x0051, 0x70d: 0x0051, 0x70e: 0x0091, 0x70f: 0x00da, 0x710: 0x0053, 0x711: 0x0053,
	0x712: 0x0059, 0x713: 0x0099, 0x715: 0x005d, 0x716: 0x198d,
	0x719: 0x0061, 0x71a: 0x0063, 0x71b: 0x0065, 0x71c: 0x0065, 0x71d: 0x0065,
	0x720: 0x199f, 0x721: 0x1bc8, 0x722: 0x19a8,
	0x724: 0x0075, 0x726: 0x01b8, 0x728: 0x0075,
	0x72a: 0x0057, 0x72b: 0x42d2, 0x72c: 0x0045, 0x72d: 0x0047, 0x72f: 0x008b,
	0x730: 0x004b, 0x731: 0x004d, 0x733: 0x005b, 0x734: 0x009f, 0x735: 0x0215,
	0x736: 0x0218, 0x737: 0x021b, 0x738: 0x021e, 0x739: 0x0093, 0x73b: 0x1b98,
	0x73c: 0x01e8, 0x73d: 0x01c1, 0x73e: 0x0179, 0x73f: 0x01a0,
	// Block 0x1d, offset 0x740
	0x740: 0x0463, 0x745: 0x0049,
	0x746: 0x0089, 0x747: 0x008b, 0x748: 0x0093, 0x749: 0x0095,
	0x750: 0x222e, 0x751: 0x223a,
	0x752: 0x22ee, 0x753: 0x2216, 0x754: 0x229a, 0x755: 0x2222, 0x756: 0x22a0, 0x757: 0x22b8,
	0x758: 0x22c4, 0x759: 0x2228, 0x75a: 0x22ca, 0x75b: 0x2234, 0x75c: 0x22be, 0x75d: 0x22d0,
	0x75e: 0x22d6, 0x75f: 0x1cbc, 0x760: 0x0053, 0x761: 0x195a, 0x762: 0x1ba4, 0x763: 0x1963,
	0x764: 0x006d, 0x765: 0x19ab, 0x766: 0x1bd0, 0x767: 0x1d48, 0x768: 0x1966, 0x769: 0x0071,
	0x76a: 0x19b7, 0x76b: 0x1bd4, 0x76c: 0x0059, 0x76d: 0x0047, 0x76e: 0x0049, 0x76f: 0x005b,
	0x770: 0x0093, 0x771: 0x19e4, 0x772: 0x1c18, 0x773: 0x19ed, 0x774: 0x00ad, 0x775: 0x1a62,
	0x776: 0x1c4c, 0x777: 0x1d5c, 0x778: 0x19f0, 0x779: 0x00b1, 0x77a: 0x1a65, 0x77b: 0x1c50,
	0x77c: 0x0099, 0x77d: 0x0087, 0x77e: 0x0089, 0x77f: 0x009b,
	// Block 0x1e, offset 0x780
	0x781: 0x3c06, 0x783: 0xa000, 0x784: 0x3c0d, 0x785: 0xa000,
	0x787: 0x3c14, 0x788: 0xa000, 0x789: 0x3c1b,
	0x78d: 0xa000,
	0x7a0: 0x2f65, 0x7a1: 0xa000, 0x7a2: 0x3c29,
	0x7a4: 0xa000, 0x7a5: 0xa000,
	0x7ad: 0x3c22, 0x7ae: 0x2f60, 0x7af: 0x2f6a,
	0x7b0: 0x3c30, 0x7b1: 0x3c37, 0x7b2: 0xa000, 0x7b3: 0xa000, 0x7b4: 0x3c3e, 0x7b5: 0x3c45,
	0x7b6: 0xa000, 0x7b7: 0xa000, 0x7b8: 0x3c4c, 0x7b9: 0x3c53, 0x7ba: 0xa000, 0x7bb: 0xa000,
	0x7bc: 0xa000, 0x7bd: 0xa000,
	// Block 0x1f, offset 0x7c0
	0x7c0: 0x3c5a, 0x7c1: 0x3c61, 0x7c2: 0xa000, 0x7c3: 0xa000, 0x7c4: 0x3c76, 0x7c5: 0x3c7d,
	0x7c6: 0xa000, 0x7c7: 0xa000, 0x7c8: 0x3c84, 0x7c9: 0x3c8b,
	0x7d1: 0xa000,
	0x7d2: 0xa000,
	0x7e2: 0xa000,
	0x7e8: 0xa000, 0x7e9: 0xa000,
	0x7eb: 0xa000, 0x7ec: 0x3ca0, 0x7ed: 0x3ca7, 0x7ee: 0x3cae, 0x7ef: 0x3cb5,
	0x7f2: 0xa000, 0x7f3: 0xa000, 0x7f4: 0xa000, 0x7f5: 0xa000,
	// Block 0x20, offset 0x800
	0x820: 0x0023, 0x821: 0x0025, 0x822: 0x0027, 0x823: 0x0029,
	0x824: 0x002b, 0x825: 0x002d, 0x826: 0x002f, 0x827: 0x0031, 0x828: 0x0033, 0x829: 0x1882,
	0x82a: 0x1885, 0x82b: 0x1888, 0x82c: 0x188b, 0x82d: 0x188e, 0x82e: 0x1891, 0x82f: 0x1894,
	0x830: 0x1897, 0x831: 0x189a, 0x832: 0x189d, 0x833: 0x18a6, 0x834: 0x1a68, 0x835: 0x1a6c,
	0x836: 0x1a70, 0x837: 0x1a74, 0x838: 0x1a78, 0x839: 0x1a7c, 0x83a: 0x1a80, 0x83b: 0x1a84,
	0x83c: 0x1a88, 0x83d: 0x1c80, 0x83e: 0x1c85, 0x83f: 0x1c8a,
	// Block 0x21, offset 0x840
	0x840: 0x1c8f, 0x841: 0x1c94, 0x842: 0x1c99, 0x843: 0x1c9e, 0x844: 0x1ca3, 0x845: 0x1ca8,
	0x846: 0x1cad, 0x847: 0x1cb2, 0x848: 0x187f, 0x849: 0x18a3, 0x84a: 0x18c7, 0x84b: 0x18eb,
	0x84c: 0x190f, 0x84d: 0x1918, 0x84e: 0x191e, 0x84f: 0x1924, 0x850: 0x192a, 0x851: 0x1b60,
	0x852: 0x1b64, 0x853: 0x1b68, 0x854: 0x1b6c, 0x855: 0x1b70, 0x856: 0x1b74, 0x857: 0x1b78,
	0x858: 0x1b7c, 0x859: 0x1b80, 0x85a: 0x1b84, 0x85b: 0x1b88, 0x85c: 0x1af4, 0x85d: 0x1af8,
	0x85e: 0x1afc, 0x85f: 0x1b00, 0x860: 0x1b04, 0x861: 0x1b08, 0x862: 0x1b0c, 0x863: 0x1b10,
	0x864: 0x1b14, 0x865: 0x1b18, 0x866: 0x1b1c, 0x867: 0x1b20, 0x868: 0x1b24, 0x869: 0x1b28,
	0x86a: 0x1b2c, 0x86b: 0x1b30, 0x86c: 0x1b34, 0x86d: 0x1b38, 0x86e: 0x1b3c, 0x86f: 0x1b40,
	0x870: 0x1b44, 0x871: 0x1b48, 0x872: 0x1b4c, 0x873: 0x1b50, 0x874: 0x1b54, 0x875: 0x1b58,
	0x876: 0x0043, 0x877: 0x0045, 0x878: 0x0047, 0x879: 0x0049, 0x87a: 0x004b, 0x87b: 0x004d,
	0x87c: 0x004f, 0x87d: 0x0051, 0x87e: 0x0053, 0x87f: 0x0055,
	// Block 0x22, offset 0x880
	0x880: 0x06bf, 0x881: 0x06e3, 0x882: 0x06ef, 0x883: 0x06ff, 0x884: 0x0707, 0x885: 0x0713,
	0x886: 0x071b, 0x887: 0x0723, 0x888: 0x072f, 0x889: 0x0783, 0x88a: 0x079b, 0x88b: 0x07ab,
	0x88c: 0x07bb, 0x88d: 0x07cb, 0x88e: 0x07db, 0x88f: 0x07fb, 0x890: 0x07ff, 0x891: 0x0803,
	0x892: 0x0837, 0x893: 0x085f, 0x894: 0x086f, 0x895: 0x0877, 0x896: 0x087b, 0x897: 0x0887,
	0x898: 0x08a3, 0x899: 0x08a7, 0x89a: 0x08bf, 0x89b: 0x08c3, 0x89c: 0x08cb, 0x89d: 0x08db,
	0x89e: 0x0977, 0x89f: 0x098b, 0x8a0: 0x09cb, 0x8a1: 0x09df, 0x8a2: 0x09e7, 0x8a3: 0x09eb,
	0x8a4: 0x09fb, 0x8a5: 0x0a17, 0x8a6: 0x0a43, 0x8a7: 0x0a4f, 0x8a8: 0x0a6f, 0x8a9: 0x0a7b,
	0x8aa: 0x0a7f, 0x8ab: 0x0a83, 0x8ac: 0x0a9b, 0x8ad: 0x0a9f, 0x8ae: 0x0acb, 0x8af: 0x0ad7,
	0x8b0: 0x0adf, 0x8b1: 0x0ae7, 0x8b2: 0x0af7, 0x8b3: 0x0aff, 0x8b4: 0x0b07, 0x8b5: 0x0b33,
	0x8b6: 0x0b37, 0x8b7: 0x0b3f, 0x8b8: 0x0b43, 0x8b9: 0x0b4b, 0x8ba: 0x0b53, 0x8bb: 0x0b63,
	0x8bc: 0x0b7f, 0x8bd: 0x0bf7, 0x8be: 0x0c0b, 0x8bf: 0x0c0f,
	// Block 0x23, offset 0x8c0
	0x8c0: 0x0c8f, 0x8c1: 0x0c93, 0x8c2: 0x0ca7, 0x8c3: 0x0cab, 0x8c4: 0x0cb3, 0x8c5: 0x0cbb,
	0x8c6: 0x0cc3, 0x8c7: 0x0ccf, 0x8c8: 0x0cf7, 0x8c9: 0x0d07, 0x8ca: 0x0d1b, 0x8cb: 0x0d8b,
	0x8cc: 0x0d97, 0x8cd: 0x0da7, 0x8ce: 0x0db3, 0x8cf: 0x0dbf, 0x8d0: 0x0dc7, 0x8d1: 0x0dcb,
	0x8d2: 0x0dcf, 0x8d3: 0x0dd3, 0x8d4: 0x0dd7, 0x8d5: 0x0e8f, 0x8d6: 0x0ed7, 0x8d7: 0x0ee3,
	0x8d8: 0x0ee7, 0x8d9: 0x0eeb, 0x8da: 0x0eef, 0x8db: 0x0ef7, 0x8dc: 0x0efb, 0x8dd: 0x0f0f,
	0x8de: 0x0f2b, 0x8df: 0x0f33, 0x8e0: 0x0f73, 0x8e1: 0x0f77, 0x8e2: 0x0f7f, 0x8e3: 0x0f83,
	0x8e4: 0x0f8b, 0x8e5: 0x0f8f, 0x8e6: 0x0fb3, 0x8e7: 0x0fb7, 0x8e8: 0x0fd3, 0x8e9: 0x0fd7,
	0x8ea: 0x0fdb, 0x8eb: 0x0fdf, 0x8ec: 0x0ff3, 0x8ed: 0x1017, 0x8ee: 0x101b, 0x8ef: 0x101f,
	0x8f0: 0x1043, 0x8f1: 0x1083, 0x8f2: 0x1087, 0x8f3: 0x10a7, 0x8f4: 0x10b7, 0x8f5: 0x10bf,
	0x8f6: 0x10df, 0x8f7: 0x1103, 0x8f8: 0x1147, 0x8f9: 0x114f, 0x8fa: 0x1163, 0x8fb: 0x116f,
	0x8fc: 0x1177, 0x8fd: 0x117f, 0x8fe: 0x1183, 0x8ff: 0x1187,
	// Block 0x24, offset 0x900
	0x900: 0x119f, 0x901: 0x11a3, 0x902: 0x11bf, 0x903: 0x11c7, 0x904: 0x11cf, 0x905: 0x11d3,
	0x906: 0x11df, 0x907: 0x11e7, 0x908: 0x11eb, 0x909: 0x11ef, 0x90a: 0x11f7, 0x90b: 0x11fb,
	0x90c: 0x129b, 0x90d: 0x12af, 0x90e: 0x12e3, 0x90f: 0x12e7, 0x910: 0x12ef, 0x911: 0x131b,
	0x912: 0x1323, 0x913: 0x132b, 0x914: 0x1333, 0x915: 0x136f, 0x916: 0x1373, 0x917: 0x137b,
	0x918: 0x137f, 0x919: 0x1383, 0x91a: 0x13af, 0x91b: 0x13b3, 0x91c: 0x13bb, 0x91d: 0x13cf,
	0x91e: 0x13d3, 0x91f: 0x13ef, 0x920: 0x13f7, 0x921: 0x13fb, 0x922: 0x141f, 0x923: 0x143f,
	0x924: 0x1453, 0x925: 0x1457, 0x926: 0x145f, 0x927: 0x148b, 0x928: 0x148f, 0x929: 0x149f,
	0x92a: 0x14c3, 0x92b: 0x14cf, 0x92c: 0x14df, 0x92d: 0x14f7, 0x92e: 0x14ff, 0x92f: 0x1503,
	0x930: 0x1507, 0x931: 0x150b, 0x932: 0x1517, 0x933: 0x151b, 0x934: 0x1523, 0x935: 0x153f,
	0x936: 0x1543, 0x937: 0x1547, 0x938: 0x155f, 0x939: 0x1563, 0x93a: 0x156b, 0x93b: 0x157f,
	0x93c: 0x1583, 0x93d: 0x1587, 0x93e: 0x158f, 0x93f: 0x1593,
	// Block 0x25, offset 0x940
	0x946: 0xa000, 0x94b: 0xa000,
	0x94c: 0x3f08, 0x94d: 0xa000, 0x94e: 0x3f10, 0x94f: 0xa000, 0x950: 0x3f18, 0x951: 0xa000,
	0x952: 0x3f20, 0x953: 0xa000, 0x954: 0x3f28, 0x955: 0xa000, 0x956: 0x3f30, 0x957: 0xa000,
	0x958: 0x3f38, 0x959: 0xa000, 0x95a: 0x3f40, 0x95b: 0xa000, 0x95c: 0x3f48, 0x95d: 0xa000,
	0x95e: 0x3f50, 0x95f: 0xa000, 0x960: 0x3f58, 0x961: 0xa000, 0x962: 0x3f60,
	0x964: 0xa000, 0x965: 0x3f68, 0x966: 0xa000, 0x967: 0x3f70, 0x968: 0xa000, 0x969: 0x3f78,
	0x96f: 0xa000,
	0x970: 0x3f80, 0x971: 0x3f88, 0x972: 0xa000, 0x973: 0x3f90, 0x974: 0x3f98, 0x975: 0xa000,
	0x976: 0x3fa0, 0x977: 0x3fa8, 0x978: 0xa000, 0x979: 0x3fb0, 0x97a: 0x3fb8, 0x97b: 0xa000,
	0x97c: 0x3fc0, 0x97d: 0x3fc8,
	// Block 0x26, offset 0x980
	0x994: 0x3f00,
	0x999: 0x9903, 0x99a: 0x9903, 0x99b: 0x42dc, 0x99c: 0x42e2, 0x99d: 0xa000,
	0x99e: 0x3fd0, 0x99f: 0x26b4,
	0x9a6: 0xa000,
	0x9ab: 0xa000, 0x9ac: 0x3fe0, 0x9ad: 0xa000, 0x9ae: 0x3fe8, 0x9af: 0xa000,
	0x9b0: 0x3ff0, 0x9b1: 0xa000, 0x9b2: 0x3ff8, 0x9b3: 0xa000, 0x9b4: 0x4000, 0x9b5: 0xa000,
	0x9b6: 0x4008, 0x9b7: 0xa000, 0x9b8: 0x4010, 0x9b9: 0xa000, 0x9ba: 0x4018, 0x9bb: 0xa000,
	0x9bc: 0x4020, 0x9bd: 0xa000, 0x9be: 0x4028, 0x9bf: 0xa000,
	// Block 0x27, offset 0x9c0
	0x9c0: 0x4030, 0x9c1: 0xa000, 0x9c2: 0x4038, 0x9c4: 0xa000, 0x9c5: 0x4040,
	0x9c6: 0xa000, 0x9c7: 0x4048, 0x9c8: 0xa000, 0x9c9: 0x4050,
	0x9cf: 0xa000, 0x9d0: 0x4058, 0x9d1: 0x4060,
	0x9d2: 0xa000, 0x9d3: 0x4068, 0x9d4: 0x4070, 0x9d5: 0xa000, 0x9d6: 0x4078, 0x9d7: 0x4080,
	0x9d8: 0xa000, 0x9d9: 0x4088, 0x9da: 0x4090, 0x9db: 0xa000, 0x9dc: 0x4098, 0x9dd: 0x40a0,
	0x9ef: 0xa000,
	0x9f0: 0xa000, 0x9f1: 0xa000, 0x9f2: 0xa000, 0x9f4: 0x3fd8,
	0x9f7: 0x40a8, 0x9f8: 0x40b0, 0x9f9: 0x40b8, 0x9fa: 0x40c0,
	0x9fd: 0xa000, 0x9fe: 0x40c8, 0x9ff: 0x26c9,
	// Block 0x28, offset 0xa00
	0xa00: 0x0367, 0xa01: 0x032b, 0xa02: 0x032f, 0xa03: 0x0333, 0xa04: 0x037b, 0xa05: 0x0337,
	0xa06: 0x033b, 0xa07: 0x033f, 0xa08: 0x0343, 0xa09: 0x0347, 0xa0a: 0x034b, 0xa0b: 0x034f,
	0xa0c: 0x0353, 0xa0d: 0x0357, 0xa0e: 0x035b, 0xa0f: 0x49bd, 0xa10: 0x49c3, 0xa11: 0x49c9,
	0xa12: 0x49cf, 0xa13: 0x49d5, 0xa14: 0x49db, 0xa15: 0x49e1, 0xa16: 0x49e7, 0xa17: 0x49ed,
	0xa18: 0x49f3, 0xa19: 0x49f9, 0xa1a: 0x49ff, 0xa1b: 0x4a05, 0xa1c: 0x4a0b, 0xa1d: 0x4a11,
	0xa1e: 0x4a17, 0xa1f: 0x4a1d, 0xa20: 0x4a23, 0xa21: 0x4a29, 0xa22: 0x4a2f, 0xa23: 0x4a35,
	0xa24: 0x03c3, 0xa25: 0x035f, 0xa26: 0x0363, 0xa27: 0x03e7, 0xa28: 0x03eb, 0xa29: 0x03ef,
	0xa2a: 0x03f3, 0xa2b: 0x03f7, 0xa2c: 0x03fb, 0xa2d: 0x03ff, 0xa2e: 0x036b, 0xa2f: 0x0403,
	0xa30: 0x0407, 0xa31: 0x036f, 0xa32: 0x0373, 0xa33: 0x0377, 0xa34: 0x037f, 0xa35: 0x0383,
	0xa36: 0x0387, 0xa37: 0x038b, 0xa38: 0x038f, 0xa39: 0x0393, 0xa3a: 0x0397, 0xa3b: 0x039b,
	0xa3c: 0x039f, 0xa3d: 0x03a3, 0xa3e: 0x03a7, 0xa3f: 0x03ab,
	// Block 0x29, offset 0xa40
	0xa40: 0x03af, 0xa41: 0x03b3, 0xa42: 0x040b, 0xa43: 0x040f, 0xa44: 0x03b7, 0xa45: 0x03bb,
	0xa46: 0x03bf, 0xa47: 0x03c7, 0xa48: 0x03cb, 0xa49: 0x03cf, 0xa4a: 0x03d3, 0xa4b: 0x03d7,
	0xa4c: 0x03db, 0xa4d: 0x03df, 0xa4e: 0x03e3,
	0xa52: 0x06bf, 0xa53: 0x071b, 0xa54: 0x06cb, 0xa55: 0x097b, 0xa56: 0x06cf, 0xa57: 0x06e7,
	0xa58: 0x06d3, 0xa59: 0x0f93, 0xa5a: 0x0707, 0xa5b: 0x06db, 0xa5c: 0x06c3, 0xa5d: 0x09ff,
	0xa5e: 0x098f, 0xa5f: 0x072f,
	// Block 0x2a, offset 0xa80
	0xa80: 0x2054, 0xa81: 0x205a, 0xa82: 0x2060, 0xa83: 0x2066, 0xa84: 0x206c, 0xa85: 0x2072,
	0xa86: 0x2078, 0xa87: 0x207e, 0xa88: 0x2084, 0xa89: 0x208a, 0xa8a: 0x2090, 0xa8b: 0x2096,
	0xa8c: 0x209c, 0xa8d: 0x20a2, 0xa8e: 0x2726, 0xa8f: 0x272f, 0xa90: 0x2738, 0xa91: 0x2741,
	0xa92: 0x274a, 0xa93: 0x2753, 0xa94: 0x275c, 0xa95: 0x2765, 0xa96: 0x276e, 0xa97: 0x2780,
	0xa98: 0x2789, 0xa99: 0x2792, 0xa9a: 0x279b, 0xa9b: 0x27a4, 0xa9c: 0x2777, 0xa9d: 0x2bac,
	0xa9e: 0x2aed, 0xaa0: 0x20a8, 0xaa1: 0x20c0, 0xaa2: 0x20b4, 0xaa3: 0x2108,
	0xaa4: 0x20c6, 0xaa5: 0x20e4, 0xaa6: 0x20ae, 0xaa7: 0x20de, 0xaa8: 0x20ba, 0xaa9: 0x20f0,
	0xaaa: 0x2120, 0xaab: 0x213e, 0xaac: 0x2138, 0xaad: 0x212c, 0xaae: 0x217a, 0xaaf: 0x210e,
	0xab0: 0x211a, 0xab1: 0x2132, 0xab2: 0x2126, 0xab3: 0x2150, 0xab4: 0x20fc, 0xab5: 0x2144,
	0xab6: 0x216e, 0xab7: 0x2156, 0xab8: 0x20ea, 0xab9: 0x20cc, 0xaba: 0x2102, 0xabb: 0x2114,
	0xabc: 0x214a, 0xabd: 0x20d2, 0xabe: 0x2174, 0xabf: 0x20f6,
	// Block 0x2b, offset 0xac0
	0xac0: 0x215c, 0xac1: 0x20d8, 0xac2: 0x2162, 0xac3: 0x2168, 0xac4: 0x092f, 0xac5: 0x0b03,
	0xac6: 0x0ca7, 0xac7: 0x10c7,
	0xad0: 0x1bc4, 0xad1: 0x18a9,
	0xad2: 0x18ac, 0xad3: 0x18af, 0xad4: 0x18b2, 0xad5: 0x18b5, 0xad6: 0x18b8, 0xad7: 0x18bb,
	0xad8: 0x18be, 0xad9: 0x18c1, 0xada: 0x18ca, 0xadb: 0x18cd, 0xadc: 0x18d0, 0xadd: 0x18d3,
	0xade: 0x18d6, 0xadf: 0x18d9, 0xae0: 0x0313, 0xae1: 0x031b, 0xae2: 0x031f, 0xae3: 0x0327,
	0xae4: 0x032b, 0xae5: 0x032f, 0xae6: 0x0337, 0xae7: 0x033f, 0xae8: 0x0343, 0xae9: 0x034b,
	0xaea: 0x034f, 0xaeb: 0x0353, 0xaec: 0x0357, 0xaed: 0x035b, 0xaee: 0x2e18, 0xaef: 0x2e20,
	0xaf0: 0x2e28, 0xaf1: 0x2e30, 0xaf2: 0x2e38, 0xaf3: 0x2e40, 0xaf4: 0x2e48, 0xaf5: 0x2e50,
	0xaf6: 0x2e60, 0xaf7: 0x2e68, 0xaf8: 0x2e70, 0xaf9: 0x2e78, 0xafa: 0x2e80, 0xafb: 0x2e88,
	0xafc: 0x2ed3, 0xafd: 0x2e9b, 0xafe: 0x2e58,
	// Block 0x2c, offset 0xb00
	0xb00: 0x06bf, 0xb01: 0x071b, 0xb02: 0x06cb, 0xb03: 0x097b, 0xb04: 0x071f, 0xb05: 0x07af,
	0xb06: 0x06c7, 0xb07: 0x07ab, 0xb08: 0x070b, 0xb09: 0x0887, 0xb0a: 0x0d07, 0xb0b: 0x0e8f,
	0xb0c: 0x0dd7, 0xb0d: 0x0d1b, 0xb0e: 0x145f, 0xb0f: 0x098b, 0xb10: 0x0ccf, 0xb11: 0x0d4b,
	0xb12: 0x0d0b, 0xb13: 0x104b, 0xb14: 0x08fb, 0xb15: 0x0f03, 0xb16: 0x1387, 0xb17: 0x105f,
	0xb18: 0x0843, 0xb19: 0x108f, 0xb1a: 0x0f9b, 0xb1b: 0x0a17, 0xb1c: 0x140f, 0xb1d: 0x077f,
	0xb1e: 0x08ab, 0xb1f: 0x0df7, 0xb20: 0x1527, 0xb21: 0x0743, 0xb22: 0x07d3, 0xb23: 0x0d9b,
	0xb24: 0x06cf, 0xb25: 0x06e7, 0xb26: 0x06d3, 0xb27: 0x0adb, 0xb28: 0x08ef, 0xb29: 0x087f,
	0xb2a: 0x0a57, 0xb2b: 0x0a4b, 0xb2c: 0x0feb, 0xb2d: 0x073f, 0xb2e: 0x139b, 0xb2f: 0x089b,
	0xb30: 0x09f3, 0xb31: 0x18dc, 0xb32: 0x18df, 0xb33: 0x18e2, 0xb34: 0x18e5, 0xb35: 0x18ee,
	0xb36: 0x18f1, 0xb37: 0x18f4, 0xb38: 0x18f7, 0xb39: 0x18fa, 0xb3a: 0x18fd, 0xb3b: 0x1900,
	0xb3c: 0x1903, 0xb3d: 0x1906, 0xb3e: 0x1909, 0xb3f: 0x1912,
	// Block 0x2d, offset 0xb40
	0xb40: 0x1cc6, 0xb41: 0x1cd5, 0xb42: 0x1ce4, 0xb43: 0x1cf3, 0xb44: 0x1d02, 0xb45: 0x1d11,
	0xb46: 0x1d20, 0xb47: 0x1d2f, 0xb48: 0x1d3e, 0xb49: 0x218c, 0xb4a: 0x219e, 0xb4b: 0x21b0,
	0xb4c: 0x1954, 0xb4d: 0x1c04, 0xb4e: 0x19d2, 0xb4f: 0x1ba8, 0xb50: 0x04cb, 0xb51: 0x04d3,
	0xb52: 0x04db, 0xb53: 0x04e3, 0xb54: 0x04eb, 0xb55: 0x04ef, 0xb56: 0x04f3, 0xb57: 0x04f7,
	0xb58: 0x04fb, 0xb59: 0x04ff, 0xb5a: 0x0503, 0xb5b: 0x0507, 0xb5c: 0x050b, 0xb5d: 0x050f,
	0xb5e: 0x0513, 0xb5f: 0x0517, 0xb60: 0x051b, 0xb61: 0x0523, 0xb62: 0x0527, 0xb63: 0x052b,
	0xb64: 0x052f, 0xb65: 0x0533, 0xb66: 0x0537, 0xb67: 0x053b, 0xb68: 0x053f, 0xb69: 0x0543,
	0xb6a: 0x0547, 0xb6b: 0x054b, 0xb6c: 0x054f, 0xb6d: 0x0553, 0xb6e: 0x0557, 0xb6f: 0x055b,
	0xb70: 0x055f, 0xb71: 0x0563, 0xb72: 0x0567, 0xb73: 0x056f, 0xb74: 0x0577, 0xb75: 0x057f,
	0xb76: 0x0583, 0xb77: 0x0587, 0xb78: 0x058b, 0xb79: 0x058f, 0xb7a: 0x0593, 0xb7b: 0x0597,
	0xb7c: 0x059b, 0xb7d: 0x059f, 0xb7e: 0x05a3,
	// Block 0x2e, offset 0xb80
	0xb80: 0x2b0c, 0xb81: 0x29a8, 0xb82: 0x2b1c, 0xb83: 0x2880, 0xb84: 0x2ee4, 0xb85: 0x288a,
	0xb86: 0x2894, 0xb87: 0x2f28, 0xb88: 0x29b5, 0xb89: 0x289e, 0xb8a: 0x28a8, 0xb8b: 0x28b2,
	0xb8c: 0x29dc, 0xb8d: 0x29e9, 0xb8e: 0x29c2, 0xb8f: 0x29cf, 0xb90: 0x2ea9, 0xb91: 0x29f6,
	0xb92: 0x2a03, 0xb93: 0x2bbe, 0xb94: 0x26bb, 0xb95: 0x2bd1, 0xb96: 0x2be4, 0xb97: 0x2b2c,
	0xb98: 0x2a10, 0xb99: 0x2bf7, 0xb9a: 0x2c0a, 0xb9b: 0x2a1d, 0xb9c: 0x28bc, 0xb9d: 0x28c6,
	0xb9e: 0x2eb7, 0xb9f: 0x2a2a, 0xba0: 0x2b3c, 0xba1: 0x2ef5, 0xba2: 0x28d0, 0xba3: 0x28da,
	0xba4: 0x2a37, 0xba5: 0x28e4, 0xba6: 0x28ee, 0xba7: 0x26d0, 0xba8: 0x26d7, 0xba9: 0x28f8,
	0xbaa: 0x2902, 0xbab: 0x2c1d, 0xbac: 0x2a44, 0xbad: 0x2b4c, 0xbae: 0x2c30, 0xbaf: 0x2a51,
	0xbb0: 0x2916, 0xbb1: 0x290c, 0xbb2: 0x2f3c, 0xbb3: 0x2a5e, 0xbb4: 0x2c43, 0xbb5: 0x2920,
	0xbb6: 0x2b5c, 0xbb7: 0x292a, 0xbb8: 0x2a78, 0xbb9: 0x2934, 0xbba: 0x2a85, 0xbbb: 0x2f06,
	0xbbc: 0x2a6b, 0xbbd: 0x2b6c, 0xbbe: 0x2a92, 0xbbf: 0x26de,
	// Block 0x2f, offset 0xbc0
	0xbc0: 0x2f17, 0xbc1: 0x293e, 0xbc2: 0x2948, 0xbc3: 0x2a9f, 0xbc4: 0x2952, 0xbc5: 0x295c,
	0xbc6: 0x2966, 0xbc7: 0x2b7c, 0xbc8: 0x2aac, 0xbc9: 0x26e5, 0xbca: 0x2c56, 0xbcb: 0x2e90,
	0xbcc: 0x2b8c, 0xbcd: 0x2ab9, 0xbce: 0x2ec5, 0xbcf: 0x2970, 0xbd0: 0x297a, 0xbd1: 0x2ac6,
	0xbd2: 0x26ec, 0xbd3: 0x2ad3, 0xbd4: 0x2b9c, 0xbd5: 0x26f3, 0xbd6: 0x2c69, 0xbd7: 0x2984,
	0xbd8: 0x1cb7, 0xbd9: 0x1ccb, 0xbda: 0x1cda, 0xbdb: 0x1ce9, 0xbdc: 0x1cf8, 0xbdd: 0x1d07,
	0xbde: 0x1d16, 0xbdf: 0x1d25, 0xbe0: 0x1d34, 0xbe1: 0x1d43, 0xbe2: 0x2192, 0xbe3: 0x21a4,
	0xbe4: 0x21b6, 0xbe5: 0x21c2, 0xbe6: 0x21ce, 0xbe7: 0x21da, 0xbe8: 0x21e6, 0xbe9: 0x21f2,
	0xbea: 0x21fe, 0xbeb: 0x220a, 0xbec: 0x2246, 0xbed: 0x2252, 0xbee: 0x225e, 0xbef: 0x226a,
	0xbf0: 0x2276, 0xbf1: 0x1c14, 0xbf2: 0x19c6, 0xbf3: 0x1936, 0xbf4: 0x1be4, 0xbf5: 0x1a47,
	0xbf6: 0x1a56, 0xbf7: 0x19cc, 0xbf8: 0x1bfc, 0xbf9: 0x1c00, 0xbfa: 0x1960, 0xbfb: 0x2701,
	0xbfc: 0x270f, 0xbfd: 0x26fa, 0xbfe: 0x2708, 0xbff: 0x2ae0,
	// Block 0x30, offset 0xc00
	0xc00: 0x1a4a, 0xc01: 0x1a32, 0xc02: 0x1c60, 0xc03: 0x1a1a, 0xc04: 0x19f3, 0xc05: 0x1969,
	0xc06: 0x1978, 0xc07: 0x1948, 0xc08: 0x1bf0, 0xc09: 0x1d52, 0xc0a: 0x1a4d, 0xc0b: 0x1a35,
	0xc0c: 0x1c64, 0xc0d: 0x1c70, 0xc0e: 0x1a26, 0xc0f: 0x19fc, 0xc10: 0x1957, 0xc11: 0x1c1c,
	0xc12: 0x1bb0, 0xc13: 0x1b9c, 0xc14: 0x1bcc, 0xc15: 0x1c74, 0xc16: 0x1a29, 0xc17: 0x19c9,
	0xc18: 0x19ff, 0xc19: 0x19de, 0xc1a: 0x1a41, 0xc1b: 0x1c78, 0xc1c: 0x1a2c, 0xc1d: 0x19c0,
	0xc1e: 0x1a02, 0xc1f: 0x1c3c, 0xc20: 0x1bf4, 0xc21: 0x1a14, 0xc22: 0x1c24, 0xc23: 0x1c40,
	0xc24: 0x1bf8, 0xc25: 0x1a17, 0xc26: 0x1c28, 0xc27: 0x22e8, 0xc28: 0x22fc, 0xc29: 0x1996,
	0xc2a: 0x1c20, 0xc2b: 0x1bb4, 0xc2c: 0x1ba0, 0xc2d: 0x1c48, 0xc2e: 0x2716, 0xc2f: 0x27ad,
	0xc30: 0x1a59, 0xc31: 0x1a44, 0xc32: 0x1c7c, 0xc33: 0x1a2f, 0xc34: 0x1a50, 0xc35: 0x1a38,
	0xc36: 0x1c68, 0xc37: 0x1a1d, 0xc38: 0x19f6, 0xc39: 0x1981, 0xc3a: 0x1a53, 0xc3b: 0x1a3b,
	0xc3c: 0x1c6c, 0xc3d: 0x1a20, 0xc3e: 0x19f9, 0xc3f: 0x1984,
	// Block 0x31, offset 0xc40
	0xc40: 0x1c2c, 0xc41: 0x1bb8, 0xc42: 0x1d4d, 0xc43: 0x1939, 0xc44: 0x19ba, 0xc45: 0x19bd,
	0xc46: 0x22f5, 0xc47: 0x1b94, 0xc48: 0x19c3, 0xc49: 0x194b, 0xc4a: 0x19e1, 0xc4b: 0x194e,
	0xc4c: 0x19ea, 0xc4d: 0x196c, 0xc4e: 0x196f, 0xc4f: 0x1a05, 0xc50: 0x1a0b, 0xc51: 0x1a0e,
	0xc52: 0x1c30, 0xc53: 0x1a11, 0xc54: 0x1a23, 0xc55: 0x1c38, 0xc56: 0x1c44, 0xc57: 0x1990,
	0xc58: 0x1d57, 0xc59: 0x1bbc, 0xc5a: 0x1993, 0xc5b: 0x1a5c, 0xc5c: 0x19a5, 0xc5d: 0x19b4,
	0xc5e: 0x22e2, 0xc5f: 0x22dc, 0xc60: 0x1cc1, 0xc61: 0x1cd0, 0xc62: 0x1cdf, 0xc63: 0x1cee,
	0xc64: 0x1cfd, 0xc65: 0x1d0c, 0xc66: 0x1d1b, 0xc67: 0x1d2a, 0xc68: 0x1d39, 0xc69: 0x2186,
	0xc6a: 0x2198, 0xc6b: 0x21aa, 0xc6c: 0x21bc, 0xc6d: 0x21c8, 0xc6e: 0x21d4, 0xc6f: 0x21e0,
	0xc70: 0x21ec, 0xc71: 0x21f8, 0xc72: 0x2204, 0xc73: 0x2240, 0xc74: 0x224c, 0xc75: 0x2258,
	0xc76: 0x2264, 0xc77: 0x2270, 0xc78: 0x227c, 0xc79: 0x2282, 0xc7a: 0x2288, 0xc7b: 0x228e,
	0xc7c: 0x2294, 0xc7d: 0x22a6, 0xc7e: 0x22ac, 0xc7f: 0x1c10,
	// Block 0x32, offset 0xc80
	0xc80: 0x1377, 0xc81: 0x0cfb, 0xc82: 0x13d3, 0xc83: 0x139f, 0xc84: 0x0e57, 0xc85: 0x06eb,
	0xc86: 0x08df, 0xc87: 0x162b, 0xc88: 0x162b, 0xc89: 0x0a0b, 0xc8a: 0x145f, 0xc8b: 0x0943,
	0xc8c: 0x0a07, 0xc8d: 0x0bef, 0xc8e: 0x0fcf, 0xc8f: 0x115f, 0xc90: 0x1297, 0xc91: 0x12d3,
	0xc92: 0x1307, 0xc93: 0x141b, 0xc94: 0x0d73, 0xc95: 0x0dff, 0xc96: 0x0eab, 0xc97: 0x0f43,
	0xc98: 0x125f, 0xc99: 0x1447, 0xc9a: 0x1573, 0xc9b: 0x070f, 0xc9c: 0x08b3, 0xc9d: 0x0d87,
	0xc9e: 0x0ecf, 0xc9f: 0x1293, 0xca0: 0x15c3, 0xca1: 0x0ab3, 0xca2: 0x0e77, 0xca3: 0x1283,
	0xca4: 0x1317, 0xca5: 0x0c23, 0xca6: 0x11bb, 0xca7: 0x12df, 0xca8: 0x0b1f, 0xca9: 0x0d0f,
	0xcaa: 0x0e17, 0xcab: 0x0f1b, 0xcac: 0x1427, 0xcad: 0x074f, 0xcae: 0x07e7, 0xcaf: 0x0853,
	0xcb0: 0x0c8b, 0xcb1: 0x0d7f, 0xcb2: 0x0ecb, 0xcb3: 0x0fef, 0xcb4: 0x1177, 0xcb5: 0x128b,
	0xcb6: 0x12a3, 0xcb7: 0x13c7, 0xcb8: 0x14ef, 0xcb9: 0x15a3, 0xcba: 0x15bf, 0xcbb: 0x102b,
	0xcbc: 0x106b, 0xcbd: 0x1123, 0xcbe: 0x1243, 0xcbf: 0x147b,
	// Block 0x33, offset 0xcc0
	0xcc0: 0x15cb, 0xcc1: 0x134b, 0xcc2: 0x09c7, 0xcc3: 0x0b3b, 0xcc4: 0x10db, 0xcc5: 0x119b,
	0xcc6: 0x0eff, 0xcc7: 0x1033, 0xcc8: 0x1397, 0xcc9: 0x14e7, 0xcca: 0x09c3, 0xccb: 0x0a8f,
	0xccc: 0x0d77, 0xccd: 0x0e2b, 0xcce: 0x0e5f, 0xccf: 0x1113, 0xcd0: 0x113b, 0xcd1: 0x14a7,
	0xcd2: 0x084f, 0xcd3: 0x11a7, 0xcd4: 0x07f3, 0xcd5: 0x07ef, 0xcd6: 0x1097, 0xcd7: 0x1127,
	0xcd8: 0x125b, 0xcd9: 0x14af, 0xcda: 0x1367, 0xcdb: 0x0c27, 0xcdc: 0x0d73, 0xcdd: 0x1357,
	0xcde: 0x06f7, 0xcdf: 0x0a63, 0xce0: 0x0b93, 0xce1: 0x0f2f, 0xce2: 0x0faf, 0xce3: 0x0873,
	0xce4: 0x103b, 0xce5: 0x075f, 0xce6: 0x0b77, 0xce7: 0x06d7, 0xce8: 0x0deb, 0xce9: 0x0ca3,
	0xcea: 0x110f, 0xceb: 0x08c7, 0xcec: 0x09b3, 0xced: 0x0ffb, 0xcee: 0x1263, 0xcef: 0x133b,
	0xcf0: 0x0db7, 0xcf1: 0x13f7, 0xcf2: 0x0de3, 0xcf3: 0x0c37, 0xcf4: 0x121b, 0xcf5: 0x0c57,
	0xcf6: 0x0fab, 0xcf7: 0x072b, 0xcf8: 0x07a7, 0xcf9: 0x07eb, 0xcfa: 0x0d53, 0xcfb: 0x10fb,
	0xcfc: 0x11f3, 0xcfd: 0x1347, 0xcfe: 0x145b, 0xcff: 0x085b,
	// Block 0x34, offset 0xd00
	0xd00: 0x090f, 0xd01: 0x0a17, 0xd02: 0x0b2f, 0xd03: 0x0cbf, 0xd04: 0x0e7b, 0xd05: 0x103f,
	0xd06: 0x1497, 0xd07: 0x157b, 0xd08: 0x15cf, 0xd09: 0x15e7, 0xd0a: 0x0837, 0xd0b: 0x0cf3,
	0xd0c: 0x0da3, 0xd0d: 0x13eb, 0xd0e: 0x0afb, 0xd0f: 0x0bd7, 0xd10: 0x0bf3, 0xd11: 0x0c83,
	0xd12: 0x0e6b, 0xd13: 0x0eb7, 0xd14: 0x0f67, 0xd15: 0x108b, 0xd16: 0x112f, 0xd17: 0x1193,
	0xd18: 0x13db, 0xd19: 0x126b, 0xd1a: 0x1403, 0xd1b: 0x147f, 0xd1c: 0x080f, 0xd1d: 0x083b,
	0xd1e: 0x0923, 0xd1f: 0x0ea7, 0xd20: 0x12f3, 0xd21: 0x133b, 0xd22: 0x0b1b, 0xd23: 0x0b8b,
	0xd24: 0x0c4f, 0xd25: 0x0daf, 0xd26: 0x10d7, 0xd27: 0x0f23, 0xd28: 0x073b, 0xd29: 0x097f,
	0xd2a: 0x0a63, 0xd2b: 0x0ac7, 0xd2c: 0x0b97, 0xd2d: 0x0f3f, 0xd2e: 0x0f5b, 0xd2f: 0x116b,
	0xd30: 0x118b, 0xd31: 0x1463, 0xd32: 0x14e3, 0xd33: 0x14f3, 0xd34: 0x152f, 0xd35: 0x0753,
	0xd36: 0x107f, 0xd37: 0x144f, 0xd38: 0x14cb, 0xd39: 0x0baf, 0xd3a: 0x0717, 0xd3b: 0x0777,
	0xd3c: 0x0a67, 0xd3d: 0x0a87, 0xd3e: 0x0caf, 0xd3f: 0x0d73,
	// Block 0x35, offset 0xd40
	0xd40: 0x0ec3, 0xd41: 0x0fcb, 0xd42: 0x1277, 0xd43: 0x1417, 0xd44: 0x1623, 0xd45: 0x0ce3,
	0xd46: 0x14a3, 0xd47: 0x0833, 0xd48: 0x0d2f, 0xd49: 0x0d3b, 0xd4a: 0x0e0f, 0xd4b: 0x0e47,
	0xd4c: 0x0f4b, 0xd4d: 0x0fa7, 0xd4e: 0x1027, 0xd4f: 0x110b, 0xd50: 0x153b, 0xd51: 0x07af,
	0xd52: 0x0c03, 0xd53: 0x14b3, 0xd54: 0x0767, 0xd55: 0x0aab, 0xd56: 0x0e2f, 0xd57: 0x13df,
	0xd58: 0x0b67, 0xd59: 0x0bb7, 0xd5a: 0x0d43, 0xd5b: 0x0f2f, 0xd5c: 0x14bb, 0xd5d: 0x0817,
	0xd5e: 0x08ff, 0xd5f: 0x0a97, 0xd60: 0x0cd3, 0xd61: 0x0d1f, 0xd62: 0x0d5f, 0xd63: 0x0df3,
	0xd64: 0x0f47, 0xd65: 0x0fbb, 0xd66: 0x1157, 0xd67: 0x12f7, 0xd68: 0x1303, 0xd69: 0x1457,
	0xd6a: 0x14d7, 0xd6b: 0x0883, 0xd6c: 0x0e4b, 0xd6d: 0x0903, 0xd6e: 0x0ec7, 0xd6f: 0x0f6b,
	0xd70: 0x1287, 0xd71: 0x14bf, 0xd72: 0x15ab, 0xd73: 0x15d3, 0xd74: 0x0d37, 0xd75: 0x0e27,
	0xd76: 0x11c3, 0xd77: 0x10b7, 0xd78: 0x10c3, 0xd79: 0x10e7, 0xd7a: 0x0f17, 0xd7b: 0x0e9f,
	0xd7c: 0x1363, 0xd7d: 0x0733, 0xd7e: 0x122b, 0xd7f: 0x081b,
	// Block 0x36, offset 0xd80
	0xd80: 0x080b, 0xd81: 0x0b0b, 0xd82: 0x0c2b, 0xd83: 0x10f3, 0xd84: 0x0a53, 0xd85: 0x0e03,
	0xd86: 0x0cef, 0xd87: 0x13e7, 0xd88: 0x12e7, 0xd89: 0x14ab, 0xd8a: 0x1323, 0xd8b: 0x0b27,
	0xd8c: 0x0787, 0xd8d: 0x095b, 0xd90: 0x09af,
	0xd92: 0x0cdf, 0xd95: 0x07f7, 0xd96: 0x0f1f, 0xd97: 0x0fe3,
	0xd98: 0x1047, 0xd99: 0x1063, 0xd9a: 0x1067, 0xd9b: 0x107b, 0xd9c: 0x14fb, 0xd9d: 0x10eb,
	0xd9e: 0x116f, 0xda0: 0x128f, 0xda2: 0x1353,
	0xda5: 0x1407, 0xda6: 0x1433,
	0xdaa: 0x154f, 0xdab: 0x1553, 0xdac: 0x1557, 0xdad: 0x15bb, 0xdae: 0x142b, 0xdaf: 0x14c7,
	0xdb0: 0x0757, 0xdb1: 0x077b, 0xdb2: 0x078f, 0xdb3: 0x084b, 0xdb4: 0x0857, 0xdb5: 0x0897,
	0xdb6: 0x094b, 0xdb7: 0x0967, 0xdb8: 0x096f, 0xdb9: 0x09ab, 0xdba: 0x09b7, 0xdbb: 0x0a93,
	0xdbc: 0x0a9b, 0xdbd: 0x0ba3, 0xdbe: 0x0bcb, 0xdbf: 0x0bd3,
	// Block 0x37, offset 0xdc0
	0xdc0: 0x0beb, 0xdc1: 0x0c97, 0xdc2: 0x0cc7, 0xdc3: 0x0ce7, 0xdc4: 0x0d57, 0xdc5: 0x0e1b,
	0xdc6: 0x0e37, 0xdc7: 0x0e67, 0xdc8: 0x0ebb, 0xdc9: 0x0edb, 0xdca: 0x0f4f, 0xdcb: 0x102f,
	0xdcc: 0x104b, 0xdcd: 0x1053, 0xdce: 0x104f, 0xdcf: 0x1057, 0xdd0: 0x105b, 0xdd1: 0x105f,
	0xdd2: 0x1073, 0xdd3: 0x1077, 0xdd4: 0x109b, 0xdd5: 0x10af, 0xdd6: 0x10cb, 0xdd7: 0x112f,
	0xdd8: 0x1137, 0xdd9: 0x113f, 0xdda: 0x1153, 0xddb: 0x117b, 0xddc: 0x11cb, 0xddd: 0x11ff,
	0xdde: 0x11ff, 0xddf: 0x1267, 0xde0: 0x130f, 0xde1: 0x1327, 0xde2: 0x135b, 0xde3: 0x135f,
	0xde4: 0x13a3, 0xde5: 0x13a7, 0xde6: 0x13ff, 0xde7: 0x1407, 0xde8: 0x14db, 0xde9: 0x151f,
	0xdea: 0x1537, 0xdeb: 0x0b9b, 0xdec: 0x171e, 0xded: 0x11e3,
	0xdf0: 0x06df, 0xdf1: 0x07e3, 0xdf2: 0x07a3, 0xdf3: 0x074b, 0xdf4: 0x078b, 0xdf5: 0x07b7,
	0xdf6: 0x0847, 0xdf7: 0x0863, 0xdf8: 0x094b, 0xdf9: 0x0937, 0xdfa: 0x0947, 0xdfb: 0x0963,
	0xdfc: 0x09af, 0xdfd: 0x09bf, 0xdfe: 0x0a03, 0xdff: 0x0a0f,
	// Block 0x38, offset 0xe00
	0xe00: 0x0a2b, 0xe01: 0x0a3b, 0xe02: 0x0b23, 0xe03: 0x0b2b, 0xe04: 0x0b5b, 0xe05: 0x0b7b,
	0xe06: 0x0bab, 0xe07: 0x0bc3, 0xe08: 0x0bb3, 0xe09: 0x0bd3, 0xe0a: 0x0bc7, 0xe0b: 0x0beb,
	0xe0c: 0x0c07, 0xe0d: 0x0c5f, 0xe0e: 0x0c6b, 0xe0f: 0x0c73, 0xe10: 0x0c9b, 0xe11: 0x0cdf,
	0xe12: 0x0d0f, 0xe13: 0x0d13, 0xe14: 0x0d27, 0xe15: 0x0da7, 0xe16: 0x0db7, 0xe17: 0x0e0f,
	0xe18: 0x0e5b, 0xe19: 0x0e53, 0xe1a: 0x0e67, 0xe1b: 0x0e83, 0xe1c: 0x0ebb, 0xe1d: 0x1013,
	0xe1e: 0x0edf, 0xe1f: 0x0f13, 0xe20: 0x0f1f, 0xe21: 0x0f5f, 0xe22: 0x0f7b, 0xe23: 0x0f9f,
	0xe24: 0x0fc3, 0xe25: 0x0fc7, 0xe26: 0x0fe3, 0xe27: 0x0fe7, 0xe28: 0x0ff7, 0xe29: 0x100b,
	0xe2a: 0x1007, 0xe2b: 0x1037, 0xe2c: 0x10b3, 0xe2d: 0x10cb, 0xe2e: 0x10e3, 0xe2f: 0x111b,
	0xe30: 0x112f, 0xe31: 0x114b, 0xe32: 0x117b, 0xe33: 0x122f, 0xe34: 0x1257, 0xe35: 0x12cb,
	0xe36: 0x1313, 0xe37: 0x131f, 0xe38: 0x1327, 0xe39: 0x133f, 0xe3a: 0x1353, 0xe3b: 0x1343,
	0xe3c: 0x135b, 0xe3d: 0x1357, 0xe3e: 0x134f, 0xe3f: 0x135f,
	// Block 0x39, offset 0xe40
	0xe40: 0x136b, 0xe41: 0x13a7, 0xe42: 0x13e3, 0xe43: 0x1413, 0xe44: 0x144b, 0xe45: 0x146b,
	0xe46: 0x14b7, 0xe47: 0x14db, 0xe48: 0x14fb, 0xe49: 0x150f, 0xe4a: 0x151f, 0xe4b: 0x152b,
	0xe4c: 0x1537, 0xe4d: 0x158b, 0xe4e: 0x162b, 0xe4f: 0x16b5, 0xe50: 0x16b0, 0xe51: 0x16e2,
	0xe52: 0x0607, 0xe53: 0x062f, 0xe54: 0x0633, 0xe55: 0x1764, 0xe56: 0x1791, 0xe57: 0x1809,
	0xe58: 0x1617, 0xe59: 0x1627,
	// Block 0x3a, offset 0xe80
	0xe80: 0x19d5, 0xe81: 0x19d8, 0xe82: 0x19db, 0xe83: 0x1c08, 0xe84: 0x1c0c, 0xe85: 0x1a5f,
	0xe86: 0x1a5f,
	0xe93: 0x1d75, 0xe94: 0x1d66, 0xe95: 0x1d6b, 0xe96: 0x1d7a, 0xe97: 0x1d70,
	0xe9d: 0x4390,
	0xe9e: 0x8115, 0xe9f: 0x4402, 0xea0: 0x022d, 0xea1: 0x0215, 0xea2: 0x021e, 0xea3: 0x0221,
	0xea4: 0x0224, 0xea5: 0x0227, 0xea6: 0x022a, 0xea7: 0x0230, 0xea8: 0x0233, 0xea9: 0x0017,
	0xeaa: 0x43f0, 0xeab: 0x43f6, 0xeac: 0x44f4, 0xead: 0x44fc, 0xeae: 0x4348, 0xeaf: 0x434e,
	0xeb0: 0x4354, 0xeb1: 0x435a, 0xeb2: 0x4366, 0xeb3: 0x436c, 0xeb4: 0x4372, 0xeb5: 0x437e,
	0xeb6: 0x4384, 0xeb8: 0x438a, 0xeb9: 0x4396, 0xeba: 0x439c, 0xebb: 0x43a2,
	0xebc: 0x43ae, 0xebe: 0x43b4,
	// Block 0x3b, offset 0xec0
	0xec0: 0x43ba, 0xec1: 0x43c0, 0xec3: 0x43c6, 0xec4: 0x43cc,
	0xec6: 0x43d8, 0xec7: 0x43de, 0xec8: 0x43e4, 0xec9: 0x43ea, 0xeca: 0x43fc, 0xecb: 0x4378,
	0xecc: 0x4360, 0xecd: 0x43a8, 0xece: 0x43d2, 0xecf: 0x1d7f, 0xed0: 0x0299, 0xed1: 0x0299,
	0xed2: 0x02a2, 0xed3: 0x02a2, 0xed4: 0x02a2, 0xed5: 0x02a2, 0xed6: 0x02a5, 0xed7: 0x02a5,
	0xed8: 0x02a5, 0xed9: 0x02a5, 0xeda: 0x02ab, 0xedb: 0x02ab, 0xedc: 0x02ab, 0xedd: 0x02ab,
	0xede: 0x029f, 0xedf: 0x029f, 0xee0: 0x029f, 0xee1: 0x029f, 0xee2: 0x02a8, 0xee3: 0x02a8,
	0xee4: 0x02a8, 0xee5: 0x02a8, 0xee6: 0x029c, 0xee7: 0x029c, 0xee8: 0x029c, 0xee9: 0x029c,
	0xeea: 0x02cf, 0xeeb: 0x02cf, 0xeec: 0x02cf, 0xeed: 0x02cf, 0xeee: 0x02d2, 0xeef: 0x02d2,
	0xef0: 0x02d2, 0xef1: 0x02d2, 0xef2: 0x02b1, 0xef3: 0x02b1, 0xef4: 0x02b1, 0xef5: 0x02b1,
	0xef6: 0x02ae, 0xef7: 0x02ae, 0xef8: 0x02ae, 0xef9: 0x02ae, 0xefa: 0x02b4, 0xefb: 0x02b4,
	0xefc: 0x02b4, 0xefd: 0x02b4, 0xefe: 0x02b7, 0xeff: 0x02b7,
	// Block 0x3c, offset 0xf00
	0xf00: 0x02b7, 0xf01: 0x02b7, 0xf02: 0x02c0, 0xf03: 0x02c0, 0xf04: 0x02bd, 0xf05: 0x02bd,
	0xf06: 0x02c3, 0xf07: 0x02c3, 0xf08: 0x02ba, 0xf09: 0x02ba, 0xf0a: 0x02c9, 0xf0b: 0x02c9,
	0xf0c: 0x02c6, 0xf0d: 0x02c6, 0xf0e: 0x02d5, 0xf0f: 0x02d5, 0xf10: 0x02d5, 0xf11: 0x02d5,
	0xf12: 0x02db, 0xf13: 0x02db, 0xf14: 0x02db, 0xf15: 0x02db, 0xf16: 0x02e1, 0xf17: 0x02e1,
	0xf18: 0x02e1, 0xf19: 0x02e1, 0xf1a: 0x02de, 0xf1b: 0x02de, 0xf1c: 0x02de, 0xf1d: 0x02de,
	0xf1e: 0x02e4, 0xf1f: 0x02e4, 0xf20: 0x02e7, 0xf21: 0x02e7, 0xf22: 0x02e7, 0xf23: 0x02e7,
	0xf24: 0x446e, 0xf25: 0x446e, 0xf26: 0x02ed, 0xf27: 0x02ed, 0xf28: 0x02ed, 0xf29: 0x02ed,
	0xf2a: 0x02ea, 0xf2b: 0x02ea, 0xf2c: 0x02ea, 0xf2d: 0x02ea, 0xf2e: 0x0308, 0xf2f: 0x0308,
	0xf30: 0x4468, 0xf31: 0x4468,
	// Block 0x3d, offset 0xf40
	0xf53: 0x02d8, 0xf54: 0x02d8, 0xf55: 0x02d8, 0xf56: 0x02d8, 0xf57: 0x02f6,
	0xf58: 0x02f6, 0xf59: 0x02f3, 0xf5a: 0x02f3, 0xf5b: 0x02f9, 0xf5c: 0x02f9, 0xf5d: 0x204f,
	0xf5e: 0x02ff, 0xf5f: 0x02ff, 0xf60: 0x02f0, 0xf61: 0x02f0, 0xf62: 0x02fc, 0xf63: 0x02fc,
	0xf64: 0x0305, 0xf65: 0x0305, 0xf66: 0x0305, 0xf67: 0x0305, 0xf68: 0x028d, 0xf69: 0x028d,
	0xf6a: 0x25aa, 0xf6b: 0x25aa, 0xf6c: 0x261a, 0xf6d: 0x261a, 0xf6e: 0x25e9, 0xf6f: 0x25e9,
	0xf70: 0x2605, 0xf71: 0x2605, 0xf72: 0x25fe, 0xf73: 0x25fe, 0xf74: 0x260c, 0xf75: 0x260c,
	0xf76: 0x2613, 0xf77: 0x2613, 0xf78: 0x2613, 0xf79: 0x25f0, 0xf7a: 0x25f0, 0xf7b: 0x25f0,
	0xf7c: 0x0302, 0xf7d: 0x0302, 0xf7e: 0x0302, 0xf7f: 0x0302,
	// Block 0x3e, offset 0xf80
	0xf80: 0x25b1, 0xf81: 0x25b8, 0xf82: 0x25d4, 0xf83: 0x25f0, 0xf84: 0x25f7, 0xf85: 0x1d89,
	0xf86: 0x1d8e, 0xf87: 0x1d93, 0xf88: 0x1da2, 0xf89: 0x1db1, 0xf8a: 0x1db6, 0xf8b: 0x1dbb,
	0xf8c: 0x1dc0, 0xf8d: 0x1dc5, 0xf8e: 0x1dd4, 0xf8f: 0x1de3, 0xf90: 0x1de8, 0xf91: 0x1ded,
	0xf92: 0x1dfc, 0xf93: 0x1e0b, 0xf94: 0x1e10, 0xf95: 0x1e15, 0xf96: 0x1e1a, 0xf97: 0x1e29,
	0xf98: 0x1e2e, 0xf99: 0x1e3d, 0xf9a: 0x1e42, 0xf9b: 0x1e47, 0xf9c: 0x1e56, 0xf9d: 0x1e5b,
	0xf9e: 0x1e60, 0xf9f: 0x1e6a, 0xfa0: 0x1ea6, 0xfa1: 0x1eb5, 0xfa2: 0x1ec4, 0xfa3: 0x1ec9,
	0xfa4: 0x1ece, 0xfa5: 0x1ed8, 0xfa6: 0x1ee7, 0xfa7: 0x1eec, 0xfa8: 0x1efb, 0xfa9: 0x1f00,
	0xfaa: 0x1f05, 0xfab: 0x1f14, 0xfac: 0x1f19, 0xfad: 0x1f28, 0xfae: 0x1f2d, 0xfaf: 0x1f32,
	0xfb0: 0x1f37, 0xfb1: 0x1f3c, 0xfb2: 0x1f41, 0xfb3: 0x1f46, 0xfb4: 0x1f4b, 0xfb5: 0x1f50,
	0xfb6: 0x1f55, 0xfb7: 0x1f5a, 0xfb8: 0x1f5f, 0xfb9: 0x1f64, 0xfba: 0x1f69, 0xfbb: 0x1f6e,
	0xfbc: 0x1f73, 0xfbd: 0x1f78, 0xfbe: 0x1f7d, 0xfbf: 0x1f87,
	// Block 0x3f, offset 0xfc0
	0xfc0: 0x1f8c, 0xfc1: 0x1f91, 0xfc2: 0x1f96, 0xfc3: 0x1fa0, 0xfc4: 0x1fa5, 0xfc5: 0x1faf,
	0xfc6: 0x1fb4, 0xfc7: 0x1fb9, 0xfc8: 0x1fbe, 0xfc9: 0x1fc3, 0xfca: 0x1fc8, 0xfcb: 0x1fcd,
	0xfcc: 0x1fd2, 0xfcd: 0x1fd7, 0xfce: 0x1fe6, 0xfcf: 0x1ff5, 0xfd0: 0x1ffa, 0xfd1: 0x1fff,
	0xfd2: 0x2004, 0xfd3: 0x2009, 0xfd4: 0x200e, 0xfd5: 0x2018, 0xfd6: 0x201d, 0xfd7: 0x2022,
	0xfd8: 0x2031, 0xfd9: 0x2040, 0xfda: 0x2045, 0xfdb: 0x4420, 0xfdc: 0x4426, 0xfdd: 0x445c,
	0xfde: 0x44b3, 0xfdf: 0x44ba, 0xfe0: 0x44c1, 0xfe1: 0x44c8, 0xfe2: 0x44cf, 0xfe3: 0x44d6,
	0xfe4: 0x25c6, 0xfe5: 0x25cd, 0xfe6: 0x25d4, 0xfe7: 0x25db, 0xfe8: 0x25f0, 0xfe9: 0x25f7,
	0xfea: 0x1d98, 0xfeb: 0x1d9d, 0xfec: 0x1da2, 0xfed: 0x1da7, 0xfee: 0x1db1, 0xfef: 0x1db6,
	0xff0: 0x1dca, 0xff1: 0x1dcf, 0xff2: 0x1dd4, 0xff3: 0x1dd9, 0xff4: 0x1de3, 0xff5: 0x1de8,
	0xff6: 0x1df2, 0xff7: 0x1df7, 0xff8: 0x1dfc, 0xff9: 0x1e01, 0xffa: 0x1e0b, 0xffb: 0x1e10,
	0xffc: 0x1f3c, 0xffd: 0x1f41, 0xffe: 0x1f50, 0xfff: 0x1f55,
	// Block 0x40, offset 0x1000
	0x1000: 0x1f5a, 0x1001: 0x1f6e, 0x1002: 0x1f73, 0x1003: 0x1f78, 0x1004: 0x1f7d, 0x1005: 0x1f96,
	0x1006: 0x1fa0, 0x1007: 0x1fa5, 0x1008: 0x1faa, 0x1009: 0x1fbe, 0x100a: 0x1fdc, 0x100b: 0x1fe1,
	0x100c: 0x1fe6, 0x100d: 0x1feb, 0x100e: 0x1ff5, 0x100f: 0x1ffa, 0x1010: 0x445c, 0x1011: 0x2027,
	0x1012: 0x202c, 0x1013: 0x2031, 0x1014: 0x2036, 0x1015: 0x2040, 0x1016: 0x2045, 0x1017: 0x25b1,
	0x1018: 0x25b8, 0x1019: 0x25bf, 0x101a: 0x25d4, 0x101b: 0x25e2, 0x101c: 0x1d89, 0x101d: 0x1d8e,
	0x101e: 0x1d93, 0x101f: 0x1da2, 0x1020: 0x1dac, 0x1021: 0x1dbb, 0x1022: 0x1dc0, 0x1023: 0x1dc5,
	0x1024: 0x1dd4, 0x1025: 0x1dde, 0x1026: 0x1dfc, 0x1027: 0x1e15, 0x1028: 0x1e1a, 0x1029: 0x1e29,
	0x102a: 0x1e2e, 0x102b: 0x1e3d, 0x102c: 0x1e47, 0x102d: 0x1e56, 0x102e: 0x1e5b, 0x102f: 0x1e60,
	0x1030: 0x1e6a, 0x1031: 0x1ea6, 0x1032: 0x1eab, 0x1033: 0x1eb5, 0x1034: 0x1ec4, 0x1035: 0x1ec9,
	0x1036: 0x1ece, 0x1037: 0x1ed8, 0x1038: 0x1ee7, 0x1039: 0x1efb, 0x103a: 0x1f00, 0x103b: 0x1f05,
	0x103c: 0x1f14, 0x103d: 0x1f19, 0x103e: 0x1f28, 0x103f: 0x1f2d,
	// Block 0x41, offset 0x1040
	0x1040: 0x1f32, 0x1041: 0x1f37, 0x1042: 0x1f46, 0x1043: 0x1f4b, 0x1044: 0x1f5f, 0x1045: 0x1f64,
	0x1046: 0x1f69, 0x1047: 0x1f6e, 0x1048: 0x1f73, 0x1049: 0x1f87, 0x104a: 0x1f8c, 0x104b: 0x1f91,
	0x104c: 0x1f96, 0x104d: 0x1f9b, 0x104e: 0x1faf, 0x104f: 0x1fb4, 0x1050: 0x1fb9, 0x1051: 0x1fbe,
	0x1052: 0x1fcd, 0x1053: 0x1fd2, 0x1054: 0x1fd7, 0x1055: 0x1fe6, 0x1056: 0x1ff0, 0x1057: 0x1fff,
	0x1058: 0x2004, 0x1059: 0x4450, 0x105a: 0x2018, 0x105b: 0x201d, 0x105c: 0x2022, 0x105d: 0x2031,
	0x105e: 0x203b, 0x105f: 0x25d4, 0x1060: 0x25e2, 0x1061: 0x1da2, 0x1062: 0x1dac, 0x1063: 0x1dd4,
	0x1064: 0x1dde, 0x1065: 0x1dfc, 0x1066: 0x1e06, 0x1067: 0x1e6a, 0x1068: 0x1e6f, 0x1069: 0x1e92,
	0x106a: 0x1e97, 0x106b: 0x1f6e, 0x106c: 0x1f73, 0x106d: 0x1f96, 0x106e: 0x1fe6, 0x106f: 0x1ff0,
	0x1070: 0x2031, 0x1071: 0x203b, 0x1072: 0x4504, 0x1073: 0x450c, 0x1074: 0x4514, 0x1075: 0x1ef1,
	0x1076: 0x1ef6, 0x1077: 0x1f0a, 0x1078: 0x1f0f, 0x1079: 0x1f1e, 0x107a: 0x1f23, 0x107b: 0x1e74,
	0x107c: 0x1e79, 0x107d: 0x1e9c, 0x107e: 0x1ea1, 0x107f: 0x1e33,
	// Block 0x42, offset 0x1080
	0x1080: 0x1e38, 0x1081: 0x1e1f, 0x1082: 0x1e24, 0x1083: 0x1e4c, 0x1084: 0x1e51, 0x1085: 0x1eba,
	0x1086: 0x1ebf, 0x1087: 0x1edd, 0x1088: 0x1ee2, 0x1089: 0x1e7e, 0x108a: 0x1e83, 0x108b: 0x1e88,
	0x108c: 0x1e92, 0x108d: 0x1e8d, 0x108e: 0x1e65, 0x108f: 0x1eb0, 0x1090: 0x1ed3, 0x1091: 0x1ef1,
	0x1092: 0x1ef6, 0x1093: 0x1f0a, 0x1094: 0x1f0f, 0x1095: 0x1f1e, 0x1096: 0x1f23, 0x1097: 0x1e74,
	0x1098: 0x1e79, 0x1099: 0x1e9c, 0x109a: 0x1ea1, 0x109b: 0x1e33, 0x109c: 0x1e38, 0x109d: 0x1e1f,
	0x109e: 0x1e24, 0x109f: 0x1e4c, 0x10a0: 0x1e51, 0x10a1: 0x1eba, 0x10a2: 0x1ebf, 0x10a3: 0x1edd,
	0x10a4: 0x1ee2, 0x10a5: 0x1e7e, 0x10a6: 0x1e83, 0x10a7: 0x1e88, 0x10a8: 0x1e92, 0x10a9: 0x1e8d,
	0x10aa: 0x1e65, 0x10ab: 0x1eb0, 0x10ac: 0x1ed3, 0x10ad: 0x1e7e, 0x10ae: 0x1e83, 0x10af: 0x1e88,
	0x10b0: 0x1e92, 0x10b1: 0x1e6f, 0x10b2: 0x1e97, 0x10b3: 0x1eec, 0x10b4: 0x1e56, 0x10b5: 0x1e5b,
	0x10b6: 0x1e60, 0x10b7: 0x1e7e, 0x10b8: 0x1e83, 0x10b9: 0x1e88, 0x10ba: 0x1eec, 0x10bb: 0x1efb,
	0x10bc: 0x4408, 0x10bd: 0x4408,
	// Block 0x43, offset 0x10c0
	0x10d0: 0x2311, 0x10d1: 0x2326,
	0x10d2: 0x2326, 0x10d3: 0x232d, 0x10d4: 0x2334, 0x10d5: 0x2349, 0x10d6: 0x2350, 0x10d7: 0x2357,
	0x10d8: 0x237a, 0x10d9: 0x237a, 0x10da: 0x239d, 0x10db: 0x2396, 0x10dc: 0x23b2, 0x10dd: 0x23a4,
	0x10de: 0x23ab, 0x10df: 0x23ce, 0x10e0: 0x23ce, 0x10e1: 0x23c7, 0x10e2: 0x23d5, 0x10e3: 0x23d5,
	0x10e4: 0x23ff, 0x10e5: 0x23ff, 0x10e6: 0x241b, 0x10e7: 0x23e3, 0x10e8: 0x23e3, 0x10e9: 0x23dc,
	0x10ea: 0x23f1, 0x10eb: 0x23f1, 0x10ec: 0x23f8, 0x10ed: 0x23f8, 0x10ee: 0x2422, 0x10ef: 0x2430,
	0x10f0: 0x2430, 0x10f1: 0x2437, 0x10f2: 0x2437, 0x10f3: 0x243e, 0x10f4: 0x2445, 0x10f5: 0x244c,
	0x10f6: 0x2453, 0x10f7: 0x2453, 0x10f8: 0x245a, 0x10f9: 0x2468, 0x10fa: 0x2476, 0x10fb: 0x246f,
	0x10fc: 0x247d, 0x10fd: 0x247d, 0x10fe: 0x2492, 0x10ff: 0x2499,
	// Block 0x44, offset 0x1100
	0x1100: 0x24ca, 0x1101: 0x24d8, 0x1102: 0x24d1, 0x1103: 0x24b5, 0x1104: 0x24b5, 0x1105: 0x24df,
	0x1106: 0x24df, 0x1107: 0x24e6, 0x1108: 0x24e6, 0x1109: 0x2510, 0x110a: 0x2517, 0x110b: 0x251e,
	0x110c: 0x24f4, 0x110d: 0x2502, 0x110e: 0x2525, 0x110f: 0x252c,
	0x1112: 0x24fb, 0x1113: 0x2580, 0x1114: 0x2587, 0x1115: 0x255d, 0x1116: 0x2564, 0x1117: 0x2548,
	0x1118: 0x2548, 0x1119: 0x254f, 0x111a: 0x2579, 0x111b: 0x2572, 0x111c: 0x259c, 0x111d: 0x259c,
	0x111e: 0x230a, 0x111f: 0x231f, 0x1120: 0x2318, 0x1121: 0x2342, 0x1122: 0x233b, 0x1123: 0x2365,
	0x1124: 0x235e, 0x1125: 0x2388, 0x1126: 0x236c, 0x1127: 0x2381, 0x1128: 0x23b9, 0x1129: 0x2406,
	0x112a: 0x23ea, 0x112b: 0x2429, 0x112c: 0x24c3, 0x112d: 0x24ed, 0x112e: 0x2595, 0x112f: 0x258e,
	0x1130: 0x25a3, 0x1131: 0x253a, 0x1132: 0x24a0, 0x1133: 0x256b, 0x1134: 0x2492, 0x1135: 0x24ca,
	0x1136: 0x2461, 0x1137: 0x24ae, 0x1138: 0x2541, 0x1139: 0x2533, 0x113a: 0x24bc, 0x113b: 0x24a7,
	0x113c: 0x24bc, 0x113d: 0x2541, 0x113e: 0x2373, 0x113f: 0x238f,
	// Block 0x45, offset 0x1140
	0x1140: 0x2509, 0x1141: 0x2484, 0x1142: 0x2303, 0x1143: 0x24a7, 0x1144: 0x244c, 0x1145: 0x241b,
	0x1146: 0x23c0, 0x1147: 0x2556,
	0x1170: 0x2414, 0x1171: 0x248b, 0x1172: 0x27bf, 0x1173: 0x27b6, 0x1174: 0x27ec, 0x1175: 0x27da,
	0x1176: 0x27c8, 0x1177: 0x27e3, 0x1178: 0x27f5, 0x1179: 0x240d, 0x117a: 0x2c7c, 0x117b: 0x2afc,
	0x117c: 0x27d1,
	// Block 0x46, offset 0x1180
	0x1190: 0x0019, 0x1191: 0x0483,
	0x1192: 0x0487, 0x1193: 0x0035, 0x1194: 0x0037, 0x1195: 0x0003, 0x1196: 0x003f, 0x1197: 0x04bf,
	0x1198: 0x04c3, 0x1199: 0x1b5c,
	0x11a0: 0x8132, 0x11a1: 0x8132, 0x11a2: 0x8132, 0x11a3: 0x8132,
	0x11a4: 0x8132, 0x11a5: 0x8132, 0x11a6: 0x8132, 0x11a7: 0x812d, 0x11a8: 0x812d, 0x11a9: 0x812d,
	0x11aa: 0x812d, 0x11ab: 0x812d, 0x11ac: 0x812d, 0x11ad: 0x812d, 0x11ae: 0x8132, 0x11af: 0x8132,
	0x11b0: 0x1873, 0x11b1: 0x0443, 0x11b2: 0x043f, 0x11b3: 0x007f, 0x11b4: 0x007f, 0x11b5: 0x0011,
	0x11b6: 0x0013, 0x11b7: 0x00b7, 0x11b8: 0x00bb, 0x11b9: 0x04b7, 0x11ba: 0x04bb, 0x11bb: 0x04ab,
	0x11bc: 0x04af, 0x11bd: 0x0493, 0x11be: 0x0497, 0x11bf: 0x048b,
	// Block 0x47, offset 0x11c0
	0x11c0: 0x048f, 0x11c1: 0x049b, 0x11c2: 0x049f, 0x11c3: 0x04a3, 0x11c4: 0x04a7,
	0x11c7: 0x0077, 0x11c8: 0x007b, 0x11c9: 0x4269, 0x11ca: 0x4269, 0x11cb: 0x4269,
	0x11cc: 0x4269, 0x11cd: 0x007f, 0x11ce: 0x007f, 0x11cf: 0x007f, 0x11d0: 0x0019, 0x11d1: 0x0483,
	0x11d2: 0x001d, 0x11d4: 0x0037, 0x11d5: 0x0035, 0x11d6: 0x003f, 0x11d7: 0x0003,
	0x11d8: 0x0443, 0x11d9: 0x0011, 0x11da: 0x0013, 0x11db: 0x00b7, 0x11dc: 0x00bb, 0x11dd: 0x04b7,
	0x11de: 0x04bb, 0x11df: 0x0007, 0x11e0: 0x000d, 0x11e1: 0x0015, 0x11e2: 0x0017, 0x11e3: 0x001b,
	0x11e4: 0x0039, 0x11e5: 0x003d, 0x11e6: 0x003b, 0x11e8: 0x0079, 0x11e9: 0x0009,
	0x11ea: 0x000b, 0x11eb: 0x0041,
	0x11f0: 0x42aa, 0x11f1: 0x442c, 0x11f2: 0x42af, 0x11f4: 0x42b4,
	0x11f6: 0x42b9, 0x11f7: 0x4432, 0x11f8: 0x42be, 0x11f9: 0x4438, 0x11fa: 0x42c3, 0x11fb: 0x443e,
	0x11fc: 0x42c8, 0x11fd: 0x4444, 0x11fe: 0x42cd, 0x11ff: 0x444a,
	// Block 0x48, offset 0x1200
	0x1200: 0x0236, 0x1201: 0x440e, 0x1202: 0x440e, 0x1203: 0x4414, 0x1204: 0x4414, 0x1205: 0x4456,
	0x1206: 0x4456, 0x1207: 0x441a, 0x1208: 0x441a, 0x1209: 0x4462, 0x120a: 0x4462, 0x120b: 0x4462,
	0x120c: 0x4462, 0x120d: 0x0239, 0x120e: 0x0239, 0x120f: 0x023c, 0x1210: 0x023c, 0x1211: 0x023c,
	0x1212: 0x023c, 0x1213: 0x023f, 0x1214: 0x023f, 0x1215: 0x0242, 0x1216: 0x0242, 0x1217: 0x0242,
	0x1218: 0x0242, 0x1219: 0x0245, 0x121a: 0x0245, 0x121b: 0x0245, 0x121c: 0x0245, 0x121d: 0x0248,
	0x121e: 0x0248, 0x121f: 0x0248, 0x1220: 0x0248, 0x1221: 0x024b, 0x1222: 0x024b, 0x1223: 0x024b,
	0x1224: 0x024b, 0x1225: 0x024e, 0x1226: 0x024e, 0x1227: 0x024e, 0x1228: 0x024e, 0x1229: 0x0251,
	0x122a: 0x0251, 0x122b: 0x0254, 0x122c: 0x0254, 0x122d: 0x0257, 0x122e: 0x0257, 0x122f: 0x025a,
	0x1230: 0x025a, 0x1231: 0x025d, 0x1232: 0x025d, 0x1233: 0x025d, 0x1234: 0x025d, 0x1235: 0x0260,
	0x1236: 0x0260, 0x1237: 0x0260, 0x1238: 0x0260, 0x1239: 0x0263, 0x123a: 0x0263, 0x123b: 0x0263,
	0x123c: 0x0263, 0x123d: 0x0266, 0x123e: 0x0266, 0x123f: 0x0266,
	// Block 0x49, offset 0x1240
	0x1240: 0x0266, 0x1241: 0x0269, 0x1242: 0x0269, 0x1243: 0x0269, 0x1244: 0x0269, 0x1245: 0x026c,
	0x1246: 0x026c, 0x1247: 0x026c, 0x1248: 0x026c, 0x1249: 0x026f, 0x124a: 0x026f, 0x124b: 0x026f,
	0x124c: 0x026f, 0x124d: 0x0272, 0x124e: 0x0272, 0x124f: 0x0272, 0x1250: 0x0272, 0x1251: 0x0275,
	0x1252: 0x0275, 0x1253: 0x0275, 0x1254: 0x0275, 0x1255: 0x0278, 0x1256: 0x0278, 0x1257: 0x0278,
	0x1258: 0x0278, 0x1259: 0x027b, 0x125a: 0x027b, 0x125b: 0x027b, 0x125c: 0x027b, 0x125d: 0x027e,
	0x125e: 0x027e, 0x125f: 0x027e, 0x1260: 0x027e, 0x1261: 0x0281, 0x1262: 0x0281, 0x1263: 0x0281,
	0x1264: 0x0281, 0x1265: 0x0284, 0x1266: 0x0284, 0x1267: 0x0284, 0x1268: 0x0284, 0x1269: 0x0287,
	0x126a: 0x0287, 0x126b: 0x0287, 0x126c: 0x0287, 0x126d: 0x028a, 0x126e: 0x028a, 0x126f: 0x028d,
	0x1270: 0x028d, 0x1271: 0x0290, 0x1272: 0x0290, 0x1273: 0x0290, 0x1274: 0x0290, 0x1275: 0x2e00,
	0x1276: 0x2e00, 0x1277: 0x2e08, 0x1278: 0x2e08, 0x1279: 0x2e10, 0x127a: 0x2e10, 0x127b: 0x1f82,
	0x127c: 0x1f82,
	// Block 0x4a, offset 0x1280
	0x1280: 0x0081, 0x1281: 0x0083, 0x1282: 0x0085, 0x1283: 0x0087, 0x1284: 0x0089, 0x1285: 0x008b,
	0x1286: 0x008d, 0x1287: 0x008f, 0x1288: 0x0091, 0x1289: 0x0093, 0x128a: 0x0095, 0x128b: 0x0097,
	0x128c: 0x0099, 0x128d: 0x009b, 0x128e: 0x009d, 0x128f: 0x009f, 0x1290: 0x00a1, 0x1291: 0x00a3,
	0x1292: 0x00a5, 0x1293: 0x00a7, 0x1294: 0x00a9, 0x1295: 0x00ab, 0x1296: 0x00ad, 0x1297: 0x00af,
	0x1298: 0x00b1, 0x1299: 0x00b3, 0x129a: 0x00b5, 0x129b: 0x00b7, 0x129c: 0x00b9, 0x129d: 0x00bb,
	0x129e: 0x00bd, 0x129f: 0x0477, 0x12a0: 0x047b, 0x12a1: 0x0487, 0x12a2: 0x049b, 0x12a3: 0x049f,
	0x12a4: 0x0483, 0x12a5: 0x05ab, 0x12a6: 0x05a3, 0x12a7: 0x04c7, 0x12a8: 0x04cf, 0x12a9: 0x04d7,
	0x12aa: 0x04df, 0x12ab: 0x04e7, 0x12ac: 0x056b, 0x12ad: 0x0573, 0x12ae: 0x057b, 0x12af: 0x051f,
	0x12b0: 0x05af, 0x12b1: 0x04cb, 0x12b2: 0x04d3, 0x12b3: 0x04db, 0x12b4: 0x04e3, 0x12b5: 0x04eb,
	0x12b6: 0x04ef, 0x12b7: 0x04f3, 0x12b8: 0x04f7, 0x12b9: 0x04fb, 0x12ba: 0x04ff, 0x12bb: 0x0503,
	0x12bc: 0x0507, 0x12bd: 0x050b, 0x12be: 0x050f, 0x12bf: 0x0513,
	// Block 0x4b, offset 0x12c0
	0x12c0: 0x0517, 0x12c1: 0x051b, 0x12c2: 0x0523, 0x12c3: 0x0527, 0x12c4: 0x052b, 0x12c5: 0x052f,
	0x12c6: 0x0533, 0x12c7: 0x0537, 0x12c8: 0x053b, 0x12c9: 0x053f, 0x12ca: 0x0543, 0x12cb: 0x0547,
	0x12cc: 0x054b, 0x12cd: 0x054f, 0x12ce: 0x0553, 0x12cf: 0x0557, 0x12d0: 0x055b, 0x12d1: 0x055f,
	0x12d2: 0x0563, 0x12d3: 0x0567, 0x12d4: 0x056f, 0x12d5: 0x0577, 0x12d6: 0x057f, 0x12d7: 0x0583,
	0x12d8: 0x0587, 0x12d9: 0x058b, 0x12da: 0x058f, 0x12db: 0x0593, 0x12dc: 0x0597, 0x12dd: 0x05a7,
	0x12de: 0x4a78, 0x12df: 0x4a7e, 0x12e0: 0x03c3, 0x12e1: 0x0313, 0x12e2: 0x0317, 0x12e3: 0x4a3b,
	0x12e4: 0x031b, 0x12e5: 0x4a41, 0x12e6: 0x4a47, 0x12e7: 0x031f, 0x12e8: 0x0323, 0x12e9: 0x0327,
	0x12ea: 0x4a4d, 0x12eb: 0x4a53, 0x12ec: 0x4a59, 0x12ed: 0x4a5f, 0x12ee: 0x4a65, 0x12ef: 0x4a6b,
	0x12f0: 0x0367, 0x12f1: 0x032b, 0x12f2: 0x032f, 0x12f3: 0x0333, 0x12f4: 0x037b, 0x12f5: 0x0337,
	0x12f6: 0x033b, 0x12f7: 0x033f, 0x12f8: 0x0343, 0x12f9: 0x0347, 0x12fa: 0x034b, 0x12fb: 0x034f,
	0x12fc: 0x0353, 0x12fd: 0x0357, 0x12fe: 0x035b,
	// Block 0x4c, offset 0x1300
	0x1302: 0x49bd, 0x1303: 0x49c3, 0x1304: 0x49c9, 0x1305: 0x49cf,
	0x1306: 0x49d5, 0x1307: 0x49db, 0x130a: 0x49e1, 0x130b: 0x49e7,
	0x130c: 0x49ed, 0x130d: 0x49f3, 0x130e: 0x49f9, 0x130f: 0x49ff,
	0x1312: 0x4a05, 0x1313: 0x4a0b, 0x1314: 0x4a11, 0x1315: 0x4a17, 0x1316: 0x4a1d, 0x1317: 0x4a23,
	0x131a: 0x4a29, 0x131b: 0x4a2f, 0x131c: 0x4a35,
	0x1320: 0x00bf, 0x1321: 0x00c2, 0x1322: 0x00cb, 0x1323: 0x4264,
	0x1324: 0x00c8, 0x1325: 0x00c5, 0x1326: 0x0447, 0x1328: 0x046b, 0x1329: 0x044b,
	0x132a: 0x044f, 0x132b: 0x0453, 0x132c: 0x0457, 0x132d: 0x046f, 0x132e: 0x0473,
	// Block 0x4d, offset 0x1340
	0x1340: 0x0063, 0x1341: 0x0065, 0x1342: 0x0067, 0x1343: 0x0069, 0x1344: 0x006b, 0x1345: 0x006d,
	0x1346: 0x006f, 0x1347: 0x0071, 0x1348: 0x0073, 0x1349: 0x0075, 0x134a: 0x0083, 0x134b: 0x0085,
	0x134c: 0x0087, 0x134d: 0x0089, 0x134e: 0x008b, 0x134f: 0x008d, 0x1350: 0x008f, 0x1351: 0x0091,
	0x1352: 0x0093, 0x1353: 0x0095, 0x1354: 0x0097, 0x1355: 0x0099, 0x1356: 0x009b, 0x1357: 0x009d,
	0x1358: 0x009f, 0x1359: 0x00a1, 0x135a: 0x00a3, 0x135b: 0x00a5, 0x135c: 0x00a7, 0x135d: 0x00a9,
	0x135e: 0x00ab, 0x135f: 0x00ad, 0x1360: 0x00af, 0x1361: 0x00b1, 0x1362: 0x00b3, 0x1363: 0x00b5,
	0x1364: 0x00dd, 0x1365: 0x00f2, 0x1368: 0x0173, 0x1369: 0x0176,
	0x136a: 0x0179, 0x136b: 0x017c, 0x136c: 0x017f, 0x136d: 0x0182, 0x136e: 0x0185, 0x136f: 0x0188,
	0x1370: 0x018b, 0x1371: 0x018e, 0x1372: 0x0191, 0x1373: 0x0194, 0x1374: 0x0197, 0x1375: 0x019a,
	0x1376: 0x019d, 0x1377: 0x01a0, 0x1378: 0x01a3, 0x1379: 0x0188, 0x137a: 0x01a6, 0x137b: 0x01a9,
	0x137c: 0x01ac, 0x137d: 0x01af, 0x137e: 0x01b2, 0x137f: 0x01b5,
	// Block 0x4e, offset 0x1380
	0x1380: 0x01fd, 0x1381: 0x0200, 0x1382: 0x0203, 0x1383: 0x045b, 0x1384: 0x01c7, 0x1385: 0x01d0,
	0x1386: 0x01d6, 0x1387: 0x01fa, 0x1388: 0x01eb, 0x1389: 0x01e8, 0x138a: 0x0206, 0x138b: 0x0209,
	0x138e: 0x0021, 0x138f: 0x0023, 0x1390: 0x0025, 0x1391: 0x0027,
	0x1392: 0x0029, 0x1393: 0x002b, 0x1394: 0x002d, 0x1395: 0x002f, 0x1396: 0x0031, 0x1397: 0x0033,
	0x1398: 0x0021, 0x1399: 0x0023, 0x139a: 0x0025, 0x139b: 0x0027, 0x139c: 0x0029, 0x139d: 0x002b,
	0x139e: 0x002d, 0x139f: 0x002f, 0x13a0: 0x0031, 0x13a1: 0x0033, 0x13a2: 0x0021, 0x13a3: 0x0023,
	0x13a4: 0x0025, 0x13a5: 0x0027, 0x13a6: 0x0029, 0x13a7: 0x002b, 0x13a8: 0x002d, 0x13a9: 0x002f,
	0x13aa: 0x0031, 0x13ab: 0x0033, 0x13ac: 0x0021, 0x13ad: 0x0023, 0x13ae: 0x0025, 0x13af: 0x0027,
	0x13b0: 0x0029, 0x13b1: 0x002b, 0x13b2: 0x002d, 0x13b3: 0x002f, 0x13b4: 0x0031, 0x13b5: 0x0033,
	0x13b6: 0x0021, 0x13b7: 0x0023, 0x13b8: 0x0025, 0x13b9: 0x0027, 0x13ba: 0x0029, 0x13bb: 0x002b,
	0x13bc: 0x002d, 0x13bd: 0x002f, 0x13be: 0x0031, 0x13bf: 0x0033,
	// Block 0x4f, offset 0x13c0
	0x13c0: 0x0239, 0x13c1: 0x023c, 0x13c2: 0x0248, 0x13c3: 0x0251, 0x13c5: 0x028a,
	0x13c6: 0x025a, 0x13c7: 0x024b, 0x13c8: 0x0269, 0x13c9: 0x0290, 0x13ca: 0x027b, 0x13cb: 0x027e,
	0x13cc: 0x0281, 0x13cd: 0x0284, 0x13ce: 0x025d, 0x13cf: 0x026f, 0x13d0: 0x0275, 0x13d1: 0x0263,
	0x13d2: 0x0278, 0x13d3: 0x0257, 0x13d4: 0x0260, 0x13d5: 0x0242, 0x13d6: 0x0245, 0x13d7: 0x024e,
	0x13d8: 0x0254, 0x13d9: 0x0266, 0x13da: 0x026c, 0x13db: 0x0272, 0x13dc: 0x0293, 0x13dd: 0x02e4,
	0x13de: 0x02cc, 0x13df: 0x0296, 0x13e1: 0x023c, 0x13e2: 0x0248,
	0x13e4: 0x0287, 0x13e7: 0x024b, 0x13e9: 0x0290,
	0x13ea: 0x027b, 0x13eb: 0x027e, 0x13ec: 0x0281, 0x13ed: 0x0284, 0x13ee: 0x025d, 0x13ef: 0x026f,
	0x13f0: 0x0275, 0x13f1: 0x0263, 0x13f2: 0x0278, 0x13f4: 0x0260, 0x13f5: 0x0242,
	0x13f6: 0x0245, 0x13f7: 0x024e, 0x13f9: 0x0266, 0x13fb: 0x0272,
	// Block 0x50, offset 0x1400
	0x1402: 0x0248,
	0x1407: 0x024b, 0x1409: 0x0290, 0x140b: 0x027e,
	0x140d: 0x0284, 0x140e: 0x025d, 0x140f: 0x026f, 0x1411: 0x0263,
	0x1412: 0x0278, 0x1414: 0x0260, 0x1417: 0x024e,
	0x1419: 0x0266, 0x141b: 0x0272, 0x141d: 0x02e4,
	0x141f: 0x0296, 0x1421: 0x023c, 0x1422: 0x0248,
	0x1424: 0x0287, 0x1427: 0x024b, 0x1428: 0x0269, 0x1429: 0x0290,
	0x142a: 0x027b, 0x142c: 0x0281, 0x142d: 0x0284, 0x142e: 0x025d, 0x142f: 0x026f,
	0x1430: 0x0275, 0x1431: 0x0263, 0x1432: 0x0278, 0x1434: 0x0260, 0x1435: 0x0242,
	0x1436: 0x0245, 0x1437: 0x024e, 0x1439: 0x0266, 0x143a: 0x026c, 0x143b: 0x0272,
	0x143c: 0x0293, 0x143e: 0x02cc,
	// Block 0x51, offset 0x1440
	0x1440: 0x0239, 0x1441: 0x023c, 0x1442: 0x0248, 0x1443: 0x0251, 0x1444: 0x0287, 0x1445: 0x028a,
	0x1446: 0x025a, 0x1447: 0x024b, 0x1448: 0x0269, 0x1449: 0x0290, 0x144b: 0x027e,
	0x144c: 0x0281, 0x144d: 0x0284, 0x144e: 0x025d, 0x144f: 0x026f, 0x1450: 0x0275, 0x1451: 0x0263,
	0x1452: 0x0278, 0x1453: 0x0257, 0x1454: 0x0260, 0x1455: 0x0242, 0x1456: 0x0245, 0x1457: 0x024e,
	0x1458: 0x0254, 0x1459: 0x0266, 0x145a: 0x026c, 0x145b: 0x0272,
	0x1461: 0x023c, 0x1462: 0x0248, 0x1463: 0x0251,
	0x1465: 0x028a, 0x1466: 0x025a, 0x1467: 0x024b, 0x1468: 0x0269, 0x1469: 0x0290,
	0x146b: 0x027e, 0x146c: 0x0281, 0x146d: 0x0284, 0x146e: 0x025d, 0x146f: 0x026f,
	0x1470: 0x0275, 0x1471: 0x0263, 0x1472: 0x0278, 0x1473: 0x0257, 0x1474: 0x0260, 0x1475: 0x0242,
	0x1476: 0x0245, 0x1477: 0x024e, 0x1478: 0x0254, 0x1479: 0x0266, 0x147a: 0x026c, 0x147b: 0x0272,
	// Block 0x52, offset 0x1480
	0x1480: 0x1879, 0x1481: 0x1876, 0x1482: 0x187c, 0x1483: 0x18a0, 0x1484: 0x18c4, 0x1485: 0x18e8,
	0x1486: 0x190c, 0x1487: 0x1915, 0x1488: 0x191b, 0x1489: 0x1921, 0x148a: 0x1927,
	0x1490: 0x1a8c, 0x1491: 0x1a90,
	0x1492: 0x1a94, 0x1493: 0x1a98, 0x1494: 0x1a9c, 0x1495: 0x1aa0, 0x1496: 0x1aa4, 0x1497: 0x1aa8,
	0x1498: 0x1aac, 0x1499: 0x1ab0, 0x149a: 0x1ab4, 0x149b: 0x1ab8, 0x149c: 0x1abc, 0x149d: 0x1ac0,
	0x149e: 0x1ac4, 0x149f: 0x1ac8, 0x14a0: 0x1acc, 0x14a1: 0x1ad0, 0x14a2: 0x1ad4, 0x14a3: 0x1ad8,
	0x14a4: 0x1adc, 0x14a5: 0x1ae0, 0x14a6: 0x1ae4, 0x14a7: 0x1ae8, 0x14a8: 0x1aec, 0x14a9: 0x1af0,
	0x14aa: 0x271e, 0x14ab: 0x0047, 0x14ac: 0x0065, 0x14ad: 0x193c, 0x14ae: 0x19b1,
	0x14b0: 0x0043, 0x14b1: 0x0045, 0x14b2: 0x0047, 0x14b3: 0x0049, 0x14b4: 0x004b, 0x14b5: 0x004d,
	0x14b6: 0x004f, 0x14b7: 0x0051, 0x14b8: 0x0053, 0x14b9: 0x0055, 0x14ba: 0x0057, 0x14bb: 0x0059,
	0x14bc: 0x005b, 0x14bd: 0x005d, 0x14be: 0x005f, 0x14bf: 0x0061,
	// Block 0x53, offset 0x14c0
	0x14c0: 0x26ad, 0x14c1: 0x26c2, 0x14c2: 0x0503,
	0x14d0: 0x0c0f, 0x14d1: 0x0a47,
	0x14d2: 0x08d3, 0x14d3: 0x45c4, 0x14d4: 0x071b, 0x14d5: 0x09ef, 0x14d6: 0x132f, 0x14d7: 0x09ff,
	0x14d8: 0x0727, 0x14d9: 0x0cd7, 0x14da: 0x0eaf, 0x14db: 0x0caf, 0x14dc: 0x0827, 0x14dd: 0x0b6b,
	0x14de: 0x07bf, 0x14df: 0x0cb7, 0x14e0: 0x0813, 0x14e1: 0x1117, 0x14e2: 0x0f83, 0x14e3: 0x138b,
	0x14e4: 0x09d3, 0x14e5: 0x090b, 0x14e6: 0x0e63, 0x14e7: 0x0c1b, 0x14e8: 0x0c47, 0x14e9: 0x06bf,
	0x14ea: 0x06cb, 0x14eb: 0x140b, 0x14ec: 0x0adb, 0x14ed: 0x06e7, 0x14ee: 0x08ef, 0x14ef: 0x0c3b,
	0x14f0: 0x13b3, 0x14f1: 0x0c13, 0x14f2: 0x106f, 0x14f3: 0x10ab, 0x14f4: 0x08f7, 0x14f5: 0x0e43,
	0x14f6: 0x0d0b, 0x14f7: 0x0d07, 0x14f8: 0x0f97, 0x14f9: 0x082b, 0x14fa: 0x0957, 0x14fb: 0x1443,
	// Block 0x54, offset 0x1500
	0x1500: 0x06fb, 0x1501: 0x06f3, 0x1502: 0x0703, 0x1503: 0x1647, 0x1504: 0x0747, 0x1505: 0x0757,
	0x1506: 0x075b, 0x1507: 0x0763, 0x1508: 0x076b, 0x1509: 0x076f, 0x150a: 0x077b, 0x150b: 0x0773,
	0x150c: 0x05b3, 0x150d: 0x165b, 0x150e: 0x078f, 0x150f: 0x0793, 0x1510: 0x0797, 0x1511: 0x07b3,
	0x1512: 0x164c, 0x1513: 0x05b7, 0x1514: 0x079f, 0x1515: 0x07bf, 0x1516: 0x1656, 0x1517: 0x07cf,
	0x1518: 0x07d7, 0x1519: 0x0737, 0x151a: 0x07df, 0x151b: 0x07e3, 0x151c: 0x1831, 0x151d: 0x07ff,
	0x151e: 0x0807, 0x151f: 0x05bf, 0x1520: 0x081f, 0x1521: 0x0823, 0x1522: 0x082b, 0x1523: 0x082f,
	0x1524: 0x05c3, 0x1525: 0x0847, 0x1526: 0x084b, 0x1527: 0x0857, 0x1528: 0x0863, 0x1529: 0x0867,
	0x152a: 0x086b, 0x152b: 0x0873, 0x152c: 0x0893, 0x152d: 0x0897, 0x152e: 0x089f, 0x152f: 0x08af,
	0x1530: 0x08b7, 0x1531: 0x08bb, 0x1532: 0x08bb, 0x1533: 0x08bb, 0x1534: 0x166a, 0x1535: 0x0e93,
	0x1536: 0x08cf, 0x1537: 0x08d7, 0x1538: 0x166f, 0x1539: 0x08e3, 0x153a: 0x08eb, 0x153b: 0x08f3,
	0x153c: 0x091b, 0x153d: 0x0907, 0x153e: 0x0913, 0x153f: 0x0917,
	// Block 0x55, offset 0x1540
	0x1540: 0x091f, 0x1541: 0x0927, 0x1542: 0x092b, 0x1543: 0x0933, 0x1544: 0x093b, 0x1545: 0x093f,
	0x1546: 0x093f, 0x1547: 0x0947, 0x1548: 0x094f, 0x1549: 0x0953, 0x154a: 0x095f, 0x154b: 0x0983,
	0x154c: 0x0967, 0x154d: 0x0987, 0x154e: 0x096b, 0x154f: 0x0973, 0x1550: 0x080b, 0x1551: 0x09cf,
	0x1552: 0x0997, 0x1553: 0x099b, 0x1554: 0x099f, 0x1555: 0x0993, 0x1556: 0x09a7, 0x1557: 0x09a3,
	0x1558: 0x09bb, 0x1559: 0x1674, 0x155a: 0x09d7, 0x155b: 0x09db, 0x155c: 0x09e3, 0x155d: 0x09ef,
	0x155e: 0x09f7, 0x155f: 0x0a13, 0x1560: 0x1679, 0x1561: 0x167e, 0x1562: 0x0a1f, 0x1563: 0x0a23,
	0x1564: 0x0a27, 0x1565: 0x0a1b, 0x1566: 0x0a2f, 0x1567: 0x05c7, 0x1568: 0x05cb, 0x1569: 0x0a37,
	0x156a: 0x0a3f, 0x156b: 0x0a3f, 0x156c: 0x1683, 0x156d: 0x0a5b, 0x156e: 0x0a5f, 0x156f: 0x0a63,
	0x1570: 0x0a6b, 0x1571: 0x1688, 0x1572: 0x0a73, 0x1573: 0x0a77, 0x1574: 0x0b4f, 0x1575: 0x0a7f,
	0x1576: 0x05cf, 0x1577: 0x0a8b, 0x1578: 0x0a9b, 0x1579: 0x0aa7, 0x157a: 0x0aa3, 0x157b: 0x1692,
	0x157c: 0x0aaf, 0x157d: 0x1697, 0x157e: 0x0abb, 0x157f: 0x0ab7,
	// Block 0x56, offset 0x1580
	0x1580: 0x0abf, 0x1581: 0x0acf, 0x1582: 0x0ad3, 0x1583: 0x05d3, 0x1584: 0x0ae3, 0x1585: 0x0aeb,
	0x1586: 0x0aef, 0x1587: 0x0af3, 0x1588: 0x05d7, 0x1589: 0x169c, 0x158a: 0x05db, 0x158b: 0x0b0f,
	0x158c: 0x0b13, 0x158d: 0x0b17, 0x158e: 0x0b1f, 0x158f: 0x1863, 0x1590: 0x0b37, 0x1591: 0x16a6,
	0x1592: 0x16a6, 0x1593: 0x11d7, 0x1594: 0x0b47, 0x1595: 0x0b47, 0x1596: 0x05df, 0x1597: 0x16c9,
	0x1598: 0x179b, 0x1599: 0x0b57, 0x159a: 0x0b5f, 0x159b: 0x05e3, 0x159c: 0x0b73, 0x159d: 0x0b83,
	0x159e: 0x0b87, 0x159f: 0x0b8f, 0x15a0: 0x0b9f, 0x15a1: 0x05eb, 0x15a2: 0x05e7, 0x15a3: 0x0ba3,
	0x15a4: 0x16ab, 0x15a5: 0x0ba7, 0x15a6: 0x0bbb, 0x15a7: 0x0bbf, 0x15a8: 0x0bc3, 0x15a9: 0x0bbf,
	0x15aa: 0x0bcf, 0x15ab: 0x0bd3, 0x15ac: 0x0be3, 0x15ad: 0x0bdb, 0x15ae: 0x0bdf, 0x15af: 0x0be7,
	0x15b0: 0x0beb, 0x15b1: 0x0bef, 0x15b2: 0x0bfb, 0x15b3: 0x0bff, 0x15b4: 0x0c17, 0x15b5: 0x0c1f,
	0x15b6: 0x0c2f, 0x15b7: 0x0c43, 0x15b8: 0x16ba, 0x15b9: 0x0c3f, 0x15ba: 0x0c33, 0x15bb: 0x0c4b,
	0x15bc: 0x0c53, 0x15bd: 0x0c67, 0x15be: 0x16bf, 0x15bf: 0x0c6f,
	// Block 0x57, offset 0x15c0
	0x15c0: 0x0c63, 0x15c1: 0x0c5b, 0x15c2: 0x05ef, 0x15c3: 0x0c77, 0x15c4: 0x0c7f, 0x15c5: 0x0c87,
	0x15c6: 0x0c7b, 0x15c7: 0x05f3, 0x15c8: 0x0c97, 0x15c9: 0x0c9f, 0x15ca: 0x16c4, 0x15cb: 0x0ccb,
	0x15cc: 0x0cff, 0x15cd: 0x0cdb, 0x15ce: 0x05ff, 0x15cf: 0x0ce7, 0x15d0: 0x05fb, 0x15d1: 0x05f7,
	0x15d2: 0x07c3, 0x15d3: 0x07c7, 0x15d4: 0x0d03, 0x15d5: 0x0ceb, 0x15d6: 0x11ab, 0x15d7: 0x0663,
	0x15d8: 0x0d0f, 0x15d9: 0x0d13, 0x15da: 0x0d17, 0x15db: 0x0d2b, 0x15dc: 0x0d23, 0x15dd: 0x16dd,
	0x15de: 0x0603, 0x15df: 0x0d3f, 0x15e0: 0x0d33, 0x15e1: 0x0d4f, 0x15e2: 0x0d57, 0x15e3: 0x16e7,
	0x15e4: 0x0d5b, 0x15e5: 0x0d47, 0x15e6: 0x0d63, 0x15e7: 0x0607, 0x15e8: 0x0d67, 0x15e9: 0x0d6b,
	0x15ea: 0x0d6f, 0x15eb: 0x0d7b, 0x15ec: 0x16ec, 0x15ed: 0x0d83, 0x15ee: 0x060b, 0x15ef: 0x0d8f,
	0x15f0: 0x16f1, 0x15f1: 0x0d93, 0x15f2: 0x060f, 0x15f3: 0x0d9f, 0x15f4: 0x0dab, 0x15f5: 0x0db7,
	0x15f6: 0x0dbb, 0x15f7: 0x16f6, 0x15f8: 0x168d, 0x15f9: 0x16fb, 0x15fa: 0x0ddb, 0x15fb: 0x1700,
	0x15fc: 0x0de7, 0x15fd: 0x0def, 0x15fe: 0x0ddf, 0x15ff: 0x0dfb,
	// Block 0x58, offset 0x1600
	0x1600: 0x0e0b, 0x1601: 0x0e1b, 0x1602: 0x0e0f, 0x1603: 0x0e13, 0x1604: 0x0e1f, 0x1605: 0x0e23,
	0x1606: 0x1705, 0x1607: 0x0e07, 0x1608: 0x0e3b, 0x1609: 0x0e3f, 0x160a: 0x0613, 0x160b: 0x0e53,
	0x160c: 0x0e4f, 0x160d: 0x170a, 0x160e: 0x0e33, 0x160f: 0x0e6f, 0x1610: 0x170f, 0x1611: 0x1714,
	0x1612: 0x0e73, 0x1613: 0x0e87, 0x1614: 0x0e83, 0x1615: 0x0e7f, 0x1616: 0x0617, 0x1617: 0x0e8b,
	0x1618: 0x0e9b, 0x1619: 0x0e97, 0x161a: 0x0ea3, 0x161b: 0x1651, 0x161c: 0x0eb3, 0x161d: 0x1719,
	0x161e: 0x0ebf, 0x161f: 0x1723, 0x1620: 0x0ed3, 0x1621: 0x0edf, 0x1622: 0x0ef3, 0x1623: 0x1728,
	0x1624: 0x0f07, 0x1625: 0x0f0b, 0x1626: 0x172d, 0x1627: 0x1732, 0x1628: 0x0f27, 0x1629: 0x0f37,
	0x162a: 0x061b, 0x162b: 0x0f3b, 0x162c: 0x061f, 0x162d: 0x061f, 0x162e: 0x0f53, 0x162f: 0x0f57,
	0x1630: 0x0f5f, 0x1631: 0x0f63, 0x1632: 0x0f6f, 0x1633: 0x0623, 0x1634: 0x0f87, 0x1635: 0x1737,
	0x1636: 0x0fa3, 0x1637: 0x173c, 0x1638: 0x0faf, 0x1639: 0x16a1, 0x163a: 0x0fbf, 0x163b: 0x1741,
	0x163c: 0x1746, 0x163d: 0x174b, 0x163e: 0x0627, 0x163f: 0x062b,
	// Block 0x59, offset 0x1640
	0x1640: 0x0ff7, 0x1641: 0x1755, 0x1642: 0x1750, 0x1643: 0x175a, 0x1644: 0x175f, 0x1645: 0x0fff,
	0x1646: 0x1003, 0x1647: 0x1003, 0x1648: 0x100b, 0x1649: 0x0633, 0x164a: 0x100f, 0x164b: 0x0637,
	0x164c: 0x063b, 0x164d: 0x1769, 0x164e: 0x1023, 0x164f: 0x102b, 0x1650: 0x1037, 0x1651: 0x063f,
	0x1652: 0x176e, 0x1653: 0x105b, 0x1654: 0x1773, 0x1655: 0x1778, 0x1656: 0x107b, 0x1657: 0x1093,
	0x1658: 0x0643, 0x1659: 0x109b, 0x165a: 0x109f, 0x165b: 0x10a3, 0x165c: 0x177d, 0x165d: 0x1782,
	0x165e: 0x1782, 0x165f: 0x10bb, 0x1660: 0x0647, 0x1661: 0x1787, 0x1662: 0x10cf, 0x1663: 0x10d3,
	0x1664: 0x064b, 0x1665: 0x178c, 0x1666: 0x10ef, 0x1667: 0x064f, 0x1668: 0x10ff, 0x1669: 0x10f7,
	0x166a: 0x1107, 0x166b: 0x1796, 0x166c: 0x111f, 0x166d: 0x0653, 0x166e: 0x112b, 0x166f: 0x1133,
	0x1670: 0x1143, 0x1671: 0x0657, 0x1672: 0x17a0, 0x1673: 0x17a5, 0x1674: 0x065b, 0x1675: 0x17aa,
	0x1676: 0x115b, 0x1677: 0x17af, 0x1678: 0x1167, 0x1679: 0x1173, 0x167a: 0x117b, 0x167b: 0x17b4,
	0x167c: 0x17b9, 0x167d: 0x118f, 0x167e: 0x17be, 0x167f: 0x1197,
	// Block 0x5a, offset 0x1680
	0x1680: 0x16ce, 0x1681: 0x065f, 0x1682: 0x11af, 0x1683: 0x11b3, 0x1684: 0x0667, 0x1685: 0x11b7,
	0x1686: 0x0a33, 0x1687: 0x17c3, 0x1688: 0x17c8, 0x1689: 0x16d3, 0x168a: 0x16d8, 0x168b: 0x11d7,
	0x168c: 0x11db, 0x168d: 0x13f3, 0x168e: 0x066b, 0x168f: 0x1207, 0x1690: 0x1203, 0x1691: 0x120b,
	0x1692: 0x083f, 0x1693: 0x120f, 0x1694: 0x1213, 0x1695: 0x1217, 0x1696: 0x121f, 0x1697: 0x17cd,
	0x1698: 0x121b, 0x1699: 0x1223, 0x169a: 0x1237, 0x169b: 0x123b, 0x169c: 0x1227, 0x169d: 0x123f,
	0x169e: 0x1253, 0x169f: 0x1267, 0x16a0: 0x1233, 0x16a1: 0x1247, 0x16a2: 0x124b, 0x16a3: 0x124f,
	0x16a4: 0x17d2, 0x16a5: 0x17dc, 0x16a6: 0x17d7, 0x16a7: 0x066f, 0x16a8: 0x126f, 0x16a9: 0x1273,
	0x16aa: 0x127b, 0x16ab: 0x17f0, 0x16ac: 0x127f, 0x16ad: 0x17e1, 0x16ae: 0x0673, 0x16af: 0x0677,
	0x16b0: 0x17e6, 0x16b1: 0x17eb, 0x16b2: 0x067b, 0x16b3: 0x129f, 0x16b4: 0x12a3, 0x16b5: 0x12a7,
	0x16b6: 0x12ab, 0x16b7: 0x12b7, 0x16b8: 0x12b3, 0x16b9: 0x12bf, 0x16ba: 0x12bb, 0x16bb: 0x12cb,
	0x16bc: 0x12c3, 0x16bd: 0x12c7, 0x16be: 0x12cf, 0x16bf: 0x067f,
	// Block 0x5b, offset 0x16c0
	0x16c0: 0x12d7, 0x16c1: 0x12db, 0x16c2: 0x0683, 0x16c3: 0x12eb, 0x16c4: 0x12ef, 0x16c5: 0x17f5,
	0x16c6: 0x12fb, 0x16c7: 0x12ff, 0x16c8: 0x0687, 0x16c9: 0x130b, 0x16ca: 0x05bb, 0x16cb: 0x17fa,
	0x16cc: 0x17ff, 0x16cd: 0x068b, 0x16ce: 0x068f, 0x16cf: 0x1337, 0x16d0: 0x134f, 0x16d1: 0x136b,
	0x16d2: 0x137b, 0x16d3: 0x1804, 0x16d4: 0x138f, 0x16d5: 0x1393, 0x16d6: 0x13ab, 0x16d7: 0x13b7,
	0x16d8: 0x180e, 0x16d9: 0x1660, 0x16da: 0x13c3, 0x16db: 0x13bf, 0x16dc: 0x13cb, 0x16dd: 0x1665,
	0x16de: 0x13d7, 0x16df: 0x13e3, 0x16e0: 0x1813, 0x16e1: 0x1818, 0x16e2: 0x1423, 0x16e3: 0x142f,
	0x16e4: 0x1437, 0x16e5: 0x181d, 0x16e6: 0x143b, 0x16e7: 0x1467, 0x16e8: 0x1473, 0x16e9: 0x1477,
	0x16ea: 0x146f, 0x16eb: 0x1483, 0x16ec: 0x1487, 0x16ed: 0x1822, 0x16ee: 0x1493, 0x16ef: 0x0693,
	0x16f0: 0x149b, 0x16f1: 0x1827, 0x16f2: 0x0697, 0x16f3: 0x14d3, 0x16f4: 0x0ac3, 0x16f5: 0x14eb,
	0x16f6: 0x182c, 0x16f7: 0x1836, 0x16f8: 0x069b, 0x16f9: 0x069f, 0x16fa: 0x1513, 0x16fb: 0x183b,
	0x16fc: 0x06a3, 0x16fd: 0x1840, 0x16fe: 0x152b, 0x16ff: 0x152b,
	// Block 0x5c, offset 0x1700
	0x1700: 0x1533, 0x1701: 0x1845, 0x1702: 0x154b, 0x1703: 0x06a7, 0x1704: 0x155b, 0x1705: 0x1567,
	0x1706: 0x156f, 0x1707: 0x1577, 0x1708: 0x06ab, 0x1709: 0x184a, 0x170a: 0x158b, 0x170b: 0x15a7,
	0x170c: 0x15b3, 0x170d: 0x06af, 0x170e: 0x06b3, 0x170f: 0x15b7, 0x1710: 0x184f, 0x1711: 0x06b7,
	0x1712: 0x1854, 0x1713: 0x1859, 0x1714: 0x185e, 0x1715: 0x15db, 0x1716: 0x06bb, 0x1717: 0x15ef,
	0x1718: 0x15f7, 0x1719: 0x15fb, 0x171a: 0x1603, 0x171b: 0x160b, 0x171c: 0x1613, 0x171d: 0x1868,
}

// nfkcIndex: 22 blocks, 1408 entries, 1408 bytes
// Block 0 is the zero block.
var nfkcIndex = [1408]uint8{
	// Block 0x0, offset 0x0
	// Block 0x1, offset 0x40
	// Block 0x2, offset 0x80
	// Block 0x3, offset 0xc0
	0xc2: 0x5b, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x5c, 0xc7: 0x04,
	0xc8: 0x05, 0xca: 0x5d, 0xcb: 0x5e, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x09,
	0xd0: 0x0a, 0xd1: 0x5f, 0xd2: 0x60, 0xd3: 0x0b, 0xd6: 0x0c, 0xd7: 0x61,
	0xd8: 0x62, 0xd9: 0x0d, 0xdb: 0x63, 0xdc: 0x64, 0xdd: 0x65, 0xdf: 0x66,
	0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05,
	0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a,
	0xf0: 0x13,
	// Block 0x4, offset 0x100
	0x120: 0x67, 0x121: 0x68, 0x123: 0x69, 0x124: 0x6a, 0x125: 0x6b, 0x126: 0x6c, 0x127: 0x6d,
	0x128: 0x6e, 0x129: 0x6f, 0x12a: 0x70, 0x12b: 0x71, 0x12c: 0x6c, 0x12d: 0x72, 0x12e: 0x73, 0x12f: 0x74,
	0x131: 0x75, 0x132: 0x76, 0x133: 0x77, 0x134: 0x78, 0x135: 0x79, 0x137: 0x7a,
	0x138: 0x7b, 0x139: 0x7c, 0x13a: 0x7d, 0x13b: 0x7e, 0x13c: 0x7f, 0x13d: 0x80, 0x13e: 0x81, 0x13f: 0x82,
	// Block 0x5, offset 0x140
	0x140: 0x83, 0x142: 0x84, 0x143: 0x85, 0x144: 0x86, 0x145: 0x87, 0x146: 0x88, 0x147: 0x89,
	0x14d: 0x8a,
	0x15c: 0x8b, 0x15f: 0x8c,
	0x162: 0x8d, 0x164: 0x8e,
	0x168: 0x8f, 0x169: 0x90, 0x16a: 0x91, 0x16c: 0x0e, 0x16d: 0x92, 0x16e: 0x93, 0x16f: 0x94,
	0x170: 0x95, 0x173: 0x96, 0x174: 0x97, 0x175: 0x0f, 0x176: 0x10, 0x177: 0x11,
	0x178: 0x12, 0x179: 0x13, 0x17a: 0x14, 0x17b: 0x15, 0x17c: 0x16, 0x17d: 0x17, 0x17e: 0x18, 0x17f: 0x19,
	// Block 0x6, offset 0x180
	0x180: 0x98, 0x181: 0x99, 0x182: 0x9a, 0x183: 0x9b, 0x184: 0x1a, 0x185: 0x1b, 0x186: 0x9c, 0x187: 0x9d,
	0x188: 0x9e, 0x189: 0x1c, 0x18a: 0x1d, 0x18b: 0x9f, 0x18c: 0xa0,
	0x191: 0x1e, 0x192: 0x1f, 0x193: 0xa1,
	0x1a8: 0xa2, 0x1a9: 0xa3, 0x1ab: 0xa4,
	0x1b1: 0xa5, 0x1b3: 0xa6, 0x1b5: 0xa7, 0x1b7: 0xa8,
	0x1ba: 0xa9, 0x1bb: 0xaa, 0x1bc: 0x20, 0x1bd: 0x21, 0x1be: 0x22, 0x1bf: 0xab,
	// Block 0x7, offset 0x1c0
	0x1c0: 0xac, 0x1c1: 0x23, 0x1c2: 0x24, 0x1c3: 0x25, 0x1c4: 0xad, 0x1c5: 0x26, 0x1c6: 0x27,
	0x1c8: 0x28, 0x1c9: 0x29, 0x1ca: 0x2a, 0x1cb: 0x2b, 0x1cc: 0x2c, 0x1cd: 0x2d, 0x1ce: 0x2e, 0x1cf: 0x2f,
	// Block 0x8, offset 0x200
	0x219: 0xae, 0x21a: 0xaf, 0x21b: 0xb0, 0x21d: 0xb1, 0x21f: 0xb2,
	0x220: 0xb3, 0x223: 0xb4, 0x224: 0xb5, 0x225: 0xb6, 0x226: 0xb7, 0x227: 0xb8,
	0x22a: 0xb9, 0x22b: 0xba, 0x22d: 0xbb, 0x22f: 0xbc,
	0x230: 0xbd, 0x231: 0xbe, 0x232: 0xbf, 0x233: 0xc0, 0x234: 0xc1, 0x235: 0xc2, 0x236: 0xc3, 0x237: 0xbd,
	0x238: 0xbe, 0x239: 0xbf, 0x23a: 0xc0, 0x23b: 0xc1, 0x23c: 0xc2, 0x23d: 0xc3, 0x23e: 0xbd, 0x23f: 0xbe,
	// Block 0x9, offset 0x240
	0x240: 0xbf, 0x241: 0xc0, 0x242: 0xc1, 0x243: 0xc2, 0x244: 0xc3, 0x245: 0xbd, 0x246: 0xbe, 0x247: 0xbf,
	0x248: 0xc0, 0x249: 0xc1, 0x24a: 0xc2, 0x24b: 0xc3, 0x24c: 0xbd, 0x24d: 0xbe, 0x24e: 0xbf, 0x24f: 0xc0,
	0x250: 0xc1, 0x251: 0xc2, 0x252: 0xc3, 0x253: 0xbd, 0x254: 0xbe, 0x255: 0xbf, 0x256: 0xc0, 0x257: 0xc1,
	0x258: 0xc2, 0x259: 0xc3, 0x25a: 0xbd, 0x25b: 0xbe, 0x25c: 0xbf, 0x25d: 0xc0, 0x25e: 0xc1, 0x25f: 0xc2,
	0x260: 0xc3, 0x261: 0xbd, 0x262: 0xbe, 0x263: 0xbf, 0x264: 0xc0, 0x265: 0xc1, 0x266: 0xc2, 0x267: 0xc3,
	0x268: 0xbd, 0x269: 0xbe, 0x26a: 0xbf, 0x26b: 0xc0, 0x26c: 0xc1, 0x26d: 0xc2, 0x26e: 0xc3, 0x26f: 0xbd,
	0x270: 0xbe, 0x271: 0xbf, 0x272: 0xc0, 0x273: 0xc1, 0x274: 0xc2, 0x275: 0xc3, 0x276: 0xbd, 0x277: 0xbe,
	0x278: 0xbf, 0x279: 0xc0, 0x27a: 0xc1, 0x27b: 0xc2, 0x27c: 0xc3, 0x27d: 0xbd, 0x27e: 0xbe, 0x27f: 0xbf,
	// Block 0xa, offset 0x280
	0x280: 0xc0, 0x281: 0xc1, 0x282: 0xc2, 0x283: 0xc3, 0x284: 0xbd, 0x285: 0xbe, 0x286: 0xbf, 0x287: 0xc0,
	0x288: 0xc1, 0x289: 0xc2, 0x28a: 0xc3, 0x28b: 0xbd, 0x28c: 0xbe, 0x28d: 0xbf, 0x28e: 0xc0, 0x28f: 0xc1,
	0x290: 0xc2, 0x291: 0xc3, 0x292: 0xbd, 0x293: 0xbe, 0x294: 0xbf, 0x295: 0xc0, 0x296: 0xc1, 0x297: 0xc2,
	0x298: 0xc3, 0x299: 0xbd, 0x29a: 0xbe, 0x29b: 0xbf, 0x29c: 0xc0, 0x29d: 0xc1, 0x29e: 0xc2, 0x29f: 0xc3,
	0x2a0: 0xbd, 0x2a1: 0xbe, 0x2a2: 0xbf, 0x2a3: 0xc0, 0x2a4: 0xc1, 0x2a5: 0xc2, 0x2a6: 0xc3, 0x2a7: 0xbd,
	0x2a8: 0xbe, 0x2a9: 0xbf, 0x2aa: 0xc0, 0x2ab: 0xc1, 0x2ac: 0xc2, 0x2ad: 0xc3, 0x2ae: 0xbd, 0x2af: 0xbe,
	0x2b0: 0xbf, 0x2b1: 0xc0, 0x2b2: 0xc1, 0x2b3: 0xc2, 0x2b4: 0xc3, 0x2b5: 0xbd, 0x2b6: 0xbe, 0x2b7: 0xbf,
	0x2b8: 0xc0, 0x2b9: 0xc1, 0x2ba: 0xc2, 0x2bb: 0xc3, 0x2bc: 0xbd, 0x2bd: 0xbe, 0x2be: 0xbf, 0x2bf: 0xc0,
	// Block 0xb, offset 0x2c0
	0x2c0: 0xc1, 0x2c1: 0xc2, 0x2c2: 0xc3, 0x2c3: 0xbd, 0x2c4: 0xbe, 0x2c5: 0xbf, 0x2c6: 0xc0, 0x2c7: 0xc1,
	0x2c8: 0xc2, 0x2c9: 0xc3, 0x2ca: 0xbd, 0x2cb: 0xbe, 0x2cc: 0xbf, 0x2cd: 0xc0, 0x2ce: 0xc1, 0x2cf: 0xc2,
	0x2d0: 0xc3, 0x2d1: 0xbd, 0x2d2: 0xbe, 0x2d3: 0xbf, 0x2d4: 0xc0, 0x2d5: 0xc1, 0x2d6: 0xc2, 0x2d7: 0xc3,
	0x2d8: 0xbd, 0x2d9: 0xbe, 0x2da: 0xbf, 0x2db: 0xc0, 0x2dc: 0xc1, 0x2dd: 0xc2, 0x2de: 0xc4,
	// Block 0xc, offset 0x300
	0x324: 0x30, 0x325: 0x31, 0x326: 0x32, 0x327: 0x33,
	0x328: 0x34, 0x329: 0x35, 0x32a: 0x36, 0x32b: 0x37, 0x32c: 0x38, 0x32d: 0x39, 0x32e: 0x3a, 0x32f: 0x3b,
	0x330: 0x3c, 0x331: 0x3d, 0x332: 0x3e, 0x333: 0x3f, 0x334: 0x40, 0x335: 0x41, 0x336: 0x42, 0x337: 0x43,
	0x338: 0x44, 0x339: 0x45, 0x33a: 0x46, 0x33b: 0x47, 0x33c: 0xc5, 0x33d: 0x48, 0x33e: 0x49, 0x33f: 0x4a,
	// Block 0xd, offset 0x340
	0x347: 0xc6,
	0x34b: 0xc7, 0x34d: 0xc8,
	0x368: 0xc9, 0x36b: 0xca,
	// Block 0xe, offset 0x380
	0x381: 0xcb, 0x382: 0xcc, 0x384: 0xcd, 0x385: 0xb7, 0x387: 0xce,
	0x388: 0xcf, 0x38b: 0xd0, 0x38c: 0x6c, 0x38d: 0xd1,
	0x391: 0xd2, 0x392: 0xd3, 0x393: 0xd4, 0x396: 0xd5, 0x397: 0xd6,
	0x398: 0xd7, 0x39a: 0xd8, 0x39c: 0xd9,
	0x3a8: 0xda, 0x3a9: 0xdb, 0x3aa: 0xdc,
	0x3b0: 0xd7, 0x3b5: 0xdd,
	// Block 0xf, offset 0x3c0
	0x3eb: 0xde, 0x3ec: 0xdf,
	// Block 0x10, offset 0x400
	0x432: 0xe0,
	// Block 0x11, offset 0x440
	0x445: 0xe1, 0x446: 0xe2, 0x447: 0xe3,
	0x449: 0xe4,
	0x450: 0xe5, 0x451: 0xe6, 0x452: 0xe7, 0x453: 0xe8, 0x454: 0xe9, 0x455: 0xea, 0x456: 0xeb, 0x457: 0xec,
	0x458: 0xed, 0x459: 0xee, 0x45a: 0x4b, 0x45b: 0xef, 0x45c: 0xf0, 0x45d: 0xf1, 0x45e: 0xf2, 0x45f: 0x4c,
	// Block 0x12, offset 0x480
	0x480: 0xf3,
	0x4a3: 0xf4, 0x4a5: 0xf5,
	0x4b8: 0x4d, 0x4b9: 0x4e, 0x4ba: 0x4f,
	// Block 0x13, offset 0x4c0
	0x4c4: 0x50, 0x4c5: 0xf6, 0x4c6: 0xf7,
	0x4c8: 0x51, 0x4c9: 0xf8,
	// Block 0x14, offset 0x500
	0x520: 0x52, 0x521: 0x53, 0x522: 0x54, 0x523: 0x55, 0x524: 0x56, 0x525: 0x57, 0x526: 0x58, 0x527: 0x59,
	0x528: 0x5a,
	// Block 0x15, offset 0x540
	0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d,
	0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11,
	0x56f: 0x12,
}

// nfkcSparseOffset: 158 entries, 316 bytes
var nfkcSparseOffset = []uint16{0x0, 0xe, 0x12, 0x1b, 0x25, 0x35, 0x37, 0x3c, 0x47, 0x56, 0x63, 0x6b, 0x6f, 0x74, 0x76, 0x87, 0x8f, 0x96, 0x99, 0xa0, 0xa4, 0xa8, 0xaa, 0xac, 0xb5, 0xb9, 0xc0, 0xc5, 0xc8, 0xd2, 0xd5, 0xdc, 0xe4, 0xe8, 0xea, 0xed, 0xf1, 0xf7, 0x108, 0x114, 0x116, 0x11c, 0x11e, 0x120, 0x122, 0x124, 0x126, 0x128, 0x12a, 0x12d, 0x130, 0x132, 0x135, 0x138, 0x13c, 0x141, 0x14a, 0x14c, 0x14f, 0x151, 0x15c, 0x167, 0x175, 0x183, 0x193, 0x1a1, 0x1a8, 0x1ae, 0x1bd, 0x1c1, 0x1c3, 0x1c7, 0x1c9, 0x1cc, 0x1ce, 0x1d1, 0x1d3, 0x1d6, 0x1d8, 0x1da, 0x1dc, 0x1e8, 0x1f2, 0x1fc, 0x1ff, 0x203, 0x205, 0x207, 0x209, 0x20b, 0x20e, 0x210, 0x212, 0x214, 0x216, 0x21c, 0x21f, 0x223, 0x225, 0x22c, 0x232, 0x238, 0x240, 0x246, 0x24c, 0x252, 0x256, 0x258, 0x25a, 0x25c, 0x25e, 0x264, 0x267, 0x26a, 0x272, 0x279, 0x27c, 0x27f, 0x281, 0x289, 0x28c, 0x293, 0x296, 0x29c, 0x29e, 0x2a0, 0x2a3, 0x2a5, 0x2a7, 0x2a9, 0x2ab, 0x2ae, 0x2b0, 0x2b2, 0x2b4, 0x2c1, 0x2cb, 0x2cd, 0x2cf, 0x2d3, 0x2d8, 0x2e4, 0x2e9, 0x2f2, 0x2f8, 0x2fd, 0x301, 0x306, 0x30a, 0x31a, 0x328, 0x336, 0x344, 0x34a, 0x34c, 0x34f, 0x359, 0x35b}

// nfkcSparseValues: 869 entries, 3476 bytes
var nfkcSparseValues = [869]valueRange{
	// Block 0x0, offset 0x0
	{value: 0x0002, lo: 0x0d},
	{value: 0x0001, lo: 0xa0, hi: 0xa0},
	{value: 0x4278, lo: 0xa8, hi: 0xa8},
	{value: 0x0083, lo: 0xaa, hi: 0xaa},
	{value: 0x4264, lo: 0xaf, hi: 0xaf},
	{value: 0x0025, lo: 0xb2, hi: 0xb3},
	{value: 0x425a, lo: 0xb4, hi: 0xb4},
	{value: 0x01dc, lo: 0xb5, hi: 0xb5},
	{value: 0x4291, lo: 0xb8, hi: 0xb8},
	{value: 0x0023, lo: 0xb9, hi: 0xb9},
	{value: 0x009f, lo: 0xba, hi: 0xba},
	{value: 0x221c, lo: 0xbc, hi: 0xbc},
	{value: 0x2210, lo: 0xbd, hi: 0xbd},
	{value: 0x22b2, lo: 0xbe, hi: 0xbe},
	// Block 0x1, offset 0xe
	{value: 0x0091, lo: 0x03},
	{value: 0x46e2, lo: 0xa0, hi: 0xa1},
	{value: 0x4714, lo: 0xaf, hi: 0xb0},
	{value: 0xa000, lo: 0xb7, hi: 0xb7},
	// Block 0x2, offset 0x12
	{value: 0x0003, lo: 0x08},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x0091, lo: 0xb0, hi: 0xb0},
	{value: 0x0119, lo: 0xb1, hi: 0xb1},
	{value: 0x0095, lo: 0xb2, hi: 0xb2},
	{value: 0x00a5, lo: 0xb3, hi: 0xb3},
	{value: 0x0143, lo: 0xb4, hi: 0xb6},
	{value: 0x00af, lo: 0xb7, hi: 0xb7},
	{value: 0x00b3, lo: 0xb8, hi: 0xb8},
	// Block 0x3, offset 0x1b
	{value: 0x000a, lo: 0x09},
	{value: 0x426e, lo: 0x98, hi: 0x98},
	{value: 0x4273, lo: 0x99, hi: 0x9a},
	{value: 0x4296, lo: 0x9b, hi: 0x9b},
	{value: 0x425f, lo: 0x9c, hi: 0x9c},
	{value: 0x4282, lo: 0x9d, hi: 0x9d},
	{value: 0x0113, lo: 0xa0, hi: 0xa0},
	{value: 0x0099, lo: 0xa1, hi: 0xa1},
	{value: 0x00a7, lo: 0xa2, hi: 0xa3},
	{value: 0x0167, lo: 0xa4, hi: 0xa4},
	// Block 0x4, offset 0x25
	{value: 0x0000, lo: 0x0f},
	{value: 0xa000, lo: 0x83, hi: 0x83},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0xa000, lo: 0x8b, hi: 0x8b},
	{value: 0xa000, lo: 0x8d, hi: 0x8d},
	{value: 0x37a5, lo: 0x90, hi: 0x90},
	{value: 0x37b1, lo: 0x91, hi: 0x91},
	{value: 0x379f, lo: 0x93, hi: 0x93},
	{value: 0xa000, lo: 0x96, hi: 0x96},
	{value: 0x3817, lo: 0x97, hi: 0x97},
	{value: 0x37e1, lo: 0x9c, hi: 0x9c},
	{value: 0x37c9, lo: 0x9d, hi: 0x9d},
	{value: 0x37f3, lo: 0x9e, hi: 0x9e},
	{value: 0xa000, lo: 0xb4, hi: 0xb5},
	{value: 0x381d, lo: 0xb6, hi: 0xb6},
	{value: 0x3823, lo: 0xb7, hi: 0xb7},
	// Block 0x5, offset 0x35
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x83, hi: 0x87},
	// Block 0x6, offset 0x37
	{value: 0x0001, lo: 0x04},
	{value: 0x8113, lo: 0x81, hi: 0x82},
	{value: 0x8132, lo: 0x84, hi: 0x84},
	{value: 0x812d, lo: 0x85, hi: 0x85},
	{value: 0x810d, lo: 0x87, hi: 0x87},
	// Block 0x7, offset 0x3c
	{value: 0x0000, lo: 0x0a},
	{value: 0x8132, lo: 0x90, hi: 0x97},
	{value: 0x8119, lo: 0x98, hi: 0x98},
	{value: 0x811a, lo: 0x99, hi: 0x99},
	{value: 0x811b, lo: 0x9a, hi: 0x9a},
	{value: 0x3841, lo: 0xa2, hi: 0xa2},
	{value: 0x3847, lo: 0xa3, hi: 0xa3},
	{value: 0x3853, lo: 0xa4, hi: 0xa4},
	{value: 0x384d, lo: 0xa5, hi: 0xa5},
	{value: 0x3859, lo: 0xa6, hi: 0xa6},
	{value: 0xa000, lo: 0xa7, hi: 0xa7},
	// Block 0x8, offset 0x47
	{value: 0x0000, lo: 0x0e},
	{value: 0x386b, lo: 0x80, hi: 0x80},
	{value: 0xa000, lo: 0x81, hi: 0x81},
	{value: 0x385f, lo: 0x82, hi: 0x82},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x3865, lo: 0x93, hi: 0x93},
	{value: 0xa000, lo: 0x95, hi: 0x95},
	{value: 0x8132, lo: 0x96, hi: 0x9c},
	{value: 0x8132, lo: 0x9f, hi: 0xa2},
	{value: 0x812d, lo: 0xa3, hi: 0xa3},
	{value: 0x8132, lo: 0xa4, hi: 0xa4},
	{value: 0x8132, lo: 0xa7, hi: 0xa8},
	{value: 0x812d, lo: 0xaa, hi: 0xaa},
	{value: 0x8132, lo: 0xab, hi: 0xac},
	{value: 0x812d, lo: 0xad, hi: 0xad},
	// Block 0x9, offset 0x56
	{value: 0x0000, lo: 0x0c},
	{value: 0x811f, lo: 0x91, hi: 0x91},
	{value: 0x8132, lo: 0xb0, hi: 0xb0},
	{value: 0x812d, lo: 0xb1, hi: 0xb1},
	{value: 0x8132, lo: 0xb2, hi: 0xb3},
	{value: 0x812d, lo: 0xb4, hi: 0xb4},
	{value: 0x8132, lo: 0xb5, hi: 0xb6},
	{value: 0x812d, lo: 0xb7, hi: 0xb9},
	{value: 0x8132, lo: 0xba, hi: 0xba},
	{value: 0x812d, lo: 0xbb, hi: 0xbc},
	{value: 0x8132, lo: 0xbd, hi: 0xbd},
	{value: 0x812d, lo: 0xbe, hi: 0xbe},
	{value: 0x8132, lo: 0xbf, hi: 0xbf},
	// Block 0xa, offset 0x63
	{value: 0x0005, lo: 0x07},
	{value: 0x8132, lo: 0x80, hi: 0x80},
	{value: 0x8132, lo: 0x81, hi: 0x81},
	{value: 0x812d, lo: 0x82, hi: 0x83},
	{value: 0x812d, lo: 0x84, hi: 0x85},
	{value: 0x812d, lo: 0x86, hi: 0x87},
	{value: 0x812d, lo: 0x88, hi: 0x89},
	{value: 0x8132, lo: 0x8a, hi: 0x8a},
	// Block 0xb, offset 0x6b
	{value: 0x0000, lo: 0x03},
	{value: 0x8132, lo: 0xab, hi: 0xb1},
	{value: 0x812d, lo: 0xb2, hi: 0xb2},
	{value: 0x8132, lo: 0xb3, hi: 0xb3},
	// Block 0xc, offset 0x6f
	{value: 0x0000, lo: 0x04},
	{value: 0x8132, lo: 0x96, hi: 0x99},
	{value: 0x8132, lo: 0x9b, hi: 0xa3},
	{value: 0x8132, lo: 0xa5, hi: 0xa7},
	{value: 0x8132, lo: 0xa9, hi: 0xad},
	// Block 0xd, offset 0x74
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x99, hi: 0x9b},
	// Block 0xe, offset 0x76
	{value: 0x0000, lo: 0x10},
	{value: 0x8132, lo: 0x94, hi: 0xa1},
	{value: 0x812d, lo: 0xa3, hi: 0xa3},
	{value: 0x8132, lo: 0xa4, hi: 0xa5},
	{value: 0x812d, lo: 0xa6, hi: 0xa6},
	{value: 0x8132, lo: 0xa7, hi: 0xa8},
	{value: 0x812d, lo: 0xa9, hi: 0xa9},
	{value: 0x8132, lo: 0xaa, hi: 0xac},
	{value: 0x812d, lo: 0xad, hi: 0xaf},
	{value: 0x8116, lo: 0xb0, hi: 0xb0},
	{value: 0x8117, lo: 0xb1, hi: 0xb1},
	{value: 0x8118, lo: 0xb2, hi: 0xb2},
	{value: 0x8132, lo: 0xb3, hi: 0xb5},
	{value: 0x812d, lo: 0xb6, hi: 0xb6},
	{value: 0x8132, lo: 0xb7, hi: 0xb8},
	{value: 0x812d, lo: 0xb9, hi: 0xba},
	{value: 0x8132, lo: 0xbb, hi: 0xbf},
	// Block 0xf, offset 0x87
	{value: 0x0000, lo: 0x07},
	{value: 0xa000, lo: 0xa8, hi: 0xa8},
	{value: 0x3ed8, lo: 0xa9, hi: 0xa9},
	{value: 0xa000, lo: 0xb0, hi: 0xb0},
	{value: 0x3ee0, lo: 0xb1, hi: 0xb1},
	{value: 0xa000, lo: 0xb3, hi: 0xb3},
	{value: 0x3ee8, lo: 0xb4, hi: 0xb4},
	{value: 0x9902, lo: 0xbc, hi: 0xbc},
	// Block 0x10, offset 0x8f
	{value: 0x0008, lo: 0x06},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x8132, lo: 0x91, hi: 0x91},
	{value: 0x812d, lo: 0x92, hi: 0x92},
	{value: 0x8132, lo: 0x93, hi: 0x93},
	{value: 0x8132, lo: 0x94, hi: 0x94},
	{value: 0x451c, lo: 0x98, hi: 0x9f},
	// Block 0x11, offset 0x96
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x12, offset 0x99
	{value: 0x0008, lo: 0x06},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2c9e, lo: 0x8b, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	{value: 0x455c, lo: 0x9c, hi: 0x9d},
	{value: 0x456c, lo: 0x9f, hi: 0x9f},
	// Block 0x13, offset 0xa0
	{value: 0x0000, lo: 0x03},
	{value: 0x4594, lo: 0xb3, hi: 0xb3},
	{value: 0x459c, lo: 0xb6, hi: 0xb6},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	// Block 0x14, offset 0xa4
	{value: 0x0008, lo: 0x03},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x4574, lo: 0x99, hi: 0x9b},
	{value: 0x458c, lo: 0x9e, hi: 0x9e},
	// Block 0x15, offset 0xa8
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	// Block 0x16, offset 0xaa
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	// Block 0x17, offset 0xac
	{value: 0x0000, lo: 0x08},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2cb6, lo: 0x88, hi: 0x88},
	{value: 0x2cae, lo: 0x8b, hi: 0x8b},
	{value: 0x2cbe, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x96, hi: 0x97},
	{value: 0x45a4, lo: 0x9c, hi: 0x9c},
	{value: 0x45ac, lo: 0x9d, hi: 0x9d},
	// Block 0x18, offset 0xb5
	{value: 0x0000, lo: 0x03},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x2cc6, lo: 0x94, hi: 0x94},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x19, offset 0xb9
	{value: 0x0000, lo: 0x06},
	{value: 0xa000, lo: 0x86, hi: 0x87},
	{value: 0x2cce, lo: 0x8a, hi: 0x8a},
	{value: 0x2cde, lo: 0x8b, hi: 0x8b},
	{value: 0x2cd6, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	// Block 0x1a, offset 0xc0
	{value: 0x1801, lo: 0x04},
	{value: 0xa000, lo: 0x86, hi: 0x86},
	{value: 0x3ef0, lo: 0x88, hi: 0x88},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x8120, lo: 0x95, hi: 0x96},
	// Block 0x1b, offset 0xc5
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	{value: 0xa000, lo: 0xbf, hi: 0xbf},
	// Block 0x1c, offset 0xc8
	{value: 0x0000, lo: 0x09},
	{value: 0x2ce6, lo: 0x80, hi: 0x80},
	{value: 0x9900, lo: 0x82, hi: 0x82},
	{value: 0xa000, lo: 0x86, hi: 0x86},
	{value: 0x2cee, lo: 0x87, hi: 0x87},
	{value: 0x2cf6, lo: 0x88, hi: 0x88},
	{value: 0x2f50, lo: 0x8a, hi: 0x8a},
	{value: 0x2dd8, lo: 0x8b, hi: 0x8b},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x95, hi: 0x96},
	// Block 0x1d, offset 0xd2
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0xbb, hi: 0xbc},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x1e, offset 0xd5
	{value: 0x0000, lo: 0x06},
	{value: 0xa000, lo: 0x86, hi: 0x87},
	{value: 0x2cfe, lo: 0x8a, hi: 0x8a},
	{value: 0x2d0e, lo: 0x8b, hi: 0x8b},
	{value: 0x2d06, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	// Block 0x1f, offset 0xdc
	{value: 0x6bea, lo: 0x07},
	{value: 0x9904, lo: 0x8a, hi: 0x8a},
	{value: 0x9900, lo: 0x8f, hi: 0x8f},
	{value: 0xa000, lo: 0x99, hi: 0x99},
	{value: 0x3ef8, lo: 0x9a, hi: 0x9a},
	{value: 0x2f58, lo: 0x9c, hi: 0x9c},
	{value: 0x2de3, lo: 0x9d, hi: 0x9d},
	{value: 0x2d16, lo: 0x9e, hi: 0x9f},
	// Block 0x20, offset 0xe4
	{value: 0x0000, lo: 0x03},
	{value: 0x2621, lo: 0xb3, hi: 0xb3},
	{value: 0x8122, lo: 0xb8, hi: 0xb9},
	{value: 0x8104, lo: 0xba, hi: 0xba},
	// Block 0x21, offset 0xe8
	{value: 0x0000, lo: 0x01},
	{value: 0x8123, lo: 0x88, hi: 0x8b},
	// Block 0x22, offset 0xea
	{value: 0x0000, lo: 0x02},
	{value: 0x2636, lo: 0xb3, hi: 0xb3},
	{value: 0x8124, lo: 0xb8, hi: 0xb9},
	// Block 0x23, offset 0xed
	{value: 0x0000, lo: 0x03},
	{value: 0x8125, lo: 0x88, hi: 0x8b},
	{value: 0x2628, lo: 0x9c, hi: 0x9c},
	{value: 0x262f, lo: 0x9d, hi: 0x9d},
	// Block 0x24, offset 0xf1
	{value: 0x0000, lo: 0x05},
	{value: 0x030b, lo: 0x8c, hi: 0x8c},
	{value: 0x812d, lo: 0x98, hi: 0x99},
	{value: 0x812d, lo: 0xb5, hi: 0xb5},
	{value: 0x812d, lo: 0xb7, hi: 0xb7},
	{value: 0x812b, lo: 0xb9, hi: 0xb9},
	// Block 0x25, offset 0xf7
	{value: 0x0000, lo: 0x10},
	{value: 0x2644, lo: 0x83, hi: 0x83},
	{value: 0x264b, lo: 0x8d, hi: 0x8d},
	{value: 0x2652, lo: 0x92, hi: 0x92},
	{value: 0x2659, lo: 0x97, hi: 0x97},
	{value: 0x2660, lo: 0x9c, hi: 0x9c},
	{value: 0x263d, lo: 0xa9, hi: 0xa9},
	{value: 0x8126, lo: 0xb1, hi: 0xb1},
	{value: 0x8127, lo: 0xb2, hi: 0xb2},
	{value: 0x4a84, lo: 0xb3, hi: 0xb3},
	{value: 0x8128, lo: 0xb4, hi: 0xb4},
	{value: 0x4a8d, lo: 0xb5, hi: 0xb5},
	{value: 0x45b4, lo: 0xb6, hi: 0xb6},
	{value: 0x45f4, lo: 0xb7, hi: 0xb7},
	{value: 0x45bc, lo: 0xb8, hi: 0xb8},
	{value: 0x45ff, lo: 0xb9, hi: 0xb9},
	{value: 0x8127, lo: 0xba, hi: 0xbd},
	// Block 0x26, offset 0x108
	{value: 0x0000, lo: 0x0b},
	{value: 0x8127, lo: 0x80, hi: 0x80},
	{value: 0x4a96, lo: 0x81, hi: 0x81},
	{value: 0x8132, lo: 0x82, hi: 0x83},
	{value: 0x8104, lo: 0x84, hi: 0x84},
	{value: 0x8132, lo: 0x86, hi: 0x87},
	{value: 0x266e, lo: 0x93, hi: 0x93},
	{value: 0x2675, lo: 0x9d, hi: 0x9d},
	{value: 0x267c, lo: 0xa2, hi: 0xa2},
	{value: 0x2683, lo: 0xa7, hi: 0xa7},
	{value: 0x268a, lo: 0xac, hi: 0xac},
	{value: 0x2667, lo: 0xb9, hi: 0xb9},
	// Block 0x27, offset 0x114
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x86, hi: 0x86},
	// Block 0x28, offset 0x116
	{value: 0x0000, lo: 0x05},
	{value: 0xa000, lo: 0xa5, hi: 0xa5},
	{value: 0x2d1e, lo: 0xa6, hi: 0xa6},
	{value: 0x9900, lo: 0xae, hi: 0xae},
	{value: 0x8102, lo: 0xb7, hi: 0xb7},
	{value: 0x8104, lo: 0xb9, hi: 0xba},
	// Block 0x29, offset 0x11c
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x8d, hi: 0x8d},
	// Block 0x2a, offset 0x11e
	{value: 0x0000, lo: 0x01},
	{value: 0x030f, lo: 0xbc, hi: 0xbc},
	// Block 0x2b, offset 0x120
	{value: 0x0000, lo: 0x01},
	{value: 0xa000, lo: 0x80, hi: 0x92},
	// Block 0x2c, offset 0x122
	{value: 0x0000, lo: 0x01},
	{value: 0xb900, lo: 0xa1, hi: 0xb5},
	// Block 0x2d, offset 0x124
	{value: 0x0000, lo: 0x01},
	{value: 0x9900, lo: 0xa8, hi: 0xbf},
	// Block 0x2e, offset 0x126
	{value: 0x0000, lo: 0x01},
	{value: 0x9900, lo: 0x80, hi: 0x82},
	// Block 0x2f, offset 0x128
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x9d, hi: 0x9f},
	// Block 0x30, offset 0x12a
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x94, hi: 0x94},
	{value: 0x8104, lo: 0xb4, hi: 0xb4},
	// Block 0x31, offset 0x12d
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x92, hi: 0x92},
	{value: 0x8132, lo: 0x9d, hi: 0x9d},
	// Block 0x32, offset 0x130
	{value: 0x0000, lo: 0x01},
	{value: 0x8131, lo: 0xa9, hi: 0xa9},
	// Block 0x33, offset 0x132
	{value: 0x0004, lo: 0x02},
	{value: 0x812e, lo: 0xb9, hi: 0xba},
	{value: 0x812d, lo: 0xbb, hi: 0xbb},
	// Block 0x34, offset 0x135
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0x97, hi: 0x97},
	{value: 0x812d, lo: 0x98, hi: 0x98},
	// Block 0x35, offset 0x138
	{value: 0x0000, lo: 0x03},
	{value: 0x8104, lo: 0xa0, hi: 0xa0},
	{value: 0x8132, lo: 0xb5, hi: 0xbc},
	{value: 0x812d, lo: 0xbf, hi: 0xbf},
	// Block 0x36, offset 0x13c
	{value: 0x0000, lo: 0x04},
	{value: 0x8132, lo: 0xb0, hi: 0xb4},
	{value: 0x812d, lo: 0xb5, hi: 0xba},
	{value: 0x8132, lo: 0xbb, hi: 0xbc},
	{value: 0x812d, lo: 0xbd, hi: 0xbd},
	// Block 0x37, offset 0x141
	{value: 0x0000, lo: 0x08},
	{value: 0x2d66, lo: 0x80, hi: 0x80},
	{value: 0x2d6e, lo: 0x81, hi: 0x81},
	{value: 0xa000, lo: 0x82, hi: 0x82},
	{value: 0x2d76, lo: 0x83, hi: 0x83},
	{value: 0x8104, lo: 0x84, hi: 0x84},
	{value: 0x8132, lo: 0xab, hi: 0xab},
	{value: 0x812d, lo: 0xac, hi: 0xac},
	{value: 0x8132, lo: 0xad, hi: 0xb3},
	// Block 0x38, offset 0x14a
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xaa, hi: 0xab},
	// Block 0x39, offset 0x14c
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xa6, hi: 0xa6},
	{value: 0x8104, lo: 0xb2, hi: 0xb3},
	// Block 0x3a, offset 0x14f
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0xb7, hi: 0xb7},
	// Block 0x3b, offset 0x151
	{value: 0x0000, lo: 0x0a},
	{value: 0x8132, lo: 0x90, hi: 0x92},
	{value: 0x8101, lo: 0x94, hi: 0x94},
	{value: 0x812d, lo: 0x95, hi: 0x99},
	{value: 0x8132, lo: 0x9a, hi: 0x9b},
	{value: 0x812d, lo: 0x9c, hi: 0x9f},
	{value: 0x8132, lo: 0xa0, hi: 0xa0},
	{value: 0x8101, lo: 0xa2, hi: 0xa8},
	{value: 0x812d, lo: 0xad, hi: 0xad},
	{value: 0x8132, lo: 0xb4, hi: 0xb4},
	{value: 0x8132, lo: 0xb8, hi: 0xb9},
	// Block 0x3c, offset 0x15c
	{value: 0x0002, lo: 0x0a},
	{value: 0x0043, lo: 0xac, hi: 0xac},
	{value: 0x00d1, lo: 0xad, hi: 0xad},
	{value: 0x0045, lo: 0xae, hi: 0xae},
	{value: 0x0049, lo: 0xb0, hi: 0xb1},
	{value: 0x00e6, lo: 0xb2, hi: 0xb2},
	{value: 0x004f, lo: 0xb3, hi: 0xba},
	{value: 0x005f, lo: 0xbc, hi: 0xbc},
	{value: 0x00ef, lo: 0xbd, hi: 0xbd},
	{value: 0x0061, lo: 0xbe, hi: 0xbe},
	{value: 0x0065, lo: 0xbf, hi: 0xbf},
	// Block 0x3d, offset 0x167
	{value: 0x0000, lo: 0x0d},
	{value: 0x0001, lo: 0x80, hi: 0x8a},
	{value: 0x043b, lo: 0x91, hi: 0x91},
	{value: 0x429b, lo: 0x97, hi: 0x97},
	{value: 0x001d, lo: 0xa4, hi: 0xa4},
	{value: 0x1873, lo: 0xa5, hi: 0xa5},
	{value: 0x1b5c, lo: 0xa6, hi: 0xa6},
	{value: 0x0001, lo: 0xaf, hi: 0xaf},
	{value: 0x2691, lo: 0xb3, hi: 0xb3},
	{value: 0x27fe, lo: 0xb4, hi: 0xb4},
	{value: 0x2698, lo: 0xb6, hi: 0xb6},
	{value: 0x2808, lo: 0xb7, hi: 0xb7},
	{value: 0x186d, lo: 0xbc, hi: 0xbc},
	{value: 0x4269, lo: 0xbe, hi: 0xbe},
	// Block 0x3e, offset 0x175
	{value: 0x0002, lo: 0x0d},
	{value: 0x1933, lo: 0x87, hi: 0x87},
	{value: 0x1930, lo: 0x88, hi: 0x88},
	{value: 0x1870, lo: 0x89, hi: 0x89},
	{value: 0x298e, lo: 0x97, hi: 0x97},
	{value: 0x0001, lo: 0x9f, hi: 0x9f},
	{value: 0x0021, lo: 0xb0, hi: 0xb0},
	{value: 0x0093, lo: 0xb1, hi: 0xb1},
	{value: 0x0029, lo: 0xb4, hi: 0xb9},
	{value: 0x0017, lo: 0xba, hi: 0xba},
	{value: 0x0467, lo: 0xbb, hi: 0xbb},
	{value: 0x003b, lo: 0xbc, hi: 0xbc},
	{value: 0x0011, lo: 0xbd, hi: 0xbe},
	{value: 0x009d, lo: 0xbf, hi: 0xbf},
	// Block 0x3f, offset 0x183
	{value: 0x0002, lo: 0x0f},
	{value: 0x0021, lo: 0x80, hi: 0x89},
	{value: 0x0017, lo: 0x8a, hi: 0x8a},
	{value: 0x0467, lo: 0x8b, hi: 0x8b},
	{value: 0x003b, lo: 0x8c, hi: 0x8c},
	{value: 0x0011, lo: 0x8d, hi: 0x8e},
	{value: 0x0083, lo: 0x90, hi: 0x90},
	{value: 0x008b, lo: 0x91, hi: 0x91},
	{value: 0x009f, lo: 0x92, hi: 0x92},
	{value: 0x00b1, lo: 0x93, hi: 0x93},
	{value: 0x0104, lo: 0x94, hi: 0x94},
	{value: 0x0091, lo: 0x95, hi: 0x95},
	{value: 0x0097, lo: 0x96, hi: 0x99},
	{value: 0x00a1, lo: 0x9a, hi: 0x9a},
	{value: 0x00a7, lo: 0x9b, hi: 0x9c},
	{value: 0x1999, lo: 0xa8, hi: 0xa8},
	// Block 0x40, offset 0x193
	{value: 0x0000, lo: 0x0d},
	{value: 0x8132, lo: 0x90, hi: 0x91},
	{value: 0x8101, lo: 0x92, hi: 0x93},
	{value: 0x8132, lo: 0x94, hi: 0x97},
	{value: 0x8101, lo: 0x98, hi: 0x9a},
	{value: 0x8132, lo: 0x9b, hi: 0x9c},
	{value: 0x8132, lo: 0xa1, hi: 0xa1},
	{value: 0x8101, lo: 0xa5, hi: 0xa6},
	{value: 0x8132, lo: 0xa7, hi: 0xa7},
	{value: 0x812d, lo: 0xa8, hi: 0xa8},
	{value: 0x8132, lo: 0xa9, hi: 0xa9},
	{value: 0x8101, lo: 0xaa, hi: 0xab},
	{value: 0x812d, lo: 0xac, hi: 0xaf},
	{value: 0x8132, lo: 0xb0, hi: 0xb0},
	// Block 0x41, offset 0x1a1
	{value: 0x0007, lo: 0x06},
	{value: 0x2180, lo: 0x89, hi: 0x89},
	{value: 0xa000, lo: 0x90, hi: 0x90},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0xa000, lo: 0x94, hi: 0x94},
	{value: 0x3bb9, lo: 0x9a, hi: 0x9b},
	{value: 0x3bc7, lo: 0xae, hi: 0xae},
	// Block 0x42, offset 0x1a8
	{value: 0x000e, lo: 0x05},
	{value: 0x3bce, lo: 0x8d, hi: 0x8e},
	{value: 0x3bd5, lo: 0x8f, hi: 0x8f},
	{value: 0xa000, lo: 0x90, hi: 0x90},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0xa000, lo: 0x94, hi: 0x94},
	// Block 0x43, offset 0x1ae
	{value: 0x0173, lo: 0x0e},
	{value: 0xa000, lo: 0x83, hi: 0x83},
	{value: 0x3be3, lo: 0x84, hi: 0x84},
	{value: 0xa000, lo: 0x88, hi: 0x88},
	{value: 0x3bea, lo: 0x89, hi: 0x89},
	{value: 0xa000, lo: 0x8b, hi: 0x8b},
	{value: 0x3bf1, lo: 0x8c, hi: 0x8c},
	{value: 0xa000, lo: 0xa3, hi: 0xa3},
	{value: 0x3bf8, lo: 0xa4, hi: 0xa4},
	{value: 0xa000, lo: 0xa5, hi: 0xa5},
	{value: 0x3bff, lo: 0xa6, hi: 0xa6},
	{value: 0x269f, lo: 0xac, hi: 0xad},
	{value: 0x26a6, lo: 0xaf, hi: 0xaf},
	{value: 0x281c, lo: 0xb0, hi: 0xb0},
	{value: 0xa000, lo: 0xbc, hi: 0xbc},
	// Block 0x44, offset 0x1bd
	{value: 0x0007, lo: 0x03},
	{value: 0x3c68, lo: 0xa0, hi: 0xa1},
	{value: 0x3c92, lo: 0xa2, hi: 0xa3},
	{value: 0x3cbc, lo: 0xaa, hi: 0xad},
	// Block 0x45, offset 0x1c1
	{value: 0x0004, lo: 0x01},
	{value: 0x048b, lo: 0xa9, hi: 0xaa},
	// Block 0x46, offset 0x1c3
	{value: 0x0002, lo: 0x03},
	{value: 0x0057, lo: 0x80, hi: 0x8f},
	{value: 0x0083, lo: 0x90, hi: 0xa9},
	{value: 0x0021, lo: 0xaa, hi: 0xaa},
	// Block 0x47, offset 0x1c7
	{value: 0x0000, lo: 0x01},
	{value: 0x299b, lo: 0x8c, hi: 0x8c},
	// Block 0x48, offset 0x1c9
	{value: 0x0263, lo: 0x02},
	{value: 0x1b8c, lo: 0xb4, hi: 0xb4},
	{value: 0x192d, lo: 0xb5, hi: 0xb6},
	// Block 0x49, offset 0x1cc
	{value: 0x0000, lo: 0x01},
	{value: 0x44dd, lo: 0x9c, hi: 0x9c},
	// Block 0x4a, offset 0x1ce
	{value: 0x0000, lo: 0x02},
	{value: 0x0095, lo: 0xbc, hi: 0xbc},
	{value: 0x006d, lo: 0xbd, hi: 0xbd},
	// Block 0x4b, offset 0x1d1
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xaf, hi: 0xb1},
	// Block 0x4c, offset 0x1d3
	{value: 0x0000, lo: 0x02},
	{value: 0x047f, lo: 0xaf, hi: 0xaf},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x4d, offset 0x1d6
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xa0, hi: 0xbf},
	// Block 0x4e, offset 0x1d8
	{value: 0x0000, lo: 0x01},
	{value: 0x0dc3, lo: 0x9f, hi: 0x9f},
	// Block 0x4f, offset 0x1da
	{value: 0x0000, lo: 0x01},
	{value: 0x162f, lo: 0xb3, hi: 0xb3},
	// Block 0x50, offset 0x1dc
	{value: 0x0004, lo: 0x0b},
	{value: 0x1597, lo: 0x80, hi: 0x82},
	{value: 0x15af, lo: 0x83, hi: 0x83},
	{value: 0x15c7, lo: 0x84, hi: 0x85},
	{value: 0x15d7, lo: 0x86, hi: 0x89},
	{value: 0x15eb, lo: 0x8a, hi: 0x8c},
	{value: 0x15ff, lo: 0x8d, hi: 0x8d},
	{value: 0x1607, lo: 0x8e, hi: 0x8e},
	{value: 0x160f, lo: 0x8f, hi: 0x90},
	{value: 0x161b, lo: 0x91, hi: 0x93},
	{value: 0x162b, lo: 0x94, hi: 0x94},
	{value: 0x1633, lo: 0x95, hi: 0x95},
	// Block 0x51, offset 0x1e8
	{value: 0x0004, lo: 0x09},
	{value: 0x0001, lo: 0x80, hi: 0x80},
	{value: 0x812c, lo: 0xaa, hi: 0xaa},
	{value: 0x8131, lo: 0xab, hi: 0xab},
	{value: 0x8133, lo: 0xac, hi: 0xac},
	{value: 0x812e, lo: 0xad, hi: 0xad},
	{value: 0x812f, lo: 0xae, hi: 0xae},
	{value: 0x812f, lo: 0xaf, hi: 0xaf},
	{value: 0x04b3, lo: 0xb6, hi: 0xb6},
	{value: 0x0887, lo: 0xb8, hi: 0xba},
	// Block 0x52, offset 0x1f2
	{value: 0x0006, lo: 0x09},
	{value: 0x0313, lo: 0xb1, hi: 0xb1},
	{value: 0x0317, lo: 0xb2, hi: 0xb2},
	{value: 0x4a3b, lo: 0xb3, hi: 0xb3},
	{value: 0x031b, lo: 0xb4, hi: 0xb4},
	{value: 0x4a41, lo: 0xb5, hi: 0xb6},
	{value: 0x031f, lo: 0xb7, hi: 0xb7},
	{value: 0x0323, lo: 0xb8, hi: 0xb8},
	{value: 0x0327, lo: 0xb9, hi: 0xb9},
	{value: 0x4a4d, lo: 0xba, hi: 0xbf},
	// Block 0x53, offset 0x1fc
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0xaf, hi: 0xaf},
	{value: 0x8132, lo: 0xb4, hi: 0xbd},
	// Block 0x54, offset 0x1ff
	{value: 0x0000, lo: 0x03},
	{value: 0x020f, lo: 0x9c, hi: 0x9c},
	{value: 0x0212, lo: 0x9d, hi: 0x9d},
	{value: 0x8132, lo: 0x9e, hi: 0x9f},
	// Block 0x55, offset 0x203
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xb0, hi: 0xb1},
	// Block 0x56, offset 0x205
	{value: 0x0000, lo: 0x01},
	{value: 0x163b, lo: 0xb0, hi: 0xb0},
	// Block 0x57, offset 0x207
	{value: 0x000c, lo: 0x01},
	{value: 0x00d7, lo: 0xb8, hi: 0xb9},
	// Block 0x58, offset 0x209
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x86, hi: 0x86},
	// Block 0x59, offset 0x20b
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x84, hi: 0x84},
	{value: 0x8132, lo: 0xa0, hi: 0xb1},
	// Block 0x5a, offset 0x20e
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0xab, hi: 0xad},
	// Block 0x5b, offset 0x210
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x93, hi: 0x93},
	// Block 0x5c, offset 0x212
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0xb3, hi: 0xb3},
	// Block 0x5d, offset 0x214
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x80, hi: 0x80},
	// Block 0x5e, offset 0x216
	{value: 0x0000, lo: 0x05},
	{value: 0x8132, lo: 0xb0, hi: 0xb0},
	{value: 0x8132, lo: 0xb2, hi: 0xb3},
	{value: 0x812d, lo: 0xb4, hi: 0xb4},
	{value: 0x8132, lo: 0xb7, hi: 0xb8},
	{value: 0x8132, lo: 0xbe, hi: 0xbf},
	// Block 0x5f, offset 0x21c
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0x81, hi: 0x81},
	{value: 0x8104, lo: 0xb6, hi: 0xb6},
	// Block 0x60, offset 0x21f
	{value: 0x0008, lo: 0x03},
	{value: 0x1637, lo: 0x9c, hi: 0x9d},
	{value: 0x0125, lo: 0x9e, hi: 0x9e},
	{value: 0x1643, lo: 0x9f, hi: 0x9f},
	// Block 0x61, offset 0x223
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xad, hi: 0xad},
	// Block 0x62, offset 0x225
	{value: 0x0000, lo: 0x06},
	{value: 0xe500, lo: 0x80, hi: 0x80},
	{value: 0xc600, lo: 0x81, hi: 0x9b},
	{value: 0xe500, lo: 0x9c, hi: 0x9c},
	{value: 0xc600, lo: 0x9d, hi: 0xb7},
	{value: 0xe500, lo: 0xb8, hi: 0xb8},
	{value: 0xc600, lo: 0xb9, hi: 0xbf},
	// Block 0x63, offset 0x22c
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x93},
	{value: 0xe500, lo: 0x94, hi: 0x94},
	{value: 0xc600, lo: 0x95, hi: 0xaf},
	{value: 0xe500, lo: 0xb0, hi: 0xb0},
	{value: 0xc600, lo: 0xb1, hi: 0xbf},
	// Block 0x64, offset 0x232
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x8b},
	{value: 0xe500, lo: 0x8c, hi: 0x8c},
	{value: 0xc600, lo: 0x8d, hi: 0xa7},
	{value: 0xe500, lo: 0xa8, hi: 0xa8},
	{value: 0xc600, lo: 0xa9, hi: 0xbf},
	// Block 0x65, offset 0x238
	{value: 0x0000, lo: 0x07},
	{value: 0xc600, lo: 0x80, hi: 0x83},
	{value: 0xe500, lo: 0x84, hi: 0x84},
	{value: 0xc600, lo: 0x85, hi: 0x9f},
	{value: 0xe500, lo: 0xa0, hi: 0xa0},
	{value: 0xc600, lo: 0xa1, hi: 0xbb},
	{value: 0xe500, lo: 0xbc, hi: 0xbc},
	{value: 0xc600, lo: 0xbd, hi: 0xbf},
	// Block 0x66, offset 0x240
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x97},
	{value: 0xe500, lo: 0x98, hi: 0x98},
	{value: 0xc600, lo: 0x99, hi: 0xb3},
	{value: 0xe500, lo: 0xb4, hi: 0xb4},
	{value: 0xc600, lo: 0xb5, hi: 0xbf},
	// Block 0x67, offset 0x246
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x8f},
	{value: 0xe500, lo: 0x90, hi: 0x90},
	{value: 0xc600, lo: 0x91, hi: 0xab},
	{value: 0xe500, lo: 0xac, hi: 0xac},
	{value: 0xc600, lo: 0xad, hi: 0xbf},
	// Block 0x68, offset 0x24c
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x87},
	{value: 0xe500, lo: 0x88, hi: 0x88},
	{value: 0xc600, lo: 0x89, hi: 0xa3},
	{value: 0xe500, lo: 0xa4, hi: 0xa4},
	{value: 0xc600, lo: 0xa5, hi: 0xbf},
	// Block 0x69, offset 0x252
	{value: 0x0000, lo: 0x03},
	{value: 0xc600, lo: 0x80, hi: 0x87},
	{value: 0xe500, lo: 0x88, hi: 0x88},
	{value: 0xc600, lo: 0x89, hi: 0xa3},
	// Block 0x6a, offset 0x256
	{value: 0x0002, lo: 0x01},
	{value: 0x0003, lo: 0x81, hi: 0xbf},
	// Block 0x6b, offset 0x258
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0xbd, hi: 0xbd},
	// Block 0x6c, offset 0x25a
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0xa0, hi: 0xa0},
	// Block 0x6d, offset 0x25c
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xb6, hi: 0xba},
	// Block 0x6e, offset 0x25e
	{value: 0x002c, lo: 0x05},
	{value: 0x812d, lo: 0x8d, hi: 0x8d},
	{value: 0x8132, lo: 0x8f, hi: 0x8f},
	{value: 0x8132, lo: 0xb8, hi: 0xb8},
	{value: 0x8101, lo: 0xb9, hi: 0xba},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x6f, offset 0x264
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0xa5, hi: 0xa5},
	{value: 0x812d, lo: 0xa6, hi: 0xa6},
	// Block 0x70, offset 0x267
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x86, hi: 0x86},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x71, offset 0x26a
	{value: 0x17fe, lo: 0x07},
	{value: 0xa000, lo: 0x99, hi: 0x99},
	{value: 0x4238, lo: 0x9a, hi: 0x9a},
	{value: 0xa000, lo: 0x9b, hi: 0x9b},
	{value: 0x4242, lo: 0x9c, hi: 0x9c},
	{value: 0xa000, lo: 0xa5, hi: 0xa5},
	{value: 0x424c, lo: 0xab, hi: 0xab},
	{value: 0x8104, lo: 0xb9, hi: 0xba},
	// Block 0x72, offset 0x272
	{value: 0x0000, lo: 0x06},
	{value: 0x8132, lo: 0x80, hi: 0x82},
	{value: 0x9900, lo: 0xa7, hi: 0xa7},
	{value: 0x2d7e, lo: 0xae, hi: 0xae},
	{value: 0x2d88, lo: 0xaf, hi: 0xaf},
	{value: 0xa000, lo: 0xb1, hi: 0xb2},
	{value: 0x8104, lo: 0xb3, hi: 0xb4},
	// Block 0x73, offset 0x279
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x80, hi: 0x80},
	{value: 0x8102, lo: 0x8a, hi: 0x8a},
	// Block 0x74, offset 0x27c
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0xb5, hi: 0xb5},
	{value: 0x8102, lo: 0xb6, hi: 0xb6},
	// Block 0x75, offset 0x27f
	{value: 0x0002, lo: 0x01},
	{value: 0x8102, lo: 0xa9, hi: 0xaa},
	// Block 0x76, offset 0x281
	{value: 0x0000, lo: 0x07},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2d92, lo: 0x8b, hi: 0x8b},
	{value: 0x2d9c, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	{value: 0x8132, lo: 0xa6, hi: 0xac},
	{value: 0x8132, lo: 0xb0, hi: 0xb4},
	// Block 0x77, offset 0x289
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x82, hi: 0x82},
	{value: 0x8102, lo: 0x86, hi: 0x86},
	// Block 0x78, offset 0x28c
	{value: 0x6b5a, lo: 0x06},
	{value: 0x9900, lo: 0xb0, hi: 0xb0},
	{value: 0xa000, lo: 0xb9, hi: 0xb9},
	{value: 0x9900, lo: 0xba, hi: 0xba},
	{value: 0x2db0, lo: 0xbb, hi: 0xbb},
	{value: 0x2da6, lo: 0xbc, hi: 0xbd},
	{value: 0x2dba, lo: 0xbe, hi: 0xbe},
	// Block 0x79, offset 0x293
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x82, hi: 0x82},
	{value: 0x8102, lo: 0x83, hi: 0x83},
	// Block 0x7a, offset 0x296
	{value: 0x0000, lo: 0x05},
	{value: 0x9900, lo: 0xaf, hi: 0xaf},
	{value: 0xa000, lo: 0xb8, hi: 0xb9},
	{value: 0x2dc4, lo: 0xba, hi: 0xba},
	{value: 0x2dce, lo: 0xbb, hi: 0xbb},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x7b, offset 0x29c
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0x80, hi: 0x80},
	// Block 0x7c, offset 0x29e
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x7d, offset 0x2a0
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0xb6, hi: 0xb6},
	{value: 0x8102, lo: 0xb7, hi: 0xb7},
	// Block 0x7e, offset 0x2a3
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xab, hi: 0xab},
	// Block 0x7f, offset 0x2a5
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xb4, hi: 0xb4},
	// Block 0x80, offset 0x2a7
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x87, hi: 0x87},
	// Block 0x81, offset 0x2a9
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x99, hi: 0x99},
	// Block 0x82, offset 0x2ab
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0x82, hi: 0x82},
	{value: 0x8104, lo: 0x84, hi: 0x85},
	// Block 0x83, offset 0x2ae
	{value: 0x0000, lo: 0x01},
	{value: 0x8101, lo: 0xb0, hi: 0xb4},
	// Block 0x84, offset 0x2b0
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xb0, hi: 0xb6},
	// Block 0x85, offset 0x2b2
	{value: 0x0000, lo: 0x01},
	{value: 0x8101, lo: 0x9e, hi: 0x9e},
	// Block 0x86, offset 0x2b4
	{value: 0x0000, lo: 0x0c},
	{value: 0x45cc, lo: 0x9e, hi: 0x9e},
	{value: 0x45d6, lo: 0x9f, hi: 0x9f},
	{value: 0x460a, lo: 0xa0, hi: 0xa0},
	{value: 0x4618, lo: 0xa1, hi: 0xa1},
	{value: 0x4626, lo: 0xa2, hi: 0xa2},
	{value: 0x4634, lo: 0xa3, hi: 0xa3},
	{value: 0x4642, lo: 0xa4, hi: 0xa4},
	{value: 0x812b, lo: 0xa5, hi: 0xa6},
	{value: 0x8101, lo: 0xa7, hi: 0xa9},
	{value: 0x8130, lo: 0xad, hi: 0xad},
	{value: 0x812b, lo: 0xae, hi: 0xb2},
	{value: 0x812d, lo: 0xbb, hi: 0xbf},
	// Block 0x87, offset 0x2c1
	{value: 0x0000, lo: 0x09},
	{value: 0x812d, lo: 0x80, hi: 0x82},
	{value: 0x8132, lo: 0x85, hi: 0x89},
	{value: 0x812d, lo: 0x8a, hi: 0x8b},
	{value: 0x8132, lo: 0xaa, hi: 0xad},
	{value: 0x45e0, lo: 0xbb, hi: 0xbb},
	{value: 0x45ea, lo: 0xbc, hi: 0xbc},
	{value: 0x4650, lo: 0xbd, hi: 0xbd},
	{value: 0x466c, lo: 0xbe, hi: 0xbe},
	{value: 0x465e, lo: 0xbf, hi: 0xbf},
	// Block 0x88, offset 0x2cb
	{value: 0x0000, lo: 0x01},
	{value: 0x467a, lo: 0x80, hi: 0x80},
	// Block 0x89, offset 0x2cd
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x82, hi: 0x84},
	// Block 0x8a, offset 0x2cf
	{value: 0x0002, lo: 0x03},
	{value: 0x0043, lo: 0x80, hi: 0x99},
	{value: 0x0083, lo: 0x9a, hi: 0xb3},
	{value: 0x0043, lo: 0xb4, hi: 0xbf},
	// Block 0x8b, offset 0x2d3
	{value: 0x0002, lo: 0x04},
	{value: 0x005b, lo: 0x80, hi: 0x8d},
	{value: 0x0083, lo: 0x8e, hi: 0x94},
	{value: 0x0093, lo: 0x96, hi: 0xa7},
	{value: 0x0043, lo: 0xa8, hi: 0xbf},
	// Block 0x8c, offset 0x2d8
	{value: 0x0002, lo: 0x0b},
	{value: 0x0073, lo: 0x80, hi: 0x81},
	{value: 0x0083, lo: 0x82, hi: 0x9b},
	{value: 0x0043, lo: 0x9c, hi: 0x9c},
	{value: 0x0047, lo: 0x9e, hi: 0x9f},
	{value: 0x004f, lo: 0xa2, hi: 0xa2},
	{value: 0x0055, lo: 0xa5, hi: 0xa6},
	{value: 0x005d, lo: 0xa9, hi: 0xac},
	{value: 0x0067, lo: 0xae, hi: 0xb5},
	{value: 0x0083, lo: 0xb6, hi: 0xb9},
	{value: 0x008d, lo: 0xbb, hi: 0xbb},
	{value: 0x0091, lo: 0xbd, hi: 0xbf},
	// Block 0x8d, offset 0x2e4
	{value: 0x0002, lo: 0x04},
	{value: 0x0097, lo: 0x80, hi: 0x83},
	{value: 0x00a1, lo: 0x85, hi: 0x8f},
	{value: 0x0043, lo: 0x90, hi: 0xa9},
	{value: 0x0083, lo: 0xaa, hi: 0xbf},
	// Block 0x8e, offset 0x2e9
	{value: 0x0002, lo: 0x08},
	{value: 0x00af, lo: 0x80, hi: 0x83},
	{value: 0x0043, lo: 0x84, hi: 0x85},
	{value: 0x0049, lo: 0x87, hi: 0x8a},
	{value: 0x0055, lo: 0x8d, hi: 0x94},
	{value: 0x0067, lo: 0x96, hi: 0x9c},
	{value: 0x0083, lo: 0x9e, hi: 0xb7},
	{value: 0x0043, lo: 0xb8, hi: 0xb9},
	{value: 0x0049, lo: 0xbb, hi: 0xbe},
	// Block 0x8f, offset 0x2f2
	{value: 0x0002, lo: 0x05},
	{value: 0x0053, lo: 0x80, hi: 0x84},
	{value: 0x005f, lo: 0x86, hi: 0x86},
	{value: 0x0067, lo: 0x8a, hi: 0x90},
	{value: 0x0083, lo: 0x92, hi: 0xab},
	{value: 0x0043, lo: 0xac, hi: 0xbf},
	// Block 0x90, offset 0x2f8
	{value: 0x0002, lo: 0x04},
	{value: 0x006b, lo: 0x80, hi: 0x85},
	{value: 0x0083, lo: 0x86, hi: 0x9f},
	{value: 0x0043, lo: 0xa0, hi: 0xb9},
	{value: 0x0083, lo: 0xba, hi: 0xbf},
	// Block 0x91, offset 0x2fd
	{value: 0x0002, lo: 0x03},
	{value: 0x008f, lo: 0x80, hi: 0x93},
	{value: 0x0043, lo: 0x94, hi: 0xad},
	{value: 0x0083, lo: 0xae, hi: 0xbf},
	// Block 0x92, offset 0x301
	{value: 0x0002, lo: 0x04},
	{value: 0x00a7, lo: 0x80, hi: 0x87},
	{value: 0x0043, lo: 0x88, hi: 0xa1},
	{value: 0x0083, lo: 0xa2, hi: 0xbb},
	{value: 0x0043, lo: 0xbc, hi: 0xbf},
	// Block 0x93, offset 0x306
	{value: 0x0002, lo: 0x03},
	{value: 0x004b, lo: 0x80, hi: 0x95},
	{value: 0x0083, lo: 0x96, hi: 0xaf},
	{value: 0x0043, lo: 0xb0, hi: 0xbf},
	// Block 0x94, offset 0x30a
	{value: 0x0003, lo: 0x0f},
	{value: 0x01b8, lo: 0x80, hi: 0x80},
	{value: 0x045f, lo: 0x81, hi: 0x81},
	{value: 0x01bb, lo: 0x82, hi: 0x9a},
	{value: 0x045b, lo: 0x9b, hi: 0x9b},
	{value: 0x01c7, lo: 0x9c, hi: 0x9c},
	{value: 0x01d0, lo: 0x9d, hi: 0x9d},
	{value: 0x01d6, lo: 0x9e, hi: 0x9e},
	{value: 0x01fa, lo: 0x9f, hi: 0x9f},
	{value: 0x01eb, lo: 0xa0, hi: 0xa0},
	{value: 0x01e8, lo: 0xa1, hi: 0xa1},
	{value: 0x0173, lo: 0xa2, hi: 0xb2},
	{value: 0x0188, lo: 0xb3, hi: 0xb3},
	{value: 0x01a6, lo: 0xb4, hi: 0xba},
	{value: 0x045f, lo: 0xbb, hi: 0xbb},
	{value: 0x01bb, lo: 0xbc, hi: 0xbf},
	// Block 0x95, offset 0x31a
	{value: 0x0003, lo: 0x0d},
	{value: 0x01c7, lo: 0x80, hi: 0x94},
	{value: 0x045b, lo: 0x95, hi: 0x95},
	{value: 0x01c7, lo: 0x96, hi: 0x96},
	{value: 0x01d0, lo: 0x97, hi: 0x97},
	{value: 0x01d6, lo: 0x98, hi: 0x98},
	{value: 0x01fa, lo: 0x99, hi: 0x99},
	{value: 0x01eb, lo: 0x9a, hi: 0x9a},
	{value: 0x01e8, lo: 0x9b, hi: 0x9b},
	{value: 0x0173, lo: 0x9c, hi: 0xac},
	{value: 0x0188, lo: 0xad, hi: 0xad},
	{value: 0x01a6, lo: 0xae, hi: 0xb4},
	{value: 0x045f, lo: 0xb5, hi: 0xb5},
	{value: 0x01bb, lo: 0xb6, hi: 0xbf},
	// Block 0x96, offset 0x328
	{value: 0x0003, lo: 0x0d},
	{value: 0x01d9, lo: 0x80, hi: 0x8e},
	{value: 0x045b, lo: 0x8f, hi: 0x8f},
	{value: 0x01c7, lo: 0x90, hi: 0x90},
	{value: 0x01d0, lo: 0x91, hi: 0x91},
	{value: 0x01d6, lo: 0x92, hi: 0x92},
	{value: 0x01fa, lo: 0x93, hi: 0x93},
	{value: 0x01eb, lo: 0x94, hi: 0x94},
	{value: 0x01e8, lo: 0x95, hi: 0x95},
	{value: 0x0173, lo: 0x96, hi: 0xa6},
	{value: 0x0188, lo: 0xa7, hi: 0xa7},
	{value: 0x01a6, lo: 0xa8, hi: 0xae},
	{value: 0x045f, lo: 0xaf, hi: 0xaf},
	{value: 0x01bb, lo: 0xb0, hi: 0xbf},
	// Block 0x97, offset 0x336
	{value: 0x0003, lo: 0x0d},
	{value: 0x01eb, lo: 0x80, hi: 0x88},
	{value: 0x045b, lo: 0x89, hi: 0x89},
	{value: 0x01c7, lo: 0x8a, hi: 0x8a},
	{value: 0x01d0, lo: 0x8b, hi: 0x8b},
	{value: 0x01d6, lo: 0x8c, hi: 0x8c},
	{value: 0x01fa, lo: 0x8d, hi: 0x8d},
	{value: 0x01eb, lo: 0x8e, hi: 0x8e},
	{value: 0x01e8, lo: 0x8f, hi: 0x8f},
	{value: 0x0173, lo: 0x90, hi: 0xa0},
	{value: 0x0188, lo: 0xa1, hi: 0xa1},
	{value: 0x01a6, lo: 0xa2, hi: 0xa8},
	{value: 0x045f, lo: 0xa9, hi: 0xa9},
	{value: 0x01bb, lo: 0xaa, hi: 0xbf},
	// Block 0x98, offset 0x344
	{value: 0x0000, lo: 0x05},
	{value: 0x8132, lo: 0x80, hi: 0x86},
	{value: 0x8132, lo: 0x88, hi: 0x98},
	{value: 0x8132, lo: 0x9b, hi: 0xa1},
	{value: 0x8132, lo: 0xa3, hi: 0xa4},
	{value: 0x8132, lo: 0xa6, hi: 0xaa},
	// Block 0x99, offset 0x34a
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x90, hi: 0x96},
	// Block 0x9a, offset 0x34c
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0x84, hi: 0x89},
	{value: 0x8102, lo: 0x8a, hi: 0x8a},
	// Block 0x9b, offset 0x34f
	{value: 0x0002, lo: 0x09},
	{value: 0x0063, lo: 0x80, hi: 0x89},
	{value: 0x1951, lo: 0x8a, hi: 0x8a},
	{value: 0x1981, lo: 0x8b, hi: 0x8b},
	{value: 0x199c, lo: 0x8c, hi: 0x8c},
	{value: 0x19a2, lo: 0x8d, hi: 0x8d},
	{value: 0x1bc0, lo: 0x8e, hi: 0x8e},
	{value: 0x19ae, lo: 0x8f, hi: 0x8f},
	{value: 0x197b, lo: 0xaa, hi: 0xaa},
	{value: 0x197e, lo: 0xab, hi: 0xab},
	// Block 0x9c, offset 0x359
	{value: 0x0000, lo: 0x01},
	{value: 0x193f, lo: 0x90, hi: 0x90},
	// Block 0x9d, offset 0x35b
	{value: 0x0028, lo: 0x09},
	{value: 0x2862, lo: 0x80, hi: 0x80},
	{value: 0x2826, lo: 0x81, hi: 0x81},
	{value: 0x2830, lo: 0x82, hi: 0x82},
	{value: 0x2844, lo: 0x83, hi: 0x84},
	{value: 0x284e, lo: 0x85, hi: 0x86},
	{value: 0x283a, lo: 0x87, hi: 0x87},
	{value: 0x2858, lo: 0x88, hi: 0x88},
	{value: 0x0b6f, lo: 0x90, hi: 0x90},
	{value: 0x08e7, lo: 0x91, hi: 0x91},
}

// recompMap: 7520 bytes (entries only)
var recompMap map[uint32]rune
var recompMapOnce sync.Once

const recompMapPacked = "" +
	"\x00A\x03\x00\x00\x00\x00\xc0" + // 0x00410300: 0x000000C0
	"\x00A\x03\x01\x00\x00\x00\xc1" + // 0x00410301: 0x000000C1
	"\x00A\x03\x02\x00\x00\x00\xc2" + // 0x00410302: 0x000000C2
	"\x00A\x03\x03\x00\x00\x00\xc3" + // 0x00410303: 0x000000C3
	"\x00A\x03\b\x00\x00\x00\xc4" + // 0x00410308: 0x000000C4
	"\x00A\x03\n\x00\x00\x00\xc5" + // 0x0041030A: 0x000000C5
	"\x00C\x03'\x00\x00\x00\xc7" + // 0x00430327: 0x000000C7
	"\x00E\x03\x00\x00\x00\x00\xc8" + // 0x00450300: 0x000000C8
	"\x00E\x03\x01\x00\x00\x00\xc9" + // 0x00450301: 0x000000C9
	"\x00E\x03\x02\x00\x00\x00\xca" + // 0x00450302: 0x000000CA
	"\x00E\x03\b\x00\x00\x00\xcb" + // 0x00450308: 0x000000CB
	"\x00I\x03\x00\x00\x00\x00\xcc" + // 0x00490300: 0x000000CC
	"\x00I\x03\x01\x00\x00\x00\xcd" + // 0x00490301: 0x000000CD
	"\x00I\x03\x02\x00\x00\x00\xce" + // 0x00490302: 0x000000CE
	"\x00I\x03\b\x00\x00\x00\xcf" + // 0x00490308: 0x000000CF
	"\x00N\x03\x03\x00\x00\x00\xd1" + // 0x004E0303: 0x000000D1
	"\x00O\x03\x00\x00\x00\x00\xd2" + // 0x004F0300: 0x000000D2
	"\x00O\x03\x01\x00\x00\x00\xd3" + // 0x004F0301: 0x000000D3
	"\x00O\x03\x02\x00\x00\x00\xd4" + // 0x004F0302: 0x000000D4
	"\x00O\x03\x03\x00\x00\x00\xd5" + // 0x004F0303: 0x000000D5
	"\x00O\x03\b\x00\x00\x00\xd6" + // 0x004F0308: 0x000000D6
	"\x00U\x03\x00\x00\x00\x00\xd9" + // 0x00550300: 0x000000D9
	"\x00U\x03\x01\x00\x00\x00\xda" + // 0x00550301: 0x000000DA
	"\x00U\x03\x02\x00\x00\x00\xdb" + // 0x00550302: 0x000000DB
	"\x00U\x03\b\x00\x00\x00\xdc" + // 0x00550308: 0x000000DC
	"\x00Y\x03\x01\x00\x00\x00\xdd" + // 0x00590301: 0x000000DD
	"\x00a\x03\x00\x00\x00\x00\xe0" + // 0x00610300: 0x000000E0
	"\x00a\x03\x01\x00\x00\x00\xe1" + // 0x00610301: 0x000000E1
	"\x00a\x03\x02\x00\x00\x00\xe2" + // 0x00610302: 0x000000E2
	"\x00a\x03\x03\x00\x00\x00\xe3" + // 0x00610303: 0x000000E3
	"\x00a\x03\b\x00\x00\x00\xe4" + // 0x00610308: 0x000000E4
	"\x00a\x03\n\x00\x00\x00\xe5" + // 0x0061030A: 0x000000E5
	"\x00c\x03'\x00\x00\x00\xe7" + // 0x00630327: 0x000000E7
	"\x00e\x03\x00\x00\x00\x00\xe8" + // 0x00650300: 0x000000E8
	"\x00e\x03\x01\x00\x00\x00\xe9" + // 0x00650301: 0x000000E9
	"\x00e\x03\x02\x00\x00\x00\xea" + // 0x00650302: 0x000000EA
	"\x00e\x03\b\x00\x00\x00\xeb" + // 0x00650308: 0x000000EB
	"\x00i\x03\x00\x00\x00\x00\xec" + // 0x00690300: 0x000000EC
	"\x00i\x03\x01\x00\x00\x00\xed" + // 0x00690301: 0x000000ED
	"\x00i\x03\x02\x00\x00\x00\xee" + // 0x00690302: 0x000000EE
	"\x00i\x03\b\x00\x00\x00\xef" + // 0x00690308: 0x000000EF
	"\x00n\x03\x03\x00\x00\x00\xf1" + // 0x006E0303: 0x000000F1
	"\x00o\x03\x00\x00\x00\x00\xf2" + // 0x006F0300: 0x000000F2
	"\x00o\x03\x01\x00\x00\x00\xf3" + // 0x006F0301: 0x000000F3
	"\x00o\x03\x02\x00\x00\x00\xf4" + // 0x006F0302: 0x000000F4
	"\x00o\x03\x03\x00\x00\x00\xf5" + // 0x006F0303: 0x000000F5
	"\x00o\x03\b\x00\x00\x00\xf6" + // 0x006F0308: 0x000000F6
	"\x00u\x03\x00\x00\x00\x00\xf9" + // 0x00750300: 0x000000F9
	"\x00u\x03\x01\x00\x00\x00\xfa" + // 0x00750301: 0x000000FA
	"\x00u\x03\x02\x00\x00\x00\xfb" + // 0x00750302: 0x000000FB
	"\x00u\x03\b\x00\x00\x00\xfc" + // 0x00750308: 0x000000FC
	"\x00y\x03\x01\x00\x00\x00\xfd" + // 0x00790301: 0x000000FD
	"\x00y\x03\b\x00\x00\x00\xff" + // 0x00790308: 0x000000FF
	"\x00A\x03\x04\x00\x00\x01\x00" + // 0x00410304: 0x00000100
	"\x00a\x03\x04\x00\x00\x01\x01" + // 0x00610304: 0x00000101
	"\x00A\x03\x06\x00\x00\x01\x02" + // 0x00410306: 0x00000102
	"\x00a\x03\x06\x00\x00\x01\x03" + // 0x00610306: 0x00000103
	"\x00A\x03(\x00\x00\x01\x04" + // 0x00410328: 0x00000104
	"\x00a\x03(\x00\x00\x01\x05" + // 0x00610328: 0x00000105
	"\x00C\x03\x01\x00\x00\x01\x06" + // 0x00430301: 0x00000106
	"\x00c\x03\x01\x00\x00\x01\a" + // 0x00630301: 0x00000107
	"\x00C\x03\x02\x00\x00\x01\b" + // 0x00430302: 0x00000108
	"\x00c\x03\x02\x00\x00\x01\t" + // 0x00630302: 0x00000109
	"\x00C\x03\a\x00\x00\x01\n" + // 0x00430307: 0x0000010A
	"\x00c\x03\a\x00\x00\x01\v" + // 0x00630307: 0x0000010B
	"\x00C\x03\f\x00\x00\x01\f" + // 0x0043030C: 0x0000010C
	"\x00c\x03\f\x00\x00\x01\r" + // 0x0063030C: 0x0000010D
	"\x00D\x03\f\x00\x00\x01\x0e" + // 0x0044030C: 0x0000010E
	"\x00d\x03\f\x00\x00\x01\x0f" + // 0x0064030C: 0x0000010F
	"\x00E\x03\x04\x00\x00\x01\x12" + // 0x00450304: 0x00000112
	"\x00e\x03\x04\x00\x00\x01\x13" + // 0x00650304: 0x00000113
	"\x00E\x03\x06\x00\x00\x01\x14" + // 0x00450306: 0x00000114
	"\x00e\x03\x06\x00\x00\x01\x15" + // 0x00650306: 0x00000115
	"\x00E\x03\a\x00\x00\x01\x16" + // 0x00450307: 0x00000116
	"\x00e\x03\a\x00\x00\x01\x17" + // 0x00650307: 0x00000117
	"\x00E\x03(\x00\x00\x01\x18" + // 0x00450328: 0x00000118
	"\x00e\x03(\x00\x00\x01\x19" + // 0x00650328: 0x00000119
	"\x00E\x03\f\x00\x00\x01\x1a" + // 0x0045030C: 0x0000011A
	"\x00e\x03\f\x00\x00\x01\x1b" + // 0x0065030C: 0x0000011B
	"\x00G\x03\x02\x00\x00\x01\x1c" + // 0x00470302: 0x0000011C
	"\x00g\x03\x02\x00\x00\x01\x1d" + // 0x00670302: 0x0000011D
	"\x00G\x03\x06\x00\x00\x01\x1e" + // 0x00470306: 0x0000011E
	"\x00g\x03\x06\x00\x00\x01\x1f" + // 0x00670306: 0x0000011F
	"\x00G\x03\a\x00\x00\x01 " + // 0x00470307: 0x00000120
	"\x00g\x03\a\x00\x00\x01!" + // 0x00670307: 0x00000121
	"\x00G\x03'\x00\x00\x01\"" + // 0x00470327: 0x00000122
	"\x00g\x03'\x00\x00\x01#" + // 0x00670327: 0x00000123
	"\x00H\x03\x02\x00\x00\x01$" + // 0x00480302: 0x00000124
	"\x00h\x03\x02\x00\x00\x01%" + // 0x00680302: 0x00000125
	"\x00I\x03\x03\x00\x00\x01(" + // 0x00490303: 0x00000128
	"\x00i\x03\x03\x00\x00\x01)" + // 0x00690303: 0x00000129
	"\x00I\x03\x04\x00\x00\x01*" + // 0x00490304: 0x0000012A
	"\x00i\x03\x04\x00\x00\x01+" + // 0x00690304: 0x0000012B
	"\x00I\x03\x06\x00\x00\x01," + // 0x00490306: 0x0000012C
	"\x00i\x03\x06\x00\x00\x01-" + // 0x00690306: 0x0000012D
	"\x00I\x03(\x00\x00\x01." + // 0x00490328: 0x0000012E
	"\x00i\x03(\x00\x00\x01/" + // 0x00690328: 0x0000012F
	"\x00I\x03\a\x00\x00\x010" + // 0x00490307: 0x00000130
	"\x00J\x03\x02\x00\x00\x014" + // 0x004A0302: 0x00000134
	"\x00j\x03\x02\x00\x00\x015" + // 0x006A0302: 0x00000135
	"\x00K\x03'\x00\x00\x016" + // 0x004B0327: 0x00000136
	"\x00k\x03'\x00\x00\x017" + // 0x006B0327: 0x00000137
	"\x00L\x03\x01\x00\x00\x019" + // 0x004C0301: 0x00000139
	"\x00l\x03\x01\x00\x00\x01:" + // 0x006C0301: 0x0000013A
	"\x00L\x03'\x00\x00\x01;" + // 0x004C0327: 0x0000013B
	"\x00l\x03'\x00\x00\x01<" + // 0x006C0327: 0x0000013C
	"\x00L\x03\f\x00\x00\x01=" + // 0x004C030C: 0x0000013D
	"\x00l\x03\f\x00\x00\x01>" + // 0x006C030C: 0x0000013E
	"\x00N\x03\x01\x00\x00\x01C" + // 0x004E0301: 0x00000143
	"\x00n\x03\x01\x00\x00\x01D" + // 0x006E0301: 0x00000144
	"\x00N\x03'\x00\x00\x01E" + // 0x004E0327: 0x00000145
	"\x00n\x03'\x00\x00\x01F" + // 0x006E0327: 0x00000146
	"\x00N\x03\f\x00\x00\x01G" + // 0x004E030C: 0x00000147
	"\x00n\x03\f\x00\x00\x01H" + // 0x006E030C: 0x00000148
	"\x00O\x03\x04\x00\x00\x01L" + // 0x004F0304: 0x0000014C
	"\x00o\x03\x04\x00\x00\x01M" + // 0x006F0304: 0x0000014D
	"\x00O\x03\x06\x00\x00\x01N" + // 0x004F0306: 0x0000014E
	"\x00o\x03\x06\x00\x00\x01O" + // 0x006F0306: 0x0000014F
	"\x00O\x03\v\x00\x00\x01P" + // 0x004F030B: 0x00000150
	"\x00o\x03\v\x00\x00\x01Q" + // 0x006F030B: 0x00000151
	"\x00R\x03\x01\x00\x00\x01T" + // 0x00520301: 0x00000154
	"\x00r\x03\x01\x00\x00\x01U" + // 0x00720301: 0x00000155
	"\x00R\x03'\x00\x00\x01V" + // 0x00520327: 0x00000156
	"\x00r\x03'\x00\x00\x01W" + // 0x00720327: 0x00000157
	"\x00R\x03\f\x00\x00\x01X" + // 0x0052030C: 0x00000158
	"\x00r\x03\f\x00\x00\x01Y" + // 0x0072030C: 0x00000159
	"\x00S\x03\x01\x00\x00\x01Z" + // 0x00530301: 0x0000015A
	"\x00s\x03\x01\x00\x00\x01[" + // 0x00730301: 0x0000015B
	"\x00S\x03\x02\x00\x00\x01\\" + // 0x00530302: 0x0000015C
	"\x00s\x03\x02\x00\x00\x01]" + // 0x00730302: 0x0000015D
	"\x00S\x03'\x00\x00\x01^" + // 0x00530327: 0x0000015E
	"\x00s\x03'\x00\x00\x01_" + // 0x00730327: 0x0000015F
	"\x00S\x03\f\x00\x00\x01`" + // 0x0053030C: 0x00000160
	"\x00s\x03\f\x00\x00\x01a" + // 0x0073030C: 0x00000161
	"\x00T\x03'\x00\x00\x01b" + // 0x00540327: 0x00000162
	"\x00t\x03'\x00\x00\x01c" + // 0x00740327: 0x00000163
	"\x00T\x03\f\x00\x00\x01d" + // 0x0054030C: 0x00000164
	"\x00t\x03\f\x00\x00\x01e" + // 0x0074030C: 0x00000165
	"\x00U\x03\x03\x00\x00\x01h" + // 0x00550303: 0x00000168
	"\x00u\x03\x03\x00\x00\x01i" + // 0x00750303: 0x00000169
	"\x00U\x03\x04\x00\x00\x01j" + // 0x00550304: 0x0000016A
	"\x00u\x03\x04\x00\x00\x01k" + // 0x00750304: 0x0000016B
	"\x00U\x03\x06\x00\x00\x01l" + // 0x00550306: 0x0000016C
	"\x00u\x03\x06\x00\x00\x01m" + // 0x00750306: 0x0000016D
	"\x00U\x03\n\x00\x00\x01n" + // 0x0055030A: 0x0000016E
	"\x00u\x03\n\x00\x00\x01o" + // 0x0075030A: 0x0000016F
	"\x00U\x03\v\x00\x00\x01p" + // 0x0055030B: 0x00000170
	"\x00u\x03\v\x00\x00\x01q" + // 0x0075030B: 0x00000171
	"\x00U\x03(\x00\x00\x01r" + // 0x00550328: 0x00000172
	"\x00u\x03(\x00\x00\x01s" + // 0x00750328: 0x00000173
	"\x00W\x03\x02\x00\x00\x01t" + // 0x00570302: 0x00000174
	"\x00w\x03\x02\x00\x00\x01u" + // 0x00770302: 0x00000175
	"\x00Y\x03\x02\x00\x00\x01v" + // 0x00590302: 0x00000176
	"\x00y\x03\x02\x00\x00\x01w" + // 0x00790302: 0x00000177
	"\x00Y\x03\b\x00\x00\x01x" + // 0x00590308: 0x00000178
	"\x00Z\x03\x01\x00\x00\x01y" + // 0x005A0301: 0x00000179
	"\x00z\x03\x01\x00\x00\x01z" + // 0x007A0301: 0x0000017A
	"\x00Z\x03\a\x00\x00\x01{" + // 0x005A0307: 0x0000017B
	"\x00z\x03\a\x00\x00\x01|" + // 0x007A0307: 0x0000017C
	"\x00Z\x03\f\x00\x00\x01}" + // 0x005A030C: 0x0000017D
	"\x00z\x03\f\x00\x00\x01~" + // 0x007A030C: 0x0000017E
	"\x00O\x03\x1b\x00\x00\x01\xa0" + // 0x004F031B: 0x000001A0
	"\x00o\x03\x1b\x00\x00\x01\xa1" + // 0x006F031B: 0x000001A1
	"\x00U\x03\x1b\x00\x00\x01\xaf" + // 0x0055031B: 0x000001AF
	"\x00u\x03\x1b\x00\x00\x01\xb0" + // 0x0075031B: 0x000001B0
	"\x00A\x03\f\x00\x00\x01\xcd" + // 0x0041030C: 0x000001CD
	"\x00a\x03\f\x00\x00\x01\xce" + // 0x0061030C: 0x000001CE
	"\x00I\x03\f\x00\x00\x01\xcf" + // 0x0049030C: 0x000001CF
	"\x00i\x03\f\x00\x00\x01\xd0" + // 0x0069030C: 0x000001D0
	"\x00O\x03\f\x00\x00\x01\xd1" + // 0x004F030C: 0x000001D1
	"\x00o\x03\f\x00\x00\x01\xd2" + // 0x006F030C: 0x000001D2
	"\x00U\x03\f\x00\x00\x01\xd3" + // 0x0055030C: 0x000001D3
	"\x00u\x03\f\x00\x00\x01\xd4" + // 0x0075030C: 0x000001D4
	"\x00\xdc\x03\x04\x00\x00\x01\xd5" + // 0x00DC0304: 0x000001D5
	"\x00\xfc\x03\x04\x00\x00\x01\xd6" + // 0x00FC0304: 0x000001D6
	"\x00\xdc\x03\x01\x00\x00\x01\xd7" + // 0x00DC0301: 0x000001D7
	"\x00\xfc\x03\x01\x00\x00\x01\xd8" + // 0x00FC0301: 0x000001D8
	"\x00\xdc\x03\f\x00\x00\x01\xd9" + // 0x00DC030C: 0x000001D9
	"\x00\xfc\x03\f\x00\x00\x01\xda" + // 0x00FC030C: 0x000001DA
	"\x00\xdc\x03\x00\x00\x00\x01\xdb" + // 0x00DC0300: 0x000001DB
	"\x00\xfc\x03\x00\x00\x00\x01\xdc" + // 0x00FC0300: 0x000001DC
	"\x00\xc4\x03\x04\x00\x00\x01\xde" + // 0x00C40304: 0x000001DE
	"\x00\xe4\x03\x04\x00\x00\x01\xdf" + // 0x00E40304: 0x000001DF
	"\x02&\x03\x04\x00\x00\x01\xe0" + // 0x02260304: 0x000001E0
	"\x02'\x03\x04\x00\x00\x01\xe1" + // 0x02270304: 0x000001E1
	"\x00\xc6\x03\x04\x00\x00\x01\xe2" + // 0x00C60304: 0x000001E2
	"\x00\xe6\x03\x04\x00\x00\x01\xe3" + // 0x00E60304: 0x000001E3
	"\x00G\x03\f\x00\x00\x01\xe6" + // 0x0047030C: 0x000001E6
	"\x00g\x03\f\x00\x00\x01\xe7" + // 0x0067030C: 0x000001E7
	"\x00K\x03\f\x00\x00\x01\xe8" + // 0x004B030C: 0x000001E8
	"\x00k\x03\f\x00\x00\x01\xe9" + // 0x006B030C: 0x000001E9
	"\x00O\x03(\x00\x00\x01\xea" + // 0x004F0328: 0x000001EA
	"\x00o\x03(\x00\x00\x01\xeb" + // 0x006F0328: 0x000001EB
	"\x01\xea\x03\x04\x00\x00\x01\xec" + // 0x01EA0304: 0x000001EC
	"\x01\xeb\x03\x04\x00\x00\x01\xed" + // 0x01EB0304: 0x000001ED
	"\x01\xb7\x03\f\x00\x00\x01\xee" + // 0x01B7030C: 0x000001EE
	"\x02\x92\x03\f\x00\x00\x01\xef" + // 0x0292030C: 0x000001EF
	"\x00j\x03\f\x00\x00\x01\xf0" + // 0x006A030C: 0x000001F0
	"\x00G\x03\x01\x00\x00\x01\xf4" + // 0x00470301: 0x000001F4
	"\x00g\x03\x01\x00\x00\x01\xf5" + // 0x00670301: 0x000001F5
	"\x00N\x03\x00\x00\x00\x01\xf8" + // 0x004E0300: 0x000001F8
	"\x00n\x03\x00\x00\x00\x01\xf9" + // 0x006E0300: 0x000001F9
	"\x00\xc5\x03\x01\x00\x00\x01\xfa" + // 0x00C50301: 0x000001FA
	"\x00\xe5\x03\x01\x00\x00\x01\xfb" + // 0x00E50301: 0x000001FB
	"\x00\xc6\x03\x01\x00\x00\x01\xfc" + // 0x00C60301: 0x000001FC
	"\x00\xe6\x03\x01\x00\x00\x01\xfd" + // 0x00E60301: 0x000001FD
	"\x00\xd8\x03\x01\x00\x00\x01\xfe" + // 0x00D80301: 0x000001FE
	"\x00\xf8\x03\x01\x00\x00\x01\xff" + // 0x00F80301: 0x000001FF
	"\x00A\x03\x0f\x00\x00\x02\x00" + // 0x0041030F: 0x00000200
	"\x00a\x03\x0f\x00\x00\x02\x01" + // 0x0061030F: 0x00000201
	"\x00A\x03\x11\x00\x00\x02\x02" + // 0x00410311: 0x00000202
	"\x00a\x03\x11\x00\x00\x02\x03" + // 0x00610311: 0x00000203
	"\x00E\x03\x0f\x00\x00\x02\x04" + // 0x0045030F: 0x00000204
	"\x00e\x03\x0f\x00\x00\x02\x05" + // 0x0065030F: 0x00000205
	"\x00E\x03\x11\x00\x00\x02\x06" + // 0x00450311: 0x00000206
	"\x00e\x03\x11\x00\x00\x02\a" + // 0x00650311: 0x00000207
	"\x00I\x03\x0f\x00\x00\x02\b" + // 0x0049030F: 0x00000208
	"\x00i\x03\x0f\x00\x00\x02\t" + // 0x0069030F: 0x00000209
	"\x00I\x03\x11\x00\x00\x02\n" + // 0x00490311: 0x0000020A
	"\x00i\x03\x11\x00\x00\x02\v" + // 0x00690311: 0x0000020B
	"\x00O\x03\x0f\x00\x00\x02\f" + // 0x004F030F: 0x0000020C
	"\x00o\x03\x0f\x00\x00\x02\r" + // 0x006F030F: 0x0000020D
	"\x00O\x03\x11\x00\x00\x02\x0e" + // 0x004F0311: 0x0000020E
	"\x00o\x03\x11\x00\x00\x02\x0f" + // 0x006F0311: 0x0000020F
	"\x00R\x03\x0f\x00\x00\x02\x10" + // 0x0052030F: 0x00000210
	"\x00r\x03\x0f\x00\x00\x02\x11" + // 0x0072030F: 0x00000211
	"\x00R\x03\x11\x00\x00\x02\x12" + // 0x00520311: 0x00000212
	"\x00r\x03\x11\x00\x00\x02\x13" + // 0x00720311: 0x00000213
	"\x00U\x03\x0f\x00\x00\x02\x14" + // 0x0055030F: 0x00000214
	"\x00u\x03\x0f\x00\x00\x02\x15" + // 0x0075030F: 0x00000215
	"\x00U\x03\x11\x00\x00\x02\x16" + // 0x00550311: 0x00000216
	"\x00u\x03\x11\x00\x00\x02\x17" + // 0x00750311: 0x00000217
	"\x00S\x03&\x00\x00\x02\x18" + // 0x00530326: 0x00000218
	"\x00s\x03&\x00\x00\x02\x19" + // 0x00730326: 0x00000219
	"\x00T\x03&\x00\x00\x02\x1a" + // 0x00540326: 0x0000021A
	"\x00t\x03&\x00\x00\x02\x1b" + // 0x00740326: 0x0000021B
	"\x00H\x03\f\x00\x00\x02\x1e" + // 0x0048030C: 0x0000021E
	"\x00h\x03\f\x00\x00\x02\x1f" + // 0x0068030C: 0x0000021F
	"\x00A\x03\a\x00\x00\x02&" + // 0x00410307: 0x00000226
	"\x00a\x03\a\x00\x00\x02'" + // 0x00610307: 0x00000227
	"\x00E\x03'\x00\x00\x02(" + // 0x00450327: 0x00000228
	"\x00e\x03'\x00\x00\x02)" + // 0x00650327: 0x00000229
	"\x00\xd6\x03\x04\x00\x00\x02*" + // 0x00D60304: 0x0000022A
	"\x00\xf6\x03\x04\x00\x00\x02+" + // 0x00F60304: 0x0000022B
	"\x00\xd5\x03\x04\x00\x00\x02," + // 0x00D50304: 0x0000022C
	"\x00\xf5\x03\x04\x00\x00\x02-" + // 0x00F50304: 0x0000022D
	"\x00O\x03\a\x00\x00\x02." + // 0x004F0307: 0x0000022E
	"\x00o\x03\a\x00\x00\x02/" + // 0x006F0307: 0x0000022F
	"\x02.\x03\x04\x00\x00\x020" + // 0x022E0304: 0x00000230
	"\x02/\x03\x04\x00\x00\x021" + // 0x022F0304: 0x00000231
	"\x00Y\x03\x04\x00\x00\x022" + // 0x00590304: 0x00000232
	"\x00y\x03\x04\x00\x00\x023" + // 0x00790304: 0x00000233
	"\x00\xa8\x03\x01\x00\x00\x03\x85" + // 0x00A80301: 0x00000385
	"\x03\x91\x03\x01\x00\x00\x03\x86" + // 0x03910301: 0x00000386
	"\x03\x95\x03\x01\x00\x00\x03\x88" + // 0x03950301: 0x00000388
	"\x03\x97\x03\x01\x00\x00\x03\x89" + // 0x03970301: 0x00000389
	"\x03\x99\x03\x01\x00\x00\x03\x8a" + // 0x03990301: 0x0000038A
	"\x03\x9f\x03\x01\x00\x00\x03\x8c" + // 0x039F0301: 0x0000038C
	"\x03\xa5\x03\x01\x00\x00\x03\x8e" + // 0x03A50301: 0x0000038E
	"\x03\xa9\x03\x01\x00\x00\x03\x8f" + // 0x03A90301: 0x0000038F
	"\x03\xca\x03\x01\x00\x00\x03\x90" + // 0x03CA0301: 0x00000390
	"\x03\x99\x03\b\x00\x00\x03\xaa" + // 0x03990308: 0x000003AA
	"\x03\xa5\x03\b\x00\x00\x03\xab" + // 0x03A50308: 0x000003AB
	"\x03\xb1\x03\x01\x00\x00\x03\xac" + // 0x03B10301: 0x000003AC
	"\x03\xb5\x03\x01\x00\x00\x03\xad" + // 0x03B50301: 0x000003AD
	"\x03\xb7\x03\x01\x00\x00\x03\xae" + // 0x03B70301: 0x000003AE
	"\x03\xb9\x03\x01\x00\x00\x03\xaf" + // 0x03B90301: 0x000003AF
	"\x03\xcb\x03\x01\x00\x00\x03\xb0" + // 0x03CB0301: 0x000003B0
	"\x03\xb9\x03\b\x00\x00\x03\xca" + // 0x03B90308: 0x000003CA
	"\x03\xc5\x03\b\x00\x00\x03\xcb" + // 0x03C50308: 0x000003CB
	"\x03\xbf\x03\x01\x00\x00\x03\xcc" + // 0x03BF0301: 0x000003CC
	"\x03\xc5\x03\x01\x00\x00\x03\xcd" + // 0x03C50301: 0x000003CD
	"\x03\xc9\x03\x01\x00\x00\x03\xce" + // 0x03C90301: 0x000003CE
	"\x03\xd2\x03\x01\x00\x00\x03\xd3" + // 0x03D20301: 0x000003D3
	"\x03\xd2\x03\b\x00\x00\x03\xd4" + // 0x03D20308: 0x000003D4
	"\x04\x15\x03\x00\x00\x00\x04\x00" + // 0x04150300: 0x00000400
	"\x04\x15\x03\b\x00\x00\x04\x01" + // 0x04150308: 0x00000401
	"\x04\x13\x03\x01\x00\x00\x04\x03" + // 0x04130301: 0x00000403
	"\x04\x06\x03\b\x00\x00\x04\a" + // 0x04060308: 0x00000407
	"\x04\x1a\x03\x01\x00\x00\x04\f" + // 0x041A0301: 0x0000040C
	"\x04\x18\x03\x00\x00\x00\x04\r" + // 0x04180300: 0x0000040D
	"\x04#\x03\x06\x00\x00\x04\x0e" + // 0x04230306: 0x0000040E
	"\x04\x18\x03\x06\x00\x00\x04\x19" + // 0x04180306: 0x00000419
	"\x048\x03\x06\x00\x00\x049" + // 0x04380306: 0x00000439
	"\x045\x03\x00\x00\x00\x04P" + // 0x04350300: 0x00000450
	"\x045\x03\b\x00\x00\x04Q" + // 0x04350308: 0x00000451
	"\x043\x03\x01\x00\x00\x04S" + // 0x04330301: 0x00000453
	"\x04V\x03\b\x00\x00\x04W" + // 0x04560308: 0x00000457
	"\x04:\x03\x01\x00\x00\x04\\" + // 0x043A0301: 0x0000045C
	"\x048\x03\x00\x00\x00\x04]" + // 0x04380300: 0x0000045D
	"\x04C\x03\x06\x00\x00\x04^" + // 0x04430306: 0x0000045E
	"\x04t\x03\x0f\x00\x00\x04v" + // 0x0474030F: 0x00000476
	"\x04u\x03\x0f\x00\x00\x04w" + // 0x0475030F: 0x00000477
	"\x04\x16\x03\x06\x00\x00\x04\xc1" + // 0x04160306: 0x000004C1
	"\x046\x03\x06\x00\x00\x04\xc2" + // 0x04360306: 0x000004C2
	"\x04\x10\x03\x06\x00\x00\x04\xd0" + // 0x04100306: 0x000004D0
	"\x040\x03\x06\x00\x00\x04\xd1" + // 0x04300306: 0x000004D1
	"\x04\x10\x03\b\x00\x00\x04\xd2" + // 0x04100308: 0x000004D2
	"\x040\x03\b\x00\x00\x04\xd3" + // 0x04300308: 0x000004D3
	"\x04\x15\x03\x06\x00\x00\x04\xd6" + // 0x04150306: 0x000004D6
	"\x045\x03\x06\x00\x00\x04\xd7" + // 0x04350306: 0x000004D7
	"\x04\xd8\x03\b\x00\x00\x04\xda" + // 0x04D80308: 0x000004DA
	"\x04\xd9\x03\b\x00\x00\x04\xdb" + // 0x04D90308: 0x000004DB
	"\x04\x16\x03\b\x00\x00\x04\xdc" + // 0x04160308: 0x000004DC
	"\x046\x03\b\x00\x00\x04\xdd" + // 0x04360308: 0x000004DD
	"\x04\x17\x03\b\x00\x00\x04\xde" + // 0x04170308: 0x000004DE
	"\x047\x03\b\x00\x00\x04\xdf" + // 0x04370308: 0x000004DF
	"\x04\x18\x03\x04\x00\x00\x04\xe2" + // 0x04180304: 0x000004E2
	"\x048\x03\x04\x00\x00\x04\xe3" + // 0x04380304: 0x000004E3
	"\x04\x18\x03\b\x00\x00\x04\xe4" + // 0x04180308: 0x000004E4
	"\x048\x03\b\x00\x00\x04\xe5" + // 0x04380308: 0x000004E5
	"\x04\x1e\x03\b\x00\x00\x04\xe6" + // 0x041E0308: 0x000004E6
	"\x04>\x03\b\x00\x00\x04\xe7" + // 0x043E0308: 0x000004E7
	"\x04\xe8\x03\b\x00\x00\x04\xea" + // 0x04E80308: 0x000004EA
	"\x04\xe9\x03\b\x00\x00\x04\xeb" + // 0x04E90308: 0x000004EB
	"\x04-\x03\b\x00\x00\x04\xec" + // 0x042D0308: 0x000004EC
	"\x04M\x03\b\x00\x00\x04\xed" + // 0x044D0308: 0x000004ED
	"\x04#\x03\x04\x00\x00\x04\xee" + // 0x04230304: 0x000004EE
	"\x04C\x03\x04\x00\x00\x04\xef" + // 0x04430304: 0x000004EF
	"\x04#\x03\b\x00\x00\x04\xf0" + // 0x04230308: 0x000004F0
	"\x04C\x03\b\x00\x00\x04\xf1" + // 0x04430308: 0x000004F1
	"\x04#\x03\v\x00\x00\x04\xf2" + // 0x0423030B: 0x000004F2
	"\x04C\x03\v\x00\x00\x04\xf3" + // 0x0443030B: 0x000004F3
	"\x04'\x03\b\x00\x00\x04\xf4" + // 0x04270308: 0x000004F4
	"\x04G\x03\b\x00\x00\x04\xf5" + // 0x04470308: 0x000004F5
	"\x04+\x03\b\x00\x00\x04\xf8" + // 0x042B0308: 0x000004F8
	"\x04K\x03\b\x00\x00\x04\xf9" + // 0x044B0308: 0x000004F9
	"\x06'\x06S\x00\x00\x06\"" + // 0x06270653: 0x00000622
	"\x06'\x06T\x00\x00\x06#" + // 0x06270654: 0x00000623
	"\x06H\x06T\x00\x00\x06$" + // 0x06480654: 0x00000624
	"\x06'\x06U\x00\x00\x06%" + // 0x06270655: 0x00000625
	"\x06J\x06T\x00\x00\x06&" + // 0x064A0654: 0x00000626
	"\x06\xd5\x06T\x00\x00\x06\xc0" + // 0x06D50654: 0x000006C0
	"\x06\xc1\x06T\x00\x00\x06\xc2" + // 0x06C10654: 0x000006C2
	"\x06\xd2\x06T\x00\x00\x06\xd3" + // 0x06D20654: 0x000006D3
	"\t(\t<\x00\x00\t)" + // 0x0928093C: 0x00000929
	"\t0\t<\x00\x00\t1" + // 0x0930093C: 0x00000931
	"\t3\t<\x00\x00\t4" + // 0x0933093C: 0x00000934
	"\t\xc7\t\xbe\x00\x00\t\xcb" + // 0x09C709BE: 0x000009CB
	"\t\xc7\t\xd7\x00\x00\t\xcc" + // 0x09C709D7: 0x000009CC
	"\vG\vV\x00\x00\vH" + // 0x0B470B56: 0x00000B48
	"\vG\v>\x00\x00\vK" + // 0x0B470B3E: 0x00000B4B
	"\vG\vW\x00\x00\vL" + // 0x0B470B57: 0x00000B4C
	"\v\x92\v\xd7\x00\x00\v\x94" + // 0x0B920BD7: 0x00000B94
	"\v\xc6\v\xbe\x00\x00\v\xca" + // 0x0BC60BBE: 0x00000BCA
	"\v\xc7\v\xbe\x00\x00\v\xcb" + // 0x0BC70BBE: 0x00000BCB
	"\v\xc6\v\xd7\x00\x00\v\xcc" + // 0x0BC60BD7: 0x00000BCC
	"\fF\fV\x00\x00\fH" + // 0x0C460C56: 0x00000C48
	"\f\xbf\f\xd5\x00\x00\f\xc0" + // 0x0CBF0CD5: 0x00000CC0
	"\f\xc6\f\xd5\x00\x00\f\xc7" + // 0x0CC60CD5: 0x00000CC7
	"\f\xc6\f\xd6\x00\x00\f\xc8" + // 0x0CC60CD6: 0x00000CC8
	"\f\xc6\f\xc2\x00\x00\f\xca" + // 0x0CC60CC2: 0x00000CCA
	"\f\xca\f\xd5\x00\x00\f\xcb" + // 0x0CCA0CD5: 0x00000CCB
	"\rF\r>\x00\x00\rJ" + // 0x0D460D3E: 0x00000D4A
	"\rG\r>\x00\x00\rK" + // 0x0D470D3E: 0x00000D4B
	"\rF\rW\x00\x00\rL" + // 0x0D460D57: 0x00000D4C
	"\r\xd9\r\xca\x00\x00\r\xda" + // 0x0DD90DCA: 0x00000DDA
	"\r\xd9\r\xcf\x00\x00\r\xdc" + // 0x0DD90DCF: 0x00000DDC
	"\r\xdc\r\xca\x00\x00\r\xdd" + // 0x0DDC0DCA: 0x00000DDD
	"\r\xd9\r\xdf\x00\x00\r\xde" + // 0x0DD90DDF: 0x00000DDE
	"\x10%\x10.\x00\x00\x10&" + // 0x1025102E: 0x00001026
	"\x1b\x05\x1b5\x00\x00\x1b\x06" + // 0x1B051B35: 0x00001B06
	"\x1b\a\x1b5\x00\x00\x1b\b" + // 0x1B071B35: 0x00001B08
	"\x1b\t\x1b5\x00\x00\x1b\n" + // 0x1B091B35: 0x00001B0A
	"\x1b\v\x1b5\x00\x00\x1b\f" + // 0x1B0B1B35: 0x00001B0C
	"\x1b\r\x1b5\x00\x00\x1b\x0e" + // 0x1B0D1B35: 0x00001B0E
	"\x1b\x11\x1b5\x00\x00\x1b\x12" + // 0x1B111B35: 0x00001B12
	"\x1b:\x1b5\x00\x00\x1b;" + // 0x1B3A1B35: 0x00001B3B
	"\x1b<\x1b5\x00\x00\x1b=" + // 0x1B3C1B35: 0x00001B3D
	"\x1b>\x1b5\x00\x00\x1b@" + // 0x1B3E1B35: 0x00001B40
	"\x1b?\x1b5\x00\x00\x1bA" + // 0x1B3F1B35: 0x00001B41
	"\x1bB\x1b5\x00\x00\x1bC" + // 0x1B421B35: 0x00001B43
	"\x00A\x03%\x00\x00\x1e\x00" + // 0x00410325: 0x00001E00
	"\x00a\x03%\x00\x00\x1e\x01" + // 0x00610325: 0x00001E01
	"\x00B\x03\a\x00\x00\x1e\x02" + // 0x00420307: 0x00001E02
	"\x00b\x03\a\x00\x00\x1e\x03" + // 0x00620307: 0x00001E03
	"\x00B\x03#\x00\x00\x1e\x04" + // 0x00420323: 0x00001E04
	"\x00b\x03#\x00\x00\x1e\x05" + // 0x00620323: 0x00001E05
	"\x00B\x031\x00\x00\x1e\x06" + // 0x00420331: 0x00001E06
	"\x00b\x031\x00\x00\x1e\a" + // 0x00620331: 0x00001E07
	"\x00\xc7\x03\x01\x00\x00\x1e\b" + // 0x00C70301: 0x00001E08
	"\x00\xe7\x03\x01\x00\x00\x1e\t" + // 0x00E70301: 0x00001E09
	"\x00D\x03\a\x00\x00\x1e\n" + // 0x00440307: 0x00001E0A
	"\x00d\x03\a\x00\x00\x1e\v" + // 0x00640307: 0x00001E0B
	"\x00D\x03#\x00\x00\x1e\f" + // 0x00440323: 0x00001E0C
	"\x00d\x03#\x00\x00\x1e\r" + // 0x00640323: 0x00001E0D
	"\x00D\x031\x00\x00\x1e\x0e" + // 0x00440331: 0x00001E0E
	"\x00d\x031\x00\x00\x1e\x0f" + // 0x00640331: 0x00001E0F
	"\x00D\x03'\x00\x00\x1e\x10" + // 0x00440327: 0x00001E10
	"\x00d\x03'\x00\x00\x1e\x11" + // 0x00640327: 0x00001E11
	"\x00D\x03-\x00\x00\x1e\x12" + // 0x0044032D: 0x00001E12
	"\x00d\x03-\x00\x00\x1e\x13" + // 0x0064032D: 0x00001E13
	"\x01\x12\x03\x00\x00\x00\x1e\x14" + // 0x01120300: 0x00001E14
	"\x01\x13\x03\x00\x00\x00\x1e\x15" + // 0x01130300: 0x00001E15
	"\x01\x12\x03\x01\x00\x00\x1e\x16" + // 0x01120301: 0x00001E16
	"\x01\x13\x03\x01\x00\x00\x1e\x17" + // 0x01130301: 0x00001E17
	"\x00E\x03-\x00\x00\x1e\x18" + // 0x0045032D: 0x00001E18
	"\x00e\x03-\x00\x00\x1e\x19" + // 0x0065032D: 0x00001E19
	"\x00E\x030\x00\x00\x1e\x1a" + // 0x00450330: 0x00001E1A
	"\x00e\x030\x00\x00\x1e\x1b" + // 0x00650330: 0x00001E1B
	"\x02(\x03\x06\x00\x00\x1e\x1c" + // 0x02280306: 0x00001E1C
	"\x02)\x03\x06\x00\x00\x1e\x1d" + // 0x02290306: 0x00001E1D
	"\x00F\x03\a\x00\x00\x1e\x1e" + // 0x00460307: 0x00001E1E
	"\x00f\x03\a\x00\x00\x1e\x1f" + // 0x00660307: 0x00001E1F
	"\x00G\x03\x04\x00\x00\x1e " + // 0x00470304: 0x00001E20
	"\x00g\x03\x04\x00\x00\x1e!" + // 0x00670304: 0x00001E21
	"\x00H\x03\a\x00\x00\x1e\"" + // 0x00480307: 0x00001E22
	"\x00h\x03\a\x00\x00\x1e#" + // 0x00680307: 0x00001E23
	"\x00H\x03#\x00\x00\x1e$" + // 0x00480323: 0x00001E24
	"\x00h\x03#\x00\x00\x1e%" + // 0x00680323: 0x00001E25
	"\x00H\x03\b\x00\x00\x1e&" + // 0x00480308: 0x00001E26
	"\x00h\x03\b\x00\x00\x1e'" + // 0x00680308: 0x00001E27
	"\x00H\x03'\x00\x00\x1e(" + // 0x00480327: 0x00001E28
	"\x00h\x03'\x00\x00\x1e)" + // 0x00680327: 0x00001E29
	"\x00H\x03.\x00\x00\x1e*" + // 0x0048032E: 0x00001E2A
	"\x00h\x03.\x00\x00\x1e+" + // 0x0068032E: 0x00001E2B
	"\x00I\x030\x00\x00\x1e," + // 0x00490330: 0x00001E2C
	"\x00i\x030\x00\x00\x1e-" + // 0x00690330: 0x00001E2D
	"\x00\xcf\x03\x01\x00\x00\x1e." + // 0x00CF0301: 0x00001E2E
	"\x00\xef\x03\x01\x00\x00\x1e/" + // 0x00EF0301: 0x00001E2F
	"\x00K\x03\x01\x00\x00\x1e0" + // 0x004B0301: 0x00001E30
	"\x00k\x03\x01\x00\x00\x1e1" + // 0x006B0301: 0x00001E31
	"\x00K\x03#\x00\x00\x1e2" + // 0x004B0323: 0x00001E32
	"\x00k\x03#\x00\x00\x1e3" + // 0x006B0323: 0x00001E33
	"\x00K\x031\x00\x00\x1e4" + // 0x004B0331: 0x00001E34
	"\x00k\x031\x00\x00\x1e5" + // 0x006B0331: 0x00001E35
	"\x00L\x03#\x00\x00\x1e6" + // 0x004C0323: 0x00001E36
	"\x00l\x03#\x00\x00\x1e7" + // 0x006C0323: 0x00001E37
	"\x1e6\x03\x04\x00\x00\x1e8" + // 0x1E360304: 0x00001E38
	"\x1e7\x03\x04\x00\x00\x1e9" + // 0x1E370304: 0x00001E39
	"\x00L\x031\x00\x00\x1e:" + // 0x004C0331: 0x00001E3A
	"\x00l\x031\x00\x00\x1e;" + // 0x006C0331: 0x00001E3B
	"\x00L\x03-\x00\x00\x1e<" + // 0x004C032D: 0x00001E3C
	"\x00l\x03-\x00\x00\x1e=" + // 0x006C032D: 0x00001E3D
	"\x00M\x03\x01\x00\x00\x1e>" + // 0x004D0301: 0x00001E3E
	"\x00m\x03\x01\x00\x00\x1e?" + // 0x006D0301: 0x00001E3F
	"\x00M\x03\a\x00\x00\x1e@" + // 0x004D0307: 0x00001E40
	"\x00m\x03\a\x00\x00\x1eA" + // 0x006D0307: 0x00001E41
	"\x00M\x03#\x00\x00\x1eB" + // 0x004D0323: 0x00001E42
	"\x00m\x03#\x00\x00\x1eC" + // 0x006D0323: 0x00001E43
	"\x00N\x03\a\x00\x00\x1eD" + // 0x004E0307: 0x00001E44
	"\x00n\x03\a\x00\x00\x1eE" + // 0x006E0307: 0x00001E45
	"\x00N\x03#\x00\x00\x1eF" + // 0x004E0323: 0x00001E46
	"\x00n\x03#\x00\x00\x1eG" + // 0x006E0323: 0x00001E47
	"\x00N\x031\x00\x00\x1eH" + // 0x004E0331: 0x00001E48
	"\x00n\x031\x00\x00\x1eI" + // 0x006E0331: 0x00001E49
	"\x00N\x03-\x00\x00\x1eJ" + // 0x004E032D: 0x00001E4A
	"\x00n\x03-\x00\x00\x1eK" + // 0x006E032D: 0x00001E4B
	"\x00\xd5\x03\x01\x00\x00\x1eL" + // 0x00D50301: 0x00001E4C
	"\x00\xf5\x03\x01\x00\x00\x1eM" + // 0x00F50301: 0x00001E4D
	"\x00\xd5\x03\b\x00\x00\x1eN" + // 0x00D50308: 0x00001E4E
	"\x00\xf5\x03\b\x00\x00\x1eO" + // 0x00F50308: 0x00001E4F
	"\x01L\x03\x00\x00\x00\x1eP" + // 0x014C0300: 0x00001E50
	"\x01M\x03\x00\x00\x00\x1eQ" + // 0x014D0300: 0x00001E51
	"\x01L\x03\x01\x00\x00\x1eR" + // 0x014C0301: 0x00001E52
	"\x01M\x03\x01\x00\x00\x1eS" + // 0x014D0301: 0x00001E53
	"\x00P\x03\x01\x00\x00\x1eT" + // 0x00500301: 0x00001E54
	"\x00p\x03\x01\x00\x00\x1eU" + // 0x00700301: 0x00001E55
	"\x00P\x03\a\x00\x00\x1eV" + // 0x00500307: 0x00001E56
	"\x00p\x03\a\x00\x00\x1eW" + // 0x00700307: 0x00001E57
	"\x00R\x03\a\x00\x00\x1eX" + // 0x00520307: 0x00001E58
	"\x00r\x03\a\x00\x00\x1eY" + // 0x00720307: 0x00001E59
	"\x00R\x03#\x00\x00\x1eZ" + // 0x00520323: 0x00001E5A
	"\x00r\x03#\x00\x00\x1e[" + // 0x00720323: 0x00001E5B
	"\x1eZ\x03\x04\x00\x00\x1e\\" + // 0x1E5A0304: 0x00001E5C
	"\x1e[\x03\x04\x00\x00\x1e]" + // 0x1E5B0304: 0x00001E5D
	"\x00R\x031\x00\x00\x1e^" + // 0x00520331: 0x00001E5E
	"\x00r\x031\x00\x00\x1e_" + // 0x00720331: 0x00001E5F
	"\x00S\x03\a\x00\x00\x1e`" + // 0x00530307: 0x00001E60
	"\x00s\x03\a\x00\x00\x1ea" + // 0x00730307: 0x00001E61
	"\x00S\x03#\x00\x00\x1eb" + // 0x00530323: 0x00001E62
	"\x00s\x03#\x00\x00\x1ec" + // 0x00730323: 0x00001E63
	"\x01Z\x03\a\x00\x00\x1ed" + // 0x015A0307: 0x00001E64
	"\x01[\x03\a\x00\x00\x1ee" + // 0x015B0307: 0x00001E65
	"\x01`\x03\a\x00\x00\x1ef" + // 0x01600307: 0x00001E66
	"\x01a\x03\a\x00\x00\x1eg" + // 0x01610307: 0x00001E67
	"\x1eb\x03\a\x00\x00\x1eh" + // 0x1E620307: 0x00001E68
	"\x1ec\x03\a\x00\x00\x1ei" + // 0x1E630307: 0x00001E69
	"\x00T\x03\a\x00\x00\x1ej" + // 0x00540307: 0x00001E6A
	"\x00t\x03\a\x00\x00\x1ek" + // 0x00740307: 0x00001E6B
	"\x00T\x03#\x00\x00\x1el" + // 0x00540323: 0x00001E6C
	"\x00t\x03#\x00\x00\x1em" + // 0x00740323: 0x00001E6D
	"\x00T\x031\x00\x00\x1en" + // 0x00540331: 0x00001E6E
	"\x00t\x031\x00\x00\x1eo" + // 0x00740331: 0x00001E6F
	"\x00T\x03-\x00\x00\x1ep" + // 0x0054032D: 0x00001E70
	"\x00t\x03-\x00\x00\x1eq" + // 0x0074032D: 0x00001E71
	"\x00U\x03$\x00\x00\x1er" + // 0x00550324: 0x00001E72
	"\x00u\x03$\x00\x00\x1es" + // 0x00750324: 0x00001E73
	"\x00U\x030\x00\x00\x1et" + // 0x00550330: 0x00001E74
	"\x00u\x030\x00\x00\x1eu" + // 0x00750330: 0x00001E75
	"\x00U\x03-\x00\x00\x1ev" + // 0x0055032D: 0x00001E76
	"\x00u\x03-\x00\x00\x1ew" + // 0x0075032D: 0x00001E77
	"\x01h\x03\x01\x00\x00\x1ex" + // 0x01680301: 0x00001E78
	"\x01i\x03\x01\x00\x00\x1ey" + // 0x01690301: 0x00001E79
	"\x01j\x03\b\x00\x00\x1ez" + // 0x016A0308: 0x00001E7A
	"\x01k\x03\b\x00\x00\x1e{" + // 0x016B0308: 0x00001E7B
	"\x00V\x03\x03\x00\x00\x1e|" + // 0x00560303: 0x00001E7C
	"\x00v\x03\x03\x00\x00\x1e}" + // 0x00760303: 0x00001E7D
	"\x00V\x03#\x00\x00\x1e~" + // 0x00560323: 0x00001E7E
	"\x00v\x03#\x00\x00\x1e\u007f" + // 0x00760323: 0x00001E7F
	"\x00W\x03\x00\x00\x00\x1e\x80" + // 0x00570300: 0x00001E80
	"\x00w\x03\x00\x00\x00\x1e\x81" + // 0x00770300: 0x00001E81
	"\x00W\x03\x01\x00\x00\x1e\x82" + // 0x00570301: 0x00001E82
	"\x00w\x03\x01\x00\x00\x1e\x83" + // 0x00770301: 0x00001E83
	"\x00W\x03\b\x00\x00\x1e\x84" + // 0x00570308: 0x00001E84
	"\x00w\x03\b\x00\x00\x1e\x85" + // 0x00770308: 0x00001E85
	"\x00W\x03\a\x00\x00\x1e\x86" + // 0x00570307: 0x00001E86
	"\x00w\x03\a\x00\x00\x1e\x87" + // 0x00770307: 0x00001E87
	"\x00W\x03#\x00\x00\x1e\x88" + // 0x00570323: 0x00001E88
	"\x00w\x03#\x00\x00\x1e\x89" + // 0x00770323: 0x00001E89
	"\x00X\x03\a\x00\x00\x1e\x8a" + // 0x00580307: 0x00001E8A
	"\x00x\x03\a\x00\x00\x1e\x8b" + // 0x00780307: 0x00001E8B
	"\x00X\x03\b\x00\x00\x1e\x8c" + // 0x00580308: 0x00001E8C
	"\x00x\x03\b\x00\x00\x1e\x8d" + // 0x00780308: 0x00001E8D
	"\x00Y\x03\a\x00\x00\x1e\x8e" + // 0x00590307: 0x00001E8E
	"\x00y\x03\a\x00\x00\x1e\x8f" + // 0x00790307: 0x00001E8F
	"\x00Z\x03\x02\x00\x00\x1e\x90" + // 0x005A0302: 0x00001E90
	"\x00z\x03\x02\x00\x00\x1e\x91" + // 0x007A0302: 0x00001E91
	"\x00Z\x03#\x00\x00\x1e\x92" + // 0x005A0323: 0x00001E92
	"\x00z\x03#\x00\x00\x1e\x93" + // 0x007A0323: 0x00001E93
	"\x00Z\x031\x00\x00\x1e\x94" + // 0x005A0331: 0x00001E94
	"\x00z\x031\x00\x00\x1e\x95" + // 0x007A0331: 0x00001E95
	"\x00h\x031\x00\x00\x1e\x96" + // 0x00680331: 0x00001E96
	"\x00t\x03\b\x00\x00\x1e\x97" + // 0x00740308: 0x00001E97
	"\x00w\x03\n\x00\x00\x1e\x98" + // 0x0077030A: 0x00001E98
	"\x00y\x03\n\x00\x00\x1e\x99" + // 0x0079030A: 0x00001E99
	"\x01\u007f\x03\a\x00\x00\x1e\x9b" + // 0x017F0307: 0x00001E9B
	"\x00A\x03#\x00\x00\x1e\xa0" + // 0x00410323: 0x00001EA0
	"\x00a\x03#\x00\x00\x1e\xa1" + // 0x00610323: 0x00001EA1
	"\x00A\x03\t\x00\x00\x1e\xa2" + // 0x00410309: 0x00001EA2
	"\x00a\x03\t\x00\x00\x1e\xa3" + // 0x00610309: 0x00001EA3
	"\x00\xc2\x03\x01\x00\x00\x1e\xa4" + // 0x00C20301: 0x00001EA4
	"\x00\xe2\x03\x01\x00\x00\x1e\xa5" + // 0x00E20301: 0x00001EA5
	"\x00\xc2\x03\x00\x00\x00\x1e\xa6" + // 0x00C20300: 0x00001EA6
	"\x00\xe2\x03\x00\x00\x00\x1e\xa7" + // 0x00E20300: 0x00001EA7
	"\x00\xc2\x03\t\x00\x00\x1e\xa8" + // 0x00C20309: 0x00001EA8
	"\x00\xe2\x03\t\x00\x00\x1e\xa9" + // 0x00E20309: 0x00001EA9
	"\x00\xc2\x03\x03\x00\x00\x1e\xaa" + // 0x00C20303: 0x00001EAA
	"\x00\xe2\x03\x03\x00\x00\x1e\xab" + // 0x00E20303: 0x00001EAB
	"\x1e\xa0\x03\x02\x00\x00\x1e\xac" + // 0x1EA00302: 0x00001EAC
	"\x1e\xa1\x03\x02\x00\x00\x1e\xad" + // 0x1EA10302: 0x00001EAD
	"\x01\x02\x03\x01\x00\x00\x1e\xae" + // 0x01020301: 0x00001EAE
	"\x01\x03\x03\x01\x00\x00\x1e\xaf" + // 0x01030301: 0x00001EAF
	"\x01\x02\x03\x00\x00\x00\x1e\xb0" + // 0x01020300: 0x00001EB0
	"\x01\x03\x03\x00\x00\x00\x1e\xb1" + // 0x01030300: 0x00001EB1
	"\x01\x02\x03\t\x00\x00\x1e\xb2" + // 0x01020309: 0x00001EB2
	"\x01\x03\x03\t\x00\x00\x1e\xb3" + // 0x01030309: 0x00001EB3
	"\x01\x02\x03\x03\x00\x00\x1e\xb4" + // 0x01020303: 0x00001EB4
	"\x01\x03\x03\x03\x00\x00\x1e\xb5" + // 0x01030303: 0x00001EB5
	"\x1e\xa0\x03\x06\x00\x00\x1e\xb6" + // 0x1EA00306: 0x00001EB6
	"\x1e\xa1\x03\x06\x00\x00\x1e\xb7" + // 0x1EA10306: 0x00001EB7
	"\x00E\x03#\x00\x00\x1e\xb8" + // 0x00450323: 0x00001EB8
	"\x00e\x03#\x00\x00\x1e\xb9" + // 0x00650323: 0x00001EB9
	"\x00E\x03\t\x00\x00\x1e\xba" + // 0x00450309: 0x00001EBA
	"\x00e\x03\t\x00\x00\x1e\xbb" + // 0x00650309: 0x00001EBB
	"\x00E\x03\x03\x00\x00\x1e\xbc" + // 0x00450303: 0x00001EBC
	"\x00e\x03\x03\x00\x00\x1e\xbd" + // 0x00650303: 0x00001EBD
	"\x00\xca\x03\x01\x00\x00\x1e\xbe" + // 0x00CA0301: 0x00001EBE
	"\x00\xea\x03\x01\x00\x00\x1e\xbf" + // 0x00EA0301: 0x00001EBF
	"\x00\xca\x03\x00\x00\x00\x1e\xc0" + // 0x00CA0300: 0x00001EC0
	"\x00\xea\x03\x00\x00\x00\x1e\xc1" + // 0x00EA0300: 0x00001EC1
	"\x00\xca\x03\t\x00\x00\x1e\xc2" + // 0x00CA0309: 0x00001EC2
	"\x00\xea\x03\t\x00\x00\x1e\xc3" + // 0x00EA0309: 0x00001EC3
	"\x00\xca\x03\x03\x00\x00\x1e\xc4" + // 0x00CA0303: 0x00001EC4
	"\x00\xea\x03\x03\x00\x00\x1e\xc5" + // 0x00EA0303: 0x00001EC5
	"\x1e\xb8\x03\x02\x00\x00\x1e\xc6" + // 0x1EB80302: 0x00001EC6
	"\x1e\xb9\x03\x02\x00\x00\x1e\xc7" + // 0x1EB90302: 0x00001EC7
	"\x00I\x03\t\x00\x00\x1e\xc8" + // 0x00490309: 0x00001EC8
	"\x00i\x03\t\x00\x00\x1e\xc9" + // 0x00690309: 0x00001EC9
	"\x00I\x03#\x00\x00\x1e\xca" + // 0x00490323: 0x00001ECA
	"\x00i\x03#\x00\x00\x1e\xcb" + // 0x00690323: 0x00001ECB
	"\x00O\x03#\x00\x00\x1e\xcc" + // 0x004F0323: 0x00001ECC
	"\x00o\x03#\x00\x00\x1e\xcd" + // 0x006F0323: 0x00001ECD
	"\x00O\x03\t\x00\x00\x1e\xce" + // 0x004F0309: 0x00001ECE
	"\x00o\x03\t\x00\x00\x1e\xcf" + // 0x006F0309: 0x00001ECF
	"\x00\xd4\x03\x01\x00\x00\x1e\xd0" + // 0x00D40301: 0x00001ED0
	"\x00\xf4\x03\x01\x00\x00\x1e\xd1" + // 0x00F40301: 0x00001ED1
	"\x00\xd4\x03\x00\x00\x00\x1e\xd2" + // 0x00D40300: 0x00001ED2
	"\x00\xf4\x03\x00\x00\x00\x1e\xd3" + // 0x00F40300: 0x00001ED3
	"\x00\xd4\x03\t\x00\x00\x1e\xd4" + // 0x00D40309: 0x00001ED4
	"\x00\xf4\x03\t\x00\x00\x1e\xd5" + // 0x00F40309: 0x00001ED5
	"\x00\xd4\x03\x03\x00\x00\x1e\xd6" + // 0x00D40303: 0x00001ED6
	"\x00\xf4\x03\x03\x00\x00\x1e\xd7" + // 0x00F40303: 0x00001ED7
	"\x1e\xcc\x03\x02\x00\x00\x1e\xd8" + // 0x1ECC0302: 0x00001ED8
	"\x1e\xcd\x03\x02\x00\x00\x1e\xd9" + // 0x1ECD0302: 0x00001ED9
	"\x01\xa0\x03\x01\x00\x00\x1e\xda" + // 0x01A00301: 0x00001EDA
	"\x01\xa1\x03\x01\x00\x00\x1e\xdb" + // 0x01A10301: 0x00001EDB
	"\x01\xa0\x03\x00\x00\x00\x1e\xdc" + // 0x01A00300: 0x00001EDC
	"\x01\xa1\x03\x00\x00\x00\x1e\xdd" + // 0x01A10300: 0x00001EDD
	"\x01\xa0\x03\t\x00\x00\x1e\xde" + // 0x01A00309: 0x00001EDE
	"\x01\xa1\x03\t\x00\x00\x1e\xdf" + // 0x01A10309: 0x00001EDF
	"\x01\xa0\x03\x03\x00\x00\x1e\xe0" + // 0x01A00303: 0x00001EE0
	"\x01\xa1\x03\x03\x00\x00\x1e\xe1" + // 0x01A10303: 0x00001EE1
	"\x01\xa0\x03#\x00\x00\x1e\xe2" + // 0x01A00323: 0x00001EE2
	"\x01\xa1\x03#\x00\x00\x1e\xe3" + // 0x01A10323: 0x00001EE3
	"\x00U\x03#\x00\x00\x1e\xe4" + // 0x00550323: 0x00001EE4
	"\x00u\x03#\x00\x00\x1e\xe5" + // 0x00750323: 0x00001EE5
	"\x00U\x03\t\x00\x00\x1e\xe6" + // 0x00550309: 0x00001EE6
	"\x00u\x03\t\x00\x00\x1e\xe7" + // 0x00750309: 0x00001EE7
	"\x01\xaf\x03\x01\x00\x00\x1e\xe8" + // 0x01AF0301: 0x00001EE8
	"\x01\xb0\x03\x01\x00\x00\x1e\xe9" + // 0x01B00301: 0x00001EE9
	"\x01\xaf\x03\x00\x00\x00\x1e\xea" + // 0x01AF0300: 0x00001EEA
	"\x01\xb0\x03\x00\x00\x00\x1e\xeb" + // 0x01B00300: 0x00001EEB
	"\x01\xaf\x03\t\x00\x00\x1e\xec" + // 0x01AF0309: 0x00001EEC
	"\x01\xb0\x03\t\x00\x00\x1e\xed" + // 0x01B00309: 0x00001EED
	"\x01\xaf\x03\x03\x00\x00\x1e\xee" + // 0x01AF0303: 0x00001EEE
	"\x01\xb0\x03\x03\x00\x00\x1e\xef" + // 0x01B00303: 0x00001EEF
	"\x01\xaf\x03#\x00\x00\x1e\xf0" + // 0x01AF0323: 0x00001EF0
	"\x01\xb0\x03#\x00\x00\x1e\xf1" + // 0x01B00323: 0x00001EF1
	"\x00Y\x03\x00\x00\x00\x1e\xf2" + // 0x00590300: 0x00001EF2
	"\x00y\x03\x00\x00\x00\x1e\xf3" + // 0x00790300: 0x00001EF3
	"\x00Y\x03#\x00\x00\x1e\xf4" + // 0x00590323: 0x00001EF4
	"\x00y\x03#\x00\x00\x1e\xf5" + // 0x00790323: 0x00001EF5
	"\x00Y\x03\t\x00\x00\x1e\xf6" + // 0x00590309: 0x00001EF6
	"\x00y\x03\t\x00\x00\x1e\xf7" + // 0x00790309: 0x00001EF7
	"\x00Y\x03\x03\x00\x00\x1e\xf8" + // 0x00590303: 0x00001EF8
	"\x00y\x03\x03\x00\x00\x1e\xf9" + // 0x00790303: 0x00001EF9
	"\x03\xb1\x03\x13\x00\x00\x1f\x00" + // 0x03B10313: 0x00001F00
	"\x03\xb1\x03\x14\x00\x00\x1f\x01" + // 0x03B10314: 0x00001F01
	"\x1f\x00\x03\x00\x00\x00\x1f\x02" + // 0x1F000300: 0x00001F02
	"\x1f\x01\x03\x00\x00\x00\x1f\x03" + // 0x1F010300: 0x00001F03
	"\x1f\x00\x03\x01\x00\x00\x1f\x04" + // 0x1F000301: 0x00001F04
	"\x1f\x01\x03\x01\x00\x00\x1f\x05" + // 0x1F010301: 0x00001F05
	"\x1f\x00\x03B\x00\x00\x1f\x06" + // 0x1F000342: 0x00001F06
	"\x1f\x01\x03B\x00\x00\x1f\a" + // 0x1F010342: 0x00001F07
	"\x03\x91\x03\x13\x00\x00\x1f\b" + // 0x03910313: 0x00001F08
	"\x03\x91\x03\x14\x00\x00\x1f\t" + // 0x03910314: 0x00001F09
	"\x1f\b\x03\x00\x00\x00\x1f\n" + // 0x1F080300: 0x00001F0A
	"\x1f\t\x03\x00\x00\x00\x1f\v" + // 0x1F090300: 0x00001F0B
	"\x1f\b\x03\x01\x00\x00\x1f\f" + // 0x1F080301: 0x00001F0C
	"\x1f\t\x03\x01\x00\x00\x1f\r" + // 0x1F090301: 0x00001F0D
	"\x1f\b\x03B\x00\x00\x1f\x0e" + // 0x1F080342: 0x00001F0E
	"\x1f\t\x03B\x00\x00\x1f\x0f" + // 0x1F090342: 0x00001F0F
	"\x03\xb5\x03\x13\x00\x00\x1f\x10" + // 0x03B50313: 0x00001F10
	"\x03\xb5\x03\x14\x00\x00\x1f\x11" + // 0x03B50314: 0x00001F11
	"\x1f\x10\x03\x00\x00\x00\x1f\x12" + // 0x1F100300: 0x00001F12
	"\x1f\x11\x03\x00\x00\x00\x1f\x13" + // 0x1F110300: 0x00001F13
	"\x1f\x10\x03\x01\x00\x00\x1f\x14" + // 0x1F100301: 0x00001F14
	"\x1f\x11\x03\x01\x00\x00\x1f\x15" + // 0x1F110301: 0x00001F15
	"\x03\x95\x03\x13\x00\x00\x1f\x18" + // 0x03950313: 0x00001F18
	"\x03\x95\x03\x14\x00\x00\x1f\x19" + // 0x03950314: 0x00001F19
	"\x1f\x18\x03\x00\x00\x00\x1f\x1a" + // 0x1F180300: 0x00001F1A
	"\x1f\x19\x03\x00\x00\x00\x1f\x1b" + // 0x1F190300: 0x00001F1B
	"\x1f\x18\x03\x01\x00\x00\x1f\x1c" + // 0x1F180301: 0x00001F1C
	"\x1f\x19\x03\x01\x00\x00\x1f\x1d" + // 0x1F190301: 0x00001F1D
	"\x03\xb7\x03\x13\x00\x00\x1f " + // 0x03B70313: 0x00001F20
	"\x03\xb7\x03\x14\x00\x00\x1f!" + // 0x03B70314: 0x00001F21
	"\x1f \x03\x00\x00\x00\x1f\"" + // 0x1F200300: 0x00001F22
	"\x1f!\x03\x00\x00\x00\x1f#" + // 0x1F210300: 0x00001F23
	"\x1f \x03\x01\x00\x00\x1f$" + // 0x1F200301: 0x00001F24
	"\x1f!\x03\x01\x00\x00\x1f%" + // 0x1F210301: 0x00001F25
	"\x1f \x03B\x00\x00\x1f&" + // 0x1F200342: 0x00001F26
	"\x1f!\x03B\x00\x00\x1f'" + // 0x1F210342: 0x00001F27
	"\x03\x97\x03\x13\x00\x00\x1f(" + // 0x03970313: 0x00001F28
	"\x03\x97\x03\x14\x00\x00\x1f)" + // 0x03970314: 0x00001F29
	"\x1f(\x03\x00\x00\x00\x1f*" + // 0x1F280300: 0x00001F2A
	"\x1f)\x03\x00\x00\x00\x1f+" + // 0x1F290300: 0x00001F2B
	"\x1f(\x03\x01\x00\x00\x1f," + // 0x1F280301: 0x00001F2C
	"\x1f)\x03\x01\x00\x00\x1f-" + // 0x1F290301: 0x00001F2D
	"\x1f(\x03B\x00\x00\x1f." + // 0x1F280342: 0x00001F2E
	"\x1f)\x03B\x00\x00\x1f/" + // 0x1F290342: 0x00001F2F
	"\x03\xb9\x03\x13\x00\x00\x1f0" + // 0x03B90313: 0x00001F30
	"\x03\xb9\x03\x14\x00\x00\x1f1" + // 0x03B90314: 0x00001F31
	"\x1f0\x03\x00\x00\x00\x1f2" + // 0x1F300300: 0x00001F32
	"\x1f1\x03\x00\x00\x00\x1f3" + // 0x1F310300: 0x00001F33
	"\x1f0\x03\x01\x00\x00\x1f4" + // 0x1F300301: 0x00001F34
	"\x1f1\x03\x01\x00\x00\x1f5" + // 0x1F310301: 0x00001F35
	"\x1f0\x03B\x00\x00\x1f6" + // 0x1F300342: 0x00001F36
	"\x1f1\x03B\x00\x00\x1f7" + // 0x1F310342: 0x00001F37
	"\x03\x99\x03\x13\x00\x00\x1f8" + // 0x03990313: 0x00001F38
	"\x03\x99\x03\x14\x00\x00\x1f9" + // 0x03990314: 0x00001F39
	"\x1f8\x03\x00\x00\x00\x1f:" + // 0x1F380300: 0x00001F3A
	"\x1f9\x03\x00\x00\x00\x1f;" + // 0x1F390300: 0x00001F3B
	"\x1f8\x03\x01\x00\x00\x1f<" + // 0x1F380301: 0x00001F3C
	"\x1f9\x03\x01\x00\x00\x1f=" + // 0x1F390301: 0x00001F3D
	"\x1f8\x03B\x00\x00\x1f>" + // 0x1F380342: 0x00001F3E
	"\x1f9\x03B\x00\x00\x1f?" + // 0x1F390342: 0x00001F3F
	"\x03\xbf\x03\x13\x00\x00\x1f@" + // 0x03BF0313: 0x00001F40
	"\x03\xbf\x03\x14\x00\x00\x1fA" + // 0x03BF0314: 0x00001F41
	"\x1f@\x03\x00\x00\x00\x1fB" + // 0x1F400300: 0x00001F42
	"\x1fA\x03\x00\x00\x00\x1fC" + // 0x1F410300: 0x00001F43
	"\x1f@\x03\x01\x00\x00\x1fD" + // 0x1F400301: 0x00001F44
	"\x1fA\x03\x01\x00\x00\x1fE" + // 0x1F410301: 0x00001F45
	"\x03\x9f\x03\x13\x00\x00\x1fH" + // 0x039F0313: 0x00001F48
	"\x03\x9f\x03\x14\x00\x00\x1fI" + // 0x039F0314: 0x00001F49
	"\x1fH\x03\x00\x00\x00\x1fJ" + // 0x1F480300: 0x00001F4A
	"\x1fI\x03\x00\x00\x00\x1fK" + // 0x1F490300: 0x00001F4B
	"\x1fH\x03\x01\x00\x00\x1fL" + // 0x1F480301: 0x00001F4C
	"\x1fI\x03\x01\x00\x00\x1fM" + // 0x1F490301: 0x00001F4D
	"\x03\xc5\x03\x13\x00\x00\x1fP" + // 0x03C50313: 0x00001F50
	"\x03\xc5\x03\x14\x00\x00\x1fQ" + // 0x03C50314: 0x00001F51
	"\x1fP\x03\x00\x00\x00\x1fR" + // 0x1F500300: 0x00001F52
	"\x1fQ\x03\x00\x00\x00\x1fS" + // 0x1F510300: 0x00001F53
	"\x1fP\x03\x01\x00\x00\x1fT" + // 0x1F500301: 0x00001F54
	"\x1fQ\x03\x01\x00\x00\x1fU" + // 0x1F510301: 0x00001F55
	"\x1fP\x03B\x00\x00\x1fV" + // 0x1F500342: 0x00001F56
	"\x1fQ\x03B\x00\x00\x1fW" + // 0x1F510342: 0x00001F57
	"\x03\xa5\x03\x14\x00\x00\x1fY" + // 0x03A50314: 0x00001F59
	"\x1fY\x03\x00\x00\x00\x1f[" + // 0x1F590300: 0x00001F5B
	"\x1fY\x03\x01\x00\x00\x1f]" + // 0x1F590301: 0x00001F5D
	"\x1fY\x03B\x00\x00\x1f_" + // 0x1F590342: 0x00001F5F
	"\x03\xc9\x03\x13\x00\x00\x1f`" + // 0x03C90313: 0x00001F60
	"\x03\xc9\x03\x14\x00\x00\x1fa" + // 0x03C90314: 0x00001F61
	"\x1f`\x03\x00\x00\x00\x1fb" + // 0x1F600300: 0x00001F62
	"\x1fa\x03\x00\x00\x00\x1fc" + // 0x1F610300: 0x00001F63
	"\x1f`\x03\x01\x00\x00\x1fd" + // 0x1F600301: 0x00001F64
	"\x1fa\x03\x01\x00\x00\x1fe" + // 0x1F610301: 0x00001F65
	"\x1f`\x03B\x00\x00\x1ff" + // 0x1F600342: 0x00001F66
	"\x1fa\x03B\x00\x00\x1fg" + // 0x1F610342: 0x00001F67
	"\x03\xa9\x03\x13\x00\x00\x1fh" + // 0x03A90313: 0x00001F68
	"\x03\xa9\x03\x14\x00\x00\x1fi" + // 0x03A90314: 0x00001F69
	"\x1fh\x03\x00\x00\x00\x1fj" + // 0x1F680300: 0x00001F6A
	"\x1fi\x03\x00\x00\x00\x1fk" + // 0x1F690300: 0x00001F6B
	"\x1fh\x03\x01\x00\x00\x1fl" + // 0x1F680301: 0x00001F6C
	"\x1fi\x03\x01\x00\x00\x1fm" + // 0x1F690301: 0x00001F6D
	"\x1fh\x03B\x00\x00\x1fn" + // 0x1F680342: 0x00001F6E
	"\x1fi\x03B\x00\x00\x1fo" + // 0x1F690342: 0x00001F6F
	"\x03\xb1\x03\x00\x00\x00\x1fp" + // 0x03B10300: 0x00001F70
	"\x03\xb5\x03\x00\x00\x00\x1fr" + // 0x03B50300: 0x00001F72
	"\x03\xb7\x03\x00\x00\x00\x1ft" + // 0x03B70300: 0x00001F74
	"\x03\xb9\x03\x00\x00\x00\x1fv" + // 0x03B90300: 0x00001F76
	"\x03\xbf\x03\x00\x00\x00\x1fx" + // 0x03BF0300: 0x00001F78
	"\x03\xc5\x03\x00\x00\x00\x1fz" + // 0x03C50300: 0x00001F7A
	"\x03\xc9\x03\x00\x00\x00\x1f|" + // 0x03C90300: 0x00001F7C
	"\x1f\x00\x03E\x00\x00\x1f\x80" + // 0x1F000345: 0x00001F80
	"\x1f\x01\x03E\x00\x00\x1f\x81" + // 0x1F010345: 0x00001F81
	"\x1f\x02\x03E\x00\x00\x1f\x82" + // 0x1F020345: 0x00001F82
	"\x1f\x03\x03E\x00\x00\x1f\x83" + // 0x1F030345: 0x00001F83
	"\x1f\x04\x03E\x00\x00\x1f\x84" + // 0x1F040345: 0x00001F84
	"\x1f\x05\x03E\x00\x00\x1f\x85" + // 0x1F050345: 0x00001F85
	"\x1f\x06\x03E\x00\x00\x1f\x86" + // 0x1F060345: 0x00001F86
	"\x1f\a\x03E\x00\x00\x1f\x87" + // 0x1F070345: 0x00001F87
	"\x1f\b\x03E\x00\x00\x1f\x88" + // 0x1F080345: 0x00001F88
	"\x1f\t\x03E\x00\x00\x1f\x89" + // 0x1F090345: 0x00001F89
	"\x1f\n\x03E\x00\x00\x1f\x8a" + // 0x1F0A0345: 0x00001F8A
	"\x1f\v\x03E\x00\x00\x1f\x8b" + // 0x1F0B0345: 0x00001F8B
	"\x1f\f\x03E\x00\x00\x1f\x8c" + // 0x1F0C0345: 0x00001F8C
	"\x1f\r\x03E\x00\x00\x1f\x8d" + // 0x1F0D0345: 0x00001F8D
	"\x1f\x0e\x03E\x00\x00\x1f\x8e" + // 0x1F0E0345: 0x00001F8E
	"\x1f\x0f\x03E\x00\x00\x1f\x8f" + // 0x1F0F0345: 0x00001F8F
	"\x1f \x03E\x00\x00\x1f\x90" + // 0x1F200345: 0x00001F90
	"\x1f!\x03E\x00\x00\x1f\x91" + // 0x1F210345: 0x00001F91
	"\x1f\"\x03E\x00\x00\x1f\x92" + // 0x1F220345: 0x00001F92
	"\x1f#\x03E\x00\x00\x1f\x93" + // 0x1F230345: 0x00001F93
	"\x1f$\x03E\x00\x00\x1f\x94" + // 0x1F240345: 0x00001F94
	"\x1f%\x03E\x00\x00\x1f\x95" + // 0x1F250345: 0x00001F95
	"\x1f&\x03E\x00\x00\x1f\x96" + // 0x1F260345: 0x00001F96
	"\x1f'\x03E\x00\x00\x1f\x97" + // 0x1F270345: 0x00001F97
	"\x1f(\x03E\x00\x00\x1f\x98" + // 0x1F280345: 0x00001F98
	"\x1f)\x03E\x00\x00\x1f\x99" + // 0x1F290345: 0x00001F99
	"\x1f*\x03E\x00\x00\x1f\x9a" + // 0x1F2A0345: 0x00001F9A
	"\x1f+\x03E\x00\x00\x1f\x9b" + // 0x1F2B0345: 0x00001F9B
	"\x1f,\x03E\x00\x00\x1f\x9c" + // 0x1F2C0345: 0x00001F9C
	"\x1f-\x03E\x00\x00\x1f\x9d" + // 0x1F2D0345: 0x00001F9D
	"\x1f.\x03E\x00\x00\x1f\x9e" + // 0x1F2E0345: 0x00001F9E
	"\x1f/\x03E\x00\x00\x1f\x9f" + // 0x1F2F0345: 0x00001F9F
	"\x1f`\x03E\x00\x00\x1f\xa0" + // 0x1F600345: 0x00001FA0
	"\x1fa\x03E\x00\x00\x1f\xa1" + // 0x1F610345: 0x00001FA1
	"\x1fb\x03E\x00\x00\x1f\xa2" + // 0x1F620345: 0x00001FA2
	"\x1fc\x03E\x00\x00\x1f\xa3" + // 0x1F630345: 0x00001FA3
	"\x1fd\x03E\x00\x00\x1f\xa4" + // 0x1F640345: 0x00001FA4
	"\x1fe\x03E\x00\x00\x1f\xa5" + // 0x1F650345: 0x00001FA5
	"\x1ff\x03E\x00\x00\x1f\xa6" + // 0x1F660345: 0x00001FA6
	"\x1fg\x03E\x00\x00\x1f\xa7" + // 0x1F670345: 0x00001FA7
	"\x1fh\x03E\x00\x00\x1f\xa8" + // 0x1F680345: 0x00001FA8
	"\x1fi\x03E\x00\x00\x1f\xa9" + // 0x1F690345: 0x00001FA9
	"\x1fj\x03E\x00\x00\x1f\xaa" + // 0x1F6A0345: 0x00001FAA
	"\x1fk\x03E\x00\x00\x1f\xab" + // 0x1F6B0345: 0x00001FAB
	"\x1fl\x03E\x00\x00\x1f\xac" + // 0x1F6C0345: 0x00001FAC
	"\x1fm\x03E\x00\x00\x1f\xad" + // 0x1F6D0345: 0x00001FAD
	"\x1fn\x03E\x00\x00\x1f\xae" + // 0x1F6E0345: 0x00001FAE
	"\x1fo\x03E\x00\x00\x1f\xaf" + // 0x1F6F0345: 0x00001FAF
	"\x03\xb1\x03\x06\x00\x00\x1f\xb0" + // 0x03B10306: 0x00001FB0
	"\x03\xb1\x03\x04\x00\x00\x1f\xb1" + // 0x03B10304: 0x00001FB1
	"\x1fp\x03E\x00\x00\x1f\xb2" + // 0x1F700345: 0x00001FB2
	"\x03\xb1\x03E\x00\x00\x1f\xb3" + // 0x03B10345: 0x00001FB3
	"\x03\xac\x03E\x00\x00\x1f\xb4" + // 0x03AC0345: 0x00001FB4
	"\x03\xb1\x03B\x00\x00\x1f\xb6" + // 0x03B10342: 0x00001FB6
	"\x1f\xb6\x03E\x00\x00\x1f\xb7" + // 0x1FB60345: 0x00001FB7
	"\x03\x91\x03\x06\x00\x00\x1f\xb8" + // 0x03910306: 0x00001FB8
	"\x03\x91\x03\x04\x00\x00\x1f\xb9" + // 0x03910304: 0x00001FB9
	"\x03\x91\x03\x00\x00\x00\x1f\xba" + // 0x03910300: 0x00001FBA
	"\x03\x91\x03E\x00\x00\x1f\xbc" + // 0x03910345: 0x00001FBC
	"\x00\xa8\x03B\x00\x00\x1f\xc1" + // 0x00A80342: 0x00001FC1
	"\x1ft\x03E\x00\x00\x1f\xc2" + // 0x1F740345: 0x00001FC2
	"\x03\xb7\x03E\x00\x00\x1f\xc3" + // 0x03B70345: 0x00001FC3
	"\x03\xae\x03E\x00\x00\x1f\xc4" + // 0x03AE0345: 0x00001FC4
	"\x03\xb7\x03B\x00\x00\x1f\xc6" + // 0x03B70342: 0x00001FC6
	"\x1f\xc6\x03E\x00\x00\x1f\xc7" + // 0x1FC60345: 0x00001FC7
	"\x03\x95\x03\x00\x00\x00\x1f\xc8" + // 0x03950300: 0x00001FC8
	"\x03\x97\x03\x00\x00\x00\x1f\xca" + // 0x03970300: 0x00001FCA
	"\x03\x97\x03E\x00\x00\x1f\xcc" + // 0x03970345: 0x00001FCC
	"\x1f\xbf\x03\x00\x00\x00\x1f\xcd" + // 0x1FBF0300: 0x00001FCD
	"\x1f\xbf\x03\x01\x00\x00\x1f\xce" + // 0x1FBF0301: 0x00001FCE
	"\x1f\xbf\x03B\x00\x00\x1f\xcf" + // 0x1FBF0342: 0x00001FCF
	"\x03\xb9\x03\x06\x00\x00\x1f\xd0" + // 0x03B90306: 0x00001FD0
	"\x03\xb9\x03\x04\x00\x00\x1f\xd1" + // 0x03B90304: 0x00001FD1
	"\x03\xca\x03\x00\x00\x00\x1f\xd2" + // 0x03CA0300: 0x00001FD2
	"\x03\xb9\x03B\x00\x00\x1f\xd6" + // 0x03B90342: 0x00001FD6
	"\x03\xca\x03B\x00\x00\x1f\xd7" + // 0x03CA0342: 0x00001FD7
	"\x03\x99\x03\x06\x00\x00\x1f\xd8" + // 0x03990306: 0x00001FD8
	"\x03\x99\x03\x04\x00\x00\x1f\xd9" + // 0x03990304: 0x00001FD9
	"\x03\x99\x03\x00\x00\x00\x1f\xda" + // 0x03990300: 0x00001FDA
	"\x1f\xfe\x03\x00\x00\x00\x1f\xdd" + // 0x1FFE0300: 0x00001FDD
	"\x1f\xfe\x03\x01\x00\x00\x1f\xde" + // 0x1FFE0301: 0x00001FDE
	"\x1f\xfe\x03B\x00\x00\x1f\xdf" + // 0x1FFE0342: 0x00001FDF
	"\x03\xc5\x03\x06\x00\x00\x1f\xe0" + // 0x03C50306: 0x00001FE0
	"\x03\xc5\x03\x04\x00\x00\x1f\xe1" + // 0x03C50304: 0x00001FE1
	"\x03\xcb\x03\x00\x00\x00\x1f\xe2" + // 0x03CB0300: 0x00001FE2
	"\x03\xc1\x03\x13\x00\x00\x1f\xe4" + // 0x03C10313: 0x00001FE4
	"\x03\xc1\x03\x14\x00\x00\x1f\xe5" + // 0x03C10314: 0x00001FE5
	"\x03\xc5\x03B\x00\x00\x1f\xe6" + // 0x03C50342: 0x00001FE6
	"\x03\xcb\x03B\x00\x00\x1f\xe7" + // 0x03CB0342: 0x00001FE7
	"\x03\xa5\x03\x06\x00\x00\x1f\xe8" + // 0x03A50306: 0x00001FE8
	"\x03\xa5\x03\x04\x00\x00\x1f\xe9" + // 0x03A50304: 0x00001FE9
	"\x03\xa5\x03\x00\x00\x00\x1f\xea" + // 0x03A50300: 0x00001FEA
	"\x03\xa1\x03\x14\x00\x00\x1f\xec" + // 0x03A10314: 0x00001FEC
	"\x00\xa8\x03\x00\x00\x00\x1f\xed" + // 0x00A80300: 0x00001FED
	"\x1f|\x03E\x00\x00\x1f\xf2" + // 0x1F7C0345: 0x00001FF2
	"\x03\xc9\x03E\x00\x00\x1f\xf3" + // 0x03C90345: 0x00001FF3
	"\x03\xce\x03E\x00\x00\x1f\xf4" + // 0x03CE0345: 0x00001FF4
	"\x03\xc9\x03B\x00\x00\x1f\xf6" + // 0x03C90342: 0x00001FF6
	"\x1f\xf6\x03E\x00\x00\x1f\xf7" + // 0x1FF60345: 0x00001FF7
	"\x03\x9f\x03\x00\x00\x00\x1f\xf8" + // 0x039F0300: 0x00001FF8
	"\x03\xa9\x03\x00\x00\x00\x1f\xfa" + // 0x03A90300: 0x00001FFA
	"\x03\xa9\x03E\x00\x00\x1f\xfc" + // 0x03A90345: 0x00001FFC
	"!\x90\x038\x00\x00!\x9a" + // 0x21900338: 0x0000219A
	"!\x92\x038\x00\x00!\x9b" + // 0x21920338: 0x0000219B
	"!\x94\x038\x00\x00!\xae" + // 0x21940338: 0x000021AE
	"!\xd0\x038\x00\x00!\xcd" + // 0x21D00338: 0x000021CD
	"!\xd4\x038\x00\x00!\xce" + // 0x21D40338: 0x000021CE
	"!\xd2\x038\x00\x00!\xcf" + // 0x21D20338: 0x000021CF
	"\"\x03\x038\x00\x00\"\x04" + // 0x22030338: 0x00002204
	"\"\b\x038\x00\x00\"\t" + // 0x22080338: 0x00002209
	"\"\v\x038\x00\x00\"\f" + // 0x220B0338: 0x0000220C
	"\"#\x038\x00\x00\"$" + // 0x22230338: 0x00002224
	"\"%\x038\x00\x00\"&" + // 0x22250338: 0x00002226
	"\"<\x038\x00\x00\"A" + // 0x223C0338: 0x00002241
	"\"C\x038\x00\x00\"D" + // 0x22430338: 0x00002244
	"\"E\x038\x00\x00\"G" + // 0x22450338: 0x00002247
	"\"H\x038\x00\x00\"I" + // 0x22480338: 0x00002249
	"\x00=\x038\x00\x00\"`" + // 0x003D0338: 0x00002260
	"\"a\x038\x00\x00\"b" + // 0x22610338: 0x00002262
	"\"M\x038\x00\x00\"m" + // 0x224D0338: 0x0000226D
	"\x00<\x038\x00\x00\"n" + // 0x003C0338: 0x0000226E
	"\x00>\x038\x00\x00\"o" + // 0x003E0338: 0x0000226F
	"\"d\x038\x00\x00\"p" + // 0x22640338: 0x00002270
	"\"e\x038\x00\x00\"q" + // 0x22650338: 0x00002271
	"\"r\x038\x00\x00\"t" + // 0x22720338: 0x00002274
	"\"s\x038\x00\x00\"u" + // 0x22730338: 0x00002275
	"\"v\x038\x00\x00\"x" + // 0x22760338: 0x00002278
	"\"w\x038\x00\x00\"y" + // 0x22770338: 0x00002279
	"\"z\x038\x00\x00\"\x80" + // 0x227A0338: 0x00002280
	"\"{\x038\x00\x00\"\x81" + // 0x227B0338: 0x00002281
	"\"\x82\x038\x00\x00\"\x84" + // 0x22820338: 0x00002284
	"\"\x83\x038\x00\x00\"\x85" + // 0x22830338: 0x00002285
	"\"\x86\x038\x00\x00\"\x88" + // 0x22860338: 0x00002288
	"\"\x87\x038\x00\x00\"\x89" + // 0x22870338: 0x00002289
	"\"\xa2\x038\x00\x00\"\xac" + // 0x22A20338: 0x000022AC
	"\"\xa8\x038\x00\x00\"\xad" + // 0x22A80338: 0x000022AD
	"\"\xa9\x038\x00\x00\"\xae" + // 0x22A90338: 0x000022AE
	"\"\xab\x038\x00\x00\"\xaf" + // 0x22AB0338: 0x000022AF
	"\"|\x038\x00\x00\"\xe0" + // 0x227C0338: 0x000022E0
	"\"}\x038\x00\x00\"\xe1" + // 0x227D0338: 0x000022E1
	"\"\x91\x038\x00\x00\"\xe2" + // 0x22910338: 0x000022E2
	"\"\x92\x038\x00\x00\"\xe3" + // 0x22920338: 0x000022E3
	"\"\xb2\x038\x00\x00\"\xea" + // 0x22B20338: 0x000022EA
	"\"\xb3\x038\x00\x00\"\xeb" + // 0x22B30338: 0x000022EB
	"\"\xb4\x038\x00\x00\"\xec" + // 0x22B40338: 0x000022EC
	"\"\xb5\x038\x00\x00\"\xed" + // 0x22B50338: 0x000022ED
	"0K0\x99\x00\x000L" + // 0x304B3099: 0x0000304C
	"0M0\x99\x00\x000N" + // 0x304D3099: 0x0000304E
	"0O0\x99\x00\x000P" + // 0x304F3099: 0x00003050
	"0Q0\x99\x00\x000R" + // 0x30513099: 0x00003052
	"0S0\x99\x00\x000T" + // 0x30533099: 0x00003054
	"0U0\x99\x00\x000V" + // 0x30553099: 0x00003056
	"0W0\x99\x00\x000X" + // 0x30573099: 0x00003058
	"0Y0\x99\x00\x000Z" + // 0x30593099: 0x0000305A
	"0[0\x99\x00\x000\\" + // 0x305B3099: 0x0000305C
	"0]0\x99\x00\x000^" + // 0x305D3099: 0x0000305E
	"0_0\x99\x00\x000`" + // 0x305F3099: 0x00003060
	"0a0\x99\x00\x000b" + // 0x30613099: 0x00003062
	"0d0\x99\x00\x000e" + // 0x30643099: 0x00003065
	"0f0\x99\x00\x000g" + // 0x30663099: 0x00003067
	"0h0\x99\x00\x000i" + // 0x30683099: 0x00003069
	"0o0\x99\x00\x000p" + // 0x306F3099: 0x00003070
	"0o0\x9a\x00\x000q" + // 0x306F309A: 0x00003071
	"0r0\x99\x00\x000s" + // 0x30723099: 0x00003073
	"0r0\x9a\x00\x000t" + // 0x3072309A: 0x00003074
	"0u0\x99\x00\x000v" + // 0x30753099: 0x00003076
	"0u0\x9a\x00\x000w" + // 0x3075309A: 0x00003077
	"0x0\x99\x00\x000y" + // 0x30783099: 0x00003079
	"0x0\x9a\x00\x000z" + // 0x3078309A: 0x0000307A
	"0{0\x99\x00\x000|" + // 0x307B3099: 0x0000307C
	"0{0\x9a\x00\x000}" + // 0x307B309A: 0x0000307D
	"0F0\x99\x00\x000\x94" + // 0x30463099: 0x00003094
	"0\x9d0\x99\x00\x000\x9e" + // 0x309D3099: 0x0000309E
	"0\xab0\x99\x00\x000\xac" + // 0x30AB3099: 0x000030AC
	"0\xad0\x99\x00\x000\xae" + // 0x30AD3099: 0x000030AE
	"0\xaf0\x99\x00\x000\xb0" + // 0x30AF3099: 0x000030B0
	"0\xb10\x99\x00\x000\xb2" + // 0x30B13099: 0x000030B2
	"0\xb30\x99\x00\x000\xb4" + // 0x30B33099: 0x000030B4
	"0\xb50\x99\x00\x000\xb6" + // 0x30B53099: 0x000030B6
	"0\xb70\x99\x00\x000\xb8" + // 0x30B73099: 0x000030B8
	"0\xb90\x99\x00\x000\xba" + // 0x30B93099: 0x000030BA
	"0\xbb0\x99\x00\x000\xbc" + // 0x30BB3099: 0x000030BC
	"0\xbd0\x99\x00\x000\xbe" + // 0x30BD3099: 0x000030BE
	"0\xbf0\x99\x00\x000\xc0" + // 0x30BF3099: 0x000030C0
	"0\xc10\x99\x00\x000\xc2" + // 0x30C13099: 0x000030C2
	"0\xc40\x99\x00\x000\xc5" + // 0x30C43099: 0x000030C5
	"0\xc60\x99\x00\x000\xc7" + // 0x30C63099: 0x000030C7
	"0\xc80\x99\x00\x000\xc9" + // 0x30C83099: 0x000030C9
	"0\xcf0\x99\x00\x000\xd0" + // 0x30CF3099: 0x000030D0
	"0\xcf0\x9a\x00\x000\xd1" + // 0x30CF309A: 0x000030D1
	"0\xd20\x99\x00\x000\xd3" + // 0x30D23099: 0x000030D3
	"0\xd20\x9a\x00\x000\xd4" + // 0x30D2309A: 0x000030D4
	"0\xd50\x99\x00\x000\xd6" + // 0x30D53099: 0x000030D6
	"0\xd50\x9a\x00\x000\xd7" + // 0x30D5309A: 0x000030D7
	"0\xd80\x99\x00\x000\xd9" + // 0x30D83099: 0x000030D9
	"0\xd80\x9a\x00\x000\xda" + // 0x30D8309A: 0x000030DA
	"0\xdb0\x99\x00\x000\xdc" + // 0x30DB3099: 0x000030DC
	"0\xdb0\x9a\x00\x000\xdd" + // 0x30DB309A: 0x000030DD
	"0\xa60\x99\x00\x000\xf4" + // 0x30A63099: 0x000030F4
	"0\xef0\x99\x00\x000\xf7" + // 0x30EF3099: 0x000030F7
	"0\xf00\x99\x00\x000\xf8" + // 0x30F03099: 0x000030F8
	"0\xf10\x99\x00\x000\xf9" + // 0x30F13099: 0x000030F9
	"0\xf20\x99\x00\x000\xfa" + // 0x30F23099: 0x000030FA
	"0\xfd0\x99\x00\x000\xfe" + // 0x30FD3099: 0x000030FE
	"\x10\x99\x10\xba\x00\x01\x10\x9a" + // 0x109910BA: 0x0001109A
	"\x10\x9b\x10\xba\x00\x01\x10\x9c" + // 0x109B10BA: 0x0001109C
	"\x10\xa5\x10\xba\x00\x01\x10\xab" + // 0x10A510BA: 0x000110AB
	"\x111\x11'\x00\x01\x11." + // 0x11311127: 0x0001112E
	"\x112\x11'\x00\x01\x11/" + // 0x11321127: 0x0001112F
	"\x13G\x13>\x00\x01\x13K" + // 0x1347133E: 0x0001134B
	"\x13G\x13W\x00\x01\x13L" + // 0x13471357: 0x0001134C
	"\x14\xb9\x14\xba\x00\x01\x14\xbb" + // 0x14B914BA: 0x000114BB
	"\x14\xb9\x14\xb0\x00\x01\x14\xbc" + // 0x14B914B0: 0x000114BC
	"\x14\xb9\x14\xbd\x00\x01\x14\xbe" + // 0x14B914BD: 0x000114BE
	"\x15\xb8\x15\xaf\x00\x01\x15\xba" + // 0x15B815AF: 0x000115BA
	"\x15\xb9\x15\xaf\x00\x01\x15\xbb" + // 0x15B915AF: 0x000115BB
	""
	// Total size of tables: 53KB (54226 bytes)
 07070100000F42000081A4000000000000000000000001645E367C0005E0C0000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/text/unicode/norm/tables11.0.0.go // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.

//go:build go1.13 && !go1.14
// +build go1.13,!go1.14

package norm

import "sync"

const (
	// Version is the Unicode edition from which the tables are derived.
	Version = "11.0.0"

	// MaxTransformChunkSize indicates the maximum number of bytes that Transform
	// may need to write atomically for any Form. Making a destination buffer at
	// least this size ensures that Transform can always make progress and that
	// the user does not need to grow the buffer on an ErrShortDst.
	MaxTransformChunkSize = 35 + maxNonStarters*4
)

var ccc = [55]uint8{
	0, 1, 7, 8, 9, 10, 11, 12,
	13, 14, 15, 16, 17, 18, 19, 20,
	21, 22, 23, 24, 25, 26, 27, 28,
	29, 30, 31, 32, 33, 34, 35, 36,
	84, 91, 103, 107, 118, 122, 129, 130,
	132, 202, 214, 216, 218, 220, 222, 224,
	226, 228, 230, 232, 233, 234, 240,
}

const (
	firstMulti            = 0x186D
	firstCCC              = 0x2C9E
	endMulti              = 0x2F60
	firstLeadingCCC       = 0x49AE
	firstCCCZeroExcept    = 0x4A78
	firstStarterWithNLead = 0x4A9F
	lastDecomp            = 0x4AA1
	maxDecomp             = 0x8000
)

// decomps: 19105 bytes
var decomps = [...]byte{
	// Bytes 0 - 3f
	0x00, 0x41, 0x20, 0x41, 0x21, 0x41, 0x22, 0x41,
	0x23, 0x41, 0x24, 0x41, 0x25, 0x41, 0x26, 0x41,
	0x27, 0x41, 0x28, 0x41, 0x29, 0x41, 0x2A, 0x41,
	0x2B, 0x41, 0x2C, 0x41, 0x2D, 0x41, 0x2E, 0x41,
	0x2F, 0x41, 0x30, 0x41, 0x31, 0x41, 0x32, 0x41,
	0x33, 0x41, 0x34, 0x41, 0x35, 0x41, 0x36, 0x41,
	0x37, 0x41, 0x38, 0x41, 0x39, 0x41, 0x3A, 0x41,
	0x3B, 0x41, 0x3C, 0x41, 0x3D, 0x41, 0x3E, 0x41,
	// Bytes 40 - 7f
	0x3F, 0x41, 0x40, 0x41, 0x41, 0x41, 0x42, 0x41,
	0x43, 0x41, 0x44, 0x41, 0x45, 0x41, 0x46, 0x41,
	0x47, 0x41, 0x48, 0x41, 0x49, 0x41, 0x4A, 0x41,
	0x4B, 0x41, 0x4C, 0x41, 0x4D, 0x41, 0x4E, 0x41,
	0x4F, 0x41, 0x50, 0x41, 0x51, 0x41, 0x52, 0x41,
	0x53, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41,
	0x57, 0x41, 0x58, 0x41, 0x59, 0x41, 0x5A, 0x41,
	0x5B, 0x41, 0x5C, 0x41, 0x5D, 0x41, 0x5E, 0x41,
	// Bytes 80 - bf
	0x5F, 0x41, 0x60, 0x41, 0x61, 0x41, 0x62, 0x41,
	0x63, 0x41, 0x64, 0x41, 0x65, 0x41, 0x66, 0x41,
	0x67, 0x41, 0x68, 0x41, 0x69, 0x41, 0x6A, 0x41,
	0x6B, 0x41, 0x6C, 0x41, 0x6D, 0x41, 0x6E, 0x41,
	0x6F, 0x41, 0x70, 0x41, 0x71, 0x41, 0x72, 0x41,
	0x73, 0x41, 0x74, 0x41, 0x75, 0x41, 0x76, 0x41,
	0x77, 0x41, 0x78, 0x41, 0x79, 0x41, 0x7A, 0x41,
	0x7B, 0x41, 0x7C, 0x41, 0x7D, 0x41, 0x7E, 0x42,
	// Bytes c0 - ff
	0xC2, 0xA2, 0x42, 0xC2, 0xA3, 0x42, 0xC2, 0xA5,
	0x42, 0xC2, 0xA6, 0x42, 0xC2, 0xAC, 0x42, 0xC2,
	0xB7, 0x42, 0xC3, 0x86, 0x42, 0xC3, 0xB0, 0x42,
	0xC4, 0xA6, 0x42, 0xC4, 0xA7, 0x42, 0xC4, 0xB1,
	0x42, 0xC5, 0x8B, 0x42, 0xC5, 0x93, 0x42, 0xC6,
	0x8E, 0x42, 0xC6, 0x90, 0x42, 0xC6, 0xAB, 0x42,
	0xC8, 0xA2, 0x42, 0xC8, 0xB7, 0x42, 0xC9, 0x90,
	0x42, 0xC9, 0x91, 0x42, 0xC9, 0x92, 0x42, 0xC9,
	// Bytes 100 - 13f
	0x94, 0x42, 0xC9, 0x95, 0x42, 0xC9, 0x99, 0x42,
	0xC9, 0x9B, 0x42, 0xC9, 0x9C, 0x42, 0xC9, 0x9F,
	0x42, 0xC9, 0xA1, 0x42, 0xC9, 0xA3, 0x42, 0xC9,
	0xA5, 0x42, 0xC9, 0xA6, 0x42, 0xC9, 0xA8, 0x42,
	0xC9, 0xA9, 0x42, 0xC9, 0xAA, 0x42, 0xC9, 0xAB,
	0x42, 0xC9, 0xAD, 0x42, 0xC9, 0xAF, 0x42, 0xC9,
	0xB0, 0x42, 0xC9, 0xB1, 0x42, 0xC9, 0xB2, 0x42,
	0xC9, 0xB3, 0x42, 0xC9, 0xB4, 0x42, 0xC9, 0xB5,
	// Bytes 140 - 17f
	0x42, 0xC9, 0xB8, 0x42, 0xC9, 0xB9, 0x42, 0xC9,
	0xBB, 0x42, 0xCA, 0x81, 0x42, 0xCA, 0x82, 0x42,
	0xCA, 0x83, 0x42, 0xCA, 0x89, 0x42, 0xCA, 0x8A,
	0x42, 0xCA, 0x8B, 0x42, 0xCA, 0x8C, 0x42, 0xCA,
	0x90, 0x42, 0xCA, 0x91, 0x42, 0xCA, 0x92, 0x42,
	0xCA, 0x95, 0x42, 0xCA, 0x9D, 0x42, 0xCA, 0x9F,
	0x42, 0xCA, 0xB9, 0x42, 0xCE, 0x91, 0x42, 0xCE,
	0x92, 0x42, 0xCE, 0x93, 0x42, 0xCE, 0x94, 0x42,
	// Bytes 180 - 1bf
	0xCE, 0x95, 0x42, 0xCE, 0x96, 0x42, 0xCE, 0x97,
	0x42, 0xCE, 0x98, 0x42, 0xCE, 0x99, 0x42, 0xCE,
	0x9A, 0x42, 0xCE, 0x9B, 0x42, 0xCE, 0x9C, 0x42,
	0xCE, 0x9D, 0x42, 0xCE, 0x9E, 0x42, 0xCE, 0x9F,
	0x42, 0xCE, 0xA0, 0x42, 0xCE, 0xA1, 0x42, 0xCE,
	0xA3, 0x42, 0xCE, 0xA4, 0x42, 0xCE, 0xA5, 0x42,
	0xCE, 0xA6, 0x42, 0xCE, 0xA7, 0x42, 0xCE, 0xA8,
	0x42, 0xCE, 0xA9, 0x42, 0xCE, 0xB1, 0x42, 0xCE,
	// Bytes 1c0 - 1ff
	0xB2, 0x42, 0xCE, 0xB3, 0x42, 0xCE, 0xB4, 0x42,
	0xCE, 0xB5, 0x42, 0xCE, 0xB6, 0x42, 0xCE, 0xB7,
	0x42, 0xCE, 0xB8, 0x42, 0xCE, 0xB9, 0x42, 0xCE,
	0xBA, 0x42, 0xCE, 0xBB, 0x42, 0xCE, 0xBC, 0x42,
	0xCE, 0xBD, 0x42, 0xCE, 0xBE, 0x42, 0xCE, 0xBF,
	0x42, 0xCF, 0x80, 0x42, 0xCF, 0x81, 0x42, 0xCF,
	0x82, 0x42, 0xCF, 0x83, 0x42, 0xCF, 0x84, 0x42,
	0xCF, 0x85, 0x42, 0xCF, 0x86, 0x42, 0xCF, 0x87,
	// Bytes 200 - 23f
	0x42, 0xCF, 0x88, 0x42, 0xCF, 0x89, 0x42, 0xCF,
	0x9C, 0x42, 0xCF, 0x9D, 0x42, 0xD0, 0xBD, 0x42,
	0xD1, 0x8A, 0x42, 0xD1, 0x8C, 0x42, 0xD7, 0x90,
	0x42, 0xD7, 0x91, 0x42, 0xD7, 0x92, 0x42, 0xD7,
	0x93, 0x42, 0xD7, 0x94, 0x42, 0xD7, 0x9B, 0x42,
	0xD7, 0x9C, 0x42, 0xD7, 0x9D, 0x42, 0xD7, 0xA2,
	0x42, 0xD7, 0xA8, 0x42, 0xD7, 0xAA, 0x42, 0xD8,
	0xA1, 0x42, 0xD8, 0xA7, 0x42, 0xD8, 0xA8, 0x42,
	// Bytes 240 - 27f
	0xD8, 0xA9, 0x42, 0xD8, 0xAA, 0x42, 0xD8, 0xAB,
	0x42, 0xD8, 0xAC, 0x42, 0xD8, 0xAD, 0x42, 0xD8,
	0xAE, 0x42, 0xD8, 0xAF, 0x42, 0xD8, 0xB0, 0x42,
	0xD8, 0xB1, 0x42, 0xD8, 0xB2, 0x42, 0xD8, 0xB3,
	0x42, 0xD8, 0xB4, 0x42, 0xD8, 0xB5, 0x42, 0xD8,
	0xB6, 0x42, 0xD8, 0xB7, 0x42, 0xD8, 0xB8, 0x42,
	0xD8, 0xB9, 0x42, 0xD8, 0xBA, 0x42, 0xD9, 0x81,
	0x42, 0xD9, 0x82, 0x42, 0xD9, 0x83, 0x42, 0xD9,
	// Bytes 280 - 2bf
	0x84, 0x42, 0xD9, 0x85, 0x42, 0xD9, 0x86, 0x42,
	0xD9, 0x87, 0x42, 0xD9, 0x88, 0x42, 0xD9, 0x89,
	0x42, 0xD9, 0x8A, 0x42, 0xD9, 0xAE, 0x42, 0xD9,
	0xAF, 0x42, 0xD9, 0xB1, 0x42, 0xD9, 0xB9, 0x42,
	0xD9, 0xBA, 0x42, 0xD9, 0xBB, 0x42, 0xD9, 0xBE,
	0x42, 0xD9, 0xBF, 0x42, 0xDA, 0x80, 0x42, 0xDA,
	0x83, 0x42, 0xDA, 0x84, 0x42, 0xDA, 0x86, 0x42,
	0xDA, 0x87, 0x42, 0xDA, 0x88, 0x42, 0xDA, 0x8C,
	// Bytes 2c0 - 2ff
	0x42, 0xDA, 0x8D, 0x42, 0xDA, 0x8E, 0x42, 0xDA,
	0x91, 0x42, 0xDA, 0x98, 0x42, 0xDA, 0xA1, 0x42,
	0xDA, 0xA4, 0x42, 0xDA, 0xA6, 0x42, 0xDA, 0xA9,
	0x42, 0xDA, 0xAD, 0x42, 0xDA, 0xAF, 0x42, 0xDA,
	0xB1, 0x42, 0xDA, 0xB3, 0x42, 0xDA, 0xBA, 0x42,
	0xDA, 0xBB, 0x42, 0xDA, 0xBE, 0x42, 0xDB, 0x81,
	0x42, 0xDB, 0x85, 0x42, 0xDB, 0x86, 0x42, 0xDB,
	0x87, 0x42, 0xDB, 0x88, 0x42, 0xDB, 0x89, 0x42,
	// Bytes 300 - 33f
	0xDB, 0x8B, 0x42, 0xDB, 0x8C, 0x42, 0xDB, 0x90,
	0x42, 0xDB, 0x92, 0x43, 0xE0, 0xBC, 0x8B, 0x43,
	0xE1, 0x83, 0x9C, 0x43, 0xE1, 0x84, 0x80, 0x43,
	0xE1, 0x84, 0x81, 0x43, 0xE1, 0x84, 0x82, 0x43,
	0xE1, 0x84, 0x83, 0x43, 0xE1, 0x84, 0x84, 0x43,
	0xE1, 0x84, 0x85, 0x43, 0xE1, 0x84, 0x86, 0x43,
	0xE1, 0x84, 0x87, 0x43, 0xE1, 0x84, 0x88, 0x43,
	0xE1, 0x84, 0x89, 0x43, 0xE1, 0x84, 0x8A, 0x43,
	// Bytes 340 - 37f
	0xE1, 0x84, 0x8B, 0x43, 0xE1, 0x84, 0x8C, 0x43,
	0xE1, 0x84, 0x8D, 0x43, 0xE1, 0x84, 0x8E, 0x43,
	0xE1, 0x84, 0x8F, 0x43, 0xE1, 0x84, 0x90, 0x43,
	0xE1, 0x84, 0x91, 0x43, 0xE1, 0x84, 0x92, 0x43,
	0xE1, 0x84, 0x94, 0x43, 0xE1, 0x84, 0x95, 0x43,
	0xE1, 0x84, 0x9A, 0x43, 0xE1, 0x84, 0x9C, 0x43,
	0xE1, 0x84, 0x9D, 0x43, 0xE1, 0x84, 0x9E, 0x43,
	0xE1, 0x84, 0xA0, 0x43, 0xE1, 0x84, 0xA1, 0x43,
	// Bytes 380 - 3bf
	0xE1, 0x84, 0xA2, 0x43, 0xE1, 0x84, 0xA3, 0x43,
	0xE1, 0x84, 0xA7, 0x43, 0xE1, 0x84, 0xA9, 0x43,
	0xE1, 0x84, 0xAB, 0x43, 0xE1, 0x84, 0xAC, 0x43,
	0xE1, 0x84, 0xAD, 0x43, 0xE1, 0x84, 0xAE, 0x43,
	0xE1, 0x84, 0xAF, 0x43, 0xE1, 0x84, 0xB2, 0x43,
	0xE1, 0x84, 0xB6, 0x43, 0xE1, 0x85, 0x80, 0x43,
	0xE1, 0x85, 0x87, 0x43, 0xE1, 0x85, 0x8C, 0x43,
	0xE1, 0x85, 0x97, 0x43, 0xE1, 0x85, 0x98, 0x43,
	// Bytes 3c0 - 3ff
	0xE1, 0x85, 0x99, 0x43, 0xE1, 0x85, 0xA0, 0x43,
	0xE1, 0x86, 0x84, 0x43, 0xE1, 0x86, 0x85, 0x43,
	0xE1, 0x86, 0x88, 0x43, 0xE1, 0x86, 0x91, 0x43,
	0xE1, 0x86, 0x92, 0x43, 0xE1, 0x86, 0x94, 0x43,
	0xE1, 0x86, 0x9E, 0x43, 0xE1, 0x86, 0xA1, 0x43,
	0xE1, 0x87, 0x87, 0x43, 0xE1, 0x87, 0x88, 0x43,
	0xE1, 0x87, 0x8C, 0x43, 0xE1, 0x87, 0x8E, 0x43,
	0xE1, 0x87, 0x93, 0x43, 0xE1, 0x87, 0x97, 0x43,
	// Bytes 400 - 43f
	0xE1, 0x87, 0x99, 0x43, 0xE1, 0x87, 0x9D, 0x43,
	0xE1, 0x87, 0x9F, 0x43, 0xE1, 0x87, 0xB1, 0x43,
	0xE1, 0x87, 0xB2, 0x43, 0xE1, 0xB4, 0x82, 0x43,
	0xE1, 0xB4, 0x96, 0x43, 0xE1, 0xB4, 0x97, 0x43,
	0xE1, 0xB4, 0x9C, 0x43, 0xE1, 0xB4, 0x9D, 0x43,
	0xE1, 0xB4, 0xA5, 0x43, 0xE1, 0xB5, 0xBB, 0x43,
	0xE1, 0xB6, 0x85, 0x43, 0xE2, 0x80, 0x82, 0x43,
	0xE2, 0x80, 0x83, 0x43, 0xE2, 0x80, 0x90, 0x43,
	// Bytes 440 - 47f
	0xE2, 0x80, 0x93, 0x43, 0xE2, 0x80, 0x94, 0x43,
	0xE2, 0x82, 0xA9, 0x43, 0xE2, 0x86, 0x90, 0x43,
	0xE2, 0x86, 0x91, 0x43, 0xE2, 0x86, 0x92, 0x43,
	0xE2, 0x86, 0x93, 0x43, 0xE2, 0x88, 0x82, 0x43,
	0xE2, 0x88, 0x87, 0x43, 0xE2, 0x88, 0x91, 0x43,
	0xE2, 0x88, 0x92, 0x43, 0xE2, 0x94, 0x82, 0x43,
	0xE2, 0x96, 0xA0, 0x43, 0xE2, 0x97, 0x8B, 0x43,
	0xE2, 0xA6, 0x85, 0x43, 0xE2, 0xA6, 0x86, 0x43,
	// Bytes 480 - 4bf
	0xE2, 0xB5, 0xA1, 0x43, 0xE3, 0x80, 0x81, 0x43,
	0xE3, 0x80, 0x82, 0x43, 0xE3, 0x80, 0x88, 0x43,
	0xE3, 0x80, 0x89, 0x43, 0xE3, 0x80, 0x8A, 0x43,
	0xE3, 0x80, 0x8B, 0x43, 0xE3, 0x80, 0x8C, 0x43,
	0xE3, 0x80, 0x8D, 0x43, 0xE3, 0x80, 0x8E, 0x43,
	0xE3, 0x80, 0x8F, 0x43, 0xE3, 0x80, 0x90, 0x43,
	0xE3, 0x80, 0x91, 0x43, 0xE3, 0x80, 0x92, 0x43,
	0xE3, 0x80, 0x94, 0x43, 0xE3, 0x80, 0x95, 0x43,
	// Bytes 4c0 - 4ff
	0xE3, 0x80, 0x96, 0x43, 0xE3, 0x80, 0x97, 0x43,
	0xE3, 0x82, 0xA1, 0x43, 0xE3, 0x82, 0xA2, 0x43,
	0xE3, 0x82, 0xA3, 0x43, 0xE3, 0x82, 0xA4, 0x43,
	0xE3, 0x82, 0xA5, 0x43, 0xE3, 0x82, 0xA6, 0x43,
	0xE3, 0x82, 0xA7, 0x43, 0xE3, 0x82, 0xA8, 0x43,
	0xE3, 0x82, 0xA9, 0x43, 0xE3, 0x82, 0xAA, 0x43,
	0xE3, 0x82, 0xAB, 0x43, 0xE3, 0x82, 0xAD, 0x43,
	0xE3, 0x82, 0xAF, 0x43, 0xE3, 0x82, 0xB1, 0x43,
	// Bytes 500 - 53f
	0xE3, 0x82, 0xB3, 0x43, 0xE3, 0x82, 0xB5, 0x43,
	0xE3, 0x82, 0xB7, 0x43, 0xE3, 0x82, 0xB9, 0x43,
	0xE3, 0x82, 0xBB, 0x43, 0xE3, 0x82, 0xBD, 0x43,
	0xE3, 0x82, 0xBF, 0x43, 0xE3, 0x83, 0x81, 0x43,
	0xE3, 0x83, 0x83, 0x43, 0xE3, 0x83, 0x84, 0x43,
	0xE3, 0x83, 0x86, 0x43, 0xE3, 0x83, 0x88, 0x43,
	0xE3, 0x83, 0x8A, 0x43, 0xE3, 0x83, 0x8B, 0x43,
	0xE3, 0x83, 0x8C, 0x43, 0xE3, 0x83, 0x8D, 0x43,
	// Bytes 540 - 57f
	0xE3, 0x83, 0x8E, 0x43, 0xE3, 0x83, 0x8F, 0x43,
	0xE3, 0x83, 0x92, 0x43, 0xE3, 0x83, 0x95, 0x43,
	0xE3, 0x83, 0x98, 0x43, 0xE3, 0x83, 0x9B, 0x43,
	0xE3, 0x83, 0x9E, 0x43, 0xE3, 0x83, 0x9F, 0x43,
	0xE3, 0x83, 0xA0, 0x43, 0xE3, 0x83, 0xA1, 0x43,
	0xE3, 0x83, 0xA2, 0x43, 0xE3, 0x83, 0xA3, 0x43,
	0xE3, 0x83, 0xA4, 0x43, 0xE3, 0x83, 0xA5, 0x43,
	0xE3, 0x83, 0xA6, 0x43, 0xE3, 0x83, 0xA7, 0x43,
	// Bytes 580 - 5bf
	0xE3, 0x83, 0xA8, 0x43, 0xE3, 0x83, 0xA9, 0x43,
	0xE3, 0x83, 0xAA, 0x43, 0xE3, 0x83, 0xAB, 0x43,
	0xE3, 0x83, 0xAC, 0x43, 0xE3, 0x83, 0xAD, 0x43,
	0xE3, 0x83, 0xAF, 0x43, 0xE3, 0x83, 0xB0, 0x43,
	0xE3, 0x83, 0xB1, 0x43, 0xE3, 0x83, 0xB2, 0x43,
	0xE3, 0x83, 0xB3, 0x43, 0xE3, 0x83, 0xBB, 0x43,
	0xE3, 0x83, 0xBC, 0x43, 0xE3, 0x92, 0x9E, 0x43,
	0xE3, 0x92, 0xB9, 0x43, 0xE3, 0x92, 0xBB, 0x43,
	// Bytes 5c0 - 5ff
	0xE3, 0x93, 0x9F, 0x43, 0xE3, 0x94, 0x95, 0x43,
	0xE3, 0x9B, 0xAE, 0x43, 0xE3, 0x9B, 0xBC, 0x43,
	0xE3, 0x9E, 0x81, 0x43, 0xE3, 0xA0, 0xAF, 0x43,
	0xE3, 0xA1, 0xA2, 0x43, 0xE3, 0xA1, 0xBC, 0x43,
	0xE3, 0xA3, 0x87, 0x43, 0xE3, 0xA3, 0xA3, 0x43,
	0xE3, 0xA4, 0x9C, 0x43, 0xE3, 0xA4, 0xBA, 0x43,
	0xE3, 0xA8, 0xAE, 0x43, 0xE3, 0xA9, 0xAC, 0x43,
	0xE3, 0xAB, 0xA4, 0x43, 0xE3, 0xAC, 0x88, 0x43,
	// Bytes 600 - 63f
	0xE3, 0xAC, 0x99, 0x43, 0xE3, 0xAD, 0x89, 0x43,
	0xE3, 0xAE, 0x9D, 0x43, 0xE3, 0xB0, 0x98, 0x43,
	0xE3, 0xB1, 0x8E, 0x43, 0xE3, 0xB4, 0xB3, 0x43,
	0xE3, 0xB6, 0x96, 0x43, 0xE3, 0xBA, 0xAC, 0x43,
	0xE3, 0xBA, 0xB8, 0x43, 0xE3, 0xBC, 0x9B, 0x43,
	0xE3, 0xBF, 0xBC, 0x43, 0xE4, 0x80, 0x88, 0x43,
	0xE4, 0x80, 0x98, 0x43, 0xE4, 0x80, 0xB9, 0x43,
	0xE4, 0x81, 0x86, 0x43, 0xE4, 0x82, 0x96, 0x43,
	// Bytes 640 - 67f
	0xE4, 0x83, 0xA3, 0x43, 0xE4, 0x84, 0xAF, 0x43,
	0xE4, 0x88, 0x82, 0x43, 0xE4, 0x88, 0xA7, 0x43,
	0xE4, 0x8A, 0xA0, 0x43, 0xE4, 0x8C, 0x81, 0x43,
	0xE4, 0x8C, 0xB4, 0x43, 0xE4, 0x8D, 0x99, 0x43,
	0xE4, 0x8F, 0x95, 0x43, 0xE4, 0x8F, 0x99, 0x43,
	0xE4, 0x90, 0x8B, 0x43, 0xE4, 0x91, 0xAB, 0x43,
	0xE4, 0x94, 0xAB, 0x43, 0xE4, 0x95, 0x9D, 0x43,
	0xE4, 0x95, 0xA1, 0x43, 0xE4, 0x95, 0xAB, 0x43,
	// Bytes 680 - 6bf
	0xE4, 0x97, 0x97, 0x43, 0xE4, 0x97, 0xB9, 0x43,
	0xE4, 0x98, 0xB5, 0x43, 0xE4, 0x9A, 0xBE, 0x43,
	0xE4, 0x9B, 0x87, 0x43, 0xE4, 0xA6, 0x95, 0x43,
	0xE4, 0xA7, 0xA6, 0x43, 0xE4, 0xA9, 0xAE, 0x43,
	0xE4, 0xA9, 0xB6, 0x43, 0xE4, 0xAA, 0xB2, 0x43,
	0xE4, 0xAC, 0xB3, 0x43, 0xE4, 0xAF, 0x8E, 0x43,
	0xE4, 0xB3, 0x8E, 0x43, 0xE4, 0xB3, 0xAD, 0x43,
	0xE4, 0xB3, 0xB8, 0x43, 0xE4, 0xB5, 0x96, 0x43,
	// Bytes 6c0 - 6ff
	0xE4, 0xB8, 0x80, 0x43, 0xE4, 0xB8, 0x81, 0x43,
	0xE4, 0xB8, 0x83, 0x43, 0xE4, 0xB8, 0x89, 0x43,
	0xE4, 0xB8, 0x8A, 0x43, 0xE4, 0xB8, 0x8B, 0x43,
	0xE4, 0xB8, 0x8D, 0x43, 0xE4, 0xB8, 0x99, 0x43,
	0xE4, 0xB8, 0xA6, 0x43, 0xE4, 0xB8, 0xA8, 0x43,
	0xE4, 0xB8, 0xAD, 0x43, 0xE4, 0xB8, 0xB2, 0x43,
	0xE4, 0xB8, 0xB6, 0x43, 0xE4, 0xB8, 0xB8, 0x43,
	0xE4, 0xB8, 0xB9, 0x43, 0xE4, 0xB8, 0xBD, 0x43,
	// Bytes 700 - 73f
	0xE4, 0xB8, 0xBF, 0x43, 0xE4, 0xB9, 0x81, 0x43,
	0xE4, 0xB9, 0x99, 0x43, 0xE4, 0xB9, 0x9D, 0x43,
	0xE4, 0xBA, 0x82, 0x43, 0xE4, 0xBA, 0x85, 0x43,
	0xE4, 0xBA, 0x86, 0x43, 0xE4, 0xBA, 0x8C, 0x43,
	0xE4, 0xBA, 0x94, 0x43, 0xE4, 0xBA, 0xA0, 0x43,
	0xE4, 0xBA, 0xA4, 0x43, 0xE4, 0xBA, 0xAE, 0x43,
	0xE4, 0xBA, 0xBA, 0x43, 0xE4, 0xBB, 0x80, 0x43,
	0xE4, 0xBB, 0x8C, 0x43, 0xE4, 0xBB, 0xA4, 0x43,
	// Bytes 740 - 77f
	0xE4, 0xBC, 0x81, 0x43, 0xE4, 0xBC, 0x91, 0x43,
	0xE4, 0xBD, 0xA0, 0x43, 0xE4, 0xBE, 0x80, 0x43,
	0xE4, 0xBE, 0x86, 0x43, 0xE4, 0xBE, 0x8B, 0x43,
	0xE4, 0xBE, 0xAE, 0x43, 0xE4, 0xBE, 0xBB, 0x43,
	0xE4, 0xBE, 0xBF, 0x43, 0xE5, 0x80, 0x82, 0x43,
	0xE5, 0x80, 0xAB, 0x43, 0xE5, 0x81, 0xBA, 0x43,
	0xE5, 0x82, 0x99, 0x43, 0xE5, 0x83, 0x8F, 0x43,
	0xE5, 0x83, 0x9A, 0x43, 0xE5, 0x83, 0xA7, 0x43,
	// Bytes 780 - 7bf
	0xE5, 0x84, 0xAA, 0x43, 0xE5, 0x84, 0xBF, 0x43,
	0xE5, 0x85, 0x80, 0x43, 0xE5, 0x85, 0x85, 0x43,
	0xE5, 0x85, 0x8D, 0x43, 0xE5, 0x85, 0x94, 0x43,
	0xE5, 0x85, 0xA4, 0x43, 0xE5, 0x85, 0xA5, 0x43,
	0xE5, 0x85, 0xA7, 0x43, 0xE5, 0x85, 0xA8, 0x43,
	0xE5, 0x85, 0xA9, 0x43, 0xE5, 0x85, 0xAB, 0x43,
	0xE5, 0x85, 0xAD, 0x43, 0xE5, 0x85, 0xB7, 0x43,
	0xE5, 0x86, 0x80, 0x43, 0xE5, 0x86, 0x82, 0x43,
	// Bytes 7c0 - 7ff
	0xE5, 0x86, 0x8D, 0x43, 0xE5, 0x86, 0x92, 0x43,
	0xE5, 0x86, 0x95, 0x43, 0xE5, 0x86, 0x96, 0x43,
	0xE5, 0x86, 0x97, 0x43, 0xE5, 0x86, 0x99, 0x43,
	0xE5, 0x86, 0xA4, 0x43, 0xE5, 0x86, 0xAB, 0x43,
	0xE5, 0x86, 0xAC, 0x43, 0xE5, 0x86, 0xB5, 0x43,
	0xE5, 0x86, 0xB7, 0x43, 0xE5, 0x87, 0x89, 0x43,
	0xE5, 0x87, 0x8C, 0x43, 0xE5, 0x87, 0x9C, 0x43,
	0xE5, 0x87, 0x9E, 0x43, 0xE5, 0x87, 0xA0, 0x43,
	// Bytes 800 - 83f
	0xE5, 0x87, 0xB5, 0x43, 0xE5, 0x88, 0x80, 0x43,
	0xE5, 0x88, 0x83, 0x43, 0xE5, 0x88, 0x87, 0x43,
	0xE5, 0x88, 0x97, 0x43, 0xE5, 0x88, 0x9D, 0x43,
	0xE5, 0x88, 0xA9, 0x43, 0xE5, 0x88, 0xBA, 0x43,
	0xE5, 0x88, 0xBB, 0x43, 0xE5, 0x89, 0x86, 0x43,
	0xE5, 0x89, 0x8D, 0x43, 0xE5, 0x89, 0xB2, 0x43,
	0xE5, 0x89, 0xB7, 0x43, 0xE5, 0x8A, 0x89, 0x43,
	0xE5, 0x8A, 0x9B, 0x43, 0xE5, 0x8A, 0xA3, 0x43,
	// Bytes 840 - 87f
	0xE5, 0x8A, 0xB3, 0x43, 0xE5, 0x8A, 0xB4, 0x43,
	0xE5, 0x8B, 0x87, 0x43, 0xE5, 0x8B, 0x89, 0x43,
	0xE5, 0x8B, 0x92, 0x43, 0xE5, 0x8B, 0x9E, 0x43,
	0xE5, 0x8B, 0xA4, 0x43, 0xE5, 0x8B, 0xB5, 0x43,
	0xE5, 0x8B, 0xB9, 0x43, 0xE5, 0x8B, 0xBA, 0x43,
	0xE5, 0x8C, 0x85, 0x43, 0xE5, 0x8C, 0x86, 0x43,
	0xE5, 0x8C, 0x95, 0x43, 0xE5, 0x8C, 0x97, 0x43,
	0xE5, 0x8C, 0x9A, 0x43, 0xE5, 0x8C, 0xB8, 0x43,
	// Bytes 880 - 8bf
	0xE5, 0x8C, 0xBB, 0x43, 0xE5, 0x8C, 0xBF, 0x43,
	0xE5, 0x8D, 0x81, 0x43, 0xE5, 0x8D, 0x84, 0x43,
	0xE5, 0x8D, 0x85, 0x43, 0xE5, 0x8D, 0x89, 0x43,
	0xE5, 0x8D, 0x91, 0x43, 0xE5, 0x8D, 0x94, 0x43,
	0xE5, 0x8D, 0x9A, 0x43, 0xE5, 0x8D, 0x9C, 0x43,
	0xE5, 0x8D, 0xA9, 0x43, 0xE5, 0x8D, 0xB0, 0x43,
	0xE5, 0x8D, 0xB3, 0x43, 0xE5, 0x8D, 0xB5, 0x43,
	0xE5, 0x8D, 0xBD, 0x43, 0xE5, 0x8D, 0xBF, 0x43,
	// Bytes 8c0 - 8ff
	0xE5, 0x8E, 0x82, 0x43, 0xE5, 0x8E, 0xB6, 0x43,
	0xE5, 0x8F, 0x83, 0x43, 0xE5, 0x8F, 0x88, 0x43,
	0xE5, 0x8F, 0x8A, 0x43, 0xE5, 0x8F, 0x8C, 0x43,
	0xE5, 0x8F, 0x9F, 0x43, 0xE5, 0x8F, 0xA3, 0x43,
	0xE5, 0x8F, 0xA5, 0x43, 0xE5, 0x8F, 0xAB, 0x43,
	0xE5, 0x8F, 0xAF, 0x43, 0xE5, 0x8F, 0xB1, 0x43,
	0xE5, 0x8F, 0xB3, 0x43, 0xE5, 0x90, 0x86, 0x43,
	0xE5, 0x90, 0x88, 0x43, 0xE5, 0x90, 0x8D, 0x43,
	// Bytes 900 - 93f
	0xE5, 0x90, 0x8F, 0x43, 0xE5, 0x90, 0x9D, 0x43,
	0xE5, 0x90, 0xB8, 0x43, 0xE5, 0x90, 0xB9, 0x43,
	0xE5, 0x91, 0x82, 0x43, 0xE5, 0x91, 0x88, 0x43,
	0xE5, 0x91, 0xA8, 0x43, 0xE5, 0x92, 0x9E, 0x43,
	0xE5, 0x92, 0xA2, 0x43, 0xE5, 0x92, 0xBD, 0x43,
	0xE5, 0x93, 0xB6, 0x43, 0xE5, 0x94, 0x90, 0x43,
	0xE5, 0x95, 0x8F, 0x43, 0xE5, 0x95, 0x93, 0x43,
	0xE5, 0x95, 0x95, 0x43, 0xE5, 0x95, 0xA3, 0x43,
	// Bytes 940 - 97f
	0xE5, 0x96, 0x84, 0x43, 0xE5, 0x96, 0x87, 0x43,
	0xE5, 0x96, 0x99, 0x43, 0xE5, 0x96, 0x9D, 0x43,
	0xE5, 0x96, 0xAB, 0x43, 0xE5, 0x96, 0xB3, 0x43,
	0xE5, 0x96, 0xB6, 0x43, 0xE5, 0x97, 0x80, 0x43,
	0xE5, 0x97, 0x82, 0x43, 0xE5, 0x97, 0xA2, 0x43,
	0xE5, 0x98, 0x86, 0x43, 0xE5, 0x99, 0x91, 0x43,
	0xE5, 0x99, 0xA8, 0x43, 0xE5, 0x99, 0xB4, 0x43,
	0xE5, 0x9B, 0x97, 0x43, 0xE5, 0x9B, 0x9B, 0x43,
	// Bytes 980 - 9bf
	0xE5, 0x9B, 0xB9, 0x43, 0xE5, 0x9C, 0x96, 0x43,
	0xE5, 0x9C, 0x97, 0x43, 0xE5, 0x9C, 0x9F, 0x43,
	0xE5, 0x9C, 0xB0, 0x43, 0xE5, 0x9E, 0x8B, 0x43,
	0xE5, 0x9F, 0x8E, 0x43, 0xE5, 0x9F, 0xB4, 0x43,
	0xE5, 0xA0, 0x8D, 0x43, 0xE5, 0xA0, 0xB1, 0x43,
	0xE5, 0xA0, 0xB2, 0x43, 0xE5, 0xA1, 0x80, 0x43,
	0xE5, 0xA1, 0x9A, 0x43, 0xE5, 0xA1, 0x9E, 0x43,
	0xE5, 0xA2, 0xA8, 0x43, 0xE5, 0xA2, 0xAC, 0x43,
	// Bytes 9c0 - 9ff
	0xE5, 0xA2, 0xB3, 0x43, 0xE5, 0xA3, 0x98, 0x43,
	0xE5, 0xA3, 0x9F, 0x43, 0xE5, 0xA3, 0xAB, 0x43,
	0xE5, 0xA3, 0xAE, 0x43, 0xE5, 0xA3, 0xB0, 0x43,
	0xE5, 0xA3, 0xB2, 0x43, 0xE5, 0xA3, 0xB7, 0x43,
	0xE5, 0xA4, 0x82, 0x43, 0xE5, 0xA4, 0x86, 0x43,
	0xE5, 0xA4, 0x8A, 0x43, 0xE5, 0xA4, 0x95, 0x43,
	0xE5, 0xA4, 0x9A, 0x43, 0xE5, 0xA4, 0x9C, 0x43,
	0xE5, 0xA4, 0xA2, 0x43, 0xE5, 0xA4, 0xA7, 0x43,
	// Bytes a00 - a3f
	0xE5, 0xA4, 0xA9, 0x43, 0xE5, 0xA5, 0x84, 0x43,
	0xE5, 0xA5, 0x88, 0x43, 0xE5, 0xA5, 0x91, 0x43,
	0xE5, 0xA5, 0x94, 0x43, 0xE5, 0xA5, 0xA2, 0x43,
	0xE5, 0xA5, 0xB3, 0x43, 0xE5, 0xA7, 0x98, 0x43,
	0xE5, 0xA7, 0xAC, 0x43, 0xE5, 0xA8, 0x9B, 0x43,
	0xE5, 0xA8, 0xA7, 0x43, 0xE5, 0xA9, 0xA2, 0x43,
	0xE5, 0xA9, 0xA6, 0x43, 0xE5, 0xAA, 0xB5, 0x43,
	0xE5, 0xAC, 0x88, 0x43, 0xE5, 0xAC, 0xA8, 0x43,
	// Bytes a40 - a7f
	0xE5, 0xAC, 0xBE, 0x43, 0xE5, 0xAD, 0x90, 0x43,
	0xE5, 0xAD, 0x97, 0x43, 0xE5, 0xAD, 0xA6, 0x43,
	0xE5, 0xAE, 0x80, 0x43, 0xE5, 0xAE, 0x85, 0x43,
	0xE5, 0xAE, 0x97, 0x43, 0xE5, 0xAF, 0x83, 0x43,
	0xE5, 0xAF, 0x98, 0x43, 0xE5, 0xAF, 0xA7, 0x43,
	0xE5, 0xAF, 0xAE, 0x43, 0xE5, 0xAF, 0xB3, 0x43,
	0xE5, 0xAF, 0xB8, 0x43, 0xE5, 0xAF, 0xBF, 0x43,
	0xE5, 0xB0, 0x86, 0x43, 0xE5, 0xB0, 0x8F, 0x43,
	// Bytes a80 - abf
	0xE5, 0xB0, 0xA2, 0x43, 0xE5, 0xB0, 0xB8, 0x43,
	0xE5, 0xB0, 0xBF, 0x43, 0xE5, 0xB1, 0xA0, 0x43,
	0xE5, 0xB1, 0xA2, 0x43, 0xE5, 0xB1, 0xA4, 0x43,
	0xE5, 0xB1, 0xA5, 0x43, 0xE5, 0xB1, 0xAE, 0x43,
	0xE5, 0xB1, 0xB1, 0x43, 0xE5, 0xB2, 0x8D, 0x43,
	0xE5, 0xB3, 0x80, 0x43, 0xE5, 0xB4, 0x99, 0x43,
	0xE5, 0xB5, 0x83, 0x43, 0xE5, 0xB5, 0x90, 0x43,
	0xE5, 0xB5, 0xAB, 0x43, 0xE5, 0xB5, 0xAE, 0x43,
	// Bytes ac0 - aff
	0xE5, 0xB5, 0xBC, 0x43, 0xE5, 0xB6, 0xB2, 0x43,
	0xE5, 0xB6, 0xBA, 0x43, 0xE5, 0xB7, 0x9B, 0x43,
	0xE5, 0xB7, 0xA1, 0x43, 0xE5, 0xB7, 0xA2, 0x43,
	0xE5, 0xB7, 0xA5, 0x43, 0xE5, 0xB7, 0xA6, 0x43,
	0xE5, 0xB7, 0xB1, 0x43, 0xE5, 0xB7, 0xBD, 0x43,
	0xE5, 0xB7, 0xBE, 0x43, 0xE5, 0xB8, 0xA8, 0x43,
	0xE5, 0xB8, 0xBD, 0x43, 0xE5, 0xB9, 0xA9, 0x43,
	0xE5, 0xB9, 0xB2, 0x43, 0xE5, 0xB9, 0xB4, 0x43,
	// Bytes b00 - b3f
	0xE5, 0xB9, 0xBA, 0x43, 0xE5, 0xB9, 0xBC, 0x43,
	0xE5, 0xB9, 0xBF, 0x43, 0xE5, 0xBA, 0xA6, 0x43,
	0xE5, 0xBA, 0xB0, 0x43, 0xE5, 0xBA, 0xB3, 0x43,
	0xE5, 0xBA, 0xB6, 0x43, 0xE5, 0xBB, 0x89, 0x43,
	0xE5, 0xBB, 0x8A, 0x43, 0xE5, 0xBB, 0x92, 0x43,
	0xE5, 0xBB, 0x93, 0x43, 0xE5, 0xBB, 0x99, 0x43,
	0xE5, 0xBB, 0xAC, 0x43, 0xE5, 0xBB, 0xB4, 0x43,
	0xE5, 0xBB, 0xBE, 0x43, 0xE5, 0xBC, 0x84, 0x43,
	// Bytes b40 - b7f
	0xE5, 0xBC, 0x8B, 0x43, 0xE5, 0xBC, 0x93, 0x43,
	0xE5, 0xBC, 0xA2, 0x43, 0xE5, 0xBD, 0x90, 0x43,
	0xE5, 0xBD, 0x93, 0x43, 0xE5, 0xBD, 0xA1, 0x43,
	0xE5, 0xBD, 0xA2, 0x43, 0xE5, 0xBD, 0xA9, 0x43,
	0xE5, 0xBD, 0xAB, 0x43, 0xE5, 0xBD, 0xB3, 0x43,
	0xE5, 0xBE, 0x8B, 0x43, 0xE5, 0xBE, 0x8C, 0x43,
	0xE5, 0xBE, 0x97, 0x43, 0xE5, 0xBE, 0x9A, 0x43,
	0xE5, 0xBE, 0xA9, 0x43, 0xE5, 0xBE, 0xAD, 0x43,
	// Bytes b80 - bbf
	0xE5, 0xBF, 0x83, 0x43, 0xE5, 0xBF, 0x8D, 0x43,
	0xE5, 0xBF, 0x97, 0x43, 0xE5, 0xBF, 0xB5, 0x43,
	0xE5, 0xBF, 0xB9, 0x43, 0xE6, 0x80, 0x92, 0x43,
	0xE6, 0x80, 0x9C, 0x43, 0xE6, 0x81, 0xB5, 0x43,
	0xE6, 0x82, 0x81, 0x43, 0xE6, 0x82, 0x94, 0x43,
	0xE6, 0x83, 0x87, 0x43, 0xE6, 0x83, 0x98, 0x43,
	0xE6, 0x83, 0xA1, 0x43, 0xE6, 0x84, 0x88, 0x43,
	0xE6, 0x85, 0x84, 0x43, 0xE6, 0x85, 0x88, 0x43,
	// Bytes bc0 - bff
	0xE6, 0x85, 0x8C, 0x43, 0xE6, 0x85, 0x8E, 0x43,
	0xE6, 0x85, 0xA0, 0x43, 0xE6, 0x85, 0xA8, 0x43,
	0xE6, 0x85, 0xBA, 0x43, 0xE6, 0x86, 0x8E, 0x43,
	0xE6, 0x86, 0x90, 0x43, 0xE6, 0x86, 0xA4, 0x43,
	0xE6, 0x86, 0xAF, 0x43, 0xE6, 0x86, 0xB2, 0x43,
	0xE6, 0x87, 0x9E, 0x43, 0xE6, 0x87, 0xB2, 0x43,
	0xE6, 0x87, 0xB6, 0x43, 0xE6, 0x88, 0x80, 0x43,
	0xE6, 0x88, 0x88, 0x43, 0xE6, 0x88, 0x90, 0x43,
	// Bytes c00 - c3f
	0xE6, 0x88, 0x9B, 0x43, 0xE6, 0x88, 0xAE, 0x43,
	0xE6, 0x88, 0xB4, 0x43, 0xE6, 0x88, 0xB6, 0x43,
	0xE6, 0x89, 0x8B, 0x43, 0xE6, 0x89, 0x93, 0x43,
	0xE6, 0x89, 0x9D, 0x43, 0xE6, 0x8A, 0x95, 0x43,
	0xE6, 0x8A, 0xB1, 0x43, 0xE6, 0x8B, 0x89, 0x43,
	0xE6, 0x8B, 0x8F, 0x43, 0xE6, 0x8B, 0x93, 0x43,
	0xE6, 0x8B, 0x94, 0x43, 0xE6, 0x8B, 0xBC, 0x43,
	0xE6, 0x8B, 0xBE, 0x43, 0xE6, 0x8C, 0x87, 0x43,
	// Bytes c40 - c7f
	0xE6, 0x8C, 0xBD, 0x43, 0xE6, 0x8D, 0x90, 0x43,
	0xE6, 0x8D, 0x95, 0x43, 0xE6, 0x8D, 0xA8, 0x43,
	0xE6, 0x8D, 0xBB, 0x43, 0xE6, 0x8E, 0x83, 0x43,
	0xE6, 0x8E, 0xA0, 0x43, 0xE6, 0x8E, 0xA9, 0x43,
	0xE6, 0x8F, 0x84, 0x43, 0xE6, 0x8F, 0x85, 0x43,
	0xE6, 0x8F, 0xA4, 0x43, 0xE6, 0x90, 0x9C, 0x43,
	0xE6, 0x90, 0xA2, 0x43, 0xE6, 0x91, 0x92, 0x43,
	0xE6, 0x91, 0xA9, 0x43, 0xE6, 0x91, 0xB7, 0x43,
	// Bytes c80 - cbf
	0xE6, 0x91, 0xBE, 0x43, 0xE6, 0x92, 0x9A, 0x43,
	0xE6, 0x92, 0x9D, 0x43, 0xE6, 0x93, 0x84, 0x43,
	0xE6, 0x94, 0xAF, 0x43, 0xE6, 0x94, 0xB4, 0x43,
	0xE6, 0x95, 0x8F, 0x43, 0xE6, 0x95, 0x96, 0x43,
	0xE6, 0x95, 0xAC, 0x43, 0xE6, 0x95, 0xB8, 0x43,
	0xE6, 0x96, 0x87, 0x43, 0xE6, 0x96, 0x97, 0x43,
	0xE6, 0x96, 0x99, 0x43, 0xE6, 0x96, 0xA4, 0x43,
	0xE6, 0x96, 0xB0, 0x43, 0xE6, 0x96, 0xB9, 0x43,
	// Bytes cc0 - cff
	0xE6, 0x97, 0x85, 0x43, 0xE6, 0x97, 0xA0, 0x43,
	0xE6, 0x97, 0xA2, 0x43, 0xE6, 0x97, 0xA3, 0x43,
	0xE6, 0x97, 0xA5, 0x43, 0xE6, 0x98, 0x93, 0x43,
	0xE6, 0x98, 0xA0, 0x43, 0xE6, 0x99, 0x89, 0x43,
	0xE6, 0x99, 0xB4, 0x43, 0xE6, 0x9A, 0x88, 0x43,
	0xE6, 0x9A, 0x91, 0x43, 0xE6, 0x9A, 0x9C, 0x43,
	0xE6, 0x9A, 0xB4, 0x43, 0xE6, 0x9B, 0x86, 0x43,
	0xE6, 0x9B, 0xB0, 0x43, 0xE6, 0x9B, 0xB4, 0x43,
	// Bytes d00 - d3f
	0xE6, 0x9B, 0xB8, 0x43, 0xE6, 0x9C, 0x80, 0x43,
	0xE6, 0x9C, 0x88, 0x43, 0xE6, 0x9C, 0x89, 0x43,
	0xE6, 0x9C, 0x97, 0x43, 0xE6, 0x9C, 0x9B, 0x43,
	0xE6, 0x9C, 0xA1, 0x43, 0xE6, 0x9C, 0xA8, 0x43,
	0xE6, 0x9D, 0x8E, 0x43, 0xE6, 0x9D, 0x93, 0x43,
	0xE6, 0x9D, 0x96, 0x43, 0xE6, 0x9D, 0x9E, 0x43,
	0xE6, 0x9D, 0xBB, 0x43, 0xE6, 0x9E, 0x85, 0x43,
	0xE6, 0x9E, 0x97, 0x43, 0xE6, 0x9F, 0xB3, 0x43,
	// Bytes d40 - d7f
	0xE6, 0x9F, 0xBA, 0x43, 0xE6, 0xA0, 0x97, 0x43,
	0xE6, 0xA0, 0x9F, 0x43, 0xE6, 0xA0, 0xAA, 0x43,
	0xE6, 0xA1, 0x92, 0x43, 0xE6, 0xA2, 0x81, 0x43,
	0xE6, 0xA2, 0x85, 0x43, 0xE6, 0xA2, 0x8E, 0x43,
	0xE6, 0xA2, 0xA8, 0x43, 0xE6, 0xA4, 0x94, 0x43,
	0xE6, 0xA5, 0x82, 0x43, 0xE6, 0xA6, 0xA3, 0x43,
	0xE6, 0xA7, 0xAA, 0x43, 0xE6, 0xA8, 0x82, 0x43,
	0xE6, 0xA8, 0x93, 0x43, 0xE6, 0xAA, 0xA8, 0x43,
	// Bytes d80 - dbf
	0xE6, 0xAB, 0x93, 0x43, 0xE6, 0xAB, 0x9B, 0x43,
	0xE6, 0xAC, 0x84, 0x43, 0xE6, 0xAC, 0xA0, 0x43,
	0xE6, 0xAC, 0xA1, 0x43, 0xE6, 0xAD, 0x94, 0x43,
	0xE6, 0xAD, 0xA2, 0x43, 0xE6, 0xAD, 0xA3, 0x43,
	0xE6, 0xAD, 0xB2, 0x43, 0xE6, 0xAD, 0xB7, 0x43,
	0xE6, 0xAD, 0xB9, 0x43, 0xE6, 0xAE, 0x9F, 0x43,
	0xE6, 0xAE, 0xAE, 0x43, 0xE6, 0xAE, 0xB3, 0x43,
	0xE6, 0xAE, 0xBA, 0x43, 0xE6, 0xAE, 0xBB, 0x43,
	// Bytes dc0 - dff
	0xE6, 0xAF, 0x8B, 0x43, 0xE6, 0xAF, 0x8D, 0x43,
	0xE6, 0xAF, 0x94, 0x43, 0xE6, 0xAF, 0x9B, 0x43,
	0xE6, 0xB0, 0x8F, 0x43, 0xE6, 0xB0, 0x94, 0x43,
	0xE6, 0xB0, 0xB4, 0x43, 0xE6, 0xB1, 0x8E, 0x43,
	0xE6, 0xB1, 0xA7, 0x43, 0xE6, 0xB2, 0x88, 0x43,
	0xE6, 0xB2, 0xBF, 0x43, 0xE6, 0xB3, 0x8C, 0x43,
	0xE6, 0xB3, 0x8D, 0x43, 0xE6, 0xB3, 0xA5, 0x43,
	0xE6, 0xB3, 0xA8, 0x43, 0xE6, 0xB4, 0x96, 0x43,
	// Bytes e00 - e3f
	0xE6, 0xB4, 0x9B, 0x43, 0xE6, 0xB4, 0x9E, 0x43,
	0xE6, 0xB4, 0xB4, 0x43, 0xE6, 0xB4, 0xBE, 0x43,
	0xE6, 0xB5, 0x81, 0x43, 0xE6, 0xB5, 0xA9, 0x43,
	0xE6, 0xB5, 0xAA, 0x43, 0xE6, 0xB5, 0xB7, 0x43,
	0xE6, 0xB5, 0xB8, 0x43, 0xE6, 0xB6, 0x85, 0x43,
	0xE6, 0xB7, 0x8B, 0x43, 0xE6, 0xB7, 0x9A, 0x43,
	0xE6, 0xB7, 0xAA, 0x43, 0xE6, 0xB7, 0xB9, 0x43,
	0xE6, 0xB8, 0x9A, 0x43, 0xE6, 0xB8, 0xAF, 0x43,
	// Bytes e40 - e7f
	0xE6, 0xB9, 0xAE, 0x43, 0xE6, 0xBA, 0x80, 0x43,
	0xE6, 0xBA, 0x9C, 0x43, 0xE6, 0xBA, 0xBA, 0x43,
	0xE6, 0xBB, 0x87, 0x43, 0xE6, 0xBB, 0x8B, 0x43,
	0xE6, 0xBB, 0x91, 0x43, 0xE6, 0xBB, 0x9B, 0x43,
	0xE6, 0xBC, 0x8F, 0x43, 0xE6, 0xBC, 0x94, 0x43,
	0xE6, 0xBC, 0xA2, 0x43, 0xE6, 0xBC, 0xA3, 0x43,
	0xE6, 0xBD, 0xAE, 0x43, 0xE6, 0xBF, 0x86, 0x43,
	0xE6, 0xBF, 0xAB, 0x43, 0xE6, 0xBF, 0xBE, 0x43,
	// Bytes e80 - ebf
	0xE7, 0x80, 0x9B, 0x43, 0xE7, 0x80, 0x9E, 0x43,
	0xE7, 0x80, 0xB9, 0x43, 0xE7, 0x81, 0x8A, 0x43,
	0xE7, 0x81, 0xAB, 0x43, 0xE7, 0x81, 0xB0, 0x43,
	0xE7, 0x81, 0xB7, 0x43, 0xE7, 0x81, 0xBD, 0x43,
	0xE7, 0x82, 0x99, 0x43, 0xE7, 0x82, 0xAD, 0x43,
	0xE7, 0x83, 0x88, 0x43, 0xE7, 0x83, 0x99, 0x43,
	0xE7, 0x84, 0xA1, 0x43, 0xE7, 0x85, 0x85, 0x43,
	0xE7, 0x85, 0x89, 0x43, 0xE7, 0x85, 0xAE, 0x43,
	// Bytes ec0 - eff
	0xE7, 0x86, 0x9C, 0x43, 0xE7, 0x87, 0x8E, 0x43,
	0xE7, 0x87, 0x90, 0x43, 0xE7, 0x88, 0x90, 0x43,
	0xE7, 0x88, 0x9B, 0x43, 0xE7, 0x88, 0xA8, 0x43,
	0xE7, 0x88, 0xAA, 0x43, 0xE7, 0x88, 0xAB, 0x43,
	0xE7, 0x88, 0xB5, 0x43, 0xE7, 0x88, 0xB6, 0x43,
	0xE7, 0x88, 0xBB, 0x43, 0xE7, 0x88, 0xBF, 0x43,
	0xE7, 0x89, 0x87, 0x43, 0xE7, 0x89, 0x90, 0x43,
	0xE7, 0x89, 0x99, 0x43, 0xE7, 0x89, 0x9B, 0x43,
	// Bytes f00 - f3f
	0xE7, 0x89, 0xA2, 0x43, 0xE7, 0x89, 0xB9, 0x43,
	0xE7, 0x8A, 0x80, 0x43, 0xE7, 0x8A, 0x95, 0x43,
	0xE7, 0x8A, 0xAC, 0x43, 0xE7, 0x8A, 0xAF, 0x43,
	0xE7, 0x8B, 0x80, 0x43, 0xE7, 0x8B, 0xBC, 0x43,
	0xE7, 0x8C, 0xAA, 0x43, 0xE7, 0x8D, 0xB5, 0x43,
	0xE7, 0x8D, 0xBA, 0x43, 0xE7, 0x8E, 0x84, 0x43,
	0xE7, 0x8E, 0x87, 0x43, 0xE7, 0x8E, 0x89, 0x43,
	0xE7, 0x8E, 0x8B, 0x43, 0xE7, 0x8E, 0xA5, 0x43,
	// Bytes f40 - f7f
	0xE7, 0x8E, 0xB2, 0x43, 0xE7, 0x8F, 0x9E, 0x43,
	0xE7, 0x90, 0x86, 0x43, 0xE7, 0x90, 0x89, 0x43,
	0xE7, 0x90, 0xA2, 0x43, 0xE7, 0x91, 0x87, 0x43,
	0xE7, 0x91, 0x9C, 0x43, 0xE7, 0x91, 0xA9, 0x43,
	0xE7, 0x91, 0xB1, 0x43, 0xE7, 0x92, 0x85, 0x43,
	0xE7, 0x92, 0x89, 0x43, 0xE7, 0x92, 0x98, 0x43,
	0xE7, 0x93, 0x8A, 0x43, 0xE7, 0x93, 0x9C, 0x43,
	0xE7, 0x93, 0xA6, 0x43, 0xE7, 0x94, 0x86, 0x43,
	// Bytes f80 - fbf
	0xE7, 0x94, 0x98, 0x43, 0xE7, 0x94, 0x9F, 0x43,
	0xE7, 0x94, 0xA4, 0x43, 0xE7, 0x94, 0xA8, 0x43,
	0xE7, 0x94, 0xB0, 0x43, 0xE7, 0x94, 0xB2, 0x43,
	0xE7, 0x94, 0xB3, 0x43, 0xE7, 0x94, 0xB7, 0x43,
	0xE7, 0x94, 0xBB, 0x43, 0xE7, 0x94, 0xBE, 0x43,
	0xE7, 0x95, 0x99, 0x43, 0xE7, 0x95, 0xA5, 0x43,
	0xE7, 0x95, 0xB0, 0x43, 0xE7, 0x96, 0x8B, 0x43,
	0xE7, 0x96, 0x92, 0x43, 0xE7, 0x97, 0xA2, 0x43,
	// Bytes fc0 - fff
	0xE7, 0x98, 0x90, 0x43, 0xE7, 0x98, 0x9D, 0x43,
	0xE7, 0x98, 0x9F, 0x43, 0xE7, 0x99, 0x82, 0x43,
	0xE7, 0x99, 0xA9, 0x43, 0xE7, 0x99, 0xB6, 0x43,
	0xE7, 0x99, 0xBD, 0x43, 0xE7, 0x9A, 0xAE, 0x43,
	0xE7, 0x9A, 0xBF, 0x43, 0xE7, 0x9B, 0x8A, 0x43,
	0xE7, 0x9B, 0x9B, 0x43, 0xE7, 0x9B, 0xA3, 0x43,
	0xE7, 0x9B, 0xA7, 0x43, 0xE7, 0x9B, 0xAE, 0x43,
	0xE7, 0x9B, 0xB4, 0x43, 0xE7, 0x9C, 0x81, 0x43,
	// Bytes 1000 - 103f
	0xE7, 0x9C, 0x9E, 0x43, 0xE7, 0x9C, 0x9F, 0x43,
	0xE7, 0x9D, 0x80, 0x43, 0xE7, 0x9D, 0x8A, 0x43,
	0xE7, 0x9E, 0x8B, 0x43, 0xE7, 0x9E, 0xA7, 0x43,
	0xE7, 0x9F, 0x9B, 0x43, 0xE7, 0x9F, 0xA2, 0x43,
	0xE7, 0x9F, 0xB3, 0x43, 0xE7, 0xA1, 0x8E, 0x43,
	0xE7, 0xA1, 0xAB, 0x43, 0xE7, 0xA2, 0x8C, 0x43,
	0xE7, 0xA2, 0x91, 0x43, 0xE7, 0xA3, 0x8A, 0x43,
	0xE7, 0xA3, 0x8C, 0x43, 0xE7, 0xA3, 0xBB, 0x43,
	// Bytes 1040 - 107f
	0xE7, 0xA4, 0xAA, 0x43, 0xE7, 0xA4, 0xBA, 0x43,
	0xE7, 0xA4, 0xBC, 0x43, 0xE7, 0xA4, 0xBE, 0x43,
	0xE7, 0xA5, 0x88, 0x43, 0xE7, 0xA5, 0x89, 0x43,
	0xE7, 0xA5, 0x90, 0x43, 0xE7, 0xA5, 0x96, 0x43,
	0xE7, 0xA5, 0x9D, 0x43, 0xE7, 0xA5, 0x9E, 0x43,
	0xE7, 0xA5, 0xA5, 0x43, 0xE7, 0xA5, 0xBF, 0x43,
	0xE7, 0xA6, 0x81, 0x43, 0xE7, 0xA6, 0x8D, 0x43,
	0xE7, 0xA6, 0x8E, 0x43, 0xE7, 0xA6, 0x8F, 0x43,
	// Bytes 1080 - 10bf
	0xE7, 0xA6, 0xAE, 0x43, 0xE7, 0xA6, 0xB8, 0x43,
	0xE7, 0xA6, 0xBE, 0x43, 0xE7, 0xA7, 0x8A, 0x43,
	0xE7, 0xA7, 0x98, 0x43, 0xE7, 0xA7, 0xAB, 0x43,
	0xE7, 0xA8, 0x9C, 0x43, 0xE7, 0xA9, 0x80, 0x43,
	0xE7, 0xA9, 0x8A, 0x43, 0xE7, 0xA9, 0x8F, 0x43,
	0xE7, 0xA9, 0xB4, 0x43, 0xE7, 0xA9, 0xBA, 0x43,
	0xE7, 0xAA, 0x81, 0x43, 0xE7, 0xAA, 0xB1, 0x43,
	0xE7, 0xAB, 0x8B, 0x43, 0xE7, 0xAB, 0xAE, 0x43,
	// Bytes 10c0 - 10ff
	0xE7, 0xAB, 0xB9, 0x43, 0xE7, 0xAC, 0xA0, 0x43,
	0xE7, 0xAE, 0x8F, 0x43, 0xE7, 0xAF, 0x80, 0x43,
	0xE7, 0xAF, 0x86, 0x43, 0xE7, 0xAF, 0x89, 0x43,
	0xE7, 0xB0, 0xBE, 0x43, 0xE7, 0xB1, 0xA0, 0x43,
	0xE7, 0xB1, 0xB3, 0x43, 0xE7, 0xB1, 0xBB, 0x43,
	0xE7, 0xB2, 0x92, 0x43, 0xE7, 0xB2, 0xBE, 0x43,
	0xE7, 0xB3, 0x92, 0x43, 0xE7, 0xB3, 0x96, 0x43,
	0xE7, 0xB3, 0xA3, 0x43, 0xE7, 0xB3, 0xA7, 0x43,
	// Bytes 1100 - 113f
	0xE7, 0xB3, 0xA8, 0x43, 0xE7, 0xB3, 0xB8, 0x43,
	0xE7, 0xB4, 0x80, 0x43, 0xE7, 0xB4, 0x90, 0x43,
	0xE7, 0xB4, 0xA2, 0x43, 0xE7, 0xB4, 0xAF, 0x43,
	0xE7, 0xB5, 0x82, 0x43, 0xE7, 0xB5, 0x9B, 0x43,
	0xE7, 0xB5, 0xA3, 0x43, 0xE7, 0xB6, 0xA0, 0x43,
	0xE7, 0xB6, 0xBE, 0x43, 0xE7, 0xB7, 0x87, 0x43,
	0xE7, 0xB7, 0xB4, 0x43, 0xE7, 0xB8, 0x82, 0x43,
	0xE7, 0xB8, 0x89, 0x43, 0xE7, 0xB8, 0xB7, 0x43,
	// Bytes 1140 - 117f
	0xE7, 0xB9, 0x81, 0x43, 0xE7, 0xB9, 0x85, 0x43,
	0xE7, 0xBC, 0xB6, 0x43, 0xE7, 0xBC, 0xBE, 0x43,
	0xE7, 0xBD, 0x91, 0x43, 0xE7, 0xBD, 0xB2, 0x43,
	0xE7, 0xBD, 0xB9, 0x43, 0xE7, 0xBD, 0xBA, 0x43,
	0xE7, 0xBE, 0x85, 0x43, 0xE7, 0xBE, 0x8A, 0x43,
	0xE7, 0xBE, 0x95, 0x43, 0xE7, 0xBE, 0x9A, 0x43,
	0xE7, 0xBE, 0xBD, 0x43, 0xE7, 0xBF, 0xBA, 0x43,
	0xE8, 0x80, 0x81, 0x43, 0xE8, 0x80, 0x85, 0x43,
	// Bytes 1180 - 11bf
	0xE8, 0x80, 0x8C, 0x43, 0xE8, 0x80, 0x92, 0x43,
	0xE8, 0x80, 0xB3, 0x43, 0xE8, 0x81, 0x86, 0x43,
	0xE8, 0x81, 0xA0, 0x43, 0xE8, 0x81, 0xAF, 0x43,
	0xE8, 0x81, 0xB0, 0x43, 0xE8, 0x81, 0xBE, 0x43,
	0xE8, 0x81, 0xBF, 0x43, 0xE8, 0x82, 0x89, 0x43,
	0xE8, 0x82, 0x8B, 0x43, 0xE8, 0x82, 0xAD, 0x43,
	0xE8, 0x82, 0xB2, 0x43, 0xE8, 0x84, 0x83, 0x43,
	0xE8, 0x84, 0xBE, 0x43, 0xE8, 0x87, 0x98, 0x43,
	// Bytes 11c0 - 11ff
	0xE8, 0x87, 0xA3, 0x43, 0xE8, 0x87, 0xA8, 0x43,
	0xE8, 0x87, 0xAA, 0x43, 0xE8, 0x87, 0xAD, 0x43,
	0xE8, 0x87, 0xB3, 0x43, 0xE8, 0x87, 0xBC, 0x43,
	0xE8, 0x88, 0x81, 0x43, 0xE8, 0x88, 0x84, 0x43,
	0xE8, 0x88, 0x8C, 0x43, 0xE8, 0x88, 0x98, 0x43,
	0xE8, 0x88, 0x9B, 0x43, 0xE8, 0x88, 0x9F, 0x43,
	0xE8, 0x89, 0xAE, 0x43, 0xE8, 0x89, 0xAF, 0x43,
	0xE8, 0x89, 0xB2, 0x43, 0xE8, 0x89, 0xB8, 0x43,
	// Bytes 1200 - 123f
	0xE8, 0x89, 0xB9, 0x43, 0xE8, 0x8A, 0x8B, 0x43,
	0xE8, 0x8A, 0x91, 0x43, 0xE8, 0x8A, 0x9D, 0x43,
	0xE8, 0x8A, 0xB1, 0x43, 0xE8, 0x8A, 0xB3, 0x43,
	0xE8, 0x8A, 0xBD, 0x43, 0xE8, 0x8B, 0xA5, 0x43,
	0xE8, 0x8B, 0xA6, 0x43, 0xE8, 0x8C, 0x9D, 0x43,
	0xE8, 0x8C, 0xA3, 0x43, 0xE8, 0x8C, 0xB6, 0x43,
	0xE8, 0x8D, 0x92, 0x43, 0xE8, 0x8D, 0x93, 0x43,
	0xE8, 0x8D, 0xA3, 0x43, 0xE8, 0x8E, 0xAD, 0x43,
	// Bytes 1240 - 127f
	0xE8, 0x8E, 0xBD, 0x43, 0xE8, 0x8F, 0x89, 0x43,
	0xE8, 0x8F, 0x8A, 0x43, 0xE8, 0x8F, 0x8C, 0x43,
	0xE8, 0x8F, 0x9C, 0x43, 0xE8, 0x8F, 0xA7, 0x43,
	0xE8, 0x8F, 0xAF, 0x43, 0xE8, 0x8F, 0xB1, 0x43,
	0xE8, 0x90, 0xBD, 0x43, 0xE8, 0x91, 0x89, 0x43,
	0xE8, 0x91, 0x97, 0x43, 0xE8, 0x93, 0xAE, 0x43,
	0xE8, 0x93, 0xB1, 0x43, 0xE8, 0x93, 0xB3, 0x43,
	0xE8, 0x93, 0xBC, 0x43, 0xE8, 0x94, 0x96, 0x43,
	// Bytes 1280 - 12bf
	0xE8, 0x95, 0xA4, 0x43, 0xE8, 0x97, 0x8D, 0x43,
	0xE8, 0x97, 0xBA, 0x43, 0xE8, 0x98, 0x86, 0x43,
	0xE8, 0x98, 0x92, 0x43, 0xE8, 0x98, 0xAD, 0x43,
	0xE8, 0x98, 0xBF, 0x43, 0xE8, 0x99, 0x8D, 0x43,
	0xE8, 0x99, 0x90, 0x43, 0xE8, 0x99, 0x9C, 0x43,
	0xE8, 0x99, 0xA7, 0x43, 0xE8, 0x99, 0xA9, 0x43,
	0xE8, 0x99, 0xAB, 0x43, 0xE8, 0x9A, 0x88, 0x43,
	0xE8, 0x9A, 0xA9, 0x43, 0xE8, 0x9B, 0xA2, 0x43,
	// Bytes 12c0 - 12ff
	0xE8, 0x9C, 0x8E, 0x43, 0xE8, 0x9C, 0xA8, 0x43,
	0xE8, 0x9D, 0xAB, 0x43, 0xE8, 0x9D, 0xB9, 0x43,
	0xE8, 0x9E, 0x86, 0x43, 0xE8, 0x9E, 0xBA, 0x43,
	0xE8, 0x9F, 0xA1, 0x43, 0xE8, 0xA0, 0x81, 0x43,
	0xE8, 0xA0, 0x9F, 0x43, 0xE8, 0xA1, 0x80, 0x43,
	0xE8, 0xA1, 0x8C, 0x43, 0xE8, 0xA1, 0xA0, 0x43,
	0xE8, 0xA1, 0xA3, 0x43, 0xE8, 0xA3, 0x82, 0x43,
	0xE8, 0xA3, 0x8F, 0x43, 0xE8, 0xA3, 0x97, 0x43,
	// Bytes 1300 - 133f
	0xE8, 0xA3, 0x9E, 0x43, 0xE8, 0xA3, 0xA1, 0x43,
	0xE8, 0xA3, 0xB8, 0x43, 0xE8, 0xA3, 0xBA, 0x43,
	0xE8, 0xA4, 0x90, 0x43, 0xE8, 0xA5, 0x81, 0x43,
	0xE8, 0xA5, 0xA4, 0x43, 0xE8, 0xA5, 0xBE, 0x43,
	0xE8, 0xA6, 0x86, 0x43, 0xE8, 0xA6, 0x8B, 0x43,
	0xE8, 0xA6, 0x96, 0x43, 0xE8, 0xA7, 0x92, 0x43,
	0xE8, 0xA7, 0xA3, 0x43, 0xE8, 0xA8, 0x80, 0x43,
	0xE8, 0xAA, 0xA0, 0x43, 0xE8, 0xAA, 0xAA, 0x43,
	// Bytes 1340 - 137f
	0xE8, 0xAA, 0xBF, 0x43, 0xE8, 0xAB, 0x8B, 0x43,
	0xE8, 0xAB, 0x92, 0x43, 0xE8, 0xAB, 0x96, 0x43,
	0xE8, 0xAB, 0xAD, 0x43, 0xE8, 0xAB, 0xB8, 0x43,
	0xE8, 0xAB, 0xBE, 0x43, 0xE8, 0xAC, 0x81, 0x43,
	0xE8, 0xAC, 0xB9, 0x43, 0xE8, 0xAD, 0x98, 0x43,
	0xE8, 0xAE, 0x80, 0x43, 0xE8, 0xAE, 0x8A, 0x43,
	0xE8, 0xB0, 0xB7, 0x43, 0xE8, 0xB1, 0x86, 0x43,
	0xE8, 0xB1, 0x88, 0x43, 0xE8, 0xB1, 0x95, 0x43,
	// Bytes 1380 - 13bf
	0xE8, 0xB1, 0xB8, 0x43, 0xE8, 0xB2, 0x9D, 0x43,
	0xE8, 0xB2, 0xA1, 0x43, 0xE8, 0xB2, 0xA9, 0x43,
	0xE8, 0xB2, 0xAB, 0x43, 0xE8, 0xB3, 0x81, 0x43,
	0xE8, 0xB3, 0x82, 0x43, 0xE8, 0xB3, 0x87, 0x43,
	0xE8, 0xB3, 0x88, 0x43, 0xE8, 0xB3, 0x93, 0x43,
	0xE8, 0xB4, 0x88, 0x43, 0xE8, 0xB4, 0x9B, 0x43,
	0xE8, 0xB5, 0xA4, 0x43, 0xE8, 0xB5, 0xB0, 0x43,
	0xE8, 0xB5, 0xB7, 0x43, 0xE8, 0xB6, 0xB3, 0x43,
	// Bytes 13c0 - 13ff
	0xE8, 0xB6, 0xBC, 0x43, 0xE8, 0xB7, 0x8B, 0x43,
	0xE8, 0xB7, 0xAF, 0x43, 0xE8, 0xB7, 0xB0, 0x43,
	0xE8, 0xBA, 0xAB, 0x43, 0xE8, 0xBB, 0x8A, 0x43,
	0xE8, 0xBB, 0x94, 0x43, 0xE8, 0xBC, 0xA6, 0x43,
	0xE8, 0xBC, 0xAA, 0x43, 0xE8, 0xBC, 0xB8, 0x43,
	0xE8, 0xBC, 0xBB, 0x43, 0xE8, 0xBD, 0xA2, 0x43,
	0xE8, 0xBE, 0x9B, 0x43, 0xE8, 0xBE, 0x9E, 0x43,
	0xE8, 0xBE, 0xB0, 0x43, 0xE8, 0xBE, 0xB5, 0x43,
	// Bytes 1400 - 143f
	0xE8, 0xBE, 0xB6, 0x43, 0xE9, 0x80, 0xA3, 0x43,
	0xE9, 0x80, 0xB8, 0x43, 0xE9, 0x81, 0x8A, 0x43,
	0xE9, 0x81, 0xA9, 0x43, 0xE9, 0x81, 0xB2, 0x43,
	0xE9, 0x81, 0xBC, 0x43, 0xE9, 0x82, 0x8F, 0x43,
	0xE9, 0x82, 0x91, 0x43, 0xE9, 0x82, 0x94, 0x43,
	0xE9, 0x83, 0x8E, 0x43, 0xE9, 0x83, 0x9E, 0x43,
	0xE9, 0x83, 0xB1, 0x43, 0xE9, 0x83, 0xBD, 0x43,
	0xE9, 0x84, 0x91, 0x43, 0xE9, 0x84, 0x9B, 0x43,
	// Bytes 1440 - 147f
	0xE9, 0x85, 0x89, 0x43, 0xE9, 0x85, 0x8D, 0x43,
	0xE9, 0x85, 0xAA, 0x43, 0xE9, 0x86, 0x99, 0x43,
	0xE9, 0x86, 0xB4, 0x43, 0xE9, 0x87, 0x86, 0x43,
	0xE9, 0x87, 0x8C, 0x43, 0xE9, 0x87, 0x8F, 0x43,
	0xE9, 0x87, 0x91, 0x43, 0xE9, 0x88, 0xB4, 0x43,
	0xE9, 0x88, 0xB8, 0x43, 0xE9, 0x89, 0xB6, 0x43,
	0xE9, 0x89, 0xBC, 0x43, 0xE9, 0x8B, 0x97, 0x43,
	0xE9, 0x8B, 0x98, 0x43, 0xE9, 0x8C, 0x84, 0x43,
	// Bytes 1480 - 14bf
	0xE9, 0x8D, 0x8A, 0x43, 0xE9, 0x8F, 0xB9, 0x43,
	0xE9, 0x90, 0x95, 0x43, 0xE9, 0x95, 0xB7, 0x43,
	0xE9, 0x96, 0x80, 0x43, 0xE9, 0x96, 0x8B, 0x43,
	0xE9, 0x96, 0xAD, 0x43, 0xE9, 0x96, 0xB7, 0x43,
	0xE9, 0x98, 0x9C, 0x43, 0xE9, 0x98, 0xAE, 0x43,
	0xE9, 0x99, 0x8B, 0x43, 0xE9, 0x99, 0x8D, 0x43,
	0xE9, 0x99, 0xB5, 0x43, 0xE9, 0x99, 0xB8, 0x43,
	0xE9, 0x99, 0xBC, 0x43, 0xE9, 0x9A, 0x86, 0x43,
	// Bytes 14c0 - 14ff
	0xE9, 0x9A, 0xA3, 0x43, 0xE9, 0x9A, 0xB6, 0x43,
	0xE9, 0x9A, 0xB7, 0x43, 0xE9, 0x9A, 0xB8, 0x43,
	0xE9, 0x9A, 0xB9, 0x43, 0xE9, 0x9B, 0x83, 0x43,
	0xE9, 0x9B, 0xA2, 0x43, 0xE9, 0x9B, 0xA3, 0x43,
	0xE9, 0x9B, 0xA8, 0x43, 0xE9, 0x9B, 0xB6, 0x43,
	0xE9, 0x9B, 0xB7, 0x43, 0xE9, 0x9C, 0xA3, 0x43,
	0xE9, 0x9C, 0xB2, 0x43, 0xE9, 0x9D, 0x88, 0x43,
	0xE9, 0x9D, 0x91, 0x43, 0xE9, 0x9D, 0x96, 0x43,
	// Bytes 1500 - 153f
	0xE9, 0x9D, 0x9E, 0x43, 0xE9, 0x9D, 0xA2, 0x43,
	0xE9, 0x9D, 0xA9, 0x43, 0xE9, 0x9F, 0x8B, 0x43,
	0xE9, 0x9F, 0x9B, 0x43, 0xE9, 0x9F, 0xA0, 0x43,
	0xE9, 0x9F, 0xAD, 0x43, 0xE9, 0x9F, 0xB3, 0x43,
	0xE9, 0x9F, 0xBF, 0x43, 0xE9, 0xA0, 0x81, 0x43,
	0xE9, 0xA0, 0x85, 0x43, 0xE9, 0xA0, 0x8B, 0x43,
	0xE9, 0xA0, 0x98, 0x43, 0xE9, 0xA0, 0xA9, 0x43,
	0xE9, 0xA0, 0xBB, 0x43, 0xE9, 0xA1, 0x9E, 0x43,
	// Bytes 1540 - 157f
	0xE9, 0xA2, 0xA8, 0x43, 0xE9, 0xA3, 0x9B, 0x43,
	0xE9, 0xA3, 0x9F, 0x43, 0xE9, 0xA3, 0xA2, 0x43,
	0xE9, 0xA3, 0xAF, 0x43, 0xE9, 0xA3, 0xBC, 0x43,
	0xE9, 0xA4, 0xA8, 0x43, 0xE9, 0xA4, 0xA9, 0x43,
	0xE9, 0xA6, 0x96, 0x43, 0xE9, 0xA6, 0x99, 0x43,
	0xE9, 0xA6, 0xA7, 0x43, 0xE9, 0xA6, 0xAC, 0x43,
	0xE9, 0xA7, 0x82, 0x43, 0xE9, 0xA7, 0xB1, 0x43,
	0xE9, 0xA7, 0xBE, 0x43, 0xE9, 0xA9, 0xAA, 0x43,
	// Bytes 1580 - 15bf
	0xE9, 0xAA, 0xA8, 0x43, 0xE9, 0xAB, 0x98, 0x43,
	0xE9, 0xAB, 0x9F, 0x43, 0xE9, 0xAC, 0x92, 0x43,
	0xE9, 0xAC, 0xA5, 0x43, 0xE9, 0xAC, 0xAF, 0x43,
	0xE9, 0xAC, 0xB2, 0x43, 0xE9, 0xAC, 0xBC, 0x43,
	0xE9, 0xAD, 0x9A, 0x43, 0xE9, 0xAD, 0xAF, 0x43,
	0xE9, 0xB1, 0x80, 0x43, 0xE9, 0xB1, 0x97, 0x43,
	0xE9, 0xB3, 0xA5, 0x43, 0xE9, 0xB3, 0xBD, 0x43,
	0xE9, 0xB5, 0xA7, 0x43, 0xE9, 0xB6, 0xB4, 0x43,
	// Bytes 15c0 - 15ff
	0xE9, 0xB7, 0xBA, 0x43, 0xE9, 0xB8, 0x9E, 0x43,
	0xE9, 0xB9, 0xB5, 0x43, 0xE9, 0xB9, 0xBF, 0x43,
	0xE9, 0xBA, 0x97, 0x43, 0xE9, 0xBA, 0x9F, 0x43,
	0xE9, 0xBA, 0xA5, 0x43, 0xE9, 0xBA, 0xBB, 0x43,
	0xE9, 0xBB, 0x83, 0x43, 0xE9, 0xBB, 0x8D, 0x43,
	0xE9, 0xBB, 0x8E, 0x43, 0xE9, 0xBB, 0x91, 0x43,
	0xE9, 0xBB, 0xB9, 0x43, 0xE9, 0xBB, 0xBD, 0x43,
	0xE9, 0xBB, 0xBE, 0x43, 0xE9, 0xBC, 0x85, 0x43,
	// Bytes 1600 - 163f
	0xE9, 0xBC, 0x8E, 0x43, 0xE9, 0xBC, 0x8F, 0x43,
	0xE9, 0xBC, 0x93, 0x43, 0xE9, 0xBC, 0x96, 0x43,
	0xE9, 0xBC, 0xA0, 0x43, 0xE9, 0xBC, 0xBB, 0x43,
	0xE9, 0xBD, 0x83, 0x43, 0xE9, 0xBD, 0x8A, 0x43,
	0xE9, 0xBD, 0x92, 0x43, 0xE9, 0xBE, 0x8D, 0x43,
	0xE9, 0xBE, 0x8E, 0x43, 0xE9, 0xBE, 0x9C, 0x43,
	0xE9, 0xBE, 0x9F, 0x43, 0xE9, 0xBE, 0xA0, 0x43,
	0xEA, 0x9C, 0xA7, 0x43, 0xEA, 0x9D, 0xAF, 0x43,
	// Bytes 1640 - 167f
	0xEA, 0xAC, 0xB7, 0x43, 0xEA, 0xAD, 0x92, 0x44,
	0xF0, 0xA0, 0x84, 0xA2, 0x44, 0xF0, 0xA0, 0x94,
	0x9C, 0x44, 0xF0, 0xA0, 0x94, 0xA5, 0x44, 0xF0,
	0xA0, 0x95, 0x8B, 0x44, 0xF0, 0xA0, 0x98, 0xBA,
	0x44, 0xF0, 0xA0, 0xA0, 0x84, 0x44, 0xF0, 0xA0,
	0xA3, 0x9E, 0x44, 0xF0, 0xA0, 0xA8, 0xAC, 0x44,
	0xF0, 0xA0, 0xAD, 0xA3, 0x44, 0xF0, 0xA1, 0x93,
	0xA4, 0x44, 0xF0, 0xA1, 0x9A, 0xA8, 0x44, 0xF0,
	// Bytes 1680 - 16bf
	0xA1, 0x9B, 0xAA, 0x44, 0xF0, 0xA1, 0xA7, 0x88,
	0x44, 0xF0, 0xA1, 0xAC, 0x98, 0x44, 0xF0, 0xA1,
	0xB4, 0x8B, 0x44, 0xF0, 0xA1, 0xB7, 0xA4, 0x44,
	0xF0, 0xA1, 0xB7, 0xA6, 0x44, 0xF0, 0xA2, 0x86,
	0x83, 0x44, 0xF0, 0xA2, 0x86, 0x9F, 0x44, 0xF0,
	0xA2, 0x8C, 0xB1, 0x44, 0xF0, 0xA2, 0x9B, 0x94,
	0x44, 0xF0, 0xA2, 0xA1, 0x84, 0x44, 0xF0, 0xA2,
	0xA1, 0x8A, 0x44, 0xF0, 0xA2, 0xAC, 0x8C, 0x44,
	// Bytes 16c0 - 16ff
	0xF0, 0xA2, 0xAF, 0xB1, 0x44, 0xF0, 0xA3, 0x80,
	0x8A, 0x44, 0xF0, 0xA3, 0x8A, 0xB8, 0x44, 0xF0,
	0xA3, 0x8D, 0x9F, 0x44, 0xF0, 0xA3, 0x8E, 0x93,
	0x44, 0xF0, 0xA3, 0x8E, 0x9C, 0x44, 0xF0, 0xA3,
	0x8F, 0x83, 0x44, 0xF0, 0xA3, 0x8F, 0x95, 0x44,
	0xF0, 0xA3, 0x91, 0xAD, 0x44, 0xF0, 0xA3, 0x9A,
	0xA3, 0x44, 0xF0, 0xA3, 0xA2, 0xA7, 0x44, 0xF0,
	0xA3, 0xAA, 0x8D, 0x44, 0xF0, 0xA3, 0xAB, 0xBA,
	// Bytes 1700 - 173f
	0x44, 0xF0, 0xA3, 0xB2, 0xBC, 0x44, 0xF0, 0xA3,
	0xB4, 0x9E, 0x44, 0xF0, 0xA3, 0xBB, 0x91, 0x44,
	0xF0, 0xA3, 0xBD, 0x9E, 0x44, 0xF0, 0xA3, 0xBE,
	0x8E, 0x44, 0xF0, 0xA4, 0x89, 0xA3, 0x44, 0xF0,
	0xA4, 0x8B, 0xAE, 0x44, 0xF0, 0xA4, 0x8E, 0xAB,
	0x44, 0xF0, 0xA4, 0x98, 0x88, 0x44, 0xF0, 0xA4,
	0x9C, 0xB5, 0x44, 0xF0, 0xA4, 0xA0, 0x94, 0x44,
	0xF0, 0xA4, 0xB0, 0xB6, 0x44, 0xF0, 0xA4, 0xB2,
	// Bytes 1740 - 177f
	0x92, 0x44, 0xF0, 0xA4, 0xBE, 0xA1, 0x44, 0xF0,
	0xA4, 0xBE, 0xB8, 0x44, 0xF0, 0xA5, 0x81, 0x84,
	0x44, 0xF0, 0xA5, 0x83, 0xB2, 0x44, 0xF0, 0xA5,
	0x83, 0xB3, 0x44, 0xF0, 0xA5, 0x84, 0x99, 0x44,
	0xF0, 0xA5, 0x84, 0xB3, 0x44, 0xF0, 0xA5, 0x89,
	0x89, 0x44, 0xF0, 0xA5, 0x90, 0x9D, 0x44, 0xF0,
	0xA5, 0x98, 0xA6, 0x44, 0xF0, 0xA5, 0x9A, 0x9A,
	0x44, 0xF0, 0xA5, 0x9B, 0x85, 0x44, 0xF0, 0xA5,
	// Bytes 1780 - 17bf
	0xA5, 0xBC, 0x44, 0xF0, 0xA5, 0xAA, 0xA7, 0x44,
	0xF0, 0xA5, 0xAE, 0xAB, 0x44, 0xF0, 0xA5, 0xB2,
	0x80, 0x44, 0xF0, 0xA5, 0xB3, 0x90, 0x44, 0xF0,
	0xA5, 0xBE, 0x86, 0x44, 0xF0, 0xA6, 0x87, 0x9A,
	0x44, 0xF0, 0xA6, 0x88, 0xA8, 0x44, 0xF0, 0xA6,
	0x89, 0x87, 0x44, 0xF0, 0xA6, 0x8B, 0x99, 0x44,
	0xF0, 0xA6, 0x8C, 0xBE, 0x44, 0xF0, 0xA6, 0x93,
	0x9A, 0x44, 0xF0, 0xA6, 0x94, 0xA3, 0x44, 0xF0,
	// Bytes 17c0 - 17ff
	0xA6, 0x96, 0xA8, 0x44, 0xF0, 0xA6, 0x9E, 0xA7,
	0x44, 0xF0, 0xA6, 0x9E, 0xB5, 0x44, 0xF0, 0xA6,
	0xAC, 0xBC, 0x44, 0xF0, 0xA6, 0xB0, 0xB6, 0x44,
	0xF0, 0xA6, 0xB3, 0x95, 0x44, 0xF0, 0xA6, 0xB5,
	0xAB, 0x44, 0xF0, 0xA6, 0xBC, 0xAC, 0x44, 0xF0,
	0xA6, 0xBE, 0xB1, 0x44, 0xF0, 0xA7, 0x83, 0x92,
	0x44, 0xF0, 0xA7, 0x8F, 0x8A, 0x44, 0xF0, 0xA7,
	0x99, 0xA7, 0x44, 0xF0, 0xA7, 0xA2, 0xAE, 0x44,
	// Bytes 1800 - 183f
	0xF0, 0xA7, 0xA5, 0xA6, 0x44, 0xF0, 0xA7, 0xB2,
	0xA8, 0x44, 0xF0, 0xA7, 0xBB, 0x93, 0x44, 0xF0,
	0xA7, 0xBC, 0xAF, 0x44, 0xF0, 0xA8, 0x97, 0x92,
	0x44, 0xF0, 0xA8, 0x97, 0xAD, 0x44, 0xF0, 0xA8,
	0x9C, 0xAE, 0x44, 0xF0, 0xA8, 0xAF, 0xBA, 0x44,
	0xF0, 0xA8, 0xB5, 0xB7, 0x44, 0xF0, 0xA9, 0x85,
	0x85, 0x44, 0xF0, 0xA9, 0x87, 0x9F, 0x44, 0xF0,
	0xA9, 0x88, 0x9A, 0x44, 0xF0, 0xA9, 0x90, 0x8A,
	// Bytes 1840 - 187f
	0x44, 0xF0, 0xA9, 0x92, 0x96, 0x44, 0xF0, 0xA9,
	0x96, 0xB6, 0x44, 0xF0, 0xA9, 0xAC, 0xB0, 0x44,
	0xF0, 0xAA, 0x83, 0x8E, 0x44, 0xF0, 0xAA, 0x84,
	0x85, 0x44, 0xF0, 0xAA, 0x88, 0x8E, 0x44, 0xF0,
	0xAA, 0x8A, 0x91, 0x44, 0xF0, 0xAA, 0x8E, 0x92,
	0x44, 0xF0, 0xAA, 0x98, 0x80, 0x42, 0x21, 0x21,
	0x42, 0x21, 0x3F, 0x42, 0x2E, 0x2E, 0x42, 0x30,
	0x2C, 0x42, 0x30, 0x2E, 0x42, 0x31, 0x2C, 0x42,
	// Bytes 1880 - 18bf
	0x31, 0x2E, 0x42, 0x31, 0x30, 0x42, 0x31, 0x31,
	0x42, 0x31, 0x32, 0x42, 0x31, 0x33, 0x42, 0x31,
	0x34, 0x42, 0x31, 0x35, 0x42, 0x31, 0x36, 0x42,
	0x31, 0x37, 0x42, 0x31, 0x38, 0x42, 0x31, 0x39,
	0x42, 0x32, 0x2C, 0x42, 0x32, 0x2E, 0x42, 0x32,
	0x30, 0x42, 0x32, 0x31, 0x42, 0x32, 0x32, 0x42,
	0x32, 0x33, 0x42, 0x32, 0x34, 0x42, 0x32, 0x35,
	0x42, 0x32, 0x36, 0x42, 0x32, 0x37, 0x42, 0x32,
	// Bytes 18c0 - 18ff
	0x38, 0x42, 0x32, 0x39, 0x42, 0x33, 0x2C, 0x42,
	0x33, 0x2E, 0x42, 0x33, 0x30, 0x42, 0x33, 0x31,
	0x42, 0x33, 0x32, 0x42, 0x33, 0x33, 0x42, 0x33,
	0x34, 0x42, 0x33, 0x35, 0x42, 0x33, 0x36, 0x42,
	0x33, 0x37, 0x42, 0x33, 0x38, 0x42, 0x33, 0x39,
	0x42, 0x34, 0x2C, 0x42, 0x34, 0x2E, 0x42, 0x34,
	0x30, 0x42, 0x34, 0x31, 0x42, 0x34, 0x32, 0x42,
	0x34, 0x33, 0x42, 0x34, 0x34, 0x42, 0x34, 0x35,
	// Bytes 1900 - 193f
	0x42, 0x34, 0x36, 0x42, 0x34, 0x37, 0x42, 0x34,
	0x38, 0x42, 0x34, 0x39, 0x42, 0x35, 0x2C, 0x42,
	0x35, 0x2E, 0x42, 0x35, 0x30, 0x42, 0x36, 0x2C,
	0x42, 0x36, 0x2E, 0x42, 0x37, 0x2C, 0x42, 0x37,
	0x2E, 0x42, 0x38, 0x2C, 0x42, 0x38, 0x2E, 0x42,
	0x39, 0x2C, 0x42, 0x39, 0x2E, 0x42, 0x3D, 0x3D,
	0x42, 0x3F, 0x21, 0x42, 0x3F, 0x3F, 0x42, 0x41,
	0x55, 0x42, 0x42, 0x71, 0x42, 0x43, 0x44, 0x42,
	// Bytes 1940 - 197f
	0x44, 0x4A, 0x42, 0x44, 0x5A, 0x42, 0x44, 0x7A,
	0x42, 0x47, 0x42, 0x42, 0x47, 0x79, 0x42, 0x48,
	0x50, 0x42, 0x48, 0x56, 0x42, 0x48, 0x67, 0x42,
	0x48, 0x7A, 0x42, 0x49, 0x49, 0x42, 0x49, 0x4A,
	0x42, 0x49, 0x55, 0x42, 0x49, 0x56, 0x42, 0x49,
	0x58, 0x42, 0x4B, 0x42, 0x42, 0x4B, 0x4B, 0x42,
	0x4B, 0x4D, 0x42, 0x4C, 0x4A, 0x42, 0x4C, 0x6A,
	0x42, 0x4D, 0x42, 0x42, 0x4D, 0x43, 0x42, 0x4D,
	// Bytes 1980 - 19bf
	0x44, 0x42, 0x4D, 0x56, 0x42, 0x4D, 0x57, 0x42,
	0x4E, 0x4A, 0x42, 0x4E, 0x6A, 0x42, 0x4E, 0x6F,
	0x42, 0x50, 0x48, 0x42, 0x50, 0x52, 0x42, 0x50,
	0x61, 0x42, 0x52, 0x73, 0x42, 0x53, 0x44, 0x42,
	0x53, 0x4D, 0x42, 0x53, 0x53, 0x42, 0x53, 0x76,
	0x42, 0x54, 0x4D, 0x42, 0x56, 0x49, 0x42, 0x57,
	0x43, 0x42, 0x57, 0x5A, 0x42, 0x57, 0x62, 0x42,
	0x58, 0x49, 0x42, 0x63, 0x63, 0x42, 0x63, 0x64,
	// Bytes 19c0 - 19ff
	0x42, 0x63, 0x6D, 0x42, 0x64, 0x42, 0x42, 0x64,
	0x61, 0x42, 0x64, 0x6C, 0x42, 0x64, 0x6D, 0x42,
	0x64, 0x7A, 0x42, 0x65, 0x56, 0x42, 0x66, 0x66,
	0x42, 0x66, 0x69, 0x42, 0x66, 0x6C, 0x42, 0x66,
	0x6D, 0x42, 0x68, 0x61, 0x42, 0x69, 0x69, 0x42,
	0x69, 0x6A, 0x42, 0x69, 0x6E, 0x42, 0x69, 0x76,
	0x42, 0x69, 0x78, 0x42, 0x6B, 0x41, 0x42, 0x6B,
	0x56, 0x42, 0x6B, 0x57, 0x42, 0x6B, 0x67, 0x42,
	// Bytes 1a00 - 1a3f
	0x6B, 0x6C, 0x42, 0x6B, 0x6D, 0x42, 0x6B, 0x74,
	0x42, 0x6C, 0x6A, 0x42, 0x6C, 0x6D, 0x42, 0x6C,
	0x6E, 0x42, 0x6C, 0x78, 0x42, 0x6D, 0x32, 0x42,
	0x6D, 0x33, 0x42, 0x6D, 0x41, 0x42, 0x6D, 0x56,
	0x42, 0x6D, 0x57, 0x42, 0x6D, 0x62, 0x42, 0x6D,
	0x67, 0x42, 0x6D, 0x6C, 0x42, 0x6D, 0x6D, 0x42,
	0x6D, 0x73, 0x42, 0x6E, 0x41, 0x42, 0x6E, 0x46,
	0x42, 0x6E, 0x56, 0x42, 0x6E, 0x57, 0x42, 0x6E,
	// Bytes 1a40 - 1a7f
	0x6A, 0x42, 0x6E, 0x6D, 0x42, 0x6E, 0x73, 0x42,
	0x6F, 0x56, 0x42, 0x70, 0x41, 0x42, 0x70, 0x46,
	0x42, 0x70, 0x56, 0x42, 0x70, 0x57, 0x42, 0x70,
	0x63, 0x42, 0x70, 0x73, 0x42, 0x73, 0x72, 0x42,
	0x73, 0x74, 0x42, 0x76, 0x69, 0x42, 0x78, 0x69,
	0x43, 0x28, 0x31, 0x29, 0x43, 0x28, 0x32, 0x29,
	0x43, 0x28, 0x33, 0x29, 0x43, 0x28, 0x34, 0x29,
	0x43, 0x28, 0x35, 0x29, 0x43, 0x28, 0x36, 0x29,
	// Bytes 1a80 - 1abf
	0x43, 0x28, 0x37, 0x29, 0x43, 0x28, 0x38, 0x29,
	0x43, 0x28, 0x39, 0x29, 0x43, 0x28, 0x41, 0x29,
	0x43, 0x28, 0x42, 0x29, 0x43, 0x28, 0x43, 0x29,
	0x43, 0x28, 0x44, 0x29, 0x43, 0x28, 0x45, 0x29,
	0x43, 0x28, 0x46, 0x29, 0x43, 0x28, 0x47, 0x29,
	0x43, 0x28, 0x48, 0x29, 0x43, 0x28, 0x49, 0x29,
	0x43, 0x28, 0x4A, 0x29, 0x43, 0x28, 0x4B, 0x29,
	0x43, 0x28, 0x4C, 0x29, 0x43, 0x28, 0x4D, 0x29,
	// Bytes 1ac0 - 1aff
	0x43, 0x28, 0x4E, 0x29, 0x43, 0x28, 0x4F, 0x29,
	0x43, 0x28, 0x50, 0x29, 0x43, 0x28, 0x51, 0x29,
	0x43, 0x28, 0x52, 0x29, 0x43, 0x28, 0x53, 0x29,
	0x43, 0x28, 0x54, 0x29, 0x43, 0x28, 0x55, 0x29,
	0x43, 0x28, 0x56, 0x29, 0x43, 0x28, 0x57, 0x29,
	0x43, 0x28, 0x58, 0x29, 0x43, 0x28, 0x59, 0x29,
	0x43, 0x28, 0x5A, 0x29, 0x43, 0x28, 0x61, 0x29,
	0x43, 0x28, 0x62, 0x29, 0x43, 0x28, 0x63, 0x29,
	// Bytes 1b00 - 1b3f
	0x43, 0x28, 0x64, 0x29, 0x43, 0x28, 0x65, 0x29,
	0x43, 0x28, 0x66, 0x29, 0x43, 0x28, 0x67, 0x29,
	0x43, 0x28, 0x68, 0x29, 0x43, 0x28, 0x69, 0x29,
	0x43, 0x28, 0x6A, 0x29, 0x43, 0x28, 0x6B, 0x29,
	0x43, 0x28, 0x6C, 0x29, 0x43, 0x28, 0x6D, 0x29,
	0x43, 0x28, 0x6E, 0x29, 0x43, 0x28, 0x6F, 0x29,
	0x43, 0x28, 0x70, 0x29, 0x43, 0x28, 0x71, 0x29,
	0x43, 0x28, 0x72, 0x29, 0x43, 0x28, 0x73, 0x29,
	// Bytes 1b40 - 1b7f
	0x43, 0x28, 0x74, 0x29, 0x43, 0x28, 0x75, 0x29,
	0x43, 0x28, 0x76, 0x29, 0x43, 0x28, 0x77, 0x29,
	0x43, 0x28, 0x78, 0x29, 0x43, 0x28, 0x79, 0x29,
	0x43, 0x28, 0x7A, 0x29, 0x43, 0x2E, 0x2E, 0x2E,
	0x43, 0x31, 0x30, 0x2E, 0x43, 0x31, 0x31, 0x2E,
	0x43, 0x31, 0x32, 0x2E, 0x43, 0x31, 0x33, 0x2E,
	0x43, 0x31, 0x34, 0x2E, 0x43, 0x31, 0x35, 0x2E,
	0x43, 0x31, 0x36, 0x2E, 0x43, 0x31, 0x37, 0x2E,
	// Bytes 1b80 - 1bbf
	0x43, 0x31, 0x38, 0x2E, 0x43, 0x31, 0x39, 0x2E,
	0x43, 0x32, 0x30, 0x2E, 0x43, 0x3A, 0x3A, 0x3D,
	0x43, 0x3D, 0x3D, 0x3D, 0x43, 0x43, 0x6F, 0x2E,
	0x43, 0x46, 0x41, 0x58, 0x43, 0x47, 0x48, 0x7A,
	0x43, 0x47, 0x50, 0x61, 0x43, 0x49, 0x49, 0x49,
	0x43, 0x4C, 0x54, 0x44, 0x43, 0x4C, 0xC2, 0xB7,
	0x43, 0x4D, 0x48, 0x7A, 0x43, 0x4D, 0x50, 0x61,
	0x43, 0x4D, 0xCE, 0xA9, 0x43, 0x50, 0x50, 0x4D,
	// Bytes 1bc0 - 1bff
	0x43, 0x50, 0x50, 0x56, 0x43, 0x50, 0x54, 0x45,
	0x43, 0x54, 0x45, 0x4C, 0x43, 0x54, 0x48, 0x7A,
	0x43, 0x56, 0x49, 0x49, 0x43, 0x58, 0x49, 0x49,
	0x43, 0x61, 0x2F, 0x63, 0x43, 0x61, 0x2F, 0x73,
	0x43, 0x61, 0xCA, 0xBE, 0x43, 0x62, 0x61, 0x72,
	0x43, 0x63, 0x2F, 0x6F, 0x43, 0x63, 0x2F, 0x75,
	0x43, 0x63, 0x61, 0x6C, 0x43, 0x63, 0x6D, 0x32,
	0x43, 0x63, 0x6D, 0x33, 0x43, 0x64, 0x6D, 0x32,
	// Bytes 1c00 - 1c3f
	0x43, 0x64, 0x6D, 0x33, 0x43, 0x65, 0x72, 0x67,
	0x43, 0x66, 0x66, 0x69, 0x43, 0x66, 0x66, 0x6C,
	0x43, 0x67, 0x61, 0x6C, 0x43, 0x68, 0x50, 0x61,
	0x43, 0x69, 0x69, 0x69, 0x43, 0x6B, 0x48, 0x7A,
	0x43, 0x6B, 0x50, 0x61, 0x43, 0x6B, 0x6D, 0x32,
	0x43, 0x6B, 0x6D, 0x33, 0x43, 0x6B, 0xCE, 0xA9,
	0x43, 0x6C, 0x6F, 0x67, 0x43, 0x6C, 0xC2, 0xB7,
	0x43, 0x6D, 0x69, 0x6C, 0x43, 0x6D, 0x6D, 0x32,
	// Bytes 1c40 - 1c7f
	0x43, 0x6D, 0x6D, 0x33, 0x43, 0x6D, 0x6F, 0x6C,
	0x43, 0x72, 0x61, 0x64, 0x43, 0x76, 0x69, 0x69,
	0x43, 0x78, 0x69, 0x69, 0x43, 0xC2, 0xB0, 0x43,
	0x43, 0xC2, 0xB0, 0x46, 0x43, 0xCA, 0xBC, 0x6E,
	0x43, 0xCE, 0xBC, 0x41, 0x43, 0xCE, 0xBC, 0x46,
	0x43, 0xCE, 0xBC, 0x56, 0x43, 0xCE, 0xBC, 0x57,
	0x43, 0xCE, 0xBC, 0x67, 0x43, 0xCE, 0xBC, 0x6C,
	0x43, 0xCE, 0xBC, 0x6D, 0x43, 0xCE, 0xBC, 0x73,
	// Bytes 1c80 - 1cbf
	0x44, 0x28, 0x31, 0x30, 0x29, 0x44, 0x28, 0x31,
	0x31, 0x29, 0x44, 0x28, 0x31, 0x32, 0x29, 0x44,
	0x28, 0x31, 0x33, 0x29, 0x44, 0x28, 0x31, 0x34,
	0x29, 0x44, 0x28, 0x31, 0x35, 0x29, 0x44, 0x28,
	0x31, 0x36, 0x29, 0x44, 0x28, 0x31, 0x37, 0x29,
	0x44, 0x28, 0x31, 0x38, 0x29, 0x44, 0x28, 0x31,
	0x39, 0x29, 0x44, 0x28, 0x32, 0x30, 0x29, 0x44,
	0x30, 0xE7, 0x82, 0xB9, 0x44, 0x31, 0xE2, 0x81,
	// Bytes 1cc0 - 1cff
	0x84, 0x44, 0x31, 0xE6, 0x97, 0xA5, 0x44, 0x31,
	0xE6, 0x9C, 0x88, 0x44, 0x31, 0xE7, 0x82, 0xB9,
	0x44, 0x32, 0xE6, 0x97, 0xA5, 0x44, 0x32, 0xE6,
	0x9C, 0x88, 0x44, 0x32, 0xE7, 0x82, 0xB9, 0x44,
	0x33, 0xE6, 0x97, 0xA5, 0x44, 0x33, 0xE6, 0x9C,
	0x88, 0x44, 0x33, 0xE7, 0x82, 0xB9, 0x44, 0x34,
	0xE6, 0x97, 0xA5, 0x44, 0x34, 0xE6, 0x9C, 0x88,
	0x44, 0x34, 0xE7, 0x82, 0xB9, 0x44, 0x35, 0xE6,
	// Bytes 1d00 - 1d3f
	0x97, 0xA5, 0x44, 0x35, 0xE6, 0x9C, 0x88, 0x44,
	0x35, 0xE7, 0x82, 0xB9, 0x44, 0x36, 0xE6, 0x97,
	0xA5, 0x44, 0x36, 0xE6, 0x9C, 0x88, 0x44, 0x36,
	0xE7, 0x82, 0xB9, 0x44, 0x37, 0xE6, 0x97, 0xA5,
	0x44, 0x37, 0xE6, 0x9C, 0x88, 0x44, 0x37, 0xE7,
	0x82, 0xB9, 0x44, 0x38, 0xE6, 0x97, 0xA5, 0x44,
	0x38, 0xE6, 0x9C, 0x88, 0x44, 0x38, 0xE7, 0x82,
	0xB9, 0x44, 0x39, 0xE6, 0x97, 0xA5, 0x44, 0x39,
	// Bytes 1d40 - 1d7f
	0xE6, 0x9C, 0x88, 0x44, 0x39, 0xE7, 0x82, 0xB9,
	0x44, 0x56, 0x49, 0x49, 0x49, 0x44, 0x61, 0x2E,
	0x6D, 0x2E, 0x44, 0x6B, 0x63, 0x61, 0x6C, 0x44,
	0x70, 0x2E, 0x6D, 0x2E, 0x44, 0x76, 0x69, 0x69,
	0x69, 0x44, 0xD5, 0xA5, 0xD6, 0x82, 0x44, 0xD5,
	0xB4, 0xD5, 0xA5, 0x44, 0xD5, 0xB4, 0xD5, 0xAB,
	0x44, 0xD5, 0xB4, 0xD5, 0xAD, 0x44, 0xD5, 0xB4,
	0xD5, 0xB6, 0x44, 0xD5, 0xBE, 0xD5, 0xB6, 0x44,
	// Bytes 1d80 - 1dbf
	0xD7, 0x90, 0xD7, 0x9C, 0x44, 0xD8, 0xA7, 0xD9,
	0xB4, 0x44, 0xD8, 0xA8, 0xD8, 0xAC, 0x44, 0xD8,
	0xA8, 0xD8, 0xAD, 0x44, 0xD8, 0xA8, 0xD8, 0xAE,
	0x44, 0xD8, 0xA8, 0xD8, 0xB1, 0x44, 0xD8, 0xA8,
	0xD8, 0xB2, 0x44, 0xD8, 0xA8, 0xD9, 0x85, 0x44,
	0xD8, 0xA8, 0xD9, 0x86, 0x44, 0xD8, 0xA8, 0xD9,
	0x87, 0x44, 0xD8, 0xA8, 0xD9, 0x89, 0x44, 0xD8,
	0xA8, 0xD9, 0x8A, 0x44, 0xD8, 0xAA, 0xD8, 0xAC,
	// Bytes 1dc0 - 1dff
	0x44, 0xD8, 0xAA, 0xD8, 0xAD, 0x44, 0xD8, 0xAA,
	0xD8, 0xAE, 0x44, 0xD8, 0xAA, 0xD8, 0xB1, 0x44,
	0xD8, 0xAA, 0xD8, 0xB2, 0x44, 0xD8, 0xAA, 0xD9,
	0x85, 0x44, 0xD8, 0xAA, 0xD9, 0x86, 0x44, 0xD8,
	0xAA, 0xD9, 0x87, 0x44, 0xD8, 0xAA, 0xD9, 0x89,
	0x44, 0xD8, 0xAA, 0xD9, 0x8A, 0x44, 0xD8, 0xAB,
	0xD8, 0xAC, 0x44, 0xD8, 0xAB, 0xD8, 0xB1, 0x44,
	0xD8, 0xAB, 0xD8, 0xB2, 0x44, 0xD8, 0xAB, 0xD9,
	// Bytes 1e00 - 1e3f
	0x85, 0x44, 0xD8, 0xAB, 0xD9, 0x86, 0x44, 0xD8,
	0xAB, 0xD9, 0x87, 0x44, 0xD8, 0xAB, 0xD9, 0x89,
	0x44, 0xD8, 0xAB, 0xD9, 0x8A, 0x44, 0xD8, 0xAC,
	0xD8, 0xAD, 0x44, 0xD8, 0xAC, 0xD9, 0x85, 0x44,
	0xD8, 0xAC, 0xD9, 0x89, 0x44, 0xD8, 0xAC, 0xD9,
	0x8A, 0x44, 0xD8, 0xAD, 0xD8, 0xAC, 0x44, 0xD8,
	0xAD, 0xD9, 0x85, 0x44, 0xD8, 0xAD, 0xD9, 0x89,
	0x44, 0xD8, 0xAD, 0xD9, 0x8A, 0x44, 0xD8, 0xAE,
	// Bytes 1e40 - 1e7f
	0xD8, 0xAC, 0x44, 0xD8, 0xAE, 0xD8, 0xAD, 0x44,
	0xD8, 0xAE, 0xD9, 0x85, 0x44, 0xD8, 0xAE, 0xD9,
	0x89, 0x44, 0xD8, 0xAE, 0xD9, 0x8A, 0x44, 0xD8,
	0xB3, 0xD8, 0xAC, 0x44, 0xD8, 0xB3, 0xD8, 0xAD,
	0x44, 0xD8, 0xB3, 0xD8, 0xAE, 0x44, 0xD8, 0xB3,
	0xD8, 0xB1, 0x44, 0xD8, 0xB3, 0xD9, 0x85, 0x44,
	0xD8, 0xB3, 0xD9, 0x87, 0x44, 0xD8, 0xB3, 0xD9,
	0x89, 0x44, 0xD8, 0xB3, 0xD9, 0x8A, 0x44, 0xD8,
	// Bytes 1e80 - 1ebf
	0xB4, 0xD8, 0xAC, 0x44, 0xD8, 0xB4, 0xD8, 0xAD,
	0x44, 0xD8, 0xB4, 0xD8, 0xAE, 0x44, 0xD8, 0xB4,
	0xD8, 0xB1, 0x44, 0xD8, 0xB4, 0xD9, 0x85, 0x44,
	0xD8, 0xB4, 0xD9, 0x87, 0x44, 0xD8, 0xB4, 0xD9,
	0x89, 0x44, 0xD8, 0xB4, 0xD9, 0x8A, 0x44, 0xD8,
	0xB5, 0xD8, 0xAD, 0x44, 0xD8, 0xB5, 0xD8, 0xAE,
	0x44, 0xD8, 0xB5, 0xD8, 0xB1, 0x44, 0xD8, 0xB5,
	0xD9, 0x85, 0x44, 0xD8, 0xB5, 0xD9, 0x89, 0x44,
	// Bytes 1ec0 - 1eff
	0xD8, 0xB5, 0xD9, 0x8A, 0x44, 0xD8, 0xB6, 0xD8,
	0xAC, 0x44, 0xD8, 0xB6, 0xD8, 0xAD, 0x44, 0xD8,
	0xB6, 0xD8, 0xAE, 0x44, 0xD8, 0xB6, 0xD8, 0xB1,
	0x44, 0xD8, 0xB6, 0xD9, 0x85, 0x44, 0xD8, 0xB6,
	0xD9, 0x89, 0x44, 0xD8, 0xB6, 0xD9, 0x8A, 0x44,
	0xD8, 0xB7, 0xD8, 0xAD, 0x44, 0xD8, 0xB7, 0xD9,
	0x85, 0x44, 0xD8, 0xB7, 0xD9, 0x89, 0x44, 0xD8,
	0xB7, 0xD9, 0x8A, 0x44, 0xD8, 0xB8, 0xD9, 0x85,
	// Bytes 1f00 - 1f3f
	0x44, 0xD8, 0xB9, 0xD8, 0xAC, 0x44, 0xD8, 0xB9,
	0xD9, 0x85, 0x44, 0xD8, 0xB9, 0xD9, 0x89, 0x44,
	0xD8, 0xB9, 0xD9, 0x8A, 0x44, 0xD8, 0xBA, 0xD8,
	0xAC, 0x44, 0xD8, 0xBA, 0xD9, 0x85, 0x44, 0xD8,
	0xBA, 0xD9, 0x89, 0x44, 0xD8, 0xBA, 0xD9, 0x8A,
	0x44, 0xD9, 0x81, 0xD8, 0xAC, 0x44, 0xD9, 0x81,
	0xD8, 0xAD, 0x44, 0xD9, 0x81, 0xD8, 0xAE, 0x44,
	0xD9, 0x81, 0xD9, 0x85, 0x44, 0xD9, 0x81, 0xD9,
	// Bytes 1f40 - 1f7f
	0x89, 0x44, 0xD9, 0x81, 0xD9, 0x8A, 0x44, 0xD9,
	0x82, 0xD8, 0xAD, 0x44, 0xD9, 0x82, 0xD9, 0x85,
	0x44, 0xD9, 0x82, 0xD9, 0x89, 0x44, 0xD9, 0x82,
	0xD9, 0x8A, 0x44, 0xD9, 0x83, 0xD8, 0xA7, 0x44,
	0xD9, 0x83, 0xD8, 0xAC, 0x44, 0xD9, 0x83, 0xD8,
	0xAD, 0x44, 0xD9, 0x83, 0xD8, 0xAE, 0x44, 0xD9,
	0x83, 0xD9, 0x84, 0x44, 0xD9, 0x83, 0xD9, 0x85,
	0x44, 0xD9, 0x83, 0xD9, 0x89, 0x44, 0xD9, 0x83,
	// Bytes 1f80 - 1fbf
	0xD9, 0x8A, 0x44, 0xD9, 0x84, 0xD8, 0xA7, 0x44,
	0xD9, 0x84, 0xD8, 0xAC, 0x44, 0xD9, 0x84, 0xD8,
	0xAD, 0x44, 0xD9, 0x84, 0xD8, 0xAE, 0x44, 0xD9,
	0x84, 0xD9, 0x85, 0x44, 0xD9, 0x84, 0xD9, 0x87,
	0x44, 0xD9, 0x84, 0xD9, 0x89, 0x44, 0xD9, 0x84,
	0xD9, 0x8A, 0x44, 0xD9, 0x85, 0xD8, 0xA7, 0x44,
	0xD9, 0x85, 0xD8, 0xAC, 0x44, 0xD9, 0x85, 0xD8,
	0xAD, 0x44, 0xD9, 0x85, 0xD8, 0xAE, 0x44, 0xD9,
	// Bytes 1fc0 - 1fff
	0x85, 0xD9, 0x85, 0x44, 0xD9, 0x85, 0xD9, 0x89,
	0x44, 0xD9, 0x85, 0xD9, 0x8A, 0x44, 0xD9, 0x86,
	0xD8, 0xAC, 0x44, 0xD9, 0x86, 0xD8, 0xAD, 0x44,
	0xD9, 0x86, 0xD8, 0xAE, 0x44, 0xD9, 0x86, 0xD8,
	0xB1, 0x44, 0xD9, 0x86, 0xD8, 0xB2, 0x44, 0xD9,
	0x86, 0xD9, 0x85, 0x44, 0xD9, 0x86, 0xD9, 0x86,
	0x44, 0xD9, 0x86, 0xD9, 0x87, 0x44, 0xD9, 0x86,
	0xD9, 0x89, 0x44, 0xD9, 0x86, 0xD9, 0x8A, 0x44,
	// Bytes 2000 - 203f
	0xD9, 0x87, 0xD8, 0xAC, 0x44, 0xD9, 0x87, 0xD9,
	0x85, 0x44, 0xD9, 0x87, 0xD9, 0x89, 0x44, 0xD9,
	0x87, 0xD9, 0x8A, 0x44, 0xD9, 0x88, 0xD9, 0xB4,
	0x44, 0xD9, 0x8A, 0xD8, 0xAC, 0x44, 0xD9, 0x8A,
	0xD8, 0xAD, 0x44, 0xD9, 0x8A, 0xD8, 0xAE, 0x44,
	0xD9, 0x8A, 0xD8, 0xB1, 0x44, 0xD9, 0x8A, 0xD8,
	0xB2, 0x44, 0xD9, 0x8A, 0xD9, 0x85, 0x44, 0xD9,
	0x8A, 0xD9, 0x86, 0x44, 0xD9, 0x8A, 0xD9, 0x87,
	// Bytes 2040 - 207f
	0x44, 0xD9, 0x8A, 0xD9, 0x89, 0x44, 0xD9, 0x8A,
	0xD9, 0x8A, 0x44, 0xD9, 0x8A, 0xD9, 0xB4, 0x44,
	0xDB, 0x87, 0xD9, 0xB4, 0x45, 0x28, 0xE1, 0x84,
	0x80, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x82, 0x29,
	0x45, 0x28, 0xE1, 0x84, 0x83, 0x29, 0x45, 0x28,
	0xE1, 0x84, 0x85, 0x29, 0x45, 0x28, 0xE1, 0x84,
	0x86, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x87, 0x29,
	0x45, 0x28, 0xE1, 0x84, 0x89, 0x29, 0x45, 0x28,
	// Bytes 2080 - 20bf
	0xE1, 0x84, 0x8B, 0x29, 0x45, 0x28, 0xE1, 0x84,
	0x8C, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x8E, 0x29,
	0x45, 0x28, 0xE1, 0x84, 0x8F, 0x29, 0x45, 0x28,
	0xE1, 0x84, 0x90, 0x29, 0x45, 0x28, 0xE1, 0x84,
	0x91, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x92, 0x29,
	0x45, 0x28, 0xE4, 0xB8, 0x80, 0x29, 0x45, 0x28,
	0xE4, 0xB8, 0x83, 0x29, 0x45, 0x28, 0xE4, 0xB8,
	0x89, 0x29, 0x45, 0x28, 0xE4, 0xB9, 0x9D, 0x29,
	// Bytes 20c0 - 20ff
	0x45, 0x28, 0xE4, 0xBA, 0x8C, 0x29, 0x45, 0x28,
	0xE4, 0xBA, 0x94, 0x29, 0x45, 0x28, 0xE4, 0xBB,
	0xA3, 0x29, 0x45, 0x28, 0xE4, 0xBC, 0x81, 0x29,
	0x45, 0x28, 0xE4, 0xBC, 0x91, 0x29, 0x45, 0x28,
	0xE5, 0x85, 0xAB, 0x29, 0x45, 0x28, 0xE5, 0x85,
	0xAD, 0x29, 0x45, 0x28, 0xE5, 0x8A, 0xB4, 0x29,
	0x45, 0x28, 0xE5, 0x8D, 0x81, 0x29, 0x45, 0x28,
	0xE5, 0x8D, 0x94, 0x29, 0x45, 0x28, 0xE5, 0x90,
	// Bytes 2100 - 213f
	0x8D, 0x29, 0x45, 0x28, 0xE5, 0x91, 0xBC, 0x29,
	0x45, 0x28, 0xE5, 0x9B, 0x9B, 0x29, 0x45, 0x28,
	0xE5, 0x9C, 0x9F, 0x29, 0x45, 0x28, 0xE5, 0xAD,
	0xA6, 0x29, 0x45, 0x28, 0xE6, 0x97, 0xA5, 0x29,
	0x45, 0x28, 0xE6, 0x9C, 0x88, 0x29, 0x45, 0x28,
	0xE6, 0x9C, 0x89, 0x29, 0x45, 0x28, 0xE6, 0x9C,
	0xA8, 0x29, 0x45, 0x28, 0xE6, 0xA0, 0xAA, 0x29,
	0x45, 0x28, 0xE6, 0xB0, 0xB4, 0x29, 0x45, 0x28,
	// Bytes 2140 - 217f
	0xE7, 0x81, 0xAB, 0x29, 0x45, 0x28, 0xE7, 0x89,
	0xB9, 0x29, 0x45, 0x28, 0xE7, 0x9B, 0xA3, 0x29,
	0x45, 0x28, 0xE7, 0xA4, 0xBE, 0x29, 0x45, 0x28,
	0xE7, 0xA5, 0x9D, 0x29, 0x45, 0x28, 0xE7, 0xA5,
	0xAD, 0x29, 0x45, 0x28, 0xE8, 0x87, 0xAA, 0x29,
	0x45, 0x28, 0xE8, 0x87, 0xB3, 0x29, 0x45, 0x28,
	0xE8, 0xB2, 0xA1, 0x29, 0x45, 0x28, 0xE8, 0xB3,
	0x87, 0x29, 0x45, 0x28, 0xE9, 0x87, 0x91, 0x29,
	// Bytes 2180 - 21bf
	0x45, 0x30, 0xE2, 0x81, 0x84, 0x33, 0x45, 0x31,
	0x30, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x30, 0xE6,
	0x9C, 0x88, 0x45, 0x31, 0x30, 0xE7, 0x82, 0xB9,
	0x45, 0x31, 0x31, 0xE6, 0x97, 0xA5, 0x45, 0x31,
	0x31, 0xE6, 0x9C, 0x88, 0x45, 0x31, 0x31, 0xE7,
	0x82, 0xB9, 0x45, 0x31, 0x32, 0xE6, 0x97, 0xA5,
	0x45, 0x31, 0x32, 0xE6, 0x9C, 0x88, 0x45, 0x31,
	0x32, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x33, 0xE6,
	// Bytes 21c0 - 21ff
	0x97, 0xA5, 0x45, 0x31, 0x33, 0xE7, 0x82, 0xB9,
	0x45, 0x31, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x31,
	0x34, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x35, 0xE6,
	0x97, 0xA5, 0x45, 0x31, 0x35, 0xE7, 0x82, 0xB9,
	0x45, 0x31, 0x36, 0xE6, 0x97, 0xA5, 0x45, 0x31,
	0x36, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x37, 0xE6,
	0x97, 0xA5, 0x45, 0x31, 0x37, 0xE7, 0x82, 0xB9,
	0x45, 0x31, 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x31,
	// Bytes 2200 - 223f
	0x38, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x39, 0xE6,
	0x97, 0xA5, 0x45, 0x31, 0x39, 0xE7, 0x82, 0xB9,
	0x45, 0x31, 0xE2, 0x81, 0x84, 0x32, 0x45, 0x31,
	0xE2, 0x81, 0x84, 0x33, 0x45, 0x31, 0xE2, 0x81,
	0x84, 0x34, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x35,
	0x45, 0x31, 0xE2, 0x81, 0x84, 0x36, 0x45, 0x31,
	0xE2, 0x81, 0x84, 0x37, 0x45, 0x31, 0xE2, 0x81,
	0x84, 0x38, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x39,
	// Bytes 2240 - 227f
	0x45, 0x32, 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x32,
	0x30, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x31, 0xE6,
	0x97, 0xA5, 0x45, 0x32, 0x31, 0xE7, 0x82, 0xB9,
	0x45, 0x32, 0x32, 0xE6, 0x97, 0xA5, 0x45, 0x32,
	0x32, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x33, 0xE6,
	0x97, 0xA5, 0x45, 0x32, 0x33, 0xE7, 0x82, 0xB9,
	0x45, 0x32, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x32,
	0x34, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x35, 0xE6,
	// Bytes 2280 - 22bf
	0x97, 0xA5, 0x45, 0x32, 0x36, 0xE6, 0x97, 0xA5,
	0x45, 0x32, 0x37, 0xE6, 0x97, 0xA5, 0x45, 0x32,
	0x38, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x39, 0xE6,
	0x97, 0xA5, 0x45, 0x32, 0xE2, 0x81, 0x84, 0x33,
	0x45, 0x32, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33,
	0x30, 0xE6, 0x97, 0xA5, 0x45, 0x33, 0x31, 0xE6,
	0x97, 0xA5, 0x45, 0x33, 0xE2, 0x81, 0x84, 0x34,
	0x45, 0x33, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33,
	// Bytes 22c0 - 22ff
	0xE2, 0x81, 0x84, 0x38, 0x45, 0x34, 0xE2, 0x81,
	0x84, 0x35, 0x45, 0x35, 0xE2, 0x81, 0x84, 0x36,
	0x45, 0x35, 0xE2, 0x81, 0x84, 0x38, 0x45, 0x37,
	0xE2, 0x81, 0x84, 0x38, 0x45, 0x41, 0xE2, 0x88,
	0x95, 0x6D, 0x45, 0x56, 0xE2, 0x88, 0x95, 0x6D,
	0x45, 0x6D, 0xE2, 0x88, 0x95, 0x73, 0x46, 0x31,
	0xE2, 0x81, 0x84, 0x31, 0x30, 0x46, 0x43, 0xE2,
	0x88, 0x95, 0x6B, 0x67, 0x46, 0x6D, 0xE2, 0x88,
	// Bytes 2300 - 233f
	0x95, 0x73, 0x32, 0x46, 0xD8, 0xA8, 0xD8, 0xAD,
	0xD9, 0x8A, 0x46, 0xD8, 0xA8, 0xD8, 0xAE, 0xD9,
	0x8A, 0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x85,
	0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x89, 0x46,
	0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8,
	0xAA, 0xD8, 0xAD, 0xD8, 0xAC, 0x46, 0xD8, 0xAA,
	0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8,
	0xAE, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, 0xAE,
	// Bytes 2340 - 237f
	0xD9, 0x89, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, 0xD9,
	0x8A, 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAC,
	0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAD, 0x46,
	0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAE, 0x46, 0xD8,
	0xAA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAA,
	0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD8,
	0xAD, 0xD9, 0x89, 0x46, 0xD8, 0xAC, 0xD8, 0xAD,
	0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD8,
	// Bytes 2380 - 23bf
	0xAD, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x89,
	0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x8A, 0x46,
	0xD8, 0xAD, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8,
	0xAD, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAD,
	0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB3, 0xD8,
	0xAC, 0xD8, 0xAD, 0x46, 0xD8, 0xB3, 0xD8, 0xAC,
	0xD9, 0x89, 0x46, 0xD8, 0xB3, 0xD8, 0xAD, 0xD8,
	0xAC, 0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x89,
	// Bytes 23c0 - 23ff
	0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x8A, 0x46,
	0xD8, 0xB3, 0xD9, 0x85, 0xD8, 0xAC, 0x46, 0xD8,
	0xB3, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, 0xB3,
	0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8,
	0xAC, 0xD9, 0x8A, 0x46, 0xD8, 0xB4, 0xD8, 0xAD,
	0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8, 0xAD, 0xD9,
	0x8A, 0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD8, 0xAE,
	0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD9, 0x85, 0x46,
	// Bytes 2400 - 243f
	0xD8, 0xB5, 0xD8, 0xAD, 0xD8, 0xAD, 0x46, 0xD8,
	0xB5, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xB5,
	0xD9, 0x84, 0xD9, 0x89, 0x46, 0xD8, 0xB5, 0xD9,
	0x84, 0xDB, 0x92, 0x46, 0xD8, 0xB5, 0xD9, 0x85,
	0xD9, 0x85, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9,
	0x89, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, 0x8A,
	0x46, 0xD8, 0xB6, 0xD8, 0xAE, 0xD9, 0x85, 0x46,
	0xD8, 0xB7, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8,
	// Bytes 2440 - 247f
	0xB7, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB7,
	0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB9, 0xD8,
	0xAC, 0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85,
	0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9,
	0x89, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, 0x8A,
	0x46, 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x85, 0x46,
	0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8,
	0xBA, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x81,
	// Bytes 2480 - 24bf
	0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x81, 0xD9,
	0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x82, 0xD9, 0x84,
	0xDB, 0x92, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD8,
	0xAD, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x85,
	0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x8A, 0x46,
	0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9,
	0x83, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x84,
	0xD8, 0xAC, 0xD8, 0xAC, 0x46, 0xD9, 0x84, 0xD8,
	// Bytes 24c0 - 24ff
	0xAC, 0xD9, 0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAC,
	0xD9, 0x8A, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9,
	0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x89,
	0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x8A, 0x46,
	0xD9, 0x84, 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9,
	0x84, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD9, 0x84,
	0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD8,
	0xAC, 0xD8, 0xAD, 0x46, 0xD9, 0x85, 0xD8, 0xAC,
	// Bytes 2500 - 253f
	0xD8, 0xAE, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9,
	0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x8A,
	0x46, 0xD9, 0x85, 0xD8, 0xAD, 0xD8, 0xAC, 0x46,
	0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9,
	0x85, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x85,
	0xD8, 0xAE, 0xD8, 0xAC, 0x46, 0xD9, 0x85, 0xD8,
	0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAE,
	0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD9, 0x85, 0xD9,
	// Bytes 2540 - 257f
	0x8A, 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD8, 0xAD,
	0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x85, 0x46,
	0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x89, 0x46, 0xD9,
	0x86, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x86,
	0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, 0x86, 0xD8,
	0xAD, 0xD9, 0x89, 0x46, 0xD9, 0x86, 0xD8, 0xAD,
	0xD9, 0x8A, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9,
	0x89, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x8A,
	// Bytes 2580 - 25bf
	0x46, 0xD9, 0x87, 0xD9, 0x85, 0xD8, 0xAC, 0x46,
	0xD9, 0x87, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9,
	0x8A, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x8A,
	0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9,
	0x85, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x85,
	0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8,
	0xA7, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAC,
	0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAD, 0x46,
	// Bytes 25c0 - 25ff
	0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAE, 0x46, 0xD9,
	0x8A, 0xD9, 0x94, 0xD8, 0xB1, 0x46, 0xD9, 0x8A,
	0xD9, 0x94, 0xD8, 0xB2, 0x46, 0xD9, 0x8A, 0xD9,
	0x94, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x94,
	0xD9, 0x86, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9,
	0x87, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x88,
	0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x89, 0x46,
	0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x8A, 0x46, 0xD9,
	// Bytes 2600 - 263f
	0x8A, 0xD9, 0x94, 0xDB, 0x86, 0x46, 0xD9, 0x8A,
	0xD9, 0x94, 0xDB, 0x87, 0x46, 0xD9, 0x8A, 0xD9,
	0x94, 0xDB, 0x88, 0x46, 0xD9, 0x8A, 0xD9, 0x94,
	0xDB, 0x90, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB,
	0x95, 0x46, 0xE0, 0xB9, 0x8D, 0xE0, 0xB8, 0xB2,
	0x46, 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0x99, 0x46,
	0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0xA1, 0x46, 0xE0,
	0xBB, 0x8D, 0xE0, 0xBA, 0xB2, 0x46, 0xE0, 0xBD,
	// Bytes 2640 - 267f
	0x80, 0xE0, 0xBE, 0xB5, 0x46, 0xE0, 0xBD, 0x82,
	0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x8C, 0xE0,
	0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x91, 0xE0, 0xBE,
	0xB7, 0x46, 0xE0, 0xBD, 0x96, 0xE0, 0xBE, 0xB7,
	0x46, 0xE0, 0xBD, 0x9B, 0xE0, 0xBE, 0xB7, 0x46,
	0xE0, 0xBE, 0x90, 0xE0, 0xBE, 0xB5, 0x46, 0xE0,
	0xBE, 0x92, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE,
	0x9C, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA1,
	// Bytes 2680 - 26bf
	0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA6, 0xE0,
	0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xAB, 0xE0, 0xBE,
	0xB7, 0x46, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2,
	0x46, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0x46,
	0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0x46, 0xE2,
	0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x46, 0xE3, 0x81,
	0xBB, 0xE3, 0x81, 0x8B, 0x46, 0xE3, 0x82, 0x88,
	0xE3, 0x82, 0x8A, 0x46, 0xE3, 0x82, 0xAD, 0xE3,
	// Bytes 26c0 - 26ff
	0x83, 0xAD, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x82,
	0xB3, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0x88,
	0x46, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xB3, 0x46,
	0xE3, 0x83, 0x8A, 0xE3, 0x83, 0x8E, 0x46, 0xE3,
	0x83, 0x9B, 0xE3, 0x83, 0xB3, 0x46, 0xE3, 0x83,
	0x9F, 0xE3, 0x83, 0xAA, 0x46, 0xE3, 0x83, 0xAA,
	0xE3, 0x83, 0xA9, 0x46, 0xE3, 0x83, 0xAC, 0xE3,
	0x83, 0xA0, 0x46, 0xE5, 0xA4, 0xA7, 0xE6, 0xAD,
	// Bytes 2700 - 273f
	0xA3, 0x46, 0xE5, 0xB9, 0xB3, 0xE6, 0x88, 0x90,
	0x46, 0xE6, 0x98, 0x8E, 0xE6, 0xB2, 0xBB, 0x46,
	0xE6, 0x98, 0xAD, 0xE5, 0x92, 0x8C, 0x47, 0x72,
	0x61, 0x64, 0xE2, 0x88, 0x95, 0x73, 0x47, 0xE3,
	0x80, 0x94, 0x53, 0xE3, 0x80, 0x95, 0x48, 0x28,
	0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x29, 0x48,
	0x28, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x29,
	0x48, 0x28, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1,
	// Bytes 2740 - 277f
	0x29, 0x48, 0x28, 0xE1, 0x84, 0x85, 0xE1, 0x85,
	0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x86, 0xE1,
	0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x87,
	0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84,
	0x89, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1,
	0x84, 0x8B, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28,
	0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x29, 0x48,
	0x28, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xAE, 0x29,
	// Bytes 2780 - 27bf
	0x48, 0x28, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1,
	0x29, 0x48, 0x28, 0xE1, 0x84, 0x8F, 0xE1, 0x85,
	0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x90, 0xE1,
	0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x91,
	0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84,
	0x92, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x72, 0x61,
	0x64, 0xE2, 0x88, 0x95, 0x73, 0x32, 0x48, 0xD8,
	0xA7, 0xD9, 0x83, 0xD8, 0xA8, 0xD8, 0xB1, 0x48,
	// Bytes 27c0 - 27ff
	0xD8, 0xA7, 0xD9, 0x84, 0xD9, 0x84, 0xD9, 0x87,
	0x48, 0xD8, 0xB1, 0xD8, 0xB3, 0xD9, 0x88, 0xD9,
	0x84, 0x48, 0xD8, 0xB1, 0xDB, 0x8C, 0xD8, 0xA7,
	0xD9, 0x84, 0x48, 0xD8, 0xB5, 0xD9, 0x84, 0xD8,
	0xB9, 0xD9, 0x85, 0x48, 0xD8, 0xB9, 0xD9, 0x84,
	0xD9, 0x8A, 0xD9, 0x87, 0x48, 0xD9, 0x85, 0xD8,
	0xAD, 0xD9, 0x85, 0xD8, 0xAF, 0x48, 0xD9, 0x88,
	0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x49, 0xE2,
	// Bytes 2800 - 283f
	0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2,
	0x49, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0xE2,
	0x80, 0xB5, 0x49, 0xE2, 0x88, 0xAB, 0xE2, 0x88,
	0xAB, 0xE2, 0x88, 0xAB, 0x49, 0xE2, 0x88, 0xAE,
	0xE2, 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x49, 0xE3,
	0x80, 0x94, 0xE4, 0xB8, 0x89, 0xE3, 0x80, 0x95,
	0x49, 0xE3, 0x80, 0x94, 0xE4, 0xBA, 0x8C, 0xE3,
	0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE5, 0x8B,
	// Bytes 2840 - 287f
	0x9D, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94,
	0xE5, 0xAE, 0x89, 0xE3, 0x80, 0x95, 0x49, 0xE3,
	0x80, 0x94, 0xE6, 0x89, 0x93, 0xE3, 0x80, 0x95,
	0x49, 0xE3, 0x80, 0x94, 0xE6, 0x95, 0x97, 0xE3,
	0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE6, 0x9C,
	0xAC, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94,
	0xE7, 0x82, 0xB9, 0xE3, 0x80, 0x95, 0x49, 0xE3,
	0x80, 0x94, 0xE7, 0x9B, 0x97, 0xE3, 0x80, 0x95,
	// Bytes 2880 - 28bf
	0x49, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xBC, 0xE3,
	0x83, 0xAB, 0x49, 0xE3, 0x82, 0xA4, 0xE3, 0x83,
	0xB3, 0xE3, 0x83, 0x81, 0x49, 0xE3, 0x82, 0xA6,
	0xE3, 0x82, 0xA9, 0xE3, 0x83, 0xB3, 0x49, 0xE3,
	0x82, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB9,
	0x49, 0xE3, 0x82, 0xAA, 0xE3, 0x83, 0xBC, 0xE3,
	0x83, 0xA0, 0x49, 0xE3, 0x82, 0xAB, 0xE3, 0x82,
	0xA4, 0xE3, 0x83, 0xAA, 0x49, 0xE3, 0x82, 0xB1,
	// Bytes 28c0 - 28ff
	0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xB9, 0x49, 0xE3,
	0x82, 0xB3, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x8A,
	0x49, 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3,
	0x83, 0x81, 0x49, 0xE3, 0x82, 0xBB, 0xE3, 0x83,
	0xB3, 0xE3, 0x83, 0x88, 0x49, 0xE3, 0x83, 0x86,
	0xE3, 0x82, 0x99, 0xE3, 0x82, 0xB7, 0x49, 0xE3,
	0x83, 0x88, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB,
	0x49, 0xE3, 0x83, 0x8E, 0xE3, 0x83, 0x83, 0xE3,
	// Bytes 2900 - 293f
	0x83, 0x88, 0x49, 0xE3, 0x83, 0x8F, 0xE3, 0x82,
	0xA4, 0xE3, 0x83, 0x84, 0x49, 0xE3, 0x83, 0x92,
	0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, 0x49, 0xE3,
	0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xB3,
	0x49, 0xE3, 0x83, 0x95, 0xE3, 0x83, 0xA9, 0xE3,
	0x83, 0xB3, 0x49, 0xE3, 0x83, 0x98, 0xE3, 0x82,
	0x9A, 0xE3, 0x82, 0xBD, 0x49, 0xE3, 0x83, 0x98,
	0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x84, 0x49, 0xE3,
	// Bytes 2940 - 297f
	0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB,
	0x49, 0xE3, 0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3,
	0x83, 0xB3, 0x49, 0xE3, 0x83, 0x9E, 0xE3, 0x82,
	0xA4, 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, 0x9E,
	0xE3, 0x83, 0x83, 0xE3, 0x83, 0x8F, 0x49, 0xE3,
	0x83, 0x9E, 0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xAF,
	0x49, 0xE3, 0x83, 0xA4, 0xE3, 0x83, 0xBC, 0xE3,
	0x83, 0xAB, 0x49, 0xE3, 0x83, 0xA6, 0xE3, 0x82,
	// Bytes 2980 - 29bf
	0xA2, 0xE3, 0x83, 0xB3, 0x49, 0xE3, 0x83, 0xAF,
	0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0x4C, 0xE2,
	0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2,
	0xE2, 0x80, 0xB2, 0x4C, 0xE2, 0x88, 0xAB, 0xE2,
	0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB,
	0x4C, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xAB, 0xE3,
	0x83, 0x95, 0xE3, 0x82, 0xA1, 0x4C, 0xE3, 0x82,
	0xA8, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xAB, 0xE3,
	// Bytes 29c0 - 29ff
	0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x82,
	0x99, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xB3, 0x4C,
	0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83,
	0xB3, 0xE3, 0x83, 0x9E, 0x4C, 0xE3, 0x82, 0xAB,
	0xE3, 0x83, 0xA9, 0xE3, 0x83, 0x83, 0xE3, 0x83,
	0x88, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x83, 0xAD,
	0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC, 0x4C, 0xE3,
	0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x8B,
	// Bytes 2a00 - 2a3f
	0xE3, 0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAD, 0xE3,
	0x83, 0xA5, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC,
	0x4C, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3,
	0x83, 0xA9, 0xE3, 0x83, 0xA0, 0x4C, 0xE3, 0x82,
	0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xBC, 0xE3,
	0x83, 0x8D, 0x4C, 0xE3, 0x82, 0xB5, 0xE3, 0x82,
	0xA4, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C,
	0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83,
	// Bytes 2a40 - 2a7f
	0xBC, 0xE3, 0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x8F,
	0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x83,
	0x84, 0x4C, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A,
	0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C, 0xE3,
	0x83, 0x95, 0xE3, 0x82, 0xA3, 0xE3, 0x83, 0xBC,
	0xE3, 0x83, 0x88, 0x4C, 0xE3, 0x83, 0x98, 0xE3,
	0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xBF,
	0x4C, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3,
	// Bytes 2a80 - 2abf
	0x83, 0x8B, 0xE3, 0x83, 0x92, 0x4C, 0xE3, 0x83,
	0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xB3, 0xE3,
	0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x9B, 0xE3, 0x82,
	0x99, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x88, 0x4C,
	0xE3, 0x83, 0x9E, 0xE3, 0x82, 0xA4, 0xE3, 0x82,
	0xAF, 0xE3, 0x83, 0xAD, 0x4C, 0xE3, 0x83, 0x9F,
	0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83,
	0xB3, 0x4C, 0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xBC,
	// Bytes 2ac0 - 2aff
	0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x4C, 0xE3,
	0x83, 0xAA, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88,
	0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x83, 0xAB, 0xE3,
	0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC,
	0x4C, 0xE6, 0xA0, 0xAA, 0xE5, 0xBC, 0x8F, 0xE4,
	0xBC, 0x9A, 0xE7, 0xA4, 0xBE, 0x4E, 0x28, 0xE1,
	0x84, 0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x92,
	0xE1, 0x85, 0xAE, 0x29, 0x4F, 0xD8, 0xAC, 0xD9,
	// Bytes 2b00 - 2b3f
	0x84, 0x20, 0xD8, 0xAC, 0xD9, 0x84, 0xD8, 0xA7,
	0xD9, 0x84, 0xD9, 0x87, 0x4F, 0xE3, 0x82, 0xA2,
	0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83,
	0xBC, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xA2,
	0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x98, 0xE3, 0x82,
	0x9A, 0xE3, 0x82, 0xA2, 0x4F, 0xE3, 0x82, 0xAD,
	0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xAF, 0xE3, 0x83,
	0x83, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xB5,
	// Bytes 2b40 - 2b7f
	0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x81, 0xE3, 0x83,
	0xBC, 0xE3, 0x83, 0xA0, 0x4F, 0xE3, 0x83, 0x8F,
	0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83,
	0xAC, 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x98,
	0xE3, 0x82, 0xAF, 0xE3, 0x82, 0xBF, 0xE3, 0x83,
	0xBC, 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x9B,
	0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xA4, 0xE3, 0x83,
	0xB3, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x83, 0x9E,
	// Bytes 2b80 - 2bbf
	0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB7, 0xE3, 0x83,
	0xA7, 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xA1,
	0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83,
	0x88, 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xAB,
	0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x95, 0xE3, 0x82,
	0x99, 0xE3, 0x83, 0xAB, 0x51, 0x28, 0xE1, 0x84,
	0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x8C, 0xE1,
	0x85, 0xA5, 0xE1, 0x86, 0xAB, 0x29, 0x52, 0xE3,
	// Bytes 2bc0 - 2bff
	0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB,
	0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83,
	0xBC, 0x52, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD,
	0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83,
	0xA9, 0xE3, 0x83, 0xA0, 0x52, 0xE3, 0x82, 0xAD,
	0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xA1, 0xE3, 0x83,
	0xBC, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x52,
	0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83,
	// Bytes 2c00 - 2c3f
	0xA9, 0xE3, 0x83, 0xA0, 0xE3, 0x83, 0x88, 0xE3,
	0x83, 0xB3, 0x52, 0xE3, 0x82, 0xAF, 0xE3, 0x83,
	0xAB, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0xE3,
	0x82, 0xA4, 0xE3, 0x83, 0xAD, 0x52, 0xE3, 0x83,
	0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3,
	0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88,
	0x52, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3,
	0x82, 0xA2, 0xE3, 0x82, 0xB9, 0xE3, 0x83, 0x88,
	// Bytes 2c40 - 2c7f
	0xE3, 0x83, 0xAB, 0x52, 0xE3, 0x83, 0x95, 0xE3,
	0x82, 0x99, 0xE3, 0x83, 0x83, 0xE3, 0x82, 0xB7,
	0xE3, 0x82, 0xA7, 0xE3, 0x83, 0xAB, 0x52, 0xE3,
	0x83, 0x9F, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0x8F,
	0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83,
	0xAB, 0x52, 0xE3, 0x83, 0xAC, 0xE3, 0x83, 0xB3,
	0xE3, 0x83, 0x88, 0xE3, 0x82, 0xB1, 0xE3, 0x82,
	0x99, 0xE3, 0x83, 0xB3, 0x61, 0xD8, 0xB5, 0xD9,
	// Bytes 2c80 - 2cbf
	0x84, 0xD9, 0x89, 0x20, 0xD8, 0xA7, 0xD9, 0x84,
	0xD9, 0x84, 0xD9, 0x87, 0x20, 0xD8, 0xB9, 0xD9,
	0x84, 0xD9, 0x8A, 0xD9, 0x87, 0x20, 0xD9, 0x88,
	0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x06, 0xE0,
	0xA7, 0x87, 0xE0, 0xA6, 0xBE, 0x01, 0x06, 0xE0,
	0xA7, 0x87, 0xE0, 0xA7, 0x97, 0x01, 0x06, 0xE0,
	0xAD, 0x87, 0xE0, 0xAC, 0xBE, 0x01, 0x06, 0xE0,
	0xAD, 0x87, 0xE0, 0xAD, 0x96, 0x01, 0x06, 0xE0,
	// Bytes 2cc0 - 2cff
	0xAD, 0x87, 0xE0, 0xAD, 0x97, 0x01, 0x06, 0xE0,
	0xAE, 0x92, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0,
	0xAF, 0x86, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0,
	0xAF, 0x86, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0,
	0xAF, 0x87, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0,
	0xB2, 0xBF, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0,
	0xB3, 0x86, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0,
	0xB3, 0x86, 0xE0, 0xB3, 0x96, 0x01, 0x06, 0xE0,
	// Bytes 2d00 - 2d3f
	0xB5, 0x86, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0,
	0xB5, 0x86, 0xE0, 0xB5, 0x97, 0x01, 0x06, 0xE0,
	0xB5, 0x87, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0,
	0xB7, 0x99, 0xE0, 0xB7, 0x9F, 0x01, 0x06, 0xE1,
	0x80, 0xA5, 0xE1, 0x80, 0xAE, 0x01, 0x06, 0xE1,
	0xAC, 0x85, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	0xAC, 0x87, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	0xAC, 0x89, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	// Bytes 2d40 - 2d7f
	0xAC, 0x8B, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	0xAC, 0x8D, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	0xAC, 0x91, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	0xAC, 0xBA, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	0xAC, 0xBC, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	0xAC, 0xBE, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	0xAC, 0xBF, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	0xAD, 0x82, 0xE1, 0xAC, 0xB5, 0x01, 0x08, 0xF0,
	// Bytes 2d80 - 2dbf
	0x91, 0x84, 0xB1, 0xF0, 0x91, 0x84, 0xA7, 0x01,
	0x08, 0xF0, 0x91, 0x84, 0xB2, 0xF0, 0x91, 0x84,
	0xA7, 0x01, 0x08, 0xF0, 0x91, 0x8D, 0x87, 0xF0,
	0x91, 0x8C, 0xBE, 0x01, 0x08, 0xF0, 0x91, 0x8D,
	0x87, 0xF0, 0x91, 0x8D, 0x97, 0x01, 0x08, 0xF0,
	0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xB0, 0x01,
	0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92,
	0xBA, 0x01, 0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0,
	// Bytes 2dc0 - 2dff
	0x91, 0x92, 0xBD, 0x01, 0x08, 0xF0, 0x91, 0x96,
	0xB8, 0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, 0xF0,
	0x91, 0x96, 0xB9, 0xF0, 0x91, 0x96, 0xAF, 0x01,
	0x09, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0xE0,
	0xB3, 0x95, 0x02, 0x09, 0xE0, 0xB7, 0x99, 0xE0,
	0xB7, 0x8F, 0xE0, 0xB7, 0x8A, 0x12, 0x44, 0x44,
	0x5A, 0xCC, 0x8C, 0xC9, 0x44, 0x44, 0x7A, 0xCC,
	0x8C, 0xC9, 0x44, 0x64, 0x7A, 0xCC, 0x8C, 0xC9,
	// Bytes 2e00 - 2e3f
	0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x93, 0xC9,
	0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x94, 0xC9,
	0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x95, 0xB5,
	0x46, 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, 0x01,
	// Bytes 2e40 - 2e7f
	0x46, 0xE1, 0x84, 0x87, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x89, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xAE, 0x01,
	0x46, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x90, 0xE1, 0x85, 0xA1, 0x01,
	// Bytes 2e80 - 2ebf
	0x46, 0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, 0x01,
	0x49, 0xE3, 0x83, 0xA1, 0xE3, 0x82, 0xAB, 0xE3,
	0x82, 0x99, 0x0D, 0x4C, 0xE1, 0x84, 0x8C, 0xE1,
	0x85, 0xAE, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xB4,
	0x01, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99,
	0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D, 0x4C,
	0xE3, 0x82, 0xB3, 0xE3, 0x83, 0xBC, 0xE3, 0x83,
	// Bytes 2ec0 - 2eff
	0x9B, 0xE3, 0x82, 0x9A, 0x0D, 0x4C, 0xE3, 0x83,
	0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3,
	0x82, 0x99, 0x0D, 0x4F, 0xE1, 0x84, 0x8E, 0xE1,
	0x85, 0xA1, 0xE1, 0x86, 0xB7, 0xE1, 0x84, 0x80,
	0xE1, 0x85, 0xA9, 0x01, 0x4F, 0xE3, 0x82, 0xA4,
	0xE3, 0x83, 0x8B, 0xE3, 0x83, 0xB3, 0xE3, 0x82,
	0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3, 0x82,
	0xB7, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xB3, 0xE3,
	// Bytes 2f00 - 2f3f
	0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3,
	0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC,
	0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D, 0x4F,
	0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0xE3, 0x83,
	0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D,
	0x52, 0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xB9, 0xE3,
	0x82, 0xAF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88,
	0xE3, 0x82, 0x99, 0x0D, 0x52, 0xE3, 0x83, 0x95,
	// Bytes 2f40 - 2f7f
	0xE3, 0x82, 0xA1, 0xE3, 0x83, 0xA9, 0xE3, 0x83,
	0x83, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D,
	0x86, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0x01,
	0x86, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8F, 0x01,
	0x03, 0x3C, 0xCC, 0xB8, 0x05, 0x03, 0x3D, 0xCC,
	0xB8, 0x05, 0x03, 0x3E, 0xCC, 0xB8, 0x05, 0x03,
	0x41, 0xCC, 0x80, 0xC9, 0x03, 0x41, 0xCC, 0x81,
	0xC9, 0x03, 0x41, 0xCC, 0x83, 0xC9, 0x03, 0x41,
	// Bytes 2f80 - 2fbf
	0xCC, 0x84, 0xC9, 0x03, 0x41, 0xCC, 0x89, 0xC9,
	0x03, 0x41, 0xCC, 0x8C, 0xC9, 0x03, 0x41, 0xCC,
	0x8F, 0xC9, 0x03, 0x41, 0xCC, 0x91, 0xC9, 0x03,
	0x41, 0xCC, 0xA5, 0xB5, 0x03, 0x41, 0xCC, 0xA8,
	0xA5, 0x03, 0x42, 0xCC, 0x87, 0xC9, 0x03, 0x42,
	0xCC, 0xA3, 0xB5, 0x03, 0x42, 0xCC, 0xB1, 0xB5,
	0x03, 0x43, 0xCC, 0x81, 0xC9, 0x03, 0x43, 0xCC,
	0x82, 0xC9, 0x03, 0x43, 0xCC, 0x87, 0xC9, 0x03,
	// Bytes 2fc0 - 2fff
	0x43, 0xCC, 0x8C, 0xC9, 0x03, 0x44, 0xCC, 0x87,
	0xC9, 0x03, 0x44, 0xCC, 0x8C, 0xC9, 0x03, 0x44,
	0xCC, 0xA3, 0xB5, 0x03, 0x44, 0xCC, 0xA7, 0xA5,
	0x03, 0x44, 0xCC, 0xAD, 0xB5, 0x03, 0x44, 0xCC,
	0xB1, 0xB5, 0x03, 0x45, 0xCC, 0x80, 0xC9, 0x03,
	0x45, 0xCC, 0x81, 0xC9, 0x03, 0x45, 0xCC, 0x83,
	0xC9, 0x03, 0x45, 0xCC, 0x86, 0xC9, 0x03, 0x45,
	0xCC, 0x87, 0xC9, 0x03, 0x45, 0xCC, 0x88, 0xC9,
	// Bytes 3000 - 303f
	0x03, 0x45, 0xCC, 0x89, 0xC9, 0x03, 0x45, 0xCC,
	0x8C, 0xC9, 0x03, 0x45, 0xCC, 0x8F, 0xC9, 0x03,
	0x45, 0xCC, 0x91, 0xC9, 0x03, 0x45, 0xCC, 0xA8,
	0xA5, 0x03, 0x45, 0xCC, 0xAD, 0xB5, 0x03, 0x45,
	0xCC, 0xB0, 0xB5, 0x03, 0x46, 0xCC, 0x87, 0xC9,
	0x03, 0x47, 0xCC, 0x81, 0xC9, 0x03, 0x47, 0xCC,
	0x82, 0xC9, 0x03, 0x47, 0xCC, 0x84, 0xC9, 0x03,
	0x47, 0xCC, 0x86, 0xC9, 0x03, 0x47, 0xCC, 0x87,
	// Bytes 3040 - 307f
	0xC9, 0x03, 0x47, 0xCC, 0x8C, 0xC9, 0x03, 0x47,
	0xCC, 0xA7, 0xA5, 0x03, 0x48, 0xCC, 0x82, 0xC9,
	0x03, 0x48, 0xCC, 0x87, 0xC9, 0x03, 0x48, 0xCC,
	0x88, 0xC9, 0x03, 0x48, 0xCC, 0x8C, 0xC9, 0x03,
	0x48, 0xCC, 0xA3, 0xB5, 0x03, 0x48, 0xCC, 0xA7,
	0xA5, 0x03, 0x48, 0xCC, 0xAE, 0xB5, 0x03, 0x49,
	0xCC, 0x80, 0xC9, 0x03, 0x49, 0xCC, 0x81, 0xC9,
	0x03, 0x49, 0xCC, 0x82, 0xC9, 0x03, 0x49, 0xCC,
	// Bytes 3080 - 30bf
	0x83, 0xC9, 0x03, 0x49, 0xCC, 0x84, 0xC9, 0x03,
	0x49, 0xCC, 0x86, 0xC9, 0x03, 0x49, 0xCC, 0x87,
	0xC9, 0x03, 0x49, 0xCC, 0x89, 0xC9, 0x03, 0x49,
	0xCC, 0x8C, 0xC9, 0x03, 0x49, 0xCC, 0x8F, 0xC9,
	0x03, 0x49, 0xCC, 0x91, 0xC9, 0x03, 0x49, 0xCC,
	0xA3, 0xB5, 0x03, 0x49, 0xCC, 0xA8, 0xA5, 0x03,
	0x49, 0xCC, 0xB0, 0xB5, 0x03, 0x4A, 0xCC, 0x82,
	0xC9, 0x03, 0x4B, 0xCC, 0x81, 0xC9, 0x03, 0x4B,
	// Bytes 30c0 - 30ff
	0xCC, 0x8C, 0xC9, 0x03, 0x4B, 0xCC, 0xA3, 0xB5,
	0x03, 0x4B, 0xCC, 0xA7, 0xA5, 0x03, 0x4B, 0xCC,
	0xB1, 0xB5, 0x03, 0x4C, 0xCC, 0x81, 0xC9, 0x03,
	0x4C, 0xCC, 0x8C, 0xC9, 0x03, 0x4C, 0xCC, 0xA7,
	0xA5, 0x03, 0x4C, 0xCC, 0xAD, 0xB5, 0x03, 0x4C,
	0xCC, 0xB1, 0xB5, 0x03, 0x4D, 0xCC, 0x81, 0xC9,
	0x03, 0x4D, 0xCC, 0x87, 0xC9, 0x03, 0x4D, 0xCC,
	0xA3, 0xB5, 0x03, 0x4E, 0xCC, 0x80, 0xC9, 0x03,
	// Bytes 3100 - 313f
	0x4E, 0xCC, 0x81, 0xC9, 0x03, 0x4E, 0xCC, 0x83,
	0xC9, 0x03, 0x4E, 0xCC, 0x87, 0xC9, 0x03, 0x4E,
	0xCC, 0x8C, 0xC9, 0x03, 0x4E, 0xCC, 0xA3, 0xB5,
	0x03, 0x4E, 0xCC, 0xA7, 0xA5, 0x03, 0x4E, 0xCC,
	0xAD, 0xB5, 0x03, 0x4E, 0xCC, 0xB1, 0xB5, 0x03,
	0x4F, 0xCC, 0x80, 0xC9, 0x03, 0x4F, 0xCC, 0x81,
	0xC9, 0x03, 0x4F, 0xCC, 0x86, 0xC9, 0x03, 0x4F,
	0xCC, 0x89, 0xC9, 0x03, 0x4F, 0xCC, 0x8B, 0xC9,
	// Bytes 3140 - 317f
	0x03, 0x4F, 0xCC, 0x8C, 0xC9, 0x03, 0x4F, 0xCC,
	0x8F, 0xC9, 0x03, 0x4F, 0xCC, 0x91, 0xC9, 0x03,
	0x50, 0xCC, 0x81, 0xC9, 0x03, 0x50, 0xCC, 0x87,
	0xC9, 0x03, 0x52, 0xCC, 0x81, 0xC9, 0x03, 0x52,
	0xCC, 0x87, 0xC9, 0x03, 0x52, 0xCC, 0x8C, 0xC9,
	0x03, 0x52, 0xCC, 0x8F, 0xC9, 0x03, 0x52, 0xCC,
	0x91, 0xC9, 0x03, 0x52, 0xCC, 0xA7, 0xA5, 0x03,
	0x52, 0xCC, 0xB1, 0xB5, 0x03, 0x53, 0xCC, 0x82,
	// Bytes 3180 - 31bf
	0xC9, 0x03, 0x53, 0xCC, 0x87, 0xC9, 0x03, 0x53,
	0xCC, 0xA6, 0xB5, 0x03, 0x53, 0xCC, 0xA7, 0xA5,
	0x03, 0x54, 0xCC, 0x87, 0xC9, 0x03, 0x54, 0xCC,
	0x8C, 0xC9, 0x03, 0x54, 0xCC, 0xA3, 0xB5, 0x03,
	0x54, 0xCC, 0xA6, 0xB5, 0x03, 0x54, 0xCC, 0xA7,
	0xA5, 0x03, 0x54, 0xCC, 0xAD, 0xB5, 0x03, 0x54,
	0xCC, 0xB1, 0xB5, 0x03, 0x55, 0xCC, 0x80, 0xC9,
	0x03, 0x55, 0xCC, 0x81, 0xC9, 0x03, 0x55, 0xCC,
	// Bytes 31c0 - 31ff
	0x82, 0xC9, 0x03, 0x55, 0xCC, 0x86, 0xC9, 0x03,
	0x55, 0xCC, 0x89, 0xC9, 0x03, 0x55, 0xCC, 0x8A,
	0xC9, 0x03, 0x55, 0xCC, 0x8B, 0xC9, 0x03, 0x55,
	0xCC, 0x8C, 0xC9, 0x03, 0x55, 0xCC, 0x8F, 0xC9,
	0x03, 0x55, 0xCC, 0x91, 0xC9, 0x03, 0x55, 0xCC,
	0xA3, 0xB5, 0x03, 0x55, 0xCC, 0xA4, 0xB5, 0x03,
	0x55, 0xCC, 0xA8, 0xA5, 0x03, 0x55, 0xCC, 0xAD,
	0xB5, 0x03, 0x55, 0xCC, 0xB0, 0xB5, 0x03, 0x56,
	// Bytes 3200 - 323f
	0xCC, 0x83, 0xC9, 0x03, 0x56, 0xCC, 0xA3, 0xB5,
	0x03, 0x57, 0xCC, 0x80, 0xC9, 0x03, 0x57, 0xCC,
	0x81, 0xC9, 0x03, 0x57, 0xCC, 0x82, 0xC9, 0x03,
	0x57, 0xCC, 0x87, 0xC9, 0x03, 0x57, 0xCC, 0x88,
	0xC9, 0x03, 0x57, 0xCC, 0xA3, 0xB5, 0x03, 0x58,
	0xCC, 0x87, 0xC9, 0x03, 0x58, 0xCC, 0x88, 0xC9,
	0x03, 0x59, 0xCC, 0x80, 0xC9, 0x03, 0x59, 0xCC,
	0x81, 0xC9, 0x03, 0x59, 0xCC, 0x82, 0xC9, 0x03,
	// Bytes 3240 - 327f
	0x59, 0xCC, 0x83, 0xC9, 0x03, 0x59, 0xCC, 0x84,
	0xC9, 0x03, 0x59, 0xCC, 0x87, 0xC9, 0x03, 0x59,
	0xCC, 0x88, 0xC9, 0x03, 0x59, 0xCC, 0x89, 0xC9,
	0x03, 0x59, 0xCC, 0xA3, 0xB5, 0x03, 0x5A, 0xCC,
	0x81, 0xC9, 0x03, 0x5A, 0xCC, 0x82, 0xC9, 0x03,
	0x5A, 0xCC, 0x87, 0xC9, 0x03, 0x5A, 0xCC, 0x8C,
	0xC9, 0x03, 0x5A, 0xCC, 0xA3, 0xB5, 0x03, 0x5A,
	0xCC, 0xB1, 0xB5, 0x03, 0x61, 0xCC, 0x80, 0xC9,
	// Bytes 3280 - 32bf
	0x03, 0x61, 0xCC, 0x81, 0xC9, 0x03, 0x61, 0xCC,
	0x83, 0xC9, 0x03, 0x61, 0xCC, 0x84, 0xC9, 0x03,
	0x61, 0xCC, 0x89, 0xC9, 0x03, 0x61, 0xCC, 0x8C,
	0xC9, 0x03, 0x61, 0xCC, 0x8F, 0xC9, 0x03, 0x61,
	0xCC, 0x91, 0xC9, 0x03, 0x61, 0xCC, 0xA5, 0xB5,
	0x03, 0x61, 0xCC, 0xA8, 0xA5, 0x03, 0x62, 0xCC,
	0x87, 0xC9, 0x03, 0x62, 0xCC, 0xA3, 0xB5, 0x03,
	0x62, 0xCC, 0xB1, 0xB5, 0x03, 0x63, 0xCC, 0x81,
	// Bytes 32c0 - 32ff
	0xC9, 0x03, 0x63, 0xCC, 0x82, 0xC9, 0x03, 0x63,
	0xCC, 0x87, 0xC9, 0x03, 0x63, 0xCC, 0x8C, 0xC9,
	0x03, 0x64, 0xCC, 0x87, 0xC9, 0x03, 0x64, 0xCC,
	0x8C, 0xC9, 0x03, 0x64, 0xCC, 0xA3, 0xB5, 0x03,
	0x64, 0xCC, 0xA7, 0xA5, 0x03, 0x64, 0xCC, 0xAD,
	0xB5, 0x03, 0x64, 0xCC, 0xB1, 0xB5, 0x03, 0x65,
	0xCC, 0x80, 0xC9, 0x03, 0x65, 0xCC, 0x81, 0xC9,
	0x03, 0x65, 0xCC, 0x83, 0xC9, 0x03, 0x65, 0xCC,
	// Bytes 3300 - 333f
	0x86, 0xC9, 0x03, 0x65, 0xCC, 0x87, 0xC9, 0x03,
	0x65, 0xCC, 0x88, 0xC9, 0x03, 0x65, 0xCC, 0x89,
	0xC9, 0x03, 0x65, 0xCC, 0x8C, 0xC9, 0x03, 0x65,
	0xCC, 0x8F, 0xC9, 0x03, 0x65, 0xCC, 0x91, 0xC9,
	0x03, 0x65, 0xCC, 0xA8, 0xA5, 0x03, 0x65, 0xCC,
	0xAD, 0xB5, 0x03, 0x65, 0xCC, 0xB0, 0xB5, 0x03,
	0x66, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC, 0x81,
	0xC9, 0x03, 0x67, 0xCC, 0x82, 0xC9, 0x03, 0x67,
	// Bytes 3340 - 337f
	0xCC, 0x84, 0xC9, 0x03, 0x67, 0xCC, 0x86, 0xC9,
	0x03, 0x67, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC,
	0x8C, 0xC9, 0x03, 0x67, 0xCC, 0xA7, 0xA5, 0x03,
	0x68, 0xCC, 0x82, 0xC9, 0x03, 0x68, 0xCC, 0x87,
	0xC9, 0x03, 0x68, 0xCC, 0x88, 0xC9, 0x03, 0x68,
	0xCC, 0x8C, 0xC9, 0x03, 0x68, 0xCC, 0xA3, 0xB5,
	0x03, 0x68, 0xCC, 0xA7, 0xA5, 0x03, 0x68, 0xCC,
	0xAE, 0xB5, 0x03, 0x68, 0xCC, 0xB1, 0xB5, 0x03,
	// Bytes 3380 - 33bf
	0x69, 0xCC, 0x80, 0xC9, 0x03, 0x69, 0xCC, 0x81,
	0xC9, 0x03, 0x69, 0xCC, 0x82, 0xC9, 0x03, 0x69,
	0xCC, 0x83, 0xC9, 0x03, 0x69, 0xCC, 0x84, 0xC9,
	0x03, 0x69, 0xCC, 0x86, 0xC9, 0x03, 0x69, 0xCC,
	0x89, 0xC9, 0x03, 0x69, 0xCC, 0x8C, 0xC9, 0x03,
	0x69, 0xCC, 0x8F, 0xC9, 0x03, 0x69, 0xCC, 0x91,
	0xC9, 0x03, 0x69, 0xCC, 0xA3, 0xB5, 0x03, 0x69,
	0xCC, 0xA8, 0xA5, 0x03, 0x69, 0xCC, 0xB0, 0xB5,
	// Bytes 33c0 - 33ff
	0x03, 0x6A, 0xCC, 0x82, 0xC9, 0x03, 0x6A, 0xCC,
	0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0x81, 0xC9, 0x03,
	0x6B, 0xCC, 0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0xA3,
	0xB5, 0x03, 0x6B, 0xCC, 0xA7, 0xA5, 0x03, 0x6B,
	0xCC, 0xB1, 0xB5, 0x03, 0x6C, 0xCC, 0x81, 0xC9,
	0x03, 0x6C, 0xCC, 0x8C, 0xC9, 0x03, 0x6C, 0xCC,
	0xA7, 0xA5, 0x03, 0x6C, 0xCC, 0xAD, 0xB5, 0x03,
	0x6C, 0xCC, 0xB1, 0xB5, 0x03, 0x6D, 0xCC, 0x81,
	// Bytes 3400 - 343f
	0xC9, 0x03, 0x6D, 0xCC, 0x87, 0xC9, 0x03, 0x6D,
	0xCC, 0xA3, 0xB5, 0x03, 0x6E, 0xCC, 0x80, 0xC9,
	0x03, 0x6E, 0xCC, 0x81, 0xC9, 0x03, 0x6E, 0xCC,
	0x83, 0xC9, 0x03, 0x6E, 0xCC, 0x87, 0xC9, 0x03,
	0x6E, 0xCC, 0x8C, 0xC9, 0x03, 0x6E, 0xCC, 0xA3,
	0xB5, 0x03, 0x6E, 0xCC, 0xA7, 0xA5, 0x03, 0x6E,
	0xCC, 0xAD, 0xB5, 0x03, 0x6E, 0xCC, 0xB1, 0xB5,
	0x03, 0x6F, 0xCC, 0x80, 0xC9, 0x03, 0x6F, 0xCC,
	// Bytes 3440 - 347f
	0x81, 0xC9, 0x03, 0x6F, 0xCC, 0x86, 0xC9, 0x03,
	0x6F, 0xCC, 0x89, 0xC9, 0x03, 0x6F, 0xCC, 0x8B,
	0xC9, 0x03, 0x6F, 0xCC, 0x8C, 0xC9, 0x03, 0x6F,
	0xCC, 0x8F, 0xC9, 0x03, 0x6F, 0xCC, 0x91, 0xC9,
	0x03, 0x70, 0xCC, 0x81, 0xC9, 0x03, 0x70, 0xCC,
	0x87, 0xC9, 0x03, 0x72, 0xCC, 0x81, 0xC9, 0x03,
	0x72, 0xCC, 0x87, 0xC9, 0x03, 0x72, 0xCC, 0x8C,
	0xC9, 0x03, 0x72, 0xCC, 0x8F, 0xC9, 0x03, 0x72,
	// Bytes 3480 - 34bf
	0xCC, 0x91, 0xC9, 0x03, 0x72, 0xCC, 0xA7, 0xA5,
	0x03, 0x72, 0xCC, 0xB1, 0xB5, 0x03, 0x73, 0xCC,
	0x82, 0xC9, 0x03, 0x73, 0xCC, 0x87, 0xC9, 0x03,
	0x73, 0xCC, 0xA6, 0xB5, 0x03, 0x73, 0xCC, 0xA7,
	0xA5, 0x03, 0x74, 0xCC, 0x87, 0xC9, 0x03, 0x74,
	0xCC, 0x88, 0xC9, 0x03, 0x74, 0xCC, 0x8C, 0xC9,
	0x03, 0x74, 0xCC, 0xA3, 0xB5, 0x03, 0x74, 0xCC,
	0xA6, 0xB5, 0x03, 0x74, 0xCC, 0xA7, 0xA5, 0x03,
	// Bytes 34c0 - 34ff
	0x74, 0xCC, 0xAD, 0xB5, 0x03, 0x74, 0xCC, 0xB1,
	0xB5, 0x03, 0x75, 0xCC, 0x80, 0xC9, 0x03, 0x75,
	0xCC, 0x81, 0xC9, 0x03, 0x75, 0xCC, 0x82, 0xC9,
	0x03, 0x75, 0xCC, 0x86, 0xC9, 0x03, 0x75, 0xCC,
	0x89, 0xC9, 0x03, 0x75, 0xCC, 0x8A, 0xC9, 0x03,
	0x75, 0xCC, 0x8B, 0xC9, 0x03, 0x75, 0xCC, 0x8C,
	0xC9, 0x03, 0x75, 0xCC, 0x8F, 0xC9, 0x03, 0x75,
	0xCC, 0x91, 0xC9, 0x03, 0x75, 0xCC, 0xA3, 0xB5,
	// Bytes 3500 - 353f
	0x03, 0x75, 0xCC, 0xA4, 0xB5, 0x03, 0x75, 0xCC,
	0xA8, 0xA5, 0x03, 0x75, 0xCC, 0xAD, 0xB5, 0x03,
	0x75, 0xCC, 0xB0, 0xB5, 0x03, 0x76, 0xCC, 0x83,
	0xC9, 0x03, 0x76, 0xCC, 0xA3, 0xB5, 0x03, 0x77,
	0xCC, 0x80, 0xC9, 0x03, 0x77, 0xCC, 0x81, 0xC9,
	0x03, 0x77, 0xCC, 0x82, 0xC9, 0x03, 0x77, 0xCC,
	0x87, 0xC9, 0x03, 0x77, 0xCC, 0x88, 0xC9, 0x03,
	0x77, 0xCC, 0x8A, 0xC9, 0x03, 0x77, 0xCC, 0xA3,
	// Bytes 3540 - 357f
	0xB5, 0x03, 0x78, 0xCC, 0x87, 0xC9, 0x03, 0x78,
	0xCC, 0x88, 0xC9, 0x03, 0x79, 0xCC, 0x80, 0xC9,
	0x03, 0x79, 0xCC, 0x81, 0xC9, 0x03, 0x79, 0xCC,
	0x82, 0xC9, 0x03, 0x79, 0xCC, 0x83, 0xC9, 0x03,
	0x79, 0xCC, 0x84, 0xC9, 0x03, 0x79, 0xCC, 0x87,
	0xC9, 0x03, 0x79, 0xCC, 0x88, 0xC9, 0x03, 0x79,
	0xCC, 0x89, 0xC9, 0x03, 0x79, 0xCC, 0x8A, 0xC9,
	0x03, 0x79, 0xCC, 0xA3, 0xB5, 0x03, 0x7A, 0xCC,
	// Bytes 3580 - 35bf
	0x81, 0xC9, 0x03, 0x7A, 0xCC, 0x82, 0xC9, 0x03,
	0x7A, 0xCC, 0x87, 0xC9, 0x03, 0x7A, 0xCC, 0x8C,
	0xC9, 0x03, 0x7A, 0xCC, 0xA3, 0xB5, 0x03, 0x7A,
	0xCC, 0xB1, 0xB5, 0x04, 0xC2, 0xA8, 0xCC, 0x80,
	0xCA, 0x04, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x04,
	0xC2, 0xA8, 0xCD, 0x82, 0xCA, 0x04, 0xC3, 0x86,
	0xCC, 0x81, 0xC9, 0x04, 0xC3, 0x86, 0xCC, 0x84,
	0xC9, 0x04, 0xC3, 0x98, 0xCC, 0x81, 0xC9, 0x04,
	// Bytes 35c0 - 35ff
	0xC3, 0xA6, 0xCC, 0x81, 0xC9, 0x04, 0xC3, 0xA6,
	0xCC, 0x84, 0xC9, 0x04, 0xC3, 0xB8, 0xCC, 0x81,
	0xC9, 0x04, 0xC5, 0xBF, 0xCC, 0x87, 0xC9, 0x04,
	0xC6, 0xB7, 0xCC, 0x8C, 0xC9, 0x04, 0xCA, 0x92,
	0xCC, 0x8C, 0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x80,
	0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x81, 0xC9, 0x04,
	0xCE, 0x91, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0x91,
	0xCC, 0x86, 0xC9, 0x04, 0xCE, 0x91, 0xCD, 0x85,
	// Bytes 3600 - 363f
	0xD9, 0x04, 0xCE, 0x95, 0xCC, 0x80, 0xC9, 0x04,
	0xCE, 0x95, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x97,
	0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x97, 0xCC, 0x81,
	0xC9, 0x04, 0xCE, 0x97, 0xCD, 0x85, 0xD9, 0x04,
	0xCE, 0x99, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x99,
	0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x84,
	0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x86, 0xC9, 0x04,
	0xCE, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0x9F,
	// Bytes 3640 - 367f
	0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x9F, 0xCC, 0x81,
	0xC9, 0x04, 0xCE, 0xA1, 0xCC, 0x94, 0xC9, 0x04,
	0xCE, 0xA5, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA5,
	0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x84,
	0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x86, 0xC9, 0x04,
	0xCE, 0xA5, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0xA9,
	0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA9, 0xCC, 0x81,
	0xC9, 0x04, 0xCE, 0xA9, 0xCD, 0x85, 0xD9, 0x04,
	// Bytes 3680 - 36bf
	0xCE, 0xB1, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB1,
	0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB1, 0xCD, 0x85,
	0xD9, 0x04, 0xCE, 0xB5, 0xCC, 0x80, 0xC9, 0x04,
	0xCE, 0xB5, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xB7,
	0xCD, 0x85, 0xD9, 0x04, 0xCE, 0xB9, 0xCC, 0x80,
	0xC9, 0x04, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x04,
	0xCE, 0xB9, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB9,
	0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB9, 0xCD, 0x82,
	// Bytes 36c0 - 36ff
	0xC9, 0x04, 0xCE, 0xBF, 0xCC, 0x80, 0xC9, 0x04,
	0xCE, 0xBF, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x81,
	0xCC, 0x93, 0xC9, 0x04, 0xCF, 0x81, 0xCC, 0x94,
	0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x80, 0xC9, 0x04,
	0xCF, 0x85, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x85,
	0xCC, 0x84, 0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x86,
	0xC9, 0x04, 0xCF, 0x85, 0xCD, 0x82, 0xC9, 0x04,
	0xCF, 0x89, 0xCD, 0x85, 0xD9, 0x04, 0xCF, 0x92,
	// Bytes 3700 - 373f
	0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x92, 0xCC, 0x88,
	0xC9, 0x04, 0xD0, 0x86, 0xCC, 0x88, 0xC9, 0x04,
	0xD0, 0x90, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x90,
	0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x93, 0xCC, 0x81,
	0xC9, 0x04, 0xD0, 0x95, 0xCC, 0x80, 0xC9, 0x04,
	0xD0, 0x95, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x95,
	0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x86,
	0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x88, 0xC9, 0x04,
	// Bytes 3740 - 377f
	0xD0, 0x97, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x98,
	0xCC, 0x80, 0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x84,
	0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x86, 0xC9, 0x04,
	0xD0, 0x98, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x9A,
	0xCC, 0x81, 0xC9, 0x04, 0xD0, 0x9E, 0xCC, 0x88,
	0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x84, 0xC9, 0x04,
	0xD0, 0xA3, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xA3,
	0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x8B,
	// Bytes 3780 - 37bf
	0xC9, 0x04, 0xD0, 0xA7, 0xCC, 0x88, 0xC9, 0x04,
	0xD0, 0xAB, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xAD,
	0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x86,
	0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x88, 0xC9, 0x04,
	0xD0, 0xB3, 0xCC, 0x81, 0xC9, 0x04, 0xD0, 0xB5,
	0xCC, 0x80, 0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x86,
	0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x88, 0xC9, 0x04,
	0xD0, 0xB6, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB6,
	// Bytes 37c0 - 37ff
	0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB7, 0xCC, 0x88,
	0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x80, 0xC9, 0x04,
	0xD0, 0xB8, 0xCC, 0x84, 0xC9, 0x04, 0xD0, 0xB8,
	0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x88,
	0xC9, 0x04, 0xD0, 0xBA, 0xCC, 0x81, 0xC9, 0x04,
	0xD0, 0xBE, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x83,
	0xCC, 0x84, 0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x86,
	0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x88, 0xC9, 0x04,
	// Bytes 3800 - 383f
	0xD1, 0x83, 0xCC, 0x8B, 0xC9, 0x04, 0xD1, 0x87,
	0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x8B, 0xCC, 0x88,
	0xC9, 0x04, 0xD1, 0x8D, 0xCC, 0x88, 0xC9, 0x04,
	0xD1, 0x96, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0xB4,
	0xCC, 0x8F, 0xC9, 0x04, 0xD1, 0xB5, 0xCC, 0x8F,
	0xC9, 0x04, 0xD3, 0x98, 0xCC, 0x88, 0xC9, 0x04,
	0xD3, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA8,
	0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA9, 0xCC, 0x88,
	// Bytes 3840 - 387f
	0xC9, 0x04, 0xD8, 0xA7, 0xD9, 0x93, 0xC9, 0x04,
	0xD8, 0xA7, 0xD9, 0x94, 0xC9, 0x04, 0xD8, 0xA7,
	0xD9, 0x95, 0xB5, 0x04, 0xD9, 0x88, 0xD9, 0x94,
	0xC9, 0x04, 0xD9, 0x8A, 0xD9, 0x94, 0xC9, 0x04,
	0xDB, 0x81, 0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x92,
	0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x95, 0xD9, 0x94,
	0xC9, 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x80, 0xCA,
	0x05, 0x41, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05,
	// Bytes 3880 - 38bf
	0x41, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x41,
	0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x41, 0xCC,
	0x86, 0xCC, 0x80, 0xCA, 0x05, 0x41, 0xCC, 0x86,
	0xCC, 0x81, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC,
	0x83, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x89,
	0xCA, 0x05, 0x41, 0xCC, 0x87, 0xCC, 0x84, 0xCA,
	0x05, 0x41, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05,
	0x41, 0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x41,
	// Bytes 38c0 - 38ff
	0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x41, 0xCC,
	0xA3, 0xCC, 0x86, 0xCA, 0x05, 0x43, 0xCC, 0xA7,
	0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC,
	0x80, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x81,
	0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x83, 0xCA,
	0x05, 0x45, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05,
	0x45, 0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x45,
	0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC,
	// Bytes 3900 - 393f
	0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x45, 0xCC, 0xA7,
	0xCC, 0x86, 0xCA, 0x05, 0x49, 0xCC, 0x88, 0xCC,
	0x81, 0xCA, 0x05, 0x4C, 0xCC, 0xA3, 0xCC, 0x84,
	0xCA, 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x80, 0xCA,
	0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05,
	0x4F, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x4F,
	0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x4F, 0xCC,
	0x83, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x83,
	// Bytes 3940 - 397f
	0xCC, 0x84, 0xCA, 0x05, 0x4F, 0xCC, 0x83, 0xCC,
	0x88, 0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x80,
	0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x81, 0xCA,
	0x05, 0x4F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05,
	0x4F, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x4F,
	0xCC, 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x4F, 0xCC,
	0x9B, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x9B,
	0xCC, 0x83, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC,
	// Bytes 3980 - 39bf
	0x89, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0xA3,
	0xB6, 0x05, 0x4F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA,
	0x05, 0x4F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05,
	0x52, 0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x53,
	0xCC, 0x81, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC,
	0x8C, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC, 0xA3,
	0xCC, 0x87, 0xCA, 0x05, 0x55, 0xCC, 0x83, 0xCC,
	0x81, 0xCA, 0x05, 0x55, 0xCC, 0x84, 0xCC, 0x88,
	// Bytes 39c0 - 39ff
	0xCA, 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x80, 0xCA,
	0x05, 0x55, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05,
	0x55, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x55,
	0xCC, 0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x55, 0xCC,
	0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x55, 0xCC, 0x9B,
	0xCC, 0x81, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC,
	0x83, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x89,
	0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6,
	// Bytes 3a00 - 3a3f
	0x05, 0x61, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05,
	0x61, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x61,
	0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x61, 0xCC,
	0x82, 0xCC, 0x89, 0xCA, 0x05, 0x61, 0xCC, 0x86,
	0xCC, 0x80, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC,
	0x81, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x83,
	0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x89, 0xCA,
	0x05, 0x61, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05,
	// Bytes 3a40 - 3a7f
	0x61, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x61,
	0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x61, 0xCC,
	0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x61, 0xCC, 0xA3,
	0xCC, 0x86, 0xCA, 0x05, 0x63, 0xCC, 0xA7, 0xCC,
	0x81, 0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x80,
	0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x81, 0xCA,
	0x05, 0x65, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05,
	0x65, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x65,
	// Bytes 3a80 - 3abf
	0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x65, 0xCC,
	0x84, 0xCC, 0x81, 0xCA, 0x05, 0x65, 0xCC, 0xA3,
	0xCC, 0x82, 0xCA, 0x05, 0x65, 0xCC, 0xA7, 0xCC,
	0x86, 0xCA, 0x05, 0x69, 0xCC, 0x88, 0xCC, 0x81,
	0xCA, 0x05, 0x6C, 0xCC, 0xA3, 0xCC, 0x84, 0xCA,
	0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05,
	0x6F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x6F,
	0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x6F, 0xCC,
	// Bytes 3ac0 - 3aff
	0x82, 0xCC, 0x89, 0xCA, 0x05, 0x6F, 0xCC, 0x83,
	0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC,
	0x84, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC, 0x88,
	0xCA, 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x80, 0xCA,
	0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05,
	0x6F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, 0x6F,
	0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x6F, 0xCC,
	0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x6F, 0xCC, 0x9B,
	// Bytes 3b00 - 3b3f
	0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC,
	0x83, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x89,
	0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6,
	0x05, 0x6F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05,
	0x6F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05, 0x72,
	0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x73, 0xCC,
	0x81, 0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0x8C,
	0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0xA3, 0xCC,
	// Bytes 3b40 - 3b7f
	0x87, 0xCA, 0x05, 0x75, 0xCC, 0x83, 0xCC, 0x81,
	0xCA, 0x05, 0x75, 0xCC, 0x84, 0xCC, 0x88, 0xCA,
	0x05, 0x75, 0xCC, 0x88, 0xCC, 0x80, 0xCA, 0x05,
	0x75, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05, 0x75,
	0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x75, 0xCC,
	0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x75, 0xCC, 0x9B,
	0xCC, 0x80, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC,
	0x81, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x83,
	// Bytes 3b80 - 3bbf
	0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x89, 0xCA,
	0x05, 0x75, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, 0x05,
	0xE1, 0xBE, 0xBF, 0xCC, 0x80, 0xCA, 0x05, 0xE1,
	0xBE, 0xBF, 0xCC, 0x81, 0xCA, 0x05, 0xE1, 0xBE,
	0xBF, 0xCD, 0x82, 0xCA, 0x05, 0xE1, 0xBF, 0xBE,
	0xCC, 0x80, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCC,
	0x81, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCD, 0x82,
	0xCA, 0x05, 0xE2, 0x86, 0x90, 0xCC, 0xB8, 0x05,
	// Bytes 3bc0 - 3bff
	0x05, 0xE2, 0x86, 0x92, 0xCC, 0xB8, 0x05, 0x05,
	0xE2, 0x86, 0x94, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
	0x87, 0x90, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87,
	0x92, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, 0x94,
	0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x83, 0xCC,
	0xB8, 0x05, 0x05, 0xE2, 0x88, 0x88, 0xCC, 0xB8,
	0x05, 0x05, 0xE2, 0x88, 0x8B, 0xCC, 0xB8, 0x05,
	0x05, 0xE2, 0x88, 0xA3, 0xCC, 0xB8, 0x05, 0x05,
	// Bytes 3c00 - 3c3f
	0xE2, 0x88, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
	0x88, 0xBC, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89,
	0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x85,
	0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x88, 0xCC,
	0xB8, 0x05, 0x05, 0xE2, 0x89, 0x8D, 0xCC, 0xB8,
	0x05, 0x05, 0xE2, 0x89, 0xA1, 0xCC, 0xB8, 0x05,
	0x05, 0xE2, 0x89, 0xA4, 0xCC, 0xB8, 0x05, 0x05,
	0xE2, 0x89, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
	// Bytes 3c40 - 3c7f
	0x89, 0xB2, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89,
	0xB3, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB6,
	0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB7, 0xCC,
	0xB8, 0x05, 0x05, 0xE2, 0x89, 0xBA, 0xCC, 0xB8,
	0x05, 0x05, 0xE2, 0x89, 0xBB, 0xCC, 0xB8, 0x05,
	0x05, 0xE2, 0x89, 0xBC, 0xCC, 0xB8, 0x05, 0x05,
	0xE2, 0x89, 0xBD, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
	0x8A, 0x82, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A,
	// Bytes 3c80 - 3cbf
	0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x86,
	0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x87, 0xCC,
	0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x91, 0xCC, 0xB8,
	0x05, 0x05, 0xE2, 0x8A, 0x92, 0xCC, 0xB8, 0x05,
	0x05, 0xE2, 0x8A, 0xA2, 0xCC, 0xB8, 0x05, 0x05,
	0xE2, 0x8A, 0xA8, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
	0x8A, 0xA9, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A,
	0xAB, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB2,
	// Bytes 3cc0 - 3cff
	0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB3, 0xCC,
	0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB4, 0xCC, 0xB8,
	0x05, 0x05, 0xE2, 0x8A, 0xB5, 0xCC, 0xB8, 0x05,
	0x06, 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
	// Bytes 3d00 - 3d3f
	0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x82, 0xCA,
	0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
	// Bytes 3d40 - 3d7f
	0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCD, 0x82, 0xCA,
	0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCD, 0x82, 0xCA,
	// Bytes 3d80 - 3dbf
	0x06, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
	// Bytes 3dc0 - 3dff
	0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB7, 0xCD, 0x82, 0xCD, 0x85, 0xDA,
	// Bytes 3e00 - 3e3f
	0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x82, 0xCA,
	0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCD, 0x82, 0xCA,
	0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
	// Bytes 3e40 - 3e7f
	0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCD, 0x82, 0xCA,
	0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
	0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x80, 0xCA,
	0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xCA,
	0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x82, 0xCA,
	// Bytes 3e80 - 3ebf
	0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
	0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
	0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCD, 0x82, 0xCA,
	0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
	0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
	0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x82, 0xCA,
	0x06, 0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x85, 0xDA,
	0x06, 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x85, 0xDA,
	// Bytes 3ec0 - 3eff
	0x06, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
	0x06, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
	0x06, 0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x85, 0xDA,
	0x06, 0xE0, 0xA4, 0xA8, 0xE0, 0xA4, 0xBC, 0x09,
	0x06, 0xE0, 0xA4, 0xB0, 0xE0, 0xA4, 0xBC, 0x09,
	0x06, 0xE0, 0xA4, 0xB3, 0xE0, 0xA4, 0xBC, 0x09,
	0x06, 0xE0, 0xB1, 0x86, 0xE0, 0xB1, 0x96, 0x85,
	0x06, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8A, 0x11,
	// Bytes 3f00 - 3f3f
	0x06, 0xE3, 0x81, 0x86, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x8B, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x8D, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x8F, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x91, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x93, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x95, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x97, 0xE3, 0x82, 0x99, 0x0D,
	// Bytes 3f40 - 3f7f
	0x06, 0xE3, 0x81, 0x99, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x9B, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x9D, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x9F, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0xA1, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0xA4, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0xA6, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0xA8, 0xE3, 0x82, 0x99, 0x0D,
	// Bytes 3f80 - 3fbf
	0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x9A, 0x0D,
	0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x9A, 0x0D,
	0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x9A, 0x0D,
	0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x9A, 0x0D,
	// Bytes 3fc0 - 3fff
	0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x9A, 0x0D,
	0x06, 0xE3, 0x82, 0x9D, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, 0x0D,
	// Bytes 4000 - 403f
	0x06, 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xBD, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0x81, 0xE3, 0x82, 0x99, 0x0D,
	// Bytes 4040 - 407f
	0x06, 0xE3, 0x83, 0x84, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0x0D,
	0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0x0D,
	0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, 0x0D,
	// Bytes 4080 - 40bf
	0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x9A, 0x0D,
	0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0x0D,
	0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0x0D,
	0x06, 0xE3, 0x83, 0xAF, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0xB0, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0xB1, 0xE3, 0x82, 0x99, 0x0D,
	// Bytes 40c0 - 40ff
	0x06, 0xE3, 0x83, 0xB2, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0xBD, 0xE3, 0x82, 0x99, 0x0D,
	0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCD,
	0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC,
	0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC,
	0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
	0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB,
	0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCD,
	// Bytes 4100 - 413f
	0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCD,
	0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC,
	0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
	0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB,
	0x08, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCD,
	0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, 0x94, 0xCC,
	0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC,
	0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
	// Bytes 4140 - 417f
	0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB,
	0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCD,
	0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC,
	0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC,
	0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
	0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB,
	0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCD,
	0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCD,
	// Bytes 4180 - 41bf
	0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC,
	0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
	0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB,
	0x08, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCD,
	0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, 0x94, 0xCC,
	0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC,
	0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
	0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB,
	// Bytes 41c0 - 41ff
	0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCD,
	0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC,
	0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC,
	0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
	0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB,
	0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCD,
	0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCD,
	0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC,
	// Bytes 4200 - 423f
	0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF,
	0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB,
	0x08, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCD,
	0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, 0x94, 0xCC,
	0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC,
	0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCF,
	0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB,
	0x08, 0xF0, 0x91, 0x82, 0x99, 0xF0, 0x91, 0x82,
	// Bytes 4240 - 427f
	0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82, 0x9B, 0xF0,
	0x91, 0x82, 0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82,
	0xA5, 0xF0, 0x91, 0x82, 0xBA, 0x09, 0x42, 0xC2,
	0xB4, 0x01, 0x43, 0x20, 0xCC, 0x81, 0xC9, 0x43,
	0x20, 0xCC, 0x83, 0xC9, 0x43, 0x20, 0xCC, 0x84,
	0xC9, 0x43, 0x20, 0xCC, 0x85, 0xC9, 0x43, 0x20,
	0xCC, 0x86, 0xC9, 0x43, 0x20, 0xCC, 0x87, 0xC9,
	0x43, 0x20, 0xCC, 0x88, 0xC9, 0x43, 0x20, 0xCC,
	// Bytes 4280 - 42bf
	0x8A, 0xC9, 0x43, 0x20, 0xCC, 0x8B, 0xC9, 0x43,
	0x20, 0xCC, 0x93, 0xC9, 0x43, 0x20, 0xCC, 0x94,
	0xC9, 0x43, 0x20, 0xCC, 0xA7, 0xA5, 0x43, 0x20,
	0xCC, 0xA8, 0xA5, 0x43, 0x20, 0xCC, 0xB3, 0xB5,
	0x43, 0x20, 0xCD, 0x82, 0xC9, 0x43, 0x20, 0xCD,
	0x85, 0xD9, 0x43, 0x20, 0xD9, 0x8B, 0x59, 0x43,
	0x20, 0xD9, 0x8C, 0x5D, 0x43, 0x20, 0xD9, 0x8D,
	0x61, 0x43, 0x20, 0xD9, 0x8E, 0x65, 0x43, 0x20,
	// Bytes 42c0 - 42ff
	0xD9, 0x8F, 0x69, 0x43, 0x20, 0xD9, 0x90, 0x6D,
	0x43, 0x20, 0xD9, 0x91, 0x71, 0x43, 0x20, 0xD9,
	0x92, 0x75, 0x43, 0x41, 0xCC, 0x8A, 0xC9, 0x43,
	0x73, 0xCC, 0x87, 0xC9, 0x44, 0x20, 0xE3, 0x82,
	0x99, 0x0D, 0x44, 0x20, 0xE3, 0x82, 0x9A, 0x0D,
	0x44, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x44, 0xCE,
	0x91, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0x95, 0xCC,
	0x81, 0xC9, 0x44, 0xCE, 0x97, 0xCC, 0x81, 0xC9,
	// Bytes 4300 - 433f
	0x44, 0xCE, 0x99, 0xCC, 0x81, 0xC9, 0x44, 0xCE,
	0x9F, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC,
	0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC, 0x88, 0xC9,
	0x44, 0xCE, 0xA9, 0xCC, 0x81, 0xC9, 0x44, 0xCE,
	0xB1, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xB5, 0xCC,
	0x81, 0xC9, 0x44, 0xCE, 0xB7, 0xCC, 0x81, 0xC9,
	0x44, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x44, 0xCE,
	0xBF, 0xCC, 0x81, 0xC9, 0x44, 0xCF, 0x85, 0xCC,
	// Bytes 4340 - 437f
	0x81, 0xC9, 0x44, 0xCF, 0x89, 0xCC, 0x81, 0xC9,
	0x44, 0xD7, 0x90, 0xD6, 0xB7, 0x31, 0x44, 0xD7,
	0x90, 0xD6, 0xB8, 0x35, 0x44, 0xD7, 0x90, 0xD6,
	0xBC, 0x41, 0x44, 0xD7, 0x91, 0xD6, 0xBC, 0x41,
	0x44, 0xD7, 0x91, 0xD6, 0xBF, 0x49, 0x44, 0xD7,
	0x92, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x93, 0xD6,
	0xBC, 0x41, 0x44, 0xD7, 0x94, 0xD6, 0xBC, 0x41,
	0x44, 0xD7, 0x95, 0xD6, 0xB9, 0x39, 0x44, 0xD7,
	// Bytes 4380 - 43bf
	0x95, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x96, 0xD6,
	0xBC, 0x41, 0x44, 0xD7, 0x98, 0xD6, 0xBC, 0x41,
	0x44, 0xD7, 0x99, 0xD6, 0xB4, 0x25, 0x44, 0xD7,
	0x99, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9A, 0xD6,
	0xBC, 0x41, 0x44, 0xD7, 0x9B, 0xD6, 0xBC, 0x41,
	0x44, 0xD7, 0x9B, 0xD6, 0xBF, 0x49, 0x44, 0xD7,
	0x9C, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9E, 0xD6,
	0xBC, 0x41, 0x44, 0xD7, 0xA0, 0xD6, 0xBC, 0x41,
	// Bytes 43c0 - 43ff
	0x44, 0xD7, 0xA1, 0xD6, 0xBC, 0x41, 0x44, 0xD7,
	0xA3, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6,
	0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6, 0xBF, 0x49,
	0x44, 0xD7, 0xA6, 0xD6, 0xBC, 0x41, 0x44, 0xD7,
	0xA7, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA8, 0xD6,
	0xBC, 0x41, 0x44, 0xD7, 0xA9, 0xD6, 0xBC, 0x41,
	0x44, 0xD7, 0xA9, 0xD7, 0x81, 0x4D, 0x44, 0xD7,
	0xA9, 0xD7, 0x82, 0x51, 0x44, 0xD7, 0xAA, 0xD6,
	// Bytes 4400 - 443f
	0xBC, 0x41, 0x44, 0xD7, 0xB2, 0xD6, 0xB7, 0x31,
	0x44, 0xD8, 0xA7, 0xD9, 0x8B, 0x59, 0x44, 0xD8,
	0xA7, 0xD9, 0x93, 0xC9, 0x44, 0xD8, 0xA7, 0xD9,
	0x94, 0xC9, 0x44, 0xD8, 0xA7, 0xD9, 0x95, 0xB5,
	0x44, 0xD8, 0xB0, 0xD9, 0xB0, 0x79, 0x44, 0xD8,
	0xB1, 0xD9, 0xB0, 0x79, 0x44, 0xD9, 0x80, 0xD9,
	0x8B, 0x59, 0x44, 0xD9, 0x80, 0xD9, 0x8E, 0x65,
	0x44, 0xD9, 0x80, 0xD9, 0x8F, 0x69, 0x44, 0xD9,
	// Bytes 4440 - 447f
	0x80, 0xD9, 0x90, 0x6D, 0x44, 0xD9, 0x80, 0xD9,
	0x91, 0x71, 0x44, 0xD9, 0x80, 0xD9, 0x92, 0x75,
	0x44, 0xD9, 0x87, 0xD9, 0xB0, 0x79, 0x44, 0xD9,
	0x88, 0xD9, 0x94, 0xC9, 0x44, 0xD9, 0x89, 0xD9,
	0xB0, 0x79, 0x44, 0xD9, 0x8A, 0xD9, 0x94, 0xC9,
	0x44, 0xDB, 0x92, 0xD9, 0x94, 0xC9, 0x44, 0xDB,
	0x95, 0xD9, 0x94, 0xC9, 0x45, 0x20, 0xCC, 0x88,
	0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCC,
	// Bytes 4480 - 44bf
	0x81, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCD, 0x82,
	0xCA, 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
	0x45, 0x20, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x45,
	0x20, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x45, 0x20,
	0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC,
	0x94, 0xCC, 0x81, 0xCA, 0x45, 0x20, 0xCC, 0x94,
	0xCD, 0x82, 0xCA, 0x45, 0x20, 0xD9, 0x8C, 0xD9,
	0x91, 0x72, 0x45, 0x20, 0xD9, 0x8D, 0xD9, 0x91,
	// Bytes 44c0 - 44ff
	0x72, 0x45, 0x20, 0xD9, 0x8E, 0xD9, 0x91, 0x72,
	0x45, 0x20, 0xD9, 0x8F, 0xD9, 0x91, 0x72, 0x45,
	0x20, 0xD9, 0x90, 0xD9, 0x91, 0x72, 0x45, 0x20,
	0xD9, 0x91, 0xD9, 0xB0, 0x7A, 0x45, 0xE2, 0xAB,
	0x9D, 0xCC, 0xB8, 0x05, 0x46, 0xCE, 0xB9, 0xCC,
	0x88, 0xCC, 0x81, 0xCA, 0x46, 0xCF, 0x85, 0xCC,
	0x88, 0xCC, 0x81, 0xCA, 0x46, 0xD7, 0xA9, 0xD6,
	0xBC, 0xD7, 0x81, 0x4E, 0x46, 0xD7, 0xA9, 0xD6,
	// Bytes 4500 - 453f
	0xBC, 0xD7, 0x82, 0x52, 0x46, 0xD9, 0x80, 0xD9,
	0x8E, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9,
	0x8F, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9,
	0x90, 0xD9, 0x91, 0x72, 0x46, 0xE0, 0xA4, 0x95,
	0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x96,
	0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x97,
	0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x9C,
	0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA1,
	// Bytes 4540 - 457f
	0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA2,
	0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAB,
	0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAF,
	0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA1,
	0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA2,
	0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xAF,
	0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x96,
	0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x97,
	// Bytes 4580 - 45bf
	0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x9C,
	0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xAB,
	0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB2,
	0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB8,
	0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA1,
	0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA2,
	0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xBE, 0xB2,
	0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE0, 0xBE, 0xB3,
	// Bytes 45c0 - 45ff
	0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE3, 0x83, 0x86,
	0xE3, 0x82, 0x99, 0x0D, 0x48, 0xF0, 0x9D, 0x85,
	0x97, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, 0x48, 0xF0,
	0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xAD,
	0x48, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85,
	0xA5, 0xAD, 0x48, 0xF0, 0x9D, 0x86, 0xBA, 0xF0,
	0x9D, 0x85, 0xA5, 0xAD, 0x49, 0xE0, 0xBE, 0xB2,
	0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x49,
	// Bytes 4600 - 463f
	0xE0, 0xBE, 0xB3, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE,
	0x80, 0x9E, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0,
	0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE,
	0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85,
	0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0,
	0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0,
	0x9D, 0x85, 0xB0, 0xAE, 0x4C, 0xF0, 0x9D, 0x85,
	0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85,
	// Bytes 4640 - 467f
	0xB1, 0xAE, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0,
	0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB2, 0xAE,
	0x4C, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85,
	0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE, 0x4C, 0xF0,
	0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xF0,
	0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0, 0x9D, 0x86,
	0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85,
	0xAE, 0xAE, 0x4C, 0xF0, 0x9D, 0x86, 0xBA, 0xF0,
	// Bytes 4680 - 46bf
	0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE,
	0x83, 0x41, 0xCC, 0x82, 0xC9, 0x83, 0x41, 0xCC,
	0x86, 0xC9, 0x83, 0x41, 0xCC, 0x87, 0xC9, 0x83,
	0x41, 0xCC, 0x88, 0xC9, 0x83, 0x41, 0xCC, 0x8A,
	0xC9, 0x83, 0x41, 0xCC, 0xA3, 0xB5, 0x83, 0x43,
	0xCC, 0xA7, 0xA5, 0x83, 0x45, 0xCC, 0x82, 0xC9,
	0x83, 0x45, 0xCC, 0x84, 0xC9, 0x83, 0x45, 0xCC,
	0xA3, 0xB5, 0x83, 0x45, 0xCC, 0xA7, 0xA5, 0x83,
	// Bytes 46c0 - 46ff
	0x49, 0xCC, 0x88, 0xC9, 0x83, 0x4C, 0xCC, 0xA3,
	0xB5, 0x83, 0x4F, 0xCC, 0x82, 0xC9, 0x83, 0x4F,
	0xCC, 0x83, 0xC9, 0x83, 0x4F, 0xCC, 0x84, 0xC9,
	0x83, 0x4F, 0xCC, 0x87, 0xC9, 0x83, 0x4F, 0xCC,
	0x88, 0xC9, 0x83, 0x4F, 0xCC, 0x9B, 0xAD, 0x83,
	0x4F, 0xCC, 0xA3, 0xB5, 0x83, 0x4F, 0xCC, 0xA8,
	0xA5, 0x83, 0x52, 0xCC, 0xA3, 0xB5, 0x83, 0x53,
	0xCC, 0x81, 0xC9, 0x83, 0x53, 0xCC, 0x8C, 0xC9,
	// Bytes 4700 - 473f
	0x83, 0x53, 0xCC, 0xA3, 0xB5, 0x83, 0x55, 0xCC,
	0x83, 0xC9, 0x83, 0x55, 0xCC, 0x84, 0xC9, 0x83,
	0x55, 0xCC, 0x88, 0xC9, 0x83, 0x55, 0xCC, 0x9B,
	0xAD, 0x83, 0x61, 0xCC, 0x82, 0xC9, 0x83, 0x61,
	0xCC, 0x86, 0xC9, 0x83, 0x61, 0xCC, 0x87, 0xC9,
	0x83, 0x61, 0xCC, 0x88, 0xC9, 0x83, 0x61, 0xCC,
	0x8A, 0xC9, 0x83, 0x61, 0xCC, 0xA3, 0xB5, 0x83,
	0x63, 0xCC, 0xA7, 0xA5, 0x83, 0x65, 0xCC, 0x82,
	// Bytes 4740 - 477f
	0xC9, 0x83, 0x65, 0xCC, 0x84, 0xC9, 0x83, 0x65,
	0xCC, 0xA3, 0xB5, 0x83, 0x65, 0xCC, 0xA7, 0xA5,
	0x83, 0x69, 0xCC, 0x88, 0xC9, 0x83, 0x6C, 0xCC,
	0xA3, 0xB5, 0x83, 0x6F, 0xCC, 0x82, 0xC9, 0x83,
	0x6F, 0xCC, 0x83, 0xC9, 0x83, 0x6F, 0xCC, 0x84,
	0xC9, 0x83, 0x6F, 0xCC, 0x87, 0xC9, 0x83, 0x6F,
	0xCC, 0x88, 0xC9, 0x83, 0x6F, 0xCC, 0x9B, 0xAD,
	0x83, 0x6F, 0xCC, 0xA3, 0xB5, 0x83, 0x6F, 0xCC,
	// Bytes 4780 - 47bf
	0xA8, 0xA5, 0x83, 0x72, 0xCC, 0xA3, 0xB5, 0x83,
	0x73, 0xCC, 0x81, 0xC9, 0x83, 0x73, 0xCC, 0x8C,
	0xC9, 0x83, 0x73, 0xCC, 0xA3, 0xB5, 0x83, 0x75,
	0xCC, 0x83, 0xC9, 0x83, 0x75, 0xCC, 0x84, 0xC9,
	0x83, 0x75, 0xCC, 0x88, 0xC9, 0x83, 0x75, 0xCC,
	0x9B, 0xAD, 0x84, 0xCE, 0x91, 0xCC, 0x93, 0xC9,
	0x84, 0xCE, 0x91, 0xCC, 0x94, 0xC9, 0x84, 0xCE,
	0x95, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x95, 0xCC,
	// Bytes 47c0 - 47ff
	0x94, 0xC9, 0x84, 0xCE, 0x97, 0xCC, 0x93, 0xC9,
	0x84, 0xCE, 0x97, 0xCC, 0x94, 0xC9, 0x84, 0xCE,
	0x99, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x99, 0xCC,
	0x94, 0xC9, 0x84, 0xCE, 0x9F, 0xCC, 0x93, 0xC9,
	0x84, 0xCE, 0x9F, 0xCC, 0x94, 0xC9, 0x84, 0xCE,
	0xA5, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xA9, 0xCC,
	0x93, 0xC9, 0x84, 0xCE, 0xA9, 0xCC, 0x94, 0xC9,
	0x84, 0xCE, 0xB1, 0xCC, 0x80, 0xC9, 0x84, 0xCE,
	// Bytes 4800 - 483f
	0xB1, 0xCC, 0x81, 0xC9, 0x84, 0xCE, 0xB1, 0xCC,
	0x93, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, 0x94, 0xC9,
	0x84, 0xCE, 0xB1, 0xCD, 0x82, 0xC9, 0x84, 0xCE,
	0xB5, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB5, 0xCC,
	0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCC, 0x80, 0xC9,
	0x84, 0xCE, 0xB7, 0xCC, 0x81, 0xC9, 0x84, 0xCE,
	0xB7, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB7, 0xCC,
	0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCD, 0x82, 0xC9,
	// Bytes 4840 - 487f
	0x84, 0xCE, 0xB9, 0xCC, 0x88, 0xC9, 0x84, 0xCE,
	0xB9, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB9, 0xCC,
	0x94, 0xC9, 0x84, 0xCE, 0xBF, 0xCC, 0x93, 0xC9,
	0x84, 0xCE, 0xBF, 0xCC, 0x94, 0xC9, 0x84, 0xCF,
	0x85, 0xCC, 0x88, 0xC9, 0x84, 0xCF, 0x85, 0xCC,
	0x93, 0xC9, 0x84, 0xCF, 0x85, 0xCC, 0x94, 0xC9,
	0x84, 0xCF, 0x89, 0xCC, 0x80, 0xC9, 0x84, 0xCF,
	0x89, 0xCC, 0x81, 0xC9, 0x84, 0xCF, 0x89, 0xCC,
	// Bytes 4880 - 48bf
	0x93, 0xC9, 0x84, 0xCF, 0x89, 0xCC, 0x94, 0xC9,
	0x84, 0xCF, 0x89, 0xCD, 0x82, 0xC9, 0x86, 0xCE,
	0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	0x91, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	0x91, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
	0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	0x91, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
	// Bytes 48c0 - 48ff
	0x97, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
	0x97, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	0x97, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
	0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	0xA9, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	// Bytes 4900 - 493f
	0xA9, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
	0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	0xA9, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
	0xB1, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
	0xB1, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	// Bytes 4940 - 497f
	0xB1, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
	0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	0xB7, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	0xB7, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
	0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	0xB7, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCF,
	// Bytes 4980 - 49bf
	0x89, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCF,
	0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCF,
	0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCF,
	0x89, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCF,
	0x89, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCF,
	0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x42, 0xCC,
	0x80, 0xC9, 0x32, 0x42, 0xCC, 0x81, 0xC9, 0x32,
	0x42, 0xCC, 0x93, 0xC9, 0x32, 0x43, 0xE1, 0x85,
	// Bytes 49c0 - 49ff
	0xA1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA2, 0x01,
	0x00, 0x43, 0xE1, 0x85, 0xA3, 0x01, 0x00, 0x43,
	0xE1, 0x85, 0xA4, 0x01, 0x00, 0x43, 0xE1, 0x85,
	0xA5, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA6, 0x01,
	0x00, 0x43, 0xE1, 0x85, 0xA7, 0x01, 0x00, 0x43,
	0xE1, 0x85, 0xA8, 0x01, 0x00, 0x43, 0xE1, 0x85,
	0xA9, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAA, 0x01,
	0x00, 0x43, 0xE1, 0x85, 0xAB, 0x01, 0x00, 0x43,
	// Bytes 4a00 - 4a3f
	0xE1, 0x85, 0xAC, 0x01, 0x00, 0x43, 0xE1, 0x85,
	0xAD, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAE, 0x01,
	0x00, 0x43, 0xE1, 0x85, 0xAF, 0x01, 0x00, 0x43,
	0xE1, 0x85, 0xB0, 0x01, 0x00, 0x43, 0xE1, 0x85,
	0xB1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB2, 0x01,
	0x00, 0x43, 0xE1, 0x85, 0xB3, 0x01, 0x00, 0x43,
	0xE1, 0x85, 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x85,
	0xB5, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xAA, 0x01,
	// Bytes 4a40 - 4a7f
	0x00, 0x43, 0xE1, 0x86, 0xAC, 0x01, 0x00, 0x43,
	0xE1, 0x86, 0xAD, 0x01, 0x00, 0x43, 0xE1, 0x86,
	0xB0, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB1, 0x01,
	0x00, 0x43, 0xE1, 0x86, 0xB2, 0x01, 0x00, 0x43,
	0xE1, 0x86, 0xB3, 0x01, 0x00, 0x43, 0xE1, 0x86,
	0xB4, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB5, 0x01,
	0x00, 0x44, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x32,
	0x43, 0xE3, 0x82, 0x99, 0x0D, 0x03, 0x43, 0xE3,
	// Bytes 4a80 - 4abf
	0x82, 0x9A, 0x0D, 0x03, 0x46, 0xE0, 0xBD, 0xB1,
	0xE0, 0xBD, 0xB2, 0x9E, 0x26, 0x46, 0xE0, 0xBD,
	0xB1, 0xE0, 0xBD, 0xB4, 0xA2, 0x26, 0x46, 0xE0,
	0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x26, 0x00,
	0x01,
}

// lookup returns the trie value for the first UTF-8 encoding in s and
// the width in bytes of this encoding. The size will be 0 if s does not
// hold enough bytes to complete the encoding. len(s) must be greater than 0.
func (t *nfcTrie) lookup(s []byte) (v uint16, sz int) {
	c0 := s[0]
	switch {
	case c0 < 0x80: // is ASCII
		return nfcValues[c0], 1
	case c0 < 0xC2:
		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
	case c0 < 0xE0: // 2-byte UTF-8
		if len(s) < 2 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c1), 2
	case c0 < 0xF0: // 3-byte UTF-8
		if len(s) < 3 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c2), 3
	case c0 < 0xF8: // 4-byte UTF-8
		if len(s) < 4 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		o = uint32(i)<<6 + uint32(c2)
		i = nfcIndex[o]
		c3 := s[3]
		if c3 < 0x80 || 0xC0 <= c3 {
			return 0, 3 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c3), 4
	}
	// Illegal rune
	return 0, 1
}

// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.
// s must start with a full and valid UTF-8 encoded rune.
func (t *nfcTrie) lookupUnsafe(s []byte) uint16 {
	c0 := s[0]
	if c0 < 0x80 { // is ASCII
		return nfcValues[c0]
	}
	i := nfcIndex[c0]
	if c0 < 0xE0 { // 2-byte UTF-8
		return t.lookupValue(uint32(i), s[1])
	}
	i = nfcIndex[uint32(i)<<6+uint32(s[1])]
	if c0 < 0xF0 { // 3-byte UTF-8
		return t.lookupValue(uint32(i), s[2])
	}
	i = nfcIndex[uint32(i)<<6+uint32(s[2])]
	if c0 < 0xF8 { // 4-byte UTF-8
		return t.lookupValue(uint32(i), s[3])
	}
	return 0
}

// lookupString returns the trie value for the first UTF-8 encoding in s and
// the width in bytes of this encoding. The size will be 0 if s does not
// hold enough bytes to complete the encoding. len(s) must be greater than 0.
func (t *nfcTrie) lookupString(s string) (v uint16, sz int) {
	c0 := s[0]
	switch {
	case c0 < 0x80: // is ASCII
		return nfcValues[c0], 1
	case c0 < 0xC2:
		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
	case c0 < 0xE0: // 2-byte UTF-8
		if len(s) < 2 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c1), 2
	case c0 < 0xF0: // 3-byte UTF-8
		if len(s) < 3 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c2), 3
	case c0 < 0xF8: // 4-byte UTF-8
		if len(s) < 4 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		o = uint32(i)<<6 + uint32(c2)
		i = nfcIndex[o]
		c3 := s[3]
		if c3 < 0x80 || 0xC0 <= c3 {
			return 0, 3 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c3), 4
	}
	// Illegal rune
	return 0, 1
}

// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.
// s must start with a full and valid UTF-8 encoded rune.
func (t *nfcTrie) lookupStringUnsafe(s string) uint16 {
	c0 := s[0]
	if c0 < 0x80 { // is ASCII
		return nfcValues[c0]
	}
	i := nfcIndex[c0]
	if c0 < 0xE0 { // 2-byte UTF-8
		return t.lookupValue(uint32(i), s[1])
	}
	i = nfcIndex[uint32(i)<<6+uint32(s[1])]
	if c0 < 0xF0 { // 3-byte UTF-8
		return t.lookupValue(uint32(i), s[2])
	}
	i = nfcIndex[uint32(i)<<6+uint32(s[2])]
	if c0 < 0xF8 { // 4-byte UTF-8
		return t.lookupValue(uint32(i), s[3])
	}
	return 0
}

// nfcTrie. Total size: 10586 bytes (10.34 KiB). Checksum: dd926e82067bee11.
type nfcTrie struct{}

func newNfcTrie(i int) *nfcTrie {
	return &nfcTrie{}
}

// lookupValue determines the type of block n and looks up the value for b.
func (t *nfcTrie) lookupValue(n uint32, b byte) uint16 {
	switch {
	case n < 46:
		return uint16(nfcValues[n<<6+uint32(b)])
	default:
		n -= 46
		return uint16(nfcSparse.lookup(n, b))
	}
}

// nfcValues: 48 blocks, 3072 entries, 6144 bytes
// The third block is the zero block.
var nfcValues = [3072]uint16{
	// Block 0x0, offset 0x0
	0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000,
	// Block 0x1, offset 0x40
	0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000,
	0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000,
	0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000,
	0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000,
	0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000,
	0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000,
	0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000,
	0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000,
	0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000,
	0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000,
	// Block 0x2, offset 0x80
	// Block 0x3, offset 0xc0
	0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c,
	0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb,
	0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104,
	0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd,
	0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235,
	0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285,
	0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3,
	0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750,
	0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f,
	0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3,
	0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569,
	// Block 0x4, offset 0x100
	0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8,
	0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6,
	0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5,
	0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302,
	0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339,
	0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352,
	0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e,
	0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6,
	0x130: 0x308c, 0x134: 0x30b4, 0x135: 0x33c0,
	0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc,
	0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8,
	// Block 0x5, offset 0x140
	0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118,
	0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f,
	0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c,
	0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483,
	0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d,
	0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba,
	0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796,
	0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2,
	0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528,
	0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267,
	0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0xa000,
	// Block 0x6, offset 0x180
	0x184: 0x8100, 0x185: 0x8100,
	0x186: 0x8100,
	0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140,
	0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8,
	0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50,
	0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5,
	0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf,
	0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd,
	0x1b0: 0x33c5, 0x1b4: 0x3028, 0x1b5: 0x3334,
	0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46,
	0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb,
	// Block 0x7, offset 0x1c0
	0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316,
	0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac,
	0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479,
	0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6,
	0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5,
	0x1de: 0x305a, 0x1df: 0x3366,
	0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b,
	0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769,
	0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f,
	// Block 0x8, offset 0x200
	0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132,
	0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932,
	0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932,
	0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d,
	0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d,
	0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d,
	0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d,
	0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d,
	0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101,
	0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d,
	0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132,
	// Block 0x9, offset 0x240
	0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936,
	0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132,
	0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132,
	0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132,
	0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135,
	0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132,
	0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132,
	0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132,
	0x274: 0x0170,
	0x27a: 0x8100,
	0x27e: 0x0037,
	// Block 0xa, offset 0x280
	0x284: 0x8100, 0x285: 0x35a1,
	0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625,
	0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000,
	0x295: 0xa000, 0x297: 0xa000,
	0x299: 0xa000,
	0x29f: 0xa000, 0x2a1: 0xa000,
	0x2a5: 0xa000, 0x2a9: 0xa000,
	0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9,
	0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000,
	0x2b7: 0xa000, 0x2b9: 0xa000,
	0x2bf: 0xa000,
	// Block 0xb, offset 0x2c0
	0x2c0: 0x3721, 0x2c1: 0x372d, 0x2c3: 0x371b,
	0x2c6: 0xa000, 0x2c7: 0x3709,
	0x2cc: 0x375d, 0x2cd: 0x3745, 0x2ce: 0x376f, 0x2d0: 0xa000,
	0x2d3: 0xa000, 0x2d5: 0xa000, 0x2d6: 0xa000, 0x2d7: 0xa000,
	0x2d8: 0xa000, 0x2d9: 0x3751, 0x2da: 0xa000,
	0x2de: 0xa000, 0x2e3: 0xa000,
	0x2e7: 0xa000,
	0x2eb: 0xa000, 0x2ed: 0xa000,
	0x2f0: 0xa000, 0x2f3: 0xa000, 0x2f5: 0xa000,
	0x2f6: 0xa000, 0x2f7: 0xa000, 0x2f8: 0xa000, 0x2f9: 0x37d5, 0x2fa: 0xa000,
	0x2fe: 0xa000,
	// Block 0xc, offset 0x300
	0x301: 0x3733, 0x302: 0x37b7,
	0x310: 0x370f, 0x311: 0x3793,
	0x312: 0x3715, 0x313: 0x3799, 0x316: 0x3727, 0x317: 0x37ab,
	0x318: 0xa000, 0x319: 0xa000, 0x31a: 0x3829, 0x31b: 0x382f, 0x31c: 0x3739, 0x31d: 0x37bd,
	0x31e: 0x373f, 0x31f: 0x37c3, 0x322: 0x374b, 0x323: 0x37cf,
	0x324: 0x3757, 0x325: 0x37db, 0x326: 0x3763, 0x327: 0x37e7, 0x328: 0xa000, 0x329: 0xa000,
	0x32a: 0x3835, 0x32b: 0x383b, 0x32c: 0x378d, 0x32d: 0x3811, 0x32e: 0x3769, 0x32f: 0x37ed,
	0x330: 0x3775, 0x331: 0x37f9, 0x332: 0x377b, 0x333: 0x37ff, 0x334: 0x3781, 0x335: 0x3805,
	0x338: 0x3787, 0x339: 0x380b,
	// Block 0xd, offset 0x340
	0x351: 0x812d,
	0x352: 0x8132, 0x353: 0x8132, 0x354: 0x8132, 0x355: 0x8132, 0x356: 0x812d, 0x357: 0x8132,
	0x358: 0x8132, 0x359: 0x8132, 0x35a: 0x812e, 0x35b: 0x812d, 0x35c: 0x8132, 0x35d: 0x8132,
	0x35e: 0x8132, 0x35f: 0x8132, 0x360: 0x8132, 0x361: 0x8132, 0x362: 0x812d, 0x363: 0x812d,
	0x364: 0x812d, 0x365: 0x812d, 0x366: 0x812d, 0x367: 0x812d, 0x368: 0x8132, 0x369: 0x8132,
	0x36a: 0x812d, 0x36b: 0x8132, 0x36c: 0x8132, 0x36d: 0x812e, 0x36e: 0x8131, 0x36f: 0x8132,
	0x370: 0x8105, 0x371: 0x8106, 0x372: 0x8107, 0x373: 0x8108, 0x374: 0x8109, 0x375: 0x810a,
	0x376: 0x810b, 0x377: 0x810c, 0x378: 0x810d, 0x379: 0x810e, 0x37a: 0x810e, 0x37b: 0x810f,
	0x37c: 0x8110, 0x37d: 0x8111, 0x37f: 0x8112,
	// Block 0xe, offset 0x380
	0x388: 0xa000, 0x38a: 0xa000, 0x38b: 0x8116,
	0x38c: 0x8117, 0x38d: 0x8118, 0x38e: 0x8119, 0x38f: 0x811a, 0x390: 0x811b, 0x391: 0x811c,
	0x392: 0x811d, 0x393: 0x9932, 0x394: 0x9932, 0x395: 0x992d, 0x396: 0x812d, 0x397: 0x8132,
	0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x8132, 0x39b: 0x8132, 0x39c: 0x812d, 0x39d: 0x8132,
	0x39e: 0x8132, 0x39f: 0x812d,
	0x3b0: 0x811e,
	// Block 0xf, offset 0x3c0
	0x3d3: 0x812d, 0x3d4: 0x8132, 0x3d5: 0x8132, 0x3d6: 0x8132, 0x3d7: 0x8132,
	0x3d8: 0x8132, 0x3d9: 0x8132, 0x3da: 0x8132, 0x3db: 0x8132, 0x3dc: 0x8132, 0x3dd: 0x8132,
	0x3de: 0x8132, 0x3df: 0x8132, 0x3e0: 0x8132, 0x3e1: 0x8132, 0x3e3: 0x812d,
	0x3e4: 0x8132, 0x3e5: 0x8132, 0x3e6: 0x812d, 0x3e7: 0x8132, 0x3e8: 0x8132, 0x3e9: 0x812d,
	0x3ea: 0x8132, 0x3eb: 0x8132, 0x3ec: 0x8132, 0x3ed: 0x812d, 0x3ee: 0x812d, 0x3ef: 0x812d,
	0x3f0: 0x8116, 0x3f1: 0x8117, 0x3f2: 0x8118, 0x3f3: 0x8132, 0x3f4: 0x8132, 0x3f5: 0x8132,
	0x3f6: 0x812d, 0x3f7: 0x8132, 0x3f8: 0x8132, 0x3f9: 0x812d, 0x3fa: 0x812d, 0x3fb: 0x8132,
	0x3fc: 0x8132, 0x3fd: 0x8132, 0x3fe: 0x8132, 0x3ff: 0x8132,
	// Block 0x10, offset 0x400
	0x405: 0xa000,
	0x406: 0x2d26, 0x407: 0xa000, 0x408: 0x2d2e, 0x409: 0xa000, 0x40a: 0x2d36, 0x40b: 0xa000,
	0x40c: 0x2d3e, 0x40d: 0xa000, 0x40e: 0x2d46, 0x411: 0xa000,
	0x412: 0x2d4e,
	0x434: 0x8102, 0x435: 0x9900,
	0x43a: 0xa000, 0x43b: 0x2d56,
	0x43c: 0xa000, 0x43d: 0x2d5e, 0x43e: 0xa000, 0x43f: 0xa000,
	// Block 0x11, offset 0x440
	0x440: 0x8132, 0x441: 0x8132, 0x442: 0x812d, 0x443: 0x8132, 0x444: 0x8132, 0x445: 0x8132,
	0x446: 0x8132, 0x447: 0x8132, 0x448: 0x8132, 0x449: 0x8132, 0x44a: 0x812d, 0x44b: 0x8132,
	0x44c: 0x8132, 0x44d: 0x8135, 0x44e: 0x812a, 0x44f: 0x812d, 0x450: 0x8129, 0x451: 0x8132,
	0x452: 0x8132, 0x453: 0x8132, 0x454: 0x8132, 0x455: 0x8132, 0x456: 0x8132, 0x457: 0x8132,
	0x458: 0x8132, 0x459: 0x8132, 0x45a: 0x8132, 0x45b: 0x8132, 0x45c: 0x8132, 0x45d: 0x8132,
	0x45e: 0x8132, 0x45f: 0x8132, 0x460: 0x8132, 0x461: 0x8132, 0x462: 0x8132, 0x463: 0x8132,
	0x464: 0x8132, 0x465: 0x8132, 0x466: 0x8132, 0x467: 0x8132, 0x468: 0x8132, 0x469: 0x8132,
	0x46a: 0x8132, 0x46b: 0x8132, 0x46c: 0x8132, 0x46d: 0x8132, 0x46e: 0x8132, 0x46f: 0x8132,
	0x470: 0x8132, 0x471: 0x8132, 0x472: 0x8132, 0x473: 0x8132, 0x474: 0x8132, 0x475: 0x8132,
	0x476: 0x8133, 0x477: 0x8131, 0x478: 0x8131, 0x479: 0x812d, 0x47b: 0x8132,
	0x47c: 0x8134, 0x47d: 0x812d, 0x47e: 0x8132, 0x47f: 0x812d,
	// Block 0x12, offset 0x480
	0x480: 0x2f97, 0x481: 0x32a3, 0x482: 0x2fa1, 0x483: 0x32ad, 0x484: 0x2fa6, 0x485: 0x32b2,
	0x486: 0x2fab, 0x487: 0x32b7, 0x488: 0x38cc, 0x489: 0x3a5b, 0x48a: 0x2fc4, 0x48b: 0x32d0,
	0x48c: 0x2fce, 0x48d: 0x32da, 0x48e: 0x2fdd, 0x48f: 0x32e9, 0x490: 0x2fd3, 0x491: 0x32df,
	0x492: 0x2fd8, 0x493: 0x32e4, 0x494: 0x38ef, 0x495: 0x3a7e, 0x496: 0x38f6, 0x497: 0x3a85,
	0x498: 0x3019, 0x499: 0x3325, 0x49a: 0x301e, 0x49b: 0x332a, 0x49c: 0x3904, 0x49d: 0x3a93,
	0x49e: 0x3023, 0x49f: 0x332f, 0x4a0: 0x3032, 0x4a1: 0x333e, 0x4a2: 0x3050, 0x4a3: 0x335c,
	0x4a4: 0x305f, 0x4a5: 0x336b, 0x4a6: 0x3055, 0x4a7: 0x3361, 0x4a8: 0x3064, 0x4a9: 0x3370,
	0x4aa: 0x3069, 0x4ab: 0x3375, 0x4ac: 0x30af, 0x4ad: 0x33bb, 0x4ae: 0x390b, 0x4af: 0x3a9a,
	0x4b0: 0x30b9, 0x4b1: 0x33ca, 0x4b2: 0x30c3, 0x4b3: 0x33d4, 0x4b4: 0x30cd, 0x4b5: 0x33de,
	0x4b6: 0x46c4, 0x4b7: 0x4755, 0x4b8: 0x3912, 0x4b9: 0x3aa1, 0x4ba: 0x30e6, 0x4bb: 0x33f7,
	0x4bc: 0x30e1, 0x4bd: 0x33f2, 0x4be: 0x30eb, 0x4bf: 0x33fc,
	// Block 0x13, offset 0x4c0
	0x4c0: 0x30f0, 0x4c1: 0x3401, 0x4c2: 0x30f5, 0x4c3: 0x3406, 0x4c4: 0x3109, 0x4c5: 0x341a,
	0x4c6: 0x3113, 0x4c7: 0x3424, 0x4c8: 0x3122, 0x4c9: 0x3433, 0x4ca: 0x311d, 0x4cb: 0x342e,
	0x4cc: 0x3935, 0x4cd: 0x3ac4, 0x4ce: 0x3943, 0x4cf: 0x3ad2, 0x4d0: 0x394a, 0x4d1: 0x3ad9,
	0x4d2: 0x3951, 0x4d3: 0x3ae0, 0x4d4: 0x314f, 0x4d5: 0x3460, 0x4d6: 0x3154, 0x4d7: 0x3465,
	0x4d8: 0x315e, 0x4d9: 0x346f, 0x4da: 0x46f1, 0x4db: 0x4782, 0x4dc: 0x3997, 0x4dd: 0x3b26,
	0x4de: 0x3177, 0x4df: 0x3488, 0x4e0: 0x3181, 0x4e1: 0x3492, 0x4e2: 0x4700, 0x4e3: 0x4791,
	0x4e4: 0x399e, 0x4e5: 0x3b2d, 0x4e6: 0x39a5, 0x4e7: 0x3b34, 0x4e8: 0x39ac, 0x4e9: 0x3b3b,
	0x4ea: 0x3190, 0x4eb: 0x34a1, 0x4ec: 0x319a, 0x4ed: 0x34b0, 0x4ee: 0x31ae, 0x4ef: 0x34c4,
	0x4f0: 0x31a9, 0x4f1: 0x34bf, 0x4f2: 0x31ea, 0x4f3: 0x3500, 0x4f4: 0x31f9, 0x4f5: 0x350f,
	0x4f6: 0x31f4, 0x4f7: 0x350a, 0x4f8: 0x39b3, 0x4f9: 0x3b42, 0x4fa: 0x39ba, 0x4fb: 0x3b49,
	0x4fc: 0x31fe, 0x4fd: 0x3514, 0x4fe: 0x3203, 0x4ff: 0x3519,
	// Block 0x14, offset 0x500
	0x500: 0x3208, 0x501: 0x351e, 0x502: 0x320d, 0x503: 0x3523, 0x504: 0x321c, 0x505: 0x3532,
	0x506: 0x3217, 0x507: 0x352d, 0x508: 0x3221, 0x509: 0x353c, 0x50a: 0x3226, 0x50b: 0x3541,
	0x50c: 0x322b, 0x50d: 0x3546, 0x50e: 0x3249, 0x50f: 0x3564, 0x510: 0x3262, 0x511: 0x3582,
	0x512: 0x3271, 0x513: 0x3591, 0x514: 0x3276, 0x515: 0x3596, 0x516: 0x337a, 0x517: 0x34a6,
	0x518: 0x3537, 0x519: 0x3573, 0x51b: 0x35d1,
	0x520: 0x46a1, 0x521: 0x4732, 0x522: 0x2f83, 0x523: 0x328f,
	0x524: 0x3878, 0x525: 0x3a07, 0x526: 0x3871, 0x527: 0x3a00, 0x528: 0x3886, 0x529: 0x3a15,
	0x52a: 0x387f, 0x52b: 0x3a0e, 0x52c: 0x38be, 0x52d: 0x3a4d, 0x52e: 0x3894, 0x52f: 0x3a23,
	0x530: 0x388d, 0x531: 0x3a1c, 0x532: 0x38a2, 0x533: 0x3a31, 0x534: 0x389b, 0x535: 0x3a2a,
	0x536: 0x38c5, 0x537: 0x3a54, 0x538: 0x46b5, 0x539: 0x4746, 0x53a: 0x3000, 0x53b: 0x330c,
	0x53c: 0x2fec, 0x53d: 0x32f8, 0x53e: 0x38da, 0x53f: 0x3a69,
	// Block 0x15, offset 0x540
	0x540: 0x38d3, 0x541: 0x3a62, 0x542: 0x38e8, 0x543: 0x3a77, 0x544: 0x38e1, 0x545: 0x3a70,
	0x546: 0x38fd, 0x547: 0x3a8c, 0x548: 0x3091, 0x549: 0x339d, 0x54a: 0x30a5, 0x54b: 0x33b1,
	0x54c: 0x46e7, 0x54d: 0x4778, 0x54e: 0x3136, 0x54f: 0x3447, 0x550: 0x3920, 0x551: 0x3aaf,
	0x552: 0x3919, 0x553: 0x3aa8, 0x554: 0x392e, 0x555: 0x3abd, 0x556: 0x3927, 0x557: 0x3ab6,
	0x558: 0x3989, 0x559: 0x3b18, 0x55a: 0x396d, 0x55b: 0x3afc, 0x55c: 0x3966, 0x55d: 0x3af5,
	0x55e: 0x397b, 0x55f: 0x3b0a, 0x560: 0x3974, 0x561: 0x3b03, 0x562: 0x3982, 0x563: 0x3b11,
	0x564: 0x31e5, 0x565: 0x34fb, 0x566: 0x31c7, 0x567: 0x34dd, 0x568: 0x39e4, 0x569: 0x3b73,
	0x56a: 0x39dd, 0x56b: 0x3b6c, 0x56c: 0x39f2, 0x56d: 0x3b81, 0x56e: 0x39eb, 0x56f: 0x3b7a,
	0x570: 0x39f9, 0x571: 0x3b88, 0x572: 0x3230, 0x573: 0x354b, 0x574: 0x3258, 0x575: 0x3578,
	0x576: 0x3253, 0x577: 0x356e, 0x578: 0x323f, 0x579: 0x355a,
	// Block 0x16, offset 0x580
	0x580: 0x4804, 0x581: 0x480a, 0x582: 0x491e, 0x583: 0x4936, 0x584: 0x4926, 0x585: 0x493e,
	0x586: 0x492e, 0x587: 0x4946, 0x588: 0x47aa, 0x589: 0x47b0, 0x58a: 0x488e, 0x58b: 0x48a6,
	0x58c: 0x4896, 0x58d: 0x48ae, 0x58e: 0x489e, 0x58f: 0x48b6, 0x590: 0x4816, 0x591: 0x481c,
	0x592: 0x3db8, 0x593: 0x3dc8, 0x594: 0x3dc0, 0x595: 0x3dd0,
	0x598: 0x47b6, 0x599: 0x47bc, 0x59a: 0x3ce8, 0x59b: 0x3cf8, 0x59c: 0x3cf0, 0x59d: 0x3d00,
	0x5a0: 0x482e, 0x5a1: 0x4834, 0x5a2: 0x494e, 0x5a3: 0x4966,
	0x5a4: 0x4956, 0x5a5: 0x496e, 0x5a6: 0x495e, 0x5a7: 0x4976, 0x5a8: 0x47c2, 0x5a9: 0x47c8,
	0x5aa: 0x48be, 0x5ab: 0x48d6, 0x5ac: 0x48c6, 0x5ad: 0x48de, 0x5ae: 0x48ce, 0x5af: 0x48e6,
	0x5b0: 0x4846, 0x5b1: 0x484c, 0x5b2: 0x3e18, 0x5b3: 0x3e30, 0x5b4: 0x3e20, 0x5b5: 0x3e38,
	0x5b6: 0x3e28, 0x5b7: 0x3e40, 0x5b8: 0x47ce, 0x5b9: 0x47d4, 0x5ba: 0x3d18, 0x5bb: 0x3d30,
	0x5bc: 0x3d20, 0x5bd: 0x3d38, 0x5be: 0x3d28, 0x5bf: 0x3d40,
	// Block 0x17, offset 0x5c0
	0x5c0: 0x4852, 0x5c1: 0x4858, 0x5c2: 0x3e48, 0x5c3: 0x3e58, 0x5c4: 0x3e50, 0x5c5: 0x3e60,
	0x5c8: 0x47da, 0x5c9: 0x47e0, 0x5ca: 0x3d48, 0x5cb: 0x3d58,
	0x5cc: 0x3d50, 0x5cd: 0x3d60, 0x5d0: 0x4864, 0x5d1: 0x486a,
	0x5d2: 0x3e80, 0x5d3: 0x3e98, 0x5d4: 0x3e88, 0x5d5: 0x3ea0, 0x5d6: 0x3e90, 0x5d7: 0x3ea8,
	0x5d9: 0x47e6, 0x5db: 0x3d68, 0x5dd: 0x3d70,
	0x5df: 0x3d78, 0x5e0: 0x487c, 0x5e1: 0x4882, 0x5e2: 0x497e, 0x5e3: 0x4996,
	0x5e4: 0x4986, 0x5e5: 0x499e, 0x5e6: 0x498e, 0x5e7: 0x49a6, 0x5e8: 0x47ec, 0x5e9: 0x47f2,
	0x5ea: 0x48ee, 0x5eb: 0x4906, 0x5ec: 0x48f6, 0x5ed: 0x490e, 0x5ee: 0x48fe, 0x5ef: 0x4916,
	0x5f0: 0x47f8, 0x5f1: 0x431e, 0x5f2: 0x3691, 0x5f3: 0x4324, 0x5f4: 0x4822, 0x5f5: 0x432a,
	0x5f6: 0x36a3, 0x5f7: 0x4330, 0x5f8: 0x36c1, 0x5f9: 0x4336, 0x5fa: 0x36d9, 0x5fb: 0x433c,
	0x5fc: 0x4870, 0x5fd: 0x4342,
	// Block 0x18, offset 0x600
	0x600: 0x3da0, 0x601: 0x3da8, 0x602: 0x4184, 0x603: 0x41a2, 0x604: 0x418e, 0x605: 0x41ac,
	0x606: 0x4198, 0x607: 0x41b6, 0x608: 0x3cd8, 0x609: 0x3ce0, 0x60a: 0x40d0, 0x60b: 0x40ee,
	0x60c: 0x40da, 0x60d: 0x40f8, 0x60e: 0x40e4, 0x60f: 0x4102, 0x610: 0x3de8, 0x611: 0x3df0,
	0x612: 0x41c0, 0x613: 0x41de, 0x614: 0x41ca, 0x615: 0x41e8, 0x616: 0x41d4, 0x617: 0x41f2,
	0x618: 0x3d08, 0x619: 0x3d10, 0x61a: 0x410c, 0x61b: 0x412a, 0x61c: 0x4116, 0x61d: 0x4134,
	0x61e: 0x4120, 0x61f: 0x413e, 0x620: 0x3ec0, 0x621: 0x3ec8, 0x622: 0x41fc, 0x623: 0x421a,
	0x624: 0x4206, 0x625: 0x4224, 0x626: 0x4210, 0x627: 0x422e, 0x628: 0x3d80, 0x629: 0x3d88,
	0x62a: 0x4148, 0x62b: 0x4166, 0x62c: 0x4152, 0x62d: 0x4170, 0x62e: 0x415c, 0x62f: 0x417a,
	0x630: 0x3685, 0x631: 0x367f, 0x632: 0x3d90, 0x633: 0x368b, 0x634: 0x3d98,
	0x636: 0x4810, 0x637: 0x3db0, 0x638: 0x35f5, 0x639: 0x35ef, 0x63a: 0x35e3, 0x63b: 0x42ee,
	0x63c: 0x35fb, 0x63d: 0x8100, 0x63e: 0x01d3, 0x63f: 0xa100,
	// Block 0x19, offset 0x640
	0x640: 0x8100, 0x641: 0x35a7, 0x642: 0x3dd8, 0x643: 0x369d, 0x644: 0x3de0,
	0x646: 0x483a, 0x647: 0x3df8, 0x648: 0x3601, 0x649: 0x42f4, 0x64a: 0x360d, 0x64b: 0x42fa,
	0x64c: 0x3619, 0x64d: 0x3b8f, 0x64e: 0x3b96, 0x64f: 0x3b9d, 0x650: 0x36b5, 0x651: 0x36af,
	0x652: 0x3e00, 0x653: 0x44e4, 0x656: 0x36bb, 0x657: 0x3e10,
	0x658: 0x3631, 0x659: 0x362b, 0x65a: 0x361f, 0x65b: 0x4300, 0x65d: 0x3ba4,
	0x65e: 0x3bab, 0x65f: 0x3bb2, 0x660: 0x36eb, 0x661: 0x36e5, 0x662: 0x3e68, 0x663: 0x44ec,
	0x664: 0x36cd, 0x665: 0x36d3, 0x666: 0x36f1, 0x667: 0x3e78, 0x668: 0x3661, 0x669: 0x365b,
	0x66a: 0x364f, 0x66b: 0x430c, 0x66c: 0x3649, 0x66d: 0x359b, 0x66e: 0x42e8, 0x66f: 0x0081,
	0x672: 0x3eb0, 0x673: 0x36f7, 0x674: 0x3eb8,
	0x676: 0x4888, 0x677: 0x3ed0, 0x678: 0x363d, 0x679: 0x4306, 0x67a: 0x366d, 0x67b: 0x4318,
	0x67c: 0x3679, 0x67d: 0x4256, 0x67e: 0xa100,
	// Block 0x1a, offset 0x680
	0x681: 0x3c06, 0x683: 0xa000, 0x684: 0x3c0d, 0x685: 0xa000,
	0x687: 0x3c14, 0x688: 0xa000, 0x689: 0x3c1b,
	0x68d: 0xa000,
	0x6a0: 0x2f65, 0x6a1: 0xa000, 0x6a2: 0x3c29,
	0x6a4: 0xa000, 0x6a5: 0xa000,
	0x6ad: 0x3c22, 0x6ae: 0x2f60, 0x6af: 0x2f6a,
	0x6b0: 0x3c30, 0x6b1: 0x3c37, 0x6b2: 0xa000, 0x6b3: 0xa000, 0x6b4: 0x3c3e, 0x6b5: 0x3c45,
	0x6b6: 0xa000, 0x6b7: 0xa000, 0x6b8: 0x3c4c, 0x6b9: 0x3c53, 0x6ba: 0xa000, 0x6bb: 0xa000,
	0x6bc: 0xa000, 0x6bd: 0xa000,
	// Block 0x1b, offset 0x6c0
	0x6c0: 0x3c5a, 0x6c1: 0x3c61, 0x6c2: 0xa000, 0x6c3: 0xa000, 0x6c4: 0x3c76, 0x6c5: 0x3c7d,
	0x6c6: 0xa000, 0x6c7: 0xa000, 0x6c8: 0x3c84, 0x6c9: 0x3c8b,
	0x6d1: 0xa000,
	0x6d2: 0xa000,
	0x6e2: 0xa000,
	0x6e8: 0xa000, 0x6e9: 0xa000,
	0x6eb: 0xa000, 0x6ec: 0x3ca0, 0x6ed: 0x3ca7, 0x6ee: 0x3cae, 0x6ef: 0x3cb5,
	0x6f2: 0xa000, 0x6f3: 0xa000, 0x6f4: 0xa000, 0x6f5: 0xa000,
	// Block 0x1c, offset 0x700
	0x706: 0xa000, 0x70b: 0xa000,
	0x70c: 0x3f08, 0x70d: 0xa000, 0x70e: 0x3f10, 0x70f: 0xa000, 0x710: 0x3f18, 0x711: 0xa000,
	0x712: 0x3f20, 0x713: 0xa000, 0x714: 0x3f28, 0x715: 0xa000, 0x716: 0x3f30, 0x717: 0xa000,
	0x718: 0x3f38, 0x719: 0xa000, 0x71a: 0x3f40, 0x71b: 0xa000, 0x71c: 0x3f48, 0x71d: 0xa000,
	0x71e: 0x3f50, 0x71f: 0xa000, 0x720: 0x3f58, 0x721: 0xa000, 0x722: 0x3f60,
	0x724: 0xa000, 0x725: 0x3f68, 0x726: 0xa000, 0x727: 0x3f70, 0x728: 0xa000, 0x729: 0x3f78,
	0x72f: 0xa000,
	0x730: 0x3f80, 0x731: 0x3f88, 0x732: 0xa000, 0x733: 0x3f90, 0x734: 0x3f98, 0x735: 0xa000,
	0x736: 0x3fa0, 0x737: 0x3fa8, 0x738: 0xa000, 0x739: 0x3fb0, 0x73a: 0x3fb8, 0x73b: 0xa000,
	0x73c: 0x3fc0, 0x73d: 0x3fc8,
	// Block 0x1d, offset 0x740
	0x754: 0x3f00,
	0x759: 0x9903, 0x75a: 0x9903, 0x75b: 0x8100, 0x75c: 0x8100, 0x75d: 0xa000,
	0x75e: 0x3fd0,
	0x766: 0xa000,
	0x76b: 0xa000, 0x76c: 0x3fe0, 0x76d: 0xa000, 0x76e: 0x3fe8, 0x76f: 0xa000,
	0x770: 0x3ff0, 0x771: 0xa000, 0x772: 0x3ff8, 0x773: 0xa000, 0x774: 0x4000, 0x775: 0xa000,
	0x776: 0x4008, 0x777: 0xa000, 0x778: 0x4010, 0x779: 0xa000, 0x77a: 0x4018, 0x77b: 0xa000,
	0x77c: 0x4020, 0x77d: 0xa000, 0x77e: 0x4028, 0x77f: 0xa000,
	// Block 0x1e, offset 0x780
	0x780: 0x4030, 0x781: 0xa000, 0x782: 0x4038, 0x784: 0xa000, 0x785: 0x4040,
	0x786: 0xa000, 0x787: 0x4048, 0x788: 0xa000, 0x789: 0x4050,
	0x78f: 0xa000, 0x790: 0x4058, 0x791: 0x4060,
	0x792: 0xa000, 0x793: 0x4068, 0x794: 0x4070, 0x795: 0xa000, 0x796: 0x4078, 0x797: 0x4080,
	0x798: 0xa000, 0x799: 0x4088, 0x79a: 0x4090, 0x79b: 0xa000, 0x79c: 0x4098, 0x79d: 0x40a0,
	0x7af: 0xa000,
	0x7b0: 0xa000, 0x7b1: 0xa000, 0x7b2: 0xa000, 0x7b4: 0x3fd8,
	0x7b7: 0x40a8, 0x7b8: 0x40b0, 0x7b9: 0x40b8, 0x7ba: 0x40c0,
	0x7bd: 0xa000, 0x7be: 0x40c8,
	// Block 0x1f, offset 0x7c0
	0x7c0: 0x1377, 0x7c1: 0x0cfb, 0x7c2: 0x13d3, 0x7c3: 0x139f, 0x7c4: 0x0e57, 0x7c5: 0x06eb,
	0x7c6: 0x08df, 0x7c7: 0x162b, 0x7c8: 0x162b, 0x7c9: 0x0a0b, 0x7ca: 0x145f, 0x7cb: 0x0943,
	0x7cc: 0x0a07, 0x7cd: 0x0bef, 0x7ce: 0x0fcf, 0x7cf: 0x115f, 0x7d0: 0x1297, 0x7d1: 0x12d3,
	0x7d2: 0x1307, 0x7d3: 0x141b, 0x7d4: 0x0d73, 0x7d5: 0x0dff, 0x7d6: 0x0eab, 0x7d7: 0x0f43,
	0x7d8: 0x125f, 0x7d9: 0x1447, 0x7da: 0x1573, 0x7db: 0x070f, 0x7dc: 0x08b3, 0x7dd: 0x0d87,
	0x7de: 0x0ecf, 0x7df: 0x1293, 0x7e0: 0x15c3, 0x7e1: 0x0ab3, 0x7e2: 0x0e77, 0x7e3: 0x1283,
	0x7e4: 0x1317, 0x7e5: 0x0c23, 0x7e6: 0x11bb, 0x7e7: 0x12df, 0x7e8: 0x0b1f, 0x7e9: 0x0d0f,
	0x7ea: 0x0e17, 0x7eb: 0x0f1b, 0x7ec: 0x1427, 0x7ed: 0x074f, 0x7ee: 0x07e7, 0x7ef: 0x0853,
	0x7f0: 0x0c8b, 0x7f1: 0x0d7f, 0x7f2: 0x0ecb, 0x7f3: 0x0fef, 0x7f4: 0x1177, 0x7f5: 0x128b,
	0x7f6: 0x12a3, 0x7f7: 0x13c7, 0x7f8: 0x14ef, 0x7f9: 0x15a3, 0x7fa: 0x15bf, 0x7fb: 0x102b,
	0x7fc: 0x106b, 0x7fd: 0x1123, 0x7fe: 0x1243, 0x7ff: 0x147b,
	// Block 0x20, offset 0x800
	0x800: 0x15cb, 0x801: 0x134b, 0x802: 0x09c7, 0x803: 0x0b3b, 0x804: 0x10db, 0x805: 0x119b,
	0x806: 0x0eff, 0x807: 0x1033, 0x808: 0x1397, 0x809: 0x14e7, 0x80a: 0x09c3, 0x80b: 0x0a8f,
	0x80c: 0x0d77, 0x80d: 0x0e2b, 0x80e: 0x0e5f, 0x80f: 0x1113, 0x810: 0x113b, 0x811: 0x14a7,
	0x812: 0x084f, 0x813: 0x11a7, 0x814: 0x07f3, 0x815: 0x07ef, 0x816: 0x1097, 0x817: 0x1127,
	0x818: 0x125b, 0x819: 0x14af, 0x81a: 0x1367, 0x81b: 0x0c27, 0x81c: 0x0d73, 0x81d: 0x1357,
	0x81e: 0x06f7, 0x81f: 0x0a63, 0x820: 0x0b93, 0x821: 0x0f2f, 0x822: 0x0faf, 0x823: 0x0873,
	0x824: 0x103b, 0x825: 0x075f, 0x826: 0x0b77, 0x827: 0x06d7, 0x828: 0x0deb, 0x829: 0x0ca3,
	0x82a: 0x110f, 0x82b: 0x08c7, 0x82c: 0x09b3, 0x82d: 0x0ffb, 0x82e: 0x1263, 0x82f: 0x133b,
	0x830: 0x0db7, 0x831: 0x13f7, 0x832: 0x0de3, 0x833: 0x0c37, 0x834: 0x121b, 0x835: 0x0c57,
	0x836: 0x0fab, 0x837: 0x072b, 0x838: 0x07a7, 0x839: 0x07eb, 0x83a: 0x0d53, 0x83b: 0x10fb,
	0x83c: 0x11f3, 0x83d: 0x1347, 0x83e: 0x145b, 0x83f: 0x085b,
	// Block 0x21, offset 0x840
	0x840: 0x090f, 0x841: 0x0a17, 0x842: 0x0b2f, 0x843: 0x0cbf, 0x844: 0x0e7b, 0x845: 0x103f,
	0x846: 0x1497, 0x847: 0x157b, 0x848: 0x15cf, 0x849: 0x15e7, 0x84a: 0x0837, 0x84b: 0x0cf3,
	0x84c: 0x0da3, 0x84d: 0x13eb, 0x84e: 0x0afb, 0x84f: 0x0bd7, 0x850: 0x0bf3, 0x851: 0x0c83,
	0x852: 0x0e6b, 0x853: 0x0eb7, 0x854: 0x0f67, 0x855: 0x108b, 0x856: 0x112f, 0x857: 0x1193,
	0x858: 0x13db, 0x859: 0x126b, 0x85a: 0x1403, 0x85b: 0x147f, 0x85c: 0x080f, 0x85d: 0x083b,
	0x85e: 0x0923, 0x85f: 0x0ea7, 0x860: 0x12f3, 0x861: 0x133b, 0x862: 0x0b1b, 0x863: 0x0b8b,
	0x864: 0x0c4f, 0x865: 0x0daf, 0x866: 0x10d7, 0x867: 0x0f23, 0x868: 0x073b, 0x869: 0x097f,
	0x86a: 0x0a63, 0x86b: 0x0ac7, 0x86c: 0x0b97, 0x86d: 0x0f3f, 0x86e: 0x0f5b, 0x86f: 0x116b,
	0x870: 0x118b, 0x871: 0x1463, 0x872: 0x14e3, 0x873: 0x14f3, 0x874: 0x152f, 0x875: 0x0753,
	0x876: 0x107f, 0x877: 0x144f, 0x878: 0x14cb, 0x879: 0x0baf, 0x87a: 0x0717, 0x87b: 0x0777,
	0x87c: 0x0a67, 0x87d: 0x0a87, 0x87e: 0x0caf, 0x87f: 0x0d73,
	// Block 0x22, offset 0x880
	0x880: 0x0ec3, 0x881: 0x0fcb, 0x882: 0x1277, 0x883: 0x1417, 0x884: 0x1623, 0x885: 0x0ce3,
	0x886: 0x14a3, 0x887: 0x0833, 0x888: 0x0d2f, 0x889: 0x0d3b, 0x88a: 0x0e0f, 0x88b: 0x0e47,
	0x88c: 0x0f4b, 0x88d: 0x0fa7, 0x88e: 0x1027, 0x88f: 0x110b, 0x890: 0x153b, 0x891: 0x07af,
	0x892: 0x0c03, 0x893: 0x14b3, 0x894: 0x0767, 0x895: 0x0aab, 0x896: 0x0e2f, 0x897: 0x13df,
	0x898: 0x0b67, 0x899: 0x0bb7, 0x89a: 0x0d43, 0x89b: 0x0f2f, 0x89c: 0x14bb, 0x89d: 0x0817,
	0x89e: 0x08ff, 0x89f: 0x0a97, 0x8a0: 0x0cd3, 0x8a1: 0x0d1f, 0x8a2: 0x0d5f, 0x8a3: 0x0df3,
	0x8a4: 0x0f47, 0x8a5: 0x0fbb, 0x8a6: 0x1157, 0x8a7: 0x12f7, 0x8a8: 0x1303, 0x8a9: 0x1457,
	0x8aa: 0x14d7, 0x8ab: 0x0883, 0x8ac: 0x0e4b, 0x8ad: 0x0903, 0x8ae: 0x0ec7, 0x8af: 0x0f6b,
	0x8b0: 0x1287, 0x8b1: 0x14bf, 0x8b2: 0x15ab, 0x8b3: 0x15d3, 0x8b4: 0x0d37, 0x8b5: 0x0e27,
	0x8b6: 0x11c3, 0x8b7: 0x10b7, 0x8b8: 0x10c3, 0x8b9: 0x10e7, 0x8ba: 0x0f17, 0x8bb: 0x0e9f,
	0x8bc: 0x1363, 0x8bd: 0x0733, 0x8be: 0x122b, 0x8bf: 0x081b,
	// Block 0x23, offset 0x8c0
	0x8c0: 0x080b, 0x8c1: 0x0b0b, 0x8c2: 0x0c2b, 0x8c3: 0x10f3, 0x8c4: 0x0a53, 0x8c5: 0x0e03,
	0x8c6: 0x0cef, 0x8c7: 0x13e7, 0x8c8: 0x12e7, 0x8c9: 0x14ab, 0x8ca: 0x1323, 0x8cb: 0x0b27,
	0x8cc: 0x0787, 0x8cd: 0x095b, 0x8d0: 0x09af,
	0x8d2: 0x0cdf, 0x8d5: 0x07f7, 0x8d6: 0x0f1f, 0x8d7: 0x0fe3,
	0x8d8: 0x1047, 0x8d9: 0x1063, 0x8da: 0x1067, 0x8db: 0x107b, 0x8dc: 0x14fb, 0x8dd: 0x10eb,
	0x8de: 0x116f, 0x8e0: 0x128f, 0x8e2: 0x1353,
	0x8e5: 0x1407, 0x8e6: 0x1433,
	0x8ea: 0x154f, 0x8eb: 0x1553, 0x8ec: 0x1557, 0x8ed: 0x15bb, 0x8ee: 0x142b, 0x8ef: 0x14c7,
	0x8f0: 0x0757, 0x8f1: 0x077b, 0x8f2: 0x078f, 0x8f3: 0x084b, 0x8f4: 0x0857, 0x8f5: 0x0897,
	0x8f6: 0x094b, 0x8f7: 0x0967, 0x8f8: 0x096f, 0x8f9: 0x09ab, 0x8fa: 0x09b7, 0x8fb: 0x0a93,
	0x8fc: 0x0a9b, 0x8fd: 0x0ba3, 0x8fe: 0x0bcb, 0x8ff: 0x0bd3,
	// Block 0x24, offset 0x900
	0x900: 0x0beb, 0x901: 0x0c97, 0x902: 0x0cc7, 0x903: 0x0ce7, 0x904: 0x0d57, 0x905: 0x0e1b,
	0x906: 0x0e37, 0x907: 0x0e67, 0x908: 0x0ebb, 0x909: 0x0edb, 0x90a: 0x0f4f, 0x90b: 0x102f,
	0x90c: 0x104b, 0x90d: 0x1053, 0x90e: 0x104f, 0x90f: 0x1057, 0x910: 0x105b, 0x911: 0x105f,
	0x912: 0x1073, 0x913: 0x1077, 0x914: 0x109b, 0x915: 0x10af, 0x916: 0x10cb, 0x917: 0x112f,
	0x918: 0x1137, 0x919: 0x113f, 0x91a: 0x1153, 0x91b: 0x117b, 0x91c: 0x11cb, 0x91d: 0x11ff,
	0x91e: 0x11ff, 0x91f: 0x1267, 0x920: 0x130f, 0x921: 0x1327, 0x922: 0x135b, 0x923: 0x135f,
	0x924: 0x13a3, 0x925: 0x13a7, 0x926: 0x13ff, 0x927: 0x1407, 0x928: 0x14db, 0x929: 0x151f,
	0x92a: 0x1537, 0x92b: 0x0b9b, 0x92c: 0x171e, 0x92d: 0x11e3,
	0x930: 0x06df, 0x931: 0x07e3, 0x932: 0x07a3, 0x933: 0x074b, 0x934: 0x078b, 0x935: 0x07b7,
	0x936: 0x0847, 0x937: 0x0863, 0x938: 0x094b, 0x939: 0x0937, 0x93a: 0x0947, 0x93b: 0x0963,
	0x93c: 0x09af, 0x93d: 0x09bf, 0x93e: 0x0a03, 0x93f: 0x0a0f,
	// Block 0x25, offset 0x940
	0x940: 0x0a2b, 0x941: 0x0a3b, 0x942: 0x0b23, 0x943: 0x0b2b, 0x944: 0x0b5b, 0x945: 0x0b7b,
	0x946: 0x0bab, 0x947: 0x0bc3, 0x948: 0x0bb3, 0x949: 0x0bd3, 0x94a: 0x0bc7, 0x94b: 0x0beb,
	0x94c: 0x0c07, 0x94d: 0x0c5f, 0x94e: 0x0c6b, 0x94f: 0x0c73, 0x950: 0x0c9b, 0x951: 0x0cdf,
	0x952: 0x0d0f, 0x953: 0x0d13, 0x954: 0x0d27, 0x955: 0x0da7, 0x956: 0x0db7, 0x957: 0x0e0f,
	0x958: 0x0e5b, 0x959: 0x0e53, 0x95a: 0x0e67, 0x95b: 0x0e83, 0x95c: 0x0ebb, 0x95d: 0x1013,
	0x95e: 0x0edf, 0x95f: 0x0f13, 0x960: 0x0f1f, 0x961: 0x0f5f, 0x962: 0x0f7b, 0x963: 0x0f9f,
	0x964: 0x0fc3, 0x965: 0x0fc7, 0x966: 0x0fe3, 0x967: 0x0fe7, 0x968: 0x0ff7, 0x969: 0x100b,
	0x96a: 0x1007, 0x96b: 0x1037, 0x96c: 0x10b3, 0x96d: 0x10cb, 0x96e: 0x10e3, 0x96f: 0x111b,
	0x970: 0x112f, 0x971: 0x114b, 0x972: 0x117b, 0x973: 0x122f, 0x974: 0x1257, 0x975: 0x12cb,
	0x976: 0x1313, 0x977: 0x131f, 0x978: 0x1327, 0x979: 0x133f, 0x97a: 0x1353, 0x97b: 0x1343,
	0x97c: 0x135b, 0x97d: 0x1357, 0x97e: 0x134f, 0x97f: 0x135f,
	// Block 0x26, offset 0x980
	0x980: 0x136b, 0x981: 0x13a7, 0x982: 0x13e3, 0x983: 0x1413, 0x984: 0x144b, 0x985: 0x146b,
	0x986: 0x14b7, 0x987: 0x14db, 0x988: 0x14fb, 0x989: 0x150f, 0x98a: 0x151f, 0x98b: 0x152b,
	0x98c: 0x1537, 0x98d: 0x158b, 0x98e: 0x162b, 0x98f: 0x16b5, 0x990: 0x16b0, 0x991: 0x16e2,
	0x992: 0x0607, 0x993: 0x062f, 0x994: 0x0633, 0x995: 0x1764, 0x996: 0x1791, 0x997: 0x1809,
	0x998: 0x1617, 0x999: 0x1627,
	// Block 0x27, offset 0x9c0
	0x9c0: 0x06fb, 0x9c1: 0x06f3, 0x9c2: 0x0703, 0x9c3: 0x1647, 0x9c4: 0x0747, 0x9c5: 0x0757,
	0x9c6: 0x075b, 0x9c7: 0x0763, 0x9c8: 0x076b, 0x9c9: 0x076f, 0x9ca: 0x077b, 0x9cb: 0x0773,
	0x9cc: 0x05b3, 0x9cd: 0x165b, 0x9ce: 0x078f, 0x9cf: 0x0793, 0x9d0: 0x0797, 0x9d1: 0x07b3,
	0x9d2: 0x164c, 0x9d3: 0x05b7, 0x9d4: 0x079f, 0x9d5: 0x07bf, 0x9d6: 0x1656, 0x9d7: 0x07cf,
	0x9d8: 0x07d7, 0x9d9: 0x0737, 0x9da: 0x07df, 0x9db: 0x07e3, 0x9dc: 0x1831, 0x9dd: 0x07ff,
	0x9de: 0x0807, 0x9df: 0x05bf, 0x9e0: 0x081f, 0x9e1: 0x0823, 0x9e2: 0x082b, 0x9e3: 0x082f,
	0x9e4: 0x05c3, 0x9e5: 0x0847, 0x9e6: 0x084b, 0x9e7: 0x0857, 0x9e8: 0x0863, 0x9e9: 0x0867,
	0x9ea: 0x086b, 0x9eb: 0x0873, 0x9ec: 0x0893, 0x9ed: 0x0897, 0x9ee: 0x089f, 0x9ef: 0x08af,
	0x9f0: 0x08b7, 0x9f1: 0x08bb, 0x9f2: 0x08bb, 0x9f3: 0x08bb, 0x9f4: 0x166a, 0x9f5: 0x0e93,
	0x9f6: 0x08cf, 0x9f7: 0x08d7, 0x9f8: 0x166f, 0x9f9: 0x08e3, 0x9fa: 0x08eb, 0x9fb: 0x08f3,
	0x9fc: 0x091b, 0x9fd: 0x0907, 0x9fe: 0x0913, 0x9ff: 0x0917,
	// Block 0x28, offset 0xa00
	0xa00: 0x091f, 0xa01: 0x0927, 0xa02: 0x092b, 0xa03: 0x0933, 0xa04: 0x093b, 0xa05: 0x093f,
	0xa06: 0x093f, 0xa07: 0x0947, 0xa08: 0x094f, 0xa09: 0x0953, 0xa0a: 0x095f, 0xa0b: 0x0983,
	0xa0c: 0x0967, 0xa0d: 0x0987, 0xa0e: 0x096b, 0xa0f: 0x0973, 0xa10: 0x080b, 0xa11: 0x09cf,
	0xa12: 0x0997, 0xa13: 0x099b, 0xa14: 0x099f, 0xa15: 0x0993, 0xa16: 0x09a7, 0xa17: 0x09a3,
	0xa18: 0x09bb, 0xa19: 0x1674, 0xa1a: 0x09d7, 0xa1b: 0x09db, 0xa1c: 0x09e3, 0xa1d: 0x09ef,
	0xa1e: 0x09f7, 0xa1f: 0x0a13, 0xa20: 0x1679, 0xa21: 0x167e, 0xa22: 0x0a1f, 0xa23: 0x0a23,
	0xa24: 0x0a27, 0xa25: 0x0a1b, 0xa26: 0x0a2f, 0xa27: 0x05c7, 0xa28: 0x05cb, 0xa29: 0x0a37,
	0xa2a: 0x0a3f, 0xa2b: 0x0a3f, 0xa2c: 0x1683, 0xa2d: 0x0a5b, 0xa2e: 0x0a5f, 0xa2f: 0x0a63,
	0xa30: 0x0a6b, 0xa31: 0x1688, 0xa32: 0x0a73, 0xa33: 0x0a77, 0xa34: 0x0b4f, 0xa35: 0x0a7f,
	0xa36: 0x05cf, 0xa37: 0x0a8b, 0xa38: 0x0a9b, 0xa39: 0x0aa7, 0xa3a: 0x0aa3, 0xa3b: 0x1692,
	0xa3c: 0x0aaf, 0xa3d: 0x1697, 0xa3e: 0x0abb, 0xa3f: 0x0ab7,
	// Block 0x29, offset 0xa40
	0xa40: 0x0abf, 0xa41: 0x0acf, 0xa42: 0x0ad3, 0xa43: 0x05d3, 0xa44: 0x0ae3, 0xa45: 0x0aeb,
	0xa46: 0x0aef, 0xa47: 0x0af3, 0xa48: 0x05d7, 0xa49: 0x169c, 0xa4a: 0x05db, 0xa4b: 0x0b0f,
	0xa4c: 0x0b13, 0xa4d: 0x0b17, 0xa4e: 0x0b1f, 0xa4f: 0x1863, 0xa50: 0x0b37, 0xa51: 0x16a6,
	0xa52: 0x16a6, 0xa53: 0x11d7, 0xa54: 0x0b47, 0xa55: 0x0b47, 0xa56: 0x05df, 0xa57: 0x16c9,
	0xa58: 0x179b, 0xa59: 0x0b57, 0xa5a: 0x0b5f, 0xa5b: 0x05e3, 0xa5c: 0x0b73, 0xa5d: 0x0b83,
	0xa5e: 0x0b87, 0xa5f: 0x0b8f, 0xa60: 0x0b9f, 0xa61: 0x05eb, 0xa62: 0x05e7, 0xa63: 0x0ba3,
	0xa64: 0x16ab, 0xa65: 0x0ba7, 0xa66: 0x0bbb, 0xa67: 0x0bbf, 0xa68: 0x0bc3, 0xa69: 0x0bbf,
	0xa6a: 0x0bcf, 0xa6b: 0x0bd3, 0xa6c: 0x0be3, 0xa6d: 0x0bdb, 0xa6e: 0x0bdf, 0xa6f: 0x0be7,
	0xa70: 0x0beb, 0xa71: 0x0bef, 0xa72: 0x0bfb, 0xa73: 0x0bff, 0xa74: 0x0c17, 0xa75: 0x0c1f,
	0xa76: 0x0c2f, 0xa77: 0x0c43, 0xa78: 0x16ba, 0xa79: 0x0c3f, 0xa7a: 0x0c33, 0xa7b: 0x0c4b,
	0xa7c: 0x0c53, 0xa7d: 0x0c67, 0xa7e: 0x16bf, 0xa7f: 0x0c6f,
	// Block 0x2a, offset 0xa80
	0xa80: 0x0c63, 0xa81: 0x0c5b, 0xa82: 0x05ef, 0xa83: 0x0c77, 0xa84: 0x0c7f, 0xa85: 0x0c87,
	0xa86: 0x0c7b, 0xa87: 0x05f3, 0xa88: 0x0c97, 0xa89: 0x0c9f, 0xa8a: 0x16c4, 0xa8b: 0x0ccb,
	0xa8c: 0x0cff, 0xa8d: 0x0cdb, 0xa8e: 0x05ff, 0xa8f: 0x0ce7, 0xa90: 0x05fb, 0xa91: 0x05f7,
	0xa92: 0x07c3, 0xa93: 0x07c7, 0xa94: 0x0d03, 0xa95: 0x0ceb, 0xa96: 0x11ab, 0xa97: 0x0663,
	0xa98: 0x0d0f, 0xa99: 0x0d13, 0xa9a: 0x0d17, 0xa9b: 0x0d2b, 0xa9c: 0x0d23, 0xa9d: 0x16dd,
	0xa9e: 0x0603, 0xa9f: 0x0d3f, 0xaa0: 0x0d33, 0xaa1: 0x0d4f, 0xaa2: 0x0d57, 0xaa3: 0x16e7,
	0xaa4: 0x0d5b, 0xaa5: 0x0d47, 0xaa6: 0x0d63, 0xaa7: 0x0607, 0xaa8: 0x0d67, 0xaa9: 0x0d6b,
	0xaaa: 0x0d6f, 0xaab: 0x0d7b, 0xaac: 0x16ec, 0xaad: 0x0d83, 0xaae: 0x060b, 0xaaf: 0x0d8f,
	0xab0: 0x16f1, 0xab1: 0x0d93, 0xab2: 0x060f, 0xab3: 0x0d9f, 0xab4: 0x0dab, 0xab5: 0x0db7,
	0xab6: 0x0dbb, 0xab7: 0x16f6, 0xab8: 0x168d, 0xab9: 0x16fb, 0xaba: 0x0ddb, 0xabb: 0x1700,
	0xabc: 0x0de7, 0xabd: 0x0def, 0xabe: 0x0ddf, 0xabf: 0x0dfb,
	// Block 0x2b, offset 0xac0
	0xac0: 0x0e0b, 0xac1: 0x0e1b, 0xac2: 0x0e0f, 0xac3: 0x0e13, 0xac4: 0x0e1f, 0xac5: 0x0e23,
	0xac6: 0x1705, 0xac7: 0x0e07, 0xac8: 0x0e3b, 0xac9: 0x0e3f, 0xaca: 0x0613, 0xacb: 0x0e53,
	0xacc: 0x0e4f, 0xacd: 0x170a, 0xace: 0x0e33, 0xacf: 0x0e6f, 0xad0: 0x170f, 0xad1: 0x1714,
	0xad2: 0x0e73, 0xad3: 0x0e87, 0xad4: 0x0e83, 0xad5: 0x0e7f, 0xad6: 0x0617, 0xad7: 0x0e8b,
	0xad8: 0x0e9b, 0xad9: 0x0e97, 0xada: 0x0ea3, 0xadb: 0x1651, 0xadc: 0x0eb3, 0xadd: 0x1719,
	0xade: 0x0ebf, 0xadf: 0x1723, 0xae0: 0x0ed3, 0xae1: 0x0edf, 0xae2: 0x0ef3, 0xae3: 0x1728,
	0xae4: 0x0f07, 0xae5: 0x0f0b, 0xae6: 0x172d, 0xae7: 0x1732, 0xae8: 0x0f27, 0xae9: 0x0f37,
	0xaea: 0x061b, 0xaeb: 0x0f3b, 0xaec: 0x061f, 0xaed: 0x061f, 0xaee: 0x0f53, 0xaef: 0x0f57,
	0xaf0: 0x0f5f, 0xaf1: 0x0f63, 0xaf2: 0x0f6f, 0xaf3: 0x0623, 0xaf4: 0x0f87, 0xaf5: 0x1737,
	0xaf6: 0x0fa3, 0xaf7: 0x173c, 0xaf8: 0x0faf, 0xaf9: 0x16a1, 0xafa: 0x0fbf, 0xafb: 0x1741,
	0xafc: 0x1746, 0xafd: 0x174b, 0xafe: 0x0627, 0xaff: 0x062b,
	// Block 0x2c, offset 0xb00
	0xb00: 0x0ff7, 0xb01: 0x1755, 0xb02: 0x1750, 0xb03: 0x175a, 0xb04: 0x175f, 0xb05: 0x0fff,
	0xb06: 0x1003, 0xb07: 0x1003, 0xb08: 0x100b, 0xb09: 0x0633, 0xb0a: 0x100f, 0xb0b: 0x0637,
	0xb0c: 0x063b, 0xb0d: 0x1769, 0xb0e: 0x1023, 0xb0f: 0x102b, 0xb10: 0x1037, 0xb11: 0x063f,
	0xb12: 0x176e, 0xb13: 0x105b, 0xb14: 0x1773, 0xb15: 0x1778, 0xb16: 0x107b, 0xb17: 0x1093,
	0xb18: 0x0643, 0xb19: 0x109b, 0xb1a: 0x109f, 0xb1b: 0x10a3, 0xb1c: 0x177d, 0xb1d: 0x1782,
	0xb1e: 0x1782, 0xb1f: 0x10bb, 0xb20: 0x0647, 0xb21: 0x1787, 0xb22: 0x10cf, 0xb23: 0x10d3,
	0xb24: 0x064b, 0xb25: 0x178c, 0xb26: 0x10ef, 0xb27: 0x064f, 0xb28: 0x10ff, 0xb29: 0x10f7,
	0xb2a: 0x1107, 0xb2b: 0x1796, 0xb2c: 0x111f, 0xb2d: 0x0653, 0xb2e: 0x112b, 0xb2f: 0x1133,
	0xb30: 0x1143, 0xb31: 0x0657, 0xb32: 0x17a0, 0xb33: 0x17a5, 0xb34: 0x065b, 0xb35: 0x17aa,
	0xb36: 0x115b, 0xb37: 0x17af, 0xb38: 0x1167, 0xb39: 0x1173, 0xb3a: 0x117b, 0xb3b: 0x17b4,
	0xb3c: 0x17b9, 0xb3d: 0x118f, 0xb3e: 0x17be, 0xb3f: 0x1197,
	// Block 0x2d, offset 0xb40
	0xb40: 0x16ce, 0xb41: 0x065f, 0xb42: 0x11af, 0xb43: 0x11b3, 0xb44: 0x0667, 0xb45: 0x11b7,
	0xb46: 0x0a33, 0xb47: 0x17c3, 0xb48: 0x17c8, 0xb49: 0x16d3, 0xb4a: 0x16d8, 0xb4b: 0x11d7,
	0xb4c: 0x11db, 0xb4d: 0x13f3, 0xb4e: 0x066b, 0xb4f: 0x1207, 0xb50: 0x1203, 0xb51: 0x120b,
	0xb52: 0x083f, 0xb53: 0x120f, 0xb54: 0x1213, 0xb55: 0x1217, 0xb56: 0x121f, 0xb57: 0x17cd,
	0xb58: 0x121b, 0xb59: 0x1223, 0xb5a: 0x1237, 0xb5b: 0x123b, 0xb5c: 0x1227, 0xb5d: 0x123f,
	0xb5e: 0x1253, 0xb5f: 0x1267, 0xb60: 0x1233, 0xb61: 0x1247, 0xb62: 0x124b, 0xb63: 0x124f,
	0xb64: 0x17d2, 0xb65: 0x17dc, 0xb66: 0x17d7, 0xb67: 0x066f, 0xb68: 0x126f, 0xb69: 0x1273,
	0xb6a: 0x127b, 0xb6b: 0x17f0, 0xb6c: 0x127f, 0xb6d: 0x17e1, 0xb6e: 0x0673, 0xb6f: 0x0677,
	0xb70: 0x17e6, 0xb71: 0x17eb, 0xb72: 0x067b, 0xb73: 0x129f, 0xb74: 0x12a3, 0xb75: 0x12a7,
	0xb76: 0x12ab, 0xb77: 0x12b7, 0xb78: 0x12b3, 0xb79: 0x12bf, 0xb7a: 0x12bb, 0xb7b: 0x12cb,
	0xb7c: 0x12c3, 0xb7d: 0x12c7, 0xb7e: 0x12cf, 0xb7f: 0x067f,
	// Block 0x2e, offset 0xb80
	0xb80: 0x12d7, 0xb81: 0x12db, 0xb82: 0x0683, 0xb83: 0x12eb, 0xb84: 0x12ef, 0xb85: 0x17f5,
	0xb86: 0x12fb, 0xb87: 0x12ff, 0xb88: 0x0687, 0xb89: 0x130b, 0xb8a: 0x05bb, 0xb8b: 0x17fa,
	0xb8c: 0x17ff, 0xb8d: 0x068b, 0xb8e: 0x068f, 0xb8f: 0x1337, 0xb90: 0x134f, 0xb91: 0x136b,
	0xb92: 0x137b, 0xb93: 0x1804, 0xb94: 0x138f, 0xb95: 0x1393, 0xb96: 0x13ab, 0xb97: 0x13b7,
	0xb98: 0x180e, 0xb99: 0x1660, 0xb9a: 0x13c3, 0xb9b: 0x13bf, 0xb9c: 0x13cb, 0xb9d: 0x1665,
	0xb9e: 0x13d7, 0xb9f: 0x13e3, 0xba0: 0x1813, 0xba1: 0x1818, 0xba2: 0x1423, 0xba3: 0x142f,
	0xba4: 0x1437, 0xba5: 0x181d, 0xba6: 0x143b, 0xba7: 0x1467, 0xba8: 0x1473, 0xba9: 0x1477,
	0xbaa: 0x146f, 0xbab: 0x1483, 0xbac: 0x1487, 0xbad: 0x1822, 0xbae: 0x1493, 0xbaf: 0x0693,
	0xbb0: 0x149b, 0xbb1: 0x1827, 0xbb2: 0x0697, 0xbb3: 0x14d3, 0xbb4: 0x0ac3, 0xbb5: 0x14eb,
	0xbb6: 0x182c, 0xbb7: 0x1836, 0xbb8: 0x069b, 0xbb9: 0x069f, 0xbba: 0x1513, 0xbbb: 0x183b,
	0xbbc: 0x06a3, 0xbbd: 0x1840, 0xbbe: 0x152b, 0xbbf: 0x152b,
	// Block 0x2f, offset 0xbc0
	0xbc0: 0x1533, 0xbc1: 0x1845, 0xbc2: 0x154b, 0xbc3: 0x06a7, 0xbc4: 0x155b, 0xbc5: 0x1567,
	0xbc6: 0x156f, 0xbc7: 0x1577, 0xbc8: 0x06ab, 0xbc9: 0x184a, 0xbca: 0x158b, 0xbcb: 0x15a7,
	0xbcc: 0x15b3, 0xbcd: 0x06af, 0xbce: 0x06b3, 0xbcf: 0x15b7, 0xbd0: 0x184f, 0xbd1: 0x06b7,
	0xbd2: 0x1854, 0xbd3: 0x1859, 0xbd4: 0x185e, 0xbd5: 0x15db, 0xbd6: 0x06bb, 0xbd7: 0x15ef,
	0xbd8: 0x15f7, 0xbd9: 0x15fb, 0xbda: 0x1603, 0xbdb: 0x160b, 0xbdc: 0x1613, 0xbdd: 0x1868,
}

// nfcIndex: 22 blocks, 1408 entries, 1408 bytes
// Block 0 is the zero block.
var nfcIndex = [1408]uint8{
	// Block 0x0, offset 0x0
	// Block 0x1, offset 0x40
	// Block 0x2, offset 0x80
	// Block 0x3, offset 0xc0
	0xc2: 0x2e, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x2f, 0xc7: 0x04,
	0xc8: 0x05, 0xca: 0x30, 0xcb: 0x31, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x32,
	0xd0: 0x09, 0xd1: 0x33, 0xd2: 0x34, 0xd3: 0x0a, 0xd6: 0x0b, 0xd7: 0x35,
	0xd8: 0x36, 0xd9: 0x0c, 0xdb: 0x37, 0xdc: 0x38, 0xdd: 0x39, 0xdf: 0x3a,
	0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05,
	0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a,
	0xf0: 0x13,
	// Block 0x4, offset 0x100
	0x120: 0x3b, 0x121: 0x3c, 0x123: 0x0d, 0x124: 0x3d, 0x125: 0x3e, 0x126: 0x3f, 0x127: 0x40,
	0x128: 0x41, 0x129: 0x42, 0x12a: 0x43, 0x12b: 0x44, 0x12c: 0x3f, 0x12d: 0x45, 0x12e: 0x46, 0x12f: 0x47,
	0x131: 0x48, 0x132: 0x49, 0x133: 0x4a, 0x134: 0x4b, 0x135: 0x4c, 0x137: 0x4d,
	0x138: 0x4e, 0x139: 0x4f, 0x13a: 0x50, 0x13b: 0x51, 0x13c: 0x52, 0x13d: 0x53, 0x13e: 0x54, 0x13f: 0x55,
	// Block 0x5, offset 0x140
	0x140: 0x56, 0x142: 0x57, 0x144: 0x58, 0x145: 0x59, 0x146: 0x5a, 0x147: 0x5b,
	0x14d: 0x5c,
	0x15c: 0x5d, 0x15f: 0x5e,
	0x162: 0x5f, 0x164: 0x60,
	0x168: 0x61, 0x169: 0x62, 0x16a: 0x63, 0x16c: 0x0e, 0x16d: 0x64, 0x16e: 0x65, 0x16f: 0x66,
	0x170: 0x67, 0x173: 0x68, 0x177: 0x0f,
	0x178: 0x10, 0x179: 0x11, 0x17a: 0x12, 0x17b: 0x13, 0x17c: 0x14, 0x17d: 0x15, 0x17e: 0x16, 0x17f: 0x17,
	// Block 0x6, offset 0x180
	0x180: 0x69, 0x183: 0x6a, 0x184: 0x6b, 0x186: 0x6c, 0x187: 0x6d,
	0x188: 0x6e, 0x189: 0x18, 0x18a: 0x19, 0x18b: 0x6f, 0x18c: 0x70,
	0x1ab: 0x71,
	0x1b3: 0x72, 0x1b5: 0x73, 0x1b7: 0x74,
	// Block 0x7, offset 0x1c0
	0x1c0: 0x75, 0x1c1: 0x1a, 0x1c2: 0x1b, 0x1c3: 0x1c, 0x1c4: 0x76, 0x1c5: 0x77,
	0x1c9: 0x78, 0x1cc: 0x79, 0x1cd: 0x7a,
	// Block 0x8, offset 0x200
	0x219: 0x7b, 0x21a: 0x7c, 0x21b: 0x7d,
	0x220: 0x7e, 0x223: 0x7f, 0x224: 0x80, 0x225: 0x81, 0x226: 0x82, 0x227: 0x83,
	0x22a: 0x84, 0x22b: 0x85, 0x22f: 0x86,
	0x230: 0x87, 0x231: 0x88, 0x232: 0x89, 0x233: 0x8a, 0x234: 0x8b, 0x235: 0x8c, 0x236: 0x8d, 0x237: 0x87,
	0x238: 0x88, 0x239: 0x89, 0x23a: 0x8a, 0x23b: 0x8b, 0x23c: 0x8c, 0x23d: 0x8d, 0x23e: 0x87, 0x23f: 0x88,
	// Block 0x9, offset 0x240
	0x240: 0x89, 0x241: 0x8a, 0x242: 0x8b, 0x243: 0x8c, 0x244: 0x8d, 0x245: 0x87, 0x246: 0x88, 0x247: 0x89,
	0x248: 0x8a, 0x249: 0x8b, 0x24a: 0x8c, 0x24b: 0x8d, 0x24c: 0x87, 0x24d: 0x88, 0x24e: 0x89, 0x24f: 0x8a,
	0x250: 0x8b, 0x251: 0x8c, 0x252: 0x8d, 0x253: 0x87, 0x254: 0x88, 0x255: 0x89, 0x256: 0x8a, 0x257: 0x8b,
	0x258: 0x8c, 0x259: 0x8d, 0x25a: 0x87, 0x25b: 0x88, 0x25c: 0x89, 0x25d: 0x8a, 0x25e: 0x8b, 0x25f: 0x8c,
	0x260: 0x8d, 0x261: 0x87, 0x262: 0x88, 0x263: 0x89, 0x264: 0x8a, 0x265: 0x8b, 0x266: 0x8c, 0x267: 0x8d,
	0x268: 0x87, 0x269: 0x88, 0x26a: 0x89, 0x26b: 0x8a, 0x26c: 0x8b, 0x26d: 0x8c, 0x26e: 0x8d, 0x26f: 0x87,
	0x270: 0x88, 0x271: 0x89, 0x272: 0x8a, 0x273: 0x8b, 0x274: 0x8c, 0x275: 0x8d, 0x276: 0x87, 0x277: 0x88,
	0x278: 0x89, 0x279: 0x8a, 0x27a: 0x8b, 0x27b: 0x8c, 0x27c: 0x8d, 0x27d: 0x87, 0x27e: 0x88, 0x27f: 0x89,
	// Block 0xa, offset 0x280
	0x280: 0x8a, 0x281: 0x8b, 0x282: 0x8c, 0x283: 0x8d, 0x284: 0x87, 0x285: 0x88, 0x286: 0x89, 0x287: 0x8a,
	0x288: 0x8b, 0x289: 0x8c, 0x28a: 0x8d, 0x28b: 0x87, 0x28c: 0x88, 0x28d: 0x89, 0x28e: 0x8a, 0x28f: 0x8b,
	0x290: 0x8c, 0x291: 0x8d, 0x292: 0x87, 0x293: 0x88, 0x294: 0x89, 0x295: 0x8a, 0x296: 0x8b, 0x297: 0x8c,
	0x298: 0x8d, 0x299: 0x87, 0x29a: 0x88, 0x29b: 0x89, 0x29c: 0x8a, 0x29d: 0x8b, 0x29e: 0x8c, 0x29f: 0x8d,
	0x2a0: 0x87, 0x2a1: 0x88, 0x2a2: 0x89, 0x2a3: 0x8a, 0x2a4: 0x8b, 0x2a5: 0x8c, 0x2a6: 0x8d, 0x2a7: 0x87,
	0x2a8: 0x88, 0x2a9: 0x89, 0x2aa: 0x8a, 0x2ab: 0x8b, 0x2ac: 0x8c, 0x2ad: 0x8d, 0x2ae: 0x87, 0x2af: 0x88,
	0x2b0: 0x89, 0x2b1: 0x8a, 0x2b2: 0x8b, 0x2b3: 0x8c, 0x2b4: 0x8d, 0x2b5: 0x87, 0x2b6: 0x88, 0x2b7: 0x89,
	0x2b8: 0x8a, 0x2b9: 0x8b, 0x2ba: 0x8c, 0x2bb: 0x8d, 0x2bc: 0x87, 0x2bd: 0x88, 0x2be: 0x89, 0x2bf: 0x8a,
	// Block 0xb, offset 0x2c0
	0x2c0: 0x8b, 0x2c1: 0x8c, 0x2c2: 0x8d, 0x2c3: 0x87, 0x2c4: 0x88, 0x2c5: 0x89, 0x2c6: 0x8a, 0x2c7: 0x8b,
	0x2c8: 0x8c, 0x2c9: 0x8d, 0x2ca: 0x87, 0x2cb: 0x88, 0x2cc: 0x89, 0x2cd: 0x8a, 0x2ce: 0x8b, 0x2cf: 0x8c,
	0x2d0: 0x8d, 0x2d1: 0x87, 0x2d2: 0x88, 0x2d3: 0x89, 0x2d4: 0x8a, 0x2d5: 0x8b, 0x2d6: 0x8c, 0x2d7: 0x8d,
	0x2d8: 0x87, 0x2d9: 0x88, 0x2da: 0x89, 0x2db: 0x8a, 0x2dc: 0x8b, 0x2dd: 0x8c, 0x2de: 0x8e,
	// Block 0xc, offset 0x300
	0x324: 0x1d, 0x325: 0x1e, 0x326: 0x1f, 0x327: 0x20,
	0x328: 0x21, 0x329: 0x22, 0x32a: 0x23, 0x32b: 0x24, 0x32c: 0x8f, 0x32d: 0x90, 0x32e: 0x91,
	0x331: 0x92, 0x332: 0x93, 0x333: 0x94, 0x334: 0x95,
	0x338: 0x96, 0x339: 0x97, 0x33a: 0x98, 0x33b: 0x99, 0x33e: 0x9a, 0x33f: 0x9b,
	// Block 0xd, offset 0x340
	0x347: 0x9c,
	0x34b: 0x9d, 0x34d: 0x9e,
	0x368: 0x9f, 0x36b: 0xa0,
	0x374: 0xa1,
	0x37d: 0xa2,
	// Block 0xe, offset 0x380
	0x381: 0xa3, 0x382: 0xa4, 0x384: 0xa5, 0x385: 0x82, 0x387: 0xa6,
	0x388: 0xa7, 0x38b: 0xa8, 0x38c: 0xa9, 0x38d: 0xaa,
	0x391: 0xab, 0x392: 0xac, 0x393: 0xad, 0x396: 0xae, 0x397: 0xaf,
	0x398: 0x73, 0x39a: 0xb0, 0x39c: 0xb1,
	0x3a0: 0xb2,
	0x3a8: 0xb3, 0x3a9: 0xb4, 0x3aa: 0xb5,
	0x3b0: 0x73, 0x3b5: 0xb6, 0x3b6: 0xb7,
	// Block 0xf, offset 0x3c0
	0x3eb: 0xb8, 0x3ec: 0xb9,
	// Block 0x10, offset 0x400
	0x432: 0xba,
	// Block 0x11, offset 0x440
	0x445: 0xbb, 0x446: 0xbc, 0x447: 0xbd,
	0x449: 0xbe,
	// Block 0x12, offset 0x480
	0x480: 0xbf,
	0x4a3: 0xc0, 0x4a5: 0xc1,
	// Block 0x13, offset 0x4c0
	0x4c8: 0xc2,
	// Block 0x14, offset 0x500
	0x520: 0x25, 0x521: 0x26, 0x522: 0x27, 0x523: 0x28, 0x524: 0x29, 0x525: 0x2a, 0x526: 0x2b, 0x527: 0x2c,
	0x528: 0x2d,
	// Block 0x15, offset 0x540
	0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d,
	0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11,
	0x56f: 0x12,
}

// nfcSparseOffset: 149 entries, 298 bytes
var nfcSparseOffset = []uint16{0x0, 0x5, 0x9, 0xb, 0xd, 0x18, 0x28, 0x2a, 0x2f, 0x3a, 0x49, 0x56, 0x5e, 0x63, 0x68, 0x6a, 0x72, 0x79, 0x7c, 0x84, 0x88, 0x8c, 0x8e, 0x90, 0x99, 0x9d, 0xa4, 0xa9, 0xac, 0xb6, 0xb9, 0xc0, 0xc8, 0xcb, 0xcd, 0xcf, 0xd1, 0xd6, 0xe7, 0xf3, 0xf5, 0xfb, 0xfd, 0xff, 0x101, 0x103, 0x105, 0x107, 0x10a, 0x10d, 0x10f, 0x112, 0x115, 0x119, 0x11e, 0x127, 0x129, 0x12c, 0x12e, 0x139, 0x13d, 0x14b, 0x14e, 0x154, 0x15a, 0x165, 0x169, 0x16b, 0x16d, 0x16f, 0x171, 0x173, 0x179, 0x17d, 0x17f, 0x181, 0x189, 0x18d, 0x190, 0x192, 0x194, 0x196, 0x199, 0x19b, 0x19d, 0x19f, 0x1a1, 0x1a7, 0x1aa, 0x1ac, 0x1b3, 0x1b9, 0x1bf, 0x1c7, 0x1cd, 0x1d3, 0x1d9, 0x1dd, 0x1eb, 0x1f4, 0x1f7, 0x1fa, 0x1fc, 0x1ff, 0x201, 0x205, 0x20a, 0x20c, 0x20e, 0x213, 0x219, 0x21b, 0x21d, 0x21f, 0x225, 0x228, 0x22a, 0x230, 0x233, 0x23b, 0x242, 0x245, 0x248, 0x24a, 0x24d, 0x255, 0x259, 0x260, 0x263, 0x269, 0x26b, 0x26e, 0x270, 0x273, 0x275, 0x277, 0x279, 0x27c, 0x27e, 0x280, 0x282, 0x284, 0x291, 0x29b, 0x29d, 0x29f, 0x2a5, 0x2a7, 0x2aa}

// nfcSparseValues: 684 entries, 2736 bytes
var nfcSparseValues = [684]valueRange{
	// Block 0x0, offset 0x0
	{value: 0x0000, lo: 0x04},
	{value: 0xa100, lo: 0xa8, hi: 0xa8},
	{value: 0x8100, lo: 0xaf, hi: 0xaf},
	{value: 0x8100, lo: 0xb4, hi: 0xb4},
	{value: 0x8100, lo: 0xb8, hi: 0xb8},
	// Block 0x1, offset 0x5
	{value: 0x0091, lo: 0x03},
	{value: 0x46e2, lo: 0xa0, hi: 0xa1},
	{value: 0x4714, lo: 0xaf, hi: 0xb0},
	{value: 0xa000, lo: 0xb7, hi: 0xb7},
	// Block 0x2, offset 0x9
	{value: 0x0000, lo: 0x01},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	// Block 0x3, offset 0xb
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0x98, hi: 0x9d},
	// Block 0x4, offset 0xd
	{value: 0x0006, lo: 0x0a},
	{value: 0xa000, lo: 0x81, hi: 0x81},
	{value: 0xa000, lo: 0x85, hi: 0x85},
	{value: 0xa000, lo: 0x89, hi: 0x89},
	{value: 0x4840, lo: 0x8a, hi: 0x8a},
	{value: 0x485e, lo: 0x8b, hi: 0x8b},
	{value: 0x36c7, lo: 0x8c, hi: 0x8c},
	{value: 0x36df, lo: 0x8d, hi: 0x8d},
	{value: 0x4876, lo: 0x8e, hi: 0x8e},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x36fd, lo: 0x93, hi: 0x94},
	// Block 0x5, offset 0x18
	{value: 0x0000, lo: 0x0f},
	{value: 0xa000, lo: 0x83, hi: 0x83},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0xa000, lo: 0x8b, hi: 0x8b},
	{value: 0xa000, lo: 0x8d, hi: 0x8d},
	{value: 0x37a5, lo: 0x90, hi: 0x90},
	{value: 0x37b1, lo: 0x91, hi: 0x91},
	{value: 0x379f, lo: 0x93, hi: 0x93},
	{value: 0xa000, lo: 0x96, hi: 0x96},
	{value: 0x3817, lo: 0x97, hi: 0x97},
	{value: 0x37e1, lo: 0x9c, hi: 0x9c},
	{value: 0x37c9, lo: 0x9d, hi: 0x9d},
	{value: 0x37f3, lo: 0x9e, hi: 0x9e},
	{value: 0xa000, lo: 0xb4, hi: 0xb5},
	{value: 0x381d, lo: 0xb6, hi: 0xb6},
	{value: 0x3823, lo: 0xb7, hi: 0xb7},
	// Block 0x6, offset 0x28
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x83, hi: 0x87},
	// Block 0x7, offset 0x2a
	{value: 0x0001, lo: 0x04},
	{value: 0x8113, lo: 0x81, hi: 0x82},
	{value: 0x8132, lo: 0x84, hi: 0x84},
	{value: 0x812d, lo: 0x85, hi: 0x85},
	{value: 0x810d, lo: 0x87, hi: 0x87},
	// Block 0x8, offset 0x2f
	{value: 0x0000, lo: 0x0a},
	{value: 0x8132, lo: 0x90, hi: 0x97},
	{value: 0x8119, lo: 0x98, hi: 0x98},
	{value: 0x811a, lo: 0x99, hi: 0x99},
	{value: 0x811b, lo: 0x9a, hi: 0x9a},
	{value: 0x3841, lo: 0xa2, hi: 0xa2},
	{value: 0x3847, lo: 0xa3, hi: 0xa3},
	{value: 0x3853, lo: 0xa4, hi: 0xa4},
	{value: 0x384d, lo: 0xa5, hi: 0xa5},
	{value: 0x3859, lo: 0xa6, hi: 0xa6},
	{value: 0xa000, lo: 0xa7, hi: 0xa7},
	// Block 0x9, offset 0x3a
	{value: 0x0000, lo: 0x0e},
	{value: 0x386b, lo: 0x80, hi: 0x80},
	{value: 0xa000, lo: 0x81, hi: 0x81},
	{value: 0x385f, lo: 0x82, hi: 0x82},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x3865, lo: 0x93, hi: 0x93},
	{value: 0xa000, lo: 0x95, hi: 0x95},
	{value: 0x8132, lo: 0x96, hi: 0x9c},
	{value: 0x8132, lo: 0x9f, hi: 0xa2},
	{value: 0x812d, lo: 0xa3, hi: 0xa3},
	{value: 0x8132, lo: 0xa4, hi: 0xa4},
	{value: 0x8132, lo: 0xa7, hi: 0xa8},
	{value: 0x812d, lo: 0xaa, hi: 0xaa},
	{value: 0x8132, lo: 0xab, hi: 0xac},
	{value: 0x812d, lo: 0xad, hi: 0xad},
	// Block 0xa, offset 0x49
	{value: 0x0000, lo: 0x0c},
	{value: 0x811f, lo: 0x91, hi: 0x91},
	{value: 0x8132, lo: 0xb0, hi: 0xb0},
	{value: 0x812d, lo: 0xb1, hi: 0xb1},
	{value: 0x8132, lo: 0xb2, hi: 0xb3},
	{value: 0x812d, lo: 0xb4, hi: 0xb4},
	{value: 0x8132, lo: 0xb5, hi: 0xb6},
	{value: 0x812d, lo: 0xb7, hi: 0xb9},
	{value: 0x8132, lo: 0xba, hi: 0xba},
	{value: 0x812d, lo: 0xbb, hi: 0xbc},
	{value: 0x8132, lo: 0xbd, hi: 0xbd},
	{value: 0x812d, lo: 0xbe, hi: 0xbe},
	{value: 0x8132, lo: 0xbf, hi: 0xbf},
	// Block 0xb, offset 0x56
	{value: 0x0005, lo: 0x07},
	{value: 0x8132, lo: 0x80, hi: 0x80},
	{value: 0x8132, lo: 0x81, hi: 0x81},
	{value: 0x812d, lo: 0x82, hi: 0x83},
	{value: 0x812d, lo: 0x84, hi: 0x85},
	{value: 0x812d, lo: 0x86, hi: 0x87},
	{value: 0x812d, lo: 0x88, hi: 0x89},
	{value: 0x8132, lo: 0x8a, hi: 0x8a},
	// Block 0xc, offset 0x5e
	{value: 0x0000, lo: 0x04},
	{value: 0x8132, lo: 0xab, hi: 0xb1},
	{value: 0x812d, lo: 0xb2, hi: 0xb2},
	{value: 0x8132, lo: 0xb3, hi: 0xb3},
	{value: 0x812d, lo: 0xbd, hi: 0xbd},
	// Block 0xd, offset 0x63
	{value: 0x0000, lo: 0x04},
	{value: 0x8132, lo: 0x96, hi: 0x99},
	{value: 0x8132, lo: 0x9b, hi: 0xa3},
	{value: 0x8132, lo: 0xa5, hi: 0xa7},
	{value: 0x8132, lo: 0xa9, hi: 0xad},
	// Block 0xe, offset 0x68
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x99, hi: 0x9b},
	// Block 0xf, offset 0x6a
	{value: 0x0000, lo: 0x07},
	{value: 0xa000, lo: 0xa8, hi: 0xa8},
	{value: 0x3ed8, lo: 0xa9, hi: 0xa9},
	{value: 0xa000, lo: 0xb0, hi: 0xb0},
	{value: 0x3ee0, lo: 0xb1, hi: 0xb1},
	{value: 0xa000, lo: 0xb3, hi: 0xb3},
	{value: 0x3ee8, lo: 0xb4, hi: 0xb4},
	{value: 0x9902, lo: 0xbc, hi: 0xbc},
	// Block 0x10, offset 0x72
	{value: 0x0008, lo: 0x06},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x8132, lo: 0x91, hi: 0x91},
	{value: 0x812d, lo: 0x92, hi: 0x92},
	{value: 0x8132, lo: 0x93, hi: 0x93},
	{value: 0x8132, lo: 0x94, hi: 0x94},
	{value: 0x451c, lo: 0x98, hi: 0x9f},
	// Block 0x11, offset 0x79
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x12, offset 0x7c
	{value: 0x0008, lo: 0x07},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2c9e, lo: 0x8b, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	{value: 0x455c, lo: 0x9c, hi: 0x9d},
	{value: 0x456c, lo: 0x9f, hi: 0x9f},
	{value: 0x8132, lo: 0xbe, hi: 0xbe},
	// Block 0x13, offset 0x84
	{value: 0x0000, lo: 0x03},
	{value: 0x4594, lo: 0xb3, hi: 0xb3},
	{value: 0x459c, lo: 0xb6, hi: 0xb6},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	// Block 0x14, offset 0x88
	{value: 0x0008, lo: 0x03},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x4574, lo: 0x99, hi: 0x9b},
	{value: 0x458c, lo: 0x9e, hi: 0x9e},
	// Block 0x15, offset 0x8c
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	// Block 0x16, offset 0x8e
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	// Block 0x17, offset 0x90
	{value: 0x0000, lo: 0x08},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2cb6, lo: 0x88, hi: 0x88},
	{value: 0x2cae, lo: 0x8b, hi: 0x8b},
	{value: 0x2cbe, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x96, hi: 0x97},
	{value: 0x45a4, lo: 0x9c, hi: 0x9c},
	{value: 0x45ac, lo: 0x9d, hi: 0x9d},
	// Block 0x18, offset 0x99
	{value: 0x0000, lo: 0x03},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x2cc6, lo: 0x94, hi: 0x94},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x19, offset 0x9d
	{value: 0x0000, lo: 0x06},
	{value: 0xa000, lo: 0x86, hi: 0x87},
	{value: 0x2cce, lo: 0x8a, hi: 0x8a},
	{value: 0x2cde, lo: 0x8b, hi: 0x8b},
	{value: 0x2cd6, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	// Block 0x1a, offset 0xa4
	{value: 0x1801, lo: 0x04},
	{value: 0xa000, lo: 0x86, hi: 0x86},
	{value: 0x3ef0, lo: 0x88, hi: 0x88},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x8120, lo: 0x95, hi: 0x96},
	// Block 0x1b, offset 0xa9
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	{value: 0xa000, lo: 0xbf, hi: 0xbf},
	// Block 0x1c, offset 0xac
	{value: 0x0000, lo: 0x09},
	{value: 0x2ce6, lo: 0x80, hi: 0x80},
	{value: 0x9900, lo: 0x82, hi: 0x82},
	{value: 0xa000, lo: 0x86, hi: 0x86},
	{value: 0x2cee, lo: 0x87, hi: 0x87},
	{value: 0x2cf6, lo: 0x88, hi: 0x88},
	{value: 0x2f50, lo: 0x8a, hi: 0x8a},
	{value: 0x2dd8, lo: 0x8b, hi: 0x8b},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x95, hi: 0x96},
	// Block 0x1d, offset 0xb6
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0xbb, hi: 0xbc},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x1e, offset 0xb9
	{value: 0x0000, lo: 0x06},
	{value: 0xa000, lo: 0x86, hi: 0x87},
	{value: 0x2cfe, lo: 0x8a, hi: 0x8a},
	{value: 0x2d0e, lo: 0x8b, hi: 0x8b},
	{value: 0x2d06, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	// Block 0x1f, offset 0xc0
	{value: 0x6bea, lo: 0x07},
	{value: 0x9904, lo: 0x8a, hi: 0x8a},
	{value: 0x9900, lo: 0x8f, hi: 0x8f},
	{value: 0xa000, lo: 0x99, hi: 0x99},
	{value: 0x3ef8, lo: 0x9a, hi: 0x9a},
	{value: 0x2f58, lo: 0x9c, hi: 0x9c},
	{value: 0x2de3, lo: 0x9d, hi: 0x9d},
	{value: 0x2d16, lo: 0x9e, hi: 0x9f},
	// Block 0x20, offset 0xc8
	{value: 0x0000, lo: 0x02},
	{value: 0x8122, lo: 0xb8, hi: 0xb9},
	{value: 0x8104, lo: 0xba, hi: 0xba},
	// Block 0x21, offset 0xcb
	{value: 0x0000, lo: 0x01},
	{value: 0x8123, lo: 0x88, hi: 0x8b},
	// Block 0x22, offset 0xcd
	{value: 0x0000, lo: 0x01},
	{value: 0x8124, lo: 0xb8, hi: 0xb9},
	// Block 0x23, offset 0xcf
	{value: 0x0000, lo: 0x01},
	{value: 0x8125, lo: 0x88, hi: 0x8b},
	// Block 0x24, offset 0xd1
	{value: 0x0000, lo: 0x04},
	{value: 0x812d, lo: 0x98, hi: 0x99},
	{value: 0x812d, lo: 0xb5, hi: 0xb5},
	{value: 0x812d, lo: 0xb7, hi: 0xb7},
	{value: 0x812b, lo: 0xb9, hi: 0xb9},
	// Block 0x25, offset 0xd6
	{value: 0x0000, lo: 0x10},
	{value: 0x2644, lo: 0x83, hi: 0x83},
	{value: 0x264b, lo: 0x8d, hi: 0x8d},
	{value: 0x2652, lo: 0x92, hi: 0x92},
	{value: 0x2659, lo: 0x97, hi: 0x97},
	{value: 0x2660, lo: 0x9c, hi: 0x9c},
	{value: 0x263d, lo: 0xa9, hi: 0xa9},
	{value: 0x8126, lo: 0xb1, hi: 0xb1},
	{value: 0x8127, lo: 0xb2, hi: 0xb2},
	{value: 0x4a84, lo: 0xb3, hi: 0xb3},
	{value: 0x8128, lo: 0xb4, hi: 0xb4},
	{value: 0x4a8d, lo: 0xb5, hi: 0xb5},
	{value: 0x45b4, lo: 0xb6, hi: 0xb6},
	{value: 0x8200, lo: 0xb7, hi: 0xb7},
	{value: 0x45bc, lo: 0xb8, hi: 0xb8},
	{value: 0x8200, lo: 0xb9, hi: 0xb9},
	{value: 0x8127, lo: 0xba, hi: 0xbd},
	// Block 0x26, offset 0xe7
	{value: 0x0000, lo: 0x0b},
	{value: 0x8127, lo: 0x80, hi: 0x80},
	{value: 0x4a96, lo: 0x81, hi: 0x81},
	{value: 0x8132, lo: 0x82, hi: 0x83},
	{value: 0x8104, lo: 0x84, hi: 0x84},
	{value: 0x8132, lo: 0x86, hi: 0x87},
	{value: 0x266e, lo: 0x93, hi: 0x93},
	{value: 0x2675, lo: 0x9d, hi: 0x9d},
	{value: 0x267c, lo: 0xa2, hi: 0xa2},
	{value: 0x2683, lo: 0xa7, hi: 0xa7},
	{value: 0x268a, lo: 0xac, hi: 0xac},
	{value: 0x2667, lo: 0xb9, hi: 0xb9},
	// Block 0x27, offset 0xf3
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x86, hi: 0x86},
	// Block 0x28, offset 0xf5
	{value: 0x0000, lo: 0x05},
	{value: 0xa000, lo: 0xa5, hi: 0xa5},
	{value: 0x2d1e, lo: 0xa6, hi: 0xa6},
	{value: 0x9900, lo: 0xae, hi: 0xae},
	{value: 0x8102, lo: 0xb7, hi: 0xb7},
	{value: 0x8104, lo: 0xb9, hi: 0xba},
	// Block 0x29, offset 0xfb
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x8d, hi: 0x8d},
	// Block 0x2a, offset 0xfd
	{value: 0x0000, lo: 0x01},
	{value: 0xa000, lo: 0x80, hi: 0x92},
	// Block 0x2b, offset 0xff
	{value: 0x0000, lo: 0x01},
	{value: 0xb900, lo: 0xa1, hi: 0xb5},
	// Block 0x2c, offset 0x101
	{value: 0x0000, lo: 0x01},
	{value: 0x9900, lo: 0xa8, hi: 0xbf},
	// Block 0x2d, offset 0x103
	{value: 0x0000, lo: 0x01},
	{value: 0x9900, lo: 0x80, hi: 0x82},
	// Block 0x2e, offset 0x105
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x9d, hi: 0x9f},
	// Block 0x2f, offset 0x107
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x94, hi: 0x94},
	{value: 0x8104, lo: 0xb4, hi: 0xb4},
	// Block 0x30, offset 0x10a
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x92, hi: 0x92},
	{value: 0x8132, lo: 0x9d, hi: 0x9d},
	// Block 0x31, offset 0x10d
	{value: 0x0000, lo: 0x01},
	{value: 0x8131, lo: 0xa9, hi: 0xa9},
	// Block 0x32, offset 0x10f
	{value: 0x0004, lo: 0x02},
	{value: 0x812e, lo: 0xb9, hi: 0xba},
	{value: 0x812d, lo: 0xbb, hi: 0xbb},
	// Block 0x33, offset 0x112
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0x97, hi: 0x97},
	{value: 0x812d, lo: 0x98, hi: 0x98},
	// Block 0x34, offset 0x115
	{value: 0x0000, lo: 0x03},
	{value: 0x8104, lo: 0xa0, hi: 0xa0},
	{value: 0x8132, lo: 0xb5, hi: 0xbc},
	{value: 0x812d, lo: 0xbf, hi: 0xbf},
	// Block 0x35, offset 0x119
	{value: 0x0000, lo: 0x04},
	{value: 0x8132, lo: 0xb0, hi: 0xb4},
	{value: 0x812d, lo: 0xb5, hi: 0xba},
	{value: 0x8132, lo: 0xbb, hi: 0xbc},
	{value: 0x812d, lo: 0xbd, hi: 0xbd},
	// Block 0x36, offset 0x11e
	{value: 0x0000, lo: 0x08},
	{value: 0x2d66, lo: 0x80, hi: 0x80},
	{value: 0x2d6e, lo: 0x81, hi: 0x81},
	{value: 0xa000, lo: 0x82, hi: 0x82},
	{value: 0x2d76, lo: 0x83, hi: 0x83},
	{value: 0x8104, lo: 0x84, hi: 0x84},
	{value: 0x8132, lo: 0xab, hi: 0xab},
	{value: 0x812d, lo: 0xac, hi: 0xac},
	{value: 0x8132, lo: 0xad, hi: 0xb3},
	// Block 0x37, offset 0x127
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xaa, hi: 0xab},
	// Block 0x38, offset 0x129
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xa6, hi: 0xa6},
	{value: 0x8104, lo: 0xb2, hi: 0xb3},
	// Block 0x39, offset 0x12c
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0xb7, hi: 0xb7},
	// Block 0x3a, offset 0x12e
	{value: 0x0000, lo: 0x0a},
	{value: 0x8132, lo: 0x90, hi: 0x92},
	{value: 0x8101, lo: 0x94, hi: 0x94},
	{value: 0x812d, lo: 0x95, hi: 0x99},
	{value: 0x8132, lo: 0x9a, hi: 0x9b},
	{value: 0x812d, lo: 0x9c, hi: 0x9f},
	{value: 0x8132, lo: 0xa0, hi: 0xa0},
	{value: 0x8101, lo: 0xa2, hi: 0xa8},
	{value: 0x812d, lo: 0xad, hi: 0xad},
	{value: 0x8132, lo: 0xb4, hi: 0xb4},
	{value: 0x8132, lo: 0xb8, hi: 0xb9},
	// Block 0x3b, offset 0x139
	{value: 0x0004, lo: 0x03},
	{value: 0x0433, lo: 0x80, hi: 0x81},
	{value: 0x8100, lo: 0x97, hi: 0x97},
	{value: 0x8100, lo: 0xbe, hi: 0xbe},
	// Block 0x3c, offset 0x13d
	{value: 0x0000, lo: 0x0d},
	{value: 0x8132, lo: 0x90, hi: 0x91},
	{value: 0x8101, lo: 0x92, hi: 0x93},
	{value: 0x8132, lo: 0x94, hi: 0x97},
	{value: 0x8101, lo: 0x98, hi: 0x9a},
	{value: 0x8132, lo: 0x9b, hi: 0x9c},
	{value: 0x8132, lo: 0xa1, hi: 0xa1},
	{value: 0x8101, lo: 0xa5, hi: 0xa6},
	{value: 0x8132, lo: 0xa7, hi: 0xa7},
	{value: 0x812d, lo: 0xa8, hi: 0xa8},
	{value: 0x8132, lo: 0xa9, hi: 0xa9},
	{value: 0x8101, lo: 0xaa, hi: 0xab},
	{value: 0x812d, lo: 0xac, hi: 0xaf},
	{value: 0x8132, lo: 0xb0, hi: 0xb0},
	// Block 0x3d, offset 0x14b
	{value: 0x427b, lo: 0x02},
	{value: 0x01b8, lo: 0xa6, hi: 0xa6},
	{value: 0x0057, lo: 0xaa, hi: 0xab},
	// Block 0x3e, offset 0x14e
	{value: 0x0007, lo: 0x05},
	{value: 0xa000, lo: 0x90, hi: 0x90},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0xa000, lo: 0x94, hi: 0x94},
	{value: 0x3bb9, lo: 0x9a, hi: 0x9b},
	{value: 0x3bc7, lo: 0xae, hi: 0xae},
	// Block 0x3f, offset 0x154
	{value: 0x000e, lo: 0x05},
	{value: 0x3bce, lo: 0x8d, hi: 0x8e},
	{value: 0x3bd5, lo: 0x8f, hi: 0x8f},
	{value: 0xa000, lo: 0x90, hi: 0x90},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0xa000, lo: 0x94, hi: 0x94},
	// Block 0x40, offset 0x15a
	{value: 0x6408, lo: 0x0a},
	{value: 0xa000, lo: 0x83, hi: 0x83},
	{value: 0x3be3, lo: 0x84, hi: 0x84},
	{value: 0xa000, lo: 0x88, hi: 0x88},
	{value: 0x3bea, lo: 0x89, hi: 0x89},
	{value: 0xa000, lo: 0x8b, hi: 0x8b},
	{value: 0x3bf1, lo: 0x8c, hi: 0x8c},
	{value: 0xa000, lo: 0xa3, hi: 0xa3},
	{value: 0x3bf8, lo: 0xa4, hi: 0xa5},
	{value: 0x3bff, lo: 0xa6, hi: 0xa6},
	{value: 0xa000, lo: 0xbc, hi: 0xbc},
	// Block 0x41, offset 0x165
	{value: 0x0007, lo: 0x03},
	{value: 0x3c68, lo: 0xa0, hi: 0xa1},
	{value: 0x3c92, lo: 0xa2, hi: 0xa3},
	{value: 0x3cbc, lo: 0xaa, hi: 0xad},
	// Block 0x42, offset 0x169
	{value: 0x0004, lo: 0x01},
	{value: 0x048b, lo: 0xa9, hi: 0xaa},
	// Block 0x43, offset 0x16b
	{value: 0x0000, lo: 0x01},
	{value: 0x44dd, lo: 0x9c, hi: 0x9c},
	// Block 0x44, offset 0x16d
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xaf, hi: 0xb1},
	// Block 0x45, offset 0x16f
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x46, offset 0x171
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xa0, hi: 0xbf},
	// Block 0x47, offset 0x173
	{value: 0x0000, lo: 0x05},
	{value: 0x812c, lo: 0xaa, hi: 0xaa},
	{value: 0x8131, lo: 0xab, hi: 0xab},
	{value: 0x8133, lo: 0xac, hi: 0xac},
	{value: 0x812e, lo: 0xad, hi: 0xad},
	{value: 0x812f, lo: 0xae, hi: 0xaf},
	// Block 0x48, offset 0x179
	{value: 0x0000, lo: 0x03},
	{value: 0x4a9f, lo: 0xb3, hi: 0xb3},
	{value: 0x4a9f, lo: 0xb5, hi: 0xb6},
	{value: 0x4a9f, lo: 0xba, hi: 0xbf},
	// Block 0x49, offset 0x17d
	{value: 0x0000, lo: 0x01},
	{value: 0x4a9f, lo: 0x8f, hi: 0xa3},
	// Block 0x4a, offset 0x17f
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0xae, hi: 0xbe},
	// Block 0x4b, offset 0x181
	{value: 0x0000, lo: 0x07},
	{value: 0x8100, lo: 0x84, hi: 0x84},
	{value: 0x8100, lo: 0x87, hi: 0x87},
	{value: 0x8100, lo: 0x90, hi: 0x90},
	{value: 0x8100, lo: 0x9e, hi: 0x9e},
	{value: 0x8100, lo: 0xa1, hi: 0xa1},
	{value: 0x8100, lo: 0xb2, hi: 0xb2},
	{value: 0x8100, lo: 0xbb, hi: 0xbb},
	// Block 0x4c, offset 0x189
	{value: 0x0000, lo: 0x03},
	{value: 0x8100, lo: 0x80, hi: 0x80},
	{value: 0x8100, lo: 0x8b, hi: 0x8b},
	{value: 0x8100, lo: 0x8e, hi: 0x8e},
	// Block 0x4d, offset 0x18d
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0xaf, hi: 0xaf},
	{value: 0x8132, lo: 0xb4, hi: 0xbd},
	// Block 0x4e, offset 0x190
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x9e, hi: 0x9f},
	// Block 0x4f, offset 0x192
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xb0, hi: 0xb1},
	// Block 0x50, offset 0x194
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x86, hi: 0x86},
	// Block 0x51, offset 0x196
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x84, hi: 0x84},
	{value: 0x8132, lo: 0xa0, hi: 0xb1},
	// Block 0x52, offset 0x199
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0xab, hi: 0xad},
	// Block 0x53, offset 0x19b
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x93, hi: 0x93},
	// Block 0x54, offset 0x19d
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0xb3, hi: 0xb3},
	// Block 0x55, offset 0x19f
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x80, hi: 0x80},
	// Block 0x56, offset 0x1a1
	{value: 0x0000, lo: 0x05},
	{value: 0x8132, lo: 0xb0, hi: 0xb0},
	{value: 0x8132, lo: 0xb2, hi: 0xb3},
	{value: 0x812d, lo: 0xb4, hi: 0xb4},
	{value: 0x8132, lo: 0xb7, hi: 0xb8},
	{value: 0x8132, lo: 0xbe, hi: 0xbf},
	// Block 0x57, offset 0x1a7
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0x81, hi: 0x81},
	{value: 0x8104, lo: 0xb6, hi: 0xb6},
	// Block 0x58, offset 0x1aa
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xad, hi: 0xad},
	// Block 0x59, offset 0x1ac
	{value: 0x0000, lo: 0x06},
	{value: 0xe500, lo: 0x80, hi: 0x80},
	{value: 0xc600, lo: 0x81, hi: 0x9b},
	{value: 0xe500, lo: 0x9c, hi: 0x9c},
	{value: 0xc600, lo: 0x9d, hi: 0xb7},
	{value: 0xe500, lo: 0xb8, hi: 0xb8},
	{value: 0xc600, lo: 0xb9, hi: 0xbf},
	// Block 0x5a, offset 0x1b3
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x93},
	{value: 0xe500, lo: 0x94, hi: 0x94},
	{value: 0xc600, lo: 0x95, hi: 0xaf},
	{value: 0xe500, lo: 0xb0, hi: 0xb0},
	{value: 0xc600, lo: 0xb1, hi: 0xbf},
	// Block 0x5b, offset 0x1b9
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x8b},
	{value: 0xe500, lo: 0x8c, hi: 0x8c},
	{value: 0xc600, lo: 0x8d, hi: 0xa7},
	{value: 0xe500, lo: 0xa8, hi: 0xa8},
	{value: 0xc600, lo: 0xa9, hi: 0xbf},
	// Block 0x5c, offset 0x1bf
	{value: 0x0000, lo: 0x07},
	{value: 0xc600, lo: 0x80, hi: 0x83},
	{value: 0xe500, lo: 0x84, hi: 0x84},
	{value: 0xc600, lo: 0x85, hi: 0x9f},
	{value: 0xe500, lo: 0xa0, hi: 0xa0},
	{value: 0xc600, lo: 0xa1, hi: 0xbb},
	{value: 0xe500, lo: 0xbc, hi: 0xbc},
	{value: 0xc600, lo: 0xbd, hi: 0xbf},
	// Block 0x5d, offset 0x1c7
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x97},
	{value: 0xe500, lo: 0x98, hi: 0x98},
	{value: 0xc600, lo: 0x99, hi: 0xb3},
	{value: 0xe500, lo: 0xb4, hi: 0xb4},
	{value: 0xc600, lo: 0xb5, hi: 0xbf},
	// Block 0x5e, offset 0x1cd
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x8f},
	{value: 0xe500, lo: 0x90, hi: 0x90},
	{value: 0xc600, lo: 0x91, hi: 0xab},
	{value: 0xe500, lo: 0xac, hi: 0xac},
	{value: 0xc600, lo: 0xad, hi: 0xbf},
	// Block 0x5f, offset 0x1d3
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x87},
	{value: 0xe500, lo: 0x88, hi: 0x88},
	{value: 0xc600, lo: 0x89, hi: 0xa3},
	{value: 0xe500, lo: 0xa4, hi: 0xa4},
	{value: 0xc600, lo: 0xa5, hi: 0xbf},
	// Block 0x60, offset 0x1d9
	{value: 0x0000, lo: 0x03},
	{value: 0xc600, lo: 0x80, hi: 0x87},
	{value: 0xe500, lo: 0x88, hi: 0x88},
	{value: 0xc600, lo: 0x89, hi: 0xa3},
	// Block 0x61, offset 0x1dd
	{value: 0x0006, lo: 0x0d},
	{value: 0x4390, lo: 0x9d, hi: 0x9d},
	{value: 0x8115, lo: 0x9e, hi: 0x9e},
	{value: 0x4402, lo: 0x9f, hi: 0x9f},
	{value: 0x43f0, lo: 0xaa, hi: 0xab},
	{value: 0x44f4, lo: 0xac, hi: 0xac},
	{value: 0x44fc, lo: 0xad, hi: 0xad},
	{value: 0x4348, lo: 0xae, hi: 0xb1},
	{value: 0x4366, lo: 0xb2, hi: 0xb4},
	{value: 0x437e, lo: 0xb5, hi: 0xb6},
	{value: 0x438a, lo: 0xb8, hi: 0xb8},
	{value: 0x4396, lo: 0xb9, hi: 0xbb},
	{value: 0x43ae, lo: 0xbc, hi: 0xbc},
	{value: 0x43b4, lo: 0xbe, hi: 0xbe},
	// Block 0x62, offset 0x1eb
	{value: 0x0006, lo: 0x08},
	{value: 0x43ba, lo: 0x80, hi: 0x81},
	{value: 0x43c6, lo: 0x83, hi: 0x84},
	{value: 0x43d8, lo: 0x86, hi: 0x89},
	{value: 0x43fc, lo: 0x8a, hi: 0x8a},
	{value: 0x4378, lo: 0x8b, hi: 0x8b},
	{value: 0x4360, lo: 0x8c, hi: 0x8c},
	{value: 0x43a8, lo: 0x8d, hi: 0x8d},
	{value: 0x43d2, lo: 0x8e, hi: 0x8e},
	// Block 0x63, offset 0x1f4
	{value: 0x0000, lo: 0x02},
	{value: 0x8100, lo: 0xa4, hi: 0xa5},
	{value: 0x8100, lo: 0xb0, hi: 0xb1},
	// Block 0x64, offset 0x1f7
	{value: 0x0000, lo: 0x02},
	{value: 0x8100, lo: 0x9b, hi: 0x9d},
	{value: 0x8200, lo: 0x9e, hi: 0xa3},
	// Block 0x65, offset 0x1fa
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0x90, hi: 0x90},
	// Block 0x66, offset 0x1fc
	{value: 0x0000, lo: 0x02},
	{value: 0x8100, lo: 0x99, hi: 0x99},
	{value: 0x8200, lo: 0xb2, hi: 0xb4},
	// Block 0x67, offset 0x1ff
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0xbc, hi: 0xbd},
	// Block 0x68, offset 0x201
	{value: 0x0000, lo: 0x03},
	{value: 0x8132, lo: 0xa0, hi: 0xa6},
	{value: 0x812d, lo: 0xa7, hi: 0xad},
	{value: 0x8132, lo: 0xae, hi: 0xaf},
	// Block 0x69, offset 0x205
	{value: 0x0000, lo: 0x04},
	{value: 0x8100, lo: 0x89, hi: 0x8c},
	{value: 0x8100, lo: 0xb0, hi: 0xb2},
	{value: 0x8100, lo: 0xb4, hi: 0xb4},
	{value: 0x8100, lo: 0xb6, hi: 0xbf},
	// Block 0x6a, offset 0x20a
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0x81, hi: 0x8c},
	// Block 0x6b, offset 0x20c
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0xb5, hi: 0xba},
	// Block 0x6c, offset 0x20e
	{value: 0x0000, lo: 0x04},
	{value: 0x4a9f, lo: 0x9e, hi: 0x9f},
	{value: 0x4a9f, lo: 0xa3, hi: 0xa3},
	{value: 0x4a9f, lo: 0xa5, hi: 0xa6},
	{value: 0x4a9f, lo: 0xaa, hi: 0xaf},
	// Block 0x6d, offset 0x213
	{value: 0x0000, lo: 0x05},
	{value: 0x4a9f, lo: 0x82, hi: 0x87},
	{value: 0x4a9f, lo: 0x8a, hi: 0x8f},
	{value: 0x4a9f, lo: 0x92, hi: 0x97},
	{value: 0x4a9f, lo: 0x9a, hi: 0x9c},
	{value: 0x8100, lo: 0xa3, hi: 0xa3},
	// Block 0x6e, offset 0x219
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0xbd, hi: 0xbd},
	// Block 0x6f, offset 0x21b
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0xa0, hi: 0xa0},
	// Block 0x70, offset 0x21d
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xb6, hi: 0xba},
	// Block 0x71, offset 0x21f
	{value: 0x002c, lo: 0x05},
	{value: 0x812d, lo: 0x8d, hi: 0x8d},
	{value: 0x8132, lo: 0x8f, hi: 0x8f},
	{value: 0x8132, lo: 0xb8, hi: 0xb8},
	{value: 0x8101, lo: 0xb9, hi: 0xba},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x72, offset 0x225
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0xa5, hi: 0xa5},
	{value: 0x812d, lo: 0xa6, hi: 0xa6},
	// Block 0x73, offset 0x228
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xa4, hi: 0xa7},
	// Block 0x74, offset 0x22a
	{value: 0x0000, lo: 0x05},
	{value: 0x812d, lo: 0x86, hi: 0x87},
	{value: 0x8132, lo: 0x88, hi: 0x8a},
	{value: 0x812d, lo: 0x8b, hi: 0x8b},
	{value: 0x8132, lo: 0x8c, hi: 0x8c},
	{value: 0x812d, lo: 0x8d, hi: 0x90},
	// Block 0x75, offset 0x230
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x86, hi: 0x86},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x76, offset 0x233
	{value: 0x17fe, lo: 0x07},
	{value: 0xa000, lo: 0x99, hi: 0x99},
	{value: 0x4238, lo: 0x9a, hi: 0x9a},
	{value: 0xa000, lo: 0x9b, hi: 0x9b},
	{value: 0x4242, lo: 0x9c, hi: 0x9c},
	{value: 0xa000, lo: 0xa5, hi: 0xa5},
	{value: 0x424c, lo: 0xab, hi: 0xab},
	{value: 0x8104, lo: 0xb9, hi: 0xba},
	// Block 0x77, offset 0x23b
	{value: 0x0000, lo: 0x06},
	{value: 0x8132, lo: 0x80, hi: 0x82},
	{value: 0x9900, lo: 0xa7, hi: 0xa7},
	{value: 0x2d7e, lo: 0xae, hi: 0xae},
	{value: 0x2d88, lo: 0xaf, hi: 0xaf},
	{value: 0xa000, lo: 0xb1, hi: 0xb2},
	{value: 0x8104, lo: 0xb3, hi: 0xb4},
	// Block 0x78, offset 0x242
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x80, hi: 0x80},
	{value: 0x8102, lo: 0x8a, hi: 0x8a},
	// Block 0x79, offset 0x245
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0xb5, hi: 0xb5},
	{value: 0x8102, lo: 0xb6, hi: 0xb6},
	// Block 0x7a, offset 0x248
	{value: 0x0002, lo: 0x01},
	{value: 0x8102, lo: 0xa9, hi: 0xaa},
	// Block 0x7b, offset 0x24a
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xbb, hi: 0xbc},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x7c, offset 0x24d
	{value: 0x0000, lo: 0x07},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2d92, lo: 0x8b, hi: 0x8b},
	{value: 0x2d9c, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	{value: 0x8132, lo: 0xa6, hi: 0xac},
	{value: 0x8132, lo: 0xb0, hi: 0xb4},
	// Block 0x7d, offset 0x255
	{value: 0x0000, lo: 0x03},
	{value: 0x8104, lo: 0x82, hi: 0x82},
	{value: 0x8102, lo: 0x86, hi: 0x86},
	{value: 0x8132, lo: 0x9e, hi: 0x9e},
	// Block 0x7e, offset 0x259
	{value: 0x6b5a, lo: 0x06},
	{value: 0x9900, lo: 0xb0, hi: 0xb0},
	{value: 0xa000, lo: 0xb9, hi: 0xb9},
	{value: 0x9900, lo: 0xba, hi: 0xba},
	{value: 0x2db0, lo: 0xbb, hi: 0xbb},
	{value: 0x2da6, lo: 0xbc, hi: 0xbd},
	{value: 0x2dba, lo: 0xbe, hi: 0xbe},
	// Block 0x7f, offset 0x260
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x82, hi: 0x82},
	{value: 0x8102, lo: 0x83, hi: 0x83},
	// Block 0x80, offset 0x263
	{value: 0x0000, lo: 0x05},
	{value: 0x9900, lo: 0xaf, hi: 0xaf},
	{value: 0xa000, lo: 0xb8, hi: 0xb9},
	{value: 0x2dc4, lo: 0xba, hi: 0xba},
	{value: 0x2dce, lo: 0xbb, hi: 0xbb},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x81, offset 0x269
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0x80, hi: 0x80},
	// Block 0x82, offset 0x26b
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0xb6, hi: 0xb6},
	{value: 0x8102, lo: 0xb7, hi: 0xb7},
	// Block 0x83, offset 0x26e
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xab, hi: 0xab},
	// Block 0x84, offset 0x270
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0xb9, hi: 0xb9},
	{value: 0x8102, lo: 0xba, hi: 0xba},
	// Block 0x85, offset 0x273
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xb4, hi: 0xb4},
	// Block 0x86, offset 0x275
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x87, hi: 0x87},
	// Block 0x87, offset 0x277
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x99, hi: 0x99},
	// Block 0x88, offset 0x279
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0x82, hi: 0x82},
	{value: 0x8104, lo: 0x84, hi: 0x85},
	// Block 0x89, offset 0x27c
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x97, hi: 0x97},
	// Block 0x8a, offset 0x27e
	{value: 0x0000, lo: 0x01},
	{value: 0x8101, lo: 0xb0, hi: 0xb4},
	// Block 0x8b, offset 0x280
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xb0, hi: 0xb6},
	// Block 0x8c, offset 0x282
	{value: 0x0000, lo: 0x01},
	{value: 0x8101, lo: 0x9e, hi: 0x9e},
	// Block 0x8d, offset 0x284
	{value: 0x0000, lo: 0x0c},
	{value: 0x45cc, lo: 0x9e, hi: 0x9e},
	{value: 0x45d6, lo: 0x9f, hi: 0x9f},
	{value: 0x460a, lo: 0xa0, hi: 0xa0},
	{value: 0x4618, lo: 0xa1, hi: 0xa1},
	{value: 0x4626, lo: 0xa2, hi: 0xa2},
	{value: 0x4634, lo: 0xa3, hi: 0xa3},
	{value: 0x4642, lo: 0xa4, hi: 0xa4},
	{value: 0x812b, lo: 0xa5, hi: 0xa6},
	{value: 0x8101, lo: 0xa7, hi: 0xa9},
	{value: 0x8130, lo: 0xad, hi: 0xad},
	{value: 0x812b, lo: 0xae, hi: 0xb2},
	{value: 0x812d, lo: 0xbb, hi: 0xbf},
	// Block 0x8e, offset 0x291
	{value: 0x0000, lo: 0x09},
	{value: 0x812d, lo: 0x80, hi: 0x82},
	{value: 0x8132, lo: 0x85, hi: 0x89},
	{value: 0x812d, lo: 0x8a, hi: 0x8b},
	{value: 0x8132, lo: 0xaa, hi: 0xad},
	{value: 0x45e0, lo: 0xbb, hi: 0xbb},
	{value: 0x45ea, lo: 0xbc, hi: 0xbc},
	{value: 0x4650, lo: 0xbd, hi: 0xbd},
	{value: 0x466c, lo: 0xbe, hi: 0xbe},
	{value: 0x465e, lo: 0xbf, hi: 0xbf},
	// Block 0x8f, offset 0x29b
	{value: 0x0000, lo: 0x01},
	{value: 0x467a, lo: 0x80, hi: 0x80},
	// Block 0x90, offset 0x29d
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x82, hi: 0x84},
	// Block 0x91, offset 0x29f
	{value: 0x0000, lo: 0x05},
	{value: 0x8132, lo: 0x80, hi: 0x86},
	{value: 0x8132, lo: 0x88, hi: 0x98},
	{value: 0x8132, lo: 0x9b, hi: 0xa1},
	{value: 0x8132, lo: 0xa3, hi: 0xa4},
	{value: 0x8132, lo: 0xa6, hi: 0xaa},
	// Block 0x92, offset 0x2a5
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x90, hi: 0x96},
	// Block 0x93, offset 0x2a7
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0x84, hi: 0x89},
	{value: 0x8102, lo: 0x8a, hi: 0x8a},
	// Block 0x94, offset 0x2aa
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0x93, hi: 0x93},
}

// lookup returns the trie value for the first UTF-8 encoding in s and
// the width in bytes of this encoding. The size will be 0 if s does not
// hold enough bytes to complete the encoding. len(s) must be greater than 0.
func (t *nfkcTrie) lookup(s []byte) (v uint16, sz int) {
	c0 := s[0]
	switch {
	case c0 < 0x80: // is ASCII
		return nfkcValues[c0], 1
	case c0 < 0xC2:
		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
	case c0 < 0xE0: // 2-byte UTF-8
		if len(s) < 2 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c1), 2
	case c0 < 0xF0: // 3-byte UTF-8
		if len(s) < 3 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfkcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c2), 3
	case c0 < 0xF8: // 4-byte UTF-8
		if len(s) < 4 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfkcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		o = uint32(i)<<6 + uint32(c2)
		i = nfkcIndex[o]
		c3 := s[3]
		if c3 < 0x80 || 0xC0 <= c3 {
			return 0, 3 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c3), 4
	}
	// Illegal rune
	return 0, 1
}

// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.
// s must start with a full and valid UTF-8 encoded rune.
func (t *nfkcTrie) lookupUnsafe(s []byte) uint16 {
	c0 := s[0]
	if c0 < 0x80 { // is ASCII
		return nfkcValues[c0]
	}
	i := nfkcIndex[c0]
	if c0 < 0xE0 { // 2-byte UTF-8
		return t.lookupValue(uint32(i), s[1])
	}
	i = nfkcIndex[uint32(i)<<6+uint32(s[1])]
	if c0 < 0xF0 { // 3-byte UTF-8
		return t.lookupValue(uint32(i), s[2])
	}
	i = nfkcIndex[uint32(i)<<6+uint32(s[2])]
	if c0 < 0xF8 { // 4-byte UTF-8
		return t.lookupValue(uint32(i), s[3])
	}
	return 0
}

// lookupString returns the trie value for the first UTF-8 encoding in s and
// the width in bytes of this encoding. The size will be 0 if s does not
// hold enough bytes to complete the encoding. len(s) must be greater than 0.
func (t *nfkcTrie) lookupString(s string) (v uint16, sz int) {
	c0 := s[0]
	switch {
	case c0 < 0x80: // is ASCII
		return nfkcValues[c0], 1
	case c0 < 0xC2:
		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
	case c0 < 0xE0: // 2-byte UTF-8
		if len(s) < 2 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c1), 2
	case c0 < 0xF0: // 3-byte UTF-8
		if len(s) < 3 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfkcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c2), 3
	case c0 < 0xF8: // 4-byte UTF-8
		if len(s) < 4 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfkcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		o = uint32(i)<<6 + uint32(c2)
		i = nfkcIndex[o]
		c3 := s[3]
		if c3 < 0x80 || 0xC0 <= c3 {
			return 0, 3 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c3), 4
	}
	// Illegal rune
	return 0, 1
}

// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.
// s must start with a full and valid UTF-8 encoded rune.
func (t *nfkcTrie) lookupStringUnsafe(s string) uint16 {
	c0 := s[0]
	if c0 < 0x80 { // is ASCII
		return nfkcValues[c0]
	}
	i := nfkcIndex[c0]
	if c0 < 0xE0 { // 2-byte UTF-8
		return t.lookupValue(uint32(i), s[1])
	}
	i = nfkcIndex[uint32(i)<<6+uint32(s[1])]
	if c0 < 0xF0 { // 3-byte UTF-8
		return t.lookupValue(uint32(i), s[2])
	}
	i = nfkcIndex[uint32(i)<<6+uint32(s[2])]
	if c0 < 0xF8 { // 4-byte UTF-8
		return t.lookupValue(uint32(i), s[3])
	}
	return 0
}

// nfkcTrie. Total size: 17248 bytes (16.84 KiB). Checksum: 4fb368372b6b1b27.
type nfkcTrie struct{}

func newNfkcTrie(i int) *nfkcTrie {
	return &nfkcTrie{}
}

// lookupValue determines the type of block n and looks up the value for b.
func (t *nfkcTrie) lookupValue(n uint32, b byte) uint16 {
	switch {
	case n < 92:
		return uint16(nfkcValues[n<<6+uint32(b)])
	default:
		n -= 92
		return uint16(nfkcSparse.lookup(n, b))
	}
}

// nfkcValues: 94 blocks, 6016 entries, 12032 bytes
// The third block is the zero block.
var nfkcValues = [6016]uint16{
	// Block 0x0, offset 0x0
	0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000,
	// Block 0x1, offset 0x40
	0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000,
	0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000,
	0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000,
	0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000,
	0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000,
	0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000,
	0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000,
	0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000,
	0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000,
	0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000,
	// Block 0x2, offset 0x80
	// Block 0x3, offset 0xc0
	0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c,
	0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb,
	0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104,
	0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd,
	0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235,
	0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285,
	0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3,
	0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750,
	0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f,
	0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3,
	0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569,
	// Block 0x4, offset 0x100
	0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8,
	0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6,
	0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5,
	0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302,
	0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339,
	0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352,
	0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e,
	0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6,
	0x130: 0x308c, 0x132: 0x195d, 0x133: 0x19e7, 0x134: 0x30b4, 0x135: 0x33c0,
	0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc,
	0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8, 0x13f: 0x1bac,
	// Block 0x5, offset 0x140
	0x140: 0x1c34, 0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118,
	0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f, 0x149: 0x1c5c,
	0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c,
	0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483,
	0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d,
	0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba,
	0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796,
	0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2,
	0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528,
	0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267,
	0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0x00a7,
	// Block 0x6, offset 0x180
	0x184: 0x2dee, 0x185: 0x2df4,
	0x186: 0x2dfa, 0x187: 0x1972, 0x188: 0x1975, 0x189: 0x1a08, 0x18a: 0x1987, 0x18b: 0x198a,
	0x18c: 0x1a3e, 0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140,
	0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8,
	0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50,
	0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5,
	0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf,
	0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd,
	0x1b0: 0x33c5, 0x1b1: 0x1942, 0x1b2: 0x1945, 0x1b3: 0x19cf, 0x1b4: 0x3028, 0x1b5: 0x3334,
	0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46,
	0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb,
	// Block 0x7, offset 0x1c0
	0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316,
	0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac,
	0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479,
	0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6,
	0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5,
	0x1de: 0x305a, 0x1df: 0x3366,
	0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b,
	0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769,
	0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f,
	// Block 0x8, offset 0x200
	0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132,
	0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932,
	0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932,
	0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d,
	0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d,
	0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d,
	0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d,
	0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d,
	0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101,
	0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d,
	0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132,
	// Block 0x9, offset 0x240
	0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936,
	0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132,
	0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132,
	0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132,
	0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135,
	0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132,
	0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132,
	0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132,
	0x274: 0x0170,
	0x27a: 0x42a5,
	0x27e: 0x0037,
	// Block 0xa, offset 0x280
	0x284: 0x425a, 0x285: 0x447b,
	0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625,
	0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000,
	0x295: 0xa000, 0x297: 0xa000,
	0x299: 0xa000,
	0x29f: 0xa000, 0x2a1: 0xa000,
	0x2a5: 0xa000, 0x2a9: 0xa000,
	0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9,
	0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000,
	0x2b7: 0xa000, 0x2b9: 0xa000,
	0x2bf: 0xa000,
	// Block 0xb, offset 0x2c0
	0x2c1: 0xa000, 0x2c5: 0xa000,
	0x2c9: 0xa000, 0x2ca: 0x4840, 0x2cb: 0x485e,
	0x2cc: 0x36c7, 0x2cd: 0x36df, 0x2ce: 0x4876, 0x2d0: 0x01be, 0x2d1: 0x01d0,
	0x2d2: 0x01ac, 0x2d3: 0x430c, 0x2d4: 0x4312, 0x2d5: 0x01fa, 0x2d6: 0x01e8,
	0x2f0: 0x01d6, 0x2f1: 0x01eb, 0x2f2: 0x01ee, 0x2f4: 0x0188, 0x2f5: 0x01c7,
	0x2f9: 0x01a6,
	// Block 0xc, offset 0x300
	0x300: 0x3721, 0x301: 0x372d, 0x303: 0x371b,
	0x306: 0xa000, 0x307: 0x3709,
	0x30c: 0x375d, 0x30d: 0x3745, 0x30e: 0x376f, 0x310: 0xa000,
	0x313: 0xa000, 0x315: 0xa000, 0x316: 0xa000, 0x317: 0xa000,
	0x318: 0xa000, 0x319: 0x3751, 0x31a: 0xa000,
	0x31e: 0xa000, 0x323: 0xa000,
	0x327: 0xa000,
	0x32b: 0xa000, 0x32d: 0xa000,
	0x330: 0xa000, 0x333: 0xa000, 0x335: 0xa000,
	0x336: 0xa000, 0x337: 0xa000, 0x338: 0xa000, 0x339: 0x37d5, 0x33a: 0xa000,
	0x33e: 0xa000,
	// Block 0xd, offset 0x340
	0x341: 0x3733, 0x342: 0x37b7,
	0x350: 0x370f, 0x351: 0x3793,
	0x352: 0x3715, 0x353: 0x3799, 0x356: 0x3727, 0x357: 0x37ab,
	0x358: 0xa000, 0x359: 0xa000, 0x35a: 0x3829, 0x35b: 0x382f, 0x35c: 0x3739, 0x35d: 0x37bd,
	0x35e: 0x373f, 0x35f: 0x37c3, 0x362: 0x374b, 0x363: 0x37cf,
	0x364: 0x3757, 0x365: 0x37db, 0x366: 0x3763, 0x367: 0x37e7, 0x368: 0xa000, 0x369: 0xa000,
	0x36a: 0x3835, 0x36b: 0x383b, 0x36c: 0x378d, 0x36d: 0x3811, 0x36e: 0x3769, 0x36f: 0x37ed,
	0x370: 0x3775, 0x371: 0x37f9, 0x372: 0x377b, 0x373: 0x37ff, 0x374: 0x3781, 0x375: 0x3805,
	0x378: 0x3787, 0x379: 0x380b,
	// Block 0xe, offset 0x380
	0x387: 0x1d61,
	0x391: 0x812d,
	0x392: 0x8132, 0x393: 0x8132, 0x394: 0x8132, 0x395: 0x8132, 0x396: 0x812d, 0x397: 0x8132,
	0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x812e, 0x39b: 0x812d, 0x39c: 0x8132, 0x39d: 0x8132,
	0x39e: 0x8132, 0x39f: 0x8132, 0x3a0: 0x8132, 0x3a1: 0x8132, 0x3a2: 0x812d, 0x3a3: 0x812d,
	0x3a4: 0x812d, 0x3a5: 0x812d, 0x3a6: 0x812d, 0x3a7: 0x812d, 0x3a8: 0x8132, 0x3a9: 0x8132,
	0x3aa: 0x812d, 0x3ab: 0x8132, 0x3ac: 0x8132, 0x3ad: 0x812e, 0x3ae: 0x8131, 0x3af: 0x8132,
	0x3b0: 0x8105, 0x3b1: 0x8106, 0x3b2: 0x8107, 0x3b3: 0x8108, 0x3b4: 0x8109, 0x3b5: 0x810a,
	0x3b6: 0x810b, 0x3b7: 0x810c, 0x3b8: 0x810d, 0x3b9: 0x810e, 0x3ba: 0x810e, 0x3bb: 0x810f,
	0x3bc: 0x8110, 0x3bd: 0x8111, 0x3bf: 0x8112,
	// Block 0xf, offset 0x3c0
	0x3c8: 0xa000, 0x3ca: 0xa000, 0x3cb: 0x8116,
	0x3cc: 0x8117, 0x3cd: 0x8118, 0x3ce: 0x8119, 0x3cf: 0x811a, 0x3d0: 0x811b, 0x3d1: 0x811c,
	0x3d2: 0x811d, 0x3d3: 0x9932, 0x3d4: 0x9932, 0x3d5: 0x992d, 0x3d6: 0x812d, 0x3d7: 0x8132,
	0x3d8: 0x8132, 0x3d9: 0x8132, 0x3da: 0x8132, 0x3db: 0x8132, 0x3dc: 0x812d, 0x3dd: 0x8132,
	0x3de: 0x8132, 0x3df: 0x812d,
	0x3f0: 0x811e, 0x3f5: 0x1d84,
	0x3f6: 0x2013, 0x3f7: 0x204f, 0x3f8: 0x204a,
	// Block 0x10, offset 0x400
	0x413: 0x812d, 0x414: 0x8132, 0x415: 0x8132, 0x416: 0x8132, 0x417: 0x8132,
	0x418: 0x8132, 0x419: 0x8132, 0x41a: 0x8132, 0x41b: 0x8132, 0x41c: 0x8132, 0x41d: 0x8132,
	0x41e: 0x8132, 0x41f: 0x8132, 0x420: 0x8132, 0x421: 0x8132, 0x423: 0x812d,
	0x424: 0x8132, 0x425: 0x8132, 0x426: 0x812d, 0x427: 0x8132, 0x428: 0x8132, 0x429: 0x812d,
	0x42a: 0x8132, 0x42b: 0x8132, 0x42c: 0x8132, 0x42d: 0x812d, 0x42e: 0x812d, 0x42f: 0x812d,
	0x430: 0x8116, 0x431: 0x8117, 0x432: 0x8118, 0x433: 0x8132, 0x434: 0x8132, 0x435: 0x8132,
	0x436: 0x812d, 0x437: 0x8132, 0x438: 0x8132, 0x439: 0x812d, 0x43a: 0x812d, 0x43b: 0x8132,
	0x43c: 0x8132, 0x43d: 0x8132, 0x43e: 0x8132, 0x43f: 0x8132,
	// Block 0x11, offset 0x440
	0x445: 0xa000,
	0x446: 0x2d26, 0x447: 0xa000, 0x448: 0x2d2e, 0x449: 0xa000, 0x44a: 0x2d36, 0x44b: 0xa000,
	0x44c: 0x2d3e, 0x44d: 0xa000, 0x44e: 0x2d46, 0x451: 0xa000,
	0x452: 0x2d4e,
	0x474: 0x8102, 0x475: 0x9900,
	0x47a: 0xa000, 0x47b: 0x2d56,
	0x47c: 0xa000, 0x47d: 0x2d5e, 0x47e: 0xa000, 0x47f: 0xa000,
	// Block 0x12, offset 0x480
	0x480: 0x0069, 0x481: 0x006b, 0x482: 0x006f, 0x483: 0x0083, 0x484: 0x00f5, 0x485: 0x00f8,
	0x486: 0x0413, 0x487: 0x0085, 0x488: 0x0089, 0x489: 0x008b, 0x48a: 0x0104, 0x48b: 0x0107,
	0x48c: 0x010a, 0x48d: 0x008f, 0x48f: 0x0097, 0x490: 0x009b, 0x491: 0x00e0,
	0x492: 0x009f, 0x493: 0x00fe, 0x494: 0x0417, 0x495: 0x041b, 0x496: 0x00a1, 0x497: 0x00a9,
	0x498: 0x00ab, 0x499: 0x0423, 0x49a: 0x012b, 0x49b: 0x00ad, 0x49c: 0x0427, 0x49d: 0x01be,
	0x49e: 0x01c1, 0x49f: 0x01c4, 0x4a0: 0x01fa, 0x4a1: 0x01fd, 0x4a2: 0x0093, 0x4a3: 0x00a5,
	0x4a4: 0x00ab, 0x4a5: 0x00ad, 0x4a6: 0x01be, 0x4a7: 0x01c1, 0x4a8: 0x01eb, 0x4a9: 0x01fa,
	0x4aa: 0x01fd,
	0x4b8: 0x020c,
	// Block 0x13, offset 0x4c0
	0x4db: 0x00fb, 0x4dc: 0x0087, 0x4dd: 0x0101,
	0x4de: 0x00d4, 0x4df: 0x010a, 0x4e0: 0x008d, 0x4e1: 0x010d, 0x4e2: 0x0110, 0x4e3: 0x0116,
	0x4e4: 0x011c, 0x4e5: 0x011f, 0x4e6: 0x0122, 0x4e7: 0x042b, 0x4e8: 0x016a, 0x4e9: 0x0128,
	0x4ea: 0x042f, 0x4eb: 0x016d, 0x4ec: 0x0131, 0x4ed: 0x012e, 0x4ee: 0x0134, 0x4ef: 0x0137,
	0x4f0: 0x013a, 0x4f1: 0x013d, 0x4f2: 0x0140, 0x4f3: 0x014c, 0x4f4: 0x014f, 0x4f5: 0x00ec,
	0x4f6: 0x0152, 0x4f7: 0x0155, 0x4f8: 0x041f, 0x4f9: 0x0158, 0x4fa: 0x015b, 0x4fb: 0x00b5,
	0x4fc: 0x015e, 0x4fd: 0x0161, 0x4fe: 0x0164, 0x4ff: 0x01d0,
	// Block 0x14, offset 0x500
	0x500: 0x8132, 0x501: 0x8132, 0x502: 0x812d, 0x503: 0x8132, 0x504: 0x8132, 0x505: 0x8132,
	0x506: 0x8132, 0x507: 0x8132, 0x508: 0x8132, 0x509: 0x8132, 0x50a: 0x812d, 0x50b: 0x8132,
	0x50c: 0x8132, 0x50d: 0x8135, 0x50e: 0x812a, 0x50f: 0x812d, 0x510: 0x8129, 0x511: 0x8132,
	0x512: 0x8132, 0x513: 0x8132, 0x514: 0x8132, 0x515: 0x8132, 0x516: 0x8132, 0x517: 0x8132,
	0x518: 0x8132, 0x519: 0x8132, 0x51a: 0x8132, 0x51b: 0x8132, 0x51c: 0x8132, 0x51d: 0x8132,
	0x51e: 0x8132, 0x51f: 0x8132, 0x520: 0x8132, 0x521: 0x8132, 0x522: 0x8132, 0x523: 0x8132,
	0x524: 0x8132, 0x525: 0x8132, 0x526: 0x8132, 0x527: 0x8132, 0x528: 0x8132, 0x529: 0x8132,
	0x52a: 0x8132, 0x52b: 0x8132, 0x52c: 0x8132, 0x52d: 0x8132, 0x52e: 0x8132, 0x52f: 0x8132,
	0x530: 0x8132, 0x531: 0x8132, 0x532: 0x8132, 0x533: 0x8132, 0x534: 0x8132, 0x535: 0x8132,
	0x536: 0x8133, 0x537: 0x8131, 0x538: 0x8131, 0x539: 0x812d, 0x53b: 0x8132,
	0x53c: 0x8134, 0x53d: 0x812d, 0x53e: 0x8132, 0x53f: 0x812d,
	// Block 0x15, offset 0x540
	0x540: 0x2f97, 0x541: 0x32a3, 0x542: 0x2fa1, 0x543: 0x32ad, 0x544: 0x2fa6, 0x545: 0x32b2,
	0x546: 0x2fab, 0x547: 0x32b7, 0x548: 0x38cc, 0x549: 0x3a5b, 0x54a: 0x2fc4, 0x54b: 0x32d0,
	0x54c: 0x2fce, 0x54d: 0x32da, 0x54e: 0x2fdd, 0x54f: 0x32e9, 0x550: 0x2fd3, 0x551: 0x32df,
	0x552: 0x2fd8, 0x553: 0x32e4, 0x554: 0x38ef, 0x555: 0x3a7e, 0x556: 0x38f6, 0x557: 0x3a85,
	0x558: 0x3019, 0x559: 0x3325, 0x55a: 0x301e, 0x55b: 0x332a, 0x55c: 0x3904, 0x55d: 0x3a93,
	0x55e: 0x3023, 0x55f: 0x332f, 0x560: 0x3032, 0x561: 0x333e, 0x562: 0x3050, 0x563: 0x335c,
	0x564: 0x305f, 0x565: 0x336b, 0x566: 0x3055, 0x567: 0x3361, 0x568: 0x3064, 0x569: 0x3370,
	0x56a: 0x3069, 0x56b: 0x3375, 0x56c: 0x30af, 0x56d: 0x33bb, 0x56e: 0x390b, 0x56f: 0x3a9a,
	0x570: 0x30b9, 0x571: 0x33ca, 0x572: 0x30c3, 0x573: 0x33d4, 0x574: 0x30cd, 0x575: 0x33de,
	0x576: 0x46c4, 0x577: 0x4755, 0x578: 0x3912, 0x579: 0x3aa1, 0x57a: 0x30e6, 0x57b: 0x33f7,
	0x57c: 0x30e1, 0x57d: 0x33f2, 0x57e: 0x30eb, 0x57f: 0x33fc,
	// Block 0x16, offset 0x580
	0x580: 0x30f0, 0x581: 0x3401, 0x582: 0x30f5, 0x583: 0x3406, 0x584: 0x3109, 0x585: 0x341a,
	0x586: 0x3113, 0x587: 0x3424, 0x588: 0x3122, 0x589: 0x3433, 0x58a: 0x311d, 0x58b: 0x342e,
	0x58c: 0x3935, 0x58d: 0x3ac4, 0x58e: 0x3943, 0x58f: 0x3ad2, 0x590: 0x394a, 0x591: 0x3ad9,
	0x592: 0x3951, 0x593: 0x3ae0, 0x594: 0x314f, 0x595: 0x3460, 0x596: 0x3154, 0x597: 0x3465,
	0x598: 0x315e, 0x599: 0x346f, 0x59a: 0x46f1, 0x59b: 0x4782, 0x59c: 0x3997, 0x59d: 0x3b26,
	0x59e: 0x3177, 0x59f: 0x3488, 0x5a0: 0x3181, 0x5a1: 0x3492, 0x5a2: 0x4700, 0x5a3: 0x4791,
	0x5a4: 0x399e, 0x5a5: 0x3b2d, 0x5a6: 0x39a5, 0x5a7: 0x3b34, 0x5a8: 0x39ac, 0x5a9: 0x3b3b,
	0x5aa: 0x3190, 0x5ab: 0x34a1, 0x5ac: 0x319a, 0x5ad: 0x34b0, 0x5ae: 0x31ae, 0x5af: 0x34c4,
	0x5b0: 0x31a9, 0x5b1: 0x34bf, 0x5b2: 0x31ea, 0x5b3: 0x3500, 0x5b4: 0x31f9, 0x5b5: 0x350f,
	0x5b6: 0x31f4, 0x5b7: 0x350a, 0x5b8: 0x39b3, 0x5b9: 0x3b42, 0x5ba: 0x39ba, 0x5bb: 0x3b49,
	0x5bc: 0x31fe, 0x5bd: 0x3514, 0x5be: 0x3203, 0x5bf: 0x3519,
	// Block 0x17, offset 0x5c0
	0x5c0: 0x3208, 0x5c1: 0x351e, 0x5c2: 0x320d, 0x5c3: 0x3523, 0x5c4: 0x321c, 0x5c5: 0x3532,
	0x5c6: 0x3217, 0x5c7: 0x352d, 0x5c8: 0x3221, 0x5c9: 0x353c, 0x5ca: 0x3226, 0x5cb: 0x3541,
	0x5cc: 0x322b, 0x5cd: 0x3546, 0x5ce: 0x3249, 0x5cf: 0x3564, 0x5d0: 0x3262, 0x5d1: 0x3582,
	0x5d2: 0x3271, 0x5d3: 0x3591, 0x5d4: 0x3276, 0x5d5: 0x3596, 0x5d6: 0x337a, 0x5d7: 0x34a6,
	0x5d8: 0x3537, 0x5d9: 0x3573, 0x5da: 0x1be0, 0x5db: 0x42d7,
	0x5e0: 0x46a1, 0x5e1: 0x4732, 0x5e2: 0x2f83, 0x5e3: 0x328f,
	0x5e4: 0x3878, 0x5e5: 0x3a07, 0x5e6: 0x3871, 0x5e7: 0x3a00, 0x5e8: 0x3886, 0x5e9: 0x3a15,
	0x5ea: 0x387f, 0x5eb: 0x3a0e, 0x5ec: 0x38be, 0x5ed: 0x3a4d, 0x5ee: 0x3894, 0x5ef: 0x3a23,
	0x5f0: 0x388d, 0x5f1: 0x3a1c, 0x5f2: 0x38a2, 0x5f3: 0x3a31, 0x5f4: 0x389b, 0x5f5: 0x3a2a,
	0x5f6: 0x38c5, 0x5f7: 0x3a54, 0x5f8: 0x46b5, 0x5f9: 0x4746, 0x5fa: 0x3000, 0x5fb: 0x330c,
	0x5fc: 0x2fec, 0x5fd: 0x32f8, 0x5fe: 0x38da, 0x5ff: 0x3a69,
	// Block 0x18, offset 0x600
	0x600: 0x38d3, 0x601: 0x3a62, 0x602: 0x38e8, 0x603: 0x3a77, 0x604: 0x38e1, 0x605: 0x3a70,
	0x606: 0x38fd, 0x607: 0x3a8c, 0x608: 0x3091, 0x609: 0x339d, 0x60a: 0x30a5, 0x60b: 0x33b1,
	0x60c: 0x46e7, 0x60d: 0x4778, 0x60e: 0x3136, 0x60f: 0x3447, 0x610: 0x3920, 0x611: 0x3aaf,
	0x612: 0x3919, 0x613: 0x3aa8, 0x614: 0x392e, 0x615: 0x3abd, 0x616: 0x3927, 0x617: 0x3ab6,
	0x618: 0x3989, 0x619: 0x3b18, 0x61a: 0x396d, 0x61b: 0x3afc, 0x61c: 0x3966, 0x61d: 0x3af5,
	0x61e: 0x397b, 0x61f: 0x3b0a, 0x620: 0x3974, 0x621: 0x3b03, 0x622: 0x3982, 0x623: 0x3b11,
	0x624: 0x31e5, 0x625: 0x34fb, 0x626: 0x31c7, 0x627: 0x34dd, 0x628: 0x39e4, 0x629: 0x3b73,
	0x62a: 0x39dd, 0x62b: 0x3b6c, 0x62c: 0x39f2, 0x62d: 0x3b81, 0x62e: 0x39eb, 0x62f: 0x3b7a,
	0x630: 0x39f9, 0x631: 0x3b88, 0x632: 0x3230, 0x633: 0x354b, 0x634: 0x3258, 0x635: 0x3578,
	0x636: 0x3253, 0x637: 0x356e, 0x638: 0x323f, 0x639: 0x355a,
	// Block 0x19, offset 0x640
	0x640: 0x4804, 0x641: 0x480a, 0x642: 0x491e, 0x643: 0x4936, 0x644: 0x4926, 0x645: 0x493e,
	0x646: 0x492e, 0x647: 0x4946, 0x648: 0x47aa, 0x649: 0x47b0, 0x64a: 0x488e, 0x64b: 0x48a6,
	0x64c: 0x4896, 0x64d: 0x48ae, 0x64e: 0x489e, 0x64f: 0x48b6, 0x650: 0x4816, 0x651: 0x481c,
	0x652: 0x3db8, 0x653: 0x3dc8, 0x654: 0x3dc0, 0x655: 0x3dd0,
	0x658: 0x47b6, 0x659: 0x47bc, 0x65a: 0x3ce8, 0x65b: 0x3cf8, 0x65c: 0x3cf0, 0x65d: 0x3d00,
	0x660: 0x482e, 0x661: 0x4834, 0x662: 0x494e, 0x663: 0x4966,
	0x664: 0x4956, 0x665: 0x496e, 0x666: 0x495e, 0x667: 0x4976, 0x668: 0x47c2, 0x669: 0x47c8,
	0x66a: 0x48be, 0x66b: 0x48d6, 0x66c: 0x48c6, 0x66d: 0x48de, 0x66e: 0x48ce, 0x66f: 0x48e6,
	0x670: 0x4846, 0x671: 0x484c, 0x672: 0x3e18, 0x673: 0x3e30, 0x674: 0x3e20, 0x675: 0x3e38,
	0x676: 0x3e28, 0x677: 0x3e40, 0x678: 0x47ce, 0x679: 0x47d4, 0x67a: 0x3d18, 0x67b: 0x3d30,
	0x67c: 0x3d20, 0x67d: 0x3d38, 0x67e: 0x3d28, 0x67f: 0x3d40,
	// Block 0x1a, offset 0x680
	0x680: 0x4852, 0x681: 0x4858, 0x682: 0x3e48, 0x683: 0x3e58, 0x684: 0x3e50, 0x685: 0x3e60,
	0x688: 0x47da, 0x689: 0x47e0, 0x68a: 0x3d48, 0x68b: 0x3d58,
	0x68c: 0x3d50, 0x68d: 0x3d60, 0x690: 0x4864, 0x691: 0x486a,
	0x692: 0x3e80, 0x693: 0x3e98, 0x694: 0x3e88, 0x695: 0x3ea0, 0x696: 0x3e90, 0x697: 0x3ea8,
	0x699: 0x47e6, 0x69b: 0x3d68, 0x69d: 0x3d70,
	0x69f: 0x3d78, 0x6a0: 0x487c, 0x6a1: 0x4882, 0x6a2: 0x497e, 0x6a3: 0x4996,
	0x6a4: 0x4986, 0x6a5: 0x499e, 0x6a6: 0x498e, 0x6a7: 0x49a6, 0x6a8: 0x47ec, 0x6a9: 0x47f2,
	0x6aa: 0x48ee, 0x6ab: 0x4906, 0x6ac: 0x48f6, 0x6ad: 0x490e, 0x6ae: 0x48fe, 0x6af: 0x4916,
	0x6b0: 0x47f8, 0x6b1: 0x431e, 0x6b2: 0x3691, 0x6b3: 0x4324, 0x6b4: 0x4822, 0x6b5: 0x432a,
	0x6b6: 0x36a3, 0x6b7: 0x4330, 0x6b8: 0x36c1, 0x6b9: 0x4336, 0x6ba: 0x36d9, 0x6bb: 0x433c,
	0x6bc: 0x4870, 0x6bd: 0x4342,
	// Block 0x1b, offset 0x6c0
	0x6c0: 0x3da0, 0x6c1: 0x3da8, 0x6c2: 0x4184, 0x6c3: 0x41a2, 0x6c4: 0x418e, 0x6c5: 0x41ac,
	0x6c6: 0x4198, 0x6c7: 0x41b6, 0x6c8: 0x3cd8, 0x6c9: 0x3ce0, 0x6ca: 0x40d0, 0x6cb: 0x40ee,
	0x6cc: 0x40da, 0x6cd: 0x40f8, 0x6ce: 0x40e4, 0x6cf: 0x4102, 0x6d0: 0x3de8, 0x6d1: 0x3df0,
	0x6d2: 0x41c0, 0x6d3: 0x41de, 0x6d4: 0x41ca, 0x6d5: 0x41e8, 0x6d6: 0x41d4, 0x6d7: 0x41f2,
	0x6d8: 0x3d08, 0x6d9: 0x3d10, 0x6da: 0x410c, 0x6db: 0x412a, 0x6dc: 0x4116, 0x6dd: 0x4134,
	0x6de: 0x4120, 0x6df: 0x413e, 0x6e0: 0x3ec0, 0x6e1: 0x3ec8, 0x6e2: 0x41fc, 0x6e3: 0x421a,
	0x6e4: 0x4206, 0x6e5: 0x4224, 0x6e6: 0x4210, 0x6e7: 0x422e, 0x6e8: 0x3d80, 0x6e9: 0x3d88,
	0x6ea: 0x4148, 0x6eb: 0x4166, 0x6ec: 0x4152, 0x6ed: 0x4170, 0x6ee: 0x415c, 0x6ef: 0x417a,
	0x6f0: 0x3685, 0x6f1: 0x367f, 0x6f2: 0x3d90, 0x6f3: 0x368b, 0x6f4: 0x3d98,
	0x6f6: 0x4810, 0x6f7: 0x3db0, 0x6f8: 0x35f5, 0x6f9: 0x35ef, 0x6fa: 0x35e3, 0x6fb: 0x42ee,
	0x6fc: 0x35fb, 0x6fd: 0x4287, 0x6fe: 0x01d3, 0x6ff: 0x4287,
	// Block 0x1c, offset 0x700
	0x700: 0x42a0, 0x701: 0x4482, 0x702: 0x3dd8, 0x703: 0x369d, 0x704: 0x3de0,
	0x706: 0x483a, 0x707: 0x3df8, 0x708: 0x3601, 0x709: 0x42f4, 0x70a: 0x360d, 0x70b: 0x42fa,
	0x70c: 0x3619, 0x70d: 0x4489, 0x70e: 0x4490, 0x70f: 0x4497, 0x710: 0x36b5, 0x711: 0x36af,
	0x712: 0x3e00, 0x713: 0x44e4, 0x716: 0x36bb, 0x717: 0x3e10,
	0x718: 0x3631, 0x719: 0x362b, 0x71a: 0x361f, 0x71b: 0x4300, 0x71d: 0x449e,
	0x71e: 0x44a5, 0x71f: 0x44ac, 0x720: 0x36eb, 0x721: 0x36e5, 0x722: 0x3e68, 0x723: 0x44ec,
	0x724: 0x36cd, 0x725: 0x36d3, 0x726: 0x36f1, 0x727: 0x3e78, 0x728: 0x3661, 0x729: 0x365b,
	0x72a: 0x364f, 0x72b: 0x430c, 0x72c: 0x3649, 0x72d: 0x4474, 0x72e: 0x447b, 0x72f: 0x0081,
	0x732: 0x3eb0, 0x733: 0x36f7, 0x734: 0x3eb8,
	0x736: 0x4888, 0x737: 0x3ed0, 0x738: 0x363d, 0x739: 0x4306, 0x73a: 0x366d, 0x73b: 0x4318,
	0x73c: 0x3679, 0x73d: 0x425a, 0x73e: 0x428c,
	// Block 0x1d, offset 0x740
	0x740: 0x1bd8, 0x741: 0x1bdc, 0x742: 0x0047, 0x743: 0x1c54, 0x745: 0x1be8,
	0x746: 0x1bec, 0x747: 0x00e9, 0x749: 0x1c58, 0x74a: 0x008f, 0x74b: 0x0051,
	0x74c: 0x0051, 0x74d: 0x0051, 0x74e: 0x0091, 0x74f: 0x00da, 0x750: 0x0053, 0x751: 0x0053,
	0x752: 0x0059, 0x753: 0x0099, 0x755: 0x005d, 0x756: 0x198d,
	0x759: 0x0061, 0x75a: 0x0063, 0x75b: 0x0065, 0x75c: 0x0065, 0x75d: 0x0065,
	0x760: 0x199f, 0x761: 0x1bc8, 0x762: 0x19a8,
	0x764: 0x0075, 0x766: 0x01b8, 0x768: 0x0075,
	0x76a: 0x0057, 0x76b: 0x42d2, 0x76c: 0x0045, 0x76d: 0x0047, 0x76f: 0x008b,
	0x770: 0x004b, 0x771: 0x004d, 0x773: 0x005b, 0x774: 0x009f, 0x775: 0x0215,
	0x776: 0x0218, 0x777: 0x021b, 0x778: 0x021e, 0x779: 0x0093, 0x77b: 0x1b98,
	0x77c: 0x01e8, 0x77d: 0x01c1, 0x77e: 0x0179, 0x77f: 0x01a0,
	// Block 0x1e, offset 0x780
	0x780: 0x0463, 0x785: 0x0049,
	0x786: 0x0089, 0x787: 0x008b, 0x788: 0x0093, 0x789: 0x0095,
	0x790: 0x222e, 0x791: 0x223a,
	0x792: 0x22ee, 0x793: 0x2216, 0x794: 0x229a, 0x795: 0x2222, 0x796: 0x22a0, 0x797: 0x22b8,
	0x798: 0x22c4, 0x799: 0x2228, 0x79a: 0x22ca, 0x79b: 0x2234, 0x79c: 0x22be, 0x79d: 0x22d0,
	0x79e: 0x22d6, 0x79f: 0x1cbc, 0x7a0: 0x0053, 0x7a1: 0x195a, 0x7a2: 0x1ba4, 0x7a3: 0x1963,
	0x7a4: 0x006d, 0x7a5: 0x19ab, 0x7a6: 0x1bd0, 0x7a7: 0x1d48, 0x7a8: 0x1966, 0x7a9: 0x0071,
	0x7aa: 0x19b7, 0x7ab: 0x1bd4, 0x7ac: 0x0059, 0x7ad: 0x0047, 0x7ae: 0x0049, 0x7af: 0x005b,
	0x7b0: 0x0093, 0x7b1: 0x19e4, 0x7b2: 0x1c18, 0x7b3: 0x19ed, 0x7b4: 0x00ad, 0x7b5: 0x1a62,
	0x7b6: 0x1c4c, 0x7b7: 0x1d5c, 0x7b8: 0x19f0, 0x7b9: 0x00b1, 0x7ba: 0x1a65, 0x7bb: 0x1c50,
	0x7bc: 0x0099, 0x7bd: 0x0087, 0x7be: 0x0089, 0x7bf: 0x009b,
	// Block 0x1f, offset 0x7c0
	0x7c1: 0x3c06, 0x7c3: 0xa000, 0x7c4: 0x3c0d, 0x7c5: 0xa000,
	0x7c7: 0x3c14, 0x7c8: 0xa000, 0x7c9: 0x3c1b,
	0x7cd: 0xa000,
	0x7e0: 0x2f65, 0x7e1: 0xa000, 0x7e2: 0x3c29,
	0x7e4: 0xa000, 0x7e5: 0xa000,
	0x7ed: 0x3c22, 0x7ee: 0x2f60, 0x7ef: 0x2f6a,
	0x7f0: 0x3c30, 0x7f1: 0x3c37, 0x7f2: 0xa000, 0x7f3: 0xa000, 0x7f4: 0x3c3e, 0x7f5: 0x3c45,
	0x7f6: 0xa000, 0x7f7: 0xa000, 0x7f8: 0x3c4c, 0x7f9: 0x3c53, 0x7fa: 0xa000, 0x7fb: 0xa000,
	0x7fc: 0xa000, 0x7fd: 0xa000,
	// Block 0x20, offset 0x800
	0x800: 0x3c5a, 0x801: 0x3c61, 0x802: 0xa000, 0x803: 0xa000, 0x804: 0x3c76, 0x805: 0x3c7d,
	0x806: 0xa000, 0x807: 0xa000, 0x808: 0x3c84, 0x809: 0x3c8b,
	0x811: 0xa000,
	0x812: 0xa000,
	0x822: 0xa000,
	0x828: 0xa000, 0x829: 0xa000,
	0x82b: 0xa000, 0x82c: 0x3ca0, 0x82d: 0x3ca7, 0x82e: 0x3cae, 0x82f: 0x3cb5,
	0x832: 0xa000, 0x833: 0xa000, 0x834: 0xa000, 0x835: 0xa000,
	// Block 0x21, offset 0x840
	0x860: 0x0023, 0x861: 0x0025, 0x862: 0x0027, 0x863: 0x0029,
	0x864: 0x002b, 0x865: 0x002d, 0x866: 0x002f, 0x867: 0x0031, 0x868: 0x0033, 0x869: 0x1882,
	0x86a: 0x1885, 0x86b: 0x1888, 0x86c: 0x188b, 0x86d: 0x188e, 0x86e: 0x1891, 0x86f: 0x1894,
	0x870: 0x1897, 0x871: 0x189a, 0x872: 0x189d, 0x873: 0x18a6, 0x874: 0x1a68, 0x875: 0x1a6c,
	0x876: 0x1a70, 0x877: 0x1a74, 0x878: 0x1a78, 0x879: 0x1a7c, 0x87a: 0x1a80, 0x87b: 0x1a84,
	0x87c: 0x1a88, 0x87d: 0x1c80, 0x87e: 0x1c85, 0x87f: 0x1c8a,
	// Block 0x22, offset 0x880
	0x880: 0x1c8f, 0x881: 0x1c94, 0x882: 0x1c99, 0x883: 0x1c9e, 0x884: 0x1ca3, 0x885: 0x1ca8,
	0x886: 0x1cad, 0x887: 0x1cb2, 0x888: 0x187f, 0x889: 0x18a3, 0x88a: 0x18c7, 0x88b: 0x18eb,
	0x88c: 0x190f, 0x88d: 0x1918, 0x88e: 0x191e, 0x88f: 0x1924, 0x890: 0x192a, 0x891: 0x1b60,
	0x892: 0x1b64, 0x893: 0x1b68, 0x894: 0x1b6c, 0x895: 0x1b70, 0x896: 0x1b74, 0x897: 0x1b78,
	0x898: 0x1b7c, 0x899: 0x1b80, 0x89a: 0x1b84, 0x89b: 0x1b88, 0x89c: 0x1af4, 0x89d: 0x1af8,
	0x89e: 0x1afc, 0x89f: 0x1b00, 0x8a0: 0x1b04, 0x8a1: 0x1b08, 0x8a2: 0x1b0c, 0x8a3: 0x1b10,
	0x8a4: 0x1b14, 0x8a5: 0x1b18, 0x8a6: 0x1b1c, 0x8a7: 0x1b20, 0x8a8: 0x1b24, 0x8a9: 0x1b28,
	0x8aa: 0x1b2c, 0x8ab: 0x1b30, 0x8ac: 0x1b34, 0x8ad: 0x1b38, 0x8ae: 0x1b3c, 0x8af: 0x1b40,
	0x8b0: 0x1b44, 0x8b1: 0x1b48, 0x8b2: 0x1b4c, 0x8b3: 0x1b50, 0x8b4: 0x1b54, 0x8b5: 0x1b58,
	0x8b6: 0x0043, 0x8b7: 0x0045, 0x8b8: 0x0047, 0x8b9: 0x0049, 0x8ba: 0x004b, 0x8bb: 0x004d,
	0x8bc: 0x004f, 0x8bd: 0x0051, 0x8be: 0x0053, 0x8bf: 0x0055,
	// Block 0x23, offset 0x8c0
	0x8c0: 0x06bf, 0x8c1: 0x06e3, 0x8c2: 0x06ef, 0x8c3: 0x06ff, 0x8c4: 0x0707, 0x8c5: 0x0713,
	0x8c6: 0x071b, 0x8c7: 0x0723, 0x8c8: 0x072f, 0x8c9: 0x0783, 0x8ca: 0x079b, 0x8cb: 0x07ab,
	0x8cc: 0x07bb, 0x8cd: 0x07cb, 0x8ce: 0x07db, 0x8cf: 0x07fb, 0x8d0: 0x07ff, 0x8d1: 0x0803,
	0x8d2: 0x0837, 0x8d3: 0x085f, 0x8d4: 0x086f, 0x8d5: 0x0877, 0x8d6: 0x087b, 0x8d7: 0x0887,
	0x8d8: 0x08a3, 0x8d9: 0x08a7, 0x8da: 0x08bf, 0x8db: 0x08c3, 0x8dc: 0x08cb, 0x8dd: 0x08db,
	0x8de: 0x0977, 0x8df: 0x098b, 0x8e0: 0x09cb, 0x8e1: 0x09df, 0x8e2: 0x09e7, 0x8e3: 0x09eb,
	0x8e4: 0x09fb, 0x8e5: 0x0a17, 0x8e6: 0x0a43, 0x8e7: 0x0a4f, 0x8e8: 0x0a6f, 0x8e9: 0x0a7b,
	0x8ea: 0x0a7f, 0x8eb: 0x0a83, 0x8ec: 0x0a9b, 0x8ed: 0x0a9f, 0x8ee: 0x0acb, 0x8ef: 0x0ad7,
	0x8f0: 0x0adf, 0x8f1: 0x0ae7, 0x8f2: 0x0af7, 0x8f3: 0x0aff, 0x8f4: 0x0b07, 0x8f5: 0x0b33,
	0x8f6: 0x0b37, 0x8f7: 0x0b3f, 0x8f8: 0x0b43, 0x8f9: 0x0b4b, 0x8fa: 0x0b53, 0x8fb: 0x0b63,
	0x8fc: 0x0b7f, 0x8fd: 0x0bf7, 0x8fe: 0x0c0b, 0x8ff: 0x0c0f,
	// Block 0x24, offset 0x900
	0x900: 0x0c8f, 0x901: 0x0c93, 0x902: 0x0ca7, 0x903: 0x0cab, 0x904: 0x0cb3, 0x905: 0x0cbb,
	0x906: 0x0cc3, 0x907: 0x0ccf, 0x908: 0x0cf7, 0x909: 0x0d07, 0x90a: 0x0d1b, 0x90b: 0x0d8b,
	0x90c: 0x0d97, 0x90d: 0x0da7, 0x90e: 0x0db3, 0x90f: 0x0dbf, 0x910: 0x0dc7, 0x911: 0x0dcb,
	0x912: 0x0dcf, 0x913: 0x0dd3, 0x914: 0x0dd7, 0x915: 0x0e8f, 0x916: 0x0ed7, 0x917: 0x0ee3,
	0x918: 0x0ee7, 0x919: 0x0eeb, 0x91a: 0x0eef, 0x91b: 0x0ef7, 0x91c: 0x0efb, 0x91d: 0x0f0f,
	0x91e: 0x0f2b, 0x91f: 0x0f33, 0x920: 0x0f73, 0x921: 0x0f77, 0x922: 0x0f7f, 0x923: 0x0f83,
	0x924: 0x0f8b, 0x925: 0x0f8f, 0x926: 0x0fb3, 0x927: 0x0fb7, 0x928: 0x0fd3, 0x929: 0x0fd7,
	0x92a: 0x0fdb, 0x92b: 0x0fdf, 0x92c: 0x0ff3, 0x92d: 0x1017, 0x92e: 0x101b, 0x92f: 0x101f,
	0x930: 0x1043, 0x931: 0x1083, 0x932: 0x1087, 0x933: 0x10a7, 0x934: 0x10b7, 0x935: 0x10bf,
	0x936: 0x10df, 0x937: 0x1103, 0x938: 0x1147, 0x939: 0x114f, 0x93a: 0x1163, 0x93b: 0x116f,
	0x93c: 0x1177, 0x93d: 0x117f, 0x93e: 0x1183, 0x93f: 0x1187,
	// Block 0x25, offset 0x940
	0x940: 0x119f, 0x941: 0x11a3, 0x942: 0x11bf, 0x943: 0x11c7, 0x944: 0x11cf, 0x945: 0x11d3,
	0x946: 0x11df, 0x947: 0x11e7, 0x948: 0x11eb, 0x949: 0x11ef, 0x94a: 0x11f7, 0x94b: 0x11fb,
	0x94c: 0x129b, 0x94d: 0x12af, 0x94e: 0x12e3, 0x94f: 0x12e7, 0x950: 0x12ef, 0x951: 0x131b,
	0x952: 0x1323, 0x953: 0x132b, 0x954: 0x1333, 0x955: 0x136f, 0x956: 0x1373, 0x957: 0x137b,
	0x958: 0x137f, 0x959: 0x1383, 0x95a: 0x13af, 0x95b: 0x13b3, 0x95c: 0x13bb, 0x95d: 0x13cf,
	0x95e: 0x13d3, 0x95f: 0x13ef, 0x960: 0x13f7, 0x961: 0x13fb, 0x962: 0x141f, 0x963: 0x143f,
	0x964: 0x1453, 0x965: 0x1457, 0x966: 0x145f, 0x967: 0x148b, 0x968: 0x148f, 0x969: 0x149f,
	0x96a: 0x14c3, 0x96b: 0x14cf, 0x96c: 0x14df, 0x96d: 0x14f7, 0x96e: 0x14ff, 0x96f: 0x1503,
	0x970: 0x1507, 0x971: 0x150b, 0x972: 0x1517, 0x973: 0x151b, 0x974: 0x1523, 0x975: 0x153f,
	0x976: 0x1543, 0x977: 0x1547, 0x978: 0x155f, 0x979: 0x1563, 0x97a: 0x156b, 0x97b: 0x157f,
	0x97c: 0x1583, 0x97d: 0x1587, 0x97e: 0x158f, 0x97f: 0x1593,
	// Block 0x26, offset 0x980
	0x986: 0xa000, 0x98b: 0xa000,
	0x98c: 0x3f08, 0x98d: 0xa000, 0x98e: 0x3f10, 0x98f: 0xa000, 0x990: 0x3f18, 0x991: 0xa000,
	0x992: 0x3f20, 0x993: 0xa000, 0x994: 0x3f28, 0x995: 0xa000, 0x996: 0x3f30, 0x997: 0xa000,
	0x998: 0x3f38, 0x999: 0xa000, 0x99a: 0x3f40, 0x99b: 0xa000, 0x99c: 0x3f48, 0x99d: 0xa000,
	0x99e: 0x3f50, 0x99f: 0xa000, 0x9a0: 0x3f58, 0x9a1: 0xa000, 0x9a2: 0x3f60,
	0x9a4: 0xa000, 0x9a5: 0x3f68, 0x9a6: 0xa000, 0x9a7: 0x3f70, 0x9a8: 0xa000, 0x9a9: 0x3f78,
	0x9af: 0xa000,
	0x9b0: 0x3f80, 0x9b1: 0x3f88, 0x9b2: 0xa000, 0x9b3: 0x3f90, 0x9b4: 0x3f98, 0x9b5: 0xa000,
	0x9b6: 0x3fa0, 0x9b7: 0x3fa8, 0x9b8: 0xa000, 0x9b9: 0x3fb0, 0x9ba: 0x3fb8, 0x9bb: 0xa000,
	0x9bc: 0x3fc0, 0x9bd: 0x3fc8,
	// Block 0x27, offset 0x9c0
	0x9d4: 0x3f00,
	0x9d9: 0x9903, 0x9da: 0x9903, 0x9db: 0x42dc, 0x9dc: 0x42e2, 0x9dd: 0xa000,
	0x9de: 0x3fd0, 0x9df: 0x26b4,
	0x9e6: 0xa000,
	0x9eb: 0xa000, 0x9ec: 0x3fe0, 0x9ed: 0xa000, 0x9ee: 0x3fe8, 0x9ef: 0xa000,
	0x9f0: 0x3ff0, 0x9f1: 0xa000, 0x9f2: 0x3ff8, 0x9f3: 0xa000, 0x9f4: 0x4000, 0x9f5: 0xa000,
	0x9f6: 0x4008, 0x9f7: 0xa000, 0x9f8: 0x4010, 0x9f9: 0xa000, 0x9fa: 0x4018, 0x9fb: 0xa000,
	0x9fc: 0x4020, 0x9fd: 0xa000, 0x9fe: 0x4028, 0x9ff: 0xa000,
	// Block 0x28, offset 0xa00
	0xa00: 0x4030, 0xa01: 0xa000, 0xa02: 0x4038, 0xa04: 0xa000, 0xa05: 0x4040,
	0xa06: 0xa000, 0xa07: 0x4048, 0xa08: 0xa000, 0xa09: 0x4050,
	0xa0f: 0xa000, 0xa10: 0x4058, 0xa11: 0x4060,
	0xa12: 0xa000, 0xa13: 0x4068, 0xa14: 0x4070, 0xa15: 0xa000, 0xa16: 0x4078, 0xa17: 0x4080,
	0xa18: 0xa000, 0xa19: 0x4088, 0xa1a: 0x4090, 0xa1b: 0xa000, 0xa1c: 0x4098, 0xa1d: 0x40a0,
	0xa2f: 0xa000,
	0xa30: 0xa000, 0xa31: 0xa000, 0xa32: 0xa000, 0xa34: 0x3fd8,
	0xa37: 0x40a8, 0xa38: 0x40b0, 0xa39: 0x40b8, 0xa3a: 0x40c0,
	0xa3d: 0xa000, 0xa3e: 0x40c8, 0xa3f: 0x26c9,
	// Block 0x29, offset 0xa40
	0xa40: 0x0367, 0xa41: 0x032b, 0xa42: 0x032f, 0xa43: 0x0333, 0xa44: 0x037b, 0xa45: 0x0337,
	0xa46: 0x033b, 0xa47: 0x033f, 0xa48: 0x0343, 0xa49: 0x0347, 0xa4a: 0x034b, 0xa4b: 0x034f,
	0xa4c: 0x0353, 0xa4d: 0x0357, 0xa4e: 0x035b, 0xa4f: 0x49bd, 0xa50: 0x49c3, 0xa51: 0x49c9,
	0xa52: 0x49cf, 0xa53: 0x49d5, 0xa54: 0x49db, 0xa55: 0x49e1, 0xa56: 0x49e7, 0xa57: 0x49ed,
	0xa58: 0x49f3, 0xa59: 0x49f9, 0xa5a: 0x49ff, 0xa5b: 0x4a05, 0xa5c: 0x4a0b, 0xa5d: 0x4a11,
	0xa5e: 0x4a17, 0xa5f: 0x4a1d, 0xa60: 0x4a23, 0xa61: 0x4a29, 0xa62: 0x4a2f, 0xa63: 0x4a35,
	0xa64: 0x03c3, 0xa65: 0x035f, 0xa66: 0x0363, 0xa67: 0x03e7, 0xa68: 0x03eb, 0xa69: 0x03ef,
	0xa6a: 0x03f3, 0xa6b: 0x03f7, 0xa6c: 0x03fb, 0xa6d: 0x03ff, 0xa6e: 0x036b, 0xa6f: 0x0403,
	0xa70: 0x0407, 0xa71: 0x036f, 0xa72: 0x0373, 0xa73: 0x0377, 0xa74: 0x037f, 0xa75: 0x0383,
	0xa76: 0x0387, 0xa77: 0x038b, 0xa78: 0x038f, 0xa79: 0x0393, 0xa7a: 0x0397, 0xa7b: 0x039b,
	0xa7c: 0x039f, 0xa7d: 0x03a3, 0xa7e: 0x03a7, 0xa7f: 0x03ab,
	// Block 0x2a, offset 0xa80
	0xa80: 0x03af, 0xa81: 0x03b3, 0xa82: 0x040b, 0xa83: 0x040f, 0xa84: 0x03b7, 0xa85: 0x03bb,
	0xa86: 0x03bf, 0xa87: 0x03c7, 0xa88: 0x03cb, 0xa89: 0x03cf, 0xa8a: 0x03d3, 0xa8b: 0x03d7,
	0xa8c: 0x03db, 0xa8d: 0x03df, 0xa8e: 0x03e3,
	0xa92: 0x06bf, 0xa93: 0x071b, 0xa94: 0x06cb, 0xa95: 0x097b, 0xa96: 0x06cf, 0xa97: 0x06e7,
	0xa98: 0x06d3, 0xa99: 0x0f93, 0xa9a: 0x0707, 0xa9b: 0x06db, 0xa9c: 0x06c3, 0xa9d: 0x09ff,
	0xa9e: 0x098f, 0xa9f: 0x072f,
	// Block 0x2b, offset 0xac0
	0xac0: 0x2054, 0xac1: 0x205a, 0xac2: 0x2060, 0xac3: 0x2066, 0xac4: 0x206c, 0xac5: 0x2072,
	0xac6: 0x2078, 0xac7: 0x207e, 0xac8: 0x2084, 0xac9: 0x208a, 0xaca: 0x2090, 0xacb: 0x2096,
	0xacc: 0x209c, 0xacd: 0x20a2, 0xace: 0x2726, 0xacf: 0x272f, 0xad0: 0x2738, 0xad1: 0x2741,
	0xad2: 0x274a, 0xad3: 0x2753, 0xad4: 0x275c, 0xad5: 0x2765, 0xad6: 0x276e, 0xad7: 0x2780,
	0xad8: 0x2789, 0xad9: 0x2792, 0xada: 0x279b, 0xadb: 0x27a4, 0xadc: 0x2777, 0xadd: 0x2bac,
	0xade: 0x2aed, 0xae0: 0x20a8, 0xae1: 0x20c0, 0xae2: 0x20b4, 0xae3: 0x2108,
	0xae4: 0x20c6, 0xae5: 0x20e4, 0xae6: 0x20ae, 0xae7: 0x20de, 0xae8: 0x20ba, 0xae9: 0x20f0,
	0xaea: 0x2120, 0xaeb: 0x213e, 0xaec: 0x2138, 0xaed: 0x212c, 0xaee: 0x217a, 0xaef: 0x210e,
	0xaf0: 0x211a, 0xaf1: 0x2132, 0xaf2: 0x2126, 0xaf3: 0x2150, 0xaf4: 0x20fc, 0xaf5: 0x2144,
	0xaf6: 0x216e, 0xaf7: 0x2156, 0xaf8: 0x20ea, 0xaf9: 0x20cc, 0xafa: 0x2102, 0xafb: 0x2114,
	0xafc: 0x214a, 0xafd: 0x20d2, 0xafe: 0x2174, 0xaff: 0x20f6,
	// Block 0x2c, offset 0xb00
	0xb00: 0x215c, 0xb01: 0x20d8, 0xb02: 0x2162, 0xb03: 0x2168, 0xb04: 0x092f, 0xb05: 0x0b03,
	0xb06: 0x0ca7, 0xb07: 0x10c7,
	0xb10: 0x1bc4, 0xb11: 0x18a9,
	0xb12: 0x18ac, 0xb13: 0x18af, 0xb14: 0x18b2, 0xb15: 0x18b5, 0xb16: 0x18b8, 0xb17: 0x18bb,
	0xb18: 0x18be, 0xb19: 0x18c1, 0xb1a: 0x18ca, 0xb1b: 0x18cd, 0xb1c: 0x18d0, 0xb1d: 0x18d3,
	0xb1e: 0x18d6, 0xb1f: 0x18d9, 0xb20: 0x0313, 0xb21: 0x031b, 0xb22: 0x031f, 0xb23: 0x0327,
	0xb24: 0x032b, 0xb25: 0x032f, 0xb26: 0x0337, 0xb27: 0x033f, 0xb28: 0x0343, 0xb29: 0x034b,
	0xb2a: 0x034f, 0xb2b: 0x0353, 0xb2c: 0x0357, 0xb2d: 0x035b, 0xb2e: 0x2e18, 0xb2f: 0x2e20,
	0xb30: 0x2e28, 0xb31: 0x2e30, 0xb32: 0x2e38, 0xb33: 0x2e40, 0xb34: 0x2e48, 0xb35: 0x2e50,
	0xb36: 0x2e60, 0xb37: 0x2e68, 0xb38: 0x2e70, 0xb39: 0x2e78, 0xb3a: 0x2e80, 0xb3b: 0x2e88,
	0xb3c: 0x2ed3, 0xb3d: 0x2e9b, 0xb3e: 0x2e58,
	// Block 0x2d, offset 0xb40
	0xb40: 0x06bf, 0xb41: 0x071b, 0xb42: 0x06cb, 0xb43: 0x097b, 0xb44: 0x071f, 0xb45: 0x07af,
	0xb46: 0x06c7, 0xb47: 0x07ab, 0xb48: 0x070b, 0xb49: 0x0887, 0xb4a: 0x0d07, 0xb4b: 0x0e8f,
	0xb4c: 0x0dd7, 0xb4d: 0x0d1b, 0xb4e: 0x145f, 0xb4f: 0x098b, 0xb50: 0x0ccf, 0xb51: 0x0d4b,
	0xb52: 0x0d0b, 0xb53: 0x104b, 0xb54: 0x08fb, 0xb55: 0x0f03, 0xb56: 0x1387, 0xb57: 0x105f,
	0xb58: 0x0843, 0xb59: 0x108f, 0xb5a: 0x0f9b, 0xb5b: 0x0a17, 0xb5c: 0x140f, 0xb5d: 0x077f,
	0xb5e: 0x08ab, 0xb5f: 0x0df7, 0xb60: 0x1527, 0xb61: 0x0743, 0xb62: 0x07d3, 0xb63: 0x0d9b,
	0xb64: 0x06cf, 0xb65: 0x06e7, 0xb66: 0x06d3, 0xb67: 0x0adb, 0xb68: 0x08ef, 0xb69: 0x087f,
	0xb6a: 0x0a57, 0xb6b: 0x0a4b, 0xb6c: 0x0feb, 0xb6d: 0x073f, 0xb6e: 0x139b, 0xb6f: 0x089b,
	0xb70: 0x09f3, 0xb71: 0x18dc, 0xb72: 0x18df, 0xb73: 0x18e2, 0xb74: 0x18e5, 0xb75: 0x18ee,
	0xb76: 0x18f1, 0xb77: 0x18f4, 0xb78: 0x18f7, 0xb79: 0x18fa, 0xb7a: 0x18fd, 0xb7b: 0x1900,
	0xb7c: 0x1903, 0xb7d: 0x1906, 0xb7e: 0x1909, 0xb7f: 0x1912,
	// Block 0x2e, offset 0xb80
	0xb80: 0x1cc6, 0xb81: 0x1cd5, 0xb82: 0x1ce4, 0xb83: 0x1cf3, 0xb84: 0x1d02, 0xb85: 0x1d11,
	0xb86: 0x1d20, 0xb87: 0x1d2f, 0xb88: 0x1d3e, 0xb89: 0x218c, 0xb8a: 0x219e, 0xb8b: 0x21b0,
	0xb8c: 0x1954, 0xb8d: 0x1c04, 0xb8e: 0x19d2, 0xb8f: 0x1ba8, 0xb90: 0x04cb, 0xb91: 0x04d3,
	0xb92: 0x04db, 0xb93: 0x04e3, 0xb94: 0x04eb, 0xb95: 0x04ef, 0xb96: 0x04f3, 0xb97: 0x04f7,
	0xb98: 0x04fb, 0xb99: 0x04ff, 0xb9a: 0x0503, 0xb9b: 0x0507, 0xb9c: 0x050b, 0xb9d: 0x050f,
	0xb9e: 0x0513, 0xb9f: 0x0517, 0xba0: 0x051b, 0xba1: 0x0523, 0xba2: 0x0527, 0xba3: 0x052b,
	0xba4: 0x052f, 0xba5: 0x0533, 0xba6: 0x0537, 0xba7: 0x053b, 0xba8: 0x053f, 0xba9: 0x0543,
	0xbaa: 0x0547, 0xbab: 0x054b, 0xbac: 0x054f, 0xbad: 0x0553, 0xbae: 0x0557, 0xbaf: 0x055b,
	0xbb0: 0x055f, 0xbb1: 0x0563, 0xbb2: 0x0567, 0xbb3: 0x056f, 0xbb4: 0x0577, 0xbb5: 0x057f,
	0xbb6: 0x0583, 0xbb7: 0x0587, 0xbb8: 0x058b, 0xbb9: 0x058f, 0xbba: 0x0593, 0xbbb: 0x0597,
	0xbbc: 0x059b, 0xbbd: 0x059f, 0xbbe: 0x05a3,
	// Block 0x2f, offset 0xbc0
	0xbc0: 0x2b0c, 0xbc1: 0x29a8, 0xbc2: 0x2b1c, 0xbc3: 0x2880, 0xbc4: 0x2ee4, 0xbc5: 0x288a,
	0xbc6: 0x2894, 0xbc7: 0x2f28, 0xbc8: 0x29b5, 0xbc9: 0x289e, 0xbca: 0x28a8, 0xbcb: 0x28b2,
	0xbcc: 0x29dc, 0xbcd: 0x29e9, 0xbce: 0x29c2, 0xbcf: 0x29cf, 0xbd0: 0x2ea9, 0xbd1: 0x29f6,
	0xbd2: 0x2a03, 0xbd3: 0x2bbe, 0xbd4: 0x26bb, 0xbd5: 0x2bd1, 0xbd6: 0x2be4, 0xbd7: 0x2b2c,
	0xbd8: 0x2a10, 0xbd9: 0x2bf7, 0xbda: 0x2c0a, 0xbdb: 0x2a1d, 0xbdc: 0x28bc, 0xbdd: 0x28c6,
	0xbde: 0x2eb7, 0xbdf: 0x2a2a, 0xbe0: 0x2b3c, 0xbe1: 0x2ef5, 0xbe2: 0x28d0, 0xbe3: 0x28da,
	0xbe4: 0x2a37, 0xbe5: 0x28e4, 0xbe6: 0x28ee, 0xbe7: 0x26d0, 0xbe8: 0x26d7, 0xbe9: 0x28f8,
	0xbea: 0x2902, 0xbeb: 0x2c1d, 0xbec: 0x2a44, 0xbed: 0x2b4c, 0xbee: 0x2c30, 0xbef: 0x2a51,
	0xbf0: 0x2916, 0xbf1: 0x290c, 0xbf2: 0x2f3c, 0xbf3: 0x2a5e, 0xbf4: 0x2c43, 0xbf5: 0x2920,
	0xbf6: 0x2b5c, 0xbf7: 0x292a, 0xbf8: 0x2a78, 0xbf9: 0x2934, 0xbfa: 0x2a85, 0xbfb: 0x2f06,
	0xbfc: 0x2a6b, 0xbfd: 0x2b6c, 0xbfe: 0x2a92, 0xbff: 0x26de,
	// Block 0x30, offset 0xc00
	0xc00: 0x2f17, 0xc01: 0x293e, 0xc02: 0x2948, 0xc03: 0x2a9f, 0xc04: 0x2952, 0xc05: 0x295c,
	0xc06: 0x2966, 0xc07: 0x2b7c, 0xc08: 0x2aac, 0xc09: 0x26e5, 0xc0a: 0x2c56, 0xc0b: 0x2e90,
	0xc0c: 0x2b8c, 0xc0d: 0x2ab9, 0xc0e: 0x2ec5, 0xc0f: 0x2970, 0xc10: 0x297a, 0xc11: 0x2ac6,
	0xc12: 0x26ec, 0xc13: 0x2ad3, 0xc14: 0x2b9c, 0xc15: 0x26f3, 0xc16: 0x2c69, 0xc17: 0x2984,
	0xc18: 0x1cb7, 0xc19: 0x1ccb, 0xc1a: 0x1cda, 0xc1b: 0x1ce9, 0xc1c: 0x1cf8, 0xc1d: 0x1d07,
	0xc1e: 0x1d16, 0xc1f: 0x1d25, 0xc20: 0x1d34, 0xc21: 0x1d43, 0xc22: 0x2192, 0xc23: 0x21a4,
	0xc24: 0x21b6, 0xc25: 0x21c2, 0xc26: 0x21ce, 0xc27: 0x21da, 0xc28: 0x21e6, 0xc29: 0x21f2,
	0xc2a: 0x21fe, 0xc2b: 0x220a, 0xc2c: 0x2246, 0xc2d: 0x2252, 0xc2e: 0x225e, 0xc2f: 0x226a,
	0xc30: 0x2276, 0xc31: 0x1c14, 0xc32: 0x19c6, 0xc33: 0x1936, 0xc34: 0x1be4, 0xc35: 0x1a47,
	0xc36: 0x1a56, 0xc37: 0x19cc, 0xc38: 0x1bfc, 0xc39: 0x1c00, 0xc3a: 0x1960, 0xc3b: 0x2701,
	0xc3c: 0x270f, 0xc3d: 0x26fa, 0xc3e: 0x2708, 0xc3f: 0x2ae0,
	// Block 0x31, offset 0xc40
	0xc40: 0x1a4a, 0xc41: 0x1a32, 0xc42: 0x1c60, 0xc43: 0x1a1a, 0xc44: 0x19f3, 0xc45: 0x1969,
	0xc46: 0x1978, 0xc47: 0x1948, 0xc48: 0x1bf0, 0xc49: 0x1d52, 0xc4a: 0x1a4d, 0xc4b: 0x1a35,
	0xc4c: 0x1c64, 0xc4d: 0x1c70, 0xc4e: 0x1a26, 0xc4f: 0x19fc, 0xc50: 0x1957, 0xc51: 0x1c1c,
	0xc52: 0x1bb0, 0xc53: 0x1b9c, 0xc54: 0x1bcc, 0xc55: 0x1c74, 0xc56: 0x1a29, 0xc57: 0x19c9,
	0xc58: 0x19ff, 0xc59: 0x19de, 0xc5a: 0x1a41, 0xc5b: 0x1c78, 0xc5c: 0x1a2c, 0xc5d: 0x19c0,
	0xc5e: 0x1a02, 0xc5f: 0x1c3c, 0xc60: 0x1bf4, 0xc61: 0x1a14, 0xc62: 0x1c24, 0xc63: 0x1c40,
	0xc64: 0x1bf8, 0xc65: 0x1a17, 0xc66: 0x1c28, 0xc67: 0x22e8, 0xc68: 0x22fc, 0xc69: 0x1996,
	0xc6a: 0x1c20, 0xc6b: 0x1bb4, 0xc6c: 0x1ba0, 0xc6d: 0x1c48, 0xc6e: 0x2716, 0xc6f: 0x27ad,
	0xc70: 0x1a59, 0xc71: 0x1a44, 0xc72: 0x1c7c, 0xc73: 0x1a2f, 0xc74: 0x1a50, 0xc75: 0x1a38,
	0xc76: 0x1c68, 0xc77: 0x1a1d, 0xc78: 0x19f6, 0xc79: 0x1981, 0xc7a: 0x1a53, 0xc7b: 0x1a3b,
	0xc7c: 0x1c6c, 0xc7d: 0x1a20, 0xc7e: 0x19f9, 0xc7f: 0x1984,
	// Block 0x32, offset 0xc80
	0xc80: 0x1c2c, 0xc81: 0x1bb8, 0xc82: 0x1d4d, 0xc83: 0x1939, 0xc84: 0x19ba, 0xc85: 0x19bd,
	0xc86: 0x22f5, 0xc87: 0x1b94, 0xc88: 0x19c3, 0xc89: 0x194b, 0xc8a: 0x19e1, 0xc8b: 0x194e,
	0xc8c: 0x19ea, 0xc8d: 0x196c, 0xc8e: 0x196f, 0xc8f: 0x1a05, 0xc90: 0x1a0b, 0xc91: 0x1a0e,
	0xc92: 0x1c30, 0xc93: 0x1a11, 0xc94: 0x1a23, 0xc95: 0x1c38, 0xc96: 0x1c44, 0xc97: 0x1990,
	0xc98: 0x1d57, 0xc99: 0x1bbc, 0xc9a: 0x1993, 0xc9b: 0x1a5c, 0xc9c: 0x19a5, 0xc9d: 0x19b4,
	0xc9e: 0x22e2, 0xc9f: 0x22dc, 0xca0: 0x1cc1, 0xca1: 0x1cd0, 0xca2: 0x1cdf, 0xca3: 0x1cee,
	0xca4: 0x1cfd, 0xca5: 0x1d0c, 0xca6: 0x1d1b, 0xca7: 0x1d2a, 0xca8: 0x1d39, 0xca9: 0x2186,
	0xcaa: 0x2198, 0xcab: 0x21aa, 0xcac: 0x21bc, 0xcad: 0x21c8, 0xcae: 0x21d4, 0xcaf: 0x21e0,
	0xcb0: 0x21ec, 0xcb1: 0x21f8, 0xcb2: 0x2204, 0xcb3: 0x2240, 0xcb4: 0x224c, 0xcb5: 0x2258,
	0xcb6: 0x2264, 0xcb7: 0x2270, 0xcb8: 0x227c, 0xcb9: 0x2282, 0xcba: 0x2288, 0xcbb: 0x228e,
	0xcbc: 0x2294, 0xcbd: 0x22a6, 0xcbe: 0x22ac, 0xcbf: 0x1c10,
	// Block 0x33, offset 0xcc0
	0xcc0: 0x1377, 0xcc1: 0x0cfb, 0xcc2: 0x13d3, 0xcc3: 0x139f, 0xcc4: 0x0e57, 0xcc5: 0x06eb,
	0xcc6: 0x08df, 0xcc7: 0x162b, 0xcc8: 0x162b, 0xcc9: 0x0a0b, 0xcca: 0x145f, 0xccb: 0x0943,
	0xccc: 0x0a07, 0xccd: 0x0bef, 0xcce: 0x0fcf, 0xccf: 0x115f, 0xcd0: 0x1297, 0xcd1: 0x12d3,
	0xcd2: 0x1307, 0xcd3: 0x141b, 0xcd4: 0x0d73, 0xcd5: 0x0dff, 0xcd6: 0x0eab, 0xcd7: 0x0f43,
	0xcd8: 0x125f, 0xcd9: 0x1447, 0xcda: 0x1573, 0xcdb: 0x070f, 0xcdc: 0x08b3, 0xcdd: 0x0d87,
	0xcde: 0x0ecf, 0xcdf: 0x1293, 0xce0: 0x15c3, 0xce1: 0x0ab3, 0xce2: 0x0e77, 0xce3: 0x1283,
	0xce4: 0x1317, 0xce5: 0x0c23, 0xce6: 0x11bb, 0xce7: 0x12df, 0xce8: 0x0b1f, 0xce9: 0x0d0f,
	0xcea: 0x0e17, 0xceb: 0x0f1b, 0xcec: 0x1427, 0xced: 0x074f, 0xcee: 0x07e7, 0xcef: 0x0853,
	0xcf0: 0x0c8b, 0xcf1: 0x0d7f, 0xcf2: 0x0ecb, 0xcf3: 0x0fef, 0xcf4: 0x1177, 0xcf5: 0x128b,
	0xcf6: 0x12a3, 0xcf7: 0x13c7, 0xcf8: 0x14ef, 0xcf9: 0x15a3, 0xcfa: 0x15bf, 0xcfb: 0x102b,
	0xcfc: 0x106b, 0xcfd: 0x1123, 0xcfe: 0x1243, 0xcff: 0x147b,
	// Block 0x34, offset 0xd00
	0xd00: 0x15cb, 0xd01: 0x134b, 0xd02: 0x09c7, 0xd03: 0x0b3b, 0xd04: 0x10db, 0xd05: 0x119b,
	0xd06: 0x0eff, 0xd07: 0x1033, 0xd08: 0x1397, 0xd09: 0x14e7, 0xd0a: 0x09c3, 0xd0b: 0x0a8f,
	0xd0c: 0x0d77, 0xd0d: 0x0e2b, 0xd0e: 0x0e5f, 0xd0f: 0x1113, 0xd10: 0x113b, 0xd11: 0x14a7,
	0xd12: 0x084f, 0xd13: 0x11a7, 0xd14: 0x07f3, 0xd15: 0x07ef, 0xd16: 0x1097, 0xd17: 0x1127,
	0xd18: 0x125b, 0xd19: 0x14af, 0xd1a: 0x1367, 0xd1b: 0x0c27, 0xd1c: 0x0d73, 0xd1d: 0x1357,
	0xd1e: 0x06f7, 0xd1f: 0x0a63, 0xd20: 0x0b93, 0xd21: 0x0f2f, 0xd22: 0x0faf, 0xd23: 0x0873,
	0xd24: 0x103b, 0xd25: 0x075f, 0xd26: 0x0b77, 0xd27: 0x06d7, 0xd28: 0x0deb, 0xd29: 0x0ca3,
	0xd2a: 0x110f, 0xd2b: 0x08c7, 0xd2c: 0x09b3, 0xd2d: 0x0ffb, 0xd2e: 0x1263, 0xd2f: 0x133b,
	0xd30: 0x0db7, 0xd31: 0x13f7, 0xd32: 0x0de3, 0xd33: 0x0c37, 0xd34: 0x121b, 0xd35: 0x0c57,
	0xd36: 0x0fab, 0xd37: 0x072b, 0xd38: 0x07a7, 0xd39: 0x07eb, 0xd3a: 0x0d53, 0xd3b: 0x10fb,
	0xd3c: 0x11f3, 0xd3d: 0x1347, 0xd3e: 0x145b, 0xd3f: 0x085b,
	// Block 0x35, offset 0xd40
	0xd40: 0x090f, 0xd41: 0x0a17, 0xd42: 0x0b2f, 0xd43: 0x0cbf, 0xd44: 0x0e7b, 0xd45: 0x103f,
	0xd46: 0x1497, 0xd47: 0x157b, 0xd48: 0x15cf, 0xd49: 0x15e7, 0xd4a: 0x0837, 0xd4b: 0x0cf3,
	0xd4c: 0x0da3, 0xd4d: 0x13eb, 0xd4e: 0x0afb, 0xd4f: 0x0bd7, 0xd50: 0x0bf3, 0xd51: 0x0c83,
	0xd52: 0x0e6b, 0xd53: 0x0eb7, 0xd54: 0x0f67, 0xd55: 0x108b, 0xd56: 0x112f, 0xd57: 0x1193,
	0xd58: 0x13db, 0xd59: 0x126b, 0xd5a: 0x1403, 0xd5b: 0x147f, 0xd5c: 0x080f, 0xd5d: 0x083b,
	0xd5e: 0x0923, 0xd5f: 0x0ea7, 0xd60: 0x12f3, 0xd61: 0x133b, 0xd62: 0x0b1b, 0xd63: 0x0b8b,
	0xd64: 0x0c4f, 0xd65: 0x0daf, 0xd66: 0x10d7, 0xd67: 0x0f23, 0xd68: 0x073b, 0xd69: 0x097f,
	0xd6a: 0x0a63, 0xd6b: 0x0ac7, 0xd6c: 0x0b97, 0xd6d: 0x0f3f, 0xd6e: 0x0f5b, 0xd6f: 0x116b,
	0xd70: 0x118b, 0xd71: 0x1463, 0xd72: 0x14e3, 0xd73: 0x14f3, 0xd74: 0x152f, 0xd75: 0x0753,
	0xd76: 0x107f, 0xd77: 0x144f, 0xd78: 0x14cb, 0xd79: 0x0baf, 0xd7a: 0x0717, 0xd7b: 0x0777,
	0xd7c: 0x0a67, 0xd7d: 0x0a87, 0xd7e: 0x0caf, 0xd7f: 0x0d73,
	// Block 0x36, offset 0xd80
	0xd80: 0x0ec3, 0xd81: 0x0fcb, 0xd82: 0x1277, 0xd83: 0x1417, 0xd84: 0x1623, 0xd85: 0x0ce3,
	0xd86: 0x14a3, 0xd87: 0x0833, 0xd88: 0x0d2f, 0xd89: 0x0d3b, 0xd8a: 0x0e0f, 0xd8b: 0x0e47,
	0xd8c: 0x0f4b, 0xd8d: 0x0fa7, 0xd8e: 0x1027, 0xd8f: 0x110b, 0xd90: 0x153b, 0xd91: 0x07af,
	0xd92: 0x0c03, 0xd93: 0x14b3, 0xd94: 0x0767, 0xd95: 0x0aab, 0xd96: 0x0e2f, 0xd97: 0x13df,
	0xd98: 0x0b67, 0xd99: 0x0bb7, 0xd9a: 0x0d43, 0xd9b: 0x0f2f, 0xd9c: 0x14bb, 0xd9d: 0x0817,
	0xd9e: 0x08ff, 0xd9f: 0x0a97, 0xda0: 0x0cd3, 0xda1: 0x0d1f, 0xda2: 0x0d5f, 0xda3: 0x0df3,
	0xda4: 0x0f47, 0xda5: 0x0fbb, 0xda6: 0x1157, 0xda7: 0x12f7, 0xda8: 0x1303, 0xda9: 0x1457,
	0xdaa: 0x14d7, 0xdab: 0x0883, 0xdac: 0x0e4b, 0xdad: 0x0903, 0xdae: 0x0ec7, 0xdaf: 0x0f6b,
	0xdb0: 0x1287, 0xdb1: 0x14bf, 0xdb2: 0x15ab, 0xdb3: 0x15d3, 0xdb4: 0x0d37, 0xdb5: 0x0e27,
	0xdb6: 0x11c3, 0xdb7: 0x10b7, 0xdb8: 0x10c3, 0xdb9: 0x10e7, 0xdba: 0x0f17, 0xdbb: 0x0e9f,
	0xdbc: 0x1363, 0xdbd: 0x0733, 0xdbe: 0x122b, 0xdbf: 0x081b,
	// Block 0x37, offset 0xdc0
	0xdc0: 0x080b, 0xdc1: 0x0b0b, 0xdc2: 0x0c2b, 0xdc3: 0x10f3, 0xdc4: 0x0a53, 0xdc5: 0x0e03,
	0xdc6: 0x0cef, 0xdc7: 0x13e7, 0xdc8: 0x12e7, 0xdc9: 0x14ab, 0xdca: 0x1323, 0xdcb: 0x0b27,
	0xdcc: 0x0787, 0xdcd: 0x095b, 0xdd0: 0x09af,
	0xdd2: 0x0cdf, 0xdd5: 0x07f7, 0xdd6: 0x0f1f, 0xdd7: 0x0fe3,
	0xdd8: 0x1047, 0xdd9: 0x1063, 0xdda: 0x1067, 0xddb: 0x107b, 0xddc: 0x14fb, 0xddd: 0x10eb,
	0xdde: 0x116f, 0xde0: 0x128f, 0xde2: 0x1353,
	0xde5: 0x1407, 0xde6: 0x1433,
	0xdea: 0x154f, 0xdeb: 0x1553, 0xdec: 0x1557, 0xded: 0x15bb, 0xdee: 0x142b, 0xdef: 0x14c7,
	0xdf0: 0x0757, 0xdf1: 0x077b, 0xdf2: 0x078f, 0xdf3: 0x084b, 0xdf4: 0x0857, 0xdf5: 0x0897,
	0xdf6: 0x094b, 0xdf7: 0x0967, 0xdf8: 0x096f, 0xdf9: 0x09ab, 0xdfa: 0x09b7, 0xdfb: 0x0a93,
	0xdfc: 0x0a9b, 0xdfd: 0x0ba3, 0xdfe: 0x0bcb, 0xdff: 0x0bd3,
	// Block 0x38, offset 0xe00
	0xe00: 0x0beb, 0xe01: 0x0c97, 0xe02: 0x0cc7, 0xe03: 0x0ce7, 0xe04: 0x0d57, 0xe05: 0x0e1b,
	0xe06: 0x0e37, 0xe07: 0x0e67, 0xe08: 0x0ebb, 0xe09: 0x0edb, 0xe0a: 0x0f4f, 0xe0b: 0x102f,
	0xe0c: 0x104b, 0xe0d: 0x1053, 0xe0e: 0x104f, 0xe0f: 0x1057, 0xe10: 0x105b, 0xe11: 0x105f,
	0xe12: 0x1073, 0xe13: 0x1077, 0xe14: 0x109b, 0xe15: 0x10af, 0xe16: 0x10cb, 0xe17: 0x112f,
	0xe18: 0x1137, 0xe19: 0x113f, 0xe1a: 0x1153, 0xe1b: 0x117b, 0xe1c: 0x11cb, 0xe1d: 0x11ff,
	0xe1e: 0x11ff, 0xe1f: 0x1267, 0xe20: 0x130f, 0xe21: 0x1327, 0xe22: 0x135b, 0xe23: 0x135f,
	0xe24: 0x13a3, 0xe25: 0x13a7, 0xe26: 0x13ff, 0xe27: 0x1407, 0xe28: 0x14db, 0xe29: 0x151f,
	0xe2a: 0x1537, 0xe2b: 0x0b9b, 0xe2c: 0x171e, 0xe2d: 0x11e3,
	0xe30: 0x06df, 0xe31: 0x07e3, 0xe32: 0x07a3, 0xe33: 0x074b, 0xe34: 0x078b, 0xe35: 0x07b7,
	0xe36: 0x0847, 0xe37: 0x0863, 0xe38: 0x094b, 0xe39: 0x0937, 0xe3a: 0x0947, 0xe3b: 0x0963,
	0xe3c: 0x09af, 0xe3d: 0x09bf, 0xe3e: 0x0a03, 0xe3f: 0x0a0f,
	// Block 0x39, offset 0xe40
	0xe40: 0x0a2b, 0xe41: 0x0a3b, 0xe42: 0x0b23, 0xe43: 0x0b2b, 0xe44: 0x0b5b, 0xe45: 0x0b7b,
	0xe46: 0x0bab, 0xe47: 0x0bc3, 0xe48: 0x0bb3, 0xe49: 0x0bd3, 0xe4a: 0x0bc7, 0xe4b: 0x0beb,
	0xe4c: 0x0c07, 0xe4d: 0x0c5f, 0xe4e: 0x0c6b, 0xe4f: 0x0c73, 0xe50: 0x0c9b, 0xe51: 0x0cdf,
	0xe52: 0x0d0f, 0xe53: 0x0d13, 0xe54: 0x0d27, 0xe55: 0x0da7, 0xe56: 0x0db7, 0xe57: 0x0e0f,
	0xe58: 0x0e5b, 0xe59: 0x0e53, 0xe5a: 0x0e67, 0xe5b: 0x0e83, 0xe5c: 0x0ebb, 0xe5d: 0x1013,
	0xe5e: 0x0edf, 0xe5f: 0x0f13, 0xe60: 0x0f1f, 0xe61: 0x0f5f, 0xe62: 0x0f7b, 0xe63: 0x0f9f,
	0xe64: 0x0fc3, 0xe65: 0x0fc7, 0xe66: 0x0fe3, 0xe67: 0x0fe7, 0xe68: 0x0ff7, 0xe69: 0x100b,
	0xe6a: 0x1007, 0xe6b: 0x1037, 0xe6c: 0x10b3, 0xe6d: 0x10cb, 0xe6e: 0x10e3, 0xe6f: 0x111b,
	0xe70: 0x112f, 0xe71: 0x114b, 0xe72: 0x117b, 0xe73: 0x122f, 0xe74: 0x1257, 0xe75: 0x12cb,
	0xe76: 0x1313, 0xe77: 0x131f, 0xe78: 0x1327, 0xe79: 0x133f, 0xe7a: 0x1353, 0xe7b: 0x1343,
	0xe7c: 0x135b, 0xe7d: 0x1357, 0xe7e: 0x134f, 0xe7f: 0x135f,
	// Block 0x3a, offset 0xe80
	0xe80: 0x136b, 0xe81: 0x13a7, 0xe82: 0x13e3, 0xe83: 0x1413, 0xe84: 0x144b, 0xe85: 0x146b,
	0xe86: 0x14b7, 0xe87: 0x14db, 0xe88: 0x14fb, 0xe89: 0x150f, 0xe8a: 0x151f, 0xe8b: 0x152b,
	0xe8c: 0x1537, 0xe8d: 0x158b, 0xe8e: 0x162b, 0xe8f: 0x16b5, 0xe90: 0x16b0, 0xe91: 0x16e2,
	0xe92: 0x0607, 0xe93: 0x062f, 0xe94: 0x0633, 0xe95: 0x1764, 0xe96: 0x1791, 0xe97: 0x1809,
	0xe98: 0x1617, 0xe99: 0x1627,
	// Block 0x3b, offset 0xec0
	0xec0: 0x19d5, 0xec1: 0x19d8, 0xec2: 0x19db, 0xec3: 0x1c08, 0xec4: 0x1c0c, 0xec5: 0x1a5f,
	0xec6: 0x1a5f,
	0xed3: 0x1d75, 0xed4: 0x1d66, 0xed5: 0x1d6b, 0xed6: 0x1d7a, 0xed7: 0x1d70,
	0xedd: 0x4390,
	0xede: 0x8115, 0xedf: 0x4402, 0xee0: 0x022d, 0xee1: 0x0215, 0xee2: 0x021e, 0xee3: 0x0221,
	0xee4: 0x0224, 0xee5: 0x0227, 0xee6: 0x022a, 0xee7: 0x0230, 0xee8: 0x0233, 0xee9: 0x0017,
	0xeea: 0x43f0, 0xeeb: 0x43f6, 0xeec: 0x44f4, 0xeed: 0x44fc, 0xeee: 0x4348, 0xeef: 0x434e,
	0xef0: 0x4354, 0xef1: 0x435a, 0xef2: 0x4366, 0xef3: 0x436c, 0xef4: 0x4372, 0xef5: 0x437e,
	0xef6: 0x4384, 0xef8: 0x438a, 0xef9: 0x4396, 0xefa: 0x439c, 0xefb: 0x43a2,
	0xefc: 0x43ae, 0xefe: 0x43b4,
	// Block 0x3c, offset 0xf00
	0xf00: 0x43ba, 0xf01: 0x43c0, 0xf03: 0x43c6, 0xf04: 0x43cc,
	0xf06: 0x43d8, 0xf07: 0x43de, 0xf08: 0x43e4, 0xf09: 0x43ea, 0xf0a: 0x43fc, 0xf0b: 0x4378,
	0xf0c: 0x4360, 0xf0d: 0x43a8, 0xf0e: 0x43d2, 0xf0f: 0x1d7f, 0xf10: 0x0299, 0xf11: 0x0299,
	0xf12: 0x02a2, 0xf13: 0x02a2, 0xf14: 0x02a2, 0xf15: 0x02a2, 0xf16: 0x02a5, 0xf17: 0x02a5,
	0xf18: 0x02a5, 0xf19: 0x02a5, 0xf1a: 0x02ab, 0xf1b: 0x02ab, 0xf1c: 0x02ab, 0xf1d: 0x02ab,
	0xf1e: 0x029f, 0xf1f: 0x029f, 0xf20: 0x029f, 0xf21: 0x029f, 0xf22: 0x02a8, 0xf23: 0x02a8,
	0xf24: 0x02a8, 0xf25: 0x02a8, 0xf26: 0x029c, 0xf27: 0x029c, 0xf28: 0x029c, 0xf29: 0x029c,
	0xf2a: 0x02cf, 0xf2b: 0x02cf, 0xf2c: 0x02cf, 0xf2d: 0x02cf, 0xf2e: 0x02d2, 0xf2f: 0x02d2,
	0xf30: 0x02d2, 0xf31: 0x02d2, 0xf32: 0x02b1, 0xf33: 0x02b1, 0xf34: 0x02b1, 0xf35: 0x02b1,
	0xf36: 0x02ae, 0xf37: 0x02ae, 0xf38: 0x02ae, 0xf39: 0x02ae, 0xf3a: 0x02b4, 0xf3b: 0x02b4,
	0xf3c: 0x02b4, 0xf3d: 0x02b4, 0xf3e: 0x02b7, 0xf3f: 0x02b7,
	// Block 0x3d, offset 0xf40
	0xf40: 0x02b7, 0xf41: 0x02b7, 0xf42: 0x02c0, 0xf43: 0x02c0, 0xf44: 0x02bd, 0xf45: 0x02bd,
	0xf46: 0x02c3, 0xf47: 0x02c3, 0xf48: 0x02ba, 0xf49: 0x02ba, 0xf4a: 0x02c9, 0xf4b: 0x02c9,
	0xf4c: 0x02c6, 0xf4d: 0x02c6, 0xf4e: 0x02d5, 0xf4f: 0x02d5, 0xf50: 0x02d5, 0xf51: 0x02d5,
	0xf52: 0x02db, 0xf53: 0x02db, 0xf54: 0x02db, 0xf55: 0x02db, 0xf56: 0x02e1, 0xf57: 0x02e1,
	0xf58: 0x02e1, 0xf59: 0x02e1, 0xf5a: 0x02de, 0xf5b: 0x02de, 0xf5c: 0x02de, 0xf5d: 0x02de,
	0xf5e: 0x02e4, 0xf5f: 0x02e4, 0xf60: 0x02e7, 0xf61: 0x02e7, 0xf62: 0x02e7, 0xf63: 0x02e7,
	0xf64: 0x446e, 0xf65: 0x446e, 0xf66: 0x02ed, 0xf67: 0x02ed, 0xf68: 0x02ed, 0xf69: 0x02ed,
	0xf6a: 0x02ea, 0xf6b: 0x02ea, 0xf6c: 0x02ea, 0xf6d: 0x02ea, 0xf6e: 0x0308, 0xf6f: 0x0308,
	0xf70: 0x4468, 0xf71: 0x4468,
	// Block 0x3e, offset 0xf80
	0xf93: 0x02d8, 0xf94: 0x02d8, 0xf95: 0x02d8, 0xf96: 0x02d8, 0xf97: 0x02f6,
	0xf98: 0x02f6, 0xf99: 0x02f3, 0xf9a: 0x02f3, 0xf9b: 0x02f9, 0xf9c: 0x02f9, 0xf9d: 0x204f,
	0xf9e: 0x02ff, 0xf9f: 0x02ff, 0xfa0: 0x02f0, 0xfa1: 0x02f0, 0xfa2: 0x02fc, 0xfa3: 0x02fc,
	0xfa4: 0x0305, 0xfa5: 0x0305, 0xfa6: 0x0305, 0xfa7: 0x0305, 0xfa8: 0x028d, 0xfa9: 0x028d,
	0xfaa: 0x25aa, 0xfab: 0x25aa, 0xfac: 0x261a, 0xfad: 0x261a, 0xfae: 0x25e9, 0xfaf: 0x25e9,
	0xfb0: 0x2605, 0xfb1: 0x2605, 0xfb2: 0x25fe, 0xfb3: 0x25fe, 0xfb4: 0x260c, 0xfb5: 0x260c,
	0xfb6: 0x2613, 0xfb7: 0x2613, 0xfb8: 0x2613, 0xfb9: 0x25f0, 0xfba: 0x25f0, 0xfbb: 0x25f0,
	0xfbc: 0x0302, 0xfbd: 0x0302, 0xfbe: 0x0302, 0xfbf: 0x0302,
	// Block 0x3f, offset 0xfc0
	0xfc0: 0x25b1, 0xfc1: 0x25b8, 0xfc2: 0x25d4, 0xfc3: 0x25f0, 0xfc4: 0x25f7, 0xfc5: 0x1d89,
	0xfc6: 0x1d8e, 0xfc7: 0x1d93, 0xfc8: 0x1da2, 0xfc9: 0x1db1, 0xfca: 0x1db6, 0xfcb: 0x1dbb,
	0xfcc: 0x1dc0, 0xfcd: 0x1dc5, 0xfce: 0x1dd4, 0xfcf: 0x1de3, 0xfd0: 0x1de8, 0xfd1: 0x1ded,
	0xfd2: 0x1dfc, 0xfd3: 0x1e0b, 0xfd4: 0x1e10, 0xfd5: 0x1e15, 0xfd6: 0x1e1a, 0xfd7: 0x1e29,
	0xfd8: 0x1e2e, 0xfd9: 0x1e3d, 0xfda: 0x1e42, 0xfdb: 0x1e47, 0xfdc: 0x1e56, 0xfdd: 0x1e5b,
	0xfde: 0x1e60, 0xfdf: 0x1e6a, 0xfe0: 0x1ea6, 0xfe1: 0x1eb5, 0xfe2: 0x1ec4, 0xfe3: 0x1ec9,
	0xfe4: 0x1ece, 0xfe5: 0x1ed8, 0xfe6: 0x1ee7, 0xfe7: 0x1eec, 0xfe8: 0x1efb, 0xfe9: 0x1f00,
	0xfea: 0x1f05, 0xfeb: 0x1f14, 0xfec: 0x1f19, 0xfed: 0x1f28, 0xfee: 0x1f2d, 0xfef: 0x1f32,
	0xff0: 0x1f37, 0xff1: 0x1f3c, 0xff2: 0x1f41, 0xff3: 0x1f46, 0xff4: 0x1f4b, 0xff5: 0x1f50,
	0xff6: 0x1f55, 0xff7: 0x1f5a, 0xff8: 0x1f5f, 0xff9: 0x1f64, 0xffa: 0x1f69, 0xffb: 0x1f6e,
	0xffc: 0x1f73, 0xffd: 0x1f78, 0xffe: 0x1f7d, 0xfff: 0x1f87,
	// Block 0x40, offset 0x1000
	0x1000: 0x1f8c, 0x1001: 0x1f91, 0x1002: 0x1f96, 0x1003: 0x1fa0, 0x1004: 0x1fa5, 0x1005: 0x1faf,
	0x1006: 0x1fb4, 0x1007: 0x1fb9, 0x1008: 0x1fbe, 0x1009: 0x1fc3, 0x100a: 0x1fc8, 0x100b: 0x1fcd,
	0x100c: 0x1fd2, 0x100d: 0x1fd7, 0x100e: 0x1fe6, 0x100f: 0x1ff5, 0x1010: 0x1ffa, 0x1011: 0x1fff,
	0x1012: 0x2004, 0x1013: 0x2009, 0x1014: 0x200e, 0x1015: 0x2018, 0x1016: 0x201d, 0x1017: 0x2022,
	0x1018: 0x2031, 0x1019: 0x2040, 0x101a: 0x2045, 0x101b: 0x4420, 0x101c: 0x4426, 0x101d: 0x445c,
	0x101e: 0x44b3, 0x101f: 0x44ba, 0x1020: 0x44c1, 0x1021: 0x44c8, 0x1022: 0x44cf, 0x1023: 0x44d6,
	0x1024: 0x25c6, 0x1025: 0x25cd, 0x1026: 0x25d4, 0x1027: 0x25db, 0x1028: 0x25f0, 0x1029: 0x25f7,
	0x102a: 0x1d98, 0x102b: 0x1d9d, 0x102c: 0x1da2, 0x102d: 0x1da7, 0x102e: 0x1db1, 0x102f: 0x1db6,
	0x1030: 0x1dca, 0x1031: 0x1dcf, 0x1032: 0x1dd4, 0x1033: 0x1dd9, 0x1034: 0x1de3, 0x1035: 0x1de8,
	0x1036: 0x1df2, 0x1037: 0x1df7, 0x1038: 0x1dfc, 0x1039: 0x1e01, 0x103a: 0x1e0b, 0x103b: 0x1e10,
	0x103c: 0x1f3c, 0x103d: 0x1f41, 0x103e: 0x1f50, 0x103f: 0x1f55,
	// Block 0x41, offset 0x1040
	0x1040: 0x1f5a, 0x1041: 0x1f6e, 0x1042: 0x1f73, 0x1043: 0x1f78, 0x1044: 0x1f7d, 0x1045: 0x1f96,
	0x1046: 0x1fa0, 0x1047: 0x1fa5, 0x1048: 0x1faa, 0x1049: 0x1fbe, 0x104a: 0x1fdc, 0x104b: 0x1fe1,
	0x104c: 0x1fe6, 0x104d: 0x1feb, 0x104e: 0x1ff5, 0x104f: 0x1ffa, 0x1050: 0x445c, 0x1051: 0x2027,
	0x1052: 0x202c, 0x1053: 0x2031, 0x1054: 0x2036, 0x1055: 0x2040, 0x1056: 0x2045, 0x1057: 0x25b1,
	0x1058: 0x25b8, 0x1059: 0x25bf, 0x105a: 0x25d4, 0x105b: 0x25e2, 0x105c: 0x1d89, 0x105d: 0x1d8e,
	0x105e: 0x1d93, 0x105f: 0x1da2, 0x1060: 0x1dac, 0x1061: 0x1dbb, 0x1062: 0x1dc0, 0x1063: 0x1dc5,
	0x1064: 0x1dd4, 0x1065: 0x1dde, 0x1066: 0x1dfc, 0x1067: 0x1e15, 0x1068: 0x1e1a, 0x1069: 0x1e29,
	0x106a: 0x1e2e, 0x106b: 0x1e3d, 0x106c: 0x1e47, 0x106d: 0x1e56, 0x106e: 0x1e5b, 0x106f: 0x1e60,
	0x1070: 0x1e6a, 0x1071: 0x1ea6, 0x1072: 0x1eab, 0x1073: 0x1eb5, 0x1074: 0x1ec4, 0x1075: 0x1ec9,
	0x1076: 0x1ece, 0x1077: 0x1ed8, 0x1078: 0x1ee7, 0x1079: 0x1efb, 0x107a: 0x1f00, 0x107b: 0x1f05,
	0x107c: 0x1f14, 0x107d: 0x1f19, 0x107e: 0x1f28, 0x107f: 0x1f2d,
	// Block 0x42, offset 0x1080
	0x1080: 0x1f32, 0x1081: 0x1f37, 0x1082: 0x1f46, 0x1083: 0x1f4b, 0x1084: 0x1f5f, 0x1085: 0x1f64,
	0x1086: 0x1f69, 0x1087: 0x1f6e, 0x1088: 0x1f73, 0x1089: 0x1f87, 0x108a: 0x1f8c, 0x108b: 0x1f91,
	0x108c: 0x1f96, 0x108d: 0x1f9b, 0x108e: 0x1faf, 0x108f: 0x1fb4, 0x1090: 0x1fb9, 0x1091: 0x1fbe,
	0x1092: 0x1fcd, 0x1093: 0x1fd2, 0x1094: 0x1fd7, 0x1095: 0x1fe6, 0x1096: 0x1ff0, 0x1097: 0x1fff,
	0x1098: 0x2004, 0x1099: 0x4450, 0x109a: 0x2018, 0x109b: 0x201d, 0x109c: 0x2022, 0x109d: 0x2031,
	0x109e: 0x203b, 0x109f: 0x25d4, 0x10a0: 0x25e2, 0x10a1: 0x1da2, 0x10a2: 0x1dac, 0x10a3: 0x1dd4,
	0x10a4: 0x1dde, 0x10a5: 0x1dfc, 0x10a6: 0x1e06, 0x10a7: 0x1e6a, 0x10a8: 0x1e6f, 0x10a9: 0x1e92,
	0x10aa: 0x1e97, 0x10ab: 0x1f6e, 0x10ac: 0x1f73, 0x10ad: 0x1f96, 0x10ae: 0x1fe6, 0x10af: 0x1ff0,
	0x10b0: 0x2031, 0x10b1: 0x203b, 0x10b2: 0x4504, 0x10b3: 0x450c, 0x10b4: 0x4514, 0x10b5: 0x1ef1,
	0x10b6: 0x1ef6, 0x10b7: 0x1f0a, 0x10b8: 0x1f0f, 0x10b9: 0x1f1e, 0x10ba: 0x1f23, 0x10bb: 0x1e74,
	0x10bc: 0x1e79, 0x10bd: 0x1e9c, 0x10be: 0x1ea1, 0x10bf: 0x1e33,
	// Block 0x43, offset 0x10c0
	0x10c0: 0x1e38, 0x10c1: 0x1e1f, 0x10c2: 0x1e24, 0x10c3: 0x1e4c, 0x10c4: 0x1e51, 0x10c5: 0x1eba,
	0x10c6: 0x1ebf, 0x10c7: 0x1edd, 0x10c8: 0x1ee2, 0x10c9: 0x1e7e, 0x10ca: 0x1e83, 0x10cb: 0x1e88,
	0x10cc: 0x1e92, 0x10cd: 0x1e8d, 0x10ce: 0x1e65, 0x10cf: 0x1eb0, 0x10d0: 0x1ed3, 0x10d1: 0x1ef1,
	0x10d2: 0x1ef6, 0x10d3: 0x1f0a, 0x10d4: 0x1f0f, 0x10d5: 0x1f1e, 0x10d6: 0x1f23, 0x10d7: 0x1e74,
	0x10d8: 0x1e79, 0x10d9: 0x1e9c, 0x10da: 0x1ea1, 0x10db: 0x1e33, 0x10dc: 0x1e38, 0x10dd: 0x1e1f,
	0x10de: 0x1e24, 0x10df: 0x1e4c, 0x10e0: 0x1e51, 0x10e1: 0x1eba, 0x10e2: 0x1ebf, 0x10e3: 0x1edd,
	0x10e4: 0x1ee2, 0x10e5: 0x1e7e, 0x10e6: 0x1e83, 0x10e7: 0x1e88, 0x10e8: 0x1e92, 0x10e9: 0x1e8d,
	0x10ea: 0x1e65, 0x10eb: 0x1eb0, 0x10ec: 0x1ed3, 0x10ed: 0x1e7e, 0x10ee: 0x1e83, 0x10ef: 0x1e88,
	0x10f0: 0x1e92, 0x10f1: 0x1e6f, 0x10f2: 0x1e97, 0x10f3: 0x1eec, 0x10f4: 0x1e56, 0x10f5: 0x1e5b,
	0x10f6: 0x1e60, 0x10f7: 0x1e7e, 0x10f8: 0x1e83, 0x10f9: 0x1e88, 0x10fa: 0x1eec, 0x10fb: 0x1efb,
	0x10fc: 0x4408, 0x10fd: 0x4408,
	// Block 0x44, offset 0x1100
	0x1110: 0x2311, 0x1111: 0x2326,
	0x1112: 0x2326, 0x1113: 0x232d, 0x1114: 0x2334, 0x1115: 0x2349, 0x1116: 0x2350, 0x1117: 0x2357,
	0x1118: 0x237a, 0x1119: 0x237a, 0x111a: 0x239d, 0x111b: 0x2396, 0x111c: 0x23b2, 0x111d: 0x23a4,
	0x111e: 0x23ab, 0x111f: 0x23ce, 0x1120: 0x23ce, 0x1121: 0x23c7, 0x1122: 0x23d5, 0x1123: 0x23d5,
	0x1124: 0x23ff, 0x1125: 0x23ff, 0x1126: 0x241b, 0x1127: 0x23e3, 0x1128: 0x23e3, 0x1129: 0x23dc,
	0x112a: 0x23f1, 0x112b: 0x23f1, 0x112c: 0x23f8, 0x112d: 0x23f8, 0x112e: 0x2422, 0x112f: 0x2430,
	0x1130: 0x2430, 0x1131: 0x2437, 0x1132: 0x2437, 0x1133: 0x243e, 0x1134: 0x2445, 0x1135: 0x244c,
	0x1136: 0x2453, 0x1137: 0x2453, 0x1138: 0x245a, 0x1139: 0x2468, 0x113a: 0x2476, 0x113b: 0x246f,
	0x113c: 0x247d, 0x113d: 0x247d, 0x113e: 0x2492, 0x113f: 0x2499,
	// Block 0x45, offset 0x1140
	0x1140: 0x24ca, 0x1141: 0x24d8, 0x1142: 0x24d1, 0x1143: 0x24b5, 0x1144: 0x24b5, 0x1145: 0x24df,
	0x1146: 0x24df, 0x1147: 0x24e6, 0x1148: 0x24e6, 0x1149: 0x2510, 0x114a: 0x2517, 0x114b: 0x251e,
	0x114c: 0x24f4, 0x114d: 0x2502, 0x114e: 0x2525, 0x114f: 0x252c,
	0x1152: 0x24fb, 0x1153: 0x2580, 0x1154: 0x2587, 0x1155: 0x255d, 0x1156: 0x2564, 0x1157: 0x2548,
	0x1158: 0x2548, 0x1159: 0x254f, 0x115a: 0x2579, 0x115b: 0x2572, 0x115c: 0x259c, 0x115d: 0x259c,
	0x115e: 0x230a, 0x115f: 0x231f, 0x1160: 0x2318, 0x1161: 0x2342, 0x1162: 0x233b, 0x1163: 0x2365,
	0x1164: 0x235e, 0x1165: 0x2388, 0x1166: 0x236c, 0x1167: 0x2381, 0x1168: 0x23b9, 0x1169: 0x2406,
	0x116a: 0x23ea, 0x116b: 0x2429, 0x116c: 0x24c3, 0x116d: 0x24ed, 0x116e: 0x2595, 0x116f: 0x258e,
	0x1170: 0x25a3, 0x1171: 0x253a, 0x1172: 0x24a0, 0x1173: 0x256b, 0x1174: 0x2492, 0x1175: 0x24ca,
	0x1176: 0x2461, 0x1177: 0x24ae, 0x1178: 0x2541, 0x1179: 0x2533, 0x117a: 0x24bc, 0x117b: 0x24a7,
	0x117c: 0x24bc, 0x117d: 0x2541, 0x117e: 0x2373, 0x117f: 0x238f,
	// Block 0x46, offset 0x1180
	0x1180: 0x2509, 0x1181: 0x2484, 0x1182: 0x2303, 0x1183: 0x24a7, 0x1184: 0x244c, 0x1185: 0x241b,
	0x1186: 0x23c0, 0x1187: 0x2556,
	0x11b0: 0x2414, 0x11b1: 0x248b, 0x11b2: 0x27bf, 0x11b3: 0x27b6, 0x11b4: 0x27ec, 0x11b5: 0x27da,
	0x11b6: 0x27c8, 0x11b7: 0x27e3, 0x11b8: 0x27f5, 0x11b9: 0x240d, 0x11ba: 0x2c7c, 0x11bb: 0x2afc,
	0x11bc: 0x27d1,
	// Block 0x47, offset 0x11c0
	0x11d0: 0x0019, 0x11d1: 0x0483,
	0x11d2: 0x0487, 0x11d3: 0x0035, 0x11d4: 0x0037, 0x11d5: 0x0003, 0x11d6: 0x003f, 0x11d7: 0x04bf,
	0x11d8: 0x04c3, 0x11d9: 0x1b5c,
	0x11e0: 0x8132, 0x11e1: 0x8132, 0x11e2: 0x8132, 0x11e3: 0x8132,
	0x11e4: 0x8132, 0x11e5: 0x8132, 0x11e6: 0x8132, 0x11e7: 0x812d, 0x11e8: 0x812d, 0x11e9: 0x812d,
	0x11ea: 0x812d, 0x11eb: 0x812d, 0x11ec: 0x812d, 0x11ed: 0x812d, 0x11ee: 0x8132, 0x11ef: 0x8132,
	0x11f0: 0x1873, 0x11f1: 0x0443, 0x11f2: 0x043f, 0x11f3: 0x007f, 0x11f4: 0x007f, 0x11f5: 0x0011,
	0x11f6: 0x0013, 0x11f7: 0x00b7, 0x11f8: 0x00bb, 0x11f9: 0x04b7, 0x11fa: 0x04bb, 0x11fb: 0x04ab,
	0x11fc: 0x04af, 0x11fd: 0x0493, 0x11fe: 0x0497, 0x11ff: 0x048b,
	// Block 0x48, offset 0x1200
	0x1200: 0x048f, 0x1201: 0x049b, 0x1202: 0x049f, 0x1203: 0x04a3, 0x1204: 0x04a7,
	0x1207: 0x0077, 0x1208: 0x007b, 0x1209: 0x4269, 0x120a: 0x4269, 0x120b: 0x4269,
	0x120c: 0x4269, 0x120d: 0x007f, 0x120e: 0x007f, 0x120f: 0x007f, 0x1210: 0x0019, 0x1211: 0x0483,
	0x1212: 0x001d, 0x1214: 0x0037, 0x1215: 0x0035, 0x1216: 0x003f, 0x1217: 0x0003,
	0x1218: 0x0443, 0x1219: 0x0011, 0x121a: 0x0013, 0x121b: 0x00b7, 0x121c: 0x00bb, 0x121d: 0x04b7,
	0x121e: 0x04bb, 0x121f: 0x0007, 0x1220: 0x000d, 0x1221: 0x0015, 0x1222: 0x0017, 0x1223: 0x001b,
	0x1224: 0x0039, 0x1225: 0x003d, 0x1226: 0x003b, 0x1228: 0x0079, 0x1229: 0x0009,
	0x122a: 0x000b, 0x122b: 0x0041,
	0x1230: 0x42aa, 0x1231: 0x442c, 0x1232: 0x42af, 0x1234: 0x42b4,
	0x1236: 0x42b9, 0x1237: 0x4432, 0x1238: 0x42be, 0x1239: 0x4438, 0x123a: 0x42c3, 0x123b: 0x443e,
	0x123c: 0x42c8, 0x123d: 0x4444, 0x123e: 0x42cd, 0x123f: 0x444a,
	// Block 0x49, offset 0x1240
	0x1240: 0x0236, 0x1241: 0x440e, 0x1242: 0x440e, 0x1243: 0x4414, 0x1244: 0x4414, 0x1245: 0x4456,
	0x1246: 0x4456, 0x1247: 0x441a, 0x1248: 0x441a, 0x1249: 0x4462, 0x124a: 0x4462, 0x124b: 0x4462,
	0x124c: 0x4462, 0x124d: 0x0239, 0x124e: 0x0239, 0x124f: 0x023c, 0x1250: 0x023c, 0x1251: 0x023c,
	0x1252: 0x023c, 0x1253: 0x023f, 0x1254: 0x023f, 0x1255: 0x0242, 0x1256: 0x0242, 0x1257: 0x0242,
	0x1258: 0x0242, 0x1259: 0x0245, 0x125a: 0x0245, 0x125b: 0x0245, 0x125c: 0x0245, 0x125d: 0x0248,
	0x125e: 0x0248, 0x125f: 0x0248, 0x1260: 0x0248, 0x1261: 0x024b, 0x1262: 0x024b, 0x1263: 0x024b,
	0x1264: 0x024b, 0x1265: 0x024e, 0x1266: 0x024e, 0x1267: 0x024e, 0x1268: 0x024e, 0x1269: 0x0251,
	0x126a: 0x0251, 0x126b: 0x0254, 0x126c: 0x0254, 0x126d: 0x0257, 0x126e: 0x0257, 0x126f: 0x025a,
	0x1270: 0x025a, 0x1271: 0x025d, 0x1272: 0x025d, 0x1273: 0x025d, 0x1274: 0x025d, 0x1275: 0x0260,
	0x1276: 0x0260, 0x1277: 0x0260, 0x1278: 0x0260, 0x1279: 0x0263, 0x127a: 0x0263, 0x127b: 0x0263,
	0x127c: 0x0263, 0x127d: 0x0266, 0x127e: 0x0266, 0x127f: 0x0266,
	// Block 0x4a, offset 0x1280
	0x1280: 0x0266, 0x1281: 0x0269, 0x1282: 0x0269, 0x1283: 0x0269, 0x1284: 0x0269, 0x1285: 0x026c,
	0x1286: 0x026c, 0x1287: 0x026c, 0x1288: 0x026c, 0x1289: 0x026f, 0x128a: 0x026f, 0x128b: 0x026f,
	0x128c: 0x026f, 0x128d: 0x0272, 0x128e: 0x0272, 0x128f: 0x0272, 0x1290: 0x0272, 0x1291: 0x0275,
	0x1292: 0x0275, 0x1293: 0x0275, 0x1294: 0x0275, 0x1295: 0x0278, 0x1296: 0x0278, 0x1297: 0x0278,
	0x1298: 0x0278, 0x1299: 0x027b, 0x129a: 0x027b, 0x129b: 0x027b, 0x129c: 0x027b, 0x129d: 0x027e,
	0x129e: 0x027e, 0x129f: 0x027e, 0x12a0: 0x027e, 0x12a1: 0x0281, 0x12a2: 0x0281, 0x12a3: 0x0281,
	0x12a4: 0x0281, 0x12a5: 0x0284, 0x12a6: 0x0284, 0x12a7: 0x0284, 0x12a8: 0x0284, 0x12a9: 0x0287,
	0x12aa: 0x0287, 0x12ab: 0x0287, 0x12ac: 0x0287, 0x12ad: 0x028a, 0x12ae: 0x028a, 0x12af: 0x028d,
	0x12b0: 0x028d, 0x12b1: 0x0290, 0x12b2: 0x0290, 0x12b3: 0x0290, 0x12b4: 0x0290, 0x12b5: 0x2e00,
	0x12b6: 0x2e00, 0x12b7: 0x2e08, 0x12b8: 0x2e08, 0x12b9: 0x2e10, 0x12ba: 0x2e10, 0x12bb: 0x1f82,
	0x12bc: 0x1f82,
	// Block 0x4b, offset 0x12c0
	0x12c0: 0x0081, 0x12c1: 0x0083, 0x12c2: 0x0085, 0x12c3: 0x0087, 0x12c4: 0x0089, 0x12c5: 0x008b,
	0x12c6: 0x008d, 0x12c7: 0x008f, 0x12c8: 0x0091, 0x12c9: 0x0093, 0x12ca: 0x0095, 0x12cb: 0x0097,
	0x12cc: 0x0099, 0x12cd: 0x009b, 0x12ce: 0x009d, 0x12cf: 0x009f, 0x12d0: 0x00a1, 0x12d1: 0x00a3,
	0x12d2: 0x00a5, 0x12d3: 0x00a7, 0x12d4: 0x00a9, 0x12d5: 0x00ab, 0x12d6: 0x00ad, 0x12d7: 0x00af,
	0x12d8: 0x00b1, 0x12d9: 0x00b3, 0x12da: 0x00b5, 0x12db: 0x00b7, 0x12dc: 0x00b9, 0x12dd: 0x00bb,
	0x12de: 0x00bd, 0x12df: 0x0477, 0x12e0: 0x047b, 0x12e1: 0x0487, 0x12e2: 0x049b, 0x12e3: 0x049f,
	0x12e4: 0x0483, 0x12e5: 0x05ab, 0x12e6: 0x05a3, 0x12e7: 0x04c7, 0x12e8: 0x04cf, 0x12e9: 0x04d7,
	0x12ea: 0x04df, 0x12eb: 0x04e7, 0x12ec: 0x056b, 0x12ed: 0x0573, 0x12ee: 0x057b, 0x12ef: 0x051f,
	0x12f0: 0x05af, 0x12f1: 0x04cb, 0x12f2: 0x04d3, 0x12f3: 0x04db, 0x12f4: 0x04e3, 0x12f5: 0x04eb,
	0x12f6: 0x04ef, 0x12f7: 0x04f3, 0x12f8: 0x04f7, 0x12f9: 0x04fb, 0x12fa: 0x04ff, 0x12fb: 0x0503,
	0x12fc: 0x0507, 0x12fd: 0x050b, 0x12fe: 0x050f, 0x12ff: 0x0513,
	// Block 0x4c, offset 0x1300
	0x1300: 0x0517, 0x1301: 0x051b, 0x1302: 0x0523, 0x1303: 0x0527, 0x1304: 0x052b, 0x1305: 0x052f,
	0x1306: 0x0533, 0x1307: 0x0537, 0x1308: 0x053b, 0x1309: 0x053f, 0x130a: 0x0543, 0x130b: 0x0547,
	0x130c: 0x054b, 0x130d: 0x054f, 0x130e: 0x0553, 0x130f: 0x0557, 0x1310: 0x055b, 0x1311: 0x055f,
	0x1312: 0x0563, 0x1313: 0x0567, 0x1314: 0x056f, 0x1315: 0x0577, 0x1316: 0x057f, 0x1317: 0x0583,
	0x1318: 0x0587, 0x1319: 0x058b, 0x131a: 0x058f, 0x131b: 0x0593, 0x131c: 0x0597, 0x131d: 0x05a7,
	0x131e: 0x4a78, 0x131f: 0x4a7e, 0x1320: 0x03c3, 0x1321: 0x0313, 0x1322: 0x0317, 0x1323: 0x4a3b,
	0x1324: 0x031b, 0x1325: 0x4a41, 0x1326: 0x4a47, 0x1327: 0x031f, 0x1328: 0x0323, 0x1329: 0x0327,
	0x132a: 0x4a4d, 0x132b: 0x4a53, 0x132c: 0x4a59, 0x132d: 0x4a5f, 0x132e: 0x4a65, 0x132f: 0x4a6b,
	0x1330: 0x0367, 0x1331: 0x032b, 0x1332: 0x032f, 0x1333: 0x0333, 0x1334: 0x037b, 0x1335: 0x0337,
	0x1336: 0x033b, 0x1337: 0x033f, 0x1338: 0x0343, 0x1339: 0x0347, 0x133a: 0x034b, 0x133b: 0x034f,
	0x133c: 0x0353, 0x133d: 0x0357, 0x133e: 0x035b,
	// Block 0x4d, offset 0x1340
	0x1342: 0x49bd, 0x1343: 0x49c3, 0x1344: 0x49c9, 0x1345: 0x49cf,
	0x1346: 0x49d5, 0x1347: 0x49db, 0x134a: 0x49e1, 0x134b: 0x49e7,
	0x134c: 0x49ed, 0x134d: 0x49f3, 0x134e: 0x49f9, 0x134f: 0x49ff,
	0x1352: 0x4a05, 0x1353: 0x4a0b, 0x1354: 0x4a11, 0x1355: 0x4a17, 0x1356: 0x4a1d, 0x1357: 0x4a23,
	0x135a: 0x4a29, 0x135b: 0x4a2f, 0x135c: 0x4a35,
	0x1360: 0x00bf, 0x1361: 0x00c2, 0x1362: 0x00cb, 0x1363: 0x4264,
	0x1364: 0x00c8, 0x1365: 0x00c5, 0x1366: 0x0447, 0x1368: 0x046b, 0x1369: 0x044b,
	0x136a: 0x044f, 0x136b: 0x0453, 0x136c: 0x0457, 0x136d: 0x046f, 0x136e: 0x0473,
	// Block 0x4e, offset 0x1380
	0x1380: 0x0063, 0x1381: 0x0065, 0x1382: 0x0067, 0x1383: 0x0069, 0x1384: 0x006b, 0x1385: 0x006d,
	0x1386: 0x006f, 0x1387: 0x0071, 0x1388: 0x0073, 0x1389: 0x0075, 0x138a: 0x0083, 0x138b: 0x0085,
	0x138c: 0x0087, 0x138d: 0x0089, 0x138e: 0x008b, 0x138f: 0x008d, 0x1390: 0x008f, 0x1391: 0x0091,
	0x1392: 0x0093, 0x1393: 0x0095, 0x1394: 0x0097, 0x1395: 0x0099, 0x1396: 0x009b, 0x1397: 0x009d,
	0x1398: 0x009f, 0x1399: 0x00a1, 0x139a: 0x00a3, 0x139b: 0x00a5, 0x139c: 0x00a7, 0x139d: 0x00a9,
	0x139e: 0x00ab, 0x139f: 0x00ad, 0x13a0: 0x00af, 0x13a1: 0x00b1, 0x13a2: 0x00b3, 0x13a3: 0x00b5,
	0x13a4: 0x00dd, 0x13a5: 0x00f2, 0x13a8: 0x0173, 0x13a9: 0x0176,
	0x13aa: 0x0179, 0x13ab: 0x017c, 0x13ac: 0x017f, 0x13ad: 0x0182, 0x13ae: 0x0185, 0x13af: 0x0188,
	0x13b0: 0x018b, 0x13b1: 0x018e, 0x13b2: 0x0191, 0x13b3: 0x0194, 0x13b4: 0x0197, 0x13b5: 0x019a,
	0x13b6: 0x019d, 0x13b7: 0x01a0, 0x13b8: 0x01a3, 0x13b9: 0x0188, 0x13ba: 0x01a6, 0x13bb: 0x01a9,
	0x13bc: 0x01ac, 0x13bd: 0x01af, 0x13be: 0x01b2, 0x13bf: 0x01b5,
	// Block 0x4f, offset 0x13c0
	0x13c0: 0x01fd, 0x13c1: 0x0200, 0x13c2: 0x0203, 0x13c3: 0x045b, 0x13c4: 0x01c7, 0x13c5: 0x01d0,
	0x13c6: 0x01d6, 0x13c7: 0x01fa, 0x13c8: 0x01eb, 0x13c9: 0x01e8, 0x13ca: 0x0206, 0x13cb: 0x0209,
	0x13ce: 0x0021, 0x13cf: 0x0023, 0x13d0: 0x0025, 0x13d1: 0x0027,
	0x13d2: 0x0029, 0x13d3: 0x002b, 0x13d4: 0x002d, 0x13d5: 0x002f, 0x13d6: 0x0031, 0x13d7: 0x0033,
	0x13d8: 0x0021, 0x13d9: 0x0023, 0x13da: 0x0025, 0x13db: 0x0027, 0x13dc: 0x0029, 0x13dd: 0x002b,
	0x13de: 0x002d, 0x13df: 0x002f, 0x13e0: 0x0031, 0x13e1: 0x0033, 0x13e2: 0x0021, 0x13e3: 0x0023,
	0x13e4: 0x0025, 0x13e5: 0x0027, 0x13e6: 0x0029, 0x13e7: 0x002b, 0x13e8: 0x002d, 0x13e9: 0x002f,
	0x13ea: 0x0031, 0x13eb: 0x0033, 0x13ec: 0x0021, 0x13ed: 0x0023, 0x13ee: 0x0025, 0x13ef: 0x0027,
	0x13f0: 0x0029, 0x13f1: 0x002b, 0x13f2: 0x002d, 0x13f3: 0x002f, 0x13f4: 0x0031, 0x13f5: 0x0033,
	0x13f6: 0x0021, 0x13f7: 0x0023, 0x13f8: 0x0025, 0x13f9: 0x0027, 0x13fa: 0x0029, 0x13fb: 0x002b,
	0x13fc: 0x002d, 0x13fd: 0x002f, 0x13fe: 0x0031, 0x13ff: 0x0033,
	// Block 0x50, offset 0x1400
	0x1400: 0x0239, 0x1401: 0x023c, 0x1402: 0x0248, 0x1403: 0x0251, 0x1405: 0x028a,
	0x1406: 0x025a, 0x1407: 0x024b, 0x1408: 0x0269, 0x1409: 0x0290, 0x140a: 0x027b, 0x140b: 0x027e,
	0x140c: 0x0281, 0x140d: 0x0284, 0x140e: 0x025d, 0x140f: 0x026f, 0x1410: 0x0275, 0x1411: 0x0263,
	0x1412: 0x0278, 0x1413: 0x0257, 0x1414: 0x0260, 0x1415: 0x0242, 0x1416: 0x0245, 0x1417: 0x024e,
	0x1418: 0x0254, 0x1419: 0x0266, 0x141a: 0x026c, 0x141b: 0x0272, 0x141c: 0x0293, 0x141d: 0x02e4,
	0x141e: 0x02cc, 0x141f: 0x0296, 0x1421: 0x023c, 0x1422: 0x0248,
	0x1424: 0x0287, 0x1427: 0x024b, 0x1429: 0x0290,
	0x142a: 0x027b, 0x142b: 0x027e, 0x142c: 0x0281, 0x142d: 0x0284, 0x142e: 0x025d, 0x142f: 0x026f,
	0x1430: 0x0275, 0x1431: 0x0263, 0x1432: 0x0278, 0x1434: 0x0260, 0x1435: 0x0242,
	0x1436: 0x0245, 0x1437: 0x024e, 0x1439: 0x0266, 0x143b: 0x0272,
	// Block 0x51, offset 0x1440
	0x1442: 0x0248,
	0x1447: 0x024b, 0x1449: 0x0290, 0x144b: 0x027e,
	0x144d: 0x0284, 0x144e: 0x025d, 0x144f: 0x026f, 0x1451: 0x0263,
	0x1452: 0x0278, 0x1454: 0x0260, 0x1457: 0x024e,
	0x1459: 0x0266, 0x145b: 0x0272, 0x145d: 0x02e4,
	0x145f: 0x0296, 0x1461: 0x023c, 0x1462: 0x0248,
	0x1464: 0x0287, 0x1467: 0x024b, 0x1468: 0x0269, 0x1469: 0x0290,
	0x146a: 0x027b, 0x146c: 0x0281, 0x146d: 0x0284, 0x146e: 0x025d, 0x146f: 0x026f,
	0x1470: 0x0275, 0x1471: 0x0263, 0x1472: 0x0278, 0x1474: 0x0260, 0x1475: 0x0242,
	0x1476: 0x0245, 0x1477: 0x024e, 0x1479: 0x0266, 0x147a: 0x026c, 0x147b: 0x0272,
	0x147c: 0x0293, 0x147e: 0x02cc,
	// Block 0x52, offset 0x1480
	0x1480: 0x0239, 0x1481: 0x023c, 0x1482: 0x0248, 0x1483: 0x0251, 0x1484: 0x0287, 0x1485: 0x028a,
	0x1486: 0x025a, 0x1487: 0x024b, 0x1488: 0x0269, 0x1489: 0x0290, 0x148b: 0x027e,
	0x148c: 0x0281, 0x148d: 0x0284, 0x148e: 0x025d, 0x148f: 0x026f, 0x1490: 0x0275, 0x1491: 0x0263,
	0x1492: 0x0278, 0x1493: 0x0257, 0x1494: 0x0260, 0x1495: 0x0242, 0x1496: 0x0245, 0x1497: 0x024e,
	0x1498: 0x0254, 0x1499: 0x0266, 0x149a: 0x026c, 0x149b: 0x0272,
	0x14a1: 0x023c, 0x14a2: 0x0248, 0x14a3: 0x0251,
	0x14a5: 0x028a, 0x14a6: 0x025a, 0x14a7: 0x024b, 0x14a8: 0x0269, 0x14a9: 0x0290,
	0x14ab: 0x027e, 0x14ac: 0x0281, 0x14ad: 0x0284, 0x14ae: 0x025d, 0x14af: 0x026f,
	0x14b0: 0x0275, 0x14b1: 0x0263, 0x14b2: 0x0278, 0x14b3: 0x0257, 0x14b4: 0x0260, 0x14b5: 0x0242,
	0x14b6: 0x0245, 0x14b7: 0x024e, 0x14b8: 0x0254, 0x14b9: 0x0266, 0x14ba: 0x026c, 0x14bb: 0x0272,
	// Block 0x53, offset 0x14c0
	0x14c0: 0x1879, 0x14c1: 0x1876, 0x14c2: 0x187c, 0x14c3: 0x18a0, 0x14c4: 0x18c4, 0x14c5: 0x18e8,
	0x14c6: 0x190c, 0x14c7: 0x1915, 0x14c8: 0x191b, 0x14c9: 0x1921, 0x14ca: 0x1927,
	0x14d0: 0x1a8c, 0x14d1: 0x1a90,
	0x14d2: 0x1a94, 0x14d3: 0x1a98, 0x14d4: 0x1a9c, 0x14d5: 0x1aa0, 0x14d6: 0x1aa4, 0x14d7: 0x1aa8,
	0x14d8: 0x1aac, 0x14d9: 0x1ab0, 0x14da: 0x1ab4, 0x14db: 0x1ab8, 0x14dc: 0x1abc, 0x14dd: 0x1ac0,
	0x14de: 0x1ac4, 0x14df: 0x1ac8, 0x14e0: 0x1acc, 0x14e1: 0x1ad0, 0x14e2: 0x1ad4, 0x14e3: 0x1ad8,
	0x14e4: 0x1adc, 0x14e5: 0x1ae0, 0x14e6: 0x1ae4, 0x14e7: 0x1ae8, 0x14e8: 0x1aec, 0x14e9: 0x1af0,
	0x14ea: 0x271e, 0x14eb: 0x0047, 0x14ec: 0x0065, 0x14ed: 0x193c, 0x14ee: 0x19b1,
	0x14f0: 0x0043, 0x14f1: 0x0045, 0x14f2: 0x0047, 0x14f3: 0x0049, 0x14f4: 0x004b, 0x14f5: 0x004d,
	0x14f6: 0x004f, 0x14f7: 0x0051, 0x14f8: 0x0053, 0x14f9: 0x0055, 0x14fa: 0x0057, 0x14fb: 0x0059,
	0x14fc: 0x005b, 0x14fd: 0x005d, 0x14fe: 0x005f, 0x14ff: 0x0061,
	// Block 0x54, offset 0x1500
	0x1500: 0x26ad, 0x1501: 0x26c2, 0x1502: 0x0503,
	0x1510: 0x0c0f, 0x1511: 0x0a47,
	0x1512: 0x08d3, 0x1513: 0x45c4, 0x1514: 0x071b, 0x1515: 0x09ef, 0x1516: 0x132f, 0x1517: 0x09ff,
	0x1518: 0x0727, 0x1519: 0x0cd7, 0x151a: 0x0eaf, 0x151b: 0x0caf, 0x151c: 0x0827, 0x151d: 0x0b6b,
	0x151e: 0x07bf, 0x151f: 0x0cb7, 0x1520: 0x0813, 0x1521: 0x1117, 0x1522: 0x0f83, 0x1523: 0x138b,
	0x1524: 0x09d3, 0x1525: 0x090b, 0x1526: 0x0e63, 0x1527: 0x0c1b, 0x1528: 0x0c47, 0x1529: 0x06bf,
	0x152a: 0x06cb, 0x152b: 0x140b, 0x152c: 0x0adb, 0x152d: 0x06e7, 0x152e: 0x08ef, 0x152f: 0x0c3b,
	0x1530: 0x13b3, 0x1531: 0x0c13, 0x1532: 0x106f, 0x1533: 0x10ab, 0x1534: 0x08f7, 0x1535: 0x0e43,
	0x1536: 0x0d0b, 0x1537: 0x0d07, 0x1538: 0x0f97, 0x1539: 0x082b, 0x153a: 0x0957, 0x153b: 0x1443,
	// Block 0x55, offset 0x1540
	0x1540: 0x06fb, 0x1541: 0x06f3, 0x1542: 0x0703, 0x1543: 0x1647, 0x1544: 0x0747, 0x1545: 0x0757,
	0x1546: 0x075b, 0x1547: 0x0763, 0x1548: 0x076b, 0x1549: 0x076f, 0x154a: 0x077b, 0x154b: 0x0773,
	0x154c: 0x05b3, 0x154d: 0x165b, 0x154e: 0x078f, 0x154f: 0x0793, 0x1550: 0x0797, 0x1551: 0x07b3,
	0x1552: 0x164c, 0x1553: 0x05b7, 0x1554: 0x079f, 0x1555: 0x07bf, 0x1556: 0x1656, 0x1557: 0x07cf,
	0x1558: 0x07d7, 0x1559: 0x0737, 0x155a: 0x07df, 0x155b: 0x07e3, 0x155c: 0x1831, 0x155d: 0x07ff,
	0x155e: 0x0807, 0x155f: 0x05bf, 0x1560: 0x081f, 0x1561: 0x0823, 0x1562: 0x082b, 0x1563: 0x082f,
	0x1564: 0x05c3, 0x1565: 0x0847, 0x1566: 0x084b, 0x1567: 0x0857, 0x1568: 0x0863, 0x1569: 0x0867,
	0x156a: 0x086b, 0x156b: 0x0873, 0x156c: 0x0893, 0x156d: 0x0897, 0x156e: 0x089f, 0x156f: 0x08af,
	0x1570: 0x08b7, 0x1571: 0x08bb, 0x1572: 0x08bb, 0x1573: 0x08bb, 0x1574: 0x166a, 0x1575: 0x0e93,
	0x1576: 0x08cf, 0x1577: 0x08d7, 0x1578: 0x166f, 0x1579: 0x08e3, 0x157a: 0x08eb, 0x157b: 0x08f3,
	0x157c: 0x091b, 0x157d: 0x0907, 0x157e: 0x0913, 0x157f: 0x0917,
	// Block 0x56, offset 0x1580
	0x1580: 0x091f, 0x1581: 0x0927, 0x1582: 0x092b, 0x1583: 0x0933, 0x1584: 0x093b, 0x1585: 0x093f,
	0x1586: 0x093f, 0x1587: 0x0947, 0x1588: 0x094f, 0x1589: 0x0953, 0x158a: 0x095f, 0x158b: 0x0983,
	0x158c: 0x0967, 0x158d: 0x0987, 0x158e: 0x096b, 0x158f: 0x0973, 0x1590: 0x080b, 0x1591: 0x09cf,
	0x1592: 0x0997, 0x1593: 0x099b, 0x1594: 0x099f, 0x1595: 0x0993, 0x1596: 0x09a7, 0x1597: 0x09a3,
	0x1598: 0x09bb, 0x1599: 0x1674, 0x159a: 0x09d7, 0x159b: 0x09db, 0x159c: 0x09e3, 0x159d: 0x09ef,
	0x159e: 0x09f7, 0x159f: 0x0a13, 0x15a0: 0x1679, 0x15a1: 0x167e, 0x15a2: 0x0a1f, 0x15a3: 0x0a23,
	0x15a4: 0x0a27, 0x15a5: 0x0a1b, 0x15a6: 0x0a2f, 0x15a7: 0x05c7, 0x15a8: 0x05cb, 0x15a9: 0x0a37,
	0x15aa: 0x0a3f, 0x15ab: 0x0a3f, 0x15ac: 0x1683, 0x15ad: 0x0a5b, 0x15ae: 0x0a5f, 0x15af: 0x0a63,
	0x15b0: 0x0a6b, 0x15b1: 0x1688, 0x15b2: 0x0a73, 0x15b3: 0x0a77, 0x15b4: 0x0b4f, 0x15b5: 0x0a7f,
	0x15b6: 0x05cf, 0x15b7: 0x0a8b, 0x15b8: 0x0a9b, 0x15b9: 0x0aa7, 0x15ba: 0x0aa3, 0x15bb: 0x1692,
	0x15bc: 0x0aaf, 0x15bd: 0x1697, 0x15be: 0x0abb, 0x15bf: 0x0ab7,
	// Block 0x57, offset 0x15c0
	0x15c0: 0x0abf, 0x15c1: 0x0acf, 0x15c2: 0x0ad3, 0x15c3: 0x05d3, 0x15c4: 0x0ae3, 0x15c5: 0x0aeb,
	0x15c6: 0x0aef, 0x15c7: 0x0af3, 0x15c8: 0x05d7, 0x15c9: 0x169c, 0x15ca: 0x05db, 0x15cb: 0x0b0f,
	0x15cc: 0x0b13, 0x15cd: 0x0b17, 0x15ce: 0x0b1f, 0x15cf: 0x1863, 0x15d0: 0x0b37, 0x15d1: 0x16a6,
	0x15d2: 0x16a6, 0x15d3: 0x11d7, 0x15d4: 0x0b47, 0x15d5: 0x0b47, 0x15d6: 0x05df, 0x15d7: 0x16c9,
	0x15d8: 0x179b, 0x15d9: 0x0b57, 0x15da: 0x0b5f, 0x15db: 0x05e3, 0x15dc: 0x0b73, 0x15dd: 0x0b83,
	0x15de: 0x0b87, 0x15df: 0x0b8f, 0x15e0: 0x0b9f, 0x15e1: 0x05eb, 0x15e2: 0x05e7, 0x15e3: 0x0ba3,
	0x15e4: 0x16ab, 0x15e5: 0x0ba7, 0x15e6: 0x0bbb, 0x15e7: 0x0bbf, 0x15e8: 0x0bc3, 0x15e9: 0x0bbf,
	0x15ea: 0x0bcf, 0x15eb: 0x0bd3, 0x15ec: 0x0be3, 0x15ed: 0x0bdb, 0x15ee: 0x0bdf, 0x15ef: 0x0be7,
	0x15f0: 0x0beb, 0x15f1: 0x0bef, 0x15f2: 0x0bfb, 0x15f3: 0x0bff, 0x15f4: 0x0c17, 0x15f5: 0x0c1f,
	0x15f6: 0x0c2f, 0x15f7: 0x0c43, 0x15f8: 0x16ba, 0x15f9: 0x0c3f, 0x15fa: 0x0c33, 0x15fb: 0x0c4b,
	0x15fc: 0x0c53, 0x15fd: 0x0c67, 0x15fe: 0x16bf, 0x15ff: 0x0c6f,
	// Block 0x58, offset 0x1600
	0x1600: 0x0c63, 0x1601: 0x0c5b, 0x1602: 0x05ef, 0x1603: 0x0c77, 0x1604: 0x0c7f, 0x1605: 0x0c87,
	0x1606: 0x0c7b, 0x1607: 0x05f3, 0x1608: 0x0c97, 0x1609: 0x0c9f, 0x160a: 0x16c4, 0x160b: 0x0ccb,
	0x160c: 0x0cff, 0x160d: 0x0cdb, 0x160e: 0x05ff, 0x160f: 0x0ce7, 0x1610: 0x05fb, 0x1611: 0x05f7,
	0x1612: 0x07c3, 0x1613: 0x07c7, 0x1614: 0x0d03, 0x1615: 0x0ceb, 0x1616: 0x11ab, 0x1617: 0x0663,
	0x1618: 0x0d0f, 0x1619: 0x0d13, 0x161a: 0x0d17, 0x161b: 0x0d2b, 0x161c: 0x0d23, 0x161d: 0x16dd,
	0x161e: 0x0603, 0x161f: 0x0d3f, 0x1620: 0x0d33, 0x1621: 0x0d4f, 0x1622: 0x0d57, 0x1623: 0x16e7,
	0x1624: 0x0d5b, 0x1625: 0x0d47, 0x1626: 0x0d63, 0x1627: 0x0607, 0x1628: 0x0d67, 0x1629: 0x0d6b,
	0x162a: 0x0d6f, 0x162b: 0x0d7b, 0x162c: 0x16ec, 0x162d: 0x0d83, 0x162e: 0x060b, 0x162f: 0x0d8f,
	0x1630: 0x16f1, 0x1631: 0x0d93, 0x1632: 0x060f, 0x1633: 0x0d9f, 0x1634: 0x0dab, 0x1635: 0x0db7,
	0x1636: 0x0dbb, 0x1637: 0x16f6, 0x1638: 0x168d, 0x1639: 0x16fb, 0x163a: 0x0ddb, 0x163b: 0x1700,
	0x163c: 0x0de7, 0x163d: 0x0def, 0x163e: 0x0ddf, 0x163f: 0x0dfb,
	// Block 0x59, offset 0x1640
	0x1640: 0x0e0b, 0x1641: 0x0e1b, 0x1642: 0x0e0f, 0x1643: 0x0e13, 0x1644: 0x0e1f, 0x1645: 0x0e23,
	0x1646: 0x1705, 0x1647: 0x0e07, 0x1648: 0x0e3b, 0x1649: 0x0e3f, 0x164a: 0x0613, 0x164b: 0x0e53,
	0x164c: 0x0e4f, 0x164d: 0x170a, 0x164e: 0x0e33, 0x164f: 0x0e6f, 0x1650: 0x170f, 0x1651: 0x1714,
	0x1652: 0x0e73, 0x1653: 0x0e87, 0x1654: 0x0e83, 0x1655: 0x0e7f, 0x1656: 0x0617, 0x1657: 0x0e8b,
	0x1658: 0x0e9b, 0x1659: 0x0e97, 0x165a: 0x0ea3, 0x165b: 0x1651, 0x165c: 0x0eb3, 0x165d: 0x1719,
	0x165e: 0x0ebf, 0x165f: 0x1723, 0x1660: 0x0ed3, 0x1661: 0x0edf, 0x1662: 0x0ef3, 0x1663: 0x1728,
	0x1664: 0x0f07, 0x1665: 0x0f0b, 0x1666: 0x172d, 0x1667: 0x1732, 0x1668: 0x0f27, 0x1669: 0x0f37,
	0x166a: 0x061b, 0x166b: 0x0f3b, 0x166c: 0x061f, 0x166d: 0x061f, 0x166e: 0x0f53, 0x166f: 0x0f57,
	0x1670: 0x0f5f, 0x1671: 0x0f63, 0x1672: 0x0f6f, 0x1673: 0x0623, 0x1674: 0x0f87, 0x1675: 0x1737,
	0x1676: 0x0fa3, 0x1677: 0x173c, 0x1678: 0x0faf, 0x1679: 0x16a1, 0x167a: 0x0fbf, 0x167b: 0x1741,
	0x167c: 0x1746, 0x167d: 0x174b, 0x167e: 0x0627, 0x167f: 0x062b,
	// Block 0x5a, offset 0x1680
	0x1680: 0x0ff7, 0x1681: 0x1755, 0x1682: 0x1750, 0x1683: 0x175a, 0x1684: 0x175f, 0x1685: 0x0fff,
	0x1686: 0x1003, 0x1687: 0x1003, 0x1688: 0x100b, 0x1689: 0x0633, 0x168a: 0x100f, 0x168b: 0x0637,
	0x168c: 0x063b, 0x168d: 0x1769, 0x168e: 0x1023, 0x168f: 0x102b, 0x1690: 0x1037, 0x1691: 0x063f,
	0x1692: 0x176e, 0x1693: 0x105b, 0x1694: 0x1773, 0x1695: 0x1778, 0x1696: 0x107b, 0x1697: 0x1093,
	0x1698: 0x0643, 0x1699: 0x109b, 0x169a: 0x109f, 0x169b: 0x10a3, 0x169c: 0x177d, 0x169d: 0x1782,
	0x169e: 0x1782, 0x169f: 0x10bb, 0x16a0: 0x0647, 0x16a1: 0x1787, 0x16a2: 0x10cf, 0x16a3: 0x10d3,
	0x16a4: 0x064b, 0x16a5: 0x178c, 0x16a6: 0x10ef, 0x16a7: 0x064f, 0x16a8: 0x10ff, 0x16a9: 0x10f7,
	0x16aa: 0x1107, 0x16ab: 0x1796, 0x16ac: 0x111f, 0x16ad: 0x0653, 0x16ae: 0x112b, 0x16af: 0x1133,
	0x16b0: 0x1143, 0x16b1: 0x0657, 0x16b2: 0x17a0, 0x16b3: 0x17a5, 0x16b4: 0x065b, 0x16b5: 0x17aa,
	0x16b6: 0x115b, 0x16b7: 0x17af, 0x16b8: 0x1167, 0x16b9: 0x1173, 0x16ba: 0x117b, 0x16bb: 0x17b4,
	0x16bc: 0x17b9, 0x16bd: 0x118f, 0x16be: 0x17be, 0x16bf: 0x1197,
	// Block 0x5b, offset 0x16c0
	0x16c0: 0x16ce, 0x16c1: 0x065f, 0x16c2: 0x11af, 0x16c3: 0x11b3, 0x16c4: 0x0667, 0x16c5: 0x11b7,
	0x16c6: 0x0a33, 0x16c7: 0x17c3, 0x16c8: 0x17c8, 0x16c9: 0x16d3, 0x16ca: 0x16d8, 0x16cb: 0x11d7,
	0x16cc: 0x11db, 0x16cd: 0x13f3, 0x16ce: 0x066b, 0x16cf: 0x1207, 0x16d0: 0x1203, 0x16d1: 0x120b,
	0x16d2: 0x083f, 0x16d3: 0x120f, 0x16d4: 0x1213, 0x16d5: 0x1217, 0x16d6: 0x121f, 0x16d7: 0x17cd,
	0x16d8: 0x121b, 0x16d9: 0x1223, 0x16da: 0x1237, 0x16db: 0x123b, 0x16dc: 0x1227, 0x16dd: 0x123f,
	0x16de: 0x1253, 0x16df: 0x1267, 0x16e0: 0x1233, 0x16e1: 0x1247, 0x16e2: 0x124b, 0x16e3: 0x124f,
	0x16e4: 0x17d2, 0x16e5: 0x17dc, 0x16e6: 0x17d7, 0x16e7: 0x066f, 0x16e8: 0x126f, 0x16e9: 0x1273,
	0x16ea: 0x127b, 0x16eb: 0x17f0, 0x16ec: 0x127f, 0x16ed: 0x17e1, 0x16ee: 0x0673, 0x16ef: 0x0677,
	0x16f0: 0x17e6, 0x16f1: 0x17eb, 0x16f2: 0x067b, 0x16f3: 0x129f, 0x16f4: 0x12a3, 0x16f5: 0x12a7,
	0x16f6: 0x12ab, 0x16f7: 0x12b7, 0x16f8: 0x12b3, 0x16f9: 0x12bf, 0x16fa: 0x12bb, 0x16fb: 0x12cb,
	0x16fc: 0x12c3, 0x16fd: 0x12c7, 0x16fe: 0x12cf, 0x16ff: 0x067f,
	// Block 0x5c, offset 0x1700
	0x1700: 0x12d7, 0x1701: 0x12db, 0x1702: 0x0683, 0x1703: 0x12eb, 0x1704: 0x12ef, 0x1705: 0x17f5,
	0x1706: 0x12fb, 0x1707: 0x12ff, 0x1708: 0x0687, 0x1709: 0x130b, 0x170a: 0x05bb, 0x170b: 0x17fa,
	0x170c: 0x17ff, 0x170d: 0x068b, 0x170e: 0x068f, 0x170f: 0x1337, 0x1710: 0x134f, 0x1711: 0x136b,
	0x1712: 0x137b, 0x1713: 0x1804, 0x1714: 0x138f, 0x1715: 0x1393, 0x1716: 0x13ab, 0x1717: 0x13b7,
	0x1718: 0x180e, 0x1719: 0x1660, 0x171a: 0x13c3, 0x171b: 0x13bf, 0x171c: 0x13cb, 0x171d: 0x1665,
	0x171e: 0x13d7, 0x171f: 0x13e3, 0x1720: 0x1813, 0x1721: 0x1818, 0x1722: 0x1423, 0x1723: 0x142f,
	0x1724: 0x1437, 0x1725: 0x181d, 0x1726: 0x143b, 0x1727: 0x1467, 0x1728: 0x1473, 0x1729: 0x1477,
	0x172a: 0x146f, 0x172b: 0x1483, 0x172c: 0x1487, 0x172d: 0x1822, 0x172e: 0x1493, 0x172f: 0x0693,
	0x1730: 0x149b, 0x1731: 0x1827, 0x1732: 0x0697, 0x1733: 0x14d3, 0x1734: 0x0ac3, 0x1735: 0x14eb,
	0x1736: 0x182c, 0x1737: 0x1836, 0x1738: 0x069b, 0x1739: 0x069f, 0x173a: 0x1513, 0x173b: 0x183b,
	0x173c: 0x06a3, 0x173d: 0x1840, 0x173e: 0x152b, 0x173f: 0x152b,
	// Block 0x5d, offset 0x1740
	0x1740: 0x1533, 0x1741: 0x1845, 0x1742: 0x154b, 0x1743: 0x06a7, 0x1744: 0x155b, 0x1745: 0x1567,
	0x1746: 0x156f, 0x1747: 0x1577, 0x1748: 0x06ab, 0x1749: 0x184a, 0x174a: 0x158b, 0x174b: 0x15a7,
	0x174c: 0x15b3, 0x174d: 0x06af, 0x174e: 0x06b3, 0x174f: 0x15b7, 0x1750: 0x184f, 0x1751: 0x06b7,
	0x1752: 0x1854, 0x1753: 0x1859, 0x1754: 0x185e, 0x1755: 0x15db, 0x1756: 0x06bb, 0x1757: 0x15ef,
	0x1758: 0x15f7, 0x1759: 0x15fb, 0x175a: 0x1603, 0x175b: 0x160b, 0x175c: 0x1613, 0x175d: 0x1868,
}

// nfkcIndex: 22 blocks, 1408 entries, 1408 bytes
// Block 0 is the zero block.
var nfkcIndex = [1408]uint8{
	// Block 0x0, offset 0x0
	// Block 0x1, offset 0x40
	// Block 0x2, offset 0x80
	// Block 0x3, offset 0xc0
	0xc2: 0x5c, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x5d, 0xc7: 0x04,
	0xc8: 0x05, 0xca: 0x5e, 0xcb: 0x5f, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x09,
	0xd0: 0x0a, 0xd1: 0x60, 0xd2: 0x61, 0xd3: 0x0b, 0xd6: 0x0c, 0xd7: 0x62,
	0xd8: 0x63, 0xd9: 0x0d, 0xdb: 0x64, 0xdc: 0x65, 0xdd: 0x66, 0xdf: 0x67,
	0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05,
	0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a,
	0xf0: 0x13,
	// Block 0x4, offset 0x100
	0x120: 0x68, 0x121: 0x69, 0x123: 0x0e, 0x124: 0x6a, 0x125: 0x6b, 0x126: 0x6c, 0x127: 0x6d,
	0x128: 0x6e, 0x129: 0x6f, 0x12a: 0x70, 0x12b: 0x71, 0x12c: 0x6c, 0x12d: 0x72, 0x12e: 0x73, 0x12f: 0x74,
	0x131: 0x75, 0x132: 0x76, 0x133: 0x77, 0x134: 0x78, 0x135: 0x79, 0x137: 0x7a,
	0x138: 0x7b, 0x139: 0x7c, 0x13a: 0x7d, 0x13b: 0x7e, 0x13c: 0x7f, 0x13d: 0x80, 0x13e: 0x81, 0x13f: 0x82,
	// Block 0x5, offset 0x140
	0x140: 0x83, 0x142: 0x84, 0x143: 0x85, 0x144: 0x86, 0x145: 0x87, 0x146: 0x88, 0x147: 0x89,
	0x14d: 0x8a,
	0x15c: 0x8b, 0x15f: 0x8c,
	0x162: 0x8d, 0x164: 0x8e,
	0x168: 0x8f, 0x169: 0x90, 0x16a: 0x91, 0x16c: 0x0f, 0x16d: 0x92, 0x16e: 0x93, 0x16f: 0x94,
	0x170: 0x95, 0x173: 0x96, 0x174: 0x97, 0x175: 0x10, 0x176: 0x11, 0x177: 0x12,
	0x178: 0x13, 0x179: 0x14, 0x17a: 0x15, 0x17b: 0x16, 0x17c: 0x17, 0x17d: 0x18, 0x17e: 0x19, 0x17f: 0x1a,
	// Block 0x6, offset 0x180
	0x180: 0x98, 0x181: 0x99, 0x182: 0x9a, 0x183: 0x9b, 0x184: 0x1b, 0x185: 0x1c, 0x186: 0x9c, 0x187: 0x9d,
	0x188: 0x9e, 0x189: 0x1d, 0x18a: 0x1e, 0x18b: 0x9f, 0x18c: 0xa0,
	0x191: 0x1f, 0x192: 0x20, 0x193: 0xa1,
	0x1a8: 0xa2, 0x1a9: 0xa3, 0x1ab: 0xa4,
	0x1b1: 0xa5, 0x1b3: 0xa6, 0x1b5: 0xa7, 0x1b7: 0xa8,
	0x1ba: 0xa9, 0x1bb: 0xaa, 0x1bc: 0x21, 0x1bd: 0x22, 0x1be: 0x23, 0x1bf: 0xab,
	// Block 0x7, offset 0x1c0
	0x1c0: 0xac, 0x1c1: 0x24, 0x1c2: 0x25, 0x1c3: 0x26, 0x1c4: 0xad, 0x1c5: 0x27, 0x1c6: 0x28,
	0x1c8: 0x29, 0x1c9: 0x2a, 0x1ca: 0x2b, 0x1cb: 0x2c, 0x1cc: 0x2d, 0x1cd: 0x2e, 0x1ce: 0x2f, 0x1cf: 0x30,
	// Block 0x8, offset 0x200
	0x219: 0xae, 0x21a: 0xaf, 0x21b: 0xb0, 0x21d: 0xb1, 0x21f: 0xb2,
	0x220: 0xb3, 0x223: 0xb4, 0x224: 0xb5, 0x225: 0xb6, 0x226: 0xb7, 0x227: 0xb8,
	0x22a: 0xb9, 0x22b: 0xba, 0x22d: 0xbb, 0x22f: 0xbc,
	0x230: 0xbd, 0x231: 0xbe, 0x232: 0xbf, 0x233: 0xc0, 0x234: 0xc1, 0x235: 0xc2, 0x236: 0xc3, 0x237: 0xbd,
	0x238: 0xbe, 0x239: 0xbf, 0x23a: 0xc0, 0x23b: 0xc1, 0x23c: 0xc2, 0x23d: 0xc3, 0x23e: 0xbd, 0x23f: 0xbe,
	// Block 0x9, offset 0x240
	0x240: 0xbf, 0x241: 0xc0, 0x242: 0xc1, 0x243: 0xc2, 0x244: 0xc3, 0x245: 0xbd, 0x246: 0xbe, 0x247: 0xbf,
	0x248: 0xc0, 0x249: 0xc1, 0x24a: 0xc2, 0x24b: 0xc3, 0x24c: 0xbd, 0x24d: 0xbe, 0x24e: 0xbf, 0x24f: 0xc0,
	0x250: 0xc1, 0x251: 0xc2, 0x252: 0xc3, 0x253: 0xbd, 0x254: 0xbe, 0x255: 0xbf, 0x256: 0xc0, 0x257: 0xc1,
	0x258: 0xc2, 0x259: 0xc3, 0x25a: 0xbd, 0x25b: 0xbe, 0x25c: 0xbf, 0x25d: 0xc0, 0x25e: 0xc1, 0x25f: 0xc2,
	0x260: 0xc3, 0x261: 0xbd, 0x262: 0xbe, 0x263: 0xbf, 0x264: 0xc0, 0x265: 0xc1, 0x266: 0xc2, 0x267: 0xc3,
	0x268: 0xbd, 0x269: 0xbe, 0x26a: 0xbf, 0x26b: 0xc0, 0x26c: 0xc1, 0x26d: 0xc2, 0x26e: 0xc3, 0x26f: 0xbd,
	0x270: 0xbe, 0x271: 0xbf, 0x272: 0xc0, 0x273: 0xc1, 0x274: 0xc2, 0x275: 0xc3, 0x276: 0xbd, 0x277: 0xbe,
	0x278: 0xbf, 0x279: 0xc0, 0x27a: 0xc1, 0x27b: 0xc2, 0x27c: 0xc3, 0x27d: 0xbd, 0x27e: 0xbe, 0x27f: 0xbf,
	// Block 0xa, offset 0x280
	0x280: 0xc0, 0x281: 0xc1, 0x282: 0xc2, 0x283: 0xc3, 0x284: 0xbd, 0x285: 0xbe, 0x286: 0xbf, 0x287: 0xc0,
	0x288: 0xc1, 0x289: 0xc2, 0x28a: 0xc3, 0x28b: 0xbd, 0x28c: 0xbe, 0x28d: 0xbf, 0x28e: 0xc0, 0x28f: 0xc1,
	0x290: 0xc2, 0x291: 0xc3, 0x292: 0xbd, 0x293: 0xbe, 0x294: 0xbf, 0x295: 0xc0, 0x296: 0xc1, 0x297: 0xc2,
	0x298: 0xc3, 0x299: 0xbd, 0x29a: 0xbe, 0x29b: 0xbf, 0x29c: 0xc0, 0x29d: 0xc1, 0x29e: 0xc2, 0x29f: 0xc3,
	0x2a0: 0xbd, 0x2a1: 0xbe, 0x2a2: 0xbf, 0x2a3: 0xc0, 0x2a4: 0xc1, 0x2a5: 0xc2, 0x2a6: 0xc3, 0x2a7: 0xbd,
	0x2a8: 0xbe, 0x2a9: 0xbf, 0x2aa: 0xc0, 0x2ab: 0xc1, 0x2ac: 0xc2, 0x2ad: 0xc3, 0x2ae: 0xbd, 0x2af: 0xbe,
	0x2b0: 0xbf, 0x2b1: 0xc0, 0x2b2: 0xc1, 0x2b3: 0xc2, 0x2b4: 0xc3, 0x2b5: 0xbd, 0x2b6: 0xbe, 0x2b7: 0xbf,
	0x2b8: 0xc0, 0x2b9: 0xc1, 0x2ba: 0xc2, 0x2bb: 0xc3, 0x2bc: 0xbd, 0x2bd: 0xbe, 0x2be: 0xbf, 0x2bf: 0xc0,
	// Block 0xb, offset 0x2c0
	0x2c0: 0xc1, 0x2c1: 0xc2, 0x2c2: 0xc3, 0x2c3: 0xbd, 0x2c4: 0xbe, 0x2c5: 0xbf, 0x2c6: 0xc0, 0x2c7: 0xc1,
	0x2c8: 0xc2, 0x2c9: 0xc3, 0x2ca: 0xbd, 0x2cb: 0xbe, 0x2cc: 0xbf, 0x2cd: 0xc0, 0x2ce: 0xc1, 0x2cf: 0xc2,
	0x2d0: 0xc3, 0x2d1: 0xbd, 0x2d2: 0xbe, 0x2d3: 0xbf, 0x2d4: 0xc0, 0x2d5: 0xc1, 0x2d6: 0xc2, 0x2d7: 0xc3,
	0x2d8: 0xbd, 0x2d9: 0xbe, 0x2da: 0xbf, 0x2db: 0xc0, 0x2dc: 0xc1, 0x2dd: 0xc2, 0x2de: 0xc4,
	// Block 0xc, offset 0x300
	0x324: 0x31, 0x325: 0x32, 0x326: 0x33, 0x327: 0x34,
	0x328: 0x35, 0x329: 0x36, 0x32a: 0x37, 0x32b: 0x38, 0x32c: 0x39, 0x32d: 0x3a, 0x32e: 0x3b, 0x32f: 0x3c,
	0x330: 0x3d, 0x331: 0x3e, 0x332: 0x3f, 0x333: 0x40, 0x334: 0x41, 0x335: 0x42, 0x336: 0x43, 0x337: 0x44,
	0x338: 0x45, 0x339: 0x46, 0x33a: 0x47, 0x33b: 0x48, 0x33c: 0xc5, 0x33d: 0x49, 0x33e: 0x4a, 0x33f: 0x4b,
	// Block 0xd, offset 0x340
	0x347: 0xc6,
	0x34b: 0xc7, 0x34d: 0xc8,
	0x368: 0xc9, 0x36b: 0xca,
	0x374: 0xcb,
	0x37d: 0xcc,
	// Block 0xe, offset 0x380
	0x381: 0xcd, 0x382: 0xce, 0x384: 0xcf, 0x385: 0xb7, 0x387: 0xd0,
	0x388: 0xd1, 0x38b: 0xd2, 0x38c: 0xd3, 0x38d: 0xd4,
	0x391: 0xd5, 0x392: 0xd6, 0x393: 0xd7, 0x396: 0xd8, 0x397: 0xd9,
	0x398: 0xda, 0x39a: 0xdb, 0x39c: 0xdc,
	0x3a0: 0xdd,
	0x3a8: 0xde, 0x3a9: 0xdf, 0x3aa: 0xe0,
	0x3b0: 0xda, 0x3b5: 0xe1, 0x3b6: 0xe2,
	// Block 0xf, offset 0x3c0
	0x3eb: 0xe3, 0x3ec: 0xe4,
	// Block 0x10, offset 0x400
	0x432: 0xe5,
	// Block 0x11, offset 0x440
	0x445: 0xe6, 0x446: 0xe7, 0x447: 0xe8,
	0x449: 0xe9,
	0x450: 0xea, 0x451: 0xeb, 0x452: 0xec, 0x453: 0xed, 0x454: 0xee, 0x455: 0xef, 0x456: 0xf0, 0x457: 0xf1,
	0x458: 0xf2, 0x459: 0xf3, 0x45a: 0x4c, 0x45b: 0xf4, 0x45c: 0xf5, 0x45d: 0xf6, 0x45e: 0xf7, 0x45f: 0x4d,
	// Block 0x12, offset 0x480
	0x480: 0xf8,
	0x4a3: 0xf9, 0x4a5: 0xfa,
	0x4b8: 0x4e, 0x4b9: 0x4f, 0x4ba: 0x50,
	// Block 0x13, offset 0x4c0
	0x4c4: 0x51, 0x4c5: 0xfb, 0x4c6: 0xfc,
	0x4c8: 0x52, 0x4c9: 0xfd,
	// Block 0x14, offset 0x500
	0x520: 0x53, 0x521: 0x54, 0x522: 0x55, 0x523: 0x56, 0x524: 0x57, 0x525: 0x58, 0x526: 0x59, 0x527: 0x5a,
	0x528: 0x5b,
	// Block 0x15, offset 0x540
	0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d,
	0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11,
	0x56f: 0x12,
}

// nfkcSparseOffset: 162 entries, 324 bytes
var nfkcSparseOffset = []uint16{0x0, 0xe, 0x12, 0x1b, 0x25, 0x35, 0x37, 0x3c, 0x47, 0x56, 0x63, 0x6b, 0x70, 0x75, 0x77, 0x7f, 0x86, 0x89, 0x91, 0x95, 0x99, 0x9b, 0x9d, 0xa6, 0xaa, 0xb1, 0xb6, 0xb9, 0xc3, 0xc6, 0xcd, 0xd5, 0xd9, 0xdb, 0xde, 0xe2, 0xe8, 0xf9, 0x105, 0x107, 0x10d, 0x10f, 0x111, 0x113, 0x115, 0x117, 0x119, 0x11b, 0x11e, 0x121, 0x123, 0x126, 0x129, 0x12d, 0x132, 0x13b, 0x13d, 0x140, 0x142, 0x14d, 0x158, 0x166, 0x174, 0x184, 0x192, 0x199, 0x19f, 0x1ae, 0x1b2, 0x1b4, 0x1b8, 0x1ba, 0x1bd, 0x1bf, 0x1c2, 0x1c4, 0x1c7, 0x1c9, 0x1cb, 0x1cd, 0x1d9, 0x1e3, 0x1ed, 0x1f0, 0x1f4, 0x1f6, 0x1f8, 0x1fa, 0x1fc, 0x1ff, 0x201, 0x203, 0x205, 0x207, 0x20d, 0x210, 0x214, 0x216, 0x21d, 0x223, 0x229, 0x231, 0x237, 0x23d, 0x243, 0x247, 0x249, 0x24b, 0x24d, 0x24f, 0x255, 0x258, 0x25a, 0x260, 0x263, 0x26b, 0x272, 0x275, 0x278, 0x27a, 0x27d, 0x285, 0x289, 0x290, 0x293, 0x299, 0x29b, 0x29d, 0x2a0, 0x2a2, 0x2a5, 0x2a7, 0x2a9, 0x2ab, 0x2ae, 0x2b0, 0x2b2, 0x2b4, 0x2b6, 0x2c3, 0x2cd, 0x2cf, 0x2d1, 0x2d5, 0x2da, 0x2e6, 0x2eb, 0x2f4, 0x2fa, 0x2ff, 0x303, 0x308, 0x30c, 0x31c, 0x32a, 0x338, 0x346, 0x34c, 0x34e, 0x351, 0x35b, 0x35d}

// nfkcSparseValues: 871 entries, 3484 bytes
var nfkcSparseValues = [871]valueRange{
	// Block 0x0, offset 0x0
	{value: 0x0002, lo: 0x0d},
	{value: 0x0001, lo: 0xa0, hi: 0xa0},
	{value: 0x4278, lo: 0xa8, hi: 0xa8},
	{value: 0x0083, lo: 0xaa, hi: 0xaa},
	{value: 0x4264, lo: 0xaf, hi: 0xaf},
	{value: 0x0025, lo: 0xb2, hi: 0xb3},
	{value: 0x425a, lo: 0xb4, hi: 0xb4},
	{value: 0x01dc, lo: 0xb5, hi: 0xb5},
	{value: 0x4291, lo: 0xb8, hi: 0xb8},
	{value: 0x0023, lo: 0xb9, hi: 0xb9},
	{value: 0x009f, lo: 0xba, hi: 0xba},
	{value: 0x221c, lo: 0xbc, hi: 0xbc},
	{value: 0x2210, lo: 0xbd, hi: 0xbd},
	{value: 0x22b2, lo: 0xbe, hi: 0xbe},
	// Block 0x1, offset 0xe
	{value: 0x0091, lo: 0x03},
	{value: 0x46e2, lo: 0xa0, hi: 0xa1},
	{value: 0x4714, lo: 0xaf, hi: 0xb0},
	{value: 0xa000, lo: 0xb7, hi: 0xb7},
	// Block 0x2, offset 0x12
	{value: 0x0003, lo: 0x08},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x0091, lo: 0xb0, hi: 0xb0},
	{value: 0x0119, lo: 0xb1, hi: 0xb1},
	{value: 0x0095, lo: 0xb2, hi: 0xb2},
	{value: 0x00a5, lo: 0xb3, hi: 0xb3},
	{value: 0x0143, lo: 0xb4, hi: 0xb6},
	{value: 0x00af, lo: 0xb7, hi: 0xb7},
	{value: 0x00b3, lo: 0xb8, hi: 0xb8},
	// Block 0x3, offset 0x1b
	{value: 0x000a, lo: 0x09},
	{value: 0x426e, lo: 0x98, hi: 0x98},
	{value: 0x4273, lo: 0x99, hi: 0x9a},
	{value: 0x4296, lo: 0x9b, hi: 0x9b},
	{value: 0x425f, lo: 0x9c, hi: 0x9c},
	{value: 0x4282, lo: 0x9d, hi: 0x9d},
	{value: 0x0113, lo: 0xa0, hi: 0xa0},
	{value: 0x0099, lo: 0xa1, hi: 0xa1},
	{value: 0x00a7, lo: 0xa2, hi: 0xa3},
	{value: 0x0167, lo: 0xa4, hi: 0xa4},
	// Block 0x4, offset 0x25
	{value: 0x0000, lo: 0x0f},
	{value: 0xa000, lo: 0x83, hi: 0x83},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0xa000, lo: 0x8b, hi: 0x8b},
	{value: 0xa000, lo: 0x8d, hi: 0x8d},
	{value: 0x37a5, lo: 0x90, hi: 0x90},
	{value: 0x37b1, lo: 0x91, hi: 0x91},
	{value: 0x379f, lo: 0x93, hi: 0x93},
	{value: 0xa000, lo: 0x96, hi: 0x96},
	{value: 0x3817, lo: 0x97, hi: 0x97},
	{value: 0x37e1, lo: 0x9c, hi: 0x9c},
	{value: 0x37c9, lo: 0x9d, hi: 0x9d},
	{value: 0x37f3, lo: 0x9e, hi: 0x9e},
	{value: 0xa000, lo: 0xb4, hi: 0xb5},
	{value: 0x381d, lo: 0xb6, hi: 0xb6},
	{value: 0x3823, lo: 0xb7, hi: 0xb7},
	// Block 0x5, offset 0x35
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x83, hi: 0x87},
	// Block 0x6, offset 0x37
	{value: 0x0001, lo: 0x04},
	{value: 0x8113, lo: 0x81, hi: 0x82},
	{value: 0x8132, lo: 0x84, hi: 0x84},
	{value: 0x812d, lo: 0x85, hi: 0x85},
	{value: 0x810d, lo: 0x87, hi: 0x87},
	// Block 0x7, offset 0x3c
	{value: 0x0000, lo: 0x0a},
	{value: 0x8132, lo: 0x90, hi: 0x97},
	{value: 0x8119, lo: 0x98, hi: 0x98},
	{value: 0x811a, lo: 0x99, hi: 0x99},
	{value: 0x811b, lo: 0x9a, hi: 0x9a},
	{value: 0x3841, lo: 0xa2, hi: 0xa2},
	{value: 0x3847, lo: 0xa3, hi: 0xa3},
	{value: 0x3853, lo: 0xa4, hi: 0xa4},
	{value: 0x384d, lo: 0xa5, hi: 0xa5},
	{value: 0x3859, lo: 0xa6, hi: 0xa6},
	{value: 0xa000, lo: 0xa7, hi: 0xa7},
	// Block 0x8, offset 0x47
	{value: 0x0000, lo: 0x0e},
	{value: 0x386b, lo: 0x80, hi: 0x80},
	{value: 0xa000, lo: 0x81, hi: 0x81},
	{value: 0x385f, lo: 0x82, hi: 0x82},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x3865, lo: 0x93, hi: 0x93},
	{value: 0xa000, lo: 0x95, hi: 0x95},
	{value: 0x8132, lo: 0x96, hi: 0x9c},
	{value: 0x8132, lo: 0x9f, hi: 0xa2},
	{value: 0x812d, lo: 0xa3, hi: 0xa3},
	{value: 0x8132, lo: 0xa4, hi: 0xa4},
	{value: 0x8132, lo: 0xa7, hi: 0xa8},
	{value: 0x812d, lo: 0xaa, hi: 0xaa},
	{value: 0x8132, lo: 0xab, hi: 0xac},
	{value: 0x812d, lo: 0xad, hi: 0xad},
	// Block 0x9, offset 0x56
	{value: 0x0000, lo: 0x0c},
	{value: 0x811f, lo: 0x91, hi: 0x91},
	{value: 0x8132, lo: 0xb0, hi: 0xb0},
	{value: 0x812d, lo: 0xb1, hi: 0xb1},
	{value: 0x8132, lo: 0xb2, hi: 0xb3},
	{value: 0x812d, lo: 0xb4, hi: 0xb4},
	{value: 0x8132, lo: 0xb5, hi: 0xb6},
	{value: 0x812d, lo: 0xb7, hi: 0xb9},
	{value: 0x8132, lo: 0xba, hi: 0xba},
	{value: 0x812d, lo: 0xbb, hi: 0xbc},
	{value: 0x8132, lo: 0xbd, hi: 0xbd},
	{value: 0x812d, lo: 0xbe, hi: 0xbe},
	{value: 0x8132, lo: 0xbf, hi: 0xbf},
	// Block 0xa, offset 0x63
	{value: 0x0005, lo: 0x07},
	{value: 0x8132, lo: 0x80, hi: 0x80},
	{value: 0x8132, lo: 0x81, hi: 0x81},
	{value: 0x812d, lo: 0x82, hi: 0x83},
	{value: 0x812d, lo: 0x84, hi: 0x85},
	{value: 0x812d, lo: 0x86, hi: 0x87},
	{value: 0x812d, lo: 0x88, hi: 0x89},
	{value: 0x8132, lo: 0x8a, hi: 0x8a},
	// Block 0xb, offset 0x6b
	{value: 0x0000, lo: 0x04},
	{value: 0x8132, lo: 0xab, hi: 0xb1},
	{value: 0x812d, lo: 0xb2, hi: 0xb2},
	{value: 0x8132, lo: 0xb3, hi: 0xb3},
	{value: 0x812d, lo: 0xbd, hi: 0xbd},
	// Block 0xc, offset 0x70
	{value: 0x0000, lo: 0x04},
	{value: 0x8132, lo: 0x96, hi: 0x99},
	{value: 0x8132, lo: 0x9b, hi: 0xa3},
	{value: 0x8132, lo: 0xa5, hi: 0xa7},
	{value: 0x8132, lo: 0xa9, hi: 0xad},
	// Block 0xd, offset 0x75
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x99, hi: 0x9b},
	// Block 0xe, offset 0x77
	{value: 0x0000, lo: 0x07},
	{value: 0xa000, lo: 0xa8, hi: 0xa8},
	{value: 0x3ed8, lo: 0xa9, hi: 0xa9},
	{value: 0xa000, lo: 0xb0, hi: 0xb0},
	{value: 0x3ee0, lo: 0xb1, hi: 0xb1},
	{value: 0xa000, lo: 0xb3, hi: 0xb3},
	{value: 0x3ee8, lo: 0xb4, hi: 0xb4},
	{value: 0x9902, lo: 0xbc, hi: 0xbc},
	// Block 0xf, offset 0x7f
	{value: 0x0008, lo: 0x06},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x8132, lo: 0x91, hi: 0x91},
	{value: 0x812d, lo: 0x92, hi: 0x92},
	{value: 0x8132, lo: 0x93, hi: 0x93},
	{value: 0x8132, lo: 0x94, hi: 0x94},
	{value: 0x451c, lo: 0x98, hi: 0x9f},
	// Block 0x10, offset 0x86
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x11, offset 0x89
	{value: 0x0008, lo: 0x07},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2c9e, lo: 0x8b, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	{value: 0x455c, lo: 0x9c, hi: 0x9d},
	{value: 0x456c, lo: 0x9f, hi: 0x9f},
	{value: 0x8132, lo: 0xbe, hi: 0xbe},
	// Block 0x12, offset 0x91
	{value: 0x0000, lo: 0x03},
	{value: 0x4594, lo: 0xb3, hi: 0xb3},
	{value: 0x459c, lo: 0xb6, hi: 0xb6},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	// Block 0x13, offset 0x95
	{value: 0x0008, lo: 0x03},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x4574, lo: 0x99, hi: 0x9b},
	{value: 0x458c, lo: 0x9e, hi: 0x9e},
	// Block 0x14, offset 0x99
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	// Block 0x15, offset 0x9b
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	// Block 0x16, offset 0x9d
	{value: 0x0000, lo: 0x08},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2cb6, lo: 0x88, hi: 0x88},
	{value: 0x2cae, lo: 0x8b, hi: 0x8b},
	{value: 0x2cbe, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x96, hi: 0x97},
	{value: 0x45a4, lo: 0x9c, hi: 0x9c},
	{value: 0x45ac, lo: 0x9d, hi: 0x9d},
	// Block 0x17, offset 0xa6
	{value: 0x0000, lo: 0x03},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x2cc6, lo: 0x94, hi: 0x94},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x18, offset 0xaa
	{value: 0x0000, lo: 0x06},
	{value: 0xa000, lo: 0x86, hi: 0x87},
	{value: 0x2cce, lo: 0x8a, hi: 0x8a},
	{value: 0x2cde, lo: 0x8b, hi: 0x8b},
	{value: 0x2cd6, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	// Block 0x19, offset 0xb1
	{value: 0x1801, lo: 0x04},
	{value: 0xa000, lo: 0x86, hi: 0x86},
	{value: 0x3ef0, lo: 0x88, hi: 0x88},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x8120, lo: 0x95, hi: 0x96},
	// Block 0x1a, offset 0xb6
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	{value: 0xa000, lo: 0xbf, hi: 0xbf},
	// Block 0x1b, offset 0xb9
	{value: 0x0000, lo: 0x09},
	{value: 0x2ce6, lo: 0x80, hi: 0x80},
	{value: 0x9900, lo: 0x82, hi: 0x82},
	{value: 0xa000, lo: 0x86, hi: 0x86},
	{value: 0x2cee, lo: 0x87, hi: 0x87},
	{value: 0x2cf6, lo: 0x88, hi: 0x88},
	{value: 0x2f50, lo: 0x8a, hi: 0x8a},
	{value: 0x2dd8, lo: 0x8b, hi: 0x8b},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x95, hi: 0x96},
	// Block 0x1c, offset 0xc3
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0xbb, hi: 0xbc},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x1d, offset 0xc6
	{value: 0x0000, lo: 0x06},
	{value: 0xa000, lo: 0x86, hi: 0x87},
	{value: 0x2cfe, lo: 0x8a, hi: 0x8a},
	{value: 0x2d0e, lo: 0x8b, hi: 0x8b},
	{value: 0x2d06, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	// Block 0x1e, offset 0xcd
	{value: 0x6bea, lo: 0x07},
	{value: 0x9904, lo: 0x8a, hi: 0x8a},
	{value: 0x9900, lo: 0x8f, hi: 0x8f},
	{value: 0xa000, lo: 0x99, hi: 0x99},
	{value: 0x3ef8, lo: 0x9a, hi: 0x9a},
	{value: 0x2f58, lo: 0x9c, hi: 0x9c},
	{value: 0x2de3, lo: 0x9d, hi: 0x9d},
	{value: 0x2d16, lo: 0x9e, hi: 0x9f},
	// Block 0x1f, offset 0xd5
	{value: 0x0000, lo: 0x03},
	{value: 0x2621, lo: 0xb3, hi: 0xb3},
	{value: 0x8122, lo: 0xb8, hi: 0xb9},
	{value: 0x8104, lo: 0xba, hi: 0xba},
	// Block 0x20, offset 0xd9
	{value: 0x0000, lo: 0x01},
	{value: 0x8123, lo: 0x88, hi: 0x8b},
	// Block 0x21, offset 0xdb
	{value: 0x0000, lo: 0x02},
	{value: 0x2636, lo: 0xb3, hi: 0xb3},
	{value: 0x8124, lo: 0xb8, hi: 0xb9},
	// Block 0x22, offset 0xde
	{value: 0x0000, lo: 0x03},
	{value: 0x8125, lo: 0x88, hi: 0x8b},
	{value: 0x2628, lo: 0x9c, hi: 0x9c},
	{value: 0x262f, lo: 0x9d, hi: 0x9d},
	// Block 0x23, offset 0xe2
	{value: 0x0000, lo: 0x05},
	{value: 0x030b, lo: 0x8c, hi: 0x8c},
	{value: 0x812d, lo: 0x98, hi: 0x99},
	{value: 0x812d, lo: 0xb5, hi: 0xb5},
	{value: 0x812d, lo: 0xb7, hi: 0xb7},
	{value: 0x812b, lo: 0xb9, hi: 0xb9},
	// Block 0x24, offset 0xe8
	{value: 0x0000, lo: 0x10},
	{value: 0x2644, lo: 0x83, hi: 0x83},
	{value: 0x264b, lo: 0x8d, hi: 0x8d},
	{value: 0x2652, lo: 0x92, hi: 0x92},
	{value: 0x2659, lo: 0x97, hi: 0x97},
	{value: 0x2660, lo: 0x9c, hi: 0x9c},
	{value: 0x263d, lo: 0xa9, hi: 0xa9},
	{value: 0x8126, lo: 0xb1, hi: 0xb1},
	{value: 0x8127, lo: 0xb2, hi: 0xb2},
	{value: 0x4a84, lo: 0xb3, hi: 0xb3},
	{value: 0x8128, lo: 0xb4, hi: 0xb4},
	{value: 0x4a8d, lo: 0xb5, hi: 0xb5},
	{value: 0x45b4, lo: 0xb6, hi: 0xb6},
	{value: 0x45f4, lo: 0xb7, hi: 0xb7},
	{value: 0x45bc, lo: 0xb8, hi: 0xb8},
	{value: 0x45ff, lo: 0xb9, hi: 0xb9},
	{value: 0x8127, lo: 0xba, hi: 0xbd},
	// Block 0x25, offset 0xf9
	{value: 0x0000, lo: 0x0b},
	{value: 0x8127, lo: 0x80, hi: 0x80},
	{value: 0x4a96, lo: 0x81, hi: 0x81},
	{value: 0x8132, lo: 0x82, hi: 0x83},
	{value: 0x8104, lo: 0x84, hi: 0x84},
	{value: 0x8132, lo: 0x86, hi: 0x87},
	{value: 0x266e, lo: 0x93, hi: 0x93},
	{value: 0x2675, lo: 0x9d, hi: 0x9d},
	{value: 0x267c, lo: 0xa2, hi: 0xa2},
	{value: 0x2683, lo: 0xa7, hi: 0xa7},
	{value: 0x268a, lo: 0xac, hi: 0xac},
	{value: 0x2667, lo: 0xb9, hi: 0xb9},
	// Block 0x26, offset 0x105
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x86, hi: 0x86},
	// Block 0x27, offset 0x107
	{value: 0x0000, lo: 0x05},
	{value: 0xa000, lo: 0xa5, hi: 0xa5},
	{value: 0x2d1e, lo: 0xa6, hi: 0xa6},
	{value: 0x9900, lo: 0xae, hi: 0xae},
	{value: 0x8102, lo: 0xb7, hi: 0xb7},
	{value: 0x8104, lo: 0xb9, hi: 0xba},
	// Block 0x28, offset 0x10d
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x8d, hi: 0x8d},
	// Block 0x29, offset 0x10f
	{value: 0x0000, lo: 0x01},
	{value: 0x030f, lo: 0xbc, hi: 0xbc},
	// Block 0x2a, offset 0x111
	{value: 0x0000, lo: 0x01},
	{value: 0xa000, lo: 0x80, hi: 0x92},
	// Block 0x2b, offset 0x113
	{value: 0x0000, lo: 0x01},
	{value: 0xb900, lo: 0xa1, hi: 0xb5},
	// Block 0x2c, offset 0x115
	{value: 0x0000, lo: 0x01},
	{value: 0x9900, lo: 0xa8, hi: 0xbf},
	// Block 0x2d, offset 0x117
	{value: 0x0000, lo: 0x01},
	{value: 0x9900, lo: 0x80, hi: 0x82},
	// Block 0x2e, offset 0x119
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x9d, hi: 0x9f},
	// Block 0x2f, offset 0x11b
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x94, hi: 0x94},
	{value: 0x8104, lo: 0xb4, hi: 0xb4},
	// Block 0x30, offset 0x11e
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x92, hi: 0x92},
	{value: 0x8132, lo: 0x9d, hi: 0x9d},
	// Block 0x31, offset 0x121
	{value: 0x0000, lo: 0x01},
	{value: 0x8131, lo: 0xa9, hi: 0xa9},
	// Block 0x32, offset 0x123
	{value: 0x0004, lo: 0x02},
	{value: 0x812e, lo: 0xb9, hi: 0xba},
	{value: 0x812d, lo: 0xbb, hi: 0xbb},
	// Block 0x33, offset 0x126
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0x97, hi: 0x97},
	{value: 0x812d, lo: 0x98, hi: 0x98},
	// Block 0x34, offset 0x129
	{value: 0x0000, lo: 0x03},
	{value: 0x8104, lo: 0xa0, hi: 0xa0},
	{value: 0x8132, lo: 0xb5, hi: 0xbc},
	{value: 0x812d, lo: 0xbf, hi: 0xbf},
	// Block 0x35, offset 0x12d
	{value: 0x0000, lo: 0x04},
	{value: 0x8132, lo: 0xb0, hi: 0xb4},
	{value: 0x812d, lo: 0xb5, hi: 0xba},
	{value: 0x8132, lo: 0xbb, hi: 0xbc},
	{value: 0x812d, lo: 0xbd, hi: 0xbd},
	// Block 0x36, offset 0x132
	{value: 0x0000, lo: 0x08},
	{value: 0x2d66, lo: 0x80, hi: 0x80},
	{value: 0x2d6e, lo: 0x81, hi: 0x81},
	{value: 0xa000, lo: 0x82, hi: 0x82},
	{value: 0x2d76, lo: 0x83, hi: 0x83},
	{value: 0x8104, lo: 0x84, hi: 0x84},
	{value: 0x8132, lo: 0xab, hi: 0xab},
	{value: 0x812d, lo: 0xac, hi: 0xac},
	{value: 0x8132, lo: 0xad, hi: 0xb3},
	// Block 0x37, offset 0x13b
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xaa, hi: 0xab},
	// Block 0x38, offset 0x13d
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xa6, hi: 0xa6},
	{value: 0x8104, lo: 0xb2, hi: 0xb3},
	// Block 0x39, offset 0x140
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0xb7, hi: 0xb7},
	// Block 0x3a, offset 0x142
	{value: 0x0000, lo: 0x0a},
	{value: 0x8132, lo: 0x90, hi: 0x92},
	{value: 0x8101, lo: 0x94, hi: 0x94},
	{value: 0x812d, lo: 0x95, hi: 0x99},
	{value: 0x8132, lo: 0x9a, hi: 0x9b},
	{value: 0x812d, lo: 0x9c, hi: 0x9f},
	{value: 0x8132, lo: 0xa0, hi: 0xa0},
	{value: 0x8101, lo: 0xa2, hi: 0xa8},
	{value: 0x812d, lo: 0xad, hi: 0xad},
	{value: 0x8132, lo: 0xb4, hi: 0xb4},
	{value: 0x8132, lo: 0xb8, hi: 0xb9},
	// Block 0x3b, offset 0x14d
	{value: 0x0002, lo: 0x0a},
	{value: 0x0043, lo: 0xac, hi: 0xac},
	{value: 0x00d1, lo: 0xad, hi: 0xad},
	{value: 0x0045, lo: 0xae, hi: 0xae},
	{value: 0x0049, lo: 0xb0, hi: 0xb1},
	{value: 0x00e6, lo: 0xb2, hi: 0xb2},
	{value: 0x004f, lo: 0xb3, hi: 0xba},
	{value: 0x005f, lo: 0xbc, hi: 0xbc},
	{value: 0x00ef, lo: 0xbd, hi: 0xbd},
	{value: 0x0061, lo: 0xbe, hi: 0xbe},
	{value: 0x0065, lo: 0xbf, hi: 0xbf},
	// Block 0x3c, offset 0x158
	{value: 0x0000, lo: 0x0d},
	{value: 0x0001, lo: 0x80, hi: 0x8a},
	{value: 0x043b, lo: 0x91, hi: 0x91},
	{value: 0x429b, lo: 0x97, hi: 0x97},
	{value: 0x001d, lo: 0xa4, hi: 0xa4},
	{value: 0x1873, lo: 0xa5, hi: 0xa5},
	{value: 0x1b5c, lo: 0xa6, hi: 0xa6},
	{value: 0x0001, lo: 0xaf, hi: 0xaf},
	{value: 0x2691, lo: 0xb3, hi: 0xb3},
	{value: 0x27fe, lo: 0xb4, hi: 0xb4},
	{value: 0x2698, lo: 0xb6, hi: 0xb6},
	{value: 0x2808, lo: 0xb7, hi: 0xb7},
	{value: 0x186d, lo: 0xbc, hi: 0xbc},
	{value: 0x4269, lo: 0xbe, hi: 0xbe},
	// Block 0x3d, offset 0x166
	{value: 0x0002, lo: 0x0d},
	{value: 0x1933, lo: 0x87, hi: 0x87},
	{value: 0x1930, lo: 0x88, hi: 0x88},
	{value: 0x1870, lo: 0x89, hi: 0x89},
	{value: 0x298e, lo: 0x97, hi: 0x97},
	{value: 0x0001, lo: 0x9f, hi: 0x9f},
	{value: 0x0021, lo: 0xb0, hi: 0xb0},
	{value: 0x0093, lo: 0xb1, hi: 0xb1},
	{value: 0x0029, lo: 0xb4, hi: 0xb9},
	{value: 0x0017, lo: 0xba, hi: 0xba},
	{value: 0x0467, lo: 0xbb, hi: 0xbb},
	{value: 0x003b, lo: 0xbc, hi: 0xbc},
	{value: 0x0011, lo: 0xbd, hi: 0xbe},
	{value: 0x009d, lo: 0xbf, hi: 0xbf},
	// Block 0x3e, offset 0x174
	{value: 0x0002, lo: 0x0f},
	{value: 0x0021, lo: 0x80, hi: 0x89},
	{value: 0x0017, lo: 0x8a, hi: 0x8a},
	{value: 0x0467, lo: 0x8b, hi: 0x8b},
	{value: 0x003b, lo: 0x8c, hi: 0x8c},
	{value: 0x0011, lo: 0x8d, hi: 0x8e},
	{value: 0x0083, lo: 0x90, hi: 0x90},
	{value: 0x008b, lo: 0x91, hi: 0x91},
	{value: 0x009f, lo: 0x92, hi: 0x92},
	{value: 0x00b1, lo: 0x93, hi: 0x93},
	{value: 0x0104, lo: 0x94, hi: 0x94},
	{value: 0x0091, lo: 0x95, hi: 0x95},
	{value: 0x0097, lo: 0x96, hi: 0x99},
	{value: 0x00a1, lo: 0x9a, hi: 0x9a},
	{value: 0x00a7, lo: 0x9b, hi: 0x9c},
	{value: 0x1999, lo: 0xa8, hi: 0xa8},
	// Block 0x3f, offset 0x184
	{value: 0x0000, lo: 0x0d},
	{value: 0x8132, lo: 0x90, hi: 0x91},
	{value: 0x8101, lo: 0x92, hi: 0x93},
	{value: 0x8132, lo: 0x94, hi: 0x97},
	{value: 0x8101, lo: 0x98, hi: 0x9a},
	{value: 0x8132, lo: 0x9b, hi: 0x9c},
	{value: 0x8132, lo: 0xa1, hi: 0xa1},
	{value: 0x8101, lo: 0xa5, hi: 0xa6},
	{value: 0x8132, lo: 0xa7, hi: 0xa7},
	{value: 0x812d, lo: 0xa8, hi: 0xa8},
	{value: 0x8132, lo: 0xa9, hi: 0xa9},
	{value: 0x8101, lo: 0xaa, hi: 0xab},
	{value: 0x812d, lo: 0xac, hi: 0xaf},
	{value: 0x8132, lo: 0xb0, hi: 0xb0},
	// Block 0x40, offset 0x192
	{value: 0x0007, lo: 0x06},
	{value: 0x2180, lo: 0x89, hi: 0x89},
	{value: 0xa000, lo: 0x90, hi: 0x90},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0xa000, lo: 0x94, hi: 0x94},
	{value: 0x3bb9, lo: 0x9a, hi: 0x9b},
	{value: 0x3bc7, lo: 0xae, hi: 0xae},
	// Block 0x41, offset 0x199
	{value: 0x000e, lo: 0x05},
	{value: 0x3bce, lo: 0x8d, hi: 0x8e},
	{value: 0x3bd5, lo: 0x8f, hi: 0x8f},
	{value: 0xa000, lo: 0x90, hi: 0x90},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0xa000, lo: 0x94, hi: 0x94},
	// Block 0x42, offset 0x19f
	{value: 0x0173, lo: 0x0e},
	{value: 0xa000, lo: 0x83, hi: 0x83},
	{value: 0x3be3, lo: 0x84, hi: 0x84},
	{value: 0xa000, lo: 0x88, hi: 0x88},
	{value: 0x3bea, lo: 0x89, hi: 0x89},
	{value: 0xa000, lo: 0x8b, hi: 0x8b},
	{value: 0x3bf1, lo: 0x8c, hi: 0x8c},
	{value: 0xa000, lo: 0xa3, hi: 0xa3},
	{value: 0x3bf8, lo: 0xa4, hi: 0xa4},
	{value: 0xa000, lo: 0xa5, hi: 0xa5},
	{value: 0x3bff, lo: 0xa6, hi: 0xa6},
	{value: 0x269f, lo: 0xac, hi: 0xad},
	{value: 0x26a6, lo: 0xaf, hi: 0xaf},
	{value: 0x281c, lo: 0xb0, hi: 0xb0},
	{value: 0xa000, lo: 0xbc, hi: 0xbc},
	// Block 0x43, offset 0x1ae
	{value: 0x0007, lo: 0x03},
	{value: 0x3c68, lo: 0xa0, hi: 0xa1},
	{value: 0x3c92, lo: 0xa2, hi: 0xa3},
	{value: 0x3cbc, lo: 0xaa, hi: 0xad},
	// Block 0x44, offset 0x1b2
	{value: 0x0004, lo: 0x01},
	{value: 0x048b, lo: 0xa9, hi: 0xaa},
	// Block 0x45, offset 0x1b4
	{value: 0x0002, lo: 0x03},
	{value: 0x0057, lo: 0x80, hi: 0x8f},
	{value: 0x0083, lo: 0x90, hi: 0xa9},
	{value: 0x0021, lo: 0xaa, hi: 0xaa},
	// Block 0x46, offset 0x1b8
	{value: 0x0000, lo: 0x01},
	{value: 0x299b, lo: 0x8c, hi: 0x8c},
	// Block 0x47, offset 0x1ba
	{value: 0x0263, lo: 0x02},
	{value: 0x1b8c, lo: 0xb4, hi: 0xb4},
	{value: 0x192d, lo: 0xb5, hi: 0xb6},
	// Block 0x48, offset 0x1bd
	{value: 0x0000, lo: 0x01},
	{value: 0x44dd, lo: 0x9c, hi: 0x9c},
	// Block 0x49, offset 0x1bf
	{value: 0x0000, lo: 0x02},
	{value: 0x0095, lo: 0xbc, hi: 0xbc},
	{value: 0x006d, lo: 0xbd, hi: 0xbd},
	// Block 0x4a, offset 0x1c2
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xaf, hi: 0xb1},
	// Block 0x4b, offset 0x1c4
	{value: 0x0000, lo: 0x02},
	{value: 0x047f, lo: 0xaf, hi: 0xaf},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x4c, offset 0x1c7
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xa0, hi: 0xbf},
	// Block 0x4d, offset 0x1c9
	{value: 0x0000, lo: 0x01},
	{value: 0x0dc3, lo: 0x9f, hi: 0x9f},
	// Block 0x4e, offset 0x1cb
	{value: 0x0000, lo: 0x01},
	{value: 0x162f, lo: 0xb3, hi: 0xb3},
	// Block 0x4f, offset 0x1cd
	{value: 0x0004, lo: 0x0b},
	{value: 0x1597, lo: 0x80, hi: 0x82},
	{value: 0x15af, lo: 0x83, hi: 0x83},
	{value: 0x15c7, lo: 0x84, hi: 0x85},
	{value: 0x15d7, lo: 0x86, hi: 0x89},
	{value: 0x15eb, lo: 0x8a, hi: 0x8c},
	{value: 0x15ff, lo: 0x8d, hi: 0x8d},
	{value: 0x1607, lo: 0x8e, hi: 0x8e},
	{value: 0x160f, lo: 0x8f, hi: 0x90},
	{value: 0x161b, lo: 0x91, hi: 0x93},
	{value: 0x162b, lo: 0x94, hi: 0x94},
	{value: 0x1633, lo: 0x95, hi: 0x95},
	// Block 0x50, offset 0x1d9
	{value: 0x0004, lo: 0x09},
	{value: 0x0001, lo: 0x80, hi: 0x80},
	{value: 0x812c, lo: 0xaa, hi: 0xaa},
	{value: 0x8131, lo: 0xab, hi: 0xab},
	{value: 0x8133, lo: 0xac, hi: 0xac},
	{value: 0x812e, lo: 0xad, hi: 0xad},
	{value: 0x812f, lo: 0xae, hi: 0xae},
	{value: 0x812f, lo: 0xaf, hi: 0xaf},
	{value: 0x04b3, lo: 0xb6, hi: 0xb6},
	{value: 0x0887, lo: 0xb8, hi: 0xba},
	// Block 0x51, offset 0x1e3
	{value: 0x0006, lo: 0x09},
	{value: 0x0313, lo: 0xb1, hi: 0xb1},
	{value: 0x0317, lo: 0xb2, hi: 0xb2},
	{value: 0x4a3b, lo: 0xb3, hi: 0xb3},
	{value: 0x031b, lo: 0xb4, hi: 0xb4},
	{value: 0x4a41, lo: 0xb5, hi: 0xb6},
	{value: 0x031f, lo: 0xb7, hi: 0xb7},
	{value: 0x0323, lo: 0xb8, hi: 0xb8},
	{value: 0x0327, lo: 0xb9, hi: 0xb9},
	{value: 0x4a4d, lo: 0xba, hi: 0xbf},
	// Block 0x52, offset 0x1ed
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0xaf, hi: 0xaf},
	{value: 0x8132, lo: 0xb4, hi: 0xbd},
	// Block 0x53, offset 0x1f0
	{value: 0x0000, lo: 0x03},
	{value: 0x020f, lo: 0x9c, hi: 0x9c},
	{value: 0x0212, lo: 0x9d, hi: 0x9d},
	{value: 0x8132, lo: 0x9e, hi: 0x9f},
	// Block 0x54, offset 0x1f4
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xb0, hi: 0xb1},
	// Block 0x55, offset 0x1f6
	{value: 0x0000, lo: 0x01},
	{value: 0x163b, lo: 0xb0, hi: 0xb0},
	// Block 0x56, offset 0x1f8
	{value: 0x000c, lo: 0x01},
	{value: 0x00d7, lo: 0xb8, hi: 0xb9},
	// Block 0x57, offset 0x1fa
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x86, hi: 0x86},
	// Block 0x58, offset 0x1fc
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x84, hi: 0x84},
	{value: 0x8132, lo: 0xa0, hi: 0xb1},
	// Block 0x59, offset 0x1ff
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0xab, hi: 0xad},
	// Block 0x5a, offset 0x201
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x93, hi: 0x93},
	// Block 0x5b, offset 0x203
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0xb3, hi: 0xb3},
	// Block 0x5c, offset 0x205
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x80, hi: 0x80},
	// Block 0x5d, offset 0x207
	{value: 0x0000, lo: 0x05},
	{value: 0x8132, lo: 0xb0, hi: 0xb0},
	{value: 0x8132, lo: 0xb2, hi: 0xb3},
	{value: 0x812d, lo: 0xb4, hi: 0xb4},
	{value: 0x8132, lo: 0xb7, hi: 0xb8},
	{value: 0x8132, lo: 0xbe, hi: 0xbf},
	// Block 0x5e, offset 0x20d
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0x81, hi: 0x81},
	{value: 0x8104, lo: 0xb6, hi: 0xb6},
	// Block 0x5f, offset 0x210
	{value: 0x0008, lo: 0x03},
	{value: 0x1637, lo: 0x9c, hi: 0x9d},
	{value: 0x0125, lo: 0x9e, hi: 0x9e},
	{value: 0x1643, lo: 0x9f, hi: 0x9f},
	// Block 0x60, offset 0x214
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xad, hi: 0xad},
	// Block 0x61, offset 0x216
	{value: 0x0000, lo: 0x06},
	{value: 0xe500, lo: 0x80, hi: 0x80},
	{value: 0xc600, lo: 0x81, hi: 0x9b},
	{value: 0xe500, lo: 0x9c, hi: 0x9c},
	{value: 0xc600, lo: 0x9d, hi: 0xb7},
	{value: 0xe500, lo: 0xb8, hi: 0xb8},
	{value: 0xc600, lo: 0xb9, hi: 0xbf},
	// Block 0x62, offset 0x21d
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x93},
	{value: 0xe500, lo: 0x94, hi: 0x94},
	{value: 0xc600, lo: 0x95, hi: 0xaf},
	{value: 0xe500, lo: 0xb0, hi: 0xb0},
	{value: 0xc600, lo: 0xb1, hi: 0xbf},
	// Block 0x63, offset 0x223
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x8b},
	{value: 0xe500, lo: 0x8c, hi: 0x8c},
	{value: 0xc600, lo: 0x8d, hi: 0xa7},
	{value: 0xe500, lo: 0xa8, hi: 0xa8},
	{value: 0xc600, lo: 0xa9, hi: 0xbf},
	// Block 0x64, offset 0x229
	{value: 0x0000, lo: 0x07},
	{value: 0xc600, lo: 0x80, hi: 0x83},
	{value: 0xe500, lo: 0x84, hi: 0x84},
	{value: 0xc600, lo: 0x85, hi: 0x9f},
	{value: 0xe500, lo: 0xa0, hi: 0xa0},
	{value: 0xc600, lo: 0xa1, hi: 0xbb},
	{value: 0xe500, lo: 0xbc, hi: 0xbc},
	{value: 0xc600, lo: 0xbd, hi: 0xbf},
	// Block 0x65, offset 0x231
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x97},
	{value: 0xe500, lo: 0x98, hi: 0x98},
	{value: 0xc600, lo: 0x99, hi: 0xb3},
	{value: 0xe500, lo: 0xb4, hi: 0xb4},
	{value: 0xc600, lo: 0xb5, hi: 0xbf},
	// Block 0x66, offset 0x237
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x8f},
	{value: 0xe500, lo: 0x90, hi: 0x90},
	{value: 0xc600, lo: 0x91, hi: 0xab},
	{value: 0xe500, lo: 0xac, hi: 0xac},
	{value: 0xc600, lo: 0xad, hi: 0xbf},
	// Block 0x67, offset 0x23d
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x87},
	{value: 0xe500, lo: 0x88, hi: 0x88},
	{value: 0xc600, lo: 0x89, hi: 0xa3},
	{value: 0xe500, lo: 0xa4, hi: 0xa4},
	{value: 0xc600, lo: 0xa5, hi: 0xbf},
	// Block 0x68, offset 0x243
	{value: 0x0000, lo: 0x03},
	{value: 0xc600, lo: 0x80, hi: 0x87},
	{value: 0xe500, lo: 0x88, hi: 0x88},
	{value: 0xc600, lo: 0x89, hi: 0xa3},
	// Block 0x69, offset 0x247
	{value: 0x0002, lo: 0x01},
	{value: 0x0003, lo: 0x81, hi: 0xbf},
	// Block 0x6a, offset 0x249
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0xbd, hi: 0xbd},
	// Block 0x6b, offset 0x24b
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0xa0, hi: 0xa0},
	// Block 0x6c, offset 0x24d
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xb6, hi: 0xba},
	// Block 0x6d, offset 0x24f
	{value: 0x002c, lo: 0x05},
	{value: 0x812d, lo: 0x8d, hi: 0x8d},
	{value: 0x8132, lo: 0x8f, hi: 0x8f},
	{value: 0x8132, lo: 0xb8, hi: 0xb8},
	{value: 0x8101, lo: 0xb9, hi: 0xba},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x6e, offset 0x255
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0xa5, hi: 0xa5},
	{value: 0x812d, lo: 0xa6, hi: 0xa6},
	// Block 0x6f, offset 0x258
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xa4, hi: 0xa7},
	// Block 0x70, offset 0x25a
	{value: 0x0000, lo: 0x05},
	{value: 0x812d, lo: 0x86, hi: 0x87},
	{value: 0x8132, lo: 0x88, hi: 0x8a},
	{value: 0x812d, lo: 0x8b, hi: 0x8b},
	{value: 0x8132, lo: 0x8c, hi: 0x8c},
	{value: 0x812d, lo: 0x8d, hi: 0x90},
	// Block 0x71, offset 0x260
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x86, hi: 0x86},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x72, offset 0x263
	{value: 0x17fe, lo: 0x07},
	{value: 0xa000, lo: 0x99, hi: 0x99},
	{value: 0x4238, lo: 0x9a, hi: 0x9a},
	{value: 0xa000, lo: 0x9b, hi: 0x9b},
	{value: 0x4242, lo: 0x9c, hi: 0x9c},
	{value: 0xa000, lo: 0xa5, hi: 0xa5},
	{value: 0x424c, lo: 0xab, hi: 0xab},
	{value: 0x8104, lo: 0xb9, hi: 0xba},
	// Block 0x73, offset 0x26b
	{value: 0x0000, lo: 0x06},
	{value: 0x8132, lo: 0x80, hi: 0x82},
	{value: 0x9900, lo: 0xa7, hi: 0xa7},
	{value: 0x2d7e, lo: 0xae, hi: 0xae},
	{value: 0x2d88, lo: 0xaf, hi: 0xaf},
	{value: 0xa000, lo: 0xb1, hi: 0xb2},
	{value: 0x8104, lo: 0xb3, hi: 0xb4},
	// Block 0x74, offset 0x272
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x80, hi: 0x80},
	{value: 0x8102, lo: 0x8a, hi: 0x8a},
	// Block 0x75, offset 0x275
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0xb5, hi: 0xb5},
	{value: 0x8102, lo: 0xb6, hi: 0xb6},
	// Block 0x76, offset 0x278
	{value: 0x0002, lo: 0x01},
	{value: 0x8102, lo: 0xa9, hi: 0xaa},
	// Block 0x77, offset 0x27a
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xbb, hi: 0xbc},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x78, offset 0x27d
	{value: 0x0000, lo: 0x07},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2d92, lo: 0x8b, hi: 0x8b},
	{value: 0x2d9c, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	{value: 0x8132, lo: 0xa6, hi: 0xac},
	{value: 0x8132, lo: 0xb0, hi: 0xb4},
	// Block 0x79, offset 0x285
	{value: 0x0000, lo: 0x03},
	{value: 0x8104, lo: 0x82, hi: 0x82},
	{value: 0x8102, lo: 0x86, hi: 0x86},
	{value: 0x8132, lo: 0x9e, hi: 0x9e},
	// Block 0x7a, offset 0x289
	{value: 0x6b5a, lo: 0x06},
	{value: 0x9900, lo: 0xb0, hi: 0xb0},
	{value: 0xa000, lo: 0xb9, hi: 0xb9},
	{value: 0x9900, lo: 0xba, hi: 0xba},
	{value: 0x2db0, lo: 0xbb, hi: 0xbb},
	{value: 0x2da6, lo: 0xbc, hi: 0xbd},
	{value: 0x2dba, lo: 0xbe, hi: 0xbe},
	// Block 0x7b, offset 0x290
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x82, hi: 0x82},
	{value: 0x8102, lo: 0x83, hi: 0x83},
	// Block 0x7c, offset 0x293
	{value: 0x0000, lo: 0x05},
	{value: 0x9900, lo: 0xaf, hi: 0xaf},
	{value: 0xa000, lo: 0xb8, hi: 0xb9},
	{value: 0x2dc4, lo: 0xba, hi: 0xba},
	{value: 0x2dce, lo: 0xbb, hi: 0xbb},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x7d, offset 0x299
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0x80, hi: 0x80},
	// Block 0x7e, offset 0x29b
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x7f, offset 0x29d
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0xb6, hi: 0xb6},
	{value: 0x8102, lo: 0xb7, hi: 0xb7},
	// Block 0x80, offset 0x2a0
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xab, hi: 0xab},
	// Block 0x81, offset 0x2a2
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0xb9, hi: 0xb9},
	{value: 0x8102, lo: 0xba, hi: 0xba},
	// Block 0x82, offset 0x2a5
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xb4, hi: 0xb4},
	// Block 0x83, offset 0x2a7
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x87, hi: 0x87},
	// Block 0x84, offset 0x2a9
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x99, hi: 0x99},
	// Block 0x85, offset 0x2ab
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0x82, hi: 0x82},
	{value: 0x8104, lo: 0x84, hi: 0x85},
	// Block 0x86, offset 0x2ae
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x97, hi: 0x97},
	// Block 0x87, offset 0x2b0
	{value: 0x0000, lo: 0x01},
	{value: 0x8101, lo: 0xb0, hi: 0xb4},
	// Block 0x88, offset 0x2b2
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xb0, hi: 0xb6},
	// Block 0x89, offset 0x2b4
	{value: 0x0000, lo: 0x01},
	{value: 0x8101, lo: 0x9e, hi: 0x9e},
	// Block 0x8a, offset 0x2b6
	{value: 0x0000, lo: 0x0c},
	{value: 0x45cc, lo: 0x9e, hi: 0x9e},
	{value: 0x45d6, lo: 0x9f, hi: 0x9f},
	{value: 0x460a, lo: 0xa0, hi: 0xa0},
	{value: 0x4618, lo: 0xa1, hi: 0xa1},
	{value: 0x4626, lo: 0xa2, hi: 0xa2},
	{value: 0x4634, lo: 0xa3, hi: 0xa3},
	{value: 0x4642, lo: 0xa4, hi: 0xa4},
	{value: 0x812b, lo: 0xa5, hi: 0xa6},
	{value: 0x8101, lo: 0xa7, hi: 0xa9},
	{value: 0x8130, lo: 0xad, hi: 0xad},
	{value: 0x812b, lo: 0xae, hi: 0xb2},
	{value: 0x812d, lo: 0xbb, hi: 0xbf},
	// Block 0x8b, offset 0x2c3
	{value: 0x0000, lo: 0x09},
	{value: 0x812d, lo: 0x80, hi: 0x82},
	{value: 0x8132, lo: 0x85, hi: 0x89},
	{value: 0x812d, lo: 0x8a, hi: 0x8b},
	{value: 0x8132, lo: 0xaa, hi: 0xad},
	{value: 0x45e0, lo: 0xbb, hi: 0xbb},
	{value: 0x45ea, lo: 0xbc, hi: 0xbc},
	{value: 0x4650, lo: 0xbd, hi: 0xbd},
	{value: 0x466c, lo: 0xbe, hi: 0xbe},
	{value: 0x465e, lo: 0xbf, hi: 0xbf},
	// Block 0x8c, offset 0x2cd
	{value: 0x0000, lo: 0x01},
	{value: 0x467a, lo: 0x80, hi: 0x80},
	// Block 0x8d, offset 0x2cf
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x82, hi: 0x84},
	// Block 0x8e, offset 0x2d1
	{value: 0x0002, lo: 0x03},
	{value: 0x0043, lo: 0x80, hi: 0x99},
	{value: 0x0083, lo: 0x9a, hi: 0xb3},
	{value: 0x0043, lo: 0xb4, hi: 0xbf},
	// Block 0x8f, offset 0x2d5
	{value: 0x0002, lo: 0x04},
	{value: 0x005b, lo: 0x80, hi: 0x8d},
	{value: 0x0083, lo: 0x8e, hi: 0x94},
	{value: 0x0093, lo: 0x96, hi: 0xa7},
	{value: 0x0043, lo: 0xa8, hi: 0xbf},
	// Block 0x90, offset 0x2da
	{value: 0x0002, lo: 0x0b},
	{value: 0x0073, lo: 0x80, hi: 0x81},
	{value: 0x0083, lo: 0x82, hi: 0x9b},
	{value: 0x0043, lo: 0x9c, hi: 0x9c},
	{value: 0x0047, lo: 0x9e, hi: 0x9f},
	{value: 0x004f, lo: 0xa2, hi: 0xa2},
	{value: 0x0055, lo: 0xa5, hi: 0xa6},
	{value: 0x005d, lo: 0xa9, hi: 0xac},
	{value: 0x0067, lo: 0xae, hi: 0xb5},
	{value: 0x0083, lo: 0xb6, hi: 0xb9},
	{value: 0x008d, lo: 0xbb, hi: 0xbb},
	{value: 0x0091, lo: 0xbd, hi: 0xbf},
	// Block 0x91, offset 0x2e6
	{value: 0x0002, lo: 0x04},
	{value: 0x0097, lo: 0x80, hi: 0x83},
	{value: 0x00a1, lo: 0x85, hi: 0x8f},
	{value: 0x0043, lo: 0x90, hi: 0xa9},
	{value: 0x0083, lo: 0xaa, hi: 0xbf},
	// Block 0x92, offset 0x2eb
	{value: 0x0002, lo: 0x08},
	{value: 0x00af, lo: 0x80, hi: 0x83},
	{value: 0x0043, lo: 0x84, hi: 0x85},
	{value: 0x0049, lo: 0x87, hi: 0x8a},
	{value: 0x0055, lo: 0x8d, hi: 0x94},
	{value: 0x0067, lo: 0x96, hi: 0x9c},
	{value: 0x0083, lo: 0x9e, hi: 0xb7},
	{value: 0x0043, lo: 0xb8, hi: 0xb9},
	{value: 0x0049, lo: 0xbb, hi: 0xbe},
	// Block 0x93, offset 0x2f4
	{value: 0x0002, lo: 0x05},
	{value: 0x0053, lo: 0x80, hi: 0x84},
	{value: 0x005f, lo: 0x86, hi: 0x86},
	{value: 0x0067, lo: 0x8a, hi: 0x90},
	{value: 0x0083, lo: 0x92, hi: 0xab},
	{value: 0x0043, lo: 0xac, hi: 0xbf},
	// Block 0x94, offset 0x2fa
	{value: 0x0002, lo: 0x04},
	{value: 0x006b, lo: 0x80, hi: 0x85},
	{value: 0x0083, lo: 0x86, hi: 0x9f},
	{value: 0x0043, lo: 0xa0, hi: 0xb9},
	{value: 0x0083, lo: 0xba, hi: 0xbf},
	// Block 0x95, offset 0x2ff
	{value: 0x0002, lo: 0x03},
	{value: 0x008f, lo: 0x80, hi: 0x93},
	{value: 0x0043, lo: 0x94, hi: 0xad},
	{value: 0x0083, lo: 0xae, hi: 0xbf},
	// Block 0x96, offset 0x303
	{value: 0x0002, lo: 0x04},
	{value: 0x00a7, lo: 0x80, hi: 0x87},
	{value: 0x0043, lo: 0x88, hi: 0xa1},
	{value: 0x0083, lo: 0xa2, hi: 0xbb},
	{value: 0x0043, lo: 0xbc, hi: 0xbf},
	// Block 0x97, offset 0x308
	{value: 0x0002, lo: 0x03},
	{value: 0x004b, lo: 0x80, hi: 0x95},
	{value: 0x0083, lo: 0x96, hi: 0xaf},
	{value: 0x0043, lo: 0xb0, hi: 0xbf},
	// Block 0x98, offset 0x30c
	{value: 0x0003, lo: 0x0f},
	{value: 0x01b8, lo: 0x80, hi: 0x80},
	{value: 0x045f, lo: 0x81, hi: 0x81},
	{value: 0x01bb, lo: 0x82, hi: 0x9a},
	{value: 0x045b, lo: 0x9b, hi: 0x9b},
	{value: 0x01c7, lo: 0x9c, hi: 0x9c},
	{value: 0x01d0, lo: 0x9d, hi: 0x9d},
	{value: 0x01d6, lo: 0x9e, hi: 0x9e},
	{value: 0x01fa, lo: 0x9f, hi: 0x9f},
	{value: 0x01eb, lo: 0xa0, hi: 0xa0},
	{value: 0x01e8, lo: 0xa1, hi: 0xa1},
	{value: 0x0173, lo: 0xa2, hi: 0xb2},
	{value: 0x0188, lo: 0xb3, hi: 0xb3},
	{value: 0x01a6, lo: 0xb4, hi: 0xba},
	{value: 0x045f, lo: 0xbb, hi: 0xbb},
	{value: 0x01bb, lo: 0xbc, hi: 0xbf},
	// Block 0x99, offset 0x31c
	{value: 0x0003, lo: 0x0d},
	{value: 0x01c7, lo: 0x80, hi: 0x94},
	{value: 0x045b, lo: 0x95, hi: 0x95},
	{value: 0x01c7, lo: 0x96, hi: 0x96},
	{value: 0x01d0, lo: 0x97, hi: 0x97},
	{value: 0x01d6, lo: 0x98, hi: 0x98},
	{value: 0x01fa, lo: 0x99, hi: 0x99},
	{value: 0x01eb, lo: 0x9a, hi: 0x9a},
	{value: 0x01e8, lo: 0x9b, hi: 0x9b},
	{value: 0x0173, lo: 0x9c, hi: 0xac},
	{value: 0x0188, lo: 0xad, hi: 0xad},
	{value: 0x01a6, lo: 0xae, hi: 0xb4},
	{value: 0x045f, lo: 0xb5, hi: 0xb5},
	{value: 0x01bb, lo: 0xb6, hi: 0xbf},
	// Block 0x9a, offset 0x32a
	{value: 0x0003, lo: 0x0d},
	{value: 0x01d9, lo: 0x80, hi: 0x8e},
	{value: 0x045b, lo: 0x8f, hi: 0x8f},
	{value: 0x01c7, lo: 0x90, hi: 0x90},
	{value: 0x01d0, lo: 0x91, hi: 0x91},
	{value: 0x01d6, lo: 0x92, hi: 0x92},
	{value: 0x01fa, lo: 0x93, hi: 0x93},
	{value: 0x01eb, lo: 0x94, hi: 0x94},
	{value: 0x01e8, lo: 0x95, hi: 0x95},
	{value: 0x0173, lo: 0x96, hi: 0xa6},
	{value: 0x0188, lo: 0xa7, hi: 0xa7},
	{value: 0x01a6, lo: 0xa8, hi: 0xae},
	{value: 0x045f, lo: 0xaf, hi: 0xaf},
	{value: 0x01bb, lo: 0xb0, hi: 0xbf},
	// Block 0x9b, offset 0x338
	{value: 0x0003, lo: 0x0d},
	{value: 0x01eb, lo: 0x80, hi: 0x88},
	{value: 0x045b, lo: 0x89, hi: 0x89},
	{value: 0x01c7, lo: 0x8a, hi: 0x8a},
	{value: 0x01d0, lo: 0x8b, hi: 0x8b},
	{value: 0x01d6, lo: 0x8c, hi: 0x8c},
	{value: 0x01fa, lo: 0x8d, hi: 0x8d},
	{value: 0x01eb, lo: 0x8e, hi: 0x8e},
	{value: 0x01e8, lo: 0x8f, hi: 0x8f},
	{value: 0x0173, lo: 0x90, hi: 0xa0},
	{value: 0x0188, lo: 0xa1, hi: 0xa1},
	{value: 0x01a6, lo: 0xa2, hi: 0xa8},
	{value: 0x045f, lo: 0xa9, hi: 0xa9},
	{value: 0x01bb, lo: 0xaa, hi: 0xbf},
	// Block 0x9c, offset 0x346
	{value: 0x0000, lo: 0x05},
	{value: 0x8132, lo: 0x80, hi: 0x86},
	{value: 0x8132, lo: 0x88, hi: 0x98},
	{value: 0x8132, lo: 0x9b, hi: 0xa1},
	{value: 0x8132, lo: 0xa3, hi: 0xa4},
	{value: 0x8132, lo: 0xa6, hi: 0xaa},
	// Block 0x9d, offset 0x34c
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x90, hi: 0x96},
	// Block 0x9e, offset 0x34e
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0x84, hi: 0x89},
	{value: 0x8102, lo: 0x8a, hi: 0x8a},
	// Block 0x9f, offset 0x351
	{value: 0x0002, lo: 0x09},
	{value: 0x0063, lo: 0x80, hi: 0x89},
	{value: 0x1951, lo: 0x8a, hi: 0x8a},
	{value: 0x1981, lo: 0x8b, hi: 0x8b},
	{value: 0x199c, lo: 0x8c, hi: 0x8c},
	{value: 0x19a2, lo: 0x8d, hi: 0x8d},
	{value: 0x1bc0, lo: 0x8e, hi: 0x8e},
	{value: 0x19ae, lo: 0x8f, hi: 0x8f},
	{value: 0x197b, lo: 0xaa, hi: 0xaa},
	{value: 0x197e, lo: 0xab, hi: 0xab},
	// Block 0xa0, offset 0x35b
	{value: 0x0000, lo: 0x01},
	{value: 0x193f, lo: 0x90, hi: 0x90},
	// Block 0xa1, offset 0x35d
	{value: 0x0028, lo: 0x09},
	{value: 0x2862, lo: 0x80, hi: 0x80},
	{value: 0x2826, lo: 0x81, hi: 0x81},
	{value: 0x2830, lo: 0x82, hi: 0x82},
	{value: 0x2844, lo: 0x83, hi: 0x84},
	{value: 0x284e, lo: 0x85, hi: 0x86},
	{value: 0x283a, lo: 0x87, hi: 0x87},
	{value: 0x2858, lo: 0x88, hi: 0x88},
	{value: 0x0b6f, lo: 0x90, hi: 0x90},
	{value: 0x08e7, lo: 0x91, hi: 0x91},
}

// recompMap: 7520 bytes (entries only)
var recompMap map[uint32]rune
var recompMapOnce sync.Once

const recompMapPacked = "" +
	"\x00A\x03\x00\x00\x00\x00\xc0" + // 0x00410300: 0x000000C0
	"\x00A\x03\x01\x00\x00\x00\xc1" + // 0x00410301: 0x000000C1
	"\x00A\x03\x02\x00\x00\x00\xc2" + // 0x00410302: 0x000000C2
	"\x00A\x03\x03\x00\x00\x00\xc3" + // 0x00410303: 0x000000C3
	"\x00A\x03\b\x00\x00\x00\xc4" + // 0x00410308: 0x000000C4
	"\x00A\x03\n\x00\x00\x00\xc5" + // 0x0041030A: 0x000000C5
	"\x00C\x03'\x00\x00\x00\xc7" + // 0x00430327: 0x000000C7
	"\x00E\x03\x00\x00\x00\x00\xc8" + // 0x00450300: 0x000000C8
	"\x00E\x03\x01\x00\x00\x00\xc9" + // 0x00450301: 0x000000C9
	"\x00E\x03\x02\x00\x00\x00\xca" + // 0x00450302: 0x000000CA
	"\x00E\x03\b\x00\x00\x00\xcb" + // 0x00450308: 0x000000CB
	"\x00I\x03\x00\x00\x00\x00\xcc" + // 0x00490300: 0x000000CC
	"\x00I\x03\x01\x00\x00\x00\xcd" + // 0x00490301: 0x000000CD
	"\x00I\x03\x02\x00\x00\x00\xce" + // 0x00490302: 0x000000CE
	"\x00I\x03\b\x00\x00\x00\xcf" + // 0x00490308: 0x000000CF
	"\x00N\x03\x03\x00\x00\x00\xd1" + // 0x004E0303: 0x000000D1
	"\x00O\x03\x00\x00\x00\x00\xd2" + // 0x004F0300: 0x000000D2
	"\x00O\x03\x01\x00\x00\x00\xd3" + // 0x004F0301: 0x000000D3
	"\x00O\x03\x02\x00\x00\x00\xd4" + // 0x004F0302: 0x000000D4
	"\x00O\x03\x03\x00\x00\x00\xd5" + // 0x004F0303: 0x000000D5
	"\x00O\x03\b\x00\x00\x00\xd6" + // 0x004F0308: 0x000000D6
	"\x00U\x03\x00\x00\x00\x00\xd9" + // 0x00550300: 0x000000D9
	"\x00U\x03\x01\x00\x00\x00\xda" + // 0x00550301: 0x000000DA
	"\x00U\x03\x02\x00\x00\x00\xdb" + // 0x00550302: 0x000000DB
	"\x00U\x03\b\x00\x00\x00\xdc" + // 0x00550308: 0x000000DC
	"\x00Y\x03\x01\x00\x00\x00\xdd" + // 0x00590301: 0x000000DD
	"\x00a\x03\x00\x00\x00\x00\xe0" + // 0x00610300: 0x000000E0
	"\x00a\x03\x01\x00\x00\x00\xe1" + // 0x00610301: 0x000000E1
	"\x00a\x03\x02\x00\x00\x00\xe2" + // 0x00610302: 0x000000E2
	"\x00a\x03\x03\x00\x00\x00\xe3" + // 0x00610303: 0x000000E3
	"\x00a\x03\b\x00\x00\x00\xe4" + // 0x00610308: 0x000000E4
	"\x00a\x03\n\x00\x00\x00\xe5" + // 0x0061030A: 0x000000E5
	"\x00c\x03'\x00\x00\x00\xe7" + // 0x00630327: 0x000000E7
	"\x00e\x03\x00\x00\x00\x00\xe8" + // 0x00650300: 0x000000E8
	"\x00e\x03\x01\x00\x00\x00\xe9" + // 0x00650301: 0x000000E9
	"\x00e\x03\x02\x00\x00\x00\xea" + // 0x00650302: 0x000000EA
	"\x00e\x03\b\x00\x00\x00\xeb" + // 0x00650308: 0x000000EB
	"\x00i\x03\x00\x00\x00\x00\xec" + // 0x00690300: 0x000000EC
	"\x00i\x03\x01\x00\x00\x00\xed" + // 0x00690301: 0x000000ED
	"\x00i\x03\x02\x00\x00\x00\xee" + // 0x00690302: 0x000000EE
	"\x00i\x03\b\x00\x00\x00\xef" + // 0x00690308: 0x000000EF
	"\x00n\x03\x03\x00\x00\x00\xf1" + // 0x006E0303: 0x000000F1
	"\x00o\x03\x00\x00\x00\x00\xf2" + // 0x006F0300: 0x000000F2
	"\x00o\x03\x01\x00\x00\x00\xf3" + // 0x006F0301: 0x000000F3
	"\x00o\x03\x02\x00\x00\x00\xf4" + // 0x006F0302: 0x000000F4
	"\x00o\x03\x03\x00\x00\x00\xf5" + // 0x006F0303: 0x000000F5
	"\x00o\x03\b\x00\x00\x00\xf6" + // 0x006F0308: 0x000000F6
	"\x00u\x03\x00\x00\x00\x00\xf9" + // 0x00750300: 0x000000F9
	"\x00u\x03\x01\x00\x00\x00\xfa" + // 0x00750301: 0x000000FA
	"\x00u\x03\x02\x00\x00\x00\xfb" + // 0x00750302: 0x000000FB
	"\x00u\x03\b\x00\x00\x00\xfc" + // 0x00750308: 0x000000FC
	"\x00y\x03\x01\x00\x00\x00\xfd" + // 0x00790301: 0x000000FD
	"\x00y\x03\b\x00\x00\x00\xff" + // 0x00790308: 0x000000FF
	"\x00A\x03\x04\x00\x00\x01\x00" + // 0x00410304: 0x00000100
	"\x00a\x03\x04\x00\x00\x01\x01" + // 0x00610304: 0x00000101
	"\x00A\x03\x06\x00\x00\x01\x02" + // 0x00410306: 0x00000102
	"\x00a\x03\x06\x00\x00\x01\x03" + // 0x00610306: 0x00000103
	"\x00A\x03(\x00\x00\x01\x04" + // 0x00410328: 0x00000104
	"\x00a\x03(\x00\x00\x01\x05" + // 0x00610328: 0x00000105
	"\x00C\x03\x01\x00\x00\x01\x06" + // 0x00430301: 0x00000106
	"\x00c\x03\x01\x00\x00\x01\a" + // 0x00630301: 0x00000107
	"\x00C\x03\x02\x00\x00\x01\b" + // 0x00430302: 0x00000108
	"\x00c\x03\x02\x00\x00\x01\t" + // 0x00630302: 0x00000109
	"\x00C\x03\a\x00\x00\x01\n" + // 0x00430307: 0x0000010A
	"\x00c\x03\a\x00\x00\x01\v" + // 0x00630307: 0x0000010B
	"\x00C\x03\f\x00\x00\x01\f" + // 0x0043030C: 0x0000010C
	"\x00c\x03\f\x00\x00\x01\r" + // 0x0063030C: 0x0000010D
	"\x00D\x03\f\x00\x00\x01\x0e" + // 0x0044030C: 0x0000010E
	"\x00d\x03\f\x00\x00\x01\x0f" + // 0x0064030C: 0x0000010F
	"\x00E\x03\x04\x00\x00\x01\x12" + // 0x00450304: 0x00000112
	"\x00e\x03\x04\x00\x00\x01\x13" + // 0x00650304: 0x00000113
	"\x00E\x03\x06\x00\x00\x01\x14" + // 0x00450306: 0x00000114
	"\x00e\x03\x06\x00\x00\x01\x15" + // 0x00650306: 0x00000115
	"\x00E\x03\a\x00\x00\x01\x16" + // 0x00450307: 0x00000116
	"\x00e\x03\a\x00\x00\x01\x17" + // 0x00650307: 0x00000117
	"\x00E\x03(\x00\x00\x01\x18" + // 0x00450328: 0x00000118
	"\x00e\x03(\x00\x00\x01\x19" + // 0x00650328: 0x00000119
	"\x00E\x03\f\x00\x00\x01\x1a" + // 0x0045030C: 0x0000011A
	"\x00e\x03\f\x00\x00\x01\x1b" + // 0x0065030C: 0x0000011B
	"\x00G\x03\x02\x00\x00\x01\x1c" + // 0x00470302: 0x0000011C
	"\x00g\x03\x02\x00\x00\x01\x1d" + // 0x00670302: 0x0000011D
	"\x00G\x03\x06\x00\x00\x01\x1e" + // 0x00470306: 0x0000011E
	"\x00g\x03\x06\x00\x00\x01\x1f" + // 0x00670306: 0x0000011F
	"\x00G\x03\a\x00\x00\x01 " + // 0x00470307: 0x00000120
	"\x00g\x03\a\x00\x00\x01!" + // 0x00670307: 0x00000121
	"\x00G\x03'\x00\x00\x01\"" + // 0x00470327: 0x00000122
	"\x00g\x03'\x00\x00\x01#" + // 0x00670327: 0x00000123
	"\x00H\x03\x02\x00\x00\x01$" + // 0x00480302: 0x00000124
	"\x00h\x03\x02\x00\x00\x01%" + // 0x00680302: 0x00000125
	"\x00I\x03\x03\x00\x00\x01(" + // 0x00490303: 0x00000128
	"\x00i\x03\x03\x00\x00\x01)" + // 0x00690303: 0x00000129
	"\x00I\x03\x04\x00\x00\x01*" + // 0x00490304: 0x0000012A
	"\x00i\x03\x04\x00\x00\x01+" + // 0x00690304: 0x0000012B
	"\x00I\x03\x06\x00\x00\x01," + // 0x00490306: 0x0000012C
	"\x00i\x03\x06\x00\x00\x01-" + // 0x00690306: 0x0000012D
	"\x00I\x03(\x00\x00\x01." + // 0x00490328: 0x0000012E
	"\x00i\x03(\x00\x00\x01/" + // 0x00690328: 0x0000012F
	"\x00I\x03\a\x00\x00\x010" + // 0x00490307: 0x00000130
	"\x00J\x03\x02\x00\x00\x014" + // 0x004A0302: 0x00000134
	"\x00j\x03\x02\x00\x00\x015" + // 0x006A0302: 0x00000135
	"\x00K\x03'\x00\x00\x016" + // 0x004B0327: 0x00000136
	"\x00k\x03'\x00\x00\x017" + // 0x006B0327: 0x00000137
	"\x00L\x03\x01\x00\x00\x019" + // 0x004C0301: 0x00000139
	"\x00l\x03\x01\x00\x00\x01:" + // 0x006C0301: 0x0000013A
	"\x00L\x03'\x00\x00\x01;" + // 0x004C0327: 0x0000013B
	"\x00l\x03'\x00\x00\x01<" + // 0x006C0327: 0x0000013C
	"\x00L\x03\f\x00\x00\x01=" + // 0x004C030C: 0x0000013D
	"\x00l\x03\f\x00\x00\x01>" + // 0x006C030C: 0x0000013E
	"\x00N\x03\x01\x00\x00\x01C" + // 0x004E0301: 0x00000143
	"\x00n\x03\x01\x00\x00\x01D" + // 0x006E0301: 0x00000144
	"\x00N\x03'\x00\x00\x01E" + // 0x004E0327: 0x00000145
	"\x00n\x03'\x00\x00\x01F" + // 0x006E0327: 0x00000146
	"\x00N\x03\f\x00\x00\x01G" + // 0x004E030C: 0x00000147
	"\x00n\x03\f\x00\x00\x01H" + // 0x006E030C: 0x00000148
	"\x00O\x03\x04\x00\x00\x01L" + // 0x004F0304: 0x0000014C
	"\x00o\x03\x04\x00\x00\x01M" + // 0x006F0304: 0x0000014D
	"\x00O\x03\x06\x00\x00\x01N" + // 0x004F0306: 0x0000014E
	"\x00o\x03\x06\x00\x00\x01O" + // 0x006F0306: 0x0000014F
	"\x00O\x03\v\x00\x00\x01P" + // 0x004F030B: 0x00000150
	"\x00o\x03\v\x00\x00\x01Q" + // 0x006F030B: 0x00000151
	"\x00R\x03\x01\x00\x00\x01T" + // 0x00520301: 0x00000154
	"\x00r\x03\x01\x00\x00\x01U" + // 0x00720301: 0x00000155
	"\x00R\x03'\x00\x00\x01V" + // 0x00520327: 0x00000156
	"\x00r\x03'\x00\x00\x01W" + // 0x00720327: 0x00000157
	"\x00R\x03\f\x00\x00\x01X" + // 0x0052030C: 0x00000158
	"\x00r\x03\f\x00\x00\x01Y" + // 0x0072030C: 0x00000159
	"\x00S\x03\x01\x00\x00\x01Z" + // 0x00530301: 0x0000015A
	"\x00s\x03\x01\x00\x00\x01[" + // 0x00730301: 0x0000015B
	"\x00S\x03\x02\x00\x00\x01\\" + // 0x00530302: 0x0000015C
	"\x00s\x03\x02\x00\x00\x01]" + // 0x00730302: 0x0000015D
	"\x00S\x03'\x00\x00\x01^" + // 0x00530327: 0x0000015E
	"\x00s\x03'\x00\x00\x01_" + // 0x00730327: 0x0000015F
	"\x00S\x03\f\x00\x00\x01`" + // 0x0053030C: 0x00000160
	"\x00s\x03\f\x00\x00\x01a" + // 0x0073030C: 0x00000161
	"\x00T\x03'\x00\x00\x01b" + // 0x00540327: 0x00000162
	"\x00t\x03'\x00\x00\x01c" + // 0x00740327: 0x00000163
	"\x00T\x03\f\x00\x00\x01d" + // 0x0054030C: 0x00000164
	"\x00t\x03\f\x00\x00\x01e" + // 0x0074030C: 0x00000165
	"\x00U\x03\x03\x00\x00\x01h" + // 0x00550303: 0x00000168
	"\x00u\x03\x03\x00\x00\x01i" + // 0x00750303: 0x00000169
	"\x00U\x03\x04\x00\x00\x01j" + // 0x00550304: 0x0000016A
	"\x00u\x03\x04\x00\x00\x01k" + // 0x00750304: 0x0000016B
	"\x00U\x03\x06\x00\x00\x01l" + // 0x00550306: 0x0000016C
	"\x00u\x03\x06\x00\x00\x01m" + // 0x00750306: 0x0000016D
	"\x00U\x03\n\x00\x00\x01n" + // 0x0055030A: 0x0000016E
	"\x00u\x03\n\x00\x00\x01o" + // 0x0075030A: 0x0000016F
	"\x00U\x03\v\x00\x00\x01p" + // 0x0055030B: 0x00000170
	"\x00u\x03\v\x00\x00\x01q" + // 0x0075030B: 0x00000171
	"\x00U\x03(\x00\x00\x01r" + // 0x00550328: 0x00000172
	"\x00u\x03(\x00\x00\x01s" + // 0x00750328: 0x00000173
	"\x00W\x03\x02\x00\x00\x01t" + // 0x00570302: 0x00000174
	"\x00w\x03\x02\x00\x00\x01u" + // 0x00770302: 0x00000175
	"\x00Y\x03\x02\x00\x00\x01v" + // 0x00590302: 0x00000176
	"\x00y\x03\x02\x00\x00\x01w" + // 0x00790302: 0x00000177
	"\x00Y\x03\b\x00\x00\x01x" + // 0x00590308: 0x00000178
	"\x00Z\x03\x01\x00\x00\x01y" + // 0x005A0301: 0x00000179
	"\x00z\x03\x01\x00\x00\x01z" + // 0x007A0301: 0x0000017A
	"\x00Z\x03\a\x00\x00\x01{" + // 0x005A0307: 0x0000017B
	"\x00z\x03\a\x00\x00\x01|" + // 0x007A0307: 0x0000017C
	"\x00Z\x03\f\x00\x00\x01}" + // 0x005A030C: 0x0000017D
	"\x00z\x03\f\x00\x00\x01~" + // 0x007A030C: 0x0000017E
	"\x00O\x03\x1b\x00\x00\x01\xa0" + // 0x004F031B: 0x000001A0
	"\x00o\x03\x1b\x00\x00\x01\xa1" + // 0x006F031B: 0x000001A1
	"\x00U\x03\x1b\x00\x00\x01\xaf" + // 0x0055031B: 0x000001AF
	"\x00u\x03\x1b\x00\x00\x01\xb0" + // 0x0075031B: 0x000001B0
	"\x00A\x03\f\x00\x00\x01\xcd" + // 0x0041030C: 0x000001CD
	"\x00a\x03\f\x00\x00\x01\xce" + // 0x0061030C: 0x000001CE
	"\x00I\x03\f\x00\x00\x01\xcf" + // 0x0049030C: 0x000001CF
	"\x00i\x03\f\x00\x00\x01\xd0" + // 0x0069030C: 0x000001D0
	"\x00O\x03\f\x00\x00\x01\xd1" + // 0x004F030C: 0x000001D1
	"\x00o\x03\f\x00\x00\x01\xd2" + // 0x006F030C: 0x000001D2
	"\x00U\x03\f\x00\x00\x01\xd3" + // 0x0055030C: 0x000001D3
	"\x00u\x03\f\x00\x00\x01\xd4" + // 0x0075030C: 0x000001D4
	"\x00\xdc\x03\x04\x00\x00\x01\xd5" + // 0x00DC0304: 0x000001D5
	"\x00\xfc\x03\x04\x00\x00\x01\xd6" + // 0x00FC0304: 0x000001D6
	"\x00\xdc\x03\x01\x00\x00\x01\xd7" + // 0x00DC0301: 0x000001D7
	"\x00\xfc\x03\x01\x00\x00\x01\xd8" + // 0x00FC0301: 0x000001D8
	"\x00\xdc\x03\f\x00\x00\x01\xd9" + // 0x00DC030C: 0x000001D9
	"\x00\xfc\x03\f\x00\x00\x01\xda" + // 0x00FC030C: 0x000001DA
	"\x00\xdc\x03\x00\x00\x00\x01\xdb" + // 0x00DC0300: 0x000001DB
	"\x00\xfc\x03\x00\x00\x00\x01\xdc" + // 0x00FC0300: 0x000001DC
	"\x00\xc4\x03\x04\x00\x00\x01\xde" + // 0x00C40304: 0x000001DE
	"\x00\xe4\x03\x04\x00\x00\x01\xdf" + // 0x00E40304: 0x000001DF
	"\x02&\x03\x04\x00\x00\x01\xe0" + // 0x02260304: 0x000001E0
	"\x02'\x03\x04\x00\x00\x01\xe1" + // 0x02270304: 0x000001E1
	"\x00\xc6\x03\x04\x00\x00\x01\xe2" + // 0x00C60304: 0x000001E2
	"\x00\xe6\x03\x04\x00\x00\x01\xe3" + // 0x00E60304: 0x000001E3
	"\x00G\x03\f\x00\x00\x01\xe6" + // 0x0047030C: 0x000001E6
	"\x00g\x03\f\x00\x00\x01\xe7" + // 0x0067030C: 0x000001E7
	"\x00K\x03\f\x00\x00\x01\xe8" + // 0x004B030C: 0x000001E8
	"\x00k\x03\f\x00\x00\x01\xe9" + // 0x006B030C: 0x000001E9
	"\x00O\x03(\x00\x00\x01\xea" + // 0x004F0328: 0x000001EA
	"\x00o\x03(\x00\x00\x01\xeb" + // 0x006F0328: 0x000001EB
	"\x01\xea\x03\x04\x00\x00\x01\xec" + // 0x01EA0304: 0x000001EC
	"\x01\xeb\x03\x04\x00\x00\x01\xed" + // 0x01EB0304: 0x000001ED
	"\x01\xb7\x03\f\x00\x00\x01\xee" + // 0x01B7030C: 0x000001EE
	"\x02\x92\x03\f\x00\x00\x01\xef" + // 0x0292030C: 0x000001EF
	"\x00j\x03\f\x00\x00\x01\xf0" + // 0x006A030C: 0x000001F0
	"\x00G\x03\x01\x00\x00\x01\xf4" + // 0x00470301: 0x000001F4
	"\x00g\x03\x01\x00\x00\x01\xf5" + // 0x00670301: 0x000001F5
	"\x00N\x03\x00\x00\x00\x01\xf8" + // 0x004E0300: 0x000001F8
	"\x00n\x03\x00\x00\x00\x01\xf9" + // 0x006E0300: 0x000001F9
	"\x00\xc5\x03\x01\x00\x00\x01\xfa" + // 0x00C50301: 0x000001FA
	"\x00\xe5\x03\x01\x00\x00\x01\xfb" + // 0x00E50301: 0x000001FB
	"\x00\xc6\x03\x01\x00\x00\x01\xfc" + // 0x00C60301: 0x000001FC
	"\x00\xe6\x03\x01\x00\x00\x01\xfd" + // 0x00E60301: 0x000001FD
	"\x00\xd8\x03\x01\x00\x00\x01\xfe" + // 0x00D80301: 0x000001FE
	"\x00\xf8\x03\x01\x00\x00\x01\xff" + // 0x00F80301: 0x000001FF
	"\x00A\x03\x0f\x00\x00\x02\x00" + // 0x0041030F: 0x00000200
	"\x00a\x03\x0f\x00\x00\x02\x01" + // 0x0061030F: 0x00000201
	"\x00A\x03\x11\x00\x00\x02\x02" + // 0x00410311: 0x00000202
	"\x00a\x03\x11\x00\x00\x02\x03" + // 0x00610311: 0x00000203
	"\x00E\x03\x0f\x00\x00\x02\x04" + // 0x0045030F: 0x00000204
	"\x00e\x03\x0f\x00\x00\x02\x05" + // 0x0065030F: 0x00000205
	"\x00E\x03\x11\x00\x00\x02\x06" + // 0x00450311: 0x00000206
	"\x00e\x03\x11\x00\x00\x02\a" + // 0x00650311: 0x00000207
	"\x00I\x03\x0f\x00\x00\x02\b" + // 0x0049030F: 0x00000208
	"\x00i\x03\x0f\x00\x00\x02\t" + // 0x0069030F: 0x00000209
	"\x00I\x03\x11\x00\x00\x02\n" + // 0x00490311: 0x0000020A
	"\x00i\x03\x11\x00\x00\x02\v" + // 0x00690311: 0x0000020B
	"\x00O\x03\x0f\x00\x00\x02\f" + // 0x004F030F: 0x0000020C
	"\x00o\x03\x0f\x00\x00\x02\r" + // 0x006F030F: 0x0000020D
	"\x00O\x03\x11\x00\x00\x02\x0e" + // 0x004F0311: 0x0000020E
	"\x00o\x03\x11\x00\x00\x02\x0f" + // 0x006F0311: 0x0000020F
	"\x00R\x03\x0f\x00\x00\x02\x10" + // 0x0052030F: 0x00000210
	"\x00r\x03\x0f\x00\x00\x02\x11" + // 0x0072030F: 0x00000211
	"\x00R\x03\x11\x00\x00\x02\x12" + // 0x00520311: 0x00000212
	"\x00r\x03\x11\x00\x00\x02\x13" + // 0x00720311: 0x00000213
	"\x00U\x03\x0f\x00\x00\x02\x14" + // 0x0055030F: 0x00000214
	"\x00u\x03\x0f\x00\x00\x02\x15" + // 0x0075030F: 0x00000215
	"\x00U\x03\x11\x00\x00\x02\x16" + // 0x00550311: 0x00000216
	"\x00u\x03\x11\x00\x00\x02\x17" + // 0x00750311: 0x00000217
	"\x00S\x03&\x00\x00\x02\x18" + // 0x00530326: 0x00000218
	"\x00s\x03&\x00\x00\x02\x19" + // 0x00730326: 0x00000219
	"\x00T\x03&\x00\x00\x02\x1a" + // 0x00540326: 0x0000021A
	"\x00t\x03&\x00\x00\x02\x1b" + // 0x00740326: 0x0000021B
	"\x00H\x03\f\x00\x00\x02\x1e" + // 0x0048030C: 0x0000021E
	"\x00h\x03\f\x00\x00\x02\x1f" + // 0x0068030C: 0x0000021F
	"\x00A\x03\a\x00\x00\x02&" + // 0x00410307: 0x00000226
	"\x00a\x03\a\x00\x00\x02'" + // 0x00610307: 0x00000227
	"\x00E\x03'\x00\x00\x02(" + // 0x00450327: 0x00000228
	"\x00e\x03'\x00\x00\x02)" + // 0x00650327: 0x00000229
	"\x00\xd6\x03\x04\x00\x00\x02*" + // 0x00D60304: 0x0000022A
	"\x00\xf6\x03\x04\x00\x00\x02+" + // 0x00F60304: 0x0000022B
	"\x00\xd5\x03\x04\x00\x00\x02," + // 0x00D50304: 0x0000022C
	"\x00\xf5\x03\x04\x00\x00\x02-" + // 0x00F50304: 0x0000022D
	"\x00O\x03\a\x00\x00\x02." + // 0x004F0307: 0x0000022E
	"\x00o\x03\a\x00\x00\x02/" + // 0x006F0307: 0x0000022F
	"\x02.\x03\x04\x00\x00\x020" + // 0x022E0304: 0x00000230
	"\x02/\x03\x04\x00\x00\x021" + // 0x022F0304: 0x00000231
	"\x00Y\x03\x04\x00\x00\x022" + // 0x00590304: 0x00000232
	"\x00y\x03\x04\x00\x00\x023" + // 0x00790304: 0x00000233
	"\x00\xa8\x03\x01\x00\x00\x03\x85" + // 0x00A80301: 0x00000385
	"\x03\x91\x03\x01\x00\x00\x03\x86" + // 0x03910301: 0x00000386
	"\x03\x95\x03\x01\x00\x00\x03\x88" + // 0x03950301: 0x00000388
	"\x03\x97\x03\x01\x00\x00\x03\x89" + // 0x03970301: 0x00000389
	"\x03\x99\x03\x01\x00\x00\x03\x8a" + // 0x03990301: 0x0000038A
	"\x03\x9f\x03\x01\x00\x00\x03\x8c" + // 0x039F0301: 0x0000038C
	"\x03\xa5\x03\x01\x00\x00\x03\x8e" + // 0x03A50301: 0x0000038E
	"\x03\xa9\x03\x01\x00\x00\x03\x8f" + // 0x03A90301: 0x0000038F
	"\x03\xca\x03\x01\x00\x00\x03\x90" + // 0x03CA0301: 0x00000390
	"\x03\x99\x03\b\x00\x00\x03\xaa" + // 0x03990308: 0x000003AA
	"\x03\xa5\x03\b\x00\x00\x03\xab" + // 0x03A50308: 0x000003AB
	"\x03\xb1\x03\x01\x00\x00\x03\xac" + // 0x03B10301: 0x000003AC
	"\x03\xb5\x03\x01\x00\x00\x03\xad" + // 0x03B50301: 0x000003AD
	"\x03\xb7\x03\x01\x00\x00\x03\xae" + // 0x03B70301: 0x000003AE
	"\x03\xb9\x03\x01\x00\x00\x03\xaf" + // 0x03B90301: 0x000003AF
	"\x03\xcb\x03\x01\x00\x00\x03\xb0" + // 0x03CB0301: 0x000003B0
	"\x03\xb9\x03\b\x00\x00\x03\xca" + // 0x03B90308: 0x000003CA
	"\x03\xc5\x03\b\x00\x00\x03\xcb" + // 0x03C50308: 0x000003CB
	"\x03\xbf\x03\x01\x00\x00\x03\xcc" + // 0x03BF0301: 0x000003CC
	"\x03\xc5\x03\x01\x00\x00\x03\xcd" + // 0x03C50301: 0x000003CD
	"\x03\xc9\x03\x01\x00\x00\x03\xce" + // 0x03C90301: 0x000003CE
	"\x03\xd2\x03\x01\x00\x00\x03\xd3" + // 0x03D20301: 0x000003D3
	"\x03\xd2\x03\b\x00\x00\x03\xd4" + // 0x03D20308: 0x000003D4
	"\x04\x15\x03\x00\x00\x00\x04\x00" + // 0x04150300: 0x00000400
	"\x04\x15\x03\b\x00\x00\x04\x01" + // 0x04150308: 0x00000401
	"\x04\x13\x03\x01\x00\x00\x04\x03" + // 0x04130301: 0x00000403
	"\x04\x06\x03\b\x00\x00\x04\a" + // 0x04060308: 0x00000407
	"\x04\x1a\x03\x01\x00\x00\x04\f" + // 0x041A0301: 0x0000040C
	"\x04\x18\x03\x00\x00\x00\x04\r" + // 0x04180300: 0x0000040D
	"\x04#\x03\x06\x00\x00\x04\x0e" + // 0x04230306: 0x0000040E
	"\x04\x18\x03\x06\x00\x00\x04\x19" + // 0x04180306: 0x00000419
	"\x048\x03\x06\x00\x00\x049" + // 0x04380306: 0x00000439
	"\x045\x03\x00\x00\x00\x04P" + // 0x04350300: 0x00000450
	"\x045\x03\b\x00\x00\x04Q" + // 0x04350308: 0x00000451
	"\x043\x03\x01\x00\x00\x04S" + // 0x04330301: 0x00000453
	"\x04V\x03\b\x00\x00\x04W" + // 0x04560308: 0x00000457
	"\x04:\x03\x01\x00\x00\x04\\" + // 0x043A0301: 0x0000045C
	"\x048\x03\x00\x00\x00\x04]" + // 0x04380300: 0x0000045D
	"\x04C\x03\x06\x00\x00\x04^" + // 0x04430306: 0x0000045E
	"\x04t\x03\x0f\x00\x00\x04v" + // 0x0474030F: 0x00000476
	"\x04u\x03\x0f\x00\x00\x04w" + // 0x0475030F: 0x00000477
	"\x04\x16\x03\x06\x00\x00\x04\xc1" + // 0x04160306: 0x000004C1
	"\x046\x03\x06\x00\x00\x04\xc2" + // 0x04360306: 0x000004C2
	"\x04\x10\x03\x06\x00\x00\x04\xd0" + // 0x04100306: 0x000004D0
	"\x040\x03\x06\x00\x00\x04\xd1" + // 0x04300306: 0x000004D1
	"\x04\x10\x03\b\x00\x00\x04\xd2" + // 0x04100308: 0x000004D2
	"\x040\x03\b\x00\x00\x04\xd3" + // 0x04300308: 0x000004D3
	"\x04\x15\x03\x06\x00\x00\x04\xd6" + // 0x04150306: 0x000004D6
	"\x045\x03\x06\x00\x00\x04\xd7" + // 0x04350306: 0x000004D7
	"\x04\xd8\x03\b\x00\x00\x04\xda" + // 0x04D80308: 0x000004DA
	"\x04\xd9\x03\b\x00\x00\x04\xdb" + // 0x04D90308: 0x000004DB
	"\x04\x16\x03\b\x00\x00\x04\xdc" + // 0x04160308: 0x000004DC
	"\x046\x03\b\x00\x00\x04\xdd" + // 0x04360308: 0x000004DD
	"\x04\x17\x03\b\x00\x00\x04\xde" + // 0x04170308: 0x000004DE
	"\x047\x03\b\x00\x00\x04\xdf" + // 0x04370308: 0x000004DF
	"\x04\x18\x03\x04\x00\x00\x04\xe2" + // 0x04180304: 0x000004E2
	"\x048\x03\x04\x00\x00\x04\xe3" + // 0x04380304: 0x000004E3
	"\x04\x18\x03\b\x00\x00\x04\xe4" + // 0x04180308: 0x000004E4
	"\x048\x03\b\x00\x00\x04\xe5" + // 0x04380308: 0x000004E5
	"\x04\x1e\x03\b\x00\x00\x04\xe6" + // 0x041E0308: 0x000004E6
	"\x04>\x03\b\x00\x00\x04\xe7" + // 0x043E0308: 0x000004E7
	"\x04\xe8\x03\b\x00\x00\x04\xea" + // 0x04E80308: 0x000004EA
	"\x04\xe9\x03\b\x00\x00\x04\xeb" + // 0x04E90308: 0x000004EB
	"\x04-\x03\b\x00\x00\x04\xec" + // 0x042D0308: 0x000004EC
	"\x04M\x03\b\x00\x00\x04\xed" + // 0x044D0308: 0x000004ED
	"\x04#\x03\x04\x00\x00\x04\xee" + // 0x04230304: 0x000004EE
	"\x04C\x03\x04\x00\x00\x04\xef" + // 0x04430304: 0x000004EF
	"\x04#\x03\b\x00\x00\x04\xf0" + // 0x04230308: 0x000004F0
	"\x04C\x03\b\x00\x00\x04\xf1" + // 0x04430308: 0x000004F1
	"\x04#\x03\v\x00\x00\x04\xf2" + // 0x0423030B: 0x000004F2
	"\x04C\x03\v\x00\x00\x04\xf3" + // 0x0443030B: 0x000004F3
	"\x04'\x03\b\x00\x00\x04\xf4" + // 0x04270308: 0x000004F4
	"\x04G\x03\b\x00\x00\x04\xf5" + // 0x04470308: 0x000004F5
	"\x04+\x03\b\x00\x00\x04\xf8" + // 0x042B0308: 0x000004F8
	"\x04K\x03\b\x00\x00\x04\xf9" + // 0x044B0308: 0x000004F9
	"\x06'\x06S\x00\x00\x06\"" + // 0x06270653: 0x00000622
	"\x06'\x06T\x00\x00\x06#" + // 0x06270654: 0x00000623
	"\x06H\x06T\x00\x00\x06$" + // 0x06480654: 0x00000624
	"\x06'\x06U\x00\x00\x06%" + // 0x06270655: 0x00000625
	"\x06J\x06T\x00\x00\x06&" + // 0x064A0654: 0x00000626
	"\x06\xd5\x06T\x00\x00\x06\xc0" + // 0x06D50654: 0x000006C0
	"\x06\xc1\x06T\x00\x00\x06\xc2" + // 0x06C10654: 0x000006C2
	"\x06\xd2\x06T\x00\x00\x06\xd3" + // 0x06D20654: 0x000006D3
	"\t(\t<\x00\x00\t)" + // 0x0928093C: 0x00000929
	"\t0\t<\x00\x00\t1" + // 0x0930093C: 0x00000931
	"\t3\t<\x00\x00\t4" + // 0x0933093C: 0x00000934
	"\t\xc7\t\xbe\x00\x00\t\xcb" + // 0x09C709BE: 0x000009CB
	"\t\xc7\t\xd7\x00\x00\t\xcc" + // 0x09C709D7: 0x000009CC
	"\vG\vV\x00\x00\vH" + // 0x0B470B56: 0x00000B48
	"\vG\v>\x00\x00\vK" + // 0x0B470B3E: 0x00000B4B
	"\vG\vW\x00\x00\vL" + // 0x0B470B57: 0x00000B4C
	"\v\x92\v\xd7\x00\x00\v\x94" + // 0x0B920BD7: 0x00000B94
	"\v\xc6\v\xbe\x00\x00\v\xca" + // 0x0BC60BBE: 0x00000BCA
	"\v\xc7\v\xbe\x00\x00\v\xcb" + // 0x0BC70BBE: 0x00000BCB
	"\v\xc6\v\xd7\x00\x00\v\xcc" + // 0x0BC60BD7: 0x00000BCC
	"\fF\fV\x00\x00\fH" + // 0x0C460C56: 0x00000C48
	"\f\xbf\f\xd5\x00\x00\f\xc0" + // 0x0CBF0CD5: 0x00000CC0
	"\f\xc6\f\xd5\x00\x00\f\xc7" + // 0x0CC60CD5: 0x00000CC7
	"\f\xc6\f\xd6\x00\x00\f\xc8" + // 0x0CC60CD6: 0x00000CC8
	"\f\xc6\f\xc2\x00\x00\f\xca" + // 0x0CC60CC2: 0x00000CCA
	"\f\xca\f\xd5\x00\x00\f\xcb" + // 0x0CCA0CD5: 0x00000CCB
	"\rF\r>\x00\x00\rJ" + // 0x0D460D3E: 0x00000D4A
	"\rG\r>\x00\x00\rK" + // 0x0D470D3E: 0x00000D4B
	"\rF\rW\x00\x00\rL" + // 0x0D460D57: 0x00000D4C
	"\r\xd9\r\xca\x00\x00\r\xda" + // 0x0DD90DCA: 0x00000DDA
	"\r\xd9\r\xcf\x00\x00\r\xdc" + // 0x0DD90DCF: 0x00000DDC
	"\r\xdc\r\xca\x00\x00\r\xdd" + // 0x0DDC0DCA: 0x00000DDD
	"\r\xd9\r\xdf\x00\x00\r\xde" + // 0x0DD90DDF: 0x00000DDE
	"\x10%\x10.\x00\x00\x10&" + // 0x1025102E: 0x00001026
	"\x1b\x05\x1b5\x00\x00\x1b\x06" + // 0x1B051B35: 0x00001B06
	"\x1b\a\x1b5\x00\x00\x1b\b" + // 0x1B071B35: 0x00001B08
	"\x1b\t\x1b5\x00\x00\x1b\n" + // 0x1B091B35: 0x00001B0A
	"\x1b\v\x1b5\x00\x00\x1b\f" + // 0x1B0B1B35: 0x00001B0C
	"\x1b\r\x1b5\x00\x00\x1b\x0e" + // 0x1B0D1B35: 0x00001B0E
	"\x1b\x11\x1b5\x00\x00\x1b\x12" + // 0x1B111B35: 0x00001B12
	"\x1b:\x1b5\x00\x00\x1b;" + // 0x1B3A1B35: 0x00001B3B
	"\x1b<\x1b5\x00\x00\x1b=" + // 0x1B3C1B35: 0x00001B3D
	"\x1b>\x1b5\x00\x00\x1b@" + // 0x1B3E1B35: 0x00001B40
	"\x1b?\x1b5\x00\x00\x1bA" + // 0x1B3F1B35: 0x00001B41
	"\x1bB\x1b5\x00\x00\x1bC" + // 0x1B421B35: 0x00001B43
	"\x00A\x03%\x00\x00\x1e\x00" + // 0x00410325: 0x00001E00
	"\x00a\x03%\x00\x00\x1e\x01" + // 0x00610325: 0x00001E01
	"\x00B\x03\a\x00\x00\x1e\x02" + // 0x00420307: 0x00001E02
	"\x00b\x03\a\x00\x00\x1e\x03" + // 0x00620307: 0x00001E03
	"\x00B\x03#\x00\x00\x1e\x04" + // 0x00420323: 0x00001E04
	"\x00b\x03#\x00\x00\x1e\x05" + // 0x00620323: 0x00001E05
	"\x00B\x031\x00\x00\x1e\x06" + // 0x00420331: 0x00001E06
	"\x00b\x031\x00\x00\x1e\a" + // 0x00620331: 0x00001E07
	"\x00\xc7\x03\x01\x00\x00\x1e\b" + // 0x00C70301: 0x00001E08
	"\x00\xe7\x03\x01\x00\x00\x1e\t" + // 0x00E70301: 0x00001E09
	"\x00D\x03\a\x00\x00\x1e\n" + // 0x00440307: 0x00001E0A
	"\x00d\x03\a\x00\x00\x1e\v" + // 0x00640307: 0x00001E0B
	"\x00D\x03#\x00\x00\x1e\f" + // 0x00440323: 0x00001E0C
	"\x00d\x03#\x00\x00\x1e\r" + // 0x00640323: 0x00001E0D
	"\x00D\x031\x00\x00\x1e\x0e" + // 0x00440331: 0x00001E0E
	"\x00d\x031\x00\x00\x1e\x0f" + // 0x00640331: 0x00001E0F
	"\x00D\x03'\x00\x00\x1e\x10" + // 0x00440327: 0x00001E10
	"\x00d\x03'\x00\x00\x1e\x11" + // 0x00640327: 0x00001E11
	"\x00D\x03-\x00\x00\x1e\x12" + // 0x0044032D: 0x00001E12
	"\x00d\x03-\x00\x00\x1e\x13" + // 0x0064032D: 0x00001E13
	"\x01\x12\x03\x00\x00\x00\x1e\x14" + // 0x01120300: 0x00001E14
	"\x01\x13\x03\x00\x00\x00\x1e\x15" + // 0x01130300: 0x00001E15
	"\x01\x12\x03\x01\x00\x00\x1e\x16" + // 0x01120301: 0x00001E16
	"\x01\x13\x03\x01\x00\x00\x1e\x17" + // 0x01130301: 0x00001E17
	"\x00E\x03-\x00\x00\x1e\x18" + // 0x0045032D: 0x00001E18
	"\x00e\x03-\x00\x00\x1e\x19" + // 0x0065032D: 0x00001E19
	"\x00E\x030\x00\x00\x1e\x1a" + // 0x00450330: 0x00001E1A
	"\x00e\x030\x00\x00\x1e\x1b" + // 0x00650330: 0x00001E1B
	"\x02(\x03\x06\x00\x00\x1e\x1c" + // 0x02280306: 0x00001E1C
	"\x02)\x03\x06\x00\x00\x1e\x1d" + // 0x02290306: 0x00001E1D
	"\x00F\x03\a\x00\x00\x1e\x1e" + // 0x00460307: 0x00001E1E
	"\x00f\x03\a\x00\x00\x1e\x1f" + // 0x00660307: 0x00001E1F
	"\x00G\x03\x04\x00\x00\x1e " + // 0x00470304: 0x00001E20
	"\x00g\x03\x04\x00\x00\x1e!" + // 0x00670304: 0x00001E21
	"\x00H\x03\a\x00\x00\x1e\"" + // 0x00480307: 0x00001E22
	"\x00h\x03\a\x00\x00\x1e#" + // 0x00680307: 0x00001E23
	"\x00H\x03#\x00\x00\x1e$" + // 0x00480323: 0x00001E24
	"\x00h\x03#\x00\x00\x1e%" + // 0x00680323: 0x00001E25
	"\x00H\x03\b\x00\x00\x1e&" + // 0x00480308: 0x00001E26
	"\x00h\x03\b\x00\x00\x1e'" + // 0x00680308: 0x00001E27
	"\x00H\x03'\x00\x00\x1e(" + // 0x00480327: 0x00001E28
	"\x00h\x03'\x00\x00\x1e)" + // 0x00680327: 0x00001E29
	"\x00H\x03.\x00\x00\x1e*" + // 0x0048032E: 0x00001E2A
	"\x00h\x03.\x00\x00\x1e+" + // 0x0068032E: 0x00001E2B
	"\x00I\x030\x00\x00\x1e," + // 0x00490330: 0x00001E2C
	"\x00i\x030\x00\x00\x1e-" + // 0x00690330: 0x00001E2D
	"\x00\xcf\x03\x01\x00\x00\x1e." + // 0x00CF0301: 0x00001E2E
	"\x00\xef\x03\x01\x00\x00\x1e/" + // 0x00EF0301: 0x00001E2F
	"\x00K\x03\x01\x00\x00\x1e0" + // 0x004B0301: 0x00001E30
	"\x00k\x03\x01\x00\x00\x1e1" + // 0x006B0301: 0x00001E31
	"\x00K\x03#\x00\x00\x1e2" + // 0x004B0323: 0x00001E32
	"\x00k\x03#\x00\x00\x1e3" + // 0x006B0323: 0x00001E33
	"\x00K\x031\x00\x00\x1e4" + // 0x004B0331: 0x00001E34
	"\x00k\x031\x00\x00\x1e5" + // 0x006B0331: 0x00001E35
	"\x00L\x03#\x00\x00\x1e6" + // 0x004C0323: 0x00001E36
	"\x00l\x03#\x00\x00\x1e7" + // 0x006C0323: 0x00001E37
	"\x1e6\x03\x04\x00\x00\x1e8" + // 0x1E360304: 0x00001E38
	"\x1e7\x03\x04\x00\x00\x1e9" + // 0x1E370304: 0x00001E39
	"\x00L\x031\x00\x00\x1e:" + // 0x004C0331: 0x00001E3A
	"\x00l\x031\x00\x00\x1e;" + // 0x006C0331: 0x00001E3B
	"\x00L\x03-\x00\x00\x1e<" + // 0x004C032D: 0x00001E3C
	"\x00l\x03-\x00\x00\x1e=" + // 0x006C032D: 0x00001E3D
	"\x00M\x03\x01\x00\x00\x1e>" + // 0x004D0301: 0x00001E3E
	"\x00m\x03\x01\x00\x00\x1e?" + // 0x006D0301: 0x00001E3F
	"\x00M\x03\a\x00\x00\x1e@" + // 0x004D0307: 0x00001E40
	"\x00m\x03\a\x00\x00\x1eA" + // 0x006D0307: 0x00001E41
	"\x00M\x03#\x00\x00\x1eB" + // 0x004D0323: 0x00001E42
	"\x00m\x03#\x00\x00\x1eC" + // 0x006D0323: 0x00001E43
	"\x00N\x03\a\x00\x00\x1eD" + // 0x004E0307: 0x00001E44
	"\x00n\x03\a\x00\x00\x1eE" + // 0x006E0307: 0x00001E45
	"\x00N\x03#\x00\x00\x1eF" + // 0x004E0323: 0x00001E46
	"\x00n\x03#\x00\x00\x1eG" + // 0x006E0323: 0x00001E47
	"\x00N\x031\x00\x00\x1eH" + // 0x004E0331: 0x00001E48
	"\x00n\x031\x00\x00\x1eI" + // 0x006E0331: 0x00001E49
	"\x00N\x03-\x00\x00\x1eJ" + // 0x004E032D: 0x00001E4A
	"\x00n\x03-\x00\x00\x1eK" + // 0x006E032D: 0x00001E4B
	"\x00\xd5\x03\x01\x00\x00\x1eL" + // 0x00D50301: 0x00001E4C
	"\x00\xf5\x03\x01\x00\x00\x1eM" + // 0x00F50301: 0x00001E4D
	"\x00\xd5\x03\b\x00\x00\x1eN" + // 0x00D50308: 0x00001E4E
	"\x00\xf5\x03\b\x00\x00\x1eO" + // 0x00F50308: 0x00001E4F
	"\x01L\x03\x00\x00\x00\x1eP" + // 0x014C0300: 0x00001E50
	"\x01M\x03\x00\x00\x00\x1eQ" + // 0x014D0300: 0x00001E51
	"\x01L\x03\x01\x00\x00\x1eR" + // 0x014C0301: 0x00001E52
	"\x01M\x03\x01\x00\x00\x1eS" + // 0x014D0301: 0x00001E53
	"\x00P\x03\x01\x00\x00\x1eT" + // 0x00500301: 0x00001E54
	"\x00p\x03\x01\x00\x00\x1eU" + // 0x00700301: 0x00001E55
	"\x00P\x03\a\x00\x00\x1eV" + // 0x00500307: 0x00001E56
	"\x00p\x03\a\x00\x00\x1eW" + // 0x00700307: 0x00001E57
	"\x00R\x03\a\x00\x00\x1eX" + // 0x00520307: 0x00001E58
	"\x00r\x03\a\x00\x00\x1eY" + // 0x00720307: 0x00001E59
	"\x00R\x03#\x00\x00\x1eZ" + // 0x00520323: 0x00001E5A
	"\x00r\x03#\x00\x00\x1e[" + // 0x00720323: 0x00001E5B
	"\x1eZ\x03\x04\x00\x00\x1e\\" + // 0x1E5A0304: 0x00001E5C
	"\x1e[\x03\x04\x00\x00\x1e]" + // 0x1E5B0304: 0x00001E5D
	"\x00R\x031\x00\x00\x1e^" + // 0x00520331: 0x00001E5E
	"\x00r\x031\x00\x00\x1e_" + // 0x00720331: 0x00001E5F
	"\x00S\x03\a\x00\x00\x1e`" + // 0x00530307: 0x00001E60
	"\x00s\x03\a\x00\x00\x1ea" + // 0x00730307: 0x00001E61
	"\x00S\x03#\x00\x00\x1eb" + // 0x00530323: 0x00001E62
	"\x00s\x03#\x00\x00\x1ec" + // 0x00730323: 0x00001E63
	"\x01Z\x03\a\x00\x00\x1ed" + // 0x015A0307: 0x00001E64
	"\x01[\x03\a\x00\x00\x1ee" + // 0x015B0307: 0x00001E65
	"\x01`\x03\a\x00\x00\x1ef" + // 0x01600307: 0x00001E66
	"\x01a\x03\a\x00\x00\x1eg" + // 0x01610307: 0x00001E67
	"\x1eb\x03\a\x00\x00\x1eh" + // 0x1E620307: 0x00001E68
	"\x1ec\x03\a\x00\x00\x1ei" + // 0x1E630307: 0x00001E69
	"\x00T\x03\a\x00\x00\x1ej" + // 0x00540307: 0x00001E6A
	"\x00t\x03\a\x00\x00\x1ek" + // 0x00740307: 0x00001E6B
	"\x00T\x03#\x00\x00\x1el" + // 0x00540323: 0x00001E6C
	"\x00t\x03#\x00\x00\x1em" + // 0x00740323: 0x00001E6D
	"\x00T\x031\x00\x00\x1en" + // 0x00540331: 0x00001E6E
	"\x00t\x031\x00\x00\x1eo" + // 0x00740331: 0x00001E6F
	"\x00T\x03-\x00\x00\x1ep" + // 0x0054032D: 0x00001E70
	"\x00t\x03-\x00\x00\x1eq" + // 0x0074032D: 0x00001E71
	"\x00U\x03$\x00\x00\x1er" + // 0x00550324: 0x00001E72
	"\x00u\x03$\x00\x00\x1es" + // 0x00750324: 0x00001E73
	"\x00U\x030\x00\x00\x1et" + // 0x00550330: 0x00001E74
	"\x00u\x030\x00\x00\x1eu" + // 0x00750330: 0x00001E75
	"\x00U\x03-\x00\x00\x1ev" + // 0x0055032D: 0x00001E76
	"\x00u\x03-\x00\x00\x1ew" + // 0x0075032D: 0x00001E77
	"\x01h\x03\x01\x00\x00\x1ex" + // 0x01680301: 0x00001E78
	"\x01i\x03\x01\x00\x00\x1ey" + // 0x01690301: 0x00001E79
	"\x01j\x03\b\x00\x00\x1ez" + // 0x016A0308: 0x00001E7A
	"\x01k\x03\b\x00\x00\x1e{" + // 0x016B0308: 0x00001E7B
	"\x00V\x03\x03\x00\x00\x1e|" + // 0x00560303: 0x00001E7C
	"\x00v\x03\x03\x00\x00\x1e}" + // 0x00760303: 0x00001E7D
	"\x00V\x03#\x00\x00\x1e~" + // 0x00560323: 0x00001E7E
	"\x00v\x03#\x00\x00\x1e\u007f" + // 0x00760323: 0x00001E7F
	"\x00W\x03\x00\x00\x00\x1e\x80" + // 0x00570300: 0x00001E80
	"\x00w\x03\x00\x00\x00\x1e\x81" + // 0x00770300: 0x00001E81
	"\x00W\x03\x01\x00\x00\x1e\x82" + // 0x00570301: 0x00001E82
	"\x00w\x03\x01\x00\x00\x1e\x83" + // 0x00770301: 0x00001E83
	"\x00W\x03\b\x00\x00\x1e\x84" + // 0x00570308: 0x00001E84
	"\x00w\x03\b\x00\x00\x1e\x85" + // 0x00770308: 0x00001E85
	"\x00W\x03\a\x00\x00\x1e\x86" + // 0x00570307: 0x00001E86
	"\x00w\x03\a\x00\x00\x1e\x87" + // 0x00770307: 0x00001E87
	"\x00W\x03#\x00\x00\x1e\x88" + // 0x00570323: 0x00001E88
	"\x00w\x03#\x00\x00\x1e\x89" + // 0x00770323: 0x00001E89
	"\x00X\x03\a\x00\x00\x1e\x8a" + // 0x00580307: 0x00001E8A
	"\x00x\x03\a\x00\x00\x1e\x8b" + // 0x00780307: 0x00001E8B
	"\x00X\x03\b\x00\x00\x1e\x8c" + // 0x00580308: 0x00001E8C
	"\x00x\x03\b\x00\x00\x1e\x8d" + // 0x00780308: 0x00001E8D
	"\x00Y\x03\a\x00\x00\x1e\x8e" + // 0x00590307: 0x00001E8E
	"\x00y\x03\a\x00\x00\x1e\x8f" + // 0x00790307: 0x00001E8F
	"\x00Z\x03\x02\x00\x00\x1e\x90" + // 0x005A0302: 0x00001E90
	"\x00z\x03\x02\x00\x00\x1e\x91" + // 0x007A0302: 0x00001E91
	"\x00Z\x03#\x00\x00\x1e\x92" + // 0x005A0323: 0x00001E92
	"\x00z\x03#\x00\x00\x1e\x93" + // 0x007A0323: 0x00001E93
	"\x00Z\x031\x00\x00\x1e\x94" + // 0x005A0331: 0x00001E94
	"\x00z\x031\x00\x00\x1e\x95" + // 0x007A0331: 0x00001E95
	"\x00h\x031\x00\x00\x1e\x96" + // 0x00680331: 0x00001E96
	"\x00t\x03\b\x00\x00\x1e\x97" + // 0x00740308: 0x00001E97
	"\x00w\x03\n\x00\x00\x1e\x98" + // 0x0077030A: 0x00001E98
	"\x00y\x03\n\x00\x00\x1e\x99" + // 0x0079030A: 0x00001E99
	"\x01\u007f\x03\a\x00\x00\x1e\x9b" + // 0x017F0307: 0x00001E9B
	"\x00A\x03#\x00\x00\x1e\xa0" + // 0x00410323: 0x00001EA0
	"\x00a\x03#\x00\x00\x1e\xa1" + // 0x00610323: 0x00001EA1
	"\x00A\x03\t\x00\x00\x1e\xa2" + // 0x00410309: 0x00001EA2
	"\x00a\x03\t\x00\x00\x1e\xa3" + // 0x00610309: 0x00001EA3
	"\x00\xc2\x03\x01\x00\x00\x1e\xa4" + // 0x00C20301: 0x00001EA4
	"\x00\xe2\x03\x01\x00\x00\x1e\xa5" + // 0x00E20301: 0x00001EA5
	"\x00\xc2\x03\x00\x00\x00\x1e\xa6" + // 0x00C20300: 0x00001EA6
	"\x00\xe2\x03\x00\x00\x00\x1e\xa7" + // 0x00E20300: 0x00001EA7
	"\x00\xc2\x03\t\x00\x00\x1e\xa8" + // 0x00C20309: 0x00001EA8
	"\x00\xe2\x03\t\x00\x00\x1e\xa9" + // 0x00E20309: 0x00001EA9
	"\x00\xc2\x03\x03\x00\x00\x1e\xaa" + // 0x00C20303: 0x00001EAA
	"\x00\xe2\x03\x03\x00\x00\x1e\xab" + // 0x00E20303: 0x00001EAB
	"\x1e\xa0\x03\x02\x00\x00\x1e\xac" + // 0x1EA00302: 0x00001EAC
	"\x1e\xa1\x03\x02\x00\x00\x1e\xad" + // 0x1EA10302: 0x00001EAD
	"\x01\x02\x03\x01\x00\x00\x1e\xae" + // 0x01020301: 0x00001EAE
	"\x01\x03\x03\x01\x00\x00\x1e\xaf" + // 0x01030301: 0x00001EAF
	"\x01\x02\x03\x00\x00\x00\x1e\xb0" + // 0x01020300: 0x00001EB0
	"\x01\x03\x03\x00\x00\x00\x1e\xb1" + // 0x01030300: 0x00001EB1
	"\x01\x02\x03\t\x00\x00\x1e\xb2" + // 0x01020309: 0x00001EB2
	"\x01\x03\x03\t\x00\x00\x1e\xb3" + // 0x01030309: 0x00001EB3
	"\x01\x02\x03\x03\x00\x00\x1e\xb4" + // 0x01020303: 0x00001EB4
	"\x01\x03\x03\x03\x00\x00\x1e\xb5" + // 0x01030303: 0x00001EB5
	"\x1e\xa0\x03\x06\x00\x00\x1e\xb6" + // 0x1EA00306: 0x00001EB6
	"\x1e\xa1\x03\x06\x00\x00\x1e\xb7" + // 0x1EA10306: 0x00001EB7
	"\x00E\x03#\x00\x00\x1e\xb8" + // 0x00450323: 0x00001EB8
	"\x00e\x03#\x00\x00\x1e\xb9" + // 0x00650323: 0x00001EB9
	"\x00E\x03\t\x00\x00\x1e\xba" + // 0x00450309: 0x00001EBA
	"\x00e\x03\t\x00\x00\x1e\xbb" + // 0x00650309: 0x00001EBB
	"\x00E\x03\x03\x00\x00\x1e\xbc" + // 0x00450303: 0x00001EBC
	"\x00e\x03\x03\x00\x00\x1e\xbd" + // 0x00650303: 0x00001EBD
	"\x00\xca\x03\x01\x00\x00\x1e\xbe" + // 0x00CA0301: 0x00001EBE
	"\x00\xea\x03\x01\x00\x00\x1e\xbf" + // 0x00EA0301: 0x00001EBF
	"\x00\xca\x03\x00\x00\x00\x1e\xc0" + // 0x00CA0300: 0x00001EC0
	"\x00\xea\x03\x00\x00\x00\x1e\xc1" + // 0x00EA0300: 0x00001EC1
	"\x00\xca\x03\t\x00\x00\x1e\xc2" + // 0x00CA0309: 0x00001EC2
	"\x00\xea\x03\t\x00\x00\x1e\xc3" + // 0x00EA0309: 0x00001EC3
	"\x00\xca\x03\x03\x00\x00\x1e\xc4" + // 0x00CA0303: 0x00001EC4
	"\x00\xea\x03\x03\x00\x00\x1e\xc5" + // 0x00EA0303: 0x00001EC5
	"\x1e\xb8\x03\x02\x00\x00\x1e\xc6" + // 0x1EB80302: 0x00001EC6
	"\x1e\xb9\x03\x02\x00\x00\x1e\xc7" + // 0x1EB90302: 0x00001EC7
	"\x00I\x03\t\x00\x00\x1e\xc8" + // 0x00490309: 0x00001EC8
	"\x00i\x03\t\x00\x00\x1e\xc9" + // 0x00690309: 0x00001EC9
	"\x00I\x03#\x00\x00\x1e\xca" + // 0x00490323: 0x00001ECA
	"\x00i\x03#\x00\x00\x1e\xcb" + // 0x00690323: 0x00001ECB
	"\x00O\x03#\x00\x00\x1e\xcc" + // 0x004F0323: 0x00001ECC
	"\x00o\x03#\x00\x00\x1e\xcd" + // 0x006F0323: 0x00001ECD
	"\x00O\x03\t\x00\x00\x1e\xce" + // 0x004F0309: 0x00001ECE
	"\x00o\x03\t\x00\x00\x1e\xcf" + // 0x006F0309: 0x00001ECF
	"\x00\xd4\x03\x01\x00\x00\x1e\xd0" + // 0x00D40301: 0x00001ED0
	"\x00\xf4\x03\x01\x00\x00\x1e\xd1" + // 0x00F40301: 0x00001ED1
	"\x00\xd4\x03\x00\x00\x00\x1e\xd2" + // 0x00D40300: 0x00001ED2
	"\x00\xf4\x03\x00\x00\x00\x1e\xd3" + // 0x00F40300: 0x00001ED3
	"\x00\xd4\x03\t\x00\x00\x1e\xd4" + // 0x00D40309: 0x00001ED4
	"\x00\xf4\x03\t\x00\x00\x1e\xd5" + // 0x00F40309: 0x00001ED5
	"\x00\xd4\x03\x03\x00\x00\x1e\xd6" + // 0x00D40303: 0x00001ED6
	"\x00\xf4\x03\x03\x00\x00\x1e\xd7" + // 0x00F40303: 0x00001ED7
	"\x1e\xcc\x03\x02\x00\x00\x1e\xd8" + // 0x1ECC0302: 0x00001ED8
	"\x1e\xcd\x03\x02\x00\x00\x1e\xd9" + // 0x1ECD0302: 0x00001ED9
	"\x01\xa0\x03\x01\x00\x00\x1e\xda" + // 0x01A00301: 0x00001EDA
	"\x01\xa1\x03\x01\x00\x00\x1e\xdb" + // 0x01A10301: 0x00001EDB
	"\x01\xa0\x03\x00\x00\x00\x1e\xdc" + // 0x01A00300: 0x00001EDC
	"\x01\xa1\x03\x00\x00\x00\x1e\xdd" + // 0x01A10300: 0x00001EDD
	"\x01\xa0\x03\t\x00\x00\x1e\xde" + // 0x01A00309: 0x00001EDE
	"\x01\xa1\x03\t\x00\x00\x1e\xdf" + // 0x01A10309: 0x00001EDF
	"\x01\xa0\x03\x03\x00\x00\x1e\xe0" + // 0x01A00303: 0x00001EE0
	"\x01\xa1\x03\x03\x00\x00\x1e\xe1" + // 0x01A10303: 0x00001EE1
	"\x01\xa0\x03#\x00\x00\x1e\xe2" + // 0x01A00323: 0x00001EE2
	"\x01\xa1\x03#\x00\x00\x1e\xe3" + // 0x01A10323: 0x00001EE3
	"\x00U\x03#\x00\x00\x1e\xe4" + // 0x00550323: 0x00001EE4
	"\x00u\x03#\x00\x00\x1e\xe5" + // 0x00750323: 0x00001EE5
	"\x00U\x03\t\x00\x00\x1e\xe6" + // 0x00550309: 0x00001EE6
	"\x00u\x03\t\x00\x00\x1e\xe7" + // 0x00750309: 0x00001EE7
	"\x01\xaf\x03\x01\x00\x00\x1e\xe8" + // 0x01AF0301: 0x00001EE8
	"\x01\xb0\x03\x01\x00\x00\x1e\xe9" + // 0x01B00301: 0x00001EE9
	"\x01\xaf\x03\x00\x00\x00\x1e\xea" + // 0x01AF0300: 0x00001EEA
	"\x01\xb0\x03\x00\x00\x00\x1e\xeb" + // 0x01B00300: 0x00001EEB
	"\x01\xaf\x03\t\x00\x00\x1e\xec" + // 0x01AF0309: 0x00001EEC
	"\x01\xb0\x03\t\x00\x00\x1e\xed" + // 0x01B00309: 0x00001EED
	"\x01\xaf\x03\x03\x00\x00\x1e\xee" + // 0x01AF0303: 0x00001EEE
	"\x01\xb0\x03\x03\x00\x00\x1e\xef" + // 0x01B00303: 0x00001EEF
	"\x01\xaf\x03#\x00\x00\x1e\xf0" + // 0x01AF0323: 0x00001EF0
	"\x01\xb0\x03#\x00\x00\x1e\xf1" + // 0x01B00323: 0x00001EF1
	"\x00Y\x03\x00\x00\x00\x1e\xf2" + // 0x00590300: 0x00001EF2
	"\x00y\x03\x00\x00\x00\x1e\xf3" + // 0x00790300: 0x00001EF3
	"\x00Y\x03#\x00\x00\x1e\xf4" + // 0x00590323: 0x00001EF4
	"\x00y\x03#\x00\x00\x1e\xf5" + // 0x00790323: 0x00001EF5
	"\x00Y\x03\t\x00\x00\x1e\xf6" + // 0x00590309: 0x00001EF6
	"\x00y\x03\t\x00\x00\x1e\xf7" + // 0x00790309: 0x00001EF7
	"\x00Y\x03\x03\x00\x00\x1e\xf8" + // 0x00590303: 0x00001EF8
	"\x00y\x03\x03\x00\x00\x1e\xf9" + // 0x00790303: 0x00001EF9
	"\x03\xb1\x03\x13\x00\x00\x1f\x00" + // 0x03B10313: 0x00001F00
	"\x03\xb1\x03\x14\x00\x00\x1f\x01" + // 0x03B10314: 0x00001F01
	"\x1f\x00\x03\x00\x00\x00\x1f\x02" + // 0x1F000300: 0x00001F02
	"\x1f\x01\x03\x00\x00\x00\x1f\x03" + // 0x1F010300: 0x00001F03
	"\x1f\x00\x03\x01\x00\x00\x1f\x04" + // 0x1F000301: 0x00001F04
	"\x1f\x01\x03\x01\x00\x00\x1f\x05" + // 0x1F010301: 0x00001F05
	"\x1f\x00\x03B\x00\x00\x1f\x06" + // 0x1F000342: 0x00001F06
	"\x1f\x01\x03B\x00\x00\x1f\a" + // 0x1F010342: 0x00001F07
	"\x03\x91\x03\x13\x00\x00\x1f\b" + // 0x03910313: 0x00001F08
	"\x03\x91\x03\x14\x00\x00\x1f\t" + // 0x03910314: 0x00001F09
	"\x1f\b\x03\x00\x00\x00\x1f\n" + // 0x1F080300: 0x00001F0A
	"\x1f\t\x03\x00\x00\x00\x1f\v" + // 0x1F090300: 0x00001F0B
	"\x1f\b\x03\x01\x00\x00\x1f\f" + // 0x1F080301: 0x00001F0C
	"\x1f\t\x03\x01\x00\x00\x1f\r" + // 0x1F090301: 0x00001F0D
	"\x1f\b\x03B\x00\x00\x1f\x0e" + // 0x1F080342: 0x00001F0E
	"\x1f\t\x03B\x00\x00\x1f\x0f" + // 0x1F090342: 0x00001F0F
	"\x03\xb5\x03\x13\x00\x00\x1f\x10" + // 0x03B50313: 0x00001F10
	"\x03\xb5\x03\x14\x00\x00\x1f\x11" + // 0x03B50314: 0x00001F11
	"\x1f\x10\x03\x00\x00\x00\x1f\x12" + // 0x1F100300: 0x00001F12
	"\x1f\x11\x03\x00\x00\x00\x1f\x13" + // 0x1F110300: 0x00001F13
	"\x1f\x10\x03\x01\x00\x00\x1f\x14" + // 0x1F100301: 0x00001F14
	"\x1f\x11\x03\x01\x00\x00\x1f\x15" + // 0x1F110301: 0x00001F15
	"\x03\x95\x03\x13\x00\x00\x1f\x18" + // 0x03950313: 0x00001F18
	"\x03\x95\x03\x14\x00\x00\x1f\x19" + // 0x03950314: 0x00001F19
	"\x1f\x18\x03\x00\x00\x00\x1f\x1a" + // 0x1F180300: 0x00001F1A
	"\x1f\x19\x03\x00\x00\x00\x1f\x1b" + // 0x1F190300: 0x00001F1B
	"\x1f\x18\x03\x01\x00\x00\x1f\x1c" + // 0x1F180301: 0x00001F1C
	"\x1f\x19\x03\x01\x00\x00\x1f\x1d" + // 0x1F190301: 0x00001F1D
	"\x03\xb7\x03\x13\x00\x00\x1f " + // 0x03B70313: 0x00001F20
	"\x03\xb7\x03\x14\x00\x00\x1f!" + // 0x03B70314: 0x00001F21
	"\x1f \x03\x00\x00\x00\x1f\"" + // 0x1F200300: 0x00001F22
	"\x1f!\x03\x00\x00\x00\x1f#" + // 0x1F210300: 0x00001F23
	"\x1f \x03\x01\x00\x00\x1f$" + // 0x1F200301: 0x00001F24
	"\x1f!\x03\x01\x00\x00\x1f%" + // 0x1F210301: 0x00001F25
	"\x1f \x03B\x00\x00\x1f&" + // 0x1F200342: 0x00001F26
	"\x1f!\x03B\x00\x00\x1f'" + // 0x1F210342: 0x00001F27
	"\x03\x97\x03\x13\x00\x00\x1f(" + // 0x03970313: 0x00001F28
	"\x03\x97\x03\x14\x00\x00\x1f)" + // 0x03970314: 0x00001F29
	"\x1f(\x03\x00\x00\x00\x1f*" + // 0x1F280300: 0x00001F2A
	"\x1f)\x03\x00\x00\x00\x1f+" + // 0x1F290300: 0x00001F2B
	"\x1f(\x03\x01\x00\x00\x1f," + // 0x1F280301: 0x00001F2C
	"\x1f)\x03\x01\x00\x00\x1f-" + // 0x1F290301: 0x00001F2D
	"\x1f(\x03B\x00\x00\x1f." + // 0x1F280342: 0x00001F2E
	"\x1f)\x03B\x00\x00\x1f/" + // 0x1F290342: 0x00001F2F
	"\x03\xb9\x03\x13\x00\x00\x1f0" + // 0x03B90313: 0x00001F30
	"\x03\xb9\x03\x14\x00\x00\x1f1" + // 0x03B90314: 0x00001F31
	"\x1f0\x03\x00\x00\x00\x1f2" + // 0x1F300300: 0x00001F32
	"\x1f1\x03\x00\x00\x00\x1f3" + // 0x1F310300: 0x00001F33
	"\x1f0\x03\x01\x00\x00\x1f4" + // 0x1F300301: 0x00001F34
	"\x1f1\x03\x01\x00\x00\x1f5" + // 0x1F310301: 0x00001F35
	"\x1f0\x03B\x00\x00\x1f6" + // 0x1F300342: 0x00001F36
	"\x1f1\x03B\x00\x00\x1f7" + // 0x1F310342: 0x00001F37
	"\x03\x99\x03\x13\x00\x00\x1f8" + // 0x03990313: 0x00001F38
	"\x03\x99\x03\x14\x00\x00\x1f9" + // 0x03990314: 0x00001F39
	"\x1f8\x03\x00\x00\x00\x1f:" + // 0x1F380300: 0x00001F3A
	"\x1f9\x03\x00\x00\x00\x1f;" + // 0x1F390300: 0x00001F3B
	"\x1f8\x03\x01\x00\x00\x1f<" + // 0x1F380301: 0x00001F3C
	"\x1f9\x03\x01\x00\x00\x1f=" + // 0x1F390301: 0x00001F3D
	"\x1f8\x03B\x00\x00\x1f>" + // 0x1F380342: 0x00001F3E
	"\x1f9\x03B\x00\x00\x1f?" + // 0x1F390342: 0x00001F3F
	"\x03\xbf\x03\x13\x00\x00\x1f@" + // 0x03BF0313: 0x00001F40
	"\x03\xbf\x03\x14\x00\x00\x1fA" + // 0x03BF0314: 0x00001F41
	"\x1f@\x03\x00\x00\x00\x1fB" + // 0x1F400300: 0x00001F42
	"\x1fA\x03\x00\x00\x00\x1fC" + // 0x1F410300: 0x00001F43
	"\x1f@\x03\x01\x00\x00\x1fD" + // 0x1F400301: 0x00001F44
	"\x1fA\x03\x01\x00\x00\x1fE" + // 0x1F410301: 0x00001F45
	"\x03\x9f\x03\x13\x00\x00\x1fH" + // 0x039F0313: 0x00001F48
	"\x03\x9f\x03\x14\x00\x00\x1fI" + // 0x039F0314: 0x00001F49
	"\x1fH\x03\x00\x00\x00\x1fJ" + // 0x1F480300: 0x00001F4A
	"\x1fI\x03\x00\x00\x00\x1fK" + // 0x1F490300: 0x00001F4B
	"\x1fH\x03\x01\x00\x00\x1fL" + // 0x1F480301: 0x00001F4C
	"\x1fI\x03\x01\x00\x00\x1fM" + // 0x1F490301: 0x00001F4D
	"\x03\xc5\x03\x13\x00\x00\x1fP" + // 0x03C50313: 0x00001F50
	"\x03\xc5\x03\x14\x00\x00\x1fQ" + // 0x03C50314: 0x00001F51
	"\x1fP\x03\x00\x00\x00\x1fR" + // 0x1F500300: 0x00001F52
	"\x1fQ\x03\x00\x00\x00\x1fS" + // 0x1F510300: 0x00001F53
	"\x1fP\x03\x01\x00\x00\x1fT" + // 0x1F500301: 0x00001F54
	"\x1fQ\x03\x01\x00\x00\x1fU" + // 0x1F510301: 0x00001F55
	"\x1fP\x03B\x00\x00\x1fV" + // 0x1F500342: 0x00001F56
	"\x1fQ\x03B\x00\x00\x1fW" + // 0x1F510342: 0x00001F57
	"\x03\xa5\x03\x14\x00\x00\x1fY" + // 0x03A50314: 0x00001F59
	"\x1fY\x03\x00\x00\x00\x1f[" + // 0x1F590300: 0x00001F5B
	"\x1fY\x03\x01\x00\x00\x1f]" + // 0x1F590301: 0x00001F5D
	"\x1fY\x03B\x00\x00\x1f_" + // 0x1F590342: 0x00001F5F
	"\x03\xc9\x03\x13\x00\x00\x1f`" + // 0x03C90313: 0x00001F60
	"\x03\xc9\x03\x14\x00\x00\x1fa" + // 0x03C90314: 0x00001F61
	"\x1f`\x03\x00\x00\x00\x1fb" + // 0x1F600300: 0x00001F62
	"\x1fa\x03\x00\x00\x00\x1fc" + // 0x1F610300: 0x00001F63
	"\x1f`\x03\x01\x00\x00\x1fd" + // 0x1F600301: 0x00001F64
	"\x1fa\x03\x01\x00\x00\x1fe" + // 0x1F610301: 0x00001F65
	"\x1f`\x03B\x00\x00\x1ff" + // 0x1F600342: 0x00001F66
	"\x1fa\x03B\x00\x00\x1fg" + // 0x1F610342: 0x00001F67
	"\x03\xa9\x03\x13\x00\x00\x1fh" + // 0x03A90313: 0x00001F68
	"\x03\xa9\x03\x14\x00\x00\x1fi" + // 0x03A90314: 0x00001F69
	"\x1fh\x03\x00\x00\x00\x1fj" + // 0x1F680300: 0x00001F6A
	"\x1fi\x03\x00\x00\x00\x1fk" + // 0x1F690300: 0x00001F6B
	"\x1fh\x03\x01\x00\x00\x1fl" + // 0x1F680301: 0x00001F6C
	"\x1fi\x03\x01\x00\x00\x1fm" + // 0x1F690301: 0x00001F6D
	"\x1fh\x03B\x00\x00\x1fn" + // 0x1F680342: 0x00001F6E
	"\x1fi\x03B\x00\x00\x1fo" + // 0x1F690342: 0x00001F6F
	"\x03\xb1\x03\x00\x00\x00\x1fp" + // 0x03B10300: 0x00001F70
	"\x03\xb5\x03\x00\x00\x00\x1fr" + // 0x03B50300: 0x00001F72
	"\x03\xb7\x03\x00\x00\x00\x1ft" + // 0x03B70300: 0x00001F74
	"\x03\xb9\x03\x00\x00\x00\x1fv" + // 0x03B90300: 0x00001F76
	"\x03\xbf\x03\x00\x00\x00\x1fx" + // 0x03BF0300: 0x00001F78
	"\x03\xc5\x03\x00\x00\x00\x1fz" + // 0x03C50300: 0x00001F7A
	"\x03\xc9\x03\x00\x00\x00\x1f|" + // 0x03C90300: 0x00001F7C
	"\x1f\x00\x03E\x00\x00\x1f\x80" + // 0x1F000345: 0x00001F80
	"\x1f\x01\x03E\x00\x00\x1f\x81" + // 0x1F010345: 0x00001F81
	"\x1f\x02\x03E\x00\x00\x1f\x82" + // 0x1F020345: 0x00001F82
	"\x1f\x03\x03E\x00\x00\x1f\x83" + // 0x1F030345: 0x00001F83
	"\x1f\x04\x03E\x00\x00\x1f\x84" + // 0x1F040345: 0x00001F84
	"\x1f\x05\x03E\x00\x00\x1f\x85" + // 0x1F050345: 0x00001F85
	"\x1f\x06\x03E\x00\x00\x1f\x86" + // 0x1F060345: 0x00001F86
	"\x1f\a\x03E\x00\x00\x1f\x87" + // 0x1F070345: 0x00001F87
	"\x1f\b\x03E\x00\x00\x1f\x88" + // 0x1F080345: 0x00001F88
	"\x1f\t\x03E\x00\x00\x1f\x89" + // 0x1F090345: 0x00001F89
	"\x1f\n\x03E\x00\x00\x1f\x8a" + // 0x1F0A0345: 0x00001F8A
	"\x1f\v\x03E\x00\x00\x1f\x8b" + // 0x1F0B0345: 0x00001F8B
	"\x1f\f\x03E\x00\x00\x1f\x8c" + // 0x1F0C0345: 0x00001F8C
	"\x1f\r\x03E\x00\x00\x1f\x8d" + // 0x1F0D0345: 0x00001F8D
	"\x1f\x0e\x03E\x00\x00\x1f\x8e" + // 0x1F0E0345: 0x00001F8E
	"\x1f\x0f\x03E\x00\x00\x1f\x8f" + // 0x1F0F0345: 0x00001F8F
	"\x1f \x03E\x00\x00\x1f\x90" + // 0x1F200345: 0x00001F90
	"\x1f!\x03E\x00\x00\x1f\x91" + // 0x1F210345: 0x00001F91
	"\x1f\"\x03E\x00\x00\x1f\x92" + // 0x1F220345: 0x00001F92
	"\x1f#\x03E\x00\x00\x1f\x93" + // 0x1F230345: 0x00001F93
	"\x1f$\x03E\x00\x00\x1f\x94" + // 0x1F240345: 0x00001F94
	"\x1f%\x03E\x00\x00\x1f\x95" + // 0x1F250345: 0x00001F95
	"\x1f&\x03E\x00\x00\x1f\x96" + // 0x1F260345: 0x00001F96
	"\x1f'\x03E\x00\x00\x1f\x97" + // 0x1F270345: 0x00001F97
	"\x1f(\x03E\x00\x00\x1f\x98" + // 0x1F280345: 0x00001F98
	"\x1f)\x03E\x00\x00\x1f\x99" + // 0x1F290345: 0x00001F99
	"\x1f*\x03E\x00\x00\x1f\x9a" + // 0x1F2A0345: 0x00001F9A
	"\x1f+\x03E\x00\x00\x1f\x9b" + // 0x1F2B0345: 0x00001F9B
	"\x1f,\x03E\x00\x00\x1f\x9c" + // 0x1F2C0345: 0x00001F9C
	"\x1f-\x03E\x00\x00\x1f\x9d" + // 0x1F2D0345: 0x00001F9D
	"\x1f.\x03E\x00\x00\x1f\x9e" + // 0x1F2E0345: 0x00001F9E
	"\x1f/\x03E\x00\x00\x1f\x9f" + // 0x1F2F0345: 0x00001F9F
	"\x1f`\x03E\x00\x00\x1f\xa0" + // 0x1F600345: 0x00001FA0
	"\x1fa\x03E\x00\x00\x1f\xa1" + // 0x1F610345: 0x00001FA1
	"\x1fb\x03E\x00\x00\x1f\xa2" + // 0x1F620345: 0x00001FA2
	"\x1fc\x03E\x00\x00\x1f\xa3" + // 0x1F630345: 0x00001FA3
	"\x1fd\x03E\x00\x00\x1f\xa4" + // 0x1F640345: 0x00001FA4
	"\x1fe\x03E\x00\x00\x1f\xa5" + // 0x1F650345: 0x00001FA5
	"\x1ff\x03E\x00\x00\x1f\xa6" + // 0x1F660345: 0x00001FA6
	"\x1fg\x03E\x00\x00\x1f\xa7" + // 0x1F670345: 0x00001FA7
	"\x1fh\x03E\x00\x00\x1f\xa8" + // 0x1F680345: 0x00001FA8
	"\x1fi\x03E\x00\x00\x1f\xa9" + // 0x1F690345: 0x00001FA9
	"\x1fj\x03E\x00\x00\x1f\xaa" + // 0x1F6A0345: 0x00001FAA
	"\x1fk\x03E\x00\x00\x1f\xab" + // 0x1F6B0345: 0x00001FAB
	"\x1fl\x03E\x00\x00\x1f\xac" + // 0x1F6C0345: 0x00001FAC
	"\x1fm\x03E\x00\x00\x1f\xad" + // 0x1F6D0345: 0x00001FAD
	"\x1fn\x03E\x00\x00\x1f\xae" + // 0x1F6E0345: 0x00001FAE
	"\x1fo\x03E\x00\x00\x1f\xaf" + // 0x1F6F0345: 0x00001FAF
	"\x03\xb1\x03\x06\x00\x00\x1f\xb0" + // 0x03B10306: 0x00001FB0
	"\x03\xb1\x03\x04\x00\x00\x1f\xb1" + // 0x03B10304: 0x00001FB1
	"\x1fp\x03E\x00\x00\x1f\xb2" + // 0x1F700345: 0x00001FB2
	"\x03\xb1\x03E\x00\x00\x1f\xb3" + // 0x03B10345: 0x00001FB3
	"\x03\xac\x03E\x00\x00\x1f\xb4" + // 0x03AC0345: 0x00001FB4
	"\x03\xb1\x03B\x00\x00\x1f\xb6" + // 0x03B10342: 0x00001FB6
	"\x1f\xb6\x03E\x00\x00\x1f\xb7" + // 0x1FB60345: 0x00001FB7
	"\x03\x91\x03\x06\x00\x00\x1f\xb8" + // 0x03910306: 0x00001FB8
	"\x03\x91\x03\x04\x00\x00\x1f\xb9" + // 0x03910304: 0x00001FB9
	"\x03\x91\x03\x00\x00\x00\x1f\xba" + // 0x03910300: 0x00001FBA
	"\x03\x91\x03E\x00\x00\x1f\xbc" + // 0x03910345: 0x00001FBC
	"\x00\xa8\x03B\x00\x00\x1f\xc1" + // 0x00A80342: 0x00001FC1
	"\x1ft\x03E\x00\x00\x1f\xc2" + // 0x1F740345: 0x00001FC2
	"\x03\xb7\x03E\x00\x00\x1f\xc3" + // 0x03B70345: 0x00001FC3
	"\x03\xae\x03E\x00\x00\x1f\xc4" + // 0x03AE0345: 0x00001FC4
	"\x03\xb7\x03B\x00\x00\x1f\xc6" + // 0x03B70342: 0x00001FC6
	"\x1f\xc6\x03E\x00\x00\x1f\xc7" + // 0x1FC60345: 0x00001FC7
	"\x03\x95\x03\x00\x00\x00\x1f\xc8" + // 0x03950300: 0x00001FC8
	"\x03\x97\x03\x00\x00\x00\x1f\xca" + // 0x03970300: 0x00001FCA
	"\x03\x97\x03E\x00\x00\x1f\xcc" + // 0x03970345: 0x00001FCC
	"\x1f\xbf\x03\x00\x00\x00\x1f\xcd" + // 0x1FBF0300: 0x00001FCD
	"\x1f\xbf\x03\x01\x00\x00\x1f\xce" + // 0x1FBF0301: 0x00001FCE
	"\x1f\xbf\x03B\x00\x00\x1f\xcf" + // 0x1FBF0342: 0x00001FCF
	"\x03\xb9\x03\x06\x00\x00\x1f\xd0" + // 0x03B90306: 0x00001FD0
	"\x03\xb9\x03\x04\x00\x00\x1f\xd1" + // 0x03B90304: 0x00001FD1
	"\x03\xca\x03\x00\x00\x00\x1f\xd2" + // 0x03CA0300: 0x00001FD2
	"\x03\xb9\x03B\x00\x00\x1f\xd6" + // 0x03B90342: 0x00001FD6
	"\x03\xca\x03B\x00\x00\x1f\xd7" + // 0x03CA0342: 0x00001FD7
	"\x03\x99\x03\x06\x00\x00\x1f\xd8" + // 0x03990306: 0x00001FD8
	"\x03\x99\x03\x04\x00\x00\x1f\xd9" + // 0x03990304: 0x00001FD9
	"\x03\x99\x03\x00\x00\x00\x1f\xda" + // 0x03990300: 0x00001FDA
	"\x1f\xfe\x03\x00\x00\x00\x1f\xdd" + // 0x1FFE0300: 0x00001FDD
	"\x1f\xfe\x03\x01\x00\x00\x1f\xde" + // 0x1FFE0301: 0x00001FDE
	"\x1f\xfe\x03B\x00\x00\x1f\xdf" + // 0x1FFE0342: 0x00001FDF
	"\x03\xc5\x03\x06\x00\x00\x1f\xe0" + // 0x03C50306: 0x00001FE0
	"\x03\xc5\x03\x04\x00\x00\x1f\xe1" + // 0x03C50304: 0x00001FE1
	"\x03\xcb\x03\x00\x00\x00\x1f\xe2" + // 0x03CB0300: 0x00001FE2
	"\x03\xc1\x03\x13\x00\x00\x1f\xe4" + // 0x03C10313: 0x00001FE4
	"\x03\xc1\x03\x14\x00\x00\x1f\xe5" + // 0x03C10314: 0x00001FE5
	"\x03\xc5\x03B\x00\x00\x1f\xe6" + // 0x03C50342: 0x00001FE6
	"\x03\xcb\x03B\x00\x00\x1f\xe7" + // 0x03CB0342: 0x00001FE7
	"\x03\xa5\x03\x06\x00\x00\x1f\xe8" + // 0x03A50306: 0x00001FE8
	"\x03\xa5\x03\x04\x00\x00\x1f\xe9" + // 0x03A50304: 0x00001FE9
	"\x03\xa5\x03\x00\x00\x00\x1f\xea" + // 0x03A50300: 0x00001FEA
	"\x03\xa1\x03\x14\x00\x00\x1f\xec" + // 0x03A10314: 0x00001FEC
	"\x00\xa8\x03\x00\x00\x00\x1f\xed" + // 0x00A80300: 0x00001FED
	"\x1f|\x03E\x00\x00\x1f\xf2" + // 0x1F7C0345: 0x00001FF2
	"\x03\xc9\x03E\x00\x00\x1f\xf3" + // 0x03C90345: 0x00001FF3
	"\x03\xce\x03E\x00\x00\x1f\xf4" + // 0x03CE0345: 0x00001FF4
	"\x03\xc9\x03B\x00\x00\x1f\xf6" + // 0x03C90342: 0x00001FF6
	"\x1f\xf6\x03E\x00\x00\x1f\xf7" + // 0x1FF60345: 0x00001FF7
	"\x03\x9f\x03\x00\x00\x00\x1f\xf8" + // 0x039F0300: 0x00001FF8
	"\x03\xa9\x03\x00\x00\x00\x1f\xfa" + // 0x03A90300: 0x00001FFA
	"\x03\xa9\x03E\x00\x00\x1f\xfc" + // 0x03A90345: 0x00001FFC
	"!\x90\x038\x00\x00!\x9a" + // 0x21900338: 0x0000219A
	"!\x92\x038\x00\x00!\x9b" + // 0x21920338: 0x0000219B
	"!\x94\x038\x00\x00!\xae" + // 0x21940338: 0x000021AE
	"!\xd0\x038\x00\x00!\xcd" + // 0x21D00338: 0x000021CD
	"!\xd4\x038\x00\x00!\xce" + // 0x21D40338: 0x000021CE
	"!\xd2\x038\x00\x00!\xcf" + // 0x21D20338: 0x000021CF
	"\"\x03\x038\x00\x00\"\x04" + // 0x22030338: 0x00002204
	"\"\b\x038\x00\x00\"\t" + // 0x22080338: 0x00002209
	"\"\v\x038\x00\x00\"\f" + // 0x220B0338: 0x0000220C
	"\"#\x038\x00\x00\"$" + // 0x22230338: 0x00002224
	"\"%\x038\x00\x00\"&" + // 0x22250338: 0x00002226
	"\"<\x038\x00\x00\"A" + // 0x223C0338: 0x00002241
	"\"C\x038\x00\x00\"D" + // 0x22430338: 0x00002244
	"\"E\x038\x00\x00\"G" + // 0x22450338: 0x00002247
	"\"H\x038\x00\x00\"I" + // 0x22480338: 0x00002249
	"\x00=\x038\x00\x00\"`" + // 0x003D0338: 0x00002260
	"\"a\x038\x00\x00\"b" + // 0x22610338: 0x00002262
	"\"M\x038\x00\x00\"m" + // 0x224D0338: 0x0000226D
	"\x00<\x038\x00\x00\"n" + // 0x003C0338: 0x0000226E
	"\x00>\x038\x00\x00\"o" + // 0x003E0338: 0x0000226F
	"\"d\x038\x00\x00\"p" + // 0x22640338: 0x00002270
	"\"e\x038\x00\x00\"q" + // 0x22650338: 0x00002271
	"\"r\x038\x00\x00\"t" + // 0x22720338: 0x00002274
	"\"s\x038\x00\x00\"u" + // 0x22730338: 0x00002275
	"\"v\x038\x00\x00\"x" + // 0x22760338: 0x00002278
	"\"w\x038\x00\x00\"y" + // 0x22770338: 0x00002279
	"\"z\x038\x00\x00\"\x80" + // 0x227A0338: 0x00002280
	"\"{\x038\x00\x00\"\x81" + // 0x227B0338: 0x00002281
	"\"\x82\x038\x00\x00\"\x84" + // 0x22820338: 0x00002284
	"\"\x83\x038\x00\x00\"\x85" + // 0x22830338: 0x00002285
	"\"\x86\x038\x00\x00\"\x88" + // 0x22860338: 0x00002288
	"\"\x87\x038\x00\x00\"\x89" + // 0x22870338: 0x00002289
	"\"\xa2\x038\x00\x00\"\xac" + // 0x22A20338: 0x000022AC
	"\"\xa8\x038\x00\x00\"\xad" + // 0x22A80338: 0x000022AD
	"\"\xa9\x038\x00\x00\"\xae" + // 0x22A90338: 0x000022AE
	"\"\xab\x038\x00\x00\"\xaf" + // 0x22AB0338: 0x000022AF
	"\"|\x038\x00\x00\"\xe0" + // 0x227C0338: 0x000022E0
	"\"}\x038\x00\x00\"\xe1" + // 0x227D0338: 0x000022E1
	"\"\x91\x038\x00\x00\"\xe2" + // 0x22910338: 0x000022E2
	"\"\x92\x038\x00\x00\"\xe3" + // 0x22920338: 0x000022E3
	"\"\xb2\x038\x00\x00\"\xea" + // 0x22B20338: 0x000022EA
	"\"\xb3\x038\x00\x00\"\xeb" + // 0x22B30338: 0x000022EB
	"\"\xb4\x038\x00\x00\"\xec" + // 0x22B40338: 0x000022EC
	"\"\xb5\x038\x00\x00\"\xed" + // 0x22B50338: 0x000022ED
	"0K0\x99\x00\x000L" + // 0x304B3099: 0x0000304C
	"0M0\x99\x00\x000N" + // 0x304D3099: 0x0000304E
	"0O0\x99\x00\x000P" + // 0x304F3099: 0x00003050
	"0Q0\x99\x00\x000R" + // 0x30513099: 0x00003052
	"0S0\x99\x00\x000T" + // 0x30533099: 0x00003054
	"0U0\x99\x00\x000V" + // 0x30553099: 0x00003056
	"0W0\x99\x00\x000X" + // 0x30573099: 0x00003058
	"0Y0\x99\x00\x000Z" + // 0x30593099: 0x0000305A
	"0[0\x99\x00\x000\\" + // 0x305B3099: 0x0000305C
	"0]0\x99\x00\x000^" + // 0x305D3099: 0x0000305E
	"0_0\x99\x00\x000`" + // 0x305F3099: 0x00003060
	"0a0\x99\x00\x000b" + // 0x30613099: 0x00003062
	"0d0\x99\x00\x000e" + // 0x30643099: 0x00003065
	"0f0\x99\x00\x000g" + // 0x30663099: 0x00003067
	"0h0\x99\x00\x000i" + // 0x30683099: 0x00003069
	"0o0\x99\x00\x000p" + // 0x306F3099: 0x00003070
	"0o0\x9a\x00\x000q" + // 0x306F309A: 0x00003071
	"0r0\x99\x00\x000s" + // 0x30723099: 0x00003073
	"0r0\x9a\x00\x000t" + // 0x3072309A: 0x00003074
	"0u0\x99\x00\x000v" + // 0x30753099: 0x00003076
	"0u0\x9a\x00\x000w" + // 0x3075309A: 0x00003077
	"0x0\x99\x00\x000y" + // 0x30783099: 0x00003079
	"0x0\x9a\x00\x000z" + // 0x3078309A: 0x0000307A
	"0{0\x99\x00\x000|" + // 0x307B3099: 0x0000307C
	"0{0\x9a\x00\x000}" + // 0x307B309A: 0x0000307D
	"0F0\x99\x00\x000\x94" + // 0x30463099: 0x00003094
	"0\x9d0\x99\x00\x000\x9e" + // 0x309D3099: 0x0000309E
	"0\xab0\x99\x00\x000\xac" + // 0x30AB3099: 0x000030AC
	"0\xad0\x99\x00\x000\xae" + // 0x30AD3099: 0x000030AE
	"0\xaf0\x99\x00\x000\xb0" + // 0x30AF3099: 0x000030B0
	"0\xb10\x99\x00\x000\xb2" + // 0x30B13099: 0x000030B2
	"0\xb30\x99\x00\x000\xb4" + // 0x30B33099: 0x000030B4
	"0\xb50\x99\x00\x000\xb6" + // 0x30B53099: 0x000030B6
	"0\xb70\x99\x00\x000\xb8" + // 0x30B73099: 0x000030B8
	"0\xb90\x99\x00\x000\xba" + // 0x30B93099: 0x000030BA
	"0\xbb0\x99\x00\x000\xbc" + // 0x30BB3099: 0x000030BC
	"0\xbd0\x99\x00\x000\xbe" + // 0x30BD3099: 0x000030BE
	"0\xbf0\x99\x00\x000\xc0" + // 0x30BF3099: 0x000030C0
	"0\xc10\x99\x00\x000\xc2" + // 0x30C13099: 0x000030C2
	"0\xc40\x99\x00\x000\xc5" + // 0x30C43099: 0x000030C5
	"0\xc60\x99\x00\x000\xc7" + // 0x30C63099: 0x000030C7
	"0\xc80\x99\x00\x000\xc9" + // 0x30C83099: 0x000030C9
	"0\xcf0\x99\x00\x000\xd0" + // 0x30CF3099: 0x000030D0
	"0\xcf0\x9a\x00\x000\xd1" + // 0x30CF309A: 0x000030D1
	"0\xd20\x99\x00\x000\xd3" + // 0x30D23099: 0x000030D3
	"0\xd20\x9a\x00\x000\xd4" + // 0x30D2309A: 0x000030D4
	"0\xd50\x99\x00\x000\xd6" + // 0x30D53099: 0x000030D6
	"0\xd50\x9a\x00\x000\xd7" + // 0x30D5309A: 0x000030D7
	"0\xd80\x99\x00\x000\xd9" + // 0x30D83099: 0x000030D9
	"0\xd80\x9a\x00\x000\xda" + // 0x30D8309A: 0x000030DA
	"0\xdb0\x99\x00\x000\xdc" + // 0x30DB3099: 0x000030DC
	"0\xdb0\x9a\x00\x000\xdd" + // 0x30DB309A: 0x000030DD
	"0\xa60\x99\x00\x000\xf4" + // 0x30A63099: 0x000030F4
	"0\xef0\x99\x00\x000\xf7" + // 0x30EF3099: 0x000030F7
	"0\xf00\x99\x00\x000\xf8" + // 0x30F03099: 0x000030F8
	"0\xf10\x99\x00\x000\xf9" + // 0x30F13099: 0x000030F9
	"0\xf20\x99\x00\x000\xfa" + // 0x30F23099: 0x000030FA
	"0\xfd0\x99\x00\x000\xfe" + // 0x30FD3099: 0x000030FE
	"\x10\x99\x10\xba\x00\x01\x10\x9a" + // 0x109910BA: 0x0001109A
	"\x10\x9b\x10\xba\x00\x01\x10\x9c" + // 0x109B10BA: 0x0001109C
	"\x10\xa5\x10\xba\x00\x01\x10\xab" + // 0x10A510BA: 0x000110AB
	"\x111\x11'\x00\x01\x11." + // 0x11311127: 0x0001112E
	"\x112\x11'\x00\x01\x11/" + // 0x11321127: 0x0001112F
	"\x13G\x13>\x00\x01\x13K" + // 0x1347133E: 0x0001134B
	"\x13G\x13W\x00\x01\x13L" + // 0x13471357: 0x0001134C
	"\x14\xb9\x14\xba\x00\x01\x14\xbb" + // 0x14B914BA: 0x000114BB
	"\x14\xb9\x14\xb0\x00\x01\x14\xbc" + // 0x14B914B0: 0x000114BC
	"\x14\xb9\x14\xbd\x00\x01\x14\xbe" + // 0x14B914BD: 0x000114BE
	"\x15\xb8\x15\xaf\x00\x01\x15\xba" + // 0x15B815AF: 0x000115BA
	"\x15\xb9\x15\xaf\x00\x01\x15\xbb" + // 0x15B915AF: 0x000115BB
	""
	// Total size of tables: 53KB (54514 bytes)
07070100000F43000081A4000000000000000000000001645E367C0005E32F000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/text/unicode/norm/tables12.0.0.go // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.

//go:build go1.14 && !go1.16
// +build go1.14,!go1.16

package norm

import "sync"

const (
	// Version is the Unicode edition from which the tables are derived.
	Version = "12.0.0"

	// MaxTransformChunkSize indicates the maximum number of bytes that Transform
	// may need to write atomically for any Form. Making a destination buffer at
	// least this size ensures that Transform can always make progress and that
	// the user does not need to grow the buffer on an ErrShortDst.
	MaxTransformChunkSize = 35 + maxNonStarters*4
)

var ccc = [55]uint8{
	0, 1, 7, 8, 9, 10, 11, 12,
	13, 14, 15, 16, 17, 18, 19, 20,
	21, 22, 23, 24, 25, 26, 27, 28,
	29, 30, 31, 32, 33, 34, 35, 36,
	84, 91, 103, 107, 118, 122, 129, 130,
	132, 202, 214, 216, 218, 220, 222, 224,
	226, 228, 230, 232, 233, 234, 240,
}

const (
	firstMulti            = 0x186D
	firstCCC              = 0x2CA1
	endMulti              = 0x2F63
	firstLeadingCCC       = 0x49B1
	firstCCCZeroExcept    = 0x4A7B
	firstStarterWithNLead = 0x4AA2
	lastDecomp            = 0x4AA4
	maxDecomp             = 0x8000
)

// decomps: 19108 bytes
var decomps = [...]byte{
	// Bytes 0 - 3f
	0x00, 0x41, 0x20, 0x41, 0x21, 0x41, 0x22, 0x41,
	0x23, 0x41, 0x24, 0x41, 0x25, 0x41, 0x26, 0x41,
	0x27, 0x41, 0x28, 0x41, 0x29, 0x41, 0x2A, 0x41,
	0x2B, 0x41, 0x2C, 0x41, 0x2D, 0x41, 0x2E, 0x41,
	0x2F, 0x41, 0x30, 0x41, 0x31, 0x41, 0x32, 0x41,
	0x33, 0x41, 0x34, 0x41, 0x35, 0x41, 0x36, 0x41,
	0x37, 0x41, 0x38, 0x41, 0x39, 0x41, 0x3A, 0x41,
	0x3B, 0x41, 0x3C, 0x41, 0x3D, 0x41, 0x3E, 0x41,
	// Bytes 40 - 7f
	0x3F, 0x41, 0x40, 0x41, 0x41, 0x41, 0x42, 0x41,
	0x43, 0x41, 0x44, 0x41, 0x45, 0x41, 0x46, 0x41,
	0x47, 0x41, 0x48, 0x41, 0x49, 0x41, 0x4A, 0x41,
	0x4B, 0x41, 0x4C, 0x41, 0x4D, 0x41, 0x4E, 0x41,
	0x4F, 0x41, 0x50, 0x41, 0x51, 0x41, 0x52, 0x41,
	0x53, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41,
	0x57, 0x41, 0x58, 0x41, 0x59, 0x41, 0x5A, 0x41,
	0x5B, 0x41, 0x5C, 0x41, 0x5D, 0x41, 0x5E, 0x41,
	// Bytes 80 - bf
	0x5F, 0x41, 0x60, 0x41, 0x61, 0x41, 0x62, 0x41,
	0x63, 0x41, 0x64, 0x41, 0x65, 0x41, 0x66, 0x41,
	0x67, 0x41, 0x68, 0x41, 0x69, 0x41, 0x6A, 0x41,
	0x6B, 0x41, 0x6C, 0x41, 0x6D, 0x41, 0x6E, 0x41,
	0x6F, 0x41, 0x70, 0x41, 0x71, 0x41, 0x72, 0x41,
	0x73, 0x41, 0x74, 0x41, 0x75, 0x41, 0x76, 0x41,
	0x77, 0x41, 0x78, 0x41, 0x79, 0x41, 0x7A, 0x41,
	0x7B, 0x41, 0x7C, 0x41, 0x7D, 0x41, 0x7E, 0x42,
	// Bytes c0 - ff
	0xC2, 0xA2, 0x42, 0xC2, 0xA3, 0x42, 0xC2, 0xA5,
	0x42, 0xC2, 0xA6, 0x42, 0xC2, 0xAC, 0x42, 0xC2,
	0xB7, 0x42, 0xC3, 0x86, 0x42, 0xC3, 0xB0, 0x42,
	0xC4, 0xA6, 0x42, 0xC4, 0xA7, 0x42, 0xC4, 0xB1,
	0x42, 0xC5, 0x8B, 0x42, 0xC5, 0x93, 0x42, 0xC6,
	0x8E, 0x42, 0xC6, 0x90, 0x42, 0xC6, 0xAB, 0x42,
	0xC8, 0xA2, 0x42, 0xC8, 0xB7, 0x42, 0xC9, 0x90,
	0x42, 0xC9, 0x91, 0x42, 0xC9, 0x92, 0x42, 0xC9,
	// Bytes 100 - 13f
	0x94, 0x42, 0xC9, 0x95, 0x42, 0xC9, 0x99, 0x42,
	0xC9, 0x9B, 0x42, 0xC9, 0x9C, 0x42, 0xC9, 0x9F,
	0x42, 0xC9, 0xA1, 0x42, 0xC9, 0xA3, 0x42, 0xC9,
	0xA5, 0x42, 0xC9, 0xA6, 0x42, 0xC9, 0xA8, 0x42,
	0xC9, 0xA9, 0x42, 0xC9, 0xAA, 0x42, 0xC9, 0xAB,
	0x42, 0xC9, 0xAD, 0x42, 0xC9, 0xAF, 0x42, 0xC9,
	0xB0, 0x42, 0xC9, 0xB1, 0x42, 0xC9, 0xB2, 0x42,
	0xC9, 0xB3, 0x42, 0xC9, 0xB4, 0x42, 0xC9, 0xB5,
	// Bytes 140 - 17f
	0x42, 0xC9, 0xB8, 0x42, 0xC9, 0xB9, 0x42, 0xC9,
	0xBB, 0x42, 0xCA, 0x81, 0x42, 0xCA, 0x82, 0x42,
	0xCA, 0x83, 0x42, 0xCA, 0x89, 0x42, 0xCA, 0x8A,
	0x42, 0xCA, 0x8B, 0x42, 0xCA, 0x8C, 0x42, 0xCA,
	0x90, 0x42, 0xCA, 0x91, 0x42, 0xCA, 0x92, 0x42,
	0xCA, 0x95, 0x42, 0xCA, 0x9D, 0x42, 0xCA, 0x9F,
	0x42, 0xCA, 0xB9, 0x42, 0xCE, 0x91, 0x42, 0xCE,
	0x92, 0x42, 0xCE, 0x93, 0x42, 0xCE, 0x94, 0x42,
	// Bytes 180 - 1bf
	0xCE, 0x95, 0x42, 0xCE, 0x96, 0x42, 0xCE, 0x97,
	0x42, 0xCE, 0x98, 0x42, 0xCE, 0x99, 0x42, 0xCE,
	0x9A, 0x42, 0xCE, 0x9B, 0x42, 0xCE, 0x9C, 0x42,
	0xCE, 0x9D, 0x42, 0xCE, 0x9E, 0x42, 0xCE, 0x9F,
	0x42, 0xCE, 0xA0, 0x42, 0xCE, 0xA1, 0x42, 0xCE,
	0xA3, 0x42, 0xCE, 0xA4, 0x42, 0xCE, 0xA5, 0x42,
	0xCE, 0xA6, 0x42, 0xCE, 0xA7, 0x42, 0xCE, 0xA8,
	0x42, 0xCE, 0xA9, 0x42, 0xCE, 0xB1, 0x42, 0xCE,
	// Bytes 1c0 - 1ff
	0xB2, 0x42, 0xCE, 0xB3, 0x42, 0xCE, 0xB4, 0x42,
	0xCE, 0xB5, 0x42, 0xCE, 0xB6, 0x42, 0xCE, 0xB7,
	0x42, 0xCE, 0xB8, 0x42, 0xCE, 0xB9, 0x42, 0xCE,
	0xBA, 0x42, 0xCE, 0xBB, 0x42, 0xCE, 0xBC, 0x42,
	0xCE, 0xBD, 0x42, 0xCE, 0xBE, 0x42, 0xCE, 0xBF,
	0x42, 0xCF, 0x80, 0x42, 0xCF, 0x81, 0x42, 0xCF,
	0x82, 0x42, 0xCF, 0x83, 0x42, 0xCF, 0x84, 0x42,
	0xCF, 0x85, 0x42, 0xCF, 0x86, 0x42, 0xCF, 0x87,
	// Bytes 200 - 23f
	0x42, 0xCF, 0x88, 0x42, 0xCF, 0x89, 0x42, 0xCF,
	0x9C, 0x42, 0xCF, 0x9D, 0x42, 0xD0, 0xBD, 0x42,
	0xD1, 0x8A, 0x42, 0xD1, 0x8C, 0x42, 0xD7, 0x90,
	0x42, 0xD7, 0x91, 0x42, 0xD7, 0x92, 0x42, 0xD7,
	0x93, 0x42, 0xD7, 0x94, 0x42, 0xD7, 0x9B, 0x42,
	0xD7, 0x9C, 0x42, 0xD7, 0x9D, 0x42, 0xD7, 0xA2,
	0x42, 0xD7, 0xA8, 0x42, 0xD7, 0xAA, 0x42, 0xD8,
	0xA1, 0x42, 0xD8, 0xA7, 0x42, 0xD8, 0xA8, 0x42,
	// Bytes 240 - 27f
	0xD8, 0xA9, 0x42, 0xD8, 0xAA, 0x42, 0xD8, 0xAB,
	0x42, 0xD8, 0xAC, 0x42, 0xD8, 0xAD, 0x42, 0xD8,
	0xAE, 0x42, 0xD8, 0xAF, 0x42, 0xD8, 0xB0, 0x42,
	0xD8, 0xB1, 0x42, 0xD8, 0xB2, 0x42, 0xD8, 0xB3,
	0x42, 0xD8, 0xB4, 0x42, 0xD8, 0xB5, 0x42, 0xD8,
	0xB6, 0x42, 0xD8, 0xB7, 0x42, 0xD8, 0xB8, 0x42,
	0xD8, 0xB9, 0x42, 0xD8, 0xBA, 0x42, 0xD9, 0x81,
	0x42, 0xD9, 0x82, 0x42, 0xD9, 0x83, 0x42, 0xD9,
	// Bytes 280 - 2bf
	0x84, 0x42, 0xD9, 0x85, 0x42, 0xD9, 0x86, 0x42,
	0xD9, 0x87, 0x42, 0xD9, 0x88, 0x42, 0xD9, 0x89,
	0x42, 0xD9, 0x8A, 0x42, 0xD9, 0xAE, 0x42, 0xD9,
	0xAF, 0x42, 0xD9, 0xB1, 0x42, 0xD9, 0xB9, 0x42,
	0xD9, 0xBA, 0x42, 0xD9, 0xBB, 0x42, 0xD9, 0xBE,
	0x42, 0xD9, 0xBF, 0x42, 0xDA, 0x80, 0x42, 0xDA,
	0x83, 0x42, 0xDA, 0x84, 0x42, 0xDA, 0x86, 0x42,
	0xDA, 0x87, 0x42, 0xDA, 0x88, 0x42, 0xDA, 0x8C,
	// Bytes 2c0 - 2ff
	0x42, 0xDA, 0x8D, 0x42, 0xDA, 0x8E, 0x42, 0xDA,
	0x91, 0x42, 0xDA, 0x98, 0x42, 0xDA, 0xA1, 0x42,
	0xDA, 0xA4, 0x42, 0xDA, 0xA6, 0x42, 0xDA, 0xA9,
	0x42, 0xDA, 0xAD, 0x42, 0xDA, 0xAF, 0x42, 0xDA,
	0xB1, 0x42, 0xDA, 0xB3, 0x42, 0xDA, 0xBA, 0x42,
	0xDA, 0xBB, 0x42, 0xDA, 0xBE, 0x42, 0xDB, 0x81,
	0x42, 0xDB, 0x85, 0x42, 0xDB, 0x86, 0x42, 0xDB,
	0x87, 0x42, 0xDB, 0x88, 0x42, 0xDB, 0x89, 0x42,
	// Bytes 300 - 33f
	0xDB, 0x8B, 0x42, 0xDB, 0x8C, 0x42, 0xDB, 0x90,
	0x42, 0xDB, 0x92, 0x43, 0xE0, 0xBC, 0x8B, 0x43,
	0xE1, 0x83, 0x9C, 0x43, 0xE1, 0x84, 0x80, 0x43,
	0xE1, 0x84, 0x81, 0x43, 0xE1, 0x84, 0x82, 0x43,
	0xE1, 0x84, 0x83, 0x43, 0xE1, 0x84, 0x84, 0x43,
	0xE1, 0x84, 0x85, 0x43, 0xE1, 0x84, 0x86, 0x43,
	0xE1, 0x84, 0x87, 0x43, 0xE1, 0x84, 0x88, 0x43,
	0xE1, 0x84, 0x89, 0x43, 0xE1, 0x84, 0x8A, 0x43,
	// Bytes 340 - 37f
	0xE1, 0x84, 0x8B, 0x43, 0xE1, 0x84, 0x8C, 0x43,
	0xE1, 0x84, 0x8D, 0x43, 0xE1, 0x84, 0x8E, 0x43,
	0xE1, 0x84, 0x8F, 0x43, 0xE1, 0x84, 0x90, 0x43,
	0xE1, 0x84, 0x91, 0x43, 0xE1, 0x84, 0x92, 0x43,
	0xE1, 0x84, 0x94, 0x43, 0xE1, 0x84, 0x95, 0x43,
	0xE1, 0x84, 0x9A, 0x43, 0xE1, 0x84, 0x9C, 0x43,
	0xE1, 0x84, 0x9D, 0x43, 0xE1, 0x84, 0x9E, 0x43,
	0xE1, 0x84, 0xA0, 0x43, 0xE1, 0x84, 0xA1, 0x43,
	// Bytes 380 - 3bf
	0xE1, 0x84, 0xA2, 0x43, 0xE1, 0x84, 0xA3, 0x43,
	0xE1, 0x84, 0xA7, 0x43, 0xE1, 0x84, 0xA9, 0x43,
	0xE1, 0x84, 0xAB, 0x43, 0xE1, 0x84, 0xAC, 0x43,
	0xE1, 0x84, 0xAD, 0x43, 0xE1, 0x84, 0xAE, 0x43,
	0xE1, 0x84, 0xAF, 0x43, 0xE1, 0x84, 0xB2, 0x43,
	0xE1, 0x84, 0xB6, 0x43, 0xE1, 0x85, 0x80, 0x43,
	0xE1, 0x85, 0x87, 0x43, 0xE1, 0x85, 0x8C, 0x43,
	0xE1, 0x85, 0x97, 0x43, 0xE1, 0x85, 0x98, 0x43,
	// Bytes 3c0 - 3ff
	0xE1, 0x85, 0x99, 0x43, 0xE1, 0x85, 0xA0, 0x43,
	0xE1, 0x86, 0x84, 0x43, 0xE1, 0x86, 0x85, 0x43,
	0xE1, 0x86, 0x88, 0x43, 0xE1, 0x86, 0x91, 0x43,
	0xE1, 0x86, 0x92, 0x43, 0xE1, 0x86, 0x94, 0x43,
	0xE1, 0x86, 0x9E, 0x43, 0xE1, 0x86, 0xA1, 0x43,
	0xE1, 0x87, 0x87, 0x43, 0xE1, 0x87, 0x88, 0x43,
	0xE1, 0x87, 0x8C, 0x43, 0xE1, 0x87, 0x8E, 0x43,
	0xE1, 0x87, 0x93, 0x43, 0xE1, 0x87, 0x97, 0x43,
	// Bytes 400 - 43f
	0xE1, 0x87, 0x99, 0x43, 0xE1, 0x87, 0x9D, 0x43,
	0xE1, 0x87, 0x9F, 0x43, 0xE1, 0x87, 0xB1, 0x43,
	0xE1, 0x87, 0xB2, 0x43, 0xE1, 0xB4, 0x82, 0x43,
	0xE1, 0xB4, 0x96, 0x43, 0xE1, 0xB4, 0x97, 0x43,
	0xE1, 0xB4, 0x9C, 0x43, 0xE1, 0xB4, 0x9D, 0x43,
	0xE1, 0xB4, 0xA5, 0x43, 0xE1, 0xB5, 0xBB, 0x43,
	0xE1, 0xB6, 0x85, 0x43, 0xE2, 0x80, 0x82, 0x43,
	0xE2, 0x80, 0x83, 0x43, 0xE2, 0x80, 0x90, 0x43,
	// Bytes 440 - 47f
	0xE2, 0x80, 0x93, 0x43, 0xE2, 0x80, 0x94, 0x43,
	0xE2, 0x82, 0xA9, 0x43, 0xE2, 0x86, 0x90, 0x43,
	0xE2, 0x86, 0x91, 0x43, 0xE2, 0x86, 0x92, 0x43,
	0xE2, 0x86, 0x93, 0x43, 0xE2, 0x88, 0x82, 0x43,
	0xE2, 0x88, 0x87, 0x43, 0xE2, 0x88, 0x91, 0x43,
	0xE2, 0x88, 0x92, 0x43, 0xE2, 0x94, 0x82, 0x43,
	0xE2, 0x96, 0xA0, 0x43, 0xE2, 0x97, 0x8B, 0x43,
	0xE2, 0xA6, 0x85, 0x43, 0xE2, 0xA6, 0x86, 0x43,
	// Bytes 480 - 4bf
	0xE2, 0xB5, 0xA1, 0x43, 0xE3, 0x80, 0x81, 0x43,
	0xE3, 0x80, 0x82, 0x43, 0xE3, 0x80, 0x88, 0x43,
	0xE3, 0x80, 0x89, 0x43, 0xE3, 0x80, 0x8A, 0x43,
	0xE3, 0x80, 0x8B, 0x43, 0xE3, 0x80, 0x8C, 0x43,
	0xE3, 0x80, 0x8D, 0x43, 0xE3, 0x80, 0x8E, 0x43,
	0xE3, 0x80, 0x8F, 0x43, 0xE3, 0x80, 0x90, 0x43,
	0xE3, 0x80, 0x91, 0x43, 0xE3, 0x80, 0x92, 0x43,
	0xE3, 0x80, 0x94, 0x43, 0xE3, 0x80, 0x95, 0x43,
	// Bytes 4c0 - 4ff
	0xE3, 0x80, 0x96, 0x43, 0xE3, 0x80, 0x97, 0x43,
	0xE3, 0x82, 0xA1, 0x43, 0xE3, 0x82, 0xA2, 0x43,
	0xE3, 0x82, 0xA3, 0x43, 0xE3, 0x82, 0xA4, 0x43,
	0xE3, 0x82, 0xA5, 0x43, 0xE3, 0x82, 0xA6, 0x43,
	0xE3, 0x82, 0xA7, 0x43, 0xE3, 0x82, 0xA8, 0x43,
	0xE3, 0x82, 0xA9, 0x43, 0xE3, 0x82, 0xAA, 0x43,
	0xE3, 0x82, 0xAB, 0x43, 0xE3, 0x82, 0xAD, 0x43,
	0xE3, 0x82, 0xAF, 0x43, 0xE3, 0x82, 0xB1, 0x43,
	// Bytes 500 - 53f
	0xE3, 0x82, 0xB3, 0x43, 0xE3, 0x82, 0xB5, 0x43,
	0xE3, 0x82, 0xB7, 0x43, 0xE3, 0x82, 0xB9, 0x43,
	0xE3, 0x82, 0xBB, 0x43, 0xE3, 0x82, 0xBD, 0x43,
	0xE3, 0x82, 0xBF, 0x43, 0xE3, 0x83, 0x81, 0x43,
	0xE3, 0x83, 0x83, 0x43, 0xE3, 0x83, 0x84, 0x43,
	0xE3, 0x83, 0x86, 0x43, 0xE3, 0x83, 0x88, 0x43,
	0xE3, 0x83, 0x8A, 0x43, 0xE3, 0x83, 0x8B, 0x43,
	0xE3, 0x83, 0x8C, 0x43, 0xE3, 0x83, 0x8D, 0x43,
	// Bytes 540 - 57f
	0xE3, 0x83, 0x8E, 0x43, 0xE3, 0x83, 0x8F, 0x43,
	0xE3, 0x83, 0x92, 0x43, 0xE3, 0x83, 0x95, 0x43,
	0xE3, 0x83, 0x98, 0x43, 0xE3, 0x83, 0x9B, 0x43,
	0xE3, 0x83, 0x9E, 0x43, 0xE3, 0x83, 0x9F, 0x43,
	0xE3, 0x83, 0xA0, 0x43, 0xE3, 0x83, 0xA1, 0x43,
	0xE3, 0x83, 0xA2, 0x43, 0xE3, 0x83, 0xA3, 0x43,
	0xE3, 0x83, 0xA4, 0x43, 0xE3, 0x83, 0xA5, 0x43,
	0xE3, 0x83, 0xA6, 0x43, 0xE3, 0x83, 0xA7, 0x43,
	// Bytes 580 - 5bf
	0xE3, 0x83, 0xA8, 0x43, 0xE3, 0x83, 0xA9, 0x43,
	0xE3, 0x83, 0xAA, 0x43, 0xE3, 0x83, 0xAB, 0x43,
	0xE3, 0x83, 0xAC, 0x43, 0xE3, 0x83, 0xAD, 0x43,
	0xE3, 0x83, 0xAF, 0x43, 0xE3, 0x83, 0xB0, 0x43,
	0xE3, 0x83, 0xB1, 0x43, 0xE3, 0x83, 0xB2, 0x43,
	0xE3, 0x83, 0xB3, 0x43, 0xE3, 0x83, 0xBB, 0x43,
	0xE3, 0x83, 0xBC, 0x43, 0xE3, 0x92, 0x9E, 0x43,
	0xE3, 0x92, 0xB9, 0x43, 0xE3, 0x92, 0xBB, 0x43,
	// Bytes 5c0 - 5ff
	0xE3, 0x93, 0x9F, 0x43, 0xE3, 0x94, 0x95, 0x43,
	0xE3, 0x9B, 0xAE, 0x43, 0xE3, 0x9B, 0xBC, 0x43,
	0xE3, 0x9E, 0x81, 0x43, 0xE3, 0xA0, 0xAF, 0x43,
	0xE3, 0xA1, 0xA2, 0x43, 0xE3, 0xA1, 0xBC, 0x43,
	0xE3, 0xA3, 0x87, 0x43, 0xE3, 0xA3, 0xA3, 0x43,
	0xE3, 0xA4, 0x9C, 0x43, 0xE3, 0xA4, 0xBA, 0x43,
	0xE3, 0xA8, 0xAE, 0x43, 0xE3, 0xA9, 0xAC, 0x43,
	0xE3, 0xAB, 0xA4, 0x43, 0xE3, 0xAC, 0x88, 0x43,
	// Bytes 600 - 63f
	0xE3, 0xAC, 0x99, 0x43, 0xE3, 0xAD, 0x89, 0x43,
	0xE3, 0xAE, 0x9D, 0x43, 0xE3, 0xB0, 0x98, 0x43,
	0xE3, 0xB1, 0x8E, 0x43, 0xE3, 0xB4, 0xB3, 0x43,
	0xE3, 0xB6, 0x96, 0x43, 0xE3, 0xBA, 0xAC, 0x43,
	0xE3, 0xBA, 0xB8, 0x43, 0xE3, 0xBC, 0x9B, 0x43,
	0xE3, 0xBF, 0xBC, 0x43, 0xE4, 0x80, 0x88, 0x43,
	0xE4, 0x80, 0x98, 0x43, 0xE4, 0x80, 0xB9, 0x43,
	0xE4, 0x81, 0x86, 0x43, 0xE4, 0x82, 0x96, 0x43,
	// Bytes 640 - 67f
	0xE4, 0x83, 0xA3, 0x43, 0xE4, 0x84, 0xAF, 0x43,
	0xE4, 0x88, 0x82, 0x43, 0xE4, 0x88, 0xA7, 0x43,
	0xE4, 0x8A, 0xA0, 0x43, 0xE4, 0x8C, 0x81, 0x43,
	0xE4, 0x8C, 0xB4, 0x43, 0xE4, 0x8D, 0x99, 0x43,
	0xE4, 0x8F, 0x95, 0x43, 0xE4, 0x8F, 0x99, 0x43,
	0xE4, 0x90, 0x8B, 0x43, 0xE4, 0x91, 0xAB, 0x43,
	0xE4, 0x94, 0xAB, 0x43, 0xE4, 0x95, 0x9D, 0x43,
	0xE4, 0x95, 0xA1, 0x43, 0xE4, 0x95, 0xAB, 0x43,
	// Bytes 680 - 6bf
	0xE4, 0x97, 0x97, 0x43, 0xE4, 0x97, 0xB9, 0x43,
	0xE4, 0x98, 0xB5, 0x43, 0xE4, 0x9A, 0xBE, 0x43,
	0xE4, 0x9B, 0x87, 0x43, 0xE4, 0xA6, 0x95, 0x43,
	0xE4, 0xA7, 0xA6, 0x43, 0xE4, 0xA9, 0xAE, 0x43,
	0xE4, 0xA9, 0xB6, 0x43, 0xE4, 0xAA, 0xB2, 0x43,
	0xE4, 0xAC, 0xB3, 0x43, 0xE4, 0xAF, 0x8E, 0x43,
	0xE4, 0xB3, 0x8E, 0x43, 0xE4, 0xB3, 0xAD, 0x43,
	0xE4, 0xB3, 0xB8, 0x43, 0xE4, 0xB5, 0x96, 0x43,
	// Bytes 6c0 - 6ff
	0xE4, 0xB8, 0x80, 0x43, 0xE4, 0xB8, 0x81, 0x43,
	0xE4, 0xB8, 0x83, 0x43, 0xE4, 0xB8, 0x89, 0x43,
	0xE4, 0xB8, 0x8A, 0x43, 0xE4, 0xB8, 0x8B, 0x43,
	0xE4, 0xB8, 0x8D, 0x43, 0xE4, 0xB8, 0x99, 0x43,
	0xE4, 0xB8, 0xA6, 0x43, 0xE4, 0xB8, 0xA8, 0x43,
	0xE4, 0xB8, 0xAD, 0x43, 0xE4, 0xB8, 0xB2, 0x43,
	0xE4, 0xB8, 0xB6, 0x43, 0xE4, 0xB8, 0xB8, 0x43,
	0xE4, 0xB8, 0xB9, 0x43, 0xE4, 0xB8, 0xBD, 0x43,
	// Bytes 700 - 73f
	0xE4, 0xB8, 0xBF, 0x43, 0xE4, 0xB9, 0x81, 0x43,
	0xE4, 0xB9, 0x99, 0x43, 0xE4, 0xB9, 0x9D, 0x43,
	0xE4, 0xBA, 0x82, 0x43, 0xE4, 0xBA, 0x85, 0x43,
	0xE4, 0xBA, 0x86, 0x43, 0xE4, 0xBA, 0x8C, 0x43,
	0xE4, 0xBA, 0x94, 0x43, 0xE4, 0xBA, 0xA0, 0x43,
	0xE4, 0xBA, 0xA4, 0x43, 0xE4, 0xBA, 0xAE, 0x43,
	0xE4, 0xBA, 0xBA, 0x43, 0xE4, 0xBB, 0x80, 0x43,
	0xE4, 0xBB, 0x8C, 0x43, 0xE4, 0xBB, 0xA4, 0x43,
	// Bytes 740 - 77f
	0xE4, 0xBC, 0x81, 0x43, 0xE4, 0xBC, 0x91, 0x43,
	0xE4, 0xBD, 0xA0, 0x43, 0xE4, 0xBE, 0x80, 0x43,
	0xE4, 0xBE, 0x86, 0x43, 0xE4, 0xBE, 0x8B, 0x43,
	0xE4, 0xBE, 0xAE, 0x43, 0xE4, 0xBE, 0xBB, 0x43,
	0xE4, 0xBE, 0xBF, 0x43, 0xE5, 0x80, 0x82, 0x43,
	0xE5, 0x80, 0xAB, 0x43, 0xE5, 0x81, 0xBA, 0x43,
	0xE5, 0x82, 0x99, 0x43, 0xE5, 0x83, 0x8F, 0x43,
	0xE5, 0x83, 0x9A, 0x43, 0xE5, 0x83, 0xA7, 0x43,
	// Bytes 780 - 7bf
	0xE5, 0x84, 0xAA, 0x43, 0xE5, 0x84, 0xBF, 0x43,
	0xE5, 0x85, 0x80, 0x43, 0xE5, 0x85, 0x85, 0x43,
	0xE5, 0x85, 0x8D, 0x43, 0xE5, 0x85, 0x94, 0x43,
	0xE5, 0x85, 0xA4, 0x43, 0xE5, 0x85, 0xA5, 0x43,
	0xE5, 0x85, 0xA7, 0x43, 0xE5, 0x85, 0xA8, 0x43,
	0xE5, 0x85, 0xA9, 0x43, 0xE5, 0x85, 0xAB, 0x43,
	0xE5, 0x85, 0xAD, 0x43, 0xE5, 0x85, 0xB7, 0x43,
	0xE5, 0x86, 0x80, 0x43, 0xE5, 0x86, 0x82, 0x43,
	// Bytes 7c0 - 7ff
	0xE5, 0x86, 0x8D, 0x43, 0xE5, 0x86, 0x92, 0x43,
	0xE5, 0x86, 0x95, 0x43, 0xE5, 0x86, 0x96, 0x43,
	0xE5, 0x86, 0x97, 0x43, 0xE5, 0x86, 0x99, 0x43,
	0xE5, 0x86, 0xA4, 0x43, 0xE5, 0x86, 0xAB, 0x43,
	0xE5, 0x86, 0xAC, 0x43, 0xE5, 0x86, 0xB5, 0x43,
	0xE5, 0x86, 0xB7, 0x43, 0xE5, 0x87, 0x89, 0x43,
	0xE5, 0x87, 0x8C, 0x43, 0xE5, 0x87, 0x9C, 0x43,
	0xE5, 0x87, 0x9E, 0x43, 0xE5, 0x87, 0xA0, 0x43,
	// Bytes 800 - 83f
	0xE5, 0x87, 0xB5, 0x43, 0xE5, 0x88, 0x80, 0x43,
	0xE5, 0x88, 0x83, 0x43, 0xE5, 0x88, 0x87, 0x43,
	0xE5, 0x88, 0x97, 0x43, 0xE5, 0x88, 0x9D, 0x43,
	0xE5, 0x88, 0xA9, 0x43, 0xE5, 0x88, 0xBA, 0x43,
	0xE5, 0x88, 0xBB, 0x43, 0xE5, 0x89, 0x86, 0x43,
	0xE5, 0x89, 0x8D, 0x43, 0xE5, 0x89, 0xB2, 0x43,
	0xE5, 0x89, 0xB7, 0x43, 0xE5, 0x8A, 0x89, 0x43,
	0xE5, 0x8A, 0x9B, 0x43, 0xE5, 0x8A, 0xA3, 0x43,
	// Bytes 840 - 87f
	0xE5, 0x8A, 0xB3, 0x43, 0xE5, 0x8A, 0xB4, 0x43,
	0xE5, 0x8B, 0x87, 0x43, 0xE5, 0x8B, 0x89, 0x43,
	0xE5, 0x8B, 0x92, 0x43, 0xE5, 0x8B, 0x9E, 0x43,
	0xE5, 0x8B, 0xA4, 0x43, 0xE5, 0x8B, 0xB5, 0x43,
	0xE5, 0x8B, 0xB9, 0x43, 0xE5, 0x8B, 0xBA, 0x43,
	0xE5, 0x8C, 0x85, 0x43, 0xE5, 0x8C, 0x86, 0x43,
	0xE5, 0x8C, 0x95, 0x43, 0xE5, 0x8C, 0x97, 0x43,
	0xE5, 0x8C, 0x9A, 0x43, 0xE5, 0x8C, 0xB8, 0x43,
	// Bytes 880 - 8bf
	0xE5, 0x8C, 0xBB, 0x43, 0xE5, 0x8C, 0xBF, 0x43,
	0xE5, 0x8D, 0x81, 0x43, 0xE5, 0x8D, 0x84, 0x43,
	0xE5, 0x8D, 0x85, 0x43, 0xE5, 0x8D, 0x89, 0x43,
	0xE5, 0x8D, 0x91, 0x43, 0xE5, 0x8D, 0x94, 0x43,
	0xE5, 0x8D, 0x9A, 0x43, 0xE5, 0x8D, 0x9C, 0x43,
	0xE5, 0x8D, 0xA9, 0x43, 0xE5, 0x8D, 0xB0, 0x43,
	0xE5, 0x8D, 0xB3, 0x43, 0xE5, 0x8D, 0xB5, 0x43,
	0xE5, 0x8D, 0xBD, 0x43, 0xE5, 0x8D, 0xBF, 0x43,
	// Bytes 8c0 - 8ff
	0xE5, 0x8E, 0x82, 0x43, 0xE5, 0x8E, 0xB6, 0x43,
	0xE5, 0x8F, 0x83, 0x43, 0xE5, 0x8F, 0x88, 0x43,
	0xE5, 0x8F, 0x8A, 0x43, 0xE5, 0x8F, 0x8C, 0x43,
	0xE5, 0x8F, 0x9F, 0x43, 0xE5, 0x8F, 0xA3, 0x43,
	0xE5, 0x8F, 0xA5, 0x43, 0xE5, 0x8F, 0xAB, 0x43,
	0xE5, 0x8F, 0xAF, 0x43, 0xE5, 0x8F, 0xB1, 0x43,
	0xE5, 0x8F, 0xB3, 0x43, 0xE5, 0x90, 0x86, 0x43,
	0xE5, 0x90, 0x88, 0x43, 0xE5, 0x90, 0x8D, 0x43,
	// Bytes 900 - 93f
	0xE5, 0x90, 0x8F, 0x43, 0xE5, 0x90, 0x9D, 0x43,
	0xE5, 0x90, 0xB8, 0x43, 0xE5, 0x90, 0xB9, 0x43,
	0xE5, 0x91, 0x82, 0x43, 0xE5, 0x91, 0x88, 0x43,
	0xE5, 0x91, 0xA8, 0x43, 0xE5, 0x92, 0x9E, 0x43,
	0xE5, 0x92, 0xA2, 0x43, 0xE5, 0x92, 0xBD, 0x43,
	0xE5, 0x93, 0xB6, 0x43, 0xE5, 0x94, 0x90, 0x43,
	0xE5, 0x95, 0x8F, 0x43, 0xE5, 0x95, 0x93, 0x43,
	0xE5, 0x95, 0x95, 0x43, 0xE5, 0x95, 0xA3, 0x43,
	// Bytes 940 - 97f
	0xE5, 0x96, 0x84, 0x43, 0xE5, 0x96, 0x87, 0x43,
	0xE5, 0x96, 0x99, 0x43, 0xE5, 0x96, 0x9D, 0x43,
	0xE5, 0x96, 0xAB, 0x43, 0xE5, 0x96, 0xB3, 0x43,
	0xE5, 0x96, 0xB6, 0x43, 0xE5, 0x97, 0x80, 0x43,
	0xE5, 0x97, 0x82, 0x43, 0xE5, 0x97, 0xA2, 0x43,
	0xE5, 0x98, 0x86, 0x43, 0xE5, 0x99, 0x91, 0x43,
	0xE5, 0x99, 0xA8, 0x43, 0xE5, 0x99, 0xB4, 0x43,
	0xE5, 0x9B, 0x97, 0x43, 0xE5, 0x9B, 0x9B, 0x43,
	// Bytes 980 - 9bf
	0xE5, 0x9B, 0xB9, 0x43, 0xE5, 0x9C, 0x96, 0x43,
	0xE5, 0x9C, 0x97, 0x43, 0xE5, 0x9C, 0x9F, 0x43,
	0xE5, 0x9C, 0xB0, 0x43, 0xE5, 0x9E, 0x8B, 0x43,
	0xE5, 0x9F, 0x8E, 0x43, 0xE5, 0x9F, 0xB4, 0x43,
	0xE5, 0xA0, 0x8D, 0x43, 0xE5, 0xA0, 0xB1, 0x43,
	0xE5, 0xA0, 0xB2, 0x43, 0xE5, 0xA1, 0x80, 0x43,
	0xE5, 0xA1, 0x9A, 0x43, 0xE5, 0xA1, 0x9E, 0x43,
	0xE5, 0xA2, 0xA8, 0x43, 0xE5, 0xA2, 0xAC, 0x43,
	// Bytes 9c0 - 9ff
	0xE5, 0xA2, 0xB3, 0x43, 0xE5, 0xA3, 0x98, 0x43,
	0xE5, 0xA3, 0x9F, 0x43, 0xE5, 0xA3, 0xAB, 0x43,
	0xE5, 0xA3, 0xAE, 0x43, 0xE5, 0xA3, 0xB0, 0x43,
	0xE5, 0xA3, 0xB2, 0x43, 0xE5, 0xA3, 0xB7, 0x43,
	0xE5, 0xA4, 0x82, 0x43, 0xE5, 0xA4, 0x86, 0x43,
	0xE5, 0xA4, 0x8A, 0x43, 0xE5, 0xA4, 0x95, 0x43,
	0xE5, 0xA4, 0x9A, 0x43, 0xE5, 0xA4, 0x9C, 0x43,
	0xE5, 0xA4, 0xA2, 0x43, 0xE5, 0xA4, 0xA7, 0x43,
	// Bytes a00 - a3f
	0xE5, 0xA4, 0xA9, 0x43, 0xE5, 0xA5, 0x84, 0x43,
	0xE5, 0xA5, 0x88, 0x43, 0xE5, 0xA5, 0x91, 0x43,
	0xE5, 0xA5, 0x94, 0x43, 0xE5, 0xA5, 0xA2, 0x43,
	0xE5, 0xA5, 0xB3, 0x43, 0xE5, 0xA7, 0x98, 0x43,
	0xE5, 0xA7, 0xAC, 0x43, 0xE5, 0xA8, 0x9B, 0x43,
	0xE5, 0xA8, 0xA7, 0x43, 0xE5, 0xA9, 0xA2, 0x43,
	0xE5, 0xA9, 0xA6, 0x43, 0xE5, 0xAA, 0xB5, 0x43,
	0xE5, 0xAC, 0x88, 0x43, 0xE5, 0xAC, 0xA8, 0x43,
	// Bytes a40 - a7f
	0xE5, 0xAC, 0xBE, 0x43, 0xE5, 0xAD, 0x90, 0x43,
	0xE5, 0xAD, 0x97, 0x43, 0xE5, 0xAD, 0xA6, 0x43,
	0xE5, 0xAE, 0x80, 0x43, 0xE5, 0xAE, 0x85, 0x43,
	0xE5, 0xAE, 0x97, 0x43, 0xE5, 0xAF, 0x83, 0x43,
	0xE5, 0xAF, 0x98, 0x43, 0xE5, 0xAF, 0xA7, 0x43,
	0xE5, 0xAF, 0xAE, 0x43, 0xE5, 0xAF, 0xB3, 0x43,
	0xE5, 0xAF, 0xB8, 0x43, 0xE5, 0xAF, 0xBF, 0x43,
	0xE5, 0xB0, 0x86, 0x43, 0xE5, 0xB0, 0x8F, 0x43,
	// Bytes a80 - abf
	0xE5, 0xB0, 0xA2, 0x43, 0xE5, 0xB0, 0xB8, 0x43,
	0xE5, 0xB0, 0xBF, 0x43, 0xE5, 0xB1, 0xA0, 0x43,
	0xE5, 0xB1, 0xA2, 0x43, 0xE5, 0xB1, 0xA4, 0x43,
	0xE5, 0xB1, 0xA5, 0x43, 0xE5, 0xB1, 0xAE, 0x43,
	0xE5, 0xB1, 0xB1, 0x43, 0xE5, 0xB2, 0x8D, 0x43,
	0xE5, 0xB3, 0x80, 0x43, 0xE5, 0xB4, 0x99, 0x43,
	0xE5, 0xB5, 0x83, 0x43, 0xE5, 0xB5, 0x90, 0x43,
	0xE5, 0xB5, 0xAB, 0x43, 0xE5, 0xB5, 0xAE, 0x43,
	// Bytes ac0 - aff
	0xE5, 0xB5, 0xBC, 0x43, 0xE5, 0xB6, 0xB2, 0x43,
	0xE5, 0xB6, 0xBA, 0x43, 0xE5, 0xB7, 0x9B, 0x43,
	0xE5, 0xB7, 0xA1, 0x43, 0xE5, 0xB7, 0xA2, 0x43,
	0xE5, 0xB7, 0xA5, 0x43, 0xE5, 0xB7, 0xA6, 0x43,
	0xE5, 0xB7, 0xB1, 0x43, 0xE5, 0xB7, 0xBD, 0x43,
	0xE5, 0xB7, 0xBE, 0x43, 0xE5, 0xB8, 0xA8, 0x43,
	0xE5, 0xB8, 0xBD, 0x43, 0xE5, 0xB9, 0xA9, 0x43,
	0xE5, 0xB9, 0xB2, 0x43, 0xE5, 0xB9, 0xB4, 0x43,
	// Bytes b00 - b3f
	0xE5, 0xB9, 0xBA, 0x43, 0xE5, 0xB9, 0xBC, 0x43,
	0xE5, 0xB9, 0xBF, 0x43, 0xE5, 0xBA, 0xA6, 0x43,
	0xE5, 0xBA, 0xB0, 0x43, 0xE5, 0xBA, 0xB3, 0x43,
	0xE5, 0xBA, 0xB6, 0x43, 0xE5, 0xBB, 0x89, 0x43,
	0xE5, 0xBB, 0x8A, 0x43, 0xE5, 0xBB, 0x92, 0x43,
	0xE5, 0xBB, 0x93, 0x43, 0xE5, 0xBB, 0x99, 0x43,
	0xE5, 0xBB, 0xAC, 0x43, 0xE5, 0xBB, 0xB4, 0x43,
	0xE5, 0xBB, 0xBE, 0x43, 0xE5, 0xBC, 0x84, 0x43,
	// Bytes b40 - b7f
	0xE5, 0xBC, 0x8B, 0x43, 0xE5, 0xBC, 0x93, 0x43,
	0xE5, 0xBC, 0xA2, 0x43, 0xE5, 0xBD, 0x90, 0x43,
	0xE5, 0xBD, 0x93, 0x43, 0xE5, 0xBD, 0xA1, 0x43,
	0xE5, 0xBD, 0xA2, 0x43, 0xE5, 0xBD, 0xA9, 0x43,
	0xE5, 0xBD, 0xAB, 0x43, 0xE5, 0xBD, 0xB3, 0x43,
	0xE5, 0xBE, 0x8B, 0x43, 0xE5, 0xBE, 0x8C, 0x43,
	0xE5, 0xBE, 0x97, 0x43, 0xE5, 0xBE, 0x9A, 0x43,
	0xE5, 0xBE, 0xA9, 0x43, 0xE5, 0xBE, 0xAD, 0x43,
	// Bytes b80 - bbf
	0xE5, 0xBF, 0x83, 0x43, 0xE5, 0xBF, 0x8D, 0x43,
	0xE5, 0xBF, 0x97, 0x43, 0xE5, 0xBF, 0xB5, 0x43,
	0xE5, 0xBF, 0xB9, 0x43, 0xE6, 0x80, 0x92, 0x43,
	0xE6, 0x80, 0x9C, 0x43, 0xE6, 0x81, 0xB5, 0x43,
	0xE6, 0x82, 0x81, 0x43, 0xE6, 0x82, 0x94, 0x43,
	0xE6, 0x83, 0x87, 0x43, 0xE6, 0x83, 0x98, 0x43,
	0xE6, 0x83, 0xA1, 0x43, 0xE6, 0x84, 0x88, 0x43,
	0xE6, 0x85, 0x84, 0x43, 0xE6, 0x85, 0x88, 0x43,
	// Bytes bc0 - bff
	0xE6, 0x85, 0x8C, 0x43, 0xE6, 0x85, 0x8E, 0x43,
	0xE6, 0x85, 0xA0, 0x43, 0xE6, 0x85, 0xA8, 0x43,
	0xE6, 0x85, 0xBA, 0x43, 0xE6, 0x86, 0x8E, 0x43,
	0xE6, 0x86, 0x90, 0x43, 0xE6, 0x86, 0xA4, 0x43,
	0xE6, 0x86, 0xAF, 0x43, 0xE6, 0x86, 0xB2, 0x43,
	0xE6, 0x87, 0x9E, 0x43, 0xE6, 0x87, 0xB2, 0x43,
	0xE6, 0x87, 0xB6, 0x43, 0xE6, 0x88, 0x80, 0x43,
	0xE6, 0x88, 0x88, 0x43, 0xE6, 0x88, 0x90, 0x43,
	// Bytes c00 - c3f
	0xE6, 0x88, 0x9B, 0x43, 0xE6, 0x88, 0xAE, 0x43,
	0xE6, 0x88, 0xB4, 0x43, 0xE6, 0x88, 0xB6, 0x43,
	0xE6, 0x89, 0x8B, 0x43, 0xE6, 0x89, 0x93, 0x43,
	0xE6, 0x89, 0x9D, 0x43, 0xE6, 0x8A, 0x95, 0x43,
	0xE6, 0x8A, 0xB1, 0x43, 0xE6, 0x8B, 0x89, 0x43,
	0xE6, 0x8B, 0x8F, 0x43, 0xE6, 0x8B, 0x93, 0x43,
	0xE6, 0x8B, 0x94, 0x43, 0xE6, 0x8B, 0xBC, 0x43,
	0xE6, 0x8B, 0xBE, 0x43, 0xE6, 0x8C, 0x87, 0x43,
	// Bytes c40 - c7f
	0xE6, 0x8C, 0xBD, 0x43, 0xE6, 0x8D, 0x90, 0x43,
	0xE6, 0x8D, 0x95, 0x43, 0xE6, 0x8D, 0xA8, 0x43,
	0xE6, 0x8D, 0xBB, 0x43, 0xE6, 0x8E, 0x83, 0x43,
	0xE6, 0x8E, 0xA0, 0x43, 0xE6, 0x8E, 0xA9, 0x43,
	0xE6, 0x8F, 0x84, 0x43, 0xE6, 0x8F, 0x85, 0x43,
	0xE6, 0x8F, 0xA4, 0x43, 0xE6, 0x90, 0x9C, 0x43,
	0xE6, 0x90, 0xA2, 0x43, 0xE6, 0x91, 0x92, 0x43,
	0xE6, 0x91, 0xA9, 0x43, 0xE6, 0x91, 0xB7, 0x43,
	// Bytes c80 - cbf
	0xE6, 0x91, 0xBE, 0x43, 0xE6, 0x92, 0x9A, 0x43,
	0xE6, 0x92, 0x9D, 0x43, 0xE6, 0x93, 0x84, 0x43,
	0xE6, 0x94, 0xAF, 0x43, 0xE6, 0x94, 0xB4, 0x43,
	0xE6, 0x95, 0x8F, 0x43, 0xE6, 0x95, 0x96, 0x43,
	0xE6, 0x95, 0xAC, 0x43, 0xE6, 0x95, 0xB8, 0x43,
	0xE6, 0x96, 0x87, 0x43, 0xE6, 0x96, 0x97, 0x43,
	0xE6, 0x96, 0x99, 0x43, 0xE6, 0x96, 0xA4, 0x43,
	0xE6, 0x96, 0xB0, 0x43, 0xE6, 0x96, 0xB9, 0x43,
	// Bytes cc0 - cff
	0xE6, 0x97, 0x85, 0x43, 0xE6, 0x97, 0xA0, 0x43,
	0xE6, 0x97, 0xA2, 0x43, 0xE6, 0x97, 0xA3, 0x43,
	0xE6, 0x97, 0xA5, 0x43, 0xE6, 0x98, 0x93, 0x43,
	0xE6, 0x98, 0xA0, 0x43, 0xE6, 0x99, 0x89, 0x43,
	0xE6, 0x99, 0xB4, 0x43, 0xE6, 0x9A, 0x88, 0x43,
	0xE6, 0x9A, 0x91, 0x43, 0xE6, 0x9A, 0x9C, 0x43,
	0xE6, 0x9A, 0xB4, 0x43, 0xE6, 0x9B, 0x86, 0x43,
	0xE6, 0x9B, 0xB0, 0x43, 0xE6, 0x9B, 0xB4, 0x43,
	// Bytes d00 - d3f
	0xE6, 0x9B, 0xB8, 0x43, 0xE6, 0x9C, 0x80, 0x43,
	0xE6, 0x9C, 0x88, 0x43, 0xE6, 0x9C, 0x89, 0x43,
	0xE6, 0x9C, 0x97, 0x43, 0xE6, 0x9C, 0x9B, 0x43,
	0xE6, 0x9C, 0xA1, 0x43, 0xE6, 0x9C, 0xA8, 0x43,
	0xE6, 0x9D, 0x8E, 0x43, 0xE6, 0x9D, 0x93, 0x43,
	0xE6, 0x9D, 0x96, 0x43, 0xE6, 0x9D, 0x9E, 0x43,
	0xE6, 0x9D, 0xBB, 0x43, 0xE6, 0x9E, 0x85, 0x43,
	0xE6, 0x9E, 0x97, 0x43, 0xE6, 0x9F, 0xB3, 0x43,
	// Bytes d40 - d7f
	0xE6, 0x9F, 0xBA, 0x43, 0xE6, 0xA0, 0x97, 0x43,
	0xE6, 0xA0, 0x9F, 0x43, 0xE6, 0xA0, 0xAA, 0x43,
	0xE6, 0xA1, 0x92, 0x43, 0xE6, 0xA2, 0x81, 0x43,
	0xE6, 0xA2, 0x85, 0x43, 0xE6, 0xA2, 0x8E, 0x43,
	0xE6, 0xA2, 0xA8, 0x43, 0xE6, 0xA4, 0x94, 0x43,
	0xE6, 0xA5, 0x82, 0x43, 0xE6, 0xA6, 0xA3, 0x43,
	0xE6, 0xA7, 0xAA, 0x43, 0xE6, 0xA8, 0x82, 0x43,
	0xE6, 0xA8, 0x93, 0x43, 0xE6, 0xAA, 0xA8, 0x43,
	// Bytes d80 - dbf
	0xE6, 0xAB, 0x93, 0x43, 0xE6, 0xAB, 0x9B, 0x43,
	0xE6, 0xAC, 0x84, 0x43, 0xE6, 0xAC, 0xA0, 0x43,
	0xE6, 0xAC, 0xA1, 0x43, 0xE6, 0xAD, 0x94, 0x43,
	0xE6, 0xAD, 0xA2, 0x43, 0xE6, 0xAD, 0xA3, 0x43,
	0xE6, 0xAD, 0xB2, 0x43, 0xE6, 0xAD, 0xB7, 0x43,
	0xE6, 0xAD, 0xB9, 0x43, 0xE6, 0xAE, 0x9F, 0x43,
	0xE6, 0xAE, 0xAE, 0x43, 0xE6, 0xAE, 0xB3, 0x43,
	0xE6, 0xAE, 0xBA, 0x43, 0xE6, 0xAE, 0xBB, 0x43,
	// Bytes dc0 - dff
	0xE6, 0xAF, 0x8B, 0x43, 0xE6, 0xAF, 0x8D, 0x43,
	0xE6, 0xAF, 0x94, 0x43, 0xE6, 0xAF, 0x9B, 0x43,
	0xE6, 0xB0, 0x8F, 0x43, 0xE6, 0xB0, 0x94, 0x43,
	0xE6, 0xB0, 0xB4, 0x43, 0xE6, 0xB1, 0x8E, 0x43,
	0xE6, 0xB1, 0xA7, 0x43, 0xE6, 0xB2, 0x88, 0x43,
	0xE6, 0xB2, 0xBF, 0x43, 0xE6, 0xB3, 0x8C, 0x43,
	0xE6, 0xB3, 0x8D, 0x43, 0xE6, 0xB3, 0xA5, 0x43,
	0xE6, 0xB3, 0xA8, 0x43, 0xE6, 0xB4, 0x96, 0x43,
	// Bytes e00 - e3f
	0xE6, 0xB4, 0x9B, 0x43, 0xE6, 0xB4, 0x9E, 0x43,
	0xE6, 0xB4, 0xB4, 0x43, 0xE6, 0xB4, 0xBE, 0x43,
	0xE6, 0xB5, 0x81, 0x43, 0xE6, 0xB5, 0xA9, 0x43,
	0xE6, 0xB5, 0xAA, 0x43, 0xE6, 0xB5, 0xB7, 0x43,
	0xE6, 0xB5, 0xB8, 0x43, 0xE6, 0xB6, 0x85, 0x43,
	0xE6, 0xB7, 0x8B, 0x43, 0xE6, 0xB7, 0x9A, 0x43,
	0xE6, 0xB7, 0xAA, 0x43, 0xE6, 0xB7, 0xB9, 0x43,
	0xE6, 0xB8, 0x9A, 0x43, 0xE6, 0xB8, 0xAF, 0x43,
	// Bytes e40 - e7f
	0xE6, 0xB9, 0xAE, 0x43, 0xE6, 0xBA, 0x80, 0x43,
	0xE6, 0xBA, 0x9C, 0x43, 0xE6, 0xBA, 0xBA, 0x43,
	0xE6, 0xBB, 0x87, 0x43, 0xE6, 0xBB, 0x8B, 0x43,
	0xE6, 0xBB, 0x91, 0x43, 0xE6, 0xBB, 0x9B, 0x43,
	0xE6, 0xBC, 0x8F, 0x43, 0xE6, 0xBC, 0x94, 0x43,
	0xE6, 0xBC, 0xA2, 0x43, 0xE6, 0xBC, 0xA3, 0x43,
	0xE6, 0xBD, 0xAE, 0x43, 0xE6, 0xBF, 0x86, 0x43,
	0xE6, 0xBF, 0xAB, 0x43, 0xE6, 0xBF, 0xBE, 0x43,
	// Bytes e80 - ebf
	0xE7, 0x80, 0x9B, 0x43, 0xE7, 0x80, 0x9E, 0x43,
	0xE7, 0x80, 0xB9, 0x43, 0xE7, 0x81, 0x8A, 0x43,
	0xE7, 0x81, 0xAB, 0x43, 0xE7, 0x81, 0xB0, 0x43,
	0xE7, 0x81, 0xB7, 0x43, 0xE7, 0x81, 0xBD, 0x43,
	0xE7, 0x82, 0x99, 0x43, 0xE7, 0x82, 0xAD, 0x43,
	0xE7, 0x83, 0x88, 0x43, 0xE7, 0x83, 0x99, 0x43,
	0xE7, 0x84, 0xA1, 0x43, 0xE7, 0x85, 0x85, 0x43,
	0xE7, 0x85, 0x89, 0x43, 0xE7, 0x85, 0xAE, 0x43,
	// Bytes ec0 - eff
	0xE7, 0x86, 0x9C, 0x43, 0xE7, 0x87, 0x8E, 0x43,
	0xE7, 0x87, 0x90, 0x43, 0xE7, 0x88, 0x90, 0x43,
	0xE7, 0x88, 0x9B, 0x43, 0xE7, 0x88, 0xA8, 0x43,
	0xE7, 0x88, 0xAA, 0x43, 0xE7, 0x88, 0xAB, 0x43,
	0xE7, 0x88, 0xB5, 0x43, 0xE7, 0x88, 0xB6, 0x43,
	0xE7, 0x88, 0xBB, 0x43, 0xE7, 0x88, 0xBF, 0x43,
	0xE7, 0x89, 0x87, 0x43, 0xE7, 0x89, 0x90, 0x43,
	0xE7, 0x89, 0x99, 0x43, 0xE7, 0x89, 0x9B, 0x43,
	// Bytes f00 - f3f
	0xE7, 0x89, 0xA2, 0x43, 0xE7, 0x89, 0xB9, 0x43,
	0xE7, 0x8A, 0x80, 0x43, 0xE7, 0x8A, 0x95, 0x43,
	0xE7, 0x8A, 0xAC, 0x43, 0xE7, 0x8A, 0xAF, 0x43,
	0xE7, 0x8B, 0x80, 0x43, 0xE7, 0x8B, 0xBC, 0x43,
	0xE7, 0x8C, 0xAA, 0x43, 0xE7, 0x8D, 0xB5, 0x43,
	0xE7, 0x8D, 0xBA, 0x43, 0xE7, 0x8E, 0x84, 0x43,
	0xE7, 0x8E, 0x87, 0x43, 0xE7, 0x8E, 0x89, 0x43,
	0xE7, 0x8E, 0x8B, 0x43, 0xE7, 0x8E, 0xA5, 0x43,
	// Bytes f40 - f7f
	0xE7, 0x8E, 0xB2, 0x43, 0xE7, 0x8F, 0x9E, 0x43,
	0xE7, 0x90, 0x86, 0x43, 0xE7, 0x90, 0x89, 0x43,
	0xE7, 0x90, 0xA2, 0x43, 0xE7, 0x91, 0x87, 0x43,
	0xE7, 0x91, 0x9C, 0x43, 0xE7, 0x91, 0xA9, 0x43,
	0xE7, 0x91, 0xB1, 0x43, 0xE7, 0x92, 0x85, 0x43,
	0xE7, 0x92, 0x89, 0x43, 0xE7, 0x92, 0x98, 0x43,
	0xE7, 0x93, 0x8A, 0x43, 0xE7, 0x93, 0x9C, 0x43,
	0xE7, 0x93, 0xA6, 0x43, 0xE7, 0x94, 0x86, 0x43,
	// Bytes f80 - fbf
	0xE7, 0x94, 0x98, 0x43, 0xE7, 0x94, 0x9F, 0x43,
	0xE7, 0x94, 0xA4, 0x43, 0xE7, 0x94, 0xA8, 0x43,
	0xE7, 0x94, 0xB0, 0x43, 0xE7, 0x94, 0xB2, 0x43,
	0xE7, 0x94, 0xB3, 0x43, 0xE7, 0x94, 0xB7, 0x43,
	0xE7, 0x94, 0xBB, 0x43, 0xE7, 0x94, 0xBE, 0x43,
	0xE7, 0x95, 0x99, 0x43, 0xE7, 0x95, 0xA5, 0x43,
	0xE7, 0x95, 0xB0, 0x43, 0xE7, 0x96, 0x8B, 0x43,
	0xE7, 0x96, 0x92, 0x43, 0xE7, 0x97, 0xA2, 0x43,
	// Bytes fc0 - fff
	0xE7, 0x98, 0x90, 0x43, 0xE7, 0x98, 0x9D, 0x43,
	0xE7, 0x98, 0x9F, 0x43, 0xE7, 0x99, 0x82, 0x43,
	0xE7, 0x99, 0xA9, 0x43, 0xE7, 0x99, 0xB6, 0x43,
	0xE7, 0x99, 0xBD, 0x43, 0xE7, 0x9A, 0xAE, 0x43,
	0xE7, 0x9A, 0xBF, 0x43, 0xE7, 0x9B, 0x8A, 0x43,
	0xE7, 0x9B, 0x9B, 0x43, 0xE7, 0x9B, 0xA3, 0x43,
	0xE7, 0x9B, 0xA7, 0x43, 0xE7, 0x9B, 0xAE, 0x43,
	0xE7, 0x9B, 0xB4, 0x43, 0xE7, 0x9C, 0x81, 0x43,
	// Bytes 1000 - 103f
	0xE7, 0x9C, 0x9E, 0x43, 0xE7, 0x9C, 0x9F, 0x43,
	0xE7, 0x9D, 0x80, 0x43, 0xE7, 0x9D, 0x8A, 0x43,
	0xE7, 0x9E, 0x8B, 0x43, 0xE7, 0x9E, 0xA7, 0x43,
	0xE7, 0x9F, 0x9B, 0x43, 0xE7, 0x9F, 0xA2, 0x43,
	0xE7, 0x9F, 0xB3, 0x43, 0xE7, 0xA1, 0x8E, 0x43,
	0xE7, 0xA1, 0xAB, 0x43, 0xE7, 0xA2, 0x8C, 0x43,
	0xE7, 0xA2, 0x91, 0x43, 0xE7, 0xA3, 0x8A, 0x43,
	0xE7, 0xA3, 0x8C, 0x43, 0xE7, 0xA3, 0xBB, 0x43,
	// Bytes 1040 - 107f
	0xE7, 0xA4, 0xAA, 0x43, 0xE7, 0xA4, 0xBA, 0x43,
	0xE7, 0xA4, 0xBC, 0x43, 0xE7, 0xA4, 0xBE, 0x43,
	0xE7, 0xA5, 0x88, 0x43, 0xE7, 0xA5, 0x89, 0x43,
	0xE7, 0xA5, 0x90, 0x43, 0xE7, 0xA5, 0x96, 0x43,
	0xE7, 0xA5, 0x9D, 0x43, 0xE7, 0xA5, 0x9E, 0x43,
	0xE7, 0xA5, 0xA5, 0x43, 0xE7, 0xA5, 0xBF, 0x43,
	0xE7, 0xA6, 0x81, 0x43, 0xE7, 0xA6, 0x8D, 0x43,
	0xE7, 0xA6, 0x8E, 0x43, 0xE7, 0xA6, 0x8F, 0x43,
	// Bytes 1080 - 10bf
	0xE7, 0xA6, 0xAE, 0x43, 0xE7, 0xA6, 0xB8, 0x43,
	0xE7, 0xA6, 0xBE, 0x43, 0xE7, 0xA7, 0x8A, 0x43,
	0xE7, 0xA7, 0x98, 0x43, 0xE7, 0xA7, 0xAB, 0x43,
	0xE7, 0xA8, 0x9C, 0x43, 0xE7, 0xA9, 0x80, 0x43,
	0xE7, 0xA9, 0x8A, 0x43, 0xE7, 0xA9, 0x8F, 0x43,
	0xE7, 0xA9, 0xB4, 0x43, 0xE7, 0xA9, 0xBA, 0x43,
	0xE7, 0xAA, 0x81, 0x43, 0xE7, 0xAA, 0xB1, 0x43,
	0xE7, 0xAB, 0x8B, 0x43, 0xE7, 0xAB, 0xAE, 0x43,
	// Bytes 10c0 - 10ff
	0xE7, 0xAB, 0xB9, 0x43, 0xE7, 0xAC, 0xA0, 0x43,
	0xE7, 0xAE, 0x8F, 0x43, 0xE7, 0xAF, 0x80, 0x43,
	0xE7, 0xAF, 0x86, 0x43, 0xE7, 0xAF, 0x89, 0x43,
	0xE7, 0xB0, 0xBE, 0x43, 0xE7, 0xB1, 0xA0, 0x43,
	0xE7, 0xB1, 0xB3, 0x43, 0xE7, 0xB1, 0xBB, 0x43,
	0xE7, 0xB2, 0x92, 0x43, 0xE7, 0xB2, 0xBE, 0x43,
	0xE7, 0xB3, 0x92, 0x43, 0xE7, 0xB3, 0x96, 0x43,
	0xE7, 0xB3, 0xA3, 0x43, 0xE7, 0xB3, 0xA7, 0x43,
	// Bytes 1100 - 113f
	0xE7, 0xB3, 0xA8, 0x43, 0xE7, 0xB3, 0xB8, 0x43,
	0xE7, 0xB4, 0x80, 0x43, 0xE7, 0xB4, 0x90, 0x43,
	0xE7, 0xB4, 0xA2, 0x43, 0xE7, 0xB4, 0xAF, 0x43,
	0xE7, 0xB5, 0x82, 0x43, 0xE7, 0xB5, 0x9B, 0x43,
	0xE7, 0xB5, 0xA3, 0x43, 0xE7, 0xB6, 0xA0, 0x43,
	0xE7, 0xB6, 0xBE, 0x43, 0xE7, 0xB7, 0x87, 0x43,
	0xE7, 0xB7, 0xB4, 0x43, 0xE7, 0xB8, 0x82, 0x43,
	0xE7, 0xB8, 0x89, 0x43, 0xE7, 0xB8, 0xB7, 0x43,
	// Bytes 1140 - 117f
	0xE7, 0xB9, 0x81, 0x43, 0xE7, 0xB9, 0x85, 0x43,
	0xE7, 0xBC, 0xB6, 0x43, 0xE7, 0xBC, 0xBE, 0x43,
	0xE7, 0xBD, 0x91, 0x43, 0xE7, 0xBD, 0xB2, 0x43,
	0xE7, 0xBD, 0xB9, 0x43, 0xE7, 0xBD, 0xBA, 0x43,
	0xE7, 0xBE, 0x85, 0x43, 0xE7, 0xBE, 0x8A, 0x43,
	0xE7, 0xBE, 0x95, 0x43, 0xE7, 0xBE, 0x9A, 0x43,
	0xE7, 0xBE, 0xBD, 0x43, 0xE7, 0xBF, 0xBA, 0x43,
	0xE8, 0x80, 0x81, 0x43, 0xE8, 0x80, 0x85, 0x43,
	// Bytes 1180 - 11bf
	0xE8, 0x80, 0x8C, 0x43, 0xE8, 0x80, 0x92, 0x43,
	0xE8, 0x80, 0xB3, 0x43, 0xE8, 0x81, 0x86, 0x43,
	0xE8, 0x81, 0xA0, 0x43, 0xE8, 0x81, 0xAF, 0x43,
	0xE8, 0x81, 0xB0, 0x43, 0xE8, 0x81, 0xBE, 0x43,
	0xE8, 0x81, 0xBF, 0x43, 0xE8, 0x82, 0x89, 0x43,
	0xE8, 0x82, 0x8B, 0x43, 0xE8, 0x82, 0xAD, 0x43,
	0xE8, 0x82, 0xB2, 0x43, 0xE8, 0x84, 0x83, 0x43,
	0xE8, 0x84, 0xBE, 0x43, 0xE8, 0x87, 0x98, 0x43,
	// Bytes 11c0 - 11ff
	0xE8, 0x87, 0xA3, 0x43, 0xE8, 0x87, 0xA8, 0x43,
	0xE8, 0x87, 0xAA, 0x43, 0xE8, 0x87, 0xAD, 0x43,
	0xE8, 0x87, 0xB3, 0x43, 0xE8, 0x87, 0xBC, 0x43,
	0xE8, 0x88, 0x81, 0x43, 0xE8, 0x88, 0x84, 0x43,
	0xE8, 0x88, 0x8C, 0x43, 0xE8, 0x88, 0x98, 0x43,
	0xE8, 0x88, 0x9B, 0x43, 0xE8, 0x88, 0x9F, 0x43,
	0xE8, 0x89, 0xAE, 0x43, 0xE8, 0x89, 0xAF, 0x43,
	0xE8, 0x89, 0xB2, 0x43, 0xE8, 0x89, 0xB8, 0x43,
	// Bytes 1200 - 123f
	0xE8, 0x89, 0xB9, 0x43, 0xE8, 0x8A, 0x8B, 0x43,
	0xE8, 0x8A, 0x91, 0x43, 0xE8, 0x8A, 0x9D, 0x43,
	0xE8, 0x8A, 0xB1, 0x43, 0xE8, 0x8A, 0xB3, 0x43,
	0xE8, 0x8A, 0xBD, 0x43, 0xE8, 0x8B, 0xA5, 0x43,
	0xE8, 0x8B, 0xA6, 0x43, 0xE8, 0x8C, 0x9D, 0x43,
	0xE8, 0x8C, 0xA3, 0x43, 0xE8, 0x8C, 0xB6, 0x43,
	0xE8, 0x8D, 0x92, 0x43, 0xE8, 0x8D, 0x93, 0x43,
	0xE8, 0x8D, 0xA3, 0x43, 0xE8, 0x8E, 0xAD, 0x43,
	// Bytes 1240 - 127f
	0xE8, 0x8E, 0xBD, 0x43, 0xE8, 0x8F, 0x89, 0x43,
	0xE8, 0x8F, 0x8A, 0x43, 0xE8, 0x8F, 0x8C, 0x43,
	0xE8, 0x8F, 0x9C, 0x43, 0xE8, 0x8F, 0xA7, 0x43,
	0xE8, 0x8F, 0xAF, 0x43, 0xE8, 0x8F, 0xB1, 0x43,
	0xE8, 0x90, 0xBD, 0x43, 0xE8, 0x91, 0x89, 0x43,
	0xE8, 0x91, 0x97, 0x43, 0xE8, 0x93, 0xAE, 0x43,
	0xE8, 0x93, 0xB1, 0x43, 0xE8, 0x93, 0xB3, 0x43,
	0xE8, 0x93, 0xBC, 0x43, 0xE8, 0x94, 0x96, 0x43,
	// Bytes 1280 - 12bf
	0xE8, 0x95, 0xA4, 0x43, 0xE8, 0x97, 0x8D, 0x43,
	0xE8, 0x97, 0xBA, 0x43, 0xE8, 0x98, 0x86, 0x43,
	0xE8, 0x98, 0x92, 0x43, 0xE8, 0x98, 0xAD, 0x43,
	0xE8, 0x98, 0xBF, 0x43, 0xE8, 0x99, 0x8D, 0x43,
	0xE8, 0x99, 0x90, 0x43, 0xE8, 0x99, 0x9C, 0x43,
	0xE8, 0x99, 0xA7, 0x43, 0xE8, 0x99, 0xA9, 0x43,
	0xE8, 0x99, 0xAB, 0x43, 0xE8, 0x9A, 0x88, 0x43,
	0xE8, 0x9A, 0xA9, 0x43, 0xE8, 0x9B, 0xA2, 0x43,
	// Bytes 12c0 - 12ff
	0xE8, 0x9C, 0x8E, 0x43, 0xE8, 0x9C, 0xA8, 0x43,
	0xE8, 0x9D, 0xAB, 0x43, 0xE8, 0x9D, 0xB9, 0x43,
	0xE8, 0x9E, 0x86, 0x43, 0xE8, 0x9E, 0xBA, 0x43,
	0xE8, 0x9F, 0xA1, 0x43, 0xE8, 0xA0, 0x81, 0x43,
	0xE8, 0xA0, 0x9F, 0x43, 0xE8, 0xA1, 0x80, 0x43,
	0xE8, 0xA1, 0x8C, 0x43, 0xE8, 0xA1, 0xA0, 0x43,
	0xE8, 0xA1, 0xA3, 0x43, 0xE8, 0xA3, 0x82, 0x43,
	0xE8, 0xA3, 0x8F, 0x43, 0xE8, 0xA3, 0x97, 0x43,
	// Bytes 1300 - 133f
	0xE8, 0xA3, 0x9E, 0x43, 0xE8, 0xA3, 0xA1, 0x43,
	0xE8, 0xA3, 0xB8, 0x43, 0xE8, 0xA3, 0xBA, 0x43,
	0xE8, 0xA4, 0x90, 0x43, 0xE8, 0xA5, 0x81, 0x43,
	0xE8, 0xA5, 0xA4, 0x43, 0xE8, 0xA5, 0xBE, 0x43,
	0xE8, 0xA6, 0x86, 0x43, 0xE8, 0xA6, 0x8B, 0x43,
	0xE8, 0xA6, 0x96, 0x43, 0xE8, 0xA7, 0x92, 0x43,
	0xE8, 0xA7, 0xA3, 0x43, 0xE8, 0xA8, 0x80, 0x43,
	0xE8, 0xAA, 0xA0, 0x43, 0xE8, 0xAA, 0xAA, 0x43,
	// Bytes 1340 - 137f
	0xE8, 0xAA, 0xBF, 0x43, 0xE8, 0xAB, 0x8B, 0x43,
	0xE8, 0xAB, 0x92, 0x43, 0xE8, 0xAB, 0x96, 0x43,
	0xE8, 0xAB, 0xAD, 0x43, 0xE8, 0xAB, 0xB8, 0x43,
	0xE8, 0xAB, 0xBE, 0x43, 0xE8, 0xAC, 0x81, 0x43,
	0xE8, 0xAC, 0xB9, 0x43, 0xE8, 0xAD, 0x98, 0x43,
	0xE8, 0xAE, 0x80, 0x43, 0xE8, 0xAE, 0x8A, 0x43,
	0xE8, 0xB0, 0xB7, 0x43, 0xE8, 0xB1, 0x86, 0x43,
	0xE8, 0xB1, 0x88, 0x43, 0xE8, 0xB1, 0x95, 0x43,
	// Bytes 1380 - 13bf
	0xE8, 0xB1, 0xB8, 0x43, 0xE8, 0xB2, 0x9D, 0x43,
	0xE8, 0xB2, 0xA1, 0x43, 0xE8, 0xB2, 0xA9, 0x43,
	0xE8, 0xB2, 0xAB, 0x43, 0xE8, 0xB3, 0x81, 0x43,
	0xE8, 0xB3, 0x82, 0x43, 0xE8, 0xB3, 0x87, 0x43,
	0xE8, 0xB3, 0x88, 0x43, 0xE8, 0xB3, 0x93, 0x43,
	0xE8, 0xB4, 0x88, 0x43, 0xE8, 0xB4, 0x9B, 0x43,
	0xE8, 0xB5, 0xA4, 0x43, 0xE8, 0xB5, 0xB0, 0x43,
	0xE8, 0xB5, 0xB7, 0x43, 0xE8, 0xB6, 0xB3, 0x43,
	// Bytes 13c0 - 13ff
	0xE8, 0xB6, 0xBC, 0x43, 0xE8, 0xB7, 0x8B, 0x43,
	0xE8, 0xB7, 0xAF, 0x43, 0xE8, 0xB7, 0xB0, 0x43,
	0xE8, 0xBA, 0xAB, 0x43, 0xE8, 0xBB, 0x8A, 0x43,
	0xE8, 0xBB, 0x94, 0x43, 0xE8, 0xBC, 0xA6, 0x43,
	0xE8, 0xBC, 0xAA, 0x43, 0xE8, 0xBC, 0xB8, 0x43,
	0xE8, 0xBC, 0xBB, 0x43, 0xE8, 0xBD, 0xA2, 0x43,
	0xE8, 0xBE, 0x9B, 0x43, 0xE8, 0xBE, 0x9E, 0x43,
	0xE8, 0xBE, 0xB0, 0x43, 0xE8, 0xBE, 0xB5, 0x43,
	// Bytes 1400 - 143f
	0xE8, 0xBE, 0xB6, 0x43, 0xE9, 0x80, 0xA3, 0x43,
	0xE9, 0x80, 0xB8, 0x43, 0xE9, 0x81, 0x8A, 0x43,
	0xE9, 0x81, 0xA9, 0x43, 0xE9, 0x81, 0xB2, 0x43,
	0xE9, 0x81, 0xBC, 0x43, 0xE9, 0x82, 0x8F, 0x43,
	0xE9, 0x82, 0x91, 0x43, 0xE9, 0x82, 0x94, 0x43,
	0xE9, 0x83, 0x8E, 0x43, 0xE9, 0x83, 0x9E, 0x43,
	0xE9, 0x83, 0xB1, 0x43, 0xE9, 0x83, 0xBD, 0x43,
	0xE9, 0x84, 0x91, 0x43, 0xE9, 0x84, 0x9B, 0x43,
	// Bytes 1440 - 147f
	0xE9, 0x85, 0x89, 0x43, 0xE9, 0x85, 0x8D, 0x43,
	0xE9, 0x85, 0xAA, 0x43, 0xE9, 0x86, 0x99, 0x43,
	0xE9, 0x86, 0xB4, 0x43, 0xE9, 0x87, 0x86, 0x43,
	0xE9, 0x87, 0x8C, 0x43, 0xE9, 0x87, 0x8F, 0x43,
	0xE9, 0x87, 0x91, 0x43, 0xE9, 0x88, 0xB4, 0x43,
	0xE9, 0x88, 0xB8, 0x43, 0xE9, 0x89, 0xB6, 0x43,
	0xE9, 0x89, 0xBC, 0x43, 0xE9, 0x8B, 0x97, 0x43,
	0xE9, 0x8B, 0x98, 0x43, 0xE9, 0x8C, 0x84, 0x43,
	// Bytes 1480 - 14bf
	0xE9, 0x8D, 0x8A, 0x43, 0xE9, 0x8F, 0xB9, 0x43,
	0xE9, 0x90, 0x95, 0x43, 0xE9, 0x95, 0xB7, 0x43,
	0xE9, 0x96, 0x80, 0x43, 0xE9, 0x96, 0x8B, 0x43,
	0xE9, 0x96, 0xAD, 0x43, 0xE9, 0x96, 0xB7, 0x43,
	0xE9, 0x98, 0x9C, 0x43, 0xE9, 0x98, 0xAE, 0x43,
	0xE9, 0x99, 0x8B, 0x43, 0xE9, 0x99, 0x8D, 0x43,
	0xE9, 0x99, 0xB5, 0x43, 0xE9, 0x99, 0xB8, 0x43,
	0xE9, 0x99, 0xBC, 0x43, 0xE9, 0x9A, 0x86, 0x43,
	// Bytes 14c0 - 14ff
	0xE9, 0x9A, 0xA3, 0x43, 0xE9, 0x9A, 0xB6, 0x43,
	0xE9, 0x9A, 0xB7, 0x43, 0xE9, 0x9A, 0xB8, 0x43,
	0xE9, 0x9A, 0xB9, 0x43, 0xE9, 0x9B, 0x83, 0x43,
	0xE9, 0x9B, 0xA2, 0x43, 0xE9, 0x9B, 0xA3, 0x43,
	0xE9, 0x9B, 0xA8, 0x43, 0xE9, 0x9B, 0xB6, 0x43,
	0xE9, 0x9B, 0xB7, 0x43, 0xE9, 0x9C, 0xA3, 0x43,
	0xE9, 0x9C, 0xB2, 0x43, 0xE9, 0x9D, 0x88, 0x43,
	0xE9, 0x9D, 0x91, 0x43, 0xE9, 0x9D, 0x96, 0x43,
	// Bytes 1500 - 153f
	0xE9, 0x9D, 0x9E, 0x43, 0xE9, 0x9D, 0xA2, 0x43,
	0xE9, 0x9D, 0xA9, 0x43, 0xE9, 0x9F, 0x8B, 0x43,
	0xE9, 0x9F, 0x9B, 0x43, 0xE9, 0x9F, 0xA0, 0x43,
	0xE9, 0x9F, 0xAD, 0x43, 0xE9, 0x9F, 0xB3, 0x43,
	0xE9, 0x9F, 0xBF, 0x43, 0xE9, 0xA0, 0x81, 0x43,
	0xE9, 0xA0, 0x85, 0x43, 0xE9, 0xA0, 0x8B, 0x43,
	0xE9, 0xA0, 0x98, 0x43, 0xE9, 0xA0, 0xA9, 0x43,
	0xE9, 0xA0, 0xBB, 0x43, 0xE9, 0xA1, 0x9E, 0x43,
	// Bytes 1540 - 157f
	0xE9, 0xA2, 0xA8, 0x43, 0xE9, 0xA3, 0x9B, 0x43,
	0xE9, 0xA3, 0x9F, 0x43, 0xE9, 0xA3, 0xA2, 0x43,
	0xE9, 0xA3, 0xAF, 0x43, 0xE9, 0xA3, 0xBC, 0x43,
	0xE9, 0xA4, 0xA8, 0x43, 0xE9, 0xA4, 0xA9, 0x43,
	0xE9, 0xA6, 0x96, 0x43, 0xE9, 0xA6, 0x99, 0x43,
	0xE9, 0xA6, 0xA7, 0x43, 0xE9, 0xA6, 0xAC, 0x43,
	0xE9, 0xA7, 0x82, 0x43, 0xE9, 0xA7, 0xB1, 0x43,
	0xE9, 0xA7, 0xBE, 0x43, 0xE9, 0xA9, 0xAA, 0x43,
	// Bytes 1580 - 15bf
	0xE9, 0xAA, 0xA8, 0x43, 0xE9, 0xAB, 0x98, 0x43,
	0xE9, 0xAB, 0x9F, 0x43, 0xE9, 0xAC, 0x92, 0x43,
	0xE9, 0xAC, 0xA5, 0x43, 0xE9, 0xAC, 0xAF, 0x43,
	0xE9, 0xAC, 0xB2, 0x43, 0xE9, 0xAC, 0xBC, 0x43,
	0xE9, 0xAD, 0x9A, 0x43, 0xE9, 0xAD, 0xAF, 0x43,
	0xE9, 0xB1, 0x80, 0x43, 0xE9, 0xB1, 0x97, 0x43,
	0xE9, 0xB3, 0xA5, 0x43, 0xE9, 0xB3, 0xBD, 0x43,
	0xE9, 0xB5, 0xA7, 0x43, 0xE9, 0xB6, 0xB4, 0x43,
	// Bytes 15c0 - 15ff
	0xE9, 0xB7, 0xBA, 0x43, 0xE9, 0xB8, 0x9E, 0x43,
	0xE9, 0xB9, 0xB5, 0x43, 0xE9, 0xB9, 0xBF, 0x43,
	0xE9, 0xBA, 0x97, 0x43, 0xE9, 0xBA, 0x9F, 0x43,
	0xE9, 0xBA, 0xA5, 0x43, 0xE9, 0xBA, 0xBB, 0x43,
	0xE9, 0xBB, 0x83, 0x43, 0xE9, 0xBB, 0x8D, 0x43,
	0xE9, 0xBB, 0x8E, 0x43, 0xE9, 0xBB, 0x91, 0x43,
	0xE9, 0xBB, 0xB9, 0x43, 0xE9, 0xBB, 0xBD, 0x43,
	0xE9, 0xBB, 0xBE, 0x43, 0xE9, 0xBC, 0x85, 0x43,
	// Bytes 1600 - 163f
	0xE9, 0xBC, 0x8E, 0x43, 0xE9, 0xBC, 0x8F, 0x43,
	0xE9, 0xBC, 0x93, 0x43, 0xE9, 0xBC, 0x96, 0x43,
	0xE9, 0xBC, 0xA0, 0x43, 0xE9, 0xBC, 0xBB, 0x43,
	0xE9, 0xBD, 0x83, 0x43, 0xE9, 0xBD, 0x8A, 0x43,
	0xE9, 0xBD, 0x92, 0x43, 0xE9, 0xBE, 0x8D, 0x43,
	0xE9, 0xBE, 0x8E, 0x43, 0xE9, 0xBE, 0x9C, 0x43,
	0xE9, 0xBE, 0x9F, 0x43, 0xE9, 0xBE, 0xA0, 0x43,
	0xEA, 0x9C, 0xA7, 0x43, 0xEA, 0x9D, 0xAF, 0x43,
	// Bytes 1640 - 167f
	0xEA, 0xAC, 0xB7, 0x43, 0xEA, 0xAD, 0x92, 0x44,
	0xF0, 0xA0, 0x84, 0xA2, 0x44, 0xF0, 0xA0, 0x94,
	0x9C, 0x44, 0xF0, 0xA0, 0x94, 0xA5, 0x44, 0xF0,
	0xA0, 0x95, 0x8B, 0x44, 0xF0, 0xA0, 0x98, 0xBA,
	0x44, 0xF0, 0xA0, 0xA0, 0x84, 0x44, 0xF0, 0xA0,
	0xA3, 0x9E, 0x44, 0xF0, 0xA0, 0xA8, 0xAC, 0x44,
	0xF0, 0xA0, 0xAD, 0xA3, 0x44, 0xF0, 0xA1, 0x93,
	0xA4, 0x44, 0xF0, 0xA1, 0x9A, 0xA8, 0x44, 0xF0,
	// Bytes 1680 - 16bf
	0xA1, 0x9B, 0xAA, 0x44, 0xF0, 0xA1, 0xA7, 0x88,
	0x44, 0xF0, 0xA1, 0xAC, 0x98, 0x44, 0xF0, 0xA1,
	0xB4, 0x8B, 0x44, 0xF0, 0xA1, 0xB7, 0xA4, 0x44,
	0xF0, 0xA1, 0xB7, 0xA6, 0x44, 0xF0, 0xA2, 0x86,
	0x83, 0x44, 0xF0, 0xA2, 0x86, 0x9F, 0x44, 0xF0,
	0xA2, 0x8C, 0xB1, 0x44, 0xF0, 0xA2, 0x9B, 0x94,
	0x44, 0xF0, 0xA2, 0xA1, 0x84, 0x44, 0xF0, 0xA2,
	0xA1, 0x8A, 0x44, 0xF0, 0xA2, 0xAC, 0x8C, 0x44,
	// Bytes 16c0 - 16ff
	0xF0, 0xA2, 0xAF, 0xB1, 0x44, 0xF0, 0xA3, 0x80,
	0x8A, 0x44, 0xF0, 0xA3, 0x8A, 0xB8, 0x44, 0xF0,
	0xA3, 0x8D, 0x9F, 0x44, 0xF0, 0xA3, 0x8E, 0x93,
	0x44, 0xF0, 0xA3, 0x8E, 0x9C, 0x44, 0xF0, 0xA3,
	0x8F, 0x83, 0x44, 0xF0, 0xA3, 0x8F, 0x95, 0x44,
	0xF0, 0xA3, 0x91, 0xAD, 0x44, 0xF0, 0xA3, 0x9A,
	0xA3, 0x44, 0xF0, 0xA3, 0xA2, 0xA7, 0x44, 0xF0,
	0xA3, 0xAA, 0x8D, 0x44, 0xF0, 0xA3, 0xAB, 0xBA,
	// Bytes 1700 - 173f
	0x44, 0xF0, 0xA3, 0xB2, 0xBC, 0x44, 0xF0, 0xA3,
	0xB4, 0x9E, 0x44, 0xF0, 0xA3, 0xBB, 0x91, 0x44,
	0xF0, 0xA3, 0xBD, 0x9E, 0x44, 0xF0, 0xA3, 0xBE,
	0x8E, 0x44, 0xF0, 0xA4, 0x89, 0xA3, 0x44, 0xF0,
	0xA4, 0x8B, 0xAE, 0x44, 0xF0, 0xA4, 0x8E, 0xAB,
	0x44, 0xF0, 0xA4, 0x98, 0x88, 0x44, 0xF0, 0xA4,
	0x9C, 0xB5, 0x44, 0xF0, 0xA4, 0xA0, 0x94, 0x44,
	0xF0, 0xA4, 0xB0, 0xB6, 0x44, 0xF0, 0xA4, 0xB2,
	// Bytes 1740 - 177f
	0x92, 0x44, 0xF0, 0xA4, 0xBE, 0xA1, 0x44, 0xF0,
	0xA4, 0xBE, 0xB8, 0x44, 0xF0, 0xA5, 0x81, 0x84,
	0x44, 0xF0, 0xA5, 0x83, 0xB2, 0x44, 0xF0, 0xA5,
	0x83, 0xB3, 0x44, 0xF0, 0xA5, 0x84, 0x99, 0x44,
	0xF0, 0xA5, 0x84, 0xB3, 0x44, 0xF0, 0xA5, 0x89,
	0x89, 0x44, 0xF0, 0xA5, 0x90, 0x9D, 0x44, 0xF0,
	0xA5, 0x98, 0xA6, 0x44, 0xF0, 0xA5, 0x9A, 0x9A,
	0x44, 0xF0, 0xA5, 0x9B, 0x85, 0x44, 0xF0, 0xA5,
	// Bytes 1780 - 17bf
	0xA5, 0xBC, 0x44, 0xF0, 0xA5, 0xAA, 0xA7, 0x44,
	0xF0, 0xA5, 0xAE, 0xAB, 0x44, 0xF0, 0xA5, 0xB2,
	0x80, 0x44, 0xF0, 0xA5, 0xB3, 0x90, 0x44, 0xF0,
	0xA5, 0xBE, 0x86, 0x44, 0xF0, 0xA6, 0x87, 0x9A,
	0x44, 0xF0, 0xA6, 0x88, 0xA8, 0x44, 0xF0, 0xA6,
	0x89, 0x87, 0x44, 0xF0, 0xA6, 0x8B, 0x99, 0x44,
	0xF0, 0xA6, 0x8C, 0xBE, 0x44, 0xF0, 0xA6, 0x93,
	0x9A, 0x44, 0xF0, 0xA6, 0x94, 0xA3, 0x44, 0xF0,
	// Bytes 17c0 - 17ff
	0xA6, 0x96, 0xA8, 0x44, 0xF0, 0xA6, 0x9E, 0xA7,
	0x44, 0xF0, 0xA6, 0x9E, 0xB5, 0x44, 0xF0, 0xA6,
	0xAC, 0xBC, 0x44, 0xF0, 0xA6, 0xB0, 0xB6, 0x44,
	0xF0, 0xA6, 0xB3, 0x95, 0x44, 0xF0, 0xA6, 0xB5,
	0xAB, 0x44, 0xF0, 0xA6, 0xBC, 0xAC, 0x44, 0xF0,
	0xA6, 0xBE, 0xB1, 0x44, 0xF0, 0xA7, 0x83, 0x92,
	0x44, 0xF0, 0xA7, 0x8F, 0x8A, 0x44, 0xF0, 0xA7,
	0x99, 0xA7, 0x44, 0xF0, 0xA7, 0xA2, 0xAE, 0x44,
	// Bytes 1800 - 183f
	0xF0, 0xA7, 0xA5, 0xA6, 0x44, 0xF0, 0xA7, 0xB2,
	0xA8, 0x44, 0xF0, 0xA7, 0xBB, 0x93, 0x44, 0xF0,
	0xA7, 0xBC, 0xAF, 0x44, 0xF0, 0xA8, 0x97, 0x92,
	0x44, 0xF0, 0xA8, 0x97, 0xAD, 0x44, 0xF0, 0xA8,
	0x9C, 0xAE, 0x44, 0xF0, 0xA8, 0xAF, 0xBA, 0x44,
	0xF0, 0xA8, 0xB5, 0xB7, 0x44, 0xF0, 0xA9, 0x85,
	0x85, 0x44, 0xF0, 0xA9, 0x87, 0x9F, 0x44, 0xF0,
	0xA9, 0x88, 0x9A, 0x44, 0xF0, 0xA9, 0x90, 0x8A,
	// Bytes 1840 - 187f
	0x44, 0xF0, 0xA9, 0x92, 0x96, 0x44, 0xF0, 0xA9,
	0x96, 0xB6, 0x44, 0xF0, 0xA9, 0xAC, 0xB0, 0x44,
	0xF0, 0xAA, 0x83, 0x8E, 0x44, 0xF0, 0xAA, 0x84,
	0x85, 0x44, 0xF0, 0xAA, 0x88, 0x8E, 0x44, 0xF0,
	0xAA, 0x8A, 0x91, 0x44, 0xF0, 0xAA, 0x8E, 0x92,
	0x44, 0xF0, 0xAA, 0x98, 0x80, 0x42, 0x21, 0x21,
	0x42, 0x21, 0x3F, 0x42, 0x2E, 0x2E, 0x42, 0x30,
	0x2C, 0x42, 0x30, 0x2E, 0x42, 0x31, 0x2C, 0x42,
	// Bytes 1880 - 18bf
	0x31, 0x2E, 0x42, 0x31, 0x30, 0x42, 0x31, 0x31,
	0x42, 0x31, 0x32, 0x42, 0x31, 0x33, 0x42, 0x31,
	0x34, 0x42, 0x31, 0x35, 0x42, 0x31, 0x36, 0x42,
	0x31, 0x37, 0x42, 0x31, 0x38, 0x42, 0x31, 0x39,
	0x42, 0x32, 0x2C, 0x42, 0x32, 0x2E, 0x42, 0x32,
	0x30, 0x42, 0x32, 0x31, 0x42, 0x32, 0x32, 0x42,
	0x32, 0x33, 0x42, 0x32, 0x34, 0x42, 0x32, 0x35,
	0x42, 0x32, 0x36, 0x42, 0x32, 0x37, 0x42, 0x32,
	// Bytes 18c0 - 18ff
	0x38, 0x42, 0x32, 0x39, 0x42, 0x33, 0x2C, 0x42,
	0x33, 0x2E, 0x42, 0x33, 0x30, 0x42, 0x33, 0x31,
	0x42, 0x33, 0x32, 0x42, 0x33, 0x33, 0x42, 0x33,
	0x34, 0x42, 0x33, 0x35, 0x42, 0x33, 0x36, 0x42,
	0x33, 0x37, 0x42, 0x33, 0x38, 0x42, 0x33, 0x39,
	0x42, 0x34, 0x2C, 0x42, 0x34, 0x2E, 0x42, 0x34,
	0x30, 0x42, 0x34, 0x31, 0x42, 0x34, 0x32, 0x42,
	0x34, 0x33, 0x42, 0x34, 0x34, 0x42, 0x34, 0x35,
	// Bytes 1900 - 193f
	0x42, 0x34, 0x36, 0x42, 0x34, 0x37, 0x42, 0x34,
	0x38, 0x42, 0x34, 0x39, 0x42, 0x35, 0x2C, 0x42,
	0x35, 0x2E, 0x42, 0x35, 0x30, 0x42, 0x36, 0x2C,
	0x42, 0x36, 0x2E, 0x42, 0x37, 0x2C, 0x42, 0x37,
	0x2E, 0x42, 0x38, 0x2C, 0x42, 0x38, 0x2E, 0x42,
	0x39, 0x2C, 0x42, 0x39, 0x2E, 0x42, 0x3D, 0x3D,
	0x42, 0x3F, 0x21, 0x42, 0x3F, 0x3F, 0x42, 0x41,
	0x55, 0x42, 0x42, 0x71, 0x42, 0x43, 0x44, 0x42,
	// Bytes 1940 - 197f
	0x44, 0x4A, 0x42, 0x44, 0x5A, 0x42, 0x44, 0x7A,
	0x42, 0x47, 0x42, 0x42, 0x47, 0x79, 0x42, 0x48,
	0x50, 0x42, 0x48, 0x56, 0x42, 0x48, 0x67, 0x42,
	0x48, 0x7A, 0x42, 0x49, 0x49, 0x42, 0x49, 0x4A,
	0x42, 0x49, 0x55, 0x42, 0x49, 0x56, 0x42, 0x49,
	0x58, 0x42, 0x4B, 0x42, 0x42, 0x4B, 0x4B, 0x42,
	0x4B, 0x4D, 0x42, 0x4C, 0x4A, 0x42, 0x4C, 0x6A,
	0x42, 0x4D, 0x42, 0x42, 0x4D, 0x43, 0x42, 0x4D,
	// Bytes 1980 - 19bf
	0x44, 0x42, 0x4D, 0x52, 0x42, 0x4D, 0x56, 0x42,
	0x4D, 0x57, 0x42, 0x4E, 0x4A, 0x42, 0x4E, 0x6A,
	0x42, 0x4E, 0x6F, 0x42, 0x50, 0x48, 0x42, 0x50,
	0x52, 0x42, 0x50, 0x61, 0x42, 0x52, 0x73, 0x42,
	0x53, 0x44, 0x42, 0x53, 0x4D, 0x42, 0x53, 0x53,
	0x42, 0x53, 0x76, 0x42, 0x54, 0x4D, 0x42, 0x56,
	0x49, 0x42, 0x57, 0x43, 0x42, 0x57, 0x5A, 0x42,
	0x57, 0x62, 0x42, 0x58, 0x49, 0x42, 0x63, 0x63,
	// Bytes 19c0 - 19ff
	0x42, 0x63, 0x64, 0x42, 0x63, 0x6D, 0x42, 0x64,
	0x42, 0x42, 0x64, 0x61, 0x42, 0x64, 0x6C, 0x42,
	0x64, 0x6D, 0x42, 0x64, 0x7A, 0x42, 0x65, 0x56,
	0x42, 0x66, 0x66, 0x42, 0x66, 0x69, 0x42, 0x66,
	0x6C, 0x42, 0x66, 0x6D, 0x42, 0x68, 0x61, 0x42,
	0x69, 0x69, 0x42, 0x69, 0x6A, 0x42, 0x69, 0x6E,
	0x42, 0x69, 0x76, 0x42, 0x69, 0x78, 0x42, 0x6B,
	0x41, 0x42, 0x6B, 0x56, 0x42, 0x6B, 0x57, 0x42,
	// Bytes 1a00 - 1a3f
	0x6B, 0x67, 0x42, 0x6B, 0x6C, 0x42, 0x6B, 0x6D,
	0x42, 0x6B, 0x74, 0x42, 0x6C, 0x6A, 0x42, 0x6C,
	0x6D, 0x42, 0x6C, 0x6E, 0x42, 0x6C, 0x78, 0x42,
	0x6D, 0x32, 0x42, 0x6D, 0x33, 0x42, 0x6D, 0x41,
	0x42, 0x6D, 0x56, 0x42, 0x6D, 0x57, 0x42, 0x6D,
	0x62, 0x42, 0x6D, 0x67, 0x42, 0x6D, 0x6C, 0x42,
	0x6D, 0x6D, 0x42, 0x6D, 0x73, 0x42, 0x6E, 0x41,
	0x42, 0x6E, 0x46, 0x42, 0x6E, 0x56, 0x42, 0x6E,
	// Bytes 1a40 - 1a7f
	0x57, 0x42, 0x6E, 0x6A, 0x42, 0x6E, 0x6D, 0x42,
	0x6E, 0x73, 0x42, 0x6F, 0x56, 0x42, 0x70, 0x41,
	0x42, 0x70, 0x46, 0x42, 0x70, 0x56, 0x42, 0x70,
	0x57, 0x42, 0x70, 0x63, 0x42, 0x70, 0x73, 0x42,
	0x73, 0x72, 0x42, 0x73, 0x74, 0x42, 0x76, 0x69,
	0x42, 0x78, 0x69, 0x43, 0x28, 0x31, 0x29, 0x43,
	0x28, 0x32, 0x29, 0x43, 0x28, 0x33, 0x29, 0x43,
	0x28, 0x34, 0x29, 0x43, 0x28, 0x35, 0x29, 0x43,
	// Bytes 1a80 - 1abf
	0x28, 0x36, 0x29, 0x43, 0x28, 0x37, 0x29, 0x43,
	0x28, 0x38, 0x29, 0x43, 0x28, 0x39, 0x29, 0x43,
	0x28, 0x41, 0x29, 0x43, 0x28, 0x42, 0x29, 0x43,
	0x28, 0x43, 0x29, 0x43, 0x28, 0x44, 0x29, 0x43,
	0x28, 0x45, 0x29, 0x43, 0x28, 0x46, 0x29, 0x43,
	0x28, 0x47, 0x29, 0x43, 0x28, 0x48, 0x29, 0x43,
	0x28, 0x49, 0x29, 0x43, 0x28, 0x4A, 0x29, 0x43,
	0x28, 0x4B, 0x29, 0x43, 0x28, 0x4C, 0x29, 0x43,
	// Bytes 1ac0 - 1aff
	0x28, 0x4D, 0x29, 0x43, 0x28, 0x4E, 0x29, 0x43,
	0x28, 0x4F, 0x29, 0x43, 0x28, 0x50, 0x29, 0x43,
	0x28, 0x51, 0x29, 0x43, 0x28, 0x52, 0x29, 0x43,
	0x28, 0x53, 0x29, 0x43, 0x28, 0x54, 0x29, 0x43,
	0x28, 0x55, 0x29, 0x43, 0x28, 0x56, 0x29, 0x43,
	0x28, 0x57, 0x29, 0x43, 0x28, 0x58, 0x29, 0x43,
	0x28, 0x59, 0x29, 0x43, 0x28, 0x5A, 0x29, 0x43,
	0x28, 0x61, 0x29, 0x43, 0x28, 0x62, 0x29, 0x43,
	// Bytes 1b00 - 1b3f
	0x28, 0x63, 0x29, 0x43, 0x28, 0x64, 0x29, 0x43,
	0x28, 0x65, 0x29, 0x43, 0x28, 0x66, 0x29, 0x43,
	0x28, 0x67, 0x29, 0x43, 0x28, 0x68, 0x29, 0x43,
	0x28, 0x69, 0x29, 0x43, 0x28, 0x6A, 0x29, 0x43,
	0x28, 0x6B, 0x29, 0x43, 0x28, 0x6C, 0x29, 0x43,
	0x28, 0x6D, 0x29, 0x43, 0x28, 0x6E, 0x29, 0x43,
	0x28, 0x6F, 0x29, 0x43, 0x28, 0x70, 0x29, 0x43,
	0x28, 0x71, 0x29, 0x43, 0x28, 0x72, 0x29, 0x43,
	// Bytes 1b40 - 1b7f
	0x28, 0x73, 0x29, 0x43, 0x28, 0x74, 0x29, 0x43,
	0x28, 0x75, 0x29, 0x43, 0x28, 0x76, 0x29, 0x43,
	0x28, 0x77, 0x29, 0x43, 0x28, 0x78, 0x29, 0x43,
	0x28, 0x79, 0x29, 0x43, 0x28, 0x7A, 0x29, 0x43,
	0x2E, 0x2E, 0x2E, 0x43, 0x31, 0x30, 0x2E, 0x43,
	0x31, 0x31, 0x2E, 0x43, 0x31, 0x32, 0x2E, 0x43,
	0x31, 0x33, 0x2E, 0x43, 0x31, 0x34, 0x2E, 0x43,
	0x31, 0x35, 0x2E, 0x43, 0x31, 0x36, 0x2E, 0x43,
	// Bytes 1b80 - 1bbf
	0x31, 0x37, 0x2E, 0x43, 0x31, 0x38, 0x2E, 0x43,
	0x31, 0x39, 0x2E, 0x43, 0x32, 0x30, 0x2E, 0x43,
	0x3A, 0x3A, 0x3D, 0x43, 0x3D, 0x3D, 0x3D, 0x43,
	0x43, 0x6F, 0x2E, 0x43, 0x46, 0x41, 0x58, 0x43,
	0x47, 0x48, 0x7A, 0x43, 0x47, 0x50, 0x61, 0x43,
	0x49, 0x49, 0x49, 0x43, 0x4C, 0x54, 0x44, 0x43,
	0x4C, 0xC2, 0xB7, 0x43, 0x4D, 0x48, 0x7A, 0x43,
	0x4D, 0x50, 0x61, 0x43, 0x4D, 0xCE, 0xA9, 0x43,
	// Bytes 1bc0 - 1bff
	0x50, 0x50, 0x4D, 0x43, 0x50, 0x50, 0x56, 0x43,
	0x50, 0x54, 0x45, 0x43, 0x54, 0x45, 0x4C, 0x43,
	0x54, 0x48, 0x7A, 0x43, 0x56, 0x49, 0x49, 0x43,
	0x58, 0x49, 0x49, 0x43, 0x61, 0x2F, 0x63, 0x43,
	0x61, 0x2F, 0x73, 0x43, 0x61, 0xCA, 0xBE, 0x43,
	0x62, 0x61, 0x72, 0x43, 0x63, 0x2F, 0x6F, 0x43,
	0x63, 0x2F, 0x75, 0x43, 0x63, 0x61, 0x6C, 0x43,
	0x63, 0x6D, 0x32, 0x43, 0x63, 0x6D, 0x33, 0x43,
	// Bytes 1c00 - 1c3f
	0x64, 0x6D, 0x32, 0x43, 0x64, 0x6D, 0x33, 0x43,
	0x65, 0x72, 0x67, 0x43, 0x66, 0x66, 0x69, 0x43,
	0x66, 0x66, 0x6C, 0x43, 0x67, 0x61, 0x6C, 0x43,
	0x68, 0x50, 0x61, 0x43, 0x69, 0x69, 0x69, 0x43,
	0x6B, 0x48, 0x7A, 0x43, 0x6B, 0x50, 0x61, 0x43,
	0x6B, 0x6D, 0x32, 0x43, 0x6B, 0x6D, 0x33, 0x43,
	0x6B, 0xCE, 0xA9, 0x43, 0x6C, 0x6F, 0x67, 0x43,
	0x6C, 0xC2, 0xB7, 0x43, 0x6D, 0x69, 0x6C, 0x43,
	// Bytes 1c40 - 1c7f
	0x6D, 0x6D, 0x32, 0x43, 0x6D, 0x6D, 0x33, 0x43,
	0x6D, 0x6F, 0x6C, 0x43, 0x72, 0x61, 0x64, 0x43,
	0x76, 0x69, 0x69, 0x43, 0x78, 0x69, 0x69, 0x43,
	0xC2, 0xB0, 0x43, 0x43, 0xC2, 0xB0, 0x46, 0x43,
	0xCA, 0xBC, 0x6E, 0x43, 0xCE, 0xBC, 0x41, 0x43,
	0xCE, 0xBC, 0x46, 0x43, 0xCE, 0xBC, 0x56, 0x43,
	0xCE, 0xBC, 0x57, 0x43, 0xCE, 0xBC, 0x67, 0x43,
	0xCE, 0xBC, 0x6C, 0x43, 0xCE, 0xBC, 0x6D, 0x43,
	// Bytes 1c80 - 1cbf
	0xCE, 0xBC, 0x73, 0x44, 0x28, 0x31, 0x30, 0x29,
	0x44, 0x28, 0x31, 0x31, 0x29, 0x44, 0x28, 0x31,
	0x32, 0x29, 0x44, 0x28, 0x31, 0x33, 0x29, 0x44,
	0x28, 0x31, 0x34, 0x29, 0x44, 0x28, 0x31, 0x35,
	0x29, 0x44, 0x28, 0x31, 0x36, 0x29, 0x44, 0x28,
	0x31, 0x37, 0x29, 0x44, 0x28, 0x31, 0x38, 0x29,
	0x44, 0x28, 0x31, 0x39, 0x29, 0x44, 0x28, 0x32,
	0x30, 0x29, 0x44, 0x30, 0xE7, 0x82, 0xB9, 0x44,
	// Bytes 1cc0 - 1cff
	0x31, 0xE2, 0x81, 0x84, 0x44, 0x31, 0xE6, 0x97,
	0xA5, 0x44, 0x31, 0xE6, 0x9C, 0x88, 0x44, 0x31,
	0xE7, 0x82, 0xB9, 0x44, 0x32, 0xE6, 0x97, 0xA5,
	0x44, 0x32, 0xE6, 0x9C, 0x88, 0x44, 0x32, 0xE7,
	0x82, 0xB9, 0x44, 0x33, 0xE6, 0x97, 0xA5, 0x44,
	0x33, 0xE6, 0x9C, 0x88, 0x44, 0x33, 0xE7, 0x82,
	0xB9, 0x44, 0x34, 0xE6, 0x97, 0xA5, 0x44, 0x34,
	0xE6, 0x9C, 0x88, 0x44, 0x34, 0xE7, 0x82, 0xB9,
	// Bytes 1d00 - 1d3f
	0x44, 0x35, 0xE6, 0x97, 0xA5, 0x44, 0x35, 0xE6,
	0x9C, 0x88, 0x44, 0x35, 0xE7, 0x82, 0xB9, 0x44,
	0x36, 0xE6, 0x97, 0xA5, 0x44, 0x36, 0xE6, 0x9C,
	0x88, 0x44, 0x36, 0xE7, 0x82, 0xB9, 0x44, 0x37,
	0xE6, 0x97, 0xA5, 0x44, 0x37, 0xE6, 0x9C, 0x88,
	0x44, 0x37, 0xE7, 0x82, 0xB9, 0x44, 0x38, 0xE6,
	0x97, 0xA5, 0x44, 0x38, 0xE6, 0x9C, 0x88, 0x44,
	0x38, 0xE7, 0x82, 0xB9, 0x44, 0x39, 0xE6, 0x97,
	// Bytes 1d40 - 1d7f
	0xA5, 0x44, 0x39, 0xE6, 0x9C, 0x88, 0x44, 0x39,
	0xE7, 0x82, 0xB9, 0x44, 0x56, 0x49, 0x49, 0x49,
	0x44, 0x61, 0x2E, 0x6D, 0x2E, 0x44, 0x6B, 0x63,
	0x61, 0x6C, 0x44, 0x70, 0x2E, 0x6D, 0x2E, 0x44,
	0x76, 0x69, 0x69, 0x69, 0x44, 0xD5, 0xA5, 0xD6,
	0x82, 0x44, 0xD5, 0xB4, 0xD5, 0xA5, 0x44, 0xD5,
	0xB4, 0xD5, 0xAB, 0x44, 0xD5, 0xB4, 0xD5, 0xAD,
	0x44, 0xD5, 0xB4, 0xD5, 0xB6, 0x44, 0xD5, 0xBE,
	// Bytes 1d80 - 1dbf
	0xD5, 0xB6, 0x44, 0xD7, 0x90, 0xD7, 0x9C, 0x44,
	0xD8, 0xA7, 0xD9, 0xB4, 0x44, 0xD8, 0xA8, 0xD8,
	0xAC, 0x44, 0xD8, 0xA8, 0xD8, 0xAD, 0x44, 0xD8,
	0xA8, 0xD8, 0xAE, 0x44, 0xD8, 0xA8, 0xD8, 0xB1,
	0x44, 0xD8, 0xA8, 0xD8, 0xB2, 0x44, 0xD8, 0xA8,
	0xD9, 0x85, 0x44, 0xD8, 0xA8, 0xD9, 0x86, 0x44,
	0xD8, 0xA8, 0xD9, 0x87, 0x44, 0xD8, 0xA8, 0xD9,
	0x89, 0x44, 0xD8, 0xA8, 0xD9, 0x8A, 0x44, 0xD8,
	// Bytes 1dc0 - 1dff
	0xAA, 0xD8, 0xAC, 0x44, 0xD8, 0xAA, 0xD8, 0xAD,
	0x44, 0xD8, 0xAA, 0xD8, 0xAE, 0x44, 0xD8, 0xAA,
	0xD8, 0xB1, 0x44, 0xD8, 0xAA, 0xD8, 0xB2, 0x44,
	0xD8, 0xAA, 0xD9, 0x85, 0x44, 0xD8, 0xAA, 0xD9,
	0x86, 0x44, 0xD8, 0xAA, 0xD9, 0x87, 0x44, 0xD8,
	0xAA, 0xD9, 0x89, 0x44, 0xD8, 0xAA, 0xD9, 0x8A,
	0x44, 0xD8, 0xAB, 0xD8, 0xAC, 0x44, 0xD8, 0xAB,
	0xD8, 0xB1, 0x44, 0xD8, 0xAB, 0xD8, 0xB2, 0x44,
	// Bytes 1e00 - 1e3f
	0xD8, 0xAB, 0xD9, 0x85, 0x44, 0xD8, 0xAB, 0xD9,
	0x86, 0x44, 0xD8, 0xAB, 0xD9, 0x87, 0x44, 0xD8,
	0xAB, 0xD9, 0x89, 0x44, 0xD8, 0xAB, 0xD9, 0x8A,
	0x44, 0xD8, 0xAC, 0xD8, 0xAD, 0x44, 0xD8, 0xAC,
	0xD9, 0x85, 0x44, 0xD8, 0xAC, 0xD9, 0x89, 0x44,
	0xD8, 0xAC, 0xD9, 0x8A, 0x44, 0xD8, 0xAD, 0xD8,
	0xAC, 0x44, 0xD8, 0xAD, 0xD9, 0x85, 0x44, 0xD8,
	0xAD, 0xD9, 0x89, 0x44, 0xD8, 0xAD, 0xD9, 0x8A,
	// Bytes 1e40 - 1e7f
	0x44, 0xD8, 0xAE, 0xD8, 0xAC, 0x44, 0xD8, 0xAE,
	0xD8, 0xAD, 0x44, 0xD8, 0xAE, 0xD9, 0x85, 0x44,
	0xD8, 0xAE, 0xD9, 0x89, 0x44, 0xD8, 0xAE, 0xD9,
	0x8A, 0x44, 0xD8, 0xB3, 0xD8, 0xAC, 0x44, 0xD8,
	0xB3, 0xD8, 0xAD, 0x44, 0xD8, 0xB3, 0xD8, 0xAE,
	0x44, 0xD8, 0xB3, 0xD8, 0xB1, 0x44, 0xD8, 0xB3,
	0xD9, 0x85, 0x44, 0xD8, 0xB3, 0xD9, 0x87, 0x44,
	0xD8, 0xB3, 0xD9, 0x89, 0x44, 0xD8, 0xB3, 0xD9,
	// Bytes 1e80 - 1ebf
	0x8A, 0x44, 0xD8, 0xB4, 0xD8, 0xAC, 0x44, 0xD8,
	0xB4, 0xD8, 0xAD, 0x44, 0xD8, 0xB4, 0xD8, 0xAE,
	0x44, 0xD8, 0xB4, 0xD8, 0xB1, 0x44, 0xD8, 0xB4,
	0xD9, 0x85, 0x44, 0xD8, 0xB4, 0xD9, 0x87, 0x44,
	0xD8, 0xB4, 0xD9, 0x89, 0x44, 0xD8, 0xB4, 0xD9,
	0x8A, 0x44, 0xD8, 0xB5, 0xD8, 0xAD, 0x44, 0xD8,
	0xB5, 0xD8, 0xAE, 0x44, 0xD8, 0xB5, 0xD8, 0xB1,
	0x44, 0xD8, 0xB5, 0xD9, 0x85, 0x44, 0xD8, 0xB5,
	// Bytes 1ec0 - 1eff
	0xD9, 0x89, 0x44, 0xD8, 0xB5, 0xD9, 0x8A, 0x44,
	0xD8, 0xB6, 0xD8, 0xAC, 0x44, 0xD8, 0xB6, 0xD8,
	0xAD, 0x44, 0xD8, 0xB6, 0xD8, 0xAE, 0x44, 0xD8,
	0xB6, 0xD8, 0xB1, 0x44, 0xD8, 0xB6, 0xD9, 0x85,
	0x44, 0xD8, 0xB6, 0xD9, 0x89, 0x44, 0xD8, 0xB6,
	0xD9, 0x8A, 0x44, 0xD8, 0xB7, 0xD8, 0xAD, 0x44,
	0xD8, 0xB7, 0xD9, 0x85, 0x44, 0xD8, 0xB7, 0xD9,
	0x89, 0x44, 0xD8, 0xB7, 0xD9, 0x8A, 0x44, 0xD8,
	// Bytes 1f00 - 1f3f
	0xB8, 0xD9, 0x85, 0x44, 0xD8, 0xB9, 0xD8, 0xAC,
	0x44, 0xD8, 0xB9, 0xD9, 0x85, 0x44, 0xD8, 0xB9,
	0xD9, 0x89, 0x44, 0xD8, 0xB9, 0xD9, 0x8A, 0x44,
	0xD8, 0xBA, 0xD8, 0xAC, 0x44, 0xD8, 0xBA, 0xD9,
	0x85, 0x44, 0xD8, 0xBA, 0xD9, 0x89, 0x44, 0xD8,
	0xBA, 0xD9, 0x8A, 0x44, 0xD9, 0x81, 0xD8, 0xAC,
	0x44, 0xD9, 0x81, 0xD8, 0xAD, 0x44, 0xD9, 0x81,
	0xD8, 0xAE, 0x44, 0xD9, 0x81, 0xD9, 0x85, 0x44,
	// Bytes 1f40 - 1f7f
	0xD9, 0x81, 0xD9, 0x89, 0x44, 0xD9, 0x81, 0xD9,
	0x8A, 0x44, 0xD9, 0x82, 0xD8, 0xAD, 0x44, 0xD9,
	0x82, 0xD9, 0x85, 0x44, 0xD9, 0x82, 0xD9, 0x89,
	0x44, 0xD9, 0x82, 0xD9, 0x8A, 0x44, 0xD9, 0x83,
	0xD8, 0xA7, 0x44, 0xD9, 0x83, 0xD8, 0xAC, 0x44,
	0xD9, 0x83, 0xD8, 0xAD, 0x44, 0xD9, 0x83, 0xD8,
	0xAE, 0x44, 0xD9, 0x83, 0xD9, 0x84, 0x44, 0xD9,
	0x83, 0xD9, 0x85, 0x44, 0xD9, 0x83, 0xD9, 0x89,
	// Bytes 1f80 - 1fbf
	0x44, 0xD9, 0x83, 0xD9, 0x8A, 0x44, 0xD9, 0x84,
	0xD8, 0xA7, 0x44, 0xD9, 0x84, 0xD8, 0xAC, 0x44,
	0xD9, 0x84, 0xD8, 0xAD, 0x44, 0xD9, 0x84, 0xD8,
	0xAE, 0x44, 0xD9, 0x84, 0xD9, 0x85, 0x44, 0xD9,
	0x84, 0xD9, 0x87, 0x44, 0xD9, 0x84, 0xD9, 0x89,
	0x44, 0xD9, 0x84, 0xD9, 0x8A, 0x44, 0xD9, 0x85,
	0xD8, 0xA7, 0x44, 0xD9, 0x85, 0xD8, 0xAC, 0x44,
	0xD9, 0x85, 0xD8, 0xAD, 0x44, 0xD9, 0x85, 0xD8,
	// Bytes 1fc0 - 1fff
	0xAE, 0x44, 0xD9, 0x85, 0xD9, 0x85, 0x44, 0xD9,
	0x85, 0xD9, 0x89, 0x44, 0xD9, 0x85, 0xD9, 0x8A,
	0x44, 0xD9, 0x86, 0xD8, 0xAC, 0x44, 0xD9, 0x86,
	0xD8, 0xAD, 0x44, 0xD9, 0x86, 0xD8, 0xAE, 0x44,
	0xD9, 0x86, 0xD8, 0xB1, 0x44, 0xD9, 0x86, 0xD8,
	0xB2, 0x44, 0xD9, 0x86, 0xD9, 0x85, 0x44, 0xD9,
	0x86, 0xD9, 0x86, 0x44, 0xD9, 0x86, 0xD9, 0x87,
	0x44, 0xD9, 0x86, 0xD9, 0x89, 0x44, 0xD9, 0x86,
	// Bytes 2000 - 203f
	0xD9, 0x8A, 0x44, 0xD9, 0x87, 0xD8, 0xAC, 0x44,
	0xD9, 0x87, 0xD9, 0x85, 0x44, 0xD9, 0x87, 0xD9,
	0x89, 0x44, 0xD9, 0x87, 0xD9, 0x8A, 0x44, 0xD9,
	0x88, 0xD9, 0xB4, 0x44, 0xD9, 0x8A, 0xD8, 0xAC,
	0x44, 0xD9, 0x8A, 0xD8, 0xAD, 0x44, 0xD9, 0x8A,
	0xD8, 0xAE, 0x44, 0xD9, 0x8A, 0xD8, 0xB1, 0x44,
	0xD9, 0x8A, 0xD8, 0xB2, 0x44, 0xD9, 0x8A, 0xD9,
	0x85, 0x44, 0xD9, 0x8A, 0xD9, 0x86, 0x44, 0xD9,
	// Bytes 2040 - 207f
	0x8A, 0xD9, 0x87, 0x44, 0xD9, 0x8A, 0xD9, 0x89,
	0x44, 0xD9, 0x8A, 0xD9, 0x8A, 0x44, 0xD9, 0x8A,
	0xD9, 0xB4, 0x44, 0xDB, 0x87, 0xD9, 0xB4, 0x45,
	0x28, 0xE1, 0x84, 0x80, 0x29, 0x45, 0x28, 0xE1,
	0x84, 0x82, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x83,
	0x29, 0x45, 0x28, 0xE1, 0x84, 0x85, 0x29, 0x45,
	0x28, 0xE1, 0x84, 0x86, 0x29, 0x45, 0x28, 0xE1,
	0x84, 0x87, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x89,
	// Bytes 2080 - 20bf
	0x29, 0x45, 0x28, 0xE1, 0x84, 0x8B, 0x29, 0x45,
	0x28, 0xE1, 0x84, 0x8C, 0x29, 0x45, 0x28, 0xE1,
	0x84, 0x8E, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x8F,
	0x29, 0x45, 0x28, 0xE1, 0x84, 0x90, 0x29, 0x45,
	0x28, 0xE1, 0x84, 0x91, 0x29, 0x45, 0x28, 0xE1,
	0x84, 0x92, 0x29, 0x45, 0x28, 0xE4, 0xB8, 0x80,
	0x29, 0x45, 0x28, 0xE4, 0xB8, 0x83, 0x29, 0x45,
	0x28, 0xE4, 0xB8, 0x89, 0x29, 0x45, 0x28, 0xE4,
	// Bytes 20c0 - 20ff
	0xB9, 0x9D, 0x29, 0x45, 0x28, 0xE4, 0xBA, 0x8C,
	0x29, 0x45, 0x28, 0xE4, 0xBA, 0x94, 0x29, 0x45,
	0x28, 0xE4, 0xBB, 0xA3, 0x29, 0x45, 0x28, 0xE4,
	0xBC, 0x81, 0x29, 0x45, 0x28, 0xE4, 0xBC, 0x91,
	0x29, 0x45, 0x28, 0xE5, 0x85, 0xAB, 0x29, 0x45,
	0x28, 0xE5, 0x85, 0xAD, 0x29, 0x45, 0x28, 0xE5,
	0x8A, 0xB4, 0x29, 0x45, 0x28, 0xE5, 0x8D, 0x81,
	0x29, 0x45, 0x28, 0xE5, 0x8D, 0x94, 0x29, 0x45,
	// Bytes 2100 - 213f
	0x28, 0xE5, 0x90, 0x8D, 0x29, 0x45, 0x28, 0xE5,
	0x91, 0xBC, 0x29, 0x45, 0x28, 0xE5, 0x9B, 0x9B,
	0x29, 0x45, 0x28, 0xE5, 0x9C, 0x9F, 0x29, 0x45,
	0x28, 0xE5, 0xAD, 0xA6, 0x29, 0x45, 0x28, 0xE6,
	0x97, 0xA5, 0x29, 0x45, 0x28, 0xE6, 0x9C, 0x88,
	0x29, 0x45, 0x28, 0xE6, 0x9C, 0x89, 0x29, 0x45,
	0x28, 0xE6, 0x9C, 0xA8, 0x29, 0x45, 0x28, 0xE6,
	0xA0, 0xAA, 0x29, 0x45, 0x28, 0xE6, 0xB0, 0xB4,
	// Bytes 2140 - 217f
	0x29, 0x45, 0x28, 0xE7, 0x81, 0xAB, 0x29, 0x45,
	0x28, 0xE7, 0x89, 0xB9, 0x29, 0x45, 0x28, 0xE7,
	0x9B, 0xA3, 0x29, 0x45, 0x28, 0xE7, 0xA4, 0xBE,
	0x29, 0x45, 0x28, 0xE7, 0xA5, 0x9D, 0x29, 0x45,
	0x28, 0xE7, 0xA5, 0xAD, 0x29, 0x45, 0x28, 0xE8,
	0x87, 0xAA, 0x29, 0x45, 0x28, 0xE8, 0x87, 0xB3,
	0x29, 0x45, 0x28, 0xE8, 0xB2, 0xA1, 0x29, 0x45,
	0x28, 0xE8, 0xB3, 0x87, 0x29, 0x45, 0x28, 0xE9,
	// Bytes 2180 - 21bf
	0x87, 0x91, 0x29, 0x45, 0x30, 0xE2, 0x81, 0x84,
	0x33, 0x45, 0x31, 0x30, 0xE6, 0x97, 0xA5, 0x45,
	0x31, 0x30, 0xE6, 0x9C, 0x88, 0x45, 0x31, 0x30,
	0xE7, 0x82, 0xB9, 0x45, 0x31, 0x31, 0xE6, 0x97,
	0xA5, 0x45, 0x31, 0x31, 0xE6, 0x9C, 0x88, 0x45,
	0x31, 0x31, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x32,
	0xE6, 0x97, 0xA5, 0x45, 0x31, 0x32, 0xE6, 0x9C,
	0x88, 0x45, 0x31, 0x32, 0xE7, 0x82, 0xB9, 0x45,
	// Bytes 21c0 - 21ff
	0x31, 0x33, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x33,
	0xE7, 0x82, 0xB9, 0x45, 0x31, 0x34, 0xE6, 0x97,
	0xA5, 0x45, 0x31, 0x34, 0xE7, 0x82, 0xB9, 0x45,
	0x31, 0x35, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x35,
	0xE7, 0x82, 0xB9, 0x45, 0x31, 0x36, 0xE6, 0x97,
	0xA5, 0x45, 0x31, 0x36, 0xE7, 0x82, 0xB9, 0x45,
	0x31, 0x37, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x37,
	0xE7, 0x82, 0xB9, 0x45, 0x31, 0x38, 0xE6, 0x97,
	// Bytes 2200 - 223f
	0xA5, 0x45, 0x31, 0x38, 0xE7, 0x82, 0xB9, 0x45,
	0x31, 0x39, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x39,
	0xE7, 0x82, 0xB9, 0x45, 0x31, 0xE2, 0x81, 0x84,
	0x32, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x33, 0x45,
	0x31, 0xE2, 0x81, 0x84, 0x34, 0x45, 0x31, 0xE2,
	0x81, 0x84, 0x35, 0x45, 0x31, 0xE2, 0x81, 0x84,
	0x36, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x37, 0x45,
	0x31, 0xE2, 0x81, 0x84, 0x38, 0x45, 0x31, 0xE2,
	// Bytes 2240 - 227f
	0x81, 0x84, 0x39, 0x45, 0x32, 0x30, 0xE6, 0x97,
	0xA5, 0x45, 0x32, 0x30, 0xE7, 0x82, 0xB9, 0x45,
	0x32, 0x31, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x31,
	0xE7, 0x82, 0xB9, 0x45, 0x32, 0x32, 0xE6, 0x97,
	0xA5, 0x45, 0x32, 0x32, 0xE7, 0x82, 0xB9, 0x45,
	0x32, 0x33, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x33,
	0xE7, 0x82, 0xB9, 0x45, 0x32, 0x34, 0xE6, 0x97,
	0xA5, 0x45, 0x32, 0x34, 0xE7, 0x82, 0xB9, 0x45,
	// Bytes 2280 - 22bf
	0x32, 0x35, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x36,
	0xE6, 0x97, 0xA5, 0x45, 0x32, 0x37, 0xE6, 0x97,
	0xA5, 0x45, 0x32, 0x38, 0xE6, 0x97, 0xA5, 0x45,
	0x32, 0x39, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0xE2,
	0x81, 0x84, 0x33, 0x45, 0x32, 0xE2, 0x81, 0x84,
	0x35, 0x45, 0x33, 0x30, 0xE6, 0x97, 0xA5, 0x45,
	0x33, 0x31, 0xE6, 0x97, 0xA5, 0x45, 0x33, 0xE2,
	0x81, 0x84, 0x34, 0x45, 0x33, 0xE2, 0x81, 0x84,
	// Bytes 22c0 - 22ff
	0x35, 0x45, 0x33, 0xE2, 0x81, 0x84, 0x38, 0x45,
	0x34, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x35, 0xE2,
	0x81, 0x84, 0x36, 0x45, 0x35, 0xE2, 0x81, 0x84,
	0x38, 0x45, 0x37, 0xE2, 0x81, 0x84, 0x38, 0x45,
	0x41, 0xE2, 0x88, 0x95, 0x6D, 0x45, 0x56, 0xE2,
	0x88, 0x95, 0x6D, 0x45, 0x6D, 0xE2, 0x88, 0x95,
	0x73, 0x46, 0x31, 0xE2, 0x81, 0x84, 0x31, 0x30,
	0x46, 0x43, 0xE2, 0x88, 0x95, 0x6B, 0x67, 0x46,
	// Bytes 2300 - 233f
	0x6D, 0xE2, 0x88, 0x95, 0x73, 0x32, 0x46, 0xD8,
	0xA8, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xA8,
	0xD8, 0xAE, 0xD9, 0x8A, 0x46, 0xD8, 0xAA, 0xD8,
	0xAC, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, 0xAC,
	0xD9, 0x89, 0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9,
	0x8A, 0x46, 0xD8, 0xAA, 0xD8, 0xAD, 0xD8, 0xAC,
	0x46, 0xD8, 0xAA, 0xD8, 0xAD, 0xD9, 0x85, 0x46,
	0xD8, 0xAA, 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD8,
	// Bytes 2340 - 237f
	0xAA, 0xD8, 0xAE, 0xD9, 0x89, 0x46, 0xD8, 0xAA,
	0xD8, 0xAE, 0xD9, 0x8A, 0x46, 0xD8, 0xAA, 0xD9,
	0x85, 0xD8, 0xAC, 0x46, 0xD8, 0xAA, 0xD9, 0x85,
	0xD8, 0xAD, 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8,
	0xAE, 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD9, 0x89,
	0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD9, 0x8A, 0x46,
	0xD8, 0xAC, 0xD8, 0xAD, 0xD9, 0x89, 0x46, 0xD8,
	0xAC, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xAC,
	// Bytes 2380 - 23bf
	0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, 0xAC, 0xD9,
	0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAC, 0xD9, 0x85,
	0xD9, 0x8A, 0x46, 0xD8, 0xAD, 0xD8, 0xAC, 0xD9,
	0x8A, 0x46, 0xD8, 0xAD, 0xD9, 0x85, 0xD9, 0x89,
	0x46, 0xD8, 0xAD, 0xD9, 0x85, 0xD9, 0x8A, 0x46,
	0xD8, 0xB3, 0xD8, 0xAC, 0xD8, 0xAD, 0x46, 0xD8,
	0xB3, 0xD8, 0xAC, 0xD9, 0x89, 0x46, 0xD8, 0xB3,
	0xD8, 0xAD, 0xD8, 0xAC, 0x46, 0xD8, 0xB3, 0xD8,
	// Bytes 23c0 - 23ff
	0xAE, 0xD9, 0x89, 0x46, 0xD8, 0xB3, 0xD8, 0xAE,
	0xD9, 0x8A, 0x46, 0xD8, 0xB3, 0xD9, 0x85, 0xD8,
	0xAC, 0x46, 0xD8, 0xB3, 0xD9, 0x85, 0xD8, 0xAD,
	0x46, 0xD8, 0xB3, 0xD9, 0x85, 0xD9, 0x85, 0x46,
	0xD8, 0xB4, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8,
	0xB4, 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD8, 0xB4,
	0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xB4, 0xD9,
	0x85, 0xD8, 0xAE, 0x46, 0xD8, 0xB4, 0xD9, 0x85,
	// Bytes 2400 - 243f
	0xD9, 0x85, 0x46, 0xD8, 0xB5, 0xD8, 0xAD, 0xD8,
	0xAD, 0x46, 0xD8, 0xB5, 0xD8, 0xAD, 0xD9, 0x8A,
	0x46, 0xD8, 0xB5, 0xD9, 0x84, 0xD9, 0x89, 0x46,
	0xD8, 0xB5, 0xD9, 0x84, 0xDB, 0x92, 0x46, 0xD8,
	0xB5, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB6,
	0xD8, 0xAD, 0xD9, 0x89, 0x46, 0xD8, 0xB6, 0xD8,
	0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xB6, 0xD8, 0xAE,
	0xD9, 0x85, 0x46, 0xD8, 0xB7, 0xD9, 0x85, 0xD8,
	// Bytes 2440 - 247f
	0xAD, 0x46, 0xD8, 0xB7, 0xD9, 0x85, 0xD9, 0x85,
	0x46, 0xD8, 0xB7, 0xD9, 0x85, 0xD9, 0x8A, 0x46,
	0xD8, 0xB9, 0xD8, 0xAC, 0xD9, 0x85, 0x46, 0xD8,
	0xB9, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB9,
	0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xB9, 0xD9,
	0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xBA, 0xD9, 0x85,
	0xD9, 0x85, 0x46, 0xD8, 0xBA, 0xD9, 0x85, 0xD9,
	0x89, 0x46, 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x8A,
	// Bytes 2480 - 24bf
	0x46, 0xD9, 0x81, 0xD8, 0xAE, 0xD9, 0x85, 0x46,
	0xD9, 0x81, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9,
	0x82, 0xD9, 0x84, 0xDB, 0x92, 0x46, 0xD9, 0x82,
	0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD9, 0x82, 0xD9,
	0x85, 0xD9, 0x85, 0x46, 0xD9, 0x82, 0xD9, 0x85,
	0xD9, 0x8A, 0x46, 0xD9, 0x83, 0xD9, 0x85, 0xD9,
	0x85, 0x46, 0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x8A,
	0x46, 0xD9, 0x84, 0xD8, 0xAC, 0xD8, 0xAC, 0x46,
	// Bytes 24c0 - 24ff
	0xD9, 0x84, 0xD8, 0xAC, 0xD9, 0x85, 0x46, 0xD9,
	0x84, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x84,
	0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, 0x84, 0xD8,
	0xAD, 0xD9, 0x89, 0x46, 0xD9, 0x84, 0xD8, 0xAD,
	0xD9, 0x8A, 0x46, 0xD9, 0x84, 0xD8, 0xAE, 0xD9,
	0x85, 0x46, 0xD9, 0x84, 0xD9, 0x85, 0xD8, 0xAD,
	0x46, 0xD9, 0x84, 0xD9, 0x85, 0xD9, 0x8A, 0x46,
	0xD9, 0x85, 0xD8, 0xAC, 0xD8, 0xAD, 0x46, 0xD9,
	// Bytes 2500 - 253f
	0x85, 0xD8, 0xAC, 0xD8, 0xAE, 0x46, 0xD9, 0x85,
	0xD8, 0xAC, 0xD9, 0x85, 0x46, 0xD9, 0x85, 0xD8,
	0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD8, 0xAD,
	0xD8, 0xAC, 0x46, 0xD9, 0x85, 0xD8, 0xAD, 0xD9,
	0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x8A,
	0x46, 0xD9, 0x85, 0xD8, 0xAE, 0xD8, 0xAC, 0x46,
	0xD9, 0x85, 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9,
	0x85, 0xD8, 0xAE, 0xD9, 0x8A, 0x46, 0xD9, 0x85,
	// Bytes 2540 - 257f
	0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x86, 0xD8,
	0xAC, 0xD8, 0xAD, 0x46, 0xD9, 0x86, 0xD8, 0xAC,
	0xD9, 0x85, 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD9,
	0x89, 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x8A,
	0x46, 0xD9, 0x86, 0xD8, 0xAD, 0xD9, 0x85, 0x46,
	0xD9, 0x86, 0xD8, 0xAD, 0xD9, 0x89, 0x46, 0xD9,
	0x86, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x86,
	0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD9, 0x86, 0xD9,
	// Bytes 2580 - 25bf
	0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x87, 0xD9, 0x85,
	0xD8, 0xAC, 0x46, 0xD9, 0x87, 0xD9, 0x85, 0xD9,
	0x85, 0x46, 0xD9, 0x8A, 0xD8, 0xAC, 0xD9, 0x8A,
	0x46, 0xD9, 0x8A, 0xD8, 0xAD, 0xD9, 0x8A, 0x46,
	0xD9, 0x8A, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9,
	0x8A, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x8A,
	0xD9, 0x94, 0xD8, 0xA7, 0x46, 0xD9, 0x8A, 0xD9,
	0x94, 0xD8, 0xAC, 0x46, 0xD9, 0x8A, 0xD9, 0x94,
	// Bytes 25c0 - 25ff
	0xD8, 0xAD, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8,
	0xAE, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xB1,
	0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xB2, 0x46,
	0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x85, 0x46, 0xD9,
	0x8A, 0xD9, 0x94, 0xD9, 0x86, 0x46, 0xD9, 0x8A,
	0xD9, 0x94, 0xD9, 0x87, 0x46, 0xD9, 0x8A, 0xD9,
	0x94, 0xD9, 0x88, 0x46, 0xD9, 0x8A, 0xD9, 0x94,
	0xD9, 0x89, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9,
	// Bytes 2600 - 263f
	0x8A, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, 0x86,
	0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, 0x87, 0x46,
	0xD9, 0x8A, 0xD9, 0x94, 0xDB, 0x88, 0x46, 0xD9,
	0x8A, 0xD9, 0x94, 0xDB, 0x90, 0x46, 0xD9, 0x8A,
	0xD9, 0x94, 0xDB, 0x95, 0x46, 0xE0, 0xB9, 0x8D,
	0xE0, 0xB8, 0xB2, 0x46, 0xE0, 0xBA, 0xAB, 0xE0,
	0xBA, 0x99, 0x46, 0xE0, 0xBA, 0xAB, 0xE0, 0xBA,
	0xA1, 0x46, 0xE0, 0xBB, 0x8D, 0xE0, 0xBA, 0xB2,
	// Bytes 2640 - 267f
	0x46, 0xE0, 0xBD, 0x80, 0xE0, 0xBE, 0xB5, 0x46,
	0xE0, 0xBD, 0x82, 0xE0, 0xBE, 0xB7, 0x46, 0xE0,
	0xBD, 0x8C, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBD,
	0x91, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x96,
	0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x9B, 0xE0,
	0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0x90, 0xE0, 0xBE,
	0xB5, 0x46, 0xE0, 0xBE, 0x92, 0xE0, 0xBE, 0xB7,
	0x46, 0xE0, 0xBE, 0x9C, 0xE0, 0xBE, 0xB7, 0x46,
	// Bytes 2680 - 26bf
	0xE0, 0xBE, 0xA1, 0xE0, 0xBE, 0xB7, 0x46, 0xE0,
	0xBE, 0xA6, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE,
	0xAB, 0xE0, 0xBE, 0xB7, 0x46, 0xE2, 0x80, 0xB2,
	0xE2, 0x80, 0xB2, 0x46, 0xE2, 0x80, 0xB5, 0xE2,
	0x80, 0xB5, 0x46, 0xE2, 0x88, 0xAB, 0xE2, 0x88,
	0xAB, 0x46, 0xE2, 0x88, 0xAE, 0xE2, 0x88, 0xAE,
	0x46, 0xE3, 0x81, 0xBB, 0xE3, 0x81, 0x8B, 0x46,
	0xE3, 0x82, 0x88, 0xE3, 0x82, 0x8A, 0x46, 0xE3,
	// Bytes 26c0 - 26ff
	0x82, 0xAD, 0xE3, 0x83, 0xAD, 0x46, 0xE3, 0x82,
	0xB3, 0xE3, 0x82, 0xB3, 0x46, 0xE3, 0x82, 0xB3,
	0xE3, 0x83, 0x88, 0x46, 0xE3, 0x83, 0x88, 0xE3,
	0x83, 0xB3, 0x46, 0xE3, 0x83, 0x8A, 0xE3, 0x83,
	0x8E, 0x46, 0xE3, 0x83, 0x9B, 0xE3, 0x83, 0xB3,
	0x46, 0xE3, 0x83, 0x9F, 0xE3, 0x83, 0xAA, 0x46,
	0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xA9, 0x46, 0xE3,
	0x83, 0xAC, 0xE3, 0x83, 0xA0, 0x46, 0xE5, 0xA4,
	// Bytes 2700 - 273f
	0xA7, 0xE6, 0xAD, 0xA3, 0x46, 0xE5, 0xB9, 0xB3,
	0xE6, 0x88, 0x90, 0x46, 0xE6, 0x98, 0x8E, 0xE6,
	0xB2, 0xBB, 0x46, 0xE6, 0x98, 0xAD, 0xE5, 0x92,
	0x8C, 0x47, 0x72, 0x61, 0x64, 0xE2, 0x88, 0x95,
	0x73, 0x47, 0xE3, 0x80, 0x94, 0x53, 0xE3, 0x80,
	0x95, 0x48, 0x28, 0xE1, 0x84, 0x80, 0xE1, 0x85,
	0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x82, 0xE1,
	0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x83,
	// Bytes 2740 - 277f
	0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84,
	0x85, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1,
	0x84, 0x86, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28,
	0xE1, 0x84, 0x87, 0xE1, 0x85, 0xA1, 0x29, 0x48,
	0x28, 0xE1, 0x84, 0x89, 0xE1, 0x85, 0xA1, 0x29,
	0x48, 0x28, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xA1,
	0x29, 0x48, 0x28, 0xE1, 0x84, 0x8C, 0xE1, 0x85,
	0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x8C, 0xE1,
	// Bytes 2780 - 27bf
	0x85, 0xAE, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x8E,
	0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84,
	0x8F, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1,
	0x84, 0x90, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28,
	0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1, 0x29, 0x48,
	0x28, 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, 0x29,
	0x48, 0x72, 0x61, 0x64, 0xE2, 0x88, 0x95, 0x73,
	0x32, 0x48, 0xD8, 0xA7, 0xD9, 0x83, 0xD8, 0xA8,
	// Bytes 27c0 - 27ff
	0xD8, 0xB1, 0x48, 0xD8, 0xA7, 0xD9, 0x84, 0xD9,
	0x84, 0xD9, 0x87, 0x48, 0xD8, 0xB1, 0xD8, 0xB3,
	0xD9, 0x88, 0xD9, 0x84, 0x48, 0xD8, 0xB1, 0xDB,
	0x8C, 0xD8, 0xA7, 0xD9, 0x84, 0x48, 0xD8, 0xB5,
	0xD9, 0x84, 0xD8, 0xB9, 0xD9, 0x85, 0x48, 0xD8,
	0xB9, 0xD9, 0x84, 0xD9, 0x8A, 0xD9, 0x87, 0x48,
	0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x85, 0xD8, 0xAF,
	0x48, 0xD9, 0x88, 0xD8, 0xB3, 0xD9, 0x84, 0xD9,
	// Bytes 2800 - 283f
	0x85, 0x49, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2,
	0xE2, 0x80, 0xB2, 0x49, 0xE2, 0x80, 0xB5, 0xE2,
	0x80, 0xB5, 0xE2, 0x80, 0xB5, 0x49, 0xE2, 0x88,
	0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0x49,
	0xE2, 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0xE2, 0x88,
	0xAE, 0x49, 0xE3, 0x80, 0x94, 0xE4, 0xB8, 0x89,
	0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE4,
	0xBA, 0x8C, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80,
	// Bytes 2840 - 287f
	0x94, 0xE5, 0x8B, 0x9D, 0xE3, 0x80, 0x95, 0x49,
	0xE3, 0x80, 0x94, 0xE5, 0xAE, 0x89, 0xE3, 0x80,
	0x95, 0x49, 0xE3, 0x80, 0x94, 0xE6, 0x89, 0x93,
	0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE6,
	0x95, 0x97, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80,
	0x94, 0xE6, 0x9C, 0xAC, 0xE3, 0x80, 0x95, 0x49,
	0xE3, 0x80, 0x94, 0xE7, 0x82, 0xB9, 0xE3, 0x80,
	0x95, 0x49, 0xE3, 0x80, 0x94, 0xE7, 0x9B, 0x97,
	// Bytes 2880 - 28bf
	0xE3, 0x80, 0x95, 0x49, 0xE3, 0x82, 0xA2, 0xE3,
	0x83, 0xBC, 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x82,
	0xA4, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x81, 0x49,
	0xE3, 0x82, 0xA6, 0xE3, 0x82, 0xA9, 0xE3, 0x83,
	0xB3, 0x49, 0xE3, 0x82, 0xAA, 0xE3, 0x83, 0xB3,
	0xE3, 0x82, 0xB9, 0x49, 0xE3, 0x82, 0xAA, 0xE3,
	0x83, 0xBC, 0xE3, 0x83, 0xA0, 0x49, 0xE3, 0x82,
	0xAB, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xAA, 0x49,
	// Bytes 28c0 - 28ff
	0xE3, 0x82, 0xB1, 0xE3, 0x83, 0xBC, 0xE3, 0x82,
	0xB9, 0x49, 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0xAB,
	0xE3, 0x83, 0x8A, 0x49, 0xE3, 0x82, 0xBB, 0xE3,
	0x83, 0xB3, 0xE3, 0x83, 0x81, 0x49, 0xE3, 0x82,
	0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88, 0x49,
	0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0xE3, 0x82,
	0xB7, 0x49, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99,
	0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, 0x8E, 0xE3,
	// Bytes 2900 - 293f
	0x83, 0x83, 0xE3, 0x83, 0x88, 0x49, 0xE3, 0x83,
	0x8F, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0x84, 0x49,
	0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, 0xE3, 0x83,
	0xAB, 0x49, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A,
	0xE3, 0x82, 0xB3, 0x49, 0xE3, 0x83, 0x95, 0xE3,
	0x83, 0xA9, 0xE3, 0x83, 0xB3, 0x49, 0xE3, 0x83,
	0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xBD, 0x49,
	0xE3, 0x83, 0x98, 0xE3, 0x83, 0xAB, 0xE3, 0x83,
	// Bytes 2940 - 297f
	0x84, 0x49, 0xE3, 0x83, 0x9B, 0xE3, 0x83, 0xBC,
	0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, 0x9B, 0xE3,
	0x83, 0xBC, 0xE3, 0x83, 0xB3, 0x49, 0xE3, 0x83,
	0x9E, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xAB, 0x49,
	0xE3, 0x83, 0x9E, 0xE3, 0x83, 0x83, 0xE3, 0x83,
	0x8F, 0x49, 0xE3, 0x83, 0x9E, 0xE3, 0x83, 0xAB,
	0xE3, 0x82, 0xAF, 0x49, 0xE3, 0x83, 0xA4, 0xE3,
	0x83, 0xBC, 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83,
	// Bytes 2980 - 29bf
	0xA6, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xB3, 0x49,
	0xE3, 0x83, 0xAF, 0xE3, 0x83, 0x83, 0xE3, 0x83,
	0x88, 0x4C, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2,
	0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0x4C, 0xE2,
	0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB,
	0xE2, 0x88, 0xAB, 0x4C, 0xE3, 0x82, 0xA2, 0xE3,
	0x83, 0xAB, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0xA1,
	0x4C, 0xE3, 0x82, 0xA8, 0xE3, 0x83, 0xBC, 0xE3,
	// Bytes 29c0 - 29ff
	0x82, 0xAB, 0xE3, 0x83, 0xBC, 0x4C, 0xE3, 0x82,
	0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAD, 0xE3,
	0x83, 0xB3, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x82,
	0x99, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x9E, 0x4C,
	0xE3, 0x82, 0xAB, 0xE3, 0x83, 0xA9, 0xE3, 0x83,
	0x83, 0xE3, 0x83, 0x88, 0x4C, 0xE3, 0x82, 0xAB,
	0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xAA, 0xE3, 0x83,
	0xBC, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99,
	// Bytes 2a00 - 2a3f
	0xE3, 0x83, 0x8B, 0xE3, 0x83, 0xBC, 0x4C, 0xE3,
	0x82, 0xAD, 0xE3, 0x83, 0xA5, 0xE3, 0x83, 0xAA,
	0xE3, 0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAF, 0xE3,
	0x82, 0x99, 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0xA0,
	0x4C, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAD, 0xE3,
	0x83, 0xBC, 0xE3, 0x83, 0x8D, 0x4C, 0xE3, 0x82,
	0xB5, 0xE3, 0x82, 0xA4, 0xE3, 0x82, 0xAF, 0xE3,
	0x83, 0xAB, 0x4C, 0xE3, 0x82, 0xBF, 0xE3, 0x82,
	// Bytes 2a40 - 2a7f
	0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xB9, 0x4C,
	0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83,
	0xBC, 0xE3, 0x83, 0x84, 0x4C, 0xE3, 0x83, 0x92,
	0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xAF, 0xE3, 0x83,
	0xAB, 0x4C, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0xA3,
	0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0x4C, 0xE3,
	0x83, 0x98, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC,
	0xE3, 0x82, 0xBF, 0x4C, 0xE3, 0x83, 0x98, 0xE3,
	// Bytes 2a80 - 2abf
	0x82, 0x9A, 0xE3, 0x83, 0x8B, 0xE3, 0x83, 0x92,
	0x4C, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3,
	0x83, 0xB3, 0xE3, 0x82, 0xB9, 0x4C, 0xE3, 0x83,
	0x9B, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, 0xE3,
	0x83, 0x88, 0x4C, 0xE3, 0x83, 0x9E, 0xE3, 0x82,
	0xA4, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAD, 0x4C,
	0xE3, 0x83, 0x9F, 0xE3, 0x82, 0xAF, 0xE3, 0x83,
	0xAD, 0xE3, 0x83, 0xB3, 0x4C, 0xE3, 0x83, 0xA1,
	// Bytes 2ac0 - 2aff
	0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3, 0x83,
	0xAB, 0x4C, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0x83,
	0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x4C, 0xE3,
	0x83, 0xAB, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A,
	0xE3, 0x83, 0xBC, 0x4C, 0xE6, 0xA0, 0xAA, 0xE5,
	0xBC, 0x8F, 0xE4, 0xBC, 0x9A, 0xE7, 0xA4, 0xBE,
	0x4E, 0x28, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xA9,
	0xE1, 0x84, 0x92, 0xE1, 0x85, 0xAE, 0x29, 0x4F,
	// Bytes 2b00 - 2b3f
	0xD8, 0xAC, 0xD9, 0x84, 0x20, 0xD8, 0xAC, 0xD9,
	0x84, 0xD8, 0xA7, 0xD9, 0x84, 0xD9, 0x87, 0x4F,
	0xE3, 0x82, 0xA2, 0xE3, 0x83, 0x8F, 0xE3, 0x82,
	0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0x4F,
	0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xB3, 0xE3, 0x83,
	0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xA2, 0x4F,
	0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD, 0xE3, 0x83,
	0xAF, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0x4F,
	// Bytes 2b40 - 2b7f
	0xE3, 0x82, 0xB5, 0xE3, 0x83, 0xB3, 0xE3, 0x83,
	0x81, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xA0, 0x4F,
	0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, 0xE3, 0x83,
	0xBC, 0xE3, 0x83, 0xAC, 0xE3, 0x83, 0xAB, 0x4F,
	0xE3, 0x83, 0x98, 0xE3, 0x82, 0xAF, 0xE3, 0x82,
	0xBF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0x4F,
	0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0xE3, 0x82,
	0xA4, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88, 0x4F,
	// Bytes 2b80 - 2bbf
	0xE3, 0x83, 0x9E, 0xE3, 0x83, 0xB3, 0xE3, 0x82,
	0xB7, 0xE3, 0x83, 0xA7, 0xE3, 0x83, 0xB3, 0x4F,
	0xE3, 0x83, 0xA1, 0xE3, 0x82, 0xAB, 0xE3, 0x82,
	0x99, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xB3, 0x4F,
	0xE3, 0x83, 0xAB, 0xE3, 0x83, 0xBC, 0xE3, 0x83,
	0x95, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, 0x51,
	0x28, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xA9, 0xE1,
	0x84, 0x8C, 0xE1, 0x85, 0xA5, 0xE1, 0x86, 0xAB,
	// Bytes 2bc0 - 2bff
	0x29, 0x52, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99,
	0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xBF, 0xE3, 0x82,
	0x99, 0xE3, 0x83, 0xBC, 0x52, 0xE3, 0x82, 0xAD,
	0xE3, 0x83, 0xAD, 0xE3, 0x82, 0xAF, 0xE3, 0x82,
	0x99, 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0xA0, 0x52,
	0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD, 0xE3, 0x83,
	0xA1, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3,
	0x83, 0xAB, 0x52, 0xE3, 0x82, 0xAF, 0xE3, 0x82,
	// Bytes 2c00 - 2c3f
	0x99, 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0xA0, 0xE3,
	0x83, 0x88, 0xE3, 0x83, 0xB3, 0x52, 0xE3, 0x82,
	0xAF, 0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xBB, 0xE3,
	0x82, 0x99, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xAD,
	0x52, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0xE3,
	0x83, 0xBC, 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3,
	0xE3, 0x83, 0x88, 0x52, 0xE3, 0x83, 0x92, 0xE3,
	0x82, 0x9A, 0xE3, 0x82, 0xA2, 0xE3, 0x82, 0xB9,
	// Bytes 2c40 - 2c7f
	0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x52, 0xE3,
	0x83, 0x95, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x83,
	0xE3, 0x82, 0xB7, 0xE3, 0x82, 0xA7, 0xE3, 0x83,
	0xAB, 0x52, 0xE3, 0x83, 0x9F, 0xE3, 0x83, 0xAA,
	0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, 0xE3, 0x83,
	0xBC, 0xE3, 0x83, 0xAB, 0x52, 0xE3, 0x83, 0xAC,
	0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x82,
	0xB1, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xB3, 0x61,
	// Bytes 2c80 - 2cbf
	0xD8, 0xB5, 0xD9, 0x84, 0xD9, 0x89, 0x20, 0xD8,
	0xA7, 0xD9, 0x84, 0xD9, 0x84, 0xD9, 0x87, 0x20,
	0xD8, 0xB9, 0xD9, 0x84, 0xD9, 0x8A, 0xD9, 0x87,
	0x20, 0xD9, 0x88, 0xD8, 0xB3, 0xD9, 0x84, 0xD9,
	0x85, 0x06, 0xE0, 0xA7, 0x87, 0xE0, 0xA6, 0xBE,
	0x01, 0x06, 0xE0, 0xA7, 0x87, 0xE0, 0xA7, 0x97,
	0x01, 0x06, 0xE0, 0xAD, 0x87, 0xE0, 0xAC, 0xBE,
	0x01, 0x06, 0xE0, 0xAD, 0x87, 0xE0, 0xAD, 0x96,
	// Bytes 2cc0 - 2cff
	0x01, 0x06, 0xE0, 0xAD, 0x87, 0xE0, 0xAD, 0x97,
	0x01, 0x06, 0xE0, 0xAE, 0x92, 0xE0, 0xAF, 0x97,
	0x01, 0x06, 0xE0, 0xAF, 0x86, 0xE0, 0xAE, 0xBE,
	0x01, 0x06, 0xE0, 0xAF, 0x86, 0xE0, 0xAF, 0x97,
	0x01, 0x06, 0xE0, 0xAF, 0x87, 0xE0, 0xAE, 0xBE,
	0x01, 0x06, 0xE0, 0xB2, 0xBF, 0xE0, 0xB3, 0x95,
	0x01, 0x06, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x95,
	0x01, 0x06, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x96,
	// Bytes 2d00 - 2d3f
	0x01, 0x06, 0xE0, 0xB5, 0x86, 0xE0, 0xB4, 0xBE,
	0x01, 0x06, 0xE0, 0xB5, 0x86, 0xE0, 0xB5, 0x97,
	0x01, 0x06, 0xE0, 0xB5, 0x87, 0xE0, 0xB4, 0xBE,
	0x01, 0x06, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x9F,
	0x01, 0x06, 0xE1, 0x80, 0xA5, 0xE1, 0x80, 0xAE,
	0x01, 0x06, 0xE1, 0xAC, 0x85, 0xE1, 0xAC, 0xB5,
	0x01, 0x06, 0xE1, 0xAC, 0x87, 0xE1, 0xAC, 0xB5,
	0x01, 0x06, 0xE1, 0xAC, 0x89, 0xE1, 0xAC, 0xB5,
	// Bytes 2d40 - 2d7f
	0x01, 0x06, 0xE1, 0xAC, 0x8B, 0xE1, 0xAC, 0xB5,
	0x01, 0x06, 0xE1, 0xAC, 0x8D, 0xE1, 0xAC, 0xB5,
	0x01, 0x06, 0xE1, 0xAC, 0x91, 0xE1, 0xAC, 0xB5,
	0x01, 0x06, 0xE1, 0xAC, 0xBA, 0xE1, 0xAC, 0xB5,
	0x01, 0x06, 0xE1, 0xAC, 0xBC, 0xE1, 0xAC, 0xB5,
	0x01, 0x06, 0xE1, 0xAC, 0xBE, 0xE1, 0xAC, 0xB5,
	0x01, 0x06, 0xE1, 0xAC, 0xBF, 0xE1, 0xAC, 0xB5,
	0x01, 0x06, 0xE1, 0xAD, 0x82, 0xE1, 0xAC, 0xB5,
	// Bytes 2d80 - 2dbf
	0x01, 0x08, 0xF0, 0x91, 0x84, 0xB1, 0xF0, 0x91,
	0x84, 0xA7, 0x01, 0x08, 0xF0, 0x91, 0x84, 0xB2,
	0xF0, 0x91, 0x84, 0xA7, 0x01, 0x08, 0xF0, 0x91,
	0x8D, 0x87, 0xF0, 0x91, 0x8C, 0xBE, 0x01, 0x08,
	0xF0, 0x91, 0x8D, 0x87, 0xF0, 0x91, 0x8D, 0x97,
	0x01, 0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0, 0x91,
	0x92, 0xB0, 0x01, 0x08, 0xF0, 0x91, 0x92, 0xB9,
	0xF0, 0x91, 0x92, 0xBA, 0x01, 0x08, 0xF0, 0x91,
	// Bytes 2dc0 - 2dff
	0x92, 0xB9, 0xF0, 0x91, 0x92, 0xBD, 0x01, 0x08,
	0xF0, 0x91, 0x96, 0xB8, 0xF0, 0x91, 0x96, 0xAF,
	0x01, 0x08, 0xF0, 0x91, 0x96, 0xB9, 0xF0, 0x91,
	0x96, 0xAF, 0x01, 0x09, 0xE0, 0xB3, 0x86, 0xE0,
	0xB3, 0x82, 0xE0, 0xB3, 0x95, 0x02, 0x09, 0xE0,
	0xB7, 0x99, 0xE0, 0xB7, 0x8F, 0xE0, 0xB7, 0x8A,
	0x12, 0x44, 0x44, 0x5A, 0xCC, 0x8C, 0xC9, 0x44,
	0x44, 0x7A, 0xCC, 0x8C, 0xC9, 0x44, 0x64, 0x7A,
	// Bytes 2e00 - 2e3f
	0xCC, 0x8C, 0xC9, 0x46, 0xD9, 0x84, 0xD8, 0xA7,
	0xD9, 0x93, 0xC9, 0x46, 0xD9, 0x84, 0xD8, 0xA7,
	0xD9, 0x94, 0xC9, 0x46, 0xD9, 0x84, 0xD8, 0xA7,
	0xD9, 0x95, 0xB5, 0x46, 0xE1, 0x84, 0x80, 0xE1,
	0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x82, 0xE1,
	0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x83, 0xE1,
	0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x85, 0xE1,
	0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x86, 0xE1,
	// Bytes 2e40 - 2e7f
	0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x87, 0xE1,
	0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x89, 0xE1,
	0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x8B, 0xE1,
	0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x8B, 0xE1,
	0x85, 0xAE, 0x01, 0x46, 0xE1, 0x84, 0x8C, 0xE1,
	0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x8E, 0xE1,
	0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x8F, 0xE1,
	0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x90, 0xE1,
	// Bytes 2e80 - 2ebf
	0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x91, 0xE1,
	0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x92, 0xE1,
	0x85, 0xA1, 0x01, 0x49, 0xE3, 0x83, 0xA1, 0xE3,
	0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D, 0x4C, 0xE1,
	0x84, 0x8C, 0xE1, 0x85, 0xAE, 0xE1, 0x84, 0x8B,
	0xE1, 0x85, 0xB4, 0x01, 0x4C, 0xE3, 0x82, 0xAD,
	0xE3, 0x82, 0x99, 0xE3, 0x82, 0xAB, 0xE3, 0x82,
	0x99, 0x0D, 0x4C, 0xE3, 0x82, 0xB3, 0xE3, 0x83,
	// Bytes 2ec0 - 2eff
	0xBC, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0x0D,
	0x4C, 0xE3, 0x83, 0xA4, 0xE3, 0x83, 0xBC, 0xE3,
	0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE1,
	0x84, 0x8E, 0xE1, 0x85, 0xA1, 0xE1, 0x86, 0xB7,
	0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA9, 0x01, 0x4F,
	0xE3, 0x82, 0xA4, 0xE3, 0x83, 0x8B, 0xE3, 0x83,
	0xB3, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D,
	0x4F, 0xE3, 0x82, 0xB7, 0xE3, 0x83, 0xAA, 0xE3,
	// Bytes 2f00 - 2f3f
	0x83, 0xB3, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99,
	0x0D, 0x4F, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A,
	0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xB7, 0xE3, 0x82,
	0x99, 0x0D, 0x4F, 0xE3, 0x83, 0x9B, 0xE3, 0x82,
	0x9A, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88, 0xE3,
	0x82, 0x99, 0x0D, 0x52, 0xE3, 0x82, 0xA8, 0xE3,
	0x82, 0xB9, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xBC,
	0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D, 0x52,
	// Bytes 2f40 - 2f7f
	0xE3, 0x83, 0x95, 0xE3, 0x82, 0xA1, 0xE3, 0x83,
	0xA9, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0xE3,
	0x82, 0x99, 0x0D, 0x86, 0xE0, 0xB3, 0x86, 0xE0,
	0xB3, 0x82, 0x01, 0x86, 0xE0, 0xB7, 0x99, 0xE0,
	0xB7, 0x8F, 0x01, 0x03, 0x3C, 0xCC, 0xB8, 0x05,
	0x03, 0x3D, 0xCC, 0xB8, 0x05, 0x03, 0x3E, 0xCC,
	0xB8, 0x05, 0x03, 0x41, 0xCC, 0x80, 0xC9, 0x03,
	0x41, 0xCC, 0x81, 0xC9, 0x03, 0x41, 0xCC, 0x83,
	// Bytes 2f80 - 2fbf
	0xC9, 0x03, 0x41, 0xCC, 0x84, 0xC9, 0x03, 0x41,
	0xCC, 0x89, 0xC9, 0x03, 0x41, 0xCC, 0x8C, 0xC9,
	0x03, 0x41, 0xCC, 0x8F, 0xC9, 0x03, 0x41, 0xCC,
	0x91, 0xC9, 0x03, 0x41, 0xCC, 0xA5, 0xB5, 0x03,
	0x41, 0xCC, 0xA8, 0xA5, 0x03, 0x42, 0xCC, 0x87,
	0xC9, 0x03, 0x42, 0xCC, 0xA3, 0xB5, 0x03, 0x42,
	0xCC, 0xB1, 0xB5, 0x03, 0x43, 0xCC, 0x81, 0xC9,
	0x03, 0x43, 0xCC, 0x82, 0xC9, 0x03, 0x43, 0xCC,
	// Bytes 2fc0 - 2fff
	0x87, 0xC9, 0x03, 0x43, 0xCC, 0x8C, 0xC9, 0x03,
	0x44, 0xCC, 0x87, 0xC9, 0x03, 0x44, 0xCC, 0x8C,
	0xC9, 0x03, 0x44, 0xCC, 0xA3, 0xB5, 0x03, 0x44,
	0xCC, 0xA7, 0xA5, 0x03, 0x44, 0xCC, 0xAD, 0xB5,
	0x03, 0x44, 0xCC, 0xB1, 0xB5, 0x03, 0x45, 0xCC,
	0x80, 0xC9, 0x03, 0x45, 0xCC, 0x81, 0xC9, 0x03,
	0x45, 0xCC, 0x83, 0xC9, 0x03, 0x45, 0xCC, 0x86,
	0xC9, 0x03, 0x45, 0xCC, 0x87, 0xC9, 0x03, 0x45,
	// Bytes 3000 - 303f
	0xCC, 0x88, 0xC9, 0x03, 0x45, 0xCC, 0x89, 0xC9,
	0x03, 0x45, 0xCC, 0x8C, 0xC9, 0x03, 0x45, 0xCC,
	0x8F, 0xC9, 0x03, 0x45, 0xCC, 0x91, 0xC9, 0x03,
	0x45, 0xCC, 0xA8, 0xA5, 0x03, 0x45, 0xCC, 0xAD,
	0xB5, 0x03, 0x45, 0xCC, 0xB0, 0xB5, 0x03, 0x46,
	0xCC, 0x87, 0xC9, 0x03, 0x47, 0xCC, 0x81, 0xC9,
	0x03, 0x47, 0xCC, 0x82, 0xC9, 0x03, 0x47, 0xCC,
	0x84, 0xC9, 0x03, 0x47, 0xCC, 0x86, 0xC9, 0x03,
	// Bytes 3040 - 307f
	0x47, 0xCC, 0x87, 0xC9, 0x03, 0x47, 0xCC, 0x8C,
	0xC9, 0x03, 0x47, 0xCC, 0xA7, 0xA5, 0x03, 0x48,
	0xCC, 0x82, 0xC9, 0x03, 0x48, 0xCC, 0x87, 0xC9,
	0x03, 0x48, 0xCC, 0x88, 0xC9, 0x03, 0x48, 0xCC,
	0x8C, 0xC9, 0x03, 0x48, 0xCC, 0xA3, 0xB5, 0x03,
	0x48, 0xCC, 0xA7, 0xA5, 0x03, 0x48, 0xCC, 0xAE,
	0xB5, 0x03, 0x49, 0xCC, 0x80, 0xC9, 0x03, 0x49,
	0xCC, 0x81, 0xC9, 0x03, 0x49, 0xCC, 0x82, 0xC9,
	// Bytes 3080 - 30bf
	0x03, 0x49, 0xCC, 0x83, 0xC9, 0x03, 0x49, 0xCC,
	0x84, 0xC9, 0x03, 0x49, 0xCC, 0x86, 0xC9, 0x03,
	0x49, 0xCC, 0x87, 0xC9, 0x03, 0x49, 0xCC, 0x89,
	0xC9, 0x03, 0x49, 0xCC, 0x8C, 0xC9, 0x03, 0x49,
	0xCC, 0x8F, 0xC9, 0x03, 0x49, 0xCC, 0x91, 0xC9,
	0x03, 0x49, 0xCC, 0xA3, 0xB5, 0x03, 0x49, 0xCC,
	0xA8, 0xA5, 0x03, 0x49, 0xCC, 0xB0, 0xB5, 0x03,
	0x4A, 0xCC, 0x82, 0xC9, 0x03, 0x4B, 0xCC, 0x81,
	// Bytes 30c0 - 30ff
	0xC9, 0x03, 0x4B, 0xCC, 0x8C, 0xC9, 0x03, 0x4B,
	0xCC, 0xA3, 0xB5, 0x03, 0x4B, 0xCC, 0xA7, 0xA5,
	0x03, 0x4B, 0xCC, 0xB1, 0xB5, 0x03, 0x4C, 0xCC,
	0x81, 0xC9, 0x03, 0x4C, 0xCC, 0x8C, 0xC9, 0x03,
	0x4C, 0xCC, 0xA7, 0xA5, 0x03, 0x4C, 0xCC, 0xAD,
	0xB5, 0x03, 0x4C, 0xCC, 0xB1, 0xB5, 0x03, 0x4D,
	0xCC, 0x81, 0xC9, 0x03, 0x4D, 0xCC, 0x87, 0xC9,
	0x03, 0x4D, 0xCC, 0xA3, 0xB5, 0x03, 0x4E, 0xCC,
	// Bytes 3100 - 313f
	0x80, 0xC9, 0x03, 0x4E, 0xCC, 0x81, 0xC9, 0x03,
	0x4E, 0xCC, 0x83, 0xC9, 0x03, 0x4E, 0xCC, 0x87,
	0xC9, 0x03, 0x4E, 0xCC, 0x8C, 0xC9, 0x03, 0x4E,
	0xCC, 0xA3, 0xB5, 0x03, 0x4E, 0xCC, 0xA7, 0xA5,
	0x03, 0x4E, 0xCC, 0xAD, 0xB5, 0x03, 0x4E, 0xCC,
	0xB1, 0xB5, 0x03, 0x4F, 0xCC, 0x80, 0xC9, 0x03,
	0x4F, 0xCC, 0x81, 0xC9, 0x03, 0x4F, 0xCC, 0x86,
	0xC9, 0x03, 0x4F, 0xCC, 0x89, 0xC9, 0x03, 0x4F,
	// Bytes 3140 - 317f
	0xCC, 0x8B, 0xC9, 0x03, 0x4F, 0xCC, 0x8C, 0xC9,
	0x03, 0x4F, 0xCC, 0x8F, 0xC9, 0x03, 0x4F, 0xCC,
	0x91, 0xC9, 0x03, 0x50, 0xCC, 0x81, 0xC9, 0x03,
	0x50, 0xCC, 0x87, 0xC9, 0x03, 0x52, 0xCC, 0x81,
	0xC9, 0x03, 0x52, 0xCC, 0x87, 0xC9, 0x03, 0x52,
	0xCC, 0x8C, 0xC9, 0x03, 0x52, 0xCC, 0x8F, 0xC9,
	0x03, 0x52, 0xCC, 0x91, 0xC9, 0x03, 0x52, 0xCC,
	0xA7, 0xA5, 0x03, 0x52, 0xCC, 0xB1, 0xB5, 0x03,
	// Bytes 3180 - 31bf
	0x53, 0xCC, 0x82, 0xC9, 0x03, 0x53, 0xCC, 0x87,
	0xC9, 0x03, 0x53, 0xCC, 0xA6, 0xB5, 0x03, 0x53,
	0xCC, 0xA7, 0xA5, 0x03, 0x54, 0xCC, 0x87, 0xC9,
	0x03, 0x54, 0xCC, 0x8C, 0xC9, 0x03, 0x54, 0xCC,
	0xA3, 0xB5, 0x03, 0x54, 0xCC, 0xA6, 0xB5, 0x03,
	0x54, 0xCC, 0xA7, 0xA5, 0x03, 0x54, 0xCC, 0xAD,
	0xB5, 0x03, 0x54, 0xCC, 0xB1, 0xB5, 0x03, 0x55,
	0xCC, 0x80, 0xC9, 0x03, 0x55, 0xCC, 0x81, 0xC9,
	// Bytes 31c0 - 31ff
	0x03, 0x55, 0xCC, 0x82, 0xC9, 0x03, 0x55, 0xCC,
	0x86, 0xC9, 0x03, 0x55, 0xCC, 0x89, 0xC9, 0x03,
	0x55, 0xCC, 0x8A, 0xC9, 0x03, 0x55, 0xCC, 0x8B,
	0xC9, 0x03, 0x55, 0xCC, 0x8C, 0xC9, 0x03, 0x55,
	0xCC, 0x8F, 0xC9, 0x03, 0x55, 0xCC, 0x91, 0xC9,
	0x03, 0x55, 0xCC, 0xA3, 0xB5, 0x03, 0x55, 0xCC,
	0xA4, 0xB5, 0x03, 0x55, 0xCC, 0xA8, 0xA5, 0x03,
	0x55, 0xCC, 0xAD, 0xB5, 0x03, 0x55, 0xCC, 0xB0,
	// Bytes 3200 - 323f
	0xB5, 0x03, 0x56, 0xCC, 0x83, 0xC9, 0x03, 0x56,
	0xCC, 0xA3, 0xB5, 0x03, 0x57, 0xCC, 0x80, 0xC9,
	0x03, 0x57, 0xCC, 0x81, 0xC9, 0x03, 0x57, 0xCC,
	0x82, 0xC9, 0x03, 0x57, 0xCC, 0x87, 0xC9, 0x03,
	0x57, 0xCC, 0x88, 0xC9, 0x03, 0x57, 0xCC, 0xA3,
	0xB5, 0x03, 0x58, 0xCC, 0x87, 0xC9, 0x03, 0x58,
	0xCC, 0x88, 0xC9, 0x03, 0x59, 0xCC, 0x80, 0xC9,
	0x03, 0x59, 0xCC, 0x81, 0xC9, 0x03, 0x59, 0xCC,
	// Bytes 3240 - 327f
	0x82, 0xC9, 0x03, 0x59, 0xCC, 0x83, 0xC9, 0x03,
	0x59, 0xCC, 0x84, 0xC9, 0x03, 0x59, 0xCC, 0x87,
	0xC9, 0x03, 0x59, 0xCC, 0x88, 0xC9, 0x03, 0x59,
	0xCC, 0x89, 0xC9, 0x03, 0x59, 0xCC, 0xA3, 0xB5,
	0x03, 0x5A, 0xCC, 0x81, 0xC9, 0x03, 0x5A, 0xCC,
	0x82, 0xC9, 0x03, 0x5A, 0xCC, 0x87, 0xC9, 0x03,
	0x5A, 0xCC, 0x8C, 0xC9, 0x03, 0x5A, 0xCC, 0xA3,
	0xB5, 0x03, 0x5A, 0xCC, 0xB1, 0xB5, 0x03, 0x61,
	// Bytes 3280 - 32bf
	0xCC, 0x80, 0xC9, 0x03, 0x61, 0xCC, 0x81, 0xC9,
	0x03, 0x61, 0xCC, 0x83, 0xC9, 0x03, 0x61, 0xCC,
	0x84, 0xC9, 0x03, 0x61, 0xCC, 0x89, 0xC9, 0x03,
	0x61, 0xCC, 0x8C, 0xC9, 0x03, 0x61, 0xCC, 0x8F,
	0xC9, 0x03, 0x61, 0xCC, 0x91, 0xC9, 0x03, 0x61,
	0xCC, 0xA5, 0xB5, 0x03, 0x61, 0xCC, 0xA8, 0xA5,
	0x03, 0x62, 0xCC, 0x87, 0xC9, 0x03, 0x62, 0xCC,
	0xA3, 0xB5, 0x03, 0x62, 0xCC, 0xB1, 0xB5, 0x03,
	// Bytes 32c0 - 32ff
	0x63, 0xCC, 0x81, 0xC9, 0x03, 0x63, 0xCC, 0x82,
	0xC9, 0x03, 0x63, 0xCC, 0x87, 0xC9, 0x03, 0x63,
	0xCC, 0x8C, 0xC9, 0x03, 0x64, 0xCC, 0x87, 0xC9,
	0x03, 0x64, 0xCC, 0x8C, 0xC9, 0x03, 0x64, 0xCC,
	0xA3, 0xB5, 0x03, 0x64, 0xCC, 0xA7, 0xA5, 0x03,
	0x64, 0xCC, 0xAD, 0xB5, 0x03, 0x64, 0xCC, 0xB1,
	0xB5, 0x03, 0x65, 0xCC, 0x80, 0xC9, 0x03, 0x65,
	0xCC, 0x81, 0xC9, 0x03, 0x65, 0xCC, 0x83, 0xC9,
	// Bytes 3300 - 333f
	0x03, 0x65, 0xCC, 0x86, 0xC9, 0x03, 0x65, 0xCC,
	0x87, 0xC9, 0x03, 0x65, 0xCC, 0x88, 0xC9, 0x03,
	0x65, 0xCC, 0x89, 0xC9, 0x03, 0x65, 0xCC, 0x8C,
	0xC9, 0x03, 0x65, 0xCC, 0x8F, 0xC9, 0x03, 0x65,
	0xCC, 0x91, 0xC9, 0x03, 0x65, 0xCC, 0xA8, 0xA5,
	0x03, 0x65, 0xCC, 0xAD, 0xB5, 0x03, 0x65, 0xCC,
	0xB0, 0xB5, 0x03, 0x66, 0xCC, 0x87, 0xC9, 0x03,
	0x67, 0xCC, 0x81, 0xC9, 0x03, 0x67, 0xCC, 0x82,
	// Bytes 3340 - 337f
	0xC9, 0x03, 0x67, 0xCC, 0x84, 0xC9, 0x03, 0x67,
	0xCC, 0x86, 0xC9, 0x03, 0x67, 0xCC, 0x87, 0xC9,
	0x03, 0x67, 0xCC, 0x8C, 0xC9, 0x03, 0x67, 0xCC,
	0xA7, 0xA5, 0x03, 0x68, 0xCC, 0x82, 0xC9, 0x03,
	0x68, 0xCC, 0x87, 0xC9, 0x03, 0x68, 0xCC, 0x88,
	0xC9, 0x03, 0x68, 0xCC, 0x8C, 0xC9, 0x03, 0x68,
	0xCC, 0xA3, 0xB5, 0x03, 0x68, 0xCC, 0xA7, 0xA5,
	0x03, 0x68, 0xCC, 0xAE, 0xB5, 0x03, 0x68, 0xCC,
	// Bytes 3380 - 33bf
	0xB1, 0xB5, 0x03, 0x69, 0xCC, 0x80, 0xC9, 0x03,
	0x69, 0xCC, 0x81, 0xC9, 0x03, 0x69, 0xCC, 0x82,
	0xC9, 0x03, 0x69, 0xCC, 0x83, 0xC9, 0x03, 0x69,
	0xCC, 0x84, 0xC9, 0x03, 0x69, 0xCC, 0x86, 0xC9,
	0x03, 0x69, 0xCC, 0x89, 0xC9, 0x03, 0x69, 0xCC,
	0x8C, 0xC9, 0x03, 0x69, 0xCC, 0x8F, 0xC9, 0x03,
	0x69, 0xCC, 0x91, 0xC9, 0x03, 0x69, 0xCC, 0xA3,
	0xB5, 0x03, 0x69, 0xCC, 0xA8, 0xA5, 0x03, 0x69,
	// Bytes 33c0 - 33ff
	0xCC, 0xB0, 0xB5, 0x03, 0x6A, 0xCC, 0x82, 0xC9,
	0x03, 0x6A, 0xCC, 0x8C, 0xC9, 0x03, 0x6B, 0xCC,
	0x81, 0xC9, 0x03, 0x6B, 0xCC, 0x8C, 0xC9, 0x03,
	0x6B, 0xCC, 0xA3, 0xB5, 0x03, 0x6B, 0xCC, 0xA7,
	0xA5, 0x03, 0x6B, 0xCC, 0xB1, 0xB5, 0x03, 0x6C,
	0xCC, 0x81, 0xC9, 0x03, 0x6C, 0xCC, 0x8C, 0xC9,
	0x03, 0x6C, 0xCC, 0xA7, 0xA5, 0x03, 0x6C, 0xCC,
	0xAD, 0xB5, 0x03, 0x6C, 0xCC, 0xB1, 0xB5, 0x03,
	// Bytes 3400 - 343f
	0x6D, 0xCC, 0x81, 0xC9, 0x03, 0x6D, 0xCC, 0x87,
	0xC9, 0x03, 0x6D, 0xCC, 0xA3, 0xB5, 0x03, 0x6E,
	0xCC, 0x80, 0xC9, 0x03, 0x6E, 0xCC, 0x81, 0xC9,
	0x03, 0x6E, 0xCC, 0x83, 0xC9, 0x03, 0x6E, 0xCC,
	0x87, 0xC9, 0x03, 0x6E, 0xCC, 0x8C, 0xC9, 0x03,
	0x6E, 0xCC, 0xA3, 0xB5, 0x03, 0x6E, 0xCC, 0xA7,
	0xA5, 0x03, 0x6E, 0xCC, 0xAD, 0xB5, 0x03, 0x6E,
	0xCC, 0xB1, 0xB5, 0x03, 0x6F, 0xCC, 0x80, 0xC9,
	// Bytes 3440 - 347f
	0x03, 0x6F, 0xCC, 0x81, 0xC9, 0x03, 0x6F, 0xCC,
	0x86, 0xC9, 0x03, 0x6F, 0xCC, 0x89, 0xC9, 0x03,
	0x6F, 0xCC, 0x8B, 0xC9, 0x03, 0x6F, 0xCC, 0x8C,
	0xC9, 0x03, 0x6F, 0xCC, 0x8F, 0xC9, 0x03, 0x6F,
	0xCC, 0x91, 0xC9, 0x03, 0x70, 0xCC, 0x81, 0xC9,
	0x03, 0x70, 0xCC, 0x87, 0xC9, 0x03, 0x72, 0xCC,
	0x81, 0xC9, 0x03, 0x72, 0xCC, 0x87, 0xC9, 0x03,
	0x72, 0xCC, 0x8C, 0xC9, 0x03, 0x72, 0xCC, 0x8F,
	// Bytes 3480 - 34bf
	0xC9, 0x03, 0x72, 0xCC, 0x91, 0xC9, 0x03, 0x72,
	0xCC, 0xA7, 0xA5, 0x03, 0x72, 0xCC, 0xB1, 0xB5,
	0x03, 0x73, 0xCC, 0x82, 0xC9, 0x03, 0x73, 0xCC,
	0x87, 0xC9, 0x03, 0x73, 0xCC, 0xA6, 0xB5, 0x03,
	0x73, 0xCC, 0xA7, 0xA5, 0x03, 0x74, 0xCC, 0x87,
	0xC9, 0x03, 0x74, 0xCC, 0x88, 0xC9, 0x03, 0x74,
	0xCC, 0x8C, 0xC9, 0x03, 0x74, 0xCC, 0xA3, 0xB5,
	0x03, 0x74, 0xCC, 0xA6, 0xB5, 0x03, 0x74, 0xCC,
	// Bytes 34c0 - 34ff
	0xA7, 0xA5, 0x03, 0x74, 0xCC, 0xAD, 0xB5, 0x03,
	0x74, 0xCC, 0xB1, 0xB5, 0x03, 0x75, 0xCC, 0x80,
	0xC9, 0x03, 0x75, 0xCC, 0x81, 0xC9, 0x03, 0x75,
	0xCC, 0x82, 0xC9, 0x03, 0x75, 0xCC, 0x86, 0xC9,
	0x03, 0x75, 0xCC, 0x89, 0xC9, 0x03, 0x75, 0xCC,
	0x8A, 0xC9, 0x03, 0x75, 0xCC, 0x8B, 0xC9, 0x03,
	0x75, 0xCC, 0x8C, 0xC9, 0x03, 0x75, 0xCC, 0x8F,
	0xC9, 0x03, 0x75, 0xCC, 0x91, 0xC9, 0x03, 0x75,
	// Bytes 3500 - 353f
	0xCC, 0xA3, 0xB5, 0x03, 0x75, 0xCC, 0xA4, 0xB5,
	0x03, 0x75, 0xCC, 0xA8, 0xA5, 0x03, 0x75, 0xCC,
	0xAD, 0xB5, 0x03, 0x75, 0xCC, 0xB0, 0xB5, 0x03,
	0x76, 0xCC, 0x83, 0xC9, 0x03, 0x76, 0xCC, 0xA3,
	0xB5, 0x03, 0x77, 0xCC, 0x80, 0xC9, 0x03, 0x77,
	0xCC, 0x81, 0xC9, 0x03, 0x77, 0xCC, 0x82, 0xC9,
	0x03, 0x77, 0xCC, 0x87, 0xC9, 0x03, 0x77, 0xCC,
	0x88, 0xC9, 0x03, 0x77, 0xCC, 0x8A, 0xC9, 0x03,
	// Bytes 3540 - 357f
	0x77, 0xCC, 0xA3, 0xB5, 0x03, 0x78, 0xCC, 0x87,
	0xC9, 0x03, 0x78, 0xCC, 0x88, 0xC9, 0x03, 0x79,
	0xCC, 0x80, 0xC9, 0x03, 0x79, 0xCC, 0x81, 0xC9,
	0x03, 0x79, 0xCC, 0x82, 0xC9, 0x03, 0x79, 0xCC,
	0x83, 0xC9, 0x03, 0x79, 0xCC, 0x84, 0xC9, 0x03,
	0x79, 0xCC, 0x87, 0xC9, 0x03, 0x79, 0xCC, 0x88,
	0xC9, 0x03, 0x79, 0xCC, 0x89, 0xC9, 0x03, 0x79,
	0xCC, 0x8A, 0xC9, 0x03, 0x79, 0xCC, 0xA3, 0xB5,
	// Bytes 3580 - 35bf
	0x03, 0x7A, 0xCC, 0x81, 0xC9, 0x03, 0x7A, 0xCC,
	0x82, 0xC9, 0x03, 0x7A, 0xCC, 0x87, 0xC9, 0x03,
	0x7A, 0xCC, 0x8C, 0xC9, 0x03, 0x7A, 0xCC, 0xA3,
	0xB5, 0x03, 0x7A, 0xCC, 0xB1, 0xB5, 0x04, 0xC2,
	0xA8, 0xCC, 0x80, 0xCA, 0x04, 0xC2, 0xA8, 0xCC,
	0x81, 0xCA, 0x04, 0xC2, 0xA8, 0xCD, 0x82, 0xCA,
	0x04, 0xC3, 0x86, 0xCC, 0x81, 0xC9, 0x04, 0xC3,
	0x86, 0xCC, 0x84, 0xC9, 0x04, 0xC3, 0x98, 0xCC,
	// Bytes 35c0 - 35ff
	0x81, 0xC9, 0x04, 0xC3, 0xA6, 0xCC, 0x81, 0xC9,
	0x04, 0xC3, 0xA6, 0xCC, 0x84, 0xC9, 0x04, 0xC3,
	0xB8, 0xCC, 0x81, 0xC9, 0x04, 0xC5, 0xBF, 0xCC,
	0x87, 0xC9, 0x04, 0xC6, 0xB7, 0xCC, 0x8C, 0xC9,
	0x04, 0xCA, 0x92, 0xCC, 0x8C, 0xC9, 0x04, 0xCE,
	0x91, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x91, 0xCC,
	0x81, 0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x84, 0xC9,
	0x04, 0xCE, 0x91, 0xCC, 0x86, 0xC9, 0x04, 0xCE,
	// Bytes 3600 - 363f
	0x91, 0xCD, 0x85, 0xD9, 0x04, 0xCE, 0x95, 0xCC,
	0x80, 0xC9, 0x04, 0xCE, 0x95, 0xCC, 0x81, 0xC9,
	0x04, 0xCE, 0x97, 0xCC, 0x80, 0xC9, 0x04, 0xCE,
	0x97, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x97, 0xCD,
	0x85, 0xD9, 0x04, 0xCE, 0x99, 0xCC, 0x80, 0xC9,
	0x04, 0xCE, 0x99, 0xCC, 0x81, 0xC9, 0x04, 0xCE,
	0x99, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0x99, 0xCC,
	0x86, 0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x88, 0xC9,
	// Bytes 3640 - 367f
	0x04, 0xCE, 0x9F, 0xCC, 0x80, 0xC9, 0x04, 0xCE,
	0x9F, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xA1, 0xCC,
	0x94, 0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x80, 0xC9,
	0x04, 0xCE, 0xA5, 0xCC, 0x81, 0xC9, 0x04, 0xCE,
	0xA5, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xA5, 0xCC,
	0x86, 0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x88, 0xC9,
	0x04, 0xCE, 0xA9, 0xCC, 0x80, 0xC9, 0x04, 0xCE,
	0xA9, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xA9, 0xCD,
	// Bytes 3680 - 36bf
	0x85, 0xD9, 0x04, 0xCE, 0xB1, 0xCC, 0x84, 0xC9,
	0x04, 0xCE, 0xB1, 0xCC, 0x86, 0xC9, 0x04, 0xCE,
	0xB1, 0xCD, 0x85, 0xD9, 0x04, 0xCE, 0xB5, 0xCC,
	0x80, 0xC9, 0x04, 0xCE, 0xB5, 0xCC, 0x81, 0xC9,
	0x04, 0xCE, 0xB7, 0xCD, 0x85, 0xD9, 0x04, 0xCE,
	0xB9, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xB9, 0xCC,
	0x81, 0xC9, 0x04, 0xCE, 0xB9, 0xCC, 0x84, 0xC9,
	0x04, 0xCE, 0xB9, 0xCC, 0x86, 0xC9, 0x04, 0xCE,
	// Bytes 36c0 - 36ff
	0xB9, 0xCD, 0x82, 0xC9, 0x04, 0xCE, 0xBF, 0xCC,
	0x80, 0xC9, 0x04, 0xCE, 0xBF, 0xCC, 0x81, 0xC9,
	0x04, 0xCF, 0x81, 0xCC, 0x93, 0xC9, 0x04, 0xCF,
	0x81, 0xCC, 0x94, 0xC9, 0x04, 0xCF, 0x85, 0xCC,
	0x80, 0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x81, 0xC9,
	0x04, 0xCF, 0x85, 0xCC, 0x84, 0xC9, 0x04, 0xCF,
	0x85, 0xCC, 0x86, 0xC9, 0x04, 0xCF, 0x85, 0xCD,
	0x82, 0xC9, 0x04, 0xCF, 0x89, 0xCD, 0x85, 0xD9,
	// Bytes 3700 - 373f
	0x04, 0xCF, 0x92, 0xCC, 0x81, 0xC9, 0x04, 0xCF,
	0x92, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x86, 0xCC,
	0x88, 0xC9, 0x04, 0xD0, 0x90, 0xCC, 0x86, 0xC9,
	0x04, 0xD0, 0x90, 0xCC, 0x88, 0xC9, 0x04, 0xD0,
	0x93, 0xCC, 0x81, 0xC9, 0x04, 0xD0, 0x95, 0xCC,
	0x80, 0xC9, 0x04, 0xD0, 0x95, 0xCC, 0x86, 0xC9,
	0x04, 0xD0, 0x95, 0xCC, 0x88, 0xC9, 0x04, 0xD0,
	0x96, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x96, 0xCC,
	// Bytes 3740 - 377f
	0x88, 0xC9, 0x04, 0xD0, 0x97, 0xCC, 0x88, 0xC9,
	0x04, 0xD0, 0x98, 0xCC, 0x80, 0xC9, 0x04, 0xD0,
	0x98, 0xCC, 0x84, 0xC9, 0x04, 0xD0, 0x98, 0xCC,
	0x86, 0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x88, 0xC9,
	0x04, 0xD0, 0x9A, 0xCC, 0x81, 0xC9, 0x04, 0xD0,
	0x9E, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xA3, 0xCC,
	0x84, 0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x86, 0xC9,
	0x04, 0xD0, 0xA3, 0xCC, 0x88, 0xC9, 0x04, 0xD0,
	// Bytes 3780 - 37bf
	0xA3, 0xCC, 0x8B, 0xC9, 0x04, 0xD0, 0xA7, 0xCC,
	0x88, 0xC9, 0x04, 0xD0, 0xAB, 0xCC, 0x88, 0xC9,
	0x04, 0xD0, 0xAD, 0xCC, 0x88, 0xC9, 0x04, 0xD0,
	0xB0, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB0, 0xCC,
	0x88, 0xC9, 0x04, 0xD0, 0xB3, 0xCC, 0x81, 0xC9,
	0x04, 0xD0, 0xB5, 0xCC, 0x80, 0xC9, 0x04, 0xD0,
	0xB5, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB5, 0xCC,
	0x88, 0xC9, 0x04, 0xD0, 0xB6, 0xCC, 0x86, 0xC9,
	// Bytes 37c0 - 37ff
	0x04, 0xD0, 0xB6, 0xCC, 0x88, 0xC9, 0x04, 0xD0,
	0xB7, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB8, 0xCC,
	0x80, 0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x84, 0xC9,
	0x04, 0xD0, 0xB8, 0xCC, 0x86, 0xC9, 0x04, 0xD0,
	0xB8, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xBA, 0xCC,
	0x81, 0xC9, 0x04, 0xD0, 0xBE, 0xCC, 0x88, 0xC9,
	0x04, 0xD1, 0x83, 0xCC, 0x84, 0xC9, 0x04, 0xD1,
	0x83, 0xCC, 0x86, 0xC9, 0x04, 0xD1, 0x83, 0xCC,
	// Bytes 3800 - 383f
	0x88, 0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x8B, 0xC9,
	0x04, 0xD1, 0x87, 0xCC, 0x88, 0xC9, 0x04, 0xD1,
	0x8B, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x8D, 0xCC,
	0x88, 0xC9, 0x04, 0xD1, 0x96, 0xCC, 0x88, 0xC9,
	0x04, 0xD1, 0xB4, 0xCC, 0x8F, 0xC9, 0x04, 0xD1,
	0xB5, 0xCC, 0x8F, 0xC9, 0x04, 0xD3, 0x98, 0xCC,
	0x88, 0xC9, 0x04, 0xD3, 0x99, 0xCC, 0x88, 0xC9,
	0x04, 0xD3, 0xA8, 0xCC, 0x88, 0xC9, 0x04, 0xD3,
	// Bytes 3840 - 387f
	0xA9, 0xCC, 0x88, 0xC9, 0x04, 0xD8, 0xA7, 0xD9,
	0x93, 0xC9, 0x04, 0xD8, 0xA7, 0xD9, 0x94, 0xC9,
	0x04, 0xD8, 0xA7, 0xD9, 0x95, 0xB5, 0x04, 0xD9,
	0x88, 0xD9, 0x94, 0xC9, 0x04, 0xD9, 0x8A, 0xD9,
	0x94, 0xC9, 0x04, 0xDB, 0x81, 0xD9, 0x94, 0xC9,
	0x04, 0xDB, 0x92, 0xD9, 0x94, 0xC9, 0x04, 0xDB,
	0x95, 0xD9, 0x94, 0xC9, 0x05, 0x41, 0xCC, 0x82,
	0xCC, 0x80, 0xCA, 0x05, 0x41, 0xCC, 0x82, 0xCC,
	// Bytes 3880 - 38bf
	0x81, 0xCA, 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x83,
	0xCA, 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x89, 0xCA,
	0x05, 0x41, 0xCC, 0x86, 0xCC, 0x80, 0xCA, 0x05,
	0x41, 0xCC, 0x86, 0xCC, 0x81, 0xCA, 0x05, 0x41,
	0xCC, 0x86, 0xCC, 0x83, 0xCA, 0x05, 0x41, 0xCC,
	0x86, 0xCC, 0x89, 0xCA, 0x05, 0x41, 0xCC, 0x87,
	0xCC, 0x84, 0xCA, 0x05, 0x41, 0xCC, 0x88, 0xCC,
	0x84, 0xCA, 0x05, 0x41, 0xCC, 0x8A, 0xCC, 0x81,
	// Bytes 38c0 - 38ff
	0xCA, 0x05, 0x41, 0xCC, 0xA3, 0xCC, 0x82, 0xCA,
	0x05, 0x41, 0xCC, 0xA3, 0xCC, 0x86, 0xCA, 0x05,
	0x43, 0xCC, 0xA7, 0xCC, 0x81, 0xCA, 0x05, 0x45,
	0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05, 0x45, 0xCC,
	0x82, 0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC, 0x82,
	0xCC, 0x83, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC,
	0x89, 0xCA, 0x05, 0x45, 0xCC, 0x84, 0xCC, 0x80,
	0xCA, 0x05, 0x45, 0xCC, 0x84, 0xCC, 0x81, 0xCA,
	// Bytes 3900 - 393f
	0x05, 0x45, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05,
	0x45, 0xCC, 0xA7, 0xCC, 0x86, 0xCA, 0x05, 0x49,
	0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05, 0x4C, 0xCC,
	0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x4F, 0xCC, 0x82,
	0xCC, 0x80, 0xCA, 0x05, 0x4F, 0xCC, 0x82, 0xCC,
	0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x83,
	0xCA, 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x89, 0xCA,
	0x05, 0x4F, 0xCC, 0x83, 0xCC, 0x81, 0xCA, 0x05,
	// Bytes 3940 - 397f
	0x4F, 0xCC, 0x83, 0xCC, 0x84, 0xCA, 0x05, 0x4F,
	0xCC, 0x83, 0xCC, 0x88, 0xCA, 0x05, 0x4F, 0xCC,
	0x84, 0xCC, 0x80, 0xCA, 0x05, 0x4F, 0xCC, 0x84,
	0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x87, 0xCC,
	0x84, 0xCA, 0x05, 0x4F, 0xCC, 0x88, 0xCC, 0x84,
	0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0x80, 0xCA,
	0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0x81, 0xCA, 0x05,
	0x4F, 0xCC, 0x9B, 0xCC, 0x83, 0xCA, 0x05, 0x4F,
	// Bytes 3980 - 39bf
	0xCC, 0x9B, 0xCC, 0x89, 0xCA, 0x05, 0x4F, 0xCC,
	0x9B, 0xCC, 0xA3, 0xB6, 0x05, 0x4F, 0xCC, 0xA3,
	0xCC, 0x82, 0xCA, 0x05, 0x4F, 0xCC, 0xA8, 0xCC,
	0x84, 0xCA, 0x05, 0x52, 0xCC, 0xA3, 0xCC, 0x84,
	0xCA, 0x05, 0x53, 0xCC, 0x81, 0xCC, 0x87, 0xCA,
	0x05, 0x53, 0xCC, 0x8C, 0xCC, 0x87, 0xCA, 0x05,
	0x53, 0xCC, 0xA3, 0xCC, 0x87, 0xCA, 0x05, 0x55,
	0xCC, 0x83, 0xCC, 0x81, 0xCA, 0x05, 0x55, 0xCC,
	// Bytes 39c0 - 39ff
	0x84, 0xCC, 0x88, 0xCA, 0x05, 0x55, 0xCC, 0x88,
	0xCC, 0x80, 0xCA, 0x05, 0x55, 0xCC, 0x88, 0xCC,
	0x81, 0xCA, 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x84,
	0xCA, 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x8C, 0xCA,
	0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x80, 0xCA, 0x05,
	0x55, 0xCC, 0x9B, 0xCC, 0x81, 0xCA, 0x05, 0x55,
	0xCC, 0x9B, 0xCC, 0x83, 0xCA, 0x05, 0x55, 0xCC,
	0x9B, 0xCC, 0x89, 0xCA, 0x05, 0x55, 0xCC, 0x9B,
	// Bytes 3a00 - 3a3f
	0xCC, 0xA3, 0xB6, 0x05, 0x61, 0xCC, 0x82, 0xCC,
	0x80, 0xCA, 0x05, 0x61, 0xCC, 0x82, 0xCC, 0x81,
	0xCA, 0x05, 0x61, 0xCC, 0x82, 0xCC, 0x83, 0xCA,
	0x05, 0x61, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05,
	0x61, 0xCC, 0x86, 0xCC, 0x80, 0xCA, 0x05, 0x61,
	0xCC, 0x86, 0xCC, 0x81, 0xCA, 0x05, 0x61, 0xCC,
	0x86, 0xCC, 0x83, 0xCA, 0x05, 0x61, 0xCC, 0x86,
	0xCC, 0x89, 0xCA, 0x05, 0x61, 0xCC, 0x87, 0xCC,
	// Bytes 3a40 - 3a7f
	0x84, 0xCA, 0x05, 0x61, 0xCC, 0x88, 0xCC, 0x84,
	0xCA, 0x05, 0x61, 0xCC, 0x8A, 0xCC, 0x81, 0xCA,
	0x05, 0x61, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05,
	0x61, 0xCC, 0xA3, 0xCC, 0x86, 0xCA, 0x05, 0x63,
	0xCC, 0xA7, 0xCC, 0x81, 0xCA, 0x05, 0x65, 0xCC,
	0x82, 0xCC, 0x80, 0xCA, 0x05, 0x65, 0xCC, 0x82,
	0xCC, 0x81, 0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC,
	0x83, 0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x89,
	// Bytes 3a80 - 3abf
	0xCA, 0x05, 0x65, 0xCC, 0x84, 0xCC, 0x80, 0xCA,
	0x05, 0x65, 0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05,
	0x65, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x65,
	0xCC, 0xA7, 0xCC, 0x86, 0xCA, 0x05, 0x69, 0xCC,
	0x88, 0xCC, 0x81, 0xCA, 0x05, 0x6C, 0xCC, 0xA3,
	0xCC, 0x84, 0xCA, 0x05, 0x6F, 0xCC, 0x82, 0xCC,
	0x80, 0xCA, 0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x81,
	0xCA, 0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x83, 0xCA,
	// Bytes 3ac0 - 3aff
	0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05,
	0x6F, 0xCC, 0x83, 0xCC, 0x81, 0xCA, 0x05, 0x6F,
	0xCC, 0x83, 0xCC, 0x84, 0xCA, 0x05, 0x6F, 0xCC,
	0x83, 0xCC, 0x88, 0xCA, 0x05, 0x6F, 0xCC, 0x84,
	0xCC, 0x80, 0xCA, 0x05, 0x6F, 0xCC, 0x84, 0xCC,
	0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x87, 0xCC, 0x84,
	0xCA, 0x05, 0x6F, 0xCC, 0x88, 0xCC, 0x84, 0xCA,
	0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x80, 0xCA, 0x05,
	// Bytes 3b00 - 3b3f
	0x6F, 0xCC, 0x9B, 0xCC, 0x81, 0xCA, 0x05, 0x6F,
	0xCC, 0x9B, 0xCC, 0x83, 0xCA, 0x05, 0x6F, 0xCC,
	0x9B, 0xCC, 0x89, 0xCA, 0x05, 0x6F, 0xCC, 0x9B,
	0xCC, 0xA3, 0xB6, 0x05, 0x6F, 0xCC, 0xA3, 0xCC,
	0x82, 0xCA, 0x05, 0x6F, 0xCC, 0xA8, 0xCC, 0x84,
	0xCA, 0x05, 0x72, 0xCC, 0xA3, 0xCC, 0x84, 0xCA,
	0x05, 0x73, 0xCC, 0x81, 0xCC, 0x87, 0xCA, 0x05,
	0x73, 0xCC, 0x8C, 0xCC, 0x87, 0xCA, 0x05, 0x73,
	// Bytes 3b40 - 3b7f
	0xCC, 0xA3, 0xCC, 0x87, 0xCA, 0x05, 0x75, 0xCC,
	0x83, 0xCC, 0x81, 0xCA, 0x05, 0x75, 0xCC, 0x84,
	0xCC, 0x88, 0xCA, 0x05, 0x75, 0xCC, 0x88, 0xCC,
	0x80, 0xCA, 0x05, 0x75, 0xCC, 0x88, 0xCC, 0x81,
	0xCA, 0x05, 0x75, 0xCC, 0x88, 0xCC, 0x84, 0xCA,
	0x05, 0x75, 0xCC, 0x88, 0xCC, 0x8C, 0xCA, 0x05,
	0x75, 0xCC, 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x75,
	0xCC, 0x9B, 0xCC, 0x81, 0xCA, 0x05, 0x75, 0xCC,
	// Bytes 3b80 - 3bbf
	0x9B, 0xCC, 0x83, 0xCA, 0x05, 0x75, 0xCC, 0x9B,
	0xCC, 0x89, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC,
	0xA3, 0xB6, 0x05, 0xE1, 0xBE, 0xBF, 0xCC, 0x80,
	0xCA, 0x05, 0xE1, 0xBE, 0xBF, 0xCC, 0x81, 0xCA,
	0x05, 0xE1, 0xBE, 0xBF, 0xCD, 0x82, 0xCA, 0x05,
	0xE1, 0xBF, 0xBE, 0xCC, 0x80, 0xCA, 0x05, 0xE1,
	0xBF, 0xBE, 0xCC, 0x81, 0xCA, 0x05, 0xE1, 0xBF,
	0xBE, 0xCD, 0x82, 0xCA, 0x05, 0xE2, 0x86, 0x90,
	// Bytes 3bc0 - 3bff
	0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x86, 0x92, 0xCC,
	0xB8, 0x05, 0x05, 0xE2, 0x86, 0x94, 0xCC, 0xB8,
	0x05, 0x05, 0xE2, 0x87, 0x90, 0xCC, 0xB8, 0x05,
	0x05, 0xE2, 0x87, 0x92, 0xCC, 0xB8, 0x05, 0x05,
	0xE2, 0x87, 0x94, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
	0x88, 0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88,
	0x88, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x8B,
	0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88, 0xA3, 0xCC,
	// Bytes 3c00 - 3c3f
	0xB8, 0x05, 0x05, 0xE2, 0x88, 0xA5, 0xCC, 0xB8,
	0x05, 0x05, 0xE2, 0x88, 0xBC, 0xCC, 0xB8, 0x05,
	0x05, 0xE2, 0x89, 0x83, 0xCC, 0xB8, 0x05, 0x05,
	0xE2, 0x89, 0x85, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
	0x89, 0x88, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89,
	0x8D, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xA1,
	0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xA4, 0xCC,
	0xB8, 0x05, 0x05, 0xE2, 0x89, 0xA5, 0xCC, 0xB8,
	// Bytes 3c40 - 3c7f
	0x05, 0x05, 0xE2, 0x89, 0xB2, 0xCC, 0xB8, 0x05,
	0x05, 0xE2, 0x89, 0xB3, 0xCC, 0xB8, 0x05, 0x05,
	0xE2, 0x89, 0xB6, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
	0x89, 0xB7, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89,
	0xBA, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xBB,
	0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xBC, 0xCC,
	0xB8, 0x05, 0x05, 0xE2, 0x89, 0xBD, 0xCC, 0xB8,
	0x05, 0x05, 0xE2, 0x8A, 0x82, 0xCC, 0xB8, 0x05,
	// Bytes 3c80 - 3cbf
	0x05, 0xE2, 0x8A, 0x83, 0xCC, 0xB8, 0x05, 0x05,
	0xE2, 0x8A, 0x86, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
	0x8A, 0x87, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A,
	0x91, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x92,
	0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xA2, 0xCC,
	0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xA8, 0xCC, 0xB8,
	0x05, 0x05, 0xE2, 0x8A, 0xA9, 0xCC, 0xB8, 0x05,
	0x05, 0xE2, 0x8A, 0xAB, 0xCC, 0xB8, 0x05, 0x05,
	// Bytes 3cc0 - 3cff
	0xE2, 0x8A, 0xB2, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
	0x8A, 0xB3, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A,
	0xB4, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB5,
	0xCC, 0xB8, 0x05, 0x06, 0xCE, 0x91, 0xCC, 0x93,
	0xCD, 0x85, 0xDA, 0x06, 0xCE, 0x91, 0xCC, 0x94,
	0xCD, 0x85, 0xDA, 0x06, 0xCE, 0x95, 0xCC, 0x93,
	0xCC, 0x80, 0xCA, 0x06, 0xCE, 0x95, 0xCC, 0x93,
	0xCC, 0x81, 0xCA, 0x06, 0xCE, 0x95, 0xCC, 0x94,
	// Bytes 3d00 - 3d3f
	0xCC, 0x80, 0xCA, 0x06, 0xCE, 0x95, 0xCC, 0x94,
	0xCC, 0x81, 0xCA, 0x06, 0xCE, 0x97, 0xCC, 0x93,
	0xCD, 0x85, 0xDA, 0x06, 0xCE, 0x97, 0xCC, 0x94,
	0xCD, 0x85, 0xDA, 0x06, 0xCE, 0x99, 0xCC, 0x93,
	0xCC, 0x80, 0xCA, 0x06, 0xCE, 0x99, 0xCC, 0x93,
	0xCC, 0x81, 0xCA, 0x06, 0xCE, 0x99, 0xCC, 0x93,
	0xCD, 0x82, 0xCA, 0x06, 0xCE, 0x99, 0xCC, 0x94,
	0xCC, 0x80, 0xCA, 0x06, 0xCE, 0x99, 0xCC, 0x94,
	// Bytes 3d40 - 3d7f
	0xCC, 0x81, 0xCA, 0x06, 0xCE, 0x99, 0xCC, 0x94,
	0xCD, 0x82, 0xCA, 0x06, 0xCE, 0x9F, 0xCC, 0x93,
	0xCC, 0x80, 0xCA, 0x06, 0xCE, 0x9F, 0xCC, 0x93,
	0xCC, 0x81, 0xCA, 0x06, 0xCE, 0x9F, 0xCC, 0x94,
	0xCC, 0x80, 0xCA, 0x06, 0xCE, 0x9F, 0xCC, 0x94,
	0xCC, 0x81, 0xCA, 0x06, 0xCE, 0xA5, 0xCC, 0x94,
	0xCC, 0x80, 0xCA, 0x06, 0xCE, 0xA5, 0xCC, 0x94,
	0xCC, 0x81, 0xCA, 0x06, 0xCE, 0xA5, 0xCC, 0x94,
	// Bytes 3d80 - 3dbf
	0xCD, 0x82, 0xCA, 0x06, 0xCE, 0xA9, 0xCC, 0x93,
	0xCD, 0x85, 0xDA, 0x06, 0xCE, 0xA9, 0xCC, 0x94,
	0xCD, 0x85, 0xDA, 0x06, 0xCE, 0xB1, 0xCC, 0x80,
	0xCD, 0x85, 0xDA, 0x06, 0xCE, 0xB1, 0xCC, 0x81,
	0xCD, 0x85, 0xDA, 0x06, 0xCE, 0xB1, 0xCC, 0x93,
	0xCD, 0x85, 0xDA, 0x06, 0xCE, 0xB1, 0xCC, 0x94,
	0xCD, 0x85, 0xDA, 0x06, 0xCE, 0xB1, 0xCD, 0x82,
	0xCD, 0x85, 0xDA, 0x06, 0xCE, 0xB5, 0xCC, 0x93,
	// Bytes 3dc0 - 3dff
	0xCC, 0x80, 0xCA, 0x06, 0xCE, 0xB5, 0xCC, 0x93,
	0xCC, 0x81, 0xCA, 0x06, 0xCE, 0xB5, 0xCC, 0x94,
	0xCC, 0x80, 0xCA, 0x06, 0xCE, 0xB5, 0xCC, 0x94,
	0xCC, 0x81, 0xCA, 0x06, 0xCE, 0xB7, 0xCC, 0x80,
	0xCD, 0x85, 0xDA, 0x06, 0xCE, 0xB7, 0xCC, 0x81,
	0xCD, 0x85, 0xDA, 0x06, 0xCE, 0xB7, 0xCC, 0x93,
	0xCD, 0x85, 0xDA, 0x06, 0xCE, 0xB7, 0xCC, 0x94,
	0xCD, 0x85, 0xDA, 0x06, 0xCE, 0xB7, 0xCD, 0x82,
	// Bytes 3e00 - 3e3f
	0xCD, 0x85, 0xDA, 0x06, 0xCE, 0xB9, 0xCC, 0x88,
	0xCC, 0x80, 0xCA, 0x06, 0xCE, 0xB9, 0xCC, 0x88,
	0xCC, 0x81, 0xCA, 0x06, 0xCE, 0xB9, 0xCC, 0x88,
	0xCD, 0x82, 0xCA, 0x06, 0xCE, 0xB9, 0xCC, 0x93,
	0xCC, 0x80, 0xCA, 0x06, 0xCE, 0xB9, 0xCC, 0x93,
	0xCC, 0x81, 0xCA, 0x06, 0xCE, 0xB9, 0xCC, 0x93,
	0xCD, 0x82, 0xCA, 0x06, 0xCE, 0xB9, 0xCC, 0x94,
	0xCC, 0x80, 0xCA, 0x06, 0xCE, 0xB9, 0xCC, 0x94,
	// Bytes 3e40 - 3e7f
	0xCC, 0x81, 0xCA, 0x06, 0xCE, 0xB9, 0xCC, 0x94,
	0xCD, 0x82, 0xCA, 0x06, 0xCE, 0xBF, 0xCC, 0x93,
	0xCC, 0x80, 0xCA, 0x06, 0xCE, 0xBF, 0xCC, 0x93,
	0xCC, 0x81, 0xCA, 0x06, 0xCE, 0xBF, 0xCC, 0x94,
	0xCC, 0x80, 0xCA, 0x06, 0xCE, 0xBF, 0xCC, 0x94,
	0xCC, 0x81, 0xCA, 0x06, 0xCF, 0x85, 0xCC, 0x88,
	0xCC, 0x80, 0xCA, 0x06, 0xCF, 0x85, 0xCC, 0x88,
	0xCC, 0x81, 0xCA, 0x06, 0xCF, 0x85, 0xCC, 0x88,
	// Bytes 3e80 - 3ebf
	0xCD, 0x82, 0xCA, 0x06, 0xCF, 0x85, 0xCC, 0x93,
	0xCC, 0x80, 0xCA, 0x06, 0xCF, 0x85, 0xCC, 0x93,
	0xCC, 0x81, 0xCA, 0x06, 0xCF, 0x85, 0xCC, 0x93,
	0xCD, 0x82, 0xCA, 0x06, 0xCF, 0x85, 0xCC, 0x94,
	0xCC, 0x80, 0xCA, 0x06, 0xCF, 0x85, 0xCC, 0x94,
	0xCC, 0x81, 0xCA, 0x06, 0xCF, 0x85, 0xCC, 0x94,
	0xCD, 0x82, 0xCA, 0x06, 0xCF, 0x89, 0xCC, 0x80,
	0xCD, 0x85, 0xDA, 0x06, 0xCF, 0x89, 0xCC, 0x81,
	// Bytes 3ec0 - 3eff
	0xCD, 0x85, 0xDA, 0x06, 0xCF, 0x89, 0xCC, 0x93,
	0xCD, 0x85, 0xDA, 0x06, 0xCF, 0x89, 0xCC, 0x94,
	0xCD, 0x85, 0xDA, 0x06, 0xCF, 0x89, 0xCD, 0x82,
	0xCD, 0x85, 0xDA, 0x06, 0xE0, 0xA4, 0xA8, 0xE0,
	0xA4, 0xBC, 0x09, 0x06, 0xE0, 0xA4, 0xB0, 0xE0,
	0xA4, 0xBC, 0x09, 0x06, 0xE0, 0xA4, 0xB3, 0xE0,
	0xA4, 0xBC, 0x09, 0x06, 0xE0, 0xB1, 0x86, 0xE0,
	0xB1, 0x96, 0x85, 0x06, 0xE0, 0xB7, 0x99, 0xE0,
	// Bytes 3f00 - 3f3f
	0xB7, 0x8A, 0x11, 0x06, 0xE3, 0x81, 0x86, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0x8B, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0x8D, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0x8F, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0x91, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0x93, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0x95, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0x97, 0xE3,
	// Bytes 3f40 - 3f7f
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0x99, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0x9B, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0x9D, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0x9F, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0xA1, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0xA4, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0xA6, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0xA8, 0xE3,
	// Bytes 3f80 - 3fbf
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0xAF, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0xAF, 0xE3,
	0x82, 0x9A, 0x0D, 0x06, 0xE3, 0x81, 0xB2, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0xB2, 0xE3,
	0x82, 0x9A, 0x0D, 0x06, 0xE3, 0x81, 0xB5, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0xB5, 0xE3,
	0x82, 0x9A, 0x0D, 0x06, 0xE3, 0x81, 0xB8, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0xB8, 0xE3,
	// Bytes 3fc0 - 3fff
	0x82, 0x9A, 0x0D, 0x06, 0xE3, 0x81, 0xBB, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0xBB, 0xE3,
	0x82, 0x9A, 0x0D, 0x06, 0xE3, 0x82, 0x9D, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x82, 0xA6, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x82, 0xAB, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x82, 0xAD, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x82, 0xAF, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x82, 0xB1, 0xE3,
	// Bytes 4000 - 403f
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x82, 0xB3, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x82, 0xB5, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x82, 0xB7, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x82, 0xB9, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x82, 0xBB, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x82, 0xBD, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x82, 0xBF, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0x81, 0xE3,
	// Bytes 4040 - 407f
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0x84, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0x86, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0x88, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0x8F, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0x8F, 0xE3,
	0x82, 0x9A, 0x0D, 0x06, 0xE3, 0x83, 0x92, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0x92, 0xE3,
	0x82, 0x9A, 0x0D, 0x06, 0xE3, 0x83, 0x95, 0xE3,
	// Bytes 4080 - 40bf
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0x95, 0xE3,
	0x82, 0x9A, 0x0D, 0x06, 0xE3, 0x83, 0x98, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0x98, 0xE3,
	0x82, 0x9A, 0x0D, 0x06, 0xE3, 0x83, 0x9B, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0x9B, 0xE3,
	0x82, 0x9A, 0x0D, 0x06, 0xE3, 0x83, 0xAF, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0xB0, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0xB1, 0xE3,
	// Bytes 40c0 - 40ff
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0xB2, 0xE3,
	0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0xBD, 0xE3,
	0x82, 0x99, 0x0D, 0x08, 0xCE, 0x91, 0xCC, 0x93,
	0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x91,
	0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08,
	0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85,
	0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x80,
	0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x94,
	// Bytes 4100 - 413f
	0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x91,
	0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08,
	0xCE, 0x97, 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85,
	0xDB, 0x08, 0xCE, 0x97, 0xCC, 0x93, 0xCC, 0x81,
	0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, 0x93,
	0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97,
	0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08,
	0xCE, 0x97, 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85,
	// Bytes 4140 - 417f
	0xDB, 0x08, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x82,
	0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x93,
	0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xA9,
	0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08,
	0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85,
	0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x80,
	0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x94,
	0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xA9,
	// Bytes 4180 - 41bf
	0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08,
	0xCE, 0xB1, 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85,
	0xDB, 0x08, 0xCE, 0xB1, 0xCC, 0x93, 0xCC, 0x81,
	0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, 0x93,
	0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1,
	0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08,
	0xCE, 0xB1, 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85,
	0xDB, 0x08, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x82,
	// Bytes 41c0 - 41ff
	0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x93,
	0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB7,
	0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08,
	0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85,
	0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x80,
	0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x94,
	0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB7,
	0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08,
	// Bytes 4200 - 423f
	0xCF, 0x89, 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85,
	0xDB, 0x08, 0xCF, 0x89, 0xCC, 0x93, 0xCC, 0x81,
	0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, 0x93,
	0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89,
	0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08,
	0xCF, 0x89, 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85,
	0xDB, 0x08, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x82,
	0xCD, 0x85, 0xDB, 0x08, 0xF0, 0x91, 0x82, 0x99,
	// Bytes 4240 - 427f
	0xF0, 0x91, 0x82, 0xBA, 0x09, 0x08, 0xF0, 0x91,
	0x82, 0x9B, 0xF0, 0x91, 0x82, 0xBA, 0x09, 0x08,
	0xF0, 0x91, 0x82, 0xA5, 0xF0, 0x91, 0x82, 0xBA,
	0x09, 0x42, 0xC2, 0xB4, 0x01, 0x43, 0x20, 0xCC,
	0x81, 0xC9, 0x43, 0x20, 0xCC, 0x83, 0xC9, 0x43,
	0x20, 0xCC, 0x84, 0xC9, 0x43, 0x20, 0xCC, 0x85,
	0xC9, 0x43, 0x20, 0xCC, 0x86, 0xC9, 0x43, 0x20,
	0xCC, 0x87, 0xC9, 0x43, 0x20, 0xCC, 0x88, 0xC9,
	// Bytes 4280 - 42bf
	0x43, 0x20, 0xCC, 0x8A, 0xC9, 0x43, 0x20, 0xCC,
	0x8B, 0xC9, 0x43, 0x20, 0xCC, 0x93, 0xC9, 0x43,
	0x20, 0xCC, 0x94, 0xC9, 0x43, 0x20, 0xCC, 0xA7,
	0xA5, 0x43, 0x20, 0xCC, 0xA8, 0xA5, 0x43, 0x20,
	0xCC, 0xB3, 0xB5, 0x43, 0x20, 0xCD, 0x82, 0xC9,
	0x43, 0x20, 0xCD, 0x85, 0xD9, 0x43, 0x20, 0xD9,
	0x8B, 0x59, 0x43, 0x20, 0xD9, 0x8C, 0x5D, 0x43,
	0x20, 0xD9, 0x8D, 0x61, 0x43, 0x20, 0xD9, 0x8E,
	// Bytes 42c0 - 42ff
	0x65, 0x43, 0x20, 0xD9, 0x8F, 0x69, 0x43, 0x20,
	0xD9, 0x90, 0x6D, 0x43, 0x20, 0xD9, 0x91, 0x71,
	0x43, 0x20, 0xD9, 0x92, 0x75, 0x43, 0x41, 0xCC,
	0x8A, 0xC9, 0x43, 0x73, 0xCC, 0x87, 0xC9, 0x44,
	0x20, 0xE3, 0x82, 0x99, 0x0D, 0x44, 0x20, 0xE3,
	0x82, 0x9A, 0x0D, 0x44, 0xC2, 0xA8, 0xCC, 0x81,
	0xCA, 0x44, 0xCE, 0x91, 0xCC, 0x81, 0xC9, 0x44,
	0xCE, 0x95, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0x97,
	// Bytes 4300 - 433f
	0xCC, 0x81, 0xC9, 0x44, 0xCE, 0x99, 0xCC, 0x81,
	0xC9, 0x44, 0xCE, 0x9F, 0xCC, 0x81, 0xC9, 0x44,
	0xCE, 0xA5, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xA5,
	0xCC, 0x88, 0xC9, 0x44, 0xCE, 0xA9, 0xCC, 0x81,
	0xC9, 0x44, 0xCE, 0xB1, 0xCC, 0x81, 0xC9, 0x44,
	0xCE, 0xB5, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xB7,
	0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xB9, 0xCC, 0x81,
	0xC9, 0x44, 0xCE, 0xBF, 0xCC, 0x81, 0xC9, 0x44,
	// Bytes 4340 - 437f
	0xCF, 0x85, 0xCC, 0x81, 0xC9, 0x44, 0xCF, 0x89,
	0xCC, 0x81, 0xC9, 0x44, 0xD7, 0x90, 0xD6, 0xB7,
	0x31, 0x44, 0xD7, 0x90, 0xD6, 0xB8, 0x35, 0x44,
	0xD7, 0x90, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x91,
	0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x91, 0xD6, 0xBF,
	0x49, 0x44, 0xD7, 0x92, 0xD6, 0xBC, 0x41, 0x44,
	0xD7, 0x93, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x94,
	0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x95, 0xD6, 0xB9,
	// Bytes 4380 - 43bf
	0x39, 0x44, 0xD7, 0x95, 0xD6, 0xBC, 0x41, 0x44,
	0xD7, 0x96, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x98,
	0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x99, 0xD6, 0xB4,
	0x25, 0x44, 0xD7, 0x99, 0xD6, 0xBC, 0x41, 0x44,
	0xD7, 0x9A, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9B,
	0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9B, 0xD6, 0xBF,
	0x49, 0x44, 0xD7, 0x9C, 0xD6, 0xBC, 0x41, 0x44,
	0xD7, 0x9E, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA0,
	// Bytes 43c0 - 43ff
	0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA1, 0xD6, 0xBC,
	0x41, 0x44, 0xD7, 0xA3, 0xD6, 0xBC, 0x41, 0x44,
	0xD7, 0xA4, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA4,
	0xD6, 0xBF, 0x49, 0x44, 0xD7, 0xA6, 0xD6, 0xBC,
	0x41, 0x44, 0xD7, 0xA7, 0xD6, 0xBC, 0x41, 0x44,
	0xD7, 0xA8, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA9,
	0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA9, 0xD7, 0x81,
	0x4D, 0x44, 0xD7, 0xA9, 0xD7, 0x82, 0x51, 0x44,
	// Bytes 4400 - 443f
	0xD7, 0xAA, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xB2,
	0xD6, 0xB7, 0x31, 0x44, 0xD8, 0xA7, 0xD9, 0x8B,
	0x59, 0x44, 0xD8, 0xA7, 0xD9, 0x93, 0xC9, 0x44,
	0xD8, 0xA7, 0xD9, 0x94, 0xC9, 0x44, 0xD8, 0xA7,
	0xD9, 0x95, 0xB5, 0x44, 0xD8, 0xB0, 0xD9, 0xB0,
	0x79, 0x44, 0xD8, 0xB1, 0xD9, 0xB0, 0x79, 0x44,
	0xD9, 0x80, 0xD9, 0x8B, 0x59, 0x44, 0xD9, 0x80,
	0xD9, 0x8E, 0x65, 0x44, 0xD9, 0x80, 0xD9, 0x8F,
	// Bytes 4440 - 447f
	0x69, 0x44, 0xD9, 0x80, 0xD9, 0x90, 0x6D, 0x44,
	0xD9, 0x80, 0xD9, 0x91, 0x71, 0x44, 0xD9, 0x80,
	0xD9, 0x92, 0x75, 0x44, 0xD9, 0x87, 0xD9, 0xB0,
	0x79, 0x44, 0xD9, 0x88, 0xD9, 0x94, 0xC9, 0x44,
	0xD9, 0x89, 0xD9, 0xB0, 0x79, 0x44, 0xD9, 0x8A,
	0xD9, 0x94, 0xC9, 0x44, 0xDB, 0x92, 0xD9, 0x94,
	0xC9, 0x44, 0xDB, 0x95, 0xD9, 0x94, 0xC9, 0x45,
	0x20, 0xCC, 0x88, 0xCC, 0x80, 0xCA, 0x45, 0x20,
	// Bytes 4480 - 44bf
	0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x45, 0x20, 0xCC,
	0x88, 0xCD, 0x82, 0xCA, 0x45, 0x20, 0xCC, 0x93,
	0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC, 0x93, 0xCC,
	0x81, 0xCA, 0x45, 0x20, 0xCC, 0x93, 0xCD, 0x82,
	0xCA, 0x45, 0x20, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
	0x45, 0x20, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x45,
	0x20, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x45, 0x20,
	0xD9, 0x8C, 0xD9, 0x91, 0x72, 0x45, 0x20, 0xD9,
	// Bytes 44c0 - 44ff
	0x8D, 0xD9, 0x91, 0x72, 0x45, 0x20, 0xD9, 0x8E,
	0xD9, 0x91, 0x72, 0x45, 0x20, 0xD9, 0x8F, 0xD9,
	0x91, 0x72, 0x45, 0x20, 0xD9, 0x90, 0xD9, 0x91,
	0x72, 0x45, 0x20, 0xD9, 0x91, 0xD9, 0xB0, 0x7A,
	0x45, 0xE2, 0xAB, 0x9D, 0xCC, 0xB8, 0x05, 0x46,
	0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x46,
	0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x46,
	0xD7, 0xA9, 0xD6, 0xBC, 0xD7, 0x81, 0x4E, 0x46,
	// Bytes 4500 - 453f
	0xD7, 0xA9, 0xD6, 0xBC, 0xD7, 0x82, 0x52, 0x46,
	0xD9, 0x80, 0xD9, 0x8E, 0xD9, 0x91, 0x72, 0x46,
	0xD9, 0x80, 0xD9, 0x8F, 0xD9, 0x91, 0x72, 0x46,
	0xD9, 0x80, 0xD9, 0x90, 0xD9, 0x91, 0x72, 0x46,
	0xE0, 0xA4, 0x95, 0xE0, 0xA4, 0xBC, 0x09, 0x46,
	0xE0, 0xA4, 0x96, 0xE0, 0xA4, 0xBC, 0x09, 0x46,
	0xE0, 0xA4, 0x97, 0xE0, 0xA4, 0xBC, 0x09, 0x46,
	0xE0, 0xA4, 0x9C, 0xE0, 0xA4, 0xBC, 0x09, 0x46,
	// Bytes 4540 - 457f
	0xE0, 0xA4, 0xA1, 0xE0, 0xA4, 0xBC, 0x09, 0x46,
	0xE0, 0xA4, 0xA2, 0xE0, 0xA4, 0xBC, 0x09, 0x46,
	0xE0, 0xA4, 0xAB, 0xE0, 0xA4, 0xBC, 0x09, 0x46,
	0xE0, 0xA4, 0xAF, 0xE0, 0xA4, 0xBC, 0x09, 0x46,
	0xE0, 0xA6, 0xA1, 0xE0, 0xA6, 0xBC, 0x09, 0x46,
	0xE0, 0xA6, 0xA2, 0xE0, 0xA6, 0xBC, 0x09, 0x46,
	0xE0, 0xA6, 0xAF, 0xE0, 0xA6, 0xBC, 0x09, 0x46,
	0xE0, 0xA8, 0x96, 0xE0, 0xA8, 0xBC, 0x09, 0x46,
	// Bytes 4580 - 45bf
	0xE0, 0xA8, 0x97, 0xE0, 0xA8, 0xBC, 0x09, 0x46,
	0xE0, 0xA8, 0x9C, 0xE0, 0xA8, 0xBC, 0x09, 0x46,
	0xE0, 0xA8, 0xAB, 0xE0, 0xA8, 0xBC, 0x09, 0x46,
	0xE0, 0xA8, 0xB2, 0xE0, 0xA8, 0xBC, 0x09, 0x46,
	0xE0, 0xA8, 0xB8, 0xE0, 0xA8, 0xBC, 0x09, 0x46,
	0xE0, 0xAC, 0xA1, 0xE0, 0xAC, 0xBC, 0x09, 0x46,
	0xE0, 0xAC, 0xA2, 0xE0, 0xAC, 0xBC, 0x09, 0x46,
	0xE0, 0xBE, 0xB2, 0xE0, 0xBE, 0x80, 0x9D, 0x46,
	// Bytes 45c0 - 45ff
	0xE0, 0xBE, 0xB3, 0xE0, 0xBE, 0x80, 0x9D, 0x46,
	0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0x0D, 0x48,
	0xF0, 0x9D, 0x85, 0x97, 0xF0, 0x9D, 0x85, 0xA5,
	0xAD, 0x48, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D,
	0x85, 0xA5, 0xAD, 0x48, 0xF0, 0x9D, 0x86, 0xB9,
	0xF0, 0x9D, 0x85, 0xA5, 0xAD, 0x48, 0xF0, 0x9D,
	0x86, 0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, 0x49,
	0xE0, 0xBE, 0xB2, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE,
	// Bytes 4600 - 463f
	0x80, 0x9E, 0x49, 0xE0, 0xBE, 0xB3, 0xE0, 0xBD,
	0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x4C, 0xF0, 0x9D,
	0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D,
	0x85, 0xAE, 0xAE, 0x4C, 0xF0, 0x9D, 0x85, 0x98,
	0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF,
	0xAE, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D,
	0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB0, 0xAE, 0x4C,
	0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5,
	// Bytes 4640 - 467f
	0xF0, 0x9D, 0x85, 0xB1, 0xAE, 0x4C, 0xF0, 0x9D,
	0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D,
	0x85, 0xB2, 0xAE, 0x4C, 0xF0, 0x9D, 0x86, 0xB9,
	0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE,
	0xAE, 0x4C, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D,
	0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE, 0x4C,
	0xF0, 0x9D, 0x86, 0xBA, 0xF0, 0x9D, 0x85, 0xA5,
	0xF0, 0x9D, 0x85, 0xAE, 0xAE, 0x4C, 0xF0, 0x9D,
	// Bytes 4680 - 46bf
	0x86, 0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D,
	0x85, 0xAF, 0xAE, 0x83, 0x41, 0xCC, 0x82, 0xC9,
	0x83, 0x41, 0xCC, 0x86, 0xC9, 0x83, 0x41, 0xCC,
	0x87, 0xC9, 0x83, 0x41, 0xCC, 0x88, 0xC9, 0x83,
	0x41, 0xCC, 0x8A, 0xC9, 0x83, 0x41, 0xCC, 0xA3,
	0xB5, 0x83, 0x43, 0xCC, 0xA7, 0xA5, 0x83, 0x45,
	0xCC, 0x82, 0xC9, 0x83, 0x45, 0xCC, 0x84, 0xC9,
	0x83, 0x45, 0xCC, 0xA3, 0xB5, 0x83, 0x45, 0xCC,
	// Bytes 46c0 - 46ff
	0xA7, 0xA5, 0x83, 0x49, 0xCC, 0x88, 0xC9, 0x83,
	0x4C, 0xCC, 0xA3, 0xB5, 0x83, 0x4F, 0xCC, 0x82,
	0xC9, 0x83, 0x4F, 0xCC, 0x83, 0xC9, 0x83, 0x4F,
	0xCC, 0x84, 0xC9, 0x83, 0x4F, 0xCC, 0x87, 0xC9,
	0x83, 0x4F, 0xCC, 0x88, 0xC9, 0x83, 0x4F, 0xCC,
	0x9B, 0xAD, 0x83, 0x4F, 0xCC, 0xA3, 0xB5, 0x83,
	0x4F, 0xCC, 0xA8, 0xA5, 0x83, 0x52, 0xCC, 0xA3,
	0xB5, 0x83, 0x53, 0xCC, 0x81, 0xC9, 0x83, 0x53,
	// Bytes 4700 - 473f
	0xCC, 0x8C, 0xC9, 0x83, 0x53, 0xCC, 0xA3, 0xB5,
	0x83, 0x55, 0xCC, 0x83, 0xC9, 0x83, 0x55, 0xCC,
	0x84, 0xC9, 0x83, 0x55, 0xCC, 0x88, 0xC9, 0x83,
	0x55, 0xCC, 0x9B, 0xAD, 0x83, 0x61, 0xCC, 0x82,
	0xC9, 0x83, 0x61, 0xCC, 0x86, 0xC9, 0x83, 0x61,
	0xCC, 0x87, 0xC9, 0x83, 0x61, 0xCC, 0x88, 0xC9,
	0x83, 0x61, 0xCC, 0x8A, 0xC9, 0x83, 0x61, 0xCC,
	0xA3, 0xB5, 0x83, 0x63, 0xCC, 0xA7, 0xA5, 0x83,
	// Bytes 4740 - 477f
	0x65, 0xCC, 0x82, 0xC9, 0x83, 0x65, 0xCC, 0x84,
	0xC9, 0x83, 0x65, 0xCC, 0xA3, 0xB5, 0x83, 0x65,
	0xCC, 0xA7, 0xA5, 0x83, 0x69, 0xCC, 0x88, 0xC9,
	0x83, 0x6C, 0xCC, 0xA3, 0xB5, 0x83, 0x6F, 0xCC,
	0x82, 0xC9, 0x83, 0x6F, 0xCC, 0x83, 0xC9, 0x83,
	0x6F, 0xCC, 0x84, 0xC9, 0x83, 0x6F, 0xCC, 0x87,
	0xC9, 0x83, 0x6F, 0xCC, 0x88, 0xC9, 0x83, 0x6F,
	0xCC, 0x9B, 0xAD, 0x83, 0x6F, 0xCC, 0xA3, 0xB5,
	// Bytes 4780 - 47bf
	0x83, 0x6F, 0xCC, 0xA8, 0xA5, 0x83, 0x72, 0xCC,
	0xA3, 0xB5, 0x83, 0x73, 0xCC, 0x81, 0xC9, 0x83,
	0x73, 0xCC, 0x8C, 0xC9, 0x83, 0x73, 0xCC, 0xA3,
	0xB5, 0x83, 0x75, 0xCC, 0x83, 0xC9, 0x83, 0x75,
	0xCC, 0x84, 0xC9, 0x83, 0x75, 0xCC, 0x88, 0xC9,
	0x83, 0x75, 0xCC, 0x9B, 0xAD, 0x84, 0xCE, 0x91,
	0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x91, 0xCC, 0x94,
	0xC9, 0x84, 0xCE, 0x95, 0xCC, 0x93, 0xC9, 0x84,
	// Bytes 47c0 - 47ff
	0xCE, 0x95, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0x97,
	0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x97, 0xCC, 0x94,
	0xC9, 0x84, 0xCE, 0x99, 0xCC, 0x93, 0xC9, 0x84,
	0xCE, 0x99, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0x9F,
	0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x9F, 0xCC, 0x94,
	0xC9, 0x84, 0xCE, 0xA5, 0xCC, 0x94, 0xC9, 0x84,
	0xCE, 0xA9, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xA9,
	0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, 0x80,
	// Bytes 4800 - 483f
	0xC9, 0x84, 0xCE, 0xB1, 0xCC, 0x81, 0xC9, 0x84,
	0xCE, 0xB1, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB1,
	0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xB1, 0xCD, 0x82,
	0xC9, 0x84, 0xCE, 0xB5, 0xCC, 0x93, 0xC9, 0x84,
	0xCE, 0xB5, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xB7,
	0xCC, 0x80, 0xC9, 0x84, 0xCE, 0xB7, 0xCC, 0x81,
	0xC9, 0x84, 0xCE, 0xB7, 0xCC, 0x93, 0xC9, 0x84,
	0xCE, 0xB7, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xB7,
	// Bytes 4840 - 487f
	0xCD, 0x82, 0xC9, 0x84, 0xCE, 0xB9, 0xCC, 0x88,
	0xC9, 0x84, 0xCE, 0xB9, 0xCC, 0x93, 0xC9, 0x84,
	0xCE, 0xB9, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xBF,
	0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xBF, 0xCC, 0x94,
	0xC9, 0x84, 0xCF, 0x85, 0xCC, 0x88, 0xC9, 0x84,
	0xCF, 0x85, 0xCC, 0x93, 0xC9, 0x84, 0xCF, 0x85,
	0xCC, 0x94, 0xC9, 0x84, 0xCF, 0x89, 0xCC, 0x80,
	0xC9, 0x84, 0xCF, 0x89, 0xCC, 0x81, 0xC9, 0x84,
	// Bytes 4880 - 48bf
	0xCF, 0x89, 0xCC, 0x93, 0xC9, 0x84, 0xCF, 0x89,
	0xCC, 0x94, 0xC9, 0x84, 0xCF, 0x89, 0xCD, 0x82,
	0xC9, 0x86, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80,
	0xCA, 0x86, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x81,
	0xCA, 0x86, 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x82,
	0xCA, 0x86, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x80,
	0xCA, 0x86, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81,
	0xCA, 0x86, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x82,
	// Bytes 48c0 - 48ff
	0xCA, 0x86, 0xCE, 0x97, 0xCC, 0x93, 0xCC, 0x80,
	0xCA, 0x86, 0xCE, 0x97, 0xCC, 0x93, 0xCC, 0x81,
	0xCA, 0x86, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82,
	0xCA, 0x86, 0xCE, 0x97, 0xCC, 0x94, 0xCC, 0x80,
	0xCA, 0x86, 0xCE, 0x97, 0xCC, 0x94, 0xCC, 0x81,
	0xCA, 0x86, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x82,
	0xCA, 0x86, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80,
	0xCA, 0x86, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x81,
	// Bytes 4900 - 493f
	0xCA, 0x86, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x82,
	0xCA, 0x86, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x80,
	0xCA, 0x86, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81,
	0xCA, 0x86, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x82,
	0xCA, 0x86, 0xCE, 0xB1, 0xCC, 0x93, 0xCC, 0x80,
	0xCA, 0x86, 0xCE, 0xB1, 0xCC, 0x93, 0xCC, 0x81,
	0xCA, 0x86, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82,
	0xCA, 0x86, 0xCE, 0xB1, 0xCC, 0x94, 0xCC, 0x80,
	// Bytes 4940 - 497f
	0xCA, 0x86, 0xCE, 0xB1, 0xCC, 0x94, 0xCC, 0x81,
	0xCA, 0x86, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x82,
	0xCA, 0x86, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80,
	0xCA, 0x86, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x81,
	0xCA, 0x86, 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x82,
	0xCA, 0x86, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x80,
	0xCA, 0x86, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81,
	0xCA, 0x86, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x82,
	// Bytes 4980 - 49bf
	0xCA, 0x86, 0xCF, 0x89, 0xCC, 0x93, 0xCC, 0x80,
	0xCA, 0x86, 0xCF, 0x89, 0xCC, 0x93, 0xCC, 0x81,
	0xCA, 0x86, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82,
	0xCA, 0x86, 0xCF, 0x89, 0xCC, 0x94, 0xCC, 0x80,
	0xCA, 0x86, 0xCF, 0x89, 0xCC, 0x94, 0xCC, 0x81,
	0xCA, 0x86, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x82,
	0xCA, 0x42, 0xCC, 0x80, 0xC9, 0x32, 0x42, 0xCC,
	0x81, 0xC9, 0x32, 0x42, 0xCC, 0x93, 0xC9, 0x32,
	// Bytes 49c0 - 49ff
	0x43, 0xE1, 0x85, 0xA1, 0x01, 0x00, 0x43, 0xE1,
	0x85, 0xA2, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA3,
	0x01, 0x00, 0x43, 0xE1, 0x85, 0xA4, 0x01, 0x00,
	0x43, 0xE1, 0x85, 0xA5, 0x01, 0x00, 0x43, 0xE1,
	0x85, 0xA6, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA7,
	0x01, 0x00, 0x43, 0xE1, 0x85, 0xA8, 0x01, 0x00,
	0x43, 0xE1, 0x85, 0xA9, 0x01, 0x00, 0x43, 0xE1,
	0x85, 0xAA, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAB,
	// Bytes 4a00 - 4a3f
	0x01, 0x00, 0x43, 0xE1, 0x85, 0xAC, 0x01, 0x00,
	0x43, 0xE1, 0x85, 0xAD, 0x01, 0x00, 0x43, 0xE1,
	0x85, 0xAE, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAF,
	0x01, 0x00, 0x43, 0xE1, 0x85, 0xB0, 0x01, 0x00,
	0x43, 0xE1, 0x85, 0xB1, 0x01, 0x00, 0x43, 0xE1,
	0x85, 0xB2, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB3,
	0x01, 0x00, 0x43, 0xE1, 0x85, 0xB4, 0x01, 0x00,
	0x43, 0xE1, 0x85, 0xB5, 0x01, 0x00, 0x43, 0xE1,
	// Bytes 4a40 - 4a7f
	0x86, 0xAA, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xAC,
	0x01, 0x00, 0x43, 0xE1, 0x86, 0xAD, 0x01, 0x00,
	0x43, 0xE1, 0x86, 0xB0, 0x01, 0x00, 0x43, 0xE1,
	0x86, 0xB1, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB2,
	0x01, 0x00, 0x43, 0xE1, 0x86, 0xB3, 0x01, 0x00,
	0x43, 0xE1, 0x86, 0xB4, 0x01, 0x00, 0x43, 0xE1,
	0x86, 0xB5, 0x01, 0x00, 0x44, 0xCC, 0x88, 0xCC,
	0x81, 0xCA, 0x32, 0x43, 0xE3, 0x82, 0x99, 0x0D,
	// Bytes 4a80 - 4abf
	0x03, 0x43, 0xE3, 0x82, 0x9A, 0x0D, 0x03, 0x46,
	0xE0, 0xBD, 0xB1, 0xE0, 0xBD, 0xB2, 0x9E, 0x26,
	0x46, 0xE0, 0xBD, 0xB1, 0xE0, 0xBD, 0xB4, 0xA2,
	0x26, 0x46, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80,
	0x9E, 0x26, 0x00, 0x01,
}

// lookup returns the trie value for the first UTF-8 encoding in s and
// the width in bytes of this encoding. The size will be 0 if s does not
// hold enough bytes to complete the encoding. len(s) must be greater than 0.
func (t *nfcTrie) lookup(s []byte) (v uint16, sz int) {
	c0 := s[0]
	switch {
	case c0 < 0x80: // is ASCII
		return nfcValues[c0], 1
	case c0 < 0xC2:
		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
	case c0 < 0xE0: // 2-byte UTF-8
		if len(s) < 2 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c1), 2
	case c0 < 0xF0: // 3-byte UTF-8
		if len(s) < 3 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c2), 3
	case c0 < 0xF8: // 4-byte UTF-8
		if len(s) < 4 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		o = uint32(i)<<6 + uint32(c2)
		i = nfcIndex[o]
		c3 := s[3]
		if c3 < 0x80 || 0xC0 <= c3 {
			return 0, 3 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c3), 4
	}
	// Illegal rune
	return 0, 1
}

// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.
// s must start with a full and valid UTF-8 encoded rune.
func (t *nfcTrie) lookupUnsafe(s []byte) uint16 {
	c0 := s[0]
	if c0 < 0x80 { // is ASCII
		return nfcValues[c0]
	}
	i := nfcIndex[c0]
	if c0 < 0xE0 { // 2-byte UTF-8
		return t.lookupValue(uint32(i), s[1])
	}
	i = nfcIndex[uint32(i)<<6+uint32(s[1])]
	if c0 < 0xF0 { // 3-byte UTF-8
		return t.lookupValue(uint32(i), s[2])
	}
	i = nfcIndex[uint32(i)<<6+uint32(s[2])]
	if c0 < 0xF8 { // 4-byte UTF-8
		return t.lookupValue(uint32(i), s[3])
	}
	return 0
}

// lookupString returns the trie value for the first UTF-8 encoding in s and
// the width in bytes of this encoding. The size will be 0 if s does not
// hold enough bytes to complete the encoding. len(s) must be greater than 0.
func (t *nfcTrie) lookupString(s string) (v uint16, sz int) {
	c0 := s[0]
	switch {
	case c0 < 0x80: // is ASCII
		return nfcValues[c0], 1
	case c0 < 0xC2:
		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
	case c0 < 0xE0: // 2-byte UTF-8
		if len(s) < 2 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c1), 2
	case c0 < 0xF0: // 3-byte UTF-8
		if len(s) < 3 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c2), 3
	case c0 < 0xF8: // 4-byte UTF-8
		if len(s) < 4 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		o = uint32(i)<<6 + uint32(c2)
		i = nfcIndex[o]
		c3 := s[3]
		if c3 < 0x80 || 0xC0 <= c3 {
			return 0, 3 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c3), 4
	}
	// Illegal rune
	return 0, 1
}

// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.
// s must start with a full and valid UTF-8 encoded rune.
func (t *nfcTrie) lookupStringUnsafe(s string) uint16 {
	c0 := s[0]
	if c0 < 0x80 { // is ASCII
		return nfcValues[c0]
	}
	i := nfcIndex[c0]
	if c0 < 0xE0 { // 2-byte UTF-8
		return t.lookupValue(uint32(i), s[1])
	}
	i = nfcIndex[uint32(i)<<6+uint32(s[1])]
	if c0 < 0xF0 { // 3-byte UTF-8
		return t.lookupValue(uint32(i), s[2])
	}
	i = nfcIndex[uint32(i)<<6+uint32(s[2])]
	if c0 < 0xF8 { // 4-byte UTF-8
		return t.lookupValue(uint32(i), s[3])
	}
	return 0
}

// nfcTrie. Total size: 10610 bytes (10.36 KiB). Checksum: 95e8869a9f81e5e6.
type nfcTrie struct{}

func newNfcTrie(i int) *nfcTrie {
	return &nfcTrie{}
}

// lookupValue determines the type of block n and looks up the value for b.
func (t *nfcTrie) lookupValue(n uint32, b byte) uint16 {
	switch {
	case n < 46:
		return uint16(nfcValues[n<<6+uint32(b)])
	default:
		n -= 46
		return uint16(nfcSparse.lookup(n, b))
	}
}

// nfcValues: 48 blocks, 3072 entries, 6144 bytes
// The third block is the zero block.
var nfcValues = [3072]uint16{
	// Block 0x0, offset 0x0
	0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000,
	// Block 0x1, offset 0x40
	0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000,
	0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000,
	0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000,
	0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000,
	0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000,
	0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000,
	0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000,
	0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000,
	0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000,
	0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000,
	// Block 0x2, offset 0x80
	// Block 0x3, offset 0xc0
	0xc0: 0x2f72, 0xc1: 0x2f77, 0xc2: 0x468b, 0xc3: 0x2f7c, 0xc4: 0x469a, 0xc5: 0x469f,
	0xc6: 0xa000, 0xc7: 0x46a9, 0xc8: 0x2fe5, 0xc9: 0x2fea, 0xca: 0x46ae, 0xcb: 0x2ffe,
	0xcc: 0x3071, 0xcd: 0x3076, 0xce: 0x307b, 0xcf: 0x46c2, 0xd1: 0x3107,
	0xd2: 0x312a, 0xd3: 0x312f, 0xd4: 0x46cc, 0xd5: 0x46d1, 0xd6: 0x46e0,
	0xd8: 0xa000, 0xd9: 0x31b6, 0xda: 0x31bb, 0xdb: 0x31c0, 0xdc: 0x4712, 0xdd: 0x3238,
	0xe0: 0x327e, 0xe1: 0x3283, 0xe2: 0x471c, 0xe3: 0x3288,
	0xe4: 0x472b, 0xe5: 0x4730, 0xe6: 0xa000, 0xe7: 0x473a, 0xe8: 0x32f1, 0xe9: 0x32f6,
	0xea: 0x473f, 0xeb: 0x330a, 0xec: 0x3382, 0xed: 0x3387, 0xee: 0x338c, 0xef: 0x4753,
	0xf1: 0x3418, 0xf2: 0x343b, 0xf3: 0x3440, 0xf4: 0x475d, 0xf5: 0x4762,
	0xf6: 0x4771, 0xf8: 0xa000, 0xf9: 0x34cc, 0xfa: 0x34d1, 0xfb: 0x34d6,
	0xfc: 0x47a3, 0xfd: 0x3553, 0xff: 0x356c,
	// Block 0x4, offset 0x100
	0x100: 0x2f81, 0x101: 0x328d, 0x102: 0x4690, 0x103: 0x4721, 0x104: 0x2f9f, 0x105: 0x32ab,
	0x106: 0x2fb3, 0x107: 0x32bf, 0x108: 0x2fb8, 0x109: 0x32c4, 0x10a: 0x2fbd, 0x10b: 0x32c9,
	0x10c: 0x2fc2, 0x10d: 0x32ce, 0x10e: 0x2fcc, 0x10f: 0x32d8,
	0x112: 0x46b3, 0x113: 0x4744, 0x114: 0x2ff4, 0x115: 0x3300, 0x116: 0x2ff9, 0x117: 0x3305,
	0x118: 0x3017, 0x119: 0x3323, 0x11a: 0x3008, 0x11b: 0x3314, 0x11c: 0x3030, 0x11d: 0x333c,
	0x11e: 0x303a, 0x11f: 0x3346, 0x120: 0x303f, 0x121: 0x334b, 0x122: 0x3049, 0x123: 0x3355,
	0x124: 0x304e, 0x125: 0x335a, 0x128: 0x3080, 0x129: 0x3391,
	0x12a: 0x3085, 0x12b: 0x3396, 0x12c: 0x308a, 0x12d: 0x339b, 0x12e: 0x30ad, 0x12f: 0x33b9,
	0x130: 0x308f, 0x134: 0x30b7, 0x135: 0x33c3,
	0x136: 0x30cb, 0x137: 0x33dc, 0x139: 0x30d5, 0x13a: 0x33e6, 0x13b: 0x30df,
	0x13c: 0x33f0, 0x13d: 0x30da, 0x13e: 0x33eb,
	// Block 0x5, offset 0x140
	0x143: 0x3102, 0x144: 0x3413, 0x145: 0x311b,
	0x146: 0x342c, 0x147: 0x3111, 0x148: 0x3422,
	0x14c: 0x46d6, 0x14d: 0x4767, 0x14e: 0x3134, 0x14f: 0x3445, 0x150: 0x313e, 0x151: 0x344f,
	0x154: 0x315c, 0x155: 0x346d, 0x156: 0x3175, 0x157: 0x3486,
	0x158: 0x3166, 0x159: 0x3477, 0x15a: 0x46f9, 0x15b: 0x478a, 0x15c: 0x317f, 0x15d: 0x3490,
	0x15e: 0x318e, 0x15f: 0x349f, 0x160: 0x46fe, 0x161: 0x478f, 0x162: 0x31a7, 0x163: 0x34bd,
	0x164: 0x3198, 0x165: 0x34ae, 0x168: 0x4708, 0x169: 0x4799,
	0x16a: 0x470d, 0x16b: 0x479e, 0x16c: 0x31c5, 0x16d: 0x34db, 0x16e: 0x31cf, 0x16f: 0x34e5,
	0x170: 0x31d4, 0x171: 0x34ea, 0x172: 0x31f2, 0x173: 0x3508, 0x174: 0x3215, 0x175: 0x352b,
	0x176: 0x323d, 0x177: 0x3558, 0x178: 0x3251, 0x179: 0x3260, 0x17a: 0x3580, 0x17b: 0x326a,
	0x17c: 0x358a, 0x17d: 0x326f, 0x17e: 0x358f, 0x17f: 0xa000,
	// Block 0x6, offset 0x180
	0x184: 0x8100, 0x185: 0x8100,
	0x186: 0x8100,
	0x18d: 0x2f8b, 0x18e: 0x3297, 0x18f: 0x3099, 0x190: 0x33a5, 0x191: 0x3143,
	0x192: 0x3454, 0x193: 0x31d9, 0x194: 0x34ef, 0x195: 0x39d2, 0x196: 0x3b61, 0x197: 0x39cb,
	0x198: 0x3b5a, 0x199: 0x39d9, 0x19a: 0x3b68, 0x19b: 0x39c4, 0x19c: 0x3b53,
	0x19e: 0x38b3, 0x19f: 0x3a42, 0x1a0: 0x38ac, 0x1a1: 0x3a3b, 0x1a2: 0x35b6, 0x1a3: 0x35c8,
	0x1a6: 0x3044, 0x1a7: 0x3350, 0x1a8: 0x30c1, 0x1a9: 0x33d2,
	0x1aa: 0x46ef, 0x1ab: 0x4780, 0x1ac: 0x3993, 0x1ad: 0x3b22, 0x1ae: 0x35da, 0x1af: 0x35e0,
	0x1b0: 0x33c8, 0x1b4: 0x302b, 0x1b5: 0x3337,
	0x1b8: 0x30fd, 0x1b9: 0x340e, 0x1ba: 0x38ba, 0x1bb: 0x3a49,
	0x1bc: 0x35b0, 0x1bd: 0x35c2, 0x1be: 0x35bc, 0x1bf: 0x35ce,
	// Block 0x7, offset 0x1c0
	0x1c0: 0x2f90, 0x1c1: 0x329c, 0x1c2: 0x2f95, 0x1c3: 0x32a1, 0x1c4: 0x300d, 0x1c5: 0x3319,
	0x1c6: 0x3012, 0x1c7: 0x331e, 0x1c8: 0x309e, 0x1c9: 0x33aa, 0x1ca: 0x30a3, 0x1cb: 0x33af,
	0x1cc: 0x3148, 0x1cd: 0x3459, 0x1ce: 0x314d, 0x1cf: 0x345e, 0x1d0: 0x316b, 0x1d1: 0x347c,
	0x1d2: 0x3170, 0x1d3: 0x3481, 0x1d4: 0x31de, 0x1d5: 0x34f4, 0x1d6: 0x31e3, 0x1d7: 0x34f9,
	0x1d8: 0x3189, 0x1d9: 0x349a, 0x1da: 0x31a2, 0x1db: 0x34b8,
	0x1de: 0x305d, 0x1df: 0x3369,
	0x1e6: 0x4695, 0x1e7: 0x4726, 0x1e8: 0x46bd, 0x1e9: 0x474e,
	0x1ea: 0x3962, 0x1eb: 0x3af1, 0x1ec: 0x393f, 0x1ed: 0x3ace, 0x1ee: 0x46db, 0x1ef: 0x476c,
	0x1f0: 0x395b, 0x1f1: 0x3aea, 0x1f2: 0x3247, 0x1f3: 0x3562,
	// Block 0x8, offset 0x200
	0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132,
	0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932,
	0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932,
	0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d,
	0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d,
	0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d,
	0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d,
	0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d,
	0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101,
	0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d,
	0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132,
	// Block 0x9, offset 0x240
	0x240: 0x49b1, 0x241: 0x49b6, 0x242: 0x9932, 0x243: 0x49bb, 0x244: 0x4a74, 0x245: 0x9936,
	0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132,
	0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132,
	0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132,
	0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135,
	0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132,
	0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132,
	0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132,
	0x274: 0x0170,
	0x27a: 0x8100,
	0x27e: 0x0037,
	// Block 0xa, offset 0x280
	0x284: 0x8100, 0x285: 0x35a4,
	0x286: 0x35ec, 0x287: 0x00ce, 0x288: 0x360a, 0x289: 0x3616, 0x28a: 0x3628,
	0x28c: 0x3646, 0x28e: 0x3658, 0x28f: 0x3676, 0x290: 0x3e0b, 0x291: 0xa000,
	0x295: 0xa000, 0x297: 0xa000,
	0x299: 0xa000,
	0x29f: 0xa000, 0x2a1: 0xa000,
	0x2a5: 0xa000, 0x2a9: 0xa000,
	0x2aa: 0x363a, 0x2ab: 0x366a, 0x2ac: 0x4801, 0x2ad: 0x369a, 0x2ae: 0x482b, 0x2af: 0x36ac,
	0x2b0: 0x3e73, 0x2b1: 0xa000, 0x2b5: 0xa000,
	0x2b7: 0xa000, 0x2b9: 0xa000,
	0x2bf: 0xa000,
	// Block 0xb, offset 0x2c0
	0x2c0: 0x3724, 0x2c1: 0x3730, 0x2c3: 0x371e,
	0x2c6: 0xa000, 0x2c7: 0x370c,
	0x2cc: 0x3760, 0x2cd: 0x3748, 0x2ce: 0x3772, 0x2d0: 0xa000,
	0x2d3: 0xa000, 0x2d5: 0xa000, 0x2d6: 0xa000, 0x2d7: 0xa000,
	0x2d8: 0xa000, 0x2d9: 0x3754, 0x2da: 0xa000,
	0x2de: 0xa000, 0x2e3: 0xa000,
	0x2e7: 0xa000,
	0x2eb: 0xa000, 0x2ed: 0xa000,
	0x2f0: 0xa000, 0x2f3: 0xa000, 0x2f5: 0xa000,
	0x2f6: 0xa000, 0x2f7: 0xa000, 0x2f8: 0xa000, 0x2f9: 0x37d8, 0x2fa: 0xa000,
	0x2fe: 0xa000,
	// Block 0xc, offset 0x300
	0x301: 0x3736, 0x302: 0x37ba,
	0x310: 0x3712, 0x311: 0x3796,
	0x312: 0x3718, 0x313: 0x379c, 0x316: 0x372a, 0x317: 0x37ae,
	0x318: 0xa000, 0x319: 0xa000, 0x31a: 0x382c, 0x31b: 0x3832, 0x31c: 0x373c, 0x31d: 0x37c0,
	0x31e: 0x3742, 0x31f: 0x37c6, 0x322: 0x374e, 0x323: 0x37d2,
	0x324: 0x375a, 0x325: 0x37de, 0x326: 0x3766, 0x327: 0x37ea, 0x328: 0xa000, 0x329: 0xa000,
	0x32a: 0x3838, 0x32b: 0x383e, 0x32c: 0x3790, 0x32d: 0x3814, 0x32e: 0x376c, 0x32f: 0x37f0,
	0x330: 0x3778, 0x331: 0x37fc, 0x332: 0x377e, 0x333: 0x3802, 0x334: 0x3784, 0x335: 0x3808,
	0x338: 0x378a, 0x339: 0x380e,
	// Block 0xd, offset 0x340
	0x351: 0x812d,
	0x352: 0x8132, 0x353: 0x8132, 0x354: 0x8132, 0x355: 0x8132, 0x356: 0x812d, 0x357: 0x8132,
	0x358: 0x8132, 0x359: 0x8132, 0x35a: 0x812e, 0x35b: 0x812d, 0x35c: 0x8132, 0x35d: 0x8132,
	0x35e: 0x8132, 0x35f: 0x8132, 0x360: 0x8132, 0x361: 0x8132, 0x362: 0x812d, 0x363: 0x812d,
	0x364: 0x812d, 0x365: 0x812d, 0x366: 0x812d, 0x367: 0x812d, 0x368: 0x8132, 0x369: 0x8132,
	0x36a: 0x812d, 0x36b: 0x8132, 0x36c: 0x8132, 0x36d: 0x812e, 0x36e: 0x8131, 0x36f: 0x8132,
	0x370: 0x8105, 0x371: 0x8106, 0x372: 0x8107, 0x373: 0x8108, 0x374: 0x8109, 0x375: 0x810a,
	0x376: 0x810b, 0x377: 0x810c, 0x378: 0x810d, 0x379: 0x810e, 0x37a: 0x810e, 0x37b: 0x810f,
	0x37c: 0x8110, 0x37d: 0x8111, 0x37f: 0x8112,
	// Block 0xe, offset 0x380
	0x388: 0xa000, 0x38a: 0xa000, 0x38b: 0x8116,
	0x38c: 0x8117, 0x38d: 0x8118, 0x38e: 0x8119, 0x38f: 0x811a, 0x390: 0x811b, 0x391: 0x811c,
	0x392: 0x811d, 0x393: 0x9932, 0x394: 0x9932, 0x395: 0x992d, 0x396: 0x812d, 0x397: 0x8132,
	0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x8132, 0x39b: 0x8132, 0x39c: 0x812d, 0x39d: 0x8132,
	0x39e: 0x8132, 0x39f: 0x812d,
	0x3b0: 0x811e,
	// Block 0xf, offset 0x3c0
	0x3d3: 0x812d, 0x3d4: 0x8132, 0x3d5: 0x8132, 0x3d6: 0x8132, 0x3d7: 0x8132,
	0x3d8: 0x8132, 0x3d9: 0x8132, 0x3da: 0x8132, 0x3db: 0x8132, 0x3dc: 0x8132, 0x3dd: 0x8132,
	0x3de: 0x8132, 0x3df: 0x8132, 0x3e0: 0x8132, 0x3e1: 0x8132, 0x3e3: 0x812d,
	0x3e4: 0x8132, 0x3e5: 0x8132, 0x3e6: 0x812d, 0x3e7: 0x8132, 0x3e8: 0x8132, 0x3e9: 0x812d,
	0x3ea: 0x8132, 0x3eb: 0x8132, 0x3ec: 0x8132, 0x3ed: 0x812d, 0x3ee: 0x812d, 0x3ef: 0x812d,
	0x3f0: 0x8116, 0x3f1: 0x8117, 0x3f2: 0x8118, 0x3f3: 0x8132, 0x3f4: 0x8132, 0x3f5: 0x8132,
	0x3f6: 0x812d, 0x3f7: 0x8132, 0x3f8: 0x8132, 0x3f9: 0x812d, 0x3fa: 0x812d, 0x3fb: 0x8132,
	0x3fc: 0x8132, 0x3fd: 0x8132, 0x3fe: 0x8132, 0x3ff: 0x8132,
	// Block 0x10, offset 0x400
	0x405: 0xa000,
	0x406: 0x2d29, 0x407: 0xa000, 0x408: 0x2d31, 0x409: 0xa000, 0x40a: 0x2d39, 0x40b: 0xa000,
	0x40c: 0x2d41, 0x40d: 0xa000, 0x40e: 0x2d49, 0x411: 0xa000,
	0x412: 0x2d51,
	0x434: 0x8102, 0x435: 0x9900,
	0x43a: 0xa000, 0x43b: 0x2d59,
	0x43c: 0xa000, 0x43d: 0x2d61, 0x43e: 0xa000, 0x43f: 0xa000,
	// Block 0x11, offset 0x440
	0x440: 0x8132, 0x441: 0x8132, 0x442: 0x812d, 0x443: 0x8132, 0x444: 0x8132, 0x445: 0x8132,
	0x446: 0x8132, 0x447: 0x8132, 0x448: 0x8132, 0x449: 0x8132, 0x44a: 0x812d, 0x44b: 0x8132,
	0x44c: 0x8132, 0x44d: 0x8135, 0x44e: 0x812a, 0x44f: 0x812d, 0x450: 0x8129, 0x451: 0x8132,
	0x452: 0x8132, 0x453: 0x8132, 0x454: 0x8132, 0x455: 0x8132, 0x456: 0x8132, 0x457: 0x8132,
	0x458: 0x8132, 0x459: 0x8132, 0x45a: 0x8132, 0x45b: 0x8132, 0x45c: 0x8132, 0x45d: 0x8132,
	0x45e: 0x8132, 0x45f: 0x8132, 0x460: 0x8132, 0x461: 0x8132, 0x462: 0x8132, 0x463: 0x8132,
	0x464: 0x8132, 0x465: 0x8132, 0x466: 0x8132, 0x467: 0x8132, 0x468: 0x8132, 0x469: 0x8132,
	0x46a: 0x8132, 0x46b: 0x8132, 0x46c: 0x8132, 0x46d: 0x8132, 0x46e: 0x8132, 0x46f: 0x8132,
	0x470: 0x8132, 0x471: 0x8132, 0x472: 0x8132, 0x473: 0x8132, 0x474: 0x8132, 0x475: 0x8132,
	0x476: 0x8133, 0x477: 0x8131, 0x478: 0x8131, 0x479: 0x812d, 0x47b: 0x8132,
	0x47c: 0x8134, 0x47d: 0x812d, 0x47e: 0x8132, 0x47f: 0x812d,
	// Block 0x12, offset 0x480
	0x480: 0x2f9a, 0x481: 0x32a6, 0x482: 0x2fa4, 0x483: 0x32b0, 0x484: 0x2fa9, 0x485: 0x32b5,
	0x486: 0x2fae, 0x487: 0x32ba, 0x488: 0x38cf, 0x489: 0x3a5e, 0x48a: 0x2fc7, 0x48b: 0x32d3,
	0x48c: 0x2fd1, 0x48d: 0x32dd, 0x48e: 0x2fe0, 0x48f: 0x32ec, 0x490: 0x2fd6, 0x491: 0x32e2,
	0x492: 0x2fdb, 0x493: 0x32e7, 0x494: 0x38f2, 0x495: 0x3a81, 0x496: 0x38f9, 0x497: 0x3a88,
	0x498: 0x301c, 0x499: 0x3328, 0x49a: 0x3021, 0x49b: 0x332d, 0x49c: 0x3907, 0x49d: 0x3a96,
	0x49e: 0x3026, 0x49f: 0x3332, 0x4a0: 0x3035, 0x4a1: 0x3341, 0x4a2: 0x3053, 0x4a3: 0x335f,
	0x4a4: 0x3062, 0x4a5: 0x336e, 0x4a6: 0x3058, 0x4a7: 0x3364, 0x4a8: 0x3067, 0x4a9: 0x3373,
	0x4aa: 0x306c, 0x4ab: 0x3378, 0x4ac: 0x30b2, 0x4ad: 0x33be, 0x4ae: 0x390e, 0x4af: 0x3a9d,
	0x4b0: 0x30bc, 0x4b1: 0x33cd, 0x4b2: 0x30c6, 0x4b3: 0x33d7, 0x4b4: 0x30d0, 0x4b5: 0x33e1,
	0x4b6: 0x46c7, 0x4b7: 0x4758, 0x4b8: 0x3915, 0x4b9: 0x3aa4, 0x4ba: 0x30e9, 0x4bb: 0x33fa,
	0x4bc: 0x30e4, 0x4bd: 0x33f5, 0x4be: 0x30ee, 0x4bf: 0x33ff,
	// Block 0x13, offset 0x4c0
	0x4c0: 0x30f3, 0x4c1: 0x3404, 0x4c2: 0x30f8, 0x4c3: 0x3409, 0x4c4: 0x310c, 0x4c5: 0x341d,
	0x4c6: 0x3116, 0x4c7: 0x3427, 0x4c8: 0x3125, 0x4c9: 0x3436, 0x4ca: 0x3120, 0x4cb: 0x3431,
	0x4cc: 0x3938, 0x4cd: 0x3ac7, 0x4ce: 0x3946, 0x4cf: 0x3ad5, 0x4d0: 0x394d, 0x4d1: 0x3adc,
	0x4d2: 0x3954, 0x4d3: 0x3ae3, 0x4d4: 0x3152, 0x4d5: 0x3463, 0x4d6: 0x3157, 0x4d7: 0x3468,
	0x4d8: 0x3161, 0x4d9: 0x3472, 0x4da: 0x46f4, 0x4db: 0x4785, 0x4dc: 0x399a, 0x4dd: 0x3b29,
	0x4de: 0x317a, 0x4df: 0x348b, 0x4e0: 0x3184, 0x4e1: 0x3495, 0x4e2: 0x4703, 0x4e3: 0x4794,
	0x4e4: 0x39a1, 0x4e5: 0x3b30, 0x4e6: 0x39a8, 0x4e7: 0x3b37, 0x4e8: 0x39af, 0x4e9: 0x3b3e,
	0x4ea: 0x3193, 0x4eb: 0x34a4, 0x4ec: 0x319d, 0x4ed: 0x34b3, 0x4ee: 0x31b1, 0x4ef: 0x34c7,
	0x4f0: 0x31ac, 0x4f1: 0x34c2, 0x4f2: 0x31ed, 0x4f3: 0x3503, 0x4f4: 0x31fc, 0x4f5: 0x3512,
	0x4f6: 0x31f7, 0x4f7: 0x350d, 0x4f8: 0x39b6, 0x4f9: 0x3b45, 0x4fa: 0x39bd, 0x4fb: 0x3b4c,
	0x4fc: 0x3201, 0x4fd: 0x3517, 0x4fe: 0x3206, 0x4ff: 0x351c,
	// Block 0x14, offset 0x500
	0x500: 0x320b, 0x501: 0x3521, 0x502: 0x3210, 0x503: 0x3526, 0x504: 0x321f, 0x505: 0x3535,
	0x506: 0x321a, 0x507: 0x3530, 0x508: 0x3224, 0x509: 0x353f, 0x50a: 0x3229, 0x50b: 0x3544,
	0x50c: 0x322e, 0x50d: 0x3549, 0x50e: 0x324c, 0x50f: 0x3567, 0x510: 0x3265, 0x511: 0x3585,
	0x512: 0x3274, 0x513: 0x3594, 0x514: 0x3279, 0x515: 0x3599, 0x516: 0x337d, 0x517: 0x34a9,
	0x518: 0x353a, 0x519: 0x3576, 0x51b: 0x35d4,
	0x520: 0x46a4, 0x521: 0x4735, 0x522: 0x2f86, 0x523: 0x3292,
	0x524: 0x387b, 0x525: 0x3a0a, 0x526: 0x3874, 0x527: 0x3a03, 0x528: 0x3889, 0x529: 0x3a18,
	0x52a: 0x3882, 0x52b: 0x3a11, 0x52c: 0x38c1, 0x52d: 0x3a50, 0x52e: 0x3897, 0x52f: 0x3a26,
	0x530: 0x3890, 0x531: 0x3a1f, 0x532: 0x38a5, 0x533: 0x3a34, 0x534: 0x389e, 0x535: 0x3a2d,
	0x536: 0x38c8, 0x537: 0x3a57, 0x538: 0x46b8, 0x539: 0x4749, 0x53a: 0x3003, 0x53b: 0x330f,
	0x53c: 0x2fef, 0x53d: 0x32fb, 0x53e: 0x38dd, 0x53f: 0x3a6c,
	// Block 0x15, offset 0x540
	0x540: 0x38d6, 0x541: 0x3a65, 0x542: 0x38eb, 0x543: 0x3a7a, 0x544: 0x38e4, 0x545: 0x3a73,
	0x546: 0x3900, 0x547: 0x3a8f, 0x548: 0x3094, 0x549: 0x33a0, 0x54a: 0x30a8, 0x54b: 0x33b4,
	0x54c: 0x46ea, 0x54d: 0x477b, 0x54e: 0x3139, 0x54f: 0x344a, 0x550: 0x3923, 0x551: 0x3ab2,
	0x552: 0x391c, 0x553: 0x3aab, 0x554: 0x3931, 0x555: 0x3ac0, 0x556: 0x392a, 0x557: 0x3ab9,
	0x558: 0x398c, 0x559: 0x3b1b, 0x55a: 0x3970, 0x55b: 0x3aff, 0x55c: 0x3969, 0x55d: 0x3af8,
	0x55e: 0x397e, 0x55f: 0x3b0d, 0x560: 0x3977, 0x561: 0x3b06, 0x562: 0x3985, 0x563: 0x3b14,
	0x564: 0x31e8, 0x565: 0x34fe, 0x566: 0x31ca, 0x567: 0x34e0, 0x568: 0x39e7, 0x569: 0x3b76,
	0x56a: 0x39e0, 0x56b: 0x3b6f, 0x56c: 0x39f5, 0x56d: 0x3b84, 0x56e: 0x39ee, 0x56f: 0x3b7d,
	0x570: 0x39fc, 0x571: 0x3b8b, 0x572: 0x3233, 0x573: 0x354e, 0x574: 0x325b, 0x575: 0x357b,
	0x576: 0x3256, 0x577: 0x3571, 0x578: 0x3242, 0x579: 0x355d,
	// Block 0x16, offset 0x580
	0x580: 0x4807, 0x581: 0x480d, 0x582: 0x4921, 0x583: 0x4939, 0x584: 0x4929, 0x585: 0x4941,
	0x586: 0x4931, 0x587: 0x4949, 0x588: 0x47ad, 0x589: 0x47b3, 0x58a: 0x4891, 0x58b: 0x48a9,
	0x58c: 0x4899, 0x58d: 0x48b1, 0x58e: 0x48a1, 0x58f: 0x48b9, 0x590: 0x4819, 0x591: 0x481f,
	0x592: 0x3dbb, 0x593: 0x3dcb, 0x594: 0x3dc3, 0x595: 0x3dd3,
	0x598: 0x47b9, 0x599: 0x47bf, 0x59a: 0x3ceb, 0x59b: 0x3cfb, 0x59c: 0x3cf3, 0x59d: 0x3d03,
	0x5a0: 0x4831, 0x5a1: 0x4837, 0x5a2: 0x4951, 0x5a3: 0x4969,
	0x5a4: 0x4959, 0x5a5: 0x4971, 0x5a6: 0x4961, 0x5a7: 0x4979, 0x5a8: 0x47c5, 0x5a9: 0x47cb,
	0x5aa: 0x48c1, 0x5ab: 0x48d9, 0x5ac: 0x48c9, 0x5ad: 0x48e1, 0x5ae: 0x48d1, 0x5af: 0x48e9,
	0x5b0: 0x4849, 0x5b1: 0x484f, 0x5b2: 0x3e1b, 0x5b3: 0x3e33, 0x5b4: 0x3e23, 0x5b5: 0x3e3b,
	0x5b6: 0x3e2b, 0x5b7: 0x3e43, 0x5b8: 0x47d1, 0x5b9: 0x47d7, 0x5ba: 0x3d1b, 0x5bb: 0x3d33,
	0x5bc: 0x3d23, 0x5bd: 0x3d3b, 0x5be: 0x3d2b, 0x5bf: 0x3d43,
	// Block 0x17, offset 0x5c0
	0x5c0: 0x4855, 0x5c1: 0x485b, 0x5c2: 0x3e4b, 0x5c3: 0x3e5b, 0x5c4: 0x3e53, 0x5c5: 0x3e63,
	0x5c8: 0x47dd, 0x5c9: 0x47e3, 0x5ca: 0x3d4b, 0x5cb: 0x3d5b,
	0x5cc: 0x3d53, 0x5cd: 0x3d63, 0x5d0: 0x4867, 0x5d1: 0x486d,
	0x5d2: 0x3e83, 0x5d3: 0x3e9b, 0x5d4: 0x3e8b, 0x5d5: 0x3ea3, 0x5d6: 0x3e93, 0x5d7: 0x3eab,
	0x5d9: 0x47e9, 0x5db: 0x3d6b, 0x5dd: 0x3d73,
	0x5df: 0x3d7b, 0x5e0: 0x487f, 0x5e1: 0x4885, 0x5e2: 0x4981, 0x5e3: 0x4999,
	0x5e4: 0x4989, 0x5e5: 0x49a1, 0x5e6: 0x4991, 0x5e7: 0x49a9, 0x5e8: 0x47ef, 0x5e9: 0x47f5,
	0x5ea: 0x48f1, 0x5eb: 0x4909, 0x5ec: 0x48f9, 0x5ed: 0x4911, 0x5ee: 0x4901, 0x5ef: 0x4919,
	0x5f0: 0x47fb, 0x5f1: 0x4321, 0x5f2: 0x3694, 0x5f3: 0x4327, 0x5f4: 0x4825, 0x5f5: 0x432d,
	0x5f6: 0x36a6, 0x5f7: 0x4333, 0x5f8: 0x36c4, 0x5f9: 0x4339, 0x5fa: 0x36dc, 0x5fb: 0x433f,
	0x5fc: 0x4873, 0x5fd: 0x4345,
	// Block 0x18, offset 0x600
	0x600: 0x3da3, 0x601: 0x3dab, 0x602: 0x4187, 0x603: 0x41a5, 0x604: 0x4191, 0x605: 0x41af,
	0x606: 0x419b, 0x607: 0x41b9, 0x608: 0x3cdb, 0x609: 0x3ce3, 0x60a: 0x40d3, 0x60b: 0x40f1,
	0x60c: 0x40dd, 0x60d: 0x40fb, 0x60e: 0x40e7, 0x60f: 0x4105, 0x610: 0x3deb, 0x611: 0x3df3,
	0x612: 0x41c3, 0x613: 0x41e1, 0x614: 0x41cd, 0x615: 0x41eb, 0x616: 0x41d7, 0x617: 0x41f5,
	0x618: 0x3d0b, 0x619: 0x3d13, 0x61a: 0x410f, 0x61b: 0x412d, 0x61c: 0x4119, 0x61d: 0x4137,
	0x61e: 0x4123, 0x61f: 0x4141, 0x620: 0x3ec3, 0x621: 0x3ecb, 0x622: 0x41ff, 0x623: 0x421d,
	0x624: 0x4209, 0x625: 0x4227, 0x626: 0x4213, 0x627: 0x4231, 0x628: 0x3d83, 0x629: 0x3d8b,
	0x62a: 0x414b, 0x62b: 0x4169, 0x62c: 0x4155, 0x62d: 0x4173, 0x62e: 0x415f, 0x62f: 0x417d,
	0x630: 0x3688, 0x631: 0x3682, 0x632: 0x3d93, 0x633: 0x368e, 0x634: 0x3d9b,
	0x636: 0x4813, 0x637: 0x3db3, 0x638: 0x35f8, 0x639: 0x35f2, 0x63a: 0x35e6, 0x63b: 0x42f1,
	0x63c: 0x35fe, 0x63d: 0x8100, 0x63e: 0x01d3, 0x63f: 0xa100,
	// Block 0x19, offset 0x640
	0x640: 0x8100, 0x641: 0x35aa, 0x642: 0x3ddb, 0x643: 0x36a0, 0x644: 0x3de3,
	0x646: 0x483d, 0x647: 0x3dfb, 0x648: 0x3604, 0x649: 0x42f7, 0x64a: 0x3610, 0x64b: 0x42fd,
	0x64c: 0x361c, 0x64d: 0x3b92, 0x64e: 0x3b99, 0x64f: 0x3ba0, 0x650: 0x36b8, 0x651: 0x36b2,
	0x652: 0x3e03, 0x653: 0x44e7, 0x656: 0x36be, 0x657: 0x3e13,
	0x658: 0x3634, 0x659: 0x362e, 0x65a: 0x3622, 0x65b: 0x4303, 0x65d: 0x3ba7,
	0x65e: 0x3bae, 0x65f: 0x3bb5, 0x660: 0x36ee, 0x661: 0x36e8, 0x662: 0x3e6b, 0x663: 0x44ef,
	0x664: 0x36d0, 0x665: 0x36d6, 0x666: 0x36f4, 0x667: 0x3e7b, 0x668: 0x3664, 0x669: 0x365e,
	0x66a: 0x3652, 0x66b: 0x430f, 0x66c: 0x364c, 0x66d: 0x359e, 0x66e: 0x42eb, 0x66f: 0x0081,
	0x672: 0x3eb3, 0x673: 0x36fa, 0x674: 0x3ebb,
	0x676: 0x488b, 0x677: 0x3ed3, 0x678: 0x3640, 0x679: 0x4309, 0x67a: 0x3670, 0x67b: 0x431b,
	0x67c: 0x367c, 0x67d: 0x4259, 0x67e: 0xa100,
	// Block 0x1a, offset 0x680
	0x681: 0x3c09, 0x683: 0xa000, 0x684: 0x3c10, 0x685: 0xa000,
	0x687: 0x3c17, 0x688: 0xa000, 0x689: 0x3c1e,
	0x68d: 0xa000,
	0x6a0: 0x2f68, 0x6a1: 0xa000, 0x6a2: 0x3c2c,
	0x6a4: 0xa000, 0x6a5: 0xa000,
	0x6ad: 0x3c25, 0x6ae: 0x2f63, 0x6af: 0x2f6d,
	0x6b0: 0x3c33, 0x6b1: 0x3c3a, 0x6b2: 0xa000, 0x6b3: 0xa000, 0x6b4: 0x3c41, 0x6b5: 0x3c48,
	0x6b6: 0xa000, 0x6b7: 0xa000, 0x6b8: 0x3c4f, 0x6b9: 0x3c56, 0x6ba: 0xa000, 0x6bb: 0xa000,
	0x6bc: 0xa000, 0x6bd: 0xa000,
	// Block 0x1b, offset 0x6c0
	0x6c0: 0x3c5d, 0x6c1: 0x3c64, 0x6c2: 0xa000, 0x6c3: 0xa000, 0x6c4: 0x3c79, 0x6c5: 0x3c80,
	0x6c6: 0xa000, 0x6c7: 0xa000, 0x6c8: 0x3c87, 0x6c9: 0x3c8e,
	0x6d1: 0xa000,
	0x6d2: 0xa000,
	0x6e2: 0xa000,
	0x6e8: 0xa000, 0x6e9: 0xa000,
	0x6eb: 0xa000, 0x6ec: 0x3ca3, 0x6ed: 0x3caa, 0x6ee: 0x3cb1, 0x6ef: 0x3cb8,
	0x6f2: 0xa000, 0x6f3: 0xa000, 0x6f4: 0xa000, 0x6f5: 0xa000,
	// Block 0x1c, offset 0x700
	0x706: 0xa000, 0x70b: 0xa000,
	0x70c: 0x3f0b, 0x70d: 0xa000, 0x70e: 0x3f13, 0x70f: 0xa000, 0x710: 0x3f1b, 0x711: 0xa000,
	0x712: 0x3f23, 0x713: 0xa000, 0x714: 0x3f2b, 0x715: 0xa000, 0x716: 0x3f33, 0x717: 0xa000,
	0x718: 0x3f3b, 0x719: 0xa000, 0x71a: 0x3f43, 0x71b: 0xa000, 0x71c: 0x3f4b, 0x71d: 0xa000,
	0x71e: 0x3f53, 0x71f: 0xa000, 0x720: 0x3f5b, 0x721: 0xa000, 0x722: 0x3f63,
	0x724: 0xa000, 0x725: 0x3f6b, 0x726: 0xa000, 0x727: 0x3f73, 0x728: 0xa000, 0x729: 0x3f7b,
	0x72f: 0xa000,
	0x730: 0x3f83, 0x731: 0x3f8b, 0x732: 0xa000, 0x733: 0x3f93, 0x734: 0x3f9b, 0x735: 0xa000,
	0x736: 0x3fa3, 0x737: 0x3fab, 0x738: 0xa000, 0x739: 0x3fb3, 0x73a: 0x3fbb, 0x73b: 0xa000,
	0x73c: 0x3fc3, 0x73d: 0x3fcb,
	// Block 0x1d, offset 0x740
	0x754: 0x3f03,
	0x759: 0x9903, 0x75a: 0x9903, 0x75b: 0x8100, 0x75c: 0x8100, 0x75d: 0xa000,
	0x75e: 0x3fd3,
	0x766: 0xa000,
	0x76b: 0xa000, 0x76c: 0x3fe3, 0x76d: 0xa000, 0x76e: 0x3feb, 0x76f: 0xa000,
	0x770: 0x3ff3, 0x771: 0xa000, 0x772: 0x3ffb, 0x773: 0xa000, 0x774: 0x4003, 0x775: 0xa000,
	0x776: 0x400b, 0x777: 0xa000, 0x778: 0x4013, 0x779: 0xa000, 0x77a: 0x401b, 0x77b: 0xa000,
	0x77c: 0x4023, 0x77d: 0xa000, 0x77e: 0x402b, 0x77f: 0xa000,
	// Block 0x1e, offset 0x780
	0x780: 0x4033, 0x781: 0xa000, 0x782: 0x403b, 0x784: 0xa000, 0x785: 0x4043,
	0x786: 0xa000, 0x787: 0x404b, 0x788: 0xa000, 0x789: 0x4053,
	0x78f: 0xa000, 0x790: 0x405b, 0x791: 0x4063,
	0x792: 0xa000, 0x793: 0x406b, 0x794: 0x4073, 0x795: 0xa000, 0x796: 0x407b, 0x797: 0x4083,
	0x798: 0xa000, 0x799: 0x408b, 0x79a: 0x4093, 0x79b: 0xa000, 0x79c: 0x409b, 0x79d: 0x40a3,
	0x7af: 0xa000,
	0x7b0: 0xa000, 0x7b1: 0xa000, 0x7b2: 0xa000, 0x7b4: 0x3fdb,
	0x7b7: 0x40ab, 0x7b8: 0x40b3, 0x7b9: 0x40bb, 0x7ba: 0x40c3,
	0x7bd: 0xa000, 0x7be: 0x40cb,
	// Block 0x1f, offset 0x7c0
	0x7c0: 0x1377, 0x7c1: 0x0cfb, 0x7c2: 0x13d3, 0x7c3: 0x139f, 0x7c4: 0x0e57, 0x7c5: 0x06eb,
	0x7c6: 0x08df, 0x7c7: 0x162b, 0x7c8: 0x162b, 0x7c9: 0x0a0b, 0x7ca: 0x145f, 0x7cb: 0x0943,
	0x7cc: 0x0a07, 0x7cd: 0x0bef, 0x7ce: 0x0fcf, 0x7cf: 0x115f, 0x7d0: 0x1297, 0x7d1: 0x12d3,
	0x7d2: 0x1307, 0x7d3: 0x141b, 0x7d4: 0x0d73, 0x7d5: 0x0dff, 0x7d6: 0x0eab, 0x7d7: 0x0f43,
	0x7d8: 0x125f, 0x7d9: 0x1447, 0x7da: 0x1573, 0x7db: 0x070f, 0x7dc: 0x08b3, 0x7dd: 0x0d87,
	0x7de: 0x0ecf, 0x7df: 0x1293, 0x7e0: 0x15c3, 0x7e1: 0x0ab3, 0x7e2: 0x0e77, 0x7e3: 0x1283,
	0x7e4: 0x1317, 0x7e5: 0x0c23, 0x7e6: 0x11bb, 0x7e7: 0x12df, 0x7e8: 0x0b1f, 0x7e9: 0x0d0f,
	0x7ea: 0x0e17, 0x7eb: 0x0f1b, 0x7ec: 0x1427, 0x7ed: 0x074f, 0x7ee: 0x07e7, 0x7ef: 0x0853,
	0x7f0: 0x0c8b, 0x7f1: 0x0d7f, 0x7f2: 0x0ecb, 0x7f3: 0x0fef, 0x7f4: 0x1177, 0x7f5: 0x128b,
	0x7f6: 0x12a3, 0x7f7: 0x13c7, 0x7f8: 0x14ef, 0x7f9: 0x15a3, 0x7fa: 0x15bf, 0x7fb: 0x102b,
	0x7fc: 0x106b, 0x7fd: 0x1123, 0x7fe: 0x1243, 0x7ff: 0x147b,
	// Block 0x20, offset 0x800
	0x800: 0x15cb, 0x801: 0x134b, 0x802: 0x09c7, 0x803: 0x0b3b, 0x804: 0x10db, 0x805: 0x119b,
	0x806: 0x0eff, 0x807: 0x1033, 0x808: 0x1397, 0x809: 0x14e7, 0x80a: 0x09c3, 0x80b: 0x0a8f,
	0x80c: 0x0d77, 0x80d: 0x0e2b, 0x80e: 0x0e5f, 0x80f: 0x1113, 0x810: 0x113b, 0x811: 0x14a7,
	0x812: 0x084f, 0x813: 0x11a7, 0x814: 0x07f3, 0x815: 0x07ef, 0x816: 0x1097, 0x817: 0x1127,
	0x818: 0x125b, 0x819: 0x14af, 0x81a: 0x1367, 0x81b: 0x0c27, 0x81c: 0x0d73, 0x81d: 0x1357,
	0x81e: 0x06f7, 0x81f: 0x0a63, 0x820: 0x0b93, 0x821: 0x0f2f, 0x822: 0x0faf, 0x823: 0x0873,
	0x824: 0x103b, 0x825: 0x075f, 0x826: 0x0b77, 0x827: 0x06d7, 0x828: 0x0deb, 0x829: 0x0ca3,
	0x82a: 0x110f, 0x82b: 0x08c7, 0x82c: 0x09b3, 0x82d: 0x0ffb, 0x82e: 0x1263, 0x82f: 0x133b,
	0x830: 0x0db7, 0x831: 0x13f7, 0x832: 0x0de3, 0x833: 0x0c37, 0x834: 0x121b, 0x835: 0x0c57,
	0x836: 0x0fab, 0x837: 0x072b, 0x838: 0x07a7, 0x839: 0x07eb, 0x83a: 0x0d53, 0x83b: 0x10fb,
	0x83c: 0x11f3, 0x83d: 0x1347, 0x83e: 0x145b, 0x83f: 0x085b,
	// Block 0x21, offset 0x840
	0x840: 0x090f, 0x841: 0x0a17, 0x842: 0x0b2f, 0x843: 0x0cbf, 0x844: 0x0e7b, 0x845: 0x103f,
	0x846: 0x1497, 0x847: 0x157b, 0x848: 0x15cf, 0x849: 0x15e7, 0x84a: 0x0837, 0x84b: 0x0cf3,
	0x84c: 0x0da3, 0x84d: 0x13eb, 0x84e: 0x0afb, 0x84f: 0x0bd7, 0x850: 0x0bf3, 0x851: 0x0c83,
	0x852: 0x0e6b, 0x853: 0x0eb7, 0x854: 0x0f67, 0x855: 0x108b, 0x856: 0x112f, 0x857: 0x1193,
	0x858: 0x13db, 0x859: 0x126b, 0x85a: 0x1403, 0x85b: 0x147f, 0x85c: 0x080f, 0x85d: 0x083b,
	0x85e: 0x0923, 0x85f: 0x0ea7, 0x860: 0x12f3, 0x861: 0x133b, 0x862: 0x0b1b, 0x863: 0x0b8b,
	0x864: 0x0c4f, 0x865: 0x0daf, 0x866: 0x10d7, 0x867: 0x0f23, 0x868: 0x073b, 0x869: 0x097f,
	0x86a: 0x0a63, 0x86b: 0x0ac7, 0x86c: 0x0b97, 0x86d: 0x0f3f, 0x86e: 0x0f5b, 0x86f: 0x116b,
	0x870: 0x118b, 0x871: 0x1463, 0x872: 0x14e3, 0x873: 0x14f3, 0x874: 0x152f, 0x875: 0x0753,
	0x876: 0x107f, 0x877: 0x144f, 0x878: 0x14cb, 0x879: 0x0baf, 0x87a: 0x0717, 0x87b: 0x0777,
	0x87c: 0x0a67, 0x87d: 0x0a87, 0x87e: 0x0caf, 0x87f: 0x0d73,
	// Block 0x22, offset 0x880
	0x880: 0x0ec3, 0x881: 0x0fcb, 0x882: 0x1277, 0x883: 0x1417, 0x884: 0x1623, 0x885: 0x0ce3,
	0x886: 0x14a3, 0x887: 0x0833, 0x888: 0x0d2f, 0x889: 0x0d3b, 0x88a: 0x0e0f, 0x88b: 0x0e47,
	0x88c: 0x0f4b, 0x88d: 0x0fa7, 0x88e: 0x1027, 0x88f: 0x110b, 0x890: 0x153b, 0x891: 0x07af,
	0x892: 0x0c03, 0x893: 0x14b3, 0x894: 0x0767, 0x895: 0x0aab, 0x896: 0x0e2f, 0x897: 0x13df,
	0x898: 0x0b67, 0x899: 0x0bb7, 0x89a: 0x0d43, 0x89b: 0x0f2f, 0x89c: 0x14bb, 0x89d: 0x0817,
	0x89e: 0x08ff, 0x89f: 0x0a97, 0x8a0: 0x0cd3, 0x8a1: 0x0d1f, 0x8a2: 0x0d5f, 0x8a3: 0x0df3,
	0x8a4: 0x0f47, 0x8a5: 0x0fbb, 0x8a6: 0x1157, 0x8a7: 0x12f7, 0x8a8: 0x1303, 0x8a9: 0x1457,
	0x8aa: 0x14d7, 0x8ab: 0x0883, 0x8ac: 0x0e4b, 0x8ad: 0x0903, 0x8ae: 0x0ec7, 0x8af: 0x0f6b,
	0x8b0: 0x1287, 0x8b1: 0x14bf, 0x8b2: 0x15ab, 0x8b3: 0x15d3, 0x8b4: 0x0d37, 0x8b5: 0x0e27,
	0x8b6: 0x11c3, 0x8b7: 0x10b7, 0x8b8: 0x10c3, 0x8b9: 0x10e7, 0x8ba: 0x0f17, 0x8bb: 0x0e9f,
	0x8bc: 0x1363, 0x8bd: 0x0733, 0x8be: 0x122b, 0x8bf: 0x081b,
	// Block 0x23, offset 0x8c0
	0x8c0: 0x080b, 0x8c1: 0x0b0b, 0x8c2: 0x0c2b, 0x8c3: 0x10f3, 0x8c4: 0x0a53, 0x8c5: 0x0e03,
	0x8c6: 0x0cef, 0x8c7: 0x13e7, 0x8c8: 0x12e7, 0x8c9: 0x14ab, 0x8ca: 0x1323, 0x8cb: 0x0b27,
	0x8cc: 0x0787, 0x8cd: 0x095b, 0x8d0: 0x09af,
	0x8d2: 0x0cdf, 0x8d5: 0x07f7, 0x8d6: 0x0f1f, 0x8d7: 0x0fe3,
	0x8d8: 0x1047, 0x8d9: 0x1063, 0x8da: 0x1067, 0x8db: 0x107b, 0x8dc: 0x14fb, 0x8dd: 0x10eb,
	0x8de: 0x116f, 0x8e0: 0x128f, 0x8e2: 0x1353,
	0x8e5: 0x1407, 0x8e6: 0x1433,
	0x8ea: 0x154f, 0x8eb: 0x1553, 0x8ec: 0x1557, 0x8ed: 0x15bb, 0x8ee: 0x142b, 0x8ef: 0x14c7,
	0x8f0: 0x0757, 0x8f1: 0x077b, 0x8f2: 0x078f, 0x8f3: 0x084b, 0x8f4: 0x0857, 0x8f5: 0x0897,
	0x8f6: 0x094b, 0x8f7: 0x0967, 0x8f8: 0x096f, 0x8f9: 0x09ab, 0x8fa: 0x09b7, 0x8fb: 0x0a93,
	0x8fc: 0x0a9b, 0x8fd: 0x0ba3, 0x8fe: 0x0bcb, 0x8ff: 0x0bd3,
	// Block 0x24, offset 0x900
	0x900: 0x0beb, 0x901: 0x0c97, 0x902: 0x0cc7, 0x903: 0x0ce7, 0x904: 0x0d57, 0x905: 0x0e1b,
	0x906: 0x0e37, 0x907: 0x0e67, 0x908: 0x0ebb, 0x909: 0x0edb, 0x90a: 0x0f4f, 0x90b: 0x102f,
	0x90c: 0x104b, 0x90d: 0x1053, 0x90e: 0x104f, 0x90f: 0x1057, 0x910: 0x105b, 0x911: 0x105f,
	0x912: 0x1073, 0x913: 0x1077, 0x914: 0x109b, 0x915: 0x10af, 0x916: 0x10cb, 0x917: 0x112f,
	0x918: 0x1137, 0x919: 0x113f, 0x91a: 0x1153, 0x91b: 0x117b, 0x91c: 0x11cb, 0x91d: 0x11ff,
	0x91e: 0x11ff, 0x91f: 0x1267, 0x920: 0x130f, 0x921: 0x1327, 0x922: 0x135b, 0x923: 0x135f,
	0x924: 0x13a3, 0x925: 0x13a7, 0x926: 0x13ff, 0x927: 0x1407, 0x928: 0x14db, 0x929: 0x151f,
	0x92a: 0x1537, 0x92b: 0x0b9b, 0x92c: 0x171e, 0x92d: 0x11e3,
	0x930: 0x06df, 0x931: 0x07e3, 0x932: 0x07a3, 0x933: 0x074b, 0x934: 0x078b, 0x935: 0x07b7,
	0x936: 0x0847, 0x937: 0x0863, 0x938: 0x094b, 0x939: 0x0937, 0x93a: 0x0947, 0x93b: 0x0963,
	0x93c: 0x09af, 0x93d: 0x09bf, 0x93e: 0x0a03, 0x93f: 0x0a0f,
	// Block 0x25, offset 0x940
	0x940: 0x0a2b, 0x941: 0x0a3b, 0x942: 0x0b23, 0x943: 0x0b2b, 0x944: 0x0b5b, 0x945: 0x0b7b,
	0x946: 0x0bab, 0x947: 0x0bc3, 0x948: 0x0bb3, 0x949: 0x0bd3, 0x94a: 0x0bc7, 0x94b: 0x0beb,
	0x94c: 0x0c07, 0x94d: 0x0c5f, 0x94e: 0x0c6b, 0x94f: 0x0c73, 0x950: 0x0c9b, 0x951: 0x0cdf,
	0x952: 0x0d0f, 0x953: 0x0d13, 0x954: 0x0d27, 0x955: 0x0da7, 0x956: 0x0db7, 0x957: 0x0e0f,
	0x958: 0x0e5b, 0x959: 0x0e53, 0x95a: 0x0e67, 0x95b: 0x0e83, 0x95c: 0x0ebb, 0x95d: 0x1013,
	0x95e: 0x0edf, 0x95f: 0x0f13, 0x960: 0x0f1f, 0x961: 0x0f5f, 0x962: 0x0f7b, 0x963: 0x0f9f,
	0x964: 0x0fc3, 0x965: 0x0fc7, 0x966: 0x0fe3, 0x967: 0x0fe7, 0x968: 0x0ff7, 0x969: 0x100b,
	0x96a: 0x1007, 0x96b: 0x1037, 0x96c: 0x10b3, 0x96d: 0x10cb, 0x96e: 0x10e3, 0x96f: 0x111b,
	0x970: 0x112f, 0x971: 0x114b, 0x972: 0x117b, 0x973: 0x122f, 0x974: 0x1257, 0x975: 0x12cb,
	0x976: 0x1313, 0x977: 0x131f, 0x978: 0x1327, 0x979: 0x133f, 0x97a: 0x1353, 0x97b: 0x1343,
	0x97c: 0x135b, 0x97d: 0x1357, 0x97e: 0x134f, 0x97f: 0x135f,
	// Block 0x26, offset 0x980
	0x980: 0x136b, 0x981: 0x13a7, 0x982: 0x13e3, 0x983: 0x1413, 0x984: 0x144b, 0x985: 0x146b,
	0x986: 0x14b7, 0x987: 0x14db, 0x988: 0x14fb, 0x989: 0x150f, 0x98a: 0x151f, 0x98b: 0x152b,
	0x98c: 0x1537, 0x98d: 0x158b, 0x98e: 0x162b, 0x98f: 0x16b5, 0x990: 0x16b0, 0x991: 0x16e2,
	0x992: 0x0607, 0x993: 0x062f, 0x994: 0x0633, 0x995: 0x1764, 0x996: 0x1791, 0x997: 0x1809,
	0x998: 0x1617, 0x999: 0x1627,
	// Block 0x27, offset 0x9c0
	0x9c0: 0x06fb, 0x9c1: 0x06f3, 0x9c2: 0x0703, 0x9c3: 0x1647, 0x9c4: 0x0747, 0x9c5: 0x0757,
	0x9c6: 0x075b, 0x9c7: 0x0763, 0x9c8: 0x076b, 0x9c9: 0x076f, 0x9ca: 0x077b, 0x9cb: 0x0773,
	0x9cc: 0x05b3, 0x9cd: 0x165b, 0x9ce: 0x078f, 0x9cf: 0x0793, 0x9d0: 0x0797, 0x9d1: 0x07b3,
	0x9d2: 0x164c, 0x9d3: 0x05b7, 0x9d4: 0x079f, 0x9d5: 0x07bf, 0x9d6: 0x1656, 0x9d7: 0x07cf,
	0x9d8: 0x07d7, 0x9d9: 0x0737, 0x9da: 0x07df, 0x9db: 0x07e3, 0x9dc: 0x1831, 0x9dd: 0x07ff,
	0x9de: 0x0807, 0x9df: 0x05bf, 0x9e0: 0x081f, 0x9e1: 0x0823, 0x9e2: 0x082b, 0x9e3: 0x082f,
	0x9e4: 0x05c3, 0x9e5: 0x0847, 0x9e6: 0x084b, 0x9e7: 0x0857, 0x9e8: 0x0863, 0x9e9: 0x0867,
	0x9ea: 0x086b, 0x9eb: 0x0873, 0x9ec: 0x0893, 0x9ed: 0x0897, 0x9ee: 0x089f, 0x9ef: 0x08af,
	0x9f0: 0x08b7, 0x9f1: 0x08bb, 0x9f2: 0x08bb, 0x9f3: 0x08bb, 0x9f4: 0x166a, 0x9f5: 0x0e93,
	0x9f6: 0x08cf, 0x9f7: 0x08d7, 0x9f8: 0x166f, 0x9f9: 0x08e3, 0x9fa: 0x08eb, 0x9fb: 0x08f3,
	0x9fc: 0x091b, 0x9fd: 0x0907, 0x9fe: 0x0913, 0x9ff: 0x0917,
	// Block 0x28, offset 0xa00
	0xa00: 0x091f, 0xa01: 0x0927, 0xa02: 0x092b, 0xa03: 0x0933, 0xa04: 0x093b, 0xa05: 0x093f,
	0xa06: 0x093f, 0xa07: 0x0947, 0xa08: 0x094f, 0xa09: 0x0953, 0xa0a: 0x095f, 0xa0b: 0x0983,
	0xa0c: 0x0967, 0xa0d: 0x0987, 0xa0e: 0x096b, 0xa0f: 0x0973, 0xa10: 0x080b, 0xa11: 0x09cf,
	0xa12: 0x0997, 0xa13: 0x099b, 0xa14: 0x099f, 0xa15: 0x0993, 0xa16: 0x09a7, 0xa17: 0x09a3,
	0xa18: 0x09bb, 0xa19: 0x1674, 0xa1a: 0x09d7, 0xa1b: 0x09db, 0xa1c: 0x09e3, 0xa1d: 0x09ef,
	0xa1e: 0x09f7, 0xa1f: 0x0a13, 0xa20: 0x1679, 0xa21: 0x167e, 0xa22: 0x0a1f, 0xa23: 0x0a23,
	0xa24: 0x0a27, 0xa25: 0x0a1b, 0xa26: 0x0a2f, 0xa27: 0x05c7, 0xa28: 0x05cb, 0xa29: 0x0a37,
	0xa2a: 0x0a3f, 0xa2b: 0x0a3f, 0xa2c: 0x1683, 0xa2d: 0x0a5b, 0xa2e: 0x0a5f, 0xa2f: 0x0a63,
	0xa30: 0x0a6b, 0xa31: 0x1688, 0xa32: 0x0a73, 0xa33: 0x0a77, 0xa34: 0x0b4f, 0xa35: 0x0a7f,
	0xa36: 0x05cf, 0xa37: 0x0a8b, 0xa38: 0x0a9b, 0xa39: 0x0aa7, 0xa3a: 0x0aa3, 0xa3b: 0x1692,
	0xa3c: 0x0aaf, 0xa3d: 0x1697, 0xa3e: 0x0abb, 0xa3f: 0x0ab7,
	// Block 0x29, offset 0xa40
	0xa40: 0x0abf, 0xa41: 0x0acf, 0xa42: 0x0ad3, 0xa43: 0x05d3, 0xa44: 0x0ae3, 0xa45: 0x0aeb,
	0xa46: 0x0aef, 0xa47: 0x0af3, 0xa48: 0x05d7, 0xa49: 0x169c, 0xa4a: 0x05db, 0xa4b: 0x0b0f,
	0xa4c: 0x0b13, 0xa4d: 0x0b17, 0xa4e: 0x0b1f, 0xa4f: 0x1863, 0xa50: 0x0b37, 0xa51: 0x16a6,
	0xa52: 0x16a6, 0xa53: 0x11d7, 0xa54: 0x0b47, 0xa55: 0x0b47, 0xa56: 0x05df, 0xa57: 0x16c9,
	0xa58: 0x179b, 0xa59: 0x0b57, 0xa5a: 0x0b5f, 0xa5b: 0x05e3, 0xa5c: 0x0b73, 0xa5d: 0x0b83,
	0xa5e: 0x0b87, 0xa5f: 0x0b8f, 0xa60: 0x0b9f, 0xa61: 0x05eb, 0xa62: 0x05e7, 0xa63: 0x0ba3,
	0xa64: 0x16ab, 0xa65: 0x0ba7, 0xa66: 0x0bbb, 0xa67: 0x0bbf, 0xa68: 0x0bc3, 0xa69: 0x0bbf,
	0xa6a: 0x0bcf, 0xa6b: 0x0bd3, 0xa6c: 0x0be3, 0xa6d: 0x0bdb, 0xa6e: 0x0bdf, 0xa6f: 0x0be7,
	0xa70: 0x0beb, 0xa71: 0x0bef, 0xa72: 0x0bfb, 0xa73: 0x0bff, 0xa74: 0x0c17, 0xa75: 0x0c1f,
	0xa76: 0x0c2f, 0xa77: 0x0c43, 0xa78: 0x16ba, 0xa79: 0x0c3f, 0xa7a: 0x0c33, 0xa7b: 0x0c4b,
	0xa7c: 0x0c53, 0xa7d: 0x0c67, 0xa7e: 0x16bf, 0xa7f: 0x0c6f,
	// Block 0x2a, offset 0xa80
	0xa80: 0x0c63, 0xa81: 0x0c5b, 0xa82: 0x05ef, 0xa83: 0x0c77, 0xa84: 0x0c7f, 0xa85: 0x0c87,
	0xa86: 0x0c7b, 0xa87: 0x05f3, 0xa88: 0x0c97, 0xa89: 0x0c9f, 0xa8a: 0x16c4, 0xa8b: 0x0ccb,
	0xa8c: 0x0cff, 0xa8d: 0x0cdb, 0xa8e: 0x05ff, 0xa8f: 0x0ce7, 0xa90: 0x05fb, 0xa91: 0x05f7,
	0xa92: 0x07c3, 0xa93: 0x07c7, 0xa94: 0x0d03, 0xa95: 0x0ceb, 0xa96: 0x11ab, 0xa97: 0x0663,
	0xa98: 0x0d0f, 0xa99: 0x0d13, 0xa9a: 0x0d17, 0xa9b: 0x0d2b, 0xa9c: 0x0d23, 0xa9d: 0x16dd,
	0xa9e: 0x0603, 0xa9f: 0x0d3f, 0xaa0: 0x0d33, 0xaa1: 0x0d4f, 0xaa2: 0x0d57, 0xaa3: 0x16e7,
	0xaa4: 0x0d5b, 0xaa5: 0x0d47, 0xaa6: 0x0d63, 0xaa7: 0x0607, 0xaa8: 0x0d67, 0xaa9: 0x0d6b,
	0xaaa: 0x0d6f, 0xaab: 0x0d7b, 0xaac: 0x16ec, 0xaad: 0x0d83, 0xaae: 0x060b, 0xaaf: 0x0d8f,
	0xab0: 0x16f1, 0xab1: 0x0d93, 0xab2: 0x060f, 0xab3: 0x0d9f, 0xab4: 0x0dab, 0xab5: 0x0db7,
	0xab6: 0x0dbb, 0xab7: 0x16f6, 0xab8: 0x168d, 0xab9: 0x16fb, 0xaba: 0x0ddb, 0xabb: 0x1700,
	0xabc: 0x0de7, 0xabd: 0x0def, 0xabe: 0x0ddf, 0xabf: 0x0dfb,
	// Block 0x2b, offset 0xac0
	0xac0: 0x0e0b, 0xac1: 0x0e1b, 0xac2: 0x0e0f, 0xac3: 0x0e13, 0xac4: 0x0e1f, 0xac5: 0x0e23,
	0xac6: 0x1705, 0xac7: 0x0e07, 0xac8: 0x0e3b, 0xac9: 0x0e3f, 0xaca: 0x0613, 0xacb: 0x0e53,
	0xacc: 0x0e4f, 0xacd: 0x170a, 0xace: 0x0e33, 0xacf: 0x0e6f, 0xad0: 0x170f, 0xad1: 0x1714,
	0xad2: 0x0e73, 0xad3: 0x0e87, 0xad4: 0x0e83, 0xad5: 0x0e7f, 0xad6: 0x0617, 0xad7: 0x0e8b,
	0xad8: 0x0e9b, 0xad9: 0x0e97, 0xada: 0x0ea3, 0xadb: 0x1651, 0xadc: 0x0eb3, 0xadd: 0x1719,
	0xade: 0x0ebf, 0xadf: 0x1723, 0xae0: 0x0ed3, 0xae1: 0x0edf, 0xae2: 0x0ef3, 0xae3: 0x1728,
	0xae4: 0x0f07, 0xae5: 0x0f0b, 0xae6: 0x172d, 0xae7: 0x1732, 0xae8: 0x0f27, 0xae9: 0x0f37,
	0xaea: 0x061b, 0xaeb: 0x0f3b, 0xaec: 0x061f, 0xaed: 0x061f, 0xaee: 0x0f53, 0xaef: 0x0f57,
	0xaf0: 0x0f5f, 0xaf1: 0x0f63, 0xaf2: 0x0f6f, 0xaf3: 0x0623, 0xaf4: 0x0f87, 0xaf5: 0x1737,
	0xaf6: 0x0fa3, 0xaf7: 0x173c, 0xaf8: 0x0faf, 0xaf9: 0x16a1, 0xafa: 0x0fbf, 0xafb: 0x1741,
	0xafc: 0x1746, 0xafd: 0x174b, 0xafe: 0x0627, 0xaff: 0x062b,
	// Block 0x2c, offset 0xb00
	0xb00: 0x0ff7, 0xb01: 0x1755, 0xb02: 0x1750, 0xb03: 0x175a, 0xb04: 0x175f, 0xb05: 0x0fff,
	0xb06: 0x1003, 0xb07: 0x1003, 0xb08: 0x100b, 0xb09: 0x0633, 0xb0a: 0x100f, 0xb0b: 0x0637,
	0xb0c: 0x063b, 0xb0d: 0x1769, 0xb0e: 0x1023, 0xb0f: 0x102b, 0xb10: 0x1037, 0xb11: 0x063f,
	0xb12: 0x176e, 0xb13: 0x105b, 0xb14: 0x1773, 0xb15: 0x1778, 0xb16: 0x107b, 0xb17: 0x1093,
	0xb18: 0x0643, 0xb19: 0x109b, 0xb1a: 0x109f, 0xb1b: 0x10a3, 0xb1c: 0x177d, 0xb1d: 0x1782,
	0xb1e: 0x1782, 0xb1f: 0x10bb, 0xb20: 0x0647, 0xb21: 0x1787, 0xb22: 0x10cf, 0xb23: 0x10d3,
	0xb24: 0x064b, 0xb25: 0x178c, 0xb26: 0x10ef, 0xb27: 0x064f, 0xb28: 0x10ff, 0xb29: 0x10f7,
	0xb2a: 0x1107, 0xb2b: 0x1796, 0xb2c: 0x111f, 0xb2d: 0x0653, 0xb2e: 0x112b, 0xb2f: 0x1133,
	0xb30: 0x1143, 0xb31: 0x0657, 0xb32: 0x17a0, 0xb33: 0x17a5, 0xb34: 0x065b, 0xb35: 0x17aa,
	0xb36: 0x115b, 0xb37: 0x17af, 0xb38: 0x1167, 0xb39: 0x1173, 0xb3a: 0x117b, 0xb3b: 0x17b4,
	0xb3c: 0x17b9, 0xb3d: 0x118f, 0xb3e: 0x17be, 0xb3f: 0x1197,
	// Block 0x2d, offset 0xb40
	0xb40: 0x16ce, 0xb41: 0x065f, 0xb42: 0x11af, 0xb43: 0x11b3, 0xb44: 0x0667, 0xb45: 0x11b7,
	0xb46: 0x0a33, 0xb47: 0x17c3, 0xb48: 0x17c8, 0xb49: 0x16d3, 0xb4a: 0x16d8, 0xb4b: 0x11d7,
	0xb4c: 0x11db, 0xb4d: 0x13f3, 0xb4e: 0x066b, 0xb4f: 0x1207, 0xb50: 0x1203, 0xb51: 0x120b,
	0xb52: 0x083f, 0xb53: 0x120f, 0xb54: 0x1213, 0xb55: 0x1217, 0xb56: 0x121f, 0xb57: 0x17cd,
	0xb58: 0x121b, 0xb59: 0x1223, 0xb5a: 0x1237, 0xb5b: 0x123b, 0xb5c: 0x1227, 0xb5d: 0x123f,
	0xb5e: 0x1253, 0xb5f: 0x1267, 0xb60: 0x1233, 0xb61: 0x1247, 0xb62: 0x124b, 0xb63: 0x124f,
	0xb64: 0x17d2, 0xb65: 0x17dc, 0xb66: 0x17d7, 0xb67: 0x066f, 0xb68: 0x126f, 0xb69: 0x1273,
	0xb6a: 0x127b, 0xb6b: 0x17f0, 0xb6c: 0x127f, 0xb6d: 0x17e1, 0xb6e: 0x0673, 0xb6f: 0x0677,
	0xb70: 0x17e6, 0xb71: 0x17eb, 0xb72: 0x067b, 0xb73: 0x129f, 0xb74: 0x12a3, 0xb75: 0x12a7,
	0xb76: 0x12ab, 0xb77: 0x12b7, 0xb78: 0x12b3, 0xb79: 0x12bf, 0xb7a: 0x12bb, 0xb7b: 0x12cb,
	0xb7c: 0x12c3, 0xb7d: 0x12c7, 0xb7e: 0x12cf, 0xb7f: 0x067f,
	// Block 0x2e, offset 0xb80
	0xb80: 0x12d7, 0xb81: 0x12db, 0xb82: 0x0683, 0xb83: 0x12eb, 0xb84: 0x12ef, 0xb85: 0x17f5,
	0xb86: 0x12fb, 0xb87: 0x12ff, 0xb88: 0x0687, 0xb89: 0x130b, 0xb8a: 0x05bb, 0xb8b: 0x17fa,
	0xb8c: 0x17ff, 0xb8d: 0x068b, 0xb8e: 0x068f, 0xb8f: 0x1337, 0xb90: 0x134f, 0xb91: 0x136b,
	0xb92: 0x137b, 0xb93: 0x1804, 0xb94: 0x138f, 0xb95: 0x1393, 0xb96: 0x13ab, 0xb97: 0x13b7,
	0xb98: 0x180e, 0xb99: 0x1660, 0xb9a: 0x13c3, 0xb9b: 0x13bf, 0xb9c: 0x13cb, 0xb9d: 0x1665,
	0xb9e: 0x13d7, 0xb9f: 0x13e3, 0xba0: 0x1813, 0xba1: 0x1818, 0xba2: 0x1423, 0xba3: 0x142f,
	0xba4: 0x1437, 0xba5: 0x181d, 0xba6: 0x143b, 0xba7: 0x1467, 0xba8: 0x1473, 0xba9: 0x1477,
	0xbaa: 0x146f, 0xbab: 0x1483, 0xbac: 0x1487, 0xbad: 0x1822, 0xbae: 0x1493, 0xbaf: 0x0693,
	0xbb0: 0x149b, 0xbb1: 0x1827, 0xbb2: 0x0697, 0xbb3: 0x14d3, 0xbb4: 0x0ac3, 0xbb5: 0x14eb,
	0xbb6: 0x182c, 0xbb7: 0x1836, 0xbb8: 0x069b, 0xbb9: 0x069f, 0xbba: 0x1513, 0xbbb: 0x183b,
	0xbbc: 0x06a3, 0xbbd: 0x1840, 0xbbe: 0x152b, 0xbbf: 0x152b,
	// Block 0x2f, offset 0xbc0
	0xbc0: 0x1533, 0xbc1: 0x1845, 0xbc2: 0x154b, 0xbc3: 0x06a7, 0xbc4: 0x155b, 0xbc5: 0x1567,
	0xbc6: 0x156f, 0xbc7: 0x1577, 0xbc8: 0x06ab, 0xbc9: 0x184a, 0xbca: 0x158b, 0xbcb: 0x15a7,
	0xbcc: 0x15b3, 0xbcd: 0x06af, 0xbce: 0x06b3, 0xbcf: 0x15b7, 0xbd0: 0x184f, 0xbd1: 0x06b7,
	0xbd2: 0x1854, 0xbd3: 0x1859, 0xbd4: 0x185e, 0xbd5: 0x15db, 0xbd6: 0x06bb, 0xbd7: 0x15ef,
	0xbd8: 0x15f7, 0xbd9: 0x15fb, 0xbda: 0x1603, 0xbdb: 0x160b, 0xbdc: 0x1613, 0xbdd: 0x1868,
}

// nfcIndex: 22 blocks, 1408 entries, 1408 bytes
// Block 0 is the zero block.
var nfcIndex = [1408]uint8{
	// Block 0x0, offset 0x0
	// Block 0x1, offset 0x40
	// Block 0x2, offset 0x80
	// Block 0x3, offset 0xc0
	0xc2: 0x2e, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x2f, 0xc7: 0x04,
	0xc8: 0x05, 0xca: 0x30, 0xcb: 0x31, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x32,
	0xd0: 0x09, 0xd1: 0x33, 0xd2: 0x34, 0xd3: 0x0a, 0xd6: 0x0b, 0xd7: 0x35,
	0xd8: 0x36, 0xd9: 0x0c, 0xdb: 0x37, 0xdc: 0x38, 0xdd: 0x39, 0xdf: 0x3a,
	0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05,
	0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a,
	0xf0: 0x13,
	// Block 0x4, offset 0x100
	0x120: 0x3b, 0x121: 0x3c, 0x123: 0x0d, 0x124: 0x3d, 0x125: 0x3e, 0x126: 0x3f, 0x127: 0x40,
	0x128: 0x41, 0x129: 0x42, 0x12a: 0x43, 0x12b: 0x44, 0x12c: 0x3f, 0x12d: 0x45, 0x12e: 0x46, 0x12f: 0x47,
	0x131: 0x48, 0x132: 0x49, 0x133: 0x4a, 0x134: 0x4b, 0x135: 0x4c, 0x137: 0x4d,
	0x138: 0x4e, 0x139: 0x4f, 0x13a: 0x50, 0x13b: 0x51, 0x13c: 0x52, 0x13d: 0x53, 0x13e: 0x54, 0x13f: 0x55,
	// Block 0x5, offset 0x140
	0x140: 0x56, 0x142: 0x57, 0x144: 0x58, 0x145: 0x59, 0x146: 0x5a, 0x147: 0x5b,
	0x14d: 0x5c,
	0x15c: 0x5d, 0x15f: 0x5e,
	0x162: 0x5f, 0x164: 0x60,
	0x168: 0x61, 0x169: 0x62, 0x16a: 0x63, 0x16c: 0x0e, 0x16d: 0x64, 0x16e: 0x65, 0x16f: 0x66,
	0x170: 0x67, 0x173: 0x68, 0x177: 0x0f,
	0x178: 0x10, 0x179: 0x11, 0x17a: 0x12, 0x17b: 0x13, 0x17c: 0x14, 0x17d: 0x15, 0x17e: 0x16, 0x17f: 0x17,
	// Block 0x6, offset 0x180
	0x180: 0x69, 0x183: 0x6a, 0x184: 0x6b, 0x186: 0x6c, 0x187: 0x6d,
	0x188: 0x6e, 0x189: 0x18, 0x18a: 0x19, 0x18b: 0x6f, 0x18c: 0x70,
	0x1ab: 0x71,
	0x1b3: 0x72, 0x1b5: 0x73, 0x1b7: 0x74,
	// Block 0x7, offset 0x1c0
	0x1c0: 0x75, 0x1c1: 0x1a, 0x1c2: 0x1b, 0x1c3: 0x1c, 0x1c4: 0x76, 0x1c5: 0x77,
	0x1c9: 0x78, 0x1cc: 0x79, 0x1cd: 0x7a,
	// Block 0x8, offset 0x200
	0x219: 0x7b, 0x21a: 0x7c, 0x21b: 0x7d,
	0x220: 0x7e, 0x223: 0x7f, 0x224: 0x80, 0x225: 0x81, 0x226: 0x82, 0x227: 0x83,
	0x22a: 0x84, 0x22b: 0x85, 0x22f: 0x86,
	0x230: 0x87, 0x231: 0x88, 0x232: 0x89, 0x233: 0x8a, 0x234: 0x8b, 0x235: 0x8c, 0x236: 0x8d, 0x237: 0x87,
	0x238: 0x88, 0x239: 0x89, 0x23a: 0x8a, 0x23b: 0x8b, 0x23c: 0x8c, 0x23d: 0x8d, 0x23e: 0x87, 0x23f: 0x88,
	// Block 0x9, offset 0x240
	0x240: 0x89, 0x241: 0x8a, 0x242: 0x8b, 0x243: 0x8c, 0x244: 0x8d, 0x245: 0x87, 0x246: 0x88, 0x247: 0x89,
	0x248: 0x8a, 0x249: 0x8b, 0x24a: 0x8c, 0x24b: 0x8d, 0x24c: 0x87, 0x24d: 0x88, 0x24e: 0x89, 0x24f: 0x8a,
	0x250: 0x8b, 0x251: 0x8c, 0x252: 0x8d, 0x253: 0x87, 0x254: 0x88, 0x255: 0x89, 0x256: 0x8a, 0x257: 0x8b,
	0x258: 0x8c, 0x259: 0x8d, 0x25a: 0x87, 0x25b: 0x88, 0x25c: 0x89, 0x25d: 0x8a, 0x25e: 0x8b, 0x25f: 0x8c,
	0x260: 0x8d, 0x261: 0x87, 0x262: 0x88, 0x263: 0x89, 0x264: 0x8a, 0x265: 0x8b, 0x266: 0x8c, 0x267: 0x8d,
	0x268: 0x87, 0x269: 0x88, 0x26a: 0x89, 0x26b: 0x8a, 0x26c: 0x8b, 0x26d: 0x8c, 0x26e: 0x8d, 0x26f: 0x87,
	0x270: 0x88, 0x271: 0x89, 0x272: 0x8a, 0x273: 0x8b, 0x274: 0x8c, 0x275: 0x8d, 0x276: 0x87, 0x277: 0x88,
	0x278: 0x89, 0x279: 0x8a, 0x27a: 0x8b, 0x27b: 0x8c, 0x27c: 0x8d, 0x27d: 0x87, 0x27e: 0x88, 0x27f: 0x89,
	// Block 0xa, offset 0x280
	0x280: 0x8a, 0x281: 0x8b, 0x282: 0x8c, 0x283: 0x8d, 0x284: 0x87, 0x285: 0x88, 0x286: 0x89, 0x287: 0x8a,
	0x288: 0x8b, 0x289: 0x8c, 0x28a: 0x8d, 0x28b: 0x87, 0x28c: 0x88, 0x28d: 0x89, 0x28e: 0x8a, 0x28f: 0x8b,
	0x290: 0x8c, 0x291: 0x8d, 0x292: 0x87, 0x293: 0x88, 0x294: 0x89, 0x295: 0x8a, 0x296: 0x8b, 0x297: 0x8c,
	0x298: 0x8d, 0x299: 0x87, 0x29a: 0x88, 0x29b: 0x89, 0x29c: 0x8a, 0x29d: 0x8b, 0x29e: 0x8c, 0x29f: 0x8d,
	0x2a0: 0x87, 0x2a1: 0x88, 0x2a2: 0x89, 0x2a3: 0x8a, 0x2a4: 0x8b, 0x2a5: 0x8c, 0x2a6: 0x8d, 0x2a7: 0x87,
	0x2a8: 0x88, 0x2a9: 0x89, 0x2aa: 0x8a, 0x2ab: 0x8b, 0x2ac: 0x8c, 0x2ad: 0x8d, 0x2ae: 0x87, 0x2af: 0x88,
	0x2b0: 0x89, 0x2b1: 0x8a, 0x2b2: 0x8b, 0x2b3: 0x8c, 0x2b4: 0x8d, 0x2b5: 0x87, 0x2b6: 0x88, 0x2b7: 0x89,
	0x2b8: 0x8a, 0x2b9: 0x8b, 0x2ba: 0x8c, 0x2bb: 0x8d, 0x2bc: 0x87, 0x2bd: 0x88, 0x2be: 0x89, 0x2bf: 0x8a,
	// Block 0xb, offset 0x2c0
	0x2c0: 0x8b, 0x2c1: 0x8c, 0x2c2: 0x8d, 0x2c3: 0x87, 0x2c4: 0x88, 0x2c5: 0x89, 0x2c6: 0x8a, 0x2c7: 0x8b,
	0x2c8: 0x8c, 0x2c9: 0x8d, 0x2ca: 0x87, 0x2cb: 0x88, 0x2cc: 0x89, 0x2cd: 0x8a, 0x2ce: 0x8b, 0x2cf: 0x8c,
	0x2d0: 0x8d, 0x2d1: 0x87, 0x2d2: 0x88, 0x2d3: 0x89, 0x2d4: 0x8a, 0x2d5: 0x8b, 0x2d6: 0x8c, 0x2d7: 0x8d,
	0x2d8: 0x87, 0x2d9: 0x88, 0x2da: 0x89, 0x2db: 0x8a, 0x2dc: 0x8b, 0x2dd: 0x8c, 0x2de: 0x8e,
	// Block 0xc, offset 0x300
	0x324: 0x1d, 0x325: 0x1e, 0x326: 0x1f, 0x327: 0x20,
	0x328: 0x21, 0x329: 0x22, 0x32a: 0x23, 0x32b: 0x24, 0x32c: 0x8f, 0x32d: 0x90, 0x32e: 0x91,
	0x331: 0x92, 0x332: 0x93, 0x333: 0x94, 0x334: 0x95,
	0x338: 0x96, 0x339: 0x97, 0x33a: 0x98, 0x33b: 0x99, 0x33e: 0x9a, 0x33f: 0x9b,
	// Block 0xd, offset 0x340
	0x347: 0x9c,
	0x34b: 0x9d, 0x34d: 0x9e,
	0x368: 0x9f, 0x36b: 0xa0,
	0x374: 0xa1,
	0x37d: 0xa2,
	// Block 0xe, offset 0x380
	0x381: 0xa3, 0x382: 0xa4, 0x384: 0xa5, 0x385: 0x82, 0x387: 0xa6,
	0x388: 0xa7, 0x38b: 0xa8, 0x38c: 0xa9, 0x38d: 0xaa,
	0x391: 0xab, 0x392: 0xac, 0x393: 0xad, 0x396: 0xae, 0x397: 0xaf,
	0x398: 0x73, 0x39a: 0xb0, 0x39c: 0xb1,
	0x3a0: 0xb2, 0x3a7: 0xb3,
	0x3a8: 0xb4, 0x3a9: 0xb5, 0x3aa: 0xb6,
	0x3b0: 0x73, 0x3b5: 0xb7, 0x3b6: 0xb8,
	// Block 0xf, offset 0x3c0
	0x3eb: 0xb9, 0x3ec: 0xba,
	// Block 0x10, offset 0x400
	0x432: 0xbb,
	// Block 0x11, offset 0x440
	0x445: 0xbc, 0x446: 0xbd, 0x447: 0xbe,
	0x449: 0xbf,
	// Block 0x12, offset 0x480
	0x480: 0xc0, 0x484: 0xba,
	0x48b: 0xc1,
	0x4a3: 0xc2, 0x4a5: 0xc3,
	// Block 0x13, offset 0x4c0
	0x4c8: 0xc4,
	// Block 0x14, offset 0x500
	0x520: 0x25, 0x521: 0x26, 0x522: 0x27, 0x523: 0x28, 0x524: 0x29, 0x525: 0x2a, 0x526: 0x2b, 0x527: 0x2c,
	0x528: 0x2d,
	// Block 0x15, offset 0x540
	0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d,
	0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11,
	0x56f: 0x12,
}

// nfcSparseOffset: 151 entries, 302 bytes
var nfcSparseOffset = []uint16{0x0, 0x5, 0x9, 0xb, 0xd, 0x18, 0x28, 0x2a, 0x2f, 0x3a, 0x49, 0x56, 0x5e, 0x63, 0x68, 0x6a, 0x72, 0x79, 0x7c, 0x84, 0x88, 0x8c, 0x8e, 0x90, 0x99, 0x9d, 0xa4, 0xa9, 0xac, 0xb6, 0xb9, 0xc0, 0xc8, 0xcb, 0xcd, 0xd0, 0xd2, 0xd7, 0xe8, 0xf4, 0xf6, 0xfc, 0xfe, 0x100, 0x102, 0x104, 0x106, 0x108, 0x10b, 0x10e, 0x110, 0x113, 0x116, 0x11a, 0x11f, 0x128, 0x12a, 0x12d, 0x12f, 0x13a, 0x13e, 0x14c, 0x14f, 0x155, 0x15b, 0x166, 0x16a, 0x16c, 0x16e, 0x170, 0x172, 0x174, 0x17a, 0x17e, 0x180, 0x182, 0x18a, 0x18e, 0x191, 0x193, 0x195, 0x197, 0x19a, 0x19c, 0x19e, 0x1a0, 0x1a2, 0x1a8, 0x1ab, 0x1ad, 0x1b4, 0x1ba, 0x1c0, 0x1c8, 0x1ce, 0x1d4, 0x1da, 0x1de, 0x1ec, 0x1f5, 0x1f8, 0x1fb, 0x1fd, 0x200, 0x202, 0x206, 0x20b, 0x20d, 0x20f, 0x214, 0x21a, 0x21c, 0x21e, 0x220, 0x226, 0x229, 0x22b, 0x231, 0x234, 0x23c, 0x243, 0x246, 0x249, 0x24b, 0x24e, 0x256, 0x25a, 0x261, 0x264, 0x26a, 0x26c, 0x26f, 0x271, 0x274, 0x276, 0x278, 0x27a, 0x27c, 0x27f, 0x281, 0x283, 0x285, 0x287, 0x294, 0x29e, 0x2a0, 0x2a2, 0x2a8, 0x2aa, 0x2ac, 0x2af}

// nfcSparseValues: 689 entries, 2756 bytes
var nfcSparseValues = [689]valueRange{
	// Block 0x0, offset 0x0
	{value: 0x0000, lo: 0x04},
	{value: 0xa100, lo: 0xa8, hi: 0xa8},
	{value: 0x8100, lo: 0xaf, hi: 0xaf},
	{value: 0x8100, lo: 0xb4, hi: 0xb4},
	{value: 0x8100, lo: 0xb8, hi: 0xb8},
	// Block 0x1, offset 0x5
	{value: 0x0091, lo: 0x03},
	{value: 0x46e5, lo: 0xa0, hi: 0xa1},
	{value: 0x4717, lo: 0xaf, hi: 0xb0},
	{value: 0xa000, lo: 0xb7, hi: 0xb7},
	// Block 0x2, offset 0x9
	{value: 0x0000, lo: 0x01},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	// Block 0x3, offset 0xb
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0x98, hi: 0x9d},
	// Block 0x4, offset 0xd
	{value: 0x0006, lo: 0x0a},
	{value: 0xa000, lo: 0x81, hi: 0x81},
	{value: 0xa000, lo: 0x85, hi: 0x85},
	{value: 0xa000, lo: 0x89, hi: 0x89},
	{value: 0x4843, lo: 0x8a, hi: 0x8a},
	{value: 0x4861, lo: 0x8b, hi: 0x8b},
	{value: 0x36ca, lo: 0x8c, hi: 0x8c},
	{value: 0x36e2, lo: 0x8d, hi: 0x8d},
	{value: 0x4879, lo: 0x8e, hi: 0x8e},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x3700, lo: 0x93, hi: 0x94},
	// Block 0x5, offset 0x18
	{value: 0x0000, lo: 0x0f},
	{value: 0xa000, lo: 0x83, hi: 0x83},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0xa000, lo: 0x8b, hi: 0x8b},
	{value: 0xa000, lo: 0x8d, hi: 0x8d},
	{value: 0x37a8, lo: 0x90, hi: 0x90},
	{value: 0x37b4, lo: 0x91, hi: 0x91},
	{value: 0x37a2, lo: 0x93, hi: 0x93},
	{value: 0xa000, lo: 0x96, hi: 0x96},
	{value: 0x381a, lo: 0x97, hi: 0x97},
	{value: 0x37e4, lo: 0x9c, hi: 0x9c},
	{value: 0x37cc, lo: 0x9d, hi: 0x9d},
	{value: 0x37f6, lo: 0x9e, hi: 0x9e},
	{value: 0xa000, lo: 0xb4, hi: 0xb5},
	{value: 0x3820, lo: 0xb6, hi: 0xb6},
	{value: 0x3826, lo: 0xb7, hi: 0xb7},
	// Block 0x6, offset 0x28
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x83, hi: 0x87},
	// Block 0x7, offset 0x2a
	{value: 0x0001, lo: 0x04},
	{value: 0x8113, lo: 0x81, hi: 0x82},
	{value: 0x8132, lo: 0x84, hi: 0x84},
	{value: 0x812d, lo: 0x85, hi: 0x85},
	{value: 0x810d, lo: 0x87, hi: 0x87},
	// Block 0x8, offset 0x2f
	{value: 0x0000, lo: 0x0a},
	{value: 0x8132, lo: 0x90, hi: 0x97},
	{value: 0x8119, lo: 0x98, hi: 0x98},
	{value: 0x811a, lo: 0x99, hi: 0x99},
	{value: 0x811b, lo: 0x9a, hi: 0x9a},
	{value: 0x3844, lo: 0xa2, hi: 0xa2},
	{value: 0x384a, lo: 0xa3, hi: 0xa3},
	{value: 0x3856, lo: 0xa4, hi: 0xa4},
	{value: 0x3850, lo: 0xa5, hi: 0xa5},
	{value: 0x385c, lo: 0xa6, hi: 0xa6},
	{value: 0xa000, lo: 0xa7, hi: 0xa7},
	// Block 0x9, offset 0x3a
	{value: 0x0000, lo: 0x0e},
	{value: 0x386e, lo: 0x80, hi: 0x80},
	{value: 0xa000, lo: 0x81, hi: 0x81},
	{value: 0x3862, lo: 0x82, hi: 0x82},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x3868, lo: 0x93, hi: 0x93},
	{value: 0xa000, lo: 0x95, hi: 0x95},
	{value: 0x8132, lo: 0x96, hi: 0x9c},
	{value: 0x8132, lo: 0x9f, hi: 0xa2},
	{value: 0x812d, lo: 0xa3, hi: 0xa3},
	{value: 0x8132, lo: 0xa4, hi: 0xa4},
	{value: 0x8132, lo: 0xa7, hi: 0xa8},
	{value: 0x812d, lo: 0xaa, hi: 0xaa},
	{value: 0x8132, lo: 0xab, hi: 0xac},
	{value: 0x812d, lo: 0xad, hi: 0xad},
	// Block 0xa, offset 0x49
	{value: 0x0000, lo: 0x0c},
	{value: 0x811f, lo: 0x91, hi: 0x91},
	{value: 0x8132, lo: 0xb0, hi: 0xb0},
	{value: 0x812d, lo: 0xb1, hi: 0xb1},
	{value: 0x8132, lo: 0xb2, hi: 0xb3},
	{value: 0x812d, lo: 0xb4, hi: 0xb4},
	{value: 0x8132, lo: 0xb5, hi: 0xb6},
	{value: 0x812d, lo: 0xb7, hi: 0xb9},
	{value: 0x8132, lo: 0xba, hi: 0xba},
	{value: 0x812d, lo: 0xbb, hi: 0xbc},
	{value: 0x8132, lo: 0xbd, hi: 0xbd},
	{value: 0x812d, lo: 0xbe, hi: 0xbe},
	{value: 0x8132, lo: 0xbf, hi: 0xbf},
	// Block 0xb, offset 0x56
	{value: 0x0005, lo: 0x07},
	{value: 0x8132, lo: 0x80, hi: 0x80},
	{value: 0x8132, lo: 0x81, hi: 0x81},
	{value: 0x812d, lo: 0x82, hi: 0x83},
	{value: 0x812d, lo: 0x84, hi: 0x85},
	{value: 0x812d, lo: 0x86, hi: 0x87},
	{value: 0x812d, lo: 0x88, hi: 0x89},
	{value: 0x8132, lo: 0x8a, hi: 0x8a},
	// Block 0xc, offset 0x5e
	{value: 0x0000, lo: 0x04},
	{value: 0x8132, lo: 0xab, hi: 0xb1},
	{value: 0x812d, lo: 0xb2, hi: 0xb2},
	{value: 0x8132, lo: 0xb3, hi: 0xb3},
	{value: 0x812d, lo: 0xbd, hi: 0xbd},
	// Block 0xd, offset 0x63
	{value: 0x0000, lo: 0x04},
	{value: 0x8132, lo: 0x96, hi: 0x99},
	{value: 0x8132, lo: 0x9b, hi: 0xa3},
	{value: 0x8132, lo: 0xa5, hi: 0xa7},
	{value: 0x8132, lo: 0xa9, hi: 0xad},
	// Block 0xe, offset 0x68
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x99, hi: 0x9b},
	// Block 0xf, offset 0x6a
	{value: 0x0000, lo: 0x07},
	{value: 0xa000, lo: 0xa8, hi: 0xa8},
	{value: 0x3edb, lo: 0xa9, hi: 0xa9},
	{value: 0xa000, lo: 0xb0, hi: 0xb0},
	{value: 0x3ee3, lo: 0xb1, hi: 0xb1},
	{value: 0xa000, lo: 0xb3, hi: 0xb3},
	{value: 0x3eeb, lo: 0xb4, hi: 0xb4},
	{value: 0x9902, lo: 0xbc, hi: 0xbc},
	// Block 0x10, offset 0x72
	{value: 0x0008, lo: 0x06},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x8132, lo: 0x91, hi: 0x91},
	{value: 0x812d, lo: 0x92, hi: 0x92},
	{value: 0x8132, lo: 0x93, hi: 0x93},
	{value: 0x8132, lo: 0x94, hi: 0x94},
	{value: 0x451f, lo: 0x98, hi: 0x9f},
	// Block 0x11, offset 0x79
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x12, offset 0x7c
	{value: 0x0008, lo: 0x07},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2ca1, lo: 0x8b, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	{value: 0x455f, lo: 0x9c, hi: 0x9d},
	{value: 0x456f, lo: 0x9f, hi: 0x9f},
	{value: 0x8132, lo: 0xbe, hi: 0xbe},
	// Block 0x13, offset 0x84
	{value: 0x0000, lo: 0x03},
	{value: 0x4597, lo: 0xb3, hi: 0xb3},
	{value: 0x459f, lo: 0xb6, hi: 0xb6},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	// Block 0x14, offset 0x88
	{value: 0x0008, lo: 0x03},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x4577, lo: 0x99, hi: 0x9b},
	{value: 0x458f, lo: 0x9e, hi: 0x9e},
	// Block 0x15, offset 0x8c
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	// Block 0x16, offset 0x8e
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	// Block 0x17, offset 0x90
	{value: 0x0000, lo: 0x08},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2cb9, lo: 0x88, hi: 0x88},
	{value: 0x2cb1, lo: 0x8b, hi: 0x8b},
	{value: 0x2cc1, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x96, hi: 0x97},
	{value: 0x45a7, lo: 0x9c, hi: 0x9c},
	{value: 0x45af, lo: 0x9d, hi: 0x9d},
	// Block 0x18, offset 0x99
	{value: 0x0000, lo: 0x03},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x2cc9, lo: 0x94, hi: 0x94},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x19, offset 0x9d
	{value: 0x0000, lo: 0x06},
	{value: 0xa000, lo: 0x86, hi: 0x87},
	{value: 0x2cd1, lo: 0x8a, hi: 0x8a},
	{value: 0x2ce1, lo: 0x8b, hi: 0x8b},
	{value: 0x2cd9, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	// Block 0x1a, offset 0xa4
	{value: 0x1801, lo: 0x04},
	{value: 0xa000, lo: 0x86, hi: 0x86},
	{value: 0x3ef3, lo: 0x88, hi: 0x88},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x8120, lo: 0x95, hi: 0x96},
	// Block 0x1b, offset 0xa9
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	{value: 0xa000, lo: 0xbf, hi: 0xbf},
	// Block 0x1c, offset 0xac
	{value: 0x0000, lo: 0x09},
	{value: 0x2ce9, lo: 0x80, hi: 0x80},
	{value: 0x9900, lo: 0x82, hi: 0x82},
	{value: 0xa000, lo: 0x86, hi: 0x86},
	{value: 0x2cf1, lo: 0x87, hi: 0x87},
	{value: 0x2cf9, lo: 0x88, hi: 0x88},
	{value: 0x2f53, lo: 0x8a, hi: 0x8a},
	{value: 0x2ddb, lo: 0x8b, hi: 0x8b},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x95, hi: 0x96},
	// Block 0x1d, offset 0xb6
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0xbb, hi: 0xbc},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x1e, offset 0xb9
	{value: 0x0000, lo: 0x06},
	{value: 0xa000, lo: 0x86, hi: 0x87},
	{value: 0x2d01, lo: 0x8a, hi: 0x8a},
	{value: 0x2d11, lo: 0x8b, hi: 0x8b},
	{value: 0x2d09, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	// Block 0x1f, offset 0xc0
	{value: 0x6be7, lo: 0x07},
	{value: 0x9904, lo: 0x8a, hi: 0x8a},
	{value: 0x9900, lo: 0x8f, hi: 0x8f},
	{value: 0xa000, lo: 0x99, hi: 0x99},
	{value: 0x3efb, lo: 0x9a, hi: 0x9a},
	{value: 0x2f5b, lo: 0x9c, hi: 0x9c},
	{value: 0x2de6, lo: 0x9d, hi: 0x9d},
	{value: 0x2d19, lo: 0x9e, hi: 0x9f},
	// Block 0x20, offset 0xc8
	{value: 0x0000, lo: 0x02},
	{value: 0x8122, lo: 0xb8, hi: 0xb9},
	{value: 0x8104, lo: 0xba, hi: 0xba},
	// Block 0x21, offset 0xcb
	{value: 0x0000, lo: 0x01},
	{value: 0x8123, lo: 0x88, hi: 0x8b},
	// Block 0x22, offset 0xcd
	{value: 0x0000, lo: 0x02},
	{value: 0x8124, lo: 0xb8, hi: 0xb9},
	{value: 0x8104, lo: 0xba, hi: 0xba},
	// Block 0x23, offset 0xd0
	{value: 0x0000, lo: 0x01},
	{value: 0x8125, lo: 0x88, hi: 0x8b},
	// Block 0x24, offset 0xd2
	{value: 0x0000, lo: 0x04},
	{value: 0x812d, lo: 0x98, hi: 0x99},
	{value: 0x812d, lo: 0xb5, hi: 0xb5},
	{value: 0x812d, lo: 0xb7, hi: 0xb7},
	{value: 0x812b, lo: 0xb9, hi: 0xb9},
	// Block 0x25, offset 0xd7
	{value: 0x0000, lo: 0x10},
	{value: 0x2647, lo: 0x83, hi: 0x83},
	{value: 0x264e, lo: 0x8d, hi: 0x8d},
	{value: 0x2655, lo: 0x92, hi: 0x92},
	{value: 0x265c, lo: 0x97, hi: 0x97},
	{value: 0x2663, lo: 0x9c, hi: 0x9c},
	{value: 0x2640, lo: 0xa9, hi: 0xa9},
	{value: 0x8126, lo: 0xb1, hi: 0xb1},
	{value: 0x8127, lo: 0xb2, hi: 0xb2},
	{value: 0x4a87, lo: 0xb3, hi: 0xb3},
	{value: 0x8128, lo: 0xb4, hi: 0xb4},
	{value: 0x4a90, lo: 0xb5, hi: 0xb5},
	{value: 0x45b7, lo: 0xb6, hi: 0xb6},
	{value: 0x8200, lo: 0xb7, hi: 0xb7},
	{value: 0x45bf, lo: 0xb8, hi: 0xb8},
	{value: 0x8200, lo: 0xb9, hi: 0xb9},
	{value: 0x8127, lo: 0xba, hi: 0xbd},
	// Block 0x26, offset 0xe8
	{value: 0x0000, lo: 0x0b},
	{value: 0x8127, lo: 0x80, hi: 0x80},
	{value: 0x4a99, lo: 0x81, hi: 0x81},
	{value: 0x8132, lo: 0x82, hi: 0x83},
	{value: 0x8104, lo: 0x84, hi: 0x84},
	{value: 0x8132, lo: 0x86, hi: 0x87},
	{value: 0x2671, lo: 0x93, hi: 0x93},
	{value: 0x2678, lo: 0x9d, hi: 0x9d},
	{value: 0x267f, lo: 0xa2, hi: 0xa2},
	{value: 0x2686, lo: 0xa7, hi: 0xa7},
	{value: 0x268d, lo: 0xac, hi: 0xac},
	{value: 0x266a, lo: 0xb9, hi: 0xb9},
	// Block 0x27, offset 0xf4
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x86, hi: 0x86},
	// Block 0x28, offset 0xf6
	{value: 0x0000, lo: 0x05},
	{value: 0xa000, lo: 0xa5, hi: 0xa5},
	{value: 0x2d21, lo: 0xa6, hi: 0xa6},
	{value: 0x9900, lo: 0xae, hi: 0xae},
	{value: 0x8102, lo: 0xb7, hi: 0xb7},
	{value: 0x8104, lo: 0xb9, hi: 0xba},
	// Block 0x29, offset 0xfc
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x8d, hi: 0x8d},
	// Block 0x2a, offset 0xfe
	{value: 0x0000, lo: 0x01},
	{value: 0xa000, lo: 0x80, hi: 0x92},
	// Block 0x2b, offset 0x100
	{value: 0x0000, lo: 0x01},
	{value: 0xb900, lo: 0xa1, hi: 0xb5},
	// Block 0x2c, offset 0x102
	{value: 0x0000, lo: 0x01},
	{value: 0x9900, lo: 0xa8, hi: 0xbf},
	// Block 0x2d, offset 0x104
	{value: 0x0000, lo: 0x01},
	{value: 0x9900, lo: 0x80, hi: 0x82},
	// Block 0x2e, offset 0x106
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x9d, hi: 0x9f},
	// Block 0x2f, offset 0x108
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x94, hi: 0x94},
	{value: 0x8104, lo: 0xb4, hi: 0xb4},
	// Block 0x30, offset 0x10b
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x92, hi: 0x92},
	{value: 0x8132, lo: 0x9d, hi: 0x9d},
	// Block 0x31, offset 0x10e
	{value: 0x0000, lo: 0x01},
	{value: 0x8131, lo: 0xa9, hi: 0xa9},
	// Block 0x32, offset 0x110
	{value: 0x0004, lo: 0x02},
	{value: 0x812e, lo: 0xb9, hi: 0xba},
	{value: 0x812d, lo: 0xbb, hi: 0xbb},
	// Block 0x33, offset 0x113
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0x97, hi: 0x97},
	{value: 0x812d, lo: 0x98, hi: 0x98},
	// Block 0x34, offset 0x116
	{value: 0x0000, lo: 0x03},
	{value: 0x8104, lo: 0xa0, hi: 0xa0},
	{value: 0x8132, lo: 0xb5, hi: 0xbc},
	{value: 0x812d, lo: 0xbf, hi: 0xbf},
	// Block 0x35, offset 0x11a
	{value: 0x0000, lo: 0x04},
	{value: 0x8132, lo: 0xb0, hi: 0xb4},
	{value: 0x812d, lo: 0xb5, hi: 0xba},
	{value: 0x8132, lo: 0xbb, hi: 0xbc},
	{value: 0x812d, lo: 0xbd, hi: 0xbd},
	// Block 0x36, offset 0x11f
	{value: 0x0000, lo: 0x08},
	{value: 0x2d69, lo: 0x80, hi: 0x80},
	{value: 0x2d71, lo: 0x81, hi: 0x81},
	{value: 0xa000, lo: 0x82, hi: 0x82},
	{value: 0x2d79, lo: 0x83, hi: 0x83},
	{value: 0x8104, lo: 0x84, hi: 0x84},
	{value: 0x8132, lo: 0xab, hi: 0xab},
	{value: 0x812d, lo: 0xac, hi: 0xac},
	{value: 0x8132, lo: 0xad, hi: 0xb3},
	// Block 0x37, offset 0x128
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xaa, hi: 0xab},
	// Block 0x38, offset 0x12a
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xa6, hi: 0xa6},
	{value: 0x8104, lo: 0xb2, hi: 0xb3},
	// Block 0x39, offset 0x12d
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0xb7, hi: 0xb7},
	// Block 0x3a, offset 0x12f
	{value: 0x0000, lo: 0x0a},
	{value: 0x8132, lo: 0x90, hi: 0x92},
	{value: 0x8101, lo: 0x94, hi: 0x94},
	{value: 0x812d, lo: 0x95, hi: 0x99},
	{value: 0x8132, lo: 0x9a, hi: 0x9b},
	{value: 0x812d, lo: 0x9c, hi: 0x9f},
	{value: 0x8132, lo: 0xa0, hi: 0xa0},
	{value: 0x8101, lo: 0xa2, hi: 0xa8},
	{value: 0x812d, lo: 0xad, hi: 0xad},
	{value: 0x8132, lo: 0xb4, hi: 0xb4},
	{value: 0x8132, lo: 0xb8, hi: 0xb9},
	// Block 0x3b, offset 0x13a
	{value: 0x0004, lo: 0x03},
	{value: 0x0433, lo: 0x80, hi: 0x81},
	{value: 0x8100, lo: 0x97, hi: 0x97},
	{value: 0x8100, lo: 0xbe, hi: 0xbe},
	// Block 0x3c, offset 0x13e
	{value: 0x0000, lo: 0x0d},
	{value: 0x8132, lo: 0x90, hi: 0x91},
	{value: 0x8101, lo: 0x92, hi: 0x93},
	{value: 0x8132, lo: 0x94, hi: 0x97},
	{value: 0x8101, lo: 0x98, hi: 0x9a},
	{value: 0x8132, lo: 0x9b, hi: 0x9c},
	{value: 0x8132, lo: 0xa1, hi: 0xa1},
	{value: 0x8101, lo: 0xa5, hi: 0xa6},
	{value: 0x8132, lo: 0xa7, hi: 0xa7},
	{value: 0x812d, lo: 0xa8, hi: 0xa8},
	{value: 0x8132, lo: 0xa9, hi: 0xa9},
	{value: 0x8101, lo: 0xaa, hi: 0xab},
	{value: 0x812d, lo: 0xac, hi: 0xaf},
	{value: 0x8132, lo: 0xb0, hi: 0xb0},
	// Block 0x3d, offset 0x14c
	{value: 0x427e, lo: 0x02},
	{value: 0x01b8, lo: 0xa6, hi: 0xa6},
	{value: 0x0057, lo: 0xaa, hi: 0xab},
	// Block 0x3e, offset 0x14f
	{value: 0x0007, lo: 0x05},
	{value: 0xa000, lo: 0x90, hi: 0x90},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0xa000, lo: 0x94, hi: 0x94},
	{value: 0x3bbc, lo: 0x9a, hi: 0x9b},
	{value: 0x3bca, lo: 0xae, hi: 0xae},
	// Block 0x3f, offset 0x155
	{value: 0x000e, lo: 0x05},
	{value: 0x3bd1, lo: 0x8d, hi: 0x8e},
	{value: 0x3bd8, lo: 0x8f, hi: 0x8f},
	{value: 0xa000, lo: 0x90, hi: 0x90},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0xa000, lo: 0x94, hi: 0x94},
	// Block 0x40, offset 0x15b
	{value: 0x6405, lo: 0x0a},
	{value: 0xa000, lo: 0x83, hi: 0x83},
	{value: 0x3be6, lo: 0x84, hi: 0x84},
	{value: 0xa000, lo: 0x88, hi: 0x88},
	{value: 0x3bed, lo: 0x89, hi: 0x89},
	{value: 0xa000, lo: 0x8b, hi: 0x8b},
	{value: 0x3bf4, lo: 0x8c, hi: 0x8c},
	{value: 0xa000, lo: 0xa3, hi: 0xa3},
	{value: 0x3bfb, lo: 0xa4, hi: 0xa5},
	{value: 0x3c02, lo: 0xa6, hi: 0xa6},
	{value: 0xa000, lo: 0xbc, hi: 0xbc},
	// Block 0x41, offset 0x166
	{value: 0x0007, lo: 0x03},
	{value: 0x3c6b, lo: 0xa0, hi: 0xa1},
	{value: 0x3c95, lo: 0xa2, hi: 0xa3},
	{value: 0x3cbf, lo: 0xaa, hi: 0xad},
	// Block 0x42, offset 0x16a
	{value: 0x0004, lo: 0x01},
	{value: 0x048b, lo: 0xa9, hi: 0xaa},
	// Block 0x43, offset 0x16c
	{value: 0x0000, lo: 0x01},
	{value: 0x44e0, lo: 0x9c, hi: 0x9c},
	// Block 0x44, offset 0x16e
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xaf, hi: 0xb1},
	// Block 0x45, offset 0x170
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x46, offset 0x172
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xa0, hi: 0xbf},
	// Block 0x47, offset 0x174
	{value: 0x0000, lo: 0x05},
	{value: 0x812c, lo: 0xaa, hi: 0xaa},
	{value: 0x8131, lo: 0xab, hi: 0xab},
	{value: 0x8133, lo: 0xac, hi: 0xac},
	{value: 0x812e, lo: 0xad, hi: 0xad},
	{value: 0x812f, lo: 0xae, hi: 0xaf},
	// Block 0x48, offset 0x17a
	{value: 0x0000, lo: 0x03},
	{value: 0x4aa2, lo: 0xb3, hi: 0xb3},
	{value: 0x4aa2, lo: 0xb5, hi: 0xb6},
	{value: 0x4aa2, lo: 0xba, hi: 0xbf},
	// Block 0x49, offset 0x17e
	{value: 0x0000, lo: 0x01},
	{value: 0x4aa2, lo: 0x8f, hi: 0xa3},
	// Block 0x4a, offset 0x180
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0xae, hi: 0xbe},
	// Block 0x4b, offset 0x182
	{value: 0x0000, lo: 0x07},
	{value: 0x8100, lo: 0x84, hi: 0x84},
	{value: 0x8100, lo: 0x87, hi: 0x87},
	{value: 0x8100, lo: 0x90, hi: 0x90},
	{value: 0x8100, lo: 0x9e, hi: 0x9e},
	{value: 0x8100, lo: 0xa1, hi: 0xa1},
	{value: 0x8100, lo: 0xb2, hi: 0xb2},
	{value: 0x8100, lo: 0xbb, hi: 0xbb},
	// Block 0x4c, offset 0x18a
	{value: 0x0000, lo: 0x03},
	{value: 0x8100, lo: 0x80, hi: 0x80},
	{value: 0x8100, lo: 0x8b, hi: 0x8b},
	{value: 0x8100, lo: 0x8e, hi: 0x8e},
	// Block 0x4d, offset 0x18e
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0xaf, hi: 0xaf},
	{value: 0x8132, lo: 0xb4, hi: 0xbd},
	// Block 0x4e, offset 0x191
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x9e, hi: 0x9f},
	// Block 0x4f, offset 0x193
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xb0, hi: 0xb1},
	// Block 0x50, offset 0x195
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x86, hi: 0x86},
	// Block 0x51, offset 0x197
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x84, hi: 0x84},
	{value: 0x8132, lo: 0xa0, hi: 0xb1},
	// Block 0x52, offset 0x19a
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0xab, hi: 0xad},
	// Block 0x53, offset 0x19c
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x93, hi: 0x93},
	// Block 0x54, offset 0x19e
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0xb3, hi: 0xb3},
	// Block 0x55, offset 0x1a0
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x80, hi: 0x80},
	// Block 0x56, offset 0x1a2
	{value: 0x0000, lo: 0x05},
	{value: 0x8132, lo: 0xb0, hi: 0xb0},
	{value: 0x8132, lo: 0xb2, hi: 0xb3},
	{value: 0x812d, lo: 0xb4, hi: 0xb4},
	{value: 0x8132, lo: 0xb7, hi: 0xb8},
	{value: 0x8132, lo: 0xbe, hi: 0xbf},
	// Block 0x57, offset 0x1a8
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0x81, hi: 0x81},
	{value: 0x8104, lo: 0xb6, hi: 0xb6},
	// Block 0x58, offset 0x1ab
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xad, hi: 0xad},
	// Block 0x59, offset 0x1ad
	{value: 0x0000, lo: 0x06},
	{value: 0xe500, lo: 0x80, hi: 0x80},
	{value: 0xc600, lo: 0x81, hi: 0x9b},
	{value: 0xe500, lo: 0x9c, hi: 0x9c},
	{value: 0xc600, lo: 0x9d, hi: 0xb7},
	{value: 0xe500, lo: 0xb8, hi: 0xb8},
	{value: 0xc600, lo: 0xb9, hi: 0xbf},
	// Block 0x5a, offset 0x1b4
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x93},
	{value: 0xe500, lo: 0x94, hi: 0x94},
	{value: 0xc600, lo: 0x95, hi: 0xaf},
	{value: 0xe500, lo: 0xb0, hi: 0xb0},
	{value: 0xc600, lo: 0xb1, hi: 0xbf},
	// Block 0x5b, offset 0x1ba
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x8b},
	{value: 0xe500, lo: 0x8c, hi: 0x8c},
	{value: 0xc600, lo: 0x8d, hi: 0xa7},
	{value: 0xe500, lo: 0xa8, hi: 0xa8},
	{value: 0xc600, lo: 0xa9, hi: 0xbf},
	// Block 0x5c, offset 0x1c0
	{value: 0x0000, lo: 0x07},
	{value: 0xc600, lo: 0x80, hi: 0x83},
	{value: 0xe500, lo: 0x84, hi: 0x84},
	{value: 0xc600, lo: 0x85, hi: 0x9f},
	{value: 0xe500, lo: 0xa0, hi: 0xa0},
	{value: 0xc600, lo: 0xa1, hi: 0xbb},
	{value: 0xe500, lo: 0xbc, hi: 0xbc},
	{value: 0xc600, lo: 0xbd, hi: 0xbf},
	// Block 0x5d, offset 0x1c8
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x97},
	{value: 0xe500, lo: 0x98, hi: 0x98},
	{value: 0xc600, lo: 0x99, hi: 0xb3},
	{value: 0xe500, lo: 0xb4, hi: 0xb4},
	{value: 0xc600, lo: 0xb5, hi: 0xbf},
	// Block 0x5e, offset 0x1ce
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x8f},
	{value: 0xe500, lo: 0x90, hi: 0x90},
	{value: 0xc600, lo: 0x91, hi: 0xab},
	{value: 0xe500, lo: 0xac, hi: 0xac},
	{value: 0xc600, lo: 0xad, hi: 0xbf},
	// Block 0x5f, offset 0x1d4
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x87},
	{value: 0xe500, lo: 0x88, hi: 0x88},
	{value: 0xc600, lo: 0x89, hi: 0xa3},
	{value: 0xe500, lo: 0xa4, hi: 0xa4},
	{value: 0xc600, lo: 0xa5, hi: 0xbf},
	// Block 0x60, offset 0x1da
	{value: 0x0000, lo: 0x03},
	{value: 0xc600, lo: 0x80, hi: 0x87},
	{value: 0xe500, lo: 0x88, hi: 0x88},
	{value: 0xc600, lo: 0x89, hi: 0xa3},
	// Block 0x61, offset 0x1de
	{value: 0x0006, lo: 0x0d},
	{value: 0x4393, lo: 0x9d, hi: 0x9d},
	{value: 0x8115, lo: 0x9e, hi: 0x9e},
	{value: 0x4405, lo: 0x9f, hi: 0x9f},
	{value: 0x43f3, lo: 0xaa, hi: 0xab},
	{value: 0x44f7, lo: 0xac, hi: 0xac},
	{value: 0x44ff, lo: 0xad, hi: 0xad},
	{value: 0x434b, lo: 0xae, hi: 0xb1},
	{value: 0x4369, lo: 0xb2, hi: 0xb4},
	{value: 0x4381, lo: 0xb5, hi: 0xb6},
	{value: 0x438d, lo: 0xb8, hi: 0xb8},
	{value: 0x4399, lo: 0xb9, hi: 0xbb},
	{value: 0x43b1, lo: 0xbc, hi: 0xbc},
	{value: 0x43b7, lo: 0xbe, hi: 0xbe},
	// Block 0x62, offset 0x1ec
	{value: 0x0006, lo: 0x08},
	{value: 0x43bd, lo: 0x80, hi: 0x81},
	{value: 0x43c9, lo: 0x83, hi: 0x84},
	{value: 0x43db, lo: 0x86, hi: 0x89},
	{value: 0x43ff, lo: 0x8a, hi: 0x8a},
	{value: 0x437b, lo: 0x8b, hi: 0x8b},
	{value: 0x4363, lo: 0x8c, hi: 0x8c},
	{value: 0x43ab, lo: 0x8d, hi: 0x8d},
	{value: 0x43d5, lo: 0x8e, hi: 0x8e},
	// Block 0x63, offset 0x1f5
	{value: 0x0000, lo: 0x02},
	{value: 0x8100, lo: 0xa4, hi: 0xa5},
	{value: 0x8100, lo: 0xb0, hi: 0xb1},
	// Block 0x64, offset 0x1f8
	{value: 0x0000, lo: 0x02},
	{value: 0x8100, lo: 0x9b, hi: 0x9d},
	{value: 0x8200, lo: 0x9e, hi: 0xa3},
	// Block 0x65, offset 0x1fb
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0x90, hi: 0x90},
	// Block 0x66, offset 0x1fd
	{value: 0x0000, lo: 0x02},
	{value: 0x8100, lo: 0x99, hi: 0x99},
	{value: 0x8200, lo: 0xb2, hi: 0xb4},
	// Block 0x67, offset 0x200
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0xbc, hi: 0xbd},
	// Block 0x68, offset 0x202
	{value: 0x0000, lo: 0x03},
	{value: 0x8132, lo: 0xa0, hi: 0xa6},
	{value: 0x812d, lo: 0xa7, hi: 0xad},
	{value: 0x8132, lo: 0xae, hi: 0xaf},
	// Block 0x69, offset 0x206
	{value: 0x0000, lo: 0x04},
	{value: 0x8100, lo: 0x89, hi: 0x8c},
	{value: 0x8100, lo: 0xb0, hi: 0xb2},
	{value: 0x8100, lo: 0xb4, hi: 0xb4},
	{value: 0x8100, lo: 0xb6, hi: 0xbf},
	// Block 0x6a, offset 0x20b
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0x81, hi: 0x8c},
	// Block 0x6b, offset 0x20d
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0xb5, hi: 0xba},
	// Block 0x6c, offset 0x20f
	{value: 0x0000, lo: 0x04},
	{value: 0x4aa2, lo: 0x9e, hi: 0x9f},
	{value: 0x4aa2, lo: 0xa3, hi: 0xa3},
	{value: 0x4aa2, lo: 0xa5, hi: 0xa6},
	{value: 0x4aa2, lo: 0xaa, hi: 0xaf},
	// Block 0x6d, offset 0x214
	{value: 0x0000, lo: 0x05},
	{value: 0x4aa2, lo: 0x82, hi: 0x87},
	{value: 0x4aa2, lo: 0x8a, hi: 0x8f},
	{value: 0x4aa2, lo: 0x92, hi: 0x97},
	{value: 0x4aa2, lo: 0x9a, hi: 0x9c},
	{value: 0x8100, lo: 0xa3, hi: 0xa3},
	// Block 0x6e, offset 0x21a
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0xbd, hi: 0xbd},
	// Block 0x6f, offset 0x21c
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0xa0, hi: 0xa0},
	// Block 0x70, offset 0x21e
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xb6, hi: 0xba},
	// Block 0x71, offset 0x220
	{value: 0x002c, lo: 0x05},
	{value: 0x812d, lo: 0x8d, hi: 0x8d},
	{value: 0x8132, lo: 0x8f, hi: 0x8f},
	{value: 0x8132, lo: 0xb8, hi: 0xb8},
	{value: 0x8101, lo: 0xb9, hi: 0xba},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x72, offset 0x226
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0xa5, hi: 0xa5},
	{value: 0x812d, lo: 0xa6, hi: 0xa6},
	// Block 0x73, offset 0x229
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xa4, hi: 0xa7},
	// Block 0x74, offset 0x22b
	{value: 0x0000, lo: 0x05},
	{value: 0x812d, lo: 0x86, hi: 0x87},
	{value: 0x8132, lo: 0x88, hi: 0x8a},
	{value: 0x812d, lo: 0x8b, hi: 0x8b},
	{value: 0x8132, lo: 0x8c, hi: 0x8c},
	{value: 0x812d, lo: 0x8d, hi: 0x90},
	// Block 0x75, offset 0x231
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x86, hi: 0x86},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x76, offset 0x234
	{value: 0x17fe, lo: 0x07},
	{value: 0xa000, lo: 0x99, hi: 0x99},
	{value: 0x423b, lo: 0x9a, hi: 0x9a},
	{value: 0xa000, lo: 0x9b, hi: 0x9b},
	{value: 0x4245, lo: 0x9c, hi: 0x9c},
	{value: 0xa000, lo: 0xa5, hi: 0xa5},
	{value: 0x424f, lo: 0xab, hi: 0xab},
	{value: 0x8104, lo: 0xb9, hi: 0xba},
	// Block 0x77, offset 0x23c
	{value: 0x0000, lo: 0x06},
	{value: 0x8132, lo: 0x80, hi: 0x82},
	{value: 0x9900, lo: 0xa7, hi: 0xa7},
	{value: 0x2d81, lo: 0xae, hi: 0xae},
	{value: 0x2d8b, lo: 0xaf, hi: 0xaf},
	{value: 0xa000, lo: 0xb1, hi: 0xb2},
	{value: 0x8104, lo: 0xb3, hi: 0xb4},
	// Block 0x78, offset 0x243
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x80, hi: 0x80},
	{value: 0x8102, lo: 0x8a, hi: 0x8a},
	// Block 0x79, offset 0x246
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0xb5, hi: 0xb5},
	{value: 0x8102, lo: 0xb6, hi: 0xb6},
	// Block 0x7a, offset 0x249
	{value: 0x0002, lo: 0x01},
	{value: 0x8102, lo: 0xa9, hi: 0xaa},
	// Block 0x7b, offset 0x24b
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xbb, hi: 0xbc},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x7c, offset 0x24e
	{value: 0x0000, lo: 0x07},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2d95, lo: 0x8b, hi: 0x8b},
	{value: 0x2d9f, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	{value: 0x8132, lo: 0xa6, hi: 0xac},
	{value: 0x8132, lo: 0xb0, hi: 0xb4},
	// Block 0x7d, offset 0x256
	{value: 0x0000, lo: 0x03},
	{value: 0x8104, lo: 0x82, hi: 0x82},
	{value: 0x8102, lo: 0x86, hi: 0x86},
	{value: 0x8132, lo: 0x9e, hi: 0x9e},
	// Block 0x7e, offset 0x25a
	{value: 0x6b57, lo: 0x06},
	{value: 0x9900, lo: 0xb0, hi: 0xb0},
	{value: 0xa000, lo: 0xb9, hi: 0xb9},
	{value: 0x9900, lo: 0xba, hi: 0xba},
	{value: 0x2db3, lo: 0xbb, hi: 0xbb},
	{value: 0x2da9, lo: 0xbc, hi: 0xbd},
	{value: 0x2dbd, lo: 0xbe, hi: 0xbe},
	// Block 0x7f, offset 0x261
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x82, hi: 0x82},
	{value: 0x8102, lo: 0x83, hi: 0x83},
	// Block 0x80, offset 0x264
	{value: 0x0000, lo: 0x05},
	{value: 0x9900, lo: 0xaf, hi: 0xaf},
	{value: 0xa000, lo: 0xb8, hi: 0xb9},
	{value: 0x2dc7, lo: 0xba, hi: 0xba},
	{value: 0x2dd1, lo: 0xbb, hi: 0xbb},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x81, offset 0x26a
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0x80, hi: 0x80},
	// Block 0x82, offset 0x26c
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0xb6, hi: 0xb6},
	{value: 0x8102, lo: 0xb7, hi: 0xb7},
	// Block 0x83, offset 0x26f
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xab, hi: 0xab},
	// Block 0x84, offset 0x271
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0xb9, hi: 0xb9},
	{value: 0x8102, lo: 0xba, hi: 0xba},
	// Block 0x85, offset 0x274
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xa0, hi: 0xa0},
	// Block 0x86, offset 0x276
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xb4, hi: 0xb4},
	// Block 0x87, offset 0x278
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x87, hi: 0x87},
	// Block 0x88, offset 0x27a
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x99, hi: 0x99},
	// Block 0x89, offset 0x27c
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0x82, hi: 0x82},
	{value: 0x8104, lo: 0x84, hi: 0x85},
	// Block 0x8a, offset 0x27f
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x97, hi: 0x97},
	// Block 0x8b, offset 0x281
	{value: 0x0000, lo: 0x01},
	{value: 0x8101, lo: 0xb0, hi: 0xb4},
	// Block 0x8c, offset 0x283
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xb0, hi: 0xb6},
	// Block 0x8d, offset 0x285
	{value: 0x0000, lo: 0x01},
	{value: 0x8101, lo: 0x9e, hi: 0x9e},
	// Block 0x8e, offset 0x287
	{value: 0x0000, lo: 0x0c},
	{value: 0x45cf, lo: 0x9e, hi: 0x9e},
	{value: 0x45d9, lo: 0x9f, hi: 0x9f},
	{value: 0x460d, lo: 0xa0, hi: 0xa0},
	{value: 0x461b, lo: 0xa1, hi: 0xa1},
	{value: 0x4629, lo: 0xa2, hi: 0xa2},
	{value: 0x4637, lo: 0xa3, hi: 0xa3},
	{value: 0x4645, lo: 0xa4, hi: 0xa4},
	{value: 0x812b, lo: 0xa5, hi: 0xa6},
	{value: 0x8101, lo: 0xa7, hi: 0xa9},
	{value: 0x8130, lo: 0xad, hi: 0xad},
	{value: 0x812b, lo: 0xae, hi: 0xb2},
	{value: 0x812d, lo: 0xbb, hi: 0xbf},
	// Block 0x8f, offset 0x294
	{value: 0x0000, lo: 0x09},
	{value: 0x812d, lo: 0x80, hi: 0x82},
	{value: 0x8132, lo: 0x85, hi: 0x89},
	{value: 0x812d, lo: 0x8a, hi: 0x8b},
	{value: 0x8132, lo: 0xaa, hi: 0xad},
	{value: 0x45e3, lo: 0xbb, hi: 0xbb},
	{value: 0x45ed, lo: 0xbc, hi: 0xbc},
	{value: 0x4653, lo: 0xbd, hi: 0xbd},
	{value: 0x466f, lo: 0xbe, hi: 0xbe},
	{value: 0x4661, lo: 0xbf, hi: 0xbf},
	// Block 0x90, offset 0x29e
	{value: 0x0000, lo: 0x01},
	{value: 0x467d, lo: 0x80, hi: 0x80},
	// Block 0x91, offset 0x2a0
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x82, hi: 0x84},
	// Block 0x92, offset 0x2a2
	{value: 0x0000, lo: 0x05},
	{value: 0x8132, lo: 0x80, hi: 0x86},
	{value: 0x8132, lo: 0x88, hi: 0x98},
	{value: 0x8132, lo: 0x9b, hi: 0xa1},
	{value: 0x8132, lo: 0xa3, hi: 0xa4},
	{value: 0x8132, lo: 0xa6, hi: 0xaa},
	// Block 0x93, offset 0x2a8
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xac, hi: 0xaf},
	// Block 0x94, offset 0x2aa
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x90, hi: 0x96},
	// Block 0x95, offset 0x2ac
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0x84, hi: 0x89},
	{value: 0x8102, lo: 0x8a, hi: 0x8a},
	// Block 0x96, offset 0x2af
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0x93, hi: 0x93},
}

// lookup returns the trie value for the first UTF-8 encoding in s and
// the width in bytes of this encoding. The size will be 0 if s does not
// hold enough bytes to complete the encoding. len(s) must be greater than 0.
func (t *nfkcTrie) lookup(s []byte) (v uint16, sz int) {
	c0 := s[0]
	switch {
	case c0 < 0x80: // is ASCII
		return nfkcValues[c0], 1
	case c0 < 0xC2:
		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
	case c0 < 0xE0: // 2-byte UTF-8
		if len(s) < 2 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c1), 2
	case c0 < 0xF0: // 3-byte UTF-8
		if len(s) < 3 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfkcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c2), 3
	case c0 < 0xF8: // 4-byte UTF-8
		if len(s) < 4 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfkcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		o = uint32(i)<<6 + uint32(c2)
		i = nfkcIndex[o]
		c3 := s[3]
		if c3 < 0x80 || 0xC0 <= c3 {
			return 0, 3 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c3), 4
	}
	// Illegal rune
	return 0, 1
}

// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.
// s must start with a full and valid UTF-8 encoded rune.
func (t *nfkcTrie) lookupUnsafe(s []byte) uint16 {
	c0 := s[0]
	if c0 < 0x80 { // is ASCII
		return nfkcValues[c0]
	}
	i := nfkcIndex[c0]
	if c0 < 0xE0 { // 2-byte UTF-8
		return t.lookupValue(uint32(i), s[1])
	}
	i = nfkcIndex[uint32(i)<<6+uint32(s[1])]
	if c0 < 0xF0 { // 3-byte UTF-8
		return t.lookupValue(uint32(i), s[2])
	}
	i = nfkcIndex[uint32(i)<<6+uint32(s[2])]
	if c0 < 0xF8 { // 4-byte UTF-8
		return t.lookupValue(uint32(i), s[3])
	}
	return 0
}

// lookupString returns the trie value for the first UTF-8 encoding in s and
// the width in bytes of this encoding. The size will be 0 if s does not
// hold enough bytes to complete the encoding. len(s) must be greater than 0.
func (t *nfkcTrie) lookupString(s string) (v uint16, sz int) {
	c0 := s[0]
	switch {
	case c0 < 0x80: // is ASCII
		return nfkcValues[c0], 1
	case c0 < 0xC2:
		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
	case c0 < 0xE0: // 2-byte UTF-8
		if len(s) < 2 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c1), 2
	case c0 < 0xF0: // 3-byte UTF-8
		if len(s) < 3 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfkcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c2), 3
	case c0 < 0xF8: // 4-byte UTF-8
		if len(s) < 4 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfkcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		o = uint32(i)<<6 + uint32(c2)
		i = nfkcIndex[o]
		c3 := s[3]
		if c3 < 0x80 || 0xC0 <= c3 {
			return 0, 3 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c3), 4
	}
	// Illegal rune
	return 0, 1
}

// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.
// s must start with a full and valid UTF-8 encoded rune.
func (t *nfkcTrie) lookupStringUnsafe(s string) uint16 {
	c0 := s[0]
	if c0 < 0x80 { // is ASCII
		return nfkcValues[c0]
	}
	i := nfkcIndex[c0]
	if c0 < 0xE0 { // 2-byte UTF-8
		return t.lookupValue(uint32(i), s[1])
	}
	i = nfkcIndex[uint32(i)<<6+uint32(s[1])]
	if c0 < 0xF0 { // 3-byte UTF-8
		return t.lookupValue(uint32(i), s[2])
	}
	i = nfkcIndex[uint32(i)<<6+uint32(s[2])]
	if c0 < 0xF8 { // 4-byte UTF-8
		return t.lookupValue(uint32(i), s[3])
	}
	return 0
}

// nfkcTrie. Total size: 18684 bytes (18.25 KiB). Checksum: 113e23c477adfabd.
type nfkcTrie struct{}

func newNfkcTrie(i int) *nfkcTrie {
	return &nfkcTrie{}
}

// lookupValue determines the type of block n and looks up the value for b.
func (t *nfkcTrie) lookupValue(n uint32, b byte) uint16 {
	switch {
	case n < 92:
		return uint16(nfkcValues[n<<6+uint32(b)])
	default:
		n -= 92
		return uint16(nfkcSparse.lookup(n, b))
	}
}

// nfkcValues: 94 blocks, 6016 entries, 12032 bytes
// The third block is the zero block.
var nfkcValues = [6016]uint16{
	// Block 0x0, offset 0x0
	0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000,
	// Block 0x1, offset 0x40
	0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000,
	0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000,
	0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000,
	0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000,
	0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000,
	0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000,
	0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000,
	0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000,
	0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000,
	0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000,
	// Block 0x2, offset 0x80
	// Block 0x3, offset 0xc0
	0xc0: 0x2f72, 0xc1: 0x2f77, 0xc2: 0x468b, 0xc3: 0x2f7c, 0xc4: 0x469a, 0xc5: 0x469f,
	0xc6: 0xa000, 0xc7: 0x46a9, 0xc8: 0x2fe5, 0xc9: 0x2fea, 0xca: 0x46ae, 0xcb: 0x2ffe,
	0xcc: 0x3071, 0xcd: 0x3076, 0xce: 0x307b, 0xcf: 0x46c2, 0xd1: 0x3107,
	0xd2: 0x312a, 0xd3: 0x312f, 0xd4: 0x46cc, 0xd5: 0x46d1, 0xd6: 0x46e0,
	0xd8: 0xa000, 0xd9: 0x31b6, 0xda: 0x31bb, 0xdb: 0x31c0, 0xdc: 0x4712, 0xdd: 0x3238,
	0xe0: 0x327e, 0xe1: 0x3283, 0xe2: 0x471c, 0xe3: 0x3288,
	0xe4: 0x472b, 0xe5: 0x4730, 0xe6: 0xa000, 0xe7: 0x473a, 0xe8: 0x32f1, 0xe9: 0x32f6,
	0xea: 0x473f, 0xeb: 0x330a, 0xec: 0x3382, 0xed: 0x3387, 0xee: 0x338c, 0xef: 0x4753,
	0xf1: 0x3418, 0xf2: 0x343b, 0xf3: 0x3440, 0xf4: 0x475d, 0xf5: 0x4762,
	0xf6: 0x4771, 0xf8: 0xa000, 0xf9: 0x34cc, 0xfa: 0x34d1, 0xfb: 0x34d6,
	0xfc: 0x47a3, 0xfd: 0x3553, 0xff: 0x356c,
	// Block 0x4, offset 0x100
	0x100: 0x2f81, 0x101: 0x328d, 0x102: 0x4690, 0x103: 0x4721, 0x104: 0x2f9f, 0x105: 0x32ab,
	0x106: 0x2fb3, 0x107: 0x32bf, 0x108: 0x2fb8, 0x109: 0x32c4, 0x10a: 0x2fbd, 0x10b: 0x32c9,
	0x10c: 0x2fc2, 0x10d: 0x32ce, 0x10e: 0x2fcc, 0x10f: 0x32d8,
	0x112: 0x46b3, 0x113: 0x4744, 0x114: 0x2ff4, 0x115: 0x3300, 0x116: 0x2ff9, 0x117: 0x3305,
	0x118: 0x3017, 0x119: 0x3323, 0x11a: 0x3008, 0x11b: 0x3314, 0x11c: 0x3030, 0x11d: 0x333c,
	0x11e: 0x303a, 0x11f: 0x3346, 0x120: 0x303f, 0x121: 0x334b, 0x122: 0x3049, 0x123: 0x3355,
	0x124: 0x304e, 0x125: 0x335a, 0x128: 0x3080, 0x129: 0x3391,
	0x12a: 0x3085, 0x12b: 0x3396, 0x12c: 0x308a, 0x12d: 0x339b, 0x12e: 0x30ad, 0x12f: 0x33b9,
	0x130: 0x308f, 0x132: 0x195d, 0x133: 0x19ea, 0x134: 0x30b7, 0x135: 0x33c3,
	0x136: 0x30cb, 0x137: 0x33dc, 0x139: 0x30d5, 0x13a: 0x33e6, 0x13b: 0x30df,
	0x13c: 0x33f0, 0x13d: 0x30da, 0x13e: 0x33eb, 0x13f: 0x1baf,
	// Block 0x5, offset 0x140
	0x140: 0x1c37, 0x143: 0x3102, 0x144: 0x3413, 0x145: 0x311b,
	0x146: 0x342c, 0x147: 0x3111, 0x148: 0x3422, 0x149: 0x1c5f,
	0x14c: 0x46d6, 0x14d: 0x4767, 0x14e: 0x3134, 0x14f: 0x3445, 0x150: 0x313e, 0x151: 0x344f,
	0x154: 0x315c, 0x155: 0x346d, 0x156: 0x3175, 0x157: 0x3486,
	0x158: 0x3166, 0x159: 0x3477, 0x15a: 0x46f9, 0x15b: 0x478a, 0x15c: 0x317f, 0x15d: 0x3490,
	0x15e: 0x318e, 0x15f: 0x349f, 0x160: 0x46fe, 0x161: 0x478f, 0x162: 0x31a7, 0x163: 0x34bd,
	0x164: 0x3198, 0x165: 0x34ae, 0x168: 0x4708, 0x169: 0x4799,
	0x16a: 0x470d, 0x16b: 0x479e, 0x16c: 0x31c5, 0x16d: 0x34db, 0x16e: 0x31cf, 0x16f: 0x34e5,
	0x170: 0x31d4, 0x171: 0x34ea, 0x172: 0x31f2, 0x173: 0x3508, 0x174: 0x3215, 0x175: 0x352b,
	0x176: 0x323d, 0x177: 0x3558, 0x178: 0x3251, 0x179: 0x3260, 0x17a: 0x3580, 0x17b: 0x326a,
	0x17c: 0x358a, 0x17d: 0x326f, 0x17e: 0x358f, 0x17f: 0x00a7,
	// Block 0x6, offset 0x180
	0x184: 0x2df1, 0x185: 0x2df7,
	0x186: 0x2dfd, 0x187: 0x1972, 0x188: 0x1975, 0x189: 0x1a0b, 0x18a: 0x198a, 0x18b: 0x198d,
	0x18c: 0x1a41, 0x18d: 0x2f8b, 0x18e: 0x3297, 0x18f: 0x3099, 0x190: 0x33a5, 0x191: 0x3143,
	0x192: 0x3454, 0x193: 0x31d9, 0x194: 0x34ef, 0x195: 0x39d2, 0x196: 0x3b61, 0x197: 0x39cb,
	0x198: 0x3b5a, 0x199: 0x39d9, 0x19a: 0x3b68, 0x19b: 0x39c4, 0x19c: 0x3b53,
	0x19e: 0x38b3, 0x19f: 0x3a42, 0x1a0: 0x38ac, 0x1a1: 0x3a3b, 0x1a2: 0x35b6, 0x1a3: 0x35c8,
	0x1a6: 0x3044, 0x1a7: 0x3350, 0x1a8: 0x30c1, 0x1a9: 0x33d2,
	0x1aa: 0x46ef, 0x1ab: 0x4780, 0x1ac: 0x3993, 0x1ad: 0x3b22, 0x1ae: 0x35da, 0x1af: 0x35e0,
	0x1b0: 0x33c8, 0x1b1: 0x1942, 0x1b2: 0x1945, 0x1b3: 0x19d2, 0x1b4: 0x302b, 0x1b5: 0x3337,
	0x1b8: 0x30fd, 0x1b9: 0x340e, 0x1ba: 0x38ba, 0x1bb: 0x3a49,
	0x1bc: 0x35b0, 0x1bd: 0x35c2, 0x1be: 0x35bc, 0x1bf: 0x35ce,
	// Block 0x7, offset 0x1c0
	0x1c0: 0x2f90, 0x1c1: 0x329c, 0x1c2: 0x2f95, 0x1c3: 0x32a1, 0x1c4: 0x300d, 0x1c5: 0x3319,
	0x1c6: 0x3012, 0x1c7: 0x331e, 0x1c8: 0x309e, 0x1c9: 0x33aa, 0x1ca: 0x30a3, 0x1cb: 0x33af,
	0x1cc: 0x3148, 0x1cd: 0x3459, 0x1ce: 0x314d, 0x1cf: 0x345e, 0x1d0: 0x316b, 0x1d1: 0x347c,
	0x1d2: 0x3170, 0x1d3: 0x3481, 0x1d4: 0x31de, 0x1d5: 0x34f4, 0x1d6: 0x31e3, 0x1d7: 0x34f9,
	0x1d8: 0x3189, 0x1d9: 0x349a, 0x1da: 0x31a2, 0x1db: 0x34b8,
	0x1de: 0x305d, 0x1df: 0x3369,
	0x1e6: 0x4695, 0x1e7: 0x4726, 0x1e8: 0x46bd, 0x1e9: 0x474e,
	0x1ea: 0x3962, 0x1eb: 0x3af1, 0x1ec: 0x393f, 0x1ed: 0x3ace, 0x1ee: 0x46db, 0x1ef: 0x476c,
	0x1f0: 0x395b, 0x1f1: 0x3aea, 0x1f2: 0x3247, 0x1f3: 0x3562,
	// Block 0x8, offset 0x200
	0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132,
	0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932,
	0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932,
	0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d,
	0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d,
	0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d,
	0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d,
	0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d,
	0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101,
	0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d,
	0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132,
	// Block 0x9, offset 0x240
	0x240: 0x49b1, 0x241: 0x49b6, 0x242: 0x9932, 0x243: 0x49bb, 0x244: 0x4a74, 0x245: 0x9936,
	0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132,
	0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132,
	0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132,
	0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135,
	0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132,
	0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132,
	0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132,
	0x274: 0x0170,
	0x27a: 0x42a8,
	0x27e: 0x0037,
	// Block 0xa, offset 0x280
	0x284: 0x425d, 0x285: 0x447e,
	0x286: 0x35ec, 0x287: 0x00ce, 0x288: 0x360a, 0x289: 0x3616, 0x28a: 0x3628,
	0x28c: 0x3646, 0x28e: 0x3658, 0x28f: 0x3676, 0x290: 0x3e0b, 0x291: 0xa000,
	0x295: 0xa000, 0x297: 0xa000,
	0x299: 0xa000,
	0x29f: 0xa000, 0x2a1: 0xa000,
	0x2a5: 0xa000, 0x2a9: 0xa000,
	0x2aa: 0x363a, 0x2ab: 0x366a, 0x2ac: 0x4801, 0x2ad: 0x369a, 0x2ae: 0x482b, 0x2af: 0x36ac,
	0x2b0: 0x3e73, 0x2b1: 0xa000, 0x2b5: 0xa000,
	0x2b7: 0xa000, 0x2b9: 0xa000,
	0x2bf: 0xa000,
	// Block 0xb, offset 0x2c0
	0x2c1: 0xa000, 0x2c5: 0xa000,
	0x2c9: 0xa000, 0x2ca: 0x4843, 0x2cb: 0x4861,
	0x2cc: 0x36ca, 0x2cd: 0x36e2, 0x2ce: 0x4879, 0x2d0: 0x01be, 0x2d1: 0x01d0,
	0x2d2: 0x01ac, 0x2d3: 0x430f, 0x2d4: 0x4315, 0x2d5: 0x01fa, 0x2d6: 0x01e8,
	0x2f0: 0x01d6, 0x2f1: 0x01eb, 0x2f2: 0x01ee, 0x2f4: 0x0188, 0x2f5: 0x01c7,
	0x2f9: 0x01a6,
	// Block 0xc, offset 0x300
	0x300: 0x3724, 0x301: 0x3730, 0x303: 0x371e,
	0x306: 0xa000, 0x307: 0x370c,
	0x30c: 0x3760, 0x30d: 0x3748, 0x30e: 0x3772, 0x310: 0xa000,
	0x313: 0xa000, 0x315: 0xa000, 0x316: 0xa000, 0x317: 0xa000,
	0x318: 0xa000, 0x319: 0x3754, 0x31a: 0xa000,
	0x31e: 0xa000, 0x323: 0xa000,
	0x327: 0xa000,
	0x32b: 0xa000, 0x32d: 0xa000,
	0x330: 0xa000, 0x333: 0xa000, 0x335: 0xa000,
	0x336: 0xa000, 0x337: 0xa000, 0x338: 0xa000, 0x339: 0x37d8, 0x33a: 0xa000,
	0x33e: 0xa000,
	// Block 0xd, offset 0x340
	0x341: 0x3736, 0x342: 0x37ba,
	0x350: 0x3712, 0x351: 0x3796,
	0x352: 0x3718, 0x353: 0x379c, 0x356: 0x372a, 0x357: 0x37ae,
	0x358: 0xa000, 0x359: 0xa000, 0x35a: 0x382c, 0x35b: 0x3832, 0x35c: 0x373c, 0x35d: 0x37c0,
	0x35e: 0x3742, 0x35f: 0x37c6, 0x362: 0x374e, 0x363: 0x37d2,
	0x364: 0x375a, 0x365: 0x37de, 0x366: 0x3766, 0x367: 0x37ea, 0x368: 0xa000, 0x369: 0xa000,
	0x36a: 0x3838, 0x36b: 0x383e, 0x36c: 0x3790, 0x36d: 0x3814, 0x36e: 0x376c, 0x36f: 0x37f0,
	0x370: 0x3778, 0x371: 0x37fc, 0x372: 0x377e, 0x373: 0x3802, 0x374: 0x3784, 0x375: 0x3808,
	0x378: 0x378a, 0x379: 0x380e,
	// Block 0xe, offset 0x380
	0x387: 0x1d64,
	0x391: 0x812d,
	0x392: 0x8132, 0x393: 0x8132, 0x394: 0x8132, 0x395: 0x8132, 0x396: 0x812d, 0x397: 0x8132,
	0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x812e, 0x39b: 0x812d, 0x39c: 0x8132, 0x39d: 0x8132,
	0x39e: 0x8132, 0x39f: 0x8132, 0x3a0: 0x8132, 0x3a1: 0x8132, 0x3a2: 0x812d, 0x3a3: 0x812d,
	0x3a4: 0x812d, 0x3a5: 0x812d, 0x3a6: 0x812d, 0x3a7: 0x812d, 0x3a8: 0x8132, 0x3a9: 0x8132,
	0x3aa: 0x812d, 0x3ab: 0x8132, 0x3ac: 0x8132, 0x3ad: 0x812e, 0x3ae: 0x8131, 0x3af: 0x8132,
	0x3b0: 0x8105, 0x3b1: 0x8106, 0x3b2: 0x8107, 0x3b3: 0x8108, 0x3b4: 0x8109, 0x3b5: 0x810a,
	0x3b6: 0x810b, 0x3b7: 0x810c, 0x3b8: 0x810d, 0x3b9: 0x810e, 0x3ba: 0x810e, 0x3bb: 0x810f,
	0x3bc: 0x8110, 0x3bd: 0x8111, 0x3bf: 0x8112,
	// Block 0xf, offset 0x3c0
	0x3c8: 0xa000, 0x3ca: 0xa000, 0x3cb: 0x8116,
	0x3cc: 0x8117, 0x3cd: 0x8118, 0x3ce: 0x8119, 0x3cf: 0x811a, 0x3d0: 0x811b, 0x3d1: 0x811c,
	0x3d2: 0x811d, 0x3d3: 0x9932, 0x3d4: 0x9932, 0x3d5: 0x992d, 0x3d6: 0x812d, 0x3d7: 0x8132,
	0x3d8: 0x8132, 0x3d9: 0x8132, 0x3da: 0x8132, 0x3db: 0x8132, 0x3dc: 0x812d, 0x3dd: 0x8132,
	0x3de: 0x8132, 0x3df: 0x812d,
	0x3f0: 0x811e, 0x3f5: 0x1d87,
	0x3f6: 0x2016, 0x3f7: 0x2052, 0x3f8: 0x204d,
	// Block 0x10, offset 0x400
	0x413: 0x812d, 0x414: 0x8132, 0x415: 0x8132, 0x416: 0x8132, 0x417: 0x8132,
	0x418: 0x8132, 0x419: 0x8132, 0x41a: 0x8132, 0x41b: 0x8132, 0x41c: 0x8132, 0x41d: 0x8132,
	0x41e: 0x8132, 0x41f: 0x8132, 0x420: 0x8132, 0x421: 0x8132, 0x423: 0x812d,
	0x424: 0x8132, 0x425: 0x8132, 0x426: 0x812d, 0x427: 0x8132, 0x428: 0x8132, 0x429: 0x812d,
	0x42a: 0x8132, 0x42b: 0x8132, 0x42c: 0x8132, 0x42d: 0x812d, 0x42e: 0x812d, 0x42f: 0x812d,
	0x430: 0x8116, 0x431: 0x8117, 0x432: 0x8118, 0x433: 0x8132, 0x434: 0x8132, 0x435: 0x8132,
	0x436: 0x812d, 0x437: 0x8132, 0x438: 0x8132, 0x439: 0x812d, 0x43a: 0x812d, 0x43b: 0x8132,
	0x43c: 0x8132, 0x43d: 0x8132, 0x43e: 0x8132, 0x43f: 0x8132,
	// Block 0x11, offset 0x440
	0x445: 0xa000,
	0x446: 0x2d29, 0x447: 0xa000, 0x448: 0x2d31, 0x449: 0xa000, 0x44a: 0x2d39, 0x44b: 0xa000,
	0x44c: 0x2d41, 0x44d: 0xa000, 0x44e: 0x2d49, 0x451: 0xa000,
	0x452: 0x2d51,
	0x474: 0x8102, 0x475: 0x9900,
	0x47a: 0xa000, 0x47b: 0x2d59,
	0x47c: 0xa000, 0x47d: 0x2d61, 0x47e: 0xa000, 0x47f: 0xa000,
	// Block 0x12, offset 0x480
	0x480: 0x0069, 0x481: 0x006b, 0x482: 0x006f, 0x483: 0x0083, 0x484: 0x00f5, 0x485: 0x00f8,
	0x486: 0x0413, 0x487: 0x0085, 0x488: 0x0089, 0x489: 0x008b, 0x48a: 0x0104, 0x48b: 0x0107,
	0x48c: 0x010a, 0x48d: 0x008f, 0x48f: 0x0097, 0x490: 0x009b, 0x491: 0x00e0,
	0x492: 0x009f, 0x493: 0x00fe, 0x494: 0x0417, 0x495: 0x041b, 0x496: 0x00a1, 0x497: 0x00a9,
	0x498: 0x00ab, 0x499: 0x0423, 0x49a: 0x012b, 0x49b: 0x00ad, 0x49c: 0x0427, 0x49d: 0x01be,
	0x49e: 0x01c1, 0x49f: 0x01c4, 0x4a0: 0x01fa, 0x4a1: 0x01fd, 0x4a2: 0x0093, 0x4a3: 0x00a5,
	0x4a4: 0x00ab, 0x4a5: 0x00ad, 0x4a6: 0x01be, 0x4a7: 0x01c1, 0x4a8: 0x01eb, 0x4a9: 0x01fa,
	0x4aa: 0x01fd,
	0x4b8: 0x020c,
	// Block 0x13, offset 0x4c0
	0x4db: 0x00fb, 0x4dc: 0x0087, 0x4dd: 0x0101,
	0x4de: 0x00d4, 0x4df: 0x010a, 0x4e0: 0x008d, 0x4e1: 0x010d, 0x4e2: 0x0110, 0x4e3: 0x0116,
	0x4e4: 0x011c, 0x4e5: 0x011f, 0x4e6: 0x0122, 0x4e7: 0x042b, 0x4e8: 0x016a, 0x4e9: 0x0128,
	0x4ea: 0x042f, 0x4eb: 0x016d, 0x4ec: 0x0131, 0x4ed: 0x012e, 0x4ee: 0x0134, 0x4ef: 0x0137,
	0x4f0: 0x013a, 0x4f1: 0x013d, 0x4f2: 0x0140, 0x4f3: 0x014c, 0x4f4: 0x014f, 0x4f5: 0x00ec,
	0x4f6: 0x0152, 0x4f7: 0x0155, 0x4f8: 0x041f, 0x4f9: 0x0158, 0x4fa: 0x015b, 0x4fb: 0x00b5,
	0x4fc: 0x015e, 0x4fd: 0x0161, 0x4fe: 0x0164, 0x4ff: 0x01d0,
	// Block 0x14, offset 0x500
	0x500: 0x8132, 0x501: 0x8132, 0x502: 0x812d, 0x503: 0x8132, 0x504: 0x8132, 0x505: 0x8132,
	0x506: 0x8132, 0x507: 0x8132, 0x508: 0x8132, 0x509: 0x8132, 0x50a: 0x812d, 0x50b: 0x8132,
	0x50c: 0x8132, 0x50d: 0x8135, 0x50e: 0x812a, 0x50f: 0x812d, 0x510: 0x8129, 0x511: 0x8132,
	0x512: 0x8132, 0x513: 0x8132, 0x514: 0x8132, 0x515: 0x8132, 0x516: 0x8132, 0x517: 0x8132,
	0x518: 0x8132, 0x519: 0x8132, 0x51a: 0x8132, 0x51b: 0x8132, 0x51c: 0x8132, 0x51d: 0x8132,
	0x51e: 0x8132, 0x51f: 0x8132, 0x520: 0x8132, 0x521: 0x8132, 0x522: 0x8132, 0x523: 0x8132,
	0x524: 0x8132, 0x525: 0x8132, 0x526: 0x8132, 0x527: 0x8132, 0x528: 0x8132, 0x529: 0x8132,
	0x52a: 0x8132, 0x52b: 0x8132, 0x52c: 0x8132, 0x52d: 0x8132, 0x52e: 0x8132, 0x52f: 0x8132,
	0x530: 0x8132, 0x531: 0x8132, 0x532: 0x8132, 0x533: 0x8132, 0x534: 0x8132, 0x535: 0x8132,
	0x536: 0x8133, 0x537: 0x8131, 0x538: 0x8131, 0x539: 0x812d, 0x53b: 0x8132,
	0x53c: 0x8134, 0x53d: 0x812d, 0x53e: 0x8132, 0x53f: 0x812d,
	// Block 0x15, offset 0x540
	0x540: 0x2f9a, 0x541: 0x32a6, 0x542: 0x2fa4, 0x543: 0x32b0, 0x544: 0x2fa9, 0x545: 0x32b5,
	0x546: 0x2fae, 0x547: 0x32ba, 0x548: 0x38cf, 0x549: 0x3a5e, 0x54a: 0x2fc7, 0x54b: 0x32d3,
	0x54c: 0x2fd1, 0x54d: 0x32dd, 0x54e: 0x2fe0, 0x54f: 0x32ec, 0x550: 0x2fd6, 0x551: 0x32e2,
	0x552: 0x2fdb, 0x553: 0x32e7, 0x554: 0x38f2, 0x555: 0x3a81, 0x556: 0x38f9, 0x557: 0x3a88,
	0x558: 0x301c, 0x559: 0x3328, 0x55a: 0x3021, 0x55b: 0x332d, 0x55c: 0x3907, 0x55d: 0x3a96,
	0x55e: 0x3026, 0x55f: 0x3332, 0x560: 0x3035, 0x561: 0x3341, 0x562: 0x3053, 0x563: 0x335f,
	0x564: 0x3062, 0x565: 0x336e, 0x566: 0x3058, 0x567: 0x3364, 0x568: 0x3067, 0x569: 0x3373,
	0x56a: 0x306c, 0x56b: 0x3378, 0x56c: 0x30b2, 0x56d: 0x33be, 0x56e: 0x390e, 0x56f: 0x3a9d,
	0x570: 0x30bc, 0x571: 0x33cd, 0x572: 0x30c6, 0x573: 0x33d7, 0x574: 0x30d0, 0x575: 0x33e1,
	0x576: 0x46c7, 0x577: 0x4758, 0x578: 0x3915, 0x579: 0x3aa4, 0x57a: 0x30e9, 0x57b: 0x33fa,
	0x57c: 0x30e4, 0x57d: 0x33f5, 0x57e: 0x30ee, 0x57f: 0x33ff,
	// Block 0x16, offset 0x580
	0x580: 0x30f3, 0x581: 0x3404, 0x582: 0x30f8, 0x583: 0x3409, 0x584: 0x310c, 0x585: 0x341d,
	0x586: 0x3116, 0x587: 0x3427, 0x588: 0x3125, 0x589: 0x3436, 0x58a: 0x3120, 0x58b: 0x3431,
	0x58c: 0x3938, 0x58d: 0x3ac7, 0x58e: 0x3946, 0x58f: 0x3ad5, 0x590: 0x394d, 0x591: 0x3adc,
	0x592: 0x3954, 0x593: 0x3ae3, 0x594: 0x3152, 0x595: 0x3463, 0x596: 0x3157, 0x597: 0x3468,
	0x598: 0x3161, 0x599: 0x3472, 0x59a: 0x46f4, 0x59b: 0x4785, 0x59c: 0x399a, 0x59d: 0x3b29,
	0x59e: 0x317a, 0x59f: 0x348b, 0x5a0: 0x3184, 0x5a1: 0x3495, 0x5a2: 0x4703, 0x5a3: 0x4794,
	0x5a4: 0x39a1, 0x5a5: 0x3b30, 0x5a6: 0x39a8, 0x5a7: 0x3b37, 0x5a8: 0x39af, 0x5a9: 0x3b3e,
	0x5aa: 0x3193, 0x5ab: 0x34a4, 0x5ac: 0x319d, 0x5ad: 0x34b3, 0x5ae: 0x31b1, 0x5af: 0x34c7,
	0x5b0: 0x31ac, 0x5b1: 0x34c2, 0x5b2: 0x31ed, 0x5b3: 0x3503, 0x5b4: 0x31fc, 0x5b5: 0x3512,
	0x5b6: 0x31f7, 0x5b7: 0x350d, 0x5b8: 0x39b6, 0x5b9: 0x3b45, 0x5ba: 0x39bd, 0x5bb: 0x3b4c,
	0x5bc: 0x3201, 0x5bd: 0x3517, 0x5be: 0x3206, 0x5bf: 0x351c,
	// Block 0x17, offset 0x5c0
	0x5c0: 0x320b, 0x5c1: 0x3521, 0x5c2: 0x3210, 0x5c3: 0x3526, 0x5c4: 0x321f, 0x5c5: 0x3535,
	0x5c6: 0x321a, 0x5c7: 0x3530, 0x5c8: 0x3224, 0x5c9: 0x353f, 0x5ca: 0x3229, 0x5cb: 0x3544,
	0x5cc: 0x322e, 0x5cd: 0x3549, 0x5ce: 0x324c, 0x5cf: 0x3567, 0x5d0: 0x3265, 0x5d1: 0x3585,
	0x5d2: 0x3274, 0x5d3: 0x3594, 0x5d4: 0x3279, 0x5d5: 0x3599, 0x5d6: 0x337d, 0x5d7: 0x34a9,
	0x5d8: 0x353a, 0x5d9: 0x3576, 0x5da: 0x1be3, 0x5db: 0x42da,
	0x5e0: 0x46a4, 0x5e1: 0x4735, 0x5e2: 0x2f86, 0x5e3: 0x3292,
	0x5e4: 0x387b, 0x5e5: 0x3a0a, 0x5e6: 0x3874, 0x5e7: 0x3a03, 0x5e8: 0x3889, 0x5e9: 0x3a18,
	0x5ea: 0x3882, 0x5eb: 0x3a11, 0x5ec: 0x38c1, 0x5ed: 0x3a50, 0x5ee: 0x3897, 0x5ef: 0x3a26,
	0x5f0: 0x3890, 0x5f1: 0x3a1f, 0x5f2: 0x38a5, 0x5f3: 0x3a34, 0x5f4: 0x389e, 0x5f5: 0x3a2d,
	0x5f6: 0x38c8, 0x5f7: 0x3a57, 0x5f8: 0x46b8, 0x5f9: 0x4749, 0x5fa: 0x3003, 0x5fb: 0x330f,
	0x5fc: 0x2fef, 0x5fd: 0x32fb, 0x5fe: 0x38dd, 0x5ff: 0x3a6c,
	// Block 0x18, offset 0x600
	0x600: 0x38d6, 0x601: 0x3a65, 0x602: 0x38eb, 0x603: 0x3a7a, 0x604: 0x38e4, 0x605: 0x3a73,
	0x606: 0x3900, 0x607: 0x3a8f, 0x608: 0x3094, 0x609: 0x33a0, 0x60a: 0x30a8, 0x60b: 0x33b4,
	0x60c: 0x46ea, 0x60d: 0x477b, 0x60e: 0x3139, 0x60f: 0x344a, 0x610: 0x3923, 0x611: 0x3ab2,
	0x612: 0x391c, 0x613: 0x3aab, 0x614: 0x3931, 0x615: 0x3ac0, 0x616: 0x392a, 0x617: 0x3ab9,
	0x618: 0x398c, 0x619: 0x3b1b, 0x61a: 0x3970, 0x61b: 0x3aff, 0x61c: 0x3969, 0x61d: 0x3af8,
	0x61e: 0x397e, 0x61f: 0x3b0d, 0x620: 0x3977, 0x621: 0x3b06, 0x622: 0x3985, 0x623: 0x3b14,
	0x624: 0x31e8, 0x625: 0x34fe, 0x626: 0x31ca, 0x627: 0x34e0, 0x628: 0x39e7, 0x629: 0x3b76,
	0x62a: 0x39e0, 0x62b: 0x3b6f, 0x62c: 0x39f5, 0x62d: 0x3b84, 0x62e: 0x39ee, 0x62f: 0x3b7d,
	0x630: 0x39fc, 0x631: 0x3b8b, 0x632: 0x3233, 0x633: 0x354e, 0x634: 0x325b, 0x635: 0x357b,
	0x636: 0x3256, 0x637: 0x3571, 0x638: 0x3242, 0x639: 0x355d,
	// Block 0x19, offset 0x640
	0x640: 0x4807, 0x641: 0x480d, 0x642: 0x4921, 0x643: 0x4939, 0x644: 0x4929, 0x645: 0x4941,
	0x646: 0x4931, 0x647: 0x4949, 0x648: 0x47ad, 0x649: 0x47b3, 0x64a: 0x4891, 0x64b: 0x48a9,
	0x64c: 0x4899, 0x64d: 0x48b1, 0x64e: 0x48a1, 0x64f: 0x48b9, 0x650: 0x4819, 0x651: 0x481f,
	0x652: 0x3dbb, 0x653: 0x3dcb, 0x654: 0x3dc3, 0x655: 0x3dd3,
	0x658: 0x47b9, 0x659: 0x47bf, 0x65a: 0x3ceb, 0x65b: 0x3cfb, 0x65c: 0x3cf3, 0x65d: 0x3d03,
	0x660: 0x4831, 0x661: 0x4837, 0x662: 0x4951, 0x663: 0x4969,
	0x664: 0x4959, 0x665: 0x4971, 0x666: 0x4961, 0x667: 0x4979, 0x668: 0x47c5, 0x669: 0x47cb,
	0x66a: 0x48c1, 0x66b: 0x48d9, 0x66c: 0x48c9, 0x66d: 0x48e1, 0x66e: 0x48d1, 0x66f: 0x48e9,
	0x670: 0x4849, 0x671: 0x484f, 0x672: 0x3e1b, 0x673: 0x3e33, 0x674: 0x3e23, 0x675: 0x3e3b,
	0x676: 0x3e2b, 0x677: 0x3e43, 0x678: 0x47d1, 0x679: 0x47d7, 0x67a: 0x3d1b, 0x67b: 0x3d33,
	0x67c: 0x3d23, 0x67d: 0x3d3b, 0x67e: 0x3d2b, 0x67f: 0x3d43,
	// Block 0x1a, offset 0x680
	0x680: 0x4855, 0x681: 0x485b, 0x682: 0x3e4b, 0x683: 0x3e5b, 0x684: 0x3e53, 0x685: 0x3e63,
	0x688: 0x47dd, 0x689: 0x47e3, 0x68a: 0x3d4b, 0x68b: 0x3d5b,
	0x68c: 0x3d53, 0x68d: 0x3d63, 0x690: 0x4867, 0x691: 0x486d,
	0x692: 0x3e83, 0x693: 0x3e9b, 0x694: 0x3e8b, 0x695: 0x3ea3, 0x696: 0x3e93, 0x697: 0x3eab,
	0x699: 0x47e9, 0x69b: 0x3d6b, 0x69d: 0x3d73,
	0x69f: 0x3d7b, 0x6a0: 0x487f, 0x6a1: 0x4885, 0x6a2: 0x4981, 0x6a3: 0x4999,
	0x6a4: 0x4989, 0x6a5: 0x49a1, 0x6a6: 0x4991, 0x6a7: 0x49a9, 0x6a8: 0x47ef, 0x6a9: 0x47f5,
	0x6aa: 0x48f1, 0x6ab: 0x4909, 0x6ac: 0x48f9, 0x6ad: 0x4911, 0x6ae: 0x4901, 0x6af: 0x4919,
	0x6b0: 0x47fb, 0x6b1: 0x4321, 0x6b2: 0x3694, 0x6b3: 0x4327, 0x6b4: 0x4825, 0x6b5: 0x432d,
	0x6b6: 0x36a6, 0x6b7: 0x4333, 0x6b8: 0x36c4, 0x6b9: 0x4339, 0x6ba: 0x36dc, 0x6bb: 0x433f,
	0x6bc: 0x4873, 0x6bd: 0x4345,
	// Block 0x1b, offset 0x6c0
	0x6c0: 0x3da3, 0x6c1: 0x3dab, 0x6c2: 0x4187, 0x6c3: 0x41a5, 0x6c4: 0x4191, 0x6c5: 0x41af,
	0x6c6: 0x419b, 0x6c7: 0x41b9, 0x6c8: 0x3cdb, 0x6c9: 0x3ce3, 0x6ca: 0x40d3, 0x6cb: 0x40f1,
	0x6cc: 0x40dd, 0x6cd: 0x40fb, 0x6ce: 0x40e7, 0x6cf: 0x4105, 0x6d0: 0x3deb, 0x6d1: 0x3df3,
	0x6d2: 0x41c3, 0x6d3: 0x41e1, 0x6d4: 0x41cd, 0x6d5: 0x41eb, 0x6d6: 0x41d7, 0x6d7: 0x41f5,
	0x6d8: 0x3d0b, 0x6d9: 0x3d13, 0x6da: 0x410f, 0x6db: 0x412d, 0x6dc: 0x4119, 0x6dd: 0x4137,
	0x6de: 0x4123, 0x6df: 0x4141, 0x6e0: 0x3ec3, 0x6e1: 0x3ecb, 0x6e2: 0x41ff, 0x6e3: 0x421d,
	0x6e4: 0x4209, 0x6e5: 0x4227, 0x6e6: 0x4213, 0x6e7: 0x4231, 0x6e8: 0x3d83, 0x6e9: 0x3d8b,
	0x6ea: 0x414b, 0x6eb: 0x4169, 0x6ec: 0x4155, 0x6ed: 0x4173, 0x6ee: 0x415f, 0x6ef: 0x417d,
	0x6f0: 0x3688, 0x6f1: 0x3682, 0x6f2: 0x3d93, 0x6f3: 0x368e, 0x6f4: 0x3d9b,
	0x6f6: 0x4813, 0x6f7: 0x3db3, 0x6f8: 0x35f8, 0x6f9: 0x35f2, 0x6fa: 0x35e6, 0x6fb: 0x42f1,
	0x6fc: 0x35fe, 0x6fd: 0x428a, 0x6fe: 0x01d3, 0x6ff: 0x428a,
	// Block 0x1c, offset 0x700
	0x700: 0x42a3, 0x701: 0x4485, 0x702: 0x3ddb, 0x703: 0x36a0, 0x704: 0x3de3,
	0x706: 0x483d, 0x707: 0x3dfb, 0x708: 0x3604, 0x709: 0x42f7, 0x70a: 0x3610, 0x70b: 0x42fd,
	0x70c: 0x361c, 0x70d: 0x448c, 0x70e: 0x4493, 0x70f: 0x449a, 0x710: 0x36b8, 0x711: 0x36b2,
	0x712: 0x3e03, 0x713: 0x44e7, 0x716: 0x36be, 0x717: 0x3e13,
	0x718: 0x3634, 0x719: 0x362e, 0x71a: 0x3622, 0x71b: 0x4303, 0x71d: 0x44a1,
	0x71e: 0x44a8, 0x71f: 0x44af, 0x720: 0x36ee, 0x721: 0x36e8, 0x722: 0x3e6b, 0x723: 0x44ef,
	0x724: 0x36d0, 0x725: 0x36d6, 0x726: 0x36f4, 0x727: 0x3e7b, 0x728: 0x3664, 0x729: 0x365e,
	0x72a: 0x3652, 0x72b: 0x430f, 0x72c: 0x364c, 0x72d: 0x4477, 0x72e: 0x447e, 0x72f: 0x0081,
	0x732: 0x3eb3, 0x733: 0x36fa, 0x734: 0x3ebb,
	0x736: 0x488b, 0x737: 0x3ed3, 0x738: 0x3640, 0x739: 0x4309, 0x73a: 0x3670, 0x73b: 0x431b,
	0x73c: 0x367c, 0x73d: 0x425d, 0x73e: 0x428f,
	// Block 0x1d, offset 0x740
	0x740: 0x1bdb, 0x741: 0x1bdf, 0x742: 0x0047, 0x743: 0x1c57, 0x745: 0x1beb,
	0x746: 0x1bef, 0x747: 0x00e9, 0x749: 0x1c5b, 0x74a: 0x008f, 0x74b: 0x0051,
	0x74c: 0x0051, 0x74d: 0x0051, 0x74e: 0x0091, 0x74f: 0x00da, 0x750: 0x0053, 0x751: 0x0053,
	0x752: 0x0059, 0x753: 0x0099, 0x755: 0x005d, 0x756: 0x1990,
	0x759: 0x0061, 0x75a: 0x0063, 0x75b: 0x0065, 0x75c: 0x0065, 0x75d: 0x0065,
	0x760: 0x19a2, 0x761: 0x1bcb, 0x762: 0x19ab,
	0x764: 0x0075, 0x766: 0x01b8, 0x768: 0x0075,
	0x76a: 0x0057, 0x76b: 0x42d5, 0x76c: 0x0045, 0x76d: 0x0047, 0x76f: 0x008b,
	0x770: 0x004b, 0x771: 0x004d, 0x773: 0x005b, 0x774: 0x009f, 0x775: 0x0215,
	0x776: 0x0218, 0x777: 0x021b, 0x778: 0x021e, 0x779: 0x0093, 0x77b: 0x1b9b,
	0x77c: 0x01e8, 0x77d: 0x01c1, 0x77e: 0x0179, 0x77f: 0x01a0,
	// Block 0x1e, offset 0x780
	0x780: 0x0463, 0x785: 0x0049,
	0x786: 0x0089, 0x787: 0x008b, 0x788: 0x0093, 0x789: 0x0095,
	0x790: 0x2231, 0x791: 0x223d,
	0x792: 0x22f1, 0x793: 0x2219, 0x794: 0x229d, 0x795: 0x2225, 0x796: 0x22a3, 0x797: 0x22bb,
	0x798: 0x22c7, 0x799: 0x222b, 0x79a: 0x22cd, 0x79b: 0x2237, 0x79c: 0x22c1, 0x79d: 0x22d3,
	0x79e: 0x22d9, 0x79f: 0x1cbf, 0x7a0: 0x0053, 0x7a1: 0x195a, 0x7a2: 0x1ba7, 0x7a3: 0x1963,
	0x7a4: 0x006d, 0x7a5: 0x19ae, 0x7a6: 0x1bd3, 0x7a7: 0x1d4b, 0x7a8: 0x1966, 0x7a9: 0x0071,
	0x7aa: 0x19ba, 0x7ab: 0x1bd7, 0x7ac: 0x0059, 0x7ad: 0x0047, 0x7ae: 0x0049, 0x7af: 0x005b,
	0x7b0: 0x0093, 0x7b1: 0x19e7, 0x7b2: 0x1c1b, 0x7b3: 0x19f0, 0x7b4: 0x00ad, 0x7b5: 0x1a65,
	0x7b6: 0x1c4f, 0x7b7: 0x1d5f, 0x7b8: 0x19f3, 0x7b9: 0x00b1, 0x7ba: 0x1a68, 0x7bb: 0x1c53,
	0x7bc: 0x0099, 0x7bd: 0x0087, 0x7be: 0x0089, 0x7bf: 0x009b,
	// Block 0x1f, offset 0x7c0
	0x7c1: 0x3c09, 0x7c3: 0xa000, 0x7c4: 0x3c10, 0x7c5: 0xa000,
	0x7c7: 0x3c17, 0x7c8: 0xa000, 0x7c9: 0x3c1e,
	0x7cd: 0xa000,
	0x7e0: 0x2f68, 0x7e1: 0xa000, 0x7e2: 0x3c2c,
	0x7e4: 0xa000, 0x7e5: 0xa000,
	0x7ed: 0x3c25, 0x7ee: 0x2f63, 0x7ef: 0x2f6d,
	0x7f0: 0x3c33, 0x7f1: 0x3c3a, 0x7f2: 0xa000, 0x7f3: 0xa000, 0x7f4: 0x3c41, 0x7f5: 0x3c48,
	0x7f6: 0xa000, 0x7f7: 0xa000, 0x7f8: 0x3c4f, 0x7f9: 0x3c56, 0x7fa: 0xa000, 0x7fb: 0xa000,
	0x7fc: 0xa000, 0x7fd: 0xa000,
	// Block 0x20, offset 0x800
	0x800: 0x3c5d, 0x801: 0x3c64, 0x802: 0xa000, 0x803: 0xa000, 0x804: 0x3c79, 0x805: 0x3c80,
	0x806: 0xa000, 0x807: 0xa000, 0x808: 0x3c87, 0x809: 0x3c8e,
	0x811: 0xa000,
	0x812: 0xa000,
	0x822: 0xa000,
	0x828: 0xa000, 0x829: 0xa000,
	0x82b: 0xa000, 0x82c: 0x3ca3, 0x82d: 0x3caa, 0x82e: 0x3cb1, 0x82f: 0x3cb8,
	0x832: 0xa000, 0x833: 0xa000, 0x834: 0xa000, 0x835: 0xa000,
	// Block 0x21, offset 0x840
	0x860: 0x0023, 0x861: 0x0025, 0x862: 0x0027, 0x863: 0x0029,
	0x864: 0x002b, 0x865: 0x002d, 0x866: 0x002f, 0x867: 0x0031, 0x868: 0x0033, 0x869: 0x1882,
	0x86a: 0x1885, 0x86b: 0x1888, 0x86c: 0x188b, 0x86d: 0x188e, 0x86e: 0x1891, 0x86f: 0x1894,
	0x870: 0x1897, 0x871: 0x189a, 0x872: 0x189d, 0x873: 0x18a6, 0x874: 0x1a6b, 0x875: 0x1a6f,
	0x876: 0x1a73, 0x877: 0x1a77, 0x878: 0x1a7b, 0x879: 0x1a7f, 0x87a: 0x1a83, 0x87b: 0x1a87,
	0x87c: 0x1a8b, 0x87d: 0x1c83, 0x87e: 0x1c88, 0x87f: 0x1c8d,
	// Block 0x22, offset 0x880
	0x880: 0x1c92, 0x881: 0x1c97, 0x882: 0x1c9c, 0x883: 0x1ca1, 0x884: 0x1ca6, 0x885: 0x1cab,
	0x886: 0x1cb0, 0x887: 0x1cb5, 0x888: 0x187f, 0x889: 0x18a3, 0x88a: 0x18c7, 0x88b: 0x18eb,
	0x88c: 0x190f, 0x88d: 0x1918, 0x88e: 0x191e, 0x88f: 0x1924, 0x890: 0x192a, 0x891: 0x1b63,
	0x892: 0x1b67, 0x893: 0x1b6b, 0x894: 0x1b6f, 0x895: 0x1b73, 0x896: 0x1b77, 0x897: 0x1b7b,
	0x898: 0x1b7f, 0x899: 0x1b83, 0x89a: 0x1b87, 0x89b: 0x1b8b, 0x89c: 0x1af7, 0x89d: 0x1afb,
	0x89e: 0x1aff, 0x89f: 0x1b03, 0x8a0: 0x1b07, 0x8a1: 0x1b0b, 0x8a2: 0x1b0f, 0x8a3: 0x1b13,
	0x8a4: 0x1b17, 0x8a5: 0x1b1b, 0x8a6: 0x1b1f, 0x8a7: 0x1b23, 0x8a8: 0x1b27, 0x8a9: 0x1b2b,
	0x8aa: 0x1b2f, 0x8ab: 0x1b33, 0x8ac: 0x1b37, 0x8ad: 0x1b3b, 0x8ae: 0x1b3f, 0x8af: 0x1b43,
	0x8b0: 0x1b47, 0x8b1: 0x1b4b, 0x8b2: 0x1b4f, 0x8b3: 0x1b53, 0x8b4: 0x1b57, 0x8b5: 0x1b5b,
	0x8b6: 0x0043, 0x8b7: 0x0045, 0x8b8: 0x0047, 0x8b9: 0x0049, 0x8ba: 0x004b, 0x8bb: 0x004d,
	0x8bc: 0x004f, 0x8bd: 0x0051, 0x8be: 0x0053, 0x8bf: 0x0055,
	// Block 0x23, offset 0x8c0
	0x8c0: 0x06bf, 0x8c1: 0x06e3, 0x8c2: 0x06ef, 0x8c3: 0x06ff, 0x8c4: 0x0707, 0x8c5: 0x0713,
	0x8c6: 0x071b, 0x8c7: 0x0723, 0x8c8: 0x072f, 0x8c9: 0x0783, 0x8ca: 0x079b, 0x8cb: 0x07ab,
	0x8cc: 0x07bb, 0x8cd: 0x07cb, 0x8ce: 0x07db, 0x8cf: 0x07fb, 0x8d0: 0x07ff, 0x8d1: 0x0803,
	0x8d2: 0x0837, 0x8d3: 0x085f, 0x8d4: 0x086f, 0x8d5: 0x0877, 0x8d6: 0x087b, 0x8d7: 0x0887,
	0x8d8: 0x08a3, 0x8d9: 0x08a7, 0x8da: 0x08bf, 0x8db: 0x08c3, 0x8dc: 0x08cb, 0x8dd: 0x08db,
	0x8de: 0x0977, 0x8df: 0x098b, 0x8e0: 0x09cb, 0x8e1: 0x09df, 0x8e2: 0x09e7, 0x8e3: 0x09eb,
	0x8e4: 0x09fb, 0x8e5: 0x0a17, 0x8e6: 0x0a43, 0x8e7: 0x0a4f, 0x8e8: 0x0a6f, 0x8e9: 0x0a7b,
	0x8ea: 0x0a7f, 0x8eb: 0x0a83, 0x8ec: 0x0a9b, 0x8ed: 0x0a9f, 0x8ee: 0x0acb, 0x8ef: 0x0ad7,
	0x8f0: 0x0adf, 0x8f1: 0x0ae7, 0x8f2: 0x0af7, 0x8f3: 0x0aff, 0x8f4: 0x0b07, 0x8f5: 0x0b33,
	0x8f6: 0x0b37, 0x8f7: 0x0b3f, 0x8f8: 0x0b43, 0x8f9: 0x0b4b, 0x8fa: 0x0b53, 0x8fb: 0x0b63,
	0x8fc: 0x0b7f, 0x8fd: 0x0bf7, 0x8fe: 0x0c0b, 0x8ff: 0x0c0f,
	// Block 0x24, offset 0x900
	0x900: 0x0c8f, 0x901: 0x0c93, 0x902: 0x0ca7, 0x903: 0x0cab, 0x904: 0x0cb3, 0x905: 0x0cbb,
	0x906: 0x0cc3, 0x907: 0x0ccf, 0x908: 0x0cf7, 0x909: 0x0d07, 0x90a: 0x0d1b, 0x90b: 0x0d8b,
	0x90c: 0x0d97, 0x90d: 0x0da7, 0x90e: 0x0db3, 0x90f: 0x0dbf, 0x910: 0x0dc7, 0x911: 0x0dcb,
	0x912: 0x0dcf, 0x913: 0x0dd3, 0x914: 0x0dd7, 0x915: 0x0e8f, 0x916: 0x0ed7, 0x917: 0x0ee3,
	0x918: 0x0ee7, 0x919: 0x0eeb, 0x91a: 0x0eef, 0x91b: 0x0ef7, 0x91c: 0x0efb, 0x91d: 0x0f0f,
	0x91e: 0x0f2b, 0x91f: 0x0f33, 0x920: 0x0f73, 0x921: 0x0f77, 0x922: 0x0f7f, 0x923: 0x0f83,
	0x924: 0x0f8b, 0x925: 0x0f8f, 0x926: 0x0fb3, 0x927: 0x0fb7, 0x928: 0x0fd3, 0x929: 0x0fd7,
	0x92a: 0x0fdb, 0x92b: 0x0fdf, 0x92c: 0x0ff3, 0x92d: 0x1017, 0x92e: 0x101b, 0x92f: 0x101f,
	0x930: 0x1043, 0x931: 0x1083, 0x932: 0x1087, 0x933: 0x10a7, 0x934: 0x10b7, 0x935: 0x10bf,
	0x936: 0x10df, 0x937: 0x1103, 0x938: 0x1147, 0x939: 0x114f, 0x93a: 0x1163, 0x93b: 0x116f,
	0x93c: 0x1177, 0x93d: 0x117f, 0x93e: 0x1183, 0x93f: 0x1187,
	// Block 0x25, offset 0x940
	0x940: 0x119f, 0x941: 0x11a3, 0x942: 0x11bf, 0x943: 0x11c7, 0x944: 0x11cf, 0x945: 0x11d3,
	0x946: 0x11df, 0x947: 0x11e7, 0x948: 0x11eb, 0x949: 0x11ef, 0x94a: 0x11f7, 0x94b: 0x11fb,
	0x94c: 0x129b, 0x94d: 0x12af, 0x94e: 0x12e3, 0x94f: 0x12e7, 0x950: 0x12ef, 0x951: 0x131b,
	0x952: 0x1323, 0x953: 0x132b, 0x954: 0x1333, 0x955: 0x136f, 0x956: 0x1373, 0x957: 0x137b,
	0x958: 0x137f, 0x959: 0x1383, 0x95a: 0x13af, 0x95b: 0x13b3, 0x95c: 0x13bb, 0x95d: 0x13cf,
	0x95e: 0x13d3, 0x95f: 0x13ef, 0x960: 0x13f7, 0x961: 0x13fb, 0x962: 0x141f, 0x963: 0x143f,
	0x964: 0x1453, 0x965: 0x1457, 0x966: 0x145f, 0x967: 0x148b, 0x968: 0x148f, 0x969: 0x149f,
	0x96a: 0x14c3, 0x96b: 0x14cf, 0x96c: 0x14df, 0x96d: 0x14f7, 0x96e: 0x14ff, 0x96f: 0x1503,
	0x970: 0x1507, 0x971: 0x150b, 0x972: 0x1517, 0x973: 0x151b, 0x974: 0x1523, 0x975: 0x153f,
	0x976: 0x1543, 0x977: 0x1547, 0x978: 0x155f, 0x979: 0x1563, 0x97a: 0x156b, 0x97b: 0x157f,
	0x97c: 0x1583, 0x97d: 0x1587, 0x97e: 0x158f, 0x97f: 0x1593,
	// Block 0x26, offset 0x980
	0x986: 0xa000, 0x98b: 0xa000,
	0x98c: 0x3f0b, 0x98d: 0xa000, 0x98e: 0x3f13, 0x98f: 0xa000, 0x990: 0x3f1b, 0x991: 0xa000,
	0x992: 0x3f23, 0x993: 0xa000, 0x994: 0x3f2b, 0x995: 0xa000, 0x996: 0x3f33, 0x997: 0xa000,
	0x998: 0x3f3b, 0x999: 0xa000, 0x99a: 0x3f43, 0x99b: 0xa000, 0x99c: 0x3f4b, 0x99d: 0xa000,
	0x99e: 0x3f53, 0x99f: 0xa000, 0x9a0: 0x3f5b, 0x9a1: 0xa000, 0x9a2: 0x3f63,
	0x9a4: 0xa000, 0x9a5: 0x3f6b, 0x9a6: 0xa000, 0x9a7: 0x3f73, 0x9a8: 0xa000, 0x9a9: 0x3f7b,
	0x9af: 0xa000,
	0x9b0: 0x3f83, 0x9b1: 0x3f8b, 0x9b2: 0xa000, 0x9b3: 0x3f93, 0x9b4: 0x3f9b, 0x9b5: 0xa000,
	0x9b6: 0x3fa3, 0x9b7: 0x3fab, 0x9b8: 0xa000, 0x9b9: 0x3fb3, 0x9ba: 0x3fbb, 0x9bb: 0xa000,
	0x9bc: 0x3fc3, 0x9bd: 0x3fcb,
	// Block 0x27, offset 0x9c0
	0x9d4: 0x3f03,
	0x9d9: 0x9903, 0x9da: 0x9903, 0x9db: 0x42df, 0x9dc: 0x42e5, 0x9dd: 0xa000,
	0x9de: 0x3fd3, 0x9df: 0x26b7,
	0x9e6: 0xa000,
	0x9eb: 0xa000, 0x9ec: 0x3fe3, 0x9ed: 0xa000, 0x9ee: 0x3feb, 0x9ef: 0xa000,
	0x9f0: 0x3ff3, 0x9f1: 0xa000, 0x9f2: 0x3ffb, 0x9f3: 0xa000, 0x9f4: 0x4003, 0x9f5: 0xa000,
	0x9f6: 0x400b, 0x9f7: 0xa000, 0x9f8: 0x4013, 0x9f9: 0xa000, 0x9fa: 0x401b, 0x9fb: 0xa000,
	0x9fc: 0x4023, 0x9fd: 0xa000, 0x9fe: 0x402b, 0x9ff: 0xa000,
	// Block 0x28, offset 0xa00
	0xa00: 0x4033, 0xa01: 0xa000, 0xa02: 0x403b, 0xa04: 0xa000, 0xa05: 0x4043,
	0xa06: 0xa000, 0xa07: 0x404b, 0xa08: 0xa000, 0xa09: 0x4053,
	0xa0f: 0xa000, 0xa10: 0x405b, 0xa11: 0x4063,
	0xa12: 0xa000, 0xa13: 0x406b, 0xa14: 0x4073, 0xa15: 0xa000, 0xa16: 0x407b, 0xa17: 0x4083,
	0xa18: 0xa000, 0xa19: 0x408b, 0xa1a: 0x4093, 0xa1b: 0xa000, 0xa1c: 0x409b, 0xa1d: 0x40a3,
	0xa2f: 0xa000,
	0xa30: 0xa000, 0xa31: 0xa000, 0xa32: 0xa000, 0xa34: 0x3fdb,
	0xa37: 0x40ab, 0xa38: 0x40b3, 0xa39: 0x40bb, 0xa3a: 0x40c3,
	0xa3d: 0xa000, 0xa3e: 0x40cb, 0xa3f: 0x26cc,
	// Block 0x29, offset 0xa40
	0xa40: 0x0367, 0xa41: 0x032b, 0xa42: 0x032f, 0xa43: 0x0333, 0xa44: 0x037b, 0xa45: 0x0337,
	0xa46: 0x033b, 0xa47: 0x033f, 0xa48: 0x0343, 0xa49: 0x0347, 0xa4a: 0x034b, 0xa4b: 0x034f,
	0xa4c: 0x0353, 0xa4d: 0x0357, 0xa4e: 0x035b, 0xa4f: 0x49c0, 0xa50: 0x49c6, 0xa51: 0x49cc,
	0xa52: 0x49d2, 0xa53: 0x49d8, 0xa54: 0x49de, 0xa55: 0x49e4, 0xa56: 0x49ea, 0xa57: 0x49f0,
	0xa58: 0x49f6, 0xa59: 0x49fc, 0xa5a: 0x4a02, 0xa5b: 0x4a08, 0xa5c: 0x4a0e, 0xa5d: 0x4a14,
	0xa5e: 0x4a1a, 0xa5f: 0x4a20, 0xa60: 0x4a26, 0xa61: 0x4a2c, 0xa62: 0x4a32, 0xa63: 0x4a38,
	0xa64: 0x03c3, 0xa65: 0x035f, 0xa66: 0x0363, 0xa67: 0x03e7, 0xa68: 0x03eb, 0xa69: 0x03ef,
	0xa6a: 0x03f3, 0xa6b: 0x03f7, 0xa6c: 0x03fb, 0xa6d: 0x03ff, 0xa6e: 0x036b, 0xa6f: 0x0403,
	0xa70: 0x0407, 0xa71: 0x036f, 0xa72: 0x0373, 0xa73: 0x0377, 0xa74: 0x037f, 0xa75: 0x0383,
	0xa76: 0x0387, 0xa77: 0x038b, 0xa78: 0x038f, 0xa79: 0x0393, 0xa7a: 0x0397, 0xa7b: 0x039b,
	0xa7c: 0x039f, 0xa7d: 0x03a3, 0xa7e: 0x03a7, 0xa7f: 0x03ab,
	// Block 0x2a, offset 0xa80
	0xa80: 0x03af, 0xa81: 0x03b3, 0xa82: 0x040b, 0xa83: 0x040f, 0xa84: 0x03b7, 0xa85: 0x03bb,
	0xa86: 0x03bf, 0xa87: 0x03c7, 0xa88: 0x03cb, 0xa89: 0x03cf, 0xa8a: 0x03d3, 0xa8b: 0x03d7,
	0xa8c: 0x03db, 0xa8d: 0x03df, 0xa8e: 0x03e3,
	0xa92: 0x06bf, 0xa93: 0x071b, 0xa94: 0x06cb, 0xa95: 0x097b, 0xa96: 0x06cf, 0xa97: 0x06e7,
	0xa98: 0x06d3, 0xa99: 0x0f93, 0xa9a: 0x0707, 0xa9b: 0x06db, 0xa9c: 0x06c3, 0xa9d: 0x09ff,
	0xa9e: 0x098f, 0xa9f: 0x072f,
	// Block 0x2b, offset 0xac0
	0xac0: 0x2057, 0xac1: 0x205d, 0xac2: 0x2063, 0xac3: 0x2069, 0xac4: 0x206f, 0xac5: 0x2075,
	0xac6: 0x207b, 0xac7: 0x2081, 0xac8: 0x2087, 0xac9: 0x208d, 0xaca: 0x2093, 0xacb: 0x2099,
	0xacc: 0x209f, 0xacd: 0x20a5, 0xace: 0x2729, 0xacf: 0x2732, 0xad0: 0x273b, 0xad1: 0x2744,
	0xad2: 0x274d, 0xad3: 0x2756, 0xad4: 0x275f, 0xad5: 0x2768, 0xad6: 0x2771, 0xad7: 0x2783,
	0xad8: 0x278c, 0xad9: 0x2795, 0xada: 0x279e, 0xadb: 0x27a7, 0xadc: 0x277a, 0xadd: 0x2baf,
	0xade: 0x2af0, 0xae0: 0x20ab, 0xae1: 0x20c3, 0xae2: 0x20b7, 0xae3: 0x210b,
	0xae4: 0x20c9, 0xae5: 0x20e7, 0xae6: 0x20b1, 0xae7: 0x20e1, 0xae8: 0x20bd, 0xae9: 0x20f3,
	0xaea: 0x2123, 0xaeb: 0x2141, 0xaec: 0x213b, 0xaed: 0x212f, 0xaee: 0x217d, 0xaef: 0x2111,
	0xaf0: 0x211d, 0xaf1: 0x2135, 0xaf2: 0x2129, 0xaf3: 0x2153, 0xaf4: 0x20ff, 0xaf5: 0x2147,
	0xaf6: 0x2171, 0xaf7: 0x2159, 0xaf8: 0x20ed, 0xaf9: 0x20cf, 0xafa: 0x2105, 0xafb: 0x2117,
	0xafc: 0x214d, 0xafd: 0x20d5, 0xafe: 0x2177, 0xaff: 0x20f9,
	// Block 0x2c, offset 0xb00
	0xb00: 0x215f, 0xb01: 0x20db, 0xb02: 0x2165, 0xb03: 0x216b, 0xb04: 0x092f, 0xb05: 0x0b03,
	0xb06: 0x0ca7, 0xb07: 0x10c7,
	0xb10: 0x1bc7, 0xb11: 0x18a9,
	0xb12: 0x18ac, 0xb13: 0x18af, 0xb14: 0x18b2, 0xb15: 0x18b5, 0xb16: 0x18b8, 0xb17: 0x18bb,
	0xb18: 0x18be, 0xb19: 0x18c1, 0xb1a: 0x18ca, 0xb1b: 0x18cd, 0xb1c: 0x18d0, 0xb1d: 0x18d3,
	0xb1e: 0x18d6, 0xb1f: 0x18d9, 0xb20: 0x0313, 0xb21: 0x031b, 0xb22: 0x031f, 0xb23: 0x0327,
	0xb24: 0x032b, 0xb25: 0x032f, 0xb26: 0x0337, 0xb27: 0x033f, 0xb28: 0x0343, 0xb29: 0x034b,
	0xb2a: 0x034f, 0xb2b: 0x0353, 0xb2c: 0x0357, 0xb2d: 0x035b, 0xb2e: 0x2e1b, 0xb2f: 0x2e23,
	0xb30: 0x2e2b, 0xb31: 0x2e33, 0xb32: 0x2e3b, 0xb33: 0x2e43, 0xb34: 0x2e4b, 0xb35: 0x2e53,
	0xb36: 0x2e63, 0xb37: 0x2e6b, 0xb38: 0x2e73, 0xb39: 0x2e7b, 0xb3a: 0x2e83, 0xb3b: 0x2e8b,
	0xb3c: 0x2ed6, 0xb3d: 0x2e9e, 0xb3e: 0x2e5b,
	// Block 0x2d, offset 0xb40
	0xb40: 0x06bf, 0xb41: 0x071b, 0xb42: 0x06cb, 0xb43: 0x097b, 0xb44: 0x071f, 0xb45: 0x07af,
	0xb46: 0x06c7, 0xb47: 0x07ab, 0xb48: 0x070b, 0xb49: 0x0887, 0xb4a: 0x0d07, 0xb4b: 0x0e8f,
	0xb4c: 0x0dd7, 0xb4d: 0x0d1b, 0xb4e: 0x145f, 0xb4f: 0x098b, 0xb50: 0x0ccf, 0xb51: 0x0d4b,
	0xb52: 0x0d0b, 0xb53: 0x104b, 0xb54: 0x08fb, 0xb55: 0x0f03, 0xb56: 0x1387, 0xb57: 0x105f,
	0xb58: 0x0843, 0xb59: 0x108f, 0xb5a: 0x0f9b, 0xb5b: 0x0a17, 0xb5c: 0x140f, 0xb5d: 0x077f,
	0xb5e: 0x08ab, 0xb5f: 0x0df7, 0xb60: 0x1527, 0xb61: 0x0743, 0xb62: 0x07d3, 0xb63: 0x0d9b,
	0xb64: 0x06cf, 0xb65: 0x06e7, 0xb66: 0x06d3, 0xb67: 0x0adb, 0xb68: 0x08ef, 0xb69: 0x087f,
	0xb6a: 0x0a57, 0xb6b: 0x0a4b, 0xb6c: 0x0feb, 0xb6d: 0x073f, 0xb6e: 0x139b, 0xb6f: 0x089b,
	0xb70: 0x09f3, 0xb71: 0x18dc, 0xb72: 0x18df, 0xb73: 0x18e2, 0xb74: 0x18e5, 0xb75: 0x18ee,
	0xb76: 0x18f1, 0xb77: 0x18f4, 0xb78: 0x18f7, 0xb79: 0x18fa, 0xb7a: 0x18fd, 0xb7b: 0x1900,
	0xb7c: 0x1903, 0xb7d: 0x1906, 0xb7e: 0x1909, 0xb7f: 0x1912,
	// Block 0x2e, offset 0xb80
	0xb80: 0x1cc9, 0xb81: 0x1cd8, 0xb82: 0x1ce7, 0xb83: 0x1cf6, 0xb84: 0x1d05, 0xb85: 0x1d14,
	0xb86: 0x1d23, 0xb87: 0x1d32, 0xb88: 0x1d41, 0xb89: 0x218f, 0xb8a: 0x21a1, 0xb8b: 0x21b3,
	0xb8c: 0x1954, 0xb8d: 0x1c07, 0xb8e: 0x19d5, 0xb8f: 0x1bab, 0xb90: 0x04cb, 0xb91: 0x04d3,
	0xb92: 0x04db, 0xb93: 0x04e3, 0xb94: 0x04eb, 0xb95: 0x04ef, 0xb96: 0x04f3, 0xb97: 0x04f7,
	0xb98: 0x04fb, 0xb99: 0x04ff, 0xb9a: 0x0503, 0xb9b: 0x0507, 0xb9c: 0x050b, 0xb9d: 0x050f,
	0xb9e: 0x0513, 0xb9f: 0x0517, 0xba0: 0x051b, 0xba1: 0x0523, 0xba2: 0x0527, 0xba3: 0x052b,
	0xba4: 0x052f, 0xba5: 0x0533, 0xba6: 0x0537, 0xba7: 0x053b, 0xba8: 0x053f, 0xba9: 0x0543,
	0xbaa: 0x0547, 0xbab: 0x054b, 0xbac: 0x054f, 0xbad: 0x0553, 0xbae: 0x0557, 0xbaf: 0x055b,
	0xbb0: 0x055f, 0xbb1: 0x0563, 0xbb2: 0x0567, 0xbb3: 0x056f, 0xbb4: 0x0577, 0xbb5: 0x057f,
	0xbb6: 0x0583, 0xbb7: 0x0587, 0xbb8: 0x058b, 0xbb9: 0x058f, 0xbba: 0x0593, 0xbbb: 0x0597,
	0xbbc: 0x059b, 0xbbd: 0x059f, 0xbbe: 0x05a3,
	// Block 0x2f, offset 0xbc0
	0xbc0: 0x2b0f, 0xbc1: 0x29ab, 0xbc2: 0x2b1f, 0xbc3: 0x2883, 0xbc4: 0x2ee7, 0xbc5: 0x288d,
	0xbc6: 0x2897, 0xbc7: 0x2f2b, 0xbc8: 0x29b8, 0xbc9: 0x28a1, 0xbca: 0x28ab, 0xbcb: 0x28b5,
	0xbcc: 0x29df, 0xbcd: 0x29ec, 0xbce: 0x29c5, 0xbcf: 0x29d2, 0xbd0: 0x2eac, 0xbd1: 0x29f9,
	0xbd2: 0x2a06, 0xbd3: 0x2bc1, 0xbd4: 0x26be, 0xbd5: 0x2bd4, 0xbd6: 0x2be7, 0xbd7: 0x2b2f,
	0xbd8: 0x2a13, 0xbd9: 0x2bfa, 0xbda: 0x2c0d, 0xbdb: 0x2a20, 0xbdc: 0x28bf, 0xbdd: 0x28c9,
	0xbde: 0x2eba, 0xbdf: 0x2a2d, 0xbe0: 0x2b3f, 0xbe1: 0x2ef8, 0xbe2: 0x28d3, 0xbe3: 0x28dd,
	0xbe4: 0x2a3a, 0xbe5: 0x28e7, 0xbe6: 0x28f1, 0xbe7: 0x26d3, 0xbe8: 0x26da, 0xbe9: 0x28fb,
	0xbea: 0x2905, 0xbeb: 0x2c20, 0xbec: 0x2a47, 0xbed: 0x2b4f, 0xbee: 0x2c33, 0xbef: 0x2a54,
	0xbf0: 0x2919, 0xbf1: 0x290f, 0xbf2: 0x2f3f, 0xbf3: 0x2a61, 0xbf4: 0x2c46, 0xbf5: 0x2923,
	0xbf6: 0x2b5f, 0xbf7: 0x292d, 0xbf8: 0x2a7b, 0xbf9: 0x2937, 0xbfa: 0x2a88, 0xbfb: 0x2f09,
	0xbfc: 0x2a6e, 0xbfd: 0x2b6f, 0xbfe: 0x2a95, 0xbff: 0x26e1,
	// Block 0x30, offset 0xc00
	0xc00: 0x2f1a, 0xc01: 0x2941, 0xc02: 0x294b, 0xc03: 0x2aa2, 0xc04: 0x2955, 0xc05: 0x295f,
	0xc06: 0x2969, 0xc07: 0x2b7f, 0xc08: 0x2aaf, 0xc09: 0x26e8, 0xc0a: 0x2c59, 0xc0b: 0x2e93,
	0xc0c: 0x2b8f, 0xc0d: 0x2abc, 0xc0e: 0x2ec8, 0xc0f: 0x2973, 0xc10: 0x297d, 0xc11: 0x2ac9,
	0xc12: 0x26ef, 0xc13: 0x2ad6, 0xc14: 0x2b9f, 0xc15: 0x26f6, 0xc16: 0x2c6c, 0xc17: 0x2987,
	0xc18: 0x1cba, 0xc19: 0x1cce, 0xc1a: 0x1cdd, 0xc1b: 0x1cec, 0xc1c: 0x1cfb, 0xc1d: 0x1d0a,
	0xc1e: 0x1d19, 0xc1f: 0x1d28, 0xc20: 0x1d37, 0xc21: 0x1d46, 0xc22: 0x2195, 0xc23: 0x21a7,
	0xc24: 0x21b9, 0xc25: 0x21c5, 0xc26: 0x21d1, 0xc27: 0x21dd, 0xc28: 0x21e9, 0xc29: 0x21f5,
	0xc2a: 0x2201, 0xc2b: 0x220d, 0xc2c: 0x2249, 0xc2d: 0x2255, 0xc2e: 0x2261, 0xc2f: 0x226d,
	0xc30: 0x2279, 0xc31: 0x1c17, 0xc32: 0x19c9, 0xc33: 0x1936, 0xc34: 0x1be7, 0xc35: 0x1a4a,
	0xc36: 0x1a59, 0xc37: 0x19cf, 0xc38: 0x1bff, 0xc39: 0x1c03, 0xc3a: 0x1960, 0xc3b: 0x2704,
	0xc3c: 0x2712, 0xc3d: 0x26fd, 0xc3e: 0x270b, 0xc3f: 0x2ae3,
	// Block 0x31, offset 0xc40
	0xc40: 0x1a4d, 0xc41: 0x1a35, 0xc42: 0x1c63, 0xc43: 0x1a1d, 0xc44: 0x19f6, 0xc45: 0x1969,
	0xc46: 0x1978, 0xc47: 0x1948, 0xc48: 0x1bf3, 0xc49: 0x1d55, 0xc4a: 0x1a50, 0xc4b: 0x1a38,
	0xc4c: 0x1c67, 0xc4d: 0x1c73, 0xc4e: 0x1a29, 0xc4f: 0x19ff, 0xc50: 0x1957, 0xc51: 0x1c1f,
	0xc52: 0x1bb3, 0xc53: 0x1b9f, 0xc54: 0x1bcf, 0xc55: 0x1c77, 0xc56: 0x1a2c, 0xc57: 0x19cc,
	0xc58: 0x1a02, 0xc59: 0x19e1, 0xc5a: 0x1a44, 0xc5b: 0x1c7b, 0xc5c: 0x1a2f, 0xc5d: 0x19c3,
	0xc5e: 0x1a05, 0xc5f: 0x1c3f, 0xc60: 0x1bf7, 0xc61: 0x1a17, 0xc62: 0x1c27, 0xc63: 0x1c43,
	0xc64: 0x1bfb, 0xc65: 0x1a1a, 0xc66: 0x1c2b, 0xc67: 0x22eb, 0xc68: 0x22ff, 0xc69: 0x1999,
	0xc6a: 0x1c23, 0xc6b: 0x1bb7, 0xc6c: 0x1ba3, 0xc6d: 0x1c4b, 0xc6e: 0x2719, 0xc6f: 0x27b0,
	0xc70: 0x1a5c, 0xc71: 0x1a47, 0xc72: 0x1c7f, 0xc73: 0x1a32, 0xc74: 0x1a53, 0xc75: 0x1a3b,
	0xc76: 0x1c6b, 0xc77: 0x1a20, 0xc78: 0x19f9, 0xc79: 0x1984, 0xc7a: 0x1a56, 0xc7b: 0x1a3e,
	0xc7c: 0x1c6f, 0xc7d: 0x1a23, 0xc7e: 0x19fc, 0xc7f: 0x1987,
	// Block 0x32, offset 0xc80
	0xc80: 0x1c2f, 0xc81: 0x1bbb, 0xc82: 0x1d50, 0xc83: 0x1939, 0xc84: 0x19bd, 0xc85: 0x19c0,
	0xc86: 0x22f8, 0xc87: 0x1b97, 0xc88: 0x19c6, 0xc89: 0x194b, 0xc8a: 0x19e4, 0xc8b: 0x194e,
	0xc8c: 0x19ed, 0xc8d: 0x196c, 0xc8e: 0x196f, 0xc8f: 0x1a08, 0xc90: 0x1a0e, 0xc91: 0x1a11,
	0xc92: 0x1c33, 0xc93: 0x1a14, 0xc94: 0x1a26, 0xc95: 0x1c3b, 0xc96: 0x1c47, 0xc97: 0x1993,
	0xc98: 0x1d5a, 0xc99: 0x1bbf, 0xc9a: 0x1996, 0xc9b: 0x1a5f, 0xc9c: 0x19a8, 0xc9d: 0x19b7,
	0xc9e: 0x22e5, 0xc9f: 0x22df, 0xca0: 0x1cc4, 0xca1: 0x1cd3, 0xca2: 0x1ce2, 0xca3: 0x1cf1,
	0xca4: 0x1d00, 0xca5: 0x1d0f, 0xca6: 0x1d1e, 0xca7: 0x1d2d, 0xca8: 0x1d3c, 0xca9: 0x2189,
	0xcaa: 0x219b, 0xcab: 0x21ad, 0xcac: 0x21bf, 0xcad: 0x21cb, 0xcae: 0x21d7, 0xcaf: 0x21e3,
	0xcb0: 0x21ef, 0xcb1: 0x21fb, 0xcb2: 0x2207, 0xcb3: 0x2243, 0xcb4: 0x224f, 0xcb5: 0x225b,
	0xcb6: 0x2267, 0xcb7: 0x2273, 0xcb8: 0x227f, 0xcb9: 0x2285, 0xcba: 0x228b, 0xcbb: 0x2291,
	0xcbc: 0x2297, 0xcbd: 0x22a9, 0xcbe: 0x22af, 0xcbf: 0x1c13,
	// Block 0x33, offset 0xcc0
	0xcc0: 0x1377, 0xcc1: 0x0cfb, 0xcc2: 0x13d3, 0xcc3: 0x139f, 0xcc4: 0x0e57, 0xcc5: 0x06eb,
	0xcc6: 0x08df, 0xcc7: 0x162b, 0xcc8: 0x162b, 0xcc9: 0x0a0b, 0xcca: 0x145f, 0xccb: 0x0943,
	0xccc: 0x0a07, 0xccd: 0x0bef, 0xcce: 0x0fcf, 0xccf: 0x115f, 0xcd0: 0x1297, 0xcd1: 0x12d3,
	0xcd2: 0x1307, 0xcd3: 0x141b, 0xcd4: 0x0d73, 0xcd5: 0x0dff, 0xcd6: 0x0eab, 0xcd7: 0x0f43,
	0xcd8: 0x125f, 0xcd9: 0x1447, 0xcda: 0x1573, 0xcdb: 0x070f, 0xcdc: 0x08b3, 0xcdd: 0x0d87,
	0xcde: 0x0ecf, 0xcdf: 0x1293, 0xce0: 0x15c3, 0xce1: 0x0ab3, 0xce2: 0x0e77, 0xce3: 0x1283,
	0xce4: 0x1317, 0xce5: 0x0c23, 0xce6: 0x11bb, 0xce7: 0x12df, 0xce8: 0x0b1f, 0xce9: 0x0d0f,
	0xcea: 0x0e17, 0xceb: 0x0f1b, 0xcec: 0x1427, 0xced: 0x074f, 0xcee: 0x07e7, 0xcef: 0x0853,
	0xcf0: 0x0c8b, 0xcf1: 0x0d7f, 0xcf2: 0x0ecb, 0xcf3: 0x0fef, 0xcf4: 0x1177, 0xcf5: 0x128b,
	0xcf6: 0x12a3, 0xcf7: 0x13c7, 0xcf8: 0x14ef, 0xcf9: 0x15a3, 0xcfa: 0x15bf, 0xcfb: 0x102b,
	0xcfc: 0x106b, 0xcfd: 0x1123, 0xcfe: 0x1243, 0xcff: 0x147b,
	// Block 0x34, offset 0xd00
	0xd00: 0x15cb, 0xd01: 0x134b, 0xd02: 0x09c7, 0xd03: 0x0b3b, 0xd04: 0x10db, 0xd05: 0x119b,
	0xd06: 0x0eff, 0xd07: 0x1033, 0xd08: 0x1397, 0xd09: 0x14e7, 0xd0a: 0x09c3, 0xd0b: 0x0a8f,
	0xd0c: 0x0d77, 0xd0d: 0x0e2b, 0xd0e: 0x0e5f, 0xd0f: 0x1113, 0xd10: 0x113b, 0xd11: 0x14a7,
	0xd12: 0x084f, 0xd13: 0x11a7, 0xd14: 0x07f3, 0xd15: 0x07ef, 0xd16: 0x1097, 0xd17: 0x1127,
	0xd18: 0x125b, 0xd19: 0x14af, 0xd1a: 0x1367, 0xd1b: 0x0c27, 0xd1c: 0x0d73, 0xd1d: 0x1357,
	0xd1e: 0x06f7, 0xd1f: 0x0a63, 0xd20: 0x0b93, 0xd21: 0x0f2f, 0xd22: 0x0faf, 0xd23: 0x0873,
	0xd24: 0x103b, 0xd25: 0x075f, 0xd26: 0x0b77, 0xd27: 0x06d7, 0xd28: 0x0deb, 0xd29: 0x0ca3,
	0xd2a: 0x110f, 0xd2b: 0x08c7, 0xd2c: 0x09b3, 0xd2d: 0x0ffb, 0xd2e: 0x1263, 0xd2f: 0x133b,
	0xd30: 0x0db7, 0xd31: 0x13f7, 0xd32: 0x0de3, 0xd33: 0x0c37, 0xd34: 0x121b, 0xd35: 0x0c57,
	0xd36: 0x0fab, 0xd37: 0x072b, 0xd38: 0x07a7, 0xd39: 0x07eb, 0xd3a: 0x0d53, 0xd3b: 0x10fb,
	0xd3c: 0x11f3, 0xd3d: 0x1347, 0xd3e: 0x145b, 0xd3f: 0x085b,
	// Block 0x35, offset 0xd40
	0xd40: 0x090f, 0xd41: 0x0a17, 0xd42: 0x0b2f, 0xd43: 0x0cbf, 0xd44: 0x0e7b, 0xd45: 0x103f,
	0xd46: 0x1497, 0xd47: 0x157b, 0xd48: 0x15cf, 0xd49: 0x15e7, 0xd4a: 0x0837, 0xd4b: 0x0cf3,
	0xd4c: 0x0da3, 0xd4d: 0x13eb, 0xd4e: 0x0afb, 0xd4f: 0x0bd7, 0xd50: 0x0bf3, 0xd51: 0x0c83,
	0xd52: 0x0e6b, 0xd53: 0x0eb7, 0xd54: 0x0f67, 0xd55: 0x108b, 0xd56: 0x112f, 0xd57: 0x1193,
	0xd58: 0x13db, 0xd59: 0x126b, 0xd5a: 0x1403, 0xd5b: 0x147f, 0xd5c: 0x080f, 0xd5d: 0x083b,
	0xd5e: 0x0923, 0xd5f: 0x0ea7, 0xd60: 0x12f3, 0xd61: 0x133b, 0xd62: 0x0b1b, 0xd63: 0x0b8b,
	0xd64: 0x0c4f, 0xd65: 0x0daf, 0xd66: 0x10d7, 0xd67: 0x0f23, 0xd68: 0x073b, 0xd69: 0x097f,
	0xd6a: 0x0a63, 0xd6b: 0x0ac7, 0xd6c: 0x0b97, 0xd6d: 0x0f3f, 0xd6e: 0x0f5b, 0xd6f: 0x116b,
	0xd70: 0x118b, 0xd71: 0x1463, 0xd72: 0x14e3, 0xd73: 0x14f3, 0xd74: 0x152f, 0xd75: 0x0753,
	0xd76: 0x107f, 0xd77: 0x144f, 0xd78: 0x14cb, 0xd79: 0x0baf, 0xd7a: 0x0717, 0xd7b: 0x0777,
	0xd7c: 0x0a67, 0xd7d: 0x0a87, 0xd7e: 0x0caf, 0xd7f: 0x0d73,
	// Block 0x36, offset 0xd80
	0xd80: 0x0ec3, 0xd81: 0x0fcb, 0xd82: 0x1277, 0xd83: 0x1417, 0xd84: 0x1623, 0xd85: 0x0ce3,
	0xd86: 0x14a3, 0xd87: 0x0833, 0xd88: 0x0d2f, 0xd89: 0x0d3b, 0xd8a: 0x0e0f, 0xd8b: 0x0e47,
	0xd8c: 0x0f4b, 0xd8d: 0x0fa7, 0xd8e: 0x1027, 0xd8f: 0x110b, 0xd90: 0x153b, 0xd91: 0x07af,
	0xd92: 0x0c03, 0xd93: 0x14b3, 0xd94: 0x0767, 0xd95: 0x0aab, 0xd96: 0x0e2f, 0xd97: 0x13df,
	0xd98: 0x0b67, 0xd99: 0x0bb7, 0xd9a: 0x0d43, 0xd9b: 0x0f2f, 0xd9c: 0x14bb, 0xd9d: 0x0817,
	0xd9e: 0x08ff, 0xd9f: 0x0a97, 0xda0: 0x0cd3, 0xda1: 0x0d1f, 0xda2: 0x0d5f, 0xda3: 0x0df3,
	0xda4: 0x0f47, 0xda5: 0x0fbb, 0xda6: 0x1157, 0xda7: 0x12f7, 0xda8: 0x1303, 0xda9: 0x1457,
	0xdaa: 0x14d7, 0xdab: 0x0883, 0xdac: 0x0e4b, 0xdad: 0x0903, 0xdae: 0x0ec7, 0xdaf: 0x0f6b,
	0xdb0: 0x1287, 0xdb1: 0x14bf, 0xdb2: 0x15ab, 0xdb3: 0x15d3, 0xdb4: 0x0d37, 0xdb5: 0x0e27,
	0xdb6: 0x11c3, 0xdb7: 0x10b7, 0xdb8: 0x10c3, 0xdb9: 0x10e7, 0xdba: 0x0f17, 0xdbb: 0x0e9f,
	0xdbc: 0x1363, 0xdbd: 0x0733, 0xdbe: 0x122b, 0xdbf: 0x081b,
	// Block 0x37, offset 0xdc0
	0xdc0: 0x080b, 0xdc1: 0x0b0b, 0xdc2: 0x0c2b, 0xdc3: 0x10f3, 0xdc4: 0x0a53, 0xdc5: 0x0e03,
	0xdc6: 0x0cef, 0xdc7: 0x13e7, 0xdc8: 0x12e7, 0xdc9: 0x14ab, 0xdca: 0x1323, 0xdcb: 0x0b27,
	0xdcc: 0x0787, 0xdcd: 0x095b, 0xdd0: 0x09af,
	0xdd2: 0x0cdf, 0xdd5: 0x07f7, 0xdd6: 0x0f1f, 0xdd7: 0x0fe3,
	0xdd8: 0x1047, 0xdd9: 0x1063, 0xdda: 0x1067, 0xddb: 0x107b, 0xddc: 0x14fb, 0xddd: 0x10eb,
	0xdde: 0x116f, 0xde0: 0x128f, 0xde2: 0x1353,
	0xde5: 0x1407, 0xde6: 0x1433,
	0xdea: 0x154f, 0xdeb: 0x1553, 0xdec: 0x1557, 0xded: 0x15bb, 0xdee: 0x142b, 0xdef: 0x14c7,
	0xdf0: 0x0757, 0xdf1: 0x077b, 0xdf2: 0x078f, 0xdf3: 0x084b, 0xdf4: 0x0857, 0xdf5: 0x0897,
	0xdf6: 0x094b, 0xdf7: 0x0967, 0xdf8: 0x096f, 0xdf9: 0x09ab, 0xdfa: 0x09b7, 0xdfb: 0x0a93,
	0xdfc: 0x0a9b, 0xdfd: 0x0ba3, 0xdfe: 0x0bcb, 0xdff: 0x0bd3,
	// Block 0x38, offset 0xe00
	0xe00: 0x0beb, 0xe01: 0x0c97, 0xe02: 0x0cc7, 0xe03: 0x0ce7, 0xe04: 0x0d57, 0xe05: 0x0e1b,
	0xe06: 0x0e37, 0xe07: 0x0e67, 0xe08: 0x0ebb, 0xe09: 0x0edb, 0xe0a: 0x0f4f, 0xe0b: 0x102f,
	0xe0c: 0x104b, 0xe0d: 0x1053, 0xe0e: 0x104f, 0xe0f: 0x1057, 0xe10: 0x105b, 0xe11: 0x105f,
	0xe12: 0x1073, 0xe13: 0x1077, 0xe14: 0x109b, 0xe15: 0x10af, 0xe16: 0x10cb, 0xe17: 0x112f,
	0xe18: 0x1137, 0xe19: 0x113f, 0xe1a: 0x1153, 0xe1b: 0x117b, 0xe1c: 0x11cb, 0xe1d: 0x11ff,
	0xe1e: 0x11ff, 0xe1f: 0x1267, 0xe20: 0x130f, 0xe21: 0x1327, 0xe22: 0x135b, 0xe23: 0x135f,
	0xe24: 0x13a3, 0xe25: 0x13a7, 0xe26: 0x13ff, 0xe27: 0x1407, 0xe28: 0x14db, 0xe29: 0x151f,
	0xe2a: 0x1537, 0xe2b: 0x0b9b, 0xe2c: 0x171e, 0xe2d: 0x11e3,
	0xe30: 0x06df, 0xe31: 0x07e3, 0xe32: 0x07a3, 0xe33: 0x074b, 0xe34: 0x078b, 0xe35: 0x07b7,
	0xe36: 0x0847, 0xe37: 0x0863, 0xe38: 0x094b, 0xe39: 0x0937, 0xe3a: 0x0947, 0xe3b: 0x0963,
	0xe3c: 0x09af, 0xe3d: 0x09bf, 0xe3e: 0x0a03, 0xe3f: 0x0a0f,
	// Block 0x39, offset 0xe40
	0xe40: 0x0a2b, 0xe41: 0x0a3b, 0xe42: 0x0b23, 0xe43: 0x0b2b, 0xe44: 0x0b5b, 0xe45: 0x0b7b,
	0xe46: 0x0bab, 0xe47: 0x0bc3, 0xe48: 0x0bb3, 0xe49: 0x0bd3, 0xe4a: 0x0bc7, 0xe4b: 0x0beb,
	0xe4c: 0x0c07, 0xe4d: 0x0c5f, 0xe4e: 0x0c6b, 0xe4f: 0x0c73, 0xe50: 0x0c9b, 0xe51: 0x0cdf,
	0xe52: 0x0d0f, 0xe53: 0x0d13, 0xe54: 0x0d27, 0xe55: 0x0da7, 0xe56: 0x0db7, 0xe57: 0x0e0f,
	0xe58: 0x0e5b, 0xe59: 0x0e53, 0xe5a: 0x0e67, 0xe5b: 0x0e83, 0xe5c: 0x0ebb, 0xe5d: 0x1013,
	0xe5e: 0x0edf, 0xe5f: 0x0f13, 0xe60: 0x0f1f, 0xe61: 0x0f5f, 0xe62: 0x0f7b, 0xe63: 0x0f9f,
	0xe64: 0x0fc3, 0xe65: 0x0fc7, 0xe66: 0x0fe3, 0xe67: 0x0fe7, 0xe68: 0x0ff7, 0xe69: 0x100b,
	0xe6a: 0x1007, 0xe6b: 0x1037, 0xe6c: 0x10b3, 0xe6d: 0x10cb, 0xe6e: 0x10e3, 0xe6f: 0x111b,
	0xe70: 0x112f, 0xe71: 0x114b, 0xe72: 0x117b, 0xe73: 0x122f, 0xe74: 0x1257, 0xe75: 0x12cb,
	0xe76: 0x1313, 0xe77: 0x131f, 0xe78: 0x1327, 0xe79: 0x133f, 0xe7a: 0x1353, 0xe7b: 0x1343,
	0xe7c: 0x135b, 0xe7d: 0x1357, 0xe7e: 0x134f, 0xe7f: 0x135f,
	// Block 0x3a, offset 0xe80
	0xe80: 0x136b, 0xe81: 0x13a7, 0xe82: 0x13e3, 0xe83: 0x1413, 0xe84: 0x144b, 0xe85: 0x146b,
	0xe86: 0x14b7, 0xe87: 0x14db, 0xe88: 0x14fb, 0xe89: 0x150f, 0xe8a: 0x151f, 0xe8b: 0x152b,
	0xe8c: 0x1537, 0xe8d: 0x158b, 0xe8e: 0x162b, 0xe8f: 0x16b5, 0xe90: 0x16b0, 0xe91: 0x16e2,
	0xe92: 0x0607, 0xe93: 0x062f, 0xe94: 0x0633, 0xe95: 0x1764, 0xe96: 0x1791, 0xe97: 0x1809,
	0xe98: 0x1617, 0xe99: 0x1627,
	// Block 0x3b, offset 0xec0
	0xec0: 0x19d8, 0xec1: 0x19db, 0xec2: 0x19de, 0xec3: 0x1c0b, 0xec4: 0x1c0f, 0xec5: 0x1a62,
	0xec6: 0x1a62,
	0xed3: 0x1d78, 0xed4: 0x1d69, 0xed5: 0x1d6e, 0xed6: 0x1d7d, 0xed7: 0x1d73,
	0xedd: 0x4393,
	0xede: 0x8115, 0xedf: 0x4405, 0xee0: 0x022d, 0xee1: 0x0215, 0xee2: 0x021e, 0xee3: 0x0221,
	0xee4: 0x0224, 0xee5: 0x0227, 0xee6: 0x022a, 0xee7: 0x0230, 0xee8: 0x0233, 0xee9: 0x0017,
	0xeea: 0x43f3, 0xeeb: 0x43f9, 0xeec: 0x44f7, 0xeed: 0x44ff, 0xeee: 0x434b, 0xeef: 0x4351,
	0xef0: 0x4357, 0xef1: 0x435d, 0xef2: 0x4369, 0xef3: 0x436f, 0xef4: 0x4375, 0xef5: 0x4381,
	0xef6: 0x4387, 0xef8: 0x438d, 0xef9: 0x4399, 0xefa: 0x439f, 0xefb: 0x43a5,
	0xefc: 0x43b1, 0xefe: 0x43b7,
	// Block 0x3c, offset 0xf00
	0xf00: 0x43bd, 0xf01: 0x43c3, 0xf03: 0x43c9, 0xf04: 0x43cf,
	0xf06: 0x43db, 0xf07: 0x43e1, 0xf08: 0x43e7, 0xf09: 0x43ed, 0xf0a: 0x43ff, 0xf0b: 0x437b,
	0xf0c: 0x4363, 0xf0d: 0x43ab, 0xf0e: 0x43d5, 0xf0f: 0x1d82, 0xf10: 0x0299, 0xf11: 0x0299,
	0xf12: 0x02a2, 0xf13: 0x02a2, 0xf14: 0x02a2, 0xf15: 0x02a2, 0xf16: 0x02a5, 0xf17: 0x02a5,
	0xf18: 0x02a5, 0xf19: 0x02a5, 0xf1a: 0x02ab, 0xf1b: 0x02ab, 0xf1c: 0x02ab, 0xf1d: 0x02ab,
	0xf1e: 0x029f, 0xf1f: 0x029f, 0xf20: 0x029f, 0xf21: 0x029f, 0xf22: 0x02a8, 0xf23: 0x02a8,
	0xf24: 0x02a8, 0xf25: 0x02a8, 0xf26: 0x029c, 0xf27: 0x029c, 0xf28: 0x029c, 0xf29: 0x029c,
	0xf2a: 0x02cf, 0xf2b: 0x02cf, 0xf2c: 0x02cf, 0xf2d: 0x02cf, 0xf2e: 0x02d2, 0xf2f: 0x02d2,
	0xf30: 0x02d2, 0xf31: 0x02d2, 0xf32: 0x02b1, 0xf33: 0x02b1, 0xf34: 0x02b1, 0xf35: 0x02b1,
	0xf36: 0x02ae, 0xf37: 0x02ae, 0xf38: 0x02ae, 0xf39: 0x02ae, 0xf3a: 0x02b4, 0xf3b: 0x02b4,
	0xf3c: 0x02b4, 0xf3d: 0x02b4, 0xf3e: 0x02b7, 0xf3f: 0x02b7,
	// Block 0x3d, offset 0xf40
	0xf40: 0x02b7, 0xf41: 0x02b7, 0xf42: 0x02c0, 0xf43: 0x02c0, 0xf44: 0x02bd, 0xf45: 0x02bd,
	0xf46: 0x02c3, 0xf47: 0x02c3, 0xf48: 0x02ba, 0xf49: 0x02ba, 0xf4a: 0x02c9, 0xf4b: 0x02c9,
	0xf4c: 0x02c6, 0xf4d: 0x02c6, 0xf4e: 0x02d5, 0xf4f: 0x02d5, 0xf50: 0x02d5, 0xf51: 0x02d5,
	0xf52: 0x02db, 0xf53: 0x02db, 0xf54: 0x02db, 0xf55: 0x02db, 0xf56: 0x02e1, 0xf57: 0x02e1,
	0xf58: 0x02e1, 0xf59: 0x02e1, 0xf5a: 0x02de, 0xf5b: 0x02de, 0xf5c: 0x02de, 0xf5d: 0x02de,
	0xf5e: 0x02e4, 0xf5f: 0x02e4, 0xf60: 0x02e7, 0xf61: 0x02e7, 0xf62: 0x02e7, 0xf63: 0x02e7,
	0xf64: 0x4471, 0xf65: 0x4471, 0xf66: 0x02ed, 0xf67: 0x02ed, 0xf68: 0x02ed, 0xf69: 0x02ed,
	0xf6a: 0x02ea, 0xf6b: 0x02ea, 0xf6c: 0x02ea, 0xf6d: 0x02ea, 0xf6e: 0x0308, 0xf6f: 0x0308,
	0xf70: 0x446b, 0xf71: 0x446b,
	// Block 0x3e, offset 0xf80
	0xf93: 0x02d8, 0xf94: 0x02d8, 0xf95: 0x02d8, 0xf96: 0x02d8, 0xf97: 0x02f6,
	0xf98: 0x02f6, 0xf99: 0x02f3, 0xf9a: 0x02f3, 0xf9b: 0x02f9, 0xf9c: 0x02f9, 0xf9d: 0x2052,
	0xf9e: 0x02ff, 0xf9f: 0x02ff, 0xfa0: 0x02f0, 0xfa1: 0x02f0, 0xfa2: 0x02fc, 0xfa3: 0x02fc,
	0xfa4: 0x0305, 0xfa5: 0x0305, 0xfa6: 0x0305, 0xfa7: 0x0305, 0xfa8: 0x028d, 0xfa9: 0x028d,
	0xfaa: 0x25ad, 0xfab: 0x25ad, 0xfac: 0x261d, 0xfad: 0x261d, 0xfae: 0x25ec, 0xfaf: 0x25ec,
	0xfb0: 0x2608, 0xfb1: 0x2608, 0xfb2: 0x2601, 0xfb3: 0x2601, 0xfb4: 0x260f, 0xfb5: 0x260f,
	0xfb6: 0x2616, 0xfb7: 0x2616, 0xfb8: 0x2616, 0xfb9: 0x25f3, 0xfba: 0x25f3, 0xfbb: 0x25f3,
	0xfbc: 0x0302, 0xfbd: 0x0302, 0xfbe: 0x0302, 0xfbf: 0x0302,
	// Block 0x3f, offset 0xfc0
	0xfc0: 0x25b4, 0xfc1: 0x25bb, 0xfc2: 0x25d7, 0xfc3: 0x25f3, 0xfc4: 0x25fa, 0xfc5: 0x1d8c,
	0xfc6: 0x1d91, 0xfc7: 0x1d96, 0xfc8: 0x1da5, 0xfc9: 0x1db4, 0xfca: 0x1db9, 0xfcb: 0x1dbe,
	0xfcc: 0x1dc3, 0xfcd: 0x1dc8, 0xfce: 0x1dd7, 0xfcf: 0x1de6, 0xfd0: 0x1deb, 0xfd1: 0x1df0,
	0xfd2: 0x1dff, 0xfd3: 0x1e0e, 0xfd4: 0x1e13, 0xfd5: 0x1e18, 0xfd6: 0x1e1d, 0xfd7: 0x1e2c,
	0xfd8: 0x1e31, 0xfd9: 0x1e40, 0xfda: 0x1e45, 0xfdb: 0x1e4a, 0xfdc: 0x1e59, 0xfdd: 0x1e5e,
	0xfde: 0x1e63, 0xfdf: 0x1e6d, 0xfe0: 0x1ea9, 0xfe1: 0x1eb8, 0xfe2: 0x1ec7, 0xfe3: 0x1ecc,
	0xfe4: 0x1ed1, 0xfe5: 0x1edb, 0xfe6: 0x1eea, 0xfe7: 0x1eef, 0xfe8: 0x1efe, 0xfe9: 0x1f03,
	0xfea: 0x1f08, 0xfeb: 0x1f17, 0xfec: 0x1f1c, 0xfed: 0x1f2b, 0xfee: 0x1f30, 0xfef: 0x1f35,
	0xff0: 0x1f3a, 0xff1: 0x1f3f, 0xff2: 0x1f44, 0xff3: 0x1f49, 0xff4: 0x1f4e, 0xff5: 0x1f53,
	0xff6: 0x1f58, 0xff7: 0x1f5d, 0xff8: 0x1f62, 0xff9: 0x1f67, 0xffa: 0x1f6c, 0xffb: 0x1f71,
	0xffc: 0x1f76, 0xffd: 0x1f7b, 0xffe: 0x1f80, 0xfff: 0x1f8a,
	// Block 0x40, offset 0x1000
	0x1000: 0x1f8f, 0x1001: 0x1f94, 0x1002: 0x1f99, 0x1003: 0x1fa3, 0x1004: 0x1fa8, 0x1005: 0x1fb2,
	0x1006: 0x1fb7, 0x1007: 0x1fbc, 0x1008: 0x1fc1, 0x1009: 0x1fc6, 0x100a: 0x1fcb, 0x100b: 0x1fd0,
	0x100c: 0x1fd5, 0x100d: 0x1fda, 0x100e: 0x1fe9, 0x100f: 0x1ff8, 0x1010: 0x1ffd, 0x1011: 0x2002,
	0x1012: 0x2007, 0x1013: 0x200c, 0x1014: 0x2011, 0x1015: 0x201b, 0x1016: 0x2020, 0x1017: 0x2025,
	0x1018: 0x2034, 0x1019: 0x2043, 0x101a: 0x2048, 0x101b: 0x4423, 0x101c: 0x4429, 0x101d: 0x445f,
	0x101e: 0x44b6, 0x101f: 0x44bd, 0x1020: 0x44c4, 0x1021: 0x44cb, 0x1022: 0x44d2, 0x1023: 0x44d9,
	0x1024: 0x25c9, 0x1025: 0x25d0, 0x1026: 0x25d7, 0x1027: 0x25de, 0x1028: 0x25f3, 0x1029: 0x25fa,
	0x102a: 0x1d9b, 0x102b: 0x1da0, 0x102c: 0x1da5, 0x102d: 0x1daa, 0x102e: 0x1db4, 0x102f: 0x1db9,
	0x1030: 0x1dcd, 0x1031: 0x1dd2, 0x1032: 0x1dd7, 0x1033: 0x1ddc, 0x1034: 0x1de6, 0x1035: 0x1deb,
	0x1036: 0x1df5, 0x1037: 0x1dfa, 0x1038: 0x1dff, 0x1039: 0x1e04, 0x103a: 0x1e0e, 0x103b: 0x1e13,
	0x103c: 0x1f3f, 0x103d: 0x1f44, 0x103e: 0x1f53, 0x103f: 0x1f58,
	// Block 0x41, offset 0x1040
	0x1040: 0x1f5d, 0x1041: 0x1f71, 0x1042: 0x1f76, 0x1043: 0x1f7b, 0x1044: 0x1f80, 0x1045: 0x1f99,
	0x1046: 0x1fa3, 0x1047: 0x1fa8, 0x1048: 0x1fad, 0x1049: 0x1fc1, 0x104a: 0x1fdf, 0x104b: 0x1fe4,
	0x104c: 0x1fe9, 0x104d: 0x1fee, 0x104e: 0x1ff8, 0x104f: 0x1ffd, 0x1050: 0x445f, 0x1051: 0x202a,
	0x1052: 0x202f, 0x1053: 0x2034, 0x1054: 0x2039, 0x1055: 0x2043, 0x1056: 0x2048, 0x1057: 0x25b4,
	0x1058: 0x25bb, 0x1059: 0x25c2, 0x105a: 0x25d7, 0x105b: 0x25e5, 0x105c: 0x1d8c, 0x105d: 0x1d91,
	0x105e: 0x1d96, 0x105f: 0x1da5, 0x1060: 0x1daf, 0x1061: 0x1dbe, 0x1062: 0x1dc3, 0x1063: 0x1dc8,
	0x1064: 0x1dd7, 0x1065: 0x1de1, 0x1066: 0x1dff, 0x1067: 0x1e18, 0x1068: 0x1e1d, 0x1069: 0x1e2c,
	0x106a: 0x1e31, 0x106b: 0x1e40, 0x106c: 0x1e4a, 0x106d: 0x1e59, 0x106e: 0x1e5e, 0x106f: 0x1e63,
	0x1070: 0x1e6d, 0x1071: 0x1ea9, 0x1072: 0x1eae, 0x1073: 0x1eb8, 0x1074: 0x1ec7, 0x1075: 0x1ecc,
	0x1076: 0x1ed1, 0x1077: 0x1edb, 0x1078: 0x1eea, 0x1079: 0x1efe, 0x107a: 0x1f03, 0x107b: 0x1f08,
	0x107c: 0x1f17, 0x107d: 0x1f1c, 0x107e: 0x1f2b, 0x107f: 0x1f30,
	// Block 0x42, offset 0x1080
	0x1080: 0x1f35, 0x1081: 0x1f3a, 0x1082: 0x1f49, 0x1083: 0x1f4e, 0x1084: 0x1f62, 0x1085: 0x1f67,
	0x1086: 0x1f6c, 0x1087: 0x1f71, 0x1088: 0x1f76, 0x1089: 0x1f8a, 0x108a: 0x1f8f, 0x108b: 0x1f94,
	0x108c: 0x1f99, 0x108d: 0x1f9e, 0x108e: 0x1fb2, 0x108f: 0x1fb7, 0x1090: 0x1fbc, 0x1091: 0x1fc1,
	0x1092: 0x1fd0, 0x1093: 0x1fd5, 0x1094: 0x1fda, 0x1095: 0x1fe9, 0x1096: 0x1ff3, 0x1097: 0x2002,
	0x1098: 0x2007, 0x1099: 0x4453, 0x109a: 0x201b, 0x109b: 0x2020, 0x109c: 0x2025, 0x109d: 0x2034,
	0x109e: 0x203e, 0x109f: 0x25d7, 0x10a0: 0x25e5, 0x10a1: 0x1da5, 0x10a2: 0x1daf, 0x10a3: 0x1dd7,
	0x10a4: 0x1de1, 0x10a5: 0x1dff, 0x10a6: 0x1e09, 0x10a7: 0x1e6d, 0x10a8: 0x1e72, 0x10a9: 0x1e95,
	0x10aa: 0x1e9a, 0x10ab: 0x1f71, 0x10ac: 0x1f76, 0x10ad: 0x1f99, 0x10ae: 0x1fe9, 0x10af: 0x1ff3,
	0x10b0: 0x2034, 0x10b1: 0x203e, 0x10b2: 0x4507, 0x10b3: 0x450f, 0x10b4: 0x4517, 0x10b5: 0x1ef4,
	0x10b6: 0x1ef9, 0x10b7: 0x1f0d, 0x10b8: 0x1f12, 0x10b9: 0x1f21, 0x10ba: 0x1f26, 0x10bb: 0x1e77,
	0x10bc: 0x1e7c, 0x10bd: 0x1e9f, 0x10be: 0x1ea4, 0x10bf: 0x1e36,
	// Block 0x43, offset 0x10c0
	0x10c0: 0x1e3b, 0x10c1: 0x1e22, 0x10c2: 0x1e27, 0x10c3: 0x1e4f, 0x10c4: 0x1e54, 0x10c5: 0x1ebd,
	0x10c6: 0x1ec2, 0x10c7: 0x1ee0, 0x10c8: 0x1ee5, 0x10c9: 0x1e81, 0x10ca: 0x1e86, 0x10cb: 0x1e8b,
	0x10cc: 0x1e95, 0x10cd: 0x1e90, 0x10ce: 0x1e68, 0x10cf: 0x1eb3, 0x10d0: 0x1ed6, 0x10d1: 0x1ef4,
	0x10d2: 0x1ef9, 0x10d3: 0x1f0d, 0x10d4: 0x1f12, 0x10d5: 0x1f21, 0x10d6: 0x1f26, 0x10d7: 0x1e77,
	0x10d8: 0x1e7c, 0x10d9: 0x1e9f, 0x10da: 0x1ea4, 0x10db: 0x1e36, 0x10dc: 0x1e3b, 0x10dd: 0x1e22,
	0x10de: 0x1e27, 0x10df: 0x1e4f, 0x10e0: 0x1e54, 0x10e1: 0x1ebd, 0x10e2: 0x1ec2, 0x10e3: 0x1ee0,
	0x10e4: 0x1ee5, 0x10e5: 0x1e81, 0x10e6: 0x1e86, 0x10e7: 0x1e8b, 0x10e8: 0x1e95, 0x10e9: 0x1e90,
	0x10ea: 0x1e68, 0x10eb: 0x1eb3, 0x10ec: 0x1ed6, 0x10ed: 0x1e81, 0x10ee: 0x1e86, 0x10ef: 0x1e8b,
	0x10f0: 0x1e95, 0x10f1: 0x1e72, 0x10f2: 0x1e9a, 0x10f3: 0x1eef, 0x10f4: 0x1e59, 0x10f5: 0x1e5e,
	0x10f6: 0x1e63, 0x10f7: 0x1e81, 0x10f8: 0x1e86, 0x10f9: 0x1e8b, 0x10fa: 0x1eef, 0x10fb: 0x1efe,
	0x10fc: 0x440b, 0x10fd: 0x440b,
	// Block 0x44, offset 0x1100
	0x1110: 0x2314, 0x1111: 0x2329,
	0x1112: 0x2329, 0x1113: 0x2330, 0x1114: 0x2337, 0x1115: 0x234c, 0x1116: 0x2353, 0x1117: 0x235a,
	0x1118: 0x237d, 0x1119: 0x237d, 0x111a: 0x23a0, 0x111b: 0x2399, 0x111c: 0x23b5, 0x111d: 0x23a7,
	0x111e: 0x23ae, 0x111f: 0x23d1, 0x1120: 0x23d1, 0x1121: 0x23ca, 0x1122: 0x23d8, 0x1123: 0x23d8,
	0x1124: 0x2402, 0x1125: 0x2402, 0x1126: 0x241e, 0x1127: 0x23e6, 0x1128: 0x23e6, 0x1129: 0x23df,
	0x112a: 0x23f4, 0x112b: 0x23f4, 0x112c: 0x23fb, 0x112d: 0x23fb, 0x112e: 0x2425, 0x112f: 0x2433,
	0x1130: 0x2433, 0x1131: 0x243a, 0x1132: 0x243a, 0x1133: 0x2441, 0x1134: 0x2448, 0x1135: 0x244f,
	0x1136: 0x2456, 0x1137: 0x2456, 0x1138: 0x245d, 0x1139: 0x246b, 0x113a: 0x2479, 0x113b: 0x2472,
	0x113c: 0x2480, 0x113d: 0x2480, 0x113e: 0x2495, 0x113f: 0x249c,
	// Block 0x45, offset 0x1140
	0x1140: 0x24cd, 0x1141: 0x24db, 0x1142: 0x24d4, 0x1143: 0x24b8, 0x1144: 0x24b8, 0x1145: 0x24e2,
	0x1146: 0x24e2, 0x1147: 0x24e9, 0x1148: 0x24e9, 0x1149: 0x2513, 0x114a: 0x251a, 0x114b: 0x2521,
	0x114c: 0x24f7, 0x114d: 0x2505, 0x114e: 0x2528, 0x114f: 0x252f,
	0x1152: 0x24fe, 0x1153: 0x2583, 0x1154: 0x258a, 0x1155: 0x2560, 0x1156: 0x2567, 0x1157: 0x254b,
	0x1158: 0x254b, 0x1159: 0x2552, 0x115a: 0x257c, 0x115b: 0x2575, 0x115c: 0x259f, 0x115d: 0x259f,
	0x115e: 0x230d, 0x115f: 0x2322, 0x1160: 0x231b, 0x1161: 0x2345, 0x1162: 0x233e, 0x1163: 0x2368,
	0x1164: 0x2361, 0x1165: 0x238b, 0x1166: 0x236f, 0x1167: 0x2384, 0x1168: 0x23bc, 0x1169: 0x2409,
	0x116a: 0x23ed, 0x116b: 0x242c, 0x116c: 0x24c6, 0x116d: 0x24f0, 0x116e: 0x2598, 0x116f: 0x2591,
	0x1170: 0x25a6, 0x1171: 0x253d, 0x1172: 0x24a3, 0x1173: 0x256e, 0x1174: 0x2495, 0x1175: 0x24cd,
	0x1176: 0x2464, 0x1177: 0x24b1, 0x1178: 0x2544, 0x1179: 0x2536, 0x117a: 0x24bf, 0x117b: 0x24aa,
	0x117c: 0x24bf, 0x117d: 0x2544, 0x117e: 0x2376, 0x117f: 0x2392,
	// Block 0x46, offset 0x1180
	0x1180: 0x250c, 0x1181: 0x2487, 0x1182: 0x2306, 0x1183: 0x24aa, 0x1184: 0x244f, 0x1185: 0x241e,
	0x1186: 0x23c3, 0x1187: 0x2559,
	0x11b0: 0x2417, 0x11b1: 0x248e, 0x11b2: 0x27c2, 0x11b3: 0x27b9, 0x11b4: 0x27ef, 0x11b5: 0x27dd,
	0x11b6: 0x27cb, 0x11b7: 0x27e6, 0x11b8: 0x27f8, 0x11b9: 0x2410, 0x11ba: 0x2c7f, 0x11bb: 0x2aff,
	0x11bc: 0x27d4,
	// Block 0x47, offset 0x11c0
	0x11d0: 0x0019, 0x11d1: 0x0483,
	0x11d2: 0x0487, 0x11d3: 0x0035, 0x11d4: 0x0037, 0x11d5: 0x0003, 0x11d6: 0x003f, 0x11d7: 0x04bf,
	0x11d8: 0x04c3, 0x11d9: 0x1b5f,
	0x11e0: 0x8132, 0x11e1: 0x8132, 0x11e2: 0x8132, 0x11e3: 0x8132,
	0x11e4: 0x8132, 0x11e5: 0x8132, 0x11e6: 0x8132, 0x11e7: 0x812d, 0x11e8: 0x812d, 0x11e9: 0x812d,
	0x11ea: 0x812d, 0x11eb: 0x812d, 0x11ec: 0x812d, 0x11ed: 0x812d, 0x11ee: 0x8132, 0x11ef: 0x8132,
	0x11f0: 0x1873, 0x11f1: 0x0443, 0x11f2: 0x043f, 0x11f3: 0x007f, 0x11f4: 0x007f, 0x11f5: 0x0011,
	0x11f6: 0x0013, 0x11f7: 0x00b7, 0x11f8: 0x00bb, 0x11f9: 0x04b7, 0x11fa: 0x04bb, 0x11fb: 0x04ab,
	0x11fc: 0x04af, 0x11fd: 0x0493, 0x11fe: 0x0497, 0x11ff: 0x048b,
	// Block 0x48, offset 0x1200
	0x1200: 0x048f, 0x1201: 0x049b, 0x1202: 0x049f, 0x1203: 0x04a3, 0x1204: 0x04a7,
	0x1207: 0x0077, 0x1208: 0x007b, 0x1209: 0x426c, 0x120a: 0x426c, 0x120b: 0x426c,
	0x120c: 0x426c, 0x120d: 0x007f, 0x120e: 0x007f, 0x120f: 0x007f, 0x1210: 0x0019, 0x1211: 0x0483,
	0x1212: 0x001d, 0x1214: 0x0037, 0x1215: 0x0035, 0x1216: 0x003f, 0x1217: 0x0003,
	0x1218: 0x0443, 0x1219: 0x0011, 0x121a: 0x0013, 0x121b: 0x00b7, 0x121c: 0x00bb, 0x121d: 0x04b7,
	0x121e: 0x04bb, 0x121f: 0x0007, 0x1220: 0x000d, 0x1221: 0x0015, 0x1222: 0x0017, 0x1223: 0x001b,
	0x1224: 0x0039, 0x1225: 0x003d, 0x1226: 0x003b, 0x1228: 0x0079, 0x1229: 0x0009,
	0x122a: 0x000b, 0x122b: 0x0041,
	0x1230: 0x42ad, 0x1231: 0x442f, 0x1232: 0x42b2, 0x1234: 0x42b7,
	0x1236: 0x42bc, 0x1237: 0x4435, 0x1238: 0x42c1, 0x1239: 0x443b, 0x123a: 0x42c6, 0x123b: 0x4441,
	0x123c: 0x42cb, 0x123d: 0x4447, 0x123e: 0x42d0, 0x123f: 0x444d,
	// Block 0x49, offset 0x1240
	0x1240: 0x0236, 0x1241: 0x4411, 0x1242: 0x4411, 0x1243: 0x4417, 0x1244: 0x4417, 0x1245: 0x4459,
	0x1246: 0x4459, 0x1247: 0x441d, 0x1248: 0x441d, 0x1249: 0x4465, 0x124a: 0x4465, 0x124b: 0x4465,
	0x124c: 0x4465, 0x124d: 0x0239, 0x124e: 0x0239, 0x124f: 0x023c, 0x1250: 0x023c, 0x1251: 0x023c,
	0x1252: 0x023c, 0x1253: 0x023f, 0x1254: 0x023f, 0x1255: 0x0242, 0x1256: 0x0242, 0x1257: 0x0242,
	0x1258: 0x0242, 0x1259: 0x0245, 0x125a: 0x0245, 0x125b: 0x0245, 0x125c: 0x0245, 0x125d: 0x0248,
	0x125e: 0x0248, 0x125f: 0x0248, 0x1260: 0x0248, 0x1261: 0x024b, 0x1262: 0x024b, 0x1263: 0x024b,
	0x1264: 0x024b, 0x1265: 0x024e, 0x1266: 0x024e, 0x1267: 0x024e, 0x1268: 0x024e, 0x1269: 0x0251,
	0x126a: 0x0251, 0x126b: 0x0254, 0x126c: 0x0254, 0x126d: 0x0257, 0x126e: 0x0257, 0x126f: 0x025a,
	0x1270: 0x025a, 0x1271: 0x025d, 0x1272: 0x025d, 0x1273: 0x025d, 0x1274: 0x025d, 0x1275: 0x0260,
	0x1276: 0x0260, 0x1277: 0x0260, 0x1278: 0x0260, 0x1279: 0x0263, 0x127a: 0x0263, 0x127b: 0x0263,
	0x127c: 0x0263, 0x127d: 0x0266, 0x127e: 0x0266, 0x127f: 0x0266,
	// Block 0x4a, offset 0x1280
	0x1280: 0x0266, 0x1281: 0x0269, 0x1282: 0x0269, 0x1283: 0x0269, 0x1284: 0x0269, 0x1285: 0x026c,
	0x1286: 0x026c, 0x1287: 0x026c, 0x1288: 0x026c, 0x1289: 0x026f, 0x128a: 0x026f, 0x128b: 0x026f,
	0x128c: 0x026f, 0x128d: 0x0272, 0x128e: 0x0272, 0x128f: 0x0272, 0x1290: 0x0272, 0x1291: 0x0275,
	0x1292: 0x0275, 0x1293: 0x0275, 0x1294: 0x0275, 0x1295: 0x0278, 0x1296: 0x0278, 0x1297: 0x0278,
	0x1298: 0x0278, 0x1299: 0x027b, 0x129a: 0x027b, 0x129b: 0x027b, 0x129c: 0x027b, 0x129d: 0x027e,
	0x129e: 0x027e, 0x129f: 0x027e, 0x12a0: 0x027e, 0x12a1: 0x0281, 0x12a2: 0x0281, 0x12a3: 0x0281,
	0x12a4: 0x0281, 0x12a5: 0x0284, 0x12a6: 0x0284, 0x12a7: 0x0284, 0x12a8: 0x0284, 0x12a9: 0x0287,
	0x12aa: 0x0287, 0x12ab: 0x0287, 0x12ac: 0x0287, 0x12ad: 0x028a, 0x12ae: 0x028a, 0x12af: 0x028d,
	0x12b0: 0x028d, 0x12b1: 0x0290, 0x12b2: 0x0290, 0x12b3: 0x0290, 0x12b4: 0x0290, 0x12b5: 0x2e03,
	0x12b6: 0x2e03, 0x12b7: 0x2e0b, 0x12b8: 0x2e0b, 0x12b9: 0x2e13, 0x12ba: 0x2e13, 0x12bb: 0x1f85,
	0x12bc: 0x1f85,
	// Block 0x4b, offset 0x12c0
	0x12c0: 0x0081, 0x12c1: 0x0083, 0x12c2: 0x0085, 0x12c3: 0x0087, 0x12c4: 0x0089, 0x12c5: 0x008b,
	0x12c6: 0x008d, 0x12c7: 0x008f, 0x12c8: 0x0091, 0x12c9: 0x0093, 0x12ca: 0x0095, 0x12cb: 0x0097,
	0x12cc: 0x0099, 0x12cd: 0x009b, 0x12ce: 0x009d, 0x12cf: 0x009f, 0x12d0: 0x00a1, 0x12d1: 0x00a3,
	0x12d2: 0x00a5, 0x12d3: 0x00a7, 0x12d4: 0x00a9, 0x12d5: 0x00ab, 0x12d6: 0x00ad, 0x12d7: 0x00af,
	0x12d8: 0x00b1, 0x12d9: 0x00b3, 0x12da: 0x00b5, 0x12db: 0x00b7, 0x12dc: 0x00b9, 0x12dd: 0x00bb,
	0x12de: 0x00bd, 0x12df: 0x0477, 0x12e0: 0x047b, 0x12e1: 0x0487, 0x12e2: 0x049b, 0x12e3: 0x049f,
	0x12e4: 0x0483, 0x12e5: 0x05ab, 0x12e6: 0x05a3, 0x12e7: 0x04c7, 0x12e8: 0x04cf, 0x12e9: 0x04d7,
	0x12ea: 0x04df, 0x12eb: 0x04e7, 0x12ec: 0x056b, 0x12ed: 0x0573, 0x12ee: 0x057b, 0x12ef: 0x051f,
	0x12f0: 0x05af, 0x12f1: 0x04cb, 0x12f2: 0x04d3, 0x12f3: 0x04db, 0x12f4: 0x04e3, 0x12f5: 0x04eb,
	0x12f6: 0x04ef, 0x12f7: 0x04f3, 0x12f8: 0x04f7, 0x12f9: 0x04fb, 0x12fa: 0x04ff, 0x12fb: 0x0503,
	0x12fc: 0x0507, 0x12fd: 0x050b, 0x12fe: 0x050f, 0x12ff: 0x0513,
	// Block 0x4c, offset 0x1300
	0x1300: 0x0517, 0x1301: 0x051b, 0x1302: 0x0523, 0x1303: 0x0527, 0x1304: 0x052b, 0x1305: 0x052f,
	0x1306: 0x0533, 0x1307: 0x0537, 0x1308: 0x053b, 0x1309: 0x053f, 0x130a: 0x0543, 0x130b: 0x0547,
	0x130c: 0x054b, 0x130d: 0x054f, 0x130e: 0x0553, 0x130f: 0x0557, 0x1310: 0x055b, 0x1311: 0x055f,
	0x1312: 0x0563, 0x1313: 0x0567, 0x1314: 0x056f, 0x1315: 0x0577, 0x1316: 0x057f, 0x1317: 0x0583,
	0x1318: 0x0587, 0x1319: 0x058b, 0x131a: 0x058f, 0x131b: 0x0593, 0x131c: 0x0597, 0x131d: 0x05a7,
	0x131e: 0x4a7b, 0x131f: 0x4a81, 0x1320: 0x03c3, 0x1321: 0x0313, 0x1322: 0x0317, 0x1323: 0x4a3e,
	0x1324: 0x031b, 0x1325: 0x4a44, 0x1326: 0x4a4a, 0x1327: 0x031f, 0x1328: 0x0323, 0x1329: 0x0327,
	0x132a: 0x4a50, 0x132b: 0x4a56, 0x132c: 0x4a5c, 0x132d: 0x4a62, 0x132e: 0x4a68, 0x132f: 0x4a6e,
	0x1330: 0x0367, 0x1331: 0x032b, 0x1332: 0x032f, 0x1333: 0x0333, 0x1334: 0x037b, 0x1335: 0x0337,
	0x1336: 0x033b, 0x1337: 0x033f, 0x1338: 0x0343, 0x1339: 0x0347, 0x133a: 0x034b, 0x133b: 0x034f,
	0x133c: 0x0353, 0x133d: 0x0357, 0x133e: 0x035b,
	// Block 0x4d, offset 0x1340
	0x1342: 0x49c0, 0x1343: 0x49c6, 0x1344: 0x49cc, 0x1345: 0x49d2,
	0x1346: 0x49d8, 0x1347: 0x49de, 0x134a: 0x49e4, 0x134b: 0x49ea,
	0x134c: 0x49f0, 0x134d: 0x49f6, 0x134e: 0x49fc, 0x134f: 0x4a02,
	0x1352: 0x4a08, 0x1353: 0x4a0e, 0x1354: 0x4a14, 0x1355: 0x4a1a, 0x1356: 0x4a20, 0x1357: 0x4a26,
	0x135a: 0x4a2c, 0x135b: 0x4a32, 0x135c: 0x4a38,
	0x1360: 0x00bf, 0x1361: 0x00c2, 0x1362: 0x00cb, 0x1363: 0x4267,
	0x1364: 0x00c8, 0x1365: 0x00c5, 0x1366: 0x0447, 0x1368: 0x046b, 0x1369: 0x044b,
	0x136a: 0x044f, 0x136b: 0x0453, 0x136c: 0x0457, 0x136d: 0x046f, 0x136e: 0x0473,
	// Block 0x4e, offset 0x1380
	0x1380: 0x0063, 0x1381: 0x0065, 0x1382: 0x0067, 0x1383: 0x0069, 0x1384: 0x006b, 0x1385: 0x006d,
	0x1386: 0x006f, 0x1387: 0x0071, 0x1388: 0x0073, 0x1389: 0x0075, 0x138a: 0x0083, 0x138b: 0x0085,
	0x138c: 0x0087, 0x138d: 0x0089, 0x138e: 0x008b, 0x138f: 0x008d, 0x1390: 0x008f, 0x1391: 0x0091,
	0x1392: 0x0093, 0x1393: 0x0095, 0x1394: 0x0097, 0x1395: 0x0099, 0x1396: 0x009b, 0x1397: 0x009d,
	0x1398: 0x009f, 0x1399: 0x00a1, 0x139a: 0x00a3, 0x139b: 0x00a5, 0x139c: 0x00a7, 0x139d: 0x00a9,
	0x139e: 0x00ab, 0x139f: 0x00ad, 0x13a0: 0x00af, 0x13a1: 0x00b1, 0x13a2: 0x00b3, 0x13a3: 0x00b5,
	0x13a4: 0x00dd, 0x13a5: 0x00f2, 0x13a8: 0x0173, 0x13a9: 0x0176,
	0x13aa: 0x0179, 0x13ab: 0x017c, 0x13ac: 0x017f, 0x13ad: 0x0182, 0x13ae: 0x0185, 0x13af: 0x0188,
	0x13b0: 0x018b, 0x13b1: 0x018e, 0x13b2: 0x0191, 0x13b3: 0x0194, 0x13b4: 0x0197, 0x13b5: 0x019a,
	0x13b6: 0x019d, 0x13b7: 0x01a0, 0x13b8: 0x01a3, 0x13b9: 0x0188, 0x13ba: 0x01a6, 0x13bb: 0x01a9,
	0x13bc: 0x01ac, 0x13bd: 0x01af, 0x13be: 0x01b2, 0x13bf: 0x01b5,
	// Block 0x4f, offset 0x13c0
	0x13c0: 0x01fd, 0x13c1: 0x0200, 0x13c2: 0x0203, 0x13c3: 0x045b, 0x13c4: 0x01c7, 0x13c5: 0x01d0,
	0x13c6: 0x01d6, 0x13c7: 0x01fa, 0x13c8: 0x01eb, 0x13c9: 0x01e8, 0x13ca: 0x0206, 0x13cb: 0x0209,
	0x13ce: 0x0021, 0x13cf: 0x0023, 0x13d0: 0x0025, 0x13d1: 0x0027,
	0x13d2: 0x0029, 0x13d3: 0x002b, 0x13d4: 0x002d, 0x13d5: 0x002f, 0x13d6: 0x0031, 0x13d7: 0x0033,
	0x13d8: 0x0021, 0x13d9: 0x0023, 0x13da: 0x0025, 0x13db: 0x0027, 0x13dc: 0x0029, 0x13dd: 0x002b,
	0x13de: 0x002d, 0x13df: 0x002f, 0x13e0: 0x0031, 0x13e1: 0x0033, 0x13e2: 0x0021, 0x13e3: 0x0023,
	0x13e4: 0x0025, 0x13e5: 0x0027, 0x13e6: 0x0029, 0x13e7: 0x002b, 0x13e8: 0x002d, 0x13e9: 0x002f,
	0x13ea: 0x0031, 0x13eb: 0x0033, 0x13ec: 0x0021, 0x13ed: 0x0023, 0x13ee: 0x0025, 0x13ef: 0x0027,
	0x13f0: 0x0029, 0x13f1: 0x002b, 0x13f2: 0x002d, 0x13f3: 0x002f, 0x13f4: 0x0031, 0x13f5: 0x0033,
	0x13f6: 0x0021, 0x13f7: 0x0023, 0x13f8: 0x0025, 0x13f9: 0x0027, 0x13fa: 0x0029, 0x13fb: 0x002b,
	0x13fc: 0x002d, 0x13fd: 0x002f, 0x13fe: 0x0031, 0x13ff: 0x0033,
	// Block 0x50, offset 0x1400
	0x1400: 0x0239, 0x1401: 0x023c, 0x1402: 0x0248, 0x1403: 0x0251, 0x1405: 0x028a,
	0x1406: 0x025a, 0x1407: 0x024b, 0x1408: 0x0269, 0x1409: 0x0290, 0x140a: 0x027b, 0x140b: 0x027e,
	0x140c: 0x0281, 0x140d: 0x0284, 0x140e: 0x025d, 0x140f: 0x026f, 0x1410: 0x0275, 0x1411: 0x0263,
	0x1412: 0x0278, 0x1413: 0x0257, 0x1414: 0x0260, 0x1415: 0x0242, 0x1416: 0x0245, 0x1417: 0x024e,
	0x1418: 0x0254, 0x1419: 0x0266, 0x141a: 0x026c, 0x141b: 0x0272, 0x141c: 0x0293, 0x141d: 0x02e4,
	0x141e: 0x02cc, 0x141f: 0x0296, 0x1421: 0x023c, 0x1422: 0x0248,
	0x1424: 0x0287, 0x1427: 0x024b, 0x1429: 0x0290,
	0x142a: 0x027b, 0x142b: 0x027e, 0x142c: 0x0281, 0x142d: 0x0284, 0x142e: 0x025d, 0x142f: 0x026f,
	0x1430: 0x0275, 0x1431: 0x0263, 0x1432: 0x0278, 0x1434: 0x0260, 0x1435: 0x0242,
	0x1436: 0x0245, 0x1437: 0x024e, 0x1439: 0x0266, 0x143b: 0x0272,
	// Block 0x51, offset 0x1440
	0x1442: 0x0248,
	0x1447: 0x024b, 0x1449: 0x0290, 0x144b: 0x027e,
	0x144d: 0x0284, 0x144e: 0x025d, 0x144f: 0x026f, 0x1451: 0x0263,
	0x1452: 0x0278, 0x1454: 0x0260, 0x1457: 0x024e,
	0x1459: 0x0266, 0x145b: 0x0272, 0x145d: 0x02e4,
	0x145f: 0x0296, 0x1461: 0x023c, 0x1462: 0x0248,
	0x1464: 0x0287, 0x1467: 0x024b, 0x1468: 0x0269, 0x1469: 0x0290,
	0x146a: 0x027b, 0x146c: 0x0281, 0x146d: 0x0284, 0x146e: 0x025d, 0x146f: 0x026f,
	0x1470: 0x0275, 0x1471: 0x0263, 0x1472: 0x0278, 0x1474: 0x0260, 0x1475: 0x0242,
	0x1476: 0x0245, 0x1477: 0x024e, 0x1479: 0x0266, 0x147a: 0x026c, 0x147b: 0x0272,
	0x147c: 0x0293, 0x147e: 0x02cc,
	// Block 0x52, offset 0x1480
	0x1480: 0x0239, 0x1481: 0x023c, 0x1482: 0x0248, 0x1483: 0x0251, 0x1484: 0x0287, 0x1485: 0x028a,
	0x1486: 0x025a, 0x1487: 0x024b, 0x1488: 0x0269, 0x1489: 0x0290, 0x148b: 0x027e,
	0x148c: 0x0281, 0x148d: 0x0284, 0x148e: 0x025d, 0x148f: 0x026f, 0x1490: 0x0275, 0x1491: 0x0263,
	0x1492: 0x0278, 0x1493: 0x0257, 0x1494: 0x0260, 0x1495: 0x0242, 0x1496: 0x0245, 0x1497: 0x024e,
	0x1498: 0x0254, 0x1499: 0x0266, 0x149a: 0x026c, 0x149b: 0x0272,
	0x14a1: 0x023c, 0x14a2: 0x0248, 0x14a3: 0x0251,
	0x14a5: 0x028a, 0x14a6: 0x025a, 0x14a7: 0x024b, 0x14a8: 0x0269, 0x14a9: 0x0290,
	0x14ab: 0x027e, 0x14ac: 0x0281, 0x14ad: 0x0284, 0x14ae: 0x025d, 0x14af: 0x026f,
	0x14b0: 0x0275, 0x14b1: 0x0263, 0x14b2: 0x0278, 0x14b3: 0x0257, 0x14b4: 0x0260, 0x14b5: 0x0242,
	0x14b6: 0x0245, 0x14b7: 0x024e, 0x14b8: 0x0254, 0x14b9: 0x0266, 0x14ba: 0x026c, 0x14bb: 0x0272,
	// Block 0x53, offset 0x14c0
	0x14c0: 0x1879, 0x14c1: 0x1876, 0x14c2: 0x187c, 0x14c3: 0x18a0, 0x14c4: 0x18c4, 0x14c5: 0x18e8,
	0x14c6: 0x190c, 0x14c7: 0x1915, 0x14c8: 0x191b, 0x14c9: 0x1921, 0x14ca: 0x1927,
	0x14d0: 0x1a8f, 0x14d1: 0x1a93,
	0x14d2: 0x1a97, 0x14d3: 0x1a9b, 0x14d4: 0x1a9f, 0x14d5: 0x1aa3, 0x14d6: 0x1aa7, 0x14d7: 0x1aab,
	0x14d8: 0x1aaf, 0x14d9: 0x1ab3, 0x14da: 0x1ab7, 0x14db: 0x1abb, 0x14dc: 0x1abf, 0x14dd: 0x1ac3,
	0x14de: 0x1ac7, 0x14df: 0x1acb, 0x14e0: 0x1acf, 0x14e1: 0x1ad3, 0x14e2: 0x1ad7, 0x14e3: 0x1adb,
	0x14e4: 0x1adf, 0x14e5: 0x1ae3, 0x14e6: 0x1ae7, 0x14e7: 0x1aeb, 0x14e8: 0x1aef, 0x14e9: 0x1af3,
	0x14ea: 0x2721, 0x14eb: 0x0047, 0x14ec: 0x0065, 0x14ed: 0x193c, 0x14ee: 0x19b4,
	0x14f0: 0x0043, 0x14f1: 0x0045, 0x14f2: 0x0047, 0x14f3: 0x0049, 0x14f4: 0x004b, 0x14f5: 0x004d,
	0x14f6: 0x004f, 0x14f7: 0x0051, 0x14f8: 0x0053, 0x14f9: 0x0055, 0x14fa: 0x0057, 0x14fb: 0x0059,
	0x14fc: 0x005b, 0x14fd: 0x005d, 0x14fe: 0x005f, 0x14ff: 0x0061,
	// Block 0x54, offset 0x1500
	0x1500: 0x26b0, 0x1501: 0x26c5, 0x1502: 0x0503,
	0x1510: 0x0c0f, 0x1511: 0x0a47,
	0x1512: 0x08d3, 0x1513: 0x45c7, 0x1514: 0x071b, 0x1515: 0x09ef, 0x1516: 0x132f, 0x1517: 0x09ff,
	0x1518: 0x0727, 0x1519: 0x0cd7, 0x151a: 0x0eaf, 0x151b: 0x0caf, 0x151c: 0x0827, 0x151d: 0x0b6b,
	0x151e: 0x07bf, 0x151f: 0x0cb7, 0x1520: 0x0813, 0x1521: 0x1117, 0x1522: 0x0f83, 0x1523: 0x138b,
	0x1524: 0x09d3, 0x1525: 0x090b, 0x1526: 0x0e63, 0x1527: 0x0c1b, 0x1528: 0x0c47, 0x1529: 0x06bf,
	0x152a: 0x06cb, 0x152b: 0x140b, 0x152c: 0x0adb, 0x152d: 0x06e7, 0x152e: 0x08ef, 0x152f: 0x0c3b,
	0x1530: 0x13b3, 0x1531: 0x0c13, 0x1532: 0x106f, 0x1533: 0x10ab, 0x1534: 0x08f7, 0x1535: 0x0e43,
	0x1536: 0x0d0b, 0x1537: 0x0d07, 0x1538: 0x0f97, 0x1539: 0x082b, 0x153a: 0x0957, 0x153b: 0x1443,
	// Block 0x55, offset 0x1540
	0x1540: 0x06fb, 0x1541: 0x06f3, 0x1542: 0x0703, 0x1543: 0x1647, 0x1544: 0x0747, 0x1545: 0x0757,
	0x1546: 0x075b, 0x1547: 0x0763, 0x1548: 0x076b, 0x1549: 0x076f, 0x154a: 0x077b, 0x154b: 0x0773,
	0x154c: 0x05b3, 0x154d: 0x165b, 0x154e: 0x078f, 0x154f: 0x0793, 0x1550: 0x0797, 0x1551: 0x07b3,
	0x1552: 0x164c, 0x1553: 0x05b7, 0x1554: 0x079f, 0x1555: 0x07bf, 0x1556: 0x1656, 0x1557: 0x07cf,
	0x1558: 0x07d7, 0x1559: 0x0737, 0x155a: 0x07df, 0x155b: 0x07e3, 0x155c: 0x1831, 0x155d: 0x07ff,
	0x155e: 0x0807, 0x155f: 0x05bf, 0x1560: 0x081f, 0x1561: 0x0823, 0x1562: 0x082b, 0x1563: 0x082f,
	0x1564: 0x05c3, 0x1565: 0x0847, 0x1566: 0x084b, 0x1567: 0x0857, 0x1568: 0x0863, 0x1569: 0x0867,
	0x156a: 0x086b, 0x156b: 0x0873, 0x156c: 0x0893, 0x156d: 0x0897, 0x156e: 0x089f, 0x156f: 0x08af,
	0x1570: 0x08b7, 0x1571: 0x08bb, 0x1572: 0x08bb, 0x1573: 0x08bb, 0x1574: 0x166a, 0x1575: 0x0e93,
	0x1576: 0x08cf, 0x1577: 0x08d7, 0x1578: 0x166f, 0x1579: 0x08e3, 0x157a: 0x08eb, 0x157b: 0x08f3,
	0x157c: 0x091b, 0x157d: 0x0907, 0x157e: 0x0913, 0x157f: 0x0917,
	// Block 0x56, offset 0x1580
	0x1580: 0x091f, 0x1581: 0x0927, 0x1582: 0x092b, 0x1583: 0x0933, 0x1584: 0x093b, 0x1585: 0x093f,
	0x1586: 0x093f, 0x1587: 0x0947, 0x1588: 0x094f, 0x1589: 0x0953, 0x158a: 0x095f, 0x158b: 0x0983,
	0x158c: 0x0967, 0x158d: 0x0987, 0x158e: 0x096b, 0x158f: 0x0973, 0x1590: 0x080b, 0x1591: 0x09cf,
	0x1592: 0x0997, 0x1593: 0x099b, 0x1594: 0x099f, 0x1595: 0x0993, 0x1596: 0x09a7, 0x1597: 0x09a3,
	0x1598: 0x09bb, 0x1599: 0x1674, 0x159a: 0x09d7, 0x159b: 0x09db, 0x159c: 0x09e3, 0x159d: 0x09ef,
	0x159e: 0x09f7, 0x159f: 0x0a13, 0x15a0: 0x1679, 0x15a1: 0x167e, 0x15a2: 0x0a1f, 0x15a3: 0x0a23,
	0x15a4: 0x0a27, 0x15a5: 0x0a1b, 0x15a6: 0x0a2f, 0x15a7: 0x05c7, 0x15a8: 0x05cb, 0x15a9: 0x0a37,
	0x15aa: 0x0a3f, 0x15ab: 0x0a3f, 0x15ac: 0x1683, 0x15ad: 0x0a5b, 0x15ae: 0x0a5f, 0x15af: 0x0a63,
	0x15b0: 0x0a6b, 0x15b1: 0x1688, 0x15b2: 0x0a73, 0x15b3: 0x0a77, 0x15b4: 0x0b4f, 0x15b5: 0x0a7f,
	0x15b6: 0x05cf, 0x15b7: 0x0a8b, 0x15b8: 0x0a9b, 0x15b9: 0x0aa7, 0x15ba: 0x0aa3, 0x15bb: 0x1692,
	0x15bc: 0x0aaf, 0x15bd: 0x1697, 0x15be: 0x0abb, 0x15bf: 0x0ab7,
	// Block 0x57, offset 0x15c0
	0x15c0: 0x0abf, 0x15c1: 0x0acf, 0x15c2: 0x0ad3, 0x15c3: 0x05d3, 0x15c4: 0x0ae3, 0x15c5: 0x0aeb,
	0x15c6: 0x0aef, 0x15c7: 0x0af3, 0x15c8: 0x05d7, 0x15c9: 0x169c, 0x15ca: 0x05db, 0x15cb: 0x0b0f,
	0x15cc: 0x0b13, 0x15cd: 0x0b17, 0x15ce: 0x0b1f, 0x15cf: 0x1863, 0x15d0: 0x0b37, 0x15d1: 0x16a6,
	0x15d2: 0x16a6, 0x15d3: 0x11d7, 0x15d4: 0x0b47, 0x15d5: 0x0b47, 0x15d6: 0x05df, 0x15d7: 0x16c9,
	0x15d8: 0x179b, 0x15d9: 0x0b57, 0x15da: 0x0b5f, 0x15db: 0x05e3, 0x15dc: 0x0b73, 0x15dd: 0x0b83,
	0x15de: 0x0b87, 0x15df: 0x0b8f, 0x15e0: 0x0b9f, 0x15e1: 0x05eb, 0x15e2: 0x05e7, 0x15e3: 0x0ba3,
	0x15e4: 0x16ab, 0x15e5: 0x0ba7, 0x15e6: 0x0bbb, 0x15e7: 0x0bbf, 0x15e8: 0x0bc3, 0x15e9: 0x0bbf,
	0x15ea: 0x0bcf, 0x15eb: 0x0bd3, 0x15ec: 0x0be3, 0x15ed: 0x0bdb, 0x15ee: 0x0bdf, 0x15ef: 0x0be7,
	0x15f0: 0x0beb, 0x15f1: 0x0bef, 0x15f2: 0x0bfb, 0x15f3: 0x0bff, 0x15f4: 0x0c17, 0x15f5: 0x0c1f,
	0x15f6: 0x0c2f, 0x15f7: 0x0c43, 0x15f8: 0x16ba, 0x15f9: 0x0c3f, 0x15fa: 0x0c33, 0x15fb: 0x0c4b,
	0x15fc: 0x0c53, 0x15fd: 0x0c67, 0x15fe: 0x16bf, 0x15ff: 0x0c6f,
	// Block 0x58, offset 0x1600
	0x1600: 0x0c63, 0x1601: 0x0c5b, 0x1602: 0x05ef, 0x1603: 0x0c77, 0x1604: 0x0c7f, 0x1605: 0x0c87,
	0x1606: 0x0c7b, 0x1607: 0x05f3, 0x1608: 0x0c97, 0x1609: 0x0c9f, 0x160a: 0x16c4, 0x160b: 0x0ccb,
	0x160c: 0x0cff, 0x160d: 0x0cdb, 0x160e: 0x05ff, 0x160f: 0x0ce7, 0x1610: 0x05fb, 0x1611: 0x05f7,
	0x1612: 0x07c3, 0x1613: 0x07c7, 0x1614: 0x0d03, 0x1615: 0x0ceb, 0x1616: 0x11ab, 0x1617: 0x0663,
	0x1618: 0x0d0f, 0x1619: 0x0d13, 0x161a: 0x0d17, 0x161b: 0x0d2b, 0x161c: 0x0d23, 0x161d: 0x16dd,
	0x161e: 0x0603, 0x161f: 0x0d3f, 0x1620: 0x0d33, 0x1621: 0x0d4f, 0x1622: 0x0d57, 0x1623: 0x16e7,
	0x1624: 0x0d5b, 0x1625: 0x0d47, 0x1626: 0x0d63, 0x1627: 0x0607, 0x1628: 0x0d67, 0x1629: 0x0d6b,
	0x162a: 0x0d6f, 0x162b: 0x0d7b, 0x162c: 0x16ec, 0x162d: 0x0d83, 0x162e: 0x060b, 0x162f: 0x0d8f,
	0x1630: 0x16f1, 0x1631: 0x0d93, 0x1632: 0x060f, 0x1633: 0x0d9f, 0x1634: 0x0dab, 0x1635: 0x0db7,
	0x1636: 0x0dbb, 0x1637: 0x16f6, 0x1638: 0x168d, 0x1639: 0x16fb, 0x163a: 0x0ddb, 0x163b: 0x1700,
	0x163c: 0x0de7, 0x163d: 0x0def, 0x163e: 0x0ddf, 0x163f: 0x0dfb,
	// Block 0x59, offset 0x1640
	0x1640: 0x0e0b, 0x1641: 0x0e1b, 0x1642: 0x0e0f, 0x1643: 0x0e13, 0x1644: 0x0e1f, 0x1645: 0x0e23,
	0x1646: 0x1705, 0x1647: 0x0e07, 0x1648: 0x0e3b, 0x1649: 0x0e3f, 0x164a: 0x0613, 0x164b: 0x0e53,
	0x164c: 0x0e4f, 0x164d: 0x170a, 0x164e: 0x0e33, 0x164f: 0x0e6f, 0x1650: 0x170f, 0x1651: 0x1714,
	0x1652: 0x0e73, 0x1653: 0x0e87, 0x1654: 0x0e83, 0x1655: 0x0e7f, 0x1656: 0x0617, 0x1657: 0x0e8b,
	0x1658: 0x0e9b, 0x1659: 0x0e97, 0x165a: 0x0ea3, 0x165b: 0x1651, 0x165c: 0x0eb3, 0x165d: 0x1719,
	0x165e: 0x0ebf, 0x165f: 0x1723, 0x1660: 0x0ed3, 0x1661: 0x0edf, 0x1662: 0x0ef3, 0x1663: 0x1728,
	0x1664: 0x0f07, 0x1665: 0x0f0b, 0x1666: 0x172d, 0x1667: 0x1732, 0x1668: 0x0f27, 0x1669: 0x0f37,
	0x166a: 0x061b, 0x166b: 0x0f3b, 0x166c: 0x061f, 0x166d: 0x061f, 0x166e: 0x0f53, 0x166f: 0x0f57,
	0x1670: 0x0f5f, 0x1671: 0x0f63, 0x1672: 0x0f6f, 0x1673: 0x0623, 0x1674: 0x0f87, 0x1675: 0x1737,
	0x1676: 0x0fa3, 0x1677: 0x173c, 0x1678: 0x0faf, 0x1679: 0x16a1, 0x167a: 0x0fbf, 0x167b: 0x1741,
	0x167c: 0x1746, 0x167d: 0x174b, 0x167e: 0x0627, 0x167f: 0x062b,
	// Block 0x5a, offset 0x1680
	0x1680: 0x0ff7, 0x1681: 0x1755, 0x1682: 0x1750, 0x1683: 0x175a, 0x1684: 0x175f, 0x1685: 0x0fff,
	0x1686: 0x1003, 0x1687: 0x1003, 0x1688: 0x100b, 0x1689: 0x0633, 0x168a: 0x100f, 0x168b: 0x0637,
	0x168c: 0x063b, 0x168d: 0x1769, 0x168e: 0x1023, 0x168f: 0x102b, 0x1690: 0x1037, 0x1691: 0x063f,
	0x1692: 0x176e, 0x1693: 0x105b, 0x1694: 0x1773, 0x1695: 0x1778, 0x1696: 0x107b, 0x1697: 0x1093,
	0x1698: 0x0643, 0x1699: 0x109b, 0x169a: 0x109f, 0x169b: 0x10a3, 0x169c: 0x177d, 0x169d: 0x1782,
	0x169e: 0x1782, 0x169f: 0x10bb, 0x16a0: 0x0647, 0x16a1: 0x1787, 0x16a2: 0x10cf, 0x16a3: 0x10d3,
	0x16a4: 0x064b, 0x16a5: 0x178c, 0x16a6: 0x10ef, 0x16a7: 0x064f, 0x16a8: 0x10ff, 0x16a9: 0x10f7,
	0x16aa: 0x1107, 0x16ab: 0x1796, 0x16ac: 0x111f, 0x16ad: 0x0653, 0x16ae: 0x112b, 0x16af: 0x1133,
	0x16b0: 0x1143, 0x16b1: 0x0657, 0x16b2: 0x17a0, 0x16b3: 0x17a5, 0x16b4: 0x065b, 0x16b5: 0x17aa,
	0x16b6: 0x115b, 0x16b7: 0x17af, 0x16b8: 0x1167, 0x16b9: 0x1173, 0x16ba: 0x117b, 0x16bb: 0x17b4,
	0x16bc: 0x17b9, 0x16bd: 0x118f, 0x16be: 0x17be, 0x16bf: 0x1197,
	// Block 0x5b, offset 0x16c0
	0x16c0: 0x16ce, 0x16c1: 0x065f, 0x16c2: 0x11af, 0x16c3: 0x11b3, 0x16c4: 0x0667, 0x16c5: 0x11b7,
	0x16c6: 0x0a33, 0x16c7: 0x17c3, 0x16c8: 0x17c8, 0x16c9: 0x16d3, 0x16ca: 0x16d8, 0x16cb: 0x11d7,
	0x16cc: 0x11db, 0x16cd: 0x13f3, 0x16ce: 0x066b, 0x16cf: 0x1207, 0x16d0: 0x1203, 0x16d1: 0x120b,
	0x16d2: 0x083f, 0x16d3: 0x120f, 0x16d4: 0x1213, 0x16d5: 0x1217, 0x16d6: 0x121f, 0x16d7: 0x17cd,
	0x16d8: 0x121b, 0x16d9: 0x1223, 0x16da: 0x1237, 0x16db: 0x123b, 0x16dc: 0x1227, 0x16dd: 0x123f,
	0x16de: 0x1253, 0x16df: 0x1267, 0x16e0: 0x1233, 0x16e1: 0x1247, 0x16e2: 0x124b, 0x16e3: 0x124f,
	0x16e4: 0x17d2, 0x16e5: 0x17dc, 0x16e6: 0x17d7, 0x16e7: 0x066f, 0x16e8: 0x126f, 0x16e9: 0x1273,
	0x16ea: 0x127b, 0x16eb: 0x17f0, 0x16ec: 0x127f, 0x16ed: 0x17e1, 0x16ee: 0x0673, 0x16ef: 0x0677,
	0x16f0: 0x17e6, 0x16f1: 0x17eb, 0x16f2: 0x067b, 0x16f3: 0x129f, 0x16f4: 0x12a3, 0x16f5: 0x12a7,
	0x16f6: 0x12ab, 0x16f7: 0x12b7, 0x16f8: 0x12b3, 0x16f9: 0x12bf, 0x16fa: 0x12bb, 0x16fb: 0x12cb,
	0x16fc: 0x12c3, 0x16fd: 0x12c7, 0x16fe: 0x12cf, 0x16ff: 0x067f,
	// Block 0x5c, offset 0x1700
	0x1700: 0x12d7, 0x1701: 0x12db, 0x1702: 0x0683, 0x1703: 0x12eb, 0x1704: 0x12ef, 0x1705: 0x17f5,
	0x1706: 0x12fb, 0x1707: 0x12ff, 0x1708: 0x0687, 0x1709: 0x130b, 0x170a: 0x05bb, 0x170b: 0x17fa,
	0x170c: 0x17ff, 0x170d: 0x068b, 0x170e: 0x068f, 0x170f: 0x1337, 0x1710: 0x134f, 0x1711: 0x136b,
	0x1712: 0x137b, 0x1713: 0x1804, 0x1714: 0x138f, 0x1715: 0x1393, 0x1716: 0x13ab, 0x1717: 0x13b7,
	0x1718: 0x180e, 0x1719: 0x1660, 0x171a: 0x13c3, 0x171b: 0x13bf, 0x171c: 0x13cb, 0x171d: 0x1665,
	0x171e: 0x13d7, 0x171f: 0x13e3, 0x1720: 0x1813, 0x1721: 0x1818, 0x1722: 0x1423, 0x1723: 0x142f,
	0x1724: 0x1437, 0x1725: 0x181d, 0x1726: 0x143b, 0x1727: 0x1467, 0x1728: 0x1473, 0x1729: 0x1477,
	0x172a: 0x146f, 0x172b: 0x1483, 0x172c: 0x1487, 0x172d: 0x1822, 0x172e: 0x1493, 0x172f: 0x0693,
	0x1730: 0x149b, 0x1731: 0x1827, 0x1732: 0x0697, 0x1733: 0x14d3, 0x1734: 0x0ac3, 0x1735: 0x14eb,
	0x1736: 0x182c, 0x1737: 0x1836, 0x1738: 0x069b, 0x1739: 0x069f, 0x173a: 0x1513, 0x173b: 0x183b,
	0x173c: 0x06a3, 0x173d: 0x1840, 0x173e: 0x152b, 0x173f: 0x152b,
	// Block 0x5d, offset 0x1740
	0x1740: 0x1533, 0x1741: 0x1845, 0x1742: 0x154b, 0x1743: 0x06a7, 0x1744: 0x155b, 0x1745: 0x1567,
	0x1746: 0x156f, 0x1747: 0x1577, 0x1748: 0x06ab, 0x1749: 0x184a, 0x174a: 0x158b, 0x174b: 0x15a7,
	0x174c: 0x15b3, 0x174d: 0x06af, 0x174e: 0x06b3, 0x174f: 0x15b7, 0x1750: 0x184f, 0x1751: 0x06b7,
	0x1752: 0x1854, 0x1753: 0x1859, 0x1754: 0x185e, 0x1755: 0x15db, 0x1756: 0x06bb, 0x1757: 0x15ef,
	0x1758: 0x15f7, 0x1759: 0x15fb, 0x175a: 0x1603, 0x175b: 0x160b, 0x175c: 0x1613, 0x175d: 0x1868,
}

// nfkcIndex: 22 blocks, 1408 entries, 2816 bytes
// Block 0 is the zero block.
var nfkcIndex = [1408]uint16{
	// Block 0x0, offset 0x0
	// Block 0x1, offset 0x40
	// Block 0x2, offset 0x80
	// Block 0x3, offset 0xc0
	0xc2: 0x5c, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x5d, 0xc7: 0x04,
	0xc8: 0x05, 0xca: 0x5e, 0xcb: 0x5f, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x09,
	0xd0: 0x0a, 0xd1: 0x60, 0xd2: 0x61, 0xd3: 0x0b, 0xd6: 0x0c, 0xd7: 0x62,
	0xd8: 0x63, 0xd9: 0x0d, 0xdb: 0x64, 0xdc: 0x65, 0xdd: 0x66, 0xdf: 0x67,
	0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05,
	0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a,
	0xf0: 0x13,
	// Block 0x4, offset 0x100
	0x120: 0x68, 0x121: 0x69, 0x123: 0x0e, 0x124: 0x6a, 0x125: 0x6b, 0x126: 0x6c, 0x127: 0x6d,
	0x128: 0x6e, 0x129: 0x6f, 0x12a: 0x70, 0x12b: 0x71, 0x12c: 0x6c, 0x12d: 0x72, 0x12e: 0x73, 0x12f: 0x74,
	0x131: 0x75, 0x132: 0x76, 0x133: 0x77, 0x134: 0x78, 0x135: 0x79, 0x137: 0x7a,
	0x138: 0x7b, 0x139: 0x7c, 0x13a: 0x7d, 0x13b: 0x7e, 0x13c: 0x7f, 0x13d: 0x80, 0x13e: 0x81, 0x13f: 0x82,
	// Block 0x5, offset 0x140
	0x140: 0x83, 0x142: 0x84, 0x143: 0x85, 0x144: 0x86, 0x145: 0x87, 0x146: 0x88, 0x147: 0x89,
	0x14d: 0x8a,
	0x15c: 0x8b, 0x15f: 0x8c,
	0x162: 0x8d, 0x164: 0x8e,
	0x168: 0x8f, 0x169: 0x90, 0x16a: 0x91, 0x16c: 0x0f, 0x16d: 0x92, 0x16e: 0x93, 0x16f: 0x94,
	0x170: 0x95, 0x173: 0x96, 0x174: 0x97, 0x175: 0x10, 0x176: 0x11, 0x177: 0x12,
	0x178: 0x13, 0x179: 0x14, 0x17a: 0x15, 0x17b: 0x16, 0x17c: 0x17, 0x17d: 0x18, 0x17e: 0x19, 0x17f: 0x1a,
	// Block 0x6, offset 0x180
	0x180: 0x98, 0x181: 0x99, 0x182: 0x9a, 0x183: 0x9b, 0x184: 0x1b, 0x185: 0x1c, 0x186: 0x9c, 0x187: 0x9d,
	0x188: 0x9e, 0x189: 0x1d, 0x18a: 0x1e, 0x18b: 0x9f, 0x18c: 0xa0,
	0x191: 0x1f, 0x192: 0x20, 0x193: 0xa1,
	0x1a8: 0xa2, 0x1a9: 0xa3, 0x1ab: 0xa4,
	0x1b1: 0xa5, 0x1b3: 0xa6, 0x1b5: 0xa7, 0x1b7: 0xa8,
	0x1ba: 0xa9, 0x1bb: 0xaa, 0x1bc: 0x21, 0x1bd: 0x22, 0x1be: 0x23, 0x1bf: 0xab,
	// Block 0x7, offset 0x1c0
	0x1c0: 0xac, 0x1c1: 0x24, 0x1c2: 0x25, 0x1c3: 0x26, 0x1c4: 0xad, 0x1c5: 0x27, 0x1c6: 0x28,
	0x1c8: 0x29, 0x1c9: 0x2a, 0x1ca: 0x2b, 0x1cb: 0x2c, 0x1cc: 0x2d, 0x1cd: 0x2e, 0x1ce: 0x2f, 0x1cf: 0x30,
	// Block 0x8, offset 0x200
	0x219: 0xae, 0x21a: 0xaf, 0x21b: 0xb0, 0x21d: 0xb1, 0x21f: 0xb2,
	0x220: 0xb3, 0x223: 0xb4, 0x224: 0xb5, 0x225: 0xb6, 0x226: 0xb7, 0x227: 0xb8,
	0x22a: 0xb9, 0x22b: 0xba, 0x22d: 0xbb, 0x22f: 0xbc,
	0x230: 0xbd, 0x231: 0xbe, 0x232: 0xbf, 0x233: 0xc0, 0x234: 0xc1, 0x235: 0xc2, 0x236: 0xc3, 0x237: 0xbd,
	0x238: 0xbe, 0x239: 0xbf, 0x23a: 0xc0, 0x23b: 0xc1, 0x23c: 0xc2, 0x23d: 0xc3, 0x23e: 0xbd, 0x23f: 0xbe,
	// Block 0x9, offset 0x240
	0x240: 0xbf, 0x241: 0xc0, 0x242: 0xc1, 0x243: 0xc2, 0x244: 0xc3, 0x245: 0xbd, 0x246: 0xbe, 0x247: 0xbf,
	0x248: 0xc0, 0x249: 0xc1, 0x24a: 0xc2, 0x24b: 0xc3, 0x24c: 0xbd, 0x24d: 0xbe, 0x24e: 0xbf, 0x24f: 0xc0,
	0x250: 0xc1, 0x251: 0xc2, 0x252: 0xc3, 0x253: 0xbd, 0x254: 0xbe, 0x255: 0xbf, 0x256: 0xc0, 0x257: 0xc1,
	0x258: 0xc2, 0x259: 0xc3, 0x25a: 0xbd, 0x25b: 0xbe, 0x25c: 0xbf, 0x25d: 0xc0, 0x25e: 0xc1, 0x25f: 0xc2,
	0x260: 0xc3, 0x261: 0xbd, 0x262: 0xbe, 0x263: 0xbf, 0x264: 0xc0, 0x265: 0xc1, 0x266: 0xc2, 0x267: 0xc3,
	0x268: 0xbd, 0x269: 0xbe, 0x26a: 0xbf, 0x26b: 0xc0, 0x26c: 0xc1, 0x26d: 0xc2, 0x26e: 0xc3, 0x26f: 0xbd,
	0x270: 0xbe, 0x271: 0xbf, 0x272: 0xc0, 0x273: 0xc1, 0x274: 0xc2, 0x275: 0xc3, 0x276: 0xbd, 0x277: 0xbe,
	0x278: 0xbf, 0x279: 0xc0, 0x27a: 0xc1, 0x27b: 0xc2, 0x27c: 0xc3, 0x27d: 0xbd, 0x27e: 0xbe, 0x27f: 0xbf,
	// Block 0xa, offset 0x280
	0x280: 0xc0, 0x281: 0xc1, 0x282: 0xc2, 0x283: 0xc3, 0x284: 0xbd, 0x285: 0xbe, 0x286: 0xbf, 0x287: 0xc0,
	0x288: 0xc1, 0x289: 0xc2, 0x28a: 0xc3, 0x28b: 0xbd, 0x28c: 0xbe, 0x28d: 0xbf, 0x28e: 0xc0, 0x28f: 0xc1,
	0x290: 0xc2, 0x291: 0xc3, 0x292: 0xbd, 0x293: 0xbe, 0x294: 0xbf, 0x295: 0xc0, 0x296: 0xc1, 0x297: 0xc2,
	0x298: 0xc3, 0x299: 0xbd, 0x29a: 0xbe, 0x29b: 0xbf, 0x29c: 0xc0, 0x29d: 0xc1, 0x29e: 0xc2, 0x29f: 0xc3,
	0x2a0: 0xbd, 0x2a1: 0xbe, 0x2a2: 0xbf, 0x2a3: 0xc0, 0x2a4: 0xc1, 0x2a5: 0xc2, 0x2a6: 0xc3, 0x2a7: 0xbd,
	0x2a8: 0xbe, 0x2a9: 0xbf, 0x2aa: 0xc0, 0x2ab: 0xc1, 0x2ac: 0xc2, 0x2ad: 0xc3, 0x2ae: 0xbd, 0x2af: 0xbe,
	0x2b0: 0xbf, 0x2b1: 0xc0, 0x2b2: 0xc1, 0x2b3: 0xc2, 0x2b4: 0xc3, 0x2b5: 0xbd, 0x2b6: 0xbe, 0x2b7: 0xbf,
	0x2b8: 0xc0, 0x2b9: 0xc1, 0x2ba: 0xc2, 0x2bb: 0xc3, 0x2bc: 0xbd, 0x2bd: 0xbe, 0x2be: 0xbf, 0x2bf: 0xc0,
	// Block 0xb, offset 0x2c0
	0x2c0: 0xc1, 0x2c1: 0xc2, 0x2c2: 0xc3, 0x2c3: 0xbd, 0x2c4: 0xbe, 0x2c5: 0xbf, 0x2c6: 0xc0, 0x2c7: 0xc1,
	0x2c8: 0xc2, 0x2c9: 0xc3, 0x2ca: 0xbd, 0x2cb: 0xbe, 0x2cc: 0xbf, 0x2cd: 0xc0, 0x2ce: 0xc1, 0x2cf: 0xc2,
	0x2d0: 0xc3, 0x2d1: 0xbd, 0x2d2: 0xbe, 0x2d3: 0xbf, 0x2d4: 0xc0, 0x2d5: 0xc1, 0x2d6: 0xc2, 0x2d7: 0xc3,
	0x2d8: 0xbd, 0x2d9: 0xbe, 0x2da: 0xbf, 0x2db: 0xc0, 0x2dc: 0xc1, 0x2dd: 0xc2, 0x2de: 0xc4,
	// Block 0xc, offset 0x300
	0x324: 0x31, 0x325: 0x32, 0x326: 0x33, 0x327: 0x34,
	0x328: 0x35, 0x329: 0x36, 0x32a: 0x37, 0x32b: 0x38, 0x32c: 0x39, 0x32d: 0x3a, 0x32e: 0x3b, 0x32f: 0x3c,
	0x330: 0x3d, 0x331: 0x3e, 0x332: 0x3f, 0x333: 0x40, 0x334: 0x41, 0x335: 0x42, 0x336: 0x43, 0x337: 0x44,
	0x338: 0x45, 0x339: 0x46, 0x33a: 0x47, 0x33b: 0x48, 0x33c: 0xc5, 0x33d: 0x49, 0x33e: 0x4a, 0x33f: 0x4b,
	// Block 0xd, offset 0x340
	0x347: 0xc6,
	0x34b: 0xc7, 0x34d: 0xc8,
	0x368: 0xc9, 0x36b: 0xca,
	0x374: 0xcb,
	0x37d: 0xcc,
	// Block 0xe, offset 0x380
	0x381: 0xcd, 0x382: 0xce, 0x384: 0xcf, 0x385: 0xb7, 0x387: 0xd0,
	0x388: 0xd1, 0x38b: 0xd2, 0x38c: 0xd3, 0x38d: 0xd4,
	0x391: 0xd5, 0x392: 0xd6, 0x393: 0xd7, 0x396: 0xd8, 0x397: 0xd9,
	0x398: 0xda, 0x39a: 0xdb, 0x39c: 0xdc,
	0x3a0: 0xdd, 0x3a7: 0xde,
	0x3a8: 0xdf, 0x3a9: 0xe0, 0x3aa: 0xe1,
	0x3b0: 0xda, 0x3b5: 0xe2, 0x3b6: 0xe3,
	// Block 0xf, offset 0x3c0
	0x3eb: 0xe4, 0x3ec: 0xe5,
	// Block 0x10, offset 0x400
	0x432: 0xe6,
	// Block 0x11, offset 0x440
	0x445: 0xe7, 0x446: 0xe8, 0x447: 0xe9,
	0x449: 0xea,
	0x450: 0xeb, 0x451: 0xec, 0x452: 0xed, 0x453: 0xee, 0x454: 0xef, 0x455: 0xf0, 0x456: 0xf1, 0x457: 0xf2,
	0x458: 0xf3, 0x459: 0xf4, 0x45a: 0x4c, 0x45b: 0xf5, 0x45c: 0xf6, 0x45d: 0xf7, 0x45e: 0xf8, 0x45f: 0x4d,
	// Block 0x12, offset 0x480
	0x480: 0xf9, 0x484: 0xe5,
	0x48b: 0xfa,
	0x4a3: 0xfb, 0x4a5: 0xfc,
	0x4b8: 0x4e, 0x4b9: 0x4f, 0x4ba: 0x50,
	// Block 0x13, offset 0x4c0
	0x4c4: 0x51, 0x4c5: 0xfd, 0x4c6: 0xfe,
	0x4c8: 0x52, 0x4c9: 0xff,
	// Block 0x14, offset 0x500
	0x520: 0x53, 0x521: 0x54, 0x522: 0x55, 0x523: 0x56, 0x524: 0x57, 0x525: 0x58, 0x526: 0x59, 0x527: 0x5a,
	0x528: 0x5b,
	// Block 0x15, offset 0x540
	0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d,
	0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11,
	0x56f: 0x12,
}

// nfkcSparseOffset: 164 entries, 328 bytes
var nfkcSparseOffset = []uint16{0x0, 0xe, 0x12, 0x1b, 0x25, 0x35, 0x37, 0x3c, 0x47, 0x56, 0x63, 0x6b, 0x70, 0x75, 0x77, 0x7f, 0x86, 0x89, 0x91, 0x95, 0x99, 0x9b, 0x9d, 0xa6, 0xaa, 0xb1, 0xb6, 0xb9, 0xc3, 0xc6, 0xcd, 0xd5, 0xd9, 0xdb, 0xdf, 0xe3, 0xe9, 0xfa, 0x106, 0x108, 0x10e, 0x110, 0x112, 0x114, 0x116, 0x118, 0x11a, 0x11c, 0x11f, 0x122, 0x124, 0x127, 0x12a, 0x12e, 0x133, 0x13c, 0x13e, 0x141, 0x143, 0x14e, 0x159, 0x167, 0x175, 0x185, 0x193, 0x19a, 0x1a0, 0x1af, 0x1b3, 0x1b5, 0x1b9, 0x1bb, 0x1be, 0x1c0, 0x1c3, 0x1c5, 0x1c8, 0x1ca, 0x1cc, 0x1ce, 0x1da, 0x1e4, 0x1ee, 0x1f1, 0x1f5, 0x1f7, 0x1f9, 0x1fb, 0x1fd, 0x200, 0x202, 0x204, 0x206, 0x208, 0x20e, 0x211, 0x215, 0x217, 0x21e, 0x224, 0x22a, 0x232, 0x238, 0x23e, 0x244, 0x248, 0x24a, 0x24c, 0x24e, 0x250, 0x256, 0x259, 0x25b, 0x261, 0x264, 0x26c, 0x273, 0x276, 0x279, 0x27b, 0x27e, 0x286, 0x28a, 0x291, 0x294, 0x29a, 0x29c, 0x29e, 0x2a1, 0x2a3, 0x2a6, 0x2a8, 0x2aa, 0x2ac, 0x2ae, 0x2b1, 0x2b3, 0x2b5, 0x2b7, 0x2b9, 0x2c6, 0x2d0, 0x2d2, 0x2d4, 0x2d8, 0x2dd, 0x2e9, 0x2ee, 0x2f7, 0x2fd, 0x302, 0x306, 0x30b, 0x30f, 0x31f, 0x32d, 0x33b, 0x349, 0x34f, 0x351, 0x353, 0x356, 0x361, 0x363}

// nfkcSparseValues: 877 entries, 3508 bytes
var nfkcSparseValues = [877]valueRange{
	// Block 0x0, offset 0x0
	{value: 0x0002, lo: 0x0d},
	{value: 0x0001, lo: 0xa0, hi: 0xa0},
	{value: 0x427b, lo: 0xa8, hi: 0xa8},
	{value: 0x0083, lo: 0xaa, hi: 0xaa},
	{value: 0x4267, lo: 0xaf, hi: 0xaf},
	{value: 0x0025, lo: 0xb2, hi: 0xb3},
	{value: 0x425d, lo: 0xb4, hi: 0xb4},
	{value: 0x01dc, lo: 0xb5, hi: 0xb5},
	{value: 0x4294, lo: 0xb8, hi: 0xb8},
	{value: 0x0023, lo: 0xb9, hi: 0xb9},
	{value: 0x009f, lo: 0xba, hi: 0xba},
	{value: 0x221f, lo: 0xbc, hi: 0xbc},
	{value: 0x2213, lo: 0xbd, hi: 0xbd},
	{value: 0x22b5, lo: 0xbe, hi: 0xbe},
	// Block 0x1, offset 0xe
	{value: 0x0091, lo: 0x03},
	{value: 0x46e5, lo: 0xa0, hi: 0xa1},
	{value: 0x4717, lo: 0xaf, hi: 0xb0},
	{value: 0xa000, lo: 0xb7, hi: 0xb7},
	// Block 0x2, offset 0x12
	{value: 0x0003, lo: 0x08},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x0091, lo: 0xb0, hi: 0xb0},
	{value: 0x0119, lo: 0xb1, hi: 0xb1},
	{value: 0x0095, lo: 0xb2, hi: 0xb2},
	{value: 0x00a5, lo: 0xb3, hi: 0xb3},
	{value: 0x0143, lo: 0xb4, hi: 0xb6},
	{value: 0x00af, lo: 0xb7, hi: 0xb7},
	{value: 0x00b3, lo: 0xb8, hi: 0xb8},
	// Block 0x3, offset 0x1b
	{value: 0x000a, lo: 0x09},
	{value: 0x4271, lo: 0x98, hi: 0x98},
	{value: 0x4276, lo: 0x99, hi: 0x9a},
	{value: 0x4299, lo: 0x9b, hi: 0x9b},
	{value: 0x4262, lo: 0x9c, hi: 0x9c},
	{value: 0x4285, lo: 0x9d, hi: 0x9d},
	{value: 0x0113, lo: 0xa0, hi: 0xa0},
	{value: 0x0099, lo: 0xa1, hi: 0xa1},
	{value: 0x00a7, lo: 0xa2, hi: 0xa3},
	{value: 0x0167, lo: 0xa4, hi: 0xa4},
	// Block 0x4, offset 0x25
	{value: 0x0000, lo: 0x0f},
	{value: 0xa000, lo: 0x83, hi: 0x83},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0xa000, lo: 0x8b, hi: 0x8b},
	{value: 0xa000, lo: 0x8d, hi: 0x8d},
	{value: 0x37a8, lo: 0x90, hi: 0x90},
	{value: 0x37b4, lo: 0x91, hi: 0x91},
	{value: 0x37a2, lo: 0x93, hi: 0x93},
	{value: 0xa000, lo: 0x96, hi: 0x96},
	{value: 0x381a, lo: 0x97, hi: 0x97},
	{value: 0x37e4, lo: 0x9c, hi: 0x9c},
	{value: 0x37cc, lo: 0x9d, hi: 0x9d},
	{value: 0x37f6, lo: 0x9e, hi: 0x9e},
	{value: 0xa000, lo: 0xb4, hi: 0xb5},
	{value: 0x3820, lo: 0xb6, hi: 0xb6},
	{value: 0x3826, lo: 0xb7, hi: 0xb7},
	// Block 0x5, offset 0x35
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x83, hi: 0x87},
	// Block 0x6, offset 0x37
	{value: 0x0001, lo: 0x04},
	{value: 0x8113, lo: 0x81, hi: 0x82},
	{value: 0x8132, lo: 0x84, hi: 0x84},
	{value: 0x812d, lo: 0x85, hi: 0x85},
	{value: 0x810d, lo: 0x87, hi: 0x87},
	// Block 0x7, offset 0x3c
	{value: 0x0000, lo: 0x0a},
	{value: 0x8132, lo: 0x90, hi: 0x97},
	{value: 0x8119, lo: 0x98, hi: 0x98},
	{value: 0x811a, lo: 0x99, hi: 0x99},
	{value: 0x811b, lo: 0x9a, hi: 0x9a},
	{value: 0x3844, lo: 0xa2, hi: 0xa2},
	{value: 0x384a, lo: 0xa3, hi: 0xa3},
	{value: 0x3856, lo: 0xa4, hi: 0xa4},
	{value: 0x3850, lo: 0xa5, hi: 0xa5},
	{value: 0x385c, lo: 0xa6, hi: 0xa6},
	{value: 0xa000, lo: 0xa7, hi: 0xa7},
	// Block 0x8, offset 0x47
	{value: 0x0000, lo: 0x0e},
	{value: 0x386e, lo: 0x80, hi: 0x80},
	{value: 0xa000, lo: 0x81, hi: 0x81},
	{value: 0x3862, lo: 0x82, hi: 0x82},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x3868, lo: 0x93, hi: 0x93},
	{value: 0xa000, lo: 0x95, hi: 0x95},
	{value: 0x8132, lo: 0x96, hi: 0x9c},
	{value: 0x8132, lo: 0x9f, hi: 0xa2},
	{value: 0x812d, lo: 0xa3, hi: 0xa3},
	{value: 0x8132, lo: 0xa4, hi: 0xa4},
	{value: 0x8132, lo: 0xa7, hi: 0xa8},
	{value: 0x812d, lo: 0xaa, hi: 0xaa},
	{value: 0x8132, lo: 0xab, hi: 0xac},
	{value: 0x812d, lo: 0xad, hi: 0xad},
	// Block 0x9, offset 0x56
	{value: 0x0000, lo: 0x0c},
	{value: 0x811f, lo: 0x91, hi: 0x91},
	{value: 0x8132, lo: 0xb0, hi: 0xb0},
	{value: 0x812d, lo: 0xb1, hi: 0xb1},
	{value: 0x8132, lo: 0xb2, hi: 0xb3},
	{value: 0x812d, lo: 0xb4, hi: 0xb4},
	{value: 0x8132, lo: 0xb5, hi: 0xb6},
	{value: 0x812d, lo: 0xb7, hi: 0xb9},
	{value: 0x8132, lo: 0xba, hi: 0xba},
	{value: 0x812d, lo: 0xbb, hi: 0xbc},
	{value: 0x8132, lo: 0xbd, hi: 0xbd},
	{value: 0x812d, lo: 0xbe, hi: 0xbe},
	{value: 0x8132, lo: 0xbf, hi: 0xbf},
	// Block 0xa, offset 0x63
	{value: 0x0005, lo: 0x07},
	{value: 0x8132, lo: 0x80, hi: 0x80},
	{value: 0x8132, lo: 0x81, hi: 0x81},
	{value: 0x812d, lo: 0x82, hi: 0x83},
	{value: 0x812d, lo: 0x84, hi: 0x85},
	{value: 0x812d, lo: 0x86, hi: 0x87},
	{value: 0x812d, lo: 0x88, hi: 0x89},
	{value: 0x8132, lo: 0x8a, hi: 0x8a},
	// Block 0xb, offset 0x6b
	{value: 0x0000, lo: 0x04},
	{value: 0x8132, lo: 0xab, hi: 0xb1},
	{value: 0x812d, lo: 0xb2, hi: 0xb2},
	{value: 0x8132, lo: 0xb3, hi: 0xb3},
	{value: 0x812d, lo: 0xbd, hi: 0xbd},
	// Block 0xc, offset 0x70
	{value: 0x0000, lo: 0x04},
	{value: 0x8132, lo: 0x96, hi: 0x99},
	{value: 0x8132, lo: 0x9b, hi: 0xa3},
	{value: 0x8132, lo: 0xa5, hi: 0xa7},
	{value: 0x8132, lo: 0xa9, hi: 0xad},
	// Block 0xd, offset 0x75
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x99, hi: 0x9b},
	// Block 0xe, offset 0x77
	{value: 0x0000, lo: 0x07},
	{value: 0xa000, lo: 0xa8, hi: 0xa8},
	{value: 0x3edb, lo: 0xa9, hi: 0xa9},
	{value: 0xa000, lo: 0xb0, hi: 0xb0},
	{value: 0x3ee3, lo: 0xb1, hi: 0xb1},
	{value: 0xa000, lo: 0xb3, hi: 0xb3},
	{value: 0x3eeb, lo: 0xb4, hi: 0xb4},
	{value: 0x9902, lo: 0xbc, hi: 0xbc},
	// Block 0xf, offset 0x7f
	{value: 0x0008, lo: 0x06},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x8132, lo: 0x91, hi: 0x91},
	{value: 0x812d, lo: 0x92, hi: 0x92},
	{value: 0x8132, lo: 0x93, hi: 0x93},
	{value: 0x8132, lo: 0x94, hi: 0x94},
	{value: 0x451f, lo: 0x98, hi: 0x9f},
	// Block 0x10, offset 0x86
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x11, offset 0x89
	{value: 0x0008, lo: 0x07},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2ca1, lo: 0x8b, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	{value: 0x455f, lo: 0x9c, hi: 0x9d},
	{value: 0x456f, lo: 0x9f, hi: 0x9f},
	{value: 0x8132, lo: 0xbe, hi: 0xbe},
	// Block 0x12, offset 0x91
	{value: 0x0000, lo: 0x03},
	{value: 0x4597, lo: 0xb3, hi: 0xb3},
	{value: 0x459f, lo: 0xb6, hi: 0xb6},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	// Block 0x13, offset 0x95
	{value: 0x0008, lo: 0x03},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x4577, lo: 0x99, hi: 0x9b},
	{value: 0x458f, lo: 0x9e, hi: 0x9e},
	// Block 0x14, offset 0x99
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	// Block 0x15, offset 0x9b
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	// Block 0x16, offset 0x9d
	{value: 0x0000, lo: 0x08},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2cb9, lo: 0x88, hi: 0x88},
	{value: 0x2cb1, lo: 0x8b, hi: 0x8b},
	{value: 0x2cc1, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x96, hi: 0x97},
	{value: 0x45a7, lo: 0x9c, hi: 0x9c},
	{value: 0x45af, lo: 0x9d, hi: 0x9d},
	// Block 0x17, offset 0xa6
	{value: 0x0000, lo: 0x03},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x2cc9, lo: 0x94, hi: 0x94},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x18, offset 0xaa
	{value: 0x0000, lo: 0x06},
	{value: 0xa000, lo: 0x86, hi: 0x87},
	{value: 0x2cd1, lo: 0x8a, hi: 0x8a},
	{value: 0x2ce1, lo: 0x8b, hi: 0x8b},
	{value: 0x2cd9, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	// Block 0x19, offset 0xb1
	{value: 0x1801, lo: 0x04},
	{value: 0xa000, lo: 0x86, hi: 0x86},
	{value: 0x3ef3, lo: 0x88, hi: 0x88},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x8120, lo: 0x95, hi: 0x96},
	// Block 0x1a, offset 0xb6
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	{value: 0xa000, lo: 0xbf, hi: 0xbf},
	// Block 0x1b, offset 0xb9
	{value: 0x0000, lo: 0x09},
	{value: 0x2ce9, lo: 0x80, hi: 0x80},
	{value: 0x9900, lo: 0x82, hi: 0x82},
	{value: 0xa000, lo: 0x86, hi: 0x86},
	{value: 0x2cf1, lo: 0x87, hi: 0x87},
	{value: 0x2cf9, lo: 0x88, hi: 0x88},
	{value: 0x2f53, lo: 0x8a, hi: 0x8a},
	{value: 0x2ddb, lo: 0x8b, hi: 0x8b},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x95, hi: 0x96},
	// Block 0x1c, offset 0xc3
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0xbb, hi: 0xbc},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x1d, offset 0xc6
	{value: 0x0000, lo: 0x06},
	{value: 0xa000, lo: 0x86, hi: 0x87},
	{value: 0x2d01, lo: 0x8a, hi: 0x8a},
	{value: 0x2d11, lo: 0x8b, hi: 0x8b},
	{value: 0x2d09, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	// Block 0x1e, offset 0xcd
	{value: 0x6be7, lo: 0x07},
	{value: 0x9904, lo: 0x8a, hi: 0x8a},
	{value: 0x9900, lo: 0x8f, hi: 0x8f},
	{value: 0xa000, lo: 0x99, hi: 0x99},
	{value: 0x3efb, lo: 0x9a, hi: 0x9a},
	{value: 0x2f5b, lo: 0x9c, hi: 0x9c},
	{value: 0x2de6, lo: 0x9d, hi: 0x9d},
	{value: 0x2d19, lo: 0x9e, hi: 0x9f},
	// Block 0x1f, offset 0xd5
	{value: 0x0000, lo: 0x03},
	{value: 0x2624, lo: 0xb3, hi: 0xb3},
	{value: 0x8122, lo: 0xb8, hi: 0xb9},
	{value: 0x8104, lo: 0xba, hi: 0xba},
	// Block 0x20, offset 0xd9
	{value: 0x0000, lo: 0x01},
	{value: 0x8123, lo: 0x88, hi: 0x8b},
	// Block 0x21, offset 0xdb
	{value: 0x0000, lo: 0x03},
	{value: 0x2639, lo: 0xb3, hi: 0xb3},
	{value: 0x8124, lo: 0xb8, hi: 0xb9},
	{value: 0x8104, lo: 0xba, hi: 0xba},
	// Block 0x22, offset 0xdf
	{value: 0x0000, lo: 0x03},
	{value: 0x8125, lo: 0x88, hi: 0x8b},
	{value: 0x262b, lo: 0x9c, hi: 0x9c},
	{value: 0x2632, lo: 0x9d, hi: 0x9d},
	// Block 0x23, offset 0xe3
	{value: 0x0000, lo: 0x05},
	{value: 0x030b, lo: 0x8c, hi: 0x8c},
	{value: 0x812d, lo: 0x98, hi: 0x99},
	{value: 0x812d, lo: 0xb5, hi: 0xb5},
	{value: 0x812d, lo: 0xb7, hi: 0xb7},
	{value: 0x812b, lo: 0xb9, hi: 0xb9},
	// Block 0x24, offset 0xe9
	{value: 0x0000, lo: 0x10},
	{value: 0x2647, lo: 0x83, hi: 0x83},
	{value: 0x264e, lo: 0x8d, hi: 0x8d},
	{value: 0x2655, lo: 0x92, hi: 0x92},
	{value: 0x265c, lo: 0x97, hi: 0x97},
	{value: 0x2663, lo: 0x9c, hi: 0x9c},
	{value: 0x2640, lo: 0xa9, hi: 0xa9},
	{value: 0x8126, lo: 0xb1, hi: 0xb1},
	{value: 0x8127, lo: 0xb2, hi: 0xb2},
	{value: 0x4a87, lo: 0xb3, hi: 0xb3},
	{value: 0x8128, lo: 0xb4, hi: 0xb4},
	{value: 0x4a90, lo: 0xb5, hi: 0xb5},
	{value: 0x45b7, lo: 0xb6, hi: 0xb6},
	{value: 0x45f7, lo: 0xb7, hi: 0xb7},
	{value: 0x45bf, lo: 0xb8, hi: 0xb8},
	{value: 0x4602, lo: 0xb9, hi: 0xb9},
	{value: 0x8127, lo: 0xba, hi: 0xbd},
	// Block 0x25, offset 0xfa
	{value: 0x0000, lo: 0x0b},
	{value: 0x8127, lo: 0x80, hi: 0x80},
	{value: 0x4a99, lo: 0x81, hi: 0x81},
	{value: 0x8132, lo: 0x82, hi: 0x83},
	{value: 0x8104, lo: 0x84, hi: 0x84},
	{value: 0x8132, lo: 0x86, hi: 0x87},
	{value: 0x2671, lo: 0x93, hi: 0x93},
	{value: 0x2678, lo: 0x9d, hi: 0x9d},
	{value: 0x267f, lo: 0xa2, hi: 0xa2},
	{value: 0x2686, lo: 0xa7, hi: 0xa7},
	{value: 0x268d, lo: 0xac, hi: 0xac},
	{value: 0x266a, lo: 0xb9, hi: 0xb9},
	// Block 0x26, offset 0x106
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x86, hi: 0x86},
	// Block 0x27, offset 0x108
	{value: 0x0000, lo: 0x05},
	{value: 0xa000, lo: 0xa5, hi: 0xa5},
	{value: 0x2d21, lo: 0xa6, hi: 0xa6},
	{value: 0x9900, lo: 0xae, hi: 0xae},
	{value: 0x8102, lo: 0xb7, hi: 0xb7},
	{value: 0x8104, lo: 0xb9, hi: 0xba},
	// Block 0x28, offset 0x10e
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x8d, hi: 0x8d},
	// Block 0x29, offset 0x110
	{value: 0x0000, lo: 0x01},
	{value: 0x030f, lo: 0xbc, hi: 0xbc},
	// Block 0x2a, offset 0x112
	{value: 0x0000, lo: 0x01},
	{value: 0xa000, lo: 0x80, hi: 0x92},
	// Block 0x2b, offset 0x114
	{value: 0x0000, lo: 0x01},
	{value: 0xb900, lo: 0xa1, hi: 0xb5},
	// Block 0x2c, offset 0x116
	{value: 0x0000, lo: 0x01},
	{value: 0x9900, lo: 0xa8, hi: 0xbf},
	// Block 0x2d, offset 0x118
	{value: 0x0000, lo: 0x01},
	{value: 0x9900, lo: 0x80, hi: 0x82},
	// Block 0x2e, offset 0x11a
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x9d, hi: 0x9f},
	// Block 0x2f, offset 0x11c
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x94, hi: 0x94},
	{value: 0x8104, lo: 0xb4, hi: 0xb4},
	// Block 0x30, offset 0x11f
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x92, hi: 0x92},
	{value: 0x8132, lo: 0x9d, hi: 0x9d},
	// Block 0x31, offset 0x122
	{value: 0x0000, lo: 0x01},
	{value: 0x8131, lo: 0xa9, hi: 0xa9},
	// Block 0x32, offset 0x124
	{value: 0x0004, lo: 0x02},
	{value: 0x812e, lo: 0xb9, hi: 0xba},
	{value: 0x812d, lo: 0xbb, hi: 0xbb},
	// Block 0x33, offset 0x127
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0x97, hi: 0x97},
	{value: 0x812d, lo: 0x98, hi: 0x98},
	// Block 0x34, offset 0x12a
	{value: 0x0000, lo: 0x03},
	{value: 0x8104, lo: 0xa0, hi: 0xa0},
	{value: 0x8132, lo: 0xb5, hi: 0xbc},
	{value: 0x812d, lo: 0xbf, hi: 0xbf},
	// Block 0x35, offset 0x12e
	{value: 0x0000, lo: 0x04},
	{value: 0x8132, lo: 0xb0, hi: 0xb4},
	{value: 0x812d, lo: 0xb5, hi: 0xba},
	{value: 0x8132, lo: 0xbb, hi: 0xbc},
	{value: 0x812d, lo: 0xbd, hi: 0xbd},
	// Block 0x36, offset 0x133
	{value: 0x0000, lo: 0x08},
	{value: 0x2d69, lo: 0x80, hi: 0x80},
	{value: 0x2d71, lo: 0x81, hi: 0x81},
	{value: 0xa000, lo: 0x82, hi: 0x82},
	{value: 0x2d79, lo: 0x83, hi: 0x83},
	{value: 0x8104, lo: 0x84, hi: 0x84},
	{value: 0x8132, lo: 0xab, hi: 0xab},
	{value: 0x812d, lo: 0xac, hi: 0xac},
	{value: 0x8132, lo: 0xad, hi: 0xb3},
	// Block 0x37, offset 0x13c
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xaa, hi: 0xab},
	// Block 0x38, offset 0x13e
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xa6, hi: 0xa6},
	{value: 0x8104, lo: 0xb2, hi: 0xb3},
	// Block 0x39, offset 0x141
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0xb7, hi: 0xb7},
	// Block 0x3a, offset 0x143
	{value: 0x0000, lo: 0x0a},
	{value: 0x8132, lo: 0x90, hi: 0x92},
	{value: 0x8101, lo: 0x94, hi: 0x94},
	{value: 0x812d, lo: 0x95, hi: 0x99},
	{value: 0x8132, lo: 0x9a, hi: 0x9b},
	{value: 0x812d, lo: 0x9c, hi: 0x9f},
	{value: 0x8132, lo: 0xa0, hi: 0xa0},
	{value: 0x8101, lo: 0xa2, hi: 0xa8},
	{value: 0x812d, lo: 0xad, hi: 0xad},
	{value: 0x8132, lo: 0xb4, hi: 0xb4},
	{value: 0x8132, lo: 0xb8, hi: 0xb9},
	// Block 0x3b, offset 0x14e
	{value: 0x0002, lo: 0x0a},
	{value: 0x0043, lo: 0xac, hi: 0xac},
	{value: 0x00d1, lo: 0xad, hi: 0xad},
	{value: 0x0045, lo: 0xae, hi: 0xae},
	{value: 0x0049, lo: 0xb0, hi: 0xb1},
	{value: 0x00e6, lo: 0xb2, hi: 0xb2},
	{value: 0x004f, lo: 0xb3, hi: 0xba},
	{value: 0x005f, lo: 0xbc, hi: 0xbc},
	{value: 0x00ef, lo: 0xbd, hi: 0xbd},
	{value: 0x0061, lo: 0xbe, hi: 0xbe},
	{value: 0x0065, lo: 0xbf, hi: 0xbf},
	// Block 0x3c, offset 0x159
	{value: 0x0000, lo: 0x0d},
	{value: 0x0001, lo: 0x80, hi: 0x8a},
	{value: 0x043b, lo: 0x91, hi: 0x91},
	{value: 0x429e, lo: 0x97, hi: 0x97},
	{value: 0x001d, lo: 0xa4, hi: 0xa4},
	{value: 0x1873, lo: 0xa5, hi: 0xa5},
	{value: 0x1b5f, lo: 0xa6, hi: 0xa6},
	{value: 0x0001, lo: 0xaf, hi: 0xaf},
	{value: 0x2694, lo: 0xb3, hi: 0xb3},
	{value: 0x2801, lo: 0xb4, hi: 0xb4},
	{value: 0x269b, lo: 0xb6, hi: 0xb6},
	{value: 0x280b, lo: 0xb7, hi: 0xb7},
	{value: 0x186d, lo: 0xbc, hi: 0xbc},
	{value: 0x426c, lo: 0xbe, hi: 0xbe},
	// Block 0x3d, offset 0x167
	{value: 0x0002, lo: 0x0d},
	{value: 0x1933, lo: 0x87, hi: 0x87},
	{value: 0x1930, lo: 0x88, hi: 0x88},
	{value: 0x1870, lo: 0x89, hi: 0x89},
	{value: 0x2991, lo: 0x97, hi: 0x97},
	{value: 0x0001, lo: 0x9f, hi: 0x9f},
	{value: 0x0021, lo: 0xb0, hi: 0xb0},
	{value: 0x0093, lo: 0xb1, hi: 0xb1},
	{value: 0x0029, lo: 0xb4, hi: 0xb9},
	{value: 0x0017, lo: 0xba, hi: 0xba},
	{value: 0x0467, lo: 0xbb, hi: 0xbb},
	{value: 0x003b, lo: 0xbc, hi: 0xbc},
	{value: 0x0011, lo: 0xbd, hi: 0xbe},
	{value: 0x009d, lo: 0xbf, hi: 0xbf},
	// Block 0x3e, offset 0x175
	{value: 0x0002, lo: 0x0f},
	{value: 0x0021, lo: 0x80, hi: 0x89},
	{value: 0x0017, lo: 0x8a, hi: 0x8a},
	{value: 0x0467, lo: 0x8b, hi: 0x8b},
	{value: 0x003b, lo: 0x8c, hi: 0x8c},
	{value: 0x0011, lo: 0x8d, hi: 0x8e},
	{value: 0x0083, lo: 0x90, hi: 0x90},
	{value: 0x008b, lo: 0x91, hi: 0x91},
	{value: 0x009f, lo: 0x92, hi: 0x92},
	{value: 0x00b1, lo: 0x93, hi: 0x93},
	{value: 0x0104, lo: 0x94, hi: 0x94},
	{value: 0x0091, lo: 0x95, hi: 0x95},
	{value: 0x0097, lo: 0x96, hi: 0x99},
	{value: 0x00a1, lo: 0x9a, hi: 0x9a},
	{value: 0x00a7, lo: 0x9b, hi: 0x9c},
	{value: 0x199c, lo: 0xa8, hi: 0xa8},
	// Block 0x3f, offset 0x185
	{value: 0x0000, lo: 0x0d},
	{value: 0x8132, lo: 0x90, hi: 0x91},
	{value: 0x8101, lo: 0x92, hi: 0x93},
	{value: 0x8132, lo: 0x94, hi: 0x97},
	{value: 0x8101, lo: 0x98, hi: 0x9a},
	{value: 0x8132, lo: 0x9b, hi: 0x9c},
	{value: 0x8132, lo: 0xa1, hi: 0xa1},
	{value: 0x8101, lo: 0xa5, hi: 0xa6},
	{value: 0x8132, lo: 0xa7, hi: 0xa7},
	{value: 0x812d, lo: 0xa8, hi: 0xa8},
	{value: 0x8132, lo: 0xa9, hi: 0xa9},
	{value: 0x8101, lo: 0xaa, hi: 0xab},
	{value: 0x812d, lo: 0xac, hi: 0xaf},
	{value: 0x8132, lo: 0xb0, hi: 0xb0},
	// Block 0x40, offset 0x193
	{value: 0x0007, lo: 0x06},
	{value: 0x2183, lo: 0x89, hi: 0x89},
	{value: 0xa000, lo: 0x90, hi: 0x90},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0xa000, lo: 0x94, hi: 0x94},
	{value: 0x3bbc, lo: 0x9a, hi: 0x9b},
	{value: 0x3bca, lo: 0xae, hi: 0xae},
	// Block 0x41, offset 0x19a
	{value: 0x000e, lo: 0x05},
	{value: 0x3bd1, lo: 0x8d, hi: 0x8e},
	{value: 0x3bd8, lo: 0x8f, hi: 0x8f},
	{value: 0xa000, lo: 0x90, hi: 0x90},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0xa000, lo: 0x94, hi: 0x94},
	// Block 0x42, offset 0x1a0
	{value: 0x0173, lo: 0x0e},
	{value: 0xa000, lo: 0x83, hi: 0x83},
	{value: 0x3be6, lo: 0x84, hi: 0x84},
	{value: 0xa000, lo: 0x88, hi: 0x88},
	{value: 0x3bed, lo: 0x89, hi: 0x89},
	{value: 0xa000, lo: 0x8b, hi: 0x8b},
	{value: 0x3bf4, lo: 0x8c, hi: 0x8c},
	{value: 0xa000, lo: 0xa3, hi: 0xa3},
	{value: 0x3bfb, lo: 0xa4, hi: 0xa4},
	{value: 0xa000, lo: 0xa5, hi: 0xa5},
	{value: 0x3c02, lo: 0xa6, hi: 0xa6},
	{value: 0x26a2, lo: 0xac, hi: 0xad},
	{value: 0x26a9, lo: 0xaf, hi: 0xaf},
	{value: 0x281f, lo: 0xb0, hi: 0xb0},
	{value: 0xa000, lo: 0xbc, hi: 0xbc},
	// Block 0x43, offset 0x1af
	{value: 0x0007, lo: 0x03},
	{value: 0x3c6b, lo: 0xa0, hi: 0xa1},
	{value: 0x3c95, lo: 0xa2, hi: 0xa3},
	{value: 0x3cbf, lo: 0xaa, hi: 0xad},
	// Block 0x44, offset 0x1b3
	{value: 0x0004, lo: 0x01},
	{value: 0x048b, lo: 0xa9, hi: 0xaa},
	// Block 0x45, offset 0x1b5
	{value: 0x0002, lo: 0x03},
	{value: 0x0057, lo: 0x80, hi: 0x8f},
	{value: 0x0083, lo: 0x90, hi: 0xa9},
	{value: 0x0021, lo: 0xaa, hi: 0xaa},
	// Block 0x46, offset 0x1b9
	{value: 0x0000, lo: 0x01},
	{value: 0x299e, lo: 0x8c, hi: 0x8c},
	// Block 0x47, offset 0x1bb
	{value: 0x0266, lo: 0x02},
	{value: 0x1b8f, lo: 0xb4, hi: 0xb4},
	{value: 0x192d, lo: 0xb5, hi: 0xb6},
	// Block 0x48, offset 0x1be
	{value: 0x0000, lo: 0x01},
	{value: 0x44e0, lo: 0x9c, hi: 0x9c},
	// Block 0x49, offset 0x1c0
	{value: 0x0000, lo: 0x02},
	{value: 0x0095, lo: 0xbc, hi: 0xbc},
	{value: 0x006d, lo: 0xbd, hi: 0xbd},
	// Block 0x4a, offset 0x1c3
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xaf, hi: 0xb1},
	// Block 0x4b, offset 0x1c5
	{value: 0x0000, lo: 0x02},
	{value: 0x047f, lo: 0xaf, hi: 0xaf},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x4c, offset 0x1c8
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xa0, hi: 0xbf},
	// Block 0x4d, offset 0x1ca
	{value: 0x0000, lo: 0x01},
	{value: 0x0dc3, lo: 0x9f, hi: 0x9f},
	// Block 0x4e, offset 0x1cc
	{value: 0x0000, lo: 0x01},
	{value: 0x162f, lo: 0xb3, hi: 0xb3},
	// Block 0x4f, offset 0x1ce
	{value: 0x0004, lo: 0x0b},
	{value: 0x1597, lo: 0x80, hi: 0x82},
	{value: 0x15af, lo: 0x83, hi: 0x83},
	{value: 0x15c7, lo: 0x84, hi: 0x85},
	{value: 0x15d7, lo: 0x86, hi: 0x89},
	{value: 0x15eb, lo: 0x8a, hi: 0x8c},
	{value: 0x15ff, lo: 0x8d, hi: 0x8d},
	{value: 0x1607, lo: 0x8e, hi: 0x8e},
	{value: 0x160f, lo: 0x8f, hi: 0x90},
	{value: 0x161b, lo: 0x91, hi: 0x93},
	{value: 0x162b, lo: 0x94, hi: 0x94},
	{value: 0x1633, lo: 0x95, hi: 0x95},
	// Block 0x50, offset 0x1da
	{value: 0x0004, lo: 0x09},
	{value: 0x0001, lo: 0x80, hi: 0x80},
	{value: 0x812c, lo: 0xaa, hi: 0xaa},
	{value: 0x8131, lo: 0xab, hi: 0xab},
	{value: 0x8133, lo: 0xac, hi: 0xac},
	{value: 0x812e, lo: 0xad, hi: 0xad},
	{value: 0x812f, lo: 0xae, hi: 0xae},
	{value: 0x812f, lo: 0xaf, hi: 0xaf},
	{value: 0x04b3, lo: 0xb6, hi: 0xb6},
	{value: 0x0887, lo: 0xb8, hi: 0xba},
	// Block 0x51, offset 0x1e4
	{value: 0x0006, lo: 0x09},
	{value: 0x0313, lo: 0xb1, hi: 0xb1},
	{value: 0x0317, lo: 0xb2, hi: 0xb2},
	{value: 0x4a3e, lo: 0xb3, hi: 0xb3},
	{value: 0x031b, lo: 0xb4, hi: 0xb4},
	{value: 0x4a44, lo: 0xb5, hi: 0xb6},
	{value: 0x031f, lo: 0xb7, hi: 0xb7},
	{value: 0x0323, lo: 0xb8, hi: 0xb8},
	{value: 0x0327, lo: 0xb9, hi: 0xb9},
	{value: 0x4a50, lo: 0xba, hi: 0xbf},
	// Block 0x52, offset 0x1ee
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0xaf, hi: 0xaf},
	{value: 0x8132, lo: 0xb4, hi: 0xbd},
	// Block 0x53, offset 0x1f1
	{value: 0x0000, lo: 0x03},
	{value: 0x020f, lo: 0x9c, hi: 0x9c},
	{value: 0x0212, lo: 0x9d, hi: 0x9d},
	{value: 0x8132, lo: 0x9e, hi: 0x9f},
	// Block 0x54, offset 0x1f5
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xb0, hi: 0xb1},
	// Block 0x55, offset 0x1f7
	{value: 0x0000, lo: 0x01},
	{value: 0x163b, lo: 0xb0, hi: 0xb0},
	// Block 0x56, offset 0x1f9
	{value: 0x000c, lo: 0x01},
	{value: 0x00d7, lo: 0xb8, hi: 0xb9},
	// Block 0x57, offset 0x1fb
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x86, hi: 0x86},
	// Block 0x58, offset 0x1fd
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x84, hi: 0x84},
	{value: 0x8132, lo: 0xa0, hi: 0xb1},
	// Block 0x59, offset 0x200
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0xab, hi: 0xad},
	// Block 0x5a, offset 0x202
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x93, hi: 0x93},
	// Block 0x5b, offset 0x204
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0xb3, hi: 0xb3},
	// Block 0x5c, offset 0x206
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x80, hi: 0x80},
	// Block 0x5d, offset 0x208
	{value: 0x0000, lo: 0x05},
	{value: 0x8132, lo: 0xb0, hi: 0xb0},
	{value: 0x8132, lo: 0xb2, hi: 0xb3},
	{value: 0x812d, lo: 0xb4, hi: 0xb4},
	{value: 0x8132, lo: 0xb7, hi: 0xb8},
	{value: 0x8132, lo: 0xbe, hi: 0xbf},
	// Block 0x5e, offset 0x20e
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0x81, hi: 0x81},
	{value: 0x8104, lo: 0xb6, hi: 0xb6},
	// Block 0x5f, offset 0x211
	{value: 0x0008, lo: 0x03},
	{value: 0x1637, lo: 0x9c, hi: 0x9d},
	{value: 0x0125, lo: 0x9e, hi: 0x9e},
	{value: 0x1643, lo: 0x9f, hi: 0x9f},
	// Block 0x60, offset 0x215
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xad, hi: 0xad},
	// Block 0x61, offset 0x217
	{value: 0x0000, lo: 0x06},
	{value: 0xe500, lo: 0x80, hi: 0x80},
	{value: 0xc600, lo: 0x81, hi: 0x9b},
	{value: 0xe500, lo: 0x9c, hi: 0x9c},
	{value: 0xc600, lo: 0x9d, hi: 0xb7},
	{value: 0xe500, lo: 0xb8, hi: 0xb8},
	{value: 0xc600, lo: 0xb9, hi: 0xbf},
	// Block 0x62, offset 0x21e
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x93},
	{value: 0xe500, lo: 0x94, hi: 0x94},
	{value: 0xc600, lo: 0x95, hi: 0xaf},
	{value: 0xe500, lo: 0xb0, hi: 0xb0},
	{value: 0xc600, lo: 0xb1, hi: 0xbf},
	// Block 0x63, offset 0x224
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x8b},
	{value: 0xe500, lo: 0x8c, hi: 0x8c},
	{value: 0xc600, lo: 0x8d, hi: 0xa7},
	{value: 0xe500, lo: 0xa8, hi: 0xa8},
	{value: 0xc600, lo: 0xa9, hi: 0xbf},
	// Block 0x64, offset 0x22a
	{value: 0x0000, lo: 0x07},
	{value: 0xc600, lo: 0x80, hi: 0x83},
	{value: 0xe500, lo: 0x84, hi: 0x84},
	{value: 0xc600, lo: 0x85, hi: 0x9f},
	{value: 0xe500, lo: 0xa0, hi: 0xa0},
	{value: 0xc600, lo: 0xa1, hi: 0xbb},
	{value: 0xe500, lo: 0xbc, hi: 0xbc},
	{value: 0xc600, lo: 0xbd, hi: 0xbf},
	// Block 0x65, offset 0x232
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x97},
	{value: 0xe500, lo: 0x98, hi: 0x98},
	{value: 0xc600, lo: 0x99, hi: 0xb3},
	{value: 0xe500, lo: 0xb4, hi: 0xb4},
	{value: 0xc600, lo: 0xb5, hi: 0xbf},
	// Block 0x66, offset 0x238
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x8f},
	{value: 0xe500, lo: 0x90, hi: 0x90},
	{value: 0xc600, lo: 0x91, hi: 0xab},
	{value: 0xe500, lo: 0xac, hi: 0xac},
	{value: 0xc600, lo: 0xad, hi: 0xbf},
	// Block 0x67, offset 0x23e
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x87},
	{value: 0xe500, lo: 0x88, hi: 0x88},
	{value: 0xc600, lo: 0x89, hi: 0xa3},
	{value: 0xe500, lo: 0xa4, hi: 0xa4},
	{value: 0xc600, lo: 0xa5, hi: 0xbf},
	// Block 0x68, offset 0x244
	{value: 0x0000, lo: 0x03},
	{value: 0xc600, lo: 0x80, hi: 0x87},
	{value: 0xe500, lo: 0x88, hi: 0x88},
	{value: 0xc600, lo: 0x89, hi: 0xa3},
	// Block 0x69, offset 0x248
	{value: 0x0002, lo: 0x01},
	{value: 0x0003, lo: 0x81, hi: 0xbf},
	// Block 0x6a, offset 0x24a
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0xbd, hi: 0xbd},
	// Block 0x6b, offset 0x24c
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0xa0, hi: 0xa0},
	// Block 0x6c, offset 0x24e
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xb6, hi: 0xba},
	// Block 0x6d, offset 0x250
	{value: 0x002c, lo: 0x05},
	{value: 0x812d, lo: 0x8d, hi: 0x8d},
	{value: 0x8132, lo: 0x8f, hi: 0x8f},
	{value: 0x8132, lo: 0xb8, hi: 0xb8},
	{value: 0x8101, lo: 0xb9, hi: 0xba},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x6e, offset 0x256
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0xa5, hi: 0xa5},
	{value: 0x812d, lo: 0xa6, hi: 0xa6},
	// Block 0x6f, offset 0x259
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xa4, hi: 0xa7},
	// Block 0x70, offset 0x25b
	{value: 0x0000, lo: 0x05},
	{value: 0x812d, lo: 0x86, hi: 0x87},
	{value: 0x8132, lo: 0x88, hi: 0x8a},
	{value: 0x812d, lo: 0x8b, hi: 0x8b},
	{value: 0x8132, lo: 0x8c, hi: 0x8c},
	{value: 0x812d, lo: 0x8d, hi: 0x90},
	// Block 0x71, offset 0x261
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x86, hi: 0x86},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x72, offset 0x264
	{value: 0x17fe, lo: 0x07},
	{value: 0xa000, lo: 0x99, hi: 0x99},
	{value: 0x423b, lo: 0x9a, hi: 0x9a},
	{value: 0xa000, lo: 0x9b, hi: 0x9b},
	{value: 0x4245, lo: 0x9c, hi: 0x9c},
	{value: 0xa000, lo: 0xa5, hi: 0xa5},
	{value: 0x424f, lo: 0xab, hi: 0xab},
	{value: 0x8104, lo: 0xb9, hi: 0xba},
	// Block 0x73, offset 0x26c
	{value: 0x0000, lo: 0x06},
	{value: 0x8132, lo: 0x80, hi: 0x82},
	{value: 0x9900, lo: 0xa7, hi: 0xa7},
	{value: 0x2d81, lo: 0xae, hi: 0xae},
	{value: 0x2d8b, lo: 0xaf, hi: 0xaf},
	{value: 0xa000, lo: 0xb1, hi: 0xb2},
	{value: 0x8104, lo: 0xb3, hi: 0xb4},
	// Block 0x74, offset 0x273
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x80, hi: 0x80},
	{value: 0x8102, lo: 0x8a, hi: 0x8a},
	// Block 0x75, offset 0x276
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0xb5, hi: 0xb5},
	{value: 0x8102, lo: 0xb6, hi: 0xb6},
	// Block 0x76, offset 0x279
	{value: 0x0002, lo: 0x01},
	{value: 0x8102, lo: 0xa9, hi: 0xaa},
	// Block 0x77, offset 0x27b
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xbb, hi: 0xbc},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x78, offset 0x27e
	{value: 0x0000, lo: 0x07},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2d95, lo: 0x8b, hi: 0x8b},
	{value: 0x2d9f, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	{value: 0x8132, lo: 0xa6, hi: 0xac},
	{value: 0x8132, lo: 0xb0, hi: 0xb4},
	// Block 0x79, offset 0x286
	{value: 0x0000, lo: 0x03},
	{value: 0x8104, lo: 0x82, hi: 0x82},
	{value: 0x8102, lo: 0x86, hi: 0x86},
	{value: 0x8132, lo: 0x9e, hi: 0x9e},
	// Block 0x7a, offset 0x28a
	{value: 0x6b57, lo: 0x06},
	{value: 0x9900, lo: 0xb0, hi: 0xb0},
	{value: 0xa000, lo: 0xb9, hi: 0xb9},
	{value: 0x9900, lo: 0xba, hi: 0xba},
	{value: 0x2db3, lo: 0xbb, hi: 0xbb},
	{value: 0x2da9, lo: 0xbc, hi: 0xbd},
	{value: 0x2dbd, lo: 0xbe, hi: 0xbe},
	// Block 0x7b, offset 0x291
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x82, hi: 0x82},
	{value: 0x8102, lo: 0x83, hi: 0x83},
	// Block 0x7c, offset 0x294
	{value: 0x0000, lo: 0x05},
	{value: 0x9900, lo: 0xaf, hi: 0xaf},
	{value: 0xa000, lo: 0xb8, hi: 0xb9},
	{value: 0x2dc7, lo: 0xba, hi: 0xba},
	{value: 0x2dd1, lo: 0xbb, hi: 0xbb},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x7d, offset 0x29a
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0x80, hi: 0x80},
	// Block 0x7e, offset 0x29c
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x7f, offset 0x29e
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0xb6, hi: 0xb6},
	{value: 0x8102, lo: 0xb7, hi: 0xb7},
	// Block 0x80, offset 0x2a1
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xab, hi: 0xab},
	// Block 0x81, offset 0x2a3
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0xb9, hi: 0xb9},
	{value: 0x8102, lo: 0xba, hi: 0xba},
	// Block 0x82, offset 0x2a6
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xa0, hi: 0xa0},
	// Block 0x83, offset 0x2a8
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xb4, hi: 0xb4},
	// Block 0x84, offset 0x2aa
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x87, hi: 0x87},
	// Block 0x85, offset 0x2ac
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x99, hi: 0x99},
	// Block 0x86, offset 0x2ae
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0x82, hi: 0x82},
	{value: 0x8104, lo: 0x84, hi: 0x85},
	// Block 0x87, offset 0x2b1
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x97, hi: 0x97},
	// Block 0x88, offset 0x2b3
	{value: 0x0000, lo: 0x01},
	{value: 0x8101, lo: 0xb0, hi: 0xb4},
	// Block 0x89, offset 0x2b5
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xb0, hi: 0xb6},
	// Block 0x8a, offset 0x2b7
	{value: 0x0000, lo: 0x01},
	{value: 0x8101, lo: 0x9e, hi: 0x9e},
	// Block 0x8b, offset 0x2b9
	{value: 0x0000, lo: 0x0c},
	{value: 0x45cf, lo: 0x9e, hi: 0x9e},
	{value: 0x45d9, lo: 0x9f, hi: 0x9f},
	{value: 0x460d, lo: 0xa0, hi: 0xa0},
	{value: 0x461b, lo: 0xa1, hi: 0xa1},
	{value: 0x4629, lo: 0xa2, hi: 0xa2},
	{value: 0x4637, lo: 0xa3, hi: 0xa3},
	{value: 0x4645, lo: 0xa4, hi: 0xa4},
	{value: 0x812b, lo: 0xa5, hi: 0xa6},
	{value: 0x8101, lo: 0xa7, hi: 0xa9},
	{value: 0x8130, lo: 0xad, hi: 0xad},
	{value: 0x812b, lo: 0xae, hi: 0xb2},
	{value: 0x812d, lo: 0xbb, hi: 0xbf},
	// Block 0x8c, offset 0x2c6
	{value: 0x0000, lo: 0x09},
	{value: 0x812d, lo: 0x80, hi: 0x82},
	{value: 0x8132, lo: 0x85, hi: 0x89},
	{value: 0x812d, lo: 0x8a, hi: 0x8b},
	{value: 0x8132, lo: 0xaa, hi: 0xad},
	{value: 0x45e3, lo: 0xbb, hi: 0xbb},
	{value: 0x45ed, lo: 0xbc, hi: 0xbc},
	{value: 0x4653, lo: 0xbd, hi: 0xbd},
	{value: 0x466f, lo: 0xbe, hi: 0xbe},
	{value: 0x4661, lo: 0xbf, hi: 0xbf},
	// Block 0x8d, offset 0x2d0
	{value: 0x0000, lo: 0x01},
	{value: 0x467d, lo: 0x80, hi: 0x80},
	// Block 0x8e, offset 0x2d2
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x82, hi: 0x84},
	// Block 0x8f, offset 0x2d4
	{value: 0x0002, lo: 0x03},
	{value: 0x0043, lo: 0x80, hi: 0x99},
	{value: 0x0083, lo: 0x9a, hi: 0xb3},
	{value: 0x0043, lo: 0xb4, hi: 0xbf},
	// Block 0x90, offset 0x2d8
	{value: 0x0002, lo: 0x04},
	{value: 0x005b, lo: 0x80, hi: 0x8d},
	{value: 0x0083, lo: 0x8e, hi: 0x94},
	{value: 0x0093, lo: 0x96, hi: 0xa7},
	{value: 0x0043, lo: 0xa8, hi: 0xbf},
	// Block 0x91, offset 0x2dd
	{value: 0x0002, lo: 0x0b},
	{value: 0x0073, lo: 0x80, hi: 0x81},
	{value: 0x0083, lo: 0x82, hi: 0x9b},
	{value: 0x0043, lo: 0x9c, hi: 0x9c},
	{value: 0x0047, lo: 0x9e, hi: 0x9f},
	{value: 0x004f, lo: 0xa2, hi: 0xa2},
	{value: 0x0055, lo: 0xa5, hi: 0xa6},
	{value: 0x005d, lo: 0xa9, hi: 0xac},
	{value: 0x0067, lo: 0xae, hi: 0xb5},
	{value: 0x0083, lo: 0xb6, hi: 0xb9},
	{value: 0x008d, lo: 0xbb, hi: 0xbb},
	{value: 0x0091, lo: 0xbd, hi: 0xbf},
	// Block 0x92, offset 0x2e9
	{value: 0x0002, lo: 0x04},
	{value: 0x0097, lo: 0x80, hi: 0x83},
	{value: 0x00a1, lo: 0x85, hi: 0x8f},
	{value: 0x0043, lo: 0x90, hi: 0xa9},
	{value: 0x0083, lo: 0xaa, hi: 0xbf},
	// Block 0x93, offset 0x2ee
	{value: 0x0002, lo: 0x08},
	{value: 0x00af, lo: 0x80, hi: 0x83},
	{value: 0x0043, lo: 0x84, hi: 0x85},
	{value: 0x0049, lo: 0x87, hi: 0x8a},
	{value: 0x0055, lo: 0x8d, hi: 0x94},
	{value: 0x0067, lo: 0x96, hi: 0x9c},
	{value: 0x0083, lo: 0x9e, hi: 0xb7},
	{value: 0x0043, lo: 0xb8, hi: 0xb9},
	{value: 0x0049, lo: 0xbb, hi: 0xbe},
	// Block 0x94, offset 0x2f7
	{value: 0x0002, lo: 0x05},
	{value: 0x0053, lo: 0x80, hi: 0x84},
	{value: 0x005f, lo: 0x86, hi: 0x86},
	{value: 0x0067, lo: 0x8a, hi: 0x90},
	{value: 0x0083, lo: 0x92, hi: 0xab},
	{value: 0x0043, lo: 0xac, hi: 0xbf},
	// Block 0x95, offset 0x2fd
	{value: 0x0002, lo: 0x04},
	{value: 0x006b, lo: 0x80, hi: 0x85},
	{value: 0x0083, lo: 0x86, hi: 0x9f},
	{value: 0x0043, lo: 0xa0, hi: 0xb9},
	{value: 0x0083, lo: 0xba, hi: 0xbf},
	// Block 0x96, offset 0x302
	{value: 0x0002, lo: 0x03},
	{value: 0x008f, lo: 0x80, hi: 0x93},
	{value: 0x0043, lo: 0x94, hi: 0xad},
	{value: 0x0083, lo: 0xae, hi: 0xbf},
	// Block 0x97, offset 0x306
	{value: 0x0002, lo: 0x04},
	{value: 0x00a7, lo: 0x80, hi: 0x87},
	{value: 0x0043, lo: 0x88, hi: 0xa1},
	{value: 0x0083, lo: 0xa2, hi: 0xbb},
	{value: 0x0043, lo: 0xbc, hi: 0xbf},
	// Block 0x98, offset 0x30b
	{value: 0x0002, lo: 0x03},
	{value: 0x004b, lo: 0x80, hi: 0x95},
	{value: 0x0083, lo: 0x96, hi: 0xaf},
	{value: 0x0043, lo: 0xb0, hi: 0xbf},
	// Block 0x99, offset 0x30f
	{value: 0x0003, lo: 0x0f},
	{value: 0x01b8, lo: 0x80, hi: 0x80},
	{value: 0x045f, lo: 0x81, hi: 0x81},
	{value: 0x01bb, lo: 0x82, hi: 0x9a},
	{value: 0x045b, lo: 0x9b, hi: 0x9b},
	{value: 0x01c7, lo: 0x9c, hi: 0x9c},
	{value: 0x01d0, lo: 0x9d, hi: 0x9d},
	{value: 0x01d6, lo: 0x9e, hi: 0x9e},
	{value: 0x01fa, lo: 0x9f, hi: 0x9f},
	{value: 0x01eb, lo: 0xa0, hi: 0xa0},
	{value: 0x01e8, lo: 0xa1, hi: 0xa1},
	{value: 0x0173, lo: 0xa2, hi: 0xb2},
	{value: 0x0188, lo: 0xb3, hi: 0xb3},
	{value: 0x01a6, lo: 0xb4, hi: 0xba},
	{value: 0x045f, lo: 0xbb, hi: 0xbb},
	{value: 0x01bb, lo: 0xbc, hi: 0xbf},
	// Block 0x9a, offset 0x31f
	{value: 0x0003, lo: 0x0d},
	{value: 0x01c7, lo: 0x80, hi: 0x94},
	{value: 0x045b, lo: 0x95, hi: 0x95},
	{value: 0x01c7, lo: 0x96, hi: 0x96},
	{value: 0x01d0, lo: 0x97, hi: 0x97},
	{value: 0x01d6, lo: 0x98, hi: 0x98},
	{value: 0x01fa, lo: 0x99, hi: 0x99},
	{value: 0x01eb, lo: 0x9a, hi: 0x9a},
	{value: 0x01e8, lo: 0x9b, hi: 0x9b},
	{value: 0x0173, lo: 0x9c, hi: 0xac},
	{value: 0x0188, lo: 0xad, hi: 0xad},
	{value: 0x01a6, lo: 0xae, hi: 0xb4},
	{value: 0x045f, lo: 0xb5, hi: 0xb5},
	{value: 0x01bb, lo: 0xb6, hi: 0xbf},
	// Block 0x9b, offset 0x32d
	{value: 0x0003, lo: 0x0d},
	{value: 0x01d9, lo: 0x80, hi: 0x8e},
	{value: 0x045b, lo: 0x8f, hi: 0x8f},
	{value: 0x01c7, lo: 0x90, hi: 0x90},
	{value: 0x01d0, lo: 0x91, hi: 0x91},
	{value: 0x01d6, lo: 0x92, hi: 0x92},
	{value: 0x01fa, lo: 0x93, hi: 0x93},
	{value: 0x01eb, lo: 0x94, hi: 0x94},
	{value: 0x01e8, lo: 0x95, hi: 0x95},
	{value: 0x0173, lo: 0x96, hi: 0xa6},
	{value: 0x0188, lo: 0xa7, hi: 0xa7},
	{value: 0x01a6, lo: 0xa8, hi: 0xae},
	{value: 0x045f, lo: 0xaf, hi: 0xaf},
	{value: 0x01bb, lo: 0xb0, hi: 0xbf},
	// Block 0x9c, offset 0x33b
	{value: 0x0003, lo: 0x0d},
	{value: 0x01eb, lo: 0x80, hi: 0x88},
	{value: 0x045b, lo: 0x89, hi: 0x89},
	{value: 0x01c7, lo: 0x8a, hi: 0x8a},
	{value: 0x01d0, lo: 0x8b, hi: 0x8b},
	{value: 0x01d6, lo: 0x8c, hi: 0x8c},
	{value: 0x01fa, lo: 0x8d, hi: 0x8d},
	{value: 0x01eb, lo: 0x8e, hi: 0x8e},
	{value: 0x01e8, lo: 0x8f, hi: 0x8f},
	{value: 0x0173, lo: 0x90, hi: 0xa0},
	{value: 0x0188, lo: 0xa1, hi: 0xa1},
	{value: 0x01a6, lo: 0xa2, hi: 0xa8},
	{value: 0x045f, lo: 0xa9, hi: 0xa9},
	{value: 0x01bb, lo: 0xaa, hi: 0xbf},
	// Block 0x9d, offset 0x349
	{value: 0x0000, lo: 0x05},
	{value: 0x8132, lo: 0x80, hi: 0x86},
	{value: 0x8132, lo: 0x88, hi: 0x98},
	{value: 0x8132, lo: 0x9b, hi: 0xa1},
	{value: 0x8132, lo: 0xa3, hi: 0xa4},
	{value: 0x8132, lo: 0xa6, hi: 0xaa},
	// Block 0x9e, offset 0x34f
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xac, hi: 0xaf},
	// Block 0x9f, offset 0x351
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x90, hi: 0x96},
	// Block 0xa0, offset 0x353
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0x84, hi: 0x89},
	{value: 0x8102, lo: 0x8a, hi: 0x8a},
	// Block 0xa1, offset 0x356
	{value: 0x0002, lo: 0x0a},
	{value: 0x0063, lo: 0x80, hi: 0x89},
	{value: 0x1951, lo: 0x8a, hi: 0x8a},
	{value: 0x1984, lo: 0x8b, hi: 0x8b},
	{value: 0x199f, lo: 0x8c, hi: 0x8c},
	{value: 0x19a5, lo: 0x8d, hi: 0x8d},
	{value: 0x1bc3, lo: 0x8e, hi: 0x8e},
	{value: 0x19b1, lo: 0x8f, hi: 0x8f},
	{value: 0x197b, lo: 0xaa, hi: 0xaa},
	{value: 0x197e, lo: 0xab, hi: 0xab},
	{value: 0x1981, lo: 0xac, hi: 0xac},
	// Block 0xa2, offset 0x361
	{value: 0x0000, lo: 0x01},
	{value: 0x193f, lo: 0x90, hi: 0x90},
	// Block 0xa3, offset 0x363
	{value: 0x0028, lo: 0x09},
	{value: 0x2865, lo: 0x80, hi: 0x80},
	{value: 0x2829, lo: 0x81, hi: 0x81},
	{value: 0x2833, lo: 0x82, hi: 0x82},
	{value: 0x2847, lo: 0x83, hi: 0x84},
	{value: 0x2851, lo: 0x85, hi: 0x86},
	{value: 0x283d, lo: 0x87, hi: 0x87},
	{value: 0x285b, lo: 0x88, hi: 0x88},
	{value: 0x0b6f, lo: 0x90, hi: 0x90},
	{value: 0x08e7, lo: 0x91, hi: 0x91},
}

// recompMap: 7520 bytes (entries only)
var recompMap map[uint32]rune
var recompMapOnce sync.Once

const recompMapPacked = "" +
	"\x00A\x03\x00\x00\x00\x00\xc0" + // 0x00410300: 0x000000C0
	"\x00A\x03\x01\x00\x00\x00\xc1" + // 0x00410301: 0x000000C1
	"\x00A\x03\x02\x00\x00\x00\xc2" + // 0x00410302: 0x000000C2
	"\x00A\x03\x03\x00\x00\x00\xc3" + // 0x00410303: 0x000000C3
	"\x00A\x03\b\x00\x00\x00\xc4" + // 0x00410308: 0x000000C4
	"\x00A\x03\n\x00\x00\x00\xc5" + // 0x0041030A: 0x000000C5
	"\x00C\x03'\x00\x00\x00\xc7" + // 0x00430327: 0x000000C7
	"\x00E\x03\x00\x00\x00\x00\xc8" + // 0x00450300: 0x000000C8
	"\x00E\x03\x01\x00\x00\x00\xc9" + // 0x00450301: 0x000000C9
	"\x00E\x03\x02\x00\x00\x00\xca" + // 0x00450302: 0x000000CA
	"\x00E\x03\b\x00\x00\x00\xcb" + // 0x00450308: 0x000000CB
	"\x00I\x03\x00\x00\x00\x00\xcc" + // 0x00490300: 0x000000CC
	"\x00I\x03\x01\x00\x00\x00\xcd" + // 0x00490301: 0x000000CD
	"\x00I\x03\x02\x00\x00\x00\xce" + // 0x00490302: 0x000000CE
	"\x00I\x03\b\x00\x00\x00\xcf" + // 0x00490308: 0x000000CF
	"\x00N\x03\x03\x00\x00\x00\xd1" + // 0x004E0303: 0x000000D1
	"\x00O\x03\x00\x00\x00\x00\xd2" + // 0x004F0300: 0x000000D2
	"\x00O\x03\x01\x00\x00\x00\xd3" + // 0x004F0301: 0x000000D3
	"\x00O\x03\x02\x00\x00\x00\xd4" + // 0x004F0302: 0x000000D4
	"\x00O\x03\x03\x00\x00\x00\xd5" + // 0x004F0303: 0x000000D5
	"\x00O\x03\b\x00\x00\x00\xd6" + // 0x004F0308: 0x000000D6
	"\x00U\x03\x00\x00\x00\x00\xd9" + // 0x00550300: 0x000000D9
	"\x00U\x03\x01\x00\x00\x00\xda" + // 0x00550301: 0x000000DA
	"\x00U\x03\x02\x00\x00\x00\xdb" + // 0x00550302: 0x000000DB
	"\x00U\x03\b\x00\x00\x00\xdc" + // 0x00550308: 0x000000DC
	"\x00Y\x03\x01\x00\x00\x00\xdd" + // 0x00590301: 0x000000DD
	"\x00a\x03\x00\x00\x00\x00\xe0" + // 0x00610300: 0x000000E0
	"\x00a\x03\x01\x00\x00\x00\xe1" + // 0x00610301: 0x000000E1
	"\x00a\x03\x02\x00\x00\x00\xe2" + // 0x00610302: 0x000000E2
	"\x00a\x03\x03\x00\x00\x00\xe3" + // 0x00610303: 0x000000E3
	"\x00a\x03\b\x00\x00\x00\xe4" + // 0x00610308: 0x000000E4
	"\x00a\x03\n\x00\x00\x00\xe5" + // 0x0061030A: 0x000000E5
	"\x00c\x03'\x00\x00\x00\xe7" + // 0x00630327: 0x000000E7
	"\x00e\x03\x00\x00\x00\x00\xe8" + // 0x00650300: 0x000000E8
	"\x00e\x03\x01\x00\x00\x00\xe9" + // 0x00650301: 0x000000E9
	"\x00e\x03\x02\x00\x00\x00\xea" + // 0x00650302: 0x000000EA
	"\x00e\x03\b\x00\x00\x00\xeb" + // 0x00650308: 0x000000EB
	"\x00i\x03\x00\x00\x00\x00\xec" + // 0x00690300: 0x000000EC
	"\x00i\x03\x01\x00\x00\x00\xed" + // 0x00690301: 0x000000ED
	"\x00i\x03\x02\x00\x00\x00\xee" + // 0x00690302: 0x000000EE
	"\x00i\x03\b\x00\x00\x00\xef" + // 0x00690308: 0x000000EF
	"\x00n\x03\x03\x00\x00\x00\xf1" + // 0x006E0303: 0x000000F1
	"\x00o\x03\x00\x00\x00\x00\xf2" + // 0x006F0300: 0x000000F2
	"\x00o\x03\x01\x00\x00\x00\xf3" + // 0x006F0301: 0x000000F3
	"\x00o\x03\x02\x00\x00\x00\xf4" + // 0x006F0302: 0x000000F4
	"\x00o\x03\x03\x00\x00\x00\xf5" + // 0x006F0303: 0x000000F5
	"\x00o\x03\b\x00\x00\x00\xf6" + // 0x006F0308: 0x000000F6
	"\x00u\x03\x00\x00\x00\x00\xf9" + // 0x00750300: 0x000000F9
	"\x00u\x03\x01\x00\x00\x00\xfa" + // 0x00750301: 0x000000FA
	"\x00u\x03\x02\x00\x00\x00\xfb" + // 0x00750302: 0x000000FB
	"\x00u\x03\b\x00\x00\x00\xfc" + // 0x00750308: 0x000000FC
	"\x00y\x03\x01\x00\x00\x00\xfd" + // 0x00790301: 0x000000FD
	"\x00y\x03\b\x00\x00\x00\xff" + // 0x00790308: 0x000000FF
	"\x00A\x03\x04\x00\x00\x01\x00" + // 0x00410304: 0x00000100
	"\x00a\x03\x04\x00\x00\x01\x01" + // 0x00610304: 0x00000101
	"\x00A\x03\x06\x00\x00\x01\x02" + // 0x00410306: 0x00000102
	"\x00a\x03\x06\x00\x00\x01\x03" + // 0x00610306: 0x00000103
	"\x00A\x03(\x00\x00\x01\x04" + // 0x00410328: 0x00000104
	"\x00a\x03(\x00\x00\x01\x05" + // 0x00610328: 0x00000105
	"\x00C\x03\x01\x00\x00\x01\x06" + // 0x00430301: 0x00000106
	"\x00c\x03\x01\x00\x00\x01\a" + // 0x00630301: 0x00000107
	"\x00C\x03\x02\x00\x00\x01\b" + // 0x00430302: 0x00000108
	"\x00c\x03\x02\x00\x00\x01\t" + // 0x00630302: 0x00000109
	"\x00C\x03\a\x00\x00\x01\n" + // 0x00430307: 0x0000010A
	"\x00c\x03\a\x00\x00\x01\v" + // 0x00630307: 0x0000010B
	"\x00C\x03\f\x00\x00\x01\f" + // 0x0043030C: 0x0000010C
	"\x00c\x03\f\x00\x00\x01\r" + // 0x0063030C: 0x0000010D
	"\x00D\x03\f\x00\x00\x01\x0e" + // 0x0044030C: 0x0000010E
	"\x00d\x03\f\x00\x00\x01\x0f" + // 0x0064030C: 0x0000010F
	"\x00E\x03\x04\x00\x00\x01\x12" + // 0x00450304: 0x00000112
	"\x00e\x03\x04\x00\x00\x01\x13" + // 0x00650304: 0x00000113
	"\x00E\x03\x06\x00\x00\x01\x14" + // 0x00450306: 0x00000114
	"\x00e\x03\x06\x00\x00\x01\x15" + // 0x00650306: 0x00000115
	"\x00E\x03\a\x00\x00\x01\x16" + // 0x00450307: 0x00000116
	"\x00e\x03\a\x00\x00\x01\x17" + // 0x00650307: 0x00000117
	"\x00E\x03(\x00\x00\x01\x18" + // 0x00450328: 0x00000118
	"\x00e\x03(\x00\x00\x01\x19" + // 0x00650328: 0x00000119
	"\x00E\x03\f\x00\x00\x01\x1a" + // 0x0045030C: 0x0000011A
	"\x00e\x03\f\x00\x00\x01\x1b" + // 0x0065030C: 0x0000011B
	"\x00G\x03\x02\x00\x00\x01\x1c" + // 0x00470302: 0x0000011C
	"\x00g\x03\x02\x00\x00\x01\x1d" + // 0x00670302: 0x0000011D
	"\x00G\x03\x06\x00\x00\x01\x1e" + // 0x00470306: 0x0000011E
	"\x00g\x03\x06\x00\x00\x01\x1f" + // 0x00670306: 0x0000011F
	"\x00G\x03\a\x00\x00\x01 " + // 0x00470307: 0x00000120
	"\x00g\x03\a\x00\x00\x01!" + // 0x00670307: 0x00000121
	"\x00G\x03'\x00\x00\x01\"" + // 0x00470327: 0x00000122
	"\x00g\x03'\x00\x00\x01#" + // 0x00670327: 0x00000123
	"\x00H\x03\x02\x00\x00\x01$" + // 0x00480302: 0x00000124
	"\x00h\x03\x02\x00\x00\x01%" + // 0x00680302: 0x00000125
	"\x00I\x03\x03\x00\x00\x01(" + // 0x00490303: 0x00000128
	"\x00i\x03\x03\x00\x00\x01)" + // 0x00690303: 0x00000129
	"\x00I\x03\x04\x00\x00\x01*" + // 0x00490304: 0x0000012A
	"\x00i\x03\x04\x00\x00\x01+" + // 0x00690304: 0x0000012B
	"\x00I\x03\x06\x00\x00\x01," + // 0x00490306: 0x0000012C
	"\x00i\x03\x06\x00\x00\x01-" + // 0x00690306: 0x0000012D
	"\x00I\x03(\x00\x00\x01." + // 0x00490328: 0x0000012E
	"\x00i\x03(\x00\x00\x01/" + // 0x00690328: 0x0000012F
	"\x00I\x03\a\x00\x00\x010" + // 0x00490307: 0x00000130
	"\x00J\x03\x02\x00\x00\x014" + // 0x004A0302: 0x00000134
	"\x00j\x03\x02\x00\x00\x015" + // 0x006A0302: 0x00000135
	"\x00K\x03'\x00\x00\x016" + // 0x004B0327: 0x00000136
	"\x00k\x03'\x00\x00\x017" + // 0x006B0327: 0x00000137
	"\x00L\x03\x01\x00\x00\x019" + // 0x004C0301: 0x00000139
	"\x00l\x03\x01\x00\x00\x01:" + // 0x006C0301: 0x0000013A
	"\x00L\x03'\x00\x00\x01;" + // 0x004C0327: 0x0000013B
	"\x00l\x03'\x00\x00\x01<" + // 0x006C0327: 0x0000013C
	"\x00L\x03\f\x00\x00\x01=" + // 0x004C030C: 0x0000013D
	"\x00l\x03\f\x00\x00\x01>" + // 0x006C030C: 0x0000013E
	"\x00N\x03\x01\x00\x00\x01C" + // 0x004E0301: 0x00000143
	"\x00n\x03\x01\x00\x00\x01D" + // 0x006E0301: 0x00000144
	"\x00N\x03'\x00\x00\x01E" + // 0x004E0327: 0x00000145
	"\x00n\x03'\x00\x00\x01F" + // 0x006E0327: 0x00000146
	"\x00N\x03\f\x00\x00\x01G" + // 0x004E030C: 0x00000147
	"\x00n\x03\f\x00\x00\x01H" + // 0x006E030C: 0x00000148
	"\x00O\x03\x04\x00\x00\x01L" + // 0x004F0304: 0x0000014C
	"\x00o\x03\x04\x00\x00\x01M" + // 0x006F0304: 0x0000014D
	"\x00O\x03\x06\x00\x00\x01N" + // 0x004F0306: 0x0000014E
	"\x00o\x03\x06\x00\x00\x01O" + // 0x006F0306: 0x0000014F
	"\x00O\x03\v\x00\x00\x01P" + // 0x004F030B: 0x00000150
	"\x00o\x03\v\x00\x00\x01Q" + // 0x006F030B: 0x00000151
	"\x00R\x03\x01\x00\x00\x01T" + // 0x00520301: 0x00000154
	"\x00r\x03\x01\x00\x00\x01U" + // 0x00720301: 0x00000155
	"\x00R\x03'\x00\x00\x01V" + // 0x00520327: 0x00000156
	"\x00r\x03'\x00\x00\x01W" + // 0x00720327: 0x00000157
	"\x00R\x03\f\x00\x00\x01X" + // 0x0052030C: 0x00000158
	"\x00r\x03\f\x00\x00\x01Y" + // 0x0072030C: 0x00000159
	"\x00S\x03\x01\x00\x00\x01Z" + // 0x00530301: 0x0000015A
	"\x00s\x03\x01\x00\x00\x01[" + // 0x00730301: 0x0000015B
	"\x00S\x03\x02\x00\x00\x01\\" + // 0x00530302: 0x0000015C
	"\x00s\x03\x02\x00\x00\x01]" + // 0x00730302: 0x0000015D
	"\x00S\x03'\x00\x00\x01^" + // 0x00530327: 0x0000015E
	"\x00s\x03'\x00\x00\x01_" + // 0x00730327: 0x0000015F
	"\x00S\x03\f\x00\x00\x01`" + // 0x0053030C: 0x00000160
	"\x00s\x03\f\x00\x00\x01a" + // 0x0073030C: 0x00000161
	"\x00T\x03'\x00\x00\x01b" + // 0x00540327: 0x00000162
	"\x00t\x03'\x00\x00\x01c" + // 0x00740327: 0x00000163
	"\x00T\x03\f\x00\x00\x01d" + // 0x0054030C: 0x00000164
	"\x00t\x03\f\x00\x00\x01e" + // 0x0074030C: 0x00000165
	"\x00U\x03\x03\x00\x00\x01h" + // 0x00550303: 0x00000168
	"\x00u\x03\x03\x00\x00\x01i" + // 0x00750303: 0x00000169
	"\x00U\x03\x04\x00\x00\x01j" + // 0x00550304: 0x0000016A
	"\x00u\x03\x04\x00\x00\x01k" + // 0x00750304: 0x0000016B
	"\x00U\x03\x06\x00\x00\x01l" + // 0x00550306: 0x0000016C
	"\x00u\x03\x06\x00\x00\x01m" + // 0x00750306: 0x0000016D
	"\x00U\x03\n\x00\x00\x01n" + // 0x0055030A: 0x0000016E
	"\x00u\x03\n\x00\x00\x01o" + // 0x0075030A: 0x0000016F
	"\x00U\x03\v\x00\x00\x01p" + // 0x0055030B: 0x00000170
	"\x00u\x03\v\x00\x00\x01q" + // 0x0075030B: 0x00000171
	"\x00U\x03(\x00\x00\x01r" + // 0x00550328: 0x00000172
	"\x00u\x03(\x00\x00\x01s" + // 0x00750328: 0x00000173
	"\x00W\x03\x02\x00\x00\x01t" + // 0x00570302: 0x00000174
	"\x00w\x03\x02\x00\x00\x01u" + // 0x00770302: 0x00000175
	"\x00Y\x03\x02\x00\x00\x01v" + // 0x00590302: 0x00000176
	"\x00y\x03\x02\x00\x00\x01w" + // 0x00790302: 0x00000177
	"\x00Y\x03\b\x00\x00\x01x" + // 0x00590308: 0x00000178
	"\x00Z\x03\x01\x00\x00\x01y" + // 0x005A0301: 0x00000179
	"\x00z\x03\x01\x00\x00\x01z" + // 0x007A0301: 0x0000017A
	"\x00Z\x03\a\x00\x00\x01{" + // 0x005A0307: 0x0000017B
	"\x00z\x03\a\x00\x00\x01|" + // 0x007A0307: 0x0000017C
	"\x00Z\x03\f\x00\x00\x01}" + // 0x005A030C: 0x0000017D
	"\x00z\x03\f\x00\x00\x01~" + // 0x007A030C: 0x0000017E
	"\x00O\x03\x1b\x00\x00\x01\xa0" + // 0x004F031B: 0x000001A0
	"\x00o\x03\x1b\x00\x00\x01\xa1" + // 0x006F031B: 0x000001A1
	"\x00U\x03\x1b\x00\x00\x01\xaf" + // 0x0055031B: 0x000001AF
	"\x00u\x03\x1b\x00\x00\x01\xb0" + // 0x0075031B: 0x000001B0
	"\x00A\x03\f\x00\x00\x01\xcd" + // 0x0041030C: 0x000001CD
	"\x00a\x03\f\x00\x00\x01\xce" + // 0x0061030C: 0x000001CE
	"\x00I\x03\f\x00\x00\x01\xcf" + // 0x0049030C: 0x000001CF
	"\x00i\x03\f\x00\x00\x01\xd0" + // 0x0069030C: 0x000001D0
	"\x00O\x03\f\x00\x00\x01\xd1" + // 0x004F030C: 0x000001D1
	"\x00o\x03\f\x00\x00\x01\xd2" + // 0x006F030C: 0x000001D2
	"\x00U\x03\f\x00\x00\x01\xd3" + // 0x0055030C: 0x000001D3
	"\x00u\x03\f\x00\x00\x01\xd4" + // 0x0075030C: 0x000001D4
	"\x00\xdc\x03\x04\x00\x00\x01\xd5" + // 0x00DC0304: 0x000001D5
	"\x00\xfc\x03\x04\x00\x00\x01\xd6" + // 0x00FC0304: 0x000001D6
	"\x00\xdc\x03\x01\x00\x00\x01\xd7" + // 0x00DC0301: 0x000001D7
	"\x00\xfc\x03\x01\x00\x00\x01\xd8" + // 0x00FC0301: 0x000001D8
	"\x00\xdc\x03\f\x00\x00\x01\xd9" + // 0x00DC030C: 0x000001D9
	"\x00\xfc\x03\f\x00\x00\x01\xda" + // 0x00FC030C: 0x000001DA
	"\x00\xdc\x03\x00\x00\x00\x01\xdb" + // 0x00DC0300: 0x000001DB
	"\x00\xfc\x03\x00\x00\x00\x01\xdc" + // 0x00FC0300: 0x000001DC
	"\x00\xc4\x03\x04\x00\x00\x01\xde" + // 0x00C40304: 0x000001DE
	"\x00\xe4\x03\x04\x00\x00\x01\xdf" + // 0x00E40304: 0x000001DF
	"\x02&\x03\x04\x00\x00\x01\xe0" + // 0x02260304: 0x000001E0
	"\x02'\x03\x04\x00\x00\x01\xe1" + // 0x02270304: 0x000001E1
	"\x00\xc6\x03\x04\x00\x00\x01\xe2" + // 0x00C60304: 0x000001E2
	"\x00\xe6\x03\x04\x00\x00\x01\xe3" + // 0x00E60304: 0x000001E3
	"\x00G\x03\f\x00\x00\x01\xe6" + // 0x0047030C: 0x000001E6
	"\x00g\x03\f\x00\x00\x01\xe7" + // 0x0067030C: 0x000001E7
	"\x00K\x03\f\x00\x00\x01\xe8" + // 0x004B030C: 0x000001E8
	"\x00k\x03\f\x00\x00\x01\xe9" + // 0x006B030C: 0x000001E9
	"\x00O\x03(\x00\x00\x01\xea" + // 0x004F0328: 0x000001EA
	"\x00o\x03(\x00\x00\x01\xeb" + // 0x006F0328: 0x000001EB
	"\x01\xea\x03\x04\x00\x00\x01\xec" + // 0x01EA0304: 0x000001EC
	"\x01\xeb\x03\x04\x00\x00\x01\xed" + // 0x01EB0304: 0x000001ED
	"\x01\xb7\x03\f\x00\x00\x01\xee" + // 0x01B7030C: 0x000001EE
	"\x02\x92\x03\f\x00\x00\x01\xef" + // 0x0292030C: 0x000001EF
	"\x00j\x03\f\x00\x00\x01\xf0" + // 0x006A030C: 0x000001F0
	"\x00G\x03\x01\x00\x00\x01\xf4" + // 0x00470301: 0x000001F4
	"\x00g\x03\x01\x00\x00\x01\xf5" + // 0x00670301: 0x000001F5
	"\x00N\x03\x00\x00\x00\x01\xf8" + // 0x004E0300: 0x000001F8
	"\x00n\x03\x00\x00\x00\x01\xf9" + // 0x006E0300: 0x000001F9
	"\x00\xc5\x03\x01\x00\x00\x01\xfa" + // 0x00C50301: 0x000001FA
	"\x00\xe5\x03\x01\x00\x00\x01\xfb" + // 0x00E50301: 0x000001FB
	"\x00\xc6\x03\x01\x00\x00\x01\xfc" + // 0x00C60301: 0x000001FC
	"\x00\xe6\x03\x01\x00\x00\x01\xfd" + // 0x00E60301: 0x000001FD
	"\x00\xd8\x03\x01\x00\x00\x01\xfe" + // 0x00D80301: 0x000001FE
	"\x00\xf8\x03\x01\x00\x00\x01\xff" + // 0x00F80301: 0x000001FF
	"\x00A\x03\x0f\x00\x00\x02\x00" + // 0x0041030F: 0x00000200
	"\x00a\x03\x0f\x00\x00\x02\x01" + // 0x0061030F: 0x00000201
	"\x00A\x03\x11\x00\x00\x02\x02" + // 0x00410311: 0x00000202
	"\x00a\x03\x11\x00\x00\x02\x03" + // 0x00610311: 0x00000203
	"\x00E\x03\x0f\x00\x00\x02\x04" + // 0x0045030F: 0x00000204
	"\x00e\x03\x0f\x00\x00\x02\x05" + // 0x0065030F: 0x00000205
	"\x00E\x03\x11\x00\x00\x02\x06" + // 0x00450311: 0x00000206
	"\x00e\x03\x11\x00\x00\x02\a" + // 0x00650311: 0x00000207
	"\x00I\x03\x0f\x00\x00\x02\b" + // 0x0049030F: 0x00000208
	"\x00i\x03\x0f\x00\x00\x02\t" + // 0x0069030F: 0x00000209
	"\x00I\x03\x11\x00\x00\x02\n" + // 0x00490311: 0x0000020A
	"\x00i\x03\x11\x00\x00\x02\v" + // 0x00690311: 0x0000020B
	"\x00O\x03\x0f\x00\x00\x02\f" + // 0x004F030F: 0x0000020C
	"\x00o\x03\x0f\x00\x00\x02\r" + // 0x006F030F: 0x0000020D
	"\x00O\x03\x11\x00\x00\x02\x0e" + // 0x004F0311: 0x0000020E
	"\x00o\x03\x11\x00\x00\x02\x0f" + // 0x006F0311: 0x0000020F
	"\x00R\x03\x0f\x00\x00\x02\x10" + // 0x0052030F: 0x00000210
	"\x00r\x03\x0f\x00\x00\x02\x11" + // 0x0072030F: 0x00000211
	"\x00R\x03\x11\x00\x00\x02\x12" + // 0x00520311: 0x00000212
	"\x00r\x03\x11\x00\x00\x02\x13" + // 0x00720311: 0x00000213
	"\x00U\x03\x0f\x00\x00\x02\x14" + // 0x0055030F: 0x00000214
	"\x00u\x03\x0f\x00\x00\x02\x15" + // 0x0075030F: 0x00000215
	"\x00U\x03\x11\x00\x00\x02\x16" + // 0x00550311: 0x00000216
	"\x00u\x03\x11\x00\x00\x02\x17" + // 0x00750311: 0x00000217
	"\x00S\x03&\x00\x00\x02\x18" + // 0x00530326: 0x00000218
	"\x00s\x03&\x00\x00\x02\x19" + // 0x00730326: 0x00000219
	"\x00T\x03&\x00\x00\x02\x1a" + // 0x00540326: 0x0000021A
	"\x00t\x03&\x00\x00\x02\x1b" + // 0x00740326: 0x0000021B
	"\x00H\x03\f\x00\x00\x02\x1e" + // 0x0048030C: 0x0000021E
	"\x00h\x03\f\x00\x00\x02\x1f" + // 0x0068030C: 0x0000021F
	"\x00A\x03\a\x00\x00\x02&" + // 0x00410307: 0x00000226
	"\x00a\x03\a\x00\x00\x02'" + // 0x00610307: 0x00000227
	"\x00E\x03'\x00\x00\x02(" + // 0x00450327: 0x00000228
	"\x00e\x03'\x00\x00\x02)" + // 0x00650327: 0x00000229
	"\x00\xd6\x03\x04\x00\x00\x02*" + // 0x00D60304: 0x0000022A
	"\x00\xf6\x03\x04\x00\x00\x02+" + // 0x00F60304: 0x0000022B
	"\x00\xd5\x03\x04\x00\x00\x02," + // 0x00D50304: 0x0000022C
	"\x00\xf5\x03\x04\x00\x00\x02-" + // 0x00F50304: 0x0000022D
	"\x00O\x03\a\x00\x00\x02." + // 0x004F0307: 0x0000022E
	"\x00o\x03\a\x00\x00\x02/" + // 0x006F0307: 0x0000022F
	"\x02.\x03\x04\x00\x00\x020" + // 0x022E0304: 0x00000230
	"\x02/\x03\x04\x00\x00\x021" + // 0x022F0304: 0x00000231
	"\x00Y\x03\x04\x00\x00\x022" + // 0x00590304: 0x00000232
	"\x00y\x03\x04\x00\x00\x023" + // 0x00790304: 0x00000233
	"\x00\xa8\x03\x01\x00\x00\x03\x85" + // 0x00A80301: 0x00000385
	"\x03\x91\x03\x01\x00\x00\x03\x86" + // 0x03910301: 0x00000386
	"\x03\x95\x03\x01\x00\x00\x03\x88" + // 0x03950301: 0x00000388
	"\x03\x97\x03\x01\x00\x00\x03\x89" + // 0x03970301: 0x00000389
	"\x03\x99\x03\x01\x00\x00\x03\x8a" + // 0x03990301: 0x0000038A
	"\x03\x9f\x03\x01\x00\x00\x03\x8c" + // 0x039F0301: 0x0000038C
	"\x03\xa5\x03\x01\x00\x00\x03\x8e" + // 0x03A50301: 0x0000038E
	"\x03\xa9\x03\x01\x00\x00\x03\x8f" + // 0x03A90301: 0x0000038F
	"\x03\xca\x03\x01\x00\x00\x03\x90" + // 0x03CA0301: 0x00000390
	"\x03\x99\x03\b\x00\x00\x03\xaa" + // 0x03990308: 0x000003AA
	"\x03\xa5\x03\b\x00\x00\x03\xab" + // 0x03A50308: 0x000003AB
	"\x03\xb1\x03\x01\x00\x00\x03\xac" + // 0x03B10301: 0x000003AC
	"\x03\xb5\x03\x01\x00\x00\x03\xad" + // 0x03B50301: 0x000003AD
	"\x03\xb7\x03\x01\x00\x00\x03\xae" + // 0x03B70301: 0x000003AE
	"\x03\xb9\x03\x01\x00\x00\x03\xaf" + // 0x03B90301: 0x000003AF
	"\x03\xcb\x03\x01\x00\x00\x03\xb0" + // 0x03CB0301: 0x000003B0
	"\x03\xb9\x03\b\x00\x00\x03\xca" + // 0x03B90308: 0x000003CA
	"\x03\xc5\x03\b\x00\x00\x03\xcb" + // 0x03C50308: 0x000003CB
	"\x03\xbf\x03\x01\x00\x00\x03\xcc" + // 0x03BF0301: 0x000003CC
	"\x03\xc5\x03\x01\x00\x00\x03\xcd" + // 0x03C50301: 0x000003CD
	"\x03\xc9\x03\x01\x00\x00\x03\xce" + // 0x03C90301: 0x000003CE
	"\x03\xd2\x03\x01\x00\x00\x03\xd3" + // 0x03D20301: 0x000003D3
	"\x03\xd2\x03\b\x00\x00\x03\xd4" + // 0x03D20308: 0x000003D4
	"\x04\x15\x03\x00\x00\x00\x04\x00" + // 0x04150300: 0x00000400
	"\x04\x15\x03\b\x00\x00\x04\x01" + // 0x04150308: 0x00000401
	"\x04\x13\x03\x01\x00\x00\x04\x03" + // 0x04130301: 0x00000403
	"\x04\x06\x03\b\x00\x00\x04\a" + // 0x04060308: 0x00000407
	"\x04\x1a\x03\x01\x00\x00\x04\f" + // 0x041A0301: 0x0000040C
	"\x04\x18\x03\x00\x00\x00\x04\r" + // 0x04180300: 0x0000040D
	"\x04#\x03\x06\x00\x00\x04\x0e" + // 0x04230306: 0x0000040E
	"\x04\x18\x03\x06\x00\x00\x04\x19" + // 0x04180306: 0x00000419
	"\x048\x03\x06\x00\x00\x049" + // 0x04380306: 0x00000439
	"\x045\x03\x00\x00\x00\x04P" + // 0x04350300: 0x00000450
	"\x045\x03\b\x00\x00\x04Q" + // 0x04350308: 0x00000451
	"\x043\x03\x01\x00\x00\x04S" + // 0x04330301: 0x00000453
	"\x04V\x03\b\x00\x00\x04W" + // 0x04560308: 0x00000457
	"\x04:\x03\x01\x00\x00\x04\\" + // 0x043A0301: 0x0000045C
	"\x048\x03\x00\x00\x00\x04]" + // 0x04380300: 0x0000045D
	"\x04C\x03\x06\x00\x00\x04^" + // 0x04430306: 0x0000045E
	"\x04t\x03\x0f\x00\x00\x04v" + // 0x0474030F: 0x00000476
	"\x04u\x03\x0f\x00\x00\x04w" + // 0x0475030F: 0x00000477
	"\x04\x16\x03\x06\x00\x00\x04\xc1" + // 0x04160306: 0x000004C1
	"\x046\x03\x06\x00\x00\x04\xc2" + // 0x04360306: 0x000004C2
	"\x04\x10\x03\x06\x00\x00\x04\xd0" + // 0x04100306: 0x000004D0
	"\x040\x03\x06\x00\x00\x04\xd1" + // 0x04300306: 0x000004D1
	"\x04\x10\x03\b\x00\x00\x04\xd2" + // 0x04100308: 0x000004D2
	"\x040\x03\b\x00\x00\x04\xd3" + // 0x04300308: 0x000004D3
	"\x04\x15\x03\x06\x00\x00\x04\xd6" + // 0x04150306: 0x000004D6
	"\x045\x03\x06\x00\x00\x04\xd7" + // 0x04350306: 0x000004D7
	"\x04\xd8\x03\b\x00\x00\x04\xda" + // 0x04D80308: 0x000004DA
	"\x04\xd9\x03\b\x00\x00\x04\xdb" + // 0x04D90308: 0x000004DB
	"\x04\x16\x03\b\x00\x00\x04\xdc" + // 0x04160308: 0x000004DC
	"\x046\x03\b\x00\x00\x04\xdd" + // 0x04360308: 0x000004DD
	"\x04\x17\x03\b\x00\x00\x04\xde" + // 0x04170308: 0x000004DE
	"\x047\x03\b\x00\x00\x04\xdf" + // 0x04370308: 0x000004DF
	"\x04\x18\x03\x04\x00\x00\x04\xe2" + // 0x04180304: 0x000004E2
	"\x048\x03\x04\x00\x00\x04\xe3" + // 0x04380304: 0x000004E3
	"\x04\x18\x03\b\x00\x00\x04\xe4" + // 0x04180308: 0x000004E4
	"\x048\x03\b\x00\x00\x04\xe5" + // 0x04380308: 0x000004E5
	"\x04\x1e\x03\b\x00\x00\x04\xe6" + // 0x041E0308: 0x000004E6
	"\x04>\x03\b\x00\x00\x04\xe7" + // 0x043E0308: 0x000004E7
	"\x04\xe8\x03\b\x00\x00\x04\xea" + // 0x04E80308: 0x000004EA
	"\x04\xe9\x03\b\x00\x00\x04\xeb" + // 0x04E90308: 0x000004EB
	"\x04-\x03\b\x00\x00\x04\xec" + // 0x042D0308: 0x000004EC
	"\x04M\x03\b\x00\x00\x04\xed" + // 0x044D0308: 0x000004ED
	"\x04#\x03\x04\x00\x00\x04\xee" + // 0x04230304: 0x000004EE
	"\x04C\x03\x04\x00\x00\x04\xef" + // 0x04430304: 0x000004EF
	"\x04#\x03\b\x00\x00\x04\xf0" + // 0x04230308: 0x000004F0
	"\x04C\x03\b\x00\x00\x04\xf1" + // 0x04430308: 0x000004F1
	"\x04#\x03\v\x00\x00\x04\xf2" + // 0x0423030B: 0x000004F2
	"\x04C\x03\v\x00\x00\x04\xf3" + // 0x0443030B: 0x000004F3
	"\x04'\x03\b\x00\x00\x04\xf4" + // 0x04270308: 0x000004F4
	"\x04G\x03\b\x00\x00\x04\xf5" + // 0x04470308: 0x000004F5
	"\x04+\x03\b\x00\x00\x04\xf8" + // 0x042B0308: 0x000004F8
	"\x04K\x03\b\x00\x00\x04\xf9" + // 0x044B0308: 0x000004F9
	"\x06'\x06S\x00\x00\x06\"" + // 0x06270653: 0x00000622
	"\x06'\x06T\x00\x00\x06#" + // 0x06270654: 0x00000623
	"\x06H\x06T\x00\x00\x06$" + // 0x06480654: 0x00000624
	"\x06'\x06U\x00\x00\x06%" + // 0x06270655: 0x00000625
	"\x06J\x06T\x00\x00\x06&" + // 0x064A0654: 0x00000626
	"\x06\xd5\x06T\x00\x00\x06\xc0" + // 0x06D50654: 0x000006C0
	"\x06\xc1\x06T\x00\x00\x06\xc2" + // 0x06C10654: 0x000006C2
	"\x06\xd2\x06T\x00\x00\x06\xd3" + // 0x06D20654: 0x000006D3
	"\t(\t<\x00\x00\t)" + // 0x0928093C: 0x00000929
	"\t0\t<\x00\x00\t1" + // 0x0930093C: 0x00000931
	"\t3\t<\x00\x00\t4" + // 0x0933093C: 0x00000934
	"\t\xc7\t\xbe\x00\x00\t\xcb" + // 0x09C709BE: 0x000009CB
	"\t\xc7\t\xd7\x00\x00\t\xcc" + // 0x09C709D7: 0x000009CC
	"\vG\vV\x00\x00\vH" + // 0x0B470B56: 0x00000B48
	"\vG\v>\x00\x00\vK" + // 0x0B470B3E: 0x00000B4B
	"\vG\vW\x00\x00\vL" + // 0x0B470B57: 0x00000B4C
	"\v\x92\v\xd7\x00\x00\v\x94" + // 0x0B920BD7: 0x00000B94
	"\v\xc6\v\xbe\x00\x00\v\xca" + // 0x0BC60BBE: 0x00000BCA
	"\v\xc7\v\xbe\x00\x00\v\xcb" + // 0x0BC70BBE: 0x00000BCB
	"\v\xc6\v\xd7\x00\x00\v\xcc" + // 0x0BC60BD7: 0x00000BCC
	"\fF\fV\x00\x00\fH" + // 0x0C460C56: 0x00000C48
	"\f\xbf\f\xd5\x00\x00\f\xc0" + // 0x0CBF0CD5: 0x00000CC0
	"\f\xc6\f\xd5\x00\x00\f\xc7" + // 0x0CC60CD5: 0x00000CC7
	"\f\xc6\f\xd6\x00\x00\f\xc8" + // 0x0CC60CD6: 0x00000CC8
	"\f\xc6\f\xc2\x00\x00\f\xca" + // 0x0CC60CC2: 0x00000CCA
	"\f\xca\f\xd5\x00\x00\f\xcb" + // 0x0CCA0CD5: 0x00000CCB
	"\rF\r>\x00\x00\rJ" + // 0x0D460D3E: 0x00000D4A
	"\rG\r>\x00\x00\rK" + // 0x0D470D3E: 0x00000D4B
	"\rF\rW\x00\x00\rL" + // 0x0D460D57: 0x00000D4C
	"\r\xd9\r\xca\x00\x00\r\xda" + // 0x0DD90DCA: 0x00000DDA
	"\r\xd9\r\xcf\x00\x00\r\xdc" + // 0x0DD90DCF: 0x00000DDC
	"\r\xdc\r\xca\x00\x00\r\xdd" + // 0x0DDC0DCA: 0x00000DDD
	"\r\xd9\r\xdf\x00\x00\r\xde" + // 0x0DD90DDF: 0x00000DDE
	"\x10%\x10.\x00\x00\x10&" + // 0x1025102E: 0x00001026
	"\x1b\x05\x1b5\x00\x00\x1b\x06" + // 0x1B051B35: 0x00001B06
	"\x1b\a\x1b5\x00\x00\x1b\b" + // 0x1B071B35: 0x00001B08
	"\x1b\t\x1b5\x00\x00\x1b\n" + // 0x1B091B35: 0x00001B0A
	"\x1b\v\x1b5\x00\x00\x1b\f" + // 0x1B0B1B35: 0x00001B0C
	"\x1b\r\x1b5\x00\x00\x1b\x0e" + // 0x1B0D1B35: 0x00001B0E
	"\x1b\x11\x1b5\x00\x00\x1b\x12" + // 0x1B111B35: 0x00001B12
	"\x1b:\x1b5\x00\x00\x1b;" + // 0x1B3A1B35: 0x00001B3B
	"\x1b<\x1b5\x00\x00\x1b=" + // 0x1B3C1B35: 0x00001B3D
	"\x1b>\x1b5\x00\x00\x1b@" + // 0x1B3E1B35: 0x00001B40
	"\x1b?\x1b5\x00\x00\x1bA" + // 0x1B3F1B35: 0x00001B41
	"\x1bB\x1b5\x00\x00\x1bC" + // 0x1B421B35: 0x00001B43
	"\x00A\x03%\x00\x00\x1e\x00" + // 0x00410325: 0x00001E00
	"\x00a\x03%\x00\x00\x1e\x01" + // 0x00610325: 0x00001E01
	"\x00B\x03\a\x00\x00\x1e\x02" + // 0x00420307: 0x00001E02
	"\x00b\x03\a\x00\x00\x1e\x03" + // 0x00620307: 0x00001E03
	"\x00B\x03#\x00\x00\x1e\x04" + // 0x00420323: 0x00001E04
	"\x00b\x03#\x00\x00\x1e\x05" + // 0x00620323: 0x00001E05
	"\x00B\x031\x00\x00\x1e\x06" + // 0x00420331: 0x00001E06
	"\x00b\x031\x00\x00\x1e\a" + // 0x00620331: 0x00001E07
	"\x00\xc7\x03\x01\x00\x00\x1e\b" + // 0x00C70301: 0x00001E08
	"\x00\xe7\x03\x01\x00\x00\x1e\t" + // 0x00E70301: 0x00001E09
	"\x00D\x03\a\x00\x00\x1e\n" + // 0x00440307: 0x00001E0A
	"\x00d\x03\a\x00\x00\x1e\v" + // 0x00640307: 0x00001E0B
	"\x00D\x03#\x00\x00\x1e\f" + // 0x00440323: 0x00001E0C
	"\x00d\x03#\x00\x00\x1e\r" + // 0x00640323: 0x00001E0D
	"\x00D\x031\x00\x00\x1e\x0e" + // 0x00440331: 0x00001E0E
	"\x00d\x031\x00\x00\x1e\x0f" + // 0x00640331: 0x00001E0F
	"\x00D\x03'\x00\x00\x1e\x10" + // 0x00440327: 0x00001E10
	"\x00d\x03'\x00\x00\x1e\x11" + // 0x00640327: 0x00001E11
	"\x00D\x03-\x00\x00\x1e\x12" + // 0x0044032D: 0x00001E12
	"\x00d\x03-\x00\x00\x1e\x13" + // 0x0064032D: 0x00001E13
	"\x01\x12\x03\x00\x00\x00\x1e\x14" + // 0x01120300: 0x00001E14
	"\x01\x13\x03\x00\x00\x00\x1e\x15" + // 0x01130300: 0x00001E15
	"\x01\x12\x03\x01\x00\x00\x1e\x16" + // 0x01120301: 0x00001E16
	"\x01\x13\x03\x01\x00\x00\x1e\x17" + // 0x01130301: 0x00001E17
	"\x00E\x03-\x00\x00\x1e\x18" + // 0x0045032D: 0x00001E18
	"\x00e\x03-\x00\x00\x1e\x19" + // 0x0065032D: 0x00001E19
	"\x00E\x030\x00\x00\x1e\x1a" + // 0x00450330: 0x00001E1A
	"\x00e\x030\x00\x00\x1e\x1b" + // 0x00650330: 0x00001E1B
	"\x02(\x03\x06\x00\x00\x1e\x1c" + // 0x02280306: 0x00001E1C
	"\x02)\x03\x06\x00\x00\x1e\x1d" + // 0x02290306: 0x00001E1D
	"\x00F\x03\a\x00\x00\x1e\x1e" + // 0x00460307: 0x00001E1E
	"\x00f\x03\a\x00\x00\x1e\x1f" + // 0x00660307: 0x00001E1F
	"\x00G\x03\x04\x00\x00\x1e " + // 0x00470304: 0x00001E20
	"\x00g\x03\x04\x00\x00\x1e!" + // 0x00670304: 0x00001E21
	"\x00H\x03\a\x00\x00\x1e\"" + // 0x00480307: 0x00001E22
	"\x00h\x03\a\x00\x00\x1e#" + // 0x00680307: 0x00001E23
	"\x00H\x03#\x00\x00\x1e$" + // 0x00480323: 0x00001E24
	"\x00h\x03#\x00\x00\x1e%" + // 0x00680323: 0x00001E25
	"\x00H\x03\b\x00\x00\x1e&" + // 0x00480308: 0x00001E26
	"\x00h\x03\b\x00\x00\x1e'" + // 0x00680308: 0x00001E27
	"\x00H\x03'\x00\x00\x1e(" + // 0x00480327: 0x00001E28
	"\x00h\x03'\x00\x00\x1e)" + // 0x00680327: 0x00001E29
	"\x00H\x03.\x00\x00\x1e*" + // 0x0048032E: 0x00001E2A
	"\x00h\x03.\x00\x00\x1e+" + // 0x0068032E: 0x00001E2B
	"\x00I\x030\x00\x00\x1e," + // 0x00490330: 0x00001E2C
	"\x00i\x030\x00\x00\x1e-" + // 0x00690330: 0x00001E2D
	"\x00\xcf\x03\x01\x00\x00\x1e." + // 0x00CF0301: 0x00001E2E
	"\x00\xef\x03\x01\x00\x00\x1e/" + // 0x00EF0301: 0x00001E2F
	"\x00K\x03\x01\x00\x00\x1e0" + // 0x004B0301: 0x00001E30
	"\x00k\x03\x01\x00\x00\x1e1" + // 0x006B0301: 0x00001E31
	"\x00K\x03#\x00\x00\x1e2" + // 0x004B0323: 0x00001E32
	"\x00k\x03#\x00\x00\x1e3" + // 0x006B0323: 0x00001E33
	"\x00K\x031\x00\x00\x1e4" + // 0x004B0331: 0x00001E34
	"\x00k\x031\x00\x00\x1e5" + // 0x006B0331: 0x00001E35
	"\x00L\x03#\x00\x00\x1e6" + // 0x004C0323: 0x00001E36
	"\x00l\x03#\x00\x00\x1e7" + // 0x006C0323: 0x00001E37
	"\x1e6\x03\x04\x00\x00\x1e8" + // 0x1E360304: 0x00001E38
	"\x1e7\x03\x04\x00\x00\x1e9" + // 0x1E370304: 0x00001E39
	"\x00L\x031\x00\x00\x1e:" + // 0x004C0331: 0x00001E3A
	"\x00l\x031\x00\x00\x1e;" + // 0x006C0331: 0x00001E3B
	"\x00L\x03-\x00\x00\x1e<" + // 0x004C032D: 0x00001E3C
	"\x00l\x03-\x00\x00\x1e=" + // 0x006C032D: 0x00001E3D
	"\x00M\x03\x01\x00\x00\x1e>" + // 0x004D0301: 0x00001E3E
	"\x00m\x03\x01\x00\x00\x1e?" + // 0x006D0301: 0x00001E3F
	"\x00M\x03\a\x00\x00\x1e@" + // 0x004D0307: 0x00001E40
	"\x00m\x03\a\x00\x00\x1eA" + // 0x006D0307: 0x00001E41
	"\x00M\x03#\x00\x00\x1eB" + // 0x004D0323: 0x00001E42
	"\x00m\x03#\x00\x00\x1eC" + // 0x006D0323: 0x00001E43
	"\x00N\x03\a\x00\x00\x1eD" + // 0x004E0307: 0x00001E44
	"\x00n\x03\a\x00\x00\x1eE" + // 0x006E0307: 0x00001E45
	"\x00N\x03#\x00\x00\x1eF" + // 0x004E0323: 0x00001E46
	"\x00n\x03#\x00\x00\x1eG" + // 0x006E0323: 0x00001E47
	"\x00N\x031\x00\x00\x1eH" + // 0x004E0331: 0x00001E48
	"\x00n\x031\x00\x00\x1eI" + // 0x006E0331: 0x00001E49
	"\x00N\x03-\x00\x00\x1eJ" + // 0x004E032D: 0x00001E4A
	"\x00n\x03-\x00\x00\x1eK" + // 0x006E032D: 0x00001E4B
	"\x00\xd5\x03\x01\x00\x00\x1eL" + // 0x00D50301: 0x00001E4C
	"\x00\xf5\x03\x01\x00\x00\x1eM" + // 0x00F50301: 0x00001E4D
	"\x00\xd5\x03\b\x00\x00\x1eN" + // 0x00D50308: 0x00001E4E
	"\x00\xf5\x03\b\x00\x00\x1eO" + // 0x00F50308: 0x00001E4F
	"\x01L\x03\x00\x00\x00\x1eP" + // 0x014C0300: 0x00001E50
	"\x01M\x03\x00\x00\x00\x1eQ" + // 0x014D0300: 0x00001E51
	"\x01L\x03\x01\x00\x00\x1eR" + // 0x014C0301: 0x00001E52
	"\x01M\x03\x01\x00\x00\x1eS" + // 0x014D0301: 0x00001E53
	"\x00P\x03\x01\x00\x00\x1eT" + // 0x00500301: 0x00001E54
	"\x00p\x03\x01\x00\x00\x1eU" + // 0x00700301: 0x00001E55
	"\x00P\x03\a\x00\x00\x1eV" + // 0x00500307: 0x00001E56
	"\x00p\x03\a\x00\x00\x1eW" + // 0x00700307: 0x00001E57
	"\x00R\x03\a\x00\x00\x1eX" + // 0x00520307: 0x00001E58
	"\x00r\x03\a\x00\x00\x1eY" + // 0x00720307: 0x00001E59
	"\x00R\x03#\x00\x00\x1eZ" + // 0x00520323: 0x00001E5A
	"\x00r\x03#\x00\x00\x1e[" + // 0x00720323: 0x00001E5B
	"\x1eZ\x03\x04\x00\x00\x1e\\" + // 0x1E5A0304: 0x00001E5C
	"\x1e[\x03\x04\x00\x00\x1e]" + // 0x1E5B0304: 0x00001E5D
	"\x00R\x031\x00\x00\x1e^" + // 0x00520331: 0x00001E5E
	"\x00r\x031\x00\x00\x1e_" + // 0x00720331: 0x00001E5F
	"\x00S\x03\a\x00\x00\x1e`" + // 0x00530307: 0x00001E60
	"\x00s\x03\a\x00\x00\x1ea" + // 0x00730307: 0x00001E61
	"\x00S\x03#\x00\x00\x1eb" + // 0x00530323: 0x00001E62
	"\x00s\x03#\x00\x00\x1ec" + // 0x00730323: 0x00001E63
	"\x01Z\x03\a\x00\x00\x1ed" + // 0x015A0307: 0x00001E64
	"\x01[\x03\a\x00\x00\x1ee" + // 0x015B0307: 0x00001E65
	"\x01`\x03\a\x00\x00\x1ef" + // 0x01600307: 0x00001E66
	"\x01a\x03\a\x00\x00\x1eg" + // 0x01610307: 0x00001E67
	"\x1eb\x03\a\x00\x00\x1eh" + // 0x1E620307: 0x00001E68
	"\x1ec\x03\a\x00\x00\x1ei" + // 0x1E630307: 0x00001E69
	"\x00T\x03\a\x00\x00\x1ej" + // 0x00540307: 0x00001E6A
	"\x00t\x03\a\x00\x00\x1ek" + // 0x00740307: 0x00001E6B
	"\x00T\x03#\x00\x00\x1el" + // 0x00540323: 0x00001E6C
	"\x00t\x03#\x00\x00\x1em" + // 0x00740323: 0x00001E6D
	"\x00T\x031\x00\x00\x1en" + // 0x00540331: 0x00001E6E
	"\x00t\x031\x00\x00\x1eo" + // 0x00740331: 0x00001E6F
	"\x00T\x03-\x00\x00\x1ep" + // 0x0054032D: 0x00001E70
	"\x00t\x03-\x00\x00\x1eq" + // 0x0074032D: 0x00001E71
	"\x00U\x03$\x00\x00\x1er" + // 0x00550324: 0x00001E72
	"\x00u\x03$\x00\x00\x1es" + // 0x00750324: 0x00001E73
	"\x00U\x030\x00\x00\x1et" + // 0x00550330: 0x00001E74
	"\x00u\x030\x00\x00\x1eu" + // 0x00750330: 0x00001E75
	"\x00U\x03-\x00\x00\x1ev" + // 0x0055032D: 0x00001E76
	"\x00u\x03-\x00\x00\x1ew" + // 0x0075032D: 0x00001E77
	"\x01h\x03\x01\x00\x00\x1ex" + // 0x01680301: 0x00001E78
	"\x01i\x03\x01\x00\x00\x1ey" + // 0x01690301: 0x00001E79
	"\x01j\x03\b\x00\x00\x1ez" + // 0x016A0308: 0x00001E7A
	"\x01k\x03\b\x00\x00\x1e{" + // 0x016B0308: 0x00001E7B
	"\x00V\x03\x03\x00\x00\x1e|" + // 0x00560303: 0x00001E7C
	"\x00v\x03\x03\x00\x00\x1e}" + // 0x00760303: 0x00001E7D
	"\x00V\x03#\x00\x00\x1e~" + // 0x00560323: 0x00001E7E
	"\x00v\x03#\x00\x00\x1e\u007f" + // 0x00760323: 0x00001E7F
	"\x00W\x03\x00\x00\x00\x1e\x80" + // 0x00570300: 0x00001E80
	"\x00w\x03\x00\x00\x00\x1e\x81" + // 0x00770300: 0x00001E81
	"\x00W\x03\x01\x00\x00\x1e\x82" + // 0x00570301: 0x00001E82
	"\x00w\x03\x01\x00\x00\x1e\x83" + // 0x00770301: 0x00001E83
	"\x00W\x03\b\x00\x00\x1e\x84" + // 0x00570308: 0x00001E84
	"\x00w\x03\b\x00\x00\x1e\x85" + // 0x00770308: 0x00001E85
	"\x00W\x03\a\x00\x00\x1e\x86" + // 0x00570307: 0x00001E86
	"\x00w\x03\a\x00\x00\x1e\x87" + // 0x00770307: 0x00001E87
	"\x00W\x03#\x00\x00\x1e\x88" + // 0x00570323: 0x00001E88
	"\x00w\x03#\x00\x00\x1e\x89" + // 0x00770323: 0x00001E89
	"\x00X\x03\a\x00\x00\x1e\x8a" + // 0x00580307: 0x00001E8A
	"\x00x\x03\a\x00\x00\x1e\x8b" + // 0x00780307: 0x00001E8B
	"\x00X\x03\b\x00\x00\x1e\x8c" + // 0x00580308: 0x00001E8C
	"\x00x\x03\b\x00\x00\x1e\x8d" + // 0x00780308: 0x00001E8D
	"\x00Y\x03\a\x00\x00\x1e\x8e" + // 0x00590307: 0x00001E8E
	"\x00y\x03\a\x00\x00\x1e\x8f" + // 0x00790307: 0x00001E8F
	"\x00Z\x03\x02\x00\x00\x1e\x90" + // 0x005A0302: 0x00001E90
	"\x00z\x03\x02\x00\x00\x1e\x91" + // 0x007A0302: 0x00001E91
	"\x00Z\x03#\x00\x00\x1e\x92" + // 0x005A0323: 0x00001E92
	"\x00z\x03#\x00\x00\x1e\x93" + // 0x007A0323: 0x00001E93
	"\x00Z\x031\x00\x00\x1e\x94" + // 0x005A0331: 0x00001E94
	"\x00z\x031\x00\x00\x1e\x95" + // 0x007A0331: 0x00001E95
	"\x00h\x031\x00\x00\x1e\x96" + // 0x00680331: 0x00001E96
	"\x00t\x03\b\x00\x00\x1e\x97" + // 0x00740308: 0x00001E97
	"\x00w\x03\n\x00\x00\x1e\x98" + // 0x0077030A: 0x00001E98
	"\x00y\x03\n\x00\x00\x1e\x99" + // 0x0079030A: 0x00001E99
	"\x01\u007f\x03\a\x00\x00\x1e\x9b" + // 0x017F0307: 0x00001E9B
	"\x00A\x03#\x00\x00\x1e\xa0" + // 0x00410323: 0x00001EA0
	"\x00a\x03#\x00\x00\x1e\xa1" + // 0x00610323: 0x00001EA1
	"\x00A\x03\t\x00\x00\x1e\xa2" + // 0x00410309: 0x00001EA2
	"\x00a\x03\t\x00\x00\x1e\xa3" + // 0x00610309: 0x00001EA3
	"\x00\xc2\x03\x01\x00\x00\x1e\xa4" + // 0x00C20301: 0x00001EA4
	"\x00\xe2\x03\x01\x00\x00\x1e\xa5" + // 0x00E20301: 0x00001EA5
	"\x00\xc2\x03\x00\x00\x00\x1e\xa6" + // 0x00C20300: 0x00001EA6
	"\x00\xe2\x03\x00\x00\x00\x1e\xa7" + // 0x00E20300: 0x00001EA7
	"\x00\xc2\x03\t\x00\x00\x1e\xa8" + // 0x00C20309: 0x00001EA8
	"\x00\xe2\x03\t\x00\x00\x1e\xa9" + // 0x00E20309: 0x00001EA9
	"\x00\xc2\x03\x03\x00\x00\x1e\xaa" + // 0x00C20303: 0x00001EAA
	"\x00\xe2\x03\x03\x00\x00\x1e\xab" + // 0x00E20303: 0x00001EAB
	"\x1e\xa0\x03\x02\x00\x00\x1e\xac" + // 0x1EA00302: 0x00001EAC
	"\x1e\xa1\x03\x02\x00\x00\x1e\xad" + // 0x1EA10302: 0x00001EAD
	"\x01\x02\x03\x01\x00\x00\x1e\xae" + // 0x01020301: 0x00001EAE
	"\x01\x03\x03\x01\x00\x00\x1e\xaf" + // 0x01030301: 0x00001EAF
	"\x01\x02\x03\x00\x00\x00\x1e\xb0" + // 0x01020300: 0x00001EB0
	"\x01\x03\x03\x00\x00\x00\x1e\xb1" + // 0x01030300: 0x00001EB1
	"\x01\x02\x03\t\x00\x00\x1e\xb2" + // 0x01020309: 0x00001EB2
	"\x01\x03\x03\t\x00\x00\x1e\xb3" + // 0x01030309: 0x00001EB3
	"\x01\x02\x03\x03\x00\x00\x1e\xb4" + // 0x01020303: 0x00001EB4
	"\x01\x03\x03\x03\x00\x00\x1e\xb5" + // 0x01030303: 0x00001EB5
	"\x1e\xa0\x03\x06\x00\x00\x1e\xb6" + // 0x1EA00306: 0x00001EB6
	"\x1e\xa1\x03\x06\x00\x00\x1e\xb7" + // 0x1EA10306: 0x00001EB7
	"\x00E\x03#\x00\x00\x1e\xb8" + // 0x00450323: 0x00001EB8
	"\x00e\x03#\x00\x00\x1e\xb9" + // 0x00650323: 0x00001EB9
	"\x00E\x03\t\x00\x00\x1e\xba" + // 0x00450309: 0x00001EBA
	"\x00e\x03\t\x00\x00\x1e\xbb" + // 0x00650309: 0x00001EBB
	"\x00E\x03\x03\x00\x00\x1e\xbc" + // 0x00450303: 0x00001EBC
	"\x00e\x03\x03\x00\x00\x1e\xbd" + // 0x00650303: 0x00001EBD
	"\x00\xca\x03\x01\x00\x00\x1e\xbe" + // 0x00CA0301: 0x00001EBE
	"\x00\xea\x03\x01\x00\x00\x1e\xbf" + // 0x00EA0301: 0x00001EBF
	"\x00\xca\x03\x00\x00\x00\x1e\xc0" + // 0x00CA0300: 0x00001EC0
	"\x00\xea\x03\x00\x00\x00\x1e\xc1" + // 0x00EA0300: 0x00001EC1
	"\x00\xca\x03\t\x00\x00\x1e\xc2" + // 0x00CA0309: 0x00001EC2
	"\x00\xea\x03\t\x00\x00\x1e\xc3" + // 0x00EA0309: 0x00001EC3
	"\x00\xca\x03\x03\x00\x00\x1e\xc4" + // 0x00CA0303: 0x00001EC4
	"\x00\xea\x03\x03\x00\x00\x1e\xc5" + // 0x00EA0303: 0x00001EC5
	"\x1e\xb8\x03\x02\x00\x00\x1e\xc6" + // 0x1EB80302: 0x00001EC6
	"\x1e\xb9\x03\x02\x00\x00\x1e\xc7" + // 0x1EB90302: 0x00001EC7
	"\x00I\x03\t\x00\x00\x1e\xc8" + // 0x00490309: 0x00001EC8
	"\x00i\x03\t\x00\x00\x1e\xc9" + // 0x00690309: 0x00001EC9
	"\x00I\x03#\x00\x00\x1e\xca" + // 0x00490323: 0x00001ECA
	"\x00i\x03#\x00\x00\x1e\xcb" + // 0x00690323: 0x00001ECB
	"\x00O\x03#\x00\x00\x1e\xcc" + // 0x004F0323: 0x00001ECC
	"\x00o\x03#\x00\x00\x1e\xcd" + // 0x006F0323: 0x00001ECD
	"\x00O\x03\t\x00\x00\x1e\xce" + // 0x004F0309: 0x00001ECE
	"\x00o\x03\t\x00\x00\x1e\xcf" + // 0x006F0309: 0x00001ECF
	"\x00\xd4\x03\x01\x00\x00\x1e\xd0" + // 0x00D40301: 0x00001ED0
	"\x00\xf4\x03\x01\x00\x00\x1e\xd1" + // 0x00F40301: 0x00001ED1
	"\x00\xd4\x03\x00\x00\x00\x1e\xd2" + // 0x00D40300: 0x00001ED2
	"\x00\xf4\x03\x00\x00\x00\x1e\xd3" + // 0x00F40300: 0x00001ED3
	"\x00\xd4\x03\t\x00\x00\x1e\xd4" + // 0x00D40309: 0x00001ED4
	"\x00\xf4\x03\t\x00\x00\x1e\xd5" + // 0x00F40309: 0x00001ED5
	"\x00\xd4\x03\x03\x00\x00\x1e\xd6" + // 0x00D40303: 0x00001ED6
	"\x00\xf4\x03\x03\x00\x00\x1e\xd7" + // 0x00F40303: 0x00001ED7
	"\x1e\xcc\x03\x02\x00\x00\x1e\xd8" + // 0x1ECC0302: 0x00001ED8
	"\x1e\xcd\x03\x02\x00\x00\x1e\xd9" + // 0x1ECD0302: 0x00001ED9
	"\x01\xa0\x03\x01\x00\x00\x1e\xda" + // 0x01A00301: 0x00001EDA
	"\x01\xa1\x03\x01\x00\x00\x1e\xdb" + // 0x01A10301: 0x00001EDB
	"\x01\xa0\x03\x00\x00\x00\x1e\xdc" + // 0x01A00300: 0x00001EDC
	"\x01\xa1\x03\x00\x00\x00\x1e\xdd" + // 0x01A10300: 0x00001EDD
	"\x01\xa0\x03\t\x00\x00\x1e\xde" + // 0x01A00309: 0x00001EDE
	"\x01\xa1\x03\t\x00\x00\x1e\xdf" + // 0x01A10309: 0x00001EDF
	"\x01\xa0\x03\x03\x00\x00\x1e\xe0" + // 0x01A00303: 0x00001EE0
	"\x01\xa1\x03\x03\x00\x00\x1e\xe1" + // 0x01A10303: 0x00001EE1
	"\x01\xa0\x03#\x00\x00\x1e\xe2" + // 0x01A00323: 0x00001EE2
	"\x01\xa1\x03#\x00\x00\x1e\xe3" + // 0x01A10323: 0x00001EE3
	"\x00U\x03#\x00\x00\x1e\xe4" + // 0x00550323: 0x00001EE4
	"\x00u\x03#\x00\x00\x1e\xe5" + // 0x00750323: 0x00001EE5
	"\x00U\x03\t\x00\x00\x1e\xe6" + // 0x00550309: 0x00001EE6
	"\x00u\x03\t\x00\x00\x1e\xe7" + // 0x00750309: 0x00001EE7
	"\x01\xaf\x03\x01\x00\x00\x1e\xe8" + // 0x01AF0301: 0x00001EE8
	"\x01\xb0\x03\x01\x00\x00\x1e\xe9" + // 0x01B00301: 0x00001EE9
	"\x01\xaf\x03\x00\x00\x00\x1e\xea" + // 0x01AF0300: 0x00001EEA
	"\x01\xb0\x03\x00\x00\x00\x1e\xeb" + // 0x01B00300: 0x00001EEB
	"\x01\xaf\x03\t\x00\x00\x1e\xec" + // 0x01AF0309: 0x00001EEC
	"\x01\xb0\x03\t\x00\x00\x1e\xed" + // 0x01B00309: 0x00001EED
	"\x01\xaf\x03\x03\x00\x00\x1e\xee" + // 0x01AF0303: 0x00001EEE
	"\x01\xb0\x03\x03\x00\x00\x1e\xef" + // 0x01B00303: 0x00001EEF
	"\x01\xaf\x03#\x00\x00\x1e\xf0" + // 0x01AF0323: 0x00001EF0
	"\x01\xb0\x03#\x00\x00\x1e\xf1" + // 0x01B00323: 0x00001EF1
	"\x00Y\x03\x00\x00\x00\x1e\xf2" + // 0x00590300: 0x00001EF2
	"\x00y\x03\x00\x00\x00\x1e\xf3" + // 0x00790300: 0x00001EF3
	"\x00Y\x03#\x00\x00\x1e\xf4" + // 0x00590323: 0x00001EF4
	"\x00y\x03#\x00\x00\x1e\xf5" + // 0x00790323: 0x00001EF5
	"\x00Y\x03\t\x00\x00\x1e\xf6" + // 0x00590309: 0x00001EF6
	"\x00y\x03\t\x00\x00\x1e\xf7" + // 0x00790309: 0x00001EF7
	"\x00Y\x03\x03\x00\x00\x1e\xf8" + // 0x00590303: 0x00001EF8
	"\x00y\x03\x03\x00\x00\x1e\xf9" + // 0x00790303: 0x00001EF9
	"\x03\xb1\x03\x13\x00\x00\x1f\x00" + // 0x03B10313: 0x00001F00
	"\x03\xb1\x03\x14\x00\x00\x1f\x01" + // 0x03B10314: 0x00001F01
	"\x1f\x00\x03\x00\x00\x00\x1f\x02" + // 0x1F000300: 0x00001F02
	"\x1f\x01\x03\x00\x00\x00\x1f\x03" + // 0x1F010300: 0x00001F03
	"\x1f\x00\x03\x01\x00\x00\x1f\x04" + // 0x1F000301: 0x00001F04
	"\x1f\x01\x03\x01\x00\x00\x1f\x05" + // 0x1F010301: 0x00001F05
	"\x1f\x00\x03B\x00\x00\x1f\x06" + // 0x1F000342: 0x00001F06
	"\x1f\x01\x03B\x00\x00\x1f\a" + // 0x1F010342: 0x00001F07
	"\x03\x91\x03\x13\x00\x00\x1f\b" + // 0x03910313: 0x00001F08
	"\x03\x91\x03\x14\x00\x00\x1f\t" + // 0x03910314: 0x00001F09
	"\x1f\b\x03\x00\x00\x00\x1f\n" + // 0x1F080300: 0x00001F0A
	"\x1f\t\x03\x00\x00\x00\x1f\v" + // 0x1F090300: 0x00001F0B
	"\x1f\b\x03\x01\x00\x00\x1f\f" + // 0x1F080301: 0x00001F0C
	"\x1f\t\x03\x01\x00\x00\x1f\r" + // 0x1F090301: 0x00001F0D
	"\x1f\b\x03B\x00\x00\x1f\x0e" + // 0x1F080342: 0x00001F0E
	"\x1f\t\x03B\x00\x00\x1f\x0f" + // 0x1F090342: 0x00001F0F
	"\x03\xb5\x03\x13\x00\x00\x1f\x10" + // 0x03B50313: 0x00001F10
	"\x03\xb5\x03\x14\x00\x00\x1f\x11" + // 0x03B50314: 0x00001F11
	"\x1f\x10\x03\x00\x00\x00\x1f\x12" + // 0x1F100300: 0x00001F12
	"\x1f\x11\x03\x00\x00\x00\x1f\x13" + // 0x1F110300: 0x00001F13
	"\x1f\x10\x03\x01\x00\x00\x1f\x14" + // 0x1F100301: 0x00001F14
	"\x1f\x11\x03\x01\x00\x00\x1f\x15" + // 0x1F110301: 0x00001F15
	"\x03\x95\x03\x13\x00\x00\x1f\x18" + // 0x03950313: 0x00001F18
	"\x03\x95\x03\x14\x00\x00\x1f\x19" + // 0x03950314: 0x00001F19
	"\x1f\x18\x03\x00\x00\x00\x1f\x1a" + // 0x1F180300: 0x00001F1A
	"\x1f\x19\x03\x00\x00\x00\x1f\x1b" + // 0x1F190300: 0x00001F1B
	"\x1f\x18\x03\x01\x00\x00\x1f\x1c" + // 0x1F180301: 0x00001F1C
	"\x1f\x19\x03\x01\x00\x00\x1f\x1d" + // 0x1F190301: 0x00001F1D
	"\x03\xb7\x03\x13\x00\x00\x1f " + // 0x03B70313: 0x00001F20
	"\x03\xb7\x03\x14\x00\x00\x1f!" + // 0x03B70314: 0x00001F21
	"\x1f \x03\x00\x00\x00\x1f\"" + // 0x1F200300: 0x00001F22
	"\x1f!\x03\x00\x00\x00\x1f#" + // 0x1F210300: 0x00001F23
	"\x1f \x03\x01\x00\x00\x1f$" + // 0x1F200301: 0x00001F24
	"\x1f!\x03\x01\x00\x00\x1f%" + // 0x1F210301: 0x00001F25
	"\x1f \x03B\x00\x00\x1f&" + // 0x1F200342: 0x00001F26
	"\x1f!\x03B\x00\x00\x1f'" + // 0x1F210342: 0x00001F27
	"\x03\x97\x03\x13\x00\x00\x1f(" + // 0x03970313: 0x00001F28
	"\x03\x97\x03\x14\x00\x00\x1f)" + // 0x03970314: 0x00001F29
	"\x1f(\x03\x00\x00\x00\x1f*" + // 0x1F280300: 0x00001F2A
	"\x1f)\x03\x00\x00\x00\x1f+" + // 0x1F290300: 0x00001F2B
	"\x1f(\x03\x01\x00\x00\x1f," + // 0x1F280301: 0x00001F2C
	"\x1f)\x03\x01\x00\x00\x1f-" + // 0x1F290301: 0x00001F2D
	"\x1f(\x03B\x00\x00\x1f." + // 0x1F280342: 0x00001F2E
	"\x1f)\x03B\x00\x00\x1f/" + // 0x1F290342: 0x00001F2F
	"\x03\xb9\x03\x13\x00\x00\x1f0" + // 0x03B90313: 0x00001F30
	"\x03\xb9\x03\x14\x00\x00\x1f1" + // 0x03B90314: 0x00001F31
	"\x1f0\x03\x00\x00\x00\x1f2" + // 0x1F300300: 0x00001F32
	"\x1f1\x03\x00\x00\x00\x1f3" + // 0x1F310300: 0x00001F33
	"\x1f0\x03\x01\x00\x00\x1f4" + // 0x1F300301: 0x00001F34
	"\x1f1\x03\x01\x00\x00\x1f5" + // 0x1F310301: 0x00001F35
	"\x1f0\x03B\x00\x00\x1f6" + // 0x1F300342: 0x00001F36
	"\x1f1\x03B\x00\x00\x1f7" + // 0x1F310342: 0x00001F37
	"\x03\x99\x03\x13\x00\x00\x1f8" + // 0x03990313: 0x00001F38
	"\x03\x99\x03\x14\x00\x00\x1f9" + // 0x03990314: 0x00001F39
	"\x1f8\x03\x00\x00\x00\x1f:" + // 0x1F380300: 0x00001F3A
	"\x1f9\x03\x00\x00\x00\x1f;" + // 0x1F390300: 0x00001F3B
	"\x1f8\x03\x01\x00\x00\x1f<" + // 0x1F380301: 0x00001F3C
	"\x1f9\x03\x01\x00\x00\x1f=" + // 0x1F390301: 0x00001F3D
	"\x1f8\x03B\x00\x00\x1f>" + // 0x1F380342: 0x00001F3E
	"\x1f9\x03B\x00\x00\x1f?" + // 0x1F390342: 0x00001F3F
	"\x03\xbf\x03\x13\x00\x00\x1f@" + // 0x03BF0313: 0x00001F40
	"\x03\xbf\x03\x14\x00\x00\x1fA" + // 0x03BF0314: 0x00001F41
	"\x1f@\x03\x00\x00\x00\x1fB" + // 0x1F400300: 0x00001F42
	"\x1fA\x03\x00\x00\x00\x1fC" + // 0x1F410300: 0x00001F43
	"\x1f@\x03\x01\x00\x00\x1fD" + // 0x1F400301: 0x00001F44
	"\x1fA\x03\x01\x00\x00\x1fE" + // 0x1F410301: 0x00001F45
	"\x03\x9f\x03\x13\x00\x00\x1fH" + // 0x039F0313: 0x00001F48
	"\x03\x9f\x03\x14\x00\x00\x1fI" + // 0x039F0314: 0x00001F49
	"\x1fH\x03\x00\x00\x00\x1fJ" + // 0x1F480300: 0x00001F4A
	"\x1fI\x03\x00\x00\x00\x1fK" + // 0x1F490300: 0x00001F4B
	"\x1fH\x03\x01\x00\x00\x1fL" + // 0x1F480301: 0x00001F4C
	"\x1fI\x03\x01\x00\x00\x1fM" + // 0x1F490301: 0x00001F4D
	"\x03\xc5\x03\x13\x00\x00\x1fP" + // 0x03C50313: 0x00001F50
	"\x03\xc5\x03\x14\x00\x00\x1fQ" + // 0x03C50314: 0x00001F51
	"\x1fP\x03\x00\x00\x00\x1fR" + // 0x1F500300: 0x00001F52
	"\x1fQ\x03\x00\x00\x00\x1fS" + // 0x1F510300: 0x00001F53
	"\x1fP\x03\x01\x00\x00\x1fT" + // 0x1F500301: 0x00001F54
	"\x1fQ\x03\x01\x00\x00\x1fU" + // 0x1F510301: 0x00001F55
	"\x1fP\x03B\x00\x00\x1fV" + // 0x1F500342: 0x00001F56
	"\x1fQ\x03B\x00\x00\x1fW" + // 0x1F510342: 0x00001F57
	"\x03\xa5\x03\x14\x00\x00\x1fY" + // 0x03A50314: 0x00001F59
	"\x1fY\x03\x00\x00\x00\x1f[" + // 0x1F590300: 0x00001F5B
	"\x1fY\x03\x01\x00\x00\x1f]" + // 0x1F590301: 0x00001F5D
	"\x1fY\x03B\x00\x00\x1f_" + // 0x1F590342: 0x00001F5F
	"\x03\xc9\x03\x13\x00\x00\x1f`" + // 0x03C90313: 0x00001F60
	"\x03\xc9\x03\x14\x00\x00\x1fa" + // 0x03C90314: 0x00001F61
	"\x1f`\x03\x00\x00\x00\x1fb" + // 0x1F600300: 0x00001F62
	"\x1fa\x03\x00\x00\x00\x1fc" + // 0x1F610300: 0x00001F63
	"\x1f`\x03\x01\x00\x00\x1fd" + // 0x1F600301: 0x00001F64
	"\x1fa\x03\x01\x00\x00\x1fe" + // 0x1F610301: 0x00001F65
	"\x1f`\x03B\x00\x00\x1ff" + // 0x1F600342: 0x00001F66
	"\x1fa\x03B\x00\x00\x1fg" + // 0x1F610342: 0x00001F67
	"\x03\xa9\x03\x13\x00\x00\x1fh" + // 0x03A90313: 0x00001F68
	"\x03\xa9\x03\x14\x00\x00\x1fi" + // 0x03A90314: 0x00001F69
	"\x1fh\x03\x00\x00\x00\x1fj" + // 0x1F680300: 0x00001F6A
	"\x1fi\x03\x00\x00\x00\x1fk" + // 0x1F690300: 0x00001F6B
	"\x1fh\x03\x01\x00\x00\x1fl" + // 0x1F680301: 0x00001F6C
	"\x1fi\x03\x01\x00\x00\x1fm" + // 0x1F690301: 0x00001F6D
	"\x1fh\x03B\x00\x00\x1fn" + // 0x1F680342: 0x00001F6E
	"\x1fi\x03B\x00\x00\x1fo" + // 0x1F690342: 0x00001F6F
	"\x03\xb1\x03\x00\x00\x00\x1fp" + // 0x03B10300: 0x00001F70
	"\x03\xb5\x03\x00\x00\x00\x1fr" + // 0x03B50300: 0x00001F72
	"\x03\xb7\x03\x00\x00\x00\x1ft" + // 0x03B70300: 0x00001F74
	"\x03\xb9\x03\x00\x00\x00\x1fv" + // 0x03B90300: 0x00001F76
	"\x03\xbf\x03\x00\x00\x00\x1fx" + // 0x03BF0300: 0x00001F78
	"\x03\xc5\x03\x00\x00\x00\x1fz" + // 0x03C50300: 0x00001F7A
	"\x03\xc9\x03\x00\x00\x00\x1f|" + // 0x03C90300: 0x00001F7C
	"\x1f\x00\x03E\x00\x00\x1f\x80" + // 0x1F000345: 0x00001F80
	"\x1f\x01\x03E\x00\x00\x1f\x81" + // 0x1F010345: 0x00001F81
	"\x1f\x02\x03E\x00\x00\x1f\x82" + // 0x1F020345: 0x00001F82
	"\x1f\x03\x03E\x00\x00\x1f\x83" + // 0x1F030345: 0x00001F83
	"\x1f\x04\x03E\x00\x00\x1f\x84" + // 0x1F040345: 0x00001F84
	"\x1f\x05\x03E\x00\x00\x1f\x85" + // 0x1F050345: 0x00001F85
	"\x1f\x06\x03E\x00\x00\x1f\x86" + // 0x1F060345: 0x00001F86
	"\x1f\a\x03E\x00\x00\x1f\x87" + // 0x1F070345: 0x00001F87
	"\x1f\b\x03E\x00\x00\x1f\x88" + // 0x1F080345: 0x00001F88
	"\x1f\t\x03E\x00\x00\x1f\x89" + // 0x1F090345: 0x00001F89
	"\x1f\n\x03E\x00\x00\x1f\x8a" + // 0x1F0A0345: 0x00001F8A
	"\x1f\v\x03E\x00\x00\x1f\x8b" + // 0x1F0B0345: 0x00001F8B
	"\x1f\f\x03E\x00\x00\x1f\x8c" + // 0x1F0C0345: 0x00001F8C
	"\x1f\r\x03E\x00\x00\x1f\x8d" + // 0x1F0D0345: 0x00001F8D
	"\x1f\x0e\x03E\x00\x00\x1f\x8e" + // 0x1F0E0345: 0x00001F8E
	"\x1f\x0f\x03E\x00\x00\x1f\x8f" + // 0x1F0F0345: 0x00001F8F
	"\x1f \x03E\x00\x00\x1f\x90" + // 0x1F200345: 0x00001F90
	"\x1f!\x03E\x00\x00\x1f\x91" + // 0x1F210345: 0x00001F91
	"\x1f\"\x03E\x00\x00\x1f\x92" + // 0x1F220345: 0x00001F92
	"\x1f#\x03E\x00\x00\x1f\x93" + // 0x1F230345: 0x00001F93
	"\x1f$\x03E\x00\x00\x1f\x94" + // 0x1F240345: 0x00001F94
	"\x1f%\x03E\x00\x00\x1f\x95" + // 0x1F250345: 0x00001F95
	"\x1f&\x03E\x00\x00\x1f\x96" + // 0x1F260345: 0x00001F96
	"\x1f'\x03E\x00\x00\x1f\x97" + // 0x1F270345: 0x00001F97
	"\x1f(\x03E\x00\x00\x1f\x98" + // 0x1F280345: 0x00001F98
	"\x1f)\x03E\x00\x00\x1f\x99" + // 0x1F290345: 0x00001F99
	"\x1f*\x03E\x00\x00\x1f\x9a" + // 0x1F2A0345: 0x00001F9A
	"\x1f+\x03E\x00\x00\x1f\x9b" + // 0x1F2B0345: 0x00001F9B
	"\x1f,\x03E\x00\x00\x1f\x9c" + // 0x1F2C0345: 0x00001F9C
	"\x1f-\x03E\x00\x00\x1f\x9d" + // 0x1F2D0345: 0x00001F9D
	"\x1f.\x03E\x00\x00\x1f\x9e" + // 0x1F2E0345: 0x00001F9E
	"\x1f/\x03E\x00\x00\x1f\x9f" + // 0x1F2F0345: 0x00001F9F
	"\x1f`\x03E\x00\x00\x1f\xa0" + // 0x1F600345: 0x00001FA0
	"\x1fa\x03E\x00\x00\x1f\xa1" + // 0x1F610345: 0x00001FA1
	"\x1fb\x03E\x00\x00\x1f\xa2" + // 0x1F620345: 0x00001FA2
	"\x1fc\x03E\x00\x00\x1f\xa3" + // 0x1F630345: 0x00001FA3
	"\x1fd\x03E\x00\x00\x1f\xa4" + // 0x1F640345: 0x00001FA4
	"\x1fe\x03E\x00\x00\x1f\xa5" + // 0x1F650345: 0x00001FA5
	"\x1ff\x03E\x00\x00\x1f\xa6" + // 0x1F660345: 0x00001FA6
	"\x1fg\x03E\x00\x00\x1f\xa7" + // 0x1F670345: 0x00001FA7
	"\x1fh\x03E\x00\x00\x1f\xa8" + // 0x1F680345: 0x00001FA8
	"\x1fi\x03E\x00\x00\x1f\xa9" + // 0x1F690345: 0x00001FA9
	"\x1fj\x03E\x00\x00\x1f\xaa" + // 0x1F6A0345: 0x00001FAA
	"\x1fk\x03E\x00\x00\x1f\xab" + // 0x1F6B0345: 0x00001FAB
	"\x1fl\x03E\x00\x00\x1f\xac" + // 0x1F6C0345: 0x00001FAC
	"\x1fm\x03E\x00\x00\x1f\xad" + // 0x1F6D0345: 0x00001FAD
	"\x1fn\x03E\x00\x00\x1f\xae" + // 0x1F6E0345: 0x00001FAE
	"\x1fo\x03E\x00\x00\x1f\xaf" + // 0x1F6F0345: 0x00001FAF
	"\x03\xb1\x03\x06\x00\x00\x1f\xb0" + // 0x03B10306: 0x00001FB0
	"\x03\xb1\x03\x04\x00\x00\x1f\xb1" + // 0x03B10304: 0x00001FB1
	"\x1fp\x03E\x00\x00\x1f\xb2" + // 0x1F700345: 0x00001FB2
	"\x03\xb1\x03E\x00\x00\x1f\xb3" + // 0x03B10345: 0x00001FB3
	"\x03\xac\x03E\x00\x00\x1f\xb4" + // 0x03AC0345: 0x00001FB4
	"\x03\xb1\x03B\x00\x00\x1f\xb6" + // 0x03B10342: 0x00001FB6
	"\x1f\xb6\x03E\x00\x00\x1f\xb7" + // 0x1FB60345: 0x00001FB7
	"\x03\x91\x03\x06\x00\x00\x1f\xb8" + // 0x03910306: 0x00001FB8
	"\x03\x91\x03\x04\x00\x00\x1f\xb9" + // 0x03910304: 0x00001FB9
	"\x03\x91\x03\x00\x00\x00\x1f\xba" + // 0x03910300: 0x00001FBA
	"\x03\x91\x03E\x00\x00\x1f\xbc" + // 0x03910345: 0x00001FBC
	"\x00\xa8\x03B\x00\x00\x1f\xc1" + // 0x00A80342: 0x00001FC1
	"\x1ft\x03E\x00\x00\x1f\xc2" + // 0x1F740345: 0x00001FC2
	"\x03\xb7\x03E\x00\x00\x1f\xc3" + // 0x03B70345: 0x00001FC3
	"\x03\xae\x03E\x00\x00\x1f\xc4" + // 0x03AE0345: 0x00001FC4
	"\x03\xb7\x03B\x00\x00\x1f\xc6" + // 0x03B70342: 0x00001FC6
	"\x1f\xc6\x03E\x00\x00\x1f\xc7" + // 0x1FC60345: 0x00001FC7
	"\x03\x95\x03\x00\x00\x00\x1f\xc8" + // 0x03950300: 0x00001FC8
	"\x03\x97\x03\x00\x00\x00\x1f\xca" + // 0x03970300: 0x00001FCA
	"\x03\x97\x03E\x00\x00\x1f\xcc" + // 0x03970345: 0x00001FCC
	"\x1f\xbf\x03\x00\x00\x00\x1f\xcd" + // 0x1FBF0300: 0x00001FCD
	"\x1f\xbf\x03\x01\x00\x00\x1f\xce" + // 0x1FBF0301: 0x00001FCE
	"\x1f\xbf\x03B\x00\x00\x1f\xcf" + // 0x1FBF0342: 0x00001FCF
	"\x03\xb9\x03\x06\x00\x00\x1f\xd0" + // 0x03B90306: 0x00001FD0
	"\x03\xb9\x03\x04\x00\x00\x1f\xd1" + // 0x03B90304: 0x00001FD1
	"\x03\xca\x03\x00\x00\x00\x1f\xd2" + // 0x03CA0300: 0x00001FD2
	"\x03\xb9\x03B\x00\x00\x1f\xd6" + // 0x03B90342: 0x00001FD6
	"\x03\xca\x03B\x00\x00\x1f\xd7" + // 0x03CA0342: 0x00001FD7
	"\x03\x99\x03\x06\x00\x00\x1f\xd8" + // 0x03990306: 0x00001FD8
	"\x03\x99\x03\x04\x00\x00\x1f\xd9" + // 0x03990304: 0x00001FD9
	"\x03\x99\x03\x00\x00\x00\x1f\xda" + // 0x03990300: 0x00001FDA
	"\x1f\xfe\x03\x00\x00\x00\x1f\xdd" + // 0x1FFE0300: 0x00001FDD
	"\x1f\xfe\x03\x01\x00\x00\x1f\xde" + // 0x1FFE0301: 0x00001FDE
	"\x1f\xfe\x03B\x00\x00\x1f\xdf" + // 0x1FFE0342: 0x00001FDF
	"\x03\xc5\x03\x06\x00\x00\x1f\xe0" + // 0x03C50306: 0x00001FE0
	"\x03\xc5\x03\x04\x00\x00\x1f\xe1" + // 0x03C50304: 0x00001FE1
	"\x03\xcb\x03\x00\x00\x00\x1f\xe2" + // 0x03CB0300: 0x00001FE2
	"\x03\xc1\x03\x13\x00\x00\x1f\xe4" + // 0x03C10313: 0x00001FE4
	"\x03\xc1\x03\x14\x00\x00\x1f\xe5" + // 0x03C10314: 0x00001FE5
	"\x03\xc5\x03B\x00\x00\x1f\xe6" + // 0x03C50342: 0x00001FE6
	"\x03\xcb\x03B\x00\x00\x1f\xe7" + // 0x03CB0342: 0x00001FE7
	"\x03\xa5\x03\x06\x00\x00\x1f\xe8" + // 0x03A50306: 0x00001FE8
	"\x03\xa5\x03\x04\x00\x00\x1f\xe9" + // 0x03A50304: 0x00001FE9
	"\x03\xa5\x03\x00\x00\x00\x1f\xea" + // 0x03A50300: 0x00001FEA
	"\x03\xa1\x03\x14\x00\x00\x1f\xec" + // 0x03A10314: 0x00001FEC
	"\x00\xa8\x03\x00\x00\x00\x1f\xed" + // 0x00A80300: 0x00001FED
	"\x1f|\x03E\x00\x00\x1f\xf2" + // 0x1F7C0345: 0x00001FF2
	"\x03\xc9\x03E\x00\x00\x1f\xf3" + // 0x03C90345: 0x00001FF3
	"\x03\xce\x03E\x00\x00\x1f\xf4" + // 0x03CE0345: 0x00001FF4
	"\x03\xc9\x03B\x00\x00\x1f\xf6" + // 0x03C90342: 0x00001FF6
	"\x1f\xf6\x03E\x00\x00\x1f\xf7" + // 0x1FF60345: 0x00001FF7
	"\x03\x9f\x03\x00\x00\x00\x1f\xf8" + // 0x039F0300: 0x00001FF8
	"\x03\xa9\x03\x00\x00\x00\x1f\xfa" + // 0x03A90300: 0x00001FFA
	"\x03\xa9\x03E\x00\x00\x1f\xfc" + // 0x03A90345: 0x00001FFC
	"!\x90\x038\x00\x00!\x9a" + // 0x21900338: 0x0000219A
	"!\x92\x038\x00\x00!\x9b" + // 0x21920338: 0x0000219B
	"!\x94\x038\x00\x00!\xae" + // 0x21940338: 0x000021AE
	"!\xd0\x038\x00\x00!\xcd" + // 0x21D00338: 0x000021CD
	"!\xd4\x038\x00\x00!\xce" + // 0x21D40338: 0x000021CE
	"!\xd2\x038\x00\x00!\xcf" + // 0x21D20338: 0x000021CF
	"\"\x03\x038\x00\x00\"\x04" + // 0x22030338: 0x00002204
	"\"\b\x038\x00\x00\"\t" + // 0x22080338: 0x00002209
	"\"\v\x038\x00\x00\"\f" + // 0x220B0338: 0x0000220C
	"\"#\x038\x00\x00\"$" + // 0x22230338: 0x00002224
	"\"%\x038\x00\x00\"&" + // 0x22250338: 0x00002226
	"\"<\x038\x00\x00\"A" + // 0x223C0338: 0x00002241
	"\"C\x038\x00\x00\"D" + // 0x22430338: 0x00002244
	"\"E\x038\x00\x00\"G" + // 0x22450338: 0x00002247
	"\"H\x038\x00\x00\"I" + // 0x22480338: 0x00002249
	"\x00=\x038\x00\x00\"`" + // 0x003D0338: 0x00002260
	"\"a\x038\x00\x00\"b" + // 0x22610338: 0x00002262
	"\"M\x038\x00\x00\"m" + // 0x224D0338: 0x0000226D
	"\x00<\x038\x00\x00\"n" + // 0x003C0338: 0x0000226E
	"\x00>\x038\x00\x00\"o" + // 0x003E0338: 0x0000226F
	"\"d\x038\x00\x00\"p" + // 0x22640338: 0x00002270
	"\"e\x038\x00\x00\"q" + // 0x22650338: 0x00002271
	"\"r\x038\x00\x00\"t" + // 0x22720338: 0x00002274
	"\"s\x038\x00\x00\"u" + // 0x22730338: 0x00002275
	"\"v\x038\x00\x00\"x" + // 0x22760338: 0x00002278
	"\"w\x038\x00\x00\"y" + // 0x22770338: 0x00002279
	"\"z\x038\x00\x00\"\x80" + // 0x227A0338: 0x00002280
	"\"{\x038\x00\x00\"\x81" + // 0x227B0338: 0x00002281
	"\"\x82\x038\x00\x00\"\x84" + // 0x22820338: 0x00002284
	"\"\x83\x038\x00\x00\"\x85" + // 0x22830338: 0x00002285
	"\"\x86\x038\x00\x00\"\x88" + // 0x22860338: 0x00002288
	"\"\x87\x038\x00\x00\"\x89" + // 0x22870338: 0x00002289
	"\"\xa2\x038\x00\x00\"\xac" + // 0x22A20338: 0x000022AC
	"\"\xa8\x038\x00\x00\"\xad" + // 0x22A80338: 0x000022AD
	"\"\xa9\x038\x00\x00\"\xae" + // 0x22A90338: 0x000022AE
	"\"\xab\x038\x00\x00\"\xaf" + // 0x22AB0338: 0x000022AF
	"\"|\x038\x00\x00\"\xe0" + // 0x227C0338: 0x000022E0
	"\"}\x038\x00\x00\"\xe1" + // 0x227D0338: 0x000022E1
	"\"\x91\x038\x00\x00\"\xe2" + // 0x22910338: 0x000022E2
	"\"\x92\x038\x00\x00\"\xe3" + // 0x22920338: 0x000022E3
	"\"\xb2\x038\x00\x00\"\xea" + // 0x22B20338: 0x000022EA
	"\"\xb3\x038\x00\x00\"\xeb" + // 0x22B30338: 0x000022EB
	"\"\xb4\x038\x00\x00\"\xec" + // 0x22B40338: 0x000022EC
	"\"\xb5\x038\x00\x00\"\xed" + // 0x22B50338: 0x000022ED
	"0K0\x99\x00\x000L" + // 0x304B3099: 0x0000304C
	"0M0\x99\x00\x000N" + // 0x304D3099: 0x0000304E
	"0O0\x99\x00\x000P" + // 0x304F3099: 0x00003050
	"0Q0\x99\x00\x000R" + // 0x30513099: 0x00003052
	"0S0\x99\x00\x000T" + // 0x30533099: 0x00003054
	"0U0\x99\x00\x000V" + // 0x30553099: 0x00003056
	"0W0\x99\x00\x000X" + // 0x30573099: 0x00003058
	"0Y0\x99\x00\x000Z" + // 0x30593099: 0x0000305A
	"0[0\x99\x00\x000\\" + // 0x305B3099: 0x0000305C
	"0]0\x99\x00\x000^" + // 0x305D3099: 0x0000305E
	"0_0\x99\x00\x000`" + // 0x305F3099: 0x00003060
	"0a0\x99\x00\x000b" + // 0x30613099: 0x00003062
	"0d0\x99\x00\x000e" + // 0x30643099: 0x00003065
	"0f0\x99\x00\x000g" + // 0x30663099: 0x00003067
	"0h0\x99\x00\x000i" + // 0x30683099: 0x00003069
	"0o0\x99\x00\x000p" + // 0x306F3099: 0x00003070
	"0o0\x9a\x00\x000q" + // 0x306F309A: 0x00003071
	"0r0\x99\x00\x000s" + // 0x30723099: 0x00003073
	"0r0\x9a\x00\x000t" + // 0x3072309A: 0x00003074
	"0u0\x99\x00\x000v" + // 0x30753099: 0x00003076
	"0u0\x9a\x00\x000w" + // 0x3075309A: 0x00003077
	"0x0\x99\x00\x000y" + // 0x30783099: 0x00003079
	"0x0\x9a\x00\x000z" + // 0x3078309A: 0x0000307A
	"0{0\x99\x00\x000|" + // 0x307B3099: 0x0000307C
	"0{0\x9a\x00\x000}" + // 0x307B309A: 0x0000307D
	"0F0\x99\x00\x000\x94" + // 0x30463099: 0x00003094
	"0\x9d0\x99\x00\x000\x9e" + // 0x309D3099: 0x0000309E
	"0\xab0\x99\x00\x000\xac" + // 0x30AB3099: 0x000030AC
	"0\xad0\x99\x00\x000\xae" + // 0x30AD3099: 0x000030AE
	"0\xaf0\x99\x00\x000\xb0" + // 0x30AF3099: 0x000030B0
	"0\xb10\x99\x00\x000\xb2" + // 0x30B13099: 0x000030B2
	"0\xb30\x99\x00\x000\xb4" + // 0x30B33099: 0x000030B4
	"0\xb50\x99\x00\x000\xb6" + // 0x30B53099: 0x000030B6
	"0\xb70\x99\x00\x000\xb8" + // 0x30B73099: 0x000030B8
	"0\xb90\x99\x00\x000\xba" + // 0x30B93099: 0x000030BA
	"0\xbb0\x99\x00\x000\xbc" + // 0x30BB3099: 0x000030BC
	"0\xbd0\x99\x00\x000\xbe" + // 0x30BD3099: 0x000030BE
	"0\xbf0\x99\x00\x000\xc0" + // 0x30BF3099: 0x000030C0
	"0\xc10\x99\x00\x000\xc2" + // 0x30C13099: 0x000030C2
	"0\xc40\x99\x00\x000\xc5" + // 0x30C43099: 0x000030C5
	"0\xc60\x99\x00\x000\xc7" + // 0x30C63099: 0x000030C7
	"0\xc80\x99\x00\x000\xc9" + // 0x30C83099: 0x000030C9
	"0\xcf0\x99\x00\x000\xd0" + // 0x30CF3099: 0x000030D0
	"0\xcf0\x9a\x00\x000\xd1" + // 0x30CF309A: 0x000030D1
	"0\xd20\x99\x00\x000\xd3" + // 0x30D23099: 0x000030D3
	"0\xd20\x9a\x00\x000\xd4" + // 0x30D2309A: 0x000030D4
	"0\xd50\x99\x00\x000\xd6" + // 0x30D53099: 0x000030D6
	"0\xd50\x9a\x00\x000\xd7" + // 0x30D5309A: 0x000030D7
	"0\xd80\x99\x00\x000\xd9" + // 0x30D83099: 0x000030D9
	"0\xd80\x9a\x00\x000\xda" + // 0x30D8309A: 0x000030DA
	"0\xdb0\x99\x00\x000\xdc" + // 0x30DB3099: 0x000030DC
	"0\xdb0\x9a\x00\x000\xdd" + // 0x30DB309A: 0x000030DD
	"0\xa60\x99\x00\x000\xf4" + // 0x30A63099: 0x000030F4
	"0\xef0\x99\x00\x000\xf7" + // 0x30EF3099: 0x000030F7
	"0\xf00\x99\x00\x000\xf8" + // 0x30F03099: 0x000030F8
	"0\xf10\x99\x00\x000\xf9" + // 0x30F13099: 0x000030F9
	"0\xf20\x99\x00\x000\xfa" + // 0x30F23099: 0x000030FA
	"0\xfd0\x99\x00\x000\xfe" + // 0x30FD3099: 0x000030FE
	"\x10\x99\x10\xba\x00\x01\x10\x9a" + // 0x109910BA: 0x0001109A
	"\x10\x9b\x10\xba\x00\x01\x10\x9c" + // 0x109B10BA: 0x0001109C
	"\x10\xa5\x10\xba\x00\x01\x10\xab" + // 0x10A510BA: 0x000110AB
	"\x111\x11'\x00\x01\x11." + // 0x11311127: 0x0001112E
	"\x112\x11'\x00\x01\x11/" + // 0x11321127: 0x0001112F
	"\x13G\x13>\x00\x01\x13K" + // 0x1347133E: 0x0001134B
	"\x13G\x13W\x00\x01\x13L" + // 0x13471357: 0x0001134C
	"\x14\xb9\x14\xba\x00\x01\x14\xbb" + // 0x14B914BA: 0x000114BB
	"\x14\xb9\x14\xb0\x00\x01\x14\xbc" + // 0x14B914B0: 0x000114BC
	"\x14\xb9\x14\xbd\x00\x01\x14\xbe" + // 0x14B914BD: 0x000114BE
	"\x15\xb8\x15\xaf\x00\x01\x15\xba" + // 0x15B815AF: 0x000115BA
	"\x15\xb9\x15\xaf\x00\x01\x15\xbb" + // 0x15B915AF: 0x000115BB
	""
	// Total size of tables: 55KB (55977 bytes)
 07070100000F44000081A4000000000000000000000001645E367C0005EA77000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/text/unicode/norm/tables13.0.0.go // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.

//go:build go1.16
// +build go1.16

package norm

import "sync"

const (
	// Version is the Unicode edition from which the tables are derived.
	Version = "13.0.0"

	// MaxTransformChunkSize indicates the maximum number of bytes that Transform
	// may need to write atomically for any Form. Making a destination buffer at
	// least this size ensures that Transform can always make progress and that
	// the user does not need to grow the buffer on an ErrShortDst.
	MaxTransformChunkSize = 35 + maxNonStarters*4
)

var ccc = [56]uint8{
	0, 1, 6, 7, 8, 9, 10, 11,
	12, 13, 14, 15, 16, 17, 18, 19,
	20, 21, 22, 23, 24, 25, 26, 27,
	28, 29, 30, 31, 32, 33, 34, 35,
	36, 84, 91, 103, 107, 118, 122, 129,
	130, 132, 202, 214, 216, 218, 220, 222,
	224, 226, 228, 230, 232, 233, 234, 240,
}

const (
	firstMulti            = 0x1870
	firstCCC              = 0x2CAB
	endMulti              = 0x2F77
	firstLeadingCCC       = 0x49C5
	firstCCCZeroExcept    = 0x4A8F
	firstStarterWithNLead = 0x4AB6
	lastDecomp            = 0x4AB8
	maxDecomp             = 0x8000
)

// decomps: 19128 bytes
var decomps = [...]byte{
	// Bytes 0 - 3f
	0x00, 0x41, 0x20, 0x41, 0x21, 0x41, 0x22, 0x41,
	0x23, 0x41, 0x24, 0x41, 0x25, 0x41, 0x26, 0x41,
	0x27, 0x41, 0x28, 0x41, 0x29, 0x41, 0x2A, 0x41,
	0x2B, 0x41, 0x2C, 0x41, 0x2D, 0x41, 0x2E, 0x41,
	0x2F, 0x41, 0x30, 0x41, 0x31, 0x41, 0x32, 0x41,
	0x33, 0x41, 0x34, 0x41, 0x35, 0x41, 0x36, 0x41,
	0x37, 0x41, 0x38, 0x41, 0x39, 0x41, 0x3A, 0x41,
	0x3B, 0x41, 0x3C, 0x41, 0x3D, 0x41, 0x3E, 0x41,
	// Bytes 40 - 7f
	0x3F, 0x41, 0x40, 0x41, 0x41, 0x41, 0x42, 0x41,
	0x43, 0x41, 0x44, 0x41, 0x45, 0x41, 0x46, 0x41,
	0x47, 0x41, 0x48, 0x41, 0x49, 0x41, 0x4A, 0x41,
	0x4B, 0x41, 0x4C, 0x41, 0x4D, 0x41, 0x4E, 0x41,
	0x4F, 0x41, 0x50, 0x41, 0x51, 0x41, 0x52, 0x41,
	0x53, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41,
	0x57, 0x41, 0x58, 0x41, 0x59, 0x41, 0x5A, 0x41,
	0x5B, 0x41, 0x5C, 0x41, 0x5D, 0x41, 0x5E, 0x41,
	// Bytes 80 - bf
	0x5F, 0x41, 0x60, 0x41, 0x61, 0x41, 0x62, 0x41,
	0x63, 0x41, 0x64, 0x41, 0x65, 0x41, 0x66, 0x41,
	0x67, 0x41, 0x68, 0x41, 0x69, 0x41, 0x6A, 0x41,
	0x6B, 0x41, 0x6C, 0x41, 0x6D, 0x41, 0x6E, 0x41,
	0x6F, 0x41, 0x70, 0x41, 0x71, 0x41, 0x72, 0x41,
	0x73, 0x41, 0x74, 0x41, 0x75, 0x41, 0x76, 0x41,
	0x77, 0x41, 0x78, 0x41, 0x79, 0x41, 0x7A, 0x41,
	0x7B, 0x41, 0x7C, 0x41, 0x7D, 0x41, 0x7E, 0x42,
	// Bytes c0 - ff
	0xC2, 0xA2, 0x42, 0xC2, 0xA3, 0x42, 0xC2, 0xA5,
	0x42, 0xC2, 0xA6, 0x42, 0xC2, 0xAC, 0x42, 0xC2,
	0xB7, 0x42, 0xC3, 0x86, 0x42, 0xC3, 0xB0, 0x42,
	0xC4, 0xA6, 0x42, 0xC4, 0xA7, 0x42, 0xC4, 0xB1,
	0x42, 0xC5, 0x8B, 0x42, 0xC5, 0x93, 0x42, 0xC6,
	0x8E, 0x42, 0xC6, 0x90, 0x42, 0xC6, 0xAB, 0x42,
	0xC8, 0xA2, 0x42, 0xC8, 0xB7, 0x42, 0xC9, 0x90,
	0x42, 0xC9, 0x91, 0x42, 0xC9, 0x92, 0x42, 0xC9,
	// Bytes 100 - 13f
	0x94, 0x42, 0xC9, 0x95, 0x42, 0xC9, 0x99, 0x42,
	0xC9, 0x9B, 0x42, 0xC9, 0x9C, 0x42, 0xC9, 0x9F,
	0x42, 0xC9, 0xA1, 0x42, 0xC9, 0xA3, 0x42, 0xC9,
	0xA5, 0x42, 0xC9, 0xA6, 0x42, 0xC9, 0xA8, 0x42,
	0xC9, 0xA9, 0x42, 0xC9, 0xAA, 0x42, 0xC9, 0xAB,
	0x42, 0xC9, 0xAD, 0x42, 0xC9, 0xAF, 0x42, 0xC9,
	0xB0, 0x42, 0xC9, 0xB1, 0x42, 0xC9, 0xB2, 0x42,
	0xC9, 0xB3, 0x42, 0xC9, 0xB4, 0x42, 0xC9, 0xB5,
	// Bytes 140 - 17f
	0x42, 0xC9, 0xB8, 0x42, 0xC9, 0xB9, 0x42, 0xC9,
	0xBB, 0x42, 0xCA, 0x81, 0x42, 0xCA, 0x82, 0x42,
	0xCA, 0x83, 0x42, 0xCA, 0x89, 0x42, 0xCA, 0x8A,
	0x42, 0xCA, 0x8B, 0x42, 0xCA, 0x8C, 0x42, 0xCA,
	0x8D, 0x42, 0xCA, 0x90, 0x42, 0xCA, 0x91, 0x42,
	0xCA, 0x92, 0x42, 0xCA, 0x95, 0x42, 0xCA, 0x9D,
	0x42, 0xCA, 0x9F, 0x42, 0xCA, 0xB9, 0x42, 0xCE,
	0x91, 0x42, 0xCE, 0x92, 0x42, 0xCE, 0x93, 0x42,
	// Bytes 180 - 1bf
	0xCE, 0x94, 0x42, 0xCE, 0x95, 0x42, 0xCE, 0x96,
	0x42, 0xCE, 0x97, 0x42, 0xCE, 0x98, 0x42, 0xCE,
	0x99, 0x42, 0xCE, 0x9A, 0x42, 0xCE, 0x9B, 0x42,
	0xCE, 0x9C, 0x42, 0xCE, 0x9D, 0x42, 0xCE, 0x9E,
	0x42, 0xCE, 0x9F, 0x42, 0xCE, 0xA0, 0x42, 0xCE,
	0xA1, 0x42, 0xCE, 0xA3, 0x42, 0xCE, 0xA4, 0x42,
	0xCE, 0xA5, 0x42, 0xCE, 0xA6, 0x42, 0xCE, 0xA7,
	0x42, 0xCE, 0xA8, 0x42, 0xCE, 0xA9, 0x42, 0xCE,
	// Bytes 1c0 - 1ff
	0xB1, 0x42, 0xCE, 0xB2, 0x42, 0xCE, 0xB3, 0x42,
	0xCE, 0xB4, 0x42, 0xCE, 0xB5, 0x42, 0xCE, 0xB6,
	0x42, 0xCE, 0xB7, 0x42, 0xCE, 0xB8, 0x42, 0xCE,
	0xB9, 0x42, 0xCE, 0xBA, 0x42, 0xCE, 0xBB, 0x42,
	0xCE, 0xBC, 0x42, 0xCE, 0xBD, 0x42, 0xCE, 0xBE,
	0x42, 0xCE, 0xBF, 0x42, 0xCF, 0x80, 0x42, 0xCF,
	0x81, 0x42, 0xCF, 0x82, 0x42, 0xCF, 0x83, 0x42,
	0xCF, 0x84, 0x42, 0xCF, 0x85, 0x42, 0xCF, 0x86,
	// Bytes 200 - 23f
	0x42, 0xCF, 0x87, 0x42, 0xCF, 0x88, 0x42, 0xCF,
	0x89, 0x42, 0xCF, 0x9C, 0x42, 0xCF, 0x9D, 0x42,
	0xD0, 0xBD, 0x42, 0xD1, 0x8A, 0x42, 0xD1, 0x8C,
	0x42, 0xD7, 0x90, 0x42, 0xD7, 0x91, 0x42, 0xD7,
	0x92, 0x42, 0xD7, 0x93, 0x42, 0xD7, 0x94, 0x42,
	0xD7, 0x9B, 0x42, 0xD7, 0x9C, 0x42, 0xD7, 0x9D,
	0x42, 0xD7, 0xA2, 0x42, 0xD7, 0xA8, 0x42, 0xD7,
	0xAA, 0x42, 0xD8, 0xA1, 0x42, 0xD8, 0xA7, 0x42,
	// Bytes 240 - 27f
	0xD8, 0xA8, 0x42, 0xD8, 0xA9, 0x42, 0xD8, 0xAA,
	0x42, 0xD8, 0xAB, 0x42, 0xD8, 0xAC, 0x42, 0xD8,
	0xAD, 0x42, 0xD8, 0xAE, 0x42, 0xD8, 0xAF, 0x42,
	0xD8, 0xB0, 0x42, 0xD8, 0xB1, 0x42, 0xD8, 0xB2,
	0x42, 0xD8, 0xB3, 0x42, 0xD8, 0xB4, 0x42, 0xD8,
	0xB5, 0x42, 0xD8, 0xB6, 0x42, 0xD8, 0xB7, 0x42,
	0xD8, 0xB8, 0x42, 0xD8, 0xB9, 0x42, 0xD8, 0xBA,
	0x42, 0xD9, 0x81, 0x42, 0xD9, 0x82, 0x42, 0xD9,
	// Bytes 280 - 2bf
	0x83, 0x42, 0xD9, 0x84, 0x42, 0xD9, 0x85, 0x42,
	0xD9, 0x86, 0x42, 0xD9, 0x87, 0x42, 0xD9, 0x88,
	0x42, 0xD9, 0x89, 0x42, 0xD9, 0x8A, 0x42, 0xD9,
	0xAE, 0x42, 0xD9, 0xAF, 0x42, 0xD9, 0xB1, 0x42,
	0xD9, 0xB9, 0x42, 0xD9, 0xBA, 0x42, 0xD9, 0xBB,
	0x42, 0xD9, 0xBE, 0x42, 0xD9, 0xBF, 0x42, 0xDA,
	0x80, 0x42, 0xDA, 0x83, 0x42, 0xDA, 0x84, 0x42,
	0xDA, 0x86, 0x42, 0xDA, 0x87, 0x42, 0xDA, 0x88,
	// Bytes 2c0 - 2ff
	0x42, 0xDA, 0x8C, 0x42, 0xDA, 0x8D, 0x42, 0xDA,
	0x8E, 0x42, 0xDA, 0x91, 0x42, 0xDA, 0x98, 0x42,
	0xDA, 0xA1, 0x42, 0xDA, 0xA4, 0x42, 0xDA, 0xA6,
	0x42, 0xDA, 0xA9, 0x42, 0xDA, 0xAD, 0x42, 0xDA,
	0xAF, 0x42, 0xDA, 0xB1, 0x42, 0xDA, 0xB3, 0x42,
	0xDA, 0xBA, 0x42, 0xDA, 0xBB, 0x42, 0xDA, 0xBE,
	0x42, 0xDB, 0x81, 0x42, 0xDB, 0x85, 0x42, 0xDB,
	0x86, 0x42, 0xDB, 0x87, 0x42, 0xDB, 0x88, 0x42,
	// Bytes 300 - 33f
	0xDB, 0x89, 0x42, 0xDB, 0x8B, 0x42, 0xDB, 0x8C,
	0x42, 0xDB, 0x90, 0x42, 0xDB, 0x92, 0x43, 0xE0,
	0xBC, 0x8B, 0x43, 0xE1, 0x83, 0x9C, 0x43, 0xE1,
	0x84, 0x80, 0x43, 0xE1, 0x84, 0x81, 0x43, 0xE1,
	0x84, 0x82, 0x43, 0xE1, 0x84, 0x83, 0x43, 0xE1,
	0x84, 0x84, 0x43, 0xE1, 0x84, 0x85, 0x43, 0xE1,
	0x84, 0x86, 0x43, 0xE1, 0x84, 0x87, 0x43, 0xE1,
	0x84, 0x88, 0x43, 0xE1, 0x84, 0x89, 0x43, 0xE1,
	// Bytes 340 - 37f
	0x84, 0x8A, 0x43, 0xE1, 0x84, 0x8B, 0x43, 0xE1,
	0x84, 0x8C, 0x43, 0xE1, 0x84, 0x8D, 0x43, 0xE1,
	0x84, 0x8E, 0x43, 0xE1, 0x84, 0x8F, 0x43, 0xE1,
	0x84, 0x90, 0x43, 0xE1, 0x84, 0x91, 0x43, 0xE1,
	0x84, 0x92, 0x43, 0xE1, 0x84, 0x94, 0x43, 0xE1,
	0x84, 0x95, 0x43, 0xE1, 0x84, 0x9A, 0x43, 0xE1,
	0x84, 0x9C, 0x43, 0xE1, 0x84, 0x9D, 0x43, 0xE1,
	0x84, 0x9E, 0x43, 0xE1, 0x84, 0xA0, 0x43, 0xE1,
	// Bytes 380 - 3bf
	0x84, 0xA1, 0x43, 0xE1, 0x84, 0xA2, 0x43, 0xE1,
	0x84, 0xA3, 0x43, 0xE1, 0x84, 0xA7, 0x43, 0xE1,
	0x84, 0xA9, 0x43, 0xE1, 0x84, 0xAB, 0x43, 0xE1,
	0x84, 0xAC, 0x43, 0xE1, 0x84, 0xAD, 0x43, 0xE1,
	0x84, 0xAE, 0x43, 0xE1, 0x84, 0xAF, 0x43, 0xE1,
	0x84, 0xB2, 0x43, 0xE1, 0x84, 0xB6, 0x43, 0xE1,
	0x85, 0x80, 0x43, 0xE1, 0x85, 0x87, 0x43, 0xE1,
	0x85, 0x8C, 0x43, 0xE1, 0x85, 0x97, 0x43, 0xE1,
	// Bytes 3c0 - 3ff
	0x85, 0x98, 0x43, 0xE1, 0x85, 0x99, 0x43, 0xE1,
	0x85, 0xA0, 0x43, 0xE1, 0x86, 0x84, 0x43, 0xE1,
	0x86, 0x85, 0x43, 0xE1, 0x86, 0x88, 0x43, 0xE1,
	0x86, 0x91, 0x43, 0xE1, 0x86, 0x92, 0x43, 0xE1,
	0x86, 0x94, 0x43, 0xE1, 0x86, 0x9E, 0x43, 0xE1,
	0x86, 0xA1, 0x43, 0xE1, 0x87, 0x87, 0x43, 0xE1,
	0x87, 0x88, 0x43, 0xE1, 0x87, 0x8C, 0x43, 0xE1,
	0x87, 0x8E, 0x43, 0xE1, 0x87, 0x93, 0x43, 0xE1,
	// Bytes 400 - 43f
	0x87, 0x97, 0x43, 0xE1, 0x87, 0x99, 0x43, 0xE1,
	0x87, 0x9D, 0x43, 0xE1, 0x87, 0x9F, 0x43, 0xE1,
	0x87, 0xB1, 0x43, 0xE1, 0x87, 0xB2, 0x43, 0xE1,
	0xB4, 0x82, 0x43, 0xE1, 0xB4, 0x96, 0x43, 0xE1,
	0xB4, 0x97, 0x43, 0xE1, 0xB4, 0x9C, 0x43, 0xE1,
	0xB4, 0x9D, 0x43, 0xE1, 0xB4, 0xA5, 0x43, 0xE1,
	0xB5, 0xBB, 0x43, 0xE1, 0xB6, 0x85, 0x43, 0xE2,
	0x80, 0x82, 0x43, 0xE2, 0x80, 0x83, 0x43, 0xE2,
	// Bytes 440 - 47f
	0x80, 0x90, 0x43, 0xE2, 0x80, 0x93, 0x43, 0xE2,
	0x80, 0x94, 0x43, 0xE2, 0x82, 0xA9, 0x43, 0xE2,
	0x86, 0x90, 0x43, 0xE2, 0x86, 0x91, 0x43, 0xE2,
	0x86, 0x92, 0x43, 0xE2, 0x86, 0x93, 0x43, 0xE2,
	0x88, 0x82, 0x43, 0xE2, 0x88, 0x87, 0x43, 0xE2,
	0x88, 0x91, 0x43, 0xE2, 0x88, 0x92, 0x43, 0xE2,
	0x94, 0x82, 0x43, 0xE2, 0x96, 0xA0, 0x43, 0xE2,
	0x97, 0x8B, 0x43, 0xE2, 0xA6, 0x85, 0x43, 0xE2,
	// Bytes 480 - 4bf
	0xA6, 0x86, 0x43, 0xE2, 0xB5, 0xA1, 0x43, 0xE3,
	0x80, 0x81, 0x43, 0xE3, 0x80, 0x82, 0x43, 0xE3,
	0x80, 0x88, 0x43, 0xE3, 0x80, 0x89, 0x43, 0xE3,
	0x80, 0x8A, 0x43, 0xE3, 0x80, 0x8B, 0x43, 0xE3,
	0x80, 0x8C, 0x43, 0xE3, 0x80, 0x8D, 0x43, 0xE3,
	0x80, 0x8E, 0x43, 0xE3, 0x80, 0x8F, 0x43, 0xE3,
	0x80, 0x90, 0x43, 0xE3, 0x80, 0x91, 0x43, 0xE3,
	0x80, 0x92, 0x43, 0xE3, 0x80, 0x94, 0x43, 0xE3,
	// Bytes 4c0 - 4ff
	0x80, 0x95, 0x43, 0xE3, 0x80, 0x96, 0x43, 0xE3,
	0x80, 0x97, 0x43, 0xE3, 0x82, 0xA1, 0x43, 0xE3,
	0x82, 0xA2, 0x43, 0xE3, 0x82, 0xA3, 0x43, 0xE3,
	0x82, 0xA4, 0x43, 0xE3, 0x82, 0xA5, 0x43, 0xE3,
	0x82, 0xA6, 0x43, 0xE3, 0x82, 0xA7, 0x43, 0xE3,
	0x82, 0xA8, 0x43, 0xE3, 0x82, 0xA9, 0x43, 0xE3,
	0x82, 0xAA, 0x43, 0xE3, 0x82, 0xAB, 0x43, 0xE3,
	0x82, 0xAD, 0x43, 0xE3, 0x82, 0xAF, 0x43, 0xE3,
	// Bytes 500 - 53f
	0x82, 0xB1, 0x43, 0xE3, 0x82, 0xB3, 0x43, 0xE3,
	0x82, 0xB5, 0x43, 0xE3, 0x82, 0xB7, 0x43, 0xE3,
	0x82, 0xB9, 0x43, 0xE3, 0x82, 0xBB, 0x43, 0xE3,
	0x82, 0xBD, 0x43, 0xE3, 0x82, 0xBF, 0x43, 0xE3,
	0x83, 0x81, 0x43, 0xE3, 0x83, 0x83, 0x43, 0xE3,
	0x83, 0x84, 0x43, 0xE3, 0x83, 0x86, 0x43, 0xE3,
	0x83, 0x88, 0x43, 0xE3, 0x83, 0x8A, 0x43, 0xE3,
	0x83, 0x8B, 0x43, 0xE3, 0x83, 0x8C, 0x43, 0xE3,
	// Bytes 540 - 57f
	0x83, 0x8D, 0x43, 0xE3, 0x83, 0x8E, 0x43, 0xE3,
	0x83, 0x8F, 0x43, 0xE3, 0x83, 0x92, 0x43, 0xE3,
	0x83, 0x95, 0x43, 0xE3, 0x83, 0x98, 0x43, 0xE3,
	0x83, 0x9B, 0x43, 0xE3, 0x83, 0x9E, 0x43, 0xE3,
	0x83, 0x9F, 0x43, 0xE3, 0x83, 0xA0, 0x43, 0xE3,
	0x83, 0xA1, 0x43, 0xE3, 0x83, 0xA2, 0x43, 0xE3,
	0x83, 0xA3, 0x43, 0xE3, 0x83, 0xA4, 0x43, 0xE3,
	0x83, 0xA5, 0x43, 0xE3, 0x83, 0xA6, 0x43, 0xE3,
	// Bytes 580 - 5bf
	0x83, 0xA7, 0x43, 0xE3, 0x83, 0xA8, 0x43, 0xE3,
	0x83, 0xA9, 0x43, 0xE3, 0x83, 0xAA, 0x43, 0xE3,
	0x83, 0xAB, 0x43, 0xE3, 0x83, 0xAC, 0x43, 0xE3,
	0x83, 0xAD, 0x43, 0xE3, 0x83, 0xAF, 0x43, 0xE3,
	0x83, 0xB0, 0x43, 0xE3, 0x83, 0xB1, 0x43, 0xE3,
	0x83, 0xB2, 0x43, 0xE3, 0x83, 0xB3, 0x43, 0xE3,
	0x83, 0xBB, 0x43, 0xE3, 0x83, 0xBC, 0x43, 0xE3,
	0x92, 0x9E, 0x43, 0xE3, 0x92, 0xB9, 0x43, 0xE3,
	// Bytes 5c0 - 5ff
	0x92, 0xBB, 0x43, 0xE3, 0x93, 0x9F, 0x43, 0xE3,
	0x94, 0x95, 0x43, 0xE3, 0x9B, 0xAE, 0x43, 0xE3,
	0x9B, 0xBC, 0x43, 0xE3, 0x9E, 0x81, 0x43, 0xE3,
	0xA0, 0xAF, 0x43, 0xE3, 0xA1, 0xA2, 0x43, 0xE3,
	0xA1, 0xBC, 0x43, 0xE3, 0xA3, 0x87, 0x43, 0xE3,
	0xA3, 0xA3, 0x43, 0xE3, 0xA4, 0x9C, 0x43, 0xE3,
	0xA4, 0xBA, 0x43, 0xE3, 0xA8, 0xAE, 0x43, 0xE3,
	0xA9, 0xAC, 0x43, 0xE3, 0xAB, 0xA4, 0x43, 0xE3,
	// Bytes 600 - 63f
	0xAC, 0x88, 0x43, 0xE3, 0xAC, 0x99, 0x43, 0xE3,
	0xAD, 0x89, 0x43, 0xE3, 0xAE, 0x9D, 0x43, 0xE3,
	0xB0, 0x98, 0x43, 0xE3, 0xB1, 0x8E, 0x43, 0xE3,
	0xB4, 0xB3, 0x43, 0xE3, 0xB6, 0x96, 0x43, 0xE3,
	0xBA, 0xAC, 0x43, 0xE3, 0xBA, 0xB8, 0x43, 0xE3,
	0xBC, 0x9B, 0x43, 0xE3, 0xBF, 0xBC, 0x43, 0xE4,
	0x80, 0x88, 0x43, 0xE4, 0x80, 0x98, 0x43, 0xE4,
	0x80, 0xB9, 0x43, 0xE4, 0x81, 0x86, 0x43, 0xE4,
	// Bytes 640 - 67f
	0x82, 0x96, 0x43, 0xE4, 0x83, 0xA3, 0x43, 0xE4,
	0x84, 0xAF, 0x43, 0xE4, 0x88, 0x82, 0x43, 0xE4,
	0x88, 0xA7, 0x43, 0xE4, 0x8A, 0xA0, 0x43, 0xE4,
	0x8C, 0x81, 0x43, 0xE4, 0x8C, 0xB4, 0x43, 0xE4,
	0x8D, 0x99, 0x43, 0xE4, 0x8F, 0x95, 0x43, 0xE4,
	0x8F, 0x99, 0x43, 0xE4, 0x90, 0x8B, 0x43, 0xE4,
	0x91, 0xAB, 0x43, 0xE4, 0x94, 0xAB, 0x43, 0xE4,
	0x95, 0x9D, 0x43, 0xE4, 0x95, 0xA1, 0x43, 0xE4,
	// Bytes 680 - 6bf
	0x95, 0xAB, 0x43, 0xE4, 0x97, 0x97, 0x43, 0xE4,
	0x97, 0xB9, 0x43, 0xE4, 0x98, 0xB5, 0x43, 0xE4,
	0x9A, 0xBE, 0x43, 0xE4, 0x9B, 0x87, 0x43, 0xE4,
	0xA6, 0x95, 0x43, 0xE4, 0xA7, 0xA6, 0x43, 0xE4,
	0xA9, 0xAE, 0x43, 0xE4, 0xA9, 0xB6, 0x43, 0xE4,
	0xAA, 0xB2, 0x43, 0xE4, 0xAC, 0xB3, 0x43, 0xE4,
	0xAF, 0x8E, 0x43, 0xE4, 0xB3, 0x8E, 0x43, 0xE4,
	0xB3, 0xAD, 0x43, 0xE4, 0xB3, 0xB8, 0x43, 0xE4,
	// Bytes 6c0 - 6ff
	0xB5, 0x96, 0x43, 0xE4, 0xB8, 0x80, 0x43, 0xE4,
	0xB8, 0x81, 0x43, 0xE4, 0xB8, 0x83, 0x43, 0xE4,
	0xB8, 0x89, 0x43, 0xE4, 0xB8, 0x8A, 0x43, 0xE4,
	0xB8, 0x8B, 0x43, 0xE4, 0xB8, 0x8D, 0x43, 0xE4,
	0xB8, 0x99, 0x43, 0xE4, 0xB8, 0xA6, 0x43, 0xE4,
	0xB8, 0xA8, 0x43, 0xE4, 0xB8, 0xAD, 0x43, 0xE4,
	0xB8, 0xB2, 0x43, 0xE4, 0xB8, 0xB6, 0x43, 0xE4,
	0xB8, 0xB8, 0x43, 0xE4, 0xB8, 0xB9, 0x43, 0xE4,
	// Bytes 700 - 73f
	0xB8, 0xBD, 0x43, 0xE4, 0xB8, 0xBF, 0x43, 0xE4,
	0xB9, 0x81, 0x43, 0xE4, 0xB9, 0x99, 0x43, 0xE4,
	0xB9, 0x9D, 0x43, 0xE4, 0xBA, 0x82, 0x43, 0xE4,
	0xBA, 0x85, 0x43, 0xE4, 0xBA, 0x86, 0x43, 0xE4,
	0xBA, 0x8C, 0x43, 0xE4, 0xBA, 0x94, 0x43, 0xE4,
	0xBA, 0xA0, 0x43, 0xE4, 0xBA, 0xA4, 0x43, 0xE4,
	0xBA, 0xAE, 0x43, 0xE4, 0xBA, 0xBA, 0x43, 0xE4,
	0xBB, 0x80, 0x43, 0xE4, 0xBB, 0x8C, 0x43, 0xE4,
	// Bytes 740 - 77f
	0xBB, 0xA4, 0x43, 0xE4, 0xBC, 0x81, 0x43, 0xE4,
	0xBC, 0x91, 0x43, 0xE4, 0xBD, 0xA0, 0x43, 0xE4,
	0xBE, 0x80, 0x43, 0xE4, 0xBE, 0x86, 0x43, 0xE4,
	0xBE, 0x8B, 0x43, 0xE4, 0xBE, 0xAE, 0x43, 0xE4,
	0xBE, 0xBB, 0x43, 0xE4, 0xBE, 0xBF, 0x43, 0xE5,
	0x80, 0x82, 0x43, 0xE5, 0x80, 0xAB, 0x43, 0xE5,
	0x81, 0xBA, 0x43, 0xE5, 0x82, 0x99, 0x43, 0xE5,
	0x83, 0x8F, 0x43, 0xE5, 0x83, 0x9A, 0x43, 0xE5,
	// Bytes 780 - 7bf
	0x83, 0xA7, 0x43, 0xE5, 0x84, 0xAA, 0x43, 0xE5,
	0x84, 0xBF, 0x43, 0xE5, 0x85, 0x80, 0x43, 0xE5,
	0x85, 0x85, 0x43, 0xE5, 0x85, 0x8D, 0x43, 0xE5,
	0x85, 0x94, 0x43, 0xE5, 0x85, 0xA4, 0x43, 0xE5,
	0x85, 0xA5, 0x43, 0xE5, 0x85, 0xA7, 0x43, 0xE5,
	0x85, 0xA8, 0x43, 0xE5, 0x85, 0xA9, 0x43, 0xE5,
	0x85, 0xAB, 0x43, 0xE5, 0x85, 0xAD, 0x43, 0xE5,
	0x85, 0xB7, 0x43, 0xE5, 0x86, 0x80, 0x43, 0xE5,
	// Bytes 7c0 - 7ff
	0x86, 0x82, 0x43, 0xE5, 0x86, 0x8D, 0x43, 0xE5,
	0x86, 0x92, 0x43, 0xE5, 0x86, 0x95, 0x43, 0xE5,
	0x86, 0x96, 0x43, 0xE5, 0x86, 0x97, 0x43, 0xE5,
	0x86, 0x99, 0x43, 0xE5, 0x86, 0xA4, 0x43, 0xE5,
	0x86, 0xAB, 0x43, 0xE5, 0x86, 0xAC, 0x43, 0xE5,
	0x86, 0xB5, 0x43, 0xE5, 0x86, 0xB7, 0x43, 0xE5,
	0x87, 0x89, 0x43, 0xE5, 0x87, 0x8C, 0x43, 0xE5,
	0x87, 0x9C, 0x43, 0xE5, 0x87, 0x9E, 0x43, 0xE5,
	// Bytes 800 - 83f
	0x87, 0xA0, 0x43, 0xE5, 0x87, 0xB5, 0x43, 0xE5,
	0x88, 0x80, 0x43, 0xE5, 0x88, 0x83, 0x43, 0xE5,
	0x88, 0x87, 0x43, 0xE5, 0x88, 0x97, 0x43, 0xE5,
	0x88, 0x9D, 0x43, 0xE5, 0x88, 0xA9, 0x43, 0xE5,
	0x88, 0xBA, 0x43, 0xE5, 0x88, 0xBB, 0x43, 0xE5,
	0x89, 0x86, 0x43, 0xE5, 0x89, 0x8D, 0x43, 0xE5,
	0x89, 0xB2, 0x43, 0xE5, 0x89, 0xB7, 0x43, 0xE5,
	0x8A, 0x89, 0x43, 0xE5, 0x8A, 0x9B, 0x43, 0xE5,
	// Bytes 840 - 87f
	0x8A, 0xA3, 0x43, 0xE5, 0x8A, 0xB3, 0x43, 0xE5,
	0x8A, 0xB4, 0x43, 0xE5, 0x8B, 0x87, 0x43, 0xE5,
	0x8B, 0x89, 0x43, 0xE5, 0x8B, 0x92, 0x43, 0xE5,
	0x8B, 0x9E, 0x43, 0xE5, 0x8B, 0xA4, 0x43, 0xE5,
	0x8B, 0xB5, 0x43, 0xE5, 0x8B, 0xB9, 0x43, 0xE5,
	0x8B, 0xBA, 0x43, 0xE5, 0x8C, 0x85, 0x43, 0xE5,
	0x8C, 0x86, 0x43, 0xE5, 0x8C, 0x95, 0x43, 0xE5,
	0x8C, 0x97, 0x43, 0xE5, 0x8C, 0x9A, 0x43, 0xE5,
	// Bytes 880 - 8bf
	0x8C, 0xB8, 0x43, 0xE5, 0x8C, 0xBB, 0x43, 0xE5,
	0x8C, 0xBF, 0x43, 0xE5, 0x8D, 0x81, 0x43, 0xE5,
	0x8D, 0x84, 0x43, 0xE5, 0x8D, 0x85, 0x43, 0xE5,
	0x8D, 0x89, 0x43, 0xE5, 0x8D, 0x91, 0x43, 0xE5,
	0x8D, 0x94, 0x43, 0xE5, 0x8D, 0x9A, 0x43, 0xE5,
	0x8D, 0x9C, 0x43, 0xE5, 0x8D, 0xA9, 0x43, 0xE5,
	0x8D, 0xB0, 0x43, 0xE5, 0x8D, 0xB3, 0x43, 0xE5,
	0x8D, 0xB5, 0x43, 0xE5, 0x8D, 0xBD, 0x43, 0xE5,
	// Bytes 8c0 - 8ff
	0x8D, 0xBF, 0x43, 0xE5, 0x8E, 0x82, 0x43, 0xE5,
	0x8E, 0xB6, 0x43, 0xE5, 0x8F, 0x83, 0x43, 0xE5,
	0x8F, 0x88, 0x43, 0xE5, 0x8F, 0x8A, 0x43, 0xE5,
	0x8F, 0x8C, 0x43, 0xE5, 0x8F, 0x9F, 0x43, 0xE5,
	0x8F, 0xA3, 0x43, 0xE5, 0x8F, 0xA5, 0x43, 0xE5,
	0x8F, 0xAB, 0x43, 0xE5, 0x8F, 0xAF, 0x43, 0xE5,
	0x8F, 0xB1, 0x43, 0xE5, 0x8F, 0xB3, 0x43, 0xE5,
	0x90, 0x86, 0x43, 0xE5, 0x90, 0x88, 0x43, 0xE5,
	// Bytes 900 - 93f
	0x90, 0x8D, 0x43, 0xE5, 0x90, 0x8F, 0x43, 0xE5,
	0x90, 0x9D, 0x43, 0xE5, 0x90, 0xB8, 0x43, 0xE5,
	0x90, 0xB9, 0x43, 0xE5, 0x91, 0x82, 0x43, 0xE5,
	0x91, 0x88, 0x43, 0xE5, 0x91, 0xA8, 0x43, 0xE5,
	0x92, 0x9E, 0x43, 0xE5, 0x92, 0xA2, 0x43, 0xE5,
	0x92, 0xBD, 0x43, 0xE5, 0x93, 0xB6, 0x43, 0xE5,
	0x94, 0x90, 0x43, 0xE5, 0x95, 0x8F, 0x43, 0xE5,
	0x95, 0x93, 0x43, 0xE5, 0x95, 0x95, 0x43, 0xE5,
	// Bytes 940 - 97f
	0x95, 0xA3, 0x43, 0xE5, 0x96, 0x84, 0x43, 0xE5,
	0x96, 0x87, 0x43, 0xE5, 0x96, 0x99, 0x43, 0xE5,
	0x96, 0x9D, 0x43, 0xE5, 0x96, 0xAB, 0x43, 0xE5,
	0x96, 0xB3, 0x43, 0xE5, 0x96, 0xB6, 0x43, 0xE5,
	0x97, 0x80, 0x43, 0xE5, 0x97, 0x82, 0x43, 0xE5,
	0x97, 0xA2, 0x43, 0xE5, 0x98, 0x86, 0x43, 0xE5,
	0x99, 0x91, 0x43, 0xE5, 0x99, 0xA8, 0x43, 0xE5,
	0x99, 0xB4, 0x43, 0xE5, 0x9B, 0x97, 0x43, 0xE5,
	// Bytes 980 - 9bf
	0x9B, 0x9B, 0x43, 0xE5, 0x9B, 0xB9, 0x43, 0xE5,
	0x9C, 0x96, 0x43, 0xE5, 0x9C, 0x97, 0x43, 0xE5,
	0x9C, 0x9F, 0x43, 0xE5, 0x9C, 0xB0, 0x43, 0xE5,
	0x9E, 0x8B, 0x43, 0xE5, 0x9F, 0x8E, 0x43, 0xE5,
	0x9F, 0xB4, 0x43, 0xE5, 0xA0, 0x8D, 0x43, 0xE5,
	0xA0, 0xB1, 0x43, 0xE5, 0xA0, 0xB2, 0x43, 0xE5,
	0xA1, 0x80, 0x43, 0xE5, 0xA1, 0x9A, 0x43, 0xE5,
	0xA1, 0x9E, 0x43, 0xE5, 0xA2, 0xA8, 0x43, 0xE5,
	// Bytes 9c0 - 9ff
	0xA2, 0xAC, 0x43, 0xE5, 0xA2, 0xB3, 0x43, 0xE5,
	0xA3, 0x98, 0x43, 0xE5, 0xA3, 0x9F, 0x43, 0xE5,
	0xA3, 0xAB, 0x43, 0xE5, 0xA3, 0xAE, 0x43, 0xE5,
	0xA3, 0xB0, 0x43, 0xE5, 0xA3, 0xB2, 0x43, 0xE5,
	0xA3, 0xB7, 0x43, 0xE5, 0xA4, 0x82, 0x43, 0xE5,
	0xA4, 0x86, 0x43, 0xE5, 0xA4, 0x8A, 0x43, 0xE5,
	0xA4, 0x95, 0x43, 0xE5, 0xA4, 0x9A, 0x43, 0xE5,
	0xA4, 0x9C, 0x43, 0xE5, 0xA4, 0xA2, 0x43, 0xE5,
	// Bytes a00 - a3f
	0xA4, 0xA7, 0x43, 0xE5, 0xA4, 0xA9, 0x43, 0xE5,
	0xA5, 0x84, 0x43, 0xE5, 0xA5, 0x88, 0x43, 0xE5,
	0xA5, 0x91, 0x43, 0xE5, 0xA5, 0x94, 0x43, 0xE5,
	0xA5, 0xA2, 0x43, 0xE5, 0xA5, 0xB3, 0x43, 0xE5,
	0xA7, 0x98, 0x43, 0xE5, 0xA7, 0xAC, 0x43, 0xE5,
	0xA8, 0x9B, 0x43, 0xE5, 0xA8, 0xA7, 0x43, 0xE5,
	0xA9, 0xA2, 0x43, 0xE5, 0xA9, 0xA6, 0x43, 0xE5,
	0xAA, 0xB5, 0x43, 0xE5, 0xAC, 0x88, 0x43, 0xE5,
	// Bytes a40 - a7f
	0xAC, 0xA8, 0x43, 0xE5, 0xAC, 0xBE, 0x43, 0xE5,
	0xAD, 0x90, 0x43, 0xE5, 0xAD, 0x97, 0x43, 0xE5,
	0xAD, 0xA6, 0x43, 0xE5, 0xAE, 0x80, 0x43, 0xE5,
	0xAE, 0x85, 0x43, 0xE5, 0xAE, 0x97, 0x43, 0xE5,
	0xAF, 0x83, 0x43, 0xE5, 0xAF, 0x98, 0x43, 0xE5,
	0xAF, 0xA7, 0x43, 0xE5, 0xAF, 0xAE, 0x43, 0xE5,
	0xAF, 0xB3, 0x43, 0xE5, 0xAF, 0xB8, 0x43, 0xE5,
	0xAF, 0xBF, 0x43, 0xE5, 0xB0, 0x86, 0x43, 0xE5,
	// Bytes a80 - abf
	0xB0, 0x8F, 0x43, 0xE5, 0xB0, 0xA2, 0x43, 0xE5,
	0xB0, 0xB8, 0x43, 0xE5, 0xB0, 0xBF, 0x43, 0xE5,
	0xB1, 0xA0, 0x43, 0xE5, 0xB1, 0xA2, 0x43, 0xE5,
	0xB1, 0xA4, 0x43, 0xE5, 0xB1, 0xA5, 0x43, 0xE5,
	0xB1, 0xAE, 0x43, 0xE5, 0xB1, 0xB1, 0x43, 0xE5,
	0xB2, 0x8D, 0x43, 0xE5, 0xB3, 0x80, 0x43, 0xE5,
	0xB4, 0x99, 0x43, 0xE5, 0xB5, 0x83, 0x43, 0xE5,
	0xB5, 0x90, 0x43, 0xE5, 0xB5, 0xAB, 0x43, 0xE5,
	// Bytes ac0 - aff
	0xB5, 0xAE, 0x43, 0xE5, 0xB5, 0xBC, 0x43, 0xE5,
	0xB6, 0xB2, 0x43, 0xE5, 0xB6, 0xBA, 0x43, 0xE5,
	0xB7, 0x9B, 0x43, 0xE5, 0xB7, 0xA1, 0x43, 0xE5,
	0xB7, 0xA2, 0x43, 0xE5, 0xB7, 0xA5, 0x43, 0xE5,
	0xB7, 0xA6, 0x43, 0xE5, 0xB7, 0xB1, 0x43, 0xE5,
	0xB7, 0xBD, 0x43, 0xE5, 0xB7, 0xBE, 0x43, 0xE5,
	0xB8, 0xA8, 0x43, 0xE5, 0xB8, 0xBD, 0x43, 0xE5,
	0xB9, 0xA9, 0x43, 0xE5, 0xB9, 0xB2, 0x43, 0xE5,
	// Bytes b00 - b3f
	0xB9, 0xB4, 0x43, 0xE5, 0xB9, 0xBA, 0x43, 0xE5,
	0xB9, 0xBC, 0x43, 0xE5, 0xB9, 0xBF, 0x43, 0xE5,
	0xBA, 0xA6, 0x43, 0xE5, 0xBA, 0xB0, 0x43, 0xE5,
	0xBA, 0xB3, 0x43, 0xE5, 0xBA, 0xB6, 0x43, 0xE5,
	0xBB, 0x89, 0x43, 0xE5, 0xBB, 0x8A, 0x43, 0xE5,
	0xBB, 0x92, 0x43, 0xE5, 0xBB, 0x93, 0x43, 0xE5,
	0xBB, 0x99, 0x43, 0xE5, 0xBB, 0xAC, 0x43, 0xE5,
	0xBB, 0xB4, 0x43, 0xE5, 0xBB, 0xBE, 0x43, 0xE5,
	// Bytes b40 - b7f
	0xBC, 0x84, 0x43, 0xE5, 0xBC, 0x8B, 0x43, 0xE5,
	0xBC, 0x93, 0x43, 0xE5, 0xBC, 0xA2, 0x43, 0xE5,
	0xBD, 0x90, 0x43, 0xE5, 0xBD, 0x93, 0x43, 0xE5,
	0xBD, 0xA1, 0x43, 0xE5, 0xBD, 0xA2, 0x43, 0xE5,
	0xBD, 0xA9, 0x43, 0xE5, 0xBD, 0xAB, 0x43, 0xE5,
	0xBD, 0xB3, 0x43, 0xE5, 0xBE, 0x8B, 0x43, 0xE5,
	0xBE, 0x8C, 0x43, 0xE5, 0xBE, 0x97, 0x43, 0xE5,
	0xBE, 0x9A, 0x43, 0xE5, 0xBE, 0xA9, 0x43, 0xE5,
	// Bytes b80 - bbf
	0xBE, 0xAD, 0x43, 0xE5, 0xBF, 0x83, 0x43, 0xE5,
	0xBF, 0x8D, 0x43, 0xE5, 0xBF, 0x97, 0x43, 0xE5,
	0xBF, 0xB5, 0x43, 0xE5, 0xBF, 0xB9, 0x43, 0xE6,
	0x80, 0x92, 0x43, 0xE6, 0x80, 0x9C, 0x43, 0xE6,
	0x81, 0xB5, 0x43, 0xE6, 0x82, 0x81, 0x43, 0xE6,
	0x82, 0x94, 0x43, 0xE6, 0x83, 0x87, 0x43, 0xE6,
	0x83, 0x98, 0x43, 0xE6, 0x83, 0xA1, 0x43, 0xE6,
	0x84, 0x88, 0x43, 0xE6, 0x85, 0x84, 0x43, 0xE6,
	// Bytes bc0 - bff
	0x85, 0x88, 0x43, 0xE6, 0x85, 0x8C, 0x43, 0xE6,
	0x85, 0x8E, 0x43, 0xE6, 0x85, 0xA0, 0x43, 0xE6,
	0x85, 0xA8, 0x43, 0xE6, 0x85, 0xBA, 0x43, 0xE6,
	0x86, 0x8E, 0x43, 0xE6, 0x86, 0x90, 0x43, 0xE6,
	0x86, 0xA4, 0x43, 0xE6, 0x86, 0xAF, 0x43, 0xE6,
	0x86, 0xB2, 0x43, 0xE6, 0x87, 0x9E, 0x43, 0xE6,
	0x87, 0xB2, 0x43, 0xE6, 0x87, 0xB6, 0x43, 0xE6,
	0x88, 0x80, 0x43, 0xE6, 0x88, 0x88, 0x43, 0xE6,
	// Bytes c00 - c3f
	0x88, 0x90, 0x43, 0xE6, 0x88, 0x9B, 0x43, 0xE6,
	0x88, 0xAE, 0x43, 0xE6, 0x88, 0xB4, 0x43, 0xE6,
	0x88, 0xB6, 0x43, 0xE6, 0x89, 0x8B, 0x43, 0xE6,
	0x89, 0x93, 0x43, 0xE6, 0x89, 0x9D, 0x43, 0xE6,
	0x8A, 0x95, 0x43, 0xE6, 0x8A, 0xB1, 0x43, 0xE6,
	0x8B, 0x89, 0x43, 0xE6, 0x8B, 0x8F, 0x43, 0xE6,
	0x8B, 0x93, 0x43, 0xE6, 0x8B, 0x94, 0x43, 0xE6,
	0x8B, 0xBC, 0x43, 0xE6, 0x8B, 0xBE, 0x43, 0xE6,
	// Bytes c40 - c7f
	0x8C, 0x87, 0x43, 0xE6, 0x8C, 0xBD, 0x43, 0xE6,
	0x8D, 0x90, 0x43, 0xE6, 0x8D, 0x95, 0x43, 0xE6,
	0x8D, 0xA8, 0x43, 0xE6, 0x8D, 0xBB, 0x43, 0xE6,
	0x8E, 0x83, 0x43, 0xE6, 0x8E, 0xA0, 0x43, 0xE6,
	0x8E, 0xA9, 0x43, 0xE6, 0x8F, 0x84, 0x43, 0xE6,
	0x8F, 0x85, 0x43, 0xE6, 0x8F, 0xA4, 0x43, 0xE6,
	0x90, 0x9C, 0x43, 0xE6, 0x90, 0xA2, 0x43, 0xE6,
	0x91, 0x92, 0x43, 0xE6, 0x91, 0xA9, 0x43, 0xE6,
	// Bytes c80 - cbf
	0x91, 0xB7, 0x43, 0xE6, 0x91, 0xBE, 0x43, 0xE6,
	0x92, 0x9A, 0x43, 0xE6, 0x92, 0x9D, 0x43, 0xE6,
	0x93, 0x84, 0x43, 0xE6, 0x94, 0xAF, 0x43, 0xE6,
	0x94, 0xB4, 0x43, 0xE6, 0x95, 0x8F, 0x43, 0xE6,
	0x95, 0x96, 0x43, 0xE6, 0x95, 0xAC, 0x43, 0xE6,
	0x95, 0xB8, 0x43, 0xE6, 0x96, 0x87, 0x43, 0xE6,
	0x96, 0x97, 0x43, 0xE6, 0x96, 0x99, 0x43, 0xE6,
	0x96, 0xA4, 0x43, 0xE6, 0x96, 0xB0, 0x43, 0xE6,
	// Bytes cc0 - cff
	0x96, 0xB9, 0x43, 0xE6, 0x97, 0x85, 0x43, 0xE6,
	0x97, 0xA0, 0x43, 0xE6, 0x97, 0xA2, 0x43, 0xE6,
	0x97, 0xA3, 0x43, 0xE6, 0x97, 0xA5, 0x43, 0xE6,
	0x98, 0x93, 0x43, 0xE6, 0x98, 0xA0, 0x43, 0xE6,
	0x99, 0x89, 0x43, 0xE6, 0x99, 0xB4, 0x43, 0xE6,
	0x9A, 0x88, 0x43, 0xE6, 0x9A, 0x91, 0x43, 0xE6,
	0x9A, 0x9C, 0x43, 0xE6, 0x9A, 0xB4, 0x43, 0xE6,
	0x9B, 0x86, 0x43, 0xE6, 0x9B, 0xB0, 0x43, 0xE6,
	// Bytes d00 - d3f
	0x9B, 0xB4, 0x43, 0xE6, 0x9B, 0xB8, 0x43, 0xE6,
	0x9C, 0x80, 0x43, 0xE6, 0x9C, 0x88, 0x43, 0xE6,
	0x9C, 0x89, 0x43, 0xE6, 0x9C, 0x97, 0x43, 0xE6,
	0x9C, 0x9B, 0x43, 0xE6, 0x9C, 0xA1, 0x43, 0xE6,
	0x9C, 0xA8, 0x43, 0xE6, 0x9D, 0x8E, 0x43, 0xE6,
	0x9D, 0x93, 0x43, 0xE6, 0x9D, 0x96, 0x43, 0xE6,
	0x9D, 0x9E, 0x43, 0xE6, 0x9D, 0xBB, 0x43, 0xE6,
	0x9E, 0x85, 0x43, 0xE6, 0x9E, 0x97, 0x43, 0xE6,
	// Bytes d40 - d7f
	0x9F, 0xB3, 0x43, 0xE6, 0x9F, 0xBA, 0x43, 0xE6,
	0xA0, 0x97, 0x43, 0xE6, 0xA0, 0x9F, 0x43, 0xE6,
	0xA0, 0xAA, 0x43, 0xE6, 0xA1, 0x92, 0x43, 0xE6,
	0xA2, 0x81, 0x43, 0xE6, 0xA2, 0x85, 0x43, 0xE6,
	0xA2, 0x8E, 0x43, 0xE6, 0xA2, 0xA8, 0x43, 0xE6,
	0xA4, 0x94, 0x43, 0xE6, 0xA5, 0x82, 0x43, 0xE6,
	0xA6, 0xA3, 0x43, 0xE6, 0xA7, 0xAA, 0x43, 0xE6,
	0xA8, 0x82, 0x43, 0xE6, 0xA8, 0x93, 0x43, 0xE6,
	// Bytes d80 - dbf
	0xAA, 0xA8, 0x43, 0xE6, 0xAB, 0x93, 0x43, 0xE6,
	0xAB, 0x9B, 0x43, 0xE6, 0xAC, 0x84, 0x43, 0xE6,
	0xAC, 0xA0, 0x43, 0xE6, 0xAC, 0xA1, 0x43, 0xE6,
	0xAD, 0x94, 0x43, 0xE6, 0xAD, 0xA2, 0x43, 0xE6,
	0xAD, 0xA3, 0x43, 0xE6, 0xAD, 0xB2, 0x43, 0xE6,
	0xAD, 0xB7, 0x43, 0xE6, 0xAD, 0xB9, 0x43, 0xE6,
	0xAE, 0x9F, 0x43, 0xE6, 0xAE, 0xAE, 0x43, 0xE6,
	0xAE, 0xB3, 0x43, 0xE6, 0xAE, 0xBA, 0x43, 0xE6,
	// Bytes dc0 - dff
	0xAE, 0xBB, 0x43, 0xE6, 0xAF, 0x8B, 0x43, 0xE6,
	0xAF, 0x8D, 0x43, 0xE6, 0xAF, 0x94, 0x43, 0xE6,
	0xAF, 0x9B, 0x43, 0xE6, 0xB0, 0x8F, 0x43, 0xE6,
	0xB0, 0x94, 0x43, 0xE6, 0xB0, 0xB4, 0x43, 0xE6,
	0xB1, 0x8E, 0x43, 0xE6, 0xB1, 0xA7, 0x43, 0xE6,
	0xB2, 0x88, 0x43, 0xE6, 0xB2, 0xBF, 0x43, 0xE6,
	0xB3, 0x8C, 0x43, 0xE6, 0xB3, 0x8D, 0x43, 0xE6,
	0xB3, 0xA5, 0x43, 0xE6, 0xB3, 0xA8, 0x43, 0xE6,
	// Bytes e00 - e3f
	0xB4, 0x96, 0x43, 0xE6, 0xB4, 0x9B, 0x43, 0xE6,
	0xB4, 0x9E, 0x43, 0xE6, 0xB4, 0xB4, 0x43, 0xE6,
	0xB4, 0xBE, 0x43, 0xE6, 0xB5, 0x81, 0x43, 0xE6,
	0xB5, 0xA9, 0x43, 0xE6, 0xB5, 0xAA, 0x43, 0xE6,
	0xB5, 0xB7, 0x43, 0xE6, 0xB5, 0xB8, 0x43, 0xE6,
	0xB6, 0x85, 0x43, 0xE6, 0xB7, 0x8B, 0x43, 0xE6,
	0xB7, 0x9A, 0x43, 0xE6, 0xB7, 0xAA, 0x43, 0xE6,
	0xB7, 0xB9, 0x43, 0xE6, 0xB8, 0x9A, 0x43, 0xE6,
	// Bytes e40 - e7f
	0xB8, 0xAF, 0x43, 0xE6, 0xB9, 0xAE, 0x43, 0xE6,
	0xBA, 0x80, 0x43, 0xE6, 0xBA, 0x9C, 0x43, 0xE6,
	0xBA, 0xBA, 0x43, 0xE6, 0xBB, 0x87, 0x43, 0xE6,
	0xBB, 0x8B, 0x43, 0xE6, 0xBB, 0x91, 0x43, 0xE6,
	0xBB, 0x9B, 0x43, 0xE6, 0xBC, 0x8F, 0x43, 0xE6,
	0xBC, 0x94, 0x43, 0xE6, 0xBC, 0xA2, 0x43, 0xE6,
	0xBC, 0xA3, 0x43, 0xE6, 0xBD, 0xAE, 0x43, 0xE6,
	0xBF, 0x86, 0x43, 0xE6, 0xBF, 0xAB, 0x43, 0xE6,
	// Bytes e80 - ebf
	0xBF, 0xBE, 0x43, 0xE7, 0x80, 0x9B, 0x43, 0xE7,
	0x80, 0x9E, 0x43, 0xE7, 0x80, 0xB9, 0x43, 0xE7,
	0x81, 0x8A, 0x43, 0xE7, 0x81, 0xAB, 0x43, 0xE7,
	0x81, 0xB0, 0x43, 0xE7, 0x81, 0xB7, 0x43, 0xE7,
	0x81, 0xBD, 0x43, 0xE7, 0x82, 0x99, 0x43, 0xE7,
	0x82, 0xAD, 0x43, 0xE7, 0x83, 0x88, 0x43, 0xE7,
	0x83, 0x99, 0x43, 0xE7, 0x84, 0xA1, 0x43, 0xE7,
	0x85, 0x85, 0x43, 0xE7, 0x85, 0x89, 0x43, 0xE7,
	// Bytes ec0 - eff
	0x85, 0xAE, 0x43, 0xE7, 0x86, 0x9C, 0x43, 0xE7,
	0x87, 0x8E, 0x43, 0xE7, 0x87, 0x90, 0x43, 0xE7,
	0x88, 0x90, 0x43, 0xE7, 0x88, 0x9B, 0x43, 0xE7,
	0x88, 0xA8, 0x43, 0xE7, 0x88, 0xAA, 0x43, 0xE7,
	0x88, 0xAB, 0x43, 0xE7, 0x88, 0xB5, 0x43, 0xE7,
	0x88, 0xB6, 0x43, 0xE7, 0x88, 0xBB, 0x43, 0xE7,
	0x88, 0xBF, 0x43, 0xE7, 0x89, 0x87, 0x43, 0xE7,
	0x89, 0x90, 0x43, 0xE7, 0x89, 0x99, 0x43, 0xE7,
	// Bytes f00 - f3f
	0x89, 0x9B, 0x43, 0xE7, 0x89, 0xA2, 0x43, 0xE7,
	0x89, 0xB9, 0x43, 0xE7, 0x8A, 0x80, 0x43, 0xE7,
	0x8A, 0x95, 0x43, 0xE7, 0x8A, 0xAC, 0x43, 0xE7,
	0x8A, 0xAF, 0x43, 0xE7, 0x8B, 0x80, 0x43, 0xE7,
	0x8B, 0xBC, 0x43, 0xE7, 0x8C, 0xAA, 0x43, 0xE7,
	0x8D, 0xB5, 0x43, 0xE7, 0x8D, 0xBA, 0x43, 0xE7,
	0x8E, 0x84, 0x43, 0xE7, 0x8E, 0x87, 0x43, 0xE7,
	0x8E, 0x89, 0x43, 0xE7, 0x8E, 0x8B, 0x43, 0xE7,
	// Bytes f40 - f7f
	0x8E, 0xA5, 0x43, 0xE7, 0x8E, 0xB2, 0x43, 0xE7,
	0x8F, 0x9E, 0x43, 0xE7, 0x90, 0x86, 0x43, 0xE7,
	0x90, 0x89, 0x43, 0xE7, 0x90, 0xA2, 0x43, 0xE7,
	0x91, 0x87, 0x43, 0xE7, 0x91, 0x9C, 0x43, 0xE7,
	0x91, 0xA9, 0x43, 0xE7, 0x91, 0xB1, 0x43, 0xE7,
	0x92, 0x85, 0x43, 0xE7, 0x92, 0x89, 0x43, 0xE7,
	0x92, 0x98, 0x43, 0xE7, 0x93, 0x8A, 0x43, 0xE7,
	0x93, 0x9C, 0x43, 0xE7, 0x93, 0xA6, 0x43, 0xE7,
	// Bytes f80 - fbf
	0x94, 0x86, 0x43, 0xE7, 0x94, 0x98, 0x43, 0xE7,
	0x94, 0x9F, 0x43, 0xE7, 0x94, 0xA4, 0x43, 0xE7,
	0x94, 0xA8, 0x43, 0xE7, 0x94, 0xB0, 0x43, 0xE7,
	0x94, 0xB2, 0x43, 0xE7, 0x94, 0xB3, 0x43, 0xE7,
	0x94, 0xB7, 0x43, 0xE7, 0x94, 0xBB, 0x43, 0xE7,
	0x94, 0xBE, 0x43, 0xE7, 0x95, 0x99, 0x43, 0xE7,
	0x95, 0xA5, 0x43, 0xE7, 0x95, 0xB0, 0x43, 0xE7,
	0x96, 0x8B, 0x43, 0xE7, 0x96, 0x92, 0x43, 0xE7,
	// Bytes fc0 - fff
	0x97, 0xA2, 0x43, 0xE7, 0x98, 0x90, 0x43, 0xE7,
	0x98, 0x9D, 0x43, 0xE7, 0x98, 0x9F, 0x43, 0xE7,
	0x99, 0x82, 0x43, 0xE7, 0x99, 0xA9, 0x43, 0xE7,
	0x99, 0xB6, 0x43, 0xE7, 0x99, 0xBD, 0x43, 0xE7,
	0x9A, 0xAE, 0x43, 0xE7, 0x9A, 0xBF, 0x43, 0xE7,
	0x9B, 0x8A, 0x43, 0xE7, 0x9B, 0x9B, 0x43, 0xE7,
	0x9B, 0xA3, 0x43, 0xE7, 0x9B, 0xA7, 0x43, 0xE7,
	0x9B, 0xAE, 0x43, 0xE7, 0x9B, 0xB4, 0x43, 0xE7,
	// Bytes 1000 - 103f
	0x9C, 0x81, 0x43, 0xE7, 0x9C, 0x9E, 0x43, 0xE7,
	0x9C, 0x9F, 0x43, 0xE7, 0x9D, 0x80, 0x43, 0xE7,
	0x9D, 0x8A, 0x43, 0xE7, 0x9E, 0x8B, 0x43, 0xE7,
	0x9E, 0xA7, 0x43, 0xE7, 0x9F, 0x9B, 0x43, 0xE7,
	0x9F, 0xA2, 0x43, 0xE7, 0x9F, 0xB3, 0x43, 0xE7,
	0xA1, 0x8E, 0x43, 0xE7, 0xA1, 0xAB, 0x43, 0xE7,
	0xA2, 0x8C, 0x43, 0xE7, 0xA2, 0x91, 0x43, 0xE7,
	0xA3, 0x8A, 0x43, 0xE7, 0xA3, 0x8C, 0x43, 0xE7,
	// Bytes 1040 - 107f
	0xA3, 0xBB, 0x43, 0xE7, 0xA4, 0xAA, 0x43, 0xE7,
	0xA4, 0xBA, 0x43, 0xE7, 0xA4, 0xBC, 0x43, 0xE7,
	0xA4, 0xBE, 0x43, 0xE7, 0xA5, 0x88, 0x43, 0xE7,
	0xA5, 0x89, 0x43, 0xE7, 0xA5, 0x90, 0x43, 0xE7,
	0xA5, 0x96, 0x43, 0xE7, 0xA5, 0x9D, 0x43, 0xE7,
	0xA5, 0x9E, 0x43, 0xE7, 0xA5, 0xA5, 0x43, 0xE7,
	0xA5, 0xBF, 0x43, 0xE7, 0xA6, 0x81, 0x43, 0xE7,
	0xA6, 0x8D, 0x43, 0xE7, 0xA6, 0x8E, 0x43, 0xE7,
	// Bytes 1080 - 10bf
	0xA6, 0x8F, 0x43, 0xE7, 0xA6, 0xAE, 0x43, 0xE7,
	0xA6, 0xB8, 0x43, 0xE7, 0xA6, 0xBE, 0x43, 0xE7,
	0xA7, 0x8A, 0x43, 0xE7, 0xA7, 0x98, 0x43, 0xE7,
	0xA7, 0xAB, 0x43, 0xE7, 0xA8, 0x9C, 0x43, 0xE7,
	0xA9, 0x80, 0x43, 0xE7, 0xA9, 0x8A, 0x43, 0xE7,
	0xA9, 0x8F, 0x43, 0xE7, 0xA9, 0xB4, 0x43, 0xE7,
	0xA9, 0xBA, 0x43, 0xE7, 0xAA, 0x81, 0x43, 0xE7,
	0xAA, 0xB1, 0x43, 0xE7, 0xAB, 0x8B, 0x43, 0xE7,
	// Bytes 10c0 - 10ff
	0xAB, 0xAE, 0x43, 0xE7, 0xAB, 0xB9, 0x43, 0xE7,
	0xAC, 0xA0, 0x43, 0xE7, 0xAE, 0x8F, 0x43, 0xE7,
	0xAF, 0x80, 0x43, 0xE7, 0xAF, 0x86, 0x43, 0xE7,
	0xAF, 0x89, 0x43, 0xE7, 0xB0, 0xBE, 0x43, 0xE7,
	0xB1, 0xA0, 0x43, 0xE7, 0xB1, 0xB3, 0x43, 0xE7,
	0xB1, 0xBB, 0x43, 0xE7, 0xB2, 0x92, 0x43, 0xE7,
	0xB2, 0xBE, 0x43, 0xE7, 0xB3, 0x92, 0x43, 0xE7,
	0xB3, 0x96, 0x43, 0xE7, 0xB3, 0xA3, 0x43, 0xE7,
	// Bytes 1100 - 113f
	0xB3, 0xA7, 0x43, 0xE7, 0xB3, 0xA8, 0x43, 0xE7,
	0xB3, 0xB8, 0x43, 0xE7, 0xB4, 0x80, 0x43, 0xE7,
	0xB4, 0x90, 0x43, 0xE7, 0xB4, 0xA2, 0x43, 0xE7,
	0xB4, 0xAF, 0x43, 0xE7, 0xB5, 0x82, 0x43, 0xE7,
	0xB5, 0x9B, 0x43, 0xE7, 0xB5, 0xA3, 0x43, 0xE7,
	0xB6, 0xA0, 0x43, 0xE7, 0xB6, 0xBE, 0x43, 0xE7,
	0xB7, 0x87, 0x43, 0xE7, 0xB7, 0xB4, 0x43, 0xE7,
	0xB8, 0x82, 0x43, 0xE7, 0xB8, 0x89, 0x43, 0xE7,
	// Bytes 1140 - 117f
	0xB8, 0xB7, 0x43, 0xE7, 0xB9, 0x81, 0x43, 0xE7,
	0xB9, 0x85, 0x43, 0xE7, 0xBC, 0xB6, 0x43, 0xE7,
	0xBC, 0xBE, 0x43, 0xE7, 0xBD, 0x91, 0x43, 0xE7,
	0xBD, 0xB2, 0x43, 0xE7, 0xBD, 0xB9, 0x43, 0xE7,
	0xBD, 0xBA, 0x43, 0xE7, 0xBE, 0x85, 0x43, 0xE7,
	0xBE, 0x8A, 0x43, 0xE7, 0xBE, 0x95, 0x43, 0xE7,
	0xBE, 0x9A, 0x43, 0xE7, 0xBE, 0xBD, 0x43, 0xE7,
	0xBF, 0xBA, 0x43, 0xE8, 0x80, 0x81, 0x43, 0xE8,
	// Bytes 1180 - 11bf
	0x80, 0x85, 0x43, 0xE8, 0x80, 0x8C, 0x43, 0xE8,
	0x80, 0x92, 0x43, 0xE8, 0x80, 0xB3, 0x43, 0xE8,
	0x81, 0x86, 0x43, 0xE8, 0x81, 0xA0, 0x43, 0xE8,
	0x81, 0xAF, 0x43, 0xE8, 0x81, 0xB0, 0x43, 0xE8,
	0x81, 0xBE, 0x43, 0xE8, 0x81, 0xBF, 0x43, 0xE8,
	0x82, 0x89, 0x43, 0xE8, 0x82, 0x8B, 0x43, 0xE8,
	0x82, 0xAD, 0x43, 0xE8, 0x82, 0xB2, 0x43, 0xE8,
	0x84, 0x83, 0x43, 0xE8, 0x84, 0xBE, 0x43, 0xE8,
	// Bytes 11c0 - 11ff
	0x87, 0x98, 0x43, 0xE8, 0x87, 0xA3, 0x43, 0xE8,
	0x87, 0xA8, 0x43, 0xE8, 0x87, 0xAA, 0x43, 0xE8,
	0x87, 0xAD, 0x43, 0xE8, 0x87, 0xB3, 0x43, 0xE8,
	0x87, 0xBC, 0x43, 0xE8, 0x88, 0x81, 0x43, 0xE8,
	0x88, 0x84, 0x43, 0xE8, 0x88, 0x8C, 0x43, 0xE8,
	0x88, 0x98, 0x43, 0xE8, 0x88, 0x9B, 0x43, 0xE8,
	0x88, 0x9F, 0x43, 0xE8, 0x89, 0xAE, 0x43, 0xE8,
	0x89, 0xAF, 0x43, 0xE8, 0x89, 0xB2, 0x43, 0xE8,
	// Bytes 1200 - 123f
	0x89, 0xB8, 0x43, 0xE8, 0x89, 0xB9, 0x43, 0xE8,
	0x8A, 0x8B, 0x43, 0xE8, 0x8A, 0x91, 0x43, 0xE8,
	0x8A, 0x9D, 0x43, 0xE8, 0x8A, 0xB1, 0x43, 0xE8,
	0x8A, 0xB3, 0x43, 0xE8, 0x8A, 0xBD, 0x43, 0xE8,
	0x8B, 0xA5, 0x43, 0xE8, 0x8B, 0xA6, 0x43, 0xE8,
	0x8C, 0x9D, 0x43, 0xE8, 0x8C, 0xA3, 0x43, 0xE8,
	0x8C, 0xB6, 0x43, 0xE8, 0x8D, 0x92, 0x43, 0xE8,
	0x8D, 0x93, 0x43, 0xE8, 0x8D, 0xA3, 0x43, 0xE8,
	// Bytes 1240 - 127f
	0x8E, 0xAD, 0x43, 0xE8, 0x8E, 0xBD, 0x43, 0xE8,
	0x8F, 0x89, 0x43, 0xE8, 0x8F, 0x8A, 0x43, 0xE8,
	0x8F, 0x8C, 0x43, 0xE8, 0x8F, 0x9C, 0x43, 0xE8,
	0x8F, 0xA7, 0x43, 0xE8, 0x8F, 0xAF, 0x43, 0xE8,
	0x8F, 0xB1, 0x43, 0xE8, 0x90, 0xBD, 0x43, 0xE8,
	0x91, 0x89, 0x43, 0xE8, 0x91, 0x97, 0x43, 0xE8,
	0x93, 0xAE, 0x43, 0xE8, 0x93, 0xB1, 0x43, 0xE8,
	0x93, 0xB3, 0x43, 0xE8, 0x93, 0xBC, 0x43, 0xE8,
	// Bytes 1280 - 12bf
	0x94, 0x96, 0x43, 0xE8, 0x95, 0xA4, 0x43, 0xE8,
	0x97, 0x8D, 0x43, 0xE8, 0x97, 0xBA, 0x43, 0xE8,
	0x98, 0x86, 0x43, 0xE8, 0x98, 0x92, 0x43, 0xE8,
	0x98, 0xAD, 0x43, 0xE8, 0x98, 0xBF, 0x43, 0xE8,
	0x99, 0x8D, 0x43, 0xE8, 0x99, 0x90, 0x43, 0xE8,
	0x99, 0x9C, 0x43, 0xE8, 0x99, 0xA7, 0x43, 0xE8,
	0x99, 0xA9, 0x43, 0xE8, 0x99, 0xAB, 0x43, 0xE8,
	0x9A, 0x88, 0x43, 0xE8, 0x9A, 0xA9, 0x43, 0xE8,
	// Bytes 12c0 - 12ff
	0x9B, 0xA2, 0x43, 0xE8, 0x9C, 0x8E, 0x43, 0xE8,
	0x9C, 0xA8, 0x43, 0xE8, 0x9D, 0xAB, 0x43, 0xE8,
	0x9D, 0xB9, 0x43, 0xE8, 0x9E, 0x86, 0x43, 0xE8,
	0x9E, 0xBA, 0x43, 0xE8, 0x9F, 0xA1, 0x43, 0xE8,
	0xA0, 0x81, 0x43, 0xE8, 0xA0, 0x9F, 0x43, 0xE8,
	0xA1, 0x80, 0x43, 0xE8, 0xA1, 0x8C, 0x43, 0xE8,
	0xA1, 0xA0, 0x43, 0xE8, 0xA1, 0xA3, 0x43, 0xE8,
	0xA3, 0x82, 0x43, 0xE8, 0xA3, 0x8F, 0x43, 0xE8,
	// Bytes 1300 - 133f
	0xA3, 0x97, 0x43, 0xE8, 0xA3, 0x9E, 0x43, 0xE8,
	0xA3, 0xA1, 0x43, 0xE8, 0xA3, 0xB8, 0x43, 0xE8,
	0xA3, 0xBA, 0x43, 0xE8, 0xA4, 0x90, 0x43, 0xE8,
	0xA5, 0x81, 0x43, 0xE8, 0xA5, 0xA4, 0x43, 0xE8,
	0xA5, 0xBE, 0x43, 0xE8, 0xA6, 0x86, 0x43, 0xE8,
	0xA6, 0x8B, 0x43, 0xE8, 0xA6, 0x96, 0x43, 0xE8,
	0xA7, 0x92, 0x43, 0xE8, 0xA7, 0xA3, 0x43, 0xE8,
	0xA8, 0x80, 0x43, 0xE8, 0xAA, 0xA0, 0x43, 0xE8,
	// Bytes 1340 - 137f
	0xAA, 0xAA, 0x43, 0xE8, 0xAA, 0xBF, 0x43, 0xE8,
	0xAB, 0x8B, 0x43, 0xE8, 0xAB, 0x92, 0x43, 0xE8,
	0xAB, 0x96, 0x43, 0xE8, 0xAB, 0xAD, 0x43, 0xE8,
	0xAB, 0xB8, 0x43, 0xE8, 0xAB, 0xBE, 0x43, 0xE8,
	0xAC, 0x81, 0x43, 0xE8, 0xAC, 0xB9, 0x43, 0xE8,
	0xAD, 0x98, 0x43, 0xE8, 0xAE, 0x80, 0x43, 0xE8,
	0xAE, 0x8A, 0x43, 0xE8, 0xB0, 0xB7, 0x43, 0xE8,
	0xB1, 0x86, 0x43, 0xE8, 0xB1, 0x88, 0x43, 0xE8,
	// Bytes 1380 - 13bf
	0xB1, 0x95, 0x43, 0xE8, 0xB1, 0xB8, 0x43, 0xE8,
	0xB2, 0x9D, 0x43, 0xE8, 0xB2, 0xA1, 0x43, 0xE8,
	0xB2, 0xA9, 0x43, 0xE8, 0xB2, 0xAB, 0x43, 0xE8,
	0xB3, 0x81, 0x43, 0xE8, 0xB3, 0x82, 0x43, 0xE8,
	0xB3, 0x87, 0x43, 0xE8, 0xB3, 0x88, 0x43, 0xE8,
	0xB3, 0x93, 0x43, 0xE8, 0xB4, 0x88, 0x43, 0xE8,
	0xB4, 0x9B, 0x43, 0xE8, 0xB5, 0xA4, 0x43, 0xE8,
	0xB5, 0xB0, 0x43, 0xE8, 0xB5, 0xB7, 0x43, 0xE8,
	// Bytes 13c0 - 13ff
	0xB6, 0xB3, 0x43, 0xE8, 0xB6, 0xBC, 0x43, 0xE8,
	0xB7, 0x8B, 0x43, 0xE8, 0xB7, 0xAF, 0x43, 0xE8,
	0xB7, 0xB0, 0x43, 0xE8, 0xBA, 0xAB, 0x43, 0xE8,
	0xBB, 0x8A, 0x43, 0xE8, 0xBB, 0x94, 0x43, 0xE8,
	0xBC, 0xA6, 0x43, 0xE8, 0xBC, 0xAA, 0x43, 0xE8,
	0xBC, 0xB8, 0x43, 0xE8, 0xBC, 0xBB, 0x43, 0xE8,
	0xBD, 0xA2, 0x43, 0xE8, 0xBE, 0x9B, 0x43, 0xE8,
	0xBE, 0x9E, 0x43, 0xE8, 0xBE, 0xB0, 0x43, 0xE8,
	// Bytes 1400 - 143f
	0xBE, 0xB5, 0x43, 0xE8, 0xBE, 0xB6, 0x43, 0xE9,
	0x80, 0xA3, 0x43, 0xE9, 0x80, 0xB8, 0x43, 0xE9,
	0x81, 0x8A, 0x43, 0xE9, 0x81, 0xA9, 0x43, 0xE9,
	0x81, 0xB2, 0x43, 0xE9, 0x81, 0xBC, 0x43, 0xE9,
	0x82, 0x8F, 0x43, 0xE9, 0x82, 0x91, 0x43, 0xE9,
	0x82, 0x94, 0x43, 0xE9, 0x83, 0x8E, 0x43, 0xE9,
	0x83, 0x9E, 0x43, 0xE9, 0x83, 0xB1, 0x43, 0xE9,
	0x83, 0xBD, 0x43, 0xE9, 0x84, 0x91, 0x43, 0xE9,
	// Bytes 1440 - 147f
	0x84, 0x9B, 0x43, 0xE9, 0x85, 0x89, 0x43, 0xE9,
	0x85, 0x8D, 0x43, 0xE9, 0x85, 0xAA, 0x43, 0xE9,
	0x86, 0x99, 0x43, 0xE9, 0x86, 0xB4, 0x43, 0xE9,
	0x87, 0x86, 0x43, 0xE9, 0x87, 0x8C, 0x43, 0xE9,
	0x87, 0x8F, 0x43, 0xE9, 0x87, 0x91, 0x43, 0xE9,
	0x88, 0xB4, 0x43, 0xE9, 0x88, 0xB8, 0x43, 0xE9,
	0x89, 0xB6, 0x43, 0xE9, 0x89, 0xBC, 0x43, 0xE9,
	0x8B, 0x97, 0x43, 0xE9, 0x8B, 0x98, 0x43, 0xE9,
	// Bytes 1480 - 14bf
	0x8C, 0x84, 0x43, 0xE9, 0x8D, 0x8A, 0x43, 0xE9,
	0x8F, 0xB9, 0x43, 0xE9, 0x90, 0x95, 0x43, 0xE9,
	0x95, 0xB7, 0x43, 0xE9, 0x96, 0x80, 0x43, 0xE9,
	0x96, 0x8B, 0x43, 0xE9, 0x96, 0xAD, 0x43, 0xE9,
	0x96, 0xB7, 0x43, 0xE9, 0x98, 0x9C, 0x43, 0xE9,
	0x98, 0xAE, 0x43, 0xE9, 0x99, 0x8B, 0x43, 0xE9,
	0x99, 0x8D, 0x43, 0xE9, 0x99, 0xB5, 0x43, 0xE9,
	0x99, 0xB8, 0x43, 0xE9, 0x99, 0xBC, 0x43, 0xE9,
	// Bytes 14c0 - 14ff
	0x9A, 0x86, 0x43, 0xE9, 0x9A, 0xA3, 0x43, 0xE9,
	0x9A, 0xB6, 0x43, 0xE9, 0x9A, 0xB7, 0x43, 0xE9,
	0x9A, 0xB8, 0x43, 0xE9, 0x9A, 0xB9, 0x43, 0xE9,
	0x9B, 0x83, 0x43, 0xE9, 0x9B, 0xA2, 0x43, 0xE9,
	0x9B, 0xA3, 0x43, 0xE9, 0x9B, 0xA8, 0x43, 0xE9,
	0x9B, 0xB6, 0x43, 0xE9, 0x9B, 0xB7, 0x43, 0xE9,
	0x9C, 0xA3, 0x43, 0xE9, 0x9C, 0xB2, 0x43, 0xE9,
	0x9D, 0x88, 0x43, 0xE9, 0x9D, 0x91, 0x43, 0xE9,
	// Bytes 1500 - 153f
	0x9D, 0x96, 0x43, 0xE9, 0x9D, 0x9E, 0x43, 0xE9,
	0x9D, 0xA2, 0x43, 0xE9, 0x9D, 0xA9, 0x43, 0xE9,
	0x9F, 0x8B, 0x43, 0xE9, 0x9F, 0x9B, 0x43, 0xE9,
	0x9F, 0xA0, 0x43, 0xE9, 0x9F, 0xAD, 0x43, 0xE9,
	0x9F, 0xB3, 0x43, 0xE9, 0x9F, 0xBF, 0x43, 0xE9,
	0xA0, 0x81, 0x43, 0xE9, 0xA0, 0x85, 0x43, 0xE9,
	0xA0, 0x8B, 0x43, 0xE9, 0xA0, 0x98, 0x43, 0xE9,
	0xA0, 0xA9, 0x43, 0xE9, 0xA0, 0xBB, 0x43, 0xE9,
	// Bytes 1540 - 157f
	0xA1, 0x9E, 0x43, 0xE9, 0xA2, 0xA8, 0x43, 0xE9,
	0xA3, 0x9B, 0x43, 0xE9, 0xA3, 0x9F, 0x43, 0xE9,
	0xA3, 0xA2, 0x43, 0xE9, 0xA3, 0xAF, 0x43, 0xE9,
	0xA3, 0xBC, 0x43, 0xE9, 0xA4, 0xA8, 0x43, 0xE9,
	0xA4, 0xA9, 0x43, 0xE9, 0xA6, 0x96, 0x43, 0xE9,
	0xA6, 0x99, 0x43, 0xE9, 0xA6, 0xA7, 0x43, 0xE9,
	0xA6, 0xAC, 0x43, 0xE9, 0xA7, 0x82, 0x43, 0xE9,
	0xA7, 0xB1, 0x43, 0xE9, 0xA7, 0xBE, 0x43, 0xE9,
	// Bytes 1580 - 15bf
	0xA9, 0xAA, 0x43, 0xE9, 0xAA, 0xA8, 0x43, 0xE9,
	0xAB, 0x98, 0x43, 0xE9, 0xAB, 0x9F, 0x43, 0xE9,
	0xAC, 0x92, 0x43, 0xE9, 0xAC, 0xA5, 0x43, 0xE9,
	0xAC, 0xAF, 0x43, 0xE9, 0xAC, 0xB2, 0x43, 0xE9,
	0xAC, 0xBC, 0x43, 0xE9, 0xAD, 0x9A, 0x43, 0xE9,
	0xAD, 0xAF, 0x43, 0xE9, 0xB1, 0x80, 0x43, 0xE9,
	0xB1, 0x97, 0x43, 0xE9, 0xB3, 0xA5, 0x43, 0xE9,
	0xB3, 0xBD, 0x43, 0xE9, 0xB5, 0xA7, 0x43, 0xE9,
	// Bytes 15c0 - 15ff
	0xB6, 0xB4, 0x43, 0xE9, 0xB7, 0xBA, 0x43, 0xE9,
	0xB8, 0x9E, 0x43, 0xE9, 0xB9, 0xB5, 0x43, 0xE9,
	0xB9, 0xBF, 0x43, 0xE9, 0xBA, 0x97, 0x43, 0xE9,
	0xBA, 0x9F, 0x43, 0xE9, 0xBA, 0xA5, 0x43, 0xE9,
	0xBA, 0xBB, 0x43, 0xE9, 0xBB, 0x83, 0x43, 0xE9,
	0xBB, 0x8D, 0x43, 0xE9, 0xBB, 0x8E, 0x43, 0xE9,
	0xBB, 0x91, 0x43, 0xE9, 0xBB, 0xB9, 0x43, 0xE9,
	0xBB, 0xBD, 0x43, 0xE9, 0xBB, 0xBE, 0x43, 0xE9,
	// Bytes 1600 - 163f
	0xBC, 0x85, 0x43, 0xE9, 0xBC, 0x8E, 0x43, 0xE9,
	0xBC, 0x8F, 0x43, 0xE9, 0xBC, 0x93, 0x43, 0xE9,
	0xBC, 0x96, 0x43, 0xE9, 0xBC, 0xA0, 0x43, 0xE9,
	0xBC, 0xBB, 0x43, 0xE9, 0xBD, 0x83, 0x43, 0xE9,
	0xBD, 0x8A, 0x43, 0xE9, 0xBD, 0x92, 0x43, 0xE9,
	0xBE, 0x8D, 0x43, 0xE9, 0xBE, 0x8E, 0x43, 0xE9,
	0xBE, 0x9C, 0x43, 0xE9, 0xBE, 0x9F, 0x43, 0xE9,
	0xBE, 0xA0, 0x43, 0xEA, 0x9C, 0xA7, 0x43, 0xEA,
	// Bytes 1640 - 167f
	0x9D, 0xAF, 0x43, 0xEA, 0xAC, 0xB7, 0x43, 0xEA,
	0xAD, 0x92, 0x44, 0xF0, 0xA0, 0x84, 0xA2, 0x44,
	0xF0, 0xA0, 0x94, 0x9C, 0x44, 0xF0, 0xA0, 0x94,
	0xA5, 0x44, 0xF0, 0xA0, 0x95, 0x8B, 0x44, 0xF0,
	0xA0, 0x98, 0xBA, 0x44, 0xF0, 0xA0, 0xA0, 0x84,
	0x44, 0xF0, 0xA0, 0xA3, 0x9E, 0x44, 0xF0, 0xA0,
	0xA8, 0xAC, 0x44, 0xF0, 0xA0, 0xAD, 0xA3, 0x44,
	0xF0, 0xA1, 0x93, 0xA4, 0x44, 0xF0, 0xA1, 0x9A,
	// Bytes 1680 - 16bf
	0xA8, 0x44, 0xF0, 0xA1, 0x9B, 0xAA, 0x44, 0xF0,
	0xA1, 0xA7, 0x88, 0x44, 0xF0, 0xA1, 0xAC, 0x98,
	0x44, 0xF0, 0xA1, 0xB4, 0x8B, 0x44, 0xF0, 0xA1,
	0xB7, 0xA4, 0x44, 0xF0, 0xA1, 0xB7, 0xA6, 0x44,
	0xF0, 0xA2, 0x86, 0x83, 0x44, 0xF0, 0xA2, 0x86,
	0x9F, 0x44, 0xF0, 0xA2, 0x8C, 0xB1, 0x44, 0xF0,
	0xA2, 0x9B, 0x94, 0x44, 0xF0, 0xA2, 0xA1, 0x84,
	0x44, 0xF0, 0xA2, 0xA1, 0x8A, 0x44, 0xF0, 0xA2,
	// Bytes 16c0 - 16ff
	0xAC, 0x8C, 0x44, 0xF0, 0xA2, 0xAF, 0xB1, 0x44,
	0xF0, 0xA3, 0x80, 0x8A, 0x44, 0xF0, 0xA3, 0x8A,
	0xB8, 0x44, 0xF0, 0xA3, 0x8D, 0x9F, 0x44, 0xF0,
	0xA3, 0x8E, 0x93, 0x44, 0xF0, 0xA3, 0x8E, 0x9C,
	0x44, 0xF0, 0xA3, 0x8F, 0x83, 0x44, 0xF0, 0xA3,
	0x8F, 0x95, 0x44, 0xF0, 0xA3, 0x91, 0xAD, 0x44,
	0xF0, 0xA3, 0x9A, 0xA3, 0x44, 0xF0, 0xA3, 0xA2,
	0xA7, 0x44, 0xF0, 0xA3, 0xAA, 0x8D, 0x44, 0xF0,
	// Bytes 1700 - 173f
	0xA3, 0xAB, 0xBA, 0x44, 0xF0, 0xA3, 0xB2, 0xBC,
	0x44, 0xF0, 0xA3, 0xB4, 0x9E, 0x44, 0xF0, 0xA3,
	0xBB, 0x91, 0x44, 0xF0, 0xA3, 0xBD, 0x9E, 0x44,
	0xF0, 0xA3, 0xBE, 0x8E, 0x44, 0xF0, 0xA4, 0x89,
	0xA3, 0x44, 0xF0, 0xA4, 0x8B, 0xAE, 0x44, 0xF0,
	0xA4, 0x8E, 0xAB, 0x44, 0xF0, 0xA4, 0x98, 0x88,
	0x44, 0xF0, 0xA4, 0x9C, 0xB5, 0x44, 0xF0, 0xA4,
	0xA0, 0x94, 0x44, 0xF0, 0xA4, 0xB0, 0xB6, 0x44,
	// Bytes 1740 - 177f
	0xF0, 0xA4, 0xB2, 0x92, 0x44, 0xF0, 0xA4, 0xBE,
	0xA1, 0x44, 0xF0, 0xA4, 0xBE, 0xB8, 0x44, 0xF0,
	0xA5, 0x81, 0x84, 0x44, 0xF0, 0xA5, 0x83, 0xB2,
	0x44, 0xF0, 0xA5, 0x83, 0xB3, 0x44, 0xF0, 0xA5,
	0x84, 0x99, 0x44, 0xF0, 0xA5, 0x84, 0xB3, 0x44,
	0xF0, 0xA5, 0x89, 0x89, 0x44, 0xF0, 0xA5, 0x90,
	0x9D, 0x44, 0xF0, 0xA5, 0x98, 0xA6, 0x44, 0xF0,
	0xA5, 0x9A, 0x9A, 0x44, 0xF0, 0xA5, 0x9B, 0x85,
	// Bytes 1780 - 17bf
	0x44, 0xF0, 0xA5, 0xA5, 0xBC, 0x44, 0xF0, 0xA5,
	0xAA, 0xA7, 0x44, 0xF0, 0xA5, 0xAE, 0xAB, 0x44,
	0xF0, 0xA5, 0xB2, 0x80, 0x44, 0xF0, 0xA5, 0xB3,
	0x90, 0x44, 0xF0, 0xA5, 0xBE, 0x86, 0x44, 0xF0,
	0xA6, 0x87, 0x9A, 0x44, 0xF0, 0xA6, 0x88, 0xA8,
	0x44, 0xF0, 0xA6, 0x89, 0x87, 0x44, 0xF0, 0xA6,
	0x8B, 0x99, 0x44, 0xF0, 0xA6, 0x8C, 0xBE, 0x44,
	0xF0, 0xA6, 0x93, 0x9A, 0x44, 0xF0, 0xA6, 0x94,
	// Bytes 17c0 - 17ff
	0xA3, 0x44, 0xF0, 0xA6, 0x96, 0xA8, 0x44, 0xF0,
	0xA6, 0x9E, 0xA7, 0x44, 0xF0, 0xA6, 0x9E, 0xB5,
	0x44, 0xF0, 0xA6, 0xAC, 0xBC, 0x44, 0xF0, 0xA6,
	0xB0, 0xB6, 0x44, 0xF0, 0xA6, 0xB3, 0x95, 0x44,
	0xF0, 0xA6, 0xB5, 0xAB, 0x44, 0xF0, 0xA6, 0xBC,
	0xAC, 0x44, 0xF0, 0xA6, 0xBE, 0xB1, 0x44, 0xF0,
	0xA7, 0x83, 0x92, 0x44, 0xF0, 0xA7, 0x8F, 0x8A,
	0x44, 0xF0, 0xA7, 0x99, 0xA7, 0x44, 0xF0, 0xA7,
	// Bytes 1800 - 183f
	0xA2, 0xAE, 0x44, 0xF0, 0xA7, 0xA5, 0xA6, 0x44,
	0xF0, 0xA7, 0xB2, 0xA8, 0x44, 0xF0, 0xA7, 0xBB,
	0x93, 0x44, 0xF0, 0xA7, 0xBC, 0xAF, 0x44, 0xF0,
	0xA8, 0x97, 0x92, 0x44, 0xF0, 0xA8, 0x97, 0xAD,
	0x44, 0xF0, 0xA8, 0x9C, 0xAE, 0x44, 0xF0, 0xA8,
	0xAF, 0xBA, 0x44, 0xF0, 0xA8, 0xB5, 0xB7, 0x44,
	0xF0, 0xA9, 0x85, 0x85, 0x44, 0xF0, 0xA9, 0x87,
	0x9F, 0x44, 0xF0, 0xA9, 0x88, 0x9A, 0x44, 0xF0,
	// Bytes 1840 - 187f
	0xA9, 0x90, 0x8A, 0x44, 0xF0, 0xA9, 0x92, 0x96,
	0x44, 0xF0, 0xA9, 0x96, 0xB6, 0x44, 0xF0, 0xA9,
	0xAC, 0xB0, 0x44, 0xF0, 0xAA, 0x83, 0x8E, 0x44,
	0xF0, 0xAA, 0x84, 0x85, 0x44, 0xF0, 0xAA, 0x88,
	0x8E, 0x44, 0xF0, 0xAA, 0x8A, 0x91, 0x44, 0xF0,
	0xAA, 0x8E, 0x92, 0x44, 0xF0, 0xAA, 0x98, 0x80,
	0x42, 0x21, 0x21, 0x42, 0x21, 0x3F, 0x42, 0x2E,
	0x2E, 0x42, 0x30, 0x2C, 0x42, 0x30, 0x2E, 0x42,
	// Bytes 1880 - 18bf
	0x31, 0x2C, 0x42, 0x31, 0x2E, 0x42, 0x31, 0x30,
	0x42, 0x31, 0x31, 0x42, 0x31, 0x32, 0x42, 0x31,
	0x33, 0x42, 0x31, 0x34, 0x42, 0x31, 0x35, 0x42,
	0x31, 0x36, 0x42, 0x31, 0x37, 0x42, 0x31, 0x38,
	0x42, 0x31, 0x39, 0x42, 0x32, 0x2C, 0x42, 0x32,
	0x2E, 0x42, 0x32, 0x30, 0x42, 0x32, 0x31, 0x42,
	0x32, 0x32, 0x42, 0x32, 0x33, 0x42, 0x32, 0x34,
	0x42, 0x32, 0x35, 0x42, 0x32, 0x36, 0x42, 0x32,
	// Bytes 18c0 - 18ff
	0x37, 0x42, 0x32, 0x38, 0x42, 0x32, 0x39, 0x42,
	0x33, 0x2C, 0x42, 0x33, 0x2E, 0x42, 0x33, 0x30,
	0x42, 0x33, 0x31, 0x42, 0x33, 0x32, 0x42, 0x33,
	0x33, 0x42, 0x33, 0x34, 0x42, 0x33, 0x35, 0x42,
	0x33, 0x36, 0x42, 0x33, 0x37, 0x42, 0x33, 0x38,
	0x42, 0x33, 0x39, 0x42, 0x34, 0x2C, 0x42, 0x34,
	0x2E, 0x42, 0x34, 0x30, 0x42, 0x34, 0x31, 0x42,
	0x34, 0x32, 0x42, 0x34, 0x33, 0x42, 0x34, 0x34,
	// Bytes 1900 - 193f
	0x42, 0x34, 0x35, 0x42, 0x34, 0x36, 0x42, 0x34,
	0x37, 0x42, 0x34, 0x38, 0x42, 0x34, 0x39, 0x42,
	0x35, 0x2C, 0x42, 0x35, 0x2E, 0x42, 0x35, 0x30,
	0x42, 0x36, 0x2C, 0x42, 0x36, 0x2E, 0x42, 0x37,
	0x2C, 0x42, 0x37, 0x2E, 0x42, 0x38, 0x2C, 0x42,
	0x38, 0x2E, 0x42, 0x39, 0x2C, 0x42, 0x39, 0x2E,
	0x42, 0x3D, 0x3D, 0x42, 0x3F, 0x21, 0x42, 0x3F,
	0x3F, 0x42, 0x41, 0x55, 0x42, 0x42, 0x71, 0x42,
	// Bytes 1940 - 197f
	0x43, 0x44, 0x42, 0x44, 0x4A, 0x42, 0x44, 0x5A,
	0x42, 0x44, 0x7A, 0x42, 0x47, 0x42, 0x42, 0x47,
	0x79, 0x42, 0x48, 0x50, 0x42, 0x48, 0x56, 0x42,
	0x48, 0x67, 0x42, 0x48, 0x7A, 0x42, 0x49, 0x49,
	0x42, 0x49, 0x4A, 0x42, 0x49, 0x55, 0x42, 0x49,
	0x56, 0x42, 0x49, 0x58, 0x42, 0x4B, 0x42, 0x42,
	0x4B, 0x4B, 0x42, 0x4B, 0x4D, 0x42, 0x4C, 0x4A,
	0x42, 0x4C, 0x6A, 0x42, 0x4D, 0x42, 0x42, 0x4D,
	// Bytes 1980 - 19bf
	0x43, 0x42, 0x4D, 0x44, 0x42, 0x4D, 0x52, 0x42,
	0x4D, 0x56, 0x42, 0x4D, 0x57, 0x42, 0x4E, 0x4A,
	0x42, 0x4E, 0x6A, 0x42, 0x4E, 0x6F, 0x42, 0x50,
	0x48, 0x42, 0x50, 0x52, 0x42, 0x50, 0x61, 0x42,
	0x52, 0x73, 0x42, 0x53, 0x44, 0x42, 0x53, 0x4D,
	0x42, 0x53, 0x53, 0x42, 0x53, 0x76, 0x42, 0x54,
	0x4D, 0x42, 0x56, 0x49, 0x42, 0x57, 0x43, 0x42,
	0x57, 0x5A, 0x42, 0x57, 0x62, 0x42, 0x58, 0x49,
	// Bytes 19c0 - 19ff
	0x42, 0x63, 0x63, 0x42, 0x63, 0x64, 0x42, 0x63,
	0x6D, 0x42, 0x64, 0x42, 0x42, 0x64, 0x61, 0x42,
	0x64, 0x6C, 0x42, 0x64, 0x6D, 0x42, 0x64, 0x7A,
	0x42, 0x65, 0x56, 0x42, 0x66, 0x66, 0x42, 0x66,
	0x69, 0x42, 0x66, 0x6C, 0x42, 0x66, 0x6D, 0x42,
	0x68, 0x61, 0x42, 0x69, 0x69, 0x42, 0x69, 0x6A,
	0x42, 0x69, 0x6E, 0x42, 0x69, 0x76, 0x42, 0x69,
	0x78, 0x42, 0x6B, 0x41, 0x42, 0x6B, 0x56, 0x42,
	// Bytes 1a00 - 1a3f
	0x6B, 0x57, 0x42, 0x6B, 0x67, 0x42, 0x6B, 0x6C,
	0x42, 0x6B, 0x6D, 0x42, 0x6B, 0x74, 0x42, 0x6C,
	0x6A, 0x42, 0x6C, 0x6D, 0x42, 0x6C, 0x6E, 0x42,
	0x6C, 0x78, 0x42, 0x6D, 0x32, 0x42, 0x6D, 0x33,
	0x42, 0x6D, 0x41, 0x42, 0x6D, 0x56, 0x42, 0x6D,
	0x57, 0x42, 0x6D, 0x62, 0x42, 0x6D, 0x67, 0x42,
	0x6D, 0x6C, 0x42, 0x6D, 0x6D, 0x42, 0x6D, 0x73,
	0x42, 0x6E, 0x41, 0x42, 0x6E, 0x46, 0x42, 0x6E,
	// Bytes 1a40 - 1a7f
	0x56, 0x42, 0x6E, 0x57, 0x42, 0x6E, 0x6A, 0x42,
	0x6E, 0x6D, 0x42, 0x6E, 0x73, 0x42, 0x6F, 0x56,
	0x42, 0x70, 0x41, 0x42, 0x70, 0x46, 0x42, 0x70,
	0x56, 0x42, 0x70, 0x57, 0x42, 0x70, 0x63, 0x42,
	0x70, 0x73, 0x42, 0x73, 0x72, 0x42, 0x73, 0x74,
	0x42, 0x76, 0x69, 0x42, 0x78, 0x69, 0x43, 0x28,
	0x31, 0x29, 0x43, 0x28, 0x32, 0x29, 0x43, 0x28,
	0x33, 0x29, 0x43, 0x28, 0x34, 0x29, 0x43, 0x28,
	// Bytes 1a80 - 1abf
	0x35, 0x29, 0x43, 0x28, 0x36, 0x29, 0x43, 0x28,
	0x37, 0x29, 0x43, 0x28, 0x38, 0x29, 0x43, 0x28,
	0x39, 0x29, 0x43, 0x28, 0x41, 0x29, 0x43, 0x28,
	0x42, 0x29, 0x43, 0x28, 0x43, 0x29, 0x43, 0x28,
	0x44, 0x29, 0x43, 0x28, 0x45, 0x29, 0x43, 0x28,
	0x46, 0x29, 0x43, 0x28, 0x47, 0x29, 0x43, 0x28,
	0x48, 0x29, 0x43, 0x28, 0x49, 0x29, 0x43, 0x28,
	0x4A, 0x29, 0x43, 0x28, 0x4B, 0x29, 0x43, 0x28,
	// Bytes 1ac0 - 1aff
	0x4C, 0x29, 0x43, 0x28, 0x4D, 0x29, 0x43, 0x28,
	0x4E, 0x29, 0x43, 0x28, 0x4F, 0x29, 0x43, 0x28,
	0x50, 0x29, 0x43, 0x28, 0x51, 0x29, 0x43, 0x28,
	0x52, 0x29, 0x43, 0x28, 0x53, 0x29, 0x43, 0x28,
	0x54, 0x29, 0x43, 0x28, 0x55, 0x29, 0x43, 0x28,
	0x56, 0x29, 0x43, 0x28, 0x57, 0x29, 0x43, 0x28,
	0x58, 0x29, 0x43, 0x28, 0x59, 0x29, 0x43, 0x28,
	0x5A, 0x29, 0x43, 0x28, 0x61, 0x29, 0x43, 0x28,
	// Bytes 1b00 - 1b3f
	0x62, 0x29, 0x43, 0x28, 0x63, 0x29, 0x43, 0x28,
	0x64, 0x29, 0x43, 0x28, 0x65, 0x29, 0x43, 0x28,
	0x66, 0x29, 0x43, 0x28, 0x67, 0x29, 0x43, 0x28,
	0x68, 0x29, 0x43, 0x28, 0x69, 0x29, 0x43, 0x28,
	0x6A, 0x29, 0x43, 0x28, 0x6B, 0x29, 0x43, 0x28,
	0x6C, 0x29, 0x43, 0x28, 0x6D, 0x29, 0x43, 0x28,
	0x6E, 0x29, 0x43, 0x28, 0x6F, 0x29, 0x43, 0x28,
	0x70, 0x29, 0x43, 0x28, 0x71, 0x29, 0x43, 0x28,
	// Bytes 1b40 - 1b7f
	0x72, 0x29, 0x43, 0x28, 0x73, 0x29, 0x43, 0x28,
	0x74, 0x29, 0x43, 0x28, 0x75, 0x29, 0x43, 0x28,
	0x76, 0x29, 0x43, 0x28, 0x77, 0x29, 0x43, 0x28,
	0x78, 0x29, 0x43, 0x28, 0x79, 0x29, 0x43, 0x28,
	0x7A, 0x29, 0x43, 0x2E, 0x2E, 0x2E, 0x43, 0x31,
	0x30, 0x2E, 0x43, 0x31, 0x31, 0x2E, 0x43, 0x31,
	0x32, 0x2E, 0x43, 0x31, 0x33, 0x2E, 0x43, 0x31,
	0x34, 0x2E, 0x43, 0x31, 0x35, 0x2E, 0x43, 0x31,
	// Bytes 1b80 - 1bbf
	0x36, 0x2E, 0x43, 0x31, 0x37, 0x2E, 0x43, 0x31,
	0x38, 0x2E, 0x43, 0x31, 0x39, 0x2E, 0x43, 0x32,
	0x30, 0x2E, 0x43, 0x3A, 0x3A, 0x3D, 0x43, 0x3D,
	0x3D, 0x3D, 0x43, 0x43, 0x6F, 0x2E, 0x43, 0x46,
	0x41, 0x58, 0x43, 0x47, 0x48, 0x7A, 0x43, 0x47,
	0x50, 0x61, 0x43, 0x49, 0x49, 0x49, 0x43, 0x4C,
	0x54, 0x44, 0x43, 0x4C, 0xC2, 0xB7, 0x43, 0x4D,
	0x48, 0x7A, 0x43, 0x4D, 0x50, 0x61, 0x43, 0x4D,
	// Bytes 1bc0 - 1bff
	0xCE, 0xA9, 0x43, 0x50, 0x50, 0x4D, 0x43, 0x50,
	0x50, 0x56, 0x43, 0x50, 0x54, 0x45, 0x43, 0x54,
	0x45, 0x4C, 0x43, 0x54, 0x48, 0x7A, 0x43, 0x56,
	0x49, 0x49, 0x43, 0x58, 0x49, 0x49, 0x43, 0x61,
	0x2F, 0x63, 0x43, 0x61, 0x2F, 0x73, 0x43, 0x61,
	0xCA, 0xBE, 0x43, 0x62, 0x61, 0x72, 0x43, 0x63,
	0x2F, 0x6F, 0x43, 0x63, 0x2F, 0x75, 0x43, 0x63,
	0x61, 0x6C, 0x43, 0x63, 0x6D, 0x32, 0x43, 0x63,
	// Bytes 1c00 - 1c3f
	0x6D, 0x33, 0x43, 0x64, 0x6D, 0x32, 0x43, 0x64,
	0x6D, 0x33, 0x43, 0x65, 0x72, 0x67, 0x43, 0x66,
	0x66, 0x69, 0x43, 0x66, 0x66, 0x6C, 0x43, 0x67,
	0x61, 0x6C, 0x43, 0x68, 0x50, 0x61, 0x43, 0x69,
	0x69, 0x69, 0x43, 0x6B, 0x48, 0x7A, 0x43, 0x6B,
	0x50, 0x61, 0x43, 0x6B, 0x6D, 0x32, 0x43, 0x6B,
	0x6D, 0x33, 0x43, 0x6B, 0xCE, 0xA9, 0x43, 0x6C,
	0x6F, 0x67, 0x43, 0x6C, 0xC2, 0xB7, 0x43, 0x6D,
	// Bytes 1c40 - 1c7f
	0x69, 0x6C, 0x43, 0x6D, 0x6D, 0x32, 0x43, 0x6D,
	0x6D, 0x33, 0x43, 0x6D, 0x6F, 0x6C, 0x43, 0x72,
	0x61, 0x64, 0x43, 0x76, 0x69, 0x69, 0x43, 0x78,
	0x69, 0x69, 0x43, 0xC2, 0xB0, 0x43, 0x43, 0xC2,
	0xB0, 0x46, 0x43, 0xCA, 0xBC, 0x6E, 0x43, 0xCE,
	0xBC, 0x41, 0x43, 0xCE, 0xBC, 0x46, 0x43, 0xCE,
	0xBC, 0x56, 0x43, 0xCE, 0xBC, 0x57, 0x43, 0xCE,
	0xBC, 0x67, 0x43, 0xCE, 0xBC, 0x6C, 0x43, 0xCE,
	// Bytes 1c80 - 1cbf
	0xBC, 0x6D, 0x43, 0xCE, 0xBC, 0x73, 0x44, 0x28,
	0x31, 0x30, 0x29, 0x44, 0x28, 0x31, 0x31, 0x29,
	0x44, 0x28, 0x31, 0x32, 0x29, 0x44, 0x28, 0x31,
	0x33, 0x29, 0x44, 0x28, 0x31, 0x34, 0x29, 0x44,
	0x28, 0x31, 0x35, 0x29, 0x44, 0x28, 0x31, 0x36,
	0x29, 0x44, 0x28, 0x31, 0x37, 0x29, 0x44, 0x28,
	0x31, 0x38, 0x29, 0x44, 0x28, 0x31, 0x39, 0x29,
	0x44, 0x28, 0x32, 0x30, 0x29, 0x44, 0x30, 0xE7,
	// Bytes 1cc0 - 1cff
	0x82, 0xB9, 0x44, 0x31, 0xE2, 0x81, 0x84, 0x44,
	0x31, 0xE6, 0x97, 0xA5, 0x44, 0x31, 0xE6, 0x9C,
	0x88, 0x44, 0x31, 0xE7, 0x82, 0xB9, 0x44, 0x32,
	0xE6, 0x97, 0xA5, 0x44, 0x32, 0xE6, 0x9C, 0x88,
	0x44, 0x32, 0xE7, 0x82, 0xB9, 0x44, 0x33, 0xE6,
	0x97, 0xA5, 0x44, 0x33, 0xE6, 0x9C, 0x88, 0x44,
	0x33, 0xE7, 0x82, 0xB9, 0x44, 0x34, 0xE6, 0x97,
	0xA5, 0x44, 0x34, 0xE6, 0x9C, 0x88, 0x44, 0x34,
	// Bytes 1d00 - 1d3f
	0xE7, 0x82, 0xB9, 0x44, 0x35, 0xE6, 0x97, 0xA5,
	0x44, 0x35, 0xE6, 0x9C, 0x88, 0x44, 0x35, 0xE7,
	0x82, 0xB9, 0x44, 0x36, 0xE6, 0x97, 0xA5, 0x44,
	0x36, 0xE6, 0x9C, 0x88, 0x44, 0x36, 0xE7, 0x82,
	0xB9, 0x44, 0x37, 0xE6, 0x97, 0xA5, 0x44, 0x37,
	0xE6, 0x9C, 0x88, 0x44, 0x37, 0xE7, 0x82, 0xB9,
	0x44, 0x38, 0xE6, 0x97, 0xA5, 0x44, 0x38, 0xE6,
	0x9C, 0x88, 0x44, 0x38, 0xE7, 0x82, 0xB9, 0x44,
	// Bytes 1d40 - 1d7f
	0x39, 0xE6, 0x97, 0xA5, 0x44, 0x39, 0xE6, 0x9C,
	0x88, 0x44, 0x39, 0xE7, 0x82, 0xB9, 0x44, 0x56,
	0x49, 0x49, 0x49, 0x44, 0x61, 0x2E, 0x6D, 0x2E,
	0x44, 0x6B, 0x63, 0x61, 0x6C, 0x44, 0x70, 0x2E,
	0x6D, 0x2E, 0x44, 0x76, 0x69, 0x69, 0x69, 0x44,
	0xD5, 0xA5, 0xD6, 0x82, 0x44, 0xD5, 0xB4, 0xD5,
	0xA5, 0x44, 0xD5, 0xB4, 0xD5, 0xAB, 0x44, 0xD5,
	0xB4, 0xD5, 0xAD, 0x44, 0xD5, 0xB4, 0xD5, 0xB6,
	// Bytes 1d80 - 1dbf
	0x44, 0xD5, 0xBE, 0xD5, 0xB6, 0x44, 0xD7, 0x90,
	0xD7, 0x9C, 0x44, 0xD8, 0xA7, 0xD9, 0xB4, 0x44,
	0xD8, 0xA8, 0xD8, 0xAC, 0x44, 0xD8, 0xA8, 0xD8,
	0xAD, 0x44, 0xD8, 0xA8, 0xD8, 0xAE, 0x44, 0xD8,
	0xA8, 0xD8, 0xB1, 0x44, 0xD8, 0xA8, 0xD8, 0xB2,
	0x44, 0xD8, 0xA8, 0xD9, 0x85, 0x44, 0xD8, 0xA8,
	0xD9, 0x86, 0x44, 0xD8, 0xA8, 0xD9, 0x87, 0x44,
	0xD8, 0xA8, 0xD9, 0x89, 0x44, 0xD8, 0xA8, 0xD9,
	// Bytes 1dc0 - 1dff
	0x8A, 0x44, 0xD8, 0xAA, 0xD8, 0xAC, 0x44, 0xD8,
	0xAA, 0xD8, 0xAD, 0x44, 0xD8, 0xAA, 0xD8, 0xAE,
	0x44, 0xD8, 0xAA, 0xD8, 0xB1, 0x44, 0xD8, 0xAA,
	0xD8, 0xB2, 0x44, 0xD8, 0xAA, 0xD9, 0x85, 0x44,
	0xD8, 0xAA, 0xD9, 0x86, 0x44, 0xD8, 0xAA, 0xD9,
	0x87, 0x44, 0xD8, 0xAA, 0xD9, 0x89, 0x44, 0xD8,
	0xAA, 0xD9, 0x8A, 0x44, 0xD8, 0xAB, 0xD8, 0xAC,
	0x44, 0xD8, 0xAB, 0xD8, 0xB1, 0x44, 0xD8, 0xAB,
	// Bytes 1e00 - 1e3f
	0xD8, 0xB2, 0x44, 0xD8, 0xAB, 0xD9, 0x85, 0x44,
	0xD8, 0xAB, 0xD9, 0x86, 0x44, 0xD8, 0xAB, 0xD9,
	0x87, 0x44, 0xD8, 0xAB, 0xD9, 0x89, 0x44, 0xD8,
	0xAB, 0xD9, 0x8A, 0x44, 0xD8, 0xAC, 0xD8, 0xAD,
	0x44, 0xD8, 0xAC, 0xD9, 0x85, 0x44, 0xD8, 0xAC,
	0xD9, 0x89, 0x44, 0xD8, 0xAC, 0xD9, 0x8A, 0x44,
	0xD8, 0xAD, 0xD8, 0xAC, 0x44, 0xD8, 0xAD, 0xD9,
	0x85, 0x44, 0xD8, 0xAD, 0xD9, 0x89, 0x44, 0xD8,
	// Bytes 1e40 - 1e7f
	0xAD, 0xD9, 0x8A, 0x44, 0xD8, 0xAE, 0xD8, 0xAC,
	0x44, 0xD8, 0xAE, 0xD8, 0xAD, 0x44, 0xD8, 0xAE,
	0xD9, 0x85, 0x44, 0xD8, 0xAE, 0xD9, 0x89, 0x44,
	0xD8, 0xAE, 0xD9, 0x8A, 0x44, 0xD8, 0xB3, 0xD8,
	0xAC, 0x44, 0xD8, 0xB3, 0xD8, 0xAD, 0x44, 0xD8,
	0xB3, 0xD8, 0xAE, 0x44, 0xD8, 0xB3, 0xD8, 0xB1,
	0x44, 0xD8, 0xB3, 0xD9, 0x85, 0x44, 0xD8, 0xB3,
	0xD9, 0x87, 0x44, 0xD8, 0xB3, 0xD9, 0x89, 0x44,
	// Bytes 1e80 - 1ebf
	0xD8, 0xB3, 0xD9, 0x8A, 0x44, 0xD8, 0xB4, 0xD8,
	0xAC, 0x44, 0xD8, 0xB4, 0xD8, 0xAD, 0x44, 0xD8,
	0xB4, 0xD8, 0xAE, 0x44, 0xD8, 0xB4, 0xD8, 0xB1,
	0x44, 0xD8, 0xB4, 0xD9, 0x85, 0x44, 0xD8, 0xB4,
	0xD9, 0x87, 0x44, 0xD8, 0xB4, 0xD9, 0x89, 0x44,
	0xD8, 0xB4, 0xD9, 0x8A, 0x44, 0xD8, 0xB5, 0xD8,
	0xAD, 0x44, 0xD8, 0xB5, 0xD8, 0xAE, 0x44, 0xD8,
	0xB5, 0xD8, 0xB1, 0x44, 0xD8, 0xB5, 0xD9, 0x85,
	// Bytes 1ec0 - 1eff
	0x44, 0xD8, 0xB5, 0xD9, 0x89, 0x44, 0xD8, 0xB5,
	0xD9, 0x8A, 0x44, 0xD8, 0xB6, 0xD8, 0xAC, 0x44,
	0xD8, 0xB6, 0xD8, 0xAD, 0x44, 0xD8, 0xB6, 0xD8,
	0xAE, 0x44, 0xD8, 0xB6, 0xD8, 0xB1, 0x44, 0xD8,
	0xB6, 0xD9, 0x85, 0x44, 0xD8, 0xB6, 0xD9, 0x89,
	0x44, 0xD8, 0xB6, 0xD9, 0x8A, 0x44, 0xD8, 0xB7,
	0xD8, 0xAD, 0x44, 0xD8, 0xB7, 0xD9, 0x85, 0x44,
	0xD8, 0xB7, 0xD9, 0x89, 0x44, 0xD8, 0xB7, 0xD9,
	// Bytes 1f00 - 1f3f
	0x8A, 0x44, 0xD8, 0xB8, 0xD9, 0x85, 0x44, 0xD8,
	0xB9, 0xD8, 0xAC, 0x44, 0xD8, 0xB9, 0xD9, 0x85,
	0x44, 0xD8, 0xB9, 0xD9, 0x89, 0x44, 0xD8, 0xB9,
	0xD9, 0x8A, 0x44, 0xD8, 0xBA, 0xD8, 0xAC, 0x44,
	0xD8, 0xBA, 0xD9, 0x85, 0x44, 0xD8, 0xBA, 0xD9,
	0x89, 0x44, 0xD8, 0xBA, 0xD9, 0x8A, 0x44, 0xD9,
	0x81, 0xD8, 0xAC, 0x44, 0xD9, 0x81, 0xD8, 0xAD,
	0x44, 0xD9, 0x81, 0xD8, 0xAE, 0x44, 0xD9, 0x81,
	// Bytes 1f40 - 1f7f
	0xD9, 0x85, 0x44, 0xD9, 0x81, 0xD9, 0x89, 0x44,
	0xD9, 0x81, 0xD9, 0x8A, 0x44, 0xD9, 0x82, 0xD8,
	0xAD, 0x44, 0xD9, 0x82, 0xD9, 0x85, 0x44, 0xD9,
	0x82, 0xD9, 0x89, 0x44, 0xD9, 0x82, 0xD9, 0x8A,
	0x44, 0xD9, 0x83, 0xD8, 0xA7, 0x44, 0xD9, 0x83,
	0xD8, 0xAC, 0x44, 0xD9, 0x83, 0xD8, 0xAD, 0x44,
	0xD9, 0x83, 0xD8, 0xAE, 0x44, 0xD9, 0x83, 0xD9,
	0x84, 0x44, 0xD9, 0x83, 0xD9, 0x85, 0x44, 0xD9,
	// Bytes 1f80 - 1fbf
	0x83, 0xD9, 0x89, 0x44, 0xD9, 0x83, 0xD9, 0x8A,
	0x44, 0xD9, 0x84, 0xD8, 0xA7, 0x44, 0xD9, 0x84,
	0xD8, 0xAC, 0x44, 0xD9, 0x84, 0xD8, 0xAD, 0x44,
	0xD9, 0x84, 0xD8, 0xAE, 0x44, 0xD9, 0x84, 0xD9,
	0x85, 0x44, 0xD9, 0x84, 0xD9, 0x87, 0x44, 0xD9,
	0x84, 0xD9, 0x89, 0x44, 0xD9, 0x84, 0xD9, 0x8A,
	0x44, 0xD9, 0x85, 0xD8, 0xA7, 0x44, 0xD9, 0x85,
	0xD8, 0xAC, 0x44, 0xD9, 0x85, 0xD8, 0xAD, 0x44,
	// Bytes 1fc0 - 1fff
	0xD9, 0x85, 0xD8, 0xAE, 0x44, 0xD9, 0x85, 0xD9,
	0x85, 0x44, 0xD9, 0x85, 0xD9, 0x89, 0x44, 0xD9,
	0x85, 0xD9, 0x8A, 0x44, 0xD9, 0x86, 0xD8, 0xAC,
	0x44, 0xD9, 0x86, 0xD8, 0xAD, 0x44, 0xD9, 0x86,
	0xD8, 0xAE, 0x44, 0xD9, 0x86, 0xD8, 0xB1, 0x44,
	0xD9, 0x86, 0xD8, 0xB2, 0x44, 0xD9, 0x86, 0xD9,
	0x85, 0x44, 0xD9, 0x86, 0xD9, 0x86, 0x44, 0xD9,
	0x86, 0xD9, 0x87, 0x44, 0xD9, 0x86, 0xD9, 0x89,
	// Bytes 2000 - 203f
	0x44, 0xD9, 0x86, 0xD9, 0x8A, 0x44, 0xD9, 0x87,
	0xD8, 0xAC, 0x44, 0xD9, 0x87, 0xD9, 0x85, 0x44,
	0xD9, 0x87, 0xD9, 0x89, 0x44, 0xD9, 0x87, 0xD9,
	0x8A, 0x44, 0xD9, 0x88, 0xD9, 0xB4, 0x44, 0xD9,
	0x8A, 0xD8, 0xAC, 0x44, 0xD9, 0x8A, 0xD8, 0xAD,
	0x44, 0xD9, 0x8A, 0xD8, 0xAE, 0x44, 0xD9, 0x8A,
	0xD8, 0xB1, 0x44, 0xD9, 0x8A, 0xD8, 0xB2, 0x44,
	0xD9, 0x8A, 0xD9, 0x85, 0x44, 0xD9, 0x8A, 0xD9,
	// Bytes 2040 - 207f
	0x86, 0x44, 0xD9, 0x8A, 0xD9, 0x87, 0x44, 0xD9,
	0x8A, 0xD9, 0x89, 0x44, 0xD9, 0x8A, 0xD9, 0x8A,
	0x44, 0xD9, 0x8A, 0xD9, 0xB4, 0x44, 0xDB, 0x87,
	0xD9, 0xB4, 0x45, 0x28, 0xE1, 0x84, 0x80, 0x29,
	0x45, 0x28, 0xE1, 0x84, 0x82, 0x29, 0x45, 0x28,
	0xE1, 0x84, 0x83, 0x29, 0x45, 0x28, 0xE1, 0x84,
	0x85, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x86, 0x29,
	0x45, 0x28, 0xE1, 0x84, 0x87, 0x29, 0x45, 0x28,
	// Bytes 2080 - 20bf
	0xE1, 0x84, 0x89, 0x29, 0x45, 0x28, 0xE1, 0x84,
	0x8B, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x8C, 0x29,
	0x45, 0x28, 0xE1, 0x84, 0x8E, 0x29, 0x45, 0x28,
	0xE1, 0x84, 0x8F, 0x29, 0x45, 0x28, 0xE1, 0x84,
	0x90, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x91, 0x29,
	0x45, 0x28, 0xE1, 0x84, 0x92, 0x29, 0x45, 0x28,
	0xE4, 0xB8, 0x80, 0x29, 0x45, 0x28, 0xE4, 0xB8,
	0x83, 0x29, 0x45, 0x28, 0xE4, 0xB8, 0x89, 0x29,
	// Bytes 20c0 - 20ff
	0x45, 0x28, 0xE4, 0xB9, 0x9D, 0x29, 0x45, 0x28,
	0xE4, 0xBA, 0x8C, 0x29, 0x45, 0x28, 0xE4, 0xBA,
	0x94, 0x29, 0x45, 0x28, 0xE4, 0xBB, 0xA3, 0x29,
	0x45, 0x28, 0xE4, 0xBC, 0x81, 0x29, 0x45, 0x28,
	0xE4, 0xBC, 0x91, 0x29, 0x45, 0x28, 0xE5, 0x85,
	0xAB, 0x29, 0x45, 0x28, 0xE5, 0x85, 0xAD, 0x29,
	0x45, 0x28, 0xE5, 0x8A, 0xB4, 0x29, 0x45, 0x28,
	0xE5, 0x8D, 0x81, 0x29, 0x45, 0x28, 0xE5, 0x8D,
	// Bytes 2100 - 213f
	0x94, 0x29, 0x45, 0x28, 0xE5, 0x90, 0x8D, 0x29,
	0x45, 0x28, 0xE5, 0x91, 0xBC, 0x29, 0x45, 0x28,
	0xE5, 0x9B, 0x9B, 0x29, 0x45, 0x28, 0xE5, 0x9C,
	0x9F, 0x29, 0x45, 0x28, 0xE5, 0xAD, 0xA6, 0x29,
	0x45, 0x28, 0xE6, 0x97, 0xA5, 0x29, 0x45, 0x28,
	0xE6, 0x9C, 0x88, 0x29, 0x45, 0x28, 0xE6, 0x9C,
	0x89, 0x29, 0x45, 0x28, 0xE6, 0x9C, 0xA8, 0x29,
	0x45, 0x28, 0xE6, 0xA0, 0xAA, 0x29, 0x45, 0x28,
	// Bytes 2140 - 217f
	0xE6, 0xB0, 0xB4, 0x29, 0x45, 0x28, 0xE7, 0x81,
	0xAB, 0x29, 0x45, 0x28, 0xE7, 0x89, 0xB9, 0x29,
	0x45, 0x28, 0xE7, 0x9B, 0xA3, 0x29, 0x45, 0x28,
	0xE7, 0xA4, 0xBE, 0x29, 0x45, 0x28, 0xE7, 0xA5,
	0x9D, 0x29, 0x45, 0x28, 0xE7, 0xA5, 0xAD, 0x29,
	0x45, 0x28, 0xE8, 0x87, 0xAA, 0x29, 0x45, 0x28,
	0xE8, 0x87, 0xB3, 0x29, 0x45, 0x28, 0xE8, 0xB2,
	0xA1, 0x29, 0x45, 0x28, 0xE8, 0xB3, 0x87, 0x29,
	// Bytes 2180 - 21bf
	0x45, 0x28, 0xE9, 0x87, 0x91, 0x29, 0x45, 0x30,
	0xE2, 0x81, 0x84, 0x33, 0x45, 0x31, 0x30, 0xE6,
	0x97, 0xA5, 0x45, 0x31, 0x30, 0xE6, 0x9C, 0x88,
	0x45, 0x31, 0x30, 0xE7, 0x82, 0xB9, 0x45, 0x31,
	0x31, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x31, 0xE6,
	0x9C, 0x88, 0x45, 0x31, 0x31, 0xE7, 0x82, 0xB9,
	0x45, 0x31, 0x32, 0xE6, 0x97, 0xA5, 0x45, 0x31,
	0x32, 0xE6, 0x9C, 0x88, 0x45, 0x31, 0x32, 0xE7,
	// Bytes 21c0 - 21ff
	0x82, 0xB9, 0x45, 0x31, 0x33, 0xE6, 0x97, 0xA5,
	0x45, 0x31, 0x33, 0xE7, 0x82, 0xB9, 0x45, 0x31,
	0x34, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x34, 0xE7,
	0x82, 0xB9, 0x45, 0x31, 0x35, 0xE6, 0x97, 0xA5,
	0x45, 0x31, 0x35, 0xE7, 0x82, 0xB9, 0x45, 0x31,
	0x36, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x36, 0xE7,
	0x82, 0xB9, 0x45, 0x31, 0x37, 0xE6, 0x97, 0xA5,
	0x45, 0x31, 0x37, 0xE7, 0x82, 0xB9, 0x45, 0x31,
	// Bytes 2200 - 223f
	0x38, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x38, 0xE7,
	0x82, 0xB9, 0x45, 0x31, 0x39, 0xE6, 0x97, 0xA5,
	0x45, 0x31, 0x39, 0xE7, 0x82, 0xB9, 0x45, 0x31,
	0xE2, 0x81, 0x84, 0x32, 0x45, 0x31, 0xE2, 0x81,
	0x84, 0x33, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x34,
	0x45, 0x31, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x31,
	0xE2, 0x81, 0x84, 0x36, 0x45, 0x31, 0xE2, 0x81,
	0x84, 0x37, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x38,
	// Bytes 2240 - 227f
	0x45, 0x31, 0xE2, 0x81, 0x84, 0x39, 0x45, 0x32,
	0x30, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x30, 0xE7,
	0x82, 0xB9, 0x45, 0x32, 0x31, 0xE6, 0x97, 0xA5,
	0x45, 0x32, 0x31, 0xE7, 0x82, 0xB9, 0x45, 0x32,
	0x32, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x32, 0xE7,
	0x82, 0xB9, 0x45, 0x32, 0x33, 0xE6, 0x97, 0xA5,
	0x45, 0x32, 0x33, 0xE7, 0x82, 0xB9, 0x45, 0x32,
	0x34, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x34, 0xE7,
	// Bytes 2280 - 22bf
	0x82, 0xB9, 0x45, 0x32, 0x35, 0xE6, 0x97, 0xA5,
	0x45, 0x32, 0x36, 0xE6, 0x97, 0xA5, 0x45, 0x32,
	0x37, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x38, 0xE6,
	0x97, 0xA5, 0x45, 0x32, 0x39, 0xE6, 0x97, 0xA5,
	0x45, 0x32, 0xE2, 0x81, 0x84, 0x33, 0x45, 0x32,
	0xE2, 0x81, 0x84, 0x35, 0x45, 0x33, 0x30, 0xE6,
	0x97, 0xA5, 0x45, 0x33, 0x31, 0xE6, 0x97, 0xA5,
	0x45, 0x33, 0xE2, 0x81, 0x84, 0x34, 0x45, 0x33,
	// Bytes 22c0 - 22ff
	0xE2, 0x81, 0x84, 0x35, 0x45, 0x33, 0xE2, 0x81,
	0x84, 0x38, 0x45, 0x34, 0xE2, 0x81, 0x84, 0x35,
	0x45, 0x35, 0xE2, 0x81, 0x84, 0x36, 0x45, 0x35,
	0xE2, 0x81, 0x84, 0x38, 0x45, 0x37, 0xE2, 0x81,
	0x84, 0x38, 0x45, 0x41, 0xE2, 0x88, 0x95, 0x6D,
	0x45, 0x56, 0xE2, 0x88, 0x95, 0x6D, 0x45, 0x6D,
	0xE2, 0x88, 0x95, 0x73, 0x46, 0x31, 0xE2, 0x81,
	0x84, 0x31, 0x30, 0x46, 0x43, 0xE2, 0x88, 0x95,
	// Bytes 2300 - 233f
	0x6B, 0x67, 0x46, 0x6D, 0xE2, 0x88, 0x95, 0x73,
	0x32, 0x46, 0xD8, 0xA8, 0xD8, 0xAD, 0xD9, 0x8A,
	0x46, 0xD8, 0xA8, 0xD8, 0xAE, 0xD9, 0x8A, 0x46,
	0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x85, 0x46, 0xD8,
	0xAA, 0xD8, 0xAC, 0xD9, 0x89, 0x46, 0xD8, 0xAA,
	0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8, 0xAA, 0xD8,
	0xAD, 0xD8, 0xAC, 0x46, 0xD8, 0xAA, 0xD8, 0xAD,
	0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, 0xD9,
	// Bytes 2340 - 237f
	0x85, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, 0xD9, 0x89,
	0x46, 0xD8, 0xAA, 0xD8, 0xAE, 0xD9, 0x8A, 0x46,
	0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAC, 0x46, 0xD8,
	0xAA, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, 0xAA,
	0xD9, 0x85, 0xD8, 0xAE, 0x46, 0xD8, 0xAA, 0xD9,
	0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAA, 0xD9, 0x85,
	0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD8, 0xAD, 0xD9,
	0x89, 0x46, 0xD8, 0xAC, 0xD8, 0xAD, 0xD9, 0x8A,
	// Bytes 2380 - 23bf
	0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD8, 0xAD, 0x46,
	0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8,
	0xAC, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xAD,
	0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8, 0xAD, 0xD9,
	0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAD, 0xD9, 0x85,
	0xD9, 0x8A, 0x46, 0xD8, 0xB3, 0xD8, 0xAC, 0xD8,
	0xAD, 0x46, 0xD8, 0xB3, 0xD8, 0xAC, 0xD9, 0x89,
	0x46, 0xD8, 0xB3, 0xD8, 0xAD, 0xD8, 0xAC, 0x46,
	// Bytes 23c0 - 23ff
	0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x89, 0x46, 0xD8,
	0xB3, 0xD8, 0xAE, 0xD9, 0x8A, 0x46, 0xD8, 0xB3,
	0xD9, 0x85, 0xD8, 0xAC, 0x46, 0xD8, 0xB3, 0xD9,
	0x85, 0xD8, 0xAD, 0x46, 0xD8, 0xB3, 0xD9, 0x85,
	0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8, 0xAC, 0xD9,
	0x8A, 0x46, 0xD8, 0xB4, 0xD8, 0xAD, 0xD9, 0x85,
	0x46, 0xD8, 0xB4, 0xD8, 0xAD, 0xD9, 0x8A, 0x46,
	0xD8, 0xB4, 0xD9, 0x85, 0xD8, 0xAE, 0x46, 0xD8,
	// Bytes 2400 - 243f
	0xB4, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB5,
	0xD8, 0xAD, 0xD8, 0xAD, 0x46, 0xD8, 0xB5, 0xD8,
	0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xB5, 0xD9, 0x84,
	0xD9, 0x89, 0x46, 0xD8, 0xB5, 0xD9, 0x84, 0xDB,
	0x92, 0x46, 0xD8, 0xB5, 0xD9, 0x85, 0xD9, 0x85,
	0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, 0x89, 0x46,
	0xD8, 0xB6, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD8,
	0xB6, 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD8, 0xB7,
	// Bytes 2440 - 247f
	0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, 0xB7, 0xD9,
	0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB7, 0xD9, 0x85,
	0xD9, 0x8A, 0x46, 0xD8, 0xB9, 0xD8, 0xAC, 0xD9,
	0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, 0x85,
	0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, 0x89, 0x46,
	0xD8, 0xB9, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8,
	0xBA, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xBA,
	0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xBA, 0xD9,
	// Bytes 2480 - 24bf
	0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x81, 0xD8, 0xAE,
	0xD9, 0x85, 0x46, 0xD9, 0x81, 0xD9, 0x85, 0xD9,
	0x8A, 0x46, 0xD9, 0x82, 0xD9, 0x84, 0xDB, 0x92,
	0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD8, 0xAD, 0x46,
	0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9,
	0x82, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x83,
	0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9, 0x83, 0xD9,
	0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x84, 0xD8, 0xAC,
	// Bytes 24c0 - 24ff
	0xD8, 0xAC, 0x46, 0xD9, 0x84, 0xD8, 0xAC, 0xD9,
	0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAC, 0xD9, 0x8A,
	0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x85, 0x46,
	0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x89, 0x46, 0xD9,
	0x84, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x84,
	0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x84, 0xD9,
	0x85, 0xD8, 0xAD, 0x46, 0xD9, 0x84, 0xD9, 0x85,
	0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD8,
	// Bytes 2500 - 253f
	0xAD, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD8, 0xAE,
	0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x85, 0x46,
	0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9,
	0x85, 0xD8, 0xAD, 0xD8, 0xAC, 0x46, 0xD9, 0x85,
	0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, 0x85, 0xD8,
	0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD8, 0xAE,
	0xD8, 0xAC, 0x46, 0xD9, 0x85, 0xD8, 0xAE, 0xD9,
	0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAE, 0xD9, 0x8A,
	// Bytes 2540 - 257f
	0x46, 0xD9, 0x85, 0xD9, 0x85, 0xD9, 0x8A, 0x46,
	0xD9, 0x86, 0xD8, 0xAC, 0xD8, 0xAD, 0x46, 0xD9,
	0x86, 0xD8, 0xAC, 0xD9, 0x85, 0x46, 0xD9, 0x86,
	0xD8, 0xAC, 0xD9, 0x89, 0x46, 0xD9, 0x86, 0xD8,
	0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x86, 0xD8, 0xAD,
	0xD9, 0x85, 0x46, 0xD9, 0x86, 0xD8, 0xAD, 0xD9,
	0x89, 0x46, 0xD9, 0x86, 0xD8, 0xAD, 0xD9, 0x8A,
	0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x89, 0x46,
	// Bytes 2580 - 25bf
	0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9,
	0x87, 0xD9, 0x85, 0xD8, 0xAC, 0x46, 0xD9, 0x87,
	0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD8,
	0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD8, 0xAD,
	0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9, 0x85, 0xD9,
	0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x85, 0xD9, 0x8A,
	0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xA7, 0x46,
	0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAC, 0x46, 0xD9,
	// Bytes 25c0 - 25ff
	0x8A, 0xD9, 0x94, 0xD8, 0xAD, 0x46, 0xD9, 0x8A,
	0xD9, 0x94, 0xD8, 0xAE, 0x46, 0xD9, 0x8A, 0xD9,
	0x94, 0xD8, 0xB1, 0x46, 0xD9, 0x8A, 0xD9, 0x94,
	0xD8, 0xB2, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9,
	0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x86,
	0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x87, 0x46,
	0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x88, 0x46, 0xD9,
	0x8A, 0xD9, 0x94, 0xD9, 0x89, 0x46, 0xD9, 0x8A,
	// Bytes 2600 - 263f
	0xD9, 0x94, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9,
	0x94, 0xDB, 0x86, 0x46, 0xD9, 0x8A, 0xD9, 0x94,
	0xDB, 0x87, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB,
	0x88, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, 0x90,
	0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, 0x95, 0x46,
	0xE0, 0xB9, 0x8D, 0xE0, 0xB8, 0xB2, 0x46, 0xE0,
	0xBA, 0xAB, 0xE0, 0xBA, 0x99, 0x46, 0xE0, 0xBA,
	0xAB, 0xE0, 0xBA, 0xA1, 0x46, 0xE0, 0xBB, 0x8D,
	// Bytes 2640 - 267f
	0xE0, 0xBA, 0xB2, 0x46, 0xE0, 0xBD, 0x80, 0xE0,
	0xBE, 0xB5, 0x46, 0xE0, 0xBD, 0x82, 0xE0, 0xBE,
	0xB7, 0x46, 0xE0, 0xBD, 0x8C, 0xE0, 0xBE, 0xB7,
	0x46, 0xE0, 0xBD, 0x91, 0xE0, 0xBE, 0xB7, 0x46,
	0xE0, 0xBD, 0x96, 0xE0, 0xBE, 0xB7, 0x46, 0xE0,
	0xBD, 0x9B, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE,
	0x90, 0xE0, 0xBE, 0xB5, 0x46, 0xE0, 0xBE, 0x92,
	0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0x9C, 0xE0,
	// Bytes 2680 - 26bf
	0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA1, 0xE0, 0xBE,
	0xB7, 0x46, 0xE0, 0xBE, 0xA6, 0xE0, 0xBE, 0xB7,
	0x46, 0xE0, 0xBE, 0xAB, 0xE0, 0xBE, 0xB7, 0x46,
	0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0x46, 0xE2,
	0x80, 0xB5, 0xE2, 0x80, 0xB5, 0x46, 0xE2, 0x88,
	0xAB, 0xE2, 0x88, 0xAB, 0x46, 0xE2, 0x88, 0xAE,
	0xE2, 0x88, 0xAE, 0x46, 0xE3, 0x81, 0xBB, 0xE3,
	0x81, 0x8B, 0x46, 0xE3, 0x82, 0x88, 0xE3, 0x82,
	// Bytes 26c0 - 26ff
	0x8A, 0x46, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD,
	0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0xB3, 0x46,
	0xE3, 0x82, 0xB3, 0xE3, 0x83, 0x88, 0x46, 0xE3,
	0x83, 0x88, 0xE3, 0x83, 0xB3, 0x46, 0xE3, 0x83,
	0x8A, 0xE3, 0x83, 0x8E, 0x46, 0xE3, 0x83, 0x9B,
	0xE3, 0x83, 0xB3, 0x46, 0xE3, 0x83, 0x9F, 0xE3,
	0x83, 0xAA, 0x46, 0xE3, 0x83, 0xAA, 0xE3, 0x83,
	0xA9, 0x46, 0xE3, 0x83, 0xAC, 0xE3, 0x83, 0xA0,
	// Bytes 2700 - 273f
	0x46, 0xE4, 0xBB, 0xA4, 0xE5, 0x92, 0x8C, 0x46,
	0xE5, 0xA4, 0xA7, 0xE6, 0xAD, 0xA3, 0x46, 0xE5,
	0xB9, 0xB3, 0xE6, 0x88, 0x90, 0x46, 0xE6, 0x98,
	0x8E, 0xE6, 0xB2, 0xBB, 0x46, 0xE6, 0x98, 0xAD,
	0xE5, 0x92, 0x8C, 0x47, 0x72, 0x61, 0x64, 0xE2,
	0x88, 0x95, 0x73, 0x47, 0xE3, 0x80, 0x94, 0x53,
	0xE3, 0x80, 0x95, 0x48, 0x28, 0xE1, 0x84, 0x80,
	0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84,
	// Bytes 2740 - 277f
	0x82, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1,
	0x84, 0x83, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28,
	0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, 0x29, 0x48,
	0x28, 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, 0x29,
	0x48, 0x28, 0xE1, 0x84, 0x87, 0xE1, 0x85, 0xA1,
	0x29, 0x48, 0x28, 0xE1, 0x84, 0x89, 0xE1, 0x85,
	0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x8B, 0xE1,
	0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x8C,
	// Bytes 2780 - 27bf
	0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84,
	0x8C, 0xE1, 0x85, 0xAE, 0x29, 0x48, 0x28, 0xE1,
	0x84, 0x8E, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28,
	0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, 0x29, 0x48,
	0x28, 0xE1, 0x84, 0x90, 0xE1, 0x85, 0xA1, 0x29,
	0x48, 0x28, 0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1,
	0x29, 0x48, 0x28, 0xE1, 0x84, 0x92, 0xE1, 0x85,
	0xA1, 0x29, 0x48, 0x72, 0x61, 0x64, 0xE2, 0x88,
	// Bytes 27c0 - 27ff
	0x95, 0x73, 0x32, 0x48, 0xD8, 0xA7, 0xD9, 0x83,
	0xD8, 0xA8, 0xD8, 0xB1, 0x48, 0xD8, 0xA7, 0xD9,
	0x84, 0xD9, 0x84, 0xD9, 0x87, 0x48, 0xD8, 0xB1,
	0xD8, 0xB3, 0xD9, 0x88, 0xD9, 0x84, 0x48, 0xD8,
	0xB1, 0xDB, 0x8C, 0xD8, 0xA7, 0xD9, 0x84, 0x48,
	0xD8, 0xB5, 0xD9, 0x84, 0xD8, 0xB9, 0xD9, 0x85,
	0x48, 0xD8, 0xB9, 0xD9, 0x84, 0xD9, 0x8A, 0xD9,
	0x87, 0x48, 0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x85,
	// Bytes 2800 - 283f
	0xD8, 0xAF, 0x48, 0xD9, 0x88, 0xD8, 0xB3, 0xD9,
	0x84, 0xD9, 0x85, 0x49, 0xE2, 0x80, 0xB2, 0xE2,
	0x80, 0xB2, 0xE2, 0x80, 0xB2, 0x49, 0xE2, 0x80,
	0xB5, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0x49,
	0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88,
	0xAB, 0x49, 0xE2, 0x88, 0xAE, 0xE2, 0x88, 0xAE,
	0xE2, 0x88, 0xAE, 0x49, 0xE3, 0x80, 0x94, 0xE4,
	0xB8, 0x89, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80,
	// Bytes 2840 - 287f
	0x94, 0xE4, 0xBA, 0x8C, 0xE3, 0x80, 0x95, 0x49,
	0xE3, 0x80, 0x94, 0xE5, 0x8B, 0x9D, 0xE3, 0x80,
	0x95, 0x49, 0xE3, 0x80, 0x94, 0xE5, 0xAE, 0x89,
	0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE6,
	0x89, 0x93, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80,
	0x94, 0xE6, 0x95, 0x97, 0xE3, 0x80, 0x95, 0x49,
	0xE3, 0x80, 0x94, 0xE6, 0x9C, 0xAC, 0xE3, 0x80,
	0x95, 0x49, 0xE3, 0x80, 0x94, 0xE7, 0x82, 0xB9,
	// Bytes 2880 - 28bf
	0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE7,
	0x9B, 0x97, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x82,
	0xA2, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0x49,
	0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xB3, 0xE3, 0x83,
	0x81, 0x49, 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0xA9,
	0xE3, 0x83, 0xB3, 0x49, 0xE3, 0x82, 0xAA, 0xE3,
	0x83, 0xB3, 0xE3, 0x82, 0xB9, 0x49, 0xE3, 0x82,
	0xAA, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xA0, 0x49,
	// Bytes 28c0 - 28ff
	0xE3, 0x82, 0xAB, 0xE3, 0x82, 0xA4, 0xE3, 0x83,
	0xAA, 0x49, 0xE3, 0x82, 0xB1, 0xE3, 0x83, 0xBC,
	0xE3, 0x82, 0xB9, 0x49, 0xE3, 0x82, 0xB3, 0xE3,
	0x83, 0xAB, 0xE3, 0x83, 0x8A, 0x49, 0xE3, 0x82,
	0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x81, 0x49,
	0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83,
	0x88, 0x49, 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99,
	0xE3, 0x82, 0xB7, 0x49, 0xE3, 0x83, 0x88, 0xE3,
	// Bytes 2900 - 293f
	0x82, 0x99, 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83,
	0x8E, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0x49,
	0xE3, 0x83, 0x8F, 0xE3, 0x82, 0xA4, 0xE3, 0x83,
	0x84, 0x49, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99,
	0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, 0x92, 0xE3,
	0x82, 0x9A, 0xE3, 0x82, 0xB3, 0x49, 0xE3, 0x83,
	0x95, 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0xB3, 0x49,
	0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x82,
	// Bytes 2940 - 297f
	0xBD, 0x49, 0xE3, 0x83, 0x98, 0xE3, 0x83, 0xAB,
	0xE3, 0x83, 0x84, 0x49, 0xE3, 0x83, 0x9B, 0xE3,
	0x83, 0xBC, 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83,
	0x9B, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xB3, 0x49,
	0xE3, 0x83, 0x9E, 0xE3, 0x82, 0xA4, 0xE3, 0x83,
	0xAB, 0x49, 0xE3, 0x83, 0x9E, 0xE3, 0x83, 0x83,
	0xE3, 0x83, 0x8F, 0x49, 0xE3, 0x83, 0x9E, 0xE3,
	0x83, 0xAB, 0xE3, 0x82, 0xAF, 0x49, 0xE3, 0x83,
	// Bytes 2980 - 29bf
	0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0x49,
	0xE3, 0x83, 0xA6, 0xE3, 0x82, 0xA2, 0xE3, 0x83,
	0xB3, 0x49, 0xE3, 0x83, 0xAF, 0xE3, 0x83, 0x83,
	0xE3, 0x83, 0x88, 0x4C, 0xE2, 0x80, 0xB2, 0xE2,
	0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2,
	0x4C, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2,
	0x88, 0xAB, 0xE2, 0x88, 0xAB, 0x4C, 0xE3, 0x82,
	0xA2, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x95, 0xE3,
	// Bytes 29c0 - 29ff
	0x82, 0xA1, 0x4C, 0xE3, 0x82, 0xA8, 0xE3, 0x83,
	0xBC, 0xE3, 0x82, 0xAB, 0xE3, 0x83, 0xBC, 0x4C,
	0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83,
	0xAD, 0xE3, 0x83, 0xB3, 0x4C, 0xE3, 0x82, 0xAB,
	0xE3, 0x82, 0x99, 0xE3, 0x83, 0xB3, 0xE3, 0x83,
	0x9E, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x83, 0xA9,
	0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0x4C, 0xE3,
	0x82, 0xAB, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xAA,
	// Bytes 2a00 - 2a3f
	0xE3, 0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAD, 0xE3,
	0x82, 0x99, 0xE3, 0x83, 0x8B, 0xE3, 0x83, 0xBC,
	0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xA5, 0xE3,
	0x83, 0xAA, 0xE3, 0x83, 0xBC, 0x4C, 0xE3, 0x82,
	0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xA9, 0xE3,
	0x83, 0xA0, 0x4C, 0xE3, 0x82, 0xAF, 0xE3, 0x83,
	0xAD, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x8D, 0x4C,
	0xE3, 0x82, 0xB5, 0xE3, 0x82, 0xA4, 0xE3, 0x82,
	// Bytes 2a40 - 2a7f
	0xAF, 0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x82, 0xBF,
	0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x82,
	0xB9, 0x4C, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A,
	0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x84, 0x4C, 0xE3,
	0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xAF,
	0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x83, 0x95, 0xE3,
	0x82, 0xA3, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88,
	0x4C, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x99, 0xE3,
	// Bytes 2a80 - 2abf
	0x83, 0xBC, 0xE3, 0x82, 0xBF, 0x4C, 0xE3, 0x83,
	0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0x8B, 0xE3,
	0x83, 0x92, 0x4C, 0xE3, 0x83, 0x98, 0xE3, 0x82,
	0x9A, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB9, 0x4C,
	0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, 0xE3, 0x83,
	0xAB, 0xE3, 0x83, 0x88, 0x4C, 0xE3, 0x83, 0x9E,
	0xE3, 0x82, 0xA4, 0xE3, 0x82, 0xAF, 0xE3, 0x83,
	0xAD, 0x4C, 0xE3, 0x83, 0x9F, 0xE3, 0x82, 0xAF,
	// Bytes 2ac0 - 2aff
	0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xB3, 0x4C, 0xE3,
	0x83, 0xA1, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88,
	0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x83, 0xAA, 0xE3,
	0x83, 0x83, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB,
	0x4C, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x92, 0xE3,
	0x82, 0x9A, 0xE3, 0x83, 0xBC, 0x4C, 0xE6, 0xA0,
	0xAA, 0xE5, 0xBC, 0x8F, 0xE4, 0xBC, 0x9A, 0xE7,
	0xA4, 0xBE, 0x4E, 0x28, 0xE1, 0x84, 0x8B, 0xE1,
	// Bytes 2b00 - 2b3f
	0x85, 0xA9, 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xAE,
	0x29, 0x4F, 0xD8, 0xAC, 0xD9, 0x84, 0x20, 0xD8,
	0xAC, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x84, 0xD9,
	0x87, 0x4F, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0x8F,
	0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x83,
	0x88, 0x4F, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xB3,
	0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x82,
	0xA2, 0x4F, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD,
	// Bytes 2b40 - 2b7f
	0xE3, 0x83, 0xAF, 0xE3, 0x83, 0x83, 0xE3, 0x83,
	0x88, 0x4F, 0xE3, 0x82, 0xB5, 0xE3, 0x83, 0xB3,
	0xE3, 0x83, 0x81, 0xE3, 0x83, 0xBC, 0xE3, 0x83,
	0xA0, 0x4F, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99,
	0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAC, 0xE3, 0x83,
	0xAB, 0x4F, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0xAF,
	0xE3, 0x82, 0xBF, 0xE3, 0x83, 0xBC, 0xE3, 0x83,
	0xAB, 0x4F, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A,
	// Bytes 2b80 - 2bbf
	0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xB3, 0xE3, 0x83,
	0x88, 0x4F, 0xE3, 0x83, 0x9E, 0xE3, 0x83, 0xB3,
	0xE3, 0x82, 0xB7, 0xE3, 0x83, 0xA7, 0xE3, 0x83,
	0xB3, 0x4F, 0xE3, 0x83, 0xA1, 0xE3, 0x82, 0xAB,
	0xE3, 0x82, 0x99, 0xE3, 0x83, 0x88, 0xE3, 0x83,
	0xB3, 0x4F, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0xBC,
	0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, 0xE3, 0x83,
	0xAB, 0x51, 0x28, 0xE1, 0x84, 0x8B, 0xE1, 0x85,
	// Bytes 2bc0 - 2bff
	0xA9, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA5, 0xE1,
	0x86, 0xAB, 0x29, 0x52, 0xE3, 0x82, 0xAD, 0xE3,
	0x82, 0x99, 0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xBF,
	0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0x52, 0xE3,
	0x82, 0xAD, 0xE3, 0x83, 0xAD, 0xE3, 0x82, 0xAF,
	0xE3, 0x82, 0x99, 0xE3, 0x83, 0xA9, 0xE3, 0x83,
	0xA0, 0x52, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD,
	0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xBC, 0xE3, 0x83,
	// Bytes 2c00 - 2c3f
	0x88, 0xE3, 0x83, 0xAB, 0x52, 0xE3, 0x82, 0xAF,
	0xE3, 0x82, 0x99, 0xE3, 0x83, 0xA9, 0xE3, 0x83,
	0xA0, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xB3, 0x52,
	0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0xE3, 0x82,
	0xBB, 0xE3, 0x82, 0x99, 0xE3, 0x82, 0xA4, 0xE3,
	0x83, 0xAD, 0x52, 0xE3, 0x83, 0x8F, 0xE3, 0x82,
	0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xBB, 0xE3,
	0x83, 0xB3, 0xE3, 0x83, 0x88, 0x52, 0xE3, 0x83,
	// Bytes 2c40 - 2c7f
	0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xA2, 0xE3,
	0x82, 0xB9, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB,
	0x52, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, 0xE3,
	0x83, 0x83, 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0xA7,
	0xE3, 0x83, 0xAB, 0x52, 0xE3, 0x83, 0x9F, 0xE3,
	0x83, 0xAA, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99,
	0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0x52, 0xE3,
	0x83, 0xAC, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88,
	// Bytes 2c80 - 2cbf
	0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, 0xE3, 0x83,
	0xB3, 0x61, 0xD8, 0xB5, 0xD9, 0x84, 0xD9, 0x89,
	0x20, 0xD8, 0xA7, 0xD9, 0x84, 0xD9, 0x84, 0xD9,
	0x87, 0x20, 0xD8, 0xB9, 0xD9, 0x84, 0xD9, 0x8A,
	0xD9, 0x87, 0x20, 0xD9, 0x88, 0xD8, 0xB3, 0xD9,
	0x84, 0xD9, 0x85, 0x06, 0xE0, 0xA7, 0x87, 0xE0,
	0xA6, 0xBE, 0x01, 0x06, 0xE0, 0xA7, 0x87, 0xE0,
	0xA7, 0x97, 0x01, 0x06, 0xE0, 0xAD, 0x87, 0xE0,
	// Bytes 2cc0 - 2cff
	0xAC, 0xBE, 0x01, 0x06, 0xE0, 0xAD, 0x87, 0xE0,
	0xAD, 0x96, 0x01, 0x06, 0xE0, 0xAD, 0x87, 0xE0,
	0xAD, 0x97, 0x01, 0x06, 0xE0, 0xAE, 0x92, 0xE0,
	0xAF, 0x97, 0x01, 0x06, 0xE0, 0xAF, 0x86, 0xE0,
	0xAE, 0xBE, 0x01, 0x06, 0xE0, 0xAF, 0x86, 0xE0,
	0xAF, 0x97, 0x01, 0x06, 0xE0, 0xAF, 0x87, 0xE0,
	0xAE, 0xBE, 0x01, 0x06, 0xE0, 0xB2, 0xBF, 0xE0,
	0xB3, 0x95, 0x01, 0x06, 0xE0, 0xB3, 0x86, 0xE0,
	// Bytes 2d00 - 2d3f
	0xB3, 0x95, 0x01, 0x06, 0xE0, 0xB3, 0x86, 0xE0,
	0xB3, 0x96, 0x01, 0x06, 0xE0, 0xB5, 0x86, 0xE0,
	0xB4, 0xBE, 0x01, 0x06, 0xE0, 0xB5, 0x86, 0xE0,
	0xB5, 0x97, 0x01, 0x06, 0xE0, 0xB5, 0x87, 0xE0,
	0xB4, 0xBE, 0x01, 0x06, 0xE0, 0xB7, 0x99, 0xE0,
	0xB7, 0x9F, 0x01, 0x06, 0xE1, 0x80, 0xA5, 0xE1,
	0x80, 0xAE, 0x01, 0x06, 0xE1, 0xAC, 0x85, 0xE1,
	0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, 0x87, 0xE1,
	// Bytes 2d40 - 2d7f
	0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, 0x89, 0xE1,
	0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, 0x8B, 0xE1,
	0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, 0x8D, 0xE1,
	0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, 0x91, 0xE1,
	0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, 0xBA, 0xE1,
	0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, 0xBC, 0xE1,
	0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, 0xBE, 0xE1,
	0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, 0xBF, 0xE1,
	// Bytes 2d80 - 2dbf
	0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAD, 0x82, 0xE1,
	0xAC, 0xB5, 0x01, 0x08, 0xF0, 0x91, 0x84, 0xB1,
	0xF0, 0x91, 0x84, 0xA7, 0x01, 0x08, 0xF0, 0x91,
	0x84, 0xB2, 0xF0, 0x91, 0x84, 0xA7, 0x01, 0x08,
	0xF0, 0x91, 0x8D, 0x87, 0xF0, 0x91, 0x8C, 0xBE,
	0x01, 0x08, 0xF0, 0x91, 0x8D, 0x87, 0xF0, 0x91,
	0x8D, 0x97, 0x01, 0x08, 0xF0, 0x91, 0x92, 0xB9,
	0xF0, 0x91, 0x92, 0xB0, 0x01, 0x08, 0xF0, 0x91,
	// Bytes 2dc0 - 2dff
	0x92, 0xB9, 0xF0, 0x91, 0x92, 0xBA, 0x01, 0x08,
	0xF0, 0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xBD,
	0x01, 0x08, 0xF0, 0x91, 0x96, 0xB8, 0xF0, 0x91,
	0x96, 0xAF, 0x01, 0x08, 0xF0, 0x91, 0x96, 0xB9,
	0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, 0xF0, 0x91,
	0xA4, 0xB5, 0xF0, 0x91, 0xA4, 0xB0, 0x01, 0x09,
	0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0xE0, 0xB3,
	0x95, 0x02, 0x09, 0xE0, 0xB7, 0x99, 0xE0, 0xB7,
	// Bytes 2e00 - 2e3f
	0x8F, 0xE0, 0xB7, 0x8A, 0x16, 0x44, 0x44, 0x5A,
	0xCC, 0x8C, 0xCD, 0x44, 0x44, 0x7A, 0xCC, 0x8C,
	0xCD, 0x44, 0x64, 0x7A, 0xCC, 0x8C, 0xCD, 0x46,
	0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x93, 0xCD, 0x46,
	0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x94, 0xCD, 0x46,
	0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x95, 0xB9, 0x46,
	0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x01, 0x46,
	0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x01, 0x46,
	// Bytes 2e40 - 2e7f
	0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, 0x01, 0x46,
	0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, 0x01, 0x46,
	0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, 0x01, 0x46,
	0xE1, 0x84, 0x87, 0xE1, 0x85, 0xA1, 0x01, 0x46,
	0xE1, 0x84, 0x89, 0xE1, 0x85, 0xA1, 0x01, 0x46,
	0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xA1, 0x01, 0x46,
	0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xAE, 0x01, 0x46,
	0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x01, 0x46,
	// Bytes 2e80 - 2ebf
	0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0x01, 0x46,
	0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, 0x01, 0x46,
	0xE1, 0x84, 0x90, 0xE1, 0x85, 0xA1, 0x01, 0x46,
	0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1, 0x01, 0x46,
	0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, 0x01, 0x49,
	0xE3, 0x83, 0xA1, 0xE3, 0x82, 0xAB, 0xE3, 0x82,
	0x99, 0x11, 0x4C, 0xE1, 0x84, 0x8C, 0xE1, 0x85,
	0xAE, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xB4, 0x01,
	// Bytes 2ec0 - 2eff
	0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3,
	0x82, 0xAB, 0xE3, 0x82, 0x99, 0x11, 0x4C, 0xE3,
	0x82, 0xB3, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x9B,
	0xE3, 0x82, 0x9A, 0x11, 0x4C, 0xE3, 0x83, 0xA4,
	0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3, 0x82,
	0x99, 0x11, 0x4F, 0xE1, 0x84, 0x8E, 0xE1, 0x85,
	0xA1, 0xE1, 0x86, 0xB7, 0xE1, 0x84, 0x80, 0xE1,
	0x85, 0xA9, 0x01, 0x4F, 0xE3, 0x82, 0xA4, 0xE3,
	// Bytes 2f00 - 2f3f
	0x83, 0x8B, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xAF,
	0xE3, 0x82, 0x99, 0x11, 0x4F, 0xE3, 0x82, 0xB7,
	0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x82,
	0xAF, 0xE3, 0x82, 0x99, 0x11, 0x4F, 0xE3, 0x83,
	0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3,
	0x82, 0xB7, 0xE3, 0x82, 0x99, 0x11, 0x4F, 0xE3,
	0x83, 0x9B, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xB3,
	0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x11, 0x52,
	// Bytes 2f40 - 2f7f
	0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xB9, 0xE3, 0x82,
	0xAF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3,
	0x82, 0x99, 0x11, 0x52, 0xE3, 0x83, 0x95, 0xE3,
	0x82, 0xA1, 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0x83,
	0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x11, 0x86,
	0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0x01, 0x86,
	0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8F, 0x01, 0x03,
	0x3C, 0xCC, 0xB8, 0x05, 0x03, 0x3D, 0xCC, 0xB8,
	// Bytes 2f80 - 2fbf
	0x05, 0x03, 0x3E, 0xCC, 0xB8, 0x05, 0x03, 0x41,
	0xCC, 0x80, 0xCD, 0x03, 0x41, 0xCC, 0x81, 0xCD,
	0x03, 0x41, 0xCC, 0x83, 0xCD, 0x03, 0x41, 0xCC,
	0x84, 0xCD, 0x03, 0x41, 0xCC, 0x89, 0xCD, 0x03,
	0x41, 0xCC, 0x8C, 0xCD, 0x03, 0x41, 0xCC, 0x8F,
	0xCD, 0x03, 0x41, 0xCC, 0x91, 0xCD, 0x03, 0x41,
	0xCC, 0xA5, 0xB9, 0x03, 0x41, 0xCC, 0xA8, 0xA9,
	0x03, 0x42, 0xCC, 0x87, 0xCD, 0x03, 0x42, 0xCC,
	// Bytes 2fc0 - 2fff
	0xA3, 0xB9, 0x03, 0x42, 0xCC, 0xB1, 0xB9, 0x03,
	0x43, 0xCC, 0x81, 0xCD, 0x03, 0x43, 0xCC, 0x82,
	0xCD, 0x03, 0x43, 0xCC, 0x87, 0xCD, 0x03, 0x43,
	0xCC, 0x8C, 0xCD, 0x03, 0x44, 0xCC, 0x87, 0xCD,
	0x03, 0x44, 0xCC, 0x8C, 0xCD, 0x03, 0x44, 0xCC,
	0xA3, 0xB9, 0x03, 0x44, 0xCC, 0xA7, 0xA9, 0x03,
	0x44, 0xCC, 0xAD, 0xB9, 0x03, 0x44, 0xCC, 0xB1,
	0xB9, 0x03, 0x45, 0xCC, 0x80, 0xCD, 0x03, 0x45,
	// Bytes 3000 - 303f
	0xCC, 0x81, 0xCD, 0x03, 0x45, 0xCC, 0x83, 0xCD,
	0x03, 0x45, 0xCC, 0x86, 0xCD, 0x03, 0x45, 0xCC,
	0x87, 0xCD, 0x03, 0x45, 0xCC, 0x88, 0xCD, 0x03,
	0x45, 0xCC, 0x89, 0xCD, 0x03, 0x45, 0xCC, 0x8C,
	0xCD, 0x03, 0x45, 0xCC, 0x8F, 0xCD, 0x03, 0x45,
	0xCC, 0x91, 0xCD, 0x03, 0x45, 0xCC, 0xA8, 0xA9,
	0x03, 0x45, 0xCC, 0xAD, 0xB9, 0x03, 0x45, 0xCC,
	0xB0, 0xB9, 0x03, 0x46, 0xCC, 0x87, 0xCD, 0x03,
	// Bytes 3040 - 307f
	0x47, 0xCC, 0x81, 0xCD, 0x03, 0x47, 0xCC, 0x82,
	0xCD, 0x03, 0x47, 0xCC, 0x84, 0xCD, 0x03, 0x47,
	0xCC, 0x86, 0xCD, 0x03, 0x47, 0xCC, 0x87, 0xCD,
	0x03, 0x47, 0xCC, 0x8C, 0xCD, 0x03, 0x47, 0xCC,
	0xA7, 0xA9, 0x03, 0x48, 0xCC, 0x82, 0xCD, 0x03,
	0x48, 0xCC, 0x87, 0xCD, 0x03, 0x48, 0xCC, 0x88,
	0xCD, 0x03, 0x48, 0xCC, 0x8C, 0xCD, 0x03, 0x48,
	0xCC, 0xA3, 0xB9, 0x03, 0x48, 0xCC, 0xA7, 0xA9,
	// Bytes 3080 - 30bf
	0x03, 0x48, 0xCC, 0xAE, 0xB9, 0x03, 0x49, 0xCC,
	0x80, 0xCD, 0x03, 0x49, 0xCC, 0x81, 0xCD, 0x03,
	0x49, 0xCC, 0x82, 0xCD, 0x03, 0x49, 0xCC, 0x83,
	0xCD, 0x03, 0x49, 0xCC, 0x84, 0xCD, 0x03, 0x49,
	0xCC, 0x86, 0xCD, 0x03, 0x49, 0xCC, 0x87, 0xCD,
	0x03, 0x49, 0xCC, 0x89, 0xCD, 0x03, 0x49, 0xCC,
	0x8C, 0xCD, 0x03, 0x49, 0xCC, 0x8F, 0xCD, 0x03,
	0x49, 0xCC, 0x91, 0xCD, 0x03, 0x49, 0xCC, 0xA3,
	// Bytes 30c0 - 30ff
	0xB9, 0x03, 0x49, 0xCC, 0xA8, 0xA9, 0x03, 0x49,
	0xCC, 0xB0, 0xB9, 0x03, 0x4A, 0xCC, 0x82, 0xCD,
	0x03, 0x4B, 0xCC, 0x81, 0xCD, 0x03, 0x4B, 0xCC,
	0x8C, 0xCD, 0x03, 0x4B, 0xCC, 0xA3, 0xB9, 0x03,
	0x4B, 0xCC, 0xA7, 0xA9, 0x03, 0x4B, 0xCC, 0xB1,
	0xB9, 0x03, 0x4C, 0xCC, 0x81, 0xCD, 0x03, 0x4C,
	0xCC, 0x8C, 0xCD, 0x03, 0x4C, 0xCC, 0xA7, 0xA9,
	0x03, 0x4C, 0xCC, 0xAD, 0xB9, 0x03, 0x4C, 0xCC,
	// Bytes 3100 - 313f
	0xB1, 0xB9, 0x03, 0x4D, 0xCC, 0x81, 0xCD, 0x03,
	0x4D, 0xCC, 0x87, 0xCD, 0x03, 0x4D, 0xCC, 0xA3,
	0xB9, 0x03, 0x4E, 0xCC, 0x80, 0xCD, 0x03, 0x4E,
	0xCC, 0x81, 0xCD, 0x03, 0x4E, 0xCC, 0x83, 0xCD,
	0x03, 0x4E, 0xCC, 0x87, 0xCD, 0x03, 0x4E, 0xCC,
	0x8C, 0xCD, 0x03, 0x4E, 0xCC, 0xA3, 0xB9, 0x03,
	0x4E, 0xCC, 0xA7, 0xA9, 0x03, 0x4E, 0xCC, 0xAD,
	0xB9, 0x03, 0x4E, 0xCC, 0xB1, 0xB9, 0x03, 0x4F,
	// Bytes 3140 - 317f
	0xCC, 0x80, 0xCD, 0x03, 0x4F, 0xCC, 0x81, 0xCD,
	0x03, 0x4F, 0xCC, 0x86, 0xCD, 0x03, 0x4F, 0xCC,
	0x89, 0xCD, 0x03, 0x4F, 0xCC, 0x8B, 0xCD, 0x03,
	0x4F, 0xCC, 0x8C, 0xCD, 0x03, 0x4F, 0xCC, 0x8F,
	0xCD, 0x03, 0x4F, 0xCC, 0x91, 0xCD, 0x03, 0x50,
	0xCC, 0x81, 0xCD, 0x03, 0x50, 0xCC, 0x87, 0xCD,
	0x03, 0x52, 0xCC, 0x81, 0xCD, 0x03, 0x52, 0xCC,
	0x87, 0xCD, 0x03, 0x52, 0xCC, 0x8C, 0xCD, 0x03,
	// Bytes 3180 - 31bf
	0x52, 0xCC, 0x8F, 0xCD, 0x03, 0x52, 0xCC, 0x91,
	0xCD, 0x03, 0x52, 0xCC, 0xA7, 0xA9, 0x03, 0x52,
	0xCC, 0xB1, 0xB9, 0x03, 0x53, 0xCC, 0x82, 0xCD,
	0x03, 0x53, 0xCC, 0x87, 0xCD, 0x03, 0x53, 0xCC,
	0xA6, 0xB9, 0x03, 0x53, 0xCC, 0xA7, 0xA9, 0x03,
	0x54, 0xCC, 0x87, 0xCD, 0x03, 0x54, 0xCC, 0x8C,
	0xCD, 0x03, 0x54, 0xCC, 0xA3, 0xB9, 0x03, 0x54,
	0xCC, 0xA6, 0xB9, 0x03, 0x54, 0xCC, 0xA7, 0xA9,
	// Bytes 31c0 - 31ff
	0x03, 0x54, 0xCC, 0xAD, 0xB9, 0x03, 0x54, 0xCC,
	0xB1, 0xB9, 0x03, 0x55, 0xCC, 0x80, 0xCD, 0x03,
	0x55, 0xCC, 0x81, 0xCD, 0x03, 0x55, 0xCC, 0x82,
	0xCD, 0x03, 0x55, 0xCC, 0x86, 0xCD, 0x03, 0x55,
	0xCC, 0x89, 0xCD, 0x03, 0x55, 0xCC, 0x8A, 0xCD,
	0x03, 0x55, 0xCC, 0x8B, 0xCD, 0x03, 0x55, 0xCC,
	0x8C, 0xCD, 0x03, 0x55, 0xCC, 0x8F, 0xCD, 0x03,
	0x55, 0xCC, 0x91, 0xCD, 0x03, 0x55, 0xCC, 0xA3,
	// Bytes 3200 - 323f
	0xB9, 0x03, 0x55, 0xCC, 0xA4, 0xB9, 0x03, 0x55,
	0xCC, 0xA8, 0xA9, 0x03, 0x55, 0xCC, 0xAD, 0xB9,
	0x03, 0x55, 0xCC, 0xB0, 0xB9, 0x03, 0x56, 0xCC,
	0x83, 0xCD, 0x03, 0x56, 0xCC, 0xA3, 0xB9, 0x03,
	0x57, 0xCC, 0x80, 0xCD, 0x03, 0x57, 0xCC, 0x81,
	0xCD, 0x03, 0x57, 0xCC, 0x82, 0xCD, 0x03, 0x57,
	0xCC, 0x87, 0xCD, 0x03, 0x57, 0xCC, 0x88, 0xCD,
	0x03, 0x57, 0xCC, 0xA3, 0xB9, 0x03, 0x58, 0xCC,
	// Bytes 3240 - 327f
	0x87, 0xCD, 0x03, 0x58, 0xCC, 0x88, 0xCD, 0x03,
	0x59, 0xCC, 0x80, 0xCD, 0x03, 0x59, 0xCC, 0x81,
	0xCD, 0x03, 0x59, 0xCC, 0x82, 0xCD, 0x03, 0x59,
	0xCC, 0x83, 0xCD, 0x03, 0x59, 0xCC, 0x84, 0xCD,
	0x03, 0x59, 0xCC, 0x87, 0xCD, 0x03, 0x59, 0xCC,
	0x88, 0xCD, 0x03, 0x59, 0xCC, 0x89, 0xCD, 0x03,
	0x59, 0xCC, 0xA3, 0xB9, 0x03, 0x5A, 0xCC, 0x81,
	0xCD, 0x03, 0x5A, 0xCC, 0x82, 0xCD, 0x03, 0x5A,
	// Bytes 3280 - 32bf
	0xCC, 0x87, 0xCD, 0x03, 0x5A, 0xCC, 0x8C, 0xCD,
	0x03, 0x5A, 0xCC, 0xA3, 0xB9, 0x03, 0x5A, 0xCC,
	0xB1, 0xB9, 0x03, 0x61, 0xCC, 0x80, 0xCD, 0x03,
	0x61, 0xCC, 0x81, 0xCD, 0x03, 0x61, 0xCC, 0x83,
	0xCD, 0x03, 0x61, 0xCC, 0x84, 0xCD, 0x03, 0x61,
	0xCC, 0x89, 0xCD, 0x03, 0x61, 0xCC, 0x8C, 0xCD,
	0x03, 0x61, 0xCC, 0x8F, 0xCD, 0x03, 0x61, 0xCC,
	0x91, 0xCD, 0x03, 0x61, 0xCC, 0xA5, 0xB9, 0x03,
	// Bytes 32c0 - 32ff
	0x61, 0xCC, 0xA8, 0xA9, 0x03, 0x62, 0xCC, 0x87,
	0xCD, 0x03, 0x62, 0xCC, 0xA3, 0xB9, 0x03, 0x62,
	0xCC, 0xB1, 0xB9, 0x03, 0x63, 0xCC, 0x81, 0xCD,
	0x03, 0x63, 0xCC, 0x82, 0xCD, 0x03, 0x63, 0xCC,
	0x87, 0xCD, 0x03, 0x63, 0xCC, 0x8C, 0xCD, 0x03,
	0x64, 0xCC, 0x87, 0xCD, 0x03, 0x64, 0xCC, 0x8C,
	0xCD, 0x03, 0x64, 0xCC, 0xA3, 0xB9, 0x03, 0x64,
	0xCC, 0xA7, 0xA9, 0x03, 0x64, 0xCC, 0xAD, 0xB9,
	// Bytes 3300 - 333f
	0x03, 0x64, 0xCC, 0xB1, 0xB9, 0x03, 0x65, 0xCC,
	0x80, 0xCD, 0x03, 0x65, 0xCC, 0x81, 0xCD, 0x03,
	0x65, 0xCC, 0x83, 0xCD, 0x03, 0x65, 0xCC, 0x86,
	0xCD, 0x03, 0x65, 0xCC, 0x87, 0xCD, 0x03, 0x65,
	0xCC, 0x88, 0xCD, 0x03, 0x65, 0xCC, 0x89, 0xCD,
	0x03, 0x65, 0xCC, 0x8C, 0xCD, 0x03, 0x65, 0xCC,
	0x8F, 0xCD, 0x03, 0x65, 0xCC, 0x91, 0xCD, 0x03,
	0x65, 0xCC, 0xA8, 0xA9, 0x03, 0x65, 0xCC, 0xAD,
	// Bytes 3340 - 337f
	0xB9, 0x03, 0x65, 0xCC, 0xB0, 0xB9, 0x03, 0x66,
	0xCC, 0x87, 0xCD, 0x03, 0x67, 0xCC, 0x81, 0xCD,
	0x03, 0x67, 0xCC, 0x82, 0xCD, 0x03, 0x67, 0xCC,
	0x84, 0xCD, 0x03, 0x67, 0xCC, 0x86, 0xCD, 0x03,
	0x67, 0xCC, 0x87, 0xCD, 0x03, 0x67, 0xCC, 0x8C,
	0xCD, 0x03, 0x67, 0xCC, 0xA7, 0xA9, 0x03, 0x68,
	0xCC, 0x82, 0xCD, 0x03, 0x68, 0xCC, 0x87, 0xCD,
	0x03, 0x68, 0xCC, 0x88, 0xCD, 0x03, 0x68, 0xCC,
	// Bytes 3380 - 33bf
	0x8C, 0xCD, 0x03, 0x68, 0xCC, 0xA3, 0xB9, 0x03,
	0x68, 0xCC, 0xA7, 0xA9, 0x03, 0x68, 0xCC, 0xAE,
	0xB9, 0x03, 0x68, 0xCC, 0xB1, 0xB9, 0x03, 0x69,
	0xCC, 0x80, 0xCD, 0x03, 0x69, 0xCC, 0x81, 0xCD,
	0x03, 0x69, 0xCC, 0x82, 0xCD, 0x03, 0x69, 0xCC,
	0x83, 0xCD, 0x03, 0x69, 0xCC, 0x84, 0xCD, 0x03,
	0x69, 0xCC, 0x86, 0xCD, 0x03, 0x69, 0xCC, 0x89,
	0xCD, 0x03, 0x69, 0xCC, 0x8C, 0xCD, 0x03, 0x69,
	// Bytes 33c0 - 33ff
	0xCC, 0x8F, 0xCD, 0x03, 0x69, 0xCC, 0x91, 0xCD,
	0x03, 0x69, 0xCC, 0xA3, 0xB9, 0x03, 0x69, 0xCC,
	0xA8, 0xA9, 0x03, 0x69, 0xCC, 0xB0, 0xB9, 0x03,
	0x6A, 0xCC, 0x82, 0xCD, 0x03, 0x6A, 0xCC, 0x8C,
	0xCD, 0x03, 0x6B, 0xCC, 0x81, 0xCD, 0x03, 0x6B,
	0xCC, 0x8C, 0xCD, 0x03, 0x6B, 0xCC, 0xA3, 0xB9,
	0x03, 0x6B, 0xCC, 0xA7, 0xA9, 0x03, 0x6B, 0xCC,
	0xB1, 0xB9, 0x03, 0x6C, 0xCC, 0x81, 0xCD, 0x03,
	// Bytes 3400 - 343f
	0x6C, 0xCC, 0x8C, 0xCD, 0x03, 0x6C, 0xCC, 0xA7,
	0xA9, 0x03, 0x6C, 0xCC, 0xAD, 0xB9, 0x03, 0x6C,
	0xCC, 0xB1, 0xB9, 0x03, 0x6D, 0xCC, 0x81, 0xCD,
	0x03, 0x6D, 0xCC, 0x87, 0xCD, 0x03, 0x6D, 0xCC,
	0xA3, 0xB9, 0x03, 0x6E, 0xCC, 0x80, 0xCD, 0x03,
	0x6E, 0xCC, 0x81, 0xCD, 0x03, 0x6E, 0xCC, 0x83,
	0xCD, 0x03, 0x6E, 0xCC, 0x87, 0xCD, 0x03, 0x6E,
	0xCC, 0x8C, 0xCD, 0x03, 0x6E, 0xCC, 0xA3, 0xB9,
	// Bytes 3440 - 347f
	0x03, 0x6E, 0xCC, 0xA7, 0xA9, 0x03, 0x6E, 0xCC,
	0xAD, 0xB9, 0x03, 0x6E, 0xCC, 0xB1, 0xB9, 0x03,
	0x6F, 0xCC, 0x80, 0xCD, 0x03, 0x6F, 0xCC, 0x81,
	0xCD, 0x03, 0x6F, 0xCC, 0x86, 0xCD, 0x03, 0x6F,
	0xCC, 0x89, 0xCD, 0x03, 0x6F, 0xCC, 0x8B, 0xCD,
	0x03, 0x6F, 0xCC, 0x8C, 0xCD, 0x03, 0x6F, 0xCC,
	0x8F, 0xCD, 0x03, 0x6F, 0xCC, 0x91, 0xCD, 0x03,
	0x70, 0xCC, 0x81, 0xCD, 0x03, 0x70, 0xCC, 0x87,
	// Bytes 3480 - 34bf
	0xCD, 0x03, 0x72, 0xCC, 0x81, 0xCD, 0x03, 0x72,
	0xCC, 0x87, 0xCD, 0x03, 0x72, 0xCC, 0x8C, 0xCD,
	0x03, 0x72, 0xCC, 0x8F, 0xCD, 0x03, 0x72, 0xCC,
	0x91, 0xCD, 0x03, 0x72, 0xCC, 0xA7, 0xA9, 0x03,
	0x72, 0xCC, 0xB1, 0xB9, 0x03, 0x73, 0xCC, 0x82,
	0xCD, 0x03, 0x73, 0xCC, 0x87, 0xCD, 0x03, 0x73,
	0xCC, 0xA6, 0xB9, 0x03, 0x73, 0xCC, 0xA7, 0xA9,
	0x03, 0x74, 0xCC, 0x87, 0xCD, 0x03, 0x74, 0xCC,
	// Bytes 34c0 - 34ff
	0x88, 0xCD, 0x03, 0x74, 0xCC, 0x8C, 0xCD, 0x03,
	0x74, 0xCC, 0xA3, 0xB9, 0x03, 0x74, 0xCC, 0xA6,
	0xB9, 0x03, 0x74, 0xCC, 0xA7, 0xA9, 0x03, 0x74,
	0xCC, 0xAD, 0xB9, 0x03, 0x74, 0xCC, 0xB1, 0xB9,
	0x03, 0x75, 0xCC, 0x80, 0xCD, 0x03, 0x75, 0xCC,
	0x81, 0xCD, 0x03, 0x75, 0xCC, 0x82, 0xCD, 0x03,
	0x75, 0xCC, 0x86, 0xCD, 0x03, 0x75, 0xCC, 0x89,
	0xCD, 0x03, 0x75, 0xCC, 0x8A, 0xCD, 0x03, 0x75,
	// Bytes 3500 - 353f
	0xCC, 0x8B, 0xCD, 0x03, 0x75, 0xCC, 0x8C, 0xCD,
	0x03, 0x75, 0xCC, 0x8F, 0xCD, 0x03, 0x75, 0xCC,
	0x91, 0xCD, 0x03, 0x75, 0xCC, 0xA3, 0xB9, 0x03,
	0x75, 0xCC, 0xA4, 0xB9, 0x03, 0x75, 0xCC, 0xA8,
	0xA9, 0x03, 0x75, 0xCC, 0xAD, 0xB9, 0x03, 0x75,
	0xCC, 0xB0, 0xB9, 0x03, 0x76, 0xCC, 0x83, 0xCD,
	0x03, 0x76, 0xCC, 0xA3, 0xB9, 0x03, 0x77, 0xCC,
	0x80, 0xCD, 0x03, 0x77, 0xCC, 0x81, 0xCD, 0x03,
	// Bytes 3540 - 357f
	0x77, 0xCC, 0x82, 0xCD, 0x03, 0x77, 0xCC, 0x87,
	0xCD, 0x03, 0x77, 0xCC, 0x88, 0xCD, 0x03, 0x77,
	0xCC, 0x8A, 0xCD, 0x03, 0x77, 0xCC, 0xA3, 0xB9,
	0x03, 0x78, 0xCC, 0x87, 0xCD, 0x03, 0x78, 0xCC,
	0x88, 0xCD, 0x03, 0x79, 0xCC, 0x80, 0xCD, 0x03,
	0x79, 0xCC, 0x81, 0xCD, 0x03, 0x79, 0xCC, 0x82,
	0xCD, 0x03, 0x79, 0xCC, 0x83, 0xCD, 0x03, 0x79,
	0xCC, 0x84, 0xCD, 0x03, 0x79, 0xCC, 0x87, 0xCD,
	// Bytes 3580 - 35bf
	0x03, 0x79, 0xCC, 0x88, 0xCD, 0x03, 0x79, 0xCC,
	0x89, 0xCD, 0x03, 0x79, 0xCC, 0x8A, 0xCD, 0x03,
	0x79, 0xCC, 0xA3, 0xB9, 0x03, 0x7A, 0xCC, 0x81,
	0xCD, 0x03, 0x7A, 0xCC, 0x82, 0xCD, 0x03, 0x7A,
	0xCC, 0x87, 0xCD, 0x03, 0x7A, 0xCC, 0x8C, 0xCD,
	0x03, 0x7A, 0xCC, 0xA3, 0xB9, 0x03, 0x7A, 0xCC,
	0xB1, 0xB9, 0x04, 0xC2, 0xA8, 0xCC, 0x80, 0xCE,
	0x04, 0xC2, 0xA8, 0xCC, 0x81, 0xCE, 0x04, 0xC2,
	// Bytes 35c0 - 35ff
	0xA8, 0xCD, 0x82, 0xCE, 0x04, 0xC3, 0x86, 0xCC,
	0x81, 0xCD, 0x04, 0xC3, 0x86, 0xCC, 0x84, 0xCD,
	0x04, 0xC3, 0x98, 0xCC, 0x81, 0xCD, 0x04, 0xC3,
	0xA6, 0xCC, 0x81, 0xCD, 0x04, 0xC3, 0xA6, 0xCC,
	0x84, 0xCD, 0x04, 0xC3, 0xB8, 0xCC, 0x81, 0xCD,
	0x04, 0xC5, 0xBF, 0xCC, 0x87, 0xCD, 0x04, 0xC6,
	0xB7, 0xCC, 0x8C, 0xCD, 0x04, 0xCA, 0x92, 0xCC,
	0x8C, 0xCD, 0x04, 0xCE, 0x91, 0xCC, 0x80, 0xCD,
	// Bytes 3600 - 363f
	0x04, 0xCE, 0x91, 0xCC, 0x81, 0xCD, 0x04, 0xCE,
	0x91, 0xCC, 0x84, 0xCD, 0x04, 0xCE, 0x91, 0xCC,
	0x86, 0xCD, 0x04, 0xCE, 0x91, 0xCD, 0x85, 0xDD,
	0x04, 0xCE, 0x95, 0xCC, 0x80, 0xCD, 0x04, 0xCE,
	0x95, 0xCC, 0x81, 0xCD, 0x04, 0xCE, 0x97, 0xCC,
	0x80, 0xCD, 0x04, 0xCE, 0x97, 0xCC, 0x81, 0xCD,
	0x04, 0xCE, 0x97, 0xCD, 0x85, 0xDD, 0x04, 0xCE,
	0x99, 0xCC, 0x80, 0xCD, 0x04, 0xCE, 0x99, 0xCC,
	// Bytes 3640 - 367f
	0x81, 0xCD, 0x04, 0xCE, 0x99, 0xCC, 0x84, 0xCD,
	0x04, 0xCE, 0x99, 0xCC, 0x86, 0xCD, 0x04, 0xCE,
	0x99, 0xCC, 0x88, 0xCD, 0x04, 0xCE, 0x9F, 0xCC,
	0x80, 0xCD, 0x04, 0xCE, 0x9F, 0xCC, 0x81, 0xCD,
	0x04, 0xCE, 0xA1, 0xCC, 0x94, 0xCD, 0x04, 0xCE,
	0xA5, 0xCC, 0x80, 0xCD, 0x04, 0xCE, 0xA5, 0xCC,
	0x81, 0xCD, 0x04, 0xCE, 0xA5, 0xCC, 0x84, 0xCD,
	0x04, 0xCE, 0xA5, 0xCC, 0x86, 0xCD, 0x04, 0xCE,
	// Bytes 3680 - 36bf
	0xA5, 0xCC, 0x88, 0xCD, 0x04, 0xCE, 0xA9, 0xCC,
	0x80, 0xCD, 0x04, 0xCE, 0xA9, 0xCC, 0x81, 0xCD,
	0x04, 0xCE, 0xA9, 0xCD, 0x85, 0xDD, 0x04, 0xCE,
	0xB1, 0xCC, 0x84, 0xCD, 0x04, 0xCE, 0xB1, 0xCC,
	0x86, 0xCD, 0x04, 0xCE, 0xB1, 0xCD, 0x85, 0xDD,
	0x04, 0xCE, 0xB5, 0xCC, 0x80, 0xCD, 0x04, 0xCE,
	0xB5, 0xCC, 0x81, 0xCD, 0x04, 0xCE, 0xB7, 0xCD,
	0x85, 0xDD, 0x04, 0xCE, 0xB9, 0xCC, 0x80, 0xCD,
	// Bytes 36c0 - 36ff
	0x04, 0xCE, 0xB9, 0xCC, 0x81, 0xCD, 0x04, 0xCE,
	0xB9, 0xCC, 0x84, 0xCD, 0x04, 0xCE, 0xB9, 0xCC,
	0x86, 0xCD, 0x04, 0xCE, 0xB9, 0xCD, 0x82, 0xCD,
	0x04, 0xCE, 0xBF, 0xCC, 0x80, 0xCD, 0x04, 0xCE,
	0xBF, 0xCC, 0x81, 0xCD, 0x04, 0xCF, 0x81, 0xCC,
	0x93, 0xCD, 0x04, 0xCF, 0x81, 0xCC, 0x94, 0xCD,
	0x04, 0xCF, 0x85, 0xCC, 0x80, 0xCD, 0x04, 0xCF,
	0x85, 0xCC, 0x81, 0xCD, 0x04, 0xCF, 0x85, 0xCC,
	// Bytes 3700 - 373f
	0x84, 0xCD, 0x04, 0xCF, 0x85, 0xCC, 0x86, 0xCD,
	0x04, 0xCF, 0x85, 0xCD, 0x82, 0xCD, 0x04, 0xCF,
	0x89, 0xCD, 0x85, 0xDD, 0x04, 0xCF, 0x92, 0xCC,
	0x81, 0xCD, 0x04, 0xCF, 0x92, 0xCC, 0x88, 0xCD,
	0x04, 0xD0, 0x86, 0xCC, 0x88, 0xCD, 0x04, 0xD0,
	0x90, 0xCC, 0x86, 0xCD, 0x04, 0xD0, 0x90, 0xCC,
	0x88, 0xCD, 0x04, 0xD0, 0x93, 0xCC, 0x81, 0xCD,
	0x04, 0xD0, 0x95, 0xCC, 0x80, 0xCD, 0x04, 0xD0,
	// Bytes 3740 - 377f
	0x95, 0xCC, 0x86, 0xCD, 0x04, 0xD0, 0x95, 0xCC,
	0x88, 0xCD, 0x04, 0xD0, 0x96, 0xCC, 0x86, 0xCD,
	0x04, 0xD0, 0x96, 0xCC, 0x88, 0xCD, 0x04, 0xD0,
	0x97, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0x98, 0xCC,
	0x80, 0xCD, 0x04, 0xD0, 0x98, 0xCC, 0x84, 0xCD,
	0x04, 0xD0, 0x98, 0xCC, 0x86, 0xCD, 0x04, 0xD0,
	0x98, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0x9A, 0xCC,
	0x81, 0xCD, 0x04, 0xD0, 0x9E, 0xCC, 0x88, 0xCD,
	// Bytes 3780 - 37bf
	0x04, 0xD0, 0xA3, 0xCC, 0x84, 0xCD, 0x04, 0xD0,
	0xA3, 0xCC, 0x86, 0xCD, 0x04, 0xD0, 0xA3, 0xCC,
	0x88, 0xCD, 0x04, 0xD0, 0xA3, 0xCC, 0x8B, 0xCD,
	0x04, 0xD0, 0xA7, 0xCC, 0x88, 0xCD, 0x04, 0xD0,
	0xAB, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0xAD, 0xCC,
	0x88, 0xCD, 0x04, 0xD0, 0xB0, 0xCC, 0x86, 0xCD,
	0x04, 0xD0, 0xB0, 0xCC, 0x88, 0xCD, 0x04, 0xD0,
	0xB3, 0xCC, 0x81, 0xCD, 0x04, 0xD0, 0xB5, 0xCC,
	// Bytes 37c0 - 37ff
	0x80, 0xCD, 0x04, 0xD0, 0xB5, 0xCC, 0x86, 0xCD,
	0x04, 0xD0, 0xB5, 0xCC, 0x88, 0xCD, 0x04, 0xD0,
	0xB6, 0xCC, 0x86, 0xCD, 0x04, 0xD0, 0xB6, 0xCC,
	0x88, 0xCD, 0x04, 0xD0, 0xB7, 0xCC, 0x88, 0xCD,
	0x04, 0xD0, 0xB8, 0xCC, 0x80, 0xCD, 0x04, 0xD0,
	0xB8, 0xCC, 0x84, 0xCD, 0x04, 0xD0, 0xB8, 0xCC,
	0x86, 0xCD, 0x04, 0xD0, 0xB8, 0xCC, 0x88, 0xCD,
	0x04, 0xD0, 0xBA, 0xCC, 0x81, 0xCD, 0x04, 0xD0,
	// Bytes 3800 - 383f
	0xBE, 0xCC, 0x88, 0xCD, 0x04, 0xD1, 0x83, 0xCC,
	0x84, 0xCD, 0x04, 0xD1, 0x83, 0xCC, 0x86, 0xCD,
	0x04, 0xD1, 0x83, 0xCC, 0x88, 0xCD, 0x04, 0xD1,
	0x83, 0xCC, 0x8B, 0xCD, 0x04, 0xD1, 0x87, 0xCC,
	0x88, 0xCD, 0x04, 0xD1, 0x8B, 0xCC, 0x88, 0xCD,
	0x04, 0xD1, 0x8D, 0xCC, 0x88, 0xCD, 0x04, 0xD1,
	0x96, 0xCC, 0x88, 0xCD, 0x04, 0xD1, 0xB4, 0xCC,
	0x8F, 0xCD, 0x04, 0xD1, 0xB5, 0xCC, 0x8F, 0xCD,
	// Bytes 3840 - 387f
	0x04, 0xD3, 0x98, 0xCC, 0x88, 0xCD, 0x04, 0xD3,
	0x99, 0xCC, 0x88, 0xCD, 0x04, 0xD3, 0xA8, 0xCC,
	0x88, 0xCD, 0x04, 0xD3, 0xA9, 0xCC, 0x88, 0xCD,
	0x04, 0xD8, 0xA7, 0xD9, 0x93, 0xCD, 0x04, 0xD8,
	0xA7, 0xD9, 0x94, 0xCD, 0x04, 0xD8, 0xA7, 0xD9,
	0x95, 0xB9, 0x04, 0xD9, 0x88, 0xD9, 0x94, 0xCD,
	0x04, 0xD9, 0x8A, 0xD9, 0x94, 0xCD, 0x04, 0xDB,
	0x81, 0xD9, 0x94, 0xCD, 0x04, 0xDB, 0x92, 0xD9,
	// Bytes 3880 - 38bf
	0x94, 0xCD, 0x04, 0xDB, 0x95, 0xD9, 0x94, 0xCD,
	0x05, 0x41, 0xCC, 0x82, 0xCC, 0x80, 0xCE, 0x05,
	0x41, 0xCC, 0x82, 0xCC, 0x81, 0xCE, 0x05, 0x41,
	0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, 0x41, 0xCC,
	0x82, 0xCC, 0x89, 0xCE, 0x05, 0x41, 0xCC, 0x86,
	0xCC, 0x80, 0xCE, 0x05, 0x41, 0xCC, 0x86, 0xCC,
	0x81, 0xCE, 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x83,
	0xCE, 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x89, 0xCE,
	// Bytes 38c0 - 38ff
	0x05, 0x41, 0xCC, 0x87, 0xCC, 0x84, 0xCE, 0x05,
	0x41, 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, 0x41,
	0xCC, 0x8A, 0xCC, 0x81, 0xCE, 0x05, 0x41, 0xCC,
	0xA3, 0xCC, 0x82, 0xCE, 0x05, 0x41, 0xCC, 0xA3,
	0xCC, 0x86, 0xCE, 0x05, 0x43, 0xCC, 0xA7, 0xCC,
	0x81, 0xCE, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x80,
	0xCE, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x81, 0xCE,
	0x05, 0x45, 0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05,
	// Bytes 3900 - 393f
	0x45, 0xCC, 0x82, 0xCC, 0x89, 0xCE, 0x05, 0x45,
	0xCC, 0x84, 0xCC, 0x80, 0xCE, 0x05, 0x45, 0xCC,
	0x84, 0xCC, 0x81, 0xCE, 0x05, 0x45, 0xCC, 0xA3,
	0xCC, 0x82, 0xCE, 0x05, 0x45, 0xCC, 0xA7, 0xCC,
	0x86, 0xCE, 0x05, 0x49, 0xCC, 0x88, 0xCC, 0x81,
	0xCE, 0x05, 0x4C, 0xCC, 0xA3, 0xCC, 0x84, 0xCE,
	0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x80, 0xCE, 0x05,
	0x4F, 0xCC, 0x82, 0xCC, 0x81, 0xCE, 0x05, 0x4F,
	// Bytes 3940 - 397f
	0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, 0x4F, 0xCC,
	0x82, 0xCC, 0x89, 0xCE, 0x05, 0x4F, 0xCC, 0x83,
	0xCC, 0x81, 0xCE, 0x05, 0x4F, 0xCC, 0x83, 0xCC,
	0x84, 0xCE, 0x05, 0x4F, 0xCC, 0x83, 0xCC, 0x88,
	0xCE, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x80, 0xCE,
	0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x81, 0xCE, 0x05,
	0x4F, 0xCC, 0x87, 0xCC, 0x84, 0xCE, 0x05, 0x4F,
	0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, 0x4F, 0xCC,
	// Bytes 3980 - 39bf
	0x9B, 0xCC, 0x80, 0xCE, 0x05, 0x4F, 0xCC, 0x9B,
	0xCC, 0x81, 0xCE, 0x05, 0x4F, 0xCC, 0x9B, 0xCC,
	0x83, 0xCE, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0x89,
	0xCE, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0xA3, 0xBA,
	0x05, 0x4F, 0xCC, 0xA3, 0xCC, 0x82, 0xCE, 0x05,
	0x4F, 0xCC, 0xA8, 0xCC, 0x84, 0xCE, 0x05, 0x52,
	0xCC, 0xA3, 0xCC, 0x84, 0xCE, 0x05, 0x53, 0xCC,
	0x81, 0xCC, 0x87, 0xCE, 0x05, 0x53, 0xCC, 0x8C,
	// Bytes 39c0 - 39ff
	0xCC, 0x87, 0xCE, 0x05, 0x53, 0xCC, 0xA3, 0xCC,
	0x87, 0xCE, 0x05, 0x55, 0xCC, 0x83, 0xCC, 0x81,
	0xCE, 0x05, 0x55, 0xCC, 0x84, 0xCC, 0x88, 0xCE,
	0x05, 0x55, 0xCC, 0x88, 0xCC, 0x80, 0xCE, 0x05,
	0x55, 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x05, 0x55,
	0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, 0x55, 0xCC,
	0x88, 0xCC, 0x8C, 0xCE, 0x05, 0x55, 0xCC, 0x9B,
	0xCC, 0x80, 0xCE, 0x05, 0x55, 0xCC, 0x9B, 0xCC,
	// Bytes 3a00 - 3a3f
	0x81, 0xCE, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x83,
	0xCE, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x89, 0xCE,
	0x05, 0x55, 0xCC, 0x9B, 0xCC, 0xA3, 0xBA, 0x05,
	0x61, 0xCC, 0x82, 0xCC, 0x80, 0xCE, 0x05, 0x61,
	0xCC, 0x82, 0xCC, 0x81, 0xCE, 0x05, 0x61, 0xCC,
	0x82, 0xCC, 0x83, 0xCE, 0x05, 0x61, 0xCC, 0x82,
	0xCC, 0x89, 0xCE, 0x05, 0x61, 0xCC, 0x86, 0xCC,
	0x80, 0xCE, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x81,
	// Bytes 3a40 - 3a7f
	0xCE, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x83, 0xCE,
	0x05, 0x61, 0xCC, 0x86, 0xCC, 0x89, 0xCE, 0x05,
	0x61, 0xCC, 0x87, 0xCC, 0x84, 0xCE, 0x05, 0x61,
	0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, 0x61, 0xCC,
	0x8A, 0xCC, 0x81, 0xCE, 0x05, 0x61, 0xCC, 0xA3,
	0xCC, 0x82, 0xCE, 0x05, 0x61, 0xCC, 0xA3, 0xCC,
	0x86, 0xCE, 0x05, 0x63, 0xCC, 0xA7, 0xCC, 0x81,
	0xCE, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x80, 0xCE,
	// Bytes 3a80 - 3abf
	0x05, 0x65, 0xCC, 0x82, 0xCC, 0x81, 0xCE, 0x05,
	0x65, 0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, 0x65,
	0xCC, 0x82, 0xCC, 0x89, 0xCE, 0x05, 0x65, 0xCC,
	0x84, 0xCC, 0x80, 0xCE, 0x05, 0x65, 0xCC, 0x84,
	0xCC, 0x81, 0xCE, 0x05, 0x65, 0xCC, 0xA3, 0xCC,
	0x82, 0xCE, 0x05, 0x65, 0xCC, 0xA7, 0xCC, 0x86,
	0xCE, 0x05, 0x69, 0xCC, 0x88, 0xCC, 0x81, 0xCE,
	0x05, 0x6C, 0xCC, 0xA3, 0xCC, 0x84, 0xCE, 0x05,
	// Bytes 3ac0 - 3aff
	0x6F, 0xCC, 0x82, 0xCC, 0x80, 0xCE, 0x05, 0x6F,
	0xCC, 0x82, 0xCC, 0x81, 0xCE, 0x05, 0x6F, 0xCC,
	0x82, 0xCC, 0x83, 0xCE, 0x05, 0x6F, 0xCC, 0x82,
	0xCC, 0x89, 0xCE, 0x05, 0x6F, 0xCC, 0x83, 0xCC,
	0x81, 0xCE, 0x05, 0x6F, 0xCC, 0x83, 0xCC, 0x84,
	0xCE, 0x05, 0x6F, 0xCC, 0x83, 0xCC, 0x88, 0xCE,
	0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x80, 0xCE, 0x05,
	0x6F, 0xCC, 0x84, 0xCC, 0x81, 0xCE, 0x05, 0x6F,
	// Bytes 3b00 - 3b3f
	0xCC, 0x87, 0xCC, 0x84, 0xCE, 0x05, 0x6F, 0xCC,
	0x88, 0xCC, 0x84, 0xCE, 0x05, 0x6F, 0xCC, 0x9B,
	0xCC, 0x80, 0xCE, 0x05, 0x6F, 0xCC, 0x9B, 0xCC,
	0x81, 0xCE, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x83,
	0xCE, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x89, 0xCE,
	0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0xA3, 0xBA, 0x05,
	0x6F, 0xCC, 0xA3, 0xCC, 0x82, 0xCE, 0x05, 0x6F,
	0xCC, 0xA8, 0xCC, 0x84, 0xCE, 0x05, 0x72, 0xCC,
	// Bytes 3b40 - 3b7f
	0xA3, 0xCC, 0x84, 0xCE, 0x05, 0x73, 0xCC, 0x81,
	0xCC, 0x87, 0xCE, 0x05, 0x73, 0xCC, 0x8C, 0xCC,
	0x87, 0xCE, 0x05, 0x73, 0xCC, 0xA3, 0xCC, 0x87,
	0xCE, 0x05, 0x75, 0xCC, 0x83, 0xCC, 0x81, 0xCE,
	0x05, 0x75, 0xCC, 0x84, 0xCC, 0x88, 0xCE, 0x05,
	0x75, 0xCC, 0x88, 0xCC, 0x80, 0xCE, 0x05, 0x75,
	0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x05, 0x75, 0xCC,
	0x88, 0xCC, 0x84, 0xCE, 0x05, 0x75, 0xCC, 0x88,
	// Bytes 3b80 - 3bbf
	0xCC, 0x8C, 0xCE, 0x05, 0x75, 0xCC, 0x9B, 0xCC,
	0x80, 0xCE, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x81,
	0xCE, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x83, 0xCE,
	0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x89, 0xCE, 0x05,
	0x75, 0xCC, 0x9B, 0xCC, 0xA3, 0xBA, 0x05, 0xE1,
	0xBE, 0xBF, 0xCC, 0x80, 0xCE, 0x05, 0xE1, 0xBE,
	0xBF, 0xCC, 0x81, 0xCE, 0x05, 0xE1, 0xBE, 0xBF,
	0xCD, 0x82, 0xCE, 0x05, 0xE1, 0xBF, 0xBE, 0xCC,
	// Bytes 3bc0 - 3bff
	0x80, 0xCE, 0x05, 0xE1, 0xBF, 0xBE, 0xCC, 0x81,
	0xCE, 0x05, 0xE1, 0xBF, 0xBE, 0xCD, 0x82, 0xCE,
	0x05, 0xE2, 0x86, 0x90, 0xCC, 0xB8, 0x05, 0x05,
	0xE2, 0x86, 0x92, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
	0x86, 0x94, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87,
	0x90, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, 0x92,
	0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, 0x94, 0xCC,
	0xB8, 0x05, 0x05, 0xE2, 0x88, 0x83, 0xCC, 0xB8,
	// Bytes 3c00 - 3c3f
	0x05, 0x05, 0xE2, 0x88, 0x88, 0xCC, 0xB8, 0x05,
	0x05, 0xE2, 0x88, 0x8B, 0xCC, 0xB8, 0x05, 0x05,
	0xE2, 0x88, 0xA3, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
	0x88, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88,
	0xBC, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x83,
	0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x85, 0xCC,
	0xB8, 0x05, 0x05, 0xE2, 0x89, 0x88, 0xCC, 0xB8,
	0x05, 0x05, 0xE2, 0x89, 0x8D, 0xCC, 0xB8, 0x05,
	// Bytes 3c40 - 3c7f
	0x05, 0xE2, 0x89, 0xA1, 0xCC, 0xB8, 0x05, 0x05,
	0xE2, 0x89, 0xA4, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
	0x89, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89,
	0xB2, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB3,
	0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB6, 0xCC,
	0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB7, 0xCC, 0xB8,
	0x05, 0x05, 0xE2, 0x89, 0xBA, 0xCC, 0xB8, 0x05,
	0x05, 0xE2, 0x89, 0xBB, 0xCC, 0xB8, 0x05, 0x05,
	// Bytes 3c80 - 3cbf
	0xE2, 0x89, 0xBC, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
	0x89, 0xBD, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A,
	0x82, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x83,
	0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x86, 0xCC,
	0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x87, 0xCC, 0xB8,
	0x05, 0x05, 0xE2, 0x8A, 0x91, 0xCC, 0xB8, 0x05,
	0x05, 0xE2, 0x8A, 0x92, 0xCC, 0xB8, 0x05, 0x05,
	0xE2, 0x8A, 0xA2, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
	// Bytes 3cc0 - 3cff
	0x8A, 0xA8, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A,
	0xA9, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xAB,
	0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB2, 0xCC,
	0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB3, 0xCC, 0xB8,
	0x05, 0x05, 0xE2, 0x8A, 0xB4, 0xCC, 0xB8, 0x05,
	0x05, 0xE2, 0x8A, 0xB5, 0xCC, 0xB8, 0x05, 0x06,
	0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x85, 0xDE, 0x06,
	0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x85, 0xDE, 0x06,
	// Bytes 3d00 - 3d3f
	0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x06,
	0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x06,
	0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06,
	0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06,
	0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x85, 0xDE, 0x06,
	0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x85, 0xDE, 0x06,
	0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x06,
	0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x06,
	// Bytes 3d40 - 3d7f
	0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x06,
	0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06,
	0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06,
	0xCE, 0x99, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x06,
	0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x06,
	0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x06,
	0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06,
	0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06,
	// Bytes 3d80 - 3dbf
	0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06,
	0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06,
	0xCE, 0xA5, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x06,
	0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x85, 0xDE, 0x06,
	0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x85, 0xDE, 0x06,
	0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x85, 0xDE, 0x06,
	0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x85, 0xDE, 0x06,
	0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x85, 0xDE, 0x06,
	// Bytes 3dc0 - 3dff
	0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x85, 0xDE, 0x06,
	0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x85, 0xDE, 0x06,
	0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x06,
	0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x06,
	0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06,
	0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06,
	0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x85, 0xDE, 0x06,
	0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x85, 0xDE, 0x06,
	// Bytes 3e00 - 3e3f
	0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x85, 0xDE, 0x06,
	0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x85, 0xDE, 0x06,
	0xCE, 0xB7, 0xCD, 0x82, 0xCD, 0x85, 0xDE, 0x06,
	0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x80, 0xCE, 0x06,
	0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x06,
	0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x82, 0xCE, 0x06,
	0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x06,
	0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x06,
	// Bytes 3e40 - 3e7f
	0xCE, 0xB9, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x06,
	0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06,
	0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06,
	0xCE, 0xB9, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x06,
	0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x06,
	0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x06,
	0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06,
	0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06,
	// Bytes 3e80 - 3ebf
	0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x80, 0xCE, 0x06,
	0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x06,
	0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x82, 0xCE, 0x06,
	0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x06,
	0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x06,
	0xCF, 0x85, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x06,
	0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06,
	0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06,
	// Bytes 3ec0 - 3eff
	0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x06,
	0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x85, 0xDE, 0x06,
	0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x85, 0xDE, 0x06,
	0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x85, 0xDE, 0x06,
	0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x85, 0xDE, 0x06,
	0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x85, 0xDE, 0x06,
	0xE0, 0xA4, 0xA8, 0xE0, 0xA4, 0xBC, 0x0D, 0x06,
	0xE0, 0xA4, 0xB0, 0xE0, 0xA4, 0xBC, 0x0D, 0x06,
	// Bytes 3f00 - 3f3f
	0xE0, 0xA4, 0xB3, 0xE0, 0xA4, 0xBC, 0x0D, 0x06,
	0xE0, 0xB1, 0x86, 0xE0, 0xB1, 0x96, 0x89, 0x06,
	0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8A, 0x15, 0x06,
	0xE3, 0x81, 0x86, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x81, 0x8B, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x81, 0x8D, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x81, 0x8F, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x81, 0x91, 0xE3, 0x82, 0x99, 0x11, 0x06,
	// Bytes 3f40 - 3f7f
	0xE3, 0x81, 0x93, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x81, 0x95, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x81, 0x97, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x81, 0x99, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x81, 0x9B, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x81, 0x9D, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x81, 0x9F, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x81, 0xA1, 0xE3, 0x82, 0x99, 0x11, 0x06,
	// Bytes 3f80 - 3fbf
	0xE3, 0x81, 0xA4, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x81, 0xA6, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x81, 0xA8, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x9A, 0x11, 0x06,
	0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x9A, 0x11, 0x06,
	0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x99, 0x11, 0x06,
	// Bytes 3fc0 - 3fff
	0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x9A, 0x11, 0x06,
	0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x9A, 0x11, 0x06,
	0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x9A, 0x11, 0x06,
	0xE3, 0x82, 0x9D, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x82, 0xA6, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x11, 0x06,
	// Bytes 4000 - 403f
	0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x82, 0xB3, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x82, 0xB5, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x82, 0xB9, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0x11, 0x06,
	// Bytes 4040 - 407f
	0xE3, 0x82, 0xBD, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x83, 0x81, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x83, 0x84, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0x11, 0x06,
	// Bytes 4080 - 40bf
	0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0x11, 0x06,
	0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x83, 0x95, 0xE3, 0x82, 0x9A, 0x11, 0x06,
	0xE3, 0x83, 0x98, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0x11, 0x06,
	0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0x11, 0x06,
	// Bytes 40c0 - 40ff
	0xE3, 0x83, 0xAF, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x83, 0xB0, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x83, 0xB1, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x83, 0xB2, 0xE3, 0x82, 0x99, 0x11, 0x06,
	0xE3, 0x83, 0xBD, 0xE3, 0x82, 0x99, 0x11, 0x08,
	0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85,
	0xDF, 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x81,
	0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x91, 0xCC, 0x93,
	// Bytes 4100 - 413f
	0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x91,
	0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08,
	0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85,
	0xDF, 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x82,
	0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x97, 0xCC, 0x93,
	0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x97,
	0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08,
	0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85,
	// Bytes 4140 - 417f
	0xDF, 0x08, 0xCE, 0x97, 0xCC, 0x94, 0xCC, 0x80,
	0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x97, 0xCC, 0x94,
	0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x97,
	0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08,
	0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85,
	0xDF, 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x81,
	0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xA9, 0xCC, 0x93,
	0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xA9,
	// Bytes 4180 - 41bf
	0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08,
	0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85,
	0xDF, 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x82,
	0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB1, 0xCC, 0x93,
	0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB1,
	0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08,
	0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85,
	0xDF, 0x08, 0xCE, 0xB1, 0xCC, 0x94, 0xCC, 0x80,
	// Bytes 41c0 - 41ff
	0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB1, 0xCC, 0x94,
	0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB1,
	0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08,
	0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85,
	0xDF, 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x81,
	0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB7, 0xCC, 0x93,
	0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB7,
	0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08,
	// Bytes 4200 - 423f
	0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85,
	0xDF, 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x82,
	0xCD, 0x85, 0xDF, 0x08, 0xCF, 0x89, 0xCC, 0x93,
	0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, 0xCF, 0x89,
	0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08,
	0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85,
	0xDF, 0x08, 0xCF, 0x89, 0xCC, 0x94, 0xCC, 0x80,
	0xCD, 0x85, 0xDF, 0x08, 0xCF, 0x89, 0xCC, 0x94,
	// Bytes 4240 - 427f
	0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, 0xCF, 0x89,
	0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08,
	0xF0, 0x91, 0x82, 0x99, 0xF0, 0x91, 0x82, 0xBA,
	0x0D, 0x08, 0xF0, 0x91, 0x82, 0x9B, 0xF0, 0x91,
	0x82, 0xBA, 0x0D, 0x08, 0xF0, 0x91, 0x82, 0xA5,
	0xF0, 0x91, 0x82, 0xBA, 0x0D, 0x42, 0xC2, 0xB4,
	0x01, 0x43, 0x20, 0xCC, 0x81, 0xCD, 0x43, 0x20,
	0xCC, 0x83, 0xCD, 0x43, 0x20, 0xCC, 0x84, 0xCD,
	// Bytes 4280 - 42bf
	0x43, 0x20, 0xCC, 0x85, 0xCD, 0x43, 0x20, 0xCC,
	0x86, 0xCD, 0x43, 0x20, 0xCC, 0x87, 0xCD, 0x43,
	0x20, 0xCC, 0x88, 0xCD, 0x43, 0x20, 0xCC, 0x8A,
	0xCD, 0x43, 0x20, 0xCC, 0x8B, 0xCD, 0x43, 0x20,
	0xCC, 0x93, 0xCD, 0x43, 0x20, 0xCC, 0x94, 0xCD,
	0x43, 0x20, 0xCC, 0xA7, 0xA9, 0x43, 0x20, 0xCC,
	0xA8, 0xA9, 0x43, 0x20, 0xCC, 0xB3, 0xB9, 0x43,
	0x20, 0xCD, 0x82, 0xCD, 0x43, 0x20, 0xCD, 0x85,
	// Bytes 42c0 - 42ff
	0xDD, 0x43, 0x20, 0xD9, 0x8B, 0x5D, 0x43, 0x20,
	0xD9, 0x8C, 0x61, 0x43, 0x20, 0xD9, 0x8D, 0x65,
	0x43, 0x20, 0xD9, 0x8E, 0x69, 0x43, 0x20, 0xD9,
	0x8F, 0x6D, 0x43, 0x20, 0xD9, 0x90, 0x71, 0x43,
	0x20, 0xD9, 0x91, 0x75, 0x43, 0x20, 0xD9, 0x92,
	0x79, 0x43, 0x41, 0xCC, 0x8A, 0xCD, 0x43, 0x73,
	0xCC, 0x87, 0xCD, 0x44, 0x20, 0xE3, 0x82, 0x99,
	0x11, 0x44, 0x20, 0xE3, 0x82, 0x9A, 0x11, 0x44,
	// Bytes 4300 - 433f
	0xC2, 0xA8, 0xCC, 0x81, 0xCE, 0x44, 0xCE, 0x91,
	0xCC, 0x81, 0xCD, 0x44, 0xCE, 0x95, 0xCC, 0x81,
	0xCD, 0x44, 0xCE, 0x97, 0xCC, 0x81, 0xCD, 0x44,
	0xCE, 0x99, 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0x9F,
	0xCC, 0x81, 0xCD, 0x44, 0xCE, 0xA5, 0xCC, 0x81,
	0xCD, 0x44, 0xCE, 0xA5, 0xCC, 0x88, 0xCD, 0x44,
	0xCE, 0xA9, 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0xB1,
	0xCC, 0x81, 0xCD, 0x44, 0xCE, 0xB5, 0xCC, 0x81,
	// Bytes 4340 - 437f
	0xCD, 0x44, 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x44,
	0xCE, 0xB9, 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0xBF,
	0xCC, 0x81, 0xCD, 0x44, 0xCF, 0x85, 0xCC, 0x81,
	0xCD, 0x44, 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x44,
	0xD7, 0x90, 0xD6, 0xB7, 0x35, 0x44, 0xD7, 0x90,
	0xD6, 0xB8, 0x39, 0x44, 0xD7, 0x90, 0xD6, 0xBC,
	0x45, 0x44, 0xD7, 0x91, 0xD6, 0xBC, 0x45, 0x44,
	0xD7, 0x91, 0xD6, 0xBF, 0x4D, 0x44, 0xD7, 0x92,
	// Bytes 4380 - 43bf
	0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x93, 0xD6, 0xBC,
	0x45, 0x44, 0xD7, 0x94, 0xD6, 0xBC, 0x45, 0x44,
	0xD7, 0x95, 0xD6, 0xB9, 0x3D, 0x44, 0xD7, 0x95,
	0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x96, 0xD6, 0xBC,
	0x45, 0x44, 0xD7, 0x98, 0xD6, 0xBC, 0x45, 0x44,
	0xD7, 0x99, 0xD6, 0xB4, 0x29, 0x44, 0xD7, 0x99,
	0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x9A, 0xD6, 0xBC,
	0x45, 0x44, 0xD7, 0x9B, 0xD6, 0xBC, 0x45, 0x44,
	// Bytes 43c0 - 43ff
	0xD7, 0x9B, 0xD6, 0xBF, 0x4D, 0x44, 0xD7, 0x9C,
	0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x9E, 0xD6, 0xBC,
	0x45, 0x44, 0xD7, 0xA0, 0xD6, 0xBC, 0x45, 0x44,
	0xD7, 0xA1, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA3,
	0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA4, 0xD6, 0xBC,
	0x45, 0x44, 0xD7, 0xA4, 0xD6, 0xBF, 0x4D, 0x44,
	0xD7, 0xA6, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA7,
	0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA8, 0xD6, 0xBC,
	// Bytes 4400 - 443f
	0x45, 0x44, 0xD7, 0xA9, 0xD6, 0xBC, 0x45, 0x44,
	0xD7, 0xA9, 0xD7, 0x81, 0x51, 0x44, 0xD7, 0xA9,
	0xD7, 0x82, 0x55, 0x44, 0xD7, 0xAA, 0xD6, 0xBC,
	0x45, 0x44, 0xD7, 0xB2, 0xD6, 0xB7, 0x35, 0x44,
	0xD8, 0xA7, 0xD9, 0x8B, 0x5D, 0x44, 0xD8, 0xA7,
	0xD9, 0x93, 0xCD, 0x44, 0xD8, 0xA7, 0xD9, 0x94,
	0xCD, 0x44, 0xD8, 0xA7, 0xD9, 0x95, 0xB9, 0x44,
	0xD8, 0xB0, 0xD9, 0xB0, 0x7D, 0x44, 0xD8, 0xB1,
	// Bytes 4440 - 447f
	0xD9, 0xB0, 0x7D, 0x44, 0xD9, 0x80, 0xD9, 0x8B,
	0x5D, 0x44, 0xD9, 0x80, 0xD9, 0x8E, 0x69, 0x44,
	0xD9, 0x80, 0xD9, 0x8F, 0x6D, 0x44, 0xD9, 0x80,
	0xD9, 0x90, 0x71, 0x44, 0xD9, 0x80, 0xD9, 0x91,
	0x75, 0x44, 0xD9, 0x80, 0xD9, 0x92, 0x79, 0x44,
	0xD9, 0x87, 0xD9, 0xB0, 0x7D, 0x44, 0xD9, 0x88,
	0xD9, 0x94, 0xCD, 0x44, 0xD9, 0x89, 0xD9, 0xB0,
	0x7D, 0x44, 0xD9, 0x8A, 0xD9, 0x94, 0xCD, 0x44,
	// Bytes 4480 - 44bf
	0xDB, 0x92, 0xD9, 0x94, 0xCD, 0x44, 0xDB, 0x95,
	0xD9, 0x94, 0xCD, 0x45, 0x20, 0xCC, 0x88, 0xCC,
	0x80, 0xCE, 0x45, 0x20, 0xCC, 0x88, 0xCC, 0x81,
	0xCE, 0x45, 0x20, 0xCC, 0x88, 0xCD, 0x82, 0xCE,
	0x45, 0x20, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x45,
	0x20, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x45, 0x20,
	0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x45, 0x20, 0xCC,
	0x94, 0xCC, 0x80, 0xCE, 0x45, 0x20, 0xCC, 0x94,
	// Bytes 44c0 - 44ff
	0xCC, 0x81, 0xCE, 0x45, 0x20, 0xCC, 0x94, 0xCD,
	0x82, 0xCE, 0x45, 0x20, 0xD9, 0x8C, 0xD9, 0x91,
	0x76, 0x45, 0x20, 0xD9, 0x8D, 0xD9, 0x91, 0x76,
	0x45, 0x20, 0xD9, 0x8E, 0xD9, 0x91, 0x76, 0x45,
	0x20, 0xD9, 0x8F, 0xD9, 0x91, 0x76, 0x45, 0x20,
	0xD9, 0x90, 0xD9, 0x91, 0x76, 0x45, 0x20, 0xD9,
	0x91, 0xD9, 0xB0, 0x7E, 0x45, 0xE2, 0xAB, 0x9D,
	0xCC, 0xB8, 0x05, 0x46, 0xCE, 0xB9, 0xCC, 0x88,
	// Bytes 4500 - 453f
	0xCC, 0x81, 0xCE, 0x46, 0xCF, 0x85, 0xCC, 0x88,
	0xCC, 0x81, 0xCE, 0x46, 0xD7, 0xA9, 0xD6, 0xBC,
	0xD7, 0x81, 0x52, 0x46, 0xD7, 0xA9, 0xD6, 0xBC,
	0xD7, 0x82, 0x56, 0x46, 0xD9, 0x80, 0xD9, 0x8E,
	0xD9, 0x91, 0x76, 0x46, 0xD9, 0x80, 0xD9, 0x8F,
	0xD9, 0x91, 0x76, 0x46, 0xD9, 0x80, 0xD9, 0x90,
	0xD9, 0x91, 0x76, 0x46, 0xE0, 0xA4, 0x95, 0xE0,
	0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, 0x96, 0xE0,
	// Bytes 4540 - 457f
	0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, 0x97, 0xE0,
	0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, 0x9C, 0xE0,
	0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, 0xA1, 0xE0,
	0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, 0xA2, 0xE0,
	0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, 0xAB, 0xE0,
	0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, 0xAF, 0xE0,
	0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA6, 0xA1, 0xE0,
	0xA6, 0xBC, 0x0D, 0x46, 0xE0, 0xA6, 0xA2, 0xE0,
	// Bytes 4580 - 45bf
	0xA6, 0xBC, 0x0D, 0x46, 0xE0, 0xA6, 0xAF, 0xE0,
	0xA6, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, 0x96, 0xE0,
	0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, 0x97, 0xE0,
	0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, 0x9C, 0xE0,
	0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, 0xAB, 0xE0,
	0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, 0xB2, 0xE0,
	0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, 0xB8, 0xE0,
	0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xAC, 0xA1, 0xE0,
	// Bytes 45c0 - 45ff
	0xAC, 0xBC, 0x0D, 0x46, 0xE0, 0xAC, 0xA2, 0xE0,
	0xAC, 0xBC, 0x0D, 0x46, 0xE0, 0xBE, 0xB2, 0xE0,
	0xBE, 0x80, 0xA1, 0x46, 0xE0, 0xBE, 0xB3, 0xE0,
	0xBE, 0x80, 0xA1, 0x46, 0xE3, 0x83, 0x86, 0xE3,
	0x82, 0x99, 0x11, 0x48, 0xF0, 0x9D, 0x85, 0x97,
	0xF0, 0x9D, 0x85, 0xA5, 0xB1, 0x48, 0xF0, 0x9D,
	0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xB1, 0x48,
	0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5,
	// Bytes 4600 - 463f
	0xB1, 0x48, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, 0x9D,
	0x85, 0xA5, 0xB1, 0x49, 0xE0, 0xBE, 0xB2, 0xE0,
	0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0xA2, 0x49, 0xE0,
	0xBE, 0xB3, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80,
	0xA2, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D,
	0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xB2, 0x4C,
	0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5,
	0xF0, 0x9D, 0x85, 0xAF, 0xB2, 0x4C, 0xF0, 0x9D,
	// Bytes 4640 - 467f
	0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D,
	0x85, 0xB0, 0xB2, 0x4C, 0xF0, 0x9D, 0x85, 0x98,
	0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB1,
	0xB2, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D,
	0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB2, 0xB2, 0x4C,
	0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5,
	0xF0, 0x9D, 0x85, 0xAE, 0xB2, 0x4C, 0xF0, 0x9D,
	0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D,
	// Bytes 4680 - 46bf
	0x85, 0xAF, 0xB2, 0x4C, 0xF0, 0x9D, 0x86, 0xBA,
	0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE,
	0xB2, 0x4C, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, 0x9D,
	0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xB2, 0x83,
	0x41, 0xCC, 0x82, 0xCD, 0x83, 0x41, 0xCC, 0x86,
	0xCD, 0x83, 0x41, 0xCC, 0x87, 0xCD, 0x83, 0x41,
	0xCC, 0x88, 0xCD, 0x83, 0x41, 0xCC, 0x8A, 0xCD,
	0x83, 0x41, 0xCC, 0xA3, 0xB9, 0x83, 0x43, 0xCC,
	// Bytes 46c0 - 46ff
	0xA7, 0xA9, 0x83, 0x45, 0xCC, 0x82, 0xCD, 0x83,
	0x45, 0xCC, 0x84, 0xCD, 0x83, 0x45, 0xCC, 0xA3,
	0xB9, 0x83, 0x45, 0xCC, 0xA7, 0xA9, 0x83, 0x49,
	0xCC, 0x88, 0xCD, 0x83, 0x4C, 0xCC, 0xA3, 0xB9,
	0x83, 0x4F, 0xCC, 0x82, 0xCD, 0x83, 0x4F, 0xCC,
	0x83, 0xCD, 0x83, 0x4F, 0xCC, 0x84, 0xCD, 0x83,
	0x4F, 0xCC, 0x87, 0xCD, 0x83, 0x4F, 0xCC, 0x88,
	0xCD, 0x83, 0x4F, 0xCC, 0x9B, 0xB1, 0x83, 0x4F,
	// Bytes 4700 - 473f
	0xCC, 0xA3, 0xB9, 0x83, 0x4F, 0xCC, 0xA8, 0xA9,
	0x83, 0x52, 0xCC, 0xA3, 0xB9, 0x83, 0x53, 0xCC,
	0x81, 0xCD, 0x83, 0x53, 0xCC, 0x8C, 0xCD, 0x83,
	0x53, 0xCC, 0xA3, 0xB9, 0x83, 0x55, 0xCC, 0x83,
	0xCD, 0x83, 0x55, 0xCC, 0x84, 0xCD, 0x83, 0x55,
	0xCC, 0x88, 0xCD, 0x83, 0x55, 0xCC, 0x9B, 0xB1,
	0x83, 0x61, 0xCC, 0x82, 0xCD, 0x83, 0x61, 0xCC,
	0x86, 0xCD, 0x83, 0x61, 0xCC, 0x87, 0xCD, 0x83,
	// Bytes 4740 - 477f
	0x61, 0xCC, 0x88, 0xCD, 0x83, 0x61, 0xCC, 0x8A,
	0xCD, 0x83, 0x61, 0xCC, 0xA3, 0xB9, 0x83, 0x63,
	0xCC, 0xA7, 0xA9, 0x83, 0x65, 0xCC, 0x82, 0xCD,
	0x83, 0x65, 0xCC, 0x84, 0xCD, 0x83, 0x65, 0xCC,
	0xA3, 0xB9, 0x83, 0x65, 0xCC, 0xA7, 0xA9, 0x83,
	0x69, 0xCC, 0x88, 0xCD, 0x83, 0x6C, 0xCC, 0xA3,
	0xB9, 0x83, 0x6F, 0xCC, 0x82, 0xCD, 0x83, 0x6F,
	0xCC, 0x83, 0xCD, 0x83, 0x6F, 0xCC, 0x84, 0xCD,
	// Bytes 4780 - 47bf
	0x83, 0x6F, 0xCC, 0x87, 0xCD, 0x83, 0x6F, 0xCC,
	0x88, 0xCD, 0x83, 0x6F, 0xCC, 0x9B, 0xB1, 0x83,
	0x6F, 0xCC, 0xA3, 0xB9, 0x83, 0x6F, 0xCC, 0xA8,
	0xA9, 0x83, 0x72, 0xCC, 0xA3, 0xB9, 0x83, 0x73,
	0xCC, 0x81, 0xCD, 0x83, 0x73, 0xCC, 0x8C, 0xCD,
	0x83, 0x73, 0xCC, 0xA3, 0xB9, 0x83, 0x75, 0xCC,
	0x83, 0xCD, 0x83, 0x75, 0xCC, 0x84, 0xCD, 0x83,
	0x75, 0xCC, 0x88, 0xCD, 0x83, 0x75, 0xCC, 0x9B,
	// Bytes 47c0 - 47ff
	0xB1, 0x84, 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x84,
	0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0x95,
	0xCC, 0x93, 0xCD, 0x84, 0xCE, 0x95, 0xCC, 0x94,
	0xCD, 0x84, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x84,
	0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0x99,
	0xCC, 0x93, 0xCD, 0x84, 0xCE, 0x99, 0xCC, 0x94,
	0xCD, 0x84, 0xCE, 0x9F, 0xCC, 0x93, 0xCD, 0x84,
	0xCE, 0x9F, 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0xA5,
	// Bytes 4800 - 483f
	0xCC, 0x94, 0xCD, 0x84, 0xCE, 0xA9, 0xCC, 0x93,
	0xCD, 0x84, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x84,
	0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x84, 0xCE, 0xB1,
	0xCC, 0x81, 0xCD, 0x84, 0xCE, 0xB1, 0xCC, 0x93,
	0xCD, 0x84, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x84,
	0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x84, 0xCE, 0xB5,
	0xCC, 0x93, 0xCD, 0x84, 0xCE, 0xB5, 0xCC, 0x94,
	0xCD, 0x84, 0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x84,
	// Bytes 4840 - 487f
	0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x84, 0xCE, 0xB7,
	0xCC, 0x93, 0xCD, 0x84, 0xCE, 0xB7, 0xCC, 0x94,
	0xCD, 0x84, 0xCE, 0xB7, 0xCD, 0x82, 0xCD, 0x84,
	0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x84, 0xCE, 0xB9,
	0xCC, 0x93, 0xCD, 0x84, 0xCE, 0xB9, 0xCC, 0x94,
	0xCD, 0x84, 0xCE, 0xBF, 0xCC, 0x93, 0xCD, 0x84,
	0xCE, 0xBF, 0xCC, 0x94, 0xCD, 0x84, 0xCF, 0x85,
	0xCC, 0x88, 0xCD, 0x84, 0xCF, 0x85, 0xCC, 0x93,
	// Bytes 4880 - 48bf
	0xCD, 0x84, 0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x84,
	0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x84, 0xCF, 0x89,
	0xCC, 0x81, 0xCD, 0x84, 0xCF, 0x89, 0xCC, 0x93,
	0xCD, 0x84, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x84,
	0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x86, 0xCE, 0x91,
	0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0x91,
	0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0x91,
	0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0x91,
	// Bytes 48c0 - 48ff
	0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0x91,
	0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0x91,
	0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0x97,
	0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0x97,
	0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0x97,
	0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0x97,
	0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0x97,
	0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0x97,
	// Bytes 4900 - 493f
	0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0xA9,
	0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0xA9,
	0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0xA9,
	0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0xA9,
	0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0xA9,
	0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0xA9,
	0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0xB1,
	0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0xB1,
	// Bytes 4940 - 497f
	0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0xB1,
	0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0xB1,
	0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0xB1,
	0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0xB1,
	0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0xB7,
	0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0xB7,
	0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0xB7,
	0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0xB7,
	// Bytes 4980 - 49bf
	0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0xB7,
	0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0xB7,
	0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, 0xCF, 0x89,
	0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, 0xCF, 0x89,
	0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, 0xCF, 0x89,
	0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, 0xCF, 0x89,
	0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, 0xCF, 0x89,
	0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, 0xCF, 0x89,
	// Bytes 49c0 - 49ff
	0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x42, 0xCC, 0x80,
	0xCD, 0x33, 0x42, 0xCC, 0x81, 0xCD, 0x33, 0x42,
	0xCC, 0x93, 0xCD, 0x33, 0x43, 0xE1, 0x85, 0xA1,
	0x01, 0x00, 0x43, 0xE1, 0x85, 0xA2, 0x01, 0x00,
	0x43, 0xE1, 0x85, 0xA3, 0x01, 0x00, 0x43, 0xE1,
	0x85, 0xA4, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA5,
	0x01, 0x00, 0x43, 0xE1, 0x85, 0xA6, 0x01, 0x00,
	0x43, 0xE1, 0x85, 0xA7, 0x01, 0x00, 0x43, 0xE1,
	// Bytes 4a00 - 4a3f
	0x85, 0xA8, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA9,
	0x01, 0x00, 0x43, 0xE1, 0x85, 0xAA, 0x01, 0x00,
	0x43, 0xE1, 0x85, 0xAB, 0x01, 0x00, 0x43, 0xE1,
	0x85, 0xAC, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAD,
	0x01, 0x00, 0x43, 0xE1, 0x85, 0xAE, 0x01, 0x00,
	0x43, 0xE1, 0x85, 0xAF, 0x01, 0x00, 0x43, 0xE1,
	0x85, 0xB0, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB1,
	0x01, 0x00, 0x43, 0xE1, 0x85, 0xB2, 0x01, 0x00,
	// Bytes 4a40 - 4a7f
	0x43, 0xE1, 0x85, 0xB3, 0x01, 0x00, 0x43, 0xE1,
	0x85, 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB5,
	0x01, 0x00, 0x43, 0xE1, 0x86, 0xAA, 0x01, 0x00,
	0x43, 0xE1, 0x86, 0xAC, 0x01, 0x00, 0x43, 0xE1,
	0x86, 0xAD, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB0,
	0x01, 0x00, 0x43, 0xE1, 0x86, 0xB1, 0x01, 0x00,
	0x43, 0xE1, 0x86, 0xB2, 0x01, 0x00, 0x43, 0xE1,
	0x86, 0xB3, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB4,
	// Bytes 4a80 - 4abf
	0x01, 0x00, 0x43, 0xE1, 0x86, 0xB5, 0x01, 0x00,
	0x44, 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x33, 0x43,
	0xE3, 0x82, 0x99, 0x11, 0x04, 0x43, 0xE3, 0x82,
	0x9A, 0x11, 0x04, 0x46, 0xE0, 0xBD, 0xB1, 0xE0,
	0xBD, 0xB2, 0xA2, 0x27, 0x46, 0xE0, 0xBD, 0xB1,
	0xE0, 0xBD, 0xB4, 0xA6, 0x27, 0x46, 0xE0, 0xBD,
	0xB1, 0xE0, 0xBE, 0x80, 0xA2, 0x27, 0x00, 0x01,
}

// lookup returns the trie value for the first UTF-8 encoding in s and
// the width in bytes of this encoding. The size will be 0 if s does not
// hold enough bytes to complete the encoding. len(s) must be greater than 0.
func (t *nfcTrie) lookup(s []byte) (v uint16, sz int) {
	c0 := s[0]
	switch {
	case c0 < 0x80: // is ASCII
		return nfcValues[c0], 1
	case c0 < 0xC2:
		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
	case c0 < 0xE0: // 2-byte UTF-8
		if len(s) < 2 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c1), 2
	case c0 < 0xF0: // 3-byte UTF-8
		if len(s) < 3 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c2), 3
	case c0 < 0xF8: // 4-byte UTF-8
		if len(s) < 4 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		o = uint32(i)<<6 + uint32(c2)
		i = nfcIndex[o]
		c3 := s[3]
		if c3 < 0x80 || 0xC0 <= c3 {
			return 0, 3 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c3), 4
	}
	// Illegal rune
	return 0, 1
}

// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.
// s must start with a full and valid UTF-8 encoded rune.
func (t *nfcTrie) lookupUnsafe(s []byte) uint16 {
	c0 := s[0]
	if c0 < 0x80 { // is ASCII
		return nfcValues[c0]
	}
	i := nfcIndex[c0]
	if c0 < 0xE0 { // 2-byte UTF-8
		return t.lookupValue(uint32(i), s[1])
	}
	i = nfcIndex[uint32(i)<<6+uint32(s[1])]
	if c0 < 0xF0 { // 3-byte UTF-8
		return t.lookupValue(uint32(i), s[2])
	}
	i = nfcIndex[uint32(i)<<6+uint32(s[2])]
	if c0 < 0xF8 { // 4-byte UTF-8
		return t.lookupValue(uint32(i), s[3])
	}
	return 0
}

// lookupString returns the trie value for the first UTF-8 encoding in s and
// the width in bytes of this encoding. The size will be 0 if s does not
// hold enough bytes to complete the encoding. len(s) must be greater than 0.
func (t *nfcTrie) lookupString(s string) (v uint16, sz int) {
	c0 := s[0]
	switch {
	case c0 < 0x80: // is ASCII
		return nfcValues[c0], 1
	case c0 < 0xC2:
		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
	case c0 < 0xE0: // 2-byte UTF-8
		if len(s) < 2 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c1), 2
	case c0 < 0xF0: // 3-byte UTF-8
		if len(s) < 3 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c2), 3
	case c0 < 0xF8: // 4-byte UTF-8
		if len(s) < 4 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		o = uint32(i)<<6 + uint32(c2)
		i = nfcIndex[o]
		c3 := s[3]
		if c3 < 0x80 || 0xC0 <= c3 {
			return 0, 3 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c3), 4
	}
	// Illegal rune
	return 0, 1
}

// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.
// s must start with a full and valid UTF-8 encoded rune.
func (t *nfcTrie) lookupStringUnsafe(s string) uint16 {
	c0 := s[0]
	if c0 < 0x80 { // is ASCII
		return nfcValues[c0]
	}
	i := nfcIndex[c0]
	if c0 < 0xE0 { // 2-byte UTF-8
		return t.lookupValue(uint32(i), s[1])
	}
	i = nfcIndex[uint32(i)<<6+uint32(s[1])]
	if c0 < 0xF0 { // 3-byte UTF-8
		return t.lookupValue(uint32(i), s[2])
	}
	i = nfcIndex[uint32(i)<<6+uint32(s[2])]
	if c0 < 0xF8 { // 4-byte UTF-8
		return t.lookupValue(uint32(i), s[3])
	}
	return 0
}

// nfcTrie. Total size: 10680 bytes (10.43 KiB). Checksum: a555db76d4becdd2.
type nfcTrie struct{}

func newNfcTrie(i int) *nfcTrie {
	return &nfcTrie{}
}

// lookupValue determines the type of block n and looks up the value for b.
func (t *nfcTrie) lookupValue(n uint32, b byte) uint16 {
	switch {
	case n < 46:
		return uint16(nfcValues[n<<6+uint32(b)])
	default:
		n -= 46
		return uint16(nfcSparse.lookup(n, b))
	}
}

// nfcValues: 48 blocks, 3072 entries, 6144 bytes
// The third block is the zero block.
var nfcValues = [3072]uint16{
	// Block 0x0, offset 0x0
	0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000,
	// Block 0x1, offset 0x40
	0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000,
	0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000,
	0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000,
	0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000,
	0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000,
	0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000,
	0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000,
	0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000,
	0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000,
	0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000,
	// Block 0x2, offset 0x80
	// Block 0x3, offset 0xc0
	0xc0: 0x2f86, 0xc1: 0x2f8b, 0xc2: 0x469f, 0xc3: 0x2f90, 0xc4: 0x46ae, 0xc5: 0x46b3,
	0xc6: 0xa000, 0xc7: 0x46bd, 0xc8: 0x2ff9, 0xc9: 0x2ffe, 0xca: 0x46c2, 0xcb: 0x3012,
	0xcc: 0x3085, 0xcd: 0x308a, 0xce: 0x308f, 0xcf: 0x46d6, 0xd1: 0x311b,
	0xd2: 0x313e, 0xd3: 0x3143, 0xd4: 0x46e0, 0xd5: 0x46e5, 0xd6: 0x46f4,
	0xd8: 0xa000, 0xd9: 0x31ca, 0xda: 0x31cf, 0xdb: 0x31d4, 0xdc: 0x4726, 0xdd: 0x324c,
	0xe0: 0x3292, 0xe1: 0x3297, 0xe2: 0x4730, 0xe3: 0x329c,
	0xe4: 0x473f, 0xe5: 0x4744, 0xe6: 0xa000, 0xe7: 0x474e, 0xe8: 0x3305, 0xe9: 0x330a,
	0xea: 0x4753, 0xeb: 0x331e, 0xec: 0x3396, 0xed: 0x339b, 0xee: 0x33a0, 0xef: 0x4767,
	0xf1: 0x342c, 0xf2: 0x344f, 0xf3: 0x3454, 0xf4: 0x4771, 0xf5: 0x4776,
	0xf6: 0x4785, 0xf8: 0xa000, 0xf9: 0x34e0, 0xfa: 0x34e5, 0xfb: 0x34ea,
	0xfc: 0x47b7, 0xfd: 0x3567, 0xff: 0x3580,
	// Block 0x4, offset 0x100
	0x100: 0x2f95, 0x101: 0x32a1, 0x102: 0x46a4, 0x103: 0x4735, 0x104: 0x2fb3, 0x105: 0x32bf,
	0x106: 0x2fc7, 0x107: 0x32d3, 0x108: 0x2fcc, 0x109: 0x32d8, 0x10a: 0x2fd1, 0x10b: 0x32dd,
	0x10c: 0x2fd6, 0x10d: 0x32e2, 0x10e: 0x2fe0, 0x10f: 0x32ec,
	0x112: 0x46c7, 0x113: 0x4758, 0x114: 0x3008, 0x115: 0x3314, 0x116: 0x300d, 0x117: 0x3319,
	0x118: 0x302b, 0x119: 0x3337, 0x11a: 0x301c, 0x11b: 0x3328, 0x11c: 0x3044, 0x11d: 0x3350,
	0x11e: 0x304e, 0x11f: 0x335a, 0x120: 0x3053, 0x121: 0x335f, 0x122: 0x305d, 0x123: 0x3369,
	0x124: 0x3062, 0x125: 0x336e, 0x128: 0x3094, 0x129: 0x33a5,
	0x12a: 0x3099, 0x12b: 0x33aa, 0x12c: 0x309e, 0x12d: 0x33af, 0x12e: 0x30c1, 0x12f: 0x33cd,
	0x130: 0x30a3, 0x134: 0x30cb, 0x135: 0x33d7,
	0x136: 0x30df, 0x137: 0x33f0, 0x139: 0x30e9, 0x13a: 0x33fa, 0x13b: 0x30f3,
	0x13c: 0x3404, 0x13d: 0x30ee, 0x13e: 0x33ff,
	// Block 0x5, offset 0x140
	0x143: 0x3116, 0x144: 0x3427, 0x145: 0x312f,
	0x146: 0x3440, 0x147: 0x3125, 0x148: 0x3436,
	0x14c: 0x46ea, 0x14d: 0x477b, 0x14e: 0x3148, 0x14f: 0x3459, 0x150: 0x3152, 0x151: 0x3463,
	0x154: 0x3170, 0x155: 0x3481, 0x156: 0x3189, 0x157: 0x349a,
	0x158: 0x317a, 0x159: 0x348b, 0x15a: 0x470d, 0x15b: 0x479e, 0x15c: 0x3193, 0x15d: 0x34a4,
	0x15e: 0x31a2, 0x15f: 0x34b3, 0x160: 0x4712, 0x161: 0x47a3, 0x162: 0x31bb, 0x163: 0x34d1,
	0x164: 0x31ac, 0x165: 0x34c2, 0x168: 0x471c, 0x169: 0x47ad,
	0x16a: 0x4721, 0x16b: 0x47b2, 0x16c: 0x31d9, 0x16d: 0x34ef, 0x16e: 0x31e3, 0x16f: 0x34f9,
	0x170: 0x31e8, 0x171: 0x34fe, 0x172: 0x3206, 0x173: 0x351c, 0x174: 0x3229, 0x175: 0x353f,
	0x176: 0x3251, 0x177: 0x356c, 0x178: 0x3265, 0x179: 0x3274, 0x17a: 0x3594, 0x17b: 0x327e,
	0x17c: 0x359e, 0x17d: 0x3283, 0x17e: 0x35a3, 0x17f: 0xa000,
	// Block 0x6, offset 0x180
	0x184: 0x8100, 0x185: 0x8100,
	0x186: 0x8100,
	0x18d: 0x2f9f, 0x18e: 0x32ab, 0x18f: 0x30ad, 0x190: 0x33b9, 0x191: 0x3157,
	0x192: 0x3468, 0x193: 0x31ed, 0x194: 0x3503, 0x195: 0x39e6, 0x196: 0x3b75, 0x197: 0x39df,
	0x198: 0x3b6e, 0x199: 0x39ed, 0x19a: 0x3b7c, 0x19b: 0x39d8, 0x19c: 0x3b67,
	0x19e: 0x38c7, 0x19f: 0x3a56, 0x1a0: 0x38c0, 0x1a1: 0x3a4f, 0x1a2: 0x35ca, 0x1a3: 0x35dc,
	0x1a6: 0x3058, 0x1a7: 0x3364, 0x1a8: 0x30d5, 0x1a9: 0x33e6,
	0x1aa: 0x4703, 0x1ab: 0x4794, 0x1ac: 0x39a7, 0x1ad: 0x3b36, 0x1ae: 0x35ee, 0x1af: 0x35f4,
	0x1b0: 0x33dc, 0x1b4: 0x303f, 0x1b5: 0x334b,
	0x1b8: 0x3111, 0x1b9: 0x3422, 0x1ba: 0x38ce, 0x1bb: 0x3a5d,
	0x1bc: 0x35c4, 0x1bd: 0x35d6, 0x1be: 0x35d0, 0x1bf: 0x35e2,
	// Block 0x7, offset 0x1c0
	0x1c0: 0x2fa4, 0x1c1: 0x32b0, 0x1c2: 0x2fa9, 0x1c3: 0x32b5, 0x1c4: 0x3021, 0x1c5: 0x332d,
	0x1c6: 0x3026, 0x1c7: 0x3332, 0x1c8: 0x30b2, 0x1c9: 0x33be, 0x1ca: 0x30b7, 0x1cb: 0x33c3,
	0x1cc: 0x315c, 0x1cd: 0x346d, 0x1ce: 0x3161, 0x1cf: 0x3472, 0x1d0: 0x317f, 0x1d1: 0x3490,
	0x1d2: 0x3184, 0x1d3: 0x3495, 0x1d4: 0x31f2, 0x1d5: 0x3508, 0x1d6: 0x31f7, 0x1d7: 0x350d,
	0x1d8: 0x319d, 0x1d9: 0x34ae, 0x1da: 0x31b6, 0x1db: 0x34cc,
	0x1de: 0x3071, 0x1df: 0x337d,
	0x1e6: 0x46a9, 0x1e7: 0x473a, 0x1e8: 0x46d1, 0x1e9: 0x4762,
	0x1ea: 0x3976, 0x1eb: 0x3b05, 0x1ec: 0x3953, 0x1ed: 0x3ae2, 0x1ee: 0x46ef, 0x1ef: 0x4780,
	0x1f0: 0x396f, 0x1f1: 0x3afe, 0x1f2: 0x325b, 0x1f3: 0x3576,
	// Block 0x8, offset 0x200
	0x200: 0x9933, 0x201: 0x9933, 0x202: 0x9933, 0x203: 0x9933, 0x204: 0x9933, 0x205: 0x8133,
	0x206: 0x9933, 0x207: 0x9933, 0x208: 0x9933, 0x209: 0x9933, 0x20a: 0x9933, 0x20b: 0x9933,
	0x20c: 0x9933, 0x20d: 0x8133, 0x20e: 0x8133, 0x20f: 0x9933, 0x210: 0x8133, 0x211: 0x9933,
	0x212: 0x8133, 0x213: 0x9933, 0x214: 0x9933, 0x215: 0x8134, 0x216: 0x812e, 0x217: 0x812e,
	0x218: 0x812e, 0x219: 0x812e, 0x21a: 0x8134, 0x21b: 0x992c, 0x21c: 0x812e, 0x21d: 0x812e,
	0x21e: 0x812e, 0x21f: 0x812e, 0x220: 0x812e, 0x221: 0x812a, 0x222: 0x812a, 0x223: 0x992e,
	0x224: 0x992e, 0x225: 0x992e, 0x226: 0x992e, 0x227: 0x992a, 0x228: 0x992a, 0x229: 0x812e,
	0x22a: 0x812e, 0x22b: 0x812e, 0x22c: 0x812e, 0x22d: 0x992e, 0x22e: 0x992e, 0x22f: 0x812e,
	0x230: 0x992e, 0x231: 0x992e, 0x232: 0x812e, 0x233: 0x812e, 0x234: 0x8101, 0x235: 0x8101,
	0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812e, 0x23a: 0x812e, 0x23b: 0x812e,
	0x23c: 0x812e, 0x23d: 0x8133, 0x23e: 0x8133, 0x23f: 0x8133,
	// Block 0x9, offset 0x240
	0x240: 0x49c5, 0x241: 0x49ca, 0x242: 0x9933, 0x243: 0x49cf, 0x244: 0x4a88, 0x245: 0x9937,
	0x246: 0x8133, 0x247: 0x812e, 0x248: 0x812e, 0x249: 0x812e, 0x24a: 0x8133, 0x24b: 0x8133,
	0x24c: 0x8133, 0x24d: 0x812e, 0x24e: 0x812e, 0x250: 0x8133, 0x251: 0x8133,
	0x252: 0x8133, 0x253: 0x812e, 0x254: 0x812e, 0x255: 0x812e, 0x256: 0x812e, 0x257: 0x8133,
	0x258: 0x8134, 0x259: 0x812e, 0x25a: 0x812e, 0x25b: 0x8133, 0x25c: 0x8135, 0x25d: 0x8136,
	0x25e: 0x8136, 0x25f: 0x8135, 0x260: 0x8136, 0x261: 0x8136, 0x262: 0x8135, 0x263: 0x8133,
	0x264: 0x8133, 0x265: 0x8133, 0x266: 0x8133, 0x267: 0x8133, 0x268: 0x8133, 0x269: 0x8133,
	0x26a: 0x8133, 0x26b: 0x8133, 0x26c: 0x8133, 0x26d: 0x8133, 0x26e: 0x8133, 0x26f: 0x8133,
	0x274: 0x0173,
	0x27a: 0x8100,
	0x27e: 0x0037,
	// Block 0xa, offset 0x280
	0x284: 0x8100, 0x285: 0x35b8,
	0x286: 0x3600, 0x287: 0x00ce, 0x288: 0x361e, 0x289: 0x362a, 0x28a: 0x363c,
	0x28c: 0x365a, 0x28e: 0x366c, 0x28f: 0x368a, 0x290: 0x3e1f, 0x291: 0xa000,
	0x295: 0xa000, 0x297: 0xa000,
	0x299: 0xa000,
	0x29f: 0xa000, 0x2a1: 0xa000,
	0x2a5: 0xa000, 0x2a9: 0xa000,
	0x2aa: 0x364e, 0x2ab: 0x367e, 0x2ac: 0x4815, 0x2ad: 0x36ae, 0x2ae: 0x483f, 0x2af: 0x36c0,
	0x2b0: 0x3e87, 0x2b1: 0xa000, 0x2b5: 0xa000,
	0x2b7: 0xa000, 0x2b9: 0xa000,
	0x2bf: 0xa000,
	// Block 0xb, offset 0x2c0
	0x2c0: 0x3738, 0x2c1: 0x3744, 0x2c3: 0x3732,
	0x2c6: 0xa000, 0x2c7: 0x3720,
	0x2cc: 0x3774, 0x2cd: 0x375c, 0x2ce: 0x3786, 0x2d0: 0xa000,
	0x2d3: 0xa000, 0x2d5: 0xa000, 0x2d6: 0xa000, 0x2d7: 0xa000,
	0x2d8: 0xa000, 0x2d9: 0x3768, 0x2da: 0xa000,
	0x2de: 0xa000, 0x2e3: 0xa000,
	0x2e7: 0xa000,
	0x2eb: 0xa000, 0x2ed: 0xa000,
	0x2f0: 0xa000, 0x2f3: 0xa000, 0x2f5: 0xa000,
	0x2f6: 0xa000, 0x2f7: 0xa000, 0x2f8: 0xa000, 0x2f9: 0x37ec, 0x2fa: 0xa000,
	0x2fe: 0xa000,
	// Block 0xc, offset 0x300
	0x301: 0x374a, 0x302: 0x37ce,
	0x310: 0x3726, 0x311: 0x37aa,
	0x312: 0x372c, 0x313: 0x37b0, 0x316: 0x373e, 0x317: 0x37c2,
	0x318: 0xa000, 0x319: 0xa000, 0x31a: 0x3840, 0x31b: 0x3846, 0x31c: 0x3750, 0x31d: 0x37d4,
	0x31e: 0x3756, 0x31f: 0x37da, 0x322: 0x3762, 0x323: 0x37e6,
	0x324: 0x376e, 0x325: 0x37f2, 0x326: 0x377a, 0x327: 0x37fe, 0x328: 0xa000, 0x329: 0xa000,
	0x32a: 0x384c, 0x32b: 0x3852, 0x32c: 0x37a4, 0x32d: 0x3828, 0x32e: 0x3780, 0x32f: 0x3804,
	0x330: 0x378c, 0x331: 0x3810, 0x332: 0x3792, 0x333: 0x3816, 0x334: 0x3798, 0x335: 0x381c,
	0x338: 0x379e, 0x339: 0x3822,
	// Block 0xd, offset 0x340
	0x351: 0x812e,
	0x352: 0x8133, 0x353: 0x8133, 0x354: 0x8133, 0x355: 0x8133, 0x356: 0x812e, 0x357: 0x8133,
	0x358: 0x8133, 0x359: 0x8133, 0x35a: 0x812f, 0x35b: 0x812e, 0x35c: 0x8133, 0x35d: 0x8133,
	0x35e: 0x8133, 0x35f: 0x8133, 0x360: 0x8133, 0x361: 0x8133, 0x362: 0x812e, 0x363: 0x812e,
	0x364: 0x812e, 0x365: 0x812e, 0x366: 0x812e, 0x367: 0x812e, 0x368: 0x8133, 0x369: 0x8133,
	0x36a: 0x812e, 0x36b: 0x8133, 0x36c: 0x8133, 0x36d: 0x812f, 0x36e: 0x8132, 0x36f: 0x8133,
	0x370: 0x8106, 0x371: 0x8107, 0x372: 0x8108, 0x373: 0x8109, 0x374: 0x810a, 0x375: 0x810b,
	0x376: 0x810c, 0x377: 0x810d, 0x378: 0x810e, 0x379: 0x810f, 0x37a: 0x810f, 0x37b: 0x8110,
	0x37c: 0x8111, 0x37d: 0x8112, 0x37f: 0x8113,
	// Block 0xe, offset 0x380
	0x388: 0xa000, 0x38a: 0xa000, 0x38b: 0x8117,
	0x38c: 0x8118, 0x38d: 0x8119, 0x38e: 0x811a, 0x38f: 0x811b, 0x390: 0x811c, 0x391: 0x811d,
	0x392: 0x811e, 0x393: 0x9933, 0x394: 0x9933, 0x395: 0x992e, 0x396: 0x812e, 0x397: 0x8133,
	0x398: 0x8133, 0x399: 0x8133, 0x39a: 0x8133, 0x39b: 0x8133, 0x39c: 0x812e, 0x39d: 0x8133,
	0x39e: 0x8133, 0x39f: 0x812e,
	0x3b0: 0x811f,
	// Block 0xf, offset 0x3c0
	0x3d3: 0x812e, 0x3d4: 0x8133, 0x3d5: 0x8133, 0x3d6: 0x8133, 0x3d7: 0x8133,
	0x3d8: 0x8133, 0x3d9: 0x8133, 0x3da: 0x8133, 0x3db: 0x8133, 0x3dc: 0x8133, 0x3dd: 0x8133,
	0x3de: 0x8133, 0x3df: 0x8133, 0x3e0: 0x8133, 0x3e1: 0x8133, 0x3e3: 0x812e,
	0x3e4: 0x8133, 0x3e5: 0x8133, 0x3e6: 0x812e, 0x3e7: 0x8133, 0x3e8: 0x8133, 0x3e9: 0x812e,
	0x3ea: 0x8133, 0x3eb: 0x8133, 0x3ec: 0x8133, 0x3ed: 0x812e, 0x3ee: 0x812e, 0x3ef: 0x812e,
	0x3f0: 0x8117, 0x3f1: 0x8118, 0x3f2: 0x8119, 0x3f3: 0x8133, 0x3f4: 0x8133, 0x3f5: 0x8133,
	0x3f6: 0x812e, 0x3f7: 0x8133, 0x3f8: 0x8133, 0x3f9: 0x812e, 0x3fa: 0x812e, 0x3fb: 0x8133,
	0x3fc: 0x8133, 0x3fd: 0x8133, 0x3fe: 0x8133, 0x3ff: 0x8133,
	// Block 0x10, offset 0x400
	0x405: 0xa000,
	0x406: 0x2d33, 0x407: 0xa000, 0x408: 0x2d3b, 0x409: 0xa000, 0x40a: 0x2d43, 0x40b: 0xa000,
	0x40c: 0x2d4b, 0x40d: 0xa000, 0x40e: 0x2d53, 0x411: 0xa000,
	0x412: 0x2d5b,
	0x434: 0x8103, 0x435: 0x9900,
	0x43a: 0xa000, 0x43b: 0x2d63,
	0x43c: 0xa000, 0x43d: 0x2d6b, 0x43e: 0xa000, 0x43f: 0xa000,
	// Block 0x11, offset 0x440
	0x440: 0x8133, 0x441: 0x8133, 0x442: 0x812e, 0x443: 0x8133, 0x444: 0x8133, 0x445: 0x8133,
	0x446: 0x8133, 0x447: 0x8133, 0x448: 0x8133, 0x449: 0x8133, 0x44a: 0x812e, 0x44b: 0x8133,
	0x44c: 0x8133, 0x44d: 0x8136, 0x44e: 0x812b, 0x44f: 0x812e, 0x450: 0x812a, 0x451: 0x8133,
	0x452: 0x8133, 0x453: 0x8133, 0x454: 0x8133, 0x455: 0x8133, 0x456: 0x8133, 0x457: 0x8133,
	0x458: 0x8133, 0x459: 0x8133, 0x45a: 0x8133, 0x45b: 0x8133, 0x45c: 0x8133, 0x45d: 0x8133,
	0x45e: 0x8133, 0x45f: 0x8133, 0x460: 0x8133, 0x461: 0x8133, 0x462: 0x8133, 0x463: 0x8133,
	0x464: 0x8133, 0x465: 0x8133, 0x466: 0x8133, 0x467: 0x8133, 0x468: 0x8133, 0x469: 0x8133,
	0x46a: 0x8133, 0x46b: 0x8133, 0x46c: 0x8133, 0x46d: 0x8133, 0x46e: 0x8133, 0x46f: 0x8133,
	0x470: 0x8133, 0x471: 0x8133, 0x472: 0x8133, 0x473: 0x8133, 0x474: 0x8133, 0x475: 0x8133,
	0x476: 0x8134, 0x477: 0x8132, 0x478: 0x8132, 0x479: 0x812e, 0x47b: 0x8133,
	0x47c: 0x8135, 0x47d: 0x812e, 0x47e: 0x8133, 0x47f: 0x812e,
	// Block 0x12, offset 0x480
	0x480: 0x2fae, 0x481: 0x32ba, 0x482: 0x2fb8, 0x483: 0x32c4, 0x484: 0x2fbd, 0x485: 0x32c9,
	0x486: 0x2fc2, 0x487: 0x32ce, 0x488: 0x38e3, 0x489: 0x3a72, 0x48a: 0x2fdb, 0x48b: 0x32e7,
	0x48c: 0x2fe5, 0x48d: 0x32f1, 0x48e: 0x2ff4, 0x48f: 0x3300, 0x490: 0x2fea, 0x491: 0x32f6,
	0x492: 0x2fef, 0x493: 0x32fb, 0x494: 0x3906, 0x495: 0x3a95, 0x496: 0x390d, 0x497: 0x3a9c,
	0x498: 0x3030, 0x499: 0x333c, 0x49a: 0x3035, 0x49b: 0x3341, 0x49c: 0x391b, 0x49d: 0x3aaa,
	0x49e: 0x303a, 0x49f: 0x3346, 0x4a0: 0x3049, 0x4a1: 0x3355, 0x4a2: 0x3067, 0x4a3: 0x3373,
	0x4a4: 0x3076, 0x4a5: 0x3382, 0x4a6: 0x306c, 0x4a7: 0x3378, 0x4a8: 0x307b, 0x4a9: 0x3387,
	0x4aa: 0x3080, 0x4ab: 0x338c, 0x4ac: 0x30c6, 0x4ad: 0x33d2, 0x4ae: 0x3922, 0x4af: 0x3ab1,
	0x4b0: 0x30d0, 0x4b1: 0x33e1, 0x4b2: 0x30da, 0x4b3: 0x33eb, 0x4b4: 0x30e4, 0x4b5: 0x33f5,
	0x4b6: 0x46db, 0x4b7: 0x476c, 0x4b8: 0x3929, 0x4b9: 0x3ab8, 0x4ba: 0x30fd, 0x4bb: 0x340e,
	0x4bc: 0x30f8, 0x4bd: 0x3409, 0x4be: 0x3102, 0x4bf: 0x3413,
	// Block 0x13, offset 0x4c0
	0x4c0: 0x3107, 0x4c1: 0x3418, 0x4c2: 0x310c, 0x4c3: 0x341d, 0x4c4: 0x3120, 0x4c5: 0x3431,
	0x4c6: 0x312a, 0x4c7: 0x343b, 0x4c8: 0x3139, 0x4c9: 0x344a, 0x4ca: 0x3134, 0x4cb: 0x3445,
	0x4cc: 0x394c, 0x4cd: 0x3adb, 0x4ce: 0x395a, 0x4cf: 0x3ae9, 0x4d0: 0x3961, 0x4d1: 0x3af0,
	0x4d2: 0x3968, 0x4d3: 0x3af7, 0x4d4: 0x3166, 0x4d5: 0x3477, 0x4d6: 0x316b, 0x4d7: 0x347c,
	0x4d8: 0x3175, 0x4d9: 0x3486, 0x4da: 0x4708, 0x4db: 0x4799, 0x4dc: 0x39ae, 0x4dd: 0x3b3d,
	0x4de: 0x318e, 0x4df: 0x349f, 0x4e0: 0x3198, 0x4e1: 0x34a9, 0x4e2: 0x4717, 0x4e3: 0x47a8,
	0x4e4: 0x39b5, 0x4e5: 0x3b44, 0x4e6: 0x39bc, 0x4e7: 0x3b4b, 0x4e8: 0x39c3, 0x4e9: 0x3b52,
	0x4ea: 0x31a7, 0x4eb: 0x34b8, 0x4ec: 0x31b1, 0x4ed: 0x34c7, 0x4ee: 0x31c5, 0x4ef: 0x34db,
	0x4f0: 0x31c0, 0x4f1: 0x34d6, 0x4f2: 0x3201, 0x4f3: 0x3517, 0x4f4: 0x3210, 0x4f5: 0x3526,
	0x4f6: 0x320b, 0x4f7: 0x3521, 0x4f8: 0x39ca, 0x4f9: 0x3b59, 0x4fa: 0x39d1, 0x4fb: 0x3b60,
	0x4fc: 0x3215, 0x4fd: 0x352b, 0x4fe: 0x321a, 0x4ff: 0x3530,
	// Block 0x14, offset 0x500
	0x500: 0x321f, 0x501: 0x3535, 0x502: 0x3224, 0x503: 0x353a, 0x504: 0x3233, 0x505: 0x3549,
	0x506: 0x322e, 0x507: 0x3544, 0x508: 0x3238, 0x509: 0x3553, 0x50a: 0x323d, 0x50b: 0x3558,
	0x50c: 0x3242, 0x50d: 0x355d, 0x50e: 0x3260, 0x50f: 0x357b, 0x510: 0x3279, 0x511: 0x3599,
	0x512: 0x3288, 0x513: 0x35a8, 0x514: 0x328d, 0x515: 0x35ad, 0x516: 0x3391, 0x517: 0x34bd,
	0x518: 0x354e, 0x519: 0x358a, 0x51b: 0x35e8,
	0x520: 0x46b8, 0x521: 0x4749, 0x522: 0x2f9a, 0x523: 0x32a6,
	0x524: 0x388f, 0x525: 0x3a1e, 0x526: 0x3888, 0x527: 0x3a17, 0x528: 0x389d, 0x529: 0x3a2c,
	0x52a: 0x3896, 0x52b: 0x3a25, 0x52c: 0x38d5, 0x52d: 0x3a64, 0x52e: 0x38ab, 0x52f: 0x3a3a,
	0x530: 0x38a4, 0x531: 0x3a33, 0x532: 0x38b9, 0x533: 0x3a48, 0x534: 0x38b2, 0x535: 0x3a41,
	0x536: 0x38dc, 0x537: 0x3a6b, 0x538: 0x46cc, 0x539: 0x475d, 0x53a: 0x3017, 0x53b: 0x3323,
	0x53c: 0x3003, 0x53d: 0x330f, 0x53e: 0x38f1, 0x53f: 0x3a80,
	// Block 0x15, offset 0x540
	0x540: 0x38ea, 0x541: 0x3a79, 0x542: 0x38ff, 0x543: 0x3a8e, 0x544: 0x38f8, 0x545: 0x3a87,
	0x546: 0x3914, 0x547: 0x3aa3, 0x548: 0x30a8, 0x549: 0x33b4, 0x54a: 0x30bc, 0x54b: 0x33c8,
	0x54c: 0x46fe, 0x54d: 0x478f, 0x54e: 0x314d, 0x54f: 0x345e, 0x550: 0x3937, 0x551: 0x3ac6,
	0x552: 0x3930, 0x553: 0x3abf, 0x554: 0x3945, 0x555: 0x3ad4, 0x556: 0x393e, 0x557: 0x3acd,
	0x558: 0x39a0, 0x559: 0x3b2f, 0x55a: 0x3984, 0x55b: 0x3b13, 0x55c: 0x397d, 0x55d: 0x3b0c,
	0x55e: 0x3992, 0x55f: 0x3b21, 0x560: 0x398b, 0x561: 0x3b1a, 0x562: 0x3999, 0x563: 0x3b28,
	0x564: 0x31fc, 0x565: 0x3512, 0x566: 0x31de, 0x567: 0x34f4, 0x568: 0x39fb, 0x569: 0x3b8a,
	0x56a: 0x39f4, 0x56b: 0x3b83, 0x56c: 0x3a09, 0x56d: 0x3b98, 0x56e: 0x3a02, 0x56f: 0x3b91,
	0x570: 0x3a10, 0x571: 0x3b9f, 0x572: 0x3247, 0x573: 0x3562, 0x574: 0x326f, 0x575: 0x358f,
	0x576: 0x326a, 0x577: 0x3585, 0x578: 0x3256, 0x579: 0x3571,
	// Block 0x16, offset 0x580
	0x580: 0x481b, 0x581: 0x4821, 0x582: 0x4935, 0x583: 0x494d, 0x584: 0x493d, 0x585: 0x4955,
	0x586: 0x4945, 0x587: 0x495d, 0x588: 0x47c1, 0x589: 0x47c7, 0x58a: 0x48a5, 0x58b: 0x48bd,
	0x58c: 0x48ad, 0x58d: 0x48c5, 0x58e: 0x48b5, 0x58f: 0x48cd, 0x590: 0x482d, 0x591: 0x4833,
	0x592: 0x3dcf, 0x593: 0x3ddf, 0x594: 0x3dd7, 0x595: 0x3de7,
	0x598: 0x47cd, 0x599: 0x47d3, 0x59a: 0x3cff, 0x59b: 0x3d0f, 0x59c: 0x3d07, 0x59d: 0x3d17,
	0x5a0: 0x4845, 0x5a1: 0x484b, 0x5a2: 0x4965, 0x5a3: 0x497d,
	0x5a4: 0x496d, 0x5a5: 0x4985, 0x5a6: 0x4975, 0x5a7: 0x498d, 0x5a8: 0x47d9, 0x5a9: 0x47df,
	0x5aa: 0x48d5, 0x5ab: 0x48ed, 0x5ac: 0x48dd, 0x5ad: 0x48f5, 0x5ae: 0x48e5, 0x5af: 0x48fd,
	0x5b0: 0x485d, 0x5b1: 0x4863, 0x5b2: 0x3e2f, 0x5b3: 0x3e47, 0x5b4: 0x3e37, 0x5b5: 0x3e4f,
	0x5b6: 0x3e3f, 0x5b7: 0x3e57, 0x5b8: 0x47e5, 0x5b9: 0x47eb, 0x5ba: 0x3d2f, 0x5bb: 0x3d47,
	0x5bc: 0x3d37, 0x5bd: 0x3d4f, 0x5be: 0x3d3f, 0x5bf: 0x3d57,
	// Block 0x17, offset 0x5c0
	0x5c0: 0x4869, 0x5c1: 0x486f, 0x5c2: 0x3e5f, 0x5c3: 0x3e6f, 0x5c4: 0x3e67, 0x5c5: 0x3e77,
	0x5c8: 0x47f1, 0x5c9: 0x47f7, 0x5ca: 0x3d5f, 0x5cb: 0x3d6f,
	0x5cc: 0x3d67, 0x5cd: 0x3d77, 0x5d0: 0x487b, 0x5d1: 0x4881,
	0x5d2: 0x3e97, 0x5d3: 0x3eaf, 0x5d4: 0x3e9f, 0x5d5: 0x3eb7, 0x5d6: 0x3ea7, 0x5d7: 0x3ebf,
	0x5d9: 0x47fd, 0x5db: 0x3d7f, 0x5dd: 0x3d87,
	0x5df: 0x3d8f, 0x5e0: 0x4893, 0x5e1: 0x4899, 0x5e2: 0x4995, 0x5e3: 0x49ad,
	0x5e4: 0x499d, 0x5e5: 0x49b5, 0x5e6: 0x49a5, 0x5e7: 0x49bd, 0x5e8: 0x4803, 0x5e9: 0x4809,
	0x5ea: 0x4905, 0x5eb: 0x491d, 0x5ec: 0x490d, 0x5ed: 0x4925, 0x5ee: 0x4915, 0x5ef: 0x492d,
	0x5f0: 0x480f, 0x5f1: 0x4335, 0x5f2: 0x36a8, 0x5f3: 0x433b, 0x5f4: 0x4839, 0x5f5: 0x4341,
	0x5f6: 0x36ba, 0x5f7: 0x4347, 0x5f8: 0x36d8, 0x5f9: 0x434d, 0x5fa: 0x36f0, 0x5fb: 0x4353,
	0x5fc: 0x4887, 0x5fd: 0x4359,
	// Block 0x18, offset 0x600
	0x600: 0x3db7, 0x601: 0x3dbf, 0x602: 0x419b, 0x603: 0x41b9, 0x604: 0x41a5, 0x605: 0x41c3,
	0x606: 0x41af, 0x607: 0x41cd, 0x608: 0x3cef, 0x609: 0x3cf7, 0x60a: 0x40e7, 0x60b: 0x4105,
	0x60c: 0x40f1, 0x60d: 0x410f, 0x60e: 0x40fb, 0x60f: 0x4119, 0x610: 0x3dff, 0x611: 0x3e07,
	0x612: 0x41d7, 0x613: 0x41f5, 0x614: 0x41e1, 0x615: 0x41ff, 0x616: 0x41eb, 0x617: 0x4209,
	0x618: 0x3d1f, 0x619: 0x3d27, 0x61a: 0x4123, 0x61b: 0x4141, 0x61c: 0x412d, 0x61d: 0x414b,
	0x61e: 0x4137, 0x61f: 0x4155, 0x620: 0x3ed7, 0x621: 0x3edf, 0x622: 0x4213, 0x623: 0x4231,
	0x624: 0x421d, 0x625: 0x423b, 0x626: 0x4227, 0x627: 0x4245, 0x628: 0x3d97, 0x629: 0x3d9f,
	0x62a: 0x415f, 0x62b: 0x417d, 0x62c: 0x4169, 0x62d: 0x4187, 0x62e: 0x4173, 0x62f: 0x4191,
	0x630: 0x369c, 0x631: 0x3696, 0x632: 0x3da7, 0x633: 0x36a2, 0x634: 0x3daf,
	0x636: 0x4827, 0x637: 0x3dc7, 0x638: 0x360c, 0x639: 0x3606, 0x63a: 0x35fa, 0x63b: 0x4305,
	0x63c: 0x3612, 0x63d: 0x8100, 0x63e: 0x01d6, 0x63f: 0xa100,
	// Block 0x19, offset 0x640
	0x640: 0x8100, 0x641: 0x35be, 0x642: 0x3def, 0x643: 0x36b4, 0x644: 0x3df7,
	0x646: 0x4851, 0x647: 0x3e0f, 0x648: 0x3618, 0x649: 0x430b, 0x64a: 0x3624, 0x64b: 0x4311,
	0x64c: 0x3630, 0x64d: 0x3ba6, 0x64e: 0x3bad, 0x64f: 0x3bb4, 0x650: 0x36cc, 0x651: 0x36c6,
	0x652: 0x3e17, 0x653: 0x44fb, 0x656: 0x36d2, 0x657: 0x3e27,
	0x658: 0x3648, 0x659: 0x3642, 0x65a: 0x3636, 0x65b: 0x4317, 0x65d: 0x3bbb,
	0x65e: 0x3bc2, 0x65f: 0x3bc9, 0x660: 0x3702, 0x661: 0x36fc, 0x662: 0x3e7f, 0x663: 0x4503,
	0x664: 0x36e4, 0x665: 0x36ea, 0x666: 0x3708, 0x667: 0x3e8f, 0x668: 0x3678, 0x669: 0x3672,
	0x66a: 0x3666, 0x66b: 0x4323, 0x66c: 0x3660, 0x66d: 0x35b2, 0x66e: 0x42ff, 0x66f: 0x0081,
	0x672: 0x3ec7, 0x673: 0x370e, 0x674: 0x3ecf,
	0x676: 0x489f, 0x677: 0x3ee7, 0x678: 0x3654, 0x679: 0x431d, 0x67a: 0x3684, 0x67b: 0x432f,
	0x67c: 0x3690, 0x67d: 0x426d, 0x67e: 0xa100,
	// Block 0x1a, offset 0x680
	0x681: 0x3c1d, 0x683: 0xa000, 0x684: 0x3c24, 0x685: 0xa000,
	0x687: 0x3c2b, 0x688: 0xa000, 0x689: 0x3c32,
	0x68d: 0xa000,
	0x6a0: 0x2f7c, 0x6a1: 0xa000, 0x6a2: 0x3c40,
	0x6a4: 0xa000, 0x6a5: 0xa000,
	0x6ad: 0x3c39, 0x6ae: 0x2f77, 0x6af: 0x2f81,
	0x6b0: 0x3c47, 0x6b1: 0x3c4e, 0x6b2: 0xa000, 0x6b3: 0xa000, 0x6b4: 0x3c55, 0x6b5: 0x3c5c,
	0x6b6: 0xa000, 0x6b7: 0xa000, 0x6b8: 0x3c63, 0x6b9: 0x3c6a, 0x6ba: 0xa000, 0x6bb: 0xa000,
	0x6bc: 0xa000, 0x6bd: 0xa000,
	// Block 0x1b, offset 0x6c0
	0x6c0: 0x3c71, 0x6c1: 0x3c78, 0x6c2: 0xa000, 0x6c3: 0xa000, 0x6c4: 0x3c8d, 0x6c5: 0x3c94,
	0x6c6: 0xa000, 0x6c7: 0xa000, 0x6c8: 0x3c9b, 0x6c9: 0x3ca2,
	0x6d1: 0xa000,
	0x6d2: 0xa000,
	0x6e2: 0xa000,
	0x6e8: 0xa000, 0x6e9: 0xa000,
	0x6eb: 0xa000, 0x6ec: 0x3cb7, 0x6ed: 0x3cbe, 0x6ee: 0x3cc5, 0x6ef: 0x3ccc,
	0x6f2: 0xa000, 0x6f3: 0xa000, 0x6f4: 0xa000, 0x6f5: 0xa000,
	// Block 0x1c, offset 0x700
	0x706: 0xa000, 0x70b: 0xa000,
	0x70c: 0x3f1f, 0x70d: 0xa000, 0x70e: 0x3f27, 0x70f: 0xa000, 0x710: 0x3f2f, 0x711: 0xa000,
	0x712: 0x3f37, 0x713: 0xa000, 0x714: 0x3f3f, 0x715: 0xa000, 0x716: 0x3f47, 0x717: 0xa000,
	0x718: 0x3f4f, 0x719: 0xa000, 0x71a: 0x3f57, 0x71b: 0xa000, 0x71c: 0x3f5f, 0x71d: 0xa000,
	0x71e: 0x3f67, 0x71f: 0xa000, 0x720: 0x3f6f, 0x721: 0xa000, 0x722: 0x3f77,
	0x724: 0xa000, 0x725: 0x3f7f, 0x726: 0xa000, 0x727: 0x3f87, 0x728: 0xa000, 0x729: 0x3f8f,
	0x72f: 0xa000,
	0x730: 0x3f97, 0x731: 0x3f9f, 0x732: 0xa000, 0x733: 0x3fa7, 0x734: 0x3faf, 0x735: 0xa000,
	0x736: 0x3fb7, 0x737: 0x3fbf, 0x738: 0xa000, 0x739: 0x3fc7, 0x73a: 0x3fcf, 0x73b: 0xa000,
	0x73c: 0x3fd7, 0x73d: 0x3fdf,
	// Block 0x1d, offset 0x740
	0x754: 0x3f17,
	0x759: 0x9904, 0x75a: 0x9904, 0x75b: 0x8100, 0x75c: 0x8100, 0x75d: 0xa000,
	0x75e: 0x3fe7,
	0x766: 0xa000,
	0x76b: 0xa000, 0x76c: 0x3ff7, 0x76d: 0xa000, 0x76e: 0x3fff, 0x76f: 0xa000,
	0x770: 0x4007, 0x771: 0xa000, 0x772: 0x400f, 0x773: 0xa000, 0x774: 0x4017, 0x775: 0xa000,
	0x776: 0x401f, 0x777: 0xa000, 0x778: 0x4027, 0x779: 0xa000, 0x77a: 0x402f, 0x77b: 0xa000,
	0x77c: 0x4037, 0x77d: 0xa000, 0x77e: 0x403f, 0x77f: 0xa000,
	// Block 0x1e, offset 0x780
	0x780: 0x4047, 0x781: 0xa000, 0x782: 0x404f, 0x784: 0xa000, 0x785: 0x4057,
	0x786: 0xa000, 0x787: 0x405f, 0x788: 0xa000, 0x789: 0x4067,
	0x78f: 0xa000, 0x790: 0x406f, 0x791: 0x4077,
	0x792: 0xa000, 0x793: 0x407f, 0x794: 0x4087, 0x795: 0xa000, 0x796: 0x408f, 0x797: 0x4097,
	0x798: 0xa000, 0x799: 0x409f, 0x79a: 0x40a7, 0x79b: 0xa000, 0x79c: 0x40af, 0x79d: 0x40b7,
	0x7af: 0xa000,
	0x7b0: 0xa000, 0x7b1: 0xa000, 0x7b2: 0xa000, 0x7b4: 0x3fef,
	0x7b7: 0x40bf, 0x7b8: 0x40c7, 0x7b9: 0x40cf, 0x7ba: 0x40d7,
	0x7bd: 0xa000, 0x7be: 0x40df,
	// Block 0x1f, offset 0x7c0
	0x7c0: 0x137a, 0x7c1: 0x0cfe, 0x7c2: 0x13d6, 0x7c3: 0x13a2, 0x7c4: 0x0e5a, 0x7c5: 0x06ee,
	0x7c6: 0x08e2, 0x7c7: 0x162e, 0x7c8: 0x162e, 0x7c9: 0x0a0e, 0x7ca: 0x1462, 0x7cb: 0x0946,
	0x7cc: 0x0a0a, 0x7cd: 0x0bf2, 0x7ce: 0x0fd2, 0x7cf: 0x1162, 0x7d0: 0x129a, 0x7d1: 0x12d6,
	0x7d2: 0x130a, 0x7d3: 0x141e, 0x7d4: 0x0d76, 0x7d5: 0x0e02, 0x7d6: 0x0eae, 0x7d7: 0x0f46,
	0x7d8: 0x1262, 0x7d9: 0x144a, 0x7da: 0x1576, 0x7db: 0x0712, 0x7dc: 0x08b6, 0x7dd: 0x0d8a,
	0x7de: 0x0ed2, 0x7df: 0x1296, 0x7e0: 0x15c6, 0x7e1: 0x0ab6, 0x7e2: 0x0e7a, 0x7e3: 0x1286,
	0x7e4: 0x131a, 0x7e5: 0x0c26, 0x7e6: 0x11be, 0x7e7: 0x12e2, 0x7e8: 0x0b22, 0x7e9: 0x0d12,
	0x7ea: 0x0e1a, 0x7eb: 0x0f1e, 0x7ec: 0x142a, 0x7ed: 0x0752, 0x7ee: 0x07ea, 0x7ef: 0x0856,
	0x7f0: 0x0c8e, 0x7f1: 0x0d82, 0x7f2: 0x0ece, 0x7f3: 0x0ff2, 0x7f4: 0x117a, 0x7f5: 0x128e,
	0x7f6: 0x12a6, 0x7f7: 0x13ca, 0x7f8: 0x14f2, 0x7f9: 0x15a6, 0x7fa: 0x15c2, 0x7fb: 0x102e,
	0x7fc: 0x106e, 0x7fd: 0x1126, 0x7fe: 0x1246, 0x7ff: 0x147e,
	// Block 0x20, offset 0x800
	0x800: 0x15ce, 0x801: 0x134e, 0x802: 0x09ca, 0x803: 0x0b3e, 0x804: 0x10de, 0x805: 0x119e,
	0x806: 0x0f02, 0x807: 0x1036, 0x808: 0x139a, 0x809: 0x14ea, 0x80a: 0x09c6, 0x80b: 0x0a92,
	0x80c: 0x0d7a, 0x80d: 0x0e2e, 0x80e: 0x0e62, 0x80f: 0x1116, 0x810: 0x113e, 0x811: 0x14aa,
	0x812: 0x0852, 0x813: 0x11aa, 0x814: 0x07f6, 0x815: 0x07f2, 0x816: 0x109a, 0x817: 0x112a,
	0x818: 0x125e, 0x819: 0x14b2, 0x81a: 0x136a, 0x81b: 0x0c2a, 0x81c: 0x0d76, 0x81d: 0x135a,
	0x81e: 0x06fa, 0x81f: 0x0a66, 0x820: 0x0b96, 0x821: 0x0f32, 0x822: 0x0fb2, 0x823: 0x0876,
	0x824: 0x103e, 0x825: 0x0762, 0x826: 0x0b7a, 0x827: 0x06da, 0x828: 0x0dee, 0x829: 0x0ca6,
	0x82a: 0x1112, 0x82b: 0x08ca, 0x82c: 0x09b6, 0x82d: 0x0ffe, 0x82e: 0x1266, 0x82f: 0x133e,
	0x830: 0x0dba, 0x831: 0x13fa, 0x832: 0x0de6, 0x833: 0x0c3a, 0x834: 0x121e, 0x835: 0x0c5a,
	0x836: 0x0fae, 0x837: 0x072e, 0x838: 0x07aa, 0x839: 0x07ee, 0x83a: 0x0d56, 0x83b: 0x10fe,
	0x83c: 0x11f6, 0x83d: 0x134a, 0x83e: 0x145e, 0x83f: 0x085e,
	// Block 0x21, offset 0x840
	0x840: 0x0912, 0x841: 0x0a1a, 0x842: 0x0b32, 0x843: 0x0cc2, 0x844: 0x0e7e, 0x845: 0x1042,
	0x846: 0x149a, 0x847: 0x157e, 0x848: 0x15d2, 0x849: 0x15ea, 0x84a: 0x083a, 0x84b: 0x0cf6,
	0x84c: 0x0da6, 0x84d: 0x13ee, 0x84e: 0x0afe, 0x84f: 0x0bda, 0x850: 0x0bf6, 0x851: 0x0c86,
	0x852: 0x0e6e, 0x853: 0x0eba, 0x854: 0x0f6a, 0x855: 0x108e, 0x856: 0x1132, 0x857: 0x1196,
	0x858: 0x13de, 0x859: 0x126e, 0x85a: 0x1406, 0x85b: 0x1482, 0x85c: 0x0812, 0x85d: 0x083e,
	0x85e: 0x0926, 0x85f: 0x0eaa, 0x860: 0x12f6, 0x861: 0x133e, 0x862: 0x0b1e, 0x863: 0x0b8e,
	0x864: 0x0c52, 0x865: 0x0db2, 0x866: 0x10da, 0x867: 0x0f26, 0x868: 0x073e, 0x869: 0x0982,
	0x86a: 0x0a66, 0x86b: 0x0aca, 0x86c: 0x0b9a, 0x86d: 0x0f42, 0x86e: 0x0f5e, 0x86f: 0x116e,
	0x870: 0x118e, 0x871: 0x1466, 0x872: 0x14e6, 0x873: 0x14f6, 0x874: 0x1532, 0x875: 0x0756,
	0x876: 0x1082, 0x877: 0x1452, 0x878: 0x14ce, 0x879: 0x0bb2, 0x87a: 0x071a, 0x87b: 0x077a,
	0x87c: 0x0a6a, 0x87d: 0x0a8a, 0x87e: 0x0cb2, 0x87f: 0x0d76,
	// Block 0x22, offset 0x880
	0x880: 0x0ec6, 0x881: 0x0fce, 0x882: 0x127a, 0x883: 0x141a, 0x884: 0x1626, 0x885: 0x0ce6,
	0x886: 0x14a6, 0x887: 0x0836, 0x888: 0x0d32, 0x889: 0x0d3e, 0x88a: 0x0e12, 0x88b: 0x0e4a,
	0x88c: 0x0f4e, 0x88d: 0x0faa, 0x88e: 0x102a, 0x88f: 0x110e, 0x890: 0x153e, 0x891: 0x07b2,
	0x892: 0x0c06, 0x893: 0x14b6, 0x894: 0x076a, 0x895: 0x0aae, 0x896: 0x0e32, 0x897: 0x13e2,
	0x898: 0x0b6a, 0x899: 0x0bba, 0x89a: 0x0d46, 0x89b: 0x0f32, 0x89c: 0x14be, 0x89d: 0x081a,
	0x89e: 0x0902, 0x89f: 0x0a9a, 0x8a0: 0x0cd6, 0x8a1: 0x0d22, 0x8a2: 0x0d62, 0x8a3: 0x0df6,
	0x8a4: 0x0f4a, 0x8a5: 0x0fbe, 0x8a6: 0x115a, 0x8a7: 0x12fa, 0x8a8: 0x1306, 0x8a9: 0x145a,
	0x8aa: 0x14da, 0x8ab: 0x0886, 0x8ac: 0x0e4e, 0x8ad: 0x0906, 0x8ae: 0x0eca, 0x8af: 0x0f6e,
	0x8b0: 0x128a, 0x8b1: 0x14c2, 0x8b2: 0x15ae, 0x8b3: 0x15d6, 0x8b4: 0x0d3a, 0x8b5: 0x0e2a,
	0x8b6: 0x11c6, 0x8b7: 0x10ba, 0x8b8: 0x10c6, 0x8b9: 0x10ea, 0x8ba: 0x0f1a, 0x8bb: 0x0ea2,
	0x8bc: 0x1366, 0x8bd: 0x0736, 0x8be: 0x122e, 0x8bf: 0x081e,
	// Block 0x23, offset 0x8c0
	0x8c0: 0x080e, 0x8c1: 0x0b0e, 0x8c2: 0x0c2e, 0x8c3: 0x10f6, 0x8c4: 0x0a56, 0x8c5: 0x0e06,
	0x8c6: 0x0cf2, 0x8c7: 0x13ea, 0x8c8: 0x12ea, 0x8c9: 0x14ae, 0x8ca: 0x1326, 0x8cb: 0x0b2a,
	0x8cc: 0x078a, 0x8cd: 0x095e, 0x8d0: 0x09b2,
	0x8d2: 0x0ce2, 0x8d5: 0x07fa, 0x8d6: 0x0f22, 0x8d7: 0x0fe6,
	0x8d8: 0x104a, 0x8d9: 0x1066, 0x8da: 0x106a, 0x8db: 0x107e, 0x8dc: 0x14fe, 0x8dd: 0x10ee,
	0x8de: 0x1172, 0x8e0: 0x1292, 0x8e2: 0x1356,
	0x8e5: 0x140a, 0x8e6: 0x1436,
	0x8ea: 0x1552, 0x8eb: 0x1556, 0x8ec: 0x155a, 0x8ed: 0x15be, 0x8ee: 0x142e, 0x8ef: 0x14ca,
	0x8f0: 0x075a, 0x8f1: 0x077e, 0x8f2: 0x0792, 0x8f3: 0x084e, 0x8f4: 0x085a, 0x8f5: 0x089a,
	0x8f6: 0x094e, 0x8f7: 0x096a, 0x8f8: 0x0972, 0x8f9: 0x09ae, 0x8fa: 0x09ba, 0x8fb: 0x0a96,
	0x8fc: 0x0a9e, 0x8fd: 0x0ba6, 0x8fe: 0x0bce, 0x8ff: 0x0bd6,
	// Block 0x24, offset 0x900
	0x900: 0x0bee, 0x901: 0x0c9a, 0x902: 0x0cca, 0x903: 0x0cea, 0x904: 0x0d5a, 0x905: 0x0e1e,
	0x906: 0x0e3a, 0x907: 0x0e6a, 0x908: 0x0ebe, 0x909: 0x0ede, 0x90a: 0x0f52, 0x90b: 0x1032,
	0x90c: 0x104e, 0x90d: 0x1056, 0x90e: 0x1052, 0x90f: 0x105a, 0x910: 0x105e, 0x911: 0x1062,
	0x912: 0x1076, 0x913: 0x107a, 0x914: 0x109e, 0x915: 0x10b2, 0x916: 0x10ce, 0x917: 0x1132,
	0x918: 0x113a, 0x919: 0x1142, 0x91a: 0x1156, 0x91b: 0x117e, 0x91c: 0x11ce, 0x91d: 0x1202,
	0x91e: 0x1202, 0x91f: 0x126a, 0x920: 0x1312, 0x921: 0x132a, 0x922: 0x135e, 0x923: 0x1362,
	0x924: 0x13a6, 0x925: 0x13aa, 0x926: 0x1402, 0x927: 0x140a, 0x928: 0x14de, 0x929: 0x1522,
	0x92a: 0x153a, 0x92b: 0x0b9e, 0x92c: 0x1721, 0x92d: 0x11e6,
	0x930: 0x06e2, 0x931: 0x07e6, 0x932: 0x07a6, 0x933: 0x074e, 0x934: 0x078e, 0x935: 0x07ba,
	0x936: 0x084a, 0x937: 0x0866, 0x938: 0x094e, 0x939: 0x093a, 0x93a: 0x094a, 0x93b: 0x0966,
	0x93c: 0x09b2, 0x93d: 0x09c2, 0x93e: 0x0a06, 0x93f: 0x0a12,
	// Block 0x25, offset 0x940
	0x940: 0x0a2e, 0x941: 0x0a3e, 0x942: 0x0b26, 0x943: 0x0b2e, 0x944: 0x0b5e, 0x945: 0x0b7e,
	0x946: 0x0bae, 0x947: 0x0bc6, 0x948: 0x0bb6, 0x949: 0x0bd6, 0x94a: 0x0bca, 0x94b: 0x0bee,
	0x94c: 0x0c0a, 0x94d: 0x0c62, 0x94e: 0x0c6e, 0x94f: 0x0c76, 0x950: 0x0c9e, 0x951: 0x0ce2,
	0x952: 0x0d12, 0x953: 0x0d16, 0x954: 0x0d2a, 0x955: 0x0daa, 0x956: 0x0dba, 0x957: 0x0e12,
	0x958: 0x0e5e, 0x959: 0x0e56, 0x95a: 0x0e6a, 0x95b: 0x0e86, 0x95c: 0x0ebe, 0x95d: 0x1016,
	0x95e: 0x0ee2, 0x95f: 0x0f16, 0x960: 0x0f22, 0x961: 0x0f62, 0x962: 0x0f7e, 0x963: 0x0fa2,
	0x964: 0x0fc6, 0x965: 0x0fca, 0x966: 0x0fe6, 0x967: 0x0fea, 0x968: 0x0ffa, 0x969: 0x100e,
	0x96a: 0x100a, 0x96b: 0x103a, 0x96c: 0x10b6, 0x96d: 0x10ce, 0x96e: 0x10e6, 0x96f: 0x111e,
	0x970: 0x1132, 0x971: 0x114e, 0x972: 0x117e, 0x973: 0x1232, 0x974: 0x125a, 0x975: 0x12ce,
	0x976: 0x1316, 0x977: 0x1322, 0x978: 0x132a, 0x979: 0x1342, 0x97a: 0x1356, 0x97b: 0x1346,
	0x97c: 0x135e, 0x97d: 0x135a, 0x97e: 0x1352, 0x97f: 0x1362,
	// Block 0x26, offset 0x980
	0x980: 0x136e, 0x981: 0x13aa, 0x982: 0x13e6, 0x983: 0x1416, 0x984: 0x144e, 0x985: 0x146e,
	0x986: 0x14ba, 0x987: 0x14de, 0x988: 0x14fe, 0x989: 0x1512, 0x98a: 0x1522, 0x98b: 0x152e,
	0x98c: 0x153a, 0x98d: 0x158e, 0x98e: 0x162e, 0x98f: 0x16b8, 0x990: 0x16b3, 0x991: 0x16e5,
	0x992: 0x060a, 0x993: 0x0632, 0x994: 0x0636, 0x995: 0x1767, 0x996: 0x1794, 0x997: 0x180c,
	0x998: 0x161a, 0x999: 0x162a,
	// Block 0x27, offset 0x9c0
	0x9c0: 0x06fe, 0x9c1: 0x06f6, 0x9c2: 0x0706, 0x9c3: 0x164a, 0x9c4: 0x074a, 0x9c5: 0x075a,
	0x9c6: 0x075e, 0x9c7: 0x0766, 0x9c8: 0x076e, 0x9c9: 0x0772, 0x9ca: 0x077e, 0x9cb: 0x0776,
	0x9cc: 0x05b6, 0x9cd: 0x165e, 0x9ce: 0x0792, 0x9cf: 0x0796, 0x9d0: 0x079a, 0x9d1: 0x07b6,
	0x9d2: 0x164f, 0x9d3: 0x05ba, 0x9d4: 0x07a2, 0x9d5: 0x07c2, 0x9d6: 0x1659, 0x9d7: 0x07d2,
	0x9d8: 0x07da, 0x9d9: 0x073a, 0x9da: 0x07e2, 0x9db: 0x07e6, 0x9dc: 0x1834, 0x9dd: 0x0802,
	0x9de: 0x080a, 0x9df: 0x05c2, 0x9e0: 0x0822, 0x9e1: 0x0826, 0x9e2: 0x082e, 0x9e3: 0x0832,
	0x9e4: 0x05c6, 0x9e5: 0x084a, 0x9e6: 0x084e, 0x9e7: 0x085a, 0x9e8: 0x0866, 0x9e9: 0x086a,
	0x9ea: 0x086e, 0x9eb: 0x0876, 0x9ec: 0x0896, 0x9ed: 0x089a, 0x9ee: 0x08a2, 0x9ef: 0x08b2,
	0x9f0: 0x08ba, 0x9f1: 0x08be, 0x9f2: 0x08be, 0x9f3: 0x08be, 0x9f4: 0x166d, 0x9f5: 0x0e96,
	0x9f6: 0x08d2, 0x9f7: 0x08da, 0x9f8: 0x1672, 0x9f9: 0x08e6, 0x9fa: 0x08ee, 0x9fb: 0x08f6,
	0x9fc: 0x091e, 0x9fd: 0x090a, 0x9fe: 0x0916, 0x9ff: 0x091a,
	// Block 0x28, offset 0xa00
	0xa00: 0x0922, 0xa01: 0x092a, 0xa02: 0x092e, 0xa03: 0x0936, 0xa04: 0x093e, 0xa05: 0x0942,
	0xa06: 0x0942, 0xa07: 0x094a, 0xa08: 0x0952, 0xa09: 0x0956, 0xa0a: 0x0962, 0xa0b: 0x0986,
	0xa0c: 0x096a, 0xa0d: 0x098a, 0xa0e: 0x096e, 0xa0f: 0x0976, 0xa10: 0x080e, 0xa11: 0x09d2,
	0xa12: 0x099a, 0xa13: 0x099e, 0xa14: 0x09a2, 0xa15: 0x0996, 0xa16: 0x09aa, 0xa17: 0x09a6,
	0xa18: 0x09be, 0xa19: 0x1677, 0xa1a: 0x09da, 0xa1b: 0x09de, 0xa1c: 0x09e6, 0xa1d: 0x09f2,
	0xa1e: 0x09fa, 0xa1f: 0x0a16, 0xa20: 0x167c, 0xa21: 0x1681, 0xa22: 0x0a22, 0xa23: 0x0a26,
	0xa24: 0x0a2a, 0xa25: 0x0a1e, 0xa26: 0x0a32, 0xa27: 0x05ca, 0xa28: 0x05ce, 0xa29: 0x0a3a,
	0xa2a: 0x0a42, 0xa2b: 0x0a42, 0xa2c: 0x1686, 0xa2d: 0x0a5e, 0xa2e: 0x0a62, 0xa2f: 0x0a66,
	0xa30: 0x0a6e, 0xa31: 0x168b, 0xa32: 0x0a76, 0xa33: 0x0a7a, 0xa34: 0x0b52, 0xa35: 0x0a82,
	0xa36: 0x05d2, 0xa37: 0x0a8e, 0xa38: 0x0a9e, 0xa39: 0x0aaa, 0xa3a: 0x0aa6, 0xa3b: 0x1695,
	0xa3c: 0x0ab2, 0xa3d: 0x169a, 0xa3e: 0x0abe, 0xa3f: 0x0aba,
	// Block 0x29, offset 0xa40
	0xa40: 0x0ac2, 0xa41: 0x0ad2, 0xa42: 0x0ad6, 0xa43: 0x05d6, 0xa44: 0x0ae6, 0xa45: 0x0aee,
	0xa46: 0x0af2, 0xa47: 0x0af6, 0xa48: 0x05da, 0xa49: 0x169f, 0xa4a: 0x05de, 0xa4b: 0x0b12,
	0xa4c: 0x0b16, 0xa4d: 0x0b1a, 0xa4e: 0x0b22, 0xa4f: 0x1866, 0xa50: 0x0b3a, 0xa51: 0x16a9,
	0xa52: 0x16a9, 0xa53: 0x11da, 0xa54: 0x0b4a, 0xa55: 0x0b4a, 0xa56: 0x05e2, 0xa57: 0x16cc,
	0xa58: 0x179e, 0xa59: 0x0b5a, 0xa5a: 0x0b62, 0xa5b: 0x05e6, 0xa5c: 0x0b76, 0xa5d: 0x0b86,
	0xa5e: 0x0b8a, 0xa5f: 0x0b92, 0xa60: 0x0ba2, 0xa61: 0x05ee, 0xa62: 0x05ea, 0xa63: 0x0ba6,
	0xa64: 0x16ae, 0xa65: 0x0baa, 0xa66: 0x0bbe, 0xa67: 0x0bc2, 0xa68: 0x0bc6, 0xa69: 0x0bc2,
	0xa6a: 0x0bd2, 0xa6b: 0x0bd6, 0xa6c: 0x0be6, 0xa6d: 0x0bde, 0xa6e: 0x0be2, 0xa6f: 0x0bea,
	0xa70: 0x0bee, 0xa71: 0x0bf2, 0xa72: 0x0bfe, 0xa73: 0x0c02, 0xa74: 0x0c1a, 0xa75: 0x0c22,
	0xa76: 0x0c32, 0xa77: 0x0c46, 0xa78: 0x16bd, 0xa79: 0x0c42, 0xa7a: 0x0c36, 0xa7b: 0x0c4e,
	0xa7c: 0x0c56, 0xa7d: 0x0c6a, 0xa7e: 0x16c2, 0xa7f: 0x0c72,
	// Block 0x2a, offset 0xa80
	0xa80: 0x0c66, 0xa81: 0x0c5e, 0xa82: 0x05f2, 0xa83: 0x0c7a, 0xa84: 0x0c82, 0xa85: 0x0c8a,
	0xa86: 0x0c7e, 0xa87: 0x05f6, 0xa88: 0x0c9a, 0xa89: 0x0ca2, 0xa8a: 0x16c7, 0xa8b: 0x0cce,
	0xa8c: 0x0d02, 0xa8d: 0x0cde, 0xa8e: 0x0602, 0xa8f: 0x0cea, 0xa90: 0x05fe, 0xa91: 0x05fa,
	0xa92: 0x07c6, 0xa93: 0x07ca, 0xa94: 0x0d06, 0xa95: 0x0cee, 0xa96: 0x11ae, 0xa97: 0x0666,
	0xa98: 0x0d12, 0xa99: 0x0d16, 0xa9a: 0x0d1a, 0xa9b: 0x0d2e, 0xa9c: 0x0d26, 0xa9d: 0x16e0,
	0xa9e: 0x0606, 0xa9f: 0x0d42, 0xaa0: 0x0d36, 0xaa1: 0x0d52, 0xaa2: 0x0d5a, 0xaa3: 0x16ea,
	0xaa4: 0x0d5e, 0xaa5: 0x0d4a, 0xaa6: 0x0d66, 0xaa7: 0x060a, 0xaa8: 0x0d6a, 0xaa9: 0x0d6e,
	0xaaa: 0x0d72, 0xaab: 0x0d7e, 0xaac: 0x16ef, 0xaad: 0x0d86, 0xaae: 0x060e, 0xaaf: 0x0d92,
	0xab0: 0x16f4, 0xab1: 0x0d96, 0xab2: 0x0612, 0xab3: 0x0da2, 0xab4: 0x0dae, 0xab5: 0x0dba,
	0xab6: 0x0dbe, 0xab7: 0x16f9, 0xab8: 0x1690, 0xab9: 0x16fe, 0xaba: 0x0dde, 0xabb: 0x1703,
	0xabc: 0x0dea, 0xabd: 0x0df2, 0xabe: 0x0de2, 0xabf: 0x0dfe,
	// Block 0x2b, offset 0xac0
	0xac0: 0x0e0e, 0xac1: 0x0e1e, 0xac2: 0x0e12, 0xac3: 0x0e16, 0xac4: 0x0e22, 0xac5: 0x0e26,
	0xac6: 0x1708, 0xac7: 0x0e0a, 0xac8: 0x0e3e, 0xac9: 0x0e42, 0xaca: 0x0616, 0xacb: 0x0e56,
	0xacc: 0x0e52, 0xacd: 0x170d, 0xace: 0x0e36, 0xacf: 0x0e72, 0xad0: 0x1712, 0xad1: 0x1717,
	0xad2: 0x0e76, 0xad3: 0x0e8a, 0xad4: 0x0e86, 0xad5: 0x0e82, 0xad6: 0x061a, 0xad7: 0x0e8e,
	0xad8: 0x0e9e, 0xad9: 0x0e9a, 0xada: 0x0ea6, 0xadb: 0x1654, 0xadc: 0x0eb6, 0xadd: 0x171c,
	0xade: 0x0ec2, 0xadf: 0x1726, 0xae0: 0x0ed6, 0xae1: 0x0ee2, 0xae2: 0x0ef6, 0xae3: 0x172b,
	0xae4: 0x0f0a, 0xae5: 0x0f0e, 0xae6: 0x1730, 0xae7: 0x1735, 0xae8: 0x0f2a, 0xae9: 0x0f3a,
	0xaea: 0x061e, 0xaeb: 0x0f3e, 0xaec: 0x0622, 0xaed: 0x0622, 0xaee: 0x0f56, 0xaef: 0x0f5a,
	0xaf0: 0x0f62, 0xaf1: 0x0f66, 0xaf2: 0x0f72, 0xaf3: 0x0626, 0xaf4: 0x0f8a, 0xaf5: 0x173a,
	0xaf6: 0x0fa6, 0xaf7: 0x173f, 0xaf8: 0x0fb2, 0xaf9: 0x16a4, 0xafa: 0x0fc2, 0xafb: 0x1744,
	0xafc: 0x1749, 0xafd: 0x174e, 0xafe: 0x062a, 0xaff: 0x062e,
	// Block 0x2c, offset 0xb00
	0xb00: 0x0ffa, 0xb01: 0x1758, 0xb02: 0x1753, 0xb03: 0x175d, 0xb04: 0x1762, 0xb05: 0x1002,
	0xb06: 0x1006, 0xb07: 0x1006, 0xb08: 0x100e, 0xb09: 0x0636, 0xb0a: 0x1012, 0xb0b: 0x063a,
	0xb0c: 0x063e, 0xb0d: 0x176c, 0xb0e: 0x1026, 0xb0f: 0x102e, 0xb10: 0x103a, 0xb11: 0x0642,
	0xb12: 0x1771, 0xb13: 0x105e, 0xb14: 0x1776, 0xb15: 0x177b, 0xb16: 0x107e, 0xb17: 0x1096,
	0xb18: 0x0646, 0xb19: 0x109e, 0xb1a: 0x10a2, 0xb1b: 0x10a6, 0xb1c: 0x1780, 0xb1d: 0x1785,
	0xb1e: 0x1785, 0xb1f: 0x10be, 0xb20: 0x064a, 0xb21: 0x178a, 0xb22: 0x10d2, 0xb23: 0x10d6,
	0xb24: 0x064e, 0xb25: 0x178f, 0xb26: 0x10f2, 0xb27: 0x0652, 0xb28: 0x1102, 0xb29: 0x10fa,
	0xb2a: 0x110a, 0xb2b: 0x1799, 0xb2c: 0x1122, 0xb2d: 0x0656, 0xb2e: 0x112e, 0xb2f: 0x1136,
	0xb30: 0x1146, 0xb31: 0x065a, 0xb32: 0x17a3, 0xb33: 0x17a8, 0xb34: 0x065e, 0xb35: 0x17ad,
	0xb36: 0x115e, 0xb37: 0x17b2, 0xb38: 0x116a, 0xb39: 0x1176, 0xb3a: 0x117e, 0xb3b: 0x17b7,
	0xb3c: 0x17bc, 0xb3d: 0x1192, 0xb3e: 0x17c1, 0xb3f: 0x119a,
	// Block 0x2d, offset 0xb40
	0xb40: 0x16d1, 0xb41: 0x0662, 0xb42: 0x11b2, 0xb43: 0x11b6, 0xb44: 0x066a, 0xb45: 0x11ba,
	0xb46: 0x0a36, 0xb47: 0x17c6, 0xb48: 0x17cb, 0xb49: 0x16d6, 0xb4a: 0x16db, 0xb4b: 0x11da,
	0xb4c: 0x11de, 0xb4d: 0x13f6, 0xb4e: 0x066e, 0xb4f: 0x120a, 0xb50: 0x1206, 0xb51: 0x120e,
	0xb52: 0x0842, 0xb53: 0x1212, 0xb54: 0x1216, 0xb55: 0x121a, 0xb56: 0x1222, 0xb57: 0x17d0,
	0xb58: 0x121e, 0xb59: 0x1226, 0xb5a: 0x123a, 0xb5b: 0x123e, 0xb5c: 0x122a, 0xb5d: 0x1242,
	0xb5e: 0x1256, 0xb5f: 0x126a, 0xb60: 0x1236, 0xb61: 0x124a, 0xb62: 0x124e, 0xb63: 0x1252,
	0xb64: 0x17d5, 0xb65: 0x17df, 0xb66: 0x17da, 0xb67: 0x0672, 0xb68: 0x1272, 0xb69: 0x1276,
	0xb6a: 0x127e, 0xb6b: 0x17f3, 0xb6c: 0x1282, 0xb6d: 0x17e4, 0xb6e: 0x0676, 0xb6f: 0x067a,
	0xb70: 0x17e9, 0xb71: 0x17ee, 0xb72: 0x067e, 0xb73: 0x12a2, 0xb74: 0x12a6, 0xb75: 0x12aa,
	0xb76: 0x12ae, 0xb77: 0x12ba, 0xb78: 0x12b6, 0xb79: 0x12c2, 0xb7a: 0x12be, 0xb7b: 0x12ce,
	0xb7c: 0x12c6, 0xb7d: 0x12ca, 0xb7e: 0x12d2, 0xb7f: 0x0682,
	// Block 0x2e, offset 0xb80
	0xb80: 0x12da, 0xb81: 0x12de, 0xb82: 0x0686, 0xb83: 0x12ee, 0xb84: 0x12f2, 0xb85: 0x17f8,
	0xb86: 0x12fe, 0xb87: 0x1302, 0xb88: 0x068a, 0xb89: 0x130e, 0xb8a: 0x05be, 0xb8b: 0x17fd,
	0xb8c: 0x1802, 0xb8d: 0x068e, 0xb8e: 0x0692, 0xb8f: 0x133a, 0xb90: 0x1352, 0xb91: 0x136e,
	0xb92: 0x137e, 0xb93: 0x1807, 0xb94: 0x1392, 0xb95: 0x1396, 0xb96: 0x13ae, 0xb97: 0x13ba,
	0xb98: 0x1811, 0xb99: 0x1663, 0xb9a: 0x13c6, 0xb9b: 0x13c2, 0xb9c: 0x13ce, 0xb9d: 0x1668,
	0xb9e: 0x13da, 0xb9f: 0x13e6, 0xba0: 0x1816, 0xba1: 0x181b, 0xba2: 0x1426, 0xba3: 0x1432,
	0xba4: 0x143a, 0xba5: 0x1820, 0xba6: 0x143e, 0xba7: 0x146a, 0xba8: 0x1476, 0xba9: 0x147a,
	0xbaa: 0x1472, 0xbab: 0x1486, 0xbac: 0x148a, 0xbad: 0x1825, 0xbae: 0x1496, 0xbaf: 0x0696,
	0xbb0: 0x149e, 0xbb1: 0x182a, 0xbb2: 0x069a, 0xbb3: 0x14d6, 0xbb4: 0x0ac6, 0xbb5: 0x14ee,
	0xbb6: 0x182f, 0xbb7: 0x1839, 0xbb8: 0x069e, 0xbb9: 0x06a2, 0xbba: 0x1516, 0xbbb: 0x183e,
	0xbbc: 0x06a6, 0xbbd: 0x1843, 0xbbe: 0x152e, 0xbbf: 0x152e,
	// Block 0x2f, offset 0xbc0
	0xbc0: 0x1536, 0xbc1: 0x1848, 0xbc2: 0x154e, 0xbc3: 0x06aa, 0xbc4: 0x155e, 0xbc5: 0x156a,
	0xbc6: 0x1572, 0xbc7: 0x157a, 0xbc8: 0x06ae, 0xbc9: 0x184d, 0xbca: 0x158e, 0xbcb: 0x15aa,
	0xbcc: 0x15b6, 0xbcd: 0x06b2, 0xbce: 0x06b6, 0xbcf: 0x15ba, 0xbd0: 0x1852, 0xbd1: 0x06ba,
	0xbd2: 0x1857, 0xbd3: 0x185c, 0xbd4: 0x1861, 0xbd5: 0x15de, 0xbd6: 0x06be, 0xbd7: 0x15f2,
	0xbd8: 0x15fa, 0xbd9: 0x15fe, 0xbda: 0x1606, 0xbdb: 0x160e, 0xbdc: 0x1616, 0xbdd: 0x186b,
}

// nfcIndex: 22 blocks, 1408 entries, 1408 bytes
// Block 0 is the zero block.
var nfcIndex = [1408]uint8{
	// Block 0x0, offset 0x0
	// Block 0x1, offset 0x40
	// Block 0x2, offset 0x80
	// Block 0x3, offset 0xc0
	0xc2: 0x2e, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x2f, 0xc7: 0x04,
	0xc8: 0x05, 0xca: 0x30, 0xcb: 0x31, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x32,
	0xd0: 0x09, 0xd1: 0x33, 0xd2: 0x34, 0xd3: 0x0a, 0xd6: 0x0b, 0xd7: 0x35,
	0xd8: 0x36, 0xd9: 0x0c, 0xdb: 0x37, 0xdc: 0x38, 0xdd: 0x39, 0xdf: 0x3a,
	0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05,
	0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a,
	0xf0: 0x13,
	// Block 0x4, offset 0x100
	0x120: 0x3b, 0x121: 0x3c, 0x123: 0x0d, 0x124: 0x3d, 0x125: 0x3e, 0x126: 0x3f, 0x127: 0x40,
	0x128: 0x41, 0x129: 0x42, 0x12a: 0x43, 0x12b: 0x44, 0x12c: 0x3f, 0x12d: 0x45, 0x12e: 0x46, 0x12f: 0x47,
	0x131: 0x48, 0x132: 0x49, 0x133: 0x4a, 0x134: 0x4b, 0x135: 0x4c, 0x137: 0x4d,
	0x138: 0x4e, 0x139: 0x4f, 0x13a: 0x50, 0x13b: 0x51, 0x13c: 0x52, 0x13d: 0x53, 0x13e: 0x54, 0x13f: 0x55,
	// Block 0x5, offset 0x140
	0x140: 0x56, 0x142: 0x57, 0x144: 0x58, 0x145: 0x59, 0x146: 0x5a, 0x147: 0x5b,
	0x14d: 0x5c,
	0x15c: 0x5d, 0x15f: 0x5e,
	0x162: 0x5f, 0x164: 0x60,
	0x168: 0x61, 0x169: 0x62, 0x16a: 0x63, 0x16b: 0x64, 0x16c: 0x0e, 0x16d: 0x65, 0x16e: 0x66, 0x16f: 0x67,
	0x170: 0x68, 0x173: 0x69, 0x177: 0x0f,
	0x178: 0x10, 0x179: 0x11, 0x17a: 0x12, 0x17b: 0x13, 0x17c: 0x14, 0x17d: 0x15, 0x17e: 0x16, 0x17f: 0x17,
	// Block 0x6, offset 0x180
	0x180: 0x6a, 0x183: 0x6b, 0x184: 0x6c, 0x186: 0x6d, 0x187: 0x6e,
	0x188: 0x6f, 0x189: 0x18, 0x18a: 0x19, 0x18b: 0x70, 0x18c: 0x71,
	0x1ab: 0x72,
	0x1b3: 0x73, 0x1b5: 0x74, 0x1b7: 0x75,
	// Block 0x7, offset 0x1c0
	0x1c0: 0x76, 0x1c1: 0x1a, 0x1c2: 0x1b, 0x1c3: 0x1c, 0x1c4: 0x77, 0x1c5: 0x78,
	0x1c9: 0x79, 0x1cc: 0x7a, 0x1cd: 0x7b,
	// Block 0x8, offset 0x200
	0x219: 0x7c, 0x21a: 0x7d, 0x21b: 0x7e,
	0x220: 0x7f, 0x223: 0x80, 0x224: 0x81, 0x225: 0x82, 0x226: 0x83, 0x227: 0x84,
	0x22a: 0x85, 0x22b: 0x86, 0x22f: 0x87,
	0x230: 0x88, 0x231: 0x89, 0x232: 0x8a, 0x233: 0x8b, 0x234: 0x8c, 0x235: 0x8d, 0x236: 0x8e, 0x237: 0x88,
	0x238: 0x89, 0x239: 0x8a, 0x23a: 0x8b, 0x23b: 0x8c, 0x23c: 0x8d, 0x23d: 0x8e, 0x23e: 0x88, 0x23f: 0x89,
	// Block 0x9, offset 0x240
	0x240: 0x8a, 0x241: 0x8b, 0x242: 0x8c, 0x243: 0x8d, 0x244: 0x8e, 0x245: 0x88, 0x246: 0x89, 0x247: 0x8a,
	0x248: 0x8b, 0x249: 0x8c, 0x24a: 0x8d, 0x24b: 0x8e, 0x24c: 0x88, 0x24d: 0x89, 0x24e: 0x8a, 0x24f: 0x8b,
	0x250: 0x8c, 0x251: 0x8d, 0x252: 0x8e, 0x253: 0x88, 0x254: 0x89, 0x255: 0x8a, 0x256: 0x8b, 0x257: 0x8c,
	0x258: 0x8d, 0x259: 0x8e, 0x25a: 0x88, 0x25b: 0x89, 0x25c: 0x8a, 0x25d: 0x8b, 0x25e: 0x8c, 0x25f: 0x8d,
	0x260: 0x8e, 0x261: 0x88, 0x262: 0x89, 0x263: 0x8a, 0x264: 0x8b, 0x265: 0x8c, 0x266: 0x8d, 0x267: 0x8e,
	0x268: 0x88, 0x269: 0x89, 0x26a: 0x8a, 0x26b: 0x8b, 0x26c: 0x8c, 0x26d: 0x8d, 0x26e: 0x8e, 0x26f: 0x88,
	0x270: 0x89, 0x271: 0x8a, 0x272: 0x8b, 0x273: 0x8c, 0x274: 0x8d, 0x275: 0x8e, 0x276: 0x88, 0x277: 0x89,
	0x278: 0x8a, 0x279: 0x8b, 0x27a: 0x8c, 0x27b: 0x8d, 0x27c: 0x8e, 0x27d: 0x88, 0x27e: 0x89, 0x27f: 0x8a,
	// Block 0xa, offset 0x280
	0x280: 0x8b, 0x281: 0x8c, 0x282: 0x8d, 0x283: 0x8e, 0x284: 0x88, 0x285: 0x89, 0x286: 0x8a, 0x287: 0x8b,
	0x288: 0x8c, 0x289: 0x8d, 0x28a: 0x8e, 0x28b: 0x88, 0x28c: 0x89, 0x28d: 0x8a, 0x28e: 0x8b, 0x28f: 0x8c,
	0x290: 0x8d, 0x291: 0x8e, 0x292: 0x88, 0x293: 0x89, 0x294: 0x8a, 0x295: 0x8b, 0x296: 0x8c, 0x297: 0x8d,
	0x298: 0x8e, 0x299: 0x88, 0x29a: 0x89, 0x29b: 0x8a, 0x29c: 0x8b, 0x29d: 0x8c, 0x29e: 0x8d, 0x29f: 0x8e,
	0x2a0: 0x88, 0x2a1: 0x89, 0x2a2: 0x8a, 0x2a3: 0x8b, 0x2a4: 0x8c, 0x2a5: 0x8d, 0x2a6: 0x8e, 0x2a7: 0x88,
	0x2a8: 0x89, 0x2a9: 0x8a, 0x2aa: 0x8b, 0x2ab: 0x8c, 0x2ac: 0x8d, 0x2ad: 0x8e, 0x2ae: 0x88, 0x2af: 0x89,
	0x2b0: 0x8a, 0x2b1: 0x8b, 0x2b2: 0x8c, 0x2b3: 0x8d, 0x2b4: 0x8e, 0x2b5: 0x88, 0x2b6: 0x89, 0x2b7: 0x8a,
	0x2b8: 0x8b, 0x2b9: 0x8c, 0x2ba: 0x8d, 0x2bb: 0x8e, 0x2bc: 0x88, 0x2bd: 0x89, 0x2be: 0x8a, 0x2bf: 0x8b,
	// Block 0xb, offset 0x2c0
	0x2c0: 0x8c, 0x2c1: 0x8d, 0x2c2: 0x8e, 0x2c3: 0x88, 0x2c4: 0x89, 0x2c5: 0x8a, 0x2c6: 0x8b, 0x2c7: 0x8c,
	0x2c8: 0x8d, 0x2c9: 0x8e, 0x2ca: 0x88, 0x2cb: 0x89, 0x2cc: 0x8a, 0x2cd: 0x8b, 0x2ce: 0x8c, 0x2cf: 0x8d,
	0x2d0: 0x8e, 0x2d1: 0x88, 0x2d2: 0x89, 0x2d3: 0x8a, 0x2d4: 0x8b, 0x2d5: 0x8c, 0x2d6: 0x8d, 0x2d7: 0x8e,
	0x2d8: 0x88, 0x2d9: 0x89, 0x2da: 0x8a, 0x2db: 0x8b, 0x2dc: 0x8c, 0x2dd: 0x8d, 0x2de: 0x8f,
	// Block 0xc, offset 0x300
	0x324: 0x1d, 0x325: 0x1e, 0x326: 0x1f, 0x327: 0x20,
	0x328: 0x21, 0x329: 0x22, 0x32a: 0x23, 0x32b: 0x24, 0x32c: 0x90, 0x32d: 0x91, 0x32e: 0x92,
	0x331: 0x93, 0x332: 0x94, 0x333: 0x95, 0x334: 0x96,
	0x338: 0x97, 0x339: 0x98, 0x33a: 0x99, 0x33b: 0x9a, 0x33e: 0x9b, 0x33f: 0x9c,
	// Block 0xd, offset 0x340
	0x347: 0x9d,
	0x34b: 0x9e, 0x34d: 0x9f,
	0x368: 0xa0, 0x36b: 0xa1,
	0x374: 0xa2,
	0x37a: 0xa3, 0x37d: 0xa4,
	// Block 0xe, offset 0x380
	0x381: 0xa5, 0x382: 0xa6, 0x384: 0xa7, 0x385: 0x83, 0x387: 0xa8,
	0x388: 0xa9, 0x38b: 0xaa, 0x38c: 0xab, 0x38d: 0xac,
	0x391: 0xad, 0x392: 0xae, 0x393: 0xaf, 0x396: 0xb0, 0x397: 0xb1,
	0x398: 0x74, 0x39a: 0xb2, 0x39c: 0xb3,
	0x3a0: 0xb4, 0x3a4: 0xb5, 0x3a5: 0xb6, 0x3a7: 0xb7,
	0x3a8: 0xb8, 0x3a9: 0xb9, 0x3aa: 0xba,
	0x3b0: 0x74, 0x3b5: 0xbb, 0x3b6: 0xbc,
	// Block 0xf, offset 0x3c0
	0x3eb: 0xbd, 0x3ec: 0xbe,
	0x3ff: 0xbf,
	// Block 0x10, offset 0x400
	0x432: 0xc0,
	// Block 0x11, offset 0x440
	0x445: 0xc1, 0x446: 0xc2, 0x447: 0xc3,
	0x449: 0xc4,
	// Block 0x12, offset 0x480
	0x480: 0xc5, 0x484: 0xbe,
	0x48b: 0xc6,
	0x4a3: 0xc7, 0x4a5: 0xc8,
	// Block 0x13, offset 0x4c0
	0x4c8: 0xc9,
	// Block 0x14, offset 0x500
	0x520: 0x25, 0x521: 0x26, 0x522: 0x27, 0x523: 0x28, 0x524: 0x29, 0x525: 0x2a, 0x526: 0x2b, 0x527: 0x2c,
	0x528: 0x2d,
	// Block 0x15, offset 0x540
	0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d,
	0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11,
	0x56f: 0x12,
}

// nfcSparseOffset: 156 entries, 312 bytes
var nfcSparseOffset = []uint16{0x0, 0x5, 0x9, 0xb, 0xd, 0x18, 0x28, 0x2a, 0x2f, 0x3a, 0x49, 0x56, 0x5e, 0x63, 0x68, 0x6a, 0x72, 0x79, 0x7c, 0x84, 0x88, 0x8c, 0x8e, 0x90, 0x99, 0x9d, 0xa4, 0xa9, 0xac, 0xb6, 0xb9, 0xc0, 0xc8, 0xcb, 0xcd, 0xd0, 0xd2, 0xd7, 0xe8, 0xf4, 0xf6, 0xfc, 0xfe, 0x100, 0x102, 0x104, 0x106, 0x108, 0x10b, 0x10e, 0x110, 0x113, 0x116, 0x11a, 0x120, 0x122, 0x12b, 0x12d, 0x130, 0x132, 0x13d, 0x141, 0x14f, 0x152, 0x158, 0x15e, 0x169, 0x16d, 0x16f, 0x171, 0x173, 0x175, 0x177, 0x17d, 0x181, 0x183, 0x185, 0x18d, 0x191, 0x194, 0x196, 0x198, 0x19b, 0x19e, 0x1a0, 0x1a2, 0x1a4, 0x1a6, 0x1ac, 0x1af, 0x1b1, 0x1b8, 0x1be, 0x1c4, 0x1cc, 0x1d2, 0x1d8, 0x1de, 0x1e2, 0x1f0, 0x1f9, 0x1fc, 0x1ff, 0x201, 0x204, 0x206, 0x20a, 0x20f, 0x211, 0x213, 0x218, 0x21e, 0x220, 0x222, 0x224, 0x22a, 0x22d, 0x22f, 0x231, 0x237, 0x23a, 0x242, 0x249, 0x24c, 0x24f, 0x251, 0x254, 0x25c, 0x260, 0x267, 0x26a, 0x270, 0x272, 0x275, 0x277, 0x27a, 0x27f, 0x281, 0x283, 0x285, 0x287, 0x289, 0x28c, 0x28e, 0x290, 0x292, 0x294, 0x296, 0x2a3, 0x2ad, 0x2af, 0x2b1, 0x2b7, 0x2b9, 0x2bb, 0x2be}

// nfcSparseValues: 704 entries, 2816 bytes
var nfcSparseValues = [704]valueRange{
	// Block 0x0, offset 0x0
	{value: 0x0000, lo: 0x04},
	{value: 0xa100, lo: 0xa8, hi: 0xa8},
	{value: 0x8100, lo: 0xaf, hi: 0xaf},
	{value: 0x8100, lo: 0xb4, hi: 0xb4},
	{value: 0x8100, lo: 0xb8, hi: 0xb8},
	// Block 0x1, offset 0x5
	{value: 0x0091, lo: 0x03},
	{value: 0x46f9, lo: 0xa0, hi: 0xa1},
	{value: 0x472b, lo: 0xaf, hi: 0xb0},
	{value: 0xa000, lo: 0xb7, hi: 0xb7},
	// Block 0x2, offset 0x9
	{value: 0x0000, lo: 0x01},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	// Block 0x3, offset 0xb
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0x98, hi: 0x9d},
	// Block 0x4, offset 0xd
	{value: 0x0006, lo: 0x0a},
	{value: 0xa000, lo: 0x81, hi: 0x81},
	{value: 0xa000, lo: 0x85, hi: 0x85},
	{value: 0xa000, lo: 0x89, hi: 0x89},
	{value: 0x4857, lo: 0x8a, hi: 0x8a},
	{value: 0x4875, lo: 0x8b, hi: 0x8b},
	{value: 0x36de, lo: 0x8c, hi: 0x8c},
	{value: 0x36f6, lo: 0x8d, hi: 0x8d},
	{value: 0x488d, lo: 0x8e, hi: 0x8e},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x3714, lo: 0x93, hi: 0x94},
	// Block 0x5, offset 0x18
	{value: 0x0000, lo: 0x0f},
	{value: 0xa000, lo: 0x83, hi: 0x83},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0xa000, lo: 0x8b, hi: 0x8b},
	{value: 0xa000, lo: 0x8d, hi: 0x8d},
	{value: 0x37bc, lo: 0x90, hi: 0x90},
	{value: 0x37c8, lo: 0x91, hi: 0x91},
	{value: 0x37b6, lo: 0x93, hi: 0x93},
	{value: 0xa000, lo: 0x96, hi: 0x96},
	{value: 0x382e, lo: 0x97, hi: 0x97},
	{value: 0x37f8, lo: 0x9c, hi: 0x9c},
	{value: 0x37e0, lo: 0x9d, hi: 0x9d},
	{value: 0x380a, lo: 0x9e, hi: 0x9e},
	{value: 0xa000, lo: 0xb4, hi: 0xb5},
	{value: 0x3834, lo: 0xb6, hi: 0xb6},
	{value: 0x383a, lo: 0xb7, hi: 0xb7},
	// Block 0x6, offset 0x28
	{value: 0x0000, lo: 0x01},
	{value: 0x8133, lo: 0x83, hi: 0x87},
	// Block 0x7, offset 0x2a
	{value: 0x0001, lo: 0x04},
	{value: 0x8114, lo: 0x81, hi: 0x82},
	{value: 0x8133, lo: 0x84, hi: 0x84},
	{value: 0x812e, lo: 0x85, hi: 0x85},
	{value: 0x810e, lo: 0x87, hi: 0x87},
	// Block 0x8, offset 0x2f
	{value: 0x0000, lo: 0x0a},
	{value: 0x8133, lo: 0x90, hi: 0x97},
	{value: 0x811a, lo: 0x98, hi: 0x98},
	{value: 0x811b, lo: 0x99, hi: 0x99},
	{value: 0x811c, lo: 0x9a, hi: 0x9a},
	{value: 0x3858, lo: 0xa2, hi: 0xa2},
	{value: 0x385e, lo: 0xa3, hi: 0xa3},
	{value: 0x386a, lo: 0xa4, hi: 0xa4},
	{value: 0x3864, lo: 0xa5, hi: 0xa5},
	{value: 0x3870, lo: 0xa6, hi: 0xa6},
	{value: 0xa000, lo: 0xa7, hi: 0xa7},
	// Block 0x9, offset 0x3a
	{value: 0x0000, lo: 0x0e},
	{value: 0x3882, lo: 0x80, hi: 0x80},
	{value: 0xa000, lo: 0x81, hi: 0x81},
	{value: 0x3876, lo: 0x82, hi: 0x82},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x387c, lo: 0x93, hi: 0x93},
	{value: 0xa000, lo: 0x95, hi: 0x95},
	{value: 0x8133, lo: 0x96, hi: 0x9c},
	{value: 0x8133, lo: 0x9f, hi: 0xa2},
	{value: 0x812e, lo: 0xa3, hi: 0xa3},
	{value: 0x8133, lo: 0xa4, hi: 0xa4},
	{value: 0x8133, lo: 0xa7, hi: 0xa8},
	{value: 0x812e, lo: 0xaa, hi: 0xaa},
	{value: 0x8133, lo: 0xab, hi: 0xac},
	{value: 0x812e, lo: 0xad, hi: 0xad},
	// Block 0xa, offset 0x49
	{value: 0x0000, lo: 0x0c},
	{value: 0x8120, lo: 0x91, hi: 0x91},
	{value: 0x8133, lo: 0xb0, hi: 0xb0},
	{value: 0x812e, lo: 0xb1, hi: 0xb1},
	{value: 0x8133, lo: 0xb2, hi: 0xb3},
	{value: 0x812e, lo: 0xb4, hi: 0xb4},
	{value: 0x8133, lo: 0xb5, hi: 0xb6},
	{value: 0x812e, lo: 0xb7, hi: 0xb9},
	{value: 0x8133, lo: 0xba, hi: 0xba},
	{value: 0x812e, lo: 0xbb, hi: 0xbc},
	{value: 0x8133, lo: 0xbd, hi: 0xbd},
	{value: 0x812e, lo: 0xbe, hi: 0xbe},
	{value: 0x8133, lo: 0xbf, hi: 0xbf},
	// Block 0xb, offset 0x56
	{value: 0x0005, lo: 0x07},
	{value: 0x8133, lo: 0x80, hi: 0x80},
	{value: 0x8133, lo: 0x81, hi: 0x81},
	{value: 0x812e, lo: 0x82, hi: 0x83},
	{value: 0x812e, lo: 0x84, hi: 0x85},
	{value: 0x812e, lo: 0x86, hi: 0x87},
	{value: 0x812e, lo: 0x88, hi: 0x89},
	{value: 0x8133, lo: 0x8a, hi: 0x8a},
	// Block 0xc, offset 0x5e
	{value: 0x0000, lo: 0x04},
	{value: 0x8133, lo: 0xab, hi: 0xb1},
	{value: 0x812e, lo: 0xb2, hi: 0xb2},
	{value: 0x8133, lo: 0xb3, hi: 0xb3},
	{value: 0x812e, lo: 0xbd, hi: 0xbd},
	// Block 0xd, offset 0x63
	{value: 0x0000, lo: 0x04},
	{value: 0x8133, lo: 0x96, hi: 0x99},
	{value: 0x8133, lo: 0x9b, hi: 0xa3},
	{value: 0x8133, lo: 0xa5, hi: 0xa7},
	{value: 0x8133, lo: 0xa9, hi: 0xad},
	// Block 0xe, offset 0x68
	{value: 0x0000, lo: 0x01},
	{value: 0x812e, lo: 0x99, hi: 0x9b},
	// Block 0xf, offset 0x6a
	{value: 0x0000, lo: 0x07},
	{value: 0xa000, lo: 0xa8, hi: 0xa8},
	{value: 0x3eef, lo: 0xa9, hi: 0xa9},
	{value: 0xa000, lo: 0xb0, hi: 0xb0},
	{value: 0x3ef7, lo: 0xb1, hi: 0xb1},
	{value: 0xa000, lo: 0xb3, hi: 0xb3},
	{value: 0x3eff, lo: 0xb4, hi: 0xb4},
	{value: 0x9903, lo: 0xbc, hi: 0xbc},
	// Block 0x10, offset 0x72
	{value: 0x0008, lo: 0x06},
	{value: 0x8105, lo: 0x8d, hi: 0x8d},
	{value: 0x8133, lo: 0x91, hi: 0x91},
	{value: 0x812e, lo: 0x92, hi: 0x92},
	{value: 0x8133, lo: 0x93, hi: 0x93},
	{value: 0x8133, lo: 0x94, hi: 0x94},
	{value: 0x4533, lo: 0x98, hi: 0x9f},
	// Block 0x11, offset 0x79
	{value: 0x0000, lo: 0x02},
	{value: 0x8103, lo: 0xbc, hi: 0xbc},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x12, offset 0x7c
	{value: 0x0008, lo: 0x07},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2cab, lo: 0x8b, hi: 0x8c},
	{value: 0x8105, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	{value: 0x4573, lo: 0x9c, hi: 0x9d},
	{value: 0x4583, lo: 0x9f, hi: 0x9f},
	{value: 0x8133, lo: 0xbe, hi: 0xbe},
	// Block 0x13, offset 0x84
	{value: 0x0000, lo: 0x03},
	{value: 0x45ab, lo: 0xb3, hi: 0xb3},
	{value: 0x45b3, lo: 0xb6, hi: 0xb6},
	{value: 0x8103, lo: 0xbc, hi: 0xbc},
	// Block 0x14, offset 0x88
	{value: 0x0008, lo: 0x03},
	{value: 0x8105, lo: 0x8d, hi: 0x8d},
	{value: 0x458b, lo: 0x99, hi: 0x9b},
	{value: 0x45a3, lo: 0x9e, hi: 0x9e},
	// Block 0x15, offset 0x8c
	{value: 0x0000, lo: 0x01},
	{value: 0x8103, lo: 0xbc, hi: 0xbc},
	// Block 0x16, offset 0x8e
	{value: 0x0000, lo: 0x01},
	{value: 0x8105, lo: 0x8d, hi: 0x8d},
	// Block 0x17, offset 0x90
	{value: 0x0000, lo: 0x08},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2cc3, lo: 0x88, hi: 0x88},
	{value: 0x2cbb, lo: 0x8b, hi: 0x8b},
	{value: 0x2ccb, lo: 0x8c, hi: 0x8c},
	{value: 0x8105, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x96, hi: 0x97},
	{value: 0x45bb, lo: 0x9c, hi: 0x9c},
	{value: 0x45c3, lo: 0x9d, hi: 0x9d},
	// Block 0x18, offset 0x99
	{value: 0x0000, lo: 0x03},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x2cd3, lo: 0x94, hi: 0x94},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x19, offset 0x9d
	{value: 0x0000, lo: 0x06},
	{value: 0xa000, lo: 0x86, hi: 0x87},
	{value: 0x2cdb, lo: 0x8a, hi: 0x8a},
	{value: 0x2ceb, lo: 0x8b, hi: 0x8b},
	{value: 0x2ce3, lo: 0x8c, hi: 0x8c},
	{value: 0x8105, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	// Block 0x1a, offset 0xa4
	{value: 0x1801, lo: 0x04},
	{value: 0xa000, lo: 0x86, hi: 0x86},
	{value: 0x3f07, lo: 0x88, hi: 0x88},
	{value: 0x8105, lo: 0x8d, hi: 0x8d},
	{value: 0x8121, lo: 0x95, hi: 0x96},
	// Block 0x1b, offset 0xa9
	{value: 0x0000, lo: 0x02},
	{value: 0x8103, lo: 0xbc, hi: 0xbc},
	{value: 0xa000, lo: 0xbf, hi: 0xbf},
	// Block 0x1c, offset 0xac
	{value: 0x0000, lo: 0x09},
	{value: 0x2cf3, lo: 0x80, hi: 0x80},
	{value: 0x9900, lo: 0x82, hi: 0x82},
	{value: 0xa000, lo: 0x86, hi: 0x86},
	{value: 0x2cfb, lo: 0x87, hi: 0x87},
	{value: 0x2d03, lo: 0x88, hi: 0x88},
	{value: 0x2f67, lo: 0x8a, hi: 0x8a},
	{value: 0x2def, lo: 0x8b, hi: 0x8b},
	{value: 0x8105, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x95, hi: 0x96},
	// Block 0x1d, offset 0xb6
	{value: 0x0000, lo: 0x02},
	{value: 0x8105, lo: 0xbb, hi: 0xbc},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x1e, offset 0xb9
	{value: 0x0000, lo: 0x06},
	{value: 0xa000, lo: 0x86, hi: 0x87},
	{value: 0x2d0b, lo: 0x8a, hi: 0x8a},
	{value: 0x2d1b, lo: 0x8b, hi: 0x8b},
	{value: 0x2d13, lo: 0x8c, hi: 0x8c},
	{value: 0x8105, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	// Block 0x1f, offset 0xc0
	{value: 0x6bdd, lo: 0x07},
	{value: 0x9905, lo: 0x8a, hi: 0x8a},
	{value: 0x9900, lo: 0x8f, hi: 0x8f},
	{value: 0xa000, lo: 0x99, hi: 0x99},
	{value: 0x3f0f, lo: 0x9a, hi: 0x9a},
	{value: 0x2f6f, lo: 0x9c, hi: 0x9c},
	{value: 0x2dfa, lo: 0x9d, hi: 0x9d},
	{value: 0x2d23, lo: 0x9e, hi: 0x9f},
	// Block 0x20, offset 0xc8
	{value: 0x0000, lo: 0x02},
	{value: 0x8123, lo: 0xb8, hi: 0xb9},
	{value: 0x8105, lo: 0xba, hi: 0xba},
	// Block 0x21, offset 0xcb
	{value: 0x0000, lo: 0x01},
	{value: 0x8124, lo: 0x88, hi: 0x8b},
	// Block 0x22, offset 0xcd
	{value: 0x0000, lo: 0x02},
	{value: 0x8125, lo: 0xb8, hi: 0xb9},
	{value: 0x8105, lo: 0xba, hi: 0xba},
	// Block 0x23, offset 0xd0
	{value: 0x0000, lo: 0x01},
	{value: 0x8126, lo: 0x88, hi: 0x8b},
	// Block 0x24, offset 0xd2
	{value: 0x0000, lo: 0x04},
	{value: 0x812e, lo: 0x98, hi: 0x99},
	{value: 0x812e, lo: 0xb5, hi: 0xb5},
	{value: 0x812e, lo: 0xb7, hi: 0xb7},
	{value: 0x812c, lo: 0xb9, hi: 0xb9},
	// Block 0x25, offset 0xd7
	{value: 0x0000, lo: 0x10},
	{value: 0x264a, lo: 0x83, hi: 0x83},
	{value: 0x2651, lo: 0x8d, hi: 0x8d},
	{value: 0x2658, lo: 0x92, hi: 0x92},
	{value: 0x265f, lo: 0x97, hi: 0x97},
	{value: 0x2666, lo: 0x9c, hi: 0x9c},
	{value: 0x2643, lo: 0xa9, hi: 0xa9},
	{value: 0x8127, lo: 0xb1, hi: 0xb1},
	{value: 0x8128, lo: 0xb2, hi: 0xb2},
	{value: 0x4a9b, lo: 0xb3, hi: 0xb3},
	{value: 0x8129, lo: 0xb4, hi: 0xb4},
	{value: 0x4aa4, lo: 0xb5, hi: 0xb5},
	{value: 0x45cb, lo: 0xb6, hi: 0xb6},
	{value: 0x8200, lo: 0xb7, hi: 0xb7},
	{value: 0x45d3, lo: 0xb8, hi: 0xb8},
	{value: 0x8200, lo: 0xb9, hi: 0xb9},
	{value: 0x8128, lo: 0xba, hi: 0xbd},
	// Block 0x26, offset 0xe8
	{value: 0x0000, lo: 0x0b},
	{value: 0x8128, lo: 0x80, hi: 0x80},
	{value: 0x4aad, lo: 0x81, hi: 0x81},
	{value: 0x8133, lo: 0x82, hi: 0x83},
	{value: 0x8105, lo: 0x84, hi: 0x84},
	{value: 0x8133, lo: 0x86, hi: 0x87},
	{value: 0x2674, lo: 0x93, hi: 0x93},
	{value: 0x267b, lo: 0x9d, hi: 0x9d},
	{value: 0x2682, lo: 0xa2, hi: 0xa2},
	{value: 0x2689, lo: 0xa7, hi: 0xa7},
	{value: 0x2690, lo: 0xac, hi: 0xac},
	{value: 0x266d, lo: 0xb9, hi: 0xb9},
	// Block 0x27, offset 0xf4
	{value: 0x0000, lo: 0x01},
	{value: 0x812e, lo: 0x86, hi: 0x86},
	// Block 0x28, offset 0xf6
	{value: 0x0000, lo: 0x05},
	{value: 0xa000, lo: 0xa5, hi: 0xa5},
	{value: 0x2d2b, lo: 0xa6, hi: 0xa6},
	{value: 0x9900, lo: 0xae, hi: 0xae},
	{value: 0x8103, lo: 0xb7, hi: 0xb7},
	{value: 0x8105, lo: 0xb9, hi: 0xba},
	// Block 0x29, offset 0xfc
	{value: 0x0000, lo: 0x01},
	{value: 0x812e, lo: 0x8d, hi: 0x8d},
	// Block 0x2a, offset 0xfe
	{value: 0x0000, lo: 0x01},
	{value: 0xa000, lo: 0x80, hi: 0x92},
	// Block 0x2b, offset 0x100
	{value: 0x0000, lo: 0x01},
	{value: 0xb900, lo: 0xa1, hi: 0xb5},
	// Block 0x2c, offset 0x102
	{value: 0x0000, lo: 0x01},
	{value: 0x9900, lo: 0xa8, hi: 0xbf},
	// Block 0x2d, offset 0x104
	{value: 0x0000, lo: 0x01},
	{value: 0x9900, lo: 0x80, hi: 0x82},
	// Block 0x2e, offset 0x106
	{value: 0x0000, lo: 0x01},
	{value: 0x8133, lo: 0x9d, hi: 0x9f},
	// Block 0x2f, offset 0x108
	{value: 0x0000, lo: 0x02},
	{value: 0x8105, lo: 0x94, hi: 0x94},
	{value: 0x8105, lo: 0xb4, hi: 0xb4},
	// Block 0x30, offset 0x10b
	{value: 0x0000, lo: 0x02},
	{value: 0x8105, lo: 0x92, hi: 0x92},
	{value: 0x8133, lo: 0x9d, hi: 0x9d},
	// Block 0x31, offset 0x10e
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xa9, hi: 0xa9},
	// Block 0x32, offset 0x110
	{value: 0x0004, lo: 0x02},
	{value: 0x812f, lo: 0xb9, hi: 0xba},
	{value: 0x812e, lo: 0xbb, hi: 0xbb},
	// Block 0x33, offset 0x113
	{value: 0x0000, lo: 0x02},
	{value: 0x8133, lo: 0x97, hi: 0x97},
	{value: 0x812e, lo: 0x98, hi: 0x98},
	// Block 0x34, offset 0x116
	{value: 0x0000, lo: 0x03},
	{value: 0x8105, lo: 0xa0, hi: 0xa0},
	{value: 0x8133, lo: 0xb5, hi: 0xbc},
	{value: 0x812e, lo: 0xbf, hi: 0xbf},
	// Block 0x35, offset 0x11a
	{value: 0x0000, lo: 0x05},
	{value: 0x8133, lo: 0xb0, hi: 0xb4},
	{value: 0x812e, lo: 0xb5, hi: 0xba},
	{value: 0x8133, lo: 0xbb, hi: 0xbc},
	{value: 0x812e, lo: 0xbd, hi: 0xbd},
	{value: 0x812e, lo: 0xbf, hi: 0xbf},
	// Block 0x36, offset 0x120
	{value: 0x0000, lo: 0x01},
	{value: 0x812e, lo: 0x80, hi: 0x80},
	// Block 0x37, offset 0x122
	{value: 0x0000, lo: 0x08},
	{value: 0x2d73, lo: 0x80, hi: 0x80},
	{value: 0x2d7b, lo: 0x81, hi: 0x81},
	{value: 0xa000, lo: 0x82, hi: 0x82},
	{value: 0x2d83, lo: 0x83, hi: 0x83},
	{value: 0x8105, lo: 0x84, hi: 0x84},
	{value: 0x8133, lo: 0xab, hi: 0xab},
	{value: 0x812e, lo: 0xac, hi: 0xac},
	{value: 0x8133, lo: 0xad, hi: 0xb3},
	// Block 0x38, offset 0x12b
	{value: 0x0000, lo: 0x01},
	{value: 0x8105, lo: 0xaa, hi: 0xab},
	// Block 0x39, offset 0x12d
	{value: 0x0000, lo: 0x02},
	{value: 0x8103, lo: 0xa6, hi: 0xa6},
	{value: 0x8105, lo: 0xb2, hi: 0xb3},
	// Block 0x3a, offset 0x130
	{value: 0x0000, lo: 0x01},
	{value: 0x8103, lo: 0xb7, hi: 0xb7},
	// Block 0x3b, offset 0x132
	{value: 0x0000, lo: 0x0a},
	{value: 0x8133, lo: 0x90, hi: 0x92},
	{value: 0x8101, lo: 0x94, hi: 0x94},
	{value: 0x812e, lo: 0x95, hi: 0x99},
	{value: 0x8133, lo: 0x9a, hi: 0x9b},
	{value: 0x812e, lo: 0x9c, hi: 0x9f},
	{value: 0x8133, lo: 0xa0, hi: 0xa0},
	{value: 0x8101, lo: 0xa2, hi: 0xa8},
	{value: 0x812e, lo: 0xad, hi: 0xad},
	{value: 0x8133, lo: 0xb4, hi: 0xb4},
	{value: 0x8133, lo: 0xb8, hi: 0xb9},
	// Block 0x3c, offset 0x13d
	{value: 0x0004, lo: 0x03},
	{value: 0x0436, lo: 0x80, hi: 0x81},
	{value: 0x8100, lo: 0x97, hi: 0x97},
	{value: 0x8100, lo: 0xbe, hi: 0xbe},
	// Block 0x3d, offset 0x141
	{value: 0x0000, lo: 0x0d},
	{value: 0x8133, lo: 0x90, hi: 0x91},
	{value: 0x8101, lo: 0x92, hi: 0x93},
	{value: 0x8133, lo: 0x94, hi: 0x97},
	{value: 0x8101, lo: 0x98, hi: 0x9a},
	{value: 0x8133, lo: 0x9b, hi: 0x9c},
	{value: 0x8133, lo: 0xa1, hi: 0xa1},
	{value: 0x8101, lo: 0xa5, hi: 0xa6},
	{value: 0x8133, lo: 0xa7, hi: 0xa7},
	{value: 0x812e, lo: 0xa8, hi: 0xa8},
	{value: 0x8133, lo: 0xa9, hi: 0xa9},
	{value: 0x8101, lo: 0xaa, hi: 0xab},
	{value: 0x812e, lo: 0xac, hi: 0xaf},
	{value: 0x8133, lo: 0xb0, hi: 0xb0},
	// Block 0x3e, offset 0x14f
	{value: 0x4292, lo: 0x02},
	{value: 0x01bb, lo: 0xa6, hi: 0xa6},
	{value: 0x0057, lo: 0xaa, hi: 0xab},
	// Block 0x3f, offset 0x152
	{value: 0x0007, lo: 0x05},
	{value: 0xa000, lo: 0x90, hi: 0x90},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0xa000, lo: 0x94, hi: 0x94},
	{value: 0x3bd0, lo: 0x9a, hi: 0x9b},
	{value: 0x3bde, lo: 0xae, hi: 0xae},
	// Block 0x40, offset 0x158
	{value: 0x000e, lo: 0x05},
	{value: 0x3be5, lo: 0x8d, hi: 0x8e},
	{value: 0x3bec, lo: 0x8f, hi: 0x8f},
	{value: 0xa000, lo: 0x90, hi: 0x90},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0xa000, lo: 0x94, hi: 0x94},
	// Block 0x41, offset 0x15e
	{value: 0x63f1, lo: 0x0a},
	{value: 0xa000, lo: 0x83, hi: 0x83},
	{value: 0x3bfa, lo: 0x84, hi: 0x84},
	{value: 0xa000, lo: 0x88, hi: 0x88},
	{value: 0x3c01, lo: 0x89, hi: 0x89},
	{value: 0xa000, lo: 0x8b, hi: 0x8b},
	{value: 0x3c08, lo: 0x8c, hi: 0x8c},
	{value: 0xa000, lo: 0xa3, hi: 0xa3},
	{value: 0x3c0f, lo: 0xa4, hi: 0xa5},
	{value: 0x3c16, lo: 0xa6, hi: 0xa6},
	{value: 0xa000, lo: 0xbc, hi: 0xbc},
	// Block 0x42, offset 0x169
	{value: 0x0007, lo: 0x03},
	{value: 0x3c7f, lo: 0xa0, hi: 0xa1},
	{value: 0x3ca9, lo: 0xa2, hi: 0xa3},
	{value: 0x3cd3, lo: 0xaa, hi: 0xad},
	// Block 0x43, offset 0x16d
	{value: 0x0004, lo: 0x01},
	{value: 0x048e, lo: 0xa9, hi: 0xaa},
	// Block 0x44, offset 0x16f
	{value: 0x0000, lo: 0x01},
	{value: 0x44f4, lo: 0x9c, hi: 0x9c},
	// Block 0x45, offset 0x171
	{value: 0x0000, lo: 0x01},
	{value: 0x8133, lo: 0xaf, hi: 0xb1},
	// Block 0x46, offset 0x173
	{value: 0x0000, lo: 0x01},
	{value: 0x8105, lo: 0xbf, hi: 0xbf},
	// Block 0x47, offset 0x175
	{value: 0x0000, lo: 0x01},
	{value: 0x8133, lo: 0xa0, hi: 0xbf},
	// Block 0x48, offset 0x177
	{value: 0x0000, lo: 0x05},
	{value: 0x812d, lo: 0xaa, hi: 0xaa},
	{value: 0x8132, lo: 0xab, hi: 0xab},
	{value: 0x8134, lo: 0xac, hi: 0xac},
	{value: 0x812f, lo: 0xad, hi: 0xad},
	{value: 0x8130, lo: 0xae, hi: 0xaf},
	// Block 0x49, offset 0x17d
	{value: 0x0000, lo: 0x03},
	{value: 0x4ab6, lo: 0xb3, hi: 0xb3},
	{value: 0x4ab6, lo: 0xb5, hi: 0xb6},
	{value: 0x4ab6, lo: 0xba, hi: 0xbf},
	// Block 0x4a, offset 0x181
	{value: 0x0000, lo: 0x01},
	{value: 0x4ab6, lo: 0x8f, hi: 0xa3},
	// Block 0x4b, offset 0x183
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0xae, hi: 0xbe},
	// Block 0x4c, offset 0x185
	{value: 0x0000, lo: 0x07},
	{value: 0x8100, lo: 0x84, hi: 0x84},
	{value: 0x8100, lo: 0x87, hi: 0x87},
	{value: 0x8100, lo: 0x90, hi: 0x90},
	{value: 0x8100, lo: 0x9e, hi: 0x9e},
	{value: 0x8100, lo: 0xa1, hi: 0xa1},
	{value: 0x8100, lo: 0xb2, hi: 0xb2},
	{value: 0x8100, lo: 0xbb, hi: 0xbb},
	// Block 0x4d, offset 0x18d
	{value: 0x0000, lo: 0x03},
	{value: 0x8100, lo: 0x80, hi: 0x80},
	{value: 0x8100, lo: 0x8b, hi: 0x8b},
	{value: 0x8100, lo: 0x8e, hi: 0x8e},
	// Block 0x4e, offset 0x191
	{value: 0x0000, lo: 0x02},
	{value: 0x8133, lo: 0xaf, hi: 0xaf},
	{value: 0x8133, lo: 0xb4, hi: 0xbd},
	// Block 0x4f, offset 0x194
	{value: 0x0000, lo: 0x01},
	{value: 0x8133, lo: 0x9e, hi: 0x9f},
	// Block 0x50, offset 0x196
	{value: 0x0000, lo: 0x01},
	{value: 0x8133, lo: 0xb0, hi: 0xb1},
	// Block 0x51, offset 0x198
	{value: 0x0000, lo: 0x02},
	{value: 0x8105, lo: 0x86, hi: 0x86},
	{value: 0x8105, lo: 0xac, hi: 0xac},
	// Block 0x52, offset 0x19b
	{value: 0x0000, lo: 0x02},
	{value: 0x8105, lo: 0x84, hi: 0x84},
	{value: 0x8133, lo: 0xa0, hi: 0xb1},
	// Block 0x53, offset 0x19e
	{value: 0x0000, lo: 0x01},
	{value: 0x812e, lo: 0xab, hi: 0xad},
	// Block 0x54, offset 0x1a0
	{value: 0x0000, lo: 0x01},
	{value: 0x8105, lo: 0x93, hi: 0x93},
	// Block 0x55, offset 0x1a2
	{value: 0x0000, lo: 0x01},
	{value: 0x8103, lo: 0xb3, hi: 0xb3},
	// Block 0x56, offset 0x1a4
	{value: 0x0000, lo: 0x01},
	{value: 0x8105, lo: 0x80, hi: 0x80},
	// Block 0x57, offset 0x1a6
	{value: 0x0000, lo: 0x05},
	{value: 0x8133, lo: 0xb0, hi: 0xb0},
	{value: 0x8133, lo: 0xb2, hi: 0xb3},
	{value: 0x812e, lo: 0xb4, hi: 0xb4},
	{value: 0x8133, lo: 0xb7, hi: 0xb8},
	{value: 0x8133, lo: 0xbe, hi: 0xbf},
	// Block 0x58, offset 0x1ac
	{value: 0x0000, lo: 0x02},
	{value: 0x8133, lo: 0x81, hi: 0x81},
	{value: 0x8105, lo: 0xb6, hi: 0xb6},
	// Block 0x59, offset 0x1af
	{value: 0x0000, lo: 0x01},
	{value: 0x8105, lo: 0xad, hi: 0xad},
	// Block 0x5a, offset 0x1b1
	{value: 0x0000, lo: 0x06},
	{value: 0xe500, lo: 0x80, hi: 0x80},
	{value: 0xc600, lo: 0x81, hi: 0x9b},
	{value: 0xe500, lo: 0x9c, hi: 0x9c},
	{value: 0xc600, lo: 0x9d, hi: 0xb7},
	{value: 0xe500, lo: 0xb8, hi: 0xb8},
	{value: 0xc600, lo: 0xb9, hi: 0xbf},
	// Block 0x5b, offset 0x1b8
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x93},
	{value: 0xe500, lo: 0x94, hi: 0x94},
	{value: 0xc600, lo: 0x95, hi: 0xaf},
	{value: 0xe500, lo: 0xb0, hi: 0xb0},
	{value: 0xc600, lo: 0xb1, hi: 0xbf},
	// Block 0x5c, offset 0x1be
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x8b},
	{value: 0xe500, lo: 0x8c, hi: 0x8c},
	{value: 0xc600, lo: 0x8d, hi: 0xa7},
	{value: 0xe500, lo: 0xa8, hi: 0xa8},
	{value: 0xc600, lo: 0xa9, hi: 0xbf},
	// Block 0x5d, offset 0x1c4
	{value: 0x0000, lo: 0x07},
	{value: 0xc600, lo: 0x80, hi: 0x83},
	{value: 0xe500, lo: 0x84, hi: 0x84},
	{value: 0xc600, lo: 0x85, hi: 0x9f},
	{value: 0xe500, lo: 0xa0, hi: 0xa0},
	{value: 0xc600, lo: 0xa1, hi: 0xbb},
	{value: 0xe500, lo: 0xbc, hi: 0xbc},
	{value: 0xc600, lo: 0xbd, hi: 0xbf},
	// Block 0x5e, offset 0x1cc
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x97},
	{value: 0xe500, lo: 0x98, hi: 0x98},
	{value: 0xc600, lo: 0x99, hi: 0xb3},
	{value: 0xe500, lo: 0xb4, hi: 0xb4},
	{value: 0xc600, lo: 0xb5, hi: 0xbf},
	// Block 0x5f, offset 0x1d2
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x8f},
	{value: 0xe500, lo: 0x90, hi: 0x90},
	{value: 0xc600, lo: 0x91, hi: 0xab},
	{value: 0xe500, lo: 0xac, hi: 0xac},
	{value: 0xc600, lo: 0xad, hi: 0xbf},
	// Block 0x60, offset 0x1d8
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x87},
	{value: 0xe500, lo: 0x88, hi: 0x88},
	{value: 0xc600, lo: 0x89, hi: 0xa3},
	{value: 0xe500, lo: 0xa4, hi: 0xa4},
	{value: 0xc600, lo: 0xa5, hi: 0xbf},
	// Block 0x61, offset 0x1de
	{value: 0x0000, lo: 0x03},
	{value: 0xc600, lo: 0x80, hi: 0x87},
	{value: 0xe500, lo: 0x88, hi: 0x88},
	{value: 0xc600, lo: 0x89, hi: 0xa3},
	// Block 0x62, offset 0x1e2
	{value: 0x0006, lo: 0x0d},
	{value: 0x43a7, lo: 0x9d, hi: 0x9d},
	{value: 0x8116, lo: 0x9e, hi: 0x9e},
	{value: 0x4419, lo: 0x9f, hi: 0x9f},
	{value: 0x4407, lo: 0xaa, hi: 0xab},
	{value: 0x450b, lo: 0xac, hi: 0xac},
	{value: 0x4513, lo: 0xad, hi: 0xad},
	{value: 0x435f, lo: 0xae, hi: 0xb1},
	{value: 0x437d, lo: 0xb2, hi: 0xb4},
	{value: 0x4395, lo: 0xb5, hi: 0xb6},
	{value: 0x43a1, lo: 0xb8, hi: 0xb8},
	{value: 0x43ad, lo: 0xb9, hi: 0xbb},
	{value: 0x43c5, lo: 0xbc, hi: 0xbc},
	{value: 0x43cb, lo: 0xbe, hi: 0xbe},
	// Block 0x63, offset 0x1f0
	{value: 0x0006, lo: 0x08},
	{value: 0x43d1, lo: 0x80, hi: 0x81},
	{value: 0x43dd, lo: 0x83, hi: 0x84},
	{value: 0x43ef, lo: 0x86, hi: 0x89},
	{value: 0x4413, lo: 0x8a, hi: 0x8a},
	{value: 0x438f, lo: 0x8b, hi: 0x8b},
	{value: 0x4377, lo: 0x8c, hi: 0x8c},
	{value: 0x43bf, lo: 0x8d, hi: 0x8d},
	{value: 0x43e9, lo: 0x8e, hi: 0x8e},
	// Block 0x64, offset 0x1f9
	{value: 0x0000, lo: 0x02},
	{value: 0x8100, lo: 0xa4, hi: 0xa5},
	{value: 0x8100, lo: 0xb0, hi: 0xb1},
	// Block 0x65, offset 0x1fc
	{value: 0x0000, lo: 0x02},
	{value: 0x8100, lo: 0x9b, hi: 0x9d},
	{value: 0x8200, lo: 0x9e, hi: 0xa3},
	// Block 0x66, offset 0x1ff
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0x90, hi: 0x90},
	// Block 0x67, offset 0x201
	{value: 0x0000, lo: 0x02},
	{value: 0x8100, lo: 0x99, hi: 0x99},
	{value: 0x8200, lo: 0xb2, hi: 0xb4},
	// Block 0x68, offset 0x204
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0xbc, hi: 0xbd},
	// Block 0x69, offset 0x206
	{value: 0x0000, lo: 0x03},
	{value: 0x8133, lo: 0xa0, hi: 0xa6},
	{value: 0x812e, lo: 0xa7, hi: 0xad},
	{value: 0x8133, lo: 0xae, hi: 0xaf},
	// Block 0x6a, offset 0x20a
	{value: 0x0000, lo: 0x04},
	{value: 0x8100, lo: 0x89, hi: 0x8c},
	{value: 0x8100, lo: 0xb0, hi: 0xb2},
	{value: 0x8100, lo: 0xb4, hi: 0xb4},
	{value: 0x8100, lo: 0xb6, hi: 0xbf},
	// Block 0x6b, offset 0x20f
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0x81, hi: 0x8c},
	// Block 0x6c, offset 0x211
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0xb5, hi: 0xba},
	// Block 0x6d, offset 0x213
	{value: 0x0000, lo: 0x04},
	{value: 0x4ab6, lo: 0x9e, hi: 0x9f},
	{value: 0x4ab6, lo: 0xa3, hi: 0xa3},
	{value: 0x4ab6, lo: 0xa5, hi: 0xa6},
	{value: 0x4ab6, lo: 0xaa, hi: 0xaf},
	// Block 0x6e, offset 0x218
	{value: 0x0000, lo: 0x05},
	{value: 0x4ab6, lo: 0x82, hi: 0x87},
	{value: 0x4ab6, lo: 0x8a, hi: 0x8f},
	{value: 0x4ab6, lo: 0x92, hi: 0x97},
	{value: 0x4ab6, lo: 0x9a, hi: 0x9c},
	{value: 0x8100, lo: 0xa3, hi: 0xa3},
	// Block 0x6f, offset 0x21e
	{value: 0x0000, lo: 0x01},
	{value: 0x812e, lo: 0xbd, hi: 0xbd},
	// Block 0x70, offset 0x220
	{value: 0x0000, lo: 0x01},
	{value: 0x812e, lo: 0xa0, hi: 0xa0},
	// Block 0x71, offset 0x222
	{value: 0x0000, lo: 0x01},
	{value: 0x8133, lo: 0xb6, hi: 0xba},
	// Block 0x72, offset 0x224
	{value: 0x002d, lo: 0x05},
	{value: 0x812e, lo: 0x8d, hi: 0x8d},
	{value: 0x8133, lo: 0x8f, hi: 0x8f},
	{value: 0x8133, lo: 0xb8, hi: 0xb8},
	{value: 0x8101, lo: 0xb9, hi: 0xba},
	{value: 0x8105, lo: 0xbf, hi: 0xbf},
	// Block 0x73, offset 0x22a
	{value: 0x0000, lo: 0x02},
	{value: 0x8133, lo: 0xa5, hi: 0xa5},
	{value: 0x812e, lo: 0xa6, hi: 0xa6},
	// Block 0x74, offset 0x22d
	{value: 0x0000, lo: 0x01},
	{value: 0x8133, lo: 0xa4, hi: 0xa7},
	// Block 0x75, offset 0x22f
	{value: 0x0000, lo: 0x01},
	{value: 0x8133, lo: 0xab, hi: 0xac},
	// Block 0x76, offset 0x231
	{value: 0x0000, lo: 0x05},
	{value: 0x812e, lo: 0x86, hi: 0x87},
	{value: 0x8133, lo: 0x88, hi: 0x8a},
	{value: 0x812e, lo: 0x8b, hi: 0x8b},
	{value: 0x8133, lo: 0x8c, hi: 0x8c},
	{value: 0x812e, lo: 0x8d, hi: 0x90},
	// Block 0x77, offset 0x237
	{value: 0x0000, lo: 0x02},
	{value: 0x8105, lo: 0x86, hi: 0x86},
	{value: 0x8105, lo: 0xbf, hi: 0xbf},
	// Block 0x78, offset 0x23a
	{value: 0x17fe, lo: 0x07},
	{value: 0xa000, lo: 0x99, hi: 0x99},
	{value: 0x424f, lo: 0x9a, hi: 0x9a},
	{value: 0xa000, lo: 0x9b, hi: 0x9b},
	{value: 0x4259, lo: 0x9c, hi: 0x9c},
	{value: 0xa000, lo: 0xa5, hi: 0xa5},
	{value: 0x4263, lo: 0xab, hi: 0xab},
	{value: 0x8105, lo: 0xb9, hi: 0xba},
	// Block 0x79, offset 0x242
	{value: 0x0000, lo: 0x06},
	{value: 0x8133, lo: 0x80, hi: 0x82},
	{value: 0x9900, lo: 0xa7, hi: 0xa7},
	{value: 0x2d8b, lo: 0xae, hi: 0xae},
	{value: 0x2d95, lo: 0xaf, hi: 0xaf},
	{value: 0xa000, lo: 0xb1, hi: 0xb2},
	{value: 0x8105, lo: 0xb3, hi: 0xb4},
	// Block 0x7a, offset 0x249
	{value: 0x0000, lo: 0x02},
	{value: 0x8105, lo: 0x80, hi: 0x80},
	{value: 0x8103, lo: 0x8a, hi: 0x8a},
	// Block 0x7b, offset 0x24c
	{value: 0x0000, lo: 0x02},
	{value: 0x8105, lo: 0xb5, hi: 0xb5},
	{value: 0x8103, lo: 0xb6, hi: 0xb6},
	// Block 0x7c, offset 0x24f
	{value: 0x0002, lo: 0x01},
	{value: 0x8103, lo: 0xa9, hi: 0xaa},
	// Block 0x7d, offset 0x251
	{value: 0x0000, lo: 0x02},
	{value: 0x8103, lo: 0xbb, hi: 0xbc},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x7e, offset 0x254
	{value: 0x0000, lo: 0x07},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2d9f, lo: 0x8b, hi: 0x8b},
	{value: 0x2da9, lo: 0x8c, hi: 0x8c},
	{value: 0x8105, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	{value: 0x8133, lo: 0xa6, hi: 0xac},
	{value: 0x8133, lo: 0xb0, hi: 0xb4},
	// Block 0x7f, offset 0x25c
	{value: 0x0000, lo: 0x03},
	{value: 0x8105, lo: 0x82, hi: 0x82},
	{value: 0x8103, lo: 0x86, hi: 0x86},
	{value: 0x8133, lo: 0x9e, hi: 0x9e},
	// Block 0x80, offset 0x260
	{value: 0x6b4d, lo: 0x06},
	{value: 0x9900, lo: 0xb0, hi: 0xb0},
	{value: 0xa000, lo: 0xb9, hi: 0xb9},
	{value: 0x9900, lo: 0xba, hi: 0xba},
	{value: 0x2dbd, lo: 0xbb, hi: 0xbb},
	{value: 0x2db3, lo: 0xbc, hi: 0xbd},
	{value: 0x2dc7, lo: 0xbe, hi: 0xbe},
	// Block 0x81, offset 0x267
	{value: 0x0000, lo: 0x02},
	{value: 0x8105, lo: 0x82, hi: 0x82},
	{value: 0x8103, lo: 0x83, hi: 0x83},
	// Block 0x82, offset 0x26a
	{value: 0x0000, lo: 0x05},
	{value: 0x9900, lo: 0xaf, hi: 0xaf},
	{value: 0xa000, lo: 0xb8, hi: 0xb9},
	{value: 0x2dd1, lo: 0xba, hi: 0xba},
	{value: 0x2ddb, lo: 0xbb, hi: 0xbb},
	{value: 0x8105, lo: 0xbf, hi: 0xbf},
	// Block 0x83, offset 0x270
	{value: 0x0000, lo: 0x01},
	{value: 0x8103, lo: 0x80, hi: 0x80},
	// Block 0x84, offset 0x272
	{value: 0x0000, lo: 0x02},
	{value: 0x8105, lo: 0xb6, hi: 0xb6},
	{value: 0x8103, lo: 0xb7, hi: 0xb7},
	// Block 0x85, offset 0x275
	{value: 0x0000, lo: 0x01},
	{value: 0x8105, lo: 0xab, hi: 0xab},
	// Block 0x86, offset 0x277
	{value: 0x0000, lo: 0x02},
	{value: 0x8105, lo: 0xb9, hi: 0xb9},
	{value: 0x8103, lo: 0xba, hi: 0xba},
	// Block 0x87, offset 0x27a
	{value: 0x0000, lo: 0x04},
	{value: 0x9900, lo: 0xb0, hi: 0xb0},
	{value: 0xa000, lo: 0xb5, hi: 0xb5},
	{value: 0x2de5, lo: 0xb8, hi: 0xb8},
	{value: 0x8105, lo: 0xbd, hi: 0xbe},
	// Block 0x88, offset 0x27f
	{value: 0x0000, lo: 0x01},
	{value: 0x8103, lo: 0x83, hi: 0x83},
	// Block 0x89, offset 0x281
	{value: 0x0000, lo: 0x01},
	{value: 0x8105, lo: 0xa0, hi: 0xa0},
	// Block 0x8a, offset 0x283
	{value: 0x0000, lo: 0x01},
	{value: 0x8105, lo: 0xb4, hi: 0xb4},
	// Block 0x8b, offset 0x285
	{value: 0x0000, lo: 0x01},
	{value: 0x8105, lo: 0x87, hi: 0x87},
	// Block 0x8c, offset 0x287
	{value: 0x0000, lo: 0x01},
	{value: 0x8105, lo: 0x99, hi: 0x99},
	// Block 0x8d, offset 0x289
	{value: 0x0000, lo: 0x02},
	{value: 0x8103, lo: 0x82, hi: 0x82},
	{value: 0x8105, lo: 0x84, hi: 0x85},
	// Block 0x8e, offset 0x28c
	{value: 0x0000, lo: 0x01},
	{value: 0x8105, lo: 0x97, hi: 0x97},
	// Block 0x8f, offset 0x28e
	{value: 0x0000, lo: 0x01},
	{value: 0x8101, lo: 0xb0, hi: 0xb4},
	// Block 0x90, offset 0x290
	{value: 0x0000, lo: 0x01},
	{value: 0x8133, lo: 0xb0, hi: 0xb6},
	// Block 0x91, offset 0x292
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0xb0, hi: 0xb1},
	// Block 0x92, offset 0x294
	{value: 0x0000, lo: 0x01},
	{value: 0x8101, lo: 0x9e, hi: 0x9e},
	// Block 0x93, offset 0x296
	{value: 0x0000, lo: 0x0c},
	{value: 0x45e3, lo: 0x9e, hi: 0x9e},
	{value: 0x45ed, lo: 0x9f, hi: 0x9f},
	{value: 0x4621, lo: 0xa0, hi: 0xa0},
	{value: 0x462f, lo: 0xa1, hi: 0xa1},
	{value: 0x463d, lo: 0xa2, hi: 0xa2},
	{value: 0x464b, lo: 0xa3, hi: 0xa3},
	{value: 0x4659, lo: 0xa4, hi: 0xa4},
	{value: 0x812c, lo: 0xa5, hi: 0xa6},
	{value: 0x8101, lo: 0xa7, hi: 0xa9},
	{value: 0x8131, lo: 0xad, hi: 0xad},
	{value: 0x812c, lo: 0xae, hi: 0xb2},
	{value: 0x812e, lo: 0xbb, hi: 0xbf},
	// Block 0x94, offset 0x2a3
	{value: 0x0000, lo: 0x09},
	{value: 0x812e, lo: 0x80, hi: 0x82},
	{value: 0x8133, lo: 0x85, hi: 0x89},
	{value: 0x812e, lo: 0x8a, hi: 0x8b},
	{value: 0x8133, lo: 0xaa, hi: 0xad},
	{value: 0x45f7, lo: 0xbb, hi: 0xbb},
	{value: 0x4601, lo: 0xbc, hi: 0xbc},
	{value: 0x4667, lo: 0xbd, hi: 0xbd},
	{value: 0x4683, lo: 0xbe, hi: 0xbe},
	{value: 0x4675, lo: 0xbf, hi: 0xbf},
	// Block 0x95, offset 0x2ad
	{value: 0x0000, lo: 0x01},
	{value: 0x4691, lo: 0x80, hi: 0x80},
	// Block 0x96, offset 0x2af
	{value: 0x0000, lo: 0x01},
	{value: 0x8133, lo: 0x82, hi: 0x84},
	// Block 0x97, offset 0x2b1
	{value: 0x0000, lo: 0x05},
	{value: 0x8133, lo: 0x80, hi: 0x86},
	{value: 0x8133, lo: 0x88, hi: 0x98},
	{value: 0x8133, lo: 0x9b, hi: 0xa1},
	{value: 0x8133, lo: 0xa3, hi: 0xa4},
	{value: 0x8133, lo: 0xa6, hi: 0xaa},
	// Block 0x98, offset 0x2b7
	{value: 0x0000, lo: 0x01},
	{value: 0x8133, lo: 0xac, hi: 0xaf},
	// Block 0x99, offset 0x2b9
	{value: 0x0000, lo: 0x01},
	{value: 0x812e, lo: 0x90, hi: 0x96},
	// Block 0x9a, offset 0x2bb
	{value: 0x0000, lo: 0x02},
	{value: 0x8133, lo: 0x84, hi: 0x89},
	{value: 0x8103, lo: 0x8a, hi: 0x8a},
	// Block 0x9b, offset 0x2be
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0x93, hi: 0x93},
}

// lookup returns the trie value for the first UTF-8 encoding in s and
// the width in bytes of this encoding. The size will be 0 if s does not
// hold enough bytes to complete the encoding. len(s) must be greater than 0.
func (t *nfkcTrie) lookup(s []byte) (v uint16, sz int) {
	c0 := s[0]
	switch {
	case c0 < 0x80: // is ASCII
		return nfkcValues[c0], 1
	case c0 < 0xC2:
		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
	case c0 < 0xE0: // 2-byte UTF-8
		if len(s) < 2 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c1), 2
	case c0 < 0xF0: // 3-byte UTF-8
		if len(s) < 3 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfkcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c2), 3
	case c0 < 0xF8: // 4-byte UTF-8
		if len(s) < 4 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfkcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		o = uint32(i)<<6 + uint32(c2)
		i = nfkcIndex[o]
		c3 := s[3]
		if c3 < 0x80 || 0xC0 <= c3 {
			return 0, 3 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c3), 4
	}
	// Illegal rune
	return 0, 1
}

// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.
// s must start with a full and valid UTF-8 encoded rune.
func (t *nfkcTrie) lookupUnsafe(s []byte) uint16 {
	c0 := s[0]
	if c0 < 0x80 { // is ASCII
		return nfkcValues[c0]
	}
	i := nfkcIndex[c0]
	if c0 < 0xE0 { // 2-byte UTF-8
		return t.lookupValue(uint32(i), s[1])
	}
	i = nfkcIndex[uint32(i)<<6+uint32(s[1])]
	if c0 < 0xF0 { // 3-byte UTF-8
		return t.lookupValue(uint32(i), s[2])
	}
	i = nfkcIndex[uint32(i)<<6+uint32(s[2])]
	if c0 < 0xF8 { // 4-byte UTF-8
		return t.lookupValue(uint32(i), s[3])
	}
	return 0
}

// lookupString returns the trie value for the first UTF-8 encoding in s and
// the width in bytes of this encoding. The size will be 0 if s does not
// hold enough bytes to complete the encoding. len(s) must be greater than 0.
func (t *nfkcTrie) lookupString(s string) (v uint16, sz int) {
	c0 := s[0]
	switch {
	case c0 < 0x80: // is ASCII
		return nfkcValues[c0], 1
	case c0 < 0xC2:
		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
	case c0 < 0xE0: // 2-byte UTF-8
		if len(s) < 2 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c1), 2
	case c0 < 0xF0: // 3-byte UTF-8
		if len(s) < 3 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfkcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c2), 3
	case c0 < 0xF8: // 4-byte UTF-8
		if len(s) < 4 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfkcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		o = uint32(i)<<6 + uint32(c2)
		i = nfkcIndex[o]
		c3 := s[3]
		if c3 < 0x80 || 0xC0 <= c3 {
			return 0, 3 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c3), 4
	}
	// Illegal rune
	return 0, 1
}

// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.
// s must start with a full and valid UTF-8 encoded rune.
func (t *nfkcTrie) lookupStringUnsafe(s string) uint16 {
	c0 := s[0]
	if c0 < 0x80 { // is ASCII
		return nfkcValues[c0]
	}
	i := nfkcIndex[c0]
	if c0 < 0xE0 { // 2-byte UTF-8
		return t.lookupValue(uint32(i), s[1])
	}
	i = nfkcIndex[uint32(i)<<6+uint32(s[1])]
	if c0 < 0xF0 { // 3-byte UTF-8
		return t.lookupValue(uint32(i), s[2])
	}
	i = nfkcIndex[uint32(i)<<6+uint32(s[2])]
	if c0 < 0xF8 { // 4-byte UTF-8
		return t.lookupValue(uint32(i), s[3])
	}
	return 0
}

// nfkcTrie. Total size: 18768 bytes (18.33 KiB). Checksum: c51186dd2412943d.
type nfkcTrie struct{}

func newNfkcTrie(i int) *nfkcTrie {
	return &nfkcTrie{}
}

// lookupValue determines the type of block n and looks up the value for b.
func (t *nfkcTrie) lookupValue(n uint32, b byte) uint16 {
	switch {
	case n < 92:
		return uint16(nfkcValues[n<<6+uint32(b)])
	default:
		n -= 92
		return uint16(nfkcSparse.lookup(n, b))
	}
}

// nfkcValues: 94 blocks, 6016 entries, 12032 bytes
// The third block is the zero block.
var nfkcValues = [6016]uint16{
	// Block 0x0, offset 0x0
	0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000,
	// Block 0x1, offset 0x40
	0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000,
	0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000,
	0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000,
	0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000,
	0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000,
	0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000,
	0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000,
	0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000,
	0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000,
	0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000,
	// Block 0x2, offset 0x80
	// Block 0x3, offset 0xc0
	0xc0: 0x2f86, 0xc1: 0x2f8b, 0xc2: 0x469f, 0xc3: 0x2f90, 0xc4: 0x46ae, 0xc5: 0x46b3,
	0xc6: 0xa000, 0xc7: 0x46bd, 0xc8: 0x2ff9, 0xc9: 0x2ffe, 0xca: 0x46c2, 0xcb: 0x3012,
	0xcc: 0x3085, 0xcd: 0x308a, 0xce: 0x308f, 0xcf: 0x46d6, 0xd1: 0x311b,
	0xd2: 0x313e, 0xd3: 0x3143, 0xd4: 0x46e0, 0xd5: 0x46e5, 0xd6: 0x46f4,
	0xd8: 0xa000, 0xd9: 0x31ca, 0xda: 0x31cf, 0xdb: 0x31d4, 0xdc: 0x4726, 0xdd: 0x324c,
	0xe0: 0x3292, 0xe1: 0x3297, 0xe2: 0x4730, 0xe3: 0x329c,
	0xe4: 0x473f, 0xe5: 0x4744, 0xe6: 0xa000, 0xe7: 0x474e, 0xe8: 0x3305, 0xe9: 0x330a,
	0xea: 0x4753, 0xeb: 0x331e, 0xec: 0x3396, 0xed: 0x339b, 0xee: 0x33a0, 0xef: 0x4767,
	0xf1: 0x342c, 0xf2: 0x344f, 0xf3: 0x3454, 0xf4: 0x4771, 0xf5: 0x4776,
	0xf6: 0x4785, 0xf8: 0xa000, 0xf9: 0x34e0, 0xfa: 0x34e5, 0xfb: 0x34ea,
	0xfc: 0x47b7, 0xfd: 0x3567, 0xff: 0x3580,
	// Block 0x4, offset 0x100
	0x100: 0x2f95, 0x101: 0x32a1, 0x102: 0x46a4, 0x103: 0x4735, 0x104: 0x2fb3, 0x105: 0x32bf,
	0x106: 0x2fc7, 0x107: 0x32d3, 0x108: 0x2fcc, 0x109: 0x32d8, 0x10a: 0x2fd1, 0x10b: 0x32dd,
	0x10c: 0x2fd6, 0x10d: 0x32e2, 0x10e: 0x2fe0, 0x10f: 0x32ec,
	0x112: 0x46c7, 0x113: 0x4758, 0x114: 0x3008, 0x115: 0x3314, 0x116: 0x300d, 0x117: 0x3319,
	0x118: 0x302b, 0x119: 0x3337, 0x11a: 0x301c, 0x11b: 0x3328, 0x11c: 0x3044, 0x11d: 0x3350,
	0x11e: 0x304e, 0x11f: 0x335a, 0x120: 0x3053, 0x121: 0x335f, 0x122: 0x305d, 0x123: 0x3369,
	0x124: 0x3062, 0x125: 0x336e, 0x128: 0x3094, 0x129: 0x33a5,
	0x12a: 0x3099, 0x12b: 0x33aa, 0x12c: 0x309e, 0x12d: 0x33af, 0x12e: 0x30c1, 0x12f: 0x33cd,
	0x130: 0x30a3, 0x132: 0x1960, 0x133: 0x19ed, 0x134: 0x30cb, 0x135: 0x33d7,
	0x136: 0x30df, 0x137: 0x33f0, 0x139: 0x30e9, 0x13a: 0x33fa, 0x13b: 0x30f3,
	0x13c: 0x3404, 0x13d: 0x30ee, 0x13e: 0x33ff, 0x13f: 0x1bb2,
	// Block 0x5, offset 0x140
	0x140: 0x1c3a, 0x143: 0x3116, 0x144: 0x3427, 0x145: 0x312f,
	0x146: 0x3440, 0x147: 0x3125, 0x148: 0x3436, 0x149: 0x1c62,
	0x14c: 0x46ea, 0x14d: 0x477b, 0x14e: 0x3148, 0x14f: 0x3459, 0x150: 0x3152, 0x151: 0x3463,
	0x154: 0x3170, 0x155: 0x3481, 0x156: 0x3189, 0x157: 0x349a,
	0x158: 0x317a, 0x159: 0x348b, 0x15a: 0x470d, 0x15b: 0x479e, 0x15c: 0x3193, 0x15d: 0x34a4,
	0x15e: 0x31a2, 0x15f: 0x34b3, 0x160: 0x4712, 0x161: 0x47a3, 0x162: 0x31bb, 0x163: 0x34d1,
	0x164: 0x31ac, 0x165: 0x34c2, 0x168: 0x471c, 0x169: 0x47ad,
	0x16a: 0x4721, 0x16b: 0x47b2, 0x16c: 0x31d9, 0x16d: 0x34ef, 0x16e: 0x31e3, 0x16f: 0x34f9,
	0x170: 0x31e8, 0x171: 0x34fe, 0x172: 0x3206, 0x173: 0x351c, 0x174: 0x3229, 0x175: 0x353f,
	0x176: 0x3251, 0x177: 0x356c, 0x178: 0x3265, 0x179: 0x3274, 0x17a: 0x3594, 0x17b: 0x327e,
	0x17c: 0x359e, 0x17d: 0x3283, 0x17e: 0x35a3, 0x17f: 0x00a7,
	// Block 0x6, offset 0x180
	0x184: 0x2e05, 0x185: 0x2e0b,
	0x186: 0x2e11, 0x187: 0x1975, 0x188: 0x1978, 0x189: 0x1a0e, 0x18a: 0x198d, 0x18b: 0x1990,
	0x18c: 0x1a44, 0x18d: 0x2f9f, 0x18e: 0x32ab, 0x18f: 0x30ad, 0x190: 0x33b9, 0x191: 0x3157,
	0x192: 0x3468, 0x193: 0x31ed, 0x194: 0x3503, 0x195: 0x39e6, 0x196: 0x3b75, 0x197: 0x39df,
	0x198: 0x3b6e, 0x199: 0x39ed, 0x19a: 0x3b7c, 0x19b: 0x39d8, 0x19c: 0x3b67,
	0x19e: 0x38c7, 0x19f: 0x3a56, 0x1a0: 0x38c0, 0x1a1: 0x3a4f, 0x1a2: 0x35ca, 0x1a3: 0x35dc,
	0x1a6: 0x3058, 0x1a7: 0x3364, 0x1a8: 0x30d5, 0x1a9: 0x33e6,
	0x1aa: 0x4703, 0x1ab: 0x4794, 0x1ac: 0x39a7, 0x1ad: 0x3b36, 0x1ae: 0x35ee, 0x1af: 0x35f4,
	0x1b0: 0x33dc, 0x1b1: 0x1945, 0x1b2: 0x1948, 0x1b3: 0x19d5, 0x1b4: 0x303f, 0x1b5: 0x334b,
	0x1b8: 0x3111, 0x1b9: 0x3422, 0x1ba: 0x38ce, 0x1bb: 0x3a5d,
	0x1bc: 0x35c4, 0x1bd: 0x35d6, 0x1be: 0x35d0, 0x1bf: 0x35e2,
	// Block 0x7, offset 0x1c0
	0x1c0: 0x2fa4, 0x1c1: 0x32b0, 0x1c2: 0x2fa9, 0x1c3: 0x32b5, 0x1c4: 0x3021, 0x1c5: 0x332d,
	0x1c6: 0x3026, 0x1c7: 0x3332, 0x1c8: 0x30b2, 0x1c9: 0x33be, 0x1ca: 0x30b7, 0x1cb: 0x33c3,
	0x1cc: 0x315c, 0x1cd: 0x346d, 0x1ce: 0x3161, 0x1cf: 0x3472, 0x1d0: 0x317f, 0x1d1: 0x3490,
	0x1d2: 0x3184, 0x1d3: 0x3495, 0x1d4: 0x31f2, 0x1d5: 0x3508, 0x1d6: 0x31f7, 0x1d7: 0x350d,
	0x1d8: 0x319d, 0x1d9: 0x34ae, 0x1da: 0x31b6, 0x1db: 0x34cc,
	0x1de: 0x3071, 0x1df: 0x337d,
	0x1e6: 0x46a9, 0x1e7: 0x473a, 0x1e8: 0x46d1, 0x1e9: 0x4762,
	0x1ea: 0x3976, 0x1eb: 0x3b05, 0x1ec: 0x3953, 0x1ed: 0x3ae2, 0x1ee: 0x46ef, 0x1ef: 0x4780,
	0x1f0: 0x396f, 0x1f1: 0x3afe, 0x1f2: 0x325b, 0x1f3: 0x3576,
	// Block 0x8, offset 0x200
	0x200: 0x9933, 0x201: 0x9933, 0x202: 0x9933, 0x203: 0x9933, 0x204: 0x9933, 0x205: 0x8133,
	0x206: 0x9933, 0x207: 0x9933, 0x208: 0x9933, 0x209: 0x9933, 0x20a: 0x9933, 0x20b: 0x9933,
	0x20c: 0x9933, 0x20d: 0x8133, 0x20e: 0x8133, 0x20f: 0x9933, 0x210: 0x8133, 0x211: 0x9933,
	0x212: 0x8133, 0x213: 0x9933, 0x214: 0x9933, 0x215: 0x8134, 0x216: 0x812e, 0x217: 0x812e,
	0x218: 0x812e, 0x219: 0x812e, 0x21a: 0x8134, 0x21b: 0x992c, 0x21c: 0x812e, 0x21d: 0x812e,
	0x21e: 0x812e, 0x21f: 0x812e, 0x220: 0x812e, 0x221: 0x812a, 0x222: 0x812a, 0x223: 0x992e,
	0x224: 0x992e, 0x225: 0x992e, 0x226: 0x992e, 0x227: 0x992a, 0x228: 0x992a, 0x229: 0x812e,
	0x22a: 0x812e, 0x22b: 0x812e, 0x22c: 0x812e, 0x22d: 0x992e, 0x22e: 0x992e, 0x22f: 0x812e,
	0x230: 0x992e, 0x231: 0x992e, 0x232: 0x812e, 0x233: 0x812e, 0x234: 0x8101, 0x235: 0x8101,
	0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812e, 0x23a: 0x812e, 0x23b: 0x812e,
	0x23c: 0x812e, 0x23d: 0x8133, 0x23e: 0x8133, 0x23f: 0x8133,
	// Block 0x9, offset 0x240
	0x240: 0x49c5, 0x241: 0x49ca, 0x242: 0x9933, 0x243: 0x49cf, 0x244: 0x4a88, 0x245: 0x9937,
	0x246: 0x8133, 0x247: 0x812e, 0x248: 0x812e, 0x249: 0x812e, 0x24a: 0x8133, 0x24b: 0x8133,
	0x24c: 0x8133, 0x24d: 0x812e, 0x24e: 0x812e, 0x250: 0x8133, 0x251: 0x8133,
	0x252: 0x8133, 0x253: 0x812e, 0x254: 0x812e, 0x255: 0x812e, 0x256: 0x812e, 0x257: 0x8133,
	0x258: 0x8134, 0x259: 0x812e, 0x25a: 0x812e, 0x25b: 0x8133, 0x25c: 0x8135, 0x25d: 0x8136,
	0x25e: 0x8136, 0x25f: 0x8135, 0x260: 0x8136, 0x261: 0x8136, 0x262: 0x8135, 0x263: 0x8133,
	0x264: 0x8133, 0x265: 0x8133, 0x266: 0x8133, 0x267: 0x8133, 0x268: 0x8133, 0x269: 0x8133,
	0x26a: 0x8133, 0x26b: 0x8133, 0x26c: 0x8133, 0x26d: 0x8133, 0x26e: 0x8133, 0x26f: 0x8133,
	0x274: 0x0173,
	0x27a: 0x42bc,
	0x27e: 0x0037,
	// Block 0xa, offset 0x280
	0x284: 0x4271, 0x285: 0x4492,
	0x286: 0x3600, 0x287: 0x00ce, 0x288: 0x361e, 0x289: 0x362a, 0x28a: 0x363c,
	0x28c: 0x365a, 0x28e: 0x366c, 0x28f: 0x368a, 0x290: 0x3e1f, 0x291: 0xa000,
	0x295: 0xa000, 0x297: 0xa000,
	0x299: 0xa000,
	0x29f: 0xa000, 0x2a1: 0xa000,
	0x2a5: 0xa000, 0x2a9: 0xa000,
	0x2aa: 0x364e, 0x2ab: 0x367e, 0x2ac: 0x4815, 0x2ad: 0x36ae, 0x2ae: 0x483f, 0x2af: 0x36c0,
	0x2b0: 0x3e87, 0x2b1: 0xa000, 0x2b5: 0xa000,
	0x2b7: 0xa000, 0x2b9: 0xa000,
	0x2bf: 0xa000,
	// Block 0xb, offset 0x2c0
	0x2c1: 0xa000, 0x2c5: 0xa000,
	0x2c9: 0xa000, 0x2ca: 0x4857, 0x2cb: 0x4875,
	0x2cc: 0x36de, 0x2cd: 0x36f6, 0x2ce: 0x488d, 0x2d0: 0x01c1, 0x2d1: 0x01d3,
	0x2d2: 0x01af, 0x2d3: 0x4323, 0x2d4: 0x4329, 0x2d5: 0x01fd, 0x2d6: 0x01eb,
	0x2f0: 0x01d9, 0x2f1: 0x01ee, 0x2f2: 0x01f1, 0x2f4: 0x018b, 0x2f5: 0x01ca,
	0x2f9: 0x01a9,
	// Block 0xc, offset 0x300
	0x300: 0x3738, 0x301: 0x3744, 0x303: 0x3732,
	0x306: 0xa000, 0x307: 0x3720,
	0x30c: 0x3774, 0x30d: 0x375c, 0x30e: 0x3786, 0x310: 0xa000,
	0x313: 0xa000, 0x315: 0xa000, 0x316: 0xa000, 0x317: 0xa000,
	0x318: 0xa000, 0x319: 0x3768, 0x31a: 0xa000,
	0x31e: 0xa000, 0x323: 0xa000,
	0x327: 0xa000,
	0x32b: 0xa000, 0x32d: 0xa000,
	0x330: 0xa000, 0x333: 0xa000, 0x335: 0xa000,
	0x336: 0xa000, 0x337: 0xa000, 0x338: 0xa000, 0x339: 0x37ec, 0x33a: 0xa000,
	0x33e: 0xa000,
	// Block 0xd, offset 0x340
	0x341: 0x374a, 0x342: 0x37ce,
	0x350: 0x3726, 0x351: 0x37aa,
	0x352: 0x372c, 0x353: 0x37b0, 0x356: 0x373e, 0x357: 0x37c2,
	0x358: 0xa000, 0x359: 0xa000, 0x35a: 0x3840, 0x35b: 0x3846, 0x35c: 0x3750, 0x35d: 0x37d4,
	0x35e: 0x3756, 0x35f: 0x37da, 0x362: 0x3762, 0x363: 0x37e6,
	0x364: 0x376e, 0x365: 0x37f2, 0x366: 0x377a, 0x367: 0x37fe, 0x368: 0xa000, 0x369: 0xa000,
	0x36a: 0x384c, 0x36b: 0x3852, 0x36c: 0x37a4, 0x36d: 0x3828, 0x36e: 0x3780, 0x36f: 0x3804,
	0x370: 0x378c, 0x371: 0x3810, 0x372: 0x3792, 0x373: 0x3816, 0x374: 0x3798, 0x375: 0x381c,
	0x378: 0x379e, 0x379: 0x3822,
	// Block 0xe, offset 0x380
	0x387: 0x1d67,
	0x391: 0x812e,
	0x392: 0x8133, 0x393: 0x8133, 0x394: 0x8133, 0x395: 0x8133, 0x396: 0x812e, 0x397: 0x8133,
	0x398: 0x8133, 0x399: 0x8133, 0x39a: 0x812f, 0x39b: 0x812e, 0x39c: 0x8133, 0x39d: 0x8133,
	0x39e: 0x8133, 0x39f: 0x8133, 0x3a0: 0x8133, 0x3a1: 0x8133, 0x3a2: 0x812e, 0x3a3: 0x812e,
	0x3a4: 0x812e, 0x3a5: 0x812e, 0x3a6: 0x812e, 0x3a7: 0x812e, 0x3a8: 0x8133, 0x3a9: 0x8133,
	0x3aa: 0x812e, 0x3ab: 0x8133, 0x3ac: 0x8133, 0x3ad: 0x812f, 0x3ae: 0x8132, 0x3af: 0x8133,
	0x3b0: 0x8106, 0x3b1: 0x8107, 0x3b2: 0x8108, 0x3b3: 0x8109, 0x3b4: 0x810a, 0x3b5: 0x810b,
	0x3b6: 0x810c, 0x3b7: 0x810d, 0x3b8: 0x810e, 0x3b9: 0x810f, 0x3ba: 0x810f, 0x3bb: 0x8110,
	0x3bc: 0x8111, 0x3bd: 0x8112, 0x3bf: 0x8113,
	// Block 0xf, offset 0x3c0
	0x3c8: 0xa000, 0x3ca: 0xa000, 0x3cb: 0x8117,
	0x3cc: 0x8118, 0x3cd: 0x8119, 0x3ce: 0x811a, 0x3cf: 0x811b, 0x3d0: 0x811c, 0x3d1: 0x811d,
	0x3d2: 0x811e, 0x3d3: 0x9933, 0x3d4: 0x9933, 0x3d5: 0x992e, 0x3d6: 0x812e, 0x3d7: 0x8133,
	0x3d8: 0x8133, 0x3d9: 0x8133, 0x3da: 0x8133, 0x3db: 0x8133, 0x3dc: 0x812e, 0x3dd: 0x8133,
	0x3de: 0x8133, 0x3df: 0x812e,
	0x3f0: 0x811f, 0x3f5: 0x1d8a,
	0x3f6: 0x2019, 0x3f7: 0x2055, 0x3f8: 0x2050,
	// Block 0x10, offset 0x400
	0x413: 0x812e, 0x414: 0x8133, 0x415: 0x8133, 0x416: 0x8133, 0x417: 0x8133,
	0x418: 0x8133, 0x419: 0x8133, 0x41a: 0x8133, 0x41b: 0x8133, 0x41c: 0x8133, 0x41d: 0x8133,
	0x41e: 0x8133, 0x41f: 0x8133, 0x420: 0x8133, 0x421: 0x8133, 0x423: 0x812e,
	0x424: 0x8133, 0x425: 0x8133, 0x426: 0x812e, 0x427: 0x8133, 0x428: 0x8133, 0x429: 0x812e,
	0x42a: 0x8133, 0x42b: 0x8133, 0x42c: 0x8133, 0x42d: 0x812e, 0x42e: 0x812e, 0x42f: 0x812e,
	0x430: 0x8117, 0x431: 0x8118, 0x432: 0x8119, 0x433: 0x8133, 0x434: 0x8133, 0x435: 0x8133,
	0x436: 0x812e, 0x437: 0x8133, 0x438: 0x8133, 0x439: 0x812e, 0x43a: 0x812e, 0x43b: 0x8133,
	0x43c: 0x8133, 0x43d: 0x8133, 0x43e: 0x8133, 0x43f: 0x8133,
	// Block 0x11, offset 0x440
	0x445: 0xa000,
	0x446: 0x2d33, 0x447: 0xa000, 0x448: 0x2d3b, 0x449: 0xa000, 0x44a: 0x2d43, 0x44b: 0xa000,
	0x44c: 0x2d4b, 0x44d: 0xa000, 0x44e: 0x2d53, 0x451: 0xa000,
	0x452: 0x2d5b,
	0x474: 0x8103, 0x475: 0x9900,
	0x47a: 0xa000, 0x47b: 0x2d63,
	0x47c: 0xa000, 0x47d: 0x2d6b, 0x47e: 0xa000, 0x47f: 0xa000,
	// Block 0x12, offset 0x480
	0x480: 0x0069, 0x481: 0x006b, 0x482: 0x006f, 0x483: 0x0083, 0x484: 0x00f5, 0x485: 0x00f8,
	0x486: 0x0416, 0x487: 0x0085, 0x488: 0x0089, 0x489: 0x008b, 0x48a: 0x0104, 0x48b: 0x0107,
	0x48c: 0x010a, 0x48d: 0x008f, 0x48f: 0x0097, 0x490: 0x009b, 0x491: 0x00e0,
	0x492: 0x009f, 0x493: 0x00fe, 0x494: 0x041a, 0x495: 0x041e, 0x496: 0x00a1, 0x497: 0x00a9,
	0x498: 0x00ab, 0x499: 0x0426, 0x49a: 0x012b, 0x49b: 0x00ad, 0x49c: 0x042a, 0x49d: 0x01c1,
	0x49e: 0x01c4, 0x49f: 0x01c7, 0x4a0: 0x01fd, 0x4a1: 0x0200, 0x4a2: 0x0093, 0x4a3: 0x00a5,
	0x4a4: 0x00ab, 0x4a5: 0x00ad, 0x4a6: 0x01c1, 0x4a7: 0x01c4, 0x4a8: 0x01ee, 0x4a9: 0x01fd,
	0x4aa: 0x0200,
	0x4b8: 0x020f,
	// Block 0x13, offset 0x4c0
	0x4db: 0x00fb, 0x4dc: 0x0087, 0x4dd: 0x0101,
	0x4de: 0x00d4, 0x4df: 0x010a, 0x4e0: 0x008d, 0x4e1: 0x010d, 0x4e2: 0x0110, 0x4e3: 0x0116,
	0x4e4: 0x011c, 0x4e5: 0x011f, 0x4e6: 0x0122, 0x4e7: 0x042e, 0x4e8: 0x016d, 0x4e9: 0x0128,
	0x4ea: 0x0432, 0x4eb: 0x0170, 0x4ec: 0x0131, 0x4ed: 0x012e, 0x4ee: 0x0134, 0x4ef: 0x0137,
	0x4f0: 0x013a, 0x4f1: 0x013d, 0x4f2: 0x0140, 0x4f3: 0x014c, 0x4f4: 0x014f, 0x4f5: 0x00ec,
	0x4f6: 0x0152, 0x4f7: 0x0155, 0x4f8: 0x0422, 0x4f9: 0x0158, 0x4fa: 0x015b, 0x4fb: 0x00b5,
	0x4fc: 0x0161, 0x4fd: 0x0164, 0x4fe: 0x0167, 0x4ff: 0x01d3,
	// Block 0x14, offset 0x500
	0x500: 0x8133, 0x501: 0x8133, 0x502: 0x812e, 0x503: 0x8133, 0x504: 0x8133, 0x505: 0x8133,
	0x506: 0x8133, 0x507: 0x8133, 0x508: 0x8133, 0x509: 0x8133, 0x50a: 0x812e, 0x50b: 0x8133,
	0x50c: 0x8133, 0x50d: 0x8136, 0x50e: 0x812b, 0x50f: 0x812e, 0x510: 0x812a, 0x511: 0x8133,
	0x512: 0x8133, 0x513: 0x8133, 0x514: 0x8133, 0x515: 0x8133, 0x516: 0x8133, 0x517: 0x8133,
	0x518: 0x8133, 0x519: 0x8133, 0x51a: 0x8133, 0x51b: 0x8133, 0x51c: 0x8133, 0x51d: 0x8133,
	0x51e: 0x8133, 0x51f: 0x8133, 0x520: 0x8133, 0x521: 0x8133, 0x522: 0x8133, 0x523: 0x8133,
	0x524: 0x8133, 0x525: 0x8133, 0x526: 0x8133, 0x527: 0x8133, 0x528: 0x8133, 0x529: 0x8133,
	0x52a: 0x8133, 0x52b: 0x8133, 0x52c: 0x8133, 0x52d: 0x8133, 0x52e: 0x8133, 0x52f: 0x8133,
	0x530: 0x8133, 0x531: 0x8133, 0x532: 0x8133, 0x533: 0x8133, 0x534: 0x8133, 0x535: 0x8133,
	0x536: 0x8134, 0x537: 0x8132, 0x538: 0x8132, 0x539: 0x812e, 0x53b: 0x8133,
	0x53c: 0x8135, 0x53d: 0x812e, 0x53e: 0x8133, 0x53f: 0x812e,
	// Block 0x15, offset 0x540
	0x540: 0x2fae, 0x541: 0x32ba, 0x542: 0x2fb8, 0x543: 0x32c4, 0x544: 0x2fbd, 0x545: 0x32c9,
	0x546: 0x2fc2, 0x547: 0x32ce, 0x548: 0x38e3, 0x549: 0x3a72, 0x54a: 0x2fdb, 0x54b: 0x32e7,
	0x54c: 0x2fe5, 0x54d: 0x32f1, 0x54e: 0x2ff4, 0x54f: 0x3300, 0x550: 0x2fea, 0x551: 0x32f6,
	0x552: 0x2fef, 0x553: 0x32fb, 0x554: 0x3906, 0x555: 0x3a95, 0x556: 0x390d, 0x557: 0x3a9c,
	0x558: 0x3030, 0x559: 0x333c, 0x55a: 0x3035, 0x55b: 0x3341, 0x55c: 0x391b, 0x55d: 0x3aaa,
	0x55e: 0x303a, 0x55f: 0x3346, 0x560: 0x3049, 0x561: 0x3355, 0x562: 0x3067, 0x563: 0x3373,
	0x564: 0x3076, 0x565: 0x3382, 0x566: 0x306c, 0x567: 0x3378, 0x568: 0x307b, 0x569: 0x3387,
	0x56a: 0x3080, 0x56b: 0x338c, 0x56c: 0x30c6, 0x56d: 0x33d2, 0x56e: 0x3922, 0x56f: 0x3ab1,
	0x570: 0x30d0, 0x571: 0x33e1, 0x572: 0x30da, 0x573: 0x33eb, 0x574: 0x30e4, 0x575: 0x33f5,
	0x576: 0x46db, 0x577: 0x476c, 0x578: 0x3929, 0x579: 0x3ab8, 0x57a: 0x30fd, 0x57b: 0x340e,
	0x57c: 0x30f8, 0x57d: 0x3409, 0x57e: 0x3102, 0x57f: 0x3413,
	// Block 0x16, offset 0x580
	0x580: 0x3107, 0x581: 0x3418, 0x582: 0x310c, 0x583: 0x341d, 0x584: 0x3120, 0x585: 0x3431,
	0x586: 0x312a, 0x587: 0x343b, 0x588: 0x3139, 0x589: 0x344a, 0x58a: 0x3134, 0x58b: 0x3445,
	0x58c: 0x394c, 0x58d: 0x3adb, 0x58e: 0x395a, 0x58f: 0x3ae9, 0x590: 0x3961, 0x591: 0x3af0,
	0x592: 0x3968, 0x593: 0x3af7, 0x594: 0x3166, 0x595: 0x3477, 0x596: 0x316b, 0x597: 0x347c,
	0x598: 0x3175, 0x599: 0x3486, 0x59a: 0x4708, 0x59b: 0x4799, 0x59c: 0x39ae, 0x59d: 0x3b3d,
	0x59e: 0x318e, 0x59f: 0x349f, 0x5a0: 0x3198, 0x5a1: 0x34a9, 0x5a2: 0x4717, 0x5a3: 0x47a8,
	0x5a4: 0x39b5, 0x5a5: 0x3b44, 0x5a6: 0x39bc, 0x5a7: 0x3b4b, 0x5a8: 0x39c3, 0x5a9: 0x3b52,
	0x5aa: 0x31a7, 0x5ab: 0x34b8, 0x5ac: 0x31b1, 0x5ad: 0x34c7, 0x5ae: 0x31c5, 0x5af: 0x34db,
	0x5b0: 0x31c0, 0x5b1: 0x34d6, 0x5b2: 0x3201, 0x5b3: 0x3517, 0x5b4: 0x3210, 0x5b5: 0x3526,
	0x5b6: 0x320b, 0x5b7: 0x3521, 0x5b8: 0x39ca, 0x5b9: 0x3b59, 0x5ba: 0x39d1, 0x5bb: 0x3b60,
	0x5bc: 0x3215, 0x5bd: 0x352b, 0x5be: 0x321a, 0x5bf: 0x3530,
	// Block 0x17, offset 0x5c0
	0x5c0: 0x321f, 0x5c1: 0x3535, 0x5c2: 0x3224, 0x5c3: 0x353a, 0x5c4: 0x3233, 0x5c5: 0x3549,
	0x5c6: 0x322e, 0x5c7: 0x3544, 0x5c8: 0x3238, 0x5c9: 0x3553, 0x5ca: 0x323d, 0x5cb: 0x3558,
	0x5cc: 0x3242, 0x5cd: 0x355d, 0x5ce: 0x3260, 0x5cf: 0x357b, 0x5d0: 0x3279, 0x5d1: 0x3599,
	0x5d2: 0x3288, 0x5d3: 0x35a8, 0x5d4: 0x328d, 0x5d5: 0x35ad, 0x5d6: 0x3391, 0x5d7: 0x34bd,
	0x5d8: 0x354e, 0x5d9: 0x358a, 0x5da: 0x1be6, 0x5db: 0x42ee,
	0x5e0: 0x46b8, 0x5e1: 0x4749, 0x5e2: 0x2f9a, 0x5e3: 0x32a6,
	0x5e4: 0x388f, 0x5e5: 0x3a1e, 0x5e6: 0x3888, 0x5e7: 0x3a17, 0x5e8: 0x389d, 0x5e9: 0x3a2c,
	0x5ea: 0x3896, 0x5eb: 0x3a25, 0x5ec: 0x38d5, 0x5ed: 0x3a64, 0x5ee: 0x38ab, 0x5ef: 0x3a3a,
	0x5f0: 0x38a4, 0x5f1: 0x3a33, 0x5f2: 0x38b9, 0x5f3: 0x3a48, 0x5f4: 0x38b2, 0x5f5: 0x3a41,
	0x5f6: 0x38dc, 0x5f7: 0x3a6b, 0x5f8: 0x46cc, 0x5f9: 0x475d, 0x5fa: 0x3017, 0x5fb: 0x3323,
	0x5fc: 0x3003, 0x5fd: 0x330f, 0x5fe: 0x38f1, 0x5ff: 0x3a80,
	// Block 0x18, offset 0x600
	0x600: 0x38ea, 0x601: 0x3a79, 0x602: 0x38ff, 0x603: 0x3a8e, 0x604: 0x38f8, 0x605: 0x3a87,
	0x606: 0x3914, 0x607: 0x3aa3, 0x608: 0x30a8, 0x609: 0x33b4, 0x60a: 0x30bc, 0x60b: 0x33c8,
	0x60c: 0x46fe, 0x60d: 0x478f, 0x60e: 0x314d, 0x60f: 0x345e, 0x610: 0x3937, 0x611: 0x3ac6,
	0x612: 0x3930, 0x613: 0x3abf, 0x614: 0x3945, 0x615: 0x3ad4, 0x616: 0x393e, 0x617: 0x3acd,
	0x618: 0x39a0, 0x619: 0x3b2f, 0x61a: 0x3984, 0x61b: 0x3b13, 0x61c: 0x397d, 0x61d: 0x3b0c,
	0x61e: 0x3992, 0x61f: 0x3b21, 0x620: 0x398b, 0x621: 0x3b1a, 0x622: 0x3999, 0x623: 0x3b28,
	0x624: 0x31fc, 0x625: 0x3512, 0x626: 0x31de, 0x627: 0x34f4, 0x628: 0x39fb, 0x629: 0x3b8a,
	0x62a: 0x39f4, 0x62b: 0x3b83, 0x62c: 0x3a09, 0x62d: 0x3b98, 0x62e: 0x3a02, 0x62f: 0x3b91,
	0x630: 0x3a10, 0x631: 0x3b9f, 0x632: 0x3247, 0x633: 0x3562, 0x634: 0x326f, 0x635: 0x358f,
	0x636: 0x326a, 0x637: 0x3585, 0x638: 0x3256, 0x639: 0x3571,
	// Block 0x19, offset 0x640
	0x640: 0x481b, 0x641: 0x4821, 0x642: 0x4935, 0x643: 0x494d, 0x644: 0x493d, 0x645: 0x4955,
	0x646: 0x4945, 0x647: 0x495d, 0x648: 0x47c1, 0x649: 0x47c7, 0x64a: 0x48a5, 0x64b: 0x48bd,
	0x64c: 0x48ad, 0x64d: 0x48c5, 0x64e: 0x48b5, 0x64f: 0x48cd, 0x650: 0x482d, 0x651: 0x4833,
	0x652: 0x3dcf, 0x653: 0x3ddf, 0x654: 0x3dd7, 0x655: 0x3de7,
	0x658: 0x47cd, 0x659: 0x47d3, 0x65a: 0x3cff, 0x65b: 0x3d0f, 0x65c: 0x3d07, 0x65d: 0x3d17,
	0x660: 0x4845, 0x661: 0x484b, 0x662: 0x4965, 0x663: 0x497d,
	0x664: 0x496d, 0x665: 0x4985, 0x666: 0x4975, 0x667: 0x498d, 0x668: 0x47d9, 0x669: 0x47df,
	0x66a: 0x48d5, 0x66b: 0x48ed, 0x66c: 0x48dd, 0x66d: 0x48f5, 0x66e: 0x48e5, 0x66f: 0x48fd,
	0x670: 0x485d, 0x671: 0x4863, 0x672: 0x3e2f, 0x673: 0x3e47, 0x674: 0x3e37, 0x675: 0x3e4f,
	0x676: 0x3e3f, 0x677: 0x3e57, 0x678: 0x47e5, 0x679: 0x47eb, 0x67a: 0x3d2f, 0x67b: 0x3d47,
	0x67c: 0x3d37, 0x67d: 0x3d4f, 0x67e: 0x3d3f, 0x67f: 0x3d57,
	// Block 0x1a, offset 0x680
	0x680: 0x4869, 0x681: 0x486f, 0x682: 0x3e5f, 0x683: 0x3e6f, 0x684: 0x3e67, 0x685: 0x3e77,
	0x688: 0x47f1, 0x689: 0x47f7, 0x68a: 0x3d5f, 0x68b: 0x3d6f,
	0x68c: 0x3d67, 0x68d: 0x3d77, 0x690: 0x487b, 0x691: 0x4881,
	0x692: 0x3e97, 0x693: 0x3eaf, 0x694: 0x3e9f, 0x695: 0x3eb7, 0x696: 0x3ea7, 0x697: 0x3ebf,
	0x699: 0x47fd, 0x69b: 0x3d7f, 0x69d: 0x3d87,
	0x69f: 0x3d8f, 0x6a0: 0x4893, 0x6a1: 0x4899, 0x6a2: 0x4995, 0x6a3: 0x49ad,
	0x6a4: 0x499d, 0x6a5: 0x49b5, 0x6a6: 0x49a5, 0x6a7: 0x49bd, 0x6a8: 0x4803, 0x6a9: 0x4809,
	0x6aa: 0x4905, 0x6ab: 0x491d, 0x6ac: 0x490d, 0x6ad: 0x4925, 0x6ae: 0x4915, 0x6af: 0x492d,
	0x6b0: 0x480f, 0x6b1: 0x4335, 0x6b2: 0x36a8, 0x6b3: 0x433b, 0x6b4: 0x4839, 0x6b5: 0x4341,
	0x6b6: 0x36ba, 0x6b7: 0x4347, 0x6b8: 0x36d8, 0x6b9: 0x434d, 0x6ba: 0x36f0, 0x6bb: 0x4353,
	0x6bc: 0x4887, 0x6bd: 0x4359,
	// Block 0x1b, offset 0x6c0
	0x6c0: 0x3db7, 0x6c1: 0x3dbf, 0x6c2: 0x419b, 0x6c3: 0x41b9, 0x6c4: 0x41a5, 0x6c5: 0x41c3,
	0x6c6: 0x41af, 0x6c7: 0x41cd, 0x6c8: 0x3cef, 0x6c9: 0x3cf7, 0x6ca: 0x40e7, 0x6cb: 0x4105,
	0x6cc: 0x40f1, 0x6cd: 0x410f, 0x6ce: 0x40fb, 0x6cf: 0x4119, 0x6d0: 0x3dff, 0x6d1: 0x3e07,
	0x6d2: 0x41d7, 0x6d3: 0x41f5, 0x6d4: 0x41e1, 0x6d5: 0x41ff, 0x6d6: 0x41eb, 0x6d7: 0x4209,
	0x6d8: 0x3d1f, 0x6d9: 0x3d27, 0x6da: 0x4123, 0x6db: 0x4141, 0x6dc: 0x412d, 0x6dd: 0x414b,
	0x6de: 0x4137, 0x6df: 0x4155, 0x6e0: 0x3ed7, 0x6e1: 0x3edf, 0x6e2: 0x4213, 0x6e3: 0x4231,
	0x6e4: 0x421d, 0x6e5: 0x423b, 0x6e6: 0x4227, 0x6e7: 0x4245, 0x6e8: 0x3d97, 0x6e9: 0x3d9f,
	0x6ea: 0x415f, 0x6eb: 0x417d, 0x6ec: 0x4169, 0x6ed: 0x4187, 0x6ee: 0x4173, 0x6ef: 0x4191,
	0x6f0: 0x369c, 0x6f1: 0x3696, 0x6f2: 0x3da7, 0x6f3: 0x36a2, 0x6f4: 0x3daf,
	0x6f6: 0x4827, 0x6f7: 0x3dc7, 0x6f8: 0x360c, 0x6f9: 0x3606, 0x6fa: 0x35fa, 0x6fb: 0x4305,
	0x6fc: 0x3612, 0x6fd: 0x429e, 0x6fe: 0x01d6, 0x6ff: 0x429e,
	// Block 0x1c, offset 0x700
	0x700: 0x42b7, 0x701: 0x4499, 0x702: 0x3def, 0x703: 0x36b4, 0x704: 0x3df7,
	0x706: 0x4851, 0x707: 0x3e0f, 0x708: 0x3618, 0x709: 0x430b, 0x70a: 0x3624, 0x70b: 0x4311,
	0x70c: 0x3630, 0x70d: 0x44a0, 0x70e: 0x44a7, 0x70f: 0x44ae, 0x710: 0x36cc, 0x711: 0x36c6,
	0x712: 0x3e17, 0x713: 0x44fb, 0x716: 0x36d2, 0x717: 0x3e27,
	0x718: 0x3648, 0x719: 0x3642, 0x71a: 0x3636, 0x71b: 0x4317, 0x71d: 0x44b5,
	0x71e: 0x44bc, 0x71f: 0x44c3, 0x720: 0x3702, 0x721: 0x36fc, 0x722: 0x3e7f, 0x723: 0x4503,
	0x724: 0x36e4, 0x725: 0x36ea, 0x726: 0x3708, 0x727: 0x3e8f, 0x728: 0x3678, 0x729: 0x3672,
	0x72a: 0x3666, 0x72b: 0x4323, 0x72c: 0x3660, 0x72d: 0x448b, 0x72e: 0x4492, 0x72f: 0x0081,
	0x732: 0x3ec7, 0x733: 0x370e, 0x734: 0x3ecf,
	0x736: 0x489f, 0x737: 0x3ee7, 0x738: 0x3654, 0x739: 0x431d, 0x73a: 0x3684, 0x73b: 0x432f,
	0x73c: 0x3690, 0x73d: 0x4271, 0x73e: 0x42a3,
	// Block 0x1d, offset 0x740
	0x740: 0x1bde, 0x741: 0x1be2, 0x742: 0x0047, 0x743: 0x1c5a, 0x745: 0x1bee,
	0x746: 0x1bf2, 0x747: 0x00e9, 0x749: 0x1c5e, 0x74a: 0x008f, 0x74b: 0x0051,
	0x74c: 0x0051, 0x74d: 0x0051, 0x74e: 0x0091, 0x74f: 0x00da, 0x750: 0x0053, 0x751: 0x0053,
	0x752: 0x0059, 0x753: 0x0099, 0x755: 0x005d, 0x756: 0x1993,
	0x759: 0x0061, 0x75a: 0x0063, 0x75b: 0x0065, 0x75c: 0x0065, 0x75d: 0x0065,
	0x760: 0x19a5, 0x761: 0x1bce, 0x762: 0x19ae,
	0x764: 0x0075, 0x766: 0x01bb, 0x768: 0x0075,
	0x76a: 0x0057, 0x76b: 0x42e9, 0x76c: 0x0045, 0x76d: 0x0047, 0x76f: 0x008b,
	0x770: 0x004b, 0x771: 0x004d, 0x773: 0x005b, 0x774: 0x009f, 0x775: 0x0218,
	0x776: 0x021b, 0x777: 0x021e, 0x778: 0x0221, 0x779: 0x0093, 0x77b: 0x1b9e,
	0x77c: 0x01eb, 0x77d: 0x01c4, 0x77e: 0x017c, 0x77f: 0x01a3,
	// Block 0x1e, offset 0x780
	0x780: 0x0466, 0x785: 0x0049,
	0x786: 0x0089, 0x787: 0x008b, 0x788: 0x0093, 0x789: 0x0095,
	0x790: 0x2234, 0x791: 0x2240,
	0x792: 0x22f4, 0x793: 0x221c, 0x794: 0x22a0, 0x795: 0x2228, 0x796: 0x22a6, 0x797: 0x22be,
	0x798: 0x22ca, 0x799: 0x222e, 0x79a: 0x22d0, 0x79b: 0x223a, 0x79c: 0x22c4, 0x79d: 0x22d6,
	0x79e: 0x22dc, 0x79f: 0x1cc2, 0x7a0: 0x0053, 0x7a1: 0x195d, 0x7a2: 0x1baa, 0x7a3: 0x1966,
	0x7a4: 0x006d, 0x7a5: 0x19b1, 0x7a6: 0x1bd6, 0x7a7: 0x1d4e, 0x7a8: 0x1969, 0x7a9: 0x0071,
	0x7aa: 0x19bd, 0x7ab: 0x1bda, 0x7ac: 0x0059, 0x7ad: 0x0047, 0x7ae: 0x0049, 0x7af: 0x005b,
	0x7b0: 0x0093, 0x7b1: 0x19ea, 0x7b2: 0x1c1e, 0x7b3: 0x19f3, 0x7b4: 0x00ad, 0x7b5: 0x1a68,
	0x7b6: 0x1c52, 0x7b7: 0x1d62, 0x7b8: 0x19f6, 0x7b9: 0x00b1, 0x7ba: 0x1a6b, 0x7bb: 0x1c56,
	0x7bc: 0x0099, 0x7bd: 0x0087, 0x7be: 0x0089, 0x7bf: 0x009b,
	// Block 0x1f, offset 0x7c0
	0x7c1: 0x3c1d, 0x7c3: 0xa000, 0x7c4: 0x3c24, 0x7c5: 0xa000,
	0x7c7: 0x3c2b, 0x7c8: 0xa000, 0x7c9: 0x3c32,
	0x7cd: 0xa000,
	0x7e0: 0x2f7c, 0x7e1: 0xa000, 0x7e2: 0x3c40,
	0x7e4: 0xa000, 0x7e5: 0xa000,
	0x7ed: 0x3c39, 0x7ee: 0x2f77, 0x7ef: 0x2f81,
	0x7f0: 0x3c47, 0x7f1: 0x3c4e, 0x7f2: 0xa000, 0x7f3: 0xa000, 0x7f4: 0x3c55, 0x7f5: 0x3c5c,
	0x7f6: 0xa000, 0x7f7: 0xa000, 0x7f8: 0x3c63, 0x7f9: 0x3c6a, 0x7fa: 0xa000, 0x7fb: 0xa000,
	0x7fc: 0xa000, 0x7fd: 0xa000,
	// Block 0x20, offset 0x800
	0x800: 0x3c71, 0x801: 0x3c78, 0x802: 0xa000, 0x803: 0xa000, 0x804: 0x3c8d, 0x805: 0x3c94,
	0x806: 0xa000, 0x807: 0xa000, 0x808: 0x3c9b, 0x809: 0x3ca2,
	0x811: 0xa000,
	0x812: 0xa000,
	0x822: 0xa000,
	0x828: 0xa000, 0x829: 0xa000,
	0x82b: 0xa000, 0x82c: 0x3cb7, 0x82d: 0x3cbe, 0x82e: 0x3cc5, 0x82f: 0x3ccc,
	0x832: 0xa000, 0x833: 0xa000, 0x834: 0xa000, 0x835: 0xa000,
	// Block 0x21, offset 0x840
	0x860: 0x0023, 0x861: 0x0025, 0x862: 0x0027, 0x863: 0x0029,
	0x864: 0x002b, 0x865: 0x002d, 0x866: 0x002f, 0x867: 0x0031, 0x868: 0x0033, 0x869: 0x1885,
	0x86a: 0x1888, 0x86b: 0x188b, 0x86c: 0x188e, 0x86d: 0x1891, 0x86e: 0x1894, 0x86f: 0x1897,
	0x870: 0x189a, 0x871: 0x189d, 0x872: 0x18a0, 0x873: 0x18a9, 0x874: 0x1a6e, 0x875: 0x1a72,
	0x876: 0x1a76, 0x877: 0x1a7a, 0x878: 0x1a7e, 0x879: 0x1a82, 0x87a: 0x1a86, 0x87b: 0x1a8a,
	0x87c: 0x1a8e, 0x87d: 0x1c86, 0x87e: 0x1c8b, 0x87f: 0x1c90,
	// Block 0x22, offset 0x880
	0x880: 0x1c95, 0x881: 0x1c9a, 0x882: 0x1c9f, 0x883: 0x1ca4, 0x884: 0x1ca9, 0x885: 0x1cae,
	0x886: 0x1cb3, 0x887: 0x1cb8, 0x888: 0x1882, 0x889: 0x18a6, 0x88a: 0x18ca, 0x88b: 0x18ee,
	0x88c: 0x1912, 0x88d: 0x191b, 0x88e: 0x1921, 0x88f: 0x1927, 0x890: 0x192d, 0x891: 0x1b66,
	0x892: 0x1b6a, 0x893: 0x1b6e, 0x894: 0x1b72, 0x895: 0x1b76, 0x896: 0x1b7a, 0x897: 0x1b7e,
	0x898: 0x1b82, 0x899: 0x1b86, 0x89a: 0x1b8a, 0x89b: 0x1b8e, 0x89c: 0x1afa, 0x89d: 0x1afe,
	0x89e: 0x1b02, 0x89f: 0x1b06, 0x8a0: 0x1b0a, 0x8a1: 0x1b0e, 0x8a2: 0x1b12, 0x8a3: 0x1b16,
	0x8a4: 0x1b1a, 0x8a5: 0x1b1e, 0x8a6: 0x1b22, 0x8a7: 0x1b26, 0x8a8: 0x1b2a, 0x8a9: 0x1b2e,
	0x8aa: 0x1b32, 0x8ab: 0x1b36, 0x8ac: 0x1b3a, 0x8ad: 0x1b3e, 0x8ae: 0x1b42, 0x8af: 0x1b46,
	0x8b0: 0x1b4a, 0x8b1: 0x1b4e, 0x8b2: 0x1b52, 0x8b3: 0x1b56, 0x8b4: 0x1b5a, 0x8b5: 0x1b5e,
	0x8b6: 0x0043, 0x8b7: 0x0045, 0x8b8: 0x0047, 0x8b9: 0x0049, 0x8ba: 0x004b, 0x8bb: 0x004d,
	0x8bc: 0x004f, 0x8bd: 0x0051, 0x8be: 0x0053, 0x8bf: 0x0055,
	// Block 0x23, offset 0x8c0
	0x8c0: 0x06c2, 0x8c1: 0x06e6, 0x8c2: 0x06f2, 0x8c3: 0x0702, 0x8c4: 0x070a, 0x8c5: 0x0716,
	0x8c6: 0x071e, 0x8c7: 0x0726, 0x8c8: 0x0732, 0x8c9: 0x0786, 0x8ca: 0x079e, 0x8cb: 0x07ae,
	0x8cc: 0x07be, 0x8cd: 0x07ce, 0x8ce: 0x07de, 0x8cf: 0x07fe, 0x8d0: 0x0802, 0x8d1: 0x0806,
	0x8d2: 0x083a, 0x8d3: 0x0862, 0x8d4: 0x0872, 0x8d5: 0x087a, 0x8d6: 0x087e, 0x8d7: 0x088a,
	0x8d8: 0x08a6, 0x8d9: 0x08aa, 0x8da: 0x08c2, 0x8db: 0x08c6, 0x8dc: 0x08ce, 0x8dd: 0x08de,
	0x8de: 0x097a, 0x8df: 0x098e, 0x8e0: 0x09ce, 0x8e1: 0x09e2, 0x8e2: 0x09ea, 0x8e3: 0x09ee,
	0x8e4: 0x09fe, 0x8e5: 0x0a1a, 0x8e6: 0x0a46, 0x8e7: 0x0a52, 0x8e8: 0x0a72, 0x8e9: 0x0a7e,
	0x8ea: 0x0a82, 0x8eb: 0x0a86, 0x8ec: 0x0a9e, 0x8ed: 0x0aa2, 0x8ee: 0x0ace, 0x8ef: 0x0ada,
	0x8f0: 0x0ae2, 0x8f1: 0x0aea, 0x8f2: 0x0afa, 0x8f3: 0x0b02, 0x8f4: 0x0b0a, 0x8f5: 0x0b36,
	0x8f6: 0x0b3a, 0x8f7: 0x0b42, 0x8f8: 0x0b46, 0x8f9: 0x0b4e, 0x8fa: 0x0b56, 0x8fb: 0x0b66,
	0x8fc: 0x0b82, 0x8fd: 0x0bfa, 0x8fe: 0x0c0e, 0x8ff: 0x0c12,
	// Block 0x24, offset 0x900
	0x900: 0x0c92, 0x901: 0x0c96, 0x902: 0x0caa, 0x903: 0x0cae, 0x904: 0x0cb6, 0x905: 0x0cbe,
	0x906: 0x0cc6, 0x907: 0x0cd2, 0x908: 0x0cfa, 0x909: 0x0d0a, 0x90a: 0x0d1e, 0x90b: 0x0d8e,
	0x90c: 0x0d9a, 0x90d: 0x0daa, 0x90e: 0x0db6, 0x90f: 0x0dc2, 0x910: 0x0dca, 0x911: 0x0dce,
	0x912: 0x0dd2, 0x913: 0x0dd6, 0x914: 0x0dda, 0x915: 0x0e92, 0x916: 0x0eda, 0x917: 0x0ee6,
	0x918: 0x0eea, 0x919: 0x0eee, 0x91a: 0x0ef2, 0x91b: 0x0efa, 0x91c: 0x0efe, 0x91d: 0x0f12,
	0x91e: 0x0f2e, 0x91f: 0x0f36, 0x920: 0x0f76, 0x921: 0x0f7a, 0x922: 0x0f82, 0x923: 0x0f86,
	0x924: 0x0f8e, 0x925: 0x0f92, 0x926: 0x0fb6, 0x927: 0x0fba, 0x928: 0x0fd6, 0x929: 0x0fda,
	0x92a: 0x0fde, 0x92b: 0x0fe2, 0x92c: 0x0ff6, 0x92d: 0x101a, 0x92e: 0x101e, 0x92f: 0x1022,
	0x930: 0x1046, 0x931: 0x1086, 0x932: 0x108a, 0x933: 0x10aa, 0x934: 0x10ba, 0x935: 0x10c2,
	0x936: 0x10e2, 0x937: 0x1106, 0x938: 0x114a, 0x939: 0x1152, 0x93a: 0x1166, 0x93b: 0x1172,
	0x93c: 0x117a, 0x93d: 0x1182, 0x93e: 0x1186, 0x93f: 0x118a,
	// Block 0x25, offset 0x940
	0x940: 0x11a2, 0x941: 0x11a6, 0x942: 0x11c2, 0x943: 0x11ca, 0x944: 0x11d2, 0x945: 0x11d6,
	0x946: 0x11e2, 0x947: 0x11ea, 0x948: 0x11ee, 0x949: 0x11f2, 0x94a: 0x11fa, 0x94b: 0x11fe,
	0x94c: 0x129e, 0x94d: 0x12b2, 0x94e: 0x12e6, 0x94f: 0x12ea, 0x950: 0x12f2, 0x951: 0x131e,
	0x952: 0x1326, 0x953: 0x132e, 0x954: 0x1336, 0x955: 0x1372, 0x956: 0x1376, 0x957: 0x137e,
	0x958: 0x1382, 0x959: 0x1386, 0x95a: 0x13b2, 0x95b: 0x13b6, 0x95c: 0x13be, 0x95d: 0x13d2,
	0x95e: 0x13d6, 0x95f: 0x13f2, 0x960: 0x13fa, 0x961: 0x13fe, 0x962: 0x1422, 0x963: 0x1442,
	0x964: 0x1456, 0x965: 0x145a, 0x966: 0x1462, 0x967: 0x148e, 0x968: 0x1492, 0x969: 0x14a2,
	0x96a: 0x14c6, 0x96b: 0x14d2, 0x96c: 0x14e2, 0x96d: 0x14fa, 0x96e: 0x1502, 0x96f: 0x1506,
	0x970: 0x150a, 0x971: 0x150e, 0x972: 0x151a, 0x973: 0x151e, 0x974: 0x1526, 0x975: 0x1542,
	0x976: 0x1546, 0x977: 0x154a, 0x978: 0x1562, 0x979: 0x1566, 0x97a: 0x156e, 0x97b: 0x1582,
	0x97c: 0x1586, 0x97d: 0x158a, 0x97e: 0x1592, 0x97f: 0x1596,
	// Block 0x26, offset 0x980
	0x986: 0xa000, 0x98b: 0xa000,
	0x98c: 0x3f1f, 0x98d: 0xa000, 0x98e: 0x3f27, 0x98f: 0xa000, 0x990: 0x3f2f, 0x991: 0xa000,
	0x992: 0x3f37, 0x993: 0xa000, 0x994: 0x3f3f, 0x995: 0xa000, 0x996: 0x3f47, 0x997: 0xa000,
	0x998: 0x3f4f, 0x999: 0xa000, 0x99a: 0x3f57, 0x99b: 0xa000, 0x99c: 0x3f5f, 0x99d: 0xa000,
	0x99e: 0x3f67, 0x99f: 0xa000, 0x9a0: 0x3f6f, 0x9a1: 0xa000, 0x9a2: 0x3f77,
	0x9a4: 0xa000, 0x9a5: 0x3f7f, 0x9a6: 0xa000, 0x9a7: 0x3f87, 0x9a8: 0xa000, 0x9a9: 0x3f8f,
	0x9af: 0xa000,
	0x9b0: 0x3f97, 0x9b1: 0x3f9f, 0x9b2: 0xa000, 0x9b3: 0x3fa7, 0x9b4: 0x3faf, 0x9b5: 0xa000,
	0x9b6: 0x3fb7, 0x9b7: 0x3fbf, 0x9b8: 0xa000, 0x9b9: 0x3fc7, 0x9ba: 0x3fcf, 0x9bb: 0xa000,
	0x9bc: 0x3fd7, 0x9bd: 0x3fdf,
	// Block 0x27, offset 0x9c0
	0x9d4: 0x3f17,
	0x9d9: 0x9904, 0x9da: 0x9904, 0x9db: 0x42f3, 0x9dc: 0x42f9, 0x9dd: 0xa000,
	0x9de: 0x3fe7, 0x9df: 0x26ba,
	0x9e6: 0xa000,
	0x9eb: 0xa000, 0x9ec: 0x3ff7, 0x9ed: 0xa000, 0x9ee: 0x3fff, 0x9ef: 0xa000,
	0x9f0: 0x4007, 0x9f1: 0xa000, 0x9f2: 0x400f, 0x9f3: 0xa000, 0x9f4: 0x4017, 0x9f5: 0xa000,
	0x9f6: 0x401f, 0x9f7: 0xa000, 0x9f8: 0x4027, 0x9f9: 0xa000, 0x9fa: 0x402f, 0x9fb: 0xa000,
	0x9fc: 0x4037, 0x9fd: 0xa000, 0x9fe: 0x403f, 0x9ff: 0xa000,
	// Block 0x28, offset 0xa00
	0xa00: 0x4047, 0xa01: 0xa000, 0xa02: 0x404f, 0xa04: 0xa000, 0xa05: 0x4057,
	0xa06: 0xa000, 0xa07: 0x405f, 0xa08: 0xa000, 0xa09: 0x4067,
	0xa0f: 0xa000, 0xa10: 0x406f, 0xa11: 0x4077,
	0xa12: 0xa000, 0xa13: 0x407f, 0xa14: 0x4087, 0xa15: 0xa000, 0xa16: 0x408f, 0xa17: 0x4097,
	0xa18: 0xa000, 0xa19: 0x409f, 0xa1a: 0x40a7, 0xa1b: 0xa000, 0xa1c: 0x40af, 0xa1d: 0x40b7,
	0xa2f: 0xa000,
	0xa30: 0xa000, 0xa31: 0xa000, 0xa32: 0xa000, 0xa34: 0x3fef,
	0xa37: 0x40bf, 0xa38: 0x40c7, 0xa39: 0x40cf, 0xa3a: 0x40d7,
	0xa3d: 0xa000, 0xa3e: 0x40df, 0xa3f: 0x26cf,
	// Block 0x29, offset 0xa40
	0xa40: 0x036a, 0xa41: 0x032e, 0xa42: 0x0332, 0xa43: 0x0336, 0xa44: 0x037e, 0xa45: 0x033a,
	0xa46: 0x033e, 0xa47: 0x0342, 0xa48: 0x0346, 0xa49: 0x034a, 0xa4a: 0x034e, 0xa4b: 0x0352,
	0xa4c: 0x0356, 0xa4d: 0x035a, 0xa4e: 0x035e, 0xa4f: 0x49d4, 0xa50: 0x49da, 0xa51: 0x49e0,
	0xa52: 0x49e6, 0xa53: 0x49ec, 0xa54: 0x49f2, 0xa55: 0x49f8, 0xa56: 0x49fe, 0xa57: 0x4a04,
	0xa58: 0x4a0a, 0xa59: 0x4a10, 0xa5a: 0x4a16, 0xa5b: 0x4a1c, 0xa5c: 0x4a22, 0xa5d: 0x4a28,
	0xa5e: 0x4a2e, 0xa5f: 0x4a34, 0xa60: 0x4a3a, 0xa61: 0x4a40, 0xa62: 0x4a46, 0xa63: 0x4a4c,
	0xa64: 0x03c6, 0xa65: 0x0362, 0xa66: 0x0366, 0xa67: 0x03ea, 0xa68: 0x03ee, 0xa69: 0x03f2,
	0xa6a: 0x03f6, 0xa6b: 0x03fa, 0xa6c: 0x03fe, 0xa6d: 0x0402, 0xa6e: 0x036e, 0xa6f: 0x0406,
	0xa70: 0x040a, 0xa71: 0x0372, 0xa72: 0x0376, 0xa73: 0x037a, 0xa74: 0x0382, 0xa75: 0x0386,
	0xa76: 0x038a, 0xa77: 0x038e, 0xa78: 0x0392, 0xa79: 0x0396, 0xa7a: 0x039a, 0xa7b: 0x039e,
	0xa7c: 0x03a2, 0xa7d: 0x03a6, 0xa7e: 0x03aa, 0xa7f: 0x03ae,
	// Block 0x2a, offset 0xa80
	0xa80: 0x03b2, 0xa81: 0x03b6, 0xa82: 0x040e, 0xa83: 0x0412, 0xa84: 0x03ba, 0xa85: 0x03be,
	0xa86: 0x03c2, 0xa87: 0x03ca, 0xa88: 0x03ce, 0xa89: 0x03d2, 0xa8a: 0x03d6, 0xa8b: 0x03da,
	0xa8c: 0x03de, 0xa8d: 0x03e2, 0xa8e: 0x03e6,
	0xa92: 0x06c2, 0xa93: 0x071e, 0xa94: 0x06ce, 0xa95: 0x097e, 0xa96: 0x06d2, 0xa97: 0x06ea,
	0xa98: 0x06d6, 0xa99: 0x0f96, 0xa9a: 0x070a, 0xa9b: 0x06de, 0xa9c: 0x06c6, 0xa9d: 0x0a02,
	0xa9e: 0x0992, 0xa9f: 0x0732,
	// Block 0x2b, offset 0xac0
	0xac0: 0x205a, 0xac1: 0x2060, 0xac2: 0x2066, 0xac3: 0x206c, 0xac4: 0x2072, 0xac5: 0x2078,
	0xac6: 0x207e, 0xac7: 0x2084, 0xac8: 0x208a, 0xac9: 0x2090, 0xaca: 0x2096, 0xacb: 0x209c,
	0xacc: 0x20a2, 0xacd: 0x20a8, 0xace: 0x2733, 0xacf: 0x273c, 0xad0: 0x2745, 0xad1: 0x274e,
	0xad2: 0x2757, 0xad3: 0x2760, 0xad4: 0x2769, 0xad5: 0x2772, 0xad6: 0x277b, 0xad7: 0x278d,
	0xad8: 0x2796, 0xad9: 0x279f, 0xada: 0x27a8, 0xadb: 0x27b1, 0xadc: 0x2784, 0xadd: 0x2bb9,
	0xade: 0x2afa, 0xae0: 0x20ae, 0xae1: 0x20c6, 0xae2: 0x20ba, 0xae3: 0x210e,
	0xae4: 0x20cc, 0xae5: 0x20ea, 0xae6: 0x20b4, 0xae7: 0x20e4, 0xae8: 0x20c0, 0xae9: 0x20f6,
	0xaea: 0x2126, 0xaeb: 0x2144, 0xaec: 0x213e, 0xaed: 0x2132, 0xaee: 0x2180, 0xaef: 0x2114,
	0xaf0: 0x2120, 0xaf1: 0x2138, 0xaf2: 0x212c, 0xaf3: 0x2156, 0xaf4: 0x2102, 0xaf5: 0x214a,
	0xaf6: 0x2174, 0xaf7: 0x215c, 0xaf8: 0x20f0, 0xaf9: 0x20d2, 0xafa: 0x2108, 0xafb: 0x211a,
	0xafc: 0x2150, 0xafd: 0x20d8, 0xafe: 0x217a, 0xaff: 0x20fc,
	// Block 0x2c, offset 0xb00
	0xb00: 0x2162, 0xb01: 0x20de, 0xb02: 0x2168, 0xb03: 0x216e, 0xb04: 0x0932, 0xb05: 0x0b06,
	0xb06: 0x0caa, 0xb07: 0x10ca,
	0xb10: 0x1bca, 0xb11: 0x18ac,
	0xb12: 0x18af, 0xb13: 0x18b2, 0xb14: 0x18b5, 0xb15: 0x18b8, 0xb16: 0x18bb, 0xb17: 0x18be,
	0xb18: 0x18c1, 0xb19: 0x18c4, 0xb1a: 0x18cd, 0xb1b: 0x18d0, 0xb1c: 0x18d3, 0xb1d: 0x18d6,
	0xb1e: 0x18d9, 0xb1f: 0x18dc, 0xb20: 0x0316, 0xb21: 0x031e, 0xb22: 0x0322, 0xb23: 0x032a,
	0xb24: 0x032e, 0xb25: 0x0332, 0xb26: 0x033a, 0xb27: 0x0342, 0xb28: 0x0346, 0xb29: 0x034e,
	0xb2a: 0x0352, 0xb2b: 0x0356, 0xb2c: 0x035a, 0xb2d: 0x035e, 0xb2e: 0x2e2f, 0xb2f: 0x2e37,
	0xb30: 0x2e3f, 0xb31: 0x2e47, 0xb32: 0x2e4f, 0xb33: 0x2e57, 0xb34: 0x2e5f, 0xb35: 0x2e67,
	0xb36: 0x2e77, 0xb37: 0x2e7f, 0xb38: 0x2e87, 0xb39: 0x2e8f, 0xb3a: 0x2e97, 0xb3b: 0x2e9f,
	0xb3c: 0x2eea, 0xb3d: 0x2eb2, 0xb3e: 0x2e6f,
	// Block 0x2d, offset 0xb40
	0xb40: 0x06c2, 0xb41: 0x071e, 0xb42: 0x06ce, 0xb43: 0x097e, 0xb44: 0x0722, 0xb45: 0x07b2,
	0xb46: 0x06ca, 0xb47: 0x07ae, 0xb48: 0x070e, 0xb49: 0x088a, 0xb4a: 0x0d0a, 0xb4b: 0x0e92,
	0xb4c: 0x0dda, 0xb4d: 0x0d1e, 0xb4e: 0x1462, 0xb4f: 0x098e, 0xb50: 0x0cd2, 0xb51: 0x0d4e,
	0xb52: 0x0d0e, 0xb53: 0x104e, 0xb54: 0x08fe, 0xb55: 0x0f06, 0xb56: 0x138a, 0xb57: 0x1062,
	0xb58: 0x0846, 0xb59: 0x1092, 0xb5a: 0x0f9e, 0xb5b: 0x0a1a, 0xb5c: 0x1412, 0xb5d: 0x0782,
	0xb5e: 0x08ae, 0xb5f: 0x0dfa, 0xb60: 0x152a, 0xb61: 0x0746, 0xb62: 0x07d6, 0xb63: 0x0d9e,
	0xb64: 0x06d2, 0xb65: 0x06ea, 0xb66: 0x06d6, 0xb67: 0x0ade, 0xb68: 0x08f2, 0xb69: 0x0882,
	0xb6a: 0x0a5a, 0xb6b: 0x0a4e, 0xb6c: 0x0fee, 0xb6d: 0x0742, 0xb6e: 0x139e, 0xb6f: 0x089e,
	0xb70: 0x09f6, 0xb71: 0x18df, 0xb72: 0x18e2, 0xb73: 0x18e5, 0xb74: 0x18e8, 0xb75: 0x18f1,
	0xb76: 0x18f4, 0xb77: 0x18f7, 0xb78: 0x18fa, 0xb79: 0x18fd, 0xb7a: 0x1900, 0xb7b: 0x1903,
	0xb7c: 0x1906, 0xb7d: 0x1909, 0xb7e: 0x190c, 0xb7f: 0x1915,
	// Block 0x2e, offset 0xb80
	0xb80: 0x1ccc, 0xb81: 0x1cdb, 0xb82: 0x1cea, 0xb83: 0x1cf9, 0xb84: 0x1d08, 0xb85: 0x1d17,
	0xb86: 0x1d26, 0xb87: 0x1d35, 0xb88: 0x1d44, 0xb89: 0x2192, 0xb8a: 0x21a4, 0xb8b: 0x21b6,
	0xb8c: 0x1957, 0xb8d: 0x1c0a, 0xb8e: 0x19d8, 0xb8f: 0x1bae, 0xb90: 0x04ce, 0xb91: 0x04d6,
	0xb92: 0x04de, 0xb93: 0x04e6, 0xb94: 0x04ee, 0xb95: 0x04f2, 0xb96: 0x04f6, 0xb97: 0x04fa,
	0xb98: 0x04fe, 0xb99: 0x0502, 0xb9a: 0x0506, 0xb9b: 0x050a, 0xb9c: 0x050e, 0xb9d: 0x0512,
	0xb9e: 0x0516, 0xb9f: 0x051a, 0xba0: 0x051e, 0xba1: 0x0526, 0xba2: 0x052a, 0xba3: 0x052e,
	0xba4: 0x0532, 0xba5: 0x0536, 0xba6: 0x053a, 0xba7: 0x053e, 0xba8: 0x0542, 0xba9: 0x0546,
	0xbaa: 0x054a, 0xbab: 0x054e, 0xbac: 0x0552, 0xbad: 0x0556, 0xbae: 0x055a, 0xbaf: 0x055e,
	0xbb0: 0x0562, 0xbb1: 0x0566, 0xbb2: 0x056a, 0xbb3: 0x0572, 0xbb4: 0x057a, 0xbb5: 0x0582,
	0xbb6: 0x0586, 0xbb7: 0x058a, 0xbb8: 0x058e, 0xbb9: 0x0592, 0xbba: 0x0596, 0xbbb: 0x059a,
	0xbbc: 0x059e, 0xbbd: 0x05a2, 0xbbe: 0x05a6, 0xbbf: 0x2700,
	// Block 0x2f, offset 0xbc0
	0xbc0: 0x2b19, 0xbc1: 0x29b5, 0xbc2: 0x2b29, 0xbc3: 0x288d, 0xbc4: 0x2efb, 0xbc5: 0x2897,
	0xbc6: 0x28a1, 0xbc7: 0x2f3f, 0xbc8: 0x29c2, 0xbc9: 0x28ab, 0xbca: 0x28b5, 0xbcb: 0x28bf,
	0xbcc: 0x29e9, 0xbcd: 0x29f6, 0xbce: 0x29cf, 0xbcf: 0x29dc, 0xbd0: 0x2ec0, 0xbd1: 0x2a03,
	0xbd2: 0x2a10, 0xbd3: 0x2bcb, 0xbd4: 0x26c1, 0xbd5: 0x2bde, 0xbd6: 0x2bf1, 0xbd7: 0x2b39,
	0xbd8: 0x2a1d, 0xbd9: 0x2c04, 0xbda: 0x2c17, 0xbdb: 0x2a2a, 0xbdc: 0x28c9, 0xbdd: 0x28d3,
	0xbde: 0x2ece, 0xbdf: 0x2a37, 0xbe0: 0x2b49, 0xbe1: 0x2f0c, 0xbe2: 0x28dd, 0xbe3: 0x28e7,
	0xbe4: 0x2a44, 0xbe5: 0x28f1, 0xbe6: 0x28fb, 0xbe7: 0x26d6, 0xbe8: 0x26dd, 0xbe9: 0x2905,
	0xbea: 0x290f, 0xbeb: 0x2c2a, 0xbec: 0x2a51, 0xbed: 0x2b59, 0xbee: 0x2c3d, 0xbef: 0x2a5e,
	0xbf0: 0x2923, 0xbf1: 0x2919, 0xbf2: 0x2f53, 0xbf3: 0x2a6b, 0xbf4: 0x2c50, 0xbf5: 0x292d,
	0xbf6: 0x2b69, 0xbf7: 0x2937, 0xbf8: 0x2a85, 0xbf9: 0x2941, 0xbfa: 0x2a92, 0xbfb: 0x2f1d,
	0xbfc: 0x2a78, 0xbfd: 0x2b79, 0xbfe: 0x2a9f, 0xbff: 0x26e4,
	// Block 0x30, offset 0xc00
	0xc00: 0x2f2e, 0xc01: 0x294b, 0xc02: 0x2955, 0xc03: 0x2aac, 0xc04: 0x295f, 0xc05: 0x2969,
	0xc06: 0x2973, 0xc07: 0x2b89, 0xc08: 0x2ab9, 0xc09: 0x26eb, 0xc0a: 0x2c63, 0xc0b: 0x2ea7,
	0xc0c: 0x2b99, 0xc0d: 0x2ac6, 0xc0e: 0x2edc, 0xc0f: 0x297d, 0xc10: 0x2987, 0xc11: 0x2ad3,
	0xc12: 0x26f2, 0xc13: 0x2ae0, 0xc14: 0x2ba9, 0xc15: 0x26f9, 0xc16: 0x2c76, 0xc17: 0x2991,
	0xc18: 0x1cbd, 0xc19: 0x1cd1, 0xc1a: 0x1ce0, 0xc1b: 0x1cef, 0xc1c: 0x1cfe, 0xc1d: 0x1d0d,
	0xc1e: 0x1d1c, 0xc1f: 0x1d2b, 0xc20: 0x1d3a, 0xc21: 0x1d49, 0xc22: 0x2198, 0xc23: 0x21aa,
	0xc24: 0x21bc, 0xc25: 0x21c8, 0xc26: 0x21d4, 0xc27: 0x21e0, 0xc28: 0x21ec, 0xc29: 0x21f8,
	0xc2a: 0x2204, 0xc2b: 0x2210, 0xc2c: 0x224c, 0xc2d: 0x2258, 0xc2e: 0x2264, 0xc2f: 0x2270,
	0xc30: 0x227c, 0xc31: 0x1c1a, 0xc32: 0x19cc, 0xc33: 0x1939, 0xc34: 0x1bea, 0xc35: 0x1a4d,
	0xc36: 0x1a5c, 0xc37: 0x19d2, 0xc38: 0x1c02, 0xc39: 0x1c06, 0xc3a: 0x1963, 0xc3b: 0x270e,
	0xc3c: 0x271c, 0xc3d: 0x2707, 0xc3e: 0x2715, 0xc3f: 0x2aed,
	// Block 0x31, offset 0xc40
	0xc40: 0x1a50, 0xc41: 0x1a38, 0xc42: 0x1c66, 0xc43: 0x1a20, 0xc44: 0x19f9, 0xc45: 0x196c,
	0xc46: 0x197b, 0xc47: 0x194b, 0xc48: 0x1bf6, 0xc49: 0x1d58, 0xc4a: 0x1a53, 0xc4b: 0x1a3b,
	0xc4c: 0x1c6a, 0xc4d: 0x1c76, 0xc4e: 0x1a2c, 0xc4f: 0x1a02, 0xc50: 0x195a, 0xc51: 0x1c22,
	0xc52: 0x1bb6, 0xc53: 0x1ba2, 0xc54: 0x1bd2, 0xc55: 0x1c7a, 0xc56: 0x1a2f, 0xc57: 0x19cf,
	0xc58: 0x1a05, 0xc59: 0x19e4, 0xc5a: 0x1a47, 0xc5b: 0x1c7e, 0xc5c: 0x1a32, 0xc5d: 0x19c6,
	0xc5e: 0x1a08, 0xc5f: 0x1c42, 0xc60: 0x1bfa, 0xc61: 0x1a1a, 0xc62: 0x1c2a, 0xc63: 0x1c46,
	0xc64: 0x1bfe, 0xc65: 0x1a1d, 0xc66: 0x1c2e, 0xc67: 0x22ee, 0xc68: 0x2302, 0xc69: 0x199c,
	0xc6a: 0x1c26, 0xc6b: 0x1bba, 0xc6c: 0x1ba6, 0xc6d: 0x1c4e, 0xc6e: 0x2723, 0xc6f: 0x27ba,
	0xc70: 0x1a5f, 0xc71: 0x1a4a, 0xc72: 0x1c82, 0xc73: 0x1a35, 0xc74: 0x1a56, 0xc75: 0x1a3e,
	0xc76: 0x1c6e, 0xc77: 0x1a23, 0xc78: 0x19fc, 0xc79: 0x1987, 0xc7a: 0x1a59, 0xc7b: 0x1a41,
	0xc7c: 0x1c72, 0xc7d: 0x1a26, 0xc7e: 0x19ff, 0xc7f: 0x198a,
	// Block 0x32, offset 0xc80
	0xc80: 0x1c32, 0xc81: 0x1bbe, 0xc82: 0x1d53, 0xc83: 0x193c, 0xc84: 0x19c0, 0xc85: 0x19c3,
	0xc86: 0x22fb, 0xc87: 0x1b9a, 0xc88: 0x19c9, 0xc89: 0x194e, 0xc8a: 0x19e7, 0xc8b: 0x1951,
	0xc8c: 0x19f0, 0xc8d: 0x196f, 0xc8e: 0x1972, 0xc8f: 0x1a0b, 0xc90: 0x1a11, 0xc91: 0x1a14,
	0xc92: 0x1c36, 0xc93: 0x1a17, 0xc94: 0x1a29, 0xc95: 0x1c3e, 0xc96: 0x1c4a, 0xc97: 0x1996,
	0xc98: 0x1d5d, 0xc99: 0x1bc2, 0xc9a: 0x1999, 0xc9b: 0x1a62, 0xc9c: 0x19ab, 0xc9d: 0x19ba,
	0xc9e: 0x22e8, 0xc9f: 0x22e2, 0xca0: 0x1cc7, 0xca1: 0x1cd6, 0xca2: 0x1ce5, 0xca3: 0x1cf4,
	0xca4: 0x1d03, 0xca5: 0x1d12, 0xca6: 0x1d21, 0xca7: 0x1d30, 0xca8: 0x1d3f, 0xca9: 0x218c,
	0xcaa: 0x219e, 0xcab: 0x21b0, 0xcac: 0x21c2, 0xcad: 0x21ce, 0xcae: 0x21da, 0xcaf: 0x21e6,
	0xcb0: 0x21f2, 0xcb1: 0x21fe, 0xcb2: 0x220a, 0xcb3: 0x2246, 0xcb4: 0x2252, 0xcb5: 0x225e,
	0xcb6: 0x226a, 0xcb7: 0x2276, 0xcb8: 0x2282, 0xcb9: 0x2288, 0xcba: 0x228e, 0xcbb: 0x2294,
	0xcbc: 0x229a, 0xcbd: 0x22ac, 0xcbe: 0x22b2, 0xcbf: 0x1c16,
	// Block 0x33, offset 0xcc0
	0xcc0: 0x137a, 0xcc1: 0x0cfe, 0xcc2: 0x13d6, 0xcc3: 0x13a2, 0xcc4: 0x0e5a, 0xcc5: 0x06ee,
	0xcc6: 0x08e2, 0xcc7: 0x162e, 0xcc8: 0x162e, 0xcc9: 0x0a0e, 0xcca: 0x1462, 0xccb: 0x0946,
	0xccc: 0x0a0a, 0xccd: 0x0bf2, 0xcce: 0x0fd2, 0xccf: 0x1162, 0xcd0: 0x129a, 0xcd1: 0x12d6,
	0xcd2: 0x130a, 0xcd3: 0x141e, 0xcd4: 0x0d76, 0xcd5: 0x0e02, 0xcd6: 0x0eae, 0xcd7: 0x0f46,
	0xcd8: 0x1262, 0xcd9: 0x144a, 0xcda: 0x1576, 0xcdb: 0x0712, 0xcdc: 0x08b6, 0xcdd: 0x0d8a,
	0xcde: 0x0ed2, 0xcdf: 0x1296, 0xce0: 0x15c6, 0xce1: 0x0ab6, 0xce2: 0x0e7a, 0xce3: 0x1286,
	0xce4: 0x131a, 0xce5: 0x0c26, 0xce6: 0x11be, 0xce7: 0x12e2, 0xce8: 0x0b22, 0xce9: 0x0d12,
	0xcea: 0x0e1a, 0xceb: 0x0f1e, 0xcec: 0x142a, 0xced: 0x0752, 0xcee: 0x07ea, 0xcef: 0x0856,
	0xcf0: 0x0c8e, 0xcf1: 0x0d82, 0xcf2: 0x0ece, 0xcf3: 0x0ff2, 0xcf4: 0x117a, 0xcf5: 0x128e,
	0xcf6: 0x12a6, 0xcf7: 0x13ca, 0xcf8: 0x14f2, 0xcf9: 0x15a6, 0xcfa: 0x15c2, 0xcfb: 0x102e,
	0xcfc: 0x106e, 0xcfd: 0x1126, 0xcfe: 0x1246, 0xcff: 0x147e,
	// Block 0x34, offset 0xd00
	0xd00: 0x15ce, 0xd01: 0x134e, 0xd02: 0x09ca, 0xd03: 0x0b3e, 0xd04: 0x10de, 0xd05: 0x119e,
	0xd06: 0x0f02, 0xd07: 0x1036, 0xd08: 0x139a, 0xd09: 0x14ea, 0xd0a: 0x09c6, 0xd0b: 0x0a92,
	0xd0c: 0x0d7a, 0xd0d: 0x0e2e, 0xd0e: 0x0e62, 0xd0f: 0x1116, 0xd10: 0x113e, 0xd11: 0x14aa,
	0xd12: 0x0852, 0xd13: 0x11aa, 0xd14: 0x07f6, 0xd15: 0x07f2, 0xd16: 0x109a, 0xd17: 0x112a,
	0xd18: 0x125e, 0xd19: 0x14b2, 0xd1a: 0x136a, 0xd1b: 0x0c2a, 0xd1c: 0x0d76, 0xd1d: 0x135a,
	0xd1e: 0x06fa, 0xd1f: 0x0a66, 0xd20: 0x0b96, 0xd21: 0x0f32, 0xd22: 0x0fb2, 0xd23: 0x0876,
	0xd24: 0x103e, 0xd25: 0x0762, 0xd26: 0x0b7a, 0xd27: 0x06da, 0xd28: 0x0dee, 0xd29: 0x0ca6,
	0xd2a: 0x1112, 0xd2b: 0x08ca, 0xd2c: 0x09b6, 0xd2d: 0x0ffe, 0xd2e: 0x1266, 0xd2f: 0x133e,
	0xd30: 0x0dba, 0xd31: 0x13fa, 0xd32: 0x0de6, 0xd33: 0x0c3a, 0xd34: 0x121e, 0xd35: 0x0c5a,
	0xd36: 0x0fae, 0xd37: 0x072e, 0xd38: 0x07aa, 0xd39: 0x07ee, 0xd3a: 0x0d56, 0xd3b: 0x10fe,
	0xd3c: 0x11f6, 0xd3d: 0x134a, 0xd3e: 0x145e, 0xd3f: 0x085e,
	// Block 0x35, offset 0xd40
	0xd40: 0x0912, 0xd41: 0x0a1a, 0xd42: 0x0b32, 0xd43: 0x0cc2, 0xd44: 0x0e7e, 0xd45: 0x1042,
	0xd46: 0x149a, 0xd47: 0x157e, 0xd48: 0x15d2, 0xd49: 0x15ea, 0xd4a: 0x083a, 0xd4b: 0x0cf6,
	0xd4c: 0x0da6, 0xd4d: 0x13ee, 0xd4e: 0x0afe, 0xd4f: 0x0bda, 0xd50: 0x0bf6, 0xd51: 0x0c86,
	0xd52: 0x0e6e, 0xd53: 0x0eba, 0xd54: 0x0f6a, 0xd55: 0x108e, 0xd56: 0x1132, 0xd57: 0x1196,
	0xd58: 0x13de, 0xd59: 0x126e, 0xd5a: 0x1406, 0xd5b: 0x1482, 0xd5c: 0x0812, 0xd5d: 0x083e,
	0xd5e: 0x0926, 0xd5f: 0x0eaa, 0xd60: 0x12f6, 0xd61: 0x133e, 0xd62: 0x0b1e, 0xd63: 0x0b8e,
	0xd64: 0x0c52, 0xd65: 0x0db2, 0xd66: 0x10da, 0xd67: 0x0f26, 0xd68: 0x073e, 0xd69: 0x0982,
	0xd6a: 0x0a66, 0xd6b: 0x0aca, 0xd6c: 0x0b9a, 0xd6d: 0x0f42, 0xd6e: 0x0f5e, 0xd6f: 0x116e,
	0xd70: 0x118e, 0xd71: 0x1466, 0xd72: 0x14e6, 0xd73: 0x14f6, 0xd74: 0x1532, 0xd75: 0x0756,
	0xd76: 0x1082, 0xd77: 0x1452, 0xd78: 0x14ce, 0xd79: 0x0bb2, 0xd7a: 0x071a, 0xd7b: 0x077a,
	0xd7c: 0x0a6a, 0xd7d: 0x0a8a, 0xd7e: 0x0cb2, 0xd7f: 0x0d76,
	// Block 0x36, offset 0xd80
	0xd80: 0x0ec6, 0xd81: 0x0fce, 0xd82: 0x127a, 0xd83: 0x141a, 0xd84: 0x1626, 0xd85: 0x0ce6,
	0xd86: 0x14a6, 0xd87: 0x0836, 0xd88: 0x0d32, 0xd89: 0x0d3e, 0xd8a: 0x0e12, 0xd8b: 0x0e4a,
	0xd8c: 0x0f4e, 0xd8d: 0x0faa, 0xd8e: 0x102a, 0xd8f: 0x110e, 0xd90: 0x153e, 0xd91: 0x07b2,
	0xd92: 0x0c06, 0xd93: 0x14b6, 0xd94: 0x076a, 0xd95: 0x0aae, 0xd96: 0x0e32, 0xd97: 0x13e2,
	0xd98: 0x0b6a, 0xd99: 0x0bba, 0xd9a: 0x0d46, 0xd9b: 0x0f32, 0xd9c: 0x14be, 0xd9d: 0x081a,
	0xd9e: 0x0902, 0xd9f: 0x0a9a, 0xda0: 0x0cd6, 0xda1: 0x0d22, 0xda2: 0x0d62, 0xda3: 0x0df6,
	0xda4: 0x0f4a, 0xda5: 0x0fbe, 0xda6: 0x115a, 0xda7: 0x12fa, 0xda8: 0x1306, 0xda9: 0x145a,
	0xdaa: 0x14da, 0xdab: 0x0886, 0xdac: 0x0e4e, 0xdad: 0x0906, 0xdae: 0x0eca, 0xdaf: 0x0f6e,
	0xdb0: 0x128a, 0xdb1: 0x14c2, 0xdb2: 0x15ae, 0xdb3: 0x15d6, 0xdb4: 0x0d3a, 0xdb5: 0x0e2a,
	0xdb6: 0x11c6, 0xdb7: 0x10ba, 0xdb8: 0x10c6, 0xdb9: 0x10ea, 0xdba: 0x0f1a, 0xdbb: 0x0ea2,
	0xdbc: 0x1366, 0xdbd: 0x0736, 0xdbe: 0x122e, 0xdbf: 0x081e,
	// Block 0x37, offset 0xdc0
	0xdc0: 0x080e, 0xdc1: 0x0b0e, 0xdc2: 0x0c2e, 0xdc3: 0x10f6, 0xdc4: 0x0a56, 0xdc5: 0x0e06,
	0xdc6: 0x0cf2, 0xdc7: 0x13ea, 0xdc8: 0x12ea, 0xdc9: 0x14ae, 0xdca: 0x1326, 0xdcb: 0x0b2a,
	0xdcc: 0x078a, 0xdcd: 0x095e, 0xdd0: 0x09b2,
	0xdd2: 0x0ce2, 0xdd5: 0x07fa, 0xdd6: 0x0f22, 0xdd7: 0x0fe6,
	0xdd8: 0x104a, 0xdd9: 0x1066, 0xdda: 0x106a, 0xddb: 0x107e, 0xddc: 0x14fe, 0xddd: 0x10ee,
	0xdde: 0x1172, 0xde0: 0x1292, 0xde2: 0x1356,
	0xde5: 0x140a, 0xde6: 0x1436,
	0xdea: 0x1552, 0xdeb: 0x1556, 0xdec: 0x155a, 0xded: 0x15be, 0xdee: 0x142e, 0xdef: 0x14ca,
	0xdf0: 0x075a, 0xdf1: 0x077e, 0xdf2: 0x0792, 0xdf3: 0x084e, 0xdf4: 0x085a, 0xdf5: 0x089a,
	0xdf6: 0x094e, 0xdf7: 0x096a, 0xdf8: 0x0972, 0xdf9: 0x09ae, 0xdfa: 0x09ba, 0xdfb: 0x0a96,
	0xdfc: 0x0a9e, 0xdfd: 0x0ba6, 0xdfe: 0x0bce, 0xdff: 0x0bd6,
	// Block 0x38, offset 0xe00
	0xe00: 0x0bee, 0xe01: 0x0c9a, 0xe02: 0x0cca, 0xe03: 0x0cea, 0xe04: 0x0d5a, 0xe05: 0x0e1e,
	0xe06: 0x0e3a, 0xe07: 0x0e6a, 0xe08: 0x0ebe, 0xe09: 0x0ede, 0xe0a: 0x0f52, 0xe0b: 0x1032,
	0xe0c: 0x104e, 0xe0d: 0x1056, 0xe0e: 0x1052, 0xe0f: 0x105a, 0xe10: 0x105e, 0xe11: 0x1062,
	0xe12: 0x1076, 0xe13: 0x107a, 0xe14: 0x109e, 0xe15: 0x10b2, 0xe16: 0x10ce, 0xe17: 0x1132,
	0xe18: 0x113a, 0xe19: 0x1142, 0xe1a: 0x1156, 0xe1b: 0x117e, 0xe1c: 0x11ce, 0xe1d: 0x1202,
	0xe1e: 0x1202, 0xe1f: 0x126a, 0xe20: 0x1312, 0xe21: 0x132a, 0xe22: 0x135e, 0xe23: 0x1362,
	0xe24: 0x13a6, 0xe25: 0x13aa, 0xe26: 0x1402, 0xe27: 0x140a, 0xe28: 0x14de, 0xe29: 0x1522,
	0xe2a: 0x153a, 0xe2b: 0x0b9e, 0xe2c: 0x1721, 0xe2d: 0x11e6,
	0xe30: 0x06e2, 0xe31: 0x07e6, 0xe32: 0x07a6, 0xe33: 0x074e, 0xe34: 0x078e, 0xe35: 0x07ba,
	0xe36: 0x084a, 0xe37: 0x0866, 0xe38: 0x094e, 0xe39: 0x093a, 0xe3a: 0x094a, 0xe3b: 0x0966,
	0xe3c: 0x09b2, 0xe3d: 0x09c2, 0xe3e: 0x0a06, 0xe3f: 0x0a12,
	// Block 0x39, offset 0xe40
	0xe40: 0x0a2e, 0xe41: 0x0a3e, 0xe42: 0x0b26, 0xe43: 0x0b2e, 0xe44: 0x0b5e, 0xe45: 0x0b7e,
	0xe46: 0x0bae, 0xe47: 0x0bc6, 0xe48: 0x0bb6, 0xe49: 0x0bd6, 0xe4a: 0x0bca, 0xe4b: 0x0bee,
	0xe4c: 0x0c0a, 0xe4d: 0x0c62, 0xe4e: 0x0c6e, 0xe4f: 0x0c76, 0xe50: 0x0c9e, 0xe51: 0x0ce2,
	0xe52: 0x0d12, 0xe53: 0x0d16, 0xe54: 0x0d2a, 0xe55: 0x0daa, 0xe56: 0x0dba, 0xe57: 0x0e12,
	0xe58: 0x0e5e, 0xe59: 0x0e56, 0xe5a: 0x0e6a, 0xe5b: 0x0e86, 0xe5c: 0x0ebe, 0xe5d: 0x1016,
	0xe5e: 0x0ee2, 0xe5f: 0x0f16, 0xe60: 0x0f22, 0xe61: 0x0f62, 0xe62: 0x0f7e, 0xe63: 0x0fa2,
	0xe64: 0x0fc6, 0xe65: 0x0fca, 0xe66: 0x0fe6, 0xe67: 0x0fea, 0xe68: 0x0ffa, 0xe69: 0x100e,
	0xe6a: 0x100a, 0xe6b: 0x103a, 0xe6c: 0x10b6, 0xe6d: 0x10ce, 0xe6e: 0x10e6, 0xe6f: 0x111e,
	0xe70: 0x1132, 0xe71: 0x114e, 0xe72: 0x117e, 0xe73: 0x1232, 0xe74: 0x125a, 0xe75: 0x12ce,
	0xe76: 0x1316, 0xe77: 0x1322, 0xe78: 0x132a, 0xe79: 0x1342, 0xe7a: 0x1356, 0xe7b: 0x1346,
	0xe7c: 0x135e, 0xe7d: 0x135a, 0xe7e: 0x1352, 0xe7f: 0x1362,
	// Block 0x3a, offset 0xe80
	0xe80: 0x136e, 0xe81: 0x13aa, 0xe82: 0x13e6, 0xe83: 0x1416, 0xe84: 0x144e, 0xe85: 0x146e,
	0xe86: 0x14ba, 0xe87: 0x14de, 0xe88: 0x14fe, 0xe89: 0x1512, 0xe8a: 0x1522, 0xe8b: 0x152e,
	0xe8c: 0x153a, 0xe8d: 0x158e, 0xe8e: 0x162e, 0xe8f: 0x16b8, 0xe90: 0x16b3, 0xe91: 0x16e5,
	0xe92: 0x060a, 0xe93: 0x0632, 0xe94: 0x0636, 0xe95: 0x1767, 0xe96: 0x1794, 0xe97: 0x180c,
	0xe98: 0x161a, 0xe99: 0x162a,
	// Block 0x3b, offset 0xec0
	0xec0: 0x19db, 0xec1: 0x19de, 0xec2: 0x19e1, 0xec3: 0x1c0e, 0xec4: 0x1c12, 0xec5: 0x1a65,
	0xec6: 0x1a65,
	0xed3: 0x1d7b, 0xed4: 0x1d6c, 0xed5: 0x1d71, 0xed6: 0x1d80, 0xed7: 0x1d76,
	0xedd: 0x43a7,
	0xede: 0x8116, 0xedf: 0x4419, 0xee0: 0x0230, 0xee1: 0x0218, 0xee2: 0x0221, 0xee3: 0x0224,
	0xee4: 0x0227, 0xee5: 0x022a, 0xee6: 0x022d, 0xee7: 0x0233, 0xee8: 0x0236, 0xee9: 0x0017,
	0xeea: 0x4407, 0xeeb: 0x440d, 0xeec: 0x450b, 0xeed: 0x4513, 0xeee: 0x435f, 0xeef: 0x4365,
	0xef0: 0x436b, 0xef1: 0x4371, 0xef2: 0x437d, 0xef3: 0x4383, 0xef4: 0x4389, 0xef5: 0x4395,
	0xef6: 0x439b, 0xef8: 0x43a1, 0xef9: 0x43ad, 0xefa: 0x43b3, 0xefb: 0x43b9,
	0xefc: 0x43c5, 0xefe: 0x43cb,
	// Block 0x3c, offset 0xf00
	0xf00: 0x43d1, 0xf01: 0x43d7, 0xf03: 0x43dd, 0xf04: 0x43e3,
	0xf06: 0x43ef, 0xf07: 0x43f5, 0xf08: 0x43fb, 0xf09: 0x4401, 0xf0a: 0x4413, 0xf0b: 0x438f,
	0xf0c: 0x4377, 0xf0d: 0x43bf, 0xf0e: 0x43e9, 0xf0f: 0x1d85, 0xf10: 0x029c, 0xf11: 0x029c,
	0xf12: 0x02a5, 0xf13: 0x02a5, 0xf14: 0x02a5, 0xf15: 0x02a5, 0xf16: 0x02a8, 0xf17: 0x02a8,
	0xf18: 0x02a8, 0xf19: 0x02a8, 0xf1a: 0x02ae, 0xf1b: 0x02ae, 0xf1c: 0x02ae, 0xf1d: 0x02ae,
	0xf1e: 0x02a2, 0xf1f: 0x02a2, 0xf20: 0x02a2, 0xf21: 0x02a2, 0xf22: 0x02ab, 0xf23: 0x02ab,
	0xf24: 0x02ab, 0xf25: 0x02ab, 0xf26: 0x029f, 0xf27: 0x029f, 0xf28: 0x029f, 0xf29: 0x029f,
	0xf2a: 0x02d2, 0xf2b: 0x02d2, 0xf2c: 0x02d2, 0xf2d: 0x02d2, 0xf2e: 0x02d5, 0xf2f: 0x02d5,
	0xf30: 0x02d5, 0xf31: 0x02d5, 0xf32: 0x02b4, 0xf33: 0x02b4, 0xf34: 0x02b4, 0xf35: 0x02b4,
	0xf36: 0x02b1, 0xf37: 0x02b1, 0xf38: 0x02b1, 0xf39: 0x02b1, 0xf3a: 0x02b7, 0xf3b: 0x02b7,
	0xf3c: 0x02b7, 0xf3d: 0x02b7, 0xf3e: 0x02ba, 0xf3f: 0x02ba,
	// Block 0x3d, offset 0xf40
	0xf40: 0x02ba, 0xf41: 0x02ba, 0xf42: 0x02c3, 0xf43: 0x02c3, 0xf44: 0x02c0, 0xf45: 0x02c0,
	0xf46: 0x02c6, 0xf47: 0x02c6, 0xf48: 0x02bd, 0xf49: 0x02bd, 0xf4a: 0x02cc, 0xf4b: 0x02cc,
	0xf4c: 0x02c9, 0xf4d: 0x02c9, 0xf4e: 0x02d8, 0xf4f: 0x02d8, 0xf50: 0x02d8, 0xf51: 0x02d8,
	0xf52: 0x02de, 0xf53: 0x02de, 0xf54: 0x02de, 0xf55: 0x02de, 0xf56: 0x02e4, 0xf57: 0x02e4,
	0xf58: 0x02e4, 0xf59: 0x02e4, 0xf5a: 0x02e1, 0xf5b: 0x02e1, 0xf5c: 0x02e1, 0xf5d: 0x02e1,
	0xf5e: 0x02e7, 0xf5f: 0x02e7, 0xf60: 0x02ea, 0xf61: 0x02ea, 0xf62: 0x02ea, 0xf63: 0x02ea,
	0xf64: 0x4485, 0xf65: 0x4485, 0xf66: 0x02f0, 0xf67: 0x02f0, 0xf68: 0x02f0, 0xf69: 0x02f0,
	0xf6a: 0x02ed, 0xf6b: 0x02ed, 0xf6c: 0x02ed, 0xf6d: 0x02ed, 0xf6e: 0x030b, 0xf6f: 0x030b,
	0xf70: 0x447f, 0xf71: 0x447f,
	// Block 0x3e, offset 0xf80
	0xf93: 0x02db, 0xf94: 0x02db, 0xf95: 0x02db, 0xf96: 0x02db, 0xf97: 0x02f9,
	0xf98: 0x02f9, 0xf99: 0x02f6, 0xf9a: 0x02f6, 0xf9b: 0x02fc, 0xf9c: 0x02fc, 0xf9d: 0x2055,
	0xf9e: 0x0302, 0xf9f: 0x0302, 0xfa0: 0x02f3, 0xfa1: 0x02f3, 0xfa2: 0x02ff, 0xfa3: 0x02ff,
	0xfa4: 0x0308, 0xfa5: 0x0308, 0xfa6: 0x0308, 0xfa7: 0x0308, 0xfa8: 0x0290, 0xfa9: 0x0290,
	0xfaa: 0x25b0, 0xfab: 0x25b0, 0xfac: 0x2620, 0xfad: 0x2620, 0xfae: 0x25ef, 0xfaf: 0x25ef,
	0xfb0: 0x260b, 0xfb1: 0x260b, 0xfb2: 0x2604, 0xfb3: 0x2604, 0xfb4: 0x2612, 0xfb5: 0x2612,
	0xfb6: 0x2619, 0xfb7: 0x2619, 0xfb8: 0x2619, 0xfb9: 0x25f6, 0xfba: 0x25f6, 0xfbb: 0x25f6,
	0xfbc: 0x0305, 0xfbd: 0x0305, 0xfbe: 0x0305, 0xfbf: 0x0305,
	// Block 0x3f, offset 0xfc0
	0xfc0: 0x25b7, 0xfc1: 0x25be, 0xfc2: 0x25da, 0xfc3: 0x25f6, 0xfc4: 0x25fd, 0xfc5: 0x1d8f,
	0xfc6: 0x1d94, 0xfc7: 0x1d99, 0xfc8: 0x1da8, 0xfc9: 0x1db7, 0xfca: 0x1dbc, 0xfcb: 0x1dc1,
	0xfcc: 0x1dc6, 0xfcd: 0x1dcb, 0xfce: 0x1dda, 0xfcf: 0x1de9, 0xfd0: 0x1dee, 0xfd1: 0x1df3,
	0xfd2: 0x1e02, 0xfd3: 0x1e11, 0xfd4: 0x1e16, 0xfd5: 0x1e1b, 0xfd6: 0x1e20, 0xfd7: 0x1e2f,
	0xfd8: 0x1e34, 0xfd9: 0x1e43, 0xfda: 0x1e48, 0xfdb: 0x1e4d, 0xfdc: 0x1e5c, 0xfdd: 0x1e61,
	0xfde: 0x1e66, 0xfdf: 0x1e70, 0xfe0: 0x1eac, 0xfe1: 0x1ebb, 0xfe2: 0x1eca, 0xfe3: 0x1ecf,
	0xfe4: 0x1ed4, 0xfe5: 0x1ede, 0xfe6: 0x1eed, 0xfe7: 0x1ef2, 0xfe8: 0x1f01, 0xfe9: 0x1f06,
	0xfea: 0x1f0b, 0xfeb: 0x1f1a, 0xfec: 0x1f1f, 0xfed: 0x1f2e, 0xfee: 0x1f33, 0xfef: 0x1f38,
	0xff0: 0x1f3d, 0xff1: 0x1f42, 0xff2: 0x1f47, 0xff3: 0x1f4c, 0xff4: 0x1f51, 0xff5: 0x1f56,
	0xff6: 0x1f5b, 0xff7: 0x1f60, 0xff8: 0x1f65, 0xff9: 0x1f6a, 0xffa: 0x1f6f, 0xffb: 0x1f74,
	0xffc: 0x1f79, 0xffd: 0x1f7e, 0xffe: 0x1f83, 0xfff: 0x1f8d,
	// Block 0x40, offset 0x1000
	0x1000: 0x1f92, 0x1001: 0x1f97, 0x1002: 0x1f9c, 0x1003: 0x1fa6, 0x1004: 0x1fab, 0x1005: 0x1fb5,
	0x1006: 0x1fba, 0x1007: 0x1fbf, 0x1008: 0x1fc4, 0x1009: 0x1fc9, 0x100a: 0x1fce, 0x100b: 0x1fd3,
	0x100c: 0x1fd8, 0x100d: 0x1fdd, 0x100e: 0x1fec, 0x100f: 0x1ffb, 0x1010: 0x2000, 0x1011: 0x2005,
	0x1012: 0x200a, 0x1013: 0x200f, 0x1014: 0x2014, 0x1015: 0x201e, 0x1016: 0x2023, 0x1017: 0x2028,
	0x1018: 0x2037, 0x1019: 0x2046, 0x101a: 0x204b, 0x101b: 0x4437, 0x101c: 0x443d, 0x101d: 0x4473,
	0x101e: 0x44ca, 0x101f: 0x44d1, 0x1020: 0x44d8, 0x1021: 0x44df, 0x1022: 0x44e6, 0x1023: 0x44ed,
	0x1024: 0x25cc, 0x1025: 0x25d3, 0x1026: 0x25da, 0x1027: 0x25e1, 0x1028: 0x25f6, 0x1029: 0x25fd,
	0x102a: 0x1d9e, 0x102b: 0x1da3, 0x102c: 0x1da8, 0x102d: 0x1dad, 0x102e: 0x1db7, 0x102f: 0x1dbc,
	0x1030: 0x1dd0, 0x1031: 0x1dd5, 0x1032: 0x1dda, 0x1033: 0x1ddf, 0x1034: 0x1de9, 0x1035: 0x1dee,
	0x1036: 0x1df8, 0x1037: 0x1dfd, 0x1038: 0x1e02, 0x1039: 0x1e07, 0x103a: 0x1e11, 0x103b: 0x1e16,
	0x103c: 0x1f42, 0x103d: 0x1f47, 0x103e: 0x1f56, 0x103f: 0x1f5b,
	// Block 0x41, offset 0x1040
	0x1040: 0x1f60, 0x1041: 0x1f74, 0x1042: 0x1f79, 0x1043: 0x1f7e, 0x1044: 0x1f83, 0x1045: 0x1f9c,
	0x1046: 0x1fa6, 0x1047: 0x1fab, 0x1048: 0x1fb0, 0x1049: 0x1fc4, 0x104a: 0x1fe2, 0x104b: 0x1fe7,
	0x104c: 0x1fec, 0x104d: 0x1ff1, 0x104e: 0x1ffb, 0x104f: 0x2000, 0x1050: 0x4473, 0x1051: 0x202d,
	0x1052: 0x2032, 0x1053: 0x2037, 0x1054: 0x203c, 0x1055: 0x2046, 0x1056: 0x204b, 0x1057: 0x25b7,
	0x1058: 0x25be, 0x1059: 0x25c5, 0x105a: 0x25da, 0x105b: 0x25e8, 0x105c: 0x1d8f, 0x105d: 0x1d94,
	0x105e: 0x1d99, 0x105f: 0x1da8, 0x1060: 0x1db2, 0x1061: 0x1dc1, 0x1062: 0x1dc6, 0x1063: 0x1dcb,
	0x1064: 0x1dda, 0x1065: 0x1de4, 0x1066: 0x1e02, 0x1067: 0x1e1b, 0x1068: 0x1e20, 0x1069: 0x1e2f,
	0x106a: 0x1e34, 0x106b: 0x1e43, 0x106c: 0x1e4d, 0x106d: 0x1e5c, 0x106e: 0x1e61, 0x106f: 0x1e66,
	0x1070: 0x1e70, 0x1071: 0x1eac, 0x1072: 0x1eb1, 0x1073: 0x1ebb, 0x1074: 0x1eca, 0x1075: 0x1ecf,
	0x1076: 0x1ed4, 0x1077: 0x1ede, 0x1078: 0x1eed, 0x1079: 0x1f01, 0x107a: 0x1f06, 0x107b: 0x1f0b,
	0x107c: 0x1f1a, 0x107d: 0x1f1f, 0x107e: 0x1f2e, 0x107f: 0x1f33,
	// Block 0x42, offset 0x1080
	0x1080: 0x1f38, 0x1081: 0x1f3d, 0x1082: 0x1f4c, 0x1083: 0x1f51, 0x1084: 0x1f65, 0x1085: 0x1f6a,
	0x1086: 0x1f6f, 0x1087: 0x1f74, 0x1088: 0x1f79, 0x1089: 0x1f8d, 0x108a: 0x1f92, 0x108b: 0x1f97,
	0x108c: 0x1f9c, 0x108d: 0x1fa1, 0x108e: 0x1fb5, 0x108f: 0x1fba, 0x1090: 0x1fbf, 0x1091: 0x1fc4,
	0x1092: 0x1fd3, 0x1093: 0x1fd8, 0x1094: 0x1fdd, 0x1095: 0x1fec, 0x1096: 0x1ff6, 0x1097: 0x2005,
	0x1098: 0x200a, 0x1099: 0x4467, 0x109a: 0x201e, 0x109b: 0x2023, 0x109c: 0x2028, 0x109d: 0x2037,
	0x109e: 0x2041, 0x109f: 0x25da, 0x10a0: 0x25e8, 0x10a1: 0x1da8, 0x10a2: 0x1db2, 0x10a3: 0x1dda,
	0x10a4: 0x1de4, 0x10a5: 0x1e02, 0x10a6: 0x1e0c, 0x10a7: 0x1e70, 0x10a8: 0x1e75, 0x10a9: 0x1e98,
	0x10aa: 0x1e9d, 0x10ab: 0x1f74, 0x10ac: 0x1f79, 0x10ad: 0x1f9c, 0x10ae: 0x1fec, 0x10af: 0x1ff6,
	0x10b0: 0x2037, 0x10b1: 0x2041, 0x10b2: 0x451b, 0x10b3: 0x4523, 0x10b4: 0x452b, 0x10b5: 0x1ef7,
	0x10b6: 0x1efc, 0x10b7: 0x1f10, 0x10b8: 0x1f15, 0x10b9: 0x1f24, 0x10ba: 0x1f29, 0x10bb: 0x1e7a,
	0x10bc: 0x1e7f, 0x10bd: 0x1ea2, 0x10be: 0x1ea7, 0x10bf: 0x1e39,
	// Block 0x43, offset 0x10c0
	0x10c0: 0x1e3e, 0x10c1: 0x1e25, 0x10c2: 0x1e2a, 0x10c3: 0x1e52, 0x10c4: 0x1e57, 0x10c5: 0x1ec0,
	0x10c6: 0x1ec5, 0x10c7: 0x1ee3, 0x10c8: 0x1ee8, 0x10c9: 0x1e84, 0x10ca: 0x1e89, 0x10cb: 0x1e8e,
	0x10cc: 0x1e98, 0x10cd: 0x1e93, 0x10ce: 0x1e6b, 0x10cf: 0x1eb6, 0x10d0: 0x1ed9, 0x10d1: 0x1ef7,
	0x10d2: 0x1efc, 0x10d3: 0x1f10, 0x10d4: 0x1f15, 0x10d5: 0x1f24, 0x10d6: 0x1f29, 0x10d7: 0x1e7a,
	0x10d8: 0x1e7f, 0x10d9: 0x1ea2, 0x10da: 0x1ea7, 0x10db: 0x1e39, 0x10dc: 0x1e3e, 0x10dd: 0x1e25,
	0x10de: 0x1e2a, 0x10df: 0x1e52, 0x10e0: 0x1e57, 0x10e1: 0x1ec0, 0x10e2: 0x1ec5, 0x10e3: 0x1ee3,
	0x10e4: 0x1ee8, 0x10e5: 0x1e84, 0x10e6: 0x1e89, 0x10e7: 0x1e8e, 0x10e8: 0x1e98, 0x10e9: 0x1e93,
	0x10ea: 0x1e6b, 0x10eb: 0x1eb6, 0x10ec: 0x1ed9, 0x10ed: 0x1e84, 0x10ee: 0x1e89, 0x10ef: 0x1e8e,
	0x10f0: 0x1e98, 0x10f1: 0x1e75, 0x10f2: 0x1e9d, 0x10f3: 0x1ef2, 0x10f4: 0x1e5c, 0x10f5: 0x1e61,
	0x10f6: 0x1e66, 0x10f7: 0x1e84, 0x10f8: 0x1e89, 0x10f9: 0x1e8e, 0x10fa: 0x1ef2, 0x10fb: 0x1f01,
	0x10fc: 0x441f, 0x10fd: 0x441f,
	// Block 0x44, offset 0x1100
	0x1110: 0x2317, 0x1111: 0x232c,
	0x1112: 0x232c, 0x1113: 0x2333, 0x1114: 0x233a, 0x1115: 0x234f, 0x1116: 0x2356, 0x1117: 0x235d,
	0x1118: 0x2380, 0x1119: 0x2380, 0x111a: 0x23a3, 0x111b: 0x239c, 0x111c: 0x23b8, 0x111d: 0x23aa,
	0x111e: 0x23b1, 0x111f: 0x23d4, 0x1120: 0x23d4, 0x1121: 0x23cd, 0x1122: 0x23db, 0x1123: 0x23db,
	0x1124: 0x2405, 0x1125: 0x2405, 0x1126: 0x2421, 0x1127: 0x23e9, 0x1128: 0x23e9, 0x1129: 0x23e2,
	0x112a: 0x23f7, 0x112b: 0x23f7, 0x112c: 0x23fe, 0x112d: 0x23fe, 0x112e: 0x2428, 0x112f: 0x2436,
	0x1130: 0x2436, 0x1131: 0x243d, 0x1132: 0x243d, 0x1133: 0x2444, 0x1134: 0x244b, 0x1135: 0x2452,
	0x1136: 0x2459, 0x1137: 0x2459, 0x1138: 0x2460, 0x1139: 0x246e, 0x113a: 0x247c, 0x113b: 0x2475,
	0x113c: 0x2483, 0x113d: 0x2483, 0x113e: 0x2498, 0x113f: 0x249f,
	// Block 0x45, offset 0x1140
	0x1140: 0x24d0, 0x1141: 0x24de, 0x1142: 0x24d7, 0x1143: 0x24bb, 0x1144: 0x24bb, 0x1145: 0x24e5,
	0x1146: 0x24e5, 0x1147: 0x24ec, 0x1148: 0x24ec, 0x1149: 0x2516, 0x114a: 0x251d, 0x114b: 0x2524,
	0x114c: 0x24fa, 0x114d: 0x2508, 0x114e: 0x252b, 0x114f: 0x2532,
	0x1152: 0x2501, 0x1153: 0x2586, 0x1154: 0x258d, 0x1155: 0x2563, 0x1156: 0x256a, 0x1157: 0x254e,
	0x1158: 0x254e, 0x1159: 0x2555, 0x115a: 0x257f, 0x115b: 0x2578, 0x115c: 0x25a2, 0x115d: 0x25a2,
	0x115e: 0x2310, 0x115f: 0x2325, 0x1160: 0x231e, 0x1161: 0x2348, 0x1162: 0x2341, 0x1163: 0x236b,
	0x1164: 0x2364, 0x1165: 0x238e, 0x1166: 0x2372, 0x1167: 0x2387, 0x1168: 0x23bf, 0x1169: 0x240c,
	0x116a: 0x23f0, 0x116b: 0x242f, 0x116c: 0x24c9, 0x116d: 0x24f3, 0x116e: 0x259b, 0x116f: 0x2594,
	0x1170: 0x25a9, 0x1171: 0x2540, 0x1172: 0x24a6, 0x1173: 0x2571, 0x1174: 0x2498, 0x1175: 0x24d0,
	0x1176: 0x2467, 0x1177: 0x24b4, 0x1178: 0x2547, 0x1179: 0x2539, 0x117a: 0x24c2, 0x117b: 0x24ad,
	0x117c: 0x24c2, 0x117d: 0x2547, 0x117e: 0x2379, 0x117f: 0x2395,
	// Block 0x46, offset 0x1180
	0x1180: 0x250f, 0x1181: 0x248a, 0x1182: 0x2309, 0x1183: 0x24ad, 0x1184: 0x2452, 0x1185: 0x2421,
	0x1186: 0x23c6, 0x1187: 0x255c,
	0x11b0: 0x241a, 0x11b1: 0x2491, 0x11b2: 0x27cc, 0x11b3: 0x27c3, 0x11b4: 0x27f9, 0x11b5: 0x27e7,
	0x11b6: 0x27d5, 0x11b7: 0x27f0, 0x11b8: 0x2802, 0x11b9: 0x2413, 0x11ba: 0x2c89, 0x11bb: 0x2b09,
	0x11bc: 0x27de,
	// Block 0x47, offset 0x11c0
	0x11d0: 0x0019, 0x11d1: 0x0486,
	0x11d2: 0x048a, 0x11d3: 0x0035, 0x11d4: 0x0037, 0x11d5: 0x0003, 0x11d6: 0x003f, 0x11d7: 0x04c2,
	0x11d8: 0x04c6, 0x11d9: 0x1b62,
	0x11e0: 0x8133, 0x11e1: 0x8133, 0x11e2: 0x8133, 0x11e3: 0x8133,
	0x11e4: 0x8133, 0x11e5: 0x8133, 0x11e6: 0x8133, 0x11e7: 0x812e, 0x11e8: 0x812e, 0x11e9: 0x812e,
	0x11ea: 0x812e, 0x11eb: 0x812e, 0x11ec: 0x812e, 0x11ed: 0x812e, 0x11ee: 0x8133, 0x11ef: 0x8133,
	0x11f0: 0x1876, 0x11f1: 0x0446, 0x11f2: 0x0442, 0x11f3: 0x007f, 0x11f4: 0x007f, 0x11f5: 0x0011,
	0x11f6: 0x0013, 0x11f7: 0x00b7, 0x11f8: 0x00bb, 0x11f9: 0x04ba, 0x11fa: 0x04be, 0x11fb: 0x04ae,
	0x11fc: 0x04b2, 0x11fd: 0x0496, 0x11fe: 0x049a, 0x11ff: 0x048e,
	// Block 0x48, offset 0x1200
	0x1200: 0x0492, 0x1201: 0x049e, 0x1202: 0x04a2, 0x1203: 0x04a6, 0x1204: 0x04aa,
	0x1207: 0x0077, 0x1208: 0x007b, 0x1209: 0x4280, 0x120a: 0x4280, 0x120b: 0x4280,
	0x120c: 0x4280, 0x120d: 0x007f, 0x120e: 0x007f, 0x120f: 0x007f, 0x1210: 0x0019, 0x1211: 0x0486,
	0x1212: 0x001d, 0x1214: 0x0037, 0x1215: 0x0035, 0x1216: 0x003f, 0x1217: 0x0003,
	0x1218: 0x0446, 0x1219: 0x0011, 0x121a: 0x0013, 0x121b: 0x00b7, 0x121c: 0x00bb, 0x121d: 0x04ba,
	0x121e: 0x04be, 0x121f: 0x0007, 0x1220: 0x000d, 0x1221: 0x0015, 0x1222: 0x0017, 0x1223: 0x001b,
	0x1224: 0x0039, 0x1225: 0x003d, 0x1226: 0x003b, 0x1228: 0x0079, 0x1229: 0x0009,
	0x122a: 0x000b, 0x122b: 0x0041,
	0x1230: 0x42c1, 0x1231: 0x4443, 0x1232: 0x42c6, 0x1234: 0x42cb,
	0x1236: 0x42d0, 0x1237: 0x4449, 0x1238: 0x42d5, 0x1239: 0x444f, 0x123a: 0x42da, 0x123b: 0x4455,
	0x123c: 0x42df, 0x123d: 0x445b, 0x123e: 0x42e4, 0x123f: 0x4461,
	// Block 0x49, offset 0x1240
	0x1240: 0x0239, 0x1241: 0x4425, 0x1242: 0x4425, 0x1243: 0x442b, 0x1244: 0x442b, 0x1245: 0x446d,
	0x1246: 0x446d, 0x1247: 0x4431, 0x1248: 0x4431, 0x1249: 0x4479, 0x124a: 0x4479, 0x124b: 0x4479,
	0x124c: 0x4479, 0x124d: 0x023c, 0x124e: 0x023c, 0x124f: 0x023f, 0x1250: 0x023f, 0x1251: 0x023f,
	0x1252: 0x023f, 0x1253: 0x0242, 0x1254: 0x0242, 0x1255: 0x0245, 0x1256: 0x0245, 0x1257: 0x0245,
	0x1258: 0x0245, 0x1259: 0x0248, 0x125a: 0x0248, 0x125b: 0x0248, 0x125c: 0x0248, 0x125d: 0x024b,
	0x125e: 0x024b, 0x125f: 0x024b, 0x1260: 0x024b, 0x1261: 0x024e, 0x1262: 0x024e, 0x1263: 0x024e,
	0x1264: 0x024e, 0x1265: 0x0251, 0x1266: 0x0251, 0x1267: 0x0251, 0x1268: 0x0251, 0x1269: 0x0254,
	0x126a: 0x0254, 0x126b: 0x0257, 0x126c: 0x0257, 0x126d: 0x025a, 0x126e: 0x025a, 0x126f: 0x025d,
	0x1270: 0x025d, 0x1271: 0x0260, 0x1272: 0x0260, 0x1273: 0x0260, 0x1274: 0x0260, 0x1275: 0x0263,
	0x1276: 0x0263, 0x1277: 0x0263, 0x1278: 0x0263, 0x1279: 0x0266, 0x127a: 0x0266, 0x127b: 0x0266,
	0x127c: 0x0266, 0x127d: 0x0269, 0x127e: 0x0269, 0x127f: 0x0269,
	// Block 0x4a, offset 0x1280
	0x1280: 0x0269, 0x1281: 0x026c, 0x1282: 0x026c, 0x1283: 0x026c, 0x1284: 0x026c, 0x1285: 0x026f,
	0x1286: 0x026f, 0x1287: 0x026f, 0x1288: 0x026f, 0x1289: 0x0272, 0x128a: 0x0272, 0x128b: 0x0272,
	0x128c: 0x0272, 0x128d: 0x0275, 0x128e: 0x0275, 0x128f: 0x0275, 0x1290: 0x0275, 0x1291: 0x0278,
	0x1292: 0x0278, 0x1293: 0x0278, 0x1294: 0x0278, 0x1295: 0x027b, 0x1296: 0x027b, 0x1297: 0x027b,
	0x1298: 0x027b, 0x1299: 0x027e, 0x129a: 0x027e, 0x129b: 0x027e, 0x129c: 0x027e, 0x129d: 0x0281,
	0x129e: 0x0281, 0x129f: 0x0281, 0x12a0: 0x0281, 0x12a1: 0x0284, 0x12a2: 0x0284, 0x12a3: 0x0284,
	0x12a4: 0x0284, 0x12a5: 0x0287, 0x12a6: 0x0287, 0x12a7: 0x0287, 0x12a8: 0x0287, 0x12a9: 0x028a,
	0x12aa: 0x028a, 0x12ab: 0x028a, 0x12ac: 0x028a, 0x12ad: 0x028d, 0x12ae: 0x028d, 0x12af: 0x0290,
	0x12b0: 0x0290, 0x12b1: 0x0293, 0x12b2: 0x0293, 0x12b3: 0x0293, 0x12b4: 0x0293, 0x12b5: 0x2e17,
	0x12b6: 0x2e17, 0x12b7: 0x2e1f, 0x12b8: 0x2e1f, 0x12b9: 0x2e27, 0x12ba: 0x2e27, 0x12bb: 0x1f88,
	0x12bc: 0x1f88,
	// Block 0x4b, offset 0x12c0
	0x12c0: 0x0081, 0x12c1: 0x0083, 0x12c2: 0x0085, 0x12c3: 0x0087, 0x12c4: 0x0089, 0x12c5: 0x008b,
	0x12c6: 0x008d, 0x12c7: 0x008f, 0x12c8: 0x0091, 0x12c9: 0x0093, 0x12ca: 0x0095, 0x12cb: 0x0097,
	0x12cc: 0x0099, 0x12cd: 0x009b, 0x12ce: 0x009d, 0x12cf: 0x009f, 0x12d0: 0x00a1, 0x12d1: 0x00a3,
	0x12d2: 0x00a5, 0x12d3: 0x00a7, 0x12d4: 0x00a9, 0x12d5: 0x00ab, 0x12d6: 0x00ad, 0x12d7: 0x00af,
	0x12d8: 0x00b1, 0x12d9: 0x00b3, 0x12da: 0x00b5, 0x12db: 0x00b7, 0x12dc: 0x00b9, 0x12dd: 0x00bb,
	0x12de: 0x00bd, 0x12df: 0x047a, 0x12e0: 0x047e, 0x12e1: 0x048a, 0x12e2: 0x049e, 0x12e3: 0x04a2,
	0x12e4: 0x0486, 0x12e5: 0x05ae, 0x12e6: 0x05a6, 0x12e7: 0x04ca, 0x12e8: 0x04d2, 0x12e9: 0x04da,
	0x12ea: 0x04e2, 0x12eb: 0x04ea, 0x12ec: 0x056e, 0x12ed: 0x0576, 0x12ee: 0x057e, 0x12ef: 0x0522,
	0x12f0: 0x05b2, 0x12f1: 0x04ce, 0x12f2: 0x04d6, 0x12f3: 0x04de, 0x12f4: 0x04e6, 0x12f5: 0x04ee,
	0x12f6: 0x04f2, 0x12f7: 0x04f6, 0x12f8: 0x04fa, 0x12f9: 0x04fe, 0x12fa: 0x0502, 0x12fb: 0x0506,
	0x12fc: 0x050a, 0x12fd: 0x050e, 0x12fe: 0x0512, 0x12ff: 0x0516,
	// Block 0x4c, offset 0x1300
	0x1300: 0x051a, 0x1301: 0x051e, 0x1302: 0x0526, 0x1303: 0x052a, 0x1304: 0x052e, 0x1305: 0x0532,
	0x1306: 0x0536, 0x1307: 0x053a, 0x1308: 0x053e, 0x1309: 0x0542, 0x130a: 0x0546, 0x130b: 0x054a,
	0x130c: 0x054e, 0x130d: 0x0552, 0x130e: 0x0556, 0x130f: 0x055a, 0x1310: 0x055e, 0x1311: 0x0562,
	0x1312: 0x0566, 0x1313: 0x056a, 0x1314: 0x0572, 0x1315: 0x057a, 0x1316: 0x0582, 0x1317: 0x0586,
	0x1318: 0x058a, 0x1319: 0x058e, 0x131a: 0x0592, 0x131b: 0x0596, 0x131c: 0x059a, 0x131d: 0x05aa,
	0x131e: 0x4a8f, 0x131f: 0x4a95, 0x1320: 0x03c6, 0x1321: 0x0316, 0x1322: 0x031a, 0x1323: 0x4a52,
	0x1324: 0x031e, 0x1325: 0x4a58, 0x1326: 0x4a5e, 0x1327: 0x0322, 0x1328: 0x0326, 0x1329: 0x032a,
	0x132a: 0x4a64, 0x132b: 0x4a6a, 0x132c: 0x4a70, 0x132d: 0x4a76, 0x132e: 0x4a7c, 0x132f: 0x4a82,
	0x1330: 0x036a, 0x1331: 0x032e, 0x1332: 0x0332, 0x1333: 0x0336, 0x1334: 0x037e, 0x1335: 0x033a,
	0x1336: 0x033e, 0x1337: 0x0342, 0x1338: 0x0346, 0x1339: 0x034a, 0x133a: 0x034e, 0x133b: 0x0352,
	0x133c: 0x0356, 0x133d: 0x035a, 0x133e: 0x035e,
	// Block 0x4d, offset 0x1340
	0x1342: 0x49d4, 0x1343: 0x49da, 0x1344: 0x49e0, 0x1345: 0x49e6,
	0x1346: 0x49ec, 0x1347: 0x49f2, 0x134a: 0x49f8, 0x134b: 0x49fe,
	0x134c: 0x4a04, 0x134d: 0x4a0a, 0x134e: 0x4a10, 0x134f: 0x4a16,
	0x1352: 0x4a1c, 0x1353: 0x4a22, 0x1354: 0x4a28, 0x1355: 0x4a2e, 0x1356: 0x4a34, 0x1357: 0x4a3a,
	0x135a: 0x4a40, 0x135b: 0x4a46, 0x135c: 0x4a4c,
	0x1360: 0x00bf, 0x1361: 0x00c2, 0x1362: 0x00cb, 0x1363: 0x427b,
	0x1364: 0x00c8, 0x1365: 0x00c5, 0x1366: 0x044a, 0x1368: 0x046e, 0x1369: 0x044e,
	0x136a: 0x0452, 0x136b: 0x0456, 0x136c: 0x045a, 0x136d: 0x0472, 0x136e: 0x0476,
	// Block 0x4e, offset 0x1380
	0x1380: 0x0063, 0x1381: 0x0065, 0x1382: 0x0067, 0x1383: 0x0069, 0x1384: 0x006b, 0x1385: 0x006d,
	0x1386: 0x006f, 0x1387: 0x0071, 0x1388: 0x0073, 0x1389: 0x0075, 0x138a: 0x0083, 0x138b: 0x0085,
	0x138c: 0x0087, 0x138d: 0x0089, 0x138e: 0x008b, 0x138f: 0x008d, 0x1390: 0x008f, 0x1391: 0x0091,
	0x1392: 0x0093, 0x1393: 0x0095, 0x1394: 0x0097, 0x1395: 0x0099, 0x1396: 0x009b, 0x1397: 0x009d,
	0x1398: 0x009f, 0x1399: 0x00a1, 0x139a: 0x00a3, 0x139b: 0x00a5, 0x139c: 0x00a7, 0x139d: 0x00a9,
	0x139e: 0x00ab, 0x139f: 0x00ad, 0x13a0: 0x00af, 0x13a1: 0x00b1, 0x13a2: 0x00b3, 0x13a3: 0x00b5,
	0x13a4: 0x00dd, 0x13a5: 0x00f2, 0x13a8: 0x0176, 0x13a9: 0x0179,
	0x13aa: 0x017c, 0x13ab: 0x017f, 0x13ac: 0x0182, 0x13ad: 0x0185, 0x13ae: 0x0188, 0x13af: 0x018b,
	0x13b0: 0x018e, 0x13b1: 0x0191, 0x13b2: 0x0194, 0x13b3: 0x0197, 0x13b4: 0x019a, 0x13b5: 0x019d,
	0x13b6: 0x01a0, 0x13b7: 0x01a3, 0x13b8: 0x01a6, 0x13b9: 0x018b, 0x13ba: 0x01a9, 0x13bb: 0x01ac,
	0x13bc: 0x01af, 0x13bd: 0x01b2, 0x13be: 0x01b5, 0x13bf: 0x01b8,
	// Block 0x4f, offset 0x13c0
	0x13c0: 0x0200, 0x13c1: 0x0203, 0x13c2: 0x0206, 0x13c3: 0x045e, 0x13c4: 0x01ca, 0x13c5: 0x01d3,
	0x13c6: 0x01d9, 0x13c7: 0x01fd, 0x13c8: 0x01ee, 0x13c9: 0x01eb, 0x13ca: 0x0209, 0x13cb: 0x020c,
	0x13ce: 0x0021, 0x13cf: 0x0023, 0x13d0: 0x0025, 0x13d1: 0x0027,
	0x13d2: 0x0029, 0x13d3: 0x002b, 0x13d4: 0x002d, 0x13d5: 0x002f, 0x13d6: 0x0031, 0x13d7: 0x0033,
	0x13d8: 0x0021, 0x13d9: 0x0023, 0x13da: 0x0025, 0x13db: 0x0027, 0x13dc: 0x0029, 0x13dd: 0x002b,
	0x13de: 0x002d, 0x13df: 0x002f, 0x13e0: 0x0031, 0x13e1: 0x0033, 0x13e2: 0x0021, 0x13e3: 0x0023,
	0x13e4: 0x0025, 0x13e5: 0x0027, 0x13e6: 0x0029, 0x13e7: 0x002b, 0x13e8: 0x002d, 0x13e9: 0x002f,
	0x13ea: 0x0031, 0x13eb: 0x0033, 0x13ec: 0x0021, 0x13ed: 0x0023, 0x13ee: 0x0025, 0x13ef: 0x0027,
	0x13f0: 0x0029, 0x13f1: 0x002b, 0x13f2: 0x002d, 0x13f3: 0x002f, 0x13f4: 0x0031, 0x13f5: 0x0033,
	0x13f6: 0x0021, 0x13f7: 0x0023, 0x13f8: 0x0025, 0x13f9: 0x0027, 0x13fa: 0x0029, 0x13fb: 0x002b,
	0x13fc: 0x002d, 0x13fd: 0x002f, 0x13fe: 0x0031, 0x13ff: 0x0033,
	// Block 0x50, offset 0x1400
	0x1400: 0x023c, 0x1401: 0x023f, 0x1402: 0x024b, 0x1403: 0x0254, 0x1405: 0x028d,
	0x1406: 0x025d, 0x1407: 0x024e, 0x1408: 0x026c, 0x1409: 0x0293, 0x140a: 0x027e, 0x140b: 0x0281,
	0x140c: 0x0284, 0x140d: 0x0287, 0x140e: 0x0260, 0x140f: 0x0272, 0x1410: 0x0278, 0x1411: 0x0266,
	0x1412: 0x027b, 0x1413: 0x025a, 0x1414: 0x0263, 0x1415: 0x0245, 0x1416: 0x0248, 0x1417: 0x0251,
	0x1418: 0x0257, 0x1419: 0x0269, 0x141a: 0x026f, 0x141b: 0x0275, 0x141c: 0x0296, 0x141d: 0x02e7,
	0x141e: 0x02cf, 0x141f: 0x0299, 0x1421: 0x023f, 0x1422: 0x024b,
	0x1424: 0x028a, 0x1427: 0x024e, 0x1429: 0x0293,
	0x142a: 0x027e, 0x142b: 0x0281, 0x142c: 0x0284, 0x142d: 0x0287, 0x142e: 0x0260, 0x142f: 0x0272,
	0x1430: 0x0278, 0x1431: 0x0266, 0x1432: 0x027b, 0x1434: 0x0263, 0x1435: 0x0245,
	0x1436: 0x0248, 0x1437: 0x0251, 0x1439: 0x0269, 0x143b: 0x0275,
	// Block 0x51, offset 0x1440
	0x1442: 0x024b,
	0x1447: 0x024e, 0x1449: 0x0293, 0x144b: 0x0281,
	0x144d: 0x0287, 0x144e: 0x0260, 0x144f: 0x0272, 0x1451: 0x0266,
	0x1452: 0x027b, 0x1454: 0x0263, 0x1457: 0x0251,
	0x1459: 0x0269, 0x145b: 0x0275, 0x145d: 0x02e7,
	0x145f: 0x0299, 0x1461: 0x023f, 0x1462: 0x024b,
	0x1464: 0x028a, 0x1467: 0x024e, 0x1468: 0x026c, 0x1469: 0x0293,
	0x146a: 0x027e, 0x146c: 0x0284, 0x146d: 0x0287, 0x146e: 0x0260, 0x146f: 0x0272,
	0x1470: 0x0278, 0x1471: 0x0266, 0x1472: 0x027b, 0x1474: 0x0263, 0x1475: 0x0245,
	0x1476: 0x0248, 0x1477: 0x0251, 0x1479: 0x0269, 0x147a: 0x026f, 0x147b: 0x0275,
	0x147c: 0x0296, 0x147e: 0x02cf,
	// Block 0x52, offset 0x1480
	0x1480: 0x023c, 0x1481: 0x023f, 0x1482: 0x024b, 0x1483: 0x0254, 0x1484: 0x028a, 0x1485: 0x028d,
	0x1486: 0x025d, 0x1487: 0x024e, 0x1488: 0x026c, 0x1489: 0x0293, 0x148b: 0x0281,
	0x148c: 0x0284, 0x148d: 0x0287, 0x148e: 0x0260, 0x148f: 0x0272, 0x1490: 0x0278, 0x1491: 0x0266,
	0x1492: 0x027b, 0x1493: 0x025a, 0x1494: 0x0263, 0x1495: 0x0245, 0x1496: 0x0248, 0x1497: 0x0251,
	0x1498: 0x0257, 0x1499: 0x0269, 0x149a: 0x026f, 0x149b: 0x0275,
	0x14a1: 0x023f, 0x14a2: 0x024b, 0x14a3: 0x0254,
	0x14a5: 0x028d, 0x14a6: 0x025d, 0x14a7: 0x024e, 0x14a8: 0x026c, 0x14a9: 0x0293,
	0x14ab: 0x0281, 0x14ac: 0x0284, 0x14ad: 0x0287, 0x14ae: 0x0260, 0x14af: 0x0272,
	0x14b0: 0x0278, 0x14b1: 0x0266, 0x14b2: 0x027b, 0x14b3: 0x025a, 0x14b4: 0x0263, 0x14b5: 0x0245,
	0x14b6: 0x0248, 0x14b7: 0x0251, 0x14b8: 0x0257, 0x14b9: 0x0269, 0x14ba: 0x026f, 0x14bb: 0x0275,
	// Block 0x53, offset 0x14c0
	0x14c0: 0x187c, 0x14c1: 0x1879, 0x14c2: 0x187f, 0x14c3: 0x18a3, 0x14c4: 0x18c7, 0x14c5: 0x18eb,
	0x14c6: 0x190f, 0x14c7: 0x1918, 0x14c8: 0x191e, 0x14c9: 0x1924, 0x14ca: 0x192a,
	0x14d0: 0x1a92, 0x14d1: 0x1a96,
	0x14d2: 0x1a9a, 0x14d3: 0x1a9e, 0x14d4: 0x1aa2, 0x14d5: 0x1aa6, 0x14d6: 0x1aaa, 0x14d7: 0x1aae,
	0x14d8: 0x1ab2, 0x14d9: 0x1ab6, 0x14da: 0x1aba, 0x14db: 0x1abe, 0x14dc: 0x1ac2, 0x14dd: 0x1ac6,
	0x14de: 0x1aca, 0x14df: 0x1ace, 0x14e0: 0x1ad2, 0x14e1: 0x1ad6, 0x14e2: 0x1ada, 0x14e3: 0x1ade,
	0x14e4: 0x1ae2, 0x14e5: 0x1ae6, 0x14e6: 0x1aea, 0x14e7: 0x1aee, 0x14e8: 0x1af2, 0x14e9: 0x1af6,
	0x14ea: 0x272b, 0x14eb: 0x0047, 0x14ec: 0x0065, 0x14ed: 0x193f, 0x14ee: 0x19b7,
	0x14f0: 0x0043, 0x14f1: 0x0045, 0x14f2: 0x0047, 0x14f3: 0x0049, 0x14f4: 0x004b, 0x14f5: 0x004d,
	0x14f6: 0x004f, 0x14f7: 0x0051, 0x14f8: 0x0053, 0x14f9: 0x0055, 0x14fa: 0x0057, 0x14fb: 0x0059,
	0x14fc: 0x005b, 0x14fd: 0x005d, 0x14fe: 0x005f, 0x14ff: 0x0061,
	// Block 0x54, offset 0x1500
	0x1500: 0x26b3, 0x1501: 0x26c8, 0x1502: 0x0506,
	0x1510: 0x0c12, 0x1511: 0x0a4a,
	0x1512: 0x08d6, 0x1513: 0x45db, 0x1514: 0x071e, 0x1515: 0x09f2, 0x1516: 0x1332, 0x1517: 0x0a02,
	0x1518: 0x072a, 0x1519: 0x0cda, 0x151a: 0x0eb2, 0x151b: 0x0cb2, 0x151c: 0x082a, 0x151d: 0x0b6e,
	0x151e: 0x07c2, 0x151f: 0x0cba, 0x1520: 0x0816, 0x1521: 0x111a, 0x1522: 0x0f86, 0x1523: 0x138e,
	0x1524: 0x09d6, 0x1525: 0x090e, 0x1526: 0x0e66, 0x1527: 0x0c1e, 0x1528: 0x0c4a, 0x1529: 0x06c2,
	0x152a: 0x06ce, 0x152b: 0x140e, 0x152c: 0x0ade, 0x152d: 0x06ea, 0x152e: 0x08f2, 0x152f: 0x0c3e,
	0x1530: 0x13b6, 0x1531: 0x0c16, 0x1532: 0x1072, 0x1533: 0x10ae, 0x1534: 0x08fa, 0x1535: 0x0e46,
	0x1536: 0x0d0e, 0x1537: 0x0d0a, 0x1538: 0x0f9a, 0x1539: 0x082e, 0x153a: 0x095a, 0x153b: 0x1446,
	// Block 0x55, offset 0x1540
	0x1540: 0x06fe, 0x1541: 0x06f6, 0x1542: 0x0706, 0x1543: 0x164a, 0x1544: 0x074a, 0x1545: 0x075a,
	0x1546: 0x075e, 0x1547: 0x0766, 0x1548: 0x076e, 0x1549: 0x0772, 0x154a: 0x077e, 0x154b: 0x0776,
	0x154c: 0x05b6, 0x154d: 0x165e, 0x154e: 0x0792, 0x154f: 0x0796, 0x1550: 0x079a, 0x1551: 0x07b6,
	0x1552: 0x164f, 0x1553: 0x05ba, 0x1554: 0x07a2, 0x1555: 0x07c2, 0x1556: 0x1659, 0x1557: 0x07d2,
	0x1558: 0x07da, 0x1559: 0x073a, 0x155a: 0x07e2, 0x155b: 0x07e6, 0x155c: 0x1834, 0x155d: 0x0802,
	0x155e: 0x080a, 0x155f: 0x05c2, 0x1560: 0x0822, 0x1561: 0x0826, 0x1562: 0x082e, 0x1563: 0x0832,
	0x1564: 0x05c6, 0x1565: 0x084a, 0x1566: 0x084e, 0x1567: 0x085a, 0x1568: 0x0866, 0x1569: 0x086a,
	0x156a: 0x086e, 0x156b: 0x0876, 0x156c: 0x0896, 0x156d: 0x089a, 0x156e: 0x08a2, 0x156f: 0x08b2,
	0x1570: 0x08ba, 0x1571: 0x08be, 0x1572: 0x08be, 0x1573: 0x08be, 0x1574: 0x166d, 0x1575: 0x0e96,
	0x1576: 0x08d2, 0x1577: 0x08da, 0x1578: 0x1672, 0x1579: 0x08e6, 0x157a: 0x08ee, 0x157b: 0x08f6,
	0x157c: 0x091e, 0x157d: 0x090a, 0x157e: 0x0916, 0x157f: 0x091a,
	// Block 0x56, offset 0x1580
	0x1580: 0x0922, 0x1581: 0x092a, 0x1582: 0x092e, 0x1583: 0x0936, 0x1584: 0x093e, 0x1585: 0x0942,
	0x1586: 0x0942, 0x1587: 0x094a, 0x1588: 0x0952, 0x1589: 0x0956, 0x158a: 0x0962, 0x158b: 0x0986,
	0x158c: 0x096a, 0x158d: 0x098a, 0x158e: 0x096e, 0x158f: 0x0976, 0x1590: 0x080e, 0x1591: 0x09d2,
	0x1592: 0x099a, 0x1593: 0x099e, 0x1594: 0x09a2, 0x1595: 0x0996, 0x1596: 0x09aa, 0x1597: 0x09a6,
	0x1598: 0x09be, 0x1599: 0x1677, 0x159a: 0x09da, 0x159b: 0x09de, 0x159c: 0x09e6, 0x159d: 0x09f2,
	0x159e: 0x09fa, 0x159f: 0x0a16, 0x15a0: 0x167c, 0x15a1: 0x1681, 0x15a2: 0x0a22, 0x15a3: 0x0a26,
	0x15a4: 0x0a2a, 0x15a5: 0x0a1e, 0x15a6: 0x0a32, 0x15a7: 0x05ca, 0x15a8: 0x05ce, 0x15a9: 0x0a3a,
	0x15aa: 0x0a42, 0x15ab: 0x0a42, 0x15ac: 0x1686, 0x15ad: 0x0a5e, 0x15ae: 0x0a62, 0x15af: 0x0a66,
	0x15b0: 0x0a6e, 0x15b1: 0x168b, 0x15b2: 0x0a76, 0x15b3: 0x0a7a, 0x15b4: 0x0b52, 0x15b5: 0x0a82,
	0x15b6: 0x05d2, 0x15b7: 0x0a8e, 0x15b8: 0x0a9e, 0x15b9: 0x0aaa, 0x15ba: 0x0aa6, 0x15bb: 0x1695,
	0x15bc: 0x0ab2, 0x15bd: 0x169a, 0x15be: 0x0abe, 0x15bf: 0x0aba,
	// Block 0x57, offset 0x15c0
	0x15c0: 0x0ac2, 0x15c1: 0x0ad2, 0x15c2: 0x0ad6, 0x15c3: 0x05d6, 0x15c4: 0x0ae6, 0x15c5: 0x0aee,
	0x15c6: 0x0af2, 0x15c7: 0x0af6, 0x15c8: 0x05da, 0x15c9: 0x169f, 0x15ca: 0x05de, 0x15cb: 0x0b12,
	0x15cc: 0x0b16, 0x15cd: 0x0b1a, 0x15ce: 0x0b22, 0x15cf: 0x1866, 0x15d0: 0x0b3a, 0x15d1: 0x16a9,
	0x15d2: 0x16a9, 0x15d3: 0x11da, 0x15d4: 0x0b4a, 0x15d5: 0x0b4a, 0x15d6: 0x05e2, 0x15d7: 0x16cc,
	0x15d8: 0x179e, 0x15d9: 0x0b5a, 0x15da: 0x0b62, 0x15db: 0x05e6, 0x15dc: 0x0b76, 0x15dd: 0x0b86,
	0x15de: 0x0b8a, 0x15df: 0x0b92, 0x15e0: 0x0ba2, 0x15e1: 0x05ee, 0x15e2: 0x05ea, 0x15e3: 0x0ba6,
	0x15e4: 0x16ae, 0x15e5: 0x0baa, 0x15e6: 0x0bbe, 0x15e7: 0x0bc2, 0x15e8: 0x0bc6, 0x15e9: 0x0bc2,
	0x15ea: 0x0bd2, 0x15eb: 0x0bd6, 0x15ec: 0x0be6, 0x15ed: 0x0bde, 0x15ee: 0x0be2, 0x15ef: 0x0bea,
	0x15f0: 0x0bee, 0x15f1: 0x0bf2, 0x15f2: 0x0bfe, 0x15f3: 0x0c02, 0x15f4: 0x0c1a, 0x15f5: 0x0c22,
	0x15f6: 0x0c32, 0x15f7: 0x0c46, 0x15f8: 0x16bd, 0x15f9: 0x0c42, 0x15fa: 0x0c36, 0x15fb: 0x0c4e,
	0x15fc: 0x0c56, 0x15fd: 0x0c6a, 0x15fe: 0x16c2, 0x15ff: 0x0c72,
	// Block 0x58, offset 0x1600
	0x1600: 0x0c66, 0x1601: 0x0c5e, 0x1602: 0x05f2, 0x1603: 0x0c7a, 0x1604: 0x0c82, 0x1605: 0x0c8a,
	0x1606: 0x0c7e, 0x1607: 0x05f6, 0x1608: 0x0c9a, 0x1609: 0x0ca2, 0x160a: 0x16c7, 0x160b: 0x0cce,
	0x160c: 0x0d02, 0x160d: 0x0cde, 0x160e: 0x0602, 0x160f: 0x0cea, 0x1610: 0x05fe, 0x1611: 0x05fa,
	0x1612: 0x07c6, 0x1613: 0x07ca, 0x1614: 0x0d06, 0x1615: 0x0cee, 0x1616: 0x11ae, 0x1617: 0x0666,
	0x1618: 0x0d12, 0x1619: 0x0d16, 0x161a: 0x0d1a, 0x161b: 0x0d2e, 0x161c: 0x0d26, 0x161d: 0x16e0,
	0x161e: 0x0606, 0x161f: 0x0d42, 0x1620: 0x0d36, 0x1621: 0x0d52, 0x1622: 0x0d5a, 0x1623: 0x16ea,
	0x1624: 0x0d5e, 0x1625: 0x0d4a, 0x1626: 0x0d66, 0x1627: 0x060a, 0x1628: 0x0d6a, 0x1629: 0x0d6e,
	0x162a: 0x0d72, 0x162b: 0x0d7e, 0x162c: 0x16ef, 0x162d: 0x0d86, 0x162e: 0x060e, 0x162f: 0x0d92,
	0x1630: 0x16f4, 0x1631: 0x0d96, 0x1632: 0x0612, 0x1633: 0x0da2, 0x1634: 0x0dae, 0x1635: 0x0dba,
	0x1636: 0x0dbe, 0x1637: 0x16f9, 0x1638: 0x1690, 0x1639: 0x16fe, 0x163a: 0x0dde, 0x163b: 0x1703,
	0x163c: 0x0dea, 0x163d: 0x0df2, 0x163e: 0x0de2, 0x163f: 0x0dfe,
	// Block 0x59, offset 0x1640
	0x1640: 0x0e0e, 0x1641: 0x0e1e, 0x1642: 0x0e12, 0x1643: 0x0e16, 0x1644: 0x0e22, 0x1645: 0x0e26,
	0x1646: 0x1708, 0x1647: 0x0e0a, 0x1648: 0x0e3e, 0x1649: 0x0e42, 0x164a: 0x0616, 0x164b: 0x0e56,
	0x164c: 0x0e52, 0x164d: 0x170d, 0x164e: 0x0e36, 0x164f: 0x0e72, 0x1650: 0x1712, 0x1651: 0x1717,
	0x1652: 0x0e76, 0x1653: 0x0e8a, 0x1654: 0x0e86, 0x1655: 0x0e82, 0x1656: 0x061a, 0x1657: 0x0e8e,
	0x1658: 0x0e9e, 0x1659: 0x0e9a, 0x165a: 0x0ea6, 0x165b: 0x1654, 0x165c: 0x0eb6, 0x165d: 0x171c,
	0x165e: 0x0ec2, 0x165f: 0x1726, 0x1660: 0x0ed6, 0x1661: 0x0ee2, 0x1662: 0x0ef6, 0x1663: 0x172b,
	0x1664: 0x0f0a, 0x1665: 0x0f0e, 0x1666: 0x1730, 0x1667: 0x1735, 0x1668: 0x0f2a, 0x1669: 0x0f3a,
	0x166a: 0x061e, 0x166b: 0x0f3e, 0x166c: 0x0622, 0x166d: 0x0622, 0x166e: 0x0f56, 0x166f: 0x0f5a,
	0x1670: 0x0f62, 0x1671: 0x0f66, 0x1672: 0x0f72, 0x1673: 0x0626, 0x1674: 0x0f8a, 0x1675: 0x173a,
	0x1676: 0x0fa6, 0x1677: 0x173f, 0x1678: 0x0fb2, 0x1679: 0x16a4, 0x167a: 0x0fc2, 0x167b: 0x1744,
	0x167c: 0x1749, 0x167d: 0x174e, 0x167e: 0x062a, 0x167f: 0x062e,
	// Block 0x5a, offset 0x1680
	0x1680: 0x0ffa, 0x1681: 0x1758, 0x1682: 0x1753, 0x1683: 0x175d, 0x1684: 0x1762, 0x1685: 0x1002,
	0x1686: 0x1006, 0x1687: 0x1006, 0x1688: 0x100e, 0x1689: 0x0636, 0x168a: 0x1012, 0x168b: 0x063a,
	0x168c: 0x063e, 0x168d: 0x176c, 0x168e: 0x1026, 0x168f: 0x102e, 0x1690: 0x103a, 0x1691: 0x0642,
	0x1692: 0x1771, 0x1693: 0x105e, 0x1694: 0x1776, 0x1695: 0x177b, 0x1696: 0x107e, 0x1697: 0x1096,
	0x1698: 0x0646, 0x1699: 0x109e, 0x169a: 0x10a2, 0x169b: 0x10a6, 0x169c: 0x1780, 0x169d: 0x1785,
	0x169e: 0x1785, 0x169f: 0x10be, 0x16a0: 0x064a, 0x16a1: 0x178a, 0x16a2: 0x10d2, 0x16a3: 0x10d6,
	0x16a4: 0x064e, 0x16a5: 0x178f, 0x16a6: 0x10f2, 0x16a7: 0x0652, 0x16a8: 0x1102, 0x16a9: 0x10fa,
	0x16aa: 0x110a, 0x16ab: 0x1799, 0x16ac: 0x1122, 0x16ad: 0x0656, 0x16ae: 0x112e, 0x16af: 0x1136,
	0x16b0: 0x1146, 0x16b1: 0x065a, 0x16b2: 0x17a3, 0x16b3: 0x17a8, 0x16b4: 0x065e, 0x16b5: 0x17ad,
	0x16b6: 0x115e, 0x16b7: 0x17b2, 0x16b8: 0x116a, 0x16b9: 0x1176, 0x16ba: 0x117e, 0x16bb: 0x17b7,
	0x16bc: 0x17bc, 0x16bd: 0x1192, 0x16be: 0x17c1, 0x16bf: 0x119a,
	// Block 0x5b, offset 0x16c0
	0x16c0: 0x16d1, 0x16c1: 0x0662, 0x16c2: 0x11b2, 0x16c3: 0x11b6, 0x16c4: 0x066a, 0x16c5: 0x11ba,
	0x16c6: 0x0a36, 0x16c7: 0x17c6, 0x16c8: 0x17cb, 0x16c9: 0x16d6, 0x16ca: 0x16db, 0x16cb: 0x11da,
	0x16cc: 0x11de, 0x16cd: 0x13f6, 0x16ce: 0x066e, 0x16cf: 0x120a, 0x16d0: 0x1206, 0x16d1: 0x120e,
	0x16d2: 0x0842, 0x16d3: 0x1212, 0x16d4: 0x1216, 0x16d5: 0x121a, 0x16d6: 0x1222, 0x16d7: 0x17d0,
	0x16d8: 0x121e, 0x16d9: 0x1226, 0x16da: 0x123a, 0x16db: 0x123e, 0x16dc: 0x122a, 0x16dd: 0x1242,
	0x16de: 0x1256, 0x16df: 0x126a, 0x16e0: 0x1236, 0x16e1: 0x124a, 0x16e2: 0x124e, 0x16e3: 0x1252,
	0x16e4: 0x17d5, 0x16e5: 0x17df, 0x16e6: 0x17da, 0x16e7: 0x0672, 0x16e8: 0x1272, 0x16e9: 0x1276,
	0x16ea: 0x127e, 0x16eb: 0x17f3, 0x16ec: 0x1282, 0x16ed: 0x17e4, 0x16ee: 0x0676, 0x16ef: 0x067a,
	0x16f0: 0x17e9, 0x16f1: 0x17ee, 0x16f2: 0x067e, 0x16f3: 0x12a2, 0x16f4: 0x12a6, 0x16f5: 0x12aa,
	0x16f6: 0x12ae, 0x16f7: 0x12ba, 0x16f8: 0x12b6, 0x16f9: 0x12c2, 0x16fa: 0x12be, 0x16fb: 0x12ce,
	0x16fc: 0x12c6, 0x16fd: 0x12ca, 0x16fe: 0x12d2, 0x16ff: 0x0682,
	// Block 0x5c, offset 0x1700
	0x1700: 0x12da, 0x1701: 0x12de, 0x1702: 0x0686, 0x1703: 0x12ee, 0x1704: 0x12f2, 0x1705: 0x17f8,
	0x1706: 0x12fe, 0x1707: 0x1302, 0x1708: 0x068a, 0x1709: 0x130e, 0x170a: 0x05be, 0x170b: 0x17fd,
	0x170c: 0x1802, 0x170d: 0x068e, 0x170e: 0x0692, 0x170f: 0x133a, 0x1710: 0x1352, 0x1711: 0x136e,
	0x1712: 0x137e, 0x1713: 0x1807, 0x1714: 0x1392, 0x1715: 0x1396, 0x1716: 0x13ae, 0x1717: 0x13ba,
	0x1718: 0x1811, 0x1719: 0x1663, 0x171a: 0x13c6, 0x171b: 0x13c2, 0x171c: 0x13ce, 0x171d: 0x1668,
	0x171e: 0x13da, 0x171f: 0x13e6, 0x1720: 0x1816, 0x1721: 0x181b, 0x1722: 0x1426, 0x1723: 0x1432,
	0x1724: 0x143a, 0x1725: 0x1820, 0x1726: 0x143e, 0x1727: 0x146a, 0x1728: 0x1476, 0x1729: 0x147a,
	0x172a: 0x1472, 0x172b: 0x1486, 0x172c: 0x148a, 0x172d: 0x1825, 0x172e: 0x1496, 0x172f: 0x0696,
	0x1730: 0x149e, 0x1731: 0x182a, 0x1732: 0x069a, 0x1733: 0x14d6, 0x1734: 0x0ac6, 0x1735: 0x14ee,
	0x1736: 0x182f, 0x1737: 0x1839, 0x1738: 0x069e, 0x1739: 0x06a2, 0x173a: 0x1516, 0x173b: 0x183e,
	0x173c: 0x06a6, 0x173d: 0x1843, 0x173e: 0x152e, 0x173f: 0x152e,
	// Block 0x5d, offset 0x1740
	0x1740: 0x1536, 0x1741: 0x1848, 0x1742: 0x154e, 0x1743: 0x06aa, 0x1744: 0x155e, 0x1745: 0x156a,
	0x1746: 0x1572, 0x1747: 0x157a, 0x1748: 0x06ae, 0x1749: 0x184d, 0x174a: 0x158e, 0x174b: 0x15aa,
	0x174c: 0x15b6, 0x174d: 0x06b2, 0x174e: 0x06b6, 0x174f: 0x15ba, 0x1750: 0x1852, 0x1751: 0x06ba,
	0x1752: 0x1857, 0x1753: 0x185c, 0x1754: 0x1861, 0x1755: 0x15de, 0x1756: 0x06be, 0x1757: 0x15f2,
	0x1758: 0x15fa, 0x1759: 0x15fe, 0x175a: 0x1606, 0x175b: 0x160e, 0x175c: 0x1616, 0x175d: 0x186b,
}

// nfkcIndex: 22 blocks, 1408 entries, 2816 bytes
// Block 0 is the zero block.
var nfkcIndex = [1408]uint16{
	// Block 0x0, offset 0x0
	// Block 0x1, offset 0x40
	// Block 0x2, offset 0x80
	// Block 0x3, offset 0xc0
	0xc2: 0x5c, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x5d, 0xc7: 0x04,
	0xc8: 0x05, 0xca: 0x5e, 0xcb: 0x5f, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x09,
	0xd0: 0x0a, 0xd1: 0x60, 0xd2: 0x61, 0xd3: 0x0b, 0xd6: 0x0c, 0xd7: 0x62,
	0xd8: 0x63, 0xd9: 0x0d, 0xdb: 0x64, 0xdc: 0x65, 0xdd: 0x66, 0xdf: 0x67,
	0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05,
	0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a,
	0xf0: 0x13,
	// Block 0x4, offset 0x100
	0x120: 0x68, 0x121: 0x69, 0x123: 0x0e, 0x124: 0x6a, 0x125: 0x6b, 0x126: 0x6c, 0x127: 0x6d,
	0x128: 0x6e, 0x129: 0x6f, 0x12a: 0x70, 0x12b: 0x71, 0x12c: 0x6c, 0x12d: 0x72, 0x12e: 0x73, 0x12f: 0x74,
	0x131: 0x75, 0x132: 0x76, 0x133: 0x77, 0x134: 0x78, 0x135: 0x79, 0x137: 0x7a,
	0x138: 0x7b, 0x139: 0x7c, 0x13a: 0x7d, 0x13b: 0x7e, 0x13c: 0x7f, 0x13d: 0x80, 0x13e: 0x81, 0x13f: 0x82,
	// Block 0x5, offset 0x140
	0x140: 0x83, 0x142: 0x84, 0x143: 0x85, 0x144: 0x86, 0x145: 0x87, 0x146: 0x88, 0x147: 0x89,
	0x14d: 0x8a,
	0x15c: 0x8b, 0x15f: 0x8c,
	0x162: 0x8d, 0x164: 0x8e,
	0x168: 0x8f, 0x169: 0x90, 0x16a: 0x91, 0x16b: 0x92, 0x16c: 0x0f, 0x16d: 0x93, 0x16e: 0x94, 0x16f: 0x95,
	0x170: 0x96, 0x173: 0x97, 0x174: 0x98, 0x175: 0x10, 0x176: 0x11, 0x177: 0x12,
	0x178: 0x13, 0x179: 0x14, 0x17a: 0x15, 0x17b: 0x16, 0x17c: 0x17, 0x17d: 0x18, 0x17e: 0x19, 0x17f: 0x1a,
	// Block 0x6, offset 0x180
	0x180: 0x99, 0x181: 0x9a, 0x182: 0x9b, 0x183: 0x9c, 0x184: 0x1b, 0x185: 0x1c, 0x186: 0x9d, 0x187: 0x9e,
	0x188: 0x9f, 0x189: 0x1d, 0x18a: 0x1e, 0x18b: 0xa0, 0x18c: 0xa1,
	0x191: 0x1f, 0x192: 0x20, 0x193: 0xa2,
	0x1a8: 0xa3, 0x1a9: 0xa4, 0x1ab: 0xa5,
	0x1b1: 0xa6, 0x1b3: 0xa7, 0x1b5: 0xa8, 0x1b7: 0xa9,
	0x1ba: 0xaa, 0x1bb: 0xab, 0x1bc: 0x21, 0x1bd: 0x22, 0x1be: 0x23, 0x1bf: 0xac,
	// Block 0x7, offset 0x1c0
	0x1c0: 0xad, 0x1c1: 0x24, 0x1c2: 0x25, 0x1c3: 0x26, 0x1c4: 0xae, 0x1c5: 0x27, 0x1c6: 0x28,
	0x1c8: 0x29, 0x1c9: 0x2a, 0x1ca: 0x2b, 0x1cb: 0x2c, 0x1cc: 0x2d, 0x1cd: 0x2e, 0x1ce: 0x2f, 0x1cf: 0x30,
	// Block 0x8, offset 0x200
	0x219: 0xaf, 0x21a: 0xb0, 0x21b: 0xb1, 0x21d: 0xb2, 0x21f: 0xb3,
	0x220: 0xb4, 0x223: 0xb5, 0x224: 0xb6, 0x225: 0xb7, 0x226: 0xb8, 0x227: 0xb9,
	0x22a: 0xba, 0x22b: 0xbb, 0x22d: 0xbc, 0x22f: 0xbd,
	0x230: 0xbe, 0x231: 0xbf, 0x232: 0xc0, 0x233: 0xc1, 0x234: 0xc2, 0x235: 0xc3, 0x236: 0xc4, 0x237: 0xbe,
	0x238: 0xbf, 0x239: 0xc0, 0x23a: 0xc1, 0x23b: 0xc2, 0x23c: 0xc3, 0x23d: 0xc4, 0x23e: 0xbe, 0x23f: 0xbf,
	// Block 0x9, offset 0x240
	0x240: 0xc0, 0x241: 0xc1, 0x242: 0xc2, 0x243: 0xc3, 0x244: 0xc4, 0x245: 0xbe, 0x246: 0xbf, 0x247: 0xc0,
	0x248: 0xc1, 0x249: 0xc2, 0x24a: 0xc3, 0x24b: 0xc4, 0x24c: 0xbe, 0x24d: 0xbf, 0x24e: 0xc0, 0x24f: 0xc1,
	0x250: 0xc2, 0x251: 0xc3, 0x252: 0xc4, 0x253: 0xbe, 0x254: 0xbf, 0x255: 0xc0, 0x256: 0xc1, 0x257: 0xc2,
	0x258: 0xc3, 0x259: 0xc4, 0x25a: 0xbe, 0x25b: 0xbf, 0x25c: 0xc0, 0x25d: 0xc1, 0x25e: 0xc2, 0x25f: 0xc3,
	0x260: 0xc4, 0x261: 0xbe, 0x262: 0xbf, 0x263: 0xc0, 0x264: 0xc1, 0x265: 0xc2, 0x266: 0xc3, 0x267: 0xc4,
	0x268: 0xbe, 0x269: 0xbf, 0x26a: 0xc0, 0x26b: 0xc1, 0x26c: 0xc2, 0x26d: 0xc3, 0x26e: 0xc4, 0x26f: 0xbe,
	0x270: 0xbf, 0x271: 0xc0, 0x272: 0xc1, 0x273: 0xc2, 0x274: 0xc3, 0x275: 0xc4, 0x276: 0xbe, 0x277: 0xbf,
	0x278: 0xc0, 0x279: 0xc1, 0x27a: 0xc2, 0x27b: 0xc3, 0x27c: 0xc4, 0x27d: 0xbe, 0x27e: 0xbf, 0x27f: 0xc0,
	// Block 0xa, offset 0x280
	0x280: 0xc1, 0x281: 0xc2, 0x282: 0xc3, 0x283: 0xc4, 0x284: 0xbe, 0x285: 0xbf, 0x286: 0xc0, 0x287: 0xc1,
	0x288: 0xc2, 0x289: 0xc3, 0x28a: 0xc4, 0x28b: 0xbe, 0x28c: 0xbf, 0x28d: 0xc0, 0x28e: 0xc1, 0x28f: 0xc2,
	0x290: 0xc3, 0x291: 0xc4, 0x292: 0xbe, 0x293: 0xbf, 0x294: 0xc0, 0x295: 0xc1, 0x296: 0xc2, 0x297: 0xc3,
	0x298: 0xc4, 0x299: 0xbe, 0x29a: 0xbf, 0x29b: 0xc0, 0x29c: 0xc1, 0x29d: 0xc2, 0x29e: 0xc3, 0x29f: 0xc4,
	0x2a0: 0xbe, 0x2a1: 0xbf, 0x2a2: 0xc0, 0x2a3: 0xc1, 0x2a4: 0xc2, 0x2a5: 0xc3, 0x2a6: 0xc4, 0x2a7: 0xbe,
	0x2a8: 0xbf, 0x2a9: 0xc0, 0x2aa: 0xc1, 0x2ab: 0xc2, 0x2ac: 0xc3, 0x2ad: 0xc4, 0x2ae: 0xbe, 0x2af: 0xbf,
	0x2b0: 0xc0, 0x2b1: 0xc1, 0x2b2: 0xc2, 0x2b3: 0xc3, 0x2b4: 0xc4, 0x2b5: 0xbe, 0x2b6: 0xbf, 0x2b7: 0xc0,
	0x2b8: 0xc1, 0x2b9: 0xc2, 0x2ba: 0xc3, 0x2bb: 0xc4, 0x2bc: 0xbe, 0x2bd: 0xbf, 0x2be: 0xc0, 0x2bf: 0xc1,
	// Block 0xb, offset 0x2c0
	0x2c0: 0xc2, 0x2c1: 0xc3, 0x2c2: 0xc4, 0x2c3: 0xbe, 0x2c4: 0xbf, 0x2c5: 0xc0, 0x2c6: 0xc1, 0x2c7: 0xc2,
	0x2c8: 0xc3, 0x2c9: 0xc4, 0x2ca: 0xbe, 0x2cb: 0xbf, 0x2cc: 0xc0, 0x2cd: 0xc1, 0x2ce: 0xc2, 0x2cf: 0xc3,
	0x2d0: 0xc4, 0x2d1: 0xbe, 0x2d2: 0xbf, 0x2d3: 0xc0, 0x2d4: 0xc1, 0x2d5: 0xc2, 0x2d6: 0xc3, 0x2d7: 0xc4,
	0x2d8: 0xbe, 0x2d9: 0xbf, 0x2da: 0xc0, 0x2db: 0xc1, 0x2dc: 0xc2, 0x2dd: 0xc3, 0x2de: 0xc5,
	// Block 0xc, offset 0x300
	0x324: 0x31, 0x325: 0x32, 0x326: 0x33, 0x327: 0x34,
	0x328: 0x35, 0x329: 0x36, 0x32a: 0x37, 0x32b: 0x38, 0x32c: 0x39, 0x32d: 0x3a, 0x32e: 0x3b, 0x32f: 0x3c,
	0x330: 0x3d, 0x331: 0x3e, 0x332: 0x3f, 0x333: 0x40, 0x334: 0x41, 0x335: 0x42, 0x336: 0x43, 0x337: 0x44,
	0x338: 0x45, 0x339: 0x46, 0x33a: 0x47, 0x33b: 0x48, 0x33c: 0xc6, 0x33d: 0x49, 0x33e: 0x4a, 0x33f: 0x4b,
	// Block 0xd, offset 0x340
	0x347: 0xc7,
	0x34b: 0xc8, 0x34d: 0xc9,
	0x368: 0xca, 0x36b: 0xcb,
	0x374: 0xcc,
	0x37a: 0xcd, 0x37d: 0xce,
	// Block 0xe, offset 0x380
	0x381: 0xcf, 0x382: 0xd0, 0x384: 0xd1, 0x385: 0xb8, 0x387: 0xd2,
	0x388: 0xd3, 0x38b: 0xd4, 0x38c: 0xd5, 0x38d: 0xd6,
	0x391: 0xd7, 0x392: 0xd8, 0x393: 0xd9, 0x396: 0xda, 0x397: 0xdb,
	0x398: 0xdc, 0x39a: 0xdd, 0x39c: 0xde,
	0x3a0: 0xdf, 0x3a4: 0xe0, 0x3a5: 0xe1, 0x3a7: 0xe2,
	0x3a8: 0xe3, 0x3a9: 0xe4, 0x3aa: 0xe5,
	0x3b0: 0xdc, 0x3b5: 0xe6, 0x3b6: 0xe7,
	// Block 0xf, offset 0x3c0
	0x3eb: 0xe8, 0x3ec: 0xe9,
	0x3ff: 0xea,
	// Block 0x10, offset 0x400
	0x432: 0xeb,
	// Block 0x11, offset 0x440
	0x445: 0xec, 0x446: 0xed, 0x447: 0xee,
	0x449: 0xef,
	0x450: 0xf0, 0x451: 0xf1, 0x452: 0xf2, 0x453: 0xf3, 0x454: 0xf4, 0x455: 0xf5, 0x456: 0xf6, 0x457: 0xf7,
	0x458: 0xf8, 0x459: 0xf9, 0x45a: 0x4c, 0x45b: 0xfa, 0x45c: 0xfb, 0x45d: 0xfc, 0x45e: 0xfd, 0x45f: 0x4d,
	// Block 0x12, offset 0x480
	0x480: 0xfe, 0x484: 0xe9,
	0x48b: 0xff,
	0x4a3: 0x100, 0x4a5: 0x101,
	0x4b8: 0x4e, 0x4b9: 0x4f, 0x4ba: 0x50,
	// Block 0x13, offset 0x4c0
	0x4c4: 0x51, 0x4c5: 0x102, 0x4c6: 0x103,
	0x4c8: 0x52, 0x4c9: 0x104,
	0x4ef: 0x105,
	// Block 0x14, offset 0x500
	0x520: 0x53, 0x521: 0x54, 0x522: 0x55, 0x523: 0x56, 0x524: 0x57, 0x525: 0x58, 0x526: 0x59, 0x527: 0x5a,
	0x528: 0x5b,
	// Block 0x15, offset 0x540
	0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d,
	0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11,
	0x56f: 0x12,
}

// nfkcSparseOffset: 170 entries, 340 bytes
var nfkcSparseOffset = []uint16{0x0, 0xe, 0x12, 0x1b, 0x25, 0x35, 0x37, 0x3c, 0x47, 0x56, 0x63, 0x6b, 0x70, 0x75, 0x77, 0x7f, 0x86, 0x89, 0x91, 0x95, 0x99, 0x9b, 0x9d, 0xa6, 0xaa, 0xb1, 0xb6, 0xb9, 0xc3, 0xc6, 0xcd, 0xd5, 0xd9, 0xdb, 0xdf, 0xe3, 0xe9, 0xfa, 0x106, 0x108, 0x10e, 0x110, 0x112, 0x114, 0x116, 0x118, 0x11a, 0x11c, 0x11f, 0x122, 0x124, 0x127, 0x12a, 0x12e, 0x134, 0x136, 0x13f, 0x141, 0x144, 0x146, 0x151, 0x15c, 0x16a, 0x178, 0x188, 0x196, 0x19d, 0x1a3, 0x1b2, 0x1b6, 0x1b8, 0x1bc, 0x1be, 0x1c1, 0x1c3, 0x1c6, 0x1c8, 0x1cb, 0x1cd, 0x1cf, 0x1d1, 0x1dd, 0x1e7, 0x1f1, 0x1f4, 0x1f8, 0x1fa, 0x1fc, 0x1fe, 0x201, 0x204, 0x206, 0x208, 0x20a, 0x20c, 0x212, 0x215, 0x21a, 0x21c, 0x223, 0x229, 0x22f, 0x237, 0x23d, 0x243, 0x249, 0x24d, 0x24f, 0x251, 0x253, 0x255, 0x25b, 0x25e, 0x260, 0x262, 0x268, 0x26b, 0x273, 0x27a, 0x27d, 0x280, 0x282, 0x285, 0x28d, 0x291, 0x298, 0x29b, 0x2a1, 0x2a3, 0x2a5, 0x2a8, 0x2aa, 0x2ad, 0x2b2, 0x2b4, 0x2b6, 0x2b8, 0x2ba, 0x2bc, 0x2bf, 0x2c1, 0x2c3, 0x2c5, 0x2c7, 0x2c9, 0x2d6, 0x2e0, 0x2e2, 0x2e4, 0x2e8, 0x2ed, 0x2f9, 0x2fe, 0x307, 0x30d, 0x312, 0x316, 0x31b, 0x31f, 0x32f, 0x33d, 0x34b, 0x359, 0x35f, 0x361, 0x363, 0x366, 0x371, 0x373, 0x37d}

// nfkcSparseValues: 895 entries, 3580 bytes
var nfkcSparseValues = [895]valueRange{
	// Block 0x0, offset 0x0
	{value: 0x0002, lo: 0x0d},
	{value: 0x0001, lo: 0xa0, hi: 0xa0},
	{value: 0x428f, lo: 0xa8, hi: 0xa8},
	{value: 0x0083, lo: 0xaa, hi: 0xaa},
	{value: 0x427b, lo: 0xaf, hi: 0xaf},
	{value: 0x0025, lo: 0xb2, hi: 0xb3},
	{value: 0x4271, lo: 0xb4, hi: 0xb4},
	{value: 0x01df, lo: 0xb5, hi: 0xb5},
	{value: 0x42a8, lo: 0xb8, hi: 0xb8},
	{value: 0x0023, lo: 0xb9, hi: 0xb9},
	{value: 0x009f, lo: 0xba, hi: 0xba},
	{value: 0x2222, lo: 0xbc, hi: 0xbc},
	{value: 0x2216, lo: 0xbd, hi: 0xbd},
	{value: 0x22b8, lo: 0xbe, hi: 0xbe},
	// Block 0x1, offset 0xe
	{value: 0x0091, lo: 0x03},
	{value: 0x46f9, lo: 0xa0, hi: 0xa1},
	{value: 0x472b, lo: 0xaf, hi: 0xb0},
	{value: 0xa000, lo: 0xb7, hi: 0xb7},
	// Block 0x2, offset 0x12
	{value: 0x0003, lo: 0x08},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x0091, lo: 0xb0, hi: 0xb0},
	{value: 0x0119, lo: 0xb1, hi: 0xb1},
	{value: 0x0095, lo: 0xb2, hi: 0xb2},
	{value: 0x00a5, lo: 0xb3, hi: 0xb3},
	{value: 0x0143, lo: 0xb4, hi: 0xb6},
	{value: 0x00af, lo: 0xb7, hi: 0xb7},
	{value: 0x00b3, lo: 0xb8, hi: 0xb8},
	// Block 0x3, offset 0x1b
	{value: 0x000a, lo: 0x09},
	{value: 0x4285, lo: 0x98, hi: 0x98},
	{value: 0x428a, lo: 0x99, hi: 0x9a},
	{value: 0x42ad, lo: 0x9b, hi: 0x9b},
	{value: 0x4276, lo: 0x9c, hi: 0x9c},
	{value: 0x4299, lo: 0x9d, hi: 0x9d},
	{value: 0x0113, lo: 0xa0, hi: 0xa0},
	{value: 0x0099, lo: 0xa1, hi: 0xa1},
	{value: 0x00a7, lo: 0xa2, hi: 0xa3},
	{value: 0x016a, lo: 0xa4, hi: 0xa4},
	// Block 0x4, offset 0x25
	{value: 0x0000, lo: 0x0f},
	{value: 0xa000, lo: 0x83, hi: 0x83},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0xa000, lo: 0x8b, hi: 0x8b},
	{value: 0xa000, lo: 0x8d, hi: 0x8d},
	{value: 0x37bc, lo: 0x90, hi: 0x90},
	{value: 0x37c8, lo: 0x91, hi: 0x91},
	{value: 0x37b6, lo: 0x93, hi: 0x93},
	{value: 0xa000, lo: 0x96, hi: 0x96},
	{value: 0x382e, lo: 0x97, hi: 0x97},
	{value: 0x37f8, lo: 0x9c, hi: 0x9c},
	{value: 0x37e0, lo: 0x9d, hi: 0x9d},
	{value: 0x380a, lo: 0x9e, hi: 0x9e},
	{value: 0xa000, lo: 0xb4, hi: 0xb5},
	{value: 0x3834, lo: 0xb6, hi: 0xb6},
	{value: 0x383a, lo: 0xb7, hi: 0xb7},
	// Block 0x5, offset 0x35
	{value: 0x0000, lo: 0x01},
	{value: 0x8133, lo: 0x83, hi: 0x87},
	// Block 0x6, offset 0x37
	{value: 0x0001, lo: 0x04},
	{value: 0x8114, lo: 0x81, hi: 0x82},
	{value: 0x8133, lo: 0x84, hi: 0x84},
	{value: 0x812e, lo: 0x85, hi: 0x85},
	{value: 0x810e, lo: 0x87, hi: 0x87},
	// Block 0x7, offset 0x3c
	{value: 0x0000, lo: 0x0a},
	{value: 0x8133, lo: 0x90, hi: 0x97},
	{value: 0x811a, lo: 0x98, hi: 0x98},
	{value: 0x811b, lo: 0x99, hi: 0x99},
	{value: 0x811c, lo: 0x9a, hi: 0x9a},
	{value: 0x3858, lo: 0xa2, hi: 0xa2},
	{value: 0x385e, lo: 0xa3, hi: 0xa3},
	{value: 0x386a, lo: 0xa4, hi: 0xa4},
	{value: 0x3864, lo: 0xa5, hi: 0xa5},
	{value: 0x3870, lo: 0xa6, hi: 0xa6},
	{value: 0xa000, lo: 0xa7, hi: 0xa7},
	// Block 0x8, offset 0x47
	{value: 0x0000, lo: 0x0e},
	{value: 0x3882, lo: 0x80, hi: 0x80},
	{value: 0xa000, lo: 0x81, hi: 0x81},
	{value: 0x3876, lo: 0x82, hi: 0x82},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x387c, lo: 0x93, hi: 0x93},
	{value: 0xa000, lo: 0x95, hi: 0x95},
	{value: 0x8133, lo: 0x96, hi: 0x9c},
	{value: 0x8133, lo: 0x9f, hi: 0xa2},
	{value: 0x812e, lo: 0xa3, hi: 0xa3},
	{value: 0x8133, lo: 0xa4, hi: 0xa4},
	{value: 0x8133, lo: 0xa7, hi: 0xa8},
	{value: 0x812e, lo: 0xaa, hi: 0xaa},
	{value: 0x8133, lo: 0xab, hi: 0xac},
	{value: 0x812e, lo: 0xad, hi: 0xad},
	// Block 0x9, offset 0x56
	{value: 0x0000, lo: 0x0c},
	{value: 0x8120, lo: 0x91, hi: 0x91},
	{value: 0x8133, lo: 0xb0, hi: 0xb0},
	{value: 0x812e, lo: 0xb1, hi: 0xb1},
	{value: 0x8133, lo: 0xb2, hi: 0xb3},
	{value: 0x812e, lo: 0xb4, hi: 0xb4},
	{value: 0x8133, lo: 0xb5, hi: 0xb6},
	{value: 0x812e, lo: 0xb7, hi: 0xb9},
	{value: 0x8133, lo: 0xba, hi: 0xba},
	{value: 0x812e, lo: 0xbb, hi: 0xbc},
	{value: 0x8133, lo: 0xbd, hi: 0xbd},
	{value: 0x812e, lo: 0xbe, hi: 0xbe},
	{value: 0x8133, lo: 0xbf, hi: 0xbf},
	// Block 0xa, offset 0x63
	{value: 0x0005, lo: 0x07},
	{value: 0x8133, lo: 0x80, hi: 0x80},
	{value: 0x8133, lo: 0x81, hi: 0x81},
	{value: 0x812e, lo: 0x82, hi: 0x83},
	{value: 0x812e, lo: 0x84, hi: 0x85},
	{value: 0x812e, lo: 0x86, hi: 0x87},
	{value: 0x812e, lo: 0x88, hi: 0x89},
	{value: 0x8133, lo: 0x8a, hi: 0x8a},
	// Block 0xb, offset 0x6b
	{value: 0x0000, lo: 0x04},
	{value: 0x8133, lo: 0xab, hi: 0xb1},
	{value: 0x812e, lo: 0xb2, hi: 0xb2},
	{value: 0x8133, lo: 0xb3, hi: 0xb3},
	{value: 0x812e, lo: 0xbd, hi: 0xbd},
	// Block 0xc, offset 0x70
	{value: 0x0000, lo: 0x04},
	{value: 0x8133, lo: 0x96, hi: 0x99},
	{value: 0x8133, lo: 0x9b, hi: 0xa3},
	{value: 0x8133, lo: 0xa5, hi: 0xa7},
	{value: 0x8133, lo: 0xa9, hi: 0xad},
	// Block 0xd, offset 0x75
	{value: 0x0000, lo: 0x01},
	{value: 0x812e, lo: 0x99, hi: 0x9b},
	// Block 0xe, offset 0x77
	{value: 0x0000, lo: 0x07},
	{value: 0xa000, lo: 0xa8, hi: 0xa8},
	{value: 0x3eef, lo: 0xa9, hi: 0xa9},
	{value: 0xa000, lo: 0xb0, hi: 0xb0},
	{value: 0x3ef7, lo: 0xb1, hi: 0xb1},
	{value: 0xa000, lo: 0xb3, hi: 0xb3},
	{value: 0x3eff, lo: 0xb4, hi: 0xb4},
	{value: 0x9903, lo: 0xbc, hi: 0xbc},
	// Block 0xf, offset 0x7f
	{value: 0x0008, lo: 0x06},
	{value: 0x8105, lo: 0x8d, hi: 0x8d},
	{value: 0x8133, lo: 0x91, hi: 0x91},
	{value: 0x812e, lo: 0x92, hi: 0x92},
	{value: 0x8133, lo: 0x93, hi: 0x93},
	{value: 0x8133, lo: 0x94, hi: 0x94},
	{value: 0x4533, lo: 0x98, hi: 0x9f},
	// Block 0x10, offset 0x86
	{value: 0x0000, lo: 0x02},
	{value: 0x8103, lo: 0xbc, hi: 0xbc},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x11, offset 0x89
	{value: 0x0008, lo: 0x07},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2cab, lo: 0x8b, hi: 0x8c},
	{value: 0x8105, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	{value: 0x4573, lo: 0x9c, hi: 0x9d},
	{value: 0x4583, lo: 0x9f, hi: 0x9f},
	{value: 0x8133, lo: 0xbe, hi: 0xbe},
	// Block 0x12, offset 0x91
	{value: 0x0000, lo: 0x03},
	{value: 0x45ab, lo: 0xb3, hi: 0xb3},
	{value: 0x45b3, lo: 0xb6, hi: 0xb6},
	{value: 0x8103, lo: 0xbc, hi: 0xbc},
	// Block 0x13, offset 0x95
	{value: 0x0008, lo: 0x03},
	{value: 0x8105, lo: 0x8d, hi: 0x8d},
	{value: 0x458b, lo: 0x99, hi: 0x9b},
	{value: 0x45a3, lo: 0x9e, hi: 0x9e},
	// Block 0x14, offset 0x99
	{value: 0x0000, lo: 0x01},
	{value: 0x8103, lo: 0xbc, hi: 0xbc},
	// Block 0x15, offset 0x9b
	{value: 0x0000, lo: 0x01},
	{value: 0x8105, lo: 0x8d, hi: 0x8d},
	// Block 0x16, offset 0x9d
	{value: 0x0000, lo: 0x08},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2cc3, lo: 0x88, hi: 0x88},
	{value: 0x2cbb, lo: 0x8b, hi: 0x8b},
	{value: 0x2ccb, lo: 0x8c, hi: 0x8c},
	{value: 0x8105, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x96, hi: 0x97},
	{value: 0x45bb, lo: 0x9c, hi: 0x9c},
	{value: 0x45c3, lo: 0x9d, hi: 0x9d},
	// Block 0x17, offset 0xa6
	{value: 0x0000, lo: 0x03},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x2cd3, lo: 0x94, hi: 0x94},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x18, offset 0xaa
	{value: 0x0000, lo: 0x06},
	{value: 0xa000, lo: 0x86, hi: 0x87},
	{value: 0x2cdb, lo: 0x8a, hi: 0x8a},
	{value: 0x2ceb, lo: 0x8b, hi: 0x8b},
	{value: 0x2ce3, lo: 0x8c, hi: 0x8c},
	{value: 0x8105, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	// Block 0x19, offset 0xb1
	{value: 0x1801, lo: 0x04},
	{value: 0xa000, lo: 0x86, hi: 0x86},
	{value: 0x3f07, lo: 0x88, hi: 0x88},
	{value: 0x8105, lo: 0x8d, hi: 0x8d},
	{value: 0x8121, lo: 0x95, hi: 0x96},
	// Block 0x1a, offset 0xb6
	{value: 0x0000, lo: 0x02},
	{value: 0x8103, lo: 0xbc, hi: 0xbc},
	{value: 0xa000, lo: 0xbf, hi: 0xbf},
	// Block 0x1b, offset 0xb9
	{value: 0x0000, lo: 0x09},
	{value: 0x2cf3, lo: 0x80, hi: 0x80},
	{value: 0x9900, lo: 0x82, hi: 0x82},
	{value: 0xa000, lo: 0x86, hi: 0x86},
	{value: 0x2cfb, lo: 0x87, hi: 0x87},
	{value: 0x2d03, lo: 0x88, hi: 0x88},
	{value: 0x2f67, lo: 0x8a, hi: 0x8a},
	{value: 0x2def, lo: 0x8b, hi: 0x8b},
	{value: 0x8105, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x95, hi: 0x96},
	// Block 0x1c, offset 0xc3
	{value: 0x0000, lo: 0x02},
	{value: 0x8105, lo: 0xbb, hi: 0xbc},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x1d, offset 0xc6
	{value: 0x0000, lo: 0x06},
	{value: 0xa000, lo: 0x86, hi: 0x87},
	{value: 0x2d0b, lo: 0x8a, hi: 0x8a},
	{value: 0x2d1b, lo: 0x8b, hi: 0x8b},
	{value: 0x2d13, lo: 0x8c, hi: 0x8c},
	{value: 0x8105, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	// Block 0x1e, offset 0xcd
	{value: 0x6bdd, lo: 0x07},
	{value: 0x9905, lo: 0x8a, hi: 0x8a},
	{value: 0x9900, lo: 0x8f, hi: 0x8f},
	{value: 0xa000, lo: 0x99, hi: 0x99},
	{value: 0x3f0f, lo: 0x9a, hi: 0x9a},
	{value: 0x2f6f, lo: 0x9c, hi: 0x9c},
	{value: 0x2dfa, lo: 0x9d, hi: 0x9d},
	{value: 0x2d23, lo: 0x9e, hi: 0x9f},
	// Block 0x1f, offset 0xd5
	{value: 0x0000, lo: 0x03},
	{value: 0x2627, lo: 0xb3, hi: 0xb3},
	{value: 0x8123, lo: 0xb8, hi: 0xb9},
	{value: 0x8105, lo: 0xba, hi: 0xba},
	// Block 0x20, offset 0xd9
	{value: 0x0000, lo: 0x01},
	{value: 0x8124, lo: 0x88, hi: 0x8b},
	// Block 0x21, offset 0xdb
	{value: 0x0000, lo: 0x03},
	{value: 0x263c, lo: 0xb3, hi: 0xb3},
	{value: 0x8125, lo: 0xb8, hi: 0xb9},
	{value: 0x8105, lo: 0xba, hi: 0xba},
	// Block 0x22, offset 0xdf
	{value: 0x0000, lo: 0x03},
	{value: 0x8126, lo: 0x88, hi: 0x8b},
	{value: 0x262e, lo: 0x9c, hi: 0x9c},
	{value: 0x2635, lo: 0x9d, hi: 0x9d},
	// Block 0x23, offset 0xe3
	{value: 0x0000, lo: 0x05},
	{value: 0x030e, lo: 0x8c, hi: 0x8c},
	{value: 0x812e, lo: 0x98, hi: 0x99},
	{value: 0x812e, lo: 0xb5, hi: 0xb5},
	{value: 0x812e, lo: 0xb7, hi: 0xb7},
	{value: 0x812c, lo: 0xb9, hi: 0xb9},
	// Block 0x24, offset 0xe9
	{value: 0x0000, lo: 0x10},
	{value: 0x264a, lo: 0x83, hi: 0x83},
	{value: 0x2651, lo: 0x8d, hi: 0x8d},
	{value: 0x2658, lo: 0x92, hi: 0x92},
	{value: 0x265f, lo: 0x97, hi: 0x97},
	{value: 0x2666, lo: 0x9c, hi: 0x9c},
	{value: 0x2643, lo: 0xa9, hi: 0xa9},
	{value: 0x8127, lo: 0xb1, hi: 0xb1},
	{value: 0x8128, lo: 0xb2, hi: 0xb2},
	{value: 0x4a9b, lo: 0xb3, hi: 0xb3},
	{value: 0x8129, lo: 0xb4, hi: 0xb4},
	{value: 0x4aa4, lo: 0xb5, hi: 0xb5},
	{value: 0x45cb, lo: 0xb6, hi: 0xb6},
	{value: 0x460b, lo: 0xb7, hi: 0xb7},
	{value: 0x45d3, lo: 0xb8, hi: 0xb8},
	{value: 0x4616, lo: 0xb9, hi: 0xb9},
	{value: 0x8128, lo: 0xba, hi: 0xbd},
	// Block 0x25, offset 0xfa
	{value: 0x0000, lo: 0x0b},
	{value: 0x8128, lo: 0x80, hi: 0x80},
	{value: 0x4aad, lo: 0x81, hi: 0x81},
	{value: 0x8133, lo: 0x82, hi: 0x83},
	{value: 0x8105, lo: 0x84, hi: 0x84},
	{value: 0x8133, lo: 0x86, hi: 0x87},
	{value: 0x2674, lo: 0x93, hi: 0x93},
	{value: 0x267b, lo: 0x9d, hi: 0x9d},
	{value: 0x2682, lo: 0xa2, hi: 0xa2},
	{value: 0x2689, lo: 0xa7, hi: 0xa7},
	{value: 0x2690, lo: 0xac, hi: 0xac},
	{value: 0x266d, lo: 0xb9, hi: 0xb9},
	// Block 0x26, offset 0x106
	{value: 0x0000, lo: 0x01},
	{value: 0x812e, lo: 0x86, hi: 0x86},
	// Block 0x27, offset 0x108
	{value: 0x0000, lo: 0x05},
	{value: 0xa000, lo: 0xa5, hi: 0xa5},
	{value: 0x2d2b, lo: 0xa6, hi: 0xa6},
	{value: 0x9900, lo: 0xae, hi: 0xae},
	{value: 0x8103, lo: 0xb7, hi: 0xb7},
	{value: 0x8105, lo: 0xb9, hi: 0xba},
	// Block 0x28, offset 0x10e
	{value: 0x0000, lo: 0x01},
	{value: 0x812e, lo: 0x8d, hi: 0x8d},
	// Block 0x29, offset 0x110
	{value: 0x0000, lo: 0x01},
	{value: 0x0312, lo: 0xbc, hi: 0xbc},
	// Block 0x2a, offset 0x112
	{value: 0x0000, lo: 0x01},
	{value: 0xa000, lo: 0x80, hi: 0x92},
	// Block 0x2b, offset 0x114
	{value: 0x0000, lo: 0x01},
	{value: 0xb900, lo: 0xa1, hi: 0xb5},
	// Block 0x2c, offset 0x116
	{value: 0x0000, lo: 0x01},
	{value: 0x9900, lo: 0xa8, hi: 0xbf},
	// Block 0x2d, offset 0x118
	{value: 0x0000, lo: 0x01},
	{value: 0x9900, lo: 0x80, hi: 0x82},
	// Block 0x2e, offset 0x11a
	{value: 0x0000, lo: 0x01},
	{value: 0x8133, lo: 0x9d, hi: 0x9f},
	// Block 0x2f, offset 0x11c
	{value: 0x0000, lo: 0x02},
	{value: 0x8105, lo: 0x94, hi: 0x94},
	{value: 0x8105, lo: 0xb4, hi: 0xb4},
	// Block 0x30, offset 0x11f
	{value: 0x0000, lo: 0x02},
	{value: 0x8105, lo: 0x92, hi: 0x92},
	{value: 0x8133, lo: 0x9d, hi: 0x9d},
	// Block 0x31, offset 0x122
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xa9, hi: 0xa9},
	// Block 0x32, offset 0x124
	{value: 0x0004, lo: 0x02},
	{value: 0x812f, lo: 0xb9, hi: 0xba},
	{value: 0x812e, lo: 0xbb, hi: 0xbb},
	// Block 0x33, offset 0x127
	{value: 0x0000, lo: 0x02},
	{value: 0x8133, lo: 0x97, hi: 0x97},
	{value: 0x812e, lo: 0x98, hi: 0x98},
	// Block 0x34, offset 0x12a
	{value: 0x0000, lo: 0x03},
	{value: 0x8105, lo: 0xa0, hi: 0xa0},
	{value: 0x8133, lo: 0xb5, hi: 0xbc},
	{value: 0x812e, lo: 0xbf, hi: 0xbf},
	// Block 0x35, offset 0x12e
	{value: 0x0000, lo: 0x05},
	{value: 0x8133, lo: 0xb0, hi: 0xb4},
	{value: 0x812e, lo: 0xb5, hi: 0xba},
	{value: 0x8133, lo: 0xbb, hi: 0xbc},
	{value: 0x812e, lo: 0xbd, hi: 0xbd},
	{value: 0x812e, lo: 0xbf, hi: 0xbf},
	// Block 0x36, offset 0x134
	{value: 0x0000, lo: 0x01},
	{value: 0x812e, lo: 0x80, hi: 0x80},
	// Block 0x37, offset 0x136
	{value: 0x0000, lo: 0x08},
	{value: 0x2d73, lo: 0x80, hi: 0x80},
	{value: 0x2d7b, lo: 0x81, hi: 0x81},
	{value: 0xa000, lo: 0x82, hi: 0x82},
	{value: 0x2d83, lo: 0x83, hi: 0x83},
	{value: 0x8105, lo: 0x84, hi: 0x84},
	{value: 0x8133, lo: 0xab, hi: 0xab},
	{value: 0x812e, lo: 0xac, hi: 0xac},
	{value: 0x8133, lo: 0xad, hi: 0xb3},
	// Block 0x38, offset 0x13f
	{value: 0x0000, lo: 0x01},
	{value: 0x8105, lo: 0xaa, hi: 0xab},
	// Block 0x39, offset 0x141
	{value: 0x0000, lo: 0x02},
	{value: 0x8103, lo: 0xa6, hi: 0xa6},
	{value: 0x8105, lo: 0xb2, hi: 0xb3},
	// Block 0x3a, offset 0x144
	{value: 0x0000, lo: 0x01},
	{value: 0x8103, lo: 0xb7, hi: 0xb7},
	// Block 0x3b, offset 0x146
	{value: 0x0000, lo: 0x0a},
	{value: 0x8133, lo: 0x90, hi: 0x92},
	{value: 0x8101, lo: 0x94, hi: 0x94},
	{value: 0x812e, lo: 0x95, hi: 0x99},
	{value: 0x8133, lo: 0x9a, hi: 0x9b},
	{value: 0x812e, lo: 0x9c, hi: 0x9f},
	{value: 0x8133, lo: 0xa0, hi: 0xa0},
	{value: 0x8101, lo: 0xa2, hi: 0xa8},
	{value: 0x812e, lo: 0xad, hi: 0xad},
	{value: 0x8133, lo: 0xb4, hi: 0xb4},
	{value: 0x8133, lo: 0xb8, hi: 0xb9},
	// Block 0x3c, offset 0x151
	{value: 0x0002, lo: 0x0a},
	{value: 0x0043, lo: 0xac, hi: 0xac},
	{value: 0x00d1, lo: 0xad, hi: 0xad},
	{value: 0x0045, lo: 0xae, hi: 0xae},
	{value: 0x0049, lo: 0xb0, hi: 0xb1},
	{value: 0x00e6, lo: 0xb2, hi: 0xb2},
	{value: 0x004f, lo: 0xb3, hi: 0xba},
	{value: 0x005f, lo: 0xbc, hi: 0xbc},
	{value: 0x00ef, lo: 0xbd, hi: 0xbd},
	{value: 0x0061, lo: 0xbe, hi: 0xbe},
	{value: 0x0065, lo: 0xbf, hi: 0xbf},
	// Block 0x3d, offset 0x15c
	{value: 0x0000, lo: 0x0d},
	{value: 0x0001, lo: 0x80, hi: 0x8a},
	{value: 0x043e, lo: 0x91, hi: 0x91},
	{value: 0x42b2, lo: 0x97, hi: 0x97},
	{value: 0x001d, lo: 0xa4, hi: 0xa4},
	{value: 0x1876, lo: 0xa5, hi: 0xa5},
	{value: 0x1b62, lo: 0xa6, hi: 0xa6},
	{value: 0x0001, lo: 0xaf, hi: 0xaf},
	{value: 0x2697, lo: 0xb3, hi: 0xb3},
	{value: 0x280b, lo: 0xb4, hi: 0xb4},
	{value: 0x269e, lo: 0xb6, hi: 0xb6},
	{value: 0x2815, lo: 0xb7, hi: 0xb7},
	{value: 0x1870, lo: 0xbc, hi: 0xbc},
	{value: 0x4280, lo: 0xbe, hi: 0xbe},
	// Block 0x3e, offset 0x16a
	{value: 0x0002, lo: 0x0d},
	{value: 0x1936, lo: 0x87, hi: 0x87},
	{value: 0x1933, lo: 0x88, hi: 0x88},
	{value: 0x1873, lo: 0x89, hi: 0x89},
	{value: 0x299b, lo: 0x97, hi: 0x97},
	{value: 0x0001, lo: 0x9f, hi: 0x9f},
	{value: 0x0021, lo: 0xb0, hi: 0xb0},
	{value: 0x0093, lo: 0xb1, hi: 0xb1},
	{value: 0x0029, lo: 0xb4, hi: 0xb9},
	{value: 0x0017, lo: 0xba, hi: 0xba},
	{value: 0x046a, lo: 0xbb, hi: 0xbb},
	{value: 0x003b, lo: 0xbc, hi: 0xbc},
	{value: 0x0011, lo: 0xbd, hi: 0xbe},
	{value: 0x009d, lo: 0xbf, hi: 0xbf},
	// Block 0x3f, offset 0x178
	{value: 0x0002, lo: 0x0f},
	{value: 0x0021, lo: 0x80, hi: 0x89},
	{value: 0x0017, lo: 0x8a, hi: 0x8a},
	{value: 0x046a, lo: 0x8b, hi: 0x8b},
	{value: 0x003b, lo: 0x8c, hi: 0x8c},
	{value: 0x0011, lo: 0x8d, hi: 0x8e},
	{value: 0x0083, lo: 0x90, hi: 0x90},
	{value: 0x008b, lo: 0x91, hi: 0x91},
	{value: 0x009f, lo: 0x92, hi: 0x92},
	{value: 0x00b1, lo: 0x93, hi: 0x93},
	{value: 0x0104, lo: 0x94, hi: 0x94},
	{value: 0x0091, lo: 0x95, hi: 0x95},
	{value: 0x0097, lo: 0x96, hi: 0x99},
	{value: 0x00a1, lo: 0x9a, hi: 0x9a},
	{value: 0x00a7, lo: 0x9b, hi: 0x9c},
	{value: 0x199f, lo: 0xa8, hi: 0xa8},
	// Block 0x40, offset 0x188
	{value: 0x0000, lo: 0x0d},
	{value: 0x8133, lo: 0x90, hi: 0x91},
	{value: 0x8101, lo: 0x92, hi: 0x93},
	{value: 0x8133, lo: 0x94, hi: 0x97},
	{value: 0x8101, lo: 0x98, hi: 0x9a},
	{value: 0x8133, lo: 0x9b, hi: 0x9c},
	{value: 0x8133, lo: 0xa1, hi: 0xa1},
	{value: 0x8101, lo: 0xa5, hi: 0xa6},
	{value: 0x8133, lo: 0xa7, hi: 0xa7},
	{value: 0x812e, lo: 0xa8, hi: 0xa8},
	{value: 0x8133, lo: 0xa9, hi: 0xa9},
	{value: 0x8101, lo: 0xaa, hi: 0xab},
	{value: 0x812e, lo: 0xac, hi: 0xaf},
	{value: 0x8133, lo: 0xb0, hi: 0xb0},
	// Block 0x41, offset 0x196
	{value: 0x0007, lo: 0x06},
	{value: 0x2186, lo: 0x89, hi: 0x89},
	{value: 0xa000, lo: 0x90, hi: 0x90},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0xa000, lo: 0x94, hi: 0x94},
	{value: 0x3bd0, lo: 0x9a, hi: 0x9b},
	{value: 0x3bde, lo: 0xae, hi: 0xae},
	// Block 0x42, offset 0x19d
	{value: 0x000e, lo: 0x05},
	{value: 0x3be5, lo: 0x8d, hi: 0x8e},
	{value: 0x3bec, lo: 0x8f, hi: 0x8f},
	{value: 0xa000, lo: 0x90, hi: 0x90},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0xa000, lo: 0x94, hi: 0x94},
	// Block 0x43, offset 0x1a3
	{value: 0x017a, lo: 0x0e},
	{value: 0xa000, lo: 0x83, hi: 0x83},
	{value: 0x3bfa, lo: 0x84, hi: 0x84},
	{value: 0xa000, lo: 0x88, hi: 0x88},
	{value: 0x3c01, lo: 0x89, hi: 0x89},
	{value: 0xa000, lo: 0x8b, hi: 0x8b},
	{value: 0x3c08, lo: 0x8c, hi: 0x8c},
	{value: 0xa000, lo: 0xa3, hi: 0xa3},
	{value: 0x3c0f, lo: 0xa4, hi: 0xa4},
	{value: 0xa000, lo: 0xa5, hi: 0xa5},
	{value: 0x3c16, lo: 0xa6, hi: 0xa6},
	{value: 0x26a5, lo: 0xac, hi: 0xad},
	{value: 0x26ac, lo: 0xaf, hi: 0xaf},
	{value: 0x2829, lo: 0xb0, hi: 0xb0},
	{value: 0xa000, lo: 0xbc, hi: 0xbc},
	// Block 0x44, offset 0x1b2
	{value: 0x0007, lo: 0x03},
	{value: 0x3c7f, lo: 0xa0, hi: 0xa1},
	{value: 0x3ca9, lo: 0xa2, hi: 0xa3},
	{value: 0x3cd3, lo: 0xaa, hi: 0xad},
	// Block 0x45, offset 0x1b6
	{value: 0x0004, lo: 0x01},
	{value: 0x048e, lo: 0xa9, hi: 0xaa},
	// Block 0x46, offset 0x1b8
	{value: 0x0002, lo: 0x03},
	{value: 0x0057, lo: 0x80, hi: 0x8f},
	{value: 0x0083, lo: 0x90, hi: 0xa9},
	{value: 0x0021, lo: 0xaa, hi: 0xaa},
	// Block 0x47, offset 0x1bc
	{value: 0x0000, lo: 0x01},
	{value: 0x29a8, lo: 0x8c, hi: 0x8c},
	// Block 0x48, offset 0x1be
	{value: 0x0266, lo: 0x02},
	{value: 0x1b92, lo: 0xb4, hi: 0xb4},
	{value: 0x1930, lo: 0xb5, hi: 0xb6},
	// Block 0x49, offset 0x1c1
	{value: 0x0000, lo: 0x01},
	{value: 0x44f4, lo: 0x9c, hi: 0x9c},
	// Block 0x4a, offset 0x1c3
	{value: 0x0000, lo: 0x02},
	{value: 0x0095, lo: 0xbc, hi: 0xbc},
	{value: 0x006d, lo: 0xbd, hi: 0xbd},
	// Block 0x4b, offset 0x1c6
	{value: 0x0000, lo: 0x01},
	{value: 0x8133, lo: 0xaf, hi: 0xb1},
	// Block 0x4c, offset 0x1c8
	{value: 0x0000, lo: 0x02},
	{value: 0x0482, lo: 0xaf, hi: 0xaf},
	{value: 0x8105, lo: 0xbf, hi: 0xbf},
	// Block 0x4d, offset 0x1cb
	{value: 0x0000, lo: 0x01},
	{value: 0x8133, lo: 0xa0, hi: 0xbf},
	// Block 0x4e, offset 0x1cd
	{value: 0x0000, lo: 0x01},
	{value: 0x0dc6, lo: 0x9f, hi: 0x9f},
	// Block 0x4f, offset 0x1cf
	{value: 0x0000, lo: 0x01},
	{value: 0x1632, lo: 0xb3, hi: 0xb3},
	// Block 0x50, offset 0x1d1
	{value: 0x0004, lo: 0x0b},
	{value: 0x159a, lo: 0x80, hi: 0x82},
	{value: 0x15b2, lo: 0x83, hi: 0x83},
	{value: 0x15ca, lo: 0x84, hi: 0x85},
	{value: 0x15da, lo: 0x86, hi: 0x89},
	{value: 0x15ee, lo: 0x8a, hi: 0x8c},
	{value: 0x1602, lo: 0x8d, hi: 0x8d},
	{value: 0x160a, lo: 0x8e, hi: 0x8e},
	{value: 0x1612, lo: 0x8f, hi: 0x90},
	{value: 0x161e, lo: 0x91, hi: 0x93},
	{value: 0x162e, lo: 0x94, hi: 0x94},
	{value: 0x1636, lo: 0x95, hi: 0x95},
	// Block 0x51, offset 0x1dd
	{value: 0x0004, lo: 0x09},
	{value: 0x0001, lo: 0x80, hi: 0x80},
	{value: 0x812d, lo: 0xaa, hi: 0xaa},
	{value: 0x8132, lo: 0xab, hi: 0xab},
	{value: 0x8134, lo: 0xac, hi: 0xac},
	{value: 0x812f, lo: 0xad, hi: 0xad},
	{value: 0x8130, lo: 0xae, hi: 0xae},
	{value: 0x8130, lo: 0xaf, hi: 0xaf},
	{value: 0x04b6, lo: 0xb6, hi: 0xb6},
	{value: 0x088a, lo: 0xb8, hi: 0xba},
	// Block 0x52, offset 0x1e7
	{value: 0x0006, lo: 0x09},
	{value: 0x0316, lo: 0xb1, hi: 0xb1},
	{value: 0x031a, lo: 0xb2, hi: 0xb2},
	{value: 0x4a52, lo: 0xb3, hi: 0xb3},
	{value: 0x031e, lo: 0xb4, hi: 0xb4},
	{value: 0x4a58, lo: 0xb5, hi: 0xb6},
	{value: 0x0322, lo: 0xb7, hi: 0xb7},
	{value: 0x0326, lo: 0xb8, hi: 0xb8},
	{value: 0x032a, lo: 0xb9, hi: 0xb9},
	{value: 0x4a64, lo: 0xba, hi: 0xbf},
	// Block 0x53, offset 0x1f1
	{value: 0x0000, lo: 0x02},
	{value: 0x8133, lo: 0xaf, hi: 0xaf},
	{value: 0x8133, lo: 0xb4, hi: 0xbd},
	// Block 0x54, offset 0x1f4
	{value: 0x0000, lo: 0x03},
	{value: 0x0212, lo: 0x9c, hi: 0x9c},
	{value: 0x0215, lo: 0x9d, hi: 0x9d},
	{value: 0x8133, lo: 0x9e, hi: 0x9f},
	// Block 0x55, offset 0x1f8
	{value: 0x0000, lo: 0x01},
	{value: 0x8133, lo: 0xb0, hi: 0xb1},
	// Block 0x56, offset 0x1fa
	{value: 0x0000, lo: 0x01},
	{value: 0x163e, lo: 0xb0, hi: 0xb0},
	// Block 0x57, offset 0x1fc
	{value: 0x000c, lo: 0x01},
	{value: 0x00d7, lo: 0xb8, hi: 0xb9},
	// Block 0x58, offset 0x1fe
	{value: 0x0000, lo: 0x02},
	{value: 0x8105, lo: 0x86, hi: 0x86},
	{value: 0x8105, lo: 0xac, hi: 0xac},
	// Block 0x59, offset 0x201
	{value: 0x0000, lo: 0x02},
	{value: 0x8105, lo: 0x84, hi: 0x84},
	{value: 0x8133, lo: 0xa0, hi: 0xb1},
	// Block 0x5a, offset 0x204
	{value: 0x0000, lo: 0x01},
	{value: 0x812e, lo: 0xab, hi: 0xad},
	// Block 0x5b, offset 0x206
	{value: 0x0000, lo: 0x01},
	{value: 0x8105, lo: 0x93, hi: 0x93},
	// Block 0x5c, offset 0x208
	{value: 0x0000, lo: 0x01},
	{value: 0x8103, lo: 0xb3, hi: 0xb3},
	// Block 0x5d, offset 0x20a
	{value: 0x0000, lo: 0x01},
	{value: 0x8105, lo: 0x80, hi: 0x80},
	// Block 0x5e, offset 0x20c
	{value: 0x0000, lo: 0x05},
	{value: 0x8133, lo: 0xb0, hi: 0xb0},
	{value: 0x8133, lo: 0xb2, hi: 0xb3},
	{value: 0x812e, lo: 0xb4, hi: 0xb4},
	{value: 0x8133, lo: 0xb7, hi: 0xb8},
	{value: 0x8133, lo: 0xbe, hi: 0xbf},
	// Block 0x5f, offset 0x212
	{value: 0x0000, lo: 0x02},
	{value: 0x8133, lo: 0x81, hi: 0x81},
	{value: 0x8105, lo: 0xb6, hi: 0xb6},
	// Block 0x60, offset 0x215
	{value: 0x0008, lo: 0x04},
	{value: 0x163a, lo: 0x9c, hi: 0x9d},
	{value: 0x0125, lo: 0x9e, hi: 0x9e},
	{value: 0x1646, lo: 0x9f, hi: 0x9f},
	{value: 0x015e, lo: 0xa9, hi: 0xa9},
	// Block 0x61, offset 0x21a
	{value: 0x0000, lo: 0x01},
	{value: 0x8105, lo: 0xad, hi: 0xad},
	// Block 0x62, offset 0x21c
	{value: 0x0000, lo: 0x06},
	{value: 0xe500, lo: 0x80, hi: 0x80},
	{value: 0xc600, lo: 0x81, hi: 0x9b},
	{value: 0xe500, lo: 0x9c, hi: 0x9c},
	{value: 0xc600, lo: 0x9d, hi: 0xb7},
	{value: 0xe500, lo: 0xb8, hi: 0xb8},
	{value: 0xc600, lo: 0xb9, hi: 0xbf},
	// Block 0x63, offset 0x223
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x93},
	{value: 0xe500, lo: 0x94, hi: 0x94},
	{value: 0xc600, lo: 0x95, hi: 0xaf},
	{value: 0xe500, lo: 0xb0, hi: 0xb0},
	{value: 0xc600, lo: 0xb1, hi: 0xbf},
	// Block 0x64, offset 0x229
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x8b},
	{value: 0xe500, lo: 0x8c, hi: 0x8c},
	{value: 0xc600, lo: 0x8d, hi: 0xa7},
	{value: 0xe500, lo: 0xa8, hi: 0xa8},
	{value: 0xc600, lo: 0xa9, hi: 0xbf},
	// Block 0x65, offset 0x22f
	{value: 0x0000, lo: 0x07},
	{value: 0xc600, lo: 0x80, hi: 0x83},
	{value: 0xe500, lo: 0x84, hi: 0x84},
	{value: 0xc600, lo: 0x85, hi: 0x9f},
	{value: 0xe500, lo: 0xa0, hi: 0xa0},
	{value: 0xc600, lo: 0xa1, hi: 0xbb},
	{value: 0xe500, lo: 0xbc, hi: 0xbc},
	{value: 0xc600, lo: 0xbd, hi: 0xbf},
	// Block 0x66, offset 0x237
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x97},
	{value: 0xe500, lo: 0x98, hi: 0x98},
	{value: 0xc600, lo: 0x99, hi: 0xb3},
	{value: 0xe500, lo: 0xb4, hi: 0xb4},
	{value: 0xc600, lo: 0xb5, hi: 0xbf},
	// Block 0x67, offset 0x23d
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x8f},
	{value: 0xe500, lo: 0x90, hi: 0x90},
	{value: 0xc600, lo: 0x91, hi: 0xab},
	{value: 0xe500, lo: 0xac, hi: 0xac},
	{value: 0xc600, lo: 0xad, hi: 0xbf},
	// Block 0x68, offset 0x243
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x87},
	{value: 0xe500, lo: 0x88, hi: 0x88},
	{value: 0xc600, lo: 0x89, hi: 0xa3},
	{value: 0xe500, lo: 0xa4, hi: 0xa4},
	{value: 0xc600, lo: 0xa5, hi: 0xbf},
	// Block 0x69, offset 0x249
	{value: 0x0000, lo: 0x03},
	{value: 0xc600, lo: 0x80, hi: 0x87},
	{value: 0xe500, lo: 0x88, hi: 0x88},
	{value: 0xc600, lo: 0x89, hi: 0xa3},
	// Block 0x6a, offset 0x24d
	{value: 0x0002, lo: 0x01},
	{value: 0x0003, lo: 0x81, hi: 0xbf},
	// Block 0x6b, offset 0x24f
	{value: 0x0000, lo: 0x01},
	{value: 0x812e, lo: 0xbd, hi: 0xbd},
	// Block 0x6c, offset 0x251
	{value: 0x0000, lo: 0x01},
	{value: 0x812e, lo: 0xa0, hi: 0xa0},
	// Block 0x6d, offset 0x253
	{value: 0x0000, lo: 0x01},
	{value: 0x8133, lo: 0xb6, hi: 0xba},
	// Block 0x6e, offset 0x255
	{value: 0x002d, lo: 0x05},
	{value: 0x812e, lo: 0x8d, hi: 0x8d},
	{value: 0x8133, lo: 0x8f, hi: 0x8f},
	{value: 0x8133, lo: 0xb8, hi: 0xb8},
	{value: 0x8101, lo: 0xb9, hi: 0xba},
	{value: 0x8105, lo: 0xbf, hi: 0xbf},
	// Block 0x6f, offset 0x25b
	{value: 0x0000, lo: 0x02},
	{value: 0x8133, lo: 0xa5, hi: 0xa5},
	{value: 0x812e, lo: 0xa6, hi: 0xa6},
	// Block 0x70, offset 0x25e
	{value: 0x0000, lo: 0x01},
	{value: 0x8133, lo: 0xa4, hi: 0xa7},
	// Block 0x71, offset 0x260
	{value: 0x0000, lo: 0x01},
	{value: 0x8133, lo: 0xab, hi: 0xac},
	// Block 0x72, offset 0x262
	{value: 0x0000, lo: 0x05},
	{value: 0x812e, lo: 0x86, hi: 0x87},
	{value: 0x8133, lo: 0x88, hi: 0x8a},
	{value: 0x812e, lo: 0x8b, hi: 0x8b},
	{value: 0x8133, lo: 0x8c, hi: 0x8c},
	{value: 0x812e, lo: 0x8d, hi: 0x90},
	// Block 0x73, offset 0x268
	{value: 0x0000, lo: 0x02},
	{value: 0x8105, lo: 0x86, hi: 0x86},
	{value: 0x8105, lo: 0xbf, hi: 0xbf},
	// Block 0x74, offset 0x26b
	{value: 0x17fe, lo: 0x07},
	{value: 0xa000, lo: 0x99, hi: 0x99},
	{value: 0x424f, lo: 0x9a, hi: 0x9a},
	{value: 0xa000, lo: 0x9b, hi: 0x9b},
	{value: 0x4259, lo: 0x9c, hi: 0x9c},
	{value: 0xa000, lo: 0xa5, hi: 0xa5},
	{value: 0x4263, lo: 0xab, hi: 0xab},
	{value: 0x8105, lo: 0xb9, hi: 0xba},
	// Block 0x75, offset 0x273
	{value: 0x0000, lo: 0x06},
	{value: 0x8133, lo: 0x80, hi: 0x82},
	{value: 0x9900, lo: 0xa7, hi: 0xa7},
	{value: 0x2d8b, lo: 0xae, hi: 0xae},
	{value: 0x2d95, lo: 0xaf, hi: 0xaf},
	{value: 0xa000, lo: 0xb1, hi: 0xb2},
	{value: 0x8105, lo: 0xb3, hi: 0xb4},
	// Block 0x76, offset 0x27a
	{value: 0x0000, lo: 0x02},
	{value: 0x8105, lo: 0x80, hi: 0x80},
	{value: 0x8103, lo: 0x8a, hi: 0x8a},
	// Block 0x77, offset 0x27d
	{value: 0x0000, lo: 0x02},
	{value: 0x8105, lo: 0xb5, hi: 0xb5},
	{value: 0x8103, lo: 0xb6, hi: 0xb6},
	// Block 0x78, offset 0x280
	{value: 0x0002, lo: 0x01},
	{value: 0x8103, lo: 0xa9, hi: 0xaa},
	// Block 0x79, offset 0x282
	{value: 0x0000, lo: 0x02},
	{value: 0x8103, lo: 0xbb, hi: 0xbc},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x7a, offset 0x285
	{value: 0x0000, lo: 0x07},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2d9f, lo: 0x8b, hi: 0x8b},
	{value: 0x2da9, lo: 0x8c, hi: 0x8c},
	{value: 0x8105, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	{value: 0x8133, lo: 0xa6, hi: 0xac},
	{value: 0x8133, lo: 0xb0, hi: 0xb4},
	// Block 0x7b, offset 0x28d
	{value: 0x0000, lo: 0x03},
	{value: 0x8105, lo: 0x82, hi: 0x82},
	{value: 0x8103, lo: 0x86, hi: 0x86},
	{value: 0x8133, lo: 0x9e, hi: 0x9e},
	// Block 0x7c, offset 0x291
	{value: 0x6b4d, lo: 0x06},
	{value: 0x9900, lo: 0xb0, hi: 0xb0},
	{value: 0xa000, lo: 0xb9, hi: 0xb9},
	{value: 0x9900, lo: 0xba, hi: 0xba},
	{value: 0x2dbd, lo: 0xbb, hi: 0xbb},
	{value: 0x2db3, lo: 0xbc, hi: 0xbd},
	{value: 0x2dc7, lo: 0xbe, hi: 0xbe},
	// Block 0x7d, offset 0x298
	{value: 0x0000, lo: 0x02},
	{value: 0x8105, lo: 0x82, hi: 0x82},
	{value: 0x8103, lo: 0x83, hi: 0x83},
	// Block 0x7e, offset 0x29b
	{value: 0x0000, lo: 0x05},
	{value: 0x9900, lo: 0xaf, hi: 0xaf},
	{value: 0xa000, lo: 0xb8, hi: 0xb9},
	{value: 0x2dd1, lo: 0xba, hi: 0xba},
	{value: 0x2ddb, lo: 0xbb, hi: 0xbb},
	{value: 0x8105, lo: 0xbf, hi: 0xbf},
	// Block 0x7f, offset 0x2a1
	{value: 0x0000, lo: 0x01},
	{value: 0x8103, lo: 0x80, hi: 0x80},
	// Block 0x80, offset 0x2a3
	{value: 0x0000, lo: 0x01},
	{value: 0x8105, lo: 0xbf, hi: 0xbf},
	// Block 0x81, offset 0x2a5
	{value: 0x0000, lo: 0x02},
	{value: 0x8105, lo: 0xb6, hi: 0xb6},
	{value: 0x8103, lo: 0xb7, hi: 0xb7},
	// Block 0x82, offset 0x2a8
	{value: 0x0000, lo: 0x01},
	{value: 0x8105, lo: 0xab, hi: 0xab},
	// Block 0x83, offset 0x2aa
	{value: 0x0000, lo: 0x02},
	{value: 0x8105, lo: 0xb9, hi: 0xb9},
	{value: 0x8103, lo: 0xba, hi: 0xba},
	// Block 0x84, offset 0x2ad
	{value: 0x0000, lo: 0x04},
	{value: 0x9900, lo: 0xb0, hi: 0xb0},
	{value: 0xa000, lo: 0xb5, hi: 0xb5},
	{value: 0x2de5, lo: 0xb8, hi: 0xb8},
	{value: 0x8105, lo: 0xbd, hi: 0xbe},
	// Block 0x85, offset 0x2b2
	{value: 0x0000, lo: 0x01},
	{value: 0x8103, lo: 0x83, hi: 0x83},
	// Block 0x86, offset 0x2b4
	{value: 0x0000, lo: 0x01},
	{value: 0x8105, lo: 0xa0, hi: 0xa0},
	// Block 0x87, offset 0x2b6
	{value: 0x0000, lo: 0x01},
	{value: 0x8105, lo: 0xb4, hi: 0xb4},
	// Block 0x88, offset 0x2b8
	{value: 0x0000, lo: 0x01},
	{value: 0x8105, lo: 0x87, hi: 0x87},
	// Block 0x89, offset 0x2ba
	{value: 0x0000, lo: 0x01},
	{value: 0x8105, lo: 0x99, hi: 0x99},
	// Block 0x8a, offset 0x2bc
	{value: 0x0000, lo: 0x02},
	{value: 0x8103, lo: 0x82, hi: 0x82},
	{value: 0x8105, lo: 0x84, hi: 0x85},
	// Block 0x8b, offset 0x2bf
	{value: 0x0000, lo: 0x01},
	{value: 0x8105, lo: 0x97, hi: 0x97},
	// Block 0x8c, offset 0x2c1
	{value: 0x0000, lo: 0x01},
	{value: 0x8101, lo: 0xb0, hi: 0xb4},
	// Block 0x8d, offset 0x2c3
	{value: 0x0000, lo: 0x01},
	{value: 0x8133, lo: 0xb0, hi: 0xb6},
	// Block 0x8e, offset 0x2c5
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0xb0, hi: 0xb1},
	// Block 0x8f, offset 0x2c7
	{value: 0x0000, lo: 0x01},
	{value: 0x8101, lo: 0x9e, hi: 0x9e},
	// Block 0x90, offset 0x2c9
	{value: 0x0000, lo: 0x0c},
	{value: 0x45e3, lo: 0x9e, hi: 0x9e},
	{value: 0x45ed, lo: 0x9f, hi: 0x9f},
	{value: 0x4621, lo: 0xa0, hi: 0xa0},
	{value: 0x462f, lo: 0xa1, hi: 0xa1},
	{value: 0x463d, lo: 0xa2, hi: 0xa2},
	{value: 0x464b, lo: 0xa3, hi: 0xa3},
	{value: 0x4659, lo: 0xa4, hi: 0xa4},
	{value: 0x812c, lo: 0xa5, hi: 0xa6},
	{value: 0x8101, lo: 0xa7, hi: 0xa9},
	{value: 0x8131, lo: 0xad, hi: 0xad},
	{value: 0x812c, lo: 0xae, hi: 0xb2},
	{value: 0x812e, lo: 0xbb, hi: 0xbf},
	// Block 0x91, offset 0x2d6
	{value: 0x0000, lo: 0x09},
	{value: 0x812e, lo: 0x80, hi: 0x82},
	{value: 0x8133, lo: 0x85, hi: 0x89},
	{value: 0x812e, lo: 0x8a, hi: 0x8b},
	{value: 0x8133, lo: 0xaa, hi: 0xad},
	{value: 0x45f7, lo: 0xbb, hi: 0xbb},
	{value: 0x4601, lo: 0xbc, hi: 0xbc},
	{value: 0x4667, lo: 0xbd, hi: 0xbd},
	{value: 0x4683, lo: 0xbe, hi: 0xbe},
	{value: 0x4675, lo: 0xbf, hi: 0xbf},
	// Block 0x92, offset 0x2e0
	{value: 0x0000, lo: 0x01},
	{value: 0x4691, lo: 0x80, hi: 0x80},
	// Block 0x93, offset 0x2e2
	{value: 0x0000, lo: 0x01},
	{value: 0x8133, lo: 0x82, hi: 0x84},
	// Block 0x94, offset 0x2e4
	{value: 0x0002, lo: 0x03},
	{value: 0x0043, lo: 0x80, hi: 0x99},
	{value: 0x0083, lo: 0x9a, hi: 0xb3},
	{value: 0x0043, lo: 0xb4, hi: 0xbf},
	// Block 0x95, offset 0x2e8
	{value: 0x0002, lo: 0x04},
	{value: 0x005b, lo: 0x80, hi: 0x8d},
	{value: 0x0083, lo: 0x8e, hi: 0x94},
	{value: 0x0093, lo: 0x96, hi: 0xa7},
	{value: 0x0043, lo: 0xa8, hi: 0xbf},
	// Block 0x96, offset 0x2ed
	{value: 0x0002, lo: 0x0b},
	{value: 0x0073, lo: 0x80, hi: 0x81},
	{value: 0x0083, lo: 0x82, hi: 0x9b},
	{value: 0x0043, lo: 0x9c, hi: 0x9c},
	{value: 0x0047, lo: 0x9e, hi: 0x9f},
	{value: 0x004f, lo: 0xa2, hi: 0xa2},
	{value: 0x0055, lo: 0xa5, hi: 0xa6},
	{value: 0x005d, lo: 0xa9, hi: 0xac},
	{value: 0x0067, lo: 0xae, hi: 0xb5},
	{value: 0x0083, lo: 0xb6, hi: 0xb9},
	{value: 0x008d, lo: 0xbb, hi: 0xbb},
	{value: 0x0091, lo: 0xbd, hi: 0xbf},
	// Block 0x97, offset 0x2f9
	{value: 0x0002, lo: 0x04},
	{value: 0x0097, lo: 0x80, hi: 0x83},
	{value: 0x00a1, lo: 0x85, hi: 0x8f},
	{value: 0x0043, lo: 0x90, hi: 0xa9},
	{value: 0x0083, lo: 0xaa, hi: 0xbf},
	// Block 0x98, offset 0x2fe
	{value: 0x0002, lo: 0x08},
	{value: 0x00af, lo: 0x80, hi: 0x83},
	{value: 0x0043, lo: 0x84, hi: 0x85},
	{value: 0x0049, lo: 0x87, hi: 0x8a},
	{value: 0x0055, lo: 0x8d, hi: 0x94},
	{value: 0x0067, lo: 0x96, hi: 0x9c},
	{value: 0x0083, lo: 0x9e, hi: 0xb7},
	{value: 0x0043, lo: 0xb8, hi: 0xb9},
	{value: 0x0049, lo: 0xbb, hi: 0xbe},
	// Block 0x99, offset 0x307
	{value: 0x0002, lo: 0x05},
	{value: 0x0053, lo: 0x80, hi: 0x84},
	{value: 0x005f, lo: 0x86, hi: 0x86},
	{value: 0x0067, lo: 0x8a, hi: 0x90},
	{value: 0x0083, lo: 0x92, hi: 0xab},
	{value: 0x0043, lo: 0xac, hi: 0xbf},
	// Block 0x9a, offset 0x30d
	{value: 0x0002, lo: 0x04},
	{value: 0x006b, lo: 0x80, hi: 0x85},
	{value: 0x0083, lo: 0x86, hi: 0x9f},
	{value: 0x0043, lo: 0xa0, hi: 0xb9},
	{value: 0x0083, lo: 0xba, hi: 0xbf},
	// Block 0x9b, offset 0x312
	{value: 0x0002, lo: 0x03},
	{value: 0x008f, lo: 0x80, hi: 0x93},
	{value: 0x0043, lo: 0x94, hi: 0xad},
	{value: 0x0083, lo: 0xae, hi: 0xbf},
	// Block 0x9c, offset 0x316
	{value: 0x0002, lo: 0x04},
	{value: 0x00a7, lo: 0x80, hi: 0x87},
	{value: 0x0043, lo: 0x88, hi: 0xa1},
	{value: 0x0083, lo: 0xa2, hi: 0xbb},
	{value: 0x0043, lo: 0xbc, hi: 0xbf},
	// Block 0x9d, offset 0x31b
	{value: 0x0002, lo: 0x03},
	{value: 0x004b, lo: 0x80, hi: 0x95},
	{value: 0x0083, lo: 0x96, hi: 0xaf},
	{value: 0x0043, lo: 0xb0, hi: 0xbf},
	// Block 0x9e, offset 0x31f
	{value: 0x0003, lo: 0x0f},
	{value: 0x01bb, lo: 0x80, hi: 0x80},
	{value: 0x0462, lo: 0x81, hi: 0x81},
	{value: 0x01be, lo: 0x82, hi: 0x9a},
	{value: 0x045e, lo: 0x9b, hi: 0x9b},
	{value: 0x01ca, lo: 0x9c, hi: 0x9c},
	{value: 0x01d3, lo: 0x9d, hi: 0x9d},
	{value: 0x01d9, lo: 0x9e, hi: 0x9e},
	{value: 0x01fd, lo: 0x9f, hi: 0x9f},
	{value: 0x01ee, lo: 0xa0, hi: 0xa0},
	{value: 0x01eb, lo: 0xa1, hi: 0xa1},
	{value: 0x0176, lo: 0xa2, hi: 0xb2},
	{value: 0x018b, lo: 0xb3, hi: 0xb3},
	{value: 0x01a9, lo: 0xb4, hi: 0xba},
	{value: 0x0462, lo: 0xbb, hi: 0xbb},
	{value: 0x01be, lo: 0xbc, hi: 0xbf},
	// Block 0x9f, offset 0x32f
	{value: 0x0003, lo: 0x0d},
	{value: 0x01ca, lo: 0x80, hi: 0x94},
	{value: 0x045e, lo: 0x95, hi: 0x95},
	{value: 0x01ca, lo: 0x96, hi: 0x96},
	{value: 0x01d3, lo: 0x97, hi: 0x97},
	{value: 0x01d9, lo: 0x98, hi: 0x98},
	{value: 0x01fd, lo: 0x99, hi: 0x99},
	{value: 0x01ee, lo: 0x9a, hi: 0x9a},
	{value: 0x01eb, lo: 0x9b, hi: 0x9b},
	{value: 0x0176, lo: 0x9c, hi: 0xac},
	{value: 0x018b, lo: 0xad, hi: 0xad},
	{value: 0x01a9, lo: 0xae, hi: 0xb4},
	{value: 0x0462, lo: 0xb5, hi: 0xb5},
	{value: 0x01be, lo: 0xb6, hi: 0xbf},
	// Block 0xa0, offset 0x33d
	{value: 0x0003, lo: 0x0d},
	{value: 0x01dc, lo: 0x80, hi: 0x8e},
	{value: 0x045e, lo: 0x8f, hi: 0x8f},
	{value: 0x01ca, lo: 0x90, hi: 0x90},
	{value: 0x01d3, lo: 0x91, hi: 0x91},
	{value: 0x01d9, lo: 0x92, hi: 0x92},
	{value: 0x01fd, lo: 0x93, hi: 0x93},
	{value: 0x01ee, lo: 0x94, hi: 0x94},
	{value: 0x01eb, lo: 0x95, hi: 0x95},
	{value: 0x0176, lo: 0x96, hi: 0xa6},
	{value: 0x018b, lo: 0xa7, hi: 0xa7},
	{value: 0x01a9, lo: 0xa8, hi: 0xae},
	{value: 0x0462, lo: 0xaf, hi: 0xaf},
	{value: 0x01be, lo: 0xb0, hi: 0xbf},
	// Block 0xa1, offset 0x34b
	{value: 0x0003, lo: 0x0d},
	{value: 0x01ee, lo: 0x80, hi: 0x88},
	{value: 0x045e, lo: 0x89, hi: 0x89},
	{value: 0x01ca, lo: 0x8a, hi: 0x8a},
	{value: 0x01d3, lo: 0x8b, hi: 0x8b},
	{value: 0x01d9, lo: 0x8c, hi: 0x8c},
	{value: 0x01fd, lo: 0x8d, hi: 0x8d},
	{value: 0x01ee, lo: 0x8e, hi: 0x8e},
	{value: 0x01eb, lo: 0x8f, hi: 0x8f},
	{value: 0x0176, lo: 0x90, hi: 0xa0},
	{value: 0x018b, lo: 0xa1, hi: 0xa1},
	{value: 0x01a9, lo: 0xa2, hi: 0xa8},
	{value: 0x0462, lo: 0xa9, hi: 0xa9},
	{value: 0x01be, lo: 0xaa, hi: 0xbf},
	// Block 0xa2, offset 0x359
	{value: 0x0000, lo: 0x05},
	{value: 0x8133, lo: 0x80, hi: 0x86},
	{value: 0x8133, lo: 0x88, hi: 0x98},
	{value: 0x8133, lo: 0x9b, hi: 0xa1},
	{value: 0x8133, lo: 0xa3, hi: 0xa4},
	{value: 0x8133, lo: 0xa6, hi: 0xaa},
	// Block 0xa3, offset 0x35f
	{value: 0x0000, lo: 0x01},
	{value: 0x8133, lo: 0xac, hi: 0xaf},
	// Block 0xa4, offset 0x361
	{value: 0x0000, lo: 0x01},
	{value: 0x812e, lo: 0x90, hi: 0x96},
	// Block 0xa5, offset 0x363
	{value: 0x0000, lo: 0x02},
	{value: 0x8133, lo: 0x84, hi: 0x89},
	{value: 0x8103, lo: 0x8a, hi: 0x8a},
	// Block 0xa6, offset 0x366
	{value: 0x0002, lo: 0x0a},
	{value: 0x0063, lo: 0x80, hi: 0x89},
	{value: 0x1954, lo: 0x8a, hi: 0x8a},
	{value: 0x1987, lo: 0x8b, hi: 0x8b},
	{value: 0x19a2, lo: 0x8c, hi: 0x8c},
	{value: 0x19a8, lo: 0x8d, hi: 0x8d},
	{value: 0x1bc6, lo: 0x8e, hi: 0x8e},
	{value: 0x19b4, lo: 0x8f, hi: 0x8f},
	{value: 0x197e, lo: 0xaa, hi: 0xaa},
	{value: 0x1981, lo: 0xab, hi: 0xab},
	{value: 0x1984, lo: 0xac, hi: 0xac},
	// Block 0xa7, offset 0x371
	{value: 0x0000, lo: 0x01},
	{value: 0x1942, lo: 0x90, hi: 0x90},
	// Block 0xa8, offset 0x373
	{value: 0x0028, lo: 0x09},
	{value: 0x286f, lo: 0x80, hi: 0x80},
	{value: 0x2833, lo: 0x81, hi: 0x81},
	{value: 0x283d, lo: 0x82, hi: 0x82},
	{value: 0x2851, lo: 0x83, hi: 0x84},
	{value: 0x285b, lo: 0x85, hi: 0x86},
	{value: 0x2847, lo: 0x87, hi: 0x87},
	{value: 0x2865, lo: 0x88, hi: 0x88},
	{value: 0x0b72, lo: 0x90, hi: 0x90},
	{value: 0x08ea, lo: 0x91, hi: 0x91},
	// Block 0xa9, offset 0x37d
	{value: 0x0002, lo: 0x01},
	{value: 0x0021, lo: 0xb0, hi: 0xb9},
}

// recompMap: 7528 bytes (entries only)
var recompMap map[uint32]rune
var recompMapOnce sync.Once

const recompMapPacked = "" +
	"\x00A\x03\x00\x00\x00\x00\xc0" + // 0x00410300: 0x000000C0
	"\x00A\x03\x01\x00\x00\x00\xc1" + // 0x00410301: 0x000000C1
	"\x00A\x03\x02\x00\x00\x00\xc2" + // 0x00410302: 0x000000C2
	"\x00A\x03\x03\x00\x00\x00\xc3" + // 0x00410303: 0x000000C3
	"\x00A\x03\b\x00\x00\x00\xc4" + // 0x00410308: 0x000000C4
	"\x00A\x03\n\x00\x00\x00\xc5" + // 0x0041030A: 0x000000C5
	"\x00C\x03'\x00\x00\x00\xc7" + // 0x00430327: 0x000000C7
	"\x00E\x03\x00\x00\x00\x00\xc8" + // 0x00450300: 0x000000C8
	"\x00E\x03\x01\x00\x00\x00\xc9" + // 0x00450301: 0x000000C9
	"\x00E\x03\x02\x00\x00\x00\xca" + // 0x00450302: 0x000000CA
	"\x00E\x03\b\x00\x00\x00\xcb" + // 0x00450308: 0x000000CB
	"\x00I\x03\x00\x00\x00\x00\xcc" + // 0x00490300: 0x000000CC
	"\x00I\x03\x01\x00\x00\x00\xcd" + // 0x00490301: 0x000000CD
	"\x00I\x03\x02\x00\x00\x00\xce" + // 0x00490302: 0x000000CE
	"\x00I\x03\b\x00\x00\x00\xcf" + // 0x00490308: 0x000000CF
	"\x00N\x03\x03\x00\x00\x00\xd1" + // 0x004E0303: 0x000000D1
	"\x00O\x03\x00\x00\x00\x00\xd2" + // 0x004F0300: 0x000000D2
	"\x00O\x03\x01\x00\x00\x00\xd3" + // 0x004F0301: 0x000000D3
	"\x00O\x03\x02\x00\x00\x00\xd4" + // 0x004F0302: 0x000000D4
	"\x00O\x03\x03\x00\x00\x00\xd5" + // 0x004F0303: 0x000000D5
	"\x00O\x03\b\x00\x00\x00\xd6" + // 0x004F0308: 0x000000D6
	"\x00U\x03\x00\x00\x00\x00\xd9" + // 0x00550300: 0x000000D9
	"\x00U\x03\x01\x00\x00\x00\xda" + // 0x00550301: 0x000000DA
	"\x00U\x03\x02\x00\x00\x00\xdb" + // 0x00550302: 0x000000DB
	"\x00U\x03\b\x00\x00\x00\xdc" + // 0x00550308: 0x000000DC
	"\x00Y\x03\x01\x00\x00\x00\xdd" + // 0x00590301: 0x000000DD
	"\x00a\x03\x00\x00\x00\x00\xe0" + // 0x00610300: 0x000000E0
	"\x00a\x03\x01\x00\x00\x00\xe1" + // 0x00610301: 0x000000E1
	"\x00a\x03\x02\x00\x00\x00\xe2" + // 0x00610302: 0x000000E2
	"\x00a\x03\x03\x00\x00\x00\xe3" + // 0x00610303: 0x000000E3
	"\x00a\x03\b\x00\x00\x00\xe4" + // 0x00610308: 0x000000E4
	"\x00a\x03\n\x00\x00\x00\xe5" + // 0x0061030A: 0x000000E5
	"\x00c\x03'\x00\x00\x00\xe7" + // 0x00630327: 0x000000E7
	"\x00e\x03\x00\x00\x00\x00\xe8" + // 0x00650300: 0x000000E8
	"\x00e\x03\x01\x00\x00\x00\xe9" + // 0x00650301: 0x000000E9
	"\x00e\x03\x02\x00\x00\x00\xea" + // 0x00650302: 0x000000EA
	"\x00e\x03\b\x00\x00\x00\xeb" + // 0x00650308: 0x000000EB
	"\x00i\x03\x00\x00\x00\x00\xec" + // 0x00690300: 0x000000EC
	"\x00i\x03\x01\x00\x00\x00\xed" + // 0x00690301: 0x000000ED
	"\x00i\x03\x02\x00\x00\x00\xee" + // 0x00690302: 0x000000EE
	"\x00i\x03\b\x00\x00\x00\xef" + // 0x00690308: 0x000000EF
	"\x00n\x03\x03\x00\x00\x00\xf1" + // 0x006E0303: 0x000000F1
	"\x00o\x03\x00\x00\x00\x00\xf2" + // 0x006F0300: 0x000000F2
	"\x00o\x03\x01\x00\x00\x00\xf3" + // 0x006F0301: 0x000000F3
	"\x00o\x03\x02\x00\x00\x00\xf4" + // 0x006F0302: 0x000000F4
	"\x00o\x03\x03\x00\x00\x00\xf5" + // 0x006F0303: 0x000000F5
	"\x00o\x03\b\x00\x00\x00\xf6" + // 0x006F0308: 0x000000F6
	"\x00u\x03\x00\x00\x00\x00\xf9" + // 0x00750300: 0x000000F9
	"\x00u\x03\x01\x00\x00\x00\xfa" + // 0x00750301: 0x000000FA
	"\x00u\x03\x02\x00\x00\x00\xfb" + // 0x00750302: 0x000000FB
	"\x00u\x03\b\x00\x00\x00\xfc" + // 0x00750308: 0x000000FC
	"\x00y\x03\x01\x00\x00\x00\xfd" + // 0x00790301: 0x000000FD
	"\x00y\x03\b\x00\x00\x00\xff" + // 0x00790308: 0x000000FF
	"\x00A\x03\x04\x00\x00\x01\x00" + // 0x00410304: 0x00000100
	"\x00a\x03\x04\x00\x00\x01\x01" + // 0x00610304: 0x00000101
	"\x00A\x03\x06\x00\x00\x01\x02" + // 0x00410306: 0x00000102
	"\x00a\x03\x06\x00\x00\x01\x03" + // 0x00610306: 0x00000103
	"\x00A\x03(\x00\x00\x01\x04" + // 0x00410328: 0x00000104
	"\x00a\x03(\x00\x00\x01\x05" + // 0x00610328: 0x00000105
	"\x00C\x03\x01\x00\x00\x01\x06" + // 0x00430301: 0x00000106
	"\x00c\x03\x01\x00\x00\x01\a" + // 0x00630301: 0x00000107
	"\x00C\x03\x02\x00\x00\x01\b" + // 0x00430302: 0x00000108
	"\x00c\x03\x02\x00\x00\x01\t" + // 0x00630302: 0x00000109
	"\x00C\x03\a\x00\x00\x01\n" + // 0x00430307: 0x0000010A
	"\x00c\x03\a\x00\x00\x01\v" + // 0x00630307: 0x0000010B
	"\x00C\x03\f\x00\x00\x01\f" + // 0x0043030C: 0x0000010C
	"\x00c\x03\f\x00\x00\x01\r" + // 0x0063030C: 0x0000010D
	"\x00D\x03\f\x00\x00\x01\x0e" + // 0x0044030C: 0x0000010E
	"\x00d\x03\f\x00\x00\x01\x0f" + // 0x0064030C: 0x0000010F
	"\x00E\x03\x04\x00\x00\x01\x12" + // 0x00450304: 0x00000112
	"\x00e\x03\x04\x00\x00\x01\x13" + // 0x00650304: 0x00000113
	"\x00E\x03\x06\x00\x00\x01\x14" + // 0x00450306: 0x00000114
	"\x00e\x03\x06\x00\x00\x01\x15" + // 0x00650306: 0x00000115
	"\x00E\x03\a\x00\x00\x01\x16" + // 0x00450307: 0x00000116
	"\x00e\x03\a\x00\x00\x01\x17" + // 0x00650307: 0x00000117
	"\x00E\x03(\x00\x00\x01\x18" + // 0x00450328: 0x00000118
	"\x00e\x03(\x00\x00\x01\x19" + // 0x00650328: 0x00000119
	"\x00E\x03\f\x00\x00\x01\x1a" + // 0x0045030C: 0x0000011A
	"\x00e\x03\f\x00\x00\x01\x1b" + // 0x0065030C: 0x0000011B
	"\x00G\x03\x02\x00\x00\x01\x1c" + // 0x00470302: 0x0000011C
	"\x00g\x03\x02\x00\x00\x01\x1d" + // 0x00670302: 0x0000011D
	"\x00G\x03\x06\x00\x00\x01\x1e" + // 0x00470306: 0x0000011E
	"\x00g\x03\x06\x00\x00\x01\x1f" + // 0x00670306: 0x0000011F
	"\x00G\x03\a\x00\x00\x01 " + // 0x00470307: 0x00000120
	"\x00g\x03\a\x00\x00\x01!" + // 0x00670307: 0x00000121
	"\x00G\x03'\x00\x00\x01\"" + // 0x00470327: 0x00000122
	"\x00g\x03'\x00\x00\x01#" + // 0x00670327: 0x00000123
	"\x00H\x03\x02\x00\x00\x01$" + // 0x00480302: 0x00000124
	"\x00h\x03\x02\x00\x00\x01%" + // 0x00680302: 0x00000125
	"\x00I\x03\x03\x00\x00\x01(" + // 0x00490303: 0x00000128
	"\x00i\x03\x03\x00\x00\x01)" + // 0x00690303: 0x00000129
	"\x00I\x03\x04\x00\x00\x01*" + // 0x00490304: 0x0000012A
	"\x00i\x03\x04\x00\x00\x01+" + // 0x00690304: 0x0000012B
	"\x00I\x03\x06\x00\x00\x01," + // 0x00490306: 0x0000012C
	"\x00i\x03\x06\x00\x00\x01-" + // 0x00690306: 0x0000012D
	"\x00I\x03(\x00\x00\x01." + // 0x00490328: 0x0000012E
	"\x00i\x03(\x00\x00\x01/" + // 0x00690328: 0x0000012F
	"\x00I\x03\a\x00\x00\x010" + // 0x00490307: 0x00000130
	"\x00J\x03\x02\x00\x00\x014" + // 0x004A0302: 0x00000134
	"\x00j\x03\x02\x00\x00\x015" + // 0x006A0302: 0x00000135
	"\x00K\x03'\x00\x00\x016" + // 0x004B0327: 0x00000136
	"\x00k\x03'\x00\x00\x017" + // 0x006B0327: 0x00000137
	"\x00L\x03\x01\x00\x00\x019" + // 0x004C0301: 0x00000139
	"\x00l\x03\x01\x00\x00\x01:" + // 0x006C0301: 0x0000013A
	"\x00L\x03'\x00\x00\x01;" + // 0x004C0327: 0x0000013B
	"\x00l\x03'\x00\x00\x01<" + // 0x006C0327: 0x0000013C
	"\x00L\x03\f\x00\x00\x01=" + // 0x004C030C: 0x0000013D
	"\x00l\x03\f\x00\x00\x01>" + // 0x006C030C: 0x0000013E
	"\x00N\x03\x01\x00\x00\x01C" + // 0x004E0301: 0x00000143
	"\x00n\x03\x01\x00\x00\x01D" + // 0x006E0301: 0x00000144
	"\x00N\x03'\x00\x00\x01E" + // 0x004E0327: 0x00000145
	"\x00n\x03'\x00\x00\x01F" + // 0x006E0327: 0x00000146
	"\x00N\x03\f\x00\x00\x01G" + // 0x004E030C: 0x00000147
	"\x00n\x03\f\x00\x00\x01H" + // 0x006E030C: 0x00000148
	"\x00O\x03\x04\x00\x00\x01L" + // 0x004F0304: 0x0000014C
	"\x00o\x03\x04\x00\x00\x01M" + // 0x006F0304: 0x0000014D
	"\x00O\x03\x06\x00\x00\x01N" + // 0x004F0306: 0x0000014E
	"\x00o\x03\x06\x00\x00\x01O" + // 0x006F0306: 0x0000014F
	"\x00O\x03\v\x00\x00\x01P" + // 0x004F030B: 0x00000150
	"\x00o\x03\v\x00\x00\x01Q" + // 0x006F030B: 0x00000151
	"\x00R\x03\x01\x00\x00\x01T" + // 0x00520301: 0x00000154
	"\x00r\x03\x01\x00\x00\x01U" + // 0x00720301: 0x00000155
	"\x00R\x03'\x00\x00\x01V" + // 0x00520327: 0x00000156
	"\x00r\x03'\x00\x00\x01W" + // 0x00720327: 0x00000157
	"\x00R\x03\f\x00\x00\x01X" + // 0x0052030C: 0x00000158
	"\x00r\x03\f\x00\x00\x01Y" + // 0x0072030C: 0x00000159
	"\x00S\x03\x01\x00\x00\x01Z" + // 0x00530301: 0x0000015A
	"\x00s\x03\x01\x00\x00\x01[" + // 0x00730301: 0x0000015B
	"\x00S\x03\x02\x00\x00\x01\\" + // 0x00530302: 0x0000015C
	"\x00s\x03\x02\x00\x00\x01]" + // 0x00730302: 0x0000015D
	"\x00S\x03'\x00\x00\x01^" + // 0x00530327: 0x0000015E
	"\x00s\x03'\x00\x00\x01_" + // 0x00730327: 0x0000015F
	"\x00S\x03\f\x00\x00\x01`" + // 0x0053030C: 0x00000160
	"\x00s\x03\f\x00\x00\x01a" + // 0x0073030C: 0x00000161
	"\x00T\x03'\x00\x00\x01b" + // 0x00540327: 0x00000162
	"\x00t\x03'\x00\x00\x01c" + // 0x00740327: 0x00000163
	"\x00T\x03\f\x00\x00\x01d" + // 0x0054030C: 0x00000164
	"\x00t\x03\f\x00\x00\x01e" + // 0x0074030C: 0x00000165
	"\x00U\x03\x03\x00\x00\x01h" + // 0x00550303: 0x00000168
	"\x00u\x03\x03\x00\x00\x01i" + // 0x00750303: 0x00000169
	"\x00U\x03\x04\x00\x00\x01j" + // 0x00550304: 0x0000016A
	"\x00u\x03\x04\x00\x00\x01k" + // 0x00750304: 0x0000016B
	"\x00U\x03\x06\x00\x00\x01l" + // 0x00550306: 0x0000016C
	"\x00u\x03\x06\x00\x00\x01m" + // 0x00750306: 0x0000016D
	"\x00U\x03\n\x00\x00\x01n" + // 0x0055030A: 0x0000016E
	"\x00u\x03\n\x00\x00\x01o" + // 0x0075030A: 0x0000016F
	"\x00U\x03\v\x00\x00\x01p" + // 0x0055030B: 0x00000170
	"\x00u\x03\v\x00\x00\x01q" + // 0x0075030B: 0x00000171
	"\x00U\x03(\x00\x00\x01r" + // 0x00550328: 0x00000172
	"\x00u\x03(\x00\x00\x01s" + // 0x00750328: 0x00000173
	"\x00W\x03\x02\x00\x00\x01t" + // 0x00570302: 0x00000174
	"\x00w\x03\x02\x00\x00\x01u" + // 0x00770302: 0x00000175
	"\x00Y\x03\x02\x00\x00\x01v" + // 0x00590302: 0x00000176
	"\x00y\x03\x02\x00\x00\x01w" + // 0x00790302: 0x00000177
	"\x00Y\x03\b\x00\x00\x01x" + // 0x00590308: 0x00000178
	"\x00Z\x03\x01\x00\x00\x01y" + // 0x005A0301: 0x00000179
	"\x00z\x03\x01\x00\x00\x01z" + // 0x007A0301: 0x0000017A
	"\x00Z\x03\a\x00\x00\x01{" + // 0x005A0307: 0x0000017B
	"\x00z\x03\a\x00\x00\x01|" + // 0x007A0307: 0x0000017C
	"\x00Z\x03\f\x00\x00\x01}" + // 0x005A030C: 0x0000017D
	"\x00z\x03\f\x00\x00\x01~" + // 0x007A030C: 0x0000017E
	"\x00O\x03\x1b\x00\x00\x01\xa0" + // 0x004F031B: 0x000001A0
	"\x00o\x03\x1b\x00\x00\x01\xa1" + // 0x006F031B: 0x000001A1
	"\x00U\x03\x1b\x00\x00\x01\xaf" + // 0x0055031B: 0x000001AF
	"\x00u\x03\x1b\x00\x00\x01\xb0" + // 0x0075031B: 0x000001B0
	"\x00A\x03\f\x00\x00\x01\xcd" + // 0x0041030C: 0x000001CD
	"\x00a\x03\f\x00\x00\x01\xce" + // 0x0061030C: 0x000001CE
	"\x00I\x03\f\x00\x00\x01\xcf" + // 0x0049030C: 0x000001CF
	"\x00i\x03\f\x00\x00\x01\xd0" + // 0x0069030C: 0x000001D0
	"\x00O\x03\f\x00\x00\x01\xd1" + // 0x004F030C: 0x000001D1
	"\x00o\x03\f\x00\x00\x01\xd2" + // 0x006F030C: 0x000001D2
	"\x00U\x03\f\x00\x00\x01\xd3" + // 0x0055030C: 0x000001D3
	"\x00u\x03\f\x00\x00\x01\xd4" + // 0x0075030C: 0x000001D4
	"\x00\xdc\x03\x04\x00\x00\x01\xd5" + // 0x00DC0304: 0x000001D5
	"\x00\xfc\x03\x04\x00\x00\x01\xd6" + // 0x00FC0304: 0x000001D6
	"\x00\xdc\x03\x01\x00\x00\x01\xd7" + // 0x00DC0301: 0x000001D7
	"\x00\xfc\x03\x01\x00\x00\x01\xd8" + // 0x00FC0301: 0x000001D8
	"\x00\xdc\x03\f\x00\x00\x01\xd9" + // 0x00DC030C: 0x000001D9
	"\x00\xfc\x03\f\x00\x00\x01\xda" + // 0x00FC030C: 0x000001DA
	"\x00\xdc\x03\x00\x00\x00\x01\xdb" + // 0x00DC0300: 0x000001DB
	"\x00\xfc\x03\x00\x00\x00\x01\xdc" + // 0x00FC0300: 0x000001DC
	"\x00\xc4\x03\x04\x00\x00\x01\xde" + // 0x00C40304: 0x000001DE
	"\x00\xe4\x03\x04\x00\x00\x01\xdf" + // 0x00E40304: 0x000001DF
	"\x02&\x03\x04\x00\x00\x01\xe0" + // 0x02260304: 0x000001E0
	"\x02'\x03\x04\x00\x00\x01\xe1" + // 0x02270304: 0x000001E1
	"\x00\xc6\x03\x04\x00\x00\x01\xe2" + // 0x00C60304: 0x000001E2
	"\x00\xe6\x03\x04\x00\x00\x01\xe3" + // 0x00E60304: 0x000001E3
	"\x00G\x03\f\x00\x00\x01\xe6" + // 0x0047030C: 0x000001E6
	"\x00g\x03\f\x00\x00\x01\xe7" + // 0x0067030C: 0x000001E7
	"\x00K\x03\f\x00\x00\x01\xe8" + // 0x004B030C: 0x000001E8
	"\x00k\x03\f\x00\x00\x01\xe9" + // 0x006B030C: 0x000001E9
	"\x00O\x03(\x00\x00\x01\xea" + // 0x004F0328: 0x000001EA
	"\x00o\x03(\x00\x00\x01\xeb" + // 0x006F0328: 0x000001EB
	"\x01\xea\x03\x04\x00\x00\x01\xec" + // 0x01EA0304: 0x000001EC
	"\x01\xeb\x03\x04\x00\x00\x01\xed" + // 0x01EB0304: 0x000001ED
	"\x01\xb7\x03\f\x00\x00\x01\xee" + // 0x01B7030C: 0x000001EE
	"\x02\x92\x03\f\x00\x00\x01\xef" + // 0x0292030C: 0x000001EF
	"\x00j\x03\f\x00\x00\x01\xf0" + // 0x006A030C: 0x000001F0
	"\x00G\x03\x01\x00\x00\x01\xf4" + // 0x00470301: 0x000001F4
	"\x00g\x03\x01\x00\x00\x01\xf5" + // 0x00670301: 0x000001F5
	"\x00N\x03\x00\x00\x00\x01\xf8" + // 0x004E0300: 0x000001F8
	"\x00n\x03\x00\x00\x00\x01\xf9" + // 0x006E0300: 0x000001F9
	"\x00\xc5\x03\x01\x00\x00\x01\xfa" + // 0x00C50301: 0x000001FA
	"\x00\xe5\x03\x01\x00\x00\x01\xfb" + // 0x00E50301: 0x000001FB
	"\x00\xc6\x03\x01\x00\x00\x01\xfc" + // 0x00C60301: 0x000001FC
	"\x00\xe6\x03\x01\x00\x00\x01\xfd" + // 0x00E60301: 0x000001FD
	"\x00\xd8\x03\x01\x00\x00\x01\xfe" + // 0x00D80301: 0x000001FE
	"\x00\xf8\x03\x01\x00\x00\x01\xff" + // 0x00F80301: 0x000001FF
	"\x00A\x03\x0f\x00\x00\x02\x00" + // 0x0041030F: 0x00000200
	"\x00a\x03\x0f\x00\x00\x02\x01" + // 0x0061030F: 0x00000201
	"\x00A\x03\x11\x00\x00\x02\x02" + // 0x00410311: 0x00000202
	"\x00a\x03\x11\x00\x00\x02\x03" + // 0x00610311: 0x00000203
	"\x00E\x03\x0f\x00\x00\x02\x04" + // 0x0045030F: 0x00000204
	"\x00e\x03\x0f\x00\x00\x02\x05" + // 0x0065030F: 0x00000205
	"\x00E\x03\x11\x00\x00\x02\x06" + // 0x00450311: 0x00000206
	"\x00e\x03\x11\x00\x00\x02\a" + // 0x00650311: 0x00000207
	"\x00I\x03\x0f\x00\x00\x02\b" + // 0x0049030F: 0x00000208
	"\x00i\x03\x0f\x00\x00\x02\t" + // 0x0069030F: 0x00000209
	"\x00I\x03\x11\x00\x00\x02\n" + // 0x00490311: 0x0000020A
	"\x00i\x03\x11\x00\x00\x02\v" + // 0x00690311: 0x0000020B
	"\x00O\x03\x0f\x00\x00\x02\f" + // 0x004F030F: 0x0000020C
	"\x00o\x03\x0f\x00\x00\x02\r" + // 0x006F030F: 0x0000020D
	"\x00O\x03\x11\x00\x00\x02\x0e" + // 0x004F0311: 0x0000020E
	"\x00o\x03\x11\x00\x00\x02\x0f" + // 0x006F0311: 0x0000020F
	"\x00R\x03\x0f\x00\x00\x02\x10" + // 0x0052030F: 0x00000210
	"\x00r\x03\x0f\x00\x00\x02\x11" + // 0x0072030F: 0x00000211
	"\x00R\x03\x11\x00\x00\x02\x12" + // 0x00520311: 0x00000212
	"\x00r\x03\x11\x00\x00\x02\x13" + // 0x00720311: 0x00000213
	"\x00U\x03\x0f\x00\x00\x02\x14" + // 0x0055030F: 0x00000214
	"\x00u\x03\x0f\x00\x00\x02\x15" + // 0x0075030F: 0x00000215
	"\x00U\x03\x11\x00\x00\x02\x16" + // 0x00550311: 0x00000216
	"\x00u\x03\x11\x00\x00\x02\x17" + // 0x00750311: 0x00000217
	"\x00S\x03&\x00\x00\x02\x18" + // 0x00530326: 0x00000218
	"\x00s\x03&\x00\x00\x02\x19" + // 0x00730326: 0x00000219
	"\x00T\x03&\x00\x00\x02\x1a" + // 0x00540326: 0x0000021A
	"\x00t\x03&\x00\x00\x02\x1b" + // 0x00740326: 0x0000021B
	"\x00H\x03\f\x00\x00\x02\x1e" + // 0x0048030C: 0x0000021E
	"\x00h\x03\f\x00\x00\x02\x1f" + // 0x0068030C: 0x0000021F
	"\x00A\x03\a\x00\x00\x02&" + // 0x00410307: 0x00000226
	"\x00a\x03\a\x00\x00\x02'" + // 0x00610307: 0x00000227
	"\x00E\x03'\x00\x00\x02(" + // 0x00450327: 0x00000228
	"\x00e\x03'\x00\x00\x02)" + // 0x00650327: 0x00000229
	"\x00\xd6\x03\x04\x00\x00\x02*" + // 0x00D60304: 0x0000022A
	"\x00\xf6\x03\x04\x00\x00\x02+" + // 0x00F60304: 0x0000022B
	"\x00\xd5\x03\x04\x00\x00\x02," + // 0x00D50304: 0x0000022C
	"\x00\xf5\x03\x04\x00\x00\x02-" + // 0x00F50304: 0x0000022D
	"\x00O\x03\a\x00\x00\x02." + // 0x004F0307: 0x0000022E
	"\x00o\x03\a\x00\x00\x02/" + // 0x006F0307: 0x0000022F
	"\x02.\x03\x04\x00\x00\x020" + // 0x022E0304: 0x00000230
	"\x02/\x03\x04\x00\x00\x021" + // 0x022F0304: 0x00000231
	"\x00Y\x03\x04\x00\x00\x022" + // 0x00590304: 0x00000232
	"\x00y\x03\x04\x00\x00\x023" + // 0x00790304: 0x00000233
	"\x00\xa8\x03\x01\x00\x00\x03\x85" + // 0x00A80301: 0x00000385
	"\x03\x91\x03\x01\x00\x00\x03\x86" + // 0x03910301: 0x00000386
	"\x03\x95\x03\x01\x00\x00\x03\x88" + // 0x03950301: 0x00000388
	"\x03\x97\x03\x01\x00\x00\x03\x89" + // 0x03970301: 0x00000389
	"\x03\x99\x03\x01\x00\x00\x03\x8a" + // 0x03990301: 0x0000038A
	"\x03\x9f\x03\x01\x00\x00\x03\x8c" + // 0x039F0301: 0x0000038C
	"\x03\xa5\x03\x01\x00\x00\x03\x8e" + // 0x03A50301: 0x0000038E
	"\x03\xa9\x03\x01\x00\x00\x03\x8f" + // 0x03A90301: 0x0000038F
	"\x03\xca\x03\x01\x00\x00\x03\x90" + // 0x03CA0301: 0x00000390
	"\x03\x99\x03\b\x00\x00\x03\xaa" + // 0x03990308: 0x000003AA
	"\x03\xa5\x03\b\x00\x00\x03\xab" + // 0x03A50308: 0x000003AB
	"\x03\xb1\x03\x01\x00\x00\x03\xac" + // 0x03B10301: 0x000003AC
	"\x03\xb5\x03\x01\x00\x00\x03\xad" + // 0x03B50301: 0x000003AD
	"\x03\xb7\x03\x01\x00\x00\x03\xae" + // 0x03B70301: 0x000003AE
	"\x03\xb9\x03\x01\x00\x00\x03\xaf" + // 0x03B90301: 0x000003AF
	"\x03\xcb\x03\x01\x00\x00\x03\xb0" + // 0x03CB0301: 0x000003B0
	"\x03\xb9\x03\b\x00\x00\x03\xca" + // 0x03B90308: 0x000003CA
	"\x03\xc5\x03\b\x00\x00\x03\xcb" + // 0x03C50308: 0x000003CB
	"\x03\xbf\x03\x01\x00\x00\x03\xcc" + // 0x03BF0301: 0x000003CC
	"\x03\xc5\x03\x01\x00\x00\x03\xcd" + // 0x03C50301: 0x000003CD
	"\x03\xc9\x03\x01\x00\x00\x03\xce" + // 0x03C90301: 0x000003CE
	"\x03\xd2\x03\x01\x00\x00\x03\xd3" + // 0x03D20301: 0x000003D3
	"\x03\xd2\x03\b\x00\x00\x03\xd4" + // 0x03D20308: 0x000003D4
	"\x04\x15\x03\x00\x00\x00\x04\x00" + // 0x04150300: 0x00000400
	"\x04\x15\x03\b\x00\x00\x04\x01" + // 0x04150308: 0x00000401
	"\x04\x13\x03\x01\x00\x00\x04\x03" + // 0x04130301: 0x00000403
	"\x04\x06\x03\b\x00\x00\x04\a" + // 0x04060308: 0x00000407
	"\x04\x1a\x03\x01\x00\x00\x04\f" + // 0x041A0301: 0x0000040C
	"\x04\x18\x03\x00\x00\x00\x04\r" + // 0x04180300: 0x0000040D
	"\x04#\x03\x06\x00\x00\x04\x0e" + // 0x04230306: 0x0000040E
	"\x04\x18\x03\x06\x00\x00\x04\x19" + // 0x04180306: 0x00000419
	"\x048\x03\x06\x00\x00\x049" + // 0x04380306: 0x00000439
	"\x045\x03\x00\x00\x00\x04P" + // 0x04350300: 0x00000450
	"\x045\x03\b\x00\x00\x04Q" + // 0x04350308: 0x00000451
	"\x043\x03\x01\x00\x00\x04S" + // 0x04330301: 0x00000453
	"\x04V\x03\b\x00\x00\x04W" + // 0x04560308: 0x00000457
	"\x04:\x03\x01\x00\x00\x04\\" + // 0x043A0301: 0x0000045C
	"\x048\x03\x00\x00\x00\x04]" + // 0x04380300: 0x0000045D
	"\x04C\x03\x06\x00\x00\x04^" + // 0x04430306: 0x0000045E
	"\x04t\x03\x0f\x00\x00\x04v" + // 0x0474030F: 0x00000476
	"\x04u\x03\x0f\x00\x00\x04w" + // 0x0475030F: 0x00000477
	"\x04\x16\x03\x06\x00\x00\x04\xc1" + // 0x04160306: 0x000004C1
	"\x046\x03\x06\x00\x00\x04\xc2" + // 0x04360306: 0x000004C2
	"\x04\x10\x03\x06\x00\x00\x04\xd0" + // 0x04100306: 0x000004D0
	"\x040\x03\x06\x00\x00\x04\xd1" + // 0x04300306: 0x000004D1
	"\x04\x10\x03\b\x00\x00\x04\xd2" + // 0x04100308: 0x000004D2
	"\x040\x03\b\x00\x00\x04\xd3" + // 0x04300308: 0x000004D3
	"\x04\x15\x03\x06\x00\x00\x04\xd6" + // 0x04150306: 0x000004D6
	"\x045\x03\x06\x00\x00\x04\xd7" + // 0x04350306: 0x000004D7
	"\x04\xd8\x03\b\x00\x00\x04\xda" + // 0x04D80308: 0x000004DA
	"\x04\xd9\x03\b\x00\x00\x04\xdb" + // 0x04D90308: 0x000004DB
	"\x04\x16\x03\b\x00\x00\x04\xdc" + // 0x04160308: 0x000004DC
	"\x046\x03\b\x00\x00\x04\xdd" + // 0x04360308: 0x000004DD
	"\x04\x17\x03\b\x00\x00\x04\xde" + // 0x04170308: 0x000004DE
	"\x047\x03\b\x00\x00\x04\xdf" + // 0x04370308: 0x000004DF
	"\x04\x18\x03\x04\x00\x00\x04\xe2" + // 0x04180304: 0x000004E2
	"\x048\x03\x04\x00\x00\x04\xe3" + // 0x04380304: 0x000004E3
	"\x04\x18\x03\b\x00\x00\x04\xe4" + // 0x04180308: 0x000004E4
	"\x048\x03\b\x00\x00\x04\xe5" + // 0x04380308: 0x000004E5
	"\x04\x1e\x03\b\x00\x00\x04\xe6" + // 0x041E0308: 0x000004E6
	"\x04>\x03\b\x00\x00\x04\xe7" + // 0x043E0308: 0x000004E7
	"\x04\xe8\x03\b\x00\x00\x04\xea" + // 0x04E80308: 0x000004EA
	"\x04\xe9\x03\b\x00\x00\x04\xeb" + // 0x04E90308: 0x000004EB
	"\x04-\x03\b\x00\x00\x04\xec" + // 0x042D0308: 0x000004EC
	"\x04M\x03\b\x00\x00\x04\xed" + // 0x044D0308: 0x000004ED
	"\x04#\x03\x04\x00\x00\x04\xee" + // 0x04230304: 0x000004EE
	"\x04C\x03\x04\x00\x00\x04\xef" + // 0x04430304: 0x000004EF
	"\x04#\x03\b\x00\x00\x04\xf0" + // 0x04230308: 0x000004F0
	"\x04C\x03\b\x00\x00\x04\xf1" + // 0x04430308: 0x000004F1
	"\x04#\x03\v\x00\x00\x04\xf2" + // 0x0423030B: 0x000004F2
	"\x04C\x03\v\x00\x00\x04\xf3" + // 0x0443030B: 0x000004F3
	"\x04'\x03\b\x00\x00\x04\xf4" + // 0x04270308: 0x000004F4
	"\x04G\x03\b\x00\x00\x04\xf5" + // 0x04470308: 0x000004F5
	"\x04+\x03\b\x00\x00\x04\xf8" + // 0x042B0308: 0x000004F8
	"\x04K\x03\b\x00\x00\x04\xf9" + // 0x044B0308: 0x000004F9
	"\x06'\x06S\x00\x00\x06\"" + // 0x06270653: 0x00000622
	"\x06'\x06T\x00\x00\x06#" + // 0x06270654: 0x00000623
	"\x06H\x06T\x00\x00\x06$" + // 0x06480654: 0x00000624
	"\x06'\x06U\x00\x00\x06%" + // 0x06270655: 0x00000625
	"\x06J\x06T\x00\x00\x06&" + // 0x064A0654: 0x00000626
	"\x06\xd5\x06T\x00\x00\x06\xc0" + // 0x06D50654: 0x000006C0
	"\x06\xc1\x06T\x00\x00\x06\xc2" + // 0x06C10654: 0x000006C2
	"\x06\xd2\x06T\x00\x00\x06\xd3" + // 0x06D20654: 0x000006D3
	"\t(\t<\x00\x00\t)" + // 0x0928093C: 0x00000929
	"\t0\t<\x00\x00\t1" + // 0x0930093C: 0x00000931
	"\t3\t<\x00\x00\t4" + // 0x0933093C: 0x00000934
	"\t\xc7\t\xbe\x00\x00\t\xcb" + // 0x09C709BE: 0x000009CB
	"\t\xc7\t\xd7\x00\x00\t\xcc" + // 0x09C709D7: 0x000009CC
	"\vG\vV\x00\x00\vH" + // 0x0B470B56: 0x00000B48
	"\vG\v>\x00\x00\vK" + // 0x0B470B3E: 0x00000B4B
	"\vG\vW\x00\x00\vL" + // 0x0B470B57: 0x00000B4C
	"\v\x92\v\xd7\x00\x00\v\x94" + // 0x0B920BD7: 0x00000B94
	"\v\xc6\v\xbe\x00\x00\v\xca" + // 0x0BC60BBE: 0x00000BCA
	"\v\xc7\v\xbe\x00\x00\v\xcb" + // 0x0BC70BBE: 0x00000BCB
	"\v\xc6\v\xd7\x00\x00\v\xcc" + // 0x0BC60BD7: 0x00000BCC
	"\fF\fV\x00\x00\fH" + // 0x0C460C56: 0x00000C48
	"\f\xbf\f\xd5\x00\x00\f\xc0" + // 0x0CBF0CD5: 0x00000CC0
	"\f\xc6\f\xd5\x00\x00\f\xc7" + // 0x0CC60CD5: 0x00000CC7
	"\f\xc6\f\xd6\x00\x00\f\xc8" + // 0x0CC60CD6: 0x00000CC8
	"\f\xc6\f\xc2\x00\x00\f\xca" + // 0x0CC60CC2: 0x00000CCA
	"\f\xca\f\xd5\x00\x00\f\xcb" + // 0x0CCA0CD5: 0x00000CCB
	"\rF\r>\x00\x00\rJ" + // 0x0D460D3E: 0x00000D4A
	"\rG\r>\x00\x00\rK" + // 0x0D470D3E: 0x00000D4B
	"\rF\rW\x00\x00\rL" + // 0x0D460D57: 0x00000D4C
	"\r\xd9\r\xca\x00\x00\r\xda" + // 0x0DD90DCA: 0x00000DDA
	"\r\xd9\r\xcf\x00\x00\r\xdc" + // 0x0DD90DCF: 0x00000DDC
	"\r\xdc\r\xca\x00\x00\r\xdd" + // 0x0DDC0DCA: 0x00000DDD
	"\r\xd9\r\xdf\x00\x00\r\xde" + // 0x0DD90DDF: 0x00000DDE
	"\x10%\x10.\x00\x00\x10&" + // 0x1025102E: 0x00001026
	"\x1b\x05\x1b5\x00\x00\x1b\x06" + // 0x1B051B35: 0x00001B06
	"\x1b\a\x1b5\x00\x00\x1b\b" + // 0x1B071B35: 0x00001B08
	"\x1b\t\x1b5\x00\x00\x1b\n" + // 0x1B091B35: 0x00001B0A
	"\x1b\v\x1b5\x00\x00\x1b\f" + // 0x1B0B1B35: 0x00001B0C
	"\x1b\r\x1b5\x00\x00\x1b\x0e" + // 0x1B0D1B35: 0x00001B0E
	"\x1b\x11\x1b5\x00\x00\x1b\x12" + // 0x1B111B35: 0x00001B12
	"\x1b:\x1b5\x00\x00\x1b;" + // 0x1B3A1B35: 0x00001B3B
	"\x1b<\x1b5\x00\x00\x1b=" + // 0x1B3C1B35: 0x00001B3D
	"\x1b>\x1b5\x00\x00\x1b@" + // 0x1B3E1B35: 0x00001B40
	"\x1b?\x1b5\x00\x00\x1bA" + // 0x1B3F1B35: 0x00001B41
	"\x1bB\x1b5\x00\x00\x1bC" + // 0x1B421B35: 0x00001B43
	"\x00A\x03%\x00\x00\x1e\x00" + // 0x00410325: 0x00001E00
	"\x00a\x03%\x00\x00\x1e\x01" + // 0x00610325: 0x00001E01
	"\x00B\x03\a\x00\x00\x1e\x02" + // 0x00420307: 0x00001E02
	"\x00b\x03\a\x00\x00\x1e\x03" + // 0x00620307: 0x00001E03
	"\x00B\x03#\x00\x00\x1e\x04" + // 0x00420323: 0x00001E04
	"\x00b\x03#\x00\x00\x1e\x05" + // 0x00620323: 0x00001E05
	"\x00B\x031\x00\x00\x1e\x06" + // 0x00420331: 0x00001E06
	"\x00b\x031\x00\x00\x1e\a" + // 0x00620331: 0x00001E07
	"\x00\xc7\x03\x01\x00\x00\x1e\b" + // 0x00C70301: 0x00001E08
	"\x00\xe7\x03\x01\x00\x00\x1e\t" + // 0x00E70301: 0x00001E09
	"\x00D\x03\a\x00\x00\x1e\n" + // 0x00440307: 0x00001E0A
	"\x00d\x03\a\x00\x00\x1e\v" + // 0x00640307: 0x00001E0B
	"\x00D\x03#\x00\x00\x1e\f" + // 0x00440323: 0x00001E0C
	"\x00d\x03#\x00\x00\x1e\r" + // 0x00640323: 0x00001E0D
	"\x00D\x031\x00\x00\x1e\x0e" + // 0x00440331: 0x00001E0E
	"\x00d\x031\x00\x00\x1e\x0f" + // 0x00640331: 0x00001E0F
	"\x00D\x03'\x00\x00\x1e\x10" + // 0x00440327: 0x00001E10
	"\x00d\x03'\x00\x00\x1e\x11" + // 0x00640327: 0x00001E11
	"\x00D\x03-\x00\x00\x1e\x12" + // 0x0044032D: 0x00001E12
	"\x00d\x03-\x00\x00\x1e\x13" + // 0x0064032D: 0x00001E13
	"\x01\x12\x03\x00\x00\x00\x1e\x14" + // 0x01120300: 0x00001E14
	"\x01\x13\x03\x00\x00\x00\x1e\x15" + // 0x01130300: 0x00001E15
	"\x01\x12\x03\x01\x00\x00\x1e\x16" + // 0x01120301: 0x00001E16
	"\x01\x13\x03\x01\x00\x00\x1e\x17" + // 0x01130301: 0x00001E17
	"\x00E\x03-\x00\x00\x1e\x18" + // 0x0045032D: 0x00001E18
	"\x00e\x03-\x00\x00\x1e\x19" + // 0x0065032D: 0x00001E19
	"\x00E\x030\x00\x00\x1e\x1a" + // 0x00450330: 0x00001E1A
	"\x00e\x030\x00\x00\x1e\x1b" + // 0x00650330: 0x00001E1B
	"\x02(\x03\x06\x00\x00\x1e\x1c" + // 0x02280306: 0x00001E1C
	"\x02)\x03\x06\x00\x00\x1e\x1d" + // 0x02290306: 0x00001E1D
	"\x00F\x03\a\x00\x00\x1e\x1e" + // 0x00460307: 0x00001E1E
	"\x00f\x03\a\x00\x00\x1e\x1f" + // 0x00660307: 0x00001E1F
	"\x00G\x03\x04\x00\x00\x1e " + // 0x00470304: 0x00001E20
	"\x00g\x03\x04\x00\x00\x1e!" + // 0x00670304: 0x00001E21
	"\x00H\x03\a\x00\x00\x1e\"" + // 0x00480307: 0x00001E22
	"\x00h\x03\a\x00\x00\x1e#" + // 0x00680307: 0x00001E23
	"\x00H\x03#\x00\x00\x1e$" + // 0x00480323: 0x00001E24
	"\x00h\x03#\x00\x00\x1e%" + // 0x00680323: 0x00001E25
	"\x00H\x03\b\x00\x00\x1e&" + // 0x00480308: 0x00001E26
	"\x00h\x03\b\x00\x00\x1e'" + // 0x00680308: 0x00001E27
	"\x00H\x03'\x00\x00\x1e(" + // 0x00480327: 0x00001E28
	"\x00h\x03'\x00\x00\x1e)" + // 0x00680327: 0x00001E29
	"\x00H\x03.\x00\x00\x1e*" + // 0x0048032E: 0x00001E2A
	"\x00h\x03.\x00\x00\x1e+" + // 0x0068032E: 0x00001E2B
	"\x00I\x030\x00\x00\x1e," + // 0x00490330: 0x00001E2C
	"\x00i\x030\x00\x00\x1e-" + // 0x00690330: 0x00001E2D
	"\x00\xcf\x03\x01\x00\x00\x1e." + // 0x00CF0301: 0x00001E2E
	"\x00\xef\x03\x01\x00\x00\x1e/" + // 0x00EF0301: 0x00001E2F
	"\x00K\x03\x01\x00\x00\x1e0" + // 0x004B0301: 0x00001E30
	"\x00k\x03\x01\x00\x00\x1e1" + // 0x006B0301: 0x00001E31
	"\x00K\x03#\x00\x00\x1e2" + // 0x004B0323: 0x00001E32
	"\x00k\x03#\x00\x00\x1e3" + // 0x006B0323: 0x00001E33
	"\x00K\x031\x00\x00\x1e4" + // 0x004B0331: 0x00001E34
	"\x00k\x031\x00\x00\x1e5" + // 0x006B0331: 0x00001E35
	"\x00L\x03#\x00\x00\x1e6" + // 0x004C0323: 0x00001E36
	"\x00l\x03#\x00\x00\x1e7" + // 0x006C0323: 0x00001E37
	"\x1e6\x03\x04\x00\x00\x1e8" + // 0x1E360304: 0x00001E38
	"\x1e7\x03\x04\x00\x00\x1e9" + // 0x1E370304: 0x00001E39
	"\x00L\x031\x00\x00\x1e:" + // 0x004C0331: 0x00001E3A
	"\x00l\x031\x00\x00\x1e;" + // 0x006C0331: 0x00001E3B
	"\x00L\x03-\x00\x00\x1e<" + // 0x004C032D: 0x00001E3C
	"\x00l\x03-\x00\x00\x1e=" + // 0x006C032D: 0x00001E3D
	"\x00M\x03\x01\x00\x00\x1e>" + // 0x004D0301: 0x00001E3E
	"\x00m\x03\x01\x00\x00\x1e?" + // 0x006D0301: 0x00001E3F
	"\x00M\x03\a\x00\x00\x1e@" + // 0x004D0307: 0x00001E40
	"\x00m\x03\a\x00\x00\x1eA" + // 0x006D0307: 0x00001E41
	"\x00M\x03#\x00\x00\x1eB" + // 0x004D0323: 0x00001E42
	"\x00m\x03#\x00\x00\x1eC" + // 0x006D0323: 0x00001E43
	"\x00N\x03\a\x00\x00\x1eD" + // 0x004E0307: 0x00001E44
	"\x00n\x03\a\x00\x00\x1eE" + // 0x006E0307: 0x00001E45
	"\x00N\x03#\x00\x00\x1eF" + // 0x004E0323: 0x00001E46
	"\x00n\x03#\x00\x00\x1eG" + // 0x006E0323: 0x00001E47
	"\x00N\x031\x00\x00\x1eH" + // 0x004E0331: 0x00001E48
	"\x00n\x031\x00\x00\x1eI" + // 0x006E0331: 0x00001E49
	"\x00N\x03-\x00\x00\x1eJ" + // 0x004E032D: 0x00001E4A
	"\x00n\x03-\x00\x00\x1eK" + // 0x006E032D: 0x00001E4B
	"\x00\xd5\x03\x01\x00\x00\x1eL" + // 0x00D50301: 0x00001E4C
	"\x00\xf5\x03\x01\x00\x00\x1eM" + // 0x00F50301: 0x00001E4D
	"\x00\xd5\x03\b\x00\x00\x1eN" + // 0x00D50308: 0x00001E4E
	"\x00\xf5\x03\b\x00\x00\x1eO" + // 0x00F50308: 0x00001E4F
	"\x01L\x03\x00\x00\x00\x1eP" + // 0x014C0300: 0x00001E50
	"\x01M\x03\x00\x00\x00\x1eQ" + // 0x014D0300: 0x00001E51
	"\x01L\x03\x01\x00\x00\x1eR" + // 0x014C0301: 0x00001E52
	"\x01M\x03\x01\x00\x00\x1eS" + // 0x014D0301: 0x00001E53
	"\x00P\x03\x01\x00\x00\x1eT" + // 0x00500301: 0x00001E54
	"\x00p\x03\x01\x00\x00\x1eU" + // 0x00700301: 0x00001E55
	"\x00P\x03\a\x00\x00\x1eV" + // 0x00500307: 0x00001E56
	"\x00p\x03\a\x00\x00\x1eW" + // 0x00700307: 0x00001E57
	"\x00R\x03\a\x00\x00\x1eX" + // 0x00520307: 0x00001E58
	"\x00r\x03\a\x00\x00\x1eY" + // 0x00720307: 0x00001E59
	"\x00R\x03#\x00\x00\x1eZ" + // 0x00520323: 0x00001E5A
	"\x00r\x03#\x00\x00\x1e[" + // 0x00720323: 0x00001E5B
	"\x1eZ\x03\x04\x00\x00\x1e\\" + // 0x1E5A0304: 0x00001E5C
	"\x1e[\x03\x04\x00\x00\x1e]" + // 0x1E5B0304: 0x00001E5D
	"\x00R\x031\x00\x00\x1e^" + // 0x00520331: 0x00001E5E
	"\x00r\x031\x00\x00\x1e_" + // 0x00720331: 0x00001E5F
	"\x00S\x03\a\x00\x00\x1e`" + // 0x00530307: 0x00001E60
	"\x00s\x03\a\x00\x00\x1ea" + // 0x00730307: 0x00001E61
	"\x00S\x03#\x00\x00\x1eb" + // 0x00530323: 0x00001E62
	"\x00s\x03#\x00\x00\x1ec" + // 0x00730323: 0x00001E63
	"\x01Z\x03\a\x00\x00\x1ed" + // 0x015A0307: 0x00001E64
	"\x01[\x03\a\x00\x00\x1ee" + // 0x015B0307: 0x00001E65
	"\x01`\x03\a\x00\x00\x1ef" + // 0x01600307: 0x00001E66
	"\x01a\x03\a\x00\x00\x1eg" + // 0x01610307: 0x00001E67
	"\x1eb\x03\a\x00\x00\x1eh" + // 0x1E620307: 0x00001E68
	"\x1ec\x03\a\x00\x00\x1ei" + // 0x1E630307: 0x00001E69
	"\x00T\x03\a\x00\x00\x1ej" + // 0x00540307: 0x00001E6A
	"\x00t\x03\a\x00\x00\x1ek" + // 0x00740307: 0x00001E6B
	"\x00T\x03#\x00\x00\x1el" + // 0x00540323: 0x00001E6C
	"\x00t\x03#\x00\x00\x1em" + // 0x00740323: 0x00001E6D
	"\x00T\x031\x00\x00\x1en" + // 0x00540331: 0x00001E6E
	"\x00t\x031\x00\x00\x1eo" + // 0x00740331: 0x00001E6F
	"\x00T\x03-\x00\x00\x1ep" + // 0x0054032D: 0x00001E70
	"\x00t\x03-\x00\x00\x1eq" + // 0x0074032D: 0x00001E71
	"\x00U\x03$\x00\x00\x1er" + // 0x00550324: 0x00001E72
	"\x00u\x03$\x00\x00\x1es" + // 0x00750324: 0x00001E73
	"\x00U\x030\x00\x00\x1et" + // 0x00550330: 0x00001E74
	"\x00u\x030\x00\x00\x1eu" + // 0x00750330: 0x00001E75
	"\x00U\x03-\x00\x00\x1ev" + // 0x0055032D: 0x00001E76
	"\x00u\x03-\x00\x00\x1ew" + // 0x0075032D: 0x00001E77
	"\x01h\x03\x01\x00\x00\x1ex" + // 0x01680301: 0x00001E78
	"\x01i\x03\x01\x00\x00\x1ey" + // 0x01690301: 0x00001E79
	"\x01j\x03\b\x00\x00\x1ez" + // 0x016A0308: 0x00001E7A
	"\x01k\x03\b\x00\x00\x1e{" + // 0x016B0308: 0x00001E7B
	"\x00V\x03\x03\x00\x00\x1e|" + // 0x00560303: 0x00001E7C
	"\x00v\x03\x03\x00\x00\x1e}" + // 0x00760303: 0x00001E7D
	"\x00V\x03#\x00\x00\x1e~" + // 0x00560323: 0x00001E7E
	"\x00v\x03#\x00\x00\x1e\x7f" + // 0x00760323: 0x00001E7F
	"\x00W\x03\x00\x00\x00\x1e\x80" + // 0x00570300: 0x00001E80
	"\x00w\x03\x00\x00\x00\x1e\x81" + // 0x00770300: 0x00001E81
	"\x00W\x03\x01\x00\x00\x1e\x82" + // 0x00570301: 0x00001E82
	"\x00w\x03\x01\x00\x00\x1e\x83" + // 0x00770301: 0x00001E83
	"\x00W\x03\b\x00\x00\x1e\x84" + // 0x00570308: 0x00001E84
	"\x00w\x03\b\x00\x00\x1e\x85" + // 0x00770308: 0x00001E85
	"\x00W\x03\a\x00\x00\x1e\x86" + // 0x00570307: 0x00001E86
	"\x00w\x03\a\x00\x00\x1e\x87" + // 0x00770307: 0x00001E87
	"\x00W\x03#\x00\x00\x1e\x88" + // 0x00570323: 0x00001E88
	"\x00w\x03#\x00\x00\x1e\x89" + // 0x00770323: 0x00001E89
	"\x00X\x03\a\x00\x00\x1e\x8a" + // 0x00580307: 0x00001E8A
	"\x00x\x03\a\x00\x00\x1e\x8b" + // 0x00780307: 0x00001E8B
	"\x00X\x03\b\x00\x00\x1e\x8c" + // 0x00580308: 0x00001E8C
	"\x00x\x03\b\x00\x00\x1e\x8d" + // 0x00780308: 0x00001E8D
	"\x00Y\x03\a\x00\x00\x1e\x8e" + // 0x00590307: 0x00001E8E
	"\x00y\x03\a\x00\x00\x1e\x8f" + // 0x00790307: 0x00001E8F
	"\x00Z\x03\x02\x00\x00\x1e\x90" + // 0x005A0302: 0x00001E90
	"\x00z\x03\x02\x00\x00\x1e\x91" + // 0x007A0302: 0x00001E91
	"\x00Z\x03#\x00\x00\x1e\x92" + // 0x005A0323: 0x00001E92
	"\x00z\x03#\x00\x00\x1e\x93" + // 0x007A0323: 0x00001E93
	"\x00Z\x031\x00\x00\x1e\x94" + // 0x005A0331: 0x00001E94
	"\x00z\x031\x00\x00\x1e\x95" + // 0x007A0331: 0x00001E95
	"\x00h\x031\x00\x00\x1e\x96" + // 0x00680331: 0x00001E96
	"\x00t\x03\b\x00\x00\x1e\x97" + // 0x00740308: 0x00001E97
	"\x00w\x03\n\x00\x00\x1e\x98" + // 0x0077030A: 0x00001E98
	"\x00y\x03\n\x00\x00\x1e\x99" + // 0x0079030A: 0x00001E99
	"\x01\x7f\x03\a\x00\x00\x1e\x9b" + // 0x017F0307: 0x00001E9B
	"\x00A\x03#\x00\x00\x1e\xa0" + // 0x00410323: 0x00001EA0
	"\x00a\x03#\x00\x00\x1e\xa1" + // 0x00610323: 0x00001EA1
	"\x00A\x03\t\x00\x00\x1e\xa2" + // 0x00410309: 0x00001EA2
	"\x00a\x03\t\x00\x00\x1e\xa3" + // 0x00610309: 0x00001EA3
	"\x00\xc2\x03\x01\x00\x00\x1e\xa4" + // 0x00C20301: 0x00001EA4
	"\x00\xe2\x03\x01\x00\x00\x1e\xa5" + // 0x00E20301: 0x00001EA5
	"\x00\xc2\x03\x00\x00\x00\x1e\xa6" + // 0x00C20300: 0x00001EA6
	"\x00\xe2\x03\x00\x00\x00\x1e\xa7" + // 0x00E20300: 0x00001EA7
	"\x00\xc2\x03\t\x00\x00\x1e\xa8" + // 0x00C20309: 0x00001EA8
	"\x00\xe2\x03\t\x00\x00\x1e\xa9" + // 0x00E20309: 0x00001EA9
	"\x00\xc2\x03\x03\x00\x00\x1e\xaa" + // 0x00C20303: 0x00001EAA
	"\x00\xe2\x03\x03\x00\x00\x1e\xab" + // 0x00E20303: 0x00001EAB
	"\x1e\xa0\x03\x02\x00\x00\x1e\xac" + // 0x1EA00302: 0x00001EAC
	"\x1e\xa1\x03\x02\x00\x00\x1e\xad" + // 0x1EA10302: 0x00001EAD
	"\x01\x02\x03\x01\x00\x00\x1e\xae" + // 0x01020301: 0x00001EAE
	"\x01\x03\x03\x01\x00\x00\x1e\xaf" + // 0x01030301: 0x00001EAF
	"\x01\x02\x03\x00\x00\x00\x1e\xb0" + // 0x01020300: 0x00001EB0
	"\x01\x03\x03\x00\x00\x00\x1e\xb1" + // 0x01030300: 0x00001EB1
	"\x01\x02\x03\t\x00\x00\x1e\xb2" + // 0x01020309: 0x00001EB2
	"\x01\x03\x03\t\x00\x00\x1e\xb3" + // 0x01030309: 0x00001EB3
	"\x01\x02\x03\x03\x00\x00\x1e\xb4" + // 0x01020303: 0x00001EB4
	"\x01\x03\x03\x03\x00\x00\x1e\xb5" + // 0x01030303: 0x00001EB5
	"\x1e\xa0\x03\x06\x00\x00\x1e\xb6" + // 0x1EA00306: 0x00001EB6
	"\x1e\xa1\x03\x06\x00\x00\x1e\xb7" + // 0x1EA10306: 0x00001EB7
	"\x00E\x03#\x00\x00\x1e\xb8" + // 0x00450323: 0x00001EB8
	"\x00e\x03#\x00\x00\x1e\xb9" + // 0x00650323: 0x00001EB9
	"\x00E\x03\t\x00\x00\x1e\xba" + // 0x00450309: 0x00001EBA
	"\x00e\x03\t\x00\x00\x1e\xbb" + // 0x00650309: 0x00001EBB
	"\x00E\x03\x03\x00\x00\x1e\xbc" + // 0x00450303: 0x00001EBC
	"\x00e\x03\x03\x00\x00\x1e\xbd" + // 0x00650303: 0x00001EBD
	"\x00\xca\x03\x01\x00\x00\x1e\xbe" + // 0x00CA0301: 0x00001EBE
	"\x00\xea\x03\x01\x00\x00\x1e\xbf" + // 0x00EA0301: 0x00001EBF
	"\x00\xca\x03\x00\x00\x00\x1e\xc0" + // 0x00CA0300: 0x00001EC0
	"\x00\xea\x03\x00\x00\x00\x1e\xc1" + // 0x00EA0300: 0x00001EC1
	"\x00\xca\x03\t\x00\x00\x1e\xc2" + // 0x00CA0309: 0x00001EC2
	"\x00\xea\x03\t\x00\x00\x1e\xc3" + // 0x00EA0309: 0x00001EC3
	"\x00\xca\x03\x03\x00\x00\x1e\xc4" + // 0x00CA0303: 0x00001EC4
	"\x00\xea\x03\x03\x00\x00\x1e\xc5" + // 0x00EA0303: 0x00001EC5
	"\x1e\xb8\x03\x02\x00\x00\x1e\xc6" + // 0x1EB80302: 0x00001EC6
	"\x1e\xb9\x03\x02\x00\x00\x1e\xc7" + // 0x1EB90302: 0x00001EC7
	"\x00I\x03\t\x00\x00\x1e\xc8" + // 0x00490309: 0x00001EC8
	"\x00i\x03\t\x00\x00\x1e\xc9" + // 0x00690309: 0x00001EC9
	"\x00I\x03#\x00\x00\x1e\xca" + // 0x00490323: 0x00001ECA
	"\x00i\x03#\x00\x00\x1e\xcb" + // 0x00690323: 0x00001ECB
	"\x00O\x03#\x00\x00\x1e\xcc" + // 0x004F0323: 0x00001ECC
	"\x00o\x03#\x00\x00\x1e\xcd" + // 0x006F0323: 0x00001ECD
	"\x00O\x03\t\x00\x00\x1e\xce" + // 0x004F0309: 0x00001ECE
	"\x00o\x03\t\x00\x00\x1e\xcf" + // 0x006F0309: 0x00001ECF
	"\x00\xd4\x03\x01\x00\x00\x1e\xd0" + // 0x00D40301: 0x00001ED0
	"\x00\xf4\x03\x01\x00\x00\x1e\xd1" + // 0x00F40301: 0x00001ED1
	"\x00\xd4\x03\x00\x00\x00\x1e\xd2" + // 0x00D40300: 0x00001ED2
	"\x00\xf4\x03\x00\x00\x00\x1e\xd3" + // 0x00F40300: 0x00001ED3
	"\x00\xd4\x03\t\x00\x00\x1e\xd4" + // 0x00D40309: 0x00001ED4
	"\x00\xf4\x03\t\x00\x00\x1e\xd5" + // 0x00F40309: 0x00001ED5
	"\x00\xd4\x03\x03\x00\x00\x1e\xd6" + // 0x00D40303: 0x00001ED6
	"\x00\xf4\x03\x03\x00\x00\x1e\xd7" + // 0x00F40303: 0x00001ED7
	"\x1e\xcc\x03\x02\x00\x00\x1e\xd8" + // 0x1ECC0302: 0x00001ED8
	"\x1e\xcd\x03\x02\x00\x00\x1e\xd9" + // 0x1ECD0302: 0x00001ED9
	"\x01\xa0\x03\x01\x00\x00\x1e\xda" + // 0x01A00301: 0x00001EDA
	"\x01\xa1\x03\x01\x00\x00\x1e\xdb" + // 0x01A10301: 0x00001EDB
	"\x01\xa0\x03\x00\x00\x00\x1e\xdc" + // 0x01A00300: 0x00001EDC
	"\x01\xa1\x03\x00\x00\x00\x1e\xdd" + // 0x01A10300: 0x00001EDD
	"\x01\xa0\x03\t\x00\x00\x1e\xde" + // 0x01A00309: 0x00001EDE
	"\x01\xa1\x03\t\x00\x00\x1e\xdf" + // 0x01A10309: 0x00001EDF
	"\x01\xa0\x03\x03\x00\x00\x1e\xe0" + // 0x01A00303: 0x00001EE0
	"\x01\xa1\x03\x03\x00\x00\x1e\xe1" + // 0x01A10303: 0x00001EE1
	"\x01\xa0\x03#\x00\x00\x1e\xe2" + // 0x01A00323: 0x00001EE2
	"\x01\xa1\x03#\x00\x00\x1e\xe3" + // 0x01A10323: 0x00001EE3
	"\x00U\x03#\x00\x00\x1e\xe4" + // 0x00550323: 0x00001EE4
	"\x00u\x03#\x00\x00\x1e\xe5" + // 0x00750323: 0x00001EE5
	"\x00U\x03\t\x00\x00\x1e\xe6" + // 0x00550309: 0x00001EE6
	"\x00u\x03\t\x00\x00\x1e\xe7" + // 0x00750309: 0x00001EE7
	"\x01\xaf\x03\x01\x00\x00\x1e\xe8" + // 0x01AF0301: 0x00001EE8
	"\x01\xb0\x03\x01\x00\x00\x1e\xe9" + // 0x01B00301: 0x00001EE9
	"\x01\xaf\x03\x00\x00\x00\x1e\xea" + // 0x01AF0300: 0x00001EEA
	"\x01\xb0\x03\x00\x00\x00\x1e\xeb" + // 0x01B00300: 0x00001EEB
	"\x01\xaf\x03\t\x00\x00\x1e\xec" + // 0x01AF0309: 0x00001EEC
	"\x01\xb0\x03\t\x00\x00\x1e\xed" + // 0x01B00309: 0x00001EED
	"\x01\xaf\x03\x03\x00\x00\x1e\xee" + // 0x01AF0303: 0x00001EEE
	"\x01\xb0\x03\x03\x00\x00\x1e\xef" + // 0x01B00303: 0x00001EEF
	"\x01\xaf\x03#\x00\x00\x1e\xf0" + // 0x01AF0323: 0x00001EF0
	"\x01\xb0\x03#\x00\x00\x1e\xf1" + // 0x01B00323: 0x00001EF1
	"\x00Y\x03\x00\x00\x00\x1e\xf2" + // 0x00590300: 0x00001EF2
	"\x00y\x03\x00\x00\x00\x1e\xf3" + // 0x00790300: 0x00001EF3
	"\x00Y\x03#\x00\x00\x1e\xf4" + // 0x00590323: 0x00001EF4
	"\x00y\x03#\x00\x00\x1e\xf5" + // 0x00790323: 0x00001EF5
	"\x00Y\x03\t\x00\x00\x1e\xf6" + // 0x00590309: 0x00001EF6
	"\x00y\x03\t\x00\x00\x1e\xf7" + // 0x00790309: 0x00001EF7
	"\x00Y\x03\x03\x00\x00\x1e\xf8" + // 0x00590303: 0x00001EF8
	"\x00y\x03\x03\x00\x00\x1e\xf9" + // 0x00790303: 0x00001EF9
	"\x03\xb1\x03\x13\x00\x00\x1f\x00" + // 0x03B10313: 0x00001F00
	"\x03\xb1\x03\x14\x00\x00\x1f\x01" + // 0x03B10314: 0x00001F01
	"\x1f\x00\x03\x00\x00\x00\x1f\x02" + // 0x1F000300: 0x00001F02
	"\x1f\x01\x03\x00\x00\x00\x1f\x03" + // 0x1F010300: 0x00001F03
	"\x1f\x00\x03\x01\x00\x00\x1f\x04" + // 0x1F000301: 0x00001F04
	"\x1f\x01\x03\x01\x00\x00\x1f\x05" + // 0x1F010301: 0x00001F05
	"\x1f\x00\x03B\x00\x00\x1f\x06" + // 0x1F000342: 0x00001F06
	"\x1f\x01\x03B\x00\x00\x1f\a" + // 0x1F010342: 0x00001F07
	"\x03\x91\x03\x13\x00\x00\x1f\b" + // 0x03910313: 0x00001F08
	"\x03\x91\x03\x14\x00\x00\x1f\t" + // 0x03910314: 0x00001F09
	"\x1f\b\x03\x00\x00\x00\x1f\n" + // 0x1F080300: 0x00001F0A
	"\x1f\t\x03\x00\x00\x00\x1f\v" + // 0x1F090300: 0x00001F0B
	"\x1f\b\x03\x01\x00\x00\x1f\f" + // 0x1F080301: 0x00001F0C
	"\x1f\t\x03\x01\x00\x00\x1f\r" + // 0x1F090301: 0x00001F0D
	"\x1f\b\x03B\x00\x00\x1f\x0e" + // 0x1F080342: 0x00001F0E
	"\x1f\t\x03B\x00\x00\x1f\x0f" + // 0x1F090342: 0x00001F0F
	"\x03\xb5\x03\x13\x00\x00\x1f\x10" + // 0x03B50313: 0x00001F10
	"\x03\xb5\x03\x14\x00\x00\x1f\x11" + // 0x03B50314: 0x00001F11
	"\x1f\x10\x03\x00\x00\x00\x1f\x12" + // 0x1F100300: 0x00001F12
	"\x1f\x11\x03\x00\x00\x00\x1f\x13" + // 0x1F110300: 0x00001F13
	"\x1f\x10\x03\x01\x00\x00\x1f\x14" + // 0x1F100301: 0x00001F14
	"\x1f\x11\x03\x01\x00\x00\x1f\x15" + // 0x1F110301: 0x00001F15
	"\x03\x95\x03\x13\x00\x00\x1f\x18" + // 0x03950313: 0x00001F18
	"\x03\x95\x03\x14\x00\x00\x1f\x19" + // 0x03950314: 0x00001F19
	"\x1f\x18\x03\x00\x00\x00\x1f\x1a" + // 0x1F180300: 0x00001F1A
	"\x1f\x19\x03\x00\x00\x00\x1f\x1b" + // 0x1F190300: 0x00001F1B
	"\x1f\x18\x03\x01\x00\x00\x1f\x1c" + // 0x1F180301: 0x00001F1C
	"\x1f\x19\x03\x01\x00\x00\x1f\x1d" + // 0x1F190301: 0x00001F1D
	"\x03\xb7\x03\x13\x00\x00\x1f " + // 0x03B70313: 0x00001F20
	"\x03\xb7\x03\x14\x00\x00\x1f!" + // 0x03B70314: 0x00001F21
	"\x1f \x03\x00\x00\x00\x1f\"" + // 0x1F200300: 0x00001F22
	"\x1f!\x03\x00\x00\x00\x1f#" + // 0x1F210300: 0x00001F23
	"\x1f \x03\x01\x00\x00\x1f$" + // 0x1F200301: 0x00001F24
	"\x1f!\x03\x01\x00\x00\x1f%" + // 0x1F210301: 0x00001F25
	"\x1f \x03B\x00\x00\x1f&" + // 0x1F200342: 0x00001F26
	"\x1f!\x03B\x00\x00\x1f'" + // 0x1F210342: 0x00001F27
	"\x03\x97\x03\x13\x00\x00\x1f(" + // 0x03970313: 0x00001F28
	"\x03\x97\x03\x14\x00\x00\x1f)" + // 0x03970314: 0x00001F29
	"\x1f(\x03\x00\x00\x00\x1f*" + // 0x1F280300: 0x00001F2A
	"\x1f)\x03\x00\x00\x00\x1f+" + // 0x1F290300: 0x00001F2B
	"\x1f(\x03\x01\x00\x00\x1f," + // 0x1F280301: 0x00001F2C
	"\x1f)\x03\x01\x00\x00\x1f-" + // 0x1F290301: 0x00001F2D
	"\x1f(\x03B\x00\x00\x1f." + // 0x1F280342: 0x00001F2E
	"\x1f)\x03B\x00\x00\x1f/" + // 0x1F290342: 0x00001F2F
	"\x03\xb9\x03\x13\x00\x00\x1f0" + // 0x03B90313: 0x00001F30
	"\x03\xb9\x03\x14\x00\x00\x1f1" + // 0x03B90314: 0x00001F31
	"\x1f0\x03\x00\x00\x00\x1f2" + // 0x1F300300: 0x00001F32
	"\x1f1\x03\x00\x00\x00\x1f3" + // 0x1F310300: 0x00001F33
	"\x1f0\x03\x01\x00\x00\x1f4" + // 0x1F300301: 0x00001F34
	"\x1f1\x03\x01\x00\x00\x1f5" + // 0x1F310301: 0x00001F35
	"\x1f0\x03B\x00\x00\x1f6" + // 0x1F300342: 0x00001F36
	"\x1f1\x03B\x00\x00\x1f7" + // 0x1F310342: 0x00001F37
	"\x03\x99\x03\x13\x00\x00\x1f8" + // 0x03990313: 0x00001F38
	"\x03\x99\x03\x14\x00\x00\x1f9" + // 0x03990314: 0x00001F39
	"\x1f8\x03\x00\x00\x00\x1f:" + // 0x1F380300: 0x00001F3A
	"\x1f9\x03\x00\x00\x00\x1f;" + // 0x1F390300: 0x00001F3B
	"\x1f8\x03\x01\x00\x00\x1f<" + // 0x1F380301: 0x00001F3C
	"\x1f9\x03\x01\x00\x00\x1f=" + // 0x1F390301: 0x00001F3D
	"\x1f8\x03B\x00\x00\x1f>" + // 0x1F380342: 0x00001F3E
	"\x1f9\x03B\x00\x00\x1f?" + // 0x1F390342: 0x00001F3F
	"\x03\xbf\x03\x13\x00\x00\x1f@" + // 0x03BF0313: 0x00001F40
	"\x03\xbf\x03\x14\x00\x00\x1fA" + // 0x03BF0314: 0x00001F41
	"\x1f@\x03\x00\x00\x00\x1fB" + // 0x1F400300: 0x00001F42
	"\x1fA\x03\x00\x00\x00\x1fC" + // 0x1F410300: 0x00001F43
	"\x1f@\x03\x01\x00\x00\x1fD" + // 0x1F400301: 0x00001F44
	"\x1fA\x03\x01\x00\x00\x1fE" + // 0x1F410301: 0x00001F45
	"\x03\x9f\x03\x13\x00\x00\x1fH" + // 0x039F0313: 0x00001F48
	"\x03\x9f\x03\x14\x00\x00\x1fI" + // 0x039F0314: 0x00001F49
	"\x1fH\x03\x00\x00\x00\x1fJ" + // 0x1F480300: 0x00001F4A
	"\x1fI\x03\x00\x00\x00\x1fK" + // 0x1F490300: 0x00001F4B
	"\x1fH\x03\x01\x00\x00\x1fL" + // 0x1F480301: 0x00001F4C
	"\x1fI\x03\x01\x00\x00\x1fM" + // 0x1F490301: 0x00001F4D
	"\x03\xc5\x03\x13\x00\x00\x1fP" + // 0x03C50313: 0x00001F50
	"\x03\xc5\x03\x14\x00\x00\x1fQ" + // 0x03C50314: 0x00001F51
	"\x1fP\x03\x00\x00\x00\x1fR" + // 0x1F500300: 0x00001F52
	"\x1fQ\x03\x00\x00\x00\x1fS" + // 0x1F510300: 0x00001F53
	"\x1fP\x03\x01\x00\x00\x1fT" + // 0x1F500301: 0x00001F54
	"\x1fQ\x03\x01\x00\x00\x1fU" + // 0x1F510301: 0x00001F55
	"\x1fP\x03B\x00\x00\x1fV" + // 0x1F500342: 0x00001F56
	"\x1fQ\x03B\x00\x00\x1fW" + // 0x1F510342: 0x00001F57
	"\x03\xa5\x03\x14\x00\x00\x1fY" + // 0x03A50314: 0x00001F59
	"\x1fY\x03\x00\x00\x00\x1f[" + // 0x1F590300: 0x00001F5B
	"\x1fY\x03\x01\x00\x00\x1f]" + // 0x1F590301: 0x00001F5D
	"\x1fY\x03B\x00\x00\x1f_" + // 0x1F590342: 0x00001F5F
	"\x03\xc9\x03\x13\x00\x00\x1f`" + // 0x03C90313: 0x00001F60
	"\x03\xc9\x03\x14\x00\x00\x1fa" + // 0x03C90314: 0x00001F61
	"\x1f`\x03\x00\x00\x00\x1fb" + // 0x1F600300: 0x00001F62
	"\x1fa\x03\x00\x00\x00\x1fc" + // 0x1F610300: 0x00001F63
	"\x1f`\x03\x01\x00\x00\x1fd" + // 0x1F600301: 0x00001F64
	"\x1fa\x03\x01\x00\x00\x1fe" + // 0x1F610301: 0x00001F65
	"\x1f`\x03B\x00\x00\x1ff" + // 0x1F600342: 0x00001F66
	"\x1fa\x03B\x00\x00\x1fg" + // 0x1F610342: 0x00001F67
	"\x03\xa9\x03\x13\x00\x00\x1fh" + // 0x03A90313: 0x00001F68
	"\x03\xa9\x03\x14\x00\x00\x1fi" + // 0x03A90314: 0x00001F69
	"\x1fh\x03\x00\x00\x00\x1fj" + // 0x1F680300: 0x00001F6A
	"\x1fi\x03\x00\x00\x00\x1fk" + // 0x1F690300: 0x00001F6B
	"\x1fh\x03\x01\x00\x00\x1fl" + // 0x1F680301: 0x00001F6C
	"\x1fi\x03\x01\x00\x00\x1fm" + // 0x1F690301: 0x00001F6D
	"\x1fh\x03B\x00\x00\x1fn" + // 0x1F680342: 0x00001F6E
	"\x1fi\x03B\x00\x00\x1fo" + // 0x1F690342: 0x00001F6F
	"\x03\xb1\x03\x00\x00\x00\x1fp" + // 0x03B10300: 0x00001F70
	"\x03\xb5\x03\x00\x00\x00\x1fr" + // 0x03B50300: 0x00001F72
	"\x03\xb7\x03\x00\x00\x00\x1ft" + // 0x03B70300: 0x00001F74
	"\x03\xb9\x03\x00\x00\x00\x1fv" + // 0x03B90300: 0x00001F76
	"\x03\xbf\x03\x00\x00\x00\x1fx" + // 0x03BF0300: 0x00001F78
	"\x03\xc5\x03\x00\x00\x00\x1fz" + // 0x03C50300: 0x00001F7A
	"\x03\xc9\x03\x00\x00\x00\x1f|" + // 0x03C90300: 0x00001F7C
	"\x1f\x00\x03E\x00\x00\x1f\x80" + // 0x1F000345: 0x00001F80
	"\x1f\x01\x03E\x00\x00\x1f\x81" + // 0x1F010345: 0x00001F81
	"\x1f\x02\x03E\x00\x00\x1f\x82" + // 0x1F020345: 0x00001F82
	"\x1f\x03\x03E\x00\x00\x1f\x83" + // 0x1F030345: 0x00001F83
	"\x1f\x04\x03E\x00\x00\x1f\x84" + // 0x1F040345: 0x00001F84
	"\x1f\x05\x03E\x00\x00\x1f\x85" + // 0x1F050345: 0x00001F85
	"\x1f\x06\x03E\x00\x00\x1f\x86" + // 0x1F060345: 0x00001F86
	"\x1f\a\x03E\x00\x00\x1f\x87" + // 0x1F070345: 0x00001F87
	"\x1f\b\x03E\x00\x00\x1f\x88" + // 0x1F080345: 0x00001F88
	"\x1f\t\x03E\x00\x00\x1f\x89" + // 0x1F090345: 0x00001F89
	"\x1f\n\x03E\x00\x00\x1f\x8a" + // 0x1F0A0345: 0x00001F8A
	"\x1f\v\x03E\x00\x00\x1f\x8b" + // 0x1F0B0345: 0x00001F8B
	"\x1f\f\x03E\x00\x00\x1f\x8c" + // 0x1F0C0345: 0x00001F8C
	"\x1f\r\x03E\x00\x00\x1f\x8d" + // 0x1F0D0345: 0x00001F8D
	"\x1f\x0e\x03E\x00\x00\x1f\x8e" + // 0x1F0E0345: 0x00001F8E
	"\x1f\x0f\x03E\x00\x00\x1f\x8f" + // 0x1F0F0345: 0x00001F8F
	"\x1f \x03E\x00\x00\x1f\x90" + // 0x1F200345: 0x00001F90
	"\x1f!\x03E\x00\x00\x1f\x91" + // 0x1F210345: 0x00001F91
	"\x1f\"\x03E\x00\x00\x1f\x92" + // 0x1F220345: 0x00001F92
	"\x1f#\x03E\x00\x00\x1f\x93" + // 0x1F230345: 0x00001F93
	"\x1f$\x03E\x00\x00\x1f\x94" + // 0x1F240345: 0x00001F94
	"\x1f%\x03E\x00\x00\x1f\x95" + // 0x1F250345: 0x00001F95
	"\x1f&\x03E\x00\x00\x1f\x96" + // 0x1F260345: 0x00001F96
	"\x1f'\x03E\x00\x00\x1f\x97" + // 0x1F270345: 0x00001F97
	"\x1f(\x03E\x00\x00\x1f\x98" + // 0x1F280345: 0x00001F98
	"\x1f)\x03E\x00\x00\x1f\x99" + // 0x1F290345: 0x00001F99
	"\x1f*\x03E\x00\x00\x1f\x9a" + // 0x1F2A0345: 0x00001F9A
	"\x1f+\x03E\x00\x00\x1f\x9b" + // 0x1F2B0345: 0x00001F9B
	"\x1f,\x03E\x00\x00\x1f\x9c" + // 0x1F2C0345: 0x00001F9C
	"\x1f-\x03E\x00\x00\x1f\x9d" + // 0x1F2D0345: 0x00001F9D
	"\x1f.\x03E\x00\x00\x1f\x9e" + // 0x1F2E0345: 0x00001F9E
	"\x1f/\x03E\x00\x00\x1f\x9f" + // 0x1F2F0345: 0x00001F9F
	"\x1f`\x03E\x00\x00\x1f\xa0" + // 0x1F600345: 0x00001FA0
	"\x1fa\x03E\x00\x00\x1f\xa1" + // 0x1F610345: 0x00001FA1
	"\x1fb\x03E\x00\x00\x1f\xa2" + // 0x1F620345: 0x00001FA2
	"\x1fc\x03E\x00\x00\x1f\xa3" + // 0x1F630345: 0x00001FA3
	"\x1fd\x03E\x00\x00\x1f\xa4" + // 0x1F640345: 0x00001FA4
	"\x1fe\x03E\x00\x00\x1f\xa5" + // 0x1F650345: 0x00001FA5
	"\x1ff\x03E\x00\x00\x1f\xa6" + // 0x1F660345: 0x00001FA6
	"\x1fg\x03E\x00\x00\x1f\xa7" + // 0x1F670345: 0x00001FA7
	"\x1fh\x03E\x00\x00\x1f\xa8" + // 0x1F680345: 0x00001FA8
	"\x1fi\x03E\x00\x00\x1f\xa9" + // 0x1F690345: 0x00001FA9
	"\x1fj\x03E\x00\x00\x1f\xaa" + // 0x1F6A0345: 0x00001FAA
	"\x1fk\x03E\x00\x00\x1f\xab" + // 0x1F6B0345: 0x00001FAB
	"\x1fl\x03E\x00\x00\x1f\xac" + // 0x1F6C0345: 0x00001FAC
	"\x1fm\x03E\x00\x00\x1f\xad" + // 0x1F6D0345: 0x00001FAD
	"\x1fn\x03E\x00\x00\x1f\xae" + // 0x1F6E0345: 0x00001FAE
	"\x1fo\x03E\x00\x00\x1f\xaf" + // 0x1F6F0345: 0x00001FAF
	"\x03\xb1\x03\x06\x00\x00\x1f\xb0" + // 0x03B10306: 0x00001FB0
	"\x03\xb1\x03\x04\x00\x00\x1f\xb1" + // 0x03B10304: 0x00001FB1
	"\x1fp\x03E\x00\x00\x1f\xb2" + // 0x1F700345: 0x00001FB2
	"\x03\xb1\x03E\x00\x00\x1f\xb3" + // 0x03B10345: 0x00001FB3
	"\x03\xac\x03E\x00\x00\x1f\xb4" + // 0x03AC0345: 0x00001FB4
	"\x03\xb1\x03B\x00\x00\x1f\xb6" + // 0x03B10342: 0x00001FB6
	"\x1f\xb6\x03E\x00\x00\x1f\xb7" + // 0x1FB60345: 0x00001FB7
	"\x03\x91\x03\x06\x00\x00\x1f\xb8" + // 0x03910306: 0x00001FB8
	"\x03\x91\x03\x04\x00\x00\x1f\xb9" + // 0x03910304: 0x00001FB9
	"\x03\x91\x03\x00\x00\x00\x1f\xba" + // 0x03910300: 0x00001FBA
	"\x03\x91\x03E\x00\x00\x1f\xbc" + // 0x03910345: 0x00001FBC
	"\x00\xa8\x03B\x00\x00\x1f\xc1" + // 0x00A80342: 0x00001FC1
	"\x1ft\x03E\x00\x00\x1f\xc2" + // 0x1F740345: 0x00001FC2
	"\x03\xb7\x03E\x00\x00\x1f\xc3" + // 0x03B70345: 0x00001FC3
	"\x03\xae\x03E\x00\x00\x1f\xc4" + // 0x03AE0345: 0x00001FC4
	"\x03\xb7\x03B\x00\x00\x1f\xc6" + // 0x03B70342: 0x00001FC6
	"\x1f\xc6\x03E\x00\x00\x1f\xc7" + // 0x1FC60345: 0x00001FC7
	"\x03\x95\x03\x00\x00\x00\x1f\xc8" + // 0x03950300: 0x00001FC8
	"\x03\x97\x03\x00\x00\x00\x1f\xca" + // 0x03970300: 0x00001FCA
	"\x03\x97\x03E\x00\x00\x1f\xcc" + // 0x03970345: 0x00001FCC
	"\x1f\xbf\x03\x00\x00\x00\x1f\xcd" + // 0x1FBF0300: 0x00001FCD
	"\x1f\xbf\x03\x01\x00\x00\x1f\xce" + // 0x1FBF0301: 0x00001FCE
	"\x1f\xbf\x03B\x00\x00\x1f\xcf" + // 0x1FBF0342: 0x00001FCF
	"\x03\xb9\x03\x06\x00\x00\x1f\xd0" + // 0x03B90306: 0x00001FD0
	"\x03\xb9\x03\x04\x00\x00\x1f\xd1" + // 0x03B90304: 0x00001FD1
	"\x03\xca\x03\x00\x00\x00\x1f\xd2" + // 0x03CA0300: 0x00001FD2
	"\x03\xb9\x03B\x00\x00\x1f\xd6" + // 0x03B90342: 0x00001FD6
	"\x03\xca\x03B\x00\x00\x1f\xd7" + // 0x03CA0342: 0x00001FD7
	"\x03\x99\x03\x06\x00\x00\x1f\xd8" + // 0x03990306: 0x00001FD8
	"\x03\x99\x03\x04\x00\x00\x1f\xd9" + // 0x03990304: 0x00001FD9
	"\x03\x99\x03\x00\x00\x00\x1f\xda" + // 0x03990300: 0x00001FDA
	"\x1f\xfe\x03\x00\x00\x00\x1f\xdd" + // 0x1FFE0300: 0x00001FDD
	"\x1f\xfe\x03\x01\x00\x00\x1f\xde" + // 0x1FFE0301: 0x00001FDE
	"\x1f\xfe\x03B\x00\x00\x1f\xdf" + // 0x1FFE0342: 0x00001FDF
	"\x03\xc5\x03\x06\x00\x00\x1f\xe0" + // 0x03C50306: 0x00001FE0
	"\x03\xc5\x03\x04\x00\x00\x1f\xe1" + // 0x03C50304: 0x00001FE1
	"\x03\xcb\x03\x00\x00\x00\x1f\xe2" + // 0x03CB0300: 0x00001FE2
	"\x03\xc1\x03\x13\x00\x00\x1f\xe4" + // 0x03C10313: 0x00001FE4
	"\x03\xc1\x03\x14\x00\x00\x1f\xe5" + // 0x03C10314: 0x00001FE5
	"\x03\xc5\x03B\x00\x00\x1f\xe6" + // 0x03C50342: 0x00001FE6
	"\x03\xcb\x03B\x00\x00\x1f\xe7" + // 0x03CB0342: 0x00001FE7
	"\x03\xa5\x03\x06\x00\x00\x1f\xe8" + // 0x03A50306: 0x00001FE8
	"\x03\xa5\x03\x04\x00\x00\x1f\xe9" + // 0x03A50304: 0x00001FE9
	"\x03\xa5\x03\x00\x00\x00\x1f\xea" + // 0x03A50300: 0x00001FEA
	"\x03\xa1\x03\x14\x00\x00\x1f\xec" + // 0x03A10314: 0x00001FEC
	"\x00\xa8\x03\x00\x00\x00\x1f\xed" + // 0x00A80300: 0x00001FED
	"\x1f|\x03E\x00\x00\x1f\xf2" + // 0x1F7C0345: 0x00001FF2
	"\x03\xc9\x03E\x00\x00\x1f\xf3" + // 0x03C90345: 0x00001FF3
	"\x03\xce\x03E\x00\x00\x1f\xf4" + // 0x03CE0345: 0x00001FF4
	"\x03\xc9\x03B\x00\x00\x1f\xf6" + // 0x03C90342: 0x00001FF6
	"\x1f\xf6\x03E\x00\x00\x1f\xf7" + // 0x1FF60345: 0x00001FF7
	"\x03\x9f\x03\x00\x00\x00\x1f\xf8" + // 0x039F0300: 0x00001FF8
	"\x03\xa9\x03\x00\x00\x00\x1f\xfa" + // 0x03A90300: 0x00001FFA
	"\x03\xa9\x03E\x00\x00\x1f\xfc" + // 0x03A90345: 0x00001FFC
	"!\x90\x038\x00\x00!\x9a" + // 0x21900338: 0x0000219A
	"!\x92\x038\x00\x00!\x9b" + // 0x21920338: 0x0000219B
	"!\x94\x038\x00\x00!\xae" + // 0x21940338: 0x000021AE
	"!\xd0\x038\x00\x00!\xcd" + // 0x21D00338: 0x000021CD
	"!\xd4\x038\x00\x00!\xce" + // 0x21D40338: 0x000021CE
	"!\xd2\x038\x00\x00!\xcf" + // 0x21D20338: 0x000021CF
	"\"\x03\x038\x00\x00\"\x04" + // 0x22030338: 0x00002204
	"\"\b\x038\x00\x00\"\t" + // 0x22080338: 0x00002209
	"\"\v\x038\x00\x00\"\f" + // 0x220B0338: 0x0000220C
	"\"#\x038\x00\x00\"$" + // 0x22230338: 0x00002224
	"\"%\x038\x00\x00\"&" + // 0x22250338: 0x00002226
	"\"<\x038\x00\x00\"A" + // 0x223C0338: 0x00002241
	"\"C\x038\x00\x00\"D" + // 0x22430338: 0x00002244
	"\"E\x038\x00\x00\"G" + // 0x22450338: 0x00002247
	"\"H\x038\x00\x00\"I" + // 0x22480338: 0x00002249
	"\x00=\x038\x00\x00\"`" + // 0x003D0338: 0x00002260
	"\"a\x038\x00\x00\"b" + // 0x22610338: 0x00002262
	"\"M\x038\x00\x00\"m" + // 0x224D0338: 0x0000226D
	"\x00<\x038\x00\x00\"n" + // 0x003C0338: 0x0000226E
	"\x00>\x038\x00\x00\"o" + // 0x003E0338: 0x0000226F
	"\"d\x038\x00\x00\"p" + // 0x22640338: 0x00002270
	"\"e\x038\x00\x00\"q" + // 0x22650338: 0x00002271
	"\"r\x038\x00\x00\"t" + // 0x22720338: 0x00002274
	"\"s\x038\x00\x00\"u" + // 0x22730338: 0x00002275
	"\"v\x038\x00\x00\"x" + // 0x22760338: 0x00002278
	"\"w\x038\x00\x00\"y" + // 0x22770338: 0x00002279
	"\"z\x038\x00\x00\"\x80" + // 0x227A0338: 0x00002280
	"\"{\x038\x00\x00\"\x81" + // 0x227B0338: 0x00002281
	"\"\x82\x038\x00\x00\"\x84" + // 0x22820338: 0x00002284
	"\"\x83\x038\x00\x00\"\x85" + // 0x22830338: 0x00002285
	"\"\x86\x038\x00\x00\"\x88" + // 0x22860338: 0x00002288
	"\"\x87\x038\x00\x00\"\x89" + // 0x22870338: 0x00002289
	"\"\xa2\x038\x00\x00\"\xac" + // 0x22A20338: 0x000022AC
	"\"\xa8\x038\x00\x00\"\xad" + // 0x22A80338: 0x000022AD
	"\"\xa9\x038\x00\x00\"\xae" + // 0x22A90338: 0x000022AE
	"\"\xab\x038\x00\x00\"\xaf" + // 0x22AB0338: 0x000022AF
	"\"|\x038\x00\x00\"\xe0" + // 0x227C0338: 0x000022E0
	"\"}\x038\x00\x00\"\xe1" + // 0x227D0338: 0x000022E1
	"\"\x91\x038\x00\x00\"\xe2" + // 0x22910338: 0x000022E2
	"\"\x92\x038\x00\x00\"\xe3" + // 0x22920338: 0x000022E3
	"\"\xb2\x038\x00\x00\"\xea" + // 0x22B20338: 0x000022EA
	"\"\xb3\x038\x00\x00\"\xeb" + // 0x22B30338: 0x000022EB
	"\"\xb4\x038\x00\x00\"\xec" + // 0x22B40338: 0x000022EC
	"\"\xb5\x038\x00\x00\"\xed" + // 0x22B50338: 0x000022ED
	"0K0\x99\x00\x000L" + // 0x304B3099: 0x0000304C
	"0M0\x99\x00\x000N" + // 0x304D3099: 0x0000304E
	"0O0\x99\x00\x000P" + // 0x304F3099: 0x00003050
	"0Q0\x99\x00\x000R" + // 0x30513099: 0x00003052
	"0S0\x99\x00\x000T" + // 0x30533099: 0x00003054
	"0U0\x99\x00\x000V" + // 0x30553099: 0x00003056
	"0W0\x99\x00\x000X" + // 0x30573099: 0x00003058
	"0Y0\x99\x00\x000Z" + // 0x30593099: 0x0000305A
	"0[0\x99\x00\x000\\" + // 0x305B3099: 0x0000305C
	"0]0\x99\x00\x000^" + // 0x305D3099: 0x0000305E
	"0_0\x99\x00\x000`" + // 0x305F3099: 0x00003060
	"0a0\x99\x00\x000b" + // 0x30613099: 0x00003062
	"0d0\x99\x00\x000e" + // 0x30643099: 0x00003065
	"0f0\x99\x00\x000g" + // 0x30663099: 0x00003067
	"0h0\x99\x00\x000i" + // 0x30683099: 0x00003069
	"0o0\x99\x00\x000p" + // 0x306F3099: 0x00003070
	"0o0\x9a\x00\x000q" + // 0x306F309A: 0x00003071
	"0r0\x99\x00\x000s" + // 0x30723099: 0x00003073
	"0r0\x9a\x00\x000t" + // 0x3072309A: 0x00003074
	"0u0\x99\x00\x000v" + // 0x30753099: 0x00003076
	"0u0\x9a\x00\x000w" + // 0x3075309A: 0x00003077
	"0x0\x99\x00\x000y" + // 0x30783099: 0x00003079
	"0x0\x9a\x00\x000z" + // 0x3078309A: 0x0000307A
	"0{0\x99\x00\x000|" + // 0x307B3099: 0x0000307C
	"0{0\x9a\x00\x000}" + // 0x307B309A: 0x0000307D
	"0F0\x99\x00\x000\x94" + // 0x30463099: 0x00003094
	"0\x9d0\x99\x00\x000\x9e" + // 0x309D3099: 0x0000309E
	"0\xab0\x99\x00\x000\xac" + // 0x30AB3099: 0x000030AC
	"0\xad0\x99\x00\x000\xae" + // 0x30AD3099: 0x000030AE
	"0\xaf0\x99\x00\x000\xb0" + // 0x30AF3099: 0x000030B0
	"0\xb10\x99\x00\x000\xb2" + // 0x30B13099: 0x000030B2
	"0\xb30\x99\x00\x000\xb4" + // 0x30B33099: 0x000030B4
	"0\xb50\x99\x00\x000\xb6" + // 0x30B53099: 0x000030B6
	"0\xb70\x99\x00\x000\xb8" + // 0x30B73099: 0x000030B8
	"0\xb90\x99\x00\x000\xba" + // 0x30B93099: 0x000030BA
	"0\xbb0\x99\x00\x000\xbc" + // 0x30BB3099: 0x000030BC
	"0\xbd0\x99\x00\x000\xbe" + // 0x30BD3099: 0x000030BE
	"0\xbf0\x99\x00\x000\xc0" + // 0x30BF3099: 0x000030C0
	"0\xc10\x99\x00\x000\xc2" + // 0x30C13099: 0x000030C2
	"0\xc40\x99\x00\x000\xc5" + // 0x30C43099: 0x000030C5
	"0\xc60\x99\x00\x000\xc7" + // 0x30C63099: 0x000030C7
	"0\xc80\x99\x00\x000\xc9" + // 0x30C83099: 0x000030C9
	"0\xcf0\x99\x00\x000\xd0" + // 0x30CF3099: 0x000030D0
	"0\xcf0\x9a\x00\x000\xd1" + // 0x30CF309A: 0x000030D1
	"0\xd20\x99\x00\x000\xd3" + // 0x30D23099: 0x000030D3
	"0\xd20\x9a\x00\x000\xd4" + // 0x30D2309A: 0x000030D4
	"0\xd50\x99\x00\x000\xd6" + // 0x30D53099: 0x000030D6
	"0\xd50\x9a\x00\x000\xd7" + // 0x30D5309A: 0x000030D7
	"0\xd80\x99\x00\x000\xd9" + // 0x30D83099: 0x000030D9
	"0\xd80\x9a\x00\x000\xda" + // 0x30D8309A: 0x000030DA
	"0\xdb0\x99\x00\x000\xdc" + // 0x30DB3099: 0x000030DC
	"0\xdb0\x9a\x00\x000\xdd" + // 0x30DB309A: 0x000030DD
	"0\xa60\x99\x00\x000\xf4" + // 0x30A63099: 0x000030F4
	"0\xef0\x99\x00\x000\xf7" + // 0x30EF3099: 0x000030F7
	"0\xf00\x99\x00\x000\xf8" + // 0x30F03099: 0x000030F8
	"0\xf10\x99\x00\x000\xf9" + // 0x30F13099: 0x000030F9
	"0\xf20\x99\x00\x000\xfa" + // 0x30F23099: 0x000030FA
	"0\xfd0\x99\x00\x000\xfe" + // 0x30FD3099: 0x000030FE
	"\x10\x99\x10\xba\x00\x01\x10\x9a" + // 0x109910BA: 0x0001109A
	"\x10\x9b\x10\xba\x00\x01\x10\x9c" + // 0x109B10BA: 0x0001109C
	"\x10\xa5\x10\xba\x00\x01\x10\xab" + // 0x10A510BA: 0x000110AB
	"\x111\x11'\x00\x01\x11." + // 0x11311127: 0x0001112E
	"\x112\x11'\x00\x01\x11/" + // 0x11321127: 0x0001112F
	"\x13G\x13>\x00\x01\x13K" + // 0x1347133E: 0x0001134B
	"\x13G\x13W\x00\x01\x13L" + // 0x13471357: 0x0001134C
	"\x14\xb9\x14\xba\x00\x01\x14\xbb" + // 0x14B914BA: 0x000114BB
	"\x14\xb9\x14\xb0\x00\x01\x14\xbc" + // 0x14B914B0: 0x000114BC
	"\x14\xb9\x14\xbd\x00\x01\x14\xbe" + // 0x14B914BD: 0x000114BE
	"\x15\xb8\x15\xaf\x00\x01\x15\xba" + // 0x15B815AF: 0x000115BA
	"\x15\xb9\x15\xaf\x00\x01\x15\xbb" + // 0x15B915AF: 0x000115BB
	"\x195\x190\x00\x01\x198" + // 0x19351930: 0x00011938
	""
	// Total size of tables: 55KB (56160 bytes)
 07070100000F45000081A4000000000000000000000001645E367C0005D1FC000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/text/unicode/norm/tables9.0.0.go  // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.

//go:build !go1.10
// +build !go1.10

package norm

import "sync"

const (
	// Version is the Unicode edition from which the tables are derived.
	Version = "9.0.0"

	// MaxTransformChunkSize indicates the maximum number of bytes that Transform
	// may need to write atomically for any Form. Making a destination buffer at
	// least this size ensures that Transform can always make progress and that
	// the user does not need to grow the buffer on an ErrShortDst.
	MaxTransformChunkSize = 35 + maxNonStarters*4
)

var ccc = [55]uint8{
	0, 1, 7, 8, 9, 10, 11, 12,
	13, 14, 15, 16, 17, 18, 19, 20,
	21, 22, 23, 24, 25, 26, 27, 28,
	29, 30, 31, 32, 33, 34, 35, 36,
	84, 91, 103, 107, 118, 122, 129, 130,
	132, 202, 214, 216, 218, 220, 222, 224,
	226, 228, 230, 232, 233, 234, 240,
}

const (
	firstMulti            = 0x186D
	firstCCC              = 0x2C9E
	endMulti              = 0x2F60
	firstLeadingCCC       = 0x49AE
	firstCCCZeroExcept    = 0x4A78
	firstStarterWithNLead = 0x4A9F
	lastDecomp            = 0x4AA1
	maxDecomp             = 0x8000
)

// decomps: 19105 bytes
var decomps = [...]byte{
	// Bytes 0 - 3f
	0x00, 0x41, 0x20, 0x41, 0x21, 0x41, 0x22, 0x41,
	0x23, 0x41, 0x24, 0x41, 0x25, 0x41, 0x26, 0x41,
	0x27, 0x41, 0x28, 0x41, 0x29, 0x41, 0x2A, 0x41,
	0x2B, 0x41, 0x2C, 0x41, 0x2D, 0x41, 0x2E, 0x41,
	0x2F, 0x41, 0x30, 0x41, 0x31, 0x41, 0x32, 0x41,
	0x33, 0x41, 0x34, 0x41, 0x35, 0x41, 0x36, 0x41,
	0x37, 0x41, 0x38, 0x41, 0x39, 0x41, 0x3A, 0x41,
	0x3B, 0x41, 0x3C, 0x41, 0x3D, 0x41, 0x3E, 0x41,
	// Bytes 40 - 7f
	0x3F, 0x41, 0x40, 0x41, 0x41, 0x41, 0x42, 0x41,
	0x43, 0x41, 0x44, 0x41, 0x45, 0x41, 0x46, 0x41,
	0x47, 0x41, 0x48, 0x41, 0x49, 0x41, 0x4A, 0x41,
	0x4B, 0x41, 0x4C, 0x41, 0x4D, 0x41, 0x4E, 0x41,
	0x4F, 0x41, 0x50, 0x41, 0x51, 0x41, 0x52, 0x41,
	0x53, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41,
	0x57, 0x41, 0x58, 0x41, 0x59, 0x41, 0x5A, 0x41,
	0x5B, 0x41, 0x5C, 0x41, 0x5D, 0x41, 0x5E, 0x41,
	// Bytes 80 - bf
	0x5F, 0x41, 0x60, 0x41, 0x61, 0x41, 0x62, 0x41,
	0x63, 0x41, 0x64, 0x41, 0x65, 0x41, 0x66, 0x41,
	0x67, 0x41, 0x68, 0x41, 0x69, 0x41, 0x6A, 0x41,
	0x6B, 0x41, 0x6C, 0x41, 0x6D, 0x41, 0x6E, 0x41,
	0x6F, 0x41, 0x70, 0x41, 0x71, 0x41, 0x72, 0x41,
	0x73, 0x41, 0x74, 0x41, 0x75, 0x41, 0x76, 0x41,
	0x77, 0x41, 0x78, 0x41, 0x79, 0x41, 0x7A, 0x41,
	0x7B, 0x41, 0x7C, 0x41, 0x7D, 0x41, 0x7E, 0x42,
	// Bytes c0 - ff
	0xC2, 0xA2, 0x42, 0xC2, 0xA3, 0x42, 0xC2, 0xA5,
	0x42, 0xC2, 0xA6, 0x42, 0xC2, 0xAC, 0x42, 0xC2,
	0xB7, 0x42, 0xC3, 0x86, 0x42, 0xC3, 0xB0, 0x42,
	0xC4, 0xA6, 0x42, 0xC4, 0xA7, 0x42, 0xC4, 0xB1,
	0x42, 0xC5, 0x8B, 0x42, 0xC5, 0x93, 0x42, 0xC6,
	0x8E, 0x42, 0xC6, 0x90, 0x42, 0xC6, 0xAB, 0x42,
	0xC8, 0xA2, 0x42, 0xC8, 0xB7, 0x42, 0xC9, 0x90,
	0x42, 0xC9, 0x91, 0x42, 0xC9, 0x92, 0x42, 0xC9,
	// Bytes 100 - 13f
	0x94, 0x42, 0xC9, 0x95, 0x42, 0xC9, 0x99, 0x42,
	0xC9, 0x9B, 0x42, 0xC9, 0x9C, 0x42, 0xC9, 0x9F,
	0x42, 0xC9, 0xA1, 0x42, 0xC9, 0xA3, 0x42, 0xC9,
	0xA5, 0x42, 0xC9, 0xA6, 0x42, 0xC9, 0xA8, 0x42,
	0xC9, 0xA9, 0x42, 0xC9, 0xAA, 0x42, 0xC9, 0xAB,
	0x42, 0xC9, 0xAD, 0x42, 0xC9, 0xAF, 0x42, 0xC9,
	0xB0, 0x42, 0xC9, 0xB1, 0x42, 0xC9, 0xB2, 0x42,
	0xC9, 0xB3, 0x42, 0xC9, 0xB4, 0x42, 0xC9, 0xB5,
	// Bytes 140 - 17f
	0x42, 0xC9, 0xB8, 0x42, 0xC9, 0xB9, 0x42, 0xC9,
	0xBB, 0x42, 0xCA, 0x81, 0x42, 0xCA, 0x82, 0x42,
	0xCA, 0x83, 0x42, 0xCA, 0x89, 0x42, 0xCA, 0x8A,
	0x42, 0xCA, 0x8B, 0x42, 0xCA, 0x8C, 0x42, 0xCA,
	0x90, 0x42, 0xCA, 0x91, 0x42, 0xCA, 0x92, 0x42,
	0xCA, 0x95, 0x42, 0xCA, 0x9D, 0x42, 0xCA, 0x9F,
	0x42, 0xCA, 0xB9, 0x42, 0xCE, 0x91, 0x42, 0xCE,
	0x92, 0x42, 0xCE, 0x93, 0x42, 0xCE, 0x94, 0x42,
	// Bytes 180 - 1bf
	0xCE, 0x95, 0x42, 0xCE, 0x96, 0x42, 0xCE, 0x97,
	0x42, 0xCE, 0x98, 0x42, 0xCE, 0x99, 0x42, 0xCE,
	0x9A, 0x42, 0xCE, 0x9B, 0x42, 0xCE, 0x9C, 0x42,
	0xCE, 0x9D, 0x42, 0xCE, 0x9E, 0x42, 0xCE, 0x9F,
	0x42, 0xCE, 0xA0, 0x42, 0xCE, 0xA1, 0x42, 0xCE,
	0xA3, 0x42, 0xCE, 0xA4, 0x42, 0xCE, 0xA5, 0x42,
	0xCE, 0xA6, 0x42, 0xCE, 0xA7, 0x42, 0xCE, 0xA8,
	0x42, 0xCE, 0xA9, 0x42, 0xCE, 0xB1, 0x42, 0xCE,
	// Bytes 1c0 - 1ff
	0xB2, 0x42, 0xCE, 0xB3, 0x42, 0xCE, 0xB4, 0x42,
	0xCE, 0xB5, 0x42, 0xCE, 0xB6, 0x42, 0xCE, 0xB7,
	0x42, 0xCE, 0xB8, 0x42, 0xCE, 0xB9, 0x42, 0xCE,
	0xBA, 0x42, 0xCE, 0xBB, 0x42, 0xCE, 0xBC, 0x42,
	0xCE, 0xBD, 0x42, 0xCE, 0xBE, 0x42, 0xCE, 0xBF,
	0x42, 0xCF, 0x80, 0x42, 0xCF, 0x81, 0x42, 0xCF,
	0x82, 0x42, 0xCF, 0x83, 0x42, 0xCF, 0x84, 0x42,
	0xCF, 0x85, 0x42, 0xCF, 0x86, 0x42, 0xCF, 0x87,
	// Bytes 200 - 23f
	0x42, 0xCF, 0x88, 0x42, 0xCF, 0x89, 0x42, 0xCF,
	0x9C, 0x42, 0xCF, 0x9D, 0x42, 0xD0, 0xBD, 0x42,
	0xD1, 0x8A, 0x42, 0xD1, 0x8C, 0x42, 0xD7, 0x90,
	0x42, 0xD7, 0x91, 0x42, 0xD7, 0x92, 0x42, 0xD7,
	0x93, 0x42, 0xD7, 0x94, 0x42, 0xD7, 0x9B, 0x42,
	0xD7, 0x9C, 0x42, 0xD7, 0x9D, 0x42, 0xD7, 0xA2,
	0x42, 0xD7, 0xA8, 0x42, 0xD7, 0xAA, 0x42, 0xD8,
	0xA1, 0x42, 0xD8, 0xA7, 0x42, 0xD8, 0xA8, 0x42,
	// Bytes 240 - 27f
	0xD8, 0xA9, 0x42, 0xD8, 0xAA, 0x42, 0xD8, 0xAB,
	0x42, 0xD8, 0xAC, 0x42, 0xD8, 0xAD, 0x42, 0xD8,
	0xAE, 0x42, 0xD8, 0xAF, 0x42, 0xD8, 0xB0, 0x42,
	0xD8, 0xB1, 0x42, 0xD8, 0xB2, 0x42, 0xD8, 0xB3,
	0x42, 0xD8, 0xB4, 0x42, 0xD8, 0xB5, 0x42, 0xD8,
	0xB6, 0x42, 0xD8, 0xB7, 0x42, 0xD8, 0xB8, 0x42,
	0xD8, 0xB9, 0x42, 0xD8, 0xBA, 0x42, 0xD9, 0x81,
	0x42, 0xD9, 0x82, 0x42, 0xD9, 0x83, 0x42, 0xD9,
	// Bytes 280 - 2bf
	0x84, 0x42, 0xD9, 0x85, 0x42, 0xD9, 0x86, 0x42,
	0xD9, 0x87, 0x42, 0xD9, 0x88, 0x42, 0xD9, 0x89,
	0x42, 0xD9, 0x8A, 0x42, 0xD9, 0xAE, 0x42, 0xD9,
	0xAF, 0x42, 0xD9, 0xB1, 0x42, 0xD9, 0xB9, 0x42,
	0xD9, 0xBA, 0x42, 0xD9, 0xBB, 0x42, 0xD9, 0xBE,
	0x42, 0xD9, 0xBF, 0x42, 0xDA, 0x80, 0x42, 0xDA,
	0x83, 0x42, 0xDA, 0x84, 0x42, 0xDA, 0x86, 0x42,
	0xDA, 0x87, 0x42, 0xDA, 0x88, 0x42, 0xDA, 0x8C,
	// Bytes 2c0 - 2ff
	0x42, 0xDA, 0x8D, 0x42, 0xDA, 0x8E, 0x42, 0xDA,
	0x91, 0x42, 0xDA, 0x98, 0x42, 0xDA, 0xA1, 0x42,
	0xDA, 0xA4, 0x42, 0xDA, 0xA6, 0x42, 0xDA, 0xA9,
	0x42, 0xDA, 0xAD, 0x42, 0xDA, 0xAF, 0x42, 0xDA,
	0xB1, 0x42, 0xDA, 0xB3, 0x42, 0xDA, 0xBA, 0x42,
	0xDA, 0xBB, 0x42, 0xDA, 0xBE, 0x42, 0xDB, 0x81,
	0x42, 0xDB, 0x85, 0x42, 0xDB, 0x86, 0x42, 0xDB,
	0x87, 0x42, 0xDB, 0x88, 0x42, 0xDB, 0x89, 0x42,
	// Bytes 300 - 33f
	0xDB, 0x8B, 0x42, 0xDB, 0x8C, 0x42, 0xDB, 0x90,
	0x42, 0xDB, 0x92, 0x43, 0xE0, 0xBC, 0x8B, 0x43,
	0xE1, 0x83, 0x9C, 0x43, 0xE1, 0x84, 0x80, 0x43,
	0xE1, 0x84, 0x81, 0x43, 0xE1, 0x84, 0x82, 0x43,
	0xE1, 0x84, 0x83, 0x43, 0xE1, 0x84, 0x84, 0x43,
	0xE1, 0x84, 0x85, 0x43, 0xE1, 0x84, 0x86, 0x43,
	0xE1, 0x84, 0x87, 0x43, 0xE1, 0x84, 0x88, 0x43,
	0xE1, 0x84, 0x89, 0x43, 0xE1, 0x84, 0x8A, 0x43,
	// Bytes 340 - 37f
	0xE1, 0x84, 0x8B, 0x43, 0xE1, 0x84, 0x8C, 0x43,
	0xE1, 0x84, 0x8D, 0x43, 0xE1, 0x84, 0x8E, 0x43,
	0xE1, 0x84, 0x8F, 0x43, 0xE1, 0x84, 0x90, 0x43,
	0xE1, 0x84, 0x91, 0x43, 0xE1, 0x84, 0x92, 0x43,
	0xE1, 0x84, 0x94, 0x43, 0xE1, 0x84, 0x95, 0x43,
	0xE1, 0x84, 0x9A, 0x43, 0xE1, 0x84, 0x9C, 0x43,
	0xE1, 0x84, 0x9D, 0x43, 0xE1, 0x84, 0x9E, 0x43,
	0xE1, 0x84, 0xA0, 0x43, 0xE1, 0x84, 0xA1, 0x43,
	// Bytes 380 - 3bf
	0xE1, 0x84, 0xA2, 0x43, 0xE1, 0x84, 0xA3, 0x43,
	0xE1, 0x84, 0xA7, 0x43, 0xE1, 0x84, 0xA9, 0x43,
	0xE1, 0x84, 0xAB, 0x43, 0xE1, 0x84, 0xAC, 0x43,
	0xE1, 0x84, 0xAD, 0x43, 0xE1, 0x84, 0xAE, 0x43,
	0xE1, 0x84, 0xAF, 0x43, 0xE1, 0x84, 0xB2, 0x43,
	0xE1, 0x84, 0xB6, 0x43, 0xE1, 0x85, 0x80, 0x43,
	0xE1, 0x85, 0x87, 0x43, 0xE1, 0x85, 0x8C, 0x43,
	0xE1, 0x85, 0x97, 0x43, 0xE1, 0x85, 0x98, 0x43,
	// Bytes 3c0 - 3ff
	0xE1, 0x85, 0x99, 0x43, 0xE1, 0x85, 0xA0, 0x43,
	0xE1, 0x86, 0x84, 0x43, 0xE1, 0x86, 0x85, 0x43,
	0xE1, 0x86, 0x88, 0x43, 0xE1, 0x86, 0x91, 0x43,
	0xE1, 0x86, 0x92, 0x43, 0xE1, 0x86, 0x94, 0x43,
	0xE1, 0x86, 0x9E, 0x43, 0xE1, 0x86, 0xA1, 0x43,
	0xE1, 0x87, 0x87, 0x43, 0xE1, 0x87, 0x88, 0x43,
	0xE1, 0x87, 0x8C, 0x43, 0xE1, 0x87, 0x8E, 0x43,
	0xE1, 0x87, 0x93, 0x43, 0xE1, 0x87, 0x97, 0x43,
	// Bytes 400 - 43f
	0xE1, 0x87, 0x99, 0x43, 0xE1, 0x87, 0x9D, 0x43,
	0xE1, 0x87, 0x9F, 0x43, 0xE1, 0x87, 0xB1, 0x43,
	0xE1, 0x87, 0xB2, 0x43, 0xE1, 0xB4, 0x82, 0x43,
	0xE1, 0xB4, 0x96, 0x43, 0xE1, 0xB4, 0x97, 0x43,
	0xE1, 0xB4, 0x9C, 0x43, 0xE1, 0xB4, 0x9D, 0x43,
	0xE1, 0xB4, 0xA5, 0x43, 0xE1, 0xB5, 0xBB, 0x43,
	0xE1, 0xB6, 0x85, 0x43, 0xE2, 0x80, 0x82, 0x43,
	0xE2, 0x80, 0x83, 0x43, 0xE2, 0x80, 0x90, 0x43,
	// Bytes 440 - 47f
	0xE2, 0x80, 0x93, 0x43, 0xE2, 0x80, 0x94, 0x43,
	0xE2, 0x82, 0xA9, 0x43, 0xE2, 0x86, 0x90, 0x43,
	0xE2, 0x86, 0x91, 0x43, 0xE2, 0x86, 0x92, 0x43,
	0xE2, 0x86, 0x93, 0x43, 0xE2, 0x88, 0x82, 0x43,
	0xE2, 0x88, 0x87, 0x43, 0xE2, 0x88, 0x91, 0x43,
	0xE2, 0x88, 0x92, 0x43, 0xE2, 0x94, 0x82, 0x43,
	0xE2, 0x96, 0xA0, 0x43, 0xE2, 0x97, 0x8B, 0x43,
	0xE2, 0xA6, 0x85, 0x43, 0xE2, 0xA6, 0x86, 0x43,
	// Bytes 480 - 4bf
	0xE2, 0xB5, 0xA1, 0x43, 0xE3, 0x80, 0x81, 0x43,
	0xE3, 0x80, 0x82, 0x43, 0xE3, 0x80, 0x88, 0x43,
	0xE3, 0x80, 0x89, 0x43, 0xE3, 0x80, 0x8A, 0x43,
	0xE3, 0x80, 0x8B, 0x43, 0xE3, 0x80, 0x8C, 0x43,
	0xE3, 0x80, 0x8D, 0x43, 0xE3, 0x80, 0x8E, 0x43,
	0xE3, 0x80, 0x8F, 0x43, 0xE3, 0x80, 0x90, 0x43,
	0xE3, 0x80, 0x91, 0x43, 0xE3, 0x80, 0x92, 0x43,
	0xE3, 0x80, 0x94, 0x43, 0xE3, 0x80, 0x95, 0x43,
	// Bytes 4c0 - 4ff
	0xE3, 0x80, 0x96, 0x43, 0xE3, 0x80, 0x97, 0x43,
	0xE3, 0x82, 0xA1, 0x43, 0xE3, 0x82, 0xA2, 0x43,
	0xE3, 0x82, 0xA3, 0x43, 0xE3, 0x82, 0xA4, 0x43,
	0xE3, 0x82, 0xA5, 0x43, 0xE3, 0x82, 0xA6, 0x43,
	0xE3, 0x82, 0xA7, 0x43, 0xE3, 0x82, 0xA8, 0x43,
	0xE3, 0x82, 0xA9, 0x43, 0xE3, 0x82, 0xAA, 0x43,
	0xE3, 0x82, 0xAB, 0x43, 0xE3, 0x82, 0xAD, 0x43,
	0xE3, 0x82, 0xAF, 0x43, 0xE3, 0x82, 0xB1, 0x43,
	// Bytes 500 - 53f
	0xE3, 0x82, 0xB3, 0x43, 0xE3, 0x82, 0xB5, 0x43,
	0xE3, 0x82, 0xB7, 0x43, 0xE3, 0x82, 0xB9, 0x43,
	0xE3, 0x82, 0xBB, 0x43, 0xE3, 0x82, 0xBD, 0x43,
	0xE3, 0x82, 0xBF, 0x43, 0xE3, 0x83, 0x81, 0x43,
	0xE3, 0x83, 0x83, 0x43, 0xE3, 0x83, 0x84, 0x43,
	0xE3, 0x83, 0x86, 0x43, 0xE3, 0x83, 0x88, 0x43,
	0xE3, 0x83, 0x8A, 0x43, 0xE3, 0x83, 0x8B, 0x43,
	0xE3, 0x83, 0x8C, 0x43, 0xE3, 0x83, 0x8D, 0x43,
	// Bytes 540 - 57f
	0xE3, 0x83, 0x8E, 0x43, 0xE3, 0x83, 0x8F, 0x43,
	0xE3, 0x83, 0x92, 0x43, 0xE3, 0x83, 0x95, 0x43,
	0xE3, 0x83, 0x98, 0x43, 0xE3, 0x83, 0x9B, 0x43,
	0xE3, 0x83, 0x9E, 0x43, 0xE3, 0x83, 0x9F, 0x43,
	0xE3, 0x83, 0xA0, 0x43, 0xE3, 0x83, 0xA1, 0x43,
	0xE3, 0x83, 0xA2, 0x43, 0xE3, 0x83, 0xA3, 0x43,
	0xE3, 0x83, 0xA4, 0x43, 0xE3, 0x83, 0xA5, 0x43,
	0xE3, 0x83, 0xA6, 0x43, 0xE3, 0x83, 0xA7, 0x43,
	// Bytes 580 - 5bf
	0xE3, 0x83, 0xA8, 0x43, 0xE3, 0x83, 0xA9, 0x43,
	0xE3, 0x83, 0xAA, 0x43, 0xE3, 0x83, 0xAB, 0x43,
	0xE3, 0x83, 0xAC, 0x43, 0xE3, 0x83, 0xAD, 0x43,
	0xE3, 0x83, 0xAF, 0x43, 0xE3, 0x83, 0xB0, 0x43,
	0xE3, 0x83, 0xB1, 0x43, 0xE3, 0x83, 0xB2, 0x43,
	0xE3, 0x83, 0xB3, 0x43, 0xE3, 0x83, 0xBB, 0x43,
	0xE3, 0x83, 0xBC, 0x43, 0xE3, 0x92, 0x9E, 0x43,
	0xE3, 0x92, 0xB9, 0x43, 0xE3, 0x92, 0xBB, 0x43,
	// Bytes 5c0 - 5ff
	0xE3, 0x93, 0x9F, 0x43, 0xE3, 0x94, 0x95, 0x43,
	0xE3, 0x9B, 0xAE, 0x43, 0xE3, 0x9B, 0xBC, 0x43,
	0xE3, 0x9E, 0x81, 0x43, 0xE3, 0xA0, 0xAF, 0x43,
	0xE3, 0xA1, 0xA2, 0x43, 0xE3, 0xA1, 0xBC, 0x43,
	0xE3, 0xA3, 0x87, 0x43, 0xE3, 0xA3, 0xA3, 0x43,
	0xE3, 0xA4, 0x9C, 0x43, 0xE3, 0xA4, 0xBA, 0x43,
	0xE3, 0xA8, 0xAE, 0x43, 0xE3, 0xA9, 0xAC, 0x43,
	0xE3, 0xAB, 0xA4, 0x43, 0xE3, 0xAC, 0x88, 0x43,
	// Bytes 600 - 63f
	0xE3, 0xAC, 0x99, 0x43, 0xE3, 0xAD, 0x89, 0x43,
	0xE3, 0xAE, 0x9D, 0x43, 0xE3, 0xB0, 0x98, 0x43,
	0xE3, 0xB1, 0x8E, 0x43, 0xE3, 0xB4, 0xB3, 0x43,
	0xE3, 0xB6, 0x96, 0x43, 0xE3, 0xBA, 0xAC, 0x43,
	0xE3, 0xBA, 0xB8, 0x43, 0xE3, 0xBC, 0x9B, 0x43,
	0xE3, 0xBF, 0xBC, 0x43, 0xE4, 0x80, 0x88, 0x43,
	0xE4, 0x80, 0x98, 0x43, 0xE4, 0x80, 0xB9, 0x43,
	0xE4, 0x81, 0x86, 0x43, 0xE4, 0x82, 0x96, 0x43,
	// Bytes 640 - 67f
	0xE4, 0x83, 0xA3, 0x43, 0xE4, 0x84, 0xAF, 0x43,
	0xE4, 0x88, 0x82, 0x43, 0xE4, 0x88, 0xA7, 0x43,
	0xE4, 0x8A, 0xA0, 0x43, 0xE4, 0x8C, 0x81, 0x43,
	0xE4, 0x8C, 0xB4, 0x43, 0xE4, 0x8D, 0x99, 0x43,
	0xE4, 0x8F, 0x95, 0x43, 0xE4, 0x8F, 0x99, 0x43,
	0xE4, 0x90, 0x8B, 0x43, 0xE4, 0x91, 0xAB, 0x43,
	0xE4, 0x94, 0xAB, 0x43, 0xE4, 0x95, 0x9D, 0x43,
	0xE4, 0x95, 0xA1, 0x43, 0xE4, 0x95, 0xAB, 0x43,
	// Bytes 680 - 6bf
	0xE4, 0x97, 0x97, 0x43, 0xE4, 0x97, 0xB9, 0x43,
	0xE4, 0x98, 0xB5, 0x43, 0xE4, 0x9A, 0xBE, 0x43,
	0xE4, 0x9B, 0x87, 0x43, 0xE4, 0xA6, 0x95, 0x43,
	0xE4, 0xA7, 0xA6, 0x43, 0xE4, 0xA9, 0xAE, 0x43,
	0xE4, 0xA9, 0xB6, 0x43, 0xE4, 0xAA, 0xB2, 0x43,
	0xE4, 0xAC, 0xB3, 0x43, 0xE4, 0xAF, 0x8E, 0x43,
	0xE4, 0xB3, 0x8E, 0x43, 0xE4, 0xB3, 0xAD, 0x43,
	0xE4, 0xB3, 0xB8, 0x43, 0xE4, 0xB5, 0x96, 0x43,
	// Bytes 6c0 - 6ff
	0xE4, 0xB8, 0x80, 0x43, 0xE4, 0xB8, 0x81, 0x43,
	0xE4, 0xB8, 0x83, 0x43, 0xE4, 0xB8, 0x89, 0x43,
	0xE4, 0xB8, 0x8A, 0x43, 0xE4, 0xB8, 0x8B, 0x43,
	0xE4, 0xB8, 0x8D, 0x43, 0xE4, 0xB8, 0x99, 0x43,
	0xE4, 0xB8, 0xA6, 0x43, 0xE4, 0xB8, 0xA8, 0x43,
	0xE4, 0xB8, 0xAD, 0x43, 0xE4, 0xB8, 0xB2, 0x43,
	0xE4, 0xB8, 0xB6, 0x43, 0xE4, 0xB8, 0xB8, 0x43,
	0xE4, 0xB8, 0xB9, 0x43, 0xE4, 0xB8, 0xBD, 0x43,
	// Bytes 700 - 73f
	0xE4, 0xB8, 0xBF, 0x43, 0xE4, 0xB9, 0x81, 0x43,
	0xE4, 0xB9, 0x99, 0x43, 0xE4, 0xB9, 0x9D, 0x43,
	0xE4, 0xBA, 0x82, 0x43, 0xE4, 0xBA, 0x85, 0x43,
	0xE4, 0xBA, 0x86, 0x43, 0xE4, 0xBA, 0x8C, 0x43,
	0xE4, 0xBA, 0x94, 0x43, 0xE4, 0xBA, 0xA0, 0x43,
	0xE4, 0xBA, 0xA4, 0x43, 0xE4, 0xBA, 0xAE, 0x43,
	0xE4, 0xBA, 0xBA, 0x43, 0xE4, 0xBB, 0x80, 0x43,
	0xE4, 0xBB, 0x8C, 0x43, 0xE4, 0xBB, 0xA4, 0x43,
	// Bytes 740 - 77f
	0xE4, 0xBC, 0x81, 0x43, 0xE4, 0xBC, 0x91, 0x43,
	0xE4, 0xBD, 0xA0, 0x43, 0xE4, 0xBE, 0x80, 0x43,
	0xE4, 0xBE, 0x86, 0x43, 0xE4, 0xBE, 0x8B, 0x43,
	0xE4, 0xBE, 0xAE, 0x43, 0xE4, 0xBE, 0xBB, 0x43,
	0xE4, 0xBE, 0xBF, 0x43, 0xE5, 0x80, 0x82, 0x43,
	0xE5, 0x80, 0xAB, 0x43, 0xE5, 0x81, 0xBA, 0x43,
	0xE5, 0x82, 0x99, 0x43, 0xE5, 0x83, 0x8F, 0x43,
	0xE5, 0x83, 0x9A, 0x43, 0xE5, 0x83, 0xA7, 0x43,
	// Bytes 780 - 7bf
	0xE5, 0x84, 0xAA, 0x43, 0xE5, 0x84, 0xBF, 0x43,
	0xE5, 0x85, 0x80, 0x43, 0xE5, 0x85, 0x85, 0x43,
	0xE5, 0x85, 0x8D, 0x43, 0xE5, 0x85, 0x94, 0x43,
	0xE5, 0x85, 0xA4, 0x43, 0xE5, 0x85, 0xA5, 0x43,
	0xE5, 0x85, 0xA7, 0x43, 0xE5, 0x85, 0xA8, 0x43,
	0xE5, 0x85, 0xA9, 0x43, 0xE5, 0x85, 0xAB, 0x43,
	0xE5, 0x85, 0xAD, 0x43, 0xE5, 0x85, 0xB7, 0x43,
	0xE5, 0x86, 0x80, 0x43, 0xE5, 0x86, 0x82, 0x43,
	// Bytes 7c0 - 7ff
	0xE5, 0x86, 0x8D, 0x43, 0xE5, 0x86, 0x92, 0x43,
	0xE5, 0x86, 0x95, 0x43, 0xE5, 0x86, 0x96, 0x43,
	0xE5, 0x86, 0x97, 0x43, 0xE5, 0x86, 0x99, 0x43,
	0xE5, 0x86, 0xA4, 0x43, 0xE5, 0x86, 0xAB, 0x43,
	0xE5, 0x86, 0xAC, 0x43, 0xE5, 0x86, 0xB5, 0x43,
	0xE5, 0x86, 0xB7, 0x43, 0xE5, 0x87, 0x89, 0x43,
	0xE5, 0x87, 0x8C, 0x43, 0xE5, 0x87, 0x9C, 0x43,
	0xE5, 0x87, 0x9E, 0x43, 0xE5, 0x87, 0xA0, 0x43,
	// Bytes 800 - 83f
	0xE5, 0x87, 0xB5, 0x43, 0xE5, 0x88, 0x80, 0x43,
	0xE5, 0x88, 0x83, 0x43, 0xE5, 0x88, 0x87, 0x43,
	0xE5, 0x88, 0x97, 0x43, 0xE5, 0x88, 0x9D, 0x43,
	0xE5, 0x88, 0xA9, 0x43, 0xE5, 0x88, 0xBA, 0x43,
	0xE5, 0x88, 0xBB, 0x43, 0xE5, 0x89, 0x86, 0x43,
	0xE5, 0x89, 0x8D, 0x43, 0xE5, 0x89, 0xB2, 0x43,
	0xE5, 0x89, 0xB7, 0x43, 0xE5, 0x8A, 0x89, 0x43,
	0xE5, 0x8A, 0x9B, 0x43, 0xE5, 0x8A, 0xA3, 0x43,
	// Bytes 840 - 87f
	0xE5, 0x8A, 0xB3, 0x43, 0xE5, 0x8A, 0xB4, 0x43,
	0xE5, 0x8B, 0x87, 0x43, 0xE5, 0x8B, 0x89, 0x43,
	0xE5, 0x8B, 0x92, 0x43, 0xE5, 0x8B, 0x9E, 0x43,
	0xE5, 0x8B, 0xA4, 0x43, 0xE5, 0x8B, 0xB5, 0x43,
	0xE5, 0x8B, 0xB9, 0x43, 0xE5, 0x8B, 0xBA, 0x43,
	0xE5, 0x8C, 0x85, 0x43, 0xE5, 0x8C, 0x86, 0x43,
	0xE5, 0x8C, 0x95, 0x43, 0xE5, 0x8C, 0x97, 0x43,
	0xE5, 0x8C, 0x9A, 0x43, 0xE5, 0x8C, 0xB8, 0x43,
	// Bytes 880 - 8bf
	0xE5, 0x8C, 0xBB, 0x43, 0xE5, 0x8C, 0xBF, 0x43,
	0xE5, 0x8D, 0x81, 0x43, 0xE5, 0x8D, 0x84, 0x43,
	0xE5, 0x8D, 0x85, 0x43, 0xE5, 0x8D, 0x89, 0x43,
	0xE5, 0x8D, 0x91, 0x43, 0xE5, 0x8D, 0x94, 0x43,
	0xE5, 0x8D, 0x9A, 0x43, 0xE5, 0x8D, 0x9C, 0x43,
	0xE5, 0x8D, 0xA9, 0x43, 0xE5, 0x8D, 0xB0, 0x43,
	0xE5, 0x8D, 0xB3, 0x43, 0xE5, 0x8D, 0xB5, 0x43,
	0xE5, 0x8D, 0xBD, 0x43, 0xE5, 0x8D, 0xBF, 0x43,
	// Bytes 8c0 - 8ff
	0xE5, 0x8E, 0x82, 0x43, 0xE5, 0x8E, 0xB6, 0x43,
	0xE5, 0x8F, 0x83, 0x43, 0xE5, 0x8F, 0x88, 0x43,
	0xE5, 0x8F, 0x8A, 0x43, 0xE5, 0x8F, 0x8C, 0x43,
	0xE5, 0x8F, 0x9F, 0x43, 0xE5, 0x8F, 0xA3, 0x43,
	0xE5, 0x8F, 0xA5, 0x43, 0xE5, 0x8F, 0xAB, 0x43,
	0xE5, 0x8F, 0xAF, 0x43, 0xE5, 0x8F, 0xB1, 0x43,
	0xE5, 0x8F, 0xB3, 0x43, 0xE5, 0x90, 0x86, 0x43,
	0xE5, 0x90, 0x88, 0x43, 0xE5, 0x90, 0x8D, 0x43,
	// Bytes 900 - 93f
	0xE5, 0x90, 0x8F, 0x43, 0xE5, 0x90, 0x9D, 0x43,
	0xE5, 0x90, 0xB8, 0x43, 0xE5, 0x90, 0xB9, 0x43,
	0xE5, 0x91, 0x82, 0x43, 0xE5, 0x91, 0x88, 0x43,
	0xE5, 0x91, 0xA8, 0x43, 0xE5, 0x92, 0x9E, 0x43,
	0xE5, 0x92, 0xA2, 0x43, 0xE5, 0x92, 0xBD, 0x43,
	0xE5, 0x93, 0xB6, 0x43, 0xE5, 0x94, 0x90, 0x43,
	0xE5, 0x95, 0x8F, 0x43, 0xE5, 0x95, 0x93, 0x43,
	0xE5, 0x95, 0x95, 0x43, 0xE5, 0x95, 0xA3, 0x43,
	// Bytes 940 - 97f
	0xE5, 0x96, 0x84, 0x43, 0xE5, 0x96, 0x87, 0x43,
	0xE5, 0x96, 0x99, 0x43, 0xE5, 0x96, 0x9D, 0x43,
	0xE5, 0x96, 0xAB, 0x43, 0xE5, 0x96, 0xB3, 0x43,
	0xE5, 0x96, 0xB6, 0x43, 0xE5, 0x97, 0x80, 0x43,
	0xE5, 0x97, 0x82, 0x43, 0xE5, 0x97, 0xA2, 0x43,
	0xE5, 0x98, 0x86, 0x43, 0xE5, 0x99, 0x91, 0x43,
	0xE5, 0x99, 0xA8, 0x43, 0xE5, 0x99, 0xB4, 0x43,
	0xE5, 0x9B, 0x97, 0x43, 0xE5, 0x9B, 0x9B, 0x43,
	// Bytes 980 - 9bf
	0xE5, 0x9B, 0xB9, 0x43, 0xE5, 0x9C, 0x96, 0x43,
	0xE5, 0x9C, 0x97, 0x43, 0xE5, 0x9C, 0x9F, 0x43,
	0xE5, 0x9C, 0xB0, 0x43, 0xE5, 0x9E, 0x8B, 0x43,
	0xE5, 0x9F, 0x8E, 0x43, 0xE5, 0x9F, 0xB4, 0x43,
	0xE5, 0xA0, 0x8D, 0x43, 0xE5, 0xA0, 0xB1, 0x43,
	0xE5, 0xA0, 0xB2, 0x43, 0xE5, 0xA1, 0x80, 0x43,
	0xE5, 0xA1, 0x9A, 0x43, 0xE5, 0xA1, 0x9E, 0x43,
	0xE5, 0xA2, 0xA8, 0x43, 0xE5, 0xA2, 0xAC, 0x43,
	// Bytes 9c0 - 9ff
	0xE5, 0xA2, 0xB3, 0x43, 0xE5, 0xA3, 0x98, 0x43,
	0xE5, 0xA3, 0x9F, 0x43, 0xE5, 0xA3, 0xAB, 0x43,
	0xE5, 0xA3, 0xAE, 0x43, 0xE5, 0xA3, 0xB0, 0x43,
	0xE5, 0xA3, 0xB2, 0x43, 0xE5, 0xA3, 0xB7, 0x43,
	0xE5, 0xA4, 0x82, 0x43, 0xE5, 0xA4, 0x86, 0x43,
	0xE5, 0xA4, 0x8A, 0x43, 0xE5, 0xA4, 0x95, 0x43,
	0xE5, 0xA4, 0x9A, 0x43, 0xE5, 0xA4, 0x9C, 0x43,
	0xE5, 0xA4, 0xA2, 0x43, 0xE5, 0xA4, 0xA7, 0x43,
	// Bytes a00 - a3f
	0xE5, 0xA4, 0xA9, 0x43, 0xE5, 0xA5, 0x84, 0x43,
	0xE5, 0xA5, 0x88, 0x43, 0xE5, 0xA5, 0x91, 0x43,
	0xE5, 0xA5, 0x94, 0x43, 0xE5, 0xA5, 0xA2, 0x43,
	0xE5, 0xA5, 0xB3, 0x43, 0xE5, 0xA7, 0x98, 0x43,
	0xE5, 0xA7, 0xAC, 0x43, 0xE5, 0xA8, 0x9B, 0x43,
	0xE5, 0xA8, 0xA7, 0x43, 0xE5, 0xA9, 0xA2, 0x43,
	0xE5, 0xA9, 0xA6, 0x43, 0xE5, 0xAA, 0xB5, 0x43,
	0xE5, 0xAC, 0x88, 0x43, 0xE5, 0xAC, 0xA8, 0x43,
	// Bytes a40 - a7f
	0xE5, 0xAC, 0xBE, 0x43, 0xE5, 0xAD, 0x90, 0x43,
	0xE5, 0xAD, 0x97, 0x43, 0xE5, 0xAD, 0xA6, 0x43,
	0xE5, 0xAE, 0x80, 0x43, 0xE5, 0xAE, 0x85, 0x43,
	0xE5, 0xAE, 0x97, 0x43, 0xE5, 0xAF, 0x83, 0x43,
	0xE5, 0xAF, 0x98, 0x43, 0xE5, 0xAF, 0xA7, 0x43,
	0xE5, 0xAF, 0xAE, 0x43, 0xE5, 0xAF, 0xB3, 0x43,
	0xE5, 0xAF, 0xB8, 0x43, 0xE5, 0xAF, 0xBF, 0x43,
	0xE5, 0xB0, 0x86, 0x43, 0xE5, 0xB0, 0x8F, 0x43,
	// Bytes a80 - abf
	0xE5, 0xB0, 0xA2, 0x43, 0xE5, 0xB0, 0xB8, 0x43,
	0xE5, 0xB0, 0xBF, 0x43, 0xE5, 0xB1, 0xA0, 0x43,
	0xE5, 0xB1, 0xA2, 0x43, 0xE5, 0xB1, 0xA4, 0x43,
	0xE5, 0xB1, 0xA5, 0x43, 0xE5, 0xB1, 0xAE, 0x43,
	0xE5, 0xB1, 0xB1, 0x43, 0xE5, 0xB2, 0x8D, 0x43,
	0xE5, 0xB3, 0x80, 0x43, 0xE5, 0xB4, 0x99, 0x43,
	0xE5, 0xB5, 0x83, 0x43, 0xE5, 0xB5, 0x90, 0x43,
	0xE5, 0xB5, 0xAB, 0x43, 0xE5, 0xB5, 0xAE, 0x43,
	// Bytes ac0 - aff
	0xE5, 0xB5, 0xBC, 0x43, 0xE5, 0xB6, 0xB2, 0x43,
	0xE5, 0xB6, 0xBA, 0x43, 0xE5, 0xB7, 0x9B, 0x43,
	0xE5, 0xB7, 0xA1, 0x43, 0xE5, 0xB7, 0xA2, 0x43,
	0xE5, 0xB7, 0xA5, 0x43, 0xE5, 0xB7, 0xA6, 0x43,
	0xE5, 0xB7, 0xB1, 0x43, 0xE5, 0xB7, 0xBD, 0x43,
	0xE5, 0xB7, 0xBE, 0x43, 0xE5, 0xB8, 0xA8, 0x43,
	0xE5, 0xB8, 0xBD, 0x43, 0xE5, 0xB9, 0xA9, 0x43,
	0xE5, 0xB9, 0xB2, 0x43, 0xE5, 0xB9, 0xB4, 0x43,
	// Bytes b00 - b3f
	0xE5, 0xB9, 0xBA, 0x43, 0xE5, 0xB9, 0xBC, 0x43,
	0xE5, 0xB9, 0xBF, 0x43, 0xE5, 0xBA, 0xA6, 0x43,
	0xE5, 0xBA, 0xB0, 0x43, 0xE5, 0xBA, 0xB3, 0x43,
	0xE5, 0xBA, 0xB6, 0x43, 0xE5, 0xBB, 0x89, 0x43,
	0xE5, 0xBB, 0x8A, 0x43, 0xE5, 0xBB, 0x92, 0x43,
	0xE5, 0xBB, 0x93, 0x43, 0xE5, 0xBB, 0x99, 0x43,
	0xE5, 0xBB, 0xAC, 0x43, 0xE5, 0xBB, 0xB4, 0x43,
	0xE5, 0xBB, 0xBE, 0x43, 0xE5, 0xBC, 0x84, 0x43,
	// Bytes b40 - b7f
	0xE5, 0xBC, 0x8B, 0x43, 0xE5, 0xBC, 0x93, 0x43,
	0xE5, 0xBC, 0xA2, 0x43, 0xE5, 0xBD, 0x90, 0x43,
	0xE5, 0xBD, 0x93, 0x43, 0xE5, 0xBD, 0xA1, 0x43,
	0xE5, 0xBD, 0xA2, 0x43, 0xE5, 0xBD, 0xA9, 0x43,
	0xE5, 0xBD, 0xAB, 0x43, 0xE5, 0xBD, 0xB3, 0x43,
	0xE5, 0xBE, 0x8B, 0x43, 0xE5, 0xBE, 0x8C, 0x43,
	0xE5, 0xBE, 0x97, 0x43, 0xE5, 0xBE, 0x9A, 0x43,
	0xE5, 0xBE, 0xA9, 0x43, 0xE5, 0xBE, 0xAD, 0x43,
	// Bytes b80 - bbf
	0xE5, 0xBF, 0x83, 0x43, 0xE5, 0xBF, 0x8D, 0x43,
	0xE5, 0xBF, 0x97, 0x43, 0xE5, 0xBF, 0xB5, 0x43,
	0xE5, 0xBF, 0xB9, 0x43, 0xE6, 0x80, 0x92, 0x43,
	0xE6, 0x80, 0x9C, 0x43, 0xE6, 0x81, 0xB5, 0x43,
	0xE6, 0x82, 0x81, 0x43, 0xE6, 0x82, 0x94, 0x43,
	0xE6, 0x83, 0x87, 0x43, 0xE6, 0x83, 0x98, 0x43,
	0xE6, 0x83, 0xA1, 0x43, 0xE6, 0x84, 0x88, 0x43,
	0xE6, 0x85, 0x84, 0x43, 0xE6, 0x85, 0x88, 0x43,
	// Bytes bc0 - bff
	0xE6, 0x85, 0x8C, 0x43, 0xE6, 0x85, 0x8E, 0x43,
	0xE6, 0x85, 0xA0, 0x43, 0xE6, 0x85, 0xA8, 0x43,
	0xE6, 0x85, 0xBA, 0x43, 0xE6, 0x86, 0x8E, 0x43,
	0xE6, 0x86, 0x90, 0x43, 0xE6, 0x86, 0xA4, 0x43,
	0xE6, 0x86, 0xAF, 0x43, 0xE6, 0x86, 0xB2, 0x43,
	0xE6, 0x87, 0x9E, 0x43, 0xE6, 0x87, 0xB2, 0x43,
	0xE6, 0x87, 0xB6, 0x43, 0xE6, 0x88, 0x80, 0x43,
	0xE6, 0x88, 0x88, 0x43, 0xE6, 0x88, 0x90, 0x43,
	// Bytes c00 - c3f
	0xE6, 0x88, 0x9B, 0x43, 0xE6, 0x88, 0xAE, 0x43,
	0xE6, 0x88, 0xB4, 0x43, 0xE6, 0x88, 0xB6, 0x43,
	0xE6, 0x89, 0x8B, 0x43, 0xE6, 0x89, 0x93, 0x43,
	0xE6, 0x89, 0x9D, 0x43, 0xE6, 0x8A, 0x95, 0x43,
	0xE6, 0x8A, 0xB1, 0x43, 0xE6, 0x8B, 0x89, 0x43,
	0xE6, 0x8B, 0x8F, 0x43, 0xE6, 0x8B, 0x93, 0x43,
	0xE6, 0x8B, 0x94, 0x43, 0xE6, 0x8B, 0xBC, 0x43,
	0xE6, 0x8B, 0xBE, 0x43, 0xE6, 0x8C, 0x87, 0x43,
	// Bytes c40 - c7f
	0xE6, 0x8C, 0xBD, 0x43, 0xE6, 0x8D, 0x90, 0x43,
	0xE6, 0x8D, 0x95, 0x43, 0xE6, 0x8D, 0xA8, 0x43,
	0xE6, 0x8D, 0xBB, 0x43, 0xE6, 0x8E, 0x83, 0x43,
	0xE6, 0x8E, 0xA0, 0x43, 0xE6, 0x8E, 0xA9, 0x43,
	0xE6, 0x8F, 0x84, 0x43, 0xE6, 0x8F, 0x85, 0x43,
	0xE6, 0x8F, 0xA4, 0x43, 0xE6, 0x90, 0x9C, 0x43,
	0xE6, 0x90, 0xA2, 0x43, 0xE6, 0x91, 0x92, 0x43,
	0xE6, 0x91, 0xA9, 0x43, 0xE6, 0x91, 0xB7, 0x43,
	// Bytes c80 - cbf
	0xE6, 0x91, 0xBE, 0x43, 0xE6, 0x92, 0x9A, 0x43,
	0xE6, 0x92, 0x9D, 0x43, 0xE6, 0x93, 0x84, 0x43,
	0xE6, 0x94, 0xAF, 0x43, 0xE6, 0x94, 0xB4, 0x43,
	0xE6, 0x95, 0x8F, 0x43, 0xE6, 0x95, 0x96, 0x43,
	0xE6, 0x95, 0xAC, 0x43, 0xE6, 0x95, 0xB8, 0x43,
	0xE6, 0x96, 0x87, 0x43, 0xE6, 0x96, 0x97, 0x43,
	0xE6, 0x96, 0x99, 0x43, 0xE6, 0x96, 0xA4, 0x43,
	0xE6, 0x96, 0xB0, 0x43, 0xE6, 0x96, 0xB9, 0x43,
	// Bytes cc0 - cff
	0xE6, 0x97, 0x85, 0x43, 0xE6, 0x97, 0xA0, 0x43,
	0xE6, 0x97, 0xA2, 0x43, 0xE6, 0x97, 0xA3, 0x43,
	0xE6, 0x97, 0xA5, 0x43, 0xE6, 0x98, 0x93, 0x43,
	0xE6, 0x98, 0xA0, 0x43, 0xE6, 0x99, 0x89, 0x43,
	0xE6, 0x99, 0xB4, 0x43, 0xE6, 0x9A, 0x88, 0x43,
	0xE6, 0x9A, 0x91, 0x43, 0xE6, 0x9A, 0x9C, 0x43,
	0xE6, 0x9A, 0xB4, 0x43, 0xE6, 0x9B, 0x86, 0x43,
	0xE6, 0x9B, 0xB0, 0x43, 0xE6, 0x9B, 0xB4, 0x43,
	// Bytes d00 - d3f
	0xE6, 0x9B, 0xB8, 0x43, 0xE6, 0x9C, 0x80, 0x43,
	0xE6, 0x9C, 0x88, 0x43, 0xE6, 0x9C, 0x89, 0x43,
	0xE6, 0x9C, 0x97, 0x43, 0xE6, 0x9C, 0x9B, 0x43,
	0xE6, 0x9C, 0xA1, 0x43, 0xE6, 0x9C, 0xA8, 0x43,
	0xE6, 0x9D, 0x8E, 0x43, 0xE6, 0x9D, 0x93, 0x43,
	0xE6, 0x9D, 0x96, 0x43, 0xE6, 0x9D, 0x9E, 0x43,
	0xE6, 0x9D, 0xBB, 0x43, 0xE6, 0x9E, 0x85, 0x43,
	0xE6, 0x9E, 0x97, 0x43, 0xE6, 0x9F, 0xB3, 0x43,
	// Bytes d40 - d7f
	0xE6, 0x9F, 0xBA, 0x43, 0xE6, 0xA0, 0x97, 0x43,
	0xE6, 0xA0, 0x9F, 0x43, 0xE6, 0xA0, 0xAA, 0x43,
	0xE6, 0xA1, 0x92, 0x43, 0xE6, 0xA2, 0x81, 0x43,
	0xE6, 0xA2, 0x85, 0x43, 0xE6, 0xA2, 0x8E, 0x43,
	0xE6, 0xA2, 0xA8, 0x43, 0xE6, 0xA4, 0x94, 0x43,
	0xE6, 0xA5, 0x82, 0x43, 0xE6, 0xA6, 0xA3, 0x43,
	0xE6, 0xA7, 0xAA, 0x43, 0xE6, 0xA8, 0x82, 0x43,
	0xE6, 0xA8, 0x93, 0x43, 0xE6, 0xAA, 0xA8, 0x43,
	// Bytes d80 - dbf
	0xE6, 0xAB, 0x93, 0x43, 0xE6, 0xAB, 0x9B, 0x43,
	0xE6, 0xAC, 0x84, 0x43, 0xE6, 0xAC, 0xA0, 0x43,
	0xE6, 0xAC, 0xA1, 0x43, 0xE6, 0xAD, 0x94, 0x43,
	0xE6, 0xAD, 0xA2, 0x43, 0xE6, 0xAD, 0xA3, 0x43,
	0xE6, 0xAD, 0xB2, 0x43, 0xE6, 0xAD, 0xB7, 0x43,
	0xE6, 0xAD, 0xB9, 0x43, 0xE6, 0xAE, 0x9F, 0x43,
	0xE6, 0xAE, 0xAE, 0x43, 0xE6, 0xAE, 0xB3, 0x43,
	0xE6, 0xAE, 0xBA, 0x43, 0xE6, 0xAE, 0xBB, 0x43,
	// Bytes dc0 - dff
	0xE6, 0xAF, 0x8B, 0x43, 0xE6, 0xAF, 0x8D, 0x43,
	0xE6, 0xAF, 0x94, 0x43, 0xE6, 0xAF, 0x9B, 0x43,
	0xE6, 0xB0, 0x8F, 0x43, 0xE6, 0xB0, 0x94, 0x43,
	0xE6, 0xB0, 0xB4, 0x43, 0xE6, 0xB1, 0x8E, 0x43,
	0xE6, 0xB1, 0xA7, 0x43, 0xE6, 0xB2, 0x88, 0x43,
	0xE6, 0xB2, 0xBF, 0x43, 0xE6, 0xB3, 0x8C, 0x43,
	0xE6, 0xB3, 0x8D, 0x43, 0xE6, 0xB3, 0xA5, 0x43,
	0xE6, 0xB3, 0xA8, 0x43, 0xE6, 0xB4, 0x96, 0x43,
	// Bytes e00 - e3f
	0xE6, 0xB4, 0x9B, 0x43, 0xE6, 0xB4, 0x9E, 0x43,
	0xE6, 0xB4, 0xB4, 0x43, 0xE6, 0xB4, 0xBE, 0x43,
	0xE6, 0xB5, 0x81, 0x43, 0xE6, 0xB5, 0xA9, 0x43,
	0xE6, 0xB5, 0xAA, 0x43, 0xE6, 0xB5, 0xB7, 0x43,
	0xE6, 0xB5, 0xB8, 0x43, 0xE6, 0xB6, 0x85, 0x43,
	0xE6, 0xB7, 0x8B, 0x43, 0xE6, 0xB7, 0x9A, 0x43,
	0xE6, 0xB7, 0xAA, 0x43, 0xE6, 0xB7, 0xB9, 0x43,
	0xE6, 0xB8, 0x9A, 0x43, 0xE6, 0xB8, 0xAF, 0x43,
	// Bytes e40 - e7f
	0xE6, 0xB9, 0xAE, 0x43, 0xE6, 0xBA, 0x80, 0x43,
	0xE6, 0xBA, 0x9C, 0x43, 0xE6, 0xBA, 0xBA, 0x43,
	0xE6, 0xBB, 0x87, 0x43, 0xE6, 0xBB, 0x8B, 0x43,
	0xE6, 0xBB, 0x91, 0x43, 0xE6, 0xBB, 0x9B, 0x43,
	0xE6, 0xBC, 0x8F, 0x43, 0xE6, 0xBC, 0x94, 0x43,
	0xE6, 0xBC, 0xA2, 0x43, 0xE6, 0xBC, 0xA3, 0x43,
	0xE6, 0xBD, 0xAE, 0x43, 0xE6, 0xBF, 0x86, 0x43,
	0xE6, 0xBF, 0xAB, 0x43, 0xE6, 0xBF, 0xBE, 0x43,
	// Bytes e80 - ebf
	0xE7, 0x80, 0x9B, 0x43, 0xE7, 0x80, 0x9E, 0x43,
	0xE7, 0x80, 0xB9, 0x43, 0xE7, 0x81, 0x8A, 0x43,
	0xE7, 0x81, 0xAB, 0x43, 0xE7, 0x81, 0xB0, 0x43,
	0xE7, 0x81, 0xB7, 0x43, 0xE7, 0x81, 0xBD, 0x43,
	0xE7, 0x82, 0x99, 0x43, 0xE7, 0x82, 0xAD, 0x43,
	0xE7, 0x83, 0x88, 0x43, 0xE7, 0x83, 0x99, 0x43,
	0xE7, 0x84, 0xA1, 0x43, 0xE7, 0x85, 0x85, 0x43,
	0xE7, 0x85, 0x89, 0x43, 0xE7, 0x85, 0xAE, 0x43,
	// Bytes ec0 - eff
	0xE7, 0x86, 0x9C, 0x43, 0xE7, 0x87, 0x8E, 0x43,
	0xE7, 0x87, 0x90, 0x43, 0xE7, 0x88, 0x90, 0x43,
	0xE7, 0x88, 0x9B, 0x43, 0xE7, 0x88, 0xA8, 0x43,
	0xE7, 0x88, 0xAA, 0x43, 0xE7, 0x88, 0xAB, 0x43,
	0xE7, 0x88, 0xB5, 0x43, 0xE7, 0x88, 0xB6, 0x43,
	0xE7, 0x88, 0xBB, 0x43, 0xE7, 0x88, 0xBF, 0x43,
	0xE7, 0x89, 0x87, 0x43, 0xE7, 0x89, 0x90, 0x43,
	0xE7, 0x89, 0x99, 0x43, 0xE7, 0x89, 0x9B, 0x43,
	// Bytes f00 - f3f
	0xE7, 0x89, 0xA2, 0x43, 0xE7, 0x89, 0xB9, 0x43,
	0xE7, 0x8A, 0x80, 0x43, 0xE7, 0x8A, 0x95, 0x43,
	0xE7, 0x8A, 0xAC, 0x43, 0xE7, 0x8A, 0xAF, 0x43,
	0xE7, 0x8B, 0x80, 0x43, 0xE7, 0x8B, 0xBC, 0x43,
	0xE7, 0x8C, 0xAA, 0x43, 0xE7, 0x8D, 0xB5, 0x43,
	0xE7, 0x8D, 0xBA, 0x43, 0xE7, 0x8E, 0x84, 0x43,
	0xE7, 0x8E, 0x87, 0x43, 0xE7, 0x8E, 0x89, 0x43,
	0xE7, 0x8E, 0x8B, 0x43, 0xE7, 0x8E, 0xA5, 0x43,
	// Bytes f40 - f7f
	0xE7, 0x8E, 0xB2, 0x43, 0xE7, 0x8F, 0x9E, 0x43,
	0xE7, 0x90, 0x86, 0x43, 0xE7, 0x90, 0x89, 0x43,
	0xE7, 0x90, 0xA2, 0x43, 0xE7, 0x91, 0x87, 0x43,
	0xE7, 0x91, 0x9C, 0x43, 0xE7, 0x91, 0xA9, 0x43,
	0xE7, 0x91, 0xB1, 0x43, 0xE7, 0x92, 0x85, 0x43,
	0xE7, 0x92, 0x89, 0x43, 0xE7, 0x92, 0x98, 0x43,
	0xE7, 0x93, 0x8A, 0x43, 0xE7, 0x93, 0x9C, 0x43,
	0xE7, 0x93, 0xA6, 0x43, 0xE7, 0x94, 0x86, 0x43,
	// Bytes f80 - fbf
	0xE7, 0x94, 0x98, 0x43, 0xE7, 0x94, 0x9F, 0x43,
	0xE7, 0x94, 0xA4, 0x43, 0xE7, 0x94, 0xA8, 0x43,
	0xE7, 0x94, 0xB0, 0x43, 0xE7, 0x94, 0xB2, 0x43,
	0xE7, 0x94, 0xB3, 0x43, 0xE7, 0x94, 0xB7, 0x43,
	0xE7, 0x94, 0xBB, 0x43, 0xE7, 0x94, 0xBE, 0x43,
	0xE7, 0x95, 0x99, 0x43, 0xE7, 0x95, 0xA5, 0x43,
	0xE7, 0x95, 0xB0, 0x43, 0xE7, 0x96, 0x8B, 0x43,
	0xE7, 0x96, 0x92, 0x43, 0xE7, 0x97, 0xA2, 0x43,
	// Bytes fc0 - fff
	0xE7, 0x98, 0x90, 0x43, 0xE7, 0x98, 0x9D, 0x43,
	0xE7, 0x98, 0x9F, 0x43, 0xE7, 0x99, 0x82, 0x43,
	0xE7, 0x99, 0xA9, 0x43, 0xE7, 0x99, 0xB6, 0x43,
	0xE7, 0x99, 0xBD, 0x43, 0xE7, 0x9A, 0xAE, 0x43,
	0xE7, 0x9A, 0xBF, 0x43, 0xE7, 0x9B, 0x8A, 0x43,
	0xE7, 0x9B, 0x9B, 0x43, 0xE7, 0x9B, 0xA3, 0x43,
	0xE7, 0x9B, 0xA7, 0x43, 0xE7, 0x9B, 0xAE, 0x43,
	0xE7, 0x9B, 0xB4, 0x43, 0xE7, 0x9C, 0x81, 0x43,
	// Bytes 1000 - 103f
	0xE7, 0x9C, 0x9E, 0x43, 0xE7, 0x9C, 0x9F, 0x43,
	0xE7, 0x9D, 0x80, 0x43, 0xE7, 0x9D, 0x8A, 0x43,
	0xE7, 0x9E, 0x8B, 0x43, 0xE7, 0x9E, 0xA7, 0x43,
	0xE7, 0x9F, 0x9B, 0x43, 0xE7, 0x9F, 0xA2, 0x43,
	0xE7, 0x9F, 0xB3, 0x43, 0xE7, 0xA1, 0x8E, 0x43,
	0xE7, 0xA1, 0xAB, 0x43, 0xE7, 0xA2, 0x8C, 0x43,
	0xE7, 0xA2, 0x91, 0x43, 0xE7, 0xA3, 0x8A, 0x43,
	0xE7, 0xA3, 0x8C, 0x43, 0xE7, 0xA3, 0xBB, 0x43,
	// Bytes 1040 - 107f
	0xE7, 0xA4, 0xAA, 0x43, 0xE7, 0xA4, 0xBA, 0x43,
	0xE7, 0xA4, 0xBC, 0x43, 0xE7, 0xA4, 0xBE, 0x43,
	0xE7, 0xA5, 0x88, 0x43, 0xE7, 0xA5, 0x89, 0x43,
	0xE7, 0xA5, 0x90, 0x43, 0xE7, 0xA5, 0x96, 0x43,
	0xE7, 0xA5, 0x9D, 0x43, 0xE7, 0xA5, 0x9E, 0x43,
	0xE7, 0xA5, 0xA5, 0x43, 0xE7, 0xA5, 0xBF, 0x43,
	0xE7, 0xA6, 0x81, 0x43, 0xE7, 0xA6, 0x8D, 0x43,
	0xE7, 0xA6, 0x8E, 0x43, 0xE7, 0xA6, 0x8F, 0x43,
	// Bytes 1080 - 10bf
	0xE7, 0xA6, 0xAE, 0x43, 0xE7, 0xA6, 0xB8, 0x43,
	0xE7, 0xA6, 0xBE, 0x43, 0xE7, 0xA7, 0x8A, 0x43,
	0xE7, 0xA7, 0x98, 0x43, 0xE7, 0xA7, 0xAB, 0x43,
	0xE7, 0xA8, 0x9C, 0x43, 0xE7, 0xA9, 0x80, 0x43,
	0xE7, 0xA9, 0x8A, 0x43, 0xE7, 0xA9, 0x8F, 0x43,
	0xE7, 0xA9, 0xB4, 0x43, 0xE7, 0xA9, 0xBA, 0x43,
	0xE7, 0xAA, 0x81, 0x43, 0xE7, 0xAA, 0xB1, 0x43,
	0xE7, 0xAB, 0x8B, 0x43, 0xE7, 0xAB, 0xAE, 0x43,
	// Bytes 10c0 - 10ff
	0xE7, 0xAB, 0xB9, 0x43, 0xE7, 0xAC, 0xA0, 0x43,
	0xE7, 0xAE, 0x8F, 0x43, 0xE7, 0xAF, 0x80, 0x43,
	0xE7, 0xAF, 0x86, 0x43, 0xE7, 0xAF, 0x89, 0x43,
	0xE7, 0xB0, 0xBE, 0x43, 0xE7, 0xB1, 0xA0, 0x43,
	0xE7, 0xB1, 0xB3, 0x43, 0xE7, 0xB1, 0xBB, 0x43,
	0xE7, 0xB2, 0x92, 0x43, 0xE7, 0xB2, 0xBE, 0x43,
	0xE7, 0xB3, 0x92, 0x43, 0xE7, 0xB3, 0x96, 0x43,
	0xE7, 0xB3, 0xA3, 0x43, 0xE7, 0xB3, 0xA7, 0x43,
	// Bytes 1100 - 113f
	0xE7, 0xB3, 0xA8, 0x43, 0xE7, 0xB3, 0xB8, 0x43,
	0xE7, 0xB4, 0x80, 0x43, 0xE7, 0xB4, 0x90, 0x43,
	0xE7, 0xB4, 0xA2, 0x43, 0xE7, 0xB4, 0xAF, 0x43,
	0xE7, 0xB5, 0x82, 0x43, 0xE7, 0xB5, 0x9B, 0x43,
	0xE7, 0xB5, 0xA3, 0x43, 0xE7, 0xB6, 0xA0, 0x43,
	0xE7, 0xB6, 0xBE, 0x43, 0xE7, 0xB7, 0x87, 0x43,
	0xE7, 0xB7, 0xB4, 0x43, 0xE7, 0xB8, 0x82, 0x43,
	0xE7, 0xB8, 0x89, 0x43, 0xE7, 0xB8, 0xB7, 0x43,
	// Bytes 1140 - 117f
	0xE7, 0xB9, 0x81, 0x43, 0xE7, 0xB9, 0x85, 0x43,
	0xE7, 0xBC, 0xB6, 0x43, 0xE7, 0xBC, 0xBE, 0x43,
	0xE7, 0xBD, 0x91, 0x43, 0xE7, 0xBD, 0xB2, 0x43,
	0xE7, 0xBD, 0xB9, 0x43, 0xE7, 0xBD, 0xBA, 0x43,
	0xE7, 0xBE, 0x85, 0x43, 0xE7, 0xBE, 0x8A, 0x43,
	0xE7, 0xBE, 0x95, 0x43, 0xE7, 0xBE, 0x9A, 0x43,
	0xE7, 0xBE, 0xBD, 0x43, 0xE7, 0xBF, 0xBA, 0x43,
	0xE8, 0x80, 0x81, 0x43, 0xE8, 0x80, 0x85, 0x43,
	// Bytes 1180 - 11bf
	0xE8, 0x80, 0x8C, 0x43, 0xE8, 0x80, 0x92, 0x43,
	0xE8, 0x80, 0xB3, 0x43, 0xE8, 0x81, 0x86, 0x43,
	0xE8, 0x81, 0xA0, 0x43, 0xE8, 0x81, 0xAF, 0x43,
	0xE8, 0x81, 0xB0, 0x43, 0xE8, 0x81, 0xBE, 0x43,
	0xE8, 0x81, 0xBF, 0x43, 0xE8, 0x82, 0x89, 0x43,
	0xE8, 0x82, 0x8B, 0x43, 0xE8, 0x82, 0xAD, 0x43,
	0xE8, 0x82, 0xB2, 0x43, 0xE8, 0x84, 0x83, 0x43,
	0xE8, 0x84, 0xBE, 0x43, 0xE8, 0x87, 0x98, 0x43,
	// Bytes 11c0 - 11ff
	0xE8, 0x87, 0xA3, 0x43, 0xE8, 0x87, 0xA8, 0x43,
	0xE8, 0x87, 0xAA, 0x43, 0xE8, 0x87, 0xAD, 0x43,
	0xE8, 0x87, 0xB3, 0x43, 0xE8, 0x87, 0xBC, 0x43,
	0xE8, 0x88, 0x81, 0x43, 0xE8, 0x88, 0x84, 0x43,
	0xE8, 0x88, 0x8C, 0x43, 0xE8, 0x88, 0x98, 0x43,
	0xE8, 0x88, 0x9B, 0x43, 0xE8, 0x88, 0x9F, 0x43,
	0xE8, 0x89, 0xAE, 0x43, 0xE8, 0x89, 0xAF, 0x43,
	0xE8, 0x89, 0xB2, 0x43, 0xE8, 0x89, 0xB8, 0x43,
	// Bytes 1200 - 123f
	0xE8, 0x89, 0xB9, 0x43, 0xE8, 0x8A, 0x8B, 0x43,
	0xE8, 0x8A, 0x91, 0x43, 0xE8, 0x8A, 0x9D, 0x43,
	0xE8, 0x8A, 0xB1, 0x43, 0xE8, 0x8A, 0xB3, 0x43,
	0xE8, 0x8A, 0xBD, 0x43, 0xE8, 0x8B, 0xA5, 0x43,
	0xE8, 0x8B, 0xA6, 0x43, 0xE8, 0x8C, 0x9D, 0x43,
	0xE8, 0x8C, 0xA3, 0x43, 0xE8, 0x8C, 0xB6, 0x43,
	0xE8, 0x8D, 0x92, 0x43, 0xE8, 0x8D, 0x93, 0x43,
	0xE8, 0x8D, 0xA3, 0x43, 0xE8, 0x8E, 0xAD, 0x43,
	// Bytes 1240 - 127f
	0xE8, 0x8E, 0xBD, 0x43, 0xE8, 0x8F, 0x89, 0x43,
	0xE8, 0x8F, 0x8A, 0x43, 0xE8, 0x8F, 0x8C, 0x43,
	0xE8, 0x8F, 0x9C, 0x43, 0xE8, 0x8F, 0xA7, 0x43,
	0xE8, 0x8F, 0xAF, 0x43, 0xE8, 0x8F, 0xB1, 0x43,
	0xE8, 0x90, 0xBD, 0x43, 0xE8, 0x91, 0x89, 0x43,
	0xE8, 0x91, 0x97, 0x43, 0xE8, 0x93, 0xAE, 0x43,
	0xE8, 0x93, 0xB1, 0x43, 0xE8, 0x93, 0xB3, 0x43,
	0xE8, 0x93, 0xBC, 0x43, 0xE8, 0x94, 0x96, 0x43,
	// Bytes 1280 - 12bf
	0xE8, 0x95, 0xA4, 0x43, 0xE8, 0x97, 0x8D, 0x43,
	0xE8, 0x97, 0xBA, 0x43, 0xE8, 0x98, 0x86, 0x43,
	0xE8, 0x98, 0x92, 0x43, 0xE8, 0x98, 0xAD, 0x43,
	0xE8, 0x98, 0xBF, 0x43, 0xE8, 0x99, 0x8D, 0x43,
	0xE8, 0x99, 0x90, 0x43, 0xE8, 0x99, 0x9C, 0x43,
	0xE8, 0x99, 0xA7, 0x43, 0xE8, 0x99, 0xA9, 0x43,
	0xE8, 0x99, 0xAB, 0x43, 0xE8, 0x9A, 0x88, 0x43,
	0xE8, 0x9A, 0xA9, 0x43, 0xE8, 0x9B, 0xA2, 0x43,
	// Bytes 12c0 - 12ff
	0xE8, 0x9C, 0x8E, 0x43, 0xE8, 0x9C, 0xA8, 0x43,
	0xE8, 0x9D, 0xAB, 0x43, 0xE8, 0x9D, 0xB9, 0x43,
	0xE8, 0x9E, 0x86, 0x43, 0xE8, 0x9E, 0xBA, 0x43,
	0xE8, 0x9F, 0xA1, 0x43, 0xE8, 0xA0, 0x81, 0x43,
	0xE8, 0xA0, 0x9F, 0x43, 0xE8, 0xA1, 0x80, 0x43,
	0xE8, 0xA1, 0x8C, 0x43, 0xE8, 0xA1, 0xA0, 0x43,
	0xE8, 0xA1, 0xA3, 0x43, 0xE8, 0xA3, 0x82, 0x43,
	0xE8, 0xA3, 0x8F, 0x43, 0xE8, 0xA3, 0x97, 0x43,
	// Bytes 1300 - 133f
	0xE8, 0xA3, 0x9E, 0x43, 0xE8, 0xA3, 0xA1, 0x43,
	0xE8, 0xA3, 0xB8, 0x43, 0xE8, 0xA3, 0xBA, 0x43,
	0xE8, 0xA4, 0x90, 0x43, 0xE8, 0xA5, 0x81, 0x43,
	0xE8, 0xA5, 0xA4, 0x43, 0xE8, 0xA5, 0xBE, 0x43,
	0xE8, 0xA6, 0x86, 0x43, 0xE8, 0xA6, 0x8B, 0x43,
	0xE8, 0xA6, 0x96, 0x43, 0xE8, 0xA7, 0x92, 0x43,
	0xE8, 0xA7, 0xA3, 0x43, 0xE8, 0xA8, 0x80, 0x43,
	0xE8, 0xAA, 0xA0, 0x43, 0xE8, 0xAA, 0xAA, 0x43,
	// Bytes 1340 - 137f
	0xE8, 0xAA, 0xBF, 0x43, 0xE8, 0xAB, 0x8B, 0x43,
	0xE8, 0xAB, 0x92, 0x43, 0xE8, 0xAB, 0x96, 0x43,
	0xE8, 0xAB, 0xAD, 0x43, 0xE8, 0xAB, 0xB8, 0x43,
	0xE8, 0xAB, 0xBE, 0x43, 0xE8, 0xAC, 0x81, 0x43,
	0xE8, 0xAC, 0xB9, 0x43, 0xE8, 0xAD, 0x98, 0x43,
	0xE8, 0xAE, 0x80, 0x43, 0xE8, 0xAE, 0x8A, 0x43,
	0xE8, 0xB0, 0xB7, 0x43, 0xE8, 0xB1, 0x86, 0x43,
	0xE8, 0xB1, 0x88, 0x43, 0xE8, 0xB1, 0x95, 0x43,
	// Bytes 1380 - 13bf
	0xE8, 0xB1, 0xB8, 0x43, 0xE8, 0xB2, 0x9D, 0x43,
	0xE8, 0xB2, 0xA1, 0x43, 0xE8, 0xB2, 0xA9, 0x43,
	0xE8, 0xB2, 0xAB, 0x43, 0xE8, 0xB3, 0x81, 0x43,
	0xE8, 0xB3, 0x82, 0x43, 0xE8, 0xB3, 0x87, 0x43,
	0xE8, 0xB3, 0x88, 0x43, 0xE8, 0xB3, 0x93, 0x43,
	0xE8, 0xB4, 0x88, 0x43, 0xE8, 0xB4, 0x9B, 0x43,
	0xE8, 0xB5, 0xA4, 0x43, 0xE8, 0xB5, 0xB0, 0x43,
	0xE8, 0xB5, 0xB7, 0x43, 0xE8, 0xB6, 0xB3, 0x43,
	// Bytes 13c0 - 13ff
	0xE8, 0xB6, 0xBC, 0x43, 0xE8, 0xB7, 0x8B, 0x43,
	0xE8, 0xB7, 0xAF, 0x43, 0xE8, 0xB7, 0xB0, 0x43,
	0xE8, 0xBA, 0xAB, 0x43, 0xE8, 0xBB, 0x8A, 0x43,
	0xE8, 0xBB, 0x94, 0x43, 0xE8, 0xBC, 0xA6, 0x43,
	0xE8, 0xBC, 0xAA, 0x43, 0xE8, 0xBC, 0xB8, 0x43,
	0xE8, 0xBC, 0xBB, 0x43, 0xE8, 0xBD, 0xA2, 0x43,
	0xE8, 0xBE, 0x9B, 0x43, 0xE8, 0xBE, 0x9E, 0x43,
	0xE8, 0xBE, 0xB0, 0x43, 0xE8, 0xBE, 0xB5, 0x43,
	// Bytes 1400 - 143f
	0xE8, 0xBE, 0xB6, 0x43, 0xE9, 0x80, 0xA3, 0x43,
	0xE9, 0x80, 0xB8, 0x43, 0xE9, 0x81, 0x8A, 0x43,
	0xE9, 0x81, 0xA9, 0x43, 0xE9, 0x81, 0xB2, 0x43,
	0xE9, 0x81, 0xBC, 0x43, 0xE9, 0x82, 0x8F, 0x43,
	0xE9, 0x82, 0x91, 0x43, 0xE9, 0x82, 0x94, 0x43,
	0xE9, 0x83, 0x8E, 0x43, 0xE9, 0x83, 0x9E, 0x43,
	0xE9, 0x83, 0xB1, 0x43, 0xE9, 0x83, 0xBD, 0x43,
	0xE9, 0x84, 0x91, 0x43, 0xE9, 0x84, 0x9B, 0x43,
	// Bytes 1440 - 147f
	0xE9, 0x85, 0x89, 0x43, 0xE9, 0x85, 0x8D, 0x43,
	0xE9, 0x85, 0xAA, 0x43, 0xE9, 0x86, 0x99, 0x43,
	0xE9, 0x86, 0xB4, 0x43, 0xE9, 0x87, 0x86, 0x43,
	0xE9, 0x87, 0x8C, 0x43, 0xE9, 0x87, 0x8F, 0x43,
	0xE9, 0x87, 0x91, 0x43, 0xE9, 0x88, 0xB4, 0x43,
	0xE9, 0x88, 0xB8, 0x43, 0xE9, 0x89, 0xB6, 0x43,
	0xE9, 0x89, 0xBC, 0x43, 0xE9, 0x8B, 0x97, 0x43,
	0xE9, 0x8B, 0x98, 0x43, 0xE9, 0x8C, 0x84, 0x43,
	// Bytes 1480 - 14bf
	0xE9, 0x8D, 0x8A, 0x43, 0xE9, 0x8F, 0xB9, 0x43,
	0xE9, 0x90, 0x95, 0x43, 0xE9, 0x95, 0xB7, 0x43,
	0xE9, 0x96, 0x80, 0x43, 0xE9, 0x96, 0x8B, 0x43,
	0xE9, 0x96, 0xAD, 0x43, 0xE9, 0x96, 0xB7, 0x43,
	0xE9, 0x98, 0x9C, 0x43, 0xE9, 0x98, 0xAE, 0x43,
	0xE9, 0x99, 0x8B, 0x43, 0xE9, 0x99, 0x8D, 0x43,
	0xE9, 0x99, 0xB5, 0x43, 0xE9, 0x99, 0xB8, 0x43,
	0xE9, 0x99, 0xBC, 0x43, 0xE9, 0x9A, 0x86, 0x43,
	// Bytes 14c0 - 14ff
	0xE9, 0x9A, 0xA3, 0x43, 0xE9, 0x9A, 0xB6, 0x43,
	0xE9, 0x9A, 0xB7, 0x43, 0xE9, 0x9A, 0xB8, 0x43,
	0xE9, 0x9A, 0xB9, 0x43, 0xE9, 0x9B, 0x83, 0x43,
	0xE9, 0x9B, 0xA2, 0x43, 0xE9, 0x9B, 0xA3, 0x43,
	0xE9, 0x9B, 0xA8, 0x43, 0xE9, 0x9B, 0xB6, 0x43,
	0xE9, 0x9B, 0xB7, 0x43, 0xE9, 0x9C, 0xA3, 0x43,
	0xE9, 0x9C, 0xB2, 0x43, 0xE9, 0x9D, 0x88, 0x43,
	0xE9, 0x9D, 0x91, 0x43, 0xE9, 0x9D, 0x96, 0x43,
	// Bytes 1500 - 153f
	0xE9, 0x9D, 0x9E, 0x43, 0xE9, 0x9D, 0xA2, 0x43,
	0xE9, 0x9D, 0xA9, 0x43, 0xE9, 0x9F, 0x8B, 0x43,
	0xE9, 0x9F, 0x9B, 0x43, 0xE9, 0x9F, 0xA0, 0x43,
	0xE9, 0x9F, 0xAD, 0x43, 0xE9, 0x9F, 0xB3, 0x43,
	0xE9, 0x9F, 0xBF, 0x43, 0xE9, 0xA0, 0x81, 0x43,
	0xE9, 0xA0, 0x85, 0x43, 0xE9, 0xA0, 0x8B, 0x43,
	0xE9, 0xA0, 0x98, 0x43, 0xE9, 0xA0, 0xA9, 0x43,
	0xE9, 0xA0, 0xBB, 0x43, 0xE9, 0xA1, 0x9E, 0x43,
	// Bytes 1540 - 157f
	0xE9, 0xA2, 0xA8, 0x43, 0xE9, 0xA3, 0x9B, 0x43,
	0xE9, 0xA3, 0x9F, 0x43, 0xE9, 0xA3, 0xA2, 0x43,
	0xE9, 0xA3, 0xAF, 0x43, 0xE9, 0xA3, 0xBC, 0x43,
	0xE9, 0xA4, 0xA8, 0x43, 0xE9, 0xA4, 0xA9, 0x43,
	0xE9, 0xA6, 0x96, 0x43, 0xE9, 0xA6, 0x99, 0x43,
	0xE9, 0xA6, 0xA7, 0x43, 0xE9, 0xA6, 0xAC, 0x43,
	0xE9, 0xA7, 0x82, 0x43, 0xE9, 0xA7, 0xB1, 0x43,
	0xE9, 0xA7, 0xBE, 0x43, 0xE9, 0xA9, 0xAA, 0x43,
	// Bytes 1580 - 15bf
	0xE9, 0xAA, 0xA8, 0x43, 0xE9, 0xAB, 0x98, 0x43,
	0xE9, 0xAB, 0x9F, 0x43, 0xE9, 0xAC, 0x92, 0x43,
	0xE9, 0xAC, 0xA5, 0x43, 0xE9, 0xAC, 0xAF, 0x43,
	0xE9, 0xAC, 0xB2, 0x43, 0xE9, 0xAC, 0xBC, 0x43,
	0xE9, 0xAD, 0x9A, 0x43, 0xE9, 0xAD, 0xAF, 0x43,
	0xE9, 0xB1, 0x80, 0x43, 0xE9, 0xB1, 0x97, 0x43,
	0xE9, 0xB3, 0xA5, 0x43, 0xE9, 0xB3, 0xBD, 0x43,
	0xE9, 0xB5, 0xA7, 0x43, 0xE9, 0xB6, 0xB4, 0x43,
	// Bytes 15c0 - 15ff
	0xE9, 0xB7, 0xBA, 0x43, 0xE9, 0xB8, 0x9E, 0x43,
	0xE9, 0xB9, 0xB5, 0x43, 0xE9, 0xB9, 0xBF, 0x43,
	0xE9, 0xBA, 0x97, 0x43, 0xE9, 0xBA, 0x9F, 0x43,
	0xE9, 0xBA, 0xA5, 0x43, 0xE9, 0xBA, 0xBB, 0x43,
	0xE9, 0xBB, 0x83, 0x43, 0xE9, 0xBB, 0x8D, 0x43,
	0xE9, 0xBB, 0x8E, 0x43, 0xE9, 0xBB, 0x91, 0x43,
	0xE9, 0xBB, 0xB9, 0x43, 0xE9, 0xBB, 0xBD, 0x43,
	0xE9, 0xBB, 0xBE, 0x43, 0xE9, 0xBC, 0x85, 0x43,
	// Bytes 1600 - 163f
	0xE9, 0xBC, 0x8E, 0x43, 0xE9, 0xBC, 0x8F, 0x43,
	0xE9, 0xBC, 0x93, 0x43, 0xE9, 0xBC, 0x96, 0x43,
	0xE9, 0xBC, 0xA0, 0x43, 0xE9, 0xBC, 0xBB, 0x43,
	0xE9, 0xBD, 0x83, 0x43, 0xE9, 0xBD, 0x8A, 0x43,
	0xE9, 0xBD, 0x92, 0x43, 0xE9, 0xBE, 0x8D, 0x43,
	0xE9, 0xBE, 0x8E, 0x43, 0xE9, 0xBE, 0x9C, 0x43,
	0xE9, 0xBE, 0x9F, 0x43, 0xE9, 0xBE, 0xA0, 0x43,
	0xEA, 0x9C, 0xA7, 0x43, 0xEA, 0x9D, 0xAF, 0x43,
	// Bytes 1640 - 167f
	0xEA, 0xAC, 0xB7, 0x43, 0xEA, 0xAD, 0x92, 0x44,
	0xF0, 0xA0, 0x84, 0xA2, 0x44, 0xF0, 0xA0, 0x94,
	0x9C, 0x44, 0xF0, 0xA0, 0x94, 0xA5, 0x44, 0xF0,
	0xA0, 0x95, 0x8B, 0x44, 0xF0, 0xA0, 0x98, 0xBA,
	0x44, 0xF0, 0xA0, 0xA0, 0x84, 0x44, 0xF0, 0xA0,
	0xA3, 0x9E, 0x44, 0xF0, 0xA0, 0xA8, 0xAC, 0x44,
	0xF0, 0xA0, 0xAD, 0xA3, 0x44, 0xF0, 0xA1, 0x93,
	0xA4, 0x44, 0xF0, 0xA1, 0x9A, 0xA8, 0x44, 0xF0,
	// Bytes 1680 - 16bf
	0xA1, 0x9B, 0xAA, 0x44, 0xF0, 0xA1, 0xA7, 0x88,
	0x44, 0xF0, 0xA1, 0xAC, 0x98, 0x44, 0xF0, 0xA1,
	0xB4, 0x8B, 0x44, 0xF0, 0xA1, 0xB7, 0xA4, 0x44,
	0xF0, 0xA1, 0xB7, 0xA6, 0x44, 0xF0, 0xA2, 0x86,
	0x83, 0x44, 0xF0, 0xA2, 0x86, 0x9F, 0x44, 0xF0,
	0xA2, 0x8C, 0xB1, 0x44, 0xF0, 0xA2, 0x9B, 0x94,
	0x44, 0xF0, 0xA2, 0xA1, 0x84, 0x44, 0xF0, 0xA2,
	0xA1, 0x8A, 0x44, 0xF0, 0xA2, 0xAC, 0x8C, 0x44,
	// Bytes 16c0 - 16ff
	0xF0, 0xA2, 0xAF, 0xB1, 0x44, 0xF0, 0xA3, 0x80,
	0x8A, 0x44, 0xF0, 0xA3, 0x8A, 0xB8, 0x44, 0xF0,
	0xA3, 0x8D, 0x9F, 0x44, 0xF0, 0xA3, 0x8E, 0x93,
	0x44, 0xF0, 0xA3, 0x8E, 0x9C, 0x44, 0xF0, 0xA3,
	0x8F, 0x83, 0x44, 0xF0, 0xA3, 0x8F, 0x95, 0x44,
	0xF0, 0xA3, 0x91, 0xAD, 0x44, 0xF0, 0xA3, 0x9A,
	0xA3, 0x44, 0xF0, 0xA3, 0xA2, 0xA7, 0x44, 0xF0,
	0xA3, 0xAA, 0x8D, 0x44, 0xF0, 0xA3, 0xAB, 0xBA,
	// Bytes 1700 - 173f
	0x44, 0xF0, 0xA3, 0xB2, 0xBC, 0x44, 0xF0, 0xA3,
	0xB4, 0x9E, 0x44, 0xF0, 0xA3, 0xBB, 0x91, 0x44,
	0xF0, 0xA3, 0xBD, 0x9E, 0x44, 0xF0, 0xA3, 0xBE,
	0x8E, 0x44, 0xF0, 0xA4, 0x89, 0xA3, 0x44, 0xF0,
	0xA4, 0x8B, 0xAE, 0x44, 0xF0, 0xA4, 0x8E, 0xAB,
	0x44, 0xF0, 0xA4, 0x98, 0x88, 0x44, 0xF0, 0xA4,
	0x9C, 0xB5, 0x44, 0xF0, 0xA4, 0xA0, 0x94, 0x44,
	0xF0, 0xA4, 0xB0, 0xB6, 0x44, 0xF0, 0xA4, 0xB2,
	// Bytes 1740 - 177f
	0x92, 0x44, 0xF0, 0xA4, 0xBE, 0xA1, 0x44, 0xF0,
	0xA4, 0xBE, 0xB8, 0x44, 0xF0, 0xA5, 0x81, 0x84,
	0x44, 0xF0, 0xA5, 0x83, 0xB2, 0x44, 0xF0, 0xA5,
	0x83, 0xB3, 0x44, 0xF0, 0xA5, 0x84, 0x99, 0x44,
	0xF0, 0xA5, 0x84, 0xB3, 0x44, 0xF0, 0xA5, 0x89,
	0x89, 0x44, 0xF0, 0xA5, 0x90, 0x9D, 0x44, 0xF0,
	0xA5, 0x98, 0xA6, 0x44, 0xF0, 0xA5, 0x9A, 0x9A,
	0x44, 0xF0, 0xA5, 0x9B, 0x85, 0x44, 0xF0, 0xA5,
	// Bytes 1780 - 17bf
	0xA5, 0xBC, 0x44, 0xF0, 0xA5, 0xAA, 0xA7, 0x44,
	0xF0, 0xA5, 0xAE, 0xAB, 0x44, 0xF0, 0xA5, 0xB2,
	0x80, 0x44, 0xF0, 0xA5, 0xB3, 0x90, 0x44, 0xF0,
	0xA5, 0xBE, 0x86, 0x44, 0xF0, 0xA6, 0x87, 0x9A,
	0x44, 0xF0, 0xA6, 0x88, 0xA8, 0x44, 0xF0, 0xA6,
	0x89, 0x87, 0x44, 0xF0, 0xA6, 0x8B, 0x99, 0x44,
	0xF0, 0xA6, 0x8C, 0xBE, 0x44, 0xF0, 0xA6, 0x93,
	0x9A, 0x44, 0xF0, 0xA6, 0x94, 0xA3, 0x44, 0xF0,
	// Bytes 17c0 - 17ff
	0xA6, 0x96, 0xA8, 0x44, 0xF0, 0xA6, 0x9E, 0xA7,
	0x44, 0xF0, 0xA6, 0x9E, 0xB5, 0x44, 0xF0, 0xA6,
	0xAC, 0xBC, 0x44, 0xF0, 0xA6, 0xB0, 0xB6, 0x44,
	0xF0, 0xA6, 0xB3, 0x95, 0x44, 0xF0, 0xA6, 0xB5,
	0xAB, 0x44, 0xF0, 0xA6, 0xBC, 0xAC, 0x44, 0xF0,
	0xA6, 0xBE, 0xB1, 0x44, 0xF0, 0xA7, 0x83, 0x92,
	0x44, 0xF0, 0xA7, 0x8F, 0x8A, 0x44, 0xF0, 0xA7,
	0x99, 0xA7, 0x44, 0xF0, 0xA7, 0xA2, 0xAE, 0x44,
	// Bytes 1800 - 183f
	0xF0, 0xA7, 0xA5, 0xA6, 0x44, 0xF0, 0xA7, 0xB2,
	0xA8, 0x44, 0xF0, 0xA7, 0xBB, 0x93, 0x44, 0xF0,
	0xA7, 0xBC, 0xAF, 0x44, 0xF0, 0xA8, 0x97, 0x92,
	0x44, 0xF0, 0xA8, 0x97, 0xAD, 0x44, 0xF0, 0xA8,
	0x9C, 0xAE, 0x44, 0xF0, 0xA8, 0xAF, 0xBA, 0x44,
	0xF0, 0xA8, 0xB5, 0xB7, 0x44, 0xF0, 0xA9, 0x85,
	0x85, 0x44, 0xF0, 0xA9, 0x87, 0x9F, 0x44, 0xF0,
	0xA9, 0x88, 0x9A, 0x44, 0xF0, 0xA9, 0x90, 0x8A,
	// Bytes 1840 - 187f
	0x44, 0xF0, 0xA9, 0x92, 0x96, 0x44, 0xF0, 0xA9,
	0x96, 0xB6, 0x44, 0xF0, 0xA9, 0xAC, 0xB0, 0x44,
	0xF0, 0xAA, 0x83, 0x8E, 0x44, 0xF0, 0xAA, 0x84,
	0x85, 0x44, 0xF0, 0xAA, 0x88, 0x8E, 0x44, 0xF0,
	0xAA, 0x8A, 0x91, 0x44, 0xF0, 0xAA, 0x8E, 0x92,
	0x44, 0xF0, 0xAA, 0x98, 0x80, 0x42, 0x21, 0x21,
	0x42, 0x21, 0x3F, 0x42, 0x2E, 0x2E, 0x42, 0x30,
	0x2C, 0x42, 0x30, 0x2E, 0x42, 0x31, 0x2C, 0x42,
	// Bytes 1880 - 18bf
	0x31, 0x2E, 0x42, 0x31, 0x30, 0x42, 0x31, 0x31,
	0x42, 0x31, 0x32, 0x42, 0x31, 0x33, 0x42, 0x31,
	0x34, 0x42, 0x31, 0x35, 0x42, 0x31, 0x36, 0x42,
	0x31, 0x37, 0x42, 0x31, 0x38, 0x42, 0x31, 0x39,
	0x42, 0x32, 0x2C, 0x42, 0x32, 0x2E, 0x42, 0x32,
	0x30, 0x42, 0x32, 0x31, 0x42, 0x32, 0x32, 0x42,
	0x32, 0x33, 0x42, 0x32, 0x34, 0x42, 0x32, 0x35,
	0x42, 0x32, 0x36, 0x42, 0x32, 0x37, 0x42, 0x32,
	// Bytes 18c0 - 18ff
	0x38, 0x42, 0x32, 0x39, 0x42, 0x33, 0x2C, 0x42,
	0x33, 0x2E, 0x42, 0x33, 0x30, 0x42, 0x33, 0x31,
	0x42, 0x33, 0x32, 0x42, 0x33, 0x33, 0x42, 0x33,
	0x34, 0x42, 0x33, 0x35, 0x42, 0x33, 0x36, 0x42,
	0x33, 0x37, 0x42, 0x33, 0x38, 0x42, 0x33, 0x39,
	0x42, 0x34, 0x2C, 0x42, 0x34, 0x2E, 0x42, 0x34,
	0x30, 0x42, 0x34, 0x31, 0x42, 0x34, 0x32, 0x42,
	0x34, 0x33, 0x42, 0x34, 0x34, 0x42, 0x34, 0x35,
	// Bytes 1900 - 193f
	0x42, 0x34, 0x36, 0x42, 0x34, 0x37, 0x42, 0x34,
	0x38, 0x42, 0x34, 0x39, 0x42, 0x35, 0x2C, 0x42,
	0x35, 0x2E, 0x42, 0x35, 0x30, 0x42, 0x36, 0x2C,
	0x42, 0x36, 0x2E, 0x42, 0x37, 0x2C, 0x42, 0x37,
	0x2E, 0x42, 0x38, 0x2C, 0x42, 0x38, 0x2E, 0x42,
	0x39, 0x2C, 0x42, 0x39, 0x2E, 0x42, 0x3D, 0x3D,
	0x42, 0x3F, 0x21, 0x42, 0x3F, 0x3F, 0x42, 0x41,
	0x55, 0x42, 0x42, 0x71, 0x42, 0x43, 0x44, 0x42,
	// Bytes 1940 - 197f
	0x44, 0x4A, 0x42, 0x44, 0x5A, 0x42, 0x44, 0x7A,
	0x42, 0x47, 0x42, 0x42, 0x47, 0x79, 0x42, 0x48,
	0x50, 0x42, 0x48, 0x56, 0x42, 0x48, 0x67, 0x42,
	0x48, 0x7A, 0x42, 0x49, 0x49, 0x42, 0x49, 0x4A,
	0x42, 0x49, 0x55, 0x42, 0x49, 0x56, 0x42, 0x49,
	0x58, 0x42, 0x4B, 0x42, 0x42, 0x4B, 0x4B, 0x42,
	0x4B, 0x4D, 0x42, 0x4C, 0x4A, 0x42, 0x4C, 0x6A,
	0x42, 0x4D, 0x42, 0x42, 0x4D, 0x43, 0x42, 0x4D,
	// Bytes 1980 - 19bf
	0x44, 0x42, 0x4D, 0x56, 0x42, 0x4D, 0x57, 0x42,
	0x4E, 0x4A, 0x42, 0x4E, 0x6A, 0x42, 0x4E, 0x6F,
	0x42, 0x50, 0x48, 0x42, 0x50, 0x52, 0x42, 0x50,
	0x61, 0x42, 0x52, 0x73, 0x42, 0x53, 0x44, 0x42,
	0x53, 0x4D, 0x42, 0x53, 0x53, 0x42, 0x53, 0x76,
	0x42, 0x54, 0x4D, 0x42, 0x56, 0x49, 0x42, 0x57,
	0x43, 0x42, 0x57, 0x5A, 0x42, 0x57, 0x62, 0x42,
	0x58, 0x49, 0x42, 0x63, 0x63, 0x42, 0x63, 0x64,
	// Bytes 19c0 - 19ff
	0x42, 0x63, 0x6D, 0x42, 0x64, 0x42, 0x42, 0x64,
	0x61, 0x42, 0x64, 0x6C, 0x42, 0x64, 0x6D, 0x42,
	0x64, 0x7A, 0x42, 0x65, 0x56, 0x42, 0x66, 0x66,
	0x42, 0x66, 0x69, 0x42, 0x66, 0x6C, 0x42, 0x66,
	0x6D, 0x42, 0x68, 0x61, 0x42, 0x69, 0x69, 0x42,
	0x69, 0x6A, 0x42, 0x69, 0x6E, 0x42, 0x69, 0x76,
	0x42, 0x69, 0x78, 0x42, 0x6B, 0x41, 0x42, 0x6B,
	0x56, 0x42, 0x6B, 0x57, 0x42, 0x6B, 0x67, 0x42,
	// Bytes 1a00 - 1a3f
	0x6B, 0x6C, 0x42, 0x6B, 0x6D, 0x42, 0x6B, 0x74,
	0x42, 0x6C, 0x6A, 0x42, 0x6C, 0x6D, 0x42, 0x6C,
	0x6E, 0x42, 0x6C, 0x78, 0x42, 0x6D, 0x32, 0x42,
	0x6D, 0x33, 0x42, 0x6D, 0x41, 0x42, 0x6D, 0x56,
	0x42, 0x6D, 0x57, 0x42, 0x6D, 0x62, 0x42, 0x6D,
	0x67, 0x42, 0x6D, 0x6C, 0x42, 0x6D, 0x6D, 0x42,
	0x6D, 0x73, 0x42, 0x6E, 0x41, 0x42, 0x6E, 0x46,
	0x42, 0x6E, 0x56, 0x42, 0x6E, 0x57, 0x42, 0x6E,
	// Bytes 1a40 - 1a7f
	0x6A, 0x42, 0x6E, 0x6D, 0x42, 0x6E, 0x73, 0x42,
	0x6F, 0x56, 0x42, 0x70, 0x41, 0x42, 0x70, 0x46,
	0x42, 0x70, 0x56, 0x42, 0x70, 0x57, 0x42, 0x70,
	0x63, 0x42, 0x70, 0x73, 0x42, 0x73, 0x72, 0x42,
	0x73, 0x74, 0x42, 0x76, 0x69, 0x42, 0x78, 0x69,
	0x43, 0x28, 0x31, 0x29, 0x43, 0x28, 0x32, 0x29,
	0x43, 0x28, 0x33, 0x29, 0x43, 0x28, 0x34, 0x29,
	0x43, 0x28, 0x35, 0x29, 0x43, 0x28, 0x36, 0x29,
	// Bytes 1a80 - 1abf
	0x43, 0x28, 0x37, 0x29, 0x43, 0x28, 0x38, 0x29,
	0x43, 0x28, 0x39, 0x29, 0x43, 0x28, 0x41, 0x29,
	0x43, 0x28, 0x42, 0x29, 0x43, 0x28, 0x43, 0x29,
	0x43, 0x28, 0x44, 0x29, 0x43, 0x28, 0x45, 0x29,
	0x43, 0x28, 0x46, 0x29, 0x43, 0x28, 0x47, 0x29,
	0x43, 0x28, 0x48, 0x29, 0x43, 0x28, 0x49, 0x29,
	0x43, 0x28, 0x4A, 0x29, 0x43, 0x28, 0x4B, 0x29,
	0x43, 0x28, 0x4C, 0x29, 0x43, 0x28, 0x4D, 0x29,
	// Bytes 1ac0 - 1aff
	0x43, 0x28, 0x4E, 0x29, 0x43, 0x28, 0x4F, 0x29,
	0x43, 0x28, 0x50, 0x29, 0x43, 0x28, 0x51, 0x29,
	0x43, 0x28, 0x52, 0x29, 0x43, 0x28, 0x53, 0x29,
	0x43, 0x28, 0x54, 0x29, 0x43, 0x28, 0x55, 0x29,
	0x43, 0x28, 0x56, 0x29, 0x43, 0x28, 0x57, 0x29,
	0x43, 0x28, 0x58, 0x29, 0x43, 0x28, 0x59, 0x29,
	0x43, 0x28, 0x5A, 0x29, 0x43, 0x28, 0x61, 0x29,
	0x43, 0x28, 0x62, 0x29, 0x43, 0x28, 0x63, 0x29,
	// Bytes 1b00 - 1b3f
	0x43, 0x28, 0x64, 0x29, 0x43, 0x28, 0x65, 0x29,
	0x43, 0x28, 0x66, 0x29, 0x43, 0x28, 0x67, 0x29,
	0x43, 0x28, 0x68, 0x29, 0x43, 0x28, 0x69, 0x29,
	0x43, 0x28, 0x6A, 0x29, 0x43, 0x28, 0x6B, 0x29,
	0x43, 0x28, 0x6C, 0x29, 0x43, 0x28, 0x6D, 0x29,
	0x43, 0x28, 0x6E, 0x29, 0x43, 0x28, 0x6F, 0x29,
	0x43, 0x28, 0x70, 0x29, 0x43, 0x28, 0x71, 0x29,
	0x43, 0x28, 0x72, 0x29, 0x43, 0x28, 0x73, 0x29,
	// Bytes 1b40 - 1b7f
	0x43, 0x28, 0x74, 0x29, 0x43, 0x28, 0x75, 0x29,
	0x43, 0x28, 0x76, 0x29, 0x43, 0x28, 0x77, 0x29,
	0x43, 0x28, 0x78, 0x29, 0x43, 0x28, 0x79, 0x29,
	0x43, 0x28, 0x7A, 0x29, 0x43, 0x2E, 0x2E, 0x2E,
	0x43, 0x31, 0x30, 0x2E, 0x43, 0x31, 0x31, 0x2E,
	0x43, 0x31, 0x32, 0x2E, 0x43, 0x31, 0x33, 0x2E,
	0x43, 0x31, 0x34, 0x2E, 0x43, 0x31, 0x35, 0x2E,
	0x43, 0x31, 0x36, 0x2E, 0x43, 0x31, 0x37, 0x2E,
	// Bytes 1b80 - 1bbf
	0x43, 0x31, 0x38, 0x2E, 0x43, 0x31, 0x39, 0x2E,
	0x43, 0x32, 0x30, 0x2E, 0x43, 0x3A, 0x3A, 0x3D,
	0x43, 0x3D, 0x3D, 0x3D, 0x43, 0x43, 0x6F, 0x2E,
	0x43, 0x46, 0x41, 0x58, 0x43, 0x47, 0x48, 0x7A,
	0x43, 0x47, 0x50, 0x61, 0x43, 0x49, 0x49, 0x49,
	0x43, 0x4C, 0x54, 0x44, 0x43, 0x4C, 0xC2, 0xB7,
	0x43, 0x4D, 0x48, 0x7A, 0x43, 0x4D, 0x50, 0x61,
	0x43, 0x4D, 0xCE, 0xA9, 0x43, 0x50, 0x50, 0x4D,
	// Bytes 1bc0 - 1bff
	0x43, 0x50, 0x50, 0x56, 0x43, 0x50, 0x54, 0x45,
	0x43, 0x54, 0x45, 0x4C, 0x43, 0x54, 0x48, 0x7A,
	0x43, 0x56, 0x49, 0x49, 0x43, 0x58, 0x49, 0x49,
	0x43, 0x61, 0x2F, 0x63, 0x43, 0x61, 0x2F, 0x73,
	0x43, 0x61, 0xCA, 0xBE, 0x43, 0x62, 0x61, 0x72,
	0x43, 0x63, 0x2F, 0x6F, 0x43, 0x63, 0x2F, 0x75,
	0x43, 0x63, 0x61, 0x6C, 0x43, 0x63, 0x6D, 0x32,
	0x43, 0x63, 0x6D, 0x33, 0x43, 0x64, 0x6D, 0x32,
	// Bytes 1c00 - 1c3f
	0x43, 0x64, 0x6D, 0x33, 0x43, 0x65, 0x72, 0x67,
	0x43, 0x66, 0x66, 0x69, 0x43, 0x66, 0x66, 0x6C,
	0x43, 0x67, 0x61, 0x6C, 0x43, 0x68, 0x50, 0x61,
	0x43, 0x69, 0x69, 0x69, 0x43, 0x6B, 0x48, 0x7A,
	0x43, 0x6B, 0x50, 0x61, 0x43, 0x6B, 0x6D, 0x32,
	0x43, 0x6B, 0x6D, 0x33, 0x43, 0x6B, 0xCE, 0xA9,
	0x43, 0x6C, 0x6F, 0x67, 0x43, 0x6C, 0xC2, 0xB7,
	0x43, 0x6D, 0x69, 0x6C, 0x43, 0x6D, 0x6D, 0x32,
	// Bytes 1c40 - 1c7f
	0x43, 0x6D, 0x6D, 0x33, 0x43, 0x6D, 0x6F, 0x6C,
	0x43, 0x72, 0x61, 0x64, 0x43, 0x76, 0x69, 0x69,
	0x43, 0x78, 0x69, 0x69, 0x43, 0xC2, 0xB0, 0x43,
	0x43, 0xC2, 0xB0, 0x46, 0x43, 0xCA, 0xBC, 0x6E,
	0x43, 0xCE, 0xBC, 0x41, 0x43, 0xCE, 0xBC, 0x46,
	0x43, 0xCE, 0xBC, 0x56, 0x43, 0xCE, 0xBC, 0x57,
	0x43, 0xCE, 0xBC, 0x67, 0x43, 0xCE, 0xBC, 0x6C,
	0x43, 0xCE, 0xBC, 0x6D, 0x43, 0xCE, 0xBC, 0x73,
	// Bytes 1c80 - 1cbf
	0x44, 0x28, 0x31, 0x30, 0x29, 0x44, 0x28, 0x31,
	0x31, 0x29, 0x44, 0x28, 0x31, 0x32, 0x29, 0x44,
	0x28, 0x31, 0x33, 0x29, 0x44, 0x28, 0x31, 0x34,
	0x29, 0x44, 0x28, 0x31, 0x35, 0x29, 0x44, 0x28,
	0x31, 0x36, 0x29, 0x44, 0x28, 0x31, 0x37, 0x29,
	0x44, 0x28, 0x31, 0x38, 0x29, 0x44, 0x28, 0x31,
	0x39, 0x29, 0x44, 0x28, 0x32, 0x30, 0x29, 0x44,
	0x30, 0xE7, 0x82, 0xB9, 0x44, 0x31, 0xE2, 0x81,
	// Bytes 1cc0 - 1cff
	0x84, 0x44, 0x31, 0xE6, 0x97, 0xA5, 0x44, 0x31,
	0xE6, 0x9C, 0x88, 0x44, 0x31, 0xE7, 0x82, 0xB9,
	0x44, 0x32, 0xE6, 0x97, 0xA5, 0x44, 0x32, 0xE6,
	0x9C, 0x88, 0x44, 0x32, 0xE7, 0x82, 0xB9, 0x44,
	0x33, 0xE6, 0x97, 0xA5, 0x44, 0x33, 0xE6, 0x9C,
	0x88, 0x44, 0x33, 0xE7, 0x82, 0xB9, 0x44, 0x34,
	0xE6, 0x97, 0xA5, 0x44, 0x34, 0xE6, 0x9C, 0x88,
	0x44, 0x34, 0xE7, 0x82, 0xB9, 0x44, 0x35, 0xE6,
	// Bytes 1d00 - 1d3f
	0x97, 0xA5, 0x44, 0x35, 0xE6, 0x9C, 0x88, 0x44,
	0x35, 0xE7, 0x82, 0xB9, 0x44, 0x36, 0xE6, 0x97,
	0xA5, 0x44, 0x36, 0xE6, 0x9C, 0x88, 0x44, 0x36,
	0xE7, 0x82, 0xB9, 0x44, 0x37, 0xE6, 0x97, 0xA5,
	0x44, 0x37, 0xE6, 0x9C, 0x88, 0x44, 0x37, 0xE7,
	0x82, 0xB9, 0x44, 0x38, 0xE6, 0x97, 0xA5, 0x44,
	0x38, 0xE6, 0x9C, 0x88, 0x44, 0x38, 0xE7, 0x82,
	0xB9, 0x44, 0x39, 0xE6, 0x97, 0xA5, 0x44, 0x39,
	// Bytes 1d40 - 1d7f
	0xE6, 0x9C, 0x88, 0x44, 0x39, 0xE7, 0x82, 0xB9,
	0x44, 0x56, 0x49, 0x49, 0x49, 0x44, 0x61, 0x2E,
	0x6D, 0x2E, 0x44, 0x6B, 0x63, 0x61, 0x6C, 0x44,
	0x70, 0x2E, 0x6D, 0x2E, 0x44, 0x76, 0x69, 0x69,
	0x69, 0x44, 0xD5, 0xA5, 0xD6, 0x82, 0x44, 0xD5,
	0xB4, 0xD5, 0xA5, 0x44, 0xD5, 0xB4, 0xD5, 0xAB,
	0x44, 0xD5, 0xB4, 0xD5, 0xAD, 0x44, 0xD5, 0xB4,
	0xD5, 0xB6, 0x44, 0xD5, 0xBE, 0xD5, 0xB6, 0x44,
	// Bytes 1d80 - 1dbf
	0xD7, 0x90, 0xD7, 0x9C, 0x44, 0xD8, 0xA7, 0xD9,
	0xB4, 0x44, 0xD8, 0xA8, 0xD8, 0xAC, 0x44, 0xD8,
	0xA8, 0xD8, 0xAD, 0x44, 0xD8, 0xA8, 0xD8, 0xAE,
	0x44, 0xD8, 0xA8, 0xD8, 0xB1, 0x44, 0xD8, 0xA8,
	0xD8, 0xB2, 0x44, 0xD8, 0xA8, 0xD9, 0x85, 0x44,
	0xD8, 0xA8, 0xD9, 0x86, 0x44, 0xD8, 0xA8, 0xD9,
	0x87, 0x44, 0xD8, 0xA8, 0xD9, 0x89, 0x44, 0xD8,
	0xA8, 0xD9, 0x8A, 0x44, 0xD8, 0xAA, 0xD8, 0xAC,
	// Bytes 1dc0 - 1dff
	0x44, 0xD8, 0xAA, 0xD8, 0xAD, 0x44, 0xD8, 0xAA,
	0xD8, 0xAE, 0x44, 0xD8, 0xAA, 0xD8, 0xB1, 0x44,
	0xD8, 0xAA, 0xD8, 0xB2, 0x44, 0xD8, 0xAA, 0xD9,
	0x85, 0x44, 0xD8, 0xAA, 0xD9, 0x86, 0x44, 0xD8,
	0xAA, 0xD9, 0x87, 0x44, 0xD8, 0xAA, 0xD9, 0x89,
	0x44, 0xD8, 0xAA, 0xD9, 0x8A, 0x44, 0xD8, 0xAB,
	0xD8, 0xAC, 0x44, 0xD8, 0xAB, 0xD8, 0xB1, 0x44,
	0xD8, 0xAB, 0xD8, 0xB2, 0x44, 0xD8, 0xAB, 0xD9,
	// Bytes 1e00 - 1e3f
	0x85, 0x44, 0xD8, 0xAB, 0xD9, 0x86, 0x44, 0xD8,
	0xAB, 0xD9, 0x87, 0x44, 0xD8, 0xAB, 0xD9, 0x89,
	0x44, 0xD8, 0xAB, 0xD9, 0x8A, 0x44, 0xD8, 0xAC,
	0xD8, 0xAD, 0x44, 0xD8, 0xAC, 0xD9, 0x85, 0x44,
	0xD8, 0xAC, 0xD9, 0x89, 0x44, 0xD8, 0xAC, 0xD9,
	0x8A, 0x44, 0xD8, 0xAD, 0xD8, 0xAC, 0x44, 0xD8,
	0xAD, 0xD9, 0x85, 0x44, 0xD8, 0xAD, 0xD9, 0x89,
	0x44, 0xD8, 0xAD, 0xD9, 0x8A, 0x44, 0xD8, 0xAE,
	// Bytes 1e40 - 1e7f
	0xD8, 0xAC, 0x44, 0xD8, 0xAE, 0xD8, 0xAD, 0x44,
	0xD8, 0xAE, 0xD9, 0x85, 0x44, 0xD8, 0xAE, 0xD9,
	0x89, 0x44, 0xD8, 0xAE, 0xD9, 0x8A, 0x44, 0xD8,
	0xB3, 0xD8, 0xAC, 0x44, 0xD8, 0xB3, 0xD8, 0xAD,
	0x44, 0xD8, 0xB3, 0xD8, 0xAE, 0x44, 0xD8, 0xB3,
	0xD8, 0xB1, 0x44, 0xD8, 0xB3, 0xD9, 0x85, 0x44,
	0xD8, 0xB3, 0xD9, 0x87, 0x44, 0xD8, 0xB3, 0xD9,
	0x89, 0x44, 0xD8, 0xB3, 0xD9, 0x8A, 0x44, 0xD8,
	// Bytes 1e80 - 1ebf
	0xB4, 0xD8, 0xAC, 0x44, 0xD8, 0xB4, 0xD8, 0xAD,
	0x44, 0xD8, 0xB4, 0xD8, 0xAE, 0x44, 0xD8, 0xB4,
	0xD8, 0xB1, 0x44, 0xD8, 0xB4, 0xD9, 0x85, 0x44,
	0xD8, 0xB4, 0xD9, 0x87, 0x44, 0xD8, 0xB4, 0xD9,
	0x89, 0x44, 0xD8, 0xB4, 0xD9, 0x8A, 0x44, 0xD8,
	0xB5, 0xD8, 0xAD, 0x44, 0xD8, 0xB5, 0xD8, 0xAE,
	0x44, 0xD8, 0xB5, 0xD8, 0xB1, 0x44, 0xD8, 0xB5,
	0xD9, 0x85, 0x44, 0xD8, 0xB5, 0xD9, 0x89, 0x44,
	// Bytes 1ec0 - 1eff
	0xD8, 0xB5, 0xD9, 0x8A, 0x44, 0xD8, 0xB6, 0xD8,
	0xAC, 0x44, 0xD8, 0xB6, 0xD8, 0xAD, 0x44, 0xD8,
	0xB6, 0xD8, 0xAE, 0x44, 0xD8, 0xB6, 0xD8, 0xB1,
	0x44, 0xD8, 0xB6, 0xD9, 0x85, 0x44, 0xD8, 0xB6,
	0xD9, 0x89, 0x44, 0xD8, 0xB6, 0xD9, 0x8A, 0x44,
	0xD8, 0xB7, 0xD8, 0xAD, 0x44, 0xD8, 0xB7, 0xD9,
	0x85, 0x44, 0xD8, 0xB7, 0xD9, 0x89, 0x44, 0xD8,
	0xB7, 0xD9, 0x8A, 0x44, 0xD8, 0xB8, 0xD9, 0x85,
	// Bytes 1f00 - 1f3f
	0x44, 0xD8, 0xB9, 0xD8, 0xAC, 0x44, 0xD8, 0xB9,
	0xD9, 0x85, 0x44, 0xD8, 0xB9, 0xD9, 0x89, 0x44,
	0xD8, 0xB9, 0xD9, 0x8A, 0x44, 0xD8, 0xBA, 0xD8,
	0xAC, 0x44, 0xD8, 0xBA, 0xD9, 0x85, 0x44, 0xD8,
	0xBA, 0xD9, 0x89, 0x44, 0xD8, 0xBA, 0xD9, 0x8A,
	0x44, 0xD9, 0x81, 0xD8, 0xAC, 0x44, 0xD9, 0x81,
	0xD8, 0xAD, 0x44, 0xD9, 0x81, 0xD8, 0xAE, 0x44,
	0xD9, 0x81, 0xD9, 0x85, 0x44, 0xD9, 0x81, 0xD9,
	// Bytes 1f40 - 1f7f
	0x89, 0x44, 0xD9, 0x81, 0xD9, 0x8A, 0x44, 0xD9,
	0x82, 0xD8, 0xAD, 0x44, 0xD9, 0x82, 0xD9, 0x85,
	0x44, 0xD9, 0x82, 0xD9, 0x89, 0x44, 0xD9, 0x82,
	0xD9, 0x8A, 0x44, 0xD9, 0x83, 0xD8, 0xA7, 0x44,
	0xD9, 0x83, 0xD8, 0xAC, 0x44, 0xD9, 0x83, 0xD8,
	0xAD, 0x44, 0xD9, 0x83, 0xD8, 0xAE, 0x44, 0xD9,
	0x83, 0xD9, 0x84, 0x44, 0xD9, 0x83, 0xD9, 0x85,
	0x44, 0xD9, 0x83, 0xD9, 0x89, 0x44, 0xD9, 0x83,
	// Bytes 1f80 - 1fbf
	0xD9, 0x8A, 0x44, 0xD9, 0x84, 0xD8, 0xA7, 0x44,
	0xD9, 0x84, 0xD8, 0xAC, 0x44, 0xD9, 0x84, 0xD8,
	0xAD, 0x44, 0xD9, 0x84, 0xD8, 0xAE, 0x44, 0xD9,
	0x84, 0xD9, 0x85, 0x44, 0xD9, 0x84, 0xD9, 0x87,
	0x44, 0xD9, 0x84, 0xD9, 0x89, 0x44, 0xD9, 0x84,
	0xD9, 0x8A, 0x44, 0xD9, 0x85, 0xD8, 0xA7, 0x44,
	0xD9, 0x85, 0xD8, 0xAC, 0x44, 0xD9, 0x85, 0xD8,
	0xAD, 0x44, 0xD9, 0x85, 0xD8, 0xAE, 0x44, 0xD9,
	// Bytes 1fc0 - 1fff
	0x85, 0xD9, 0x85, 0x44, 0xD9, 0x85, 0xD9, 0x89,
	0x44, 0xD9, 0x85, 0xD9, 0x8A, 0x44, 0xD9, 0x86,
	0xD8, 0xAC, 0x44, 0xD9, 0x86, 0xD8, 0xAD, 0x44,
	0xD9, 0x86, 0xD8, 0xAE, 0x44, 0xD9, 0x86, 0xD8,
	0xB1, 0x44, 0xD9, 0x86, 0xD8, 0xB2, 0x44, 0xD9,
	0x86, 0xD9, 0x85, 0x44, 0xD9, 0x86, 0xD9, 0x86,
	0x44, 0xD9, 0x86, 0xD9, 0x87, 0x44, 0xD9, 0x86,
	0xD9, 0x89, 0x44, 0xD9, 0x86, 0xD9, 0x8A, 0x44,
	// Bytes 2000 - 203f
	0xD9, 0x87, 0xD8, 0xAC, 0x44, 0xD9, 0x87, 0xD9,
	0x85, 0x44, 0xD9, 0x87, 0xD9, 0x89, 0x44, 0xD9,
	0x87, 0xD9, 0x8A, 0x44, 0xD9, 0x88, 0xD9, 0xB4,
	0x44, 0xD9, 0x8A, 0xD8, 0xAC, 0x44, 0xD9, 0x8A,
	0xD8, 0xAD, 0x44, 0xD9, 0x8A, 0xD8, 0xAE, 0x44,
	0xD9, 0x8A, 0xD8, 0xB1, 0x44, 0xD9, 0x8A, 0xD8,
	0xB2, 0x44, 0xD9, 0x8A, 0xD9, 0x85, 0x44, 0xD9,
	0x8A, 0xD9, 0x86, 0x44, 0xD9, 0x8A, 0xD9, 0x87,
	// Bytes 2040 - 207f
	0x44, 0xD9, 0x8A, 0xD9, 0x89, 0x44, 0xD9, 0x8A,
	0xD9, 0x8A, 0x44, 0xD9, 0x8A, 0xD9, 0xB4, 0x44,
	0xDB, 0x87, 0xD9, 0xB4, 0x45, 0x28, 0xE1, 0x84,
	0x80, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x82, 0x29,
	0x45, 0x28, 0xE1, 0x84, 0x83, 0x29, 0x45, 0x28,
	0xE1, 0x84, 0x85, 0x29, 0x45, 0x28, 0xE1, 0x84,
	0x86, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x87, 0x29,
	0x45, 0x28, 0xE1, 0x84, 0x89, 0x29, 0x45, 0x28,
	// Bytes 2080 - 20bf
	0xE1, 0x84, 0x8B, 0x29, 0x45, 0x28, 0xE1, 0x84,
	0x8C, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x8E, 0x29,
	0x45, 0x28, 0xE1, 0x84, 0x8F, 0x29, 0x45, 0x28,
	0xE1, 0x84, 0x90, 0x29, 0x45, 0x28, 0xE1, 0x84,
	0x91, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x92, 0x29,
	0x45, 0x28, 0xE4, 0xB8, 0x80, 0x29, 0x45, 0x28,
	0xE4, 0xB8, 0x83, 0x29, 0x45, 0x28, 0xE4, 0xB8,
	0x89, 0x29, 0x45, 0x28, 0xE4, 0xB9, 0x9D, 0x29,
	// Bytes 20c0 - 20ff
	0x45, 0x28, 0xE4, 0xBA, 0x8C, 0x29, 0x45, 0x28,
	0xE4, 0xBA, 0x94, 0x29, 0x45, 0x28, 0xE4, 0xBB,
	0xA3, 0x29, 0x45, 0x28, 0xE4, 0xBC, 0x81, 0x29,
	0x45, 0x28, 0xE4, 0xBC, 0x91, 0x29, 0x45, 0x28,
	0xE5, 0x85, 0xAB, 0x29, 0x45, 0x28, 0xE5, 0x85,
	0xAD, 0x29, 0x45, 0x28, 0xE5, 0x8A, 0xB4, 0x29,
	0x45, 0x28, 0xE5, 0x8D, 0x81, 0x29, 0x45, 0x28,
	0xE5, 0x8D, 0x94, 0x29, 0x45, 0x28, 0xE5, 0x90,
	// Bytes 2100 - 213f
	0x8D, 0x29, 0x45, 0x28, 0xE5, 0x91, 0xBC, 0x29,
	0x45, 0x28, 0xE5, 0x9B, 0x9B, 0x29, 0x45, 0x28,
	0xE5, 0x9C, 0x9F, 0x29, 0x45, 0x28, 0xE5, 0xAD,
	0xA6, 0x29, 0x45, 0x28, 0xE6, 0x97, 0xA5, 0x29,
	0x45, 0x28, 0xE6, 0x9C, 0x88, 0x29, 0x45, 0x28,
	0xE6, 0x9C, 0x89, 0x29, 0x45, 0x28, 0xE6, 0x9C,
	0xA8, 0x29, 0x45, 0x28, 0xE6, 0xA0, 0xAA, 0x29,
	0x45, 0x28, 0xE6, 0xB0, 0xB4, 0x29, 0x45, 0x28,
	// Bytes 2140 - 217f
	0xE7, 0x81, 0xAB, 0x29, 0x45, 0x28, 0xE7, 0x89,
	0xB9, 0x29, 0x45, 0x28, 0xE7, 0x9B, 0xA3, 0x29,
	0x45, 0x28, 0xE7, 0xA4, 0xBE, 0x29, 0x45, 0x28,
	0xE7, 0xA5, 0x9D, 0x29, 0x45, 0x28, 0xE7, 0xA5,
	0xAD, 0x29, 0x45, 0x28, 0xE8, 0x87, 0xAA, 0x29,
	0x45, 0x28, 0xE8, 0x87, 0xB3, 0x29, 0x45, 0x28,
	0xE8, 0xB2, 0xA1, 0x29, 0x45, 0x28, 0xE8, 0xB3,
	0x87, 0x29, 0x45, 0x28, 0xE9, 0x87, 0x91, 0x29,
	// Bytes 2180 - 21bf
	0x45, 0x30, 0xE2, 0x81, 0x84, 0x33, 0x45, 0x31,
	0x30, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x30, 0xE6,
	0x9C, 0x88, 0x45, 0x31, 0x30, 0xE7, 0x82, 0xB9,
	0x45, 0x31, 0x31, 0xE6, 0x97, 0xA5, 0x45, 0x31,
	0x31, 0xE6, 0x9C, 0x88, 0x45, 0x31, 0x31, 0xE7,
	0x82, 0xB9, 0x45, 0x31, 0x32, 0xE6, 0x97, 0xA5,
	0x45, 0x31, 0x32, 0xE6, 0x9C, 0x88, 0x45, 0x31,
	0x32, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x33, 0xE6,
	// Bytes 21c0 - 21ff
	0x97, 0xA5, 0x45, 0x31, 0x33, 0xE7, 0x82, 0xB9,
	0x45, 0x31, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x31,
	0x34, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x35, 0xE6,
	0x97, 0xA5, 0x45, 0x31, 0x35, 0xE7, 0x82, 0xB9,
	0x45, 0x31, 0x36, 0xE6, 0x97, 0xA5, 0x45, 0x31,
	0x36, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x37, 0xE6,
	0x97, 0xA5, 0x45, 0x31, 0x37, 0xE7, 0x82, 0xB9,
	0x45, 0x31, 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x31,
	// Bytes 2200 - 223f
	0x38, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x39, 0xE6,
	0x97, 0xA5, 0x45, 0x31, 0x39, 0xE7, 0x82, 0xB9,
	0x45, 0x31, 0xE2, 0x81, 0x84, 0x32, 0x45, 0x31,
	0xE2, 0x81, 0x84, 0x33, 0x45, 0x31, 0xE2, 0x81,
	0x84, 0x34, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x35,
	0x45, 0x31, 0xE2, 0x81, 0x84, 0x36, 0x45, 0x31,
	0xE2, 0x81, 0x84, 0x37, 0x45, 0x31, 0xE2, 0x81,
	0x84, 0x38, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x39,
	// Bytes 2240 - 227f
	0x45, 0x32, 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x32,
	0x30, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x31, 0xE6,
	0x97, 0xA5, 0x45, 0x32, 0x31, 0xE7, 0x82, 0xB9,
	0x45, 0x32, 0x32, 0xE6, 0x97, 0xA5, 0x45, 0x32,
	0x32, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x33, 0xE6,
	0x97, 0xA5, 0x45, 0x32, 0x33, 0xE7, 0x82, 0xB9,
	0x45, 0x32, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x32,
	0x34, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x35, 0xE6,
	// Bytes 2280 - 22bf
	0x97, 0xA5, 0x45, 0x32, 0x36, 0xE6, 0x97, 0xA5,
	0x45, 0x32, 0x37, 0xE6, 0x97, 0xA5, 0x45, 0x32,
	0x38, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x39, 0xE6,
	0x97, 0xA5, 0x45, 0x32, 0xE2, 0x81, 0x84, 0x33,
	0x45, 0x32, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33,
	0x30, 0xE6, 0x97, 0xA5, 0x45, 0x33, 0x31, 0xE6,
	0x97, 0xA5, 0x45, 0x33, 0xE2, 0x81, 0x84, 0x34,
	0x45, 0x33, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33,
	// Bytes 22c0 - 22ff
	0xE2, 0x81, 0x84, 0x38, 0x45, 0x34, 0xE2, 0x81,
	0x84, 0x35, 0x45, 0x35, 0xE2, 0x81, 0x84, 0x36,
	0x45, 0x35, 0xE2, 0x81, 0x84, 0x38, 0x45, 0x37,
	0xE2, 0x81, 0x84, 0x38, 0x45, 0x41, 0xE2, 0x88,
	0x95, 0x6D, 0x45, 0x56, 0xE2, 0x88, 0x95, 0x6D,
	0x45, 0x6D, 0xE2, 0x88, 0x95, 0x73, 0x46, 0x31,
	0xE2, 0x81, 0x84, 0x31, 0x30, 0x46, 0x43, 0xE2,
	0x88, 0x95, 0x6B, 0x67, 0x46, 0x6D, 0xE2, 0x88,
	// Bytes 2300 - 233f
	0x95, 0x73, 0x32, 0x46, 0xD8, 0xA8, 0xD8, 0xAD,
	0xD9, 0x8A, 0x46, 0xD8, 0xA8, 0xD8, 0xAE, 0xD9,
	0x8A, 0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x85,
	0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x89, 0x46,
	0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8,
	0xAA, 0xD8, 0xAD, 0xD8, 0xAC, 0x46, 0xD8, 0xAA,
	0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8,
	0xAE, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, 0xAE,
	// Bytes 2340 - 237f
	0xD9, 0x89, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, 0xD9,
	0x8A, 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAC,
	0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAD, 0x46,
	0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAE, 0x46, 0xD8,
	0xAA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAA,
	0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD8,
	0xAD, 0xD9, 0x89, 0x46, 0xD8, 0xAC, 0xD8, 0xAD,
	0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD8,
	// Bytes 2380 - 23bf
	0xAD, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x89,
	0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x8A, 0x46,
	0xD8, 0xAD, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8,
	0xAD, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAD,
	0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB3, 0xD8,
	0xAC, 0xD8, 0xAD, 0x46, 0xD8, 0xB3, 0xD8, 0xAC,
	0xD9, 0x89, 0x46, 0xD8, 0xB3, 0xD8, 0xAD, 0xD8,
	0xAC, 0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x89,
	// Bytes 23c0 - 23ff
	0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x8A, 0x46,
	0xD8, 0xB3, 0xD9, 0x85, 0xD8, 0xAC, 0x46, 0xD8,
	0xB3, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, 0xB3,
	0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8,
	0xAC, 0xD9, 0x8A, 0x46, 0xD8, 0xB4, 0xD8, 0xAD,
	0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8, 0xAD, 0xD9,
	0x8A, 0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD8, 0xAE,
	0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD9, 0x85, 0x46,
	// Bytes 2400 - 243f
	0xD8, 0xB5, 0xD8, 0xAD, 0xD8, 0xAD, 0x46, 0xD8,
	0xB5, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xB5,
	0xD9, 0x84, 0xD9, 0x89, 0x46, 0xD8, 0xB5, 0xD9,
	0x84, 0xDB, 0x92, 0x46, 0xD8, 0xB5, 0xD9, 0x85,
	0xD9, 0x85, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9,
	0x89, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, 0x8A,
	0x46, 0xD8, 0xB6, 0xD8, 0xAE, 0xD9, 0x85, 0x46,
	0xD8, 0xB7, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8,
	// Bytes 2440 - 247f
	0xB7, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB7,
	0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB9, 0xD8,
	0xAC, 0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85,
	0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9,
	0x89, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, 0x8A,
	0x46, 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x85, 0x46,
	0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8,
	0xBA, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x81,
	// Bytes 2480 - 24bf
	0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x81, 0xD9,
	0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x82, 0xD9, 0x84,
	0xDB, 0x92, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD8,
	0xAD, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x85,
	0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x8A, 0x46,
	0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9,
	0x83, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x84,
	0xD8, 0xAC, 0xD8, 0xAC, 0x46, 0xD9, 0x84, 0xD8,
	// Bytes 24c0 - 24ff
	0xAC, 0xD9, 0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAC,
	0xD9, 0x8A, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9,
	0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x89,
	0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x8A, 0x46,
	0xD9, 0x84, 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9,
	0x84, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD9, 0x84,
	0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD8,
	0xAC, 0xD8, 0xAD, 0x46, 0xD9, 0x85, 0xD8, 0xAC,
	// Bytes 2500 - 253f
	0xD8, 0xAE, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9,
	0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x8A,
	0x46, 0xD9, 0x85, 0xD8, 0xAD, 0xD8, 0xAC, 0x46,
	0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9,
	0x85, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x85,
	0xD8, 0xAE, 0xD8, 0xAC, 0x46, 0xD9, 0x85, 0xD8,
	0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAE,
	0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD9, 0x85, 0xD9,
	// Bytes 2540 - 257f
	0x8A, 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD8, 0xAD,
	0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x85, 0x46,
	0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x89, 0x46, 0xD9,
	0x86, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x86,
	0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, 0x86, 0xD8,
	0xAD, 0xD9, 0x89, 0x46, 0xD9, 0x86, 0xD8, 0xAD,
	0xD9, 0x8A, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9,
	0x89, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x8A,
	// Bytes 2580 - 25bf
	0x46, 0xD9, 0x87, 0xD9, 0x85, 0xD8, 0xAC, 0x46,
	0xD9, 0x87, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9,
	0x8A, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x8A,
	0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9,
	0x85, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x85,
	0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8,
	0xA7, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAC,
	0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAD, 0x46,
	// Bytes 25c0 - 25ff
	0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAE, 0x46, 0xD9,
	0x8A, 0xD9, 0x94, 0xD8, 0xB1, 0x46, 0xD9, 0x8A,
	0xD9, 0x94, 0xD8, 0xB2, 0x46, 0xD9, 0x8A, 0xD9,
	0x94, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x94,
	0xD9, 0x86, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9,
	0x87, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x88,
	0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x89, 0x46,
	0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x8A, 0x46, 0xD9,
	// Bytes 2600 - 263f
	0x8A, 0xD9, 0x94, 0xDB, 0x86, 0x46, 0xD9, 0x8A,
	0xD9, 0x94, 0xDB, 0x87, 0x46, 0xD9, 0x8A, 0xD9,
	0x94, 0xDB, 0x88, 0x46, 0xD9, 0x8A, 0xD9, 0x94,
	0xDB, 0x90, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB,
	0x95, 0x46, 0xE0, 0xB9, 0x8D, 0xE0, 0xB8, 0xB2,
	0x46, 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0x99, 0x46,
	0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0xA1, 0x46, 0xE0,
	0xBB, 0x8D, 0xE0, 0xBA, 0xB2, 0x46, 0xE0, 0xBD,
	// Bytes 2640 - 267f
	0x80, 0xE0, 0xBE, 0xB5, 0x46, 0xE0, 0xBD, 0x82,
	0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x8C, 0xE0,
	0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x91, 0xE0, 0xBE,
	0xB7, 0x46, 0xE0, 0xBD, 0x96, 0xE0, 0xBE, 0xB7,
	0x46, 0xE0, 0xBD, 0x9B, 0xE0, 0xBE, 0xB7, 0x46,
	0xE0, 0xBE, 0x90, 0xE0, 0xBE, 0xB5, 0x46, 0xE0,
	0xBE, 0x92, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE,
	0x9C, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA1,
	// Bytes 2680 - 26bf
	0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA6, 0xE0,
	0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xAB, 0xE0, 0xBE,
	0xB7, 0x46, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2,
	0x46, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0x46,
	0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0x46, 0xE2,
	0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x46, 0xE3, 0x81,
	0xBB, 0xE3, 0x81, 0x8B, 0x46, 0xE3, 0x82, 0x88,
	0xE3, 0x82, 0x8A, 0x46, 0xE3, 0x82, 0xAD, 0xE3,
	// Bytes 26c0 - 26ff
	0x83, 0xAD, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x82,
	0xB3, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0x88,
	0x46, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xB3, 0x46,
	0xE3, 0x83, 0x8A, 0xE3, 0x83, 0x8E, 0x46, 0xE3,
	0x83, 0x9B, 0xE3, 0x83, 0xB3, 0x46, 0xE3, 0x83,
	0x9F, 0xE3, 0x83, 0xAA, 0x46, 0xE3, 0x83, 0xAA,
	0xE3, 0x83, 0xA9, 0x46, 0xE3, 0x83, 0xAC, 0xE3,
	0x83, 0xA0, 0x46, 0xE5, 0xA4, 0xA7, 0xE6, 0xAD,
	// Bytes 2700 - 273f
	0xA3, 0x46, 0xE5, 0xB9, 0xB3, 0xE6, 0x88, 0x90,
	0x46, 0xE6, 0x98, 0x8E, 0xE6, 0xB2, 0xBB, 0x46,
	0xE6, 0x98, 0xAD, 0xE5, 0x92, 0x8C, 0x47, 0x72,
	0x61, 0x64, 0xE2, 0x88, 0x95, 0x73, 0x47, 0xE3,
	0x80, 0x94, 0x53, 0xE3, 0x80, 0x95, 0x48, 0x28,
	0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x29, 0x48,
	0x28, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x29,
	0x48, 0x28, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1,
	// Bytes 2740 - 277f
	0x29, 0x48, 0x28, 0xE1, 0x84, 0x85, 0xE1, 0x85,
	0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x86, 0xE1,
	0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x87,
	0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84,
	0x89, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1,
	0x84, 0x8B, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28,
	0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x29, 0x48,
	0x28, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xAE, 0x29,
	// Bytes 2780 - 27bf
	0x48, 0x28, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1,
	0x29, 0x48, 0x28, 0xE1, 0x84, 0x8F, 0xE1, 0x85,
	0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x90, 0xE1,
	0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x91,
	0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84,
	0x92, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x72, 0x61,
	0x64, 0xE2, 0x88, 0x95, 0x73, 0x32, 0x48, 0xD8,
	0xA7, 0xD9, 0x83, 0xD8, 0xA8, 0xD8, 0xB1, 0x48,
	// Bytes 27c0 - 27ff
	0xD8, 0xA7, 0xD9, 0x84, 0xD9, 0x84, 0xD9, 0x87,
	0x48, 0xD8, 0xB1, 0xD8, 0xB3, 0xD9, 0x88, 0xD9,
	0x84, 0x48, 0xD8, 0xB1, 0xDB, 0x8C, 0xD8, 0xA7,
	0xD9, 0x84, 0x48, 0xD8, 0xB5, 0xD9, 0x84, 0xD8,
	0xB9, 0xD9, 0x85, 0x48, 0xD8, 0xB9, 0xD9, 0x84,
	0xD9, 0x8A, 0xD9, 0x87, 0x48, 0xD9, 0x85, 0xD8,
	0xAD, 0xD9, 0x85, 0xD8, 0xAF, 0x48, 0xD9, 0x88,
	0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x49, 0xE2,
	// Bytes 2800 - 283f
	0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2,
	0x49, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0xE2,
	0x80, 0xB5, 0x49, 0xE2, 0x88, 0xAB, 0xE2, 0x88,
	0xAB, 0xE2, 0x88, 0xAB, 0x49, 0xE2, 0x88, 0xAE,
	0xE2, 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x49, 0xE3,
	0x80, 0x94, 0xE4, 0xB8, 0x89, 0xE3, 0x80, 0x95,
	0x49, 0xE3, 0x80, 0x94, 0xE4, 0xBA, 0x8C, 0xE3,
	0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE5, 0x8B,
	// Bytes 2840 - 287f
	0x9D, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94,
	0xE5, 0xAE, 0x89, 0xE3, 0x80, 0x95, 0x49, 0xE3,
	0x80, 0x94, 0xE6, 0x89, 0x93, 0xE3, 0x80, 0x95,
	0x49, 0xE3, 0x80, 0x94, 0xE6, 0x95, 0x97, 0xE3,
	0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE6, 0x9C,
	0xAC, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94,
	0xE7, 0x82, 0xB9, 0xE3, 0x80, 0x95, 0x49, 0xE3,
	0x80, 0x94, 0xE7, 0x9B, 0x97, 0xE3, 0x80, 0x95,
	// Bytes 2880 - 28bf
	0x49, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xBC, 0xE3,
	0x83, 0xAB, 0x49, 0xE3, 0x82, 0xA4, 0xE3, 0x83,
	0xB3, 0xE3, 0x83, 0x81, 0x49, 0xE3, 0x82, 0xA6,
	0xE3, 0x82, 0xA9, 0xE3, 0x83, 0xB3, 0x49, 0xE3,
	0x82, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB9,
	0x49, 0xE3, 0x82, 0xAA, 0xE3, 0x83, 0xBC, 0xE3,
	0x83, 0xA0, 0x49, 0xE3, 0x82, 0xAB, 0xE3, 0x82,
	0xA4, 0xE3, 0x83, 0xAA, 0x49, 0xE3, 0x82, 0xB1,
	// Bytes 28c0 - 28ff
	0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xB9, 0x49, 0xE3,
	0x82, 0xB3, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x8A,
	0x49, 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3,
	0x83, 0x81, 0x49, 0xE3, 0x82, 0xBB, 0xE3, 0x83,
	0xB3, 0xE3, 0x83, 0x88, 0x49, 0xE3, 0x83, 0x86,
	0xE3, 0x82, 0x99, 0xE3, 0x82, 0xB7, 0x49, 0xE3,
	0x83, 0x88, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB,
	0x49, 0xE3, 0x83, 0x8E, 0xE3, 0x83, 0x83, 0xE3,
	// Bytes 2900 - 293f
	0x83, 0x88, 0x49, 0xE3, 0x83, 0x8F, 0xE3, 0x82,
	0xA4, 0xE3, 0x83, 0x84, 0x49, 0xE3, 0x83, 0x92,
	0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, 0x49, 0xE3,
	0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xB3,
	0x49, 0xE3, 0x83, 0x95, 0xE3, 0x83, 0xA9, 0xE3,
	0x83, 0xB3, 0x49, 0xE3, 0x83, 0x98, 0xE3, 0x82,
	0x9A, 0xE3, 0x82, 0xBD, 0x49, 0xE3, 0x83, 0x98,
	0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x84, 0x49, 0xE3,
	// Bytes 2940 - 297f
	0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB,
	0x49, 0xE3, 0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3,
	0x83, 0xB3, 0x49, 0xE3, 0x83, 0x9E, 0xE3, 0x82,
	0xA4, 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, 0x9E,
	0xE3, 0x83, 0x83, 0xE3, 0x83, 0x8F, 0x49, 0xE3,
	0x83, 0x9E, 0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xAF,
	0x49, 0xE3, 0x83, 0xA4, 0xE3, 0x83, 0xBC, 0xE3,
	0x83, 0xAB, 0x49, 0xE3, 0x83, 0xA6, 0xE3, 0x82,
	// Bytes 2980 - 29bf
	0xA2, 0xE3, 0x83, 0xB3, 0x49, 0xE3, 0x83, 0xAF,
	0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0x4C, 0xE2,
	0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2,
	0xE2, 0x80, 0xB2, 0x4C, 0xE2, 0x88, 0xAB, 0xE2,
	0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB,
	0x4C, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xAB, 0xE3,
	0x83, 0x95, 0xE3, 0x82, 0xA1, 0x4C, 0xE3, 0x82,
	0xA8, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xAB, 0xE3,
	// Bytes 29c0 - 29ff
	0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x82,
	0x99, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xB3, 0x4C,
	0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83,
	0xB3, 0xE3, 0x83, 0x9E, 0x4C, 0xE3, 0x82, 0xAB,
	0xE3, 0x83, 0xA9, 0xE3, 0x83, 0x83, 0xE3, 0x83,
	0x88, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x83, 0xAD,
	0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC, 0x4C, 0xE3,
	0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x8B,
	// Bytes 2a00 - 2a3f
	0xE3, 0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAD, 0xE3,
	0x83, 0xA5, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC,
	0x4C, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3,
	0x83, 0xA9, 0xE3, 0x83, 0xA0, 0x4C, 0xE3, 0x82,
	0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xBC, 0xE3,
	0x83, 0x8D, 0x4C, 0xE3, 0x82, 0xB5, 0xE3, 0x82,
	0xA4, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C,
	0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83,
	// Bytes 2a40 - 2a7f
	0xBC, 0xE3, 0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x8F,
	0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x83,
	0x84, 0x4C, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A,
	0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C, 0xE3,
	0x83, 0x95, 0xE3, 0x82, 0xA3, 0xE3, 0x83, 0xBC,
	0xE3, 0x83, 0x88, 0x4C, 0xE3, 0x83, 0x98, 0xE3,
	0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xBF,
	0x4C, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3,
	// Bytes 2a80 - 2abf
	0x83, 0x8B, 0xE3, 0x83, 0x92, 0x4C, 0xE3, 0x83,
	0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xB3, 0xE3,
	0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x9B, 0xE3, 0x82,
	0x99, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x88, 0x4C,
	0xE3, 0x83, 0x9E, 0xE3, 0x82, 0xA4, 0xE3, 0x82,
	0xAF, 0xE3, 0x83, 0xAD, 0x4C, 0xE3, 0x83, 0x9F,
	0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83,
	0xB3, 0x4C, 0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xBC,
	// Bytes 2ac0 - 2aff
	0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x4C, 0xE3,
	0x83, 0xAA, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88,
	0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x83, 0xAB, 0xE3,
	0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC,
	0x4C, 0xE6, 0xA0, 0xAA, 0xE5, 0xBC, 0x8F, 0xE4,
	0xBC, 0x9A, 0xE7, 0xA4, 0xBE, 0x4E, 0x28, 0xE1,
	0x84, 0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x92,
	0xE1, 0x85, 0xAE, 0x29, 0x4F, 0xD8, 0xAC, 0xD9,
	// Bytes 2b00 - 2b3f
	0x84, 0x20, 0xD8, 0xAC, 0xD9, 0x84, 0xD8, 0xA7,
	0xD9, 0x84, 0xD9, 0x87, 0x4F, 0xE3, 0x82, 0xA2,
	0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83,
	0xBC, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xA2,
	0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x98, 0xE3, 0x82,
	0x9A, 0xE3, 0x82, 0xA2, 0x4F, 0xE3, 0x82, 0xAD,
	0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xAF, 0xE3, 0x83,
	0x83, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xB5,
	// Bytes 2b40 - 2b7f
	0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x81, 0xE3, 0x83,
	0xBC, 0xE3, 0x83, 0xA0, 0x4F, 0xE3, 0x83, 0x8F,
	0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83,
	0xAC, 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x98,
	0xE3, 0x82, 0xAF, 0xE3, 0x82, 0xBF, 0xE3, 0x83,
	0xBC, 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x9B,
	0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xA4, 0xE3, 0x83,
	0xB3, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x83, 0x9E,
	// Bytes 2b80 - 2bbf
	0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB7, 0xE3, 0x83,
	0xA7, 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xA1,
	0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83,
	0x88, 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xAB,
	0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x95, 0xE3, 0x82,
	0x99, 0xE3, 0x83, 0xAB, 0x51, 0x28, 0xE1, 0x84,
	0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x8C, 0xE1,
	0x85, 0xA5, 0xE1, 0x86, 0xAB, 0x29, 0x52, 0xE3,
	// Bytes 2bc0 - 2bff
	0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB,
	0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83,
	0xBC, 0x52, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD,
	0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83,
	0xA9, 0xE3, 0x83, 0xA0, 0x52, 0xE3, 0x82, 0xAD,
	0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xA1, 0xE3, 0x83,
	0xBC, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x52,
	0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83,
	// Bytes 2c00 - 2c3f
	0xA9, 0xE3, 0x83, 0xA0, 0xE3, 0x83, 0x88, 0xE3,
	0x83, 0xB3, 0x52, 0xE3, 0x82, 0xAF, 0xE3, 0x83,
	0xAB, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0xE3,
	0x82, 0xA4, 0xE3, 0x83, 0xAD, 0x52, 0xE3, 0x83,
	0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3,
	0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88,
	0x52, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3,
	0x82, 0xA2, 0xE3, 0x82, 0xB9, 0xE3, 0x83, 0x88,
	// Bytes 2c40 - 2c7f
	0xE3, 0x83, 0xAB, 0x52, 0xE3, 0x83, 0x95, 0xE3,
	0x82, 0x99, 0xE3, 0x83, 0x83, 0xE3, 0x82, 0xB7,
	0xE3, 0x82, 0xA7, 0xE3, 0x83, 0xAB, 0x52, 0xE3,
	0x83, 0x9F, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0x8F,
	0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83,
	0xAB, 0x52, 0xE3, 0x83, 0xAC, 0xE3, 0x83, 0xB3,
	0xE3, 0x83, 0x88, 0xE3, 0x82, 0xB1, 0xE3, 0x82,
	0x99, 0xE3, 0x83, 0xB3, 0x61, 0xD8, 0xB5, 0xD9,
	// Bytes 2c80 - 2cbf
	0x84, 0xD9, 0x89, 0x20, 0xD8, 0xA7, 0xD9, 0x84,
	0xD9, 0x84, 0xD9, 0x87, 0x20, 0xD8, 0xB9, 0xD9,
	0x84, 0xD9, 0x8A, 0xD9, 0x87, 0x20, 0xD9, 0x88,
	0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x06, 0xE0,
	0xA7, 0x87, 0xE0, 0xA6, 0xBE, 0x01, 0x06, 0xE0,
	0xA7, 0x87, 0xE0, 0xA7, 0x97, 0x01, 0x06, 0xE0,
	0xAD, 0x87, 0xE0, 0xAC, 0xBE, 0x01, 0x06, 0xE0,
	0xAD, 0x87, 0xE0, 0xAD, 0x96, 0x01, 0x06, 0xE0,
	// Bytes 2cc0 - 2cff
	0xAD, 0x87, 0xE0, 0xAD, 0x97, 0x01, 0x06, 0xE0,
	0xAE, 0x92, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0,
	0xAF, 0x86, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0,
	0xAF, 0x86, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0,
	0xAF, 0x87, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0,
	0xB2, 0xBF, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0,
	0xB3, 0x86, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0,
	0xB3, 0x86, 0xE0, 0xB3, 0x96, 0x01, 0x06, 0xE0,
	// Bytes 2d00 - 2d3f
	0xB5, 0x86, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0,
	0xB5, 0x86, 0xE0, 0xB5, 0x97, 0x01, 0x06, 0xE0,
	0xB5, 0x87, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0,
	0xB7, 0x99, 0xE0, 0xB7, 0x9F, 0x01, 0x06, 0xE1,
	0x80, 0xA5, 0xE1, 0x80, 0xAE, 0x01, 0x06, 0xE1,
	0xAC, 0x85, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	0xAC, 0x87, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	0xAC, 0x89, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	// Bytes 2d40 - 2d7f
	0xAC, 0x8B, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	0xAC, 0x8D, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	0xAC, 0x91, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	0xAC, 0xBA, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	0xAC, 0xBC, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	0xAC, 0xBE, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	0xAC, 0xBF, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
	0xAD, 0x82, 0xE1, 0xAC, 0xB5, 0x01, 0x08, 0xF0,
	// Bytes 2d80 - 2dbf
	0x91, 0x84, 0xB1, 0xF0, 0x91, 0x84, 0xA7, 0x01,
	0x08, 0xF0, 0x91, 0x84, 0xB2, 0xF0, 0x91, 0x84,
	0xA7, 0x01, 0x08, 0xF0, 0x91, 0x8D, 0x87, 0xF0,
	0x91, 0x8C, 0xBE, 0x01, 0x08, 0xF0, 0x91, 0x8D,
	0x87, 0xF0, 0x91, 0x8D, 0x97, 0x01, 0x08, 0xF0,
	0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xB0, 0x01,
	0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92,
	0xBA, 0x01, 0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0,
	// Bytes 2dc0 - 2dff
	0x91, 0x92, 0xBD, 0x01, 0x08, 0xF0, 0x91, 0x96,
	0xB8, 0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, 0xF0,
	0x91, 0x96, 0xB9, 0xF0, 0x91, 0x96, 0xAF, 0x01,
	0x09, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0xE0,
	0xB3, 0x95, 0x02, 0x09, 0xE0, 0xB7, 0x99, 0xE0,
	0xB7, 0x8F, 0xE0, 0xB7, 0x8A, 0x12, 0x44, 0x44,
	0x5A, 0xCC, 0x8C, 0xC9, 0x44, 0x44, 0x7A, 0xCC,
	0x8C, 0xC9, 0x44, 0x64, 0x7A, 0xCC, 0x8C, 0xC9,
	// Bytes 2e00 - 2e3f
	0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x93, 0xC9,
	0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x94, 0xC9,
	0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x95, 0xB5,
	0x46, 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, 0x01,
	// Bytes 2e40 - 2e7f
	0x46, 0xE1, 0x84, 0x87, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x89, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xAE, 0x01,
	0x46, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x90, 0xE1, 0x85, 0xA1, 0x01,
	// Bytes 2e80 - 2ebf
	0x46, 0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1, 0x01,
	0x46, 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, 0x01,
	0x49, 0xE3, 0x83, 0xA1, 0xE3, 0x82, 0xAB, 0xE3,
	0x82, 0x99, 0x0D, 0x4C, 0xE1, 0x84, 0x8C, 0xE1,
	0x85, 0xAE, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xB4,
	0x01, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99,
	0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D, 0x4C,
	0xE3, 0x82, 0xB3, 0xE3, 0x83, 0xBC, 0xE3, 0x83,
	// Bytes 2ec0 - 2eff
	0x9B, 0xE3, 0x82, 0x9A, 0x0D, 0x4C, 0xE3, 0x83,
	0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3,
	0x82, 0x99, 0x0D, 0x4F, 0xE1, 0x84, 0x8E, 0xE1,
	0x85, 0xA1, 0xE1, 0x86, 0xB7, 0xE1, 0x84, 0x80,
	0xE1, 0x85, 0xA9, 0x01, 0x4F, 0xE3, 0x82, 0xA4,
	0xE3, 0x83, 0x8B, 0xE3, 0x83, 0xB3, 0xE3, 0x82,
	0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3, 0x82,
	0xB7, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xB3, 0xE3,
	// Bytes 2f00 - 2f3f
	0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3,
	0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC,
	0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D, 0x4F,
	0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0xE3, 0x83,
	0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D,
	0x52, 0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xB9, 0xE3,
	0x82, 0xAF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88,
	0xE3, 0x82, 0x99, 0x0D, 0x52, 0xE3, 0x83, 0x95,
	// Bytes 2f40 - 2f7f
	0xE3, 0x82, 0xA1, 0xE3, 0x83, 0xA9, 0xE3, 0x83,
	0x83, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D,
	0x86, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0x01,
	0x86, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8F, 0x01,
	0x03, 0x3C, 0xCC, 0xB8, 0x05, 0x03, 0x3D, 0xCC,
	0xB8, 0x05, 0x03, 0x3E, 0xCC, 0xB8, 0x05, 0x03,
	0x41, 0xCC, 0x80, 0xC9, 0x03, 0x41, 0xCC, 0x81,
	0xC9, 0x03, 0x41, 0xCC, 0x83, 0xC9, 0x03, 0x41,
	// Bytes 2f80 - 2fbf
	0xCC, 0x84, 0xC9, 0x03, 0x41, 0xCC, 0x89, 0xC9,
	0x03, 0x41, 0xCC, 0x8C, 0xC9, 0x03, 0x41, 0xCC,
	0x8F, 0xC9, 0x03, 0x41, 0xCC, 0x91, 0xC9, 0x03,
	0x41, 0xCC, 0xA5, 0xB5, 0x03, 0x41, 0xCC, 0xA8,
	0xA5, 0x03, 0x42, 0xCC, 0x87, 0xC9, 0x03, 0x42,
	0xCC, 0xA3, 0xB5, 0x03, 0x42, 0xCC, 0xB1, 0xB5,
	0x03, 0x43, 0xCC, 0x81, 0xC9, 0x03, 0x43, 0xCC,
	0x82, 0xC9, 0x03, 0x43, 0xCC, 0x87, 0xC9, 0x03,
	// Bytes 2fc0 - 2fff
	0x43, 0xCC, 0x8C, 0xC9, 0x03, 0x44, 0xCC, 0x87,
	0xC9, 0x03, 0x44, 0xCC, 0x8C, 0xC9, 0x03, 0x44,
	0xCC, 0xA3, 0xB5, 0x03, 0x44, 0xCC, 0xA7, 0xA5,
	0x03, 0x44, 0xCC, 0xAD, 0xB5, 0x03, 0x44, 0xCC,
	0xB1, 0xB5, 0x03, 0x45, 0xCC, 0x80, 0xC9, 0x03,
	0x45, 0xCC, 0x81, 0xC9, 0x03, 0x45, 0xCC, 0x83,
	0xC9, 0x03, 0x45, 0xCC, 0x86, 0xC9, 0x03, 0x45,
	0xCC, 0x87, 0xC9, 0x03, 0x45, 0xCC, 0x88, 0xC9,
	// Bytes 3000 - 303f
	0x03, 0x45, 0xCC, 0x89, 0xC9, 0x03, 0x45, 0xCC,
	0x8C, 0xC9, 0x03, 0x45, 0xCC, 0x8F, 0xC9, 0x03,
	0x45, 0xCC, 0x91, 0xC9, 0x03, 0x45, 0xCC, 0xA8,
	0xA5, 0x03, 0x45, 0xCC, 0xAD, 0xB5, 0x03, 0x45,
	0xCC, 0xB0, 0xB5, 0x03, 0x46, 0xCC, 0x87, 0xC9,
	0x03, 0x47, 0xCC, 0x81, 0xC9, 0x03, 0x47, 0xCC,
	0x82, 0xC9, 0x03, 0x47, 0xCC, 0x84, 0xC9, 0x03,
	0x47, 0xCC, 0x86, 0xC9, 0x03, 0x47, 0xCC, 0x87,
	// Bytes 3040 - 307f
	0xC9, 0x03, 0x47, 0xCC, 0x8C, 0xC9, 0x03, 0x47,
	0xCC, 0xA7, 0xA5, 0x03, 0x48, 0xCC, 0x82, 0xC9,
	0x03, 0x48, 0xCC, 0x87, 0xC9, 0x03, 0x48, 0xCC,
	0x88, 0xC9, 0x03, 0x48, 0xCC, 0x8C, 0xC9, 0x03,
	0x48, 0xCC, 0xA3, 0xB5, 0x03, 0x48, 0xCC, 0xA7,
	0xA5, 0x03, 0x48, 0xCC, 0xAE, 0xB5, 0x03, 0x49,
	0xCC, 0x80, 0xC9, 0x03, 0x49, 0xCC, 0x81, 0xC9,
	0x03, 0x49, 0xCC, 0x82, 0xC9, 0x03, 0x49, 0xCC,
	// Bytes 3080 - 30bf
	0x83, 0xC9, 0x03, 0x49, 0xCC, 0x84, 0xC9, 0x03,
	0x49, 0xCC, 0x86, 0xC9, 0x03, 0x49, 0xCC, 0x87,
	0xC9, 0x03, 0x49, 0xCC, 0x89, 0xC9, 0x03, 0x49,
	0xCC, 0x8C, 0xC9, 0x03, 0x49, 0xCC, 0x8F, 0xC9,
	0x03, 0x49, 0xCC, 0x91, 0xC9, 0x03, 0x49, 0xCC,
	0xA3, 0xB5, 0x03, 0x49, 0xCC, 0xA8, 0xA5, 0x03,
	0x49, 0xCC, 0xB0, 0xB5, 0x03, 0x4A, 0xCC, 0x82,
	0xC9, 0x03, 0x4B, 0xCC, 0x81, 0xC9, 0x03, 0x4B,
	// Bytes 30c0 - 30ff
	0xCC, 0x8C, 0xC9, 0x03, 0x4B, 0xCC, 0xA3, 0xB5,
	0x03, 0x4B, 0xCC, 0xA7, 0xA5, 0x03, 0x4B, 0xCC,
	0xB1, 0xB5, 0x03, 0x4C, 0xCC, 0x81, 0xC9, 0x03,
	0x4C, 0xCC, 0x8C, 0xC9, 0x03, 0x4C, 0xCC, 0xA7,
	0xA5, 0x03, 0x4C, 0xCC, 0xAD, 0xB5, 0x03, 0x4C,
	0xCC, 0xB1, 0xB5, 0x03, 0x4D, 0xCC, 0x81, 0xC9,
	0x03, 0x4D, 0xCC, 0x87, 0xC9, 0x03, 0x4D, 0xCC,
	0xA3, 0xB5, 0x03, 0x4E, 0xCC, 0x80, 0xC9, 0x03,
	// Bytes 3100 - 313f
	0x4E, 0xCC, 0x81, 0xC9, 0x03, 0x4E, 0xCC, 0x83,
	0xC9, 0x03, 0x4E, 0xCC, 0x87, 0xC9, 0x03, 0x4E,
	0xCC, 0x8C, 0xC9, 0x03, 0x4E, 0xCC, 0xA3, 0xB5,
	0x03, 0x4E, 0xCC, 0xA7, 0xA5, 0x03, 0x4E, 0xCC,
	0xAD, 0xB5, 0x03, 0x4E, 0xCC, 0xB1, 0xB5, 0x03,
	0x4F, 0xCC, 0x80, 0xC9, 0x03, 0x4F, 0xCC, 0x81,
	0xC9, 0x03, 0x4F, 0xCC, 0x86, 0xC9, 0x03, 0x4F,
	0xCC, 0x89, 0xC9, 0x03, 0x4F, 0xCC, 0x8B, 0xC9,
	// Bytes 3140 - 317f
	0x03, 0x4F, 0xCC, 0x8C, 0xC9, 0x03, 0x4F, 0xCC,
	0x8F, 0xC9, 0x03, 0x4F, 0xCC, 0x91, 0xC9, 0x03,
	0x50, 0xCC, 0x81, 0xC9, 0x03, 0x50, 0xCC, 0x87,
	0xC9, 0x03, 0x52, 0xCC, 0x81, 0xC9, 0x03, 0x52,
	0xCC, 0x87, 0xC9, 0x03, 0x52, 0xCC, 0x8C, 0xC9,
	0x03, 0x52, 0xCC, 0x8F, 0xC9, 0x03, 0x52, 0xCC,
	0x91, 0xC9, 0x03, 0x52, 0xCC, 0xA7, 0xA5, 0x03,
	0x52, 0xCC, 0xB1, 0xB5, 0x03, 0x53, 0xCC, 0x82,
	// Bytes 3180 - 31bf
	0xC9, 0x03, 0x53, 0xCC, 0x87, 0xC9, 0x03, 0x53,
	0xCC, 0xA6, 0xB5, 0x03, 0x53, 0xCC, 0xA7, 0xA5,
	0x03, 0x54, 0xCC, 0x87, 0xC9, 0x03, 0x54, 0xCC,
	0x8C, 0xC9, 0x03, 0x54, 0xCC, 0xA3, 0xB5, 0x03,
	0x54, 0xCC, 0xA6, 0xB5, 0x03, 0x54, 0xCC, 0xA7,
	0xA5, 0x03, 0x54, 0xCC, 0xAD, 0xB5, 0x03, 0x54,
	0xCC, 0xB1, 0xB5, 0x03, 0x55, 0xCC, 0x80, 0xC9,
	0x03, 0x55, 0xCC, 0x81, 0xC9, 0x03, 0x55, 0xCC,
	// Bytes 31c0 - 31ff
	0x82, 0xC9, 0x03, 0x55, 0xCC, 0x86, 0xC9, 0x03,
	0x55, 0xCC, 0x89, 0xC9, 0x03, 0x55, 0xCC, 0x8A,
	0xC9, 0x03, 0x55, 0xCC, 0x8B, 0xC9, 0x03, 0x55,
	0xCC, 0x8C, 0xC9, 0x03, 0x55, 0xCC, 0x8F, 0xC9,
	0x03, 0x55, 0xCC, 0x91, 0xC9, 0x03, 0x55, 0xCC,
	0xA3, 0xB5, 0x03, 0x55, 0xCC, 0xA4, 0xB5, 0x03,
	0x55, 0xCC, 0xA8, 0xA5, 0x03, 0x55, 0xCC, 0xAD,
	0xB5, 0x03, 0x55, 0xCC, 0xB0, 0xB5, 0x03, 0x56,
	// Bytes 3200 - 323f
	0xCC, 0x83, 0xC9, 0x03, 0x56, 0xCC, 0xA3, 0xB5,
	0x03, 0x57, 0xCC, 0x80, 0xC9, 0x03, 0x57, 0xCC,
	0x81, 0xC9, 0x03, 0x57, 0xCC, 0x82, 0xC9, 0x03,
	0x57, 0xCC, 0x87, 0xC9, 0x03, 0x57, 0xCC, 0x88,
	0xC9, 0x03, 0x57, 0xCC, 0xA3, 0xB5, 0x03, 0x58,
	0xCC, 0x87, 0xC9, 0x03, 0x58, 0xCC, 0x88, 0xC9,
	0x03, 0x59, 0xCC, 0x80, 0xC9, 0x03, 0x59, 0xCC,
	0x81, 0xC9, 0x03, 0x59, 0xCC, 0x82, 0xC9, 0x03,
	// Bytes 3240 - 327f
	0x59, 0xCC, 0x83, 0xC9, 0x03, 0x59, 0xCC, 0x84,
	0xC9, 0x03, 0x59, 0xCC, 0x87, 0xC9, 0x03, 0x59,
	0xCC, 0x88, 0xC9, 0x03, 0x59, 0xCC, 0x89, 0xC9,
	0x03, 0x59, 0xCC, 0xA3, 0xB5, 0x03, 0x5A, 0xCC,
	0x81, 0xC9, 0x03, 0x5A, 0xCC, 0x82, 0xC9, 0x03,
	0x5A, 0xCC, 0x87, 0xC9, 0x03, 0x5A, 0xCC, 0x8C,
	0xC9, 0x03, 0x5A, 0xCC, 0xA3, 0xB5, 0x03, 0x5A,
	0xCC, 0xB1, 0xB5, 0x03, 0x61, 0xCC, 0x80, 0xC9,
	// Bytes 3280 - 32bf
	0x03, 0x61, 0xCC, 0x81, 0xC9, 0x03, 0x61, 0xCC,
	0x83, 0xC9, 0x03, 0x61, 0xCC, 0x84, 0xC9, 0x03,
	0x61, 0xCC, 0x89, 0xC9, 0x03, 0x61, 0xCC, 0x8C,
	0xC9, 0x03, 0x61, 0xCC, 0x8F, 0xC9, 0x03, 0x61,
	0xCC, 0x91, 0xC9, 0x03, 0x61, 0xCC, 0xA5, 0xB5,
	0x03, 0x61, 0xCC, 0xA8, 0xA5, 0x03, 0x62, 0xCC,
	0x87, 0xC9, 0x03, 0x62, 0xCC, 0xA3, 0xB5, 0x03,
	0x62, 0xCC, 0xB1, 0xB5, 0x03, 0x63, 0xCC, 0x81,
	// Bytes 32c0 - 32ff
	0xC9, 0x03, 0x63, 0xCC, 0x82, 0xC9, 0x03, 0x63,
	0xCC, 0x87, 0xC9, 0x03, 0x63, 0xCC, 0x8C, 0xC9,
	0x03, 0x64, 0xCC, 0x87, 0xC9, 0x03, 0x64, 0xCC,
	0x8C, 0xC9, 0x03, 0x64, 0xCC, 0xA3, 0xB5, 0x03,
	0x64, 0xCC, 0xA7, 0xA5, 0x03, 0x64, 0xCC, 0xAD,
	0xB5, 0x03, 0x64, 0xCC, 0xB1, 0xB5, 0x03, 0x65,
	0xCC, 0x80, 0xC9, 0x03, 0x65, 0xCC, 0x81, 0xC9,
	0x03, 0x65, 0xCC, 0x83, 0xC9, 0x03, 0x65, 0xCC,
	// Bytes 3300 - 333f
	0x86, 0xC9, 0x03, 0x65, 0xCC, 0x87, 0xC9, 0x03,
	0x65, 0xCC, 0x88, 0xC9, 0x03, 0x65, 0xCC, 0x89,
	0xC9, 0x03, 0x65, 0xCC, 0x8C, 0xC9, 0x03, 0x65,
	0xCC, 0x8F, 0xC9, 0x03, 0x65, 0xCC, 0x91, 0xC9,
	0x03, 0x65, 0xCC, 0xA8, 0xA5, 0x03, 0x65, 0xCC,
	0xAD, 0xB5, 0x03, 0x65, 0xCC, 0xB0, 0xB5, 0x03,
	0x66, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC, 0x81,
	0xC9, 0x03, 0x67, 0xCC, 0x82, 0xC9, 0x03, 0x67,
	// Bytes 3340 - 337f
	0xCC, 0x84, 0xC9, 0x03, 0x67, 0xCC, 0x86, 0xC9,
	0x03, 0x67, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC,
	0x8C, 0xC9, 0x03, 0x67, 0xCC, 0xA7, 0xA5, 0x03,
	0x68, 0xCC, 0x82, 0xC9, 0x03, 0x68, 0xCC, 0x87,
	0xC9, 0x03, 0x68, 0xCC, 0x88, 0xC9, 0x03, 0x68,
	0xCC, 0x8C, 0xC9, 0x03, 0x68, 0xCC, 0xA3, 0xB5,
	0x03, 0x68, 0xCC, 0xA7, 0xA5, 0x03, 0x68, 0xCC,
	0xAE, 0xB5, 0x03, 0x68, 0xCC, 0xB1, 0xB5, 0x03,
	// Bytes 3380 - 33bf
	0x69, 0xCC, 0x80, 0xC9, 0x03, 0x69, 0xCC, 0x81,
	0xC9, 0x03, 0x69, 0xCC, 0x82, 0xC9, 0x03, 0x69,
	0xCC, 0x83, 0xC9, 0x03, 0x69, 0xCC, 0x84, 0xC9,
	0x03, 0x69, 0xCC, 0x86, 0xC9, 0x03, 0x69, 0xCC,
	0x89, 0xC9, 0x03, 0x69, 0xCC, 0x8C, 0xC9, 0x03,
	0x69, 0xCC, 0x8F, 0xC9, 0x03, 0x69, 0xCC, 0x91,
	0xC9, 0x03, 0x69, 0xCC, 0xA3, 0xB5, 0x03, 0x69,
	0xCC, 0xA8, 0xA5, 0x03, 0x69, 0xCC, 0xB0, 0xB5,
	// Bytes 33c0 - 33ff
	0x03, 0x6A, 0xCC, 0x82, 0xC9, 0x03, 0x6A, 0xCC,
	0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0x81, 0xC9, 0x03,
	0x6B, 0xCC, 0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0xA3,
	0xB5, 0x03, 0x6B, 0xCC, 0xA7, 0xA5, 0x03, 0x6B,
	0xCC, 0xB1, 0xB5, 0x03, 0x6C, 0xCC, 0x81, 0xC9,
	0x03, 0x6C, 0xCC, 0x8C, 0xC9, 0x03, 0x6C, 0xCC,
	0xA7, 0xA5, 0x03, 0x6C, 0xCC, 0xAD, 0xB5, 0x03,
	0x6C, 0xCC, 0xB1, 0xB5, 0x03, 0x6D, 0xCC, 0x81,
	// Bytes 3400 - 343f
	0xC9, 0x03, 0x6D, 0xCC, 0x87, 0xC9, 0x03, 0x6D,
	0xCC, 0xA3, 0xB5, 0x03, 0x6E, 0xCC, 0x80, 0xC9,
	0x03, 0x6E, 0xCC, 0x81, 0xC9, 0x03, 0x6E, 0xCC,
	0x83, 0xC9, 0x03, 0x6E, 0xCC, 0x87, 0xC9, 0x03,
	0x6E, 0xCC, 0x8C, 0xC9, 0x03, 0x6E, 0xCC, 0xA3,
	0xB5, 0x03, 0x6E, 0xCC, 0xA7, 0xA5, 0x03, 0x6E,
	0xCC, 0xAD, 0xB5, 0x03, 0x6E, 0xCC, 0xB1, 0xB5,
	0x03, 0x6F, 0xCC, 0x80, 0xC9, 0x03, 0x6F, 0xCC,
	// Bytes 3440 - 347f
	0x81, 0xC9, 0x03, 0x6F, 0xCC, 0x86, 0xC9, 0x03,
	0x6F, 0xCC, 0x89, 0xC9, 0x03, 0x6F, 0xCC, 0x8B,
	0xC9, 0x03, 0x6F, 0xCC, 0x8C, 0xC9, 0x03, 0x6F,
	0xCC, 0x8F, 0xC9, 0x03, 0x6F, 0xCC, 0x91, 0xC9,
	0x03, 0x70, 0xCC, 0x81, 0xC9, 0x03, 0x70, 0xCC,
	0x87, 0xC9, 0x03, 0x72, 0xCC, 0x81, 0xC9, 0x03,
	0x72, 0xCC, 0x87, 0xC9, 0x03, 0x72, 0xCC, 0x8C,
	0xC9, 0x03, 0x72, 0xCC, 0x8F, 0xC9, 0x03, 0x72,
	// Bytes 3480 - 34bf
	0xCC, 0x91, 0xC9, 0x03, 0x72, 0xCC, 0xA7, 0xA5,
	0x03, 0x72, 0xCC, 0xB1, 0xB5, 0x03, 0x73, 0xCC,
	0x82, 0xC9, 0x03, 0x73, 0xCC, 0x87, 0xC9, 0x03,
	0x73, 0xCC, 0xA6, 0xB5, 0x03, 0x73, 0xCC, 0xA7,
	0xA5, 0x03, 0x74, 0xCC, 0x87, 0xC9, 0x03, 0x74,
	0xCC, 0x88, 0xC9, 0x03, 0x74, 0xCC, 0x8C, 0xC9,
	0x03, 0x74, 0xCC, 0xA3, 0xB5, 0x03, 0x74, 0xCC,
	0xA6, 0xB5, 0x03, 0x74, 0xCC, 0xA7, 0xA5, 0x03,
	// Bytes 34c0 - 34ff
	0x74, 0xCC, 0xAD, 0xB5, 0x03, 0x74, 0xCC, 0xB1,
	0xB5, 0x03, 0x75, 0xCC, 0x80, 0xC9, 0x03, 0x75,
	0xCC, 0x81, 0xC9, 0x03, 0x75, 0xCC, 0x82, 0xC9,
	0x03, 0x75, 0xCC, 0x86, 0xC9, 0x03, 0x75, 0xCC,
	0x89, 0xC9, 0x03, 0x75, 0xCC, 0x8A, 0xC9, 0x03,
	0x75, 0xCC, 0x8B, 0xC9, 0x03, 0x75, 0xCC, 0x8C,
	0xC9, 0x03, 0x75, 0xCC, 0x8F, 0xC9, 0x03, 0x75,
	0xCC, 0x91, 0xC9, 0x03, 0x75, 0xCC, 0xA3, 0xB5,
	// Bytes 3500 - 353f
	0x03, 0x75, 0xCC, 0xA4, 0xB5, 0x03, 0x75, 0xCC,
	0xA8, 0xA5, 0x03, 0x75, 0xCC, 0xAD, 0xB5, 0x03,
	0x75, 0xCC, 0xB0, 0xB5, 0x03, 0x76, 0xCC, 0x83,
	0xC9, 0x03, 0x76, 0xCC, 0xA3, 0xB5, 0x03, 0x77,
	0xCC, 0x80, 0xC9, 0x03, 0x77, 0xCC, 0x81, 0xC9,
	0x03, 0x77, 0xCC, 0x82, 0xC9, 0x03, 0x77, 0xCC,
	0x87, 0xC9, 0x03, 0x77, 0xCC, 0x88, 0xC9, 0x03,
	0x77, 0xCC, 0x8A, 0xC9, 0x03, 0x77, 0xCC, 0xA3,
	// Bytes 3540 - 357f
	0xB5, 0x03, 0x78, 0xCC, 0x87, 0xC9, 0x03, 0x78,
	0xCC, 0x88, 0xC9, 0x03, 0x79, 0xCC, 0x80, 0xC9,
	0x03, 0x79, 0xCC, 0x81, 0xC9, 0x03, 0x79, 0xCC,
	0x82, 0xC9, 0x03, 0x79, 0xCC, 0x83, 0xC9, 0x03,
	0x79, 0xCC, 0x84, 0xC9, 0x03, 0x79, 0xCC, 0x87,
	0xC9, 0x03, 0x79, 0xCC, 0x88, 0xC9, 0x03, 0x79,
	0xCC, 0x89, 0xC9, 0x03, 0x79, 0xCC, 0x8A, 0xC9,
	0x03, 0x79, 0xCC, 0xA3, 0xB5, 0x03, 0x7A, 0xCC,
	// Bytes 3580 - 35bf
	0x81, 0xC9, 0x03, 0x7A, 0xCC, 0x82, 0xC9, 0x03,
	0x7A, 0xCC, 0x87, 0xC9, 0x03, 0x7A, 0xCC, 0x8C,
	0xC9, 0x03, 0x7A, 0xCC, 0xA3, 0xB5, 0x03, 0x7A,
	0xCC, 0xB1, 0xB5, 0x04, 0xC2, 0xA8, 0xCC, 0x80,
	0xCA, 0x04, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x04,
	0xC2, 0xA8, 0xCD, 0x82, 0xCA, 0x04, 0xC3, 0x86,
	0xCC, 0x81, 0xC9, 0x04, 0xC3, 0x86, 0xCC, 0x84,
	0xC9, 0x04, 0xC3, 0x98, 0xCC, 0x81, 0xC9, 0x04,
	// Bytes 35c0 - 35ff
	0xC3, 0xA6, 0xCC, 0x81, 0xC9, 0x04, 0xC3, 0xA6,
	0xCC, 0x84, 0xC9, 0x04, 0xC3, 0xB8, 0xCC, 0x81,
	0xC9, 0x04, 0xC5, 0xBF, 0xCC, 0x87, 0xC9, 0x04,
	0xC6, 0xB7, 0xCC, 0x8C, 0xC9, 0x04, 0xCA, 0x92,
	0xCC, 0x8C, 0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x80,
	0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x81, 0xC9, 0x04,
	0xCE, 0x91, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0x91,
	0xCC, 0x86, 0xC9, 0x04, 0xCE, 0x91, 0xCD, 0x85,
	// Bytes 3600 - 363f
	0xD9, 0x04, 0xCE, 0x95, 0xCC, 0x80, 0xC9, 0x04,
	0xCE, 0x95, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x97,
	0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x97, 0xCC, 0x81,
	0xC9, 0x04, 0xCE, 0x97, 0xCD, 0x85, 0xD9, 0x04,
	0xCE, 0x99, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x99,
	0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x84,
	0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x86, 0xC9, 0x04,
	0xCE, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0x9F,
	// Bytes 3640 - 367f
	0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x9F, 0xCC, 0x81,
	0xC9, 0x04, 0xCE, 0xA1, 0xCC, 0x94, 0xC9, 0x04,
	0xCE, 0xA5, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA5,
	0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x84,
	0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x86, 0xC9, 0x04,
	0xCE, 0xA5, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0xA9,
	0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA9, 0xCC, 0x81,
	0xC9, 0x04, 0xCE, 0xA9, 0xCD, 0x85, 0xD9, 0x04,
	// Bytes 3680 - 36bf
	0xCE, 0xB1, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB1,
	0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB1, 0xCD, 0x85,
	0xD9, 0x04, 0xCE, 0xB5, 0xCC, 0x80, 0xC9, 0x04,
	0xCE, 0xB5, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xB7,
	0xCD, 0x85, 0xD9, 0x04, 0xCE, 0xB9, 0xCC, 0x80,
	0xC9, 0x04, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x04,
	0xCE, 0xB9, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB9,
	0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB9, 0xCD, 0x82,
	// Bytes 36c0 - 36ff
	0xC9, 0x04, 0xCE, 0xBF, 0xCC, 0x80, 0xC9, 0x04,
	0xCE, 0xBF, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x81,
	0xCC, 0x93, 0xC9, 0x04, 0xCF, 0x81, 0xCC, 0x94,
	0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x80, 0xC9, 0x04,
	0xCF, 0x85, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x85,
	0xCC, 0x84, 0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x86,
	0xC9, 0x04, 0xCF, 0x85, 0xCD, 0x82, 0xC9, 0x04,
	0xCF, 0x89, 0xCD, 0x85, 0xD9, 0x04, 0xCF, 0x92,
	// Bytes 3700 - 373f
	0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x92, 0xCC, 0x88,
	0xC9, 0x04, 0xD0, 0x86, 0xCC, 0x88, 0xC9, 0x04,
	0xD0, 0x90, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x90,
	0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x93, 0xCC, 0x81,
	0xC9, 0x04, 0xD0, 0x95, 0xCC, 0x80, 0xC9, 0x04,
	0xD0, 0x95, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x95,
	0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x86,
	0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x88, 0xC9, 0x04,
	// Bytes 3740 - 377f
	0xD0, 0x97, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x98,
	0xCC, 0x80, 0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x84,
	0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x86, 0xC9, 0x04,
	0xD0, 0x98, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x9A,
	0xCC, 0x81, 0xC9, 0x04, 0xD0, 0x9E, 0xCC, 0x88,
	0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x84, 0xC9, 0x04,
	0xD0, 0xA3, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xA3,
	0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x8B,
	// Bytes 3780 - 37bf
	0xC9, 0x04, 0xD0, 0xA7, 0xCC, 0x88, 0xC9, 0x04,
	0xD0, 0xAB, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xAD,
	0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x86,
	0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x88, 0xC9, 0x04,
	0xD0, 0xB3, 0xCC, 0x81, 0xC9, 0x04, 0xD0, 0xB5,
	0xCC, 0x80, 0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x86,
	0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x88, 0xC9, 0x04,
	0xD0, 0xB6, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB6,
	// Bytes 37c0 - 37ff
	0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB7, 0xCC, 0x88,
	0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x80, 0xC9, 0x04,
	0xD0, 0xB8, 0xCC, 0x84, 0xC9, 0x04, 0xD0, 0xB8,
	0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x88,
	0xC9, 0x04, 0xD0, 0xBA, 0xCC, 0x81, 0xC9, 0x04,
	0xD0, 0xBE, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x83,
	0xCC, 0x84, 0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x86,
	0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x88, 0xC9, 0x04,
	// Bytes 3800 - 383f
	0xD1, 0x83, 0xCC, 0x8B, 0xC9, 0x04, 0xD1, 0x87,
	0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x8B, 0xCC, 0x88,
	0xC9, 0x04, 0xD1, 0x8D, 0xCC, 0x88, 0xC9, 0x04,
	0xD1, 0x96, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0xB4,
	0xCC, 0x8F, 0xC9, 0x04, 0xD1, 0xB5, 0xCC, 0x8F,
	0xC9, 0x04, 0xD3, 0x98, 0xCC, 0x88, 0xC9, 0x04,
	0xD3, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA8,
	0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA9, 0xCC, 0x88,
	// Bytes 3840 - 387f
	0xC9, 0x04, 0xD8, 0xA7, 0xD9, 0x93, 0xC9, 0x04,
	0xD8, 0xA7, 0xD9, 0x94, 0xC9, 0x04, 0xD8, 0xA7,
	0xD9, 0x95, 0xB5, 0x04, 0xD9, 0x88, 0xD9, 0x94,
	0xC9, 0x04, 0xD9, 0x8A, 0xD9, 0x94, 0xC9, 0x04,
	0xDB, 0x81, 0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x92,
	0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x95, 0xD9, 0x94,
	0xC9, 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x80, 0xCA,
	0x05, 0x41, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05,
	// Bytes 3880 - 38bf
	0x41, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x41,
	0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x41, 0xCC,
	0x86, 0xCC, 0x80, 0xCA, 0x05, 0x41, 0xCC, 0x86,
	0xCC, 0x81, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC,
	0x83, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x89,
	0xCA, 0x05, 0x41, 0xCC, 0x87, 0xCC, 0x84, 0xCA,
	0x05, 0x41, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05,
	0x41, 0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x41,
	// Bytes 38c0 - 38ff
	0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x41, 0xCC,
	0xA3, 0xCC, 0x86, 0xCA, 0x05, 0x43, 0xCC, 0xA7,
	0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC,
	0x80, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x81,
	0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x83, 0xCA,
	0x05, 0x45, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05,
	0x45, 0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x45,
	0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC,
	// Bytes 3900 - 393f
	0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x45, 0xCC, 0xA7,
	0xCC, 0x86, 0xCA, 0x05, 0x49, 0xCC, 0x88, 0xCC,
	0x81, 0xCA, 0x05, 0x4C, 0xCC, 0xA3, 0xCC, 0x84,
	0xCA, 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x80, 0xCA,
	0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05,
	0x4F, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x4F,
	0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x4F, 0xCC,
	0x83, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x83,
	// Bytes 3940 - 397f
	0xCC, 0x84, 0xCA, 0x05, 0x4F, 0xCC, 0x83, 0xCC,
	0x88, 0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x80,
	0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x81, 0xCA,
	0x05, 0x4F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05,
	0x4F, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x4F,
	0xCC, 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x4F, 0xCC,
	0x9B, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x9B,
	0xCC, 0x83, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC,
	// Bytes 3980 - 39bf
	0x89, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0xA3,
	0xB6, 0x05, 0x4F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA,
	0x05, 0x4F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05,
	0x52, 0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x53,
	0xCC, 0x81, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC,
	0x8C, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC, 0xA3,
	0xCC, 0x87, 0xCA, 0x05, 0x55, 0xCC, 0x83, 0xCC,
	0x81, 0xCA, 0x05, 0x55, 0xCC, 0x84, 0xCC, 0x88,
	// Bytes 39c0 - 39ff
	0xCA, 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x80, 0xCA,
	0x05, 0x55, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05,
	0x55, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x55,
	0xCC, 0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x55, 0xCC,
	0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x55, 0xCC, 0x9B,
	0xCC, 0x81, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC,
	0x83, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x89,
	0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6,
	// Bytes 3a00 - 3a3f
	0x05, 0x61, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05,
	0x61, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x61,
	0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x61, 0xCC,
	0x82, 0xCC, 0x89, 0xCA, 0x05, 0x61, 0xCC, 0x86,
	0xCC, 0x80, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC,
	0x81, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x83,
	0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x89, 0xCA,
	0x05, 0x61, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05,
	// Bytes 3a40 - 3a7f
	0x61, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x61,
	0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x61, 0xCC,
	0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x61, 0xCC, 0xA3,
	0xCC, 0x86, 0xCA, 0x05, 0x63, 0xCC, 0xA7, 0xCC,
	0x81, 0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x80,
	0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x81, 0xCA,
	0x05, 0x65, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05,
	0x65, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x65,
	// Bytes 3a80 - 3abf
	0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x65, 0xCC,
	0x84, 0xCC, 0x81, 0xCA, 0x05, 0x65, 0xCC, 0xA3,
	0xCC, 0x82, 0xCA, 0x05, 0x65, 0xCC, 0xA7, 0xCC,
	0x86, 0xCA, 0x05, 0x69, 0xCC, 0x88, 0xCC, 0x81,
	0xCA, 0x05, 0x6C, 0xCC, 0xA3, 0xCC, 0x84, 0xCA,
	0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05,
	0x6F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x6F,
	0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x6F, 0xCC,
	// Bytes 3ac0 - 3aff
	0x82, 0xCC, 0x89, 0xCA, 0x05, 0x6F, 0xCC, 0x83,
	0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC,
	0x84, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC, 0x88,
	0xCA, 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x80, 0xCA,
	0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05,
	0x6F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, 0x6F,
	0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x6F, 0xCC,
	0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x6F, 0xCC, 0x9B,
	// Bytes 3b00 - 3b3f
	0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC,
	0x83, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x89,
	0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6,
	0x05, 0x6F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05,
	0x6F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05, 0x72,
	0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x73, 0xCC,
	0x81, 0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0x8C,
	0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0xA3, 0xCC,
	// Bytes 3b40 - 3b7f
	0x87, 0xCA, 0x05, 0x75, 0xCC, 0x83, 0xCC, 0x81,
	0xCA, 0x05, 0x75, 0xCC, 0x84, 0xCC, 0x88, 0xCA,
	0x05, 0x75, 0xCC, 0x88, 0xCC, 0x80, 0xCA, 0x05,
	0x75, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05, 0x75,
	0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x75, 0xCC,
	0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x75, 0xCC, 0x9B,
	0xCC, 0x80, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC,
	0x81, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x83,
	// Bytes 3b80 - 3bbf
	0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x89, 0xCA,
	0x05, 0x75, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, 0x05,
	0xE1, 0xBE, 0xBF, 0xCC, 0x80, 0xCA, 0x05, 0xE1,
	0xBE, 0xBF, 0xCC, 0x81, 0xCA, 0x05, 0xE1, 0xBE,
	0xBF, 0xCD, 0x82, 0xCA, 0x05, 0xE1, 0xBF, 0xBE,
	0xCC, 0x80, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCC,
	0x81, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCD, 0x82,
	0xCA, 0x05, 0xE2, 0x86, 0x90, 0xCC, 0xB8, 0x05,
	// Bytes 3bc0 - 3bff
	0x05, 0xE2, 0x86, 0x92, 0xCC, 0xB8, 0x05, 0x05,
	0xE2, 0x86, 0x94, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
	0x87, 0x90, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87,
	0x92, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, 0x94,
	0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x83, 0xCC,
	0xB8, 0x05, 0x05, 0xE2, 0x88, 0x88, 0xCC, 0xB8,
	0x05, 0x05, 0xE2, 0x88, 0x8B, 0xCC, 0xB8, 0x05,
	0x05, 0xE2, 0x88, 0xA3, 0xCC, 0xB8, 0x05, 0x05,
	// Bytes 3c00 - 3c3f
	0xE2, 0x88, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
	0x88, 0xBC, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89,
	0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x85,
	0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x88, 0xCC,
	0xB8, 0x05, 0x05, 0xE2, 0x89, 0x8D, 0xCC, 0xB8,
	0x05, 0x05, 0xE2, 0x89, 0xA1, 0xCC, 0xB8, 0x05,
	0x05, 0xE2, 0x89, 0xA4, 0xCC, 0xB8, 0x05, 0x05,
	0xE2, 0x89, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
	// Bytes 3c40 - 3c7f
	0x89, 0xB2, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89,
	0xB3, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB6,
	0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB7, 0xCC,
	0xB8, 0x05, 0x05, 0xE2, 0x89, 0xBA, 0xCC, 0xB8,
	0x05, 0x05, 0xE2, 0x89, 0xBB, 0xCC, 0xB8, 0x05,
	0x05, 0xE2, 0x89, 0xBC, 0xCC, 0xB8, 0x05, 0x05,
	0xE2, 0x89, 0xBD, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
	0x8A, 0x82, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A,
	// Bytes 3c80 - 3cbf
	0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x86,
	0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x87, 0xCC,
	0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x91, 0xCC, 0xB8,
	0x05, 0x05, 0xE2, 0x8A, 0x92, 0xCC, 0xB8, 0x05,
	0x05, 0xE2, 0x8A, 0xA2, 0xCC, 0xB8, 0x05, 0x05,
	0xE2, 0x8A, 0xA8, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
	0x8A, 0xA9, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A,
	0xAB, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB2,
	// Bytes 3cc0 - 3cff
	0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB3, 0xCC,
	0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB4, 0xCC, 0xB8,
	0x05, 0x05, 0xE2, 0x8A, 0xB5, 0xCC, 0xB8, 0x05,
	0x06, 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
	// Bytes 3d00 - 3d3f
	0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x82, 0xCA,
	0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
	// Bytes 3d40 - 3d7f
	0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCD, 0x82, 0xCA,
	0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCD, 0x82, 0xCA,
	// Bytes 3d80 - 3dbf
	0x06, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
	// Bytes 3dc0 - 3dff
	0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
	0x06, 0xCE, 0xB7, 0xCD, 0x82, 0xCD, 0x85, 0xDA,
	// Bytes 3e00 - 3e3f
	0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x82, 0xCA,
	0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCD, 0x82, 0xCA,
	0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
	// Bytes 3e40 - 3e7f
	0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCD, 0x82, 0xCA,
	0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
	0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
	0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
	0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x80, 0xCA,
	0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xCA,
	0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x82, 0xCA,
	// Bytes 3e80 - 3ebf
	0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
	0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
	0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCD, 0x82, 0xCA,
	0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
	0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
	0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x82, 0xCA,
	0x06, 0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x85, 0xDA,
	0x06, 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x85, 0xDA,
	// Bytes 3ec0 - 3eff
	0x06, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
	0x06, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
	0x06, 0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x85, 0xDA,
	0x06, 0xE0, 0xA4, 0xA8, 0xE0, 0xA4, 0xBC, 0x09,
	0x06, 0xE0, 0xA4, 0xB0, 0xE0, 0xA4, 0xBC, 0x09,
	0x06, 0xE0, 0xA4, 0xB3, 0xE0, 0xA4, 0xBC, 0x09,
	0x06, 0xE0, 0xB1, 0x86, 0xE0, 0xB1, 0x96, 0x85,
	0x06, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8A, 0x11,
	// Bytes 3f00 - 3f3f
	0x06, 0xE3, 0x81, 0x86, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x8B, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x8D, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x8F, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x91, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x93, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x95, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x97, 0xE3, 0x82, 0x99, 0x0D,
	// Bytes 3f40 - 3f7f
	0x06, 0xE3, 0x81, 0x99, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x9B, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x9D, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0x9F, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0xA1, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0xA4, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0xA6, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0xA8, 0xE3, 0x82, 0x99, 0x0D,
	// Bytes 3f80 - 3fbf
	0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x9A, 0x0D,
	0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x9A, 0x0D,
	0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x9A, 0x0D,
	0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x9A, 0x0D,
	// Bytes 3fc0 - 3fff
	0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x9A, 0x0D,
	0x06, 0xE3, 0x82, 0x9D, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, 0x0D,
	// Bytes 4000 - 403f
	0x06, 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xBD, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0x81, 0xE3, 0x82, 0x99, 0x0D,
	// Bytes 4040 - 407f
	0x06, 0xE3, 0x83, 0x84, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0x0D,
	0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0x0D,
	0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, 0x0D,
	// Bytes 4080 - 40bf
	0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x9A, 0x0D,
	0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0x0D,
	0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0x0D,
	0x06, 0xE3, 0x83, 0xAF, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0xB0, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0xB1, 0xE3, 0x82, 0x99, 0x0D,
	// Bytes 40c0 - 40ff
	0x06, 0xE3, 0x83, 0xB2, 0xE3, 0x82, 0x99, 0x0D,
	0x06, 0xE3, 0x83, 0xBD, 0xE3, 0x82, 0x99, 0x0D,
	0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCD,
	0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC,
	0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC,
	0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
	0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB,
	0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCD,
	// Bytes 4100 - 413f
	0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCD,
	0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC,
	0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
	0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB,
	0x08, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCD,
	0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, 0x94, 0xCC,
	0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC,
	0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
	// Bytes 4140 - 417f
	0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB,
	0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCD,
	0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC,
	0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC,
	0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
	0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB,
	0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCD,
	0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCD,
	// Bytes 4180 - 41bf
	0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC,
	0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
	0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB,
	0x08, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCD,
	0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, 0x94, 0xCC,
	0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC,
	0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
	0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB,
	// Bytes 41c0 - 41ff
	0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCD,
	0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC,
	0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC,
	0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
	0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB,
	0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCD,
	0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCD,
	0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC,
	// Bytes 4200 - 423f
	0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF,
	0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB,
	0x08, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCD,
	0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, 0x94, 0xCC,
	0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC,
	0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCF,
	0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB,
	0x08, 0xF0, 0x91, 0x82, 0x99, 0xF0, 0x91, 0x82,
	// Bytes 4240 - 427f
	0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82, 0x9B, 0xF0,
	0x91, 0x82, 0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82,
	0xA5, 0xF0, 0x91, 0x82, 0xBA, 0x09, 0x42, 0xC2,
	0xB4, 0x01, 0x43, 0x20, 0xCC, 0x81, 0xC9, 0x43,
	0x20, 0xCC, 0x83, 0xC9, 0x43, 0x20, 0xCC, 0x84,
	0xC9, 0x43, 0x20, 0xCC, 0x85, 0xC9, 0x43, 0x20,
	0xCC, 0x86, 0xC9, 0x43, 0x20, 0xCC, 0x87, 0xC9,
	0x43, 0x20, 0xCC, 0x88, 0xC9, 0x43, 0x20, 0xCC,
	// Bytes 4280 - 42bf
	0x8A, 0xC9, 0x43, 0x20, 0xCC, 0x8B, 0xC9, 0x43,
	0x20, 0xCC, 0x93, 0xC9, 0x43, 0x20, 0xCC, 0x94,
	0xC9, 0x43, 0x20, 0xCC, 0xA7, 0xA5, 0x43, 0x20,
	0xCC, 0xA8, 0xA5, 0x43, 0x20, 0xCC, 0xB3, 0xB5,
	0x43, 0x20, 0xCD, 0x82, 0xC9, 0x43, 0x20, 0xCD,
	0x85, 0xD9, 0x43, 0x20, 0xD9, 0x8B, 0x59, 0x43,
	0x20, 0xD9, 0x8C, 0x5D, 0x43, 0x20, 0xD9, 0x8D,
	0x61, 0x43, 0x20, 0xD9, 0x8E, 0x65, 0x43, 0x20,
	// Bytes 42c0 - 42ff
	0xD9, 0x8F, 0x69, 0x43, 0x20, 0xD9, 0x90, 0x6D,
	0x43, 0x20, 0xD9, 0x91, 0x71, 0x43, 0x20, 0xD9,
	0x92, 0x75, 0x43, 0x41, 0xCC, 0x8A, 0xC9, 0x43,
	0x73, 0xCC, 0x87, 0xC9, 0x44, 0x20, 0xE3, 0x82,
	0x99, 0x0D, 0x44, 0x20, 0xE3, 0x82, 0x9A, 0x0D,
	0x44, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x44, 0xCE,
	0x91, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0x95, 0xCC,
	0x81, 0xC9, 0x44, 0xCE, 0x97, 0xCC, 0x81, 0xC9,
	// Bytes 4300 - 433f
	0x44, 0xCE, 0x99, 0xCC, 0x81, 0xC9, 0x44, 0xCE,
	0x9F, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC,
	0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC, 0x88, 0xC9,
	0x44, 0xCE, 0xA9, 0xCC, 0x81, 0xC9, 0x44, 0xCE,
	0xB1, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xB5, 0xCC,
	0x81, 0xC9, 0x44, 0xCE, 0xB7, 0xCC, 0x81, 0xC9,
	0x44, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x44, 0xCE,
	0xBF, 0xCC, 0x81, 0xC9, 0x44, 0xCF, 0x85, 0xCC,
	// Bytes 4340 - 437f
	0x81, 0xC9, 0x44, 0xCF, 0x89, 0xCC, 0x81, 0xC9,
	0x44, 0xD7, 0x90, 0xD6, 0xB7, 0x31, 0x44, 0xD7,
	0x90, 0xD6, 0xB8, 0x35, 0x44, 0xD7, 0x90, 0xD6,
	0xBC, 0x41, 0x44, 0xD7, 0x91, 0xD6, 0xBC, 0x41,
	0x44, 0xD7, 0x91, 0xD6, 0xBF, 0x49, 0x44, 0xD7,
	0x92, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x93, 0xD6,
	0xBC, 0x41, 0x44, 0xD7, 0x94, 0xD6, 0xBC, 0x41,
	0x44, 0xD7, 0x95, 0xD6, 0xB9, 0x39, 0x44, 0xD7,
	// Bytes 4380 - 43bf
	0x95, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x96, 0xD6,
	0xBC, 0x41, 0x44, 0xD7, 0x98, 0xD6, 0xBC, 0x41,
	0x44, 0xD7, 0x99, 0xD6, 0xB4, 0x25, 0x44, 0xD7,
	0x99, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9A, 0xD6,
	0xBC, 0x41, 0x44, 0xD7, 0x9B, 0xD6, 0xBC, 0x41,
	0x44, 0xD7, 0x9B, 0xD6, 0xBF, 0x49, 0x44, 0xD7,
	0x9C, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9E, 0xD6,
	0xBC, 0x41, 0x44, 0xD7, 0xA0, 0xD6, 0xBC, 0x41,
	// Bytes 43c0 - 43ff
	0x44, 0xD7, 0xA1, 0xD6, 0xBC, 0x41, 0x44, 0xD7,
	0xA3, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6,
	0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6, 0xBF, 0x49,
	0x44, 0xD7, 0xA6, 0xD6, 0xBC, 0x41, 0x44, 0xD7,
	0xA7, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA8, 0xD6,
	0xBC, 0x41, 0x44, 0xD7, 0xA9, 0xD6, 0xBC, 0x41,
	0x44, 0xD7, 0xA9, 0xD7, 0x81, 0x4D, 0x44, 0xD7,
	0xA9, 0xD7, 0x82, 0x51, 0x44, 0xD7, 0xAA, 0xD6,
	// Bytes 4400 - 443f
	0xBC, 0x41, 0x44, 0xD7, 0xB2, 0xD6, 0xB7, 0x31,
	0x44, 0xD8, 0xA7, 0xD9, 0x8B, 0x59, 0x44, 0xD8,
	0xA7, 0xD9, 0x93, 0xC9, 0x44, 0xD8, 0xA7, 0xD9,
	0x94, 0xC9, 0x44, 0xD8, 0xA7, 0xD9, 0x95, 0xB5,
	0x44, 0xD8, 0xB0, 0xD9, 0xB0, 0x79, 0x44, 0xD8,
	0xB1, 0xD9, 0xB0, 0x79, 0x44, 0xD9, 0x80, 0xD9,
	0x8B, 0x59, 0x44, 0xD9, 0x80, 0xD9, 0x8E, 0x65,
	0x44, 0xD9, 0x80, 0xD9, 0x8F, 0x69, 0x44, 0xD9,
	// Bytes 4440 - 447f
	0x80, 0xD9, 0x90, 0x6D, 0x44, 0xD9, 0x80, 0xD9,
	0x91, 0x71, 0x44, 0xD9, 0x80, 0xD9, 0x92, 0x75,
	0x44, 0xD9, 0x87, 0xD9, 0xB0, 0x79, 0x44, 0xD9,
	0x88, 0xD9, 0x94, 0xC9, 0x44, 0xD9, 0x89, 0xD9,
	0xB0, 0x79, 0x44, 0xD9, 0x8A, 0xD9, 0x94, 0xC9,
	0x44, 0xDB, 0x92, 0xD9, 0x94, 0xC9, 0x44, 0xDB,
	0x95, 0xD9, 0x94, 0xC9, 0x45, 0x20, 0xCC, 0x88,
	0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCC,
	// Bytes 4480 - 44bf
	0x81, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCD, 0x82,
	0xCA, 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
	0x45, 0x20, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x45,
	0x20, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x45, 0x20,
	0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC,
	0x94, 0xCC, 0x81, 0xCA, 0x45, 0x20, 0xCC, 0x94,
	0xCD, 0x82, 0xCA, 0x45, 0x20, 0xD9, 0x8C, 0xD9,
	0x91, 0x72, 0x45, 0x20, 0xD9, 0x8D, 0xD9, 0x91,
	// Bytes 44c0 - 44ff
	0x72, 0x45, 0x20, 0xD9, 0x8E, 0xD9, 0x91, 0x72,
	0x45, 0x20, 0xD9, 0x8F, 0xD9, 0x91, 0x72, 0x45,
	0x20, 0xD9, 0x90, 0xD9, 0x91, 0x72, 0x45, 0x20,
	0xD9, 0x91, 0xD9, 0xB0, 0x7A, 0x45, 0xE2, 0xAB,
	0x9D, 0xCC, 0xB8, 0x05, 0x46, 0xCE, 0xB9, 0xCC,
	0x88, 0xCC, 0x81, 0xCA, 0x46, 0xCF, 0x85, 0xCC,
	0x88, 0xCC, 0x81, 0xCA, 0x46, 0xD7, 0xA9, 0xD6,
	0xBC, 0xD7, 0x81, 0x4E, 0x46, 0xD7, 0xA9, 0xD6,
	// Bytes 4500 - 453f
	0xBC, 0xD7, 0x82, 0x52, 0x46, 0xD9, 0x80, 0xD9,
	0x8E, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9,
	0x8F, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9,
	0x90, 0xD9, 0x91, 0x72, 0x46, 0xE0, 0xA4, 0x95,
	0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x96,
	0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x97,
	0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x9C,
	0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA1,
	// Bytes 4540 - 457f
	0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA2,
	0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAB,
	0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAF,
	0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA1,
	0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA2,
	0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xAF,
	0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x96,
	0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x97,
	// Bytes 4580 - 45bf
	0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x9C,
	0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xAB,
	0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB2,
	0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB8,
	0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA1,
	0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA2,
	0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xBE, 0xB2,
	0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE0, 0xBE, 0xB3,
	// Bytes 45c0 - 45ff
	0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE3, 0x83, 0x86,
	0xE3, 0x82, 0x99, 0x0D, 0x48, 0xF0, 0x9D, 0x85,
	0x97, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, 0x48, 0xF0,
	0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xAD,
	0x48, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85,
	0xA5, 0xAD, 0x48, 0xF0, 0x9D, 0x86, 0xBA, 0xF0,
	0x9D, 0x85, 0xA5, 0xAD, 0x49, 0xE0, 0xBE, 0xB2,
	0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x49,
	// Bytes 4600 - 463f
	0xE0, 0xBE, 0xB3, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE,
	0x80, 0x9E, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0,
	0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE,
	0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85,
	0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0,
	0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0,
	0x9D, 0x85, 0xB0, 0xAE, 0x4C, 0xF0, 0x9D, 0x85,
	0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85,
	// Bytes 4640 - 467f
	0xB1, 0xAE, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0,
	0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB2, 0xAE,
	0x4C, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85,
	0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE, 0x4C, 0xF0,
	0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xF0,
	0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0, 0x9D, 0x86,
	0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85,
	0xAE, 0xAE, 0x4C, 0xF0, 0x9D, 0x86, 0xBA, 0xF0,
	// Bytes 4680 - 46bf
	0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE,
	0x83, 0x41, 0xCC, 0x82, 0xC9, 0x83, 0x41, 0xCC,
	0x86, 0xC9, 0x83, 0x41, 0xCC, 0x87, 0xC9, 0x83,
	0x41, 0xCC, 0x88, 0xC9, 0x83, 0x41, 0xCC, 0x8A,
	0xC9, 0x83, 0x41, 0xCC, 0xA3, 0xB5, 0x83, 0x43,
	0xCC, 0xA7, 0xA5, 0x83, 0x45, 0xCC, 0x82, 0xC9,
	0x83, 0x45, 0xCC, 0x84, 0xC9, 0x83, 0x45, 0xCC,
	0xA3, 0xB5, 0x83, 0x45, 0xCC, 0xA7, 0xA5, 0x83,
	// Bytes 46c0 - 46ff
	0x49, 0xCC, 0x88, 0xC9, 0x83, 0x4C, 0xCC, 0xA3,
	0xB5, 0x83, 0x4F, 0xCC, 0x82, 0xC9, 0x83, 0x4F,
	0xCC, 0x83, 0xC9, 0x83, 0x4F, 0xCC, 0x84, 0xC9,
	0x83, 0x4F, 0xCC, 0x87, 0xC9, 0x83, 0x4F, 0xCC,
	0x88, 0xC9, 0x83, 0x4F, 0xCC, 0x9B, 0xAD, 0x83,
	0x4F, 0xCC, 0xA3, 0xB5, 0x83, 0x4F, 0xCC, 0xA8,
	0xA5, 0x83, 0x52, 0xCC, 0xA3, 0xB5, 0x83, 0x53,
	0xCC, 0x81, 0xC9, 0x83, 0x53, 0xCC, 0x8C, 0xC9,
	// Bytes 4700 - 473f
	0x83, 0x53, 0xCC, 0xA3, 0xB5, 0x83, 0x55, 0xCC,
	0x83, 0xC9, 0x83, 0x55, 0xCC, 0x84, 0xC9, 0x83,
	0x55, 0xCC, 0x88, 0xC9, 0x83, 0x55, 0xCC, 0x9B,
	0xAD, 0x83, 0x61, 0xCC, 0x82, 0xC9, 0x83, 0x61,
	0xCC, 0x86, 0xC9, 0x83, 0x61, 0xCC, 0x87, 0xC9,
	0x83, 0x61, 0xCC, 0x88, 0xC9, 0x83, 0x61, 0xCC,
	0x8A, 0xC9, 0x83, 0x61, 0xCC, 0xA3, 0xB5, 0x83,
	0x63, 0xCC, 0xA7, 0xA5, 0x83, 0x65, 0xCC, 0x82,
	// Bytes 4740 - 477f
	0xC9, 0x83, 0x65, 0xCC, 0x84, 0xC9, 0x83, 0x65,
	0xCC, 0xA3, 0xB5, 0x83, 0x65, 0xCC, 0xA7, 0xA5,
	0x83, 0x69, 0xCC, 0x88, 0xC9, 0x83, 0x6C, 0xCC,
	0xA3, 0xB5, 0x83, 0x6F, 0xCC, 0x82, 0xC9, 0x83,
	0x6F, 0xCC, 0x83, 0xC9, 0x83, 0x6F, 0xCC, 0x84,
	0xC9, 0x83, 0x6F, 0xCC, 0x87, 0xC9, 0x83, 0x6F,
	0xCC, 0x88, 0xC9, 0x83, 0x6F, 0xCC, 0x9B, 0xAD,
	0x83, 0x6F, 0xCC, 0xA3, 0xB5, 0x83, 0x6F, 0xCC,
	// Bytes 4780 - 47bf
	0xA8, 0xA5, 0x83, 0x72, 0xCC, 0xA3, 0xB5, 0x83,
	0x73, 0xCC, 0x81, 0xC9, 0x83, 0x73, 0xCC, 0x8C,
	0xC9, 0x83, 0x73, 0xCC, 0xA3, 0xB5, 0x83, 0x75,
	0xCC, 0x83, 0xC9, 0x83, 0x75, 0xCC, 0x84, 0xC9,
	0x83, 0x75, 0xCC, 0x88, 0xC9, 0x83, 0x75, 0xCC,
	0x9B, 0xAD, 0x84, 0xCE, 0x91, 0xCC, 0x93, 0xC9,
	0x84, 0xCE, 0x91, 0xCC, 0x94, 0xC9, 0x84, 0xCE,
	0x95, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x95, 0xCC,
	// Bytes 47c0 - 47ff
	0x94, 0xC9, 0x84, 0xCE, 0x97, 0xCC, 0x93, 0xC9,
	0x84, 0xCE, 0x97, 0xCC, 0x94, 0xC9, 0x84, 0xCE,
	0x99, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x99, 0xCC,
	0x94, 0xC9, 0x84, 0xCE, 0x9F, 0xCC, 0x93, 0xC9,
	0x84, 0xCE, 0x9F, 0xCC, 0x94, 0xC9, 0x84, 0xCE,
	0xA5, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xA9, 0xCC,
	0x93, 0xC9, 0x84, 0xCE, 0xA9, 0xCC, 0x94, 0xC9,
	0x84, 0xCE, 0xB1, 0xCC, 0x80, 0xC9, 0x84, 0xCE,
	// Bytes 4800 - 483f
	0xB1, 0xCC, 0x81, 0xC9, 0x84, 0xCE, 0xB1, 0xCC,
	0x93, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, 0x94, 0xC9,
	0x84, 0xCE, 0xB1, 0xCD, 0x82, 0xC9, 0x84, 0xCE,
	0xB5, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB5, 0xCC,
	0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCC, 0x80, 0xC9,
	0x84, 0xCE, 0xB7, 0xCC, 0x81, 0xC9, 0x84, 0xCE,
	0xB7, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB7, 0xCC,
	0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCD, 0x82, 0xC9,
	// Bytes 4840 - 487f
	0x84, 0xCE, 0xB9, 0xCC, 0x88, 0xC9, 0x84, 0xCE,
	0xB9, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB9, 0xCC,
	0x94, 0xC9, 0x84, 0xCE, 0xBF, 0xCC, 0x93, 0xC9,
	0x84, 0xCE, 0xBF, 0xCC, 0x94, 0xC9, 0x84, 0xCF,
	0x85, 0xCC, 0x88, 0xC9, 0x84, 0xCF, 0x85, 0xCC,
	0x93, 0xC9, 0x84, 0xCF, 0x85, 0xCC, 0x94, 0xC9,
	0x84, 0xCF, 0x89, 0xCC, 0x80, 0xC9, 0x84, 0xCF,
	0x89, 0xCC, 0x81, 0xC9, 0x84, 0xCF, 0x89, 0xCC,
	// Bytes 4880 - 48bf
	0x93, 0xC9, 0x84, 0xCF, 0x89, 0xCC, 0x94, 0xC9,
	0x84, 0xCF, 0x89, 0xCD, 0x82, 0xC9, 0x86, 0xCE,
	0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	0x91, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	0x91, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
	0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	0x91, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
	// Bytes 48c0 - 48ff
	0x97, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
	0x97, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	0x97, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
	0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	0xA9, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	// Bytes 4900 - 493f
	0xA9, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
	0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	0xA9, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
	0xB1, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
	0xB1, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	// Bytes 4940 - 497f
	0xB1, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
	0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	0xB7, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	0xB7, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
	0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
	0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
	0xB7, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCF,
	// Bytes 4980 - 49bf
	0x89, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCF,
	0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCF,
	0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCF,
	0x89, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCF,
	0x89, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCF,
	0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x42, 0xCC,
	0x80, 0xC9, 0x32, 0x42, 0xCC, 0x81, 0xC9, 0x32,
	0x42, 0xCC, 0x93, 0xC9, 0x32, 0x43, 0xE1, 0x85,
	// Bytes 49c0 - 49ff
	0xA1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA2, 0x01,
	0x00, 0x43, 0xE1, 0x85, 0xA3, 0x01, 0x00, 0x43,
	0xE1, 0x85, 0xA4, 0x01, 0x00, 0x43, 0xE1, 0x85,
	0xA5, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA6, 0x01,
	0x00, 0x43, 0xE1, 0x85, 0xA7, 0x01, 0x00, 0x43,
	0xE1, 0x85, 0xA8, 0x01, 0x00, 0x43, 0xE1, 0x85,
	0xA9, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAA, 0x01,
	0x00, 0x43, 0xE1, 0x85, 0xAB, 0x01, 0x00, 0x43,
	// Bytes 4a00 - 4a3f
	0xE1, 0x85, 0xAC, 0x01, 0x00, 0x43, 0xE1, 0x85,
	0xAD, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAE, 0x01,
	0x00, 0x43, 0xE1, 0x85, 0xAF, 0x01, 0x00, 0x43,
	0xE1, 0x85, 0xB0, 0x01, 0x00, 0x43, 0xE1, 0x85,
	0xB1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB2, 0x01,
	0x00, 0x43, 0xE1, 0x85, 0xB3, 0x01, 0x00, 0x43,
	0xE1, 0x85, 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x85,
	0xB5, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xAA, 0x01,
	// Bytes 4a40 - 4a7f
	0x00, 0x43, 0xE1, 0x86, 0xAC, 0x01, 0x00, 0x43,
	0xE1, 0x86, 0xAD, 0x01, 0x00, 0x43, 0xE1, 0x86,
	0xB0, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB1, 0x01,
	0x00, 0x43, 0xE1, 0x86, 0xB2, 0x01, 0x00, 0x43,
	0xE1, 0x86, 0xB3, 0x01, 0x00, 0x43, 0xE1, 0x86,
	0xB4, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB5, 0x01,
	0x00, 0x44, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x32,
	0x43, 0xE3, 0x82, 0x99, 0x0D, 0x03, 0x43, 0xE3,
	// Bytes 4a80 - 4abf
	0x82, 0x9A, 0x0D, 0x03, 0x46, 0xE0, 0xBD, 0xB1,
	0xE0, 0xBD, 0xB2, 0x9E, 0x26, 0x46, 0xE0, 0xBD,
	0xB1, 0xE0, 0xBD, 0xB4, 0xA2, 0x26, 0x46, 0xE0,
	0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x26, 0x00,
	0x01,
}

// lookup returns the trie value for the first UTF-8 encoding in s and
// the width in bytes of this encoding. The size will be 0 if s does not
// hold enough bytes to complete the encoding. len(s) must be greater than 0.
func (t *nfcTrie) lookup(s []byte) (v uint16, sz int) {
	c0 := s[0]
	switch {
	case c0 < 0x80: // is ASCII
		return nfcValues[c0], 1
	case c0 < 0xC2:
		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
	case c0 < 0xE0: // 2-byte UTF-8
		if len(s) < 2 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c1), 2
	case c0 < 0xF0: // 3-byte UTF-8
		if len(s) < 3 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c2), 3
	case c0 < 0xF8: // 4-byte UTF-8
		if len(s) < 4 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		o = uint32(i)<<6 + uint32(c2)
		i = nfcIndex[o]
		c3 := s[3]
		if c3 < 0x80 || 0xC0 <= c3 {
			return 0, 3 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c3), 4
	}
	// Illegal rune
	return 0, 1
}

// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.
// s must start with a full and valid UTF-8 encoded rune.
func (t *nfcTrie) lookupUnsafe(s []byte) uint16 {
	c0 := s[0]
	if c0 < 0x80 { // is ASCII
		return nfcValues[c0]
	}
	i := nfcIndex[c0]
	if c0 < 0xE0 { // 2-byte UTF-8
		return t.lookupValue(uint32(i), s[1])
	}
	i = nfcIndex[uint32(i)<<6+uint32(s[1])]
	if c0 < 0xF0 { // 3-byte UTF-8
		return t.lookupValue(uint32(i), s[2])
	}
	i = nfcIndex[uint32(i)<<6+uint32(s[2])]
	if c0 < 0xF8 { // 4-byte UTF-8
		return t.lookupValue(uint32(i), s[3])
	}
	return 0
}

// lookupString returns the trie value for the first UTF-8 encoding in s and
// the width in bytes of this encoding. The size will be 0 if s does not
// hold enough bytes to complete the encoding. len(s) must be greater than 0.
func (t *nfcTrie) lookupString(s string) (v uint16, sz int) {
	c0 := s[0]
	switch {
	case c0 < 0x80: // is ASCII
		return nfcValues[c0], 1
	case c0 < 0xC2:
		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
	case c0 < 0xE0: // 2-byte UTF-8
		if len(s) < 2 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c1), 2
	case c0 < 0xF0: // 3-byte UTF-8
		if len(s) < 3 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c2), 3
	case c0 < 0xF8: // 4-byte UTF-8
		if len(s) < 4 {
			return 0, 0
		}
		i := nfcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		o = uint32(i)<<6 + uint32(c2)
		i = nfcIndex[o]
		c3 := s[3]
		if c3 < 0x80 || 0xC0 <= c3 {
			return 0, 3 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c3), 4
	}
	// Illegal rune
	return 0, 1
}

// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.
// s must start with a full and valid UTF-8 encoded rune.
func (t *nfcTrie) lookupStringUnsafe(s string) uint16 {
	c0 := s[0]
	if c0 < 0x80 { // is ASCII
		return nfcValues[c0]
	}
	i := nfcIndex[c0]
	if c0 < 0xE0 { // 2-byte UTF-8
		return t.lookupValue(uint32(i), s[1])
	}
	i = nfcIndex[uint32(i)<<6+uint32(s[1])]
	if c0 < 0xF0 { // 3-byte UTF-8
		return t.lookupValue(uint32(i), s[2])
	}
	i = nfcIndex[uint32(i)<<6+uint32(s[2])]
	if c0 < 0xF8 { // 4-byte UTF-8
		return t.lookupValue(uint32(i), s[3])
	}
	return 0
}

// nfcTrie. Total size: 10332 bytes (10.09 KiB). Checksum: 51cc525b297fc970.
type nfcTrie struct{}

func newNfcTrie(i int) *nfcTrie {
	return &nfcTrie{}
}

// lookupValue determines the type of block n and looks up the value for b.
func (t *nfcTrie) lookupValue(n uint32, b byte) uint16 {
	switch {
	case n < 44:
		return uint16(nfcValues[n<<6+uint32(b)])
	default:
		n -= 44
		return uint16(nfcSparse.lookup(n, b))
	}
}

// nfcValues: 46 blocks, 2944 entries, 5888 bytes
// The third block is the zero block.
var nfcValues = [2944]uint16{
	// Block 0x0, offset 0x0
	0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000,
	// Block 0x1, offset 0x40
	0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000,
	0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000,
	0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000,
	0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000,
	0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000,
	0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000,
	0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000,
	0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000,
	0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000,
	0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000,
	// Block 0x2, offset 0x80
	// Block 0x3, offset 0xc0
	0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c,
	0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb,
	0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104,
	0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd,
	0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235,
	0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285,
	0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3,
	0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750,
	0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f,
	0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3,
	0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569,
	// Block 0x4, offset 0x100
	0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8,
	0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6,
	0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5,
	0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302,
	0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339,
	0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352,
	0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e,
	0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6,
	0x130: 0x308c, 0x134: 0x30b4, 0x135: 0x33c0,
	0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc,
	0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8,
	// Block 0x5, offset 0x140
	0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118,
	0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f,
	0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c,
	0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483,
	0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d,
	0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba,
	0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796,
	0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2,
	0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528,
	0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267,
	0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0xa000,
	// Block 0x6, offset 0x180
	0x184: 0x8100, 0x185: 0x8100,
	0x186: 0x8100,
	0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140,
	0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8,
	0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50,
	0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5,
	0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf,
	0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd,
	0x1b0: 0x33c5, 0x1b4: 0x3028, 0x1b5: 0x3334,
	0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46,
	0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb,
	// Block 0x7, offset 0x1c0
	0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316,
	0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac,
	0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479,
	0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6,
	0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5,
	0x1de: 0x305a, 0x1df: 0x3366,
	0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b,
	0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769,
	0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f,
	// Block 0x8, offset 0x200
	0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132,
	0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932,
	0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932,
	0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d,
	0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d,
	0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d,
	0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d,
	0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d,
	0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101,
	0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d,
	0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132,
	// Block 0x9, offset 0x240
	0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936,
	0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132,
	0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132,
	0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132,
	0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135,
	0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132,
	0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132,
	0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132,
	0x274: 0x0170,
	0x27a: 0x8100,
	0x27e: 0x0037,
	// Block 0xa, offset 0x280
	0x284: 0x8100, 0x285: 0x35a1,
	0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625,
	0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000,
	0x295: 0xa000, 0x297: 0xa000,
	0x299: 0xa000,
	0x29f: 0xa000, 0x2a1: 0xa000,
	0x2a5: 0xa000, 0x2a9: 0xa000,
	0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9,
	0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000,
	0x2b7: 0xa000, 0x2b9: 0xa000,
	0x2bf: 0xa000,
	// Block 0xb, offset 0x2c0
	0x2c0: 0x3721, 0x2c1: 0x372d, 0x2c3: 0x371b,
	0x2c6: 0xa000, 0x2c7: 0x3709,
	0x2cc: 0x375d, 0x2cd: 0x3745, 0x2ce: 0x376f, 0x2d0: 0xa000,
	0x2d3: 0xa000, 0x2d5: 0xa000, 0x2d6: 0xa000, 0x2d7: 0xa000,
	0x2d8: 0xa000, 0x2d9: 0x3751, 0x2da: 0xa000,
	0x2de: 0xa000, 0x2e3: 0xa000,
	0x2e7: 0xa000,
	0x2eb: 0xa000, 0x2ed: 0xa000,
	0x2f0: 0xa000, 0x2f3: 0xa000, 0x2f5: 0xa000,
	0x2f6: 0xa000, 0x2f7: 0xa000, 0x2f8: 0xa000, 0x2f9: 0x37d5, 0x2fa: 0xa000,
	0x2fe: 0xa000,
	// Block 0xc, offset 0x300
	0x301: 0x3733, 0x302: 0x37b7,
	0x310: 0x370f, 0x311: 0x3793,
	0x312: 0x3715, 0x313: 0x3799, 0x316: 0x3727, 0x317: 0x37ab,
	0x318: 0xa000, 0x319: 0xa000, 0x31a: 0x3829, 0x31b: 0x382f, 0x31c: 0x3739, 0x31d: 0x37bd,
	0x31e: 0x373f, 0x31f: 0x37c3, 0x322: 0x374b, 0x323: 0x37cf,
	0x324: 0x3757, 0x325: 0x37db, 0x326: 0x3763, 0x327: 0x37e7, 0x328: 0xa000, 0x329: 0xa000,
	0x32a: 0x3835, 0x32b: 0x383b, 0x32c: 0x378d, 0x32d: 0x3811, 0x32e: 0x3769, 0x32f: 0x37ed,
	0x330: 0x3775, 0x331: 0x37f9, 0x332: 0x377b, 0x333: 0x37ff, 0x334: 0x3781, 0x335: 0x3805,
	0x338: 0x3787, 0x339: 0x380b,
	// Block 0xd, offset 0x340
	0x351: 0x812d,
	0x352: 0x8132, 0x353: 0x8132, 0x354: 0x8132, 0x355: 0x8132, 0x356: 0x812d, 0x357: 0x8132,
	0x358: 0x8132, 0x359: 0x8132, 0x35a: 0x812e, 0x35b: 0x812d, 0x35c: 0x8132, 0x35d: 0x8132,
	0x35e: 0x8132, 0x35f: 0x8132, 0x360: 0x8132, 0x361: 0x8132, 0x362: 0x812d, 0x363: 0x812d,
	0x364: 0x812d, 0x365: 0x812d, 0x366: 0x812d, 0x367: 0x812d, 0x368: 0x8132, 0x369: 0x8132,
	0x36a: 0x812d, 0x36b: 0x8132, 0x36c: 0x8132, 0x36d: 0x812e, 0x36e: 0x8131, 0x36f: 0x8132,
	0x370: 0x8105, 0x371: 0x8106, 0x372: 0x8107, 0x373: 0x8108, 0x374: 0x8109, 0x375: 0x810a,
	0x376: 0x810b, 0x377: 0x810c, 0x378: 0x810d, 0x379: 0x810e, 0x37a: 0x810e, 0x37b: 0x810f,
	0x37c: 0x8110, 0x37d: 0x8111, 0x37f: 0x8112,
	// Block 0xe, offset 0x380
	0x388: 0xa000, 0x38a: 0xa000, 0x38b: 0x8116,
	0x38c: 0x8117, 0x38d: 0x8118, 0x38e: 0x8119, 0x38f: 0x811a, 0x390: 0x811b, 0x391: 0x811c,
	0x392: 0x811d, 0x393: 0x9932, 0x394: 0x9932, 0x395: 0x992d, 0x396: 0x812d, 0x397: 0x8132,
	0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x8132, 0x39b: 0x8132, 0x39c: 0x812d, 0x39d: 0x8132,
	0x39e: 0x8132, 0x39f: 0x812d,
	0x3b0: 0x811e,
	// Block 0xf, offset 0x3c0
	0x3c5: 0xa000,
	0x3c6: 0x2d26, 0x3c7: 0xa000, 0x3c8: 0x2d2e, 0x3c9: 0xa000, 0x3ca: 0x2d36, 0x3cb: 0xa000,
	0x3cc: 0x2d3e, 0x3cd: 0xa000, 0x3ce: 0x2d46, 0x3d1: 0xa000,
	0x3d2: 0x2d4e,
	0x3f4: 0x8102, 0x3f5: 0x9900,
	0x3fa: 0xa000, 0x3fb: 0x2d56,
	0x3fc: 0xa000, 0x3fd: 0x2d5e, 0x3fe: 0xa000, 0x3ff: 0xa000,
	// Block 0x10, offset 0x400
	0x400: 0x2f97, 0x401: 0x32a3, 0x402: 0x2fa1, 0x403: 0x32ad, 0x404: 0x2fa6, 0x405: 0x32b2,
	0x406: 0x2fab, 0x407: 0x32b7, 0x408: 0x38cc, 0x409: 0x3a5b, 0x40a: 0x2fc4, 0x40b: 0x32d0,
	0x40c: 0x2fce, 0x40d: 0x32da, 0x40e: 0x2fdd, 0x40f: 0x32e9, 0x410: 0x2fd3, 0x411: 0x32df,
	0x412: 0x2fd8, 0x413: 0x32e4, 0x414: 0x38ef, 0x415: 0x3a7e, 0x416: 0x38f6, 0x417: 0x3a85,
	0x418: 0x3019, 0x419: 0x3325, 0x41a: 0x301e, 0x41b: 0x332a, 0x41c: 0x3904, 0x41d: 0x3a93,
	0x41e: 0x3023, 0x41f: 0x332f, 0x420: 0x3032, 0x421: 0x333e, 0x422: 0x3050, 0x423: 0x335c,
	0x424: 0x305f, 0x425: 0x336b, 0x426: 0x3055, 0x427: 0x3361, 0x428: 0x3064, 0x429: 0x3370,
	0x42a: 0x3069, 0x42b: 0x3375, 0x42c: 0x30af, 0x42d: 0x33bb, 0x42e: 0x390b, 0x42f: 0x3a9a,
	0x430: 0x30b9, 0x431: 0x33ca, 0x432: 0x30c3, 0x433: 0x33d4, 0x434: 0x30cd, 0x435: 0x33de,
	0x436: 0x46c4, 0x437: 0x4755, 0x438: 0x3912, 0x439: 0x3aa1, 0x43a: 0x30e6, 0x43b: 0x33f7,
	0x43c: 0x30e1, 0x43d: 0x33f2, 0x43e: 0x30eb, 0x43f: 0x33fc,
	// Block 0x11, offset 0x440
	0x440: 0x30f0, 0x441: 0x3401, 0x442: 0x30f5, 0x443: 0x3406, 0x444: 0x3109, 0x445: 0x341a,
	0x446: 0x3113, 0x447: 0x3424, 0x448: 0x3122, 0x449: 0x3433, 0x44a: 0x311d, 0x44b: 0x342e,
	0x44c: 0x3935, 0x44d: 0x3ac4, 0x44e: 0x3943, 0x44f: 0x3ad2, 0x450: 0x394a, 0x451: 0x3ad9,
	0x452: 0x3951, 0x453: 0x3ae0, 0x454: 0x314f, 0x455: 0x3460, 0x456: 0x3154, 0x457: 0x3465,
	0x458: 0x315e, 0x459: 0x346f, 0x45a: 0x46f1, 0x45b: 0x4782, 0x45c: 0x3997, 0x45d: 0x3b26,
	0x45e: 0x3177, 0x45f: 0x3488, 0x460: 0x3181, 0x461: 0x3492, 0x462: 0x4700, 0x463: 0x4791,
	0x464: 0x399e, 0x465: 0x3b2d, 0x466: 0x39a5, 0x467: 0x3b34, 0x468: 0x39ac, 0x469: 0x3b3b,
	0x46a: 0x3190, 0x46b: 0x34a1, 0x46c: 0x319a, 0x46d: 0x34b0, 0x46e: 0x31ae, 0x46f: 0x34c4,
	0x470: 0x31a9, 0x471: 0x34bf, 0x472: 0x31ea, 0x473: 0x3500, 0x474: 0x31f9, 0x475: 0x350f,
	0x476: 0x31f4, 0x477: 0x350a, 0x478: 0x39b3, 0x479: 0x3b42, 0x47a: 0x39ba, 0x47b: 0x3b49,
	0x47c: 0x31fe, 0x47d: 0x3514, 0x47e: 0x3203, 0x47f: 0x3519,
	// Block 0x12, offset 0x480
	0x480: 0x3208, 0x481: 0x351e, 0x482: 0x320d, 0x483: 0x3523, 0x484: 0x321c, 0x485: 0x3532,
	0x486: 0x3217, 0x487: 0x352d, 0x488: 0x3221, 0x489: 0x353c, 0x48a: 0x3226, 0x48b: 0x3541,
	0x48c: 0x322b, 0x48d: 0x3546, 0x48e: 0x3249, 0x48f: 0x3564, 0x490: 0x3262, 0x491: 0x3582,
	0x492: 0x3271, 0x493: 0x3591, 0x494: 0x3276, 0x495: 0x3596, 0x496: 0x337a, 0x497: 0x34a6,
	0x498: 0x3537, 0x499: 0x3573, 0x49b: 0x35d1,
	0x4a0: 0x46a1, 0x4a1: 0x4732, 0x4a2: 0x2f83, 0x4a3: 0x328f,
	0x4a4: 0x3878, 0x4a5: 0x3a07, 0x4a6: 0x3871, 0x4a7: 0x3a00, 0x4a8: 0x3886, 0x4a9: 0x3a15,
	0x4aa: 0x387f, 0x4ab: 0x3a0e, 0x4ac: 0x38be, 0x4ad: 0x3a4d, 0x4ae: 0x3894, 0x4af: 0x3a23,
	0x4b0: 0x388d, 0x4b1: 0x3a1c, 0x4b2: 0x38a2, 0x4b3: 0x3a31, 0x4b4: 0x389b, 0x4b5: 0x3a2a,
	0x4b6: 0x38c5, 0x4b7: 0x3a54, 0x4b8: 0x46b5, 0x4b9: 0x4746, 0x4ba: 0x3000, 0x4bb: 0x330c,
	0x4bc: 0x2fec, 0x4bd: 0x32f8, 0x4be: 0x38da, 0x4bf: 0x3a69,
	// Block 0x13, offset 0x4c0
	0x4c0: 0x38d3, 0x4c1: 0x3a62, 0x4c2: 0x38e8, 0x4c3: 0x3a77, 0x4c4: 0x38e1, 0x4c5: 0x3a70,
	0x4c6: 0x38fd, 0x4c7: 0x3a8c, 0x4c8: 0x3091, 0x4c9: 0x339d, 0x4ca: 0x30a5, 0x4cb: 0x33b1,
	0x4cc: 0x46e7, 0x4cd: 0x4778, 0x4ce: 0x3136, 0x4cf: 0x3447, 0x4d0: 0x3920, 0x4d1: 0x3aaf,
	0x4d2: 0x3919, 0x4d3: 0x3aa8, 0x4d4: 0x392e, 0x4d5: 0x3abd, 0x4d6: 0x3927, 0x4d7: 0x3ab6,
	0x4d8: 0x3989, 0x4d9: 0x3b18, 0x4da: 0x396d, 0x4db: 0x3afc, 0x4dc: 0x3966, 0x4dd: 0x3af5,
	0x4de: 0x397b, 0x4df: 0x3b0a, 0x4e0: 0x3974, 0x4e1: 0x3b03, 0x4e2: 0x3982, 0x4e3: 0x3b11,
	0x4e4: 0x31e5, 0x4e5: 0x34fb, 0x4e6: 0x31c7, 0x4e7: 0x34dd, 0x4e8: 0x39e4, 0x4e9: 0x3b73,
	0x4ea: 0x39dd, 0x4eb: 0x3b6c, 0x4ec: 0x39f2, 0x4ed: 0x3b81, 0x4ee: 0x39eb, 0x4ef: 0x3b7a,
	0x4f0: 0x39f9, 0x4f1: 0x3b88, 0x4f2: 0x3230, 0x4f3: 0x354b, 0x4f4: 0x3258, 0x4f5: 0x3578,
	0x4f6: 0x3253, 0x4f7: 0x356e, 0x4f8: 0x323f, 0x4f9: 0x355a,
	// Block 0x14, offset 0x500
	0x500: 0x4804, 0x501: 0x480a, 0x502: 0x491e, 0x503: 0x4936, 0x504: 0x4926, 0x505: 0x493e,
	0x506: 0x492e, 0x507: 0x4946, 0x508: 0x47aa, 0x509: 0x47b0, 0x50a: 0x488e, 0x50b: 0x48a6,
	0x50c: 0x4896, 0x50d: 0x48ae, 0x50e: 0x489e, 0x50f: 0x48b6, 0x510: 0x4816, 0x511: 0x481c,
	0x512: 0x3db8, 0x513: 0x3dc8, 0x514: 0x3dc0, 0x515: 0x3dd0,
	0x518: 0x47b6, 0x519: 0x47bc, 0x51a: 0x3ce8, 0x51b: 0x3cf8, 0x51c: 0x3cf0, 0x51d: 0x3d00,
	0x520: 0x482e, 0x521: 0x4834, 0x522: 0x494e, 0x523: 0x4966,
	0x524: 0x4956, 0x525: 0x496e, 0x526: 0x495e, 0x527: 0x4976, 0x528: 0x47c2, 0x529: 0x47c8,
	0x52a: 0x48be, 0x52b: 0x48d6, 0x52c: 0x48c6, 0x52d: 0x48de, 0x52e: 0x48ce, 0x52f: 0x48e6,
	0x530: 0x4846, 0x531: 0x484c, 0x532: 0x3e18, 0x533: 0x3e30, 0x534: 0x3e20, 0x535: 0x3e38,
	0x536: 0x3e28, 0x537: 0x3e40, 0x538: 0x47ce, 0x539: 0x47d4, 0x53a: 0x3d18, 0x53b: 0x3d30,
	0x53c: 0x3d20, 0x53d: 0x3d38, 0x53e: 0x3d28, 0x53f: 0x3d40,
	// Block 0x15, offset 0x540
	0x540: 0x4852, 0x541: 0x4858, 0x542: 0x3e48, 0x543: 0x3e58, 0x544: 0x3e50, 0x545: 0x3e60,
	0x548: 0x47da, 0x549: 0x47e0, 0x54a: 0x3d48, 0x54b: 0x3d58,
	0x54c: 0x3d50, 0x54d: 0x3d60, 0x550: 0x4864, 0x551: 0x486a,
	0x552: 0x3e80, 0x553: 0x3e98, 0x554: 0x3e88, 0x555: 0x3ea0, 0x556: 0x3e90, 0x557: 0x3ea8,
	0x559: 0x47e6, 0x55b: 0x3d68, 0x55d: 0x3d70,
	0x55f: 0x3d78, 0x560: 0x487c, 0x561: 0x4882, 0x562: 0x497e, 0x563: 0x4996,
	0x564: 0x4986, 0x565: 0x499e, 0x566: 0x498e, 0x567: 0x49a6, 0x568: 0x47ec, 0x569: 0x47f2,
	0x56a: 0x48ee, 0x56b: 0x4906, 0x56c: 0x48f6, 0x56d: 0x490e, 0x56e: 0x48fe, 0x56f: 0x4916,
	0x570: 0x47f8, 0x571: 0x431e, 0x572: 0x3691, 0x573: 0x4324, 0x574: 0x4822, 0x575: 0x432a,
	0x576: 0x36a3, 0x577: 0x4330, 0x578: 0x36c1, 0x579: 0x4336, 0x57a: 0x36d9, 0x57b: 0x433c,
	0x57c: 0x4870, 0x57d: 0x4342,
	// Block 0x16, offset 0x580
	0x580: 0x3da0, 0x581: 0x3da8, 0x582: 0x4184, 0x583: 0x41a2, 0x584: 0x418e, 0x585: 0x41ac,
	0x586: 0x4198, 0x587: 0x41b6, 0x588: 0x3cd8, 0x589: 0x3ce0, 0x58a: 0x40d0, 0x58b: 0x40ee,
	0x58c: 0x40da, 0x58d: 0x40f8, 0x58e: 0x40e4, 0x58f: 0x4102, 0x590: 0x3de8, 0x591: 0x3df0,
	0x592: 0x41c0, 0x593: 0x41de, 0x594: 0x41ca, 0x595: 0x41e8, 0x596: 0x41d4, 0x597: 0x41f2,
	0x598: 0x3d08, 0x599: 0x3d10, 0x59a: 0x410c, 0x59b: 0x412a, 0x59c: 0x4116, 0x59d: 0x4134,
	0x59e: 0x4120, 0x59f: 0x413e, 0x5a0: 0x3ec0, 0x5a1: 0x3ec8, 0x5a2: 0x41fc, 0x5a3: 0x421a,
	0x5a4: 0x4206, 0x5a5: 0x4224, 0x5a6: 0x4210, 0x5a7: 0x422e, 0x5a8: 0x3d80, 0x5a9: 0x3d88,
	0x5aa: 0x4148, 0x5ab: 0x4166, 0x5ac: 0x4152, 0x5ad: 0x4170, 0x5ae: 0x415c, 0x5af: 0x417a,
	0x5b0: 0x3685, 0x5b1: 0x367f, 0x5b2: 0x3d90, 0x5b3: 0x368b, 0x5b4: 0x3d98,
	0x5b6: 0x4810, 0x5b7: 0x3db0, 0x5b8: 0x35f5, 0x5b9: 0x35ef, 0x5ba: 0x35e3, 0x5bb: 0x42ee,
	0x5bc: 0x35fb, 0x5bd: 0x8100, 0x5be: 0x01d3, 0x5bf: 0xa100,
	// Block 0x17, offset 0x5c0
	0x5c0: 0x8100, 0x5c1: 0x35a7, 0x5c2: 0x3dd8, 0x5c3: 0x369d, 0x5c4: 0x3de0,
	0x5c6: 0x483a, 0x5c7: 0x3df8, 0x5c8: 0x3601, 0x5c9: 0x42f4, 0x5ca: 0x360d, 0x5cb: 0x42fa,
	0x5cc: 0x3619, 0x5cd: 0x3b8f, 0x5ce: 0x3b96, 0x5cf: 0x3b9d, 0x5d0: 0x36b5, 0x5d1: 0x36af,
	0x5d2: 0x3e00, 0x5d3: 0x44e4, 0x5d6: 0x36bb, 0x5d7: 0x3e10,
	0x5d8: 0x3631, 0x5d9: 0x362b, 0x5da: 0x361f, 0x5db: 0x4300, 0x5dd: 0x3ba4,
	0x5de: 0x3bab, 0x5df: 0x3bb2, 0x5e0: 0x36eb, 0x5e1: 0x36e5, 0x5e2: 0x3e68, 0x5e3: 0x44ec,
	0x5e4: 0x36cd, 0x5e5: 0x36d3, 0x5e6: 0x36f1, 0x5e7: 0x3e78, 0x5e8: 0x3661, 0x5e9: 0x365b,
	0x5ea: 0x364f, 0x5eb: 0x430c, 0x5ec: 0x3649, 0x5ed: 0x359b, 0x5ee: 0x42e8, 0x5ef: 0x0081,
	0x5f2: 0x3eb0, 0x5f3: 0x36f7, 0x5f4: 0x3eb8,
	0x5f6: 0x4888, 0x5f7: 0x3ed0, 0x5f8: 0x363d, 0x5f9: 0x4306, 0x5fa: 0x366d, 0x5fb: 0x4318,
	0x5fc: 0x3679, 0x5fd: 0x4256, 0x5fe: 0xa100,
	// Block 0x18, offset 0x600
	0x601: 0x3c06, 0x603: 0xa000, 0x604: 0x3c0d, 0x605: 0xa000,
	0x607: 0x3c14, 0x608: 0xa000, 0x609: 0x3c1b,
	0x60d: 0xa000,
	0x620: 0x2f65, 0x621: 0xa000, 0x622: 0x3c29,
	0x624: 0xa000, 0x625: 0xa000,
	0x62d: 0x3c22, 0x62e: 0x2f60, 0x62f: 0x2f6a,
	0x630: 0x3c30, 0x631: 0x3c37, 0x632: 0xa000, 0x633: 0xa000, 0x634: 0x3c3e, 0x635: 0x3c45,
	0x636: 0xa000, 0x637: 0xa000, 0x638: 0x3c4c, 0x639: 0x3c53, 0x63a: 0xa000, 0x63b: 0xa000,
	0x63c: 0xa000, 0x63d: 0xa000,
	// Block 0x19, offset 0x640
	0x640: 0x3c5a, 0x641: 0x3c61, 0x642: 0xa000, 0x643: 0xa000, 0x644: 0x3c76, 0x645: 0x3c7d,
	0x646: 0xa000, 0x647: 0xa000, 0x648: 0x3c84, 0x649: 0x3c8b,
	0x651: 0xa000,
	0x652: 0xa000,
	0x662: 0xa000,
	0x668: 0xa000, 0x669: 0xa000,
	0x66b: 0xa000, 0x66c: 0x3ca0, 0x66d: 0x3ca7, 0x66e: 0x3cae, 0x66f: 0x3cb5,
	0x672: 0xa000, 0x673: 0xa000, 0x674: 0xa000, 0x675: 0xa000,
	// Block 0x1a, offset 0x680
	0x686: 0xa000, 0x68b: 0xa000,
	0x68c: 0x3f08, 0x68d: 0xa000, 0x68e: 0x3f10, 0x68f: 0xa000, 0x690: 0x3f18, 0x691: 0xa000,
	0x692: 0x3f20, 0x693: 0xa000, 0x694: 0x3f28, 0x695: 0xa000, 0x696: 0x3f30, 0x697: 0xa000,
	0x698: 0x3f38, 0x699: 0xa000, 0x69a: 0x3f40, 0x69b: 0xa000, 0x69c: 0x3f48, 0x69d: 0xa000,
	0x69e: 0x3f50, 0x69f: 0xa000, 0x6a0: 0x3f58, 0x6a1: 0xa000, 0x6a2: 0x3f60,
	0x6a4: 0xa000, 0x6a5: 0x3f68, 0x6a6: 0xa000, 0x6a7: 0x3f70, 0x6a8: 0xa000, 0x6a9: 0x3f78,
	0x6af: 0xa000,
	0x6b0: 0x3f80, 0x6b1: 0x3f88, 0x6b2: 0xa000, 0x6b3: 0x3f90, 0x6b4: 0x3f98, 0x6b5: 0xa000,
	0x6b6: 0x3fa0, 0x6b7: 0x3fa8, 0x6b8: 0xa000, 0x6b9: 0x3fb0, 0x6ba: 0x3fb8, 0x6bb: 0xa000,
	0x6bc: 0x3fc0, 0x6bd: 0x3fc8,
	// Block 0x1b, offset 0x6c0
	0x6d4: 0x3f00,
	0x6d9: 0x9903, 0x6da: 0x9903, 0x6db: 0x8100, 0x6dc: 0x8100, 0x6dd: 0xa000,
	0x6de: 0x3fd0,
	0x6e6: 0xa000,
	0x6eb: 0xa000, 0x6ec: 0x3fe0, 0x6ed: 0xa000, 0x6ee: 0x3fe8, 0x6ef: 0xa000,
	0x6f0: 0x3ff0, 0x6f1: 0xa000, 0x6f2: 0x3ff8, 0x6f3: 0xa000, 0x6f4: 0x4000, 0x6f5: 0xa000,
	0x6f6: 0x4008, 0x6f7: 0xa000, 0x6f8: 0x4010, 0x6f9: 0xa000, 0x6fa: 0x4018, 0x6fb: 0xa000,
	0x6fc: 0x4020, 0x6fd: 0xa000, 0x6fe: 0x4028, 0x6ff: 0xa000,
	// Block 0x1c, offset 0x700
	0x700: 0x4030, 0x701: 0xa000, 0x702: 0x4038, 0x704: 0xa000, 0x705: 0x4040,
	0x706: 0xa000, 0x707: 0x4048, 0x708: 0xa000, 0x709: 0x4050,
	0x70f: 0xa000, 0x710: 0x4058, 0x711: 0x4060,
	0x712: 0xa000, 0x713: 0x4068, 0x714: 0x4070, 0x715: 0xa000, 0x716: 0x4078, 0x717: 0x4080,
	0x718: 0xa000, 0x719: 0x4088, 0x71a: 0x4090, 0x71b: 0xa000, 0x71c: 0x4098, 0x71d: 0x40a0,
	0x72f: 0xa000,
	0x730: 0xa000, 0x731: 0xa000, 0x732: 0xa000, 0x734: 0x3fd8,
	0x737: 0x40a8, 0x738: 0x40b0, 0x739: 0x40b8, 0x73a: 0x40c0,
	0x73d: 0xa000, 0x73e: 0x40c8,
	// Block 0x1d, offset 0x740
	0x740: 0x1377, 0x741: 0x0cfb, 0x742: 0x13d3, 0x743: 0x139f, 0x744: 0x0e57, 0x745: 0x06eb,
	0x746: 0x08df, 0x747: 0x162b, 0x748: 0x162b, 0x749: 0x0a0b, 0x74a: 0x145f, 0x74b: 0x0943,
	0x74c: 0x0a07, 0x74d: 0x0bef, 0x74e: 0x0fcf, 0x74f: 0x115f, 0x750: 0x1297, 0x751: 0x12d3,
	0x752: 0x1307, 0x753: 0x141b, 0x754: 0x0d73, 0x755: 0x0dff, 0x756: 0x0eab, 0x757: 0x0f43,
	0x758: 0x125f, 0x759: 0x1447, 0x75a: 0x1573, 0x75b: 0x070f, 0x75c: 0x08b3, 0x75d: 0x0d87,
	0x75e: 0x0ecf, 0x75f: 0x1293, 0x760: 0x15c3, 0x761: 0x0ab3, 0x762: 0x0e77, 0x763: 0x1283,
	0x764: 0x1317, 0x765: 0x0c23, 0x766: 0x11bb, 0x767: 0x12df, 0x768: 0x0b1f, 0x769: 0x0d0f,
	0x76a: 0x0e17, 0x76b: 0x0f1b, 0x76c: 0x1427, 0x76d: 0x074f, 0x76e: 0x07e7, 0x76f: 0x0853,
	0x770: 0x0c8b, 0x771: 0x0d7f, 0x772: 0x0ecb, 0x773: 0x0fef, 0x774: 0x1177, 0x775: 0x128b,
	0x776: 0x12a3, 0x777: 0x13c7, 0x778: 0x14ef, 0x779: 0x15a3, 0x77a: 0x15bf, 0x77b: 0x102b,
	0x77c: 0x106b, 0x77d: 0x1123, 0x77e: 0x1243, 0x77f: 0x147b,
	// Block 0x1e, offset 0x780
	0x780: 0x15cb, 0x781: 0x134b, 0x782: 0x09c7, 0x783: 0x0b3b, 0x784: 0x10db, 0x785: 0x119b,
	0x786: 0x0eff, 0x787: 0x1033, 0x788: 0x1397, 0x789: 0x14e7, 0x78a: 0x09c3, 0x78b: 0x0a8f,
	0x78c: 0x0d77, 0x78d: 0x0e2b, 0x78e: 0x0e5f, 0x78f: 0x1113, 0x790: 0x113b, 0x791: 0x14a7,
	0x792: 0x084f, 0x793: 0x11a7, 0x794: 0x07f3, 0x795: 0x07ef, 0x796: 0x1097, 0x797: 0x1127,
	0x798: 0x125b, 0x799: 0x14af, 0x79a: 0x1367, 0x79b: 0x0c27, 0x79c: 0x0d73, 0x79d: 0x1357,
	0x79e: 0x06f7, 0x79f: 0x0a63, 0x7a0: 0x0b93, 0x7a1: 0x0f2f, 0x7a2: 0x0faf, 0x7a3: 0x0873,
	0x7a4: 0x103b, 0x7a5: 0x075f, 0x7a6: 0x0b77, 0x7a7: 0x06d7, 0x7a8: 0x0deb, 0x7a9: 0x0ca3,
	0x7aa: 0x110f, 0x7ab: 0x08c7, 0x7ac: 0x09b3, 0x7ad: 0x0ffb, 0x7ae: 0x1263, 0x7af: 0x133b,
	0x7b0: 0x0db7, 0x7b1: 0x13f7, 0x7b2: 0x0de3, 0x7b3: 0x0c37, 0x7b4: 0x121b, 0x7b5: 0x0c57,
	0x7b6: 0x0fab, 0x7b7: 0x072b, 0x7b8: 0x07a7, 0x7b9: 0x07eb, 0x7ba: 0x0d53, 0x7bb: 0x10fb,
	0x7bc: 0x11f3, 0x7bd: 0x1347, 0x7be: 0x145b, 0x7bf: 0x085b,
	// Block 0x1f, offset 0x7c0
	0x7c0: 0x090f, 0x7c1: 0x0a17, 0x7c2: 0x0b2f, 0x7c3: 0x0cbf, 0x7c4: 0x0e7b, 0x7c5: 0x103f,
	0x7c6: 0x1497, 0x7c7: 0x157b, 0x7c8: 0x15cf, 0x7c9: 0x15e7, 0x7ca: 0x0837, 0x7cb: 0x0cf3,
	0x7cc: 0x0da3, 0x7cd: 0x13eb, 0x7ce: 0x0afb, 0x7cf: 0x0bd7, 0x7d0: 0x0bf3, 0x7d1: 0x0c83,
	0x7d2: 0x0e6b, 0x7d3: 0x0eb7, 0x7d4: 0x0f67, 0x7d5: 0x108b, 0x7d6: 0x112f, 0x7d7: 0x1193,
	0x7d8: 0x13db, 0x7d9: 0x126b, 0x7da: 0x1403, 0x7db: 0x147f, 0x7dc: 0x080f, 0x7dd: 0x083b,
	0x7de: 0x0923, 0x7df: 0x0ea7, 0x7e0: 0x12f3, 0x7e1: 0x133b, 0x7e2: 0x0b1b, 0x7e3: 0x0b8b,
	0x7e4: 0x0c4f, 0x7e5: 0x0daf, 0x7e6: 0x10d7, 0x7e7: 0x0f23, 0x7e8: 0x073b, 0x7e9: 0x097f,
	0x7ea: 0x0a63, 0x7eb: 0x0ac7, 0x7ec: 0x0b97, 0x7ed: 0x0f3f, 0x7ee: 0x0f5b, 0x7ef: 0x116b,
	0x7f0: 0x118b, 0x7f1: 0x1463, 0x7f2: 0x14e3, 0x7f3: 0x14f3, 0x7f4: 0x152f, 0x7f5: 0x0753,
	0x7f6: 0x107f, 0x7f7: 0x144f, 0x7f8: 0x14cb, 0x7f9: 0x0baf, 0x7fa: 0x0717, 0x7fb: 0x0777,
	0x7fc: 0x0a67, 0x7fd: 0x0a87, 0x7fe: 0x0caf, 0x7ff: 0x0d73,
	// Block 0x20, offset 0x800
	0x800: 0x0ec3, 0x801: 0x0fcb, 0x802: 0x1277, 0x803: 0x1417, 0x804: 0x1623, 0x805: 0x0ce3,
	0x806: 0x14a3, 0x807: 0x0833, 0x808: 0x0d2f, 0x809: 0x0d3b, 0x80a: 0x0e0f, 0x80b: 0x0e47,
	0x80c: 0x0f4b, 0x80d: 0x0fa7, 0x80e: 0x1027, 0x80f: 0x110b, 0x810: 0x153b, 0x811: 0x07af,
	0x812: 0x0c03, 0x813: 0x14b3, 0x814: 0x0767, 0x815: 0x0aab, 0x816: 0x0e2f, 0x817: 0x13df,
	0x818: 0x0b67, 0x819: 0x0bb7, 0x81a: 0x0d43, 0x81b: 0x0f2f, 0x81c: 0x14bb, 0x81d: 0x0817,
	0x81e: 0x08ff, 0x81f: 0x0a97, 0x820: 0x0cd3, 0x821: 0x0d1f, 0x822: 0x0d5f, 0x823: 0x0df3,
	0x824: 0x0f47, 0x825: 0x0fbb, 0x826: 0x1157, 0x827: 0x12f7, 0x828: 0x1303, 0x829: 0x1457,
	0x82a: 0x14d7, 0x82b: 0x0883, 0x82c: 0x0e4b, 0x82d: 0x0903, 0x82e: 0x0ec7, 0x82f: 0x0f6b,
	0x830: 0x1287, 0x831: 0x14bf, 0x832: 0x15ab, 0x833: 0x15d3, 0x834: 0x0d37, 0x835: 0x0e27,
	0x836: 0x11c3, 0x837: 0x10b7, 0x838: 0x10c3, 0x839: 0x10e7, 0x83a: 0x0f17, 0x83b: 0x0e9f,
	0x83c: 0x1363, 0x83d: 0x0733, 0x83e: 0x122b, 0x83f: 0x081b,
	// Block 0x21, offset 0x840
	0x840: 0x080b, 0x841: 0x0b0b, 0x842: 0x0c2b, 0x843: 0x10f3, 0x844: 0x0a53, 0x845: 0x0e03,
	0x846: 0x0cef, 0x847: 0x13e7, 0x848: 0x12e7, 0x849: 0x14ab, 0x84a: 0x1323, 0x84b: 0x0b27,
	0x84c: 0x0787, 0x84d: 0x095b, 0x850: 0x09af,
	0x852: 0x0cdf, 0x855: 0x07f7, 0x856: 0x0f1f, 0x857: 0x0fe3,
	0x858: 0x1047, 0x859: 0x1063, 0x85a: 0x1067, 0x85b: 0x107b, 0x85c: 0x14fb, 0x85d: 0x10eb,
	0x85e: 0x116f, 0x860: 0x128f, 0x862: 0x1353,
	0x865: 0x1407, 0x866: 0x1433,
	0x86a: 0x154f, 0x86b: 0x1553, 0x86c: 0x1557, 0x86d: 0x15bb, 0x86e: 0x142b, 0x86f: 0x14c7,
	0x870: 0x0757, 0x871: 0x077b, 0x872: 0x078f, 0x873: 0x084b, 0x874: 0x0857, 0x875: 0x0897,
	0x876: 0x094b, 0x877: 0x0967, 0x878: 0x096f, 0x879: 0x09ab, 0x87a: 0x09b7, 0x87b: 0x0a93,
	0x87c: 0x0a9b, 0x87d: 0x0ba3, 0x87e: 0x0bcb, 0x87f: 0x0bd3,
	// Block 0x22, offset 0x880
	0x880: 0x0beb, 0x881: 0x0c97, 0x882: 0x0cc7, 0x883: 0x0ce7, 0x884: 0x0d57, 0x885: 0x0e1b,
	0x886: 0x0e37, 0x887: 0x0e67, 0x888: 0x0ebb, 0x889: 0x0edb, 0x88a: 0x0f4f, 0x88b: 0x102f,
	0x88c: 0x104b, 0x88d: 0x1053, 0x88e: 0x104f, 0x88f: 0x1057, 0x890: 0x105b, 0x891: 0x105f,
	0x892: 0x1073, 0x893: 0x1077, 0x894: 0x109b, 0x895: 0x10af, 0x896: 0x10cb, 0x897: 0x112f,
	0x898: 0x1137, 0x899: 0x113f, 0x89a: 0x1153, 0x89b: 0x117b, 0x89c: 0x11cb, 0x89d: 0x11ff,
	0x89e: 0x11ff, 0x89f: 0x1267, 0x8a0: 0x130f, 0x8a1: 0x1327, 0x8a2: 0x135b, 0x8a3: 0x135f,
	0x8a4: 0x13a3, 0x8a5: 0x13a7, 0x8a6: 0x13ff, 0x8a7: 0x1407, 0x8a8: 0x14db, 0x8a9: 0x151f,
	0x8aa: 0x1537, 0x8ab: 0x0b9b, 0x8ac: 0x171e, 0x8ad: 0x11e3,
	0x8b0: 0x06df, 0x8b1: 0x07e3, 0x8b2: 0x07a3, 0x8b3: 0x074b, 0x8b4: 0x078b, 0x8b5: 0x07b7,
	0x8b6: 0x0847, 0x8b7: 0x0863, 0x8b8: 0x094b, 0x8b9: 0x0937, 0x8ba: 0x0947, 0x8bb: 0x0963,
	0x8bc: 0x09af, 0x8bd: 0x09bf, 0x8be: 0x0a03, 0x8bf: 0x0a0f,
	// Block 0x23, offset 0x8c0
	0x8c0: 0x0a2b, 0x8c1: 0x0a3b, 0x8c2: 0x0b23, 0x8c3: 0x0b2b, 0x8c4: 0x0b5b, 0x8c5: 0x0b7b,
	0x8c6: 0x0bab, 0x8c7: 0x0bc3, 0x8c8: 0x0bb3, 0x8c9: 0x0bd3, 0x8ca: 0x0bc7, 0x8cb: 0x0beb,
	0x8cc: 0x0c07, 0x8cd: 0x0c5f, 0x8ce: 0x0c6b, 0x8cf: 0x0c73, 0x8d0: 0x0c9b, 0x8d1: 0x0cdf,
	0x8d2: 0x0d0f, 0x8d3: 0x0d13, 0x8d4: 0x0d27, 0x8d5: 0x0da7, 0x8d6: 0x0db7, 0x8d7: 0x0e0f,
	0x8d8: 0x0e5b, 0x8d9: 0x0e53, 0x8da: 0x0e67, 0x8db: 0x0e83, 0x8dc: 0x0ebb, 0x8dd: 0x1013,
	0x8de: 0x0edf, 0x8df: 0x0f13, 0x8e0: 0x0f1f, 0x8e1: 0x0f5f, 0x8e2: 0x0f7b, 0x8e3: 0x0f9f,
	0x8e4: 0x0fc3, 0x8e5: 0x0fc7, 0x8e6: 0x0fe3, 0x8e7: 0x0fe7, 0x8e8: 0x0ff7, 0x8e9: 0x100b,
	0x8ea: 0x1007, 0x8eb: 0x1037, 0x8ec: 0x10b3, 0x8ed: 0x10cb, 0x8ee: 0x10e3, 0x8ef: 0x111b,
	0x8f0: 0x112f, 0x8f1: 0x114b, 0x8f2: 0x117b, 0x8f3: 0x122f, 0x8f4: 0x1257, 0x8f5: 0x12cb,
	0x8f6: 0x1313, 0x8f7: 0x131f, 0x8f8: 0x1327, 0x8f9: 0x133f, 0x8fa: 0x1353, 0x8fb: 0x1343,
	0x8fc: 0x135b, 0x8fd: 0x1357, 0x8fe: 0x134f, 0x8ff: 0x135f,
	// Block 0x24, offset 0x900
	0x900: 0x136b, 0x901: 0x13a7, 0x902: 0x13e3, 0x903: 0x1413, 0x904: 0x144b, 0x905: 0x146b,
	0x906: 0x14b7, 0x907: 0x14db, 0x908: 0x14fb, 0x909: 0x150f, 0x90a: 0x151f, 0x90b: 0x152b,
	0x90c: 0x1537, 0x90d: 0x158b, 0x90e: 0x162b, 0x90f: 0x16b5, 0x910: 0x16b0, 0x911: 0x16e2,
	0x912: 0x0607, 0x913: 0x062f, 0x914: 0x0633, 0x915: 0x1764, 0x916: 0x1791, 0x917: 0x1809,
	0x918: 0x1617, 0x919: 0x1627,
	// Block 0x25, offset 0x940
	0x940: 0x06fb, 0x941: 0x06f3, 0x942: 0x0703, 0x943: 0x1647, 0x944: 0x0747, 0x945: 0x0757,
	0x946: 0x075b, 0x947: 0x0763, 0x948: 0x076b, 0x949: 0x076f, 0x94a: 0x077b, 0x94b: 0x0773,
	0x94c: 0x05b3, 0x94d: 0x165b, 0x94e: 0x078f, 0x94f: 0x0793, 0x950: 0x0797, 0x951: 0x07b3,
	0x952: 0x164c, 0x953: 0x05b7, 0x954: 0x079f, 0x955: 0x07bf, 0x956: 0x1656, 0x957: 0x07cf,
	0x958: 0x07d7, 0x959: 0x0737, 0x95a: 0x07df, 0x95b: 0x07e3, 0x95c: 0x1831, 0x95d: 0x07ff,
	0x95e: 0x0807, 0x95f: 0x05bf, 0x960: 0x081f, 0x961: 0x0823, 0x962: 0x082b, 0x963: 0x082f,
	0x964: 0x05c3, 0x965: 0x0847, 0x966: 0x084b, 0x967: 0x0857, 0x968: 0x0863, 0x969: 0x0867,
	0x96a: 0x086b, 0x96b: 0x0873, 0x96c: 0x0893, 0x96d: 0x0897, 0x96e: 0x089f, 0x96f: 0x08af,
	0x970: 0x08b7, 0x971: 0x08bb, 0x972: 0x08bb, 0x973: 0x08bb, 0x974: 0x166a, 0x975: 0x0e93,
	0x976: 0x08cf, 0x977: 0x08d7, 0x978: 0x166f, 0x979: 0x08e3, 0x97a: 0x08eb, 0x97b: 0x08f3,
	0x97c: 0x091b, 0x97d: 0x0907, 0x97e: 0x0913, 0x97f: 0x0917,
	// Block 0x26, offset 0x980
	0x980: 0x091f, 0x981: 0x0927, 0x982: 0x092b, 0x983: 0x0933, 0x984: 0x093b, 0x985: 0x093f,
	0x986: 0x093f, 0x987: 0x0947, 0x988: 0x094f, 0x989: 0x0953, 0x98a: 0x095f, 0x98b: 0x0983,
	0x98c: 0x0967, 0x98d: 0x0987, 0x98e: 0x096b, 0x98f: 0x0973, 0x990: 0x080b, 0x991: 0x09cf,
	0x992: 0x0997, 0x993: 0x099b, 0x994: 0x099f, 0x995: 0x0993, 0x996: 0x09a7, 0x997: 0x09a3,
	0x998: 0x09bb, 0x999: 0x1674, 0x99a: 0x09d7, 0x99b: 0x09db, 0x99c: 0x09e3, 0x99d: 0x09ef,
	0x99e: 0x09f7, 0x99f: 0x0a13, 0x9a0: 0x1679, 0x9a1: 0x167e, 0x9a2: 0x0a1f, 0x9a3: 0x0a23,
	0x9a4: 0x0a27, 0x9a5: 0x0a1b, 0x9a6: 0x0a2f, 0x9a7: 0x05c7, 0x9a8: 0x05cb, 0x9a9: 0x0a37,
	0x9aa: 0x0a3f, 0x9ab: 0x0a3f, 0x9ac: 0x1683, 0x9ad: 0x0a5b, 0x9ae: 0x0a5f, 0x9af: 0x0a63,
	0x9b0: 0x0a6b, 0x9b1: 0x1688, 0x9b2: 0x0a73, 0x9b3: 0x0a77, 0x9b4: 0x0b4f, 0x9b5: 0x0a7f,
	0x9b6: 0x05cf, 0x9b7: 0x0a8b, 0x9b8: 0x0a9b, 0x9b9: 0x0aa7, 0x9ba: 0x0aa3, 0x9bb: 0x1692,
	0x9bc: 0x0aaf, 0x9bd: 0x1697, 0x9be: 0x0abb, 0x9bf: 0x0ab7,
	// Block 0x27, offset 0x9c0
	0x9c0: 0x0abf, 0x9c1: 0x0acf, 0x9c2: 0x0ad3, 0x9c3: 0x05d3, 0x9c4: 0x0ae3, 0x9c5: 0x0aeb,
	0x9c6: 0x0aef, 0x9c7: 0x0af3, 0x9c8: 0x05d7, 0x9c9: 0x169c, 0x9ca: 0x05db, 0x9cb: 0x0b0f,
	0x9cc: 0x0b13, 0x9cd: 0x0b17, 0x9ce: 0x0b1f, 0x9cf: 0x1863, 0x9d0: 0x0b37, 0x9d1: 0x16a6,
	0x9d2: 0x16a6, 0x9d3: 0x11d7, 0x9d4: 0x0b47, 0x9d5: 0x0b47, 0x9d6: 0x05df, 0x9d7: 0x16c9,
	0x9d8: 0x179b, 0x9d9: 0x0b57, 0x9da: 0x0b5f, 0x9db: 0x05e3, 0x9dc: 0x0b73, 0x9dd: 0x0b83,
	0x9de: 0x0b87, 0x9df: 0x0b8f, 0x9e0: 0x0b9f, 0x9e1: 0x05eb, 0x9e2: 0x05e7, 0x9e3: 0x0ba3,
	0x9e4: 0x16ab, 0x9e5: 0x0ba7, 0x9e6: 0x0bbb, 0x9e7: 0x0bbf, 0x9e8: 0x0bc3, 0x9e9: 0x0bbf,
	0x9ea: 0x0bcf, 0x9eb: 0x0bd3, 0x9ec: 0x0be3, 0x9ed: 0x0bdb, 0x9ee: 0x0bdf, 0x9ef: 0x0be7,
	0x9f0: 0x0beb, 0x9f1: 0x0bef, 0x9f2: 0x0bfb, 0x9f3: 0x0bff, 0x9f4: 0x0c17, 0x9f5: 0x0c1f,
	0x9f6: 0x0c2f, 0x9f7: 0x0c43, 0x9f8: 0x16ba, 0x9f9: 0x0c3f, 0x9fa: 0x0c33, 0x9fb: 0x0c4b,
	0x9fc: 0x0c53, 0x9fd: 0x0c67, 0x9fe: 0x16bf, 0x9ff: 0x0c6f,
	// Block 0x28, offset 0xa00
	0xa00: 0x0c63, 0xa01: 0x0c5b, 0xa02: 0x05ef, 0xa03: 0x0c77, 0xa04: 0x0c7f, 0xa05: 0x0c87,
	0xa06: 0x0c7b, 0xa07: 0x05f3, 0xa08: 0x0c97, 0xa09: 0x0c9f, 0xa0a: 0x16c4, 0xa0b: 0x0ccb,
	0xa0c: 0x0cff, 0xa0d: 0x0cdb, 0xa0e: 0x05ff, 0xa0f: 0x0ce7, 0xa10: 0x05fb, 0xa11: 0x05f7,
	0xa12: 0x07c3, 0xa13: 0x07c7, 0xa14: 0x0d03, 0xa15: 0x0ceb, 0xa16: 0x11ab, 0xa17: 0x0663,
	0xa18: 0x0d0f, 0xa19: 0x0d13, 0xa1a: 0x0d17, 0xa1b: 0x0d2b, 0xa1c: 0x0d23, 0xa1d: 0x16dd,
	0xa1e: 0x0603, 0xa1f: 0x0d3f, 0xa20: 0x0d33, 0xa21: 0x0d4f, 0xa22: 0x0d57, 0xa23: 0x16e7,
	0xa24: 0x0d5b, 0xa25: 0x0d47, 0xa26: 0x0d63, 0xa27: 0x0607, 0xa28: 0x0d67, 0xa29: 0x0d6b,
	0xa2a: 0x0d6f, 0xa2b: 0x0d7b, 0xa2c: 0x16ec, 0xa2d: 0x0d83, 0xa2e: 0x060b, 0xa2f: 0x0d8f,
	0xa30: 0x16f1, 0xa31: 0x0d93, 0xa32: 0x060f, 0xa33: 0x0d9f, 0xa34: 0x0dab, 0xa35: 0x0db7,
	0xa36: 0x0dbb, 0xa37: 0x16f6, 0xa38: 0x168d, 0xa39: 0x16fb, 0xa3a: 0x0ddb, 0xa3b: 0x1700,
	0xa3c: 0x0de7, 0xa3d: 0x0def, 0xa3e: 0x0ddf, 0xa3f: 0x0dfb,
	// Block 0x29, offset 0xa40
	0xa40: 0x0e0b, 0xa41: 0x0e1b, 0xa42: 0x0e0f, 0xa43: 0x0e13, 0xa44: 0x0e1f, 0xa45: 0x0e23,
	0xa46: 0x1705, 0xa47: 0x0e07, 0xa48: 0x0e3b, 0xa49: 0x0e3f, 0xa4a: 0x0613, 0xa4b: 0x0e53,
	0xa4c: 0x0e4f, 0xa4d: 0x170a, 0xa4e: 0x0e33, 0xa4f: 0x0e6f, 0xa50: 0x170f, 0xa51: 0x1714,
	0xa52: 0x0e73, 0xa53: 0x0e87, 0xa54: 0x0e83, 0xa55: 0x0e7f, 0xa56: 0x0617, 0xa57: 0x0e8b,
	0xa58: 0x0e9b, 0xa59: 0x0e97, 0xa5a: 0x0ea3, 0xa5b: 0x1651, 0xa5c: 0x0eb3, 0xa5d: 0x1719,
	0xa5e: 0x0ebf, 0xa5f: 0x1723, 0xa60: 0x0ed3, 0xa61: 0x0edf, 0xa62: 0x0ef3, 0xa63: 0x1728,
	0xa64: 0x0f07, 0xa65: 0x0f0b, 0xa66: 0x172d, 0xa67: 0x1732, 0xa68: 0x0f27, 0xa69: 0x0f37,
	0xa6a: 0x061b, 0xa6b: 0x0f3b, 0xa6c: 0x061f, 0xa6d: 0x061f, 0xa6e: 0x0f53, 0xa6f: 0x0f57,
	0xa70: 0x0f5f, 0xa71: 0x0f63, 0xa72: 0x0f6f, 0xa73: 0x0623, 0xa74: 0x0f87, 0xa75: 0x1737,
	0xa76: 0x0fa3, 0xa77: 0x173c, 0xa78: 0x0faf, 0xa79: 0x16a1, 0xa7a: 0x0fbf, 0xa7b: 0x1741,
	0xa7c: 0x1746, 0xa7d: 0x174b, 0xa7e: 0x0627, 0xa7f: 0x062b,
	// Block 0x2a, offset 0xa80
	0xa80: 0x0ff7, 0xa81: 0x1755, 0xa82: 0x1750, 0xa83: 0x175a, 0xa84: 0x175f, 0xa85: 0x0fff,
	0xa86: 0x1003, 0xa87: 0x1003, 0xa88: 0x100b, 0xa89: 0x0633, 0xa8a: 0x100f, 0xa8b: 0x0637,
	0xa8c: 0x063b, 0xa8d: 0x1769, 0xa8e: 0x1023, 0xa8f: 0x102b, 0xa90: 0x1037, 0xa91: 0x063f,
	0xa92: 0x176e, 0xa93: 0x105b, 0xa94: 0x1773, 0xa95: 0x1778, 0xa96: 0x107b, 0xa97: 0x1093,
	0xa98: 0x0643, 0xa99: 0x109b, 0xa9a: 0x109f, 0xa9b: 0x10a3, 0xa9c: 0x177d, 0xa9d: 0x1782,
	0xa9e: 0x1782, 0xa9f: 0x10bb, 0xaa0: 0x0647, 0xaa1: 0x1787, 0xaa2: 0x10cf, 0xaa3: 0x10d3,
	0xaa4: 0x064b, 0xaa5: 0x178c, 0xaa6: 0x10ef, 0xaa7: 0x064f, 0xaa8: 0x10ff, 0xaa9: 0x10f7,
	0xaaa: 0x1107, 0xaab: 0x1796, 0xaac: 0x111f, 0xaad: 0x0653, 0xaae: 0x112b, 0xaaf: 0x1133,
	0xab0: 0x1143, 0xab1: 0x0657, 0xab2: 0x17a0, 0xab3: 0x17a5, 0xab4: 0x065b, 0xab5: 0x17aa,
	0xab6: 0x115b, 0xab7: 0x17af, 0xab8: 0x1167, 0xab9: 0x1173, 0xaba: 0x117b, 0xabb: 0x17b4,
	0xabc: 0x17b9, 0xabd: 0x118f, 0xabe: 0x17be, 0xabf: 0x1197,
	// Block 0x2b, offset 0xac0
	0xac0: 0x16ce, 0xac1: 0x065f, 0xac2: 0x11af, 0xac3: 0x11b3, 0xac4: 0x0667, 0xac5: 0x11b7,
	0xac6: 0x0a33, 0xac7: 0x17c3, 0xac8: 0x17c8, 0xac9: 0x16d3, 0xaca: 0x16d8, 0xacb: 0x11d7,
	0xacc: 0x11db, 0xacd: 0x13f3, 0xace: 0x066b, 0xacf: 0x1207, 0xad0: 0x1203, 0xad1: 0x120b,
	0xad2: 0x083f, 0xad3: 0x120f, 0xad4: 0x1213, 0xad5: 0x1217, 0xad6: 0x121f, 0xad7: 0x17cd,
	0xad8: 0x121b, 0xad9: 0x1223, 0xada: 0x1237, 0xadb: 0x123b, 0xadc: 0x1227, 0xadd: 0x123f,
	0xade: 0x1253, 0xadf: 0x1267, 0xae0: 0x1233, 0xae1: 0x1247, 0xae2: 0x124b, 0xae3: 0x124f,
	0xae4: 0x17d2, 0xae5: 0x17dc, 0xae6: 0x17d7, 0xae7: 0x066f, 0xae8: 0x126f, 0xae9: 0x1273,
	0xaea: 0x127b, 0xaeb: 0x17f0, 0xaec: 0x127f, 0xaed: 0x17e1, 0xaee: 0x0673, 0xaef: 0x0677,
	0xaf0: 0x17e6, 0xaf1: 0x17eb, 0xaf2: 0x067b, 0xaf3: 0x129f, 0xaf4: 0x12a3, 0xaf5: 0x12a7,
	0xaf6: 0x12ab, 0xaf7: 0x12b7, 0xaf8: 0x12b3, 0xaf9: 0x12bf, 0xafa: 0x12bb, 0xafb: 0x12cb,
	0xafc: 0x12c3, 0xafd: 0x12c7, 0xafe: 0x12cf, 0xaff: 0x067f,
	// Block 0x2c, offset 0xb00
	0xb00: 0x12d7, 0xb01: 0x12db, 0xb02: 0x0683, 0xb03: 0x12eb, 0xb04: 0x12ef, 0xb05: 0x17f5,
	0xb06: 0x12fb, 0xb07: 0x12ff, 0xb08: 0x0687, 0xb09: 0x130b, 0xb0a: 0x05bb, 0xb0b: 0x17fa,
	0xb0c: 0x17ff, 0xb0d: 0x068b, 0xb0e: 0x068f, 0xb0f: 0x1337, 0xb10: 0x134f, 0xb11: 0x136b,
	0xb12: 0x137b, 0xb13: 0x1804, 0xb14: 0x138f, 0xb15: 0x1393, 0xb16: 0x13ab, 0xb17: 0x13b7,
	0xb18: 0x180e, 0xb19: 0x1660, 0xb1a: 0x13c3, 0xb1b: 0x13bf, 0xb1c: 0x13cb, 0xb1d: 0x1665,
	0xb1e: 0x13d7, 0xb1f: 0x13e3, 0xb20: 0x1813, 0xb21: 0x1818, 0xb22: 0x1423, 0xb23: 0x142f,
	0xb24: 0x1437, 0xb25: 0x181d, 0xb26: 0x143b, 0xb27: 0x1467, 0xb28: 0x1473, 0xb29: 0x1477,
	0xb2a: 0x146f, 0xb2b: 0x1483, 0xb2c: 0x1487, 0xb2d: 0x1822, 0xb2e: 0x1493, 0xb2f: 0x0693,
	0xb30: 0x149b, 0xb31: 0x1827, 0xb32: 0x0697, 0xb33: 0x14d3, 0xb34: 0x0ac3, 0xb35: 0x14eb,
	0xb36: 0x182c, 0xb37: 0x1836, 0xb38: 0x069b, 0xb39: 0x069f, 0xb3a: 0x1513, 0xb3b: 0x183b,
	0xb3c: 0x06a3, 0xb3d: 0x1840, 0xb3e: 0x152b, 0xb3f: 0x152b,
	// Block 0x2d, offset 0xb40
	0xb40: 0x1533, 0xb41: 0x1845, 0xb42: 0x154b, 0xb43: 0x06a7, 0xb44: 0x155b, 0xb45: 0x1567,
	0xb46: 0x156f, 0xb47: 0x1577, 0xb48: 0x06ab, 0xb49: 0x184a, 0xb4a: 0x158b, 0xb4b: 0x15a7,
	0xb4c: 0x15b3, 0xb4d: 0x06af, 0xb4e: 0x06b3, 0xb4f: 0x15b7, 0xb50: 0x184f, 0xb51: 0x06b7,
	0xb52: 0x1854, 0xb53: 0x1859, 0xb54: 0x185e, 0xb55: 0x15db, 0xb56: 0x06bb, 0xb57: 0x15ef,
	0xb58: 0x15f7, 0xb59: 0x15fb, 0xb5a: 0x1603, 0xb5b: 0x160b, 0xb5c: 0x1613, 0xb5d: 0x1868,
}

// nfcIndex: 22 blocks, 1408 entries, 1408 bytes
// Block 0 is the zero block.
var nfcIndex = [1408]uint8{
	// Block 0x0, offset 0x0
	// Block 0x1, offset 0x40
	// Block 0x2, offset 0x80
	// Block 0x3, offset 0xc0
	0xc2: 0x2c, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x2d, 0xc7: 0x04,
	0xc8: 0x05, 0xca: 0x2e, 0xcb: 0x2f, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x30,
	0xd0: 0x09, 0xd1: 0x31, 0xd2: 0x32, 0xd3: 0x0a, 0xd6: 0x0b, 0xd7: 0x33,
	0xd8: 0x34, 0xd9: 0x0c, 0xdb: 0x35, 0xdc: 0x36, 0xdd: 0x37, 0xdf: 0x38,
	0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05,
	0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a,
	0xf0: 0x13,
	// Block 0x4, offset 0x100
	0x120: 0x39, 0x121: 0x3a, 0x123: 0x3b, 0x124: 0x3c, 0x125: 0x3d, 0x126: 0x3e, 0x127: 0x3f,
	0x128: 0x40, 0x129: 0x41, 0x12a: 0x42, 0x12b: 0x43, 0x12c: 0x3e, 0x12d: 0x44, 0x12e: 0x45, 0x12f: 0x46,
	0x131: 0x47, 0x132: 0x48, 0x133: 0x49, 0x134: 0x4a, 0x135: 0x4b, 0x137: 0x4c,
	0x138: 0x4d, 0x139: 0x4e, 0x13a: 0x4f, 0x13b: 0x50, 0x13c: 0x51, 0x13d: 0x52, 0x13e: 0x53, 0x13f: 0x54,
	// Block 0x5, offset 0x140
	0x140: 0x55, 0x142: 0x56, 0x144: 0x57, 0x145: 0x58, 0x146: 0x59, 0x147: 0x5a,
	0x14d: 0x5b,
	0x15c: 0x5c, 0x15f: 0x5d,
	0x162: 0x5e, 0x164: 0x5f,
	0x168: 0x60, 0x169: 0x61, 0x16a: 0x62, 0x16c: 0x0d, 0x16d: 0x63, 0x16e: 0x64, 0x16f: 0x65,
	0x170: 0x66, 0x173: 0x67, 0x177: 0x68,
	0x178: 0x0e, 0x179: 0x0f, 0x17a: 0x10, 0x17b: 0x11, 0x17c: 0x12, 0x17d: 0x13, 0x17e: 0x14, 0x17f: 0x15,
	// Block 0x6, offset 0x180
	0x180: 0x69, 0x183: 0x6a, 0x184: 0x6b, 0x186: 0x6c, 0x187: 0x6d,
	0x188: 0x6e, 0x189: 0x16, 0x18a: 0x17, 0x18b: 0x6f, 0x18c: 0x70,
	0x1ab: 0x71,
	0x1b3: 0x72, 0x1b5: 0x73, 0x1b7: 0x74,
	// Block 0x7, offset 0x1c0
	0x1c0: 0x75, 0x1c1: 0x18, 0x1c2: 0x19, 0x1c3: 0x1a, 0x1c4: 0x76, 0x1c5: 0x77,
	0x1c9: 0x78, 0x1cc: 0x79, 0x1cd: 0x7a,
	// Block 0x8, offset 0x200
	0x219: 0x7b, 0x21a: 0x7c, 0x21b: 0x7d,
	0x220: 0x7e, 0x223: 0x7f, 0x224: 0x80, 0x225: 0x81, 0x226: 0x82, 0x227: 0x83,
	0x22a: 0x84, 0x22b: 0x85, 0x22f: 0x86,
	0x230: 0x87, 0x231: 0x88, 0x232: 0x89, 0x233: 0x8a, 0x234: 0x8b, 0x235: 0x8c, 0x236: 0x8d, 0x237: 0x87,
	0x238: 0x88, 0x239: 0x89, 0x23a: 0x8a, 0x23b: 0x8b, 0x23c: 0x8c, 0x23d: 0x8d, 0x23e: 0x87, 0x23f: 0x88,
	// Block 0x9, offset 0x240
	0x240: 0x89, 0x241: 0x8a, 0x242: 0x8b, 0x243: 0x8c, 0x244: 0x8d, 0x245: 0x87, 0x246: 0x88, 0x247: 0x89,
	0x248: 0x8a, 0x249: 0x8b, 0x24a: 0x8c, 0x24b: 0x8d, 0x24c: 0x87, 0x24d: 0x88, 0x24e: 0x89, 0x24f: 0x8a,
	0x250: 0x8b, 0x251: 0x8c, 0x252: 0x8d, 0x253: 0x87, 0x254: 0x88, 0x255: 0x89, 0x256: 0x8a, 0x257: 0x8b,
	0x258: 0x8c, 0x259: 0x8d, 0x25a: 0x87, 0x25b: 0x88, 0x25c: 0x89, 0x25d: 0x8a, 0x25e: 0x8b, 0x25f: 0x8c,
	0x260: 0x8d, 0x261: 0x87, 0x262: 0x88, 0x263: 0x89, 0x264: 0x8a, 0x265: 0x8b, 0x266: 0x8c, 0x267: 0x8d,
	0x268: 0x87, 0x269: 0x88, 0x26a: 0x89, 0x26b: 0x8a, 0x26c: 0x8b, 0x26d: 0x8c, 0x26e: 0x8d, 0x26f: 0x87,
	0x270: 0x88, 0x271: 0x89, 0x272: 0x8a, 0x273: 0x8b, 0x274: 0x8c, 0x275: 0x8d, 0x276: 0x87, 0x277: 0x88,
	0x278: 0x89, 0x279: 0x8a, 0x27a: 0x8b, 0x27b: 0x8c, 0x27c: 0x8d, 0x27d: 0x87, 0x27e: 0x88, 0x27f: 0x89,
	// Block 0xa, offset 0x280
	0x280: 0x8a, 0x281: 0x8b, 0x282: 0x8c, 0x283: 0x8d, 0x284: 0x87, 0x285: 0x88, 0x286: 0x89, 0x287: 0x8a,
	0x288: 0x8b, 0x289: 0x8c, 0x28a: 0x8d, 0x28b: 0x87, 0x28c: 0x88, 0x28d: 0x89, 0x28e: 0x8a, 0x28f: 0x8b,
	0x290: 0x8c, 0x291: 0x8d, 0x292: 0x87, 0x293: 0x88, 0x294: 0x89, 0x295: 0x8a, 0x296: 0x8b, 0x297: 0x8c,
	0x298: 0x8d, 0x299: 0x87, 0x29a: 0x88, 0x29b: 0x89, 0x29c: 0x8a, 0x29d: 0x8b, 0x29e: 0x8c, 0x29f: 0x8d,
	0x2a0: 0x87, 0x2a1: 0x88, 0x2a2: 0x89, 0x2a3: 0x8a, 0x2a4: 0x8b, 0x2a5: 0x8c, 0x2a6: 0x8d, 0x2a7: 0x87,
	0x2a8: 0x88, 0x2a9: 0x89, 0x2aa: 0x8a, 0x2ab: 0x8b, 0x2ac: 0x8c, 0x2ad: 0x8d, 0x2ae: 0x87, 0x2af: 0x88,
	0x2b0: 0x89, 0x2b1: 0x8a, 0x2b2: 0x8b, 0x2b3: 0x8c, 0x2b4: 0x8d, 0x2b5: 0x87, 0x2b6: 0x88, 0x2b7: 0x89,
	0x2b8: 0x8a, 0x2b9: 0x8b, 0x2ba: 0x8c, 0x2bb: 0x8d, 0x2bc: 0x87, 0x2bd: 0x88, 0x2be: 0x89, 0x2bf: 0x8a,
	// Block 0xb, offset 0x2c0
	0x2c0: 0x8b, 0x2c1: 0x8c, 0x2c2: 0x8d, 0x2c3: 0x87, 0x2c4: 0x88, 0x2c5: 0x89, 0x2c6: 0x8a, 0x2c7: 0x8b,
	0x2c8: 0x8c, 0x2c9: 0x8d, 0x2ca: 0x87, 0x2cb: 0x88, 0x2cc: 0x89, 0x2cd: 0x8a, 0x2ce: 0x8b, 0x2cf: 0x8c,
	0x2d0: 0x8d, 0x2d1: 0x87, 0x2d2: 0x88, 0x2d3: 0x89, 0x2d4: 0x8a, 0x2d5: 0x8b, 0x2d6: 0x8c, 0x2d7: 0x8d,
	0x2d8: 0x87, 0x2d9: 0x88, 0x2da: 0x89, 0x2db: 0x8a, 0x2dc: 0x8b, 0x2dd: 0x8c, 0x2de: 0x8e,
	// Block 0xc, offset 0x300
	0x324: 0x1b, 0x325: 0x1c, 0x326: 0x1d, 0x327: 0x1e,
	0x328: 0x1f, 0x329: 0x20, 0x32a: 0x21, 0x32b: 0x22, 0x32c: 0x8f, 0x32d: 0x90, 0x32e: 0x91,
	0x331: 0x92, 0x332: 0x93, 0x333: 0x94, 0x334: 0x95,
	0x338: 0x96, 0x339: 0x97, 0x33a: 0x98, 0x33b: 0x99, 0x33e: 0x9a, 0x33f: 0x9b,
	// Block 0xd, offset 0x340
	0x347: 0x9c,
	0x34b: 0x9d, 0x34d: 0x9e,
	0x368: 0x9f, 0x36b: 0xa0,
	// Block 0xe, offset 0x380
	0x381: 0xa1, 0x382: 0xa2, 0x384: 0xa3, 0x385: 0x82, 0x387: 0xa4,
	0x388: 0xa5, 0x38b: 0xa6, 0x38c: 0x3e, 0x38d: 0xa7,
	0x391: 0xa8, 0x392: 0xa9, 0x393: 0xaa, 0x396: 0xab, 0x397: 0xac,
	0x398: 0x73, 0x39a: 0xad, 0x39c: 0xae,
	0x3b0: 0x73,
	// Block 0xf, offset 0x3c0
	0x3eb: 0xaf, 0x3ec: 0xb0,
	// Block 0x10, offset 0x400
	0x432: 0xb1,
	// Block 0x11, offset 0x440
	0x445: 0xb2, 0x446: 0xb3, 0x447: 0xb4,
	0x449: 0xb5,
	// Block 0x12, offset 0x480
	0x480: 0xb6,
	0x4a3: 0xb7, 0x4a5: 0xb8,
	// Block 0x13, offset 0x4c0
	0x4c8: 0xb9,
	// Block 0x14, offset 0x500
	0x520: 0x23, 0x521: 0x24, 0x522: 0x25, 0x523: 0x26, 0x524: 0x27, 0x525: 0x28, 0x526: 0x29, 0x527: 0x2a,
	0x528: 0x2b,
	// Block 0x15, offset 0x540
	0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d,
	0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11,
	0x56f: 0x12,
}

// nfcSparseOffset: 142 entries, 284 bytes
var nfcSparseOffset = []uint16{0x0, 0x5, 0x9, 0xb, 0xd, 0x18, 0x28, 0x2a, 0x2f, 0x3a, 0x49, 0x56, 0x5e, 0x62, 0x67, 0x69, 0x7a, 0x82, 0x89, 0x8c, 0x93, 0x97, 0x9b, 0x9d, 0x9f, 0xa8, 0xac, 0xb3, 0xb8, 0xbb, 0xc5, 0xc7, 0xce, 0xd6, 0xd9, 0xdb, 0xdd, 0xdf, 0xe4, 0xf5, 0x101, 0x103, 0x109, 0x10b, 0x10d, 0x10f, 0x111, 0x113, 0x115, 0x118, 0x11b, 0x11d, 0x120, 0x123, 0x127, 0x12c, 0x135, 0x137, 0x13a, 0x13c, 0x147, 0x157, 0x15b, 0x169, 0x16c, 0x172, 0x178, 0x183, 0x187, 0x189, 0x18b, 0x18d, 0x18f, 0x191, 0x197, 0x19b, 0x19d, 0x19f, 0x1a7, 0x1ab, 0x1ae, 0x1b0, 0x1b2, 0x1b4, 0x1b7, 0x1b9, 0x1bb, 0x1bd, 0x1bf, 0x1c5, 0x1c8, 0x1ca, 0x1d1, 0x1d7, 0x1dd, 0x1e5, 0x1eb, 0x1f1, 0x1f7, 0x1fb, 0x209, 0x212, 0x215, 0x218, 0x21a, 0x21d, 0x21f, 0x223, 0x228, 0x22a, 0x22c, 0x231, 0x237, 0x239, 0x23b, 0x23d, 0x243, 0x246, 0x249, 0x251, 0x258, 0x25b, 0x25e, 0x260, 0x268, 0x26b, 0x272, 0x275, 0x27b, 0x27d, 0x280, 0x282, 0x284, 0x286, 0x288, 0x295, 0x29f, 0x2a1, 0x2a3, 0x2a9, 0x2ab, 0x2ae}

// nfcSparseValues: 688 entries, 2752 bytes
var nfcSparseValues = [688]valueRange{
	// Block 0x0, offset 0x0
	{value: 0x0000, lo: 0x04},
	{value: 0xa100, lo: 0xa8, hi: 0xa8},
	{value: 0x8100, lo: 0xaf, hi: 0xaf},
	{value: 0x8100, lo: 0xb4, hi: 0xb4},
	{value: 0x8100, lo: 0xb8, hi: 0xb8},
	// Block 0x1, offset 0x5
	{value: 0x0091, lo: 0x03},
	{value: 0x46e2, lo: 0xa0, hi: 0xa1},
	{value: 0x4714, lo: 0xaf, hi: 0xb0},
	{value: 0xa000, lo: 0xb7, hi: 0xb7},
	// Block 0x2, offset 0x9
	{value: 0x0000, lo: 0x01},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	// Block 0x3, offset 0xb
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0x98, hi: 0x9d},
	// Block 0x4, offset 0xd
	{value: 0x0006, lo: 0x0a},
	{value: 0xa000, lo: 0x81, hi: 0x81},
	{value: 0xa000, lo: 0x85, hi: 0x85},
	{value: 0xa000, lo: 0x89, hi: 0x89},
	{value: 0x4840, lo: 0x8a, hi: 0x8a},
	{value: 0x485e, lo: 0x8b, hi: 0x8b},
	{value: 0x36c7, lo: 0x8c, hi: 0x8c},
	{value: 0x36df, lo: 0x8d, hi: 0x8d},
	{value: 0x4876, lo: 0x8e, hi: 0x8e},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x36fd, lo: 0x93, hi: 0x94},
	// Block 0x5, offset 0x18
	{value: 0x0000, lo: 0x0f},
	{value: 0xa000, lo: 0x83, hi: 0x83},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0xa000, lo: 0x8b, hi: 0x8b},
	{value: 0xa000, lo: 0x8d, hi: 0x8d},
	{value: 0x37a5, lo: 0x90, hi: 0x90},
	{value: 0x37b1, lo: 0x91, hi: 0x91},
	{value: 0x379f, lo: 0x93, hi: 0x93},
	{value: 0xa000, lo: 0x96, hi: 0x96},
	{value: 0x3817, lo: 0x97, hi: 0x97},
	{value: 0x37e1, lo: 0x9c, hi: 0x9c},
	{value: 0x37c9, lo: 0x9d, hi: 0x9d},
	{value: 0x37f3, lo: 0x9e, hi: 0x9e},
	{value: 0xa000, lo: 0xb4, hi: 0xb5},
	{value: 0x381d, lo: 0xb6, hi: 0xb6},
	{value: 0x3823, lo: 0xb7, hi: 0xb7},
	// Block 0x6, offset 0x28
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x83, hi: 0x87},
	// Block 0x7, offset 0x2a
	{value: 0x0001, lo: 0x04},
	{value: 0x8113, lo: 0x81, hi: 0x82},
	{value: 0x8132, lo: 0x84, hi: 0x84},
	{value: 0x812d, lo: 0x85, hi: 0x85},
	{value: 0x810d, lo: 0x87, hi: 0x87},
	// Block 0x8, offset 0x2f
	{value: 0x0000, lo: 0x0a},
	{value: 0x8132, lo: 0x90, hi: 0x97},
	{value: 0x8119, lo: 0x98, hi: 0x98},
	{value: 0x811a, lo: 0x99, hi: 0x99},
	{value: 0x811b, lo: 0x9a, hi: 0x9a},
	{value: 0x3841, lo: 0xa2, hi: 0xa2},
	{value: 0x3847, lo: 0xa3, hi: 0xa3},
	{value: 0x3853, lo: 0xa4, hi: 0xa4},
	{value: 0x384d, lo: 0xa5, hi: 0xa5},
	{value: 0x3859, lo: 0xa6, hi: 0xa6},
	{value: 0xa000, lo: 0xa7, hi: 0xa7},
	// Block 0x9, offset 0x3a
	{value: 0x0000, lo: 0x0e},
	{value: 0x386b, lo: 0x80, hi: 0x80},
	{value: 0xa000, lo: 0x81, hi: 0x81},
	{value: 0x385f, lo: 0x82, hi: 0x82},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x3865, lo: 0x93, hi: 0x93},
	{value: 0xa000, lo: 0x95, hi: 0x95},
	{value: 0x8132, lo: 0x96, hi: 0x9c},
	{value: 0x8132, lo: 0x9f, hi: 0xa2},
	{value: 0x812d, lo: 0xa3, hi: 0xa3},
	{value: 0x8132, lo: 0xa4, hi: 0xa4},
	{value: 0x8132, lo: 0xa7, hi: 0xa8},
	{value: 0x812d, lo: 0xaa, hi: 0xaa},
	{value: 0x8132, lo: 0xab, hi: 0xac},
	{value: 0x812d, lo: 0xad, hi: 0xad},
	// Block 0xa, offset 0x49
	{value: 0x0000, lo: 0x0c},
	{value: 0x811f, lo: 0x91, hi: 0x91},
	{value: 0x8132, lo: 0xb0, hi: 0xb0},
	{value: 0x812d, lo: 0xb1, hi: 0xb1},
	{value: 0x8132, lo: 0xb2, hi: 0xb3},
	{value: 0x812d, lo: 0xb4, hi: 0xb4},
	{value: 0x8132, lo: 0xb5, hi: 0xb6},
	{value: 0x812d, lo: 0xb7, hi: 0xb9},
	{value: 0x8132, lo: 0xba, hi: 0xba},
	{value: 0x812d, lo: 0xbb, hi: 0xbc},
	{value: 0x8132, lo: 0xbd, hi: 0xbd},
	{value: 0x812d, lo: 0xbe, hi: 0xbe},
	{value: 0x8132, lo: 0xbf, hi: 0xbf},
	// Block 0xb, offset 0x56
	{value: 0x0005, lo: 0x07},
	{value: 0x8132, lo: 0x80, hi: 0x80},
	{value: 0x8132, lo: 0x81, hi: 0x81},
	{value: 0x812d, lo: 0x82, hi: 0x83},
	{value: 0x812d, lo: 0x84, hi: 0x85},
	{value: 0x812d, lo: 0x86, hi: 0x87},
	{value: 0x812d, lo: 0x88, hi: 0x89},
	{value: 0x8132, lo: 0x8a, hi: 0x8a},
	// Block 0xc, offset 0x5e
	{value: 0x0000, lo: 0x03},
	{value: 0x8132, lo: 0xab, hi: 0xb1},
	{value: 0x812d, lo: 0xb2, hi: 0xb2},
	{value: 0x8132, lo: 0xb3, hi: 0xb3},
	// Block 0xd, offset 0x62
	{value: 0x0000, lo: 0x04},
	{value: 0x8132, lo: 0x96, hi: 0x99},
	{value: 0x8132, lo: 0x9b, hi: 0xa3},
	{value: 0x8132, lo: 0xa5, hi: 0xa7},
	{value: 0x8132, lo: 0xa9, hi: 0xad},
	// Block 0xe, offset 0x67
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x99, hi: 0x9b},
	// Block 0xf, offset 0x69
	{value: 0x0000, lo: 0x10},
	{value: 0x8132, lo: 0x94, hi: 0xa1},
	{value: 0x812d, lo: 0xa3, hi: 0xa3},
	{value: 0x8132, lo: 0xa4, hi: 0xa5},
	{value: 0x812d, lo: 0xa6, hi: 0xa6},
	{value: 0x8132, lo: 0xa7, hi: 0xa8},
	{value: 0x812d, lo: 0xa9, hi: 0xa9},
	{value: 0x8132, lo: 0xaa, hi: 0xac},
	{value: 0x812d, lo: 0xad, hi: 0xaf},
	{value: 0x8116, lo: 0xb0, hi: 0xb0},
	{value: 0x8117, lo: 0xb1, hi: 0xb1},
	{value: 0x8118, lo: 0xb2, hi: 0xb2},
	{value: 0x8132, lo: 0xb3, hi: 0xb5},
	{value: 0x812d, lo: 0xb6, hi: 0xb6},
	{value: 0x8132, lo: 0xb7, hi: 0xb8},
	{value: 0x812d, lo: 0xb9, hi: 0xba},
	{value: 0x8132, lo: 0xbb, hi: 0xbf},
	// Block 0x10, offset 0x7a
	{value: 0x0000, lo: 0x07},
	{value: 0xa000, lo: 0xa8, hi: 0xa8},
	{value: 0x3ed8, lo: 0xa9, hi: 0xa9},
	{value: 0xa000, lo: 0xb0, hi: 0xb0},
	{value: 0x3ee0, lo: 0xb1, hi: 0xb1},
	{value: 0xa000, lo: 0xb3, hi: 0xb3},
	{value: 0x3ee8, lo: 0xb4, hi: 0xb4},
	{value: 0x9902, lo: 0xbc, hi: 0xbc},
	// Block 0x11, offset 0x82
	{value: 0x0008, lo: 0x06},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x8132, lo: 0x91, hi: 0x91},
	{value: 0x812d, lo: 0x92, hi: 0x92},
	{value: 0x8132, lo: 0x93, hi: 0x93},
	{value: 0x8132, lo: 0x94, hi: 0x94},
	{value: 0x451c, lo: 0x98, hi: 0x9f},
	// Block 0x12, offset 0x89
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x13, offset 0x8c
	{value: 0x0008, lo: 0x06},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2c9e, lo: 0x8b, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	{value: 0x455c, lo: 0x9c, hi: 0x9d},
	{value: 0x456c, lo: 0x9f, hi: 0x9f},
	// Block 0x14, offset 0x93
	{value: 0x0000, lo: 0x03},
	{value: 0x4594, lo: 0xb3, hi: 0xb3},
	{value: 0x459c, lo: 0xb6, hi: 0xb6},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	// Block 0x15, offset 0x97
	{value: 0x0008, lo: 0x03},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x4574, lo: 0x99, hi: 0x9b},
	{value: 0x458c, lo: 0x9e, hi: 0x9e},
	// Block 0x16, offset 0x9b
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	// Block 0x17, offset 0x9d
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	// Block 0x18, offset 0x9f
	{value: 0x0000, lo: 0x08},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2cb6, lo: 0x88, hi: 0x88},
	{value: 0x2cae, lo: 0x8b, hi: 0x8b},
	{value: 0x2cbe, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x96, hi: 0x97},
	{value: 0x45a4, lo: 0x9c, hi: 0x9c},
	{value: 0x45ac, lo: 0x9d, hi: 0x9d},
	// Block 0x19, offset 0xa8
	{value: 0x0000, lo: 0x03},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x2cc6, lo: 0x94, hi: 0x94},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x1a, offset 0xac
	{value: 0x0000, lo: 0x06},
	{value: 0xa000, lo: 0x86, hi: 0x87},
	{value: 0x2cce, lo: 0x8a, hi: 0x8a},
	{value: 0x2cde, lo: 0x8b, hi: 0x8b},
	{value: 0x2cd6, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	// Block 0x1b, offset 0xb3
	{value: 0x1801, lo: 0x04},
	{value: 0xa000, lo: 0x86, hi: 0x86},
	{value: 0x3ef0, lo: 0x88, hi: 0x88},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x8120, lo: 0x95, hi: 0x96},
	// Block 0x1c, offset 0xb8
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	{value: 0xa000, lo: 0xbf, hi: 0xbf},
	// Block 0x1d, offset 0xbb
	{value: 0x0000, lo: 0x09},
	{value: 0x2ce6, lo: 0x80, hi: 0x80},
	{value: 0x9900, lo: 0x82, hi: 0x82},
	{value: 0xa000, lo: 0x86, hi: 0x86},
	{value: 0x2cee, lo: 0x87, hi: 0x87},
	{value: 0x2cf6, lo: 0x88, hi: 0x88},
	{value: 0x2f50, lo: 0x8a, hi: 0x8a},
	{value: 0x2dd8, lo: 0x8b, hi: 0x8b},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x95, hi: 0x96},
	// Block 0x1e, offset 0xc5
	{value: 0x0000, lo: 0x01},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x1f, offset 0xc7
	{value: 0x0000, lo: 0x06},
	{value: 0xa000, lo: 0x86, hi: 0x87},
	{value: 0x2cfe, lo: 0x8a, hi: 0x8a},
	{value: 0x2d0e, lo: 0x8b, hi: 0x8b},
	{value: 0x2d06, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	// Block 0x20, offset 0xce
	{value: 0x6bea, lo: 0x07},
	{value: 0x9904, lo: 0x8a, hi: 0x8a},
	{value: 0x9900, lo: 0x8f, hi: 0x8f},
	{value: 0xa000, lo: 0x99, hi: 0x99},
	{value: 0x3ef8, lo: 0x9a, hi: 0x9a},
	{value: 0x2f58, lo: 0x9c, hi: 0x9c},
	{value: 0x2de3, lo: 0x9d, hi: 0x9d},
	{value: 0x2d16, lo: 0x9e, hi: 0x9f},
	// Block 0x21, offset 0xd6
	{value: 0x0000, lo: 0x02},
	{value: 0x8122, lo: 0xb8, hi: 0xb9},
	{value: 0x8104, lo: 0xba, hi: 0xba},
	// Block 0x22, offset 0xd9
	{value: 0x0000, lo: 0x01},
	{value: 0x8123, lo: 0x88, hi: 0x8b},
	// Block 0x23, offset 0xdb
	{value: 0x0000, lo: 0x01},
	{value: 0x8124, lo: 0xb8, hi: 0xb9},
	// Block 0x24, offset 0xdd
	{value: 0x0000, lo: 0x01},
	{value: 0x8125, lo: 0x88, hi: 0x8b},
	// Block 0x25, offset 0xdf
	{value: 0x0000, lo: 0x04},
	{value: 0x812d, lo: 0x98, hi: 0x99},
	{value: 0x812d, lo: 0xb5, hi: 0xb5},
	{value: 0x812d, lo: 0xb7, hi: 0xb7},
	{value: 0x812b, lo: 0xb9, hi: 0xb9},
	// Block 0x26, offset 0xe4
	{value: 0x0000, lo: 0x10},
	{value: 0x2644, lo: 0x83, hi: 0x83},
	{value: 0x264b, lo: 0x8d, hi: 0x8d},
	{value: 0x2652, lo: 0x92, hi: 0x92},
	{value: 0x2659, lo: 0x97, hi: 0x97},
	{value: 0x2660, lo: 0x9c, hi: 0x9c},
	{value: 0x263d, lo: 0xa9, hi: 0xa9},
	{value: 0x8126, lo: 0xb1, hi: 0xb1},
	{value: 0x8127, lo: 0xb2, hi: 0xb2},
	{value: 0x4a84, lo: 0xb3, hi: 0xb3},
	{value: 0x8128, lo: 0xb4, hi: 0xb4},
	{value: 0x4a8d, lo: 0xb5, hi: 0xb5},
	{value: 0x45b4, lo: 0xb6, hi: 0xb6},
	{value: 0x8200, lo: 0xb7, hi: 0xb7},
	{value: 0x45bc, lo: 0xb8, hi: 0xb8},
	{value: 0x8200, lo: 0xb9, hi: 0xb9},
	{value: 0x8127, lo: 0xba, hi: 0xbd},
	// Block 0x27, offset 0xf5
	{value: 0x0000, lo: 0x0b},
	{value: 0x8127, lo: 0x80, hi: 0x80},
	{value: 0x4a96, lo: 0x81, hi: 0x81},
	{value: 0x8132, lo: 0x82, hi: 0x83},
	{value: 0x8104, lo: 0x84, hi: 0x84},
	{value: 0x8132, lo: 0x86, hi: 0x87},
	{value: 0x266e, lo: 0x93, hi: 0x93},
	{value: 0x2675, lo: 0x9d, hi: 0x9d},
	{value: 0x267c, lo: 0xa2, hi: 0xa2},
	{value: 0x2683, lo: 0xa7, hi: 0xa7},
	{value: 0x268a, lo: 0xac, hi: 0xac},
	{value: 0x2667, lo: 0xb9, hi: 0xb9},
	// Block 0x28, offset 0x101
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x86, hi: 0x86},
	// Block 0x29, offset 0x103
	{value: 0x0000, lo: 0x05},
	{value: 0xa000, lo: 0xa5, hi: 0xa5},
	{value: 0x2d1e, lo: 0xa6, hi: 0xa6},
	{value: 0x9900, lo: 0xae, hi: 0xae},
	{value: 0x8102, lo: 0xb7, hi: 0xb7},
	{value: 0x8104, lo: 0xb9, hi: 0xba},
	// Block 0x2a, offset 0x109
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x8d, hi: 0x8d},
	// Block 0x2b, offset 0x10b
	{value: 0x0000, lo: 0x01},
	{value: 0xa000, lo: 0x80, hi: 0x92},
	// Block 0x2c, offset 0x10d
	{value: 0x0000, lo: 0x01},
	{value: 0xb900, lo: 0xa1, hi: 0xb5},
	// Block 0x2d, offset 0x10f
	{value: 0x0000, lo: 0x01},
	{value: 0x9900, lo: 0xa8, hi: 0xbf},
	// Block 0x2e, offset 0x111
	{value: 0x0000, lo: 0x01},
	{value: 0x9900, lo: 0x80, hi: 0x82},
	// Block 0x2f, offset 0x113
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x9d, hi: 0x9f},
	// Block 0x30, offset 0x115
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x94, hi: 0x94},
	{value: 0x8104, lo: 0xb4, hi: 0xb4},
	// Block 0x31, offset 0x118
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x92, hi: 0x92},
	{value: 0x8132, lo: 0x9d, hi: 0x9d},
	// Block 0x32, offset 0x11b
	{value: 0x0000, lo: 0x01},
	{value: 0x8131, lo: 0xa9, hi: 0xa9},
	// Block 0x33, offset 0x11d
	{value: 0x0004, lo: 0x02},
	{value: 0x812e, lo: 0xb9, hi: 0xba},
	{value: 0x812d, lo: 0xbb, hi: 0xbb},
	// Block 0x34, offset 0x120
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0x97, hi: 0x97},
	{value: 0x812d, lo: 0x98, hi: 0x98},
	// Block 0x35, offset 0x123
	{value: 0x0000, lo: 0x03},
	{value: 0x8104, lo: 0xa0, hi: 0xa0},
	{value: 0x8132, lo: 0xb5, hi: 0xbc},
	{value: 0x812d, lo: 0xbf, hi: 0xbf},
	// Block 0x36, offset 0x127
	{value: 0x0000, lo: 0x04},
	{value: 0x8132, lo: 0xb0, hi: 0xb4},
	{value: 0x812d, lo: 0xb5, hi: 0xba},
	{value: 0x8132, lo: 0xbb, hi: 0xbc},
	{value: 0x812d, lo: 0xbd, hi: 0xbd},
	// Block 0x37, offset 0x12c
	{value: 0x0000, lo: 0x08},
	{value: 0x2d66, lo: 0x80, hi: 0x80},
	{value: 0x2d6e, lo: 0x81, hi: 0x81},
	{value: 0xa000, lo: 0x82, hi: 0x82},
	{value: 0x2d76, lo: 0x83, hi: 0x83},
	{value: 0x8104, lo: 0x84, hi: 0x84},
	{value: 0x8132, lo: 0xab, hi: 0xab},
	{value: 0x812d, lo: 0xac, hi: 0xac},
	{value: 0x8132, lo: 0xad, hi: 0xb3},
	// Block 0x38, offset 0x135
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xaa, hi: 0xab},
	// Block 0x39, offset 0x137
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xa6, hi: 0xa6},
	{value: 0x8104, lo: 0xb2, hi: 0xb3},
	// Block 0x3a, offset 0x13a
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0xb7, hi: 0xb7},
	// Block 0x3b, offset 0x13c
	{value: 0x0000, lo: 0x0a},
	{value: 0x8132, lo: 0x90, hi: 0x92},
	{value: 0x8101, lo: 0x94, hi: 0x94},
	{value: 0x812d, lo: 0x95, hi: 0x99},
	{value: 0x8132, lo: 0x9a, hi: 0x9b},
	{value: 0x812d, lo: 0x9c, hi: 0x9f},
	{value: 0x8132, lo: 0xa0, hi: 0xa0},
	{value: 0x8101, lo: 0xa2, hi: 0xa8},
	{value: 0x812d, lo: 0xad, hi: 0xad},
	{value: 0x8132, lo: 0xb4, hi: 0xb4},
	{value: 0x8132, lo: 0xb8, hi: 0xb9},
	// Block 0x3c, offset 0x147
	{value: 0x0000, lo: 0x0f},
	{value: 0x8132, lo: 0x80, hi: 0x81},
	{value: 0x812d, lo: 0x82, hi: 0x82},
	{value: 0x8132, lo: 0x83, hi: 0x89},
	{value: 0x812d, lo: 0x8a, hi: 0x8a},
	{value: 0x8132, lo: 0x8b, hi: 0x8c},
	{value: 0x8135, lo: 0x8d, hi: 0x8d},
	{value: 0x812a, lo: 0x8e, hi: 0x8e},
	{value: 0x812d, lo: 0x8f, hi: 0x8f},
	{value: 0x8129, lo: 0x90, hi: 0x90},
	{value: 0x8132, lo: 0x91, hi: 0xb5},
	{value: 0x8132, lo: 0xbb, hi: 0xbb},
	{value: 0x8134, lo: 0xbc, hi: 0xbc},
	{value: 0x812d, lo: 0xbd, hi: 0xbd},
	{value: 0x8132, lo: 0xbe, hi: 0xbe},
	{value: 0x812d, lo: 0xbf, hi: 0xbf},
	// Block 0x3d, offset 0x157
	{value: 0x0004, lo: 0x03},
	{value: 0x0433, lo: 0x80, hi: 0x81},
	{value: 0x8100, lo: 0x97, hi: 0x97},
	{value: 0x8100, lo: 0xbe, hi: 0xbe},
	// Block 0x3e, offset 0x15b
	{value: 0x0000, lo: 0x0d},
	{value: 0x8132, lo: 0x90, hi: 0x91},
	{value: 0x8101, lo: 0x92, hi: 0x93},
	{value: 0x8132, lo: 0x94, hi: 0x97},
	{value: 0x8101, lo: 0x98, hi: 0x9a},
	{value: 0x8132, lo: 0x9b, hi: 0x9c},
	{value: 0x8132, lo: 0xa1, hi: 0xa1},
	{value: 0x8101, lo: 0xa5, hi: 0xa6},
	{value: 0x8132, lo: 0xa7, hi: 0xa7},
	{value: 0x812d, lo: 0xa8, hi: 0xa8},
	{value: 0x8132, lo: 0xa9, hi: 0xa9},
	{value: 0x8101, lo: 0xaa, hi: 0xab},
	{value: 0x812d, lo: 0xac, hi: 0xaf},
	{value: 0x8132, lo: 0xb0, hi: 0xb0},
	// Block 0x3f, offset 0x169
	{value: 0x427b, lo: 0x02},
	{value: 0x01b8, lo: 0xa6, hi: 0xa6},
	{value: 0x0057, lo: 0xaa, hi: 0xab},
	// Block 0x40, offset 0x16c
	{value: 0x0007, lo: 0x05},
	{value: 0xa000, lo: 0x90, hi: 0x90},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0xa000, lo: 0x94, hi: 0x94},
	{value: 0x3bb9, lo: 0x9a, hi: 0x9b},
	{value: 0x3bc7, lo: 0xae, hi: 0xae},
	// Block 0x41, offset 0x172
	{value: 0x000e, lo: 0x05},
	{value: 0x3bce, lo: 0x8d, hi: 0x8e},
	{value: 0x3bd5, lo: 0x8f, hi: 0x8f},
	{value: 0xa000, lo: 0x90, hi: 0x90},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0xa000, lo: 0x94, hi: 0x94},
	// Block 0x42, offset 0x178
	{value: 0x6408, lo: 0x0a},
	{value: 0xa000, lo: 0x83, hi: 0x83},
	{value: 0x3be3, lo: 0x84, hi: 0x84},
	{value: 0xa000, lo: 0x88, hi: 0x88},
	{value: 0x3bea, lo: 0x89, hi: 0x89},
	{value: 0xa000, lo: 0x8b, hi: 0x8b},
	{value: 0x3bf1, lo: 0x8c, hi: 0x8c},
	{value: 0xa000, lo: 0xa3, hi: 0xa3},
	{value: 0x3bf8, lo: 0xa4, hi: 0xa5},
	{value: 0x3bff, lo: 0xa6, hi: 0xa6},
	{value: 0xa000, lo: 0xbc, hi: 0xbc},
	// Block 0x43, offset 0x183
	{value: 0x0007, lo: 0x03},
	{value: 0x3c68, lo: 0xa0, hi: 0xa1},
	{value: 0x3c92, lo: 0xa2, hi: 0xa3},
	{value: 0x3cbc, lo: 0xaa, hi: 0xad},
	// Block 0x44, offset 0x187
	{value: 0x0004, lo: 0x01},
	{value: 0x048b, lo: 0xa9, hi: 0xaa},
	// Block 0x45, offset 0x189
	{value: 0x0000, lo: 0x01},
	{value: 0x44dd, lo: 0x9c, hi: 0x9c},
	// Block 0x46, offset 0x18b
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xaf, hi: 0xb1},
	// Block 0x47, offset 0x18d
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x48, offset 0x18f
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xa0, hi: 0xbf},
	// Block 0x49, offset 0x191
	{value: 0x0000, lo: 0x05},
	{value: 0x812c, lo: 0xaa, hi: 0xaa},
	{value: 0x8131, lo: 0xab, hi: 0xab},
	{value: 0x8133, lo: 0xac, hi: 0xac},
	{value: 0x812e, lo: 0xad, hi: 0xad},
	{value: 0x812f, lo: 0xae, hi: 0xaf},
	// Block 0x4a, offset 0x197
	{value: 0x0000, lo: 0x03},
	{value: 0x4a9f, lo: 0xb3, hi: 0xb3},
	{value: 0x4a9f, lo: 0xb5, hi: 0xb6},
	{value: 0x4a9f, lo: 0xba, hi: 0xbf},
	// Block 0x4b, offset 0x19b
	{value: 0x0000, lo: 0x01},
	{value: 0x4a9f, lo: 0x8f, hi: 0xa3},
	// Block 0x4c, offset 0x19d
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0xae, hi: 0xbe},
	// Block 0x4d, offset 0x19f
	{value: 0x0000, lo: 0x07},
	{value: 0x8100, lo: 0x84, hi: 0x84},
	{value: 0x8100, lo: 0x87, hi: 0x87},
	{value: 0x8100, lo: 0x90, hi: 0x90},
	{value: 0x8100, lo: 0x9e, hi: 0x9e},
	{value: 0x8100, lo: 0xa1, hi: 0xa1},
	{value: 0x8100, lo: 0xb2, hi: 0xb2},
	{value: 0x8100, lo: 0xbb, hi: 0xbb},
	// Block 0x4e, offset 0x1a7
	{value: 0x0000, lo: 0x03},
	{value: 0x8100, lo: 0x80, hi: 0x80},
	{value: 0x8100, lo: 0x8b, hi: 0x8b},
	{value: 0x8100, lo: 0x8e, hi: 0x8e},
	// Block 0x4f, offset 0x1ab
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0xaf, hi: 0xaf},
	{value: 0x8132, lo: 0xb4, hi: 0xbd},
	// Block 0x50, offset 0x1ae
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x9e, hi: 0x9f},
	// Block 0x51, offset 0x1b0
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xb0, hi: 0xb1},
	// Block 0x52, offset 0x1b2
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x86, hi: 0x86},
	// Block 0x53, offset 0x1b4
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x84, hi: 0x84},
	{value: 0x8132, lo: 0xa0, hi: 0xb1},
	// Block 0x54, offset 0x1b7
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0xab, hi: 0xad},
	// Block 0x55, offset 0x1b9
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x93, hi: 0x93},
	// Block 0x56, offset 0x1bb
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0xb3, hi: 0xb3},
	// Block 0x57, offset 0x1bd
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x80, hi: 0x80},
	// Block 0x58, offset 0x1bf
	{value: 0x0000, lo: 0x05},
	{value: 0x8132, lo: 0xb0, hi: 0xb0},
	{value: 0x8132, lo: 0xb2, hi: 0xb3},
	{value: 0x812d, lo: 0xb4, hi: 0xb4},
	{value: 0x8132, lo: 0xb7, hi: 0xb8},
	{value: 0x8132, lo: 0xbe, hi: 0xbf},
	// Block 0x59, offset 0x1c5
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0x81, hi: 0x81},
	{value: 0x8104, lo: 0xb6, hi: 0xb6},
	// Block 0x5a, offset 0x1c8
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xad, hi: 0xad},
	// Block 0x5b, offset 0x1ca
	{value: 0x0000, lo: 0x06},
	{value: 0xe500, lo: 0x80, hi: 0x80},
	{value: 0xc600, lo: 0x81, hi: 0x9b},
	{value: 0xe500, lo: 0x9c, hi: 0x9c},
	{value: 0xc600, lo: 0x9d, hi: 0xb7},
	{value: 0xe500, lo: 0xb8, hi: 0xb8},
	{value: 0xc600, lo: 0xb9, hi: 0xbf},
	// Block 0x5c, offset 0x1d1
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x93},
	{value: 0xe500, lo: 0x94, hi: 0x94},
	{value: 0xc600, lo: 0x95, hi: 0xaf},
	{value: 0xe500, lo: 0xb0, hi: 0xb0},
	{value: 0xc600, lo: 0xb1, hi: 0xbf},
	// Block 0x5d, offset 0x1d7
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x8b},
	{value: 0xe500, lo: 0x8c, hi: 0x8c},
	{value: 0xc600, lo: 0x8d, hi: 0xa7},
	{value: 0xe500, lo: 0xa8, hi: 0xa8},
	{value: 0xc600, lo: 0xa9, hi: 0xbf},
	// Block 0x5e, offset 0x1dd
	{value: 0x0000, lo: 0x07},
	{value: 0xc600, lo: 0x80, hi: 0x83},
	{value: 0xe500, lo: 0x84, hi: 0x84},
	{value: 0xc600, lo: 0x85, hi: 0x9f},
	{value: 0xe500, lo: 0xa0, hi: 0xa0},
	{value: 0xc600, lo: 0xa1, hi: 0xbb},
	{value: 0xe500, lo: 0xbc, hi: 0xbc},
	{value: 0xc600, lo: 0xbd, hi: 0xbf},
	// Block 0x5f, offset 0x1e5
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x97},
	{value: 0xe500, lo: 0x98, hi: 0x98},
	{value: 0xc600, lo: 0x99, hi: 0xb3},
	{value: 0xe500, lo: 0xb4, hi: 0xb4},
	{value: 0xc600, lo: 0xb5, hi: 0xbf},
	// Block 0x60, offset 0x1eb
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x8f},
	{value: 0xe500, lo: 0x90, hi: 0x90},
	{value: 0xc600, lo: 0x91, hi: 0xab},
	{value: 0xe500, lo: 0xac, hi: 0xac},
	{value: 0xc600, lo: 0xad, hi: 0xbf},
	// Block 0x61, offset 0x1f1
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x87},
	{value: 0xe500, lo: 0x88, hi: 0x88},
	{value: 0xc600, lo: 0x89, hi: 0xa3},
	{value: 0xe500, lo: 0xa4, hi: 0xa4},
	{value: 0xc600, lo: 0xa5, hi: 0xbf},
	// Block 0x62, offset 0x1f7
	{value: 0x0000, lo: 0x03},
	{value: 0xc600, lo: 0x80, hi: 0x87},
	{value: 0xe500, lo: 0x88, hi: 0x88},
	{value: 0xc600, lo: 0x89, hi: 0xa3},
	// Block 0x63, offset 0x1fb
	{value: 0x0006, lo: 0x0d},
	{value: 0x4390, lo: 0x9d, hi: 0x9d},
	{value: 0x8115, lo: 0x9e, hi: 0x9e},
	{value: 0x4402, lo: 0x9f, hi: 0x9f},
	{value: 0x43f0, lo: 0xaa, hi: 0xab},
	{value: 0x44f4, lo: 0xac, hi: 0xac},
	{value: 0x44fc, lo: 0xad, hi: 0xad},
	{value: 0x4348, lo: 0xae, hi: 0xb1},
	{value: 0x4366, lo: 0xb2, hi: 0xb4},
	{value: 0x437e, lo: 0xb5, hi: 0xb6},
	{value: 0x438a, lo: 0xb8, hi: 0xb8},
	{value: 0x4396, lo: 0xb9, hi: 0xbb},
	{value: 0x43ae, lo: 0xbc, hi: 0xbc},
	{value: 0x43b4, lo: 0xbe, hi: 0xbe},
	// Block 0x64, offset 0x209
	{value: 0x0006, lo: 0x08},
	{value: 0x43ba, lo: 0x80, hi: 0x81},
	{value: 0x43c6, lo: 0x83, hi: 0x84},
	{value: 0x43d8, lo: 0x86, hi: 0x89},
	{value: 0x43fc, lo: 0x8a, hi: 0x8a},
	{value: 0x4378, lo: 0x8b, hi: 0x8b},
	{value: 0x4360, lo: 0x8c, hi: 0x8c},
	{value: 0x43a8, lo: 0x8d, hi: 0x8d},
	{value: 0x43d2, lo: 0x8e, hi: 0x8e},
	// Block 0x65, offset 0x212
	{value: 0x0000, lo: 0x02},
	{value: 0x8100, lo: 0xa4, hi: 0xa5},
	{value: 0x8100, lo: 0xb0, hi: 0xb1},
	// Block 0x66, offset 0x215
	{value: 0x0000, lo: 0x02},
	{value: 0x8100, lo: 0x9b, hi: 0x9d},
	{value: 0x8200, lo: 0x9e, hi: 0xa3},
	// Block 0x67, offset 0x218
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0x90, hi: 0x90},
	// Block 0x68, offset 0x21a
	{value: 0x0000, lo: 0x02},
	{value: 0x8100, lo: 0x99, hi: 0x99},
	{value: 0x8200, lo: 0xb2, hi: 0xb4},
	// Block 0x69, offset 0x21d
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0xbc, hi: 0xbd},
	// Block 0x6a, offset 0x21f
	{value: 0x0000, lo: 0x03},
	{value: 0x8132, lo: 0xa0, hi: 0xa6},
	{value: 0x812d, lo: 0xa7, hi: 0xad},
	{value: 0x8132, lo: 0xae, hi: 0xaf},
	// Block 0x6b, offset 0x223
	{value: 0x0000, lo: 0x04},
	{value: 0x8100, lo: 0x89, hi: 0x8c},
	{value: 0x8100, lo: 0xb0, hi: 0xb2},
	{value: 0x8100, lo: 0xb4, hi: 0xb4},
	{value: 0x8100, lo: 0xb6, hi: 0xbf},
	// Block 0x6c, offset 0x228
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0x81, hi: 0x8c},
	// Block 0x6d, offset 0x22a
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0xb5, hi: 0xba},
	// Block 0x6e, offset 0x22c
	{value: 0x0000, lo: 0x04},
	{value: 0x4a9f, lo: 0x9e, hi: 0x9f},
	{value: 0x4a9f, lo: 0xa3, hi: 0xa3},
	{value: 0x4a9f, lo: 0xa5, hi: 0xa6},
	{value: 0x4a9f, lo: 0xaa, hi: 0xaf},
	// Block 0x6f, offset 0x231
	{value: 0x0000, lo: 0x05},
	{value: 0x4a9f, lo: 0x82, hi: 0x87},
	{value: 0x4a9f, lo: 0x8a, hi: 0x8f},
	{value: 0x4a9f, lo: 0x92, hi: 0x97},
	{value: 0x4a9f, lo: 0x9a, hi: 0x9c},
	{value: 0x8100, lo: 0xa3, hi: 0xa3},
	// Block 0x70, offset 0x237
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0xbd, hi: 0xbd},
	// Block 0x71, offset 0x239
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0xa0, hi: 0xa0},
	// Block 0x72, offset 0x23b
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xb6, hi: 0xba},
	// Block 0x73, offset 0x23d
	{value: 0x002c, lo: 0x05},
	{value: 0x812d, lo: 0x8d, hi: 0x8d},
	{value: 0x8132, lo: 0x8f, hi: 0x8f},
	{value: 0x8132, lo: 0xb8, hi: 0xb8},
	{value: 0x8101, lo: 0xb9, hi: 0xba},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x74, offset 0x243
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0xa5, hi: 0xa5},
	{value: 0x812d, lo: 0xa6, hi: 0xa6},
	// Block 0x75, offset 0x246
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x86, hi: 0x86},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x76, offset 0x249
	{value: 0x17fe, lo: 0x07},
	{value: 0xa000, lo: 0x99, hi: 0x99},
	{value: 0x4238, lo: 0x9a, hi: 0x9a},
	{value: 0xa000, lo: 0x9b, hi: 0x9b},
	{value: 0x4242, lo: 0x9c, hi: 0x9c},
	{value: 0xa000, lo: 0xa5, hi: 0xa5},
	{value: 0x424c, lo: 0xab, hi: 0xab},
	{value: 0x8104, lo: 0xb9, hi: 0xba},
	// Block 0x77, offset 0x251
	{value: 0x0000, lo: 0x06},
	{value: 0x8132, lo: 0x80, hi: 0x82},
	{value: 0x9900, lo: 0xa7, hi: 0xa7},
	{value: 0x2d7e, lo: 0xae, hi: 0xae},
	{value: 0x2d88, lo: 0xaf, hi: 0xaf},
	{value: 0xa000, lo: 0xb1, hi: 0xb2},
	{value: 0x8104, lo: 0xb3, hi: 0xb4},
	// Block 0x78, offset 0x258
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x80, hi: 0x80},
	{value: 0x8102, lo: 0x8a, hi: 0x8a},
	// Block 0x79, offset 0x25b
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0xb5, hi: 0xb5},
	{value: 0x8102, lo: 0xb6, hi: 0xb6},
	// Block 0x7a, offset 0x25e
	{value: 0x0002, lo: 0x01},
	{value: 0x8102, lo: 0xa9, hi: 0xaa},
	// Block 0x7b, offset 0x260
	{value: 0x0000, lo: 0x07},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2d92, lo: 0x8b, hi: 0x8b},
	{value: 0x2d9c, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	{value: 0x8132, lo: 0xa6, hi: 0xac},
	{value: 0x8132, lo: 0xb0, hi: 0xb4},
	// Block 0x7c, offset 0x268
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x82, hi: 0x82},
	{value: 0x8102, lo: 0x86, hi: 0x86},
	// Block 0x7d, offset 0x26b
	{value: 0x6b5a, lo: 0x06},
	{value: 0x9900, lo: 0xb0, hi: 0xb0},
	{value: 0xa000, lo: 0xb9, hi: 0xb9},
	{value: 0x9900, lo: 0xba, hi: 0xba},
	{value: 0x2db0, lo: 0xbb, hi: 0xbb},
	{value: 0x2da6, lo: 0xbc, hi: 0xbd},
	{value: 0x2dba, lo: 0xbe, hi: 0xbe},
	// Block 0x7e, offset 0x272
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x82, hi: 0x82},
	{value: 0x8102, lo: 0x83, hi: 0x83},
	// Block 0x7f, offset 0x275
	{value: 0x0000, lo: 0x05},
	{value: 0x9900, lo: 0xaf, hi: 0xaf},
	{value: 0xa000, lo: 0xb8, hi: 0xb9},
	{value: 0x2dc4, lo: 0xba, hi: 0xba},
	{value: 0x2dce, lo: 0xbb, hi: 0xbb},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x80, offset 0x27b
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0x80, hi: 0x80},
	// Block 0x81, offset 0x27d
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0xb6, hi: 0xb6},
	{value: 0x8102, lo: 0xb7, hi: 0xb7},
	// Block 0x82, offset 0x280
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xab, hi: 0xab},
	// Block 0x83, offset 0x282
	{value: 0x0000, lo: 0x01},
	{value: 0x8101, lo: 0xb0, hi: 0xb4},
	// Block 0x84, offset 0x284
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xb0, hi: 0xb6},
	// Block 0x85, offset 0x286
	{value: 0x0000, lo: 0x01},
	{value: 0x8101, lo: 0x9e, hi: 0x9e},
	// Block 0x86, offset 0x288
	{value: 0x0000, lo: 0x0c},
	{value: 0x45cc, lo: 0x9e, hi: 0x9e},
	{value: 0x45d6, lo: 0x9f, hi: 0x9f},
	{value: 0x460a, lo: 0xa0, hi: 0xa0},
	{value: 0x4618, lo: 0xa1, hi: 0xa1},
	{value: 0x4626, lo: 0xa2, hi: 0xa2},
	{value: 0x4634, lo: 0xa3, hi: 0xa3},
	{value: 0x4642, lo: 0xa4, hi: 0xa4},
	{value: 0x812b, lo: 0xa5, hi: 0xa6},
	{value: 0x8101, lo: 0xa7, hi: 0xa9},
	{value: 0x8130, lo: 0xad, hi: 0xad},
	{value: 0x812b, lo: 0xae, hi: 0xb2},
	{value: 0x812d, lo: 0xbb, hi: 0xbf},
	// Block 0x87, offset 0x295
	{value: 0x0000, lo: 0x09},
	{value: 0x812d, lo: 0x80, hi: 0x82},
	{value: 0x8132, lo: 0x85, hi: 0x89},
	{value: 0x812d, lo: 0x8a, hi: 0x8b},
	{value: 0x8132, lo: 0xaa, hi: 0xad},
	{value: 0x45e0, lo: 0xbb, hi: 0xbb},
	{value: 0x45ea, lo: 0xbc, hi: 0xbc},
	{value: 0x4650, lo: 0xbd, hi: 0xbd},
	{value: 0x466c, lo: 0xbe, hi: 0xbe},
	{value: 0x465e, lo: 0xbf, hi: 0xbf},
	// Block 0x88, offset 0x29f
	{value: 0x0000, lo: 0x01},
	{value: 0x467a, lo: 0x80, hi: 0x80},
	// Block 0x89, offset 0x2a1
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x82, hi: 0x84},
	// Block 0x8a, offset 0x2a3
	{value: 0x0000, lo: 0x05},
	{value: 0x8132, lo: 0x80, hi: 0x86},
	{value: 0x8132, lo: 0x88, hi: 0x98},
	{value: 0x8132, lo: 0x9b, hi: 0xa1},
	{value: 0x8132, lo: 0xa3, hi: 0xa4},
	{value: 0x8132, lo: 0xa6, hi: 0xaa},
	// Block 0x8b, offset 0x2a9
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x90, hi: 0x96},
	// Block 0x8c, offset 0x2ab
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0x84, hi: 0x89},
	{value: 0x8102, lo: 0x8a, hi: 0x8a},
	// Block 0x8d, offset 0x2ae
	{value: 0x0000, lo: 0x01},
	{value: 0x8100, lo: 0x93, hi: 0x93},
}

// lookup returns the trie value for the first UTF-8 encoding in s and
// the width in bytes of this encoding. The size will be 0 if s does not
// hold enough bytes to complete the encoding. len(s) must be greater than 0.
func (t *nfkcTrie) lookup(s []byte) (v uint16, sz int) {
	c0 := s[0]
	switch {
	case c0 < 0x80: // is ASCII
		return nfkcValues[c0], 1
	case c0 < 0xC2:
		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
	case c0 < 0xE0: // 2-byte UTF-8
		if len(s) < 2 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c1), 2
	case c0 < 0xF0: // 3-byte UTF-8
		if len(s) < 3 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfkcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c2), 3
	case c0 < 0xF8: // 4-byte UTF-8
		if len(s) < 4 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfkcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		o = uint32(i)<<6 + uint32(c2)
		i = nfkcIndex[o]
		c3 := s[3]
		if c3 < 0x80 || 0xC0 <= c3 {
			return 0, 3 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c3), 4
	}
	// Illegal rune
	return 0, 1
}

// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.
// s must start with a full and valid UTF-8 encoded rune.
func (t *nfkcTrie) lookupUnsafe(s []byte) uint16 {
	c0 := s[0]
	if c0 < 0x80 { // is ASCII
		return nfkcValues[c0]
	}
	i := nfkcIndex[c0]
	if c0 < 0xE0 { // 2-byte UTF-8
		return t.lookupValue(uint32(i), s[1])
	}
	i = nfkcIndex[uint32(i)<<6+uint32(s[1])]
	if c0 < 0xF0 { // 3-byte UTF-8
		return t.lookupValue(uint32(i), s[2])
	}
	i = nfkcIndex[uint32(i)<<6+uint32(s[2])]
	if c0 < 0xF8 { // 4-byte UTF-8
		return t.lookupValue(uint32(i), s[3])
	}
	return 0
}

// lookupString returns the trie value for the first UTF-8 encoding in s and
// the width in bytes of this encoding. The size will be 0 if s does not
// hold enough bytes to complete the encoding. len(s) must be greater than 0.
func (t *nfkcTrie) lookupString(s string) (v uint16, sz int) {
	c0 := s[0]
	switch {
	case c0 < 0x80: // is ASCII
		return nfkcValues[c0], 1
	case c0 < 0xC2:
		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
	case c0 < 0xE0: // 2-byte UTF-8
		if len(s) < 2 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c1), 2
	case c0 < 0xF0: // 3-byte UTF-8
		if len(s) < 3 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfkcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c2), 3
	case c0 < 0xF8: // 4-byte UTF-8
		if len(s) < 4 {
			return 0, 0
		}
		i := nfkcIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = nfkcIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		o = uint32(i)<<6 + uint32(c2)
		i = nfkcIndex[o]
		c3 := s[3]
		if c3 < 0x80 || 0xC0 <= c3 {
			return 0, 3 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c3), 4
	}
	// Illegal rune
	return 0, 1
}

// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.
// s must start with a full and valid UTF-8 encoded rune.
func (t *nfkcTrie) lookupStringUnsafe(s string) uint16 {
	c0 := s[0]
	if c0 < 0x80 { // is ASCII
		return nfkcValues[c0]
	}
	i := nfkcIndex[c0]
	if c0 < 0xE0 { // 2-byte UTF-8
		return t.lookupValue(uint32(i), s[1])
	}
	i = nfkcIndex[uint32(i)<<6+uint32(s[1])]
	if c0 < 0xF0 { // 3-byte UTF-8
		return t.lookupValue(uint32(i), s[2])
	}
	i = nfkcIndex[uint32(i)<<6+uint32(s[2])]
	if c0 < 0xF8 { // 4-byte UTF-8
		return t.lookupValue(uint32(i), s[3])
	}
	return 0
}

// nfkcTrie. Total size: 16994 bytes (16.60 KiB). Checksum: c3ed54ee046f3c46.
type nfkcTrie struct{}

func newNfkcTrie(i int) *nfkcTrie {
	return &nfkcTrie{}
}

// lookupValue determines the type of block n and looks up the value for b.
func (t *nfkcTrie) lookupValue(n uint32, b byte) uint16 {
	switch {
	case n < 90:
		return uint16(nfkcValues[n<<6+uint32(b)])
	default:
		n -= 90
		return uint16(nfkcSparse.lookup(n, b))
	}
}

// nfkcValues: 92 blocks, 5888 entries, 11776 bytes
// The third block is the zero block.
var nfkcValues = [5888]uint16{
	// Block 0x0, offset 0x0
	0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000,
	// Block 0x1, offset 0x40
	0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000,
	0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000,
	0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000,
	0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000,
	0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000,
	0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000,
	0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000,
	0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000,
	0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000,
	0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000,
	// Block 0x2, offset 0x80
	// Block 0x3, offset 0xc0
	0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c,
	0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb,
	0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104,
	0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd,
	0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235,
	0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285,
	0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3,
	0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750,
	0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f,
	0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3,
	0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569,
	// Block 0x4, offset 0x100
	0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8,
	0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6,
	0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5,
	0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302,
	0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339,
	0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352,
	0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e,
	0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6,
	0x130: 0x308c, 0x132: 0x195d, 0x133: 0x19e7, 0x134: 0x30b4, 0x135: 0x33c0,
	0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc,
	0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8, 0x13f: 0x1bac,
	// Block 0x5, offset 0x140
	0x140: 0x1c34, 0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118,
	0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f, 0x149: 0x1c5c,
	0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c,
	0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483,
	0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d,
	0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba,
	0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796,
	0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2,
	0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528,
	0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267,
	0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0x00a7,
	// Block 0x6, offset 0x180
	0x184: 0x2dee, 0x185: 0x2df4,
	0x186: 0x2dfa, 0x187: 0x1972, 0x188: 0x1975, 0x189: 0x1a08, 0x18a: 0x1987, 0x18b: 0x198a,
	0x18c: 0x1a3e, 0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140,
	0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8,
	0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50,
	0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5,
	0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf,
	0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd,
	0x1b0: 0x33c5, 0x1b1: 0x1942, 0x1b2: 0x1945, 0x1b3: 0x19cf, 0x1b4: 0x3028, 0x1b5: 0x3334,
	0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46,
	0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb,
	// Block 0x7, offset 0x1c0
	0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316,
	0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac,
	0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479,
	0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6,
	0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5,
	0x1de: 0x305a, 0x1df: 0x3366,
	0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b,
	0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769,
	0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f,
	// Block 0x8, offset 0x200
	0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132,
	0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932,
	0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932,
	0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d,
	0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d,
	0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d,
	0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d,
	0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d,
	0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101,
	0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d,
	0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132,
	// Block 0x9, offset 0x240
	0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936,
	0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132,
	0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132,
	0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132,
	0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135,
	0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132,
	0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132,
	0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132,
	0x274: 0x0170,
	0x27a: 0x42a5,
	0x27e: 0x0037,
	// Block 0xa, offset 0x280
	0x284: 0x425a, 0x285: 0x447b,
	0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625,
	0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000,
	0x295: 0xa000, 0x297: 0xa000,
	0x299: 0xa000,
	0x29f: 0xa000, 0x2a1: 0xa000,
	0x2a5: 0xa000, 0x2a9: 0xa000,
	0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9,
	0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000,
	0x2b7: 0xa000, 0x2b9: 0xa000,
	0x2bf: 0xa000,
	// Block 0xb, offset 0x2c0
	0x2c1: 0xa000, 0x2c5: 0xa000,
	0x2c9: 0xa000, 0x2ca: 0x4840, 0x2cb: 0x485e,
	0x2cc: 0x36c7, 0x2cd: 0x36df, 0x2ce: 0x4876, 0x2d0: 0x01be, 0x2d1: 0x01d0,
	0x2d2: 0x01ac, 0x2d3: 0x430c, 0x2d4: 0x4312, 0x2d5: 0x01fa, 0x2d6: 0x01e8,
	0x2f0: 0x01d6, 0x2f1: 0x01eb, 0x2f2: 0x01ee, 0x2f4: 0x0188, 0x2f5: 0x01c7,
	0x2f9: 0x01a6,
	// Block 0xc, offset 0x300
	0x300: 0x3721, 0x301: 0x372d, 0x303: 0x371b,
	0x306: 0xa000, 0x307: 0x3709,
	0x30c: 0x375d, 0x30d: 0x3745, 0x30e: 0x376f, 0x310: 0xa000,
	0x313: 0xa000, 0x315: 0xa000, 0x316: 0xa000, 0x317: 0xa000,
	0x318: 0xa000, 0x319: 0x3751, 0x31a: 0xa000,
	0x31e: 0xa000, 0x323: 0xa000,
	0x327: 0xa000,
	0x32b: 0xa000, 0x32d: 0xa000,
	0x330: 0xa000, 0x333: 0xa000, 0x335: 0xa000,
	0x336: 0xa000, 0x337: 0xa000, 0x338: 0xa000, 0x339: 0x37d5, 0x33a: 0xa000,
	0x33e: 0xa000,
	// Block 0xd, offset 0x340
	0x341: 0x3733, 0x342: 0x37b7,
	0x350: 0x370f, 0x351: 0x3793,
	0x352: 0x3715, 0x353: 0x3799, 0x356: 0x3727, 0x357: 0x37ab,
	0x358: 0xa000, 0x359: 0xa000, 0x35a: 0x3829, 0x35b: 0x382f, 0x35c: 0x3739, 0x35d: 0x37bd,
	0x35e: 0x373f, 0x35f: 0x37c3, 0x362: 0x374b, 0x363: 0x37cf,
	0x364: 0x3757, 0x365: 0x37db, 0x366: 0x3763, 0x367: 0x37e7, 0x368: 0xa000, 0x369: 0xa000,
	0x36a: 0x3835, 0x36b: 0x383b, 0x36c: 0x378d, 0x36d: 0x3811, 0x36e: 0x3769, 0x36f: 0x37ed,
	0x370: 0x3775, 0x371: 0x37f9, 0x372: 0x377b, 0x373: 0x37ff, 0x374: 0x3781, 0x375: 0x3805,
	0x378: 0x3787, 0x379: 0x380b,
	// Block 0xe, offset 0x380
	0x387: 0x1d61,
	0x391: 0x812d,
	0x392: 0x8132, 0x393: 0x8132, 0x394: 0x8132, 0x395: 0x8132, 0x396: 0x812d, 0x397: 0x8132,
	0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x812e, 0x39b: 0x812d, 0x39c: 0x8132, 0x39d: 0x8132,
	0x39e: 0x8132, 0x39f: 0x8132, 0x3a0: 0x8132, 0x3a1: 0x8132, 0x3a2: 0x812d, 0x3a3: 0x812d,
	0x3a4: 0x812d, 0x3a5: 0x812d, 0x3a6: 0x812d, 0x3a7: 0x812d, 0x3a8: 0x8132, 0x3a9: 0x8132,
	0x3aa: 0x812d, 0x3ab: 0x8132, 0x3ac: 0x8132, 0x3ad: 0x812e, 0x3ae: 0x8131, 0x3af: 0x8132,
	0x3b0: 0x8105, 0x3b1: 0x8106, 0x3b2: 0x8107, 0x3b3: 0x8108, 0x3b4: 0x8109, 0x3b5: 0x810a,
	0x3b6: 0x810b, 0x3b7: 0x810c, 0x3b8: 0x810d, 0x3b9: 0x810e, 0x3ba: 0x810e, 0x3bb: 0x810f,
	0x3bc: 0x8110, 0x3bd: 0x8111, 0x3bf: 0x8112,
	// Block 0xf, offset 0x3c0
	0x3c8: 0xa000, 0x3ca: 0xa000, 0x3cb: 0x8116,
	0x3cc: 0x8117, 0x3cd: 0x8118, 0x3ce: 0x8119, 0x3cf: 0x811a, 0x3d0: 0x811b, 0x3d1: 0x811c,
	0x3d2: 0x811d, 0x3d3: 0x9932, 0x3d4: 0x9932, 0x3d5: 0x992d, 0x3d6: 0x812d, 0x3d7: 0x8132,
	0x3d8: 0x8132, 0x3d9: 0x8132, 0x3da: 0x8132, 0x3db: 0x8132, 0x3dc: 0x812d, 0x3dd: 0x8132,
	0x3de: 0x8132, 0x3df: 0x812d,
	0x3f0: 0x811e, 0x3f5: 0x1d84,
	0x3f6: 0x2013, 0x3f7: 0x204f, 0x3f8: 0x204a,
	// Block 0x10, offset 0x400
	0x405: 0xa000,
	0x406: 0x2d26, 0x407: 0xa000, 0x408: 0x2d2e, 0x409: 0xa000, 0x40a: 0x2d36, 0x40b: 0xa000,
	0x40c: 0x2d3e, 0x40d: 0xa000, 0x40e: 0x2d46, 0x411: 0xa000,
	0x412: 0x2d4e,
	0x434: 0x8102, 0x435: 0x9900,
	0x43a: 0xa000, 0x43b: 0x2d56,
	0x43c: 0xa000, 0x43d: 0x2d5e, 0x43e: 0xa000, 0x43f: 0xa000,
	// Block 0x11, offset 0x440
	0x440: 0x0069, 0x441: 0x006b, 0x442: 0x006f, 0x443: 0x0083, 0x444: 0x00f5, 0x445: 0x00f8,
	0x446: 0x0413, 0x447: 0x0085, 0x448: 0x0089, 0x449: 0x008b, 0x44a: 0x0104, 0x44b: 0x0107,
	0x44c: 0x010a, 0x44d: 0x008f, 0x44f: 0x0097, 0x450: 0x009b, 0x451: 0x00e0,
	0x452: 0x009f, 0x453: 0x00fe, 0x454: 0x0417, 0x455: 0x041b, 0x456: 0x00a1, 0x457: 0x00a9,
	0x458: 0x00ab, 0x459: 0x0423, 0x45a: 0x012b, 0x45b: 0x00ad, 0x45c: 0x0427, 0x45d: 0x01be,
	0x45e: 0x01c1, 0x45f: 0x01c4, 0x460: 0x01fa, 0x461: 0x01fd, 0x462: 0x0093, 0x463: 0x00a5,
	0x464: 0x00ab, 0x465: 0x00ad, 0x466: 0x01be, 0x467: 0x01c1, 0x468: 0x01eb, 0x469: 0x01fa,
	0x46a: 0x01fd,
	0x478: 0x020c,
	// Block 0x12, offset 0x480
	0x49b: 0x00fb, 0x49c: 0x0087, 0x49d: 0x0101,
	0x49e: 0x00d4, 0x49f: 0x010a, 0x4a0: 0x008d, 0x4a1: 0x010d, 0x4a2: 0x0110, 0x4a3: 0x0116,
	0x4a4: 0x011c, 0x4a5: 0x011f, 0x4a6: 0x0122, 0x4a7: 0x042b, 0x4a8: 0x016a, 0x4a9: 0x0128,
	0x4aa: 0x042f, 0x4ab: 0x016d, 0x4ac: 0x0131, 0x4ad: 0x012e, 0x4ae: 0x0134, 0x4af: 0x0137,
	0x4b0: 0x013a, 0x4b1: 0x013d, 0x4b2: 0x0140, 0x4b3: 0x014c, 0x4b4: 0x014f, 0x4b5: 0x00ec,
	0x4b6: 0x0152, 0x4b7: 0x0155, 0x4b8: 0x041f, 0x4b9: 0x0158, 0x4ba: 0x015b, 0x4bb: 0x00b5,
	0x4bc: 0x015e, 0x4bd: 0x0161, 0x4be: 0x0164, 0x4bf: 0x01d0,
	// Block 0x13, offset 0x4c0
	0x4c0: 0x2f97, 0x4c1: 0x32a3, 0x4c2: 0x2fa1, 0x4c3: 0x32ad, 0x4c4: 0x2fa6, 0x4c5: 0x32b2,
	0x4c6: 0x2fab, 0x4c7: 0x32b7, 0x4c8: 0x38cc, 0x4c9: 0x3a5b, 0x4ca: 0x2fc4, 0x4cb: 0x32d0,
	0x4cc: 0x2fce, 0x4cd: 0x32da, 0x4ce: 0x2fdd, 0x4cf: 0x32e9, 0x4d0: 0x2fd3, 0x4d1: 0x32df,
	0x4d2: 0x2fd8, 0x4d3: 0x32e4, 0x4d4: 0x38ef, 0x4d5: 0x3a7e, 0x4d6: 0x38f6, 0x4d7: 0x3a85,
	0x4d8: 0x3019, 0x4d9: 0x3325, 0x4da: 0x301e, 0x4db: 0x332a, 0x4dc: 0x3904, 0x4dd: 0x3a93,
	0x4de: 0x3023, 0x4df: 0x332f, 0x4e0: 0x3032, 0x4e1: 0x333e, 0x4e2: 0x3050, 0x4e3: 0x335c,
	0x4e4: 0x305f, 0x4e5: 0x336b, 0x4e6: 0x3055, 0x4e7: 0x3361, 0x4e8: 0x3064, 0x4e9: 0x3370,
	0x4ea: 0x3069, 0x4eb: 0x3375, 0x4ec: 0x30af, 0x4ed: 0x33bb, 0x4ee: 0x390b, 0x4ef: 0x3a9a,
	0x4f0: 0x30b9, 0x4f1: 0x33ca, 0x4f2: 0x30c3, 0x4f3: 0x33d4, 0x4f4: 0x30cd, 0x4f5: 0x33de,
	0x4f6: 0x46c4, 0x4f7: 0x4755, 0x4f8: 0x3912, 0x4f9: 0x3aa1, 0x4fa: 0x30e6, 0x4fb: 0x33f7,
	0x4fc: 0x30e1, 0x4fd: 0x33f2, 0x4fe: 0x30eb, 0x4ff: 0x33fc,
	// Block 0x14, offset 0x500
	0x500: 0x30f0, 0x501: 0x3401, 0x502: 0x30f5, 0x503: 0x3406, 0x504: 0x3109, 0x505: 0x341a,
	0x506: 0x3113, 0x507: 0x3424, 0x508: 0x3122, 0x509: 0x3433, 0x50a: 0x311d, 0x50b: 0x342e,
	0x50c: 0x3935, 0x50d: 0x3ac4, 0x50e: 0x3943, 0x50f: 0x3ad2, 0x510: 0x394a, 0x511: 0x3ad9,
	0x512: 0x3951, 0x513: 0x3ae0, 0x514: 0x314f, 0x515: 0x3460, 0x516: 0x3154, 0x517: 0x3465,
	0x518: 0x315e, 0x519: 0x346f, 0x51a: 0x46f1, 0x51b: 0x4782, 0x51c: 0x3997, 0x51d: 0x3b26,
	0x51e: 0x3177, 0x51f: 0x3488, 0x520: 0x3181, 0x521: 0x3492, 0x522: 0x4700, 0x523: 0x4791,
	0x524: 0x399e, 0x525: 0x3b2d, 0x526: 0x39a5, 0x527: 0x3b34, 0x528: 0x39ac, 0x529: 0x3b3b,
	0x52a: 0x3190, 0x52b: 0x34a1, 0x52c: 0x319a, 0x52d: 0x34b0, 0x52e: 0x31ae, 0x52f: 0x34c4,
	0x530: 0x31a9, 0x531: 0x34bf, 0x532: 0x31ea, 0x533: 0x3500, 0x534: 0x31f9, 0x535: 0x350f,
	0x536: 0x31f4, 0x537: 0x350a, 0x538: 0x39b3, 0x539: 0x3b42, 0x53a: 0x39ba, 0x53b: 0x3b49,
	0x53c: 0x31fe, 0x53d: 0x3514, 0x53e: 0x3203, 0x53f: 0x3519,
	// Block 0x15, offset 0x540
	0x540: 0x3208, 0x541: 0x351e, 0x542: 0x320d, 0x543: 0x3523, 0x544: 0x321c, 0x545: 0x3532,
	0x546: 0x3217, 0x547: 0x352d, 0x548: 0x3221, 0x549: 0x353c, 0x54a: 0x3226, 0x54b: 0x3541,
	0x54c: 0x322b, 0x54d: 0x3546, 0x54e: 0x3249, 0x54f: 0x3564, 0x550: 0x3262, 0x551: 0x3582,
	0x552: 0x3271, 0x553: 0x3591, 0x554: 0x3276, 0x555: 0x3596, 0x556: 0x337a, 0x557: 0x34a6,
	0x558: 0x3537, 0x559: 0x3573, 0x55a: 0x1be0, 0x55b: 0x42d7,
	0x560: 0x46a1, 0x561: 0x4732, 0x562: 0x2f83, 0x563: 0x328f,
	0x564: 0x3878, 0x565: 0x3a07, 0x566: 0x3871, 0x567: 0x3a00, 0x568: 0x3886, 0x569: 0x3a15,
	0x56a: 0x387f, 0x56b: 0x3a0e, 0x56c: 0x38be, 0x56d: 0x3a4d, 0x56e: 0x3894, 0x56f: 0x3a23,
	0x570: 0x388d, 0x571: 0x3a1c, 0x572: 0x38a2, 0x573: 0x3a31, 0x574: 0x389b, 0x575: 0x3a2a,
	0x576: 0x38c5, 0x577: 0x3a54, 0x578: 0x46b5, 0x579: 0x4746, 0x57a: 0x3000, 0x57b: 0x330c,
	0x57c: 0x2fec, 0x57d: 0x32f8, 0x57e: 0x38da, 0x57f: 0x3a69,
	// Block 0x16, offset 0x580
	0x580: 0x38d3, 0x581: 0x3a62, 0x582: 0x38e8, 0x583: 0x3a77, 0x584: 0x38e1, 0x585: 0x3a70,
	0x586: 0x38fd, 0x587: 0x3a8c, 0x588: 0x3091, 0x589: 0x339d, 0x58a: 0x30a5, 0x58b: 0x33b1,
	0x58c: 0x46e7, 0x58d: 0x4778, 0x58e: 0x3136, 0x58f: 0x3447, 0x590: 0x3920, 0x591: 0x3aaf,
	0x592: 0x3919, 0x593: 0x3aa8, 0x594: 0x392e, 0x595: 0x3abd, 0x596: 0x3927, 0x597: 0x3ab6,
	0x598: 0x3989, 0x599: 0x3b18, 0x59a: 0x396d, 0x59b: 0x3afc, 0x59c: 0x3966, 0x59d: 0x3af5,
	0x59e: 0x397b, 0x59f: 0x3b0a, 0x5a0: 0x3974, 0x5a1: 0x3b03, 0x5a2: 0x3982, 0x5a3: 0x3b11,
	0x5a4: 0x31e5, 0x5a5: 0x34fb, 0x5a6: 0x31c7, 0x5a7: 0x34dd, 0x5a8: 0x39e4, 0x5a9: 0x3b73,
	0x5aa: 0x39dd, 0x5ab: 0x3b6c, 0x5ac: 0x39f2, 0x5ad: 0x3b81, 0x5ae: 0x39eb, 0x5af: 0x3b7a,
	0x5b0: 0x39f9, 0x5b1: 0x3b88, 0x5b2: 0x3230, 0x5b3: 0x354b, 0x5b4: 0x3258, 0x5b5: 0x3578,
	0x5b6: 0x3253, 0x5b7: 0x356e, 0x5b8: 0x323f, 0x5b9: 0x355a,
	// Block 0x17, offset 0x5c0
	0x5c0: 0x4804, 0x5c1: 0x480a, 0x5c2: 0x491e, 0x5c3: 0x4936, 0x5c4: 0x4926, 0x5c5: 0x493e,
	0x5c6: 0x492e, 0x5c7: 0x4946, 0x5c8: 0x47aa, 0x5c9: 0x47b0, 0x5ca: 0x488e, 0x5cb: 0x48a6,
	0x5cc: 0x4896, 0x5cd: 0x48ae, 0x5ce: 0x489e, 0x5cf: 0x48b6, 0x5d0: 0x4816, 0x5d1: 0x481c,
	0x5d2: 0x3db8, 0x5d3: 0x3dc8, 0x5d4: 0x3dc0, 0x5d5: 0x3dd0,
	0x5d8: 0x47b6, 0x5d9: 0x47bc, 0x5da: 0x3ce8, 0x5db: 0x3cf8, 0x5dc: 0x3cf0, 0x5dd: 0x3d00,
	0x5e0: 0x482e, 0x5e1: 0x4834, 0x5e2: 0x494e, 0x5e3: 0x4966,
	0x5e4: 0x4956, 0x5e5: 0x496e, 0x5e6: 0x495e, 0x5e7: 0x4976, 0x5e8: 0x47c2, 0x5e9: 0x47c8,
	0x5ea: 0x48be, 0x5eb: 0x48d6, 0x5ec: 0x48c6, 0x5ed: 0x48de, 0x5ee: 0x48ce, 0x5ef: 0x48e6,
	0x5f0: 0x4846, 0x5f1: 0x484c, 0x5f2: 0x3e18, 0x5f3: 0x3e30, 0x5f4: 0x3e20, 0x5f5: 0x3e38,
	0x5f6: 0x3e28, 0x5f7: 0x3e40, 0x5f8: 0x47ce, 0x5f9: 0x47d4, 0x5fa: 0x3d18, 0x5fb: 0x3d30,
	0x5fc: 0x3d20, 0x5fd: 0x3d38, 0x5fe: 0x3d28, 0x5ff: 0x3d40,
	// Block 0x18, offset 0x600
	0x600: 0x4852, 0x601: 0x4858, 0x602: 0x3e48, 0x603: 0x3e58, 0x604: 0x3e50, 0x605: 0x3e60,
	0x608: 0x47da, 0x609: 0x47e0, 0x60a: 0x3d48, 0x60b: 0x3d58,
	0x60c: 0x3d50, 0x60d: 0x3d60, 0x610: 0x4864, 0x611: 0x486a,
	0x612: 0x3e80, 0x613: 0x3e98, 0x614: 0x3e88, 0x615: 0x3ea0, 0x616: 0x3e90, 0x617: 0x3ea8,
	0x619: 0x47e6, 0x61b: 0x3d68, 0x61d: 0x3d70,
	0x61f: 0x3d78, 0x620: 0x487c, 0x621: 0x4882, 0x622: 0x497e, 0x623: 0x4996,
	0x624: 0x4986, 0x625: 0x499e, 0x626: 0x498e, 0x627: 0x49a6, 0x628: 0x47ec, 0x629: 0x47f2,
	0x62a: 0x48ee, 0x62b: 0x4906, 0x62c: 0x48f6, 0x62d: 0x490e, 0x62e: 0x48fe, 0x62f: 0x4916,
	0x630: 0x47f8, 0x631: 0x431e, 0x632: 0x3691, 0x633: 0x4324, 0x634: 0x4822, 0x635: 0x432a,
	0x636: 0x36a3, 0x637: 0x4330, 0x638: 0x36c1, 0x639: 0x4336, 0x63a: 0x36d9, 0x63b: 0x433c,
	0x63c: 0x4870, 0x63d: 0x4342,
	// Block 0x19, offset 0x640
	0x640: 0x3da0, 0x641: 0x3da8, 0x642: 0x4184, 0x643: 0x41a2, 0x644: 0x418e, 0x645: 0x41ac,
	0x646: 0x4198, 0x647: 0x41b6, 0x648: 0x3cd8, 0x649: 0x3ce0, 0x64a: 0x40d0, 0x64b: 0x40ee,
	0x64c: 0x40da, 0x64d: 0x40f8, 0x64e: 0x40e4, 0x64f: 0x4102, 0x650: 0x3de8, 0x651: 0x3df0,
	0x652: 0x41c0, 0x653: 0x41de, 0x654: 0x41ca, 0x655: 0x41e8, 0x656: 0x41d4, 0x657: 0x41f2,
	0x658: 0x3d08, 0x659: 0x3d10, 0x65a: 0x410c, 0x65b: 0x412a, 0x65c: 0x4116, 0x65d: 0x4134,
	0x65e: 0x4120, 0x65f: 0x413e, 0x660: 0x3ec0, 0x661: 0x3ec8, 0x662: 0x41fc, 0x663: 0x421a,
	0x664: 0x4206, 0x665: 0x4224, 0x666: 0x4210, 0x667: 0x422e, 0x668: 0x3d80, 0x669: 0x3d88,
	0x66a: 0x4148, 0x66b: 0x4166, 0x66c: 0x4152, 0x66d: 0x4170, 0x66e: 0x415c, 0x66f: 0x417a,
	0x670: 0x3685, 0x671: 0x367f, 0x672: 0x3d90, 0x673: 0x368b, 0x674: 0x3d98,
	0x676: 0x4810, 0x677: 0x3db0, 0x678: 0x35f5, 0x679: 0x35ef, 0x67a: 0x35e3, 0x67b: 0x42ee,
	0x67c: 0x35fb, 0x67d: 0x4287, 0x67e: 0x01d3, 0x67f: 0x4287,
	// Block 0x1a, offset 0x680
	0x680: 0x42a0, 0x681: 0x4482, 0x682: 0x3dd8, 0x683: 0x369d, 0x684: 0x3de0,
	0x686: 0x483a, 0x687: 0x3df8, 0x688: 0x3601, 0x689: 0x42f4, 0x68a: 0x360d, 0x68b: 0x42fa,
	0x68c: 0x3619, 0x68d: 0x4489, 0x68e: 0x4490, 0x68f: 0x4497, 0x690: 0x36b5, 0x691: 0x36af,
	0x692: 0x3e00, 0x693: 0x44e4, 0x696: 0x36bb, 0x697: 0x3e10,
	0x698: 0x3631, 0x699: 0x362b, 0x69a: 0x361f, 0x69b: 0x4300, 0x69d: 0x449e,
	0x69e: 0x44a5, 0x69f: 0x44ac, 0x6a0: 0x36eb, 0x6a1: 0x36e5, 0x6a2: 0x3e68, 0x6a3: 0x44ec,
	0x6a4: 0x36cd, 0x6a5: 0x36d3, 0x6a6: 0x36f1, 0x6a7: 0x3e78, 0x6a8: 0x3661, 0x6a9: 0x365b,
	0x6aa: 0x364f, 0x6ab: 0x430c, 0x6ac: 0x3649, 0x6ad: 0x4474, 0x6ae: 0x447b, 0x6af: 0x0081,
	0x6b2: 0x3eb0, 0x6b3: 0x36f7, 0x6b4: 0x3eb8,
	0x6b6: 0x4888, 0x6b7: 0x3ed0, 0x6b8: 0x363d, 0x6b9: 0x4306, 0x6ba: 0x366d, 0x6bb: 0x4318,
	0x6bc: 0x3679, 0x6bd: 0x425a, 0x6be: 0x428c,
	// Block 0x1b, offset 0x6c0
	0x6c0: 0x1bd8, 0x6c1: 0x1bdc, 0x6c2: 0x0047, 0x6c3: 0x1c54, 0x6c5: 0x1be8,
	0x6c6: 0x1bec, 0x6c7: 0x00e9, 0x6c9: 0x1c58, 0x6ca: 0x008f, 0x6cb: 0x0051,
	0x6cc: 0x0051, 0x6cd: 0x0051, 0x6ce: 0x0091, 0x6cf: 0x00da, 0x6d0: 0x0053, 0x6d1: 0x0053,
	0x6d2: 0x0059, 0x6d3: 0x0099, 0x6d5: 0x005d, 0x6d6: 0x198d,
	0x6d9: 0x0061, 0x6da: 0x0063, 0x6db: 0x0065, 0x6dc: 0x0065, 0x6dd: 0x0065,
	0x6e0: 0x199f, 0x6e1: 0x1bc8, 0x6e2: 0x19a8,
	0x6e4: 0x0075, 0x6e6: 0x01b8, 0x6e8: 0x0075,
	0x6ea: 0x0057, 0x6eb: 0x42d2, 0x6ec: 0x0045, 0x6ed: 0x0047, 0x6ef: 0x008b,
	0x6f0: 0x004b, 0x6f1: 0x004d, 0x6f3: 0x005b, 0x6f4: 0x009f, 0x6f5: 0x0215,
	0x6f6: 0x0218, 0x6f7: 0x021b, 0x6f8: 0x021e, 0x6f9: 0x0093, 0x6fb: 0x1b98,
	0x6fc: 0x01e8, 0x6fd: 0x01c1, 0x6fe: 0x0179, 0x6ff: 0x01a0,
	// Block 0x1c, offset 0x700
	0x700: 0x0463, 0x705: 0x0049,
	0x706: 0x0089, 0x707: 0x008b, 0x708: 0x0093, 0x709: 0x0095,
	0x710: 0x222e, 0x711: 0x223a,
	0x712: 0x22ee, 0x713: 0x2216, 0x714: 0x229a, 0x715: 0x2222, 0x716: 0x22a0, 0x717: 0x22b8,
	0x718: 0x22c4, 0x719: 0x2228, 0x71a: 0x22ca, 0x71b: 0x2234, 0x71c: 0x22be, 0x71d: 0x22d0,
	0x71e: 0x22d6, 0x71f: 0x1cbc, 0x720: 0x0053, 0x721: 0x195a, 0x722: 0x1ba4, 0x723: 0x1963,
	0x724: 0x006d, 0x725: 0x19ab, 0x726: 0x1bd0, 0x727: 0x1d48, 0x728: 0x1966, 0x729: 0x0071,
	0x72a: 0x19b7, 0x72b: 0x1bd4, 0x72c: 0x0059, 0x72d: 0x0047, 0x72e: 0x0049, 0x72f: 0x005b,
	0x730: 0x0093, 0x731: 0x19e4, 0x732: 0x1c18, 0x733: 0x19ed, 0x734: 0x00ad, 0x735: 0x1a62,
	0x736: 0x1c4c, 0x737: 0x1d5c, 0x738: 0x19f0, 0x739: 0x00b1, 0x73a: 0x1a65, 0x73b: 0x1c50,
	0x73c: 0x0099, 0x73d: 0x0087, 0x73e: 0x0089, 0x73f: 0x009b,
	// Block 0x1d, offset 0x740
	0x741: 0x3c06, 0x743: 0xa000, 0x744: 0x3c0d, 0x745: 0xa000,
	0x747: 0x3c14, 0x748: 0xa000, 0x749: 0x3c1b,
	0x74d: 0xa000,
	0x760: 0x2f65, 0x761: 0xa000, 0x762: 0x3c29,
	0x764: 0xa000, 0x765: 0xa000,
	0x76d: 0x3c22, 0x76e: 0x2f60, 0x76f: 0x2f6a,
	0x770: 0x3c30, 0x771: 0x3c37, 0x772: 0xa000, 0x773: 0xa000, 0x774: 0x3c3e, 0x775: 0x3c45,
	0x776: 0xa000, 0x777: 0xa000, 0x778: 0x3c4c, 0x779: 0x3c53, 0x77a: 0xa000, 0x77b: 0xa000,
	0x77c: 0xa000, 0x77d: 0xa000,
	// Block 0x1e, offset 0x780
	0x780: 0x3c5a, 0x781: 0x3c61, 0x782: 0xa000, 0x783: 0xa000, 0x784: 0x3c76, 0x785: 0x3c7d,
	0x786: 0xa000, 0x787: 0xa000, 0x788: 0x3c84, 0x789: 0x3c8b,
	0x791: 0xa000,
	0x792: 0xa000,
	0x7a2: 0xa000,
	0x7a8: 0xa000, 0x7a9: 0xa000,
	0x7ab: 0xa000, 0x7ac: 0x3ca0, 0x7ad: 0x3ca7, 0x7ae: 0x3cae, 0x7af: 0x3cb5,
	0x7b2: 0xa000, 0x7b3: 0xa000, 0x7b4: 0xa000, 0x7b5: 0xa000,
	// Block 0x1f, offset 0x7c0
	0x7e0: 0x0023, 0x7e1: 0x0025, 0x7e2: 0x0027, 0x7e3: 0x0029,
	0x7e4: 0x002b, 0x7e5: 0x002d, 0x7e6: 0x002f, 0x7e7: 0x0031, 0x7e8: 0x0033, 0x7e9: 0x1882,
	0x7ea: 0x1885, 0x7eb: 0x1888, 0x7ec: 0x188b, 0x7ed: 0x188e, 0x7ee: 0x1891, 0x7ef: 0x1894,
	0x7f0: 0x1897, 0x7f1: 0x189a, 0x7f2: 0x189d, 0x7f3: 0x18a6, 0x7f4: 0x1a68, 0x7f5: 0x1a6c,
	0x7f6: 0x1a70, 0x7f7: 0x1a74, 0x7f8: 0x1a78, 0x7f9: 0x1a7c, 0x7fa: 0x1a80, 0x7fb: 0x1a84,
	0x7fc: 0x1a88, 0x7fd: 0x1c80, 0x7fe: 0x1c85, 0x7ff: 0x1c8a,
	// Block 0x20, offset 0x800
	0x800: 0x1c8f, 0x801: 0x1c94, 0x802: 0x1c99, 0x803: 0x1c9e, 0x804: 0x1ca3, 0x805: 0x1ca8,
	0x806: 0x1cad, 0x807: 0x1cb2, 0x808: 0x187f, 0x809: 0x18a3, 0x80a: 0x18c7, 0x80b: 0x18eb,
	0x80c: 0x190f, 0x80d: 0x1918, 0x80e: 0x191e, 0x80f: 0x1924, 0x810: 0x192a, 0x811: 0x1b60,
	0x812: 0x1b64, 0x813: 0x1b68, 0x814: 0x1b6c, 0x815: 0x1b70, 0x816: 0x1b74, 0x817: 0x1b78,
	0x818: 0x1b7c, 0x819: 0x1b80, 0x81a: 0x1b84, 0x81b: 0x1b88, 0x81c: 0x1af4, 0x81d: 0x1af8,
	0x81e: 0x1afc, 0x81f: 0x1b00, 0x820: 0x1b04, 0x821: 0x1b08, 0x822: 0x1b0c, 0x823: 0x1b10,
	0x824: 0x1b14, 0x825: 0x1b18, 0x826: 0x1b1c, 0x827: 0x1b20, 0x828: 0x1b24, 0x829: 0x1b28,
	0x82a: 0x1b2c, 0x82b: 0x1b30, 0x82c: 0x1b34, 0x82d: 0x1b38, 0x82e: 0x1b3c, 0x82f: 0x1b40,
	0x830: 0x1b44, 0x831: 0x1b48, 0x832: 0x1b4c, 0x833: 0x1b50, 0x834: 0x1b54, 0x835: 0x1b58,
	0x836: 0x0043, 0x837: 0x0045, 0x838: 0x0047, 0x839: 0x0049, 0x83a: 0x004b, 0x83b: 0x004d,
	0x83c: 0x004f, 0x83d: 0x0051, 0x83e: 0x0053, 0x83f: 0x0055,
	// Block 0x21, offset 0x840
	0x840: 0x06bf, 0x841: 0x06e3, 0x842: 0x06ef, 0x843: 0x06ff, 0x844: 0x0707, 0x845: 0x0713,
	0x846: 0x071b, 0x847: 0x0723, 0x848: 0x072f, 0x849: 0x0783, 0x84a: 0x079b, 0x84b: 0x07ab,
	0x84c: 0x07bb, 0x84d: 0x07cb, 0x84e: 0x07db, 0x84f: 0x07fb, 0x850: 0x07ff, 0x851: 0x0803,
	0x852: 0x0837, 0x853: 0x085f, 0x854: 0x086f, 0x855: 0x0877, 0x856: 0x087b, 0x857: 0x0887,
	0x858: 0x08a3, 0x859: 0x08a7, 0x85a: 0x08bf, 0x85b: 0x08c3, 0x85c: 0x08cb, 0x85d: 0x08db,
	0x85e: 0x0977, 0x85f: 0x098b, 0x860: 0x09cb, 0x861: 0x09df, 0x862: 0x09e7, 0x863: 0x09eb,
	0x864: 0x09fb, 0x865: 0x0a17, 0x866: 0x0a43, 0x867: 0x0a4f, 0x868: 0x0a6f, 0x869: 0x0a7b,
	0x86a: 0x0a7f, 0x86b: 0x0a83, 0x86c: 0x0a9b, 0x86d: 0x0a9f, 0x86e: 0x0acb, 0x86f: 0x0ad7,
	0x870: 0x0adf, 0x871: 0x0ae7, 0x872: 0x0af7, 0x873: 0x0aff, 0x874: 0x0b07, 0x875: 0x0b33,
	0x876: 0x0b37, 0x877: 0x0b3f, 0x878: 0x0b43, 0x879: 0x0b4b, 0x87a: 0x0b53, 0x87b: 0x0b63,
	0x87c: 0x0b7f, 0x87d: 0x0bf7, 0x87e: 0x0c0b, 0x87f: 0x0c0f,
	// Block 0x22, offset 0x880
	0x880: 0x0c8f, 0x881: 0x0c93, 0x882: 0x0ca7, 0x883: 0x0cab, 0x884: 0x0cb3, 0x885: 0x0cbb,
	0x886: 0x0cc3, 0x887: 0x0ccf, 0x888: 0x0cf7, 0x889: 0x0d07, 0x88a: 0x0d1b, 0x88b: 0x0d8b,
	0x88c: 0x0d97, 0x88d: 0x0da7, 0x88e: 0x0db3, 0x88f: 0x0dbf, 0x890: 0x0dc7, 0x891: 0x0dcb,
	0x892: 0x0dcf, 0x893: 0x0dd3, 0x894: 0x0dd7, 0x895: 0x0e8f, 0x896: 0x0ed7, 0x897: 0x0ee3,
	0x898: 0x0ee7, 0x899: 0x0eeb, 0x89a: 0x0eef, 0x89b: 0x0ef7, 0x89c: 0x0efb, 0x89d: 0x0f0f,
	0x89e: 0x0f2b, 0x89f: 0x0f33, 0x8a0: 0x0f73, 0x8a1: 0x0f77, 0x8a2: 0x0f7f, 0x8a3: 0x0f83,
	0x8a4: 0x0f8b, 0x8a5: 0x0f8f, 0x8a6: 0x0fb3, 0x8a7: 0x0fb7, 0x8a8: 0x0fd3, 0x8a9: 0x0fd7,
	0x8aa: 0x0fdb, 0x8ab: 0x0fdf, 0x8ac: 0x0ff3, 0x8ad: 0x1017, 0x8ae: 0x101b, 0x8af: 0x101f,
	0x8b0: 0x1043, 0x8b1: 0x1083, 0x8b2: 0x1087, 0x8b3: 0x10a7, 0x8b4: 0x10b7, 0x8b5: 0x10bf,
	0x8b6: 0x10df, 0x8b7: 0x1103, 0x8b8: 0x1147, 0x8b9: 0x114f, 0x8ba: 0x1163, 0x8bb: 0x116f,
	0x8bc: 0x1177, 0x8bd: 0x117f, 0x8be: 0x1183, 0x8bf: 0x1187,
	// Block 0x23, offset 0x8c0
	0x8c0: 0x119f, 0x8c1: 0x11a3, 0x8c2: 0x11bf, 0x8c3: 0x11c7, 0x8c4: 0x11cf, 0x8c5: 0x11d3,
	0x8c6: 0x11df, 0x8c7: 0x11e7, 0x8c8: 0x11eb, 0x8c9: 0x11ef, 0x8ca: 0x11f7, 0x8cb: 0x11fb,
	0x8cc: 0x129b, 0x8cd: 0x12af, 0x8ce: 0x12e3, 0x8cf: 0x12e7, 0x8d0: 0x12ef, 0x8d1: 0x131b,
	0x8d2: 0x1323, 0x8d3: 0x132b, 0x8d4: 0x1333, 0x8d5: 0x136f, 0x8d6: 0x1373, 0x8d7: 0x137b,
	0x8d8: 0x137f, 0x8d9: 0x1383, 0x8da: 0x13af, 0x8db: 0x13b3, 0x8dc: 0x13bb, 0x8dd: 0x13cf,
	0x8de: 0x13d3, 0x8df: 0x13ef, 0x8e0: 0x13f7, 0x8e1: 0x13fb, 0x8e2: 0x141f, 0x8e3: 0x143f,
	0x8e4: 0x1453, 0x8e5: 0x1457, 0x8e6: 0x145f, 0x8e7: 0x148b, 0x8e8: 0x148f, 0x8e9: 0x149f,
	0x8ea: 0x14c3, 0x8eb: 0x14cf, 0x8ec: 0x14df, 0x8ed: 0x14f7, 0x8ee: 0x14ff, 0x8ef: 0x1503,
	0x8f0: 0x1507, 0x8f1: 0x150b, 0x8f2: 0x1517, 0x8f3: 0x151b, 0x8f4: 0x1523, 0x8f5: 0x153f,
	0x8f6: 0x1543, 0x8f7: 0x1547, 0x8f8: 0x155f, 0x8f9: 0x1563, 0x8fa: 0x156b, 0x8fb: 0x157f,
	0x8fc: 0x1583, 0x8fd: 0x1587, 0x8fe: 0x158f, 0x8ff: 0x1593,
	// Block 0x24, offset 0x900
	0x906: 0xa000, 0x90b: 0xa000,
	0x90c: 0x3f08, 0x90d: 0xa000, 0x90e: 0x3f10, 0x90f: 0xa000, 0x910: 0x3f18, 0x911: 0xa000,
	0x912: 0x3f20, 0x913: 0xa000, 0x914: 0x3f28, 0x915: 0xa000, 0x916: 0x3f30, 0x917: 0xa000,
	0x918: 0x3f38, 0x919: 0xa000, 0x91a: 0x3f40, 0x91b: 0xa000, 0x91c: 0x3f48, 0x91d: 0xa000,
	0x91e: 0x3f50, 0x91f: 0xa000, 0x920: 0x3f58, 0x921: 0xa000, 0x922: 0x3f60,
	0x924: 0xa000, 0x925: 0x3f68, 0x926: 0xa000, 0x927: 0x3f70, 0x928: 0xa000, 0x929: 0x3f78,
	0x92f: 0xa000,
	0x930: 0x3f80, 0x931: 0x3f88, 0x932: 0xa000, 0x933: 0x3f90, 0x934: 0x3f98, 0x935: 0xa000,
	0x936: 0x3fa0, 0x937: 0x3fa8, 0x938: 0xa000, 0x939: 0x3fb0, 0x93a: 0x3fb8, 0x93b: 0xa000,
	0x93c: 0x3fc0, 0x93d: 0x3fc8,
	// Block 0x25, offset 0x940
	0x954: 0x3f00,
	0x959: 0x9903, 0x95a: 0x9903, 0x95b: 0x42dc, 0x95c: 0x42e2, 0x95d: 0xa000,
	0x95e: 0x3fd0, 0x95f: 0x26b4,
	0x966: 0xa000,
	0x96b: 0xa000, 0x96c: 0x3fe0, 0x96d: 0xa000, 0x96e: 0x3fe8, 0x96f: 0xa000,
	0x970: 0x3ff0, 0x971: 0xa000, 0x972: 0x3ff8, 0x973: 0xa000, 0x974: 0x4000, 0x975: 0xa000,
	0x976: 0x4008, 0x977: 0xa000, 0x978: 0x4010, 0x979: 0xa000, 0x97a: 0x4018, 0x97b: 0xa000,
	0x97c: 0x4020, 0x97d: 0xa000, 0x97e: 0x4028, 0x97f: 0xa000,
	// Block 0x26, offset 0x980
	0x980: 0x4030, 0x981: 0xa000, 0x982: 0x4038, 0x984: 0xa000, 0x985: 0x4040,
	0x986: 0xa000, 0x987: 0x4048, 0x988: 0xa000, 0x989: 0x4050,
	0x98f: 0xa000, 0x990: 0x4058, 0x991: 0x4060,
	0x992: 0xa000, 0x993: 0x4068, 0x994: 0x4070, 0x995: 0xa000, 0x996: 0x4078, 0x997: 0x4080,
	0x998: 0xa000, 0x999: 0x4088, 0x99a: 0x4090, 0x99b: 0xa000, 0x99c: 0x4098, 0x99d: 0x40a0,
	0x9af: 0xa000,
	0x9b0: 0xa000, 0x9b1: 0xa000, 0x9b2: 0xa000, 0x9b4: 0x3fd8,
	0x9b7: 0x40a8, 0x9b8: 0x40b0, 0x9b9: 0x40b8, 0x9ba: 0x40c0,
	0x9bd: 0xa000, 0x9be: 0x40c8, 0x9bf: 0x26c9,
	// Block 0x27, offset 0x9c0
	0x9c0: 0x0367, 0x9c1: 0x032b, 0x9c2: 0x032f, 0x9c3: 0x0333, 0x9c4: 0x037b, 0x9c5: 0x0337,
	0x9c6: 0x033b, 0x9c7: 0x033f, 0x9c8: 0x0343, 0x9c9: 0x0347, 0x9ca: 0x034b, 0x9cb: 0x034f,
	0x9cc: 0x0353, 0x9cd: 0x0357, 0x9ce: 0x035b, 0x9cf: 0x49bd, 0x9d0: 0x49c3, 0x9d1: 0x49c9,
	0x9d2: 0x49cf, 0x9d3: 0x49d5, 0x9d4: 0x49db, 0x9d5: 0x49e1, 0x9d6: 0x49e7, 0x9d7: 0x49ed,
	0x9d8: 0x49f3, 0x9d9: 0x49f9, 0x9da: 0x49ff, 0x9db: 0x4a05, 0x9dc: 0x4a0b, 0x9dd: 0x4a11,
	0x9de: 0x4a17, 0x9df: 0x4a1d, 0x9e0: 0x4a23, 0x9e1: 0x4a29, 0x9e2: 0x4a2f, 0x9e3: 0x4a35,
	0x9e4: 0x03c3, 0x9e5: 0x035f, 0x9e6: 0x0363, 0x9e7: 0x03e7, 0x9e8: 0x03eb, 0x9e9: 0x03ef,
	0x9ea: 0x03f3, 0x9eb: 0x03f7, 0x9ec: 0x03fb, 0x9ed: 0x03ff, 0x9ee: 0x036b, 0x9ef: 0x0403,
	0x9f0: 0x0407, 0x9f1: 0x036f, 0x9f2: 0x0373, 0x9f3: 0x0377, 0x9f4: 0x037f, 0x9f5: 0x0383,
	0x9f6: 0x0387, 0x9f7: 0x038b, 0x9f8: 0x038f, 0x9f9: 0x0393, 0x9fa: 0x0397, 0x9fb: 0x039b,
	0x9fc: 0x039f, 0x9fd: 0x03a3, 0x9fe: 0x03a7, 0x9ff: 0x03ab,
	// Block 0x28, offset 0xa00
	0xa00: 0x03af, 0xa01: 0x03b3, 0xa02: 0x040b, 0xa03: 0x040f, 0xa04: 0x03b7, 0xa05: 0x03bb,
	0xa06: 0x03bf, 0xa07: 0x03c7, 0xa08: 0x03cb, 0xa09: 0x03cf, 0xa0a: 0x03d3, 0xa0b: 0x03d7,
	0xa0c: 0x03db, 0xa0d: 0x03df, 0xa0e: 0x03e3,
	0xa12: 0x06bf, 0xa13: 0x071b, 0xa14: 0x06cb, 0xa15: 0x097b, 0xa16: 0x06cf, 0xa17: 0x06e7,
	0xa18: 0x06d3, 0xa19: 0x0f93, 0xa1a: 0x0707, 0xa1b: 0x06db, 0xa1c: 0x06c3, 0xa1d: 0x09ff,
	0xa1e: 0x098f, 0xa1f: 0x072f,
	// Block 0x29, offset 0xa40
	0xa40: 0x2054, 0xa41: 0x205a, 0xa42: 0x2060, 0xa43: 0x2066, 0xa44: 0x206c, 0xa45: 0x2072,
	0xa46: 0x2078, 0xa47: 0x207e, 0xa48: 0x2084, 0xa49: 0x208a, 0xa4a: 0x2090, 0xa4b: 0x2096,
	0xa4c: 0x209c, 0xa4d: 0x20a2, 0xa4e: 0x2726, 0xa4f: 0x272f, 0xa50: 0x2738, 0xa51: 0x2741,
	0xa52: 0x274a, 0xa53: 0x2753, 0xa54: 0x275c, 0xa55: 0x2765, 0xa56: 0x276e, 0xa57: 0x2780,
	0xa58: 0x2789, 0xa59: 0x2792, 0xa5a: 0x279b, 0xa5b: 0x27a4, 0xa5c: 0x2777, 0xa5d: 0x2bac,
	0xa5e: 0x2aed, 0xa60: 0x20a8, 0xa61: 0x20c0, 0xa62: 0x20b4, 0xa63: 0x2108,
	0xa64: 0x20c6, 0xa65: 0x20e4, 0xa66: 0x20ae, 0xa67: 0x20de, 0xa68: 0x20ba, 0xa69: 0x20f0,
	0xa6a: 0x2120, 0xa6b: 0x213e, 0xa6c: 0x2138, 0xa6d: 0x212c, 0xa6e: 0x217a, 0xa6f: 0x210e,
	0xa70: 0x211a, 0xa71: 0x2132, 0xa72: 0x2126, 0xa73: 0x2150, 0xa74: 0x20fc, 0xa75: 0x2144,
	0xa76: 0x216e, 0xa77: 0x2156, 0xa78: 0x20ea, 0xa79: 0x20cc, 0xa7a: 0x2102, 0xa7b: 0x2114,
	0xa7c: 0x214a, 0xa7d: 0x20d2, 0xa7e: 0x2174, 0xa7f: 0x20f6,
	// Block 0x2a, offset 0xa80
	0xa80: 0x215c, 0xa81: 0x20d8, 0xa82: 0x2162, 0xa83: 0x2168, 0xa84: 0x092f, 0xa85: 0x0b03,
	0xa86: 0x0ca7, 0xa87: 0x10c7,
	0xa90: 0x1bc4, 0xa91: 0x18a9,
	0xa92: 0x18ac, 0xa93: 0x18af, 0xa94: 0x18b2, 0xa95: 0x18b5, 0xa96: 0x18b8, 0xa97: 0x18bb,
	0xa98: 0x18be, 0xa99: 0x18c1, 0xa9a: 0x18ca, 0xa9b: 0x18cd, 0xa9c: 0x18d0, 0xa9d: 0x18d3,
	0xa9e: 0x18d6, 0xa9f: 0x18d9, 0xaa0: 0x0313, 0xaa1: 0x031b, 0xaa2: 0x031f, 0xaa3: 0x0327,
	0xaa4: 0x032b, 0xaa5: 0x032f, 0xaa6: 0x0337, 0xaa7: 0x033f, 0xaa8: 0x0343, 0xaa9: 0x034b,
	0xaaa: 0x034f, 0xaab: 0x0353, 0xaac: 0x0357, 0xaad: 0x035b, 0xaae: 0x2e18, 0xaaf: 0x2e20,
	0xab0: 0x2e28, 0xab1: 0x2e30, 0xab2: 0x2e38, 0xab3: 0x2e40, 0xab4: 0x2e48, 0xab5: 0x2e50,
	0xab6: 0x2e60, 0xab7: 0x2e68, 0xab8: 0x2e70, 0xab9: 0x2e78, 0xaba: 0x2e80, 0xabb: 0x2e88,
	0xabc: 0x2ed3, 0xabd: 0x2e9b, 0xabe: 0x2e58,
	// Block 0x2b, offset 0xac0
	0xac0: 0x06bf, 0xac1: 0x071b, 0xac2: 0x06cb, 0xac3: 0x097b, 0xac4: 0x071f, 0xac5: 0x07af,
	0xac6: 0x06c7, 0xac7: 0x07ab, 0xac8: 0x070b, 0xac9: 0x0887, 0xaca: 0x0d07, 0xacb: 0x0e8f,
	0xacc: 0x0dd7, 0xacd: 0x0d1b, 0xace: 0x145f, 0xacf: 0x098b, 0xad0: 0x0ccf, 0xad1: 0x0d4b,
	0xad2: 0x0d0b, 0xad3: 0x104b, 0xad4: 0x08fb, 0xad5: 0x0f03, 0xad6: 0x1387, 0xad7: 0x105f,
	0xad8: 0x0843, 0xad9: 0x108f, 0xada: 0x0f9b, 0xadb: 0x0a17, 0xadc: 0x140f, 0xadd: 0x077f,
	0xade: 0x08ab, 0xadf: 0x0df7, 0xae0: 0x1527, 0xae1: 0x0743, 0xae2: 0x07d3, 0xae3: 0x0d9b,
	0xae4: 0x06cf, 0xae5: 0x06e7, 0xae6: 0x06d3, 0xae7: 0x0adb, 0xae8: 0x08ef, 0xae9: 0x087f,
	0xaea: 0x0a57, 0xaeb: 0x0a4b, 0xaec: 0x0feb, 0xaed: 0x073f, 0xaee: 0x139b, 0xaef: 0x089b,
	0xaf0: 0x09f3, 0xaf1: 0x18dc, 0xaf2: 0x18df, 0xaf3: 0x18e2, 0xaf4: 0x18e5, 0xaf5: 0x18ee,
	0xaf6: 0x18f1, 0xaf7: 0x18f4, 0xaf8: 0x18f7, 0xaf9: 0x18fa, 0xafa: 0x18fd, 0xafb: 0x1900,
	0xafc: 0x1903, 0xafd: 0x1906, 0xafe: 0x1909, 0xaff: 0x1912,
	// Block 0x2c, offset 0xb00
	0xb00: 0x1cc6, 0xb01: 0x1cd5, 0xb02: 0x1ce4, 0xb03: 0x1cf3, 0xb04: 0x1d02, 0xb05: 0x1d11,
	0xb06: 0x1d20, 0xb07: 0x1d2f, 0xb08: 0x1d3e, 0xb09: 0x218c, 0xb0a: 0x219e, 0xb0b: 0x21b0,
	0xb0c: 0x1954, 0xb0d: 0x1c04, 0xb0e: 0x19d2, 0xb0f: 0x1ba8, 0xb10: 0x04cb, 0xb11: 0x04d3,
	0xb12: 0x04db, 0xb13: 0x04e3, 0xb14: 0x04eb, 0xb15: 0x04ef, 0xb16: 0x04f3, 0xb17: 0x04f7,
	0xb18: 0x04fb, 0xb19: 0x04ff, 0xb1a: 0x0503, 0xb1b: 0x0507, 0xb1c: 0x050b, 0xb1d: 0x050f,
	0xb1e: 0x0513, 0xb1f: 0x0517, 0xb20: 0x051b, 0xb21: 0x0523, 0xb22: 0x0527, 0xb23: 0x052b,
	0xb24: 0x052f, 0xb25: 0x0533, 0xb26: 0x0537, 0xb27: 0x053b, 0xb28: 0x053f, 0xb29: 0x0543,
	0xb2a: 0x0547, 0xb2b: 0x054b, 0xb2c: 0x054f, 0xb2d: 0x0553, 0xb2e: 0x0557, 0xb2f: 0x055b,
	0xb30: 0x055f, 0xb31: 0x0563, 0xb32: 0x0567, 0xb33: 0x056f, 0xb34: 0x0577, 0xb35: 0x057f,
	0xb36: 0x0583, 0xb37: 0x0587, 0xb38: 0x058b, 0xb39: 0x058f, 0xb3a: 0x0593, 0xb3b: 0x0597,
	0xb3c: 0x059b, 0xb3d: 0x059f, 0xb3e: 0x05a3,
	// Block 0x2d, offset 0xb40
	0xb40: 0x2b0c, 0xb41: 0x29a8, 0xb42: 0x2b1c, 0xb43: 0x2880, 0xb44: 0x2ee4, 0xb45: 0x288a,
	0xb46: 0x2894, 0xb47: 0x2f28, 0xb48: 0x29b5, 0xb49: 0x289e, 0xb4a: 0x28a8, 0xb4b: 0x28b2,
	0xb4c: 0x29dc, 0xb4d: 0x29e9, 0xb4e: 0x29c2, 0xb4f: 0x29cf, 0xb50: 0x2ea9, 0xb51: 0x29f6,
	0xb52: 0x2a03, 0xb53: 0x2bbe, 0xb54: 0x26bb, 0xb55: 0x2bd1, 0xb56: 0x2be4, 0xb57: 0x2b2c,
	0xb58: 0x2a10, 0xb59: 0x2bf7, 0xb5a: 0x2c0a, 0xb5b: 0x2a1d, 0xb5c: 0x28bc, 0xb5d: 0x28c6,
	0xb5e: 0x2eb7, 0xb5f: 0x2a2a, 0xb60: 0x2b3c, 0xb61: 0x2ef5, 0xb62: 0x28d0, 0xb63: 0x28da,
	0xb64: 0x2a37, 0xb65: 0x28e4, 0xb66: 0x28ee, 0xb67: 0x26d0, 0xb68: 0x26d7, 0xb69: 0x28f8,
	0xb6a: 0x2902, 0xb6b: 0x2c1d, 0xb6c: 0x2a44, 0xb6d: 0x2b4c, 0xb6e: 0x2c30, 0xb6f: 0x2a51,
	0xb70: 0x2916, 0xb71: 0x290c, 0xb72: 0x2f3c, 0xb73: 0x2a5e, 0xb74: 0x2c43, 0xb75: 0x2920,
	0xb76: 0x2b5c, 0xb77: 0x292a, 0xb78: 0x2a78, 0xb79: 0x2934, 0xb7a: 0x2a85, 0xb7b: 0x2f06,
	0xb7c: 0x2a6b, 0xb7d: 0x2b6c, 0xb7e: 0x2a92, 0xb7f: 0x26de,
	// Block 0x2e, offset 0xb80
	0xb80: 0x2f17, 0xb81: 0x293e, 0xb82: 0x2948, 0xb83: 0x2a9f, 0xb84: 0x2952, 0xb85: 0x295c,
	0xb86: 0x2966, 0xb87: 0x2b7c, 0xb88: 0x2aac, 0xb89: 0x26e5, 0xb8a: 0x2c56, 0xb8b: 0x2e90,
	0xb8c: 0x2b8c, 0xb8d: 0x2ab9, 0xb8e: 0x2ec5, 0xb8f: 0x2970, 0xb90: 0x297a, 0xb91: 0x2ac6,
	0xb92: 0x26ec, 0xb93: 0x2ad3, 0xb94: 0x2b9c, 0xb95: 0x26f3, 0xb96: 0x2c69, 0xb97: 0x2984,
	0xb98: 0x1cb7, 0xb99: 0x1ccb, 0xb9a: 0x1cda, 0xb9b: 0x1ce9, 0xb9c: 0x1cf8, 0xb9d: 0x1d07,
	0xb9e: 0x1d16, 0xb9f: 0x1d25, 0xba0: 0x1d34, 0xba1: 0x1d43, 0xba2: 0x2192, 0xba3: 0x21a4,
	0xba4: 0x21b6, 0xba5: 0x21c2, 0xba6: 0x21ce, 0xba7: 0x21da, 0xba8: 0x21e6, 0xba9: 0x21f2,
	0xbaa: 0x21fe, 0xbab: 0x220a, 0xbac: 0x2246, 0xbad: 0x2252, 0xbae: 0x225e, 0xbaf: 0x226a,
	0xbb0: 0x2276, 0xbb1: 0x1c14, 0xbb2: 0x19c6, 0xbb3: 0x1936, 0xbb4: 0x1be4, 0xbb5: 0x1a47,
	0xbb6: 0x1a56, 0xbb7: 0x19cc, 0xbb8: 0x1bfc, 0xbb9: 0x1c00, 0xbba: 0x1960, 0xbbb: 0x2701,
	0xbbc: 0x270f, 0xbbd: 0x26fa, 0xbbe: 0x2708, 0xbbf: 0x2ae0,
	// Block 0x2f, offset 0xbc0
	0xbc0: 0x1a4a, 0xbc1: 0x1a32, 0xbc2: 0x1c60, 0xbc3: 0x1a1a, 0xbc4: 0x19f3, 0xbc5: 0x1969,
	0xbc6: 0x1978, 0xbc7: 0x1948, 0xbc8: 0x1bf0, 0xbc9: 0x1d52, 0xbca: 0x1a4d, 0xbcb: 0x1a35,
	0xbcc: 0x1c64, 0xbcd: 0x1c70, 0xbce: 0x1a26, 0xbcf: 0x19fc, 0xbd0: 0x1957, 0xbd1: 0x1c1c,
	0xbd2: 0x1bb0, 0xbd3: 0x1b9c, 0xbd4: 0x1bcc, 0xbd5: 0x1c74, 0xbd6: 0x1a29, 0xbd7: 0x19c9,
	0xbd8: 0x19ff, 0xbd9: 0x19de, 0xbda: 0x1a41, 0xbdb: 0x1c78, 0xbdc: 0x1a2c, 0xbdd: 0x19c0,
	0xbde: 0x1a02, 0xbdf: 0x1c3c, 0xbe0: 0x1bf4, 0xbe1: 0x1a14, 0xbe2: 0x1c24, 0xbe3: 0x1c40,
	0xbe4: 0x1bf8, 0xbe5: 0x1a17, 0xbe6: 0x1c28, 0xbe7: 0x22e8, 0xbe8: 0x22fc, 0xbe9: 0x1996,
	0xbea: 0x1c20, 0xbeb: 0x1bb4, 0xbec: 0x1ba0, 0xbed: 0x1c48, 0xbee: 0x2716, 0xbef: 0x27ad,
	0xbf0: 0x1a59, 0xbf1: 0x1a44, 0xbf2: 0x1c7c, 0xbf3: 0x1a2f, 0xbf4: 0x1a50, 0xbf5: 0x1a38,
	0xbf6: 0x1c68, 0xbf7: 0x1a1d, 0xbf8: 0x19f6, 0xbf9: 0x1981, 0xbfa: 0x1a53, 0xbfb: 0x1a3b,
	0xbfc: 0x1c6c, 0xbfd: 0x1a20, 0xbfe: 0x19f9, 0xbff: 0x1984,
	// Block 0x30, offset 0xc00
	0xc00: 0x1c2c, 0xc01: 0x1bb8, 0xc02: 0x1d4d, 0xc03: 0x1939, 0xc04: 0x19ba, 0xc05: 0x19bd,
	0xc06: 0x22f5, 0xc07: 0x1b94, 0xc08: 0x19c3, 0xc09: 0x194b, 0xc0a: 0x19e1, 0xc0b: 0x194e,
	0xc0c: 0x19ea, 0xc0d: 0x196c, 0xc0e: 0x196f, 0xc0f: 0x1a05, 0xc10: 0x1a0b, 0xc11: 0x1a0e,
	0xc12: 0x1c30, 0xc13: 0x1a11, 0xc14: 0x1a23, 0xc15: 0x1c38, 0xc16: 0x1c44, 0xc17: 0x1990,
	0xc18: 0x1d57, 0xc19: 0x1bbc, 0xc1a: 0x1993, 0xc1b: 0x1a5c, 0xc1c: 0x19a5, 0xc1d: 0x19b4,
	0xc1e: 0x22e2, 0xc1f: 0x22dc, 0xc20: 0x1cc1, 0xc21: 0x1cd0, 0xc22: 0x1cdf, 0xc23: 0x1cee,
	0xc24: 0x1cfd, 0xc25: 0x1d0c, 0xc26: 0x1d1b, 0xc27: 0x1d2a, 0xc28: 0x1d39, 0xc29: 0x2186,
	0xc2a: 0x2198, 0xc2b: 0x21aa, 0xc2c: 0x21bc, 0xc2d: 0x21c8, 0xc2e: 0x21d4, 0xc2f: 0x21e0,
	0xc30: 0x21ec, 0xc31: 0x21f8, 0xc32: 0x2204, 0xc33: 0x2240, 0xc34: 0x224c, 0xc35: 0x2258,
	0xc36: 0x2264, 0xc37: 0x2270, 0xc38: 0x227c, 0xc39: 0x2282, 0xc3a: 0x2288, 0xc3b: 0x228e,
	0xc3c: 0x2294, 0xc3d: 0x22a6, 0xc3e: 0x22ac, 0xc3f: 0x1c10,
	// Block 0x31, offset 0xc40
	0xc40: 0x1377, 0xc41: 0x0cfb, 0xc42: 0x13d3, 0xc43: 0x139f, 0xc44: 0x0e57, 0xc45: 0x06eb,
	0xc46: 0x08df, 0xc47: 0x162b, 0xc48: 0x162b, 0xc49: 0x0a0b, 0xc4a: 0x145f, 0xc4b: 0x0943,
	0xc4c: 0x0a07, 0xc4d: 0x0bef, 0xc4e: 0x0fcf, 0xc4f: 0x115f, 0xc50: 0x1297, 0xc51: 0x12d3,
	0xc52: 0x1307, 0xc53: 0x141b, 0xc54: 0x0d73, 0xc55: 0x0dff, 0xc56: 0x0eab, 0xc57: 0x0f43,
	0xc58: 0x125f, 0xc59: 0x1447, 0xc5a: 0x1573, 0xc5b: 0x070f, 0xc5c: 0x08b3, 0xc5d: 0x0d87,
	0xc5e: 0x0ecf, 0xc5f: 0x1293, 0xc60: 0x15c3, 0xc61: 0x0ab3, 0xc62: 0x0e77, 0xc63: 0x1283,
	0xc64: 0x1317, 0xc65: 0x0c23, 0xc66: 0x11bb, 0xc67: 0x12df, 0xc68: 0x0b1f, 0xc69: 0x0d0f,
	0xc6a: 0x0e17, 0xc6b: 0x0f1b, 0xc6c: 0x1427, 0xc6d: 0x074f, 0xc6e: 0x07e7, 0xc6f: 0x0853,
	0xc70: 0x0c8b, 0xc71: 0x0d7f, 0xc72: 0x0ecb, 0xc73: 0x0fef, 0xc74: 0x1177, 0xc75: 0x128b,
	0xc76: 0x12a3, 0xc77: 0x13c7, 0xc78: 0x14ef, 0xc79: 0x15a3, 0xc7a: 0x15bf, 0xc7b: 0x102b,
	0xc7c: 0x106b, 0xc7d: 0x1123, 0xc7e: 0x1243, 0xc7f: 0x147b,
	// Block 0x32, offset 0xc80
	0xc80: 0x15cb, 0xc81: 0x134b, 0xc82: 0x09c7, 0xc83: 0x0b3b, 0xc84: 0x10db, 0xc85: 0x119b,
	0xc86: 0x0eff, 0xc87: 0x1033, 0xc88: 0x1397, 0xc89: 0x14e7, 0xc8a: 0x09c3, 0xc8b: 0x0a8f,
	0xc8c: 0x0d77, 0xc8d: 0x0e2b, 0xc8e: 0x0e5f, 0xc8f: 0x1113, 0xc90: 0x113b, 0xc91: 0x14a7,
	0xc92: 0x084f, 0xc93: 0x11a7, 0xc94: 0x07f3, 0xc95: 0x07ef, 0xc96: 0x1097, 0xc97: 0x1127,
	0xc98: 0x125b, 0xc99: 0x14af, 0xc9a: 0x1367, 0xc9b: 0x0c27, 0xc9c: 0x0d73, 0xc9d: 0x1357,
	0xc9e: 0x06f7, 0xc9f: 0x0a63, 0xca0: 0x0b93, 0xca1: 0x0f2f, 0xca2: 0x0faf, 0xca3: 0x0873,
	0xca4: 0x103b, 0xca5: 0x075f, 0xca6: 0x0b77, 0xca7: 0x06d7, 0xca8: 0x0deb, 0xca9: 0x0ca3,
	0xcaa: 0x110f, 0xcab: 0x08c7, 0xcac: 0x09b3, 0xcad: 0x0ffb, 0xcae: 0x1263, 0xcaf: 0x133b,
	0xcb0: 0x0db7, 0xcb1: 0x13f7, 0xcb2: 0x0de3, 0xcb3: 0x0c37, 0xcb4: 0x121b, 0xcb5: 0x0c57,
	0xcb6: 0x0fab, 0xcb7: 0x072b, 0xcb8: 0x07a7, 0xcb9: 0x07eb, 0xcba: 0x0d53, 0xcbb: 0x10fb,
	0xcbc: 0x11f3, 0xcbd: 0x1347, 0xcbe: 0x145b, 0xcbf: 0x085b,
	// Block 0x33, offset 0xcc0
	0xcc0: 0x090f, 0xcc1: 0x0a17, 0xcc2: 0x0b2f, 0xcc3: 0x0cbf, 0xcc4: 0x0e7b, 0xcc5: 0x103f,
	0xcc6: 0x1497, 0xcc7: 0x157b, 0xcc8: 0x15cf, 0xcc9: 0x15e7, 0xcca: 0x0837, 0xccb: 0x0cf3,
	0xccc: 0x0da3, 0xccd: 0x13eb, 0xcce: 0x0afb, 0xccf: 0x0bd7, 0xcd0: 0x0bf3, 0xcd1: 0x0c83,
	0xcd2: 0x0e6b, 0xcd3: 0x0eb7, 0xcd4: 0x0f67, 0xcd5: 0x108b, 0xcd6: 0x112f, 0xcd7: 0x1193,
	0xcd8: 0x13db, 0xcd9: 0x126b, 0xcda: 0x1403, 0xcdb: 0x147f, 0xcdc: 0x080f, 0xcdd: 0x083b,
	0xcde: 0x0923, 0xcdf: 0x0ea7, 0xce0: 0x12f3, 0xce1: 0x133b, 0xce2: 0x0b1b, 0xce3: 0x0b8b,
	0xce4: 0x0c4f, 0xce5: 0x0daf, 0xce6: 0x10d7, 0xce7: 0x0f23, 0xce8: 0x073b, 0xce9: 0x097f,
	0xcea: 0x0a63, 0xceb: 0x0ac7, 0xcec: 0x0b97, 0xced: 0x0f3f, 0xcee: 0x0f5b, 0xcef: 0x116b,
	0xcf0: 0x118b, 0xcf1: 0x1463, 0xcf2: 0x14e3, 0xcf3: 0x14f3, 0xcf4: 0x152f, 0xcf5: 0x0753,
	0xcf6: 0x107f, 0xcf7: 0x144f, 0xcf8: 0x14cb, 0xcf9: 0x0baf, 0xcfa: 0x0717, 0xcfb: 0x0777,
	0xcfc: 0x0a67, 0xcfd: 0x0a87, 0xcfe: 0x0caf, 0xcff: 0x0d73,
	// Block 0x34, offset 0xd00
	0xd00: 0x0ec3, 0xd01: 0x0fcb, 0xd02: 0x1277, 0xd03: 0x1417, 0xd04: 0x1623, 0xd05: 0x0ce3,
	0xd06: 0x14a3, 0xd07: 0x0833, 0xd08: 0x0d2f, 0xd09: 0x0d3b, 0xd0a: 0x0e0f, 0xd0b: 0x0e47,
	0xd0c: 0x0f4b, 0xd0d: 0x0fa7, 0xd0e: 0x1027, 0xd0f: 0x110b, 0xd10: 0x153b, 0xd11: 0x07af,
	0xd12: 0x0c03, 0xd13: 0x14b3, 0xd14: 0x0767, 0xd15: 0x0aab, 0xd16: 0x0e2f, 0xd17: 0x13df,
	0xd18: 0x0b67, 0xd19: 0x0bb7, 0xd1a: 0x0d43, 0xd1b: 0x0f2f, 0xd1c: 0x14bb, 0xd1d: 0x0817,
	0xd1e: 0x08ff, 0xd1f: 0x0a97, 0xd20: 0x0cd3, 0xd21: 0x0d1f, 0xd22: 0x0d5f, 0xd23: 0x0df3,
	0xd24: 0x0f47, 0xd25: 0x0fbb, 0xd26: 0x1157, 0xd27: 0x12f7, 0xd28: 0x1303, 0xd29: 0x1457,
	0xd2a: 0x14d7, 0xd2b: 0x0883, 0xd2c: 0x0e4b, 0xd2d: 0x0903, 0xd2e: 0x0ec7, 0xd2f: 0x0f6b,
	0xd30: 0x1287, 0xd31: 0x14bf, 0xd32: 0x15ab, 0xd33: 0x15d3, 0xd34: 0x0d37, 0xd35: 0x0e27,
	0xd36: 0x11c3, 0xd37: 0x10b7, 0xd38: 0x10c3, 0xd39: 0x10e7, 0xd3a: 0x0f17, 0xd3b: 0x0e9f,
	0xd3c: 0x1363, 0xd3d: 0x0733, 0xd3e: 0x122b, 0xd3f: 0x081b,
	// Block 0x35, offset 0xd40
	0xd40: 0x080b, 0xd41: 0x0b0b, 0xd42: 0x0c2b, 0xd43: 0x10f3, 0xd44: 0x0a53, 0xd45: 0x0e03,
	0xd46: 0x0cef, 0xd47: 0x13e7, 0xd48: 0x12e7, 0xd49: 0x14ab, 0xd4a: 0x1323, 0xd4b: 0x0b27,
	0xd4c: 0x0787, 0xd4d: 0x095b, 0xd50: 0x09af,
	0xd52: 0x0cdf, 0xd55: 0x07f7, 0xd56: 0x0f1f, 0xd57: 0x0fe3,
	0xd58: 0x1047, 0xd59: 0x1063, 0xd5a: 0x1067, 0xd5b: 0x107b, 0xd5c: 0x14fb, 0xd5d: 0x10eb,
	0xd5e: 0x116f, 0xd60: 0x128f, 0xd62: 0x1353,
	0xd65: 0x1407, 0xd66: 0x1433,
	0xd6a: 0x154f, 0xd6b: 0x1553, 0xd6c: 0x1557, 0xd6d: 0x15bb, 0xd6e: 0x142b, 0xd6f: 0x14c7,
	0xd70: 0x0757, 0xd71: 0x077b, 0xd72: 0x078f, 0xd73: 0x084b, 0xd74: 0x0857, 0xd75: 0x0897,
	0xd76: 0x094b, 0xd77: 0x0967, 0xd78: 0x096f, 0xd79: 0x09ab, 0xd7a: 0x09b7, 0xd7b: 0x0a93,
	0xd7c: 0x0a9b, 0xd7d: 0x0ba3, 0xd7e: 0x0bcb, 0xd7f: 0x0bd3,
	// Block 0x36, offset 0xd80
	0xd80: 0x0beb, 0xd81: 0x0c97, 0xd82: 0x0cc7, 0xd83: 0x0ce7, 0xd84: 0x0d57, 0xd85: 0x0e1b,
	0xd86: 0x0e37, 0xd87: 0x0e67, 0xd88: 0x0ebb, 0xd89: 0x0edb, 0xd8a: 0x0f4f, 0xd8b: 0x102f,
	0xd8c: 0x104b, 0xd8d: 0x1053, 0xd8e: 0x104f, 0xd8f: 0x1057, 0xd90: 0x105b, 0xd91: 0x105f,
	0xd92: 0x1073, 0xd93: 0x1077, 0xd94: 0x109b, 0xd95: 0x10af, 0xd96: 0x10cb, 0xd97: 0x112f,
	0xd98: 0x1137, 0xd99: 0x113f, 0xd9a: 0x1153, 0xd9b: 0x117b, 0xd9c: 0x11cb, 0xd9d: 0x11ff,
	0xd9e: 0x11ff, 0xd9f: 0x1267, 0xda0: 0x130f, 0xda1: 0x1327, 0xda2: 0x135b, 0xda3: 0x135f,
	0xda4: 0x13a3, 0xda5: 0x13a7, 0xda6: 0x13ff, 0xda7: 0x1407, 0xda8: 0x14db, 0xda9: 0x151f,
	0xdaa: 0x1537, 0xdab: 0x0b9b, 0xdac: 0x171e, 0xdad: 0x11e3,
	0xdb0: 0x06df, 0xdb1: 0x07e3, 0xdb2: 0x07a3, 0xdb3: 0x074b, 0xdb4: 0x078b, 0xdb5: 0x07b7,
	0xdb6: 0x0847, 0xdb7: 0x0863, 0xdb8: 0x094b, 0xdb9: 0x0937, 0xdba: 0x0947, 0xdbb: 0x0963,
	0xdbc: 0x09af, 0xdbd: 0x09bf, 0xdbe: 0x0a03, 0xdbf: 0x0a0f,
	// Block 0x37, offset 0xdc0
	0xdc0: 0x0a2b, 0xdc1: 0x0a3b, 0xdc2: 0x0b23, 0xdc3: 0x0b2b, 0xdc4: 0x0b5b, 0xdc5: 0x0b7b,
	0xdc6: 0x0bab, 0xdc7: 0x0bc3, 0xdc8: 0x0bb3, 0xdc9: 0x0bd3, 0xdca: 0x0bc7, 0xdcb: 0x0beb,
	0xdcc: 0x0c07, 0xdcd: 0x0c5f, 0xdce: 0x0c6b, 0xdcf: 0x0c73, 0xdd0: 0x0c9b, 0xdd1: 0x0cdf,
	0xdd2: 0x0d0f, 0xdd3: 0x0d13, 0xdd4: 0x0d27, 0xdd5: 0x0da7, 0xdd6: 0x0db7, 0xdd7: 0x0e0f,
	0xdd8: 0x0e5b, 0xdd9: 0x0e53, 0xdda: 0x0e67, 0xddb: 0x0e83, 0xddc: 0x0ebb, 0xddd: 0x1013,
	0xdde: 0x0edf, 0xddf: 0x0f13, 0xde0: 0x0f1f, 0xde1: 0x0f5f, 0xde2: 0x0f7b, 0xde3: 0x0f9f,
	0xde4: 0x0fc3, 0xde5: 0x0fc7, 0xde6: 0x0fe3, 0xde7: 0x0fe7, 0xde8: 0x0ff7, 0xde9: 0x100b,
	0xdea: 0x1007, 0xdeb: 0x1037, 0xdec: 0x10b3, 0xded: 0x10cb, 0xdee: 0x10e3, 0xdef: 0x111b,
	0xdf0: 0x112f, 0xdf1: 0x114b, 0xdf2: 0x117b, 0xdf3: 0x122f, 0xdf4: 0x1257, 0xdf5: 0x12cb,
	0xdf6: 0x1313, 0xdf7: 0x131f, 0xdf8: 0x1327, 0xdf9: 0x133f, 0xdfa: 0x1353, 0xdfb: 0x1343,
	0xdfc: 0x135b, 0xdfd: 0x1357, 0xdfe: 0x134f, 0xdff: 0x135f,
	// Block 0x38, offset 0xe00
	0xe00: 0x136b, 0xe01: 0x13a7, 0xe02: 0x13e3, 0xe03: 0x1413, 0xe04: 0x144b, 0xe05: 0x146b,
	0xe06: 0x14b7, 0xe07: 0x14db, 0xe08: 0x14fb, 0xe09: 0x150f, 0xe0a: 0x151f, 0xe0b: 0x152b,
	0xe0c: 0x1537, 0xe0d: 0x158b, 0xe0e: 0x162b, 0xe0f: 0x16b5, 0xe10: 0x16b0, 0xe11: 0x16e2,
	0xe12: 0x0607, 0xe13: 0x062f, 0xe14: 0x0633, 0xe15: 0x1764, 0xe16: 0x1791, 0xe17: 0x1809,
	0xe18: 0x1617, 0xe19: 0x1627,
	// Block 0x39, offset 0xe40
	0xe40: 0x19d5, 0xe41: 0x19d8, 0xe42: 0x19db, 0xe43: 0x1c08, 0xe44: 0x1c0c, 0xe45: 0x1a5f,
	0xe46: 0x1a5f,
	0xe53: 0x1d75, 0xe54: 0x1d66, 0xe55: 0x1d6b, 0xe56: 0x1d7a, 0xe57: 0x1d70,
	0xe5d: 0x4390,
	0xe5e: 0x8115, 0xe5f: 0x4402, 0xe60: 0x022d, 0xe61: 0x0215, 0xe62: 0x021e, 0xe63: 0x0221,
	0xe64: 0x0224, 0xe65: 0x0227, 0xe66: 0x022a, 0xe67: 0x0230, 0xe68: 0x0233, 0xe69: 0x0017,
	0xe6a: 0x43f0, 0xe6b: 0x43f6, 0xe6c: 0x44f4, 0xe6d: 0x44fc, 0xe6e: 0x4348, 0xe6f: 0x434e,
	0xe70: 0x4354, 0xe71: 0x435a, 0xe72: 0x4366, 0xe73: 0x436c, 0xe74: 0x4372, 0xe75: 0x437e,
	0xe76: 0x4384, 0xe78: 0x438a, 0xe79: 0x4396, 0xe7a: 0x439c, 0xe7b: 0x43a2,
	0xe7c: 0x43ae, 0xe7e: 0x43b4,
	// Block 0x3a, offset 0xe80
	0xe80: 0x43ba, 0xe81: 0x43c0, 0xe83: 0x43c6, 0xe84: 0x43cc,
	0xe86: 0x43d8, 0xe87: 0x43de, 0xe88: 0x43e4, 0xe89: 0x43ea, 0xe8a: 0x43fc, 0xe8b: 0x4378,
	0xe8c: 0x4360, 0xe8d: 0x43a8, 0xe8e: 0x43d2, 0xe8f: 0x1d7f, 0xe90: 0x0299, 0xe91: 0x0299,
	0xe92: 0x02a2, 0xe93: 0x02a2, 0xe94: 0x02a2, 0xe95: 0x02a2, 0xe96: 0x02a5, 0xe97: 0x02a5,
	0xe98: 0x02a5, 0xe99: 0x02a5, 0xe9a: 0x02ab, 0xe9b: 0x02ab, 0xe9c: 0x02ab, 0xe9d: 0x02ab,
	0xe9e: 0x029f, 0xe9f: 0x029f, 0xea0: 0x029f, 0xea1: 0x029f, 0xea2: 0x02a8, 0xea3: 0x02a8,
	0xea4: 0x02a8, 0xea5: 0x02a8, 0xea6: 0x029c, 0xea7: 0x029c, 0xea8: 0x029c, 0xea9: 0x029c,
	0xeaa: 0x02cf, 0xeab: 0x02cf, 0xeac: 0x02cf, 0xead: 0x02cf, 0xeae: 0x02d2, 0xeaf: 0x02d2,
	0xeb0: 0x02d2, 0xeb1: 0x02d2, 0xeb2: 0x02b1, 0xeb3: 0x02b1, 0xeb4: 0x02b1, 0xeb5: 0x02b1,
	0xeb6: 0x02ae, 0xeb7: 0x02ae, 0xeb8: 0x02ae, 0xeb9: 0x02ae, 0xeba: 0x02b4, 0xebb: 0x02b4,
	0xebc: 0x02b4, 0xebd: 0x02b4, 0xebe: 0x02b7, 0xebf: 0x02b7,
	// Block 0x3b, offset 0xec0
	0xec0: 0x02b7, 0xec1: 0x02b7, 0xec2: 0x02c0, 0xec3: 0x02c0, 0xec4: 0x02bd, 0xec5: 0x02bd,
	0xec6: 0x02c3, 0xec7: 0x02c3, 0xec8: 0x02ba, 0xec9: 0x02ba, 0xeca: 0x02c9, 0xecb: 0x02c9,
	0xecc: 0x02c6, 0xecd: 0x02c6, 0xece: 0x02d5, 0xecf: 0x02d5, 0xed0: 0x02d5, 0xed1: 0x02d5,
	0xed2: 0x02db, 0xed3: 0x02db, 0xed4: 0x02db, 0xed5: 0x02db, 0xed6: 0x02e1, 0xed7: 0x02e1,
	0xed8: 0x02e1, 0xed9: 0x02e1, 0xeda: 0x02de, 0xedb: 0x02de, 0xedc: 0x02de, 0xedd: 0x02de,
	0xede: 0x02e4, 0xedf: 0x02e4, 0xee0: 0x02e7, 0xee1: 0x02e7, 0xee2: 0x02e7, 0xee3: 0x02e7,
	0xee4: 0x446e, 0xee5: 0x446e, 0xee6: 0x02ed, 0xee7: 0x02ed, 0xee8: 0x02ed, 0xee9: 0x02ed,
	0xeea: 0x02ea, 0xeeb: 0x02ea, 0xeec: 0x02ea, 0xeed: 0x02ea, 0xeee: 0x0308, 0xeef: 0x0308,
	0xef0: 0x4468, 0xef1: 0x4468,
	// Block 0x3c, offset 0xf00
	0xf13: 0x02d8, 0xf14: 0x02d8, 0xf15: 0x02d8, 0xf16: 0x02d8, 0xf17: 0x02f6,
	0xf18: 0x02f6, 0xf19: 0x02f3, 0xf1a: 0x02f3, 0xf1b: 0x02f9, 0xf1c: 0x02f9, 0xf1d: 0x204f,
	0xf1e: 0x02ff, 0xf1f: 0x02ff, 0xf20: 0x02f0, 0xf21: 0x02f0, 0xf22: 0x02fc, 0xf23: 0x02fc,
	0xf24: 0x0305, 0xf25: 0x0305, 0xf26: 0x0305, 0xf27: 0x0305, 0xf28: 0x028d, 0xf29: 0x028d,
	0xf2a: 0x25aa, 0xf2b: 0x25aa, 0xf2c: 0x261a, 0xf2d: 0x261a, 0xf2e: 0x25e9, 0xf2f: 0x25e9,
	0xf30: 0x2605, 0xf31: 0x2605, 0xf32: 0x25fe, 0xf33: 0x25fe, 0xf34: 0x260c, 0xf35: 0x260c,
	0xf36: 0x2613, 0xf37: 0x2613, 0xf38: 0x2613, 0xf39: 0x25f0, 0xf3a: 0x25f0, 0xf3b: 0x25f0,
	0xf3c: 0x0302, 0xf3d: 0x0302, 0xf3e: 0x0302, 0xf3f: 0x0302,
	// Block 0x3d, offset 0xf40
	0xf40: 0x25b1, 0xf41: 0x25b8, 0xf42: 0x25d4, 0xf43: 0x25f0, 0xf44: 0x25f7, 0xf45: 0x1d89,
	0xf46: 0x1d8e, 0xf47: 0x1d93, 0xf48: 0x1da2, 0xf49: 0x1db1, 0xf4a: 0x1db6, 0xf4b: 0x1dbb,
	0xf4c: 0x1dc0, 0xf4d: 0x1dc5, 0xf4e: 0x1dd4, 0xf4f: 0x1de3, 0xf50: 0x1de8, 0xf51: 0x1ded,
	0xf52: 0x1dfc, 0xf53: 0x1e0b, 0xf54: 0x1e10, 0xf55: 0x1e15, 0xf56: 0x1e1a, 0xf57: 0x1e29,
	0xf58: 0x1e2e, 0xf59: 0x1e3d, 0xf5a: 0x1e42, 0xf5b: 0x1e47, 0xf5c: 0x1e56, 0xf5d: 0x1e5b,
	0xf5e: 0x1e60, 0xf5f: 0x1e6a, 0xf60: 0x1ea6, 0xf61: 0x1eb5, 0xf62: 0x1ec4, 0xf63: 0x1ec9,
	0xf64: 0x1ece, 0xf65: 0x1ed8, 0xf66: 0x1ee7, 0xf67: 0x1eec, 0xf68: 0x1efb, 0xf69: 0x1f00,
	0xf6a: 0x1f05, 0xf6b: 0x1f14, 0xf6c: 0x1f19, 0xf6d: 0x1f28, 0xf6e: 0x1f2d, 0xf6f: 0x1f32,
	0xf70: 0x1f37, 0xf71: 0x1f3c, 0xf72: 0x1f41, 0xf73: 0x1f46, 0xf74: 0x1f4b, 0xf75: 0x1f50,
	0xf76: 0x1f55, 0xf77: 0x1f5a, 0xf78: 0x1f5f, 0xf79: 0x1f64, 0xf7a: 0x1f69, 0xf7b: 0x1f6e,
	0xf7c: 0x1f73, 0xf7d: 0x1f78, 0xf7e: 0x1f7d, 0xf7f: 0x1f87,
	// Block 0x3e, offset 0xf80
	0xf80: 0x1f8c, 0xf81: 0x1f91, 0xf82: 0x1f96, 0xf83: 0x1fa0, 0xf84: 0x1fa5, 0xf85: 0x1faf,
	0xf86: 0x1fb4, 0xf87: 0x1fb9, 0xf88: 0x1fbe, 0xf89: 0x1fc3, 0xf8a: 0x1fc8, 0xf8b: 0x1fcd,
	0xf8c: 0x1fd2, 0xf8d: 0x1fd7, 0xf8e: 0x1fe6, 0xf8f: 0x1ff5, 0xf90: 0x1ffa, 0xf91: 0x1fff,
	0xf92: 0x2004, 0xf93: 0x2009, 0xf94: 0x200e, 0xf95: 0x2018, 0xf96: 0x201d, 0xf97: 0x2022,
	0xf98: 0x2031, 0xf99: 0x2040, 0xf9a: 0x2045, 0xf9b: 0x4420, 0xf9c: 0x4426, 0xf9d: 0x445c,
	0xf9e: 0x44b3, 0xf9f: 0x44ba, 0xfa0: 0x44c1, 0xfa1: 0x44c8, 0xfa2: 0x44cf, 0xfa3: 0x44d6,
	0xfa4: 0x25c6, 0xfa5: 0x25cd, 0xfa6: 0x25d4, 0xfa7: 0x25db, 0xfa8: 0x25f0, 0xfa9: 0x25f7,
	0xfaa: 0x1d98, 0xfab: 0x1d9d, 0xfac: 0x1da2, 0xfad: 0x1da7, 0xfae: 0x1db1, 0xfaf: 0x1db6,
	0xfb0: 0x1dca, 0xfb1: 0x1dcf, 0xfb2: 0x1dd4, 0xfb3: 0x1dd9, 0xfb4: 0x1de3, 0xfb5: 0x1de8,
	0xfb6: 0x1df2, 0xfb7: 0x1df7, 0xfb8: 0x1dfc, 0xfb9: 0x1e01, 0xfba: 0x1e0b, 0xfbb: 0x1e10,
	0xfbc: 0x1f3c, 0xfbd: 0x1f41, 0xfbe: 0x1f50, 0xfbf: 0x1f55,
	// Block 0x3f, offset 0xfc0
	0xfc0: 0x1f5a, 0xfc1: 0x1f6e, 0xfc2: 0x1f73, 0xfc3: 0x1f78, 0xfc4: 0x1f7d, 0xfc5: 0x1f96,
	0xfc6: 0x1fa0, 0xfc7: 0x1fa5, 0xfc8: 0x1faa, 0xfc9: 0x1fbe, 0xfca: 0x1fdc, 0xfcb: 0x1fe1,
	0xfcc: 0x1fe6, 0xfcd: 0x1feb, 0xfce: 0x1ff5, 0xfcf: 0x1ffa, 0xfd0: 0x445c, 0xfd1: 0x2027,
	0xfd2: 0x202c, 0xfd3: 0x2031, 0xfd4: 0x2036, 0xfd5: 0x2040, 0xfd6: 0x2045, 0xfd7: 0x25b1,
	0xfd8: 0x25b8, 0xfd9: 0x25bf, 0xfda: 0x25d4, 0xfdb: 0x25e2, 0xfdc: 0x1d89, 0xfdd: 0x1d8e,
	0xfde: 0x1d93, 0xfdf: 0x1da2, 0xfe0: 0x1dac, 0xfe1: 0x1dbb, 0xfe2: 0x1dc0, 0xfe3: 0x1dc5,
	0xfe4: 0x1dd4, 0xfe5: 0x1dde, 0xfe6: 0x1dfc, 0xfe7: 0x1e15, 0xfe8: 0x1e1a, 0xfe9: 0x1e29,
	0xfea: 0x1e2e, 0xfeb: 0x1e3d, 0xfec: 0x1e47, 0xfed: 0x1e56, 0xfee: 0x1e5b, 0xfef: 0x1e60,
	0xff0: 0x1e6a, 0xff1: 0x1ea6, 0xff2: 0x1eab, 0xff3: 0x1eb5, 0xff4: 0x1ec4, 0xff5: 0x1ec9,
	0xff6: 0x1ece, 0xff7: 0x1ed8, 0xff8: 0x1ee7, 0xff9: 0x1efb, 0xffa: 0x1f00, 0xffb: 0x1f05,
	0xffc: 0x1f14, 0xffd: 0x1f19, 0xffe: 0x1f28, 0xfff: 0x1f2d,
	// Block 0x40, offset 0x1000
	0x1000: 0x1f32, 0x1001: 0x1f37, 0x1002: 0x1f46, 0x1003: 0x1f4b, 0x1004: 0x1f5f, 0x1005: 0x1f64,
	0x1006: 0x1f69, 0x1007: 0x1f6e, 0x1008: 0x1f73, 0x1009: 0x1f87, 0x100a: 0x1f8c, 0x100b: 0x1f91,
	0x100c: 0x1f96, 0x100d: 0x1f9b, 0x100e: 0x1faf, 0x100f: 0x1fb4, 0x1010: 0x1fb9, 0x1011: 0x1fbe,
	0x1012: 0x1fcd, 0x1013: 0x1fd2, 0x1014: 0x1fd7, 0x1015: 0x1fe6, 0x1016: 0x1ff0, 0x1017: 0x1fff,
	0x1018: 0x2004, 0x1019: 0x4450, 0x101a: 0x2018, 0x101b: 0x201d, 0x101c: 0x2022, 0x101d: 0x2031,
	0x101e: 0x203b, 0x101f: 0x25d4, 0x1020: 0x25e2, 0x1021: 0x1da2, 0x1022: 0x1dac, 0x1023: 0x1dd4,
	0x1024: 0x1dde, 0x1025: 0x1dfc, 0x1026: 0x1e06, 0x1027: 0x1e6a, 0x1028: 0x1e6f, 0x1029: 0x1e92,
	0x102a: 0x1e97, 0x102b: 0x1f6e, 0x102c: 0x1f73, 0x102d: 0x1f96, 0x102e: 0x1fe6, 0x102f: 0x1ff0,
	0x1030: 0x2031, 0x1031: 0x203b, 0x1032: 0x4504, 0x1033: 0x450c, 0x1034: 0x4514, 0x1035: 0x1ef1,
	0x1036: 0x1ef6, 0x1037: 0x1f0a, 0x1038: 0x1f0f, 0x1039: 0x1f1e, 0x103a: 0x1f23, 0x103b: 0x1e74,
	0x103c: 0x1e79, 0x103d: 0x1e9c, 0x103e: 0x1ea1, 0x103f: 0x1e33,
	// Block 0x41, offset 0x1040
	0x1040: 0x1e38, 0x1041: 0x1e1f, 0x1042: 0x1e24, 0x1043: 0x1e4c, 0x1044: 0x1e51, 0x1045: 0x1eba,
	0x1046: 0x1ebf, 0x1047: 0x1edd, 0x1048: 0x1ee2, 0x1049: 0x1e7e, 0x104a: 0x1e83, 0x104b: 0x1e88,
	0x104c: 0x1e92, 0x104d: 0x1e8d, 0x104e: 0x1e65, 0x104f: 0x1eb0, 0x1050: 0x1ed3, 0x1051: 0x1ef1,
	0x1052: 0x1ef6, 0x1053: 0x1f0a, 0x1054: 0x1f0f, 0x1055: 0x1f1e, 0x1056: 0x1f23, 0x1057: 0x1e74,
	0x1058: 0x1e79, 0x1059: 0x1e9c, 0x105a: 0x1ea1, 0x105b: 0x1e33, 0x105c: 0x1e38, 0x105d: 0x1e1f,
	0x105e: 0x1e24, 0x105f: 0x1e4c, 0x1060: 0x1e51, 0x1061: 0x1eba, 0x1062: 0x1ebf, 0x1063: 0x1edd,
	0x1064: 0x1ee2, 0x1065: 0x1e7e, 0x1066: 0x1e83, 0x1067: 0x1e88, 0x1068: 0x1e92, 0x1069: 0x1e8d,
	0x106a: 0x1e65, 0x106b: 0x1eb0, 0x106c: 0x1ed3, 0x106d: 0x1e7e, 0x106e: 0x1e83, 0x106f: 0x1e88,
	0x1070: 0x1e92, 0x1071: 0x1e6f, 0x1072: 0x1e97, 0x1073: 0x1eec, 0x1074: 0x1e56, 0x1075: 0x1e5b,
	0x1076: 0x1e60, 0x1077: 0x1e7e, 0x1078: 0x1e83, 0x1079: 0x1e88, 0x107a: 0x1eec, 0x107b: 0x1efb,
	0x107c: 0x4408, 0x107d: 0x4408,
	// Block 0x42, offset 0x1080
	0x1090: 0x2311, 0x1091: 0x2326,
	0x1092: 0x2326, 0x1093: 0x232d, 0x1094: 0x2334, 0x1095: 0x2349, 0x1096: 0x2350, 0x1097: 0x2357,
	0x1098: 0x237a, 0x1099: 0x237a, 0x109a: 0x239d, 0x109b: 0x2396, 0x109c: 0x23b2, 0x109d: 0x23a4,
	0x109e: 0x23ab, 0x109f: 0x23ce, 0x10a0: 0x23ce, 0x10a1: 0x23c7, 0x10a2: 0x23d5, 0x10a3: 0x23d5,
	0x10a4: 0x23ff, 0x10a5: 0x23ff, 0x10a6: 0x241b, 0x10a7: 0x23e3, 0x10a8: 0x23e3, 0x10a9: 0x23dc,
	0x10aa: 0x23f1, 0x10ab: 0x23f1, 0x10ac: 0x23f8, 0x10ad: 0x23f8, 0x10ae: 0x2422, 0x10af: 0x2430,
	0x10b0: 0x2430, 0x10b1: 0x2437, 0x10b2: 0x2437, 0x10b3: 0x243e, 0x10b4: 0x2445, 0x10b5: 0x244c,
	0x10b6: 0x2453, 0x10b7: 0x2453, 0x10b8: 0x245a, 0x10b9: 0x2468, 0x10ba: 0x2476, 0x10bb: 0x246f,
	0x10bc: 0x247d, 0x10bd: 0x247d, 0x10be: 0x2492, 0x10bf: 0x2499,
	// Block 0x43, offset 0x10c0
	0x10c0: 0x24ca, 0x10c1: 0x24d8, 0x10c2: 0x24d1, 0x10c3: 0x24b5, 0x10c4: 0x24b5, 0x10c5: 0x24df,
	0x10c6: 0x24df, 0x10c7: 0x24e6, 0x10c8: 0x24e6, 0x10c9: 0x2510, 0x10ca: 0x2517, 0x10cb: 0x251e,
	0x10cc: 0x24f4, 0x10cd: 0x2502, 0x10ce: 0x2525, 0x10cf: 0x252c,
	0x10d2: 0x24fb, 0x10d3: 0x2580, 0x10d4: 0x2587, 0x10d5: 0x255d, 0x10d6: 0x2564, 0x10d7: 0x2548,
	0x10d8: 0x2548, 0x10d9: 0x254f, 0x10da: 0x2579, 0x10db: 0x2572, 0x10dc: 0x259c, 0x10dd: 0x259c,
	0x10de: 0x230a, 0x10df: 0x231f, 0x10e0: 0x2318, 0x10e1: 0x2342, 0x10e2: 0x233b, 0x10e3: 0x2365,
	0x10e4: 0x235e, 0x10e5: 0x2388, 0x10e6: 0x236c, 0x10e7: 0x2381, 0x10e8: 0x23b9, 0x10e9: 0x2406,
	0x10ea: 0x23ea, 0x10eb: 0x2429, 0x10ec: 0x24c3, 0x10ed: 0x24ed, 0x10ee: 0x2595, 0x10ef: 0x258e,
	0x10f0: 0x25a3, 0x10f1: 0x253a, 0x10f2: 0x24a0, 0x10f3: 0x256b, 0x10f4: 0x2492, 0x10f5: 0x24ca,
	0x10f6: 0x2461, 0x10f7: 0x24ae, 0x10f8: 0x2541, 0x10f9: 0x2533, 0x10fa: 0x24bc, 0x10fb: 0x24a7,
	0x10fc: 0x24bc, 0x10fd: 0x2541, 0x10fe: 0x2373, 0x10ff: 0x238f,
	// Block 0x44, offset 0x1100
	0x1100: 0x2509, 0x1101: 0x2484, 0x1102: 0x2303, 0x1103: 0x24a7, 0x1104: 0x244c, 0x1105: 0x241b,
	0x1106: 0x23c0, 0x1107: 0x2556,
	0x1130: 0x2414, 0x1131: 0x248b, 0x1132: 0x27bf, 0x1133: 0x27b6, 0x1134: 0x27ec, 0x1135: 0x27da,
	0x1136: 0x27c8, 0x1137: 0x27e3, 0x1138: 0x27f5, 0x1139: 0x240d, 0x113a: 0x2c7c, 0x113b: 0x2afc,
	0x113c: 0x27d1,
	// Block 0x45, offset 0x1140
	0x1150: 0x0019, 0x1151: 0x0483,
	0x1152: 0x0487, 0x1153: 0x0035, 0x1154: 0x0037, 0x1155: 0x0003, 0x1156: 0x003f, 0x1157: 0x04bf,
	0x1158: 0x04c3, 0x1159: 0x1b5c,
	0x1160: 0x8132, 0x1161: 0x8132, 0x1162: 0x8132, 0x1163: 0x8132,
	0x1164: 0x8132, 0x1165: 0x8132, 0x1166: 0x8132, 0x1167: 0x812d, 0x1168: 0x812d, 0x1169: 0x812d,
	0x116a: 0x812d, 0x116b: 0x812d, 0x116c: 0x812d, 0x116d: 0x812d, 0x116e: 0x8132, 0x116f: 0x8132,
	0x1170: 0x1873, 0x1171: 0x0443, 0x1172: 0x043f, 0x1173: 0x007f, 0x1174: 0x007f, 0x1175: 0x0011,
	0x1176: 0x0013, 0x1177: 0x00b7, 0x1178: 0x00bb, 0x1179: 0x04b7, 0x117a: 0x04bb, 0x117b: 0x04ab,
	0x117c: 0x04af, 0x117d: 0x0493, 0x117e: 0x0497, 0x117f: 0x048b,
	// Block 0x46, offset 0x1180
	0x1180: 0x048f, 0x1181: 0x049b, 0x1182: 0x049f, 0x1183: 0x04a3, 0x1184: 0x04a7,
	0x1187: 0x0077, 0x1188: 0x007b, 0x1189: 0x4269, 0x118a: 0x4269, 0x118b: 0x4269,
	0x118c: 0x4269, 0x118d: 0x007f, 0x118e: 0x007f, 0x118f: 0x007f, 0x1190: 0x0019, 0x1191: 0x0483,
	0x1192: 0x001d, 0x1194: 0x0037, 0x1195: 0x0035, 0x1196: 0x003f, 0x1197: 0x0003,
	0x1198: 0x0443, 0x1199: 0x0011, 0x119a: 0x0013, 0x119b: 0x00b7, 0x119c: 0x00bb, 0x119d: 0x04b7,
	0x119e: 0x04bb, 0x119f: 0x0007, 0x11a0: 0x000d, 0x11a1: 0x0015, 0x11a2: 0x0017, 0x11a3: 0x001b,
	0x11a4: 0x0039, 0x11a5: 0x003d, 0x11a6: 0x003b, 0x11a8: 0x0079, 0x11a9: 0x0009,
	0x11aa: 0x000b, 0x11ab: 0x0041,
	0x11b0: 0x42aa, 0x11b1: 0x442c, 0x11b2: 0x42af, 0x11b4: 0x42b4,
	0x11b6: 0x42b9, 0x11b7: 0x4432, 0x11b8: 0x42be, 0x11b9: 0x4438, 0x11ba: 0x42c3, 0x11bb: 0x443e,
	0x11bc: 0x42c8, 0x11bd: 0x4444, 0x11be: 0x42cd, 0x11bf: 0x444a,
	// Block 0x47, offset 0x11c0
	0x11c0: 0x0236, 0x11c1: 0x440e, 0x11c2: 0x440e, 0x11c3: 0x4414, 0x11c4: 0x4414, 0x11c5: 0x4456,
	0x11c6: 0x4456, 0x11c7: 0x441a, 0x11c8: 0x441a, 0x11c9: 0x4462, 0x11ca: 0x4462, 0x11cb: 0x4462,
	0x11cc: 0x4462, 0x11cd: 0x0239, 0x11ce: 0x0239, 0x11cf: 0x023c, 0x11d0: 0x023c, 0x11d1: 0x023c,
	0x11d2: 0x023c, 0x11d3: 0x023f, 0x11d4: 0x023f, 0x11d5: 0x0242, 0x11d6: 0x0242, 0x11d7: 0x0242,
	0x11d8: 0x0242, 0x11d9: 0x0245, 0x11da: 0x0245, 0x11db: 0x0245, 0x11dc: 0x0245, 0x11dd: 0x0248,
	0x11de: 0x0248, 0x11df: 0x0248, 0x11e0: 0x0248, 0x11e1: 0x024b, 0x11e2: 0x024b, 0x11e3: 0x024b,
	0x11e4: 0x024b, 0x11e5: 0x024e, 0x11e6: 0x024e, 0x11e7: 0x024e, 0x11e8: 0x024e, 0x11e9: 0x0251,
	0x11ea: 0x0251, 0x11eb: 0x0254, 0x11ec: 0x0254, 0x11ed: 0x0257, 0x11ee: 0x0257, 0x11ef: 0x025a,
	0x11f0: 0x025a, 0x11f1: 0x025d, 0x11f2: 0x025d, 0x11f3: 0x025d, 0x11f4: 0x025d, 0x11f5: 0x0260,
	0x11f6: 0x0260, 0x11f7: 0x0260, 0x11f8: 0x0260, 0x11f9: 0x0263, 0x11fa: 0x0263, 0x11fb: 0x0263,
	0x11fc: 0x0263, 0x11fd: 0x0266, 0x11fe: 0x0266, 0x11ff: 0x0266,
	// Block 0x48, offset 0x1200
	0x1200: 0x0266, 0x1201: 0x0269, 0x1202: 0x0269, 0x1203: 0x0269, 0x1204: 0x0269, 0x1205: 0x026c,
	0x1206: 0x026c, 0x1207: 0x026c, 0x1208: 0x026c, 0x1209: 0x026f, 0x120a: 0x026f, 0x120b: 0x026f,
	0x120c: 0x026f, 0x120d: 0x0272, 0x120e: 0x0272, 0x120f: 0x0272, 0x1210: 0x0272, 0x1211: 0x0275,
	0x1212: 0x0275, 0x1213: 0x0275, 0x1214: 0x0275, 0x1215: 0x0278, 0x1216: 0x0278, 0x1217: 0x0278,
	0x1218: 0x0278, 0x1219: 0x027b, 0x121a: 0x027b, 0x121b: 0x027b, 0x121c: 0x027b, 0x121d: 0x027e,
	0x121e: 0x027e, 0x121f: 0x027e, 0x1220: 0x027e, 0x1221: 0x0281, 0x1222: 0x0281, 0x1223: 0x0281,
	0x1224: 0x0281, 0x1225: 0x0284, 0x1226: 0x0284, 0x1227: 0x0284, 0x1228: 0x0284, 0x1229: 0x0287,
	0x122a: 0x0287, 0x122b: 0x0287, 0x122c: 0x0287, 0x122d: 0x028a, 0x122e: 0x028a, 0x122f: 0x028d,
	0x1230: 0x028d, 0x1231: 0x0290, 0x1232: 0x0290, 0x1233: 0x0290, 0x1234: 0x0290, 0x1235: 0x2e00,
	0x1236: 0x2e00, 0x1237: 0x2e08, 0x1238: 0x2e08, 0x1239: 0x2e10, 0x123a: 0x2e10, 0x123b: 0x1f82,
	0x123c: 0x1f82,
	// Block 0x49, offset 0x1240
	0x1240: 0x0081, 0x1241: 0x0083, 0x1242: 0x0085, 0x1243: 0x0087, 0x1244: 0x0089, 0x1245: 0x008b,
	0x1246: 0x008d, 0x1247: 0x008f, 0x1248: 0x0091, 0x1249: 0x0093, 0x124a: 0x0095, 0x124b: 0x0097,
	0x124c: 0x0099, 0x124d: 0x009b, 0x124e: 0x009d, 0x124f: 0x009f, 0x1250: 0x00a1, 0x1251: 0x00a3,
	0x1252: 0x00a5, 0x1253: 0x00a7, 0x1254: 0x00a9, 0x1255: 0x00ab, 0x1256: 0x00ad, 0x1257: 0x00af,
	0x1258: 0x00b1, 0x1259: 0x00b3, 0x125a: 0x00b5, 0x125b: 0x00b7, 0x125c: 0x00b9, 0x125d: 0x00bb,
	0x125e: 0x00bd, 0x125f: 0x0477, 0x1260: 0x047b, 0x1261: 0x0487, 0x1262: 0x049b, 0x1263: 0x049f,
	0x1264: 0x0483, 0x1265: 0x05ab, 0x1266: 0x05a3, 0x1267: 0x04c7, 0x1268: 0x04cf, 0x1269: 0x04d7,
	0x126a: 0x04df, 0x126b: 0x04e7, 0x126c: 0x056b, 0x126d: 0x0573, 0x126e: 0x057b, 0x126f: 0x051f,
	0x1270: 0x05af, 0x1271: 0x04cb, 0x1272: 0x04d3, 0x1273: 0x04db, 0x1274: 0x04e3, 0x1275: 0x04eb,
	0x1276: 0x04ef, 0x1277: 0x04f3, 0x1278: 0x04f7, 0x1279: 0x04fb, 0x127a: 0x04ff, 0x127b: 0x0503,
	0x127c: 0x0507, 0x127d: 0x050b, 0x127e: 0x050f, 0x127f: 0x0513,
	// Block 0x4a, offset 0x1280
	0x1280: 0x0517, 0x1281: 0x051b, 0x1282: 0x0523, 0x1283: 0x0527, 0x1284: 0x052b, 0x1285: 0x052f,
	0x1286: 0x0533, 0x1287: 0x0537, 0x1288: 0x053b, 0x1289: 0x053f, 0x128a: 0x0543, 0x128b: 0x0547,
	0x128c: 0x054b, 0x128d: 0x054f, 0x128e: 0x0553, 0x128f: 0x0557, 0x1290: 0x055b, 0x1291: 0x055f,
	0x1292: 0x0563, 0x1293: 0x0567, 0x1294: 0x056f, 0x1295: 0x0577, 0x1296: 0x057f, 0x1297: 0x0583,
	0x1298: 0x0587, 0x1299: 0x058b, 0x129a: 0x058f, 0x129b: 0x0593, 0x129c: 0x0597, 0x129d: 0x05a7,
	0x129e: 0x4a78, 0x129f: 0x4a7e, 0x12a0: 0x03c3, 0x12a1: 0x0313, 0x12a2: 0x0317, 0x12a3: 0x4a3b,
	0x12a4: 0x031b, 0x12a5: 0x4a41, 0x12a6: 0x4a47, 0x12a7: 0x031f, 0x12a8: 0x0323, 0x12a9: 0x0327,
	0x12aa: 0x4a4d, 0x12ab: 0x4a53, 0x12ac: 0x4a59, 0x12ad: 0x4a5f, 0x12ae: 0x4a65, 0x12af: 0x4a6b,
	0x12b0: 0x0367, 0x12b1: 0x032b, 0x12b2: 0x032f, 0x12b3: 0x0333, 0x12b4: 0x037b, 0x12b5: 0x0337,
	0x12b6: 0x033b, 0x12b7: 0x033f, 0x12b8: 0x0343, 0x12b9: 0x0347, 0x12ba: 0x034b, 0x12bb: 0x034f,
	0x12bc: 0x0353, 0x12bd: 0x0357, 0x12be: 0x035b,
	// Block 0x4b, offset 0x12c0
	0x12c2: 0x49bd, 0x12c3: 0x49c3, 0x12c4: 0x49c9, 0x12c5: 0x49cf,
	0x12c6: 0x49d5, 0x12c7: 0x49db, 0x12ca: 0x49e1, 0x12cb: 0x49e7,
	0x12cc: 0x49ed, 0x12cd: 0x49f3, 0x12ce: 0x49f9, 0x12cf: 0x49ff,
	0x12d2: 0x4a05, 0x12d3: 0x4a0b, 0x12d4: 0x4a11, 0x12d5: 0x4a17, 0x12d6: 0x4a1d, 0x12d7: 0x4a23,
	0x12da: 0x4a29, 0x12db: 0x4a2f, 0x12dc: 0x4a35,
	0x12e0: 0x00bf, 0x12e1: 0x00c2, 0x12e2: 0x00cb, 0x12e3: 0x4264,
	0x12e4: 0x00c8, 0x12e5: 0x00c5, 0x12e6: 0x0447, 0x12e8: 0x046b, 0x12e9: 0x044b,
	0x12ea: 0x044f, 0x12eb: 0x0453, 0x12ec: 0x0457, 0x12ed: 0x046f, 0x12ee: 0x0473,
	// Block 0x4c, offset 0x1300
	0x1300: 0x0063, 0x1301: 0x0065, 0x1302: 0x0067, 0x1303: 0x0069, 0x1304: 0x006b, 0x1305: 0x006d,
	0x1306: 0x006f, 0x1307: 0x0071, 0x1308: 0x0073, 0x1309: 0x0075, 0x130a: 0x0083, 0x130b: 0x0085,
	0x130c: 0x0087, 0x130d: 0x0089, 0x130e: 0x008b, 0x130f: 0x008d, 0x1310: 0x008f, 0x1311: 0x0091,
	0x1312: 0x0093, 0x1313: 0x0095, 0x1314: 0x0097, 0x1315: 0x0099, 0x1316: 0x009b, 0x1317: 0x009d,
	0x1318: 0x009f, 0x1319: 0x00a1, 0x131a: 0x00a3, 0x131b: 0x00a5, 0x131c: 0x00a7, 0x131d: 0x00a9,
	0x131e: 0x00ab, 0x131f: 0x00ad, 0x1320: 0x00af, 0x1321: 0x00b1, 0x1322: 0x00b3, 0x1323: 0x00b5,
	0x1324: 0x00dd, 0x1325: 0x00f2, 0x1328: 0x0173, 0x1329: 0x0176,
	0x132a: 0x0179, 0x132b: 0x017c, 0x132c: 0x017f, 0x132d: 0x0182, 0x132e: 0x0185, 0x132f: 0x0188,
	0x1330: 0x018b, 0x1331: 0x018e, 0x1332: 0x0191, 0x1333: 0x0194, 0x1334: 0x0197, 0x1335: 0x019a,
	0x1336: 0x019d, 0x1337: 0x01a0, 0x1338: 0x01a3, 0x1339: 0x0188, 0x133a: 0x01a6, 0x133b: 0x01a9,
	0x133c: 0x01ac, 0x133d: 0x01af, 0x133e: 0x01b2, 0x133f: 0x01b5,
	// Block 0x4d, offset 0x1340
	0x1340: 0x01fd, 0x1341: 0x0200, 0x1342: 0x0203, 0x1343: 0x045b, 0x1344: 0x01c7, 0x1345: 0x01d0,
	0x1346: 0x01d6, 0x1347: 0x01fa, 0x1348: 0x01eb, 0x1349: 0x01e8, 0x134a: 0x0206, 0x134b: 0x0209,
	0x134e: 0x0021, 0x134f: 0x0023, 0x1350: 0x0025, 0x1351: 0x0027,
	0x1352: 0x0029, 0x1353: 0x002b, 0x1354: 0x002d, 0x1355: 0x002f, 0x1356: 0x0031, 0x1357: 0x0033,
	0x1358: 0x0021, 0x1359: 0x0023, 0x135a: 0x0025, 0x135b: 0x0027, 0x135c: 0x0029, 0x135d: 0x002b,
	0x135e: 0x002d, 0x135f: 0x002f, 0x1360: 0x0031, 0x1361: 0x0033, 0x1362: 0x0021, 0x1363: 0x0023,
	0x1364: 0x0025, 0x1365: 0x0027, 0x1366: 0x0029, 0x1367: 0x002b, 0x1368: 0x002d, 0x1369: 0x002f,
	0x136a: 0x0031, 0x136b: 0x0033, 0x136c: 0x0021, 0x136d: 0x0023, 0x136e: 0x0025, 0x136f: 0x0027,
	0x1370: 0x0029, 0x1371: 0x002b, 0x1372: 0x002d, 0x1373: 0x002f, 0x1374: 0x0031, 0x1375: 0x0033,
	0x1376: 0x0021, 0x1377: 0x0023, 0x1378: 0x0025, 0x1379: 0x0027, 0x137a: 0x0029, 0x137b: 0x002b,
	0x137c: 0x002d, 0x137d: 0x002f, 0x137e: 0x0031, 0x137f: 0x0033,
	// Block 0x4e, offset 0x1380
	0x1380: 0x0239, 0x1381: 0x023c, 0x1382: 0x0248, 0x1383: 0x0251, 0x1385: 0x028a,
	0x1386: 0x025a, 0x1387: 0x024b, 0x1388: 0x0269, 0x1389: 0x0290, 0x138a: 0x027b, 0x138b: 0x027e,
	0x138c: 0x0281, 0x138d: 0x0284, 0x138e: 0x025d, 0x138f: 0x026f, 0x1390: 0x0275, 0x1391: 0x0263,
	0x1392: 0x0278, 0x1393: 0x0257, 0x1394: 0x0260, 0x1395: 0x0242, 0x1396: 0x0245, 0x1397: 0x024e,
	0x1398: 0x0254, 0x1399: 0x0266, 0x139a: 0x026c, 0x139b: 0x0272, 0x139c: 0x0293, 0x139d: 0x02e4,
	0x139e: 0x02cc, 0x139f: 0x0296, 0x13a1: 0x023c, 0x13a2: 0x0248,
	0x13a4: 0x0287, 0x13a7: 0x024b, 0x13a9: 0x0290,
	0x13aa: 0x027b, 0x13ab: 0x027e, 0x13ac: 0x0281, 0x13ad: 0x0284, 0x13ae: 0x025d, 0x13af: 0x026f,
	0x13b0: 0x0275, 0x13b1: 0x0263, 0x13b2: 0x0278, 0x13b4: 0x0260, 0x13b5: 0x0242,
	0x13b6: 0x0245, 0x13b7: 0x024e, 0x13b9: 0x0266, 0x13bb: 0x0272,
	// Block 0x4f, offset 0x13c0
	0x13c2: 0x0248,
	0x13c7: 0x024b, 0x13c9: 0x0290, 0x13cb: 0x027e,
	0x13cd: 0x0284, 0x13ce: 0x025d, 0x13cf: 0x026f, 0x13d1: 0x0263,
	0x13d2: 0x0278, 0x13d4: 0x0260, 0x13d7: 0x024e,
	0x13d9: 0x0266, 0x13db: 0x0272, 0x13dd: 0x02e4,
	0x13df: 0x0296, 0x13e1: 0x023c, 0x13e2: 0x0248,
	0x13e4: 0x0287, 0x13e7: 0x024b, 0x13e8: 0x0269, 0x13e9: 0x0290,
	0x13ea: 0x027b, 0x13ec: 0x0281, 0x13ed: 0x0284, 0x13ee: 0x025d, 0x13ef: 0x026f,
	0x13f0: 0x0275, 0x13f1: 0x0263, 0x13f2: 0x0278, 0x13f4: 0x0260, 0x13f5: 0x0242,
	0x13f6: 0x0245, 0x13f7: 0x024e, 0x13f9: 0x0266, 0x13fa: 0x026c, 0x13fb: 0x0272,
	0x13fc: 0x0293, 0x13fe: 0x02cc,
	// Block 0x50, offset 0x1400
	0x1400: 0x0239, 0x1401: 0x023c, 0x1402: 0x0248, 0x1403: 0x0251, 0x1404: 0x0287, 0x1405: 0x028a,
	0x1406: 0x025a, 0x1407: 0x024b, 0x1408: 0x0269, 0x1409: 0x0290, 0x140b: 0x027e,
	0x140c: 0x0281, 0x140d: 0x0284, 0x140e: 0x025d, 0x140f: 0x026f, 0x1410: 0x0275, 0x1411: 0x0263,
	0x1412: 0x0278, 0x1413: 0x0257, 0x1414: 0x0260, 0x1415: 0x0242, 0x1416: 0x0245, 0x1417: 0x024e,
	0x1418: 0x0254, 0x1419: 0x0266, 0x141a: 0x026c, 0x141b: 0x0272,
	0x1421: 0x023c, 0x1422: 0x0248, 0x1423: 0x0251,
	0x1425: 0x028a, 0x1426: 0x025a, 0x1427: 0x024b, 0x1428: 0x0269, 0x1429: 0x0290,
	0x142b: 0x027e, 0x142c: 0x0281, 0x142d: 0x0284, 0x142e: 0x025d, 0x142f: 0x026f,
	0x1430: 0x0275, 0x1431: 0x0263, 0x1432: 0x0278, 0x1433: 0x0257, 0x1434: 0x0260, 0x1435: 0x0242,
	0x1436: 0x0245, 0x1437: 0x024e, 0x1438: 0x0254, 0x1439: 0x0266, 0x143a: 0x026c, 0x143b: 0x0272,
	// Block 0x51, offset 0x1440
	0x1440: 0x1879, 0x1441: 0x1876, 0x1442: 0x187c, 0x1443: 0x18a0, 0x1444: 0x18c4, 0x1445: 0x18e8,
	0x1446: 0x190c, 0x1447: 0x1915, 0x1448: 0x191b, 0x1449: 0x1921, 0x144a: 0x1927,
	0x1450: 0x1a8c, 0x1451: 0x1a90,
	0x1452: 0x1a94, 0x1453: 0x1a98, 0x1454: 0x1a9c, 0x1455: 0x1aa0, 0x1456: 0x1aa4, 0x1457: 0x1aa8,
	0x1458: 0x1aac, 0x1459: 0x1ab0, 0x145a: 0x1ab4, 0x145b: 0x1ab8, 0x145c: 0x1abc, 0x145d: 0x1ac0,
	0x145e: 0x1ac4, 0x145f: 0x1ac8, 0x1460: 0x1acc, 0x1461: 0x1ad0, 0x1462: 0x1ad4, 0x1463: 0x1ad8,
	0x1464: 0x1adc, 0x1465: 0x1ae0, 0x1466: 0x1ae4, 0x1467: 0x1ae8, 0x1468: 0x1aec, 0x1469: 0x1af0,
	0x146a: 0x271e, 0x146b: 0x0047, 0x146c: 0x0065, 0x146d: 0x193c, 0x146e: 0x19b1,
	0x1470: 0x0043, 0x1471: 0x0045, 0x1472: 0x0047, 0x1473: 0x0049, 0x1474: 0x004b, 0x1475: 0x004d,
	0x1476: 0x004f, 0x1477: 0x0051, 0x1478: 0x0053, 0x1479: 0x0055, 0x147a: 0x0057, 0x147b: 0x0059,
	0x147c: 0x005b, 0x147d: 0x005d, 0x147e: 0x005f, 0x147f: 0x0061,
	// Block 0x52, offset 0x1480
	0x1480: 0x26ad, 0x1481: 0x26c2, 0x1482: 0x0503,
	0x1490: 0x0c0f, 0x1491: 0x0a47,
	0x1492: 0x08d3, 0x1493: 0x45c4, 0x1494: 0x071b, 0x1495: 0x09ef, 0x1496: 0x132f, 0x1497: 0x09ff,
	0x1498: 0x0727, 0x1499: 0x0cd7, 0x149a: 0x0eaf, 0x149b: 0x0caf, 0x149c: 0x0827, 0x149d: 0x0b6b,
	0x149e: 0x07bf, 0x149f: 0x0cb7, 0x14a0: 0x0813, 0x14a1: 0x1117, 0x14a2: 0x0f83, 0x14a3: 0x138b,
	0x14a4: 0x09d3, 0x14a5: 0x090b, 0x14a6: 0x0e63, 0x14a7: 0x0c1b, 0x14a8: 0x0c47, 0x14a9: 0x06bf,
	0x14aa: 0x06cb, 0x14ab: 0x140b, 0x14ac: 0x0adb, 0x14ad: 0x06e7, 0x14ae: 0x08ef, 0x14af: 0x0c3b,
	0x14b0: 0x13b3, 0x14b1: 0x0c13, 0x14b2: 0x106f, 0x14b3: 0x10ab, 0x14b4: 0x08f7, 0x14b5: 0x0e43,
	0x14b6: 0x0d0b, 0x14b7: 0x0d07, 0x14b8: 0x0f97, 0x14b9: 0x082b, 0x14ba: 0x0957, 0x14bb: 0x1443,
	// Block 0x53, offset 0x14c0
	0x14c0: 0x06fb, 0x14c1: 0x06f3, 0x14c2: 0x0703, 0x14c3: 0x1647, 0x14c4: 0x0747, 0x14c5: 0x0757,
	0x14c6: 0x075b, 0x14c7: 0x0763, 0x14c8: 0x076b, 0x14c9: 0x076f, 0x14ca: 0x077b, 0x14cb: 0x0773,
	0x14cc: 0x05b3, 0x14cd: 0x165b, 0x14ce: 0x078f, 0x14cf: 0x0793, 0x14d0: 0x0797, 0x14d1: 0x07b3,
	0x14d2: 0x164c, 0x14d3: 0x05b7, 0x14d4: 0x079f, 0x14d5: 0x07bf, 0x14d6: 0x1656, 0x14d7: 0x07cf,
	0x14d8: 0x07d7, 0x14d9: 0x0737, 0x14da: 0x07df, 0x14db: 0x07e3, 0x14dc: 0x1831, 0x14dd: 0x07ff,
	0x14de: 0x0807, 0x14df: 0x05bf, 0x14e0: 0x081f, 0x14e1: 0x0823, 0x14e2: 0x082b, 0x14e3: 0x082f,
	0x14e4: 0x05c3, 0x14e5: 0x0847, 0x14e6: 0x084b, 0x14e7: 0x0857, 0x14e8: 0x0863, 0x14e9: 0x0867,
	0x14ea: 0x086b, 0x14eb: 0x0873, 0x14ec: 0x0893, 0x14ed: 0x0897, 0x14ee: 0x089f, 0x14ef: 0x08af,
	0x14f0: 0x08b7, 0x14f1: 0x08bb, 0x14f2: 0x08bb, 0x14f3: 0x08bb, 0x14f4: 0x166a, 0x14f5: 0x0e93,
	0x14f6: 0x08cf, 0x14f7: 0x08d7, 0x14f8: 0x166f, 0x14f9: 0x08e3, 0x14fa: 0x08eb, 0x14fb: 0x08f3,
	0x14fc: 0x091b, 0x14fd: 0x0907, 0x14fe: 0x0913, 0x14ff: 0x0917,
	// Block 0x54, offset 0x1500
	0x1500: 0x091f, 0x1501: 0x0927, 0x1502: 0x092b, 0x1503: 0x0933, 0x1504: 0x093b, 0x1505: 0x093f,
	0x1506: 0x093f, 0x1507: 0x0947, 0x1508: 0x094f, 0x1509: 0x0953, 0x150a: 0x095f, 0x150b: 0x0983,
	0x150c: 0x0967, 0x150d: 0x0987, 0x150e: 0x096b, 0x150f: 0x0973, 0x1510: 0x080b, 0x1511: 0x09cf,
	0x1512: 0x0997, 0x1513: 0x099b, 0x1514: 0x099f, 0x1515: 0x0993, 0x1516: 0x09a7, 0x1517: 0x09a3,
	0x1518: 0x09bb, 0x1519: 0x1674, 0x151a: 0x09d7, 0x151b: 0x09db, 0x151c: 0x09e3, 0x151d: 0x09ef,
	0x151e: 0x09f7, 0x151f: 0x0a13, 0x1520: 0x1679, 0x1521: 0x167e, 0x1522: 0x0a1f, 0x1523: 0x0a23,
	0x1524: 0x0a27, 0x1525: 0x0a1b, 0x1526: 0x0a2f, 0x1527: 0x05c7, 0x1528: 0x05cb, 0x1529: 0x0a37,
	0x152a: 0x0a3f, 0x152b: 0x0a3f, 0x152c: 0x1683, 0x152d: 0x0a5b, 0x152e: 0x0a5f, 0x152f: 0x0a63,
	0x1530: 0x0a6b, 0x1531: 0x1688, 0x1532: 0x0a73, 0x1533: 0x0a77, 0x1534: 0x0b4f, 0x1535: 0x0a7f,
	0x1536: 0x05cf, 0x1537: 0x0a8b, 0x1538: 0x0a9b, 0x1539: 0x0aa7, 0x153a: 0x0aa3, 0x153b: 0x1692,
	0x153c: 0x0aaf, 0x153d: 0x1697, 0x153e: 0x0abb, 0x153f: 0x0ab7,
	// Block 0x55, offset 0x1540
	0x1540: 0x0abf, 0x1541: 0x0acf, 0x1542: 0x0ad3, 0x1543: 0x05d3, 0x1544: 0x0ae3, 0x1545: 0x0aeb,
	0x1546: 0x0aef, 0x1547: 0x0af3, 0x1548: 0x05d7, 0x1549: 0x169c, 0x154a: 0x05db, 0x154b: 0x0b0f,
	0x154c: 0x0b13, 0x154d: 0x0b17, 0x154e: 0x0b1f, 0x154f: 0x1863, 0x1550: 0x0b37, 0x1551: 0x16a6,
	0x1552: 0x16a6, 0x1553: 0x11d7, 0x1554: 0x0b47, 0x1555: 0x0b47, 0x1556: 0x05df, 0x1557: 0x16c9,
	0x1558: 0x179b, 0x1559: 0x0b57, 0x155a: 0x0b5f, 0x155b: 0x05e3, 0x155c: 0x0b73, 0x155d: 0x0b83,
	0x155e: 0x0b87, 0x155f: 0x0b8f, 0x1560: 0x0b9f, 0x1561: 0x05eb, 0x1562: 0x05e7, 0x1563: 0x0ba3,
	0x1564: 0x16ab, 0x1565: 0x0ba7, 0x1566: 0x0bbb, 0x1567: 0x0bbf, 0x1568: 0x0bc3, 0x1569: 0x0bbf,
	0x156a: 0x0bcf, 0x156b: 0x0bd3, 0x156c: 0x0be3, 0x156d: 0x0bdb, 0x156e: 0x0bdf, 0x156f: 0x0be7,
	0x1570: 0x0beb, 0x1571: 0x0bef, 0x1572: 0x0bfb, 0x1573: 0x0bff, 0x1574: 0x0c17, 0x1575: 0x0c1f,
	0x1576: 0x0c2f, 0x1577: 0x0c43, 0x1578: 0x16ba, 0x1579: 0x0c3f, 0x157a: 0x0c33, 0x157b: 0x0c4b,
	0x157c: 0x0c53, 0x157d: 0x0c67, 0x157e: 0x16bf, 0x157f: 0x0c6f,
	// Block 0x56, offset 0x1580
	0x1580: 0x0c63, 0x1581: 0x0c5b, 0x1582: 0x05ef, 0x1583: 0x0c77, 0x1584: 0x0c7f, 0x1585: 0x0c87,
	0x1586: 0x0c7b, 0x1587: 0x05f3, 0x1588: 0x0c97, 0x1589: 0x0c9f, 0x158a: 0x16c4, 0x158b: 0x0ccb,
	0x158c: 0x0cff, 0x158d: 0x0cdb, 0x158e: 0x05ff, 0x158f: 0x0ce7, 0x1590: 0x05fb, 0x1591: 0x05f7,
	0x1592: 0x07c3, 0x1593: 0x07c7, 0x1594: 0x0d03, 0x1595: 0x0ceb, 0x1596: 0x11ab, 0x1597: 0x0663,
	0x1598: 0x0d0f, 0x1599: 0x0d13, 0x159a: 0x0d17, 0x159b: 0x0d2b, 0x159c: 0x0d23, 0x159d: 0x16dd,
	0x159e: 0x0603, 0x159f: 0x0d3f, 0x15a0: 0x0d33, 0x15a1: 0x0d4f, 0x15a2: 0x0d57, 0x15a3: 0x16e7,
	0x15a4: 0x0d5b, 0x15a5: 0x0d47, 0x15a6: 0x0d63, 0x15a7: 0x0607, 0x15a8: 0x0d67, 0x15a9: 0x0d6b,
	0x15aa: 0x0d6f, 0x15ab: 0x0d7b, 0x15ac: 0x16ec, 0x15ad: 0x0d83, 0x15ae: 0x060b, 0x15af: 0x0d8f,
	0x15b0: 0x16f1, 0x15b1: 0x0d93, 0x15b2: 0x060f, 0x15b3: 0x0d9f, 0x15b4: 0x0dab, 0x15b5: 0x0db7,
	0x15b6: 0x0dbb, 0x15b7: 0x16f6, 0x15b8: 0x168d, 0x15b9: 0x16fb, 0x15ba: 0x0ddb, 0x15bb: 0x1700,
	0x15bc: 0x0de7, 0x15bd: 0x0def, 0x15be: 0x0ddf, 0x15bf: 0x0dfb,
	// Block 0x57, offset 0x15c0
	0x15c0: 0x0e0b, 0x15c1: 0x0e1b, 0x15c2: 0x0e0f, 0x15c3: 0x0e13, 0x15c4: 0x0e1f, 0x15c5: 0x0e23,
	0x15c6: 0x1705, 0x15c7: 0x0e07, 0x15c8: 0x0e3b, 0x15c9: 0x0e3f, 0x15ca: 0x0613, 0x15cb: 0x0e53,
	0x15cc: 0x0e4f, 0x15cd: 0x170a, 0x15ce: 0x0e33, 0x15cf: 0x0e6f, 0x15d0: 0x170f, 0x15d1: 0x1714,
	0x15d2: 0x0e73, 0x15d3: 0x0e87, 0x15d4: 0x0e83, 0x15d5: 0x0e7f, 0x15d6: 0x0617, 0x15d7: 0x0e8b,
	0x15d8: 0x0e9b, 0x15d9: 0x0e97, 0x15da: 0x0ea3, 0x15db: 0x1651, 0x15dc: 0x0eb3, 0x15dd: 0x1719,
	0x15de: 0x0ebf, 0x15df: 0x1723, 0x15e0: 0x0ed3, 0x15e1: 0x0edf, 0x15e2: 0x0ef3, 0x15e3: 0x1728,
	0x15e4: 0x0f07, 0x15e5: 0x0f0b, 0x15e6: 0x172d, 0x15e7: 0x1732, 0x15e8: 0x0f27, 0x15e9: 0x0f37,
	0x15ea: 0x061b, 0x15eb: 0x0f3b, 0x15ec: 0x061f, 0x15ed: 0x061f, 0x15ee: 0x0f53, 0x15ef: 0x0f57,
	0x15f0: 0x0f5f, 0x15f1: 0x0f63, 0x15f2: 0x0f6f, 0x15f3: 0x0623, 0x15f4: 0x0f87, 0x15f5: 0x1737,
	0x15f6: 0x0fa3, 0x15f7: 0x173c, 0x15f8: 0x0faf, 0x15f9: 0x16a1, 0x15fa: 0x0fbf, 0x15fb: 0x1741,
	0x15fc: 0x1746, 0x15fd: 0x174b, 0x15fe: 0x0627, 0x15ff: 0x062b,
	// Block 0x58, offset 0x1600
	0x1600: 0x0ff7, 0x1601: 0x1755, 0x1602: 0x1750, 0x1603: 0x175a, 0x1604: 0x175f, 0x1605: 0x0fff,
	0x1606: 0x1003, 0x1607: 0x1003, 0x1608: 0x100b, 0x1609: 0x0633, 0x160a: 0x100f, 0x160b: 0x0637,
	0x160c: 0x063b, 0x160d: 0x1769, 0x160e: 0x1023, 0x160f: 0x102b, 0x1610: 0x1037, 0x1611: 0x063f,
	0x1612: 0x176e, 0x1613: 0x105b, 0x1614: 0x1773, 0x1615: 0x1778, 0x1616: 0x107b, 0x1617: 0x1093,
	0x1618: 0x0643, 0x1619: 0x109b, 0x161a: 0x109f, 0x161b: 0x10a3, 0x161c: 0x177d, 0x161d: 0x1782,
	0x161e: 0x1782, 0x161f: 0x10bb, 0x1620: 0x0647, 0x1621: 0x1787, 0x1622: 0x10cf, 0x1623: 0x10d3,
	0x1624: 0x064b, 0x1625: 0x178c, 0x1626: 0x10ef, 0x1627: 0x064f, 0x1628: 0x10ff, 0x1629: 0x10f7,
	0x162a: 0x1107, 0x162b: 0x1796, 0x162c: 0x111f, 0x162d: 0x0653, 0x162e: 0x112b, 0x162f: 0x1133,
	0x1630: 0x1143, 0x1631: 0x0657, 0x1632: 0x17a0, 0x1633: 0x17a5, 0x1634: 0x065b, 0x1635: 0x17aa,
	0x1636: 0x115b, 0x1637: 0x17af, 0x1638: 0x1167, 0x1639: 0x1173, 0x163a: 0x117b, 0x163b: 0x17b4,
	0x163c: 0x17b9, 0x163d: 0x118f, 0x163e: 0x17be, 0x163f: 0x1197,
	// Block 0x59, offset 0x1640
	0x1640: 0x16ce, 0x1641: 0x065f, 0x1642: 0x11af, 0x1643: 0x11b3, 0x1644: 0x0667, 0x1645: 0x11b7,
	0x1646: 0x0a33, 0x1647: 0x17c3, 0x1648: 0x17c8, 0x1649: 0x16d3, 0x164a: 0x16d8, 0x164b: 0x11d7,
	0x164c: 0x11db, 0x164d: 0x13f3, 0x164e: 0x066b, 0x164f: 0x1207, 0x1650: 0x1203, 0x1651: 0x120b,
	0x1652: 0x083f, 0x1653: 0x120f, 0x1654: 0x1213, 0x1655: 0x1217, 0x1656: 0x121f, 0x1657: 0x17cd,
	0x1658: 0x121b, 0x1659: 0x1223, 0x165a: 0x1237, 0x165b: 0x123b, 0x165c: 0x1227, 0x165d: 0x123f,
	0x165e: 0x1253, 0x165f: 0x1267, 0x1660: 0x1233, 0x1661: 0x1247, 0x1662: 0x124b, 0x1663: 0x124f,
	0x1664: 0x17d2, 0x1665: 0x17dc, 0x1666: 0x17d7, 0x1667: 0x066f, 0x1668: 0x126f, 0x1669: 0x1273,
	0x166a: 0x127b, 0x166b: 0x17f0, 0x166c: 0x127f, 0x166d: 0x17e1, 0x166e: 0x0673, 0x166f: 0x0677,
	0x1670: 0x17e6, 0x1671: 0x17eb, 0x1672: 0x067b, 0x1673: 0x129f, 0x1674: 0x12a3, 0x1675: 0x12a7,
	0x1676: 0x12ab, 0x1677: 0x12b7, 0x1678: 0x12b3, 0x1679: 0x12bf, 0x167a: 0x12bb, 0x167b: 0x12cb,
	0x167c: 0x12c3, 0x167d: 0x12c7, 0x167e: 0x12cf, 0x167f: 0x067f,
	// Block 0x5a, offset 0x1680
	0x1680: 0x12d7, 0x1681: 0x12db, 0x1682: 0x0683, 0x1683: 0x12eb, 0x1684: 0x12ef, 0x1685: 0x17f5,
	0x1686: 0x12fb, 0x1687: 0x12ff, 0x1688: 0x0687, 0x1689: 0x130b, 0x168a: 0x05bb, 0x168b: 0x17fa,
	0x168c: 0x17ff, 0x168d: 0x068b, 0x168e: 0x068f, 0x168f: 0x1337, 0x1690: 0x134f, 0x1691: 0x136b,
	0x1692: 0x137b, 0x1693: 0x1804, 0x1694: 0x138f, 0x1695: 0x1393, 0x1696: 0x13ab, 0x1697: 0x13b7,
	0x1698: 0x180e, 0x1699: 0x1660, 0x169a: 0x13c3, 0x169b: 0x13bf, 0x169c: 0x13cb, 0x169d: 0x1665,
	0x169e: 0x13d7, 0x169f: 0x13e3, 0x16a0: 0x1813, 0x16a1: 0x1818, 0x16a2: 0x1423, 0x16a3: 0x142f,
	0x16a4: 0x1437, 0x16a5: 0x181d, 0x16a6: 0x143b, 0x16a7: 0x1467, 0x16a8: 0x1473, 0x16a9: 0x1477,
	0x16aa: 0x146f, 0x16ab: 0x1483, 0x16ac: 0x1487, 0x16ad: 0x1822, 0x16ae: 0x1493, 0x16af: 0x0693,
	0x16b0: 0x149b, 0x16b1: 0x1827, 0x16b2: 0x0697, 0x16b3: 0x14d3, 0x16b4: 0x0ac3, 0x16b5: 0x14eb,
	0x16b6: 0x182c, 0x16b7: 0x1836, 0x16b8: 0x069b, 0x16b9: 0x069f, 0x16ba: 0x1513, 0x16bb: 0x183b,
	0x16bc: 0x06a3, 0x16bd: 0x1840, 0x16be: 0x152b, 0x16bf: 0x152b,
	// Block 0x5b, offset 0x16c0
	0x16c0: 0x1533, 0x16c1: 0x1845, 0x16c2: 0x154b, 0x16c3: 0x06a7, 0x16c4: 0x155b, 0x16c5: 0x1567,
	0x16c6: 0x156f, 0x16c7: 0x1577, 0x16c8: 0x06ab, 0x16c9: 0x184a, 0x16ca: 0x158b, 0x16cb: 0x15a7,
	0x16cc: 0x15b3, 0x16cd: 0x06af, 0x16ce: 0x06b3, 0x16cf: 0x15b7, 0x16d0: 0x184f, 0x16d1: 0x06b7,
	0x16d2: 0x1854, 0x16d3: 0x1859, 0x16d4: 0x185e, 0x16d5: 0x15db, 0x16d6: 0x06bb, 0x16d7: 0x15ef,
	0x16d8: 0x15f7, 0x16d9: 0x15fb, 0x16da: 0x1603, 0x16db: 0x160b, 0x16dc: 0x1613, 0x16dd: 0x1868,
}

// nfkcIndex: 22 blocks, 1408 entries, 1408 bytes
// Block 0 is the zero block.
var nfkcIndex = [1408]uint8{
	// Block 0x0, offset 0x0
	// Block 0x1, offset 0x40
	// Block 0x2, offset 0x80
	// Block 0x3, offset 0xc0
	0xc2: 0x5a, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x5b, 0xc7: 0x04,
	0xc8: 0x05, 0xca: 0x5c, 0xcb: 0x5d, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x09,
	0xd0: 0x0a, 0xd1: 0x5e, 0xd2: 0x5f, 0xd3: 0x0b, 0xd6: 0x0c, 0xd7: 0x60,
	0xd8: 0x61, 0xd9: 0x0d, 0xdb: 0x62, 0xdc: 0x63, 0xdd: 0x64, 0xdf: 0x65,
	0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05,
	0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a,
	0xf0: 0x13,
	// Block 0x4, offset 0x100
	0x120: 0x66, 0x121: 0x67, 0x123: 0x68, 0x124: 0x69, 0x125: 0x6a, 0x126: 0x6b, 0x127: 0x6c,
	0x128: 0x6d, 0x129: 0x6e, 0x12a: 0x6f, 0x12b: 0x70, 0x12c: 0x6b, 0x12d: 0x71, 0x12e: 0x72, 0x12f: 0x73,
	0x131: 0x74, 0x132: 0x75, 0x133: 0x76, 0x134: 0x77, 0x135: 0x78, 0x137: 0x79,
	0x138: 0x7a, 0x139: 0x7b, 0x13a: 0x7c, 0x13b: 0x7d, 0x13c: 0x7e, 0x13d: 0x7f, 0x13e: 0x80, 0x13f: 0x81,
	// Block 0x5, offset 0x140
	0x140: 0x82, 0x142: 0x83, 0x143: 0x84, 0x144: 0x85, 0x145: 0x86, 0x146: 0x87, 0x147: 0x88,
	0x14d: 0x89,
	0x15c: 0x8a, 0x15f: 0x8b,
	0x162: 0x8c, 0x164: 0x8d,
	0x168: 0x8e, 0x169: 0x8f, 0x16a: 0x90, 0x16c: 0x0e, 0x16d: 0x91, 0x16e: 0x92, 0x16f: 0x93,
	0x170: 0x94, 0x173: 0x95, 0x174: 0x96, 0x175: 0x0f, 0x176: 0x10, 0x177: 0x97,
	0x178: 0x11, 0x179: 0x12, 0x17a: 0x13, 0x17b: 0x14, 0x17c: 0x15, 0x17d: 0x16, 0x17e: 0x17, 0x17f: 0x18,
	// Block 0x6, offset 0x180
	0x180: 0x98, 0x181: 0x99, 0x182: 0x9a, 0x183: 0x9b, 0x184: 0x19, 0x185: 0x1a, 0x186: 0x9c, 0x187: 0x9d,
	0x188: 0x9e, 0x189: 0x1b, 0x18a: 0x1c, 0x18b: 0x9f, 0x18c: 0xa0,
	0x191: 0x1d, 0x192: 0x1e, 0x193: 0xa1,
	0x1a8: 0xa2, 0x1a9: 0xa3, 0x1ab: 0xa4,
	0x1b1: 0xa5, 0x1b3: 0xa6, 0x1b5: 0xa7, 0x1b7: 0xa8,
	0x1ba: 0xa9, 0x1bb: 0xaa, 0x1bc: 0x1f, 0x1bd: 0x20, 0x1be: 0x21, 0x1bf: 0xab,
	// Block 0x7, offset 0x1c0
	0x1c0: 0xac, 0x1c1: 0x22, 0x1c2: 0x23, 0x1c3: 0x24, 0x1c4: 0xad, 0x1c5: 0x25, 0x1c6: 0x26,
	0x1c8: 0x27, 0x1c9: 0x28, 0x1ca: 0x29, 0x1cb: 0x2a, 0x1cc: 0x2b, 0x1cd: 0x2c, 0x1ce: 0x2d, 0x1cf: 0x2e,
	// Block 0x8, offset 0x200
	0x219: 0xae, 0x21a: 0xaf, 0x21b: 0xb0, 0x21d: 0xb1, 0x21f: 0xb2,
	0x220: 0xb3, 0x223: 0xb4, 0x224: 0xb5, 0x225: 0xb6, 0x226: 0xb7, 0x227: 0xb8,
	0x22a: 0xb9, 0x22b: 0xba, 0x22d: 0xbb, 0x22f: 0xbc,
	0x230: 0xbd, 0x231: 0xbe, 0x232: 0xbf, 0x233: 0xc0, 0x234: 0xc1, 0x235: 0xc2, 0x236: 0xc3, 0x237: 0xbd,
	0x238: 0xbe, 0x239: 0xbf, 0x23a: 0xc0, 0x23b: 0xc1, 0x23c: 0xc2, 0x23d: 0xc3, 0x23e: 0xbd, 0x23f: 0xbe,
	// Block 0x9, offset 0x240
	0x240: 0xbf, 0x241: 0xc0, 0x242: 0xc1, 0x243: 0xc2, 0x244: 0xc3, 0x245: 0xbd, 0x246: 0xbe, 0x247: 0xbf,
	0x248: 0xc0, 0x249: 0xc1, 0x24a: 0xc2, 0x24b: 0xc3, 0x24c: 0xbd, 0x24d: 0xbe, 0x24e: 0xbf, 0x24f: 0xc0,
	0x250: 0xc1, 0x251: 0xc2, 0x252: 0xc3, 0x253: 0xbd, 0x254: 0xbe, 0x255: 0xbf, 0x256: 0xc0, 0x257: 0xc1,
	0x258: 0xc2, 0x259: 0xc3, 0x25a: 0xbd, 0x25b: 0xbe, 0x25c: 0xbf, 0x25d: 0xc0, 0x25e: 0xc1, 0x25f: 0xc2,
	0x260: 0xc3, 0x261: 0xbd, 0x262: 0xbe, 0x263: 0xbf, 0x264: 0xc0, 0x265: 0xc1, 0x266: 0xc2, 0x267: 0xc3,
	0x268: 0xbd, 0x269: 0xbe, 0x26a: 0xbf, 0x26b: 0xc0, 0x26c: 0xc1, 0x26d: 0xc2, 0x26e: 0xc3, 0x26f: 0xbd,
	0x270: 0xbe, 0x271: 0xbf, 0x272: 0xc0, 0x273: 0xc1, 0x274: 0xc2, 0x275: 0xc3, 0x276: 0xbd, 0x277: 0xbe,
	0x278: 0xbf, 0x279: 0xc0, 0x27a: 0xc1, 0x27b: 0xc2, 0x27c: 0xc3, 0x27d: 0xbd, 0x27e: 0xbe, 0x27f: 0xbf,
	// Block 0xa, offset 0x280
	0x280: 0xc0, 0x281: 0xc1, 0x282: 0xc2, 0x283: 0xc3, 0x284: 0xbd, 0x285: 0xbe, 0x286: 0xbf, 0x287: 0xc0,
	0x288: 0xc1, 0x289: 0xc2, 0x28a: 0xc3, 0x28b: 0xbd, 0x28c: 0xbe, 0x28d: 0xbf, 0x28e: 0xc0, 0x28f: 0xc1,
	0x290: 0xc2, 0x291: 0xc3, 0x292: 0xbd, 0x293: 0xbe, 0x294: 0xbf, 0x295: 0xc0, 0x296: 0xc1, 0x297: 0xc2,
	0x298: 0xc3, 0x299: 0xbd, 0x29a: 0xbe, 0x29b: 0xbf, 0x29c: 0xc0, 0x29d: 0xc1, 0x29e: 0xc2, 0x29f: 0xc3,
	0x2a0: 0xbd, 0x2a1: 0xbe, 0x2a2: 0xbf, 0x2a3: 0xc0, 0x2a4: 0xc1, 0x2a5: 0xc2, 0x2a6: 0xc3, 0x2a7: 0xbd,
	0x2a8: 0xbe, 0x2a9: 0xbf, 0x2aa: 0xc0, 0x2ab: 0xc1, 0x2ac: 0xc2, 0x2ad: 0xc3, 0x2ae: 0xbd, 0x2af: 0xbe,
	0x2b0: 0xbf, 0x2b1: 0xc0, 0x2b2: 0xc1, 0x2b3: 0xc2, 0x2b4: 0xc3, 0x2b5: 0xbd, 0x2b6: 0xbe, 0x2b7: 0xbf,
	0x2b8: 0xc0, 0x2b9: 0xc1, 0x2ba: 0xc2, 0x2bb: 0xc3, 0x2bc: 0xbd, 0x2bd: 0xbe, 0x2be: 0xbf, 0x2bf: 0xc0,
	// Block 0xb, offset 0x2c0
	0x2c0: 0xc1, 0x2c1: 0xc2, 0x2c2: 0xc3, 0x2c3: 0xbd, 0x2c4: 0xbe, 0x2c5: 0xbf, 0x2c6: 0xc0, 0x2c7: 0xc1,
	0x2c8: 0xc2, 0x2c9: 0xc3, 0x2ca: 0xbd, 0x2cb: 0xbe, 0x2cc: 0xbf, 0x2cd: 0xc0, 0x2ce: 0xc1, 0x2cf: 0xc2,
	0x2d0: 0xc3, 0x2d1: 0xbd, 0x2d2: 0xbe, 0x2d3: 0xbf, 0x2d4: 0xc0, 0x2d5: 0xc1, 0x2d6: 0xc2, 0x2d7: 0xc3,
	0x2d8: 0xbd, 0x2d9: 0xbe, 0x2da: 0xbf, 0x2db: 0xc0, 0x2dc: 0xc1, 0x2dd: 0xc2, 0x2de: 0xc4,
	// Block 0xc, offset 0x300
	0x324: 0x2f, 0x325: 0x30, 0x326: 0x31, 0x327: 0x32,
	0x328: 0x33, 0x329: 0x34, 0x32a: 0x35, 0x32b: 0x36, 0x32c: 0x37, 0x32d: 0x38, 0x32e: 0x39, 0x32f: 0x3a,
	0x330: 0x3b, 0x331: 0x3c, 0x332: 0x3d, 0x333: 0x3e, 0x334: 0x3f, 0x335: 0x40, 0x336: 0x41, 0x337: 0x42,
	0x338: 0x43, 0x339: 0x44, 0x33a: 0x45, 0x33b: 0x46, 0x33c: 0xc5, 0x33d: 0x47, 0x33e: 0x48, 0x33f: 0x49,
	// Block 0xd, offset 0x340
	0x347: 0xc6,
	0x34b: 0xc7, 0x34d: 0xc8,
	0x368: 0xc9, 0x36b: 0xca,
	// Block 0xe, offset 0x380
	0x381: 0xcb, 0x382: 0xcc, 0x384: 0xcd, 0x385: 0xb7, 0x387: 0xce,
	0x388: 0xcf, 0x38b: 0xd0, 0x38c: 0x6b, 0x38d: 0xd1,
	0x391: 0xd2, 0x392: 0xd3, 0x393: 0xd4, 0x396: 0xd5, 0x397: 0xd6,
	0x398: 0xd7, 0x39a: 0xd8, 0x39c: 0xd9,
	0x3b0: 0xd7,
	// Block 0xf, offset 0x3c0
	0x3eb: 0xda, 0x3ec: 0xdb,
	// Block 0x10, offset 0x400
	0x432: 0xdc,
	// Block 0x11, offset 0x440
	0x445: 0xdd, 0x446: 0xde, 0x447: 0xdf,
	0x449: 0xe0,
	0x450: 0xe1, 0x451: 0xe2, 0x452: 0xe3, 0x453: 0xe4, 0x454: 0xe5, 0x455: 0xe6, 0x456: 0xe7, 0x457: 0xe8,
	0x458: 0xe9, 0x459: 0xea, 0x45a: 0x4a, 0x45b: 0xeb, 0x45c: 0xec, 0x45d: 0xed, 0x45e: 0xee, 0x45f: 0x4b,
	// Block 0x12, offset 0x480
	0x480: 0xef,
	0x4a3: 0xf0, 0x4a5: 0xf1,
	0x4b8: 0x4c, 0x4b9: 0x4d, 0x4ba: 0x4e,
	// Block 0x13, offset 0x4c0
	0x4c4: 0x4f, 0x4c5: 0xf2, 0x4c6: 0xf3,
	0x4c8: 0x50, 0x4c9: 0xf4,
	// Block 0x14, offset 0x500
	0x520: 0x51, 0x521: 0x52, 0x522: 0x53, 0x523: 0x54, 0x524: 0x55, 0x525: 0x56, 0x526: 0x57, 0x527: 0x58,
	0x528: 0x59,
	// Block 0x15, offset 0x540
	0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d,
	0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11,
	0x56f: 0x12,
}

// nfkcSparseOffset: 155 entries, 310 bytes
var nfkcSparseOffset = []uint16{0x0, 0xe, 0x12, 0x1b, 0x25, 0x35, 0x37, 0x3c, 0x47, 0x56, 0x63, 0x6b, 0x6f, 0x74, 0x76, 0x87, 0x8f, 0x96, 0x99, 0xa0, 0xa4, 0xa8, 0xaa, 0xac, 0xb5, 0xb9, 0xc0, 0xc5, 0xc8, 0xd2, 0xd4, 0xdb, 0xe3, 0xe7, 0xe9, 0xec, 0xf0, 0xf6, 0x107, 0x113, 0x115, 0x11b, 0x11d, 0x11f, 0x121, 0x123, 0x125, 0x127, 0x129, 0x12c, 0x12f, 0x131, 0x134, 0x137, 0x13b, 0x140, 0x149, 0x14b, 0x14e, 0x150, 0x15b, 0x166, 0x176, 0x184, 0x192, 0x1a2, 0x1b0, 0x1b7, 0x1bd, 0x1cc, 0x1d0, 0x1d2, 0x1d6, 0x1d8, 0x1db, 0x1dd, 0x1e0, 0x1e2, 0x1e5, 0x1e7, 0x1e9, 0x1eb, 0x1f7, 0x201, 0x20b, 0x20e, 0x212, 0x214, 0x216, 0x218, 0x21a, 0x21d, 0x21f, 0x221, 0x223, 0x225, 0x22b, 0x22e, 0x232, 0x234, 0x23b, 0x241, 0x247, 0x24f, 0x255, 0x25b, 0x261, 0x265, 0x267, 0x269, 0x26b, 0x26d, 0x273, 0x276, 0x279, 0x281, 0x288, 0x28b, 0x28e, 0x290, 0x298, 0x29b, 0x2a2, 0x2a5, 0x2ab, 0x2ad, 0x2af, 0x2b2, 0x2b4, 0x2b6, 0x2b8, 0x2ba, 0x2c7, 0x2d1, 0x2d3, 0x2d5, 0x2d9, 0x2de, 0x2ea, 0x2ef, 0x2f8, 0x2fe, 0x303, 0x307, 0x30c, 0x310, 0x320, 0x32e, 0x33c, 0x34a, 0x350, 0x352, 0x355, 0x35f, 0x361}

// nfkcSparseValues: 875 entries, 3500 bytes
var nfkcSparseValues = [875]valueRange{
	// Block 0x0, offset 0x0
	{value: 0x0002, lo: 0x0d},
	{value: 0x0001, lo: 0xa0, hi: 0xa0},
	{value: 0x4278, lo: 0xa8, hi: 0xa8},
	{value: 0x0083, lo: 0xaa, hi: 0xaa},
	{value: 0x4264, lo: 0xaf, hi: 0xaf},
	{value: 0x0025, lo: 0xb2, hi: 0xb3},
	{value: 0x425a, lo: 0xb4, hi: 0xb4},
	{value: 0x01dc, lo: 0xb5, hi: 0xb5},
	{value: 0x4291, lo: 0xb8, hi: 0xb8},
	{value: 0x0023, lo: 0xb9, hi: 0xb9},
	{value: 0x009f, lo: 0xba, hi: 0xba},
	{value: 0x221c, lo: 0xbc, hi: 0xbc},
	{value: 0x2210, lo: 0xbd, hi: 0xbd},
	{value: 0x22b2, lo: 0xbe, hi: 0xbe},
	// Block 0x1, offset 0xe
	{value: 0x0091, lo: 0x03},
	{value: 0x46e2, lo: 0xa0, hi: 0xa1},
	{value: 0x4714, lo: 0xaf, hi: 0xb0},
	{value: 0xa000, lo: 0xb7, hi: 0xb7},
	// Block 0x2, offset 0x12
	{value: 0x0003, lo: 0x08},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x0091, lo: 0xb0, hi: 0xb0},
	{value: 0x0119, lo: 0xb1, hi: 0xb1},
	{value: 0x0095, lo: 0xb2, hi: 0xb2},
	{value: 0x00a5, lo: 0xb3, hi: 0xb3},
	{value: 0x0143, lo: 0xb4, hi: 0xb6},
	{value: 0x00af, lo: 0xb7, hi: 0xb7},
	{value: 0x00b3, lo: 0xb8, hi: 0xb8},
	// Block 0x3, offset 0x1b
	{value: 0x000a, lo: 0x09},
	{value: 0x426e, lo: 0x98, hi: 0x98},
	{value: 0x4273, lo: 0x99, hi: 0x9a},
	{value: 0x4296, lo: 0x9b, hi: 0x9b},
	{value: 0x425f, lo: 0x9c, hi: 0x9c},
	{value: 0x4282, lo: 0x9d, hi: 0x9d},
	{value: 0x0113, lo: 0xa0, hi: 0xa0},
	{value: 0x0099, lo: 0xa1, hi: 0xa1},
	{value: 0x00a7, lo: 0xa2, hi: 0xa3},
	{value: 0x0167, lo: 0xa4, hi: 0xa4},
	// Block 0x4, offset 0x25
	{value: 0x0000, lo: 0x0f},
	{value: 0xa000, lo: 0x83, hi: 0x83},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0xa000, lo: 0x8b, hi: 0x8b},
	{value: 0xa000, lo: 0x8d, hi: 0x8d},
	{value: 0x37a5, lo: 0x90, hi: 0x90},
	{value: 0x37b1, lo: 0x91, hi: 0x91},
	{value: 0x379f, lo: 0x93, hi: 0x93},
	{value: 0xa000, lo: 0x96, hi: 0x96},
	{value: 0x3817, lo: 0x97, hi: 0x97},
	{value: 0x37e1, lo: 0x9c, hi: 0x9c},
	{value: 0x37c9, lo: 0x9d, hi: 0x9d},
	{value: 0x37f3, lo: 0x9e, hi: 0x9e},
	{value: 0xa000, lo: 0xb4, hi: 0xb5},
	{value: 0x381d, lo: 0xb6, hi: 0xb6},
	{value: 0x3823, lo: 0xb7, hi: 0xb7},
	// Block 0x5, offset 0x35
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x83, hi: 0x87},
	// Block 0x6, offset 0x37
	{value: 0x0001, lo: 0x04},
	{value: 0x8113, lo: 0x81, hi: 0x82},
	{value: 0x8132, lo: 0x84, hi: 0x84},
	{value: 0x812d, lo: 0x85, hi: 0x85},
	{value: 0x810d, lo: 0x87, hi: 0x87},
	// Block 0x7, offset 0x3c
	{value: 0x0000, lo: 0x0a},
	{value: 0x8132, lo: 0x90, hi: 0x97},
	{value: 0x8119, lo: 0x98, hi: 0x98},
	{value: 0x811a, lo: 0x99, hi: 0x99},
	{value: 0x811b, lo: 0x9a, hi: 0x9a},
	{value: 0x3841, lo: 0xa2, hi: 0xa2},
	{value: 0x3847, lo: 0xa3, hi: 0xa3},
	{value: 0x3853, lo: 0xa4, hi: 0xa4},
	{value: 0x384d, lo: 0xa5, hi: 0xa5},
	{value: 0x3859, lo: 0xa6, hi: 0xa6},
	{value: 0xa000, lo: 0xa7, hi: 0xa7},
	// Block 0x8, offset 0x47
	{value: 0x0000, lo: 0x0e},
	{value: 0x386b, lo: 0x80, hi: 0x80},
	{value: 0xa000, lo: 0x81, hi: 0x81},
	{value: 0x385f, lo: 0x82, hi: 0x82},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x3865, lo: 0x93, hi: 0x93},
	{value: 0xa000, lo: 0x95, hi: 0x95},
	{value: 0x8132, lo: 0x96, hi: 0x9c},
	{value: 0x8132, lo: 0x9f, hi: 0xa2},
	{value: 0x812d, lo: 0xa3, hi: 0xa3},
	{value: 0x8132, lo: 0xa4, hi: 0xa4},
	{value: 0x8132, lo: 0xa7, hi: 0xa8},
	{value: 0x812d, lo: 0xaa, hi: 0xaa},
	{value: 0x8132, lo: 0xab, hi: 0xac},
	{value: 0x812d, lo: 0xad, hi: 0xad},
	// Block 0x9, offset 0x56
	{value: 0x0000, lo: 0x0c},
	{value: 0x811f, lo: 0x91, hi: 0x91},
	{value: 0x8132, lo: 0xb0, hi: 0xb0},
	{value: 0x812d, lo: 0xb1, hi: 0xb1},
	{value: 0x8132, lo: 0xb2, hi: 0xb3},
	{value: 0x812d, lo: 0xb4, hi: 0xb4},
	{value: 0x8132, lo: 0xb5, hi: 0xb6},
	{value: 0x812d, lo: 0xb7, hi: 0xb9},
	{value: 0x8132, lo: 0xba, hi: 0xba},
	{value: 0x812d, lo: 0xbb, hi: 0xbc},
	{value: 0x8132, lo: 0xbd, hi: 0xbd},
	{value: 0x812d, lo: 0xbe, hi: 0xbe},
	{value: 0x8132, lo: 0xbf, hi: 0xbf},
	// Block 0xa, offset 0x63
	{value: 0x0005, lo: 0x07},
	{value: 0x8132, lo: 0x80, hi: 0x80},
	{value: 0x8132, lo: 0x81, hi: 0x81},
	{value: 0x812d, lo: 0x82, hi: 0x83},
	{value: 0x812d, lo: 0x84, hi: 0x85},
	{value: 0x812d, lo: 0x86, hi: 0x87},
	{value: 0x812d, lo: 0x88, hi: 0x89},
	{value: 0x8132, lo: 0x8a, hi: 0x8a},
	// Block 0xb, offset 0x6b
	{value: 0x0000, lo: 0x03},
	{value: 0x8132, lo: 0xab, hi: 0xb1},
	{value: 0x812d, lo: 0xb2, hi: 0xb2},
	{value: 0x8132, lo: 0xb3, hi: 0xb3},
	// Block 0xc, offset 0x6f
	{value: 0x0000, lo: 0x04},
	{value: 0x8132, lo: 0x96, hi: 0x99},
	{value: 0x8132, lo: 0x9b, hi: 0xa3},
	{value: 0x8132, lo: 0xa5, hi: 0xa7},
	{value: 0x8132, lo: 0xa9, hi: 0xad},
	// Block 0xd, offset 0x74
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x99, hi: 0x9b},
	// Block 0xe, offset 0x76
	{value: 0x0000, lo: 0x10},
	{value: 0x8132, lo: 0x94, hi: 0xa1},
	{value: 0x812d, lo: 0xa3, hi: 0xa3},
	{value: 0x8132, lo: 0xa4, hi: 0xa5},
	{value: 0x812d, lo: 0xa6, hi: 0xa6},
	{value: 0x8132, lo: 0xa7, hi: 0xa8},
	{value: 0x812d, lo: 0xa9, hi: 0xa9},
	{value: 0x8132, lo: 0xaa, hi: 0xac},
	{value: 0x812d, lo: 0xad, hi: 0xaf},
	{value: 0x8116, lo: 0xb0, hi: 0xb0},
	{value: 0x8117, lo: 0xb1, hi: 0xb1},
	{value: 0x8118, lo: 0xb2, hi: 0xb2},
	{value: 0x8132, lo: 0xb3, hi: 0xb5},
	{value: 0x812d, lo: 0xb6, hi: 0xb6},
	{value: 0x8132, lo: 0xb7, hi: 0xb8},
	{value: 0x812d, lo: 0xb9, hi: 0xba},
	{value: 0x8132, lo: 0xbb, hi: 0xbf},
	// Block 0xf, offset 0x87
	{value: 0x0000, lo: 0x07},
	{value: 0xa000, lo: 0xa8, hi: 0xa8},
	{value: 0x3ed8, lo: 0xa9, hi: 0xa9},
	{value: 0xa000, lo: 0xb0, hi: 0xb0},
	{value: 0x3ee0, lo: 0xb1, hi: 0xb1},
	{value: 0xa000, lo: 0xb3, hi: 0xb3},
	{value: 0x3ee8, lo: 0xb4, hi: 0xb4},
	{value: 0x9902, lo: 0xbc, hi: 0xbc},
	// Block 0x10, offset 0x8f
	{value: 0x0008, lo: 0x06},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x8132, lo: 0x91, hi: 0x91},
	{value: 0x812d, lo: 0x92, hi: 0x92},
	{value: 0x8132, lo: 0x93, hi: 0x93},
	{value: 0x8132, lo: 0x94, hi: 0x94},
	{value: 0x451c, lo: 0x98, hi: 0x9f},
	// Block 0x11, offset 0x96
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x12, offset 0x99
	{value: 0x0008, lo: 0x06},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2c9e, lo: 0x8b, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	{value: 0x455c, lo: 0x9c, hi: 0x9d},
	{value: 0x456c, lo: 0x9f, hi: 0x9f},
	// Block 0x13, offset 0xa0
	{value: 0x0000, lo: 0x03},
	{value: 0x4594, lo: 0xb3, hi: 0xb3},
	{value: 0x459c, lo: 0xb6, hi: 0xb6},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	// Block 0x14, offset 0xa4
	{value: 0x0008, lo: 0x03},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x4574, lo: 0x99, hi: 0x9b},
	{value: 0x458c, lo: 0x9e, hi: 0x9e},
	// Block 0x15, offset 0xa8
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	// Block 0x16, offset 0xaa
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	// Block 0x17, offset 0xac
	{value: 0x0000, lo: 0x08},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2cb6, lo: 0x88, hi: 0x88},
	{value: 0x2cae, lo: 0x8b, hi: 0x8b},
	{value: 0x2cbe, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x96, hi: 0x97},
	{value: 0x45a4, lo: 0x9c, hi: 0x9c},
	{value: 0x45ac, lo: 0x9d, hi: 0x9d},
	// Block 0x18, offset 0xb5
	{value: 0x0000, lo: 0x03},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0x2cc6, lo: 0x94, hi: 0x94},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x19, offset 0xb9
	{value: 0x0000, lo: 0x06},
	{value: 0xa000, lo: 0x86, hi: 0x87},
	{value: 0x2cce, lo: 0x8a, hi: 0x8a},
	{value: 0x2cde, lo: 0x8b, hi: 0x8b},
	{value: 0x2cd6, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	// Block 0x1a, offset 0xc0
	{value: 0x1801, lo: 0x04},
	{value: 0xa000, lo: 0x86, hi: 0x86},
	{value: 0x3ef0, lo: 0x88, hi: 0x88},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x8120, lo: 0x95, hi: 0x96},
	// Block 0x1b, offset 0xc5
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xbc, hi: 0xbc},
	{value: 0xa000, lo: 0xbf, hi: 0xbf},
	// Block 0x1c, offset 0xc8
	{value: 0x0000, lo: 0x09},
	{value: 0x2ce6, lo: 0x80, hi: 0x80},
	{value: 0x9900, lo: 0x82, hi: 0x82},
	{value: 0xa000, lo: 0x86, hi: 0x86},
	{value: 0x2cee, lo: 0x87, hi: 0x87},
	{value: 0x2cf6, lo: 0x88, hi: 0x88},
	{value: 0x2f50, lo: 0x8a, hi: 0x8a},
	{value: 0x2dd8, lo: 0x8b, hi: 0x8b},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x95, hi: 0x96},
	// Block 0x1d, offset 0xd2
	{value: 0x0000, lo: 0x01},
	{value: 0x9900, lo: 0xbe, hi: 0xbe},
	// Block 0x1e, offset 0xd4
	{value: 0x0000, lo: 0x06},
	{value: 0xa000, lo: 0x86, hi: 0x87},
	{value: 0x2cfe, lo: 0x8a, hi: 0x8a},
	{value: 0x2d0e, lo: 0x8b, hi: 0x8b},
	{value: 0x2d06, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	// Block 0x1f, offset 0xdb
	{value: 0x6bea, lo: 0x07},
	{value: 0x9904, lo: 0x8a, hi: 0x8a},
	{value: 0x9900, lo: 0x8f, hi: 0x8f},
	{value: 0xa000, lo: 0x99, hi: 0x99},
	{value: 0x3ef8, lo: 0x9a, hi: 0x9a},
	{value: 0x2f58, lo: 0x9c, hi: 0x9c},
	{value: 0x2de3, lo: 0x9d, hi: 0x9d},
	{value: 0x2d16, lo: 0x9e, hi: 0x9f},
	// Block 0x20, offset 0xe3
	{value: 0x0000, lo: 0x03},
	{value: 0x2621, lo: 0xb3, hi: 0xb3},
	{value: 0x8122, lo: 0xb8, hi: 0xb9},
	{value: 0x8104, lo: 0xba, hi: 0xba},
	// Block 0x21, offset 0xe7
	{value: 0x0000, lo: 0x01},
	{value: 0x8123, lo: 0x88, hi: 0x8b},
	// Block 0x22, offset 0xe9
	{value: 0x0000, lo: 0x02},
	{value: 0x2636, lo: 0xb3, hi: 0xb3},
	{value: 0x8124, lo: 0xb8, hi: 0xb9},
	// Block 0x23, offset 0xec
	{value: 0x0000, lo: 0x03},
	{value: 0x8125, lo: 0x88, hi: 0x8b},
	{value: 0x2628, lo: 0x9c, hi: 0x9c},
	{value: 0x262f, lo: 0x9d, hi: 0x9d},
	// Block 0x24, offset 0xf0
	{value: 0x0000, lo: 0x05},
	{value: 0x030b, lo: 0x8c, hi: 0x8c},
	{value: 0x812d, lo: 0x98, hi: 0x99},
	{value: 0x812d, lo: 0xb5, hi: 0xb5},
	{value: 0x812d, lo: 0xb7, hi: 0xb7},
	{value: 0x812b, lo: 0xb9, hi: 0xb9},
	// Block 0x25, offset 0xf6
	{value: 0x0000, lo: 0x10},
	{value: 0x2644, lo: 0x83, hi: 0x83},
	{value: 0x264b, lo: 0x8d, hi: 0x8d},
	{value: 0x2652, lo: 0x92, hi: 0x92},
	{value: 0x2659, lo: 0x97, hi: 0x97},
	{value: 0x2660, lo: 0x9c, hi: 0x9c},
	{value: 0x263d, lo: 0xa9, hi: 0xa9},
	{value: 0x8126, lo: 0xb1, hi: 0xb1},
	{value: 0x8127, lo: 0xb2, hi: 0xb2},
	{value: 0x4a84, lo: 0xb3, hi: 0xb3},
	{value: 0x8128, lo: 0xb4, hi: 0xb4},
	{value: 0x4a8d, lo: 0xb5, hi: 0xb5},
	{value: 0x45b4, lo: 0xb6, hi: 0xb6},
	{value: 0x45f4, lo: 0xb7, hi: 0xb7},
	{value: 0x45bc, lo: 0xb8, hi: 0xb8},
	{value: 0x45ff, lo: 0xb9, hi: 0xb9},
	{value: 0x8127, lo: 0xba, hi: 0xbd},
	// Block 0x26, offset 0x107
	{value: 0x0000, lo: 0x0b},
	{value: 0x8127, lo: 0x80, hi: 0x80},
	{value: 0x4a96, lo: 0x81, hi: 0x81},
	{value: 0x8132, lo: 0x82, hi: 0x83},
	{value: 0x8104, lo: 0x84, hi: 0x84},
	{value: 0x8132, lo: 0x86, hi: 0x87},
	{value: 0x266e, lo: 0x93, hi: 0x93},
	{value: 0x2675, lo: 0x9d, hi: 0x9d},
	{value: 0x267c, lo: 0xa2, hi: 0xa2},
	{value: 0x2683, lo: 0xa7, hi: 0xa7},
	{value: 0x268a, lo: 0xac, hi: 0xac},
	{value: 0x2667, lo: 0xb9, hi: 0xb9},
	// Block 0x27, offset 0x113
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x86, hi: 0x86},
	// Block 0x28, offset 0x115
	{value: 0x0000, lo: 0x05},
	{value: 0xa000, lo: 0xa5, hi: 0xa5},
	{value: 0x2d1e, lo: 0xa6, hi: 0xa6},
	{value: 0x9900, lo: 0xae, hi: 0xae},
	{value: 0x8102, lo: 0xb7, hi: 0xb7},
	{value: 0x8104, lo: 0xb9, hi: 0xba},
	// Block 0x29, offset 0x11b
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x8d, hi: 0x8d},
	// Block 0x2a, offset 0x11d
	{value: 0x0000, lo: 0x01},
	{value: 0x030f, lo: 0xbc, hi: 0xbc},
	// Block 0x2b, offset 0x11f
	{value: 0x0000, lo: 0x01},
	{value: 0xa000, lo: 0x80, hi: 0x92},
	// Block 0x2c, offset 0x121
	{value: 0x0000, lo: 0x01},
	{value: 0xb900, lo: 0xa1, hi: 0xb5},
	// Block 0x2d, offset 0x123
	{value: 0x0000, lo: 0x01},
	{value: 0x9900, lo: 0xa8, hi: 0xbf},
	// Block 0x2e, offset 0x125
	{value: 0x0000, lo: 0x01},
	{value: 0x9900, lo: 0x80, hi: 0x82},
	// Block 0x2f, offset 0x127
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x9d, hi: 0x9f},
	// Block 0x30, offset 0x129
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x94, hi: 0x94},
	{value: 0x8104, lo: 0xb4, hi: 0xb4},
	// Block 0x31, offset 0x12c
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x92, hi: 0x92},
	{value: 0x8132, lo: 0x9d, hi: 0x9d},
	// Block 0x32, offset 0x12f
	{value: 0x0000, lo: 0x01},
	{value: 0x8131, lo: 0xa9, hi: 0xa9},
	// Block 0x33, offset 0x131
	{value: 0x0004, lo: 0x02},
	{value: 0x812e, lo: 0xb9, hi: 0xba},
	{value: 0x812d, lo: 0xbb, hi: 0xbb},
	// Block 0x34, offset 0x134
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0x97, hi: 0x97},
	{value: 0x812d, lo: 0x98, hi: 0x98},
	// Block 0x35, offset 0x137
	{value: 0x0000, lo: 0x03},
	{value: 0x8104, lo: 0xa0, hi: 0xa0},
	{value: 0x8132, lo: 0xb5, hi: 0xbc},
	{value: 0x812d, lo: 0xbf, hi: 0xbf},
	// Block 0x36, offset 0x13b
	{value: 0x0000, lo: 0x04},
	{value: 0x8132, lo: 0xb0, hi: 0xb4},
	{value: 0x812d, lo: 0xb5, hi: 0xba},
	{value: 0x8132, lo: 0xbb, hi: 0xbc},
	{value: 0x812d, lo: 0xbd, hi: 0xbd},
	// Block 0x37, offset 0x140
	{value: 0x0000, lo: 0x08},
	{value: 0x2d66, lo: 0x80, hi: 0x80},
	{value: 0x2d6e, lo: 0x81, hi: 0x81},
	{value: 0xa000, lo: 0x82, hi: 0x82},
	{value: 0x2d76, lo: 0x83, hi: 0x83},
	{value: 0x8104, lo: 0x84, hi: 0x84},
	{value: 0x8132, lo: 0xab, hi: 0xab},
	{value: 0x812d, lo: 0xac, hi: 0xac},
	{value: 0x8132, lo: 0xad, hi: 0xb3},
	// Block 0x38, offset 0x149
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xaa, hi: 0xab},
	// Block 0x39, offset 0x14b
	{value: 0x0000, lo: 0x02},
	{value: 0x8102, lo: 0xa6, hi: 0xa6},
	{value: 0x8104, lo: 0xb2, hi: 0xb3},
	// Block 0x3a, offset 0x14e
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0xb7, hi: 0xb7},
	// Block 0x3b, offset 0x150
	{value: 0x0000, lo: 0x0a},
	{value: 0x8132, lo: 0x90, hi: 0x92},
	{value: 0x8101, lo: 0x94, hi: 0x94},
	{value: 0x812d, lo: 0x95, hi: 0x99},
	{value: 0x8132, lo: 0x9a, hi: 0x9b},
	{value: 0x812d, lo: 0x9c, hi: 0x9f},
	{value: 0x8132, lo: 0xa0, hi: 0xa0},
	{value: 0x8101, lo: 0xa2, hi: 0xa8},
	{value: 0x812d, lo: 0xad, hi: 0xad},
	{value: 0x8132, lo: 0xb4, hi: 0xb4},
	{value: 0x8132, lo: 0xb8, hi: 0xb9},
	// Block 0x3c, offset 0x15b
	{value: 0x0002, lo: 0x0a},
	{value: 0x0043, lo: 0xac, hi: 0xac},
	{value: 0x00d1, lo: 0xad, hi: 0xad},
	{value: 0x0045, lo: 0xae, hi: 0xae},
	{value: 0x0049, lo: 0xb0, hi: 0xb1},
	{value: 0x00e6, lo: 0xb2, hi: 0xb2},
	{value: 0x004f, lo: 0xb3, hi: 0xba},
	{value: 0x005f, lo: 0xbc, hi: 0xbc},
	{value: 0x00ef, lo: 0xbd, hi: 0xbd},
	{value: 0x0061, lo: 0xbe, hi: 0xbe},
	{value: 0x0065, lo: 0xbf, hi: 0xbf},
	// Block 0x3d, offset 0x166
	{value: 0x0000, lo: 0x0f},
	{value: 0x8132, lo: 0x80, hi: 0x81},
	{value: 0x812d, lo: 0x82, hi: 0x82},
	{value: 0x8132, lo: 0x83, hi: 0x89},
	{value: 0x812d, lo: 0x8a, hi: 0x8a},
	{value: 0x8132, lo: 0x8b, hi: 0x8c},
	{value: 0x8135, lo: 0x8d, hi: 0x8d},
	{value: 0x812a, lo: 0x8e, hi: 0x8e},
	{value: 0x812d, lo: 0x8f, hi: 0x8f},
	{value: 0x8129, lo: 0x90, hi: 0x90},
	{value: 0x8132, lo: 0x91, hi: 0xb5},
	{value: 0x8132, lo: 0xbb, hi: 0xbb},
	{value: 0x8134, lo: 0xbc, hi: 0xbc},
	{value: 0x812d, lo: 0xbd, hi: 0xbd},
	{value: 0x8132, lo: 0xbe, hi: 0xbe},
	{value: 0x812d, lo: 0xbf, hi: 0xbf},
	// Block 0x3e, offset 0x176
	{value: 0x0000, lo: 0x0d},
	{value: 0x0001, lo: 0x80, hi: 0x8a},
	{value: 0x043b, lo: 0x91, hi: 0x91},
	{value: 0x429b, lo: 0x97, hi: 0x97},
	{value: 0x001d, lo: 0xa4, hi: 0xa4},
	{value: 0x1873, lo: 0xa5, hi: 0xa5},
	{value: 0x1b5c, lo: 0xa6, hi: 0xa6},
	{value: 0x0001, lo: 0xaf, hi: 0xaf},
	{value: 0x2691, lo: 0xb3, hi: 0xb3},
	{value: 0x27fe, lo: 0xb4, hi: 0xb4},
	{value: 0x2698, lo: 0xb6, hi: 0xb6},
	{value: 0x2808, lo: 0xb7, hi: 0xb7},
	{value: 0x186d, lo: 0xbc, hi: 0xbc},
	{value: 0x4269, lo: 0xbe, hi: 0xbe},
	// Block 0x3f, offset 0x184
	{value: 0x0002, lo: 0x0d},
	{value: 0x1933, lo: 0x87, hi: 0x87},
	{value: 0x1930, lo: 0x88, hi: 0x88},
	{value: 0x1870, lo: 0x89, hi: 0x89},
	{value: 0x298e, lo: 0x97, hi: 0x97},
	{value: 0x0001, lo: 0x9f, hi: 0x9f},
	{value: 0x0021, lo: 0xb0, hi: 0xb0},
	{value: 0x0093, lo: 0xb1, hi: 0xb1},
	{value: 0x0029, lo: 0xb4, hi: 0xb9},
	{value: 0x0017, lo: 0xba, hi: 0xba},
	{value: 0x0467, lo: 0xbb, hi: 0xbb},
	{value: 0x003b, lo: 0xbc, hi: 0xbc},
	{value: 0x0011, lo: 0xbd, hi: 0xbe},
	{value: 0x009d, lo: 0xbf, hi: 0xbf},
	// Block 0x40, offset 0x192
	{value: 0x0002, lo: 0x0f},
	{value: 0x0021, lo: 0x80, hi: 0x89},
	{value: 0x0017, lo: 0x8a, hi: 0x8a},
	{value: 0x0467, lo: 0x8b, hi: 0x8b},
	{value: 0x003b, lo: 0x8c, hi: 0x8c},
	{value: 0x0011, lo: 0x8d, hi: 0x8e},
	{value: 0x0083, lo: 0x90, hi: 0x90},
	{value: 0x008b, lo: 0x91, hi: 0x91},
	{value: 0x009f, lo: 0x92, hi: 0x92},
	{value: 0x00b1, lo: 0x93, hi: 0x93},
	{value: 0x0104, lo: 0x94, hi: 0x94},
	{value: 0x0091, lo: 0x95, hi: 0x95},
	{value: 0x0097, lo: 0x96, hi: 0x99},
	{value: 0x00a1, lo: 0x9a, hi: 0x9a},
	{value: 0x00a7, lo: 0x9b, hi: 0x9c},
	{value: 0x1999, lo: 0xa8, hi: 0xa8},
	// Block 0x41, offset 0x1a2
	{value: 0x0000, lo: 0x0d},
	{value: 0x8132, lo: 0x90, hi: 0x91},
	{value: 0x8101, lo: 0x92, hi: 0x93},
	{value: 0x8132, lo: 0x94, hi: 0x97},
	{value: 0x8101, lo: 0x98, hi: 0x9a},
	{value: 0x8132, lo: 0x9b, hi: 0x9c},
	{value: 0x8132, lo: 0xa1, hi: 0xa1},
	{value: 0x8101, lo: 0xa5, hi: 0xa6},
	{value: 0x8132, lo: 0xa7, hi: 0xa7},
	{value: 0x812d, lo: 0xa8, hi: 0xa8},
	{value: 0x8132, lo: 0xa9, hi: 0xa9},
	{value: 0x8101, lo: 0xaa, hi: 0xab},
	{value: 0x812d, lo: 0xac, hi: 0xaf},
	{value: 0x8132, lo: 0xb0, hi: 0xb0},
	// Block 0x42, offset 0x1b0
	{value: 0x0007, lo: 0x06},
	{value: 0x2180, lo: 0x89, hi: 0x89},
	{value: 0xa000, lo: 0x90, hi: 0x90},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0xa000, lo: 0x94, hi: 0x94},
	{value: 0x3bb9, lo: 0x9a, hi: 0x9b},
	{value: 0x3bc7, lo: 0xae, hi: 0xae},
	// Block 0x43, offset 0x1b7
	{value: 0x000e, lo: 0x05},
	{value: 0x3bce, lo: 0x8d, hi: 0x8e},
	{value: 0x3bd5, lo: 0x8f, hi: 0x8f},
	{value: 0xa000, lo: 0x90, hi: 0x90},
	{value: 0xa000, lo: 0x92, hi: 0x92},
	{value: 0xa000, lo: 0x94, hi: 0x94},
	// Block 0x44, offset 0x1bd
	{value: 0x0173, lo: 0x0e},
	{value: 0xa000, lo: 0x83, hi: 0x83},
	{value: 0x3be3, lo: 0x84, hi: 0x84},
	{value: 0xa000, lo: 0x88, hi: 0x88},
	{value: 0x3bea, lo: 0x89, hi: 0x89},
	{value: 0xa000, lo: 0x8b, hi: 0x8b},
	{value: 0x3bf1, lo: 0x8c, hi: 0x8c},
	{value: 0xa000, lo: 0xa3, hi: 0xa3},
	{value: 0x3bf8, lo: 0xa4, hi: 0xa4},
	{value: 0xa000, lo: 0xa5, hi: 0xa5},
	{value: 0x3bff, lo: 0xa6, hi: 0xa6},
	{value: 0x269f, lo: 0xac, hi: 0xad},
	{value: 0x26a6, lo: 0xaf, hi: 0xaf},
	{value: 0x281c, lo: 0xb0, hi: 0xb0},
	{value: 0xa000, lo: 0xbc, hi: 0xbc},
	// Block 0x45, offset 0x1cc
	{value: 0x0007, lo: 0x03},
	{value: 0x3c68, lo: 0xa0, hi: 0xa1},
	{value: 0x3c92, lo: 0xa2, hi: 0xa3},
	{value: 0x3cbc, lo: 0xaa, hi: 0xad},
	// Block 0x46, offset 0x1d0
	{value: 0x0004, lo: 0x01},
	{value: 0x048b, lo: 0xa9, hi: 0xaa},
	// Block 0x47, offset 0x1d2
	{value: 0x0002, lo: 0x03},
	{value: 0x0057, lo: 0x80, hi: 0x8f},
	{value: 0x0083, lo: 0x90, hi: 0xa9},
	{value: 0x0021, lo: 0xaa, hi: 0xaa},
	// Block 0x48, offset 0x1d6
	{value: 0x0000, lo: 0x01},
	{value: 0x299b, lo: 0x8c, hi: 0x8c},
	// Block 0x49, offset 0x1d8
	{value: 0x0263, lo: 0x02},
	{value: 0x1b8c, lo: 0xb4, hi: 0xb4},
	{value: 0x192d, lo: 0xb5, hi: 0xb6},
	// Block 0x4a, offset 0x1db
	{value: 0x0000, lo: 0x01},
	{value: 0x44dd, lo: 0x9c, hi: 0x9c},
	// Block 0x4b, offset 0x1dd
	{value: 0x0000, lo: 0x02},
	{value: 0x0095, lo: 0xbc, hi: 0xbc},
	{value: 0x006d, lo: 0xbd, hi: 0xbd},
	// Block 0x4c, offset 0x1e0
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xaf, hi: 0xb1},
	// Block 0x4d, offset 0x1e2
	{value: 0x0000, lo: 0x02},
	{value: 0x047f, lo: 0xaf, hi: 0xaf},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x4e, offset 0x1e5
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xa0, hi: 0xbf},
	// Block 0x4f, offset 0x1e7
	{value: 0x0000, lo: 0x01},
	{value: 0x0dc3, lo: 0x9f, hi: 0x9f},
	// Block 0x50, offset 0x1e9
	{value: 0x0000, lo: 0x01},
	{value: 0x162f, lo: 0xb3, hi: 0xb3},
	// Block 0x51, offset 0x1eb
	{value: 0x0004, lo: 0x0b},
	{value: 0x1597, lo: 0x80, hi: 0x82},
	{value: 0x15af, lo: 0x83, hi: 0x83},
	{value: 0x15c7, lo: 0x84, hi: 0x85},
	{value: 0x15d7, lo: 0x86, hi: 0x89},
	{value: 0x15eb, lo: 0x8a, hi: 0x8c},
	{value: 0x15ff, lo: 0x8d, hi: 0x8d},
	{value: 0x1607, lo: 0x8e, hi: 0x8e},
	{value: 0x160f, lo: 0x8f, hi: 0x90},
	{value: 0x161b, lo: 0x91, hi: 0x93},
	{value: 0x162b, lo: 0x94, hi: 0x94},
	{value: 0x1633, lo: 0x95, hi: 0x95},
	// Block 0x52, offset 0x1f7
	{value: 0x0004, lo: 0x09},
	{value: 0x0001, lo: 0x80, hi: 0x80},
	{value: 0x812c, lo: 0xaa, hi: 0xaa},
	{value: 0x8131, lo: 0xab, hi: 0xab},
	{value: 0x8133, lo: 0xac, hi: 0xac},
	{value: 0x812e, lo: 0xad, hi: 0xad},
	{value: 0x812f, lo: 0xae, hi: 0xae},
	{value: 0x812f, lo: 0xaf, hi: 0xaf},
	{value: 0x04b3, lo: 0xb6, hi: 0xb6},
	{value: 0x0887, lo: 0xb8, hi: 0xba},
	// Block 0x53, offset 0x201
	{value: 0x0006, lo: 0x09},
	{value: 0x0313, lo: 0xb1, hi: 0xb1},
	{value: 0x0317, lo: 0xb2, hi: 0xb2},
	{value: 0x4a3b, lo: 0xb3, hi: 0xb3},
	{value: 0x031b, lo: 0xb4, hi: 0xb4},
	{value: 0x4a41, lo: 0xb5, hi: 0xb6},
	{value: 0x031f, lo: 0xb7, hi: 0xb7},
	{value: 0x0323, lo: 0xb8, hi: 0xb8},
	{value: 0x0327, lo: 0xb9, hi: 0xb9},
	{value: 0x4a4d, lo: 0xba, hi: 0xbf},
	// Block 0x54, offset 0x20b
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0xaf, hi: 0xaf},
	{value: 0x8132, lo: 0xb4, hi: 0xbd},
	// Block 0x55, offset 0x20e
	{value: 0x0000, lo: 0x03},
	{value: 0x020f, lo: 0x9c, hi: 0x9c},
	{value: 0x0212, lo: 0x9d, hi: 0x9d},
	{value: 0x8132, lo: 0x9e, hi: 0x9f},
	// Block 0x56, offset 0x212
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xb0, hi: 0xb1},
	// Block 0x57, offset 0x214
	{value: 0x0000, lo: 0x01},
	{value: 0x163b, lo: 0xb0, hi: 0xb0},
	// Block 0x58, offset 0x216
	{value: 0x000c, lo: 0x01},
	{value: 0x00d7, lo: 0xb8, hi: 0xb9},
	// Block 0x59, offset 0x218
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x86, hi: 0x86},
	// Block 0x5a, offset 0x21a
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x84, hi: 0x84},
	{value: 0x8132, lo: 0xa0, hi: 0xb1},
	// Block 0x5b, offset 0x21d
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0xab, hi: 0xad},
	// Block 0x5c, offset 0x21f
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x93, hi: 0x93},
	// Block 0x5d, offset 0x221
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0xb3, hi: 0xb3},
	// Block 0x5e, offset 0x223
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0x80, hi: 0x80},
	// Block 0x5f, offset 0x225
	{value: 0x0000, lo: 0x05},
	{value: 0x8132, lo: 0xb0, hi: 0xb0},
	{value: 0x8132, lo: 0xb2, hi: 0xb3},
	{value: 0x812d, lo: 0xb4, hi: 0xb4},
	{value: 0x8132, lo: 0xb7, hi: 0xb8},
	{value: 0x8132, lo: 0xbe, hi: 0xbf},
	// Block 0x60, offset 0x22b
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0x81, hi: 0x81},
	{value: 0x8104, lo: 0xb6, hi: 0xb6},
	// Block 0x61, offset 0x22e
	{value: 0x0008, lo: 0x03},
	{value: 0x1637, lo: 0x9c, hi: 0x9d},
	{value: 0x0125, lo: 0x9e, hi: 0x9e},
	{value: 0x1643, lo: 0x9f, hi: 0x9f},
	// Block 0x62, offset 0x232
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xad, hi: 0xad},
	// Block 0x63, offset 0x234
	{value: 0x0000, lo: 0x06},
	{value: 0xe500, lo: 0x80, hi: 0x80},
	{value: 0xc600, lo: 0x81, hi: 0x9b},
	{value: 0xe500, lo: 0x9c, hi: 0x9c},
	{value: 0xc600, lo: 0x9d, hi: 0xb7},
	{value: 0xe500, lo: 0xb8, hi: 0xb8},
	{value: 0xc600, lo: 0xb9, hi: 0xbf},
	// Block 0x64, offset 0x23b
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x93},
	{value: 0xe500, lo: 0x94, hi: 0x94},
	{value: 0xc600, lo: 0x95, hi: 0xaf},
	{value: 0xe500, lo: 0xb0, hi: 0xb0},
	{value: 0xc600, lo: 0xb1, hi: 0xbf},
	// Block 0x65, offset 0x241
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x8b},
	{value: 0xe500, lo: 0x8c, hi: 0x8c},
	{value: 0xc600, lo: 0x8d, hi: 0xa7},
	{value: 0xe500, lo: 0xa8, hi: 0xa8},
	{value: 0xc600, lo: 0xa9, hi: 0xbf},
	// Block 0x66, offset 0x247
	{value: 0x0000, lo: 0x07},
	{value: 0xc600, lo: 0x80, hi: 0x83},
	{value: 0xe500, lo: 0x84, hi: 0x84},
	{value: 0xc600, lo: 0x85, hi: 0x9f},
	{value: 0xe500, lo: 0xa0, hi: 0xa0},
	{value: 0xc600, lo: 0xa1, hi: 0xbb},
	{value: 0xe500, lo: 0xbc, hi: 0xbc},
	{value: 0xc600, lo: 0xbd, hi: 0xbf},
	// Block 0x67, offset 0x24f
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x97},
	{value: 0xe500, lo: 0x98, hi: 0x98},
	{value: 0xc600, lo: 0x99, hi: 0xb3},
	{value: 0xe500, lo: 0xb4, hi: 0xb4},
	{value: 0xc600, lo: 0xb5, hi: 0xbf},
	// Block 0x68, offset 0x255
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x8f},
	{value: 0xe500, lo: 0x90, hi: 0x90},
	{value: 0xc600, lo: 0x91, hi: 0xab},
	{value: 0xe500, lo: 0xac, hi: 0xac},
	{value: 0xc600, lo: 0xad, hi: 0xbf},
	// Block 0x69, offset 0x25b
	{value: 0x0000, lo: 0x05},
	{value: 0xc600, lo: 0x80, hi: 0x87},
	{value: 0xe500, lo: 0x88, hi: 0x88},
	{value: 0xc600, lo: 0x89, hi: 0xa3},
	{value: 0xe500, lo: 0xa4, hi: 0xa4},
	{value: 0xc600, lo: 0xa5, hi: 0xbf},
	// Block 0x6a, offset 0x261
	{value: 0x0000, lo: 0x03},
	{value: 0xc600, lo: 0x80, hi: 0x87},
	{value: 0xe500, lo: 0x88, hi: 0x88},
	{value: 0xc600, lo: 0x89, hi: 0xa3},
	// Block 0x6b, offset 0x265
	{value: 0x0002, lo: 0x01},
	{value: 0x0003, lo: 0x81, hi: 0xbf},
	// Block 0x6c, offset 0x267
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0xbd, hi: 0xbd},
	// Block 0x6d, offset 0x269
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0xa0, hi: 0xa0},
	// Block 0x6e, offset 0x26b
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xb6, hi: 0xba},
	// Block 0x6f, offset 0x26d
	{value: 0x002c, lo: 0x05},
	{value: 0x812d, lo: 0x8d, hi: 0x8d},
	{value: 0x8132, lo: 0x8f, hi: 0x8f},
	{value: 0x8132, lo: 0xb8, hi: 0xb8},
	{value: 0x8101, lo: 0xb9, hi: 0xba},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x70, offset 0x273
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0xa5, hi: 0xa5},
	{value: 0x812d, lo: 0xa6, hi: 0xa6},
	// Block 0x71, offset 0x276
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x86, hi: 0x86},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x72, offset 0x279
	{value: 0x17fe, lo: 0x07},
	{value: 0xa000, lo: 0x99, hi: 0x99},
	{value: 0x4238, lo: 0x9a, hi: 0x9a},
	{value: 0xa000, lo: 0x9b, hi: 0x9b},
	{value: 0x4242, lo: 0x9c, hi: 0x9c},
	{value: 0xa000, lo: 0xa5, hi: 0xa5},
	{value: 0x424c, lo: 0xab, hi: 0xab},
	{value: 0x8104, lo: 0xb9, hi: 0xba},
	// Block 0x73, offset 0x281
	{value: 0x0000, lo: 0x06},
	{value: 0x8132, lo: 0x80, hi: 0x82},
	{value: 0x9900, lo: 0xa7, hi: 0xa7},
	{value: 0x2d7e, lo: 0xae, hi: 0xae},
	{value: 0x2d88, lo: 0xaf, hi: 0xaf},
	{value: 0xa000, lo: 0xb1, hi: 0xb2},
	{value: 0x8104, lo: 0xb3, hi: 0xb4},
	// Block 0x74, offset 0x288
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x80, hi: 0x80},
	{value: 0x8102, lo: 0x8a, hi: 0x8a},
	// Block 0x75, offset 0x28b
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0xb5, hi: 0xb5},
	{value: 0x8102, lo: 0xb6, hi: 0xb6},
	// Block 0x76, offset 0x28e
	{value: 0x0002, lo: 0x01},
	{value: 0x8102, lo: 0xa9, hi: 0xaa},
	// Block 0x77, offset 0x290
	{value: 0x0000, lo: 0x07},
	{value: 0xa000, lo: 0x87, hi: 0x87},
	{value: 0x2d92, lo: 0x8b, hi: 0x8b},
	{value: 0x2d9c, lo: 0x8c, hi: 0x8c},
	{value: 0x8104, lo: 0x8d, hi: 0x8d},
	{value: 0x9900, lo: 0x97, hi: 0x97},
	{value: 0x8132, lo: 0xa6, hi: 0xac},
	{value: 0x8132, lo: 0xb0, hi: 0xb4},
	// Block 0x78, offset 0x298
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x82, hi: 0x82},
	{value: 0x8102, lo: 0x86, hi: 0x86},
	// Block 0x79, offset 0x29b
	{value: 0x6b5a, lo: 0x06},
	{value: 0x9900, lo: 0xb0, hi: 0xb0},
	{value: 0xa000, lo: 0xb9, hi: 0xb9},
	{value: 0x9900, lo: 0xba, hi: 0xba},
	{value: 0x2db0, lo: 0xbb, hi: 0xbb},
	{value: 0x2da6, lo: 0xbc, hi: 0xbd},
	{value: 0x2dba, lo: 0xbe, hi: 0xbe},
	// Block 0x7a, offset 0x2a2
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0x82, hi: 0x82},
	{value: 0x8102, lo: 0x83, hi: 0x83},
	// Block 0x7b, offset 0x2a5
	{value: 0x0000, lo: 0x05},
	{value: 0x9900, lo: 0xaf, hi: 0xaf},
	{value: 0xa000, lo: 0xb8, hi: 0xb9},
	{value: 0x2dc4, lo: 0xba, hi: 0xba},
	{value: 0x2dce, lo: 0xbb, hi: 0xbb},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x7c, offset 0x2ab
	{value: 0x0000, lo: 0x01},
	{value: 0x8102, lo: 0x80, hi: 0x80},
	// Block 0x7d, offset 0x2ad
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xbf, hi: 0xbf},
	// Block 0x7e, offset 0x2af
	{value: 0x0000, lo: 0x02},
	{value: 0x8104, lo: 0xb6, hi: 0xb6},
	{value: 0x8102, lo: 0xb7, hi: 0xb7},
	// Block 0x7f, offset 0x2b2
	{value: 0x0000, lo: 0x01},
	{value: 0x8104, lo: 0xab, hi: 0xab},
	// Block 0x80, offset 0x2b4
	{value: 0x0000, lo: 0x01},
	{value: 0x8101, lo: 0xb0, hi: 0xb4},
	// Block 0x81, offset 0x2b6
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0xb0, hi: 0xb6},
	// Block 0x82, offset 0x2b8
	{value: 0x0000, lo: 0x01},
	{value: 0x8101, lo: 0x9e, hi: 0x9e},
	// Block 0x83, offset 0x2ba
	{value: 0x0000, lo: 0x0c},
	{value: 0x45cc, lo: 0x9e, hi: 0x9e},
	{value: 0x45d6, lo: 0x9f, hi: 0x9f},
	{value: 0x460a, lo: 0xa0, hi: 0xa0},
	{value: 0x4618, lo: 0xa1, hi: 0xa1},
	{value: 0x4626, lo: 0xa2, hi: 0xa2},
	{value: 0x4634, lo: 0xa3, hi: 0xa3},
	{value: 0x4642, lo: 0xa4, hi: 0xa4},
	{value: 0x812b, lo: 0xa5, hi: 0xa6},
	{value: 0x8101, lo: 0xa7, hi: 0xa9},
	{value: 0x8130, lo: 0xad, hi: 0xad},
	{value: 0x812b, lo: 0xae, hi: 0xb2},
	{value: 0x812d, lo: 0xbb, hi: 0xbf},
	// Block 0x84, offset 0x2c7
	{value: 0x0000, lo: 0x09},
	{value: 0x812d, lo: 0x80, hi: 0x82},
	{value: 0x8132, lo: 0x85, hi: 0x89},
	{value: 0x812d, lo: 0x8a, hi: 0x8b},
	{value: 0x8132, lo: 0xaa, hi: 0xad},
	{value: 0x45e0, lo: 0xbb, hi: 0xbb},
	{value: 0x45ea, lo: 0xbc, hi: 0xbc},
	{value: 0x4650, lo: 0xbd, hi: 0xbd},
	{value: 0x466c, lo: 0xbe, hi: 0xbe},
	{value: 0x465e, lo: 0xbf, hi: 0xbf},
	// Block 0x85, offset 0x2d1
	{value: 0x0000, lo: 0x01},
	{value: 0x467a, lo: 0x80, hi: 0x80},
	// Block 0x86, offset 0x2d3
	{value: 0x0000, lo: 0x01},
	{value: 0x8132, lo: 0x82, hi: 0x84},
	// Block 0x87, offset 0x2d5
	{value: 0x0002, lo: 0x03},
	{value: 0x0043, lo: 0x80, hi: 0x99},
	{value: 0x0083, lo: 0x9a, hi: 0xb3},
	{value: 0x0043, lo: 0xb4, hi: 0xbf},
	// Block 0x88, offset 0x2d9
	{value: 0x0002, lo: 0x04},
	{value: 0x005b, lo: 0x80, hi: 0x8d},
	{value: 0x0083, lo: 0x8e, hi: 0x94},
	{value: 0x0093, lo: 0x96, hi: 0xa7},
	{value: 0x0043, lo: 0xa8, hi: 0xbf},
	// Block 0x89, offset 0x2de
	{value: 0x0002, lo: 0x0b},
	{value: 0x0073, lo: 0x80, hi: 0x81},
	{value: 0x0083, lo: 0x82, hi: 0x9b},
	{value: 0x0043, lo: 0x9c, hi: 0x9c},
	{value: 0x0047, lo: 0x9e, hi: 0x9f},
	{value: 0x004f, lo: 0xa2, hi: 0xa2},
	{value: 0x0055, lo: 0xa5, hi: 0xa6},
	{value: 0x005d, lo: 0xa9, hi: 0xac},
	{value: 0x0067, lo: 0xae, hi: 0xb5},
	{value: 0x0083, lo: 0xb6, hi: 0xb9},
	{value: 0x008d, lo: 0xbb, hi: 0xbb},
	{value: 0x0091, lo: 0xbd, hi: 0xbf},
	// Block 0x8a, offset 0x2ea
	{value: 0x0002, lo: 0x04},
	{value: 0x0097, lo: 0x80, hi: 0x83},
	{value: 0x00a1, lo: 0x85, hi: 0x8f},
	{value: 0x0043, lo: 0x90, hi: 0xa9},
	{value: 0x0083, lo: 0xaa, hi: 0xbf},
	// Block 0x8b, offset 0x2ef
	{value: 0x0002, lo: 0x08},
	{value: 0x00af, lo: 0x80, hi: 0x83},
	{value: 0x0043, lo: 0x84, hi: 0x85},
	{value: 0x0049, lo: 0x87, hi: 0x8a},
	{value: 0x0055, lo: 0x8d, hi: 0x94},
	{value: 0x0067, lo: 0x96, hi: 0x9c},
	{value: 0x0083, lo: 0x9e, hi: 0xb7},
	{value: 0x0043, lo: 0xb8, hi: 0xb9},
	{value: 0x0049, lo: 0xbb, hi: 0xbe},
	// Block 0x8c, offset 0x2f8
	{value: 0x0002, lo: 0x05},
	{value: 0x0053, lo: 0x80, hi: 0x84},
	{value: 0x005f, lo: 0x86, hi: 0x86},
	{value: 0x0067, lo: 0x8a, hi: 0x90},
	{value: 0x0083, lo: 0x92, hi: 0xab},
	{value: 0x0043, lo: 0xac, hi: 0xbf},
	// Block 0x8d, offset 0x2fe
	{value: 0x0002, lo: 0x04},
	{value: 0x006b, lo: 0x80, hi: 0x85},
	{value: 0x0083, lo: 0x86, hi: 0x9f},
	{value: 0x0043, lo: 0xa0, hi: 0xb9},
	{value: 0x0083, lo: 0xba, hi: 0xbf},
	// Block 0x8e, offset 0x303
	{value: 0x0002, lo: 0x03},
	{value: 0x008f, lo: 0x80, hi: 0x93},
	{value: 0x0043, lo: 0x94, hi: 0xad},
	{value: 0x0083, lo: 0xae, hi: 0xbf},
	// Block 0x8f, offset 0x307
	{value: 0x0002, lo: 0x04},
	{value: 0x00a7, lo: 0x80, hi: 0x87},
	{value: 0x0043, lo: 0x88, hi: 0xa1},
	{value: 0x0083, lo: 0xa2, hi: 0xbb},
	{value: 0x0043, lo: 0xbc, hi: 0xbf},
	// Block 0x90, offset 0x30c
	{value: 0x0002, lo: 0x03},
	{value: 0x004b, lo: 0x80, hi: 0x95},
	{value: 0x0083, lo: 0x96, hi: 0xaf},
	{value: 0x0043, lo: 0xb0, hi: 0xbf},
	// Block 0x91, offset 0x310
	{value: 0x0003, lo: 0x0f},
	{value: 0x01b8, lo: 0x80, hi: 0x80},
	{value: 0x045f, lo: 0x81, hi: 0x81},
	{value: 0x01bb, lo: 0x82, hi: 0x9a},
	{value: 0x045b, lo: 0x9b, hi: 0x9b},
	{value: 0x01c7, lo: 0x9c, hi: 0x9c},
	{value: 0x01d0, lo: 0x9d, hi: 0x9d},
	{value: 0x01d6, lo: 0x9e, hi: 0x9e},
	{value: 0x01fa, lo: 0x9f, hi: 0x9f},
	{value: 0x01eb, lo: 0xa0, hi: 0xa0},
	{value: 0x01e8, lo: 0xa1, hi: 0xa1},
	{value: 0x0173, lo: 0xa2, hi: 0xb2},
	{value: 0x0188, lo: 0xb3, hi: 0xb3},
	{value: 0x01a6, lo: 0xb4, hi: 0xba},
	{value: 0x045f, lo: 0xbb, hi: 0xbb},
	{value: 0x01bb, lo: 0xbc, hi: 0xbf},
	// Block 0x92, offset 0x320
	{value: 0x0003, lo: 0x0d},
	{value: 0x01c7, lo: 0x80, hi: 0x94},
	{value: 0x045b, lo: 0x95, hi: 0x95},
	{value: 0x01c7, lo: 0x96, hi: 0x96},
	{value: 0x01d0, lo: 0x97, hi: 0x97},
	{value: 0x01d6, lo: 0x98, hi: 0x98},
	{value: 0x01fa, lo: 0x99, hi: 0x99},
	{value: 0x01eb, lo: 0x9a, hi: 0x9a},
	{value: 0x01e8, lo: 0x9b, hi: 0x9b},
	{value: 0x0173, lo: 0x9c, hi: 0xac},
	{value: 0x0188, lo: 0xad, hi: 0xad},
	{value: 0x01a6, lo: 0xae, hi: 0xb4},
	{value: 0x045f, lo: 0xb5, hi: 0xb5},
	{value: 0x01bb, lo: 0xb6, hi: 0xbf},
	// Block 0x93, offset 0x32e
	{value: 0x0003, lo: 0x0d},
	{value: 0x01d9, lo: 0x80, hi: 0x8e},
	{value: 0x045b, lo: 0x8f, hi: 0x8f},
	{value: 0x01c7, lo: 0x90, hi: 0x90},
	{value: 0x01d0, lo: 0x91, hi: 0x91},
	{value: 0x01d6, lo: 0x92, hi: 0x92},
	{value: 0x01fa, lo: 0x93, hi: 0x93},
	{value: 0x01eb, lo: 0x94, hi: 0x94},
	{value: 0x01e8, lo: 0x95, hi: 0x95},
	{value: 0x0173, lo: 0x96, hi: 0xa6},
	{value: 0x0188, lo: 0xa7, hi: 0xa7},
	{value: 0x01a6, lo: 0xa8, hi: 0xae},
	{value: 0x045f, lo: 0xaf, hi: 0xaf},
	{value: 0x01bb, lo: 0xb0, hi: 0xbf},
	// Block 0x94, offset 0x33c
	{value: 0x0003, lo: 0x0d},
	{value: 0x01eb, lo: 0x80, hi: 0x88},
	{value: 0x045b, lo: 0x89, hi: 0x89},
	{value: 0x01c7, lo: 0x8a, hi: 0x8a},
	{value: 0x01d0, lo: 0x8b, hi: 0x8b},
	{value: 0x01d6, lo: 0x8c, hi: 0x8c},
	{value: 0x01fa, lo: 0x8d, hi: 0x8d},
	{value: 0x01eb, lo: 0x8e, hi: 0x8e},
	{value: 0x01e8, lo: 0x8f, hi: 0x8f},
	{value: 0x0173, lo: 0x90, hi: 0xa0},
	{value: 0x0188, lo: 0xa1, hi: 0xa1},
	{value: 0x01a6, lo: 0xa2, hi: 0xa8},
	{value: 0x045f, lo: 0xa9, hi: 0xa9},
	{value: 0x01bb, lo: 0xaa, hi: 0xbf},
	// Block 0x95, offset 0x34a
	{value: 0x0000, lo: 0x05},
	{value: 0x8132, lo: 0x80, hi: 0x86},
	{value: 0x8132, lo: 0x88, hi: 0x98},
	{value: 0x8132, lo: 0x9b, hi: 0xa1},
	{value: 0x8132, lo: 0xa3, hi: 0xa4},
	{value: 0x8132, lo: 0xa6, hi: 0xaa},
	// Block 0x96, offset 0x350
	{value: 0x0000, lo: 0x01},
	{value: 0x812d, lo: 0x90, hi: 0x96},
	// Block 0x97, offset 0x352
	{value: 0x0000, lo: 0x02},
	{value: 0x8132, lo: 0x84, hi: 0x89},
	{value: 0x8102, lo: 0x8a, hi: 0x8a},
	// Block 0x98, offset 0x355
	{value: 0x0002, lo: 0x09},
	{value: 0x0063, lo: 0x80, hi: 0x89},
	{value: 0x1951, lo: 0x8a, hi: 0x8a},
	{value: 0x1981, lo: 0x8b, hi: 0x8b},
	{value: 0x199c, lo: 0x8c, hi: 0x8c},
	{value: 0x19a2, lo: 0x8d, hi: 0x8d},
	{value: 0x1bc0, lo: 0x8e, hi: 0x8e},
	{value: 0x19ae, lo: 0x8f, hi: 0x8f},
	{value: 0x197b, lo: 0xaa, hi: 0xaa},
	{value: 0x197e, lo: 0xab, hi: 0xab},
	// Block 0x99, offset 0x35f
	{value: 0x0000, lo: 0x01},
	{value: 0x193f, lo: 0x90, hi: 0x90},
	// Block 0x9a, offset 0x361
	{value: 0x0028, lo: 0x09},
	{value: 0x2862, lo: 0x80, hi: 0x80},
	{value: 0x2826, lo: 0x81, hi: 0x81},
	{value: 0x2830, lo: 0x82, hi: 0x82},
	{value: 0x2844, lo: 0x83, hi: 0x84},
	{value: 0x284e, lo: 0x85, hi: 0x86},
	{value: 0x283a, lo: 0x87, hi: 0x87},
	{value: 0x2858, lo: 0x88, hi: 0x88},
	{value: 0x0b6f, lo: 0x90, hi: 0x90},
	{value: 0x08e7, lo: 0x91, hi: 0x91},
}

// recompMap: 7520 bytes (entries only)
var recompMap map[uint32]rune
var recompMapOnce sync.Once

const recompMapPacked = "" +
	"\x00A\x03\x00\x00\x00\x00\xc0" + // 0x00410300: 0x000000C0
	"\x00A\x03\x01\x00\x00\x00\xc1" + // 0x00410301: 0x000000C1
	"\x00A\x03\x02\x00\x00\x00\xc2" + // 0x00410302: 0x000000C2
	"\x00A\x03\x03\x00\x00\x00\xc3" + // 0x00410303: 0x000000C3
	"\x00A\x03\b\x00\x00\x00\xc4" + // 0x00410308: 0x000000C4
	"\x00A\x03\n\x00\x00\x00\xc5" + // 0x0041030A: 0x000000C5
	"\x00C\x03'\x00\x00\x00\xc7" + // 0x00430327: 0x000000C7
	"\x00E\x03\x00\x00\x00\x00\xc8" + // 0x00450300: 0x000000C8
	"\x00E\x03\x01\x00\x00\x00\xc9" + // 0x00450301: 0x000000C9
	"\x00E\x03\x02\x00\x00\x00\xca" + // 0x00450302: 0x000000CA
	"\x00E\x03\b\x00\x00\x00\xcb" + // 0x00450308: 0x000000CB
	"\x00I\x03\x00\x00\x00\x00\xcc" + // 0x00490300: 0x000000CC
	"\x00I\x03\x01\x00\x00\x00\xcd" + // 0x00490301: 0x000000CD
	"\x00I\x03\x02\x00\x00\x00\xce" + // 0x00490302: 0x000000CE
	"\x00I\x03\b\x00\x00\x00\xcf" + // 0x00490308: 0x000000CF
	"\x00N\x03\x03\x00\x00\x00\xd1" + // 0x004E0303: 0x000000D1
	"\x00O\x03\x00\x00\x00\x00\xd2" + // 0x004F0300: 0x000000D2
	"\x00O\x03\x01\x00\x00\x00\xd3" + // 0x004F0301: 0x000000D3
	"\x00O\x03\x02\x00\x00\x00\xd4" + // 0x004F0302: 0x000000D4
	"\x00O\x03\x03\x00\x00\x00\xd5" + // 0x004F0303: 0x000000D5
	"\x00O\x03\b\x00\x00\x00\xd6" + // 0x004F0308: 0x000000D6
	"\x00U\x03\x00\x00\x00\x00\xd9" + // 0x00550300: 0x000000D9
	"\x00U\x03\x01\x00\x00\x00\xda" + // 0x00550301: 0x000000DA
	"\x00U\x03\x02\x00\x00\x00\xdb" + // 0x00550302: 0x000000DB
	"\x00U\x03\b\x00\x00\x00\xdc" + // 0x00550308: 0x000000DC
	"\x00Y\x03\x01\x00\x00\x00\xdd" + // 0x00590301: 0x000000DD
	"\x00a\x03\x00\x00\x00\x00\xe0" + // 0x00610300: 0x000000E0
	"\x00a\x03\x01\x00\x00\x00\xe1" + // 0x00610301: 0x000000E1
	"\x00a\x03\x02\x00\x00\x00\xe2" + // 0x00610302: 0x000000E2
	"\x00a\x03\x03\x00\x00\x00\xe3" + // 0x00610303: 0x000000E3
	"\x00a\x03\b\x00\x00\x00\xe4" + // 0x00610308: 0x000000E4
	"\x00a\x03\n\x00\x00\x00\xe5" + // 0x0061030A: 0x000000E5
	"\x00c\x03'\x00\x00\x00\xe7" + // 0x00630327: 0x000000E7
	"\x00e\x03\x00\x00\x00\x00\xe8" + // 0x00650300: 0x000000E8
	"\x00e\x03\x01\x00\x00\x00\xe9" + // 0x00650301: 0x000000E9
	"\x00e\x03\x02\x00\x00\x00\xea" + // 0x00650302: 0x000000EA
	"\x00e\x03\b\x00\x00\x00\xeb" + // 0x00650308: 0x000000EB
	"\x00i\x03\x00\x00\x00\x00\xec" + // 0x00690300: 0x000000EC
	"\x00i\x03\x01\x00\x00\x00\xed" + // 0x00690301: 0x000000ED
	"\x00i\x03\x02\x00\x00\x00\xee" + // 0x00690302: 0x000000EE
	"\x00i\x03\b\x00\x00\x00\xef" + // 0x00690308: 0x000000EF
	"\x00n\x03\x03\x00\x00\x00\xf1" + // 0x006E0303: 0x000000F1
	"\x00o\x03\x00\x00\x00\x00\xf2" + // 0x006F0300: 0x000000F2
	"\x00o\x03\x01\x00\x00\x00\xf3" + // 0x006F0301: 0x000000F3
	"\x00o\x03\x02\x00\x00\x00\xf4" + // 0x006F0302: 0x000000F4
	"\x00o\x03\x03\x00\x00\x00\xf5" + // 0x006F0303: 0x000000F5
	"\x00o\x03\b\x00\x00\x00\xf6" + // 0x006F0308: 0x000000F6
	"\x00u\x03\x00\x00\x00\x00\xf9" + // 0x00750300: 0x000000F9
	"\x00u\x03\x01\x00\x00\x00\xfa" + // 0x00750301: 0x000000FA
	"\x00u\x03\x02\x00\x00\x00\xfb" + // 0x00750302: 0x000000FB
	"\x00u\x03\b\x00\x00\x00\xfc" + // 0x00750308: 0x000000FC
	"\x00y\x03\x01\x00\x00\x00\xfd" + // 0x00790301: 0x000000FD
	"\x00y\x03\b\x00\x00\x00\xff" + // 0x00790308: 0x000000FF
	"\x00A\x03\x04\x00\x00\x01\x00" + // 0x00410304: 0x00000100
	"\x00a\x03\x04\x00\x00\x01\x01" + // 0x00610304: 0x00000101
	"\x00A\x03\x06\x00\x00\x01\x02" + // 0x00410306: 0x00000102
	"\x00a\x03\x06\x00\x00\x01\x03" + // 0x00610306: 0x00000103
	"\x00A\x03(\x00\x00\x01\x04" + // 0x00410328: 0x00000104
	"\x00a\x03(\x00\x00\x01\x05" + // 0x00610328: 0x00000105
	"\x00C\x03\x01\x00\x00\x01\x06" + // 0x00430301: 0x00000106
	"\x00c\x03\x01\x00\x00\x01\a" + // 0x00630301: 0x00000107
	"\x00C\x03\x02\x00\x00\x01\b" + // 0x00430302: 0x00000108
	"\x00c\x03\x02\x00\x00\x01\t" + // 0x00630302: 0x00000109
	"\x00C\x03\a\x00\x00\x01\n" + // 0x00430307: 0x0000010A
	"\x00c\x03\a\x00\x00\x01\v" + // 0x00630307: 0x0000010B
	"\x00C\x03\f\x00\x00\x01\f" + // 0x0043030C: 0x0000010C
	"\x00c\x03\f\x00\x00\x01\r" + // 0x0063030C: 0x0000010D
	"\x00D\x03\f\x00\x00\x01\x0e" + // 0x0044030C: 0x0000010E
	"\x00d\x03\f\x00\x00\x01\x0f" + // 0x0064030C: 0x0000010F
	"\x00E\x03\x04\x00\x00\x01\x12" + // 0x00450304: 0x00000112
	"\x00e\x03\x04\x00\x00\x01\x13" + // 0x00650304: 0x00000113
	"\x00E\x03\x06\x00\x00\x01\x14" + // 0x00450306: 0x00000114
	"\x00e\x03\x06\x00\x00\x01\x15" + // 0x00650306: 0x00000115
	"\x00E\x03\a\x00\x00\x01\x16" + // 0x00450307: 0x00000116
	"\x00e\x03\a\x00\x00\x01\x17" + // 0x00650307: 0x00000117
	"\x00E\x03(\x00\x00\x01\x18" + // 0x00450328: 0x00000118
	"\x00e\x03(\x00\x00\x01\x19" + // 0x00650328: 0x00000119
	"\x00E\x03\f\x00\x00\x01\x1a" + // 0x0045030C: 0x0000011A
	"\x00e\x03\f\x00\x00\x01\x1b" + // 0x0065030C: 0x0000011B
	"\x00G\x03\x02\x00\x00\x01\x1c" + // 0x00470302: 0x0000011C
	"\x00g\x03\x02\x00\x00\x01\x1d" + // 0x00670302: 0x0000011D
	"\x00G\x03\x06\x00\x00\x01\x1e" + // 0x00470306: 0x0000011E
	"\x00g\x03\x06\x00\x00\x01\x1f" + // 0x00670306: 0x0000011F
	"\x00G\x03\a\x00\x00\x01 " + // 0x00470307: 0x00000120
	"\x00g\x03\a\x00\x00\x01!" + // 0x00670307: 0x00000121
	"\x00G\x03'\x00\x00\x01\"" + // 0x00470327: 0x00000122
	"\x00g\x03'\x00\x00\x01#" + // 0x00670327: 0x00000123
	"\x00H\x03\x02\x00\x00\x01$" + // 0x00480302: 0x00000124
	"\x00h\x03\x02\x00\x00\x01%" + // 0x00680302: 0x00000125
	"\x00I\x03\x03\x00\x00\x01(" + // 0x00490303: 0x00000128
	"\x00i\x03\x03\x00\x00\x01)" + // 0x00690303: 0x00000129
	"\x00I\x03\x04\x00\x00\x01*" + // 0x00490304: 0x0000012A
	"\x00i\x03\x04\x00\x00\x01+" + // 0x00690304: 0x0000012B
	"\x00I\x03\x06\x00\x00\x01," + // 0x00490306: 0x0000012C
	"\x00i\x03\x06\x00\x00\x01-" + // 0x00690306: 0x0000012D
	"\x00I\x03(\x00\x00\x01." + // 0x00490328: 0x0000012E
	"\x00i\x03(\x00\x00\x01/" + // 0x00690328: 0x0000012F
	"\x00I\x03\a\x00\x00\x010" + // 0x00490307: 0x00000130
	"\x00J\x03\x02\x00\x00\x014" + // 0x004A0302: 0x00000134
	"\x00j\x03\x02\x00\x00\x015" + // 0x006A0302: 0x00000135
	"\x00K\x03'\x00\x00\x016" + // 0x004B0327: 0x00000136
	"\x00k\x03'\x00\x00\x017" + // 0x006B0327: 0x00000137
	"\x00L\x03\x01\x00\x00\x019" + // 0x004C0301: 0x00000139
	"\x00l\x03\x01\x00\x00\x01:" + // 0x006C0301: 0x0000013A
	"\x00L\x03'\x00\x00\x01;" + // 0x004C0327: 0x0000013B
	"\x00l\x03'\x00\x00\x01<" + // 0x006C0327: 0x0000013C
	"\x00L\x03\f\x00\x00\x01=" + // 0x004C030C: 0x0000013D
	"\x00l\x03\f\x00\x00\x01>" + // 0x006C030C: 0x0000013E
	"\x00N\x03\x01\x00\x00\x01C" + // 0x004E0301: 0x00000143
	"\x00n\x03\x01\x00\x00\x01D" + // 0x006E0301: 0x00000144
	"\x00N\x03'\x00\x00\x01E" + // 0x004E0327: 0x00000145
	"\x00n\x03'\x00\x00\x01F" + // 0x006E0327: 0x00000146
	"\x00N\x03\f\x00\x00\x01G" + // 0x004E030C: 0x00000147
	"\x00n\x03\f\x00\x00\x01H" + // 0x006E030C: 0x00000148
	"\x00O\x03\x04\x00\x00\x01L" + // 0x004F0304: 0x0000014C
	"\x00o\x03\x04\x00\x00\x01M" + // 0x006F0304: 0x0000014D
	"\x00O\x03\x06\x00\x00\x01N" + // 0x004F0306: 0x0000014E
	"\x00o\x03\x06\x00\x00\x01O" + // 0x006F0306: 0x0000014F
	"\x00O\x03\v\x00\x00\x01P" + // 0x004F030B: 0x00000150
	"\x00o\x03\v\x00\x00\x01Q" + // 0x006F030B: 0x00000151
	"\x00R\x03\x01\x00\x00\x01T" + // 0x00520301: 0x00000154
	"\x00r\x03\x01\x00\x00\x01U" + // 0x00720301: 0x00000155
	"\x00R\x03'\x00\x00\x01V" + // 0x00520327: 0x00000156
	"\x00r\x03'\x00\x00\x01W" + // 0x00720327: 0x00000157
	"\x00R\x03\f\x00\x00\x01X" + // 0x0052030C: 0x00000158
	"\x00r\x03\f\x00\x00\x01Y" + // 0x0072030C: 0x00000159
	"\x00S\x03\x01\x00\x00\x01Z" + // 0x00530301: 0x0000015A
	"\x00s\x03\x01\x00\x00\x01[" + // 0x00730301: 0x0000015B
	"\x00S\x03\x02\x00\x00\x01\\" + // 0x00530302: 0x0000015C
	"\x00s\x03\x02\x00\x00\x01]" + // 0x00730302: 0x0000015D
	"\x00S\x03'\x00\x00\x01^" + // 0x00530327: 0x0000015E
	"\x00s\x03'\x00\x00\x01_" + // 0x00730327: 0x0000015F
	"\x00S\x03\f\x00\x00\x01`" + // 0x0053030C: 0x00000160
	"\x00s\x03\f\x00\x00\x01a" + // 0x0073030C: 0x00000161
	"\x00T\x03'\x00\x00\x01b" + // 0x00540327: 0x00000162
	"\x00t\x03'\x00\x00\x01c" + // 0x00740327: 0x00000163
	"\x00T\x03\f\x00\x00\x01d" + // 0x0054030C: 0x00000164
	"\x00t\x03\f\x00\x00\x01e" + // 0x0074030C: 0x00000165
	"\x00U\x03\x03\x00\x00\x01h" + // 0x00550303: 0x00000168
	"\x00u\x03\x03\x00\x00\x01i" + // 0x00750303: 0x00000169
	"\x00U\x03\x04\x00\x00\x01j" + // 0x00550304: 0x0000016A
	"\x00u\x03\x04\x00\x00\x01k" + // 0x00750304: 0x0000016B
	"\x00U\x03\x06\x00\x00\x01l" + // 0x00550306: 0x0000016C
	"\x00u\x03\x06\x00\x00\x01m" + // 0x00750306: 0x0000016D
	"\x00U\x03\n\x00\x00\x01n" + // 0x0055030A: 0x0000016E
	"\x00u\x03\n\x00\x00\x01o" + // 0x0075030A: 0x0000016F
	"\x00U\x03\v\x00\x00\x01p" + // 0x0055030B: 0x00000170
	"\x00u\x03\v\x00\x00\x01q" + // 0x0075030B: 0x00000171
	"\x00U\x03(\x00\x00\x01r" + // 0x00550328: 0x00000172
	"\x00u\x03(\x00\x00\x01s" + // 0x00750328: 0x00000173
	"\x00W\x03\x02\x00\x00\x01t" + // 0x00570302: 0x00000174
	"\x00w\x03\x02\x00\x00\x01u" + // 0x00770302: 0x00000175
	"\x00Y\x03\x02\x00\x00\x01v" + // 0x00590302: 0x00000176
	"\x00y\x03\x02\x00\x00\x01w" + // 0x00790302: 0x00000177
	"\x00Y\x03\b\x00\x00\x01x" + // 0x00590308: 0x00000178
	"\x00Z\x03\x01\x00\x00\x01y" + // 0x005A0301: 0x00000179
	"\x00z\x03\x01\x00\x00\x01z" + // 0x007A0301: 0x0000017A
	"\x00Z\x03\a\x00\x00\x01{" + // 0x005A0307: 0x0000017B
	"\x00z\x03\a\x00\x00\x01|" + // 0x007A0307: 0x0000017C
	"\x00Z\x03\f\x00\x00\x01}" + // 0x005A030C: 0x0000017D
	"\x00z\x03\f\x00\x00\x01~" + // 0x007A030C: 0x0000017E
	"\x00O\x03\x1b\x00\x00\x01\xa0" + // 0x004F031B: 0x000001A0
	"\x00o\x03\x1b\x00\x00\x01\xa1" + // 0x006F031B: 0x000001A1
	"\x00U\x03\x1b\x00\x00\x01\xaf" + // 0x0055031B: 0x000001AF
	"\x00u\x03\x1b\x00\x00\x01\xb0" + // 0x0075031B: 0x000001B0
	"\x00A\x03\f\x00\x00\x01\xcd" + // 0x0041030C: 0x000001CD
	"\x00a\x03\f\x00\x00\x01\xce" + // 0x0061030C: 0x000001CE
	"\x00I\x03\f\x00\x00\x01\xcf" + // 0x0049030C: 0x000001CF
	"\x00i\x03\f\x00\x00\x01\xd0" + // 0x0069030C: 0x000001D0
	"\x00O\x03\f\x00\x00\x01\xd1" + // 0x004F030C: 0x000001D1
	"\x00o\x03\f\x00\x00\x01\xd2" + // 0x006F030C: 0x000001D2
	"\x00U\x03\f\x00\x00\x01\xd3" + // 0x0055030C: 0x000001D3
	"\x00u\x03\f\x00\x00\x01\xd4" + // 0x0075030C: 0x000001D4
	"\x00\xdc\x03\x04\x00\x00\x01\xd5" + // 0x00DC0304: 0x000001D5
	"\x00\xfc\x03\x04\x00\x00\x01\xd6" + // 0x00FC0304: 0x000001D6
	"\x00\xdc\x03\x01\x00\x00\x01\xd7" + // 0x00DC0301: 0x000001D7
	"\x00\xfc\x03\x01\x00\x00\x01\xd8" + // 0x00FC0301: 0x000001D8
	"\x00\xdc\x03\f\x00\x00\x01\xd9" + // 0x00DC030C: 0x000001D9
	"\x00\xfc\x03\f\x00\x00\x01\xda" + // 0x00FC030C: 0x000001DA
	"\x00\xdc\x03\x00\x00\x00\x01\xdb" + // 0x00DC0300: 0x000001DB
	"\x00\xfc\x03\x00\x00\x00\x01\xdc" + // 0x00FC0300: 0x000001DC
	"\x00\xc4\x03\x04\x00\x00\x01\xde" + // 0x00C40304: 0x000001DE
	"\x00\xe4\x03\x04\x00\x00\x01\xdf" + // 0x00E40304: 0x000001DF
	"\x02&\x03\x04\x00\x00\x01\xe0" + // 0x02260304: 0x000001E0
	"\x02'\x03\x04\x00\x00\x01\xe1" + // 0x02270304: 0x000001E1
	"\x00\xc6\x03\x04\x00\x00\x01\xe2" + // 0x00C60304: 0x000001E2
	"\x00\xe6\x03\x04\x00\x00\x01\xe3" + // 0x00E60304: 0x000001E3
	"\x00G\x03\f\x00\x00\x01\xe6" + // 0x0047030C: 0x000001E6
	"\x00g\x03\f\x00\x00\x01\xe7" + // 0x0067030C: 0x000001E7
	"\x00K\x03\f\x00\x00\x01\xe8" + // 0x004B030C: 0x000001E8
	"\x00k\x03\f\x00\x00\x01\xe9" + // 0x006B030C: 0x000001E9
	"\x00O\x03(\x00\x00\x01\xea" + // 0x004F0328: 0x000001EA
	"\x00o\x03(\x00\x00\x01\xeb" + // 0x006F0328: 0x000001EB
	"\x01\xea\x03\x04\x00\x00\x01\xec" + // 0x01EA0304: 0x000001EC
	"\x01\xeb\x03\x04\x00\x00\x01\xed" + // 0x01EB0304: 0x000001ED
	"\x01\xb7\x03\f\x00\x00\x01\xee" + // 0x01B7030C: 0x000001EE
	"\x02\x92\x03\f\x00\x00\x01\xef" + // 0x0292030C: 0x000001EF
	"\x00j\x03\f\x00\x00\x01\xf0" + // 0x006A030C: 0x000001F0
	"\x00G\x03\x01\x00\x00\x01\xf4" + // 0x00470301: 0x000001F4
	"\x00g\x03\x01\x00\x00\x01\xf5" + // 0x00670301: 0x000001F5
	"\x00N\x03\x00\x00\x00\x01\xf8" + // 0x004E0300: 0x000001F8
	"\x00n\x03\x00\x00\x00\x01\xf9" + // 0x006E0300: 0x000001F9
	"\x00\xc5\x03\x01\x00\x00\x01\xfa" + // 0x00C50301: 0x000001FA
	"\x00\xe5\x03\x01\x00\x00\x01\xfb" + // 0x00E50301: 0x000001FB
	"\x00\xc6\x03\x01\x00\x00\x01\xfc" + // 0x00C60301: 0x000001FC
	"\x00\xe6\x03\x01\x00\x00\x01\xfd" + // 0x00E60301: 0x000001FD
	"\x00\xd8\x03\x01\x00\x00\x01\xfe" + // 0x00D80301: 0x000001FE
	"\x00\xf8\x03\x01\x00\x00\x01\xff" + // 0x00F80301: 0x000001FF
	"\x00A\x03\x0f\x00\x00\x02\x00" + // 0x0041030F: 0x00000200
	"\x00a\x03\x0f\x00\x00\x02\x01" + // 0x0061030F: 0x00000201
	"\x00A\x03\x11\x00\x00\x02\x02" + // 0x00410311: 0x00000202
	"\x00a\x03\x11\x00\x00\x02\x03" + // 0x00610311: 0x00000203
	"\x00E\x03\x0f\x00\x00\x02\x04" + // 0x0045030F: 0x00000204
	"\x00e\x03\x0f\x00\x00\x02\x05" + // 0x0065030F: 0x00000205
	"\x00E\x03\x11\x00\x00\x02\x06" + // 0x00450311: 0x00000206
	"\x00e\x03\x11\x00\x00\x02\a" + // 0x00650311: 0x00000207
	"\x00I\x03\x0f\x00\x00\x02\b" + // 0x0049030F: 0x00000208
	"\x00i\x03\x0f\x00\x00\x02\t" + // 0x0069030F: 0x00000209
	"\x00I\x03\x11\x00\x00\x02\n" + // 0x00490311: 0x0000020A
	"\x00i\x03\x11\x00\x00\x02\v" + // 0x00690311: 0x0000020B
	"\x00O\x03\x0f\x00\x00\x02\f" + // 0x004F030F: 0x0000020C
	"\x00o\x03\x0f\x00\x00\x02\r" + // 0x006F030F: 0x0000020D
	"\x00O\x03\x11\x00\x00\x02\x0e" + // 0x004F0311: 0x0000020E
	"\x00o\x03\x11\x00\x00\x02\x0f" + // 0x006F0311: 0x0000020F
	"\x00R\x03\x0f\x00\x00\x02\x10" + // 0x0052030F: 0x00000210
	"\x00r\x03\x0f\x00\x00\x02\x11" + // 0x0072030F: 0x00000211
	"\x00R\x03\x11\x00\x00\x02\x12" + // 0x00520311: 0x00000212
	"\x00r\x03\x11\x00\x00\x02\x13" + // 0x00720311: 0x00000213
	"\x00U\x03\x0f\x00\x00\x02\x14" + // 0x0055030F: 0x00000214
	"\x00u\x03\x0f\x00\x00\x02\x15" + // 0x0075030F: 0x00000215
	"\x00U\x03\x11\x00\x00\x02\x16" + // 0x00550311: 0x00000216
	"\x00u\x03\x11\x00\x00\x02\x17" + // 0x00750311: 0x00000217
	"\x00S\x03&\x00\x00\x02\x18" + // 0x00530326: 0x00000218
	"\x00s\x03&\x00\x00\x02\x19" + // 0x00730326: 0x00000219
	"\x00T\x03&\x00\x00\x02\x1a" + // 0x00540326: 0x0000021A
	"\x00t\x03&\x00\x00\x02\x1b" + // 0x00740326: 0x0000021B
	"\x00H\x03\f\x00\x00\x02\x1e" + // 0x0048030C: 0x0000021E
	"\x00h\x03\f\x00\x00\x02\x1f" + // 0x0068030C: 0x0000021F
	"\x00A\x03\a\x00\x00\x02&" + // 0x00410307: 0x00000226
	"\x00a\x03\a\x00\x00\x02'" + // 0x00610307: 0x00000227
	"\x00E\x03'\x00\x00\x02(" + // 0x00450327: 0x00000228
	"\x00e\x03'\x00\x00\x02)" + // 0x00650327: 0x00000229
	"\x00\xd6\x03\x04\x00\x00\x02*" + // 0x00D60304: 0x0000022A
	"\x00\xf6\x03\x04\x00\x00\x02+" + // 0x00F60304: 0x0000022B
	"\x00\xd5\x03\x04\x00\x00\x02," + // 0x00D50304: 0x0000022C
	"\x00\xf5\x03\x04\x00\x00\x02-" + // 0x00F50304: 0x0000022D
	"\x00O\x03\a\x00\x00\x02." + // 0x004F0307: 0x0000022E
	"\x00o\x03\a\x00\x00\x02/" + // 0x006F0307: 0x0000022F
	"\x02.\x03\x04\x00\x00\x020" + // 0x022E0304: 0x00000230
	"\x02/\x03\x04\x00\x00\x021" + // 0x022F0304: 0x00000231
	"\x00Y\x03\x04\x00\x00\x022" + // 0x00590304: 0x00000232
	"\x00y\x03\x04\x00\x00\x023" + // 0x00790304: 0x00000233
	"\x00\xa8\x03\x01\x00\x00\x03\x85" + // 0x00A80301: 0x00000385
	"\x03\x91\x03\x01\x00\x00\x03\x86" + // 0x03910301: 0x00000386
	"\x03\x95\x03\x01\x00\x00\x03\x88" + // 0x03950301: 0x00000388
	"\x03\x97\x03\x01\x00\x00\x03\x89" + // 0x03970301: 0x00000389
	"\x03\x99\x03\x01\x00\x00\x03\x8a" + // 0x03990301: 0x0000038A
	"\x03\x9f\x03\x01\x00\x00\x03\x8c" + // 0x039F0301: 0x0000038C
	"\x03\xa5\x03\x01\x00\x00\x03\x8e" + // 0x03A50301: 0x0000038E
	"\x03\xa9\x03\x01\x00\x00\x03\x8f" + // 0x03A90301: 0x0000038F
	"\x03\xca\x03\x01\x00\x00\x03\x90" + // 0x03CA0301: 0x00000390
	"\x03\x99\x03\b\x00\x00\x03\xaa" + // 0x03990308: 0x000003AA
	"\x03\xa5\x03\b\x00\x00\x03\xab" + // 0x03A50308: 0x000003AB
	"\x03\xb1\x03\x01\x00\x00\x03\xac" + // 0x03B10301: 0x000003AC
	"\x03\xb5\x03\x01\x00\x00\x03\xad" + // 0x03B50301: 0x000003AD
	"\x03\xb7\x03\x01\x00\x00\x03\xae" + // 0x03B70301: 0x000003AE
	"\x03\xb9\x03\x01\x00\x00\x03\xaf" + // 0x03B90301: 0x000003AF
	"\x03\xcb\x03\x01\x00\x00\x03\xb0" + // 0x03CB0301: 0x000003B0
	"\x03\xb9\x03\b\x00\x00\x03\xca" + // 0x03B90308: 0x000003CA
	"\x03\xc5\x03\b\x00\x00\x03\xcb" + // 0x03C50308: 0x000003CB
	"\x03\xbf\x03\x01\x00\x00\x03\xcc" + // 0x03BF0301: 0x000003CC
	"\x03\xc5\x03\x01\x00\x00\x03\xcd" + // 0x03C50301: 0x000003CD
	"\x03\xc9\x03\x01\x00\x00\x03\xce" + // 0x03C90301: 0x000003CE
	"\x03\xd2\x03\x01\x00\x00\x03\xd3" + // 0x03D20301: 0x000003D3
	"\x03\xd2\x03\b\x00\x00\x03\xd4" + // 0x03D20308: 0x000003D4
	"\x04\x15\x03\x00\x00\x00\x04\x00" + // 0x04150300: 0x00000400
	"\x04\x15\x03\b\x00\x00\x04\x01" + // 0x04150308: 0x00000401
	"\x04\x13\x03\x01\x00\x00\x04\x03" + // 0x04130301: 0x00000403
	"\x04\x06\x03\b\x00\x00\x04\a" + // 0x04060308: 0x00000407
	"\x04\x1a\x03\x01\x00\x00\x04\f" + // 0x041A0301: 0x0000040C
	"\x04\x18\x03\x00\x00\x00\x04\r" + // 0x04180300: 0x0000040D
	"\x04#\x03\x06\x00\x00\x04\x0e" + // 0x04230306: 0x0000040E
	"\x04\x18\x03\x06\x00\x00\x04\x19" + // 0x04180306: 0x00000419
	"\x048\x03\x06\x00\x00\x049" + // 0x04380306: 0x00000439
	"\x045\x03\x00\x00\x00\x04P" + // 0x04350300: 0x00000450
	"\x045\x03\b\x00\x00\x04Q" + // 0x04350308: 0x00000451
	"\x043\x03\x01\x00\x00\x04S" + // 0x04330301: 0x00000453
	"\x04V\x03\b\x00\x00\x04W" + // 0x04560308: 0x00000457
	"\x04:\x03\x01\x00\x00\x04\\" + // 0x043A0301: 0x0000045C
	"\x048\x03\x00\x00\x00\x04]" + // 0x04380300: 0x0000045D
	"\x04C\x03\x06\x00\x00\x04^" + // 0x04430306: 0x0000045E
	"\x04t\x03\x0f\x00\x00\x04v" + // 0x0474030F: 0x00000476
	"\x04u\x03\x0f\x00\x00\x04w" + // 0x0475030F: 0x00000477
	"\x04\x16\x03\x06\x00\x00\x04\xc1" + // 0x04160306: 0x000004C1
	"\x046\x03\x06\x00\x00\x04\xc2" + // 0x04360306: 0x000004C2
	"\x04\x10\x03\x06\x00\x00\x04\xd0" + // 0x04100306: 0x000004D0
	"\x040\x03\x06\x00\x00\x04\xd1" + // 0x04300306: 0x000004D1
	"\x04\x10\x03\b\x00\x00\x04\xd2" + // 0x04100308: 0x000004D2
	"\x040\x03\b\x00\x00\x04\xd3" + // 0x04300308: 0x000004D3
	"\x04\x15\x03\x06\x00\x00\x04\xd6" + // 0x04150306: 0x000004D6
	"\x045\x03\x06\x00\x00\x04\xd7" + // 0x04350306: 0x000004D7
	"\x04\xd8\x03\b\x00\x00\x04\xda" + // 0x04D80308: 0x000004DA
	"\x04\xd9\x03\b\x00\x00\x04\xdb" + // 0x04D90308: 0x000004DB
	"\x04\x16\x03\b\x00\x00\x04\xdc" + // 0x04160308: 0x000004DC
	"\x046\x03\b\x00\x00\x04\xdd" + // 0x04360308: 0x000004DD
	"\x04\x17\x03\b\x00\x00\x04\xde" + // 0x04170308: 0x000004DE
	"\x047\x03\b\x00\x00\x04\xdf" + // 0x04370308: 0x000004DF
	"\x04\x18\x03\x04\x00\x00\x04\xe2" + // 0x04180304: 0x000004E2
	"\x048\x03\x04\x00\x00\x04\xe3" + // 0x04380304: 0x000004E3
	"\x04\x18\x03\b\x00\x00\x04\xe4" + // 0x04180308: 0x000004E4
	"\x048\x03\b\x00\x00\x04\xe5" + // 0x04380308: 0x000004E5
	"\x04\x1e\x03\b\x00\x00\x04\xe6" + // 0x041E0308: 0x000004E6
	"\x04>\x03\b\x00\x00\x04\xe7" + // 0x043E0308: 0x000004E7
	"\x04\xe8\x03\b\x00\x00\x04\xea" + // 0x04E80308: 0x000004EA
	"\x04\xe9\x03\b\x00\x00\x04\xeb" + // 0x04E90308: 0x000004EB
	"\x04-\x03\b\x00\x00\x04\xec" + // 0x042D0308: 0x000004EC
	"\x04M\x03\b\x00\x00\x04\xed" + // 0x044D0308: 0x000004ED
	"\x04#\x03\x04\x00\x00\x04\xee" + // 0x04230304: 0x000004EE
	"\x04C\x03\x04\x00\x00\x04\xef" + // 0x04430304: 0x000004EF
	"\x04#\x03\b\x00\x00\x04\xf0" + // 0x04230308: 0x000004F0
	"\x04C\x03\b\x00\x00\x04\xf1" + // 0x04430308: 0x000004F1
	"\x04#\x03\v\x00\x00\x04\xf2" + // 0x0423030B: 0x000004F2
	"\x04C\x03\v\x00\x00\x04\xf3" + // 0x0443030B: 0x000004F3
	"\x04'\x03\b\x00\x00\x04\xf4" + // 0x04270308: 0x000004F4
	"\x04G\x03\b\x00\x00\x04\xf5" + // 0x04470308: 0x000004F5
	"\x04+\x03\b\x00\x00\x04\xf8" + // 0x042B0308: 0x000004F8
	"\x04K\x03\b\x00\x00\x04\xf9" + // 0x044B0308: 0x000004F9
	"\x06'\x06S\x00\x00\x06\"" + // 0x06270653: 0x00000622
	"\x06'\x06T\x00\x00\x06#" + // 0x06270654: 0x00000623
	"\x06H\x06T\x00\x00\x06$" + // 0x06480654: 0x00000624
	"\x06'\x06U\x00\x00\x06%" + // 0x06270655: 0x00000625
	"\x06J\x06T\x00\x00\x06&" + // 0x064A0654: 0x00000626
	"\x06\xd5\x06T\x00\x00\x06\xc0" + // 0x06D50654: 0x000006C0
	"\x06\xc1\x06T\x00\x00\x06\xc2" + // 0x06C10654: 0x000006C2
	"\x06\xd2\x06T\x00\x00\x06\xd3" + // 0x06D20654: 0x000006D3
	"\t(\t<\x00\x00\t)" + // 0x0928093C: 0x00000929
	"\t0\t<\x00\x00\t1" + // 0x0930093C: 0x00000931
	"\t3\t<\x00\x00\t4" + // 0x0933093C: 0x00000934
	"\t\xc7\t\xbe\x00\x00\t\xcb" + // 0x09C709BE: 0x000009CB
	"\t\xc7\t\xd7\x00\x00\t\xcc" + // 0x09C709D7: 0x000009CC
	"\vG\vV\x00\x00\vH" + // 0x0B470B56: 0x00000B48
	"\vG\v>\x00\x00\vK" + // 0x0B470B3E: 0x00000B4B
	"\vG\vW\x00\x00\vL" + // 0x0B470B57: 0x00000B4C
	"\v\x92\v\xd7\x00\x00\v\x94" + // 0x0B920BD7: 0x00000B94
	"\v\xc6\v\xbe\x00\x00\v\xca" + // 0x0BC60BBE: 0x00000BCA
	"\v\xc7\v\xbe\x00\x00\v\xcb" + // 0x0BC70BBE: 0x00000BCB
	"\v\xc6\v\xd7\x00\x00\v\xcc" + // 0x0BC60BD7: 0x00000BCC
	"\fF\fV\x00\x00\fH" + // 0x0C460C56: 0x00000C48
	"\f\xbf\f\xd5\x00\x00\f\xc0" + // 0x0CBF0CD5: 0x00000CC0
	"\f\xc6\f\xd5\x00\x00\f\xc7" + // 0x0CC60CD5: 0x00000CC7
	"\f\xc6\f\xd6\x00\x00\f\xc8" + // 0x0CC60CD6: 0x00000CC8
	"\f\xc6\f\xc2\x00\x00\f\xca" + // 0x0CC60CC2: 0x00000CCA
	"\f\xca\f\xd5\x00\x00\f\xcb" + // 0x0CCA0CD5: 0x00000CCB
	"\rF\r>\x00\x00\rJ" + // 0x0D460D3E: 0x00000D4A
	"\rG\r>\x00\x00\rK" + // 0x0D470D3E: 0x00000D4B
	"\rF\rW\x00\x00\rL" + // 0x0D460D57: 0x00000D4C
	"\r\xd9\r\xca\x00\x00\r\xda" + // 0x0DD90DCA: 0x00000DDA
	"\r\xd9\r\xcf\x00\x00\r\xdc" + // 0x0DD90DCF: 0x00000DDC
	"\r\xdc\r\xca\x00\x00\r\xdd" + // 0x0DDC0DCA: 0x00000DDD
	"\r\xd9\r\xdf\x00\x00\r\xde" + // 0x0DD90DDF: 0x00000DDE
	"\x10%\x10.\x00\x00\x10&" + // 0x1025102E: 0x00001026
	"\x1b\x05\x1b5\x00\x00\x1b\x06" + // 0x1B051B35: 0x00001B06
	"\x1b\a\x1b5\x00\x00\x1b\b" + // 0x1B071B35: 0x00001B08
	"\x1b\t\x1b5\x00\x00\x1b\n" + // 0x1B091B35: 0x00001B0A
	"\x1b\v\x1b5\x00\x00\x1b\f" + // 0x1B0B1B35: 0x00001B0C
	"\x1b\r\x1b5\x00\x00\x1b\x0e" + // 0x1B0D1B35: 0x00001B0E
	"\x1b\x11\x1b5\x00\x00\x1b\x12" + // 0x1B111B35: 0x00001B12
	"\x1b:\x1b5\x00\x00\x1b;" + // 0x1B3A1B35: 0x00001B3B
	"\x1b<\x1b5\x00\x00\x1b=" + // 0x1B3C1B35: 0x00001B3D
	"\x1b>\x1b5\x00\x00\x1b@" + // 0x1B3E1B35: 0x00001B40
	"\x1b?\x1b5\x00\x00\x1bA" + // 0x1B3F1B35: 0x00001B41
	"\x1bB\x1b5\x00\x00\x1bC" + // 0x1B421B35: 0x00001B43
	"\x00A\x03%\x00\x00\x1e\x00" + // 0x00410325: 0x00001E00
	"\x00a\x03%\x00\x00\x1e\x01" + // 0x00610325: 0x00001E01
	"\x00B\x03\a\x00\x00\x1e\x02" + // 0x00420307: 0x00001E02
	"\x00b\x03\a\x00\x00\x1e\x03" + // 0x00620307: 0x00001E03
	"\x00B\x03#\x00\x00\x1e\x04" + // 0x00420323: 0x00001E04
	"\x00b\x03#\x00\x00\x1e\x05" + // 0x00620323: 0x00001E05
	"\x00B\x031\x00\x00\x1e\x06" + // 0x00420331: 0x00001E06
	"\x00b\x031\x00\x00\x1e\a" + // 0x00620331: 0x00001E07
	"\x00\xc7\x03\x01\x00\x00\x1e\b" + // 0x00C70301: 0x00001E08
	"\x00\xe7\x03\x01\x00\x00\x1e\t" + // 0x00E70301: 0x00001E09
	"\x00D\x03\a\x00\x00\x1e\n" + // 0x00440307: 0x00001E0A
	"\x00d\x03\a\x00\x00\x1e\v" + // 0x00640307: 0x00001E0B
	"\x00D\x03#\x00\x00\x1e\f" + // 0x00440323: 0x00001E0C
	"\x00d\x03#\x00\x00\x1e\r" + // 0x00640323: 0x00001E0D
	"\x00D\x031\x00\x00\x1e\x0e" + // 0x00440331: 0x00001E0E
	"\x00d\x031\x00\x00\x1e\x0f" + // 0x00640331: 0x00001E0F
	"\x00D\x03'\x00\x00\x1e\x10" + // 0x00440327: 0x00001E10
	"\x00d\x03'\x00\x00\x1e\x11" + // 0x00640327: 0x00001E11
	"\x00D\x03-\x00\x00\x1e\x12" + // 0x0044032D: 0x00001E12
	"\x00d\x03-\x00\x00\x1e\x13" + // 0x0064032D: 0x00001E13
	"\x01\x12\x03\x00\x00\x00\x1e\x14" + // 0x01120300: 0x00001E14
	"\x01\x13\x03\x00\x00\x00\x1e\x15" + // 0x01130300: 0x00001E15
	"\x01\x12\x03\x01\x00\x00\x1e\x16" + // 0x01120301: 0x00001E16
	"\x01\x13\x03\x01\x00\x00\x1e\x17" + // 0x01130301: 0x00001E17
	"\x00E\x03-\x00\x00\x1e\x18" + // 0x0045032D: 0x00001E18
	"\x00e\x03-\x00\x00\x1e\x19" + // 0x0065032D: 0x00001E19
	"\x00E\x030\x00\x00\x1e\x1a" + // 0x00450330: 0x00001E1A
	"\x00e\x030\x00\x00\x1e\x1b" + // 0x00650330: 0x00001E1B
	"\x02(\x03\x06\x00\x00\x1e\x1c" + // 0x02280306: 0x00001E1C
	"\x02)\x03\x06\x00\x00\x1e\x1d" + // 0x02290306: 0x00001E1D
	"\x00F\x03\a\x00\x00\x1e\x1e" + // 0x00460307: 0x00001E1E
	"\x00f\x03\a\x00\x00\x1e\x1f" + // 0x00660307: 0x00001E1F
	"\x00G\x03\x04\x00\x00\x1e " + // 0x00470304: 0x00001E20
	"\x00g\x03\x04\x00\x00\x1e!" + // 0x00670304: 0x00001E21
	"\x00H\x03\a\x00\x00\x1e\"" + // 0x00480307: 0x00001E22
	"\x00h\x03\a\x00\x00\x1e#" + // 0x00680307: 0x00001E23
	"\x00H\x03#\x00\x00\x1e$" + // 0x00480323: 0x00001E24
	"\x00h\x03#\x00\x00\x1e%" + // 0x00680323: 0x00001E25
	"\x00H\x03\b\x00\x00\x1e&" + // 0x00480308: 0x00001E26
	"\x00h\x03\b\x00\x00\x1e'" + // 0x00680308: 0x00001E27
	"\x00H\x03'\x00\x00\x1e(" + // 0x00480327: 0x00001E28
	"\x00h\x03'\x00\x00\x1e)" + // 0x00680327: 0x00001E29
	"\x00H\x03.\x00\x00\x1e*" + // 0x0048032E: 0x00001E2A
	"\x00h\x03.\x00\x00\x1e+" + // 0x0068032E: 0x00001E2B
	"\x00I\x030\x00\x00\x1e," + // 0x00490330: 0x00001E2C
	"\x00i\x030\x00\x00\x1e-" + // 0x00690330: 0x00001E2D
	"\x00\xcf\x03\x01\x00\x00\x1e." + // 0x00CF0301: 0x00001E2E
	"\x00\xef\x03\x01\x00\x00\x1e/" + // 0x00EF0301: 0x00001E2F
	"\x00K\x03\x01\x00\x00\x1e0" + // 0x004B0301: 0x00001E30
	"\x00k\x03\x01\x00\x00\x1e1" + // 0x006B0301: 0x00001E31
	"\x00K\x03#\x00\x00\x1e2" + // 0x004B0323: 0x00001E32
	"\x00k\x03#\x00\x00\x1e3" + // 0x006B0323: 0x00001E33
	"\x00K\x031\x00\x00\x1e4" + // 0x004B0331: 0x00001E34
	"\x00k\x031\x00\x00\x1e5" + // 0x006B0331: 0x00001E35
	"\x00L\x03#\x00\x00\x1e6" + // 0x004C0323: 0x00001E36
	"\x00l\x03#\x00\x00\x1e7" + // 0x006C0323: 0x00001E37
	"\x1e6\x03\x04\x00\x00\x1e8" + // 0x1E360304: 0x00001E38
	"\x1e7\x03\x04\x00\x00\x1e9" + // 0x1E370304: 0x00001E39
	"\x00L\x031\x00\x00\x1e:" + // 0x004C0331: 0x00001E3A
	"\x00l\x031\x00\x00\x1e;" + // 0x006C0331: 0x00001E3B
	"\x00L\x03-\x00\x00\x1e<" + // 0x004C032D: 0x00001E3C
	"\x00l\x03-\x00\x00\x1e=" + // 0x006C032D: 0x00001E3D
	"\x00M\x03\x01\x00\x00\x1e>" + // 0x004D0301: 0x00001E3E
	"\x00m\x03\x01\x00\x00\x1e?" + // 0x006D0301: 0x00001E3F
	"\x00M\x03\a\x00\x00\x1e@" + // 0x004D0307: 0x00001E40
	"\x00m\x03\a\x00\x00\x1eA" + // 0x006D0307: 0x00001E41
	"\x00M\x03#\x00\x00\x1eB" + // 0x004D0323: 0x00001E42
	"\x00m\x03#\x00\x00\x1eC" + // 0x006D0323: 0x00001E43
	"\x00N\x03\a\x00\x00\x1eD" + // 0x004E0307: 0x00001E44
	"\x00n\x03\a\x00\x00\x1eE" + // 0x006E0307: 0x00001E45
	"\x00N\x03#\x00\x00\x1eF" + // 0x004E0323: 0x00001E46
	"\x00n\x03#\x00\x00\x1eG" + // 0x006E0323: 0x00001E47
	"\x00N\x031\x00\x00\x1eH" + // 0x004E0331: 0x00001E48
	"\x00n\x031\x00\x00\x1eI" + // 0x006E0331: 0x00001E49
	"\x00N\x03-\x00\x00\x1eJ" + // 0x004E032D: 0x00001E4A
	"\x00n\x03-\x00\x00\x1eK" + // 0x006E032D: 0x00001E4B
	"\x00\xd5\x03\x01\x00\x00\x1eL" + // 0x00D50301: 0x00001E4C
	"\x00\xf5\x03\x01\x00\x00\x1eM" + // 0x00F50301: 0x00001E4D
	"\x00\xd5\x03\b\x00\x00\x1eN" + // 0x00D50308: 0x00001E4E
	"\x00\xf5\x03\b\x00\x00\x1eO" + // 0x00F50308: 0x00001E4F
	"\x01L\x03\x00\x00\x00\x1eP" + // 0x014C0300: 0x00001E50
	"\x01M\x03\x00\x00\x00\x1eQ" + // 0x014D0300: 0x00001E51
	"\x01L\x03\x01\x00\x00\x1eR" + // 0x014C0301: 0x00001E52
	"\x01M\x03\x01\x00\x00\x1eS" + // 0x014D0301: 0x00001E53
	"\x00P\x03\x01\x00\x00\x1eT" + // 0x00500301: 0x00001E54
	"\x00p\x03\x01\x00\x00\x1eU" + // 0x00700301: 0x00001E55
	"\x00P\x03\a\x00\x00\x1eV" + // 0x00500307: 0x00001E56
	"\x00p\x03\a\x00\x00\x1eW" + // 0x00700307: 0x00001E57
	"\x00R\x03\a\x00\x00\x1eX" + // 0x00520307: 0x00001E58
	"\x00r\x03\a\x00\x00\x1eY" + // 0x00720307: 0x00001E59
	"\x00R\x03#\x00\x00\x1eZ" + // 0x00520323: 0x00001E5A
	"\x00r\x03#\x00\x00\x1e[" + // 0x00720323: 0x00001E5B
	"\x1eZ\x03\x04\x00\x00\x1e\\" + // 0x1E5A0304: 0x00001E5C
	"\x1e[\x03\x04\x00\x00\x1e]" + // 0x1E5B0304: 0x00001E5D
	"\x00R\x031\x00\x00\x1e^" + // 0x00520331: 0x00001E5E
	"\x00r\x031\x00\x00\x1e_" + // 0x00720331: 0x00001E5F
	"\x00S\x03\a\x00\x00\x1e`" + // 0x00530307: 0x00001E60
	"\x00s\x03\a\x00\x00\x1ea" + // 0x00730307: 0x00001E61
	"\x00S\x03#\x00\x00\x1eb" + // 0x00530323: 0x00001E62
	"\x00s\x03#\x00\x00\x1ec" + // 0x00730323: 0x00001E63
	"\x01Z\x03\a\x00\x00\x1ed" + // 0x015A0307: 0x00001E64
	"\x01[\x03\a\x00\x00\x1ee" + // 0x015B0307: 0x00001E65
	"\x01`\x03\a\x00\x00\x1ef" + // 0x01600307: 0x00001E66
	"\x01a\x03\a\x00\x00\x1eg" + // 0x01610307: 0x00001E67
	"\x1eb\x03\a\x00\x00\x1eh" + // 0x1E620307: 0x00001E68
	"\x1ec\x03\a\x00\x00\x1ei" + // 0x1E630307: 0x00001E69
	"\x00T\x03\a\x00\x00\x1ej" + // 0x00540307: 0x00001E6A
	"\x00t\x03\a\x00\x00\x1ek" + // 0x00740307: 0x00001E6B
	"\x00T\x03#\x00\x00\x1el" + // 0x00540323: 0x00001E6C
	"\x00t\x03#\x00\x00\x1em" + // 0x00740323: 0x00001E6D
	"\x00T\x031\x00\x00\x1en" + // 0x00540331: 0x00001E6E
	"\x00t\x031\x00\x00\x1eo" + // 0x00740331: 0x00001E6F
	"\x00T\x03-\x00\x00\x1ep" + // 0x0054032D: 0x00001E70
	"\x00t\x03-\x00\x00\x1eq" + // 0x0074032D: 0x00001E71
	"\x00U\x03$\x00\x00\x1er" + // 0x00550324: 0x00001E72
	"\x00u\x03$\x00\x00\x1es" + // 0x00750324: 0x00001E73
	"\x00U\x030\x00\x00\x1et" + // 0x00550330: 0x00001E74
	"\x00u\x030\x00\x00\x1eu" + // 0x00750330: 0x00001E75
	"\x00U\x03-\x00\x00\x1ev" + // 0x0055032D: 0x00001E76
	"\x00u\x03-\x00\x00\x1ew" + // 0x0075032D: 0x00001E77
	"\x01h\x03\x01\x00\x00\x1ex" + // 0x01680301: 0x00001E78
	"\x01i\x03\x01\x00\x00\x1ey" + // 0x01690301: 0x00001E79
	"\x01j\x03\b\x00\x00\x1ez" + // 0x016A0308: 0x00001E7A
	"\x01k\x03\b\x00\x00\x1e{" + // 0x016B0308: 0x00001E7B
	"\x00V\x03\x03\x00\x00\x1e|" + // 0x00560303: 0x00001E7C
	"\x00v\x03\x03\x00\x00\x1e}" + // 0x00760303: 0x00001E7D
	"\x00V\x03#\x00\x00\x1e~" + // 0x00560323: 0x00001E7E
	"\x00v\x03#\x00\x00\x1e\u007f" + // 0x00760323: 0x00001E7F
	"\x00W\x03\x00\x00\x00\x1e\x80" + // 0x00570300: 0x00001E80
	"\x00w\x03\x00\x00\x00\x1e\x81" + // 0x00770300: 0x00001E81
	"\x00W\x03\x01\x00\x00\x1e\x82" + // 0x00570301: 0x00001E82
	"\x00w\x03\x01\x00\x00\x1e\x83" + // 0x00770301: 0x00001E83
	"\x00W\x03\b\x00\x00\x1e\x84" + // 0x00570308: 0x00001E84
	"\x00w\x03\b\x00\x00\x1e\x85" + // 0x00770308: 0x00001E85
	"\x00W\x03\a\x00\x00\x1e\x86" + // 0x00570307: 0x00001E86
	"\x00w\x03\a\x00\x00\x1e\x87" + // 0x00770307: 0x00001E87
	"\x00W\x03#\x00\x00\x1e\x88" + // 0x00570323: 0x00001E88
	"\x00w\x03#\x00\x00\x1e\x89" + // 0x00770323: 0x00001E89
	"\x00X\x03\a\x00\x00\x1e\x8a" + // 0x00580307: 0x00001E8A
	"\x00x\x03\a\x00\x00\x1e\x8b" + // 0x00780307: 0x00001E8B
	"\x00X\x03\b\x00\x00\x1e\x8c" + // 0x00580308: 0x00001E8C
	"\x00x\x03\b\x00\x00\x1e\x8d" + // 0x00780308: 0x00001E8D
	"\x00Y\x03\a\x00\x00\x1e\x8e" + // 0x00590307: 0x00001E8E
	"\x00y\x03\a\x00\x00\x1e\x8f" + // 0x00790307: 0x00001E8F
	"\x00Z\x03\x02\x00\x00\x1e\x90" + // 0x005A0302: 0x00001E90
	"\x00z\x03\x02\x00\x00\x1e\x91" + // 0x007A0302: 0x00001E91
	"\x00Z\x03#\x00\x00\x1e\x92" + // 0x005A0323: 0x00001E92
	"\x00z\x03#\x00\x00\x1e\x93" + // 0x007A0323: 0x00001E93
	"\x00Z\x031\x00\x00\x1e\x94" + // 0x005A0331: 0x00001E94
	"\x00z\x031\x00\x00\x1e\x95" + // 0x007A0331: 0x00001E95
	"\x00h\x031\x00\x00\x1e\x96" + // 0x00680331: 0x00001E96
	"\x00t\x03\b\x00\x00\x1e\x97" + // 0x00740308: 0x00001E97
	"\x00w\x03\n\x00\x00\x1e\x98" + // 0x0077030A: 0x00001E98
	"\x00y\x03\n\x00\x00\x1e\x99" + // 0x0079030A: 0x00001E99
	"\x01\u007f\x03\a\x00\x00\x1e\x9b" + // 0x017F0307: 0x00001E9B
	"\x00A\x03#\x00\x00\x1e\xa0" + // 0x00410323: 0x00001EA0
	"\x00a\x03#\x00\x00\x1e\xa1" + // 0x00610323: 0x00001EA1
	"\x00A\x03\t\x00\x00\x1e\xa2" + // 0x00410309: 0x00001EA2
	"\x00a\x03\t\x00\x00\x1e\xa3" + // 0x00610309: 0x00001EA3
	"\x00\xc2\x03\x01\x00\x00\x1e\xa4" + // 0x00C20301: 0x00001EA4
	"\x00\xe2\x03\x01\x00\x00\x1e\xa5" + // 0x00E20301: 0x00001EA5
	"\x00\xc2\x03\x00\x00\x00\x1e\xa6" + // 0x00C20300: 0x00001EA6
	"\x00\xe2\x03\x00\x00\x00\x1e\xa7" + // 0x00E20300: 0x00001EA7
	"\x00\xc2\x03\t\x00\x00\x1e\xa8" + // 0x00C20309: 0x00001EA8
	"\x00\xe2\x03\t\x00\x00\x1e\xa9" + // 0x00E20309: 0x00001EA9
	"\x00\xc2\x03\x03\x00\x00\x1e\xaa" + // 0x00C20303: 0x00001EAA
	"\x00\xe2\x03\x03\x00\x00\x1e\xab" + // 0x00E20303: 0x00001EAB
	"\x1e\xa0\x03\x02\x00\x00\x1e\xac" + // 0x1EA00302: 0x00001EAC
	"\x1e\xa1\x03\x02\x00\x00\x1e\xad" + // 0x1EA10302: 0x00001EAD
	"\x01\x02\x03\x01\x00\x00\x1e\xae" + // 0x01020301: 0x00001EAE
	"\x01\x03\x03\x01\x00\x00\x1e\xaf" + // 0x01030301: 0x00001EAF
	"\x01\x02\x03\x00\x00\x00\x1e\xb0" + // 0x01020300: 0x00001EB0
	"\x01\x03\x03\x00\x00\x00\x1e\xb1" + // 0x01030300: 0x00001EB1
	"\x01\x02\x03\t\x00\x00\x1e\xb2" + // 0x01020309: 0x00001EB2
	"\x01\x03\x03\t\x00\x00\x1e\xb3" + // 0x01030309: 0x00001EB3
	"\x01\x02\x03\x03\x00\x00\x1e\xb4" + // 0x01020303: 0x00001EB4
	"\x01\x03\x03\x03\x00\x00\x1e\xb5" + // 0x01030303: 0x00001EB5
	"\x1e\xa0\x03\x06\x00\x00\x1e\xb6" + // 0x1EA00306: 0x00001EB6
	"\x1e\xa1\x03\x06\x00\x00\x1e\xb7" + // 0x1EA10306: 0x00001EB7
	"\x00E\x03#\x00\x00\x1e\xb8" + // 0x00450323: 0x00001EB8
	"\x00e\x03#\x00\x00\x1e\xb9" + // 0x00650323: 0x00001EB9
	"\x00E\x03\t\x00\x00\x1e\xba" + // 0x00450309: 0x00001EBA
	"\x00e\x03\t\x00\x00\x1e\xbb" + // 0x00650309: 0x00001EBB
	"\x00E\x03\x03\x00\x00\x1e\xbc" + // 0x00450303: 0x00001EBC
	"\x00e\x03\x03\x00\x00\x1e\xbd" + // 0x00650303: 0x00001EBD
	"\x00\xca\x03\x01\x00\x00\x1e\xbe" + // 0x00CA0301: 0x00001EBE
	"\x00\xea\x03\x01\x00\x00\x1e\xbf" + // 0x00EA0301: 0x00001EBF
	"\x00\xca\x03\x00\x00\x00\x1e\xc0" + // 0x00CA0300: 0x00001EC0
	"\x00\xea\x03\x00\x00\x00\x1e\xc1" + // 0x00EA0300: 0x00001EC1
	"\x00\xca\x03\t\x00\x00\x1e\xc2" + // 0x00CA0309: 0x00001EC2
	"\x00\xea\x03\t\x00\x00\x1e\xc3" + // 0x00EA0309: 0x00001EC3
	"\x00\xca\x03\x03\x00\x00\x1e\xc4" + // 0x00CA0303: 0x00001EC4
	"\x00\xea\x03\x03\x00\x00\x1e\xc5" + // 0x00EA0303: 0x00001EC5
	"\x1e\xb8\x03\x02\x00\x00\x1e\xc6" + // 0x1EB80302: 0x00001EC6
	"\x1e\xb9\x03\x02\x00\x00\x1e\xc7" + // 0x1EB90302: 0x00001EC7
	"\x00I\x03\t\x00\x00\x1e\xc8" + // 0x00490309: 0x00001EC8
	"\x00i\x03\t\x00\x00\x1e\xc9" + // 0x00690309: 0x00001EC9
	"\x00I\x03#\x00\x00\x1e\xca" + // 0x00490323: 0x00001ECA
	"\x00i\x03#\x00\x00\x1e\xcb" + // 0x00690323: 0x00001ECB
	"\x00O\x03#\x00\x00\x1e\xcc" + // 0x004F0323: 0x00001ECC
	"\x00o\x03#\x00\x00\x1e\xcd" + // 0x006F0323: 0x00001ECD
	"\x00O\x03\t\x00\x00\x1e\xce" + // 0x004F0309: 0x00001ECE
	"\x00o\x03\t\x00\x00\x1e\xcf" + // 0x006F0309: 0x00001ECF
	"\x00\xd4\x03\x01\x00\x00\x1e\xd0" + // 0x00D40301: 0x00001ED0
	"\x00\xf4\x03\x01\x00\x00\x1e\xd1" + // 0x00F40301: 0x00001ED1
	"\x00\xd4\x03\x00\x00\x00\x1e\xd2" + // 0x00D40300: 0x00001ED2
	"\x00\xf4\x03\x00\x00\x00\x1e\xd3" + // 0x00F40300: 0x00001ED3
	"\x00\xd4\x03\t\x00\x00\x1e\xd4" + // 0x00D40309: 0x00001ED4
	"\x00\xf4\x03\t\x00\x00\x1e\xd5" + // 0x00F40309: 0x00001ED5
	"\x00\xd4\x03\x03\x00\x00\x1e\xd6" + // 0x00D40303: 0x00001ED6
	"\x00\xf4\x03\x03\x00\x00\x1e\xd7" + // 0x00F40303: 0x00001ED7
	"\x1e\xcc\x03\x02\x00\x00\x1e\xd8" + // 0x1ECC0302: 0x00001ED8
	"\x1e\xcd\x03\x02\x00\x00\x1e\xd9" + // 0x1ECD0302: 0x00001ED9
	"\x01\xa0\x03\x01\x00\x00\x1e\xda" + // 0x01A00301: 0x00001EDA
	"\x01\xa1\x03\x01\x00\x00\x1e\xdb" + // 0x01A10301: 0x00001EDB
	"\x01\xa0\x03\x00\x00\x00\x1e\xdc" + // 0x01A00300: 0x00001EDC
	"\x01\xa1\x03\x00\x00\x00\x1e\xdd" + // 0x01A10300: 0x00001EDD
	"\x01\xa0\x03\t\x00\x00\x1e\xde" + // 0x01A00309: 0x00001EDE
	"\x01\xa1\x03\t\x00\x00\x1e\xdf" + // 0x01A10309: 0x00001EDF
	"\x01\xa0\x03\x03\x00\x00\x1e\xe0" + // 0x01A00303: 0x00001EE0
	"\x01\xa1\x03\x03\x00\x00\x1e\xe1" + // 0x01A10303: 0x00001EE1
	"\x01\xa0\x03#\x00\x00\x1e\xe2" + // 0x01A00323: 0x00001EE2
	"\x01\xa1\x03#\x00\x00\x1e\xe3" + // 0x01A10323: 0x00001EE3
	"\x00U\x03#\x00\x00\x1e\xe4" + // 0x00550323: 0x00001EE4
	"\x00u\x03#\x00\x00\x1e\xe5" + // 0x00750323: 0x00001EE5
	"\x00U\x03\t\x00\x00\x1e\xe6" + // 0x00550309: 0x00001EE6
	"\x00u\x03\t\x00\x00\x1e\xe7" + // 0x00750309: 0x00001EE7
	"\x01\xaf\x03\x01\x00\x00\x1e\xe8" + // 0x01AF0301: 0x00001EE8
	"\x01\xb0\x03\x01\x00\x00\x1e\xe9" + // 0x01B00301: 0x00001EE9
	"\x01\xaf\x03\x00\x00\x00\x1e\xea" + // 0x01AF0300: 0x00001EEA
	"\x01\xb0\x03\x00\x00\x00\x1e\xeb" + // 0x01B00300: 0x00001EEB
	"\x01\xaf\x03\t\x00\x00\x1e\xec" + // 0x01AF0309: 0x00001EEC
	"\x01\xb0\x03\t\x00\x00\x1e\xed" + // 0x01B00309: 0x00001EED
	"\x01\xaf\x03\x03\x00\x00\x1e\xee" + // 0x01AF0303: 0x00001EEE
	"\x01\xb0\x03\x03\x00\x00\x1e\xef" + // 0x01B00303: 0x00001EEF
	"\x01\xaf\x03#\x00\x00\x1e\xf0" + // 0x01AF0323: 0x00001EF0
	"\x01\xb0\x03#\x00\x00\x1e\xf1" + // 0x01B00323: 0x00001EF1
	"\x00Y\x03\x00\x00\x00\x1e\xf2" + // 0x00590300: 0x00001EF2
	"\x00y\x03\x00\x00\x00\x1e\xf3" + // 0x00790300: 0x00001EF3
	"\x00Y\x03#\x00\x00\x1e\xf4" + // 0x00590323: 0x00001EF4
	"\x00y\x03#\x00\x00\x1e\xf5" + // 0x00790323: 0x00001EF5
	"\x00Y\x03\t\x00\x00\x1e\xf6" + // 0x00590309: 0x00001EF6
	"\x00y\x03\t\x00\x00\x1e\xf7" + // 0x00790309: 0x00001EF7
	"\x00Y\x03\x03\x00\x00\x1e\xf8" + // 0x00590303: 0x00001EF8
	"\x00y\x03\x03\x00\x00\x1e\xf9" + // 0x00790303: 0x00001EF9
	"\x03\xb1\x03\x13\x00\x00\x1f\x00" + // 0x03B10313: 0x00001F00
	"\x03\xb1\x03\x14\x00\x00\x1f\x01" + // 0x03B10314: 0x00001F01
	"\x1f\x00\x03\x00\x00\x00\x1f\x02" + // 0x1F000300: 0x00001F02
	"\x1f\x01\x03\x00\x00\x00\x1f\x03" + // 0x1F010300: 0x00001F03
	"\x1f\x00\x03\x01\x00\x00\x1f\x04" + // 0x1F000301: 0x00001F04
	"\x1f\x01\x03\x01\x00\x00\x1f\x05" + // 0x1F010301: 0x00001F05
	"\x1f\x00\x03B\x00\x00\x1f\x06" + // 0x1F000342: 0x00001F06
	"\x1f\x01\x03B\x00\x00\x1f\a" + // 0x1F010342: 0x00001F07
	"\x03\x91\x03\x13\x00\x00\x1f\b" + // 0x03910313: 0x00001F08
	"\x03\x91\x03\x14\x00\x00\x1f\t" + // 0x03910314: 0x00001F09
	"\x1f\b\x03\x00\x00\x00\x1f\n" + // 0x1F080300: 0x00001F0A
	"\x1f\t\x03\x00\x00\x00\x1f\v" + // 0x1F090300: 0x00001F0B
	"\x1f\b\x03\x01\x00\x00\x1f\f" + // 0x1F080301: 0x00001F0C
	"\x1f\t\x03\x01\x00\x00\x1f\r" + // 0x1F090301: 0x00001F0D
	"\x1f\b\x03B\x00\x00\x1f\x0e" + // 0x1F080342: 0x00001F0E
	"\x1f\t\x03B\x00\x00\x1f\x0f" + // 0x1F090342: 0x00001F0F
	"\x03\xb5\x03\x13\x00\x00\x1f\x10" + // 0x03B50313: 0x00001F10
	"\x03\xb5\x03\x14\x00\x00\x1f\x11" + // 0x03B50314: 0x00001F11
	"\x1f\x10\x03\x00\x00\x00\x1f\x12" + // 0x1F100300: 0x00001F12
	"\x1f\x11\x03\x00\x00\x00\x1f\x13" + // 0x1F110300: 0x00001F13
	"\x1f\x10\x03\x01\x00\x00\x1f\x14" + // 0x1F100301: 0x00001F14
	"\x1f\x11\x03\x01\x00\x00\x1f\x15" + // 0x1F110301: 0x00001F15
	"\x03\x95\x03\x13\x00\x00\x1f\x18" + // 0x03950313: 0x00001F18
	"\x03\x95\x03\x14\x00\x00\x1f\x19" + // 0x03950314: 0x00001F19
	"\x1f\x18\x03\x00\x00\x00\x1f\x1a" + // 0x1F180300: 0x00001F1A
	"\x1f\x19\x03\x00\x00\x00\x1f\x1b" + // 0x1F190300: 0x00001F1B
	"\x1f\x18\x03\x01\x00\x00\x1f\x1c" + // 0x1F180301: 0x00001F1C
	"\x1f\x19\x03\x01\x00\x00\x1f\x1d" + // 0x1F190301: 0x00001F1D
	"\x03\xb7\x03\x13\x00\x00\x1f " + // 0x03B70313: 0x00001F20
	"\x03\xb7\x03\x14\x00\x00\x1f!" + // 0x03B70314: 0x00001F21
	"\x1f \x03\x00\x00\x00\x1f\"" + // 0x1F200300: 0x00001F22
	"\x1f!\x03\x00\x00\x00\x1f#" + // 0x1F210300: 0x00001F23
	"\x1f \x03\x01\x00\x00\x1f$" + // 0x1F200301: 0x00001F24
	"\x1f!\x03\x01\x00\x00\x1f%" + // 0x1F210301: 0x00001F25
	"\x1f \x03B\x00\x00\x1f&" + // 0x1F200342: 0x00001F26
	"\x1f!\x03B\x00\x00\x1f'" + // 0x1F210342: 0x00001F27
	"\x03\x97\x03\x13\x00\x00\x1f(" + // 0x03970313: 0x00001F28
	"\x03\x97\x03\x14\x00\x00\x1f)" + // 0x03970314: 0x00001F29
	"\x1f(\x03\x00\x00\x00\x1f*" + // 0x1F280300: 0x00001F2A
	"\x1f)\x03\x00\x00\x00\x1f+" + // 0x1F290300: 0x00001F2B
	"\x1f(\x03\x01\x00\x00\x1f," + // 0x1F280301: 0x00001F2C
	"\x1f)\x03\x01\x00\x00\x1f-" + // 0x1F290301: 0x00001F2D
	"\x1f(\x03B\x00\x00\x1f." + // 0x1F280342: 0x00001F2E
	"\x1f)\x03B\x00\x00\x1f/" + // 0x1F290342: 0x00001F2F
	"\x03\xb9\x03\x13\x00\x00\x1f0" + // 0x03B90313: 0x00001F30
	"\x03\xb9\x03\x14\x00\x00\x1f1" + // 0x03B90314: 0x00001F31
	"\x1f0\x03\x00\x00\x00\x1f2" + // 0x1F300300: 0x00001F32
	"\x1f1\x03\x00\x00\x00\x1f3" + // 0x1F310300: 0x00001F33
	"\x1f0\x03\x01\x00\x00\x1f4" + // 0x1F300301: 0x00001F34
	"\x1f1\x03\x01\x00\x00\x1f5" + // 0x1F310301: 0x00001F35
	"\x1f0\x03B\x00\x00\x1f6" + // 0x1F300342: 0x00001F36
	"\x1f1\x03B\x00\x00\x1f7" + // 0x1F310342: 0x00001F37
	"\x03\x99\x03\x13\x00\x00\x1f8" + // 0x03990313: 0x00001F38
	"\x03\x99\x03\x14\x00\x00\x1f9" + // 0x03990314: 0x00001F39
	"\x1f8\x03\x00\x00\x00\x1f:" + // 0x1F380300: 0x00001F3A
	"\x1f9\x03\x00\x00\x00\x1f;" + // 0x1F390300: 0x00001F3B
	"\x1f8\x03\x01\x00\x00\x1f<" + // 0x1F380301: 0x00001F3C
	"\x1f9\x03\x01\x00\x00\x1f=" + // 0x1F390301: 0x00001F3D
	"\x1f8\x03B\x00\x00\x1f>" + // 0x1F380342: 0x00001F3E
	"\x1f9\x03B\x00\x00\x1f?" + // 0x1F390342: 0x00001F3F
	"\x03\xbf\x03\x13\x00\x00\x1f@" + // 0x03BF0313: 0x00001F40
	"\x03\xbf\x03\x14\x00\x00\x1fA" + // 0x03BF0314: 0x00001F41
	"\x1f@\x03\x00\x00\x00\x1fB" + // 0x1F400300: 0x00001F42
	"\x1fA\x03\x00\x00\x00\x1fC" + // 0x1F410300: 0x00001F43
	"\x1f@\x03\x01\x00\x00\x1fD" + // 0x1F400301: 0x00001F44
	"\x1fA\x03\x01\x00\x00\x1fE" + // 0x1F410301: 0x00001F45
	"\x03\x9f\x03\x13\x00\x00\x1fH" + // 0x039F0313: 0x00001F48
	"\x03\x9f\x03\x14\x00\x00\x1fI" + // 0x039F0314: 0x00001F49
	"\x1fH\x03\x00\x00\x00\x1fJ" + // 0x1F480300: 0x00001F4A
	"\x1fI\x03\x00\x00\x00\x1fK" + // 0x1F490300: 0x00001F4B
	"\x1fH\x03\x01\x00\x00\x1fL" + // 0x1F480301: 0x00001F4C
	"\x1fI\x03\x01\x00\x00\x1fM" + // 0x1F490301: 0x00001F4D
	"\x03\xc5\x03\x13\x00\x00\x1fP" + // 0x03C50313: 0x00001F50
	"\x03\xc5\x03\x14\x00\x00\x1fQ" + // 0x03C50314: 0x00001F51
	"\x1fP\x03\x00\x00\x00\x1fR" + // 0x1F500300: 0x00001F52
	"\x1fQ\x03\x00\x00\x00\x1fS" + // 0x1F510300: 0x00001F53
	"\x1fP\x03\x01\x00\x00\x1fT" + // 0x1F500301: 0x00001F54
	"\x1fQ\x03\x01\x00\x00\x1fU" + // 0x1F510301: 0x00001F55
	"\x1fP\x03B\x00\x00\x1fV" + // 0x1F500342: 0x00001F56
	"\x1fQ\x03B\x00\x00\x1fW" + // 0x1F510342: 0x00001F57
	"\x03\xa5\x03\x14\x00\x00\x1fY" + // 0x03A50314: 0x00001F59
	"\x1fY\x03\x00\x00\x00\x1f[" + // 0x1F590300: 0x00001F5B
	"\x1fY\x03\x01\x00\x00\x1f]" + // 0x1F590301: 0x00001F5D
	"\x1fY\x03B\x00\x00\x1f_" + // 0x1F590342: 0x00001F5F
	"\x03\xc9\x03\x13\x00\x00\x1f`" + // 0x03C90313: 0x00001F60
	"\x03\xc9\x03\x14\x00\x00\x1fa" + // 0x03C90314: 0x00001F61
	"\x1f`\x03\x00\x00\x00\x1fb" + // 0x1F600300: 0x00001F62
	"\x1fa\x03\x00\x00\x00\x1fc" + // 0x1F610300: 0x00001F63
	"\x1f`\x03\x01\x00\x00\x1fd" + // 0x1F600301: 0x00001F64
	"\x1fa\x03\x01\x00\x00\x1fe" + // 0x1F610301: 0x00001F65
	"\x1f`\x03B\x00\x00\x1ff" + // 0x1F600342: 0x00001F66
	"\x1fa\x03B\x00\x00\x1fg" + // 0x1F610342: 0x00001F67
	"\x03\xa9\x03\x13\x00\x00\x1fh" + // 0x03A90313: 0x00001F68
	"\x03\xa9\x03\x14\x00\x00\x1fi" + // 0x03A90314: 0x00001F69
	"\x1fh\x03\x00\x00\x00\x1fj" + // 0x1F680300: 0x00001F6A
	"\x1fi\x03\x00\x00\x00\x1fk" + // 0x1F690300: 0x00001F6B
	"\x1fh\x03\x01\x00\x00\x1fl" + // 0x1F680301: 0x00001F6C
	"\x1fi\x03\x01\x00\x00\x1fm" + // 0x1F690301: 0x00001F6D
	"\x1fh\x03B\x00\x00\x1fn" + // 0x1F680342: 0x00001F6E
	"\x1fi\x03B\x00\x00\x1fo" + // 0x1F690342: 0x00001F6F
	"\x03\xb1\x03\x00\x00\x00\x1fp" + // 0x03B10300: 0x00001F70
	"\x03\xb5\x03\x00\x00\x00\x1fr" + // 0x03B50300: 0x00001F72
	"\x03\xb7\x03\x00\x00\x00\x1ft" + // 0x03B70300: 0x00001F74
	"\x03\xb9\x03\x00\x00\x00\x1fv" + // 0x03B90300: 0x00001F76
	"\x03\xbf\x03\x00\x00\x00\x1fx" + // 0x03BF0300: 0x00001F78
	"\x03\xc5\x03\x00\x00\x00\x1fz" + // 0x03C50300: 0x00001F7A
	"\x03\xc9\x03\x00\x00\x00\x1f|" + // 0x03C90300: 0x00001F7C
	"\x1f\x00\x03E\x00\x00\x1f\x80" + // 0x1F000345: 0x00001F80
	"\x1f\x01\x03E\x00\x00\x1f\x81" + // 0x1F010345: 0x00001F81
	"\x1f\x02\x03E\x00\x00\x1f\x82" + // 0x1F020345: 0x00001F82
	"\x1f\x03\x03E\x00\x00\x1f\x83" + // 0x1F030345: 0x00001F83
	"\x1f\x04\x03E\x00\x00\x1f\x84" + // 0x1F040345: 0x00001F84
	"\x1f\x05\x03E\x00\x00\x1f\x85" + // 0x1F050345: 0x00001F85
	"\x1f\x06\x03E\x00\x00\x1f\x86" + // 0x1F060345: 0x00001F86
	"\x1f\a\x03E\x00\x00\x1f\x87" + // 0x1F070345: 0x00001F87
	"\x1f\b\x03E\x00\x00\x1f\x88" + // 0x1F080345: 0x00001F88
	"\x1f\t\x03E\x00\x00\x1f\x89" + // 0x1F090345: 0x00001F89
	"\x1f\n\x03E\x00\x00\x1f\x8a" + // 0x1F0A0345: 0x00001F8A
	"\x1f\v\x03E\x00\x00\x1f\x8b" + // 0x1F0B0345: 0x00001F8B
	"\x1f\f\x03E\x00\x00\x1f\x8c" + // 0x1F0C0345: 0x00001F8C
	"\x1f\r\x03E\x00\x00\x1f\x8d" + // 0x1F0D0345: 0x00001F8D
	"\x1f\x0e\x03E\x00\x00\x1f\x8e" + // 0x1F0E0345: 0x00001F8E
	"\x1f\x0f\x03E\x00\x00\x1f\x8f" + // 0x1F0F0345: 0x00001F8F
	"\x1f \x03E\x00\x00\x1f\x90" + // 0x1F200345: 0x00001F90
	"\x1f!\x03E\x00\x00\x1f\x91" + // 0x1F210345: 0x00001F91
	"\x1f\"\x03E\x00\x00\x1f\x92" + // 0x1F220345: 0x00001F92
	"\x1f#\x03E\x00\x00\x1f\x93" + // 0x1F230345: 0x00001F93
	"\x1f$\x03E\x00\x00\x1f\x94" + // 0x1F240345: 0x00001F94
	"\x1f%\x03E\x00\x00\x1f\x95" + // 0x1F250345: 0x00001F95
	"\x1f&\x03E\x00\x00\x1f\x96" + // 0x1F260345: 0x00001F96
	"\x1f'\x03E\x00\x00\x1f\x97" + // 0x1F270345: 0x00001F97
	"\x1f(\x03E\x00\x00\x1f\x98" + // 0x1F280345: 0x00001F98
	"\x1f)\x03E\x00\x00\x1f\x99" + // 0x1F290345: 0x00001F99
	"\x1f*\x03E\x00\x00\x1f\x9a" + // 0x1F2A0345: 0x00001F9A
	"\x1f+\x03E\x00\x00\x1f\x9b" + // 0x1F2B0345: 0x00001F9B
	"\x1f,\x03E\x00\x00\x1f\x9c" + // 0x1F2C0345: 0x00001F9C
	"\x1f-\x03E\x00\x00\x1f\x9d" + // 0x1F2D0345: 0x00001F9D
	"\x1f.\x03E\x00\x00\x1f\x9e" + // 0x1F2E0345: 0x00001F9E
	"\x1f/\x03E\x00\x00\x1f\x9f" + // 0x1F2F0345: 0x00001F9F
	"\x1f`\x03E\x00\x00\x1f\xa0" + // 0x1F600345: 0x00001FA0
	"\x1fa\x03E\x00\x00\x1f\xa1" + // 0x1F610345: 0x00001FA1
	"\x1fb\x03E\x00\x00\x1f\xa2" + // 0x1F620345: 0x00001FA2
	"\x1fc\x03E\x00\x00\x1f\xa3" + // 0x1F630345: 0x00001FA3
	"\x1fd\x03E\x00\x00\x1f\xa4" + // 0x1F640345: 0x00001FA4
	"\x1fe\x03E\x00\x00\x1f\xa5" + // 0x1F650345: 0x00001FA5
	"\x1ff\x03E\x00\x00\x1f\xa6" + // 0x1F660345: 0x00001FA6
	"\x1fg\x03E\x00\x00\x1f\xa7" + // 0x1F670345: 0x00001FA7
	"\x1fh\x03E\x00\x00\x1f\xa8" + // 0x1F680345: 0x00001FA8
	"\x1fi\x03E\x00\x00\x1f\xa9" + // 0x1F690345: 0x00001FA9
	"\x1fj\x03E\x00\x00\x1f\xaa" + // 0x1F6A0345: 0x00001FAA
	"\x1fk\x03E\x00\x00\x1f\xab" + // 0x1F6B0345: 0x00001FAB
	"\x1fl\x03E\x00\x00\x1f\xac" + // 0x1F6C0345: 0x00001FAC
	"\x1fm\x03E\x00\x00\x1f\xad" + // 0x1F6D0345: 0x00001FAD
	"\x1fn\x03E\x00\x00\x1f\xae" + // 0x1F6E0345: 0x00001FAE
	"\x1fo\x03E\x00\x00\x1f\xaf" + // 0x1F6F0345: 0x00001FAF
	"\x03\xb1\x03\x06\x00\x00\x1f\xb0" + // 0x03B10306: 0x00001FB0
	"\x03\xb1\x03\x04\x00\x00\x1f\xb1" + // 0x03B10304: 0x00001FB1
	"\x1fp\x03E\x00\x00\x1f\xb2" + // 0x1F700345: 0x00001FB2
	"\x03\xb1\x03E\x00\x00\x1f\xb3" + // 0x03B10345: 0x00001FB3
	"\x03\xac\x03E\x00\x00\x1f\xb4" + // 0x03AC0345: 0x00001FB4
	"\x03\xb1\x03B\x00\x00\x1f\xb6" + // 0x03B10342: 0x00001FB6
	"\x1f\xb6\x03E\x00\x00\x1f\xb7" + // 0x1FB60345: 0x00001FB7
	"\x03\x91\x03\x06\x00\x00\x1f\xb8" + // 0x03910306: 0x00001FB8
	"\x03\x91\x03\x04\x00\x00\x1f\xb9" + // 0x03910304: 0x00001FB9
	"\x03\x91\x03\x00\x00\x00\x1f\xba" + // 0x03910300: 0x00001FBA
	"\x03\x91\x03E\x00\x00\x1f\xbc" + // 0x03910345: 0x00001FBC
	"\x00\xa8\x03B\x00\x00\x1f\xc1" + // 0x00A80342: 0x00001FC1
	"\x1ft\x03E\x00\x00\x1f\xc2" + // 0x1F740345: 0x00001FC2
	"\x03\xb7\x03E\x00\x00\x1f\xc3" + // 0x03B70345: 0x00001FC3
	"\x03\xae\x03E\x00\x00\x1f\xc4" + // 0x03AE0345: 0x00001FC4
	"\x03\xb7\x03B\x00\x00\x1f\xc6" + // 0x03B70342: 0x00001FC6
	"\x1f\xc6\x03E\x00\x00\x1f\xc7" + // 0x1FC60345: 0x00001FC7
	"\x03\x95\x03\x00\x00\x00\x1f\xc8" + // 0x03950300: 0x00001FC8
	"\x03\x97\x03\x00\x00\x00\x1f\xca" + // 0x03970300: 0x00001FCA
	"\x03\x97\x03E\x00\x00\x1f\xcc" + // 0x03970345: 0x00001FCC
	"\x1f\xbf\x03\x00\x00\x00\x1f\xcd" + // 0x1FBF0300: 0x00001FCD
	"\x1f\xbf\x03\x01\x00\x00\x1f\xce" + // 0x1FBF0301: 0x00001FCE
	"\x1f\xbf\x03B\x00\x00\x1f\xcf" + // 0x1FBF0342: 0x00001FCF
	"\x03\xb9\x03\x06\x00\x00\x1f\xd0" + // 0x03B90306: 0x00001FD0
	"\x03\xb9\x03\x04\x00\x00\x1f\xd1" + // 0x03B90304: 0x00001FD1
	"\x03\xca\x03\x00\x00\x00\x1f\xd2" + // 0x03CA0300: 0x00001FD2
	"\x03\xb9\x03B\x00\x00\x1f\xd6" + // 0x03B90342: 0x00001FD6
	"\x03\xca\x03B\x00\x00\x1f\xd7" + // 0x03CA0342: 0x00001FD7
	"\x03\x99\x03\x06\x00\x00\x1f\xd8" + // 0x03990306: 0x00001FD8
	"\x03\x99\x03\x04\x00\x00\x1f\xd9" + // 0x03990304: 0x00001FD9
	"\x03\x99\x03\x00\x00\x00\x1f\xda" + // 0x03990300: 0x00001FDA
	"\x1f\xfe\x03\x00\x00\x00\x1f\xdd" + // 0x1FFE0300: 0x00001FDD
	"\x1f\xfe\x03\x01\x00\x00\x1f\xde" + // 0x1FFE0301: 0x00001FDE
	"\x1f\xfe\x03B\x00\x00\x1f\xdf" + // 0x1FFE0342: 0x00001FDF
	"\x03\xc5\x03\x06\x00\x00\x1f\xe0" + // 0x03C50306: 0x00001FE0
	"\x03\xc5\x03\x04\x00\x00\x1f\xe1" + // 0x03C50304: 0x00001FE1
	"\x03\xcb\x03\x00\x00\x00\x1f\xe2" + // 0x03CB0300: 0x00001FE2
	"\x03\xc1\x03\x13\x00\x00\x1f\xe4" + // 0x03C10313: 0x00001FE4
	"\x03\xc1\x03\x14\x00\x00\x1f\xe5" + // 0x03C10314: 0x00001FE5
	"\x03\xc5\x03B\x00\x00\x1f\xe6" + // 0x03C50342: 0x00001FE6
	"\x03\xcb\x03B\x00\x00\x1f\xe7" + // 0x03CB0342: 0x00001FE7
	"\x03\xa5\x03\x06\x00\x00\x1f\xe8" + // 0x03A50306: 0x00001FE8
	"\x03\xa5\x03\x04\x00\x00\x1f\xe9" + // 0x03A50304: 0x00001FE9
	"\x03\xa5\x03\x00\x00\x00\x1f\xea" + // 0x03A50300: 0x00001FEA
	"\x03\xa1\x03\x14\x00\x00\x1f\xec" + // 0x03A10314: 0x00001FEC
	"\x00\xa8\x03\x00\x00\x00\x1f\xed" + // 0x00A80300: 0x00001FED
	"\x1f|\x03E\x00\x00\x1f\xf2" + // 0x1F7C0345: 0x00001FF2
	"\x03\xc9\x03E\x00\x00\x1f\xf3" + // 0x03C90345: 0x00001FF3
	"\x03\xce\x03E\x00\x00\x1f\xf4" + // 0x03CE0345: 0x00001FF4
	"\x03\xc9\x03B\x00\x00\x1f\xf6" + // 0x03C90342: 0x00001FF6
	"\x1f\xf6\x03E\x00\x00\x1f\xf7" + // 0x1FF60345: 0x00001FF7
	"\x03\x9f\x03\x00\x00\x00\x1f\xf8" + // 0x039F0300: 0x00001FF8
	"\x03\xa9\x03\x00\x00\x00\x1f\xfa" + // 0x03A90300: 0x00001FFA
	"\x03\xa9\x03E\x00\x00\x1f\xfc" + // 0x03A90345: 0x00001FFC
	"!\x90\x038\x00\x00!\x9a" + // 0x21900338: 0x0000219A
	"!\x92\x038\x00\x00!\x9b" + // 0x21920338: 0x0000219B
	"!\x94\x038\x00\x00!\xae" + // 0x21940338: 0x000021AE
	"!\xd0\x038\x00\x00!\xcd" + // 0x21D00338: 0x000021CD
	"!\xd4\x038\x00\x00!\xce" + // 0x21D40338: 0x000021CE
	"!\xd2\x038\x00\x00!\xcf" + // 0x21D20338: 0x000021CF
	"\"\x03\x038\x00\x00\"\x04" + // 0x22030338: 0x00002204
	"\"\b\x038\x00\x00\"\t" + // 0x22080338: 0x00002209
	"\"\v\x038\x00\x00\"\f" + // 0x220B0338: 0x0000220C
	"\"#\x038\x00\x00\"$" + // 0x22230338: 0x00002224
	"\"%\x038\x00\x00\"&" + // 0x22250338: 0x00002226
	"\"<\x038\x00\x00\"A" + // 0x223C0338: 0x00002241
	"\"C\x038\x00\x00\"D" + // 0x22430338: 0x00002244
	"\"E\x038\x00\x00\"G" + // 0x22450338: 0x00002247
	"\"H\x038\x00\x00\"I" + // 0x22480338: 0x00002249
	"\x00=\x038\x00\x00\"`" + // 0x003D0338: 0x00002260
	"\"a\x038\x00\x00\"b" + // 0x22610338: 0x00002262
	"\"M\x038\x00\x00\"m" + // 0x224D0338: 0x0000226D
	"\x00<\x038\x00\x00\"n" + // 0x003C0338: 0x0000226E
	"\x00>\x038\x00\x00\"o" + // 0x003E0338: 0x0000226F
	"\"d\x038\x00\x00\"p" + // 0x22640338: 0x00002270
	"\"e\x038\x00\x00\"q" + // 0x22650338: 0x00002271
	"\"r\x038\x00\x00\"t" + // 0x22720338: 0x00002274
	"\"s\x038\x00\x00\"u" + // 0x22730338: 0x00002275
	"\"v\x038\x00\x00\"x" + // 0x22760338: 0x00002278
	"\"w\x038\x00\x00\"y" + // 0x22770338: 0x00002279
	"\"z\x038\x00\x00\"\x80" + // 0x227A0338: 0x00002280
	"\"{\x038\x00\x00\"\x81" + // 0x227B0338: 0x00002281
	"\"\x82\x038\x00\x00\"\x84" + // 0x22820338: 0x00002284
	"\"\x83\x038\x00\x00\"\x85" + // 0x22830338: 0x00002285
	"\"\x86\x038\x00\x00\"\x88" + // 0x22860338: 0x00002288
	"\"\x87\x038\x00\x00\"\x89" + // 0x22870338: 0x00002289
	"\"\xa2\x038\x00\x00\"\xac" + // 0x22A20338: 0x000022AC
	"\"\xa8\x038\x00\x00\"\xad" + // 0x22A80338: 0x000022AD
	"\"\xa9\x038\x00\x00\"\xae" + // 0x22A90338: 0x000022AE
	"\"\xab\x038\x00\x00\"\xaf" + // 0x22AB0338: 0x000022AF
	"\"|\x038\x00\x00\"\xe0" + // 0x227C0338: 0x000022E0
	"\"}\x038\x00\x00\"\xe1" + // 0x227D0338: 0x000022E1
	"\"\x91\x038\x00\x00\"\xe2" + // 0x22910338: 0x000022E2
	"\"\x92\x038\x00\x00\"\xe3" + // 0x22920338: 0x000022E3
	"\"\xb2\x038\x00\x00\"\xea" + // 0x22B20338: 0x000022EA
	"\"\xb3\x038\x00\x00\"\xeb" + // 0x22B30338: 0x000022EB
	"\"\xb4\x038\x00\x00\"\xec" + // 0x22B40338: 0x000022EC
	"\"\xb5\x038\x00\x00\"\xed" + // 0x22B50338: 0x000022ED
	"0K0\x99\x00\x000L" + // 0x304B3099: 0x0000304C
	"0M0\x99\x00\x000N" + // 0x304D3099: 0x0000304E
	"0O0\x99\x00\x000P" + // 0x304F3099: 0x00003050
	"0Q0\x99\x00\x000R" + // 0x30513099: 0x00003052
	"0S0\x99\x00\x000T" + // 0x30533099: 0x00003054
	"0U0\x99\x00\x000V" + // 0x30553099: 0x00003056
	"0W0\x99\x00\x000X" + // 0x30573099: 0x00003058
	"0Y0\x99\x00\x000Z" + // 0x30593099: 0x0000305A
	"0[0\x99\x00\x000\\" + // 0x305B3099: 0x0000305C
	"0]0\x99\x00\x000^" + // 0x305D3099: 0x0000305E
	"0_0\x99\x00\x000`" + // 0x305F3099: 0x00003060
	"0a0\x99\x00\x000b" + // 0x30613099: 0x00003062
	"0d0\x99\x00\x000e" + // 0x30643099: 0x00003065
	"0f0\x99\x00\x000g" + // 0x30663099: 0x00003067
	"0h0\x99\x00\x000i" + // 0x30683099: 0x00003069
	"0o0\x99\x00\x000p" + // 0x306F3099: 0x00003070
	"0o0\x9a\x00\x000q" + // 0x306F309A: 0x00003071
	"0r0\x99\x00\x000s" + // 0x30723099: 0x00003073
	"0r0\x9a\x00\x000t" + // 0x3072309A: 0x00003074
	"0u0\x99\x00\x000v" + // 0x30753099: 0x00003076
	"0u0\x9a\x00\x000w" + // 0x3075309A: 0x00003077
	"0x0\x99\x00\x000y" + // 0x30783099: 0x00003079
	"0x0\x9a\x00\x000z" + // 0x3078309A: 0x0000307A
	"0{0\x99\x00\x000|" + // 0x307B3099: 0x0000307C
	"0{0\x9a\x00\x000}" + // 0x307B309A: 0x0000307D
	"0F0\x99\x00\x000\x94" + // 0x30463099: 0x00003094
	"0\x9d0\x99\x00\x000\x9e" + // 0x309D3099: 0x0000309E
	"0\xab0\x99\x00\x000\xac" + // 0x30AB3099: 0x000030AC
	"0\xad0\x99\x00\x000\xae" + // 0x30AD3099: 0x000030AE
	"0\xaf0\x99\x00\x000\xb0" + // 0x30AF3099: 0x000030B0
	"0\xb10\x99\x00\x000\xb2" + // 0x30B13099: 0x000030B2
	"0\xb30\x99\x00\x000\xb4" + // 0x30B33099: 0x000030B4
	"0\xb50\x99\x00\x000\xb6" + // 0x30B53099: 0x000030B6
	"0\xb70\x99\x00\x000\xb8" + // 0x30B73099: 0x000030B8
	"0\xb90\x99\x00\x000\xba" + // 0x30B93099: 0x000030BA
	"0\xbb0\x99\x00\x000\xbc" + // 0x30BB3099: 0x000030BC
	"0\xbd0\x99\x00\x000\xbe" + // 0x30BD3099: 0x000030BE
	"0\xbf0\x99\x00\x000\xc0" + // 0x30BF3099: 0x000030C0
	"0\xc10\x99\x00\x000\xc2" + // 0x30C13099: 0x000030C2
	"0\xc40\x99\x00\x000\xc5" + // 0x30C43099: 0x000030C5
	"0\xc60\x99\x00\x000\xc7" + // 0x30C63099: 0x000030C7
	"0\xc80\x99\x00\x000\xc9" + // 0x30C83099: 0x000030C9
	"0\xcf0\x99\x00\x000\xd0" + // 0x30CF3099: 0x000030D0
	"0\xcf0\x9a\x00\x000\xd1" + // 0x30CF309A: 0x000030D1
	"0\xd20\x99\x00\x000\xd3" + // 0x30D23099: 0x000030D3
	"0\xd20\x9a\x00\x000\xd4" + // 0x30D2309A: 0x000030D4
	"0\xd50\x99\x00\x000\xd6" + // 0x30D53099: 0x000030D6
	"0\xd50\x9a\x00\x000\xd7" + // 0x30D5309A: 0x000030D7
	"0\xd80\x99\x00\x000\xd9" + // 0x30D83099: 0x000030D9
	"0\xd80\x9a\x00\x000\xda" + // 0x30D8309A: 0x000030DA
	"0\xdb0\x99\x00\x000\xdc" + // 0x30DB3099: 0x000030DC
	"0\xdb0\x9a\x00\x000\xdd" + // 0x30DB309A: 0x000030DD
	"0\xa60\x99\x00\x000\xf4" + // 0x30A63099: 0x000030F4
	"0\xef0\x99\x00\x000\xf7" + // 0x30EF3099: 0x000030F7
	"0\xf00\x99\x00\x000\xf8" + // 0x30F03099: 0x000030F8
	"0\xf10\x99\x00\x000\xf9" + // 0x30F13099: 0x000030F9
	"0\xf20\x99\x00\x000\xfa" + // 0x30F23099: 0x000030FA
	"0\xfd0\x99\x00\x000\xfe" + // 0x30FD3099: 0x000030FE
	"\x10\x99\x10\xba\x00\x01\x10\x9a" + // 0x109910BA: 0x0001109A
	"\x10\x9b\x10\xba\x00\x01\x10\x9c" + // 0x109B10BA: 0x0001109C
	"\x10\xa5\x10\xba\x00\x01\x10\xab" + // 0x10A510BA: 0x000110AB
	"\x111\x11'\x00\x01\x11." + // 0x11311127: 0x0001112E
	"\x112\x11'\x00\x01\x11/" + // 0x11321127: 0x0001112F
	"\x13G\x13>\x00\x01\x13K" + // 0x1347133E: 0x0001134B
	"\x13G\x13W\x00\x01\x13L" + // 0x13471357: 0x0001134C
	"\x14\xb9\x14\xba\x00\x01\x14\xbb" + // 0x14B914BA: 0x000114BB
	"\x14\xb9\x14\xb0\x00\x01\x14\xbc" + // 0x14B914B0: 0x000114BC
	"\x14\xb9\x14\xbd\x00\x01\x14\xbe" + // 0x14B914BD: 0x000114BE
	"\x15\xb8\x15\xaf\x00\x01\x15\xba" + // 0x15B815AF: 0x000115BA
	"\x15\xb9\x15\xaf\x00\x01\x15\xbb" + // 0x15B915AF: 0x000115BB
	""
	// Total size of tables: 53KB (54006 bytes)
07070100000F46000081A4000000000000000000000001645E367C00000976000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/text/unicode/norm/transform.go    // Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package norm

import (
	"unicode/utf8"

	"golang.org/x/text/transform"
)

// Reset implements the Reset method of the transform.Transformer interface.
func (Form) Reset() {}

// Transform implements the Transform method of the transform.Transformer
// interface. It may need to write segments of up to MaxSegmentSize at once.
// Users should either catch ErrShortDst and allow dst to grow or have dst be at
// least of size MaxTransformChunkSize to be guaranteed of progress.
func (f Form) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	// Cap the maximum number of src bytes to check.
	b := src
	eof := atEOF
	if ns := len(dst); ns < len(b) {
		err = transform.ErrShortDst
		eof = false
		b = b[:ns]
	}
	i, ok := formTable[f].quickSpan(inputBytes(b), 0, len(b), eof)
	n := copy(dst, b[:i])
	if !ok {
		nDst, nSrc, err = f.transform(dst[n:], src[n:], atEOF)
		return nDst + n, nSrc + n, err
	}

	if err == nil && n < len(src) && !atEOF {
		err = transform.ErrShortSrc
	}
	return n, n, err
}

func flushTransform(rb *reorderBuffer) bool {
	// Write out (must fully fit in dst, or else it is an ErrShortDst).
	if len(rb.out) < rb.nrune*utf8.UTFMax {
		return false
	}
	rb.out = rb.out[rb.flushCopy(rb.out):]
	return true
}

var errs = []error{nil, transform.ErrShortDst, transform.ErrShortSrc}

// transform implements the transform.Transformer interface. It is only called
// when quickSpan does not pass for a given string.
func (f Form) transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	// TODO: get rid of reorderBuffer. See CL 23460044.
	rb := reorderBuffer{}
	rb.init(f, src)
	for {
		// Load segment into reorder buffer.
		rb.setFlusher(dst[nDst:], flushTransform)
		end := decomposeSegment(&rb, nSrc, atEOF)
		if end < 0 {
			return nDst, nSrc, errs[-end]
		}
		nDst = len(dst) - len(rb.out)
		nSrc = end

		// Next quickSpan.
		end = rb.nsrc
		eof := atEOF
		if n := nSrc + len(dst) - nDst; n < end {
			err = transform.ErrShortDst
			end = n
			eof = false
		}
		end, ok := rb.f.quickSpan(rb.src, nSrc, end, eof)
		n := copy(dst[nDst:], rb.src.bytes[nSrc:end])
		nSrc += n
		nDst += n
		if ok {
			if err == nil && n < rb.nsrc && !atEOF {
				err = transform.ErrShortSrc
			}
			return nDst, nSrc, err
		}
	}
}
  07070100000F47000081A4000000000000000000000001645E367C000004D6000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/golang.org/x/text/unicode/norm/trie.go // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package norm

type valueRange struct {
	value  uint16 // header: value:stride
	lo, hi byte   // header: lo:n
}

type sparseBlocks struct {
	values []valueRange
	offset []uint16
}

var nfcSparse = sparseBlocks{
	values: nfcSparseValues[:],
	offset: nfcSparseOffset[:],
}

var nfkcSparse = sparseBlocks{
	values: nfkcSparseValues[:],
	offset: nfkcSparseOffset[:],
}

var (
	nfcData  = newNfcTrie(0)
	nfkcData = newNfkcTrie(0)
)

// lookupValue determines the type of block n and looks up the value for b.
// For n < t.cutoff, the block is a simple lookup table. Otherwise, the block
// is a list of ranges with an accompanying value. Given a matching range r,
// the value for b is by r.value + (b - r.lo) * stride.
func (t *sparseBlocks) lookup(n uint32, b byte) uint16 {
	offset := t.offset[n]
	header := t.values[offset]
	lo := offset + 1
	hi := lo + uint16(header.lo)
	for lo < hi {
		m := lo + (hi-lo)/2
		r := t.values[m]
		if r.lo <= b && b <= r.hi {
			return r.value + uint16(b-r.lo)*header.value
		}
		if b < r.lo {
			hi = m
		} else {
			lo = m + 1
		}
	}
	return 0
}
  07070100000F48000041ED000000000000000000000005645E367C00000000000000000000000000000000000000000000002E00000000elemental-cli-0.3.1/vendor/golang.org/x/tools 07070100000F49000081A4000000000000000000000001645E367C000005C7000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/golang.org/x/tools/LICENSE Copyright (c) 2009 The Go Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 07070100000F4A000081A4000000000000000000000001645E367C00000517000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/golang.org/x/tools/PATENTS Additional IP Rights Grant (Patents)

"This implementation" means the copyrightable works distributed by
Google as part of the Go project.

Google hereby grants to You a perpetual, worldwide, non-exclusive,
no-charge, royalty-free, irrevocable (except as stated in this section)
patent license to make, have made, use, offer to sell, sell, import,
transfer and otherwise run, modify and propagate the contents of this
implementation of Go, where such license applies only to those patent
claims, both currently owned or controlled by Google and acquired in
the future, licensable by Google that are necessarily infringed by this
implementation of Go.  This grant does not include claims that would be
infringed only as a consequence of further modification of this
implementation.  If you or your agent or exclusive licensee institute or
order or agree to the institution of patent litigation against any
entity (including a cross-claim or counterclaim in a lawsuit) alleging
that this implementation of Go or any code incorporated within this
implementation of Go constitutes direct or contributory patent
infringement, or inducement of patent infringement, then any patent
rights granted to you under this License for this implementation of Go
shall terminate as of the date such litigation is filed.
 07070100000F4B000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003200000000elemental-cli-0.3.1/vendor/golang.org/x/tools/cmd 07070100000F4C000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/cmd/stringer    07070100000F4D000081A4000000000000000000000001645E367C000051A3000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/tools/cmd/stringer/stringer.go    // Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Stringer is a tool to automate the creation of methods that satisfy the fmt.Stringer
// interface. Given the name of a (signed or unsigned) integer type T that has constants
// defined, stringer will create a new self-contained Go source file implementing
//
//	func (t T) String() string
//
// The file is created in the same package and directory as the package that defines T.
// It has helpful defaults designed for use with go generate.
//
// Stringer works best with constants that are consecutive values such as created using iota,
// but creates good code regardless. In the future it might also provide custom support for
// constant sets that are bit patterns.
//
// For example, given this snippet,
//
//	package painkiller
//
//	type Pill int
//
//	const (
//		Placebo Pill = iota
//		Aspirin
//		Ibuprofen
//		Paracetamol
//		Acetaminophen = Paracetamol
//	)
//
// running this command
//
//	stringer -type=Pill
//
// in the same directory will create the file pill_string.go, in package painkiller,
// containing a definition of
//
//	func (Pill) String() string
//
// That method will translate the value of a Pill constant to the string representation
// of the respective constant name, so that the call fmt.Print(painkiller.Aspirin) will
// print the string "Aspirin".
//
// Typically this process would be run using go generate, like this:
//
//	//go:generate stringer -type=Pill
//
// If multiple constants have the same value, the lexically first matching name will
// be used (in the example, Acetaminophen will print as "Paracetamol").
//
// With no arguments, it processes the package in the current directory.
// Otherwise, the arguments must name a single directory holding a Go package
// or a set of Go source files that represent a single Go package.
//
// The -type flag accepts a comma-separated list of types so a single run can
// generate methods for multiple types. The default output file is t_string.go,
// where t is the lower-cased name of the first type listed. It can be overridden
// with the -output flag.
//
// The -linecomment flag tells stringer to generate the text of any line comment, trimmed
// of leading spaces, instead of the constant name. For instance, if the constants above had a
// Pill prefix, one could write
//
//	PillAspirin // Aspirin
//
// to suppress it in the output.
package main // import "golang.org/x/tools/cmd/stringer"

import (
	"bytes"
	"flag"
	"fmt"
	"go/ast"
	"go/constant"
	"go/format"
	"go/token"
	"go/types"
	"log"
	"os"
	"path/filepath"
	"sort"
	"strings"

	"golang.org/x/tools/go/packages"
)

var (
	typeNames   = flag.String("type", "", "comma-separated list of type names; must be set")
	output      = flag.String("output", "", "output file name; default srcdir/<type>_string.go")
	trimprefix  = flag.String("trimprefix", "", "trim the `prefix` from the generated constant names")
	linecomment = flag.Bool("linecomment", false, "use line comment text as printed text when present")
	buildTags   = flag.String("tags", "", "comma-separated list of build tags to apply")
)

// Usage is a replacement usage function for the flags package.
func Usage() {
	fmt.Fprintf(os.Stderr, "Usage of stringer:\n")
	fmt.Fprintf(os.Stderr, "\tstringer [flags] -type T [directory]\n")
	fmt.Fprintf(os.Stderr, "\tstringer [flags] -type T files... # Must be a single package\n")
	fmt.Fprintf(os.Stderr, "For more information, see:\n")
	fmt.Fprintf(os.Stderr, "\thttps://pkg.go.dev/golang.org/x/tools/cmd/stringer\n")
	fmt.Fprintf(os.Stderr, "Flags:\n")
	flag.PrintDefaults()
}

func main() {
	log.SetFlags(0)
	log.SetPrefix("stringer: ")
	flag.Usage = Usage
	flag.Parse()
	if len(*typeNames) == 0 {
		flag.Usage()
		os.Exit(2)
	}
	types := strings.Split(*typeNames, ",")
	var tags []string
	if len(*buildTags) > 0 {
		tags = strings.Split(*buildTags, ",")
	}

	// We accept either one directory or a list of files. Which do we have?
	args := flag.Args()
	if len(args) == 0 {
		// Default: process whole package in current directory.
		args = []string{"."}
	}

	// Parse the package once.
	var dir string
	g := Generator{
		trimPrefix:  *trimprefix,
		lineComment: *linecomment,
	}
	// TODO(suzmue): accept other patterns for packages (directories, list of files, import paths, etc).
	if len(args) == 1 && isDirectory(args[0]) {
		dir = args[0]
	} else {
		if len(tags) != 0 {
			log.Fatal("-tags option applies only to directories, not when files are specified")
		}
		dir = filepath.Dir(args[0])
	}

	g.parsePackage(args, tags)

	// Print the header and package clause.
	g.Printf("// Code generated by \"stringer %s\"; DO NOT EDIT.\n", strings.Join(os.Args[1:], " "))
	g.Printf("\n")
	g.Printf("package %s", g.pkg.name)
	g.Printf("\n")
	g.Printf("import \"strconv\"\n") // Used by all methods.

	// Run generate for each type.
	for _, typeName := range types {
		g.generate(typeName)
	}

	// Format the output.
	src := g.format()

	// Write to file.
	outputName := *output
	if outputName == "" {
		baseName := fmt.Sprintf("%s_string.go", types[0])
		outputName = filepath.Join(dir, strings.ToLower(baseName))
	}
	err := os.WriteFile(outputName, src, 0644)
	if err != nil {
		log.Fatalf("writing output: %s", err)
	}
}

// isDirectory reports whether the named file is a directory.
func isDirectory(name string) bool {
	info, err := os.Stat(name)
	if err != nil {
		log.Fatal(err)
	}
	return info.IsDir()
}

// Generator holds the state of the analysis. Primarily used to buffer
// the output for format.Source.
type Generator struct {
	buf bytes.Buffer // Accumulated output.
	pkg *Package     // Package we are scanning.

	trimPrefix  string
	lineComment bool
}

func (g *Generator) Printf(format string, args ...interface{}) {
	fmt.Fprintf(&g.buf, format, args...)
}

// File holds a single parsed file and associated data.
type File struct {
	pkg  *Package  // Package to which this file belongs.
	file *ast.File // Parsed AST.
	// These fields are reset for each type being generated.
	typeName string  // Name of the constant type.
	values   []Value // Accumulator for constant values of that type.

	trimPrefix  string
	lineComment bool
}

type Package struct {
	name  string
	defs  map[*ast.Ident]types.Object
	files []*File
}

// parsePackage analyzes the single package constructed from the patterns and tags.
// parsePackage exits if there is an error.
func (g *Generator) parsePackage(patterns []string, tags []string) {
	cfg := &packages.Config{
		Mode: packages.NeedName | packages.NeedTypes | packages.NeedTypesInfo | packages.NeedSyntax,
		// TODO: Need to think about constants in test files. Maybe write type_string_test.go
		// in a separate pass? For later.
		Tests:      false,
		BuildFlags: []string{fmt.Sprintf("-tags=%s", strings.Join(tags, " "))},
	}
	pkgs, err := packages.Load(cfg, patterns...)
	if err != nil {
		log.Fatal(err)
	}
	if len(pkgs) != 1 {
		log.Fatalf("error: %d packages found", len(pkgs))
	}
	g.addPackage(pkgs[0])
}

// addPackage adds a type checked Package and its syntax files to the generator.
func (g *Generator) addPackage(pkg *packages.Package) {
	g.pkg = &Package{
		name:  pkg.Name,
		defs:  pkg.TypesInfo.Defs,
		files: make([]*File, len(pkg.Syntax)),
	}

	for i, file := range pkg.Syntax {
		g.pkg.files[i] = &File{
			file:        file,
			pkg:         g.pkg,
			trimPrefix:  g.trimPrefix,
			lineComment: g.lineComment,
		}
	}
}

// generate produces the String method for the named type.
func (g *Generator) generate(typeName string) {
	values := make([]Value, 0, 100)
	for _, file := range g.pkg.files {
		// Set the state for this run of the walker.
		file.typeName = typeName
		file.values = nil
		if file.file != nil {
			ast.Inspect(file.file, file.genDecl)
			values = append(values, file.values...)
		}
	}

	if len(values) == 0 {
		log.Fatalf("no values defined for type %s", typeName)
	}
	// Generate code that will fail if the constants change value.
	g.Printf("func _() {\n")
	g.Printf("\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n")
	g.Printf("\t// Re-run the stringer command to generate them again.\n")
	g.Printf("\tvar x [1]struct{}\n")
	for _, v := range values {
		g.Printf("\t_ = x[%s - %s]\n", v.originalName, v.str)
	}
	g.Printf("}\n")
	runs := splitIntoRuns(values)
	// The decision of which pattern to use depends on the number of
	// runs in the numbers. If there's only one, it's easy. For more than
	// one, there's a tradeoff between complexity and size of the data
	// and code vs. the simplicity of a map. A map takes more space,
	// but so does the code. The decision here (crossover at 10) is
	// arbitrary, but considers that for large numbers of runs the cost
	// of the linear scan in the switch might become important, and
	// rather than use yet another algorithm such as binary search,
	// we punt and use a map. In any case, the likelihood of a map
	// being necessary for any realistic example other than bitmasks
	// is very low. And bitmasks probably deserve their own analysis,
	// to be done some other day.
	switch {
	case len(runs) == 1:
		g.buildOneRun(runs, typeName)
	case len(runs) <= 10:
		g.buildMultipleRuns(runs, typeName)
	default:
		g.buildMap(runs, typeName)
	}
}

// splitIntoRuns breaks the values into runs of contiguous sequences.
// For example, given 1,2,3,5,6,7 it returns {1,2,3},{5,6,7}.
// The input slice is known to be non-empty.
func splitIntoRuns(values []Value) [][]Value {
	// We use stable sort so the lexically first name is chosen for equal elements.
	sort.Stable(byValue(values))
	// Remove duplicates. Stable sort has put the one we want to print first,
	// so use that one. The String method won't care about which named constant
	// was the argument, so the first name for the given value is the only one to keep.
	// We need to do this because identical values would cause the switch or map
	// to fail to compile.
	j := 1
	for i := 1; i < len(values); i++ {
		if values[i].value != values[i-1].value {
			values[j] = values[i]
			j++
		}
	}
	values = values[:j]
	runs := make([][]Value, 0, 10)
	for len(values) > 0 {
		// One contiguous sequence per outer loop.
		i := 1
		for i < len(values) && values[i].value == values[i-1].value+1 {
			i++
		}
		runs = append(runs, values[:i])
		values = values[i:]
	}
	return runs
}

// format returns the gofmt-ed contents of the Generator's buffer.
func (g *Generator) format() []byte {
	src, err := format.Source(g.buf.Bytes())
	if err != nil {
		// Should never happen, but can arise when developing this code.
		// The user can compile the output to see the error.
		log.Printf("warning: internal error: invalid Go generated: %s", err)
		log.Printf("warning: compile the package to analyze the error")
		return g.buf.Bytes()
	}
	return src
}

// Value represents a declared constant.
type Value struct {
	originalName string // The name of the constant.
	name         string // The name with trimmed prefix.
	// The value is stored as a bit pattern alone. The boolean tells us
	// whether to interpret it as an int64 or a uint64; the only place
	// this matters is when sorting.
	// Much of the time the str field is all we need; it is printed
	// by Value.String.
	value  uint64 // Will be converted to int64 when needed.
	signed bool   // Whether the constant is a signed type.
	str    string // The string representation given by the "go/constant" package.
}

func (v *Value) String() string {
	return v.str
}

// byValue lets us sort the constants into increasing order.
// We take care in the Less method to sort in signed or unsigned order,
// as appropriate.
type byValue []Value

func (b byValue) Len() int      { return len(b) }
func (b byValue) Swap(i, j int) { b[i], b[j] = b[j], b[i] }
func (b byValue) Less(i, j int) bool {
	if b[i].signed {
		return int64(b[i].value) < int64(b[j].value)
	}
	return b[i].value < b[j].value
}

// genDecl processes one declaration clause.
func (f *File) genDecl(node ast.Node) bool {
	decl, ok := node.(*ast.GenDecl)
	if !ok || decl.Tok != token.CONST {
		// We only care about const declarations.
		return true
	}
	// The name of the type of the constants we are declaring.
	// Can change if this is a multi-element declaration.
	typ := ""
	// Loop over the elements of the declaration. Each element is a ValueSpec:
	// a list of names possibly followed by a type, possibly followed by values.
	// If the type and value are both missing, we carry down the type (and value,
	// but the "go/types" package takes care of that).
	for _, spec := range decl.Specs {
		vspec := spec.(*ast.ValueSpec) // Guaranteed to succeed as this is CONST.
		if vspec.Type == nil && len(vspec.Values) > 0 {
			// "X = 1". With no type but a value. If the constant is untyped,
			// skip this vspec and reset the remembered type.
			typ = ""

			// If this is a simple type conversion, remember the type.
			// We don't mind if this is actually a call; a qualified call won't
			// be matched (that will be SelectorExpr, not Ident), and only unusual
			// situations will result in a function call that appears to be
			// a type conversion.
			ce, ok := vspec.Values[0].(*ast.CallExpr)
			if !ok {
				continue
			}
			id, ok := ce.Fun.(*ast.Ident)
			if !ok {
				continue
			}
			typ = id.Name
		}
		if vspec.Type != nil {
			// "X T". We have a type. Remember it.
			ident, ok := vspec.Type.(*ast.Ident)
			if !ok {
				continue
			}
			typ = ident.Name
		}
		if typ != f.typeName {
			// This is not the type we're looking for.
			continue
		}
		// We now have a list of names (from one line of source code) all being
		// declared with the desired type.
		// Grab their names and actual values and store them in f.values.
		for _, name := range vspec.Names {
			if name.Name == "_" {
				continue
			}
			// This dance lets the type checker find the values for us. It's a
			// bit tricky: look up the object declared by the name, find its
			// types.Const, and extract its value.
			obj, ok := f.pkg.defs[name]
			if !ok {
				log.Fatalf("no value for constant %s", name)
			}
			info := obj.Type().Underlying().(*types.Basic).Info()
			if info&types.IsInteger == 0 {
				log.Fatalf("can't handle non-integer constant type %s", typ)
			}
			value := obj.(*types.Const).Val() // Guaranteed to succeed as this is CONST.
			if value.Kind() != constant.Int {
				log.Fatalf("can't happen: constant is not an integer %s", name)
			}
			i64, isInt := constant.Int64Val(value)
			u64, isUint := constant.Uint64Val(value)
			if !isInt && !isUint {
				log.Fatalf("internal error: value of %s is not an integer: %s", name, value.String())
			}
			if !isInt {
				u64 = uint64(i64)
			}
			v := Value{
				originalName: name.Name,
				value:        u64,
				signed:       info&types.IsUnsigned == 0,
				str:          value.String(),
			}
			if c := vspec.Comment; f.lineComment && c != nil && len(c.List) == 1 {
				v.name = strings.TrimSpace(c.Text())
			} else {
				v.name = strings.TrimPrefix(v.originalName, f.trimPrefix)
			}
			f.values = append(f.values, v)
		}
	}
	return false
}

// Helpers

// usize returns the number of bits of the smallest unsigned integer
// type that will hold n. Used to create the smallest possible slice of
// integers to use as indexes into the concatenated strings.
func usize(n int) int {
	switch {
	case n < 1<<8:
		return 8
	case n < 1<<16:
		return 16
	default:
		// 2^32 is enough constants for anyone.
		return 32
	}
}

// declareIndexAndNameVars declares the index slices and concatenated names
// strings representing the runs of values.
func (g *Generator) declareIndexAndNameVars(runs [][]Value, typeName string) {
	var indexes, names []string
	for i, run := range runs {
		index, name := g.createIndexAndNameDecl(run, typeName, fmt.Sprintf("_%d", i))
		if len(run) != 1 {
			indexes = append(indexes, index)
		}
		names = append(names, name)
	}
	g.Printf("const (\n")
	for _, name := range names {
		g.Printf("\t%s\n", name)
	}
	g.Printf(")\n\n")

	if len(indexes) > 0 {
		g.Printf("var (")
		for _, index := range indexes {
			g.Printf("\t%s\n", index)
		}
		g.Printf(")\n\n")
	}
}

// declareIndexAndNameVar is the single-run version of declareIndexAndNameVars
func (g *Generator) declareIndexAndNameVar(run []Value, typeName string) {
	index, name := g.createIndexAndNameDecl(run, typeName, "")
	g.Printf("const %s\n", name)
	g.Printf("var %s\n", index)
}

// createIndexAndNameDecl returns the pair of declarations for the run. The caller will add "const" and "var".
func (g *Generator) createIndexAndNameDecl(run []Value, typeName string, suffix string) (string, string) {
	b := new(bytes.Buffer)
	indexes := make([]int, len(run))
	for i := range run {
		b.WriteString(run[i].name)
		indexes[i] = b.Len()
	}
	nameConst := fmt.Sprintf("_%s_name%s = %q", typeName, suffix, b.String())
	nameLen := b.Len()
	b.Reset()
	fmt.Fprintf(b, "_%s_index%s = [...]uint%d{0, ", typeName, suffix, usize(nameLen))
	for i, v := range indexes {
		if i > 0 {
			fmt.Fprintf(b, ", ")
		}
		fmt.Fprintf(b, "%d", v)
	}
	fmt.Fprintf(b, "}")
	return b.String(), nameConst
}

// declareNameVars declares the concatenated names string representing all the values in the runs.
func (g *Generator) declareNameVars(runs [][]Value, typeName string, suffix string) {
	g.Printf("const _%s_name%s = \"", typeName, suffix)
	for _, run := range runs {
		for i := range run {
			g.Printf("%s", run[i].name)
		}
	}
	g.Printf("\"\n")
}

// buildOneRun generates the variables and String method for a single run of contiguous values.
func (g *Generator) buildOneRun(runs [][]Value, typeName string) {
	values := runs[0]
	g.Printf("\n")
	g.declareIndexAndNameVar(values, typeName)
	// The generated code is simple enough to write as a Printf format.
	lessThanZero := ""
	if values[0].signed {
		lessThanZero = "i < 0 || "
	}
	if values[0].value == 0 { // Signed or unsigned, 0 is still 0.
		g.Printf(stringOneRun, typeName, usize(len(values)), lessThanZero)
	} else {
		g.Printf(stringOneRunWithOffset, typeName, values[0].String(), usize(len(values)), lessThanZero)
	}
}

// Arguments to format are:
//
//	[1]: type name
//	[2]: size of index element (8 for uint8 etc.)
//	[3]: less than zero check (for signed types)
const stringOneRun = `func (i %[1]s) String() string {
	if %[3]si >= %[1]s(len(_%[1]s_index)-1) {
		return "%[1]s(" + strconv.FormatInt(int64(i), 10) + ")"
	}
	return _%[1]s_name[_%[1]s_index[i]:_%[1]s_index[i+1]]
}
`

// Arguments to format are:
//	[1]: type name
//	[2]: lowest defined value for type, as a string
//	[3]: size of index element (8 for uint8 etc.)
//	[4]: less than zero check (for signed types)
/*
 */
const stringOneRunWithOffset = `func (i %[1]s) String() string {
	i -= %[2]s
	if %[4]si >= %[1]s(len(_%[1]s_index)-1) {
		return "%[1]s(" + strconv.FormatInt(int64(i + %[2]s), 10) + ")"
	}
	return _%[1]s_name[_%[1]s_index[i] : _%[1]s_index[i+1]]
}
`

// buildMultipleRuns generates the variables and String method for multiple runs of contiguous values.
// For this pattern, a single Printf format won't do.
func (g *Generator) buildMultipleRuns(runs [][]Value, typeName string) {
	g.Printf("\n")
	g.declareIndexAndNameVars(runs, typeName)
	g.Printf("func (i %s) String() string {\n", typeName)
	g.Printf("\tswitch {\n")
	for i, values := range runs {
		if len(values) == 1 {
			g.Printf("\tcase i == %s:\n", &values[0])
			g.Printf("\t\treturn _%s_name_%d\n", typeName, i)
			continue
		}
		if values[0].value == 0 && !values[0].signed {
			// For an unsigned lower bound of 0, "0 <= i" would be redundant.
			g.Printf("\tcase i <= %s:\n", &values[len(values)-1])
		} else {
			g.Printf("\tcase %s <= i && i <= %s:\n", &values[0], &values[len(values)-1])
		}
		if values[0].value != 0 {
			g.Printf("\t\ti -= %s\n", &values[0])
		}
		g.Printf("\t\treturn _%s_name_%d[_%s_index_%d[i]:_%s_index_%d[i+1]]\n",
			typeName, i, typeName, i, typeName, i)
	}
	g.Printf("\tdefault:\n")
	g.Printf("\t\treturn \"%s(\" + strconv.FormatInt(int64(i), 10) + \")\"\n", typeName)
	g.Printf("\t}\n")
	g.Printf("}\n")
}

// buildMap handles the case where the space is so sparse a map is a reasonable fallback.
// It's a rare situation but has simple code.
func (g *Generator) buildMap(runs [][]Value, typeName string) {
	g.Printf("\n")
	g.declareNameVars(runs, typeName, "")
	g.Printf("\nvar _%s_map = map[%s]string{\n", typeName, typeName)
	n := 0
	for _, values := range runs {
		for _, value := range values {
			g.Printf("\t%s: _%s_name[%d:%d],\n", &value, typeName, n, n+len(value.name))
			n += len(value.name)
		}
	}
	g.Printf("}\n\n")
	g.Printf(stringMap, typeName)
}

// Argument to format is the type name.
const stringMap = `func (i %[1]s) String() string {
	if str, ok := _%[1]s_map[i]; ok {
		return str
	}
	return "%[1]s(" + strconv.FormatInt(int64(i), 10) + ")"
}
`
 07070100000F4E000041ED000000000000000000000007645E367C00000000000000000000000000000000000000000000003100000000elemental-cli-0.3.1/vendor/golang.org/x/tools/go  07070100000F4F000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/golang.org/x/tools/go/ast  07070100000F50000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/go/ast/inspector    07070100000F51000081A4000000000000000000000001645E367C000019E2000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/go/ast/inspector/inspector.go   // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package inspector provides helper functions for traversal over the
// syntax trees of a package, including node filtering by type, and
// materialization of the traversal stack.
//
// During construction, the inspector does a complete traversal and
// builds a list of push/pop events and their node type. Subsequent
// method calls that request a traversal scan this list, rather than walk
// the AST, and perform type filtering using efficient bit sets.
//
// Experiments suggest the inspector's traversals are about 2.5x faster
// than ast.Inspect, but it may take around 5 traversals for this
// benefit to amortize the inspector's construction cost.
// If efficiency is the primary concern, do not use Inspector for
// one-off traversals.
package inspector

// There are four orthogonal features in a traversal:
//  1 type filtering
//  2 pruning
//  3 postorder calls to f
//  4 stack
// Rather than offer all of them in the API,
// only a few combinations are exposed:
// - Preorder is the fastest and has fewest features,
//   but is the most commonly needed traversal.
// - Nodes and WithStack both provide pruning and postorder calls,
//   even though few clients need it, because supporting two versions
//   is not justified.
// More combinations could be supported by expressing them as
// wrappers around a more generic traversal, but this was measured
// and found to degrade performance significantly (30%).

import (
	"go/ast"
)

// An Inspector provides methods for inspecting
// (traversing) the syntax trees of a package.
type Inspector struct {
	events []event
}

// New returns an Inspector for the specified syntax trees.
func New(files []*ast.File) *Inspector {
	return &Inspector{traverse(files)}
}

// An event represents a push or a pop
// of an ast.Node during a traversal.
type event struct {
	node  ast.Node
	typ   uint64 // typeOf(node) on push event, or union of typ strictly between push and pop events on pop events
	index int    // index of corresponding push or pop event
}

// TODO: Experiment with storing only the second word of event.node (unsafe.Pointer).
// Type can be recovered from the sole bit in typ.

// Preorder visits all the nodes of the files supplied to New in
// depth-first order. It calls f(n) for each node n before it visits
// n's children.
//
// The types argument, if non-empty, enables type-based filtering of
// events. The function f if is called only for nodes whose type
// matches an element of the types slice.
func (in *Inspector) Preorder(types []ast.Node, f func(ast.Node)) {
	// Because it avoids postorder calls to f, and the pruning
	// check, Preorder is almost twice as fast as Nodes. The two
	// features seem to contribute similar slowdowns (~1.4x each).

	mask := maskOf(types)
	for i := 0; i < len(in.events); {
		ev := in.events[i]
		if ev.index > i {
			// push
			if ev.typ&mask != 0 {
				f(ev.node)
			}
			pop := ev.index
			if in.events[pop].typ&mask == 0 {
				// Subtrees do not contain types: skip them and pop.
				i = pop + 1
				continue
			}
		}
		i++
	}
}

// Nodes visits the nodes of the files supplied to New in depth-first
// order. It calls f(n, true) for each node n before it visits n's
// children. If f returns true, Nodes invokes f recursively for each
// of the non-nil children of the node, followed by a call of
// f(n, false).
//
// The types argument, if non-empty, enables type-based filtering of
// events. The function f if is called only for nodes whose type
// matches an element of the types slice.
func (in *Inspector) Nodes(types []ast.Node, f func(n ast.Node, push bool) (proceed bool)) {
	mask := maskOf(types)
	for i := 0; i < len(in.events); {
		ev := in.events[i]
		if ev.index > i {
			// push
			pop := ev.index
			if ev.typ&mask != 0 {
				if !f(ev.node, true) {
					i = pop + 1 // jump to corresponding pop + 1
					continue
				}
			}
			if in.events[pop].typ&mask == 0 {
				// Subtrees do not contain types: skip them.
				i = pop
				continue
			}
		} else {
			// pop
			push := ev.index
			if in.events[push].typ&mask != 0 {
				f(ev.node, false)
			}
		}
		i++
	}
}

// WithStack visits nodes in a similar manner to Nodes, but it
// supplies each call to f an additional argument, the current
// traversal stack. The stack's first element is the outermost node,
// an *ast.File; its last is the innermost, n.
func (in *Inspector) WithStack(types []ast.Node, f func(n ast.Node, push bool, stack []ast.Node) (proceed bool)) {
	mask := maskOf(types)
	var stack []ast.Node
	for i := 0; i < len(in.events); {
		ev := in.events[i]
		if ev.index > i {
			// push
			pop := ev.index
			stack = append(stack, ev.node)
			if ev.typ&mask != 0 {
				if !f(ev.node, true, stack) {
					i = pop + 1
					stack = stack[:len(stack)-1]
					continue
				}
			}
			if in.events[pop].typ&mask == 0 {
				// Subtrees does not contain types: skip them.
				i = pop
				continue
			}
		} else {
			// pop
			push := ev.index
			if in.events[push].typ&mask != 0 {
				f(ev.node, false, stack)
			}
			stack = stack[:len(stack)-1]
		}
		i++
	}
}

// traverse builds the table of events representing a traversal.
func traverse(files []*ast.File) []event {
	// Preallocate approximate number of events
	// based on source file extent.
	// This makes traverse faster by 4x (!).
	var extent int
	for _, f := range files {
		extent += int(f.End() - f.Pos())
	}
	// This estimate is based on the net/http package.
	capacity := extent * 33 / 100
	if capacity > 1e6 {
		capacity = 1e6 // impose some reasonable maximum
	}
	events := make([]event, 0, capacity)

	var stack []event
	stack = append(stack, event{}) // include an extra event so file nodes have a parent
	for _, f := range files {
		ast.Inspect(f, func(n ast.Node) bool {
			if n != nil {
				// push
				ev := event{
					node:  n,
					typ:   0,           // temporarily used to accumulate type bits of subtree
					index: len(events), // push event temporarily holds own index
				}
				stack = append(stack, ev)
				events = append(events, ev)
			} else {
				// pop
				top := len(stack) - 1
				ev := stack[top]
				typ := typeOf(ev.node)
				push := ev.index
				parent := top - 1

				events[push].typ = typ            // set type of push
				stack[parent].typ |= typ | ev.typ // parent's typ contains push and pop's typs.
				events[push].index = len(events)  // make push refer to pop

				stack = stack[:top]
				events = append(events, ev)
			}
			return true
		})
	}

	return events
}
  07070100000F52000081A4000000000000000000000001645E367C00001374000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/tools/go/ast/inspector/typeof.go  // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package inspector

// This file defines func typeOf(ast.Node) uint64.
//
// The initial map-based implementation was too slow;
// see https://go-review.googlesource.com/c/tools/+/135655/1/go/ast/inspector/inspector.go#196

import (
	"go/ast"
	"math"

	"golang.org/x/tools/internal/typeparams"
)

const (
	nArrayType = iota
	nAssignStmt
	nBadDecl
	nBadExpr
	nBadStmt
	nBasicLit
	nBinaryExpr
	nBlockStmt
	nBranchStmt
	nCallExpr
	nCaseClause
	nChanType
	nCommClause
	nComment
	nCommentGroup
	nCompositeLit
	nDeclStmt
	nDeferStmt
	nEllipsis
	nEmptyStmt
	nExprStmt
	nField
	nFieldList
	nFile
	nForStmt
	nFuncDecl
	nFuncLit
	nFuncType
	nGenDecl
	nGoStmt
	nIdent
	nIfStmt
	nImportSpec
	nIncDecStmt
	nIndexExpr
	nIndexListExpr
	nInterfaceType
	nKeyValueExpr
	nLabeledStmt
	nMapType
	nPackage
	nParenExpr
	nRangeStmt
	nReturnStmt
	nSelectStmt
	nSelectorExpr
	nSendStmt
	nSliceExpr
	nStarExpr
	nStructType
	nSwitchStmt
	nTypeAssertExpr
	nTypeSpec
	nTypeSwitchStmt
	nUnaryExpr
	nValueSpec
)

// typeOf returns a distinct single-bit value that represents the type of n.
//
// Various implementations were benchmarked with BenchmarkNewInspector:
//
//	                                                                GOGC=off
//	- type switch					4.9-5.5ms	2.1ms
//	- binary search over a sorted list of types	5.5-5.9ms	2.5ms
//	- linear scan, frequency-ordered list		5.9-6.1ms	2.7ms
//	- linear scan, unordered list			6.4ms		2.7ms
//	- hash table					6.5ms		3.1ms
//
// A perfect hash seemed like overkill.
//
// The compiler's switch statement is the clear winner
// as it produces a binary tree in code,
// with constant conditions and good branch prediction.
// (Sadly it is the most verbose in source code.)
// Binary search suffered from poor branch prediction.
func typeOf(n ast.Node) uint64 {
	// Fast path: nearly half of all nodes are identifiers.
	if _, ok := n.(*ast.Ident); ok {
		return 1 << nIdent
	}

	// These cases include all nodes encountered by ast.Inspect.
	switch n.(type) {
	case *ast.ArrayType:
		return 1 << nArrayType
	case *ast.AssignStmt:
		return 1 << nAssignStmt
	case *ast.BadDecl:
		return 1 << nBadDecl
	case *ast.BadExpr:
		return 1 << nBadExpr
	case *ast.BadStmt:
		return 1 << nBadStmt
	case *ast.BasicLit:
		return 1 << nBasicLit
	case *ast.BinaryExpr:
		return 1 << nBinaryExpr
	case *ast.BlockStmt:
		return 1 << nBlockStmt
	case *ast.BranchStmt:
		return 1 << nBranchStmt
	case *ast.CallExpr:
		return 1 << nCallExpr
	case *ast.CaseClause:
		return 1 << nCaseClause
	case *ast.ChanType:
		return 1 << nChanType
	case *ast.CommClause:
		return 1 << nCommClause
	case *ast.Comment:
		return 1 << nComment
	case *ast.CommentGroup:
		return 1 << nCommentGroup
	case *ast.CompositeLit:
		return 1 << nCompositeLit
	case *ast.DeclStmt:
		return 1 << nDeclStmt
	case *ast.DeferStmt:
		return 1 << nDeferStmt
	case *ast.Ellipsis:
		return 1 << nEllipsis
	case *ast.EmptyStmt:
		return 1 << nEmptyStmt
	case *ast.ExprStmt:
		return 1 << nExprStmt
	case *ast.Field:
		return 1 << nField
	case *ast.FieldList:
		return 1 << nFieldList
	case *ast.File:
		return 1 << nFile
	case *ast.ForStmt:
		return 1 << nForStmt
	case *ast.FuncDecl:
		return 1 << nFuncDecl
	case *ast.FuncLit:
		return 1 << nFuncLit
	case *ast.FuncType:
		return 1 << nFuncType
	case *ast.GenDecl:
		return 1 << nGenDecl
	case *ast.GoStmt:
		return 1 << nGoStmt
	case *ast.Ident:
		return 1 << nIdent
	case *ast.IfStmt:
		return 1 << nIfStmt
	case *ast.ImportSpec:
		return 1 << nImportSpec
	case *ast.IncDecStmt:
		return 1 << nIncDecStmt
	case *ast.IndexExpr:
		return 1 << nIndexExpr
	case *typeparams.IndexListExpr:
		return 1 << nIndexListExpr
	case *ast.InterfaceType:
		return 1 << nInterfaceType
	case *ast.KeyValueExpr:
		return 1 << nKeyValueExpr
	case *ast.LabeledStmt:
		return 1 << nLabeledStmt
	case *ast.MapType:
		return 1 << nMapType
	case *ast.Package:
		return 1 << nPackage
	case *ast.ParenExpr:
		return 1 << nParenExpr
	case *ast.RangeStmt:
		return 1 << nRangeStmt
	case *ast.ReturnStmt:
		return 1 << nReturnStmt
	case *ast.SelectStmt:
		return 1 << nSelectStmt
	case *ast.SelectorExpr:
		return 1 << nSelectorExpr
	case *ast.SendStmt:
		return 1 << nSendStmt
	case *ast.SliceExpr:
		return 1 << nSliceExpr
	case *ast.StarExpr:
		return 1 << nStarExpr
	case *ast.StructType:
		return 1 << nStructType
	case *ast.SwitchStmt:
		return 1 << nSwitchStmt
	case *ast.TypeAssertExpr:
		return 1 << nTypeAssertExpr
	case *ast.TypeSpec:
		return 1 << nTypeSpec
	case *ast.TypeSwitchStmt:
		return 1 << nTypeSwitchStmt
	case *ast.UnaryExpr:
		return 1 << nUnaryExpr
	case *ast.ValueSpec:
		return 1 << nValueSpec
	}
	return 0
}

func maskOf(nodes []ast.Node) uint64 {
	if nodes == nil {
		return math.MaxUint64 // match all node types
	}
	var mask uint64
	for _, n := range nodes {
		mask |= typeOf(n)
	}
	return mask
}
07070100000F53000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/go/gcexportdata 07070100000F54000081A4000000000000000000000001645E367C00001A59000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go // Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package gcexportdata provides functions for locating, reading, and
// writing export data files containing type information produced by the
// gc compiler.  This package supports go1.7 export data format and all
// later versions.
//
// Although it might seem convenient for this package to live alongside
// go/types in the standard library, this would cause version skew
// problems for developer tools that use it, since they must be able to
// consume the outputs of the gc compiler both before and after a Go
// update such as from Go 1.7 to Go 1.8.  Because this package lives in
// golang.org/x/tools, sites can update their version of this repo some
// time before the Go 1.8 release and rebuild and redeploy their
// developer tools, which will then be able to consume both Go 1.7 and
// Go 1.8 export data files, so they will work before and after the
// Go update. (See discussion at https://golang.org/issue/15651.)
package gcexportdata // import "golang.org/x/tools/go/gcexportdata"

import (
	"bufio"
	"bytes"
	"encoding/json"
	"fmt"
	"go/token"
	"go/types"
	"io"
	"os/exec"

	"golang.org/x/tools/internal/gcimporter"
)

// Find returns the name of an object (.o) or archive (.a) file
// containing type information for the specified import path,
// using the go command.
// If no file was found, an empty filename is returned.
//
// A relative srcDir is interpreted relative to the current working directory.
//
// Find also returns the package's resolved (canonical) import path,
// reflecting the effects of srcDir and vendoring on importPath.
//
// Deprecated: Use the higher-level API in golang.org/x/tools/go/packages,
// which is more efficient.
func Find(importPath, srcDir string) (filename, path string) {
	cmd := exec.Command("go", "list", "-json", "-export", "--", importPath)
	cmd.Dir = srcDir
	out, err := cmd.CombinedOutput()
	if err != nil {
		return "", ""
	}
	var data struct {
		ImportPath string
		Export     string
	}
	json.Unmarshal(out, &data)
	return data.Export, data.ImportPath
}

// NewReader returns a reader for the export data section of an object
// (.o) or archive (.a) file read from r.  The new reader may provide
// additional trailing data beyond the end of the export data.
func NewReader(r io.Reader) (io.Reader, error) {
	buf := bufio.NewReader(r)
	_, size, err := gcimporter.FindExportData(buf)
	if err != nil {
		return nil, err
	}

	if size >= 0 {
		// We were given an archive and found the __.PKGDEF in it.
		// This tells us the size of the export data, and we don't
		// need to return the entire file.
		return &io.LimitedReader{
			R: buf,
			N: size,
		}, nil
	} else {
		// We were given an object file. As such, we don't know how large
		// the export data is and must return the entire file.
		return buf, nil
	}
}

// readAll works the same way as io.ReadAll, but avoids allocations and copies
// by preallocating a byte slice of the necessary size if the size is known up
// front. This is always possible when the input is an archive. In that case,
// NewReader will return the known size using an io.LimitedReader.
func readAll(r io.Reader) ([]byte, error) {
	if lr, ok := r.(*io.LimitedReader); ok {
		data := make([]byte, lr.N)
		_, err := io.ReadFull(lr, data)
		return data, err
	}
	return io.ReadAll(r)
}

// Read reads export data from in, decodes it, and returns type
// information for the package.
//
// The package path (effectively its linker symbol prefix) is
// specified by path, since unlike the package name, this information
// may not be recorded in the export data.
//
// File position information is added to fset.
//
// Read may inspect and add to the imports map to ensure that references
// within the export data to other packages are consistent.  The caller
// must ensure that imports[path] does not exist, or exists but is
// incomplete (see types.Package.Complete), and Read inserts the
// resulting package into this map entry.
//
// On return, the state of the reader is undefined.
func Read(in io.Reader, fset *token.FileSet, imports map[string]*types.Package, path string) (*types.Package, error) {
	data, err := readAll(in)
	if err != nil {
		return nil, fmt.Errorf("reading export data for %q: %v", path, err)
	}

	if bytes.HasPrefix(data, []byte("!<arch>")) {
		return nil, fmt.Errorf("can't read export data for %q directly from an archive file (call gcexportdata.NewReader first to extract export data)", path)
	}

	// The indexed export format starts with an 'i'; the older
	// binary export format starts with a 'c', 'd', or 'v'
	// (from "version"). Select appropriate importer.
	if len(data) > 0 {
		switch data[0] {
		case 'i':
			_, pkg, err := gcimporter.IImportData(fset, imports, data[1:], path)
			return pkg, err

		case 'v', 'c', 'd':
			_, pkg, err := gcimporter.BImportData(fset, imports, data, path)
			return pkg, err

		case 'u':
			_, pkg, err := gcimporter.UImportData(fset, imports, data[1:], path)
			return pkg, err

		default:
			l := len(data)
			if l > 10 {
				l = 10
			}
			return nil, fmt.Errorf("unexpected export data with prefix %q for path %s", string(data[:l]), path)
		}
	}
	return nil, fmt.Errorf("empty export data for %s", path)
}

// Write writes encoded type information for the specified package to out.
// The FileSet provides file position information for named objects.
func Write(out io.Writer, fset *token.FileSet, pkg *types.Package) error {
	if _, err := io.WriteString(out, "i"); err != nil {
		return err
	}
	return gcimporter.IExportData(out, fset, pkg)
}

// ReadBundle reads an export bundle from in, decodes it, and returns type
// information for the packages.
// File position information is added to fset.
//
// ReadBundle may inspect and add to the imports map to ensure that references
// within the export bundle to other packages are consistent.
//
// On return, the state of the reader is undefined.
//
// Experimental: This API is experimental and may change in the future.
func ReadBundle(in io.Reader, fset *token.FileSet, imports map[string]*types.Package) ([]*types.Package, error) {
	data, err := readAll(in)
	if err != nil {
		return nil, fmt.Errorf("reading export bundle: %v", err)
	}
	return gcimporter.IImportBundle(fset, imports, data)
}

// WriteBundle writes encoded type information for the specified packages to out.
// The FileSet provides file position information for named objects.
//
// Experimental: This API is experimental and may change in the future.
func WriteBundle(out io.Writer, fset *token.FileSet, pkgs []*types.Package) error {
	return gcimporter.IExportBundle(out, fset, pkgs)
}
   07070100000F55000081A4000000000000000000000001645E367C000007EA000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/go/gcexportdata/importer.go // Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package gcexportdata

import (
	"fmt"
	"go/token"
	"go/types"
	"os"
)

// NewImporter returns a new instance of the types.Importer interface
// that reads type information from export data files written by gc.
// The Importer also satisfies types.ImporterFrom.
//
// Export data files are located using "go build" workspace conventions
// and the build.Default context.
//
// Use this importer instead of go/importer.For("gc", ...) to avoid the
// version-skew problems described in the documentation of this package,
// or to control the FileSet or access the imports map populated during
// package loading.
//
// Deprecated: Use the higher-level API in golang.org/x/tools/go/packages,
// which is more efficient.
func NewImporter(fset *token.FileSet, imports map[string]*types.Package) types.ImporterFrom {
	return importer{fset, imports}
}

type importer struct {
	fset    *token.FileSet
	imports map[string]*types.Package
}

func (imp importer) Import(importPath string) (*types.Package, error) {
	return imp.ImportFrom(importPath, "", 0)
}

func (imp importer) ImportFrom(importPath, srcDir string, mode types.ImportMode) (_ *types.Package, err error) {
	filename, path := Find(importPath, srcDir)
	if filename == "" {
		if importPath == "unsafe" {
			// Even for unsafe, call Find first in case
			// the package was vendored.
			return types.Unsafe, nil
		}
		return nil, fmt.Errorf("can't find import: %s", importPath)
	}

	if pkg, ok := imp.imports[path]; ok && pkg.Complete() {
		return pkg, nil // cache hit
	}

	// open file
	f, err := os.Open(filename)
	if err != nil {
		return nil, err
	}
	defer func() {
		f.Close()
		if err != nil {
			// add file name to error
			err = fmt.Errorf("reading export data: %s: %v", filename, err)
		}
	}()

	r, err := NewReader(f)
	if err != nil {
		return nil, err
	}

	return Read(r, imp.fset, imp.imports, path)
}
  07070100000F56000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/go/internal 07070100000F57000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/golang.org/x/tools/go/internal/packagesdriver  07070100000F58000081A4000000000000000000000001645E367C00000657000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package packagesdriver fetches type sizes for go/packages and go/analysis.
package packagesdriver

import (
	"context"
	"fmt"
	"go/types"
	"strings"

	"golang.org/x/tools/internal/gocommand"
)

var debug = false

func GetSizesGolist(ctx context.Context, inv gocommand.Invocation, gocmdRunner *gocommand.Runner) (types.Sizes, error) {
	inv.Verb = "list"
	inv.Args = []string{"-f", "{{context.GOARCH}} {{context.Compiler}}", "--", "unsafe"}
	stdout, stderr, friendlyErr, rawErr := gocmdRunner.RunRaw(ctx, inv)
	var goarch, compiler string
	if rawErr != nil {
		if rawErrMsg := rawErr.Error(); strings.Contains(rawErrMsg, "cannot find main module") || strings.Contains(rawErrMsg, "go.mod file not found") {
			// User's running outside of a module. All bets are off. Get GOARCH and guess compiler is gc.
			// TODO(matloob): Is this a problem in practice?
			inv.Verb = "env"
			inv.Args = []string{"GOARCH"}
			envout, enverr := gocmdRunner.Run(ctx, inv)
			if enverr != nil {
				return nil, enverr
			}
			goarch = strings.TrimSpace(envout.String())
			compiler = "gc"
		} else {
			return nil, friendlyErr
		}
	} else {
		fields := strings.Fields(stdout.String())
		if len(fields) < 2 {
			return nil, fmt.Errorf("could not parse GOARCH and Go compiler in format \"<GOARCH> <compiler>\":\nstdout: <<%s>>\nstderr: <<%s>>",
				stdout.String(), stderr.String())
		}
		goarch = fields[0]
		compiler = fields[1]
	}
	return types.SizesFor(compiler, goarch), nil
}
 07070100000F59000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/go/packages 07070100000F5A000081A4000000000000000000000001645E367C00002B3D000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/golang.org/x/tools/go/packages/doc.go  // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

/*
Package packages loads Go packages for inspection and analysis.

The Load function takes as input a list of patterns and return a list of Package
structs describing individual packages matched by those patterns.
The LoadMode controls the amount of detail in the loaded packages.

Load passes most patterns directly to the underlying build tool,
but all patterns with the prefix "query=", where query is a
non-empty string of letters from [a-z], are reserved and may be
interpreted as query operators.

Two query operators are currently supported: "file" and "pattern".

The query "file=path/to/file.go" matches the package or packages enclosing
the Go source file path/to/file.go.  For example "file=~/go/src/fmt/print.go"
might return the packages "fmt" and "fmt [fmt.test]".

The query "pattern=string" causes "string" to be passed directly to
the underlying build tool. In most cases this is unnecessary,
but an application can use Load("pattern=" + x) as an escaping mechanism
to ensure that x is not interpreted as a query operator if it contains '='.

All other query operators are reserved for future use and currently
cause Load to report an error.

The Package struct provides basic information about the package, including

  - ID, a unique identifier for the package in the returned set;
  - GoFiles, the names of the package's Go source files;
  - Imports, a map from source import strings to the Packages they name;
  - Types, the type information for the package's exported symbols;
  - Syntax, the parsed syntax trees for the package's source code; and
  - TypeInfo, the result of a complete type-check of the package syntax trees.

(See the documentation for type Package for the complete list of fields
and more detailed descriptions.)

For example,

	Load(nil, "bytes", "unicode...")

returns four Package structs describing the standard library packages
bytes, unicode, unicode/utf16, and unicode/utf8. Note that one pattern
can match multiple packages and that a package might be matched by
multiple patterns: in general it is not possible to determine which
packages correspond to which patterns.

Note that the list returned by Load contains only the packages matched
by the patterns. Their dependencies can be found by walking the import
graph using the Imports fields.

The Load function can be configured by passing a pointer to a Config as
the first argument. A nil Config is equivalent to the zero Config, which
causes Load to run in LoadFiles mode, collecting minimal information.
See the documentation for type Config for details.

As noted earlier, the Config.Mode controls the amount of detail
reported about the loaded packages. See the documentation for type LoadMode
for details.

Most tools should pass their command-line arguments (after any flags)
uninterpreted to the loader, so that the loader can interpret them
according to the conventions of the underlying build system.
See the Example function for typical usage.
*/
package packages // import "golang.org/x/tools/go/packages"

/*

Motivation and design considerations

The new package's design solves problems addressed by two existing
packages: go/build, which locates and describes packages, and
golang.org/x/tools/go/loader, which loads, parses and type-checks them.
The go/build.Package structure encodes too much of the 'go build' way
of organizing projects, leaving us in need of a data type that describes a
package of Go source code independent of the underlying build system.
We wanted something that works equally well with go build and vgo, and
also other build systems such as Bazel and Blaze, making it possible to
construct analysis tools that work in all these environments.
Tools such as errcheck and staticcheck were essentially unavailable to
the Go community at Google, and some of Google's internal tools for Go
are unavailable externally.
This new package provides a uniform way to obtain package metadata by
querying each of these build systems, optionally supporting their
preferred command-line notations for packages, so that tools integrate
neatly with users' build environments. The Metadata query function
executes an external query tool appropriate to the current workspace.

Loading packages always returns the complete import graph "all the way down",
even if all you want is information about a single package, because the query
mechanisms of all the build systems we currently support ({go,vgo} list, and
blaze/bazel aspect-based query) cannot provide detailed information
about one package without visiting all its dependencies too, so there is
no additional asymptotic cost to providing transitive information.
(This property might not be true of a hypothetical 5th build system.)

In calls to TypeCheck, all initial packages, and any package that
transitively depends on one of them, must be loaded from source.
Consider A->B->C->D->E: if A,C are initial, A,B,C must be loaded from
source; D may be loaded from export data, and E may not be loaded at all
(though it's possible that D's export data mentions it, so a
types.Package may be created for it and exposed.)

The old loader had a feature to suppress type-checking of function
bodies on a per-package basis, primarily intended to reduce the work of
obtaining type information for imported packages. Now that imports are
satisfied by export data, the optimization no longer seems necessary.

Despite some early attempts, the old loader did not exploit export data,
instead always using the equivalent of WholeProgram mode. This was due
to the complexity of mixing source and export data packages (now
resolved by the upward traversal mentioned above), and because export data
files were nearly always missing or stale. Now that 'go build' supports
caching, all the underlying build systems can guarantee to produce
export data in a reasonable (amortized) time.

Test "main" packages synthesized by the build system are now reported as
first-class packages, avoiding the need for clients (such as go/ssa) to
reinvent this generation logic.

One way in which go/packages is simpler than the old loader is in its
treatment of in-package tests. In-package tests are packages that
consist of all the files of the library under test, plus the test files.
The old loader constructed in-package tests by a two-phase process of
mutation called "augmentation": first it would construct and type check
all the ordinary library packages and type-check the packages that
depend on them; then it would add more (test) files to the package and
type-check again. This two-phase approach had four major problems:
1) in processing the tests, the loader modified the library package,
   leaving no way for a client application to see both the test
   package and the library package; one would mutate into the other.
2) because test files can declare additional methods on types defined in
   the library portion of the package, the dispatch of method calls in
   the library portion was affected by the presence of the test files.
   This should have been a clue that the packages were logically
   different.
3) this model of "augmentation" assumed at most one in-package test
   per library package, which is true of projects using 'go build',
   but not other build systems.
4) because of the two-phase nature of test processing, all packages that
   import the library package had to be processed before augmentation,
   forcing a "one-shot" API and preventing the client from calling Load
   in several times in sequence as is now possible in WholeProgram mode.
   (TypeCheck mode has a similar one-shot restriction for a different reason.)

Early drafts of this package supported "multi-shot" operation.
Although it allowed clients to make a sequence of calls (or concurrent
calls) to Load, building up the graph of Packages incrementally,
it was of marginal value: it complicated the API
(since it allowed some options to vary across calls but not others),
it complicated the implementation,
it cannot be made to work in Types mode, as explained above,
and it was less efficient than making one combined call (when this is possible).
Among the clients we have inspected, none made multiple calls to load
but could not be easily and satisfactorily modified to make only a single call.
However, applications changes may be required.
For example, the ssadump command loads the user-specified packages
and in addition the runtime package.  It is tempting to simply append
"runtime" to the user-provided list, but that does not work if the user
specified an ad-hoc package such as [a.go b.go].
Instead, ssadump no longer requests the runtime package,
but seeks it among the dependencies of the user-specified packages,
and emits an error if it is not found.

Overlays: The Overlay field in the Config allows providing alternate contents
for Go source files, by providing a mapping from file path to contents.
go/packages will pull in new imports added in overlay files when go/packages
is run in LoadImports mode or greater.
Overlay support for the go list driver isn't complete yet: if the file doesn't
exist on disk, it will only be recognized in an overlay if it is a non-test file
and the package would be reported even without the overlay.

Questions & Tasks

- Add GOARCH/GOOS?
  They are not portable concepts, but could be made portable.
  Our goal has been to allow users to express themselves using the conventions
  of the underlying build system: if the build system honors GOARCH
  during a build and during a metadata query, then so should
  applications built atop that query mechanism.
  Conversely, if the target architecture of the build is determined by
  command-line flags, the application can pass the relevant
  flags through to the build system using a command such as:
    myapp -query_flag="--cpu=amd64" -query_flag="--os=darwin"
  However, this approach is low-level, unwieldy, and non-portable.
  GOOS and GOARCH seem important enough to warrant a dedicated option.

- How should we handle partial failures such as a mixture of good and
  malformed patterns, existing and non-existent packages, successful and
  failed builds, import failures, import cycles, and so on, in a call to
  Load?

- Support bazel, blaze, and go1.10 list, not just go1.11 list.

- Handle (and test) various partial success cases, e.g.
  a mixture of good packages and:
  invalid patterns
  nonexistent packages
  empty packages
  packages with malformed package or import declarations
  unreadable files
  import cycles
  other parse errors
  type errors
  Make sure we record errors at the correct place in the graph.

- Missing packages among initial arguments are not reported.
  Return bogus packages for them, like golist does.

- "undeclared name" errors (for example) are reported out of source file
  order. I suspect this is due to the breadth-first resolution now used
  by go/types. Is that a bug? Discuss with gri.

*/
   07070100000F5B000081A4000000000000000000000001645E367C00000D90000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/tools/go/packages/external.go // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// This file enables an external tool to intercept package requests.
// If the tool is present then its results are used in preference to
// the go list command.

package packages

import (
	"bytes"
	"encoding/json"
	"fmt"
	exec "golang.org/x/sys/execabs"
	"os"
	"strings"
)

// The Driver Protocol
//
// The driver, given the inputs to a call to Load, returns metadata about the packages specified.
// This allows for different build systems to support go/packages by telling go/packages how the
// packages' source is organized.
// The driver is a binary, either specified by the GOPACKAGESDRIVER environment variable or in
// the path as gopackagesdriver. It's given the inputs to load in its argv. See the package
// documentation in doc.go for the full description of the patterns that need to be supported.
// A driver receives as a JSON-serialized driverRequest struct in standard input and will
// produce a JSON-serialized driverResponse (see definition in packages.go) in its standard output.

// driverRequest is used to provide the portion of Load's Config that is needed by a driver.
type driverRequest struct {
	Mode LoadMode `json:"mode"`
	// Env specifies the environment the underlying build system should be run in.
	Env []string `json:"env"`
	// BuildFlags are flags that should be passed to the underlying build system.
	BuildFlags []string `json:"build_flags"`
	// Tests specifies whether the patterns should also return test packages.
	Tests bool `json:"tests"`
	// Overlay maps file paths (relative to the driver's working directory) to the byte contents
	// of overlay files.
	Overlay map[string][]byte `json:"overlay"`
}

// findExternalDriver returns the file path of a tool that supplies
// the build system package structure, or "" if not found."
// If GOPACKAGESDRIVER is set in the environment findExternalTool returns its
// value, otherwise it searches for a binary named gopackagesdriver on the PATH.
func findExternalDriver(cfg *Config) driver {
	const toolPrefix = "GOPACKAGESDRIVER="
	tool := ""
	for _, env := range cfg.Env {
		if val := strings.TrimPrefix(env, toolPrefix); val != env {
			tool = val
		}
	}
	if tool != "" && tool == "off" {
		return nil
	}
	if tool == "" {
		var err error
		tool, err = exec.LookPath("gopackagesdriver")
		if err != nil {
			return nil
		}
	}
	return func(cfg *Config, words ...string) (*driverResponse, error) {
		req, err := json.Marshal(driverRequest{
			Mode:       cfg.Mode,
			Env:        cfg.Env,
			BuildFlags: cfg.BuildFlags,
			Tests:      cfg.Tests,
			Overlay:    cfg.Overlay,
		})
		if err != nil {
			return nil, fmt.Errorf("failed to encode message to driver tool: %v", err)
		}

		buf := new(bytes.Buffer)
		stderr := new(bytes.Buffer)
		cmd := exec.CommandContext(cfg.Context, tool, words...)
		cmd.Dir = cfg.Dir
		cmd.Env = cfg.Env
		cmd.Stdin = bytes.NewReader(req)
		cmd.Stdout = buf
		cmd.Stderr = stderr

		if err := cmd.Run(); err != nil {
			return nil, fmt.Errorf("%v: %v: %s", tool, err, cmd.Stderr)
		}
		if len(stderr.Bytes()) != 0 && os.Getenv("GOPACKAGESPRINTDRIVERERRORS") != "" {
			fmt.Fprintf(os.Stderr, "%s stderr: <<%s>>\n", cmdDebugStr(cmd), stderr)
		}

		var response driverResponse
		if err := json.Unmarshal(buf.Bytes(), &response); err != nil {
			return nil, err
		}
		return &response, nil
	}
}
07070100000F5C000081A4000000000000000000000001645E367C00009ADF000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/golang.org/x/tools/go/packages/golist.go   // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package packages

import (
	"bytes"
	"context"
	"encoding/json"
	"fmt"
	"go/types"
	"io/ioutil"
	"log"
	"os"
	"path"
	"path/filepath"
	"reflect"
	"sort"
	"strconv"
	"strings"
	"sync"
	"unicode"

	exec "golang.org/x/sys/execabs"
	"golang.org/x/tools/go/internal/packagesdriver"
	"golang.org/x/tools/internal/gocommand"
	"golang.org/x/tools/internal/packagesinternal"
)

// debug controls verbose logging.
var debug, _ = strconv.ParseBool(os.Getenv("GOPACKAGESDEBUG"))

// A goTooOldError reports that the go command
// found by exec.LookPath is too old to use the new go list behavior.
type goTooOldError struct {
	error
}

// responseDeduper wraps a driverResponse, deduplicating its contents.
type responseDeduper struct {
	seenRoots    map[string]bool
	seenPackages map[string]*Package
	dr           *driverResponse
}

func newDeduper() *responseDeduper {
	return &responseDeduper{
		dr:           &driverResponse{},
		seenRoots:    map[string]bool{},
		seenPackages: map[string]*Package{},
	}
}

// addAll fills in r with a driverResponse.
func (r *responseDeduper) addAll(dr *driverResponse) {
	for _, pkg := range dr.Packages {
		r.addPackage(pkg)
	}
	for _, root := range dr.Roots {
		r.addRoot(root)
	}
	r.dr.GoVersion = dr.GoVersion
}

func (r *responseDeduper) addPackage(p *Package) {
	if r.seenPackages[p.ID] != nil {
		return
	}
	r.seenPackages[p.ID] = p
	r.dr.Packages = append(r.dr.Packages, p)
}

func (r *responseDeduper) addRoot(id string) {
	if r.seenRoots[id] {
		return
	}
	r.seenRoots[id] = true
	r.dr.Roots = append(r.dr.Roots, id)
}

type golistState struct {
	cfg *Config
	ctx context.Context

	envOnce    sync.Once
	goEnvError error
	goEnv      map[string]string

	rootsOnce     sync.Once
	rootDirsError error
	rootDirs      map[string]string

	goVersionOnce  sync.Once
	goVersionError error
	goVersion      int // The X in Go 1.X.

	// vendorDirs caches the (non)existence of vendor directories.
	vendorDirs map[string]bool
}

// getEnv returns Go environment variables. Only specific variables are
// populated -- computing all of them is slow.
func (state *golistState) getEnv() (map[string]string, error) {
	state.envOnce.Do(func() {
		var b *bytes.Buffer
		b, state.goEnvError = state.invokeGo("env", "-json", "GOMOD", "GOPATH")
		if state.goEnvError != nil {
			return
		}

		state.goEnv = make(map[string]string)
		decoder := json.NewDecoder(b)
		if state.goEnvError = decoder.Decode(&state.goEnv); state.goEnvError != nil {
			return
		}
	})
	return state.goEnv, state.goEnvError
}

// mustGetEnv is a convenience function that can be used if getEnv has already succeeded.
func (state *golistState) mustGetEnv() map[string]string {
	env, err := state.getEnv()
	if err != nil {
		panic(fmt.Sprintf("mustGetEnv: %v", err))
	}
	return env
}

// goListDriver uses the go list command to interpret the patterns and produce
// the build system package structure.
// See driver for more details.
func goListDriver(cfg *Config, patterns ...string) (*driverResponse, error) {
	// Make sure that any asynchronous go commands are killed when we return.
	parentCtx := cfg.Context
	if parentCtx == nil {
		parentCtx = context.Background()
	}
	ctx, cancel := context.WithCancel(parentCtx)
	defer cancel()

	response := newDeduper()

	state := &golistState{
		cfg:        cfg,
		ctx:        ctx,
		vendorDirs: map[string]bool{},
	}

	// Fill in response.Sizes asynchronously if necessary.
	var sizeserr error
	var sizeswg sync.WaitGroup
	if cfg.Mode&NeedTypesSizes != 0 || cfg.Mode&NeedTypes != 0 {
		sizeswg.Add(1)
		go func() {
			var sizes types.Sizes
			sizes, sizeserr = packagesdriver.GetSizesGolist(ctx, state.cfgInvocation(), cfg.gocmdRunner)
			// types.SizesFor always returns nil or a *types.StdSizes.
			response.dr.Sizes, _ = sizes.(*types.StdSizes)
			sizeswg.Done()
		}()
	}

	// Determine files requested in contains patterns
	var containFiles []string
	restPatterns := make([]string, 0, len(patterns))
	// Extract file= and other [querytype]= patterns. Report an error if querytype
	// doesn't exist.
extractQueries:
	for _, pattern := range patterns {
		eqidx := strings.Index(pattern, "=")
		if eqidx < 0 {
			restPatterns = append(restPatterns, pattern)
		} else {
			query, value := pattern[:eqidx], pattern[eqidx+len("="):]
			switch query {
			case "file":
				containFiles = append(containFiles, value)
			case "pattern":
				restPatterns = append(restPatterns, value)
			case "": // not a reserved query
				restPatterns = append(restPatterns, pattern)
			default:
				for _, rune := range query {
					if rune < 'a' || rune > 'z' { // not a reserved query
						restPatterns = append(restPatterns, pattern)
						continue extractQueries
					}
				}
				// Reject all other patterns containing "="
				return nil, fmt.Errorf("invalid query type %q in query pattern %q", query, pattern)
			}
		}
	}

	// See if we have any patterns to pass through to go list. Zero initial
	// patterns also requires a go list call, since it's the equivalent of
	// ".".
	if len(restPatterns) > 0 || len(patterns) == 0 {
		dr, err := state.createDriverResponse(restPatterns...)
		if err != nil {
			return nil, err
		}
		response.addAll(dr)
	}

	if len(containFiles) != 0 {
		if err := state.runContainsQueries(response, containFiles); err != nil {
			return nil, err
		}
	}

	// Only use go/packages' overlay processing if we're using a Go version
	// below 1.16. Otherwise, go list handles it.
	if goVersion, err := state.getGoVersion(); err == nil && goVersion < 16 {
		modifiedPkgs, needPkgs, err := state.processGolistOverlay(response)
		if err != nil {
			return nil, err
		}

		var containsCandidates []string
		if len(containFiles) > 0 {
			containsCandidates = append(containsCandidates, modifiedPkgs...)
			containsCandidates = append(containsCandidates, needPkgs...)
		}
		if err := state.addNeededOverlayPackages(response, needPkgs); err != nil {
			return nil, err
		}
		// Check candidate packages for containFiles.
		if len(containFiles) > 0 {
			for _, id := range containsCandidates {
				pkg, ok := response.seenPackages[id]
				if !ok {
					response.addPackage(&Package{
						ID: id,
						Errors: []Error{{
							Kind: ListError,
							Msg:  fmt.Sprintf("package %s expected but not seen", id),
						}},
					})
					continue
				}
				for _, f := range containFiles {
					for _, g := range pkg.GoFiles {
						if sameFile(f, g) {
							response.addRoot(id)
						}
					}
				}
			}
		}
		// Add root for any package that matches a pattern. This applies only to
		// packages that are modified by overlays, since they are not added as
		// roots automatically.
		for _, pattern := range restPatterns {
			match := matchPattern(pattern)
			for _, pkgID := range modifiedPkgs {
				pkg, ok := response.seenPackages[pkgID]
				if !ok {
					continue
				}
				if match(pkg.PkgPath) {
					response.addRoot(pkg.ID)
				}
			}
		}
	}

	sizeswg.Wait()
	if sizeserr != nil {
		return nil, sizeserr
	}
	return response.dr, nil
}

func (state *golistState) addNeededOverlayPackages(response *responseDeduper, pkgs []string) error {
	if len(pkgs) == 0 {
		return nil
	}
	dr, err := state.createDriverResponse(pkgs...)
	if err != nil {
		return err
	}
	for _, pkg := range dr.Packages {
		response.addPackage(pkg)
	}
	_, needPkgs, err := state.processGolistOverlay(response)
	if err != nil {
		return err
	}
	return state.addNeededOverlayPackages(response, needPkgs)
}

func (state *golistState) runContainsQueries(response *responseDeduper, queries []string) error {
	for _, query := range queries {
		// TODO(matloob): Do only one query per directory.
		fdir := filepath.Dir(query)
		// Pass absolute path of directory to go list so that it knows to treat it as a directory,
		// not a package path.
		pattern, err := filepath.Abs(fdir)
		if err != nil {
			return fmt.Errorf("could not determine absolute path of file= query path %q: %v", query, err)
		}
		dirResponse, err := state.createDriverResponse(pattern)

		// If there was an error loading the package, or no packages are returned,
		// or the package is returned with errors, try to load the file as an
		// ad-hoc package.
		// Usually the error will appear in a returned package, but may not if we're
		// in module mode and the ad-hoc is located outside a module.
		if err != nil || len(dirResponse.Packages) == 0 || len(dirResponse.Packages) == 1 && len(dirResponse.Packages[0].GoFiles) == 0 &&
			len(dirResponse.Packages[0].Errors) == 1 {
			var queryErr error
			if dirResponse, queryErr = state.adhocPackage(pattern, query); queryErr != nil {
				return err // return the original error
			}
		}
		isRoot := make(map[string]bool, len(dirResponse.Roots))
		for _, root := range dirResponse.Roots {
			isRoot[root] = true
		}
		for _, pkg := range dirResponse.Packages {
			// Add any new packages to the main set
			// We don't bother to filter packages that will be dropped by the changes of roots,
			// that will happen anyway during graph construction outside this function.
			// Over-reporting packages is not a problem.
			response.addPackage(pkg)
			// if the package was not a root one, it cannot have the file
			if !isRoot[pkg.ID] {
				continue
			}
			for _, pkgFile := range pkg.GoFiles {
				if filepath.Base(query) == filepath.Base(pkgFile) {
					response.addRoot(pkg.ID)
					break
				}
			}
		}
	}
	return nil
}

// adhocPackage attempts to load or construct an ad-hoc package for a given
// query, if the original call to the driver produced inadequate results.
func (state *golistState) adhocPackage(pattern, query string) (*driverResponse, error) {
	response, err := state.createDriverResponse(query)
	if err != nil {
		return nil, err
	}
	// If we get nothing back from `go list`,
	// try to make this file into its own ad-hoc package.
	// TODO(rstambler): Should this check against the original response?
	if len(response.Packages) == 0 {
		response.Packages = append(response.Packages, &Package{
			ID:              "command-line-arguments",
			PkgPath:         query,
			GoFiles:         []string{query},
			CompiledGoFiles: []string{query},
			Imports:         make(map[string]*Package),
		})
		response.Roots = append(response.Roots, "command-line-arguments")
	}
	// Handle special cases.
	if len(response.Packages) == 1 {
		// golang/go#33482: If this is a file= query for ad-hoc packages where
		// the file only exists on an overlay, and exists outside of a module,
		// add the file to the package and remove the errors.
		if response.Packages[0].ID == "command-line-arguments" ||
			filepath.ToSlash(response.Packages[0].PkgPath) == filepath.ToSlash(query) {
			if len(response.Packages[0].GoFiles) == 0 {
				filename := filepath.Join(pattern, filepath.Base(query)) // avoid recomputing abspath
				// TODO(matloob): check if the file is outside of a root dir?
				for path := range state.cfg.Overlay {
					if path == filename {
						response.Packages[0].Errors = nil
						response.Packages[0].GoFiles = []string{path}
						response.Packages[0].CompiledGoFiles = []string{path}
					}
				}
			}
		}
	}
	return response, nil
}

// Fields must match go list;
// see $GOROOT/src/cmd/go/internal/load/pkg.go.
type jsonPackage struct {
	ImportPath        string
	Dir               string
	Name              string
	Export            string
	GoFiles           []string
	CompiledGoFiles   []string
	IgnoredGoFiles    []string
	IgnoredOtherFiles []string
	EmbedPatterns     []string
	EmbedFiles        []string
	CFiles            []string
	CgoFiles          []string
	CXXFiles          []string
	MFiles            []string
	HFiles            []string
	FFiles            []string
	SFiles            []string
	SwigFiles         []string
	SwigCXXFiles      []string
	SysoFiles         []string
	Imports           []string
	ImportMap         map[string]string
	Deps              []string
	Module            *Module
	TestGoFiles       []string
	TestImports       []string
	XTestGoFiles      []string
	XTestImports      []string
	ForTest           string // q in a "p [q.test]" package, else ""
	DepOnly           bool

	Error      *packagesinternal.PackageError
	DepsErrors []*packagesinternal.PackageError
}

type jsonPackageError struct {
	ImportStack []string
	Pos         string
	Err         string
}

func otherFiles(p *jsonPackage) [][]string {
	return [][]string{p.CFiles, p.CXXFiles, p.MFiles, p.HFiles, p.FFiles, p.SFiles, p.SwigFiles, p.SwigCXXFiles, p.SysoFiles}
}

// createDriverResponse uses the "go list" command to expand the pattern
// words and return a response for the specified packages.
func (state *golistState) createDriverResponse(words ...string) (*driverResponse, error) {
	// go list uses the following identifiers in ImportPath and Imports:
	//
	// 	"p"			-- importable package or main (command)
	// 	"q.test"		-- q's test executable
	// 	"p [q.test]"		-- variant of p as built for q's test executable
	// 	"q_test [q.test]"	-- q's external test package
	//
	// The packages p that are built differently for a test q.test
	// are q itself, plus any helpers used by the external test q_test,
	// typically including "testing" and all its dependencies.

	// Run "go list" for complete
	// information on the specified packages.
	goVersion, err := state.getGoVersion()
	if err != nil {
		return nil, err
	}
	buf, err := state.invokeGo("list", golistargs(state.cfg, words, goVersion)...)
	if err != nil {
		return nil, err
	}

	seen := make(map[string]*jsonPackage)
	pkgs := make(map[string]*Package)
	additionalErrors := make(map[string][]Error)
	// Decode the JSON and convert it to Package form.
	response := &driverResponse{
		GoVersion: goVersion,
	}
	for dec := json.NewDecoder(buf); dec.More(); {
		p := new(jsonPackage)
		if err := dec.Decode(p); err != nil {
			return nil, fmt.Errorf("JSON decoding failed: %v", err)
		}

		if p.ImportPath == "" {
			// The documentation for go list says that “[e]rroneous packages will have
			// a non-empty ImportPath”. If for some reason it comes back empty, we
			// prefer to error out rather than silently discarding data or handing
			// back a package without any way to refer to it.
			if p.Error != nil {
				return nil, Error{
					Pos: p.Error.Pos,
					Msg: p.Error.Err,
				}
			}
			return nil, fmt.Errorf("package missing import path: %+v", p)
		}

		// Work around https://golang.org/issue/33157:
		// go list -e, when given an absolute path, will find the package contained at
		// that directory. But when no package exists there, it will return a fake package
		// with an error and the ImportPath set to the absolute path provided to go list.
		// Try to convert that absolute path to what its package path would be if it's
		// contained in a known module or GOPATH entry. This will allow the package to be
		// properly "reclaimed" when overlays are processed.
		if filepath.IsAbs(p.ImportPath) && p.Error != nil {
			pkgPath, ok, err := state.getPkgPath(p.ImportPath)
			if err != nil {
				return nil, err
			}
			if ok {
				p.ImportPath = pkgPath
			}
		}

		if old, found := seen[p.ImportPath]; found {
			// If one version of the package has an error, and the other doesn't, assume
			// that this is a case where go list is reporting a fake dependency variant
			// of the imported package: When a package tries to invalidly import another
			// package, go list emits a variant of the imported package (with the same
			// import path, but with an error on it, and the package will have a
			// DepError set on it). An example of when this can happen is for imports of
			// main packages: main packages can not be imported, but they may be
			// separately matched and listed by another pattern.
			// See golang.org/issue/36188 for more details.

			// The plan is that eventually, hopefully in Go 1.15, the error will be
			// reported on the importing package rather than the duplicate "fake"
			// version of the imported package. Once all supported versions of Go
			// have the new behavior this logic can be deleted.
			// TODO(matloob): delete the workaround logic once all supported versions of
			// Go return the errors on the proper package.

			// There should be exactly one version of a package that doesn't have an
			// error.
			if old.Error == nil && p.Error == nil {
				if !reflect.DeepEqual(p, old) {
					return nil, fmt.Errorf("internal error: go list gives conflicting information for package %v", p.ImportPath)
				}
				continue
			}

			// Determine if this package's error needs to be bubbled up.
			// This is a hack, and we expect for go list to eventually set the error
			// on the package.
			if old.Error != nil {
				var errkind string
				if strings.Contains(old.Error.Err, "not an importable package") {
					errkind = "not an importable package"
				} else if strings.Contains(old.Error.Err, "use of internal package") && strings.Contains(old.Error.Err, "not allowed") {
					errkind = "use of internal package not allowed"
				}
				if errkind != "" {
					if len(old.Error.ImportStack) < 1 {
						return nil, fmt.Errorf(`internal error: go list gave a %q error with empty import stack`, errkind)
					}
					importingPkg := old.Error.ImportStack[len(old.Error.ImportStack)-1]
					if importingPkg == old.ImportPath {
						// Using an older version of Go which put this package itself on top of import
						// stack, instead of the importer. Look for importer in second from top
						// position.
						if len(old.Error.ImportStack) < 2 {
							return nil, fmt.Errorf(`internal error: go list gave a %q error with an import stack without importing package`, errkind)
						}
						importingPkg = old.Error.ImportStack[len(old.Error.ImportStack)-2]
					}
					additionalErrors[importingPkg] = append(additionalErrors[importingPkg], Error{
						Pos:  old.Error.Pos,
						Msg:  old.Error.Err,
						Kind: ListError,
					})
				}
			}

			// Make sure that if there's a version of the package without an error,
			// that's the one reported to the user.
			if old.Error == nil {
				continue
			}

			// This package will replace the old one at the end of the loop.
		}
		seen[p.ImportPath] = p

		pkg := &Package{
			Name:            p.Name,
			ID:              p.ImportPath,
			GoFiles:         absJoin(p.Dir, p.GoFiles, p.CgoFiles),
			CompiledGoFiles: absJoin(p.Dir, p.CompiledGoFiles),
			OtherFiles:      absJoin(p.Dir, otherFiles(p)...),
			EmbedFiles:      absJoin(p.Dir, p.EmbedFiles),
			EmbedPatterns:   absJoin(p.Dir, p.EmbedPatterns),
			IgnoredFiles:    absJoin(p.Dir, p.IgnoredGoFiles, p.IgnoredOtherFiles),
			forTest:         p.ForTest,
			depsErrors:      p.DepsErrors,
			Module:          p.Module,
		}

		if (state.cfg.Mode&typecheckCgo) != 0 && len(p.CgoFiles) != 0 {
			if len(p.CompiledGoFiles) > len(p.GoFiles) {
				// We need the cgo definitions, which are in the first
				// CompiledGoFile after the non-cgo ones. This is a hack but there
				// isn't currently a better way to find it. We also need the pure
				// Go files and unprocessed cgo files, all of which are already
				// in pkg.GoFiles.
				cgoTypes := p.CompiledGoFiles[len(p.GoFiles)]
				pkg.CompiledGoFiles = append([]string{cgoTypes}, pkg.GoFiles...)
			} else {
				// golang/go#38990: go list silently fails to do cgo processing
				pkg.CompiledGoFiles = nil
				pkg.Errors = append(pkg.Errors, Error{
					Msg:  "go list failed to return CompiledGoFiles. This may indicate failure to perform cgo processing; try building at the command line. See https://golang.org/issue/38990.",
					Kind: ListError,
				})
			}
		}

		// Work around https://golang.org/issue/28749:
		// cmd/go puts assembly, C, and C++ files in CompiledGoFiles.
		// Remove files from CompiledGoFiles that are non-go files
		// (or are not files that look like they are from the cache).
		if len(pkg.CompiledGoFiles) > 0 {
			out := pkg.CompiledGoFiles[:0]
			for _, f := range pkg.CompiledGoFiles {
				if ext := filepath.Ext(f); ext != ".go" && ext != "" { // ext == "" means the file is from the cache, so probably cgo-processed file
					continue
				}
				out = append(out, f)
			}
			pkg.CompiledGoFiles = out
		}

		// Extract the PkgPath from the package's ID.
		if i := strings.IndexByte(pkg.ID, ' '); i >= 0 {
			pkg.PkgPath = pkg.ID[:i]
		} else {
			pkg.PkgPath = pkg.ID
		}

		if pkg.PkgPath == "unsafe" {
			pkg.GoFiles = nil // ignore fake unsafe.go file
		}

		// Assume go list emits only absolute paths for Dir.
		if p.Dir != "" && !filepath.IsAbs(p.Dir) {
			log.Fatalf("internal error: go list returned non-absolute Package.Dir: %s", p.Dir)
		}

		if p.Export != "" && !filepath.IsAbs(p.Export) {
			pkg.ExportFile = filepath.Join(p.Dir, p.Export)
		} else {
			pkg.ExportFile = p.Export
		}

		// imports
		//
		// Imports contains the IDs of all imported packages.
		// ImportsMap records (path, ID) only where they differ.
		ids := make(map[string]bool)
		for _, id := range p.Imports {
			ids[id] = true
		}
		pkg.Imports = make(map[string]*Package)
		for path, id := range p.ImportMap {
			pkg.Imports[path] = &Package{ID: id} // non-identity import
			delete(ids, id)
		}
		for id := range ids {
			if id == "C" {
				continue
			}

			pkg.Imports[id] = &Package{ID: id} // identity import
		}
		if !p.DepOnly {
			response.Roots = append(response.Roots, pkg.ID)
		}

		// Work around for pre-go.1.11 versions of go list.
		// TODO(matloob): they should be handled by the fallback.
		// Can we delete this?
		if len(pkg.CompiledGoFiles) == 0 {
			pkg.CompiledGoFiles = pkg.GoFiles
		}

		// Temporary work-around for golang/go#39986. Parse filenames out of
		// error messages. This happens if there are unrecoverable syntax
		// errors in the source, so we can't match on a specific error message.
		if err := p.Error; err != nil && state.shouldAddFilenameFromError(p) {
			addFilenameFromPos := func(pos string) bool {
				split := strings.Split(pos, ":")
				if len(split) < 1 {
					return false
				}
				filename := strings.TrimSpace(split[0])
				if filename == "" {
					return false
				}
				if !filepath.IsAbs(filename) {
					filename = filepath.Join(state.cfg.Dir, filename)
				}
				info, _ := os.Stat(filename)
				if info == nil {
					return false
				}
				pkg.CompiledGoFiles = append(pkg.CompiledGoFiles, filename)
				pkg.GoFiles = append(pkg.GoFiles, filename)
				return true
			}
			found := addFilenameFromPos(err.Pos)
			// In some cases, go list only reports the error position in the
			// error text, not the error position. One such case is when the
			// file's package name is a keyword (see golang.org/issue/39763).
			if !found {
				addFilenameFromPos(err.Err)
			}
		}

		if p.Error != nil {
			msg := strings.TrimSpace(p.Error.Err) // Trim to work around golang.org/issue/32363.
			// Address golang.org/issue/35964 by appending import stack to error message.
			if msg == "import cycle not allowed" && len(p.Error.ImportStack) != 0 {
				msg += fmt.Sprintf(": import stack: %v", p.Error.ImportStack)
			}
			pkg.Errors = append(pkg.Errors, Error{
				Pos:  p.Error.Pos,
				Msg:  msg,
				Kind: ListError,
			})
		}

		pkgs[pkg.ID] = pkg
	}

	for id, errs := range additionalErrors {
		if p, ok := pkgs[id]; ok {
			p.Errors = append(p.Errors, errs...)
		}
	}
	for _, pkg := range pkgs {
		response.Packages = append(response.Packages, pkg)
	}
	sort.Slice(response.Packages, func(i, j int) bool { return response.Packages[i].ID < response.Packages[j].ID })

	return response, nil
}

func (state *golistState) shouldAddFilenameFromError(p *jsonPackage) bool {
	if len(p.GoFiles) > 0 || len(p.CompiledGoFiles) > 0 {
		return false
	}

	goV, err := state.getGoVersion()
	if err != nil {
		return false
	}

	// On Go 1.14 and earlier, only add filenames from errors if the import stack is empty.
	// The import stack behaves differently for these versions than newer Go versions.
	if goV < 15 {
		return len(p.Error.ImportStack) == 0
	}

	// On Go 1.15 and later, only parse filenames out of error if there's no import stack,
	// or the current package is at the top of the import stack. This is not guaranteed
	// to work perfectly, but should avoid some cases where files in errors don't belong to this
	// package.
	return len(p.Error.ImportStack) == 0 || p.Error.ImportStack[len(p.Error.ImportStack)-1] == p.ImportPath
}

// getGoVersion returns the effective minor version of the go command.
func (state *golistState) getGoVersion() (int, error) {
	state.goVersionOnce.Do(func() {
		state.goVersion, state.goVersionError = gocommand.GoVersion(state.ctx, state.cfgInvocation(), state.cfg.gocmdRunner)
	})
	return state.goVersion, state.goVersionError
}

// getPkgPath finds the package path of a directory if it's relative to a root
// directory.
func (state *golistState) getPkgPath(dir string) (string, bool, error) {
	absDir, err := filepath.Abs(dir)
	if err != nil {
		return "", false, err
	}
	roots, err := state.determineRootDirs()
	if err != nil {
		return "", false, err
	}

	for rdir, rpath := range roots {
		// Make sure that the directory is in the module,
		// to avoid creating a path relative to another module.
		if !strings.HasPrefix(absDir, rdir) {
			continue
		}
		// TODO(matloob): This doesn't properly handle symlinks.
		r, err := filepath.Rel(rdir, dir)
		if err != nil {
			continue
		}
		if rpath != "" {
			// We choose only one root even though the directory even it can belong in multiple modules
			// or GOPATH entries. This is okay because we only need to work with absolute dirs when a
			// file is missing from disk, for instance when gopls calls go/packages in an overlay.
			// Once the file is saved, gopls, or the next invocation of the tool will get the correct
			// result straight from golist.
			// TODO(matloob): Implement module tiebreaking?
			return path.Join(rpath, filepath.ToSlash(r)), true, nil
		}
		return filepath.ToSlash(r), true, nil
	}
	return "", false, nil
}

// absJoin absolutizes and flattens the lists of files.
func absJoin(dir string, fileses ...[]string) (res []string) {
	for _, files := range fileses {
		for _, file := range files {
			if !filepath.IsAbs(file) {
				file = filepath.Join(dir, file)
			}
			res = append(res, file)
		}
	}
	return res
}

func jsonFlag(cfg *Config, goVersion int) string {
	if goVersion < 19 {
		return "-json"
	}
	var fields []string
	added := make(map[string]bool)
	addFields := func(fs ...string) {
		for _, f := range fs {
			if !added[f] {
				added[f] = true
				fields = append(fields, f)
			}
		}
	}
	addFields("Name", "ImportPath", "Error") // These fields are always needed
	if cfg.Mode&NeedFiles != 0 || cfg.Mode&NeedTypes != 0 {
		addFields("Dir", "GoFiles", "IgnoredGoFiles", "IgnoredOtherFiles", "CFiles",
			"CgoFiles", "CXXFiles", "MFiles", "HFiles", "FFiles", "SFiles",
			"SwigFiles", "SwigCXXFiles", "SysoFiles")
		if cfg.Tests {
			addFields("TestGoFiles", "XTestGoFiles")
		}
	}
	if cfg.Mode&NeedTypes != 0 {
		// CompiledGoFiles seems to be required for the test case TestCgoNoSyntax,
		// even when -compiled isn't passed in.
		// TODO(#52435): Should we make the test ask for -compiled, or automatically
		// request CompiledGoFiles in certain circumstances?
		addFields("Dir", "CompiledGoFiles")
	}
	if cfg.Mode&NeedCompiledGoFiles != 0 {
		addFields("Dir", "CompiledGoFiles", "Export")
	}
	if cfg.Mode&NeedImports != 0 {
		// When imports are requested, DepOnly is used to distinguish between packages
		// explicitly requested and transitive imports of those packages.
		addFields("DepOnly", "Imports", "ImportMap")
		if cfg.Tests {
			addFields("TestImports", "XTestImports")
		}
	}
	if cfg.Mode&NeedDeps != 0 {
		addFields("DepOnly")
	}
	if usesExportData(cfg) {
		// Request Dir in the unlikely case Export is not absolute.
		addFields("Dir", "Export")
	}
	if cfg.Mode&needInternalForTest != 0 {
		addFields("ForTest")
	}
	if cfg.Mode&needInternalDepsErrors != 0 {
		addFields("DepsErrors")
	}
	if cfg.Mode&NeedModule != 0 {
		addFields("Module")
	}
	if cfg.Mode&NeedEmbedFiles != 0 {
		addFields("EmbedFiles")
	}
	if cfg.Mode&NeedEmbedPatterns != 0 {
		addFields("EmbedPatterns")
	}
	return "-json=" + strings.Join(fields, ",")
}

func golistargs(cfg *Config, words []string, goVersion int) []string {
	const findFlags = NeedImports | NeedTypes | NeedSyntax | NeedTypesInfo
	fullargs := []string{
		"-e", jsonFlag(cfg, goVersion),
		fmt.Sprintf("-compiled=%t", cfg.Mode&(NeedCompiledGoFiles|NeedSyntax|NeedTypes|NeedTypesInfo|NeedTypesSizes) != 0),
		fmt.Sprintf("-test=%t", cfg.Tests),
		fmt.Sprintf("-export=%t", usesExportData(cfg)),
		fmt.Sprintf("-deps=%t", cfg.Mode&NeedImports != 0),
		// go list doesn't let you pass -test and -find together,
		// probably because you'd just get the TestMain.
		fmt.Sprintf("-find=%t", !cfg.Tests && cfg.Mode&findFlags == 0 && !usesExportData(cfg)),
	}
	fullargs = append(fullargs, cfg.BuildFlags...)
	fullargs = append(fullargs, "--")
	fullargs = append(fullargs, words...)
	return fullargs
}

// cfgInvocation returns an Invocation that reflects cfg's settings.
func (state *golistState) cfgInvocation() gocommand.Invocation {
	cfg := state.cfg
	return gocommand.Invocation{
		BuildFlags: cfg.BuildFlags,
		ModFile:    cfg.modFile,
		ModFlag:    cfg.modFlag,
		CleanEnv:   cfg.Env != nil,
		Env:        cfg.Env,
		Logf:       cfg.Logf,
		WorkingDir: cfg.Dir,
	}
}

// invokeGo returns the stdout of a go command invocation.
func (state *golistState) invokeGo(verb string, args ...string) (*bytes.Buffer, error) {
	cfg := state.cfg

	inv := state.cfgInvocation()

	// For Go versions 1.16 and above, `go list` accepts overlays directly via
	// the -overlay flag. Set it, if it's available.
	//
	// The check for "list" is not necessarily required, but we should avoid
	// getting the go version if possible.
	if verb == "list" {
		goVersion, err := state.getGoVersion()
		if err != nil {
			return nil, err
		}
		if goVersion >= 16 {
			filename, cleanup, err := state.writeOverlays()
			if err != nil {
				return nil, err
			}
			defer cleanup()
			inv.Overlay = filename
		}
	}
	inv.Verb = verb
	inv.Args = args
	gocmdRunner := cfg.gocmdRunner
	if gocmdRunner == nil {
		gocmdRunner = &gocommand.Runner{}
	}
	stdout, stderr, friendlyErr, err := gocmdRunner.RunRaw(cfg.Context, inv)
	if err != nil {
		// Check for 'go' executable not being found.
		if ee, ok := err.(*exec.Error); ok && ee.Err == exec.ErrNotFound {
			return nil, fmt.Errorf("'go list' driver requires 'go', but %s", exec.ErrNotFound)
		}

		exitErr, ok := err.(*exec.ExitError)
		if !ok {
			// Catastrophic error:
			// - context cancellation
			return nil, fmt.Errorf("couldn't run 'go': %w", err)
		}

		// Old go version?
		if strings.Contains(stderr.String(), "flag provided but not defined") {
			return nil, goTooOldError{fmt.Errorf("unsupported version of go: %s: %s", exitErr, stderr)}
		}

		// Related to #24854
		if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "unexpected directory layout") {
			return nil, friendlyErr
		}

		// Is there an error running the C compiler in cgo? This will be reported in the "Error" field
		// and should be suppressed by go list -e.
		//
		// This condition is not perfect yet because the error message can include other error messages than runtime/cgo.
		isPkgPathRune := func(r rune) bool {
			// From https://golang.org/ref/spec#Import_declarations:
			//    Implementation restriction: A compiler may restrict ImportPaths to non-empty strings
			//    using only characters belonging to Unicode's L, M, N, P, and S general categories
			//    (the Graphic characters without spaces) and may also exclude the
			//    characters !"#$%&'()*,:;<=>?[\]^`{|} and the Unicode replacement character U+FFFD.
			return unicode.IsOneOf([]*unicode.RangeTable{unicode.L, unicode.M, unicode.N, unicode.P, unicode.S}, r) &&
				!strings.ContainsRune("!\"#$%&'()*,:;<=>?[\\]^`{|}\uFFFD", r)
		}
		// golang/go#36770: Handle case where cmd/go prints module download messages before the error.
		msg := stderr.String()
		for strings.HasPrefix(msg, "go: downloading") {
			msg = msg[strings.IndexRune(msg, '\n')+1:]
		}
		if len(stderr.String()) > 0 && strings.HasPrefix(stderr.String(), "# ") {
			msg := msg[len("# "):]
			if strings.HasPrefix(strings.TrimLeftFunc(msg, isPkgPathRune), "\n") {
				return stdout, nil
			}
			// Treat pkg-config errors as a special case (golang.org/issue/36770).
			if strings.HasPrefix(msg, "pkg-config") {
				return stdout, nil
			}
		}

		// This error only appears in stderr. See golang.org/cl/166398 for a fix in go list to show
		// the error in the Err section of stdout in case -e option is provided.
		// This fix is provided for backwards compatibility.
		if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "named files must be .go files") {
			output := fmt.Sprintf(`{"ImportPath": "command-line-arguments","Incomplete": true,"Error": {"Pos": "","Err": %q}}`,
				strings.Trim(stderr.String(), "\n"))
			return bytes.NewBufferString(output), nil
		}

		// Similar to the previous error, but currently lacks a fix in Go.
		if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "named files must all be in one directory") {
			output := fmt.Sprintf(`{"ImportPath": "command-line-arguments","Incomplete": true,"Error": {"Pos": "","Err": %q}}`,
				strings.Trim(stderr.String(), "\n"))
			return bytes.NewBufferString(output), nil
		}

		// Backwards compatibility for Go 1.11 because 1.12 and 1.13 put the directory in the ImportPath.
		// If the package doesn't exist, put the absolute path of the directory into the error message,
		// as Go 1.13 list does.
		const noSuchDirectory = "no such directory"
		if len(stderr.String()) > 0 && strings.Contains(stderr.String(), noSuchDirectory) {
			errstr := stderr.String()
			abspath := strings.TrimSpace(errstr[strings.Index(errstr, noSuchDirectory)+len(noSuchDirectory):])
			output := fmt.Sprintf(`{"ImportPath": %q,"Incomplete": true,"Error": {"Pos": "","Err": %q}}`,
				abspath, strings.Trim(stderr.String(), "\n"))
			return bytes.NewBufferString(output), nil
		}

		// Workaround for #29280: go list -e has incorrect behavior when an ad-hoc package doesn't exist.
		// Note that the error message we look for in this case is different that the one looked for above.
		if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "no such file or directory") {
			output := fmt.Sprintf(`{"ImportPath": "command-line-arguments","Incomplete": true,"Error": {"Pos": "","Err": %q}}`,
				strings.Trim(stderr.String(), "\n"))
			return bytes.NewBufferString(output), nil
		}

		// Workaround for #34273. go list -e with GO111MODULE=on has incorrect behavior when listing a
		// directory outside any module.
		if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "outside available modules") {
			output := fmt.Sprintf(`{"ImportPath": %q,"Incomplete": true,"Error": {"Pos": "","Err": %q}}`,
				// TODO(matloob): command-line-arguments isn't correct here.
				"command-line-arguments", strings.Trim(stderr.String(), "\n"))
			return bytes.NewBufferString(output), nil
		}

		// Another variation of the previous error
		if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "outside module root") {
			output := fmt.Sprintf(`{"ImportPath": %q,"Incomplete": true,"Error": {"Pos": "","Err": %q}}`,
				// TODO(matloob): command-line-arguments isn't correct here.
				"command-line-arguments", strings.Trim(stderr.String(), "\n"))
			return bytes.NewBufferString(output), nil
		}

		// Workaround for an instance of golang.org/issue/26755: go list -e  will return a non-zero exit
		// status if there's a dependency on a package that doesn't exist. But it should return
		// a zero exit status and set an error on that package.
		if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "no Go files in") {
			// Don't clobber stdout if `go list` actually returned something.
			if len(stdout.String()) > 0 {
				return stdout, nil
			}
			// try to extract package name from string
			stderrStr := stderr.String()
			var importPath string
			colon := strings.Index(stderrStr, ":")
			if colon > 0 && strings.HasPrefix(stderrStr, "go build ") {
				importPath = stderrStr[len("go build "):colon]
			}
			output := fmt.Sprintf(`{"ImportPath": %q,"Incomplete": true,"Error": {"Pos": "","Err": %q}}`,
				importPath, strings.Trim(stderrStr, "\n"))
			return bytes.NewBufferString(output), nil
		}

		// Export mode entails a build.
		// If that build fails, errors appear on stderr
		// (despite the -e flag) and the Export field is blank.
		// Do not fail in that case.
		// The same is true if an ad-hoc package given to go list doesn't exist.
		// TODO(matloob): Remove these once we can depend on go list to exit with a zero status with -e even when
		// packages don't exist or a build fails.
		if !usesExportData(cfg) && !containsGoFile(args) {
			return nil, friendlyErr
		}
	}
	return stdout, nil
}

// OverlayJSON is the format overlay files are expected to be in.
// The Replace map maps from overlaid paths to replacement paths:
// the Go command will forward all reads trying to open
// each overlaid path to its replacement path, or consider the overlaid
// path not to exist if the replacement path is empty.
//
// From golang/go#39958.
type OverlayJSON struct {
	Replace map[string]string `json:"replace,omitempty"`
}

// writeOverlays writes out files for go list's -overlay flag, as described
// above.
func (state *golistState) writeOverlays() (filename string, cleanup func(), err error) {
	// Do nothing if there are no overlays in the config.
	if len(state.cfg.Overlay) == 0 {
		return "", func() {}, nil
	}
	dir, err := ioutil.TempDir("", "gopackages-*")
	if err != nil {
		return "", nil, err
	}
	// The caller must clean up this directory, unless this function returns an
	// error.
	cleanup = func() {
		os.RemoveAll(dir)
	}
	defer func() {
		if err != nil {
			cleanup()
		}
	}()
	overlays := map[string]string{}
	for k, v := range state.cfg.Overlay {
		// Create a unique filename for the overlaid files, to avoid
		// creating nested directories.
		noSeparator := strings.Join(strings.Split(filepath.ToSlash(k), "/"), "")
		f, err := ioutil.TempFile(dir, fmt.Sprintf("*-%s", noSeparator))
		if err != nil {
			return "", func() {}, err
		}
		if _, err := f.Write(v); err != nil {
			return "", func() {}, err
		}
		if err := f.Close(); err != nil {
			return "", func() {}, err
		}
		overlays[k] = f.Name()
	}
	b, err := json.Marshal(OverlayJSON{Replace: overlays})
	if err != nil {
		return "", func() {}, err
	}
	// Write out the overlay file that contains the filepath mappings.
	filename = filepath.Join(dir, "overlay.json")
	if err := ioutil.WriteFile(filename, b, 0665); err != nil {
		return "", func() {}, err
	}
	return filename, cleanup, nil
}

func containsGoFile(s []string) bool {
	for _, f := range s {
		if strings.HasSuffix(f, ".go") {
			return true
		}
	}
	return false
}

func cmdDebugStr(cmd *exec.Cmd) string {
	env := make(map[string]string)
	for _, kv := range cmd.Env {
		split := strings.SplitN(kv, "=", 2)
		k, v := split[0], split[1]
		env[k] = v
	}

	var args []string
	for _, arg := range cmd.Args {
		quoted := strconv.Quote(arg)
		if quoted[1:len(quoted)-1] != arg || strings.Contains(arg, " ") {
			args = append(args, quoted)
		} else {
			args = append(args, arg)
		}
	}
	return fmt.Sprintf("GOROOT=%v GOPATH=%v GO111MODULE=%v GOPROXY=%v PWD=%v %v", env["GOROOT"], env["GOPATH"], env["GO111MODULE"], env["GOPROXY"], env["PWD"], strings.Join(args, " "))
}
 07070100000F5D000081A4000000000000000000000001645E367C000049B7000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/go/packages/golist_overlay.go   // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package packages

import (
	"encoding/json"
	"fmt"
	"go/parser"
	"go/token"
	"os"
	"path/filepath"
	"regexp"
	"sort"
	"strconv"
	"strings"

	"golang.org/x/tools/internal/gocommand"
)

// processGolistOverlay provides rudimentary support for adding
// files that don't exist on disk to an overlay. The results can be
// sometimes incorrect.
// TODO(matloob): Handle unsupported cases, including the following:
// - determining the correct package to add given a new import path
func (state *golistState) processGolistOverlay(response *responseDeduper) (modifiedPkgs, needPkgs []string, err error) {
	havePkgs := make(map[string]string) // importPath -> non-test package ID
	needPkgsSet := make(map[string]bool)
	modifiedPkgsSet := make(map[string]bool)

	pkgOfDir := make(map[string][]*Package)
	for _, pkg := range response.dr.Packages {
		// This is an approximation of import path to id. This can be
		// wrong for tests, vendored packages, and a number of other cases.
		havePkgs[pkg.PkgPath] = pkg.ID
		dir, err := commonDir(pkg.GoFiles)
		if err != nil {
			return nil, nil, err
		}
		if dir != "" {
			pkgOfDir[dir] = append(pkgOfDir[dir], pkg)
		}
	}

	// If no new imports are added, it is safe to avoid loading any needPkgs.
	// Otherwise, it's hard to tell which package is actually being loaded
	// (due to vendoring) and whether any modified package will show up
	// in the transitive set of dependencies (because new imports are added,
	// potentially modifying the transitive set of dependencies).
	var overlayAddsImports bool

	// If both a package and its test package are created by the overlay, we
	// need the real package first. Process all non-test files before test
	// files, and make the whole process deterministic while we're at it.
	var overlayFiles []string
	for opath := range state.cfg.Overlay {
		overlayFiles = append(overlayFiles, opath)
	}
	sort.Slice(overlayFiles, func(i, j int) bool {
		iTest := strings.HasSuffix(overlayFiles[i], "_test.go")
		jTest := strings.HasSuffix(overlayFiles[j], "_test.go")
		if iTest != jTest {
			return !iTest // non-tests are before tests.
		}
		return overlayFiles[i] < overlayFiles[j]
	})
	for _, opath := range overlayFiles {
		contents := state.cfg.Overlay[opath]
		base := filepath.Base(opath)
		dir := filepath.Dir(opath)
		var pkg *Package           // if opath belongs to both a package and its test variant, this will be the test variant
		var testVariantOf *Package // if opath is a test file, this is the package it is testing
		var fileExists bool
		isTestFile := strings.HasSuffix(opath, "_test.go")
		pkgName, ok := extractPackageName(opath, contents)
		if !ok {
			// Don't bother adding a file that doesn't even have a parsable package statement
			// to the overlay.
			continue
		}
		// If all the overlay files belong to a different package, change the
		// package name to that package.
		maybeFixPackageName(pkgName, isTestFile, pkgOfDir[dir])
	nextPackage:
		for _, p := range response.dr.Packages {
			if pkgName != p.Name && p.ID != "command-line-arguments" {
				continue
			}
			for _, f := range p.GoFiles {
				if !sameFile(filepath.Dir(f), dir) {
					continue
				}
				// Make sure to capture information on the package's test variant, if needed.
				if isTestFile && !hasTestFiles(p) {
					// TODO(matloob): Are there packages other than the 'production' variant
					// of a package that this can match? This shouldn't match the test main package
					// because the file is generated in another directory.
					testVariantOf = p
					continue nextPackage
				} else if !isTestFile && hasTestFiles(p) {
					// We're examining a test variant, but the overlaid file is
					// a non-test file. Because the overlay implementation
					// (currently) only adds a file to one package, skip this
					// package, so that we can add the file to the production
					// variant of the package. (https://golang.org/issue/36857
					// tracks handling overlays on both the production and test
					// variant of a package).
					continue nextPackage
				}
				if pkg != nil && p != pkg && pkg.PkgPath == p.PkgPath {
					// We have already seen the production version of the
					// for which p is a test variant.
					if hasTestFiles(p) {
						testVariantOf = pkg
					}
				}
				pkg = p
				if filepath.Base(f) == base {
					fileExists = true
				}
			}
		}
		// The overlay could have included an entirely new package or an
		// ad-hoc package. An ad-hoc package is one that we have manually
		// constructed from inadequate `go list` results for a file= query.
		// It will have the ID command-line-arguments.
		if pkg == nil || pkg.ID == "command-line-arguments" {
			// Try to find the module or gopath dir the file is contained in.
			// Then for modules, add the module opath to the beginning.
			pkgPath, ok, err := state.getPkgPath(dir)
			if err != nil {
				return nil, nil, err
			}
			if !ok {
				break
			}
			var forTest string // only set for x tests
			isXTest := strings.HasSuffix(pkgName, "_test")
			if isXTest {
				forTest = pkgPath
				pkgPath += "_test"
			}
			id := pkgPath
			if isTestFile {
				if isXTest {
					id = fmt.Sprintf("%s [%s.test]", pkgPath, forTest)
				} else {
					id = fmt.Sprintf("%s [%s.test]", pkgPath, pkgPath)
				}
			}
			if pkg != nil {
				// TODO(rstambler): We should change the package's path and ID
				// here. The only issue is that this messes with the roots.
			} else {
				// Try to reclaim a package with the same ID, if it exists in the response.
				for _, p := range response.dr.Packages {
					if reclaimPackage(p, id, opath, contents) {
						pkg = p
						break
					}
				}
				// Otherwise, create a new package.
				if pkg == nil {
					pkg = &Package{
						PkgPath: pkgPath,
						ID:      id,
						Name:    pkgName,
						Imports: make(map[string]*Package),
					}
					response.addPackage(pkg)
					havePkgs[pkg.PkgPath] = id
					// Add the production package's sources for a test variant.
					if isTestFile && !isXTest && testVariantOf != nil {
						pkg.GoFiles = append(pkg.GoFiles, testVariantOf.GoFiles...)
						pkg.CompiledGoFiles = append(pkg.CompiledGoFiles, testVariantOf.CompiledGoFiles...)
						// Add the package under test and its imports to the test variant.
						pkg.forTest = testVariantOf.PkgPath
						for k, v := range testVariantOf.Imports {
							pkg.Imports[k] = &Package{ID: v.ID}
						}
					}
					if isXTest {
						pkg.forTest = forTest
					}
				}
			}
		}
		if !fileExists {
			pkg.GoFiles = append(pkg.GoFiles, opath)
			// TODO(matloob): Adding the file to CompiledGoFiles can exhibit the wrong behavior
			// if the file will be ignored due to its build tags.
			pkg.CompiledGoFiles = append(pkg.CompiledGoFiles, opath)
			modifiedPkgsSet[pkg.ID] = true
		}
		imports, err := extractImports(opath, contents)
		if err != nil {
			// Let the parser or type checker report errors later.
			continue
		}
		for _, imp := range imports {
			// TODO(rstambler): If the package is an x test and the import has
			// a test variant, make sure to replace it.
			if _, found := pkg.Imports[imp]; found {
				continue
			}
			overlayAddsImports = true
			id, ok := havePkgs[imp]
			if !ok {
				var err error
				id, err = state.resolveImport(dir, imp)
				if err != nil {
					return nil, nil, err
				}
			}
			pkg.Imports[imp] = &Package{ID: id}
			// Add dependencies to the non-test variant version of this package as well.
			if testVariantOf != nil {
				testVariantOf.Imports[imp] = &Package{ID: id}
			}
		}
	}

	// toPkgPath guesses the package path given the id.
	toPkgPath := func(sourceDir, id string) (string, error) {
		if i := strings.IndexByte(id, ' '); i >= 0 {
			return state.resolveImport(sourceDir, id[:i])
		}
		return state.resolveImport(sourceDir, id)
	}

	// Now that new packages have been created, do another pass to determine
	// the new set of missing packages.
	for _, pkg := range response.dr.Packages {
		for _, imp := range pkg.Imports {
			if len(pkg.GoFiles) == 0 {
				return nil, nil, fmt.Errorf("cannot resolve imports for package %q with no Go files", pkg.PkgPath)
			}
			pkgPath, err := toPkgPath(filepath.Dir(pkg.GoFiles[0]), imp.ID)
			if err != nil {
				return nil, nil, err
			}
			if _, ok := havePkgs[pkgPath]; !ok {
				needPkgsSet[pkgPath] = true
			}
		}
	}

	if overlayAddsImports {
		needPkgs = make([]string, 0, len(needPkgsSet))
		for pkg := range needPkgsSet {
			needPkgs = append(needPkgs, pkg)
		}
	}
	modifiedPkgs = make([]string, 0, len(modifiedPkgsSet))
	for pkg := range modifiedPkgsSet {
		modifiedPkgs = append(modifiedPkgs, pkg)
	}
	return modifiedPkgs, needPkgs, err
}

// resolveImport finds the ID of a package given its import path.
// In particular, it will find the right vendored copy when in GOPATH mode.
func (state *golistState) resolveImport(sourceDir, importPath string) (string, error) {
	env, err := state.getEnv()
	if err != nil {
		return "", err
	}
	if env["GOMOD"] != "" {
		return importPath, nil
	}

	searchDir := sourceDir
	for {
		vendorDir := filepath.Join(searchDir, "vendor")
		exists, ok := state.vendorDirs[vendorDir]
		if !ok {
			info, err := os.Stat(vendorDir)
			exists = err == nil && info.IsDir()
			state.vendorDirs[vendorDir] = exists
		}

		if exists {
			vendoredPath := filepath.Join(vendorDir, importPath)
			if info, err := os.Stat(vendoredPath); err == nil && info.IsDir() {
				// We should probably check for .go files here, but shame on anyone who fools us.
				path, ok, err := state.getPkgPath(vendoredPath)
				if err != nil {
					return "", err
				}
				if ok {
					return path, nil
				}
			}
		}

		// We know we've hit the top of the filesystem when we Dir / and get /,
		// or C:\ and get C:\, etc.
		next := filepath.Dir(searchDir)
		if next == searchDir {
			break
		}
		searchDir = next
	}
	return importPath, nil
}

func hasTestFiles(p *Package) bool {
	for _, f := range p.GoFiles {
		if strings.HasSuffix(f, "_test.go") {
			return true
		}
	}
	return false
}

// determineRootDirs returns a mapping from absolute directories that could
// contain code to their corresponding import path prefixes.
func (state *golistState) determineRootDirs() (map[string]string, error) {
	env, err := state.getEnv()
	if err != nil {
		return nil, err
	}
	if env["GOMOD"] != "" {
		state.rootsOnce.Do(func() {
			state.rootDirs, state.rootDirsError = state.determineRootDirsModules()
		})
	} else {
		state.rootsOnce.Do(func() {
			state.rootDirs, state.rootDirsError = state.determineRootDirsGOPATH()
		})
	}
	return state.rootDirs, state.rootDirsError
}

func (state *golistState) determineRootDirsModules() (map[string]string, error) {
	// List all of the modules--the first will be the directory for the main
	// module. Any replaced modules will also need to be treated as roots.
	// Editing files in the module cache isn't a great idea, so we don't
	// plan to ever support that.
	out, err := state.invokeGo("list", "-m", "-json", "all")
	if err != nil {
		// 'go list all' will fail if we're outside of a module and
		// GO111MODULE=on. Try falling back without 'all'.
		var innerErr error
		out, innerErr = state.invokeGo("list", "-m", "-json")
		if innerErr != nil {
			return nil, err
		}
	}
	roots := map[string]string{}
	modules := map[string]string{}
	var i int
	for dec := json.NewDecoder(out); dec.More(); {
		mod := new(gocommand.ModuleJSON)
		if err := dec.Decode(mod); err != nil {
			return nil, err
		}
		if mod.Dir != "" && mod.Path != "" {
			// This is a valid module; add it to the map.
			absDir, err := filepath.Abs(mod.Dir)
			if err != nil {
				return nil, err
			}
			modules[absDir] = mod.Path
			// The first result is the main module.
			if i == 0 || mod.Replace != nil && mod.Replace.Path != "" {
				roots[absDir] = mod.Path
			}
		}
		i++
	}
	return roots, nil
}

func (state *golistState) determineRootDirsGOPATH() (map[string]string, error) {
	m := map[string]string{}
	for _, dir := range filepath.SplitList(state.mustGetEnv()["GOPATH"]) {
		absDir, err := filepath.Abs(dir)
		if err != nil {
			return nil, err
		}
		m[filepath.Join(absDir, "src")] = ""
	}
	return m, nil
}

func extractImports(filename string, contents []byte) ([]string, error) {
	f, err := parser.ParseFile(token.NewFileSet(), filename, contents, parser.ImportsOnly) // TODO(matloob): reuse fileset?
	if err != nil {
		return nil, err
	}
	var res []string
	for _, imp := range f.Imports {
		quotedPath := imp.Path.Value
		path, err := strconv.Unquote(quotedPath)
		if err != nil {
			return nil, err
		}
		res = append(res, path)
	}
	return res, nil
}

// reclaimPackage attempts to reuse a package that failed to load in an overlay.
//
// If the package has errors and has no Name, GoFiles, or Imports,
// then it's possible that it doesn't yet exist on disk.
func reclaimPackage(pkg *Package, id string, filename string, contents []byte) bool {
	// TODO(rstambler): Check the message of the actual error?
	// It differs between $GOPATH and module mode.
	if pkg.ID != id {
		return false
	}
	if len(pkg.Errors) != 1 {
		return false
	}
	if pkg.Name != "" || pkg.ExportFile != "" {
		return false
	}
	if len(pkg.GoFiles) > 0 || len(pkg.CompiledGoFiles) > 0 || len(pkg.OtherFiles) > 0 {
		return false
	}
	if len(pkg.Imports) > 0 {
		return false
	}
	pkgName, ok := extractPackageName(filename, contents)
	if !ok {
		return false
	}
	pkg.Name = pkgName
	pkg.Errors = nil
	return true
}

func extractPackageName(filename string, contents []byte) (string, bool) {
	// TODO(rstambler): Check the message of the actual error?
	// It differs between $GOPATH and module mode.
	f, err := parser.ParseFile(token.NewFileSet(), filename, contents, parser.PackageClauseOnly) // TODO(matloob): reuse fileset?
	if err != nil {
		return "", false
	}
	return f.Name.Name, true
}

// commonDir returns the directory that all files are in, "" if files is empty,
// or an error if they aren't in the same directory.
func commonDir(files []string) (string, error) {
	seen := make(map[string]bool)
	for _, f := range files {
		seen[filepath.Dir(f)] = true
	}
	if len(seen) > 1 {
		return "", fmt.Errorf("files (%v) are in more than one directory: %v", files, seen)
	}
	for k := range seen {
		// seen has only one element; return it.
		return k, nil
	}
	return "", nil // no files
}

// It is possible that the files in the disk directory dir have a different package
// name from newName, which is deduced from the overlays. If they all have a different
// package name, and they all have the same package name, then that name becomes
// the package name.
// It returns true if it changes the package name, false otherwise.
func maybeFixPackageName(newName string, isTestFile bool, pkgsOfDir []*Package) {
	names := make(map[string]int)
	for _, p := range pkgsOfDir {
		names[p.Name]++
	}
	if len(names) != 1 {
		// some files are in different packages
		return
	}
	var oldName string
	for k := range names {
		oldName = k
	}
	if newName == oldName {
		return
	}
	// We might have a case where all of the package names in the directory are
	// the same, but the overlay file is for an x test, which belongs to its
	// own package. If the x test does not yet exist on disk, we may not yet
	// have its package name on disk, but we should not rename the packages.
	//
	// We use a heuristic to determine if this file belongs to an x test:
	// The test file should have a package name whose package name has a _test
	// suffix or looks like "newName_test".
	maybeXTest := strings.HasPrefix(oldName+"_test", newName) || strings.HasSuffix(newName, "_test")
	if isTestFile && maybeXTest {
		return
	}
	for _, p := range pkgsOfDir {
		p.Name = newName
	}
}

// This function is copy-pasted from
// https://github.com/golang/go/blob/9706f510a5e2754595d716bd64be8375997311fb/src/cmd/go/internal/search/search.go#L360.
// It should be deleted when we remove support for overlays from go/packages.
//
// NOTE: This does not handle any ./... or ./ style queries, as this function
// doesn't know the working directory.
//
// matchPattern(pattern)(name) reports whether
// name matches pattern. Pattern is a limited glob
// pattern in which '...' means 'any string' and there
// is no other special syntax.
// Unfortunately, there are two special cases. Quoting "go help packages":
//
// First, /... at the end of the pattern can match an empty string,
// so that net/... matches both net and packages in its subdirectories, like net/http.
// Second, any slash-separated pattern element containing a wildcard never
// participates in a match of the "vendor" element in the path of a vendored
// package, so that ./... does not match packages in subdirectories of
// ./vendor or ./mycode/vendor, but ./vendor/... and ./mycode/vendor/... do.
// Note, however, that a directory named vendor that itself contains code
// is not a vendored package: cmd/vendor would be a command named vendor,
// and the pattern cmd/... matches it.
func matchPattern(pattern string) func(name string) bool {
	// Convert pattern to regular expression.
	// The strategy for the trailing /... is to nest it in an explicit ? expression.
	// The strategy for the vendor exclusion is to change the unmatchable
	// vendor strings to a disallowed code point (vendorChar) and to use
	// "(anything but that codepoint)*" as the implementation of the ... wildcard.
	// This is a bit complicated but the obvious alternative,
	// namely a hand-written search like in most shell glob matchers,
	// is too easy to make accidentally exponential.
	// Using package regexp guarantees linear-time matching.

	const vendorChar = "\x00"

	if strings.Contains(pattern, vendorChar) {
		return func(name string) bool { return false }
	}

	re := regexp.QuoteMeta(pattern)
	re = replaceVendor(re, vendorChar)
	switch {
	case strings.HasSuffix(re, `/`+vendorChar+`/\.\.\.`):
		re = strings.TrimSuffix(re, `/`+vendorChar+`/\.\.\.`) + `(/vendor|/` + vendorChar + `/\.\.\.)`
	case re == vendorChar+`/\.\.\.`:
		re = `(/vendor|/` + vendorChar + `/\.\.\.)`
	case strings.HasSuffix(re, `/\.\.\.`):
		re = strings.TrimSuffix(re, `/\.\.\.`) + `(/\.\.\.)?`
	}
	re = strings.ReplaceAll(re, `\.\.\.`, `[^`+vendorChar+`]*`)

	reg := regexp.MustCompile(`^` + re + `$`)

	return func(name string) bool {
		if strings.Contains(name, vendorChar) {
			return false
		}
		return reg.MatchString(replaceVendor(name, vendorChar))
	}
}

// replaceVendor returns the result of replacing
// non-trailing vendor path elements in x with repl.
func replaceVendor(x, repl string) string {
	if !strings.Contains(x, "vendor") {
		return x
	}
	elem := strings.Split(x, "/")
	for i := 0; i < len(elem)-1; i++ {
		if elem[i] == "vendor" {
			elem[i] = repl
		}
	}
	return strings.Join(elem, "/")
}
 07070100000F5E000081A4000000000000000000000001645E367C0000039E000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/go/packages/loadmode_string.go  // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package packages

import (
	"fmt"
	"strings"
)

var allModes = []LoadMode{
	NeedName,
	NeedFiles,
	NeedCompiledGoFiles,
	NeedImports,
	NeedDeps,
	NeedExportFile,
	NeedTypes,
	NeedSyntax,
	NeedTypesInfo,
	NeedTypesSizes,
}

var modeStrings = []string{
	"NeedName",
	"NeedFiles",
	"NeedCompiledGoFiles",
	"NeedImports",
	"NeedDeps",
	"NeedExportFile",
	"NeedTypes",
	"NeedSyntax",
	"NeedTypesInfo",
	"NeedTypesSizes",
}

func (mod LoadMode) String() string {
	m := mod
	if m == 0 {
		return "LoadMode(0)"
	}
	var out []string
	for i, x := range allModes {
		if x > m {
			break
		}
		if (m & x) != 0 {
			out = append(out, modeStrings[i])
			m = m ^ x
		}
	}
	if m != 0 {
		out = append(out, "Unknown")
	}
	return fmt.Sprintf("LoadMode(%s)", strings.Join(out, "|"))
}
  07070100000F5F000081A4000000000000000000000001645E367C0000A62B000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/tools/go/packages/packages.go // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package packages

// See doc.go for package documentation and implementation notes.

import (
	"context"
	"encoding/json"
	"fmt"
	"go/ast"
	"go/parser"
	"go/scanner"
	"go/token"
	"go/types"
	"io"
	"io/ioutil"
	"log"
	"os"
	"path/filepath"
	"runtime"
	"strings"
	"sync"
	"time"

	"golang.org/x/tools/go/gcexportdata"
	"golang.org/x/tools/internal/gocommand"
	"golang.org/x/tools/internal/packagesinternal"
	"golang.org/x/tools/internal/typeparams"
	"golang.org/x/tools/internal/typesinternal"
)

// A LoadMode controls the amount of detail to return when loading.
// The bits below can be combined to specify which fields should be
// filled in the result packages.
// The zero value is a special case, equivalent to combining
// the NeedName, NeedFiles, and NeedCompiledGoFiles bits.
// ID and Errors (if present) will always be filled.
// Load may return more information than requested.
type LoadMode int

const (
	// NeedName adds Name and PkgPath.
	NeedName LoadMode = 1 << iota

	// NeedFiles adds GoFiles and OtherFiles.
	NeedFiles

	// NeedCompiledGoFiles adds CompiledGoFiles.
	NeedCompiledGoFiles

	// NeedImports adds Imports. If NeedDeps is not set, the Imports field will contain
	// "placeholder" Packages with only the ID set.
	NeedImports

	// NeedDeps adds the fields requested by the LoadMode in the packages in Imports.
	NeedDeps

	// NeedExportFile adds ExportFile.
	NeedExportFile

	// NeedTypes adds Types, Fset, and IllTyped.
	NeedTypes

	// NeedSyntax adds Syntax.
	NeedSyntax

	// NeedTypesInfo adds TypesInfo.
	NeedTypesInfo

	// NeedTypesSizes adds TypesSizes.
	NeedTypesSizes

	// needInternalDepsErrors adds the internal deps errors field for use by gopls.
	needInternalDepsErrors

	// needInternalForTest adds the internal forTest field.
	// Tests must also be set on the context for this field to be populated.
	needInternalForTest

	// typecheckCgo enables full support for type checking cgo. Requires Go 1.15+.
	// Modifies CompiledGoFiles and Types, and has no effect on its own.
	typecheckCgo

	// NeedModule adds Module.
	NeedModule

	// NeedEmbedFiles adds EmbedFiles.
	NeedEmbedFiles

	// NeedEmbedPatterns adds EmbedPatterns.
	NeedEmbedPatterns
)

const (
	// Deprecated: LoadFiles exists for historical compatibility
	// and should not be used. Please directly specify the needed fields using the Need values.
	LoadFiles = NeedName | NeedFiles | NeedCompiledGoFiles

	// Deprecated: LoadImports exists for historical compatibility
	// and should not be used. Please directly specify the needed fields using the Need values.
	LoadImports = LoadFiles | NeedImports

	// Deprecated: LoadTypes exists for historical compatibility
	// and should not be used. Please directly specify the needed fields using the Need values.
	LoadTypes = LoadImports | NeedTypes | NeedTypesSizes

	// Deprecated: LoadSyntax exists for historical compatibility
	// and should not be used. Please directly specify the needed fields using the Need values.
	LoadSyntax = LoadTypes | NeedSyntax | NeedTypesInfo

	// Deprecated: LoadAllSyntax exists for historical compatibility
	// and should not be used. Please directly specify the needed fields using the Need values.
	LoadAllSyntax = LoadSyntax | NeedDeps

	// Deprecated: NeedExportsFile is a historical misspelling of NeedExportFile.
	NeedExportsFile = NeedExportFile
)

// A Config specifies details about how packages should be loaded.
// The zero value is a valid configuration.
// Calls to Load do not modify this struct.
type Config struct {
	// Mode controls the level of information returned for each package.
	Mode LoadMode

	// Context specifies the context for the load operation.
	// If the context is cancelled, the loader may stop early
	// and return an ErrCancelled error.
	// If Context is nil, the load cannot be cancelled.
	Context context.Context

	// Logf is the logger for the config.
	// If the user provides a logger, debug logging is enabled.
	// If the GOPACKAGESDEBUG environment variable is set to true,
	// but the logger is nil, default to log.Printf.
	Logf func(format string, args ...interface{})

	// Dir is the directory in which to run the build system's query tool
	// that provides information about the packages.
	// If Dir is empty, the tool is run in the current directory.
	Dir string

	// Env is the environment to use when invoking the build system's query tool.
	// If Env is nil, the current environment is used.
	// As in os/exec's Cmd, only the last value in the slice for
	// each environment key is used. To specify the setting of only
	// a few variables, append to the current environment, as in:
	//
	//	opt.Env = append(os.Environ(), "GOOS=plan9", "GOARCH=386")
	//
	Env []string

	// gocmdRunner guards go command calls from concurrency errors.
	gocmdRunner *gocommand.Runner

	// BuildFlags is a list of command-line flags to be passed through to
	// the build system's query tool.
	BuildFlags []string

	// modFile will be used for -modfile in go command invocations.
	modFile string

	// modFlag will be used for -modfile in go command invocations.
	modFlag string

	// Fset provides source position information for syntax trees and types.
	// If Fset is nil, Load will use a new fileset, but preserve Fset's value.
	Fset *token.FileSet

	// ParseFile is called to read and parse each file
	// when preparing a package's type-checked syntax tree.
	// It must be safe to call ParseFile simultaneously from multiple goroutines.
	// If ParseFile is nil, the loader will uses parser.ParseFile.
	//
	// ParseFile should parse the source from src and use filename only for
	// recording position information.
	//
	// An application may supply a custom implementation of ParseFile
	// to change the effective file contents or the behavior of the parser,
	// or to modify the syntax tree. For example, selectively eliminating
	// unwanted function bodies can significantly accelerate type checking.
	ParseFile func(fset *token.FileSet, filename string, src []byte) (*ast.File, error)

	// If Tests is set, the loader includes not just the packages
	// matching a particular pattern but also any related test packages,
	// including test-only variants of the package and the test executable.
	//
	// For example, when using the go command, loading "fmt" with Tests=true
	// returns four packages, with IDs "fmt" (the standard package),
	// "fmt [fmt.test]" (the package as compiled for the test),
	// "fmt_test" (the test functions from source files in package fmt_test),
	// and "fmt.test" (the test binary).
	//
	// In build systems with explicit names for tests,
	// setting Tests may have no effect.
	Tests bool

	// Overlay provides a mapping of absolute file paths to file contents.
	// If the file with the given path already exists, the parser will use the
	// alternative file contents provided by the map.
	//
	// Overlays provide incomplete support for when a given file doesn't
	// already exist on disk. See the package doc above for more details.
	Overlay map[string][]byte
}

// driver is the type for functions that query the build system for the
// packages named by the patterns.
type driver func(cfg *Config, patterns ...string) (*driverResponse, error)

// driverResponse contains the results for a driver query.
type driverResponse struct {
	// NotHandled is returned if the request can't be handled by the current
	// driver. If an external driver returns a response with NotHandled, the
	// rest of the driverResponse is ignored, and go/packages will fallback
	// to the next driver. If go/packages is extended in the future to support
	// lists of multiple drivers, go/packages will fall back to the next driver.
	NotHandled bool

	// Sizes, if not nil, is the types.Sizes to use when type checking.
	Sizes *types.StdSizes

	// Roots is the set of package IDs that make up the root packages.
	// We have to encode this separately because when we encode a single package
	// we cannot know if it is one of the roots as that requires knowledge of the
	// graph it is part of.
	Roots []string `json:",omitempty"`

	// Packages is the full set of packages in the graph.
	// The packages are not connected into a graph.
	// The Imports if populated will be stubs that only have their ID set.
	// Imports will be connected and then type and syntax information added in a
	// later pass (see refine).
	Packages []*Package

	// GoVersion is the minor version number used by the driver
	// (e.g. the go command on the PATH) when selecting .go files.
	// Zero means unknown.
	GoVersion int
}

// Load loads and returns the Go packages named by the given patterns.
//
// Config specifies loading options;
// nil behaves the same as an empty Config.
//
// Load returns an error if any of the patterns was invalid
// as defined by the underlying build system.
// It may return an empty list of packages without an error,
// for instance for an empty expansion of a valid wildcard.
// Errors associated with a particular package are recorded in the
// corresponding Package's Errors list, and do not cause Load to
// return an error. Clients may need to handle such errors before
// proceeding with further analysis. The PrintErrors function is
// provided for convenient display of all errors.
func Load(cfg *Config, patterns ...string) ([]*Package, error) {
	l := newLoader(cfg)
	response, err := defaultDriver(&l.Config, patterns...)
	if err != nil {
		return nil, err
	}
	l.sizes = response.Sizes
	return l.refine(response)
}

// defaultDriver is a driver that implements go/packages' fallback behavior.
// It will try to request to an external driver, if one exists. If there's
// no external driver, or the driver returns a response with NotHandled set,
// defaultDriver will fall back to the go list driver.
func defaultDriver(cfg *Config, patterns ...string) (*driverResponse, error) {
	driver := findExternalDriver(cfg)
	if driver == nil {
		driver = goListDriver
	}
	response, err := driver(cfg, patterns...)
	if err != nil {
		return response, err
	} else if response.NotHandled {
		return goListDriver(cfg, patterns...)
	}
	return response, nil
}

// A Package describes a loaded Go package.
type Package struct {
	// ID is a unique identifier for a package,
	// in a syntax provided by the underlying build system.
	//
	// Because the syntax varies based on the build system,
	// clients should treat IDs as opaque and not attempt to
	// interpret them.
	ID string

	// Name is the package name as it appears in the package source code.
	Name string

	// PkgPath is the package path as used by the go/types package.
	PkgPath string

	// Errors contains any errors encountered querying the metadata
	// of the package, or while parsing or type-checking its files.
	Errors []Error

	// TypeErrors contains the subset of errors produced during type checking.
	TypeErrors []types.Error

	// GoFiles lists the absolute file paths of the package's Go source files.
	GoFiles []string

	// CompiledGoFiles lists the absolute file paths of the package's source
	// files that are suitable for type checking.
	// This may differ from GoFiles if files are processed before compilation.
	CompiledGoFiles []string

	// OtherFiles lists the absolute file paths of the package's non-Go source files,
	// including assembly, C, C++, Fortran, Objective-C, SWIG, and so on.
	OtherFiles []string

	// EmbedFiles lists the absolute file paths of the package's files
	// embedded with go:embed.
	EmbedFiles []string

	// EmbedPatterns lists the absolute file patterns of the package's
	// files embedded with go:embed.
	EmbedPatterns []string

	// IgnoredFiles lists source files that are not part of the package
	// using the current build configuration but that might be part of
	// the package using other build configurations.
	IgnoredFiles []string

	// ExportFile is the absolute path to a file containing type
	// information for the package as provided by the build system.
	ExportFile string

	// Imports maps import paths appearing in the package's Go source files
	// to corresponding loaded Packages.
	Imports map[string]*Package

	// Types provides type information for the package.
	// The NeedTypes LoadMode bit sets this field for packages matching the
	// patterns; type information for dependencies may be missing or incomplete,
	// unless NeedDeps and NeedImports are also set.
	Types *types.Package

	// Fset provides position information for Types, TypesInfo, and Syntax.
	// It is set only when Types is set.
	Fset *token.FileSet

	// IllTyped indicates whether the package or any dependency contains errors.
	// It is set only when Types is set.
	IllTyped bool

	// Syntax is the package's syntax trees, for the files listed in CompiledGoFiles.
	//
	// The NeedSyntax LoadMode bit populates this field for packages matching the patterns.
	// If NeedDeps and NeedImports are also set, this field will also be populated
	// for dependencies.
	//
	// Syntax is kept in the same order as CompiledGoFiles, with the caveat that nils are
	// removed.  If parsing returned nil, Syntax may be shorter than CompiledGoFiles.
	Syntax []*ast.File

	// TypesInfo provides type information about the package's syntax trees.
	// It is set only when Syntax is set.
	TypesInfo *types.Info

	// TypesSizes provides the effective size function for types in TypesInfo.
	TypesSizes types.Sizes

	// forTest is the package under test, if any.
	forTest string

	// depsErrors is the DepsErrors field from the go list response, if any.
	depsErrors []*packagesinternal.PackageError

	// module is the module information for the package if it exists.
	Module *Module
}

// Module provides module information for a package.
type Module struct {
	Path      string       // module path
	Version   string       // module version
	Replace   *Module      // replaced by this module
	Time      *time.Time   // time version was created
	Main      bool         // is this the main module?
	Indirect  bool         // is this module only an indirect dependency of main module?
	Dir       string       // directory holding files for this module, if any
	GoMod     string       // path to go.mod file used when loading this module, if any
	GoVersion string       // go version used in module
	Error     *ModuleError // error loading module
}

// ModuleError holds errors loading a module.
type ModuleError struct {
	Err string // the error itself
}

func init() {
	packagesinternal.GetForTest = func(p interface{}) string {
		return p.(*Package).forTest
	}
	packagesinternal.GetDepsErrors = func(p interface{}) []*packagesinternal.PackageError {
		return p.(*Package).depsErrors
	}
	packagesinternal.GetGoCmdRunner = func(config interface{}) *gocommand.Runner {
		return config.(*Config).gocmdRunner
	}
	packagesinternal.SetGoCmdRunner = func(config interface{}, runner *gocommand.Runner) {
		config.(*Config).gocmdRunner = runner
	}
	packagesinternal.SetModFile = func(config interface{}, value string) {
		config.(*Config).modFile = value
	}
	packagesinternal.SetModFlag = func(config interface{}, value string) {
		config.(*Config).modFlag = value
	}
	packagesinternal.TypecheckCgo = int(typecheckCgo)
	packagesinternal.DepsErrors = int(needInternalDepsErrors)
	packagesinternal.ForTest = int(needInternalForTest)
}

// An Error describes a problem with a package's metadata, syntax, or types.
type Error struct {
	Pos  string // "file:line:col" or "file:line" or "" or "-"
	Msg  string
	Kind ErrorKind
}

// ErrorKind describes the source of the error, allowing the user to
// differentiate between errors generated by the driver, the parser, or the
// type-checker.
type ErrorKind int

const (
	UnknownError ErrorKind = iota
	ListError
	ParseError
	TypeError
)

func (err Error) Error() string {
	pos := err.Pos
	if pos == "" {
		pos = "-" // like token.Position{}.String()
	}
	return pos + ": " + err.Msg
}

// flatPackage is the JSON form of Package
// It drops all the type and syntax fields, and transforms the Imports
//
// TODO(adonovan): identify this struct with Package, effectively
// publishing the JSON protocol.
type flatPackage struct {
	ID              string
	Name            string            `json:",omitempty"`
	PkgPath         string            `json:",omitempty"`
	Errors          []Error           `json:",omitempty"`
	GoFiles         []string          `json:",omitempty"`
	CompiledGoFiles []string          `json:",omitempty"`
	OtherFiles      []string          `json:",omitempty"`
	EmbedFiles      []string          `json:",omitempty"`
	EmbedPatterns   []string          `json:",omitempty"`
	IgnoredFiles    []string          `json:",omitempty"`
	ExportFile      string            `json:",omitempty"`
	Imports         map[string]string `json:",omitempty"`
}

// MarshalJSON returns the Package in its JSON form.
// For the most part, the structure fields are written out unmodified, and
// the type and syntax fields are skipped.
// The imports are written out as just a map of path to package id.
// The errors are written using a custom type that tries to preserve the
// structure of error types we know about.
//
// This method exists to enable support for additional build systems.  It is
// not intended for use by clients of the API and we may change the format.
func (p *Package) MarshalJSON() ([]byte, error) {
	flat := &flatPackage{
		ID:              p.ID,
		Name:            p.Name,
		PkgPath:         p.PkgPath,
		Errors:          p.Errors,
		GoFiles:         p.GoFiles,
		CompiledGoFiles: p.CompiledGoFiles,
		OtherFiles:      p.OtherFiles,
		EmbedFiles:      p.EmbedFiles,
		EmbedPatterns:   p.EmbedPatterns,
		IgnoredFiles:    p.IgnoredFiles,
		ExportFile:      p.ExportFile,
	}
	if len(p.Imports) > 0 {
		flat.Imports = make(map[string]string, len(p.Imports))
		for path, ipkg := range p.Imports {
			flat.Imports[path] = ipkg.ID
		}
	}
	return json.Marshal(flat)
}

// UnmarshalJSON reads in a Package from its JSON format.
// See MarshalJSON for details about the format accepted.
func (p *Package) UnmarshalJSON(b []byte) error {
	flat := &flatPackage{}
	if err := json.Unmarshal(b, &flat); err != nil {
		return err
	}
	*p = Package{
		ID:              flat.ID,
		Name:            flat.Name,
		PkgPath:         flat.PkgPath,
		Errors:          flat.Errors,
		GoFiles:         flat.GoFiles,
		CompiledGoFiles: flat.CompiledGoFiles,
		OtherFiles:      flat.OtherFiles,
		EmbedFiles:      flat.EmbedFiles,
		EmbedPatterns:   flat.EmbedPatterns,
		ExportFile:      flat.ExportFile,
	}
	if len(flat.Imports) > 0 {
		p.Imports = make(map[string]*Package, len(flat.Imports))
		for path, id := range flat.Imports {
			p.Imports[path] = &Package{ID: id}
		}
	}
	return nil
}

func (p *Package) String() string { return p.ID }

// loaderPackage augments Package with state used during the loading phase
type loaderPackage struct {
	*Package
	importErrors map[string]error // maps each bad import to its error
	loadOnce     sync.Once
	color        uint8 // for cycle detection
	needsrc      bool  // load from source (Mode >= LoadTypes)
	needtypes    bool  // type information is either requested or depended on
	initial      bool  // package was matched by a pattern
	goVersion    int   // minor version number of go command on PATH
}

// loader holds the working state of a single call to load.
type loader struct {
	pkgs map[string]*loaderPackage
	Config
	sizes        types.Sizes
	parseCache   map[string]*parseValue
	parseCacheMu sync.Mutex
	exportMu     sync.Mutex // enforces mutual exclusion of exportdata operations

	// Config.Mode contains the implied mode (see impliedLoadMode).
	// Implied mode contains all the fields we need the data for.
	// In requestedMode there are the actually requested fields.
	// We'll zero them out before returning packages to the user.
	// This makes it easier for us to get the conditions where
	// we need certain modes right.
	requestedMode LoadMode
}

type parseValue struct {
	f     *ast.File
	err   error
	ready chan struct{}
}

func newLoader(cfg *Config) *loader {
	ld := &loader{
		parseCache: map[string]*parseValue{},
	}
	if cfg != nil {
		ld.Config = *cfg
		// If the user has provided a logger, use it.
		ld.Config.Logf = cfg.Logf
	}
	if ld.Config.Logf == nil {
		// If the GOPACKAGESDEBUG environment variable is set to true,
		// but the user has not provided a logger, default to log.Printf.
		if debug {
			ld.Config.Logf = log.Printf
		} else {
			ld.Config.Logf = func(format string, args ...interface{}) {}
		}
	}
	if ld.Config.Mode == 0 {
		ld.Config.Mode = NeedName | NeedFiles | NeedCompiledGoFiles // Preserve zero behavior of Mode for backwards compatibility.
	}
	if ld.Config.Env == nil {
		ld.Config.Env = os.Environ()
	}
	if ld.Config.gocmdRunner == nil {
		ld.Config.gocmdRunner = &gocommand.Runner{}
	}
	if ld.Context == nil {
		ld.Context = context.Background()
	}
	if ld.Dir == "" {
		if dir, err := os.Getwd(); err == nil {
			ld.Dir = dir
		}
	}

	// Save the actually requested fields. We'll zero them out before returning packages to the user.
	ld.requestedMode = ld.Mode
	ld.Mode = impliedLoadMode(ld.Mode)

	if ld.Mode&NeedTypes != 0 || ld.Mode&NeedSyntax != 0 {
		if ld.Fset == nil {
			ld.Fset = token.NewFileSet()
		}

		// ParseFile is required even in LoadTypes mode
		// because we load source if export data is missing.
		if ld.ParseFile == nil {
			ld.ParseFile = func(fset *token.FileSet, filename string, src []byte) (*ast.File, error) {
				const mode = parser.AllErrors | parser.ParseComments
				return parser.ParseFile(fset, filename, src, mode)
			}
		}
	}

	return ld
}

// refine connects the supplied packages into a graph and then adds type and
// and syntax information as requested by the LoadMode.
func (ld *loader) refine(response *driverResponse) ([]*Package, error) {
	roots := response.Roots
	rootMap := make(map[string]int, len(roots))
	for i, root := range roots {
		rootMap[root] = i
	}
	ld.pkgs = make(map[string]*loaderPackage)
	// first pass, fixup and build the map and roots
	var initial = make([]*loaderPackage, len(roots))
	for _, pkg := range response.Packages {
		rootIndex := -1
		if i, found := rootMap[pkg.ID]; found {
			rootIndex = i
		}

		// Overlays can invalidate export data.
		// TODO(matloob): make this check fine-grained based on dependencies on overlaid files
		exportDataInvalid := len(ld.Overlay) > 0 || pkg.ExportFile == "" && pkg.PkgPath != "unsafe"
		// This package needs type information if the caller requested types and the package is
		// either a root, or it's a non-root and the user requested dependencies ...
		needtypes := (ld.Mode&NeedTypes|NeedTypesInfo != 0 && (rootIndex >= 0 || ld.Mode&NeedDeps != 0))
		// This package needs source if the call requested source (or types info, which implies source)
		// and the package is either a root, or itas a non- root and the user requested dependencies...
		needsrc := ((ld.Mode&(NeedSyntax|NeedTypesInfo) != 0 && (rootIndex >= 0 || ld.Mode&NeedDeps != 0)) ||
			// ... or if we need types and the exportData is invalid. We fall back to (incompletely)
			// typechecking packages from source if they fail to compile.
			(ld.Mode&(NeedTypes|NeedTypesInfo) != 0 && exportDataInvalid)) && pkg.PkgPath != "unsafe"
		lpkg := &loaderPackage{
			Package:   pkg,
			needtypes: needtypes,
			needsrc:   needsrc,
			goVersion: response.GoVersion,
		}
		ld.pkgs[lpkg.ID] = lpkg
		if rootIndex >= 0 {
			initial[rootIndex] = lpkg
			lpkg.initial = true
		}
	}
	for i, root := range roots {
		if initial[i] == nil {
			return nil, fmt.Errorf("root package %v is missing", root)
		}
	}

	// Materialize the import graph.

	const (
		white = 0 // new
		grey  = 1 // in progress
		black = 2 // complete
	)

	// visit traverses the import graph, depth-first,
	// and materializes the graph as Packages.Imports.
	//
	// Valid imports are saved in the Packages.Import map.
	// Invalid imports (cycles and missing nodes) are saved in the importErrors map.
	// Thus, even in the presence of both kinds of errors, the Import graph remains a DAG.
	//
	// visit returns whether the package needs src or has a transitive
	// dependency on a package that does. These are the only packages
	// for which we load source code.
	var stack []*loaderPackage
	var visit func(lpkg *loaderPackage) bool
	var srcPkgs []*loaderPackage
	visit = func(lpkg *loaderPackage) bool {
		switch lpkg.color {
		case black:
			return lpkg.needsrc
		case grey:
			panic("internal error: grey node")
		}
		lpkg.color = grey
		stack = append(stack, lpkg) // push
		stubs := lpkg.Imports       // the structure form has only stubs with the ID in the Imports
		// If NeedImports isn't set, the imports fields will all be zeroed out.
		if ld.Mode&NeedImports != 0 {
			lpkg.Imports = make(map[string]*Package, len(stubs))
			for importPath, ipkg := range stubs {
				var importErr error
				imp := ld.pkgs[ipkg.ID]
				if imp == nil {
					// (includes package "C" when DisableCgo)
					importErr = fmt.Errorf("missing package: %q", ipkg.ID)
				} else if imp.color == grey {
					importErr = fmt.Errorf("import cycle: %s", stack)
				}
				if importErr != nil {
					if lpkg.importErrors == nil {
						lpkg.importErrors = make(map[string]error)
					}
					lpkg.importErrors[importPath] = importErr
					continue
				}

				if visit(imp) {
					lpkg.needsrc = true
				}
				lpkg.Imports[importPath] = imp.Package
			}
		}
		if lpkg.needsrc {
			srcPkgs = append(srcPkgs, lpkg)
		}
		if ld.Mode&NeedTypesSizes != 0 {
			lpkg.TypesSizes = ld.sizes
		}
		stack = stack[:len(stack)-1] // pop
		lpkg.color = black

		return lpkg.needsrc
	}

	if ld.Mode&NeedImports == 0 {
		// We do this to drop the stub import packages that we are not even going to try to resolve.
		for _, lpkg := range initial {
			lpkg.Imports = nil
		}
	} else {
		// For each initial package, create its import DAG.
		for _, lpkg := range initial {
			visit(lpkg)
		}
	}
	if ld.Mode&NeedImports != 0 && ld.Mode&NeedTypes != 0 {
		for _, lpkg := range srcPkgs {
			// Complete type information is required for the
			// immediate dependencies of each source package.
			for _, ipkg := range lpkg.Imports {
				imp := ld.pkgs[ipkg.ID]
				imp.needtypes = true
			}
		}
	}
	// Load type data and syntax if needed, starting at
	// the initial packages (roots of the import DAG).
	if ld.Mode&NeedTypes != 0 || ld.Mode&NeedSyntax != 0 {
		var wg sync.WaitGroup
		for _, lpkg := range initial {
			wg.Add(1)
			go func(lpkg *loaderPackage) {
				ld.loadRecursive(lpkg)
				wg.Done()
			}(lpkg)
		}
		wg.Wait()
	}

	result := make([]*Package, len(initial))
	for i, lpkg := range initial {
		result[i] = lpkg.Package
	}
	for i := range ld.pkgs {
		// Clear all unrequested fields,
		// to catch programs that use more than they request.
		if ld.requestedMode&NeedName == 0 {
			ld.pkgs[i].Name = ""
			ld.pkgs[i].PkgPath = ""
		}
		if ld.requestedMode&NeedFiles == 0 {
			ld.pkgs[i].GoFiles = nil
			ld.pkgs[i].OtherFiles = nil
			ld.pkgs[i].IgnoredFiles = nil
		}
		if ld.requestedMode&NeedEmbedFiles == 0 {
			ld.pkgs[i].EmbedFiles = nil
		}
		if ld.requestedMode&NeedEmbedPatterns == 0 {
			ld.pkgs[i].EmbedPatterns = nil
		}
		if ld.requestedMode&NeedCompiledGoFiles == 0 {
			ld.pkgs[i].CompiledGoFiles = nil
		}
		if ld.requestedMode&NeedImports == 0 {
			ld.pkgs[i].Imports = nil
		}
		if ld.requestedMode&NeedExportFile == 0 {
			ld.pkgs[i].ExportFile = ""
		}
		if ld.requestedMode&NeedTypes == 0 {
			ld.pkgs[i].Types = nil
			ld.pkgs[i].Fset = nil
			ld.pkgs[i].IllTyped = false
		}
		if ld.requestedMode&NeedSyntax == 0 {
			ld.pkgs[i].Syntax = nil
		}
		if ld.requestedMode&NeedTypesInfo == 0 {
			ld.pkgs[i].TypesInfo = nil
		}
		if ld.requestedMode&NeedTypesSizes == 0 {
			ld.pkgs[i].TypesSizes = nil
		}
		if ld.requestedMode&NeedModule == 0 {
			ld.pkgs[i].Module = nil
		}
	}

	return result, nil
}

// loadRecursive loads the specified package and its dependencies,
// recursively, in parallel, in topological order.
// It is atomic and idempotent.
// Precondition: ld.Mode&NeedTypes.
func (ld *loader) loadRecursive(lpkg *loaderPackage) {
	lpkg.loadOnce.Do(func() {
		// Load the direct dependencies, in parallel.
		var wg sync.WaitGroup
		for _, ipkg := range lpkg.Imports {
			imp := ld.pkgs[ipkg.ID]
			wg.Add(1)
			go func(imp *loaderPackage) {
				ld.loadRecursive(imp)
				wg.Done()
			}(imp)
		}
		wg.Wait()
		ld.loadPackage(lpkg)
	})
}

// loadPackage loads the specified package.
// It must be called only once per Package,
// after immediate dependencies are loaded.
// Precondition: ld.Mode & NeedTypes.
func (ld *loader) loadPackage(lpkg *loaderPackage) {
	if lpkg.PkgPath == "unsafe" {
		// Fill in the blanks to avoid surprises.
		lpkg.Types = types.Unsafe
		lpkg.Fset = ld.Fset
		lpkg.Syntax = []*ast.File{}
		lpkg.TypesInfo = new(types.Info)
		lpkg.TypesSizes = ld.sizes
		return
	}

	// Call NewPackage directly with explicit name.
	// This avoids skew between golist and go/types when the files'
	// package declarations are inconsistent.
	lpkg.Types = types.NewPackage(lpkg.PkgPath, lpkg.Name)
	lpkg.Fset = ld.Fset

	// Subtle: we populate all Types fields with an empty Package
	// before loading export data so that export data processing
	// never has to create a types.Package for an indirect dependency,
	// which would then require that such created packages be explicitly
	// inserted back into the Import graph as a final step after export data loading.
	// (Hence this return is after the Types assignment.)
	// The Diamond test exercises this case.
	if !lpkg.needtypes && !lpkg.needsrc {
		return
	}
	if !lpkg.needsrc {
		if err := ld.loadFromExportData(lpkg); err != nil {
			lpkg.Errors = append(lpkg.Errors, Error{
				Pos:  "-",
				Msg:  err.Error(),
				Kind: UnknownError, // e.g. can't find/open/parse export data
			})
		}
		return // not a source package, don't get syntax trees
	}

	appendError := func(err error) {
		// Convert various error types into the one true Error.
		var errs []Error
		switch err := err.(type) {
		case Error:
			// from driver
			errs = append(errs, err)

		case *os.PathError:
			// from parser
			errs = append(errs, Error{
				Pos:  err.Path + ":1",
				Msg:  err.Err.Error(),
				Kind: ParseError,
			})

		case scanner.ErrorList:
			// from parser
			for _, err := range err {
				errs = append(errs, Error{
					Pos:  err.Pos.String(),
					Msg:  err.Msg,
					Kind: ParseError,
				})
			}

		case types.Error:
			// from type checker
			lpkg.TypeErrors = append(lpkg.TypeErrors, err)
			errs = append(errs, Error{
				Pos:  err.Fset.Position(err.Pos).String(),
				Msg:  err.Msg,
				Kind: TypeError,
			})

		default:
			// unexpected impoverished error from parser?
			errs = append(errs, Error{
				Pos:  "-",
				Msg:  err.Error(),
				Kind: UnknownError,
			})

			// If you see this error message, please file a bug.
			log.Printf("internal error: error %q (%T) without position", err, err)
		}

		lpkg.Errors = append(lpkg.Errors, errs...)
	}

	// If the go command on the PATH is newer than the runtime,
	// then the go/{scanner,ast,parser,types} packages from the
	// standard library may be unable to process the files
	// selected by go list.
	//
	// There is currently no way to downgrade the effective
	// version of the go command (see issue 52078), so we proceed
	// with the newer go command but, in case of parse or type
	// errors, we emit an additional diagnostic.
	//
	// See:
	// - golang.org/issue/52078 (flag to set release tags)
	// - golang.org/issue/50825 (gopls legacy version support)
	// - golang.org/issue/55883 (go/packages confusing error)
	//
	// Should we assert a hard minimum of (currently) go1.16 here?
	var runtimeVersion int
	if _, err := fmt.Sscanf(runtime.Version(), "go1.%d", &runtimeVersion); err == nil && runtimeVersion < lpkg.goVersion {
		defer func() {
			if len(lpkg.Errors) > 0 {
				appendError(Error{
					Pos:  "-",
					Msg:  fmt.Sprintf("This application uses version go1.%d of the source-processing packages but runs version go1.%d of 'go list'. It may fail to process source files that rely on newer language features. If so, rebuild the application using a newer version of Go.", runtimeVersion, lpkg.goVersion),
					Kind: UnknownError,
				})
			}
		}()
	}

	if ld.Config.Mode&NeedTypes != 0 && len(lpkg.CompiledGoFiles) == 0 && lpkg.ExportFile != "" {
		// The config requested loading sources and types, but sources are missing.
		// Add an error to the package and fall back to loading from export data.
		appendError(Error{"-", fmt.Sprintf("sources missing for package %s", lpkg.ID), ParseError})
		_ = ld.loadFromExportData(lpkg) // ignore any secondary errors

		return // can't get syntax trees for this package
	}

	files, errs := ld.parseFiles(lpkg.CompiledGoFiles)
	for _, err := range errs {
		appendError(err)
	}

	lpkg.Syntax = files
	if ld.Config.Mode&NeedTypes == 0 {
		return
	}

	lpkg.TypesInfo = &types.Info{
		Types:      make(map[ast.Expr]types.TypeAndValue),
		Defs:       make(map[*ast.Ident]types.Object),
		Uses:       make(map[*ast.Ident]types.Object),
		Implicits:  make(map[ast.Node]types.Object),
		Scopes:     make(map[ast.Node]*types.Scope),
		Selections: make(map[*ast.SelectorExpr]*types.Selection),
	}
	typeparams.InitInstanceInfo(lpkg.TypesInfo)
	lpkg.TypesSizes = ld.sizes

	importer := importerFunc(func(path string) (*types.Package, error) {
		if path == "unsafe" {
			return types.Unsafe, nil
		}

		// The imports map is keyed by import path.
		ipkg := lpkg.Imports[path]
		if ipkg == nil {
			if err := lpkg.importErrors[path]; err != nil {
				return nil, err
			}
			// There was skew between the metadata and the
			// import declarations, likely due to an edit
			// race, or because the ParseFile feature was
			// used to supply alternative file contents.
			return nil, fmt.Errorf("no metadata for %s", path)
		}

		if ipkg.Types != nil && ipkg.Types.Complete() {
			return ipkg.Types, nil
		}
		log.Fatalf("internal error: package %q without types was imported from %q", path, lpkg)
		panic("unreachable")
	})

	// type-check
	tc := &types.Config{
		Importer: importer,

		// Type-check bodies of functions only in initial packages.
		// Example: for import graph A->B->C and initial packages {A,C},
		// we can ignore function bodies in B.
		IgnoreFuncBodies: ld.Mode&NeedDeps == 0 && !lpkg.initial,

		Error: appendError,
		Sizes: ld.sizes,
	}
	if (ld.Mode & typecheckCgo) != 0 {
		if !typesinternal.SetUsesCgo(tc) {
			appendError(Error{
				Msg:  "typecheckCgo requires Go 1.15+",
				Kind: ListError,
			})
			return
		}
	}
	types.NewChecker(tc, ld.Fset, lpkg.Types, lpkg.TypesInfo).Files(lpkg.Syntax)

	lpkg.importErrors = nil // no longer needed

	// If !Cgo, the type-checker uses FakeImportC mode, so
	// it doesn't invoke the importer for import "C",
	// nor report an error for the import,
	// or for any undefined C.f reference.
	// We must detect this explicitly and correctly
	// mark the package as IllTyped (by reporting an error).
	// TODO(adonovan): if these errors are annoying,
	// we could just set IllTyped quietly.
	if tc.FakeImportC {
	outer:
		for _, f := range lpkg.Syntax {
			for _, imp := range f.Imports {
				if imp.Path.Value == `"C"` {
					err := types.Error{Fset: ld.Fset, Pos: imp.Pos(), Msg: `import "C" ignored`}
					appendError(err)
					break outer
				}
			}
		}
	}

	// Record accumulated errors.
	illTyped := len(lpkg.Errors) > 0
	if !illTyped {
		for _, imp := range lpkg.Imports {
			if imp.IllTyped {
				illTyped = true
				break
			}
		}
	}
	lpkg.IllTyped = illTyped
}

// An importFunc is an implementation of the single-method
// types.Importer interface based on a function value.
type importerFunc func(path string) (*types.Package, error)

func (f importerFunc) Import(path string) (*types.Package, error) { return f(path) }

// We use a counting semaphore to limit
// the number of parallel I/O calls per process.
var ioLimit = make(chan bool, 20)

func (ld *loader) parseFile(filename string) (*ast.File, error) {
	ld.parseCacheMu.Lock()
	v, ok := ld.parseCache[filename]
	if ok {
		// cache hit
		ld.parseCacheMu.Unlock()
		<-v.ready
	} else {
		// cache miss
		v = &parseValue{ready: make(chan struct{})}
		ld.parseCache[filename] = v
		ld.parseCacheMu.Unlock()

		var src []byte
		for f, contents := range ld.Config.Overlay {
			if sameFile(f, filename) {
				src = contents
			}
		}
		var err error
		if src == nil {
			ioLimit <- true // wait
			src, err = ioutil.ReadFile(filename)
			<-ioLimit // signal
		}
		if err != nil {
			v.err = err
		} else {
			v.f, v.err = ld.ParseFile(ld.Fset, filename, src)
		}

		close(v.ready)
	}
	return v.f, v.err
}

// parseFiles reads and parses the Go source files and returns the ASTs
// of the ones that could be at least partially parsed, along with a
// list of I/O and parse errors encountered.
//
// Because files are scanned in parallel, the token.Pos
// positions of the resulting ast.Files are not ordered.
func (ld *loader) parseFiles(filenames []string) ([]*ast.File, []error) {
	var wg sync.WaitGroup
	n := len(filenames)
	parsed := make([]*ast.File, n)
	errors := make([]error, n)
	for i, file := range filenames {
		if ld.Config.Context.Err() != nil {
			parsed[i] = nil
			errors[i] = ld.Config.Context.Err()
			continue
		}
		wg.Add(1)
		go func(i int, filename string) {
			parsed[i], errors[i] = ld.parseFile(filename)
			wg.Done()
		}(i, file)
	}
	wg.Wait()

	// Eliminate nils, preserving order.
	var o int
	for _, f := range parsed {
		if f != nil {
			parsed[o] = f
			o++
		}
	}
	parsed = parsed[:o]

	o = 0
	for _, err := range errors {
		if err != nil {
			errors[o] = err
			o++
		}
	}
	errors = errors[:o]

	return parsed, errors
}

// sameFile returns true if x and y have the same basename and denote
// the same file.
func sameFile(x, y string) bool {
	if x == y {
		// It could be the case that y doesn't exist.
		// For instance, it may be an overlay file that
		// hasn't been written to disk. To handle that case
		// let x == y through. (We added the exact absolute path
		// string to the CompiledGoFiles list, so the unwritten
		// overlay case implies x==y.)
		return true
	}
	if strings.EqualFold(filepath.Base(x), filepath.Base(y)) { // (optimisation)
		if xi, err := os.Stat(x); err == nil {
			if yi, err := os.Stat(y); err == nil {
				return os.SameFile(xi, yi)
			}
		}
	}
	return false
}

// loadFromExportData ensures that type information is present for the specified
// package, loading it from an export data file on the first request.
// On success it sets lpkg.Types to a new Package.
func (ld *loader) loadFromExportData(lpkg *loaderPackage) error {
	if lpkg.PkgPath == "" {
		log.Fatalf("internal error: Package %s has no PkgPath", lpkg)
	}

	// Because gcexportdata.Read has the potential to create or
	// modify the types.Package for each node in the transitive
	// closure of dependencies of lpkg, all exportdata operations
	// must be sequential. (Finer-grained locking would require
	// changes to the gcexportdata API.)
	//
	// The exportMu lock guards the lpkg.Types field and the
	// types.Package it points to, for each loaderPackage in the graph.
	//
	// Not all accesses to Package.Pkg need to be protected by exportMu:
	// graph ordering ensures that direct dependencies of source
	// packages are fully loaded before the importer reads their Pkg field.
	ld.exportMu.Lock()
	defer ld.exportMu.Unlock()

	if tpkg := lpkg.Types; tpkg != nil && tpkg.Complete() {
		return nil // cache hit
	}

	lpkg.IllTyped = true // fail safe

	if lpkg.ExportFile == "" {
		// Errors while building export data will have been printed to stderr.
		return fmt.Errorf("no export data file")
	}
	f, err := os.Open(lpkg.ExportFile)
	if err != nil {
		return err
	}
	defer f.Close()

	// Read gc export data.
	//
	// We don't currently support gccgo export data because all
	// underlying workspaces use the gc toolchain. (Even build
	// systems that support gccgo don't use it for workspace
	// queries.)
	r, err := gcexportdata.NewReader(f)
	if err != nil {
		return fmt.Errorf("reading %s: %v", lpkg.ExportFile, err)
	}

	// Build the view.
	//
	// The gcexportdata machinery has no concept of package ID.
	// It identifies packages by their PkgPath, which although not
	// globally unique is unique within the scope of one invocation
	// of the linker, type-checker, or gcexportdata.
	//
	// So, we must build a PkgPath-keyed view of the global
	// (conceptually ID-keyed) cache of packages and pass it to
	// gcexportdata. The view must contain every existing
	// package that might possibly be mentioned by the
	// current package---its transitive closure.
	//
	// In loadPackage, we unconditionally create a types.Package for
	// each dependency so that export data loading does not
	// create new ones.
	//
	// TODO(adonovan): it would be simpler and more efficient
	// if the export data machinery invoked a callback to
	// get-or-create a package instead of a map.
	//
	view := make(map[string]*types.Package) // view seen by gcexportdata
	seen := make(map[*loaderPackage]bool)   // all visited packages
	var visit func(pkgs map[string]*Package)
	visit = func(pkgs map[string]*Package) {
		for _, p := range pkgs {
			lpkg := ld.pkgs[p.ID]
			if !seen[lpkg] {
				seen[lpkg] = true
				view[lpkg.PkgPath] = lpkg.Types
				visit(lpkg.Imports)
			}
		}
	}
	visit(lpkg.Imports)

	viewLen := len(view) + 1 // adding the self package
	// Parse the export data.
	// (May modify incomplete packages in view but not create new ones.)
	tpkg, err := gcexportdata.Read(r, ld.Fset, view, lpkg.PkgPath)
	if err != nil {
		return fmt.Errorf("reading %s: %v", lpkg.ExportFile, err)
	}
	if _, ok := view["go.shape"]; ok {
		// Account for the pseudopackage "go.shape" that gets
		// created by generic code.
		viewLen++
	}
	if viewLen != len(view) {
		log.Panicf("golang.org/x/tools/go/packages: unexpected new packages during load of %s", lpkg.PkgPath)
	}

	lpkg.Types = tpkg
	lpkg.IllTyped = false
	return nil
}

// impliedLoadMode returns loadMode with its dependencies.
func impliedLoadMode(loadMode LoadMode) LoadMode {
	if loadMode&(NeedDeps|NeedTypes|NeedTypesInfo) != 0 {
		// All these things require knowing the import graph.
		loadMode |= NeedImports
	}

	return loadMode
}

func usesExportData(cfg *Config) bool {
	return cfg.Mode&NeedExportFile != 0 || cfg.Mode&NeedTypes != 0 && cfg.Mode&NeedDeps == 0
}

var _ interface{} = io.Discard // assert build toolchain is go1.16 or later
 07070100000F60000081A4000000000000000000000001645E367C00000603000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/tools/go/packages/visit.go    // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package packages

import (
	"fmt"
	"os"
	"sort"
)

// Visit visits all the packages in the import graph whose roots are
// pkgs, calling the optional pre function the first time each package
// is encountered (preorder), and the optional post function after a
// package's dependencies have been visited (postorder).
// The boolean result of pre(pkg) determines whether
// the imports of package pkg are visited.
func Visit(pkgs []*Package, pre func(*Package) bool, post func(*Package)) {
	seen := make(map[*Package]bool)
	var visit func(*Package)
	visit = func(pkg *Package) {
		if !seen[pkg] {
			seen[pkg] = true

			if pre == nil || pre(pkg) {
				paths := make([]string, 0, len(pkg.Imports))
				for path := range pkg.Imports {
					paths = append(paths, path)
				}
				sort.Strings(paths) // Imports is a map, this makes visit stable
				for _, path := range paths {
					visit(pkg.Imports[path])
				}
			}

			if post != nil {
				post(pkg)
			}
		}
	}
	for _, pkg := range pkgs {
		visit(pkg)
	}
}

// PrintErrors prints to os.Stderr the accumulated errors of all
// packages in the import graph rooted at pkgs, dependencies first.
// PrintErrors returns the number of errors printed.
func PrintErrors(pkgs []*Package) int {
	var n int
	Visit(pkgs, nil, func(pkg *Package) {
		for _, err := range pkg.Errors {
			fmt.Fprintln(os.Stderr, err)
			n++
		}
	})
	return n
}
 07070100000F61000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/golang.org/x/tools/go/types    07070100000F62000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/golang.org/x/tools/go/types/objectpath 07070100000F63000081A4000000000000000000000001645E367C00005B88000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go   // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package objectpath defines a naming scheme for types.Objects
// (that is, named entities in Go programs) relative to their enclosing
// package.
//
// Type-checker objects are canonical, so they are usually identified by
// their address in memory (a pointer), but a pointer has meaning only
// within one address space. By contrast, objectpath names allow the
// identity of an object to be sent from one program to another,
// establishing a correspondence between types.Object variables that are
// distinct but logically equivalent.
//
// A single object may have multiple paths. In this example,
//
//	type A struct{ X int }
//	type B A
//
// the field X has two paths due to its membership of both A and B.
// The For(obj) function always returns one of these paths, arbitrarily
// but consistently.
package objectpath

import (
	"fmt"
	"go/types"
	"sort"
	"strconv"
	"strings"

	"golang.org/x/tools/internal/typeparams"

	_ "unsafe" // for go:linkname
)

// A Path is an opaque name that identifies a types.Object
// relative to its package. Conceptually, the name consists of a
// sequence of destructuring operations applied to the package scope
// to obtain the original object.
// The name does not include the package itself.
type Path string

// Encoding
//
// An object path is a textual and (with training) human-readable encoding
// of a sequence of destructuring operators, starting from a types.Package.
// The sequences represent a path through the package/object/type graph.
// We classify these operators by their type:
//
//	PO package->object	Package.Scope.Lookup
//	OT  object->type 	Object.Type
//	TT    type->type 	Type.{Elem,Key,Params,Results,Underlying} [EKPRU]
//	TO   type->object	Type.{At,Field,Method,Obj} [AFMO]
//
// All valid paths start with a package and end at an object
// and thus may be defined by the regular language:
//
//	objectpath = PO (OT TT* TO)*
//
// The concrete encoding follows directly:
//   - The only PO operator is Package.Scope.Lookup, which requires an identifier.
//   - The only OT operator is Object.Type,
//     which we encode as '.' because dot cannot appear in an identifier.
//   - The TT operators are encoded as [EKPRUTC];
//     one of these (TypeParam) requires an integer operand,
//     which is encoded as a string of decimal digits.
//   - The TO operators are encoded as [AFMO];
//     three of these (At,Field,Method) require an integer operand,
//     which is encoded as a string of decimal digits.
//     These indices are stable across different representations
//     of the same package, even source and export data.
//     The indices used are implementation specific and may not correspond to
//     the argument to the go/types function.
//
// In the example below,
//
//	package p
//
//	type T interface {
//		f() (a string, b struct{ X int })
//	}
//
// field X has the path "T.UM0.RA1.F0",
// representing the following sequence of operations:
//
//	p.Lookup("T")					T
//	.Type().Underlying().Method(0).			f
//	.Type().Results().At(1)				b
//	.Type().Field(0)					X
//
// The encoding is not maximally compact---every R or P is
// followed by an A, for example---but this simplifies the
// encoder and decoder.
const (
	// object->type operators
	opType = '.' // .Type()		  (Object)

	// type->type operators
	opElem       = 'E' // .Elem()		        (Pointer, Slice, Array, Chan, Map)
	opKey        = 'K' // .Key()		        (Map)
	opParams     = 'P' // .Params()		      (Signature)
	opResults    = 'R' // .Results()	      (Signature)
	opUnderlying = 'U' // .Underlying()	    (Named)
	opTypeParam  = 'T' // .TypeParams.At(i) (Named, Signature)
	opConstraint = 'C' // .Constraint()     (TypeParam)

	// type->object operators
	opAt     = 'A' // .At(i)		 (Tuple)
	opField  = 'F' // .Field(i)	 (Struct)
	opMethod = 'M' // .Method(i) (Named or Interface; not Struct: "promoted" names are ignored)
	opObj    = 'O' // .Obj()		 (Named, TypeParam)
)

// For returns the path to an object relative to its package,
// or an error if the object is not accessible from the package's Scope.
//
// The For function guarantees to return a path only for the following objects:
// - package-level types
// - exported package-level non-types
// - methods
// - parameter and result variables
// - struct fields
// These objects are sufficient to define the API of their package.
// The objects described by a package's export data are drawn from this set.
//
// For does not return a path for predeclared names, imported package
// names, local names, and unexported package-level names (except
// types).
//
// Example: given this definition,
//
//	package p
//
//	type T interface {
//		f() (a string, b struct{ X int })
//	}
//
// For(X) would return a path that denotes the following sequence of operations:
//
//	p.Scope().Lookup("T")				(TypeName T)
//	.Type().Underlying().Method(0).			(method Func f)
//	.Type().Results().At(1)				(field Var b)
//	.Type().Field(0)					(field Var X)
//
// where p is the package (*types.Package) to which X belongs.
func For(obj types.Object) (Path, error) {
	return newEncoderFor()(obj)
}

// An encoder amortizes the cost of encoding the paths of multiple objects.
// Nonexported pending approval of proposal 58668.
type encoder struct {
	scopeNamesMemo   map[*types.Scope][]string      // memoization of Scope.Names()
	namedMethodsMemo map[*types.Named][]*types.Func // memoization of namedMethods()
}

// Exposed to gopls via golang.org/x/tools/internal/typesinternal
// pending approval of proposal 58668.
//
//go:linkname newEncoderFor
func newEncoderFor() func(types.Object) (Path, error) { return new(encoder).For }

func (enc *encoder) For(obj types.Object) (Path, error) {
	pkg := obj.Pkg()

	// This table lists the cases of interest.
	//
	// Object				Action
	// ------                               ------
	// nil					reject
	// builtin				reject
	// pkgname				reject
	// label				reject
	// var
	//    package-level			accept
	//    func param/result			accept
	//    local				reject
	//    struct field			accept
	// const
	//    package-level			accept
	//    local				reject
	// func
	//    package-level			accept
	//    init functions			reject
	//    concrete method			accept
	//    interface method			accept
	// type
	//    package-level			accept
	//    local				reject
	//
	// The only accessible package-level objects are members of pkg itself.
	//
	// The cases are handled in four steps:
	//
	// 1. reject nil and builtin
	// 2. accept package-level objects
	// 3. reject obviously invalid objects
	// 4. search the API for the path to the param/result/field/method.

	// 1. reference to nil or builtin?
	if pkg == nil {
		return "", fmt.Errorf("predeclared %s has no path", obj)
	}
	scope := pkg.Scope()

	// 2. package-level object?
	if scope.Lookup(obj.Name()) == obj {
		// Only exported objects (and non-exported types) have a path.
		// Non-exported types may be referenced by other objects.
		if _, ok := obj.(*types.TypeName); !ok && !obj.Exported() {
			return "", fmt.Errorf("no path for non-exported %v", obj)
		}
		return Path(obj.Name()), nil
	}

	// 3. Not a package-level object.
	//    Reject obviously non-viable cases.
	switch obj := obj.(type) {
	case *types.TypeName:
		if _, ok := obj.Type().(*typeparams.TypeParam); !ok {
			// With the exception of type parameters, only package-level type names
			// have a path.
			return "", fmt.Errorf("no path for %v", obj)
		}
	case *types.Const, // Only package-level constants have a path.
		*types.Label,   // Labels are function-local.
		*types.PkgName: // PkgNames are file-local.
		return "", fmt.Errorf("no path for %v", obj)

	case *types.Var:
		// Could be:
		// - a field (obj.IsField())
		// - a func parameter or result
		// - a local var.
		// Sadly there is no way to distinguish
		// a param/result from a local
		// so we must proceed to the find.

	case *types.Func:
		// A func, if not package-level, must be a method.
		if recv := obj.Type().(*types.Signature).Recv(); recv == nil {
			return "", fmt.Errorf("func is not a method: %v", obj)
		}

		if path, ok := enc.concreteMethod(obj); ok {
			// Fast path for concrete methods that avoids looping over scope.
			return path, nil
		}

	default:
		panic(obj)
	}

	// 4. Search the API for the path to the var (field/param/result) or method.

	// First inspect package-level named types.
	// In the presence of path aliases, these give
	// the best paths because non-types may
	// refer to types, but not the reverse.
	empty := make([]byte, 0, 48) // initial space
	names := enc.scopeNames(scope)
	for _, name := range names {
		o := scope.Lookup(name)
		tname, ok := o.(*types.TypeName)
		if !ok {
			continue // handle non-types in second pass
		}

		path := append(empty, name...)
		path = append(path, opType)

		T := o.Type()

		if tname.IsAlias() {
			// type alias
			if r := find(obj, T, path, nil); r != nil {
				return Path(r), nil
			}
		} else {
			if named, _ := T.(*types.Named); named != nil {
				if r := findTypeParam(obj, typeparams.ForNamed(named), path, nil); r != nil {
					// generic named type
					return Path(r), nil
				}
			}
			// defined (named) type
			if r := find(obj, T.Underlying(), append(path, opUnderlying), nil); r != nil {
				return Path(r), nil
			}
		}
	}

	// Then inspect everything else:
	// non-types, and declared methods of defined types.
	for _, name := range names {
		o := scope.Lookup(name)
		path := append(empty, name...)
		if _, ok := o.(*types.TypeName); !ok {
			if o.Exported() {
				// exported non-type (const, var, func)
				if r := find(obj, o.Type(), append(path, opType), nil); r != nil {
					return Path(r), nil
				}
			}
			continue
		}

		// Inspect declared methods of defined types.
		if T, ok := o.Type().(*types.Named); ok {
			path = append(path, opType)
			// Note that method index here is always with respect
			// to canonical ordering of methods, regardless of how
			// they appear in the underlying type.
			for i, m := range enc.namedMethods(T) {
				path2 := appendOpArg(path, opMethod, i)
				if m == obj {
					return Path(path2), nil // found declared method
				}
				if r := find(obj, m.Type(), append(path2, opType), nil); r != nil {
					return Path(r), nil
				}
			}
		}
	}

	return "", fmt.Errorf("can't find path for %v in %s", obj, pkg.Path())
}

func appendOpArg(path []byte, op byte, arg int) []byte {
	path = append(path, op)
	path = strconv.AppendInt(path, int64(arg), 10)
	return path
}

// concreteMethod returns the path for meth, which must have a non-nil receiver.
// The second return value indicates success and may be false if the method is
// an interface method or if it is an instantiated method.
//
// This function is just an optimization that avoids the general scope walking
// approach. You are expected to fall back to the general approach if this
// function fails.
func (enc *encoder) concreteMethod(meth *types.Func) (Path, bool) {
	// Concrete methods can only be declared on package-scoped named types. For
	// that reason we can skip the expensive walk over the package scope: the
	// path will always be package -> named type -> method. We can trivially get
	// the type name from the receiver, and only have to look over the type's
	// methods to find the method index.
	//
	// Methods on generic types require special consideration, however. Consider
	// the following package:
	//
	// 	L1: type S[T any] struct{}
	// 	L2: func (recv S[A]) Foo() { recv.Bar() }
	// 	L3: func (recv S[B]) Bar() { }
	// 	L4: type Alias = S[int]
	// 	L5: func _[T any]() { var s S[int]; s.Foo() }
	//
	// The receivers of methods on generic types are instantiations. L2 and L3
	// instantiate S with the type-parameters A and B, which are scoped to the
	// respective methods. L4 and L5 each instantiate S with int. Each of these
	// instantiations has its own method set, full of methods (and thus objects)
	// with receivers whose types are the respective instantiations. In other
	// words, we have
	//
	// S[A].Foo, S[A].Bar
	// S[B].Foo, S[B].Bar
	// S[int].Foo, S[int].Bar
	//
	// We may thus be trying to produce object paths for any of these objects.
	//
	// S[A].Foo and S[B].Bar are the origin methods, and their paths are S.Foo
	// and S.Bar, which are the paths that this function naturally produces.
	//
	// S[A].Bar, S[B].Foo, and both methods on S[int] are instantiations that
	// don't correspond to the origin methods. For S[int], this is significant.
	// The most precise object path for S[int].Foo, for example, is Alias.Foo,
	// not S.Foo. Our function, however, would produce S.Foo, which would
	// resolve to a different object.
	//
	// For S[A].Bar and S[B].Foo it could be argued that S.Bar and S.Foo are
	// still the correct paths, since only the origin methods have meaningful
	// paths. But this is likely only true for trivial cases and has edge cases.
	// Since this function is only an optimization, we err on the side of giving
	// up, deferring to the slower but definitely correct algorithm. Most users
	// of objectpath will only be giving us origin methods, anyway, as referring
	// to instantiated methods is usually not useful.

	if typeparams.OriginMethod(meth) != meth {
		return "", false
	}

	recvT := meth.Type().(*types.Signature).Recv().Type()
	if ptr, ok := recvT.(*types.Pointer); ok {
		recvT = ptr.Elem()
	}

	named, ok := recvT.(*types.Named)
	if !ok {
		return "", false
	}

	if types.IsInterface(named) {
		// Named interfaces don't have to be package-scoped
		//
		// TODO(dominikh): opt: if scope.Lookup(name) == named, then we can apply this optimization to interface
		// methods, too, I think.
		return "", false
	}

	// Preallocate space for the name, opType, opMethod, and some digits.
	name := named.Obj().Name()
	path := make([]byte, 0, len(name)+8)
	path = append(path, name...)
	path = append(path, opType)
	for i, m := range enc.namedMethods(named) {
		if m == meth {
			path = appendOpArg(path, opMethod, i)
			return Path(path), true
		}
	}

	panic(fmt.Sprintf("couldn't find method %s on type %s", meth, named))
}

// find finds obj within type T, returning the path to it, or nil if not found.
//
// The seen map is used to short circuit cycles through type parameters. If
// nil, it will be allocated as necessary.
func find(obj types.Object, T types.Type, path []byte, seen map[*types.TypeName]bool) []byte {
	switch T := T.(type) {
	case *types.Basic, *types.Named:
		// Named types belonging to pkg were handled already,
		// so T must belong to another package. No path.
		return nil
	case *types.Pointer:
		return find(obj, T.Elem(), append(path, opElem), seen)
	case *types.Slice:
		return find(obj, T.Elem(), append(path, opElem), seen)
	case *types.Array:
		return find(obj, T.Elem(), append(path, opElem), seen)
	case *types.Chan:
		return find(obj, T.Elem(), append(path, opElem), seen)
	case *types.Map:
		if r := find(obj, T.Key(), append(path, opKey), seen); r != nil {
			return r
		}
		return find(obj, T.Elem(), append(path, opElem), seen)
	case *types.Signature:
		if r := findTypeParam(obj, typeparams.ForSignature(T), path, seen); r != nil {
			return r
		}
		if r := find(obj, T.Params(), append(path, opParams), seen); r != nil {
			return r
		}
		return find(obj, T.Results(), append(path, opResults), seen)
	case *types.Struct:
		for i := 0; i < T.NumFields(); i++ {
			fld := T.Field(i)
			path2 := appendOpArg(path, opField, i)
			if fld == obj {
				return path2 // found field var
			}
			if r := find(obj, fld.Type(), append(path2, opType), seen); r != nil {
				return r
			}
		}
		return nil
	case *types.Tuple:
		for i := 0; i < T.Len(); i++ {
			v := T.At(i)
			path2 := appendOpArg(path, opAt, i)
			if v == obj {
				return path2 // found param/result var
			}
			if r := find(obj, v.Type(), append(path2, opType), seen); r != nil {
				return r
			}
		}
		return nil
	case *types.Interface:
		for i := 0; i < T.NumMethods(); i++ {
			m := T.Method(i)
			path2 := appendOpArg(path, opMethod, i)
			if m == obj {
				return path2 // found interface method
			}
			if r := find(obj, m.Type(), append(path2, opType), seen); r != nil {
				return r
			}
		}
		return nil
	case *typeparams.TypeParam:
		name := T.Obj()
		if name == obj {
			return append(path, opObj)
		}
		if seen[name] {
			return nil
		}
		if seen == nil {
			seen = make(map[*types.TypeName]bool)
		}
		seen[name] = true
		if r := find(obj, T.Constraint(), append(path, opConstraint), seen); r != nil {
			return r
		}
		return nil
	}
	panic(T)
}

func findTypeParam(obj types.Object, list *typeparams.TypeParamList, path []byte, seen map[*types.TypeName]bool) []byte {
	for i := 0; i < list.Len(); i++ {
		tparam := list.At(i)
		path2 := appendOpArg(path, opTypeParam, i)
		if r := find(obj, tparam, path2, seen); r != nil {
			return r
		}
	}
	return nil
}

// Object returns the object denoted by path p within the package pkg.
func Object(pkg *types.Package, p Path) (types.Object, error) {
	if p == "" {
		return nil, fmt.Errorf("empty path")
	}

	pathstr := string(p)
	var pkgobj, suffix string
	if dot := strings.IndexByte(pathstr, opType); dot < 0 {
		pkgobj = pathstr
	} else {
		pkgobj = pathstr[:dot]
		suffix = pathstr[dot:] // suffix starts with "."
	}

	obj := pkg.Scope().Lookup(pkgobj)
	if obj == nil {
		return nil, fmt.Errorf("package %s does not contain %q", pkg.Path(), pkgobj)
	}

	// abstraction of *types.{Pointer,Slice,Array,Chan,Map}
	type hasElem interface {
		Elem() types.Type
	}
	// abstraction of *types.{Named,Signature}
	type hasTypeParams interface {
		TypeParams() *typeparams.TypeParamList
	}
	// abstraction of *types.{Named,TypeParam}
	type hasObj interface {
		Obj() *types.TypeName
	}

	// The loop state is the pair (t, obj),
	// exactly one of which is non-nil, initially obj.
	// All suffixes start with '.' (the only object->type operation),
	// followed by optional type->type operations,
	// then a type->object operation.
	// The cycle then repeats.
	var t types.Type
	for suffix != "" {
		code := suffix[0]
		suffix = suffix[1:]

		// Codes [AFM] have an integer operand.
		var index int
		switch code {
		case opAt, opField, opMethod, opTypeParam:
			rest := strings.TrimLeft(suffix, "0123456789")
			numerals := suffix[:len(suffix)-len(rest)]
			suffix = rest
			i, err := strconv.Atoi(numerals)
			if err != nil {
				return nil, fmt.Errorf("invalid path: bad numeric operand %q for code %q", numerals, code)
			}
			index = int(i)
		case opObj:
			// no operand
		default:
			// The suffix must end with a type->object operation.
			if suffix == "" {
				return nil, fmt.Errorf("invalid path: ends with %q, want [AFMO]", code)
			}
		}

		if code == opType {
			if t != nil {
				return nil, fmt.Errorf("invalid path: unexpected %q in type context", opType)
			}
			t = obj.Type()
			obj = nil
			continue
		}

		if t == nil {
			return nil, fmt.Errorf("invalid path: code %q in object context", code)
		}

		// Inv: t != nil, obj == nil

		switch code {
		case opElem:
			hasElem, ok := t.(hasElem) // Pointer, Slice, Array, Chan, Map
			if !ok {
				return nil, fmt.Errorf("cannot apply %q to %s (got %T, want pointer, slice, array, chan or map)", code, t, t)
			}
			t = hasElem.Elem()

		case opKey:
			mapType, ok := t.(*types.Map)
			if !ok {
				return nil, fmt.Errorf("cannot apply %q to %s (got %T, want map)", code, t, t)
			}
			t = mapType.Key()

		case opParams:
			sig, ok := t.(*types.Signature)
			if !ok {
				return nil, fmt.Errorf("cannot apply %q to %s (got %T, want signature)", code, t, t)
			}
			t = sig.Params()

		case opResults:
			sig, ok := t.(*types.Signature)
			if !ok {
				return nil, fmt.Errorf("cannot apply %q to %s (got %T, want signature)", code, t, t)
			}
			t = sig.Results()

		case opUnderlying:
			named, ok := t.(*types.Named)
			if !ok {
				return nil, fmt.Errorf("cannot apply %q to %s (got %T, want named)", code, t, t)
			}
			t = named.Underlying()

		case opTypeParam:
			hasTypeParams, ok := t.(hasTypeParams) // Named, Signature
			if !ok {
				return nil, fmt.Errorf("cannot apply %q to %s (got %T, want named or signature)", code, t, t)
			}
			tparams := hasTypeParams.TypeParams()
			if n := tparams.Len(); index >= n {
				return nil, fmt.Errorf("tuple index %d out of range [0-%d)", index, n)
			}
			t = tparams.At(index)

		case opConstraint:
			tparam, ok := t.(*typeparams.TypeParam)
			if !ok {
				return nil, fmt.Errorf("cannot apply %q to %s (got %T, want type parameter)", code, t, t)
			}
			t = tparam.Constraint()

		case opAt:
			tuple, ok := t.(*types.Tuple)
			if !ok {
				return nil, fmt.Errorf("cannot apply %q to %s (got %T, want tuple)", code, t, t)
			}
			if n := tuple.Len(); index >= n {
				return nil, fmt.Errorf("tuple index %d out of range [0-%d)", index, n)
			}
			obj = tuple.At(index)
			t = nil

		case opField:
			structType, ok := t.(*types.Struct)
			if !ok {
				return nil, fmt.Errorf("cannot apply %q to %s (got %T, want struct)", code, t, t)
			}
			if n := structType.NumFields(); index >= n {
				return nil, fmt.Errorf("field index %d out of range [0-%d)", index, n)
			}
			obj = structType.Field(index)
			t = nil

		case opMethod:
			switch t := t.(type) {
			case *types.Interface:
				if index >= t.NumMethods() {
					return nil, fmt.Errorf("method index %d out of range [0-%d)", index, t.NumMethods())
				}
				obj = t.Method(index) // Id-ordered

			case *types.Named:
				methods := namedMethods(t) // (unmemoized)
				if index >= len(methods) {
					return nil, fmt.Errorf("method index %d out of range [0-%d)", index, len(methods))
				}
				obj = methods[index] // Id-ordered

			default:
				return nil, fmt.Errorf("cannot apply %q to %s (got %T, want interface or named)", code, t, t)
			}
			t = nil

		case opObj:
			hasObj, ok := t.(hasObj)
			if !ok {
				return nil, fmt.Errorf("cannot apply %q to %s (got %T, want named or type param)", code, t, t)
			}
			obj = hasObj.Obj()
			t = nil

		default:
			return nil, fmt.Errorf("invalid path: unknown code %q", code)
		}
	}

	if obj.Pkg() != pkg {
		return nil, fmt.Errorf("path denotes %s, which belongs to a different package", obj)
	}

	return obj, nil // success
}

// namedMethods returns the methods of a Named type in ascending Id order.
func namedMethods(named *types.Named) []*types.Func {
	methods := make([]*types.Func, named.NumMethods())
	for i := range methods {
		methods[i] = named.Method(i)
	}
	sort.Slice(methods, func(i, j int) bool {
		return methods[i].Id() < methods[j].Id()
	})
	return methods
}

// scopeNames is a memoization of scope.Names. Callers must not modify the result.
func (enc *encoder) scopeNames(scope *types.Scope) []string {
	m := enc.scopeNamesMemo
	if m == nil {
		m = make(map[*types.Scope][]string)
		enc.scopeNamesMemo = m
	}
	names, ok := m[scope]
	if !ok {
		names = scope.Names() // allocates and sorts
		m[scope] = names
	}
	return names
}

// namedMethods is a memoization of the namedMethods function. Callers must not modify the result.
func (enc *encoder) namedMethods(named *types.Named) []*types.Func {
	m := enc.namedMethodsMemo
	if m == nil {
		m = make(map[*types.Named][]*types.Func)
		enc.namedMethodsMemo = m
	}
	methods, ok := m[named]
	if !ok {
		methods = namedMethods(named) // allocates and sorts
		m[named] = methods
	}
	return methods

}
07070100000F64000041ED00000000000000000000000A645E367C00000000000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal    07070100000F65000041ED000000000000000000000005645E367C00000000000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/event  07070100000F66000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/event/core 07070100000F67000081A4000000000000000000000001645E367C0000084E000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/event/core/event.go    // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package core provides support for event based telemetry.
package core

import (
	"fmt"
	"time"

	"golang.org/x/tools/internal/event/label"
)

// Event holds the information about an event of note that occurred.
type Event struct {
	at time.Time

	// As events are often on the stack, storing the first few labels directly
	// in the event can avoid an allocation at all for the very common cases of
	// simple events.
	// The length needs to be large enough to cope with the majority of events
	// but no so large as to cause undue stack pressure.
	// A log message with two values will use 3 labels (one for each value and
	// one for the message itself).

	static  [3]label.Label // inline storage for the first few labels
	dynamic []label.Label  // dynamically sized storage for remaining labels
}

// eventLabelMap implements label.Map for a the labels of an Event.
type eventLabelMap struct {
	event Event
}

func (ev Event) At() time.Time { return ev.at }

func (ev Event) Format(f fmt.State, r rune) {
	if !ev.at.IsZero() {
		fmt.Fprint(f, ev.at.Format("2006/01/02 15:04:05 "))
	}
	for index := 0; ev.Valid(index); index++ {
		if l := ev.Label(index); l.Valid() {
			fmt.Fprintf(f, "\n\t%v", l)
		}
	}
}

func (ev Event) Valid(index int) bool {
	return index >= 0 && index < len(ev.static)+len(ev.dynamic)
}

func (ev Event) Label(index int) label.Label {
	if index < len(ev.static) {
		return ev.static[index]
	}
	return ev.dynamic[index-len(ev.static)]
}

func (ev Event) Find(key label.Key) label.Label {
	for _, l := range ev.static {
		if l.Key() == key {
			return l
		}
	}
	for _, l := range ev.dynamic {
		if l.Key() == key {
			return l
		}
	}
	return label.Label{}
}

func MakeEvent(static [3]label.Label, labels []label.Label) Event {
	return Event{
		static:  static,
		dynamic: labels,
	}
}

// CloneEvent event returns a copy of the event with the time adjusted to at.
func CloneEvent(ev Event, at time.Time) Event {
	ev.at = at
	return ev
}
  07070100000F68000081A4000000000000000000000001645E367C000008C8000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/event/core/export.go   // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package core

import (
	"context"
	"sync/atomic"
	"time"
	"unsafe"

	"golang.org/x/tools/internal/event/label"
)

// Exporter is a function that handles events.
// It may return a modified context and event.
type Exporter func(context.Context, Event, label.Map) context.Context

var (
	exporter unsafe.Pointer
)

// SetExporter sets the global exporter function that handles all events.
// The exporter is called synchronously from the event call site, so it should
// return quickly so as not to hold up user code.
func SetExporter(e Exporter) {
	p := unsafe.Pointer(&e)
	if e == nil {
		// &e is always valid, and so p is always valid, but for the early abort
		// of ProcessEvent to be efficient it needs to make the nil check on the
		// pointer without having to dereference it, so we make the nil function
		// also a nil pointer
		p = nil
	}
	atomic.StorePointer(&exporter, p)
}

// deliver is called to deliver an event to the supplied exporter.
// it will fill in the time.
func deliver(ctx context.Context, exporter Exporter, ev Event) context.Context {
	// add the current time to the event
	ev.at = time.Now()
	// hand the event off to the current exporter
	return exporter(ctx, ev, ev)
}

// Export is called to deliver an event to the global exporter if set.
func Export(ctx context.Context, ev Event) context.Context {
	// get the global exporter and abort early if there is not one
	exporterPtr := (*Exporter)(atomic.LoadPointer(&exporter))
	if exporterPtr == nil {
		return ctx
	}
	return deliver(ctx, *exporterPtr, ev)
}

// ExportPair is called to deliver a start event to the supplied exporter.
// It also returns a function that will deliver the end event to the same
// exporter.
// It will fill in the time.
func ExportPair(ctx context.Context, begin, end Event) (context.Context, func()) {
	// get the global exporter and abort early if there is not one
	exporterPtr := (*Exporter)(atomic.LoadPointer(&exporter))
	if exporterPtr == nil {
		return ctx, func() {}
	}
	ctx = deliver(ctx, *exporterPtr, begin)
	return ctx, func() { deliver(ctx, *exporterPtr, end) }
}
07070100000F69000081A4000000000000000000000001645E367C000008AE000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/event/core/fast.go // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package core

import (
	"context"

	"golang.org/x/tools/internal/event/keys"
	"golang.org/x/tools/internal/event/label"
)

// Log1 takes a message and one label delivers a log event to the exporter.
// It is a customized version of Print that is faster and does no allocation.
func Log1(ctx context.Context, message string, t1 label.Label) {
	Export(ctx, MakeEvent([3]label.Label{
		keys.Msg.Of(message),
		t1,
	}, nil))
}

// Log2 takes a message and two labels and delivers a log event to the exporter.
// It is a customized version of Print that is faster and does no allocation.
func Log2(ctx context.Context, message string, t1 label.Label, t2 label.Label) {
	Export(ctx, MakeEvent([3]label.Label{
		keys.Msg.Of(message),
		t1,
		t2,
	}, nil))
}

// Metric1 sends a label event to the exporter with the supplied labels.
func Metric1(ctx context.Context, t1 label.Label) context.Context {
	return Export(ctx, MakeEvent([3]label.Label{
		keys.Metric.New(),
		t1,
	}, nil))
}

// Metric2 sends a label event to the exporter with the supplied labels.
func Metric2(ctx context.Context, t1, t2 label.Label) context.Context {
	return Export(ctx, MakeEvent([3]label.Label{
		keys.Metric.New(),
		t1,
		t2,
	}, nil))
}

// Start1 sends a span start event with the supplied label list to the exporter.
// It also returns a function that will end the span, which should normally be
// deferred.
func Start1(ctx context.Context, name string, t1 label.Label) (context.Context, func()) {
	return ExportPair(ctx,
		MakeEvent([3]label.Label{
			keys.Start.Of(name),
			t1,
		}, nil),
		MakeEvent([3]label.Label{
			keys.End.New(),
		}, nil))
}

// Start2 sends a span start event with the supplied label list to the exporter.
// It also returns a function that will end the span, which should normally be
// deferred.
func Start2(ctx context.Context, name string, t1, t2 label.Label) (context.Context, func()) {
	return ExportPair(ctx,
		MakeEvent([3]label.Label{
			keys.Start.Of(name),
			t1,
			t2,
		}, nil),
		MakeEvent([3]label.Label{
			keys.End.New(),
		}, nil))
}
  07070100000F6A000081A4000000000000000000000001645E367C0000012A000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/event/doc.go   // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package event provides a set of packages that cover the main
// concepts of telemetry in an implementation agnostic way.
package event
  07070100000F6B000081A4000000000000000000000001645E367C00001170000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/event/event.go // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package event

import (
	"context"

	"golang.org/x/tools/internal/event/core"
	"golang.org/x/tools/internal/event/keys"
	"golang.org/x/tools/internal/event/label"
)

// Exporter is a function that handles events.
// It may return a modified context and event.
type Exporter func(context.Context, core.Event, label.Map) context.Context

// SetExporter sets the global exporter function that handles all events.
// The exporter is called synchronously from the event call site, so it should
// return quickly so as not to hold up user code.
func SetExporter(e Exporter) {
	core.SetExporter(core.Exporter(e))
}

// Log takes a message and a label list and combines them into a single event
// before delivering them to the exporter.
func Log(ctx context.Context, message string, labels ...label.Label) {
	core.Export(ctx, core.MakeEvent([3]label.Label{
		keys.Msg.Of(message),
	}, labels))
}

// IsLog returns true if the event was built by the Log function.
// It is intended to be used in exporters to identify the semantics of the
// event when deciding what to do with it.
func IsLog(ev core.Event) bool {
	return ev.Label(0).Key() == keys.Msg
}

// Error takes a message and a label list and combines them into a single event
// before delivering them to the exporter. It captures the error in the
// delivered event.
func Error(ctx context.Context, message string, err error, labels ...label.Label) {
	core.Export(ctx, core.MakeEvent([3]label.Label{
		keys.Msg.Of(message),
		keys.Err.Of(err),
	}, labels))
}

// IsError returns true if the event was built by the Error function.
// It is intended to be used in exporters to identify the semantics of the
// event when deciding what to do with it.
func IsError(ev core.Event) bool {
	return ev.Label(0).Key() == keys.Msg &&
		ev.Label(1).Key() == keys.Err
}

// Metric sends a label event to the exporter with the supplied labels.
func Metric(ctx context.Context, labels ...label.Label) {
	core.Export(ctx, core.MakeEvent([3]label.Label{
		keys.Metric.New(),
	}, labels))
}

// IsMetric returns true if the event was built by the Metric function.
// It is intended to be used in exporters to identify the semantics of the
// event when deciding what to do with it.
func IsMetric(ev core.Event) bool {
	return ev.Label(0).Key() == keys.Metric
}

// Label sends a label event to the exporter with the supplied labels.
func Label(ctx context.Context, labels ...label.Label) context.Context {
	return core.Export(ctx, core.MakeEvent([3]label.Label{
		keys.Label.New(),
	}, labels))
}

// IsLabel returns true if the event was built by the Label function.
// It is intended to be used in exporters to identify the semantics of the
// event when deciding what to do with it.
func IsLabel(ev core.Event) bool {
	return ev.Label(0).Key() == keys.Label
}

// Start sends a span start event with the supplied label list to the exporter.
// It also returns a function that will end the span, which should normally be
// deferred.
func Start(ctx context.Context, name string, labels ...label.Label) (context.Context, func()) {
	return core.ExportPair(ctx,
		core.MakeEvent([3]label.Label{
			keys.Start.Of(name),
		}, labels),
		core.MakeEvent([3]label.Label{
			keys.End.New(),
		}, nil))
}

// IsStart returns true if the event was built by the Start function.
// It is intended to be used in exporters to identify the semantics of the
// event when deciding what to do with it.
func IsStart(ev core.Event) bool {
	return ev.Label(0).Key() == keys.Start
}

// IsEnd returns true if the event was built by the End function.
// It is intended to be used in exporters to identify the semantics of the
// event when deciding what to do with it.
func IsEnd(ev core.Event) bool {
	return ev.Label(0).Key() == keys.End
}

// Detach returns a context without an associated span.
// This allows the creation of spans that are not children of the current span.
func Detach(ctx context.Context) context.Context {
	return core.Export(ctx, core.MakeEvent([3]label.Label{
		keys.Detach.New(),
	}, nil))
}

// IsDetach returns true if the event was built by the Detach function.
// It is intended to be used in exporters to identify the semantics of the
// event when deciding what to do with it.
func IsDetach(ev core.Event) bool {
	return ev.Label(0).Key() == keys.Detach
}
07070100000F6C000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/event/keys 07070100000F6D000081A4000000000000000000000001645E367C00003E08000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/event/keys/keys.go // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package keys

import (
	"fmt"
	"io"
	"math"
	"strconv"

	"golang.org/x/tools/internal/event/label"
)

// Value represents a key for untyped values.
type Value struct {
	name        string
	description string
}

// New creates a new Key for untyped values.
func New(name, description string) *Value {
	return &Value{name: name, description: description}
}

func (k *Value) Name() string        { return k.name }
func (k *Value) Description() string { return k.description }

func (k *Value) Format(w io.Writer, buf []byte, l label.Label) {
	fmt.Fprint(w, k.From(l))
}

// Get can be used to get a label for the key from a label.Map.
func (k *Value) Get(lm label.Map) interface{} {
	if t := lm.Find(k); t.Valid() {
		return k.From(t)
	}
	return nil
}

// From can be used to get a value from a Label.
func (k *Value) From(t label.Label) interface{} { return t.UnpackValue() }

// Of creates a new Label with this key and the supplied value.
func (k *Value) Of(value interface{}) label.Label { return label.OfValue(k, value) }

// Tag represents a key for tagging labels that have no value.
// These are used when the existence of the label is the entire information it
// carries, such as marking events to be of a specific kind, or from a specific
// package.
type Tag struct {
	name        string
	description string
}

// NewTag creates a new Key for tagging labels.
func NewTag(name, description string) *Tag {
	return &Tag{name: name, description: description}
}

func (k *Tag) Name() string        { return k.name }
func (k *Tag) Description() string { return k.description }

func (k *Tag) Format(w io.Writer, buf []byte, l label.Label) {}

// New creates a new Label with this key.
func (k *Tag) New() label.Label { return label.OfValue(k, nil) }

// Int represents a key
type Int struct {
	name        string
	description string
}

// NewInt creates a new Key for int values.
func NewInt(name, description string) *Int {
	return &Int{name: name, description: description}
}

func (k *Int) Name() string        { return k.name }
func (k *Int) Description() string { return k.description }

func (k *Int) Format(w io.Writer, buf []byte, l label.Label) {
	w.Write(strconv.AppendInt(buf, int64(k.From(l)), 10))
}

// Of creates a new Label with this key and the supplied value.
func (k *Int) Of(v int) label.Label { return label.Of64(k, uint64(v)) }

// Get can be used to get a label for the key from a label.Map.
func (k *Int) Get(lm label.Map) int {
	if t := lm.Find(k); t.Valid() {
		return k.From(t)
	}
	return 0
}

// From can be used to get a value from a Label.
func (k *Int) From(t label.Label) int { return int(t.Unpack64()) }

// Int8 represents a key
type Int8 struct {
	name        string
	description string
}

// NewInt8 creates a new Key for int8 values.
func NewInt8(name, description string) *Int8 {
	return &Int8{name: name, description: description}
}

func (k *Int8) Name() string        { return k.name }
func (k *Int8) Description() string { return k.description }

func (k *Int8) Format(w io.Writer, buf []byte, l label.Label) {
	w.Write(strconv.AppendInt(buf, int64(k.From(l)), 10))
}

// Of creates a new Label with this key and the supplied value.
func (k *Int8) Of(v int8) label.Label { return label.Of64(k, uint64(v)) }

// Get can be used to get a label for the key from a label.Map.
func (k *Int8) Get(lm label.Map) int8 {
	if t := lm.Find(k); t.Valid() {
		return k.From(t)
	}
	return 0
}

// From can be used to get a value from a Label.
func (k *Int8) From(t label.Label) int8 { return int8(t.Unpack64()) }

// Int16 represents a key
type Int16 struct {
	name        string
	description string
}

// NewInt16 creates a new Key for int16 values.
func NewInt16(name, description string) *Int16 {
	return &Int16{name: name, description: description}
}

func (k *Int16) Name() string        { return k.name }
func (k *Int16) Description() string { return k.description }

func (k *Int16) Format(w io.Writer, buf []byte, l label.Label) {
	w.Write(strconv.AppendInt(buf, int64(k.From(l)), 10))
}

// Of creates a new Label with this key and the supplied value.
func (k *Int16) Of(v int16) label.Label { return label.Of64(k, uint64(v)) }

// Get can be used to get a label for the key from a label.Map.
func (k *Int16) Get(lm label.Map) int16 {
	if t := lm.Find(k); t.Valid() {
		return k.From(t)
	}
	return 0
}

// From can be used to get a value from a Label.
func (k *Int16) From(t label.Label) int16 { return int16(t.Unpack64()) }

// Int32 represents a key
type Int32 struct {
	name        string
	description string
}

// NewInt32 creates a new Key for int32 values.
func NewInt32(name, description string) *Int32 {
	return &Int32{name: name, description: description}
}

func (k *Int32) Name() string        { return k.name }
func (k *Int32) Description() string { return k.description }

func (k *Int32) Format(w io.Writer, buf []byte, l label.Label) {
	w.Write(strconv.AppendInt(buf, int64(k.From(l)), 10))
}

// Of creates a new Label with this key and the supplied value.
func (k *Int32) Of(v int32) label.Label { return label.Of64(k, uint64(v)) }

// Get can be used to get a label for the key from a label.Map.
func (k *Int32) Get(lm label.Map) int32 {
	if t := lm.Find(k); t.Valid() {
		return k.From(t)
	}
	return 0
}

// From can be used to get a value from a Label.
func (k *Int32) From(t label.Label) int32 { return int32(t.Unpack64()) }

// Int64 represents a key
type Int64 struct {
	name        string
	description string
}

// NewInt64 creates a new Key for int64 values.
func NewInt64(name, description string) *Int64 {
	return &Int64{name: name, description: description}
}

func (k *Int64) Name() string        { return k.name }
func (k *Int64) Description() string { return k.description }

func (k *Int64) Format(w io.Writer, buf []byte, l label.Label) {
	w.Write(strconv.AppendInt(buf, k.From(l), 10))
}

// Of creates a new Label with this key and the supplied value.
func (k *Int64) Of(v int64) label.Label { return label.Of64(k, uint64(v)) }

// Get can be used to get a label for the key from a label.Map.
func (k *Int64) Get(lm label.Map) int64 {
	if t := lm.Find(k); t.Valid() {
		return k.From(t)
	}
	return 0
}

// From can be used to get a value from a Label.
func (k *Int64) From(t label.Label) int64 { return int64(t.Unpack64()) }

// UInt represents a key
type UInt struct {
	name        string
	description string
}

// NewUInt creates a new Key for uint values.
func NewUInt(name, description string) *UInt {
	return &UInt{name: name, description: description}
}

func (k *UInt) Name() string        { return k.name }
func (k *UInt) Description() string { return k.description }

func (k *UInt) Format(w io.Writer, buf []byte, l label.Label) {
	w.Write(strconv.AppendUint(buf, uint64(k.From(l)), 10))
}

// Of creates a new Label with this key and the supplied value.
func (k *UInt) Of(v uint) label.Label { return label.Of64(k, uint64(v)) }

// Get can be used to get a label for the key from a label.Map.
func (k *UInt) Get(lm label.Map) uint {
	if t := lm.Find(k); t.Valid() {
		return k.From(t)
	}
	return 0
}

// From can be used to get a value from a Label.
func (k *UInt) From(t label.Label) uint { return uint(t.Unpack64()) }

// UInt8 represents a key
type UInt8 struct {
	name        string
	description string
}

// NewUInt8 creates a new Key for uint8 values.
func NewUInt8(name, description string) *UInt8 {
	return &UInt8{name: name, description: description}
}

func (k *UInt8) Name() string        { return k.name }
func (k *UInt8) Description() string { return k.description }

func (k *UInt8) Format(w io.Writer, buf []byte, l label.Label) {
	w.Write(strconv.AppendUint(buf, uint64(k.From(l)), 10))
}

// Of creates a new Label with this key and the supplied value.
func (k *UInt8) Of(v uint8) label.Label { return label.Of64(k, uint64(v)) }

// Get can be used to get a label for the key from a label.Map.
func (k *UInt8) Get(lm label.Map) uint8 {
	if t := lm.Find(k); t.Valid() {
		return k.From(t)
	}
	return 0
}

// From can be used to get a value from a Label.
func (k *UInt8) From(t label.Label) uint8 { return uint8(t.Unpack64()) }

// UInt16 represents a key
type UInt16 struct {
	name        string
	description string
}

// NewUInt16 creates a new Key for uint16 values.
func NewUInt16(name, description string) *UInt16 {
	return &UInt16{name: name, description: description}
}

func (k *UInt16) Name() string        { return k.name }
func (k *UInt16) Description() string { return k.description }

func (k *UInt16) Format(w io.Writer, buf []byte, l label.Label) {
	w.Write(strconv.AppendUint(buf, uint64(k.From(l)), 10))
}

// Of creates a new Label with this key and the supplied value.
func (k *UInt16) Of(v uint16) label.Label { return label.Of64(k, uint64(v)) }

// Get can be used to get a label for the key from a label.Map.
func (k *UInt16) Get(lm label.Map) uint16 {
	if t := lm.Find(k); t.Valid() {
		return k.From(t)
	}
	return 0
}

// From can be used to get a value from a Label.
func (k *UInt16) From(t label.Label) uint16 { return uint16(t.Unpack64()) }

// UInt32 represents a key
type UInt32 struct {
	name        string
	description string
}

// NewUInt32 creates a new Key for uint32 values.
func NewUInt32(name, description string) *UInt32 {
	return &UInt32{name: name, description: description}
}

func (k *UInt32) Name() string        { return k.name }
func (k *UInt32) Description() string { return k.description }

func (k *UInt32) Format(w io.Writer, buf []byte, l label.Label) {
	w.Write(strconv.AppendUint(buf, uint64(k.From(l)), 10))
}

// Of creates a new Label with this key and the supplied value.
func (k *UInt32) Of(v uint32) label.Label { return label.Of64(k, uint64(v)) }

// Get can be used to get a label for the key from a label.Map.
func (k *UInt32) Get(lm label.Map) uint32 {
	if t := lm.Find(k); t.Valid() {
		return k.From(t)
	}
	return 0
}

// From can be used to get a value from a Label.
func (k *UInt32) From(t label.Label) uint32 { return uint32(t.Unpack64()) }

// UInt64 represents a key
type UInt64 struct {
	name        string
	description string
}

// NewUInt64 creates a new Key for uint64 values.
func NewUInt64(name, description string) *UInt64 {
	return &UInt64{name: name, description: description}
}

func (k *UInt64) Name() string        { return k.name }
func (k *UInt64) Description() string { return k.description }

func (k *UInt64) Format(w io.Writer, buf []byte, l label.Label) {
	w.Write(strconv.AppendUint(buf, k.From(l), 10))
}

// Of creates a new Label with this key and the supplied value.
func (k *UInt64) Of(v uint64) label.Label { return label.Of64(k, v) }

// Get can be used to get a label for the key from a label.Map.
func (k *UInt64) Get(lm label.Map) uint64 {
	if t := lm.Find(k); t.Valid() {
		return k.From(t)
	}
	return 0
}

// From can be used to get a value from a Label.
func (k *UInt64) From(t label.Label) uint64 { return t.Unpack64() }

// Float32 represents a key
type Float32 struct {
	name        string
	description string
}

// NewFloat32 creates a new Key for float32 values.
func NewFloat32(name, description string) *Float32 {
	return &Float32{name: name, description: description}
}

func (k *Float32) Name() string        { return k.name }
func (k *Float32) Description() string { return k.description }

func (k *Float32) Format(w io.Writer, buf []byte, l label.Label) {
	w.Write(strconv.AppendFloat(buf, float64(k.From(l)), 'E', -1, 32))
}

// Of creates a new Label with this key and the supplied value.
func (k *Float32) Of(v float32) label.Label {
	return label.Of64(k, uint64(math.Float32bits(v)))
}

// Get can be used to get a label for the key from a label.Map.
func (k *Float32) Get(lm label.Map) float32 {
	if t := lm.Find(k); t.Valid() {
		return k.From(t)
	}
	return 0
}

// From can be used to get a value from a Label.
func (k *Float32) From(t label.Label) float32 {
	return math.Float32frombits(uint32(t.Unpack64()))
}

// Float64 represents a key
type Float64 struct {
	name        string
	description string
}

// NewFloat64 creates a new Key for int64 values.
func NewFloat64(name, description string) *Float64 {
	return &Float64{name: name, description: description}
}

func (k *Float64) Name() string        { return k.name }
func (k *Float64) Description() string { return k.description }

func (k *Float64) Format(w io.Writer, buf []byte, l label.Label) {
	w.Write(strconv.AppendFloat(buf, k.From(l), 'E', -1, 64))
}

// Of creates a new Label with this key and the supplied value.
func (k *Float64) Of(v float64) label.Label {
	return label.Of64(k, math.Float64bits(v))
}

// Get can be used to get a label for the key from a label.Map.
func (k *Float64) Get(lm label.Map) float64 {
	if t := lm.Find(k); t.Valid() {
		return k.From(t)
	}
	return 0
}

// From can be used to get a value from a Label.
func (k *Float64) From(t label.Label) float64 {
	return math.Float64frombits(t.Unpack64())
}

// String represents a key
type String struct {
	name        string
	description string
}

// NewString creates a new Key for int64 values.
func NewString(name, description string) *String {
	return &String{name: name, description: description}
}

func (k *String) Name() string        { return k.name }
func (k *String) Description() string { return k.description }

func (k *String) Format(w io.Writer, buf []byte, l label.Label) {
	w.Write(strconv.AppendQuote(buf, k.From(l)))
}

// Of creates a new Label with this key and the supplied value.
func (k *String) Of(v string) label.Label { return label.OfString(k, v) }

// Get can be used to get a label for the key from a label.Map.
func (k *String) Get(lm label.Map) string {
	if t := lm.Find(k); t.Valid() {
		return k.From(t)
	}
	return ""
}

// From can be used to get a value from a Label.
func (k *String) From(t label.Label) string { return t.UnpackString() }

// Boolean represents a key
type Boolean struct {
	name        string
	description string
}

// NewBoolean creates a new Key for bool values.
func NewBoolean(name, description string) *Boolean {
	return &Boolean{name: name, description: description}
}

func (k *Boolean) Name() string        { return k.name }
func (k *Boolean) Description() string { return k.description }

func (k *Boolean) Format(w io.Writer, buf []byte, l label.Label) {
	w.Write(strconv.AppendBool(buf, k.From(l)))
}

// Of creates a new Label with this key and the supplied value.
func (k *Boolean) Of(v bool) label.Label {
	if v {
		return label.Of64(k, 1)
	}
	return label.Of64(k, 0)
}

// Get can be used to get a label for the key from a label.Map.
func (k *Boolean) Get(lm label.Map) bool {
	if t := lm.Find(k); t.Valid() {
		return k.From(t)
	}
	return false
}

// From can be used to get a value from a Label.
func (k *Boolean) From(t label.Label) bool { return t.Unpack64() > 0 }

// Error represents a key
type Error struct {
	name        string
	description string
}

// NewError creates a new Key for int64 values.
func NewError(name, description string) *Error {
	return &Error{name: name, description: description}
}

func (k *Error) Name() string        { return k.name }
func (k *Error) Description() string { return k.description }

func (k *Error) Format(w io.Writer, buf []byte, l label.Label) {
	io.WriteString(w, k.From(l).Error())
}

// Of creates a new Label with this key and the supplied value.
func (k *Error) Of(v error) label.Label { return label.OfValue(k, v) }

// Get can be used to get a label for the key from a label.Map.
func (k *Error) Get(lm label.Map) error {
	if t := lm.Find(k); t.Valid() {
		return k.From(t)
	}
	return nil
}

// From can be used to get a value from a Label.
func (k *Error) From(t label.Label) error {
	err, _ := t.UnpackValue().(error)
	return err
}
07070100000F6E000081A4000000000000000000000001645E367C000003C1000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/event/keys/standard.go // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package keys

var (
	// Msg is a key used to add message strings to label lists.
	Msg = NewString("message", "a readable message")
	// Label is a key used to indicate an event adds labels to the context.
	Label = NewTag("label", "a label context marker")
	// Start is used for things like traces that have a name.
	Start = NewString("start", "span start")
	// Metric is a key used to indicate an event records metrics.
	End = NewTag("end", "a span end marker")
	// Metric is a key used to indicate an event records metrics.
	Detach = NewTag("detach", "a span detach marker")
	// Err is a key used to add error values to label lists.
	Err = NewError("error", "an error that occurred")
	// Metric is a key used to indicate an event records metrics.
	Metric = NewTag("metric", "a metric event marker")
)
   07070100000F6F000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/event/label    07070100000F70000081A4000000000000000000000001645E367C00001643000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/event/label/label.go   // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package label

import (
	"fmt"
	"io"
	"reflect"
	"unsafe"
)

// Key is used as the identity of a Label.
// Keys are intended to be compared by pointer only, the name should be unique
// for communicating with external systems, but it is not required or enforced.
type Key interface {
	// Name returns the key name.
	Name() string
	// Description returns a string that can be used to describe the value.
	Description() string

	// Format is used in formatting to append the value of the label to the
	// supplied buffer.
	// The formatter may use the supplied buf as a scratch area to avoid
	// allocations.
	Format(w io.Writer, buf []byte, l Label)
}

// Label holds a key and value pair.
// It is normally used when passing around lists of labels.
type Label struct {
	key     Key
	packed  uint64
	untyped interface{}
}

// Map is the interface to a collection of Labels indexed by key.
type Map interface {
	// Find returns the label that matches the supplied key.
	Find(key Key) Label
}

// List is the interface to something that provides an iterable
// list of labels.
// Iteration should start from 0 and continue until Valid returns false.
type List interface {
	// Valid returns true if the index is within range for the list.
	// It does not imply the label at that index will itself be valid.
	Valid(index int) bool
	// Label returns the label at the given index.
	Label(index int) Label
}

// list implements LabelList for a list of Labels.
type list struct {
	labels []Label
}

// filter wraps a LabelList filtering out specific labels.
type filter struct {
	keys       []Key
	underlying List
}

// listMap implements LabelMap for a simple list of labels.
type listMap struct {
	labels []Label
}

// mapChain implements LabelMap for a list of underlying LabelMap.
type mapChain struct {
	maps []Map
}

// OfValue creates a new label from the key and value.
// This method is for implementing new key types, label creation should
// normally be done with the Of method of the key.
func OfValue(k Key, value interface{}) Label { return Label{key: k, untyped: value} }

// UnpackValue assumes the label was built using LabelOfValue and returns the value
// that was passed to that constructor.
// This method is for implementing new key types, for type safety normal
// access should be done with the From method of the key.
func (t Label) UnpackValue() interface{} { return t.untyped }

// Of64 creates a new label from a key and a uint64. This is often
// used for non uint64 values that can be packed into a uint64.
// This method is for implementing new key types, label creation should
// normally be done with the Of method of the key.
func Of64(k Key, v uint64) Label { return Label{key: k, packed: v} }

// Unpack64 assumes the label was built using LabelOf64 and returns the value that
// was passed to that constructor.
// This method is for implementing new key types, for type safety normal
// access should be done with the From method of the key.
func (t Label) Unpack64() uint64 { return t.packed }

type stringptr unsafe.Pointer

// OfString creates a new label from a key and a string.
// This method is for implementing new key types, label creation should
// normally be done with the Of method of the key.
func OfString(k Key, v string) Label {
	hdr := (*reflect.StringHeader)(unsafe.Pointer(&v))
	return Label{
		key:     k,
		packed:  uint64(hdr.Len),
		untyped: stringptr(hdr.Data),
	}
}

// UnpackString assumes the label was built using LabelOfString and returns the
// value that was passed to that constructor.
// This method is for implementing new key types, for type safety normal
// access should be done with the From method of the key.
func (t Label) UnpackString() string {
	var v string
	hdr := (*reflect.StringHeader)(unsafe.Pointer(&v))
	hdr.Data = uintptr(t.untyped.(stringptr))
	hdr.Len = int(t.packed)
	return v
}

// Valid returns true if the Label is a valid one (it has a key).
func (t Label) Valid() bool { return t.key != nil }

// Key returns the key of this Label.
func (t Label) Key() Key { return t.key }

// Format is used for debug printing of labels.
func (t Label) Format(f fmt.State, r rune) {
	if !t.Valid() {
		io.WriteString(f, `nil`)
		return
	}
	io.WriteString(f, t.Key().Name())
	io.WriteString(f, "=")
	var buf [128]byte
	t.Key().Format(f, buf[:0], t)
}

func (l *list) Valid(index int) bool {
	return index >= 0 && index < len(l.labels)
}

func (l *list) Label(index int) Label {
	return l.labels[index]
}

func (f *filter) Valid(index int) bool {
	return f.underlying.Valid(index)
}

func (f *filter) Label(index int) Label {
	l := f.underlying.Label(index)
	for _, f := range f.keys {
		if l.Key() == f {
			return Label{}
		}
	}
	return l
}

func (lm listMap) Find(key Key) Label {
	for _, l := range lm.labels {
		if l.Key() == key {
			return l
		}
	}
	return Label{}
}

func (c mapChain) Find(key Key) Label {
	for _, src := range c.maps {
		l := src.Find(key)
		if l.Valid() {
			return l
		}
	}
	return Label{}
}

var emptyList = &list{}

func NewList(labels ...Label) List {
	if len(labels) == 0 {
		return emptyList
	}
	return &list{labels: labels}
}

func Filter(l List, keys ...Key) List {
	if len(keys) == 0 {
		return l
	}
	return &filter{keys: keys, underlying: l}
}

func NewMap(labels ...Label) Map {
	return listMap{labels: labels}
}

func MergeMaps(srcs ...Map) Map {
	var nonNil []Map
	for _, src := range srcs {
		if src != nil {
			nonNil = append(nonNil, src)
		}
	}
	if len(nonNil) == 1 {
		return nonNil[0]
	}
	return mapChain{maps: nonNil}
}
 07070100000F71000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/gcimporter 07070100000F72000081A4000000000000000000000001645E367C00004DB3000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/gcimporter/bexport.go  // Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Binary package export.
// This file was derived from $GOROOT/src/cmd/compile/internal/gc/bexport.go;
// see that file for specification of the format.

package gcimporter

import (
	"bytes"
	"encoding/binary"
	"fmt"
	"go/constant"
	"go/token"
	"go/types"
	"math"
	"math/big"
	"sort"
	"strings"
)

// If debugFormat is set, each integer and string value is preceded by a marker
// and position information in the encoding. This mechanism permits an importer
// to recognize immediately when it is out of sync. The importer recognizes this
// mode automatically (i.e., it can import export data produced with debugging
// support even if debugFormat is not set at the time of import). This mode will
// lead to massively larger export data (by a factor of 2 to 3) and should only
// be enabled during development and debugging.
//
// NOTE: This flag is the first flag to enable if importing dies because of
// (suspected) format errors, and whenever a change is made to the format.
const debugFormat = false // default: false

// Current export format version. Increase with each format change.
//
// Note: The latest binary (non-indexed) export format is at version 6.
// This exporter is still at level 4, but it doesn't matter since
// the binary importer can handle older versions just fine.
//
//	6: package height (CL 105038) -- NOT IMPLEMENTED HERE
//	5: improved position encoding efficiency (issue 20080, CL 41619) -- NOT IMPLEMENTED HERE
//	4: type name objects support type aliases, uses aliasTag
//	3: Go1.8 encoding (same as version 2, aliasTag defined but never used)
//	2: removed unused bool in ODCL export (compiler only)
//	1: header format change (more regular), export package for _ struct fields
//	0: Go1.7 encoding
const exportVersion = 4

// trackAllTypes enables cycle tracking for all types, not just named
// types. The existing compiler invariants assume that unnamed types
// that are not completely set up are not used, or else there are spurious
// errors.
// If disabled, only named types are tracked, possibly leading to slightly
// less efficient encoding in rare cases. It also prevents the export of
// some corner-case type declarations (but those are not handled correctly
// with with the textual export format either).
// TODO(gri) enable and remove once issues caused by it are fixed
const trackAllTypes = false

type exporter struct {
	fset *token.FileSet
	out  bytes.Buffer

	// object -> index maps, indexed in order of serialization
	strIndex map[string]int
	pkgIndex map[*types.Package]int
	typIndex map[types.Type]int

	// position encoding
	posInfoFormat bool
	prevFile      string
	prevLine      int

	// debugging support
	written int // bytes written
	indent  int // for trace
}

// internalError represents an error generated inside this package.
type internalError string

func (e internalError) Error() string { return "gcimporter: " + string(e) }

func internalErrorf(format string, args ...interface{}) error {
	return internalError(fmt.Sprintf(format, args...))
}

// BExportData returns binary export data for pkg.
// If no file set is provided, position info will be missing.
func BExportData(fset *token.FileSet, pkg *types.Package) (b []byte, err error) {
	if !debug {
		defer func() {
			if e := recover(); e != nil {
				if ierr, ok := e.(internalError); ok {
					err = ierr
					return
				}
				// Not an internal error; panic again.
				panic(e)
			}
		}()
	}

	p := exporter{
		fset:          fset,
		strIndex:      map[string]int{"": 0}, // empty string is mapped to 0
		pkgIndex:      make(map[*types.Package]int),
		typIndex:      make(map[types.Type]int),
		posInfoFormat: true, // TODO(gri) might become a flag, eventually
	}

	// write version info
	// The version string must start with "version %d" where %d is the version
	// number. Additional debugging information may follow after a blank; that
	// text is ignored by the importer.
	p.rawStringln(fmt.Sprintf("version %d", exportVersion))
	var debug string
	if debugFormat {
		debug = "debug"
	}
	p.rawStringln(debug) // cannot use p.bool since it's affected by debugFormat; also want to see this clearly
	p.bool(trackAllTypes)
	p.bool(p.posInfoFormat)

	// --- generic export data ---

	// populate type map with predeclared "known" types
	for index, typ := range predeclared() {
		p.typIndex[typ] = index
	}
	if len(p.typIndex) != len(predeclared()) {
		return nil, internalError("duplicate entries in type map?")
	}

	// write package data
	p.pkg(pkg, true)
	if trace {
		p.tracef("\n")
	}

	// write objects
	objcount := 0
	scope := pkg.Scope()
	for _, name := range scope.Names() {
		if !token.IsExported(name) {
			continue
		}
		if trace {
			p.tracef("\n")
		}
		p.obj(scope.Lookup(name))
		objcount++
	}

	// indicate end of list
	if trace {
		p.tracef("\n")
	}
	p.tag(endTag)

	// for self-verification only (redundant)
	p.int(objcount)

	if trace {
		p.tracef("\n")
	}

	// --- end of export data ---

	return p.out.Bytes(), nil
}

func (p *exporter) pkg(pkg *types.Package, emptypath bool) {
	if pkg == nil {
		panic(internalError("unexpected nil pkg"))
	}

	// if we saw the package before, write its index (>= 0)
	if i, ok := p.pkgIndex[pkg]; ok {
		p.index('P', i)
		return
	}

	// otherwise, remember the package, write the package tag (< 0) and package data
	if trace {
		p.tracef("P%d = { ", len(p.pkgIndex))
		defer p.tracef("} ")
	}
	p.pkgIndex[pkg] = len(p.pkgIndex)

	p.tag(packageTag)
	p.string(pkg.Name())
	if emptypath {
		p.string("")
	} else {
		p.string(pkg.Path())
	}
}

func (p *exporter) obj(obj types.Object) {
	switch obj := obj.(type) {
	case *types.Const:
		p.tag(constTag)
		p.pos(obj)
		p.qualifiedName(obj)
		p.typ(obj.Type())
		p.value(obj.Val())

	case *types.TypeName:
		if obj.IsAlias() {
			p.tag(aliasTag)
			p.pos(obj)
			p.qualifiedName(obj)
		} else {
			p.tag(typeTag)
		}
		p.typ(obj.Type())

	case *types.Var:
		p.tag(varTag)
		p.pos(obj)
		p.qualifiedName(obj)
		p.typ(obj.Type())

	case *types.Func:
		p.tag(funcTag)
		p.pos(obj)
		p.qualifiedName(obj)
		sig := obj.Type().(*types.Signature)
		p.paramList(sig.Params(), sig.Variadic())
		p.paramList(sig.Results(), false)

	default:
		panic(internalErrorf("unexpected object %v (%T)", obj, obj))
	}
}

func (p *exporter) pos(obj types.Object) {
	if !p.posInfoFormat {
		return
	}

	file, line := p.fileLine(obj)
	if file == p.prevFile {
		// common case: write line delta
		// delta == 0 means different file or no line change
		delta := line - p.prevLine
		p.int(delta)
		if delta == 0 {
			p.int(-1) // -1 means no file change
		}
	} else {
		// different file
		p.int(0)
		// Encode filename as length of common prefix with previous
		// filename, followed by (possibly empty) suffix. Filenames
		// frequently share path prefixes, so this can save a lot
		// of space and make export data size less dependent on file
		// path length. The suffix is unlikely to be empty because
		// file names tend to end in ".go".
		n := commonPrefixLen(p.prevFile, file)
		p.int(n)           // n >= 0
		p.string(file[n:]) // write suffix only
		p.prevFile = file
		p.int(line)
	}
	p.prevLine = line
}

func (p *exporter) fileLine(obj types.Object) (file string, line int) {
	if p.fset != nil {
		pos := p.fset.Position(obj.Pos())
		file = pos.Filename
		line = pos.Line
	}
	return
}

func commonPrefixLen(a, b string) int {
	if len(a) > len(b) {
		a, b = b, a
	}
	// len(a) <= len(b)
	i := 0
	for i < len(a) && a[i] == b[i] {
		i++
	}
	return i
}

func (p *exporter) qualifiedName(obj types.Object) {
	p.string(obj.Name())
	p.pkg(obj.Pkg(), false)
}

func (p *exporter) typ(t types.Type) {
	if t == nil {
		panic(internalError("nil type"))
	}

	// Possible optimization: Anonymous pointer types *T where
	// T is a named type are common. We could canonicalize all
	// such types *T to a single type PT = *T. This would lead
	// to at most one *T entry in typIndex, and all future *T's
	// would be encoded as the respective index directly. Would
	// save 1 byte (pointerTag) per *T and reduce the typIndex
	// size (at the cost of a canonicalization map). We can do
	// this later, without encoding format change.

	// if we saw the type before, write its index (>= 0)
	if i, ok := p.typIndex[t]; ok {
		p.index('T', i)
		return
	}

	// otherwise, remember the type, write the type tag (< 0) and type data
	if trackAllTypes {
		if trace {
			p.tracef("T%d = {>\n", len(p.typIndex))
			defer p.tracef("<\n} ")
		}
		p.typIndex[t] = len(p.typIndex)
	}

	switch t := t.(type) {
	case *types.Named:
		if !trackAllTypes {
			// if we don't track all types, track named types now
			p.typIndex[t] = len(p.typIndex)
		}

		p.tag(namedTag)
		p.pos(t.Obj())
		p.qualifiedName(t.Obj())
		p.typ(t.Underlying())
		if !types.IsInterface(t) {
			p.assocMethods(t)
		}

	case *types.Array:
		p.tag(arrayTag)
		p.int64(t.Len())
		p.typ(t.Elem())

	case *types.Slice:
		p.tag(sliceTag)
		p.typ(t.Elem())

	case *dddSlice:
		p.tag(dddTag)
		p.typ(t.elem)

	case *types.Struct:
		p.tag(structTag)
		p.fieldList(t)

	case *types.Pointer:
		p.tag(pointerTag)
		p.typ(t.Elem())

	case *types.Signature:
		p.tag(signatureTag)
		p.paramList(t.Params(), t.Variadic())
		p.paramList(t.Results(), false)

	case *types.Interface:
		p.tag(interfaceTag)
		p.iface(t)

	case *types.Map:
		p.tag(mapTag)
		p.typ(t.Key())
		p.typ(t.Elem())

	case *types.Chan:
		p.tag(chanTag)
		p.int(int(3 - t.Dir())) // hack
		p.typ(t.Elem())

	default:
		panic(internalErrorf("unexpected type %T: %s", t, t))
	}
}

func (p *exporter) assocMethods(named *types.Named) {
	// Sort methods (for determinism).
	var methods []*types.Func
	for i := 0; i < named.NumMethods(); i++ {
		methods = append(methods, named.Method(i))
	}
	sort.Sort(methodsByName(methods))

	p.int(len(methods))

	if trace && methods != nil {
		p.tracef("associated methods {>\n")
	}

	for i, m := range methods {
		if trace && i > 0 {
			p.tracef("\n")
		}

		p.pos(m)
		name := m.Name()
		p.string(name)
		if !exported(name) {
			p.pkg(m.Pkg(), false)
		}

		sig := m.Type().(*types.Signature)
		p.paramList(types.NewTuple(sig.Recv()), false)
		p.paramList(sig.Params(), sig.Variadic())
		p.paramList(sig.Results(), false)
		p.int(0) // dummy value for go:nointerface pragma - ignored by importer
	}

	if trace && methods != nil {
		p.tracef("<\n} ")
	}
}

type methodsByName []*types.Func

func (x methodsByName) Len() int           { return len(x) }
func (x methodsByName) Swap(i, j int)      { x[i], x[j] = x[j], x[i] }
func (x methodsByName) Less(i, j int) bool { return x[i].Name() < x[j].Name() }

func (p *exporter) fieldList(t *types.Struct) {
	if trace && t.NumFields() > 0 {
		p.tracef("fields {>\n")
		defer p.tracef("<\n} ")
	}

	p.int(t.NumFields())
	for i := 0; i < t.NumFields(); i++ {
		if trace && i > 0 {
			p.tracef("\n")
		}
		p.field(t.Field(i))
		p.string(t.Tag(i))
	}
}

func (p *exporter) field(f *types.Var) {
	if !f.IsField() {
		panic(internalError("field expected"))
	}

	p.pos(f)
	p.fieldName(f)
	p.typ(f.Type())
}

func (p *exporter) iface(t *types.Interface) {
	// TODO(gri): enable importer to load embedded interfaces,
	// then emit Embeddeds and ExplicitMethods separately here.
	p.int(0)

	n := t.NumMethods()
	if trace && n > 0 {
		p.tracef("methods {>\n")
		defer p.tracef("<\n} ")
	}
	p.int(n)
	for i := 0; i < n; i++ {
		if trace && i > 0 {
			p.tracef("\n")
		}
		p.method(t.Method(i))
	}
}

func (p *exporter) method(m *types.Func) {
	sig := m.Type().(*types.Signature)
	if sig.Recv() == nil {
		panic(internalError("method expected"))
	}

	p.pos(m)
	p.string(m.Name())
	if m.Name() != "_" && !token.IsExported(m.Name()) {
		p.pkg(m.Pkg(), false)
	}

	// interface method; no need to encode receiver.
	p.paramList(sig.Params(), sig.Variadic())
	p.paramList(sig.Results(), false)
}

func (p *exporter) fieldName(f *types.Var) {
	name := f.Name()

	if f.Anonymous() {
		// anonymous field - we distinguish between 3 cases:
		// 1) field name matches base type name and is exported
		// 2) field name matches base type name and is not exported
		// 3) field name doesn't match base type name (alias name)
		bname := basetypeName(f.Type())
		if name == bname {
			if token.IsExported(name) {
				name = "" // 1) we don't need to know the field name or package
			} else {
				name = "?" // 2) use unexported name "?" to force package export
			}
		} else {
			// 3) indicate alias and export name as is
			// (this requires an extra "@" but this is a rare case)
			p.string("@")
		}
	}

	p.string(name)
	if name != "" && !token.IsExported(name) {
		p.pkg(f.Pkg(), false)
	}
}

func basetypeName(typ types.Type) string {
	switch typ := deref(typ).(type) {
	case *types.Basic:
		return typ.Name()
	case *types.Named:
		return typ.Obj().Name()
	default:
		return "" // unnamed type
	}
}

func (p *exporter) paramList(params *types.Tuple, variadic bool) {
	// use negative length to indicate unnamed parameters
	// (look at the first parameter only since either all
	// names are present or all are absent)
	n := params.Len()
	if n > 0 && params.At(0).Name() == "" {
		n = -n
	}
	p.int(n)
	for i := 0; i < params.Len(); i++ {
		q := params.At(i)
		t := q.Type()
		if variadic && i == params.Len()-1 {
			t = &dddSlice{t.(*types.Slice).Elem()}
		}
		p.typ(t)
		if n > 0 {
			name := q.Name()
			p.string(name)
			if name != "_" {
				p.pkg(q.Pkg(), false)
			}
		}
		p.string("") // no compiler-specific info
	}
}

func (p *exporter) value(x constant.Value) {
	if trace {
		p.tracef("= ")
	}

	switch x.Kind() {
	case constant.Bool:
		tag := falseTag
		if constant.BoolVal(x) {
			tag = trueTag
		}
		p.tag(tag)

	case constant.Int:
		if v, exact := constant.Int64Val(x); exact {
			// common case: x fits into an int64 - use compact encoding
			p.tag(int64Tag)
			p.int64(v)
			return
		}
		// uncommon case: large x - use float encoding
		// (powers of 2 will be encoded efficiently with exponent)
		p.tag(floatTag)
		p.float(constant.ToFloat(x))

	case constant.Float:
		p.tag(floatTag)
		p.float(x)

	case constant.Complex:
		p.tag(complexTag)
		p.float(constant.Real(x))
		p.float(constant.Imag(x))

	case constant.String:
		p.tag(stringTag)
		p.string(constant.StringVal(x))

	case constant.Unknown:
		// package contains type errors
		p.tag(unknownTag)

	default:
		panic(internalErrorf("unexpected value %v (%T)", x, x))
	}
}

func (p *exporter) float(x constant.Value) {
	if x.Kind() != constant.Float {
		panic(internalErrorf("unexpected constant %v, want float", x))
	}
	// extract sign (there is no -0)
	sign := constant.Sign(x)
	if sign == 0 {
		// x == 0
		p.int(0)
		return
	}
	// x != 0

	var f big.Float
	if v, exact := constant.Float64Val(x); exact {
		// float64
		f.SetFloat64(v)
	} else if num, denom := constant.Num(x), constant.Denom(x); num.Kind() == constant.Int {
		// TODO(gri): add big.Rat accessor to constant.Value.
		r := valueToRat(num)
		f.SetRat(r.Quo(r, valueToRat(denom)))
	} else {
		// Value too large to represent as a fraction => inaccessible.
		// TODO(gri): add big.Float accessor to constant.Value.
		f.SetFloat64(math.MaxFloat64) // FIXME
	}

	// extract exponent such that 0.5 <= m < 1.0
	var m big.Float
	exp := f.MantExp(&m)

	// extract mantissa as *big.Int
	// - set exponent large enough so mant satisfies mant.IsInt()
	// - get *big.Int from mant
	m.SetMantExp(&m, int(m.MinPrec()))
	mant, acc := m.Int(nil)
	if acc != big.Exact {
		panic(internalError("internal error"))
	}

	p.int(sign)
	p.int(exp)
	p.string(string(mant.Bytes()))
}

func valueToRat(x constant.Value) *big.Rat {
	// Convert little-endian to big-endian.
	// I can't believe this is necessary.
	bytes := constant.Bytes(x)
	for i := 0; i < len(bytes)/2; i++ {
		bytes[i], bytes[len(bytes)-1-i] = bytes[len(bytes)-1-i], bytes[i]
	}
	return new(big.Rat).SetInt(new(big.Int).SetBytes(bytes))
}

func (p *exporter) bool(b bool) bool {
	if trace {
		p.tracef("[")
		defer p.tracef("= %v] ", b)
	}

	x := 0
	if b {
		x = 1
	}
	p.int(x)
	return b
}

// ----------------------------------------------------------------------------
// Low-level encoders

func (p *exporter) index(marker byte, index int) {
	if index < 0 {
		panic(internalError("invalid index < 0"))
	}
	if debugFormat {
		p.marker('t')
	}
	if trace {
		p.tracef("%c%d ", marker, index)
	}
	p.rawInt64(int64(index))
}

func (p *exporter) tag(tag int) {
	if tag >= 0 {
		panic(internalError("invalid tag >= 0"))
	}
	if debugFormat {
		p.marker('t')
	}
	if trace {
		p.tracef("%s ", tagString[-tag])
	}
	p.rawInt64(int64(tag))
}

func (p *exporter) int(x int) {
	p.int64(int64(x))
}

func (p *exporter) int64(x int64) {
	if debugFormat {
		p.marker('i')
	}
	if trace {
		p.tracef("%d ", x)
	}
	p.rawInt64(x)
}

func (p *exporter) string(s string) {
	if debugFormat {
		p.marker('s')
	}
	if trace {
		p.tracef("%q ", s)
	}
	// if we saw the string before, write its index (>= 0)
	// (the empty string is mapped to 0)
	if i, ok := p.strIndex[s]; ok {
		p.rawInt64(int64(i))
		return
	}
	// otherwise, remember string and write its negative length and bytes
	p.strIndex[s] = len(p.strIndex)
	p.rawInt64(-int64(len(s)))
	for i := 0; i < len(s); i++ {
		p.rawByte(s[i])
	}
}

// marker emits a marker byte and position information which makes
// it easy for a reader to detect if it is "out of sync". Used for
// debugFormat format only.
func (p *exporter) marker(m byte) {
	p.rawByte(m)
	// Enable this for help tracking down the location
	// of an incorrect marker when running in debugFormat.
	if false && trace {
		p.tracef("#%d ", p.written)
	}
	p.rawInt64(int64(p.written))
}

// rawInt64 should only be used by low-level encoders.
func (p *exporter) rawInt64(x int64) {
	var tmp [binary.MaxVarintLen64]byte
	n := binary.PutVarint(tmp[:], x)
	for i := 0; i < n; i++ {
		p.rawByte(tmp[i])
	}
}

// rawStringln should only be used to emit the initial version string.
func (p *exporter) rawStringln(s string) {
	for i := 0; i < len(s); i++ {
		p.rawByte(s[i])
	}
	p.rawByte('\n')
}

// rawByte is the bottleneck interface to write to p.out.
// rawByte escapes b as follows (any encoding does that
// hides '$'):
//
//	'$'  => '|' 'S'
//	'|'  => '|' '|'
//
// Necessary so other tools can find the end of the
// export data by searching for "$$".
// rawByte should only be used by low-level encoders.
func (p *exporter) rawByte(b byte) {
	switch b {
	case '$':
		// write '$' as '|' 'S'
		b = 'S'
		fallthrough
	case '|':
		// write '|' as '|' '|'
		p.out.WriteByte('|')
		p.written++
	}
	p.out.WriteByte(b)
	p.written++
}

// tracef is like fmt.Printf but it rewrites the format string
// to take care of indentation.
func (p *exporter) tracef(format string, args ...interface{}) {
	if strings.ContainsAny(format, "<>\n") {
		var buf bytes.Buffer
		for i := 0; i < len(format); i++ {
			// no need to deal with runes
			ch := format[i]
			switch ch {
			case '>':
				p.indent++
				continue
			case '<':
				p.indent--
				continue
			}
			buf.WriteByte(ch)
			if ch == '\n' {
				for j := p.indent; j > 0; j-- {
					buf.WriteString(".  ")
				}
			}
		}
		format = buf.String()
	}
	fmt.Printf(format, args...)
}

// Debugging support.
// (tagString is only used when tracing is enabled)
var tagString = [...]string{
	// Packages
	-packageTag: "package",

	// Types
	-namedTag:     "named type",
	-arrayTag:     "array",
	-sliceTag:     "slice",
	-dddTag:       "ddd",
	-structTag:    "struct",
	-pointerTag:   "pointer",
	-signatureTag: "signature",
	-interfaceTag: "interface",
	-mapTag:       "map",
	-chanTag:      "chan",

	// Values
	-falseTag:    "false",
	-trueTag:     "true",
	-int64Tag:    "int64",
	-floatTag:    "float",
	-fractionTag: "fraction",
	-complexTag:  "complex",
	-stringTag:   "string",
	-unknownTag:  "unknown",

	// Type aliases
	-aliasTag: "alias",
}
 07070100000F73000081A4000000000000000000000001645E367C000062A0000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/gcimporter/bimport.go  // Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// This file is a copy of $GOROOT/src/go/internal/gcimporter/bimport.go.

package gcimporter

import (
	"encoding/binary"
	"fmt"
	"go/constant"
	"go/token"
	"go/types"
	"sort"
	"strconv"
	"strings"
	"sync"
	"unicode"
	"unicode/utf8"
)

type importer struct {
	imports    map[string]*types.Package
	data       []byte
	importpath string
	buf        []byte // for reading strings
	version    int    // export format version

	// object lists
	strList       []string           // in order of appearance
	pathList      []string           // in order of appearance
	pkgList       []*types.Package   // in order of appearance
	typList       []types.Type       // in order of appearance
	interfaceList []*types.Interface // for delayed completion only
	trackAllTypes bool

	// position encoding
	posInfoFormat bool
	prevFile      string
	prevLine      int
	fake          fakeFileSet

	// debugging support
	debugFormat bool
	read        int // bytes read
}

// BImportData imports a package from the serialized package data
// and returns the number of bytes consumed and a reference to the package.
// If the export data version is not recognized or the format is otherwise
// compromised, an error is returned.
func BImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (_ int, pkg *types.Package, err error) {
	// catch panics and return them as errors
	const currentVersion = 6
	version := -1 // unknown version
	defer func() {
		if e := recover(); e != nil {
			// Return a (possibly nil or incomplete) package unchanged (see #16088).
			if version > currentVersion {
				err = fmt.Errorf("cannot import %q (%v), export data is newer version - update tool", path, e)
			} else {
				err = fmt.Errorf("cannot import %q (%v), possibly version skew - reinstall package", path, e)
			}
		}
	}()

	p := importer{
		imports:    imports,
		data:       data,
		importpath: path,
		version:    version,
		strList:    []string{""}, // empty string is mapped to 0
		pathList:   []string{""}, // empty string is mapped to 0
		fake: fakeFileSet{
			fset:  fset,
			files: make(map[string]*fileInfo),
		},
	}
	defer p.fake.setLines() // set lines for files in fset

	// read version info
	var versionstr string
	if b := p.rawByte(); b == 'c' || b == 'd' {
		// Go1.7 encoding; first byte encodes low-level
		// encoding format (compact vs debug).
		// For backward-compatibility only (avoid problems with
		// old installed packages). Newly compiled packages use
		// the extensible format string.
		// TODO(gri) Remove this support eventually; after Go1.8.
		if b == 'd' {
			p.debugFormat = true
		}
		p.trackAllTypes = p.rawByte() == 'a'
		p.posInfoFormat = p.int() != 0
		versionstr = p.string()
		if versionstr == "v1" {
			version = 0
		}
	} else {
		// Go1.8 extensible encoding
		// read version string and extract version number (ignore anything after the version number)
		versionstr = p.rawStringln(b)
		if s := strings.SplitN(versionstr, " ", 3); len(s) >= 2 && s[0] == "version" {
			if v, err := strconv.Atoi(s[1]); err == nil && v > 0 {
				version = v
			}
		}
	}
	p.version = version

	// read version specific flags - extend as necessary
	switch p.version {
	// case currentVersion:
	// 	...
	//	fallthrough
	case currentVersion, 5, 4, 3, 2, 1:
		p.debugFormat = p.rawStringln(p.rawByte()) == "debug"
		p.trackAllTypes = p.int() != 0
		p.posInfoFormat = p.int() != 0
	case 0:
		// Go1.7 encoding format - nothing to do here
	default:
		errorf("unknown bexport format version %d (%q)", p.version, versionstr)
	}

	// --- generic export data ---

	// populate typList with predeclared "known" types
	p.typList = append(p.typList, predeclared()...)

	// read package data
	pkg = p.pkg()

	// read objects of phase 1 only (see cmd/compile/internal/gc/bexport.go)
	objcount := 0
	for {
		tag := p.tagOrIndex()
		if tag == endTag {
			break
		}
		p.obj(tag)
		objcount++
	}

	// self-verification
	if count := p.int(); count != objcount {
		errorf("got %d objects; want %d", objcount, count)
	}

	// ignore compiler-specific import data

	// complete interfaces
	// TODO(gri) re-investigate if we still need to do this in a delayed fashion
	for _, typ := range p.interfaceList {
		typ.Complete()
	}

	// record all referenced packages as imports
	list := append(([]*types.Package)(nil), p.pkgList[1:]...)
	sort.Sort(byPath(list))
	pkg.SetImports(list)

	// package was imported completely and without errors
	pkg.MarkComplete()

	return p.read, pkg, nil
}

func errorf(format string, args ...interface{}) {
	panic(fmt.Sprintf(format, args...))
}

func (p *importer) pkg() *types.Package {
	// if the package was seen before, i is its index (>= 0)
	i := p.tagOrIndex()
	if i >= 0 {
		return p.pkgList[i]
	}

	// otherwise, i is the package tag (< 0)
	if i != packageTag {
		errorf("unexpected package tag %d version %d", i, p.version)
	}

	// read package data
	name := p.string()
	var path string
	if p.version >= 5 {
		path = p.path()
	} else {
		path = p.string()
	}
	if p.version >= 6 {
		p.int() // package height; unused by go/types
	}

	// we should never see an empty package name
	if name == "" {
		errorf("empty package name in import")
	}

	// an empty path denotes the package we are currently importing;
	// it must be the first package we see
	if (path == "") != (len(p.pkgList) == 0) {
		errorf("package path %q for pkg index %d", path, len(p.pkgList))
	}

	// if the package was imported before, use that one; otherwise create a new one
	if path == "" {
		path = p.importpath
	}
	pkg := p.imports[path]
	if pkg == nil {
		pkg = types.NewPackage(path, name)
		p.imports[path] = pkg
	} else if pkg.Name() != name {
		errorf("conflicting names %s and %s for package %q", pkg.Name(), name, path)
	}
	p.pkgList = append(p.pkgList, pkg)

	return pkg
}

// objTag returns the tag value for each object kind.
func objTag(obj types.Object) int {
	switch obj.(type) {
	case *types.Const:
		return constTag
	case *types.TypeName:
		return typeTag
	case *types.Var:
		return varTag
	case *types.Func:
		return funcTag
	default:
		errorf("unexpected object: %v (%T)", obj, obj) // panics
		panic("unreachable")
	}
}

func sameObj(a, b types.Object) bool {
	// Because unnamed types are not canonicalized, we cannot simply compare types for
	// (pointer) identity.
	// Ideally we'd check equality of constant values as well, but this is good enough.
	return objTag(a) == objTag(b) && types.Identical(a.Type(), b.Type())
}

func (p *importer) declare(obj types.Object) {
	pkg := obj.Pkg()
	if alt := pkg.Scope().Insert(obj); alt != nil {
		// This can only trigger if we import a (non-type) object a second time.
		// Excluding type aliases, this cannot happen because 1) we only import a package
		// once; and b) we ignore compiler-specific export data which may contain
		// functions whose inlined function bodies refer to other functions that
		// were already imported.
		// However, type aliases require reexporting the original type, so we need
		// to allow it (see also the comment in cmd/compile/internal/gc/bimport.go,
		// method importer.obj, switch case importing functions).
		// TODO(gri) review/update this comment once the gc compiler handles type aliases.
		if !sameObj(obj, alt) {
			errorf("inconsistent import:\n\t%v\npreviously imported as:\n\t%v\n", obj, alt)
		}
	}
}

func (p *importer) obj(tag int) {
	switch tag {
	case constTag:
		pos := p.pos()
		pkg, name := p.qualifiedName()
		typ := p.typ(nil, nil)
		val := p.value()
		p.declare(types.NewConst(pos, pkg, name, typ, val))

	case aliasTag:
		// TODO(gri) verify type alias hookup is correct
		pos := p.pos()
		pkg, name := p.qualifiedName()
		typ := p.typ(nil, nil)
		p.declare(types.NewTypeName(pos, pkg, name, typ))

	case typeTag:
		p.typ(nil, nil)

	case varTag:
		pos := p.pos()
		pkg, name := p.qualifiedName()
		typ := p.typ(nil, nil)
		p.declare(types.NewVar(pos, pkg, name, typ))

	case funcTag:
		pos := p.pos()
		pkg, name := p.qualifiedName()
		params, isddd := p.paramList()
		result, _ := p.paramList()
		sig := types.NewSignature(nil, params, result, isddd)
		p.declare(types.NewFunc(pos, pkg, name, sig))

	default:
		errorf("unexpected object tag %d", tag)
	}
}

const deltaNewFile = -64 // see cmd/compile/internal/gc/bexport.go

func (p *importer) pos() token.Pos {
	if !p.posInfoFormat {
		return token.NoPos
	}

	file := p.prevFile
	line := p.prevLine
	delta := p.int()
	line += delta
	if p.version >= 5 {
		if delta == deltaNewFile {
			if n := p.int(); n >= 0 {
				// file changed
				file = p.path()
				line = n
			}
		}
	} else {
		if delta == 0 {
			if n := p.int(); n >= 0 {
				// file changed
				file = p.prevFile[:n] + p.string()
				line = p.int()
			}
		}
	}
	p.prevFile = file
	p.prevLine = line

	return p.fake.pos(file, line, 0)
}

// Synthesize a token.Pos
type fakeFileSet struct {
	fset  *token.FileSet
	files map[string]*fileInfo
}

type fileInfo struct {
	file     *token.File
	lastline int
}

const maxlines = 64 * 1024

func (s *fakeFileSet) pos(file string, line, column int) token.Pos {
	// TODO(mdempsky): Make use of column.

	// Since we don't know the set of needed file positions, we reserve maxlines
	// positions per file. We delay calling token.File.SetLines until all
	// positions have been calculated (by way of fakeFileSet.setLines), so that
	// we can avoid setting unnecessary lines. See also golang/go#46586.
	f := s.files[file]
	if f == nil {
		f = &fileInfo{file: s.fset.AddFile(file, -1, maxlines)}
		s.files[file] = f
	}
	if line > maxlines {
		line = 1
	}
	if line > f.lastline {
		f.lastline = line
	}

	// Return a fake position assuming that f.file consists only of newlines.
	return token.Pos(f.file.Base() + line - 1)
}

func (s *fakeFileSet) setLines() {
	fakeLinesOnce.Do(func() {
		fakeLines = make([]int, maxlines)
		for i := range fakeLines {
			fakeLines[i] = i
		}
	})
	for _, f := range s.files {
		f.file.SetLines(fakeLines[:f.lastline])
	}
}

var (
	fakeLines     []int
	fakeLinesOnce sync.Once
)

func (p *importer) qualifiedName() (pkg *types.Package, name string) {
	name = p.string()
	pkg = p.pkg()
	return
}

func (p *importer) record(t types.Type) {
	p.typList = append(p.typList, t)
}

// A dddSlice is a types.Type representing ...T parameters.
// It only appears for parameter types and does not escape
// the importer.
type dddSlice struct {
	elem types.Type
}

func (t *dddSlice) Underlying() types.Type { return t }
func (t *dddSlice) String() string         { return "..." + t.elem.String() }

// parent is the package which declared the type; parent == nil means
// the package currently imported. The parent package is needed for
// exported struct fields and interface methods which don't contain
// explicit package information in the export data.
//
// A non-nil tname is used as the "owner" of the result type; i.e.,
// the result type is the underlying type of tname. tname is used
// to give interface methods a named receiver type where possible.
func (p *importer) typ(parent *types.Package, tname *types.Named) types.Type {
	// if the type was seen before, i is its index (>= 0)
	i := p.tagOrIndex()
	if i >= 0 {
		return p.typList[i]
	}

	// otherwise, i is the type tag (< 0)
	switch i {
	case namedTag:
		// read type object
		pos := p.pos()
		parent, name := p.qualifiedName()
		scope := parent.Scope()
		obj := scope.Lookup(name)

		// if the object doesn't exist yet, create and insert it
		if obj == nil {
			obj = types.NewTypeName(pos, parent, name, nil)
			scope.Insert(obj)
		}

		if _, ok := obj.(*types.TypeName); !ok {
			errorf("pkg = %s, name = %s => %s", parent, name, obj)
		}

		// associate new named type with obj if it doesn't exist yet
		t0 := types.NewNamed(obj.(*types.TypeName), nil, nil)

		// but record the existing type, if any
		tname := obj.Type().(*types.Named) // tname is either t0 or the existing type
		p.record(tname)

		// read underlying type
		t0.SetUnderlying(p.typ(parent, t0))

		// interfaces don't have associated methods
		if types.IsInterface(t0) {
			return tname
		}

		// read associated methods
		for i := p.int(); i > 0; i-- {
			// TODO(gri) replace this with something closer to fieldName
			pos := p.pos()
			name := p.string()
			if !exported(name) {
				p.pkg()
			}

			recv, _ := p.paramList() // TODO(gri) do we need a full param list for the receiver?
			params, isddd := p.paramList()
			result, _ := p.paramList()
			p.int() // go:nointerface pragma - discarded

			sig := types.NewSignature(recv.At(0), params, result, isddd)
			t0.AddMethod(types.NewFunc(pos, parent, name, sig))
		}

		return tname

	case arrayTag:
		t := new(types.Array)
		if p.trackAllTypes {
			p.record(t)
		}

		n := p.int64()
		*t = *types.NewArray(p.typ(parent, nil), n)
		return t

	case sliceTag:
		t := new(types.Slice)
		if p.trackAllTypes {
			p.record(t)
		}

		*t = *types.NewSlice(p.typ(parent, nil))
		return t

	case dddTag:
		t := new(dddSlice)
		if p.trackAllTypes {
			p.record(t)
		}

		t.elem = p.typ(parent, nil)
		return t

	case structTag:
		t := new(types.Struct)
		if p.trackAllTypes {
			p.record(t)
		}

		*t = *types.NewStruct(p.fieldList(parent))
		return t

	case pointerTag:
		t := new(types.Pointer)
		if p.trackAllTypes {
			p.record(t)
		}

		*t = *types.NewPointer(p.typ(parent, nil))
		return t

	case signatureTag:
		t := new(types.Signature)
		if p.trackAllTypes {
			p.record(t)
		}

		params, isddd := p.paramList()
		result, _ := p.paramList()
		*t = *types.NewSignature(nil, params, result, isddd)
		return t

	case interfaceTag:
		// Create a dummy entry in the type list. This is safe because we
		// cannot expect the interface type to appear in a cycle, as any
		// such cycle must contain a named type which would have been
		// first defined earlier.
		// TODO(gri) Is this still true now that we have type aliases?
		// See issue #23225.
		n := len(p.typList)
		if p.trackAllTypes {
			p.record(nil)
		}

		var embeddeds []types.Type
		for n := p.int(); n > 0; n-- {
			p.pos()
			embeddeds = append(embeddeds, p.typ(parent, nil))
		}

		t := newInterface(p.methodList(parent, tname), embeddeds)
		p.interfaceList = append(p.interfaceList, t)
		if p.trackAllTypes {
			p.typList[n] = t
		}
		return t

	case mapTag:
		t := new(types.Map)
		if p.trackAllTypes {
			p.record(t)
		}

		key := p.typ(parent, nil)
		val := p.typ(parent, nil)
		*t = *types.NewMap(key, val)
		return t

	case chanTag:
		t := new(types.Chan)
		if p.trackAllTypes {
			p.record(t)
		}

		dir := chanDir(p.int())
		val := p.typ(parent, nil)
		*t = *types.NewChan(dir, val)
		return t

	default:
		errorf("unexpected type tag %d", i) // panics
		panic("unreachable")
	}
}

func chanDir(d int) types.ChanDir {
	// tag values must match the constants in cmd/compile/internal/gc/go.go
	switch d {
	case 1 /* Crecv */ :
		return types.RecvOnly
	case 2 /* Csend */ :
		return types.SendOnly
	case 3 /* Cboth */ :
		return types.SendRecv
	default:
		errorf("unexpected channel dir %d", d)
		return 0
	}
}

func (p *importer) fieldList(parent *types.Package) (fields []*types.Var, tags []string) {
	if n := p.int(); n > 0 {
		fields = make([]*types.Var, n)
		tags = make([]string, n)
		for i := range fields {
			fields[i], tags[i] = p.field(parent)
		}
	}
	return
}

func (p *importer) field(parent *types.Package) (*types.Var, string) {
	pos := p.pos()
	pkg, name, alias := p.fieldName(parent)
	typ := p.typ(parent, nil)
	tag := p.string()

	anonymous := false
	if name == "" {
		// anonymous field - typ must be T or *T and T must be a type name
		switch typ := deref(typ).(type) {
		case *types.Basic: // basic types are named types
			pkg = nil // // objects defined in Universe scope have no package
			name = typ.Name()
		case *types.Named:
			name = typ.Obj().Name()
		default:
			errorf("named base type expected")
		}
		anonymous = true
	} else if alias {
		// anonymous field: we have an explicit name because it's an alias
		anonymous = true
	}

	return types.NewField(pos, pkg, name, typ, anonymous), tag
}

func (p *importer) methodList(parent *types.Package, baseType *types.Named) (methods []*types.Func) {
	if n := p.int(); n > 0 {
		methods = make([]*types.Func, n)
		for i := range methods {
			methods[i] = p.method(parent, baseType)
		}
	}
	return
}

func (p *importer) method(parent *types.Package, baseType *types.Named) *types.Func {
	pos := p.pos()
	pkg, name, _ := p.fieldName(parent)
	// If we don't have a baseType, use a nil receiver.
	// A receiver using the actual interface type (which
	// we don't know yet) will be filled in when we call
	// types.Interface.Complete.
	var recv *types.Var
	if baseType != nil {
		recv = types.NewVar(token.NoPos, parent, "", baseType)
	}
	params, isddd := p.paramList()
	result, _ := p.paramList()
	sig := types.NewSignature(recv, params, result, isddd)
	return types.NewFunc(pos, pkg, name, sig)
}

func (p *importer) fieldName(parent *types.Package) (pkg *types.Package, name string, alias bool) {
	name = p.string()
	pkg = parent
	if pkg == nil {
		// use the imported package instead
		pkg = p.pkgList[0]
	}
	if p.version == 0 && name == "_" {
		// version 0 didn't export a package for _ fields
		return
	}
	switch name {
	case "":
		// 1) field name matches base type name and is exported: nothing to do
	case "?":
		// 2) field name matches base type name and is not exported: need package
		name = ""
		pkg = p.pkg()
	case "@":
		// 3) field name doesn't match type name (alias)
		name = p.string()
		alias = true
		fallthrough
	default:
		if !exported(name) {
			pkg = p.pkg()
		}
	}
	return
}

func (p *importer) paramList() (*types.Tuple, bool) {
	n := p.int()
	if n == 0 {
		return nil, false
	}
	// negative length indicates unnamed parameters
	named := true
	if n < 0 {
		n = -n
		named = false
	}
	// n > 0
	params := make([]*types.Var, n)
	isddd := false
	for i := range params {
		params[i], isddd = p.param(named)
	}
	return types.NewTuple(params...), isddd
}

func (p *importer) param(named bool) (*types.Var, bool) {
	t := p.typ(nil, nil)
	td, isddd := t.(*dddSlice)
	if isddd {
		t = types.NewSlice(td.elem)
	}

	var pkg *types.Package
	var name string
	if named {
		name = p.string()
		if name == "" {
			errorf("expected named parameter")
		}
		if name != "_" {
			pkg = p.pkg()
		}
		if i := strings.Index(name, "·"); i > 0 {
			name = name[:i] // cut off gc-specific parameter numbering
		}
	}

	// read and discard compiler-specific info
	p.string()

	return types.NewVar(token.NoPos, pkg, name, t), isddd
}

func exported(name string) bool {
	ch, _ := utf8.DecodeRuneInString(name)
	return unicode.IsUpper(ch)
}

func (p *importer) value() constant.Value {
	switch tag := p.tagOrIndex(); tag {
	case falseTag:
		return constant.MakeBool(false)
	case trueTag:
		return constant.MakeBool(true)
	case int64Tag:
		return constant.MakeInt64(p.int64())
	case floatTag:
		return p.float()
	case complexTag:
		re := p.float()
		im := p.float()
		return constant.BinaryOp(re, token.ADD, constant.MakeImag(im))
	case stringTag:
		return constant.MakeString(p.string())
	case unknownTag:
		return constant.MakeUnknown()
	default:
		errorf("unexpected value tag %d", tag) // panics
		panic("unreachable")
	}
}

func (p *importer) float() constant.Value {
	sign := p.int()
	if sign == 0 {
		return constant.MakeInt64(0)
	}

	exp := p.int()
	mant := []byte(p.string()) // big endian

	// remove leading 0's if any
	for len(mant) > 0 && mant[0] == 0 {
		mant = mant[1:]
	}

	// convert to little endian
	// TODO(gri) go/constant should have a more direct conversion function
	//           (e.g., once it supports a big.Float based implementation)
	for i, j := 0, len(mant)-1; i < j; i, j = i+1, j-1 {
		mant[i], mant[j] = mant[j], mant[i]
	}

	// adjust exponent (constant.MakeFromBytes creates an integer value,
	// but mant represents the mantissa bits such that 0.5 <= mant < 1.0)
	exp -= len(mant) << 3
	if len(mant) > 0 {
		for msd := mant[len(mant)-1]; msd&0x80 == 0; msd <<= 1 {
			exp++
		}
	}

	x := constant.MakeFromBytes(mant)
	switch {
	case exp < 0:
		d := constant.Shift(constant.MakeInt64(1), token.SHL, uint(-exp))
		x = constant.BinaryOp(x, token.QUO, d)
	case exp > 0:
		x = constant.Shift(x, token.SHL, uint(exp))
	}

	if sign < 0 {
		x = constant.UnaryOp(token.SUB, x, 0)
	}
	return x
}

// ----------------------------------------------------------------------------
// Low-level decoders

func (p *importer) tagOrIndex() int {
	if p.debugFormat {
		p.marker('t')
	}

	return int(p.rawInt64())
}

func (p *importer) int() int {
	x := p.int64()
	if int64(int(x)) != x {
		errorf("exported integer too large")
	}
	return int(x)
}

func (p *importer) int64() int64 {
	if p.debugFormat {
		p.marker('i')
	}

	return p.rawInt64()
}

func (p *importer) path() string {
	if p.debugFormat {
		p.marker('p')
	}
	// if the path was seen before, i is its index (>= 0)
	// (the empty string is at index 0)
	i := p.rawInt64()
	if i >= 0 {
		return p.pathList[i]
	}
	// otherwise, i is the negative path length (< 0)
	a := make([]string, -i)
	for n := range a {
		a[n] = p.string()
	}
	s := strings.Join(a, "/")
	p.pathList = append(p.pathList, s)
	return s
}

func (p *importer) string() string {
	if p.debugFormat {
		p.marker('s')
	}
	// if the string was seen before, i is its index (>= 0)
	// (the empty string is at index 0)
	i := p.rawInt64()
	if i >= 0 {
		return p.strList[i]
	}
	// otherwise, i is the negative string length (< 0)
	if n := int(-i); n <= cap(p.buf) {
		p.buf = p.buf[:n]
	} else {
		p.buf = make([]byte, n)
	}
	for i := range p.buf {
		p.buf[i] = p.rawByte()
	}
	s := string(p.buf)
	p.strList = append(p.strList, s)
	return s
}

func (p *importer) marker(want byte) {
	if got := p.rawByte(); got != want {
		errorf("incorrect marker: got %c; want %c (pos = %d)", got, want, p.read)
	}

	pos := p.read
	if n := int(p.rawInt64()); n != pos {
		errorf("incorrect position: got %d; want %d", n, pos)
	}
}

// rawInt64 should only be used by low-level decoders.
func (p *importer) rawInt64() int64 {
	i, err := binary.ReadVarint(p)
	if err != nil {
		errorf("read error: %v", err)
	}
	return i
}

// rawStringln should only be used to read the initial version string.
func (p *importer) rawStringln(b byte) string {
	p.buf = p.buf[:0]
	for b != '\n' {
		p.buf = append(p.buf, b)
		b = p.rawByte()
	}
	return string(p.buf)
}

// needed for binary.ReadVarint in rawInt64
func (p *importer) ReadByte() (byte, error) {
	return p.rawByte(), nil
}

// byte is the bottleneck interface for reading p.data.
// It unescapes '|' 'S' to '$' and '|' '|' to '|'.
// rawByte should only be used by low-level decoders.
func (p *importer) rawByte() byte {
	b := p.data[0]
	r := 1
	if b == '|' {
		b = p.data[1]
		r = 2
		switch b {
		case 'S':
			b = '$'
		case '|':
			// nothing to do
		default:
			errorf("unexpected escape sequence in export data")
		}
	}
	p.data = p.data[r:]
	p.read += r
	return b

}

// ----------------------------------------------------------------------------
// Export format

// Tags. Must be < 0.
const (
	// Objects
	packageTag = -(iota + 1)
	constTag
	typeTag
	varTag
	funcTag
	endTag

	// Types
	namedTag
	arrayTag
	sliceTag
	dddTag
	structTag
	pointerTag
	signatureTag
	interfaceTag
	mapTag
	chanTag

	// Values
	falseTag
	trueTag
	int64Tag
	floatTag
	fractionTag // not used by gc
	complexTag
	stringTag
	nilTag     // only used by gc (appears in exported inlined function bodies)
	unknownTag // not used by gc (only appears in packages with errors)

	// Type aliases
	aliasTag
)

var predeclOnce sync.Once
var predecl []types.Type // initialized lazily

func predeclared() []types.Type {
	predeclOnce.Do(func() {
		// initialize lazily to be sure that all
		// elements have been initialized before
		predecl = []types.Type{ // basic types
			types.Typ[types.Bool],
			types.Typ[types.Int],
			types.Typ[types.Int8],
			types.Typ[types.Int16],
			types.Typ[types.Int32],
			types.Typ[types.Int64],
			types.Typ[types.Uint],
			types.Typ[types.Uint8],
			types.Typ[types.Uint16],
			types.Typ[types.Uint32],
			types.Typ[types.Uint64],
			types.Typ[types.Uintptr],
			types.Typ[types.Float32],
			types.Typ[types.Float64],
			types.Typ[types.Complex64],
			types.Typ[types.Complex128],
			types.Typ[types.String],

			// basic type aliases
			types.Universe.Lookup("byte").Type(),
			types.Universe.Lookup("rune").Type(),

			// error
			types.Universe.Lookup("error").Type(),

			// untyped types
			types.Typ[types.UntypedBool],
			types.Typ[types.UntypedInt],
			types.Typ[types.UntypedRune],
			types.Typ[types.UntypedFloat],
			types.Typ[types.UntypedComplex],
			types.Typ[types.UntypedString],
			types.Typ[types.UntypedNil],

			// package unsafe
			types.Typ[types.UnsafePointer],

			// invalid type
			types.Typ[types.Invalid], // only appears in packages with errors

			// used internally by gc; never used by this package or in .a files
			anyType{},
		}
		predecl = append(predecl, additionalPredeclared()...)
	})
	return predecl
}

type anyType struct{}

func (t anyType) Underlying() types.Type { return t }
func (t anyType) String() string         { return "any" }
07070100000F74000081A4000000000000000000000001645E367C00000A72000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/gcimporter/exportdata.go   // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// This file is a copy of $GOROOT/src/go/internal/gcimporter/exportdata.go.

// This file implements FindExportData.

package gcimporter

import (
	"bufio"
	"fmt"
	"io"
	"strconv"
	"strings"
)

func readGopackHeader(r *bufio.Reader) (name string, size int64, err error) {
	// See $GOROOT/include/ar.h.
	hdr := make([]byte, 16+12+6+6+8+10+2)
	_, err = io.ReadFull(r, hdr)
	if err != nil {
		return
	}
	// leave for debugging
	if false {
		fmt.Printf("header: %s", hdr)
	}
	s := strings.TrimSpace(string(hdr[16+12+6+6+8:][:10]))
	length, err := strconv.Atoi(s)
	size = int64(length)
	if err != nil || hdr[len(hdr)-2] != '`' || hdr[len(hdr)-1] != '\n' {
		err = fmt.Errorf("invalid archive header")
		return
	}
	name = strings.TrimSpace(string(hdr[:16]))
	return
}

// FindExportData positions the reader r at the beginning of the
// export data section of an underlying GC-created object/archive
// file by reading from it. The reader must be positioned at the
// start of the file before calling this function. The hdr result
// is the string before the export data, either "$$" or "$$B".
// The size result is the length of the export data in bytes, or -1 if not known.
func FindExportData(r *bufio.Reader) (hdr string, size int64, err error) {
	// Read first line to make sure this is an object file.
	line, err := r.ReadSlice('\n')
	if err != nil {
		err = fmt.Errorf("can't find export data (%v)", err)
		return
	}

	if string(line) == "!<arch>\n" {
		// Archive file. Scan to __.PKGDEF.
		var name string
		if name, size, err = readGopackHeader(r); err != nil {
			return
		}

		// First entry should be __.PKGDEF.
		if name != "__.PKGDEF" {
			err = fmt.Errorf("go archive is missing __.PKGDEF")
			return
		}

		// Read first line of __.PKGDEF data, so that line
		// is once again the first line of the input.
		if line, err = r.ReadSlice('\n'); err != nil {
			err = fmt.Errorf("can't find export data (%v)", err)
			return
		}
		size -= int64(len(line))
	}

	// Now at __.PKGDEF in archive or still at beginning of file.
	// Either way, line should begin with "go object ".
	if !strings.HasPrefix(string(line), "go object ") {
		err = fmt.Errorf("not a Go object file")
		return
	}

	// Skip over object header to export data.
	// Begins after first line starting with $$.
	for line[0] != '$' {
		if line, err = r.ReadSlice('\n'); err != nil {
			err = fmt.Errorf("can't find export data (%v)", err)
			return
		}
		size -= int64(len(line))
	}
	hdr = string(line)
	if size < 0 {
		size = -1
	}

	return
}
  07070100000F75000081A4000000000000000000000001645E367C00001C5F000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go   // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// This file is a reduced copy of $GOROOT/src/go/internal/gcimporter/gcimporter.go.

// Package gcimporter provides various functions for reading
// gc-generated object files that can be used to implement the
// Importer interface defined by the Go 1.5 standard library package.
//
// The encoding is deterministic: if the encoder is applied twice to
// the same types.Package data structure, both encodings are equal.
// This property may be important to avoid spurious changes in
// applications such as build systems.
//
// However, the encoder is not necessarily idempotent. Importing an
// exported package may yield a types.Package that, while it
// represents the same set of Go types as the original, may differ in
// the details of its internal representation. Because of these
// differences, re-encoding the imported package may yield a
// different, but equally valid, encoding of the package.
package gcimporter // import "golang.org/x/tools/internal/gcimporter"

import (
	"bufio"
	"bytes"
	"fmt"
	"go/build"
	"go/token"
	"go/types"
	"io"
	"io/ioutil"
	"os"
	"os/exec"
	"path/filepath"
	"strings"
	"sync"
)

const (
	// Enable debug during development: it adds some additional checks, and
	// prevents errors from being recovered.
	debug = false

	// If trace is set, debugging output is printed to std out.
	trace = false
)

var exportMap sync.Map // package dir → func() (string, bool)

// lookupGorootExport returns the location of the export data
// (normally found in the build cache, but located in GOROOT/pkg
// in prior Go releases) for the package located in pkgDir.
//
// (We use the package's directory instead of its import path
// mainly to simplify handling of the packages in src/vendor
// and cmd/vendor.)
func lookupGorootExport(pkgDir string) (string, bool) {
	f, ok := exportMap.Load(pkgDir)
	if !ok {
		var (
			listOnce   sync.Once
			exportPath string
		)
		f, _ = exportMap.LoadOrStore(pkgDir, func() (string, bool) {
			listOnce.Do(func() {
				cmd := exec.Command("go", "list", "-export", "-f", "{{.Export}}", pkgDir)
				cmd.Dir = build.Default.GOROOT
				var output []byte
				output, err := cmd.Output()
				if err != nil {
					return
				}

				exports := strings.Split(string(bytes.TrimSpace(output)), "\n")
				if len(exports) != 1 {
					return
				}

				exportPath = exports[0]
			})

			return exportPath, exportPath != ""
		})
	}

	return f.(func() (string, bool))()
}

var pkgExts = [...]string{".a", ".o"}

// FindPkg returns the filename and unique package id for an import
// path based on package information provided by build.Import (using
// the build.Default build.Context). A relative srcDir is interpreted
// relative to the current working directory.
// If no file was found, an empty filename is returned.
func FindPkg(path, srcDir string) (filename, id string) {
	if path == "" {
		return
	}

	var noext string
	switch {
	default:
		// "x" -> "$GOPATH/pkg/$GOOS_$GOARCH/x.ext", "x"
		// Don't require the source files to be present.
		if abs, err := filepath.Abs(srcDir); err == nil { // see issue 14282
			srcDir = abs
		}
		bp, _ := build.Import(path, srcDir, build.FindOnly|build.AllowBinary)
		if bp.PkgObj == "" {
			var ok bool
			if bp.Goroot && bp.Dir != "" {
				filename, ok = lookupGorootExport(bp.Dir)
			}
			if !ok {
				id = path // make sure we have an id to print in error message
				return
			}
		} else {
			noext = strings.TrimSuffix(bp.PkgObj, ".a")
			id = bp.ImportPath
		}

	case build.IsLocalImport(path):
		// "./x" -> "/this/directory/x.ext", "/this/directory/x"
		noext = filepath.Join(srcDir, path)
		id = noext

	case filepath.IsAbs(path):
		// for completeness only - go/build.Import
		// does not support absolute imports
		// "/x" -> "/x.ext", "/x"
		noext = path
		id = path
	}

	if false { // for debugging
		if path != id {
			fmt.Printf("%s -> %s\n", path, id)
		}
	}

	if filename != "" {
		if f, err := os.Stat(filename); err == nil && !f.IsDir() {
			return
		}
	}

	// try extensions
	for _, ext := range pkgExts {
		filename = noext + ext
		if f, err := os.Stat(filename); err == nil && !f.IsDir() {
			return
		}
	}

	filename = "" // not found
	return
}

// Import imports a gc-generated package given its import path and srcDir, adds
// the corresponding package object to the packages map, and returns the object.
// The packages map must contain all packages already imported.
func Import(packages map[string]*types.Package, path, srcDir string, lookup func(path string) (io.ReadCloser, error)) (pkg *types.Package, err error) {
	var rc io.ReadCloser
	var filename, id string
	if lookup != nil {
		// With custom lookup specified, assume that caller has
		// converted path to a canonical import path for use in the map.
		if path == "unsafe" {
			return types.Unsafe, nil
		}
		id = path

		// No need to re-import if the package was imported completely before.
		if pkg = packages[id]; pkg != nil && pkg.Complete() {
			return
		}
		f, err := lookup(path)
		if err != nil {
			return nil, err
		}
		rc = f
	} else {
		filename, id = FindPkg(path, srcDir)
		if filename == "" {
			if path == "unsafe" {
				return types.Unsafe, nil
			}
			return nil, fmt.Errorf("can't find import: %q", id)
		}

		// no need to re-import if the package was imported completely before
		if pkg = packages[id]; pkg != nil && pkg.Complete() {
			return
		}

		// open file
		f, err := os.Open(filename)
		if err != nil {
			return nil, err
		}
		defer func() {
			if err != nil {
				// add file name to error
				err = fmt.Errorf("%s: %v", filename, err)
			}
		}()
		rc = f
	}
	defer rc.Close()

	var hdr string
	var size int64
	buf := bufio.NewReader(rc)
	if hdr, size, err = FindExportData(buf); err != nil {
		return
	}

	switch hdr {
	case "$$B\n":
		var data []byte
		data, err = ioutil.ReadAll(buf)
		if err != nil {
			break
		}

		// TODO(gri): allow clients of go/importer to provide a FileSet.
		// Or, define a new standard go/types/gcexportdata package.
		fset := token.NewFileSet()

		// The indexed export format starts with an 'i'; the older
		// binary export format starts with a 'c', 'd', or 'v'
		// (from "version"). Select appropriate importer.
		if len(data) > 0 {
			switch data[0] {
			case 'i':
				_, pkg, err := IImportData(fset, packages, data[1:], id)
				return pkg, err

			case 'v', 'c', 'd':
				_, pkg, err := BImportData(fset, packages, data, id)
				return pkg, err

			case 'u':
				_, pkg, err := UImportData(fset, packages, data[1:size], id)
				return pkg, err

			default:
				l := len(data)
				if l > 10 {
					l = 10
				}
				return nil, fmt.Errorf("unexpected export data with prefix %q for path %s", string(data[:l]), id)
			}
		}

	default:
		err = fmt.Errorf("unknown export data header: %q", hdr)
	}

	return
}

func deref(typ types.Type) types.Type {
	if p, _ := typ.(*types.Pointer); p != nil {
		return p.Elem()
	}
	return typ
}

type byPath []*types.Package

func (a byPath) Len() int           { return len(a) }
func (a byPath) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
func (a byPath) Less(i, j int) bool { return a[i].Path() < a[j].Path() }
 07070100000F76000081A4000000000000000000000001645E367C00007597000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/gcimporter/iexport.go  // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Indexed binary package export.
// This file was derived from $GOROOT/src/cmd/compile/internal/gc/iexport.go;
// see that file for specification of the format.

package gcimporter

import (
	"bytes"
	"encoding/binary"
	"fmt"
	"go/constant"
	"go/token"
	"go/types"
	"io"
	"math/big"
	"reflect"
	"sort"
	"strconv"
	"strings"

	"golang.org/x/tools/internal/tokeninternal"
	"golang.org/x/tools/internal/typeparams"
)

// IExportShallow encodes "shallow" export data for the specified package.
//
// No promises are made about the encoding other than that it can be
// decoded by the same version of IIExportShallow. If you plan to save
// export data in the file system, be sure to include a cryptographic
// digest of the executable in the key to avoid version skew.
func IExportShallow(fset *token.FileSet, pkg *types.Package) ([]byte, error) {
	// In principle this operation can only fail if out.Write fails,
	// but that's impossible for bytes.Buffer---and as a matter of
	// fact iexportCommon doesn't even check for I/O errors.
	// TODO(adonovan): handle I/O errors properly.
	// TODO(adonovan): use byte slices throughout, avoiding copying.
	const bundle, shallow = false, true
	var out bytes.Buffer
	err := iexportCommon(&out, fset, bundle, shallow, iexportVersion, []*types.Package{pkg})
	return out.Bytes(), err
}

// IImportShallow decodes "shallow" types.Package data encoded by
// IExportShallow in the same executable. This function cannot import data from
// cmd/compile or gcexportdata.Write.
func IImportShallow(fset *token.FileSet, getPackage GetPackageFunc, data []byte, path string, insert InsertType) (*types.Package, error) {
	const bundle = false
	pkgs, err := iimportCommon(fset, getPackage, data, bundle, path, insert)
	if err != nil {
		return nil, err
	}
	return pkgs[0], nil
}

// InsertType is the type of a function that creates a types.TypeName
// object for a named type and inserts it into the scope of the
// specified Package.
type InsertType = func(pkg *types.Package, name string)

// Current bundled export format version. Increase with each format change.
// 0: initial implementation
const bundleVersion = 0

// IExportData writes indexed export data for pkg to out.
//
// If no file set is provided, position info will be missing.
// The package path of the top-level package will not be recorded,
// so that calls to IImportData can override with a provided package path.
func IExportData(out io.Writer, fset *token.FileSet, pkg *types.Package) error {
	const bundle, shallow = false, false
	return iexportCommon(out, fset, bundle, shallow, iexportVersion, []*types.Package{pkg})
}

// IExportBundle writes an indexed export bundle for pkgs to out.
func IExportBundle(out io.Writer, fset *token.FileSet, pkgs []*types.Package) error {
	const bundle, shallow = true, false
	return iexportCommon(out, fset, bundle, shallow, iexportVersion, pkgs)
}

func iexportCommon(out io.Writer, fset *token.FileSet, bundle, shallow bool, version int, pkgs []*types.Package) (err error) {
	if !debug {
		defer func() {
			if e := recover(); e != nil {
				if ierr, ok := e.(internalError); ok {
					err = ierr
					return
				}
				// Not an internal error; panic again.
				panic(e)
			}
		}()
	}

	p := iexporter{
		fset:        fset,
		version:     version,
		shallow:     shallow,
		allPkgs:     map[*types.Package]bool{},
		stringIndex: map[string]uint64{},
		declIndex:   map[types.Object]uint64{},
		tparamNames: map[types.Object]string{},
		typIndex:    map[types.Type]uint64{},
	}
	if !bundle {
		p.localpkg = pkgs[0]
	}

	for i, pt := range predeclared() {
		p.typIndex[pt] = uint64(i)
	}
	if len(p.typIndex) > predeclReserved {
		panic(internalErrorf("too many predeclared types: %d > %d", len(p.typIndex), predeclReserved))
	}

	// Initialize work queue with exported declarations.
	for _, pkg := range pkgs {
		scope := pkg.Scope()
		for _, name := range scope.Names() {
			if token.IsExported(name) {
				p.pushDecl(scope.Lookup(name))
			}
		}

		if bundle {
			// Ensure pkg and its imports are included in the index.
			p.allPkgs[pkg] = true
			for _, imp := range pkg.Imports() {
				p.allPkgs[imp] = true
			}
		}
	}

	// Loop until no more work.
	for !p.declTodo.empty() {
		p.doDecl(p.declTodo.popHead())
	}

	// Produce index of offset of each file record in files.
	var files intWriter
	var fileOffset []uint64 // fileOffset[i] is offset in files of file encoded as i
	if p.shallow {
		fileOffset = make([]uint64, len(p.fileInfos))
		for i, info := range p.fileInfos {
			fileOffset[i] = uint64(files.Len())
			p.encodeFile(&files, info.file, info.needed)
		}
	}

	// Append indices to data0 section.
	dataLen := uint64(p.data0.Len())
	w := p.newWriter()
	w.writeIndex(p.declIndex)

	if bundle {
		w.uint64(uint64(len(pkgs)))
		for _, pkg := range pkgs {
			w.pkg(pkg)
			imps := pkg.Imports()
			w.uint64(uint64(len(imps)))
			for _, imp := range imps {
				w.pkg(imp)
			}
		}
	}
	w.flush()

	// Assemble header.
	var hdr intWriter
	if bundle {
		hdr.uint64(bundleVersion)
	}
	hdr.uint64(uint64(p.version))
	hdr.uint64(uint64(p.strings.Len()))
	if p.shallow {
		hdr.uint64(uint64(files.Len()))
		hdr.uint64(uint64(len(fileOffset)))
		for _, offset := range fileOffset {
			hdr.uint64(offset)
		}
	}
	hdr.uint64(dataLen)

	// Flush output.
	io.Copy(out, &hdr)
	io.Copy(out, &p.strings)
	if p.shallow {
		io.Copy(out, &files)
	}
	io.Copy(out, &p.data0)

	return nil
}

// encodeFile writes to w a representation of the file sufficient to
// faithfully restore position information about all needed offsets.
// Mutates the needed array.
func (p *iexporter) encodeFile(w *intWriter, file *token.File, needed []uint64) {
	_ = needed[0] // precondition: needed is non-empty

	w.uint64(p.stringOff(file.Name()))

	size := uint64(file.Size())
	w.uint64(size)

	// Sort the set of needed offsets. Duplicates are harmless.
	sort.Slice(needed, func(i, j int) bool { return needed[i] < needed[j] })

	lines := tokeninternal.GetLines(file) // byte offset of each line start
	w.uint64(uint64(len(lines)))

	// Rather than record the entire array of line start offsets,
	// we save only a sparse list of (index, offset) pairs for
	// the start of each line that contains a needed position.
	var sparse [][2]int // (index, offset) pairs
outer:
	for i, lineStart := range lines {
		lineEnd := size
		if i < len(lines)-1 {
			lineEnd = uint64(lines[i+1])
		}
		// Does this line contains a needed offset?
		if needed[0] < lineEnd {
			sparse = append(sparse, [2]int{i, lineStart})
			for needed[0] < lineEnd {
				needed = needed[1:]
				if len(needed) == 0 {
					break outer
				}
			}
		}
	}

	// Delta-encode the columns.
	w.uint64(uint64(len(sparse)))
	var prev [2]int
	for _, pair := range sparse {
		w.uint64(uint64(pair[0] - prev[0]))
		w.uint64(uint64(pair[1] - prev[1]))
		prev = pair
	}
}

// writeIndex writes out an object index. mainIndex indicates whether
// we're writing out the main index, which is also read by
// non-compiler tools and includes a complete package description
// (i.e., name and height).
func (w *exportWriter) writeIndex(index map[types.Object]uint64) {
	type pkgObj struct {
		obj  types.Object
		name string // qualified name; differs from obj.Name for type params
	}
	// Build a map from packages to objects from that package.
	pkgObjs := map[*types.Package][]pkgObj{}

	// For the main index, make sure to include every package that
	// we reference, even if we're not exporting (or reexporting)
	// any symbols from it.
	if w.p.localpkg != nil {
		pkgObjs[w.p.localpkg] = nil
	}
	for pkg := range w.p.allPkgs {
		pkgObjs[pkg] = nil
	}

	for obj := range index {
		name := w.p.exportName(obj)
		pkgObjs[obj.Pkg()] = append(pkgObjs[obj.Pkg()], pkgObj{obj, name})
	}

	var pkgs []*types.Package
	for pkg, objs := range pkgObjs {
		pkgs = append(pkgs, pkg)

		sort.Slice(objs, func(i, j int) bool {
			return objs[i].name < objs[j].name
		})
	}

	sort.Slice(pkgs, func(i, j int) bool {
		return w.exportPath(pkgs[i]) < w.exportPath(pkgs[j])
	})

	w.uint64(uint64(len(pkgs)))
	for _, pkg := range pkgs {
		w.string(w.exportPath(pkg))
		w.string(pkg.Name())
		w.uint64(uint64(0)) // package height is not needed for go/types

		objs := pkgObjs[pkg]
		w.uint64(uint64(len(objs)))
		for _, obj := range objs {
			w.string(obj.name)
			w.uint64(index[obj.obj])
		}
	}
}

// exportName returns the 'exported' name of an object. It differs from
// obj.Name() only for type parameters (see tparamExportName for details).
func (p *iexporter) exportName(obj types.Object) (res string) {
	if name := p.tparamNames[obj]; name != "" {
		return name
	}
	return obj.Name()
}

type iexporter struct {
	fset    *token.FileSet
	out     *bytes.Buffer
	version int

	shallow  bool           // don't put types from other packages in the index
	localpkg *types.Package // (nil in bundle mode)

	// allPkgs tracks all packages that have been referenced by
	// the export data, so we can ensure to include them in the
	// main index.
	allPkgs map[*types.Package]bool

	declTodo objQueue

	strings     intWriter
	stringIndex map[string]uint64

	// In shallow mode, object positions are encoded as (file, offset).
	// Each file is recorded as a line-number table.
	// Only the lines of needed positions are saved faithfully.
	fileInfo  map[*token.File]uint64 // value is index in fileInfos
	fileInfos []*filePositions

	data0       intWriter
	declIndex   map[types.Object]uint64
	tparamNames map[types.Object]string // typeparam->exported name
	typIndex    map[types.Type]uint64

	indent int // for tracing support
}

type filePositions struct {
	file   *token.File
	needed []uint64 // unordered list of needed file offsets
}

func (p *iexporter) trace(format string, args ...interface{}) {
	if !trace {
		// Call sites should also be guarded, but having this check here allows
		// easily enabling/disabling debug trace statements.
		return
	}
	fmt.Printf(strings.Repeat("..", p.indent)+format+"\n", args...)
}

// stringOff returns the offset of s within the string section.
// If not already present, it's added to the end.
func (p *iexporter) stringOff(s string) uint64 {
	off, ok := p.stringIndex[s]
	if !ok {
		off = uint64(p.strings.Len())
		p.stringIndex[s] = off

		p.strings.uint64(uint64(len(s)))
		p.strings.WriteString(s)
	}
	return off
}

// fileIndexAndOffset returns the index of the token.File and the byte offset of pos within it.
func (p *iexporter) fileIndexAndOffset(file *token.File, pos token.Pos) (uint64, uint64) {
	index, ok := p.fileInfo[file]
	if !ok {
		index = uint64(len(p.fileInfo))
		p.fileInfos = append(p.fileInfos, &filePositions{file: file})
		if p.fileInfo == nil {
			p.fileInfo = make(map[*token.File]uint64)
		}
		p.fileInfo[file] = index
	}
	// Record each needed offset.
	info := p.fileInfos[index]
	offset := uint64(file.Offset(pos))
	info.needed = append(info.needed, offset)

	return index, offset
}

// pushDecl adds n to the declaration work queue, if not already present.
func (p *iexporter) pushDecl(obj types.Object) {
	// Package unsafe is known to the compiler and predeclared.
	// Caller should not ask us to do export it.
	if obj.Pkg() == types.Unsafe {
		panic("cannot export package unsafe")
	}

	// Shallow export data: don't index decls from other packages.
	if p.shallow && obj.Pkg() != p.localpkg {
		return
	}

	if _, ok := p.declIndex[obj]; ok {
		return
	}

	p.declIndex[obj] = ^uint64(0) // mark obj present in work queue
	p.declTodo.pushTail(obj)
}

// exportWriter handles writing out individual data section chunks.
type exportWriter struct {
	p *iexporter

	data       intWriter
	currPkg    *types.Package
	prevFile   string
	prevLine   int64
	prevColumn int64
}

func (w *exportWriter) exportPath(pkg *types.Package) string {
	if pkg == w.p.localpkg {
		return ""
	}
	return pkg.Path()
}

func (p *iexporter) doDecl(obj types.Object) {
	if trace {
		p.trace("exporting decl %v (%T)", obj, obj)
		p.indent++
		defer func() {
			p.indent--
			p.trace("=> %s", obj)
		}()
	}
	w := p.newWriter()
	w.setPkg(obj.Pkg(), false)

	switch obj := obj.(type) {
	case *types.Var:
		w.tag('V')
		w.pos(obj.Pos())
		w.typ(obj.Type(), obj.Pkg())

	case *types.Func:
		sig, _ := obj.Type().(*types.Signature)
		if sig.Recv() != nil {
			// We shouldn't see methods in the package scope,
			// but the type checker may repair "func () F() {}"
			// to "func (Invalid) F()" and then treat it like "func F()",
			// so allow that. See golang/go#57729.
			if sig.Recv().Type() != types.Typ[types.Invalid] {
				panic(internalErrorf("unexpected method: %v", sig))
			}
		}

		// Function.
		if typeparams.ForSignature(sig).Len() == 0 {
			w.tag('F')
		} else {
			w.tag('G')
		}
		w.pos(obj.Pos())
		// The tparam list of the function type is the declaration of the type
		// params. So, write out the type params right now. Then those type params
		// will be referenced via their type offset (via typOff) in all other
		// places in the signature and function where they are used.
		//
		// While importing the type parameters, tparamList computes and records
		// their export name, so that it can be later used when writing the index.
		if tparams := typeparams.ForSignature(sig); tparams.Len() > 0 {
			w.tparamList(obj.Name(), tparams, obj.Pkg())
		}
		w.signature(sig)

	case *types.Const:
		w.tag('C')
		w.pos(obj.Pos())
		w.value(obj.Type(), obj.Val())

	case *types.TypeName:
		t := obj.Type()

		if tparam, ok := t.(*typeparams.TypeParam); ok {
			w.tag('P')
			w.pos(obj.Pos())
			constraint := tparam.Constraint()
			if p.version >= iexportVersionGo1_18 {
				implicit := false
				if iface, _ := constraint.(*types.Interface); iface != nil {
					implicit = typeparams.IsImplicit(iface)
				}
				w.bool(implicit)
			}
			w.typ(constraint, obj.Pkg())
			break
		}

		if obj.IsAlias() {
			w.tag('A')
			w.pos(obj.Pos())
			w.typ(t, obj.Pkg())
			break
		}

		// Defined type.
		named, ok := t.(*types.Named)
		if !ok {
			panic(internalErrorf("%s is not a defined type", t))
		}

		if typeparams.ForNamed(named).Len() == 0 {
			w.tag('T')
		} else {
			w.tag('U')
		}
		w.pos(obj.Pos())

		if typeparams.ForNamed(named).Len() > 0 {
			// While importing the type parameters, tparamList computes and records
			// their export name, so that it can be later used when writing the index.
			w.tparamList(obj.Name(), typeparams.ForNamed(named), obj.Pkg())
		}

		underlying := obj.Type().Underlying()
		w.typ(underlying, obj.Pkg())

		if types.IsInterface(t) {
			break
		}

		n := named.NumMethods()
		w.uint64(uint64(n))
		for i := 0; i < n; i++ {
			m := named.Method(i)
			w.pos(m.Pos())
			w.string(m.Name())
			sig, _ := m.Type().(*types.Signature)

			// Receiver type parameters are type arguments of the receiver type, so
			// their name must be qualified before exporting recv.
			if rparams := typeparams.RecvTypeParams(sig); rparams.Len() > 0 {
				prefix := obj.Name() + "." + m.Name()
				for i := 0; i < rparams.Len(); i++ {
					rparam := rparams.At(i)
					name := tparamExportName(prefix, rparam)
					w.p.tparamNames[rparam.Obj()] = name
				}
			}
			w.param(sig.Recv())
			w.signature(sig)
		}

	default:
		panic(internalErrorf("unexpected object: %v", obj))
	}

	p.declIndex[obj] = w.flush()
}

func (w *exportWriter) tag(tag byte) {
	w.data.WriteByte(tag)
}

func (w *exportWriter) pos(pos token.Pos) {
	if w.p.shallow {
		w.posV2(pos)
	} else if w.p.version >= iexportVersionPosCol {
		w.posV1(pos)
	} else {
		w.posV0(pos)
	}
}

// posV2 encoding (used only in shallow mode) records positions as
// (file, offset), where file is the index in the token.File table
// (which records the file name and newline offsets) and offset is a
// byte offset. It effectively ignores //line directives.
func (w *exportWriter) posV2(pos token.Pos) {
	if pos == token.NoPos {
		w.uint64(0)
		return
	}
	file := w.p.fset.File(pos) // fset must be non-nil
	index, offset := w.p.fileIndexAndOffset(file, pos)
	w.uint64(1 + index)
	w.uint64(offset)
}

func (w *exportWriter) posV1(pos token.Pos) {
	if w.p.fset == nil {
		w.int64(0)
		return
	}

	p := w.p.fset.Position(pos)
	file := p.Filename
	line := int64(p.Line)
	column := int64(p.Column)

	deltaColumn := (column - w.prevColumn) << 1
	deltaLine := (line - w.prevLine) << 1

	if file != w.prevFile {
		deltaLine |= 1
	}
	if deltaLine != 0 {
		deltaColumn |= 1
	}

	w.int64(deltaColumn)
	if deltaColumn&1 != 0 {
		w.int64(deltaLine)
		if deltaLine&1 != 0 {
			w.string(file)
		}
	}

	w.prevFile = file
	w.prevLine = line
	w.prevColumn = column
}

func (w *exportWriter) posV0(pos token.Pos) {
	if w.p.fset == nil {
		w.int64(0)
		return
	}

	p := w.p.fset.Position(pos)
	file := p.Filename
	line := int64(p.Line)

	// When file is the same as the last position (common case),
	// we can save a few bytes by delta encoding just the line
	// number.
	//
	// Note: Because data objects may be read out of order (or not
	// at all), we can only apply delta encoding within a single
	// object. This is handled implicitly by tracking prevFile and
	// prevLine as fields of exportWriter.

	if file == w.prevFile {
		delta := line - w.prevLine
		w.int64(delta)
		if delta == deltaNewFile {
			w.int64(-1)
		}
	} else {
		w.int64(deltaNewFile)
		w.int64(line) // line >= 0
		w.string(file)
		w.prevFile = file
	}
	w.prevLine = line
}

func (w *exportWriter) pkg(pkg *types.Package) {
	// Ensure any referenced packages are declared in the main index.
	w.p.allPkgs[pkg] = true

	w.string(w.exportPath(pkg))
}

func (w *exportWriter) qualifiedType(obj *types.TypeName) {
	name := w.p.exportName(obj)

	// Ensure any referenced declarations are written out too.
	w.p.pushDecl(obj)
	w.string(name)
	w.pkg(obj.Pkg())
}

func (w *exportWriter) typ(t types.Type, pkg *types.Package) {
	w.data.uint64(w.p.typOff(t, pkg))
}

func (p *iexporter) newWriter() *exportWriter {
	return &exportWriter{p: p}
}

func (w *exportWriter) flush() uint64 {
	off := uint64(w.p.data0.Len())
	io.Copy(&w.p.data0, &w.data)
	return off
}

func (p *iexporter) typOff(t types.Type, pkg *types.Package) uint64 {
	off, ok := p.typIndex[t]
	if !ok {
		w := p.newWriter()
		w.doTyp(t, pkg)
		off = predeclReserved + w.flush()
		p.typIndex[t] = off
	}
	return off
}

func (w *exportWriter) startType(k itag) {
	w.data.uint64(uint64(k))
}

func (w *exportWriter) doTyp(t types.Type, pkg *types.Package) {
	if trace {
		w.p.trace("exporting type %s (%T)", t, t)
		w.p.indent++
		defer func() {
			w.p.indent--
			w.p.trace("=> %s", t)
		}()
	}
	switch t := t.(type) {
	case *types.Named:
		if targs := typeparams.NamedTypeArgs(t); targs.Len() > 0 {
			w.startType(instanceType)
			// TODO(rfindley): investigate if this position is correct, and if it
			// matters.
			w.pos(t.Obj().Pos())
			w.typeList(targs, pkg)
			w.typ(typeparams.NamedTypeOrigin(t), pkg)
			return
		}
		w.startType(definedType)
		w.qualifiedType(t.Obj())

	case *typeparams.TypeParam:
		w.startType(typeParamType)
		w.qualifiedType(t.Obj())

	case *types.Pointer:
		w.startType(pointerType)
		w.typ(t.Elem(), pkg)

	case *types.Slice:
		w.startType(sliceType)
		w.typ(t.Elem(), pkg)

	case *types.Array:
		w.startType(arrayType)
		w.uint64(uint64(t.Len()))
		w.typ(t.Elem(), pkg)

	case *types.Chan:
		w.startType(chanType)
		// 1 RecvOnly; 2 SendOnly; 3 SendRecv
		var dir uint64
		switch t.Dir() {
		case types.RecvOnly:
			dir = 1
		case types.SendOnly:
			dir = 2
		case types.SendRecv:
			dir = 3
		}
		w.uint64(dir)
		w.typ(t.Elem(), pkg)

	case *types.Map:
		w.startType(mapType)
		w.typ(t.Key(), pkg)
		w.typ(t.Elem(), pkg)

	case *types.Signature:
		w.startType(signatureType)
		w.setPkg(pkg, true)
		w.signature(t)

	case *types.Struct:
		w.startType(structType)
		n := t.NumFields()
		if n > 0 {
			w.setPkg(t.Field(0).Pkg(), true) // qualifying package for field objects
		} else {
			w.setPkg(pkg, true)
		}
		w.uint64(uint64(n))
		for i := 0; i < n; i++ {
			f := t.Field(i)
			w.pos(f.Pos())
			w.string(f.Name()) // unexported fields implicitly qualified by prior setPkg
			w.typ(f.Type(), pkg)
			w.bool(f.Anonymous())
			w.string(t.Tag(i)) // note (or tag)
		}

	case *types.Interface:
		w.startType(interfaceType)
		w.setPkg(pkg, true)

		n := t.NumEmbeddeds()
		w.uint64(uint64(n))
		for i := 0; i < n; i++ {
			ft := t.EmbeddedType(i)
			tPkg := pkg
			if named, _ := ft.(*types.Named); named != nil {
				w.pos(named.Obj().Pos())
			} else {
				w.pos(token.NoPos)
			}
			w.typ(ft, tPkg)
		}

		n = t.NumExplicitMethods()
		w.uint64(uint64(n))
		for i := 0; i < n; i++ {
			m := t.ExplicitMethod(i)
			w.pos(m.Pos())
			w.string(m.Name())
			sig, _ := m.Type().(*types.Signature)
			w.signature(sig)
		}

	case *typeparams.Union:
		w.startType(unionType)
		nt := t.Len()
		w.uint64(uint64(nt))
		for i := 0; i < nt; i++ {
			term := t.Term(i)
			w.bool(term.Tilde())
			w.typ(term.Type(), pkg)
		}

	default:
		panic(internalErrorf("unexpected type: %v, %v", t, reflect.TypeOf(t)))
	}
}

func (w *exportWriter) setPkg(pkg *types.Package, write bool) {
	if write {
		w.pkg(pkg)
	}

	w.currPkg = pkg
}

func (w *exportWriter) signature(sig *types.Signature) {
	w.paramList(sig.Params())
	w.paramList(sig.Results())
	if sig.Params().Len() > 0 {
		w.bool(sig.Variadic())
	}
}

func (w *exportWriter) typeList(ts *typeparams.TypeList, pkg *types.Package) {
	w.uint64(uint64(ts.Len()))
	for i := 0; i < ts.Len(); i++ {
		w.typ(ts.At(i), pkg)
	}
}

func (w *exportWriter) tparamList(prefix string, list *typeparams.TypeParamList, pkg *types.Package) {
	ll := uint64(list.Len())
	w.uint64(ll)
	for i := 0; i < list.Len(); i++ {
		tparam := list.At(i)
		// Set the type parameter exportName before exporting its type.
		exportName := tparamExportName(prefix, tparam)
		w.p.tparamNames[tparam.Obj()] = exportName
		w.typ(list.At(i), pkg)
	}
}

const blankMarker = "$"

// tparamExportName returns the 'exported' name of a type parameter, which
// differs from its actual object name: it is prefixed with a qualifier, and
// blank type parameter names are disambiguated by their index in the type
// parameter list.
func tparamExportName(prefix string, tparam *typeparams.TypeParam) string {
	assert(prefix != "")
	name := tparam.Obj().Name()
	if name == "_" {
		name = blankMarker + strconv.Itoa(tparam.Index())
	}
	return prefix + "." + name
}

// tparamName returns the real name of a type parameter, after stripping its
// qualifying prefix and reverting blank-name encoding. See tparamExportName
// for details.
func tparamName(exportName string) string {
	// Remove the "path" from the type param name that makes it unique.
	ix := strings.LastIndex(exportName, ".")
	if ix < 0 {
		errorf("malformed type parameter export name %s: missing prefix", exportName)
	}
	name := exportName[ix+1:]
	if strings.HasPrefix(name, blankMarker) {
		return "_"
	}
	return name
}

func (w *exportWriter) paramList(tup *types.Tuple) {
	n := tup.Len()
	w.uint64(uint64(n))
	for i := 0; i < n; i++ {
		w.param(tup.At(i))
	}
}

func (w *exportWriter) param(obj types.Object) {
	w.pos(obj.Pos())
	w.localIdent(obj)
	w.typ(obj.Type(), obj.Pkg())
}

func (w *exportWriter) value(typ types.Type, v constant.Value) {
	w.typ(typ, nil)
	if w.p.version >= iexportVersionGo1_18 {
		w.int64(int64(v.Kind()))
	}

	switch b := typ.Underlying().(*types.Basic); b.Info() & types.IsConstType {
	case types.IsBoolean:
		w.bool(constant.BoolVal(v))
	case types.IsInteger:
		var i big.Int
		if i64, exact := constant.Int64Val(v); exact {
			i.SetInt64(i64)
		} else if ui64, exact := constant.Uint64Val(v); exact {
			i.SetUint64(ui64)
		} else {
			i.SetString(v.ExactString(), 10)
		}
		w.mpint(&i, typ)
	case types.IsFloat:
		f := constantToFloat(v)
		w.mpfloat(f, typ)
	case types.IsComplex:
		w.mpfloat(constantToFloat(constant.Real(v)), typ)
		w.mpfloat(constantToFloat(constant.Imag(v)), typ)
	case types.IsString:
		w.string(constant.StringVal(v))
	default:
		if b.Kind() == types.Invalid {
			// package contains type errors
			break
		}
		panic(internalErrorf("unexpected type %v (%v)", typ, typ.Underlying()))
	}
}

// constantToFloat converts a constant.Value with kind constant.Float to a
// big.Float.
func constantToFloat(x constant.Value) *big.Float {
	x = constant.ToFloat(x)
	// Use the same floating-point precision (512) as cmd/compile
	// (see Mpprec in cmd/compile/internal/gc/mpfloat.go).
	const mpprec = 512
	var f big.Float
	f.SetPrec(mpprec)
	if v, exact := constant.Float64Val(x); exact {
		// float64
		f.SetFloat64(v)
	} else if num, denom := constant.Num(x), constant.Denom(x); num.Kind() == constant.Int {
		// TODO(gri): add big.Rat accessor to constant.Value.
		n := valueToRat(num)
		d := valueToRat(denom)
		f.SetRat(n.Quo(n, d))
	} else {
		// Value too large to represent as a fraction => inaccessible.
		// TODO(gri): add big.Float accessor to constant.Value.
		_, ok := f.SetString(x.ExactString())
		assert(ok)
	}
	return &f
}

// mpint exports a multi-precision integer.
//
// For unsigned types, small values are written out as a single
// byte. Larger values are written out as a length-prefixed big-endian
// byte string, where the length prefix is encoded as its complement.
// For example, bytes 0, 1, and 2 directly represent the integer
// values 0, 1, and 2; while bytes 255, 254, and 253 indicate a 1-,
// 2-, and 3-byte big-endian string follow.
//
// Encoding for signed types use the same general approach as for
// unsigned types, except small values use zig-zag encoding and the
// bottom bit of length prefix byte for large values is reserved as a
// sign bit.
//
// The exact boundary between small and large encodings varies
// according to the maximum number of bytes needed to encode a value
// of type typ. As a special case, 8-bit types are always encoded as a
// single byte.
//
// TODO(mdempsky): Is this level of complexity really worthwhile?
func (w *exportWriter) mpint(x *big.Int, typ types.Type) {
	basic, ok := typ.Underlying().(*types.Basic)
	if !ok {
		panic(internalErrorf("unexpected type %v (%T)", typ.Underlying(), typ.Underlying()))
	}

	signed, maxBytes := intSize(basic)

	negative := x.Sign() < 0
	if !signed && negative {
		panic(internalErrorf("negative unsigned integer; type %v, value %v", typ, x))
	}

	b := x.Bytes()
	if len(b) > 0 && b[0] == 0 {
		panic(internalErrorf("leading zeros"))
	}
	if uint(len(b)) > maxBytes {
		panic(internalErrorf("bad mpint length: %d > %d (type %v, value %v)", len(b), maxBytes, typ, x))
	}

	maxSmall := 256 - maxBytes
	if signed {
		maxSmall = 256 - 2*maxBytes
	}
	if maxBytes == 1 {
		maxSmall = 256
	}

	// Check if x can use small value encoding.
	if len(b) <= 1 {
		var ux uint
		if len(b) == 1 {
			ux = uint(b[0])
		}
		if signed {
			ux <<= 1
			if negative {
				ux--
			}
		}
		if ux < maxSmall {
			w.data.WriteByte(byte(ux))
			return
		}
	}

	n := 256 - uint(len(b))
	if signed {
		n = 256 - 2*uint(len(b))
		if negative {
			n |= 1
		}
	}
	if n < maxSmall || n >= 256 {
		panic(internalErrorf("encoding mistake: %d, %v, %v => %d", len(b), signed, negative, n))
	}

	w.data.WriteByte(byte(n))
	w.data.Write(b)
}

// mpfloat exports a multi-precision floating point number.
//
// The number's value is decomposed into mantissa × 2**exponent, where
// mantissa is an integer. The value is written out as mantissa (as a
// multi-precision integer) and then the exponent, except exponent is
// omitted if mantissa is zero.
func (w *exportWriter) mpfloat(f *big.Float, typ types.Type) {
	if f.IsInf() {
		panic("infinite constant")
	}

	// Break into f = mant × 2**exp, with 0.5 <= mant < 1.
	var mant big.Float
	exp := int64(f.MantExp(&mant))

	// Scale so that mant is an integer.
	prec := mant.MinPrec()
	mant.SetMantExp(&mant, int(prec))
	exp -= int64(prec)

	manti, acc := mant.Int(nil)
	if acc != big.Exact {
		panic(internalErrorf("mantissa scaling failed for %f (%s)", f, acc))
	}
	w.mpint(manti, typ)
	if manti.Sign() != 0 {
		w.int64(exp)
	}
}

func (w *exportWriter) bool(b bool) bool {
	var x uint64
	if b {
		x = 1
	}
	w.uint64(x)
	return b
}

func (w *exportWriter) int64(x int64)   { w.data.int64(x) }
func (w *exportWriter) uint64(x uint64) { w.data.uint64(x) }
func (w *exportWriter) string(s string) { w.uint64(w.p.stringOff(s)) }

func (w *exportWriter) localIdent(obj types.Object) {
	// Anonymous parameters.
	if obj == nil {
		w.string("")
		return
	}

	name := obj.Name()
	if name == "_" {
		w.string("_")
		return
	}

	w.string(name)
}

type intWriter struct {
	bytes.Buffer
}

func (w *intWriter) int64(x int64) {
	var buf [binary.MaxVarintLen64]byte
	n := binary.PutVarint(buf[:], x)
	w.Write(buf[:n])
}

func (w *intWriter) uint64(x uint64) {
	var buf [binary.MaxVarintLen64]byte
	n := binary.PutUvarint(buf[:], x)
	w.Write(buf[:n])
}

func assert(cond bool) {
	if !cond {
		panic("internal error: assertion failed")
	}
}

// The below is copied from go/src/cmd/compile/internal/gc/syntax.go.

// objQueue is a FIFO queue of types.Object. The zero value of objQueue is
// a ready-to-use empty queue.
type objQueue struct {
	ring       []types.Object
	head, tail int
}

// empty returns true if q contains no Nodes.
func (q *objQueue) empty() bool {
	return q.head == q.tail
}

// pushTail appends n to the tail of the queue.
func (q *objQueue) pushTail(obj types.Object) {
	if len(q.ring) == 0 {
		q.ring = make([]types.Object, 16)
	} else if q.head+len(q.ring) == q.tail {
		// Grow the ring.
		nring := make([]types.Object, len(q.ring)*2)
		// Copy the old elements.
		part := q.ring[q.head%len(q.ring):]
		if q.tail-q.head <= len(part) {
			part = part[:q.tail-q.head]
			copy(nring, part)
		} else {
			pos := copy(nring, part)
			copy(nring[pos:], q.ring[:q.tail%len(q.ring)])
		}
		q.ring, q.head, q.tail = nring, 0, q.tail-q.head
	}

	q.ring[q.tail%len(q.ring)] = obj
	q.tail++
}

// popHead pops a node from the head of the queue. It panics if q is empty.
func (q *objQueue) popHead() types.Object {
	if q.empty() {
		panic("dequeue empty")
	}
	obj := q.ring[q.head%len(q.ring)]
	q.head++
	return obj
}
 07070100000F77000081A4000000000000000000000001645E367C00006032000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/gcimporter/iimport.go  // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Indexed package import.
// See cmd/compile/internal/gc/iexport.go for the export data format.

// This file is a copy of $GOROOT/src/go/internal/gcimporter/iimport.go.

package gcimporter

import (
	"bytes"
	"encoding/binary"
	"fmt"
	"go/constant"
	"go/token"
	"go/types"
	"io"
	"math/big"
	"sort"
	"strings"

	"golang.org/x/tools/internal/typeparams"
)

type intReader struct {
	*bytes.Reader
	path string
}

func (r *intReader) int64() int64 {
	i, err := binary.ReadVarint(r.Reader)
	if err != nil {
		errorf("import %q: read varint error: %v", r.path, err)
	}
	return i
}

func (r *intReader) uint64() uint64 {
	i, err := binary.ReadUvarint(r.Reader)
	if err != nil {
		errorf("import %q: read varint error: %v", r.path, err)
	}
	return i
}

// Keep this in sync with constants in iexport.go.
const (
	iexportVersionGo1_11   = 0
	iexportVersionPosCol   = 1
	iexportVersionGo1_18   = 2
	iexportVersionGenerics = 2

	iexportVersionCurrent = 2
)

type ident struct {
	pkg  *types.Package
	name string
}

const predeclReserved = 32

type itag uint64

const (
	// Types
	definedType itag = iota
	pointerType
	sliceType
	arrayType
	chanType
	mapType
	signatureType
	structType
	interfaceType
	typeParamType
	instanceType
	unionType
)

// IImportData imports a package from the serialized package data
// and returns 0 and a reference to the package.
// If the export data version is not recognized or the format is otherwise
// compromised, an error is returned.
func IImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (int, *types.Package, error) {
	pkgs, err := iimportCommon(fset, GetPackageFromMap(imports), data, false, path, nil)
	if err != nil {
		return 0, nil, err
	}
	return 0, pkgs[0], nil
}

// IImportBundle imports a set of packages from the serialized package bundle.
func IImportBundle(fset *token.FileSet, imports map[string]*types.Package, data []byte) ([]*types.Package, error) {
	return iimportCommon(fset, GetPackageFromMap(imports), data, true, "", nil)
}

// A GetPackageFunc is a function that gets the package with the given path
// from the importer state, creating it (with the specified name) if necessary.
// It is an abstraction of the map historically used to memoize package creation.
//
// Two calls with the same path must return the same package.
//
// If the given getPackage func returns nil, the import will fail.
type GetPackageFunc = func(path, name string) *types.Package

// GetPackageFromMap returns a GetPackageFunc that retrieves packages from the
// given map of package path -> package.
//
// The resulting func may mutate m: if a requested package is not found, a new
// package will be inserted into m.
func GetPackageFromMap(m map[string]*types.Package) GetPackageFunc {
	return func(path, name string) *types.Package {
		if _, ok := m[path]; !ok {
			m[path] = types.NewPackage(path, name)
		}
		return m[path]
	}
}

func iimportCommon(fset *token.FileSet, getPackage GetPackageFunc, data []byte, bundle bool, path string, insert InsertType) (pkgs []*types.Package, err error) {
	const currentVersion = iexportVersionCurrent
	version := int64(-1)
	if !debug {
		defer func() {
			if e := recover(); e != nil {
				if bundle {
					err = fmt.Errorf("%v", e)
				} else if version > currentVersion {
					err = fmt.Errorf("cannot import %q (%v), export data is newer version - update tool", path, e)
				} else {
					err = fmt.Errorf("cannot import %q (%v), possibly version skew - reinstall package", path, e)
				}
			}
		}()
	}

	r := &intReader{bytes.NewReader(data), path}

	if bundle {
		bundleVersion := r.uint64()
		switch bundleVersion {
		case bundleVersion:
		default:
			errorf("unknown bundle format version %d", bundleVersion)
		}
	}

	version = int64(r.uint64())
	switch version {
	case iexportVersionGo1_18, iexportVersionPosCol, iexportVersionGo1_11:
	default:
		if version > iexportVersionGo1_18 {
			errorf("unstable iexport format version %d, just rebuild compiler and std library", version)
		} else {
			errorf("unknown iexport format version %d", version)
		}
	}

	sLen := int64(r.uint64())
	var fLen int64
	var fileOffset []uint64
	if insert != nil {
		// Shallow mode uses a different position encoding.
		fLen = int64(r.uint64())
		fileOffset = make([]uint64, r.uint64())
		for i := range fileOffset {
			fileOffset[i] = r.uint64()
		}
	}
	dLen := int64(r.uint64())

	whence, _ := r.Seek(0, io.SeekCurrent)
	stringData := data[whence : whence+sLen]
	fileData := data[whence+sLen : whence+sLen+fLen]
	declData := data[whence+sLen+fLen : whence+sLen+fLen+dLen]
	r.Seek(sLen+fLen+dLen, io.SeekCurrent)

	p := iimporter{
		version: int(version),
		ipath:   path,
		insert:  insert,

		stringData:  stringData,
		stringCache: make(map[uint64]string),
		fileOffset:  fileOffset,
		fileData:    fileData,
		fileCache:   make([]*token.File, len(fileOffset)),
		pkgCache:    make(map[uint64]*types.Package),

		declData: declData,
		pkgIndex: make(map[*types.Package]map[string]uint64),
		typCache: make(map[uint64]types.Type),
		// Separate map for typeparams, keyed by their package and unique
		// name.
		tparamIndex: make(map[ident]types.Type),

		fake: fakeFileSet{
			fset:  fset,
			files: make(map[string]*fileInfo),
		},
	}
	defer p.fake.setLines() // set lines for files in fset

	for i, pt := range predeclared() {
		p.typCache[uint64(i)] = pt
	}

	pkgList := make([]*types.Package, r.uint64())
	for i := range pkgList {
		pkgPathOff := r.uint64()
		pkgPath := p.stringAt(pkgPathOff)
		pkgName := p.stringAt(r.uint64())
		_ = r.uint64() // package height; unused by go/types

		if pkgPath == "" {
			pkgPath = path
		}
		pkg := getPackage(pkgPath, pkgName)
		if pkg == nil {
			errorf("internal error: getPackage returned nil package for %s", pkgPath)
		} else if pkg.Name() != pkgName {
			errorf("conflicting names %s and %s for package %q", pkg.Name(), pkgName, path)
		}
		if i == 0 && !bundle {
			p.localpkg = pkg
		}

		p.pkgCache[pkgPathOff] = pkg

		// Read index for package.
		nameIndex := make(map[string]uint64)
		nSyms := r.uint64()
		// In shallow mode we don't expect an index for other packages.
		assert(nSyms == 0 || p.localpkg == pkg || p.insert == nil)
		for ; nSyms > 0; nSyms-- {
			name := p.stringAt(r.uint64())
			nameIndex[name] = r.uint64()
		}

		p.pkgIndex[pkg] = nameIndex
		pkgList[i] = pkg
	}

	if bundle {
		pkgs = make([]*types.Package, r.uint64())
		for i := range pkgs {
			pkg := p.pkgAt(r.uint64())
			imps := make([]*types.Package, r.uint64())
			for j := range imps {
				imps[j] = p.pkgAt(r.uint64())
			}
			pkg.SetImports(imps)
			pkgs[i] = pkg
		}
	} else {
		if len(pkgList) == 0 {
			errorf("no packages found for %s", path)
			panic("unreachable")
		}
		pkgs = pkgList[:1]

		// record all referenced packages as imports
		list := append(([]*types.Package)(nil), pkgList[1:]...)
		sort.Sort(byPath(list))
		pkgs[0].SetImports(list)
	}

	for _, pkg := range pkgs {
		if pkg.Complete() {
			continue
		}

		names := make([]string, 0, len(p.pkgIndex[pkg]))
		for name := range p.pkgIndex[pkg] {
			names = append(names, name)
		}
		sort.Strings(names)
		for _, name := range names {
			p.doDecl(pkg, name)
		}

		// package was imported completely and without errors
		pkg.MarkComplete()
	}

	// SetConstraint can't be called if the constraint type is not yet complete.
	// When type params are created in the 'P' case of (*importReader).obj(),
	// the associated constraint type may not be complete due to recursion.
	// Therefore, we defer calling SetConstraint there, and call it here instead
	// after all types are complete.
	for _, d := range p.later {
		typeparams.SetTypeParamConstraint(d.t, d.constraint)
	}

	for _, typ := range p.interfaceList {
		typ.Complete()
	}

	return pkgs, nil
}

type setConstraintArgs struct {
	t          *typeparams.TypeParam
	constraint types.Type
}

type iimporter struct {
	version int
	ipath   string

	localpkg *types.Package
	insert   func(pkg *types.Package, name string) // "shallow" mode only

	stringData  []byte
	stringCache map[uint64]string
	fileOffset  []uint64 // fileOffset[i] is offset in fileData for info about file encoded as i
	fileData    []byte
	fileCache   []*token.File // memoized decoding of file encoded as i
	pkgCache    map[uint64]*types.Package

	declData    []byte
	pkgIndex    map[*types.Package]map[string]uint64
	typCache    map[uint64]types.Type
	tparamIndex map[ident]types.Type

	fake          fakeFileSet
	interfaceList []*types.Interface

	// Arguments for calls to SetConstraint that are deferred due to recursive types
	later []setConstraintArgs

	indent int // for tracing support
}

func (p *iimporter) trace(format string, args ...interface{}) {
	if !trace {
		// Call sites should also be guarded, but having this check here allows
		// easily enabling/disabling debug trace statements.
		return
	}
	fmt.Printf(strings.Repeat("..", p.indent)+format+"\n", args...)
}

func (p *iimporter) doDecl(pkg *types.Package, name string) {
	if debug {
		p.trace("import decl %s", name)
		p.indent++
		defer func() {
			p.indent--
			p.trace("=> %s", name)
		}()
	}
	// See if we've already imported this declaration.
	if obj := pkg.Scope().Lookup(name); obj != nil {
		return
	}

	off, ok := p.pkgIndex[pkg][name]
	if !ok {
		// In "shallow" mode, call back to the application to
		// find the object and insert it into the package scope.
		if p.insert != nil {
			assert(pkg != p.localpkg)
			p.insert(pkg, name) // "can't fail"
			return
		}
		errorf("%v.%v not in index", pkg, name)
	}

	r := &importReader{p: p, currPkg: pkg}
	r.declReader.Reset(p.declData[off:])

	r.obj(name)
}

func (p *iimporter) stringAt(off uint64) string {
	if s, ok := p.stringCache[off]; ok {
		return s
	}

	slen, n := binary.Uvarint(p.stringData[off:])
	if n <= 0 {
		errorf("varint failed")
	}
	spos := off + uint64(n)
	s := string(p.stringData[spos : spos+slen])
	p.stringCache[off] = s
	return s
}

func (p *iimporter) fileAt(index uint64) *token.File {
	file := p.fileCache[index]
	if file == nil {
		off := p.fileOffset[index]
		file = p.decodeFile(intReader{bytes.NewReader(p.fileData[off:]), p.ipath})
		p.fileCache[index] = file
	}
	return file
}

func (p *iimporter) decodeFile(rd intReader) *token.File {
	filename := p.stringAt(rd.uint64())
	size := int(rd.uint64())
	file := p.fake.fset.AddFile(filename, -1, size)

	// SetLines requires a nondecreasing sequence.
	// Because it is common for clients to derive the interval
	// [start, start+len(name)] from a start position, and we
	// want to ensure that the end offset is on the same line,
	// we fill in the gaps of the sparse encoding with values
	// that strictly increase by the largest possible amount.
	// This allows us to avoid having to record the actual end
	// offset of each needed line.

	lines := make([]int, int(rd.uint64()))
	var index, offset int
	for i, n := 0, int(rd.uint64()); i < n; i++ {
		index += int(rd.uint64())
		offset += int(rd.uint64())
		lines[index] = offset

		// Ensure monotonicity between points.
		for j := index - 1; j > 0 && lines[j] == 0; j-- {
			lines[j] = lines[j+1] - 1
		}
	}

	// Ensure monotonicity after last point.
	for j := len(lines) - 1; j > 0 && lines[j] == 0; j-- {
		size--
		lines[j] = size
	}

	if !file.SetLines(lines) {
		errorf("SetLines failed: %d", lines) // can't happen
	}
	return file
}

func (p *iimporter) pkgAt(off uint64) *types.Package {
	if pkg, ok := p.pkgCache[off]; ok {
		return pkg
	}
	path := p.stringAt(off)
	errorf("missing package %q in %q", path, p.ipath)
	return nil
}

func (p *iimporter) typAt(off uint64, base *types.Named) types.Type {
	if t, ok := p.typCache[off]; ok && canReuse(base, t) {
		return t
	}

	if off < predeclReserved {
		errorf("predeclared type missing from cache: %v", off)
	}

	r := &importReader{p: p}
	r.declReader.Reset(p.declData[off-predeclReserved:])
	t := r.doType(base)

	if canReuse(base, t) {
		p.typCache[off] = t
	}
	return t
}

// canReuse reports whether the type rhs on the RHS of the declaration for def
// may be re-used.
//
// Specifically, if def is non-nil and rhs is an interface type with methods, it
// may not be re-used because we have a convention of setting the receiver type
// for interface methods to def.
func canReuse(def *types.Named, rhs types.Type) bool {
	if def == nil {
		return true
	}
	iface, _ := rhs.(*types.Interface)
	if iface == nil {
		return true
	}
	// Don't use iface.Empty() here as iface may not be complete.
	return iface.NumEmbeddeds() == 0 && iface.NumExplicitMethods() == 0
}

type importReader struct {
	p          *iimporter
	declReader bytes.Reader
	currPkg    *types.Package
	prevFile   string
	prevLine   int64
	prevColumn int64
}

func (r *importReader) obj(name string) {
	tag := r.byte()
	pos := r.pos()

	switch tag {
	case 'A':
		typ := r.typ()

		r.declare(types.NewTypeName(pos, r.currPkg, name, typ))

	case 'C':
		typ, val := r.value()

		r.declare(types.NewConst(pos, r.currPkg, name, typ, val))

	case 'F', 'G':
		var tparams []*typeparams.TypeParam
		if tag == 'G' {
			tparams = r.tparamList()
		}
		sig := r.signature(nil, nil, tparams)
		r.declare(types.NewFunc(pos, r.currPkg, name, sig))

	case 'T', 'U':
		// Types can be recursive. We need to setup a stub
		// declaration before recursing.
		obj := types.NewTypeName(pos, r.currPkg, name, nil)
		named := types.NewNamed(obj, nil, nil)
		// Declare obj before calling r.tparamList, so the new type name is recognized
		// if used in the constraint of one of its own typeparams (see #48280).
		r.declare(obj)
		if tag == 'U' {
			tparams := r.tparamList()
			typeparams.SetForNamed(named, tparams)
		}

		underlying := r.p.typAt(r.uint64(), named).Underlying()
		named.SetUnderlying(underlying)

		if !isInterface(underlying) {
			for n := r.uint64(); n > 0; n-- {
				mpos := r.pos()
				mname := r.ident()
				recv := r.param()

				// If the receiver has any targs, set those as the
				// rparams of the method (since those are the
				// typeparams being used in the method sig/body).
				base := baseType(recv.Type())
				assert(base != nil)
				targs := typeparams.NamedTypeArgs(base)
				var rparams []*typeparams.TypeParam
				if targs.Len() > 0 {
					rparams = make([]*typeparams.TypeParam, targs.Len())
					for i := range rparams {
						rparams[i] = targs.At(i).(*typeparams.TypeParam)
					}
				}
				msig := r.signature(recv, rparams, nil)

				named.AddMethod(types.NewFunc(mpos, r.currPkg, mname, msig))
			}
		}

	case 'P':
		// We need to "declare" a typeparam in order to have a name that
		// can be referenced recursively (if needed) in the type param's
		// bound.
		if r.p.version < iexportVersionGenerics {
			errorf("unexpected type param type")
		}
		name0 := tparamName(name)
		tn := types.NewTypeName(pos, r.currPkg, name0, nil)
		t := typeparams.NewTypeParam(tn, nil)

		// To handle recursive references to the typeparam within its
		// bound, save the partial type in tparamIndex before reading the bounds.
		id := ident{r.currPkg, name}
		r.p.tparamIndex[id] = t
		var implicit bool
		if r.p.version >= iexportVersionGo1_18 {
			implicit = r.bool()
		}
		constraint := r.typ()
		if implicit {
			iface, _ := constraint.(*types.Interface)
			if iface == nil {
				errorf("non-interface constraint marked implicit")
			}
			typeparams.MarkImplicit(iface)
		}
		// The constraint type may not be complete, if we
		// are in the middle of a type recursion involving type
		// constraints. So, we defer SetConstraint until we have
		// completely set up all types in ImportData.
		r.p.later = append(r.p.later, setConstraintArgs{t: t, constraint: constraint})

	case 'V':
		typ := r.typ()

		r.declare(types.NewVar(pos, r.currPkg, name, typ))

	default:
		errorf("unexpected tag: %v", tag)
	}
}

func (r *importReader) declare(obj types.Object) {
	obj.Pkg().Scope().Insert(obj)
}

func (r *importReader) value() (typ types.Type, val constant.Value) {
	typ = r.typ()
	if r.p.version >= iexportVersionGo1_18 {
		// TODO: add support for using the kind.
		_ = constant.Kind(r.int64())
	}

	switch b := typ.Underlying().(*types.Basic); b.Info() & types.IsConstType {
	case types.IsBoolean:
		val = constant.MakeBool(r.bool())

	case types.IsString:
		val = constant.MakeString(r.string())

	case types.IsInteger:
		var x big.Int
		r.mpint(&x, b)
		val = constant.Make(&x)

	case types.IsFloat:
		val = r.mpfloat(b)

	case types.IsComplex:
		re := r.mpfloat(b)
		im := r.mpfloat(b)
		val = constant.BinaryOp(re, token.ADD, constant.MakeImag(im))

	default:
		if b.Kind() == types.Invalid {
			val = constant.MakeUnknown()
			return
		}
		errorf("unexpected type %v", typ) // panics
		panic("unreachable")
	}

	return
}

func intSize(b *types.Basic) (signed bool, maxBytes uint) {
	if (b.Info() & types.IsUntyped) != 0 {
		return true, 64
	}

	switch b.Kind() {
	case types.Float32, types.Complex64:
		return true, 3
	case types.Float64, types.Complex128:
		return true, 7
	}

	signed = (b.Info() & types.IsUnsigned) == 0
	switch b.Kind() {
	case types.Int8, types.Uint8:
		maxBytes = 1
	case types.Int16, types.Uint16:
		maxBytes = 2
	case types.Int32, types.Uint32:
		maxBytes = 4
	default:
		maxBytes = 8
	}

	return
}

func (r *importReader) mpint(x *big.Int, typ *types.Basic) {
	signed, maxBytes := intSize(typ)

	maxSmall := 256 - maxBytes
	if signed {
		maxSmall = 256 - 2*maxBytes
	}
	if maxBytes == 1 {
		maxSmall = 256
	}

	n, _ := r.declReader.ReadByte()
	if uint(n) < maxSmall {
		v := int64(n)
		if signed {
			v >>= 1
			if n&1 != 0 {
				v = ^v
			}
		}
		x.SetInt64(v)
		return
	}

	v := -n
	if signed {
		v = -(n &^ 1) >> 1
	}
	if v < 1 || uint(v) > maxBytes {
		errorf("weird decoding: %v, %v => %v", n, signed, v)
	}
	b := make([]byte, v)
	io.ReadFull(&r.declReader, b)
	x.SetBytes(b)
	if signed && n&1 != 0 {
		x.Neg(x)
	}
}

func (r *importReader) mpfloat(typ *types.Basic) constant.Value {
	var mant big.Int
	r.mpint(&mant, typ)
	var f big.Float
	f.SetInt(&mant)
	if f.Sign() != 0 {
		f.SetMantExp(&f, int(r.int64()))
	}
	return constant.Make(&f)
}

func (r *importReader) ident() string {
	return r.string()
}

func (r *importReader) qualifiedIdent() (*types.Package, string) {
	name := r.string()
	pkg := r.pkg()
	return pkg, name
}

func (r *importReader) pos() token.Pos {
	if r.p.insert != nil { // shallow mode
		return r.posv2()
	}
	if r.p.version >= iexportVersionPosCol {
		r.posv1()
	} else {
		r.posv0()
	}

	if r.prevFile == "" && r.prevLine == 0 && r.prevColumn == 0 {
		return token.NoPos
	}
	return r.p.fake.pos(r.prevFile, int(r.prevLine), int(r.prevColumn))
}

func (r *importReader) posv0() {
	delta := r.int64()
	if delta != deltaNewFile {
		r.prevLine += delta
	} else if l := r.int64(); l == -1 {
		r.prevLine += deltaNewFile
	} else {
		r.prevFile = r.string()
		r.prevLine = l
	}
}

func (r *importReader) posv1() {
	delta := r.int64()
	r.prevColumn += delta >> 1
	if delta&1 != 0 {
		delta = r.int64()
		r.prevLine += delta >> 1
		if delta&1 != 0 {
			r.prevFile = r.string()
		}
	}
}

func (r *importReader) posv2() token.Pos {
	file := r.uint64()
	if file == 0 {
		return token.NoPos
	}
	tf := r.p.fileAt(file - 1)
	return tf.Pos(int(r.uint64()))
}

func (r *importReader) typ() types.Type {
	return r.p.typAt(r.uint64(), nil)
}

func isInterface(t types.Type) bool {
	_, ok := t.(*types.Interface)
	return ok
}

func (r *importReader) pkg() *types.Package { return r.p.pkgAt(r.uint64()) }
func (r *importReader) string() string      { return r.p.stringAt(r.uint64()) }

func (r *importReader) doType(base *types.Named) (res types.Type) {
	k := r.kind()
	if debug {
		r.p.trace("importing type %d (base: %s)", k, base)
		r.p.indent++
		defer func() {
			r.p.indent--
			r.p.trace("=> %s", res)
		}()
	}
	switch k {
	default:
		errorf("unexpected kind tag in %q: %v", r.p.ipath, k)
		return nil

	case definedType:
		pkg, name := r.qualifiedIdent()
		r.p.doDecl(pkg, name)
		return pkg.Scope().Lookup(name).(*types.TypeName).Type()
	case pointerType:
		return types.NewPointer(r.typ())
	case sliceType:
		return types.NewSlice(r.typ())
	case arrayType:
		n := r.uint64()
		return types.NewArray(r.typ(), int64(n))
	case chanType:
		dir := chanDir(int(r.uint64()))
		return types.NewChan(dir, r.typ())
	case mapType:
		return types.NewMap(r.typ(), r.typ())
	case signatureType:
		r.currPkg = r.pkg()
		return r.signature(nil, nil, nil)

	case structType:
		r.currPkg = r.pkg()

		fields := make([]*types.Var, r.uint64())
		tags := make([]string, len(fields))
		for i := range fields {
			fpos := r.pos()
			fname := r.ident()
			ftyp := r.typ()
			emb := r.bool()
			tag := r.string()

			fields[i] = types.NewField(fpos, r.currPkg, fname, ftyp, emb)
			tags[i] = tag
		}
		return types.NewStruct(fields, tags)

	case interfaceType:
		r.currPkg = r.pkg()

		embeddeds := make([]types.Type, r.uint64())
		for i := range embeddeds {
			_ = r.pos()
			embeddeds[i] = r.typ()
		}

		methods := make([]*types.Func, r.uint64())
		for i := range methods {
			mpos := r.pos()
			mname := r.ident()

			// TODO(mdempsky): Matches bimport.go, but I
			// don't agree with this.
			var recv *types.Var
			if base != nil {
				recv = types.NewVar(token.NoPos, r.currPkg, "", base)
			}

			msig := r.signature(recv, nil, nil)
			methods[i] = types.NewFunc(mpos, r.currPkg, mname, msig)
		}

		typ := newInterface(methods, embeddeds)
		r.p.interfaceList = append(r.p.interfaceList, typ)
		return typ

	case typeParamType:
		if r.p.version < iexportVersionGenerics {
			errorf("unexpected type param type")
		}
		pkg, name := r.qualifiedIdent()
		id := ident{pkg, name}
		if t, ok := r.p.tparamIndex[id]; ok {
			// We're already in the process of importing this typeparam.
			return t
		}
		// Otherwise, import the definition of the typeparam now.
		r.p.doDecl(pkg, name)
		return r.p.tparamIndex[id]

	case instanceType:
		if r.p.version < iexportVersionGenerics {
			errorf("unexpected instantiation type")
		}
		// pos does not matter for instances: they are positioned on the original
		// type.
		_ = r.pos()
		len := r.uint64()
		targs := make([]types.Type, len)
		for i := range targs {
			targs[i] = r.typ()
		}
		baseType := r.typ()
		// The imported instantiated type doesn't include any methods, so
		// we must always use the methods of the base (orig) type.
		// TODO provide a non-nil *Environment
		t, _ := typeparams.Instantiate(nil, baseType, targs, false)
		return t

	case unionType:
		if r.p.version < iexportVersionGenerics {
			errorf("unexpected instantiation type")
		}
		terms := make([]*typeparams.Term, r.uint64())
		for i := range terms {
			terms[i] = typeparams.NewTerm(r.bool(), r.typ())
		}
		return typeparams.NewUnion(terms)
	}
}

func (r *importReader) kind() itag {
	return itag(r.uint64())
}

func (r *importReader) signature(recv *types.Var, rparams []*typeparams.TypeParam, tparams []*typeparams.TypeParam) *types.Signature {
	params := r.paramList()
	results := r.paramList()
	variadic := params.Len() > 0 && r.bool()
	return typeparams.NewSignatureType(recv, rparams, tparams, params, results, variadic)
}

func (r *importReader) tparamList() []*typeparams.TypeParam {
	n := r.uint64()
	if n == 0 {
		return nil
	}
	xs := make([]*typeparams.TypeParam, n)
	for i := range xs {
		// Note: the standard library importer is tolerant of nil types here,
		// though would panic in SetTypeParams.
		xs[i] = r.typ().(*typeparams.TypeParam)
	}
	return xs
}

func (r *importReader) paramList() *types.Tuple {
	xs := make([]*types.Var, r.uint64())
	for i := range xs {
		xs[i] = r.param()
	}
	return types.NewTuple(xs...)
}

func (r *importReader) param() *types.Var {
	pos := r.pos()
	name := r.ident()
	typ := r.typ()
	return types.NewParam(pos, r.currPkg, name, typ)
}

func (r *importReader) bool() bool {
	return r.uint64() != 0
}

func (r *importReader) int64() int64 {
	n, err := binary.ReadVarint(&r.declReader)
	if err != nil {
		errorf("readVarint: %v", err)
	}
	return n
}

func (r *importReader) uint64() uint64 {
	n, err := binary.ReadUvarint(&r.declReader)
	if err != nil {
		errorf("readUvarint: %v", err)
	}
	return n
}

func (r *importReader) byte() byte {
	x, err := r.declReader.ReadByte()
	if err != nil {
		errorf("declReader.ReadByte: %v", err)
	}
	return x
}

func baseType(typ types.Type) *types.Named {
	// pointer receivers are never types.Named types
	if p, _ := typ.(*types.Pointer); p != nil {
		typ = p.Elem()
	}
	// receiver base types are always (possibly generic) types.Named types
	n, _ := typ.(*types.Named)
	return n
}
  07070100000F78000081A4000000000000000000000001645E367C0000025C000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/gcimporter/newInterface10.go   // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build !go1.11
// +build !go1.11

package gcimporter

import "go/types"

func newInterface(methods []*types.Func, embeddeds []types.Type) *types.Interface {
	named := make([]*types.Named, len(embeddeds))
	for i, e := range embeddeds {
		var ok bool
		named[i], ok = e.(*types.Named)
		if !ok {
			panic("embedding of non-defined interfaces in interfaces is not supported before Go 1.11")
		}
	}
	return types.NewInterface(methods, named)
}
07070100000F79000081A4000000000000000000000001645E367C00000174000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/gcimporter/newInterface11.go   // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build go1.11
// +build go1.11

package gcimporter

import "go/types"

func newInterface(methods []*types.Func, embeddeds []types.Type) *types.Interface {
	return types.NewInterfaceType(methods, embeddeds)
}
07070100000F7A000081A4000000000000000000000001645E367C00000154000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/gcimporter/support_go117.go    // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build !go1.18
// +build !go1.18

package gcimporter

import "go/types"

const iexportVersion = iexportVersionGo1_11

func additionalPredeclared() []types.Type {
	return nil
}
07070100000F7B000081A4000000000000000000000001645E367C0000035F000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/gcimporter/support_go118.go    // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build go1.18
// +build go1.18

package gcimporter

import "go/types"

const iexportVersion = iexportVersionGenerics

// additionalPredeclared returns additional predeclared types in go.1.18.
func additionalPredeclared() []types.Type {
	return []types.Type{
		// comparable
		types.Universe.Lookup("comparable").Type(),

		// any
		types.Universe.Lookup("any").Type(),
	}
}

// See cmd/compile/internal/types.SplitVargenSuffix.
func splitVargenSuffix(name string) (base, suffix string) {
	i := len(name)
	for i > 0 && name[i-1] >= '0' && name[i-1] <= '9' {
		i--
	}
	const dot = "·"
	if i >= len(dot) && name[i-len(dot):i] == dot {
		i -= len(dot)
		return name[:i], name[i:]
	}
	return name, ""
}
 07070100000F7C000081A4000000000000000000000001645E367C00000122000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/gcimporter/unified_no.go   // Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build !(go1.18 && goexperiment.unified)
// +build !go1.18 !goexperiment.unified

package gcimporter

const unifiedIR = false
  07070100000F7D000081A4000000000000000000000001645E367C0000011C000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/gcimporter/unified_yes.go  // Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build go1.18 && goexperiment.unified
// +build go1.18,goexperiment.unified

package gcimporter

const unifiedIR = true
07070100000F7E000081A4000000000000000000000001645E367C00000209000000000000000000000000000000000000005000000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/gcimporter/ureader_no.go   // Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build !go1.18
// +build !go1.18

package gcimporter

import (
	"fmt"
	"go/token"
	"go/types"
)

func UImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (_ int, pkg *types.Package, err error) {
	err = fmt.Errorf("go/tools compiled with a Go version earlier than 1.18 cannot read unified IR export data")
	return
}
   07070100000F7F000081A4000000000000000000000001645E367C00004744000000000000000000000000000000000000005100000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go  // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Derived from go/internal/gcimporter/ureader.go

//go:build go1.18
// +build go1.18

package gcimporter

import (
	"go/token"
	"go/types"
	"sort"
	"strings"

	"golang.org/x/tools/internal/pkgbits"
)

// A pkgReader holds the shared state for reading a unified IR package
// description.
type pkgReader struct {
	pkgbits.PkgDecoder

	fake fakeFileSet

	ctxt    *types.Context
	imports map[string]*types.Package // previously imported packages, indexed by path

	// lazily initialized arrays corresponding to the unified IR
	// PosBase, Pkg, and Type sections, respectively.
	posBases []string // position bases (i.e., file names)
	pkgs     []*types.Package
	typs     []types.Type

	// laterFns holds functions that need to be invoked at the end of
	// import reading.
	laterFns []func()
	// laterFors is used in case of 'type A B' to ensure that B is processed before A.
	laterFors map[types.Type]int

	// ifaces holds a list of constructed Interfaces, which need to have
	// Complete called after importing is done.
	ifaces []*types.Interface
}

// later adds a function to be invoked at the end of import reading.
func (pr *pkgReader) later(fn func()) {
	pr.laterFns = append(pr.laterFns, fn)
}

// See cmd/compile/internal/noder.derivedInfo.
type derivedInfo struct {
	idx    pkgbits.Index
	needed bool
}

// See cmd/compile/internal/noder.typeInfo.
type typeInfo struct {
	idx     pkgbits.Index
	derived bool
}

func UImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (_ int, pkg *types.Package, err error) {
	s := string(data)
	s = s[:strings.LastIndex(s, "\n$$\n")]
	input := pkgbits.NewPkgDecoder(path, s)
	pkg = readUnifiedPackage(fset, nil, imports, input)
	return
}

// laterFor adds a function to be invoked at the end of import reading, and records the type that function is finishing.
func (pr *pkgReader) laterFor(t types.Type, fn func()) {
	if pr.laterFors == nil {
		pr.laterFors = make(map[types.Type]int)
	}
	pr.laterFors[t] = len(pr.laterFns)
	pr.laterFns = append(pr.laterFns, fn)
}

// readUnifiedPackage reads a package description from the given
// unified IR export data decoder.
func readUnifiedPackage(fset *token.FileSet, ctxt *types.Context, imports map[string]*types.Package, input pkgbits.PkgDecoder) *types.Package {
	pr := pkgReader{
		PkgDecoder: input,

		fake: fakeFileSet{
			fset:  fset,
			files: make(map[string]*fileInfo),
		},

		ctxt:    ctxt,
		imports: imports,

		posBases: make([]string, input.NumElems(pkgbits.RelocPosBase)),
		pkgs:     make([]*types.Package, input.NumElems(pkgbits.RelocPkg)),
		typs:     make([]types.Type, input.NumElems(pkgbits.RelocType)),
	}
	defer pr.fake.setLines()

	r := pr.newReader(pkgbits.RelocMeta, pkgbits.PublicRootIdx, pkgbits.SyncPublic)
	pkg := r.pkg()
	r.Bool() // has init

	for i, n := 0, r.Len(); i < n; i++ {
		// As if r.obj(), but avoiding the Scope.Lookup call,
		// to avoid eager loading of imports.
		r.Sync(pkgbits.SyncObject)
		assert(!r.Bool())
		r.p.objIdx(r.Reloc(pkgbits.RelocObj))
		assert(r.Len() == 0)
	}

	r.Sync(pkgbits.SyncEOF)

	for _, fn := range pr.laterFns {
		fn()
	}

	for _, iface := range pr.ifaces {
		iface.Complete()
	}

	// Imports() of pkg are all of the transitive packages that were loaded.
	var imps []*types.Package
	for _, imp := range pr.pkgs {
		if imp != nil && imp != pkg {
			imps = append(imps, imp)
		}
	}
	sort.Sort(byPath(imps))
	pkg.SetImports(imps)

	pkg.MarkComplete()
	return pkg
}

// A reader holds the state for reading a single unified IR element
// within a package.
type reader struct {
	pkgbits.Decoder

	p *pkgReader

	dict *readerDict
}

// A readerDict holds the state for type parameters that parameterize
// the current unified IR element.
type readerDict struct {
	// bounds is a slice of typeInfos corresponding to the underlying
	// bounds of the element's type parameters.
	bounds []typeInfo

	// tparams is a slice of the constructed TypeParams for the element.
	tparams []*types.TypeParam

	// devived is a slice of types derived from tparams, which may be
	// instantiated while reading the current element.
	derived      []derivedInfo
	derivedTypes []types.Type // lazily instantiated from derived
}

func (pr *pkgReader) newReader(k pkgbits.RelocKind, idx pkgbits.Index, marker pkgbits.SyncMarker) *reader {
	return &reader{
		Decoder: pr.NewDecoder(k, idx, marker),
		p:       pr,
	}
}

func (pr *pkgReader) tempReader(k pkgbits.RelocKind, idx pkgbits.Index, marker pkgbits.SyncMarker) *reader {
	return &reader{
		Decoder: pr.TempDecoder(k, idx, marker),
		p:       pr,
	}
}

func (pr *pkgReader) retireReader(r *reader) {
	pr.RetireDecoder(&r.Decoder)
}

// @@@ Positions

func (r *reader) pos() token.Pos {
	r.Sync(pkgbits.SyncPos)
	if !r.Bool() {
		return token.NoPos
	}

	// TODO(mdempsky): Delta encoding.
	posBase := r.posBase()
	line := r.Uint()
	col := r.Uint()
	return r.p.fake.pos(posBase, int(line), int(col))
}

func (r *reader) posBase() string {
	return r.p.posBaseIdx(r.Reloc(pkgbits.RelocPosBase))
}

func (pr *pkgReader) posBaseIdx(idx pkgbits.Index) string {
	if b := pr.posBases[idx]; b != "" {
		return b
	}

	var filename string
	{
		r := pr.tempReader(pkgbits.RelocPosBase, idx, pkgbits.SyncPosBase)

		// Within types2, position bases have a lot more details (e.g.,
		// keeping track of where //line directives appeared exactly).
		//
		// For go/types, we just track the file name.

		filename = r.String()

		if r.Bool() { // file base
			// Was: "b = token.NewTrimmedFileBase(filename, true)"
		} else { // line base
			pos := r.pos()
			line := r.Uint()
			col := r.Uint()

			// Was: "b = token.NewLineBase(pos, filename, true, line, col)"
			_, _, _ = pos, line, col
		}
		pr.retireReader(r)
	}
	b := filename
	pr.posBases[idx] = b
	return b
}

// @@@ Packages

func (r *reader) pkg() *types.Package {
	r.Sync(pkgbits.SyncPkg)
	return r.p.pkgIdx(r.Reloc(pkgbits.RelocPkg))
}

func (pr *pkgReader) pkgIdx(idx pkgbits.Index) *types.Package {
	// TODO(mdempsky): Consider using some non-nil pointer to indicate
	// the universe scope, so we don't need to keep re-reading it.
	if pkg := pr.pkgs[idx]; pkg != nil {
		return pkg
	}

	pkg := pr.newReader(pkgbits.RelocPkg, idx, pkgbits.SyncPkgDef).doPkg()
	pr.pkgs[idx] = pkg
	return pkg
}

func (r *reader) doPkg() *types.Package {
	path := r.String()
	switch path {
	case "":
		path = r.p.PkgPath()
	case "builtin":
		return nil // universe
	case "unsafe":
		return types.Unsafe
	}

	if pkg := r.p.imports[path]; pkg != nil {
		return pkg
	}

	name := r.String()

	pkg := types.NewPackage(path, name)
	r.p.imports[path] = pkg

	return pkg
}

// @@@ Types

func (r *reader) typ() types.Type {
	return r.p.typIdx(r.typInfo(), r.dict)
}

func (r *reader) typInfo() typeInfo {
	r.Sync(pkgbits.SyncType)
	if r.Bool() {
		return typeInfo{idx: pkgbits.Index(r.Len()), derived: true}
	}
	return typeInfo{idx: r.Reloc(pkgbits.RelocType), derived: false}
}

func (pr *pkgReader) typIdx(info typeInfo, dict *readerDict) types.Type {
	idx := info.idx
	var where *types.Type
	if info.derived {
		where = &dict.derivedTypes[idx]
		idx = dict.derived[idx].idx
	} else {
		where = &pr.typs[idx]
	}

	if typ := *where; typ != nil {
		return typ
	}

	var typ types.Type
	{
		r := pr.tempReader(pkgbits.RelocType, idx, pkgbits.SyncTypeIdx)
		r.dict = dict

		typ = r.doTyp()
		assert(typ != nil)
		pr.retireReader(r)
	}
	// See comment in pkgReader.typIdx explaining how this happens.
	if prev := *where; prev != nil {
		return prev
	}

	*where = typ
	return typ
}

func (r *reader) doTyp() (res types.Type) {
	switch tag := pkgbits.CodeType(r.Code(pkgbits.SyncType)); tag {
	default:
		errorf("unhandled type tag: %v", tag)
		panic("unreachable")

	case pkgbits.TypeBasic:
		return types.Typ[r.Len()]

	case pkgbits.TypeNamed:
		obj, targs := r.obj()
		name := obj.(*types.TypeName)
		if len(targs) != 0 {
			t, _ := types.Instantiate(r.p.ctxt, name.Type(), targs, false)
			return t
		}
		return name.Type()

	case pkgbits.TypeTypeParam:
		return r.dict.tparams[r.Len()]

	case pkgbits.TypeArray:
		len := int64(r.Uint64())
		return types.NewArray(r.typ(), len)
	case pkgbits.TypeChan:
		dir := types.ChanDir(r.Len())
		return types.NewChan(dir, r.typ())
	case pkgbits.TypeMap:
		return types.NewMap(r.typ(), r.typ())
	case pkgbits.TypePointer:
		return types.NewPointer(r.typ())
	case pkgbits.TypeSignature:
		return r.signature(nil, nil, nil)
	case pkgbits.TypeSlice:
		return types.NewSlice(r.typ())
	case pkgbits.TypeStruct:
		return r.structType()
	case pkgbits.TypeInterface:
		return r.interfaceType()
	case pkgbits.TypeUnion:
		return r.unionType()
	}
}

func (r *reader) structType() *types.Struct {
	fields := make([]*types.Var, r.Len())
	var tags []string
	for i := range fields {
		pos := r.pos()
		pkg, name := r.selector()
		ftyp := r.typ()
		tag := r.String()
		embedded := r.Bool()

		fields[i] = types.NewField(pos, pkg, name, ftyp, embedded)
		if tag != "" {
			for len(tags) < i {
				tags = append(tags, "")
			}
			tags = append(tags, tag)
		}
	}
	return types.NewStruct(fields, tags)
}

func (r *reader) unionType() *types.Union {
	terms := make([]*types.Term, r.Len())
	for i := range terms {
		terms[i] = types.NewTerm(r.Bool(), r.typ())
	}
	return types.NewUnion(terms)
}

func (r *reader) interfaceType() *types.Interface {
	methods := make([]*types.Func, r.Len())
	embeddeds := make([]types.Type, r.Len())
	implicit := len(methods) == 0 && len(embeddeds) == 1 && r.Bool()

	for i := range methods {
		pos := r.pos()
		pkg, name := r.selector()
		mtyp := r.signature(nil, nil, nil)
		methods[i] = types.NewFunc(pos, pkg, name, mtyp)
	}

	for i := range embeddeds {
		embeddeds[i] = r.typ()
	}

	iface := types.NewInterfaceType(methods, embeddeds)
	if implicit {
		iface.MarkImplicit()
	}

	// We need to call iface.Complete(), but if there are any embedded
	// defined types, then we may not have set their underlying
	// interface type yet. So we need to defer calling Complete until
	// after we've called SetUnderlying everywhere.
	//
	// TODO(mdempsky): After CL 424876 lands, it should be safe to call
	// iface.Complete() immediately.
	r.p.ifaces = append(r.p.ifaces, iface)

	return iface
}

func (r *reader) signature(recv *types.Var, rtparams, tparams []*types.TypeParam) *types.Signature {
	r.Sync(pkgbits.SyncSignature)

	params := r.params()
	results := r.params()
	variadic := r.Bool()

	return types.NewSignatureType(recv, rtparams, tparams, params, results, variadic)
}

func (r *reader) params() *types.Tuple {
	r.Sync(pkgbits.SyncParams)

	params := make([]*types.Var, r.Len())
	for i := range params {
		params[i] = r.param()
	}

	return types.NewTuple(params...)
}

func (r *reader) param() *types.Var {
	r.Sync(pkgbits.SyncParam)

	pos := r.pos()
	pkg, name := r.localIdent()
	typ := r.typ()

	return types.NewParam(pos, pkg, name, typ)
}

// @@@ Objects

func (r *reader) obj() (types.Object, []types.Type) {
	r.Sync(pkgbits.SyncObject)

	assert(!r.Bool())

	pkg, name := r.p.objIdx(r.Reloc(pkgbits.RelocObj))
	obj := pkgScope(pkg).Lookup(name)

	targs := make([]types.Type, r.Len())
	for i := range targs {
		targs[i] = r.typ()
	}

	return obj, targs
}

func (pr *pkgReader) objIdx(idx pkgbits.Index) (*types.Package, string) {

	var objPkg *types.Package
	var objName string
	var tag pkgbits.CodeObj
	{
		rname := pr.tempReader(pkgbits.RelocName, idx, pkgbits.SyncObject1)

		objPkg, objName = rname.qualifiedIdent()
		assert(objName != "")

		tag = pkgbits.CodeObj(rname.Code(pkgbits.SyncCodeObj))
		pr.retireReader(rname)
	}

	if tag == pkgbits.ObjStub {
		assert(objPkg == nil || objPkg == types.Unsafe)
		return objPkg, objName
	}

	// Ignore local types promoted to global scope (#55110).
	if _, suffix := splitVargenSuffix(objName); suffix != "" {
		return objPkg, objName
	}

	if objPkg.Scope().Lookup(objName) == nil {
		dict := pr.objDictIdx(idx)

		r := pr.newReader(pkgbits.RelocObj, idx, pkgbits.SyncObject1)
		r.dict = dict

		declare := func(obj types.Object) {
			objPkg.Scope().Insert(obj)
		}

		switch tag {
		default:
			panic("weird")

		case pkgbits.ObjAlias:
			pos := r.pos()
			typ := r.typ()
			declare(types.NewTypeName(pos, objPkg, objName, typ))

		case pkgbits.ObjConst:
			pos := r.pos()
			typ := r.typ()
			val := r.Value()
			declare(types.NewConst(pos, objPkg, objName, typ, val))

		case pkgbits.ObjFunc:
			pos := r.pos()
			tparams := r.typeParamNames()
			sig := r.signature(nil, nil, tparams)
			declare(types.NewFunc(pos, objPkg, objName, sig))

		case pkgbits.ObjType:
			pos := r.pos()

			obj := types.NewTypeName(pos, objPkg, objName, nil)
			named := types.NewNamed(obj, nil, nil)
			declare(obj)

			named.SetTypeParams(r.typeParamNames())

			setUnderlying := func(underlying types.Type) {
				// If the underlying type is an interface, we need to
				// duplicate its methods so we can replace the receiver
				// parameter's type (#49906).
				if iface, ok := underlying.(*types.Interface); ok && iface.NumExplicitMethods() != 0 {
					methods := make([]*types.Func, iface.NumExplicitMethods())
					for i := range methods {
						fn := iface.ExplicitMethod(i)
						sig := fn.Type().(*types.Signature)

						recv := types.NewVar(fn.Pos(), fn.Pkg(), "", named)
						methods[i] = types.NewFunc(fn.Pos(), fn.Pkg(), fn.Name(), types.NewSignature(recv, sig.Params(), sig.Results(), sig.Variadic()))
					}

					embeds := make([]types.Type, iface.NumEmbeddeds())
					for i := range embeds {
						embeds[i] = iface.EmbeddedType(i)
					}

					newIface := types.NewInterfaceType(methods, embeds)
					r.p.ifaces = append(r.p.ifaces, newIface)
					underlying = newIface
				}

				named.SetUnderlying(underlying)
			}

			// Since go.dev/cl/455279, we can assume rhs.Underlying() will
			// always be non-nil. However, to temporarily support users of
			// older snapshot releases, we continue to fallback to the old
			// behavior for now.
			//
			// TODO(mdempsky): Remove fallback code and simplify after
			// allowing time for snapshot users to upgrade.
			rhs := r.typ()
			if underlying := rhs.Underlying(); underlying != nil {
				setUnderlying(underlying)
			} else {
				pk := r.p
				pk.laterFor(named, func() {
					// First be sure that the rhs is initialized, if it needs to be initialized.
					delete(pk.laterFors, named) // prevent cycles
					if i, ok := pk.laterFors[rhs]; ok {
						f := pk.laterFns[i]
						pk.laterFns[i] = func() {} // function is running now, so replace it with a no-op
						f()                        // initialize RHS
					}
					setUnderlying(rhs.Underlying())
				})
			}

			for i, n := 0, r.Len(); i < n; i++ {
				named.AddMethod(r.method())
			}

		case pkgbits.ObjVar:
			pos := r.pos()
			typ := r.typ()
			declare(types.NewVar(pos, objPkg, objName, typ))
		}
	}

	return objPkg, objName
}

func (pr *pkgReader) objDictIdx(idx pkgbits.Index) *readerDict {

	var dict readerDict

	{
		r := pr.tempReader(pkgbits.RelocObjDict, idx, pkgbits.SyncObject1)
		if implicits := r.Len(); implicits != 0 {
			errorf("unexpected object with %v implicit type parameter(s)", implicits)
		}

		dict.bounds = make([]typeInfo, r.Len())
		for i := range dict.bounds {
			dict.bounds[i] = r.typInfo()
		}

		dict.derived = make([]derivedInfo, r.Len())
		dict.derivedTypes = make([]types.Type, len(dict.derived))
		for i := range dict.derived {
			dict.derived[i] = derivedInfo{r.Reloc(pkgbits.RelocType), r.Bool()}
		}

		pr.retireReader(r)
	}
	// function references follow, but reader doesn't need those

	return &dict
}

func (r *reader) typeParamNames() []*types.TypeParam {
	r.Sync(pkgbits.SyncTypeParamNames)

	// Note: This code assumes it only processes objects without
	// implement type parameters. This is currently fine, because
	// reader is only used to read in exported declarations, which are
	// always package scoped.

	if len(r.dict.bounds) == 0 {
		return nil
	}

	// Careful: Type parameter lists may have cycles. To allow for this,
	// we construct the type parameter list in two passes: first we
	// create all the TypeNames and TypeParams, then we construct and
	// set the bound type.

	r.dict.tparams = make([]*types.TypeParam, len(r.dict.bounds))
	for i := range r.dict.bounds {
		pos := r.pos()
		pkg, name := r.localIdent()

		tname := types.NewTypeName(pos, pkg, name, nil)
		r.dict.tparams[i] = types.NewTypeParam(tname, nil)
	}

	typs := make([]types.Type, len(r.dict.bounds))
	for i, bound := range r.dict.bounds {
		typs[i] = r.p.typIdx(bound, r.dict)
	}

	// TODO(mdempsky): This is subtle, elaborate further.
	//
	// We have to save tparams outside of the closure, because
	// typeParamNames() can be called multiple times with the same
	// dictionary instance.
	//
	// Also, this needs to happen later to make sure SetUnderlying has
	// been called.
	//
	// TODO(mdempsky): Is it safe to have a single "later" slice or do
	// we need to have multiple passes? See comments on CL 386002 and
	// go.dev/issue/52104.
	tparams := r.dict.tparams
	r.p.later(func() {
		for i, typ := range typs {
			tparams[i].SetConstraint(typ)
		}
	})

	return r.dict.tparams
}

func (r *reader) method() *types.Func {
	r.Sync(pkgbits.SyncMethod)
	pos := r.pos()
	pkg, name := r.selector()

	rparams := r.typeParamNames()
	sig := r.signature(r.param(), rparams, nil)

	_ = r.pos() // TODO(mdempsky): Remove; this is a hacker for linker.go.
	return types.NewFunc(pos, pkg, name, sig)
}

func (r *reader) qualifiedIdent() (*types.Package, string) { return r.ident(pkgbits.SyncSym) }
func (r *reader) localIdent() (*types.Package, string)     { return r.ident(pkgbits.SyncLocalIdent) }
func (r *reader) selector() (*types.Package, string)       { return r.ident(pkgbits.SyncSelector) }

func (r *reader) ident(marker pkgbits.SyncMarker) (*types.Package, string) {
	r.Sync(marker)
	return r.pkg(), r.String()
}

// pkgScope returns pkg.Scope().
// If pkg is nil, it returns types.Universe instead.
//
// TODO(mdempsky): Remove after x/tools can depend on Go 1.19.
func pkgScope(pkg *types.Package) *types.Scope {
	if pkg != nil {
		return pkg.Scope()
	}
	return types.Universe
}
07070100000F80000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/gocommand  07070100000F81000081A4000000000000000000000001645E367C0000291E000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/gocommand/invoke.go    // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package gocommand is a helper for calling the go command.
package gocommand

import (
	"bytes"
	"context"
	"fmt"
	"io"
	"log"
	"os"
	"regexp"
	"runtime"
	"strconv"
	"strings"
	"sync"
	"time"

	exec "golang.org/x/sys/execabs"

	"golang.org/x/tools/internal/event"
)

// An Runner will run go command invocations and serialize
// them if it sees a concurrency error.
type Runner struct {
	// once guards the runner initialization.
	once sync.Once

	// inFlight tracks available workers.
	inFlight chan struct{}

	// serialized guards the ability to run a go command serially,
	// to avoid deadlocks when claiming workers.
	serialized chan struct{}
}

const maxInFlight = 10

func (runner *Runner) initialize() {
	runner.once.Do(func() {
		runner.inFlight = make(chan struct{}, maxInFlight)
		runner.serialized = make(chan struct{}, 1)
	})
}

// 1.13: go: updates to go.mod needed, but contents have changed
// 1.14: go: updating go.mod: existing contents have changed since last read
var modConcurrencyError = regexp.MustCompile(`go:.*go.mod.*contents have changed`)

// Run is a convenience wrapper around RunRaw.
// It returns only stdout and a "friendly" error.
func (runner *Runner) Run(ctx context.Context, inv Invocation) (*bytes.Buffer, error) {
	stdout, _, friendly, _ := runner.RunRaw(ctx, inv)
	return stdout, friendly
}

// RunPiped runs the invocation serially, always waiting for any concurrent
// invocations to complete first.
func (runner *Runner) RunPiped(ctx context.Context, inv Invocation, stdout, stderr io.Writer) error {
	_, err := runner.runPiped(ctx, inv, stdout, stderr)
	return err
}

// RunRaw runs the invocation, serializing requests only if they fight over
// go.mod changes.
func (runner *Runner) RunRaw(ctx context.Context, inv Invocation) (*bytes.Buffer, *bytes.Buffer, error, error) {
	// Make sure the runner is always initialized.
	runner.initialize()

	// First, try to run the go command concurrently.
	stdout, stderr, friendlyErr, err := runner.runConcurrent(ctx, inv)

	// If we encounter a load concurrency error, we need to retry serially.
	if friendlyErr == nil || !modConcurrencyError.MatchString(friendlyErr.Error()) {
		return stdout, stderr, friendlyErr, err
	}
	event.Error(ctx, "Load concurrency error, will retry serially", err)

	// Run serially by calling runPiped.
	stdout.Reset()
	stderr.Reset()
	friendlyErr, err = runner.runPiped(ctx, inv, stdout, stderr)
	return stdout, stderr, friendlyErr, err
}

func (runner *Runner) runConcurrent(ctx context.Context, inv Invocation) (*bytes.Buffer, *bytes.Buffer, error, error) {
	// Wait for 1 worker to become available.
	select {
	case <-ctx.Done():
		return nil, nil, nil, ctx.Err()
	case runner.inFlight <- struct{}{}:
		defer func() { <-runner.inFlight }()
	}

	stdout, stderr := &bytes.Buffer{}, &bytes.Buffer{}
	friendlyErr, err := inv.runWithFriendlyError(ctx, stdout, stderr)
	return stdout, stderr, friendlyErr, err
}

func (runner *Runner) runPiped(ctx context.Context, inv Invocation, stdout, stderr io.Writer) (error, error) {
	// Make sure the runner is always initialized.
	runner.initialize()

	// Acquire the serialization lock. This avoids deadlocks between two
	// runPiped commands.
	select {
	case <-ctx.Done():
		return nil, ctx.Err()
	case runner.serialized <- struct{}{}:
		defer func() { <-runner.serialized }()
	}

	// Wait for all in-progress go commands to return before proceeding,
	// to avoid load concurrency errors.
	for i := 0; i < maxInFlight; i++ {
		select {
		case <-ctx.Done():
			return nil, ctx.Err()
		case runner.inFlight <- struct{}{}:
			// Make sure we always "return" any workers we took.
			defer func() { <-runner.inFlight }()
		}
	}

	return inv.runWithFriendlyError(ctx, stdout, stderr)
}

// An Invocation represents a call to the go command.
type Invocation struct {
	Verb       string
	Args       []string
	BuildFlags []string

	// If ModFlag is set, the go command is invoked with -mod=ModFlag.
	ModFlag string

	// If ModFile is set, the go command is invoked with -modfile=ModFile.
	ModFile string

	// If Overlay is set, the go command is invoked with -overlay=Overlay.
	Overlay string

	// If CleanEnv is set, the invocation will run only with the environment
	// in Env, not starting with os.Environ.
	CleanEnv   bool
	Env        []string
	WorkingDir string
	Logf       func(format string, args ...interface{})
}

func (i *Invocation) runWithFriendlyError(ctx context.Context, stdout, stderr io.Writer) (friendlyError error, rawError error) {
	rawError = i.run(ctx, stdout, stderr)
	if rawError != nil {
		friendlyError = rawError
		// Check for 'go' executable not being found.
		if ee, ok := rawError.(*exec.Error); ok && ee.Err == exec.ErrNotFound {
			friendlyError = fmt.Errorf("go command required, not found: %v", ee)
		}
		if ctx.Err() != nil {
			friendlyError = ctx.Err()
		}
		friendlyError = fmt.Errorf("err: %v: stderr: %s", friendlyError, stderr)
	}
	return
}

func (i *Invocation) run(ctx context.Context, stdout, stderr io.Writer) error {
	log := i.Logf
	if log == nil {
		log = func(string, ...interface{}) {}
	}

	goArgs := []string{i.Verb}

	appendModFile := func() {
		if i.ModFile != "" {
			goArgs = append(goArgs, "-modfile="+i.ModFile)
		}
	}
	appendModFlag := func() {
		if i.ModFlag != "" {
			goArgs = append(goArgs, "-mod="+i.ModFlag)
		}
	}
	appendOverlayFlag := func() {
		if i.Overlay != "" {
			goArgs = append(goArgs, "-overlay="+i.Overlay)
		}
	}

	switch i.Verb {
	case "env", "version":
		goArgs = append(goArgs, i.Args...)
	case "mod":
		// mod needs the sub-verb before flags.
		goArgs = append(goArgs, i.Args[0])
		appendModFile()
		goArgs = append(goArgs, i.Args[1:]...)
	case "get":
		goArgs = append(goArgs, i.BuildFlags...)
		appendModFile()
		goArgs = append(goArgs, i.Args...)

	default: // notably list and build.
		goArgs = append(goArgs, i.BuildFlags...)
		appendModFile()
		appendModFlag()
		appendOverlayFlag()
		goArgs = append(goArgs, i.Args...)
	}
	cmd := exec.Command("go", goArgs...)
	cmd.Stdout = stdout
	cmd.Stderr = stderr
	// On darwin the cwd gets resolved to the real path, which breaks anything that
	// expects the working directory to keep the original path, including the
	// go command when dealing with modules.
	// The Go stdlib has a special feature where if the cwd and the PWD are the
	// same node then it trusts the PWD, so by setting it in the env for the child
	// process we fix up all the paths returned by the go command.
	if !i.CleanEnv {
		cmd.Env = os.Environ()
	}
	cmd.Env = append(cmd.Env, i.Env...)
	if i.WorkingDir != "" {
		cmd.Env = append(cmd.Env, "PWD="+i.WorkingDir)
		cmd.Dir = i.WorkingDir
	}
	defer func(start time.Time) { log("%s for %v", time.Since(start), cmdDebugStr(cmd)) }(time.Now())

	return runCmdContext(ctx, cmd)
}

// DebugHangingGoCommands may be set by tests to enable additional
// instrumentation (including panics) for debugging hanging Go commands.
//
// See golang/go#54461 for details.
var DebugHangingGoCommands = false

// runCmdContext is like exec.CommandContext except it sends os.Interrupt
// before os.Kill.
func runCmdContext(ctx context.Context, cmd *exec.Cmd) error {
	if err := cmd.Start(); err != nil {
		return err
	}
	resChan := make(chan error, 1)
	go func() {
		resChan <- cmd.Wait()
	}()

	// If we're interested in debugging hanging Go commands, stop waiting after a
	// minute and panic with interesting information.
	if DebugHangingGoCommands {
		select {
		case err := <-resChan:
			return err
		case <-time.After(1 * time.Minute):
			HandleHangingGoCommand(cmd.Process)
		case <-ctx.Done():
		}
	} else {
		select {
		case err := <-resChan:
			return err
		case <-ctx.Done():
		}
	}

	// Cancelled. Interrupt and see if it ends voluntarily.
	cmd.Process.Signal(os.Interrupt)
	select {
	case err := <-resChan:
		return err
	case <-time.After(time.Second):
	}

	// Didn't shut down in response to interrupt. Kill it hard.
	// TODO(rfindley): per advice from bcmills@, it may be better to send SIGQUIT
	// on certain platforms, such as unix.
	if err := cmd.Process.Kill(); err != nil && DebugHangingGoCommands {
		// Don't panic here as this reliably fails on windows with EINVAL.
		log.Printf("error killing the Go command: %v", err)
	}

	// See above: don't wait indefinitely if we're debugging hanging Go commands.
	if DebugHangingGoCommands {
		select {
		case err := <-resChan:
			return err
		case <-time.After(10 * time.Second): // a shorter wait as resChan should return quickly following Kill
			HandleHangingGoCommand(cmd.Process)
		}
	}
	return <-resChan
}

func HandleHangingGoCommand(proc *os.Process) {
	switch runtime.GOOS {
	case "linux", "darwin", "freebsd", "netbsd":
		fmt.Fprintln(os.Stderr, `DETECTED A HANGING GO COMMAND

The gopls test runner has detected a hanging go command. In order to debug
this, the output of ps and lsof/fstat is printed below.

See golang/go#54461 for more details.`)

		fmt.Fprintln(os.Stderr, "\nps axo ppid,pid,command:")
		fmt.Fprintln(os.Stderr, "-------------------------")
		psCmd := exec.Command("ps", "axo", "ppid,pid,command")
		psCmd.Stdout = os.Stderr
		psCmd.Stderr = os.Stderr
		if err := psCmd.Run(); err != nil {
			panic(fmt.Sprintf("running ps: %v", err))
		}

		listFiles := "lsof"
		if runtime.GOOS == "freebsd" || runtime.GOOS == "netbsd" {
			listFiles = "fstat"
		}

		fmt.Fprintln(os.Stderr, "\n"+listFiles+":")
		fmt.Fprintln(os.Stderr, "-----")
		listFilesCmd := exec.Command(listFiles)
		listFilesCmd.Stdout = os.Stderr
		listFilesCmd.Stderr = os.Stderr
		if err := listFilesCmd.Run(); err != nil {
			panic(fmt.Sprintf("running %s: %v", listFiles, err))
		}
	}
	panic(fmt.Sprintf("detected hanging go command (pid %d): see golang/go#54461 for more details", proc.Pid))
}

func cmdDebugStr(cmd *exec.Cmd) string {
	env := make(map[string]string)
	for _, kv := range cmd.Env {
		split := strings.SplitN(kv, "=", 2)
		if len(split) == 2 {
			k, v := split[0], split[1]
			env[k] = v
		}
	}

	var args []string
	for _, arg := range cmd.Args {
		quoted := strconv.Quote(arg)
		if quoted[1:len(quoted)-1] != arg || strings.Contains(arg, " ") {
			args = append(args, quoted)
		} else {
			args = append(args, arg)
		}
	}
	return fmt.Sprintf("GOROOT=%v GOPATH=%v GO111MODULE=%v GOPROXY=%v PWD=%v %v", env["GOROOT"], env["GOPATH"], env["GO111MODULE"], env["GOPROXY"], env["PWD"], strings.Join(args, " "))
}
  07070100000F82000081A4000000000000000000000001645E367C00000D93000000000000000000000000000000000000004B00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/gocommand/vendor.go    // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package gocommand

import (
	"bytes"
	"context"
	"fmt"
	"os"
	"path/filepath"
	"regexp"
	"strings"
	"time"

	"golang.org/x/mod/semver"
)

// ModuleJSON holds information about a module.
type ModuleJSON struct {
	Path      string      // module path
	Version   string      // module version
	Versions  []string    // available module versions (with -versions)
	Replace   *ModuleJSON // replaced by this module
	Time      *time.Time  // time version was created
	Update    *ModuleJSON // available update, if any (with -u)
	Main      bool        // is this the main module?
	Indirect  bool        // is this module only an indirect dependency of main module?
	Dir       string      // directory holding files for this module, if any
	GoMod     string      // path to go.mod file used when loading this module, if any
	GoVersion string      // go version used in module
}

var modFlagRegexp = regexp.MustCompile(`-mod[ =](\w+)`)

// VendorEnabled reports whether vendoring is enabled. It takes a *Runner to execute Go commands
// with the supplied context.Context and Invocation. The Invocation can contain pre-defined fields,
// of which only Verb and Args are modified to run the appropriate Go command.
// Inspired by setDefaultBuildMod in modload/init.go
func VendorEnabled(ctx context.Context, inv Invocation, r *Runner) (bool, *ModuleJSON, error) {
	mainMod, go114, err := getMainModuleAnd114(ctx, inv, r)
	if err != nil {
		return false, nil, err
	}

	// We check the GOFLAGS to see if there is anything overridden or not.
	inv.Verb = "env"
	inv.Args = []string{"GOFLAGS"}
	stdout, err := r.Run(ctx, inv)
	if err != nil {
		return false, nil, err
	}
	goflags := string(bytes.TrimSpace(stdout.Bytes()))
	matches := modFlagRegexp.FindStringSubmatch(goflags)
	var modFlag string
	if len(matches) != 0 {
		modFlag = matches[1]
	}
	// Don't override an explicit '-mod=' argument.
	if modFlag == "vendor" {
		return true, mainMod, nil
	} else if modFlag != "" {
		return false, nil, nil
	}
	if mainMod == nil || !go114 {
		return false, nil, nil
	}
	// Check 1.14's automatic vendor mode.
	if fi, err := os.Stat(filepath.Join(mainMod.Dir, "vendor")); err == nil && fi.IsDir() {
		if mainMod.GoVersion != "" && semver.Compare("v"+mainMod.GoVersion, "v1.14") >= 0 {
			// The Go version is at least 1.14, and a vendor directory exists.
			// Set -mod=vendor by default.
			return true, mainMod, nil
		}
	}
	return false, nil, nil
}

// getMainModuleAnd114 gets one of the main modules' information and whether the
// go command in use is 1.14+. This is the information needed to figure out
// if vendoring should be enabled.
func getMainModuleAnd114(ctx context.Context, inv Invocation, r *Runner) (*ModuleJSON, bool, error) {
	const format = `{{.Path}}
{{.Dir}}
{{.GoMod}}
{{.GoVersion}}
{{range context.ReleaseTags}}{{if eq . "go1.14"}}{{.}}{{end}}{{end}}
`
	inv.Verb = "list"
	inv.Args = []string{"-m", "-f", format}
	stdout, err := r.Run(ctx, inv)
	if err != nil {
		return nil, false, err
	}

	lines := strings.Split(stdout.String(), "\n")
	if len(lines) < 5 {
		return nil, false, fmt.Errorf("unexpected stdout: %q", stdout.String())
	}
	mod := &ModuleJSON{
		Path:      lines[0],
		Dir:       lines[1],
		GoMod:     lines[2],
		GoVersion: lines[3],
		Main:      true,
	}
	return mod, lines[4] == "go1.14", nil
}
 07070100000F83000081A4000000000000000000000001645E367C00000A56000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/gocommand/version.go   // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package gocommand

import (
	"context"
	"fmt"
	"regexp"
	"strings"
)

// GoVersion reports the minor version number of the highest release
// tag built into the go command on the PATH.
//
// Note that this may be higher than the version of the go tool used
// to build this application, and thus the versions of the standard
// go/{scanner,parser,ast,types} packages that are linked into it.
// In that case, callers should either downgrade to the version of
// go used to build the application, or report an error that the
// application is too old to use the go command on the PATH.
func GoVersion(ctx context.Context, inv Invocation, r *Runner) (int, error) {
	inv.Verb = "list"
	inv.Args = []string{"-e", "-f", `{{context.ReleaseTags}}`, `--`, `unsafe`}
	inv.Env = append(append([]string{}, inv.Env...), "GO111MODULE=off")
	// Unset any unneeded flags, and remove them from BuildFlags, if they're
	// present.
	inv.ModFile = ""
	inv.ModFlag = ""
	var buildFlags []string
	for _, flag := range inv.BuildFlags {
		// Flags can be prefixed by one or two dashes.
		f := strings.TrimPrefix(strings.TrimPrefix(flag, "-"), "-")
		if strings.HasPrefix(f, "mod=") || strings.HasPrefix(f, "modfile=") {
			continue
		}
		buildFlags = append(buildFlags, flag)
	}
	inv.BuildFlags = buildFlags
	stdoutBytes, err := r.Run(ctx, inv)
	if err != nil {
		return 0, err
	}
	stdout := stdoutBytes.String()
	if len(stdout) < 3 {
		return 0, fmt.Errorf("bad ReleaseTags output: %q", stdout)
	}
	// Split up "[go1.1 go1.15]" and return highest go1.X value.
	tags := strings.Fields(stdout[1 : len(stdout)-2])
	for i := len(tags) - 1; i >= 0; i-- {
		var version int
		if _, err := fmt.Sscanf(tags[i], "go1.%d", &version); err != nil {
			continue
		}
		return version, nil
	}
	return 0, fmt.Errorf("no parseable ReleaseTags in %v", tags)
}

// GoVersionOutput returns the complete output of the go version command.
func GoVersionOutput(ctx context.Context, inv Invocation, r *Runner) (string, error) {
	inv.Verb = "version"
	goVersion, err := r.Run(ctx, inv)
	if err != nil {
		return "", err
	}
	return goVersion.String(), nil
}

// ParseGoVersionOutput extracts the Go version string
// from the output of the "go version" command.
// Given an unrecognized form, it returns an empty string.
func ParseGoVersionOutput(data string) string {
	re := regexp.MustCompile(`^go version (go\S+|devel \S+)`)
	m := re.FindStringSubmatch(data)
	if len(m) != 2 {
		return "" // unrecognized version
	}
	return m[1]
}
  07070100000F84000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/packagesinternal   07070100000F85000081A4000000000000000000000001645E367C00000452000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/packagesinternal/packages.go   // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package packagesinternal exposes internal-only fields from go/packages.
package packagesinternal

import (
	"golang.org/x/tools/internal/gocommand"
)

var GetForTest = func(p interface{}) string { return "" }
var GetDepsErrors = func(p interface{}) []*PackageError { return nil }

type PackageError struct {
	ImportStack []string // shortest path from package named on command line to this one
	Pos         string   // position of error (if present, file:line:col)
	Err         string   // the error itself
}

var GetGoCmdRunner = func(config interface{}) *gocommand.Runner { return nil }

var SetGoCmdRunner = func(config interface{}, runner *gocommand.Runner) {}

var TypecheckCgo int
var DepsErrors int // must be set as a LoadMode to call GetDepsErrors
var ForTest int    // must be set as a LoadMode to call GetForTest

var SetModFlag = func(config interface{}, value string) {}
var SetModFile = func(config interface{}, value string) {}
  07070100000F86000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/pkgbits    07070100000F87000081A4000000000000000000000001645E367C000006BE000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/pkgbits/codes.go   // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package pkgbits

// A Code is an enum value that can be encoded into bitstreams.
//
// Code types are preferable for enum types, because they allow
// Decoder to detect desyncs.
type Code interface {
	// Marker returns the SyncMarker for the Code's dynamic type.
	Marker() SyncMarker

	// Value returns the Code's ordinal value.
	Value() int
}

// A CodeVal distinguishes among go/constant.Value encodings.
type CodeVal int

func (c CodeVal) Marker() SyncMarker { return SyncVal }
func (c CodeVal) Value() int         { return int(c) }

// Note: These values are public and cannot be changed without
// updating the go/types importers.

const (
	ValBool CodeVal = iota
	ValString
	ValInt64
	ValBigInt
	ValBigRat
	ValBigFloat
)

// A CodeType distinguishes among go/types.Type encodings.
type CodeType int

func (c CodeType) Marker() SyncMarker { return SyncType }
func (c CodeType) Value() int         { return int(c) }

// Note: These values are public and cannot be changed without
// updating the go/types importers.

const (
	TypeBasic CodeType = iota
	TypeNamed
	TypePointer
	TypeSlice
	TypeArray
	TypeChan
	TypeMap
	TypeSignature
	TypeStruct
	TypeInterface
	TypeUnion
	TypeTypeParam
)

// A CodeObj distinguishes among go/types.Object encodings.
type CodeObj int

func (c CodeObj) Marker() SyncMarker { return SyncCodeObj }
func (c CodeObj) Value() int         { return int(c) }

// Note: These values are public and cannot be changed without
// updating the go/types importers.

const (
	ObjAlias CodeObj = iota
	ObjConst
	ObjType
	ObjFunc
	ObjVar
	ObjStub
)
  07070100000F88000081A4000000000000000000000001645E367C0000354D000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/pkgbits/decoder.go // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package pkgbits

import (
	"encoding/binary"
	"errors"
	"fmt"
	"go/constant"
	"go/token"
	"io"
	"math/big"
	"os"
	"runtime"
	"strings"
)

// A PkgDecoder provides methods for decoding a package's Unified IR
// export data.
type PkgDecoder struct {
	// version is the file format version.
	version uint32

	// sync indicates whether the file uses sync markers.
	sync bool

	// pkgPath is the package path for the package to be decoded.
	//
	// TODO(mdempsky): Remove; unneeded since CL 391014.
	pkgPath string

	// elemData is the full data payload of the encoded package.
	// Elements are densely and contiguously packed together.
	//
	// The last 8 bytes of elemData are the package fingerprint.
	elemData string

	// elemEnds stores the byte-offset end positions of element
	// bitstreams within elemData.
	//
	// For example, element I's bitstream data starts at elemEnds[I-1]
	// (or 0, if I==0) and ends at elemEnds[I].
	//
	// Note: elemEnds is indexed by absolute indices, not
	// section-relative indices.
	elemEnds []uint32

	// elemEndsEnds stores the index-offset end positions of relocation
	// sections within elemEnds.
	//
	// For example, section K's end positions start at elemEndsEnds[K-1]
	// (or 0, if K==0) and end at elemEndsEnds[K].
	elemEndsEnds [numRelocs]uint32

	scratchRelocEnt []RelocEnt
}

// PkgPath returns the package path for the package
//
// TODO(mdempsky): Remove; unneeded since CL 391014.
func (pr *PkgDecoder) PkgPath() string { return pr.pkgPath }

// SyncMarkers reports whether pr uses sync markers.
func (pr *PkgDecoder) SyncMarkers() bool { return pr.sync }

// NewPkgDecoder returns a PkgDecoder initialized to read the Unified
// IR export data from input. pkgPath is the package path for the
// compilation unit that produced the export data.
//
// TODO(mdempsky): Remove pkgPath parameter; unneeded since CL 391014.
func NewPkgDecoder(pkgPath, input string) PkgDecoder {
	pr := PkgDecoder{
		pkgPath: pkgPath,
	}

	// TODO(mdempsky): Implement direct indexing of input string to
	// avoid copying the position information.

	r := strings.NewReader(input)

	assert(binary.Read(r, binary.LittleEndian, &pr.version) == nil)

	switch pr.version {
	default:
		panic(fmt.Errorf("unsupported version: %v", pr.version))
	case 0:
		// no flags
	case 1:
		var flags uint32
		assert(binary.Read(r, binary.LittleEndian, &flags) == nil)
		pr.sync = flags&flagSyncMarkers != 0
	}

	assert(binary.Read(r, binary.LittleEndian, pr.elemEndsEnds[:]) == nil)

	pr.elemEnds = make([]uint32, pr.elemEndsEnds[len(pr.elemEndsEnds)-1])
	assert(binary.Read(r, binary.LittleEndian, pr.elemEnds[:]) == nil)

	pos, err := r.Seek(0, io.SeekCurrent)
	assert(err == nil)

	pr.elemData = input[pos:]
	assert(len(pr.elemData)-8 == int(pr.elemEnds[len(pr.elemEnds)-1]))

	return pr
}

// NumElems returns the number of elements in section k.
func (pr *PkgDecoder) NumElems(k RelocKind) int {
	count := int(pr.elemEndsEnds[k])
	if k > 0 {
		count -= int(pr.elemEndsEnds[k-1])
	}
	return count
}

// TotalElems returns the total number of elements across all sections.
func (pr *PkgDecoder) TotalElems() int {
	return len(pr.elemEnds)
}

// Fingerprint returns the package fingerprint.
func (pr *PkgDecoder) Fingerprint() [8]byte {
	var fp [8]byte
	copy(fp[:], pr.elemData[len(pr.elemData)-8:])
	return fp
}

// AbsIdx returns the absolute index for the given (section, index)
// pair.
func (pr *PkgDecoder) AbsIdx(k RelocKind, idx Index) int {
	absIdx := int(idx)
	if k > 0 {
		absIdx += int(pr.elemEndsEnds[k-1])
	}
	if absIdx >= int(pr.elemEndsEnds[k]) {
		errorf("%v:%v is out of bounds; %v", k, idx, pr.elemEndsEnds)
	}
	return absIdx
}

// DataIdx returns the raw element bitstream for the given (section,
// index) pair.
func (pr *PkgDecoder) DataIdx(k RelocKind, idx Index) string {
	absIdx := pr.AbsIdx(k, idx)

	var start uint32
	if absIdx > 0 {
		start = pr.elemEnds[absIdx-1]
	}
	end := pr.elemEnds[absIdx]

	return pr.elemData[start:end]
}

// StringIdx returns the string value for the given string index.
func (pr *PkgDecoder) StringIdx(idx Index) string {
	return pr.DataIdx(RelocString, idx)
}

// NewDecoder returns a Decoder for the given (section, index) pair,
// and decodes the given SyncMarker from the element bitstream.
func (pr *PkgDecoder) NewDecoder(k RelocKind, idx Index, marker SyncMarker) Decoder {
	r := pr.NewDecoderRaw(k, idx)
	r.Sync(marker)
	return r
}

// TempDecoder returns a Decoder for the given (section, index) pair,
// and decodes the given SyncMarker from the element bitstream.
// If possible the Decoder should be RetireDecoder'd when it is no longer
// needed, this will avoid heap allocations.
func (pr *PkgDecoder) TempDecoder(k RelocKind, idx Index, marker SyncMarker) Decoder {
	r := pr.TempDecoderRaw(k, idx)
	r.Sync(marker)
	return r
}

func (pr *PkgDecoder) RetireDecoder(d *Decoder) {
	pr.scratchRelocEnt = d.Relocs
	d.Relocs = nil
}

// NewDecoderRaw returns a Decoder for the given (section, index) pair.
//
// Most callers should use NewDecoder instead.
func (pr *PkgDecoder) NewDecoderRaw(k RelocKind, idx Index) Decoder {
	r := Decoder{
		common: pr,
		k:      k,
		Idx:    idx,
	}

	// TODO(mdempsky) r.data.Reset(...) after #44505 is resolved.
	r.Data = *strings.NewReader(pr.DataIdx(k, idx))

	r.Sync(SyncRelocs)
	r.Relocs = make([]RelocEnt, r.Len())
	for i := range r.Relocs {
		r.Sync(SyncReloc)
		r.Relocs[i] = RelocEnt{RelocKind(r.Len()), Index(r.Len())}
	}

	return r
}

func (pr *PkgDecoder) TempDecoderRaw(k RelocKind, idx Index) Decoder {
	r := Decoder{
		common: pr,
		k:      k,
		Idx:    idx,
	}

	r.Data.Reset(pr.DataIdx(k, idx))
	r.Sync(SyncRelocs)
	l := r.Len()
	if cap(pr.scratchRelocEnt) >= l {
		r.Relocs = pr.scratchRelocEnt[:l]
		pr.scratchRelocEnt = nil
	} else {
		r.Relocs = make([]RelocEnt, l)
	}
	for i := range r.Relocs {
		r.Sync(SyncReloc)
		r.Relocs[i] = RelocEnt{RelocKind(r.Len()), Index(r.Len())}
	}

	return r
}

// A Decoder provides methods for decoding an individual element's
// bitstream data.
type Decoder struct {
	common *PkgDecoder

	Relocs []RelocEnt
	Data   strings.Reader

	k   RelocKind
	Idx Index
}

func (r *Decoder) checkErr(err error) {
	if err != nil {
		errorf("unexpected decoding error: %w", err)
	}
}

func (r *Decoder) rawUvarint() uint64 {
	x, err := readUvarint(&r.Data)
	r.checkErr(err)
	return x
}

// readUvarint is a type-specialized copy of encoding/binary.ReadUvarint.
// This avoids the interface conversion and thus has better escape properties,
// which flows up the stack.
func readUvarint(r *strings.Reader) (uint64, error) {
	var x uint64
	var s uint
	for i := 0; i < binary.MaxVarintLen64; i++ {
		b, err := r.ReadByte()
		if err != nil {
			if i > 0 && err == io.EOF {
				err = io.ErrUnexpectedEOF
			}
			return x, err
		}
		if b < 0x80 {
			if i == binary.MaxVarintLen64-1 && b > 1 {
				return x, overflow
			}
			return x | uint64(b)<<s, nil
		}
		x |= uint64(b&0x7f) << s
		s += 7
	}
	return x, overflow
}

var overflow = errors.New("pkgbits: readUvarint overflows a 64-bit integer")

func (r *Decoder) rawVarint() int64 {
	ux := r.rawUvarint()

	// Zig-zag decode.
	x := int64(ux >> 1)
	if ux&1 != 0 {
		x = ^x
	}
	return x
}

func (r *Decoder) rawReloc(k RelocKind, idx int) Index {
	e := r.Relocs[idx]
	assert(e.Kind == k)
	return e.Idx
}

// Sync decodes a sync marker from the element bitstream and asserts
// that it matches the expected marker.
//
// If r.common.sync is false, then Sync is a no-op.
func (r *Decoder) Sync(mWant SyncMarker) {
	if !r.common.sync {
		return
	}

	pos, _ := r.Data.Seek(0, io.SeekCurrent)
	mHave := SyncMarker(r.rawUvarint())
	writerPCs := make([]int, r.rawUvarint())
	for i := range writerPCs {
		writerPCs[i] = int(r.rawUvarint())
	}

	if mHave == mWant {
		return
	}

	// There's some tension here between printing:
	//
	// (1) full file paths that tools can recognize (e.g., so emacs
	//     hyperlinks the "file:line" text for easy navigation), or
	//
	// (2) short file paths that are easier for humans to read (e.g., by
	//     omitting redundant or irrelevant details, so it's easier to
	//     focus on the useful bits that remain).
	//
	// The current formatting favors the former, as it seems more
	// helpful in practice. But perhaps the formatting could be improved
	// to better address both concerns. For example, use relative file
	// paths if they would be shorter, or rewrite file paths to contain
	// "$GOROOT" (like objabi.AbsFile does) if tools can be taught how
	// to reliably expand that again.

	fmt.Printf("export data desync: package %q, section %v, index %v, offset %v\n", r.common.pkgPath, r.k, r.Idx, pos)

	fmt.Printf("\nfound %v, written at:\n", mHave)
	if len(writerPCs) == 0 {
		fmt.Printf("\t[stack trace unavailable; recompile package %q with -d=syncframes]\n", r.common.pkgPath)
	}
	for _, pc := range writerPCs {
		fmt.Printf("\t%s\n", r.common.StringIdx(r.rawReloc(RelocString, pc)))
	}

	fmt.Printf("\nexpected %v, reading at:\n", mWant)
	var readerPCs [32]uintptr // TODO(mdempsky): Dynamically size?
	n := runtime.Callers(2, readerPCs[:])
	for _, pc := range fmtFrames(readerPCs[:n]...) {
		fmt.Printf("\t%s\n", pc)
	}

	// We already printed a stack trace for the reader, so now we can
	// simply exit. Printing a second one with panic or base.Fatalf
	// would just be noise.
	os.Exit(1)
}

// Bool decodes and returns a bool value from the element bitstream.
func (r *Decoder) Bool() bool {
	r.Sync(SyncBool)
	x, err := r.Data.ReadByte()
	r.checkErr(err)
	assert(x < 2)
	return x != 0
}

// Int64 decodes and returns an int64 value from the element bitstream.
func (r *Decoder) Int64() int64 {
	r.Sync(SyncInt64)
	return r.rawVarint()
}

// Uint64 decodes and returns a uint64 value from the element bitstream.
func (r *Decoder) Uint64() uint64 {
	r.Sync(SyncUint64)
	return r.rawUvarint()
}

// Len decodes and returns a non-negative int value from the element bitstream.
func (r *Decoder) Len() int { x := r.Uint64(); v := int(x); assert(uint64(v) == x); return v }

// Int decodes and returns an int value from the element bitstream.
func (r *Decoder) Int() int { x := r.Int64(); v := int(x); assert(int64(v) == x); return v }

// Uint decodes and returns a uint value from the element bitstream.
func (r *Decoder) Uint() uint { x := r.Uint64(); v := uint(x); assert(uint64(v) == x); return v }

// Code decodes a Code value from the element bitstream and returns
// its ordinal value. It's the caller's responsibility to convert the
// result to an appropriate Code type.
//
// TODO(mdempsky): Ideally this method would have signature "Code[T
// Code] T" instead, but we don't allow generic methods and the
// compiler can't depend on generics yet anyway.
func (r *Decoder) Code(mark SyncMarker) int {
	r.Sync(mark)
	return r.Len()
}

// Reloc decodes a relocation of expected section k from the element
// bitstream and returns an index to the referenced element.
func (r *Decoder) Reloc(k RelocKind) Index {
	r.Sync(SyncUseReloc)
	return r.rawReloc(k, r.Len())
}

// String decodes and returns a string value from the element
// bitstream.
func (r *Decoder) String() string {
	r.Sync(SyncString)
	return r.common.StringIdx(r.Reloc(RelocString))
}

// Strings decodes and returns a variable-length slice of strings from
// the element bitstream.
func (r *Decoder) Strings() []string {
	res := make([]string, r.Len())
	for i := range res {
		res[i] = r.String()
	}
	return res
}

// Value decodes and returns a constant.Value from the element
// bitstream.
func (r *Decoder) Value() constant.Value {
	r.Sync(SyncValue)
	isComplex := r.Bool()
	val := r.scalar()
	if isComplex {
		val = constant.BinaryOp(val, token.ADD, constant.MakeImag(r.scalar()))
	}
	return val
}

func (r *Decoder) scalar() constant.Value {
	switch tag := CodeVal(r.Code(SyncVal)); tag {
	default:
		panic(fmt.Errorf("unexpected scalar tag: %v", tag))

	case ValBool:
		return constant.MakeBool(r.Bool())
	case ValString:
		return constant.MakeString(r.String())
	case ValInt64:
		return constant.MakeInt64(r.Int64())
	case ValBigInt:
		return constant.Make(r.bigInt())
	case ValBigRat:
		num := r.bigInt()
		denom := r.bigInt()
		return constant.Make(new(big.Rat).SetFrac(num, denom))
	case ValBigFloat:
		return constant.Make(r.bigFloat())
	}
}

func (r *Decoder) bigInt() *big.Int {
	v := new(big.Int).SetBytes([]byte(r.String()))
	if r.Bool() {
		v.Neg(v)
	}
	return v
}

func (r *Decoder) bigFloat() *big.Float {
	v := new(big.Float).SetPrec(512)
	assert(v.UnmarshalText([]byte(r.String())) == nil)
	return v
}

// @@@ Helpers

// TODO(mdempsky): These should probably be removed. I think they're a
// smell that the export data format is not yet quite right.

// PeekPkgPath returns the package path for the specified package
// index.
func (pr *PkgDecoder) PeekPkgPath(idx Index) string {
	var path string
	{
		r := pr.TempDecoder(RelocPkg, idx, SyncPkgDef)
		path = r.String()
		pr.RetireDecoder(&r)
	}
	if path == "" {
		path = pr.pkgPath
	}
	return path
}

// PeekObj returns the package path, object name, and CodeObj for the
// specified object index.
func (pr *PkgDecoder) PeekObj(idx Index) (string, string, CodeObj) {
	var ridx Index
	var name string
	var rcode int
	{
		r := pr.TempDecoder(RelocName, idx, SyncObject1)
		r.Sync(SyncSym)
		r.Sync(SyncPkg)
		ridx = r.Reloc(RelocPkg)
		name = r.String()
		rcode = r.Code(SyncCodeObj)
		pr.RetireDecoder(&r)
	}

	path := pr.PeekPkgPath(ridx)
	assert(name != "")

	tag := CodeObj(rcode)

	return path, name, tag
}
   07070100000F89000081A4000000000000000000000001645E367C00000607000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/pkgbits/doc.go // Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package pkgbits implements low-level coding abstractions for
// Unified IR's export data format.
//
// At a low-level, a package is a collection of bitstream elements.
// Each element has a "kind" and a dense, non-negative index.
// Elements can be randomly accessed given their kind and index.
//
// Individual elements are sequences of variable-length values (e.g.,
// integers, booleans, strings, go/constant values, cross-references
// to other elements). Package pkgbits provides APIs for encoding and
// decoding these low-level values, but the details of mapping
// higher-level Go constructs into elements is left to higher-level
// abstractions.
//
// Elements may cross-reference each other with "relocations." For
// example, an element representing a pointer type has a relocation
// referring to the element type.
//
// Go constructs may be composed as a constellation of multiple
// elements. For example, a declared function may have one element to
// describe the object (e.g., its name, type, position), and a
// separate element to describe its function body. This allows readers
// some flexibility in efficiently seeking or re-reading data (e.g.,
// inlining requires re-reading the function body for each inlined
// call, without needing to re-read the object-level details).
//
// This is a copy of internal/pkgbits in the Go implementation.
package pkgbits
 07070100000F8A000081A4000000000000000000000001645E367C0000256B000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/pkgbits/encoder.go // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package pkgbits

import (
	"bytes"
	"crypto/md5"
	"encoding/binary"
	"go/constant"
	"io"
	"math/big"
	"runtime"
)

// currentVersion is the current version number.
//
//   - v0: initial prototype
//
//   - v1: adds the flags uint32 word
const currentVersion uint32 = 1

// A PkgEncoder provides methods for encoding a package's Unified IR
// export data.
type PkgEncoder struct {
	// elems holds the bitstream for previously encoded elements.
	elems [numRelocs][]string

	// stringsIdx maps previously encoded strings to their index within
	// the RelocString section, to allow deduplication. That is,
	// elems[RelocString][stringsIdx[s]] == s (if present).
	stringsIdx map[string]Index

	// syncFrames is the number of frames to write at each sync
	// marker. A negative value means sync markers are omitted.
	syncFrames int
}

// SyncMarkers reports whether pw uses sync markers.
func (pw *PkgEncoder) SyncMarkers() bool { return pw.syncFrames >= 0 }

// NewPkgEncoder returns an initialized PkgEncoder.
//
// syncFrames is the number of caller frames that should be serialized
// at Sync points. Serializing additional frames results in larger
// export data files, but can help diagnosing desync errors in
// higher-level Unified IR reader/writer code. If syncFrames is
// negative, then sync markers are omitted entirely.
func NewPkgEncoder(syncFrames int) PkgEncoder {
	return PkgEncoder{
		stringsIdx: make(map[string]Index),
		syncFrames: syncFrames,
	}
}

// DumpTo writes the package's encoded data to out0 and returns the
// package fingerprint.
func (pw *PkgEncoder) DumpTo(out0 io.Writer) (fingerprint [8]byte) {
	h := md5.New()
	out := io.MultiWriter(out0, h)

	writeUint32 := func(x uint32) {
		assert(binary.Write(out, binary.LittleEndian, x) == nil)
	}

	writeUint32(currentVersion)

	var flags uint32
	if pw.SyncMarkers() {
		flags |= flagSyncMarkers
	}
	writeUint32(flags)

	// Write elemEndsEnds.
	var sum uint32
	for _, elems := range &pw.elems {
		sum += uint32(len(elems))
		writeUint32(sum)
	}

	// Write elemEnds.
	sum = 0
	for _, elems := range &pw.elems {
		for _, elem := range elems {
			sum += uint32(len(elem))
			writeUint32(sum)
		}
	}

	// Write elemData.
	for _, elems := range &pw.elems {
		for _, elem := range elems {
			_, err := io.WriteString(out, elem)
			assert(err == nil)
		}
	}

	// Write fingerprint.
	copy(fingerprint[:], h.Sum(nil))
	_, err := out0.Write(fingerprint[:])
	assert(err == nil)

	return
}

// StringIdx adds a string value to the strings section, if not
// already present, and returns its index.
func (pw *PkgEncoder) StringIdx(s string) Index {
	if idx, ok := pw.stringsIdx[s]; ok {
		assert(pw.elems[RelocString][idx] == s)
		return idx
	}

	idx := Index(len(pw.elems[RelocString]))
	pw.elems[RelocString] = append(pw.elems[RelocString], s)
	pw.stringsIdx[s] = idx
	return idx
}

// NewEncoder returns an Encoder for a new element within the given
// section, and encodes the given SyncMarker as the start of the
// element bitstream.
func (pw *PkgEncoder) NewEncoder(k RelocKind, marker SyncMarker) Encoder {
	e := pw.NewEncoderRaw(k)
	e.Sync(marker)
	return e
}

// NewEncoderRaw returns an Encoder for a new element within the given
// section.
//
// Most callers should use NewEncoder instead.
func (pw *PkgEncoder) NewEncoderRaw(k RelocKind) Encoder {
	idx := Index(len(pw.elems[k]))
	pw.elems[k] = append(pw.elems[k], "") // placeholder

	return Encoder{
		p:   pw,
		k:   k,
		Idx: idx,
	}
}

// An Encoder provides methods for encoding an individual element's
// bitstream data.
type Encoder struct {
	p *PkgEncoder

	Relocs   []RelocEnt
	RelocMap map[RelocEnt]uint32
	Data     bytes.Buffer // accumulated element bitstream data

	encodingRelocHeader bool

	k   RelocKind
	Idx Index // index within relocation section
}

// Flush finalizes the element's bitstream and returns its Index.
func (w *Encoder) Flush() Index {
	var sb bytes.Buffer // TODO(mdempsky): strings.Builder after #44505 is resolved

	// Backup the data so we write the relocations at the front.
	var tmp bytes.Buffer
	io.Copy(&tmp, &w.Data)

	// TODO(mdempsky): Consider writing these out separately so they're
	// easier to strip, along with function bodies, so that we can prune
	// down to just the data that's relevant to go/types.
	if w.encodingRelocHeader {
		panic("encodingRelocHeader already true; recursive flush?")
	}
	w.encodingRelocHeader = true
	w.Sync(SyncRelocs)
	w.Len(len(w.Relocs))
	for _, rEnt := range w.Relocs {
		w.Sync(SyncReloc)
		w.Len(int(rEnt.Kind))
		w.Len(int(rEnt.Idx))
	}

	io.Copy(&sb, &w.Data)
	io.Copy(&sb, &tmp)
	w.p.elems[w.k][w.Idx] = sb.String()

	return w.Idx
}

func (w *Encoder) checkErr(err error) {
	if err != nil {
		errorf("unexpected encoding error: %v", err)
	}
}

func (w *Encoder) rawUvarint(x uint64) {
	var buf [binary.MaxVarintLen64]byte
	n := binary.PutUvarint(buf[:], x)
	_, err := w.Data.Write(buf[:n])
	w.checkErr(err)
}

func (w *Encoder) rawVarint(x int64) {
	// Zig-zag encode.
	ux := uint64(x) << 1
	if x < 0 {
		ux = ^ux
	}

	w.rawUvarint(ux)
}

func (w *Encoder) rawReloc(r RelocKind, idx Index) int {
	e := RelocEnt{r, idx}
	if w.RelocMap != nil {
		if i, ok := w.RelocMap[e]; ok {
			return int(i)
		}
	} else {
		w.RelocMap = make(map[RelocEnt]uint32)
	}

	i := len(w.Relocs)
	w.RelocMap[e] = uint32(i)
	w.Relocs = append(w.Relocs, e)
	return i
}

func (w *Encoder) Sync(m SyncMarker) {
	if !w.p.SyncMarkers() {
		return
	}

	// Writing out stack frame string references requires working
	// relocations, but writing out the relocations themselves involves
	// sync markers. To prevent infinite recursion, we simply trim the
	// stack frame for sync markers within the relocation header.
	var frames []string
	if !w.encodingRelocHeader && w.p.syncFrames > 0 {
		pcs := make([]uintptr, w.p.syncFrames)
		n := runtime.Callers(2, pcs)
		frames = fmtFrames(pcs[:n]...)
	}

	// TODO(mdempsky): Save space by writing out stack frames as a
	// linked list so we can share common stack frames.
	w.rawUvarint(uint64(m))
	w.rawUvarint(uint64(len(frames)))
	for _, frame := range frames {
		w.rawUvarint(uint64(w.rawReloc(RelocString, w.p.StringIdx(frame))))
	}
}

// Bool encodes and writes a bool value into the element bitstream,
// and then returns the bool value.
//
// For simple, 2-alternative encodings, the idiomatic way to call Bool
// is something like:
//
//	if w.Bool(x != 0) {
//		// alternative #1
//	} else {
//		// alternative #2
//	}
//
// For multi-alternative encodings, use Code instead.
func (w *Encoder) Bool(b bool) bool {
	w.Sync(SyncBool)
	var x byte
	if b {
		x = 1
	}
	err := w.Data.WriteByte(x)
	w.checkErr(err)
	return b
}

// Int64 encodes and writes an int64 value into the element bitstream.
func (w *Encoder) Int64(x int64) {
	w.Sync(SyncInt64)
	w.rawVarint(x)
}

// Uint64 encodes and writes a uint64 value into the element bitstream.
func (w *Encoder) Uint64(x uint64) {
	w.Sync(SyncUint64)
	w.rawUvarint(x)
}

// Len encodes and writes a non-negative int value into the element bitstream.
func (w *Encoder) Len(x int) { assert(x >= 0); w.Uint64(uint64(x)) }

// Int encodes and writes an int value into the element bitstream.
func (w *Encoder) Int(x int) { w.Int64(int64(x)) }

// Uint encodes and writes a uint value into the element bitstream.
func (w *Encoder) Uint(x uint) { w.Uint64(uint64(x)) }

// Reloc encodes and writes a relocation for the given (section,
// index) pair into the element bitstream.
//
// Note: Only the index is formally written into the element
// bitstream, so bitstream decoders must know from context which
// section an encoded relocation refers to.
func (w *Encoder) Reloc(r RelocKind, idx Index) {
	w.Sync(SyncUseReloc)
	w.Len(w.rawReloc(r, idx))
}

// Code encodes and writes a Code value into the element bitstream.
func (w *Encoder) Code(c Code) {
	w.Sync(c.Marker())
	w.Len(c.Value())
}

// String encodes and writes a string value into the element
// bitstream.
//
// Internally, strings are deduplicated by adding them to the strings
// section (if not already present), and then writing a relocation
// into the element bitstream.
func (w *Encoder) String(s string) {
	w.Sync(SyncString)
	w.Reloc(RelocString, w.p.StringIdx(s))
}

// Strings encodes and writes a variable-length slice of strings into
// the element bitstream.
func (w *Encoder) Strings(ss []string) {
	w.Len(len(ss))
	for _, s := range ss {
		w.String(s)
	}
}

// Value encodes and writes a constant.Value into the element
// bitstream.
func (w *Encoder) Value(val constant.Value) {
	w.Sync(SyncValue)
	if w.Bool(val.Kind() == constant.Complex) {
		w.scalar(constant.Real(val))
		w.scalar(constant.Imag(val))
	} else {
		w.scalar(val)
	}
}

func (w *Encoder) scalar(val constant.Value) {
	switch v := constant.Val(val).(type) {
	default:
		errorf("unhandled %v (%v)", val, val.Kind())
	case bool:
		w.Code(ValBool)
		w.Bool(v)
	case string:
		w.Code(ValString)
		w.String(v)
	case int64:
		w.Code(ValInt64)
		w.Int64(v)
	case *big.Int:
		w.Code(ValBigInt)
		w.bigInt(v)
	case *big.Rat:
		w.Code(ValBigRat)
		w.bigInt(v.Num())
		w.bigInt(v.Denom())
	case *big.Float:
		w.Code(ValBigFloat)
		w.bigFloat(v)
	}
}

func (w *Encoder) bigInt(v *big.Int) {
	b := v.Bytes()
	w.String(string(b)) // TODO: More efficient encoding.
	w.Bool(v.Sign() < 0)
}

func (w *Encoder) bigFloat(v *big.Float) {
	b := v.Append(nil, 'p', -1)
	w.String(string(b)) // TODO: More efficient encoding.
}
 07070100000F8B000081A4000000000000000000000001645E367C000000FD000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/pkgbits/flags.go   // Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package pkgbits

const (
	flagSyncMarkers = 1 << iota // file format contains sync markers
)
   07070100000F8C000081A4000000000000000000000001645E367C000001DC000000000000000000000000000000000000004D00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/pkgbits/frames_go1.go  // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build !go1.7
// +build !go1.7

// TODO(mdempsky): Remove after #44505 is resolved

package pkgbits

import "runtime"

func walkFrames(pcs []uintptr, visit frameVisitor) {
	for _, pc := range pcs {
		fn := runtime.FuncForPC(pc)
		file, line := fn.FileLine(pc)

		visit(file, line, fn.Name(), pc-fn.Entry())
	}
}
07070100000F8D000081A4000000000000000000000001645E367C00000273000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/pkgbits/frames_go17.go // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build go1.7
// +build go1.7

package pkgbits

import "runtime"

// walkFrames calls visit for each call frame represented by pcs.
//
// pcs should be a slice of PCs, as returned by runtime.Callers.
func walkFrames(pcs []uintptr, visit frameVisitor) {
	if len(pcs) == 0 {
		return
	}

	frames := runtime.CallersFrames(pcs)
	for {
		frame, more := frames.Next()
		visit(frame.File, frame.Line, frame.Function, frame.PC-frame.Entry)
		if !more {
			return
		}
	}
}
 07070100000F8E000081A4000000000000000000000001645E367C00000343000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/pkgbits/reloc.go   // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package pkgbits

// A RelocKind indicates a particular section within a unified IR export.
type RelocKind int32

// An Index represents a bitstream element index within a particular
// section.
type Index int32

// A relocEnt (relocation entry) is an entry in an element's local
// reference table.
//
// TODO(mdempsky): Rename this too.
type RelocEnt struct {
	Kind RelocKind
	Idx  Index
}

// Reserved indices within the meta relocation section.
const (
	PublicRootIdx  Index = 0
	PrivateRootIdx Index = 1
)

const (
	RelocString RelocKind = iota
	RelocMeta
	RelocPosBase
	RelocPkg
	RelocName
	RelocType
	RelocObj
	RelocObjExt
	RelocObjDict
	RelocBody

	numRelocs = iota
)
 07070100000F8F000081A4000000000000000000000001645E367C00000158000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/pkgbits/support.go // Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package pkgbits

import "fmt"

func assert(b bool) {
	if !b {
		panic("assertion failed")
	}
}

func errorf(format string, args ...interface{}) {
	panic(fmt.Errorf(format, args...))
}
07070100000F90000081A4000000000000000000000001645E367C000007E8000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/pkgbits/sync.go    // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package pkgbits

import (
	"fmt"
	"strings"
)

// fmtFrames formats a backtrace for reporting reader/writer desyncs.
func fmtFrames(pcs ...uintptr) []string {
	res := make([]string, 0, len(pcs))
	walkFrames(pcs, func(file string, line int, name string, offset uintptr) {
		// Trim package from function name. It's just redundant noise.
		name = strings.TrimPrefix(name, "cmd/compile/internal/noder.")

		res = append(res, fmt.Sprintf("%s:%v: %s +0x%v", file, line, name, offset))
	})
	return res
}

type frameVisitor func(file string, line int, name string, offset uintptr)

// SyncMarker is an enum type that represents markers that may be
// written to export data to ensure the reader and writer stay
// synchronized.
type SyncMarker int

//go:generate stringer -type=SyncMarker -trimprefix=Sync

const (
	_ SyncMarker = iota

	// Public markers (known to go/types importers).

	// Low-level coding markers.
	SyncEOF
	SyncBool
	SyncInt64
	SyncUint64
	SyncString
	SyncValue
	SyncVal
	SyncRelocs
	SyncReloc
	SyncUseReloc

	// Higher-level object and type markers.
	SyncPublic
	SyncPos
	SyncPosBase
	SyncObject
	SyncObject1
	SyncPkg
	SyncPkgDef
	SyncMethod
	SyncType
	SyncTypeIdx
	SyncTypeParamNames
	SyncSignature
	SyncParams
	SyncParam
	SyncCodeObj
	SyncSym
	SyncLocalIdent
	SyncSelector

	// Private markers (only known to cmd/compile).
	SyncPrivate

	SyncFuncExt
	SyncVarExt
	SyncTypeExt
	SyncPragma

	SyncExprList
	SyncExprs
	SyncExpr
	SyncExprType
	SyncAssign
	SyncOp
	SyncFuncLit
	SyncCompLit

	SyncDecl
	SyncFuncBody
	SyncOpenScope
	SyncCloseScope
	SyncCloseAnotherScope
	SyncDeclNames
	SyncDeclName

	SyncStmts
	SyncBlockStmt
	SyncIfStmt
	SyncForStmt
	SyncSwitchStmt
	SyncRangeStmt
	SyncCaseClause
	SyncCommClause
	SyncSelectStmt
	SyncDecls
	SyncLabeledStmt
	SyncUseObjLocal
	SyncAddLocal
	SyncLinkname
	SyncStmt1
	SyncStmtsEnd
	SyncLabel
	SyncOptLabel
)
07070100000F91000081A4000000000000000000000001645E367C00000B42000000000000000000000000000000000000005400000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/pkgbits/syncmarker_string.go   // Code generated by "stringer -type=SyncMarker -trimprefix=Sync"; DO NOT EDIT.

package pkgbits

import "strconv"

func _() {
	// An "invalid array index" compiler error signifies that the constant values have changed.
	// Re-run the stringer command to generate them again.
	var x [1]struct{}
	_ = x[SyncEOF-1]
	_ = x[SyncBool-2]
	_ = x[SyncInt64-3]
	_ = x[SyncUint64-4]
	_ = x[SyncString-5]
	_ = x[SyncValue-6]
	_ = x[SyncVal-7]
	_ = x[SyncRelocs-8]
	_ = x[SyncReloc-9]
	_ = x[SyncUseReloc-10]
	_ = x[SyncPublic-11]
	_ = x[SyncPos-12]
	_ = x[SyncPosBase-13]
	_ = x[SyncObject-14]
	_ = x[SyncObject1-15]
	_ = x[SyncPkg-16]
	_ = x[SyncPkgDef-17]
	_ = x[SyncMethod-18]
	_ = x[SyncType-19]
	_ = x[SyncTypeIdx-20]
	_ = x[SyncTypeParamNames-21]
	_ = x[SyncSignature-22]
	_ = x[SyncParams-23]
	_ = x[SyncParam-24]
	_ = x[SyncCodeObj-25]
	_ = x[SyncSym-26]
	_ = x[SyncLocalIdent-27]
	_ = x[SyncSelector-28]
	_ = x[SyncPrivate-29]
	_ = x[SyncFuncExt-30]
	_ = x[SyncVarExt-31]
	_ = x[SyncTypeExt-32]
	_ = x[SyncPragma-33]
	_ = x[SyncExprList-34]
	_ = x[SyncExprs-35]
	_ = x[SyncExpr-36]
	_ = x[SyncExprType-37]
	_ = x[SyncAssign-38]
	_ = x[SyncOp-39]
	_ = x[SyncFuncLit-40]
	_ = x[SyncCompLit-41]
	_ = x[SyncDecl-42]
	_ = x[SyncFuncBody-43]
	_ = x[SyncOpenScope-44]
	_ = x[SyncCloseScope-45]
	_ = x[SyncCloseAnotherScope-46]
	_ = x[SyncDeclNames-47]
	_ = x[SyncDeclName-48]
	_ = x[SyncStmts-49]
	_ = x[SyncBlockStmt-50]
	_ = x[SyncIfStmt-51]
	_ = x[SyncForStmt-52]
	_ = x[SyncSwitchStmt-53]
	_ = x[SyncRangeStmt-54]
	_ = x[SyncCaseClause-55]
	_ = x[SyncCommClause-56]
	_ = x[SyncSelectStmt-57]
	_ = x[SyncDecls-58]
	_ = x[SyncLabeledStmt-59]
	_ = x[SyncUseObjLocal-60]
	_ = x[SyncAddLocal-61]
	_ = x[SyncLinkname-62]
	_ = x[SyncStmt1-63]
	_ = x[SyncStmtsEnd-64]
	_ = x[SyncLabel-65]
	_ = x[SyncOptLabel-66]
}

const _SyncMarker_name = "EOFBoolInt64Uint64StringValueValRelocsRelocUseRelocPublicPosPosBaseObjectObject1PkgPkgDefMethodTypeTypeIdxTypeParamNamesSignatureParamsParamCodeObjSymLocalIdentSelectorPrivateFuncExtVarExtTypeExtPragmaExprListExprsExprExprTypeAssignOpFuncLitCompLitDeclFuncBodyOpenScopeCloseScopeCloseAnotherScopeDeclNamesDeclNameStmtsBlockStmtIfStmtForStmtSwitchStmtRangeStmtCaseClauseCommClauseSelectStmtDeclsLabeledStmtUseObjLocalAddLocalLinknameStmt1StmtsEndLabelOptLabel"

var _SyncMarker_index = [...]uint16{0, 3, 7, 12, 18, 24, 29, 32, 38, 43, 51, 57, 60, 67, 73, 80, 83, 89, 95, 99, 106, 120, 129, 135, 140, 147, 150, 160, 168, 175, 182, 188, 195, 201, 209, 214, 218, 226, 232, 234, 241, 248, 252, 260, 269, 279, 296, 305, 313, 318, 327, 333, 340, 350, 359, 369, 379, 389, 394, 405, 416, 424, 432, 437, 445, 450, 458}

func (i SyncMarker) String() string {
	i -= 1
	if i < 0 || i >= SyncMarker(len(_SyncMarker_index)-1) {
		return "SyncMarker(" + strconv.FormatInt(int64(i+1), 10) + ")"
	}
	return _SyncMarker_name[_SyncMarker_index[i]:_SyncMarker_index[i+1]]
}
  07070100000F92000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/tokeninternal  07070100000F93000081A4000000000000000000000001645E367C00001004000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/tokeninternal/tokeninternal.go // Copyright 2023 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// package tokeninternal provides access to some internal features of the token
// package.
package tokeninternal

import (
	"fmt"
	"go/token"
	"sort"
	"sync"
	"unsafe"
)

// GetLines returns the table of line-start offsets from a token.File.
func GetLines(file *token.File) []int {
	// token.File has a Lines method on Go 1.21 and later.
	if file, ok := (interface{})(file).(interface{ Lines() []int }); ok {
		return file.Lines()
	}

	// This declaration must match that of token.File.
	// This creates a risk of dependency skew.
	// For now we check that the size of the two
	// declarations is the same, on the (fragile) assumption
	// that future changes would add fields.
	type tokenFile119 struct {
		_     string
		_     int
		_     int
		mu    sync.Mutex // we're not complete monsters
		lines []int
		_     []struct{}
	}
	type tokenFile118 struct {
		_ *token.FileSet // deleted in go1.19
		tokenFile119
	}

	type uP = unsafe.Pointer
	switch unsafe.Sizeof(*file) {
	case unsafe.Sizeof(tokenFile118{}):
		var ptr *tokenFile118
		*(*uP)(uP(&ptr)) = uP(file)
		ptr.mu.Lock()
		defer ptr.mu.Unlock()
		return ptr.lines

	case unsafe.Sizeof(tokenFile119{}):
		var ptr *tokenFile119
		*(*uP)(uP(&ptr)) = uP(file)
		ptr.mu.Lock()
		defer ptr.mu.Unlock()
		return ptr.lines

	default:
		panic("unexpected token.File size")
	}
}

// AddExistingFiles adds the specified files to the FileSet if they
// are not already present. It panics if any pair of files in the
// resulting FileSet would overlap.
func AddExistingFiles(fset *token.FileSet, files []*token.File) {
	// Punch through the FileSet encapsulation.
	type tokenFileSet struct {
		// This type remained essentially consistent from go1.16 to go1.21.
		mutex sync.RWMutex
		base  int
		files []*token.File
		_     *token.File // changed to atomic.Pointer[token.File] in go1.19
	}

	// If the size of token.FileSet changes, this will fail to compile.
	const delta = int64(unsafe.Sizeof(tokenFileSet{})) - int64(unsafe.Sizeof(token.FileSet{}))
	var _ [-delta * delta]int

	type uP = unsafe.Pointer
	var ptr *tokenFileSet
	*(*uP)(uP(&ptr)) = uP(fset)
	ptr.mutex.Lock()
	defer ptr.mutex.Unlock()

	// Merge and sort.
	newFiles := append(ptr.files, files...)
	sort.Slice(newFiles, func(i, j int) bool {
		return newFiles[i].Base() < newFiles[j].Base()
	})

	// Reject overlapping files.
	// Discard adjacent identical files.
	out := newFiles[:0]
	for i, file := range newFiles {
		if i > 0 {
			prev := newFiles[i-1]
			if file == prev {
				continue
			}
			if prev.Base()+prev.Size()+1 > file.Base() {
				panic(fmt.Sprintf("file %s (%d-%d) overlaps with file %s (%d-%d)",
					prev.Name(), prev.Base(), prev.Base()+prev.Size(),
					file.Name(), file.Base(), file.Base()+file.Size()))
			}
		}
		out = append(out, file)
	}
	newFiles = out

	ptr.files = newFiles

	// Advance FileSet.Base().
	if len(newFiles) > 0 {
		last := newFiles[len(newFiles)-1]
		newBase := last.Base() + last.Size() + 1
		if ptr.base < newBase {
			ptr.base = newBase
		}
	}
}

// FileSetFor returns a new FileSet containing a sequence of new Files with
// the same base, size, and line as the input files, for use in APIs that
// require a FileSet.
//
// Precondition: the input files must be non-overlapping, and sorted in order
// of their Base.
func FileSetFor(files ...*token.File) *token.FileSet {
	fset := token.NewFileSet()
	for _, f := range files {
		f2 := fset.AddFile(f.Name(), f.Base(), f.Size())
		lines := GetLines(f)
		f2.SetLines(lines)
	}
	return fset
}

// CloneFileSet creates a new FileSet holding all files in fset. It does not
// create copies of the token.Files in fset: they are added to the resulting
// FileSet unmodified.
func CloneFileSet(fset *token.FileSet) *token.FileSet {
	var files []*token.File
	fset.Iterate(func(f *token.File) bool {
		files = append(files, f)
		return true
	})
	newFileSet := token.NewFileSet()
	AddExistingFiles(newFileSet, files)
	return newFileSet
}
07070100000F94000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/typeparams 07070100000F95000081A4000000000000000000000001645E367C000016EF000000000000000000000000000000000000004C00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/typeparams/common.go   // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package typeparams contains common utilities for writing tools that interact
// with generic Go code, as introduced with Go 1.18.
//
// Many of the types and functions in this package are proxies for the new APIs
// introduced in the standard library with Go 1.18. For example, the
// typeparams.Union type is an alias for go/types.Union, and the ForTypeSpec
// function returns the value of the go/ast.TypeSpec.TypeParams field. At Go
// versions older than 1.18 these helpers are implemented as stubs, allowing
// users of this package to write code that handles generic constructs inline,
// even if the Go version being used to compile does not support generics.
//
// Additionally, this package contains common utilities for working with the
// new generic constructs, to supplement the standard library APIs. Notably,
// the StructuralTerms API computes a minimal representation of the structural
// restrictions on a type parameter.
//
// An external version of these APIs is available in the
// golang.org/x/exp/typeparams module.
package typeparams

import (
	"go/ast"
	"go/token"
	"go/types"
)

// UnpackIndexExpr extracts data from AST nodes that represent index
// expressions.
//
// For an ast.IndexExpr, the resulting indices slice will contain exactly one
// index expression. For an ast.IndexListExpr (go1.18+), it may have a variable
// number of index expressions.
//
// For nodes that don't represent index expressions, the first return value of
// UnpackIndexExpr will be nil.
func UnpackIndexExpr(n ast.Node) (x ast.Expr, lbrack token.Pos, indices []ast.Expr, rbrack token.Pos) {
	switch e := n.(type) {
	case *ast.IndexExpr:
		return e.X, e.Lbrack, []ast.Expr{e.Index}, e.Rbrack
	case *IndexListExpr:
		return e.X, e.Lbrack, e.Indices, e.Rbrack
	}
	return nil, token.NoPos, nil, token.NoPos
}

// PackIndexExpr returns an *ast.IndexExpr or *ast.IndexListExpr, depending on
// the cardinality of indices. Calling PackIndexExpr with len(indices) == 0
// will panic.
func PackIndexExpr(x ast.Expr, lbrack token.Pos, indices []ast.Expr, rbrack token.Pos) ast.Expr {
	switch len(indices) {
	case 0:
		panic("empty indices")
	case 1:
		return &ast.IndexExpr{
			X:      x,
			Lbrack: lbrack,
			Index:  indices[0],
			Rbrack: rbrack,
		}
	default:
		return &IndexListExpr{
			X:       x,
			Lbrack:  lbrack,
			Indices: indices,
			Rbrack:  rbrack,
		}
	}
}

// IsTypeParam reports whether t is a type parameter.
func IsTypeParam(t types.Type) bool {
	_, ok := t.(*TypeParam)
	return ok
}

// OriginMethod returns the origin method associated with the method fn.
// For methods on a non-generic receiver base type, this is just
// fn. However, for methods with a generic receiver, OriginMethod returns the
// corresponding method in the method set of the origin type.
//
// As a special case, if fn is not a method (has no receiver), OriginMethod
// returns fn.
func OriginMethod(fn *types.Func) *types.Func {
	recv := fn.Type().(*types.Signature).Recv()
	if recv == nil {
		return fn
	}
	base := recv.Type()
	p, isPtr := base.(*types.Pointer)
	if isPtr {
		base = p.Elem()
	}
	named, isNamed := base.(*types.Named)
	if !isNamed {
		// Receiver is a *types.Interface.
		return fn
	}
	if ForNamed(named).Len() == 0 {
		// Receiver base has no type parameters, so we can avoid the lookup below.
		return fn
	}
	orig := NamedTypeOrigin(named)
	gfn, _, _ := types.LookupFieldOrMethod(orig, true, fn.Pkg(), fn.Name())
	return gfn.(*types.Func)
}

// GenericAssignableTo is a generalization of types.AssignableTo that
// implements the following rule for uninstantiated generic types:
//
// If V and T are generic named types, then V is considered assignable to T if,
// for every possible instantation of V[A_1, ..., A_N], the instantiation
// T[A_1, ..., A_N] is valid and V[A_1, ..., A_N] implements T[A_1, ..., A_N].
//
// If T has structural constraints, they must be satisfied by V.
//
// For example, consider the following type declarations:
//
//	type Interface[T any] interface {
//		Accept(T)
//	}
//
//	type Container[T any] struct {
//		Element T
//	}
//
//	func (c Container[T]) Accept(t T) { c.Element = t }
//
// In this case, GenericAssignableTo reports that instantiations of Container
// are assignable to the corresponding instantiation of Interface.
func GenericAssignableTo(ctxt *Context, V, T types.Type) bool {
	// If V and T are not both named, or do not have matching non-empty type
	// parameter lists, fall back on types.AssignableTo.

	VN, Vnamed := V.(*types.Named)
	TN, Tnamed := T.(*types.Named)
	if !Vnamed || !Tnamed {
		return types.AssignableTo(V, T)
	}

	vtparams := ForNamed(VN)
	ttparams := ForNamed(TN)
	if vtparams.Len() == 0 || vtparams.Len() != ttparams.Len() || NamedTypeArgs(VN).Len() != 0 || NamedTypeArgs(TN).Len() != 0 {
		return types.AssignableTo(V, T)
	}

	// V and T have the same (non-zero) number of type params. Instantiate both
	// with the type parameters of V. This must always succeed for V, and will
	// succeed for T if and only if the type set of each type parameter of V is a
	// subset of the type set of the corresponding type parameter of T, meaning
	// that every instantiation of V corresponds to a valid instantiation of T.

	// Minor optimization: ensure we share a context across the two
	// instantiations below.
	if ctxt == nil {
		ctxt = NewContext()
	}

	var targs []types.Type
	for i := 0; i < vtparams.Len(); i++ {
		targs = append(targs, vtparams.At(i))
	}

	vinst, err := Instantiate(ctxt, V, targs, true)
	if err != nil {
		panic("type parameters should satisfy their own constraints")
	}

	tinst, err := Instantiate(ctxt, T, targs, true)
	if err != nil {
		return false
	}

	return types.AssignableTo(vinst, tinst)
}
 07070100000F96000081A4000000000000000000000001645E367C00001156000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/typeparams/coretype.go // Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package typeparams

import (
	"go/types"
)

// CoreType returns the core type of T or nil if T does not have a core type.
//
// See https://go.dev/ref/spec#Core_types for the definition of a core type.
func CoreType(T types.Type) types.Type {
	U := T.Underlying()
	if _, ok := U.(*types.Interface); !ok {
		return U // for non-interface types,
	}

	terms, err := _NormalTerms(U)
	if len(terms) == 0 || err != nil {
		// len(terms) -> empty type set of interface.
		// err != nil => U is invalid, exceeds complexity bounds, or has an empty type set.
		return nil // no core type.
	}

	U = terms[0].Type().Underlying()
	var identical int // i in [0,identical) => Identical(U, terms[i].Type().Underlying())
	for identical = 1; identical < len(terms); identical++ {
		if !types.Identical(U, terms[identical].Type().Underlying()) {
			break
		}
	}

	if identical == len(terms) {
		// https://go.dev/ref/spec#Core_types
		// "There is a single type U which is the underlying type of all types in the type set of T"
		return U
	}
	ch, ok := U.(*types.Chan)
	if !ok {
		return nil // no core type as identical < len(terms) and U is not a channel.
	}
	// https://go.dev/ref/spec#Core_types
	// "the type chan E if T contains only bidirectional channels, or the type chan<- E or
	// <-chan E depending on the direction of the directional channels present."
	for chans := identical; chans < len(terms); chans++ {
		curr, ok := terms[chans].Type().Underlying().(*types.Chan)
		if !ok {
			return nil
		}
		if !types.Identical(ch.Elem(), curr.Elem()) {
			return nil // channel elements are not identical.
		}
		if ch.Dir() == types.SendRecv {
			// ch is bidirectional. We can safely always use curr's direction.
			ch = curr
		} else if curr.Dir() != types.SendRecv && ch.Dir() != curr.Dir() {
			// ch and curr are not bidirectional and not the same direction.
			return nil
		}
	}
	return ch
}

// _NormalTerms returns a slice of terms representing the normalized structural
// type restrictions of a type, if any.
//
// For all types other than *types.TypeParam, *types.Interface, and
// *types.Union, this is just a single term with Tilde() == false and
// Type() == typ. For *types.TypeParam, *types.Interface, and *types.Union, see
// below.
//
// Structural type restrictions of a type parameter are created via
// non-interface types embedded in its constraint interface (directly, or via a
// chain of interface embeddings). For example, in the declaration type
// T[P interface{~int; m()}] int the structural restriction of the type
// parameter P is ~int.
//
// With interface embedding and unions, the specification of structural type
// restrictions may be arbitrarily complex. For example, consider the
// following:
//
//  type A interface{ ~string|~[]byte }
//
//  type B interface{ int|string }
//
//  type C interface { ~string|~int }
//
//  type T[P interface{ A|B; C }] int
//
// In this example, the structural type restriction of P is ~string|int: A|B
// expands to ~string|~[]byte|int|string, which reduces to ~string|~[]byte|int,
// which when intersected with C (~string|~int) yields ~string|int.
//
// _NormalTerms computes these expansions and reductions, producing a
// "normalized" form of the embeddings. A structural restriction is normalized
// if it is a single union containing no interface terms, and is minimal in the
// sense that removing any term changes the set of types satisfying the
// constraint. It is left as a proof for the reader that, modulo sorting, there
// is exactly one such normalized form.
//
// Because the minimal representation always takes this form, _NormalTerms
// returns a slice of tilde terms corresponding to the terms of the union in
// the normalized structural restriction. An error is returned if the type is
// invalid, exceeds complexity bounds, or has an empty type set. In the latter
// case, _NormalTerms returns ErrEmptyTypeSet.
//
// _NormalTerms makes no guarantees about the order of terms, except that it
// is deterministic.
func _NormalTerms(typ types.Type) ([]*Term, error) {
	switch typ := typ.(type) {
	case *TypeParam:
		return StructuralTerms(typ)
	case *Union:
		return UnionTermSet(typ)
	case *types.Interface:
		return InterfaceTermSet(typ)
	default:
		return []*Term{NewTerm(false, typ)}, nil
	}
}
  07070100000F97000081A4000000000000000000000001645E367C0000014C000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/typeparams/enabled_go117.go    // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build !go1.18
// +build !go1.18

package typeparams

// Enabled reports whether type parameters are enabled in the current build
// environment.
const Enabled = false
07070100000F98000081A4000000000000000000000001645E367C000001D6000000000000000000000000000000000000005300000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/typeparams/enabled_go118.go    // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build go1.18
// +build go1.18

package typeparams

// Note: this constant is in a separate file as this is the only acceptable
// diff between the <1.18 API of this package and the 1.18 API.

// Enabled reports whether type parameters are enabled in the current build
// environment.
const Enabled = true
  07070100000F99000081A4000000000000000000000001645E367C00001A76000000000000000000000000000000000000004F00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/typeparams/normalize.go    // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package typeparams

import (
	"errors"
	"fmt"
	"go/types"
	"os"
	"strings"
)

//go:generate go run copytermlist.go

const debug = false

var ErrEmptyTypeSet = errors.New("empty type set")

// StructuralTerms returns a slice of terms representing the normalized
// structural type restrictions of a type parameter, if any.
//
// Structural type restrictions of a type parameter are created via
// non-interface types embedded in its constraint interface (directly, or via a
// chain of interface embeddings). For example, in the declaration
//
//	type T[P interface{~int; m()}] int
//
// the structural restriction of the type parameter P is ~int.
//
// With interface embedding and unions, the specification of structural type
// restrictions may be arbitrarily complex. For example, consider the
// following:
//
//	type A interface{ ~string|~[]byte }
//
//	type B interface{ int|string }
//
//	type C interface { ~string|~int }
//
//	type T[P interface{ A|B; C }] int
//
// In this example, the structural type restriction of P is ~string|int: A|B
// expands to ~string|~[]byte|int|string, which reduces to ~string|~[]byte|int,
// which when intersected with C (~string|~int) yields ~string|int.
//
// StructuralTerms computes these expansions and reductions, producing a
// "normalized" form of the embeddings. A structural restriction is normalized
// if it is a single union containing no interface terms, and is minimal in the
// sense that removing any term changes the set of types satisfying the
// constraint. It is left as a proof for the reader that, modulo sorting, there
// is exactly one such normalized form.
//
// Because the minimal representation always takes this form, StructuralTerms
// returns a slice of tilde terms corresponding to the terms of the union in
// the normalized structural restriction. An error is returned if the
// constraint interface is invalid, exceeds complexity bounds, or has an empty
// type set. In the latter case, StructuralTerms returns ErrEmptyTypeSet.
//
// StructuralTerms makes no guarantees about the order of terms, except that it
// is deterministic.
func StructuralTerms(tparam *TypeParam) ([]*Term, error) {
	constraint := tparam.Constraint()
	if constraint == nil {
		return nil, fmt.Errorf("%s has nil constraint", tparam)
	}
	iface, _ := constraint.Underlying().(*types.Interface)
	if iface == nil {
		return nil, fmt.Errorf("constraint is %T, not *types.Interface", constraint.Underlying())
	}
	return InterfaceTermSet(iface)
}

// InterfaceTermSet computes the normalized terms for a constraint interface,
// returning an error if the term set cannot be computed or is empty. In the
// latter case, the error will be ErrEmptyTypeSet.
//
// See the documentation of StructuralTerms for more information on
// normalization.
func InterfaceTermSet(iface *types.Interface) ([]*Term, error) {
	return computeTermSet(iface)
}

// UnionTermSet computes the normalized terms for a union, returning an error
// if the term set cannot be computed or is empty. In the latter case, the
// error will be ErrEmptyTypeSet.
//
// See the documentation of StructuralTerms for more information on
// normalization.
func UnionTermSet(union *Union) ([]*Term, error) {
	return computeTermSet(union)
}

func computeTermSet(typ types.Type) ([]*Term, error) {
	tset, err := computeTermSetInternal(typ, make(map[types.Type]*termSet), 0)
	if err != nil {
		return nil, err
	}
	if tset.terms.isEmpty() {
		return nil, ErrEmptyTypeSet
	}
	if tset.terms.isAll() {
		return nil, nil
	}
	var terms []*Term
	for _, term := range tset.terms {
		terms = append(terms, NewTerm(term.tilde, term.typ))
	}
	return terms, nil
}

// A termSet holds the normalized set of terms for a given type.
//
// The name termSet is intentionally distinct from 'type set': a type set is
// all types that implement a type (and includes method restrictions), whereas
// a term set just represents the structural restrictions on a type.
type termSet struct {
	complete bool
	terms    termlist
}

func indentf(depth int, format string, args ...interface{}) {
	fmt.Fprintf(os.Stderr, strings.Repeat(".", depth)+format+"\n", args...)
}

func computeTermSetInternal(t types.Type, seen map[types.Type]*termSet, depth int) (res *termSet, err error) {
	if t == nil {
		panic("nil type")
	}

	if debug {
		indentf(depth, "%s", t.String())
		defer func() {
			if err != nil {
				indentf(depth, "=> %s", err)
			} else {
				indentf(depth, "=> %s", res.terms.String())
			}
		}()
	}

	const maxTermCount = 100
	if tset, ok := seen[t]; ok {
		if !tset.complete {
			return nil, fmt.Errorf("cycle detected in the declaration of %s", t)
		}
		return tset, nil
	}

	// Mark the current type as seen to avoid infinite recursion.
	tset := new(termSet)
	defer func() {
		tset.complete = true
	}()
	seen[t] = tset

	switch u := t.Underlying().(type) {
	case *types.Interface:
		// The term set of an interface is the intersection of the term sets of its
		// embedded types.
		tset.terms = allTermlist
		for i := 0; i < u.NumEmbeddeds(); i++ {
			embedded := u.EmbeddedType(i)
			if _, ok := embedded.Underlying().(*TypeParam); ok {
				return nil, fmt.Errorf("invalid embedded type %T", embedded)
			}
			tset2, err := computeTermSetInternal(embedded, seen, depth+1)
			if err != nil {
				return nil, err
			}
			tset.terms = tset.terms.intersect(tset2.terms)
		}
	case *Union:
		// The term set of a union is the union of term sets of its terms.
		tset.terms = nil
		for i := 0; i < u.Len(); i++ {
			t := u.Term(i)
			var terms termlist
			switch t.Type().Underlying().(type) {
			case *types.Interface:
				tset2, err := computeTermSetInternal(t.Type(), seen, depth+1)
				if err != nil {
					return nil, err
				}
				terms = tset2.terms
			case *TypeParam, *Union:
				// A stand-alone type parameter or union is not permitted as union
				// term.
				return nil, fmt.Errorf("invalid union term %T", t)
			default:
				if t.Type() == types.Typ[types.Invalid] {
					continue
				}
				terms = termlist{{t.Tilde(), t.Type()}}
			}
			tset.terms = tset.terms.union(terms)
			if len(tset.terms) > maxTermCount {
				return nil, fmt.Errorf("exceeded max term count %d", maxTermCount)
			}
		}
	case *TypeParam:
		panic("unreachable")
	default:
		// For all other types, the term set is just a single non-tilde term
		// holding the type itself.
		if u != types.Typ[types.Invalid] {
			tset.terms = termlist{{false, t}}
		}
	}
	return tset, nil
}

// under is a facade for the go/types internal function of the same name. It is
// used by typeterm.go.
func under(t types.Type) types.Type {
	return t.Underlying()
}
  07070100000F9A000081A4000000000000000000000001645E367C00000F0B000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/typeparams/termlist.go // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Code generated by copytermlist.go DO NOT EDIT.

package typeparams

import (
	"bytes"
	"go/types"
)

// A termlist represents the type set represented by the union
// t1 ∪ y2 ∪ ... tn of the type sets of the terms t1 to tn.
// A termlist is in normal form if all terms are disjoint.
// termlist operations don't require the operands to be in
// normal form.
type termlist []*term

// allTermlist represents the set of all types.
// It is in normal form.
var allTermlist = termlist{new(term)}

// String prints the termlist exactly (without normalization).
func (xl termlist) String() string {
	if len(xl) == 0 {
		return "∅"
	}
	var buf bytes.Buffer
	for i, x := range xl {
		if i > 0 {
			buf.WriteString(" ∪ ")
		}
		buf.WriteString(x.String())
	}
	return buf.String()
}

// isEmpty reports whether the termlist xl represents the empty set of types.
func (xl termlist) isEmpty() bool {
	// If there's a non-nil term, the entire list is not empty.
	// If the termlist is in normal form, this requires at most
	// one iteration.
	for _, x := range xl {
		if x != nil {
			return false
		}
	}
	return true
}

// isAll reports whether the termlist xl represents the set of all types.
func (xl termlist) isAll() bool {
	// If there's a 𝓤 term, the entire list is 𝓤.
	// If the termlist is in normal form, this requires at most
	// one iteration.
	for _, x := range xl {
		if x != nil && x.typ == nil {
			return true
		}
	}
	return false
}

// norm returns the normal form of xl.
func (xl termlist) norm() termlist {
	// Quadratic algorithm, but good enough for now.
	// TODO(gri) fix asymptotic performance
	used := make([]bool, len(xl))
	var rl termlist
	for i, xi := range xl {
		if xi == nil || used[i] {
			continue
		}
		for j := i + 1; j < len(xl); j++ {
			xj := xl[j]
			if xj == nil || used[j] {
				continue
			}
			if u1, u2 := xi.union(xj); u2 == nil {
				// If we encounter a 𝓤 term, the entire list is 𝓤.
				// Exit early.
				// (Note that this is not just an optimization;
				// if we continue, we may end up with a 𝓤 term
				// and other terms and the result would not be
				// in normal form.)
				if u1.typ == nil {
					return allTermlist
				}
				xi = u1
				used[j] = true // xj is now unioned into xi - ignore it in future iterations
			}
		}
		rl = append(rl, xi)
	}
	return rl
}

// union returns the union xl ∪ yl.
func (xl termlist) union(yl termlist) termlist {
	return append(xl, yl...).norm()
}

// intersect returns the intersection xl ∩ yl.
func (xl termlist) intersect(yl termlist) termlist {
	if xl.isEmpty() || yl.isEmpty() {
		return nil
	}

	// Quadratic algorithm, but good enough for now.
	// TODO(gri) fix asymptotic performance
	var rl termlist
	for _, x := range xl {
		for _, y := range yl {
			if r := x.intersect(y); r != nil {
				rl = append(rl, r)
			}
		}
	}
	return rl.norm()
}

// equal reports whether xl and yl represent the same type set.
func (xl termlist) equal(yl termlist) bool {
	// TODO(gri) this should be more efficient
	return xl.subsetOf(yl) && yl.subsetOf(xl)
}

// includes reports whether t ∈ xl.
func (xl termlist) includes(t types.Type) bool {
	for _, x := range xl {
		if x.includes(t) {
			return true
		}
	}
	return false
}

// supersetOf reports whether y ⊆ xl.
func (xl termlist) supersetOf(y *term) bool {
	for _, x := range xl {
		if y.subsetOf(x) {
			return true
		}
	}
	return false
}

// subsetOf reports whether xl ⊆ yl.
func (xl termlist) subsetOf(yl termlist) bool {
	if yl.isEmpty() {
		return xl.isEmpty()
	}

	// each term x of xl must be a subset of yl
	for _, x := range xl {
		if !yl.supersetOf(x) {
			return false // x is not a subset yl
		}
	}
	return true
}
 07070100000F9B000081A4000000000000000000000001645E367C000015D0000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build !go1.18
// +build !go1.18

package typeparams

import (
	"go/ast"
	"go/token"
	"go/types"
)

func unsupported() {
	panic("type parameters are unsupported at this go version")
}

// IndexListExpr is a placeholder type, as type parameters are not supported at
// this Go version. Its methods panic on use.
type IndexListExpr struct {
	ast.Expr
	X       ast.Expr   // expression
	Lbrack  token.Pos  // position of "["
	Indices []ast.Expr // index expressions
	Rbrack  token.Pos  // position of "]"
}

// ForTypeSpec returns an empty field list, as type parameters on not supported
// at this Go version.
func ForTypeSpec(*ast.TypeSpec) *ast.FieldList {
	return nil
}

// ForFuncType returns an empty field list, as type parameters are not
// supported at this Go version.
func ForFuncType(*ast.FuncType) *ast.FieldList {
	return nil
}

// TypeParam is a placeholder type, as type parameters are not supported at
// this Go version. Its methods panic on use.
type TypeParam struct{ types.Type }

func (*TypeParam) Index() int             { unsupported(); return 0 }
func (*TypeParam) Constraint() types.Type { unsupported(); return nil }
func (*TypeParam) Obj() *types.TypeName   { unsupported(); return nil }

// TypeParamList is a placeholder for an empty type parameter list.
type TypeParamList struct{}

func (*TypeParamList) Len() int          { return 0 }
func (*TypeParamList) At(int) *TypeParam { unsupported(); return nil }

// TypeList is a placeholder for an empty type list.
type TypeList struct{}

func (*TypeList) Len() int          { return 0 }
func (*TypeList) At(int) types.Type { unsupported(); return nil }

// NewTypeParam is unsupported at this Go version, and panics.
func NewTypeParam(name *types.TypeName, constraint types.Type) *TypeParam {
	unsupported()
	return nil
}

// SetTypeParamConstraint is unsupported at this Go version, and panics.
func SetTypeParamConstraint(tparam *TypeParam, constraint types.Type) {
	unsupported()
}

// NewSignatureType calls types.NewSignature, panicking if recvTypeParams or
// typeParams is non-empty.
func NewSignatureType(recv *types.Var, recvTypeParams, typeParams []*TypeParam, params, results *types.Tuple, variadic bool) *types.Signature {
	if len(recvTypeParams) != 0 || len(typeParams) != 0 {
		panic("signatures cannot have type parameters at this Go version")
	}
	return types.NewSignature(recv, params, results, variadic)
}

// ForSignature returns an empty slice.
func ForSignature(*types.Signature) *TypeParamList {
	return nil
}

// RecvTypeParams returns a nil slice.
func RecvTypeParams(sig *types.Signature) *TypeParamList {
	return nil
}

// IsComparable returns false, as no interfaces are type-restricted at this Go
// version.
func IsComparable(*types.Interface) bool {
	return false
}

// IsMethodSet returns true, as no interfaces are type-restricted at this Go
// version.
func IsMethodSet(*types.Interface) bool {
	return true
}

// IsImplicit returns false, as no interfaces are implicit at this Go version.
func IsImplicit(*types.Interface) bool {
	return false
}

// MarkImplicit does nothing, because this Go version does not have implicit
// interfaces.
func MarkImplicit(*types.Interface) {}

// ForNamed returns an empty type parameter list, as type parameters are not
// supported at this Go version.
func ForNamed(*types.Named) *TypeParamList {
	return nil
}

// SetForNamed panics if tparams is non-empty.
func SetForNamed(_ *types.Named, tparams []*TypeParam) {
	if len(tparams) > 0 {
		unsupported()
	}
}

// NamedTypeArgs returns nil.
func NamedTypeArgs(*types.Named) *TypeList {
	return nil
}

// NamedTypeOrigin is the identity method at this Go version.
func NamedTypeOrigin(named *types.Named) types.Type {
	return named
}

// Term holds information about a structural type restriction.
type Term struct {
	tilde bool
	typ   types.Type
}

func (m *Term) Tilde() bool      { return m.tilde }
func (m *Term) Type() types.Type { return m.typ }
func (m *Term) String() string {
	pre := ""
	if m.tilde {
		pre = "~"
	}
	return pre + m.typ.String()
}

// NewTerm is unsupported at this Go version, and panics.
func NewTerm(tilde bool, typ types.Type) *Term {
	return &Term{tilde, typ}
}

// Union is a placeholder type, as type parameters are not supported at this Go
// version. Its methods panic on use.
type Union struct{ types.Type }

func (*Union) Len() int         { return 0 }
func (*Union) Term(i int) *Term { unsupported(); return nil }

// NewUnion is unsupported at this Go version, and panics.
func NewUnion(terms []*Term) *Union {
	unsupported()
	return nil
}

// InitInstanceInfo is a noop at this Go version.
func InitInstanceInfo(*types.Info) {}

// Instance is a placeholder type, as type parameters are not supported at this
// Go version.
type Instance struct {
	TypeArgs *TypeList
	Type     types.Type
}

// GetInstances returns a nil map, as type parameters are not supported at this
// Go version.
func GetInstances(info *types.Info) map[*ast.Ident]Instance { return nil }

// Context is a placeholder type, as type parameters are not supported at
// this Go version.
type Context struct{}

// NewContext returns a placeholder Context instance.
func NewContext() *Context {
	return &Context{}
}

// Instantiate is unsupported on this Go version, and panics.
func Instantiate(ctxt *Context, typ types.Type, targs []types.Type, validate bool) (types.Type, error) {
	unsupported()
	return nil, nil
}
07070100000F9C000081A4000000000000000000000001645E367C00000F7D000000000000000000000000000000000000005600000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build go1.18
// +build go1.18

package typeparams

import (
	"go/ast"
	"go/types"
)

// IndexListExpr is an alias for ast.IndexListExpr.
type IndexListExpr = ast.IndexListExpr

// ForTypeSpec returns n.TypeParams.
func ForTypeSpec(n *ast.TypeSpec) *ast.FieldList {
	if n == nil {
		return nil
	}
	return n.TypeParams
}

// ForFuncType returns n.TypeParams.
func ForFuncType(n *ast.FuncType) *ast.FieldList {
	if n == nil {
		return nil
	}
	return n.TypeParams
}

// TypeParam is an alias for types.TypeParam
type TypeParam = types.TypeParam

// TypeParamList is an alias for types.TypeParamList
type TypeParamList = types.TypeParamList

// TypeList is an alias for types.TypeList
type TypeList = types.TypeList

// NewTypeParam calls types.NewTypeParam.
func NewTypeParam(name *types.TypeName, constraint types.Type) *TypeParam {
	return types.NewTypeParam(name, constraint)
}

// SetTypeParamConstraint calls tparam.SetConstraint(constraint).
func SetTypeParamConstraint(tparam *TypeParam, constraint types.Type) {
	tparam.SetConstraint(constraint)
}

// NewSignatureType calls types.NewSignatureType.
func NewSignatureType(recv *types.Var, recvTypeParams, typeParams []*TypeParam, params, results *types.Tuple, variadic bool) *types.Signature {
	return types.NewSignatureType(recv, recvTypeParams, typeParams, params, results, variadic)
}

// ForSignature returns sig.TypeParams()
func ForSignature(sig *types.Signature) *TypeParamList {
	return sig.TypeParams()
}

// RecvTypeParams returns sig.RecvTypeParams().
func RecvTypeParams(sig *types.Signature) *TypeParamList {
	return sig.RecvTypeParams()
}

// IsComparable calls iface.IsComparable().
func IsComparable(iface *types.Interface) bool {
	return iface.IsComparable()
}

// IsMethodSet calls iface.IsMethodSet().
func IsMethodSet(iface *types.Interface) bool {
	return iface.IsMethodSet()
}

// IsImplicit calls iface.IsImplicit().
func IsImplicit(iface *types.Interface) bool {
	return iface.IsImplicit()
}

// MarkImplicit calls iface.MarkImplicit().
func MarkImplicit(iface *types.Interface) {
	iface.MarkImplicit()
}

// ForNamed extracts the (possibly empty) type parameter object list from
// named.
func ForNamed(named *types.Named) *TypeParamList {
	return named.TypeParams()
}

// SetForNamed sets the type params tparams on n. Each tparam must be of
// dynamic type *types.TypeParam.
func SetForNamed(n *types.Named, tparams []*TypeParam) {
	n.SetTypeParams(tparams)
}

// NamedTypeArgs returns named.TypeArgs().
func NamedTypeArgs(named *types.Named) *TypeList {
	return named.TypeArgs()
}

// NamedTypeOrigin returns named.Orig().
func NamedTypeOrigin(named *types.Named) types.Type {
	return named.Origin()
}

// Term is an alias for types.Term.
type Term = types.Term

// NewTerm calls types.NewTerm.
func NewTerm(tilde bool, typ types.Type) *Term {
	return types.NewTerm(tilde, typ)
}

// Union is an alias for types.Union
type Union = types.Union

// NewUnion calls types.NewUnion.
func NewUnion(terms []*Term) *Union {
	return types.NewUnion(terms)
}

// InitInstanceInfo initializes info to record information about type and
// function instances.
func InitInstanceInfo(info *types.Info) {
	info.Instances = make(map[*ast.Ident]types.Instance)
}

// Instance is an alias for types.Instance.
type Instance = types.Instance

// GetInstances returns info.Instances.
func GetInstances(info *types.Info) map[*ast.Ident]Instance {
	return info.Instances
}

// Context is an alias for types.Context.
type Context = types.Context

// NewContext calls types.NewContext.
func NewContext() *Context {
	return types.NewContext()
}

// Instantiate calls types.Instantiate.
func Instantiate(ctxt *Context, typ types.Type, targs []types.Type, validate bool) (types.Type, error) {
	return types.Instantiate(ctxt, typ, targs, validate)
}
   07070100000F9D000081A4000000000000000000000001645E367C00000E82000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/typeparams/typeterm.go // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Code generated by copytermlist.go DO NOT EDIT.

package typeparams

import "go/types"

// A term describes elementary type sets:
//
//   ∅:  (*term)(nil)     == ∅                      // set of no types (empty set)
//   𝓤:  &term{}          == 𝓤                      // set of all types (𝓤niverse)
//   T:  &term{false, T}  == {T}                    // set of type T
//  ~t:  &term{true, t}   == {t' | under(t') == t}  // set of types with underlying type t
//
type term struct {
	tilde bool // valid if typ != nil
	typ   types.Type
}

func (x *term) String() string {
	switch {
	case x == nil:
		return "∅"
	case x.typ == nil:
		return "𝓤"
	case x.tilde:
		return "~" + x.typ.String()
	default:
		return x.typ.String()
	}
}

// equal reports whether x and y represent the same type set.
func (x *term) equal(y *term) bool {
	// easy cases
	switch {
	case x == nil || y == nil:
		return x == y
	case x.typ == nil || y.typ == nil:
		return x.typ == y.typ
	}
	// ∅ ⊂ x, y ⊂ 𝓤

	return x.tilde == y.tilde && types.Identical(x.typ, y.typ)
}

// union returns the union x ∪ y: zero, one, or two non-nil terms.
func (x *term) union(y *term) (_, _ *term) {
	// easy cases
	switch {
	case x == nil && y == nil:
		return nil, nil // ∅ ∪ ∅ == ∅
	case x == nil:
		return y, nil // ∅ ∪ y == y
	case y == nil:
		return x, nil // x ∪ ∅ == x
	case x.typ == nil:
		return x, nil // 𝓤 ∪ y == 𝓤
	case y.typ == nil:
		return y, nil // x ∪ 𝓤 == 𝓤
	}
	// ∅ ⊂ x, y ⊂ 𝓤

	if x.disjoint(y) {
		return x, y // x ∪ y == (x, y) if x ∩ y == ∅
	}
	// x.typ == y.typ

	// ~t ∪ ~t == ~t
	// ~t ∪  T == ~t
	//  T ∪ ~t == ~t
	//  T ∪  T ==  T
	if x.tilde || !y.tilde {
		return x, nil
	}
	return y, nil
}

// intersect returns the intersection x ∩ y.
func (x *term) intersect(y *term) *term {
	// easy cases
	switch {
	case x == nil || y == nil:
		return nil // ∅ ∩ y == ∅ and ∩ ∅ == ∅
	case x.typ == nil:
		return y // 𝓤 ∩ y == y
	case y.typ == nil:
		return x // x ∩ 𝓤 == x
	}
	// ∅ ⊂ x, y ⊂ 𝓤

	if x.disjoint(y) {
		return nil // x ∩ y == ∅ if x ∩ y == ∅
	}
	// x.typ == y.typ

	// ~t ∩ ~t == ~t
	// ~t ∩  T ==  T
	//  T ∩ ~t ==  T
	//  T ∩  T ==  T
	if !x.tilde || y.tilde {
		return x
	}
	return y
}

// includes reports whether t ∈ x.
func (x *term) includes(t types.Type) bool {
	// easy cases
	switch {
	case x == nil:
		return false // t ∈ ∅ == false
	case x.typ == nil:
		return true // t ∈ 𝓤 == true
	}
	// ∅ ⊂ x ⊂ 𝓤

	u := t
	if x.tilde {
		u = under(u)
	}
	return types.Identical(x.typ, u)
}

// subsetOf reports whether x ⊆ y.
func (x *term) subsetOf(y *term) bool {
	// easy cases
	switch {
	case x == nil:
		return true // ∅ ⊆ y == true
	case y == nil:
		return false // x ⊆ ∅ == false since x != ∅
	case y.typ == nil:
		return true // x ⊆ 𝓤 == true
	case x.typ == nil:
		return false // 𝓤 ⊆ y == false since y != 𝓤
	}
	// ∅ ⊂ x, y ⊂ 𝓤

	if x.disjoint(y) {
		return false // x ⊆ y == false if x ∩ y == ∅
	}
	// x.typ == y.typ

	// ~t ⊆ ~t == true
	// ~t ⊆ T == false
	//  T ⊆ ~t == true
	//  T ⊆  T == true
	return !x.tilde || y.tilde
}

// disjoint reports whether x ∩ y == ∅.
// x.typ and y.typ must not be nil.
func (x *term) disjoint(y *term) bool {
	if debug && (x.typ == nil || y.typ == nil) {
		panic("invalid argument(s)")
	}
	ux := x.typ
	if y.tilde {
		ux = under(ux)
	}
	uy := y.typ
	if x.tilde {
		uy = under(uy)
	}
	return !types.Identical(ux, uy)
}
  07070100000F9E000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/typesinternal  07070100000F9F000081A4000000000000000000000001645E367C000087D0000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/typesinternal/errorcode.go // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package typesinternal

//go:generate stringer -type=ErrorCode

type ErrorCode int

// This file defines the error codes that can be produced during type-checking.
// Collectively, these codes provide an identifier that may be used to
// implement special handling for certain types of errors.
//
// Error codes should be fine-grained enough that the exact nature of the error
// can be easily determined, but coarse enough that they are not an
// implementation detail of the type checking algorithm. As a rule-of-thumb,
// errors should be considered equivalent if there is a theoretical refactoring
// of the type checker in which they are emitted in exactly one place. For
// example, the type checker emits different error messages for "too many
// arguments" and "too few arguments", but one can imagine an alternative type
// checker where this check instead just emits a single "wrong number of
// arguments", so these errors should have the same code.
//
// Error code names should be as brief as possible while retaining accuracy and
// distinctiveness. In most cases names should start with an adjective
// describing the nature of the error (e.g. "invalid", "unused", "misplaced"),
// and end with a noun identifying the relevant language object. For example,
// "DuplicateDecl" or "InvalidSliceExpr". For brevity, naming follows the
// convention that "bad" implies a problem with syntax, and "invalid" implies a
// problem with types.

const (
	// InvalidSyntaxTree occurs if an invalid syntax tree is provided
	// to the type checker. It should never happen.
	InvalidSyntaxTree ErrorCode = -1
)

const (
	_ ErrorCode = iota

	// Test is reserved for errors that only apply while in self-test mode.
	Test

	/* package names */

	// BlankPkgName occurs when a package name is the blank identifier "_".
	//
	// Per the spec:
	//  "The PackageName must not be the blank identifier."
	BlankPkgName

	// MismatchedPkgName occurs when a file's package name doesn't match the
	// package name already established by other files.
	MismatchedPkgName

	// InvalidPkgUse occurs when a package identifier is used outside of a
	// selector expression.
	//
	// Example:
	//  import "fmt"
	//
	//  var _ = fmt
	InvalidPkgUse

	/* imports */

	// BadImportPath occurs when an import path is not valid.
	BadImportPath

	// BrokenImport occurs when importing a package fails.
	//
	// Example:
	//  import "amissingpackage"
	BrokenImport

	// ImportCRenamed occurs when the special import "C" is renamed. "C" is a
	// pseudo-package, and must not be renamed.
	//
	// Example:
	//  import _ "C"
	ImportCRenamed

	// UnusedImport occurs when an import is unused.
	//
	// Example:
	//  import "fmt"
	//
	//  func main() {}
	UnusedImport

	/* initialization */

	// InvalidInitCycle occurs when an invalid cycle is detected within the
	// initialization graph.
	//
	// Example:
	//  var x int = f()
	//
	//  func f() int { return x }
	InvalidInitCycle

	/* decls */

	// DuplicateDecl occurs when an identifier is declared multiple times.
	//
	// Example:
	//  var x = 1
	//  var x = 2
	DuplicateDecl

	// InvalidDeclCycle occurs when a declaration cycle is not valid.
	//
	// Example:
	//  import "unsafe"
	//
	//  type T struct {
	//  	a [n]int
	//  }
	//
	//  var n = unsafe.Sizeof(T{})
	InvalidDeclCycle

	// InvalidTypeCycle occurs when a cycle in type definitions results in a
	// type that is not well-defined.
	//
	// Example:
	//  import "unsafe"
	//
	//  type T [unsafe.Sizeof(T{})]int
	InvalidTypeCycle

	/* decls > const */

	// InvalidConstInit occurs when a const declaration has a non-constant
	// initializer.
	//
	// Example:
	//  var x int
	//  const _ = x
	InvalidConstInit

	// InvalidConstVal occurs when a const value cannot be converted to its
	// target type.
	//
	// TODO(findleyr): this error code and example are not very clear. Consider
	// removing it.
	//
	// Example:
	//  const _ = 1 << "hello"
	InvalidConstVal

	// InvalidConstType occurs when the underlying type in a const declaration
	// is not a valid constant type.
	//
	// Example:
	//  const c *int = 4
	InvalidConstType

	/* decls > var (+ other variable assignment codes) */

	// UntypedNilUse occurs when the predeclared (untyped) value nil is used to
	// initialize a variable declared without an explicit type.
	//
	// Example:
	//  var x = nil
	UntypedNilUse

	// WrongAssignCount occurs when the number of values on the right-hand side
	// of an assignment or or initialization expression does not match the number
	// of variables on the left-hand side.
	//
	// Example:
	//  var x = 1, 2
	WrongAssignCount

	// UnassignableOperand occurs when the left-hand side of an assignment is
	// not assignable.
	//
	// Example:
	//  func f() {
	//  	const c = 1
	//  	c = 2
	//  }
	UnassignableOperand

	// NoNewVar occurs when a short variable declaration (':=') does not declare
	// new variables.
	//
	// Example:
	//  func f() {
	//  	x := 1
	//  	x := 2
	//  }
	NoNewVar

	// MultiValAssignOp occurs when an assignment operation (+=, *=, etc) does
	// not have single-valued left-hand or right-hand side.
	//
	// Per the spec:
	//  "In assignment operations, both the left- and right-hand expression lists
	//  must contain exactly one single-valued expression"
	//
	// Example:
	//  func f() int {
	//  	x, y := 1, 2
	//  	x, y += 1
	//  	return x + y
	//  }
	MultiValAssignOp

	// InvalidIfaceAssign occurs when a value of type T is used as an
	// interface, but T does not implement a method of the expected interface.
	//
	// Example:
	//  type I interface {
	//  	f()
	//  }
	//
	//  type T int
	//
	//  var x I = T(1)
	InvalidIfaceAssign

	// InvalidChanAssign occurs when a chan assignment is invalid.
	//
	// Per the spec, a value x is assignable to a channel type T if:
	//  "x is a bidirectional channel value, T is a channel type, x's type V and
	//  T have identical element types, and at least one of V or T is not a
	//  defined type."
	//
	// Example:
	//  type T1 chan int
	//  type T2 chan int
	//
	//  var x T1
	//  // Invalid assignment because both types are named
	//  var _ T2 = x
	InvalidChanAssign

	// IncompatibleAssign occurs when the type of the right-hand side expression
	// in an assignment cannot be assigned to the type of the variable being
	// assigned.
	//
	// Example:
	//  var x []int
	//  var _ int = x
	IncompatibleAssign

	// UnaddressableFieldAssign occurs when trying to assign to a struct field
	// in a map value.
	//
	// Example:
	//  func f() {
	//  	m := make(map[string]struct{i int})
	//  	m["foo"].i = 42
	//  }
	UnaddressableFieldAssign

	/* decls > type (+ other type expression codes) */

	// NotAType occurs when the identifier used as the underlying type in a type
	// declaration or the right-hand side of a type alias does not denote a type.
	//
	// Example:
	//  var S = 2
	//
	//  type T S
	NotAType

	// InvalidArrayLen occurs when an array length is not a constant value.
	//
	// Example:
	//  var n = 3
	//  var _ = [n]int{}
	InvalidArrayLen

	// BlankIfaceMethod occurs when a method name is '_'.
	//
	// Per the spec:
	//  "The name of each explicitly specified method must be unique and not
	//  blank."
	//
	// Example:
	//  type T interface {
	//  	_(int)
	//  }
	BlankIfaceMethod

	// IncomparableMapKey occurs when a map key type does not support the == and
	// != operators.
	//
	// Per the spec:
	//  "The comparison operators == and != must be fully defined for operands of
	//  the key type; thus the key type must not be a function, map, or slice."
	//
	// Example:
	//  var x map[T]int
	//
	//  type T []int
	IncomparableMapKey

	// InvalidIfaceEmbed occurs when a non-interface type is embedded in an
	// interface.
	//
	// Example:
	//  type T struct {}
	//
	//  func (T) m()
	//
	//  type I interface {
	//  	T
	//  }
	InvalidIfaceEmbed

	// InvalidPtrEmbed occurs when an embedded field is of the pointer form *T,
	// and T itself is itself a pointer, an unsafe.Pointer, or an interface.
	//
	// Per the spec:
	//  "An embedded field must be specified as a type name T or as a pointer to
	//  a non-interface type name *T, and T itself may not be a pointer type."
	//
	// Example:
	//  type T *int
	//
	//  type S struct {
	//  	*T
	//  }
	InvalidPtrEmbed

	/* decls > func and method */

	// BadRecv occurs when a method declaration does not have exactly one
	// receiver parameter.
	//
	// Example:
	//  func () _() {}
	BadRecv

	// InvalidRecv occurs when a receiver type expression is not of the form T
	// or *T, or T is a pointer type.
	//
	// Example:
	//  type T struct {}
	//
	//  func (**T) m() {}
	InvalidRecv

	// DuplicateFieldAndMethod occurs when an identifier appears as both a field
	// and method name.
	//
	// Example:
	//  type T struct {
	//  	m int
	//  }
	//
	//  func (T) m() {}
	DuplicateFieldAndMethod

	// DuplicateMethod occurs when two methods on the same receiver type have
	// the same name.
	//
	// Example:
	//  type T struct {}
	//  func (T) m() {}
	//  func (T) m(i int) int { return i }
	DuplicateMethod

	/* decls > special */

	// InvalidBlank occurs when a blank identifier is used as a value or type.
	//
	// Per the spec:
	//  "The blank identifier may appear as an operand only on the left-hand side
	//  of an assignment."
	//
	// Example:
	//  var x = _
	InvalidBlank

	// InvalidIota occurs when the predeclared identifier iota is used outside
	// of a constant declaration.
	//
	// Example:
	//  var x = iota
	InvalidIota

	// MissingInitBody occurs when an init function is missing its body.
	//
	// Example:
	//  func init()
	MissingInitBody

	// InvalidInitSig occurs when an init function declares parameters or
	// results.
	//
	// Example:
	//  func init() int { return 1 }
	InvalidInitSig

	// InvalidInitDecl occurs when init is declared as anything other than a
	// function.
	//
	// Example:
	//  var init = 1
	InvalidInitDecl

	// InvalidMainDecl occurs when main is declared as anything other than a
	// function, in a main package.
	InvalidMainDecl

	/* exprs */

	// TooManyValues occurs when a function returns too many values for the
	// expression context in which it is used.
	//
	// Example:
	//  func ReturnTwo() (int, int) {
	//  	return 1, 2
	//  }
	//
	//  var x = ReturnTwo()
	TooManyValues

	// NotAnExpr occurs when a type expression is used where a value expression
	// is expected.
	//
	// Example:
	//  type T struct {}
	//
	//  func f() {
	//  	T
	//  }
	NotAnExpr

	/* exprs > const */

	// TruncatedFloat occurs when a float constant is truncated to an integer
	// value.
	//
	// Example:
	//  var _ int = 98.6
	TruncatedFloat

	// NumericOverflow occurs when a numeric constant overflows its target type.
	//
	// Example:
	//  var x int8 = 1000
	NumericOverflow

	/* exprs > operation */

	// UndefinedOp occurs when an operator is not defined for the type(s) used
	// in an operation.
	//
	// Example:
	//  var c = "a" - "b"
	UndefinedOp

	// MismatchedTypes occurs when operand types are incompatible in a binary
	// operation.
	//
	// Example:
	//  var a = "hello"
	//  var b = 1
	//  var c = a - b
	MismatchedTypes

	// DivByZero occurs when a division operation is provable at compile
	// time to be a division by zero.
	//
	// Example:
	//  const divisor = 0
	//  var x int = 1/divisor
	DivByZero

	// NonNumericIncDec occurs when an increment or decrement operator is
	// applied to a non-numeric value.
	//
	// Example:
	//  func f() {
	//  	var c = "c"
	//  	c++
	//  }
	NonNumericIncDec

	/* exprs > ptr */

	// UnaddressableOperand occurs when the & operator is applied to an
	// unaddressable expression.
	//
	// Example:
	//  var x = &1
	UnaddressableOperand

	// InvalidIndirection occurs when a non-pointer value is indirected via the
	// '*' operator.
	//
	// Example:
	//  var x int
	//  var y = *x
	InvalidIndirection

	/* exprs > [] */

	// NonIndexableOperand occurs when an index operation is applied to a value
	// that cannot be indexed.
	//
	// Example:
	//  var x = 1
	//  var y = x[1]
	NonIndexableOperand

	// InvalidIndex occurs when an index argument is not of integer type,
	// negative, or out-of-bounds.
	//
	// Example:
	//  var s = [...]int{1,2,3}
	//  var x = s[5]
	//
	// Example:
	//  var s = []int{1,2,3}
	//  var _ = s[-1]
	//
	// Example:
	//  var s = []int{1,2,3}
	//  var i string
	//  var _ = s[i]
	InvalidIndex

	// SwappedSliceIndices occurs when constant indices in a slice expression
	// are decreasing in value.
	//
	// Example:
	//  var _ = []int{1,2,3}[2:1]
	SwappedSliceIndices

	/* operators > slice */

	// NonSliceableOperand occurs when a slice operation is applied to a value
	// whose type is not sliceable, or is unaddressable.
	//
	// Example:
	//  var x = [...]int{1, 2, 3}[:1]
	//
	// Example:
	//  var x = 1
	//  var y = 1[:1]
	NonSliceableOperand

	// InvalidSliceExpr occurs when a three-index slice expression (a[x:y:z]) is
	// applied to a string.
	//
	// Example:
	//  var s = "hello"
	//  var x = s[1:2:3]
	InvalidSliceExpr

	/* exprs > shift */

	// InvalidShiftCount occurs when the right-hand side of a shift operation is
	// either non-integer, negative, or too large.
	//
	// Example:
	//  var (
	//  	x string
	//  	y int = 1 << x
	//  )
	InvalidShiftCount

	// InvalidShiftOperand occurs when the shifted operand is not an integer.
	//
	// Example:
	//  var s = "hello"
	//  var x = s << 2
	InvalidShiftOperand

	/* exprs > chan */

	// InvalidReceive occurs when there is a channel receive from a value that
	// is either not a channel, or is a send-only channel.
	//
	// Example:
	//  func f() {
	//  	var x = 1
	//  	<-x
	//  }
	InvalidReceive

	// InvalidSend occurs when there is a channel send to a value that is not a
	// channel, or is a receive-only channel.
	//
	// Example:
	//  func f() {
	//  	var x = 1
	//  	x <- "hello!"
	//  }
	InvalidSend

	/* exprs > literal */

	// DuplicateLitKey occurs when an index is duplicated in a slice, array, or
	// map literal.
	//
	// Example:
	//  var _ = []int{0:1, 0:2}
	//
	// Example:
	//  var _ = map[string]int{"a": 1, "a": 2}
	DuplicateLitKey

	// MissingLitKey occurs when a map literal is missing a key expression.
	//
	// Example:
	//  var _ = map[string]int{1}
	MissingLitKey

	// InvalidLitIndex occurs when the key in a key-value element of a slice or
	// array literal is not an integer constant.
	//
	// Example:
	//  var i = 0
	//  var x = []string{i: "world"}
	InvalidLitIndex

	// OversizeArrayLit occurs when an array literal exceeds its length.
	//
	// Example:
	//  var _ = [2]int{1,2,3}
	OversizeArrayLit

	// MixedStructLit occurs when a struct literal contains a mix of positional
	// and named elements.
	//
	// Example:
	//  var _ = struct{i, j int}{i: 1, 2}
	MixedStructLit

	// InvalidStructLit occurs when a positional struct literal has an incorrect
	// number of values.
	//
	// Example:
	//  var _ = struct{i, j int}{1,2,3}
	InvalidStructLit

	// MissingLitField occurs when a struct literal refers to a field that does
	// not exist on the struct type.
	//
	// Example:
	//  var _ = struct{i int}{j: 2}
	MissingLitField

	// DuplicateLitField occurs when a struct literal contains duplicated
	// fields.
	//
	// Example:
	//  var _ = struct{i int}{i: 1, i: 2}
	DuplicateLitField

	// UnexportedLitField occurs when a positional struct literal implicitly
	// assigns an unexported field of an imported type.
	UnexportedLitField

	// InvalidLitField occurs when a field name is not a valid identifier.
	//
	// Example:
	//  var _ = struct{i int}{1: 1}
	InvalidLitField

	// UntypedLit occurs when a composite literal omits a required type
	// identifier.
	//
	// Example:
	//  type outer struct{
	//  	inner struct { i int }
	//  }
	//
	//  var _ = outer{inner: {1}}
	UntypedLit

	// InvalidLit occurs when a composite literal expression does not match its
	// type.
	//
	// Example:
	//  type P *struct{
	//  	x int
	//  }
	//  var _ = P {}
	InvalidLit

	/* exprs > selector */

	// AmbiguousSelector occurs when a selector is ambiguous.
	//
	// Example:
	//  type E1 struct { i int }
	//  type E2 struct { i int }
	//  type T struct { E1; E2 }
	//
	//  var x T
	//  var _ = x.i
	AmbiguousSelector

	// UndeclaredImportedName occurs when a package-qualified identifier is
	// undeclared by the imported package.
	//
	// Example:
	//  import "go/types"
	//
	//  var _ = types.NotAnActualIdentifier
	UndeclaredImportedName

	// UnexportedName occurs when a selector refers to an unexported identifier
	// of an imported package.
	//
	// Example:
	//  import "reflect"
	//
	//  type _ reflect.flag
	UnexportedName

	// UndeclaredName occurs when an identifier is not declared in the current
	// scope.
	//
	// Example:
	//  var x T
	UndeclaredName

	// MissingFieldOrMethod occurs when a selector references a field or method
	// that does not exist.
	//
	// Example:
	//  type T struct {}
	//
	//  var x = T{}.f
	MissingFieldOrMethod

	/* exprs > ... */

	// BadDotDotDotSyntax occurs when a "..." occurs in a context where it is
	// not valid.
	//
	// Example:
	//  var _ = map[int][...]int{0: {}}
	BadDotDotDotSyntax

	// NonVariadicDotDotDot occurs when a "..." is used on the final argument to
	// a non-variadic function.
	//
	// Example:
	//  func printArgs(s []string) {
	//  	for _, a := range s {
	//  		println(a)
	//  	}
	//  }
	//
	//  func f() {
	//  	s := []string{"a", "b", "c"}
	//  	printArgs(s...)
	//  }
	NonVariadicDotDotDot

	// MisplacedDotDotDot occurs when a "..." is used somewhere other than the
	// final argument to a function call.
	//
	// Example:
	//  func printArgs(args ...int) {
	//  	for _, a := range args {
	//  		println(a)
	//  	}
	//  }
	//
	//  func f() {
	//  	a := []int{1,2,3}
	//  	printArgs(0, a...)
	//  }
	MisplacedDotDotDot

	// InvalidDotDotDotOperand occurs when a "..." operator is applied to a
	// single-valued operand.
	//
	// Example:
	//  func printArgs(args ...int) {
	//  	for _, a := range args {
	//  		println(a)
	//  	}
	//  }
	//
	//  func f() {
	//  	a := 1
	//  	printArgs(a...)
	//  }
	//
	// Example:
	//  func args() (int, int) {
	//  	return 1, 2
	//  }
	//
	//  func printArgs(args ...int) {
	//  	for _, a := range args {
	//  		println(a)
	//  	}
	//  }
	//
	//  func g() {
	//  	printArgs(args()...)
	//  }
	InvalidDotDotDotOperand

	// InvalidDotDotDot occurs when a "..." is used in a non-variadic built-in
	// function.
	//
	// Example:
	//  var s = []int{1, 2, 3}
	//  var l = len(s...)
	InvalidDotDotDot

	/* exprs > built-in */

	// UncalledBuiltin occurs when a built-in function is used as a
	// function-valued expression, instead of being called.
	//
	// Per the spec:
	//  "The built-in functions do not have standard Go types, so they can only
	//  appear in call expressions; they cannot be used as function values."
	//
	// Example:
	//  var _ = copy
	UncalledBuiltin

	// InvalidAppend occurs when append is called with a first argument that is
	// not a slice.
	//
	// Example:
	//  var _ = append(1, 2)
	InvalidAppend

	// InvalidCap occurs when an argument to the cap built-in function is not of
	// supported type.
	//
	// See https://golang.org/ref/spec#Lengthand_capacity for information on
	// which underlying types are supported as arguments to cap and len.
	//
	// Example:
	//  var s = 2
	//  var x = cap(s)
	InvalidCap

	// InvalidClose occurs when close(...) is called with an argument that is
	// not of channel type, or that is a receive-only channel.
	//
	// Example:
	//  func f() {
	//  	var x int
	//  	close(x)
	//  }
	InvalidClose

	// InvalidCopy occurs when the arguments are not of slice type or do not
	// have compatible type.
	//
	// See https://golang.org/ref/spec#Appendingand_copying_slices for more
	// information on the type requirements for the copy built-in.
	//
	// Example:
	//  func f() {
	//  	var x []int
	//  	y := []int64{1,2,3}
	//  	copy(x, y)
	//  }
	InvalidCopy

	// InvalidComplex occurs when the complex built-in function is called with
	// arguments with incompatible types.
	//
	// Example:
	//  var _ = complex(float32(1), float64(2))
	InvalidComplex

	// InvalidDelete occurs when the delete built-in function is called with a
	// first argument that is not a map.
	//
	// Example:
	//  func f() {
	//  	m := "hello"
	//  	delete(m, "e")
	//  }
	InvalidDelete

	// InvalidImag occurs when the imag built-in function is called with an
	// argument that does not have complex type.
	//
	// Example:
	//  var _ = imag(int(1))
	InvalidImag

	// InvalidLen occurs when an argument to the len built-in function is not of
	// supported type.
	//
	// See https://golang.org/ref/spec#Lengthand_capacity for information on
	// which underlying types are supported as arguments to cap and len.
	//
	// Example:
	//  var s = 2
	//  var x = len(s)
	InvalidLen

	// SwappedMakeArgs occurs when make is called with three arguments, and its
	// length argument is larger than its capacity argument.
	//
	// Example:
	//  var x = make([]int, 3, 2)
	SwappedMakeArgs

	// InvalidMake occurs when make is called with an unsupported type argument.
	//
	// See https://golang.org/ref/spec#Makingslices_maps_and_channels for
	// information on the types that may be created using make.
	//
	// Example:
	//  var x = make(int)
	InvalidMake

	// InvalidReal occurs when the real built-in function is called with an
	// argument that does not have complex type.
	//
	// Example:
	//  var _ = real(int(1))
	InvalidReal

	/* exprs > assertion */

	// InvalidAssert occurs when a type assertion is applied to a
	// value that is not of interface type.
	//
	// Example:
	//  var x = 1
	//  var _ = x.(float64)
	InvalidAssert

	// ImpossibleAssert occurs for a type assertion x.(T) when the value x of
	// interface cannot have dynamic type T, due to a missing or mismatching
	// method on T.
	//
	// Example:
	//  type T int
	//
	//  func (t *T) m() int { return int(*t) }
	//
	//  type I interface { m() int }
	//
	//  var x I
	//  var _ = x.(T)
	ImpossibleAssert

	/* exprs > conversion */

	// InvalidConversion occurs when the argument type cannot be converted to the
	// target.
	//
	// See https://golang.org/ref/spec#Conversions for the rules of
	// convertibility.
	//
	// Example:
	//  var x float64
	//  var _ = string(x)
	InvalidConversion

	// InvalidUntypedConversion occurs when an there is no valid implicit
	// conversion from an untyped value satisfying the type constraints of the
	// context in which it is used.
	//
	// Example:
	//  var _ = 1 + ""
	InvalidUntypedConversion

	/* offsetof */

	// BadOffsetofSyntax occurs when unsafe.Offsetof is called with an argument
	// that is not a selector expression.
	//
	// Example:
	//  import "unsafe"
	//
	//  var x int
	//  var _ = unsafe.Offsetof(x)
	BadOffsetofSyntax

	// InvalidOffsetof occurs when unsafe.Offsetof is called with a method
	// selector, rather than a field selector, or when the field is embedded via
	// a pointer.
	//
	// Per the spec:
	//
	//  "If f is an embedded field, it must be reachable without pointer
	//  indirections through fields of the struct. "
	//
	// Example:
	//  import "unsafe"
	//
	//  type T struct { f int }
	//  type S struct { *T }
	//  var s S
	//  var _ = unsafe.Offsetof(s.f)
	//
	// Example:
	//  import "unsafe"
	//
	//  type S struct{}
	//
	//  func (S) m() {}
	//
	//  var s S
	//  var _ = unsafe.Offsetof(s.m)
	InvalidOffsetof

	/* control flow > scope */

	// UnusedExpr occurs when a side-effect free expression is used as a
	// statement. Such a statement has no effect.
	//
	// Example:
	//  func f(i int) {
	//  	i*i
	//  }
	UnusedExpr

	// UnusedVar occurs when a variable is declared but unused.
	//
	// Example:
	//  func f() {
	//  	x := 1
	//  }
	UnusedVar

	// MissingReturn occurs when a function with results is missing a return
	// statement.
	//
	// Example:
	//  func f() int {}
	MissingReturn

	// WrongResultCount occurs when a return statement returns an incorrect
	// number of values.
	//
	// Example:
	//  func ReturnOne() int {
	//  	return 1, 2
	//  }
	WrongResultCount

	// OutOfScopeResult occurs when the name of a value implicitly returned by
	// an empty return statement is shadowed in a nested scope.
	//
	// Example:
	//  func factor(n int) (i int) {
	//  	for i := 2; i < n; i++ {
	//  		if n%i == 0 {
	//  			return
	//  		}
	//  	}
	//  	return 0
	//  }
	OutOfScopeResult

	/* control flow > if */

	// InvalidCond occurs when an if condition is not a boolean expression.
	//
	// Example:
	//  func checkReturn(i int) {
	//  	if i {
	//  		panic("non-zero return")
	//  	}
	//  }
	InvalidCond

	/* control flow > for */

	// InvalidPostDecl occurs when there is a declaration in a for-loop post
	// statement.
	//
	// Example:
	//  func f() {
	//  	for i := 0; i < 10; j := 0 {}
	//  }
	InvalidPostDecl

	// InvalidChanRange occurs when a send-only channel used in a range
	// expression.
	//
	// Example:
	//  func sum(c chan<- int) {
	//  	s := 0
	//  	for i := range c {
	//  		s += i
	//  	}
	//  }
	InvalidChanRange

	// InvalidIterVar occurs when two iteration variables are used while ranging
	// over a channel.
	//
	// Example:
	//  func f(c chan int) {
	//  	for k, v := range c {
	//  		println(k, v)
	//  	}
	//  }
	InvalidIterVar

	// InvalidRangeExpr occurs when the type of a range expression is not array,
	// slice, string, map, or channel.
	//
	// Example:
	//  func f(i int) {
	//  	for j := range i {
	//  		println(j)
	//  	}
	//  }
	InvalidRangeExpr

	/* control flow > switch */

	// MisplacedBreak occurs when a break statement is not within a for, switch,
	// or select statement of the innermost function definition.
	//
	// Example:
	//  func f() {
	//  	break
	//  }
	MisplacedBreak

	// MisplacedContinue occurs when a continue statement is not within a for
	// loop of the innermost function definition.
	//
	// Example:
	//  func sumeven(n int) int {
	//  	proceed := func() {
	//  		continue
	//  	}
	//  	sum := 0
	//  	for i := 1; i <= n; i++ {
	//  		if i % 2 != 0 {
	//  			proceed()
	//  		}
	//  		sum += i
	//  	}
	//  	return sum
	//  }
	MisplacedContinue

	// MisplacedFallthrough occurs when a fallthrough statement is not within an
	// expression switch.
	//
	// Example:
	//  func typename(i interface{}) string {
	//  	switch i.(type) {
	//  	case int64:
	//  		fallthrough
	//  	case int:
	//  		return "int"
	//  	}
	//  	return "unsupported"
	//  }
	MisplacedFallthrough

	// DuplicateCase occurs when a type or expression switch has duplicate
	// cases.
	//
	// Example:
	//  func printInt(i int) {
	//  	switch i {
	//  	case 1:
	//  		println("one")
	//  	case 1:
	//  		println("One")
	//  	}
	//  }
	DuplicateCase

	// DuplicateDefault occurs when a type or expression switch has multiple
	// default clauses.
	//
	// Example:
	//  func printInt(i int) {
	//  	switch i {
	//  	case 1:
	//  		println("one")
	//  	default:
	//  		println("One")
	//  	default:
	//  		println("1")
	//  	}
	//  }
	DuplicateDefault

	// BadTypeKeyword occurs when a .(type) expression is used anywhere other
	// than a type switch.
	//
	// Example:
	//  type I interface {
	//  	m()
	//  }
	//  var t I
	//  var _ = t.(type)
	BadTypeKeyword

	// InvalidTypeSwitch occurs when .(type) is used on an expression that is
	// not of interface type.
	//
	// Example:
	//  func f(i int) {
	//  	switch x := i.(type) {}
	//  }
	InvalidTypeSwitch

	// InvalidExprSwitch occurs when a switch expression is not comparable.
	//
	// Example:
	//  func _() {
	//  	var a struct{ _ func() }
	//  	switch a /* ERROR cannot switch on a */ {
	//  	}
	//  }
	InvalidExprSwitch

	/* control flow > select */

	// InvalidSelectCase occurs when a select case is not a channel send or
	// receive.
	//
	// Example:
	//  func checkChan(c <-chan int) bool {
	//  	select {
	//  	case c:
	//  		return true
	//  	default:
	//  		return false
	//  	}
	//  }
	InvalidSelectCase

	/* control flow > labels and jumps */

	// UndeclaredLabel occurs when an undeclared label is jumped to.
	//
	// Example:
	//  func f() {
	//  	goto L
	//  }
	UndeclaredLabel

	// DuplicateLabel occurs when a label is declared more than once.
	//
	// Example:
	//  func f() int {
	//  L:
	//  L:
	//  	return 1
	//  }
	DuplicateLabel

	// MisplacedLabel occurs when a break or continue label is not on a for,
	// switch, or select statement.
	//
	// Example:
	//  func f() {
	//  L:
	//  	a := []int{1,2,3}
	//  	for _, e := range a {
	//  		if e > 10 {
	//  			break L
	//  		}
	//  		println(a)
	//  	}
	//  }
	MisplacedLabel

	// UnusedLabel occurs when a label is declared but not used.
	//
	// Example:
	//  func f() {
	//  L:
	//  }
	UnusedLabel

	// JumpOverDecl occurs when a label jumps over a variable declaration.
	//
	// Example:
	//  func f() int {
	//  	goto L
	//  	x := 2
	//  L:
	//  	x++
	//  	return x
	//  }
	JumpOverDecl

	// JumpIntoBlock occurs when a forward jump goes to a label inside a nested
	// block.
	//
	// Example:
	//  func f(x int) {
	//  	goto L
	//  	if x > 0 {
	//  	L:
	//  		print("inside block")
	//  	}
	// }
	JumpIntoBlock

	/* control flow > calls */

	// InvalidMethodExpr occurs when a pointer method is called but the argument
	// is not addressable.
	//
	// Example:
	//  type T struct {}
	//
	//  func (*T) m() int { return 1 }
	//
	//  var _ = T.m(T{})
	InvalidMethodExpr

	// WrongArgCount occurs when too few or too many arguments are passed by a
	// function call.
	//
	// Example:
	//  func f(i int) {}
	//  var x = f()
	WrongArgCount

	// InvalidCall occurs when an expression is called that is not of function
	// type.
	//
	// Example:
	//  var x = "x"
	//  var y = x()
	InvalidCall

	/* control flow > suspended */

	// UnusedResults occurs when a restricted expression-only built-in function
	// is suspended via go or defer. Such a suspension discards the results of
	// these side-effect free built-in functions, and therefore is ineffectual.
	//
	// Example:
	//  func f(a []int) int {
	//  	defer len(a)
	//  	return i
	//  }
	UnusedResults

	// InvalidDefer occurs when a deferred expression is not a function call,
	// for example if the expression is a type conversion.
	//
	// Example:
	//  func f(i int) int {
	//  	defer int32(i)
	//  	return i
	//  }
	InvalidDefer

	// InvalidGo occurs when a go expression is not a function call, for example
	// if the expression is a type conversion.
	//
	// Example:
	//  func f(i int) int {
	//  	go int32(i)
	//  	return i
	//  }
	InvalidGo

	// All codes below were added in Go 1.17.

	/* decl */

	// BadDecl occurs when a declaration has invalid syntax.
	BadDecl

	// RepeatedDecl occurs when an identifier occurs more than once on the left
	// hand side of a short variable declaration.
	//
	// Example:
	//  func _() {
	//  	x, y, y := 1, 2, 3
	//  }
	RepeatedDecl

	/* unsafe */

	// InvalidUnsafeAdd occurs when unsafe.Add is called with a
	// length argument that is not of integer type.
	//
	// Example:
	//  import "unsafe"
	//
	//  var p unsafe.Pointer
	//  var _ = unsafe.Add(p, float64(1))
	InvalidUnsafeAdd

	// InvalidUnsafeSlice occurs when unsafe.Slice is called with a
	// pointer argument that is not of pointer type or a length argument
	// that is not of integer type, negative, or out of bounds.
	//
	// Example:
	//  import "unsafe"
	//
	//  var x int
	//  var _ = unsafe.Slice(x, 1)
	//
	// Example:
	//  import "unsafe"
	//
	//  var x int
	//  var _ = unsafe.Slice(&x, float64(1))
	//
	// Example:
	//  import "unsafe"
	//
	//  var x int
	//  var _ = unsafe.Slice(&x, -1)
	//
	// Example:
	//  import "unsafe"
	//
	//  var x int
	//  var _ = unsafe.Slice(&x, uint64(1) << 63)
	InvalidUnsafeSlice

	// All codes below were added in Go 1.18.

	/* features */

	// UnsupportedFeature occurs when a language feature is used that is not
	// supported at this Go version.
	UnsupportedFeature

	/* type params */

	// NotAGenericType occurs when a non-generic type is used where a generic
	// type is expected: in type or function instantiation.
	//
	// Example:
	//  type T int
	//
	//  var _ T[int]
	NotAGenericType

	// WrongTypeArgCount occurs when a type or function is instantiated with an
	// incorrent number of type arguments, including when a generic type or
	// function is used without instantiation.
	//
	// Errors inolving failed type inference are assigned other error codes.
	//
	// Example:
	//  type T[p any] int
	//
	//  var _ T[int, string]
	//
	// Example:
	//  func f[T any]() {}
	//
	//  var x = f
	WrongTypeArgCount

	// CannotInferTypeArgs occurs when type or function type argument inference
	// fails to infer all type arguments.
	//
	// Example:
	//  func f[T any]() {}
	//
	//  func _() {
	//  	f()
	//  }
	//
	// Example:
	//   type N[P, Q any] struct{}
	//
	//   var _ N[int]
	CannotInferTypeArgs

	// InvalidTypeArg occurs when a type argument does not satisfy its
	// corresponding type parameter constraints.
	//
	// Example:
	//  type T[P ~int] struct{}
	//
	//  var _ T[string]
	InvalidTypeArg // arguments? InferenceFailed

	// InvalidInstanceCycle occurs when an invalid cycle is detected
	// within the instantiation graph.
	//
	// Example:
	//  func f[T any]() { f[*T]() }
	InvalidInstanceCycle

	// InvalidUnion occurs when an embedded union or approximation element is
	// not valid.
	//
	// Example:
	//  type _ interface {
	//   	~int | interface{ m() }
	//  }
	InvalidUnion

	// MisplacedConstraintIface occurs when a constraint-type interface is used
	// outside of constraint position.
	//
	// Example:
	//   type I interface { ~int }
	//
	//   var _ I
	MisplacedConstraintIface

	// InvalidMethodTypeParams occurs when methods have type parameters.
	//
	// It cannot be encountered with an AST parsed using go/parser.
	InvalidMethodTypeParams

	// MisplacedTypeParam occurs when a type parameter is used in a place where
	// it is not permitted.
	//
	// Example:
	//  type T[P any] P
	//
	// Example:
	//  type T[P any] struct{ *P }
	MisplacedTypeParam

	// InvalidUnsafeSliceData occurs when unsafe.SliceData is called with
	// an argument that is not of slice type. It also occurs if it is used
	// in a package compiled for a language version before go1.20.
	//
	// Example:
	//  import "unsafe"
	//
	//  var x int
	//  var _ = unsafe.SliceData(x)
	InvalidUnsafeSliceData

	// InvalidUnsafeString occurs when unsafe.String is called with
	// a length argument that is not of integer type, negative, or
	// out of bounds. It also occurs if it is used in a package
	// compiled for a language version before go1.20.
	//
	// Example:
	//  import "unsafe"
	//
	//  var b [10]byte
	//  var _ = unsafe.String(&b[0], -1)
	InvalidUnsafeString

	// InvalidUnsafeStringData occurs if it is used in a package
	// compiled for a language version before go1.20.
	_ // not used anymore

)
07070100000FA0000081A4000000000000000000000001645E367C00001DF0000000000000000000000000000000000000005900000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/typesinternal/errorcode_string.go  // Code generated by "stringer -type=ErrorCode"; DO NOT EDIT.

package typesinternal

import "strconv"

func _() {
	// An "invalid array index" compiler error signifies that the constant values have changed.
	// Re-run the stringer command to generate them again.
	var x [1]struct{}
	_ = x[InvalidSyntaxTree - -1]
	_ = x[Test-1]
	_ = x[BlankPkgName-2]
	_ = x[MismatchedPkgName-3]
	_ = x[InvalidPkgUse-4]
	_ = x[BadImportPath-5]
	_ = x[BrokenImport-6]
	_ = x[ImportCRenamed-7]
	_ = x[UnusedImport-8]
	_ = x[InvalidInitCycle-9]
	_ = x[DuplicateDecl-10]
	_ = x[InvalidDeclCycle-11]
	_ = x[InvalidTypeCycle-12]
	_ = x[InvalidConstInit-13]
	_ = x[InvalidConstVal-14]
	_ = x[InvalidConstType-15]
	_ = x[UntypedNilUse-16]
	_ = x[WrongAssignCount-17]
	_ = x[UnassignableOperand-18]
	_ = x[NoNewVar-19]
	_ = x[MultiValAssignOp-20]
	_ = x[InvalidIfaceAssign-21]
	_ = x[InvalidChanAssign-22]
	_ = x[IncompatibleAssign-23]
	_ = x[UnaddressableFieldAssign-24]
	_ = x[NotAType-25]
	_ = x[InvalidArrayLen-26]
	_ = x[BlankIfaceMethod-27]
	_ = x[IncomparableMapKey-28]
	_ = x[InvalidIfaceEmbed-29]
	_ = x[InvalidPtrEmbed-30]
	_ = x[BadRecv-31]
	_ = x[InvalidRecv-32]
	_ = x[DuplicateFieldAndMethod-33]
	_ = x[DuplicateMethod-34]
	_ = x[InvalidBlank-35]
	_ = x[InvalidIota-36]
	_ = x[MissingInitBody-37]
	_ = x[InvalidInitSig-38]
	_ = x[InvalidInitDecl-39]
	_ = x[InvalidMainDecl-40]
	_ = x[TooManyValues-41]
	_ = x[NotAnExpr-42]
	_ = x[TruncatedFloat-43]
	_ = x[NumericOverflow-44]
	_ = x[UndefinedOp-45]
	_ = x[MismatchedTypes-46]
	_ = x[DivByZero-47]
	_ = x[NonNumericIncDec-48]
	_ = x[UnaddressableOperand-49]
	_ = x[InvalidIndirection-50]
	_ = x[NonIndexableOperand-51]
	_ = x[InvalidIndex-52]
	_ = x[SwappedSliceIndices-53]
	_ = x[NonSliceableOperand-54]
	_ = x[InvalidSliceExpr-55]
	_ = x[InvalidShiftCount-56]
	_ = x[InvalidShiftOperand-57]
	_ = x[InvalidReceive-58]
	_ = x[InvalidSend-59]
	_ = x[DuplicateLitKey-60]
	_ = x[MissingLitKey-61]
	_ = x[InvalidLitIndex-62]
	_ = x[OversizeArrayLit-63]
	_ = x[MixedStructLit-64]
	_ = x[InvalidStructLit-65]
	_ = x[MissingLitField-66]
	_ = x[DuplicateLitField-67]
	_ = x[UnexportedLitField-68]
	_ = x[InvalidLitField-69]
	_ = x[UntypedLit-70]
	_ = x[InvalidLit-71]
	_ = x[AmbiguousSelector-72]
	_ = x[UndeclaredImportedName-73]
	_ = x[UnexportedName-74]
	_ = x[UndeclaredName-75]
	_ = x[MissingFieldOrMethod-76]
	_ = x[BadDotDotDotSyntax-77]
	_ = x[NonVariadicDotDotDot-78]
	_ = x[MisplacedDotDotDot-79]
	_ = x[InvalidDotDotDotOperand-80]
	_ = x[InvalidDotDotDot-81]
	_ = x[UncalledBuiltin-82]
	_ = x[InvalidAppend-83]
	_ = x[InvalidCap-84]
	_ = x[InvalidClose-85]
	_ = x[InvalidCopy-86]
	_ = x[InvalidComplex-87]
	_ = x[InvalidDelete-88]
	_ = x[InvalidImag-89]
	_ = x[InvalidLen-90]
	_ = x[SwappedMakeArgs-91]
	_ = x[InvalidMake-92]
	_ = x[InvalidReal-93]
	_ = x[InvalidAssert-94]
	_ = x[ImpossibleAssert-95]
	_ = x[InvalidConversion-96]
	_ = x[InvalidUntypedConversion-97]
	_ = x[BadOffsetofSyntax-98]
	_ = x[InvalidOffsetof-99]
	_ = x[UnusedExpr-100]
	_ = x[UnusedVar-101]
	_ = x[MissingReturn-102]
	_ = x[WrongResultCount-103]
	_ = x[OutOfScopeResult-104]
	_ = x[InvalidCond-105]
	_ = x[InvalidPostDecl-106]
	_ = x[InvalidChanRange-107]
	_ = x[InvalidIterVar-108]
	_ = x[InvalidRangeExpr-109]
	_ = x[MisplacedBreak-110]
	_ = x[MisplacedContinue-111]
	_ = x[MisplacedFallthrough-112]
	_ = x[DuplicateCase-113]
	_ = x[DuplicateDefault-114]
	_ = x[BadTypeKeyword-115]
	_ = x[InvalidTypeSwitch-116]
	_ = x[InvalidExprSwitch-117]
	_ = x[InvalidSelectCase-118]
	_ = x[UndeclaredLabel-119]
	_ = x[DuplicateLabel-120]
	_ = x[MisplacedLabel-121]
	_ = x[UnusedLabel-122]
	_ = x[JumpOverDecl-123]
	_ = x[JumpIntoBlock-124]
	_ = x[InvalidMethodExpr-125]
	_ = x[WrongArgCount-126]
	_ = x[InvalidCall-127]
	_ = x[UnusedResults-128]
	_ = x[InvalidDefer-129]
	_ = x[InvalidGo-130]
	_ = x[BadDecl-131]
	_ = x[RepeatedDecl-132]
	_ = x[InvalidUnsafeAdd-133]
	_ = x[InvalidUnsafeSlice-134]
	_ = x[UnsupportedFeature-135]
	_ = x[NotAGenericType-136]
	_ = x[WrongTypeArgCount-137]
	_ = x[CannotInferTypeArgs-138]
	_ = x[InvalidTypeArg-139]
	_ = x[InvalidInstanceCycle-140]
	_ = x[InvalidUnion-141]
	_ = x[MisplacedConstraintIface-142]
	_ = x[InvalidMethodTypeParams-143]
	_ = x[MisplacedTypeParam-144]
	_ = x[InvalidUnsafeSliceData-145]
	_ = x[InvalidUnsafeString-146]
}

const (
	_ErrorCode_name_0 = "InvalidSyntaxTree"
	_ErrorCode_name_1 = "TestBlankPkgNameMismatchedPkgNameInvalidPkgUseBadImportPathBrokenImportImportCRenamedUnusedImportInvalidInitCycleDuplicateDeclInvalidDeclCycleInvalidTypeCycleInvalidConstInitInvalidConstValInvalidConstTypeUntypedNilUseWrongAssignCountUnassignableOperandNoNewVarMultiValAssignOpInvalidIfaceAssignInvalidChanAssignIncompatibleAssignUnaddressableFieldAssignNotATypeInvalidArrayLenBlankIfaceMethodIncomparableMapKeyInvalidIfaceEmbedInvalidPtrEmbedBadRecvInvalidRecvDuplicateFieldAndMethodDuplicateMethodInvalidBlankInvalidIotaMissingInitBodyInvalidInitSigInvalidInitDeclInvalidMainDeclTooManyValuesNotAnExprTruncatedFloatNumericOverflowUndefinedOpMismatchedTypesDivByZeroNonNumericIncDecUnaddressableOperandInvalidIndirectionNonIndexableOperandInvalidIndexSwappedSliceIndicesNonSliceableOperandInvalidSliceExprInvalidShiftCountInvalidShiftOperandInvalidReceiveInvalidSendDuplicateLitKeyMissingLitKeyInvalidLitIndexOversizeArrayLitMixedStructLitInvalidStructLitMissingLitFieldDuplicateLitFieldUnexportedLitFieldInvalidLitFieldUntypedLitInvalidLitAmbiguousSelectorUndeclaredImportedNameUnexportedNameUndeclaredNameMissingFieldOrMethodBadDotDotDotSyntaxNonVariadicDotDotDotMisplacedDotDotDotInvalidDotDotDotOperandInvalidDotDotDotUncalledBuiltinInvalidAppendInvalidCapInvalidCloseInvalidCopyInvalidComplexInvalidDeleteInvalidImagInvalidLenSwappedMakeArgsInvalidMakeInvalidRealInvalidAssertImpossibleAssertInvalidConversionInvalidUntypedConversionBadOffsetofSyntaxInvalidOffsetofUnusedExprUnusedVarMissingReturnWrongResultCountOutOfScopeResultInvalidCondInvalidPostDeclInvalidChanRangeInvalidIterVarInvalidRangeExprMisplacedBreakMisplacedContinueMisplacedFallthroughDuplicateCaseDuplicateDefaultBadTypeKeywordInvalidTypeSwitchInvalidExprSwitchInvalidSelectCaseUndeclaredLabelDuplicateLabelMisplacedLabelUnusedLabelJumpOverDeclJumpIntoBlockInvalidMethodExprWrongArgCountInvalidCallUnusedResultsInvalidDeferInvalidGoBadDeclRepeatedDeclInvalidUnsafeAddInvalidUnsafeSliceUnsupportedFeatureNotAGenericTypeWrongTypeArgCountCannotInferTypeArgsInvalidTypeArgInvalidInstanceCycleInvalidUnionMisplacedConstraintIfaceInvalidMethodTypeParamsMisplacedTypeParamInvalidUnsafeSliceDataInvalidUnsafeString"
)

var (
	_ErrorCode_index_1 = [...]uint16{0, 4, 16, 33, 46, 59, 71, 85, 97, 113, 126, 142, 158, 174, 189, 205, 218, 234, 253, 261, 277, 295, 312, 330, 354, 362, 377, 393, 411, 428, 443, 450, 461, 484, 499, 511, 522, 537, 551, 566, 581, 594, 603, 617, 632, 643, 658, 667, 683, 703, 721, 740, 752, 771, 790, 806, 823, 842, 856, 867, 882, 895, 910, 926, 940, 956, 971, 988, 1006, 1021, 1031, 1041, 1058, 1080, 1094, 1108, 1128, 1146, 1166, 1184, 1207, 1223, 1238, 1251, 1261, 1273, 1284, 1298, 1311, 1322, 1332, 1347, 1358, 1369, 1382, 1398, 1415, 1439, 1456, 1471, 1481, 1490, 1503, 1519, 1535, 1546, 1561, 1577, 1591, 1607, 1621, 1638, 1658, 1671, 1687, 1701, 1718, 1735, 1752, 1767, 1781, 1795, 1806, 1818, 1831, 1848, 1861, 1872, 1885, 1897, 1906, 1913, 1925, 1941, 1959, 1977, 1992, 2009, 2028, 2042, 2062, 2074, 2098, 2121, 2139, 2161, 2180}
)

func (i ErrorCode) String() string {
	switch {
	case i == -1:
		return _ErrorCode_name_0
	case 1 <= i && i <= 146:
		i -= 1
		return _ErrorCode_name_1[_ErrorCode_index_1[i]:_ErrorCode_index_1[i+1]]
	default:
		return "ErrorCode(" + strconv.FormatInt(int64(i), 10) + ")"
	}
}
07070100000FA1000081A4000000000000000000000001645E367C00000757000000000000000000000000000000000000004E00000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/typesinternal/types.go // Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package typesinternal provides access to internal go/types APIs that are not
// yet exported.
package typesinternal

import (
	"go/token"
	"go/types"
	"reflect"
	"unsafe"

	"golang.org/x/tools/go/types/objectpath"
)

func SetUsesCgo(conf *types.Config) bool {
	v := reflect.ValueOf(conf).Elem()

	f := v.FieldByName("go115UsesCgo")
	if !f.IsValid() {
		f = v.FieldByName("UsesCgo")
		if !f.IsValid() {
			return false
		}
	}

	addr := unsafe.Pointer(f.UnsafeAddr())
	*(*bool)(addr) = true

	return true
}

// ReadGo116ErrorData extracts additional information from types.Error values
// generated by Go version 1.16 and later: the error code, start position, and
// end position. If all positions are valid, start <= err.Pos <= end.
//
// If the data could not be read, the final result parameter will be false.
func ReadGo116ErrorData(err types.Error) (code ErrorCode, start, end token.Pos, ok bool) {
	var data [3]int
	// By coincidence all of these fields are ints, which simplifies things.
	v := reflect.ValueOf(err)
	for i, name := range []string{"go116code", "go116start", "go116end"} {
		f := v.FieldByName(name)
		if !f.IsValid() {
			return 0, 0, 0, false
		}
		data[i] = int(f.Int())
	}
	return ErrorCode(data[0]), token.Pos(data[1]), token.Pos(data[2]), true
}

var SetGoVersion = func(conf *types.Config, version string) bool { return false }

// NewObjectpathEncoder returns a function closure equivalent to
// objectpath.For but amortized for multiple (sequential) calls.
// It is a temporary workaround, pending the approval of proposal 58668.
//
//go:linkname NewObjectpathFunc golang.org/x/tools/go/types/objectpath.newEncoderFor
func NewObjectpathFunc() func(types.Object) (objectpath.Path, error)
 07070100000FA2000081A4000000000000000000000001645E367C0000016F000000000000000000000000000000000000005200000000elemental-cli-0.3.1/vendor/golang.org/x/tools/internal/typesinternal/types_118.go // Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build go1.18
// +build go1.18

package typesinternal

import (
	"go/types"
)

func init() {
	SetGoVersion = func(conf *types.Config, version string) bool {
		conf.GoVersion = version
		return true
	}
}
 07070100000FA3000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000003000000000elemental-cli-0.3.1/vendor/golang.org/x/xerrors   07070100000FA4000081A4000000000000000000000001645E367C000005C7000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/golang.org/x/xerrors/LICENSE   Copyright (c) 2019 The Go Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 07070100000FA5000081A4000000000000000000000001645E367C00000517000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/golang.org/x/xerrors/PATENTS   Additional IP Rights Grant (Patents)

"This implementation" means the copyrightable works distributed by
Google as part of the Go project.

Google hereby grants to You a perpetual, worldwide, non-exclusive,
no-charge, royalty-free, irrevocable (except as stated in this section)
patent license to make, have made, use, offer to sell, sell, import,
transfer and otherwise run, modify and propagate the contents of this
implementation of Go, where such license applies only to those patent
claims, both currently owned or controlled by Google and acquired in
the future, licensable by Google that are necessarily infringed by this
implementation of Go.  This grant does not include claims that would be
infringed only as a consequence of further modification of this
implementation.  If you or your agent or exclusive licensee institute or
order or agree to the institution of patent litigation against any
entity (including a cross-claim or counterclaim in a lawsuit) alleging
that this implementation of Go or any code incorporated within this
implementation of Go constitutes direct or contributory patent
infringement, or inducement of patent infringement, then any patent
rights granted to you under this License for this implementation of Go
shall terminate as of the date such litigation is filed.
 07070100000FA6000081A4000000000000000000000001645E367C0000007A000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/golang.org/x/xerrors/README    This repository holds the transition packages for the new Go 1.13 error values.
See golang.org/design/29934-error-values.
  07070100000FA7000081A4000000000000000000000001645E367C00001022000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/golang.org/x/xerrors/adaptor.go    // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package xerrors

import (
	"bytes"
	"fmt"
	"io"
	"reflect"
	"strconv"
)

// FormatError calls the FormatError method of f with an errors.Printer
// configured according to s and verb, and writes the result to s.
func FormatError(f Formatter, s fmt.State, verb rune) {
	// Assuming this function is only called from the Format method, and given
	// that FormatError takes precedence over Format, it cannot be called from
	// any package that supports errors.Formatter. It is therefore safe to
	// disregard that State may be a specific printer implementation and use one
	// of our choice instead.

	// limitations: does not support printing error as Go struct.

	var (
		sep    = " " // separator before next error
		p      = &state{State: s}
		direct = true
	)

	var err error = f

	switch verb {
	// Note that this switch must match the preference order
	// for ordinary string printing (%#v before %+v, and so on).

	case 'v':
		if s.Flag('#') {
			if stringer, ok := err.(fmt.GoStringer); ok {
				io.WriteString(&p.buf, stringer.GoString())
				goto exit
			}
			// proceed as if it were %v
		} else if s.Flag('+') {
			p.printDetail = true
			sep = "\n  - "
		}
	case 's':
	case 'q', 'x', 'X':
		// Use an intermediate buffer in the rare cases that precision,
		// truncation, or one of the alternative verbs (q, x, and X) are
		// specified.
		direct = false

	default:
		p.buf.WriteString("%!")
		p.buf.WriteRune(verb)
		p.buf.WriteByte('(')
		switch {
		case err != nil:
			p.buf.WriteString(reflect.TypeOf(f).String())
		default:
			p.buf.WriteString("<nil>")
		}
		p.buf.WriteByte(')')
		io.Copy(s, &p.buf)
		return
	}

loop:
	for {
		switch v := err.(type) {
		case Formatter:
			err = v.FormatError((*printer)(p))
		case fmt.Formatter:
			v.Format(p, 'v')
			break loop
		default:
			io.WriteString(&p.buf, v.Error())
			break loop
		}
		if err == nil {
			break
		}
		if p.needColon || !p.printDetail {
			p.buf.WriteByte(':')
			p.needColon = false
		}
		p.buf.WriteString(sep)
		p.inDetail = false
		p.needNewline = false
	}

exit:
	width, okW := s.Width()
	prec, okP := s.Precision()

	if !direct || (okW && width > 0) || okP {
		// Construct format string from State s.
		format := []byte{'%'}
		if s.Flag('-') {
			format = append(format, '-')
		}
		if s.Flag('+') {
			format = append(format, '+')
		}
		if s.Flag(' ') {
			format = append(format, ' ')
		}
		if okW {
			format = strconv.AppendInt(format, int64(width), 10)
		}
		if okP {
			format = append(format, '.')
			format = strconv.AppendInt(format, int64(prec), 10)
		}
		format = append(format, string(verb)...)
		fmt.Fprintf(s, string(format), p.buf.String())
	} else {
		io.Copy(s, &p.buf)
	}
}

var detailSep = []byte("\n    ")

// state tracks error printing state. It implements fmt.State.
type state struct {
	fmt.State
	buf bytes.Buffer

	printDetail bool
	inDetail    bool
	needColon   bool
	needNewline bool
}

func (s *state) Write(b []byte) (n int, err error) {
	if s.printDetail {
		if len(b) == 0 {
			return 0, nil
		}
		if s.inDetail && s.needColon {
			s.needNewline = true
			if b[0] == '\n' {
				b = b[1:]
			}
		}
		k := 0
		for i, c := range b {
			if s.needNewline {
				if s.inDetail && s.needColon {
					s.buf.WriteByte(':')
					s.needColon = false
				}
				s.buf.Write(detailSep)
				s.needNewline = false
			}
			if c == '\n' {
				s.buf.Write(b[k:i])
				k = i + 1
				s.needNewline = true
			}
		}
		s.buf.Write(b[k:])
		if !s.inDetail {
			s.needColon = true
		}
	} else if !s.inDetail {
		s.buf.Write(b)
	}
	return len(b), nil
}

// printer wraps a state to implement an xerrors.Printer.
type printer state

func (s *printer) Print(args ...interface{}) {
	if !s.inDetail || s.printDetail {
		fmt.Fprint((*state)(s), args...)
	}
}

func (s *printer) Printf(format string, args ...interface{}) {
	if !s.inDetail || s.printDetail {
		fmt.Fprintf((*state)(s), format, args...)
	}
}

func (s *printer) Detail() bool {
	s.inDetail = true
	return s.printDetail
}
  07070100000FA8000081A4000000000000000000000001645E367C00000015000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/golang.org/x/xerrors/codereview.cfg    issuerepo: golang/go
   07070100000FA9000081A4000000000000000000000001645E367C00000311000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/golang.org/x/xerrors/doc.go    // Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package xerrors implements functions to manipulate errors.
//
// This package is based on the Go 2 proposal for error values:
//
//	https://golang.org/design/29934-error-values
//
// These functions were incorporated into the standard library's errors package
// in Go 1.13:
// - Is
// - As
// - Unwrap
//
// Also, Errorf's %w verb was incorporated into fmt.Errorf.
//
// Use this package to get equivalent behavior in all supported Go versions.
//
// No other features of this package were included in Go 1.13, and at present
// there are no plans to include any of them.
package xerrors // import "golang.org/x/xerrors"
   07070100000FAA000081A4000000000000000000000001645E367C0000032F000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/golang.org/x/xerrors/errors.go // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package xerrors

import "fmt"

// errorString is a trivial implementation of error.
type errorString struct {
	s     string
	frame Frame
}

// New returns an error that formats as the given text.
//
// The returned error contains a Frame set to the caller's location and
// implements Formatter to show this information when printed with details.
func New(text string) error {
	return &errorString{text, Caller(1)}
}

func (e *errorString) Error() string {
	return e.s
}

func (e *errorString) Format(s fmt.State, v rune) { FormatError(e, s, v) }

func (e *errorString) FormatError(p Printer) (next error) {
	p.Print(e.s)
	e.frame.Format(p)
	return nil
}
 07070100000FAB000081A4000000000000000000000001645E367C0000148E000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/golang.org/x/xerrors/fmt.go    // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package xerrors

import (
	"fmt"
	"strings"
	"unicode"
	"unicode/utf8"

	"golang.org/x/xerrors/internal"
)

const percentBangString = "%!"

// Errorf formats according to a format specifier and returns the string as a
// value that satisfies error.
//
// The returned error includes the file and line number of the caller when
// formatted with additional detail enabled. If the last argument is an error
// the returned error's Format method will return it if the format string ends
// with ": %s", ": %v", or ": %w". If the last argument is an error and the
// format string ends with ": %w", the returned error implements an Unwrap
// method returning it.
//
// If the format specifier includes a %w verb with an error operand in a
// position other than at the end, the returned error will still implement an
// Unwrap method returning the operand, but the error's Format method will not
// return the wrapped error.
//
// It is invalid to include more than one %w verb or to supply it with an
// operand that does not implement the error interface. The %w verb is otherwise
// a synonym for %v.
//
// Note that as of Go 1.13, the fmt.Errorf function will do error formatting,
// but it will not capture a stack backtrace.
func Errorf(format string, a ...interface{}) error {
	format = formatPlusW(format)
	// Support a ": %[wsv]" suffix, which works well with xerrors.Formatter.
	wrap := strings.HasSuffix(format, ": %w")
	idx, format2, ok := parsePercentW(format)
	percentWElsewhere := !wrap && idx >= 0
	if !percentWElsewhere && (wrap || strings.HasSuffix(format, ": %s") || strings.HasSuffix(format, ": %v")) {
		err := errorAt(a, len(a)-1)
		if err == nil {
			return &noWrapError{fmt.Sprintf(format, a...), nil, Caller(1)}
		}
		// TODO: this is not entirely correct. The error value could be
		// printed elsewhere in format if it mixes numbered with unnumbered
		// substitutions. With relatively small changes to doPrintf we can
		// have it optionally ignore extra arguments and pass the argument
		// list in its entirety.
		msg := fmt.Sprintf(format[:len(format)-len(": %s")], a[:len(a)-1]...)
		frame := Frame{}
		if internal.EnableTrace {
			frame = Caller(1)
		}
		if wrap {
			return &wrapError{msg, err, frame}
		}
		return &noWrapError{msg, err, frame}
	}
	// Support %w anywhere.
	// TODO: don't repeat the wrapped error's message when %w occurs in the middle.
	msg := fmt.Sprintf(format2, a...)
	if idx < 0 {
		return &noWrapError{msg, nil, Caller(1)}
	}
	err := errorAt(a, idx)
	if !ok || err == nil {
		// Too many %ws or argument of %w is not an error. Approximate the Go
		// 1.13 fmt.Errorf message.
		return &noWrapError{fmt.Sprintf("%sw(%s)", percentBangString, msg), nil, Caller(1)}
	}
	frame := Frame{}
	if internal.EnableTrace {
		frame = Caller(1)
	}
	return &wrapError{msg, err, frame}
}

func errorAt(args []interface{}, i int) error {
	if i < 0 || i >= len(args) {
		return nil
	}
	err, ok := args[i].(error)
	if !ok {
		return nil
	}
	return err
}

// formatPlusW is used to avoid the vet check that will barf at %w.
func formatPlusW(s string) string {
	return s
}

// Return the index of the only %w in format, or -1 if none.
// Also return a rewritten format string with %w replaced by %v, and
// false if there is more than one %w.
// TODO: handle "%[N]w".
func parsePercentW(format string) (idx int, newFormat string, ok bool) {
	// Loosely copied from golang.org/x/tools/go/analysis/passes/printf/printf.go.
	idx = -1
	ok = true
	n := 0
	sz := 0
	var isW bool
	for i := 0; i < len(format); i += sz {
		if format[i] != '%' {
			sz = 1
			continue
		}
		// "%%" is not a format directive.
		if i+1 < len(format) && format[i+1] == '%' {
			sz = 2
			continue
		}
		sz, isW = parsePrintfVerb(format[i:])
		if isW {
			if idx >= 0 {
				ok = false
			} else {
				idx = n
			}
			// "Replace" the last character, the 'w', with a 'v'.
			p := i + sz - 1
			format = format[:p] + "v" + format[p+1:]
		}
		n++
	}
	return idx, format, ok
}

// Parse the printf verb starting with a % at s[0].
// Return how many bytes it occupies and whether the verb is 'w'.
func parsePrintfVerb(s string) (int, bool) {
	// Assume only that the directive is a sequence of non-letters followed by a single letter.
	sz := 0
	var r rune
	for i := 1; i < len(s); i += sz {
		r, sz = utf8.DecodeRuneInString(s[i:])
		if unicode.IsLetter(r) {
			return i + sz, r == 'w'
		}
	}
	return len(s), false
}

type noWrapError struct {
	msg   string
	err   error
	frame Frame
}

func (e *noWrapError) Error() string {
	return fmt.Sprint(e)
}

func (e *noWrapError) Format(s fmt.State, v rune) { FormatError(e, s, v) }

func (e *noWrapError) FormatError(p Printer) (next error) {
	p.Print(e.msg)
	e.frame.Format(p)
	return e.err
}

type wrapError struct {
	msg   string
	err   error
	frame Frame
}

func (e *wrapError) Error() string {
	return fmt.Sprint(e)
}

func (e *wrapError) Format(s fmt.State, v rune) { FormatError(e, s, v) }

func (e *wrapError) FormatError(p Printer) (next error) {
	p.Print(e.msg)
	e.frame.Format(p)
	return e.err
}

func (e *wrapError) Unwrap() error {
	return e.err
}
  07070100000FAC000081A4000000000000000000000001645E367C0000047C000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/golang.org/x/xerrors/format.go // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package xerrors

// A Formatter formats error messages.
type Formatter interface {
	error

	// FormatError prints the receiver's first error and returns the next error in
	// the error chain, if any.
	FormatError(p Printer) (next error)
}

// A Printer formats error messages.
//
// The most common implementation of Printer is the one provided by package fmt
// during Printf (as of Go 1.13). Localization packages such as golang.org/x/text/message
// typically provide their own implementations.
type Printer interface {
	// Print appends args to the message output.
	Print(args ...interface{})

	// Printf writes a formatted string.
	Printf(format string, args ...interface{})

	// Detail reports whether error detail is requested.
	// After the first call to Detail, all text written to the Printer
	// is formatted as additional detail, or ignored when
	// detail has not been requested.
	// If Detail returns false, the caller can avoid printing the detail at all.
	Detail() bool
}
07070100000FAD000081A4000000000000000000000001645E367C000005F3000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/golang.org/x/xerrors/frame.go  // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package xerrors

import (
	"runtime"
)

// A Frame contains part of a call stack.
type Frame struct {
	// Make room for three PCs: the one we were asked for, what it called,
	// and possibly a PC for skipPleaseUseCallersFrames. See:
	// https://go.googlesource.com/go/+/032678e0fb/src/runtime/extern.go#169
	frames [3]uintptr
}

// Caller returns a Frame that describes a frame on the caller's stack.
// The argument skip is the number of frames to skip over.
// Caller(0) returns the frame for the caller of Caller.
func Caller(skip int) Frame {
	var s Frame
	runtime.Callers(skip+1, s.frames[:])
	return s
}

// location reports the file, line, and function of a frame.
//
// The returned function may be "" even if file and line are not.
func (f Frame) location() (function, file string, line int) {
	frames := runtime.CallersFrames(f.frames[:])
	if _, ok := frames.Next(); !ok {
		return "", "", 0
	}
	fr, ok := frames.Next()
	if !ok {
		return "", "", 0
	}
	return fr.Function, fr.File, fr.Line
}

// Format prints the stack as error detail.
// It should be called from an error's Format implementation
// after printing any other error detail.
func (f Frame) Format(p Printer) {
	if p.Detail() {
		function, file, line := f.location()
		if function != "" {
			p.Printf("%s\n    ", function)
		}
		if file != "" {
			p.Printf("%s:%d\n", file, line)
		}
	}
}
 07070100000FAE000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/golang.org/x/xerrors/internal  07070100000FAF000081A4000000000000000000000001645E367C0000011A000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/golang.org/x/xerrors/internal/internal.go  // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package internal

// EnableTrace indicates whether stack information should be recorded in errors.
var EnableTrace = true
  07070100000FB0000081A4000000000000000000000001645E367C00000C96000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/golang.org/x/xerrors/wrap.go   // Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package xerrors

import (
	"reflect"
)

// A Wrapper provides context around another error.
type Wrapper interface {
	// Unwrap returns the next error in the error chain.
	// If there is no next error, Unwrap returns nil.
	Unwrap() error
}

// Opaque returns an error with the same error formatting as err
// but that does not match err and cannot be unwrapped.
func Opaque(err error) error {
	return noWrapper{err}
}

type noWrapper struct {
	error
}

func (e noWrapper) FormatError(p Printer) (next error) {
	if f, ok := e.error.(Formatter); ok {
		return f.FormatError(p)
	}
	p.Print(e.error)
	return nil
}

// Unwrap returns the result of calling the Unwrap method on err, if err implements
// Unwrap. Otherwise, Unwrap returns nil.
//
// Deprecated: As of Go 1.13, use errors.Unwrap instead.
func Unwrap(err error) error {
	u, ok := err.(Wrapper)
	if !ok {
		return nil
	}
	return u.Unwrap()
}

// Is reports whether any error in err's chain matches target.
//
// An error is considered to match a target if it is equal to that target or if
// it implements a method Is(error) bool such that Is(target) returns true.
//
// Deprecated: As of Go 1.13, use errors.Is instead.
func Is(err, target error) bool {
	if target == nil {
		return err == target
	}

	isComparable := reflect.TypeOf(target).Comparable()
	for {
		if isComparable && err == target {
			return true
		}
		if x, ok := err.(interface{ Is(error) bool }); ok && x.Is(target) {
			return true
		}
		// TODO: consider supporing target.Is(err). This would allow
		// user-definable predicates, but also may allow for coping with sloppy
		// APIs, thereby making it easier to get away with them.
		if err = Unwrap(err); err == nil {
			return false
		}
	}
}

// As finds the first error in err's chain that matches the type to which target
// points, and if so, sets the target to its value and returns true. An error
// matches a type if it is assignable to the target type, or if it has a method
// As(interface{}) bool such that As(target) returns true. As will panic if target
// is not a non-nil pointer to a type which implements error or is of interface type.
//
// The As method should set the target to its value and return true if err
// matches the type to which target points.
//
// Deprecated: As of Go 1.13, use errors.As instead.
func As(err error, target interface{}) bool {
	if target == nil {
		panic("errors: target cannot be nil")
	}
	val := reflect.ValueOf(target)
	typ := val.Type()
	if typ.Kind() != reflect.Ptr || val.IsNil() {
		panic("errors: target must be a non-nil pointer")
	}
	if e := typ.Elem(); e.Kind() != reflect.Interface && !e.Implements(errorType) {
		panic("errors: *target must be interface or implement error")
	}
	targetType := typ.Elem()
	for err != nil {
		if reflect.TypeOf(err).AssignableTo(targetType) {
			val.Elem().Set(reflect.ValueOf(err))
			return true
		}
		if x, ok := err.(interface{ As(interface{}) bool }); ok && x.As(target) {
			return true
		}
		err = Unwrap(err)
	}
	return false
}

var errorType = reflect.TypeOf((*error)(nil)).Elem()
  07070100000FB1000041ED000000000000000000000008645E367C00000000000000000000000000000000000000000000002400000000elemental-cli-0.3.1/vendor/gopkg.in   07070100000FB2000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/vendor/gopkg.in/djherbis  07070100000FB3000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/gopkg.in/djherbis/times.v1 07070100000FB4000081A4000000000000000000000001645E367C00000267000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/gopkg.in/djherbis/times.v1/.travis.sh  #!/bin/bash
set -e

script() {
    if [ "${TRAVIS_PULL_REQUEST}" == "false" ];
    then
        COVERALLS_PARALLEL=true

        if [ ! -z "$JS" ];
        then
            bash js.cover.sh
        else
            go test -covermode=count -coverprofile=profile.cov
        fi

        go get github.com/axw/gocov/gocov github.com/mattn/goveralls golang.org/x/tools/cmd/cover
        $HOME/gopath/bin/goveralls --coverprofile=profile.cov -service=travis-ci
    fi

    if [ -z "$JS" ];
    then
        go get golang.org/x/lint/golint && golint ./...
        go vet
        go test -bench=.* -v ./...
    fi
}

"$@" 07070100000FB5000081A4000000000000000000000001645E367C00000219000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/gopkg.in/djherbis/times.v1/.travis.yml language: go
matrix:
    include:
        - os: linux
          go: tip
        - os: linux
          go: tip
          env:
            - JS=1
        - os: osx
          go: tip
        - os: windows
          go: 1.x
#Added power jobs
        - os: linux
          go: tip
          arch: ppc64le
        - os: linux
          go: tip
          arch: ppc64le
          env:
            - JS=1
script: bash .travis.sh script
notifications:
  webhooks: https://coveralls.io/webhook
  email:
    on_success: never
    on_failure: change
   07070100000FB6000081A4000000000000000000000001645E367C00000434000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/gopkg.in/djherbis/times.v1/LICENSE The MIT License (MIT)

Copyright (c) 2015 Dustin H

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

07070100000FB7000081A4000000000000000000000001645E367C0000092B000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/gopkg.in/djherbis/times.v1/README.md   times 
==========

[![GoDoc](https://godoc.org/github.com/djherbis/times?status.svg)](https://godoc.org/github.com/djherbis/times)
[![Release](https://img.shields.io/github/release/djherbis/times.svg)](https://github.com/djherbis/times/releases/latest)
[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg)](LICENSE.txt)
[![Build Status](https://travis-ci.org/djherbis/times.svg?branch=master)](https://travis-ci.org/djherbis/times)
[![Coverage Status](https://coveralls.io/repos/djherbis/times/badge.svg?branch=master)](https://coveralls.io/r/djherbis/times?branch=master)
[![Go Report Card](https://goreportcard.com/badge/github.com/djherbis/times)](https://goreportcard.com/report/github.com/djherbis/times)
[![Sourcegraph](https://sourcegraph.com/github.com/djherbis/times/-/badge.svg)](https://sourcegraph.com/github.com/djherbis/times?badge)

Usage
------------
File Times for #golang

Go has a hidden time functions for most platforms, this repo makes them accessible.

```go
package main

import (
  "log"

  "gopkg.in/djherbis/times.v1"
)

func main() {
  t, err := times.Stat("myfile")
  if err != nil {
    log.Fatal(err.Error())
  }

  log.Println(t.AccessTime())
  log.Println(t.ModTime())

  if t.HasChangeTime() {
    log.Println(t.ChangeTime())
  }

  if t.HasBirthTime() {
    log.Println(t.BirthTime())
  }
}
```

Supported Times
------------
|  | windows | linux | solaris | dragonfly | nacl | freebsd | darwin | netbsd | openbsd | plan9 | js | aix |
|:-----:|:-------:|:-----:|:-------:|:---------:|:------:|:-------:|:----:|:------:|:-------:|:-----:|:-----:|:-----:|
| atime | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| mtime | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| ctime | ✓* | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |  | ✓ | ✓ |
| btime | ✓ |  |  |  |  | ✓ |  ✓| ✓ |  |  |

* Windows XP does not have ChangeTime so HasChangeTime = false, 
however Vista onward does have ChangeTime so Timespec.HasChangeTime() will 
only return false on those platforms when the syscall used to obtain them fails.
* Also note, Get(FileInfo) will now only return values available in FileInfo.Sys(), this means Stat() is required to get ChangeTime on Windows

Installation
------------
```sh
go get gopkg.in/djherbis/times.v1
```
 07070100000FB8000081A4000000000000000000000001645E367C00000D54000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/gopkg.in/djherbis/times.v1/ctime_windows.go    package times

import (
	"os"
	"syscall"
	"time"
	"unsafe"
)

// Stat returns the Timespec for the given filename.
func Stat(name string) (Timespec, error) {
	ts, err := platformSpecficStat(name)
	if err == nil {
		return ts, err
	}

	return stat(name, os.Stat)
}

// Lstat returns the Timespec for the given filename, and does not follow Symlinks.
func Lstat(name string) (Timespec, error) {
	ts, err := platformSpecficLstat(name)
	if err == nil {
		return ts, err
	}

	return stat(name, os.Lstat)
}

type timespecEx struct {
	atime
	mtime
	ctime
	btime
}

// StatFile finds a Windows Timespec with ChangeTime.
func StatFile(file *os.File) (Timespec, error) {
	return statFile(syscall.Handle(file.Fd()))
}

func statFile(h syscall.Handle) (Timespec, error) {
	var fileInfo fileBasicInfo
	if err := getFileInformationByHandleEx(h, &fileInfo); err != nil {
		return nil, err
	}

	var t timespecEx
	t.atime.v = time.Unix(0, fileInfo.LastAccessTime.Nanoseconds())
	t.mtime.v = time.Unix(0, fileInfo.LastWriteTime.Nanoseconds())
	t.ctime.v = time.Unix(0, fileInfo.ChangeTime.Nanoseconds())
	t.btime.v = time.Unix(0, fileInfo.CreationTime.Nanoseconds())
	return t, nil
}

func platformSpecficLstat(name string) (Timespec, error) {
	if findProcErr != nil {
		return nil, findProcErr
	}

	isSym, err := isSymlink(name)
	if err != nil {
		return nil, err
	}

	var attrs = uint32(syscall.FILE_FLAG_BACKUP_SEMANTICS)
	if isSym {
		attrs |= syscall.FILE_FLAG_OPEN_REPARSE_POINT
	}

	return openHandleAndStat(name, attrs)
}

func isSymlink(name string) (bool, error) {
	fi, err := os.Lstat(name)
	if err != nil {
		return false, err
	}
	return fi.Mode()&os.ModeSymlink != 0, nil
}

func platformSpecficStat(name string) (Timespec, error) {
	if findProcErr != nil {
		return nil, findProcErr
	}

	return openHandleAndStat(name, syscall.FILE_FLAG_BACKUP_SEMANTICS)
}

func openHandleAndStat(name string, attrs uint32) (Timespec, error) {
	pathp, e := syscall.UTF16PtrFromString(name)
	if e != nil {
		return nil, e
	}
	h, e := syscall.CreateFile(pathp,
		syscall.FILE_WRITE_ATTRIBUTES, syscall.FILE_SHARE_WRITE, nil,
		syscall.OPEN_EXISTING, attrs, 0)
	if e != nil {
		return nil, e
	}
	defer syscall.Close(h)

	return statFile(h)
}

var (
	findProcErr                      error
	procGetFileInformationByHandleEx *syscall.Proc
)

func init() {
	var modkernel32 *syscall.DLL
	if modkernel32, findProcErr = syscall.LoadDLL("kernel32.dll"); findProcErr == nil {
		procGetFileInformationByHandleEx, findProcErr = modkernel32.FindProc("GetFileInformationByHandleEx")
	}
}

// fileBasicInfo holds the C++ data for FileTimes.
//
// https://msdn.microsoft.com/en-us/library/windows/desktop/aa364217(v=vs.85).aspx
type fileBasicInfo struct {
	CreationTime   syscall.Filetime
	LastAccessTime syscall.Filetime
	LastWriteTime  syscall.Filetime
	ChangeTime     syscall.Filetime
	FileAttributes uint32
	_              uint32 // padding
}

type fileInformationClass int

const (
	fileBasicInfoClass fileInformationClass = iota
)

func getFileInformationByHandleEx(handle syscall.Handle, data *fileBasicInfo) (err error) {
	if findProcErr != nil {
		return findProcErr
	}

	r1, _, e1 := syscall.Syscall6(procGetFileInformationByHandleEx.Addr(), 4, uintptr(handle), uintptr(fileBasicInfoClass), uintptr(unsafe.Pointer(data)), unsafe.Sizeof(*data), 0, 0)
	if r1 == 0 {
		err = syscall.EINVAL
		if e1 != 0 {
			err = error(e1)
		}
	}
	return
}
07070100000FB9000081A4000000000000000000000001645E367C00000130000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/gopkg.in/djherbis/times.v1/js.cover.dockerfile FROM golang:1.16

RUN curl -sL https://deb.nodesource.com/setup_8.x | bash
RUN apt-get install --yes nodejs

WORKDIR /go/src/github.com/djherbis/times
COPY . .

RUN GO111MODULE=auto GOOS=js GOARCH=wasm go test -covermode=count -coverprofile=profile.cov -exec="$(go env GOROOT)/misc/wasm/go_js_wasm_exec"
07070100000FBA000081A4000000000000000000000001645E367C00000110000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/gopkg.in/djherbis/times.v1/js.cover.sh #!/bin/bash
set -e

docker build -f js.cover.dockerfile -t js.cover.djherbis.times .
docker create --name js.cover.djherbis.times js.cover.djherbis.times
docker cp js.cover.djherbis.times:/go/src/github.com/djherbis/times/profile.cov .
docker rm -v js.cover.djherbis.times07070100000FBB000081A4000000000000000000000001645E367C000005F6000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/gopkg.in/djherbis/times.v1/times.go    // Package times provides a platform-independent way to get atime, mtime, ctime and btime for files.
package times

import (
	"os"
	"time"
)

// Get returns the Timespec for the given FileInfo
func Get(fi os.FileInfo) Timespec {
	return getTimespec(fi)
}

type statFunc func(string) (os.FileInfo, error)

func stat(name string, sf statFunc) (Timespec, error) {
	fi, err := sf(name)
	if err != nil {
		return nil, err
	}
	return getTimespec(fi), nil
}

// Timespec provides access to file times.
// ChangeTime() panics unless HasChangeTime() is true and
// BirthTime() panics unless HasBirthTime() is true.
type Timespec interface {
	ModTime() time.Time
	AccessTime() time.Time
	ChangeTime() time.Time
	BirthTime() time.Time
	HasChangeTime() bool
	HasBirthTime() bool
}

type atime struct {
	v time.Time
}

func (a atime) AccessTime() time.Time { return a.v }

type ctime struct {
	v time.Time
}

func (ctime) HasChangeTime() bool { return true }

func (c ctime) ChangeTime() time.Time { return c.v }

type mtime struct {
	v time.Time
}

func (m mtime) ModTime() time.Time { return m.v }

type btime struct {
	v time.Time
}

func (btime) HasBirthTime() bool { return true }

func (b btime) BirthTime() time.Time { return b.v }

type noctime struct{}

func (noctime) HasChangeTime() bool { return false }

func (noctime) ChangeTime() time.Time { panic("ctime not available") }

type nobtime struct{}

func (nobtime) HasBirthTime() bool { return false }

func (nobtime) BirthTime() time.Time { panic("birthtime not available") }
  07070100000FBC000081A4000000000000000000000001645E367C0000030A000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/gopkg.in/djherbis/times.v1/times_aix.go    // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// https://golang.org/src/os/stat_aix.go

package times

import (
	"os"
	"syscall"
	"time"
)

// HasChangeTime and HasBirthTime are true if and only if
// the target OS supports them.
const (
	HasChangeTime = true
	HasBirthTime  = false
)

type timespec struct {
	atime
	mtime
	ctime
	nobtime
}

func timespecToTime(ts syscall.StTimespec_t) time.Time {
	return time.Unix(int64(ts.Sec), int64(ts.Nsec))
}

func getTimespec(fi os.FileInfo) (t timespec) {
	stat := fi.Sys().(*syscall.Stat_t)
	t.atime.v = timespecToTime(stat.Atim)
	t.mtime.v = timespecToTime(stat.Mtim)
	t.ctime.v = timespecToTime(stat.Ctim)
	return t
}
  07070100000FBD000081A4000000000000000000000001645E367C00000344000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/gopkg.in/djherbis/times.v1/times_darwin.go // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// http://golang.org/src/os/stat_darwin.go

package times

import (
	"os"
	"syscall"
	"time"
)

// HasChangeTime and HasBirthTime are true if and only if
// the target OS supports them.
const (
	HasChangeTime = true
	HasBirthTime  = true
)

type timespec struct {
	atime
	mtime
	ctime
	btime
}

func timespecToTime(ts syscall.Timespec) time.Time {
	return time.Unix(int64(ts.Sec), int64(ts.Nsec))
}

func getTimespec(fi os.FileInfo) (t timespec) {
	stat := fi.Sys().(*syscall.Stat_t)
	t.atime.v = timespecToTime(stat.Atimespec)
	t.mtime.v = timespecToTime(stat.Mtimespec)
	t.ctime.v = timespecToTime(stat.Ctimespec)
	t.btime.v = timespecToTime(stat.Birthtimespec)
	return t
}
07070100000FBE000081A4000000000000000000000001645E367C0000030B000000000000000000000000000000000000004900000000elemental-cli-0.3.1/vendor/gopkg.in/djherbis/times.v1/times_dragonfly.go  // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// http://golang.org/src/os/stat_dragonfly.go

package times

import (
	"os"
	"syscall"
	"time"
)

// HasChangeTime and HasBirthTime are true if and only if
// the target OS supports them.
const (
	HasChangeTime = true
	HasBirthTime  = false
)

type timespec struct {
	atime
	mtime
	ctime
	nobtime
}

func timespecToTime(ts syscall.Timespec) time.Time {
	return time.Unix(int64(ts.Sec), int64(ts.Nsec))
}

func getTimespec(fi os.FileInfo) (t timespec) {
	stat := fi.Sys().(*syscall.Stat_t)
	t.atime.v = timespecToTime(stat.Atim)
	t.mtime.v = timespecToTime(stat.Mtim)
	t.ctime.v = timespecToTime(stat.Ctim)
	return t
}
 07070100000FBF000081A4000000000000000000000001645E367C00000345000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/gopkg.in/djherbis/times.v1/times_freebsd.go    // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// http://golang.org/src/os/stat_freebsd.go

package times

import (
	"os"
	"syscall"
	"time"
)

// HasChangeTime and HasBirthTime are true if and only if
// the target OS supports them.
const (
	HasChangeTime = true
	HasBirthTime  = true
)

type timespec struct {
	atime
	mtime
	ctime
	btime
}

func timespecToTime(ts syscall.Timespec) time.Time {
	return time.Unix(int64(ts.Sec), int64(ts.Nsec))
}

func getTimespec(fi os.FileInfo) (t timespec) {
	stat := fi.Sys().(*syscall.Stat_t)
	t.atime.v = timespecToTime(stat.Atimespec)
	t.mtime.v = timespecToTime(stat.Mtimespec)
	t.ctime.v = timespecToTime(stat.Ctimespec)
	t.btime.v = timespecToTime(stat.Birthtimespec)
	return t
}
   07070100000FC0000081A4000000000000000000000001645E367C00000337000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/gopkg.in/djherbis/times.v1/times_js.go // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// https://golang.org/src/os/stat_nacljs.go

// +build js,wasm

package times

import (
	"os"
	"syscall"
	"time"
)

// HasChangeTime and HasBirthTime are true if and only if
// the target OS supports them.
const (
	HasChangeTime = true
	HasBirthTime  = false
)

type timespec struct {
	atime
	mtime
	ctime
	nobtime
}

func timespecToTime(sec, nsec int64) time.Time {
	return time.Unix(sec, nsec)
}

func getTimespec(fi os.FileInfo) (t timespec) {
	stat := fi.Sys().(*syscall.Stat_t)
	t.atime.v = timespecToTime(stat.Atime, stat.AtimeNsec)
	t.mtime.v = timespecToTime(stat.Mtime, stat.MtimeNsec)
	t.ctime.v = timespecToTime(stat.Ctime, stat.CtimeNsec)
	return t
}
 07070100000FC1000081A4000000000000000000000001645E367C00000307000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/gopkg.in/djherbis/times.v1/times_linux.go  // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// http://golang.org/src/os/stat_linux.go

package times

import (
	"os"
	"syscall"
	"time"
)

// HasChangeTime and HasBirthTime are true if and only if
// the target OS supports them.
const (
	HasChangeTime = true
	HasBirthTime  = false
)

type timespec struct {
	atime
	mtime
	ctime
	nobtime
}

func timespecToTime(ts syscall.Timespec) time.Time {
	return time.Unix(int64(ts.Sec), int64(ts.Nsec))
}

func getTimespec(fi os.FileInfo) (t timespec) {
	stat := fi.Sys().(*syscall.Stat_t)
	t.atime.v = timespecToTime(stat.Atim)
	t.mtime.v = timespecToTime(stat.Mtim)
	t.ctime.v = timespecToTime(stat.Ctim)
	return t
}
 07070100000FC2000081A4000000000000000000000001645E367C00000324000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/gopkg.in/djherbis/times.v1/times_nacl.go   // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// https://golang.org/src/os/stat_nacljs.go

package times

import (
	"os"
	"syscall"
	"time"
)

// HasChangeTime and HasBirthTime are true if and only if
// the target OS supports them.
const (
	HasChangeTime = true
	HasBirthTime  = false
)

type timespec struct {
	atime
	mtime
	ctime
	nobtime
}

func timespecToTime(sec, nsec int64) time.Time {
	return time.Unix(sec, nsec)
}

func getTimespec(fi os.FileInfo) (t timespec) {
	stat := fi.Sys().(*syscall.Stat_t)
	t.atime.v = timespecToTime(stat.Atime, stat.AtimeNsec)
	t.mtime.v = timespecToTime(stat.Mtime, stat.MtimeNsec)
	t.ctime.v = timespecToTime(stat.Ctime, stat.CtimeNsec)
	return t
}
07070100000FC3000081A4000000000000000000000001645E367C00000344000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/gopkg.in/djherbis/times.v1/times_netbsd.go // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// http://golang.org/src/os/stat_netbsd.go

package times

import (
	"os"
	"syscall"
	"time"
)

// HasChangeTime and HasBirthTime are true if and only if
// the target OS supports them.
const (
	HasChangeTime = true
	HasBirthTime  = true
)

type timespec struct {
	atime
	mtime
	ctime
	btime
}

func timespecToTime(ts syscall.Timespec) time.Time {
	return time.Unix(int64(ts.Sec), int64(ts.Nsec))
}

func getTimespec(fi os.FileInfo) (t timespec) {
	stat := fi.Sys().(*syscall.Stat_t)
	t.atime.v = timespecToTime(stat.Atimespec)
	t.mtime.v = timespecToTime(stat.Mtimespec)
	t.ctime.v = timespecToTime(stat.Ctimespec)
	t.btime.v = timespecToTime(stat.Birthtimespec)
	return t
}
07070100000FC4000081A4000000000000000000000001645E367C00000309000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/gopkg.in/djherbis/times.v1/times_openbsd.go    // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// http://golang.org/src/os/stat_openbsd.go

package times

import (
	"os"
	"syscall"
	"time"
)

// HasChangeTime and HasBirthTime are true if and only if
// the target OS supports them.
const (
	HasChangeTime = true
	HasBirthTime  = false
)

type timespec struct {
	atime
	mtime
	ctime
	nobtime
}

func timespecToTime(ts syscall.Timespec) time.Time {
	return time.Unix(int64(ts.Sec), int64(ts.Nsec))
}

func getTimespec(fi os.FileInfo) (t timespec) {
	stat := fi.Sys().(*syscall.Stat_t)
	t.atime.v = timespecToTime(stat.Atim)
	t.mtime.v = timespecToTime(stat.Mtim)
	t.ctime.v = timespecToTime(stat.Ctim)
	return t
}
   07070100000FC5000081A4000000000000000000000001645E367C00000283000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/gopkg.in/djherbis/times.v1/times_plan9.go  // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// http://golang.org/src/os/stat_plan9.go

package times

import (
	"os"
	"syscall"
	"time"
)

// HasChangeTime and HasBirthTime are true if and only if
// the target OS supports them.
const (
	HasChangeTime = false
	HasBirthTime  = false
)

type timespec struct {
	atime
	mtime
	noctime
	nobtime
}

func getTimespec(fi os.FileInfo) (t timespec) {
	stat := fi.Sys().(*syscall.Dir)
	t.atime.v = time.Unix(int64(stat.Atime), 0)
	t.mtime.v = time.Unix(int64(stat.Mtime), 0)
	return t
}
 07070100000FC6000081A4000000000000000000000001645E367C00000309000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/gopkg.in/djherbis/times.v1/times_solaris.go    // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// http://golang.org/src/os/stat_solaris.go

package times

import (
	"os"
	"syscall"
	"time"
)

// HasChangeTime and HasBirthTime are true if and only if
// the target OS supports them.
const (
	HasChangeTime = true
	HasBirthTime  = false
)

type timespec struct {
	atime
	mtime
	ctime
	nobtime
}

func timespecToTime(ts syscall.Timespec) time.Time {
	return time.Unix(int64(ts.Sec), int64(ts.Nsec))
}

func getTimespec(fi os.FileInfo) (t timespec) {
	stat := fi.Sys().(*syscall.Stat_t)
	t.atime.v = timespecToTime(stat.Atim)
	t.mtime.v = timespecToTime(stat.Mtim)
	t.ctime.v = timespecToTime(stat.Ctim)
	return t
}
   07070100000FC7000081A4000000000000000000000001645E367C000002FB000000000000000000000000000000000000004700000000elemental-cli-0.3.1/vendor/gopkg.in/djherbis/times.v1/times_windows.go    // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// http://golang.org/src/os/stat_windows.go

package times

import (
	"os"
	"syscall"
	"time"
)

// HasChangeTime and HasBirthTime are true if and only if
// the target OS supports them.
const (
	HasChangeTime = false
	HasBirthTime  = true
)

type timespec struct {
	atime
	mtime
	noctime
	btime
}

func getTimespec(fi os.FileInfo) Timespec {
	var t timespec
	stat := fi.Sys().(*syscall.Win32FileAttributeData)
	t.atime.v = time.Unix(0, stat.LastAccessTime.Nanoseconds())
	t.mtime.v = time.Unix(0, stat.LastWriteTime.Nanoseconds())
	t.btime.v = time.Unix(0, stat.CreationTime.Nanoseconds())
	return t
}
 07070100000FC8000081A4000000000000000000000001645E367C0000014E000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/gopkg.in/djherbis/times.v1/use_generic_stat.go // +build !windows

package times

import "os"

// Stat returns the Timespec for the given filename.
func Stat(name string) (Timespec, error) {
	return stat(name, os.Stat)
}

// Lstat returns the Timespec for the given filename, and does not follow Symlinks.
func Lstat(name string) (Timespec, error) {
	return stat(name, os.Lstat)
}
  07070100000FC9000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000002B00000000elemental-cli-0.3.1/vendor/gopkg.in/ini.v1    07070100000FCA000081A4000000000000000000000001645E367C000000B7000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/gopkg.in/ini.v1/.editorconfig  # http://editorconfig.org

root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

[*_test.go]
trim_trailing_whitespace = false
 07070100000FCB000081A4000000000000000000000001645E367C00000073000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/gopkg.in/ini.v1/.gitignore testdata/conf_out.ini
ini.sublime-project
ini.sublime-workspace
testdata/conf_reflect.ini
.idea
/.vscode
.DS_Store
 07070100000FCC000081A4000000000000000000000001645E367C000001D4000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/gopkg.in/ini.v1/.golangci.yml  linters-settings:
  staticcheck:
    checks: [
      "all",
      "-SA1019" # There are valid use cases of strings.Title
    ]
  nakedret:
    max-func-lines: 0 # Disallow any unnamed return statement

linters:
  enable:
    - deadcode
    - errcheck
    - gosimple
    - govet
    - ineffassign
    - staticcheck
    - structcheck
    - typecheck
    - unused
    - varcheck
    - nakedret
    - gofmt
    - rowserrcheck
    - unconvert
    - goimports
    - unparam
07070100000FCD000081A4000000000000000000000001645E367C0000280D000000000000000000000000000000000000003300000000elemental-cli-0.3.1/vendor/gopkg.in/ini.v1/LICENSE    Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

"License" shall mean the terms and conditions for use, reproduction, and
distribution as defined by Sections 1 through 9 of this document.

"Licensor" shall mean the copyright owner or entity authorized by the copyright
owner that is granting the License.

"Legal Entity" shall mean the union of the acting entity and all other entities
that control, are controlled by, or are under common control with that entity.
For the purposes of this definition, "control" means (i) the power, direct or
indirect, to cause the direction or management of such entity, whether by
contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.

"You" (or "Your") shall mean an individual or Legal Entity exercising
permissions granted by this License.

"Source" form shall mean the preferred form for making modifications, including
but not limited to software source code, documentation source, and configuration
files.

"Object" form shall mean any form resulting from mechanical transformation or
translation of a Source form, including but not limited to compiled object code,
generated documentation, and conversions to other media types.

"Work" shall mean the work of authorship, whether in Source or Object form, made
available under the License, as indicated by a copyright notice that is included
in or attached to the work (an example is provided in the Appendix below).

"Derivative Works" shall mean any work, whether in Source or Object form, that
is based on (or derived from) the Work and for which the editorial revisions,
annotations, elaborations, or other modifications represent, as a whole, an
original work of authorship. For the purposes of this License, Derivative Works
shall not include works that remain separable from, or merely link (or bind by
name) to the interfaces of, the Work and Derivative Works thereof.

"Contribution" shall mean any work of authorship, including the original version
of the Work and any modifications or additions to that Work or Derivative Works
thereof, that is intentionally submitted to Licensor for inclusion in the Work
by the copyright owner or by an individual or Legal Entity authorized to submit
on behalf of the copyright owner. For the purposes of this definition,
"submitted" means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems, and
issue tracking systems that are managed by, or on behalf of, the Licensor for
the purpose of discussing and improving the Work, but excluding communication
that is conspicuously marked or otherwise designated in writing by the copyright
owner as "Not a Contribution."

"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
of whom a Contribution has been received by Licensor and subsequently
incorporated within the Work.

2. Grant of Copyright License.

Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the Work and such
Derivative Works in Source or Object form.

3. Grant of Patent License.

Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable (except as stated in this section) patent license to make, have
made, use, offer to sell, sell, import, and otherwise transfer the Work, where
such license applies only to those patent claims licensable by such Contributor
that are necessarily infringed by their Contribution(s) alone or by combination
of their Contribution(s) with the Work to which such Contribution(s) was
submitted. If You institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work or a
Contribution incorporated within the Work constitutes direct or contributory
patent infringement, then any patent licenses granted to You under this License
for that Work shall terminate as of the date such litigation is filed.

4. Redistribution.

You may reproduce and distribute copies of the Work or Derivative Works thereof
in any medium, with or without modifications, and in Source or Object form,
provided that You meet the following conditions:

You must give any other recipients of the Work or Derivative Works a copy of
this License; and
You must cause any modified files to carry prominent notices stating that You
changed the files; and
You must retain, in the Source form of any Derivative Works that You distribute,
all copyright, patent, trademark, and attribution notices from the Source form
of the Work, excluding those notices that do not pertain to any part of the
Derivative Works; and
If the Work includes a "NOTICE" text file as part of its distribution, then any
Derivative Works that You distribute must include a readable copy of the
attribution notices contained within such NOTICE file, excluding those notices
that do not pertain to any part of the Derivative Works, in at least one of the
following places: within a NOTICE text file distributed as part of the
Derivative Works; within the Source form or documentation, if provided along
with the Derivative Works; or, within a display generated by the Derivative
Works, if and wherever such third-party notices normally appear. The contents of
the NOTICE file are for informational purposes only and do not modify the
License. You may add Your own attribution notices within Derivative Works that
You distribute, alongside or as an addendum to the NOTICE text from the Work,
provided that such additional attribution notices cannot be construed as
modifying the License.
You may add Your own copyright statement to Your modifications and may provide
additional or different license terms and conditions for use, reproduction, or
distribution of Your modifications, or for any such Derivative Works as a whole,
provided Your use, reproduction, and distribution of the Work otherwise complies
with the conditions stated in this License.

5. Submission of Contributions.

Unless You explicitly state otherwise, any Contribution intentionally submitted
for inclusion in the Work by You to the Licensor shall be under the terms and
conditions of this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify the terms of
any separate license agreement you may have executed with Licensor regarding
such Contributions.

6. Trademarks.

This License does not grant permission to use the trade names, trademarks,
service marks, or product names of the Licensor, except as required for
reasonable and customary use in describing the origin of the Work and
reproducing the content of the NOTICE file.

7. Disclaimer of Warranty.

Unless required by applicable law or agreed to in writing, Licensor provides the
Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
including, without limitation, any warranties or conditions of TITLE,
NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
solely responsible for determining the appropriateness of using or
redistributing the Work and assume any risks associated with Your exercise of
permissions under this License.

8. Limitation of Liability.

In no event and under no legal theory, whether in tort (including negligence),
contract, or otherwise, unless required by applicable law (such as deliberate
and grossly negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special, incidental,
or consequential damages of any character arising as a result of this License or
out of the use or inability to use the Work (including but not limited to
damages for loss of goodwill, work stoppage, computer failure or malfunction, or
any and all other commercial damages or losses), even if such Contributor has
been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability.

While redistributing the Work or Derivative Works thereof, You may choose to
offer, and charge a fee for, acceptance of support, warranty, indemnity, or
other liability obligations and/or rights consistent with this License. However,
in accepting such obligations, You may act only on Your own behalf and on Your
sole responsibility, not on behalf of any other Contributor, and only if You
agree to indemnify, defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason of your
accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work

To apply the Apache License to your work, attach the following boilerplate
notice, with the fields enclosed by brackets "[]" replaced with your own
identifying information. (Don't include the brackets!) The text should be
enclosed in the appropriate comment syntax for the file format. We also
recommend that a file or class name and description of purpose be included on
the same "printed page" as the copyright notice for easier identification within
third-party archives.

   Copyright 2014 Unknwon

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
   07070100000FCE000081A4000000000000000000000001645E367C000000EF000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/gopkg.in/ini.v1/Makefile   .PHONY: build test bench vet coverage

build: vet bench

test:
	go test -v -cover -race

bench:
	go test -v -cover -test.bench=. -test.benchmem

vet:
	go vet

coverage:
	go test -coverprofile=c.out && go tool cover -html=c.out && rm c.out
 07070100000FCF000081A4000000000000000000000001645E367C000006AB000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/gopkg.in/ini.v1/README.md  # INI

[![GitHub Workflow Status](https://img.shields.io/github/checks-status/go-ini/ini/main?logo=github&style=for-the-badge)](https://github.com/go-ini/ini/actions?query=branch%3Amain)
[![codecov](https://img.shields.io/codecov/c/github/go-ini/ini/master?logo=codecov&style=for-the-badge)](https://codecov.io/gh/go-ini/ini)
[![GoDoc](https://img.shields.io/badge/GoDoc-Reference-blue?style=for-the-badge&logo=go)](https://pkg.go.dev/github.com/go-ini/ini?tab=doc)
[![Sourcegraph](https://img.shields.io/badge/view%20on-Sourcegraph-brightgreen.svg?style=for-the-badge&logo=sourcegraph)](https://sourcegraph.com/github.com/go-ini/ini)

![](https://avatars0.githubusercontent.com/u/10216035?v=3&s=200)

Package ini provides INI file read and write functionality in Go.

## Features

- Load from multiple data sources(file, `[]byte`, `io.Reader` and `io.ReadCloser`) with overwrites.
- Read with recursion values.
- Read with parent-child sections.
- Read with auto-increment key names.
- Read with multiple-line values.
- Read with tons of helper methods.
- Read and convert values to Go types.
- Read and **WRITE** comments of sections and keys.
- Manipulate sections, keys and comments with ease.
- Keep sections and keys in order as you parse and save.

## Installation

The minimum requirement of Go is **1.13**.

```sh
$ go get gopkg.in/ini.v1
```

Please add `-u` flag to update in the future.

## Getting Help

- [Getting Started](https://ini.unknwon.io/docs/intro/getting_started)
- [API Documentation](https://gowalker.org/gopkg.in/ini.v1)
- 中国大陆镜像：https://ini.unknwon.cn

## License

This project is under Apache v2 License. See the [LICENSE](LICENSE) file for the full license text.
 07070100000FD0000081A4000000000000000000000001645E367C000000F5000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/gopkg.in/ini.v1/codecov.yml    coverage:
  range: "60...95"
  status:
    project:
      default:
        threshold: 1%
        informational: true
    patch:
      defualt:
        only_pulls: true
        informational: true

comment:
  layout: 'diff'

github_checks: false
   07070100000FD1000081A4000000000000000000000001645E367C000007AC000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/gopkg.in/ini.v1/data_source.go // Copyright 2019 Unknwon
//
// Licensed under the Apache License, Version 2.0 (the "License"): you may
// not use this file except in compliance with the License. You may obtain
// a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations
// under the License.

package ini

import (
	"bytes"
	"fmt"
	"io"
	"io/ioutil"
	"os"
)

var (
	_ dataSource = (*sourceFile)(nil)
	_ dataSource = (*sourceData)(nil)
	_ dataSource = (*sourceReadCloser)(nil)
)

// dataSource is an interface that returns object which can be read and closed.
type dataSource interface {
	ReadCloser() (io.ReadCloser, error)
}

// sourceFile represents an object that contains content on the local file system.
type sourceFile struct {
	name string
}

func (s sourceFile) ReadCloser() (_ io.ReadCloser, err error) {
	return os.Open(s.name)
}

// sourceData represents an object that contains content in memory.
type sourceData struct {
	data []byte
}

func (s *sourceData) ReadCloser() (io.ReadCloser, error) {
	return ioutil.NopCloser(bytes.NewReader(s.data)), nil
}

// sourceReadCloser represents an input stream with Close method.
type sourceReadCloser struct {
	reader io.ReadCloser
}

func (s *sourceReadCloser) ReadCloser() (io.ReadCloser, error) {
	return s.reader, nil
}

func parseDataSource(source interface{}) (dataSource, error) {
	switch s := source.(type) {
	case string:
		return sourceFile{s}, nil
	case []byte:
		return &sourceData{s}, nil
	case io.ReadCloser:
		return &sourceReadCloser{s}, nil
	case io.Reader:
		return &sourceReadCloser{ioutil.NopCloser(s)}, nil
	default:
		return nil, fmt.Errorf("error parsing data source: unknown type %q", s)
	}
}
07070100000FD2000081A4000000000000000000000001645E367C00000317000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/gopkg.in/ini.v1/deprecated.go  // Copyright 2019 Unknwon
//
// Licensed under the Apache License, Version 2.0 (the "License"): you may
// not use this file except in compliance with the License. You may obtain
// a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations
// under the License.

package ini

var (
	// Deprecated: Use "DefaultSection" instead.
	DEFAULT_SECTION = DefaultSection
	// Deprecated: AllCapsUnderscore converts to format ALL_CAPS_UNDERSCORE.
	AllCapsUnderscore = SnackCase
)
 07070100000FD3000081A4000000000000000000000001645E367C000005D9000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/gopkg.in/ini.v1/error.go   // Copyright 2016 Unknwon
//
// Licensed under the Apache License, Version 2.0 (the "License"): you may
// not use this file except in compliance with the License. You may obtain
// a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations
// under the License.

package ini

import (
	"fmt"
)

// ErrDelimiterNotFound indicates the error type of no delimiter is found which there should be one.
type ErrDelimiterNotFound struct {
	Line string
}

// IsErrDelimiterNotFound returns true if the given error is an instance of ErrDelimiterNotFound.
func IsErrDelimiterNotFound(err error) bool {
	_, ok := err.(ErrDelimiterNotFound)
	return ok
}

func (err ErrDelimiterNotFound) Error() string {
	return fmt.Sprintf("key-value delimiter not found: %s", err.Line)
}

// ErrEmptyKeyName indicates the error type of no key name is found which there should be one.
type ErrEmptyKeyName struct {
	Line string
}

// IsErrEmptyKeyName returns true if the given error is an instance of ErrEmptyKeyName.
func IsErrEmptyKeyName(err error) bool {
	_, ok := err.(ErrEmptyKeyName)
	return ok
}

func (err ErrEmptyKeyName) Error() string {
	return fmt.Sprintf("empty key name: %s", err.Line)
}
   07070100000FD4000081A4000000000000000000000001645E367C00003685000000000000000000000000000000000000003300000000elemental-cli-0.3.1/vendor/gopkg.in/ini.v1/file.go    // Copyright 2017 Unknwon
//
// Licensed under the Apache License, Version 2.0 (the "License"): you may
// not use this file except in compliance with the License. You may obtain
// a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations
// under the License.

package ini

import (
	"bytes"
	"errors"
	"fmt"
	"io"
	"io/ioutil"
	"os"
	"strings"
	"sync"
)

// File represents a combination of one or more INI files in memory.
type File struct {
	options     LoadOptions
	dataSources []dataSource

	// Should make things safe, but sometimes doesn't matter.
	BlockMode bool
	lock      sync.RWMutex

	// To keep data in order.
	sectionList []string
	// To keep track of the index of a section with same name.
	// This meta list is only used with non-unique section names are allowed.
	sectionIndexes []int

	// Actual data is stored here.
	sections map[string][]*Section

	NameMapper
	ValueMapper
}

// newFile initializes File object with given data sources.
func newFile(dataSources []dataSource, opts LoadOptions) *File {
	if len(opts.KeyValueDelimiters) == 0 {
		opts.KeyValueDelimiters = "=:"
	}
	if len(opts.KeyValueDelimiterOnWrite) == 0 {
		opts.KeyValueDelimiterOnWrite = "="
	}
	if len(opts.ChildSectionDelimiter) == 0 {
		opts.ChildSectionDelimiter = "."
	}

	return &File{
		BlockMode:   true,
		dataSources: dataSources,
		sections:    make(map[string][]*Section),
		options:     opts,
	}
}

// Empty returns an empty file object.
func Empty(opts ...LoadOptions) *File {
	var opt LoadOptions
	if len(opts) > 0 {
		opt = opts[0]
	}

	// Ignore error here, we are sure our data is good.
	f, _ := LoadSources(opt, []byte(""))
	return f
}

// NewSection creates a new section.
func (f *File) NewSection(name string) (*Section, error) {
	if len(name) == 0 {
		return nil, errors.New("empty section name")
	}

	if (f.options.Insensitive || f.options.InsensitiveSections) && name != DefaultSection {
		name = strings.ToLower(name)
	}

	if f.BlockMode {
		f.lock.Lock()
		defer f.lock.Unlock()
	}

	if !f.options.AllowNonUniqueSections && inSlice(name, f.sectionList) {
		return f.sections[name][0], nil
	}

	f.sectionList = append(f.sectionList, name)

	// NOTE: Append to indexes must happen before appending to sections,
	// otherwise index will have off-by-one problem.
	f.sectionIndexes = append(f.sectionIndexes, len(f.sections[name]))

	sec := newSection(f, name)
	f.sections[name] = append(f.sections[name], sec)

	return sec, nil
}

// NewRawSection creates a new section with an unparseable body.
func (f *File) NewRawSection(name, body string) (*Section, error) {
	section, err := f.NewSection(name)
	if err != nil {
		return nil, err
	}

	section.isRawSection = true
	section.rawBody = body
	return section, nil
}

// NewSections creates a list of sections.
func (f *File) NewSections(names ...string) (err error) {
	for _, name := range names {
		if _, err = f.NewSection(name); err != nil {
			return err
		}
	}
	return nil
}

// GetSection returns section by given name.
func (f *File) GetSection(name string) (*Section, error) {
	secs, err := f.SectionsByName(name)
	if err != nil {
		return nil, err
	}

	return secs[0], err
}

// HasSection returns true if the file contains a section with given name.
func (f *File) HasSection(name string) bool {
	section, _ := f.GetSection(name)
	return section != nil
}

// SectionsByName returns all sections with given name.
func (f *File) SectionsByName(name string) ([]*Section, error) {
	if len(name) == 0 {
		name = DefaultSection
	}
	if f.options.Insensitive || f.options.InsensitiveSections {
		name = strings.ToLower(name)
	}

	if f.BlockMode {
		f.lock.RLock()
		defer f.lock.RUnlock()
	}

	secs := f.sections[name]
	if len(secs) == 0 {
		return nil, fmt.Errorf("section %q does not exist", name)
	}

	return secs, nil
}

// Section assumes named section exists and returns a zero-value when not.
func (f *File) Section(name string) *Section {
	sec, err := f.GetSection(name)
	if err != nil {
		if name == "" {
			name = DefaultSection
		}
		sec, _ = f.NewSection(name)
		return sec
	}
	return sec
}

// SectionWithIndex assumes named section exists and returns a new section when not.
func (f *File) SectionWithIndex(name string, index int) *Section {
	secs, err := f.SectionsByName(name)
	if err != nil || len(secs) <= index {
		// NOTE: It's OK here because the only possible error is empty section name,
		// but if it's empty, this piece of code won't be executed.
		newSec, _ := f.NewSection(name)
		return newSec
	}

	return secs[index]
}

// Sections returns a list of Section stored in the current instance.
func (f *File) Sections() []*Section {
	if f.BlockMode {
		f.lock.RLock()
		defer f.lock.RUnlock()
	}

	sections := make([]*Section, len(f.sectionList))
	for i, name := range f.sectionList {
		sections[i] = f.sections[name][f.sectionIndexes[i]]
	}
	return sections
}

// ChildSections returns a list of child sections of given section name.
func (f *File) ChildSections(name string) []*Section {
	return f.Section(name).ChildSections()
}

// SectionStrings returns list of section names.
func (f *File) SectionStrings() []string {
	list := make([]string, len(f.sectionList))
	copy(list, f.sectionList)
	return list
}

// DeleteSection deletes a section or all sections with given name.
func (f *File) DeleteSection(name string) {
	secs, err := f.SectionsByName(name)
	if err != nil {
		return
	}

	for i := 0; i < len(secs); i++ {
		// For non-unique sections, it is always needed to remove the first one so
		// in the next iteration, the subsequent section continue having index 0.
		// Ignoring the error as index 0 never returns an error.
		_ = f.DeleteSectionWithIndex(name, 0)
	}
}

// DeleteSectionWithIndex deletes a section with given name and index.
func (f *File) DeleteSectionWithIndex(name string, index int) error {
	if !f.options.AllowNonUniqueSections && index != 0 {
		return fmt.Errorf("delete section with non-zero index is only allowed when non-unique sections is enabled")
	}

	if len(name) == 0 {
		name = DefaultSection
	}
	if f.options.Insensitive || f.options.InsensitiveSections {
		name = strings.ToLower(name)
	}

	if f.BlockMode {
		f.lock.Lock()
		defer f.lock.Unlock()
	}

	// Count occurrences of the sections
	occurrences := 0

	sectionListCopy := make([]string, len(f.sectionList))
	copy(sectionListCopy, f.sectionList)

	for i, s := range sectionListCopy {
		if s != name {
			continue
		}

		if occurrences == index {
			if len(f.sections[name]) <= 1 {
				delete(f.sections, name) // The last one in the map
			} else {
				f.sections[name] = append(f.sections[name][:index], f.sections[name][index+1:]...)
			}

			// Fix section lists
			f.sectionList = append(f.sectionList[:i], f.sectionList[i+1:]...)
			f.sectionIndexes = append(f.sectionIndexes[:i], f.sectionIndexes[i+1:]...)

		} else if occurrences > index {
			// Fix the indices of all following sections with this name.
			f.sectionIndexes[i-1]--
		}

		occurrences++
	}

	return nil
}

func (f *File) reload(s dataSource) error {
	r, err := s.ReadCloser()
	if err != nil {
		return err
	}
	defer r.Close()

	return f.parse(r)
}

// Reload reloads and parses all data sources.
func (f *File) Reload() (err error) {
	for _, s := range f.dataSources {
		if err = f.reload(s); err != nil {
			// In loose mode, we create an empty default section for nonexistent files.
			if os.IsNotExist(err) && f.options.Loose {
				_ = f.parse(bytes.NewBuffer(nil))
				continue
			}
			return err
		}
		if f.options.ShortCircuit {
			return nil
		}
	}
	return nil
}

// Append appends one or more data sources and reloads automatically.
func (f *File) Append(source interface{}, others ...interface{}) error {
	ds, err := parseDataSource(source)
	if err != nil {
		return err
	}
	f.dataSources = append(f.dataSources, ds)
	for _, s := range others {
		ds, err = parseDataSource(s)
		if err != nil {
			return err
		}
		f.dataSources = append(f.dataSources, ds)
	}
	return f.Reload()
}

func (f *File) writeToBuffer(indent string) (*bytes.Buffer, error) {
	equalSign := DefaultFormatLeft + f.options.KeyValueDelimiterOnWrite + DefaultFormatRight

	if PrettyFormat || PrettyEqual {
		equalSign = fmt.Sprintf(" %s ", f.options.KeyValueDelimiterOnWrite)
	}

	// Use buffer to make sure target is safe until finish encoding.
	buf := bytes.NewBuffer(nil)
	lastSectionIdx := len(f.sectionList) - 1
	for i, sname := range f.sectionList {
		sec := f.SectionWithIndex(sname, f.sectionIndexes[i])
		if len(sec.Comment) > 0 {
			// Support multiline comments
			lines := strings.Split(sec.Comment, LineBreak)
			for i := range lines {
				if lines[i][0] != '#' && lines[i][0] != ';' {
					lines[i] = "; " + lines[i]
				} else {
					lines[i] = lines[i][:1] + " " + strings.TrimSpace(lines[i][1:])
				}

				if _, err := buf.WriteString(lines[i] + LineBreak); err != nil {
					return nil, err
				}
			}
		}

		if i > 0 || DefaultHeader || (i == 0 && strings.ToUpper(sec.name) != DefaultSection) {
			if _, err := buf.WriteString("[" + sname + "]" + LineBreak); err != nil {
				return nil, err
			}
		} else {
			// Write nothing if default section is empty
			if len(sec.keyList) == 0 {
				continue
			}
		}

		isLastSection := i == lastSectionIdx
		if sec.isRawSection {
			if _, err := buf.WriteString(sec.rawBody); err != nil {
				return nil, err
			}

			if PrettySection && !isLastSection {
				// Put a line between sections
				if _, err := buf.WriteString(LineBreak); err != nil {
					return nil, err
				}
			}
			continue
		}

		// Count and generate alignment length and buffer spaces using the
		// longest key. Keys may be modified if they contain certain characters so
		// we need to take that into account in our calculation.
		alignLength := 0
		if PrettyFormat {
			for _, kname := range sec.keyList {
				keyLength := len(kname)
				// First case will surround key by ` and second by """
				if strings.Contains(kname, "\"") || strings.ContainsAny(kname, f.options.KeyValueDelimiters) {
					keyLength += 2
				} else if strings.Contains(kname, "`") {
					keyLength += 6
				}

				if keyLength > alignLength {
					alignLength = keyLength
				}
			}
		}
		alignSpaces := bytes.Repeat([]byte(" "), alignLength)

	KeyList:
		for _, kname := range sec.keyList {
			key := sec.Key(kname)
			if len(key.Comment) > 0 {
				if len(indent) > 0 && sname != DefaultSection {
					buf.WriteString(indent)
				}

				// Support multiline comments
				lines := strings.Split(key.Comment, LineBreak)
				for i := range lines {
					if lines[i][0] != '#' && lines[i][0] != ';' {
						lines[i] = "; " + strings.TrimSpace(lines[i])
					} else {
						lines[i] = lines[i][:1] + " " + strings.TrimSpace(lines[i][1:])
					}

					if _, err := buf.WriteString(lines[i] + LineBreak); err != nil {
						return nil, err
					}
				}
			}

			if len(indent) > 0 && sname != DefaultSection {
				buf.WriteString(indent)
			}

			switch {
			case key.isAutoIncrement:
				kname = "-"
			case strings.Contains(kname, "\"") || strings.ContainsAny(kname, f.options.KeyValueDelimiters):
				kname = "`" + kname + "`"
			case strings.Contains(kname, "`"):
				kname = `"""` + kname + `"""`
			}

			writeKeyValue := func(val string) (bool, error) {
				if _, err := buf.WriteString(kname); err != nil {
					return false, err
				}

				if key.isBooleanType {
					buf.WriteString(LineBreak)
					return true, nil
				}

				// Write out alignment spaces before "=" sign
				if PrettyFormat {
					buf.Write(alignSpaces[:alignLength-len(kname)])
				}

				// In case key value contains "\n", "`", "\"", "#" or ";"
				if strings.ContainsAny(val, "\n`") {
					val = `"""` + val + `"""`
				} else if !f.options.IgnoreInlineComment && strings.ContainsAny(val, "#;") {
					val = "`" + val + "`"
				} else if len(strings.TrimSpace(val)) != len(val) {
					val = `"` + val + `"`
				}
				if _, err := buf.WriteString(equalSign + val + LineBreak); err != nil {
					return false, err
				}
				return false, nil
			}

			shadows := key.ValueWithShadows()
			if len(shadows) == 0 {
				if _, err := writeKeyValue(""); err != nil {
					return nil, err
				}
			}

			for _, val := range shadows {
				exitLoop, err := writeKeyValue(val)
				if err != nil {
					return nil, err
				} else if exitLoop {
					continue KeyList
				}
			}

			for _, val := range key.nestedValues {
				if _, err := buf.WriteString(indent + "  " + val + LineBreak); err != nil {
					return nil, err
				}
			}
		}

		if PrettySection && !isLastSection {
			// Put a line between sections
			if _, err := buf.WriteString(LineBreak); err != nil {
				return nil, err
			}
		}
	}

	return buf, nil
}

// WriteToIndent writes content into io.Writer with given indention.
// If PrettyFormat has been set to be true,
// it will align "=" sign with spaces under each section.
func (f *File) WriteToIndent(w io.Writer, indent string) (int64, error) {
	buf, err := f.writeToBuffer(indent)
	if err != nil {
		return 0, err
	}
	return buf.WriteTo(w)
}

// WriteTo writes file content into io.Writer.
func (f *File) WriteTo(w io.Writer) (int64, error) {
	return f.WriteToIndent(w, "")
}

// SaveToIndent writes content to file system with given value indention.
func (f *File) SaveToIndent(filename, indent string) error {
	// Note: Because we are truncating with os.Create,
	// 	so it's safer to save to a temporary file location and rename after done.
	buf, err := f.writeToBuffer(indent)
	if err != nil {
		return err
	}

	return ioutil.WriteFile(filename, buf.Bytes(), 0666)
}

// SaveTo writes content to file system.
func (f *File) SaveTo(filename string) error {
	return f.SaveToIndent(filename, "")
}
   07070100000FD5000081A4000000000000000000000001645E367C000002CF000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/gopkg.in/ini.v1/helper.go  // Copyright 2019 Unknwon
//
// Licensed under the Apache License, Version 2.0 (the "License"): you may
// not use this file except in compliance with the License. You may obtain
// a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations
// under the License.

package ini

func inSlice(str string, s []string) bool {
	for _, v := range s {
		if str == v {
			return true
		}
	}
	return false
}
 07070100000FD6000081A4000000000000000000000001645E367C00001F73000000000000000000000000000000000000003200000000elemental-cli-0.3.1/vendor/gopkg.in/ini.v1/ini.go // Copyright 2014 Unknwon
//
// Licensed under the Apache License, Version 2.0 (the "License"): you may
// not use this file except in compliance with the License. You may obtain
// a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations
// under the License.

// Package ini provides INI file read and write functionality in Go.
package ini

import (
	"os"
	"regexp"
	"runtime"
	"strings"
)

const (
	// Maximum allowed depth when recursively substituing variable names.
	depthValues = 99
)

var (
	// DefaultSection is the name of default section. You can use this var or the string literal.
	// In most of cases, an empty string is all you need to access the section.
	DefaultSection = "DEFAULT"

	// LineBreak is the delimiter to determine or compose a new line.
	// This variable will be changed to "\r\n" automatically on Windows at package init time.
	LineBreak = "\n"

	// Variable regexp pattern: %(variable)s
	varPattern = regexp.MustCompile(`%\(([^)]+)\)s`)

	// DefaultHeader explicitly writes default section header.
	DefaultHeader = false

	// PrettySection indicates whether to put a line between sections.
	PrettySection = true
	// PrettyFormat indicates whether to align "=" sign with spaces to produce pretty output
	// or reduce all possible spaces for compact format.
	PrettyFormat = true
	// PrettyEqual places spaces around "=" sign even when PrettyFormat is false.
	PrettyEqual = false
	// DefaultFormatLeft places custom spaces on the left when PrettyFormat and PrettyEqual are both disabled.
	DefaultFormatLeft = ""
	// DefaultFormatRight places custom spaces on the right when PrettyFormat and PrettyEqual are both disabled.
	DefaultFormatRight = ""
)

var inTest = len(os.Args) > 0 && strings.HasSuffix(strings.TrimSuffix(os.Args[0], ".exe"), ".test")

func init() {
	if runtime.GOOS == "windows" && !inTest {
		LineBreak = "\r\n"
	}
}

// LoadOptions contains all customized options used for load data source(s).
type LoadOptions struct {
	// Loose indicates whether the parser should ignore nonexistent files or return error.
	Loose bool
	// Insensitive indicates whether the parser forces all section and key names to lowercase.
	Insensitive bool
	// InsensitiveSections indicates whether the parser forces all section to lowercase.
	InsensitiveSections bool
	// InsensitiveKeys indicates whether the parser forces all key names to lowercase.
	InsensitiveKeys bool
	// IgnoreContinuation indicates whether to ignore continuation lines while parsing.
	IgnoreContinuation bool
	// IgnoreInlineComment indicates whether to ignore comments at the end of value and treat it as part of value.
	IgnoreInlineComment bool
	// SkipUnrecognizableLines indicates whether to skip unrecognizable lines that do not conform to key/value pairs.
	SkipUnrecognizableLines bool
	// ShortCircuit indicates whether to ignore other configuration sources after loaded the first available configuration source.
	ShortCircuit bool
	// AllowBooleanKeys indicates whether to allow boolean type keys or treat as value is missing.
	// This type of keys are mostly used in my.cnf.
	AllowBooleanKeys bool
	// AllowShadows indicates whether to keep track of keys with same name under same section.
	AllowShadows bool
	// AllowNestedValues indicates whether to allow AWS-like nested values.
	// Docs: http://docs.aws.amazon.com/cli/latest/topic/config-vars.html#nested-values
	AllowNestedValues bool
	// AllowPythonMultilineValues indicates whether to allow Python-like multi-line values.
	// Docs: https://docs.python.org/3/library/configparser.html#supported-ini-file-structure
	// Relevant quote:  Values can also span multiple lines, as long as they are indented deeper
	// than the first line of the value.
	AllowPythonMultilineValues bool
	// SpaceBeforeInlineComment indicates whether to allow comment symbols (\# and \;) inside value.
	// Docs: https://docs.python.org/2/library/configparser.html
	// Quote: Comments may appear on their own in an otherwise empty line, or may be entered in lines holding values or section names.
	// In the latter case, they need to be preceded by a whitespace character to be recognized as a comment.
	SpaceBeforeInlineComment bool
	// UnescapeValueDoubleQuotes indicates whether to unescape double quotes inside value to regular format
	// when value is surrounded by double quotes, e.g. key="a \"value\"" => key=a "value"
	UnescapeValueDoubleQuotes bool
	// UnescapeValueCommentSymbols indicates to unescape comment symbols (\# and \;) inside value to regular format
	// when value is NOT surrounded by any quotes.
	// Note: UNSTABLE, behavior might change to only unescape inside double quotes but may noy necessary at all.
	UnescapeValueCommentSymbols bool
	// UnparseableSections stores a list of blocks that are allowed with raw content which do not otherwise
	// conform to key/value pairs. Specify the names of those blocks here.
	UnparseableSections []string
	// KeyValueDelimiters is the sequence of delimiters that are used to separate key and value. By default, it is "=:".
	KeyValueDelimiters string
	// KeyValueDelimiterOnWrite is the delimiter that are used to separate key and value output. By default, it is "=".
	KeyValueDelimiterOnWrite string
	// ChildSectionDelimiter is the delimiter that is used to separate child sections. By default, it is ".".
	ChildSectionDelimiter string
	// PreserveSurroundedQuote indicates whether to preserve surrounded quote (single and double quotes).
	PreserveSurroundedQuote bool
	// DebugFunc is called to collect debug information (currently only useful to debug parsing Python-style multiline values).
	DebugFunc DebugFunc
	// ReaderBufferSize is the buffer size of the reader in bytes.
	ReaderBufferSize int
	// AllowNonUniqueSections indicates whether to allow sections with the same name multiple times.
	AllowNonUniqueSections bool
	// AllowDuplicateShadowValues indicates whether values for shadowed keys should be deduplicated.
	AllowDuplicateShadowValues bool
}

// DebugFunc is the type of function called to log parse events.
type DebugFunc func(message string)

// LoadSources allows caller to apply customized options for loading from data source(s).
func LoadSources(opts LoadOptions, source interface{}, others ...interface{}) (_ *File, err error) {
	sources := make([]dataSource, len(others)+1)
	sources[0], err = parseDataSource(source)
	if err != nil {
		return nil, err
	}
	for i := range others {
		sources[i+1], err = parseDataSource(others[i])
		if err != nil {
			return nil, err
		}
	}
	f := newFile(sources, opts)
	if err = f.Reload(); err != nil {
		return nil, err
	}
	return f, nil
}

// Load loads and parses from INI data sources.
// Arguments can be mixed of file name with string type, or raw data in []byte.
// It will return error if list contains nonexistent files.
func Load(source interface{}, others ...interface{}) (*File, error) {
	return LoadSources(LoadOptions{}, source, others...)
}

// LooseLoad has exactly same functionality as Load function
// except it ignores nonexistent files instead of returning error.
func LooseLoad(source interface{}, others ...interface{}) (*File, error) {
	return LoadSources(LoadOptions{Loose: true}, source, others...)
}

// InsensitiveLoad has exactly same functionality as Load function
// except it forces all section and key names to be lowercased.
func InsensitiveLoad(source interface{}, others ...interface{}) (*File, error) {
	return LoadSources(LoadOptions{Insensitive: true}, source, others...)
}

// ShadowLoad has exactly same functionality as Load function
// except it allows have shadow keys.
func ShadowLoad(source interface{}, others ...interface{}) (*File, error) {
	return LoadSources(LoadOptions{AllowShadows: true}, source, others...)
}
 07070100000FD7000081A4000000000000000000000001645E367C00005F55000000000000000000000000000000000000003200000000elemental-cli-0.3.1/vendor/gopkg.in/ini.v1/key.go // Copyright 2014 Unknwon
//
// Licensed under the Apache License, Version 2.0 (the "License"): you may
// not use this file except in compliance with the License. You may obtain
// a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations
// under the License.

package ini

import (
	"bytes"
	"errors"
	"fmt"
	"strconv"
	"strings"
	"time"
)

// Key represents a key under a section.
type Key struct {
	s               *Section
	Comment         string
	name            string
	value           string
	isAutoIncrement bool
	isBooleanType   bool

	isShadow bool
	shadows  []*Key

	nestedValues []string
}

// newKey simply return a key object with given values.
func newKey(s *Section, name, val string) *Key {
	return &Key{
		s:     s,
		name:  name,
		value: val,
	}
}

func (k *Key) addShadow(val string) error {
	if k.isShadow {
		return errors.New("cannot add shadow to another shadow key")
	} else if k.isAutoIncrement || k.isBooleanType {
		return errors.New("cannot add shadow to auto-increment or boolean key")
	}

	if !k.s.f.options.AllowDuplicateShadowValues {
		// Deduplicate shadows based on their values.
		if k.value == val {
			return nil
		}
		for i := range k.shadows {
			if k.shadows[i].value == val {
				return nil
			}
		}
	}

	shadow := newKey(k.s, k.name, val)
	shadow.isShadow = true
	k.shadows = append(k.shadows, shadow)
	return nil
}

// AddShadow adds a new shadow key to itself.
func (k *Key) AddShadow(val string) error {
	if !k.s.f.options.AllowShadows {
		return errors.New("shadow key is not allowed")
	}
	return k.addShadow(val)
}

func (k *Key) addNestedValue(val string) error {
	if k.isAutoIncrement || k.isBooleanType {
		return errors.New("cannot add nested value to auto-increment or boolean key")
	}

	k.nestedValues = append(k.nestedValues, val)
	return nil
}

// AddNestedValue adds a nested value to the key.
func (k *Key) AddNestedValue(val string) error {
	if !k.s.f.options.AllowNestedValues {
		return errors.New("nested value is not allowed")
	}
	return k.addNestedValue(val)
}

// ValueMapper represents a mapping function for values, e.g. os.ExpandEnv
type ValueMapper func(string) string

// Name returns name of key.
func (k *Key) Name() string {
	return k.name
}

// Value returns raw value of key for performance purpose.
func (k *Key) Value() string {
	return k.value
}

// ValueWithShadows returns raw values of key and its shadows if any. Shadow
// keys with empty values are ignored from the returned list.
func (k *Key) ValueWithShadows() []string {
	if len(k.shadows) == 0 {
		if k.value == "" {
			return []string{}
		}
		return []string{k.value}
	}

	vals := make([]string, 0, len(k.shadows)+1)
	if k.value != "" {
		vals = append(vals, k.value)
	}
	for _, s := range k.shadows {
		if s.value != "" {
			vals = append(vals, s.value)
		}
	}
	return vals
}

// NestedValues returns nested values stored in the key.
// It is possible returned value is nil if no nested values stored in the key.
func (k *Key) NestedValues() []string {
	return k.nestedValues
}

// transformValue takes a raw value and transforms to its final string.
func (k *Key) transformValue(val string) string {
	if k.s.f.ValueMapper != nil {
		val = k.s.f.ValueMapper(val)
	}

	// Fail-fast if no indicate char found for recursive value
	if !strings.Contains(val, "%") {
		return val
	}
	for i := 0; i < depthValues; i++ {
		vr := varPattern.FindString(val)
		if len(vr) == 0 {
			break
		}

		// Take off leading '%(' and trailing ')s'.
		noption := vr[2 : len(vr)-2]

		// Search in the same section.
		// If not found or found the key itself, then search again in default section.
		nk, err := k.s.GetKey(noption)
		if err != nil || k == nk {
			nk, _ = k.s.f.Section("").GetKey(noption)
			if nk == nil {
				// Stop when no results found in the default section,
				// and returns the value as-is.
				break
			}
		}

		// Substitute by new value and take off leading '%(' and trailing ')s'.
		val = strings.Replace(val, vr, nk.value, -1)
	}
	return val
}

// String returns string representation of value.
func (k *Key) String() string {
	return k.transformValue(k.value)
}

// Validate accepts a validate function which can
// return modifed result as key value.
func (k *Key) Validate(fn func(string) string) string {
	return fn(k.String())
}

// parseBool returns the boolean value represented by the string.
//
// It accepts 1, t, T, TRUE, true, True, YES, yes, Yes, y, ON, on, On,
// 0, f, F, FALSE, false, False, NO, no, No, n, OFF, off, Off.
// Any other value returns an error.
func parseBool(str string) (value bool, err error) {
	switch str {
	case "1", "t", "T", "true", "TRUE", "True", "YES", "yes", "Yes", "y", "ON", "on", "On":
		return true, nil
	case "0", "f", "F", "false", "FALSE", "False", "NO", "no", "No", "n", "OFF", "off", "Off":
		return false, nil
	}
	return false, fmt.Errorf("parsing \"%s\": invalid syntax", str)
}

// Bool returns bool type value.
func (k *Key) Bool() (bool, error) {
	return parseBool(k.String())
}

// Float64 returns float64 type value.
func (k *Key) Float64() (float64, error) {
	return strconv.ParseFloat(k.String(), 64)
}

// Int returns int type value.
func (k *Key) Int() (int, error) {
	v, err := strconv.ParseInt(k.String(), 0, 64)
	return int(v), err
}

// Int64 returns int64 type value.
func (k *Key) Int64() (int64, error) {
	return strconv.ParseInt(k.String(), 0, 64)
}

// Uint returns uint type valued.
func (k *Key) Uint() (uint, error) {
	u, e := strconv.ParseUint(k.String(), 0, 64)
	return uint(u), e
}

// Uint64 returns uint64 type value.
func (k *Key) Uint64() (uint64, error) {
	return strconv.ParseUint(k.String(), 0, 64)
}

// Duration returns time.Duration type value.
func (k *Key) Duration() (time.Duration, error) {
	return time.ParseDuration(k.String())
}

// TimeFormat parses with given format and returns time.Time type value.
func (k *Key) TimeFormat(format string) (time.Time, error) {
	return time.Parse(format, k.String())
}

// Time parses with RFC3339 format and returns time.Time type value.
func (k *Key) Time() (time.Time, error) {
	return k.TimeFormat(time.RFC3339)
}

// MustString returns default value if key value is empty.
func (k *Key) MustString(defaultVal string) string {
	val := k.String()
	if len(val) == 0 {
		k.value = defaultVal
		return defaultVal
	}
	return val
}

// MustBool always returns value without error,
// it returns false if error occurs.
func (k *Key) MustBool(defaultVal ...bool) bool {
	val, err := k.Bool()
	if len(defaultVal) > 0 && err != nil {
		k.value = strconv.FormatBool(defaultVal[0])
		return defaultVal[0]
	}
	return val
}

// MustFloat64 always returns value without error,
// it returns 0.0 if error occurs.
func (k *Key) MustFloat64(defaultVal ...float64) float64 {
	val, err := k.Float64()
	if len(defaultVal) > 0 && err != nil {
		k.value = strconv.FormatFloat(defaultVal[0], 'f', -1, 64)
		return defaultVal[0]
	}
	return val
}

// MustInt always returns value without error,
// it returns 0 if error occurs.
func (k *Key) MustInt(defaultVal ...int) int {
	val, err := k.Int()
	if len(defaultVal) > 0 && err != nil {
		k.value = strconv.FormatInt(int64(defaultVal[0]), 10)
		return defaultVal[0]
	}
	return val
}

// MustInt64 always returns value without error,
// it returns 0 if error occurs.
func (k *Key) MustInt64(defaultVal ...int64) int64 {
	val, err := k.Int64()
	if len(defaultVal) > 0 && err != nil {
		k.value = strconv.FormatInt(defaultVal[0], 10)
		return defaultVal[0]
	}
	return val
}

// MustUint always returns value without error,
// it returns 0 if error occurs.
func (k *Key) MustUint(defaultVal ...uint) uint {
	val, err := k.Uint()
	if len(defaultVal) > 0 && err != nil {
		k.value = strconv.FormatUint(uint64(defaultVal[0]), 10)
		return defaultVal[0]
	}
	return val
}

// MustUint64 always returns value without error,
// it returns 0 if error occurs.
func (k *Key) MustUint64(defaultVal ...uint64) uint64 {
	val, err := k.Uint64()
	if len(defaultVal) > 0 && err != nil {
		k.value = strconv.FormatUint(defaultVal[0], 10)
		return defaultVal[0]
	}
	return val
}

// MustDuration always returns value without error,
// it returns zero value if error occurs.
func (k *Key) MustDuration(defaultVal ...time.Duration) time.Duration {
	val, err := k.Duration()
	if len(defaultVal) > 0 && err != nil {
		k.value = defaultVal[0].String()
		return defaultVal[0]
	}
	return val
}

// MustTimeFormat always parses with given format and returns value without error,
// it returns zero value if error occurs.
func (k *Key) MustTimeFormat(format string, defaultVal ...time.Time) time.Time {
	val, err := k.TimeFormat(format)
	if len(defaultVal) > 0 && err != nil {
		k.value = defaultVal[0].Format(format)
		return defaultVal[0]
	}
	return val
}

// MustTime always parses with RFC3339 format and returns value without error,
// it returns zero value if error occurs.
func (k *Key) MustTime(defaultVal ...time.Time) time.Time {
	return k.MustTimeFormat(time.RFC3339, defaultVal...)
}

// In always returns value without error,
// it returns default value if error occurs or doesn't fit into candidates.
func (k *Key) In(defaultVal string, candidates []string) string {
	val := k.String()
	for _, cand := range candidates {
		if val == cand {
			return val
		}
	}
	return defaultVal
}

// InFloat64 always returns value without error,
// it returns default value if error occurs or doesn't fit into candidates.
func (k *Key) InFloat64(defaultVal float64, candidates []float64) float64 {
	val := k.MustFloat64()
	for _, cand := range candidates {
		if val == cand {
			return val
		}
	}
	return defaultVal
}

// InInt always returns value without error,
// it returns default value if error occurs or doesn't fit into candidates.
func (k *Key) InInt(defaultVal int, candidates []int) int {
	val := k.MustInt()
	for _, cand := range candidates {
		if val == cand {
			return val
		}
	}
	return defaultVal
}

// InInt64 always returns value without error,
// it returns default value if error occurs or doesn't fit into candidates.
func (k *Key) InInt64(defaultVal int64, candidates []int64) int64 {
	val := k.MustInt64()
	for _, cand := range candidates {
		if val == cand {
			return val
		}
	}
	return defaultVal
}

// InUint always returns value without error,
// it returns default value if error occurs or doesn't fit into candidates.
func (k *Key) InUint(defaultVal uint, candidates []uint) uint {
	val := k.MustUint()
	for _, cand := range candidates {
		if val == cand {
			return val
		}
	}
	return defaultVal
}

// InUint64 always returns value without error,
// it returns default value if error occurs or doesn't fit into candidates.
func (k *Key) InUint64(defaultVal uint64, candidates []uint64) uint64 {
	val := k.MustUint64()
	for _, cand := range candidates {
		if val == cand {
			return val
		}
	}
	return defaultVal
}

// InTimeFormat always parses with given format and returns value without error,
// it returns default value if error occurs or doesn't fit into candidates.
func (k *Key) InTimeFormat(format string, defaultVal time.Time, candidates []time.Time) time.Time {
	val := k.MustTimeFormat(format)
	for _, cand := range candidates {
		if val == cand {
			return val
		}
	}
	return defaultVal
}

// InTime always parses with RFC3339 format and returns value without error,
// it returns default value if error occurs or doesn't fit into candidates.
func (k *Key) InTime(defaultVal time.Time, candidates []time.Time) time.Time {
	return k.InTimeFormat(time.RFC3339, defaultVal, candidates)
}

// RangeFloat64 checks if value is in given range inclusively,
// and returns default value if it's not.
func (k *Key) RangeFloat64(defaultVal, min, max float64) float64 {
	val := k.MustFloat64()
	if val < min || val > max {
		return defaultVal
	}
	return val
}

// RangeInt checks if value is in given range inclusively,
// and returns default value if it's not.
func (k *Key) RangeInt(defaultVal, min, max int) int {
	val := k.MustInt()
	if val < min || val > max {
		return defaultVal
	}
	return val
}

// RangeInt64 checks if value is in given range inclusively,
// and returns default value if it's not.
func (k *Key) RangeInt64(defaultVal, min, max int64) int64 {
	val := k.MustInt64()
	if val < min || val > max {
		return defaultVal
	}
	return val
}

// RangeTimeFormat checks if value with given format is in given range inclusively,
// and returns default value if it's not.
func (k *Key) RangeTimeFormat(format string, defaultVal, min, max time.Time) time.Time {
	val := k.MustTimeFormat(format)
	if val.Unix() < min.Unix() || val.Unix() > max.Unix() {
		return defaultVal
	}
	return val
}

// RangeTime checks if value with RFC3339 format is in given range inclusively,
// and returns default value if it's not.
func (k *Key) RangeTime(defaultVal, min, max time.Time) time.Time {
	return k.RangeTimeFormat(time.RFC3339, defaultVal, min, max)
}

// Strings returns list of string divided by given delimiter.
func (k *Key) Strings(delim string) []string {
	str := k.String()
	if len(str) == 0 {
		return []string{}
	}

	runes := []rune(str)
	vals := make([]string, 0, 2)
	var buf bytes.Buffer
	escape := false
	idx := 0
	for {
		if escape {
			escape = false
			if runes[idx] != '\\' && !strings.HasPrefix(string(runes[idx:]), delim) {
				buf.WriteRune('\\')
			}
			buf.WriteRune(runes[idx])
		} else {
			if runes[idx] == '\\' {
				escape = true
			} else if strings.HasPrefix(string(runes[idx:]), delim) {
				idx += len(delim) - 1
				vals = append(vals, strings.TrimSpace(buf.String()))
				buf.Reset()
			} else {
				buf.WriteRune(runes[idx])
			}
		}
		idx++
		if idx == len(runes) {
			break
		}
	}

	if buf.Len() > 0 {
		vals = append(vals, strings.TrimSpace(buf.String()))
	}

	return vals
}

// StringsWithShadows returns list of string divided by given delimiter.
// Shadows will also be appended if any.
func (k *Key) StringsWithShadows(delim string) []string {
	vals := k.ValueWithShadows()
	results := make([]string, 0, len(vals)*2)
	for i := range vals {
		if len(vals) == 0 {
			continue
		}

		results = append(results, strings.Split(vals[i], delim)...)
	}

	for i := range results {
		results[i] = k.transformValue(strings.TrimSpace(results[i]))
	}
	return results
}

// Float64s returns list of float64 divided by given delimiter. Any invalid input will be treated as zero value.
func (k *Key) Float64s(delim string) []float64 {
	vals, _ := k.parseFloat64s(k.Strings(delim), true, false)
	return vals
}

// Ints returns list of int divided by given delimiter. Any invalid input will be treated as zero value.
func (k *Key) Ints(delim string) []int {
	vals, _ := k.parseInts(k.Strings(delim), true, false)
	return vals
}

// Int64s returns list of int64 divided by given delimiter. Any invalid input will be treated as zero value.
func (k *Key) Int64s(delim string) []int64 {
	vals, _ := k.parseInt64s(k.Strings(delim), true, false)
	return vals
}

// Uints returns list of uint divided by given delimiter. Any invalid input will be treated as zero value.
func (k *Key) Uints(delim string) []uint {
	vals, _ := k.parseUints(k.Strings(delim), true, false)
	return vals
}

// Uint64s returns list of uint64 divided by given delimiter. Any invalid input will be treated as zero value.
func (k *Key) Uint64s(delim string) []uint64 {
	vals, _ := k.parseUint64s(k.Strings(delim), true, false)
	return vals
}

// Bools returns list of bool divided by given delimiter. Any invalid input will be treated as zero value.
func (k *Key) Bools(delim string) []bool {
	vals, _ := k.parseBools(k.Strings(delim), true, false)
	return vals
}

// TimesFormat parses with given format and returns list of time.Time divided by given delimiter.
// Any invalid input will be treated as zero value (0001-01-01 00:00:00 +0000 UTC).
func (k *Key) TimesFormat(format, delim string) []time.Time {
	vals, _ := k.parseTimesFormat(format, k.Strings(delim), true, false)
	return vals
}

// Times parses with RFC3339 format and returns list of time.Time divided by given delimiter.
// Any invalid input will be treated as zero value (0001-01-01 00:00:00 +0000 UTC).
func (k *Key) Times(delim string) []time.Time {
	return k.TimesFormat(time.RFC3339, delim)
}

// ValidFloat64s returns list of float64 divided by given delimiter. If some value is not float, then
// it will not be included to result list.
func (k *Key) ValidFloat64s(delim string) []float64 {
	vals, _ := k.parseFloat64s(k.Strings(delim), false, false)
	return vals
}

// ValidInts returns list of int divided by given delimiter. If some value is not integer, then it will
// not be included to result list.
func (k *Key) ValidInts(delim string) []int {
	vals, _ := k.parseInts(k.Strings(delim), false, false)
	return vals
}

// ValidInt64s returns list of int64 divided by given delimiter. If some value is not 64-bit integer,
// then it will not be included to result list.
func (k *Key) ValidInt64s(delim string) []int64 {
	vals, _ := k.parseInt64s(k.Strings(delim), false, false)
	return vals
}

// ValidUints returns list of uint divided by given delimiter. If some value is not unsigned integer,
// then it will not be included to result list.
func (k *Key) ValidUints(delim string) []uint {
	vals, _ := k.parseUints(k.Strings(delim), false, false)
	return vals
}

// ValidUint64s returns list of uint64 divided by given delimiter. If some value is not 64-bit unsigned
// integer, then it will not be included to result list.
func (k *Key) ValidUint64s(delim string) []uint64 {
	vals, _ := k.parseUint64s(k.Strings(delim), false, false)
	return vals
}

// ValidBools returns list of bool divided by given delimiter. If some value is not 64-bit unsigned
// integer, then it will not be included to result list.
func (k *Key) ValidBools(delim string) []bool {
	vals, _ := k.parseBools(k.Strings(delim), false, false)
	return vals
}

// ValidTimesFormat parses with given format and returns list of time.Time divided by given delimiter.
func (k *Key) ValidTimesFormat(format, delim string) []time.Time {
	vals, _ := k.parseTimesFormat(format, k.Strings(delim), false, false)
	return vals
}

// ValidTimes parses with RFC3339 format and returns list of time.Time divided by given delimiter.
func (k *Key) ValidTimes(delim string) []time.Time {
	return k.ValidTimesFormat(time.RFC3339, delim)
}

// StrictFloat64s returns list of float64 divided by given delimiter or error on first invalid input.
func (k *Key) StrictFloat64s(delim string) ([]float64, error) {
	return k.parseFloat64s(k.Strings(delim), false, true)
}

// StrictInts returns list of int divided by given delimiter or error on first invalid input.
func (k *Key) StrictInts(delim string) ([]int, error) {
	return k.parseInts(k.Strings(delim), false, true)
}

// StrictInt64s returns list of int64 divided by given delimiter or error on first invalid input.
func (k *Key) StrictInt64s(delim string) ([]int64, error) {
	return k.parseInt64s(k.Strings(delim), false, true)
}

// StrictUints returns list of uint divided by given delimiter or error on first invalid input.
func (k *Key) StrictUints(delim string) ([]uint, error) {
	return k.parseUints(k.Strings(delim), false, true)
}

// StrictUint64s returns list of uint64 divided by given delimiter or error on first invalid input.
func (k *Key) StrictUint64s(delim string) ([]uint64, error) {
	return k.parseUint64s(k.Strings(delim), false, true)
}

// StrictBools returns list of bool divided by given delimiter or error on first invalid input.
func (k *Key) StrictBools(delim string) ([]bool, error) {
	return k.parseBools(k.Strings(delim), false, true)
}

// StrictTimesFormat parses with given format and returns list of time.Time divided by given delimiter
// or error on first invalid input.
func (k *Key) StrictTimesFormat(format, delim string) ([]time.Time, error) {
	return k.parseTimesFormat(format, k.Strings(delim), false, true)
}

// StrictTimes parses with RFC3339 format and returns list of time.Time divided by given delimiter
// or error on first invalid input.
func (k *Key) StrictTimes(delim string) ([]time.Time, error) {
	return k.StrictTimesFormat(time.RFC3339, delim)
}

// parseBools transforms strings to bools.
func (k *Key) parseBools(strs []string, addInvalid, returnOnInvalid bool) ([]bool, error) {
	vals := make([]bool, 0, len(strs))
	parser := func(str string) (interface{}, error) {
		val, err := parseBool(str)
		return val, err
	}
	rawVals, err := k.doParse(strs, addInvalid, returnOnInvalid, parser)
	if err == nil {
		for _, val := range rawVals {
			vals = append(vals, val.(bool))
		}
	}
	return vals, err
}

// parseFloat64s transforms strings to float64s.
func (k *Key) parseFloat64s(strs []string, addInvalid, returnOnInvalid bool) ([]float64, error) {
	vals := make([]float64, 0, len(strs))
	parser := func(str string) (interface{}, error) {
		val, err := strconv.ParseFloat(str, 64)
		return val, err
	}
	rawVals, err := k.doParse(strs, addInvalid, returnOnInvalid, parser)
	if err == nil {
		for _, val := range rawVals {
			vals = append(vals, val.(float64))
		}
	}
	return vals, err
}

// parseInts transforms strings to ints.
func (k *Key) parseInts(strs []string, addInvalid, returnOnInvalid bool) ([]int, error) {
	vals := make([]int, 0, len(strs))
	parser := func(str string) (interface{}, error) {
		val, err := strconv.ParseInt(str, 0, 64)
		return val, err
	}
	rawVals, err := k.doParse(strs, addInvalid, returnOnInvalid, parser)
	if err == nil {
		for _, val := range rawVals {
			vals = append(vals, int(val.(int64)))
		}
	}
	return vals, err
}

// parseInt64s transforms strings to int64s.
func (k *Key) parseInt64s(strs []string, addInvalid, returnOnInvalid bool) ([]int64, error) {
	vals := make([]int64, 0, len(strs))
	parser := func(str string) (interface{}, error) {
		val, err := strconv.ParseInt(str, 0, 64)
		return val, err
	}

	rawVals, err := k.doParse(strs, addInvalid, returnOnInvalid, parser)
	if err == nil {
		for _, val := range rawVals {
			vals = append(vals, val.(int64))
		}
	}
	return vals, err
}

// parseUints transforms strings to uints.
func (k *Key) parseUints(strs []string, addInvalid, returnOnInvalid bool) ([]uint, error) {
	vals := make([]uint, 0, len(strs))
	parser := func(str string) (interface{}, error) {
		val, err := strconv.ParseUint(str, 0, 64)
		return val, err
	}

	rawVals, err := k.doParse(strs, addInvalid, returnOnInvalid, parser)
	if err == nil {
		for _, val := range rawVals {
			vals = append(vals, uint(val.(uint64)))
		}
	}
	return vals, err
}

// parseUint64s transforms strings to uint64s.
func (k *Key) parseUint64s(strs []string, addInvalid, returnOnInvalid bool) ([]uint64, error) {
	vals := make([]uint64, 0, len(strs))
	parser := func(str string) (interface{}, error) {
		val, err := strconv.ParseUint(str, 0, 64)
		return val, err
	}
	rawVals, err := k.doParse(strs, addInvalid, returnOnInvalid, parser)
	if err == nil {
		for _, val := range rawVals {
			vals = append(vals, val.(uint64))
		}
	}
	return vals, err
}

type Parser func(str string) (interface{}, error)

// parseTimesFormat transforms strings to times in given format.
func (k *Key) parseTimesFormat(format string, strs []string, addInvalid, returnOnInvalid bool) ([]time.Time, error) {
	vals := make([]time.Time, 0, len(strs))
	parser := func(str string) (interface{}, error) {
		val, err := time.Parse(format, str)
		return val, err
	}
	rawVals, err := k.doParse(strs, addInvalid, returnOnInvalid, parser)
	if err == nil {
		for _, val := range rawVals {
			vals = append(vals, val.(time.Time))
		}
	}
	return vals, err
}

// doParse transforms strings to different types
func (k *Key) doParse(strs []string, addInvalid, returnOnInvalid bool, parser Parser) ([]interface{}, error) {
	vals := make([]interface{}, 0, len(strs))
	for _, str := range strs {
		val, err := parser(str)
		if err != nil && returnOnInvalid {
			return nil, err
		}
		if err == nil || addInvalid {
			vals = append(vals, val)
		}
	}
	return vals, nil
}

// SetValue changes key value.
func (k *Key) SetValue(v string) {
	if k.s.f.BlockMode {
		k.s.f.lock.Lock()
		defer k.s.f.lock.Unlock()
	}

	k.value = v
	k.s.keysHash[k.name] = v
}
   07070100000FD8000081A4000000000000000000000001645E367C00003304000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/gopkg.in/ini.v1/parser.go  // Copyright 2015 Unknwon
//
// Licensed under the Apache License, Version 2.0 (the "License"): you may
// not use this file except in compliance with the License. You may obtain
// a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations
// under the License.

package ini

import (
	"bufio"
	"bytes"
	"fmt"
	"io"
	"regexp"
	"strconv"
	"strings"
	"unicode"
)

const minReaderBufferSize = 4096

var pythonMultiline = regexp.MustCompile(`^([\t\f ]+)(.*)`)

type parserOptions struct {
	IgnoreContinuation          bool
	IgnoreInlineComment         bool
	AllowPythonMultilineValues  bool
	SpaceBeforeInlineComment    bool
	UnescapeValueDoubleQuotes   bool
	UnescapeValueCommentSymbols bool
	PreserveSurroundedQuote     bool
	DebugFunc                   DebugFunc
	ReaderBufferSize            int
}

type parser struct {
	buf     *bufio.Reader
	options parserOptions

	isEOF   bool
	count   int
	comment *bytes.Buffer
}

func (p *parser) debug(format string, args ...interface{}) {
	if p.options.DebugFunc != nil {
		p.options.DebugFunc(fmt.Sprintf(format, args...))
	}
}

func newParser(r io.Reader, opts parserOptions) *parser {
	size := opts.ReaderBufferSize
	if size < minReaderBufferSize {
		size = minReaderBufferSize
	}

	return &parser{
		buf:     bufio.NewReaderSize(r, size),
		options: opts,
		count:   1,
		comment: &bytes.Buffer{},
	}
}

// BOM handles header of UTF-8, UTF-16 LE and UTF-16 BE's BOM format.
// http://en.wikipedia.org/wiki/Byte_order_mark#Representations_of_byte_order_marks_by_encoding
func (p *parser) BOM() error {
	mask, err := p.buf.Peek(2)
	if err != nil && err != io.EOF {
		return err
	} else if len(mask) < 2 {
		return nil
	}

	switch {
	case mask[0] == 254 && mask[1] == 255:
		fallthrough
	case mask[0] == 255 && mask[1] == 254:
		_, err = p.buf.Read(mask)
		if err != nil {
			return err
		}
	case mask[0] == 239 && mask[1] == 187:
		mask, err := p.buf.Peek(3)
		if err != nil && err != io.EOF {
			return err
		} else if len(mask) < 3 {
			return nil
		}
		if mask[2] == 191 {
			_, err = p.buf.Read(mask)
			if err != nil {
				return err
			}
		}
	}
	return nil
}

func (p *parser) readUntil(delim byte) ([]byte, error) {
	data, err := p.buf.ReadBytes(delim)
	if err != nil {
		if err == io.EOF {
			p.isEOF = true
		} else {
			return nil, err
		}
	}
	return data, nil
}

func cleanComment(in []byte) ([]byte, bool) {
	i := bytes.IndexAny(in, "#;")
	if i == -1 {
		return nil, false
	}
	return in[i:], true
}

func readKeyName(delimiters string, in []byte) (string, int, error) {
	line := string(in)

	// Check if key name surrounded by quotes.
	var keyQuote string
	if line[0] == '"' {
		if len(line) > 6 && line[0:3] == `"""` {
			keyQuote = `"""`
		} else {
			keyQuote = `"`
		}
	} else if line[0] == '`' {
		keyQuote = "`"
	}

	// Get out key name
	var endIdx int
	if len(keyQuote) > 0 {
		startIdx := len(keyQuote)
		// FIXME: fail case -> """"""name"""=value
		pos := strings.Index(line[startIdx:], keyQuote)
		if pos == -1 {
			return "", -1, fmt.Errorf("missing closing key quote: %s", line)
		}
		pos += startIdx

		// Find key-value delimiter
		i := strings.IndexAny(line[pos+startIdx:], delimiters)
		if i < 0 {
			return "", -1, ErrDelimiterNotFound{line}
		}
		endIdx = pos + i
		return strings.TrimSpace(line[startIdx:pos]), endIdx + startIdx + 1, nil
	}

	endIdx = strings.IndexAny(line, delimiters)
	if endIdx < 0 {
		return "", -1, ErrDelimiterNotFound{line}
	}
	if endIdx == 0 {
		return "", -1, ErrEmptyKeyName{line}
	}

	return strings.TrimSpace(line[0:endIdx]), endIdx + 1, nil
}

func (p *parser) readMultilines(line, val, valQuote string) (string, error) {
	for {
		data, err := p.readUntil('\n')
		if err != nil {
			return "", err
		}
		next := string(data)

		pos := strings.LastIndex(next, valQuote)
		if pos > -1 {
			val += next[:pos]

			comment, has := cleanComment([]byte(next[pos:]))
			if has {
				p.comment.Write(bytes.TrimSpace(comment))
			}
			break
		}
		val += next
		if p.isEOF {
			return "", fmt.Errorf("missing closing key quote from %q to %q", line, next)
		}
	}
	return val, nil
}

func (p *parser) readContinuationLines(val string) (string, error) {
	for {
		data, err := p.readUntil('\n')
		if err != nil {
			return "", err
		}
		next := strings.TrimSpace(string(data))

		if len(next) == 0 {
			break
		}
		val += next
		if val[len(val)-1] != '\\' {
			break
		}
		val = val[:len(val)-1]
	}
	return val, nil
}

// hasSurroundedQuote check if and only if the first and last characters
// are quotes \" or \'.
// It returns false if any other parts also contain same kind of quotes.
func hasSurroundedQuote(in string, quote byte) bool {
	return len(in) >= 2 && in[0] == quote && in[len(in)-1] == quote &&
		strings.IndexByte(in[1:], quote) == len(in)-2
}

func (p *parser) readValue(in []byte, bufferSize int) (string, error) {

	line := strings.TrimLeftFunc(string(in), unicode.IsSpace)
	if len(line) == 0 {
		if p.options.AllowPythonMultilineValues && len(in) > 0 && in[len(in)-1] == '\n' {
			return p.readPythonMultilines(line, bufferSize)
		}
		return "", nil
	}

	var valQuote string
	if len(line) > 3 && line[0:3] == `"""` {
		valQuote = `"""`
	} else if line[0] == '`' {
		valQuote = "`"
	} else if p.options.UnescapeValueDoubleQuotes && line[0] == '"' {
		valQuote = `"`
	}

	if len(valQuote) > 0 {
		startIdx := len(valQuote)
		pos := strings.LastIndex(line[startIdx:], valQuote)
		// Check for multi-line value
		if pos == -1 {
			return p.readMultilines(line, line[startIdx:], valQuote)
		}

		if p.options.UnescapeValueDoubleQuotes && valQuote == `"` {
			return strings.Replace(line[startIdx:pos+startIdx], `\"`, `"`, -1), nil
		}
		return line[startIdx : pos+startIdx], nil
	}

	lastChar := line[len(line)-1]
	// Won't be able to reach here if value only contains whitespace
	line = strings.TrimSpace(line)
	trimmedLastChar := line[len(line)-1]

	// Check continuation lines when desired
	if !p.options.IgnoreContinuation && trimmedLastChar == '\\' {
		return p.readContinuationLines(line[:len(line)-1])
	}

	// Check if ignore inline comment
	if !p.options.IgnoreInlineComment {
		var i int
		if p.options.SpaceBeforeInlineComment {
			i = strings.Index(line, " #")
			if i == -1 {
				i = strings.Index(line, " ;")
			}

		} else {
			i = strings.IndexAny(line, "#;")
		}

		if i > -1 {
			p.comment.WriteString(line[i:])
			line = strings.TrimSpace(line[:i])
		}

	}

	// Trim single and double quotes
	if (hasSurroundedQuote(line, '\'') ||
		hasSurroundedQuote(line, '"')) && !p.options.PreserveSurroundedQuote {
		line = line[1 : len(line)-1]
	} else if len(valQuote) == 0 && p.options.UnescapeValueCommentSymbols {
		line = strings.ReplaceAll(line, `\;`, ";")
		line = strings.ReplaceAll(line, `\#`, "#")
	} else if p.options.AllowPythonMultilineValues && lastChar == '\n' {
		return p.readPythonMultilines(line, bufferSize)
	}

	return line, nil
}

func (p *parser) readPythonMultilines(line string, bufferSize int) (string, error) {
	parserBufferPeekResult, _ := p.buf.Peek(bufferSize)
	peekBuffer := bytes.NewBuffer(parserBufferPeekResult)

	for {
		peekData, peekErr := peekBuffer.ReadBytes('\n')
		if peekErr != nil && peekErr != io.EOF {
			p.debug("readPythonMultilines: failed to peek with error: %v", peekErr)
			return "", peekErr
		}

		p.debug("readPythonMultilines: parsing %q", string(peekData))

		peekMatches := pythonMultiline.FindStringSubmatch(string(peekData))
		p.debug("readPythonMultilines: matched %d parts", len(peekMatches))
		for n, v := range peekMatches {
			p.debug("   %d: %q", n, v)
		}

		// Return if not a Python multiline value.
		if len(peekMatches) != 3 {
			p.debug("readPythonMultilines: end of value, got: %q", line)
			return line, nil
		}

		// Advance the parser reader (buffer) in-sync with the peek buffer.
		_, err := p.buf.Discard(len(peekData))
		if err != nil {
			p.debug("readPythonMultilines: failed to skip to the end, returning error")
			return "", err
		}

		line += "\n" + peekMatches[0]
	}
}

// parse parses data through an io.Reader.
func (f *File) parse(reader io.Reader) (err error) {
	p := newParser(reader, parserOptions{
		IgnoreContinuation:          f.options.IgnoreContinuation,
		IgnoreInlineComment:         f.options.IgnoreInlineComment,
		AllowPythonMultilineValues:  f.options.AllowPythonMultilineValues,
		SpaceBeforeInlineComment:    f.options.SpaceBeforeInlineComment,
		UnescapeValueDoubleQuotes:   f.options.UnescapeValueDoubleQuotes,
		UnescapeValueCommentSymbols: f.options.UnescapeValueCommentSymbols,
		PreserveSurroundedQuote:     f.options.PreserveSurroundedQuote,
		DebugFunc:                   f.options.DebugFunc,
		ReaderBufferSize:            f.options.ReaderBufferSize,
	})
	if err = p.BOM(); err != nil {
		return fmt.Errorf("BOM: %v", err)
	}

	// Ignore error because default section name is never empty string.
	name := DefaultSection
	if f.options.Insensitive || f.options.InsensitiveSections {
		name = strings.ToLower(DefaultSection)
	}
	section, _ := f.NewSection(name)

	// This "last" is not strictly equivalent to "previous one" if current key is not the first nested key
	var isLastValueEmpty bool
	var lastRegularKey *Key

	var line []byte
	var inUnparseableSection bool

	// NOTE: Iterate and increase `currentPeekSize` until
	// the size of the parser buffer is found.
	// TODO(unknwon): When Golang 1.10 is the lowest version supported, replace with `parserBufferSize := p.buf.Size()`.
	parserBufferSize := 0
	// NOTE: Peek 4kb at a time.
	currentPeekSize := minReaderBufferSize

	if f.options.AllowPythonMultilineValues {
		for {
			peekBytes, _ := p.buf.Peek(currentPeekSize)
			peekBytesLength := len(peekBytes)

			if parserBufferSize >= peekBytesLength {
				break
			}

			currentPeekSize *= 2
			parserBufferSize = peekBytesLength
		}
	}

	for !p.isEOF {
		line, err = p.readUntil('\n')
		if err != nil {
			return err
		}

		if f.options.AllowNestedValues &&
			isLastValueEmpty && len(line) > 0 {
			if line[0] == ' ' || line[0] == '\t' {
				err = lastRegularKey.addNestedValue(string(bytes.TrimSpace(line)))
				if err != nil {
					return err
				}
				continue
			}
		}

		line = bytes.TrimLeftFunc(line, unicode.IsSpace)
		if len(line) == 0 {
			continue
		}

		// Comments
		if line[0] == '#' || line[0] == ';' {
			// Note: we do not care ending line break,
			// it is needed for adding second line,
			// so just clean it once at the end when set to value.
			p.comment.Write(line)
			continue
		}

		// Section
		if line[0] == '[' {
			// Read to the next ']' (TODO: support quoted strings)
			closeIdx := bytes.LastIndexByte(line, ']')
			if closeIdx == -1 {
				return fmt.Errorf("unclosed section: %s", line)
			}

			name := string(line[1:closeIdx])
			section, err = f.NewSection(name)
			if err != nil {
				return err
			}

			comment, has := cleanComment(line[closeIdx+1:])
			if has {
				p.comment.Write(comment)
			}

			section.Comment = strings.TrimSpace(p.comment.String())

			// Reset auto-counter and comments
			p.comment.Reset()
			p.count = 1
			// Nested values can't span sections
			isLastValueEmpty = false

			inUnparseableSection = false
			for i := range f.options.UnparseableSections {
				if f.options.UnparseableSections[i] == name ||
					((f.options.Insensitive || f.options.InsensitiveSections) && strings.EqualFold(f.options.UnparseableSections[i], name)) {
					inUnparseableSection = true
					continue
				}
			}
			continue
		}

		if inUnparseableSection {
			section.isRawSection = true
			section.rawBody += string(line)
			continue
		}

		kname, offset, err := readKeyName(f.options.KeyValueDelimiters, line)
		if err != nil {
			switch {
			// Treat as boolean key when desired, and whole line is key name.
			case IsErrDelimiterNotFound(err):
				switch {
				case f.options.AllowBooleanKeys:
					kname, err := p.readValue(line, parserBufferSize)
					if err != nil {
						return err
					}
					key, err := section.NewBooleanKey(kname)
					if err != nil {
						return err
					}
					key.Comment = strings.TrimSpace(p.comment.String())
					p.comment.Reset()
					continue

				case f.options.SkipUnrecognizableLines:
					continue
				}
			case IsErrEmptyKeyName(err) && f.options.SkipUnrecognizableLines:
				continue
			}
			return err
		}

		// Auto increment.
		isAutoIncr := false
		if kname == "-" {
			isAutoIncr = true
			kname = "#" + strconv.Itoa(p.count)
			p.count++
		}

		value, err := p.readValue(line[offset:], parserBufferSize)
		if err != nil {
			return err
		}
		isLastValueEmpty = len(value) == 0

		key, err := section.NewKey(kname, value)
		if err != nil {
			return err
		}
		key.isAutoIncrement = isAutoIncr
		key.Comment = strings.TrimSpace(p.comment.String())
		p.comment.Reset()
		lastRegularKey = key
	}
	return nil
}
07070100000FD9000081A4000000000000000000000001645E367C000017AB000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/gopkg.in/ini.v1/section.go // Copyright 2014 Unknwon
//
// Licensed under the Apache License, Version 2.0 (the "License"): you may
// not use this file except in compliance with the License. You may obtain
// a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations
// under the License.

package ini

import (
	"errors"
	"fmt"
	"strings"
)

// Section represents a config section.
type Section struct {
	f        *File
	Comment  string
	name     string
	keys     map[string]*Key
	keyList  []string
	keysHash map[string]string

	isRawSection bool
	rawBody      string
}

func newSection(f *File, name string) *Section {
	return &Section{
		f:        f,
		name:     name,
		keys:     make(map[string]*Key),
		keyList:  make([]string, 0, 10),
		keysHash: make(map[string]string),
	}
}

// Name returns name of Section.
func (s *Section) Name() string {
	return s.name
}

// Body returns rawBody of Section if the section was marked as unparseable.
// It still follows the other rules of the INI format surrounding leading/trailing whitespace.
func (s *Section) Body() string {
	return strings.TrimSpace(s.rawBody)
}

// SetBody updates body content only if section is raw.
func (s *Section) SetBody(body string) {
	if !s.isRawSection {
		return
	}
	s.rawBody = body
}

// NewKey creates a new key to given section.
func (s *Section) NewKey(name, val string) (*Key, error) {
	if len(name) == 0 {
		return nil, errors.New("error creating new key: empty key name")
	} else if s.f.options.Insensitive || s.f.options.InsensitiveKeys {
		name = strings.ToLower(name)
	}

	if s.f.BlockMode {
		s.f.lock.Lock()
		defer s.f.lock.Unlock()
	}

	if inSlice(name, s.keyList) {
		if s.f.options.AllowShadows {
			if err := s.keys[name].addShadow(val); err != nil {
				return nil, err
			}
		} else {
			s.keys[name].value = val
			s.keysHash[name] = val
		}
		return s.keys[name], nil
	}

	s.keyList = append(s.keyList, name)
	s.keys[name] = newKey(s, name, val)
	s.keysHash[name] = val
	return s.keys[name], nil
}

// NewBooleanKey creates a new boolean type key to given section.
func (s *Section) NewBooleanKey(name string) (*Key, error) {
	key, err := s.NewKey(name, "true")
	if err != nil {
		return nil, err
	}

	key.isBooleanType = true
	return key, nil
}

// GetKey returns key in section by given name.
func (s *Section) GetKey(name string) (*Key, error) {
	if s.f.BlockMode {
		s.f.lock.RLock()
	}
	if s.f.options.Insensitive || s.f.options.InsensitiveKeys {
		name = strings.ToLower(name)
	}
	key := s.keys[name]
	if s.f.BlockMode {
		s.f.lock.RUnlock()
	}

	if key == nil {
		// Check if it is a child-section.
		sname := s.name
		for {
			if i := strings.LastIndex(sname, s.f.options.ChildSectionDelimiter); i > -1 {
				sname = sname[:i]
				sec, err := s.f.GetSection(sname)
				if err != nil {
					continue
				}
				return sec.GetKey(name)
			}
			break
		}
		return nil, fmt.Errorf("error when getting key of section %q: key %q not exists", s.name, name)
	}
	return key, nil
}

// HasKey returns true if section contains a key with given name.
func (s *Section) HasKey(name string) bool {
	key, _ := s.GetKey(name)
	return key != nil
}

// Deprecated: Use "HasKey" instead.
func (s *Section) Haskey(name string) bool {
	return s.HasKey(name)
}

// HasValue returns true if section contains given raw value.
func (s *Section) HasValue(value string) bool {
	if s.f.BlockMode {
		s.f.lock.RLock()
		defer s.f.lock.RUnlock()
	}

	for _, k := range s.keys {
		if value == k.value {
			return true
		}
	}
	return false
}

// Key assumes named Key exists in section and returns a zero-value when not.
func (s *Section) Key(name string) *Key {
	key, err := s.GetKey(name)
	if err != nil {
		// It's OK here because the only possible error is empty key name,
		// but if it's empty, this piece of code won't be executed.
		key, _ = s.NewKey(name, "")
		return key
	}
	return key
}

// Keys returns list of keys of section.
func (s *Section) Keys() []*Key {
	keys := make([]*Key, len(s.keyList))
	for i := range s.keyList {
		keys[i] = s.Key(s.keyList[i])
	}
	return keys
}

// ParentKeys returns list of keys of parent section.
func (s *Section) ParentKeys() []*Key {
	var parentKeys []*Key
	sname := s.name
	for {
		if i := strings.LastIndex(sname, s.f.options.ChildSectionDelimiter); i > -1 {
			sname = sname[:i]
			sec, err := s.f.GetSection(sname)
			if err != nil {
				continue
			}
			parentKeys = append(parentKeys, sec.Keys()...)
		} else {
			break
		}

	}
	return parentKeys
}

// KeyStrings returns list of key names of section.
func (s *Section) KeyStrings() []string {
	list := make([]string, len(s.keyList))
	copy(list, s.keyList)
	return list
}

// KeysHash returns keys hash consisting of names and values.
func (s *Section) KeysHash() map[string]string {
	if s.f.BlockMode {
		s.f.lock.RLock()
		defer s.f.lock.RUnlock()
	}

	hash := make(map[string]string, len(s.keysHash))
	for key, value := range s.keysHash {
		hash[key] = value
	}
	return hash
}

// DeleteKey deletes a key from section.
func (s *Section) DeleteKey(name string) {
	if s.f.BlockMode {
		s.f.lock.Lock()
		defer s.f.lock.Unlock()
	}

	for i, k := range s.keyList {
		if k == name {
			s.keyList = append(s.keyList[:i], s.keyList[i+1:]...)
			delete(s.keys, name)
			delete(s.keysHash, name)
			return
		}
	}
}

// ChildSections returns a list of child sections of current section.
// For example, "[parent.child1]" and "[parent.child12]" are child sections
// of section "[parent]".
func (s *Section) ChildSections() []*Section {
	prefix := s.name + s.f.options.ChildSectionDelimiter
	children := make([]*Section, 0, 3)
	for _, name := range s.f.sectionList {
		if strings.HasPrefix(name, prefix) {
			children = append(children, s.f.sections[name]...)
		}
	}
	return children
}
 07070100000FDA000081A4000000000000000000000001645E367C000052CF000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/gopkg.in/ini.v1/struct.go  // Copyright 2014 Unknwon
//
// Licensed under the Apache License, Version 2.0 (the "License"): you may
// not use this file except in compliance with the License. You may obtain
// a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations
// under the License.

package ini

import (
	"bytes"
	"errors"
	"fmt"
	"reflect"
	"strings"
	"time"
	"unicode"
)

// NameMapper represents a ini tag name mapper.
type NameMapper func(string) string

// Built-in name getters.
var (
	// SnackCase converts to format SNACK_CASE.
	SnackCase NameMapper = func(raw string) string {
		newstr := make([]rune, 0, len(raw))
		for i, chr := range raw {
			if isUpper := 'A' <= chr && chr <= 'Z'; isUpper {
				if i > 0 {
					newstr = append(newstr, '_')
				}
			}
			newstr = append(newstr, unicode.ToUpper(chr))
		}
		return string(newstr)
	}
	// TitleUnderscore converts to format title_underscore.
	TitleUnderscore NameMapper = func(raw string) string {
		newstr := make([]rune, 0, len(raw))
		for i, chr := range raw {
			if isUpper := 'A' <= chr && chr <= 'Z'; isUpper {
				if i > 0 {
					newstr = append(newstr, '_')
				}
				chr -= 'A' - 'a'
			}
			newstr = append(newstr, chr)
		}
		return string(newstr)
	}
)

func (s *Section) parseFieldName(raw, actual string) string {
	if len(actual) > 0 {
		return actual
	}
	if s.f.NameMapper != nil {
		return s.f.NameMapper(raw)
	}
	return raw
}

func parseDelim(actual string) string {
	if len(actual) > 0 {
		return actual
	}
	return ","
}

var reflectTime = reflect.TypeOf(time.Now()).Kind()

// setSliceWithProperType sets proper values to slice based on its type.
func setSliceWithProperType(key *Key, field reflect.Value, delim string, allowShadow, isStrict bool) error {
	var strs []string
	if allowShadow {
		strs = key.StringsWithShadows(delim)
	} else {
		strs = key.Strings(delim)
	}

	numVals := len(strs)
	if numVals == 0 {
		return nil
	}

	var vals interface{}
	var err error

	sliceOf := field.Type().Elem().Kind()
	switch sliceOf {
	case reflect.String:
		vals = strs
	case reflect.Int:
		vals, err = key.parseInts(strs, true, false)
	case reflect.Int64:
		vals, err = key.parseInt64s(strs, true, false)
	case reflect.Uint:
		vals, err = key.parseUints(strs, true, false)
	case reflect.Uint64:
		vals, err = key.parseUint64s(strs, true, false)
	case reflect.Float64:
		vals, err = key.parseFloat64s(strs, true, false)
	case reflect.Bool:
		vals, err = key.parseBools(strs, true, false)
	case reflectTime:
		vals, err = key.parseTimesFormat(time.RFC3339, strs, true, false)
	default:
		return fmt.Errorf("unsupported type '[]%s'", sliceOf)
	}
	if err != nil && isStrict {
		return err
	}

	slice := reflect.MakeSlice(field.Type(), numVals, numVals)
	for i := 0; i < numVals; i++ {
		switch sliceOf {
		case reflect.String:
			slice.Index(i).Set(reflect.ValueOf(vals.([]string)[i]))
		case reflect.Int:
			slice.Index(i).Set(reflect.ValueOf(vals.([]int)[i]))
		case reflect.Int64:
			slice.Index(i).Set(reflect.ValueOf(vals.([]int64)[i]))
		case reflect.Uint:
			slice.Index(i).Set(reflect.ValueOf(vals.([]uint)[i]))
		case reflect.Uint64:
			slice.Index(i).Set(reflect.ValueOf(vals.([]uint64)[i]))
		case reflect.Float64:
			slice.Index(i).Set(reflect.ValueOf(vals.([]float64)[i]))
		case reflect.Bool:
			slice.Index(i).Set(reflect.ValueOf(vals.([]bool)[i]))
		case reflectTime:
			slice.Index(i).Set(reflect.ValueOf(vals.([]time.Time)[i]))
		}
	}
	field.Set(slice)
	return nil
}

func wrapStrictError(err error, isStrict bool) error {
	if isStrict {
		return err
	}
	return nil
}

// setWithProperType sets proper value to field based on its type,
// but it does not return error for failing parsing,
// because we want to use default value that is already assigned to struct.
func setWithProperType(t reflect.Type, key *Key, field reflect.Value, delim string, allowShadow, isStrict bool) error {
	vt := t
	isPtr := t.Kind() == reflect.Ptr
	if isPtr {
		vt = t.Elem()
	}
	switch vt.Kind() {
	case reflect.String:
		stringVal := key.String()
		if isPtr {
			field.Set(reflect.ValueOf(&stringVal))
		} else if len(stringVal) > 0 {
			field.SetString(key.String())
		}
	case reflect.Bool:
		boolVal, err := key.Bool()
		if err != nil {
			return wrapStrictError(err, isStrict)
		}
		if isPtr {
			field.Set(reflect.ValueOf(&boolVal))
		} else {
			field.SetBool(boolVal)
		}
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		// ParseDuration will not return err for `0`, so check the type name
		if vt.Name() == "Duration" {
			durationVal, err := key.Duration()
			if err != nil {
				if intVal, err := key.Int64(); err == nil {
					field.SetInt(intVal)
					return nil
				}
				return wrapStrictError(err, isStrict)
			}
			if isPtr {
				field.Set(reflect.ValueOf(&durationVal))
			} else if int64(durationVal) > 0 {
				field.Set(reflect.ValueOf(durationVal))
			}
			return nil
		}

		intVal, err := key.Int64()
		if err != nil {
			return wrapStrictError(err, isStrict)
		}
		if isPtr {
			pv := reflect.New(t.Elem())
			pv.Elem().SetInt(intVal)
			field.Set(pv)
		} else {
			field.SetInt(intVal)
		}
	//	byte is an alias for uint8, so supporting uint8 breaks support for byte
	case reflect.Uint, reflect.Uint16, reflect.Uint32, reflect.Uint64:
		durationVal, err := key.Duration()
		// Skip zero value
		if err == nil && uint64(durationVal) > 0 {
			if isPtr {
				field.Set(reflect.ValueOf(&durationVal))
			} else {
				field.Set(reflect.ValueOf(durationVal))
			}
			return nil
		}

		uintVal, err := key.Uint64()
		if err != nil {
			return wrapStrictError(err, isStrict)
		}
		if isPtr {
			pv := reflect.New(t.Elem())
			pv.Elem().SetUint(uintVal)
			field.Set(pv)
		} else {
			field.SetUint(uintVal)
		}

	case reflect.Float32, reflect.Float64:
		floatVal, err := key.Float64()
		if err != nil {
			return wrapStrictError(err, isStrict)
		}
		if isPtr {
			pv := reflect.New(t.Elem())
			pv.Elem().SetFloat(floatVal)
			field.Set(pv)
		} else {
			field.SetFloat(floatVal)
		}
	case reflectTime:
		timeVal, err := key.Time()
		if err != nil {
			return wrapStrictError(err, isStrict)
		}
		if isPtr {
			field.Set(reflect.ValueOf(&timeVal))
		} else {
			field.Set(reflect.ValueOf(timeVal))
		}
	case reflect.Slice:
		return setSliceWithProperType(key, field, delim, allowShadow, isStrict)
	default:
		return fmt.Errorf("unsupported type %q", t)
	}
	return nil
}

func parseTagOptions(tag string) (rawName string, omitEmpty bool, allowShadow bool, allowNonUnique bool, extends bool) {
	opts := strings.SplitN(tag, ",", 5)
	rawName = opts[0]
	for _, opt := range opts[1:] {
		omitEmpty = omitEmpty || (opt == "omitempty")
		allowShadow = allowShadow || (opt == "allowshadow")
		allowNonUnique = allowNonUnique || (opt == "nonunique")
		extends = extends || (opt == "extends")
	}
	return rawName, omitEmpty, allowShadow, allowNonUnique, extends
}

// mapToField maps the given value to the matching field of the given section.
// The sectionIndex is the index (if non unique sections are enabled) to which the value should be added.
func (s *Section) mapToField(val reflect.Value, isStrict bool, sectionIndex int, sectionName string) error {
	if val.Kind() == reflect.Ptr {
		val = val.Elem()
	}
	typ := val.Type()

	for i := 0; i < typ.NumField(); i++ {
		field := val.Field(i)
		tpField := typ.Field(i)

		tag := tpField.Tag.Get("ini")
		if tag == "-" {
			continue
		}

		rawName, _, allowShadow, allowNonUnique, extends := parseTagOptions(tag)
		fieldName := s.parseFieldName(tpField.Name, rawName)
		if len(fieldName) == 0 || !field.CanSet() {
			continue
		}

		isStruct := tpField.Type.Kind() == reflect.Struct
		isStructPtr := tpField.Type.Kind() == reflect.Ptr && tpField.Type.Elem().Kind() == reflect.Struct
		isAnonymousPtr := tpField.Type.Kind() == reflect.Ptr && tpField.Anonymous
		if isAnonymousPtr {
			field.Set(reflect.New(tpField.Type.Elem()))
		}

		if extends && (isAnonymousPtr || (isStruct && tpField.Anonymous)) {
			if isStructPtr && field.IsNil() {
				field.Set(reflect.New(tpField.Type.Elem()))
			}
			fieldSection := s
			if rawName != "" {
				sectionName = s.name + s.f.options.ChildSectionDelimiter + rawName
				if secs, err := s.f.SectionsByName(sectionName); err == nil && sectionIndex < len(secs) {
					fieldSection = secs[sectionIndex]
				}
			}
			if err := fieldSection.mapToField(field, isStrict, sectionIndex, sectionName); err != nil {
				return fmt.Errorf("map to field %q: %v", fieldName, err)
			}
		} else if isAnonymousPtr || isStruct || isStructPtr {
			if secs, err := s.f.SectionsByName(fieldName); err == nil {
				if len(secs) <= sectionIndex {
					return fmt.Errorf("there are not enough sections (%d <= %d) for the field %q", len(secs), sectionIndex, fieldName)
				}
				// Only set the field to non-nil struct value if we have a section for it.
				// Otherwise, we end up with a non-nil struct ptr even though there is no data.
				if isStructPtr && field.IsNil() {
					field.Set(reflect.New(tpField.Type.Elem()))
				}
				if err = secs[sectionIndex].mapToField(field, isStrict, sectionIndex, fieldName); err != nil {
					return fmt.Errorf("map to field %q: %v", fieldName, err)
				}
				continue
			}
		}

		// Map non-unique sections
		if allowNonUnique && tpField.Type.Kind() == reflect.Slice {
			newField, err := s.mapToSlice(fieldName, field, isStrict)
			if err != nil {
				return fmt.Errorf("map to slice %q: %v", fieldName, err)
			}

			field.Set(newField)
			continue
		}

		if key, err := s.GetKey(fieldName); err == nil {
			delim := parseDelim(tpField.Tag.Get("delim"))
			if err = setWithProperType(tpField.Type, key, field, delim, allowShadow, isStrict); err != nil {
				return fmt.Errorf("set field %q: %v", fieldName, err)
			}
		}
	}
	return nil
}

// mapToSlice maps all sections with the same name and returns the new value.
// The type of the Value must be a slice.
func (s *Section) mapToSlice(secName string, val reflect.Value, isStrict bool) (reflect.Value, error) {
	secs, err := s.f.SectionsByName(secName)
	if err != nil {
		return reflect.Value{}, err
	}

	typ := val.Type().Elem()
	for i, sec := range secs {
		elem := reflect.New(typ)
		if err = sec.mapToField(elem, isStrict, i, sec.name); err != nil {
			return reflect.Value{}, fmt.Errorf("map to field from section %q: %v", secName, err)
		}

		val = reflect.Append(val, elem.Elem())
	}
	return val, nil
}

// mapTo maps a section to object v.
func (s *Section) mapTo(v interface{}, isStrict bool) error {
	typ := reflect.TypeOf(v)
	val := reflect.ValueOf(v)
	if typ.Kind() == reflect.Ptr {
		typ = typ.Elem()
		val = val.Elem()
	} else {
		return errors.New("not a pointer to a struct")
	}

	if typ.Kind() == reflect.Slice {
		newField, err := s.mapToSlice(s.name, val, isStrict)
		if err != nil {
			return err
		}

		val.Set(newField)
		return nil
	}

	return s.mapToField(val, isStrict, 0, s.name)
}

// MapTo maps section to given struct.
func (s *Section) MapTo(v interface{}) error {
	return s.mapTo(v, false)
}

// StrictMapTo maps section to given struct in strict mode,
// which returns all possible error including value parsing error.
func (s *Section) StrictMapTo(v interface{}) error {
	return s.mapTo(v, true)
}

// MapTo maps file to given struct.
func (f *File) MapTo(v interface{}) error {
	return f.Section("").MapTo(v)
}

// StrictMapTo maps file to given struct in strict mode,
// which returns all possible error including value parsing error.
func (f *File) StrictMapTo(v interface{}) error {
	return f.Section("").StrictMapTo(v)
}

// MapToWithMapper maps data sources to given struct with name mapper.
func MapToWithMapper(v interface{}, mapper NameMapper, source interface{}, others ...interface{}) error {
	cfg, err := Load(source, others...)
	if err != nil {
		return err
	}
	cfg.NameMapper = mapper
	return cfg.MapTo(v)
}

// StrictMapToWithMapper maps data sources to given struct with name mapper in strict mode,
// which returns all possible error including value parsing error.
func StrictMapToWithMapper(v interface{}, mapper NameMapper, source interface{}, others ...interface{}) error {
	cfg, err := Load(source, others...)
	if err != nil {
		return err
	}
	cfg.NameMapper = mapper
	return cfg.StrictMapTo(v)
}

// MapTo maps data sources to given struct.
func MapTo(v, source interface{}, others ...interface{}) error {
	return MapToWithMapper(v, nil, source, others...)
}

// StrictMapTo maps data sources to given struct in strict mode,
// which returns all possible error including value parsing error.
func StrictMapTo(v, source interface{}, others ...interface{}) error {
	return StrictMapToWithMapper(v, nil, source, others...)
}

// reflectSliceWithProperType does the opposite thing as setSliceWithProperType.
func reflectSliceWithProperType(key *Key, field reflect.Value, delim string, allowShadow bool) error {
	slice := field.Slice(0, field.Len())
	if field.Len() == 0 {
		return nil
	}
	sliceOf := field.Type().Elem().Kind()

	if allowShadow {
		var keyWithShadows *Key
		for i := 0; i < field.Len(); i++ {
			var val string
			switch sliceOf {
			case reflect.String:
				val = slice.Index(i).String()
			case reflect.Int, reflect.Int64:
				val = fmt.Sprint(slice.Index(i).Int())
			case reflect.Uint, reflect.Uint64:
				val = fmt.Sprint(slice.Index(i).Uint())
			case reflect.Float64:
				val = fmt.Sprint(slice.Index(i).Float())
			case reflect.Bool:
				val = fmt.Sprint(slice.Index(i).Bool())
			case reflectTime:
				val = slice.Index(i).Interface().(time.Time).Format(time.RFC3339)
			default:
				return fmt.Errorf("unsupported type '[]%s'", sliceOf)
			}

			if i == 0 {
				keyWithShadows = newKey(key.s, key.name, val)
			} else {
				_ = keyWithShadows.AddShadow(val)
			}
		}
		*key = *keyWithShadows
		return nil
	}

	var buf bytes.Buffer
	for i := 0; i < field.Len(); i++ {
		switch sliceOf {
		case reflect.String:
			buf.WriteString(slice.Index(i).String())
		case reflect.Int, reflect.Int64:
			buf.WriteString(fmt.Sprint(slice.Index(i).Int()))
		case reflect.Uint, reflect.Uint64:
			buf.WriteString(fmt.Sprint(slice.Index(i).Uint()))
		case reflect.Float64:
			buf.WriteString(fmt.Sprint(slice.Index(i).Float()))
		case reflect.Bool:
			buf.WriteString(fmt.Sprint(slice.Index(i).Bool()))
		case reflectTime:
			buf.WriteString(slice.Index(i).Interface().(time.Time).Format(time.RFC3339))
		default:
			return fmt.Errorf("unsupported type '[]%s'", sliceOf)
		}
		buf.WriteString(delim)
	}
	key.SetValue(buf.String()[:buf.Len()-len(delim)])
	return nil
}

// reflectWithProperType does the opposite thing as setWithProperType.
func reflectWithProperType(t reflect.Type, key *Key, field reflect.Value, delim string, allowShadow bool) error {
	switch t.Kind() {
	case reflect.String:
		key.SetValue(field.String())
	case reflect.Bool:
		key.SetValue(fmt.Sprint(field.Bool()))
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		key.SetValue(fmt.Sprint(field.Int()))
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
		key.SetValue(fmt.Sprint(field.Uint()))
	case reflect.Float32, reflect.Float64:
		key.SetValue(fmt.Sprint(field.Float()))
	case reflectTime:
		key.SetValue(fmt.Sprint(field.Interface().(time.Time).Format(time.RFC3339)))
	case reflect.Slice:
		return reflectSliceWithProperType(key, field, delim, allowShadow)
	case reflect.Ptr:
		if !field.IsNil() {
			return reflectWithProperType(t.Elem(), key, field.Elem(), delim, allowShadow)
		}
	default:
		return fmt.Errorf("unsupported type %q", t)
	}
	return nil
}

// CR: copied from encoding/json/encode.go with modifications of time.Time support.
// TODO: add more test coverage.
func isEmptyValue(v reflect.Value) bool {
	switch v.Kind() {
	case reflect.Array, reflect.Map, reflect.Slice, reflect.String:
		return v.Len() == 0
	case reflect.Bool:
		return !v.Bool()
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		return v.Int() == 0
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		return v.Uint() == 0
	case reflect.Float32, reflect.Float64:
		return v.Float() == 0
	case reflect.Interface, reflect.Ptr:
		return v.IsNil()
	case reflectTime:
		t, ok := v.Interface().(time.Time)
		return ok && t.IsZero()
	}
	return false
}

// StructReflector is the interface implemented by struct types that can extract themselves into INI objects.
type StructReflector interface {
	ReflectINIStruct(*File) error
}

func (s *Section) reflectFrom(val reflect.Value) error {
	if val.Kind() == reflect.Ptr {
		val = val.Elem()
	}
	typ := val.Type()

	for i := 0; i < typ.NumField(); i++ {
		if !val.Field(i).CanInterface() {
			continue
		}

		field := val.Field(i)
		tpField := typ.Field(i)

		tag := tpField.Tag.Get("ini")
		if tag == "-" {
			continue
		}

		rawName, omitEmpty, allowShadow, allowNonUnique, extends := parseTagOptions(tag)
		if omitEmpty && isEmptyValue(field) {
			continue
		}

		if r, ok := field.Interface().(StructReflector); ok {
			return r.ReflectINIStruct(s.f)
		}

		fieldName := s.parseFieldName(tpField.Name, rawName)
		if len(fieldName) == 0 || !field.CanSet() {
			continue
		}

		if extends && tpField.Anonymous && (tpField.Type.Kind() == reflect.Ptr || tpField.Type.Kind() == reflect.Struct) {
			if err := s.reflectFrom(field); err != nil {
				return fmt.Errorf("reflect from field %q: %v", fieldName, err)
			}
			continue
		}

		if (tpField.Type.Kind() == reflect.Ptr && tpField.Type.Elem().Kind() == reflect.Struct) ||
			(tpField.Type.Kind() == reflect.Struct && tpField.Type.Name() != "Time") {
			// Note: The only error here is section doesn't exist.
			sec, err := s.f.GetSection(fieldName)
			if err != nil {
				// Note: fieldName can never be empty here, ignore error.
				sec, _ = s.f.NewSection(fieldName)
			}

			// Add comment from comment tag
			if len(sec.Comment) == 0 {
				sec.Comment = tpField.Tag.Get("comment")
			}

			if err = sec.reflectFrom(field); err != nil {
				return fmt.Errorf("reflect from field %q: %v", fieldName, err)
			}
			continue
		}

		if allowNonUnique && tpField.Type.Kind() == reflect.Slice {
			slice := field.Slice(0, field.Len())
			if field.Len() == 0 {
				return nil
			}
			sliceOf := field.Type().Elem().Kind()

			for i := 0; i < field.Len(); i++ {
				if sliceOf != reflect.Struct && sliceOf != reflect.Ptr {
					return fmt.Errorf("field %q is not a slice of pointer or struct", fieldName)
				}

				sec, err := s.f.NewSection(fieldName)
				if err != nil {
					return err
				}

				// Add comment from comment tag
				if len(sec.Comment) == 0 {
					sec.Comment = tpField.Tag.Get("comment")
				}

				if err := sec.reflectFrom(slice.Index(i)); err != nil {
					return fmt.Errorf("reflect from field %q: %v", fieldName, err)
				}
			}
			continue
		}

		// Note: Same reason as section.
		key, err := s.GetKey(fieldName)
		if err != nil {
			key, _ = s.NewKey(fieldName, "")
		}

		// Add comment from comment tag
		if len(key.Comment) == 0 {
			key.Comment = tpField.Tag.Get("comment")
		}

		delim := parseDelim(tpField.Tag.Get("delim"))
		if err = reflectWithProperType(tpField.Type, key, field, delim, allowShadow); err != nil {
			return fmt.Errorf("reflect field %q: %v", fieldName, err)
		}

	}
	return nil
}

// ReflectFrom reflects section from given struct. It overwrites existing ones.
func (s *Section) ReflectFrom(v interface{}) error {
	typ := reflect.TypeOf(v)
	val := reflect.ValueOf(v)

	if s.name != DefaultSection && s.f.options.AllowNonUniqueSections &&
		(typ.Kind() == reflect.Slice || typ.Kind() == reflect.Ptr) {
		// Clear sections to make sure none exists before adding the new ones
		s.f.DeleteSection(s.name)

		if typ.Kind() == reflect.Ptr {
			sec, err := s.f.NewSection(s.name)
			if err != nil {
				return err
			}
			return sec.reflectFrom(val.Elem())
		}

		slice := val.Slice(0, val.Len())
		sliceOf := val.Type().Elem().Kind()
		if sliceOf != reflect.Ptr {
			return fmt.Errorf("not a slice of pointers")
		}

		for i := 0; i < slice.Len(); i++ {
			sec, err := s.f.NewSection(s.name)
			if err != nil {
				return err
			}

			err = sec.reflectFrom(slice.Index(i))
			if err != nil {
				return fmt.Errorf("reflect from %dth field: %v", i, err)
			}
		}

		return nil
	}

	if typ.Kind() == reflect.Ptr {
		val = val.Elem()
	} else {
		return errors.New("not a pointer to a struct")
	}

	return s.reflectFrom(val)
}

// ReflectFrom reflects file from given struct.
func (f *File) ReflectFrom(v interface{}) error {
	return f.Section("").ReflectFrom(v)
}

// ReflectFromWithMapper reflects data sources from given struct with name mapper.
func ReflectFromWithMapper(cfg *File, v interface{}, mapper NameMapper) error {
	cfg.NameMapper = mapper
	return cfg.ReflectFrom(v)
}

// ReflectFrom reflects data sources from given struct.
func ReflectFrom(cfg *File, v interface{}) error {
	return ReflectFromWithMapper(cfg, v, nil)
}
 07070100000FDB000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003000000000elemental-cli-0.3.1/vendor/gopkg.in/warnings.v0   07070100000FDC000081A4000000000000000000000001645E367C000004FB000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/gopkg.in/warnings.v0/LICENSE   Copyright (c) 2016 Péter Surányi.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 07070100000FDD000081A4000000000000000000000001645E367C00000A23000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/gopkg.in/warnings.v0/README    Package warnings implements error handling with non-fatal errors (warnings).

import path:   "gopkg.in/warnings.v0"
package docs:  https://godoc.org/gopkg.in/warnings.v0 
issues:        https://github.com/go-warnings/warnings/issues
pull requests: https://github.com/go-warnings/warnings/pulls

A recurring pattern in Go programming is the following:

 func myfunc(params) error {
     if err := doSomething(...); err != nil {
         return err
     }
     if err := doSomethingElse(...); err != nil {
         return err
     }
     if ok := doAnotherThing(...); !ok {
         return errors.New("my error")
     }
     ...
     return nil
 }

This pattern allows interrupting the flow on any received error. But what if
there are errors that should be noted but still not fatal, for which the flow
should not be interrupted? Implementing such logic at each if statement would
make the code complex and the flow much harder to follow.

Package warnings provides the Collector type and a clean and simple pattern
for achieving such logic. The Collector takes care of deciding when to break
the flow and when to continue, collecting any non-fatal errors (warnings)
along the way. The only requirement is that fatal and non-fatal errors can be
distinguished programmatically; that is a function such as

 IsFatal(error) bool

must be implemented. The following is an example of what the above snippet
could look like using the warnings package:

 import "gopkg.in/warnings.v0"

 func isFatal(err error) bool {
     _, ok := err.(WarningType)
     return !ok
 }

 func myfunc(params) error {
     c := warnings.NewCollector(isFatal)
     c.FatalWithWarnings = true
     if err := c.Collect(doSomething()); err != nil {
         return err
     }
     if err := c.Collect(doSomethingElse(...)); err != nil {
         return err
     }
     if ok := doAnotherThing(...); !ok {
         if err := c.Collect(errors.New("my error")); err != nil {
             return err
         }
     }
     ...
     return c.Done()
 }

For an example of a non-trivial code base using this library, see
gopkg.in/gcfg.v1

Rules for using warnings

 - ensure that warnings are programmatically distinguishable from fatal
   errors (i.e. implement an isFatal function and any necessary error types)
 - ensure that there is a single Collector instance for a call of each
   exported function
 - ensure that all errors (fatal or warning) are fed through Collect
 - ensure that every time an error is returned, it is one returned by a
   Collector (from Collect or Done)
 - ensure that Collect is never called after Done
 07070100000FDE000081A4000000000000000000000001645E367C00001591000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/gopkg.in/warnings.v0/warnings.go   // Package warnings implements error handling with non-fatal errors (warnings).
//
// A recurring pattern in Go programming is the following:
//
//  func myfunc(params) error {
//      if err := doSomething(...); err != nil {
//          return err
//      }
//      if err := doSomethingElse(...); err != nil {
//          return err
//      }
//      if ok := doAnotherThing(...); !ok {
//          return errors.New("my error")
//      }
//      ...
//      return nil
//  }
//
// This pattern allows interrupting the flow on any received error. But what if
// there are errors that should be noted but still not fatal, for which the flow
// should not be interrupted? Implementing such logic at each if statement would
// make the code complex and the flow much harder to follow.
//
// Package warnings provides the Collector type and a clean and simple pattern
// for achieving such logic. The Collector takes care of deciding when to break
// the flow and when to continue, collecting any non-fatal errors (warnings)
// along the way. The only requirement is that fatal and non-fatal errors can be
// distinguished programmatically; that is a function such as
//
//  IsFatal(error) bool
//
// must be implemented. The following is an example of what the above snippet
// could look like using the warnings package:
//
//  import "gopkg.in/warnings.v0"
//
//  func isFatal(err error) bool {
//      _, ok := err.(WarningType)
//      return !ok
//  }
//
//  func myfunc(params) error {
//      c := warnings.NewCollector(isFatal)
//      c.FatalWithWarnings = true
//      if err := c.Collect(doSomething()); err != nil {
//          return err
//      }
//      if err := c.Collect(doSomethingElse(...)); err != nil {
//          return err
//      }
//      if ok := doAnotherThing(...); !ok {
//          if err := c.Collect(errors.New("my error")); err != nil {
//              return err
//          }
//      }
//      ...
//      return c.Done()
//  }
//
// For an example of a non-trivial code base using this library, see
// gopkg.in/gcfg.v1
//
// Rules for using warnings
//
//  - ensure that warnings are programmatically distinguishable from fatal
//    errors (i.e. implement an isFatal function and any necessary error types)
//  - ensure that there is a single Collector instance for a call of each
//    exported function
//  - ensure that all errors (fatal or warning) are fed through Collect
//  - ensure that every time an error is returned, it is one returned by a
//    Collector (from Collect or Done)
//  - ensure that Collect is never called after Done
//
// TODO
//
//  - optionally limit the number of warnings (e.g. stop after 20 warnings) (?)
//  - consider interaction with contexts
//  - go vet-style invocations verifier
//  - semi-automatic code converter
//
package warnings // import "gopkg.in/warnings.v0"

import (
	"bytes"
	"fmt"
)

// List holds a collection of warnings and optionally one fatal error.
type List struct {
	Warnings []error
	Fatal    error
}

// Error implements the error interface.
func (l List) Error() string {
	b := bytes.NewBuffer(nil)
	if l.Fatal != nil {
		fmt.Fprintln(b, "fatal:")
		fmt.Fprintln(b, l.Fatal)
	}
	switch len(l.Warnings) {
	case 0:
	// nop
	case 1:
		fmt.Fprintln(b, "warning:")
	default:
		fmt.Fprintln(b, "warnings:")
	}
	for _, err := range l.Warnings {
		fmt.Fprintln(b, err)
	}
	return b.String()
}

// A Collector collects errors up to the first fatal error.
type Collector struct {
	// IsFatal distinguishes between warnings and fatal errors.
	IsFatal func(error) bool
	// FatalWithWarnings set to true means that a fatal error is returned as
	// a List together with all warnings so far. The default behavior is to
	// only return the fatal error and discard any warnings that have been
	// collected.
	FatalWithWarnings bool

	l    List
	done bool
}

// NewCollector returns a new Collector; it uses isFatal to distinguish between
// warnings and fatal errors.
func NewCollector(isFatal func(error) bool) *Collector {
	return &Collector{IsFatal: isFatal}
}

// Collect collects a single error (warning or fatal). It returns nil if
// collection can continue (only warnings so far), or otherwise the errors
// collected. Collect mustn't be called after the first fatal error or after
// Done has been called.
func (c *Collector) Collect(err error) error {
	if c.done {
		panic("warnings.Collector already done")
	}
	if err == nil {
		return nil
	}
	if c.IsFatal(err) {
		c.done = true
		c.l.Fatal = err
	} else {
		c.l.Warnings = append(c.l.Warnings, err)
	}
	if c.l.Fatal != nil {
		return c.erorr()
	}
	return nil
}

// Done ends collection and returns the collected error(s).
func (c *Collector) Done() error {
	c.done = true
	return c.erorr()
}

func (c *Collector) erorr() error {
	if !c.FatalWithWarnings && c.l.Fatal != nil {
		return c.l.Fatal
	}
	if c.l.Fatal == nil && len(c.l.Warnings) == 0 {
		return nil
	}
	// Note that a single warning is also returned as a List. This is to make it
	// easier to determine fatal-ness of the returned error.
	return c.l
}

// FatalOnly returns the fatal error, if any, **in an error returned by a
// Collector**. It returns nil if and only if err is nil or err is a List
// with err.Fatal == nil.
func FatalOnly(err error) error {
	l, ok := err.(List)
	if !ok {
		return err
	}
	return l.Fatal
}

// WarningsOnly returns the warnings **in an error returned by a Collector**.
func WarningsOnly(err error) []error {
	l, ok := err.(List)
	if !ok {
		return nil
	}
	return l.Warnings
}
   07070100000FDF000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000002C00000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v1   07070100000FE0000081A4000000000000000000000001645E367C00002256000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v1/LICENSE   
Copyright (c) 2011-2014 - Canonical Inc.

This software is licensed under the LGPLv3, included below.

As a special exception to the GNU Lesser General Public License version 3
("LGPL3"), the copyright holders of this Library give you permission to
convey to a third party a Combined Work that links statically or dynamically
to this Library without providing any Minimal Corresponding Source or
Minimal Application Code as set out in 4d or providing the installation
information set out in section 4e, provided that you comply with the other
provisions of LGPL3 and provided that you meet, for the Application the
terms and conditions of the license(s) which apply to the Application.

Except as stated in this special exception, the provisions of LGPL3 will
continue to comply in full to this Library. If you modify this Library, you
may apply this exception to your version of this Library, but you are not
obliged to do so. If you do not wish to do so, delete this exception
statement from your version. This exception does not (and cannot) modify any
license terms which apply to the Application, with which you must still
comply.


                   GNU LESSER GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.


  This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.

  0. Additional Definitions.

  As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.

  "The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.

  An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.

  A "Combined Work" is a work produced by combining or linking an
Application with the Library.  The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".

  The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.

  The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.

  1. Exception to Section 3 of the GNU GPL.

  You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.

  2. Conveying Modified Versions.

  If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:

   a) under this License, provided that you make a good faith effort to
   ensure that, in the event an Application does not supply the
   function or data, the facility still operates, and performs
   whatever part of its purpose remains meaningful, or

   b) under the GNU GPL, with none of the additional permissions of
   this License applicable to that copy.

  3. Object Code Incorporating Material from Library Header Files.

  The object code form of an Application may incorporate material from
a header file that is part of the Library.  You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:

   a) Give prominent notice with each copy of the object code that the
   Library is used in it and that the Library and its use are
   covered by this License.

   b) Accompany the object code with a copy of the GNU GPL and this license
   document.

  4. Combined Works.

  You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:

   a) Give prominent notice with each copy of the Combined Work that
   the Library is used in it and that the Library and its use are
   covered by this License.

   b) Accompany the Combined Work with a copy of the GNU GPL and this license
   document.

   c) For a Combined Work that displays copyright notices during
   execution, include the copyright notice for the Library among
   these notices, as well as a reference directing the user to the
   copies of the GNU GPL and this license document.

   d) Do one of the following:

       0) Convey the Minimal Corresponding Source under the terms of this
       License, and the Corresponding Application Code in a form
       suitable for, and under terms that permit, the user to
       recombine or relink the Application with a modified version of
       the Linked Version to produce a modified Combined Work, in the
       manner specified by section 6 of the GNU GPL for conveying
       Corresponding Source.

       1) Use a suitable shared library mechanism for linking with the
       Library.  A suitable mechanism is one that (a) uses at run time
       a copy of the Library already present on the user's computer
       system, and (b) will operate properly with a modified version
       of the Library that is interface-compatible with the Linked
       Version.

   e) Provide Installation Information, but only if you would otherwise
   be required to provide such information under section 6 of the
   GNU GPL, and only to the extent that such information is
   necessary to install and execute a modified version of the
   Combined Work produced by recombining or relinking the
   Application with a modified version of the Linked Version. (If
   you use option 4d0, the Installation Information must accompany
   the Minimal Corresponding Source and Corresponding Application
   Code. If you use option 4d1, you must provide the Installation
   Information in the manner specified by section 6 of the GNU GPL
   for conveying Corresponding Source.)

  5. Combined Libraries.

  You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:

   a) Accompany the combined library with a copy of the same work based
   on the Library, uncombined with any other library facilities,
   conveyed under the terms of this License.

   b) Give prominent notice with the combined library that part of it
   is a work based on the Library, and explaining where to find the
   accompanying uncombined form of the same work.

  6. Revised Versions of the GNU Lesser General Public License.

  The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.

  Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.

  If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.
  07070100000FE1000081A4000000000000000000000001645E367C00000521000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v1/LICENSE.libyaml   The following files were ported to Go from C files of libyaml, and thus
are still covered by their original copyright and license:

    apic.go
    emitterc.go
    parserc.go
    readerc.go
    scannerc.go
    writerc.go
    yamlh.go
    yamlprivateh.go

Copyright (c) 2006 Kirill Simonov

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
   07070100000FE2000081A4000000000000000000000001645E367C00000A06000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v1/README.md # YAML support for the Go language

Introduction
------------

The yaml package enables Go programs to comfortably encode and decode YAML
values. It was developed within [Canonical](https://www.canonical.com) as
part of the [juju](https://juju.ubuntu.com) project, and is based on a
pure Go port of the well-known [libyaml](http://pyyaml.org/wiki/LibYAML)
C library to parse and generate YAML data quickly and reliably.

Compatibility
-------------

The yaml package supports most of YAML 1.1 and 1.2, including support for
anchors, tags, map merging, etc. Multi-document unmarshalling is not yet
implemented, and base-60 floats from YAML 1.1 are purposefully not
supported since they're a poor design and are gone in YAML 1.2.

Installation and usage
----------------------

The import path for the package is *gopkg.in/yaml.v1*.

To install it, run:

    go get gopkg.in/yaml.v1

API documentation
-----------------

If opened in a browser, the import path itself leads to the API documentation:

  * [https://gopkg.in/yaml.v1](https://gopkg.in/yaml.v1)

API stability
-------------

The package API for yaml v1 will remain stable as described in [gopkg.in](https://gopkg.in).


License
-------

The yaml package is licensed under the LGPL with an exception that allows it to be linked statically. Please see the LICENSE file for details.


Example
-------

```Go
package main

import (
        "fmt"
        "log"

        "gopkg.in/yaml.v1"
)

var data = `
a: Easy!
b:
  c: 2
  d: [3, 4]
`

type T struct {
        A string
        B struct{C int; D []int ",flow"}
}

func main() {
        t := T{}
    
        err := yaml.Unmarshal([]byte(data), &t)
        if err != nil {
                log.Fatalf("error: %v", err)
        }
        fmt.Printf("--- t:\n%v\n\n", t)
    
        d, err := yaml.Marshal(&t)
        if err != nil {
                log.Fatalf("error: %v", err)
        }
        fmt.Printf("--- t dump:\n%s\n\n", string(d))
    
        m := make(map[interface{}]interface{})
    
        err = yaml.Unmarshal([]byte(data), &m)
        if err != nil {
                log.Fatalf("error: %v", err)
        }
        fmt.Printf("--- m:\n%v\n\n", m)
    
        d, err = yaml.Marshal(&m)
        if err != nil {
                log.Fatalf("error: %v", err)
        }
        fmt.Printf("--- m dump:\n%s\n\n", string(d))
}
```

This example will generate the following output:

```
--- t:
{Easy! {2 [3 4]}}

--- t dump:
a: Easy!
b:
  c: 2
  d: [3, 4]


--- m:
map[a:Easy! b:map[c:2 d:[3 4]]]

--- m dump:
a: Easy!
b:
  c: 2
  d:
  - 3
  - 4
```

  07070100000FE3000081A4000000000000000000000001645E367C000052FE000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v1/apic.go   package yaml

import (
	"io"
	"os"
)

func yaml_insert_token(parser *yaml_parser_t, pos int, token *yaml_token_t) {
	//fmt.Println("yaml_insert_token", "pos:", pos, "typ:", token.typ, "head:", parser.tokens_head, "len:", len(parser.tokens))

	// Check if we can move the queue at the beginning of the buffer.
	if parser.tokens_head > 0 && len(parser.tokens) == cap(parser.tokens) {
		if parser.tokens_head != len(parser.tokens) {
			copy(parser.tokens, parser.tokens[parser.tokens_head:])
		}
		parser.tokens = parser.tokens[:len(parser.tokens)-parser.tokens_head]
		parser.tokens_head = 0
	}
	parser.tokens = append(parser.tokens, *token)
	if pos < 0 {
		return
	}
	copy(parser.tokens[parser.tokens_head+pos+1:], parser.tokens[parser.tokens_head+pos:])
	parser.tokens[parser.tokens_head+pos] = *token
}

// Create a new parser object.
func yaml_parser_initialize(parser *yaml_parser_t) bool {
	*parser = yaml_parser_t{
		raw_buffer: make([]byte, 0, input_raw_buffer_size),
		buffer:     make([]byte, 0, input_buffer_size),
	}
	return true
}

// Destroy a parser object.
func yaml_parser_delete(parser *yaml_parser_t) {
	*parser = yaml_parser_t{}
}

// String read handler.
func yaml_string_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) {
	if parser.input_pos == len(parser.input) {
		return 0, io.EOF
	}
	n = copy(buffer, parser.input[parser.input_pos:])
	parser.input_pos += n
	return n, nil
}

// File read handler.
func yaml_file_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) {
	return parser.input_file.Read(buffer)
}

// Set a string input.
func yaml_parser_set_input_string(parser *yaml_parser_t, input []byte) {
	if parser.read_handler != nil {
		panic("must set the input source only once")
	}
	parser.read_handler = yaml_string_read_handler
	parser.input = input
	parser.input_pos = 0
}

// Set a file input.
func yaml_parser_set_input_file(parser *yaml_parser_t, file *os.File) {
	if parser.read_handler != nil {
		panic("must set the input source only once")
	}
	parser.read_handler = yaml_file_read_handler
	parser.input_file = file
}

// Set the source encoding.
func yaml_parser_set_encoding(parser *yaml_parser_t, encoding yaml_encoding_t) {
	if parser.encoding != yaml_ANY_ENCODING {
		panic("must set the encoding only once")
	}
	parser.encoding = encoding
}

// Create a new emitter object.
func yaml_emitter_initialize(emitter *yaml_emitter_t) bool {
	*emitter = yaml_emitter_t{
		buffer:     make([]byte, output_buffer_size),
		raw_buffer: make([]byte, 0, output_raw_buffer_size),
		states:     make([]yaml_emitter_state_t, 0, initial_stack_size),
		events:     make([]yaml_event_t, 0, initial_queue_size),
	}
	return true
}

// Destroy an emitter object.
func yaml_emitter_delete(emitter *yaml_emitter_t) {
	*emitter = yaml_emitter_t{}
}

// String write handler.
func yaml_string_write_handler(emitter *yaml_emitter_t, buffer []byte) error {
	*emitter.output_buffer = append(*emitter.output_buffer, buffer...)
	return nil
}

// File write handler.
func yaml_file_write_handler(emitter *yaml_emitter_t, buffer []byte) error {
	_, err := emitter.output_file.Write(buffer)
	return err
}

// Set a string output.
func yaml_emitter_set_output_string(emitter *yaml_emitter_t, output_buffer *[]byte) {
	if emitter.write_handler != nil {
		panic("must set the output target only once")
	}
	emitter.write_handler = yaml_string_write_handler
	emitter.output_buffer = output_buffer
}

// Set a file output.
func yaml_emitter_set_output_file(emitter *yaml_emitter_t, file io.Writer) {
	if emitter.write_handler != nil {
		panic("must set the output target only once")
	}
	emitter.write_handler = yaml_file_write_handler
	emitter.output_file = file
}

// Set the output encoding.
func yaml_emitter_set_encoding(emitter *yaml_emitter_t, encoding yaml_encoding_t) {
	if emitter.encoding != yaml_ANY_ENCODING {
		panic("must set the output encoding only once")
	}
	emitter.encoding = encoding
}

// Set the canonical output style.
func yaml_emitter_set_canonical(emitter *yaml_emitter_t, canonical bool) {
	emitter.canonical = canonical
}

//// Set the indentation increment.
func yaml_emitter_set_indent(emitter *yaml_emitter_t, indent int) {
	if indent < 2 || indent > 9 {
		indent = 2
	}
	emitter.best_indent = indent
}

// Set the preferred line width.
func yaml_emitter_set_width(emitter *yaml_emitter_t, width int) {
	if width < 0 {
		width = -1
	}
	emitter.best_width = width
}

// Set if unescaped non-ASCII characters are allowed.
func yaml_emitter_set_unicode(emitter *yaml_emitter_t, unicode bool) {
	emitter.unicode = unicode
}

// Set the preferred line break character.
func yaml_emitter_set_break(emitter *yaml_emitter_t, line_break yaml_break_t) {
	emitter.line_break = line_break
}

///*
// * Destroy a token object.
// */
//
//YAML_DECLARE(void)
//yaml_token_delete(yaml_token_t *token)
//{
//    assert(token);  // Non-NULL token object expected.
//
//    switch (token.type)
//    {
//        case YAML_TAG_DIRECTIVE_TOKEN:
//            yaml_free(token.data.tag_directive.handle);
//            yaml_free(token.data.tag_directive.prefix);
//            break;
//
//        case YAML_ALIAS_TOKEN:
//            yaml_free(token.data.alias.value);
//            break;
//
//        case YAML_ANCHOR_TOKEN:
//            yaml_free(token.data.anchor.value);
//            break;
//
//        case YAML_TAG_TOKEN:
//            yaml_free(token.data.tag.handle);
//            yaml_free(token.data.tag.suffix);
//            break;
//
//        case YAML_SCALAR_TOKEN:
//            yaml_free(token.data.scalar.value);
//            break;
//
//        default:
//            break;
//    }
//
//    memset(token, 0, sizeof(yaml_token_t));
//}
//
///*
// * Check if a string is a valid UTF-8 sequence.
// *
// * Check 'reader.c' for more details on UTF-8 encoding.
// */
//
//static int
//yaml_check_utf8(yaml_char_t *start, size_t length)
//{
//    yaml_char_t *end = start+length;
//    yaml_char_t *pointer = start;
//
//    while (pointer < end) {
//        unsigned char octet;
//        unsigned int width;
//        unsigned int value;
//        size_t k;
//
//        octet = pointer[0];
//        width = (octet & 0x80) == 0x00 ? 1 :
//                (octet & 0xE0) == 0xC0 ? 2 :
//                (octet & 0xF0) == 0xE0 ? 3 :
//                (octet & 0xF8) == 0xF0 ? 4 : 0;
//        value = (octet & 0x80) == 0x00 ? octet & 0x7F :
//                (octet & 0xE0) == 0xC0 ? octet & 0x1F :
//                (octet & 0xF0) == 0xE0 ? octet & 0x0F :
//                (octet & 0xF8) == 0xF0 ? octet & 0x07 : 0;
//        if (!width) return 0;
//        if (pointer+width > end) return 0;
//        for (k = 1; k < width; k ++) {
//            octet = pointer[k];
//            if ((octet & 0xC0) != 0x80) return 0;
//            value = (value << 6) + (octet & 0x3F);
//        }
//        if (!((width == 1) ||
//            (width == 2 && value >= 0x80) ||
//            (width == 3 && value >= 0x800) ||
//            (width == 4 && value >= 0x10000))) return 0;
//
//        pointer += width;
//    }
//
//    return 1;
//}
//

// Create STREAM-START.
func yaml_stream_start_event_initialize(event *yaml_event_t, encoding yaml_encoding_t) bool {
	*event = yaml_event_t{
		typ:      yaml_STREAM_START_EVENT,
		encoding: encoding,
	}
	return true
}

// Create STREAM-END.
func yaml_stream_end_event_initialize(event *yaml_event_t) bool {
	*event = yaml_event_t{
		typ: yaml_STREAM_END_EVENT,
	}
	return true
}

// Create DOCUMENT-START.
func yaml_document_start_event_initialize(event *yaml_event_t, version_directive *yaml_version_directive_t,
	tag_directives []yaml_tag_directive_t, implicit bool) bool {
	*event = yaml_event_t{
		typ:               yaml_DOCUMENT_START_EVENT,
		version_directive: version_directive,
		tag_directives:    tag_directives,
		implicit:          implicit,
	}
	return true
}

// Create DOCUMENT-END.
func yaml_document_end_event_initialize(event *yaml_event_t, implicit bool) bool {
	*event = yaml_event_t{
		typ:      yaml_DOCUMENT_END_EVENT,
		implicit: implicit,
	}
	return true
}

///*
// * Create ALIAS.
// */
//
//YAML_DECLARE(int)
//yaml_alias_event_initialize(event *yaml_event_t, anchor *yaml_char_t)
//{
//    mark yaml_mark_t = { 0, 0, 0 }
//    anchor_copy *yaml_char_t = NULL
//
//    assert(event) // Non-NULL event object is expected.
//    assert(anchor) // Non-NULL anchor is expected.
//
//    if (!yaml_check_utf8(anchor, strlen((char *)anchor))) return 0
//
//    anchor_copy = yaml_strdup(anchor)
//    if (!anchor_copy)
//        return 0
//
//    ALIAS_EVENT_INIT(*event, anchor_copy, mark, mark)
//
//    return 1
//}

// Create SCALAR.
func yaml_scalar_event_initialize(event *yaml_event_t, anchor, tag, value []byte, plain_implicit, quoted_implicit bool, style yaml_scalar_style_t) bool {
	*event = yaml_event_t{
		typ:             yaml_SCALAR_EVENT,
		anchor:          anchor,
		tag:             tag,
		value:           value,
		implicit:        plain_implicit,
		quoted_implicit: quoted_implicit,
		style:           yaml_style_t(style),
	}
	return true
}

// Create SEQUENCE-START.
func yaml_sequence_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_sequence_style_t) bool {
	*event = yaml_event_t{
		typ:      yaml_SEQUENCE_START_EVENT,
		anchor:   anchor,
		tag:      tag,
		implicit: implicit,
		style:    yaml_style_t(style),
	}
	return true
}

// Create SEQUENCE-END.
func yaml_sequence_end_event_initialize(event *yaml_event_t) bool {
	*event = yaml_event_t{
		typ: yaml_SEQUENCE_END_EVENT,
	}
	return true
}

// Create MAPPING-START.
func yaml_mapping_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_mapping_style_t) bool {
	*event = yaml_event_t{
		typ:      yaml_MAPPING_START_EVENT,
		anchor:   anchor,
		tag:      tag,
		implicit: implicit,
		style:    yaml_style_t(style),
	}
	return true
}

// Create MAPPING-END.
func yaml_mapping_end_event_initialize(event *yaml_event_t) bool {
	*event = yaml_event_t{
		typ: yaml_MAPPING_END_EVENT,
	}
	return true
}

// Destroy an event object.
func yaml_event_delete(event *yaml_event_t) {
	*event = yaml_event_t{}
}

///*
// * Create a document object.
// */
//
//YAML_DECLARE(int)
//yaml_document_initialize(document *yaml_document_t,
//        version_directive *yaml_version_directive_t,
//        tag_directives_start *yaml_tag_directive_t,
//        tag_directives_end *yaml_tag_directive_t,
//        start_implicit int, end_implicit int)
//{
//    struct {
//        error yaml_error_type_t
//    } context
//    struct {
//        start *yaml_node_t
//        end *yaml_node_t
//        top *yaml_node_t
//    } nodes = { NULL, NULL, NULL }
//    version_directive_copy *yaml_version_directive_t = NULL
//    struct {
//        start *yaml_tag_directive_t
//        end *yaml_tag_directive_t
//        top *yaml_tag_directive_t
//    } tag_directives_copy = { NULL, NULL, NULL }
//    value yaml_tag_directive_t = { NULL, NULL }
//    mark yaml_mark_t = { 0, 0, 0 }
//
//    assert(document) // Non-NULL document object is expected.
//    assert((tag_directives_start && tag_directives_end) ||
//            (tag_directives_start == tag_directives_end))
//                            // Valid tag directives are expected.
//
//    if (!STACK_INIT(&context, nodes, INITIAL_STACK_SIZE)) goto error
//
//    if (version_directive) {
//        version_directive_copy = yaml_malloc(sizeof(yaml_version_directive_t))
//        if (!version_directive_copy) goto error
//        version_directive_copy.major = version_directive.major
//        version_directive_copy.minor = version_directive.minor
//    }
//
//    if (tag_directives_start != tag_directives_end) {
//        tag_directive *yaml_tag_directive_t
//        if (!STACK_INIT(&context, tag_directives_copy, INITIAL_STACK_SIZE))
//            goto error
//        for (tag_directive = tag_directives_start
//                tag_directive != tag_directives_end; tag_directive ++) {
//            assert(tag_directive.handle)
//            assert(tag_directive.prefix)
//            if (!yaml_check_utf8(tag_directive.handle,
//                        strlen((char *)tag_directive.handle)))
//                goto error
//            if (!yaml_check_utf8(tag_directive.prefix,
//                        strlen((char *)tag_directive.prefix)))
//                goto error
//            value.handle = yaml_strdup(tag_directive.handle)
//            value.prefix = yaml_strdup(tag_directive.prefix)
//            if (!value.handle || !value.prefix) goto error
//            if (!PUSH(&context, tag_directives_copy, value))
//                goto error
//            value.handle = NULL
//            value.prefix = NULL
//        }
//    }
//
//    DOCUMENT_INIT(*document, nodes.start, nodes.end, version_directive_copy,
//            tag_directives_copy.start, tag_directives_copy.top,
//            start_implicit, end_implicit, mark, mark)
//
//    return 1
//
//error:
//    STACK_DEL(&context, nodes)
//    yaml_free(version_directive_copy)
//    while (!STACK_EMPTY(&context, tag_directives_copy)) {
//        value yaml_tag_directive_t = POP(&context, tag_directives_copy)
//        yaml_free(value.handle)
//        yaml_free(value.prefix)
//    }
//    STACK_DEL(&context, tag_directives_copy)
//    yaml_free(value.handle)
//    yaml_free(value.prefix)
//
//    return 0
//}
//
///*
// * Destroy a document object.
// */
//
//YAML_DECLARE(void)
//yaml_document_delete(document *yaml_document_t)
//{
//    struct {
//        error yaml_error_type_t
//    } context
//    tag_directive *yaml_tag_directive_t
//
//    context.error = YAML_NO_ERROR // Eliminate a compliler warning.
//
//    assert(document) // Non-NULL document object is expected.
//
//    while (!STACK_EMPTY(&context, document.nodes)) {
//        node yaml_node_t = POP(&context, document.nodes)
//        yaml_free(node.tag)
//        switch (node.type) {
//            case YAML_SCALAR_NODE:
//                yaml_free(node.data.scalar.value)
//                break
//            case YAML_SEQUENCE_NODE:
//                STACK_DEL(&context, node.data.sequence.items)
//                break
//            case YAML_MAPPING_NODE:
//                STACK_DEL(&context, node.data.mapping.pairs)
//                break
//            default:
//                assert(0) // Should not happen.
//        }
//    }
//    STACK_DEL(&context, document.nodes)
//
//    yaml_free(document.version_directive)
//    for (tag_directive = document.tag_directives.start
//            tag_directive != document.tag_directives.end
//            tag_directive++) {
//        yaml_free(tag_directive.handle)
//        yaml_free(tag_directive.prefix)
//    }
//    yaml_free(document.tag_directives.start)
//
//    memset(document, 0, sizeof(yaml_document_t))
//}
//
///**
// * Get a document node.
// */
//
//YAML_DECLARE(yaml_node_t *)
//yaml_document_get_node(document *yaml_document_t, index int)
//{
//    assert(document) // Non-NULL document object is expected.
//
//    if (index > 0 && document.nodes.start + index <= document.nodes.top) {
//        return document.nodes.start + index - 1
//    }
//    return NULL
//}
//
///**
// * Get the root object.
// */
//
//YAML_DECLARE(yaml_node_t *)
//yaml_document_get_root_node(document *yaml_document_t)
//{
//    assert(document) // Non-NULL document object is expected.
//
//    if (document.nodes.top != document.nodes.start) {
//        return document.nodes.start
//    }
//    return NULL
//}
//
///*
// * Add a scalar node to a document.
// */
//
//YAML_DECLARE(int)
//yaml_document_add_scalar(document *yaml_document_t,
//        tag *yaml_char_t, value *yaml_char_t, length int,
//        style yaml_scalar_style_t)
//{
//    struct {
//        error yaml_error_type_t
//    } context
//    mark yaml_mark_t = { 0, 0, 0 }
//    tag_copy *yaml_char_t = NULL
//    value_copy *yaml_char_t = NULL
//    node yaml_node_t
//
//    assert(document) // Non-NULL document object is expected.
//    assert(value) // Non-NULL value is expected.
//
//    if (!tag) {
//        tag = (yaml_char_t *)YAML_DEFAULT_SCALAR_TAG
//    }
//
//    if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error
//    tag_copy = yaml_strdup(tag)
//    if (!tag_copy) goto error
//
//    if (length < 0) {
//        length = strlen((char *)value)
//    }
//
//    if (!yaml_check_utf8(value, length)) goto error
//    value_copy = yaml_malloc(length+1)
//    if (!value_copy) goto error
//    memcpy(value_copy, value, length)
//    value_copy[length] = '\0'
//
//    SCALAR_NODE_INIT(node, tag_copy, value_copy, length, style, mark, mark)
//    if (!PUSH(&context, document.nodes, node)) goto error
//
//    return document.nodes.top - document.nodes.start
//
//error:
//    yaml_free(tag_copy)
//    yaml_free(value_copy)
//
//    return 0
//}
//
///*
// * Add a sequence node to a document.
// */
//
//YAML_DECLARE(int)
//yaml_document_add_sequence(document *yaml_document_t,
//        tag *yaml_char_t, style yaml_sequence_style_t)
//{
//    struct {
//        error yaml_error_type_t
//    } context
//    mark yaml_mark_t = { 0, 0, 0 }
//    tag_copy *yaml_char_t = NULL
//    struct {
//        start *yaml_node_item_t
//        end *yaml_node_item_t
//        top *yaml_node_item_t
//    } items = { NULL, NULL, NULL }
//    node yaml_node_t
//
//    assert(document) // Non-NULL document object is expected.
//
//    if (!tag) {
//        tag = (yaml_char_t *)YAML_DEFAULT_SEQUENCE_TAG
//    }
//
//    if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error
//    tag_copy = yaml_strdup(tag)
//    if (!tag_copy) goto error
//
//    if (!STACK_INIT(&context, items, INITIAL_STACK_SIZE)) goto error
//
//    SEQUENCE_NODE_INIT(node, tag_copy, items.start, items.end,
//            style, mark, mark)
//    if (!PUSH(&context, document.nodes, node)) goto error
//
//    return document.nodes.top - document.nodes.start
//
//error:
//    STACK_DEL(&context, items)
//    yaml_free(tag_copy)
//
//    return 0
//}
//
///*
// * Add a mapping node to a document.
// */
//
//YAML_DECLARE(int)
//yaml_document_add_mapping(document *yaml_document_t,
//        tag *yaml_char_t, style yaml_mapping_style_t)
//{
//    struct {
//        error yaml_error_type_t
//    } context
//    mark yaml_mark_t = { 0, 0, 0 }
//    tag_copy *yaml_char_t = NULL
//    struct {
//        start *yaml_node_pair_t
//        end *yaml_node_pair_t
//        top *yaml_node_pair_t
//    } pairs = { NULL, NULL, NULL }
//    node yaml_node_t
//
//    assert(document) // Non-NULL document object is expected.
//
//    if (!tag) {
//        tag = (yaml_char_t *)YAML_DEFAULT_MAPPING_TAG
//    }
//
//    if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error
//    tag_copy = yaml_strdup(tag)
//    if (!tag_copy) goto error
//
//    if (!STACK_INIT(&context, pairs, INITIAL_STACK_SIZE)) goto error
//
//    MAPPING_NODE_INIT(node, tag_copy, pairs.start, pairs.end,
//            style, mark, mark)
//    if (!PUSH(&context, document.nodes, node)) goto error
//
//    return document.nodes.top - document.nodes.start
//
//error:
//    STACK_DEL(&context, pairs)
//    yaml_free(tag_copy)
//
//    return 0
//}
//
///*
// * Append an item to a sequence node.
// */
//
//YAML_DECLARE(int)
//yaml_document_append_sequence_item(document *yaml_document_t,
//        sequence int, item int)
//{
//    struct {
//        error yaml_error_type_t
//    } context
//
//    assert(document) // Non-NULL document is required.
//    assert(sequence > 0
//            && document.nodes.start + sequence <= document.nodes.top)
//                            // Valid sequence id is required.
//    assert(document.nodes.start[sequence-1].type == YAML_SEQUENCE_NODE)
//                            // A sequence node is required.
//    assert(item > 0 && document.nodes.start + item <= document.nodes.top)
//                            // Valid item id is required.
//
//    if (!PUSH(&context,
//                document.nodes.start[sequence-1].data.sequence.items, item))
//        return 0
//
//    return 1
//}
//
///*
// * Append a pair of a key and a value to a mapping node.
// */
//
//YAML_DECLARE(int)
//yaml_document_append_mapping_pair(document *yaml_document_t,
//        mapping int, key int, value int)
//{
//    struct {
//        error yaml_error_type_t
//    } context
//
//    pair yaml_node_pair_t
//
//    assert(document) // Non-NULL document is required.
//    assert(mapping > 0
//            && document.nodes.start + mapping <= document.nodes.top)
//                            // Valid mapping id is required.
//    assert(document.nodes.start[mapping-1].type == YAML_MAPPING_NODE)
//                            // A mapping node is required.
//    assert(key > 0 && document.nodes.start + key <= document.nodes.top)
//                            // Valid key id is required.
//    assert(value > 0 && document.nodes.start + value <= document.nodes.top)
//                            // Valid value id is required.
//
//    pair.key = key
//    pair.value = value
//
//    if (!PUSH(&context,
//                document.nodes.start[mapping-1].data.mapping.pairs, pair))
//        return 0
//
//    return 1
//}
//
//
  07070100000FE4000081A4000000000000000000000001645E367C000031EB000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v1/decode.go package yaml

import (
	"encoding/base64"
	"fmt"
	"reflect"
	"strconv"
	"time"
)

const (
	documentNode = 1 << iota
	mappingNode
	sequenceNode
	scalarNode
	aliasNode
)

type node struct {
	kind         int
	line, column int
	tag          string
	value        string
	implicit     bool
	children     []*node
	anchors      map[string]*node
}

// ----------------------------------------------------------------------------
// Parser, produces a node tree out of a libyaml event stream.

type parser struct {
	parser yaml_parser_t
	event  yaml_event_t
	doc    *node
}

func newParser(b []byte) *parser {
	p := parser{}
	if !yaml_parser_initialize(&p.parser) {
		panic("Failed to initialize YAML emitter")
	}

	if len(b) == 0 {
		b = []byte{'\n'}
	}

	yaml_parser_set_input_string(&p.parser, b)

	p.skip()
	if p.event.typ != yaml_STREAM_START_EVENT {
		panic("Expected stream start event, got " + strconv.Itoa(int(p.event.typ)))
	}
	p.skip()
	return &p
}

func (p *parser) destroy() {
	if p.event.typ != yaml_NO_EVENT {
		yaml_event_delete(&p.event)
	}
	yaml_parser_delete(&p.parser)
}

func (p *parser) skip() {
	if p.event.typ != yaml_NO_EVENT {
		if p.event.typ == yaml_STREAM_END_EVENT {
			fail("Attempted to go past the end of stream. Corrupted value?")
		}
		yaml_event_delete(&p.event)
	}
	if !yaml_parser_parse(&p.parser, &p.event) {
		p.fail()
	}
}

func (p *parser) fail() {
	var where string
	var line int
	if p.parser.problem_mark.line != 0 {
		line = p.parser.problem_mark.line
	} else if p.parser.context_mark.line != 0 {
		line = p.parser.context_mark.line
	}
	if line != 0 {
		where = "line " + strconv.Itoa(line) + ": "
	}
	var msg string
	if len(p.parser.problem) > 0 {
		msg = p.parser.problem
	} else {
		msg = "Unknown problem parsing YAML content"
	}
	fail(where + msg)
}

func (p *parser) anchor(n *node, anchor []byte) {
	if anchor != nil {
		p.doc.anchors[string(anchor)] = n
	}
}

func (p *parser) parse() *node {
	switch p.event.typ {
	case yaml_SCALAR_EVENT:
		return p.scalar()
	case yaml_ALIAS_EVENT:
		return p.alias()
	case yaml_MAPPING_START_EVENT:
		return p.mapping()
	case yaml_SEQUENCE_START_EVENT:
		return p.sequence()
	case yaml_DOCUMENT_START_EVENT:
		return p.document()
	case yaml_STREAM_END_EVENT:
		// Happens when attempting to decode an empty buffer.
		return nil
	default:
		panic("Attempted to parse unknown event: " + strconv.Itoa(int(p.event.typ)))
	}
	panic("unreachable")
}

func (p *parser) node(kind int) *node {
	return &node{
		kind:   kind,
		line:   p.event.start_mark.line,
		column: p.event.start_mark.column,
	}
}

func (p *parser) document() *node {
	n := p.node(documentNode)
	n.anchors = make(map[string]*node)
	p.doc = n
	p.skip()
	n.children = append(n.children, p.parse())
	if p.event.typ != yaml_DOCUMENT_END_EVENT {
		panic("Expected end of document event but got " + strconv.Itoa(int(p.event.typ)))
	}
	p.skip()
	return n
}

func (p *parser) alias() *node {
	n := p.node(aliasNode)
	n.value = string(p.event.anchor)
	p.skip()
	return n
}

func (p *parser) scalar() *node {
	n := p.node(scalarNode)
	n.value = string(p.event.value)
	n.tag = string(p.event.tag)
	n.implicit = p.event.implicit
	p.anchor(n, p.event.anchor)
	p.skip()
	return n
}

func (p *parser) sequence() *node {
	n := p.node(sequenceNode)
	p.anchor(n, p.event.anchor)
	p.skip()
	for p.event.typ != yaml_SEQUENCE_END_EVENT {
		n.children = append(n.children, p.parse())
	}
	p.skip()
	return n
}

func (p *parser) mapping() *node {
	n := p.node(mappingNode)
	p.anchor(n, p.event.anchor)
	p.skip()
	for p.event.typ != yaml_MAPPING_END_EVENT {
		n.children = append(n.children, p.parse(), p.parse())
	}
	p.skip()
	return n
}

// ----------------------------------------------------------------------------
// Decoder, unmarshals a node into a provided value.

type decoder struct {
	doc     *node
	aliases map[string]bool
}

func newDecoder() *decoder {
	d := &decoder{}
	d.aliases = make(map[string]bool)
	return d
}

// d.setter deals with setters and pointer dereferencing and initialization.
//
// It's a slightly convoluted case to handle properly:
//
// - nil pointers should be initialized, unless being set to nil
// - we don't know at this point yet what's the value to SetYAML() with.
// - we can't separate pointer deref/init and setter checking, because
//   a setter may be found while going down a pointer chain.
//
// Thus, here is how it takes care of it:
//
// - out is provided as a pointer, so that it can be replaced.
// - when looking at a non-setter ptr, *out=ptr.Elem(), unless tag=!!null
// - when a setter is found, *out=interface{}, and a set() function is
//   returned to call SetYAML() with the value of *out once it's defined.
//
func (d *decoder) setter(tag string, out *reflect.Value, good *bool) (set func()) {
	if (*out).Kind() != reflect.Ptr && (*out).CanAddr() {
		setter, _ := (*out).Addr().Interface().(Setter)
		if setter != nil {
			var arg interface{}
			*out = reflect.ValueOf(&arg).Elem()
			return func() {
				*good = setter.SetYAML(shortTag(tag), arg)
			}
		}
	}
	again := true
	for again {
		again = false
		setter, _ := (*out).Interface().(Setter)
		if tag != yaml_NULL_TAG || setter != nil {
			if pv := (*out); pv.Kind() == reflect.Ptr {
				if pv.IsNil() {
					*out = reflect.New(pv.Type().Elem()).Elem()
					pv.Set((*out).Addr())
				} else {
					*out = pv.Elem()
				}
				setter, _ = pv.Interface().(Setter)
				again = true
			}
		}
		if setter != nil {
			var arg interface{}
			*out = reflect.ValueOf(&arg).Elem()
			return func() {
				*good = setter.SetYAML(shortTag(tag), arg)
			}
		}
	}
	return nil
}

func (d *decoder) unmarshal(n *node, out reflect.Value) (good bool) {
	switch n.kind {
	case documentNode:
		good = d.document(n, out)
	case scalarNode:
		good = d.scalar(n, out)
	case aliasNode:
		good = d.alias(n, out)
	case mappingNode:
		good = d.mapping(n, out)
	case sequenceNode:
		good = d.sequence(n, out)
	default:
		panic("Internal error: unknown node kind: " + strconv.Itoa(n.kind))
	}
	return
}

func (d *decoder) document(n *node, out reflect.Value) (good bool) {
	if len(n.children) == 1 {
		d.doc = n
		d.unmarshal(n.children[0], out)
		return true
	}
	return false
}

func (d *decoder) alias(n *node, out reflect.Value) (good bool) {
	an, ok := d.doc.anchors[n.value]
	if !ok {
		fail("Unknown anchor '" + n.value + "' referenced")
	}
	if d.aliases[n.value] {
		fail("Anchor '" + n.value + "' value contains itself")
	}
	d.aliases[n.value] = true
	good = d.unmarshal(an, out)
	delete(d.aliases, n.value)
	return good
}

var zeroValue reflect.Value

func resetMap(out reflect.Value) {
	for _, k := range out.MapKeys() {
		out.SetMapIndex(k, zeroValue)
	}
}

var durationType = reflect.TypeOf(time.Duration(0))

func (d *decoder) scalar(n *node, out reflect.Value) (good bool) {
	var tag string
	var resolved interface{}
	if n.tag == "" && !n.implicit {
		tag = yaml_STR_TAG
		resolved = n.value
	} else {
		tag, resolved = resolve(n.tag, n.value)
		if tag == yaml_BINARY_TAG {
			data, err := base64.StdEncoding.DecodeString(resolved.(string))
			if err != nil {
				fail("!!binary value contains invalid base64 data")
			}
			resolved = string(data)
		}
	}
	if set := d.setter(tag, &out, &good); set != nil {
		defer set()
	}
	if resolved == nil {
		if out.Kind() == reflect.Map && !out.CanAddr() {
			resetMap(out)
		} else {
			out.Set(reflect.Zero(out.Type()))
		}
		good = true
		return
	}
	switch out.Kind() {
	case reflect.String:
		if tag == yaml_BINARY_TAG {
			out.SetString(resolved.(string))
			good = true
		} else if resolved != nil {
			out.SetString(n.value)
			good = true
		}
	case reflect.Interface:
		if resolved == nil {
			out.Set(reflect.Zero(out.Type()))
		} else {
			out.Set(reflect.ValueOf(resolved))
		}
		good = true
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		switch resolved := resolved.(type) {
		case int:
			if !out.OverflowInt(int64(resolved)) {
				out.SetInt(int64(resolved))
				good = true
			}
		case int64:
			if !out.OverflowInt(resolved) {
				out.SetInt(resolved)
				good = true
			}
		case float64:
			if resolved < 1<<63-1 && !out.OverflowInt(int64(resolved)) {
				out.SetInt(int64(resolved))
				good = true
			}
		case string:
			if out.Type() == durationType {
				d, err := time.ParseDuration(resolved)
				if err == nil {
					out.SetInt(int64(d))
					good = true
				}
			}
		}
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		switch resolved := resolved.(type) {
		case int:
			if resolved >= 0 {
				out.SetUint(uint64(resolved))
				good = true
			}
		case int64:
			if resolved >= 0 {
				out.SetUint(uint64(resolved))
				good = true
			}
		case float64:
			if resolved < 1<<64-1 && !out.OverflowUint(uint64(resolved)) {
				out.SetUint(uint64(resolved))
				good = true
			}
		}
	case reflect.Bool:
		switch resolved := resolved.(type) {
		case bool:
			out.SetBool(resolved)
			good = true
		}
	case reflect.Float32, reflect.Float64:
		switch resolved := resolved.(type) {
		case int:
			out.SetFloat(float64(resolved))
			good = true
		case int64:
			out.SetFloat(float64(resolved))
			good = true
		case float64:
			out.SetFloat(resolved)
			good = true
		}
	case reflect.Ptr:
		if out.Type().Elem() == reflect.TypeOf(resolved) {
			elem := reflect.New(out.Type().Elem())
			elem.Elem().Set(reflect.ValueOf(resolved))
			out.Set(elem)
			good = true
		}
	}
	return good
}

func settableValueOf(i interface{}) reflect.Value {
	v := reflect.ValueOf(i)
	sv := reflect.New(v.Type()).Elem()
	sv.Set(v)
	return sv
}

func (d *decoder) sequence(n *node, out reflect.Value) (good bool) {
	if set := d.setter(yaml_SEQ_TAG, &out, &good); set != nil {
		defer set()
	}
	var iface reflect.Value
	if out.Kind() == reflect.Interface {
		// No type hints. Will have to use a generic sequence.
		iface = out
		out = settableValueOf(make([]interface{}, 0))
	}

	if out.Kind() != reflect.Slice {
		return false
	}
	et := out.Type().Elem()

	l := len(n.children)
	for i := 0; i < l; i++ {
		e := reflect.New(et).Elem()
		if ok := d.unmarshal(n.children[i], e); ok {
			out.Set(reflect.Append(out, e))
		}
	}
	if iface.IsValid() {
		iface.Set(out)
	}
	return true
}

func (d *decoder) mapping(n *node, out reflect.Value) (good bool) {
	if set := d.setter(yaml_MAP_TAG, &out, &good); set != nil {
		defer set()
	}
	if out.Kind() == reflect.Struct {
		return d.mappingStruct(n, out)
	}

	if out.Kind() == reflect.Interface {
		// No type hints. Will have to use a generic map.
		iface := out
		out = settableValueOf(make(map[interface{}]interface{}))
		iface.Set(out)
	}

	if out.Kind() != reflect.Map {
		return false
	}
	outt := out.Type()
	kt := outt.Key()
	et := outt.Elem()

	if out.IsNil() {
		out.Set(reflect.MakeMap(outt))
	}
	l := len(n.children)
	for i := 0; i < l; i += 2 {
		if isMerge(n.children[i]) {
			d.merge(n.children[i+1], out)
			continue
		}
		k := reflect.New(kt).Elem()
		if d.unmarshal(n.children[i], k) {
			kkind := k.Kind()
			if kkind == reflect.Interface {
				kkind = k.Elem().Kind()
			}
			if kkind == reflect.Map || kkind == reflect.Slice {
				fail(fmt.Sprintf("invalid map key: %#v", k.Interface()))
			}
			e := reflect.New(et).Elem()
			if d.unmarshal(n.children[i+1], e) {
				out.SetMapIndex(k, e)
			}
		}
	}
	return true
}

func (d *decoder) mappingStruct(n *node, out reflect.Value) (good bool) {
	sinfo, err := getStructInfo(out.Type())
	if err != nil {
		panic(err)
	}
	name := settableValueOf("")
	l := len(n.children)
	for i := 0; i < l; i += 2 {
		ni := n.children[i]
		if isMerge(ni) {
			d.merge(n.children[i+1], out)
			continue
		}
		if !d.unmarshal(ni, name) {
			continue
		}
		if info, ok := sinfo.FieldsMap[name.String()]; ok {
			var field reflect.Value
			if info.Inline == nil {
				field = out.Field(info.Num)
			} else {
				field = out.FieldByIndex(info.Inline)
			}
			d.unmarshal(n.children[i+1], field)
		}
	}
	return true
}

func (d *decoder) merge(n *node, out reflect.Value) {
	const wantMap = "map merge requires map or sequence of maps as the value"
	switch n.kind {
	case mappingNode:
		d.unmarshal(n, out)
	case aliasNode:
		an, ok := d.doc.anchors[n.value]
		if ok && an.kind != mappingNode {
			fail(wantMap)
		}
		d.unmarshal(n, out)
	case sequenceNode:
		// Step backwards as earlier nodes take precedence.
		for i := len(n.children) - 1; i >= 0; i-- {
			ni := n.children[i]
			if ni.kind == aliasNode {
				an, ok := d.doc.anchors[ni.value]
				if ok && an.kind != mappingNode {
					fail(wantMap)
				}
			} else if ni.kind != mappingNode {
				fail(wantMap)
			}
			d.unmarshal(ni, out)
		}
	default:
		fail(wantMap)
	}
}

func isMerge(n *node) bool {
	return n.kind == scalarNode && n.value == "<<" && (n.implicit == true || n.tag == yaml_MERGE_TAG)
}
 07070100000FE5000081A4000000000000000000000001645E367C0000B0FC000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v1/emitterc.go   package yaml

import (
	"bytes"
)

// Flush the buffer if needed.
func flush(emitter *yaml_emitter_t) bool {
	if emitter.buffer_pos+5 >= len(emitter.buffer) {
		return yaml_emitter_flush(emitter)
	}
	return true
}

// Put a character to the output buffer.
func put(emitter *yaml_emitter_t, value byte) bool {
	if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) {
		return false
	}
	emitter.buffer[emitter.buffer_pos] = value
	emitter.buffer_pos++
	emitter.column++
	return true
}

// Put a line break to the output buffer.
func put_break(emitter *yaml_emitter_t) bool {
	if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) {
		return false
	}
	switch emitter.line_break {
	case yaml_CR_BREAK:
		emitter.buffer[emitter.buffer_pos] = '\r'
		emitter.buffer_pos += 1
	case yaml_LN_BREAK:
		emitter.buffer[emitter.buffer_pos] = '\n'
		emitter.buffer_pos += 1
	case yaml_CRLN_BREAK:
		emitter.buffer[emitter.buffer_pos+0] = '\r'
		emitter.buffer[emitter.buffer_pos+1] = '\n'
		emitter.buffer_pos += 2
	default:
		panic("unknown line break setting")
	}
	emitter.column = 0
	emitter.line++
	return true
}

// Copy a character from a string into buffer.
func write(emitter *yaml_emitter_t, s []byte, i *int) bool {
	if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) {
		return false
	}
	p := emitter.buffer_pos
	w := width(s[*i])
	switch w {
	case 4:
		emitter.buffer[p+3] = s[*i+3]
		fallthrough
	case 3:
		emitter.buffer[p+2] = s[*i+2]
		fallthrough
	case 2:
		emitter.buffer[p+1] = s[*i+1]
		fallthrough
	case 1:
		emitter.buffer[p+0] = s[*i+0]
	default:
		panic("unknown character width")
	}
	emitter.column++
	emitter.buffer_pos += w
	*i += w
	return true
}

// Write a whole string into buffer.
func write_all(emitter *yaml_emitter_t, s []byte) bool {
	for i := 0; i < len(s); {
		if !write(emitter, s, &i) {
			return false
		}
	}
	return true
}

// Copy a line break character from a string into buffer.
func write_break(emitter *yaml_emitter_t, s []byte, i *int) bool {
	if s[*i] == '\n' {
		if !put_break(emitter) {
			return false
		}
		*i++
	} else {
		if !write(emitter, s, i) {
			return false
		}
		emitter.column = 0
		emitter.line++
	}
	return true
}

// Set an emitter error and return false.
func yaml_emitter_set_emitter_error(emitter *yaml_emitter_t, problem string) bool {
	emitter.error = yaml_EMITTER_ERROR
	emitter.problem = problem
	return false
}

// Emit an event.
func yaml_emitter_emit(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	emitter.events = append(emitter.events, *event)
	for !yaml_emitter_need_more_events(emitter) {
		event := &emitter.events[emitter.events_head]
		if !yaml_emitter_analyze_event(emitter, event) {
			return false
		}
		if !yaml_emitter_state_machine(emitter, event) {
			return false
		}
		yaml_event_delete(event)
		emitter.events_head++
	}
	return true
}

// Check if we need to accumulate more events before emitting.
//
// We accumulate extra
//  - 1 event for DOCUMENT-START
//  - 2 events for SEQUENCE-START
//  - 3 events for MAPPING-START
//
func yaml_emitter_need_more_events(emitter *yaml_emitter_t) bool {
	if emitter.events_head == len(emitter.events) {
		return true
	}
	var accumulate int
	switch emitter.events[emitter.events_head].typ {
	case yaml_DOCUMENT_START_EVENT:
		accumulate = 1
		break
	case yaml_SEQUENCE_START_EVENT:
		accumulate = 2
		break
	case yaml_MAPPING_START_EVENT:
		accumulate = 3
		break
	default:
		return false
	}
	if len(emitter.events)-emitter.events_head > accumulate {
		return false
	}
	var level int
	for i := emitter.events_head; i < len(emitter.events); i++ {
		switch emitter.events[i].typ {
		case yaml_STREAM_START_EVENT, yaml_DOCUMENT_START_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT:
			level++
		case yaml_STREAM_END_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_END_EVENT, yaml_MAPPING_END_EVENT:
			level--
		}
		if level == 0 {
			return false
		}
	}
	return true
}

// Append a directive to the directives stack.
func yaml_emitter_append_tag_directive(emitter *yaml_emitter_t, value *yaml_tag_directive_t, allow_duplicates bool) bool {
	for i := 0; i < len(emitter.tag_directives); i++ {
		if bytes.Equal(value.handle, emitter.tag_directives[i].handle) {
			if allow_duplicates {
				return true
			}
			return yaml_emitter_set_emitter_error(emitter, "duplicate %TAG directive")
		}
	}

	// [Go] Do we actually need to copy this given garbage collection
	// and the lack of deallocating destructors?
	tag_copy := yaml_tag_directive_t{
		handle: make([]byte, len(value.handle)),
		prefix: make([]byte, len(value.prefix)),
	}
	copy(tag_copy.handle, value.handle)
	copy(tag_copy.prefix, value.prefix)
	emitter.tag_directives = append(emitter.tag_directives, tag_copy)
	return true
}

// Increase the indentation level.
func yaml_emitter_increase_indent(emitter *yaml_emitter_t, flow, indentless bool) bool {
	emitter.indents = append(emitter.indents, emitter.indent)
	if emitter.indent < 0 {
		if flow {
			emitter.indent = emitter.best_indent
		} else {
			emitter.indent = 0
		}
	} else if !indentless {
		emitter.indent += emitter.best_indent
	}
	return true
}

// State dispatcher.
func yaml_emitter_state_machine(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	switch emitter.state {
	default:
	case yaml_EMIT_STREAM_START_STATE:
		return yaml_emitter_emit_stream_start(emitter, event)

	case yaml_EMIT_FIRST_DOCUMENT_START_STATE:
		return yaml_emitter_emit_document_start(emitter, event, true)

	case yaml_EMIT_DOCUMENT_START_STATE:
		return yaml_emitter_emit_document_start(emitter, event, false)

	case yaml_EMIT_DOCUMENT_CONTENT_STATE:
		return yaml_emitter_emit_document_content(emitter, event)

	case yaml_EMIT_DOCUMENT_END_STATE:
		return yaml_emitter_emit_document_end(emitter, event)

	case yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE:
		return yaml_emitter_emit_flow_sequence_item(emitter, event, true)

	case yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE:
		return yaml_emitter_emit_flow_sequence_item(emitter, event, false)

	case yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE:
		return yaml_emitter_emit_flow_mapping_key(emitter, event, true)

	case yaml_EMIT_FLOW_MAPPING_KEY_STATE:
		return yaml_emitter_emit_flow_mapping_key(emitter, event, false)

	case yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE:
		return yaml_emitter_emit_flow_mapping_value(emitter, event, true)

	case yaml_EMIT_FLOW_MAPPING_VALUE_STATE:
		return yaml_emitter_emit_flow_mapping_value(emitter, event, false)

	case yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE:
		return yaml_emitter_emit_block_sequence_item(emitter, event, true)

	case yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE:
		return yaml_emitter_emit_block_sequence_item(emitter, event, false)

	case yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE:
		return yaml_emitter_emit_block_mapping_key(emitter, event, true)

	case yaml_EMIT_BLOCK_MAPPING_KEY_STATE:
		return yaml_emitter_emit_block_mapping_key(emitter, event, false)

	case yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE:
		return yaml_emitter_emit_block_mapping_value(emitter, event, true)

	case yaml_EMIT_BLOCK_MAPPING_VALUE_STATE:
		return yaml_emitter_emit_block_mapping_value(emitter, event, false)

	case yaml_EMIT_END_STATE:
		return yaml_emitter_set_emitter_error(emitter, "expected nothing after STREAM-END")
	}
	panic("invalid emitter state")
}

// Expect STREAM-START.
func yaml_emitter_emit_stream_start(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	if event.typ != yaml_STREAM_START_EVENT {
		return yaml_emitter_set_emitter_error(emitter, "expected STREAM-START")
	}
	if emitter.encoding == yaml_ANY_ENCODING {
		emitter.encoding = event.encoding
		if emitter.encoding == yaml_ANY_ENCODING {
			emitter.encoding = yaml_UTF8_ENCODING
		}
	}
	if emitter.best_indent < 2 || emitter.best_indent > 9 {
		emitter.best_indent = 2
	}
	if emitter.best_width >= 0 && emitter.best_width <= emitter.best_indent*2 {
		emitter.best_width = 80
	}
	if emitter.best_width < 0 {
		emitter.best_width = 1<<31 - 1
	}
	if emitter.line_break == yaml_ANY_BREAK {
		emitter.line_break = yaml_LN_BREAK
	}

	emitter.indent = -1
	emitter.line = 0
	emitter.column = 0
	emitter.whitespace = true
	emitter.indention = true

	if emitter.encoding != yaml_UTF8_ENCODING {
		if !yaml_emitter_write_bom(emitter) {
			return false
		}
	}
	emitter.state = yaml_EMIT_FIRST_DOCUMENT_START_STATE
	return true
}

// Expect DOCUMENT-START or STREAM-END.
func yaml_emitter_emit_document_start(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {

	if event.typ == yaml_DOCUMENT_START_EVENT {

		if event.version_directive != nil {
			if !yaml_emitter_analyze_version_directive(emitter, event.version_directive) {
				return false
			}
		}

		for i := 0; i < len(event.tag_directives); i++ {
			tag_directive := &event.tag_directives[i]
			if !yaml_emitter_analyze_tag_directive(emitter, tag_directive) {
				return false
			}
			if !yaml_emitter_append_tag_directive(emitter, tag_directive, false) {
				return false
			}
		}

		for i := 0; i < len(default_tag_directives); i++ {
			tag_directive := &default_tag_directives[i]
			if !yaml_emitter_append_tag_directive(emitter, tag_directive, true) {
				return false
			}
		}

		implicit := event.implicit
		if !first || emitter.canonical {
			implicit = false
		}

		if emitter.open_ended && (event.version_directive != nil || len(event.tag_directives) > 0) {
			if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) {
				return false
			}
			if !yaml_emitter_write_indent(emitter) {
				return false
			}
		}

		if event.version_directive != nil {
			implicit = false
			if !yaml_emitter_write_indicator(emitter, []byte("%YAML"), true, false, false) {
				return false
			}
			if !yaml_emitter_write_indicator(emitter, []byte("1.1"), true, false, false) {
				return false
			}
			if !yaml_emitter_write_indent(emitter) {
				return false
			}
		}

		if len(event.tag_directives) > 0 {
			implicit = false
			for i := 0; i < len(event.tag_directives); i++ {
				tag_directive := &event.tag_directives[i]
				if !yaml_emitter_write_indicator(emitter, []byte("%TAG"), true, false, false) {
					return false
				}
				if !yaml_emitter_write_tag_handle(emitter, tag_directive.handle) {
					return false
				}
				if !yaml_emitter_write_tag_content(emitter, tag_directive.prefix, true) {
					return false
				}
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
			}
		}

		if yaml_emitter_check_empty_document(emitter) {
			implicit = false
		}
		if !implicit {
			if !yaml_emitter_write_indent(emitter) {
				return false
			}
			if !yaml_emitter_write_indicator(emitter, []byte("---"), true, false, false) {
				return false
			}
			if emitter.canonical {
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
			}
		}

		emitter.state = yaml_EMIT_DOCUMENT_CONTENT_STATE
		return true
	}

	if event.typ == yaml_STREAM_END_EVENT {
		if emitter.open_ended {
			if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) {
				return false
			}
			if !yaml_emitter_write_indent(emitter) {
				return false
			}
		}
		if !yaml_emitter_flush(emitter) {
			return false
		}
		emitter.state = yaml_EMIT_END_STATE
		return true
	}

	return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-START or STREAM-END")
}

// Expect the root node.
func yaml_emitter_emit_document_content(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	emitter.states = append(emitter.states, yaml_EMIT_DOCUMENT_END_STATE)
	return yaml_emitter_emit_node(emitter, event, true, false, false, false)
}

// Expect DOCUMENT-END.
func yaml_emitter_emit_document_end(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	if event.typ != yaml_DOCUMENT_END_EVENT {
		return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-END")
	}
	if !yaml_emitter_write_indent(emitter) {
		return false
	}
	if !event.implicit {
		// [Go] Allocate the slice elsewhere.
		if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) {
			return false
		}
		if !yaml_emitter_write_indent(emitter) {
			return false
		}
	}
	if !yaml_emitter_flush(emitter) {
		return false
	}
	emitter.state = yaml_EMIT_DOCUMENT_START_STATE
	emitter.tag_directives = emitter.tag_directives[:0]
	return true
}

// Expect a flow item node.
func yaml_emitter_emit_flow_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {
	if first {
		if !yaml_emitter_write_indicator(emitter, []byte{'['}, true, true, false) {
			return false
		}
		if !yaml_emitter_increase_indent(emitter, true, false) {
			return false
		}
		emitter.flow_level++
	}

	if event.typ == yaml_SEQUENCE_END_EVENT {
		emitter.flow_level--
		emitter.indent = emitter.indents[len(emitter.indents)-1]
		emitter.indents = emitter.indents[:len(emitter.indents)-1]
		if emitter.canonical && !first {
			if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {
				return false
			}
			if !yaml_emitter_write_indent(emitter) {
				return false
			}
		}
		if !yaml_emitter_write_indicator(emitter, []byte{']'}, false, false, false) {
			return false
		}
		emitter.state = emitter.states[len(emitter.states)-1]
		emitter.states = emitter.states[:len(emitter.states)-1]

		return true
	}

	if !first {
		if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {
			return false
		}
	}

	if emitter.canonical || emitter.column > emitter.best_width {
		if !yaml_emitter_write_indent(emitter) {
			return false
		}
	}
	emitter.states = append(emitter.states, yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE)
	return yaml_emitter_emit_node(emitter, event, false, true, false, false)
}

// Expect a flow key node.
func yaml_emitter_emit_flow_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {
	if first {
		if !yaml_emitter_write_indicator(emitter, []byte{'{'}, true, true, false) {
			return false
		}
		if !yaml_emitter_increase_indent(emitter, true, false) {
			return false
		}
		emitter.flow_level++
	}

	if event.typ == yaml_MAPPING_END_EVENT {
		emitter.flow_level--
		emitter.indent = emitter.indents[len(emitter.indents)-1]
		emitter.indents = emitter.indents[:len(emitter.indents)-1]
		if emitter.canonical && !first {
			if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {
				return false
			}
			if !yaml_emitter_write_indent(emitter) {
				return false
			}
		}
		if !yaml_emitter_write_indicator(emitter, []byte{'}'}, false, false, false) {
			return false
		}
		emitter.state = emitter.states[len(emitter.states)-1]
		emitter.states = emitter.states[:len(emitter.states)-1]
		return true
	}

	if !first {
		if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {
			return false
		}
	}
	if emitter.canonical || emitter.column > emitter.best_width {
		if !yaml_emitter_write_indent(emitter) {
			return false
		}
	}

	if !emitter.canonical && yaml_emitter_check_simple_key(emitter) {
		emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE)
		return yaml_emitter_emit_node(emitter, event, false, false, true, true)
	}
	if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, false) {
		return false
	}
	emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_VALUE_STATE)
	return yaml_emitter_emit_node(emitter, event, false, false, true, false)
}

// Expect a flow value node.
func yaml_emitter_emit_flow_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool {
	if simple {
		if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) {
			return false
		}
	} else {
		if emitter.canonical || emitter.column > emitter.best_width {
			if !yaml_emitter_write_indent(emitter) {
				return false
			}
		}
		if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, false) {
			return false
		}
	}
	emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_KEY_STATE)
	return yaml_emitter_emit_node(emitter, event, false, false, true, false)
}

// Expect a block item node.
func yaml_emitter_emit_block_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {
	if first {
		if !yaml_emitter_increase_indent(emitter, false, emitter.mapping_context && !emitter.indention) {
			return false
		}
	}
	if event.typ == yaml_SEQUENCE_END_EVENT {
		emitter.indent = emitter.indents[len(emitter.indents)-1]
		emitter.indents = emitter.indents[:len(emitter.indents)-1]
		emitter.state = emitter.states[len(emitter.states)-1]
		emitter.states = emitter.states[:len(emitter.states)-1]
		return true
	}
	if !yaml_emitter_write_indent(emitter) {
		return false
	}
	if !yaml_emitter_write_indicator(emitter, []byte{'-'}, true, false, true) {
		return false
	}
	emitter.states = append(emitter.states, yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE)
	return yaml_emitter_emit_node(emitter, event, false, true, false, false)
}

// Expect a block key node.
func yaml_emitter_emit_block_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {
	if first {
		if !yaml_emitter_increase_indent(emitter, false, false) {
			return false
		}
	}
	if event.typ == yaml_MAPPING_END_EVENT {
		emitter.indent = emitter.indents[len(emitter.indents)-1]
		emitter.indents = emitter.indents[:len(emitter.indents)-1]
		emitter.state = emitter.states[len(emitter.states)-1]
		emitter.states = emitter.states[:len(emitter.states)-1]
		return true
	}
	if !yaml_emitter_write_indent(emitter) {
		return false
	}
	if yaml_emitter_check_simple_key(emitter) {
		emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE)
		return yaml_emitter_emit_node(emitter, event, false, false, true, true)
	}
	if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, true) {
		return false
	}
	emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_VALUE_STATE)
	return yaml_emitter_emit_node(emitter, event, false, false, true, false)
}

// Expect a block value node.
func yaml_emitter_emit_block_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool {
	if simple {
		if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) {
			return false
		}
	} else {
		if !yaml_emitter_write_indent(emitter) {
			return false
		}
		if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, true) {
			return false
		}
	}
	emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_KEY_STATE)
	return yaml_emitter_emit_node(emitter, event, false, false, true, false)
}

// Expect a node.
func yaml_emitter_emit_node(emitter *yaml_emitter_t, event *yaml_event_t,
	root bool, sequence bool, mapping bool, simple_key bool) bool {

	emitter.root_context = root
	emitter.sequence_context = sequence
	emitter.mapping_context = mapping
	emitter.simple_key_context = simple_key

	switch event.typ {
	case yaml_ALIAS_EVENT:
		return yaml_emitter_emit_alias(emitter, event)
	case yaml_SCALAR_EVENT:
		return yaml_emitter_emit_scalar(emitter, event)
	case yaml_SEQUENCE_START_EVENT:
		return yaml_emitter_emit_sequence_start(emitter, event)
	case yaml_MAPPING_START_EVENT:
		return yaml_emitter_emit_mapping_start(emitter, event)
	default:
		return yaml_emitter_set_emitter_error(emitter,
			"expected SCALAR, SEQUENCE-START, MAPPING-START, or ALIAS")
	}
	return false
}

// Expect ALIAS.
func yaml_emitter_emit_alias(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	if !yaml_emitter_process_anchor(emitter) {
		return false
	}
	emitter.state = emitter.states[len(emitter.states)-1]
	emitter.states = emitter.states[:len(emitter.states)-1]
	return true
}

// Expect SCALAR.
func yaml_emitter_emit_scalar(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	if !yaml_emitter_select_scalar_style(emitter, event) {
		return false
	}
	if !yaml_emitter_process_anchor(emitter) {
		return false
	}
	if !yaml_emitter_process_tag(emitter) {
		return false
	}
	if !yaml_emitter_increase_indent(emitter, true, false) {
		return false
	}
	if !yaml_emitter_process_scalar(emitter) {
		return false
	}
	emitter.indent = emitter.indents[len(emitter.indents)-1]
	emitter.indents = emitter.indents[:len(emitter.indents)-1]
	emitter.state = emitter.states[len(emitter.states)-1]
	emitter.states = emitter.states[:len(emitter.states)-1]
	return true
}

// Expect SEQUENCE-START.
func yaml_emitter_emit_sequence_start(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	if !yaml_emitter_process_anchor(emitter) {
		return false
	}
	if !yaml_emitter_process_tag(emitter) {
		return false
	}
	if emitter.flow_level > 0 || emitter.canonical || event.sequence_style() == yaml_FLOW_SEQUENCE_STYLE ||
		yaml_emitter_check_empty_sequence(emitter) {
		emitter.state = yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE
	} else {
		emitter.state = yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE
	}
	return true
}

// Expect MAPPING-START.
func yaml_emitter_emit_mapping_start(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	if !yaml_emitter_process_anchor(emitter) {
		return false
	}
	if !yaml_emitter_process_tag(emitter) {
		return false
	}
	if emitter.flow_level > 0 || emitter.canonical || event.mapping_style() == yaml_FLOW_MAPPING_STYLE ||
		yaml_emitter_check_empty_mapping(emitter) {
		emitter.state = yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE
	} else {
		emitter.state = yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE
	}
	return true
}

// Check if the document content is an empty scalar.
func yaml_emitter_check_empty_document(emitter *yaml_emitter_t) bool {
	return false // [Go] Huh?
}

// Check if the next events represent an empty sequence.
func yaml_emitter_check_empty_sequence(emitter *yaml_emitter_t) bool {
	if len(emitter.events)-emitter.events_head < 2 {
		return false
	}
	return emitter.events[emitter.events_head].typ == yaml_SEQUENCE_START_EVENT &&
		emitter.events[emitter.events_head+1].typ == yaml_SEQUENCE_END_EVENT
}

// Check if the next events represent an empty mapping.
func yaml_emitter_check_empty_mapping(emitter *yaml_emitter_t) bool {
	if len(emitter.events)-emitter.events_head < 2 {
		return false
	}
	return emitter.events[emitter.events_head].typ == yaml_MAPPING_START_EVENT &&
		emitter.events[emitter.events_head+1].typ == yaml_MAPPING_END_EVENT
}

// Check if the next node can be expressed as a simple key.
func yaml_emitter_check_simple_key(emitter *yaml_emitter_t) bool {
	length := 0
	switch emitter.events[emitter.events_head].typ {
	case yaml_ALIAS_EVENT:
		length += len(emitter.anchor_data.anchor)
	case yaml_SCALAR_EVENT:
		if emitter.scalar_data.multiline {
			return false
		}
		length += len(emitter.anchor_data.anchor) +
			len(emitter.tag_data.handle) +
			len(emitter.tag_data.suffix) +
			len(emitter.scalar_data.value)
	case yaml_SEQUENCE_START_EVENT:
		if !yaml_emitter_check_empty_sequence(emitter) {
			return false
		}
		length += len(emitter.anchor_data.anchor) +
			len(emitter.tag_data.handle) +
			len(emitter.tag_data.suffix)
	case yaml_MAPPING_START_EVENT:
		if !yaml_emitter_check_empty_mapping(emitter) {
			return false
		}
		length += len(emitter.anchor_data.anchor) +
			len(emitter.tag_data.handle) +
			len(emitter.tag_data.suffix)
	default:
		return false
	}
	return length <= 128
}

// Determine an acceptable scalar style.
func yaml_emitter_select_scalar_style(emitter *yaml_emitter_t, event *yaml_event_t) bool {

	no_tag := len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0
	if no_tag && !event.implicit && !event.quoted_implicit {
		return yaml_emitter_set_emitter_error(emitter, "neither tag nor implicit flags are specified")
	}

	style := event.scalar_style()
	if style == yaml_ANY_SCALAR_STYLE {
		style = yaml_PLAIN_SCALAR_STYLE
	}
	if emitter.canonical {
		style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
	}
	if emitter.simple_key_context && emitter.scalar_data.multiline {
		style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
	}

	if style == yaml_PLAIN_SCALAR_STYLE {
		if emitter.flow_level > 0 && !emitter.scalar_data.flow_plain_allowed ||
			emitter.flow_level == 0 && !emitter.scalar_data.block_plain_allowed {
			style = yaml_SINGLE_QUOTED_SCALAR_STYLE
		}
		if len(emitter.scalar_data.value) == 0 && (emitter.flow_level > 0 || emitter.simple_key_context) {
			style = yaml_SINGLE_QUOTED_SCALAR_STYLE
		}
		if no_tag && !event.implicit {
			style = yaml_SINGLE_QUOTED_SCALAR_STYLE
		}
	}
	if style == yaml_SINGLE_QUOTED_SCALAR_STYLE {
		if !emitter.scalar_data.single_quoted_allowed {
			style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
		}
	}
	if style == yaml_LITERAL_SCALAR_STYLE || style == yaml_FOLDED_SCALAR_STYLE {
		if !emitter.scalar_data.block_allowed || emitter.flow_level > 0 || emitter.simple_key_context {
			style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
		}
	}

	if no_tag && !event.quoted_implicit && style != yaml_PLAIN_SCALAR_STYLE {
		emitter.tag_data.handle = []byte{'!'}
	}
	emitter.scalar_data.style = style
	return true
}

// Write an achor.
func yaml_emitter_process_anchor(emitter *yaml_emitter_t) bool {
	if emitter.anchor_data.anchor == nil {
		return true
	}
	c := []byte{'&'}
	if emitter.anchor_data.alias {
		c[0] = '*'
	}
	if !yaml_emitter_write_indicator(emitter, c, true, false, false) {
		return false
	}
	return yaml_emitter_write_anchor(emitter, emitter.anchor_data.anchor)
}

// Write a tag.
func yaml_emitter_process_tag(emitter *yaml_emitter_t) bool {
	if len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 {
		return true
	}
	if len(emitter.tag_data.handle) > 0 {
		if !yaml_emitter_write_tag_handle(emitter, emitter.tag_data.handle) {
			return false
		}
		if len(emitter.tag_data.suffix) > 0 {
			if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) {
				return false
			}
		}
	} else {
		// [Go] Allocate these slices elsewhere.
		if !yaml_emitter_write_indicator(emitter, []byte("!<"), true, false, false) {
			return false
		}
		if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) {
			return false
		}
		if !yaml_emitter_write_indicator(emitter, []byte{'>'}, false, false, false) {
			return false
		}
	}
	return true
}

// Write a scalar.
func yaml_emitter_process_scalar(emitter *yaml_emitter_t) bool {
	switch emitter.scalar_data.style {
	case yaml_PLAIN_SCALAR_STYLE:
		return yaml_emitter_write_plain_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context)

	case yaml_SINGLE_QUOTED_SCALAR_STYLE:
		return yaml_emitter_write_single_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context)

	case yaml_DOUBLE_QUOTED_SCALAR_STYLE:
		return yaml_emitter_write_double_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context)

	case yaml_LITERAL_SCALAR_STYLE:
		return yaml_emitter_write_literal_scalar(emitter, emitter.scalar_data.value)

	case yaml_FOLDED_SCALAR_STYLE:
		return yaml_emitter_write_folded_scalar(emitter, emitter.scalar_data.value)
	}
	panic("unknown scalar style")
}

// Check if a %YAML directive is valid.
func yaml_emitter_analyze_version_directive(emitter *yaml_emitter_t, version_directive *yaml_version_directive_t) bool {
	if version_directive.major != 1 || version_directive.minor != 1 {
		return yaml_emitter_set_emitter_error(emitter, "incompatible %YAML directive")
	}
	return true
}

// Check if a %TAG directive is valid.
func yaml_emitter_analyze_tag_directive(emitter *yaml_emitter_t, tag_directive *yaml_tag_directive_t) bool {
	handle := tag_directive.handle
	prefix := tag_directive.prefix
	if len(handle) == 0 {
		return yaml_emitter_set_emitter_error(emitter, "tag handle must not be empty")
	}
	if handle[0] != '!' {
		return yaml_emitter_set_emitter_error(emitter, "tag handle must start with '!'")
	}
	if handle[len(handle)-1] != '!' {
		return yaml_emitter_set_emitter_error(emitter, "tag handle must end with '!'")
	}
	for i := 1; i < len(handle)-1; i += width(handle[i]) {
		if !is_alpha(handle, i) {
			return yaml_emitter_set_emitter_error(emitter, "tag handle must contain alphanumerical characters only")
		}
	}
	if len(prefix) == 0 {
		return yaml_emitter_set_emitter_error(emitter, "tag prefix must not be empty")
	}
	return true
}

// Check if an anchor is valid.
func yaml_emitter_analyze_anchor(emitter *yaml_emitter_t, anchor []byte, alias bool) bool {
	if len(anchor) == 0 {
		problem := "anchor value must not be empty"
		if alias {
			problem = "alias value must not be empty"
		}
		return yaml_emitter_set_emitter_error(emitter, problem)
	}
	for i := 0; i < len(anchor); i += width(anchor[i]) {
		if !is_alpha(anchor, i) {
			problem := "anchor value must contain alphanumerical characters only"
			if alias {
				problem = "alias value must contain alphanumerical characters only"
			}
			return yaml_emitter_set_emitter_error(emitter, problem)
		}
	}
	emitter.anchor_data.anchor = anchor
	emitter.anchor_data.alias = alias
	return true
}

// Check if a tag is valid.
func yaml_emitter_analyze_tag(emitter *yaml_emitter_t, tag []byte) bool {
	if len(tag) == 0 {
		return yaml_emitter_set_emitter_error(emitter, "tag value must not be empty")
	}
	for i := 0; i < len(emitter.tag_directives); i++ {
		tag_directive := &emitter.tag_directives[i]
		if bytes.HasPrefix(tag, tag_directive.prefix) {
			emitter.tag_data.handle = tag_directive.handle
			emitter.tag_data.suffix = tag[len(tag_directive.prefix):]
			return true
		}
	}
	emitter.tag_data.suffix = tag
	return true
}

// Check if a scalar is valid.
func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool {
	var (
		block_indicators   = false
		flow_indicators    = false
		line_breaks        = false
		special_characters = false

		leading_space  = false
		leading_break  = false
		trailing_space = false
		trailing_break = false
		break_space    = false
		space_break    = false

		preceeded_by_whitespace = false
		followed_by_whitespace  = false
		previous_space          = false
		previous_break          = false
	)

	emitter.scalar_data.value = value

	if len(value) == 0 {
		emitter.scalar_data.multiline = false
		emitter.scalar_data.flow_plain_allowed = false
		emitter.scalar_data.block_plain_allowed = true
		emitter.scalar_data.single_quoted_allowed = true
		emitter.scalar_data.block_allowed = false
		return true
	}

	if len(value) >= 3 && ((value[0] == '-' && value[1] == '-' && value[2] == '-') || (value[0] == '.' && value[1] == '.' && value[2] == '.')) {
		block_indicators = true
		flow_indicators = true
	}

	preceeded_by_whitespace = true
	for i, w := 0, 0; i < len(value); i += w {
		w = width(value[0])
		followed_by_whitespace = i+w >= len(value) || is_blank(value, i+w)

		if i == 0 {
			switch value[i] {
			case '#', ',', '[', ']', '{', '}', '&', '*', '!', '|', '>', '\'', '"', '%', '@', '`':
				flow_indicators = true
				block_indicators = true
			case '?', ':':
				flow_indicators = true
				if followed_by_whitespace {
					block_indicators = true
				}
			case '-':
				if followed_by_whitespace {
					flow_indicators = true
					block_indicators = true
				}
			}
		} else {
			switch value[i] {
			case ',', '?', '[', ']', '{', '}':
				flow_indicators = true
			case ':':
				flow_indicators = true
				if followed_by_whitespace {
					block_indicators = true
				}
			case '#':
				if preceeded_by_whitespace {
					flow_indicators = true
					block_indicators = true
				}
			}
		}

		if !is_printable(value, i) || !is_ascii(value, i) && !emitter.unicode {
			special_characters = true
		}
		if is_space(value, i) {
			if i == 0 {
				leading_space = true
			}
			if i+width(value[i]) == len(value) {
				trailing_space = true
			}
			if previous_break {
				break_space = true
			}
			previous_space = true
			previous_break = false
		} else if is_break(value, i) {
			line_breaks = true
			if i == 0 {
				leading_break = true
			}
			if i+width(value[i]) == len(value) {
				trailing_break = true
			}
			if previous_space {
				space_break = true
			}
			previous_space = false
			previous_break = true
		} else {
			previous_space = false
			previous_break = false
		}

		// [Go]: Why 'z'? Couldn't be the end of the string as that's the loop condition.
		preceeded_by_whitespace = is_blankz(value, i)
	}

	emitter.scalar_data.multiline = line_breaks
	emitter.scalar_data.flow_plain_allowed = true
	emitter.scalar_data.block_plain_allowed = true
	emitter.scalar_data.single_quoted_allowed = true
	emitter.scalar_data.block_allowed = true

	if leading_space || leading_break || trailing_space || trailing_break {
		emitter.scalar_data.flow_plain_allowed = false
		emitter.scalar_data.block_plain_allowed = false
	}
	if trailing_space {
		emitter.scalar_data.block_allowed = false
	}
	if break_space {
		emitter.scalar_data.flow_plain_allowed = false
		emitter.scalar_data.block_plain_allowed = false
		emitter.scalar_data.single_quoted_allowed = false
	}
	if space_break || special_characters {
		emitter.scalar_data.flow_plain_allowed = false
		emitter.scalar_data.block_plain_allowed = false
		emitter.scalar_data.single_quoted_allowed = false
		emitter.scalar_data.block_allowed = false
	}
	if line_breaks {
		emitter.scalar_data.flow_plain_allowed = false
		emitter.scalar_data.block_plain_allowed = false
	}
	if flow_indicators {
		emitter.scalar_data.flow_plain_allowed = false
	}
	if block_indicators {
		emitter.scalar_data.block_plain_allowed = false
	}
	return true
}

// Check if the event data is valid.
func yaml_emitter_analyze_event(emitter *yaml_emitter_t, event *yaml_event_t) bool {

	emitter.anchor_data.anchor = nil
	emitter.tag_data.handle = nil
	emitter.tag_data.suffix = nil
	emitter.scalar_data.value = nil

	switch event.typ {
	case yaml_ALIAS_EVENT:
		if !yaml_emitter_analyze_anchor(emitter, event.anchor, true) {
			return false
		}

	case yaml_SCALAR_EVENT:
		if len(event.anchor) > 0 {
			if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) {
				return false
			}
		}
		if len(event.tag) > 0 && (emitter.canonical || (!event.implicit && !event.quoted_implicit)) {
			if !yaml_emitter_analyze_tag(emitter, event.tag) {
				return false
			}
		}
		if !yaml_emitter_analyze_scalar(emitter, event.value) {
			return false
		}

	case yaml_SEQUENCE_START_EVENT:
		if len(event.anchor) > 0 {
			if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) {
				return false
			}
		}
		if len(event.tag) > 0 && (emitter.canonical || !event.implicit) {
			if !yaml_emitter_analyze_tag(emitter, event.tag) {
				return false
			}
		}

	case yaml_MAPPING_START_EVENT:
		if len(event.anchor) > 0 {
			if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) {
				return false
			}
		}
		if len(event.tag) > 0 && (emitter.canonical || !event.implicit) {
			if !yaml_emitter_analyze_tag(emitter, event.tag) {
				return false
			}
		}
	}
	return true
}

// Write the BOM character.
func yaml_emitter_write_bom(emitter *yaml_emitter_t) bool {
	if !flush(emitter) {
		return false
	}
	pos := emitter.buffer_pos
	emitter.buffer[pos+0] = '\xEF'
	emitter.buffer[pos+1] = '\xBB'
	emitter.buffer[pos+2] = '\xBF'
	emitter.buffer_pos += 3
	return true
}

func yaml_emitter_write_indent(emitter *yaml_emitter_t) bool {
	indent := emitter.indent
	if indent < 0 {
		indent = 0
	}
	if !emitter.indention || emitter.column > indent || (emitter.column == indent && !emitter.whitespace) {
		if !put_break(emitter) {
			return false
		}
	}
	for emitter.column < indent {
		if !put(emitter, ' ') {
			return false
		}
	}
	emitter.whitespace = true
	emitter.indention = true
	return true
}

func yaml_emitter_write_indicator(emitter *yaml_emitter_t, indicator []byte, need_whitespace, is_whitespace, is_indention bool) bool {
	if need_whitespace && !emitter.whitespace {
		if !put(emitter, ' ') {
			return false
		}
	}
	if !write_all(emitter, indicator) {
		return false
	}
	emitter.whitespace = is_whitespace
	emitter.indention = (emitter.indention && is_indention)
	emitter.open_ended = false
	return true
}

func yaml_emitter_write_anchor(emitter *yaml_emitter_t, value []byte) bool {
	if !write_all(emitter, value) {
		return false
	}
	emitter.whitespace = false
	emitter.indention = false
	return true
}

func yaml_emitter_write_tag_handle(emitter *yaml_emitter_t, value []byte) bool {
	if !emitter.whitespace {
		if !put(emitter, ' ') {
			return false
		}
	}
	if !write_all(emitter, value) {
		return false
	}
	emitter.whitespace = false
	emitter.indention = false
	return true
}

func yaml_emitter_write_tag_content(emitter *yaml_emitter_t, value []byte, need_whitespace bool) bool {
	if need_whitespace && !emitter.whitespace {
		if !put(emitter, ' ') {
			return false
		}
	}
	for i := 0; i < len(value); {
		var must_write bool
		switch value[i] {
		case ';', '/', '?', ':', '@', '&', '=', '+', '$', ',', '_', '.', '~', '*', '\'', '(', ')', '[', ']':
			must_write = true
		default:
			must_write = is_alpha(value, i)
		}
		if must_write {
			if !write(emitter, value, &i) {
				return false
			}
		} else {
			w := width(value[i])
			for k := 0; k < w; k++ {
				octet := value[i]
				i++
				if !put(emitter, '%') {
					return false
				}

				c := octet >> 4
				if c < 10 {
					c += '0'
				} else {
					c += 'A' - 10
				}
				if !put(emitter, c) {
					return false
				}

				c = octet & 0x0f
				if c < 10 {
					c += '0'
				} else {
					c += 'A' - 10
				}
				if !put(emitter, c) {
					return false
				}
			}
		}
	}
	emitter.whitespace = false
	emitter.indention = false
	return true
}

func yaml_emitter_write_plain_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool {
	if !emitter.whitespace {
		if !put(emitter, ' ') {
			return false
		}
	}

	spaces := false
	breaks := false
	for i := 0; i < len(value); {
		if is_space(value, i) {
			if allow_breaks && !spaces && emitter.column > emitter.best_width && !is_space(value, i+1) {
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
				i += width(value[i])
			} else {
				if !write(emitter, value, &i) {
					return false
				}
			}
			spaces = true
		} else if is_break(value, i) {
			if !breaks && value[i] == '\n' {
				if !put_break(emitter) {
					return false
				}
			}
			if !write_break(emitter, value, &i) {
				return false
			}
			emitter.indention = true
			breaks = true
		} else {
			if breaks {
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
			}
			if !write(emitter, value, &i) {
				return false
			}
			emitter.indention = false
			spaces = false
			breaks = false
		}
	}

	emitter.whitespace = false
	emitter.indention = false
	if emitter.root_context {
		emitter.open_ended = true
	}

	return true
}

func yaml_emitter_write_single_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool {

	if !yaml_emitter_write_indicator(emitter, []byte{'\''}, true, false, false) {
		return false
	}

	spaces := false
	breaks := false
	for i := 0; i < len(value); {
		if is_space(value, i) {
			if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 && !is_space(value, i+1) {
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
				i += width(value[i])
			} else {
				if !write(emitter, value, &i) {
					return false
				}
			}
			spaces = true
		} else if is_break(value, i) {
			if !breaks && value[i] == '\n' {
				if !put_break(emitter) {
					return false
				}
			}
			if !write_break(emitter, value, &i) {
				return false
			}
			emitter.indention = true
			breaks = true
		} else {
			if breaks {
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
			}
			if value[i] == '\'' {
				if !put(emitter, '\'') {
					return false
				}
			}
			if !write(emitter, value, &i) {
				return false
			}
			emitter.indention = false
			spaces = false
			breaks = false
		}
	}
	if !yaml_emitter_write_indicator(emitter, []byte{'\''}, false, false, false) {
		return false
	}
	emitter.whitespace = false
	emitter.indention = false
	return true
}

func yaml_emitter_write_double_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool {
	spaces := false
	if !yaml_emitter_write_indicator(emitter, []byte{'"'}, true, false, false) {
		return false
	}

	for i := 0; i < len(value); {
		if !is_printable(value, i) || (!emitter.unicode && !is_ascii(value, i)) ||
			is_bom(value, i) || is_break(value, i) ||
			value[i] == '"' || value[i] == '\\' {

			octet := value[i]

			var w int
			var v rune
			switch {
			case octet&0x80 == 0x00:
				w, v = 1, rune(octet&0x7F)
			case octet&0xE0 == 0xC0:
				w, v = 2, rune(octet&0x1F)
			case octet&0xF0 == 0xE0:
				w, v = 3, rune(octet&0x0F)
			case octet&0xF8 == 0xF0:
				w, v = 4, rune(octet&0x07)
			}
			for k := 1; k < w; k++ {
				octet = value[i+k]
				v = (v << 6) + (rune(octet) & 0x3F)
			}
			i += w

			if !put(emitter, '\\') {
				return false
			}

			var ok bool
			switch v {
			case 0x00:
				ok = put(emitter, '0')
			case 0x07:
				ok = put(emitter, 'a')
			case 0x08:
				ok = put(emitter, 'b')
			case 0x09:
				ok = put(emitter, 't')
			case 0x0A:
				ok = put(emitter, 'n')
			case 0x0b:
				ok = put(emitter, 'v')
			case 0x0c:
				ok = put(emitter, 'f')
			case 0x0d:
				ok = put(emitter, 'r')
			case 0x1b:
				ok = put(emitter, 'e')
			case 0x22:
				ok = put(emitter, '"')
			case 0x5c:
				ok = put(emitter, '\\')
			case 0x85:
				ok = put(emitter, 'N')
			case 0xA0:
				ok = put(emitter, '_')
			case 0x2028:
				ok = put(emitter, 'L')
			case 0x2029:
				ok = put(emitter, 'P')
			default:
				if v <= 0xFF {
					ok = put(emitter, 'x')
					w = 2
				} else if v <= 0xFFFF {
					ok = put(emitter, 'u')
					w = 4
				} else {
					ok = put(emitter, 'U')
					w = 8
				}
				for k := (w - 1) * 4; ok && k >= 0; k -= 4 {
					digit := byte((v >> uint(k)) & 0x0F)
					if digit < 10 {
						ok = put(emitter, digit+'0')
					} else {
						ok = put(emitter, digit+'A'-10)
					}
				}
			}
			if !ok {
				return false
			}
			spaces = false
		} else if is_space(value, i) {
			if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 {
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
				if is_space(value, i+1) {
					if !put(emitter, '\\') {
						return false
					}
				}
				i += width(value[i])
			} else if !write(emitter, value, &i) {
				return false
			}
			spaces = true
		} else {
			if !write(emitter, value, &i) {
				return false
			}
			spaces = false
		}
	}
	if !yaml_emitter_write_indicator(emitter, []byte{'"'}, false, false, false) {
		return false
	}
	emitter.whitespace = false
	emitter.indention = false
	return true
}

func yaml_emitter_write_block_scalar_hints(emitter *yaml_emitter_t, value []byte) bool {
	if is_space(value, 0) || is_break(value, 0) {
		indent_hint := []byte{'0' + byte(emitter.best_indent)}
		if !yaml_emitter_write_indicator(emitter, indent_hint, false, false, false) {
			return false
		}
	}

	emitter.open_ended = false

	var chomp_hint [1]byte
	if len(value) == 0 {
		chomp_hint[0] = '-'
	} else {
		i := len(value) - 1
		for value[i]&0xC0 == 0x80 {
			i--
		}
		if !is_break(value, i) {
			chomp_hint[0] = '-'
		} else if i == 0 {
			chomp_hint[0] = '+'
			emitter.open_ended = true
		} else {
			i--
			for value[i]&0xC0 == 0x80 {
				i--
			}
			if is_break(value, i) {
				chomp_hint[0] = '+'
				emitter.open_ended = true
			}
		}
	}
	if chomp_hint[0] != 0 {
		if !yaml_emitter_write_indicator(emitter, chomp_hint[:], false, false, false) {
			return false
		}
	}
	return true
}

func yaml_emitter_write_literal_scalar(emitter *yaml_emitter_t, value []byte) bool {
	if !yaml_emitter_write_indicator(emitter, []byte{'|'}, true, false, false) {
		return false
	}
	if !yaml_emitter_write_block_scalar_hints(emitter, value) {
		return false
	}
	if !put_break(emitter) {
		return false
	}
	emitter.indention = true
	emitter.whitespace = true
	breaks := true
	for i := 0; i < len(value); {
		if is_break(value, i) {
			if !write_break(emitter, value, &i) {
				return false
			}
			emitter.indention = true
			breaks = true
		} else {
			if breaks {
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
			}
			if !write(emitter, value, &i) {
				return false
			}
			emitter.indention = false
			breaks = false
		}
	}

	return true
}

func yaml_emitter_write_folded_scalar(emitter *yaml_emitter_t, value []byte) bool {
	if !yaml_emitter_write_indicator(emitter, []byte{'>'}, true, false, false) {
		return false
	}
	if !yaml_emitter_write_block_scalar_hints(emitter, value) {
		return false
	}

	if !put_break(emitter) {
		return false
	}
	emitter.indention = true
	emitter.whitespace = true

	breaks := true
	leading_spaces := true
	for i := 0; i < len(value); {
		if is_break(value, i) {
			if !breaks && !leading_spaces && value[i] == '\n' {
				k := 0
				for is_break(value, k) {
					k += width(value[k])
				}
				if !is_blankz(value, k) {
					if !put_break(emitter) {
						return false
					}
				}
			}
			if !write_break(emitter, value, &i) {
				return false
			}
			emitter.indention = true
			breaks = true
		} else {
			if breaks {
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
				leading_spaces = is_blank(value, i)
			}
			if !breaks && is_space(value, i) && !is_space(value, i+1) && emitter.column > emitter.best_width {
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
				i += width(value[i])
			} else {
				if !write(emitter, value, &i) {
					return false
				}
			}
			emitter.indention = false
			breaks = false
		}
	}
	return true
}
07070100000FE6000081A4000000000000000000000001645E367C00001922000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v1/encode.go package yaml

import (
	"reflect"
	"regexp"
	"sort"
	"strconv"
	"strings"
	"time"
)

type encoder struct {
	emitter yaml_emitter_t
	event   yaml_event_t
	out     []byte
	flow    bool
}

func newEncoder() (e *encoder) {
	e = &encoder{}
	e.must(yaml_emitter_initialize(&e.emitter))
	yaml_emitter_set_output_string(&e.emitter, &e.out)
	e.must(yaml_stream_start_event_initialize(&e.event, yaml_UTF8_ENCODING))
	e.emit()
	e.must(yaml_document_start_event_initialize(&e.event, nil, nil, true))
	e.emit()
	return e
}

func (e *encoder) finish() {
	e.must(yaml_document_end_event_initialize(&e.event, true))
	e.emit()
	e.emitter.open_ended = false
	e.must(yaml_stream_end_event_initialize(&e.event))
	e.emit()
}

func (e *encoder) destroy() {
	yaml_emitter_delete(&e.emitter)
}

func (e *encoder) emit() {
	// This will internally delete the e.event value.
	if !yaml_emitter_emit(&e.emitter, &e.event) && e.event.typ != yaml_DOCUMENT_END_EVENT && e.event.typ != yaml_STREAM_END_EVENT {
		e.must(false)
	}
}

func (e *encoder) must(ok bool) {
	if !ok {
		msg := e.emitter.problem
		if msg == "" {
			msg = "Unknown problem generating YAML content"
		}
		fail(msg)
	}
}

func (e *encoder) marshal(tag string, in reflect.Value) {
	if !in.IsValid() {
		e.nilv()
		return
	}
	var value interface{}
	if getter, ok := in.Interface().(Getter); ok {
		tag, value = getter.GetYAML()
		tag = longTag(tag)
		if value == nil {
			e.nilv()
			return
		}
		in = reflect.ValueOf(value)
	}
	switch in.Kind() {
	case reflect.Interface:
		if in.IsNil() {
			e.nilv()
		} else {
			e.marshal(tag, in.Elem())
		}
	case reflect.Map:
		e.mapv(tag, in)
	case reflect.Ptr:
		if in.IsNil() {
			e.nilv()
		} else {
			e.marshal(tag, in.Elem())
		}
	case reflect.Struct:
		e.structv(tag, in)
	case reflect.Slice:
		e.slicev(tag, in)
	case reflect.String:
		e.stringv(tag, in)
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		if in.Type() == durationType {
			e.stringv(tag, reflect.ValueOf(in.Interface().(time.Duration).String()))
		} else {
			e.intv(tag, in)
		}
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		e.uintv(tag, in)
	case reflect.Float32, reflect.Float64:
		e.floatv(tag, in)
	case reflect.Bool:
		e.boolv(tag, in)
	default:
		panic("Can't marshal type: " + in.Type().String())
	}
}

func (e *encoder) mapv(tag string, in reflect.Value) {
	e.mappingv(tag, func() {
		keys := keyList(in.MapKeys())
		sort.Sort(keys)
		for _, k := range keys {
			e.marshal("", k)
			e.marshal("", in.MapIndex(k))
		}
	})
}

func (e *encoder) structv(tag string, in reflect.Value) {
	sinfo, err := getStructInfo(in.Type())
	if err != nil {
		panic(err)
	}
	e.mappingv(tag, func() {
		for _, info := range sinfo.FieldsList {
			var value reflect.Value
			if info.Inline == nil {
				value = in.Field(info.Num)
			} else {
				value = in.FieldByIndex(info.Inline)
			}
			if info.OmitEmpty && isZero(value) {
				continue
			}
			e.marshal("", reflect.ValueOf(info.Key))
			e.flow = info.Flow
			e.marshal("", value)
		}
	})
}

func (e *encoder) mappingv(tag string, f func()) {
	implicit := tag == ""
	style := yaml_BLOCK_MAPPING_STYLE
	if e.flow {
		e.flow = false
		style = yaml_FLOW_MAPPING_STYLE
	}
	e.must(yaml_mapping_start_event_initialize(&e.event, nil, []byte(tag), implicit, style))
	e.emit()
	f()
	e.must(yaml_mapping_end_event_initialize(&e.event))
	e.emit()
}

func (e *encoder) slicev(tag string, in reflect.Value) {
	implicit := tag == ""
	style := yaml_BLOCK_SEQUENCE_STYLE
	if e.flow {
		e.flow = false
		style = yaml_FLOW_SEQUENCE_STYLE
	}
	e.must(yaml_sequence_start_event_initialize(&e.event, nil, []byte(tag), implicit, style))
	e.emit()
	n := in.Len()
	for i := 0; i < n; i++ {
		e.marshal("", in.Index(i))
	}
	e.must(yaml_sequence_end_event_initialize(&e.event))
	e.emit()
}

// isBase60 returns whether s is in base 60 notation as defined in YAML 1.1.
//
// The base 60 float notation in YAML 1.1 is a terrible idea and is unsupported
// in YAML 1.2 and by this package, but these should be marshalled quoted for
// the time being for compatibility with other parsers.
func isBase60Float(s string) (result bool) {
	// Fast path.
	if s == "" {
		return false
	}
	c := s[0]
	if !(c == '+' || c == '-' || c >= '0' && c <= '9') || strings.IndexByte(s, ':') < 0 {
		return false
	}
	// Do the full match.
	return base60float.MatchString(s)
}

// From http://yaml.org/type/float.html, except the regular expression there
// is bogus. In practice parsers do not enforce the "\.[0-9_]*" suffix.
var base60float = regexp.MustCompile(`^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+(?:\.[0-9_]*)?$`)

func (e *encoder) stringv(tag string, in reflect.Value) {
	var style yaml_scalar_style_t
	s := in.String()
	rtag, rs := resolve("", s)
	if rtag == yaml_BINARY_TAG {
		if tag == "" || tag == yaml_STR_TAG {
			tag = rtag
			s = rs.(string)
		} else if tag == yaml_BINARY_TAG {
			fail("explicitly tagged !!binary data must be base64-encoded")
		} else {
			fail("cannot marshal invalid UTF-8 data as " + shortTag(tag))
		}
	}
	if tag == "" && (rtag != yaml_STR_TAG || isBase60Float(s)) {
		style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
	} else if strings.Contains(s, "\n") {
		style = yaml_LITERAL_SCALAR_STYLE
	} else {
		style = yaml_PLAIN_SCALAR_STYLE
	}
	e.emitScalar(s, "", tag, style)
}

func (e *encoder) boolv(tag string, in reflect.Value) {
	var s string
	if in.Bool() {
		s = "true"
	} else {
		s = "false"
	}
	e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE)
}

func (e *encoder) intv(tag string, in reflect.Value) {
	s := strconv.FormatInt(in.Int(), 10)
	e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE)
}

func (e *encoder) uintv(tag string, in reflect.Value) {
	s := strconv.FormatUint(in.Uint(), 10)
	e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE)
}

func (e *encoder) floatv(tag string, in reflect.Value) {
	// FIXME: Handle 64 bits here.
	s := strconv.FormatFloat(float64(in.Float()), 'g', -1, 32)
	switch s {
	case "+Inf":
		s = ".inf"
	case "-Inf":
		s = "-.inf"
	case "NaN":
		s = ".nan"
	}
	e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE)
}

func (e *encoder) nilv() {
	e.emitScalar("null", "", "", yaml_PLAIN_SCALAR_STYLE)
}

func (e *encoder) emitScalar(value, anchor, tag string, style yaml_scalar_style_t) {
	implicit := tag == ""
	e.must(yaml_scalar_event_initialize(&e.event, []byte(anchor), []byte(tag), []byte(value), implicit, implicit, style))
	e.emit()
}
  07070100000FE7000081A4000000000000000000000001645E367C000087D7000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v1/parserc.go    package yaml

import (
	"bytes"
)

// The parser implements the following grammar:
//
// stream               ::= STREAM-START implicit_document? explicit_document* STREAM-END
// implicit_document    ::= block_node DOCUMENT-END*
// explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
// block_node_or_indentless_sequence    ::=
//                          ALIAS
//                          | properties (block_content | indentless_block_sequence)?
//                          | block_content
//                          | indentless_block_sequence
// block_node           ::= ALIAS
//                          | properties block_content?
//                          | block_content
// flow_node            ::= ALIAS
//                          | properties flow_content?
//                          | flow_content
// properties           ::= TAG ANCHOR? | ANCHOR TAG?
// block_content        ::= block_collection | flow_collection | SCALAR
// flow_content         ::= flow_collection | SCALAR
// block_collection     ::= block_sequence | block_mapping
// flow_collection      ::= flow_sequence | flow_mapping
// block_sequence       ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END
// indentless_sequence  ::= (BLOCK-ENTRY block_node?)+
// block_mapping        ::= BLOCK-MAPPING_START
//                          ((KEY block_node_or_indentless_sequence?)?
//                          (VALUE block_node_or_indentless_sequence?)?)*
//                          BLOCK-END
// flow_sequence        ::= FLOW-SEQUENCE-START
//                          (flow_sequence_entry FLOW-ENTRY)*
//                          flow_sequence_entry?
//                          FLOW-SEQUENCE-END
// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?
// flow_mapping         ::= FLOW-MAPPING-START
//                          (flow_mapping_entry FLOW-ENTRY)*
//                          flow_mapping_entry?
//                          FLOW-MAPPING-END
// flow_mapping_entry   ::= flow_node | KEY flow_node? (VALUE flow_node?)?

// Peek the next token in the token queue.
func peek_token(parser *yaml_parser_t) *yaml_token_t {
	if parser.token_available || yaml_parser_fetch_more_tokens(parser) {
		return &parser.tokens[parser.tokens_head]
	}
	return nil
}

// Remove the next token from the queue (must be called after peek_token).
func skip_token(parser *yaml_parser_t) {
	parser.token_available = false
	parser.tokens_parsed++
	parser.stream_end_produced = parser.tokens[parser.tokens_head].typ == yaml_STREAM_END_TOKEN
	parser.tokens_head++
}

// Get the next event.
func yaml_parser_parse(parser *yaml_parser_t, event *yaml_event_t) bool {
	// Erase the event object.
	*event = yaml_event_t{}

	// No events after the end of the stream or error.
	if parser.stream_end_produced || parser.error != yaml_NO_ERROR || parser.state == yaml_PARSE_END_STATE {
		return true
	}

	// Generate the next event.
	return yaml_parser_state_machine(parser, event)
}

// Set parser error.
func yaml_parser_set_parser_error(parser *yaml_parser_t, problem string, problem_mark yaml_mark_t) bool {
	parser.error = yaml_PARSER_ERROR
	parser.problem = problem
	parser.problem_mark = problem_mark
	return false
}

func yaml_parser_set_parser_error_context(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string, problem_mark yaml_mark_t) bool {
	parser.error = yaml_PARSER_ERROR
	parser.context = context
	parser.context_mark = context_mark
	parser.problem = problem
	parser.problem_mark = problem_mark
	return false
}

// State dispatcher.
func yaml_parser_state_machine(parser *yaml_parser_t, event *yaml_event_t) bool {
	//trace("yaml_parser_state_machine", "state:", parser.state.String())

	switch parser.state {
	case yaml_PARSE_STREAM_START_STATE:
		return yaml_parser_parse_stream_start(parser, event)

	case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE:
		return yaml_parser_parse_document_start(parser, event, true)

	case yaml_PARSE_DOCUMENT_START_STATE:
		return yaml_parser_parse_document_start(parser, event, false)

	case yaml_PARSE_DOCUMENT_CONTENT_STATE:
		return yaml_parser_parse_document_content(parser, event)

	case yaml_PARSE_DOCUMENT_END_STATE:
		return yaml_parser_parse_document_end(parser, event)

	case yaml_PARSE_BLOCK_NODE_STATE:
		return yaml_parser_parse_node(parser, event, true, false)

	case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE:
		return yaml_parser_parse_node(parser, event, true, true)

	case yaml_PARSE_FLOW_NODE_STATE:
		return yaml_parser_parse_node(parser, event, false, false)

	case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE:
		return yaml_parser_parse_block_sequence_entry(parser, event, true)

	case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE:
		return yaml_parser_parse_block_sequence_entry(parser, event, false)

	case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE:
		return yaml_parser_parse_indentless_sequence_entry(parser, event)

	case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE:
		return yaml_parser_parse_block_mapping_key(parser, event, true)

	case yaml_PARSE_BLOCK_MAPPING_KEY_STATE:
		return yaml_parser_parse_block_mapping_key(parser, event, false)

	case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE:
		return yaml_parser_parse_block_mapping_value(parser, event)

	case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE:
		return yaml_parser_parse_flow_sequence_entry(parser, event, true)

	case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE:
		return yaml_parser_parse_flow_sequence_entry(parser, event, false)

	case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE:
		return yaml_parser_parse_flow_sequence_entry_mapping_key(parser, event)

	case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE:
		return yaml_parser_parse_flow_sequence_entry_mapping_value(parser, event)

	case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE:
		return yaml_parser_parse_flow_sequence_entry_mapping_end(parser, event)

	case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE:
		return yaml_parser_parse_flow_mapping_key(parser, event, true)

	case yaml_PARSE_FLOW_MAPPING_KEY_STATE:
		return yaml_parser_parse_flow_mapping_key(parser, event, false)

	case yaml_PARSE_FLOW_MAPPING_VALUE_STATE:
		return yaml_parser_parse_flow_mapping_value(parser, event, false)

	case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE:
		return yaml_parser_parse_flow_mapping_value(parser, event, true)

	default:
		panic("invalid parser state")
	}
	return false
}

// Parse the production:
// stream   ::= STREAM-START implicit_document? explicit_document* STREAM-END
//              ************
func yaml_parser_parse_stream_start(parser *yaml_parser_t, event *yaml_event_t) bool {
	token := peek_token(parser)
	if token == nil {
		return false
	}
	if token.typ != yaml_STREAM_START_TOKEN {
		return yaml_parser_set_parser_error(parser, "did not find expected <stream-start>", token.start_mark)
	}
	parser.state = yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE
	*event = yaml_event_t{
		typ:        yaml_STREAM_START_EVENT,
		start_mark: token.start_mark,
		end_mark:   token.end_mark,
		encoding:   token.encoding,
	}
	skip_token(parser)
	return true
}

// Parse the productions:
// implicit_document    ::= block_node DOCUMENT-END*
//                          *
// explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
//                          *************************
func yaml_parser_parse_document_start(parser *yaml_parser_t, event *yaml_event_t, implicit bool) bool {

	token := peek_token(parser)
	if token == nil {
		return false
	}

	// Parse extra document end indicators.
	if !implicit {
		for token.typ == yaml_DOCUMENT_END_TOKEN {
			skip_token(parser)
			token = peek_token(parser)
			if token == nil {
				return false
			}
		}
	}

	if implicit && token.typ != yaml_VERSION_DIRECTIVE_TOKEN &&
		token.typ != yaml_TAG_DIRECTIVE_TOKEN &&
		token.typ != yaml_DOCUMENT_START_TOKEN &&
		token.typ != yaml_STREAM_END_TOKEN {
		// Parse an implicit document.
		if !yaml_parser_process_directives(parser, nil, nil) {
			return false
		}
		parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE)
		parser.state = yaml_PARSE_BLOCK_NODE_STATE

		*event = yaml_event_t{
			typ:        yaml_DOCUMENT_START_EVENT,
			start_mark: token.start_mark,
			end_mark:   token.end_mark,
		}

	} else if token.typ != yaml_STREAM_END_TOKEN {
		// Parse an explicit document.
		var version_directive *yaml_version_directive_t
		var tag_directives []yaml_tag_directive_t
		start_mark := token.start_mark
		if !yaml_parser_process_directives(parser, &version_directive, &tag_directives) {
			return false
		}
		token = peek_token(parser)
		if token == nil {
			return false
		}
		if token.typ != yaml_DOCUMENT_START_TOKEN {
			yaml_parser_set_parser_error(parser,
				"did not find expected <document start>", token.start_mark)
			return false
		}
		parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE)
		parser.state = yaml_PARSE_DOCUMENT_CONTENT_STATE
		end_mark := token.end_mark

		*event = yaml_event_t{
			typ:               yaml_DOCUMENT_START_EVENT,
			start_mark:        start_mark,
			end_mark:          end_mark,
			version_directive: version_directive,
			tag_directives:    tag_directives,
			implicit:          false,
		}
		skip_token(parser)

	} else {
		// Parse the stream end.
		parser.state = yaml_PARSE_END_STATE
		*event = yaml_event_t{
			typ:        yaml_STREAM_END_EVENT,
			start_mark: token.start_mark,
			end_mark:   token.end_mark,
		}
		skip_token(parser)
	}

	return true
}

// Parse the productions:
// explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
//                                                    ***********
//
func yaml_parser_parse_document_content(parser *yaml_parser_t, event *yaml_event_t) bool {
	token := peek_token(parser)
	if token == nil {
		return false
	}
	if token.typ == yaml_VERSION_DIRECTIVE_TOKEN ||
		token.typ == yaml_TAG_DIRECTIVE_TOKEN ||
		token.typ == yaml_DOCUMENT_START_TOKEN ||
		token.typ == yaml_DOCUMENT_END_TOKEN ||
		token.typ == yaml_STREAM_END_TOKEN {
		parser.state = parser.states[len(parser.states)-1]
		parser.states = parser.states[:len(parser.states)-1]
		return yaml_parser_process_empty_scalar(parser, event,
			token.start_mark)
	}
	return yaml_parser_parse_node(parser, event, true, false)
}

// Parse the productions:
// implicit_document    ::= block_node DOCUMENT-END*
//                                     *************
// explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
//
func yaml_parser_parse_document_end(parser *yaml_parser_t, event *yaml_event_t) bool {
	token := peek_token(parser)
	if token == nil {
		return false
	}

	start_mark := token.start_mark
	end_mark := token.start_mark

	implicit := true
	if token.typ == yaml_DOCUMENT_END_TOKEN {
		end_mark = token.end_mark
		skip_token(parser)
		implicit = false
	}

	parser.tag_directives = parser.tag_directives[:0]

	parser.state = yaml_PARSE_DOCUMENT_START_STATE
	*event = yaml_event_t{
		typ:        yaml_DOCUMENT_END_EVENT,
		start_mark: start_mark,
		end_mark:   end_mark,
		implicit:   implicit,
	}
	return true
}

// Parse the productions:
// block_node_or_indentless_sequence    ::=
//                          ALIAS
//                          *****
//                          | properties (block_content | indentless_block_sequence)?
//                            **********  *
//                          | block_content | indentless_block_sequence
//                            *
// block_node           ::= ALIAS
//                          *****
//                          | properties block_content?
//                            ********** *
//                          | block_content
//                            *
// flow_node            ::= ALIAS
//                          *****
//                          | properties flow_content?
//                            ********** *
//                          | flow_content
//                            *
// properties           ::= TAG ANCHOR? | ANCHOR TAG?
//                          *************************
// block_content        ::= block_collection | flow_collection | SCALAR
//                                                               ******
// flow_content         ::= flow_collection | SCALAR
//                                            ******
func yaml_parser_parse_node(parser *yaml_parser_t, event *yaml_event_t, block, indentless_sequence bool) bool {
	//defer trace("yaml_parser_parse_node", "block:", block, "indentless_sequence:", indentless_sequence)()

	token := peek_token(parser)
	if token == nil {
		return false
	}

	if token.typ == yaml_ALIAS_TOKEN {
		parser.state = parser.states[len(parser.states)-1]
		parser.states = parser.states[:len(parser.states)-1]
		*event = yaml_event_t{
			typ:        yaml_ALIAS_EVENT,
			start_mark: token.start_mark,
			end_mark:   token.end_mark,
			anchor:     token.value,
		}
		skip_token(parser)
		return true
	}

	start_mark := token.start_mark
	end_mark := token.start_mark

	var tag_token bool
	var tag_handle, tag_suffix, anchor []byte
	var tag_mark yaml_mark_t
	if token.typ == yaml_ANCHOR_TOKEN {
		anchor = token.value
		start_mark = token.start_mark
		end_mark = token.end_mark
		skip_token(parser)
		token = peek_token(parser)
		if token == nil {
			return false
		}
		if token.typ == yaml_TAG_TOKEN {
			tag_token = true
			tag_handle = token.value
			tag_suffix = token.suffix
			tag_mark = token.start_mark
			end_mark = token.end_mark
			skip_token(parser)
			token = peek_token(parser)
			if token == nil {
				return false
			}
		}
	} else if token.typ == yaml_TAG_TOKEN {
		tag_token = true
		tag_handle = token.value
		tag_suffix = token.suffix
		start_mark = token.start_mark
		tag_mark = token.start_mark
		end_mark = token.end_mark
		skip_token(parser)
		token = peek_token(parser)
		if token == nil {
			return false
		}
		if token.typ == yaml_ANCHOR_TOKEN {
			anchor = token.value
			end_mark = token.end_mark
			skip_token(parser)
			token = peek_token(parser)
			if token == nil {
				return false
			}
		}
	}

	var tag []byte
	if tag_token {
		if len(tag_handle) == 0 {
			tag = tag_suffix
			tag_suffix = nil
		} else {
			for i := range parser.tag_directives {
				if bytes.Equal(parser.tag_directives[i].handle, tag_handle) {
					tag = append([]byte(nil), parser.tag_directives[i].prefix...)
					tag = append(tag, tag_suffix...)
					break
				}
			}
			if len(tag) == 0 {
				yaml_parser_set_parser_error_context(parser,
					"while parsing a node", start_mark,
					"found undefined tag handle", tag_mark)
				return false
			}
		}
	}

	implicit := len(tag) == 0
	if indentless_sequence && token.typ == yaml_BLOCK_ENTRY_TOKEN {
		end_mark = token.end_mark
		parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE
		*event = yaml_event_t{
			typ:        yaml_SEQUENCE_START_EVENT,
			start_mark: start_mark,
			end_mark:   end_mark,
			anchor:     anchor,
			tag:        tag,
			implicit:   implicit,
			style:      yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE),
		}
		return true
	}
	if token.typ == yaml_SCALAR_TOKEN {
		var plain_implicit, quoted_implicit bool
		end_mark = token.end_mark
		if (len(tag) == 0 && token.style == yaml_PLAIN_SCALAR_STYLE) || (len(tag) == 1 && tag[0] == '!') {
			plain_implicit = true
		} else if len(tag) == 0 {
			quoted_implicit = true
		}
		parser.state = parser.states[len(parser.states)-1]
		parser.states = parser.states[:len(parser.states)-1]

		*event = yaml_event_t{
			typ:             yaml_SCALAR_EVENT,
			start_mark:      start_mark,
			end_mark:        end_mark,
			anchor:          anchor,
			tag:             tag,
			value:           token.value,
			implicit:        plain_implicit,
			quoted_implicit: quoted_implicit,
			style:           yaml_style_t(token.style),
		}
		skip_token(parser)
		return true
	}
	if token.typ == yaml_FLOW_SEQUENCE_START_TOKEN {
		// [Go] Some of the events below can be merged as they differ only on style.
		end_mark = token.end_mark
		parser.state = yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE
		*event = yaml_event_t{
			typ:        yaml_SEQUENCE_START_EVENT,
			start_mark: start_mark,
			end_mark:   end_mark,
			anchor:     anchor,
			tag:        tag,
			implicit:   implicit,
			style:      yaml_style_t(yaml_FLOW_SEQUENCE_STYLE),
		}
		return true
	}
	if token.typ == yaml_FLOW_MAPPING_START_TOKEN {
		end_mark = token.end_mark
		parser.state = yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE
		*event = yaml_event_t{
			typ:        yaml_MAPPING_START_EVENT,
			start_mark: start_mark,
			end_mark:   end_mark,
			anchor:     anchor,
			tag:        tag,
			implicit:   implicit,
			style:      yaml_style_t(yaml_FLOW_MAPPING_STYLE),
		}
		return true
	}
	if block && token.typ == yaml_BLOCK_SEQUENCE_START_TOKEN {
		end_mark = token.end_mark
		parser.state = yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE
		*event = yaml_event_t{
			typ:        yaml_SEQUENCE_START_EVENT,
			start_mark: start_mark,
			end_mark:   end_mark,
			anchor:     anchor,
			tag:        tag,
			implicit:   implicit,
			style:      yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE),
		}
		return true
	}
	if block && token.typ == yaml_BLOCK_MAPPING_START_TOKEN {
		end_mark = token.end_mark
		parser.state = yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE
		*event = yaml_event_t{
			typ:        yaml_MAPPING_START_EVENT,
			start_mark: start_mark,
			end_mark:   end_mark,
			anchor:     anchor,
			tag:        tag,
			implicit:   implicit,
			style:      yaml_style_t(yaml_BLOCK_MAPPING_STYLE),
		}
		return true
	}
	if len(anchor) > 0 || len(tag) > 0 {
		parser.state = parser.states[len(parser.states)-1]
		parser.states = parser.states[:len(parser.states)-1]

		*event = yaml_event_t{
			typ:             yaml_SCALAR_EVENT,
			start_mark:      start_mark,
			end_mark:        end_mark,
			anchor:          anchor,
			tag:             tag,
			implicit:        implicit,
			quoted_implicit: false,
			style:           yaml_style_t(yaml_PLAIN_SCALAR_STYLE),
		}
		return true
	}

	context := "while parsing a flow node"
	if block {
		context = "while parsing a block node"
	}
	yaml_parser_set_parser_error_context(parser, context, start_mark,
		"did not find expected node content", token.start_mark)
	return false
}

// Parse the productions:
// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END
//                    ********************  *********** *             *********
//
func yaml_parser_parse_block_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {
	if first {
		token := peek_token(parser)
		parser.marks = append(parser.marks, token.start_mark)
		skip_token(parser)
	}

	token := peek_token(parser)
	if token == nil {
		return false
	}

	if token.typ == yaml_BLOCK_ENTRY_TOKEN {
		mark := token.end_mark
		skip_token(parser)
		token = peek_token(parser)
		if token == nil {
			return false
		}
		if token.typ != yaml_BLOCK_ENTRY_TOKEN && token.typ != yaml_BLOCK_END_TOKEN {
			parser.states = append(parser.states, yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE)
			return yaml_parser_parse_node(parser, event, true, false)
		} else {
			parser.state = yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE
			return yaml_parser_process_empty_scalar(parser, event, mark)
		}
	}
	if token.typ == yaml_BLOCK_END_TOKEN {
		parser.state = parser.states[len(parser.states)-1]
		parser.states = parser.states[:len(parser.states)-1]
		parser.marks = parser.marks[:len(parser.marks)-1]

		*event = yaml_event_t{
			typ:        yaml_SEQUENCE_END_EVENT,
			start_mark: token.start_mark,
			end_mark:   token.end_mark,
		}

		skip_token(parser)
		return true
	}

	context_mark := parser.marks[len(parser.marks)-1]
	parser.marks = parser.marks[:len(parser.marks)-1]
	return yaml_parser_set_parser_error_context(parser,
		"while parsing a block collection", context_mark,
		"did not find expected '-' indicator", token.start_mark)
}

// Parse the productions:
// indentless_sequence  ::= (BLOCK-ENTRY block_node?)+
//                           *********** *
func yaml_parser_parse_indentless_sequence_entry(parser *yaml_parser_t, event *yaml_event_t) bool {
	token := peek_token(parser)
	if token == nil {
		return false
	}

	if token.typ == yaml_BLOCK_ENTRY_TOKEN {
		mark := token.end_mark
		skip_token(parser)
		token = peek_token(parser)
		if token == nil {
			return false
		}
		if token.typ != yaml_BLOCK_ENTRY_TOKEN &&
			token.typ != yaml_KEY_TOKEN &&
			token.typ != yaml_VALUE_TOKEN &&
			token.typ != yaml_BLOCK_END_TOKEN {
			parser.states = append(parser.states, yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE)
			return yaml_parser_parse_node(parser, event, true, false)
		}
		parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE
		return yaml_parser_process_empty_scalar(parser, event, mark)
	}
	parser.state = parser.states[len(parser.states)-1]
	parser.states = parser.states[:len(parser.states)-1]

	*event = yaml_event_t{
		typ:        yaml_SEQUENCE_END_EVENT,
		start_mark: token.start_mark,
		end_mark:   token.start_mark, // [Go] Shouldn't this be token.end_mark?
	}
	return true
}

// Parse the productions:
// block_mapping        ::= BLOCK-MAPPING_START
//                          *******************
//                          ((KEY block_node_or_indentless_sequence?)?
//                            *** *
//                          (VALUE block_node_or_indentless_sequence?)?)*
//
//                          BLOCK-END
//                          *********
//
func yaml_parser_parse_block_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {
	if first {
		token := peek_token(parser)
		parser.marks = append(parser.marks, token.start_mark)
		skip_token(parser)
	}

	token := peek_token(parser)
	if token == nil {
		return false
	}

	if token.typ == yaml_KEY_TOKEN {
		mark := token.end_mark
		skip_token(parser)
		token = peek_token(parser)
		if token == nil {
			return false
		}
		if token.typ != yaml_KEY_TOKEN &&
			token.typ != yaml_VALUE_TOKEN &&
			token.typ != yaml_BLOCK_END_TOKEN {
			parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_VALUE_STATE)
			return yaml_parser_parse_node(parser, event, true, true)
		} else {
			parser.state = yaml_PARSE_BLOCK_MAPPING_VALUE_STATE
			return yaml_parser_process_empty_scalar(parser, event, mark)
		}
	} else if token.typ == yaml_BLOCK_END_TOKEN {
		parser.state = parser.states[len(parser.states)-1]
		parser.states = parser.states[:len(parser.states)-1]
		parser.marks = parser.marks[:len(parser.marks)-1]
		*event = yaml_event_t{
			typ:        yaml_MAPPING_END_EVENT,
			start_mark: token.start_mark,
			end_mark:   token.end_mark,
		}
		skip_token(parser)
		return true
	}

	context_mark := parser.marks[len(parser.marks)-1]
	parser.marks = parser.marks[:len(parser.marks)-1]
	return yaml_parser_set_parser_error_context(parser,
		"while parsing a block mapping", context_mark,
		"did not find expected key", token.start_mark)
}

// Parse the productions:
// block_mapping        ::= BLOCK-MAPPING_START
//
//                          ((KEY block_node_or_indentless_sequence?)?
//
//                          (VALUE block_node_or_indentless_sequence?)?)*
//                           ***** *
//                          BLOCK-END
//
//
func yaml_parser_parse_block_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool {
	token := peek_token(parser)
	if token == nil {
		return false
	}
	if token.typ == yaml_VALUE_TOKEN {
		mark := token.end_mark
		skip_token(parser)
		token = peek_token(parser)
		if token == nil {
			return false
		}
		if token.typ != yaml_KEY_TOKEN &&
			token.typ != yaml_VALUE_TOKEN &&
			token.typ != yaml_BLOCK_END_TOKEN {
			parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_KEY_STATE)
			return yaml_parser_parse_node(parser, event, true, true)
		}
		parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE
		return yaml_parser_process_empty_scalar(parser, event, mark)
	}
	parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE
	return yaml_parser_process_empty_scalar(parser, event, token.start_mark)
}

// Parse the productions:
// flow_sequence        ::= FLOW-SEQUENCE-START
//                          *******************
//                          (flow_sequence_entry FLOW-ENTRY)*
//                           *                   **********
//                          flow_sequence_entry?
//                          *
//                          FLOW-SEQUENCE-END
//                          *****************
// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?
//                          *
//
func yaml_parser_parse_flow_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {
	if first {
		token := peek_token(parser)
		parser.marks = append(parser.marks, token.start_mark)
		skip_token(parser)
	}
	token := peek_token(parser)
	if token == nil {
		return false
	}
	if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {
		if !first {
			if token.typ == yaml_FLOW_ENTRY_TOKEN {
				skip_token(parser)
				token = peek_token(parser)
				if token == nil {
					return false
				}
			} else {
				context_mark := parser.marks[len(parser.marks)-1]
				parser.marks = parser.marks[:len(parser.marks)-1]
				return yaml_parser_set_parser_error_context(parser,
					"while parsing a flow sequence", context_mark,
					"did not find expected ',' or ']'", token.start_mark)
			}
		}

		if token.typ == yaml_KEY_TOKEN {
			parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE
			*event = yaml_event_t{
				typ:        yaml_MAPPING_START_EVENT,
				start_mark: token.start_mark,
				end_mark:   token.end_mark,
				implicit:   true,
				style:      yaml_style_t(yaml_FLOW_MAPPING_STYLE),
			}
			skip_token(parser)
			return true
		} else if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {
			parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE)
			return yaml_parser_parse_node(parser, event, false, false)
		}
	}

	parser.state = parser.states[len(parser.states)-1]
	parser.states = parser.states[:len(parser.states)-1]
	parser.marks = parser.marks[:len(parser.marks)-1]

	*event = yaml_event_t{
		typ:        yaml_SEQUENCE_END_EVENT,
		start_mark: token.start_mark,
		end_mark:   token.end_mark,
	}

	skip_token(parser)
	return true
}

//
// Parse the productions:
// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?
//                                      *** *
//
func yaml_parser_parse_flow_sequence_entry_mapping_key(parser *yaml_parser_t, event *yaml_event_t) bool {
	token := peek_token(parser)
	if token == nil {
		return false
	}
	if token.typ != yaml_VALUE_TOKEN &&
		token.typ != yaml_FLOW_ENTRY_TOKEN &&
		token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {
		parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE)
		return yaml_parser_parse_node(parser, event, false, false)
	}
	mark := token.end_mark
	skip_token(parser)
	parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE
	return yaml_parser_process_empty_scalar(parser, event, mark)
}

// Parse the productions:
// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?
//                                                      ***** *
//
func yaml_parser_parse_flow_sequence_entry_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool {
	token := peek_token(parser)
	if token == nil {
		return false
	}
	if token.typ == yaml_VALUE_TOKEN {
		skip_token(parser)
		token := peek_token(parser)
		if token == nil {
			return false
		}
		if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {
			parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE)
			return yaml_parser_parse_node(parser, event, false, false)
		}
	}
	parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE
	return yaml_parser_process_empty_scalar(parser, event, token.start_mark)
}

// Parse the productions:
// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?
//                                                                      *
//
func yaml_parser_parse_flow_sequence_entry_mapping_end(parser *yaml_parser_t, event *yaml_event_t) bool {
	token := peek_token(parser)
	if token == nil {
		return false
	}
	parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE
	*event = yaml_event_t{
		typ:        yaml_MAPPING_END_EVENT,
		start_mark: token.start_mark,
		end_mark:   token.start_mark, // [Go] Shouldn't this be end_mark?
	}
	return true
}

// Parse the productions:
// flow_mapping         ::= FLOW-MAPPING-START
//                          ******************
//                          (flow_mapping_entry FLOW-ENTRY)*
//                           *                  **********
//                          flow_mapping_entry?
//                          ******************
//                          FLOW-MAPPING-END
//                          ****************
// flow_mapping_entry   ::= flow_node | KEY flow_node? (VALUE flow_node?)?
//                          *           *** *
//
func yaml_parser_parse_flow_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {
	if first {
		token := peek_token(parser)
		parser.marks = append(parser.marks, token.start_mark)
		skip_token(parser)
	}

	token := peek_token(parser)
	if token == nil {
		return false
	}

	if token.typ != yaml_FLOW_MAPPING_END_TOKEN {
		if !first {
			if token.typ == yaml_FLOW_ENTRY_TOKEN {
				skip_token(parser)
				token = peek_token(parser)
				if token == nil {
					return false
				}
			} else {
				context_mark := parser.marks[len(parser.marks)-1]
				parser.marks = parser.marks[:len(parser.marks)-1]
				return yaml_parser_set_parser_error_context(parser,
					"while parsing a flow mapping", context_mark,
					"did not find expected ',' or '}'", token.start_mark)
			}
		}

		if token.typ == yaml_KEY_TOKEN {
			skip_token(parser)
			token = peek_token(parser)
			if token == nil {
				return false
			}
			if token.typ != yaml_VALUE_TOKEN &&
				token.typ != yaml_FLOW_ENTRY_TOKEN &&
				token.typ != yaml_FLOW_MAPPING_END_TOKEN {
				parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_VALUE_STATE)
				return yaml_parser_parse_node(parser, event, false, false)
			} else {
				parser.state = yaml_PARSE_FLOW_MAPPING_VALUE_STATE
				return yaml_parser_process_empty_scalar(parser, event, token.start_mark)
			}
		} else if token.typ != yaml_FLOW_MAPPING_END_TOKEN {
			parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE)
			return yaml_parser_parse_node(parser, event, false, false)
		}
	}

	parser.state = parser.states[len(parser.states)-1]
	parser.states = parser.states[:len(parser.states)-1]
	parser.marks = parser.marks[:len(parser.marks)-1]
	*event = yaml_event_t{
		typ:        yaml_MAPPING_END_EVENT,
		start_mark: token.start_mark,
		end_mark:   token.end_mark,
	}
	skip_token(parser)
	return true
}

// Parse the productions:
// flow_mapping_entry   ::= flow_node | KEY flow_node? (VALUE flow_node?)?
//                                   *                  ***** *
//
func yaml_parser_parse_flow_mapping_value(parser *yaml_parser_t, event *yaml_event_t, empty bool) bool {
	token := peek_token(parser)
	if token == nil {
		return false
	}
	if empty {
		parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE
		return yaml_parser_process_empty_scalar(parser, event, token.start_mark)
	}
	if token.typ == yaml_VALUE_TOKEN {
		skip_token(parser)
		token = peek_token(parser)
		if token == nil {
			return false
		}
		if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_MAPPING_END_TOKEN {
			parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_KEY_STATE)
			return yaml_parser_parse_node(parser, event, false, false)
		}
	}
	parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE
	return yaml_parser_process_empty_scalar(parser, event, token.start_mark)
}

// Generate an empty scalar event.
func yaml_parser_process_empty_scalar(parser *yaml_parser_t, event *yaml_event_t, mark yaml_mark_t) bool {
	*event = yaml_event_t{
		typ:        yaml_SCALAR_EVENT,
		start_mark: mark,
		end_mark:   mark,
		value:      nil, // Empty
		implicit:   true,
		style:      yaml_style_t(yaml_PLAIN_SCALAR_STYLE),
	}
	return true
}

var default_tag_directives = []yaml_tag_directive_t{
	{[]byte("!"), []byte("!")},
	{[]byte("!!"), []byte("tag:yaml.org,2002:")},
}

// Parse directives.
func yaml_parser_process_directives(parser *yaml_parser_t,
	version_directive_ref **yaml_version_directive_t,
	tag_directives_ref *[]yaml_tag_directive_t) bool {

	var version_directive *yaml_version_directive_t
	var tag_directives []yaml_tag_directive_t

	token := peek_token(parser)
	if token == nil {
		return false
	}

	for token.typ == yaml_VERSION_DIRECTIVE_TOKEN || token.typ == yaml_TAG_DIRECTIVE_TOKEN {
		if token.typ == yaml_VERSION_DIRECTIVE_TOKEN {
			if version_directive != nil {
				yaml_parser_set_parser_error(parser,
					"found duplicate %YAML directive", token.start_mark)
				return false
			}
			if token.major != 1 || token.minor != 1 {
				yaml_parser_set_parser_error(parser,
					"found incompatible YAML document", token.start_mark)
				return false
			}
			version_directive = &yaml_version_directive_t{
				major: token.major,
				minor: token.minor,
			}
		} else if token.typ == yaml_TAG_DIRECTIVE_TOKEN {
			value := yaml_tag_directive_t{
				handle: token.value,
				prefix: token.prefix,
			}
			if !yaml_parser_append_tag_directive(parser, value, false, token.start_mark) {
				return false
			}
			tag_directives = append(tag_directives, value)
		}

		skip_token(parser)
		token = peek_token(parser)
		if token == nil {
			return false
		}
	}

	for i := range default_tag_directives {
		if !yaml_parser_append_tag_directive(parser, default_tag_directives[i], true, token.start_mark) {
			return false
		}
	}

	if version_directive_ref != nil {
		*version_directive_ref = version_directive
	}
	if tag_directives_ref != nil {
		*tag_directives_ref = tag_directives
	}
	return true
}

// Append a tag directive to the directives stack.
func yaml_parser_append_tag_directive(parser *yaml_parser_t, value yaml_tag_directive_t, allow_duplicates bool, mark yaml_mark_t) bool {
	for i := range parser.tag_directives {
		if bytes.Equal(value.handle, parser.tag_directives[i].handle) {
			if allow_duplicates {
				return true
			}
			return yaml_parser_set_parser_error(parser, "found duplicate %TAG directive", mark)
		}
	}

	// [Go] I suspect the copy is unnecessary. This was likely done
	// because there was no way to track ownership of the data.
	value_copy := yaml_tag_directive_t{
		handle: make([]byte, len(value.handle)),
		prefix: make([]byte, len(value.prefix)),
	}
	copy(value_copy.handle, value.handle)
	copy(value_copy.prefix, value.prefix)
	parser.tag_directives = append(parser.tag_directives, value_copy)
	return true
}
 07070100000FE8000081A4000000000000000000000001645E367C00002E75000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v1/readerc.go    package yaml

import (
	"io"
)

// Set the reader error and return 0.
func yaml_parser_set_reader_error(parser *yaml_parser_t, problem string, offset int, value int) bool {
	parser.error = yaml_READER_ERROR
	parser.problem = problem
	parser.problem_offset = offset
	parser.problem_value = value
	return false
}

// Byte order marks.
const (
	bom_UTF8    = "\xef\xbb\xbf"
	bom_UTF16LE = "\xff\xfe"
	bom_UTF16BE = "\xfe\xff"
)

// Determine the input stream encoding by checking the BOM symbol. If no BOM is
// found, the UTF-8 encoding is assumed. Return 1 on success, 0 on failure.
func yaml_parser_determine_encoding(parser *yaml_parser_t) bool {
	// Ensure that we had enough bytes in the raw buffer.
	for !parser.eof && len(parser.raw_buffer)-parser.raw_buffer_pos < 3 {
		if !yaml_parser_update_raw_buffer(parser) {
			return false
		}
	}

	// Determine the encoding.
	buf := parser.raw_buffer
	pos := parser.raw_buffer_pos
	avail := len(buf) - pos
	if avail >= 2 && buf[pos] == bom_UTF16LE[0] && buf[pos+1] == bom_UTF16LE[1] {
		parser.encoding = yaml_UTF16LE_ENCODING
		parser.raw_buffer_pos += 2
		parser.offset += 2
	} else if avail >= 2 && buf[pos] == bom_UTF16BE[0] && buf[pos+1] == bom_UTF16BE[1] {
		parser.encoding = yaml_UTF16BE_ENCODING
		parser.raw_buffer_pos += 2
		parser.offset += 2
	} else if avail >= 3 && buf[pos] == bom_UTF8[0] && buf[pos+1] == bom_UTF8[1] && buf[pos+2] == bom_UTF8[2] {
		parser.encoding = yaml_UTF8_ENCODING
		parser.raw_buffer_pos += 3
		parser.offset += 3
	} else {
		parser.encoding = yaml_UTF8_ENCODING
	}
	return true
}

// Update the raw buffer.
func yaml_parser_update_raw_buffer(parser *yaml_parser_t) bool {
	size_read := 0

	// Return if the raw buffer is full.
	if parser.raw_buffer_pos == 0 && len(parser.raw_buffer) == cap(parser.raw_buffer) {
		return true
	}

	// Return on EOF.
	if parser.eof {
		return true
	}

	// Move the remaining bytes in the raw buffer to the beginning.
	if parser.raw_buffer_pos > 0 && parser.raw_buffer_pos < len(parser.raw_buffer) {
		copy(parser.raw_buffer, parser.raw_buffer[parser.raw_buffer_pos:])
	}
	parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)-parser.raw_buffer_pos]
	parser.raw_buffer_pos = 0

	// Call the read handler to fill the buffer.
	size_read, err := parser.read_handler(parser, parser.raw_buffer[len(parser.raw_buffer):cap(parser.raw_buffer)])
	parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)+size_read]
	if err == io.EOF {
		parser.eof = true
	} else if err != nil {
		return yaml_parser_set_reader_error(parser, "input error: "+err.Error(), parser.offset, -1)
	}
	return true
}

// Ensure that the buffer contains at least `length` characters.
// Return true on success, false on failure.
//
// The length is supposed to be significantly less that the buffer size.
func yaml_parser_update_buffer(parser *yaml_parser_t, length int) bool {
	if parser.read_handler == nil {
		panic("read handler must be set")
	}

	// If the EOF flag is set and the raw buffer is empty, do nothing.
	if parser.eof && parser.raw_buffer_pos == len(parser.raw_buffer) {
		return true
	}

	// Return if the buffer contains enough characters.
	if parser.unread >= length {
		return true
	}

	// Determine the input encoding if it is not known yet.
	if parser.encoding == yaml_ANY_ENCODING {
		if !yaml_parser_determine_encoding(parser) {
			return false
		}
	}

	// Move the unread characters to the beginning of the buffer.
	buffer_len := len(parser.buffer)
	if parser.buffer_pos > 0 && parser.buffer_pos < buffer_len {
		copy(parser.buffer, parser.buffer[parser.buffer_pos:])
		buffer_len -= parser.buffer_pos
		parser.buffer_pos = 0
	} else if parser.buffer_pos == buffer_len {
		buffer_len = 0
		parser.buffer_pos = 0
	}

	// Open the whole buffer for writing, and cut it before returning.
	parser.buffer = parser.buffer[:cap(parser.buffer)]

	// Fill the buffer until it has enough characters.
	first := true
	for parser.unread < length {

		// Fill the raw buffer if necessary.
		if !first || parser.raw_buffer_pos == len(parser.raw_buffer) {
			if !yaml_parser_update_raw_buffer(parser) {
				parser.buffer = parser.buffer[:buffer_len]
				return false
			}
		}
		first = false

		// Decode the raw buffer.
	inner:
		for parser.raw_buffer_pos != len(parser.raw_buffer) {
			var value rune
			var width int

			raw_unread := len(parser.raw_buffer) - parser.raw_buffer_pos

			// Decode the next character.
			switch parser.encoding {
			case yaml_UTF8_ENCODING:
				// Decode a UTF-8 character.  Check RFC 3629
				// (http://www.ietf.org/rfc/rfc3629.txt) for more details.
				//
				// The following table (taken from the RFC) is used for
				// decoding.
				//
				//    Char. number range |        UTF-8 octet sequence
				//      (hexadecimal)    |              (binary)
				//   --------------------+------------------------------------
				//   0000 0000-0000 007F | 0xxxxxxx
				//   0000 0080-0000 07FF | 110xxxxx 10xxxxxx
				//   0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
				//   0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
				//
				// Additionally, the characters in the range 0xD800-0xDFFF
				// are prohibited as they are reserved for use with UTF-16
				// surrogate pairs.

				// Determine the length of the UTF-8 sequence.
				octet := parser.raw_buffer[parser.raw_buffer_pos]
				switch {
				case octet&0x80 == 0x00:
					width = 1
				case octet&0xE0 == 0xC0:
					width = 2
				case octet&0xF0 == 0xE0:
					width = 3
				case octet&0xF8 == 0xF0:
					width = 4
				default:
					// The leading octet is invalid.
					return yaml_parser_set_reader_error(parser,
						"invalid leading UTF-8 octet",
						parser.offset, int(octet))
				}

				// Check if the raw buffer contains an incomplete character.
				if width > raw_unread {
					if parser.eof {
						return yaml_parser_set_reader_error(parser,
							"incomplete UTF-8 octet sequence",
							parser.offset, -1)
					}
					break inner
				}

				// Decode the leading octet.
				switch {
				case octet&0x80 == 0x00:
					value = rune(octet & 0x7F)
				case octet&0xE0 == 0xC0:
					value = rune(octet & 0x1F)
				case octet&0xF0 == 0xE0:
					value = rune(octet & 0x0F)
				case octet&0xF8 == 0xF0:
					value = rune(octet & 0x07)
				default:
					value = 0
				}

				// Check and decode the trailing octets.
				for k := 1; k < width; k++ {
					octet = parser.raw_buffer[parser.raw_buffer_pos+k]

					// Check if the octet is valid.
					if (octet & 0xC0) != 0x80 {
						return yaml_parser_set_reader_error(parser,
							"invalid trailing UTF-8 octet",
							parser.offset+k, int(octet))
					}

					// Decode the octet.
					value = (value << 6) + rune(octet&0x3F)
				}

				// Check the length of the sequence against the value.
				switch {
				case width == 1:
				case width == 2 && value >= 0x80:
				case width == 3 && value >= 0x800:
				case width == 4 && value >= 0x10000:
				default:
					return yaml_parser_set_reader_error(parser,
						"invalid length of a UTF-8 sequence",
						parser.offset, -1)
				}

				// Check the range of the value.
				if value >= 0xD800 && value <= 0xDFFF || value > 0x10FFFF {
					return yaml_parser_set_reader_error(parser,
						"invalid Unicode character",
						parser.offset, int(value))
				}

			case yaml_UTF16LE_ENCODING, yaml_UTF16BE_ENCODING:
				var low, high int
				if parser.encoding == yaml_UTF16LE_ENCODING {
					low, high = 0, 1
				} else {
					high, low = 1, 0
				}

				// The UTF-16 encoding is not as simple as one might
				// naively think.  Check RFC 2781
				// (http://www.ietf.org/rfc/rfc2781.txt).
				//
				// Normally, two subsequent bytes describe a Unicode
				// character.  However a special technique (called a
				// surrogate pair) is used for specifying character
				// values larger than 0xFFFF.
				//
				// A surrogate pair consists of two pseudo-characters:
				//      high surrogate area (0xD800-0xDBFF)
				//      low surrogate area (0xDC00-0xDFFF)
				//
				// The following formulas are used for decoding
				// and encoding characters using surrogate pairs:
				//
				//  U  = U' + 0x10000   (0x01 00 00 <= U <= 0x10 FF FF)
				//  U' = yyyyyyyyyyxxxxxxxxxx   (0 <= U' <= 0x0F FF FF)
				//  W1 = 110110yyyyyyyyyy
				//  W2 = 110111xxxxxxxxxx
				//
				// where U is the character value, W1 is the high surrogate
				// area, W2 is the low surrogate area.

				// Check for incomplete UTF-16 character.
				if raw_unread < 2 {
					if parser.eof {
						return yaml_parser_set_reader_error(parser,
							"incomplete UTF-16 character",
							parser.offset, -1)
					}
					break inner
				}

				// Get the character.
				value = rune(parser.raw_buffer[parser.raw_buffer_pos+low]) +
					(rune(parser.raw_buffer[parser.raw_buffer_pos+high]) << 8)

				// Check for unexpected low surrogate area.
				if value&0xFC00 == 0xDC00 {
					return yaml_parser_set_reader_error(parser,
						"unexpected low surrogate area",
						parser.offset, int(value))
				}

				// Check for a high surrogate area.
				if value&0xFC00 == 0xD800 {
					width = 4

					// Check for incomplete surrogate pair.
					if raw_unread < 4 {
						if parser.eof {
							return yaml_parser_set_reader_error(parser,
								"incomplete UTF-16 surrogate pair",
								parser.offset, -1)
						}
						break inner
					}

					// Get the next character.
					value2 := rune(parser.raw_buffer[parser.raw_buffer_pos+low+2]) +
						(rune(parser.raw_buffer[parser.raw_buffer_pos+high+2]) << 8)

					// Check for a low surrogate area.
					if value2&0xFC00 != 0xDC00 {
						return yaml_parser_set_reader_error(parser,
							"expected low surrogate area",
							parser.offset+2, int(value2))
					}

					// Generate the value of the surrogate pair.
					value = 0x10000 + ((value & 0x3FF) << 10) + (value2 & 0x3FF)
				} else {
					width = 2
				}

			default:
				panic("impossible")
			}

			// Check if the character is in the allowed range:
			//      #x9 | #xA | #xD | [#x20-#x7E]               (8 bit)
			//      | #x85 | [#xA0-#xD7FF] | [#xE000-#xFFFD]    (16 bit)
			//      | [#x10000-#x10FFFF]                        (32 bit)
			switch {
			case value == 0x09:
			case value == 0x0A:
			case value == 0x0D:
			case value >= 0x20 && value <= 0x7E:
			case value == 0x85:
			case value >= 0xA0 && value <= 0xD7FF:
			case value >= 0xE000 && value <= 0xFFFD:
			case value >= 0x10000 && value <= 0x10FFFF:
			default:
				return yaml_parser_set_reader_error(parser,
					"control characters are not allowed",
					parser.offset, int(value))
			}

			// Move the raw pointers.
			parser.raw_buffer_pos += width
			parser.offset += width

			// Finally put the character into the buffer.
			if value <= 0x7F {
				// 0000 0000-0000 007F . 0xxxxxxx
				parser.buffer[buffer_len+0] = byte(value)
			} else if value <= 0x7FF {
				// 0000 0080-0000 07FF . 110xxxxx 10xxxxxx
				parser.buffer[buffer_len+0] = byte(0xC0 + (value >> 6))
				parser.buffer[buffer_len+1] = byte(0x80 + (value & 0x3F))
			} else if value <= 0xFFFF {
				// 0000 0800-0000 FFFF . 1110xxxx 10xxxxxx 10xxxxxx
				parser.buffer[buffer_len+0] = byte(0xE0 + (value >> 12))
				parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 6) & 0x3F))
				parser.buffer[buffer_len+2] = byte(0x80 + (value & 0x3F))
			} else {
				// 0001 0000-0010 FFFF . 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
				parser.buffer[buffer_len+0] = byte(0xF0 + (value >> 18))
				parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 12) & 0x3F))
				parser.buffer[buffer_len+2] = byte(0x80 + ((value >> 6) & 0x3F))
				parser.buffer[buffer_len+3] = byte(0x80 + (value & 0x3F))
			}
			buffer_len += width

			parser.unread++
		}

		// On EOF, put NUL into the buffer and return.
		if parser.eof {
			parser.buffer[buffer_len] = 0
			buffer_len++
			parser.unread++
			break
		}
	}
	parser.buffer = parser.buffer[:buffer_len]
	return true
}
   07070100000FE9000081A4000000000000000000000001645E367C000012A2000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v1/resolve.go    package yaml

import (
	"encoding/base64"
	"fmt"
	"math"
	"strconv"
	"strings"
	"unicode/utf8"
)

// TODO: merge, timestamps, base 60 floats, omap.

type resolveMapItem struct {
	value interface{}
	tag   string
}

var resolveTable = make([]byte, 256)
var resolveMap = make(map[string]resolveMapItem)

func init() {
	t := resolveTable
	t[int('+')] = 'S' // Sign
	t[int('-')] = 'S'
	for _, c := range "0123456789" {
		t[int(c)] = 'D' // Digit
	}
	for _, c := range "yYnNtTfFoO~" {
		t[int(c)] = 'M' // In map
	}
	t[int('.')] = '.' // Float (potentially in map)

	var resolveMapList = []struct {
		v   interface{}
		tag string
		l   []string
	}{
		{true, yaml_BOOL_TAG, []string{"y", "Y", "yes", "Yes", "YES"}},
		{true, yaml_BOOL_TAG, []string{"true", "True", "TRUE"}},
		{true, yaml_BOOL_TAG, []string{"on", "On", "ON"}},
		{false, yaml_BOOL_TAG, []string{"n", "N", "no", "No", "NO"}},
		{false, yaml_BOOL_TAG, []string{"false", "False", "FALSE"}},
		{false, yaml_BOOL_TAG, []string{"off", "Off", "OFF"}},
		{nil, yaml_NULL_TAG, []string{"", "~", "null", "Null", "NULL"}},
		{math.NaN(), yaml_FLOAT_TAG, []string{".nan", ".NaN", ".NAN"}},
		{math.Inf(+1), yaml_FLOAT_TAG, []string{".inf", ".Inf", ".INF"}},
		{math.Inf(+1), yaml_FLOAT_TAG, []string{"+.inf", "+.Inf", "+.INF"}},
		{math.Inf(-1), yaml_FLOAT_TAG, []string{"-.inf", "-.Inf", "-.INF"}},
		{"<<", yaml_MERGE_TAG, []string{"<<"}},
	}

	m := resolveMap
	for _, item := range resolveMapList {
		for _, s := range item.l {
			m[s] = resolveMapItem{item.v, item.tag}
		}
	}
}

const longTagPrefix = "tag:yaml.org,2002:"

func shortTag(tag string) string {
	// TODO This can easily be made faster and produce less garbage.
	if strings.HasPrefix(tag, longTagPrefix) {
		return "!!" + tag[len(longTagPrefix):]
	}
	return tag
}

func longTag(tag string) string {
	if strings.HasPrefix(tag, "!!") {
		return longTagPrefix + tag[2:]
	}
	return tag
}

func resolvableTag(tag string) bool {
	switch tag {
	case "", yaml_STR_TAG, yaml_BOOL_TAG, yaml_INT_TAG, yaml_FLOAT_TAG, yaml_NULL_TAG:
		return true
	}
	return false
}

func resolve(tag string, in string) (rtag string, out interface{}) {
	if !resolvableTag(tag) {
		return tag, in
	}

	defer func() {
		switch tag {
		case "", rtag, yaml_STR_TAG, yaml_BINARY_TAG:
			return
		}
		fail(fmt.Sprintf("cannot decode %s `%s` as a %s", shortTag(rtag), in, shortTag(tag)))
	}()

	// Any data is accepted as a !!str or !!binary.
	// Otherwise, the prefix is enough of a hint about what it might be.
	hint := byte('N')
	if in != "" {
		hint = resolveTable[in[0]]
	}
	if hint != 0 && tag != yaml_STR_TAG && tag != yaml_BINARY_TAG {
		// Handle things we can lookup in a map.
		if item, ok := resolveMap[in]; ok {
			return item.tag, item.value
		}

		// Base 60 floats are a bad idea, were dropped in YAML 1.2, and
		// are purposefully unsupported here. They're still quoted on
		// the way out for compatibility with other parser, though.

		switch hint {
		case 'M':
			// We've already checked the map above.

		case '.':
			// Not in the map, so maybe a normal float.
			floatv, err := strconv.ParseFloat(in, 64)
			if err == nil {
				return yaml_FLOAT_TAG, floatv
			}

		case 'D', 'S':
			// Int, float, or timestamp.
			plain := strings.Replace(in, "_", "", -1)
			intv, err := strconv.ParseInt(plain, 0, 64)
			if err == nil {
				if intv == int64(int(intv)) {
					return yaml_INT_TAG, int(intv)
				} else {
					return yaml_INT_TAG, intv
				}
			}
			floatv, err := strconv.ParseFloat(plain, 64)
			if err == nil {
				return yaml_FLOAT_TAG, floatv
			}
			if strings.HasPrefix(plain, "0b") {
				intv, err := strconv.ParseInt(plain[2:], 2, 64)
				if err == nil {
					return yaml_INT_TAG, int(intv)
				}
			} else if strings.HasPrefix(plain, "-0b") {
				intv, err := strconv.ParseInt(plain[3:], 2, 64)
				if err == nil {
					return yaml_INT_TAG, -int(intv)
				}
			}
			// XXX Handle timestamps here.

		default:
			panic("resolveTable item not yet handled: " + string(rune(hint)) + " (with " + in + ")")
		}
	}
	if tag == yaml_BINARY_TAG {
		return yaml_BINARY_TAG, in
	}
	if utf8.ValidString(in) {
		return yaml_STR_TAG, in
	}
	return yaml_BINARY_TAG, encodeBase64(in)
}

// encodeBase64 encodes s as base64 that is broken up into multiple lines
// as appropriate for the resulting length.
func encodeBase64(s string) string {
	const lineLen = 70
	encLen := base64.StdEncoding.EncodedLen(len(s))
	lines := encLen/lineLen + 1
	buf := make([]byte, encLen*2+lines)
	in := buf[0:encLen]
	out := buf[encLen:]
	base64.StdEncoding.Encode(in, []byte(s))
	k := 0
	for i := 0; i < len(in); i += lineLen {
		j := i + lineLen
		if j > len(in) {
			j = len(in)
		}
		k += copy(out[k:], in[i:j])
		if lines > 1 {
			out[k] = '\n'
			k++
		}
	}
	return string(out[:k])
}
  07070100000FEA000081A4000000000000000000000001645E367C00012DCF000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v1/scannerc.go   package yaml

import (
	"bytes"
	"fmt"
)

// Introduction
// ************
//
// The following notes assume that you are familiar with the YAML specification
// (http://yaml.org/spec/cvs/current.html).  We mostly follow it, although in
// some cases we are less restrictive that it requires.
//
// The process of transforming a YAML stream into a sequence of events is
// divided on two steps: Scanning and Parsing.
//
// The Scanner transforms the input stream into a sequence of tokens, while the
// parser transform the sequence of tokens produced by the Scanner into a
// sequence of parsing events.
//
// The Scanner is rather clever and complicated. The Parser, on the contrary,
// is a straightforward implementation of a recursive-descendant parser (or,
// LL(1) parser, as it is usually called).
//
// Actually there are two issues of Scanning that might be called "clever", the
// rest is quite straightforward.  The issues are "block collection start" and
// "simple keys".  Both issues are explained below in details.
//
// Here the Scanning step is explained and implemented.  We start with the list
// of all the tokens produced by the Scanner together with short descriptions.
//
// Now, tokens:
//
//      STREAM-START(encoding)          # The stream start.
//      STREAM-END                      # The stream end.
//      VERSION-DIRECTIVE(major,minor)  # The '%YAML' directive.
//      TAG-DIRECTIVE(handle,prefix)    # The '%TAG' directive.
//      DOCUMENT-START                  # '---'
//      DOCUMENT-END                    # '...'
//      BLOCK-SEQUENCE-START            # Indentation increase denoting a block
//      BLOCK-MAPPING-START             # sequence or a block mapping.
//      BLOCK-END                       # Indentation decrease.
//      FLOW-SEQUENCE-START             # '['
//      FLOW-SEQUENCE-END               # ']'
//      BLOCK-SEQUENCE-START            # '{'
//      BLOCK-SEQUENCE-END              # '}'
//      BLOCK-ENTRY                     # '-'
//      FLOW-ENTRY                      # ','
//      KEY                             # '?' or nothing (simple keys).
//      VALUE                           # ':'
//      ALIAS(anchor)                   # '*anchor'
//      ANCHOR(anchor)                  # '&anchor'
//      TAG(handle,suffix)              # '!handle!suffix'
//      SCALAR(value,style)             # A scalar.
//
// The following two tokens are "virtual" tokens denoting the beginning and the
// end of the stream:
//
//      STREAM-START(encoding)
//      STREAM-END
//
// We pass the information about the input stream encoding with the
// STREAM-START token.
//
// The next two tokens are responsible for tags:
//
//      VERSION-DIRECTIVE(major,minor)
//      TAG-DIRECTIVE(handle,prefix)
//
// Example:
//
//      %YAML   1.1
//      %TAG    !   !foo
//      %TAG    !yaml!  tag:yaml.org,2002:
//      ---
//
// The correspoding sequence of tokens:
//
//      STREAM-START(utf-8)
//      VERSION-DIRECTIVE(1,1)
//      TAG-DIRECTIVE("!","!foo")
//      TAG-DIRECTIVE("!yaml","tag:yaml.org,2002:")
//      DOCUMENT-START
//      STREAM-END
//
// Note that the VERSION-DIRECTIVE and TAG-DIRECTIVE tokens occupy a whole
// line.
//
// The document start and end indicators are represented by:
//
//      DOCUMENT-START
//      DOCUMENT-END
//
// Note that if a YAML stream contains an implicit document (without '---'
// and '...' indicators), no DOCUMENT-START and DOCUMENT-END tokens will be
// produced.
//
// In the following examples, we present whole documents together with the
// produced tokens.
//
//      1. An implicit document:
//
//          'a scalar'
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          SCALAR("a scalar",single-quoted)
//          STREAM-END
//
//      2. An explicit document:
//
//          ---
//          'a scalar'
//          ...
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          DOCUMENT-START
//          SCALAR("a scalar",single-quoted)
//          DOCUMENT-END
//          STREAM-END
//
//      3. Several documents in a stream:
//
//          'a scalar'
//          ---
//          'another scalar'
//          ---
//          'yet another scalar'
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          SCALAR("a scalar",single-quoted)
//          DOCUMENT-START
//          SCALAR("another scalar",single-quoted)
//          DOCUMENT-START
//          SCALAR("yet another scalar",single-quoted)
//          STREAM-END
//
// We have already introduced the SCALAR token above.  The following tokens are
// used to describe aliases, anchors, tag, and scalars:
//
//      ALIAS(anchor)
//      ANCHOR(anchor)
//      TAG(handle,suffix)
//      SCALAR(value,style)
//
// The following series of examples illustrate the usage of these tokens:
//
//      1. A recursive sequence:
//
//          &A [ *A ]
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          ANCHOR("A")
//          FLOW-SEQUENCE-START
//          ALIAS("A")
//          FLOW-SEQUENCE-END
//          STREAM-END
//
//      2. A tagged scalar:
//
//          !!float "3.14"  # A good approximation.
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          TAG("!!","float")
//          SCALAR("3.14",double-quoted)
//          STREAM-END
//
//      3. Various scalar styles:
//
//          --- # Implicit empty plain scalars do not produce tokens.
//          --- a plain scalar
//          --- 'a single-quoted scalar'
//          --- "a double-quoted scalar"
//          --- |-
//            a literal scalar
//          --- >-
//            a folded
//            scalar
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          DOCUMENT-START
//          DOCUMENT-START
//          SCALAR("a plain scalar",plain)
//          DOCUMENT-START
//          SCALAR("a single-quoted scalar",single-quoted)
//          DOCUMENT-START
//          SCALAR("a double-quoted scalar",double-quoted)
//          DOCUMENT-START
//          SCALAR("a literal scalar",literal)
//          DOCUMENT-START
//          SCALAR("a folded scalar",folded)
//          STREAM-END
//
// Now it's time to review collection-related tokens. We will start with
// flow collections:
//
//      FLOW-SEQUENCE-START
//      FLOW-SEQUENCE-END
//      FLOW-MAPPING-START
//      FLOW-MAPPING-END
//      FLOW-ENTRY
//      KEY
//      VALUE
//
// The tokens FLOW-SEQUENCE-START, FLOW-SEQUENCE-END, FLOW-MAPPING-START, and
// FLOW-MAPPING-END represent the indicators '[', ']', '{', and '}'
// correspondingly.  FLOW-ENTRY represent the ',' indicator.  Finally the
// indicators '?' and ':', which are used for denoting mapping keys and values,
// are represented by the KEY and VALUE tokens.
//
// The following examples show flow collections:
//
//      1. A flow sequence:
//
//          [item 1, item 2, item 3]
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          FLOW-SEQUENCE-START
//          SCALAR("item 1",plain)
//          FLOW-ENTRY
//          SCALAR("item 2",plain)
//          FLOW-ENTRY
//          SCALAR("item 3",plain)
//          FLOW-SEQUENCE-END
//          STREAM-END
//
//      2. A flow mapping:
//
//          {
//              a simple key: a value,  # Note that the KEY token is produced.
//              ? a complex key: another value,
//          }
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          FLOW-MAPPING-START
//          KEY
//          SCALAR("a simple key",plain)
//          VALUE
//          SCALAR("a value",plain)
//          FLOW-ENTRY
//          KEY
//          SCALAR("a complex key",plain)
//          VALUE
//          SCALAR("another value",plain)
//          FLOW-ENTRY
//          FLOW-MAPPING-END
//          STREAM-END
//
// A simple key is a key which is not denoted by the '?' indicator.  Note that
// the Scanner still produce the KEY token whenever it encounters a simple key.
//
// For scanning block collections, the following tokens are used (note that we
// repeat KEY and VALUE here):
//
//      BLOCK-SEQUENCE-START
//      BLOCK-MAPPING-START
//      BLOCK-END
//      BLOCK-ENTRY
//      KEY
//      VALUE
//
// The tokens BLOCK-SEQUENCE-START and BLOCK-MAPPING-START denote indentation
// increase that precedes a block collection (cf. the INDENT token in Python).
// The token BLOCK-END denote indentation decrease that ends a block collection
// (cf. the DEDENT token in Python).  However YAML has some syntax pecularities
// that makes detections of these tokens more complex.
//
// The tokens BLOCK-ENTRY, KEY, and VALUE are used to represent the indicators
// '-', '?', and ':' correspondingly.
//
// The following examples show how the tokens BLOCK-SEQUENCE-START,
// BLOCK-MAPPING-START, and BLOCK-END are emitted by the Scanner:
//
//      1. Block sequences:
//
//          - item 1
//          - item 2
//          -
//            - item 3.1
//            - item 3.2
//          -
//            key 1: value 1
//            key 2: value 2
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          BLOCK-SEQUENCE-START
//          BLOCK-ENTRY
//          SCALAR("item 1",plain)
//          BLOCK-ENTRY
//          SCALAR("item 2",plain)
//          BLOCK-ENTRY
//          BLOCK-SEQUENCE-START
//          BLOCK-ENTRY
//          SCALAR("item 3.1",plain)
//          BLOCK-ENTRY
//          SCALAR("item 3.2",plain)
//          BLOCK-END
//          BLOCK-ENTRY
//          BLOCK-MAPPING-START
//          KEY
//          SCALAR("key 1",plain)
//          VALUE
//          SCALAR("value 1",plain)
//          KEY
//          SCALAR("key 2",plain)
//          VALUE
//          SCALAR("value 2",plain)
//          BLOCK-END
//          BLOCK-END
//          STREAM-END
//
//      2. Block mappings:
//
//          a simple key: a value   # The KEY token is produced here.
//          ? a complex key
//          : another value
//          a mapping:
//            key 1: value 1
//            key 2: value 2
//          a sequence:
//            - item 1
//            - item 2
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          BLOCK-MAPPING-START
//          KEY
//          SCALAR("a simple key",plain)
//          VALUE
//          SCALAR("a value",plain)
//          KEY
//          SCALAR("a complex key",plain)
//          VALUE
//          SCALAR("another value",plain)
//          KEY
//          SCALAR("a mapping",plain)
//          BLOCK-MAPPING-START
//          KEY
//          SCALAR("key 1",plain)
//          VALUE
//          SCALAR("value 1",plain)
//          KEY
//          SCALAR("key 2",plain)
//          VALUE
//          SCALAR("value 2",plain)
//          BLOCK-END
//          KEY
//          SCALAR("a sequence",plain)
//          VALUE
//          BLOCK-SEQUENCE-START
//          BLOCK-ENTRY
//          SCALAR("item 1",plain)
//          BLOCK-ENTRY
//          SCALAR("item 2",plain)
//          BLOCK-END
//          BLOCK-END
//          STREAM-END
//
// YAML does not always require to start a new block collection from a new
// line.  If the current line contains only '-', '?', and ':' indicators, a new
// block collection may start at the current line.  The following examples
// illustrate this case:
//
//      1. Collections in a sequence:
//
//          - - item 1
//            - item 2
//          - key 1: value 1
//            key 2: value 2
//          - ? complex key
//            : complex value
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          BLOCK-SEQUENCE-START
//          BLOCK-ENTRY
//          BLOCK-SEQUENCE-START
//          BLOCK-ENTRY
//          SCALAR("item 1",plain)
//          BLOCK-ENTRY
//          SCALAR("item 2",plain)
//          BLOCK-END
//          BLOCK-ENTRY
//          BLOCK-MAPPING-START
//          KEY
//          SCALAR("key 1",plain)
//          VALUE
//          SCALAR("value 1",plain)
//          KEY
//          SCALAR("key 2",plain)
//          VALUE
//          SCALAR("value 2",plain)
//          BLOCK-END
//          BLOCK-ENTRY
//          BLOCK-MAPPING-START
//          KEY
//          SCALAR("complex key")
//          VALUE
//          SCALAR("complex value")
//          BLOCK-END
//          BLOCK-END
//          STREAM-END
//
//      2. Collections in a mapping:
//
//          ? a sequence
//          : - item 1
//            - item 2
//          ? a mapping
//          : key 1: value 1
//            key 2: value 2
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          BLOCK-MAPPING-START
//          KEY
//          SCALAR("a sequence",plain)
//          VALUE
//          BLOCK-SEQUENCE-START
//          BLOCK-ENTRY
//          SCALAR("item 1",plain)
//          BLOCK-ENTRY
//          SCALAR("item 2",plain)
//          BLOCK-END
//          KEY
//          SCALAR("a mapping",plain)
//          VALUE
//          BLOCK-MAPPING-START
//          KEY
//          SCALAR("key 1",plain)
//          VALUE
//          SCALAR("value 1",plain)
//          KEY
//          SCALAR("key 2",plain)
//          VALUE
//          SCALAR("value 2",plain)
//          BLOCK-END
//          BLOCK-END
//          STREAM-END
//
// YAML also permits non-indented sequences if they are included into a block
// mapping.  In this case, the token BLOCK-SEQUENCE-START is not produced:
//
//      key:
//      - item 1    # BLOCK-SEQUENCE-START is NOT produced here.
//      - item 2
//
// Tokens:
//
//      STREAM-START(utf-8)
//      BLOCK-MAPPING-START
//      KEY
//      SCALAR("key",plain)
//      VALUE
//      BLOCK-ENTRY
//      SCALAR("item 1",plain)
//      BLOCK-ENTRY
//      SCALAR("item 2",plain)
//      BLOCK-END
//

// Ensure that the buffer contains the required number of characters.
// Return true on success, false on failure (reader error or memory error).
func cache(parser *yaml_parser_t, length int) bool {
	// [Go] This was inlined: !cache(A, B) -> unread < B && !update(A, B)
	return parser.unread >= length || yaml_parser_update_buffer(parser, length)
}

// Advance the buffer pointer.
func skip(parser *yaml_parser_t) {
	parser.mark.index++
	parser.mark.column++
	parser.unread--
	parser.buffer_pos += width(parser.buffer[parser.buffer_pos])
}

func skip_line(parser *yaml_parser_t) {
	if is_crlf(parser.buffer, parser.buffer_pos) {
		parser.mark.index += 2
		parser.mark.column = 0
		parser.mark.line++
		parser.unread -= 2
		parser.buffer_pos += 2
	} else if is_break(parser.buffer, parser.buffer_pos) {
		parser.mark.index++
		parser.mark.column = 0
		parser.mark.line++
		parser.unread--
		parser.buffer_pos += width(parser.buffer[parser.buffer_pos])
	}
}

// Copy a character to a string buffer and advance pointers.
func read(parser *yaml_parser_t, s []byte) []byte {
	w := width(parser.buffer[parser.buffer_pos])
	if w == 0 {
		panic("invalid character sequence")
	}
	if len(s) == 0 {
		s = make([]byte, 0, 32)
	}
	if w == 1 && len(s)+w <= cap(s) {
		s = s[:len(s)+1]
		s[len(s)-1] = parser.buffer[parser.buffer_pos]
		parser.buffer_pos++
	} else {
		s = append(s, parser.buffer[parser.buffer_pos:parser.buffer_pos+w]...)
		parser.buffer_pos += w
	}
	parser.mark.index++
	parser.mark.column++
	parser.unread--
	return s
}

// Copy a line break character to a string buffer and advance pointers.
func read_line(parser *yaml_parser_t, s []byte) []byte {
	buf := parser.buffer
	pos := parser.buffer_pos
	switch {
	case buf[pos] == '\r' && buf[pos+1] == '\n':
		// CR LF . LF
		s = append(s, '\n')
		parser.buffer_pos += 2
		parser.mark.index++
		parser.unread--
	case buf[pos] == '\r' || buf[pos] == '\n':
		// CR|LF . LF
		s = append(s, '\n')
		parser.buffer_pos += 1
	case buf[pos] == '\xC2' && buf[pos+1] == '\x85':
		// NEL . LF
		s = append(s, '\n')
		parser.buffer_pos += 2
	case buf[pos] == '\xE2' && buf[pos+1] == '\x80' && (buf[pos+2] == '\xA8' || buf[pos+2] == '\xA9'):
		// LS|PS . LS|PS
		s = append(s, buf[parser.buffer_pos:pos+3]...)
		parser.buffer_pos += 3
	default:
		return s
	}
	parser.mark.index++
	parser.mark.column = 0
	parser.mark.line++
	parser.unread--
	return s
}

// Get the next token.
func yaml_parser_scan(parser *yaml_parser_t, token *yaml_token_t) bool {
	// Erase the token object.
	*token = yaml_token_t{} // [Go] Is this necessary?

	// No tokens after STREAM-END or error.
	if parser.stream_end_produced || parser.error != yaml_NO_ERROR {
		return true
	}

	// Ensure that the tokens queue contains enough tokens.
	if !parser.token_available {
		if !yaml_parser_fetch_more_tokens(parser) {
			return false
		}
	}

	// Fetch the next token from the queue.
	*token = parser.tokens[parser.tokens_head]
	parser.tokens_head++
	parser.tokens_parsed++
	parser.token_available = false

	if token.typ == yaml_STREAM_END_TOKEN {
		parser.stream_end_produced = true
	}
	return true
}

// Set the scanner error and return false.
func yaml_parser_set_scanner_error(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string) bool {
	parser.error = yaml_SCANNER_ERROR
	parser.context = context
	parser.context_mark = context_mark
	parser.problem = problem
	parser.problem_mark = parser.mark
	return false
}

func yaml_parser_set_scanner_tag_error(parser *yaml_parser_t, directive bool, context_mark yaml_mark_t, problem string) bool {
	context := "while parsing a tag"
	if directive {
		context = "while parsing a %TAG directive"
	}
	return yaml_parser_set_scanner_error(parser, context, context_mark, "did not find URI escaped octet")
}

func trace(args ...interface{}) func() {
	pargs := append([]interface{}{"+++"}, args...)
	fmt.Println(pargs...)
	pargs = append([]interface{}{"---"}, args...)
	return func() { fmt.Println(pargs...) }
}

// Ensure that the tokens queue contains at least one token which can be
// returned to the Parser.
func yaml_parser_fetch_more_tokens(parser *yaml_parser_t) bool {
	// While we need more tokens to fetch, do it.
	for {
		// Check if we really need to fetch more tokens.
		need_more_tokens := false

		if parser.tokens_head == len(parser.tokens) {
			// Queue is empty.
			need_more_tokens = true
		} else {
			// Check if any potential simple key may occupy the head position.
			if !yaml_parser_stale_simple_keys(parser) {
				return false
			}

			for i := range parser.simple_keys {
				simple_key := &parser.simple_keys[i]
				if simple_key.possible && simple_key.token_number == parser.tokens_parsed {
					need_more_tokens = true
					break
				}
			}
		}

		// We are finished.
		if !need_more_tokens {
			break
		}
		// Fetch the next token.
		if !yaml_parser_fetch_next_token(parser) {
			return false
		}
	}

	parser.token_available = true
	return true
}

// The dispatcher for token fetchers.
func yaml_parser_fetch_next_token(parser *yaml_parser_t) bool {
	// Ensure that the buffer is initialized.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}

	// Check if we just started scanning.  Fetch STREAM-START then.
	if !parser.stream_start_produced {
		return yaml_parser_fetch_stream_start(parser)
	}

	// Eat whitespaces and comments until we reach the next token.
	if !yaml_parser_scan_to_next_token(parser) {
		return false
	}

	// Remove obsolete potential simple keys.
	if !yaml_parser_stale_simple_keys(parser) {
		return false
	}

	// Check the indentation level against the current column.
	if !yaml_parser_unroll_indent(parser, parser.mark.column) {
		return false
	}

	// Ensure that the buffer contains at least 4 characters.  4 is the length
	// of the longest indicators ('--- ' and '... ').
	if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) {
		return false
	}

	// Is it the end of the stream?
	if is_z(parser.buffer, parser.buffer_pos) {
		return yaml_parser_fetch_stream_end(parser)
	}

	// Is it a directive?
	if parser.mark.column == 0 && parser.buffer[parser.buffer_pos] == '%' {
		return yaml_parser_fetch_directive(parser)
	}

	buf := parser.buffer
	pos := parser.buffer_pos

	// Is it the document start indicator?
	if parser.mark.column == 0 && buf[pos] == '-' && buf[pos+1] == '-' && buf[pos+2] == '-' && is_blankz(buf, pos+3) {
		return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_START_TOKEN)
	}

	// Is it the document end indicator?
	if parser.mark.column == 0 && buf[pos] == '.' && buf[pos+1] == '.' && buf[pos+2] == '.' && is_blankz(buf, pos+3) {
		return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_END_TOKEN)
	}

	// Is it the flow sequence start indicator?
	if buf[pos] == '[' {
		return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_SEQUENCE_START_TOKEN)
	}

	// Is it the flow mapping start indicator?
	if parser.buffer[parser.buffer_pos] == '{' {
		return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_MAPPING_START_TOKEN)
	}

	// Is it the flow sequence end indicator?
	if parser.buffer[parser.buffer_pos] == ']' {
		return yaml_parser_fetch_flow_collection_end(parser,
			yaml_FLOW_SEQUENCE_END_TOKEN)
	}

	// Is it the flow mapping end indicator?
	if parser.buffer[parser.buffer_pos] == '}' {
		return yaml_parser_fetch_flow_collection_end(parser,
			yaml_FLOW_MAPPING_END_TOKEN)
	}

	// Is it the flow entry indicator?
	if parser.buffer[parser.buffer_pos] == ',' {
		return yaml_parser_fetch_flow_entry(parser)
	}

	// Is it the block entry indicator?
	if parser.buffer[parser.buffer_pos] == '-' && is_blankz(parser.buffer, parser.buffer_pos+1) {
		return yaml_parser_fetch_block_entry(parser)
	}

	// Is it the key indicator?
	if parser.buffer[parser.buffer_pos] == '?' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) {
		return yaml_parser_fetch_key(parser)
	}

	// Is it the value indicator?
	if parser.buffer[parser.buffer_pos] == ':' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) {
		return yaml_parser_fetch_value(parser)
	}

	// Is it an alias?
	if parser.buffer[parser.buffer_pos] == '*' {
		return yaml_parser_fetch_anchor(parser, yaml_ALIAS_TOKEN)
	}

	// Is it an anchor?
	if parser.buffer[parser.buffer_pos] == '&' {
		return yaml_parser_fetch_anchor(parser, yaml_ANCHOR_TOKEN)
	}

	// Is it a tag?
	if parser.buffer[parser.buffer_pos] == '!' {
		return yaml_parser_fetch_tag(parser)
	}

	// Is it a literal scalar?
	if parser.buffer[parser.buffer_pos] == '|' && parser.flow_level == 0 {
		return yaml_parser_fetch_block_scalar(parser, true)
	}

	// Is it a folded scalar?
	if parser.buffer[parser.buffer_pos] == '>' && parser.flow_level == 0 {
		return yaml_parser_fetch_block_scalar(parser, false)
	}

	// Is it a single-quoted scalar?
	if parser.buffer[parser.buffer_pos] == '\'' {
		return yaml_parser_fetch_flow_scalar(parser, true)
	}

	// Is it a double-quoted scalar?
	if parser.buffer[parser.buffer_pos] == '"' {
		return yaml_parser_fetch_flow_scalar(parser, false)
	}

	// Is it a plain scalar?
	//
	// A plain scalar may start with any non-blank characters except
	//
	//      '-', '?', ':', ',', '[', ']', '{', '}',
	//      '#', '&', '*', '!', '|', '>', '\'', '\"',
	//      '%', '@', '`'.
	//
	// In the block context (and, for the '-' indicator, in the flow context
	// too), it may also start with the characters
	//
	//      '-', '?', ':'
	//
	// if it is followed by a non-space character.
	//
	// The last rule is more restrictive than the specification requires.
	// [Go] Make this logic more reasonable.
	//switch parser.buffer[parser.buffer_pos] {
	//case '-', '?', ':', ',', '?', '-', ',', ':', ']', '[', '}', '{', '&', '#', '!', '*', '>', '|', '"', '\'', '@', '%', '-', '`':
	//}
	if !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '-' ||
		parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':' ||
		parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '[' ||
		parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' ||
		parser.buffer[parser.buffer_pos] == '}' || parser.buffer[parser.buffer_pos] == '#' ||
		parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '*' ||
		parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '|' ||
		parser.buffer[parser.buffer_pos] == '>' || parser.buffer[parser.buffer_pos] == '\'' ||
		parser.buffer[parser.buffer_pos] == '"' || parser.buffer[parser.buffer_pos] == '%' ||
		parser.buffer[parser.buffer_pos] == '@' || parser.buffer[parser.buffer_pos] == '`') ||
		(parser.buffer[parser.buffer_pos] == '-' && !is_blank(parser.buffer, parser.buffer_pos+1)) ||
		(parser.flow_level == 0 &&
			(parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':') &&
			!is_blankz(parser.buffer, parser.buffer_pos+1)) {
		return yaml_parser_fetch_plain_scalar(parser)
	}

	// If we don't determine the token type so far, it is an error.
	return yaml_parser_set_scanner_error(parser,
		"while scanning for the next token", parser.mark,
		"found character that cannot start any token")
}

// Check the list of potential simple keys and remove the positions that
// cannot contain simple keys anymore.
func yaml_parser_stale_simple_keys(parser *yaml_parser_t) bool {
	// Check for a potential simple key for each flow level.
	for i := range parser.simple_keys {
		simple_key := &parser.simple_keys[i]

		// The specification requires that a simple key
		//
		//  - is limited to a single line,
		//  - is shorter than 1024 characters.
		if simple_key.possible && (simple_key.mark.line < parser.mark.line || simple_key.mark.index+1024 < parser.mark.index) {

			// Check if the potential simple key to be removed is required.
			if simple_key.required {
				return yaml_parser_set_scanner_error(parser,
					"while scanning a simple key", simple_key.mark,
					"could not find expected ':'")
			}
			simple_key.possible = false
		}
	}
	return true
}

// Check if a simple key may start at the current position and add it if
// needed.
func yaml_parser_save_simple_key(parser *yaml_parser_t) bool {
	// A simple key is required at the current position if the scanner is in
	// the block context and the current column coincides with the indentation
	// level.

	required := parser.flow_level == 0 && parser.indent == parser.mark.column

	// A simple key is required only when it is the first token in the current
	// line.  Therefore it is always allowed.  But we add a check anyway.
	if required && !parser.simple_key_allowed {
		panic("should not happen")
	}

	//
	// If the current position may start a simple key, save it.
	//
	if parser.simple_key_allowed {
		simple_key := yaml_simple_key_t{
			possible:     true,
			required:     required,
			token_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head),
		}
		simple_key.mark = parser.mark

		if !yaml_parser_remove_simple_key(parser) {
			return false
		}
		parser.simple_keys[len(parser.simple_keys)-1] = simple_key
	}
	return true
}

// Remove a potential simple key at the current flow level.
func yaml_parser_remove_simple_key(parser *yaml_parser_t) bool {
	i := len(parser.simple_keys) - 1
	if parser.simple_keys[i].possible {
		// If the key is required, it is an error.
		if parser.simple_keys[i].required {
			return yaml_parser_set_scanner_error(parser,
				"while scanning a simple key", parser.simple_keys[i].mark,
				"could not find expected ':'")
		}
	}
	// Remove the key from the stack.
	parser.simple_keys[i].possible = false
	return true
}

// Increase the flow level and resize the simple key list if needed.
func yaml_parser_increase_flow_level(parser *yaml_parser_t) bool {
	// Reset the simple key on the next level.
	parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{})

	// Increase the flow level.
	parser.flow_level++
	return true
}

// Decrease the flow level.
func yaml_parser_decrease_flow_level(parser *yaml_parser_t) bool {
	if parser.flow_level > 0 {
		parser.flow_level--
		parser.simple_keys = parser.simple_keys[:len(parser.simple_keys)-1]
	}
	return true
}

// Push the current indentation level to the stack and set the new level
// the current column is greater than the indentation level.  In this case,
// append or insert the specified token into the token queue.
func yaml_parser_roll_indent(parser *yaml_parser_t, column, number int, typ yaml_token_type_t, mark yaml_mark_t) bool {
	// In the flow context, do nothing.
	if parser.flow_level > 0 {
		return true
	}

	if parser.indent < column {
		// Push the current indentation level to the stack and set the new
		// indentation level.
		parser.indents = append(parser.indents, parser.indent)
		parser.indent = column

		// Create a token and insert it into the queue.
		token := yaml_token_t{
			typ:        typ,
			start_mark: mark,
			end_mark:   mark,
		}
		if number > -1 {
			number -= parser.tokens_parsed
		}
		yaml_insert_token(parser, number, &token)
	}
	return true
}

// Pop indentation levels from the indents stack until the current level
// becomes less or equal to the column.  For each intendation level, append
// the BLOCK-END token.
func yaml_parser_unroll_indent(parser *yaml_parser_t, column int) bool {
	// In the flow context, do nothing.
	if parser.flow_level > 0 {
		return true
	}

	// Loop through the intendation levels in the stack.
	for parser.indent > column {
		// Create a token and append it to the queue.
		token := yaml_token_t{
			typ:        yaml_BLOCK_END_TOKEN,
			start_mark: parser.mark,
			end_mark:   parser.mark,
		}
		yaml_insert_token(parser, -1, &token)

		// Pop the indentation level.
		parser.indent = parser.indents[len(parser.indents)-1]
		parser.indents = parser.indents[:len(parser.indents)-1]
	}
	return true
}

// Initialize the scanner and produce the STREAM-START token.
func yaml_parser_fetch_stream_start(parser *yaml_parser_t) bool {

	// Set the initial indentation.
	parser.indent = -1

	// Initialize the simple key stack.
	parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{})

	// A simple key is allowed at the beginning of the stream.
	parser.simple_key_allowed = true

	// We have started.
	parser.stream_start_produced = true

	// Create the STREAM-START token and append it to the queue.
	token := yaml_token_t{
		typ:        yaml_STREAM_START_TOKEN,
		start_mark: parser.mark,
		end_mark:   parser.mark,
		encoding:   parser.encoding,
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the STREAM-END token and shut down the scanner.
func yaml_parser_fetch_stream_end(parser *yaml_parser_t) bool {

	// Force new line.
	if parser.mark.column != 0 {
		parser.mark.column = 0
		parser.mark.line++
	}

	// Reset the indentation level.
	if !yaml_parser_unroll_indent(parser, -1) {
		return false
	}

	// Reset simple keys.
	if !yaml_parser_remove_simple_key(parser) {
		return false
	}

	parser.simple_key_allowed = false

	// Create the STREAM-END token and append it to the queue.
	token := yaml_token_t{
		typ:        yaml_STREAM_END_TOKEN,
		start_mark: parser.mark,
		end_mark:   parser.mark,
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce a VERSION-DIRECTIVE or TAG-DIRECTIVE token.
func yaml_parser_fetch_directive(parser *yaml_parser_t) bool {
	// Reset the indentation level.
	if !yaml_parser_unroll_indent(parser, -1) {
		return false
	}

	// Reset simple keys.
	if !yaml_parser_remove_simple_key(parser) {
		return false
	}

	parser.simple_key_allowed = false

	// Create the YAML-DIRECTIVE or TAG-DIRECTIVE token.
	token := yaml_token_t{}
	if !yaml_parser_scan_directive(parser, &token) {
		return false
	}
	// Append the token to the queue.
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the DOCUMENT-START or DOCUMENT-END token.
func yaml_parser_fetch_document_indicator(parser *yaml_parser_t, typ yaml_token_type_t) bool {
	// Reset the indentation level.
	if !yaml_parser_unroll_indent(parser, -1) {
		return false
	}

	// Reset simple keys.
	if !yaml_parser_remove_simple_key(parser) {
		return false
	}

	parser.simple_key_allowed = false

	// Consume the token.
	start_mark := parser.mark

	skip(parser)
	skip(parser)
	skip(parser)

	end_mark := parser.mark

	// Create the DOCUMENT-START or DOCUMENT-END token.
	token := yaml_token_t{
		typ:        typ,
		start_mark: start_mark,
		end_mark:   end_mark,
	}
	// Append the token to the queue.
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the FLOW-SEQUENCE-START or FLOW-MAPPING-START token.
func yaml_parser_fetch_flow_collection_start(parser *yaml_parser_t, typ yaml_token_type_t) bool {
	// The indicators '[' and '{' may start a simple key.
	if !yaml_parser_save_simple_key(parser) {
		return false
	}

	// Increase the flow level.
	if !yaml_parser_increase_flow_level(parser) {
		return false
	}

	// A simple key may follow the indicators '[' and '{'.
	parser.simple_key_allowed = true

	// Consume the token.
	start_mark := parser.mark
	skip(parser)
	end_mark := parser.mark

	// Create the FLOW-SEQUENCE-START of FLOW-MAPPING-START token.
	token := yaml_token_t{
		typ:        typ,
		start_mark: start_mark,
		end_mark:   end_mark,
	}
	// Append the token to the queue.
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the FLOW-SEQUENCE-END or FLOW-MAPPING-END token.
func yaml_parser_fetch_flow_collection_end(parser *yaml_parser_t, typ yaml_token_type_t) bool {
	// Reset any potential simple key on the current flow level.
	if !yaml_parser_remove_simple_key(parser) {
		return false
	}

	// Decrease the flow level.
	if !yaml_parser_decrease_flow_level(parser) {
		return false
	}

	// No simple keys after the indicators ']' and '}'.
	parser.simple_key_allowed = false

	// Consume the token.

	start_mark := parser.mark
	skip(parser)
	end_mark := parser.mark

	// Create the FLOW-SEQUENCE-END of FLOW-MAPPING-END token.
	token := yaml_token_t{
		typ:        typ,
		start_mark: start_mark,
		end_mark:   end_mark,
	}
	// Append the token to the queue.
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the FLOW-ENTRY token.
func yaml_parser_fetch_flow_entry(parser *yaml_parser_t) bool {
	// Reset any potential simple keys on the current flow level.
	if !yaml_parser_remove_simple_key(parser) {
		return false
	}

	// Simple keys are allowed after ','.
	parser.simple_key_allowed = true

	// Consume the token.
	start_mark := parser.mark
	skip(parser)
	end_mark := parser.mark

	// Create the FLOW-ENTRY token and append it to the queue.
	token := yaml_token_t{
		typ:        yaml_FLOW_ENTRY_TOKEN,
		start_mark: start_mark,
		end_mark:   end_mark,
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the BLOCK-ENTRY token.
func yaml_parser_fetch_block_entry(parser *yaml_parser_t) bool {
	// Check if the scanner is in the block context.
	if parser.flow_level == 0 {
		// Check if we are allowed to start a new entry.
		if !parser.simple_key_allowed {
			return yaml_parser_set_scanner_error(parser, "", parser.mark,
				"block sequence entries are not allowed in this context")
		}
		// Add the BLOCK-SEQUENCE-START token if needed.
		if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_SEQUENCE_START_TOKEN, parser.mark) {
			return false
		}
	} else {
		// It is an error for the '-' indicator to occur in the flow context,
		// but we let the Parser detect and report about it because the Parser
		// is able to point to the context.
	}

	// Reset any potential simple keys on the current flow level.
	if !yaml_parser_remove_simple_key(parser) {
		return false
	}

	// Simple keys are allowed after '-'.
	parser.simple_key_allowed = true

	// Consume the token.
	start_mark := parser.mark
	skip(parser)
	end_mark := parser.mark

	// Create the BLOCK-ENTRY token and append it to the queue.
	token := yaml_token_t{
		typ:        yaml_BLOCK_ENTRY_TOKEN,
		start_mark: start_mark,
		end_mark:   end_mark,
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the KEY token.
func yaml_parser_fetch_key(parser *yaml_parser_t) bool {

	// In the block context, additional checks are required.
	if parser.flow_level == 0 {
		// Check if we are allowed to start a new key (not nessesary simple).
		if !parser.simple_key_allowed {
			return yaml_parser_set_scanner_error(parser, "", parser.mark,
				"mapping keys are not allowed in this context")
		}
		// Add the BLOCK-MAPPING-START token if needed.
		if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) {
			return false
		}
	}

	// Reset any potential simple keys on the current flow level.
	if !yaml_parser_remove_simple_key(parser) {
		return false
	}

	// Simple keys are allowed after '?' in the block context.
	parser.simple_key_allowed = parser.flow_level == 0

	// Consume the token.
	start_mark := parser.mark
	skip(parser)
	end_mark := parser.mark

	// Create the KEY token and append it to the queue.
	token := yaml_token_t{
		typ:        yaml_KEY_TOKEN,
		start_mark: start_mark,
		end_mark:   end_mark,
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the VALUE token.
func yaml_parser_fetch_value(parser *yaml_parser_t) bool {

	simple_key := &parser.simple_keys[len(parser.simple_keys)-1]

	// Have we found a simple key?
	if simple_key.possible {
		// Create the KEY token and insert it into the queue.
		token := yaml_token_t{
			typ:        yaml_KEY_TOKEN,
			start_mark: simple_key.mark,
			end_mark:   simple_key.mark,
		}
		yaml_insert_token(parser, simple_key.token_number-parser.tokens_parsed, &token)

		// In the block context, we may need to add the BLOCK-MAPPING-START token.
		if !yaml_parser_roll_indent(parser, simple_key.mark.column,
			simple_key.token_number,
			yaml_BLOCK_MAPPING_START_TOKEN, simple_key.mark) {
			return false
		}

		// Remove the simple key.
		simple_key.possible = false

		// A simple key cannot follow another simple key.
		parser.simple_key_allowed = false

	} else {
		// The ':' indicator follows a complex key.

		// In the block context, extra checks are required.
		if parser.flow_level == 0 {

			// Check if we are allowed to start a complex value.
			if !parser.simple_key_allowed {
				return yaml_parser_set_scanner_error(parser, "", parser.mark,
					"mapping values are not allowed in this context")
			}

			// Add the BLOCK-MAPPING-START token if needed.
			if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) {
				return false
			}
		}

		// Simple keys after ':' are allowed in the block context.
		parser.simple_key_allowed = parser.flow_level == 0
	}

	// Consume the token.
	start_mark := parser.mark
	skip(parser)
	end_mark := parser.mark

	// Create the VALUE token and append it to the queue.
	token := yaml_token_t{
		typ:        yaml_VALUE_TOKEN,
		start_mark: start_mark,
		end_mark:   end_mark,
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the ALIAS or ANCHOR token.
func yaml_parser_fetch_anchor(parser *yaml_parser_t, typ yaml_token_type_t) bool {
	// An anchor or an alias could be a simple key.
	if !yaml_parser_save_simple_key(parser) {
		return false
	}

	// A simple key cannot follow an anchor or an alias.
	parser.simple_key_allowed = false

	// Create the ALIAS or ANCHOR token and append it to the queue.
	var token yaml_token_t
	if !yaml_parser_scan_anchor(parser, &token, typ) {
		return false
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the TAG token.
func yaml_parser_fetch_tag(parser *yaml_parser_t) bool {
	// A tag could be a simple key.
	if !yaml_parser_save_simple_key(parser) {
		return false
	}

	// A simple key cannot follow a tag.
	parser.simple_key_allowed = false

	// Create the TAG token and append it to the queue.
	var token yaml_token_t
	if !yaml_parser_scan_tag(parser, &token) {
		return false
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the SCALAR(...,literal) or SCALAR(...,folded) tokens.
func yaml_parser_fetch_block_scalar(parser *yaml_parser_t, literal bool) bool {
	// Remove any potential simple keys.
	if !yaml_parser_remove_simple_key(parser) {
		return false
	}

	// A simple key may follow a block scalar.
	parser.simple_key_allowed = true

	// Create the SCALAR token and append it to the queue.
	var token yaml_token_t
	if !yaml_parser_scan_block_scalar(parser, &token, literal) {
		return false
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the SCALAR(...,single-quoted) or SCALAR(...,double-quoted) tokens.
func yaml_parser_fetch_flow_scalar(parser *yaml_parser_t, single bool) bool {
	// A plain scalar could be a simple key.
	if !yaml_parser_save_simple_key(parser) {
		return false
	}

	// A simple key cannot follow a flow scalar.
	parser.simple_key_allowed = false

	// Create the SCALAR token and append it to the queue.
	var token yaml_token_t
	if !yaml_parser_scan_flow_scalar(parser, &token, single) {
		return false
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the SCALAR(...,plain) token.
func yaml_parser_fetch_plain_scalar(parser *yaml_parser_t) bool {
	// A plain scalar could be a simple key.
	if !yaml_parser_save_simple_key(parser) {
		return false
	}

	// A simple key cannot follow a flow scalar.
	parser.simple_key_allowed = false

	// Create the SCALAR token and append it to the queue.
	var token yaml_token_t
	if !yaml_parser_scan_plain_scalar(parser, &token) {
		return false
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Eat whitespaces and comments until the next token is found.
func yaml_parser_scan_to_next_token(parser *yaml_parser_t) bool {

	// Until the next token is not found.
	for {
		// Allow the BOM mark to start a line.
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
		if parser.mark.column == 0 && is_bom(parser.buffer, parser.buffer_pos) {
			skip(parser)
		}

		// Eat whitespaces.
		// Tabs are allowed:
		//  - in the flow context
		//  - in the block context, but not at the beginning of the line or
		//  after '-', '?', or ':' (complex value).
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}

		for parser.buffer[parser.buffer_pos] == ' ' || ((parser.flow_level > 0 || !parser.simple_key_allowed) && parser.buffer[parser.buffer_pos] == '\t') {
			skip(parser)
			if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
				return false
			}
		}

		// Eat a comment until a line break.
		if parser.buffer[parser.buffer_pos] == '#' {
			for !is_breakz(parser.buffer, parser.buffer_pos) {
				skip(parser)
				if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
					return false
				}
			}
		}

		// If it is a line break, eat it.
		if is_break(parser.buffer, parser.buffer_pos) {
			if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
				return false
			}
			skip_line(parser)

			// In the block context, a new line may start a simple key.
			if parser.flow_level == 0 {
				parser.simple_key_allowed = true
			}
		} else {
			break // We have found a token.
		}
	}

	return true
}

// Scan a YAML-DIRECTIVE or TAG-DIRECTIVE token.
//
// Scope:
//      %YAML    1.1    # a comment \n
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//      %TAG    !yaml!  tag:yaml.org,2002:  \n
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
func yaml_parser_scan_directive(parser *yaml_parser_t, token *yaml_token_t) bool {
	// Eat '%'.
	start_mark := parser.mark
	skip(parser)

	// Scan the directive name.
	var name []byte
	if !yaml_parser_scan_directive_name(parser, start_mark, &name) {
		return false
	}

	// Is it a YAML directive?
	if bytes.Equal(name, []byte("YAML")) {
		// Scan the VERSION directive value.
		var major, minor int8
		if !yaml_parser_scan_version_directive_value(parser, start_mark, &major, &minor) {
			return false
		}
		end_mark := parser.mark

		// Create a VERSION-DIRECTIVE token.
		*token = yaml_token_t{
			typ:        yaml_VERSION_DIRECTIVE_TOKEN,
			start_mark: start_mark,
			end_mark:   end_mark,
			major:      major,
			minor:      minor,
		}

		// Is it a TAG directive?
	} else if bytes.Equal(name, []byte("TAG")) {
		// Scan the TAG directive value.
		var handle, prefix []byte
		if !yaml_parser_scan_tag_directive_value(parser, start_mark, &handle, &prefix) {
			return false
		}
		end_mark := parser.mark

		// Create a TAG-DIRECTIVE token.
		*token = yaml_token_t{
			typ:        yaml_TAG_DIRECTIVE_TOKEN,
			start_mark: start_mark,
			end_mark:   end_mark,
			value:      handle,
			prefix:     prefix,
		}

		// Unknown directive.
	} else {
		yaml_parser_set_scanner_error(parser, "while scanning a directive",
			start_mark, "found uknown directive name")
		return false
	}

	// Eat the rest of the line including any comments.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}

	for is_blank(parser.buffer, parser.buffer_pos) {
		skip(parser)
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}

	if parser.buffer[parser.buffer_pos] == '#' {
		for !is_breakz(parser.buffer, parser.buffer_pos) {
			skip(parser)
			if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
				return false
			}
		}
	}

	// Check if we are at the end of the line.
	if !is_breakz(parser.buffer, parser.buffer_pos) {
		yaml_parser_set_scanner_error(parser, "while scanning a directive",
			start_mark, "did not find expected comment or line break")
		return false
	}

	// Eat a line break.
	if is_break(parser.buffer, parser.buffer_pos) {
		if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
			return false
		}
		skip_line(parser)
	}

	return true
}

// Scan the directive name.
//
// Scope:
//      %YAML   1.1     # a comment \n
//       ^^^^
//      %TAG    !yaml!  tag:yaml.org,2002:  \n
//       ^^^
//
func yaml_parser_scan_directive_name(parser *yaml_parser_t, start_mark yaml_mark_t, name *[]byte) bool {
	// Consume the directive name.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}

	var s []byte
	for is_alpha(parser.buffer, parser.buffer_pos) {
		s = read(parser, s)
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}

	// Check if the name is empty.
	if len(s) == 0 {
		yaml_parser_set_scanner_error(parser, "while scanning a directive",
			start_mark, "could not find expected directive name")
		return false
	}

	// Check for an blank character after the name.
	if !is_blankz(parser.buffer, parser.buffer_pos) {
		yaml_parser_set_scanner_error(parser, "while scanning a directive",
			start_mark, "found unexpected non-alphabetical character")
		return false
	}
	*name = s
	return true
}

// Scan the value of VERSION-DIRECTIVE.
//
// Scope:
//      %YAML   1.1     # a comment \n
//           ^^^^^^
func yaml_parser_scan_version_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, major, minor *int8) bool {
	// Eat whitespaces.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}
	for is_blank(parser.buffer, parser.buffer_pos) {
		skip(parser)
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}

	// Consume the major version number.
	if !yaml_parser_scan_version_directive_number(parser, start_mark, major) {
		return false
	}

	// Eat '.'.
	if parser.buffer[parser.buffer_pos] != '.' {
		return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive",
			start_mark, "did not find expected digit or '.' character")
	}

	skip(parser)

	// Consume the minor version number.
	if !yaml_parser_scan_version_directive_number(parser, start_mark, minor) {
		return false
	}
	return true
}

const max_number_length = 2

// Scan the version number of VERSION-DIRECTIVE.
//
// Scope:
//      %YAML   1.1     # a comment \n
//              ^
//      %YAML   1.1     # a comment \n
//                ^
func yaml_parser_scan_version_directive_number(parser *yaml_parser_t, start_mark yaml_mark_t, number *int8) bool {

	// Repeat while the next character is digit.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}
	var value, length int8
	for is_digit(parser.buffer, parser.buffer_pos) {
		// Check if the number is too long.
		length++
		if length > max_number_length {
			return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive",
				start_mark, "found extremely long version number")
		}
		value = value*10 + int8(as_digit(parser.buffer, parser.buffer_pos))
		skip(parser)
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}

	// Check if the number was present.
	if length == 0 {
		return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive",
			start_mark, "did not find expected version number")
	}
	*number = value
	return true
}

// Scan the value of a TAG-DIRECTIVE token.
//
// Scope:
//      %TAG    !yaml!  tag:yaml.org,2002:  \n
//          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
func yaml_parser_scan_tag_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, handle, prefix *[]byte) bool {
	var handle_value, prefix_value []byte

	// Eat whitespaces.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}

	for is_blank(parser.buffer, parser.buffer_pos) {
		skip(parser)
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}

	// Scan a handle.
	if !yaml_parser_scan_tag_handle(parser, true, start_mark, &handle_value) {
		return false
	}

	// Expect a whitespace.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}
	if !is_blank(parser.buffer, parser.buffer_pos) {
		yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive",
			start_mark, "did not find expected whitespace")
		return false
	}

	// Eat whitespaces.
	for is_blank(parser.buffer, parser.buffer_pos) {
		skip(parser)
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}

	// Scan a prefix.
	if !yaml_parser_scan_tag_uri(parser, true, nil, start_mark, &prefix_value) {
		return false
	}

	// Expect a whitespace or line break.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}
	if !is_blankz(parser.buffer, parser.buffer_pos) {
		yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive",
			start_mark, "did not find expected whitespace or line break")
		return false
	}

	*handle = handle_value
	*prefix = prefix_value
	return true
}

func yaml_parser_scan_anchor(parser *yaml_parser_t, token *yaml_token_t, typ yaml_token_type_t) bool {
	var s []byte

	// Eat the indicator character.
	start_mark := parser.mark
	skip(parser)

	// Consume the value.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}

	for is_alpha(parser.buffer, parser.buffer_pos) {
		s = read(parser, s)
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}

	end_mark := parser.mark

	/*
	 * Check if length of the anchor is greater than 0 and it is followed by
	 * a whitespace character or one of the indicators:
	 *
	 *      '?', ':', ',', ']', '}', '%', '@', '`'.
	 */

	if len(s) == 0 ||
		!(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '?' ||
			parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == ',' ||
			parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '}' ||
			parser.buffer[parser.buffer_pos] == '%' || parser.buffer[parser.buffer_pos] == '@' ||
			parser.buffer[parser.buffer_pos] == '`') {
		context := "while scanning an alias"
		if typ == yaml_ANCHOR_TOKEN {
			context = "while scanning an anchor"
		}
		yaml_parser_set_scanner_error(parser, context, start_mark,
			"did not find expected alphabetic or numeric character")
		return false
	}

	// Create a token.
	*token = yaml_token_t{
		typ:        typ,
		start_mark: start_mark,
		end_mark:   end_mark,
		value:      s,
	}

	return true
}

/*
 * Scan a TAG token.
 */

func yaml_parser_scan_tag(parser *yaml_parser_t, token *yaml_token_t) bool {
	var handle, suffix []byte

	start_mark := parser.mark

	// Check if the tag is in the canonical form.
	if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
		return false
	}

	if parser.buffer[parser.buffer_pos+1] == '<' {
		// Keep the handle as ''

		// Eat '!<'
		skip(parser)
		skip(parser)

		// Consume the tag value.
		if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) {
			return false
		}

		// Check for '>' and eat it.
		if parser.buffer[parser.buffer_pos] != '>' {
			yaml_parser_set_scanner_error(parser, "while scanning a tag",
				start_mark, "did not find the expected '>'")
			return false
		}

		skip(parser)
	} else {
		// The tag has either the '!suffix' or the '!handle!suffix' form.

		// First, try to scan a handle.
		if !yaml_parser_scan_tag_handle(parser, false, start_mark, &handle) {
			return false
		}

		// Check if it is, indeed, handle.
		if handle[0] == '!' && len(handle) > 1 && handle[len(handle)-1] == '!' {
			// Scan the suffix now.
			if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) {
				return false
			}
		} else {
			// It wasn't a handle after all.  Scan the rest of the tag.
			if !yaml_parser_scan_tag_uri(parser, false, handle, start_mark, &suffix) {
				return false
			}

			// Set the handle to '!'.
			handle = []byte{'!'}

			// A special case: the '!' tag.  Set the handle to '' and the
			// suffix to '!'.
			if len(suffix) == 0 {
				handle, suffix = suffix, handle
			}
		}
	}

	// Check the character which ends the tag.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}
	if !is_blankz(parser.buffer, parser.buffer_pos) {
		yaml_parser_set_scanner_error(parser, "while scanning a tag",
			start_mark, "did not find expected whitespace or line break")
		return false
	}

	end_mark := parser.mark

	// Create a token.
	*token = yaml_token_t{
		typ:        yaml_TAG_TOKEN,
		start_mark: start_mark,
		end_mark:   end_mark,
		value:      handle,
		suffix:     suffix,
	}
	return true
}

// Scan a tag handle.
func yaml_parser_scan_tag_handle(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, handle *[]byte) bool {
	// Check the initial '!' character.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}
	if parser.buffer[parser.buffer_pos] != '!' {
		yaml_parser_set_scanner_tag_error(parser, directive,
			start_mark, "did not find expected '!'")
		return false
	}

	var s []byte

	// Copy the '!' character.
	s = read(parser, s)

	// Copy all subsequent alphabetical and numerical characters.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}
	for is_alpha(parser.buffer, parser.buffer_pos) {
		s = read(parser, s)
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}

	// Check if the trailing character is '!' and copy it.
	if parser.buffer[parser.buffer_pos] == '!' {
		s = read(parser, s)
	} else {
		// It's either the '!' tag or not really a tag handle.  If it's a %TAG
		// directive, it's an error.  If it's a tag token, it must be a part of URI.
		if directive && !(s[0] == '!' && s[1] == 0) {
			yaml_parser_set_scanner_tag_error(parser, directive,
				start_mark, "did not find expected '!'")
			return false
		}
	}

	*handle = s
	return true
}

// Scan a tag.
func yaml_parser_scan_tag_uri(parser *yaml_parser_t, directive bool, head []byte, start_mark yaml_mark_t, uri *[]byte) bool {
	//size_t length = head ? strlen((char *)head) : 0
	var s []byte

	// Copy the head if needed.
	//
	// Note that we don't copy the leading '!' character.
	if len(head) > 1 {
		s = append(s, head[1:]...)
	}

	// Scan the tag.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}

	// The set of characters that may appear in URI is as follows:
	//
	//      '0'-'9', 'A'-'Z', 'a'-'z', '_', '-', ';', '/', '?', ':', '@', '&',
	//      '=', '+', '$', ',', '.', '!', '~', '*', '\'', '(', ')', '[', ']',
	//      '%'.
	// [Go] Convert this into more reasonable logic.
	for is_alpha(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == ';' ||
		parser.buffer[parser.buffer_pos] == '/' || parser.buffer[parser.buffer_pos] == '?' ||
		parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == '@' ||
		parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '=' ||
		parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '$' ||
		parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '.' ||
		parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '~' ||
		parser.buffer[parser.buffer_pos] == '*' || parser.buffer[parser.buffer_pos] == '\'' ||
		parser.buffer[parser.buffer_pos] == '(' || parser.buffer[parser.buffer_pos] == ')' ||
		parser.buffer[parser.buffer_pos] == '[' || parser.buffer[parser.buffer_pos] == ']' ||
		parser.buffer[parser.buffer_pos] == '%' {
		// Check if it is a URI-escape sequence.
		if parser.buffer[parser.buffer_pos] == '%' {
			if !yaml_parser_scan_uri_escapes(parser, directive, start_mark, &s) {
				return false
			}
		} else {
			s = read(parser, s)
		}
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}

	// Check if the tag is non-empty.
	if len(s) == 0 {
		yaml_parser_set_scanner_tag_error(parser, directive,
			start_mark, "did not find expected tag URI")
		return false
	}
	*uri = s
	return true
}

// Decode an URI-escape sequence corresponding to a single UTF-8 character.
func yaml_parser_scan_uri_escapes(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, s *[]byte) bool {

	// Decode the required number of characters.
	w := 1024
	for w > 0 {
		// Check for a URI-escaped octet.
		if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) {
			return false
		}

		if !(parser.buffer[parser.buffer_pos] == '%' &&
			is_hex(parser.buffer, parser.buffer_pos+1) &&
			is_hex(parser.buffer, parser.buffer_pos+2)) {
			return yaml_parser_set_scanner_tag_error(parser, directive,
				start_mark, "did not find URI escaped octet")
		}

		// Get the octet.
		octet := byte((as_hex(parser.buffer, parser.buffer_pos+1) << 4) + as_hex(parser.buffer, parser.buffer_pos+2))

		// If it is the leading octet, determine the length of the UTF-8 sequence.
		if w == 1024 {
			w = width(octet)
			if w == 0 {
				return yaml_parser_set_scanner_tag_error(parser, directive,
					start_mark, "found an incorrect leading UTF-8 octet")
			}
		} else {
			// Check if the trailing octet is correct.
			if octet&0xC0 != 0x80 {
				return yaml_parser_set_scanner_tag_error(parser, directive,
					start_mark, "found an incorrect trailing UTF-8 octet")
			}
		}

		// Copy the octet and move the pointers.
		*s = append(*s, octet)
		skip(parser)
		skip(parser)
		skip(parser)
		w--
	}
	return true
}

// Scan a block scalar.
func yaml_parser_scan_block_scalar(parser *yaml_parser_t, token *yaml_token_t, literal bool) bool {
	// Eat the indicator '|' or '>'.
	start_mark := parser.mark
	skip(parser)

	// Scan the additional block scalar indicators.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}

	// Check for a chomping indicator.
	var chomping, increment int
	if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' {
		// Set the chomping method and eat the indicator.
		if parser.buffer[parser.buffer_pos] == '+' {
			chomping = +1
		} else {
			chomping = -1
		}
		skip(parser)

		// Check for an indentation indicator.
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
		if is_digit(parser.buffer, parser.buffer_pos) {
			// Check that the intendation is greater than 0.
			if parser.buffer[parser.buffer_pos] == '0' {
				yaml_parser_set_scanner_error(parser, "while scanning a block scalar",
					start_mark, "found an intendation indicator equal to 0")
				return false
			}

			// Get the intendation level and eat the indicator.
			increment = as_digit(parser.buffer, parser.buffer_pos)
			skip(parser)
		}

	} else if is_digit(parser.buffer, parser.buffer_pos) {
		// Do the same as above, but in the opposite order.

		if parser.buffer[parser.buffer_pos] == '0' {
			yaml_parser_set_scanner_error(parser, "while scanning a block scalar",
				start_mark, "found an intendation indicator equal to 0")
			return false
		}
		increment = as_digit(parser.buffer, parser.buffer_pos)
		skip(parser)

		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
		if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' {
			if parser.buffer[parser.buffer_pos] == '+' {
				chomping = +1
			} else {
				chomping = -1
			}
			skip(parser)
		}
	}

	// Eat whitespaces and comments to the end of the line.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}
	for is_blank(parser.buffer, parser.buffer_pos) {
		skip(parser)
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}
	if parser.buffer[parser.buffer_pos] == '#' {
		for !is_breakz(parser.buffer, parser.buffer_pos) {
			skip(parser)
			if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
				return false
			}
		}
	}

	// Check if we are at the end of the line.
	if !is_breakz(parser.buffer, parser.buffer_pos) {
		yaml_parser_set_scanner_error(parser, "while scanning a block scalar",
			start_mark, "did not find expected comment or line break")
		return false
	}

	// Eat a line break.
	if is_break(parser.buffer, parser.buffer_pos) {
		if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
			return false
		}
		skip_line(parser)
	}

	end_mark := parser.mark

	// Set the intendation level if it was specified.
	var indent int
	if increment > 0 {
		if parser.indent >= 0 {
			indent = parser.indent + increment
		} else {
			indent = increment
		}
	}

	// Scan the leading line breaks and determine the indentation level if needed.
	var s, leading_break, trailing_breaks []byte
	if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) {
		return false
	}

	// Scan the block scalar content.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}
	var leading_blank, trailing_blank bool
	for parser.mark.column == indent && !is_z(parser.buffer, parser.buffer_pos) {
		// We are at the beginning of a non-empty line.

		// Is it a trailing whitespace?
		trailing_blank = is_blank(parser.buffer, parser.buffer_pos)

		// Check if we need to fold the leading line break.
		if !literal && !leading_blank && !trailing_blank && len(leading_break) > 0 && leading_break[0] == '\n' {
			// Do we need to join the lines by space?
			if len(trailing_breaks) == 0 {
				s = append(s, ' ')
			}
		} else {
			s = append(s, leading_break...)
		}
		leading_break = leading_break[:0]

		// Append the remaining line breaks.
		s = append(s, trailing_breaks...)
		trailing_breaks = trailing_breaks[:0]

		// Is it a leading whitespace?
		leading_blank = is_blank(parser.buffer, parser.buffer_pos)

		// Consume the current line.
		for !is_breakz(parser.buffer, parser.buffer_pos) {
			s = read(parser, s)
			if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
				return false
			}
		}

		// Consume the line break.
		if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
			return false
		}

		leading_break = read_line(parser, leading_break)

		// Eat the following intendation spaces and line breaks.
		if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) {
			return false
		}
	}

	// Chomp the tail.
	if chomping != -1 {
		s = append(s, leading_break...)
	}
	if chomping == 1 {
		s = append(s, trailing_breaks...)
	}

	// Create a token.
	*token = yaml_token_t{
		typ:        yaml_SCALAR_TOKEN,
		start_mark: start_mark,
		end_mark:   end_mark,
		value:      s,
		style:      yaml_LITERAL_SCALAR_STYLE,
	}
	if !literal {
		token.style = yaml_FOLDED_SCALAR_STYLE
	}
	return true
}

// Scan intendation spaces and line breaks for a block scalar.  Determine the
// intendation level if needed.
func yaml_parser_scan_block_scalar_breaks(parser *yaml_parser_t, indent *int, breaks *[]byte, start_mark yaml_mark_t, end_mark *yaml_mark_t) bool {
	*end_mark = parser.mark

	// Eat the intendation spaces and line breaks.
	max_indent := 0
	for {
		// Eat the intendation spaces.
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
		for (*indent == 0 || parser.mark.column < *indent) && is_space(parser.buffer, parser.buffer_pos) {
			skip(parser)
			if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
				return false
			}
		}
		if parser.mark.column > max_indent {
			max_indent = parser.mark.column
		}

		// Check for a tab character messing the intendation.
		if (*indent == 0 || parser.mark.column < *indent) && is_tab(parser.buffer, parser.buffer_pos) {
			return yaml_parser_set_scanner_error(parser, "while scanning a block scalar",
				start_mark, "found a tab character where an intendation space is expected")
		}

		// Have we found a non-empty line?
		if !is_break(parser.buffer, parser.buffer_pos) {
			break
		}

		// Consume the line break.
		if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
			return false
		}
		// [Go] Should really be returning breaks instead.
		*breaks = read_line(parser, *breaks)
		*end_mark = parser.mark
	}

	// Determine the indentation level if needed.
	if *indent == 0 {
		*indent = max_indent
		if *indent < parser.indent+1 {
			*indent = parser.indent + 1
		}
		if *indent < 1 {
			*indent = 1
		}
	}
	return true
}

// Scan a quoted scalar.
func yaml_parser_scan_flow_scalar(parser *yaml_parser_t, token *yaml_token_t, single bool) bool {
	// Eat the left quote.
	start_mark := parser.mark
	skip(parser)

	// Consume the content of the quoted scalar.
	var s, leading_break, trailing_breaks, whitespaces []byte
	for {
		// Check that there are no document indicators at the beginning of the line.
		if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) {
			return false
		}

		if parser.mark.column == 0 &&
			((parser.buffer[parser.buffer_pos+0] == '-' &&
				parser.buffer[parser.buffer_pos+1] == '-' &&
				parser.buffer[parser.buffer_pos+2] == '-') ||
				(parser.buffer[parser.buffer_pos+0] == '.' &&
					parser.buffer[parser.buffer_pos+1] == '.' &&
					parser.buffer[parser.buffer_pos+2] == '.')) &&
			is_blankz(parser.buffer, parser.buffer_pos+3) {
			yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar",
				start_mark, "found unexpected document indicator")
			return false
		}

		// Check for EOF.
		if is_z(parser.buffer, parser.buffer_pos) {
			yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar",
				start_mark, "found unexpected end of stream")
			return false
		}

		// Consume non-blank characters.
		leading_blanks := false
		for !is_blankz(parser.buffer, parser.buffer_pos) {
			if single && parser.buffer[parser.buffer_pos] == '\'' && parser.buffer[parser.buffer_pos+1] == '\'' {
				// Is is an escaped single quote.
				s = append(s, '\'')
				skip(parser)
				skip(parser)

			} else if single && parser.buffer[parser.buffer_pos] == '\'' {
				// It is a right single quote.
				break
			} else if !single && parser.buffer[parser.buffer_pos] == '"' {
				// It is a right double quote.
				break

			} else if !single && parser.buffer[parser.buffer_pos] == '\\' && is_break(parser.buffer, parser.buffer_pos+1) {
				// It is an escaped line break.
				if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) {
					return false
				}
				skip(parser)
				skip_line(parser)
				leading_blanks = true
				break

			} else if !single && parser.buffer[parser.buffer_pos] == '\\' {
				// It is an escape sequence.
				code_length := 0

				// Check the escape character.
				switch parser.buffer[parser.buffer_pos+1] {
				case '0':
					s = append(s, 0)
				case 'a':
					s = append(s, '\x07')
				case 'b':
					s = append(s, '\x08')
				case 't', '\t':
					s = append(s, '\x09')
				case 'n':
					s = append(s, '\x0A')
				case 'v':
					s = append(s, '\x0B')
				case 'f':
					s = append(s, '\x0C')
				case 'r':
					s = append(s, '\x0D')
				case 'e':
					s = append(s, '\x1B')
				case ' ':
					s = append(s, '\x20')
				case '"':
					s = append(s, '"')
				case '\'':
					s = append(s, '\'')
				case '\\':
					s = append(s, '\\')
				case 'N': // NEL (#x85)
					s = append(s, '\xC2')
					s = append(s, '\x85')
				case '_': // #xA0
					s = append(s, '\xC2')
					s = append(s, '\xA0')
				case 'L': // LS (#x2028)
					s = append(s, '\xE2')
					s = append(s, '\x80')
					s = append(s, '\xA8')
				case 'P': // PS (#x2029)
					s = append(s, '\xE2')
					s = append(s, '\x80')
					s = append(s, '\xA9')
				case 'x':
					code_length = 2
				case 'u':
					code_length = 4
				case 'U':
					code_length = 8
				default:
					yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar",
						start_mark, "found unknown escape character")
					return false
				}

				skip(parser)
				skip(parser)

				// Consume an arbitrary escape code.
				if code_length > 0 {
					var value int

					// Scan the character value.
					if parser.unread < code_length && !yaml_parser_update_buffer(parser, code_length) {
						return false
					}
					for k := 0; k < code_length; k++ {
						if !is_hex(parser.buffer, parser.buffer_pos+k) {
							yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar",
								start_mark, "did not find expected hexdecimal number")
							return false
						}
						value = (value << 4) + as_hex(parser.buffer, parser.buffer_pos+k)
					}

					// Check the value and write the character.
					if (value >= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF {
						yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar",
							start_mark, "found invalid Unicode character escape code")
						return false
					}
					if value <= 0x7F {
						s = append(s, byte(value))
					} else if value <= 0x7FF {
						s = append(s, byte(0xC0+(value>>6)))
						s = append(s, byte(0x80+(value&0x3F)))
					} else if value <= 0xFFFF {
						s = append(s, byte(0xE0+(value>>12)))
						s = append(s, byte(0x80+((value>>6)&0x3F)))
						s = append(s, byte(0x80+(value&0x3F)))
					} else {
						s = append(s, byte(0xF0+(value>>18)))
						s = append(s, byte(0x80+((value>>12)&0x3F)))
						s = append(s, byte(0x80+((value>>6)&0x3F)))
						s = append(s, byte(0x80+(value&0x3F)))
					}

					// Advance the pointer.
					for k := 0; k < code_length; k++ {
						skip(parser)
					}
				}
			} else {
				// It is a non-escaped non-blank character.
				s = read(parser, s)
			}
			if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
				return false
			}
		}

		// Check if we are at the end of the scalar.
		if single {
			if parser.buffer[parser.buffer_pos] == '\'' {
				break
			}
		} else {
			if parser.buffer[parser.buffer_pos] == '"' {
				break
			}
		}

		// Consume blank characters.
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}

		for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) {
			if is_blank(parser.buffer, parser.buffer_pos) {
				// Consume a space or a tab character.
				if !leading_blanks {
					whitespaces = read(parser, whitespaces)
				} else {
					skip(parser)
				}
			} else {
				if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
					return false
				}

				// Check if it is a first line break.
				if !leading_blanks {
					whitespaces = whitespaces[:0]
					leading_break = read_line(parser, leading_break)
					leading_blanks = true
				} else {
					trailing_breaks = read_line(parser, trailing_breaks)
				}
			}
			if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
				return false
			}
		}

		// Join the whitespaces or fold line breaks.
		if leading_blanks {
			// Do we need to fold line breaks?
			if len(leading_break) > 0 && leading_break[0] == '\n' {
				if len(trailing_breaks) == 0 {
					s = append(s, ' ')
				} else {
					s = append(s, trailing_breaks...)
				}
			} else {
				s = append(s, leading_break...)
				s = append(s, trailing_breaks...)
			}
			trailing_breaks = trailing_breaks[:0]
			leading_break = leading_break[:0]
		} else {
			s = append(s, whitespaces...)
			whitespaces = whitespaces[:0]
		}
	}

	// Eat the right quote.
	skip(parser)
	end_mark := parser.mark

	// Create a token.
	*token = yaml_token_t{
		typ:        yaml_SCALAR_TOKEN,
		start_mark: start_mark,
		end_mark:   end_mark,
		value:      s,
		style:      yaml_SINGLE_QUOTED_SCALAR_STYLE,
	}
	if !single {
		token.style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
	}
	return true
}

// Scan a plain scalar.
func yaml_parser_scan_plain_scalar(parser *yaml_parser_t, token *yaml_token_t) bool {

	var s, leading_break, trailing_breaks, whitespaces []byte
	var leading_blanks bool
	var indent = parser.indent + 1

	start_mark := parser.mark
	end_mark := parser.mark

	// Consume the content of the plain scalar.
	for {
		// Check for a document indicator.
		if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) {
			return false
		}
		if parser.mark.column == 0 &&
			((parser.buffer[parser.buffer_pos+0] == '-' &&
				parser.buffer[parser.buffer_pos+1] == '-' &&
				parser.buffer[parser.buffer_pos+2] == '-') ||
				(parser.buffer[parser.buffer_pos+0] == '.' &&
					parser.buffer[parser.buffer_pos+1] == '.' &&
					parser.buffer[parser.buffer_pos+2] == '.')) &&
			is_blankz(parser.buffer, parser.buffer_pos+3) {
			break
		}

		// Check for a comment.
		if parser.buffer[parser.buffer_pos] == '#' {
			break
		}

		// Consume non-blank characters.
		for !is_blankz(parser.buffer, parser.buffer_pos) {

			// Check for 'x:x' in the flow context. TODO: Fix the test "spec-08-13".
			if parser.flow_level > 0 &&
				parser.buffer[parser.buffer_pos] == ':' &&
				!is_blankz(parser.buffer, parser.buffer_pos+1) {
				yaml_parser_set_scanner_error(parser, "while scanning a plain scalar",
					start_mark, "found unexpected ':'")
				return false
			}

			// Check for indicators that may end a plain scalar.
			if (parser.buffer[parser.buffer_pos] == ':' && is_blankz(parser.buffer, parser.buffer_pos+1)) ||
				(parser.flow_level > 0 &&
					(parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == ':' ||
						parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == '[' ||
						parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' ||
						parser.buffer[parser.buffer_pos] == '}')) {
				break
			}

			// Check if we need to join whitespaces and breaks.
			if leading_blanks || len(whitespaces) > 0 {
				if leading_blanks {
					// Do we need to fold line breaks?
					if leading_break[0] == '\n' {
						if len(trailing_breaks) == 0 {
							s = append(s, ' ')
						} else {
							s = append(s, trailing_breaks...)
						}
					} else {
						s = append(s, leading_break...)
						s = append(s, trailing_breaks...)
					}
					trailing_breaks = trailing_breaks[:0]
					leading_break = leading_break[:0]
					leading_blanks = false
				} else {
					s = append(s, whitespaces...)
					whitespaces = whitespaces[:0]
				}
			}

			// Copy the character.
			s = read(parser, s)

			end_mark = parser.mark
			if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
				return false
			}
		}

		// Is it the end?
		if !(is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos)) {
			break
		}

		// Consume blank characters.
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}

		for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) {
			if is_blank(parser.buffer, parser.buffer_pos) {

				// Check for tab character that abuse intendation.
				if leading_blanks && parser.mark.column < indent && is_tab(parser.buffer, parser.buffer_pos) {
					yaml_parser_set_scanner_error(parser, "while scanning a plain scalar",
						start_mark, "found a tab character that violate intendation")
					return false
				}

				// Consume a space or a tab character.
				if !leading_blanks {
					whitespaces = read(parser, whitespaces)
				} else {
					skip(parser)
				}
			} else {
				if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
					return false
				}

				// Check if it is a first line break.
				if !leading_blanks {
					whitespaces = whitespaces[:0]
					leading_break = read_line(parser, leading_break)
					leading_blanks = true
				} else {
					trailing_breaks = read_line(parser, trailing_breaks)
				}
			}
			if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
				return false
			}
		}

		// Check intendation level.
		if parser.flow_level == 0 && parser.mark.column < indent {
			break
		}
	}

	// Create a token.
	*token = yaml_token_t{
		typ:        yaml_SCALAR_TOKEN,
		start_mark: start_mark,
		end_mark:   end_mark,
		value:      s,
		style:      yaml_PLAIN_SCALAR_STYLE,
	}

	// Note that we change the 'simple_key_allowed' flag.
	if leading_blanks {
		parser.simple_key_allowed = true
	}
	return true
}
 07070100000FEB000081A4000000000000000000000001645E367C000009AC000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v1/sorter.go package yaml

import (
	"reflect"
	"unicode"
)

type keyList []reflect.Value

func (l keyList) Len() int      { return len(l) }
func (l keyList) Swap(i, j int) { l[i], l[j] = l[j], l[i] }
func (l keyList) Less(i, j int) bool {
	a := l[i]
	b := l[j]
	ak := a.Kind()
	bk := b.Kind()
	for (ak == reflect.Interface || ak == reflect.Ptr) && !a.IsNil() {
		a = a.Elem()
		ak = a.Kind()
	}
	for (bk == reflect.Interface || bk == reflect.Ptr) && !b.IsNil() {
		b = b.Elem()
		bk = b.Kind()
	}
	af, aok := keyFloat(a)
	bf, bok := keyFloat(b)
	if aok && bok {
		if af != bf {
			return af < bf
		}
		if ak != bk {
			return ak < bk
		}
		return numLess(a, b)
	}
	if ak != reflect.String || bk != reflect.String {
		return ak < bk
	}
	ar, br := []rune(a.String()), []rune(b.String())
	for i := 0; i < len(ar) && i < len(br); i++ {
		if ar[i] == br[i] {
			continue
		}
		al := unicode.IsLetter(ar[i])
		bl := unicode.IsLetter(br[i])
		if al && bl {
			return ar[i] < br[i]
		}
		if al || bl {
			return bl
		}
		var ai, bi int
		var an, bn int64
		for ai = i; ai < len(ar) && unicode.IsDigit(ar[ai]); ai++ {
			an = an*10 + int64(ar[ai]-'0')
		}
		for bi = i; bi < len(br) && unicode.IsDigit(br[bi]); bi++ {
			bn = bn*10 + int64(br[bi]-'0')
		}
		if an != bn {
			return an < bn
		}
		if ai != bi {
			return ai < bi
		}
		return ar[i] < br[i]
	}
	return len(ar) < len(br)
}

// keyFloat returns a float value for v if it is a number/bool
// and whether it is a number/bool or not.
func keyFloat(v reflect.Value) (f float64, ok bool) {
	switch v.Kind() {
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		return float64(v.Int()), true
	case reflect.Float32, reflect.Float64:
		return v.Float(), true
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		return float64(v.Uint()), true
	case reflect.Bool:
		if v.Bool() {
			return 1, true
		}
		return 0, true
	}
	return 0, false
}

// numLess returns whether a < b.
// a and b must necessarily have the same kind.
func numLess(a, b reflect.Value) bool {
	switch a.Kind() {
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		return a.Int() < b.Int()
	case reflect.Float32, reflect.Float64:
		return a.Float() < b.Float()
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		return a.Uint() < b.Uint()
	case reflect.Bool:
		return !a.Bool() && b.Bool()
	}
	panic("not a number")
}
07070100000FEC000081A4000000000000000000000001645E367C00000983000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v1/writerc.go    package yaml

// Set the writer error and return false.
func yaml_emitter_set_writer_error(emitter *yaml_emitter_t, problem string) bool {
	emitter.error = yaml_WRITER_ERROR
	emitter.problem = problem
	return false
}

// Flush the output buffer.
func yaml_emitter_flush(emitter *yaml_emitter_t) bool {
	if emitter.write_handler == nil {
		panic("write handler not set")
	}

	// Check if the buffer is empty.
	if emitter.buffer_pos == 0 {
		return true
	}

	// If the output encoding is UTF-8, we don't need to recode the buffer.
	if emitter.encoding == yaml_UTF8_ENCODING {
		if err := emitter.write_handler(emitter, emitter.buffer[:emitter.buffer_pos]); err != nil {
			return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error())
		}
		emitter.buffer_pos = 0
		return true
	}

	// Recode the buffer into the raw buffer.
	var low, high int
	if emitter.encoding == yaml_UTF16LE_ENCODING {
		low, high = 0, 1
	} else {
		high, low = 1, 0
	}

	pos := 0
	for pos < emitter.buffer_pos {
		// See the "reader.c" code for more details on UTF-8 encoding.  Note
		// that we assume that the buffer contains a valid UTF-8 sequence.

		// Read the next UTF-8 character.
		octet := emitter.buffer[pos]

		var w int
		var value rune
		switch {
		case octet&0x80 == 0x00:
			w, value = 1, rune(octet&0x7F)
		case octet&0xE0 == 0xC0:
			w, value = 2, rune(octet&0x1F)
		case octet&0xF0 == 0xE0:
			w, value = 3, rune(octet&0x0F)
		case octet&0xF8 == 0xF0:
			w, value = 4, rune(octet&0x07)
		}
		for k := 1; k < w; k++ {
			octet = emitter.buffer[pos+k]
			value = (value << 6) + (rune(octet) & 0x3F)
		}
		pos += w

		// Write the character.
		if value < 0x10000 {
			var b [2]byte
			b[high] = byte(value >> 8)
			b[low] = byte(value & 0xFF)
			emitter.raw_buffer = append(emitter.raw_buffer, b[0], b[1])
		} else {
			// Write the character using a surrogate pair (check "reader.c").
			var b [4]byte
			value -= 0x10000
			b[high] = byte(0xD8 + (value >> 18))
			b[low] = byte((value >> 10) & 0xFF)
			b[high+2] = byte(0xDC + ((value >> 8) & 0xFF))
			b[low+2] = byte(value & 0xFF)
			emitter.raw_buffer = append(emitter.raw_buffer, b[0], b[1], b[2], b[3])
		}
	}

	// Write the raw buffer.
	if err := emitter.write_handler(emitter, emitter.raw_buffer); err != nil {
		return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error())
	}
	emitter.buffer_pos = 0
	emitter.raw_buffer = emitter.raw_buffer[:0]
	return true
}
 07070100000FED000081A4000000000000000000000001645E367C000021D6000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v1/yaml.go   // Package yaml implements YAML support for the Go language.
//
// Source code and other details for the project are available at GitHub:
//
//   https://github.com/go-yaml/yaml
//
package yaml

import (
	"errors"
	"fmt"
	"reflect"
	"strings"
	"sync"
)

type yamlError string

func fail(msg string) {
	panic(yamlError(msg))
}

func handleErr(err *error) {
	if r := recover(); r != nil {
		if e, ok := r.(yamlError); ok {
			*err = errors.New("YAML error: " + string(e))
		} else {
			panic(r)
		}
	}
}

// The Setter interface may be implemented by types to do their own custom
// unmarshalling of YAML values, rather than being implicitly assigned by
// the yaml package machinery. If setting the value works, the method should
// return true.  If it returns false, the value is considered unsupported
// and is omitted from maps and slices.
type Setter interface {
	SetYAML(tag string, value interface{}) bool
}

// The Getter interface is implemented by types to do their own custom
// marshalling into a YAML tag and value.
type Getter interface {
	GetYAML() (tag string, value interface{})
}

// Unmarshal decodes the first document found within the in byte slice
// and assigns decoded values into the out value.
//
// Maps and pointers (to a struct, string, int, etc) are accepted as out
// values.  If an internal pointer within a struct is not initialized,
// the yaml package will initialize it if necessary for unmarshalling
// the provided data. The out parameter must not be nil.
//
// The type of the decoded values and the type of out will be considered,
// and Unmarshal will do the best possible job to unmarshal values
// appropriately.  It is NOT considered an error, though, to skip values
// because they are not available in the decoded YAML, or if they are not
// compatible with the out value. To ensure something was properly
// unmarshaled use a map or compare against the previous value for the
// field (usually the zero value).
//
// Struct fields are only unmarshalled if they are exported (have an
// upper case first letter), and are unmarshalled using the field name
// lowercased as the default key. Custom keys may be defined via the
// "yaml" name in the field tag: the content preceding the first comma
// is used as the key, and the following comma-separated options are
// used to tweak the marshalling process (see Marshal).
// Conflicting names result in a runtime error.
//
// For example:
//
//     type T struct {
//         F int `yaml:"a,omitempty"`
//         B int
//     }
//     var t T
//     yaml.Unmarshal([]byte("a: 1\nb: 2"), &t)
//
// See the documentation of Marshal for the format of tags and a list of
// supported tag options.
//
func Unmarshal(in []byte, out interface{}) (err error) {
	defer handleErr(&err)
	d := newDecoder()
	p := newParser(in)
	defer p.destroy()
	node := p.parse()
	if node != nil {
		v := reflect.ValueOf(out)
		if v.Kind() == reflect.Ptr && !v.IsNil() {
			v = v.Elem()
		}
		d.unmarshal(node, v)
	}
	return nil
}

// Marshal serializes the value provided into a YAML document. The structure
// of the generated document will reflect the structure of the value itself.
// Maps and pointers (to struct, string, int, etc) are accepted as the in value.
//
// Struct fields are only unmarshalled if they are exported (have an upper case
// first letter), and are unmarshalled using the field name lowercased as the
// default key. Custom keys may be defined via the "yaml" name in the field
// tag: the content preceding the first comma is used as the key, and the
// following comma-separated options are used to tweak the marshalling process.
// Conflicting names result in a runtime error.
//
// The field tag format accepted is:
//
//     `(...) yaml:"[<key>][,<flag1>[,<flag2>]]" (...)`
//
// The following flags are currently supported:
//
//     omitempty    Only include the field if it's not set to the zero
//                  value for the type or to empty slices or maps.
//                  Does not apply to zero valued structs.
//
//     flow         Marshal using a flow style (useful for structs,
//                  sequences and maps.
//
//     inline       Inline the struct it's applied to, so its fields
//                  are processed as if they were part of the outer
//                  struct.
//
// In addition, if the key is "-", the field is ignored.
//
// For example:
//
//     type T struct {
//         F int "a,omitempty"
//         B int
//     }
//     yaml.Marshal(&T{B: 2}) // Returns "b: 2\n"
//     yaml.Marshal(&T{F: 1}} // Returns "a: 1\nb: 0\n"
//
func Marshal(in interface{}) (out []byte, err error) {
	defer handleErr(&err)
	e := newEncoder()
	defer e.destroy()
	e.marshal("", reflect.ValueOf(in))
	e.finish()
	out = e.out
	return
}

// --------------------------------------------------------------------------
// Maintain a mapping of keys to structure field indexes

// The code in this section was copied from mgo/bson.

// structInfo holds details for the serialization of fields of
// a given struct.
type structInfo struct {
	FieldsMap  map[string]fieldInfo
	FieldsList []fieldInfo

	// InlineMap is the number of the field in the struct that
	// contains an ,inline map, or -1 if there's none.
	InlineMap int
}

type fieldInfo struct {
	Key       string
	Num       int
	OmitEmpty bool
	Flow      bool

	// Inline holds the field index if the field is part of an inlined struct.
	Inline []int
}

var structMap = make(map[reflect.Type]*structInfo)
var fieldMapMutex sync.RWMutex

func getStructInfo(st reflect.Type) (*structInfo, error) {
	fieldMapMutex.RLock()
	sinfo, found := structMap[st]
	fieldMapMutex.RUnlock()
	if found {
		return sinfo, nil
	}

	n := st.NumField()
	fieldsMap := make(map[string]fieldInfo)
	fieldsList := make([]fieldInfo, 0, n)
	inlineMap := -1
	for i := 0; i != n; i++ {
		field := st.Field(i)
		if field.PkgPath != "" {
			continue // Private field
		}

		info := fieldInfo{Num: i}

		tag := field.Tag.Get("yaml")
		if tag == "" && strings.Index(string(field.Tag), ":") < 0 {
			tag = string(field.Tag)
		}
		if tag == "-" {
			continue
		}

		inline := false
		fields := strings.Split(tag, ",")
		if len(fields) > 1 {
			for _, flag := range fields[1:] {
				switch flag {
				case "omitempty":
					info.OmitEmpty = true
				case "flow":
					info.Flow = true
				case "inline":
					inline = true
				default:
					return nil, errors.New(fmt.Sprintf("Unsupported flag %q in tag %q of type %s", flag, tag, st))
				}
			}
			tag = fields[0]
		}

		if inline {
			switch field.Type.Kind() {
			// TODO: Implement support for inline maps.
			//case reflect.Map:
			//	if inlineMap >= 0 {
			//		return nil, errors.New("Multiple ,inline maps in struct " + st.String())
			//	}
			//	if field.Type.Key() != reflect.TypeOf("") {
			//		return nil, errors.New("Option ,inline needs a map with string keys in struct " + st.String())
			//	}
			//	inlineMap = info.Num
			case reflect.Struct:
				sinfo, err := getStructInfo(field.Type)
				if err != nil {
					return nil, err
				}
				for _, finfo := range sinfo.FieldsList {
					if _, found := fieldsMap[finfo.Key]; found {
						msg := "Duplicated key '" + finfo.Key + "' in struct " + st.String()
						return nil, errors.New(msg)
					}
					if finfo.Inline == nil {
						finfo.Inline = []int{i, finfo.Num}
					} else {
						finfo.Inline = append([]int{i}, finfo.Inline...)
					}
					fieldsMap[finfo.Key] = finfo
					fieldsList = append(fieldsList, finfo)
				}
			default:
				//return nil, errors.New("Option ,inline needs a struct value or map field")
				return nil, errors.New("Option ,inline needs a struct value field")
			}
			continue
		}

		if tag != "" {
			info.Key = tag
		} else {
			info.Key = strings.ToLower(field.Name)
		}

		if _, found = fieldsMap[info.Key]; found {
			msg := "Duplicated key '" + info.Key + "' in struct " + st.String()
			return nil, errors.New(msg)
		}

		fieldsList = append(fieldsList, info)
		fieldsMap[info.Key] = info
	}

	sinfo = &structInfo{fieldsMap, fieldsList, inlineMap}

	fieldMapMutex.Lock()
	structMap[st] = sinfo
	fieldMapMutex.Unlock()
	return sinfo, nil
}

func isZero(v reflect.Value) bool {
	switch v.Kind() {
	case reflect.String:
		return len(v.String()) == 0
	case reflect.Interface, reflect.Ptr:
		return v.IsNil()
	case reflect.Slice:
		return v.Len() == 0
	case reflect.Map:
		return v.Len() == 0
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		return v.Int() == 0
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		return v.Uint() == 0
	case reflect.Bool:
		return !v.Bool()
	}
	return false
}
  07070100000FEE000081A4000000000000000000000001645E367C00006340000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v1/yamlh.go  package yaml

import (
	"io"
)

// The version directive data.
type yaml_version_directive_t struct {
	major int8 // The major version number.
	minor int8 // The minor version number.
}

// The tag directive data.
type yaml_tag_directive_t struct {
	handle []byte // The tag handle.
	prefix []byte // The tag prefix.
}

type yaml_encoding_t int

// The stream encoding.
const (
	// Let the parser choose the encoding.
	yaml_ANY_ENCODING yaml_encoding_t = iota

	yaml_UTF8_ENCODING    // The default UTF-8 encoding.
	yaml_UTF16LE_ENCODING // The UTF-16-LE encoding with BOM.
	yaml_UTF16BE_ENCODING // The UTF-16-BE encoding with BOM.
)

type yaml_break_t int

// Line break types.
const (
	// Let the parser choose the break type.
	yaml_ANY_BREAK yaml_break_t = iota

	yaml_CR_BREAK   // Use CR for line breaks (Mac style).
	yaml_LN_BREAK   // Use LN for line breaks (Unix style).
	yaml_CRLN_BREAK // Use CR LN for line breaks (DOS style).
)

type yaml_error_type_t int

// Many bad things could happen with the parser and emitter.
const (
	// No error is produced.
	yaml_NO_ERROR yaml_error_type_t = iota

	yaml_MEMORY_ERROR   // Cannot allocate or reallocate a block of memory.
	yaml_READER_ERROR   // Cannot read or decode the input stream.
	yaml_SCANNER_ERROR  // Cannot scan the input stream.
	yaml_PARSER_ERROR   // Cannot parse the input stream.
	yaml_COMPOSER_ERROR // Cannot compose a YAML document.
	yaml_WRITER_ERROR   // Cannot write to the output stream.
	yaml_EMITTER_ERROR  // Cannot emit a YAML stream.
)

// The pointer position.
type yaml_mark_t struct {
	index  int // The position index.
	line   int // The position line.
	column int // The position column.
}

// Node Styles

type yaml_style_t int8

type yaml_scalar_style_t yaml_style_t

// Scalar styles.
const (
	// Let the emitter choose the style.
	yaml_ANY_SCALAR_STYLE yaml_scalar_style_t = iota

	yaml_PLAIN_SCALAR_STYLE         // The plain scalar style.
	yaml_SINGLE_QUOTED_SCALAR_STYLE // The single-quoted scalar style.
	yaml_DOUBLE_QUOTED_SCALAR_STYLE // The double-quoted scalar style.
	yaml_LITERAL_SCALAR_STYLE       // The literal scalar style.
	yaml_FOLDED_SCALAR_STYLE        // The folded scalar style.
)

type yaml_sequence_style_t yaml_style_t

// Sequence styles.
const (
	// Let the emitter choose the style.
	yaml_ANY_SEQUENCE_STYLE yaml_sequence_style_t = iota

	yaml_BLOCK_SEQUENCE_STYLE // The block sequence style.
	yaml_FLOW_SEQUENCE_STYLE  // The flow sequence style.
)

type yaml_mapping_style_t yaml_style_t

// Mapping styles.
const (
	// Let the emitter choose the style.
	yaml_ANY_MAPPING_STYLE yaml_mapping_style_t = iota

	yaml_BLOCK_MAPPING_STYLE // The block mapping style.
	yaml_FLOW_MAPPING_STYLE  // The flow mapping style.
)

// Tokens

type yaml_token_type_t int

// Token types.
const (
	// An empty token.
	yaml_NO_TOKEN yaml_token_type_t = iota

	yaml_STREAM_START_TOKEN // A STREAM-START token.
	yaml_STREAM_END_TOKEN   // A STREAM-END token.

	yaml_VERSION_DIRECTIVE_TOKEN // A VERSION-DIRECTIVE token.
	yaml_TAG_DIRECTIVE_TOKEN     // A TAG-DIRECTIVE token.
	yaml_DOCUMENT_START_TOKEN    // A DOCUMENT-START token.
	yaml_DOCUMENT_END_TOKEN      // A DOCUMENT-END token.

	yaml_BLOCK_SEQUENCE_START_TOKEN // A BLOCK-SEQUENCE-START token.
	yaml_BLOCK_MAPPING_START_TOKEN  // A BLOCK-SEQUENCE-END token.
	yaml_BLOCK_END_TOKEN            // A BLOCK-END token.

	yaml_FLOW_SEQUENCE_START_TOKEN // A FLOW-SEQUENCE-START token.
	yaml_FLOW_SEQUENCE_END_TOKEN   // A FLOW-SEQUENCE-END token.
	yaml_FLOW_MAPPING_START_TOKEN  // A FLOW-MAPPING-START token.
	yaml_FLOW_MAPPING_END_TOKEN    // A FLOW-MAPPING-END token.

	yaml_BLOCK_ENTRY_TOKEN // A BLOCK-ENTRY token.
	yaml_FLOW_ENTRY_TOKEN  // A FLOW-ENTRY token.
	yaml_KEY_TOKEN         // A KEY token.
	yaml_VALUE_TOKEN       // A VALUE token.

	yaml_ALIAS_TOKEN  // An ALIAS token.
	yaml_ANCHOR_TOKEN // An ANCHOR token.
	yaml_TAG_TOKEN    // A TAG token.
	yaml_SCALAR_TOKEN // A SCALAR token.
)

func (tt yaml_token_type_t) String() string {
	switch tt {
	case yaml_NO_TOKEN:
		return "yaml_NO_TOKEN"
	case yaml_STREAM_START_TOKEN:
		return "yaml_STREAM_START_TOKEN"
	case yaml_STREAM_END_TOKEN:
		return "yaml_STREAM_END_TOKEN"
	case yaml_VERSION_DIRECTIVE_TOKEN:
		return "yaml_VERSION_DIRECTIVE_TOKEN"
	case yaml_TAG_DIRECTIVE_TOKEN:
		return "yaml_TAG_DIRECTIVE_TOKEN"
	case yaml_DOCUMENT_START_TOKEN:
		return "yaml_DOCUMENT_START_TOKEN"
	case yaml_DOCUMENT_END_TOKEN:
		return "yaml_DOCUMENT_END_TOKEN"
	case yaml_BLOCK_SEQUENCE_START_TOKEN:
		return "yaml_BLOCK_SEQUENCE_START_TOKEN"
	case yaml_BLOCK_MAPPING_START_TOKEN:
		return "yaml_BLOCK_MAPPING_START_TOKEN"
	case yaml_BLOCK_END_TOKEN:
		return "yaml_BLOCK_END_TOKEN"
	case yaml_FLOW_SEQUENCE_START_TOKEN:
		return "yaml_FLOW_SEQUENCE_START_TOKEN"
	case yaml_FLOW_SEQUENCE_END_TOKEN:
		return "yaml_FLOW_SEQUENCE_END_TOKEN"
	case yaml_FLOW_MAPPING_START_TOKEN:
		return "yaml_FLOW_MAPPING_START_TOKEN"
	case yaml_FLOW_MAPPING_END_TOKEN:
		return "yaml_FLOW_MAPPING_END_TOKEN"
	case yaml_BLOCK_ENTRY_TOKEN:
		return "yaml_BLOCK_ENTRY_TOKEN"
	case yaml_FLOW_ENTRY_TOKEN:
		return "yaml_FLOW_ENTRY_TOKEN"
	case yaml_KEY_TOKEN:
		return "yaml_KEY_TOKEN"
	case yaml_VALUE_TOKEN:
		return "yaml_VALUE_TOKEN"
	case yaml_ALIAS_TOKEN:
		return "yaml_ALIAS_TOKEN"
	case yaml_ANCHOR_TOKEN:
		return "yaml_ANCHOR_TOKEN"
	case yaml_TAG_TOKEN:
		return "yaml_TAG_TOKEN"
	case yaml_SCALAR_TOKEN:
		return "yaml_SCALAR_TOKEN"
	}
	return "<unknown token>"
}

// The token structure.
type yaml_token_t struct {
	// The token type.
	typ yaml_token_type_t

	// The start/end of the token.
	start_mark, end_mark yaml_mark_t

	// The stream encoding (for yaml_STREAM_START_TOKEN).
	encoding yaml_encoding_t

	// The alias/anchor/scalar value or tag/tag directive handle
	// (for yaml_ALIAS_TOKEN, yaml_ANCHOR_TOKEN, yaml_SCALAR_TOKEN, yaml_TAG_TOKEN, yaml_TAG_DIRECTIVE_TOKEN).
	value []byte

	// The tag suffix (for yaml_TAG_TOKEN).
	suffix []byte

	// The tag directive prefix (for yaml_TAG_DIRECTIVE_TOKEN).
	prefix []byte

	// The scalar style (for yaml_SCALAR_TOKEN).
	style yaml_scalar_style_t

	// The version directive major/minor (for yaml_VERSION_DIRECTIVE_TOKEN).
	major, minor int8
}

// Events

type yaml_event_type_t int8

// Event types.
const (
	// An empty event.
	yaml_NO_EVENT yaml_event_type_t = iota

	yaml_STREAM_START_EVENT   // A STREAM-START event.
	yaml_STREAM_END_EVENT     // A STREAM-END event.
	yaml_DOCUMENT_START_EVENT // A DOCUMENT-START event.
	yaml_DOCUMENT_END_EVENT   // A DOCUMENT-END event.
	yaml_ALIAS_EVENT          // An ALIAS event.
	yaml_SCALAR_EVENT         // A SCALAR event.
	yaml_SEQUENCE_START_EVENT // A SEQUENCE-START event.
	yaml_SEQUENCE_END_EVENT   // A SEQUENCE-END event.
	yaml_MAPPING_START_EVENT  // A MAPPING-START event.
	yaml_MAPPING_END_EVENT    // A MAPPING-END event.
)

// The event structure.
type yaml_event_t struct {

	// The event type.
	typ yaml_event_type_t

	// The start and end of the event.
	start_mark, end_mark yaml_mark_t

	// The document encoding (for yaml_STREAM_START_EVENT).
	encoding yaml_encoding_t

	// The version directive (for yaml_DOCUMENT_START_EVENT).
	version_directive *yaml_version_directive_t

	// The list of tag directives (for yaml_DOCUMENT_START_EVENT).
	tag_directives []yaml_tag_directive_t

	// The anchor (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_ALIAS_EVENT).
	anchor []byte

	// The tag (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT).
	tag []byte

	// The scalar value (for yaml_SCALAR_EVENT).
	value []byte

	// Is the document start/end indicator implicit, or the tag optional?
	// (for yaml_DOCUMENT_START_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_SCALAR_EVENT).
	implicit bool

	// Is the tag optional for any non-plain style? (for yaml_SCALAR_EVENT).
	quoted_implicit bool

	// The style (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT).
	style yaml_style_t
}

func (e *yaml_event_t) scalar_style() yaml_scalar_style_t     { return yaml_scalar_style_t(e.style) }
func (e *yaml_event_t) sequence_style() yaml_sequence_style_t { return yaml_sequence_style_t(e.style) }
func (e *yaml_event_t) mapping_style() yaml_mapping_style_t   { return yaml_mapping_style_t(e.style) }

// Nodes

const (
	yaml_NULL_TAG      = "tag:yaml.org,2002:null"      // The tag !!null with the only possible value: null.
	yaml_BOOL_TAG      = "tag:yaml.org,2002:bool"      // The tag !!bool with the values: true and false.
	yaml_STR_TAG       = "tag:yaml.org,2002:str"       // The tag !!str for string values.
	yaml_INT_TAG       = "tag:yaml.org,2002:int"       // The tag !!int for integer values.
	yaml_FLOAT_TAG     = "tag:yaml.org,2002:float"     // The tag !!float for float values.
	yaml_TIMESTAMP_TAG = "tag:yaml.org,2002:timestamp" // The tag !!timestamp for date and time values.

	yaml_SEQ_TAG = "tag:yaml.org,2002:seq" // The tag !!seq is used to denote sequences.
	yaml_MAP_TAG = "tag:yaml.org,2002:map" // The tag !!map is used to denote mapping.

	// Not in original libyaml.
	yaml_BINARY_TAG = "tag:yaml.org,2002:binary"
	yaml_MERGE_TAG = "tag:yaml.org,2002:merge"

	yaml_DEFAULT_SCALAR_TAG   = yaml_STR_TAG // The default scalar tag is !!str.
	yaml_DEFAULT_SEQUENCE_TAG = yaml_SEQ_TAG // The default sequence tag is !!seq.
	yaml_DEFAULT_MAPPING_TAG  = yaml_MAP_TAG // The default mapping tag is !!map.
)

type yaml_node_type_t int

// Node types.
const (
	// An empty node.
	yaml_NO_NODE yaml_node_type_t = iota

	yaml_SCALAR_NODE   // A scalar node.
	yaml_SEQUENCE_NODE // A sequence node.
	yaml_MAPPING_NODE  // A mapping node.
)

// An element of a sequence node.
type yaml_node_item_t int

// An element of a mapping node.
type yaml_node_pair_t struct {
	key   int // The key of the element.
	value int // The value of the element.
}

// The node structure.
type yaml_node_t struct {
	typ yaml_node_type_t // The node type.
	tag []byte           // The node tag.

	// The node data.

	// The scalar parameters (for yaml_SCALAR_NODE).
	scalar struct {
		value  []byte              // The scalar value.
		length int                 // The length of the scalar value.
		style  yaml_scalar_style_t // The scalar style.
	}

	// The sequence parameters (for YAML_SEQUENCE_NODE).
	sequence struct {
		items_data []yaml_node_item_t    // The stack of sequence items.
		style      yaml_sequence_style_t // The sequence style.
	}

	// The mapping parameters (for yaml_MAPPING_NODE).
	mapping struct {
		pairs_data  []yaml_node_pair_t   // The stack of mapping pairs (key, value).
		pairs_start *yaml_node_pair_t    // The beginning of the stack.
		pairs_end   *yaml_node_pair_t    // The end of the stack.
		pairs_top   *yaml_node_pair_t    // The top of the stack.
		style       yaml_mapping_style_t // The mapping style.
	}

	start_mark yaml_mark_t // The beginning of the node.
	end_mark   yaml_mark_t // The end of the node.

}

// The document structure.
type yaml_document_t struct {

	// The document nodes.
	nodes []yaml_node_t

	// The version directive.
	version_directive *yaml_version_directive_t

	// The list of tag directives.
	tag_directives_data  []yaml_tag_directive_t
	tag_directives_start int // The beginning of the tag directives list.
	tag_directives_end   int // The end of the tag directives list.

	start_implicit int // Is the document start indicator implicit?
	end_implicit   int // Is the document end indicator implicit?

	// The start/end of the document.
	start_mark, end_mark yaml_mark_t
}

// The prototype of a read handler.
//
// The read handler is called when the parser needs to read more bytes from the
// source. The handler should write not more than size bytes to the buffer.
// The number of written bytes should be set to the size_read variable.
//
// [in,out]   data        A pointer to an application data specified by
//                        yaml_parser_set_input().
// [out]      buffer      The buffer to write the data from the source.
// [in]       size        The size of the buffer.
// [out]      size_read   The actual number of bytes read from the source.
//
// On success, the handler should return 1.  If the handler failed,
// the returned value should be 0. On EOF, the handler should set the
// size_read to 0 and return 1.
type yaml_read_handler_t func(parser *yaml_parser_t, buffer []byte) (n int, err error)

// This structure holds information about a potential simple key.
type yaml_simple_key_t struct {
	possible     bool        // Is a simple key possible?
	required     bool        // Is a simple key required?
	token_number int         // The number of the token.
	mark         yaml_mark_t // The position mark.
}

// The states of the parser.
type yaml_parser_state_t int

const (
	yaml_PARSE_STREAM_START_STATE yaml_parser_state_t = iota

	yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE           // Expect the beginning of an implicit document.
	yaml_PARSE_DOCUMENT_START_STATE                    // Expect DOCUMENT-START.
	yaml_PARSE_DOCUMENT_CONTENT_STATE                  // Expect the content of a document.
	yaml_PARSE_DOCUMENT_END_STATE                      // Expect DOCUMENT-END.
	yaml_PARSE_BLOCK_NODE_STATE                        // Expect a block node.
	yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE // Expect a block node or indentless sequence.
	yaml_PARSE_FLOW_NODE_STATE                         // Expect a flow node.
	yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE        // Expect the first entry of a block sequence.
	yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE              // Expect an entry of a block sequence.
	yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE         // Expect an entry of an indentless sequence.
	yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE           // Expect the first key of a block mapping.
	yaml_PARSE_BLOCK_MAPPING_KEY_STATE                 // Expect a block mapping key.
	yaml_PARSE_BLOCK_MAPPING_VALUE_STATE               // Expect a block mapping value.
	yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE         // Expect the first entry of a flow sequence.
	yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE               // Expect an entry of a flow sequence.
	yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE   // Expect a key of an ordered mapping.
	yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE // Expect a value of an ordered mapping.
	yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE   // Expect the and of an ordered mapping entry.
	yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE            // Expect the first key of a flow mapping.
	yaml_PARSE_FLOW_MAPPING_KEY_STATE                  // Expect a key of a flow mapping.
	yaml_PARSE_FLOW_MAPPING_VALUE_STATE                // Expect a value of a flow mapping.
	yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE          // Expect an empty value of a flow mapping.
	yaml_PARSE_END_STATE                               // Expect nothing.
)

func (ps yaml_parser_state_t) String() string {
	switch ps {
	case yaml_PARSE_STREAM_START_STATE:
		return "yaml_PARSE_STREAM_START_STATE"
	case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE:
		return "yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE"
	case yaml_PARSE_DOCUMENT_START_STATE:
		return "yaml_PARSE_DOCUMENT_START_STATE"
	case yaml_PARSE_DOCUMENT_CONTENT_STATE:
		return "yaml_PARSE_DOCUMENT_CONTENT_STATE"
	case yaml_PARSE_DOCUMENT_END_STATE:
		return "yaml_PARSE_DOCUMENT_END_STATE"
	case yaml_PARSE_BLOCK_NODE_STATE:
		return "yaml_PARSE_BLOCK_NODE_STATE"
	case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE:
		return "yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE"
	case yaml_PARSE_FLOW_NODE_STATE:
		return "yaml_PARSE_FLOW_NODE_STATE"
	case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE:
		return "yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE"
	case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE:
		return "yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE"
	case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE:
		return "yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE"
	case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE:
		return "yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE"
	case yaml_PARSE_BLOCK_MAPPING_KEY_STATE:
		return "yaml_PARSE_BLOCK_MAPPING_KEY_STATE"
	case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE:
		return "yaml_PARSE_BLOCK_MAPPING_VALUE_STATE"
	case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE:
		return "yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE"
	case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE:
		return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE"
	case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE:
		return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE"
	case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE:
		return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE"
	case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE:
		return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE"
	case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE:
		return "yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE"
	case yaml_PARSE_FLOW_MAPPING_KEY_STATE:
		return "yaml_PARSE_FLOW_MAPPING_KEY_STATE"
	case yaml_PARSE_FLOW_MAPPING_VALUE_STATE:
		return "yaml_PARSE_FLOW_MAPPING_VALUE_STATE"
	case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE:
		return "yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE"
	case yaml_PARSE_END_STATE:
		return "yaml_PARSE_END_STATE"
	}
	return "<unknown parser state>"
}

// This structure holds aliases data.
type yaml_alias_data_t struct {
	anchor []byte      // The anchor.
	index  int         // The node id.
	mark   yaml_mark_t // The anchor mark.
}

// The parser structure.
//
// All members are internal. Manage the structure using the
// yaml_parser_ family of functions.
type yaml_parser_t struct {

	// Error handling

	error yaml_error_type_t // Error type.

	problem string // Error description.

	// The byte about which the problem occured.
	problem_offset int
	problem_value  int
	problem_mark   yaml_mark_t

	// The error context.
	context      string
	context_mark yaml_mark_t

	// Reader stuff

	read_handler yaml_read_handler_t // Read handler.

	input_file io.Reader // File input data.
	input      []byte    // String input data.
	input_pos  int

	eof bool // EOF flag

	buffer     []byte // The working buffer.
	buffer_pos int    // The current position of the buffer.

	unread int // The number of unread characters in the buffer.

	raw_buffer     []byte // The raw buffer.
	raw_buffer_pos int    // The current position of the buffer.

	encoding yaml_encoding_t // The input encoding.

	offset int         // The offset of the current position (in bytes).
	mark   yaml_mark_t // The mark of the current position.

	// Scanner stuff

	stream_start_produced bool // Have we started to scan the input stream?
	stream_end_produced   bool // Have we reached the end of the input stream?

	flow_level int // The number of unclosed '[' and '{' indicators.

	tokens          []yaml_token_t // The tokens queue.
	tokens_head     int            // The head of the tokens queue.
	tokens_parsed   int            // The number of tokens fetched from the queue.
	token_available bool           // Does the tokens queue contain a token ready for dequeueing.

	indent  int   // The current indentation level.
	indents []int // The indentation levels stack.

	simple_key_allowed bool                // May a simple key occur at the current position?
	simple_keys        []yaml_simple_key_t // The stack of simple keys.

	// Parser stuff

	state          yaml_parser_state_t    // The current parser state.
	states         []yaml_parser_state_t  // The parser states stack.
	marks          []yaml_mark_t          // The stack of marks.
	tag_directives []yaml_tag_directive_t // The list of TAG directives.

	// Dumper stuff

	aliases []yaml_alias_data_t // The alias data.

	document *yaml_document_t // The currently parsed document.
}

// Emitter Definitions

// The prototype of a write handler.
//
// The write handler is called when the emitter needs to flush the accumulated
// characters to the output.  The handler should write @a size bytes of the
// @a buffer to the output.
//
// @param[in,out]   data        A pointer to an application data specified by
//                              yaml_emitter_set_output().
// @param[in]       buffer      The buffer with bytes to be written.
// @param[in]       size        The size of the buffer.
//
// @returns On success, the handler should return @c 1.  If the handler failed,
// the returned value should be @c 0.
//
type yaml_write_handler_t func(emitter *yaml_emitter_t, buffer []byte) error

type yaml_emitter_state_t int

// The emitter states.
const (
	// Expect STREAM-START.
	yaml_EMIT_STREAM_START_STATE yaml_emitter_state_t = iota

	yaml_EMIT_FIRST_DOCUMENT_START_STATE       // Expect the first DOCUMENT-START or STREAM-END.
	yaml_EMIT_DOCUMENT_START_STATE             // Expect DOCUMENT-START or STREAM-END.
	yaml_EMIT_DOCUMENT_CONTENT_STATE           // Expect the content of a document.
	yaml_EMIT_DOCUMENT_END_STATE               // Expect DOCUMENT-END.
	yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE   // Expect the first item of a flow sequence.
	yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE         // Expect an item of a flow sequence.
	yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE     // Expect the first key of a flow mapping.
	yaml_EMIT_FLOW_MAPPING_KEY_STATE           // Expect a key of a flow mapping.
	yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE  // Expect a value for a simple key of a flow mapping.
	yaml_EMIT_FLOW_MAPPING_VALUE_STATE         // Expect a value of a flow mapping.
	yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE  // Expect the first item of a block sequence.
	yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE        // Expect an item of a block sequence.
	yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE    // Expect the first key of a block mapping.
	yaml_EMIT_BLOCK_MAPPING_KEY_STATE          // Expect the key of a block mapping.
	yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a block mapping.
	yaml_EMIT_BLOCK_MAPPING_VALUE_STATE        // Expect a value of a block mapping.
	yaml_EMIT_END_STATE                        // Expect nothing.
)

// The emitter structure.
//
// All members are internal.  Manage the structure using the @c yaml_emitter_
// family of functions.
type yaml_emitter_t struct {

	// Error handling

	error   yaml_error_type_t // Error type.
	problem string            // Error description.

	// Writer stuff

	write_handler yaml_write_handler_t // Write handler.

	output_buffer *[]byte   // String output data.
	output_file   io.Writer // File output data.

	buffer     []byte // The working buffer.
	buffer_pos int    // The current position of the buffer.

	raw_buffer     []byte // The raw buffer.
	raw_buffer_pos int    // The current position of the buffer.

	encoding yaml_encoding_t // The stream encoding.

	// Emitter stuff

	canonical   bool         // If the output is in the canonical style?
	best_indent int          // The number of indentation spaces.
	best_width  int          // The preferred width of the output lines.
	unicode     bool         // Allow unescaped non-ASCII characters?
	line_break  yaml_break_t // The preferred line break.

	state  yaml_emitter_state_t   // The current emitter state.
	states []yaml_emitter_state_t // The stack of states.

	events      []yaml_event_t // The event queue.
	events_head int            // The head of the event queue.

	indents []int // The stack of indentation levels.

	tag_directives []yaml_tag_directive_t // The list of tag directives.

	indent int // The current indentation level.

	flow_level int // The current flow level.

	root_context       bool // Is it the document root context?
	sequence_context   bool // Is it a sequence context?
	mapping_context    bool // Is it a mapping context?
	simple_key_context bool // Is it a simple mapping key context?

	line       int  // The current line.
	column     int  // The current column.
	whitespace bool // If the last character was a whitespace?
	indention  bool // If the last character was an indentation character (' ', '-', '?', ':')?
	open_ended bool // If an explicit document end is required?

	// Anchor analysis.
	anchor_data struct {
		anchor []byte // The anchor value.
		alias  bool   // Is it an alias?
	}

	// Tag analysis.
	tag_data struct {
		handle []byte // The tag handle.
		suffix []byte // The tag suffix.
	}

	// Scalar analysis.
	scalar_data struct {
		value                 []byte              // The scalar value.
		multiline             bool                // Does the scalar contain line breaks?
		flow_plain_allowed    bool                // Can the scalar be expessed in the flow plain style?
		block_plain_allowed   bool                // Can the scalar be expressed in the block plain style?
		single_quoted_allowed bool                // Can the scalar be expressed in the single quoted style?
		block_allowed         bool                // Can the scalar be expressed in the literal or folded styles?
		style                 yaml_scalar_style_t // The output style.
	}

	// Dumper stuff

	opened bool // If the stream was already opened?
	closed bool // If the stream was already closed?

	// The information associated with the document nodes.
	anchors *struct {
		references int  // The number of references.
		anchor     int  // The anchor id.
		serialized bool // If the node has been emitted?
	}

	last_anchor_id int // The last assigned anchor id.

	document *yaml_document_t // The currently emitted document.
}
07070100000FEF000081A4000000000000000000000001645E367C00001361000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v1/yamlprivateh.go   package yaml

const (
	// The size of the input raw buffer.
	input_raw_buffer_size = 512

	// The size of the input buffer.
	// It should be possible to decode the whole raw buffer.
	input_buffer_size = input_raw_buffer_size * 3

	// The size of the output buffer.
	output_buffer_size = 128

	// The size of the output raw buffer.
	// It should be possible to encode the whole output buffer.
	output_raw_buffer_size = (output_buffer_size*2 + 2)

	// The size of other stacks and queues.
	initial_stack_size  = 16
	initial_queue_size  = 16
	initial_string_size = 16
)

// Check if the character at the specified position is an alphabetical
// character, a digit, '_', or '-'.
func is_alpha(b []byte, i int) bool {
	return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'Z' || b[i] >= 'a' && b[i] <= 'z' || b[i] == '_' || b[i] == '-'
}

// Check if the character at the specified position is a digit.
func is_digit(b []byte, i int) bool {
	return b[i] >= '0' && b[i] <= '9'
}

// Get the value of a digit.
func as_digit(b []byte, i int) int {
	return int(b[i]) - '0'
}

// Check if the character at the specified position is a hex-digit.
func is_hex(b []byte, i int) bool {
	return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'F' || b[i] >= 'a' && b[i] <= 'f'
}

// Get the value of a hex-digit.
func as_hex(b []byte, i int) int {
	bi := b[i]
	if bi >= 'A' && bi <= 'F' {
		return int(bi) - 'A' + 10
	}
	if bi >= 'a' && bi <= 'f' {
		return int(bi) - 'a' + 10
	}
	return int(bi) - '0'
}

// Check if the character is ASCII.
func is_ascii(b []byte, i int) bool {
	return b[i] <= 0x7F
}

// Check if the character at the start of the buffer can be printed unescaped.
func is_printable(b []byte, i int) bool {
	return ((b[i] == 0x0A) || // . == #x0A
		(b[i] >= 0x20 && b[i] <= 0x7E) || // #x20 <= . <= #x7E
		(b[i] == 0xC2 && b[i+1] >= 0xA0) || // #0xA0 <= . <= #xD7FF
		(b[i] > 0xC2 && b[i] < 0xED) ||
		(b[i] == 0xED && b[i+1] < 0xA0) ||
		(b[i] == 0xEE) ||
		(b[i] == 0xEF && // #xE000 <= . <= #xFFFD
			!(b[i+1] == 0xBB && b[i+2] == 0xBF) && // && . != #xFEFF
			!(b[i+1] == 0xBF && (b[i+2] == 0xBE || b[i+2] == 0xBF))))
}

// Check if the character at the specified position is NUL.
func is_z(b []byte, i int) bool {
	return b[i] == 0x00
}

// Check if the beginning of the buffer is a BOM.
func is_bom(b []byte, i int) bool {
	return b[0] == 0xEF && b[1] == 0xBB && b[2] == 0xBF
}

// Check if the character at the specified position is space.
func is_space(b []byte, i int) bool {
	return b[i] == ' '
}

// Check if the character at the specified position is tab.
func is_tab(b []byte, i int) bool {
	return b[i] == '\t'
}

// Check if the character at the specified position is blank (space or tab).
func is_blank(b []byte, i int) bool {
	//return is_space(b, i) || is_tab(b, i)
	return b[i] == ' ' || b[i] == '\t'
}

// Check if the character at the specified position is a line break.
func is_break(b []byte, i int) bool {
	return (b[i] == '\r' || // CR (#xD)
		b[i] == '\n' || // LF (#xA)
		b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)
		b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)
		b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9) // PS (#x2029)
}

func is_crlf(b []byte, i int) bool {
	return b[i] == '\r' && b[i+1] == '\n'
}

// Check if the character is a line break or NUL.
func is_breakz(b []byte, i int) bool {
	//return is_break(b, i) || is_z(b, i)
	return (        // is_break:
	b[i] == '\r' || // CR (#xD)
		b[i] == '\n' || // LF (#xA)
		b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)
		b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)
		b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029)
		// is_z:
		b[i] == 0)
}

// Check if the character is a line break, space, or NUL.
func is_spacez(b []byte, i int) bool {
	//return is_space(b, i) || is_breakz(b, i)
	return ( // is_space:
	b[i] == ' ' ||
		// is_breakz:
		b[i] == '\r' || // CR (#xD)
		b[i] == '\n' || // LF (#xA)
		b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)
		b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)
		b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029)
		b[i] == 0)
}

// Check if the character is a line break, space, tab, or NUL.
func is_blankz(b []byte, i int) bool {
	//return is_blank(b, i) || is_breakz(b, i)
	return ( // is_blank:
	b[i] == ' ' || b[i] == '\t' ||
		// is_breakz:
		b[i] == '\r' || // CR (#xD)
		b[i] == '\n' || // LF (#xA)
		b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)
		b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)
		b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029)
		b[i] == 0)
}

// Determine the width of the character.
func width(b byte) int {
	// Don't replace these by a switch without first
	// confirming that it is being inlined.
	if b&0x80 == 0x00 {
		return 1
	}
	if b&0xE0 == 0xC0 {
		return 2
	}
	if b&0xF0 == 0xE0 {
		return 3
	}
	if b&0xF8 == 0xF0 {
		return 4
	}
	return 0

}
   07070100000FF0000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000002C00000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v2   07070100000FF1000081A4000000000000000000000001645E367C000000DF000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v2/.travis.yml   language: go

go:
    - "1.4.x"
    - "1.5.x"
    - "1.6.x"
    - "1.7.x"
    - "1.8.x"
    - "1.9.x"
    - "1.10.x"
    - "1.11.x"
    - "1.12.x"
    - "1.13.x"
    - "1.14.x"
    - "tip"

go_import_path: gopkg.in/yaml.v2
 07070100000FF2000081A4000000000000000000000001645E367C00002C5D000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v2/LICENSE                                    Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "{}"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright {yyyy} {name of copyright owner}

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
   07070100000FF3000081A4000000000000000000000001645E367C00000521000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v2/LICENSE.libyaml   The following files were ported to Go from C files of libyaml, and thus
are still covered by their original copyright and license:

    apic.go
    emitterc.go
    parserc.go
    readerc.go
    scannerc.go
    writerc.go
    yamlh.go
    yamlprivateh.go

Copyright (c) 2006 Kirill Simonov

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
   07070100000FF4000081A4000000000000000000000001645E367C00000230000000000000000000000000000000000000003300000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v2/NOTICE    Copyright 2011-2016 Canonical Ltd.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
07070100000FF5000081A4000000000000000000000001645E367C00000A87000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v2/README.md # YAML support for the Go language

Introduction
------------

The yaml package enables Go programs to comfortably encode and decode YAML
values. It was developed within [Canonical](https://www.canonical.com) as
part of the [juju](https://juju.ubuntu.com) project, and is based on a
pure Go port of the well-known [libyaml](http://pyyaml.org/wiki/LibYAML)
C library to parse and generate YAML data quickly and reliably.

Compatibility
-------------

The yaml package supports most of YAML 1.1 and 1.2, including support for
anchors, tags, map merging, etc. Multi-document unmarshalling is not yet
implemented, and base-60 floats from YAML 1.1 are purposefully not
supported since they're a poor design and are gone in YAML 1.2.

Installation and usage
----------------------

The import path for the package is *gopkg.in/yaml.v2*.

To install it, run:

    go get gopkg.in/yaml.v2

API documentation
-----------------

If opened in a browser, the import path itself leads to the API documentation:

  * [https://gopkg.in/yaml.v2](https://gopkg.in/yaml.v2)

API stability
-------------

The package API for yaml v2 will remain stable as described in [gopkg.in](https://gopkg.in).


License
-------

The yaml package is licensed under the Apache License 2.0. Please see the LICENSE file for details.


Example
-------

```Go
package main

import (
        "fmt"
        "log"

        "gopkg.in/yaml.v2"
)

var data = `
a: Easy!
b:
  c: 2
  d: [3, 4]
`

// Note: struct fields must be public in order for unmarshal to
// correctly populate the data.
type T struct {
        A string
        B struct {
                RenamedC int   `yaml:"c"`
                D        []int `yaml:",flow"`
        }
}

func main() {
        t := T{}
    
        err := yaml.Unmarshal([]byte(data), &t)
        if err != nil {
                log.Fatalf("error: %v", err)
        }
        fmt.Printf("--- t:\n%v\n\n", t)
    
        d, err := yaml.Marshal(&t)
        if err != nil {
                log.Fatalf("error: %v", err)
        }
        fmt.Printf("--- t dump:\n%s\n\n", string(d))
    
        m := make(map[interface{}]interface{})
    
        err = yaml.Unmarshal([]byte(data), &m)
        if err != nil {
                log.Fatalf("error: %v", err)
        }
        fmt.Printf("--- m:\n%v\n\n", m)
    
        d, err = yaml.Marshal(&m)
        if err != nil {
                log.Fatalf("error: %v", err)
        }
        fmt.Printf("--- m dump:\n%s\n\n", string(d))
}
```

This example will generate the following output:

```
--- t:
{Easy! {2 [3 4]}}

--- t dump:
a: Easy!
b:
  c: 2
  d: [3, 4]


--- m:
map[a:Easy! b:map[c:2 d:[3 4]]]

--- m dump:
a: Easy!
b:
  c: 2
  d:
  - 3
  - 4
```

 07070100000FF6000081A4000000000000000000000001645E367C00005321000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v2/apic.go   package yaml

import (
	"io"
)

func yaml_insert_token(parser *yaml_parser_t, pos int, token *yaml_token_t) {
	//fmt.Println("yaml_insert_token", "pos:", pos, "typ:", token.typ, "head:", parser.tokens_head, "len:", len(parser.tokens))

	// Check if we can move the queue at the beginning of the buffer.
	if parser.tokens_head > 0 && len(parser.tokens) == cap(parser.tokens) {
		if parser.tokens_head != len(parser.tokens) {
			copy(parser.tokens, parser.tokens[parser.tokens_head:])
		}
		parser.tokens = parser.tokens[:len(parser.tokens)-parser.tokens_head]
		parser.tokens_head = 0
	}
	parser.tokens = append(parser.tokens, *token)
	if pos < 0 {
		return
	}
	copy(parser.tokens[parser.tokens_head+pos+1:], parser.tokens[parser.tokens_head+pos:])
	parser.tokens[parser.tokens_head+pos] = *token
}

// Create a new parser object.
func yaml_parser_initialize(parser *yaml_parser_t) bool {
	*parser = yaml_parser_t{
		raw_buffer: make([]byte, 0, input_raw_buffer_size),
		buffer:     make([]byte, 0, input_buffer_size),
	}
	return true
}

// Destroy a parser object.
func yaml_parser_delete(parser *yaml_parser_t) {
	*parser = yaml_parser_t{}
}

// String read handler.
func yaml_string_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) {
	if parser.input_pos == len(parser.input) {
		return 0, io.EOF
	}
	n = copy(buffer, parser.input[parser.input_pos:])
	parser.input_pos += n
	return n, nil
}

// Reader read handler.
func yaml_reader_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) {
	return parser.input_reader.Read(buffer)
}

// Set a string input.
func yaml_parser_set_input_string(parser *yaml_parser_t, input []byte) {
	if parser.read_handler != nil {
		panic("must set the input source only once")
	}
	parser.read_handler = yaml_string_read_handler
	parser.input = input
	parser.input_pos = 0
}

// Set a file input.
func yaml_parser_set_input_reader(parser *yaml_parser_t, r io.Reader) {
	if parser.read_handler != nil {
		panic("must set the input source only once")
	}
	parser.read_handler = yaml_reader_read_handler
	parser.input_reader = r
}

// Set the source encoding.
func yaml_parser_set_encoding(parser *yaml_parser_t, encoding yaml_encoding_t) {
	if parser.encoding != yaml_ANY_ENCODING {
		panic("must set the encoding only once")
	}
	parser.encoding = encoding
}

var disableLineWrapping = false

// Create a new emitter object.
func yaml_emitter_initialize(emitter *yaml_emitter_t) {
	*emitter = yaml_emitter_t{
		buffer:     make([]byte, output_buffer_size),
		raw_buffer: make([]byte, 0, output_raw_buffer_size),
		states:     make([]yaml_emitter_state_t, 0, initial_stack_size),
		events:     make([]yaml_event_t, 0, initial_queue_size),
	}
	if disableLineWrapping {
		emitter.best_width = -1
	}
}

// Destroy an emitter object.
func yaml_emitter_delete(emitter *yaml_emitter_t) {
	*emitter = yaml_emitter_t{}
}

// String write handler.
func yaml_string_write_handler(emitter *yaml_emitter_t, buffer []byte) error {
	*emitter.output_buffer = append(*emitter.output_buffer, buffer...)
	return nil
}

// yaml_writer_write_handler uses emitter.output_writer to write the
// emitted text.
func yaml_writer_write_handler(emitter *yaml_emitter_t, buffer []byte) error {
	_, err := emitter.output_writer.Write(buffer)
	return err
}

// Set a string output.
func yaml_emitter_set_output_string(emitter *yaml_emitter_t, output_buffer *[]byte) {
	if emitter.write_handler != nil {
		panic("must set the output target only once")
	}
	emitter.write_handler = yaml_string_write_handler
	emitter.output_buffer = output_buffer
}

// Set a file output.
func yaml_emitter_set_output_writer(emitter *yaml_emitter_t, w io.Writer) {
	if emitter.write_handler != nil {
		panic("must set the output target only once")
	}
	emitter.write_handler = yaml_writer_write_handler
	emitter.output_writer = w
}

// Set the output encoding.
func yaml_emitter_set_encoding(emitter *yaml_emitter_t, encoding yaml_encoding_t) {
	if emitter.encoding != yaml_ANY_ENCODING {
		panic("must set the output encoding only once")
	}
	emitter.encoding = encoding
}

// Set the canonical output style.
func yaml_emitter_set_canonical(emitter *yaml_emitter_t, canonical bool) {
	emitter.canonical = canonical
}

//// Set the indentation increment.
func yaml_emitter_set_indent(emitter *yaml_emitter_t, indent int) {
	if indent < 2 || indent > 9 {
		indent = 2
	}
	emitter.best_indent = indent
}

// Set the preferred line width.
func yaml_emitter_set_width(emitter *yaml_emitter_t, width int) {
	if width < 0 {
		width = -1
	}
	emitter.best_width = width
}

// Set if unescaped non-ASCII characters are allowed.
func yaml_emitter_set_unicode(emitter *yaml_emitter_t, unicode bool) {
	emitter.unicode = unicode
}

// Set the preferred line break character.
func yaml_emitter_set_break(emitter *yaml_emitter_t, line_break yaml_break_t) {
	emitter.line_break = line_break
}

///*
// * Destroy a token object.
// */
//
//YAML_DECLARE(void)
//yaml_token_delete(yaml_token_t *token)
//{
//    assert(token);  // Non-NULL token object expected.
//
//    switch (token.type)
//    {
//        case YAML_TAG_DIRECTIVE_TOKEN:
//            yaml_free(token.data.tag_directive.handle);
//            yaml_free(token.data.tag_directive.prefix);
//            break;
//
//        case YAML_ALIAS_TOKEN:
//            yaml_free(token.data.alias.value);
//            break;
//
//        case YAML_ANCHOR_TOKEN:
//            yaml_free(token.data.anchor.value);
//            break;
//
//        case YAML_TAG_TOKEN:
//            yaml_free(token.data.tag.handle);
//            yaml_free(token.data.tag.suffix);
//            break;
//
//        case YAML_SCALAR_TOKEN:
//            yaml_free(token.data.scalar.value);
//            break;
//
//        default:
//            break;
//    }
//
//    memset(token, 0, sizeof(yaml_token_t));
//}
//
///*
// * Check if a string is a valid UTF-8 sequence.
// *
// * Check 'reader.c' for more details on UTF-8 encoding.
// */
//
//static int
//yaml_check_utf8(yaml_char_t *start, size_t length)
//{
//    yaml_char_t *end = start+length;
//    yaml_char_t *pointer = start;
//
//    while (pointer < end) {
//        unsigned char octet;
//        unsigned int width;
//        unsigned int value;
//        size_t k;
//
//        octet = pointer[0];
//        width = (octet & 0x80) == 0x00 ? 1 :
//                (octet & 0xE0) == 0xC0 ? 2 :
//                (octet & 0xF0) == 0xE0 ? 3 :
//                (octet & 0xF8) == 0xF0 ? 4 : 0;
//        value = (octet & 0x80) == 0x00 ? octet & 0x7F :
//                (octet & 0xE0) == 0xC0 ? octet & 0x1F :
//                (octet & 0xF0) == 0xE0 ? octet & 0x0F :
//                (octet & 0xF8) == 0xF0 ? octet & 0x07 : 0;
//        if (!width) return 0;
//        if (pointer+width > end) return 0;
//        for (k = 1; k < width; k ++) {
//            octet = pointer[k];
//            if ((octet & 0xC0) != 0x80) return 0;
//            value = (value << 6) + (octet & 0x3F);
//        }
//        if (!((width == 1) ||
//            (width == 2 && value >= 0x80) ||
//            (width == 3 && value >= 0x800) ||
//            (width == 4 && value >= 0x10000))) return 0;
//
//        pointer += width;
//    }
//
//    return 1;
//}
//

// Create STREAM-START.
func yaml_stream_start_event_initialize(event *yaml_event_t, encoding yaml_encoding_t) {
	*event = yaml_event_t{
		typ:      yaml_STREAM_START_EVENT,
		encoding: encoding,
	}
}

// Create STREAM-END.
func yaml_stream_end_event_initialize(event *yaml_event_t) {
	*event = yaml_event_t{
		typ: yaml_STREAM_END_EVENT,
	}
}

// Create DOCUMENT-START.
func yaml_document_start_event_initialize(
	event *yaml_event_t,
	version_directive *yaml_version_directive_t,
	tag_directives []yaml_tag_directive_t,
	implicit bool,
) {
	*event = yaml_event_t{
		typ:               yaml_DOCUMENT_START_EVENT,
		version_directive: version_directive,
		tag_directives:    tag_directives,
		implicit:          implicit,
	}
}

// Create DOCUMENT-END.
func yaml_document_end_event_initialize(event *yaml_event_t, implicit bool) {
	*event = yaml_event_t{
		typ:      yaml_DOCUMENT_END_EVENT,
		implicit: implicit,
	}
}

///*
// * Create ALIAS.
// */
//
//YAML_DECLARE(int)
//yaml_alias_event_initialize(event *yaml_event_t, anchor *yaml_char_t)
//{
//    mark yaml_mark_t = { 0, 0, 0 }
//    anchor_copy *yaml_char_t = NULL
//
//    assert(event) // Non-NULL event object is expected.
//    assert(anchor) // Non-NULL anchor is expected.
//
//    if (!yaml_check_utf8(anchor, strlen((char *)anchor))) return 0
//
//    anchor_copy = yaml_strdup(anchor)
//    if (!anchor_copy)
//        return 0
//
//    ALIAS_EVENT_INIT(*event, anchor_copy, mark, mark)
//
//    return 1
//}

// Create SCALAR.
func yaml_scalar_event_initialize(event *yaml_event_t, anchor, tag, value []byte, plain_implicit, quoted_implicit bool, style yaml_scalar_style_t) bool {
	*event = yaml_event_t{
		typ:             yaml_SCALAR_EVENT,
		anchor:          anchor,
		tag:             tag,
		value:           value,
		implicit:        plain_implicit,
		quoted_implicit: quoted_implicit,
		style:           yaml_style_t(style),
	}
	return true
}

// Create SEQUENCE-START.
func yaml_sequence_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_sequence_style_t) bool {
	*event = yaml_event_t{
		typ:      yaml_SEQUENCE_START_EVENT,
		anchor:   anchor,
		tag:      tag,
		implicit: implicit,
		style:    yaml_style_t(style),
	}
	return true
}

// Create SEQUENCE-END.
func yaml_sequence_end_event_initialize(event *yaml_event_t) bool {
	*event = yaml_event_t{
		typ: yaml_SEQUENCE_END_EVENT,
	}
	return true
}

// Create MAPPING-START.
func yaml_mapping_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_mapping_style_t) {
	*event = yaml_event_t{
		typ:      yaml_MAPPING_START_EVENT,
		anchor:   anchor,
		tag:      tag,
		implicit: implicit,
		style:    yaml_style_t(style),
	}
}

// Create MAPPING-END.
func yaml_mapping_end_event_initialize(event *yaml_event_t) {
	*event = yaml_event_t{
		typ: yaml_MAPPING_END_EVENT,
	}
}

// Destroy an event object.
func yaml_event_delete(event *yaml_event_t) {
	*event = yaml_event_t{}
}

///*
// * Create a document object.
// */
//
//YAML_DECLARE(int)
//yaml_document_initialize(document *yaml_document_t,
//        version_directive *yaml_version_directive_t,
//        tag_directives_start *yaml_tag_directive_t,
//        tag_directives_end *yaml_tag_directive_t,
//        start_implicit int, end_implicit int)
//{
//    struct {
//        error yaml_error_type_t
//    } context
//    struct {
//        start *yaml_node_t
//        end *yaml_node_t
//        top *yaml_node_t
//    } nodes = { NULL, NULL, NULL }
//    version_directive_copy *yaml_version_directive_t = NULL
//    struct {
//        start *yaml_tag_directive_t
//        end *yaml_tag_directive_t
//        top *yaml_tag_directive_t
//    } tag_directives_copy = { NULL, NULL, NULL }
//    value yaml_tag_directive_t = { NULL, NULL }
//    mark yaml_mark_t = { 0, 0, 0 }
//
//    assert(document) // Non-NULL document object is expected.
//    assert((tag_directives_start && tag_directives_end) ||
//            (tag_directives_start == tag_directives_end))
//                            // Valid tag directives are expected.
//
//    if (!STACK_INIT(&context, nodes, INITIAL_STACK_SIZE)) goto error
//
//    if (version_directive) {
//        version_directive_copy = yaml_malloc(sizeof(yaml_version_directive_t))
//        if (!version_directive_copy) goto error
//        version_directive_copy.major = version_directive.major
//        version_directive_copy.minor = version_directive.minor
//    }
//
//    if (tag_directives_start != tag_directives_end) {
//        tag_directive *yaml_tag_directive_t
//        if (!STACK_INIT(&context, tag_directives_copy, INITIAL_STACK_SIZE))
//            goto error
//        for (tag_directive = tag_directives_start
//                tag_directive != tag_directives_end; tag_directive ++) {
//            assert(tag_directive.handle)
//            assert(tag_directive.prefix)
//            if (!yaml_check_utf8(tag_directive.handle,
//                        strlen((char *)tag_directive.handle)))
//                goto error
//            if (!yaml_check_utf8(tag_directive.prefix,
//                        strlen((char *)tag_directive.prefix)))
//                goto error
//            value.handle = yaml_strdup(tag_directive.handle)
//            value.prefix = yaml_strdup(tag_directive.prefix)
//            if (!value.handle || !value.prefix) goto error
//            if (!PUSH(&context, tag_directives_copy, value))
//                goto error
//            value.handle = NULL
//            value.prefix = NULL
//        }
//    }
//
//    DOCUMENT_INIT(*document, nodes.start, nodes.end, version_directive_copy,
//            tag_directives_copy.start, tag_directives_copy.top,
//            start_implicit, end_implicit, mark, mark)
//
//    return 1
//
//error:
//    STACK_DEL(&context, nodes)
//    yaml_free(version_directive_copy)
//    while (!STACK_EMPTY(&context, tag_directives_copy)) {
//        value yaml_tag_directive_t = POP(&context, tag_directives_copy)
//        yaml_free(value.handle)
//        yaml_free(value.prefix)
//    }
//    STACK_DEL(&context, tag_directives_copy)
//    yaml_free(value.handle)
//    yaml_free(value.prefix)
//
//    return 0
//}
//
///*
// * Destroy a document object.
// */
//
//YAML_DECLARE(void)
//yaml_document_delete(document *yaml_document_t)
//{
//    struct {
//        error yaml_error_type_t
//    } context
//    tag_directive *yaml_tag_directive_t
//
//    context.error = YAML_NO_ERROR // Eliminate a compiler warning.
//
//    assert(document) // Non-NULL document object is expected.
//
//    while (!STACK_EMPTY(&context, document.nodes)) {
//        node yaml_node_t = POP(&context, document.nodes)
//        yaml_free(node.tag)
//        switch (node.type) {
//            case YAML_SCALAR_NODE:
//                yaml_free(node.data.scalar.value)
//                break
//            case YAML_SEQUENCE_NODE:
//                STACK_DEL(&context, node.data.sequence.items)
//                break
//            case YAML_MAPPING_NODE:
//                STACK_DEL(&context, node.data.mapping.pairs)
//                break
//            default:
//                assert(0) // Should not happen.
//        }
//    }
//    STACK_DEL(&context, document.nodes)
//
//    yaml_free(document.version_directive)
//    for (tag_directive = document.tag_directives.start
//            tag_directive != document.tag_directives.end
//            tag_directive++) {
//        yaml_free(tag_directive.handle)
//        yaml_free(tag_directive.prefix)
//    }
//    yaml_free(document.tag_directives.start)
//
//    memset(document, 0, sizeof(yaml_document_t))
//}
//
///**
// * Get a document node.
// */
//
//YAML_DECLARE(yaml_node_t *)
//yaml_document_get_node(document *yaml_document_t, index int)
//{
//    assert(document) // Non-NULL document object is expected.
//
//    if (index > 0 && document.nodes.start + index <= document.nodes.top) {
//        return document.nodes.start + index - 1
//    }
//    return NULL
//}
//
///**
// * Get the root object.
// */
//
//YAML_DECLARE(yaml_node_t *)
//yaml_document_get_root_node(document *yaml_document_t)
//{
//    assert(document) // Non-NULL document object is expected.
//
//    if (document.nodes.top != document.nodes.start) {
//        return document.nodes.start
//    }
//    return NULL
//}
//
///*
// * Add a scalar node to a document.
// */
//
//YAML_DECLARE(int)
//yaml_document_add_scalar(document *yaml_document_t,
//        tag *yaml_char_t, value *yaml_char_t, length int,
//        style yaml_scalar_style_t)
//{
//    struct {
//        error yaml_error_type_t
//    } context
//    mark yaml_mark_t = { 0, 0, 0 }
//    tag_copy *yaml_char_t = NULL
//    value_copy *yaml_char_t = NULL
//    node yaml_node_t
//
//    assert(document) // Non-NULL document object is expected.
//    assert(value) // Non-NULL value is expected.
//
//    if (!tag) {
//        tag = (yaml_char_t *)YAML_DEFAULT_SCALAR_TAG
//    }
//
//    if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error
//    tag_copy = yaml_strdup(tag)
//    if (!tag_copy) goto error
//
//    if (length < 0) {
//        length = strlen((char *)value)
//    }
//
//    if (!yaml_check_utf8(value, length)) goto error
//    value_copy = yaml_malloc(length+1)
//    if (!value_copy) goto error
//    memcpy(value_copy, value, length)
//    value_copy[length] = '\0'
//
//    SCALAR_NODE_INIT(node, tag_copy, value_copy, length, style, mark, mark)
//    if (!PUSH(&context, document.nodes, node)) goto error
//
//    return document.nodes.top - document.nodes.start
//
//error:
//    yaml_free(tag_copy)
//    yaml_free(value_copy)
//
//    return 0
//}
//
///*
// * Add a sequence node to a document.
// */
//
//YAML_DECLARE(int)
//yaml_document_add_sequence(document *yaml_document_t,
//        tag *yaml_char_t, style yaml_sequence_style_t)
//{
//    struct {
//        error yaml_error_type_t
//    } context
//    mark yaml_mark_t = { 0, 0, 0 }
//    tag_copy *yaml_char_t = NULL
//    struct {
//        start *yaml_node_item_t
//        end *yaml_node_item_t
//        top *yaml_node_item_t
//    } items = { NULL, NULL, NULL }
//    node yaml_node_t
//
//    assert(document) // Non-NULL document object is expected.
//
//    if (!tag) {
//        tag = (yaml_char_t *)YAML_DEFAULT_SEQUENCE_TAG
//    }
//
//    if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error
//    tag_copy = yaml_strdup(tag)
//    if (!tag_copy) goto error
//
//    if (!STACK_INIT(&context, items, INITIAL_STACK_SIZE)) goto error
//
//    SEQUENCE_NODE_INIT(node, tag_copy, items.start, items.end,
//            style, mark, mark)
//    if (!PUSH(&context, document.nodes, node)) goto error
//
//    return document.nodes.top - document.nodes.start
//
//error:
//    STACK_DEL(&context, items)
//    yaml_free(tag_copy)
//
//    return 0
//}
//
///*
// * Add a mapping node to a document.
// */
//
//YAML_DECLARE(int)
//yaml_document_add_mapping(document *yaml_document_t,
//        tag *yaml_char_t, style yaml_mapping_style_t)
//{
//    struct {
//        error yaml_error_type_t
//    } context
//    mark yaml_mark_t = { 0, 0, 0 }
//    tag_copy *yaml_char_t = NULL
//    struct {
//        start *yaml_node_pair_t
//        end *yaml_node_pair_t
//        top *yaml_node_pair_t
//    } pairs = { NULL, NULL, NULL }
//    node yaml_node_t
//
//    assert(document) // Non-NULL document object is expected.
//
//    if (!tag) {
//        tag = (yaml_char_t *)YAML_DEFAULT_MAPPING_TAG
//    }
//
//    if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error
//    tag_copy = yaml_strdup(tag)
//    if (!tag_copy) goto error
//
//    if (!STACK_INIT(&context, pairs, INITIAL_STACK_SIZE)) goto error
//
//    MAPPING_NODE_INIT(node, tag_copy, pairs.start, pairs.end,
//            style, mark, mark)
//    if (!PUSH(&context, document.nodes, node)) goto error
//
//    return document.nodes.top - document.nodes.start
//
//error:
//    STACK_DEL(&context, pairs)
//    yaml_free(tag_copy)
//
//    return 0
//}
//
///*
// * Append an item to a sequence node.
// */
//
//YAML_DECLARE(int)
//yaml_document_append_sequence_item(document *yaml_document_t,
//        sequence int, item int)
//{
//    struct {
//        error yaml_error_type_t
//    } context
//
//    assert(document) // Non-NULL document is required.
//    assert(sequence > 0
//            && document.nodes.start + sequence <= document.nodes.top)
//                            // Valid sequence id is required.
//    assert(document.nodes.start[sequence-1].type == YAML_SEQUENCE_NODE)
//                            // A sequence node is required.
//    assert(item > 0 && document.nodes.start + item <= document.nodes.top)
//                            // Valid item id is required.
//
//    if (!PUSH(&context,
//                document.nodes.start[sequence-1].data.sequence.items, item))
//        return 0
//
//    return 1
//}
//
///*
// * Append a pair of a key and a value to a mapping node.
// */
//
//YAML_DECLARE(int)
//yaml_document_append_mapping_pair(document *yaml_document_t,
//        mapping int, key int, value int)
//{
//    struct {
//        error yaml_error_type_t
//    } context
//
//    pair yaml_node_pair_t
//
//    assert(document) // Non-NULL document is required.
//    assert(mapping > 0
//            && document.nodes.start + mapping <= document.nodes.top)
//                            // Valid mapping id is required.
//    assert(document.nodes.start[mapping-1].type == YAML_MAPPING_NODE)
//                            // A mapping node is required.
//    assert(key > 0 && document.nodes.start + key <= document.nodes.top)
//                            // Valid key id is required.
//    assert(value > 0 && document.nodes.start + value <= document.nodes.top)
//                            // Valid value id is required.
//
//    pair.key = key
//    pair.value = value
//
//    if (!PUSH(&context,
//                document.nodes.start[mapping-1].data.mapping.pairs, pair))
//        return 0
//
//    return 1
//}
//
//
   07070100000FF7000081A4000000000000000000000001645E367C00004E29000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v2/decode.go package yaml

import (
	"encoding"
	"encoding/base64"
	"fmt"
	"io"
	"math"
	"reflect"
	"strconv"
	"time"
)

const (
	documentNode = 1 << iota
	mappingNode
	sequenceNode
	scalarNode
	aliasNode
)

type node struct {
	kind         int
	line, column int
	tag          string
	// For an alias node, alias holds the resolved alias.
	alias    *node
	value    string
	implicit bool
	children []*node
	anchors  map[string]*node
}

// ----------------------------------------------------------------------------
// Parser, produces a node tree out of a libyaml event stream.

type parser struct {
	parser   yaml_parser_t
	event    yaml_event_t
	doc      *node
	doneInit bool
}

func newParser(b []byte) *parser {
	p := parser{}
	if !yaml_parser_initialize(&p.parser) {
		panic("failed to initialize YAML emitter")
	}
	if len(b) == 0 {
		b = []byte{'\n'}
	}
	yaml_parser_set_input_string(&p.parser, b)
	return &p
}

func newParserFromReader(r io.Reader) *parser {
	p := parser{}
	if !yaml_parser_initialize(&p.parser) {
		panic("failed to initialize YAML emitter")
	}
	yaml_parser_set_input_reader(&p.parser, r)
	return &p
}

func (p *parser) init() {
	if p.doneInit {
		return
	}
	p.expect(yaml_STREAM_START_EVENT)
	p.doneInit = true
}

func (p *parser) destroy() {
	if p.event.typ != yaml_NO_EVENT {
		yaml_event_delete(&p.event)
	}
	yaml_parser_delete(&p.parser)
}

// expect consumes an event from the event stream and
// checks that it's of the expected type.
func (p *parser) expect(e yaml_event_type_t) {
	if p.event.typ == yaml_NO_EVENT {
		if !yaml_parser_parse(&p.parser, &p.event) {
			p.fail()
		}
	}
	if p.event.typ == yaml_STREAM_END_EVENT {
		failf("attempted to go past the end of stream; corrupted value?")
	}
	if p.event.typ != e {
		p.parser.problem = fmt.Sprintf("expected %s event but got %s", e, p.event.typ)
		p.fail()
	}
	yaml_event_delete(&p.event)
	p.event.typ = yaml_NO_EVENT
}

// peek peeks at the next event in the event stream,
// puts the results into p.event and returns the event type.
func (p *parser) peek() yaml_event_type_t {
	if p.event.typ != yaml_NO_EVENT {
		return p.event.typ
	}
	if !yaml_parser_parse(&p.parser, &p.event) {
		p.fail()
	}
	return p.event.typ
}

func (p *parser) fail() {
	var where string
	var line int
	if p.parser.problem_mark.line != 0 {
		line = p.parser.problem_mark.line
		// Scanner errors don't iterate line before returning error
		if p.parser.error == yaml_SCANNER_ERROR {
			line++
		}
	} else if p.parser.context_mark.line != 0 {
		line = p.parser.context_mark.line
	}
	if line != 0 {
		where = "line " + strconv.Itoa(line) + ": "
	}
	var msg string
	if len(p.parser.problem) > 0 {
		msg = p.parser.problem
	} else {
		msg = "unknown problem parsing YAML content"
	}
	failf("%s%s", where, msg)
}

func (p *parser) anchor(n *node, anchor []byte) {
	if anchor != nil {
		p.doc.anchors[string(anchor)] = n
	}
}

func (p *parser) parse() *node {
	p.init()
	switch p.peek() {
	case yaml_SCALAR_EVENT:
		return p.scalar()
	case yaml_ALIAS_EVENT:
		return p.alias()
	case yaml_MAPPING_START_EVENT:
		return p.mapping()
	case yaml_SEQUENCE_START_EVENT:
		return p.sequence()
	case yaml_DOCUMENT_START_EVENT:
		return p.document()
	case yaml_STREAM_END_EVENT:
		// Happens when attempting to decode an empty buffer.
		return nil
	default:
		panic("attempted to parse unknown event: " + p.event.typ.String())
	}
}

func (p *parser) node(kind int) *node {
	return &node{
		kind:   kind,
		line:   p.event.start_mark.line,
		column: p.event.start_mark.column,
	}
}

func (p *parser) document() *node {
	n := p.node(documentNode)
	n.anchors = make(map[string]*node)
	p.doc = n
	p.expect(yaml_DOCUMENT_START_EVENT)
	n.children = append(n.children, p.parse())
	p.expect(yaml_DOCUMENT_END_EVENT)
	return n
}

func (p *parser) alias() *node {
	n := p.node(aliasNode)
	n.value = string(p.event.anchor)
	n.alias = p.doc.anchors[n.value]
	if n.alias == nil {
		failf("unknown anchor '%s' referenced", n.value)
	}
	p.expect(yaml_ALIAS_EVENT)
	return n
}

func (p *parser) scalar() *node {
	n := p.node(scalarNode)
	n.value = string(p.event.value)
	n.tag = string(p.event.tag)
	n.implicit = p.event.implicit
	p.anchor(n, p.event.anchor)
	p.expect(yaml_SCALAR_EVENT)
	return n
}

func (p *parser) sequence() *node {
	n := p.node(sequenceNode)
	p.anchor(n, p.event.anchor)
	p.expect(yaml_SEQUENCE_START_EVENT)
	for p.peek() != yaml_SEQUENCE_END_EVENT {
		n.children = append(n.children, p.parse())
	}
	p.expect(yaml_SEQUENCE_END_EVENT)
	return n
}

func (p *parser) mapping() *node {
	n := p.node(mappingNode)
	p.anchor(n, p.event.anchor)
	p.expect(yaml_MAPPING_START_EVENT)
	for p.peek() != yaml_MAPPING_END_EVENT {
		n.children = append(n.children, p.parse(), p.parse())
	}
	p.expect(yaml_MAPPING_END_EVENT)
	return n
}

// ----------------------------------------------------------------------------
// Decoder, unmarshals a node into a provided value.

type decoder struct {
	doc     *node
	aliases map[*node]bool
	mapType reflect.Type
	terrors []string
	strict  bool

	decodeCount int
	aliasCount  int
	aliasDepth  int
}

var (
	mapItemType    = reflect.TypeOf(MapItem{})
	durationType   = reflect.TypeOf(time.Duration(0))
	defaultMapType = reflect.TypeOf(map[interface{}]interface{}{})
	ifaceType      = defaultMapType.Elem()
	timeType       = reflect.TypeOf(time.Time{})
	ptrTimeType    = reflect.TypeOf(&time.Time{})
)

func newDecoder(strict bool) *decoder {
	d := &decoder{mapType: defaultMapType, strict: strict}
	d.aliases = make(map[*node]bool)
	return d
}

func (d *decoder) terror(n *node, tag string, out reflect.Value) {
	if n.tag != "" {
		tag = n.tag
	}
	value := n.value
	if tag != yaml_SEQ_TAG && tag != yaml_MAP_TAG {
		if len(value) > 10 {
			value = " `" + value[:7] + "...`"
		} else {
			value = " `" + value + "`"
		}
	}
	d.terrors = append(d.terrors, fmt.Sprintf("line %d: cannot unmarshal %s%s into %s", n.line+1, shortTag(tag), value, out.Type()))
}

func (d *decoder) callUnmarshaler(n *node, u Unmarshaler) (good bool) {
	terrlen := len(d.terrors)
	err := u.UnmarshalYAML(func(v interface{}) (err error) {
		defer handleErr(&err)
		d.unmarshal(n, reflect.ValueOf(v))
		if len(d.terrors) > terrlen {
			issues := d.terrors[terrlen:]
			d.terrors = d.terrors[:terrlen]
			return &TypeError{issues}
		}
		return nil
	})
	if e, ok := err.(*TypeError); ok {
		d.terrors = append(d.terrors, e.Errors...)
		return false
	}
	if err != nil {
		fail(err)
	}
	return true
}

// d.prepare initializes and dereferences pointers and calls UnmarshalYAML
// if a value is found to implement it.
// It returns the initialized and dereferenced out value, whether
// unmarshalling was already done by UnmarshalYAML, and if so whether
// its types unmarshalled appropriately.
//
// If n holds a null value, prepare returns before doing anything.
func (d *decoder) prepare(n *node, out reflect.Value) (newout reflect.Value, unmarshaled, good bool) {
	if n.tag == yaml_NULL_TAG || n.kind == scalarNode && n.tag == "" && (n.value == "null" || n.value == "~" || n.value == "" && n.implicit) {
		return out, false, false
	}
	again := true
	for again {
		again = false
		if out.Kind() == reflect.Ptr {
			if out.IsNil() {
				out.Set(reflect.New(out.Type().Elem()))
			}
			out = out.Elem()
			again = true
		}
		if out.CanAddr() {
			if u, ok := out.Addr().Interface().(Unmarshaler); ok {
				good = d.callUnmarshaler(n, u)
				return out, true, good
			}
		}
	}
	return out, false, false
}

const (
	// 400,000 decode operations is ~500kb of dense object declarations, or
	// ~5kb of dense object declarations with 10000% alias expansion
	alias_ratio_range_low = 400000

	// 4,000,000 decode operations is ~5MB of dense object declarations, or
	// ~4.5MB of dense object declarations with 10% alias expansion
	alias_ratio_range_high = 4000000

	// alias_ratio_range is the range over which we scale allowed alias ratios
	alias_ratio_range = float64(alias_ratio_range_high - alias_ratio_range_low)
)

func allowedAliasRatio(decodeCount int) float64 {
	switch {
	case decodeCount <= alias_ratio_range_low:
		// allow 99% to come from alias expansion for small-to-medium documents
		return 0.99
	case decodeCount >= alias_ratio_range_high:
		// allow 10% to come from alias expansion for very large documents
		return 0.10
	default:
		// scale smoothly from 99% down to 10% over the range.
		// this maps to 396,000 - 400,000 allowed alias-driven decodes over the range.
		// 400,000 decode operations is ~100MB of allocations in worst-case scenarios (single-item maps).
		return 0.99 - 0.89*(float64(decodeCount-alias_ratio_range_low)/alias_ratio_range)
	}
}

func (d *decoder) unmarshal(n *node, out reflect.Value) (good bool) {
	d.decodeCount++
	if d.aliasDepth > 0 {
		d.aliasCount++
	}
	if d.aliasCount > 100 && d.decodeCount > 1000 && float64(d.aliasCount)/float64(d.decodeCount) > allowedAliasRatio(d.decodeCount) {
		failf("document contains excessive aliasing")
	}
	switch n.kind {
	case documentNode:
		return d.document(n, out)
	case aliasNode:
		return d.alias(n, out)
	}
	out, unmarshaled, good := d.prepare(n, out)
	if unmarshaled {
		return good
	}
	switch n.kind {
	case scalarNode:
		good = d.scalar(n, out)
	case mappingNode:
		good = d.mapping(n, out)
	case sequenceNode:
		good = d.sequence(n, out)
	default:
		panic("internal error: unknown node kind: " + strconv.Itoa(n.kind))
	}
	return good
}

func (d *decoder) document(n *node, out reflect.Value) (good bool) {
	if len(n.children) == 1 {
		d.doc = n
		d.unmarshal(n.children[0], out)
		return true
	}
	return false
}

func (d *decoder) alias(n *node, out reflect.Value) (good bool) {
	if d.aliases[n] {
		// TODO this could actually be allowed in some circumstances.
		failf("anchor '%s' value contains itself", n.value)
	}
	d.aliases[n] = true
	d.aliasDepth++
	good = d.unmarshal(n.alias, out)
	d.aliasDepth--
	delete(d.aliases, n)
	return good
}

var zeroValue reflect.Value

func resetMap(out reflect.Value) {
	for _, k := range out.MapKeys() {
		out.SetMapIndex(k, zeroValue)
	}
}

func (d *decoder) scalar(n *node, out reflect.Value) bool {
	var tag string
	var resolved interface{}
	if n.tag == "" && !n.implicit {
		tag = yaml_STR_TAG
		resolved = n.value
	} else {
		tag, resolved = resolve(n.tag, n.value)
		if tag == yaml_BINARY_TAG {
			data, err := base64.StdEncoding.DecodeString(resolved.(string))
			if err != nil {
				failf("!!binary value contains invalid base64 data")
			}
			resolved = string(data)
		}
	}
	if resolved == nil {
		if out.Kind() == reflect.Map && !out.CanAddr() {
			resetMap(out)
		} else {
			out.Set(reflect.Zero(out.Type()))
		}
		return true
	}
	if resolvedv := reflect.ValueOf(resolved); out.Type() == resolvedv.Type() {
		// We've resolved to exactly the type we want, so use that.
		out.Set(resolvedv)
		return true
	}
	// Perhaps we can use the value as a TextUnmarshaler to
	// set its value.
	if out.CanAddr() {
		u, ok := out.Addr().Interface().(encoding.TextUnmarshaler)
		if ok {
			var text []byte
			if tag == yaml_BINARY_TAG {
				text = []byte(resolved.(string))
			} else {
				// We let any value be unmarshaled into TextUnmarshaler.
				// That might be more lax than we'd like, but the
				// TextUnmarshaler itself should bowl out any dubious values.
				text = []byte(n.value)
			}
			err := u.UnmarshalText(text)
			if err != nil {
				fail(err)
			}
			return true
		}
	}
	switch out.Kind() {
	case reflect.String:
		if tag == yaml_BINARY_TAG {
			out.SetString(resolved.(string))
			return true
		}
		if resolved != nil {
			out.SetString(n.value)
			return true
		}
	case reflect.Interface:
		if resolved == nil {
			out.Set(reflect.Zero(out.Type()))
		} else if tag == yaml_TIMESTAMP_TAG {
			// It looks like a timestamp but for backward compatibility
			// reasons we set it as a string, so that code that unmarshals
			// timestamp-like values into interface{} will continue to
			// see a string and not a time.Time.
			// TODO(v3) Drop this.
			out.Set(reflect.ValueOf(n.value))
		} else {
			out.Set(reflect.ValueOf(resolved))
		}
		return true
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		switch resolved := resolved.(type) {
		case int:
			if !out.OverflowInt(int64(resolved)) {
				out.SetInt(int64(resolved))
				return true
			}
		case int64:
			if !out.OverflowInt(resolved) {
				out.SetInt(resolved)
				return true
			}
		case uint64:
			if resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) {
				out.SetInt(int64(resolved))
				return true
			}
		case float64:
			if resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) {
				out.SetInt(int64(resolved))
				return true
			}
		case string:
			if out.Type() == durationType {
				d, err := time.ParseDuration(resolved)
				if err == nil {
					out.SetInt(int64(d))
					return true
				}
			}
		}
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		switch resolved := resolved.(type) {
		case int:
			if resolved >= 0 && !out.OverflowUint(uint64(resolved)) {
				out.SetUint(uint64(resolved))
				return true
			}
		case int64:
			if resolved >= 0 && !out.OverflowUint(uint64(resolved)) {
				out.SetUint(uint64(resolved))
				return true
			}
		case uint64:
			if !out.OverflowUint(uint64(resolved)) {
				out.SetUint(uint64(resolved))
				return true
			}
		case float64:
			if resolved <= math.MaxUint64 && !out.OverflowUint(uint64(resolved)) {
				out.SetUint(uint64(resolved))
				return true
			}
		}
	case reflect.Bool:
		switch resolved := resolved.(type) {
		case bool:
			out.SetBool(resolved)
			return true
		}
	case reflect.Float32, reflect.Float64:
		switch resolved := resolved.(type) {
		case int:
			out.SetFloat(float64(resolved))
			return true
		case int64:
			out.SetFloat(float64(resolved))
			return true
		case uint64:
			out.SetFloat(float64(resolved))
			return true
		case float64:
			out.SetFloat(resolved)
			return true
		}
	case reflect.Struct:
		if resolvedv := reflect.ValueOf(resolved); out.Type() == resolvedv.Type() {
			out.Set(resolvedv)
			return true
		}
	case reflect.Ptr:
		if out.Type().Elem() == reflect.TypeOf(resolved) {
			// TODO DOes this make sense? When is out a Ptr except when decoding a nil value?
			elem := reflect.New(out.Type().Elem())
			elem.Elem().Set(reflect.ValueOf(resolved))
			out.Set(elem)
			return true
		}
	}
	d.terror(n, tag, out)
	return false
}

func settableValueOf(i interface{}) reflect.Value {
	v := reflect.ValueOf(i)
	sv := reflect.New(v.Type()).Elem()
	sv.Set(v)
	return sv
}

func (d *decoder) sequence(n *node, out reflect.Value) (good bool) {
	l := len(n.children)

	var iface reflect.Value
	switch out.Kind() {
	case reflect.Slice:
		out.Set(reflect.MakeSlice(out.Type(), l, l))
	case reflect.Array:
		if l != out.Len() {
			failf("invalid array: want %d elements but got %d", out.Len(), l)
		}
	case reflect.Interface:
		// No type hints. Will have to use a generic sequence.
		iface = out
		out = settableValueOf(make([]interface{}, l))
	default:
		d.terror(n, yaml_SEQ_TAG, out)
		return false
	}
	et := out.Type().Elem()

	j := 0
	for i := 0; i < l; i++ {
		e := reflect.New(et).Elem()
		if ok := d.unmarshal(n.children[i], e); ok {
			out.Index(j).Set(e)
			j++
		}
	}
	if out.Kind() != reflect.Array {
		out.Set(out.Slice(0, j))
	}
	if iface.IsValid() {
		iface.Set(out)
	}
	return true
}

func (d *decoder) mapping(n *node, out reflect.Value) (good bool) {
	switch out.Kind() {
	case reflect.Struct:
		return d.mappingStruct(n, out)
	case reflect.Slice:
		return d.mappingSlice(n, out)
	case reflect.Map:
		// okay
	case reflect.Interface:
		if d.mapType.Kind() == reflect.Map {
			iface := out
			out = reflect.MakeMap(d.mapType)
			iface.Set(out)
		} else {
			slicev := reflect.New(d.mapType).Elem()
			if !d.mappingSlice(n, slicev) {
				return false
			}
			out.Set(slicev)
			return true
		}
	default:
		d.terror(n, yaml_MAP_TAG, out)
		return false
	}
	outt := out.Type()
	kt := outt.Key()
	et := outt.Elem()

	mapType := d.mapType
	if outt.Key() == ifaceType && outt.Elem() == ifaceType {
		d.mapType = outt
	}

	if out.IsNil() {
		out.Set(reflect.MakeMap(outt))
	}
	l := len(n.children)
	for i := 0; i < l; i += 2 {
		if isMerge(n.children[i]) {
			d.merge(n.children[i+1], out)
			continue
		}
		k := reflect.New(kt).Elem()
		if d.unmarshal(n.children[i], k) {
			kkind := k.Kind()
			if kkind == reflect.Interface {
				kkind = k.Elem().Kind()
			}
			if kkind == reflect.Map || kkind == reflect.Slice {
				failf("invalid map key: %#v", k.Interface())
			}
			e := reflect.New(et).Elem()
			if d.unmarshal(n.children[i+1], e) {
				d.setMapIndex(n.children[i+1], out, k, e)
			}
		}
	}
	d.mapType = mapType
	return true
}

func (d *decoder) setMapIndex(n *node, out, k, v reflect.Value) {
	if d.strict && out.MapIndex(k) != zeroValue {
		d.terrors = append(d.terrors, fmt.Sprintf("line %d: key %#v already set in map", n.line+1, k.Interface()))
		return
	}
	out.SetMapIndex(k, v)
}

func (d *decoder) mappingSlice(n *node, out reflect.Value) (good bool) {
	outt := out.Type()
	if outt.Elem() != mapItemType {
		d.terror(n, yaml_MAP_TAG, out)
		return false
	}

	mapType := d.mapType
	d.mapType = outt

	var slice []MapItem
	var l = len(n.children)
	for i := 0; i < l; i += 2 {
		if isMerge(n.children[i]) {
			d.merge(n.children[i+1], out)
			continue
		}
		item := MapItem{}
		k := reflect.ValueOf(&item.Key).Elem()
		if d.unmarshal(n.children[i], k) {
			v := reflect.ValueOf(&item.Value).Elem()
			if d.unmarshal(n.children[i+1], v) {
				slice = append(slice, item)
			}
		}
	}
	out.Set(reflect.ValueOf(slice))
	d.mapType = mapType
	return true
}

func (d *decoder) mappingStruct(n *node, out reflect.Value) (good bool) {
	sinfo, err := getStructInfo(out.Type())
	if err != nil {
		panic(err)
	}
	name := settableValueOf("")
	l := len(n.children)

	var inlineMap reflect.Value
	var elemType reflect.Type
	if sinfo.InlineMap != -1 {
		inlineMap = out.Field(sinfo.InlineMap)
		inlineMap.Set(reflect.New(inlineMap.Type()).Elem())
		elemType = inlineMap.Type().Elem()
	}

	var doneFields []bool
	if d.strict {
		doneFields = make([]bool, len(sinfo.FieldsList))
	}
	for i := 0; i < l; i += 2 {
		ni := n.children[i]
		if isMerge(ni) {
			d.merge(n.children[i+1], out)
			continue
		}
		if !d.unmarshal(ni, name) {
			continue
		}
		if info, ok := sinfo.FieldsMap[name.String()]; ok {
			if d.strict {
				if doneFields[info.Id] {
					d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s already set in type %s", ni.line+1, name.String(), out.Type()))
					continue
				}
				doneFields[info.Id] = true
			}
			var field reflect.Value
			if info.Inline == nil {
				field = out.Field(info.Num)
			} else {
				field = out.FieldByIndex(info.Inline)
			}
			d.unmarshal(n.children[i+1], field)
		} else if sinfo.InlineMap != -1 {
			if inlineMap.IsNil() {
				inlineMap.Set(reflect.MakeMap(inlineMap.Type()))
			}
			value := reflect.New(elemType).Elem()
			d.unmarshal(n.children[i+1], value)
			d.setMapIndex(n.children[i+1], inlineMap, name, value)
		} else if d.strict {
			d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s not found in type %s", ni.line+1, name.String(), out.Type()))
		}
	}
	return true
}

func failWantMap() {
	failf("map merge requires map or sequence of maps as the value")
}

func (d *decoder) merge(n *node, out reflect.Value) {
	switch n.kind {
	case mappingNode:
		d.unmarshal(n, out)
	case aliasNode:
		if n.alias != nil && n.alias.kind != mappingNode {
			failWantMap()
		}
		d.unmarshal(n, out)
	case sequenceNode:
		// Step backwards as earlier nodes take precedence.
		for i := len(n.children) - 1; i >= 0; i-- {
			ni := n.children[i]
			if ni.kind == aliasNode {
				if ni.alias != nil && ni.alias.kind != mappingNode {
					failWantMap()
				}
			} else if ni.kind != mappingNode {
				failWantMap()
			}
			d.unmarshal(ni, out)
		}
	default:
		failWantMap()
	}
}

func isMerge(n *node) bool {
	return n.kind == scalarNode && n.value == "<<" && (n.implicit == true || n.tag == yaml_MERGE_TAG)
}
   07070100000FF8000081A4000000000000000000000001645E367C0000B113000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v2/emitterc.go   package yaml

import (
	"bytes"
	"fmt"
)

// Flush the buffer if needed.
func flush(emitter *yaml_emitter_t) bool {
	if emitter.buffer_pos+5 >= len(emitter.buffer) {
		return yaml_emitter_flush(emitter)
	}
	return true
}

// Put a character to the output buffer.
func put(emitter *yaml_emitter_t, value byte) bool {
	if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) {
		return false
	}
	emitter.buffer[emitter.buffer_pos] = value
	emitter.buffer_pos++
	emitter.column++
	return true
}

// Put a line break to the output buffer.
func put_break(emitter *yaml_emitter_t) bool {
	if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) {
		return false
	}
	switch emitter.line_break {
	case yaml_CR_BREAK:
		emitter.buffer[emitter.buffer_pos] = '\r'
		emitter.buffer_pos += 1
	case yaml_LN_BREAK:
		emitter.buffer[emitter.buffer_pos] = '\n'
		emitter.buffer_pos += 1
	case yaml_CRLN_BREAK:
		emitter.buffer[emitter.buffer_pos+0] = '\r'
		emitter.buffer[emitter.buffer_pos+1] = '\n'
		emitter.buffer_pos += 2
	default:
		panic("unknown line break setting")
	}
	emitter.column = 0
	emitter.line++
	return true
}

// Copy a character from a string into buffer.
func write(emitter *yaml_emitter_t, s []byte, i *int) bool {
	if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) {
		return false
	}
	p := emitter.buffer_pos
	w := width(s[*i])
	switch w {
	case 4:
		emitter.buffer[p+3] = s[*i+3]
		fallthrough
	case 3:
		emitter.buffer[p+2] = s[*i+2]
		fallthrough
	case 2:
		emitter.buffer[p+1] = s[*i+1]
		fallthrough
	case 1:
		emitter.buffer[p+0] = s[*i+0]
	default:
		panic("unknown character width")
	}
	emitter.column++
	emitter.buffer_pos += w
	*i += w
	return true
}

// Write a whole string into buffer.
func write_all(emitter *yaml_emitter_t, s []byte) bool {
	for i := 0; i < len(s); {
		if !write(emitter, s, &i) {
			return false
		}
	}
	return true
}

// Copy a line break character from a string into buffer.
func write_break(emitter *yaml_emitter_t, s []byte, i *int) bool {
	if s[*i] == '\n' {
		if !put_break(emitter) {
			return false
		}
		*i++
	} else {
		if !write(emitter, s, i) {
			return false
		}
		emitter.column = 0
		emitter.line++
	}
	return true
}

// Set an emitter error and return false.
func yaml_emitter_set_emitter_error(emitter *yaml_emitter_t, problem string) bool {
	emitter.error = yaml_EMITTER_ERROR
	emitter.problem = problem
	return false
}

// Emit an event.
func yaml_emitter_emit(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	emitter.events = append(emitter.events, *event)
	for !yaml_emitter_need_more_events(emitter) {
		event := &emitter.events[emitter.events_head]
		if !yaml_emitter_analyze_event(emitter, event) {
			return false
		}
		if !yaml_emitter_state_machine(emitter, event) {
			return false
		}
		yaml_event_delete(event)
		emitter.events_head++
	}
	return true
}

// Check if we need to accumulate more events before emitting.
//
// We accumulate extra
//  - 1 event for DOCUMENT-START
//  - 2 events for SEQUENCE-START
//  - 3 events for MAPPING-START
//
func yaml_emitter_need_more_events(emitter *yaml_emitter_t) bool {
	if emitter.events_head == len(emitter.events) {
		return true
	}
	var accumulate int
	switch emitter.events[emitter.events_head].typ {
	case yaml_DOCUMENT_START_EVENT:
		accumulate = 1
		break
	case yaml_SEQUENCE_START_EVENT:
		accumulate = 2
		break
	case yaml_MAPPING_START_EVENT:
		accumulate = 3
		break
	default:
		return false
	}
	if len(emitter.events)-emitter.events_head > accumulate {
		return false
	}
	var level int
	for i := emitter.events_head; i < len(emitter.events); i++ {
		switch emitter.events[i].typ {
		case yaml_STREAM_START_EVENT, yaml_DOCUMENT_START_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT:
			level++
		case yaml_STREAM_END_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_END_EVENT, yaml_MAPPING_END_EVENT:
			level--
		}
		if level == 0 {
			return false
		}
	}
	return true
}

// Append a directive to the directives stack.
func yaml_emitter_append_tag_directive(emitter *yaml_emitter_t, value *yaml_tag_directive_t, allow_duplicates bool) bool {
	for i := 0; i < len(emitter.tag_directives); i++ {
		if bytes.Equal(value.handle, emitter.tag_directives[i].handle) {
			if allow_duplicates {
				return true
			}
			return yaml_emitter_set_emitter_error(emitter, "duplicate %TAG directive")
		}
	}

	// [Go] Do we actually need to copy this given garbage collection
	// and the lack of deallocating destructors?
	tag_copy := yaml_tag_directive_t{
		handle: make([]byte, len(value.handle)),
		prefix: make([]byte, len(value.prefix)),
	}
	copy(tag_copy.handle, value.handle)
	copy(tag_copy.prefix, value.prefix)
	emitter.tag_directives = append(emitter.tag_directives, tag_copy)
	return true
}

// Increase the indentation level.
func yaml_emitter_increase_indent(emitter *yaml_emitter_t, flow, indentless bool) bool {
	emitter.indents = append(emitter.indents, emitter.indent)
	if emitter.indent < 0 {
		if flow {
			emitter.indent = emitter.best_indent
		} else {
			emitter.indent = 0
		}
	} else if !indentless {
		emitter.indent += emitter.best_indent
	}
	return true
}

// State dispatcher.
func yaml_emitter_state_machine(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	switch emitter.state {
	default:
	case yaml_EMIT_STREAM_START_STATE:
		return yaml_emitter_emit_stream_start(emitter, event)

	case yaml_EMIT_FIRST_DOCUMENT_START_STATE:
		return yaml_emitter_emit_document_start(emitter, event, true)

	case yaml_EMIT_DOCUMENT_START_STATE:
		return yaml_emitter_emit_document_start(emitter, event, false)

	case yaml_EMIT_DOCUMENT_CONTENT_STATE:
		return yaml_emitter_emit_document_content(emitter, event)

	case yaml_EMIT_DOCUMENT_END_STATE:
		return yaml_emitter_emit_document_end(emitter, event)

	case yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE:
		return yaml_emitter_emit_flow_sequence_item(emitter, event, true)

	case yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE:
		return yaml_emitter_emit_flow_sequence_item(emitter, event, false)

	case yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE:
		return yaml_emitter_emit_flow_mapping_key(emitter, event, true)

	case yaml_EMIT_FLOW_MAPPING_KEY_STATE:
		return yaml_emitter_emit_flow_mapping_key(emitter, event, false)

	case yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE:
		return yaml_emitter_emit_flow_mapping_value(emitter, event, true)

	case yaml_EMIT_FLOW_MAPPING_VALUE_STATE:
		return yaml_emitter_emit_flow_mapping_value(emitter, event, false)

	case yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE:
		return yaml_emitter_emit_block_sequence_item(emitter, event, true)

	case yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE:
		return yaml_emitter_emit_block_sequence_item(emitter, event, false)

	case yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE:
		return yaml_emitter_emit_block_mapping_key(emitter, event, true)

	case yaml_EMIT_BLOCK_MAPPING_KEY_STATE:
		return yaml_emitter_emit_block_mapping_key(emitter, event, false)

	case yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE:
		return yaml_emitter_emit_block_mapping_value(emitter, event, true)

	case yaml_EMIT_BLOCK_MAPPING_VALUE_STATE:
		return yaml_emitter_emit_block_mapping_value(emitter, event, false)

	case yaml_EMIT_END_STATE:
		return yaml_emitter_set_emitter_error(emitter, "expected nothing after STREAM-END")
	}
	panic("invalid emitter state")
}

// Expect STREAM-START.
func yaml_emitter_emit_stream_start(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	if event.typ != yaml_STREAM_START_EVENT {
		return yaml_emitter_set_emitter_error(emitter, "expected STREAM-START")
	}
	if emitter.encoding == yaml_ANY_ENCODING {
		emitter.encoding = event.encoding
		if emitter.encoding == yaml_ANY_ENCODING {
			emitter.encoding = yaml_UTF8_ENCODING
		}
	}
	if emitter.best_indent < 2 || emitter.best_indent > 9 {
		emitter.best_indent = 2
	}
	if emitter.best_width >= 0 && emitter.best_width <= emitter.best_indent*2 {
		emitter.best_width = 80
	}
	if emitter.best_width < 0 {
		emitter.best_width = 1<<31 - 1
	}
	if emitter.line_break == yaml_ANY_BREAK {
		emitter.line_break = yaml_LN_BREAK
	}

	emitter.indent = -1
	emitter.line = 0
	emitter.column = 0
	emitter.whitespace = true
	emitter.indention = true

	if emitter.encoding != yaml_UTF8_ENCODING {
		if !yaml_emitter_write_bom(emitter) {
			return false
		}
	}
	emitter.state = yaml_EMIT_FIRST_DOCUMENT_START_STATE
	return true
}

// Expect DOCUMENT-START or STREAM-END.
func yaml_emitter_emit_document_start(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {

	if event.typ == yaml_DOCUMENT_START_EVENT {

		if event.version_directive != nil {
			if !yaml_emitter_analyze_version_directive(emitter, event.version_directive) {
				return false
			}
		}

		for i := 0; i < len(event.tag_directives); i++ {
			tag_directive := &event.tag_directives[i]
			if !yaml_emitter_analyze_tag_directive(emitter, tag_directive) {
				return false
			}
			if !yaml_emitter_append_tag_directive(emitter, tag_directive, false) {
				return false
			}
		}

		for i := 0; i < len(default_tag_directives); i++ {
			tag_directive := &default_tag_directives[i]
			if !yaml_emitter_append_tag_directive(emitter, tag_directive, true) {
				return false
			}
		}

		implicit := event.implicit
		if !first || emitter.canonical {
			implicit = false
		}

		if emitter.open_ended && (event.version_directive != nil || len(event.tag_directives) > 0) {
			if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) {
				return false
			}
			if !yaml_emitter_write_indent(emitter) {
				return false
			}
		}

		if event.version_directive != nil {
			implicit = false
			if !yaml_emitter_write_indicator(emitter, []byte("%YAML"), true, false, false) {
				return false
			}
			if !yaml_emitter_write_indicator(emitter, []byte("1.1"), true, false, false) {
				return false
			}
			if !yaml_emitter_write_indent(emitter) {
				return false
			}
		}

		if len(event.tag_directives) > 0 {
			implicit = false
			for i := 0; i < len(event.tag_directives); i++ {
				tag_directive := &event.tag_directives[i]
				if !yaml_emitter_write_indicator(emitter, []byte("%TAG"), true, false, false) {
					return false
				}
				if !yaml_emitter_write_tag_handle(emitter, tag_directive.handle) {
					return false
				}
				if !yaml_emitter_write_tag_content(emitter, tag_directive.prefix, true) {
					return false
				}
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
			}
		}

		if yaml_emitter_check_empty_document(emitter) {
			implicit = false
		}
		if !implicit {
			if !yaml_emitter_write_indent(emitter) {
				return false
			}
			if !yaml_emitter_write_indicator(emitter, []byte("---"), true, false, false) {
				return false
			}
			if emitter.canonical {
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
			}
		}

		emitter.state = yaml_EMIT_DOCUMENT_CONTENT_STATE
		return true
	}

	if event.typ == yaml_STREAM_END_EVENT {
		if emitter.open_ended {
			if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) {
				return false
			}
			if !yaml_emitter_write_indent(emitter) {
				return false
			}
		}
		if !yaml_emitter_flush(emitter) {
			return false
		}
		emitter.state = yaml_EMIT_END_STATE
		return true
	}

	return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-START or STREAM-END")
}

// Expect the root node.
func yaml_emitter_emit_document_content(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	emitter.states = append(emitter.states, yaml_EMIT_DOCUMENT_END_STATE)
	return yaml_emitter_emit_node(emitter, event, true, false, false, false)
}

// Expect DOCUMENT-END.
func yaml_emitter_emit_document_end(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	if event.typ != yaml_DOCUMENT_END_EVENT {
		return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-END")
	}
	if !yaml_emitter_write_indent(emitter) {
		return false
	}
	if !event.implicit {
		// [Go] Allocate the slice elsewhere.
		if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) {
			return false
		}
		if !yaml_emitter_write_indent(emitter) {
			return false
		}
	}
	if !yaml_emitter_flush(emitter) {
		return false
	}
	emitter.state = yaml_EMIT_DOCUMENT_START_STATE
	emitter.tag_directives = emitter.tag_directives[:0]
	return true
}

// Expect a flow item node.
func yaml_emitter_emit_flow_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {
	if first {
		if !yaml_emitter_write_indicator(emitter, []byte{'['}, true, true, false) {
			return false
		}
		if !yaml_emitter_increase_indent(emitter, true, false) {
			return false
		}
		emitter.flow_level++
	}

	if event.typ == yaml_SEQUENCE_END_EVENT {
		emitter.flow_level--
		emitter.indent = emitter.indents[len(emitter.indents)-1]
		emitter.indents = emitter.indents[:len(emitter.indents)-1]
		if emitter.canonical && !first {
			if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {
				return false
			}
			if !yaml_emitter_write_indent(emitter) {
				return false
			}
		}
		if !yaml_emitter_write_indicator(emitter, []byte{']'}, false, false, false) {
			return false
		}
		emitter.state = emitter.states[len(emitter.states)-1]
		emitter.states = emitter.states[:len(emitter.states)-1]

		return true
	}

	if !first {
		if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {
			return false
		}
	}

	if emitter.canonical || emitter.column > emitter.best_width {
		if !yaml_emitter_write_indent(emitter) {
			return false
		}
	}
	emitter.states = append(emitter.states, yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE)
	return yaml_emitter_emit_node(emitter, event, false, true, false, false)
}

// Expect a flow key node.
func yaml_emitter_emit_flow_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {
	if first {
		if !yaml_emitter_write_indicator(emitter, []byte{'{'}, true, true, false) {
			return false
		}
		if !yaml_emitter_increase_indent(emitter, true, false) {
			return false
		}
		emitter.flow_level++
	}

	if event.typ == yaml_MAPPING_END_EVENT {
		emitter.flow_level--
		emitter.indent = emitter.indents[len(emitter.indents)-1]
		emitter.indents = emitter.indents[:len(emitter.indents)-1]
		if emitter.canonical && !first {
			if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {
				return false
			}
			if !yaml_emitter_write_indent(emitter) {
				return false
			}
		}
		if !yaml_emitter_write_indicator(emitter, []byte{'}'}, false, false, false) {
			return false
		}
		emitter.state = emitter.states[len(emitter.states)-1]
		emitter.states = emitter.states[:len(emitter.states)-1]
		return true
	}

	if !first {
		if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {
			return false
		}
	}
	if emitter.canonical || emitter.column > emitter.best_width {
		if !yaml_emitter_write_indent(emitter) {
			return false
		}
	}

	if !emitter.canonical && yaml_emitter_check_simple_key(emitter) {
		emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE)
		return yaml_emitter_emit_node(emitter, event, false, false, true, true)
	}
	if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, false) {
		return false
	}
	emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_VALUE_STATE)
	return yaml_emitter_emit_node(emitter, event, false, false, true, false)
}

// Expect a flow value node.
func yaml_emitter_emit_flow_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool {
	if simple {
		if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) {
			return false
		}
	} else {
		if emitter.canonical || emitter.column > emitter.best_width {
			if !yaml_emitter_write_indent(emitter) {
				return false
			}
		}
		if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, false) {
			return false
		}
	}
	emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_KEY_STATE)
	return yaml_emitter_emit_node(emitter, event, false, false, true, false)
}

// Expect a block item node.
func yaml_emitter_emit_block_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {
	if first {
		if !yaml_emitter_increase_indent(emitter, false, emitter.mapping_context && !emitter.indention) {
			return false
		}
	}
	if event.typ == yaml_SEQUENCE_END_EVENT {
		emitter.indent = emitter.indents[len(emitter.indents)-1]
		emitter.indents = emitter.indents[:len(emitter.indents)-1]
		emitter.state = emitter.states[len(emitter.states)-1]
		emitter.states = emitter.states[:len(emitter.states)-1]
		return true
	}
	if !yaml_emitter_write_indent(emitter) {
		return false
	}
	if !yaml_emitter_write_indicator(emitter, []byte{'-'}, true, false, true) {
		return false
	}
	emitter.states = append(emitter.states, yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE)
	return yaml_emitter_emit_node(emitter, event, false, true, false, false)
}

// Expect a block key node.
func yaml_emitter_emit_block_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {
	if first {
		if !yaml_emitter_increase_indent(emitter, false, false) {
			return false
		}
	}
	if event.typ == yaml_MAPPING_END_EVENT {
		emitter.indent = emitter.indents[len(emitter.indents)-1]
		emitter.indents = emitter.indents[:len(emitter.indents)-1]
		emitter.state = emitter.states[len(emitter.states)-1]
		emitter.states = emitter.states[:len(emitter.states)-1]
		return true
	}
	if !yaml_emitter_write_indent(emitter) {
		return false
	}
	if yaml_emitter_check_simple_key(emitter) {
		emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE)
		return yaml_emitter_emit_node(emitter, event, false, false, true, true)
	}
	if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, true) {
		return false
	}
	emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_VALUE_STATE)
	return yaml_emitter_emit_node(emitter, event, false, false, true, false)
}

// Expect a block value node.
func yaml_emitter_emit_block_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool {
	if simple {
		if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) {
			return false
		}
	} else {
		if !yaml_emitter_write_indent(emitter) {
			return false
		}
		if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, true) {
			return false
		}
	}
	emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_KEY_STATE)
	return yaml_emitter_emit_node(emitter, event, false, false, true, false)
}

// Expect a node.
func yaml_emitter_emit_node(emitter *yaml_emitter_t, event *yaml_event_t,
	root bool, sequence bool, mapping bool, simple_key bool) bool {

	emitter.root_context = root
	emitter.sequence_context = sequence
	emitter.mapping_context = mapping
	emitter.simple_key_context = simple_key

	switch event.typ {
	case yaml_ALIAS_EVENT:
		return yaml_emitter_emit_alias(emitter, event)
	case yaml_SCALAR_EVENT:
		return yaml_emitter_emit_scalar(emitter, event)
	case yaml_SEQUENCE_START_EVENT:
		return yaml_emitter_emit_sequence_start(emitter, event)
	case yaml_MAPPING_START_EVENT:
		return yaml_emitter_emit_mapping_start(emitter, event)
	default:
		return yaml_emitter_set_emitter_error(emitter,
			fmt.Sprintf("expected SCALAR, SEQUENCE-START, MAPPING-START, or ALIAS, but got %v", event.typ))
	}
}

// Expect ALIAS.
func yaml_emitter_emit_alias(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	if !yaml_emitter_process_anchor(emitter) {
		return false
	}
	emitter.state = emitter.states[len(emitter.states)-1]
	emitter.states = emitter.states[:len(emitter.states)-1]
	return true
}

// Expect SCALAR.
func yaml_emitter_emit_scalar(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	if !yaml_emitter_select_scalar_style(emitter, event) {
		return false
	}
	if !yaml_emitter_process_anchor(emitter) {
		return false
	}
	if !yaml_emitter_process_tag(emitter) {
		return false
	}
	if !yaml_emitter_increase_indent(emitter, true, false) {
		return false
	}
	if !yaml_emitter_process_scalar(emitter) {
		return false
	}
	emitter.indent = emitter.indents[len(emitter.indents)-1]
	emitter.indents = emitter.indents[:len(emitter.indents)-1]
	emitter.state = emitter.states[len(emitter.states)-1]
	emitter.states = emitter.states[:len(emitter.states)-1]
	return true
}

// Expect SEQUENCE-START.
func yaml_emitter_emit_sequence_start(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	if !yaml_emitter_process_anchor(emitter) {
		return false
	}
	if !yaml_emitter_process_tag(emitter) {
		return false
	}
	if emitter.flow_level > 0 || emitter.canonical || event.sequence_style() == yaml_FLOW_SEQUENCE_STYLE ||
		yaml_emitter_check_empty_sequence(emitter) {
		emitter.state = yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE
	} else {
		emitter.state = yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE
	}
	return true
}

// Expect MAPPING-START.
func yaml_emitter_emit_mapping_start(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	if !yaml_emitter_process_anchor(emitter) {
		return false
	}
	if !yaml_emitter_process_tag(emitter) {
		return false
	}
	if emitter.flow_level > 0 || emitter.canonical || event.mapping_style() == yaml_FLOW_MAPPING_STYLE ||
		yaml_emitter_check_empty_mapping(emitter) {
		emitter.state = yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE
	} else {
		emitter.state = yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE
	}
	return true
}

// Check if the document content is an empty scalar.
func yaml_emitter_check_empty_document(emitter *yaml_emitter_t) bool {
	return false // [Go] Huh?
}

// Check if the next events represent an empty sequence.
func yaml_emitter_check_empty_sequence(emitter *yaml_emitter_t) bool {
	if len(emitter.events)-emitter.events_head < 2 {
		return false
	}
	return emitter.events[emitter.events_head].typ == yaml_SEQUENCE_START_EVENT &&
		emitter.events[emitter.events_head+1].typ == yaml_SEQUENCE_END_EVENT
}

// Check if the next events represent an empty mapping.
func yaml_emitter_check_empty_mapping(emitter *yaml_emitter_t) bool {
	if len(emitter.events)-emitter.events_head < 2 {
		return false
	}
	return emitter.events[emitter.events_head].typ == yaml_MAPPING_START_EVENT &&
		emitter.events[emitter.events_head+1].typ == yaml_MAPPING_END_EVENT
}

// Check if the next node can be expressed as a simple key.
func yaml_emitter_check_simple_key(emitter *yaml_emitter_t) bool {
	length := 0
	switch emitter.events[emitter.events_head].typ {
	case yaml_ALIAS_EVENT:
		length += len(emitter.anchor_data.anchor)
	case yaml_SCALAR_EVENT:
		if emitter.scalar_data.multiline {
			return false
		}
		length += len(emitter.anchor_data.anchor) +
			len(emitter.tag_data.handle) +
			len(emitter.tag_data.suffix) +
			len(emitter.scalar_data.value)
	case yaml_SEQUENCE_START_EVENT:
		if !yaml_emitter_check_empty_sequence(emitter) {
			return false
		}
		length += len(emitter.anchor_data.anchor) +
			len(emitter.tag_data.handle) +
			len(emitter.tag_data.suffix)
	case yaml_MAPPING_START_EVENT:
		if !yaml_emitter_check_empty_mapping(emitter) {
			return false
		}
		length += len(emitter.anchor_data.anchor) +
			len(emitter.tag_data.handle) +
			len(emitter.tag_data.suffix)
	default:
		return false
	}
	return length <= 128
}

// Determine an acceptable scalar style.
func yaml_emitter_select_scalar_style(emitter *yaml_emitter_t, event *yaml_event_t) bool {

	no_tag := len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0
	if no_tag && !event.implicit && !event.quoted_implicit {
		return yaml_emitter_set_emitter_error(emitter, "neither tag nor implicit flags are specified")
	}

	style := event.scalar_style()
	if style == yaml_ANY_SCALAR_STYLE {
		style = yaml_PLAIN_SCALAR_STYLE
	}
	if emitter.canonical {
		style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
	}
	if emitter.simple_key_context && emitter.scalar_data.multiline {
		style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
	}

	if style == yaml_PLAIN_SCALAR_STYLE {
		if emitter.flow_level > 0 && !emitter.scalar_data.flow_plain_allowed ||
			emitter.flow_level == 0 && !emitter.scalar_data.block_plain_allowed {
			style = yaml_SINGLE_QUOTED_SCALAR_STYLE
		}
		if len(emitter.scalar_data.value) == 0 && (emitter.flow_level > 0 || emitter.simple_key_context) {
			style = yaml_SINGLE_QUOTED_SCALAR_STYLE
		}
		if no_tag && !event.implicit {
			style = yaml_SINGLE_QUOTED_SCALAR_STYLE
		}
	}
	if style == yaml_SINGLE_QUOTED_SCALAR_STYLE {
		if !emitter.scalar_data.single_quoted_allowed {
			style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
		}
	}
	if style == yaml_LITERAL_SCALAR_STYLE || style == yaml_FOLDED_SCALAR_STYLE {
		if !emitter.scalar_data.block_allowed || emitter.flow_level > 0 || emitter.simple_key_context {
			style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
		}
	}

	if no_tag && !event.quoted_implicit && style != yaml_PLAIN_SCALAR_STYLE {
		emitter.tag_data.handle = []byte{'!'}
	}
	emitter.scalar_data.style = style
	return true
}

// Write an anchor.
func yaml_emitter_process_anchor(emitter *yaml_emitter_t) bool {
	if emitter.anchor_data.anchor == nil {
		return true
	}
	c := []byte{'&'}
	if emitter.anchor_data.alias {
		c[0] = '*'
	}
	if !yaml_emitter_write_indicator(emitter, c, true, false, false) {
		return false
	}
	return yaml_emitter_write_anchor(emitter, emitter.anchor_data.anchor)
}

// Write a tag.
func yaml_emitter_process_tag(emitter *yaml_emitter_t) bool {
	if len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 {
		return true
	}
	if len(emitter.tag_data.handle) > 0 {
		if !yaml_emitter_write_tag_handle(emitter, emitter.tag_data.handle) {
			return false
		}
		if len(emitter.tag_data.suffix) > 0 {
			if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) {
				return false
			}
		}
	} else {
		// [Go] Allocate these slices elsewhere.
		if !yaml_emitter_write_indicator(emitter, []byte("!<"), true, false, false) {
			return false
		}
		if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) {
			return false
		}
		if !yaml_emitter_write_indicator(emitter, []byte{'>'}, false, false, false) {
			return false
		}
	}
	return true
}

// Write a scalar.
func yaml_emitter_process_scalar(emitter *yaml_emitter_t) bool {
	switch emitter.scalar_data.style {
	case yaml_PLAIN_SCALAR_STYLE:
		return yaml_emitter_write_plain_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context)

	case yaml_SINGLE_QUOTED_SCALAR_STYLE:
		return yaml_emitter_write_single_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context)

	case yaml_DOUBLE_QUOTED_SCALAR_STYLE:
		return yaml_emitter_write_double_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context)

	case yaml_LITERAL_SCALAR_STYLE:
		return yaml_emitter_write_literal_scalar(emitter, emitter.scalar_data.value)

	case yaml_FOLDED_SCALAR_STYLE:
		return yaml_emitter_write_folded_scalar(emitter, emitter.scalar_data.value)
	}
	panic("unknown scalar style")
}

// Check if a %YAML directive is valid.
func yaml_emitter_analyze_version_directive(emitter *yaml_emitter_t, version_directive *yaml_version_directive_t) bool {
	if version_directive.major != 1 || version_directive.minor != 1 {
		return yaml_emitter_set_emitter_error(emitter, "incompatible %YAML directive")
	}
	return true
}

// Check if a %TAG directive is valid.
func yaml_emitter_analyze_tag_directive(emitter *yaml_emitter_t, tag_directive *yaml_tag_directive_t) bool {
	handle := tag_directive.handle
	prefix := tag_directive.prefix
	if len(handle) == 0 {
		return yaml_emitter_set_emitter_error(emitter, "tag handle must not be empty")
	}
	if handle[0] != '!' {
		return yaml_emitter_set_emitter_error(emitter, "tag handle must start with '!'")
	}
	if handle[len(handle)-1] != '!' {
		return yaml_emitter_set_emitter_error(emitter, "tag handle must end with '!'")
	}
	for i := 1; i < len(handle)-1; i += width(handle[i]) {
		if !is_alpha(handle, i) {
			return yaml_emitter_set_emitter_error(emitter, "tag handle must contain alphanumerical characters only")
		}
	}
	if len(prefix) == 0 {
		return yaml_emitter_set_emitter_error(emitter, "tag prefix must not be empty")
	}
	return true
}

// Check if an anchor is valid.
func yaml_emitter_analyze_anchor(emitter *yaml_emitter_t, anchor []byte, alias bool) bool {
	if len(anchor) == 0 {
		problem := "anchor value must not be empty"
		if alias {
			problem = "alias value must not be empty"
		}
		return yaml_emitter_set_emitter_error(emitter, problem)
	}
	for i := 0; i < len(anchor); i += width(anchor[i]) {
		if !is_alpha(anchor, i) {
			problem := "anchor value must contain alphanumerical characters only"
			if alias {
				problem = "alias value must contain alphanumerical characters only"
			}
			return yaml_emitter_set_emitter_error(emitter, problem)
		}
	}
	emitter.anchor_data.anchor = anchor
	emitter.anchor_data.alias = alias
	return true
}

// Check if a tag is valid.
func yaml_emitter_analyze_tag(emitter *yaml_emitter_t, tag []byte) bool {
	if len(tag) == 0 {
		return yaml_emitter_set_emitter_error(emitter, "tag value must not be empty")
	}
	for i := 0; i < len(emitter.tag_directives); i++ {
		tag_directive := &emitter.tag_directives[i]
		if bytes.HasPrefix(tag, tag_directive.prefix) {
			emitter.tag_data.handle = tag_directive.handle
			emitter.tag_data.suffix = tag[len(tag_directive.prefix):]
			return true
		}
	}
	emitter.tag_data.suffix = tag
	return true
}

// Check if a scalar is valid.
func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool {
	var (
		block_indicators   = false
		flow_indicators    = false
		line_breaks        = false
		special_characters = false

		leading_space  = false
		leading_break  = false
		trailing_space = false
		trailing_break = false
		break_space    = false
		space_break    = false

		preceded_by_whitespace = false
		followed_by_whitespace = false
		previous_space         = false
		previous_break         = false
	)

	emitter.scalar_data.value = value

	if len(value) == 0 {
		emitter.scalar_data.multiline = false
		emitter.scalar_data.flow_plain_allowed = false
		emitter.scalar_data.block_plain_allowed = true
		emitter.scalar_data.single_quoted_allowed = true
		emitter.scalar_data.block_allowed = false
		return true
	}

	if len(value) >= 3 && ((value[0] == '-' && value[1] == '-' && value[2] == '-') || (value[0] == '.' && value[1] == '.' && value[2] == '.')) {
		block_indicators = true
		flow_indicators = true
	}

	preceded_by_whitespace = true
	for i, w := 0, 0; i < len(value); i += w {
		w = width(value[i])
		followed_by_whitespace = i+w >= len(value) || is_blank(value, i+w)

		if i == 0 {
			switch value[i] {
			case '#', ',', '[', ']', '{', '}', '&', '*', '!', '|', '>', '\'', '"', '%', '@', '`':
				flow_indicators = true
				block_indicators = true
			case '?', ':':
				flow_indicators = true
				if followed_by_whitespace {
					block_indicators = true
				}
			case '-':
				if followed_by_whitespace {
					flow_indicators = true
					block_indicators = true
				}
			}
		} else {
			switch value[i] {
			case ',', '?', '[', ']', '{', '}':
				flow_indicators = true
			case ':':
				flow_indicators = true
				if followed_by_whitespace {
					block_indicators = true
				}
			case '#':
				if preceded_by_whitespace {
					flow_indicators = true
					block_indicators = true
				}
			}
		}

		if !is_printable(value, i) || !is_ascii(value, i) && !emitter.unicode {
			special_characters = true
		}
		if is_space(value, i) {
			if i == 0 {
				leading_space = true
			}
			if i+width(value[i]) == len(value) {
				trailing_space = true
			}
			if previous_break {
				break_space = true
			}
			previous_space = true
			previous_break = false
		} else if is_break(value, i) {
			line_breaks = true
			if i == 0 {
				leading_break = true
			}
			if i+width(value[i]) == len(value) {
				trailing_break = true
			}
			if previous_space {
				space_break = true
			}
			previous_space = false
			previous_break = true
		} else {
			previous_space = false
			previous_break = false
		}

		// [Go]: Why 'z'? Couldn't be the end of the string as that's the loop condition.
		preceded_by_whitespace = is_blankz(value, i)
	}

	emitter.scalar_data.multiline = line_breaks
	emitter.scalar_data.flow_plain_allowed = true
	emitter.scalar_data.block_plain_allowed = true
	emitter.scalar_data.single_quoted_allowed = true
	emitter.scalar_data.block_allowed = true

	if leading_space || leading_break || trailing_space || trailing_break {
		emitter.scalar_data.flow_plain_allowed = false
		emitter.scalar_data.block_plain_allowed = false
	}
	if trailing_space {
		emitter.scalar_data.block_allowed = false
	}
	if break_space {
		emitter.scalar_data.flow_plain_allowed = false
		emitter.scalar_data.block_plain_allowed = false
		emitter.scalar_data.single_quoted_allowed = false
	}
	if space_break || special_characters {
		emitter.scalar_data.flow_plain_allowed = false
		emitter.scalar_data.block_plain_allowed = false
		emitter.scalar_data.single_quoted_allowed = false
		emitter.scalar_data.block_allowed = false
	}
	if line_breaks {
		emitter.scalar_data.flow_plain_allowed = false
		emitter.scalar_data.block_plain_allowed = false
	}
	if flow_indicators {
		emitter.scalar_data.flow_plain_allowed = false
	}
	if block_indicators {
		emitter.scalar_data.block_plain_allowed = false
	}
	return true
}

// Check if the event data is valid.
func yaml_emitter_analyze_event(emitter *yaml_emitter_t, event *yaml_event_t) bool {

	emitter.anchor_data.anchor = nil
	emitter.tag_data.handle = nil
	emitter.tag_data.suffix = nil
	emitter.scalar_data.value = nil

	switch event.typ {
	case yaml_ALIAS_EVENT:
		if !yaml_emitter_analyze_anchor(emitter, event.anchor, true) {
			return false
		}

	case yaml_SCALAR_EVENT:
		if len(event.anchor) > 0 {
			if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) {
				return false
			}
		}
		if len(event.tag) > 0 && (emitter.canonical || (!event.implicit && !event.quoted_implicit)) {
			if !yaml_emitter_analyze_tag(emitter, event.tag) {
				return false
			}
		}
		if !yaml_emitter_analyze_scalar(emitter, event.value) {
			return false
		}

	case yaml_SEQUENCE_START_EVENT:
		if len(event.anchor) > 0 {
			if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) {
				return false
			}
		}
		if len(event.tag) > 0 && (emitter.canonical || !event.implicit) {
			if !yaml_emitter_analyze_tag(emitter, event.tag) {
				return false
			}
		}

	case yaml_MAPPING_START_EVENT:
		if len(event.anchor) > 0 {
			if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) {
				return false
			}
		}
		if len(event.tag) > 0 && (emitter.canonical || !event.implicit) {
			if !yaml_emitter_analyze_tag(emitter, event.tag) {
				return false
			}
		}
	}
	return true
}

// Write the BOM character.
func yaml_emitter_write_bom(emitter *yaml_emitter_t) bool {
	if !flush(emitter) {
		return false
	}
	pos := emitter.buffer_pos
	emitter.buffer[pos+0] = '\xEF'
	emitter.buffer[pos+1] = '\xBB'
	emitter.buffer[pos+2] = '\xBF'
	emitter.buffer_pos += 3
	return true
}

func yaml_emitter_write_indent(emitter *yaml_emitter_t) bool {
	indent := emitter.indent
	if indent < 0 {
		indent = 0
	}
	if !emitter.indention || emitter.column > indent || (emitter.column == indent && !emitter.whitespace) {
		if !put_break(emitter) {
			return false
		}
	}
	for emitter.column < indent {
		if !put(emitter, ' ') {
			return false
		}
	}
	emitter.whitespace = true
	emitter.indention = true
	return true
}

func yaml_emitter_write_indicator(emitter *yaml_emitter_t, indicator []byte, need_whitespace, is_whitespace, is_indention bool) bool {
	if need_whitespace && !emitter.whitespace {
		if !put(emitter, ' ') {
			return false
		}
	}
	if !write_all(emitter, indicator) {
		return false
	}
	emitter.whitespace = is_whitespace
	emitter.indention = (emitter.indention && is_indention)
	emitter.open_ended = false
	return true
}

func yaml_emitter_write_anchor(emitter *yaml_emitter_t, value []byte) bool {
	if !write_all(emitter, value) {
		return false
	}
	emitter.whitespace = false
	emitter.indention = false
	return true
}

func yaml_emitter_write_tag_handle(emitter *yaml_emitter_t, value []byte) bool {
	if !emitter.whitespace {
		if !put(emitter, ' ') {
			return false
		}
	}
	if !write_all(emitter, value) {
		return false
	}
	emitter.whitespace = false
	emitter.indention = false
	return true
}

func yaml_emitter_write_tag_content(emitter *yaml_emitter_t, value []byte, need_whitespace bool) bool {
	if need_whitespace && !emitter.whitespace {
		if !put(emitter, ' ') {
			return false
		}
	}
	for i := 0; i < len(value); {
		var must_write bool
		switch value[i] {
		case ';', '/', '?', ':', '@', '&', '=', '+', '$', ',', '_', '.', '~', '*', '\'', '(', ')', '[', ']':
			must_write = true
		default:
			must_write = is_alpha(value, i)
		}
		if must_write {
			if !write(emitter, value, &i) {
				return false
			}
		} else {
			w := width(value[i])
			for k := 0; k < w; k++ {
				octet := value[i]
				i++
				if !put(emitter, '%') {
					return false
				}

				c := octet >> 4
				if c < 10 {
					c += '0'
				} else {
					c += 'A' - 10
				}
				if !put(emitter, c) {
					return false
				}

				c = octet & 0x0f
				if c < 10 {
					c += '0'
				} else {
					c += 'A' - 10
				}
				if !put(emitter, c) {
					return false
				}
			}
		}
	}
	emitter.whitespace = false
	emitter.indention = false
	return true
}

func yaml_emitter_write_plain_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool {
	if !emitter.whitespace {
		if !put(emitter, ' ') {
			return false
		}
	}

	spaces := false
	breaks := false
	for i := 0; i < len(value); {
		if is_space(value, i) {
			if allow_breaks && !spaces && emitter.column > emitter.best_width && !is_space(value, i+1) {
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
				i += width(value[i])
			} else {
				if !write(emitter, value, &i) {
					return false
				}
			}
			spaces = true
		} else if is_break(value, i) {
			if !breaks && value[i] == '\n' {
				if !put_break(emitter) {
					return false
				}
			}
			if !write_break(emitter, value, &i) {
				return false
			}
			emitter.indention = true
			breaks = true
		} else {
			if breaks {
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
			}
			if !write(emitter, value, &i) {
				return false
			}
			emitter.indention = false
			spaces = false
			breaks = false
		}
	}

	emitter.whitespace = false
	emitter.indention = false
	if emitter.root_context {
		emitter.open_ended = true
	}

	return true
}

func yaml_emitter_write_single_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool {

	if !yaml_emitter_write_indicator(emitter, []byte{'\''}, true, false, false) {
		return false
	}

	spaces := false
	breaks := false
	for i := 0; i < len(value); {
		if is_space(value, i) {
			if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 && !is_space(value, i+1) {
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
				i += width(value[i])
			} else {
				if !write(emitter, value, &i) {
					return false
				}
			}
			spaces = true
		} else if is_break(value, i) {
			if !breaks && value[i] == '\n' {
				if !put_break(emitter) {
					return false
				}
			}
			if !write_break(emitter, value, &i) {
				return false
			}
			emitter.indention = true
			breaks = true
		} else {
			if breaks {
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
			}
			if value[i] == '\'' {
				if !put(emitter, '\'') {
					return false
				}
			}
			if !write(emitter, value, &i) {
				return false
			}
			emitter.indention = false
			spaces = false
			breaks = false
		}
	}
	if !yaml_emitter_write_indicator(emitter, []byte{'\''}, false, false, false) {
		return false
	}
	emitter.whitespace = false
	emitter.indention = false
	return true
}

func yaml_emitter_write_double_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool {
	spaces := false
	if !yaml_emitter_write_indicator(emitter, []byte{'"'}, true, false, false) {
		return false
	}

	for i := 0; i < len(value); {
		if !is_printable(value, i) || (!emitter.unicode && !is_ascii(value, i)) ||
			is_bom(value, i) || is_break(value, i) ||
			value[i] == '"' || value[i] == '\\' {

			octet := value[i]

			var w int
			var v rune
			switch {
			case octet&0x80 == 0x00:
				w, v = 1, rune(octet&0x7F)
			case octet&0xE0 == 0xC0:
				w, v = 2, rune(octet&0x1F)
			case octet&0xF0 == 0xE0:
				w, v = 3, rune(octet&0x0F)
			case octet&0xF8 == 0xF0:
				w, v = 4, rune(octet&0x07)
			}
			for k := 1; k < w; k++ {
				octet = value[i+k]
				v = (v << 6) + (rune(octet) & 0x3F)
			}
			i += w

			if !put(emitter, '\\') {
				return false
			}

			var ok bool
			switch v {
			case 0x00:
				ok = put(emitter, '0')
			case 0x07:
				ok = put(emitter, 'a')
			case 0x08:
				ok = put(emitter, 'b')
			case 0x09:
				ok = put(emitter, 't')
			case 0x0A:
				ok = put(emitter, 'n')
			case 0x0b:
				ok = put(emitter, 'v')
			case 0x0c:
				ok = put(emitter, 'f')
			case 0x0d:
				ok = put(emitter, 'r')
			case 0x1b:
				ok = put(emitter, 'e')
			case 0x22:
				ok = put(emitter, '"')
			case 0x5c:
				ok = put(emitter, '\\')
			case 0x85:
				ok = put(emitter, 'N')
			case 0xA0:
				ok = put(emitter, '_')
			case 0x2028:
				ok = put(emitter, 'L')
			case 0x2029:
				ok = put(emitter, 'P')
			default:
				if v <= 0xFF {
					ok = put(emitter, 'x')
					w = 2
				} else if v <= 0xFFFF {
					ok = put(emitter, 'u')
					w = 4
				} else {
					ok = put(emitter, 'U')
					w = 8
				}
				for k := (w - 1) * 4; ok && k >= 0; k -= 4 {
					digit := byte((v >> uint(k)) & 0x0F)
					if digit < 10 {
						ok = put(emitter, digit+'0')
					} else {
						ok = put(emitter, digit+'A'-10)
					}
				}
			}
			if !ok {
				return false
			}
			spaces = false
		} else if is_space(value, i) {
			if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 {
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
				if is_space(value, i+1) {
					if !put(emitter, '\\') {
						return false
					}
				}
				i += width(value[i])
			} else if !write(emitter, value, &i) {
				return false
			}
			spaces = true
		} else {
			if !write(emitter, value, &i) {
				return false
			}
			spaces = false
		}
	}
	if !yaml_emitter_write_indicator(emitter, []byte{'"'}, false, false, false) {
		return false
	}
	emitter.whitespace = false
	emitter.indention = false
	return true
}

func yaml_emitter_write_block_scalar_hints(emitter *yaml_emitter_t, value []byte) bool {
	if is_space(value, 0) || is_break(value, 0) {
		indent_hint := []byte{'0' + byte(emitter.best_indent)}
		if !yaml_emitter_write_indicator(emitter, indent_hint, false, false, false) {
			return false
		}
	}

	emitter.open_ended = false

	var chomp_hint [1]byte
	if len(value) == 0 {
		chomp_hint[0] = '-'
	} else {
		i := len(value) - 1
		for value[i]&0xC0 == 0x80 {
			i--
		}
		if !is_break(value, i) {
			chomp_hint[0] = '-'
		} else if i == 0 {
			chomp_hint[0] = '+'
			emitter.open_ended = true
		} else {
			i--
			for value[i]&0xC0 == 0x80 {
				i--
			}
			if is_break(value, i) {
				chomp_hint[0] = '+'
				emitter.open_ended = true
			}
		}
	}
	if chomp_hint[0] != 0 {
		if !yaml_emitter_write_indicator(emitter, chomp_hint[:], false, false, false) {
			return false
		}
	}
	return true
}

func yaml_emitter_write_literal_scalar(emitter *yaml_emitter_t, value []byte) bool {
	if !yaml_emitter_write_indicator(emitter, []byte{'|'}, true, false, false) {
		return false
	}
	if !yaml_emitter_write_block_scalar_hints(emitter, value) {
		return false
	}
	if !put_break(emitter) {
		return false
	}
	emitter.indention = true
	emitter.whitespace = true
	breaks := true
	for i := 0; i < len(value); {
		if is_break(value, i) {
			if !write_break(emitter, value, &i) {
				return false
			}
			emitter.indention = true
			breaks = true
		} else {
			if breaks {
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
			}
			if !write(emitter, value, &i) {
				return false
			}
			emitter.indention = false
			breaks = false
		}
	}

	return true
}

func yaml_emitter_write_folded_scalar(emitter *yaml_emitter_t, value []byte) bool {
	if !yaml_emitter_write_indicator(emitter, []byte{'>'}, true, false, false) {
		return false
	}
	if !yaml_emitter_write_block_scalar_hints(emitter, value) {
		return false
	}

	if !put_break(emitter) {
		return false
	}
	emitter.indention = true
	emitter.whitespace = true

	breaks := true
	leading_spaces := true
	for i := 0; i < len(value); {
		if is_break(value, i) {
			if !breaks && !leading_spaces && value[i] == '\n' {
				k := 0
				for is_break(value, k) {
					k += width(value[k])
				}
				if !is_blankz(value, k) {
					if !put_break(emitter) {
						return false
					}
				}
			}
			if !write_break(emitter, value, &i) {
				return false
			}
			emitter.indention = true
			breaks = true
		} else {
			if breaks {
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
				leading_spaces = is_blank(value, i)
			}
			if !breaks && is_space(value, i) && !is_space(value, i+1) && emitter.column > emitter.best_width {
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
				i += width(value[i])
			} else {
				if !write(emitter, value, &i) {
					return false
				}
			}
			emitter.indention = false
			breaks = false
		}
	}
	return true
}
 07070100000FF9000081A4000000000000000000000001645E367C00002654000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v2/encode.go package yaml

import (
	"encoding"
	"fmt"
	"io"
	"reflect"
	"regexp"
	"sort"
	"strconv"
	"strings"
	"time"
	"unicode/utf8"
)

// jsonNumber is the interface of the encoding/json.Number datatype.
// Repeating the interface here avoids a dependency on encoding/json, and also
// supports other libraries like jsoniter, which use a similar datatype with
// the same interface. Detecting this interface is useful when dealing with
// structures containing json.Number, which is a string under the hood. The
// encoder should prefer the use of Int64(), Float64() and string(), in that
// order, when encoding this type.
type jsonNumber interface {
	Float64() (float64, error)
	Int64() (int64, error)
	String() string
}

type encoder struct {
	emitter yaml_emitter_t
	event   yaml_event_t
	out     []byte
	flow    bool
	// doneInit holds whether the initial stream_start_event has been
	// emitted.
	doneInit bool
}

func newEncoder() *encoder {
	e := &encoder{}
	yaml_emitter_initialize(&e.emitter)
	yaml_emitter_set_output_string(&e.emitter, &e.out)
	yaml_emitter_set_unicode(&e.emitter, true)
	return e
}

func newEncoderWithWriter(w io.Writer) *encoder {
	e := &encoder{}
	yaml_emitter_initialize(&e.emitter)
	yaml_emitter_set_output_writer(&e.emitter, w)
	yaml_emitter_set_unicode(&e.emitter, true)
	return e
}

func (e *encoder) init() {
	if e.doneInit {
		return
	}
	yaml_stream_start_event_initialize(&e.event, yaml_UTF8_ENCODING)
	e.emit()
	e.doneInit = true
}

func (e *encoder) finish() {
	e.emitter.open_ended = false
	yaml_stream_end_event_initialize(&e.event)
	e.emit()
}

func (e *encoder) destroy() {
	yaml_emitter_delete(&e.emitter)
}

func (e *encoder) emit() {
	// This will internally delete the e.event value.
	e.must(yaml_emitter_emit(&e.emitter, &e.event))
}

func (e *encoder) must(ok bool) {
	if !ok {
		msg := e.emitter.problem
		if msg == "" {
			msg = "unknown problem generating YAML content"
		}
		failf("%s", msg)
	}
}

func (e *encoder) marshalDoc(tag string, in reflect.Value) {
	e.init()
	yaml_document_start_event_initialize(&e.event, nil, nil, true)
	e.emit()
	e.marshal(tag, in)
	yaml_document_end_event_initialize(&e.event, true)
	e.emit()
}

func (e *encoder) marshal(tag string, in reflect.Value) {
	if !in.IsValid() || in.Kind() == reflect.Ptr && in.IsNil() {
		e.nilv()
		return
	}
	iface := in.Interface()
	switch m := iface.(type) {
	case jsonNumber:
		integer, err := m.Int64()
		if err == nil {
			// In this case the json.Number is a valid int64
			in = reflect.ValueOf(integer)
			break
		}
		float, err := m.Float64()
		if err == nil {
			// In this case the json.Number is a valid float64
			in = reflect.ValueOf(float)
			break
		}
		// fallback case - no number could be obtained
		in = reflect.ValueOf(m.String())
	case time.Time, *time.Time:
		// Although time.Time implements TextMarshaler,
		// we don't want to treat it as a string for YAML
		// purposes because YAML has special support for
		// timestamps.
	case Marshaler:
		v, err := m.MarshalYAML()
		if err != nil {
			fail(err)
		}
		if v == nil {
			e.nilv()
			return
		}
		in = reflect.ValueOf(v)
	case encoding.TextMarshaler:
		text, err := m.MarshalText()
		if err != nil {
			fail(err)
		}
		in = reflect.ValueOf(string(text))
	case nil:
		e.nilv()
		return
	}
	switch in.Kind() {
	case reflect.Interface:
		e.marshal(tag, in.Elem())
	case reflect.Map:
		e.mapv(tag, in)
	case reflect.Ptr:
		if in.Type() == ptrTimeType {
			e.timev(tag, in.Elem())
		} else {
			e.marshal(tag, in.Elem())
		}
	case reflect.Struct:
		if in.Type() == timeType {
			e.timev(tag, in)
		} else {
			e.structv(tag, in)
		}
	case reflect.Slice, reflect.Array:
		if in.Type().Elem() == mapItemType {
			e.itemsv(tag, in)
		} else {
			e.slicev(tag, in)
		}
	case reflect.String:
		e.stringv(tag, in)
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		if in.Type() == durationType {
			e.stringv(tag, reflect.ValueOf(iface.(time.Duration).String()))
		} else {
			e.intv(tag, in)
		}
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		e.uintv(tag, in)
	case reflect.Float32, reflect.Float64:
		e.floatv(tag, in)
	case reflect.Bool:
		e.boolv(tag, in)
	default:
		panic("cannot marshal type: " + in.Type().String())
	}
}

func (e *encoder) mapv(tag string, in reflect.Value) {
	e.mappingv(tag, func() {
		keys := keyList(in.MapKeys())
		sort.Sort(keys)
		for _, k := range keys {
			e.marshal("", k)
			e.marshal("", in.MapIndex(k))
		}
	})
}

func (e *encoder) itemsv(tag string, in reflect.Value) {
	e.mappingv(tag, func() {
		slice := in.Convert(reflect.TypeOf([]MapItem{})).Interface().([]MapItem)
		for _, item := range slice {
			e.marshal("", reflect.ValueOf(item.Key))
			e.marshal("", reflect.ValueOf(item.Value))
		}
	})
}

func (e *encoder) structv(tag string, in reflect.Value) {
	sinfo, err := getStructInfo(in.Type())
	if err != nil {
		panic(err)
	}
	e.mappingv(tag, func() {
		for _, info := range sinfo.FieldsList {
			var value reflect.Value
			if info.Inline == nil {
				value = in.Field(info.Num)
			} else {
				value = in.FieldByIndex(info.Inline)
			}
			if info.OmitEmpty && isZero(value) {
				continue
			}
			e.marshal("", reflect.ValueOf(info.Key))
			e.flow = info.Flow
			e.marshal("", value)
		}
		if sinfo.InlineMap >= 0 {
			m := in.Field(sinfo.InlineMap)
			if m.Len() > 0 {
				e.flow = false
				keys := keyList(m.MapKeys())
				sort.Sort(keys)
				for _, k := range keys {
					if _, found := sinfo.FieldsMap[k.String()]; found {
						panic(fmt.Sprintf("Can't have key %q in inlined map; conflicts with struct field", k.String()))
					}
					e.marshal("", k)
					e.flow = false
					e.marshal("", m.MapIndex(k))
				}
			}
		}
	})
}

func (e *encoder) mappingv(tag string, f func()) {
	implicit := tag == ""
	style := yaml_BLOCK_MAPPING_STYLE
	if e.flow {
		e.flow = false
		style = yaml_FLOW_MAPPING_STYLE
	}
	yaml_mapping_start_event_initialize(&e.event, nil, []byte(tag), implicit, style)
	e.emit()
	f()
	yaml_mapping_end_event_initialize(&e.event)
	e.emit()
}

func (e *encoder) slicev(tag string, in reflect.Value) {
	implicit := tag == ""
	style := yaml_BLOCK_SEQUENCE_STYLE
	if e.flow {
		e.flow = false
		style = yaml_FLOW_SEQUENCE_STYLE
	}
	e.must(yaml_sequence_start_event_initialize(&e.event, nil, []byte(tag), implicit, style))
	e.emit()
	n := in.Len()
	for i := 0; i < n; i++ {
		e.marshal("", in.Index(i))
	}
	e.must(yaml_sequence_end_event_initialize(&e.event))
	e.emit()
}

// isBase60 returns whether s is in base 60 notation as defined in YAML 1.1.
//
// The base 60 float notation in YAML 1.1 is a terrible idea and is unsupported
// in YAML 1.2 and by this package, but these should be marshalled quoted for
// the time being for compatibility with other parsers.
func isBase60Float(s string) (result bool) {
	// Fast path.
	if s == "" {
		return false
	}
	c := s[0]
	if !(c == '+' || c == '-' || c >= '0' && c <= '9') || strings.IndexByte(s, ':') < 0 {
		return false
	}
	// Do the full match.
	return base60float.MatchString(s)
}

// From http://yaml.org/type/float.html, except the regular expression there
// is bogus. In practice parsers do not enforce the "\.[0-9_]*" suffix.
var base60float = regexp.MustCompile(`^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+(?:\.[0-9_]*)?$`)

func (e *encoder) stringv(tag string, in reflect.Value) {
	var style yaml_scalar_style_t
	s := in.String()
	canUsePlain := true
	switch {
	case !utf8.ValidString(s):
		if tag == yaml_BINARY_TAG {
			failf("explicitly tagged !!binary data must be base64-encoded")
		}
		if tag != "" {
			failf("cannot marshal invalid UTF-8 data as %s", shortTag(tag))
		}
		// It can't be encoded directly as YAML so use a binary tag
		// and encode it as base64.
		tag = yaml_BINARY_TAG
		s = encodeBase64(s)
	case tag == "":
		// Check to see if it would resolve to a specific
		// tag when encoded unquoted. If it doesn't,
		// there's no need to quote it.
		rtag, _ := resolve("", s)
		canUsePlain = rtag == yaml_STR_TAG && !isBase60Float(s)
	}
	// Note: it's possible for user code to emit invalid YAML
	// if they explicitly specify a tag and a string containing
	// text that's incompatible with that tag.
	switch {
	case strings.Contains(s, "\n"):
		style = yaml_LITERAL_SCALAR_STYLE
	case canUsePlain:
		style = yaml_PLAIN_SCALAR_STYLE
	default:
		style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
	}
	e.emitScalar(s, "", tag, style)
}

func (e *encoder) boolv(tag string, in reflect.Value) {
	var s string
	if in.Bool() {
		s = "true"
	} else {
		s = "false"
	}
	e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE)
}

func (e *encoder) intv(tag string, in reflect.Value) {
	s := strconv.FormatInt(in.Int(), 10)
	e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE)
}

func (e *encoder) uintv(tag string, in reflect.Value) {
	s := strconv.FormatUint(in.Uint(), 10)
	e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE)
}

func (e *encoder) timev(tag string, in reflect.Value) {
	t := in.Interface().(time.Time)
	s := t.Format(time.RFC3339Nano)
	e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE)
}

func (e *encoder) floatv(tag string, in reflect.Value) {
	// Issue #352: When formatting, use the precision of the underlying value
	precision := 64
	if in.Kind() == reflect.Float32 {
		precision = 32
	}

	s := strconv.FormatFloat(in.Float(), 'g', -1, precision)
	switch s {
	case "+Inf":
		s = ".inf"
	case "-Inf":
		s = "-.inf"
	case "NaN":
		s = ".nan"
	}
	e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE)
}

func (e *encoder) nilv() {
	e.emitScalar("null", "", "", yaml_PLAIN_SCALAR_STYLE)
}

func (e *encoder) emitScalar(value, anchor, tag string, style yaml_scalar_style_t) {
	implicit := tag == ""
	e.must(yaml_scalar_event_initialize(&e.event, []byte(anchor), []byte(tag), []byte(value), implicit, implicit, style))
	e.emit()
}
07070100000FFA000081A4000000000000000000000001645E367C000087C9000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v2/parserc.go    package yaml

import (
	"bytes"
)

// The parser implements the following grammar:
//
// stream               ::= STREAM-START implicit_document? explicit_document* STREAM-END
// implicit_document    ::= block_node DOCUMENT-END*
// explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
// block_node_or_indentless_sequence    ::=
//                          ALIAS
//                          | properties (block_content | indentless_block_sequence)?
//                          | block_content
//                          | indentless_block_sequence
// block_node           ::= ALIAS
//                          | properties block_content?
//                          | block_content
// flow_node            ::= ALIAS
//                          | properties flow_content?
//                          | flow_content
// properties           ::= TAG ANCHOR? | ANCHOR TAG?
// block_content        ::= block_collection | flow_collection | SCALAR
// flow_content         ::= flow_collection | SCALAR
// block_collection     ::= block_sequence | block_mapping
// flow_collection      ::= flow_sequence | flow_mapping
// block_sequence       ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END
// indentless_sequence  ::= (BLOCK-ENTRY block_node?)+
// block_mapping        ::= BLOCK-MAPPING_START
//                          ((KEY block_node_or_indentless_sequence?)?
//                          (VALUE block_node_or_indentless_sequence?)?)*
//                          BLOCK-END
// flow_sequence        ::= FLOW-SEQUENCE-START
//                          (flow_sequence_entry FLOW-ENTRY)*
//                          flow_sequence_entry?
//                          FLOW-SEQUENCE-END
// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?
// flow_mapping         ::= FLOW-MAPPING-START
//                          (flow_mapping_entry FLOW-ENTRY)*
//                          flow_mapping_entry?
//                          FLOW-MAPPING-END
// flow_mapping_entry   ::= flow_node | KEY flow_node? (VALUE flow_node?)?

// Peek the next token in the token queue.
func peek_token(parser *yaml_parser_t) *yaml_token_t {
	if parser.token_available || yaml_parser_fetch_more_tokens(parser) {
		return &parser.tokens[parser.tokens_head]
	}
	return nil
}

// Remove the next token from the queue (must be called after peek_token).
func skip_token(parser *yaml_parser_t) {
	parser.token_available = false
	parser.tokens_parsed++
	parser.stream_end_produced = parser.tokens[parser.tokens_head].typ == yaml_STREAM_END_TOKEN
	parser.tokens_head++
}

// Get the next event.
func yaml_parser_parse(parser *yaml_parser_t, event *yaml_event_t) bool {
	// Erase the event object.
	*event = yaml_event_t{}

	// No events after the end of the stream or error.
	if parser.stream_end_produced || parser.error != yaml_NO_ERROR || parser.state == yaml_PARSE_END_STATE {
		return true
	}

	// Generate the next event.
	return yaml_parser_state_machine(parser, event)
}

// Set parser error.
func yaml_parser_set_parser_error(parser *yaml_parser_t, problem string, problem_mark yaml_mark_t) bool {
	parser.error = yaml_PARSER_ERROR
	parser.problem = problem
	parser.problem_mark = problem_mark
	return false
}

func yaml_parser_set_parser_error_context(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string, problem_mark yaml_mark_t) bool {
	parser.error = yaml_PARSER_ERROR
	parser.context = context
	parser.context_mark = context_mark
	parser.problem = problem
	parser.problem_mark = problem_mark
	return false
}

// State dispatcher.
func yaml_parser_state_machine(parser *yaml_parser_t, event *yaml_event_t) bool {
	//trace("yaml_parser_state_machine", "state:", parser.state.String())

	switch parser.state {
	case yaml_PARSE_STREAM_START_STATE:
		return yaml_parser_parse_stream_start(parser, event)

	case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE:
		return yaml_parser_parse_document_start(parser, event, true)

	case yaml_PARSE_DOCUMENT_START_STATE:
		return yaml_parser_parse_document_start(parser, event, false)

	case yaml_PARSE_DOCUMENT_CONTENT_STATE:
		return yaml_parser_parse_document_content(parser, event)

	case yaml_PARSE_DOCUMENT_END_STATE:
		return yaml_parser_parse_document_end(parser, event)

	case yaml_PARSE_BLOCK_NODE_STATE:
		return yaml_parser_parse_node(parser, event, true, false)

	case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE:
		return yaml_parser_parse_node(parser, event, true, true)

	case yaml_PARSE_FLOW_NODE_STATE:
		return yaml_parser_parse_node(parser, event, false, false)

	case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE:
		return yaml_parser_parse_block_sequence_entry(parser, event, true)

	case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE:
		return yaml_parser_parse_block_sequence_entry(parser, event, false)

	case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE:
		return yaml_parser_parse_indentless_sequence_entry(parser, event)

	case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE:
		return yaml_parser_parse_block_mapping_key(parser, event, true)

	case yaml_PARSE_BLOCK_MAPPING_KEY_STATE:
		return yaml_parser_parse_block_mapping_key(parser, event, false)

	case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE:
		return yaml_parser_parse_block_mapping_value(parser, event)

	case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE:
		return yaml_parser_parse_flow_sequence_entry(parser, event, true)

	case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE:
		return yaml_parser_parse_flow_sequence_entry(parser, event, false)

	case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE:
		return yaml_parser_parse_flow_sequence_entry_mapping_key(parser, event)

	case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE:
		return yaml_parser_parse_flow_sequence_entry_mapping_value(parser, event)

	case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE:
		return yaml_parser_parse_flow_sequence_entry_mapping_end(parser, event)

	case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE:
		return yaml_parser_parse_flow_mapping_key(parser, event, true)

	case yaml_PARSE_FLOW_MAPPING_KEY_STATE:
		return yaml_parser_parse_flow_mapping_key(parser, event, false)

	case yaml_PARSE_FLOW_MAPPING_VALUE_STATE:
		return yaml_parser_parse_flow_mapping_value(parser, event, false)

	case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE:
		return yaml_parser_parse_flow_mapping_value(parser, event, true)

	default:
		panic("invalid parser state")
	}
}

// Parse the production:
// stream   ::= STREAM-START implicit_document? explicit_document* STREAM-END
//              ************
func yaml_parser_parse_stream_start(parser *yaml_parser_t, event *yaml_event_t) bool {
	token := peek_token(parser)
	if token == nil {
		return false
	}
	if token.typ != yaml_STREAM_START_TOKEN {
		return yaml_parser_set_parser_error(parser, "did not find expected <stream-start>", token.start_mark)
	}
	parser.state = yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE
	*event = yaml_event_t{
		typ:        yaml_STREAM_START_EVENT,
		start_mark: token.start_mark,
		end_mark:   token.end_mark,
		encoding:   token.encoding,
	}
	skip_token(parser)
	return true
}

// Parse the productions:
// implicit_document    ::= block_node DOCUMENT-END*
//                          *
// explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
//                          *************************
func yaml_parser_parse_document_start(parser *yaml_parser_t, event *yaml_event_t, implicit bool) bool {

	token := peek_token(parser)
	if token == nil {
		return false
	}

	// Parse extra document end indicators.
	if !implicit {
		for token.typ == yaml_DOCUMENT_END_TOKEN {
			skip_token(parser)
			token = peek_token(parser)
			if token == nil {
				return false
			}
		}
	}

	if implicit && token.typ != yaml_VERSION_DIRECTIVE_TOKEN &&
		token.typ != yaml_TAG_DIRECTIVE_TOKEN &&
		token.typ != yaml_DOCUMENT_START_TOKEN &&
		token.typ != yaml_STREAM_END_TOKEN {
		// Parse an implicit document.
		if !yaml_parser_process_directives(parser, nil, nil) {
			return false
		}
		parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE)
		parser.state = yaml_PARSE_BLOCK_NODE_STATE

		*event = yaml_event_t{
			typ:        yaml_DOCUMENT_START_EVENT,
			start_mark: token.start_mark,
			end_mark:   token.end_mark,
		}

	} else if token.typ != yaml_STREAM_END_TOKEN {
		// Parse an explicit document.
		var version_directive *yaml_version_directive_t
		var tag_directives []yaml_tag_directive_t
		start_mark := token.start_mark
		if !yaml_parser_process_directives(parser, &version_directive, &tag_directives) {
			return false
		}
		token = peek_token(parser)
		if token == nil {
			return false
		}
		if token.typ != yaml_DOCUMENT_START_TOKEN {
			yaml_parser_set_parser_error(parser,
				"did not find expected <document start>", token.start_mark)
			return false
		}
		parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE)
		parser.state = yaml_PARSE_DOCUMENT_CONTENT_STATE
		end_mark := token.end_mark

		*event = yaml_event_t{
			typ:               yaml_DOCUMENT_START_EVENT,
			start_mark:        start_mark,
			end_mark:          end_mark,
			version_directive: version_directive,
			tag_directives:    tag_directives,
			implicit:          false,
		}
		skip_token(parser)

	} else {
		// Parse the stream end.
		parser.state = yaml_PARSE_END_STATE
		*event = yaml_event_t{
			typ:        yaml_STREAM_END_EVENT,
			start_mark: token.start_mark,
			end_mark:   token.end_mark,
		}
		skip_token(parser)
	}

	return true
}

// Parse the productions:
// explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
//                                                    ***********
//
func yaml_parser_parse_document_content(parser *yaml_parser_t, event *yaml_event_t) bool {
	token := peek_token(parser)
	if token == nil {
		return false
	}
	if token.typ == yaml_VERSION_DIRECTIVE_TOKEN ||
		token.typ == yaml_TAG_DIRECTIVE_TOKEN ||
		token.typ == yaml_DOCUMENT_START_TOKEN ||
		token.typ == yaml_DOCUMENT_END_TOKEN ||
		token.typ == yaml_STREAM_END_TOKEN {
		parser.state = parser.states[len(parser.states)-1]
		parser.states = parser.states[:len(parser.states)-1]
		return yaml_parser_process_empty_scalar(parser, event,
			token.start_mark)
	}
	return yaml_parser_parse_node(parser, event, true, false)
}

// Parse the productions:
// implicit_document    ::= block_node DOCUMENT-END*
//                                     *************
// explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
//
func yaml_parser_parse_document_end(parser *yaml_parser_t, event *yaml_event_t) bool {
	token := peek_token(parser)
	if token == nil {
		return false
	}

	start_mark := token.start_mark
	end_mark := token.start_mark

	implicit := true
	if token.typ == yaml_DOCUMENT_END_TOKEN {
		end_mark = token.end_mark
		skip_token(parser)
		implicit = false
	}

	parser.tag_directives = parser.tag_directives[:0]

	parser.state = yaml_PARSE_DOCUMENT_START_STATE
	*event = yaml_event_t{
		typ:        yaml_DOCUMENT_END_EVENT,
		start_mark: start_mark,
		end_mark:   end_mark,
		implicit:   implicit,
	}
	return true
}

// Parse the productions:
// block_node_or_indentless_sequence    ::=
//                          ALIAS
//                          *****
//                          | properties (block_content | indentless_block_sequence)?
//                            **********  *
//                          | block_content | indentless_block_sequence
//                            *
// block_node           ::= ALIAS
//                          *****
//                          | properties block_content?
//                            ********** *
//                          | block_content
//                            *
// flow_node            ::= ALIAS
//                          *****
//                          | properties flow_content?
//                            ********** *
//                          | flow_content
//                            *
// properties           ::= TAG ANCHOR? | ANCHOR TAG?
//                          *************************
// block_content        ::= block_collection | flow_collection | SCALAR
//                                                               ******
// flow_content         ::= flow_collection | SCALAR
//                                            ******
func yaml_parser_parse_node(parser *yaml_parser_t, event *yaml_event_t, block, indentless_sequence bool) bool {
	//defer trace("yaml_parser_parse_node", "block:", block, "indentless_sequence:", indentless_sequence)()

	token := peek_token(parser)
	if token == nil {
		return false
	}

	if token.typ == yaml_ALIAS_TOKEN {
		parser.state = parser.states[len(parser.states)-1]
		parser.states = parser.states[:len(parser.states)-1]
		*event = yaml_event_t{
			typ:        yaml_ALIAS_EVENT,
			start_mark: token.start_mark,
			end_mark:   token.end_mark,
			anchor:     token.value,
		}
		skip_token(parser)
		return true
	}

	start_mark := token.start_mark
	end_mark := token.start_mark

	var tag_token bool
	var tag_handle, tag_suffix, anchor []byte
	var tag_mark yaml_mark_t
	if token.typ == yaml_ANCHOR_TOKEN {
		anchor = token.value
		start_mark = token.start_mark
		end_mark = token.end_mark
		skip_token(parser)
		token = peek_token(parser)
		if token == nil {
			return false
		}
		if token.typ == yaml_TAG_TOKEN {
			tag_token = true
			tag_handle = token.value
			tag_suffix = token.suffix
			tag_mark = token.start_mark
			end_mark = token.end_mark
			skip_token(parser)
			token = peek_token(parser)
			if token == nil {
				return false
			}
		}
	} else if token.typ == yaml_TAG_TOKEN {
		tag_token = true
		tag_handle = token.value
		tag_suffix = token.suffix
		start_mark = token.start_mark
		tag_mark = token.start_mark
		end_mark = token.end_mark
		skip_token(parser)
		token = peek_token(parser)
		if token == nil {
			return false
		}
		if token.typ == yaml_ANCHOR_TOKEN {
			anchor = token.value
			end_mark = token.end_mark
			skip_token(parser)
			token = peek_token(parser)
			if token == nil {
				return false
			}
		}
	}

	var tag []byte
	if tag_token {
		if len(tag_handle) == 0 {
			tag = tag_suffix
			tag_suffix = nil
		} else {
			for i := range parser.tag_directives {
				if bytes.Equal(parser.tag_directives[i].handle, tag_handle) {
					tag = append([]byte(nil), parser.tag_directives[i].prefix...)
					tag = append(tag, tag_suffix...)
					break
				}
			}
			if len(tag) == 0 {
				yaml_parser_set_parser_error_context(parser,
					"while parsing a node", start_mark,
					"found undefined tag handle", tag_mark)
				return false
			}
		}
	}

	implicit := len(tag) == 0
	if indentless_sequence && token.typ == yaml_BLOCK_ENTRY_TOKEN {
		end_mark = token.end_mark
		parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE
		*event = yaml_event_t{
			typ:        yaml_SEQUENCE_START_EVENT,
			start_mark: start_mark,
			end_mark:   end_mark,
			anchor:     anchor,
			tag:        tag,
			implicit:   implicit,
			style:      yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE),
		}
		return true
	}
	if token.typ == yaml_SCALAR_TOKEN {
		var plain_implicit, quoted_implicit bool
		end_mark = token.end_mark
		if (len(tag) == 0 && token.style == yaml_PLAIN_SCALAR_STYLE) || (len(tag) == 1 && tag[0] == '!') {
			plain_implicit = true
		} else if len(tag) == 0 {
			quoted_implicit = true
		}
		parser.state = parser.states[len(parser.states)-1]
		parser.states = parser.states[:len(parser.states)-1]

		*event = yaml_event_t{
			typ:             yaml_SCALAR_EVENT,
			start_mark:      start_mark,
			end_mark:        end_mark,
			anchor:          anchor,
			tag:             tag,
			value:           token.value,
			implicit:        plain_implicit,
			quoted_implicit: quoted_implicit,
			style:           yaml_style_t(token.style),
		}
		skip_token(parser)
		return true
	}
	if token.typ == yaml_FLOW_SEQUENCE_START_TOKEN {
		// [Go] Some of the events below can be merged as they differ only on style.
		end_mark = token.end_mark
		parser.state = yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE
		*event = yaml_event_t{
			typ:        yaml_SEQUENCE_START_EVENT,
			start_mark: start_mark,
			end_mark:   end_mark,
			anchor:     anchor,
			tag:        tag,
			implicit:   implicit,
			style:      yaml_style_t(yaml_FLOW_SEQUENCE_STYLE),
		}
		return true
	}
	if token.typ == yaml_FLOW_MAPPING_START_TOKEN {
		end_mark = token.end_mark
		parser.state = yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE
		*event = yaml_event_t{
			typ:        yaml_MAPPING_START_EVENT,
			start_mark: start_mark,
			end_mark:   end_mark,
			anchor:     anchor,
			tag:        tag,
			implicit:   implicit,
			style:      yaml_style_t(yaml_FLOW_MAPPING_STYLE),
		}
		return true
	}
	if block && token.typ == yaml_BLOCK_SEQUENCE_START_TOKEN {
		end_mark = token.end_mark
		parser.state = yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE
		*event = yaml_event_t{
			typ:        yaml_SEQUENCE_START_EVENT,
			start_mark: start_mark,
			end_mark:   end_mark,
			anchor:     anchor,
			tag:        tag,
			implicit:   implicit,
			style:      yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE),
		}
		return true
	}
	if block && token.typ == yaml_BLOCK_MAPPING_START_TOKEN {
		end_mark = token.end_mark
		parser.state = yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE
		*event = yaml_event_t{
			typ:        yaml_MAPPING_START_EVENT,
			start_mark: start_mark,
			end_mark:   end_mark,
			anchor:     anchor,
			tag:        tag,
			implicit:   implicit,
			style:      yaml_style_t(yaml_BLOCK_MAPPING_STYLE),
		}
		return true
	}
	if len(anchor) > 0 || len(tag) > 0 {
		parser.state = parser.states[len(parser.states)-1]
		parser.states = parser.states[:len(parser.states)-1]

		*event = yaml_event_t{
			typ:             yaml_SCALAR_EVENT,
			start_mark:      start_mark,
			end_mark:        end_mark,
			anchor:          anchor,
			tag:             tag,
			implicit:        implicit,
			quoted_implicit: false,
			style:           yaml_style_t(yaml_PLAIN_SCALAR_STYLE),
		}
		return true
	}

	context := "while parsing a flow node"
	if block {
		context = "while parsing a block node"
	}
	yaml_parser_set_parser_error_context(parser, context, start_mark,
		"did not find expected node content", token.start_mark)
	return false
}

// Parse the productions:
// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END
//                    ********************  *********** *             *********
//
func yaml_parser_parse_block_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {
	if first {
		token := peek_token(parser)
		parser.marks = append(parser.marks, token.start_mark)
		skip_token(parser)
	}

	token := peek_token(parser)
	if token == nil {
		return false
	}

	if token.typ == yaml_BLOCK_ENTRY_TOKEN {
		mark := token.end_mark
		skip_token(parser)
		token = peek_token(parser)
		if token == nil {
			return false
		}
		if token.typ != yaml_BLOCK_ENTRY_TOKEN && token.typ != yaml_BLOCK_END_TOKEN {
			parser.states = append(parser.states, yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE)
			return yaml_parser_parse_node(parser, event, true, false)
		} else {
			parser.state = yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE
			return yaml_parser_process_empty_scalar(parser, event, mark)
		}
	}
	if token.typ == yaml_BLOCK_END_TOKEN {
		parser.state = parser.states[len(parser.states)-1]
		parser.states = parser.states[:len(parser.states)-1]
		parser.marks = parser.marks[:len(parser.marks)-1]

		*event = yaml_event_t{
			typ:        yaml_SEQUENCE_END_EVENT,
			start_mark: token.start_mark,
			end_mark:   token.end_mark,
		}

		skip_token(parser)
		return true
	}

	context_mark := parser.marks[len(parser.marks)-1]
	parser.marks = parser.marks[:len(parser.marks)-1]
	return yaml_parser_set_parser_error_context(parser,
		"while parsing a block collection", context_mark,
		"did not find expected '-' indicator", token.start_mark)
}

// Parse the productions:
// indentless_sequence  ::= (BLOCK-ENTRY block_node?)+
//                           *********** *
func yaml_parser_parse_indentless_sequence_entry(parser *yaml_parser_t, event *yaml_event_t) bool {
	token := peek_token(parser)
	if token == nil {
		return false
	}

	if token.typ == yaml_BLOCK_ENTRY_TOKEN {
		mark := token.end_mark
		skip_token(parser)
		token = peek_token(parser)
		if token == nil {
			return false
		}
		if token.typ != yaml_BLOCK_ENTRY_TOKEN &&
			token.typ != yaml_KEY_TOKEN &&
			token.typ != yaml_VALUE_TOKEN &&
			token.typ != yaml_BLOCK_END_TOKEN {
			parser.states = append(parser.states, yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE)
			return yaml_parser_parse_node(parser, event, true, false)
		}
		parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE
		return yaml_parser_process_empty_scalar(parser, event, mark)
	}
	parser.state = parser.states[len(parser.states)-1]
	parser.states = parser.states[:len(parser.states)-1]

	*event = yaml_event_t{
		typ:        yaml_SEQUENCE_END_EVENT,
		start_mark: token.start_mark,
		end_mark:   token.start_mark, // [Go] Shouldn't this be token.end_mark?
	}
	return true
}

// Parse the productions:
// block_mapping        ::= BLOCK-MAPPING_START
//                          *******************
//                          ((KEY block_node_or_indentless_sequence?)?
//                            *** *
//                          (VALUE block_node_or_indentless_sequence?)?)*
//
//                          BLOCK-END
//                          *********
//
func yaml_parser_parse_block_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {
	if first {
		token := peek_token(parser)
		parser.marks = append(parser.marks, token.start_mark)
		skip_token(parser)
	}

	token := peek_token(parser)
	if token == nil {
		return false
	}

	if token.typ == yaml_KEY_TOKEN {
		mark := token.end_mark
		skip_token(parser)
		token = peek_token(parser)
		if token == nil {
			return false
		}
		if token.typ != yaml_KEY_TOKEN &&
			token.typ != yaml_VALUE_TOKEN &&
			token.typ != yaml_BLOCK_END_TOKEN {
			parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_VALUE_STATE)
			return yaml_parser_parse_node(parser, event, true, true)
		} else {
			parser.state = yaml_PARSE_BLOCK_MAPPING_VALUE_STATE
			return yaml_parser_process_empty_scalar(parser, event, mark)
		}
	} else if token.typ == yaml_BLOCK_END_TOKEN {
		parser.state = parser.states[len(parser.states)-1]
		parser.states = parser.states[:len(parser.states)-1]
		parser.marks = parser.marks[:len(parser.marks)-1]
		*event = yaml_event_t{
			typ:        yaml_MAPPING_END_EVENT,
			start_mark: token.start_mark,
			end_mark:   token.end_mark,
		}
		skip_token(parser)
		return true
	}

	context_mark := parser.marks[len(parser.marks)-1]
	parser.marks = parser.marks[:len(parser.marks)-1]
	return yaml_parser_set_parser_error_context(parser,
		"while parsing a block mapping", context_mark,
		"did not find expected key", token.start_mark)
}

// Parse the productions:
// block_mapping        ::= BLOCK-MAPPING_START
//
//                          ((KEY block_node_or_indentless_sequence?)?
//
//                          (VALUE block_node_or_indentless_sequence?)?)*
//                           ***** *
//                          BLOCK-END
//
//
func yaml_parser_parse_block_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool {
	token := peek_token(parser)
	if token == nil {
		return false
	}
	if token.typ == yaml_VALUE_TOKEN {
		mark := token.end_mark
		skip_token(parser)
		token = peek_token(parser)
		if token == nil {
			return false
		}
		if token.typ != yaml_KEY_TOKEN &&
			token.typ != yaml_VALUE_TOKEN &&
			token.typ != yaml_BLOCK_END_TOKEN {
			parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_KEY_STATE)
			return yaml_parser_parse_node(parser, event, true, true)
		}
		parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE
		return yaml_parser_process_empty_scalar(parser, event, mark)
	}
	parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE
	return yaml_parser_process_empty_scalar(parser, event, token.start_mark)
}

// Parse the productions:
// flow_sequence        ::= FLOW-SEQUENCE-START
//                          *******************
//                          (flow_sequence_entry FLOW-ENTRY)*
//                           *                   **********
//                          flow_sequence_entry?
//                          *
//                          FLOW-SEQUENCE-END
//                          *****************
// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?
//                          *
//
func yaml_parser_parse_flow_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {
	if first {
		token := peek_token(parser)
		parser.marks = append(parser.marks, token.start_mark)
		skip_token(parser)
	}
	token := peek_token(parser)
	if token == nil {
		return false
	}
	if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {
		if !first {
			if token.typ == yaml_FLOW_ENTRY_TOKEN {
				skip_token(parser)
				token = peek_token(parser)
				if token == nil {
					return false
				}
			} else {
				context_mark := parser.marks[len(parser.marks)-1]
				parser.marks = parser.marks[:len(parser.marks)-1]
				return yaml_parser_set_parser_error_context(parser,
					"while parsing a flow sequence", context_mark,
					"did not find expected ',' or ']'", token.start_mark)
			}
		}

		if token.typ == yaml_KEY_TOKEN {
			parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE
			*event = yaml_event_t{
				typ:        yaml_MAPPING_START_EVENT,
				start_mark: token.start_mark,
				end_mark:   token.end_mark,
				implicit:   true,
				style:      yaml_style_t(yaml_FLOW_MAPPING_STYLE),
			}
			skip_token(parser)
			return true
		} else if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {
			parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE)
			return yaml_parser_parse_node(parser, event, false, false)
		}
	}

	parser.state = parser.states[len(parser.states)-1]
	parser.states = parser.states[:len(parser.states)-1]
	parser.marks = parser.marks[:len(parser.marks)-1]

	*event = yaml_event_t{
		typ:        yaml_SEQUENCE_END_EVENT,
		start_mark: token.start_mark,
		end_mark:   token.end_mark,
	}

	skip_token(parser)
	return true
}

//
// Parse the productions:
// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?
//                                      *** *
//
func yaml_parser_parse_flow_sequence_entry_mapping_key(parser *yaml_parser_t, event *yaml_event_t) bool {
	token := peek_token(parser)
	if token == nil {
		return false
	}
	if token.typ != yaml_VALUE_TOKEN &&
		token.typ != yaml_FLOW_ENTRY_TOKEN &&
		token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {
		parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE)
		return yaml_parser_parse_node(parser, event, false, false)
	}
	mark := token.end_mark
	skip_token(parser)
	parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE
	return yaml_parser_process_empty_scalar(parser, event, mark)
}

// Parse the productions:
// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?
//                                                      ***** *
//
func yaml_parser_parse_flow_sequence_entry_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool {
	token := peek_token(parser)
	if token == nil {
		return false
	}
	if token.typ == yaml_VALUE_TOKEN {
		skip_token(parser)
		token := peek_token(parser)
		if token == nil {
			return false
		}
		if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {
			parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE)
			return yaml_parser_parse_node(parser, event, false, false)
		}
	}
	parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE
	return yaml_parser_process_empty_scalar(parser, event, token.start_mark)
}

// Parse the productions:
// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?
//                                                                      *
//
func yaml_parser_parse_flow_sequence_entry_mapping_end(parser *yaml_parser_t, event *yaml_event_t) bool {
	token := peek_token(parser)
	if token == nil {
		return false
	}
	parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE
	*event = yaml_event_t{
		typ:        yaml_MAPPING_END_EVENT,
		start_mark: token.start_mark,
		end_mark:   token.start_mark, // [Go] Shouldn't this be end_mark?
	}
	return true
}

// Parse the productions:
// flow_mapping         ::= FLOW-MAPPING-START
//                          ******************
//                          (flow_mapping_entry FLOW-ENTRY)*
//                           *                  **********
//                          flow_mapping_entry?
//                          ******************
//                          FLOW-MAPPING-END
//                          ****************
// flow_mapping_entry   ::= flow_node | KEY flow_node? (VALUE flow_node?)?
//                          *           *** *
//
func yaml_parser_parse_flow_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {
	if first {
		token := peek_token(parser)
		parser.marks = append(parser.marks, token.start_mark)
		skip_token(parser)
	}

	token := peek_token(parser)
	if token == nil {
		return false
	}

	if token.typ != yaml_FLOW_MAPPING_END_TOKEN {
		if !first {
			if token.typ == yaml_FLOW_ENTRY_TOKEN {
				skip_token(parser)
				token = peek_token(parser)
				if token == nil {
					return false
				}
			} else {
				context_mark := parser.marks[len(parser.marks)-1]
				parser.marks = parser.marks[:len(parser.marks)-1]
				return yaml_parser_set_parser_error_context(parser,
					"while parsing a flow mapping", context_mark,
					"did not find expected ',' or '}'", token.start_mark)
			}
		}

		if token.typ == yaml_KEY_TOKEN {
			skip_token(parser)
			token = peek_token(parser)
			if token == nil {
				return false
			}
			if token.typ != yaml_VALUE_TOKEN &&
				token.typ != yaml_FLOW_ENTRY_TOKEN &&
				token.typ != yaml_FLOW_MAPPING_END_TOKEN {
				parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_VALUE_STATE)
				return yaml_parser_parse_node(parser, event, false, false)
			} else {
				parser.state = yaml_PARSE_FLOW_MAPPING_VALUE_STATE
				return yaml_parser_process_empty_scalar(parser, event, token.start_mark)
			}
		} else if token.typ != yaml_FLOW_MAPPING_END_TOKEN {
			parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE)
			return yaml_parser_parse_node(parser, event, false, false)
		}
	}

	parser.state = parser.states[len(parser.states)-1]
	parser.states = parser.states[:len(parser.states)-1]
	parser.marks = parser.marks[:len(parser.marks)-1]
	*event = yaml_event_t{
		typ:        yaml_MAPPING_END_EVENT,
		start_mark: token.start_mark,
		end_mark:   token.end_mark,
	}
	skip_token(parser)
	return true
}

// Parse the productions:
// flow_mapping_entry   ::= flow_node | KEY flow_node? (VALUE flow_node?)?
//                                   *                  ***** *
//
func yaml_parser_parse_flow_mapping_value(parser *yaml_parser_t, event *yaml_event_t, empty bool) bool {
	token := peek_token(parser)
	if token == nil {
		return false
	}
	if empty {
		parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE
		return yaml_parser_process_empty_scalar(parser, event, token.start_mark)
	}
	if token.typ == yaml_VALUE_TOKEN {
		skip_token(parser)
		token = peek_token(parser)
		if token == nil {
			return false
		}
		if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_MAPPING_END_TOKEN {
			parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_KEY_STATE)
			return yaml_parser_parse_node(parser, event, false, false)
		}
	}
	parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE
	return yaml_parser_process_empty_scalar(parser, event, token.start_mark)
}

// Generate an empty scalar event.
func yaml_parser_process_empty_scalar(parser *yaml_parser_t, event *yaml_event_t, mark yaml_mark_t) bool {
	*event = yaml_event_t{
		typ:        yaml_SCALAR_EVENT,
		start_mark: mark,
		end_mark:   mark,
		value:      nil, // Empty
		implicit:   true,
		style:      yaml_style_t(yaml_PLAIN_SCALAR_STYLE),
	}
	return true
}

var default_tag_directives = []yaml_tag_directive_t{
	{[]byte("!"), []byte("!")},
	{[]byte("!!"), []byte("tag:yaml.org,2002:")},
}

// Parse directives.
func yaml_parser_process_directives(parser *yaml_parser_t,
	version_directive_ref **yaml_version_directive_t,
	tag_directives_ref *[]yaml_tag_directive_t) bool {

	var version_directive *yaml_version_directive_t
	var tag_directives []yaml_tag_directive_t

	token := peek_token(parser)
	if token == nil {
		return false
	}

	for token.typ == yaml_VERSION_DIRECTIVE_TOKEN || token.typ == yaml_TAG_DIRECTIVE_TOKEN {
		if token.typ == yaml_VERSION_DIRECTIVE_TOKEN {
			if version_directive != nil {
				yaml_parser_set_parser_error(parser,
					"found duplicate %YAML directive", token.start_mark)
				return false
			}
			if token.major != 1 || token.minor != 1 {
				yaml_parser_set_parser_error(parser,
					"found incompatible YAML document", token.start_mark)
				return false
			}
			version_directive = &yaml_version_directive_t{
				major: token.major,
				minor: token.minor,
			}
		} else if token.typ == yaml_TAG_DIRECTIVE_TOKEN {
			value := yaml_tag_directive_t{
				handle: token.value,
				prefix: token.prefix,
			}
			if !yaml_parser_append_tag_directive(parser, value, false, token.start_mark) {
				return false
			}
			tag_directives = append(tag_directives, value)
		}

		skip_token(parser)
		token = peek_token(parser)
		if token == nil {
			return false
		}
	}

	for i := range default_tag_directives {
		if !yaml_parser_append_tag_directive(parser, default_tag_directives[i], true, token.start_mark) {
			return false
		}
	}

	if version_directive_ref != nil {
		*version_directive_ref = version_directive
	}
	if tag_directives_ref != nil {
		*tag_directives_ref = tag_directives
	}
	return true
}

// Append a tag directive to the directives stack.
func yaml_parser_append_tag_directive(parser *yaml_parser_t, value yaml_tag_directive_t, allow_duplicates bool, mark yaml_mark_t) bool {
	for i := range parser.tag_directives {
		if bytes.Equal(value.handle, parser.tag_directives[i].handle) {
			if allow_duplicates {
				return true
			}
			return yaml_parser_set_parser_error(parser, "found duplicate %TAG directive", mark)
		}
	}

	// [Go] I suspect the copy is unnecessary. This was likely done
	// because there was no way to track ownership of the data.
	value_copy := yaml_tag_directive_t{
		handle: make([]byte, len(value.handle)),
		prefix: make([]byte, len(value.prefix)),
	}
	copy(value_copy.handle, value.handle)
	copy(value_copy.prefix, value.prefix)
	parser.tag_directives = append(parser.tag_directives, value_copy)
	return true
}
   07070100000FFB000081A4000000000000000000000001645E367C0000327C000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v2/readerc.go    package yaml

import (
	"io"
)

// Set the reader error and return 0.
func yaml_parser_set_reader_error(parser *yaml_parser_t, problem string, offset int, value int) bool {
	parser.error = yaml_READER_ERROR
	parser.problem = problem
	parser.problem_offset = offset
	parser.problem_value = value
	return false
}

// Byte order marks.
const (
	bom_UTF8    = "\xef\xbb\xbf"
	bom_UTF16LE = "\xff\xfe"
	bom_UTF16BE = "\xfe\xff"
)

// Determine the input stream encoding by checking the BOM symbol. If no BOM is
// found, the UTF-8 encoding is assumed. Return 1 on success, 0 on failure.
func yaml_parser_determine_encoding(parser *yaml_parser_t) bool {
	// Ensure that we had enough bytes in the raw buffer.
	for !parser.eof && len(parser.raw_buffer)-parser.raw_buffer_pos < 3 {
		if !yaml_parser_update_raw_buffer(parser) {
			return false
		}
	}

	// Determine the encoding.
	buf := parser.raw_buffer
	pos := parser.raw_buffer_pos
	avail := len(buf) - pos
	if avail >= 2 && buf[pos] == bom_UTF16LE[0] && buf[pos+1] == bom_UTF16LE[1] {
		parser.encoding = yaml_UTF16LE_ENCODING
		parser.raw_buffer_pos += 2
		parser.offset += 2
	} else if avail >= 2 && buf[pos] == bom_UTF16BE[0] && buf[pos+1] == bom_UTF16BE[1] {
		parser.encoding = yaml_UTF16BE_ENCODING
		parser.raw_buffer_pos += 2
		parser.offset += 2
	} else if avail >= 3 && buf[pos] == bom_UTF8[0] && buf[pos+1] == bom_UTF8[1] && buf[pos+2] == bom_UTF8[2] {
		parser.encoding = yaml_UTF8_ENCODING
		parser.raw_buffer_pos += 3
		parser.offset += 3
	} else {
		parser.encoding = yaml_UTF8_ENCODING
	}
	return true
}

// Update the raw buffer.
func yaml_parser_update_raw_buffer(parser *yaml_parser_t) bool {
	size_read := 0

	// Return if the raw buffer is full.
	if parser.raw_buffer_pos == 0 && len(parser.raw_buffer) == cap(parser.raw_buffer) {
		return true
	}

	// Return on EOF.
	if parser.eof {
		return true
	}

	// Move the remaining bytes in the raw buffer to the beginning.
	if parser.raw_buffer_pos > 0 && parser.raw_buffer_pos < len(parser.raw_buffer) {
		copy(parser.raw_buffer, parser.raw_buffer[parser.raw_buffer_pos:])
	}
	parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)-parser.raw_buffer_pos]
	parser.raw_buffer_pos = 0

	// Call the read handler to fill the buffer.
	size_read, err := parser.read_handler(parser, parser.raw_buffer[len(parser.raw_buffer):cap(parser.raw_buffer)])
	parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)+size_read]
	if err == io.EOF {
		parser.eof = true
	} else if err != nil {
		return yaml_parser_set_reader_error(parser, "input error: "+err.Error(), parser.offset, -1)
	}
	return true
}

// Ensure that the buffer contains at least `length` characters.
// Return true on success, false on failure.
//
// The length is supposed to be significantly less that the buffer size.
func yaml_parser_update_buffer(parser *yaml_parser_t, length int) bool {
	if parser.read_handler == nil {
		panic("read handler must be set")
	}

	// [Go] This function was changed to guarantee the requested length size at EOF.
	// The fact we need to do this is pretty awful, but the description above implies
	// for that to be the case, and there are tests 

	// If the EOF flag is set and the raw buffer is empty, do nothing.
	if parser.eof && parser.raw_buffer_pos == len(parser.raw_buffer) {
		// [Go] ACTUALLY! Read the documentation of this function above.
		// This is just broken. To return true, we need to have the
		// given length in the buffer. Not doing that means every single
		// check that calls this function to make sure the buffer has a
		// given length is Go) panicking; or C) accessing invalid memory.
		//return true
	}

	// Return if the buffer contains enough characters.
	if parser.unread >= length {
		return true
	}

	// Determine the input encoding if it is not known yet.
	if parser.encoding == yaml_ANY_ENCODING {
		if !yaml_parser_determine_encoding(parser) {
			return false
		}
	}

	// Move the unread characters to the beginning of the buffer.
	buffer_len := len(parser.buffer)
	if parser.buffer_pos > 0 && parser.buffer_pos < buffer_len {
		copy(parser.buffer, parser.buffer[parser.buffer_pos:])
		buffer_len -= parser.buffer_pos
		parser.buffer_pos = 0
	} else if parser.buffer_pos == buffer_len {
		buffer_len = 0
		parser.buffer_pos = 0
	}

	// Open the whole buffer for writing, and cut it before returning.
	parser.buffer = parser.buffer[:cap(parser.buffer)]

	// Fill the buffer until it has enough characters.
	first := true
	for parser.unread < length {

		// Fill the raw buffer if necessary.
		if !first || parser.raw_buffer_pos == len(parser.raw_buffer) {
			if !yaml_parser_update_raw_buffer(parser) {
				parser.buffer = parser.buffer[:buffer_len]
				return false
			}
		}
		first = false

		// Decode the raw buffer.
	inner:
		for parser.raw_buffer_pos != len(parser.raw_buffer) {
			var value rune
			var width int

			raw_unread := len(parser.raw_buffer) - parser.raw_buffer_pos

			// Decode the next character.
			switch parser.encoding {
			case yaml_UTF8_ENCODING:
				// Decode a UTF-8 character.  Check RFC 3629
				// (http://www.ietf.org/rfc/rfc3629.txt) for more details.
				//
				// The following table (taken from the RFC) is used for
				// decoding.
				//
				//    Char. number range |        UTF-8 octet sequence
				//      (hexadecimal)    |              (binary)
				//   --------------------+------------------------------------
				//   0000 0000-0000 007F | 0xxxxxxx
				//   0000 0080-0000 07FF | 110xxxxx 10xxxxxx
				//   0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
				//   0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
				//
				// Additionally, the characters in the range 0xD800-0xDFFF
				// are prohibited as they are reserved for use with UTF-16
				// surrogate pairs.

				// Determine the length of the UTF-8 sequence.
				octet := parser.raw_buffer[parser.raw_buffer_pos]
				switch {
				case octet&0x80 == 0x00:
					width = 1
				case octet&0xE0 == 0xC0:
					width = 2
				case octet&0xF0 == 0xE0:
					width = 3
				case octet&0xF8 == 0xF0:
					width = 4
				default:
					// The leading octet is invalid.
					return yaml_parser_set_reader_error(parser,
						"invalid leading UTF-8 octet",
						parser.offset, int(octet))
				}

				// Check if the raw buffer contains an incomplete character.
				if width > raw_unread {
					if parser.eof {
						return yaml_parser_set_reader_error(parser,
							"incomplete UTF-8 octet sequence",
							parser.offset, -1)
					}
					break inner
				}

				// Decode the leading octet.
				switch {
				case octet&0x80 == 0x00:
					value = rune(octet & 0x7F)
				case octet&0xE0 == 0xC0:
					value = rune(octet & 0x1F)
				case octet&0xF0 == 0xE0:
					value = rune(octet & 0x0F)
				case octet&0xF8 == 0xF0:
					value = rune(octet & 0x07)
				default:
					value = 0
				}

				// Check and decode the trailing octets.
				for k := 1; k < width; k++ {
					octet = parser.raw_buffer[parser.raw_buffer_pos+k]

					// Check if the octet is valid.
					if (octet & 0xC0) != 0x80 {
						return yaml_parser_set_reader_error(parser,
							"invalid trailing UTF-8 octet",
							parser.offset+k, int(octet))
					}

					// Decode the octet.
					value = (value << 6) + rune(octet&0x3F)
				}

				// Check the length of the sequence against the value.
				switch {
				case width == 1:
				case width == 2 && value >= 0x80:
				case width == 3 && value >= 0x800:
				case width == 4 && value >= 0x10000:
				default:
					return yaml_parser_set_reader_error(parser,
						"invalid length of a UTF-8 sequence",
						parser.offset, -1)
				}

				// Check the range of the value.
				if value >= 0xD800 && value <= 0xDFFF || value > 0x10FFFF {
					return yaml_parser_set_reader_error(parser,
						"invalid Unicode character",
						parser.offset, int(value))
				}

			case yaml_UTF16LE_ENCODING, yaml_UTF16BE_ENCODING:
				var low, high int
				if parser.encoding == yaml_UTF16LE_ENCODING {
					low, high = 0, 1
				} else {
					low, high = 1, 0
				}

				// The UTF-16 encoding is not as simple as one might
				// naively think.  Check RFC 2781
				// (http://www.ietf.org/rfc/rfc2781.txt).
				//
				// Normally, two subsequent bytes describe a Unicode
				// character.  However a special technique (called a
				// surrogate pair) is used for specifying character
				// values larger than 0xFFFF.
				//
				// A surrogate pair consists of two pseudo-characters:
				//      high surrogate area (0xD800-0xDBFF)
				//      low surrogate area (0xDC00-0xDFFF)
				//
				// The following formulas are used for decoding
				// and encoding characters using surrogate pairs:
				//
				//  U  = U' + 0x10000   (0x01 00 00 <= U <= 0x10 FF FF)
				//  U' = yyyyyyyyyyxxxxxxxxxx   (0 <= U' <= 0x0F FF FF)
				//  W1 = 110110yyyyyyyyyy
				//  W2 = 110111xxxxxxxxxx
				//
				// where U is the character value, W1 is the high surrogate
				// area, W2 is the low surrogate area.

				// Check for incomplete UTF-16 character.
				if raw_unread < 2 {
					if parser.eof {
						return yaml_parser_set_reader_error(parser,
							"incomplete UTF-16 character",
							parser.offset, -1)
					}
					break inner
				}

				// Get the character.
				value = rune(parser.raw_buffer[parser.raw_buffer_pos+low]) +
					(rune(parser.raw_buffer[parser.raw_buffer_pos+high]) << 8)

				// Check for unexpected low surrogate area.
				if value&0xFC00 == 0xDC00 {
					return yaml_parser_set_reader_error(parser,
						"unexpected low surrogate area",
						parser.offset, int(value))
				}

				// Check for a high surrogate area.
				if value&0xFC00 == 0xD800 {
					width = 4

					// Check for incomplete surrogate pair.
					if raw_unread < 4 {
						if parser.eof {
							return yaml_parser_set_reader_error(parser,
								"incomplete UTF-16 surrogate pair",
								parser.offset, -1)
						}
						break inner
					}

					// Get the next character.
					value2 := rune(parser.raw_buffer[parser.raw_buffer_pos+low+2]) +
						(rune(parser.raw_buffer[parser.raw_buffer_pos+high+2]) << 8)

					// Check for a low surrogate area.
					if value2&0xFC00 != 0xDC00 {
						return yaml_parser_set_reader_error(parser,
							"expected low surrogate area",
							parser.offset+2, int(value2))
					}

					// Generate the value of the surrogate pair.
					value = 0x10000 + ((value & 0x3FF) << 10) + (value2 & 0x3FF)
				} else {
					width = 2
				}

			default:
				panic("impossible")
			}

			// Check if the character is in the allowed range:
			//      #x9 | #xA | #xD | [#x20-#x7E]               (8 bit)
			//      | #x85 | [#xA0-#xD7FF] | [#xE000-#xFFFD]    (16 bit)
			//      | [#x10000-#x10FFFF]                        (32 bit)
			switch {
			case value == 0x09:
			case value == 0x0A:
			case value == 0x0D:
			case value >= 0x20 && value <= 0x7E:
			case value == 0x85:
			case value >= 0xA0 && value <= 0xD7FF:
			case value >= 0xE000 && value <= 0xFFFD:
			case value >= 0x10000 && value <= 0x10FFFF:
			default:
				return yaml_parser_set_reader_error(parser,
					"control characters are not allowed",
					parser.offset, int(value))
			}

			// Move the raw pointers.
			parser.raw_buffer_pos += width
			parser.offset += width

			// Finally put the character into the buffer.
			if value <= 0x7F {
				// 0000 0000-0000 007F . 0xxxxxxx
				parser.buffer[buffer_len+0] = byte(value)
				buffer_len += 1
			} else if value <= 0x7FF {
				// 0000 0080-0000 07FF . 110xxxxx 10xxxxxx
				parser.buffer[buffer_len+0] = byte(0xC0 + (value >> 6))
				parser.buffer[buffer_len+1] = byte(0x80 + (value & 0x3F))
				buffer_len += 2
			} else if value <= 0xFFFF {
				// 0000 0800-0000 FFFF . 1110xxxx 10xxxxxx 10xxxxxx
				parser.buffer[buffer_len+0] = byte(0xE0 + (value >> 12))
				parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 6) & 0x3F))
				parser.buffer[buffer_len+2] = byte(0x80 + (value & 0x3F))
				buffer_len += 3
			} else {
				// 0001 0000-0010 FFFF . 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
				parser.buffer[buffer_len+0] = byte(0xF0 + (value >> 18))
				parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 12) & 0x3F))
				parser.buffer[buffer_len+2] = byte(0x80 + ((value >> 6) & 0x3F))
				parser.buffer[buffer_len+3] = byte(0x80 + (value & 0x3F))
				buffer_len += 4
			}

			parser.unread++
		}

		// On EOF, put NUL into the buffer and return.
		if parser.eof {
			parser.buffer[buffer_len] = 0
			buffer_len++
			parser.unread++
			break
		}
	}
	// [Go] Read the documentation of this function above. To return true,
	// we need to have the given length in the buffer. Not doing that means
	// every single check that calls this function to make sure the buffer
	// has a given length is Go) panicking; or C) accessing invalid memory.
	// This happens here due to the EOF above breaking early.
	for buffer_len < length {
		parser.buffer[buffer_len] = 0
		buffer_len++
	}
	parser.buffer = parser.buffer[:buffer_len]
	return true
}
07070100000FFC000081A4000000000000000000000001645E367C00001AE9000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v2/resolve.go    package yaml

import (
	"encoding/base64"
	"math"
	"regexp"
	"strconv"
	"strings"
	"time"
)

type resolveMapItem struct {
	value interface{}
	tag   string
}

var resolveTable = make([]byte, 256)
var resolveMap = make(map[string]resolveMapItem)

func init() {
	t := resolveTable
	t[int('+')] = 'S' // Sign
	t[int('-')] = 'S'
	for _, c := range "0123456789" {
		t[int(c)] = 'D' // Digit
	}
	for _, c := range "yYnNtTfFoO~" {
		t[int(c)] = 'M' // In map
	}
	t[int('.')] = '.' // Float (potentially in map)

	var resolveMapList = []struct {
		v   interface{}
		tag string
		l   []string
	}{
		{true, yaml_BOOL_TAG, []string{"y", "Y", "yes", "Yes", "YES"}},
		{true, yaml_BOOL_TAG, []string{"true", "True", "TRUE"}},
		{true, yaml_BOOL_TAG, []string{"on", "On", "ON"}},
		{false, yaml_BOOL_TAG, []string{"n", "N", "no", "No", "NO"}},
		{false, yaml_BOOL_TAG, []string{"false", "False", "FALSE"}},
		{false, yaml_BOOL_TAG, []string{"off", "Off", "OFF"}},
		{nil, yaml_NULL_TAG, []string{"", "~", "null", "Null", "NULL"}},
		{math.NaN(), yaml_FLOAT_TAG, []string{".nan", ".NaN", ".NAN"}},
		{math.Inf(+1), yaml_FLOAT_TAG, []string{".inf", ".Inf", ".INF"}},
		{math.Inf(+1), yaml_FLOAT_TAG, []string{"+.inf", "+.Inf", "+.INF"}},
		{math.Inf(-1), yaml_FLOAT_TAG, []string{"-.inf", "-.Inf", "-.INF"}},
		{"<<", yaml_MERGE_TAG, []string{"<<"}},
	}

	m := resolveMap
	for _, item := range resolveMapList {
		for _, s := range item.l {
			m[s] = resolveMapItem{item.v, item.tag}
		}
	}
}

const longTagPrefix = "tag:yaml.org,2002:"

func shortTag(tag string) string {
	// TODO This can easily be made faster and produce less garbage.
	if strings.HasPrefix(tag, longTagPrefix) {
		return "!!" + tag[len(longTagPrefix):]
	}
	return tag
}

func longTag(tag string) string {
	if strings.HasPrefix(tag, "!!") {
		return longTagPrefix + tag[2:]
	}
	return tag
}

func resolvableTag(tag string) bool {
	switch tag {
	case "", yaml_STR_TAG, yaml_BOOL_TAG, yaml_INT_TAG, yaml_FLOAT_TAG, yaml_NULL_TAG, yaml_TIMESTAMP_TAG:
		return true
	}
	return false
}

var yamlStyleFloat = regexp.MustCompile(`^[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?$`)

func resolve(tag string, in string) (rtag string, out interface{}) {
	if !resolvableTag(tag) {
		return tag, in
	}

	defer func() {
		switch tag {
		case "", rtag, yaml_STR_TAG, yaml_BINARY_TAG:
			return
		case yaml_FLOAT_TAG:
			if rtag == yaml_INT_TAG {
				switch v := out.(type) {
				case int64:
					rtag = yaml_FLOAT_TAG
					out = float64(v)
					return
				case int:
					rtag = yaml_FLOAT_TAG
					out = float64(v)
					return
				}
			}
		}
		failf("cannot decode %s `%s` as a %s", shortTag(rtag), in, shortTag(tag))
	}()

	// Any data is accepted as a !!str or !!binary.
	// Otherwise, the prefix is enough of a hint about what it might be.
	hint := byte('N')
	if in != "" {
		hint = resolveTable[in[0]]
	}
	if hint != 0 && tag != yaml_STR_TAG && tag != yaml_BINARY_TAG {
		// Handle things we can lookup in a map.
		if item, ok := resolveMap[in]; ok {
			return item.tag, item.value
		}

		// Base 60 floats are a bad idea, were dropped in YAML 1.2, and
		// are purposefully unsupported here. They're still quoted on
		// the way out for compatibility with other parser, though.

		switch hint {
		case 'M':
			// We've already checked the map above.

		case '.':
			// Not in the map, so maybe a normal float.
			floatv, err := strconv.ParseFloat(in, 64)
			if err == nil {
				return yaml_FLOAT_TAG, floatv
			}

		case 'D', 'S':
			// Int, float, or timestamp.
			// Only try values as a timestamp if the value is unquoted or there's an explicit
			// !!timestamp tag.
			if tag == "" || tag == yaml_TIMESTAMP_TAG {
				t, ok := parseTimestamp(in)
				if ok {
					return yaml_TIMESTAMP_TAG, t
				}
			}

			plain := strings.Replace(in, "_", "", -1)
			intv, err := strconv.ParseInt(plain, 0, 64)
			if err == nil {
				if intv == int64(int(intv)) {
					return yaml_INT_TAG, int(intv)
				} else {
					return yaml_INT_TAG, intv
				}
			}
			uintv, err := strconv.ParseUint(plain, 0, 64)
			if err == nil {
				return yaml_INT_TAG, uintv
			}
			if yamlStyleFloat.MatchString(plain) {
				floatv, err := strconv.ParseFloat(plain, 64)
				if err == nil {
					return yaml_FLOAT_TAG, floatv
				}
			}
			if strings.HasPrefix(plain, "0b") {
				intv, err := strconv.ParseInt(plain[2:], 2, 64)
				if err == nil {
					if intv == int64(int(intv)) {
						return yaml_INT_TAG, int(intv)
					} else {
						return yaml_INT_TAG, intv
					}
				}
				uintv, err := strconv.ParseUint(plain[2:], 2, 64)
				if err == nil {
					return yaml_INT_TAG, uintv
				}
			} else if strings.HasPrefix(plain, "-0b") {
				intv, err := strconv.ParseInt("-" + plain[3:], 2, 64)
				if err == nil {
					if true || intv == int64(int(intv)) {
						return yaml_INT_TAG, int(intv)
					} else {
						return yaml_INT_TAG, intv
					}
				}
			}
		default:
			panic("resolveTable item not yet handled: " + string(rune(hint)) + " (with " + in + ")")
		}
	}
	return yaml_STR_TAG, in
}

// encodeBase64 encodes s as base64 that is broken up into multiple lines
// as appropriate for the resulting length.
func encodeBase64(s string) string {
	const lineLen = 70
	encLen := base64.StdEncoding.EncodedLen(len(s))
	lines := encLen/lineLen + 1
	buf := make([]byte, encLen*2+lines)
	in := buf[0:encLen]
	out := buf[encLen:]
	base64.StdEncoding.Encode(in, []byte(s))
	k := 0
	for i := 0; i < len(in); i += lineLen {
		j := i + lineLen
		if j > len(in) {
			j = len(in)
		}
		k += copy(out[k:], in[i:j])
		if lines > 1 {
			out[k] = '\n'
			k++
		}
	}
	return string(out[:k])
}

// This is a subset of the formats allowed by the regular expression
// defined at http://yaml.org/type/timestamp.html.
var allowedTimestampFormats = []string{
	"2006-1-2T15:4:5.999999999Z07:00", // RCF3339Nano with short date fields.
	"2006-1-2t15:4:5.999999999Z07:00", // RFC3339Nano with short date fields and lower-case "t".
	"2006-1-2 15:4:5.999999999",       // space separated with no time zone
	"2006-1-2",                        // date only
	// Notable exception: time.Parse cannot handle: "2001-12-14 21:59:43.10 -5"
	// from the set of examples.
}

// parseTimestamp parses s as a timestamp string and
// returns the timestamp and reports whether it succeeded.
// Timestamp formats are defined at http://yaml.org/type/timestamp.html
func parseTimestamp(s string) (time.Time, bool) {
	// TODO write code to check all the formats supported by
	// http://yaml.org/type/timestamp.html instead of using time.Parse.

	// Quick check: all date formats start with YYYY-.
	i := 0
	for ; i < len(s); i++ {
		if c := s[i]; c < '0' || c > '9' {
			break
		}
	}
	if i != 4 || i == len(s) || s[i] != '-' {
		return time.Time{}, false
	}
	for _, format := range allowedTimestampFormats {
		if t, err := time.Parse(format, s); err == nil {
			return t, true
		}
	}
	return time.Time{}, false
}
   07070100000FFD000081A4000000000000000000000001645E367C00012F1A000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v2/scannerc.go   package yaml

import (
	"bytes"
	"fmt"
)

// Introduction
// ************
//
// The following notes assume that you are familiar with the YAML specification
// (http://yaml.org/spec/1.2/spec.html).  We mostly follow it, although in
// some cases we are less restrictive that it requires.
//
// The process of transforming a YAML stream into a sequence of events is
// divided on two steps: Scanning and Parsing.
//
// The Scanner transforms the input stream into a sequence of tokens, while the
// parser transform the sequence of tokens produced by the Scanner into a
// sequence of parsing events.
//
// The Scanner is rather clever and complicated. The Parser, on the contrary,
// is a straightforward implementation of a recursive-descendant parser (or,
// LL(1) parser, as it is usually called).
//
// Actually there are two issues of Scanning that might be called "clever", the
// rest is quite straightforward.  The issues are "block collection start" and
// "simple keys".  Both issues are explained below in details.
//
// Here the Scanning step is explained and implemented.  We start with the list
// of all the tokens produced by the Scanner together with short descriptions.
//
// Now, tokens:
//
//      STREAM-START(encoding)          # The stream start.
//      STREAM-END                      # The stream end.
//      VERSION-DIRECTIVE(major,minor)  # The '%YAML' directive.
//      TAG-DIRECTIVE(handle,prefix)    # The '%TAG' directive.
//      DOCUMENT-START                  # '---'
//      DOCUMENT-END                    # '...'
//      BLOCK-SEQUENCE-START            # Indentation increase denoting a block
//      BLOCK-MAPPING-START             # sequence or a block mapping.
//      BLOCK-END                       # Indentation decrease.
//      FLOW-SEQUENCE-START             # '['
//      FLOW-SEQUENCE-END               # ']'
//      BLOCK-SEQUENCE-START            # '{'
//      BLOCK-SEQUENCE-END              # '}'
//      BLOCK-ENTRY                     # '-'
//      FLOW-ENTRY                      # ','
//      KEY                             # '?' or nothing (simple keys).
//      VALUE                           # ':'
//      ALIAS(anchor)                   # '*anchor'
//      ANCHOR(anchor)                  # '&anchor'
//      TAG(handle,suffix)              # '!handle!suffix'
//      SCALAR(value,style)             # A scalar.
//
// The following two tokens are "virtual" tokens denoting the beginning and the
// end of the stream:
//
//      STREAM-START(encoding)
//      STREAM-END
//
// We pass the information about the input stream encoding with the
// STREAM-START token.
//
// The next two tokens are responsible for tags:
//
//      VERSION-DIRECTIVE(major,minor)
//      TAG-DIRECTIVE(handle,prefix)
//
// Example:
//
//      %YAML   1.1
//      %TAG    !   !foo
//      %TAG    !yaml!  tag:yaml.org,2002:
//      ---
//
// The correspoding sequence of tokens:
//
//      STREAM-START(utf-8)
//      VERSION-DIRECTIVE(1,1)
//      TAG-DIRECTIVE("!","!foo")
//      TAG-DIRECTIVE("!yaml","tag:yaml.org,2002:")
//      DOCUMENT-START
//      STREAM-END
//
// Note that the VERSION-DIRECTIVE and TAG-DIRECTIVE tokens occupy a whole
// line.
//
// The document start and end indicators are represented by:
//
//      DOCUMENT-START
//      DOCUMENT-END
//
// Note that if a YAML stream contains an implicit document (without '---'
// and '...' indicators), no DOCUMENT-START and DOCUMENT-END tokens will be
// produced.
//
// In the following examples, we present whole documents together with the
// produced tokens.
//
//      1. An implicit document:
//
//          'a scalar'
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          SCALAR("a scalar",single-quoted)
//          STREAM-END
//
//      2. An explicit document:
//
//          ---
//          'a scalar'
//          ...
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          DOCUMENT-START
//          SCALAR("a scalar",single-quoted)
//          DOCUMENT-END
//          STREAM-END
//
//      3. Several documents in a stream:
//
//          'a scalar'
//          ---
//          'another scalar'
//          ---
//          'yet another scalar'
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          SCALAR("a scalar",single-quoted)
//          DOCUMENT-START
//          SCALAR("another scalar",single-quoted)
//          DOCUMENT-START
//          SCALAR("yet another scalar",single-quoted)
//          STREAM-END
//
// We have already introduced the SCALAR token above.  The following tokens are
// used to describe aliases, anchors, tag, and scalars:
//
//      ALIAS(anchor)
//      ANCHOR(anchor)
//      TAG(handle,suffix)
//      SCALAR(value,style)
//
// The following series of examples illustrate the usage of these tokens:
//
//      1. A recursive sequence:
//
//          &A [ *A ]
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          ANCHOR("A")
//          FLOW-SEQUENCE-START
//          ALIAS("A")
//          FLOW-SEQUENCE-END
//          STREAM-END
//
//      2. A tagged scalar:
//
//          !!float "3.14"  # A good approximation.
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          TAG("!!","float")
//          SCALAR("3.14",double-quoted)
//          STREAM-END
//
//      3. Various scalar styles:
//
//          --- # Implicit empty plain scalars do not produce tokens.
//          --- a plain scalar
//          --- 'a single-quoted scalar'
//          --- "a double-quoted scalar"
//          --- |-
//            a literal scalar
//          --- >-
//            a folded
//            scalar
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          DOCUMENT-START
//          DOCUMENT-START
//          SCALAR("a plain scalar",plain)
//          DOCUMENT-START
//          SCALAR("a single-quoted scalar",single-quoted)
//          DOCUMENT-START
//          SCALAR("a double-quoted scalar",double-quoted)
//          DOCUMENT-START
//          SCALAR("a literal scalar",literal)
//          DOCUMENT-START
//          SCALAR("a folded scalar",folded)
//          STREAM-END
//
// Now it's time to review collection-related tokens. We will start with
// flow collections:
//
//      FLOW-SEQUENCE-START
//      FLOW-SEQUENCE-END
//      FLOW-MAPPING-START
//      FLOW-MAPPING-END
//      FLOW-ENTRY
//      KEY
//      VALUE
//
// The tokens FLOW-SEQUENCE-START, FLOW-SEQUENCE-END, FLOW-MAPPING-START, and
// FLOW-MAPPING-END represent the indicators '[', ']', '{', and '}'
// correspondingly.  FLOW-ENTRY represent the ',' indicator.  Finally the
// indicators '?' and ':', which are used for denoting mapping keys and values,
// are represented by the KEY and VALUE tokens.
//
// The following examples show flow collections:
//
//      1. A flow sequence:
//
//          [item 1, item 2, item 3]
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          FLOW-SEQUENCE-START
//          SCALAR("item 1",plain)
//          FLOW-ENTRY
//          SCALAR("item 2",plain)
//          FLOW-ENTRY
//          SCALAR("item 3",plain)
//          FLOW-SEQUENCE-END
//          STREAM-END
//
//      2. A flow mapping:
//
//          {
//              a simple key: a value,  # Note that the KEY token is produced.
//              ? a complex key: another value,
//          }
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          FLOW-MAPPING-START
//          KEY
//          SCALAR("a simple key",plain)
//          VALUE
//          SCALAR("a value",plain)
//          FLOW-ENTRY
//          KEY
//          SCALAR("a complex key",plain)
//          VALUE
//          SCALAR("another value",plain)
//          FLOW-ENTRY
//          FLOW-MAPPING-END
//          STREAM-END
//
// A simple key is a key which is not denoted by the '?' indicator.  Note that
// the Scanner still produce the KEY token whenever it encounters a simple key.
//
// For scanning block collections, the following tokens are used (note that we
// repeat KEY and VALUE here):
//
//      BLOCK-SEQUENCE-START
//      BLOCK-MAPPING-START
//      BLOCK-END
//      BLOCK-ENTRY
//      KEY
//      VALUE
//
// The tokens BLOCK-SEQUENCE-START and BLOCK-MAPPING-START denote indentation
// increase that precedes a block collection (cf. the INDENT token in Python).
// The token BLOCK-END denote indentation decrease that ends a block collection
// (cf. the DEDENT token in Python).  However YAML has some syntax pecularities
// that makes detections of these tokens more complex.
//
// The tokens BLOCK-ENTRY, KEY, and VALUE are used to represent the indicators
// '-', '?', and ':' correspondingly.
//
// The following examples show how the tokens BLOCK-SEQUENCE-START,
// BLOCK-MAPPING-START, and BLOCK-END are emitted by the Scanner:
//
//      1. Block sequences:
//
//          - item 1
//          - item 2
//          -
//            - item 3.1
//            - item 3.2
//          -
//            key 1: value 1
//            key 2: value 2
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          BLOCK-SEQUENCE-START
//          BLOCK-ENTRY
//          SCALAR("item 1",plain)
//          BLOCK-ENTRY
//          SCALAR("item 2",plain)
//          BLOCK-ENTRY
//          BLOCK-SEQUENCE-START
//          BLOCK-ENTRY
//          SCALAR("item 3.1",plain)
//          BLOCK-ENTRY
//          SCALAR("item 3.2",plain)
//          BLOCK-END
//          BLOCK-ENTRY
//          BLOCK-MAPPING-START
//          KEY
//          SCALAR("key 1",plain)
//          VALUE
//          SCALAR("value 1",plain)
//          KEY
//          SCALAR("key 2",plain)
//          VALUE
//          SCALAR("value 2",plain)
//          BLOCK-END
//          BLOCK-END
//          STREAM-END
//
//      2. Block mappings:
//
//          a simple key: a value   # The KEY token is produced here.
//          ? a complex key
//          : another value
//          a mapping:
//            key 1: value 1
//            key 2: value 2
//          a sequence:
//            - item 1
//            - item 2
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          BLOCK-MAPPING-START
//          KEY
//          SCALAR("a simple key",plain)
//          VALUE
//          SCALAR("a value",plain)
//          KEY
//          SCALAR("a complex key",plain)
//          VALUE
//          SCALAR("another value",plain)
//          KEY
//          SCALAR("a mapping",plain)
//          BLOCK-MAPPING-START
//          KEY
//          SCALAR("key 1",plain)
//          VALUE
//          SCALAR("value 1",plain)
//          KEY
//          SCALAR("key 2",plain)
//          VALUE
//          SCALAR("value 2",plain)
//          BLOCK-END
//          KEY
//          SCALAR("a sequence",plain)
//          VALUE
//          BLOCK-SEQUENCE-START
//          BLOCK-ENTRY
//          SCALAR("item 1",plain)
//          BLOCK-ENTRY
//          SCALAR("item 2",plain)
//          BLOCK-END
//          BLOCK-END
//          STREAM-END
//
// YAML does not always require to start a new block collection from a new
// line.  If the current line contains only '-', '?', and ':' indicators, a new
// block collection may start at the current line.  The following examples
// illustrate this case:
//
//      1. Collections in a sequence:
//
//          - - item 1
//            - item 2
//          - key 1: value 1
//            key 2: value 2
//          - ? complex key
//            : complex value
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          BLOCK-SEQUENCE-START
//          BLOCK-ENTRY
//          BLOCK-SEQUENCE-START
//          BLOCK-ENTRY
//          SCALAR("item 1",plain)
//          BLOCK-ENTRY
//          SCALAR("item 2",plain)
//          BLOCK-END
//          BLOCK-ENTRY
//          BLOCK-MAPPING-START
//          KEY
//          SCALAR("key 1",plain)
//          VALUE
//          SCALAR("value 1",plain)
//          KEY
//          SCALAR("key 2",plain)
//          VALUE
//          SCALAR("value 2",plain)
//          BLOCK-END
//          BLOCK-ENTRY
//          BLOCK-MAPPING-START
//          KEY
//          SCALAR("complex key")
//          VALUE
//          SCALAR("complex value")
//          BLOCK-END
//          BLOCK-END
//          STREAM-END
//
//      2. Collections in a mapping:
//
//          ? a sequence
//          : - item 1
//            - item 2
//          ? a mapping
//          : key 1: value 1
//            key 2: value 2
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          BLOCK-MAPPING-START
//          KEY
//          SCALAR("a sequence",plain)
//          VALUE
//          BLOCK-SEQUENCE-START
//          BLOCK-ENTRY
//          SCALAR("item 1",plain)
//          BLOCK-ENTRY
//          SCALAR("item 2",plain)
//          BLOCK-END
//          KEY
//          SCALAR("a mapping",plain)
//          VALUE
//          BLOCK-MAPPING-START
//          KEY
//          SCALAR("key 1",plain)
//          VALUE
//          SCALAR("value 1",plain)
//          KEY
//          SCALAR("key 2",plain)
//          VALUE
//          SCALAR("value 2",plain)
//          BLOCK-END
//          BLOCK-END
//          STREAM-END
//
// YAML also permits non-indented sequences if they are included into a block
// mapping.  In this case, the token BLOCK-SEQUENCE-START is not produced:
//
//      key:
//      - item 1    # BLOCK-SEQUENCE-START is NOT produced here.
//      - item 2
//
// Tokens:
//
//      STREAM-START(utf-8)
//      BLOCK-MAPPING-START
//      KEY
//      SCALAR("key",plain)
//      VALUE
//      BLOCK-ENTRY
//      SCALAR("item 1",plain)
//      BLOCK-ENTRY
//      SCALAR("item 2",plain)
//      BLOCK-END
//

// Ensure that the buffer contains the required number of characters.
// Return true on success, false on failure (reader error or memory error).
func cache(parser *yaml_parser_t, length int) bool {
	// [Go] This was inlined: !cache(A, B) -> unread < B && !update(A, B)
	return parser.unread >= length || yaml_parser_update_buffer(parser, length)
}

// Advance the buffer pointer.
func skip(parser *yaml_parser_t) {
	parser.mark.index++
	parser.mark.column++
	parser.unread--
	parser.buffer_pos += width(parser.buffer[parser.buffer_pos])
}

func skip_line(parser *yaml_parser_t) {
	if is_crlf(parser.buffer, parser.buffer_pos) {
		parser.mark.index += 2
		parser.mark.column = 0
		parser.mark.line++
		parser.unread -= 2
		parser.buffer_pos += 2
	} else if is_break(parser.buffer, parser.buffer_pos) {
		parser.mark.index++
		parser.mark.column = 0
		parser.mark.line++
		parser.unread--
		parser.buffer_pos += width(parser.buffer[parser.buffer_pos])
	}
}

// Copy a character to a string buffer and advance pointers.
func read(parser *yaml_parser_t, s []byte) []byte {
	w := width(parser.buffer[parser.buffer_pos])
	if w == 0 {
		panic("invalid character sequence")
	}
	if len(s) == 0 {
		s = make([]byte, 0, 32)
	}
	if w == 1 && len(s)+w <= cap(s) {
		s = s[:len(s)+1]
		s[len(s)-1] = parser.buffer[parser.buffer_pos]
		parser.buffer_pos++
	} else {
		s = append(s, parser.buffer[parser.buffer_pos:parser.buffer_pos+w]...)
		parser.buffer_pos += w
	}
	parser.mark.index++
	parser.mark.column++
	parser.unread--
	return s
}

// Copy a line break character to a string buffer and advance pointers.
func read_line(parser *yaml_parser_t, s []byte) []byte {
	buf := parser.buffer
	pos := parser.buffer_pos
	switch {
	case buf[pos] == '\r' && buf[pos+1] == '\n':
		// CR LF . LF
		s = append(s, '\n')
		parser.buffer_pos += 2
		parser.mark.index++
		parser.unread--
	case buf[pos] == '\r' || buf[pos] == '\n':
		// CR|LF . LF
		s = append(s, '\n')
		parser.buffer_pos += 1
	case buf[pos] == '\xC2' && buf[pos+1] == '\x85':
		// NEL . LF
		s = append(s, '\n')
		parser.buffer_pos += 2
	case buf[pos] == '\xE2' && buf[pos+1] == '\x80' && (buf[pos+2] == '\xA8' || buf[pos+2] == '\xA9'):
		// LS|PS . LS|PS
		s = append(s, buf[parser.buffer_pos:pos+3]...)
		parser.buffer_pos += 3
	default:
		return s
	}
	parser.mark.index++
	parser.mark.column = 0
	parser.mark.line++
	parser.unread--
	return s
}

// Get the next token.
func yaml_parser_scan(parser *yaml_parser_t, token *yaml_token_t) bool {
	// Erase the token object.
	*token = yaml_token_t{} // [Go] Is this necessary?

	// No tokens after STREAM-END or error.
	if parser.stream_end_produced || parser.error != yaml_NO_ERROR {
		return true
	}

	// Ensure that the tokens queue contains enough tokens.
	if !parser.token_available {
		if !yaml_parser_fetch_more_tokens(parser) {
			return false
		}
	}

	// Fetch the next token from the queue.
	*token = parser.tokens[parser.tokens_head]
	parser.tokens_head++
	parser.tokens_parsed++
	parser.token_available = false

	if token.typ == yaml_STREAM_END_TOKEN {
		parser.stream_end_produced = true
	}
	return true
}

// Set the scanner error and return false.
func yaml_parser_set_scanner_error(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string) bool {
	parser.error = yaml_SCANNER_ERROR
	parser.context = context
	parser.context_mark = context_mark
	parser.problem = problem
	parser.problem_mark = parser.mark
	return false
}

func yaml_parser_set_scanner_tag_error(parser *yaml_parser_t, directive bool, context_mark yaml_mark_t, problem string) bool {
	context := "while parsing a tag"
	if directive {
		context = "while parsing a %TAG directive"
	}
	return yaml_parser_set_scanner_error(parser, context, context_mark, problem)
}

func trace(args ...interface{}) func() {
	pargs := append([]interface{}{"+++"}, args...)
	fmt.Println(pargs...)
	pargs = append([]interface{}{"---"}, args...)
	return func() { fmt.Println(pargs...) }
}

// Ensure that the tokens queue contains at least one token which can be
// returned to the Parser.
func yaml_parser_fetch_more_tokens(parser *yaml_parser_t) bool {
	// While we need more tokens to fetch, do it.
	for {
		if parser.tokens_head != len(parser.tokens) {
			// If queue is non-empty, check if any potential simple key may
			// occupy the head position.
			head_tok_idx, ok := parser.simple_keys_by_tok[parser.tokens_parsed]
			if !ok {
				break
			} else if valid, ok := yaml_simple_key_is_valid(parser, &parser.simple_keys[head_tok_idx]); !ok {
				return false
			} else if !valid {
				break
			}
		}
		// Fetch the next token.
		if !yaml_parser_fetch_next_token(parser) {
			return false
		}
	}

	parser.token_available = true
	return true
}

// The dispatcher for token fetchers.
func yaml_parser_fetch_next_token(parser *yaml_parser_t) bool {
	// Ensure that the buffer is initialized.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}

	// Check if we just started scanning.  Fetch STREAM-START then.
	if !parser.stream_start_produced {
		return yaml_parser_fetch_stream_start(parser)
	}

	// Eat whitespaces and comments until we reach the next token.
	if !yaml_parser_scan_to_next_token(parser) {
		return false
	}

	// Check the indentation level against the current column.
	if !yaml_parser_unroll_indent(parser, parser.mark.column) {
		return false
	}

	// Ensure that the buffer contains at least 4 characters.  4 is the length
	// of the longest indicators ('--- ' and '... ').
	if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) {
		return false
	}

	// Is it the end of the stream?
	if is_z(parser.buffer, parser.buffer_pos) {
		return yaml_parser_fetch_stream_end(parser)
	}

	// Is it a directive?
	if parser.mark.column == 0 && parser.buffer[parser.buffer_pos] == '%' {
		return yaml_parser_fetch_directive(parser)
	}

	buf := parser.buffer
	pos := parser.buffer_pos

	// Is it the document start indicator?
	if parser.mark.column == 0 && buf[pos] == '-' && buf[pos+1] == '-' && buf[pos+2] == '-' && is_blankz(buf, pos+3) {
		return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_START_TOKEN)
	}

	// Is it the document end indicator?
	if parser.mark.column == 0 && buf[pos] == '.' && buf[pos+1] == '.' && buf[pos+2] == '.' && is_blankz(buf, pos+3) {
		return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_END_TOKEN)
	}

	// Is it the flow sequence start indicator?
	if buf[pos] == '[' {
		return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_SEQUENCE_START_TOKEN)
	}

	// Is it the flow mapping start indicator?
	if parser.buffer[parser.buffer_pos] == '{' {
		return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_MAPPING_START_TOKEN)
	}

	// Is it the flow sequence end indicator?
	if parser.buffer[parser.buffer_pos] == ']' {
		return yaml_parser_fetch_flow_collection_end(parser,
			yaml_FLOW_SEQUENCE_END_TOKEN)
	}

	// Is it the flow mapping end indicator?
	if parser.buffer[parser.buffer_pos] == '}' {
		return yaml_parser_fetch_flow_collection_end(parser,
			yaml_FLOW_MAPPING_END_TOKEN)
	}

	// Is it the flow entry indicator?
	if parser.buffer[parser.buffer_pos] == ',' {
		return yaml_parser_fetch_flow_entry(parser)
	}

	// Is it the block entry indicator?
	if parser.buffer[parser.buffer_pos] == '-' && is_blankz(parser.buffer, parser.buffer_pos+1) {
		return yaml_parser_fetch_block_entry(parser)
	}

	// Is it the key indicator?
	if parser.buffer[parser.buffer_pos] == '?' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) {
		return yaml_parser_fetch_key(parser)
	}

	// Is it the value indicator?
	if parser.buffer[parser.buffer_pos] == ':' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) {
		return yaml_parser_fetch_value(parser)
	}

	// Is it an alias?
	if parser.buffer[parser.buffer_pos] == '*' {
		return yaml_parser_fetch_anchor(parser, yaml_ALIAS_TOKEN)
	}

	// Is it an anchor?
	if parser.buffer[parser.buffer_pos] == '&' {
		return yaml_parser_fetch_anchor(parser, yaml_ANCHOR_TOKEN)
	}

	// Is it a tag?
	if parser.buffer[parser.buffer_pos] == '!' {
		return yaml_parser_fetch_tag(parser)
	}

	// Is it a literal scalar?
	if parser.buffer[parser.buffer_pos] == '|' && parser.flow_level == 0 {
		return yaml_parser_fetch_block_scalar(parser, true)
	}

	// Is it a folded scalar?
	if parser.buffer[parser.buffer_pos] == '>' && parser.flow_level == 0 {
		return yaml_parser_fetch_block_scalar(parser, false)
	}

	// Is it a single-quoted scalar?
	if parser.buffer[parser.buffer_pos] == '\'' {
		return yaml_parser_fetch_flow_scalar(parser, true)
	}

	// Is it a double-quoted scalar?
	if parser.buffer[parser.buffer_pos] == '"' {
		return yaml_parser_fetch_flow_scalar(parser, false)
	}

	// Is it a plain scalar?
	//
	// A plain scalar may start with any non-blank characters except
	//
	//      '-', '?', ':', ',', '[', ']', '{', '}',
	//      '#', '&', '*', '!', '|', '>', '\'', '\"',
	//      '%', '@', '`'.
	//
	// In the block context (and, for the '-' indicator, in the flow context
	// too), it may also start with the characters
	//
	//      '-', '?', ':'
	//
	// if it is followed by a non-space character.
	//
	// The last rule is more restrictive than the specification requires.
	// [Go] Make this logic more reasonable.
	//switch parser.buffer[parser.buffer_pos] {
	//case '-', '?', ':', ',', '?', '-', ',', ':', ']', '[', '}', '{', '&', '#', '!', '*', '>', '|', '"', '\'', '@', '%', '-', '`':
	//}
	if !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '-' ||
		parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':' ||
		parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '[' ||
		parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' ||
		parser.buffer[parser.buffer_pos] == '}' || parser.buffer[parser.buffer_pos] == '#' ||
		parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '*' ||
		parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '|' ||
		parser.buffer[parser.buffer_pos] == '>' || parser.buffer[parser.buffer_pos] == '\'' ||
		parser.buffer[parser.buffer_pos] == '"' || parser.buffer[parser.buffer_pos] == '%' ||
		parser.buffer[parser.buffer_pos] == '@' || parser.buffer[parser.buffer_pos] == '`') ||
		(parser.buffer[parser.buffer_pos] == '-' && !is_blank(parser.buffer, parser.buffer_pos+1)) ||
		(parser.flow_level == 0 &&
			(parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':') &&
			!is_blankz(parser.buffer, parser.buffer_pos+1)) {
		return yaml_parser_fetch_plain_scalar(parser)
	}

	// If we don't determine the token type so far, it is an error.
	return yaml_parser_set_scanner_error(parser,
		"while scanning for the next token", parser.mark,
		"found character that cannot start any token")
}

func yaml_simple_key_is_valid(parser *yaml_parser_t, simple_key *yaml_simple_key_t) (valid, ok bool) {
	if !simple_key.possible {
		return false, true
	}

	// The 1.2 specification says:
	//
	//     "If the ? indicator is omitted, parsing needs to see past the
	//     implicit key to recognize it as such. To limit the amount of
	//     lookahead required, the “:” indicator must appear at most 1024
	//     Unicode characters beyond the start of the key. In addition, the key
	//     is restricted to a single line."
	//
	if simple_key.mark.line < parser.mark.line || simple_key.mark.index+1024 < parser.mark.index {
		// Check if the potential simple key to be removed is required.
		if simple_key.required {
			return false, yaml_parser_set_scanner_error(parser,
				"while scanning a simple key", simple_key.mark,
				"could not find expected ':'")
		}
		simple_key.possible = false
		return false, true
	}
	return true, true
}

// Check if a simple key may start at the current position and add it if
// needed.
func yaml_parser_save_simple_key(parser *yaml_parser_t) bool {
	// A simple key is required at the current position if the scanner is in
	// the block context and the current column coincides with the indentation
	// level.

	required := parser.flow_level == 0 && parser.indent == parser.mark.column

	//
	// If the current position may start a simple key, save it.
	//
	if parser.simple_key_allowed {
		simple_key := yaml_simple_key_t{
			possible:     true,
			required:     required,
			token_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head),
			mark:         parser.mark,
		}

		if !yaml_parser_remove_simple_key(parser) {
			return false
		}
		parser.simple_keys[len(parser.simple_keys)-1] = simple_key
		parser.simple_keys_by_tok[simple_key.token_number] = len(parser.simple_keys) - 1
	}
	return true
}

// Remove a potential simple key at the current flow level.
func yaml_parser_remove_simple_key(parser *yaml_parser_t) bool {
	i := len(parser.simple_keys) - 1
	if parser.simple_keys[i].possible {
		// If the key is required, it is an error.
		if parser.simple_keys[i].required {
			return yaml_parser_set_scanner_error(parser,
				"while scanning a simple key", parser.simple_keys[i].mark,
				"could not find expected ':'")
		}
		// Remove the key from the stack.
		parser.simple_keys[i].possible = false
		delete(parser.simple_keys_by_tok, parser.simple_keys[i].token_number)
	}
	return true
}

// max_flow_level limits the flow_level
const max_flow_level = 10000

// Increase the flow level and resize the simple key list if needed.
func yaml_parser_increase_flow_level(parser *yaml_parser_t) bool {
	// Reset the simple key on the next level.
	parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{
		possible:     false,
		required:     false,
		token_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head),
		mark:         parser.mark,
	})

	// Increase the flow level.
	parser.flow_level++
	if parser.flow_level > max_flow_level {
		return yaml_parser_set_scanner_error(parser,
			"while increasing flow level", parser.simple_keys[len(parser.simple_keys)-1].mark,
			fmt.Sprintf("exceeded max depth of %d", max_flow_level))
	}
	return true
}

// Decrease the flow level.
func yaml_parser_decrease_flow_level(parser *yaml_parser_t) bool {
	if parser.flow_level > 0 {
		parser.flow_level--
		last := len(parser.simple_keys) - 1
		delete(parser.simple_keys_by_tok, parser.simple_keys[last].token_number)
		parser.simple_keys = parser.simple_keys[:last]
	}
	return true
}

// max_indents limits the indents stack size
const max_indents = 10000

// Push the current indentation level to the stack and set the new level
// the current column is greater than the indentation level.  In this case,
// append or insert the specified token into the token queue.
func yaml_parser_roll_indent(parser *yaml_parser_t, column, number int, typ yaml_token_type_t, mark yaml_mark_t) bool {
	// In the flow context, do nothing.
	if parser.flow_level > 0 {
		return true
	}

	if parser.indent < column {
		// Push the current indentation level to the stack and set the new
		// indentation level.
		parser.indents = append(parser.indents, parser.indent)
		parser.indent = column
		if len(parser.indents) > max_indents {
			return yaml_parser_set_scanner_error(parser,
				"while increasing indent level", parser.simple_keys[len(parser.simple_keys)-1].mark,
				fmt.Sprintf("exceeded max depth of %d", max_indents))
		}

		// Create a token and insert it into the queue.
		token := yaml_token_t{
			typ:        typ,
			start_mark: mark,
			end_mark:   mark,
		}
		if number > -1 {
			number -= parser.tokens_parsed
		}
		yaml_insert_token(parser, number, &token)
	}
	return true
}

// Pop indentation levels from the indents stack until the current level
// becomes less or equal to the column.  For each indentation level, append
// the BLOCK-END token.
func yaml_parser_unroll_indent(parser *yaml_parser_t, column int) bool {
	// In the flow context, do nothing.
	if parser.flow_level > 0 {
		return true
	}

	// Loop through the indentation levels in the stack.
	for parser.indent > column {
		// Create a token and append it to the queue.
		token := yaml_token_t{
			typ:        yaml_BLOCK_END_TOKEN,
			start_mark: parser.mark,
			end_mark:   parser.mark,
		}
		yaml_insert_token(parser, -1, &token)

		// Pop the indentation level.
		parser.indent = parser.indents[len(parser.indents)-1]
		parser.indents = parser.indents[:len(parser.indents)-1]
	}
	return true
}

// Initialize the scanner and produce the STREAM-START token.
func yaml_parser_fetch_stream_start(parser *yaml_parser_t) bool {

	// Set the initial indentation.
	parser.indent = -1

	// Initialize the simple key stack.
	parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{})

	parser.simple_keys_by_tok = make(map[int]int)

	// A simple key is allowed at the beginning of the stream.
	parser.simple_key_allowed = true

	// We have started.
	parser.stream_start_produced = true

	// Create the STREAM-START token and append it to the queue.
	token := yaml_token_t{
		typ:        yaml_STREAM_START_TOKEN,
		start_mark: parser.mark,
		end_mark:   parser.mark,
		encoding:   parser.encoding,
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the STREAM-END token and shut down the scanner.
func yaml_parser_fetch_stream_end(parser *yaml_parser_t) bool {

	// Force new line.
	if parser.mark.column != 0 {
		parser.mark.column = 0
		parser.mark.line++
	}

	// Reset the indentation level.
	if !yaml_parser_unroll_indent(parser, -1) {
		return false
	}

	// Reset simple keys.
	if !yaml_parser_remove_simple_key(parser) {
		return false
	}

	parser.simple_key_allowed = false

	// Create the STREAM-END token and append it to the queue.
	token := yaml_token_t{
		typ:        yaml_STREAM_END_TOKEN,
		start_mark: parser.mark,
		end_mark:   parser.mark,
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce a VERSION-DIRECTIVE or TAG-DIRECTIVE token.
func yaml_parser_fetch_directive(parser *yaml_parser_t) bool {
	// Reset the indentation level.
	if !yaml_parser_unroll_indent(parser, -1) {
		return false
	}

	// Reset simple keys.
	if !yaml_parser_remove_simple_key(parser) {
		return false
	}

	parser.simple_key_allowed = false

	// Create the YAML-DIRECTIVE or TAG-DIRECTIVE token.
	token := yaml_token_t{}
	if !yaml_parser_scan_directive(parser, &token) {
		return false
	}
	// Append the token to the queue.
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the DOCUMENT-START or DOCUMENT-END token.
func yaml_parser_fetch_document_indicator(parser *yaml_parser_t, typ yaml_token_type_t) bool {
	// Reset the indentation level.
	if !yaml_parser_unroll_indent(parser, -1) {
		return false
	}

	// Reset simple keys.
	if !yaml_parser_remove_simple_key(parser) {
		return false
	}

	parser.simple_key_allowed = false

	// Consume the token.
	start_mark := parser.mark

	skip(parser)
	skip(parser)
	skip(parser)

	end_mark := parser.mark

	// Create the DOCUMENT-START or DOCUMENT-END token.
	token := yaml_token_t{
		typ:        typ,
		start_mark: start_mark,
		end_mark:   end_mark,
	}
	// Append the token to the queue.
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the FLOW-SEQUENCE-START or FLOW-MAPPING-START token.
func yaml_parser_fetch_flow_collection_start(parser *yaml_parser_t, typ yaml_token_type_t) bool {
	// The indicators '[' and '{' may start a simple key.
	if !yaml_parser_save_simple_key(parser) {
		return false
	}

	// Increase the flow level.
	if !yaml_parser_increase_flow_level(parser) {
		return false
	}

	// A simple key may follow the indicators '[' and '{'.
	parser.simple_key_allowed = true

	// Consume the token.
	start_mark := parser.mark
	skip(parser)
	end_mark := parser.mark

	// Create the FLOW-SEQUENCE-START of FLOW-MAPPING-START token.
	token := yaml_token_t{
		typ:        typ,
		start_mark: start_mark,
		end_mark:   end_mark,
	}
	// Append the token to the queue.
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the FLOW-SEQUENCE-END or FLOW-MAPPING-END token.
func yaml_parser_fetch_flow_collection_end(parser *yaml_parser_t, typ yaml_token_type_t) bool {
	// Reset any potential simple key on the current flow level.
	if !yaml_parser_remove_simple_key(parser) {
		return false
	}

	// Decrease the flow level.
	if !yaml_parser_decrease_flow_level(parser) {
		return false
	}

	// No simple keys after the indicators ']' and '}'.
	parser.simple_key_allowed = false

	// Consume the token.

	start_mark := parser.mark
	skip(parser)
	end_mark := parser.mark

	// Create the FLOW-SEQUENCE-END of FLOW-MAPPING-END token.
	token := yaml_token_t{
		typ:        typ,
		start_mark: start_mark,
		end_mark:   end_mark,
	}
	// Append the token to the queue.
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the FLOW-ENTRY token.
func yaml_parser_fetch_flow_entry(parser *yaml_parser_t) bool {
	// Reset any potential simple keys on the current flow level.
	if !yaml_parser_remove_simple_key(parser) {
		return false
	}

	// Simple keys are allowed after ','.
	parser.simple_key_allowed = true

	// Consume the token.
	start_mark := parser.mark
	skip(parser)
	end_mark := parser.mark

	// Create the FLOW-ENTRY token and append it to the queue.
	token := yaml_token_t{
		typ:        yaml_FLOW_ENTRY_TOKEN,
		start_mark: start_mark,
		end_mark:   end_mark,
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the BLOCK-ENTRY token.
func yaml_parser_fetch_block_entry(parser *yaml_parser_t) bool {
	// Check if the scanner is in the block context.
	if parser.flow_level == 0 {
		// Check if we are allowed to start a new entry.
		if !parser.simple_key_allowed {
			return yaml_parser_set_scanner_error(parser, "", parser.mark,
				"block sequence entries are not allowed in this context")
		}
		// Add the BLOCK-SEQUENCE-START token if needed.
		if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_SEQUENCE_START_TOKEN, parser.mark) {
			return false
		}
	} else {
		// It is an error for the '-' indicator to occur in the flow context,
		// but we let the Parser detect and report about it because the Parser
		// is able to point to the context.
	}

	// Reset any potential simple keys on the current flow level.
	if !yaml_parser_remove_simple_key(parser) {
		return false
	}

	// Simple keys are allowed after '-'.
	parser.simple_key_allowed = true

	// Consume the token.
	start_mark := parser.mark
	skip(parser)
	end_mark := parser.mark

	// Create the BLOCK-ENTRY token and append it to the queue.
	token := yaml_token_t{
		typ:        yaml_BLOCK_ENTRY_TOKEN,
		start_mark: start_mark,
		end_mark:   end_mark,
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the KEY token.
func yaml_parser_fetch_key(parser *yaml_parser_t) bool {

	// In the block context, additional checks are required.
	if parser.flow_level == 0 {
		// Check if we are allowed to start a new key (not nessesary simple).
		if !parser.simple_key_allowed {
			return yaml_parser_set_scanner_error(parser, "", parser.mark,
				"mapping keys are not allowed in this context")
		}
		// Add the BLOCK-MAPPING-START token if needed.
		if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) {
			return false
		}
	}

	// Reset any potential simple keys on the current flow level.
	if !yaml_parser_remove_simple_key(parser) {
		return false
	}

	// Simple keys are allowed after '?' in the block context.
	parser.simple_key_allowed = parser.flow_level == 0

	// Consume the token.
	start_mark := parser.mark
	skip(parser)
	end_mark := parser.mark

	// Create the KEY token and append it to the queue.
	token := yaml_token_t{
		typ:        yaml_KEY_TOKEN,
		start_mark: start_mark,
		end_mark:   end_mark,
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the VALUE token.
func yaml_parser_fetch_value(parser *yaml_parser_t) bool {

	simple_key := &parser.simple_keys[len(parser.simple_keys)-1]

	// Have we found a simple key?
	if valid, ok := yaml_simple_key_is_valid(parser, simple_key); !ok {
		return false

	} else if valid {

		// Create the KEY token and insert it into the queue.
		token := yaml_token_t{
			typ:        yaml_KEY_TOKEN,
			start_mark: simple_key.mark,
			end_mark:   simple_key.mark,
		}
		yaml_insert_token(parser, simple_key.token_number-parser.tokens_parsed, &token)

		// In the block context, we may need to add the BLOCK-MAPPING-START token.
		if !yaml_parser_roll_indent(parser, simple_key.mark.column,
			simple_key.token_number,
			yaml_BLOCK_MAPPING_START_TOKEN, simple_key.mark) {
			return false
		}

		// Remove the simple key.
		simple_key.possible = false
		delete(parser.simple_keys_by_tok, simple_key.token_number)

		// A simple key cannot follow another simple key.
		parser.simple_key_allowed = false

	} else {
		// The ':' indicator follows a complex key.

		// In the block context, extra checks are required.
		if parser.flow_level == 0 {

			// Check if we are allowed to start a complex value.
			if !parser.simple_key_allowed {
				return yaml_parser_set_scanner_error(parser, "", parser.mark,
					"mapping values are not allowed in this context")
			}

			// Add the BLOCK-MAPPING-START token if needed.
			if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) {
				return false
			}
		}

		// Simple keys after ':' are allowed in the block context.
		parser.simple_key_allowed = parser.flow_level == 0
	}

	// Consume the token.
	start_mark := parser.mark
	skip(parser)
	end_mark := parser.mark

	// Create the VALUE token and append it to the queue.
	token := yaml_token_t{
		typ:        yaml_VALUE_TOKEN,
		start_mark: start_mark,
		end_mark:   end_mark,
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the ALIAS or ANCHOR token.
func yaml_parser_fetch_anchor(parser *yaml_parser_t, typ yaml_token_type_t) bool {
	// An anchor or an alias could be a simple key.
	if !yaml_parser_save_simple_key(parser) {
		return false
	}

	// A simple key cannot follow an anchor or an alias.
	parser.simple_key_allowed = false

	// Create the ALIAS or ANCHOR token and append it to the queue.
	var token yaml_token_t
	if !yaml_parser_scan_anchor(parser, &token, typ) {
		return false
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the TAG token.
func yaml_parser_fetch_tag(parser *yaml_parser_t) bool {
	// A tag could be a simple key.
	if !yaml_parser_save_simple_key(parser) {
		return false
	}

	// A simple key cannot follow a tag.
	parser.simple_key_allowed = false

	// Create the TAG token and append it to the queue.
	var token yaml_token_t
	if !yaml_parser_scan_tag(parser, &token) {
		return false
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the SCALAR(...,literal) or SCALAR(...,folded) tokens.
func yaml_parser_fetch_block_scalar(parser *yaml_parser_t, literal bool) bool {
	// Remove any potential simple keys.
	if !yaml_parser_remove_simple_key(parser) {
		return false
	}

	// A simple key may follow a block scalar.
	parser.simple_key_allowed = true

	// Create the SCALAR token and append it to the queue.
	var token yaml_token_t
	if !yaml_parser_scan_block_scalar(parser, &token, literal) {
		return false
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the SCALAR(...,single-quoted) or SCALAR(...,double-quoted) tokens.
func yaml_parser_fetch_flow_scalar(parser *yaml_parser_t, single bool) bool {
	// A plain scalar could be a simple key.
	if !yaml_parser_save_simple_key(parser) {
		return false
	}

	// A simple key cannot follow a flow scalar.
	parser.simple_key_allowed = false

	// Create the SCALAR token and append it to the queue.
	var token yaml_token_t
	if !yaml_parser_scan_flow_scalar(parser, &token, single) {
		return false
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the SCALAR(...,plain) token.
func yaml_parser_fetch_plain_scalar(parser *yaml_parser_t) bool {
	// A plain scalar could be a simple key.
	if !yaml_parser_save_simple_key(parser) {
		return false
	}

	// A simple key cannot follow a flow scalar.
	parser.simple_key_allowed = false

	// Create the SCALAR token and append it to the queue.
	var token yaml_token_t
	if !yaml_parser_scan_plain_scalar(parser, &token) {
		return false
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Eat whitespaces and comments until the next token is found.
func yaml_parser_scan_to_next_token(parser *yaml_parser_t) bool {

	// Until the next token is not found.
	for {
		// Allow the BOM mark to start a line.
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
		if parser.mark.column == 0 && is_bom(parser.buffer, parser.buffer_pos) {
			skip(parser)
		}

		// Eat whitespaces.
		// Tabs are allowed:
		//  - in the flow context
		//  - in the block context, but not at the beginning of the line or
		//  after '-', '?', or ':' (complex value).
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}

		for parser.buffer[parser.buffer_pos] == ' ' || ((parser.flow_level > 0 || !parser.simple_key_allowed) && parser.buffer[parser.buffer_pos] == '\t') {
			skip(parser)
			if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
				return false
			}
		}

		// Eat a comment until a line break.
		if parser.buffer[parser.buffer_pos] == '#' {
			for !is_breakz(parser.buffer, parser.buffer_pos) {
				skip(parser)
				if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
					return false
				}
			}
		}

		// If it is a line break, eat it.
		if is_break(parser.buffer, parser.buffer_pos) {
			if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
				return false
			}
			skip_line(parser)

			// In the block context, a new line may start a simple key.
			if parser.flow_level == 0 {
				parser.simple_key_allowed = true
			}
		} else {
			break // We have found a token.
		}
	}

	return true
}

// Scan a YAML-DIRECTIVE or TAG-DIRECTIVE token.
//
// Scope:
//      %YAML    1.1    # a comment \n
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//      %TAG    !yaml!  tag:yaml.org,2002:  \n
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
func yaml_parser_scan_directive(parser *yaml_parser_t, token *yaml_token_t) bool {
	// Eat '%'.
	start_mark := parser.mark
	skip(parser)

	// Scan the directive name.
	var name []byte
	if !yaml_parser_scan_directive_name(parser, start_mark, &name) {
		return false
	}

	// Is it a YAML directive?
	if bytes.Equal(name, []byte("YAML")) {
		// Scan the VERSION directive value.
		var major, minor int8
		if !yaml_parser_scan_version_directive_value(parser, start_mark, &major, &minor) {
			return false
		}
		end_mark := parser.mark

		// Create a VERSION-DIRECTIVE token.
		*token = yaml_token_t{
			typ:        yaml_VERSION_DIRECTIVE_TOKEN,
			start_mark: start_mark,
			end_mark:   end_mark,
			major:      major,
			minor:      minor,
		}

		// Is it a TAG directive?
	} else if bytes.Equal(name, []byte("TAG")) {
		// Scan the TAG directive value.
		var handle, prefix []byte
		if !yaml_parser_scan_tag_directive_value(parser, start_mark, &handle, &prefix) {
			return false
		}
		end_mark := parser.mark

		// Create a TAG-DIRECTIVE token.
		*token = yaml_token_t{
			typ:        yaml_TAG_DIRECTIVE_TOKEN,
			start_mark: start_mark,
			end_mark:   end_mark,
			value:      handle,
			prefix:     prefix,
		}

		// Unknown directive.
	} else {
		yaml_parser_set_scanner_error(parser, "while scanning a directive",
			start_mark, "found unknown directive name")
		return false
	}

	// Eat the rest of the line including any comments.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}

	for is_blank(parser.buffer, parser.buffer_pos) {
		skip(parser)
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}

	if parser.buffer[parser.buffer_pos] == '#' {
		for !is_breakz(parser.buffer, parser.buffer_pos) {
			skip(parser)
			if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
				return false
			}
		}
	}

	// Check if we are at the end of the line.
	if !is_breakz(parser.buffer, parser.buffer_pos) {
		yaml_parser_set_scanner_error(parser, "while scanning a directive",
			start_mark, "did not find expected comment or line break")
		return false
	}

	// Eat a line break.
	if is_break(parser.buffer, parser.buffer_pos) {
		if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
			return false
		}
		skip_line(parser)
	}

	return true
}

// Scan the directive name.
//
// Scope:
//      %YAML   1.1     # a comment \n
//       ^^^^
//      %TAG    !yaml!  tag:yaml.org,2002:  \n
//       ^^^
//
func yaml_parser_scan_directive_name(parser *yaml_parser_t, start_mark yaml_mark_t, name *[]byte) bool {
	// Consume the directive name.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}

	var s []byte
	for is_alpha(parser.buffer, parser.buffer_pos) {
		s = read(parser, s)
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}

	// Check if the name is empty.
	if len(s) == 0 {
		yaml_parser_set_scanner_error(parser, "while scanning a directive",
			start_mark, "could not find expected directive name")
		return false
	}

	// Check for an blank character after the name.
	if !is_blankz(parser.buffer, parser.buffer_pos) {
		yaml_parser_set_scanner_error(parser, "while scanning a directive",
			start_mark, "found unexpected non-alphabetical character")
		return false
	}
	*name = s
	return true
}

// Scan the value of VERSION-DIRECTIVE.
//
// Scope:
//      %YAML   1.1     # a comment \n
//           ^^^^^^
func yaml_parser_scan_version_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, major, minor *int8) bool {
	// Eat whitespaces.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}
	for is_blank(parser.buffer, parser.buffer_pos) {
		skip(parser)
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}

	// Consume the major version number.
	if !yaml_parser_scan_version_directive_number(parser, start_mark, major) {
		return false
	}

	// Eat '.'.
	if parser.buffer[parser.buffer_pos] != '.' {
		return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive",
			start_mark, "did not find expected digit or '.' character")
	}

	skip(parser)

	// Consume the minor version number.
	if !yaml_parser_scan_version_directive_number(parser, start_mark, minor) {
		return false
	}
	return true
}

const max_number_length = 2

// Scan the version number of VERSION-DIRECTIVE.
//
// Scope:
//      %YAML   1.1     # a comment \n
//              ^
//      %YAML   1.1     # a comment \n
//                ^
func yaml_parser_scan_version_directive_number(parser *yaml_parser_t, start_mark yaml_mark_t, number *int8) bool {

	// Repeat while the next character is digit.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}
	var value, length int8
	for is_digit(parser.buffer, parser.buffer_pos) {
		// Check if the number is too long.
		length++
		if length > max_number_length {
			return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive",
				start_mark, "found extremely long version number")
		}
		value = value*10 + int8(as_digit(parser.buffer, parser.buffer_pos))
		skip(parser)
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}

	// Check if the number was present.
	if length == 0 {
		return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive",
			start_mark, "did not find expected version number")
	}
	*number = value
	return true
}

// Scan the value of a TAG-DIRECTIVE token.
//
// Scope:
//      %TAG    !yaml!  tag:yaml.org,2002:  \n
//          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
func yaml_parser_scan_tag_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, handle, prefix *[]byte) bool {
	var handle_value, prefix_value []byte

	// Eat whitespaces.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}

	for is_blank(parser.buffer, parser.buffer_pos) {
		skip(parser)
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}

	// Scan a handle.
	if !yaml_parser_scan_tag_handle(parser, true, start_mark, &handle_value) {
		return false
	}

	// Expect a whitespace.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}
	if !is_blank(parser.buffer, parser.buffer_pos) {
		yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive",
			start_mark, "did not find expected whitespace")
		return false
	}

	// Eat whitespaces.
	for is_blank(parser.buffer, parser.buffer_pos) {
		skip(parser)
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}

	// Scan a prefix.
	if !yaml_parser_scan_tag_uri(parser, true, nil, start_mark, &prefix_value) {
		return false
	}

	// Expect a whitespace or line break.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}
	if !is_blankz(parser.buffer, parser.buffer_pos) {
		yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive",
			start_mark, "did not find expected whitespace or line break")
		return false
	}

	*handle = handle_value
	*prefix = prefix_value
	return true
}

func yaml_parser_scan_anchor(parser *yaml_parser_t, token *yaml_token_t, typ yaml_token_type_t) bool {
	var s []byte

	// Eat the indicator character.
	start_mark := parser.mark
	skip(parser)

	// Consume the value.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}

	for is_alpha(parser.buffer, parser.buffer_pos) {
		s = read(parser, s)
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}

	end_mark := parser.mark

	/*
	 * Check if length of the anchor is greater than 0 and it is followed by
	 * a whitespace character or one of the indicators:
	 *
	 *      '?', ':', ',', ']', '}', '%', '@', '`'.
	 */

	if len(s) == 0 ||
		!(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '?' ||
			parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == ',' ||
			parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '}' ||
			parser.buffer[parser.buffer_pos] == '%' || parser.buffer[parser.buffer_pos] == '@' ||
			parser.buffer[parser.buffer_pos] == '`') {
		context := "while scanning an alias"
		if typ == yaml_ANCHOR_TOKEN {
			context = "while scanning an anchor"
		}
		yaml_parser_set_scanner_error(parser, context, start_mark,
			"did not find expected alphabetic or numeric character")
		return false
	}

	// Create a token.
	*token = yaml_token_t{
		typ:        typ,
		start_mark: start_mark,
		end_mark:   end_mark,
		value:      s,
	}

	return true
}

/*
 * Scan a TAG token.
 */

func yaml_parser_scan_tag(parser *yaml_parser_t, token *yaml_token_t) bool {
	var handle, suffix []byte

	start_mark := parser.mark

	// Check if the tag is in the canonical form.
	if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
		return false
	}

	if parser.buffer[parser.buffer_pos+1] == '<' {
		// Keep the handle as ''

		// Eat '!<'
		skip(parser)
		skip(parser)

		// Consume the tag value.
		if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) {
			return false
		}

		// Check for '>' and eat it.
		if parser.buffer[parser.buffer_pos] != '>' {
			yaml_parser_set_scanner_error(parser, "while scanning a tag",
				start_mark, "did not find the expected '>'")
			return false
		}

		skip(parser)
	} else {
		// The tag has either the '!suffix' or the '!handle!suffix' form.

		// First, try to scan a handle.
		if !yaml_parser_scan_tag_handle(parser, false, start_mark, &handle) {
			return false
		}

		// Check if it is, indeed, handle.
		if handle[0] == '!' && len(handle) > 1 && handle[len(handle)-1] == '!' {
			// Scan the suffix now.
			if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) {
				return false
			}
		} else {
			// It wasn't a handle after all.  Scan the rest of the tag.
			if !yaml_parser_scan_tag_uri(parser, false, handle, start_mark, &suffix) {
				return false
			}

			// Set the handle to '!'.
			handle = []byte{'!'}

			// A special case: the '!' tag.  Set the handle to '' and the
			// suffix to '!'.
			if len(suffix) == 0 {
				handle, suffix = suffix, handle
			}
		}
	}

	// Check the character which ends the tag.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}
	if !is_blankz(parser.buffer, parser.buffer_pos) {
		yaml_parser_set_scanner_error(parser, "while scanning a tag",
			start_mark, "did not find expected whitespace or line break")
		return false
	}

	end_mark := parser.mark

	// Create a token.
	*token = yaml_token_t{
		typ:        yaml_TAG_TOKEN,
		start_mark: start_mark,
		end_mark:   end_mark,
		value:      handle,
		suffix:     suffix,
	}
	return true
}

// Scan a tag handle.
func yaml_parser_scan_tag_handle(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, handle *[]byte) bool {
	// Check the initial '!' character.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}
	if parser.buffer[parser.buffer_pos] != '!' {
		yaml_parser_set_scanner_tag_error(parser, directive,
			start_mark, "did not find expected '!'")
		return false
	}

	var s []byte

	// Copy the '!' character.
	s = read(parser, s)

	// Copy all subsequent alphabetical and numerical characters.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}
	for is_alpha(parser.buffer, parser.buffer_pos) {
		s = read(parser, s)
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}

	// Check if the trailing character is '!' and copy it.
	if parser.buffer[parser.buffer_pos] == '!' {
		s = read(parser, s)
	} else {
		// It's either the '!' tag or not really a tag handle.  If it's a %TAG
		// directive, it's an error.  If it's a tag token, it must be a part of URI.
		if directive && string(s) != "!" {
			yaml_parser_set_scanner_tag_error(parser, directive,
				start_mark, "did not find expected '!'")
			return false
		}
	}

	*handle = s
	return true
}

// Scan a tag.
func yaml_parser_scan_tag_uri(parser *yaml_parser_t, directive bool, head []byte, start_mark yaml_mark_t, uri *[]byte) bool {
	//size_t length = head ? strlen((char *)head) : 0
	var s []byte
	hasTag := len(head) > 0

	// Copy the head if needed.
	//
	// Note that we don't copy the leading '!' character.
	if len(head) > 1 {
		s = append(s, head[1:]...)
	}

	// Scan the tag.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}

	// The set of characters that may appear in URI is as follows:
	//
	//      '0'-'9', 'A'-'Z', 'a'-'z', '_', '-', ';', '/', '?', ':', '@', '&',
	//      '=', '+', '$', ',', '.', '!', '~', '*', '\'', '(', ')', '[', ']',
	//      '%'.
	// [Go] Convert this into more reasonable logic.
	for is_alpha(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == ';' ||
		parser.buffer[parser.buffer_pos] == '/' || parser.buffer[parser.buffer_pos] == '?' ||
		parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == '@' ||
		parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '=' ||
		parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '$' ||
		parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '.' ||
		parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '~' ||
		parser.buffer[parser.buffer_pos] == '*' || parser.buffer[parser.buffer_pos] == '\'' ||
		parser.buffer[parser.buffer_pos] == '(' || parser.buffer[parser.buffer_pos] == ')' ||
		parser.buffer[parser.buffer_pos] == '[' || parser.buffer[parser.buffer_pos] == ']' ||
		parser.buffer[parser.buffer_pos] == '%' {
		// Check if it is a URI-escape sequence.
		if parser.buffer[parser.buffer_pos] == '%' {
			if !yaml_parser_scan_uri_escapes(parser, directive, start_mark, &s) {
				return false
			}
		} else {
			s = read(parser, s)
		}
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
		hasTag = true
	}

	if !hasTag {
		yaml_parser_set_scanner_tag_error(parser, directive,
			start_mark, "did not find expected tag URI")
		return false
	}
	*uri = s
	return true
}

// Decode an URI-escape sequence corresponding to a single UTF-8 character.
func yaml_parser_scan_uri_escapes(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, s *[]byte) bool {

	// Decode the required number of characters.
	w := 1024
	for w > 0 {
		// Check for a URI-escaped octet.
		if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) {
			return false
		}

		if !(parser.buffer[parser.buffer_pos] == '%' &&
			is_hex(parser.buffer, parser.buffer_pos+1) &&
			is_hex(parser.buffer, parser.buffer_pos+2)) {
			return yaml_parser_set_scanner_tag_error(parser, directive,
				start_mark, "did not find URI escaped octet")
		}

		// Get the octet.
		octet := byte((as_hex(parser.buffer, parser.buffer_pos+1) << 4) + as_hex(parser.buffer, parser.buffer_pos+2))

		// If it is the leading octet, determine the length of the UTF-8 sequence.
		if w == 1024 {
			w = width(octet)
			if w == 0 {
				return yaml_parser_set_scanner_tag_error(parser, directive,
					start_mark, "found an incorrect leading UTF-8 octet")
			}
		} else {
			// Check if the trailing octet is correct.
			if octet&0xC0 != 0x80 {
				return yaml_parser_set_scanner_tag_error(parser, directive,
					start_mark, "found an incorrect trailing UTF-8 octet")
			}
		}

		// Copy the octet and move the pointers.
		*s = append(*s, octet)
		skip(parser)
		skip(parser)
		skip(parser)
		w--
	}
	return true
}

// Scan a block scalar.
func yaml_parser_scan_block_scalar(parser *yaml_parser_t, token *yaml_token_t, literal bool) bool {
	// Eat the indicator '|' or '>'.
	start_mark := parser.mark
	skip(parser)

	// Scan the additional block scalar indicators.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}

	// Check for a chomping indicator.
	var chomping, increment int
	if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' {
		// Set the chomping method and eat the indicator.
		if parser.buffer[parser.buffer_pos] == '+' {
			chomping = +1
		} else {
			chomping = -1
		}
		skip(parser)

		// Check for an indentation indicator.
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
		if is_digit(parser.buffer, parser.buffer_pos) {
			// Check that the indentation is greater than 0.
			if parser.buffer[parser.buffer_pos] == '0' {
				yaml_parser_set_scanner_error(parser, "while scanning a block scalar",
					start_mark, "found an indentation indicator equal to 0")
				return false
			}

			// Get the indentation level and eat the indicator.
			increment = as_digit(parser.buffer, parser.buffer_pos)
			skip(parser)
		}

	} else if is_digit(parser.buffer, parser.buffer_pos) {
		// Do the same as above, but in the opposite order.

		if parser.buffer[parser.buffer_pos] == '0' {
			yaml_parser_set_scanner_error(parser, "while scanning a block scalar",
				start_mark, "found an indentation indicator equal to 0")
			return false
		}
		increment = as_digit(parser.buffer, parser.buffer_pos)
		skip(parser)

		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
		if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' {
			if parser.buffer[parser.buffer_pos] == '+' {
				chomping = +1
			} else {
				chomping = -1
			}
			skip(parser)
		}
	}

	// Eat whitespaces and comments to the end of the line.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}
	for is_blank(parser.buffer, parser.buffer_pos) {
		skip(parser)
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}
	if parser.buffer[parser.buffer_pos] == '#' {
		for !is_breakz(parser.buffer, parser.buffer_pos) {
			skip(parser)
			if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
				return false
			}
		}
	}

	// Check if we are at the end of the line.
	if !is_breakz(parser.buffer, parser.buffer_pos) {
		yaml_parser_set_scanner_error(parser, "while scanning a block scalar",
			start_mark, "did not find expected comment or line break")
		return false
	}

	// Eat a line break.
	if is_break(parser.buffer, parser.buffer_pos) {
		if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
			return false
		}
		skip_line(parser)
	}

	end_mark := parser.mark

	// Set the indentation level if it was specified.
	var indent int
	if increment > 0 {
		if parser.indent >= 0 {
			indent = parser.indent + increment
		} else {
			indent = increment
		}
	}

	// Scan the leading line breaks and determine the indentation level if needed.
	var s, leading_break, trailing_breaks []byte
	if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) {
		return false
	}

	// Scan the block scalar content.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}
	var leading_blank, trailing_blank bool
	for parser.mark.column == indent && !is_z(parser.buffer, parser.buffer_pos) {
		// We are at the beginning of a non-empty line.

		// Is it a trailing whitespace?
		trailing_blank = is_blank(parser.buffer, parser.buffer_pos)

		// Check if we need to fold the leading line break.
		if !literal && !leading_blank && !trailing_blank && len(leading_break) > 0 && leading_break[0] == '\n' {
			// Do we need to join the lines by space?
			if len(trailing_breaks) == 0 {
				s = append(s, ' ')
			}
		} else {
			s = append(s, leading_break...)
		}
		leading_break = leading_break[:0]

		// Append the remaining line breaks.
		s = append(s, trailing_breaks...)
		trailing_breaks = trailing_breaks[:0]

		// Is it a leading whitespace?
		leading_blank = is_blank(parser.buffer, parser.buffer_pos)

		// Consume the current line.
		for !is_breakz(parser.buffer, parser.buffer_pos) {
			s = read(parser, s)
			if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
				return false
			}
		}

		// Consume the line break.
		if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
			return false
		}

		leading_break = read_line(parser, leading_break)

		// Eat the following indentation spaces and line breaks.
		if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) {
			return false
		}
	}

	// Chomp the tail.
	if chomping != -1 {
		s = append(s, leading_break...)
	}
	if chomping == 1 {
		s = append(s, trailing_breaks...)
	}

	// Create a token.
	*token = yaml_token_t{
		typ:        yaml_SCALAR_TOKEN,
		start_mark: start_mark,
		end_mark:   end_mark,
		value:      s,
		style:      yaml_LITERAL_SCALAR_STYLE,
	}
	if !literal {
		token.style = yaml_FOLDED_SCALAR_STYLE
	}
	return true
}

// Scan indentation spaces and line breaks for a block scalar.  Determine the
// indentation level if needed.
func yaml_parser_scan_block_scalar_breaks(parser *yaml_parser_t, indent *int, breaks *[]byte, start_mark yaml_mark_t, end_mark *yaml_mark_t) bool {
	*end_mark = parser.mark

	// Eat the indentation spaces and line breaks.
	max_indent := 0
	for {
		// Eat the indentation spaces.
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
		for (*indent == 0 || parser.mark.column < *indent) && is_space(parser.buffer, parser.buffer_pos) {
			skip(parser)
			if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
				return false
			}
		}
		if parser.mark.column > max_indent {
			max_indent = parser.mark.column
		}

		// Check for a tab character messing the indentation.
		if (*indent == 0 || parser.mark.column < *indent) && is_tab(parser.buffer, parser.buffer_pos) {
			return yaml_parser_set_scanner_error(parser, "while scanning a block scalar",
				start_mark, "found a tab character where an indentation space is expected")
		}

		// Have we found a non-empty line?
		if !is_break(parser.buffer, parser.buffer_pos) {
			break
		}

		// Consume the line break.
		if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
			return false
		}
		// [Go] Should really be returning breaks instead.
		*breaks = read_line(parser, *breaks)
		*end_mark = parser.mark
	}

	// Determine the indentation level if needed.
	if *indent == 0 {
		*indent = max_indent
		if *indent < parser.indent+1 {
			*indent = parser.indent + 1
		}
		if *indent < 1 {
			*indent = 1
		}
	}
	return true
}

// Scan a quoted scalar.
func yaml_parser_scan_flow_scalar(parser *yaml_parser_t, token *yaml_token_t, single bool) bool {
	// Eat the left quote.
	start_mark := parser.mark
	skip(parser)

	// Consume the content of the quoted scalar.
	var s, leading_break, trailing_breaks, whitespaces []byte
	for {
		// Check that there are no document indicators at the beginning of the line.
		if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) {
			return false
		}

		if parser.mark.column == 0 &&
			((parser.buffer[parser.buffer_pos+0] == '-' &&
				parser.buffer[parser.buffer_pos+1] == '-' &&
				parser.buffer[parser.buffer_pos+2] == '-') ||
				(parser.buffer[parser.buffer_pos+0] == '.' &&
					parser.buffer[parser.buffer_pos+1] == '.' &&
					parser.buffer[parser.buffer_pos+2] == '.')) &&
			is_blankz(parser.buffer, parser.buffer_pos+3) {
			yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar",
				start_mark, "found unexpected document indicator")
			return false
		}

		// Check for EOF.
		if is_z(parser.buffer, parser.buffer_pos) {
			yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar",
				start_mark, "found unexpected end of stream")
			return false
		}

		// Consume non-blank characters.
		leading_blanks := false
		for !is_blankz(parser.buffer, parser.buffer_pos) {
			if single && parser.buffer[parser.buffer_pos] == '\'' && parser.buffer[parser.buffer_pos+1] == '\'' {
				// Is is an escaped single quote.
				s = append(s, '\'')
				skip(parser)
				skip(parser)

			} else if single && parser.buffer[parser.buffer_pos] == '\'' {
				// It is a right single quote.
				break
			} else if !single && parser.buffer[parser.buffer_pos] == '"' {
				// It is a right double quote.
				break

			} else if !single && parser.buffer[parser.buffer_pos] == '\\' && is_break(parser.buffer, parser.buffer_pos+1) {
				// It is an escaped line break.
				if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) {
					return false
				}
				skip(parser)
				skip_line(parser)
				leading_blanks = true
				break

			} else if !single && parser.buffer[parser.buffer_pos] == '\\' {
				// It is an escape sequence.
				code_length := 0

				// Check the escape character.
				switch parser.buffer[parser.buffer_pos+1] {
				case '0':
					s = append(s, 0)
				case 'a':
					s = append(s, '\x07')
				case 'b':
					s = append(s, '\x08')
				case 't', '\t':
					s = append(s, '\x09')
				case 'n':
					s = append(s, '\x0A')
				case 'v':
					s = append(s, '\x0B')
				case 'f':
					s = append(s, '\x0C')
				case 'r':
					s = append(s, '\x0D')
				case 'e':
					s = append(s, '\x1B')
				case ' ':
					s = append(s, '\x20')
				case '"':
					s = append(s, '"')
				case '\'':
					s = append(s, '\'')
				case '\\':
					s = append(s, '\\')
				case 'N': // NEL (#x85)
					s = append(s, '\xC2')
					s = append(s, '\x85')
				case '_': // #xA0
					s = append(s, '\xC2')
					s = append(s, '\xA0')
				case 'L': // LS (#x2028)
					s = append(s, '\xE2')
					s = append(s, '\x80')
					s = append(s, '\xA8')
				case 'P': // PS (#x2029)
					s = append(s, '\xE2')
					s = append(s, '\x80')
					s = append(s, '\xA9')
				case 'x':
					code_length = 2
				case 'u':
					code_length = 4
				case 'U':
					code_length = 8
				default:
					yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar",
						start_mark, "found unknown escape character")
					return false
				}

				skip(parser)
				skip(parser)

				// Consume an arbitrary escape code.
				if code_length > 0 {
					var value int

					// Scan the character value.
					if parser.unread < code_length && !yaml_parser_update_buffer(parser, code_length) {
						return false
					}
					for k := 0; k < code_length; k++ {
						if !is_hex(parser.buffer, parser.buffer_pos+k) {
							yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar",
								start_mark, "did not find expected hexdecimal number")
							return false
						}
						value = (value << 4) + as_hex(parser.buffer, parser.buffer_pos+k)
					}

					// Check the value and write the character.
					if (value >= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF {
						yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar",
							start_mark, "found invalid Unicode character escape code")
						return false
					}
					if value <= 0x7F {
						s = append(s, byte(value))
					} else if value <= 0x7FF {
						s = append(s, byte(0xC0+(value>>6)))
						s = append(s, byte(0x80+(value&0x3F)))
					} else if value <= 0xFFFF {
						s = append(s, byte(0xE0+(value>>12)))
						s = append(s, byte(0x80+((value>>6)&0x3F)))
						s = append(s, byte(0x80+(value&0x3F)))
					} else {
						s = append(s, byte(0xF0+(value>>18)))
						s = append(s, byte(0x80+((value>>12)&0x3F)))
						s = append(s, byte(0x80+((value>>6)&0x3F)))
						s = append(s, byte(0x80+(value&0x3F)))
					}

					// Advance the pointer.
					for k := 0; k < code_length; k++ {
						skip(parser)
					}
				}
			} else {
				// It is a non-escaped non-blank character.
				s = read(parser, s)
			}
			if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
				return false
			}
		}

		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}

		// Check if we are at the end of the scalar.
		if single {
			if parser.buffer[parser.buffer_pos] == '\'' {
				break
			}
		} else {
			if parser.buffer[parser.buffer_pos] == '"' {
				break
			}
		}

		// Consume blank characters.
		for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) {
			if is_blank(parser.buffer, parser.buffer_pos) {
				// Consume a space or a tab character.
				if !leading_blanks {
					whitespaces = read(parser, whitespaces)
				} else {
					skip(parser)
				}
			} else {
				if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
					return false
				}

				// Check if it is a first line break.
				if !leading_blanks {
					whitespaces = whitespaces[:0]
					leading_break = read_line(parser, leading_break)
					leading_blanks = true
				} else {
					trailing_breaks = read_line(parser, trailing_breaks)
				}
			}
			if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
				return false
			}
		}

		// Join the whitespaces or fold line breaks.
		if leading_blanks {
			// Do we need to fold line breaks?
			if len(leading_break) > 0 && leading_break[0] == '\n' {
				if len(trailing_breaks) == 0 {
					s = append(s, ' ')
				} else {
					s = append(s, trailing_breaks...)
				}
			} else {
				s = append(s, leading_break...)
				s = append(s, trailing_breaks...)
			}
			trailing_breaks = trailing_breaks[:0]
			leading_break = leading_break[:0]
		} else {
			s = append(s, whitespaces...)
			whitespaces = whitespaces[:0]
		}
	}

	// Eat the right quote.
	skip(parser)
	end_mark := parser.mark

	// Create a token.
	*token = yaml_token_t{
		typ:        yaml_SCALAR_TOKEN,
		start_mark: start_mark,
		end_mark:   end_mark,
		value:      s,
		style:      yaml_SINGLE_QUOTED_SCALAR_STYLE,
	}
	if !single {
		token.style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
	}
	return true
}

// Scan a plain scalar.
func yaml_parser_scan_plain_scalar(parser *yaml_parser_t, token *yaml_token_t) bool {

	var s, leading_break, trailing_breaks, whitespaces []byte
	var leading_blanks bool
	var indent = parser.indent + 1

	start_mark := parser.mark
	end_mark := parser.mark

	// Consume the content of the plain scalar.
	for {
		// Check for a document indicator.
		if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) {
			return false
		}
		if parser.mark.column == 0 &&
			((parser.buffer[parser.buffer_pos+0] == '-' &&
				parser.buffer[parser.buffer_pos+1] == '-' &&
				parser.buffer[parser.buffer_pos+2] == '-') ||
				(parser.buffer[parser.buffer_pos+0] == '.' &&
					parser.buffer[parser.buffer_pos+1] == '.' &&
					parser.buffer[parser.buffer_pos+2] == '.')) &&
			is_blankz(parser.buffer, parser.buffer_pos+3) {
			break
		}

		// Check for a comment.
		if parser.buffer[parser.buffer_pos] == '#' {
			break
		}

		// Consume non-blank characters.
		for !is_blankz(parser.buffer, parser.buffer_pos) {

			// Check for indicators that may end a plain scalar.
			if (parser.buffer[parser.buffer_pos] == ':' && is_blankz(parser.buffer, parser.buffer_pos+1)) ||
				(parser.flow_level > 0 &&
					(parser.buffer[parser.buffer_pos] == ',' ||
						parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == '[' ||
						parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' ||
						parser.buffer[parser.buffer_pos] == '}')) {
				break
			}

			// Check if we need to join whitespaces and breaks.
			if leading_blanks || len(whitespaces) > 0 {
				if leading_blanks {
					// Do we need to fold line breaks?
					if leading_break[0] == '\n' {
						if len(trailing_breaks) == 0 {
							s = append(s, ' ')
						} else {
							s = append(s, trailing_breaks...)
						}
					} else {
						s = append(s, leading_break...)
						s = append(s, trailing_breaks...)
					}
					trailing_breaks = trailing_breaks[:0]
					leading_break = leading_break[:0]
					leading_blanks = false
				} else {
					s = append(s, whitespaces...)
					whitespaces = whitespaces[:0]
				}
			}

			// Copy the character.
			s = read(parser, s)

			end_mark = parser.mark
			if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
				return false
			}
		}

		// Is it the end?
		if !(is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos)) {
			break
		}

		// Consume blank characters.
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}

		for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) {
			if is_blank(parser.buffer, parser.buffer_pos) {

				// Check for tab characters that abuse indentation.
				if leading_blanks && parser.mark.column < indent && is_tab(parser.buffer, parser.buffer_pos) {
					yaml_parser_set_scanner_error(parser, "while scanning a plain scalar",
						start_mark, "found a tab character that violates indentation")
					return false
				}

				// Consume a space or a tab character.
				if !leading_blanks {
					whitespaces = read(parser, whitespaces)
				} else {
					skip(parser)
				}
			} else {
				if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
					return false
				}

				// Check if it is a first line break.
				if !leading_blanks {
					whitespaces = whitespaces[:0]
					leading_break = read_line(parser, leading_break)
					leading_blanks = true
				} else {
					trailing_breaks = read_line(parser, trailing_breaks)
				}
			}
			if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
				return false
			}
		}

		// Check indentation level.
		if parser.flow_level == 0 && parser.mark.column < indent {
			break
		}
	}

	// Create a token.
	*token = yaml_token_t{
		typ:        yaml_SCALAR_TOKEN,
		start_mark: start_mark,
		end_mark:   end_mark,
		value:      s,
		style:      yaml_PLAIN_SCALAR_STYLE,
	}

	// Note that we change the 'simple_key_allowed' flag.
	if leading_blanks {
		parser.simple_key_allowed = true
	}
	return true
}
  07070100000FFE000081A4000000000000000000000001645E367C00000A51000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v2/sorter.go package yaml

import (
	"reflect"
	"unicode"
)

type keyList []reflect.Value

func (l keyList) Len() int      { return len(l) }
func (l keyList) Swap(i, j int) { l[i], l[j] = l[j], l[i] }
func (l keyList) Less(i, j int) bool {
	a := l[i]
	b := l[j]
	ak := a.Kind()
	bk := b.Kind()
	for (ak == reflect.Interface || ak == reflect.Ptr) && !a.IsNil() {
		a = a.Elem()
		ak = a.Kind()
	}
	for (bk == reflect.Interface || bk == reflect.Ptr) && !b.IsNil() {
		b = b.Elem()
		bk = b.Kind()
	}
	af, aok := keyFloat(a)
	bf, bok := keyFloat(b)
	if aok && bok {
		if af != bf {
			return af < bf
		}
		if ak != bk {
			return ak < bk
		}
		return numLess(a, b)
	}
	if ak != reflect.String || bk != reflect.String {
		return ak < bk
	}
	ar, br := []rune(a.String()), []rune(b.String())
	for i := 0; i < len(ar) && i < len(br); i++ {
		if ar[i] == br[i] {
			continue
		}
		al := unicode.IsLetter(ar[i])
		bl := unicode.IsLetter(br[i])
		if al && bl {
			return ar[i] < br[i]
		}
		if al || bl {
			return bl
		}
		var ai, bi int
		var an, bn int64
		if ar[i] == '0' || br[i] == '0' {
			for j := i-1; j >= 0 && unicode.IsDigit(ar[j]); j-- {
				if ar[j] != '0' {
					an = 1
					bn = 1
					break
				}
			}
		}
		for ai = i; ai < len(ar) && unicode.IsDigit(ar[ai]); ai++ {
			an = an*10 + int64(ar[ai]-'0')
		}
		for bi = i; bi < len(br) && unicode.IsDigit(br[bi]); bi++ {
			bn = bn*10 + int64(br[bi]-'0')
		}
		if an != bn {
			return an < bn
		}
		if ai != bi {
			return ai < bi
		}
		return ar[i] < br[i]
	}
	return len(ar) < len(br)
}

// keyFloat returns a float value for v if it is a number/bool
// and whether it is a number/bool or not.
func keyFloat(v reflect.Value) (f float64, ok bool) {
	switch v.Kind() {
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		return float64(v.Int()), true
	case reflect.Float32, reflect.Float64:
		return v.Float(), true
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		return float64(v.Uint()), true
	case reflect.Bool:
		if v.Bool() {
			return 1, true
		}
		return 0, true
	}
	return 0, false
}

// numLess returns whether a < b.
// a and b must necessarily have the same kind.
func numLess(a, b reflect.Value) bool {
	switch a.Kind() {
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		return a.Int() < b.Int()
	case reflect.Float32, reflect.Float64:
		return a.Float() < b.Float()
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		return a.Uint() < b.Uint()
	case reflect.Bool:
		return !a.Bool() && b.Bool()
	}
	panic("not a number")
}
   07070100000FFF000081A4000000000000000000000001645E367C0000029C000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v2/writerc.go    package yaml

// Set the writer error and return false.
func yaml_emitter_set_writer_error(emitter *yaml_emitter_t, problem string) bool {
	emitter.error = yaml_WRITER_ERROR
	emitter.problem = problem
	return false
}

// Flush the output buffer.
func yaml_emitter_flush(emitter *yaml_emitter_t) bool {
	if emitter.write_handler == nil {
		panic("write handler not set")
	}

	// Check if the buffer is empty.
	if emitter.buffer_pos == 0 {
		return true
	}

	if err := emitter.write_handler(emitter, emitter.buffer[:emitter.buffer_pos]); err != nil {
		return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error())
	}
	emitter.buffer_pos = 0
	return true
}
07070100001000000081A4000000000000000000000001645E367C0000363D000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v2/yaml.go   // Package yaml implements YAML support for the Go language.
//
// Source code and other details for the project are available at GitHub:
//
//   https://github.com/go-yaml/yaml
//
package yaml

import (
	"errors"
	"fmt"
	"io"
	"reflect"
	"strings"
	"sync"
)

// MapSlice encodes and decodes as a YAML map.
// The order of keys is preserved when encoding and decoding.
type MapSlice []MapItem

// MapItem is an item in a MapSlice.
type MapItem struct {
	Key, Value interface{}
}

// The Unmarshaler interface may be implemented by types to customize their
// behavior when being unmarshaled from a YAML document. The UnmarshalYAML
// method receives a function that may be called to unmarshal the original
// YAML value into a field or variable. It is safe to call the unmarshal
// function parameter more than once if necessary.
type Unmarshaler interface {
	UnmarshalYAML(unmarshal func(interface{}) error) error
}

// The Marshaler interface may be implemented by types to customize their
// behavior when being marshaled into a YAML document. The returned value
// is marshaled in place of the original value implementing Marshaler.
//
// If an error is returned by MarshalYAML, the marshaling procedure stops
// and returns with the provided error.
type Marshaler interface {
	MarshalYAML() (interface{}, error)
}

// Unmarshal decodes the first document found within the in byte slice
// and assigns decoded values into the out value.
//
// Maps and pointers (to a struct, string, int, etc) are accepted as out
// values. If an internal pointer within a struct is not initialized,
// the yaml package will initialize it if necessary for unmarshalling
// the provided data. The out parameter must not be nil.
//
// The type of the decoded values should be compatible with the respective
// values in out. If one or more values cannot be decoded due to a type
// mismatches, decoding continues partially until the end of the YAML
// content, and a *yaml.TypeError is returned with details for all
// missed values.
//
// Struct fields are only unmarshalled if they are exported (have an
// upper case first letter), and are unmarshalled using the field name
// lowercased as the default key. Custom keys may be defined via the
// "yaml" name in the field tag: the content preceding the first comma
// is used as the key, and the following comma-separated options are
// used to tweak the marshalling process (see Marshal).
// Conflicting names result in a runtime error.
//
// For example:
//
//     type T struct {
//         F int `yaml:"a,omitempty"`
//         B int
//     }
//     var t T
//     yaml.Unmarshal([]byte("a: 1\nb: 2"), &t)
//
// See the documentation of Marshal for the format of tags and a list of
// supported tag options.
//
func Unmarshal(in []byte, out interface{}) (err error) {
	return unmarshal(in, out, false)
}

// UnmarshalStrict is like Unmarshal except that any fields that are found
// in the data that do not have corresponding struct members, or mapping
// keys that are duplicates, will result in
// an error.
func UnmarshalStrict(in []byte, out interface{}) (err error) {
	return unmarshal(in, out, true)
}

// A Decoder reads and decodes YAML values from an input stream.
type Decoder struct {
	strict bool
	parser *parser
}

// NewDecoder returns a new decoder that reads from r.
//
// The decoder introduces its own buffering and may read
// data from r beyond the YAML values requested.
func NewDecoder(r io.Reader) *Decoder {
	return &Decoder{
		parser: newParserFromReader(r),
	}
}

// SetStrict sets whether strict decoding behaviour is enabled when
// decoding items in the data (see UnmarshalStrict). By default, decoding is not strict.
func (dec *Decoder) SetStrict(strict bool) {
	dec.strict = strict
}

// Decode reads the next YAML-encoded value from its input
// and stores it in the value pointed to by v.
//
// See the documentation for Unmarshal for details about the
// conversion of YAML into a Go value.
func (dec *Decoder) Decode(v interface{}) (err error) {
	d := newDecoder(dec.strict)
	defer handleErr(&err)
	node := dec.parser.parse()
	if node == nil {
		return io.EOF
	}
	out := reflect.ValueOf(v)
	if out.Kind() == reflect.Ptr && !out.IsNil() {
		out = out.Elem()
	}
	d.unmarshal(node, out)
	if len(d.terrors) > 0 {
		return &TypeError{d.terrors}
	}
	return nil
}

func unmarshal(in []byte, out interface{}, strict bool) (err error) {
	defer handleErr(&err)
	d := newDecoder(strict)
	p := newParser(in)
	defer p.destroy()
	node := p.parse()
	if node != nil {
		v := reflect.ValueOf(out)
		if v.Kind() == reflect.Ptr && !v.IsNil() {
			v = v.Elem()
		}
		d.unmarshal(node, v)
	}
	if len(d.terrors) > 0 {
		return &TypeError{d.terrors}
	}
	return nil
}

// Marshal serializes the value provided into a YAML document. The structure
// of the generated document will reflect the structure of the value itself.
// Maps and pointers (to struct, string, int, etc) are accepted as the in value.
//
// Struct fields are only marshalled if they are exported (have an upper case
// first letter), and are marshalled using the field name lowercased as the
// default key. Custom keys may be defined via the "yaml" name in the field
// tag: the content preceding the first comma is used as the key, and the
// following comma-separated options are used to tweak the marshalling process.
// Conflicting names result in a runtime error.
//
// The field tag format accepted is:
//
//     `(...) yaml:"[<key>][,<flag1>[,<flag2>]]" (...)`
//
// The following flags are currently supported:
//
//     omitempty    Only include the field if it's not set to the zero
//                  value for the type or to empty slices or maps.
//                  Zero valued structs will be omitted if all their public
//                  fields are zero, unless they implement an IsZero
//                  method (see the IsZeroer interface type), in which
//                  case the field will be excluded if IsZero returns true.
//
//     flow         Marshal using a flow style (useful for structs,
//                  sequences and maps).
//
//     inline       Inline the field, which must be a struct or a map,
//                  causing all of its fields or keys to be processed as if
//                  they were part of the outer struct. For maps, keys must
//                  not conflict with the yaml keys of other struct fields.
//
// In addition, if the key is "-", the field is ignored.
//
// For example:
//
//     type T struct {
//         F int `yaml:"a,omitempty"`
//         B int
//     }
//     yaml.Marshal(&T{B: 2}) // Returns "b: 2\n"
//     yaml.Marshal(&T{F: 1}} // Returns "a: 1\nb: 0\n"
//
func Marshal(in interface{}) (out []byte, err error) {
	defer handleErr(&err)
	e := newEncoder()
	defer e.destroy()
	e.marshalDoc("", reflect.ValueOf(in))
	e.finish()
	out = e.out
	return
}

// An Encoder writes YAML values to an output stream.
type Encoder struct {
	encoder *encoder
}

// NewEncoder returns a new encoder that writes to w.
// The Encoder should be closed after use to flush all data
// to w.
func NewEncoder(w io.Writer) *Encoder {
	return &Encoder{
		encoder: newEncoderWithWriter(w),
	}
}

// Encode writes the YAML encoding of v to the stream.
// If multiple items are encoded to the stream, the
// second and subsequent document will be preceded
// with a "---" document separator, but the first will not.
//
// See the documentation for Marshal for details about the conversion of Go
// values to YAML.
func (e *Encoder) Encode(v interface{}) (err error) {
	defer handleErr(&err)
	e.encoder.marshalDoc("", reflect.ValueOf(v))
	return nil
}

// Close closes the encoder by writing any remaining data.
// It does not write a stream terminating string "...".
func (e *Encoder) Close() (err error) {
	defer handleErr(&err)
	e.encoder.finish()
	return nil
}

func handleErr(err *error) {
	if v := recover(); v != nil {
		if e, ok := v.(yamlError); ok {
			*err = e.err
		} else {
			panic(v)
		}
	}
}

type yamlError struct {
	err error
}

func fail(err error) {
	panic(yamlError{err})
}

func failf(format string, args ...interface{}) {
	panic(yamlError{fmt.Errorf("yaml: "+format, args...)})
}

// A TypeError is returned by Unmarshal when one or more fields in
// the YAML document cannot be properly decoded into the requested
// types. When this error is returned, the value is still
// unmarshaled partially.
type TypeError struct {
	Errors []string
}

func (e *TypeError) Error() string {
	return fmt.Sprintf("yaml: unmarshal errors:\n  %s", strings.Join(e.Errors, "\n  "))
}

// --------------------------------------------------------------------------
// Maintain a mapping of keys to structure field indexes

// The code in this section was copied from mgo/bson.

// structInfo holds details for the serialization of fields of
// a given struct.
type structInfo struct {
	FieldsMap  map[string]fieldInfo
	FieldsList []fieldInfo

	// InlineMap is the number of the field in the struct that
	// contains an ,inline map, or -1 if there's none.
	InlineMap int
}

type fieldInfo struct {
	Key       string
	Num       int
	OmitEmpty bool
	Flow      bool
	// Id holds the unique field identifier, so we can cheaply
	// check for field duplicates without maintaining an extra map.
	Id int

	// Inline holds the field index if the field is part of an inlined struct.
	Inline []int
}

var structMap = make(map[reflect.Type]*structInfo)
var fieldMapMutex sync.RWMutex

func getStructInfo(st reflect.Type) (*structInfo, error) {
	fieldMapMutex.RLock()
	sinfo, found := structMap[st]
	fieldMapMutex.RUnlock()
	if found {
		return sinfo, nil
	}

	n := st.NumField()
	fieldsMap := make(map[string]fieldInfo)
	fieldsList := make([]fieldInfo, 0, n)
	inlineMap := -1
	for i := 0; i != n; i++ {
		field := st.Field(i)
		if field.PkgPath != "" && !field.Anonymous {
			continue // Private field
		}

		info := fieldInfo{Num: i}

		tag := field.Tag.Get("yaml")
		if tag == "" && strings.Index(string(field.Tag), ":") < 0 {
			tag = string(field.Tag)
		}
		if tag == "-" {
			continue
		}

		inline := false
		fields := strings.Split(tag, ",")
		if len(fields) > 1 {
			for _, flag := range fields[1:] {
				switch flag {
				case "omitempty":
					info.OmitEmpty = true
				case "flow":
					info.Flow = true
				case "inline":
					inline = true
				default:
					return nil, errors.New(fmt.Sprintf("Unsupported flag %q in tag %q of type %s", flag, tag, st))
				}
			}
			tag = fields[0]
		}

		if inline {
			switch field.Type.Kind() {
			case reflect.Map:
				if inlineMap >= 0 {
					return nil, errors.New("Multiple ,inline maps in struct " + st.String())
				}
				if field.Type.Key() != reflect.TypeOf("") {
					return nil, errors.New("Option ,inline needs a map with string keys in struct " + st.String())
				}
				inlineMap = info.Num
			case reflect.Struct:
				sinfo, err := getStructInfo(field.Type)
				if err != nil {
					return nil, err
				}
				for _, finfo := range sinfo.FieldsList {
					if _, found := fieldsMap[finfo.Key]; found {
						msg := "Duplicated key '" + finfo.Key + "' in struct " + st.String()
						return nil, errors.New(msg)
					}
					if finfo.Inline == nil {
						finfo.Inline = []int{i, finfo.Num}
					} else {
						finfo.Inline = append([]int{i}, finfo.Inline...)
					}
					finfo.Id = len(fieldsList)
					fieldsMap[finfo.Key] = finfo
					fieldsList = append(fieldsList, finfo)
				}
			default:
				//return nil, errors.New("Option ,inline needs a struct value or map field")
				return nil, errors.New("Option ,inline needs a struct value field")
			}
			continue
		}

		if tag != "" {
			info.Key = tag
		} else {
			info.Key = strings.ToLower(field.Name)
		}

		if _, found = fieldsMap[info.Key]; found {
			msg := "Duplicated key '" + info.Key + "' in struct " + st.String()
			return nil, errors.New(msg)
		}

		info.Id = len(fieldsList)
		fieldsList = append(fieldsList, info)
		fieldsMap[info.Key] = info
	}

	sinfo = &structInfo{
		FieldsMap:  fieldsMap,
		FieldsList: fieldsList,
		InlineMap:  inlineMap,
	}

	fieldMapMutex.Lock()
	structMap[st] = sinfo
	fieldMapMutex.Unlock()
	return sinfo, nil
}

// IsZeroer is used to check whether an object is zero to
// determine whether it should be omitted when marshaling
// with the omitempty flag. One notable implementation
// is time.Time.
type IsZeroer interface {
	IsZero() bool
}

func isZero(v reflect.Value) bool {
	kind := v.Kind()
	if z, ok := v.Interface().(IsZeroer); ok {
		if (kind == reflect.Ptr || kind == reflect.Interface) && v.IsNil() {
			return true
		}
		return z.IsZero()
	}
	switch kind {
	case reflect.String:
		return len(v.String()) == 0
	case reflect.Interface, reflect.Ptr:
		return v.IsNil()
	case reflect.Slice:
		return v.Len() == 0
	case reflect.Map:
		return v.Len() == 0
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		return v.Int() == 0
	case reflect.Float32, reflect.Float64:
		return v.Float() == 0
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		return v.Uint() == 0
	case reflect.Bool:
		return !v.Bool()
	case reflect.Struct:
		vt := v.Type()
		for i := v.NumField() - 1; i >= 0; i-- {
			if vt.Field(i).PkgPath != "" {
				continue // Private field
			}
			if !isZero(v.Field(i)) {
				return false
			}
		}
		return true
	}
	return false
}

// FutureLineWrap globally disables line wrapping when encoding long strings.
// This is a temporary and thus deprecated method introduced to faciliate
// migration towards v3, which offers more control of line lengths on
// individual encodings, and has a default matching the behavior introduced
// by this function.
//
// The default formatting of v2 was erroneously changed in v2.3.0 and reverted
// in v2.4.0, at which point this function was introduced to help migration.
func FutureLineWrap() {
	disableLineWrapping = true
}
   07070100001001000081A4000000000000000000000001645E367C00006641000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v2/yamlh.go  package yaml

import (
	"fmt"
	"io"
)

// The version directive data.
type yaml_version_directive_t struct {
	major int8 // The major version number.
	minor int8 // The minor version number.
}

// The tag directive data.
type yaml_tag_directive_t struct {
	handle []byte // The tag handle.
	prefix []byte // The tag prefix.
}

type yaml_encoding_t int

// The stream encoding.
const (
	// Let the parser choose the encoding.
	yaml_ANY_ENCODING yaml_encoding_t = iota

	yaml_UTF8_ENCODING    // The default UTF-8 encoding.
	yaml_UTF16LE_ENCODING // The UTF-16-LE encoding with BOM.
	yaml_UTF16BE_ENCODING // The UTF-16-BE encoding with BOM.
)

type yaml_break_t int

// Line break types.
const (
	// Let the parser choose the break type.
	yaml_ANY_BREAK yaml_break_t = iota

	yaml_CR_BREAK   // Use CR for line breaks (Mac style).
	yaml_LN_BREAK   // Use LN for line breaks (Unix style).
	yaml_CRLN_BREAK // Use CR LN for line breaks (DOS style).
)

type yaml_error_type_t int

// Many bad things could happen with the parser and emitter.
const (
	// No error is produced.
	yaml_NO_ERROR yaml_error_type_t = iota

	yaml_MEMORY_ERROR   // Cannot allocate or reallocate a block of memory.
	yaml_READER_ERROR   // Cannot read or decode the input stream.
	yaml_SCANNER_ERROR  // Cannot scan the input stream.
	yaml_PARSER_ERROR   // Cannot parse the input stream.
	yaml_COMPOSER_ERROR // Cannot compose a YAML document.
	yaml_WRITER_ERROR   // Cannot write to the output stream.
	yaml_EMITTER_ERROR  // Cannot emit a YAML stream.
)

// The pointer position.
type yaml_mark_t struct {
	index  int // The position index.
	line   int // The position line.
	column int // The position column.
}

// Node Styles

type yaml_style_t int8

type yaml_scalar_style_t yaml_style_t

// Scalar styles.
const (
	// Let the emitter choose the style.
	yaml_ANY_SCALAR_STYLE yaml_scalar_style_t = iota

	yaml_PLAIN_SCALAR_STYLE         // The plain scalar style.
	yaml_SINGLE_QUOTED_SCALAR_STYLE // The single-quoted scalar style.
	yaml_DOUBLE_QUOTED_SCALAR_STYLE // The double-quoted scalar style.
	yaml_LITERAL_SCALAR_STYLE       // The literal scalar style.
	yaml_FOLDED_SCALAR_STYLE        // The folded scalar style.
)

type yaml_sequence_style_t yaml_style_t

// Sequence styles.
const (
	// Let the emitter choose the style.
	yaml_ANY_SEQUENCE_STYLE yaml_sequence_style_t = iota

	yaml_BLOCK_SEQUENCE_STYLE // The block sequence style.
	yaml_FLOW_SEQUENCE_STYLE  // The flow sequence style.
)

type yaml_mapping_style_t yaml_style_t

// Mapping styles.
const (
	// Let the emitter choose the style.
	yaml_ANY_MAPPING_STYLE yaml_mapping_style_t = iota

	yaml_BLOCK_MAPPING_STYLE // The block mapping style.
	yaml_FLOW_MAPPING_STYLE  // The flow mapping style.
)

// Tokens

type yaml_token_type_t int

// Token types.
const (
	// An empty token.
	yaml_NO_TOKEN yaml_token_type_t = iota

	yaml_STREAM_START_TOKEN // A STREAM-START token.
	yaml_STREAM_END_TOKEN   // A STREAM-END token.

	yaml_VERSION_DIRECTIVE_TOKEN // A VERSION-DIRECTIVE token.
	yaml_TAG_DIRECTIVE_TOKEN     // A TAG-DIRECTIVE token.
	yaml_DOCUMENT_START_TOKEN    // A DOCUMENT-START token.
	yaml_DOCUMENT_END_TOKEN      // A DOCUMENT-END token.

	yaml_BLOCK_SEQUENCE_START_TOKEN // A BLOCK-SEQUENCE-START token.
	yaml_BLOCK_MAPPING_START_TOKEN  // A BLOCK-SEQUENCE-END token.
	yaml_BLOCK_END_TOKEN            // A BLOCK-END token.

	yaml_FLOW_SEQUENCE_START_TOKEN // A FLOW-SEQUENCE-START token.
	yaml_FLOW_SEQUENCE_END_TOKEN   // A FLOW-SEQUENCE-END token.
	yaml_FLOW_MAPPING_START_TOKEN  // A FLOW-MAPPING-START token.
	yaml_FLOW_MAPPING_END_TOKEN    // A FLOW-MAPPING-END token.

	yaml_BLOCK_ENTRY_TOKEN // A BLOCK-ENTRY token.
	yaml_FLOW_ENTRY_TOKEN  // A FLOW-ENTRY token.
	yaml_KEY_TOKEN         // A KEY token.
	yaml_VALUE_TOKEN       // A VALUE token.

	yaml_ALIAS_TOKEN  // An ALIAS token.
	yaml_ANCHOR_TOKEN // An ANCHOR token.
	yaml_TAG_TOKEN    // A TAG token.
	yaml_SCALAR_TOKEN // A SCALAR token.
)

func (tt yaml_token_type_t) String() string {
	switch tt {
	case yaml_NO_TOKEN:
		return "yaml_NO_TOKEN"
	case yaml_STREAM_START_TOKEN:
		return "yaml_STREAM_START_TOKEN"
	case yaml_STREAM_END_TOKEN:
		return "yaml_STREAM_END_TOKEN"
	case yaml_VERSION_DIRECTIVE_TOKEN:
		return "yaml_VERSION_DIRECTIVE_TOKEN"
	case yaml_TAG_DIRECTIVE_TOKEN:
		return "yaml_TAG_DIRECTIVE_TOKEN"
	case yaml_DOCUMENT_START_TOKEN:
		return "yaml_DOCUMENT_START_TOKEN"
	case yaml_DOCUMENT_END_TOKEN:
		return "yaml_DOCUMENT_END_TOKEN"
	case yaml_BLOCK_SEQUENCE_START_TOKEN:
		return "yaml_BLOCK_SEQUENCE_START_TOKEN"
	case yaml_BLOCK_MAPPING_START_TOKEN:
		return "yaml_BLOCK_MAPPING_START_TOKEN"
	case yaml_BLOCK_END_TOKEN:
		return "yaml_BLOCK_END_TOKEN"
	case yaml_FLOW_SEQUENCE_START_TOKEN:
		return "yaml_FLOW_SEQUENCE_START_TOKEN"
	case yaml_FLOW_SEQUENCE_END_TOKEN:
		return "yaml_FLOW_SEQUENCE_END_TOKEN"
	case yaml_FLOW_MAPPING_START_TOKEN:
		return "yaml_FLOW_MAPPING_START_TOKEN"
	case yaml_FLOW_MAPPING_END_TOKEN:
		return "yaml_FLOW_MAPPING_END_TOKEN"
	case yaml_BLOCK_ENTRY_TOKEN:
		return "yaml_BLOCK_ENTRY_TOKEN"
	case yaml_FLOW_ENTRY_TOKEN:
		return "yaml_FLOW_ENTRY_TOKEN"
	case yaml_KEY_TOKEN:
		return "yaml_KEY_TOKEN"
	case yaml_VALUE_TOKEN:
		return "yaml_VALUE_TOKEN"
	case yaml_ALIAS_TOKEN:
		return "yaml_ALIAS_TOKEN"
	case yaml_ANCHOR_TOKEN:
		return "yaml_ANCHOR_TOKEN"
	case yaml_TAG_TOKEN:
		return "yaml_TAG_TOKEN"
	case yaml_SCALAR_TOKEN:
		return "yaml_SCALAR_TOKEN"
	}
	return "<unknown token>"
}

// The token structure.
type yaml_token_t struct {
	// The token type.
	typ yaml_token_type_t

	// The start/end of the token.
	start_mark, end_mark yaml_mark_t

	// The stream encoding (for yaml_STREAM_START_TOKEN).
	encoding yaml_encoding_t

	// The alias/anchor/scalar value or tag/tag directive handle
	// (for yaml_ALIAS_TOKEN, yaml_ANCHOR_TOKEN, yaml_SCALAR_TOKEN, yaml_TAG_TOKEN, yaml_TAG_DIRECTIVE_TOKEN).
	value []byte

	// The tag suffix (for yaml_TAG_TOKEN).
	suffix []byte

	// The tag directive prefix (for yaml_TAG_DIRECTIVE_TOKEN).
	prefix []byte

	// The scalar style (for yaml_SCALAR_TOKEN).
	style yaml_scalar_style_t

	// The version directive major/minor (for yaml_VERSION_DIRECTIVE_TOKEN).
	major, minor int8
}

// Events

type yaml_event_type_t int8

// Event types.
const (
	// An empty event.
	yaml_NO_EVENT yaml_event_type_t = iota

	yaml_STREAM_START_EVENT   // A STREAM-START event.
	yaml_STREAM_END_EVENT     // A STREAM-END event.
	yaml_DOCUMENT_START_EVENT // A DOCUMENT-START event.
	yaml_DOCUMENT_END_EVENT   // A DOCUMENT-END event.
	yaml_ALIAS_EVENT          // An ALIAS event.
	yaml_SCALAR_EVENT         // A SCALAR event.
	yaml_SEQUENCE_START_EVENT // A SEQUENCE-START event.
	yaml_SEQUENCE_END_EVENT   // A SEQUENCE-END event.
	yaml_MAPPING_START_EVENT  // A MAPPING-START event.
	yaml_MAPPING_END_EVENT    // A MAPPING-END event.
)

var eventStrings = []string{
	yaml_NO_EVENT:             "none",
	yaml_STREAM_START_EVENT:   "stream start",
	yaml_STREAM_END_EVENT:     "stream end",
	yaml_DOCUMENT_START_EVENT: "document start",
	yaml_DOCUMENT_END_EVENT:   "document end",
	yaml_ALIAS_EVENT:          "alias",
	yaml_SCALAR_EVENT:         "scalar",
	yaml_SEQUENCE_START_EVENT: "sequence start",
	yaml_SEQUENCE_END_EVENT:   "sequence end",
	yaml_MAPPING_START_EVENT:  "mapping start",
	yaml_MAPPING_END_EVENT:    "mapping end",
}

func (e yaml_event_type_t) String() string {
	if e < 0 || int(e) >= len(eventStrings) {
		return fmt.Sprintf("unknown event %d", e)
	}
	return eventStrings[e]
}

// The event structure.
type yaml_event_t struct {

	// The event type.
	typ yaml_event_type_t

	// The start and end of the event.
	start_mark, end_mark yaml_mark_t

	// The document encoding (for yaml_STREAM_START_EVENT).
	encoding yaml_encoding_t

	// The version directive (for yaml_DOCUMENT_START_EVENT).
	version_directive *yaml_version_directive_t

	// The list of tag directives (for yaml_DOCUMENT_START_EVENT).
	tag_directives []yaml_tag_directive_t

	// The anchor (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_ALIAS_EVENT).
	anchor []byte

	// The tag (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT).
	tag []byte

	// The scalar value (for yaml_SCALAR_EVENT).
	value []byte

	// Is the document start/end indicator implicit, or the tag optional?
	// (for yaml_DOCUMENT_START_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_SCALAR_EVENT).
	implicit bool

	// Is the tag optional for any non-plain style? (for yaml_SCALAR_EVENT).
	quoted_implicit bool

	// The style (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT).
	style yaml_style_t
}

func (e *yaml_event_t) scalar_style() yaml_scalar_style_t     { return yaml_scalar_style_t(e.style) }
func (e *yaml_event_t) sequence_style() yaml_sequence_style_t { return yaml_sequence_style_t(e.style) }
func (e *yaml_event_t) mapping_style() yaml_mapping_style_t   { return yaml_mapping_style_t(e.style) }

// Nodes

const (
	yaml_NULL_TAG      = "tag:yaml.org,2002:null"      // The tag !!null with the only possible value: null.
	yaml_BOOL_TAG      = "tag:yaml.org,2002:bool"      // The tag !!bool with the values: true and false.
	yaml_STR_TAG       = "tag:yaml.org,2002:str"       // The tag !!str for string values.
	yaml_INT_TAG       = "tag:yaml.org,2002:int"       // The tag !!int for integer values.
	yaml_FLOAT_TAG     = "tag:yaml.org,2002:float"     // The tag !!float for float values.
	yaml_TIMESTAMP_TAG = "tag:yaml.org,2002:timestamp" // The tag !!timestamp for date and time values.

	yaml_SEQ_TAG = "tag:yaml.org,2002:seq" // The tag !!seq is used to denote sequences.
	yaml_MAP_TAG = "tag:yaml.org,2002:map" // The tag !!map is used to denote mapping.

	// Not in original libyaml.
	yaml_BINARY_TAG = "tag:yaml.org,2002:binary"
	yaml_MERGE_TAG  = "tag:yaml.org,2002:merge"

	yaml_DEFAULT_SCALAR_TAG   = yaml_STR_TAG // The default scalar tag is !!str.
	yaml_DEFAULT_SEQUENCE_TAG = yaml_SEQ_TAG // The default sequence tag is !!seq.
	yaml_DEFAULT_MAPPING_TAG  = yaml_MAP_TAG // The default mapping tag is !!map.
)

type yaml_node_type_t int

// Node types.
const (
	// An empty node.
	yaml_NO_NODE yaml_node_type_t = iota

	yaml_SCALAR_NODE   // A scalar node.
	yaml_SEQUENCE_NODE // A sequence node.
	yaml_MAPPING_NODE  // A mapping node.
)

// An element of a sequence node.
type yaml_node_item_t int

// An element of a mapping node.
type yaml_node_pair_t struct {
	key   int // The key of the element.
	value int // The value of the element.
}

// The node structure.
type yaml_node_t struct {
	typ yaml_node_type_t // The node type.
	tag []byte           // The node tag.

	// The node data.

	// The scalar parameters (for yaml_SCALAR_NODE).
	scalar struct {
		value  []byte              // The scalar value.
		length int                 // The length of the scalar value.
		style  yaml_scalar_style_t // The scalar style.
	}

	// The sequence parameters (for YAML_SEQUENCE_NODE).
	sequence struct {
		items_data []yaml_node_item_t    // The stack of sequence items.
		style      yaml_sequence_style_t // The sequence style.
	}

	// The mapping parameters (for yaml_MAPPING_NODE).
	mapping struct {
		pairs_data  []yaml_node_pair_t   // The stack of mapping pairs (key, value).
		pairs_start *yaml_node_pair_t    // The beginning of the stack.
		pairs_end   *yaml_node_pair_t    // The end of the stack.
		pairs_top   *yaml_node_pair_t    // The top of the stack.
		style       yaml_mapping_style_t // The mapping style.
	}

	start_mark yaml_mark_t // The beginning of the node.
	end_mark   yaml_mark_t // The end of the node.

}

// The document structure.
type yaml_document_t struct {

	// The document nodes.
	nodes []yaml_node_t

	// The version directive.
	version_directive *yaml_version_directive_t

	// The list of tag directives.
	tag_directives_data  []yaml_tag_directive_t
	tag_directives_start int // The beginning of the tag directives list.
	tag_directives_end   int // The end of the tag directives list.

	start_implicit int // Is the document start indicator implicit?
	end_implicit   int // Is the document end indicator implicit?

	// The start/end of the document.
	start_mark, end_mark yaml_mark_t
}

// The prototype of a read handler.
//
// The read handler is called when the parser needs to read more bytes from the
// source. The handler should write not more than size bytes to the buffer.
// The number of written bytes should be set to the size_read variable.
//
// [in,out]   data        A pointer to an application data specified by
//                        yaml_parser_set_input().
// [out]      buffer      The buffer to write the data from the source.
// [in]       size        The size of the buffer.
// [out]      size_read   The actual number of bytes read from the source.
//
// On success, the handler should return 1.  If the handler failed,
// the returned value should be 0. On EOF, the handler should set the
// size_read to 0 and return 1.
type yaml_read_handler_t func(parser *yaml_parser_t, buffer []byte) (n int, err error)

// This structure holds information about a potential simple key.
type yaml_simple_key_t struct {
	possible     bool        // Is a simple key possible?
	required     bool        // Is a simple key required?
	token_number int         // The number of the token.
	mark         yaml_mark_t // The position mark.
}

// The states of the parser.
type yaml_parser_state_t int

const (
	yaml_PARSE_STREAM_START_STATE yaml_parser_state_t = iota

	yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE           // Expect the beginning of an implicit document.
	yaml_PARSE_DOCUMENT_START_STATE                    // Expect DOCUMENT-START.
	yaml_PARSE_DOCUMENT_CONTENT_STATE                  // Expect the content of a document.
	yaml_PARSE_DOCUMENT_END_STATE                      // Expect DOCUMENT-END.
	yaml_PARSE_BLOCK_NODE_STATE                        // Expect a block node.
	yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE // Expect a block node or indentless sequence.
	yaml_PARSE_FLOW_NODE_STATE                         // Expect a flow node.
	yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE        // Expect the first entry of a block sequence.
	yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE              // Expect an entry of a block sequence.
	yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE         // Expect an entry of an indentless sequence.
	yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE           // Expect the first key of a block mapping.
	yaml_PARSE_BLOCK_MAPPING_KEY_STATE                 // Expect a block mapping key.
	yaml_PARSE_BLOCK_MAPPING_VALUE_STATE               // Expect a block mapping value.
	yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE         // Expect the first entry of a flow sequence.
	yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE               // Expect an entry of a flow sequence.
	yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE   // Expect a key of an ordered mapping.
	yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE // Expect a value of an ordered mapping.
	yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE   // Expect the and of an ordered mapping entry.
	yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE            // Expect the first key of a flow mapping.
	yaml_PARSE_FLOW_MAPPING_KEY_STATE                  // Expect a key of a flow mapping.
	yaml_PARSE_FLOW_MAPPING_VALUE_STATE                // Expect a value of a flow mapping.
	yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE          // Expect an empty value of a flow mapping.
	yaml_PARSE_END_STATE                               // Expect nothing.
)

func (ps yaml_parser_state_t) String() string {
	switch ps {
	case yaml_PARSE_STREAM_START_STATE:
		return "yaml_PARSE_STREAM_START_STATE"
	case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE:
		return "yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE"
	case yaml_PARSE_DOCUMENT_START_STATE:
		return "yaml_PARSE_DOCUMENT_START_STATE"
	case yaml_PARSE_DOCUMENT_CONTENT_STATE:
		return "yaml_PARSE_DOCUMENT_CONTENT_STATE"
	case yaml_PARSE_DOCUMENT_END_STATE:
		return "yaml_PARSE_DOCUMENT_END_STATE"
	case yaml_PARSE_BLOCK_NODE_STATE:
		return "yaml_PARSE_BLOCK_NODE_STATE"
	case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE:
		return "yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE"
	case yaml_PARSE_FLOW_NODE_STATE:
		return "yaml_PARSE_FLOW_NODE_STATE"
	case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE:
		return "yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE"
	case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE:
		return "yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE"
	case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE:
		return "yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE"
	case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE:
		return "yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE"
	case yaml_PARSE_BLOCK_MAPPING_KEY_STATE:
		return "yaml_PARSE_BLOCK_MAPPING_KEY_STATE"
	case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE:
		return "yaml_PARSE_BLOCK_MAPPING_VALUE_STATE"
	case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE:
		return "yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE"
	case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE:
		return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE"
	case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE:
		return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE"
	case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE:
		return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE"
	case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE:
		return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE"
	case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE:
		return "yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE"
	case yaml_PARSE_FLOW_MAPPING_KEY_STATE:
		return "yaml_PARSE_FLOW_MAPPING_KEY_STATE"
	case yaml_PARSE_FLOW_MAPPING_VALUE_STATE:
		return "yaml_PARSE_FLOW_MAPPING_VALUE_STATE"
	case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE:
		return "yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE"
	case yaml_PARSE_END_STATE:
		return "yaml_PARSE_END_STATE"
	}
	return "<unknown parser state>"
}

// This structure holds aliases data.
type yaml_alias_data_t struct {
	anchor []byte      // The anchor.
	index  int         // The node id.
	mark   yaml_mark_t // The anchor mark.
}

// The parser structure.
//
// All members are internal. Manage the structure using the
// yaml_parser_ family of functions.
type yaml_parser_t struct {

	// Error handling

	error yaml_error_type_t // Error type.

	problem string // Error description.

	// The byte about which the problem occurred.
	problem_offset int
	problem_value  int
	problem_mark   yaml_mark_t

	// The error context.
	context      string
	context_mark yaml_mark_t

	// Reader stuff

	read_handler yaml_read_handler_t // Read handler.

	input_reader io.Reader // File input data.
	input        []byte    // String input data.
	input_pos    int

	eof bool // EOF flag

	buffer     []byte // The working buffer.
	buffer_pos int    // The current position of the buffer.

	unread int // The number of unread characters in the buffer.

	raw_buffer     []byte // The raw buffer.
	raw_buffer_pos int    // The current position of the buffer.

	encoding yaml_encoding_t // The input encoding.

	offset int         // The offset of the current position (in bytes).
	mark   yaml_mark_t // The mark of the current position.

	// Scanner stuff

	stream_start_produced bool // Have we started to scan the input stream?
	stream_end_produced   bool // Have we reached the end of the input stream?

	flow_level int // The number of unclosed '[' and '{' indicators.

	tokens          []yaml_token_t // The tokens queue.
	tokens_head     int            // The head of the tokens queue.
	tokens_parsed   int            // The number of tokens fetched from the queue.
	token_available bool           // Does the tokens queue contain a token ready for dequeueing.

	indent  int   // The current indentation level.
	indents []int // The indentation levels stack.

	simple_key_allowed bool                // May a simple key occur at the current position?
	simple_keys        []yaml_simple_key_t // The stack of simple keys.
	simple_keys_by_tok map[int]int         // possible simple_key indexes indexed by token_number

	// Parser stuff

	state          yaml_parser_state_t    // The current parser state.
	states         []yaml_parser_state_t  // The parser states stack.
	marks          []yaml_mark_t          // The stack of marks.
	tag_directives []yaml_tag_directive_t // The list of TAG directives.

	// Dumper stuff

	aliases []yaml_alias_data_t // The alias data.

	document *yaml_document_t // The currently parsed document.
}

// Emitter Definitions

// The prototype of a write handler.
//
// The write handler is called when the emitter needs to flush the accumulated
// characters to the output.  The handler should write @a size bytes of the
// @a buffer to the output.
//
// @param[in,out]   data        A pointer to an application data specified by
//                              yaml_emitter_set_output().
// @param[in]       buffer      The buffer with bytes to be written.
// @param[in]       size        The size of the buffer.
//
// @returns On success, the handler should return @c 1.  If the handler failed,
// the returned value should be @c 0.
//
type yaml_write_handler_t func(emitter *yaml_emitter_t, buffer []byte) error

type yaml_emitter_state_t int

// The emitter states.
const (
	// Expect STREAM-START.
	yaml_EMIT_STREAM_START_STATE yaml_emitter_state_t = iota

	yaml_EMIT_FIRST_DOCUMENT_START_STATE       // Expect the first DOCUMENT-START or STREAM-END.
	yaml_EMIT_DOCUMENT_START_STATE             // Expect DOCUMENT-START or STREAM-END.
	yaml_EMIT_DOCUMENT_CONTENT_STATE           // Expect the content of a document.
	yaml_EMIT_DOCUMENT_END_STATE               // Expect DOCUMENT-END.
	yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE   // Expect the first item of a flow sequence.
	yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE         // Expect an item of a flow sequence.
	yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE     // Expect the first key of a flow mapping.
	yaml_EMIT_FLOW_MAPPING_KEY_STATE           // Expect a key of a flow mapping.
	yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE  // Expect a value for a simple key of a flow mapping.
	yaml_EMIT_FLOW_MAPPING_VALUE_STATE         // Expect a value of a flow mapping.
	yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE  // Expect the first item of a block sequence.
	yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE        // Expect an item of a block sequence.
	yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE    // Expect the first key of a block mapping.
	yaml_EMIT_BLOCK_MAPPING_KEY_STATE          // Expect the key of a block mapping.
	yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a block mapping.
	yaml_EMIT_BLOCK_MAPPING_VALUE_STATE        // Expect a value of a block mapping.
	yaml_EMIT_END_STATE                        // Expect nothing.
)

// The emitter structure.
//
// All members are internal.  Manage the structure using the @c yaml_emitter_
// family of functions.
type yaml_emitter_t struct {

	// Error handling

	error   yaml_error_type_t // Error type.
	problem string            // Error description.

	// Writer stuff

	write_handler yaml_write_handler_t // Write handler.

	output_buffer *[]byte   // String output data.
	output_writer io.Writer // File output data.

	buffer     []byte // The working buffer.
	buffer_pos int    // The current position of the buffer.

	raw_buffer     []byte // The raw buffer.
	raw_buffer_pos int    // The current position of the buffer.

	encoding yaml_encoding_t // The stream encoding.

	// Emitter stuff

	canonical   bool         // If the output is in the canonical style?
	best_indent int          // The number of indentation spaces.
	best_width  int          // The preferred width of the output lines.
	unicode     bool         // Allow unescaped non-ASCII characters?
	line_break  yaml_break_t // The preferred line break.

	state  yaml_emitter_state_t   // The current emitter state.
	states []yaml_emitter_state_t // The stack of states.

	events      []yaml_event_t // The event queue.
	events_head int            // The head of the event queue.

	indents []int // The stack of indentation levels.

	tag_directives []yaml_tag_directive_t // The list of tag directives.

	indent int // The current indentation level.

	flow_level int // The current flow level.

	root_context       bool // Is it the document root context?
	sequence_context   bool // Is it a sequence context?
	mapping_context    bool // Is it a mapping context?
	simple_key_context bool // Is it a simple mapping key context?

	line       int  // The current line.
	column     int  // The current column.
	whitespace bool // If the last character was a whitespace?
	indention  bool // If the last character was an indentation character (' ', '-', '?', ':')?
	open_ended bool // If an explicit document end is required?

	// Anchor analysis.
	anchor_data struct {
		anchor []byte // The anchor value.
		alias  bool   // Is it an alias?
	}

	// Tag analysis.
	tag_data struct {
		handle []byte // The tag handle.
		suffix []byte // The tag suffix.
	}

	// Scalar analysis.
	scalar_data struct {
		value                 []byte              // The scalar value.
		multiline             bool                // Does the scalar contain line breaks?
		flow_plain_allowed    bool                // Can the scalar be expessed in the flow plain style?
		block_plain_allowed   bool                // Can the scalar be expressed in the block plain style?
		single_quoted_allowed bool                // Can the scalar be expressed in the single quoted style?
		block_allowed         bool                // Can the scalar be expressed in the literal or folded styles?
		style                 yaml_scalar_style_t // The output style.
	}

	// Dumper stuff

	opened bool // If the stream was already opened?
	closed bool // If the stream was already closed?

	// The information associated with the document nodes.
	anchors *struct {
		references int  // The number of references.
		anchor     int  // The anchor id.
		serialized bool // If the node has been emitted?
	}

	last_anchor_id int // The last assigned anchor id.

	document *yaml_document_t // The currently emitted document.
}
   07070100001002000081A4000000000000000000000001645E367C00001361000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v2/yamlprivateh.go   package yaml

const (
	// The size of the input raw buffer.
	input_raw_buffer_size = 512

	// The size of the input buffer.
	// It should be possible to decode the whole raw buffer.
	input_buffer_size = input_raw_buffer_size * 3

	// The size of the output buffer.
	output_buffer_size = 128

	// The size of the output raw buffer.
	// It should be possible to encode the whole output buffer.
	output_raw_buffer_size = (output_buffer_size*2 + 2)

	// The size of other stacks and queues.
	initial_stack_size  = 16
	initial_queue_size  = 16
	initial_string_size = 16
)

// Check if the character at the specified position is an alphabetical
// character, a digit, '_', or '-'.
func is_alpha(b []byte, i int) bool {
	return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'Z' || b[i] >= 'a' && b[i] <= 'z' || b[i] == '_' || b[i] == '-'
}

// Check if the character at the specified position is a digit.
func is_digit(b []byte, i int) bool {
	return b[i] >= '0' && b[i] <= '9'
}

// Get the value of a digit.
func as_digit(b []byte, i int) int {
	return int(b[i]) - '0'
}

// Check if the character at the specified position is a hex-digit.
func is_hex(b []byte, i int) bool {
	return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'F' || b[i] >= 'a' && b[i] <= 'f'
}

// Get the value of a hex-digit.
func as_hex(b []byte, i int) int {
	bi := b[i]
	if bi >= 'A' && bi <= 'F' {
		return int(bi) - 'A' + 10
	}
	if bi >= 'a' && bi <= 'f' {
		return int(bi) - 'a' + 10
	}
	return int(bi) - '0'
}

// Check if the character is ASCII.
func is_ascii(b []byte, i int) bool {
	return b[i] <= 0x7F
}

// Check if the character at the start of the buffer can be printed unescaped.
func is_printable(b []byte, i int) bool {
	return ((b[i] == 0x0A) || // . == #x0A
		(b[i] >= 0x20 && b[i] <= 0x7E) || // #x20 <= . <= #x7E
		(b[i] == 0xC2 && b[i+1] >= 0xA0) || // #0xA0 <= . <= #xD7FF
		(b[i] > 0xC2 && b[i] < 0xED) ||
		(b[i] == 0xED && b[i+1] < 0xA0) ||
		(b[i] == 0xEE) ||
		(b[i] == 0xEF && // #xE000 <= . <= #xFFFD
			!(b[i+1] == 0xBB && b[i+2] == 0xBF) && // && . != #xFEFF
			!(b[i+1] == 0xBF && (b[i+2] == 0xBE || b[i+2] == 0xBF))))
}

// Check if the character at the specified position is NUL.
func is_z(b []byte, i int) bool {
	return b[i] == 0x00
}

// Check if the beginning of the buffer is a BOM.
func is_bom(b []byte, i int) bool {
	return b[0] == 0xEF && b[1] == 0xBB && b[2] == 0xBF
}

// Check if the character at the specified position is space.
func is_space(b []byte, i int) bool {
	return b[i] == ' '
}

// Check if the character at the specified position is tab.
func is_tab(b []byte, i int) bool {
	return b[i] == '\t'
}

// Check if the character at the specified position is blank (space or tab).
func is_blank(b []byte, i int) bool {
	//return is_space(b, i) || is_tab(b, i)
	return b[i] == ' ' || b[i] == '\t'
}

// Check if the character at the specified position is a line break.
func is_break(b []byte, i int) bool {
	return (b[i] == '\r' || // CR (#xD)
		b[i] == '\n' || // LF (#xA)
		b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)
		b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)
		b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9) // PS (#x2029)
}

func is_crlf(b []byte, i int) bool {
	return b[i] == '\r' && b[i+1] == '\n'
}

// Check if the character is a line break or NUL.
func is_breakz(b []byte, i int) bool {
	//return is_break(b, i) || is_z(b, i)
	return (        // is_break:
	b[i] == '\r' || // CR (#xD)
		b[i] == '\n' || // LF (#xA)
		b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)
		b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)
		b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029)
		// is_z:
		b[i] == 0)
}

// Check if the character is a line break, space, or NUL.
func is_spacez(b []byte, i int) bool {
	//return is_space(b, i) || is_breakz(b, i)
	return ( // is_space:
	b[i] == ' ' ||
		// is_breakz:
		b[i] == '\r' || // CR (#xD)
		b[i] == '\n' || // LF (#xA)
		b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)
		b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)
		b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029)
		b[i] == 0)
}

// Check if the character is a line break, space, tab, or NUL.
func is_blankz(b []byte, i int) bool {
	//return is_blank(b, i) || is_breakz(b, i)
	return ( // is_blank:
	b[i] == ' ' || b[i] == '\t' ||
		// is_breakz:
		b[i] == '\r' || // CR (#xD)
		b[i] == '\n' || // LF (#xA)
		b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)
		b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)
		b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029)
		b[i] == 0)
}

// Determine the width of the character.
func width(b byte) int {
	// Don't replace these by a switch without first
	// confirming that it is being inlined.
	if b&0x80 == 0x00 {
		return 1
	}
	if b&0xE0 == 0xC0 {
		return 2
	}
	if b&0xF0 == 0xE0 {
		return 3
	}
	if b&0xF8 == 0xF0 {
		return 4
	}
	return 0

}
   07070100001003000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000002C00000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v3   07070100001004000081A4000000000000000000000001645E367C00000867000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v3/LICENSE   
This project is covered by two different licenses: MIT and Apache.

#### MIT License ####

The following files were ported to Go from C files of libyaml, and thus
are still covered by their original MIT license, with the additional
copyright staring in 2011 when the project was ported over:

    apic.go emitterc.go parserc.go readerc.go scannerc.go
    writerc.go yamlh.go yamlprivateh.go

Copyright (c) 2006-2010 Kirill Simonov
Copyright (c) 2006-2011 Kirill Simonov

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

### Apache License ###

All the remaining project files are covered by the Apache license:

Copyright (c) 2011-2019 Canonical Ltd

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
 07070100001005000081A4000000000000000000000001645E367C00000230000000000000000000000000000000000000003300000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v3/NOTICE    Copyright 2011-2016 Canonical Ltd.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
07070100001006000081A4000000000000000000000001645E367C00000D7D000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v3/README.md # YAML support for the Go language

Introduction
------------

The yaml package enables Go programs to comfortably encode and decode YAML
values. It was developed within [Canonical](https://www.canonical.com) as
part of the [juju](https://juju.ubuntu.com) project, and is based on a
pure Go port of the well-known [libyaml](http://pyyaml.org/wiki/LibYAML)
C library to parse and generate YAML data quickly and reliably.

Compatibility
-------------

The yaml package supports most of YAML 1.2, but preserves some behavior
from 1.1 for backwards compatibility.

Specifically, as of v3 of the yaml package:

 - YAML 1.1 bools (_yes/no, on/off_) are supported as long as they are being
   decoded into a typed bool value. Otherwise they behave as a string. Booleans
   in YAML 1.2 are _true/false_ only.
 - Octals encode and decode as _0777_ per YAML 1.1, rather than _0o777_
   as specified in YAML 1.2, because most parsers still use the old format.
   Octals in the  _0o777_ format are supported though, so new files work.
 - Does not support base-60 floats. These are gone from YAML 1.2, and were
   actually never supported by this package as it's clearly a poor choice.

and offers backwards
compatibility with YAML 1.1 in some cases.
1.2, including support for
anchors, tags, map merging, etc. Multi-document unmarshalling is not yet
implemented, and base-60 floats from YAML 1.1 are purposefully not
supported since they're a poor design and are gone in YAML 1.2.

Installation and usage
----------------------

The import path for the package is *gopkg.in/yaml.v3*.

To install it, run:

    go get gopkg.in/yaml.v3

API documentation
-----------------

If opened in a browser, the import path itself leads to the API documentation:

  - [https://gopkg.in/yaml.v3](https://gopkg.in/yaml.v3)

API stability
-------------

The package API for yaml v3 will remain stable as described in [gopkg.in](https://gopkg.in).


License
-------

The yaml package is licensed under the MIT and Apache License 2.0 licenses.
Please see the LICENSE file for details.


Example
-------

```Go
package main

import (
        "fmt"
        "log"

        "gopkg.in/yaml.v3"
)

var data = `
a: Easy!
b:
  c: 2
  d: [3, 4]
`

// Note: struct fields must be public in order for unmarshal to
// correctly populate the data.
type T struct {
        A string
        B struct {
                RenamedC int   `yaml:"c"`
                D        []int `yaml:",flow"`
        }
}

func main() {
        t := T{}
    
        err := yaml.Unmarshal([]byte(data), &t)
        if err != nil {
                log.Fatalf("error: %v", err)
        }
        fmt.Printf("--- t:\n%v\n\n", t)
    
        d, err := yaml.Marshal(&t)
        if err != nil {
                log.Fatalf("error: %v", err)
        }
        fmt.Printf("--- t dump:\n%s\n\n", string(d))
    
        m := make(map[interface{}]interface{})
    
        err = yaml.Unmarshal([]byte(data), &m)
        if err != nil {
                log.Fatalf("error: %v", err)
        }
        fmt.Printf("--- m:\n%v\n\n", m)
    
        d, err = yaml.Marshal(&m)
        if err != nil {
                log.Fatalf("error: %v", err)
        }
        fmt.Printf("--- m dump:\n%s\n\n", string(d))
}
```

This example will generate the following output:

```
--- t:
{Easy! {2 [3 4]}}

--- t dump:
a: Easy!
b:
  c: 2
  d: [3, 4]


--- m:
map[a:Easy! b:map[c:2 d:[3 4]]]

--- m dump:
a: Easy!
b:
  c: 2
  d:
  - 3
  - 4
```

   07070100001007000081A4000000000000000000000001645E367C000055EF000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v3/apic.go   // 
// Copyright (c) 2011-2019 Canonical Ltd
// Copyright (c) 2006-2010 Kirill Simonov
// 
// Permission is hereby granted, free of charge, to any person obtaining a copy of
// this software and associated documentation files (the "Software"), to deal in
// the Software without restriction, including without limitation the rights to
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
// of the Software, and to permit persons to whom the Software is furnished to do
// so, subject to the following conditions:
// 
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// 
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.

package yaml

import (
	"io"
)

func yaml_insert_token(parser *yaml_parser_t, pos int, token *yaml_token_t) {
	//fmt.Println("yaml_insert_token", "pos:", pos, "typ:", token.typ, "head:", parser.tokens_head, "len:", len(parser.tokens))

	// Check if we can move the queue at the beginning of the buffer.
	if parser.tokens_head > 0 && len(parser.tokens) == cap(parser.tokens) {
		if parser.tokens_head != len(parser.tokens) {
			copy(parser.tokens, parser.tokens[parser.tokens_head:])
		}
		parser.tokens = parser.tokens[:len(parser.tokens)-parser.tokens_head]
		parser.tokens_head = 0
	}
	parser.tokens = append(parser.tokens, *token)
	if pos < 0 {
		return
	}
	copy(parser.tokens[parser.tokens_head+pos+1:], parser.tokens[parser.tokens_head+pos:])
	parser.tokens[parser.tokens_head+pos] = *token
}

// Create a new parser object.
func yaml_parser_initialize(parser *yaml_parser_t) bool {
	*parser = yaml_parser_t{
		raw_buffer: make([]byte, 0, input_raw_buffer_size),
		buffer:     make([]byte, 0, input_buffer_size),
	}
	return true
}

// Destroy a parser object.
func yaml_parser_delete(parser *yaml_parser_t) {
	*parser = yaml_parser_t{}
}

// String read handler.
func yaml_string_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) {
	if parser.input_pos == len(parser.input) {
		return 0, io.EOF
	}
	n = copy(buffer, parser.input[parser.input_pos:])
	parser.input_pos += n
	return n, nil
}

// Reader read handler.
func yaml_reader_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) {
	return parser.input_reader.Read(buffer)
}

// Set a string input.
func yaml_parser_set_input_string(parser *yaml_parser_t, input []byte) {
	if parser.read_handler != nil {
		panic("must set the input source only once")
	}
	parser.read_handler = yaml_string_read_handler
	parser.input = input
	parser.input_pos = 0
}

// Set a file input.
func yaml_parser_set_input_reader(parser *yaml_parser_t, r io.Reader) {
	if parser.read_handler != nil {
		panic("must set the input source only once")
	}
	parser.read_handler = yaml_reader_read_handler
	parser.input_reader = r
}

// Set the source encoding.
func yaml_parser_set_encoding(parser *yaml_parser_t, encoding yaml_encoding_t) {
	if parser.encoding != yaml_ANY_ENCODING {
		panic("must set the encoding only once")
	}
	parser.encoding = encoding
}

// Create a new emitter object.
func yaml_emitter_initialize(emitter *yaml_emitter_t) {
	*emitter = yaml_emitter_t{
		buffer:     make([]byte, output_buffer_size),
		raw_buffer: make([]byte, 0, output_raw_buffer_size),
		states:     make([]yaml_emitter_state_t, 0, initial_stack_size),
		events:     make([]yaml_event_t, 0, initial_queue_size),
		best_width: -1,
	}
}

// Destroy an emitter object.
func yaml_emitter_delete(emitter *yaml_emitter_t) {
	*emitter = yaml_emitter_t{}
}

// String write handler.
func yaml_string_write_handler(emitter *yaml_emitter_t, buffer []byte) error {
	*emitter.output_buffer = append(*emitter.output_buffer, buffer...)
	return nil
}

// yaml_writer_write_handler uses emitter.output_writer to write the
// emitted text.
func yaml_writer_write_handler(emitter *yaml_emitter_t, buffer []byte) error {
	_, err := emitter.output_writer.Write(buffer)
	return err
}

// Set a string output.
func yaml_emitter_set_output_string(emitter *yaml_emitter_t, output_buffer *[]byte) {
	if emitter.write_handler != nil {
		panic("must set the output target only once")
	}
	emitter.write_handler = yaml_string_write_handler
	emitter.output_buffer = output_buffer
}

// Set a file output.
func yaml_emitter_set_output_writer(emitter *yaml_emitter_t, w io.Writer) {
	if emitter.write_handler != nil {
		panic("must set the output target only once")
	}
	emitter.write_handler = yaml_writer_write_handler
	emitter.output_writer = w
}

// Set the output encoding.
func yaml_emitter_set_encoding(emitter *yaml_emitter_t, encoding yaml_encoding_t) {
	if emitter.encoding != yaml_ANY_ENCODING {
		panic("must set the output encoding only once")
	}
	emitter.encoding = encoding
}

// Set the canonical output style.
func yaml_emitter_set_canonical(emitter *yaml_emitter_t, canonical bool) {
	emitter.canonical = canonical
}

// Set the indentation increment.
func yaml_emitter_set_indent(emitter *yaml_emitter_t, indent int) {
	if indent < 2 || indent > 9 {
		indent = 2
	}
	emitter.best_indent = indent
}

// Set the preferred line width.
func yaml_emitter_set_width(emitter *yaml_emitter_t, width int) {
	if width < 0 {
		width = -1
	}
	emitter.best_width = width
}

// Set if unescaped non-ASCII characters are allowed.
func yaml_emitter_set_unicode(emitter *yaml_emitter_t, unicode bool) {
	emitter.unicode = unicode
}

// Set the preferred line break character.
func yaml_emitter_set_break(emitter *yaml_emitter_t, line_break yaml_break_t) {
	emitter.line_break = line_break
}

///*
// * Destroy a token object.
// */
//
//YAML_DECLARE(void)
//yaml_token_delete(yaml_token_t *token)
//{
//    assert(token);  // Non-NULL token object expected.
//
//    switch (token.type)
//    {
//        case YAML_TAG_DIRECTIVE_TOKEN:
//            yaml_free(token.data.tag_directive.handle);
//            yaml_free(token.data.tag_directive.prefix);
//            break;
//
//        case YAML_ALIAS_TOKEN:
//            yaml_free(token.data.alias.value);
//            break;
//
//        case YAML_ANCHOR_TOKEN:
//            yaml_free(token.data.anchor.value);
//            break;
//
//        case YAML_TAG_TOKEN:
//            yaml_free(token.data.tag.handle);
//            yaml_free(token.data.tag.suffix);
//            break;
//
//        case YAML_SCALAR_TOKEN:
//            yaml_free(token.data.scalar.value);
//            break;
//
//        default:
//            break;
//    }
//
//    memset(token, 0, sizeof(yaml_token_t));
//}
//
///*
// * Check if a string is a valid UTF-8 sequence.
// *
// * Check 'reader.c' for more details on UTF-8 encoding.
// */
//
//static int
//yaml_check_utf8(yaml_char_t *start, size_t length)
//{
//    yaml_char_t *end = start+length;
//    yaml_char_t *pointer = start;
//
//    while (pointer < end) {
//        unsigned char octet;
//        unsigned int width;
//        unsigned int value;
//        size_t k;
//
//        octet = pointer[0];
//        width = (octet & 0x80) == 0x00 ? 1 :
//                (octet & 0xE0) == 0xC0 ? 2 :
//                (octet & 0xF0) == 0xE0 ? 3 :
//                (octet & 0xF8) == 0xF0 ? 4 : 0;
//        value = (octet & 0x80) == 0x00 ? octet & 0x7F :
//                (octet & 0xE0) == 0xC0 ? octet & 0x1F :
//                (octet & 0xF0) == 0xE0 ? octet & 0x0F :
//                (octet & 0xF8) == 0xF0 ? octet & 0x07 : 0;
//        if (!width) return 0;
//        if (pointer+width > end) return 0;
//        for (k = 1; k < width; k ++) {
//            octet = pointer[k];
//            if ((octet & 0xC0) != 0x80) return 0;
//            value = (value << 6) + (octet & 0x3F);
//        }
//        if (!((width == 1) ||
//            (width == 2 && value >= 0x80) ||
//            (width == 3 && value >= 0x800) ||
//            (width == 4 && value >= 0x10000))) return 0;
//
//        pointer += width;
//    }
//
//    return 1;
//}
//

// Create STREAM-START.
func yaml_stream_start_event_initialize(event *yaml_event_t, encoding yaml_encoding_t) {
	*event = yaml_event_t{
		typ:      yaml_STREAM_START_EVENT,
		encoding: encoding,
	}
}

// Create STREAM-END.
func yaml_stream_end_event_initialize(event *yaml_event_t) {
	*event = yaml_event_t{
		typ: yaml_STREAM_END_EVENT,
	}
}

// Create DOCUMENT-START.
func yaml_document_start_event_initialize(
	event *yaml_event_t,
	version_directive *yaml_version_directive_t,
	tag_directives []yaml_tag_directive_t,
	implicit bool,
) {
	*event = yaml_event_t{
		typ:               yaml_DOCUMENT_START_EVENT,
		version_directive: version_directive,
		tag_directives:    tag_directives,
		implicit:          implicit,
	}
}

// Create DOCUMENT-END.
func yaml_document_end_event_initialize(event *yaml_event_t, implicit bool) {
	*event = yaml_event_t{
		typ:      yaml_DOCUMENT_END_EVENT,
		implicit: implicit,
	}
}

// Create ALIAS.
func yaml_alias_event_initialize(event *yaml_event_t, anchor []byte) bool {
	*event = yaml_event_t{
		typ:    yaml_ALIAS_EVENT,
		anchor: anchor,
	}
	return true
}

// Create SCALAR.
func yaml_scalar_event_initialize(event *yaml_event_t, anchor, tag, value []byte, plain_implicit, quoted_implicit bool, style yaml_scalar_style_t) bool {
	*event = yaml_event_t{
		typ:             yaml_SCALAR_EVENT,
		anchor:          anchor,
		tag:             tag,
		value:           value,
		implicit:        plain_implicit,
		quoted_implicit: quoted_implicit,
		style:           yaml_style_t(style),
	}
	return true
}

// Create SEQUENCE-START.
func yaml_sequence_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_sequence_style_t) bool {
	*event = yaml_event_t{
		typ:      yaml_SEQUENCE_START_EVENT,
		anchor:   anchor,
		tag:      tag,
		implicit: implicit,
		style:    yaml_style_t(style),
	}
	return true
}

// Create SEQUENCE-END.
func yaml_sequence_end_event_initialize(event *yaml_event_t) bool {
	*event = yaml_event_t{
		typ: yaml_SEQUENCE_END_EVENT,
	}
	return true
}

// Create MAPPING-START.
func yaml_mapping_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_mapping_style_t) {
	*event = yaml_event_t{
		typ:      yaml_MAPPING_START_EVENT,
		anchor:   anchor,
		tag:      tag,
		implicit: implicit,
		style:    yaml_style_t(style),
	}
}

// Create MAPPING-END.
func yaml_mapping_end_event_initialize(event *yaml_event_t) {
	*event = yaml_event_t{
		typ: yaml_MAPPING_END_EVENT,
	}
}

// Destroy an event object.
func yaml_event_delete(event *yaml_event_t) {
	*event = yaml_event_t{}
}

///*
// * Create a document object.
// */
//
//YAML_DECLARE(int)
//yaml_document_initialize(document *yaml_document_t,
//        version_directive *yaml_version_directive_t,
//        tag_directives_start *yaml_tag_directive_t,
//        tag_directives_end *yaml_tag_directive_t,
//        start_implicit int, end_implicit int)
//{
//    struct {
//        error yaml_error_type_t
//    } context
//    struct {
//        start *yaml_node_t
//        end *yaml_node_t
//        top *yaml_node_t
//    } nodes = { NULL, NULL, NULL }
//    version_directive_copy *yaml_version_directive_t = NULL
//    struct {
//        start *yaml_tag_directive_t
//        end *yaml_tag_directive_t
//        top *yaml_tag_directive_t
//    } tag_directives_copy = { NULL, NULL, NULL }
//    value yaml_tag_directive_t = { NULL, NULL }
//    mark yaml_mark_t = { 0, 0, 0 }
//
//    assert(document) // Non-NULL document object is expected.
//    assert((tag_directives_start && tag_directives_end) ||
//            (tag_directives_start == tag_directives_end))
//                            // Valid tag directives are expected.
//
//    if (!STACK_INIT(&context, nodes, INITIAL_STACK_SIZE)) goto error
//
//    if (version_directive) {
//        version_directive_copy = yaml_malloc(sizeof(yaml_version_directive_t))
//        if (!version_directive_copy) goto error
//        version_directive_copy.major = version_directive.major
//        version_directive_copy.minor = version_directive.minor
//    }
//
//    if (tag_directives_start != tag_directives_end) {
//        tag_directive *yaml_tag_directive_t
//        if (!STACK_INIT(&context, tag_directives_copy, INITIAL_STACK_SIZE))
//            goto error
//        for (tag_directive = tag_directives_start
//                tag_directive != tag_directives_end; tag_directive ++) {
//            assert(tag_directive.handle)
//            assert(tag_directive.prefix)
//            if (!yaml_check_utf8(tag_directive.handle,
//                        strlen((char *)tag_directive.handle)))
//                goto error
//            if (!yaml_check_utf8(tag_directive.prefix,
//                        strlen((char *)tag_directive.prefix)))
//                goto error
//            value.handle = yaml_strdup(tag_directive.handle)
//            value.prefix = yaml_strdup(tag_directive.prefix)
//            if (!value.handle || !value.prefix) goto error
//            if (!PUSH(&context, tag_directives_copy, value))
//                goto error
//            value.handle = NULL
//            value.prefix = NULL
//        }
//    }
//
//    DOCUMENT_INIT(*document, nodes.start, nodes.end, version_directive_copy,
//            tag_directives_copy.start, tag_directives_copy.top,
//            start_implicit, end_implicit, mark, mark)
//
//    return 1
//
//error:
//    STACK_DEL(&context, nodes)
//    yaml_free(version_directive_copy)
//    while (!STACK_EMPTY(&context, tag_directives_copy)) {
//        value yaml_tag_directive_t = POP(&context, tag_directives_copy)
//        yaml_free(value.handle)
//        yaml_free(value.prefix)
//    }
//    STACK_DEL(&context, tag_directives_copy)
//    yaml_free(value.handle)
//    yaml_free(value.prefix)
//
//    return 0
//}
//
///*
// * Destroy a document object.
// */
//
//YAML_DECLARE(void)
//yaml_document_delete(document *yaml_document_t)
//{
//    struct {
//        error yaml_error_type_t
//    } context
//    tag_directive *yaml_tag_directive_t
//
//    context.error = YAML_NO_ERROR // Eliminate a compiler warning.
//
//    assert(document) // Non-NULL document object is expected.
//
//    while (!STACK_EMPTY(&context, document.nodes)) {
//        node yaml_node_t = POP(&context, document.nodes)
//        yaml_free(node.tag)
//        switch (node.type) {
//            case YAML_SCALAR_NODE:
//                yaml_free(node.data.scalar.value)
//                break
//            case YAML_SEQUENCE_NODE:
//                STACK_DEL(&context, node.data.sequence.items)
//                break
//            case YAML_MAPPING_NODE:
//                STACK_DEL(&context, node.data.mapping.pairs)
//                break
//            default:
//                assert(0) // Should not happen.
//        }
//    }
//    STACK_DEL(&context, document.nodes)
//
//    yaml_free(document.version_directive)
//    for (tag_directive = document.tag_directives.start
//            tag_directive != document.tag_directives.end
//            tag_directive++) {
//        yaml_free(tag_directive.handle)
//        yaml_free(tag_directive.prefix)
//    }
//    yaml_free(document.tag_directives.start)
//
//    memset(document, 0, sizeof(yaml_document_t))
//}
//
///**
// * Get a document node.
// */
//
//YAML_DECLARE(yaml_node_t *)
//yaml_document_get_node(document *yaml_document_t, index int)
//{
//    assert(document) // Non-NULL document object is expected.
//
//    if (index > 0 && document.nodes.start + index <= document.nodes.top) {
//        return document.nodes.start + index - 1
//    }
//    return NULL
//}
//
///**
// * Get the root object.
// */
//
//YAML_DECLARE(yaml_node_t *)
//yaml_document_get_root_node(document *yaml_document_t)
//{
//    assert(document) // Non-NULL document object is expected.
//
//    if (document.nodes.top != document.nodes.start) {
//        return document.nodes.start
//    }
//    return NULL
//}
//
///*
// * Add a scalar node to a document.
// */
//
//YAML_DECLARE(int)
//yaml_document_add_scalar(document *yaml_document_t,
//        tag *yaml_char_t, value *yaml_char_t, length int,
//        style yaml_scalar_style_t)
//{
//    struct {
//        error yaml_error_type_t
//    } context
//    mark yaml_mark_t = { 0, 0, 0 }
//    tag_copy *yaml_char_t = NULL
//    value_copy *yaml_char_t = NULL
//    node yaml_node_t
//
//    assert(document) // Non-NULL document object is expected.
//    assert(value) // Non-NULL value is expected.
//
//    if (!tag) {
//        tag = (yaml_char_t *)YAML_DEFAULT_SCALAR_TAG
//    }
//
//    if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error
//    tag_copy = yaml_strdup(tag)
//    if (!tag_copy) goto error
//
//    if (length < 0) {
//        length = strlen((char *)value)
//    }
//
//    if (!yaml_check_utf8(value, length)) goto error
//    value_copy = yaml_malloc(length+1)
//    if (!value_copy) goto error
//    memcpy(value_copy, value, length)
//    value_copy[length] = '\0'
//
//    SCALAR_NODE_INIT(node, tag_copy, value_copy, length, style, mark, mark)
//    if (!PUSH(&context, document.nodes, node)) goto error
//
//    return document.nodes.top - document.nodes.start
//
//error:
//    yaml_free(tag_copy)
//    yaml_free(value_copy)
//
//    return 0
//}
//
///*
// * Add a sequence node to a document.
// */
//
//YAML_DECLARE(int)
//yaml_document_add_sequence(document *yaml_document_t,
//        tag *yaml_char_t, style yaml_sequence_style_t)
//{
//    struct {
//        error yaml_error_type_t
//    } context
//    mark yaml_mark_t = { 0, 0, 0 }
//    tag_copy *yaml_char_t = NULL
//    struct {
//        start *yaml_node_item_t
//        end *yaml_node_item_t
//        top *yaml_node_item_t
//    } items = { NULL, NULL, NULL }
//    node yaml_node_t
//
//    assert(document) // Non-NULL document object is expected.
//
//    if (!tag) {
//        tag = (yaml_char_t *)YAML_DEFAULT_SEQUENCE_TAG
//    }
//
//    if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error
//    tag_copy = yaml_strdup(tag)
//    if (!tag_copy) goto error
//
//    if (!STACK_INIT(&context, items, INITIAL_STACK_SIZE)) goto error
//
//    SEQUENCE_NODE_INIT(node, tag_copy, items.start, items.end,
//            style, mark, mark)
//    if (!PUSH(&context, document.nodes, node)) goto error
//
//    return document.nodes.top - document.nodes.start
//
//error:
//    STACK_DEL(&context, items)
//    yaml_free(tag_copy)
//
//    return 0
//}
//
///*
// * Add a mapping node to a document.
// */
//
//YAML_DECLARE(int)
//yaml_document_add_mapping(document *yaml_document_t,
//        tag *yaml_char_t, style yaml_mapping_style_t)
//{
//    struct {
//        error yaml_error_type_t
//    } context
//    mark yaml_mark_t = { 0, 0, 0 }
//    tag_copy *yaml_char_t = NULL
//    struct {
//        start *yaml_node_pair_t
//        end *yaml_node_pair_t
//        top *yaml_node_pair_t
//    } pairs = { NULL, NULL, NULL }
//    node yaml_node_t
//
//    assert(document) // Non-NULL document object is expected.
//
//    if (!tag) {
//        tag = (yaml_char_t *)YAML_DEFAULT_MAPPING_TAG
//    }
//
//    if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error
//    tag_copy = yaml_strdup(tag)
//    if (!tag_copy) goto error
//
//    if (!STACK_INIT(&context, pairs, INITIAL_STACK_SIZE)) goto error
//
//    MAPPING_NODE_INIT(node, tag_copy, pairs.start, pairs.end,
//            style, mark, mark)
//    if (!PUSH(&context, document.nodes, node)) goto error
//
//    return document.nodes.top - document.nodes.start
//
//error:
//    STACK_DEL(&context, pairs)
//    yaml_free(tag_copy)
//
//    return 0
//}
//
///*
// * Append an item to a sequence node.
// */
//
//YAML_DECLARE(int)
//yaml_document_append_sequence_item(document *yaml_document_t,
//        sequence int, item int)
//{
//    struct {
//        error yaml_error_type_t
//    } context
//
//    assert(document) // Non-NULL document is required.
//    assert(sequence > 0
//            && document.nodes.start + sequence <= document.nodes.top)
//                            // Valid sequence id is required.
//    assert(document.nodes.start[sequence-1].type == YAML_SEQUENCE_NODE)
//                            // A sequence node is required.
//    assert(item > 0 && document.nodes.start + item <= document.nodes.top)
//                            // Valid item id is required.
//
//    if (!PUSH(&context,
//                document.nodes.start[sequence-1].data.sequence.items, item))
//        return 0
//
//    return 1
//}
//
///*
// * Append a pair of a key and a value to a mapping node.
// */
//
//YAML_DECLARE(int)
//yaml_document_append_mapping_pair(document *yaml_document_t,
//        mapping int, key int, value int)
//{
//    struct {
//        error yaml_error_type_t
//    } context
//
//    pair yaml_node_pair_t
//
//    assert(document) // Non-NULL document is required.
//    assert(mapping > 0
//            && document.nodes.start + mapping <= document.nodes.top)
//                            // Valid mapping id is required.
//    assert(document.nodes.start[mapping-1].type == YAML_MAPPING_NODE)
//                            // A mapping node is required.
//    assert(key > 0 && document.nodes.start + key <= document.nodes.top)
//                            // Valid key id is required.
//    assert(value > 0 && document.nodes.start + value <= document.nodes.top)
//                            // Valid value id is required.
//
//    pair.key = key
//    pair.value = value
//
//    if (!PUSH(&context,
//                document.nodes.start[mapping-1].data.mapping.pairs, pair))
//        return 0
//
//    return 1
//}
//
//
 07070100001008000081A4000000000000000000000001645E367C00006179000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v3/decode.go //
// Copyright (c) 2011-2019 Canonical Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package yaml

import (
	"encoding"
	"encoding/base64"
	"fmt"
	"io"
	"math"
	"reflect"
	"strconv"
	"time"
)

// ----------------------------------------------------------------------------
// Parser, produces a node tree out of a libyaml event stream.

type parser struct {
	parser   yaml_parser_t
	event    yaml_event_t
	doc      *Node
	anchors  map[string]*Node
	doneInit bool
	textless bool
}

func newParser(b []byte) *parser {
	p := parser{}
	if !yaml_parser_initialize(&p.parser) {
		panic("failed to initialize YAML emitter")
	}
	if len(b) == 0 {
		b = []byte{'\n'}
	}
	yaml_parser_set_input_string(&p.parser, b)
	return &p
}

func newParserFromReader(r io.Reader) *parser {
	p := parser{}
	if !yaml_parser_initialize(&p.parser) {
		panic("failed to initialize YAML emitter")
	}
	yaml_parser_set_input_reader(&p.parser, r)
	return &p
}

func (p *parser) init() {
	if p.doneInit {
		return
	}
	p.anchors = make(map[string]*Node)
	p.expect(yaml_STREAM_START_EVENT)
	p.doneInit = true
}

func (p *parser) destroy() {
	if p.event.typ != yaml_NO_EVENT {
		yaml_event_delete(&p.event)
	}
	yaml_parser_delete(&p.parser)
}

// expect consumes an event from the event stream and
// checks that it's of the expected type.
func (p *parser) expect(e yaml_event_type_t) {
	if p.event.typ == yaml_NO_EVENT {
		if !yaml_parser_parse(&p.parser, &p.event) {
			p.fail()
		}
	}
	if p.event.typ == yaml_STREAM_END_EVENT {
		failf("attempted to go past the end of stream; corrupted value?")
	}
	if p.event.typ != e {
		p.parser.problem = fmt.Sprintf("expected %s event but got %s", e, p.event.typ)
		p.fail()
	}
	yaml_event_delete(&p.event)
	p.event.typ = yaml_NO_EVENT
}

// peek peeks at the next event in the event stream,
// puts the results into p.event and returns the event type.
func (p *parser) peek() yaml_event_type_t {
	if p.event.typ != yaml_NO_EVENT {
		return p.event.typ
	}
	// It's curious choice from the underlying API to generally return a
	// positive result on success, but on this case return true in an error
	// scenario. This was the source of bugs in the past (issue #666).
	if !yaml_parser_parse(&p.parser, &p.event) || p.parser.error != yaml_NO_ERROR {
		p.fail()
	}
	return p.event.typ
}

func (p *parser) fail() {
	var where string
	var line int
	if p.parser.context_mark.line != 0 {
		line = p.parser.context_mark.line
		// Scanner errors don't iterate line before returning error
		if p.parser.error == yaml_SCANNER_ERROR {
			line++
		}
	} else if p.parser.problem_mark.line != 0 {
		line = p.parser.problem_mark.line
		// Scanner errors don't iterate line before returning error
		if p.parser.error == yaml_SCANNER_ERROR {
			line++
		}
	}
	if line != 0 {
		where = "line " + strconv.Itoa(line) + ": "
	}
	var msg string
	if len(p.parser.problem) > 0 {
		msg = p.parser.problem
	} else {
		msg = "unknown problem parsing YAML content"
	}
	failf("%s%s", where, msg)
}

func (p *parser) anchor(n *Node, anchor []byte) {
	if anchor != nil {
		n.Anchor = string(anchor)
		p.anchors[n.Anchor] = n
	}
}

func (p *parser) parse() *Node {
	p.init()
	switch p.peek() {
	case yaml_SCALAR_EVENT:
		return p.scalar()
	case yaml_ALIAS_EVENT:
		return p.alias()
	case yaml_MAPPING_START_EVENT:
		return p.mapping()
	case yaml_SEQUENCE_START_EVENT:
		return p.sequence()
	case yaml_DOCUMENT_START_EVENT:
		return p.document()
	case yaml_STREAM_END_EVENT:
		// Happens when attempting to decode an empty buffer.
		return nil
	case yaml_TAIL_COMMENT_EVENT:
		panic("internal error: unexpected tail comment event (please report)")
	default:
		panic("internal error: attempted to parse unknown event (please report): " + p.event.typ.String())
	}
}

func (p *parser) node(kind Kind, defaultTag, tag, value string) *Node {
	var style Style
	if tag != "" && tag != "!" {
		tag = shortTag(tag)
		style = TaggedStyle
	} else if defaultTag != "" {
		tag = defaultTag
	} else if kind == ScalarNode {
		tag, _ = resolve("", value)
	}
	n := &Node{
		Kind:  kind,
		Tag:   tag,
		Value: value,
		Style: style,
	}
	if !p.textless {
		n.Line = p.event.start_mark.line + 1
		n.Column = p.event.start_mark.column + 1
		n.HeadComment = string(p.event.head_comment)
		n.LineComment = string(p.event.line_comment)
		n.FootComment = string(p.event.foot_comment)
	}
	return n
}

func (p *parser) parseChild(parent *Node) *Node {
	child := p.parse()
	parent.Content = append(parent.Content, child)
	return child
}

func (p *parser) document() *Node {
	n := p.node(DocumentNode, "", "", "")
	p.doc = n
	p.expect(yaml_DOCUMENT_START_EVENT)
	p.parseChild(n)
	if p.peek() == yaml_DOCUMENT_END_EVENT {
		n.FootComment = string(p.event.foot_comment)
	}
	p.expect(yaml_DOCUMENT_END_EVENT)
	return n
}

func (p *parser) alias() *Node {
	n := p.node(AliasNode, "", "", string(p.event.anchor))
	n.Alias = p.anchors[n.Value]
	if n.Alias == nil {
		failf("unknown anchor '%s' referenced", n.Value)
	}
	p.expect(yaml_ALIAS_EVENT)
	return n
}

func (p *parser) scalar() *Node {
	var parsedStyle = p.event.scalar_style()
	var nodeStyle Style
	switch {
	case parsedStyle&yaml_DOUBLE_QUOTED_SCALAR_STYLE != 0:
		nodeStyle = DoubleQuotedStyle
	case parsedStyle&yaml_SINGLE_QUOTED_SCALAR_STYLE != 0:
		nodeStyle = SingleQuotedStyle
	case parsedStyle&yaml_LITERAL_SCALAR_STYLE != 0:
		nodeStyle = LiteralStyle
	case parsedStyle&yaml_FOLDED_SCALAR_STYLE != 0:
		nodeStyle = FoldedStyle
	}
	var nodeValue = string(p.event.value)
	var nodeTag = string(p.event.tag)
	var defaultTag string
	if nodeStyle == 0 {
		if nodeValue == "<<" {
			defaultTag = mergeTag
		}
	} else {
		defaultTag = strTag
	}
	n := p.node(ScalarNode, defaultTag, nodeTag, nodeValue)
	n.Style |= nodeStyle
	p.anchor(n, p.event.anchor)
	p.expect(yaml_SCALAR_EVENT)
	return n
}

func (p *parser) sequence() *Node {
	n := p.node(SequenceNode, seqTag, string(p.event.tag), "")
	if p.event.sequence_style()&yaml_FLOW_SEQUENCE_STYLE != 0 {
		n.Style |= FlowStyle
	}
	p.anchor(n, p.event.anchor)
	p.expect(yaml_SEQUENCE_START_EVENT)
	for p.peek() != yaml_SEQUENCE_END_EVENT {
		p.parseChild(n)
	}
	n.LineComment = string(p.event.line_comment)
	n.FootComment = string(p.event.foot_comment)
	p.expect(yaml_SEQUENCE_END_EVENT)
	return n
}

func (p *parser) mapping() *Node {
	n := p.node(MappingNode, mapTag, string(p.event.tag), "")
	block := true
	if p.event.mapping_style()&yaml_FLOW_MAPPING_STYLE != 0 {
		block = false
		n.Style |= FlowStyle
	}
	p.anchor(n, p.event.anchor)
	p.expect(yaml_MAPPING_START_EVENT)
	for p.peek() != yaml_MAPPING_END_EVENT {
		k := p.parseChild(n)
		if block && k.FootComment != "" {
			// Must be a foot comment for the prior value when being dedented.
			if len(n.Content) > 2 {
				n.Content[len(n.Content)-3].FootComment = k.FootComment
				k.FootComment = ""
			}
		}
		v := p.parseChild(n)
		if k.FootComment == "" && v.FootComment != "" {
			k.FootComment = v.FootComment
			v.FootComment = ""
		}
		if p.peek() == yaml_TAIL_COMMENT_EVENT {
			if k.FootComment == "" {
				k.FootComment = string(p.event.foot_comment)
			}
			p.expect(yaml_TAIL_COMMENT_EVENT)
		}
	}
	n.LineComment = string(p.event.line_comment)
	n.FootComment = string(p.event.foot_comment)
	if n.Style&FlowStyle == 0 && n.FootComment != "" && len(n.Content) > 1 {
		n.Content[len(n.Content)-2].FootComment = n.FootComment
		n.FootComment = ""
	}
	p.expect(yaml_MAPPING_END_EVENT)
	return n
}

// ----------------------------------------------------------------------------
// Decoder, unmarshals a node into a provided value.

type decoder struct {
	doc     *Node
	aliases map[*Node]bool
	terrors []string

	stringMapType  reflect.Type
	generalMapType reflect.Type

	knownFields bool
	uniqueKeys  bool
	decodeCount int
	aliasCount  int
	aliasDepth  int

	mergedFields map[interface{}]bool
}

var (
	nodeType       = reflect.TypeOf(Node{})
	durationType   = reflect.TypeOf(time.Duration(0))
	stringMapType  = reflect.TypeOf(map[string]interface{}{})
	generalMapType = reflect.TypeOf(map[interface{}]interface{}{})
	ifaceType      = generalMapType.Elem()
	timeType       = reflect.TypeOf(time.Time{})
	ptrTimeType    = reflect.TypeOf(&time.Time{})
)

func newDecoder() *decoder {
	d := &decoder{
		stringMapType:  stringMapType,
		generalMapType: generalMapType,
		uniqueKeys:     true,
	}
	d.aliases = make(map[*Node]bool)
	return d
}

func (d *decoder) terror(n *Node, tag string, out reflect.Value) {
	if n.Tag != "" {
		tag = n.Tag
	}
	value := n.Value
	if tag != seqTag && tag != mapTag {
		if len(value) > 10 {
			value = " `" + value[:7] + "...`"
		} else {
			value = " `" + value + "`"
		}
	}
	d.terrors = append(d.terrors, fmt.Sprintf("line %d: cannot unmarshal %s%s into %s", n.Line, shortTag(tag), value, out.Type()))
}

func (d *decoder) callUnmarshaler(n *Node, u Unmarshaler) (good bool) {
	err := u.UnmarshalYAML(n)
	if e, ok := err.(*TypeError); ok {
		d.terrors = append(d.terrors, e.Errors...)
		return false
	}
	if err != nil {
		fail(err)
	}
	return true
}

func (d *decoder) callObsoleteUnmarshaler(n *Node, u obsoleteUnmarshaler) (good bool) {
	terrlen := len(d.terrors)
	err := u.UnmarshalYAML(func(v interface{}) (err error) {
		defer handleErr(&err)
		d.unmarshal(n, reflect.ValueOf(v))
		if len(d.terrors) > terrlen {
			issues := d.terrors[terrlen:]
			d.terrors = d.terrors[:terrlen]
			return &TypeError{issues}
		}
		return nil
	})
	if e, ok := err.(*TypeError); ok {
		d.terrors = append(d.terrors, e.Errors...)
		return false
	}
	if err != nil {
		fail(err)
	}
	return true
}

// d.prepare initializes and dereferences pointers and calls UnmarshalYAML
// if a value is found to implement it.
// It returns the initialized and dereferenced out value, whether
// unmarshalling was already done by UnmarshalYAML, and if so whether
// its types unmarshalled appropriately.
//
// If n holds a null value, prepare returns before doing anything.
func (d *decoder) prepare(n *Node, out reflect.Value) (newout reflect.Value, unmarshaled, good bool) {
	if n.ShortTag() == nullTag {
		return out, false, false
	}
	again := true
	for again {
		again = false
		if out.Kind() == reflect.Ptr {
			if out.IsNil() {
				out.Set(reflect.New(out.Type().Elem()))
			}
			out = out.Elem()
			again = true
		}
		if out.CanAddr() {
			outi := out.Addr().Interface()
			if u, ok := outi.(Unmarshaler); ok {
				good = d.callUnmarshaler(n, u)
				return out, true, good
			}
			if u, ok := outi.(obsoleteUnmarshaler); ok {
				good = d.callObsoleteUnmarshaler(n, u)
				return out, true, good
			}
		}
	}
	return out, false, false
}

func (d *decoder) fieldByIndex(n *Node, v reflect.Value, index []int) (field reflect.Value) {
	if n.ShortTag() == nullTag {
		return reflect.Value{}
	}
	for _, num := range index {
		for {
			if v.Kind() == reflect.Ptr {
				if v.IsNil() {
					v.Set(reflect.New(v.Type().Elem()))
				}
				v = v.Elem()
				continue
			}
			break
		}
		v = v.Field(num)
	}
	return v
}

const (
	// 400,000 decode operations is ~500kb of dense object declarations, or
	// ~5kb of dense object declarations with 10000% alias expansion
	alias_ratio_range_low = 400000

	// 4,000,000 decode operations is ~5MB of dense object declarations, or
	// ~4.5MB of dense object declarations with 10% alias expansion
	alias_ratio_range_high = 4000000

	// alias_ratio_range is the range over which we scale allowed alias ratios
	alias_ratio_range = float64(alias_ratio_range_high - alias_ratio_range_low)
)

func allowedAliasRatio(decodeCount int) float64 {
	switch {
	case decodeCount <= alias_ratio_range_low:
		// allow 99% to come from alias expansion for small-to-medium documents
		return 0.99
	case decodeCount >= alias_ratio_range_high:
		// allow 10% to come from alias expansion for very large documents
		return 0.10
	default:
		// scale smoothly from 99% down to 10% over the range.
		// this maps to 396,000 - 400,000 allowed alias-driven decodes over the range.
		// 400,000 decode operations is ~100MB of allocations in worst-case scenarios (single-item maps).
		return 0.99 - 0.89*(float64(decodeCount-alias_ratio_range_low)/alias_ratio_range)
	}
}

func (d *decoder) unmarshal(n *Node, out reflect.Value) (good bool) {
	d.decodeCount++
	if d.aliasDepth > 0 {
		d.aliasCount++
	}
	if d.aliasCount > 100 && d.decodeCount > 1000 && float64(d.aliasCount)/float64(d.decodeCount) > allowedAliasRatio(d.decodeCount) {
		failf("document contains excessive aliasing")
	}
	if out.Type() == nodeType {
		out.Set(reflect.ValueOf(n).Elem())
		return true
	}
	switch n.Kind {
	case DocumentNode:
		return d.document(n, out)
	case AliasNode:
		return d.alias(n, out)
	}
	out, unmarshaled, good := d.prepare(n, out)
	if unmarshaled {
		return good
	}
	switch n.Kind {
	case ScalarNode:
		good = d.scalar(n, out)
	case MappingNode:
		good = d.mapping(n, out)
	case SequenceNode:
		good = d.sequence(n, out)
	case 0:
		if n.IsZero() {
			return d.null(out)
		}
		fallthrough
	default:
		failf("cannot decode node with unknown kind %d", n.Kind)
	}
	return good
}

func (d *decoder) document(n *Node, out reflect.Value) (good bool) {
	if len(n.Content) == 1 {
		d.doc = n
		d.unmarshal(n.Content[0], out)
		return true
	}
	return false
}

func (d *decoder) alias(n *Node, out reflect.Value) (good bool) {
	if d.aliases[n] {
		// TODO this could actually be allowed in some circumstances.
		failf("anchor '%s' value contains itself", n.Value)
	}
	d.aliases[n] = true
	d.aliasDepth++
	good = d.unmarshal(n.Alias, out)
	d.aliasDepth--
	delete(d.aliases, n)
	return good
}

var zeroValue reflect.Value

func resetMap(out reflect.Value) {
	for _, k := range out.MapKeys() {
		out.SetMapIndex(k, zeroValue)
	}
}

func (d *decoder) null(out reflect.Value) bool {
	if out.CanAddr() {
		switch out.Kind() {
		case reflect.Interface, reflect.Ptr, reflect.Map, reflect.Slice:
			out.Set(reflect.Zero(out.Type()))
			return true
		}
	}
	return false
}

func (d *decoder) scalar(n *Node, out reflect.Value) bool {
	var tag string
	var resolved interface{}
	if n.indicatedString() {
		tag = strTag
		resolved = n.Value
	} else {
		tag, resolved = resolve(n.Tag, n.Value)
		if tag == binaryTag {
			data, err := base64.StdEncoding.DecodeString(resolved.(string))
			if err != nil {
				failf("!!binary value contains invalid base64 data")
			}
			resolved = string(data)
		}
	}
	if resolved == nil {
		return d.null(out)
	}
	if resolvedv := reflect.ValueOf(resolved); out.Type() == resolvedv.Type() {
		// We've resolved to exactly the type we want, so use that.
		out.Set(resolvedv)
		return true
	}
	// Perhaps we can use the value as a TextUnmarshaler to
	// set its value.
	if out.CanAddr() {
		u, ok := out.Addr().Interface().(encoding.TextUnmarshaler)
		if ok {
			var text []byte
			if tag == binaryTag {
				text = []byte(resolved.(string))
			} else {
				// We let any value be unmarshaled into TextUnmarshaler.
				// That might be more lax than we'd like, but the
				// TextUnmarshaler itself should bowl out any dubious values.
				text = []byte(n.Value)
			}
			err := u.UnmarshalText(text)
			if err != nil {
				fail(err)
			}
			return true
		}
	}
	switch out.Kind() {
	case reflect.String:
		if tag == binaryTag {
			out.SetString(resolved.(string))
			return true
		}
		out.SetString(n.Value)
		return true
	case reflect.Interface:
		out.Set(reflect.ValueOf(resolved))
		return true
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		// This used to work in v2, but it's very unfriendly.
		isDuration := out.Type() == durationType

		switch resolved := resolved.(type) {
		case int:
			if !isDuration && !out.OverflowInt(int64(resolved)) {
				out.SetInt(int64(resolved))
				return true
			}
		case int64:
			if !isDuration && !out.OverflowInt(resolved) {
				out.SetInt(resolved)
				return true
			}
		case uint64:
			if !isDuration && resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) {
				out.SetInt(int64(resolved))
				return true
			}
		case float64:
			if !isDuration && resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) {
				out.SetInt(int64(resolved))
				return true
			}
		case string:
			if out.Type() == durationType {
				d, err := time.ParseDuration(resolved)
				if err == nil {
					out.SetInt(int64(d))
					return true
				}
			}
		}
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		switch resolved := resolved.(type) {
		case int:
			if resolved >= 0 && !out.OverflowUint(uint64(resolved)) {
				out.SetUint(uint64(resolved))
				return true
			}
		case int64:
			if resolved >= 0 && !out.OverflowUint(uint64(resolved)) {
				out.SetUint(uint64(resolved))
				return true
			}
		case uint64:
			if !out.OverflowUint(uint64(resolved)) {
				out.SetUint(uint64(resolved))
				return true
			}
		case float64:
			if resolved <= math.MaxUint64 && !out.OverflowUint(uint64(resolved)) {
				out.SetUint(uint64(resolved))
				return true
			}
		}
	case reflect.Bool:
		switch resolved := resolved.(type) {
		case bool:
			out.SetBool(resolved)
			return true
		case string:
			// This offers some compatibility with the 1.1 spec (https://yaml.org/type/bool.html).
			// It only works if explicitly attempting to unmarshal into a typed bool value.
			switch resolved {
			case "y", "Y", "yes", "Yes", "YES", "on", "On", "ON":
				out.SetBool(true)
				return true
			case "n", "N", "no", "No", "NO", "off", "Off", "OFF":
				out.SetBool(false)
				return true
			}
		}
	case reflect.Float32, reflect.Float64:
		switch resolved := resolved.(type) {
		case int:
			out.SetFloat(float64(resolved))
			return true
		case int64:
			out.SetFloat(float64(resolved))
			return true
		case uint64:
			out.SetFloat(float64(resolved))
			return true
		case float64:
			out.SetFloat(resolved)
			return true
		}
	case reflect.Struct:
		if resolvedv := reflect.ValueOf(resolved); out.Type() == resolvedv.Type() {
			out.Set(resolvedv)
			return true
		}
	case reflect.Ptr:
		panic("yaml internal error: please report the issue")
	}
	d.terror(n, tag, out)
	return false
}

func settableValueOf(i interface{}) reflect.Value {
	v := reflect.ValueOf(i)
	sv := reflect.New(v.Type()).Elem()
	sv.Set(v)
	return sv
}

func (d *decoder) sequence(n *Node, out reflect.Value) (good bool) {
	l := len(n.Content)

	var iface reflect.Value
	switch out.Kind() {
	case reflect.Slice:
		out.Set(reflect.MakeSlice(out.Type(), l, l))
	case reflect.Array:
		if l != out.Len() {
			failf("invalid array: want %d elements but got %d", out.Len(), l)
		}
	case reflect.Interface:
		// No type hints. Will have to use a generic sequence.
		iface = out
		out = settableValueOf(make([]interface{}, l))
	default:
		d.terror(n, seqTag, out)
		return false
	}
	et := out.Type().Elem()

	j := 0
	for i := 0; i < l; i++ {
		e := reflect.New(et).Elem()
		if ok := d.unmarshal(n.Content[i], e); ok {
			out.Index(j).Set(e)
			j++
		}
	}
	if out.Kind() != reflect.Array {
		out.Set(out.Slice(0, j))
	}
	if iface.IsValid() {
		iface.Set(out)
	}
	return true
}

func (d *decoder) mapping(n *Node, out reflect.Value) (good bool) {
	l := len(n.Content)
	if d.uniqueKeys {
		nerrs := len(d.terrors)
		for i := 0; i < l; i += 2 {
			ni := n.Content[i]
			for j := i + 2; j < l; j += 2 {
				nj := n.Content[j]
				if ni.Kind == nj.Kind && ni.Value == nj.Value {
					d.terrors = append(d.terrors, fmt.Sprintf("line %d: mapping key %#v already defined at line %d", nj.Line, nj.Value, ni.Line))
				}
			}
		}
		if len(d.terrors) > nerrs {
			return false
		}
	}
	switch out.Kind() {
	case reflect.Struct:
		return d.mappingStruct(n, out)
	case reflect.Map:
		// okay
	case reflect.Interface:
		iface := out
		if isStringMap(n) {
			out = reflect.MakeMap(d.stringMapType)
		} else {
			out = reflect.MakeMap(d.generalMapType)
		}
		iface.Set(out)
	default:
		d.terror(n, mapTag, out)
		return false
	}

	outt := out.Type()
	kt := outt.Key()
	et := outt.Elem()

	stringMapType := d.stringMapType
	generalMapType := d.generalMapType
	if outt.Elem() == ifaceType {
		if outt.Key().Kind() == reflect.String {
			d.stringMapType = outt
		} else if outt.Key() == ifaceType {
			d.generalMapType = outt
		}
	}

	mergedFields := d.mergedFields
	d.mergedFields = nil

	var mergeNode *Node

	mapIsNew := false
	if out.IsNil() {
		out.Set(reflect.MakeMap(outt))
		mapIsNew = true
	}
	for i := 0; i < l; i += 2 {
		if isMerge(n.Content[i]) {
			mergeNode = n.Content[i+1]
			continue
		}
		k := reflect.New(kt).Elem()
		if d.unmarshal(n.Content[i], k) {
			if mergedFields != nil {
				ki := k.Interface()
				if mergedFields[ki] {
					continue
				}
				mergedFields[ki] = true
			}
			kkind := k.Kind()
			if kkind == reflect.Interface {
				kkind = k.Elem().Kind()
			}
			if kkind == reflect.Map || kkind == reflect.Slice {
				failf("invalid map key: %#v", k.Interface())
			}
			e := reflect.New(et).Elem()
			if d.unmarshal(n.Content[i+1], e) || n.Content[i+1].ShortTag() == nullTag && (mapIsNew || !out.MapIndex(k).IsValid()) {
				out.SetMapIndex(k, e)
			}
		}
	}

	d.mergedFields = mergedFields
	if mergeNode != nil {
		d.merge(n, mergeNode, out)
	}

	d.stringMapType = stringMapType
	d.generalMapType = generalMapType
	return true
}

func isStringMap(n *Node) bool {
	if n.Kind != MappingNode {
		return false
	}
	l := len(n.Content)
	for i := 0; i < l; i += 2 {
		shortTag := n.Content[i].ShortTag()
		if shortTag != strTag && shortTag != mergeTag {
			return false
		}
	}
	return true
}

func (d *decoder) mappingStruct(n *Node, out reflect.Value) (good bool) {
	sinfo, err := getStructInfo(out.Type())
	if err != nil {
		panic(err)
	}

	var inlineMap reflect.Value
	var elemType reflect.Type
	if sinfo.InlineMap != -1 {
		inlineMap = out.Field(sinfo.InlineMap)
		elemType = inlineMap.Type().Elem()
	}

	for _, index := range sinfo.InlineUnmarshalers {
		field := d.fieldByIndex(n, out, index)
		d.prepare(n, field)
	}

	mergedFields := d.mergedFields
	d.mergedFields = nil
	var mergeNode *Node
	var doneFields []bool
	if d.uniqueKeys {
		doneFields = make([]bool, len(sinfo.FieldsList))
	}
	name := settableValueOf("")
	l := len(n.Content)
	for i := 0; i < l; i += 2 {
		ni := n.Content[i]
		if isMerge(ni) {
			mergeNode = n.Content[i+1]
			continue
		}
		if !d.unmarshal(ni, name) {
			continue
		}
		sname := name.String()
		if mergedFields != nil {
			if mergedFields[sname] {
				continue
			}
			mergedFields[sname] = true
		}
		if info, ok := sinfo.FieldsMap[sname]; ok {
			if d.uniqueKeys {
				if doneFields[info.Id] {
					d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s already set in type %s", ni.Line, name.String(), out.Type()))
					continue
				}
				doneFields[info.Id] = true
			}
			var field reflect.Value
			if info.Inline == nil {
				field = out.Field(info.Num)
			} else {
				field = d.fieldByIndex(n, out, info.Inline)
			}
			d.unmarshal(n.Content[i+1], field)
		} else if sinfo.InlineMap != -1 {
			if inlineMap.IsNil() {
				inlineMap.Set(reflect.MakeMap(inlineMap.Type()))
			}
			value := reflect.New(elemType).Elem()
			d.unmarshal(n.Content[i+1], value)
			inlineMap.SetMapIndex(name, value)
		} else if d.knownFields {
			d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s not found in type %s", ni.Line, name.String(), out.Type()))
		}
	}

	d.mergedFields = mergedFields
	if mergeNode != nil {
		d.merge(n, mergeNode, out)
	}
	return true
}

func failWantMap() {
	failf("map merge requires map or sequence of maps as the value")
}

func (d *decoder) merge(parent *Node, merge *Node, out reflect.Value) {
	mergedFields := d.mergedFields
	if mergedFields == nil {
		d.mergedFields = make(map[interface{}]bool)
		for i := 0; i < len(parent.Content); i += 2 {
			k := reflect.New(ifaceType).Elem()
			if d.unmarshal(parent.Content[i], k) {
				d.mergedFields[k.Interface()] = true
			}
		}
	}

	switch merge.Kind {
	case MappingNode:
		d.unmarshal(merge, out)
	case AliasNode:
		if merge.Alias != nil && merge.Alias.Kind != MappingNode {
			failWantMap()
		}
		d.unmarshal(merge, out)
	case SequenceNode:
		for i := 0; i < len(merge.Content); i++ {
			ni := merge.Content[i]
			if ni.Kind == AliasNode {
				if ni.Alias != nil && ni.Alias.Kind != MappingNode {
					failWantMap()
				}
			} else if ni.Kind != MappingNode {
				failWantMap()
			}
			d.unmarshal(ni, out)
		}
	default:
		failWantMap()
	}

	d.mergedFields = mergedFields
}

func isMerge(n *Node) bool {
	return n.Kind == ScalarNode && n.Value == "<<" && (n.Tag == "" || n.Tag == "!" || shortTag(n.Tag) == mergeTag)
}
   07070100001009000081A4000000000000000000000001645E367C0000D793000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v3/emitterc.go   //
// Copyright (c) 2011-2019 Canonical Ltd
// Copyright (c) 2006-2010 Kirill Simonov
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of
// this software and associated documentation files (the "Software"), to deal in
// the Software without restriction, including without limitation the rights to
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
// of the Software, and to permit persons to whom the Software is furnished to do
// so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.

package yaml

import (
	"bytes"
	"fmt"
)

// Flush the buffer if needed.
func flush(emitter *yaml_emitter_t) bool {
	if emitter.buffer_pos+5 >= len(emitter.buffer) {
		return yaml_emitter_flush(emitter)
	}
	return true
}

// Put a character to the output buffer.
func put(emitter *yaml_emitter_t, value byte) bool {
	if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) {
		return false
	}
	emitter.buffer[emitter.buffer_pos] = value
	emitter.buffer_pos++
	emitter.column++
	return true
}

// Put a line break to the output buffer.
func put_break(emitter *yaml_emitter_t) bool {
	if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) {
		return false
	}
	switch emitter.line_break {
	case yaml_CR_BREAK:
		emitter.buffer[emitter.buffer_pos] = '\r'
		emitter.buffer_pos += 1
	case yaml_LN_BREAK:
		emitter.buffer[emitter.buffer_pos] = '\n'
		emitter.buffer_pos += 1
	case yaml_CRLN_BREAK:
		emitter.buffer[emitter.buffer_pos+0] = '\r'
		emitter.buffer[emitter.buffer_pos+1] = '\n'
		emitter.buffer_pos += 2
	default:
		panic("unknown line break setting")
	}
	if emitter.column == 0 {
		emitter.space_above = true
	}
	emitter.column = 0
	emitter.line++
	// [Go] Do this here and below and drop from everywhere else (see commented lines).
	emitter.indention = true
	return true
}

// Copy a character from a string into buffer.
func write(emitter *yaml_emitter_t, s []byte, i *int) bool {
	if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) {
		return false
	}
	p := emitter.buffer_pos
	w := width(s[*i])
	switch w {
	case 4:
		emitter.buffer[p+3] = s[*i+3]
		fallthrough
	case 3:
		emitter.buffer[p+2] = s[*i+2]
		fallthrough
	case 2:
		emitter.buffer[p+1] = s[*i+1]
		fallthrough
	case 1:
		emitter.buffer[p+0] = s[*i+0]
	default:
		panic("unknown character width")
	}
	emitter.column++
	emitter.buffer_pos += w
	*i += w
	return true
}

// Write a whole string into buffer.
func write_all(emitter *yaml_emitter_t, s []byte) bool {
	for i := 0; i < len(s); {
		if !write(emitter, s, &i) {
			return false
		}
	}
	return true
}

// Copy a line break character from a string into buffer.
func write_break(emitter *yaml_emitter_t, s []byte, i *int) bool {
	if s[*i] == '\n' {
		if !put_break(emitter) {
			return false
		}
		*i++
	} else {
		if !write(emitter, s, i) {
			return false
		}
		if emitter.column == 0 {
			emitter.space_above = true
		}
		emitter.column = 0
		emitter.line++
		// [Go] Do this here and above and drop from everywhere else (see commented lines).
		emitter.indention = true
	}
	return true
}

// Set an emitter error and return false.
func yaml_emitter_set_emitter_error(emitter *yaml_emitter_t, problem string) bool {
	emitter.error = yaml_EMITTER_ERROR
	emitter.problem = problem
	return false
}

// Emit an event.
func yaml_emitter_emit(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	emitter.events = append(emitter.events, *event)
	for !yaml_emitter_need_more_events(emitter) {
		event := &emitter.events[emitter.events_head]
		if !yaml_emitter_analyze_event(emitter, event) {
			return false
		}
		if !yaml_emitter_state_machine(emitter, event) {
			return false
		}
		yaml_event_delete(event)
		emitter.events_head++
	}
	return true
}

// Check if we need to accumulate more events before emitting.
//
// We accumulate extra
//  - 1 event for DOCUMENT-START
//  - 2 events for SEQUENCE-START
//  - 3 events for MAPPING-START
//
func yaml_emitter_need_more_events(emitter *yaml_emitter_t) bool {
	if emitter.events_head == len(emitter.events) {
		return true
	}
	var accumulate int
	switch emitter.events[emitter.events_head].typ {
	case yaml_DOCUMENT_START_EVENT:
		accumulate = 1
		break
	case yaml_SEQUENCE_START_EVENT:
		accumulate = 2
		break
	case yaml_MAPPING_START_EVENT:
		accumulate = 3
		break
	default:
		return false
	}
	if len(emitter.events)-emitter.events_head > accumulate {
		return false
	}
	var level int
	for i := emitter.events_head; i < len(emitter.events); i++ {
		switch emitter.events[i].typ {
		case yaml_STREAM_START_EVENT, yaml_DOCUMENT_START_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT:
			level++
		case yaml_STREAM_END_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_END_EVENT, yaml_MAPPING_END_EVENT:
			level--
		}
		if level == 0 {
			return false
		}
	}
	return true
}

// Append a directive to the directives stack.
func yaml_emitter_append_tag_directive(emitter *yaml_emitter_t, value *yaml_tag_directive_t, allow_duplicates bool) bool {
	for i := 0; i < len(emitter.tag_directives); i++ {
		if bytes.Equal(value.handle, emitter.tag_directives[i].handle) {
			if allow_duplicates {
				return true
			}
			return yaml_emitter_set_emitter_error(emitter, "duplicate %TAG directive")
		}
	}

	// [Go] Do we actually need to copy this given garbage collection
	// and the lack of deallocating destructors?
	tag_copy := yaml_tag_directive_t{
		handle: make([]byte, len(value.handle)),
		prefix: make([]byte, len(value.prefix)),
	}
	copy(tag_copy.handle, value.handle)
	copy(tag_copy.prefix, value.prefix)
	emitter.tag_directives = append(emitter.tag_directives, tag_copy)
	return true
}

// Increase the indentation level.
func yaml_emitter_increase_indent(emitter *yaml_emitter_t, flow, indentless bool) bool {
	emitter.indents = append(emitter.indents, emitter.indent)
	if emitter.indent < 0 {
		if flow {
			emitter.indent = emitter.best_indent
		} else {
			emitter.indent = 0
		}
	} else if !indentless {
		// [Go] This was changed so that indentations are more regular.
		if emitter.states[len(emitter.states)-1] == yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE {
			// The first indent inside a sequence will just skip the "- " indicator.
			emitter.indent += 2
		} else {
			// Everything else aligns to the chosen indentation.
			emitter.indent = emitter.best_indent*((emitter.indent+emitter.best_indent)/emitter.best_indent)
		}
	}
	return true
}

// State dispatcher.
func yaml_emitter_state_machine(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	switch emitter.state {
	default:
	case yaml_EMIT_STREAM_START_STATE:
		return yaml_emitter_emit_stream_start(emitter, event)

	case yaml_EMIT_FIRST_DOCUMENT_START_STATE:
		return yaml_emitter_emit_document_start(emitter, event, true)

	case yaml_EMIT_DOCUMENT_START_STATE:
		return yaml_emitter_emit_document_start(emitter, event, false)

	case yaml_EMIT_DOCUMENT_CONTENT_STATE:
		return yaml_emitter_emit_document_content(emitter, event)

	case yaml_EMIT_DOCUMENT_END_STATE:
		return yaml_emitter_emit_document_end(emitter, event)

	case yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE:
		return yaml_emitter_emit_flow_sequence_item(emitter, event, true, false)

	case yaml_EMIT_FLOW_SEQUENCE_TRAIL_ITEM_STATE:
		return yaml_emitter_emit_flow_sequence_item(emitter, event, false, true)

	case yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE:
		return yaml_emitter_emit_flow_sequence_item(emitter, event, false, false)

	case yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE:
		return yaml_emitter_emit_flow_mapping_key(emitter, event, true, false)

	case yaml_EMIT_FLOW_MAPPING_TRAIL_KEY_STATE:
		return yaml_emitter_emit_flow_mapping_key(emitter, event, false, true)

	case yaml_EMIT_FLOW_MAPPING_KEY_STATE:
		return yaml_emitter_emit_flow_mapping_key(emitter, event, false, false)

	case yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE:
		return yaml_emitter_emit_flow_mapping_value(emitter, event, true)

	case yaml_EMIT_FLOW_MAPPING_VALUE_STATE:
		return yaml_emitter_emit_flow_mapping_value(emitter, event, false)

	case yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE:
		return yaml_emitter_emit_block_sequence_item(emitter, event, true)

	case yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE:
		return yaml_emitter_emit_block_sequence_item(emitter, event, false)

	case yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE:
		return yaml_emitter_emit_block_mapping_key(emitter, event, true)

	case yaml_EMIT_BLOCK_MAPPING_KEY_STATE:
		return yaml_emitter_emit_block_mapping_key(emitter, event, false)

	case yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE:
		return yaml_emitter_emit_block_mapping_value(emitter, event, true)

	case yaml_EMIT_BLOCK_MAPPING_VALUE_STATE:
		return yaml_emitter_emit_block_mapping_value(emitter, event, false)

	case yaml_EMIT_END_STATE:
		return yaml_emitter_set_emitter_error(emitter, "expected nothing after STREAM-END")
	}
	panic("invalid emitter state")
}

// Expect STREAM-START.
func yaml_emitter_emit_stream_start(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	if event.typ != yaml_STREAM_START_EVENT {
		return yaml_emitter_set_emitter_error(emitter, "expected STREAM-START")
	}
	if emitter.encoding == yaml_ANY_ENCODING {
		emitter.encoding = event.encoding
		if emitter.encoding == yaml_ANY_ENCODING {
			emitter.encoding = yaml_UTF8_ENCODING
		}
	}
	if emitter.best_indent < 2 || emitter.best_indent > 9 {
		emitter.best_indent = 2
	}
	if emitter.best_width >= 0 && emitter.best_width <= emitter.best_indent*2 {
		emitter.best_width = 80
	}
	if emitter.best_width < 0 {
		emitter.best_width = 1<<31 - 1
	}
	if emitter.line_break == yaml_ANY_BREAK {
		emitter.line_break = yaml_LN_BREAK
	}

	emitter.indent = -1
	emitter.line = 0
	emitter.column = 0
	emitter.whitespace = true
	emitter.indention = true
	emitter.space_above = true
	emitter.foot_indent = -1

	if emitter.encoding != yaml_UTF8_ENCODING {
		if !yaml_emitter_write_bom(emitter) {
			return false
		}
	}
	emitter.state = yaml_EMIT_FIRST_DOCUMENT_START_STATE
	return true
}

// Expect DOCUMENT-START or STREAM-END.
func yaml_emitter_emit_document_start(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {

	if event.typ == yaml_DOCUMENT_START_EVENT {

		if event.version_directive != nil {
			if !yaml_emitter_analyze_version_directive(emitter, event.version_directive) {
				return false
			}
		}

		for i := 0; i < len(event.tag_directives); i++ {
			tag_directive := &event.tag_directives[i]
			if !yaml_emitter_analyze_tag_directive(emitter, tag_directive) {
				return false
			}
			if !yaml_emitter_append_tag_directive(emitter, tag_directive, false) {
				return false
			}
		}

		for i := 0; i < len(default_tag_directives); i++ {
			tag_directive := &default_tag_directives[i]
			if !yaml_emitter_append_tag_directive(emitter, tag_directive, true) {
				return false
			}
		}

		implicit := event.implicit
		if !first || emitter.canonical {
			implicit = false
		}

		if emitter.open_ended && (event.version_directive != nil || len(event.tag_directives) > 0) {
			if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) {
				return false
			}
			if !yaml_emitter_write_indent(emitter) {
				return false
			}
		}

		if event.version_directive != nil {
			implicit = false
			if !yaml_emitter_write_indicator(emitter, []byte("%YAML"), true, false, false) {
				return false
			}
			if !yaml_emitter_write_indicator(emitter, []byte("1.1"), true, false, false) {
				return false
			}
			if !yaml_emitter_write_indent(emitter) {
				return false
			}
		}

		if len(event.tag_directives) > 0 {
			implicit = false
			for i := 0; i < len(event.tag_directives); i++ {
				tag_directive := &event.tag_directives[i]
				if !yaml_emitter_write_indicator(emitter, []byte("%TAG"), true, false, false) {
					return false
				}
				if !yaml_emitter_write_tag_handle(emitter, tag_directive.handle) {
					return false
				}
				if !yaml_emitter_write_tag_content(emitter, tag_directive.prefix, true) {
					return false
				}
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
			}
		}

		if yaml_emitter_check_empty_document(emitter) {
			implicit = false
		}
		if !implicit {
			if !yaml_emitter_write_indent(emitter) {
				return false
			}
			if !yaml_emitter_write_indicator(emitter, []byte("---"), true, false, false) {
				return false
			}
			if emitter.canonical || true {
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
			}
		}

		if len(emitter.head_comment) > 0 {
			if !yaml_emitter_process_head_comment(emitter) {
				return false
			}
			if !put_break(emitter) {
				return false
			}
		}

		emitter.state = yaml_EMIT_DOCUMENT_CONTENT_STATE
		return true
	}

	if event.typ == yaml_STREAM_END_EVENT {
		if emitter.open_ended {
			if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) {
				return false
			}
			if !yaml_emitter_write_indent(emitter) {
				return false
			}
		}
		if !yaml_emitter_flush(emitter) {
			return false
		}
		emitter.state = yaml_EMIT_END_STATE
		return true
	}

	return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-START or STREAM-END")
}

// Expect the root node.
func yaml_emitter_emit_document_content(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	emitter.states = append(emitter.states, yaml_EMIT_DOCUMENT_END_STATE)

	if !yaml_emitter_process_head_comment(emitter) {
		return false
	}
	if !yaml_emitter_emit_node(emitter, event, true, false, false, false) {
		return false
	}
	if !yaml_emitter_process_line_comment(emitter) {
		return false
	}
	if !yaml_emitter_process_foot_comment(emitter) {
		return false
	}
	return true
}

// Expect DOCUMENT-END.
func yaml_emitter_emit_document_end(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	if event.typ != yaml_DOCUMENT_END_EVENT {
		return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-END")
	}
	// [Go] Force document foot separation.
	emitter.foot_indent = 0
	if !yaml_emitter_process_foot_comment(emitter) {
		return false
	}
	emitter.foot_indent = -1
	if !yaml_emitter_write_indent(emitter) {
		return false
	}
	if !event.implicit {
		// [Go] Allocate the slice elsewhere.
		if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) {
			return false
		}
		if !yaml_emitter_write_indent(emitter) {
			return false
		}
	}
	if !yaml_emitter_flush(emitter) {
		return false
	}
	emitter.state = yaml_EMIT_DOCUMENT_START_STATE
	emitter.tag_directives = emitter.tag_directives[:0]
	return true
}

// Expect a flow item node.
func yaml_emitter_emit_flow_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first, trail bool) bool {
	if first {
		if !yaml_emitter_write_indicator(emitter, []byte{'['}, true, true, false) {
			return false
		}
		if !yaml_emitter_increase_indent(emitter, true, false) {
			return false
		}
		emitter.flow_level++
	}

	if event.typ == yaml_SEQUENCE_END_EVENT {
		if emitter.canonical && !first && !trail {
			if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {
				return false
			}
		}
		emitter.flow_level--
		emitter.indent = emitter.indents[len(emitter.indents)-1]
		emitter.indents = emitter.indents[:len(emitter.indents)-1]
		if emitter.column == 0 || emitter.canonical && !first {
			if !yaml_emitter_write_indent(emitter) {
				return false
			}
		}
		if !yaml_emitter_write_indicator(emitter, []byte{']'}, false, false, false) {
			return false
		}
		if !yaml_emitter_process_line_comment(emitter) {
			return false
		}
		if !yaml_emitter_process_foot_comment(emitter) {
			return false
		}
		emitter.state = emitter.states[len(emitter.states)-1]
		emitter.states = emitter.states[:len(emitter.states)-1]

		return true
	}

	if !first && !trail {
		if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {
			return false
		}
	}

	if !yaml_emitter_process_head_comment(emitter) {
		return false
	}
	if emitter.column == 0 {
		if !yaml_emitter_write_indent(emitter) {
			return false
		}
	}

	if emitter.canonical || emitter.column > emitter.best_width {
		if !yaml_emitter_write_indent(emitter) {
			return false
		}
	}
	if len(emitter.line_comment)+len(emitter.foot_comment)+len(emitter.tail_comment) > 0 {
		emitter.states = append(emitter.states, yaml_EMIT_FLOW_SEQUENCE_TRAIL_ITEM_STATE)
	} else {
		emitter.states = append(emitter.states, yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE)
	}
	if !yaml_emitter_emit_node(emitter, event, false, true, false, false) {
		return false
	}
	if len(emitter.line_comment)+len(emitter.foot_comment)+len(emitter.tail_comment) > 0 {
		if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {
			return false
		}
	}
	if !yaml_emitter_process_line_comment(emitter) {
		return false
	}
	if !yaml_emitter_process_foot_comment(emitter) {
		return false
	}
	return true
}

// Expect a flow key node.
func yaml_emitter_emit_flow_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first, trail bool) bool {
	if first {
		if !yaml_emitter_write_indicator(emitter, []byte{'{'}, true, true, false) {
			return false
		}
		if !yaml_emitter_increase_indent(emitter, true, false) {
			return false
		}
		emitter.flow_level++
	}

	if event.typ == yaml_MAPPING_END_EVENT {
		if (emitter.canonical || len(emitter.head_comment)+len(emitter.foot_comment)+len(emitter.tail_comment) > 0) && !first && !trail {
			if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {
				return false
			}
		}
		if !yaml_emitter_process_head_comment(emitter) {
			return false
		}
		emitter.flow_level--
		emitter.indent = emitter.indents[len(emitter.indents)-1]
		emitter.indents = emitter.indents[:len(emitter.indents)-1]
		if emitter.canonical && !first {
			if !yaml_emitter_write_indent(emitter) {
				return false
			}
		}
		if !yaml_emitter_write_indicator(emitter, []byte{'}'}, false, false, false) {
			return false
		}
		if !yaml_emitter_process_line_comment(emitter) {
			return false
		}
		if !yaml_emitter_process_foot_comment(emitter) {
			return false
		}
		emitter.state = emitter.states[len(emitter.states)-1]
		emitter.states = emitter.states[:len(emitter.states)-1]
		return true
	}

	if !first && !trail {
		if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {
			return false
		}
	}

	if !yaml_emitter_process_head_comment(emitter) {
		return false
	}

	if emitter.column == 0 {
		if !yaml_emitter_write_indent(emitter) {
			return false
		}
	}

	if emitter.canonical || emitter.column > emitter.best_width {
		if !yaml_emitter_write_indent(emitter) {
			return false
		}
	}

	if !emitter.canonical && yaml_emitter_check_simple_key(emitter) {
		emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE)
		return yaml_emitter_emit_node(emitter, event, false, false, true, true)
	}
	if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, false) {
		return false
	}
	emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_VALUE_STATE)
	return yaml_emitter_emit_node(emitter, event, false, false, true, false)
}

// Expect a flow value node.
func yaml_emitter_emit_flow_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool {
	if simple {
		if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) {
			return false
		}
	} else {
		if emitter.canonical || emitter.column > emitter.best_width {
			if !yaml_emitter_write_indent(emitter) {
				return false
			}
		}
		if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, false) {
			return false
		}
	}
	if len(emitter.line_comment)+len(emitter.foot_comment)+len(emitter.tail_comment) > 0 {
		emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_TRAIL_KEY_STATE)
	} else {
		emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_KEY_STATE)
	}
	if !yaml_emitter_emit_node(emitter, event, false, false, true, false) {
		return false
	}
	if len(emitter.line_comment)+len(emitter.foot_comment)+len(emitter.tail_comment) > 0 {
		if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {
			return false
		}
	}
	if !yaml_emitter_process_line_comment(emitter) {
		return false
	}
	if !yaml_emitter_process_foot_comment(emitter) {
		return false
	}
	return true
}

// Expect a block item node.
func yaml_emitter_emit_block_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {
	if first {
		if !yaml_emitter_increase_indent(emitter, false, false) {
			return false
		}
	}
	if event.typ == yaml_SEQUENCE_END_EVENT {
		emitter.indent = emitter.indents[len(emitter.indents)-1]
		emitter.indents = emitter.indents[:len(emitter.indents)-1]
		emitter.state = emitter.states[len(emitter.states)-1]
		emitter.states = emitter.states[:len(emitter.states)-1]
		return true
	}
	if !yaml_emitter_process_head_comment(emitter) {
		return false
	}
	if !yaml_emitter_write_indent(emitter) {
		return false
	}
	if !yaml_emitter_write_indicator(emitter, []byte{'-'}, true, false, true) {
		return false
	}
	emitter.states = append(emitter.states, yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE)
	if !yaml_emitter_emit_node(emitter, event, false, true, false, false) {
		return false
	}
	if !yaml_emitter_process_line_comment(emitter) {
		return false
	}
	if !yaml_emitter_process_foot_comment(emitter) {
		return false
	}
	return true
}

// Expect a block key node.
func yaml_emitter_emit_block_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {
	if first {
		if !yaml_emitter_increase_indent(emitter, false, false) {
			return false
		}
	}
	if !yaml_emitter_process_head_comment(emitter) {
		return false
	}
	if event.typ == yaml_MAPPING_END_EVENT {
		emitter.indent = emitter.indents[len(emitter.indents)-1]
		emitter.indents = emitter.indents[:len(emitter.indents)-1]
		emitter.state = emitter.states[len(emitter.states)-1]
		emitter.states = emitter.states[:len(emitter.states)-1]
		return true
	}
	if !yaml_emitter_write_indent(emitter) {
		return false
	}
	if len(emitter.line_comment) > 0 {
		// [Go] A line comment was provided for the key. That's unusual as the
		//      scanner associates line comments with the value. Either way,
		//      save the line comment and render it appropriately later.
		emitter.key_line_comment = emitter.line_comment
		emitter.line_comment = nil
	}
	if yaml_emitter_check_simple_key(emitter) {
		emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE)
		return yaml_emitter_emit_node(emitter, event, false, false, true, true)
	}
	if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, true) {
		return false
	}
	emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_VALUE_STATE)
	return yaml_emitter_emit_node(emitter, event, false, false, true, false)
}

// Expect a block value node.
func yaml_emitter_emit_block_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool {
	if simple {
		if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) {
			return false
		}
	} else {
		if !yaml_emitter_write_indent(emitter) {
			return false
		}
		if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, true) {
			return false
		}
	}
	if len(emitter.key_line_comment) > 0 {
		// [Go] Line comments are generally associated with the value, but when there's
		//      no value on the same line as a mapping key they end up attached to the
		//      key itself.
		if event.typ == yaml_SCALAR_EVENT {
			if len(emitter.line_comment) == 0 {
				// A scalar is coming and it has no line comments by itself yet,
				// so just let it handle the line comment as usual. If it has a
				// line comment, we can't have both so the one from the key is lost.
				emitter.line_comment = emitter.key_line_comment
				emitter.key_line_comment = nil
			}
		} else if event.sequence_style() != yaml_FLOW_SEQUENCE_STYLE && (event.typ == yaml_MAPPING_START_EVENT || event.typ == yaml_SEQUENCE_START_EVENT) {
			// An indented block follows, so write the comment right now.
			emitter.line_comment, emitter.key_line_comment = emitter.key_line_comment, emitter.line_comment
			if !yaml_emitter_process_line_comment(emitter) {
				return false
			}
			emitter.line_comment, emitter.key_line_comment = emitter.key_line_comment, emitter.line_comment
		}
	}
	emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_KEY_STATE)
	if !yaml_emitter_emit_node(emitter, event, false, false, true, false) {
		return false
	}
	if !yaml_emitter_process_line_comment(emitter) {
		return false
	}
	if !yaml_emitter_process_foot_comment(emitter) {
		return false
	}
	return true
}

func yaml_emitter_silent_nil_event(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	return event.typ == yaml_SCALAR_EVENT && event.implicit && !emitter.canonical && len(emitter.scalar_data.value) == 0
}

// Expect a node.
func yaml_emitter_emit_node(emitter *yaml_emitter_t, event *yaml_event_t,
	root bool, sequence bool, mapping bool, simple_key bool) bool {

	emitter.root_context = root
	emitter.sequence_context = sequence
	emitter.mapping_context = mapping
	emitter.simple_key_context = simple_key

	switch event.typ {
	case yaml_ALIAS_EVENT:
		return yaml_emitter_emit_alias(emitter, event)
	case yaml_SCALAR_EVENT:
		return yaml_emitter_emit_scalar(emitter, event)
	case yaml_SEQUENCE_START_EVENT:
		return yaml_emitter_emit_sequence_start(emitter, event)
	case yaml_MAPPING_START_EVENT:
		return yaml_emitter_emit_mapping_start(emitter, event)
	default:
		return yaml_emitter_set_emitter_error(emitter,
			fmt.Sprintf("expected SCALAR, SEQUENCE-START, MAPPING-START, or ALIAS, but got %v", event.typ))
	}
}

// Expect ALIAS.
func yaml_emitter_emit_alias(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	if !yaml_emitter_process_anchor(emitter) {
		return false
	}
	emitter.state = emitter.states[len(emitter.states)-1]
	emitter.states = emitter.states[:len(emitter.states)-1]
	return true
}

// Expect SCALAR.
func yaml_emitter_emit_scalar(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	if !yaml_emitter_select_scalar_style(emitter, event) {
		return false
	}
	if !yaml_emitter_process_anchor(emitter) {
		return false
	}
	if !yaml_emitter_process_tag(emitter) {
		return false
	}
	if !yaml_emitter_increase_indent(emitter, true, false) {
		return false
	}
	if !yaml_emitter_process_scalar(emitter) {
		return false
	}
	emitter.indent = emitter.indents[len(emitter.indents)-1]
	emitter.indents = emitter.indents[:len(emitter.indents)-1]
	emitter.state = emitter.states[len(emitter.states)-1]
	emitter.states = emitter.states[:len(emitter.states)-1]
	return true
}

// Expect SEQUENCE-START.
func yaml_emitter_emit_sequence_start(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	if !yaml_emitter_process_anchor(emitter) {
		return false
	}
	if !yaml_emitter_process_tag(emitter) {
		return false
	}
	if emitter.flow_level > 0 || emitter.canonical || event.sequence_style() == yaml_FLOW_SEQUENCE_STYLE ||
		yaml_emitter_check_empty_sequence(emitter) {
		emitter.state = yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE
	} else {
		emitter.state = yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE
	}
	return true
}

// Expect MAPPING-START.
func yaml_emitter_emit_mapping_start(emitter *yaml_emitter_t, event *yaml_event_t) bool {
	if !yaml_emitter_process_anchor(emitter) {
		return false
	}
	if !yaml_emitter_process_tag(emitter) {
		return false
	}
	if emitter.flow_level > 0 || emitter.canonical || event.mapping_style() == yaml_FLOW_MAPPING_STYLE ||
		yaml_emitter_check_empty_mapping(emitter) {
		emitter.state = yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE
	} else {
		emitter.state = yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE
	}
	return true
}

// Check if the document content is an empty scalar.
func yaml_emitter_check_empty_document(emitter *yaml_emitter_t) bool {
	return false // [Go] Huh?
}

// Check if the next events represent an empty sequence.
func yaml_emitter_check_empty_sequence(emitter *yaml_emitter_t) bool {
	if len(emitter.events)-emitter.events_head < 2 {
		return false
	}
	return emitter.events[emitter.events_head].typ == yaml_SEQUENCE_START_EVENT &&
		emitter.events[emitter.events_head+1].typ == yaml_SEQUENCE_END_EVENT
}

// Check if the next events represent an empty mapping.
func yaml_emitter_check_empty_mapping(emitter *yaml_emitter_t) bool {
	if len(emitter.events)-emitter.events_head < 2 {
		return false
	}
	return emitter.events[emitter.events_head].typ == yaml_MAPPING_START_EVENT &&
		emitter.events[emitter.events_head+1].typ == yaml_MAPPING_END_EVENT
}

// Check if the next node can be expressed as a simple key.
func yaml_emitter_check_simple_key(emitter *yaml_emitter_t) bool {
	length := 0
	switch emitter.events[emitter.events_head].typ {
	case yaml_ALIAS_EVENT:
		length += len(emitter.anchor_data.anchor)
	case yaml_SCALAR_EVENT:
		if emitter.scalar_data.multiline {
			return false
		}
		length += len(emitter.anchor_data.anchor) +
			len(emitter.tag_data.handle) +
			len(emitter.tag_data.suffix) +
			len(emitter.scalar_data.value)
	case yaml_SEQUENCE_START_EVENT:
		if !yaml_emitter_check_empty_sequence(emitter) {
			return false
		}
		length += len(emitter.anchor_data.anchor) +
			len(emitter.tag_data.handle) +
			len(emitter.tag_data.suffix)
	case yaml_MAPPING_START_EVENT:
		if !yaml_emitter_check_empty_mapping(emitter) {
			return false
		}
		length += len(emitter.anchor_data.anchor) +
			len(emitter.tag_data.handle) +
			len(emitter.tag_data.suffix)
	default:
		return false
	}
	return length <= 128
}

// Determine an acceptable scalar style.
func yaml_emitter_select_scalar_style(emitter *yaml_emitter_t, event *yaml_event_t) bool {

	no_tag := len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0
	if no_tag && !event.implicit && !event.quoted_implicit {
		return yaml_emitter_set_emitter_error(emitter, "neither tag nor implicit flags are specified")
	}

	style := event.scalar_style()
	if style == yaml_ANY_SCALAR_STYLE {
		style = yaml_PLAIN_SCALAR_STYLE
	}
	if emitter.canonical {
		style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
	}
	if emitter.simple_key_context && emitter.scalar_data.multiline {
		style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
	}

	if style == yaml_PLAIN_SCALAR_STYLE {
		if emitter.flow_level > 0 && !emitter.scalar_data.flow_plain_allowed ||
			emitter.flow_level == 0 && !emitter.scalar_data.block_plain_allowed {
			style = yaml_SINGLE_QUOTED_SCALAR_STYLE
		}
		if len(emitter.scalar_data.value) == 0 && (emitter.flow_level > 0 || emitter.simple_key_context) {
			style = yaml_SINGLE_QUOTED_SCALAR_STYLE
		}
		if no_tag && !event.implicit {
			style = yaml_SINGLE_QUOTED_SCALAR_STYLE
		}
	}
	if style == yaml_SINGLE_QUOTED_SCALAR_STYLE {
		if !emitter.scalar_data.single_quoted_allowed {
			style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
		}
	}
	if style == yaml_LITERAL_SCALAR_STYLE || style == yaml_FOLDED_SCALAR_STYLE {
		if !emitter.scalar_data.block_allowed || emitter.flow_level > 0 || emitter.simple_key_context {
			style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
		}
	}

	if no_tag && !event.quoted_implicit && style != yaml_PLAIN_SCALAR_STYLE {
		emitter.tag_data.handle = []byte{'!'}
	}
	emitter.scalar_data.style = style
	return true
}

// Write an anchor.
func yaml_emitter_process_anchor(emitter *yaml_emitter_t) bool {
	if emitter.anchor_data.anchor == nil {
		return true
	}
	c := []byte{'&'}
	if emitter.anchor_data.alias {
		c[0] = '*'
	}
	if !yaml_emitter_write_indicator(emitter, c, true, false, false) {
		return false
	}
	return yaml_emitter_write_anchor(emitter, emitter.anchor_data.anchor)
}

// Write a tag.
func yaml_emitter_process_tag(emitter *yaml_emitter_t) bool {
	if len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 {
		return true
	}
	if len(emitter.tag_data.handle) > 0 {
		if !yaml_emitter_write_tag_handle(emitter, emitter.tag_data.handle) {
			return false
		}
		if len(emitter.tag_data.suffix) > 0 {
			if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) {
				return false
			}
		}
	} else {
		// [Go] Allocate these slices elsewhere.
		if !yaml_emitter_write_indicator(emitter, []byte("!<"), true, false, false) {
			return false
		}
		if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) {
			return false
		}
		if !yaml_emitter_write_indicator(emitter, []byte{'>'}, false, false, false) {
			return false
		}
	}
	return true
}

// Write a scalar.
func yaml_emitter_process_scalar(emitter *yaml_emitter_t) bool {
	switch emitter.scalar_data.style {
	case yaml_PLAIN_SCALAR_STYLE:
		return yaml_emitter_write_plain_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context)

	case yaml_SINGLE_QUOTED_SCALAR_STYLE:
		return yaml_emitter_write_single_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context)

	case yaml_DOUBLE_QUOTED_SCALAR_STYLE:
		return yaml_emitter_write_double_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context)

	case yaml_LITERAL_SCALAR_STYLE:
		return yaml_emitter_write_literal_scalar(emitter, emitter.scalar_data.value)

	case yaml_FOLDED_SCALAR_STYLE:
		return yaml_emitter_write_folded_scalar(emitter, emitter.scalar_data.value)
	}
	panic("unknown scalar style")
}

// Write a head comment.
func yaml_emitter_process_head_comment(emitter *yaml_emitter_t) bool {
	if len(emitter.tail_comment) > 0 {
		if !yaml_emitter_write_indent(emitter) {
			return false
		}
		if !yaml_emitter_write_comment(emitter, emitter.tail_comment) {
			return false
		}
		emitter.tail_comment = emitter.tail_comment[:0]
		emitter.foot_indent = emitter.indent
		if emitter.foot_indent < 0 {
			emitter.foot_indent = 0
		}
	}

	if len(emitter.head_comment) == 0 {
		return true
	}
	if !yaml_emitter_write_indent(emitter) {
		return false
	}
	if !yaml_emitter_write_comment(emitter, emitter.head_comment) {
		return false
	}
	emitter.head_comment = emitter.head_comment[:0]
	return true
}

// Write an line comment.
func yaml_emitter_process_line_comment(emitter *yaml_emitter_t) bool {
	if len(emitter.line_comment) == 0 {
		return true
	}
	if !emitter.whitespace {
		if !put(emitter, ' ') {
			return false
		}
	}
	if !yaml_emitter_write_comment(emitter, emitter.line_comment) {
		return false
	}
	emitter.line_comment = emitter.line_comment[:0]
	return true
}

// Write a foot comment.
func yaml_emitter_process_foot_comment(emitter *yaml_emitter_t) bool {
	if len(emitter.foot_comment) == 0 {
		return true
	}
	if !yaml_emitter_write_indent(emitter) {
		return false
	}
	if !yaml_emitter_write_comment(emitter, emitter.foot_comment) {
		return false
	}
	emitter.foot_comment = emitter.foot_comment[:0]
	emitter.foot_indent = emitter.indent
	if emitter.foot_indent < 0 {
		emitter.foot_indent = 0
	}
	return true
}

// Check if a %YAML directive is valid.
func yaml_emitter_analyze_version_directive(emitter *yaml_emitter_t, version_directive *yaml_version_directive_t) bool {
	if version_directive.major != 1 || version_directive.minor != 1 {
		return yaml_emitter_set_emitter_error(emitter, "incompatible %YAML directive")
	}
	return true
}

// Check if a %TAG directive is valid.
func yaml_emitter_analyze_tag_directive(emitter *yaml_emitter_t, tag_directive *yaml_tag_directive_t) bool {
	handle := tag_directive.handle
	prefix := tag_directive.prefix
	if len(handle) == 0 {
		return yaml_emitter_set_emitter_error(emitter, "tag handle must not be empty")
	}
	if handle[0] != '!' {
		return yaml_emitter_set_emitter_error(emitter, "tag handle must start with '!'")
	}
	if handle[len(handle)-1] != '!' {
		return yaml_emitter_set_emitter_error(emitter, "tag handle must end with '!'")
	}
	for i := 1; i < len(handle)-1; i += width(handle[i]) {
		if !is_alpha(handle, i) {
			return yaml_emitter_set_emitter_error(emitter, "tag handle must contain alphanumerical characters only")
		}
	}
	if len(prefix) == 0 {
		return yaml_emitter_set_emitter_error(emitter, "tag prefix must not be empty")
	}
	return true
}

// Check if an anchor is valid.
func yaml_emitter_analyze_anchor(emitter *yaml_emitter_t, anchor []byte, alias bool) bool {
	if len(anchor) == 0 {
		problem := "anchor value must not be empty"
		if alias {
			problem = "alias value must not be empty"
		}
		return yaml_emitter_set_emitter_error(emitter, problem)
	}
	for i := 0; i < len(anchor); i += width(anchor[i]) {
		if !is_alpha(anchor, i) {
			problem := "anchor value must contain alphanumerical characters only"
			if alias {
				problem = "alias value must contain alphanumerical characters only"
			}
			return yaml_emitter_set_emitter_error(emitter, problem)
		}
	}
	emitter.anchor_data.anchor = anchor
	emitter.anchor_data.alias = alias
	return true
}

// Check if a tag is valid.
func yaml_emitter_analyze_tag(emitter *yaml_emitter_t, tag []byte) bool {
	if len(tag) == 0 {
		return yaml_emitter_set_emitter_error(emitter, "tag value must not be empty")
	}
	for i := 0; i < len(emitter.tag_directives); i++ {
		tag_directive := &emitter.tag_directives[i]
		if bytes.HasPrefix(tag, tag_directive.prefix) {
			emitter.tag_data.handle = tag_directive.handle
			emitter.tag_data.suffix = tag[len(tag_directive.prefix):]
			return true
		}
	}
	emitter.tag_data.suffix = tag
	return true
}

// Check if a scalar is valid.
func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool {
	var (
		block_indicators   = false
		flow_indicators    = false
		line_breaks        = false
		special_characters = false
		tab_characters     = false

		leading_space  = false
		leading_break  = false
		trailing_space = false
		trailing_break = false
		break_space    = false
		space_break    = false

		preceded_by_whitespace = false
		followed_by_whitespace = false
		previous_space         = false
		previous_break         = false
	)

	emitter.scalar_data.value = value

	if len(value) == 0 {
		emitter.scalar_data.multiline = false
		emitter.scalar_data.flow_plain_allowed = false
		emitter.scalar_data.block_plain_allowed = true
		emitter.scalar_data.single_quoted_allowed = true
		emitter.scalar_data.block_allowed = false
		return true
	}

	if len(value) >= 3 && ((value[0] == '-' && value[1] == '-' && value[2] == '-') || (value[0] == '.' && value[1] == '.' && value[2] == '.')) {
		block_indicators = true
		flow_indicators = true
	}

	preceded_by_whitespace = true
	for i, w := 0, 0; i < len(value); i += w {
		w = width(value[i])
		followed_by_whitespace = i+w >= len(value) || is_blank(value, i+w)

		if i == 0 {
			switch value[i] {
			case '#', ',', '[', ']', '{', '}', '&', '*', '!', '|', '>', '\'', '"', '%', '@', '`':
				flow_indicators = true
				block_indicators = true
			case '?', ':':
				flow_indicators = true
				if followed_by_whitespace {
					block_indicators = true
				}
			case '-':
				if followed_by_whitespace {
					flow_indicators = true
					block_indicators = true
				}
			}
		} else {
			switch value[i] {
			case ',', '?', '[', ']', '{', '}':
				flow_indicators = true
			case ':':
				flow_indicators = true
				if followed_by_whitespace {
					block_indicators = true
				}
			case '#':
				if preceded_by_whitespace {
					flow_indicators = true
					block_indicators = true
				}
			}
		}

		if value[i] == '\t' {
			tab_characters = true
		} else if !is_printable(value, i) || !is_ascii(value, i) && !emitter.unicode {
			special_characters = true
		}
		if is_space(value, i) {
			if i == 0 {
				leading_space = true
			}
			if i+width(value[i]) == len(value) {
				trailing_space = true
			}
			if previous_break {
				break_space = true
			}
			previous_space = true
			previous_break = false
		} else if is_break(value, i) {
			line_breaks = true
			if i == 0 {
				leading_break = true
			}
			if i+width(value[i]) == len(value) {
				trailing_break = true
			}
			if previous_space {
				space_break = true
			}
			previous_space = false
			previous_break = true
		} else {
			previous_space = false
			previous_break = false
		}

		// [Go]: Why 'z'? Couldn't be the end of the string as that's the loop condition.
		preceded_by_whitespace = is_blankz(value, i)
	}

	emitter.scalar_data.multiline = line_breaks
	emitter.scalar_data.flow_plain_allowed = true
	emitter.scalar_data.block_plain_allowed = true
	emitter.scalar_data.single_quoted_allowed = true
	emitter.scalar_data.block_allowed = true

	if leading_space || leading_break || trailing_space || trailing_break {
		emitter.scalar_data.flow_plain_allowed = false
		emitter.scalar_data.block_plain_allowed = false
	}
	if trailing_space {
		emitter.scalar_data.block_allowed = false
	}
	if break_space {
		emitter.scalar_data.flow_plain_allowed = false
		emitter.scalar_data.block_plain_allowed = false
		emitter.scalar_data.single_quoted_allowed = false
	}
	if space_break || tab_characters || special_characters {
		emitter.scalar_data.flow_plain_allowed = false
		emitter.scalar_data.block_plain_allowed = false
		emitter.scalar_data.single_quoted_allowed = false
	}
	if space_break || special_characters {
		emitter.scalar_data.block_allowed = false
	}
	if line_breaks {
		emitter.scalar_data.flow_plain_allowed = false
		emitter.scalar_data.block_plain_allowed = false
	}
	if flow_indicators {
		emitter.scalar_data.flow_plain_allowed = false
	}
	if block_indicators {
		emitter.scalar_data.block_plain_allowed = false
	}
	return true
}

// Check if the event data is valid.
func yaml_emitter_analyze_event(emitter *yaml_emitter_t, event *yaml_event_t) bool {

	emitter.anchor_data.anchor = nil
	emitter.tag_data.handle = nil
	emitter.tag_data.suffix = nil
	emitter.scalar_data.value = nil

	if len(event.head_comment) > 0 {
		emitter.head_comment = event.head_comment
	}
	if len(event.line_comment) > 0 {
		emitter.line_comment = event.line_comment
	}
	if len(event.foot_comment) > 0 {
		emitter.foot_comment = event.foot_comment
	}
	if len(event.tail_comment) > 0 {
		emitter.tail_comment = event.tail_comment
	}

	switch event.typ {
	case yaml_ALIAS_EVENT:
		if !yaml_emitter_analyze_anchor(emitter, event.anchor, true) {
			return false
		}

	case yaml_SCALAR_EVENT:
		if len(event.anchor) > 0 {
			if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) {
				return false
			}
		}
		if len(event.tag) > 0 && (emitter.canonical || (!event.implicit && !event.quoted_implicit)) {
			if !yaml_emitter_analyze_tag(emitter, event.tag) {
				return false
			}
		}
		if !yaml_emitter_analyze_scalar(emitter, event.value) {
			return false
		}

	case yaml_SEQUENCE_START_EVENT:
		if len(event.anchor) > 0 {
			if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) {
				return false
			}
		}
		if len(event.tag) > 0 && (emitter.canonical || !event.implicit) {
			if !yaml_emitter_analyze_tag(emitter, event.tag) {
				return false
			}
		}

	case yaml_MAPPING_START_EVENT:
		if len(event.anchor) > 0 {
			if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) {
				return false
			}
		}
		if len(event.tag) > 0 && (emitter.canonical || !event.implicit) {
			if !yaml_emitter_analyze_tag(emitter, event.tag) {
				return false
			}
		}
	}
	return true
}

// Write the BOM character.
func yaml_emitter_write_bom(emitter *yaml_emitter_t) bool {
	if !flush(emitter) {
		return false
	}
	pos := emitter.buffer_pos
	emitter.buffer[pos+0] = '\xEF'
	emitter.buffer[pos+1] = '\xBB'
	emitter.buffer[pos+2] = '\xBF'
	emitter.buffer_pos += 3
	return true
}

func yaml_emitter_write_indent(emitter *yaml_emitter_t) bool {
	indent := emitter.indent
	if indent < 0 {
		indent = 0
	}
	if !emitter.indention || emitter.column > indent || (emitter.column == indent && !emitter.whitespace) {
		if !put_break(emitter) {
			return false
		}
	}
	if emitter.foot_indent == indent {
		if !put_break(emitter) {
			return false
		}
	}
	for emitter.column < indent {
		if !put(emitter, ' ') {
			return false
		}
	}
	emitter.whitespace = true
	//emitter.indention = true
	emitter.space_above = false
	emitter.foot_indent = -1
	return true
}

func yaml_emitter_write_indicator(emitter *yaml_emitter_t, indicator []byte, need_whitespace, is_whitespace, is_indention bool) bool {
	if need_whitespace && !emitter.whitespace {
		if !put(emitter, ' ') {
			return false
		}
	}
	if !write_all(emitter, indicator) {
		return false
	}
	emitter.whitespace = is_whitespace
	emitter.indention = (emitter.indention && is_indention)
	emitter.open_ended = false
	return true
}

func yaml_emitter_write_anchor(emitter *yaml_emitter_t, value []byte) bool {
	if !write_all(emitter, value) {
		return false
	}
	emitter.whitespace = false
	emitter.indention = false
	return true
}

func yaml_emitter_write_tag_handle(emitter *yaml_emitter_t, value []byte) bool {
	if !emitter.whitespace {
		if !put(emitter, ' ') {
			return false
		}
	}
	if !write_all(emitter, value) {
		return false
	}
	emitter.whitespace = false
	emitter.indention = false
	return true
}

func yaml_emitter_write_tag_content(emitter *yaml_emitter_t, value []byte, need_whitespace bool) bool {
	if need_whitespace && !emitter.whitespace {
		if !put(emitter, ' ') {
			return false
		}
	}
	for i := 0; i < len(value); {
		var must_write bool
		switch value[i] {
		case ';', '/', '?', ':', '@', '&', '=', '+', '$', ',', '_', '.', '~', '*', '\'', '(', ')', '[', ']':
			must_write = true
		default:
			must_write = is_alpha(value, i)
		}
		if must_write {
			if !write(emitter, value, &i) {
				return false
			}
		} else {
			w := width(value[i])
			for k := 0; k < w; k++ {
				octet := value[i]
				i++
				if !put(emitter, '%') {
					return false
				}

				c := octet >> 4
				if c < 10 {
					c += '0'
				} else {
					c += 'A' - 10
				}
				if !put(emitter, c) {
					return false
				}

				c = octet & 0x0f
				if c < 10 {
					c += '0'
				} else {
					c += 'A' - 10
				}
				if !put(emitter, c) {
					return false
				}
			}
		}
	}
	emitter.whitespace = false
	emitter.indention = false
	return true
}

func yaml_emitter_write_plain_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool {
	if len(value) > 0 && !emitter.whitespace {
		if !put(emitter, ' ') {
			return false
		}
	}

	spaces := false
	breaks := false
	for i := 0; i < len(value); {
		if is_space(value, i) {
			if allow_breaks && !spaces && emitter.column > emitter.best_width && !is_space(value, i+1) {
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
				i += width(value[i])
			} else {
				if !write(emitter, value, &i) {
					return false
				}
			}
			spaces = true
		} else if is_break(value, i) {
			if !breaks && value[i] == '\n' {
				if !put_break(emitter) {
					return false
				}
			}
			if !write_break(emitter, value, &i) {
				return false
			}
			//emitter.indention = true
			breaks = true
		} else {
			if breaks {
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
			}
			if !write(emitter, value, &i) {
				return false
			}
			emitter.indention = false
			spaces = false
			breaks = false
		}
	}

	if len(value) > 0 {
		emitter.whitespace = false
	}
	emitter.indention = false
	if emitter.root_context {
		emitter.open_ended = true
	}

	return true
}

func yaml_emitter_write_single_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool {

	if !yaml_emitter_write_indicator(emitter, []byte{'\''}, true, false, false) {
		return false
	}

	spaces := false
	breaks := false
	for i := 0; i < len(value); {
		if is_space(value, i) {
			if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 && !is_space(value, i+1) {
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
				i += width(value[i])
			} else {
				if !write(emitter, value, &i) {
					return false
				}
			}
			spaces = true
		} else if is_break(value, i) {
			if !breaks && value[i] == '\n' {
				if !put_break(emitter) {
					return false
				}
			}
			if !write_break(emitter, value, &i) {
				return false
			}
			//emitter.indention = true
			breaks = true
		} else {
			if breaks {
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
			}
			if value[i] == '\'' {
				if !put(emitter, '\'') {
					return false
				}
			}
			if !write(emitter, value, &i) {
				return false
			}
			emitter.indention = false
			spaces = false
			breaks = false
		}
	}
	if !yaml_emitter_write_indicator(emitter, []byte{'\''}, false, false, false) {
		return false
	}
	emitter.whitespace = false
	emitter.indention = false
	return true
}

func yaml_emitter_write_double_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool {
	spaces := false
	if !yaml_emitter_write_indicator(emitter, []byte{'"'}, true, false, false) {
		return false
	}

	for i := 0; i < len(value); {
		if !is_printable(value, i) || (!emitter.unicode && !is_ascii(value, i)) ||
			is_bom(value, i) || is_break(value, i) ||
			value[i] == '"' || value[i] == '\\' {

			octet := value[i]

			var w int
			var v rune
			switch {
			case octet&0x80 == 0x00:
				w, v = 1, rune(octet&0x7F)
			case octet&0xE0 == 0xC0:
				w, v = 2, rune(octet&0x1F)
			case octet&0xF0 == 0xE0:
				w, v = 3, rune(octet&0x0F)
			case octet&0xF8 == 0xF0:
				w, v = 4, rune(octet&0x07)
			}
			for k := 1; k < w; k++ {
				octet = value[i+k]
				v = (v << 6) + (rune(octet) & 0x3F)
			}
			i += w

			if !put(emitter, '\\') {
				return false
			}

			var ok bool
			switch v {
			case 0x00:
				ok = put(emitter, '0')
			case 0x07:
				ok = put(emitter, 'a')
			case 0x08:
				ok = put(emitter, 'b')
			case 0x09:
				ok = put(emitter, 't')
			case 0x0A:
				ok = put(emitter, 'n')
			case 0x0b:
				ok = put(emitter, 'v')
			case 0x0c:
				ok = put(emitter, 'f')
			case 0x0d:
				ok = put(emitter, 'r')
			case 0x1b:
				ok = put(emitter, 'e')
			case 0x22:
				ok = put(emitter, '"')
			case 0x5c:
				ok = put(emitter, '\\')
			case 0x85:
				ok = put(emitter, 'N')
			case 0xA0:
				ok = put(emitter, '_')
			case 0x2028:
				ok = put(emitter, 'L')
			case 0x2029:
				ok = put(emitter, 'P')
			default:
				if v <= 0xFF {
					ok = put(emitter, 'x')
					w = 2
				} else if v <= 0xFFFF {
					ok = put(emitter, 'u')
					w = 4
				} else {
					ok = put(emitter, 'U')
					w = 8
				}
				for k := (w - 1) * 4; ok && k >= 0; k -= 4 {
					digit := byte((v >> uint(k)) & 0x0F)
					if digit < 10 {
						ok = put(emitter, digit+'0')
					} else {
						ok = put(emitter, digit+'A'-10)
					}
				}
			}
			if !ok {
				return false
			}
			spaces = false
		} else if is_space(value, i) {
			if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 {
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
				if is_space(value, i+1) {
					if !put(emitter, '\\') {
						return false
					}
				}
				i += width(value[i])
			} else if !write(emitter, value, &i) {
				return false
			}
			spaces = true
		} else {
			if !write(emitter, value, &i) {
				return false
			}
			spaces = false
		}
	}
	if !yaml_emitter_write_indicator(emitter, []byte{'"'}, false, false, false) {
		return false
	}
	emitter.whitespace = false
	emitter.indention = false
	return true
}

func yaml_emitter_write_block_scalar_hints(emitter *yaml_emitter_t, value []byte) bool {
	if is_space(value, 0) || is_break(value, 0) {
		indent_hint := []byte{'0' + byte(emitter.best_indent)}
		if !yaml_emitter_write_indicator(emitter, indent_hint, false, false, false) {
			return false
		}
	}

	emitter.open_ended = false

	var chomp_hint [1]byte
	if len(value) == 0 {
		chomp_hint[0] = '-'
	} else {
		i := len(value) - 1
		for value[i]&0xC0 == 0x80 {
			i--
		}
		if !is_break(value, i) {
			chomp_hint[0] = '-'
		} else if i == 0 {
			chomp_hint[0] = '+'
			emitter.open_ended = true
		} else {
			i--
			for value[i]&0xC0 == 0x80 {
				i--
			}
			if is_break(value, i) {
				chomp_hint[0] = '+'
				emitter.open_ended = true
			}
		}
	}
	if chomp_hint[0] != 0 {
		if !yaml_emitter_write_indicator(emitter, chomp_hint[:], false, false, false) {
			return false
		}
	}
	return true
}

func yaml_emitter_write_literal_scalar(emitter *yaml_emitter_t, value []byte) bool {
	if !yaml_emitter_write_indicator(emitter, []byte{'|'}, true, false, false) {
		return false
	}
	if !yaml_emitter_write_block_scalar_hints(emitter, value) {
		return false
	}
	if !yaml_emitter_process_line_comment(emitter) {
		return false
	}
	//emitter.indention = true
	emitter.whitespace = true
	breaks := true
	for i := 0; i < len(value); {
		if is_break(value, i) {
			if !write_break(emitter, value, &i) {
				return false
			}
			//emitter.indention = true
			breaks = true
		} else {
			if breaks {
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
			}
			if !write(emitter, value, &i) {
				return false
			}
			emitter.indention = false
			breaks = false
		}
	}

	return true
}

func yaml_emitter_write_folded_scalar(emitter *yaml_emitter_t, value []byte) bool {
	if !yaml_emitter_write_indicator(emitter, []byte{'>'}, true, false, false) {
		return false
	}
	if !yaml_emitter_write_block_scalar_hints(emitter, value) {
		return false
	}
	if !yaml_emitter_process_line_comment(emitter) {
		return false
	}

	//emitter.indention = true
	emitter.whitespace = true

	breaks := true
	leading_spaces := true
	for i := 0; i < len(value); {
		if is_break(value, i) {
			if !breaks && !leading_spaces && value[i] == '\n' {
				k := 0
				for is_break(value, k) {
					k += width(value[k])
				}
				if !is_blankz(value, k) {
					if !put_break(emitter) {
						return false
					}
				}
			}
			if !write_break(emitter, value, &i) {
				return false
			}
			//emitter.indention = true
			breaks = true
		} else {
			if breaks {
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
				leading_spaces = is_blank(value, i)
			}
			if !breaks && is_space(value, i) && !is_space(value, i+1) && emitter.column > emitter.best_width {
				if !yaml_emitter_write_indent(emitter) {
					return false
				}
				i += width(value[i])
			} else {
				if !write(emitter, value, &i) {
					return false
				}
			}
			emitter.indention = false
			breaks = false
		}
	}
	return true
}

func yaml_emitter_write_comment(emitter *yaml_emitter_t, comment []byte) bool {
	breaks := false
	pound := false
	for i := 0; i < len(comment); {
		if is_break(comment, i) {
			if !write_break(emitter, comment, &i) {
				return false
			}
			//emitter.indention = true
			breaks = true
			pound = false
		} else {
			if breaks && !yaml_emitter_write_indent(emitter) {
				return false
			}
			if !pound {
				if comment[i] != '#' && (!put(emitter, '#') || !put(emitter, ' ')) {
					return false
				}
				pound = true
			}
			if !write(emitter, comment, &i) {
				return false
			}
			emitter.indention = false
			breaks = false
		}
	}
	if !breaks && !put_break(emitter) {
		return false
	}

	emitter.whitespace = true
	//emitter.indention = true
	return true
}
 0707010000100A000081A4000000000000000000000001645E367C000039C5000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v3/encode.go //
// Copyright (c) 2011-2019 Canonical Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package yaml

import (
	"encoding"
	"fmt"
	"io"
	"reflect"
	"regexp"
	"sort"
	"strconv"
	"strings"
	"time"
	"unicode/utf8"
)

type encoder struct {
	emitter  yaml_emitter_t
	event    yaml_event_t
	out      []byte
	flow     bool
	indent   int
	doneInit bool
}

func newEncoder() *encoder {
	e := &encoder{}
	yaml_emitter_initialize(&e.emitter)
	yaml_emitter_set_output_string(&e.emitter, &e.out)
	yaml_emitter_set_unicode(&e.emitter, true)
	return e
}

func newEncoderWithWriter(w io.Writer) *encoder {
	e := &encoder{}
	yaml_emitter_initialize(&e.emitter)
	yaml_emitter_set_output_writer(&e.emitter, w)
	yaml_emitter_set_unicode(&e.emitter, true)
	return e
}

func (e *encoder) init() {
	if e.doneInit {
		return
	}
	if e.indent == 0 {
		e.indent = 4
	}
	e.emitter.best_indent = e.indent
	yaml_stream_start_event_initialize(&e.event, yaml_UTF8_ENCODING)
	e.emit()
	e.doneInit = true
}

func (e *encoder) finish() {
	e.emitter.open_ended = false
	yaml_stream_end_event_initialize(&e.event)
	e.emit()
}

func (e *encoder) destroy() {
	yaml_emitter_delete(&e.emitter)
}

func (e *encoder) emit() {
	// This will internally delete the e.event value.
	e.must(yaml_emitter_emit(&e.emitter, &e.event))
}

func (e *encoder) must(ok bool) {
	if !ok {
		msg := e.emitter.problem
		if msg == "" {
			msg = "unknown problem generating YAML content"
		}
		failf("%s", msg)
	}
}

func (e *encoder) marshalDoc(tag string, in reflect.Value) {
	e.init()
	var node *Node
	if in.IsValid() {
		node, _ = in.Interface().(*Node)
	}
	if node != nil && node.Kind == DocumentNode {
		e.nodev(in)
	} else {
		yaml_document_start_event_initialize(&e.event, nil, nil, true)
		e.emit()
		e.marshal(tag, in)
		yaml_document_end_event_initialize(&e.event, true)
		e.emit()
	}
}

func (e *encoder) marshal(tag string, in reflect.Value) {
	tag = shortTag(tag)
	if !in.IsValid() || in.Kind() == reflect.Ptr && in.IsNil() {
		e.nilv()
		return
	}
	iface := in.Interface()
	switch value := iface.(type) {
	case *Node:
		e.nodev(in)
		return
	case Node:
		if !in.CanAddr() {
			var n = reflect.New(in.Type()).Elem()
			n.Set(in)
			in = n
		}
		e.nodev(in.Addr())
		return
	case time.Time:
		e.timev(tag, in)
		return
	case *time.Time:
		e.timev(tag, in.Elem())
		return
	case time.Duration:
		e.stringv(tag, reflect.ValueOf(value.String()))
		return
	case Marshaler:
		v, err := value.MarshalYAML()
		if err != nil {
			fail(err)
		}
		if v == nil {
			e.nilv()
			return
		}
		e.marshal(tag, reflect.ValueOf(v))
		return
	case encoding.TextMarshaler:
		text, err := value.MarshalText()
		if err != nil {
			fail(err)
		}
		in = reflect.ValueOf(string(text))
	case nil:
		e.nilv()
		return
	}
	switch in.Kind() {
	case reflect.Interface:
		e.marshal(tag, in.Elem())
	case reflect.Map:
		e.mapv(tag, in)
	case reflect.Ptr:
		e.marshal(tag, in.Elem())
	case reflect.Struct:
		e.structv(tag, in)
	case reflect.Slice, reflect.Array:
		e.slicev(tag, in)
	case reflect.String:
		e.stringv(tag, in)
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		e.intv(tag, in)
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		e.uintv(tag, in)
	case reflect.Float32, reflect.Float64:
		e.floatv(tag, in)
	case reflect.Bool:
		e.boolv(tag, in)
	default:
		panic("cannot marshal type: " + in.Type().String())
	}
}

func (e *encoder) mapv(tag string, in reflect.Value) {
	e.mappingv(tag, func() {
		keys := keyList(in.MapKeys())
		sort.Sort(keys)
		for _, k := range keys {
			e.marshal("", k)
			e.marshal("", in.MapIndex(k))
		}
	})
}

func (e *encoder) fieldByIndex(v reflect.Value, index []int) (field reflect.Value) {
	for _, num := range index {
		for {
			if v.Kind() == reflect.Ptr {
				if v.IsNil() {
					return reflect.Value{}
				}
				v = v.Elem()
				continue
			}
			break
		}
		v = v.Field(num)
	}
	return v
}

func (e *encoder) structv(tag string, in reflect.Value) {
	sinfo, err := getStructInfo(in.Type())
	if err != nil {
		panic(err)
	}
	e.mappingv(tag, func() {
		for _, info := range sinfo.FieldsList {
			var value reflect.Value
			if info.Inline == nil {
				value = in.Field(info.Num)
			} else {
				value = e.fieldByIndex(in, info.Inline)
				if !value.IsValid() {
					continue
				}
			}
			if info.OmitEmpty && isZero(value) {
				continue
			}
			e.marshal("", reflect.ValueOf(info.Key))
			e.flow = info.Flow
			e.marshal("", value)
		}
		if sinfo.InlineMap >= 0 {
			m := in.Field(sinfo.InlineMap)
			if m.Len() > 0 {
				e.flow = false
				keys := keyList(m.MapKeys())
				sort.Sort(keys)
				for _, k := range keys {
					if _, found := sinfo.FieldsMap[k.String()]; found {
						panic(fmt.Sprintf("cannot have key %q in inlined map: conflicts with struct field", k.String()))
					}
					e.marshal("", k)
					e.flow = false
					e.marshal("", m.MapIndex(k))
				}
			}
		}
	})
}

func (e *encoder) mappingv(tag string, f func()) {
	implicit := tag == ""
	style := yaml_BLOCK_MAPPING_STYLE
	if e.flow {
		e.flow = false
		style = yaml_FLOW_MAPPING_STYLE
	}
	yaml_mapping_start_event_initialize(&e.event, nil, []byte(tag), implicit, style)
	e.emit()
	f()
	yaml_mapping_end_event_initialize(&e.event)
	e.emit()
}

func (e *encoder) slicev(tag string, in reflect.Value) {
	implicit := tag == ""
	style := yaml_BLOCK_SEQUENCE_STYLE
	if e.flow {
		e.flow = false
		style = yaml_FLOW_SEQUENCE_STYLE
	}
	e.must(yaml_sequence_start_event_initialize(&e.event, nil, []byte(tag), implicit, style))
	e.emit()
	n := in.Len()
	for i := 0; i < n; i++ {
		e.marshal("", in.Index(i))
	}
	e.must(yaml_sequence_end_event_initialize(&e.event))
	e.emit()
}

// isBase60 returns whether s is in base 60 notation as defined in YAML 1.1.
//
// The base 60 float notation in YAML 1.1 is a terrible idea and is unsupported
// in YAML 1.2 and by this package, but these should be marshalled quoted for
// the time being for compatibility with other parsers.
func isBase60Float(s string) (result bool) {
	// Fast path.
	if s == "" {
		return false
	}
	c := s[0]
	if !(c == '+' || c == '-' || c >= '0' && c <= '9') || strings.IndexByte(s, ':') < 0 {
		return false
	}
	// Do the full match.
	return base60float.MatchString(s)
}

// From http://yaml.org/type/float.html, except the regular expression there
// is bogus. In practice parsers do not enforce the "\.[0-9_]*" suffix.
var base60float = regexp.MustCompile(`^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+(?:\.[0-9_]*)?$`)

// isOldBool returns whether s is bool notation as defined in YAML 1.1.
//
// We continue to force strings that YAML 1.1 would interpret as booleans to be
// rendered as quotes strings so that the marshalled output valid for YAML 1.1
// parsing.
func isOldBool(s string) (result bool) {
	switch s {
	case "y", "Y", "yes", "Yes", "YES", "on", "On", "ON",
		"n", "N", "no", "No", "NO", "off", "Off", "OFF":
		return true
	default:
		return false
	}
}

func (e *encoder) stringv(tag string, in reflect.Value) {
	var style yaml_scalar_style_t
	s := in.String()
	canUsePlain := true
	switch {
	case !utf8.ValidString(s):
		if tag == binaryTag {
			failf("explicitly tagged !!binary data must be base64-encoded")
		}
		if tag != "" {
			failf("cannot marshal invalid UTF-8 data as %s", shortTag(tag))
		}
		// It can't be encoded directly as YAML so use a binary tag
		// and encode it as base64.
		tag = binaryTag
		s = encodeBase64(s)
	case tag == "":
		// Check to see if it would resolve to a specific
		// tag when encoded unquoted. If it doesn't,
		// there's no need to quote it.
		rtag, _ := resolve("", s)
		canUsePlain = rtag == strTag && !(isBase60Float(s) || isOldBool(s))
	}
	// Note: it's possible for user code to emit invalid YAML
	// if they explicitly specify a tag and a string containing
	// text that's incompatible with that tag.
	switch {
	case strings.Contains(s, "\n"):
		if e.flow {
			style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
		} else {
			style = yaml_LITERAL_SCALAR_STYLE
		}
	case canUsePlain:
		style = yaml_PLAIN_SCALAR_STYLE
	default:
		style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
	}
	e.emitScalar(s, "", tag, style, nil, nil, nil, nil)
}

func (e *encoder) boolv(tag string, in reflect.Value) {
	var s string
	if in.Bool() {
		s = "true"
	} else {
		s = "false"
	}
	e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil)
}

func (e *encoder) intv(tag string, in reflect.Value) {
	s := strconv.FormatInt(in.Int(), 10)
	e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil)
}

func (e *encoder) uintv(tag string, in reflect.Value) {
	s := strconv.FormatUint(in.Uint(), 10)
	e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil)
}

func (e *encoder) timev(tag string, in reflect.Value) {
	t := in.Interface().(time.Time)
	s := t.Format(time.RFC3339Nano)
	e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil)
}

func (e *encoder) floatv(tag string, in reflect.Value) {
	// Issue #352: When formatting, use the precision of the underlying value
	precision := 64
	if in.Kind() == reflect.Float32 {
		precision = 32
	}

	s := strconv.FormatFloat(in.Float(), 'g', -1, precision)
	switch s {
	case "+Inf":
		s = ".inf"
	case "-Inf":
		s = "-.inf"
	case "NaN":
		s = ".nan"
	}
	e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil)
}

func (e *encoder) nilv() {
	e.emitScalar("null", "", "", yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil)
}

func (e *encoder) emitScalar(value, anchor, tag string, style yaml_scalar_style_t, head, line, foot, tail []byte) {
	// TODO Kill this function. Replace all initialize calls by their underlining Go literals.
	implicit := tag == ""
	if !implicit {
		tag = longTag(tag)
	}
	e.must(yaml_scalar_event_initialize(&e.event, []byte(anchor), []byte(tag), []byte(value), implicit, implicit, style))
	e.event.head_comment = head
	e.event.line_comment = line
	e.event.foot_comment = foot
	e.event.tail_comment = tail
	e.emit()
}

func (e *encoder) nodev(in reflect.Value) {
	e.node(in.Interface().(*Node), "")
}

func (e *encoder) node(node *Node, tail string) {
	// Zero nodes behave as nil.
	if node.Kind == 0 && node.IsZero() {
		e.nilv()
		return
	}

	// If the tag was not explicitly requested, and dropping it won't change the
	// implicit tag of the value, don't include it in the presentation.
	var tag = node.Tag
	var stag = shortTag(tag)
	var forceQuoting bool
	if tag != "" && node.Style&TaggedStyle == 0 {
		if node.Kind == ScalarNode {
			if stag == strTag && node.Style&(SingleQuotedStyle|DoubleQuotedStyle|LiteralStyle|FoldedStyle) != 0 {
				tag = ""
			} else {
				rtag, _ := resolve("", node.Value)
				if rtag == stag {
					tag = ""
				} else if stag == strTag {
					tag = ""
					forceQuoting = true
				}
			}
		} else {
			var rtag string
			switch node.Kind {
			case MappingNode:
				rtag = mapTag
			case SequenceNode:
				rtag = seqTag
			}
			if rtag == stag {
				tag = ""
			}
		}
	}

	switch node.Kind {
	case DocumentNode:
		yaml_document_start_event_initialize(&e.event, nil, nil, true)
		e.event.head_comment = []byte(node.HeadComment)
		e.emit()
		for _, node := range node.Content {
			e.node(node, "")
		}
		yaml_document_end_event_initialize(&e.event, true)
		e.event.foot_comment = []byte(node.FootComment)
		e.emit()

	case SequenceNode:
		style := yaml_BLOCK_SEQUENCE_STYLE
		if node.Style&FlowStyle != 0 {
			style = yaml_FLOW_SEQUENCE_STYLE
		}
		e.must(yaml_sequence_start_event_initialize(&e.event, []byte(node.Anchor), []byte(longTag(tag)), tag == "", style))
		e.event.head_comment = []byte(node.HeadComment)
		e.emit()
		for _, node := range node.Content {
			e.node(node, "")
		}
		e.must(yaml_sequence_end_event_initialize(&e.event))
		e.event.line_comment = []byte(node.LineComment)
		e.event.foot_comment = []byte(node.FootComment)
		e.emit()

	case MappingNode:
		style := yaml_BLOCK_MAPPING_STYLE
		if node.Style&FlowStyle != 0 {
			style = yaml_FLOW_MAPPING_STYLE
		}
		yaml_mapping_start_event_initialize(&e.event, []byte(node.Anchor), []byte(longTag(tag)), tag == "", style)
		e.event.tail_comment = []byte(tail)
		e.event.head_comment = []byte(node.HeadComment)
		e.emit()

		// The tail logic below moves the foot comment of prior keys to the following key,
		// since the value for each key may be a nested structure and the foot needs to be
		// processed only the entirety of the value is streamed. The last tail is processed
		// with the mapping end event.
		var tail string
		for i := 0; i+1 < len(node.Content); i += 2 {
			k := node.Content[i]
			foot := k.FootComment
			if foot != "" {
				kopy := *k
				kopy.FootComment = ""
				k = &kopy
			}
			e.node(k, tail)
			tail = foot

			v := node.Content[i+1]
			e.node(v, "")
		}

		yaml_mapping_end_event_initialize(&e.event)
		e.event.tail_comment = []byte(tail)
		e.event.line_comment = []byte(node.LineComment)
		e.event.foot_comment = []byte(node.FootComment)
		e.emit()

	case AliasNode:
		yaml_alias_event_initialize(&e.event, []byte(node.Value))
		e.event.head_comment = []byte(node.HeadComment)
		e.event.line_comment = []byte(node.LineComment)
		e.event.foot_comment = []byte(node.FootComment)
		e.emit()

	case ScalarNode:
		value := node.Value
		if !utf8.ValidString(value) {
			if stag == binaryTag {
				failf("explicitly tagged !!binary data must be base64-encoded")
			}
			if stag != "" {
				failf("cannot marshal invalid UTF-8 data as %s", stag)
			}
			// It can't be encoded directly as YAML so use a binary tag
			// and encode it as base64.
			tag = binaryTag
			value = encodeBase64(value)
		}

		style := yaml_PLAIN_SCALAR_STYLE
		switch {
		case node.Style&DoubleQuotedStyle != 0:
			style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
		case node.Style&SingleQuotedStyle != 0:
			style = yaml_SINGLE_QUOTED_SCALAR_STYLE
		case node.Style&LiteralStyle != 0:
			style = yaml_LITERAL_SCALAR_STYLE
		case node.Style&FoldedStyle != 0:
			style = yaml_FOLDED_SCALAR_STYLE
		case strings.Contains(value, "\n"):
			style = yaml_LITERAL_SCALAR_STYLE
		case forceQuoting:
			style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
		}

		e.emitScalar(value, node.Anchor, tag, style, []byte(node.HeadComment), []byte(node.LineComment), []byte(node.FootComment), []byte(tail))
	default:
		failf("cannot encode node with unknown kind %d", node.Kind)
	}
}
   0707010000100B000081A4000000000000000000000001645E367C00009F76000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v3/parserc.go    //
// Copyright (c) 2011-2019 Canonical Ltd
// Copyright (c) 2006-2010 Kirill Simonov
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of
// this software and associated documentation files (the "Software"), to deal in
// the Software without restriction, including without limitation the rights to
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
// of the Software, and to permit persons to whom the Software is furnished to do
// so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.

package yaml

import (
	"bytes"
)

// The parser implements the following grammar:
//
// stream               ::= STREAM-START implicit_document? explicit_document* STREAM-END
// implicit_document    ::= block_node DOCUMENT-END*
// explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
// block_node_or_indentless_sequence    ::=
//                          ALIAS
//                          | properties (block_content | indentless_block_sequence)?
//                          | block_content
//                          | indentless_block_sequence
// block_node           ::= ALIAS
//                          | properties block_content?
//                          | block_content
// flow_node            ::= ALIAS
//                          | properties flow_content?
//                          | flow_content
// properties           ::= TAG ANCHOR? | ANCHOR TAG?
// block_content        ::= block_collection | flow_collection | SCALAR
// flow_content         ::= flow_collection | SCALAR
// block_collection     ::= block_sequence | block_mapping
// flow_collection      ::= flow_sequence | flow_mapping
// block_sequence       ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END
// indentless_sequence  ::= (BLOCK-ENTRY block_node?)+
// block_mapping        ::= BLOCK-MAPPING_START
//                          ((KEY block_node_or_indentless_sequence?)?
//                          (VALUE block_node_or_indentless_sequence?)?)*
//                          BLOCK-END
// flow_sequence        ::= FLOW-SEQUENCE-START
//                          (flow_sequence_entry FLOW-ENTRY)*
//                          flow_sequence_entry?
//                          FLOW-SEQUENCE-END
// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?
// flow_mapping         ::= FLOW-MAPPING-START
//                          (flow_mapping_entry FLOW-ENTRY)*
//                          flow_mapping_entry?
//                          FLOW-MAPPING-END
// flow_mapping_entry   ::= flow_node | KEY flow_node? (VALUE flow_node?)?

// Peek the next token in the token queue.
func peek_token(parser *yaml_parser_t) *yaml_token_t {
	if parser.token_available || yaml_parser_fetch_more_tokens(parser) {
		token := &parser.tokens[parser.tokens_head]
		yaml_parser_unfold_comments(parser, token)
		return token
	}
	return nil
}

// yaml_parser_unfold_comments walks through the comments queue and joins all
// comments behind the position of the provided token into the respective
// top-level comment slices in the parser.
func yaml_parser_unfold_comments(parser *yaml_parser_t, token *yaml_token_t) {
	for parser.comments_head < len(parser.comments) && token.start_mark.index >= parser.comments[parser.comments_head].token_mark.index {
		comment := &parser.comments[parser.comments_head]
		if len(comment.head) > 0 {
			if token.typ == yaml_BLOCK_END_TOKEN {
				// No heads on ends, so keep comment.head for a follow up token.
				break
			}
			if len(parser.head_comment) > 0 {
				parser.head_comment = append(parser.head_comment, '\n')
			}
			parser.head_comment = append(parser.head_comment, comment.head...)
		}
		if len(comment.foot) > 0 {
			if len(parser.foot_comment) > 0 {
				parser.foot_comment = append(parser.foot_comment, '\n')
			}
			parser.foot_comment = append(parser.foot_comment, comment.foot...)
		}
		if len(comment.line) > 0 {
			if len(parser.line_comment) > 0 {
				parser.line_comment = append(parser.line_comment, '\n')
			}
			parser.line_comment = append(parser.line_comment, comment.line...)
		}
		*comment = yaml_comment_t{}
		parser.comments_head++
	}
}

// Remove the next token from the queue (must be called after peek_token).
func skip_token(parser *yaml_parser_t) {
	parser.token_available = false
	parser.tokens_parsed++
	parser.stream_end_produced = parser.tokens[parser.tokens_head].typ == yaml_STREAM_END_TOKEN
	parser.tokens_head++
}

// Get the next event.
func yaml_parser_parse(parser *yaml_parser_t, event *yaml_event_t) bool {
	// Erase the event object.
	*event = yaml_event_t{}

	// No events after the end of the stream or error.
	if parser.stream_end_produced || parser.error != yaml_NO_ERROR || parser.state == yaml_PARSE_END_STATE {
		return true
	}

	// Generate the next event.
	return yaml_parser_state_machine(parser, event)
}

// Set parser error.
func yaml_parser_set_parser_error(parser *yaml_parser_t, problem string, problem_mark yaml_mark_t) bool {
	parser.error = yaml_PARSER_ERROR
	parser.problem = problem
	parser.problem_mark = problem_mark
	return false
}

func yaml_parser_set_parser_error_context(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string, problem_mark yaml_mark_t) bool {
	parser.error = yaml_PARSER_ERROR
	parser.context = context
	parser.context_mark = context_mark
	parser.problem = problem
	parser.problem_mark = problem_mark
	return false
}

// State dispatcher.
func yaml_parser_state_machine(parser *yaml_parser_t, event *yaml_event_t) bool {
	//trace("yaml_parser_state_machine", "state:", parser.state.String())

	switch parser.state {
	case yaml_PARSE_STREAM_START_STATE:
		return yaml_parser_parse_stream_start(parser, event)

	case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE:
		return yaml_parser_parse_document_start(parser, event, true)

	case yaml_PARSE_DOCUMENT_START_STATE:
		return yaml_parser_parse_document_start(parser, event, false)

	case yaml_PARSE_DOCUMENT_CONTENT_STATE:
		return yaml_parser_parse_document_content(parser, event)

	case yaml_PARSE_DOCUMENT_END_STATE:
		return yaml_parser_parse_document_end(parser, event)

	case yaml_PARSE_BLOCK_NODE_STATE:
		return yaml_parser_parse_node(parser, event, true, false)

	case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE:
		return yaml_parser_parse_node(parser, event, true, true)

	case yaml_PARSE_FLOW_NODE_STATE:
		return yaml_parser_parse_node(parser, event, false, false)

	case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE:
		return yaml_parser_parse_block_sequence_entry(parser, event, true)

	case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE:
		return yaml_parser_parse_block_sequence_entry(parser, event, false)

	case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE:
		return yaml_parser_parse_indentless_sequence_entry(parser, event)

	case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE:
		return yaml_parser_parse_block_mapping_key(parser, event, true)

	case yaml_PARSE_BLOCK_MAPPING_KEY_STATE:
		return yaml_parser_parse_block_mapping_key(parser, event, false)

	case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE:
		return yaml_parser_parse_block_mapping_value(parser, event)

	case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE:
		return yaml_parser_parse_flow_sequence_entry(parser, event, true)

	case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE:
		return yaml_parser_parse_flow_sequence_entry(parser, event, false)

	case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE:
		return yaml_parser_parse_flow_sequence_entry_mapping_key(parser, event)

	case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE:
		return yaml_parser_parse_flow_sequence_entry_mapping_value(parser, event)

	case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE:
		return yaml_parser_parse_flow_sequence_entry_mapping_end(parser, event)

	case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE:
		return yaml_parser_parse_flow_mapping_key(parser, event, true)

	case yaml_PARSE_FLOW_MAPPING_KEY_STATE:
		return yaml_parser_parse_flow_mapping_key(parser, event, false)

	case yaml_PARSE_FLOW_MAPPING_VALUE_STATE:
		return yaml_parser_parse_flow_mapping_value(parser, event, false)

	case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE:
		return yaml_parser_parse_flow_mapping_value(parser, event, true)

	default:
		panic("invalid parser state")
	}
}

// Parse the production:
// stream   ::= STREAM-START implicit_document? explicit_document* STREAM-END
//              ************
func yaml_parser_parse_stream_start(parser *yaml_parser_t, event *yaml_event_t) bool {
	token := peek_token(parser)
	if token == nil {
		return false
	}
	if token.typ != yaml_STREAM_START_TOKEN {
		return yaml_parser_set_parser_error(parser, "did not find expected <stream-start>", token.start_mark)
	}
	parser.state = yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE
	*event = yaml_event_t{
		typ:        yaml_STREAM_START_EVENT,
		start_mark: token.start_mark,
		end_mark:   token.end_mark,
		encoding:   token.encoding,
	}
	skip_token(parser)
	return true
}

// Parse the productions:
// implicit_document    ::= block_node DOCUMENT-END*
//                          *
// explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
//                          *************************
func yaml_parser_parse_document_start(parser *yaml_parser_t, event *yaml_event_t, implicit bool) bool {

	token := peek_token(parser)
	if token == nil {
		return false
	}

	// Parse extra document end indicators.
	if !implicit {
		for token.typ == yaml_DOCUMENT_END_TOKEN {
			skip_token(parser)
			token = peek_token(parser)
			if token == nil {
				return false
			}
		}
	}

	if implicit && token.typ != yaml_VERSION_DIRECTIVE_TOKEN &&
		token.typ != yaml_TAG_DIRECTIVE_TOKEN &&
		token.typ != yaml_DOCUMENT_START_TOKEN &&
		token.typ != yaml_STREAM_END_TOKEN {
		// Parse an implicit document.
		if !yaml_parser_process_directives(parser, nil, nil) {
			return false
		}
		parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE)
		parser.state = yaml_PARSE_BLOCK_NODE_STATE

		var head_comment []byte
		if len(parser.head_comment) > 0 {
			// [Go] Scan the header comment backwards, and if an empty line is found, break
			//      the header so the part before the last empty line goes into the
			//      document header, while the bottom of it goes into a follow up event.
			for i := len(parser.head_comment) - 1; i > 0; i-- {
				if parser.head_comment[i] == '\n' {
					if i == len(parser.head_comment)-1 {
						head_comment = parser.head_comment[:i]
						parser.head_comment = parser.head_comment[i+1:]
						break
					} else if parser.head_comment[i-1] == '\n' {
						head_comment = parser.head_comment[:i-1]
						parser.head_comment = parser.head_comment[i+1:]
						break
					}
				}
			}
		}

		*event = yaml_event_t{
			typ:        yaml_DOCUMENT_START_EVENT,
			start_mark: token.start_mark,
			end_mark:   token.end_mark,

			head_comment: head_comment,
		}

	} else if token.typ != yaml_STREAM_END_TOKEN {
		// Parse an explicit document.
		var version_directive *yaml_version_directive_t
		var tag_directives []yaml_tag_directive_t
		start_mark := token.start_mark
		if !yaml_parser_process_directives(parser, &version_directive, &tag_directives) {
			return false
		}
		token = peek_token(parser)
		if token == nil {
			return false
		}
		if token.typ != yaml_DOCUMENT_START_TOKEN {
			yaml_parser_set_parser_error(parser,
				"did not find expected <document start>", token.start_mark)
			return false
		}
		parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE)
		parser.state = yaml_PARSE_DOCUMENT_CONTENT_STATE
		end_mark := token.end_mark

		*event = yaml_event_t{
			typ:               yaml_DOCUMENT_START_EVENT,
			start_mark:        start_mark,
			end_mark:          end_mark,
			version_directive: version_directive,
			tag_directives:    tag_directives,
			implicit:          false,
		}
		skip_token(parser)

	} else {
		// Parse the stream end.
		parser.state = yaml_PARSE_END_STATE
		*event = yaml_event_t{
			typ:        yaml_STREAM_END_EVENT,
			start_mark: token.start_mark,
			end_mark:   token.end_mark,
		}
		skip_token(parser)
	}

	return true
}

// Parse the productions:
// explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
//                                                    ***********
//
func yaml_parser_parse_document_content(parser *yaml_parser_t, event *yaml_event_t) bool {
	token := peek_token(parser)
	if token == nil {
		return false
	}

	if token.typ == yaml_VERSION_DIRECTIVE_TOKEN ||
		token.typ == yaml_TAG_DIRECTIVE_TOKEN ||
		token.typ == yaml_DOCUMENT_START_TOKEN ||
		token.typ == yaml_DOCUMENT_END_TOKEN ||
		token.typ == yaml_STREAM_END_TOKEN {
		parser.state = parser.states[len(parser.states)-1]
		parser.states = parser.states[:len(parser.states)-1]
		return yaml_parser_process_empty_scalar(parser, event,
			token.start_mark)
	}
	return yaml_parser_parse_node(parser, event, true, false)
}

// Parse the productions:
// implicit_document    ::= block_node DOCUMENT-END*
//                                     *************
// explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
//
func yaml_parser_parse_document_end(parser *yaml_parser_t, event *yaml_event_t) bool {
	token := peek_token(parser)
	if token == nil {
		return false
	}

	start_mark := token.start_mark
	end_mark := token.start_mark

	implicit := true
	if token.typ == yaml_DOCUMENT_END_TOKEN {
		end_mark = token.end_mark
		skip_token(parser)
		implicit = false
	}

	parser.tag_directives = parser.tag_directives[:0]

	parser.state = yaml_PARSE_DOCUMENT_START_STATE
	*event = yaml_event_t{
		typ:        yaml_DOCUMENT_END_EVENT,
		start_mark: start_mark,
		end_mark:   end_mark,
		implicit:   implicit,
	}
	yaml_parser_set_event_comments(parser, event)
	if len(event.head_comment) > 0 && len(event.foot_comment) == 0 {
		event.foot_comment = event.head_comment
		event.head_comment = nil
	}
	return true
}

func yaml_parser_set_event_comments(parser *yaml_parser_t, event *yaml_event_t) {
	event.head_comment = parser.head_comment
	event.line_comment = parser.line_comment
	event.foot_comment = parser.foot_comment
	parser.head_comment = nil
	parser.line_comment = nil
	parser.foot_comment = nil
	parser.tail_comment = nil
	parser.stem_comment = nil
}

// Parse the productions:
// block_node_or_indentless_sequence    ::=
//                          ALIAS
//                          *****
//                          | properties (block_content | indentless_block_sequence)?
//                            **********  *
//                          | block_content | indentless_block_sequence
//                            *
// block_node           ::= ALIAS
//                          *****
//                          | properties block_content?
//                            ********** *
//                          | block_content
//                            *
// flow_node            ::= ALIAS
//                          *****
//                          | properties flow_content?
//                            ********** *
//                          | flow_content
//                            *
// properties           ::= TAG ANCHOR? | ANCHOR TAG?
//                          *************************
// block_content        ::= block_collection | flow_collection | SCALAR
//                                                               ******
// flow_content         ::= flow_collection | SCALAR
//                                            ******
func yaml_parser_parse_node(parser *yaml_parser_t, event *yaml_event_t, block, indentless_sequence bool) bool {
	//defer trace("yaml_parser_parse_node", "block:", block, "indentless_sequence:", indentless_sequence)()

	token := peek_token(parser)
	if token == nil {
		return false
	}

	if token.typ == yaml_ALIAS_TOKEN {
		parser.state = parser.states[len(parser.states)-1]
		parser.states = parser.states[:len(parser.states)-1]
		*event = yaml_event_t{
			typ:        yaml_ALIAS_EVENT,
			start_mark: token.start_mark,
			end_mark:   token.end_mark,
			anchor:     token.value,
		}
		yaml_parser_set_event_comments(parser, event)
		skip_token(parser)
		return true
	}

	start_mark := token.start_mark
	end_mark := token.start_mark

	var tag_token bool
	var tag_handle, tag_suffix, anchor []byte
	var tag_mark yaml_mark_t
	if token.typ == yaml_ANCHOR_TOKEN {
		anchor = token.value
		start_mark = token.start_mark
		end_mark = token.end_mark
		skip_token(parser)
		token = peek_token(parser)
		if token == nil {
			return false
		}
		if token.typ == yaml_TAG_TOKEN {
			tag_token = true
			tag_handle = token.value
			tag_suffix = token.suffix
			tag_mark = token.start_mark
			end_mark = token.end_mark
			skip_token(parser)
			token = peek_token(parser)
			if token == nil {
				return false
			}
		}
	} else if token.typ == yaml_TAG_TOKEN {
		tag_token = true
		tag_handle = token.value
		tag_suffix = token.suffix
		start_mark = token.start_mark
		tag_mark = token.start_mark
		end_mark = token.end_mark
		skip_token(parser)
		token = peek_token(parser)
		if token == nil {
			return false
		}
		if token.typ == yaml_ANCHOR_TOKEN {
			anchor = token.value
			end_mark = token.end_mark
			skip_token(parser)
			token = peek_token(parser)
			if token == nil {
				return false
			}
		}
	}

	var tag []byte
	if tag_token {
		if len(tag_handle) == 0 {
			tag = tag_suffix
			tag_suffix = nil
		} else {
			for i := range parser.tag_directives {
				if bytes.Equal(parser.tag_directives[i].handle, tag_handle) {
					tag = append([]byte(nil), parser.tag_directives[i].prefix...)
					tag = append(tag, tag_suffix...)
					break
				}
			}
			if len(tag) == 0 {
				yaml_parser_set_parser_error_context(parser,
					"while parsing a node", start_mark,
					"found undefined tag handle", tag_mark)
				return false
			}
		}
	}

	implicit := len(tag) == 0
	if indentless_sequence && token.typ == yaml_BLOCK_ENTRY_TOKEN {
		end_mark = token.end_mark
		parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE
		*event = yaml_event_t{
			typ:        yaml_SEQUENCE_START_EVENT,
			start_mark: start_mark,
			end_mark:   end_mark,
			anchor:     anchor,
			tag:        tag,
			implicit:   implicit,
			style:      yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE),
		}
		return true
	}
	if token.typ == yaml_SCALAR_TOKEN {
		var plain_implicit, quoted_implicit bool
		end_mark = token.end_mark
		if (len(tag) == 0 && token.style == yaml_PLAIN_SCALAR_STYLE) || (len(tag) == 1 && tag[0] == '!') {
			plain_implicit = true
		} else if len(tag) == 0 {
			quoted_implicit = true
		}
		parser.state = parser.states[len(parser.states)-1]
		parser.states = parser.states[:len(parser.states)-1]

		*event = yaml_event_t{
			typ:             yaml_SCALAR_EVENT,
			start_mark:      start_mark,
			end_mark:        end_mark,
			anchor:          anchor,
			tag:             tag,
			value:           token.value,
			implicit:        plain_implicit,
			quoted_implicit: quoted_implicit,
			style:           yaml_style_t(token.style),
		}
		yaml_parser_set_event_comments(parser, event)
		skip_token(parser)
		return true
	}
	if token.typ == yaml_FLOW_SEQUENCE_START_TOKEN {
		// [Go] Some of the events below can be merged as they differ only on style.
		end_mark = token.end_mark
		parser.state = yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE
		*event = yaml_event_t{
			typ:        yaml_SEQUENCE_START_EVENT,
			start_mark: start_mark,
			end_mark:   end_mark,
			anchor:     anchor,
			tag:        tag,
			implicit:   implicit,
			style:      yaml_style_t(yaml_FLOW_SEQUENCE_STYLE),
		}
		yaml_parser_set_event_comments(parser, event)
		return true
	}
	if token.typ == yaml_FLOW_MAPPING_START_TOKEN {
		end_mark = token.end_mark
		parser.state = yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE
		*event = yaml_event_t{
			typ:        yaml_MAPPING_START_EVENT,
			start_mark: start_mark,
			end_mark:   end_mark,
			anchor:     anchor,
			tag:        tag,
			implicit:   implicit,
			style:      yaml_style_t(yaml_FLOW_MAPPING_STYLE),
		}
		yaml_parser_set_event_comments(parser, event)
		return true
	}
	if block && token.typ == yaml_BLOCK_SEQUENCE_START_TOKEN {
		end_mark = token.end_mark
		parser.state = yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE
		*event = yaml_event_t{
			typ:        yaml_SEQUENCE_START_EVENT,
			start_mark: start_mark,
			end_mark:   end_mark,
			anchor:     anchor,
			tag:        tag,
			implicit:   implicit,
			style:      yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE),
		}
		if parser.stem_comment != nil {
			event.head_comment = parser.stem_comment
			parser.stem_comment = nil
		}
		return true
	}
	if block && token.typ == yaml_BLOCK_MAPPING_START_TOKEN {
		end_mark = token.end_mark
		parser.state = yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE
		*event = yaml_event_t{
			typ:        yaml_MAPPING_START_EVENT,
			start_mark: start_mark,
			end_mark:   end_mark,
			anchor:     anchor,
			tag:        tag,
			implicit:   implicit,
			style:      yaml_style_t(yaml_BLOCK_MAPPING_STYLE),
		}
		if parser.stem_comment != nil {
			event.head_comment = parser.stem_comment
			parser.stem_comment = nil
		}
		return true
	}
	if len(anchor) > 0 || len(tag) > 0 {
		parser.state = parser.states[len(parser.states)-1]
		parser.states = parser.states[:len(parser.states)-1]

		*event = yaml_event_t{
			typ:             yaml_SCALAR_EVENT,
			start_mark:      start_mark,
			end_mark:        end_mark,
			anchor:          anchor,
			tag:             tag,
			implicit:        implicit,
			quoted_implicit: false,
			style:           yaml_style_t(yaml_PLAIN_SCALAR_STYLE),
		}
		return true
	}

	context := "while parsing a flow node"
	if block {
		context = "while parsing a block node"
	}
	yaml_parser_set_parser_error_context(parser, context, start_mark,
		"did not find expected node content", token.start_mark)
	return false
}

// Parse the productions:
// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END
//                    ********************  *********** *             *********
//
func yaml_parser_parse_block_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {
	if first {
		token := peek_token(parser)
		if token == nil {
			return false
		}
		parser.marks = append(parser.marks, token.start_mark)
		skip_token(parser)
	}

	token := peek_token(parser)
	if token == nil {
		return false
	}

	if token.typ == yaml_BLOCK_ENTRY_TOKEN {
		mark := token.end_mark
		prior_head_len := len(parser.head_comment)
		skip_token(parser)
		yaml_parser_split_stem_comment(parser, prior_head_len)
		token = peek_token(parser)
		if token == nil {
			return false
		}
		if token.typ != yaml_BLOCK_ENTRY_TOKEN && token.typ != yaml_BLOCK_END_TOKEN {
			parser.states = append(parser.states, yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE)
			return yaml_parser_parse_node(parser, event, true, false)
		} else {
			parser.state = yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE
			return yaml_parser_process_empty_scalar(parser, event, mark)
		}
	}
	if token.typ == yaml_BLOCK_END_TOKEN {
		parser.state = parser.states[len(parser.states)-1]
		parser.states = parser.states[:len(parser.states)-1]
		parser.marks = parser.marks[:len(parser.marks)-1]

		*event = yaml_event_t{
			typ:        yaml_SEQUENCE_END_EVENT,
			start_mark: token.start_mark,
			end_mark:   token.end_mark,
		}

		skip_token(parser)
		return true
	}

	context_mark := parser.marks[len(parser.marks)-1]
	parser.marks = parser.marks[:len(parser.marks)-1]
	return yaml_parser_set_parser_error_context(parser,
		"while parsing a block collection", context_mark,
		"did not find expected '-' indicator", token.start_mark)
}

// Parse the productions:
// indentless_sequence  ::= (BLOCK-ENTRY block_node?)+
//                           *********** *
func yaml_parser_parse_indentless_sequence_entry(parser *yaml_parser_t, event *yaml_event_t) bool {
	token := peek_token(parser)
	if token == nil {
		return false
	}

	if token.typ == yaml_BLOCK_ENTRY_TOKEN {
		mark := token.end_mark
		prior_head_len := len(parser.head_comment)
		skip_token(parser)
		yaml_parser_split_stem_comment(parser, prior_head_len)
		token = peek_token(parser)
		if token == nil {
			return false
		}
		if token.typ != yaml_BLOCK_ENTRY_TOKEN &&
			token.typ != yaml_KEY_TOKEN &&
			token.typ != yaml_VALUE_TOKEN &&
			token.typ != yaml_BLOCK_END_TOKEN {
			parser.states = append(parser.states, yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE)
			return yaml_parser_parse_node(parser, event, true, false)
		}
		parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE
		return yaml_parser_process_empty_scalar(parser, event, mark)
	}
	parser.state = parser.states[len(parser.states)-1]
	parser.states = parser.states[:len(parser.states)-1]

	*event = yaml_event_t{
		typ:        yaml_SEQUENCE_END_EVENT,
		start_mark: token.start_mark,
		end_mark:   token.start_mark, // [Go] Shouldn't this be token.end_mark?
	}
	return true
}

// Split stem comment from head comment.
//
// When a sequence or map is found under a sequence entry, the former head comment
// is assigned to the underlying sequence or map as a whole, not the individual
// sequence or map entry as would be expected otherwise. To handle this case the
// previous head comment is moved aside as the stem comment.
func yaml_parser_split_stem_comment(parser *yaml_parser_t, stem_len int) {
	if stem_len == 0 {
		return
	}

	token := peek_token(parser)
	if token == nil || token.typ != yaml_BLOCK_SEQUENCE_START_TOKEN && token.typ != yaml_BLOCK_MAPPING_START_TOKEN {
		return
	}

	parser.stem_comment = parser.head_comment[:stem_len]
	if len(parser.head_comment) == stem_len {
		parser.head_comment = nil
	} else {
		// Copy suffix to prevent very strange bugs if someone ever appends
		// further bytes to the prefix in the stem_comment slice above.
		parser.head_comment = append([]byte(nil), parser.head_comment[stem_len+1:]...)
	}
}

// Parse the productions:
// block_mapping        ::= BLOCK-MAPPING_START
//                          *******************
//                          ((KEY block_node_or_indentless_sequence?)?
//                            *** *
//                          (VALUE block_node_or_indentless_sequence?)?)*
//
//                          BLOCK-END
//                          *********
//
func yaml_parser_parse_block_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {
	if first {
		token := peek_token(parser)
		if token == nil {
			return false
		}
		parser.marks = append(parser.marks, token.start_mark)
		skip_token(parser)
	}

	token := peek_token(parser)
	if token == nil {
		return false
	}

	// [Go] A tail comment was left from the prior mapping value processed. Emit an event
	//      as it needs to be processed with that value and not the following key.
	if len(parser.tail_comment) > 0 {
		*event = yaml_event_t{
			typ:          yaml_TAIL_COMMENT_EVENT,
			start_mark:   token.start_mark,
			end_mark:     token.end_mark,
			foot_comment: parser.tail_comment,
		}
		parser.tail_comment = nil
		return true
	}

	if token.typ == yaml_KEY_TOKEN {
		mark := token.end_mark
		skip_token(parser)
		token = peek_token(parser)
		if token == nil {
			return false
		}
		if token.typ != yaml_KEY_TOKEN &&
			token.typ != yaml_VALUE_TOKEN &&
			token.typ != yaml_BLOCK_END_TOKEN {
			parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_VALUE_STATE)
			return yaml_parser_parse_node(parser, event, true, true)
		} else {
			parser.state = yaml_PARSE_BLOCK_MAPPING_VALUE_STATE
			return yaml_parser_process_empty_scalar(parser, event, mark)
		}
	} else if token.typ == yaml_BLOCK_END_TOKEN {
		parser.state = parser.states[len(parser.states)-1]
		parser.states = parser.states[:len(parser.states)-1]
		parser.marks = parser.marks[:len(parser.marks)-1]
		*event = yaml_event_t{
			typ:        yaml_MAPPING_END_EVENT,
			start_mark: token.start_mark,
			end_mark:   token.end_mark,
		}
		yaml_parser_set_event_comments(parser, event)
		skip_token(parser)
		return true
	}

	context_mark := parser.marks[len(parser.marks)-1]
	parser.marks = parser.marks[:len(parser.marks)-1]
	return yaml_parser_set_parser_error_context(parser,
		"while parsing a block mapping", context_mark,
		"did not find expected key", token.start_mark)
}

// Parse the productions:
// block_mapping        ::= BLOCK-MAPPING_START
//
//                          ((KEY block_node_or_indentless_sequence?)?
//
//                          (VALUE block_node_or_indentless_sequence?)?)*
//                           ***** *
//                          BLOCK-END
//
//
func yaml_parser_parse_block_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool {
	token := peek_token(parser)
	if token == nil {
		return false
	}
	if token.typ == yaml_VALUE_TOKEN {
		mark := token.end_mark
		skip_token(parser)
		token = peek_token(parser)
		if token == nil {
			return false
		}
		if token.typ != yaml_KEY_TOKEN &&
			token.typ != yaml_VALUE_TOKEN &&
			token.typ != yaml_BLOCK_END_TOKEN {
			parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_KEY_STATE)
			return yaml_parser_parse_node(parser, event, true, true)
		}
		parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE
		return yaml_parser_process_empty_scalar(parser, event, mark)
	}
	parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE
	return yaml_parser_process_empty_scalar(parser, event, token.start_mark)
}

// Parse the productions:
// flow_sequence        ::= FLOW-SEQUENCE-START
//                          *******************
//                          (flow_sequence_entry FLOW-ENTRY)*
//                           *                   **********
//                          flow_sequence_entry?
//                          *
//                          FLOW-SEQUENCE-END
//                          *****************
// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?
//                          *
//
func yaml_parser_parse_flow_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {
	if first {
		token := peek_token(parser)
		if token == nil {
			return false
		}
		parser.marks = append(parser.marks, token.start_mark)
		skip_token(parser)
	}
	token := peek_token(parser)
	if token == nil {
		return false
	}
	if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {
		if !first {
			if token.typ == yaml_FLOW_ENTRY_TOKEN {
				skip_token(parser)
				token = peek_token(parser)
				if token == nil {
					return false
				}
			} else {
				context_mark := parser.marks[len(parser.marks)-1]
				parser.marks = parser.marks[:len(parser.marks)-1]
				return yaml_parser_set_parser_error_context(parser,
					"while parsing a flow sequence", context_mark,
					"did not find expected ',' or ']'", token.start_mark)
			}
		}

		if token.typ == yaml_KEY_TOKEN {
			parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE
			*event = yaml_event_t{
				typ:        yaml_MAPPING_START_EVENT,
				start_mark: token.start_mark,
				end_mark:   token.end_mark,
				implicit:   true,
				style:      yaml_style_t(yaml_FLOW_MAPPING_STYLE),
			}
			skip_token(parser)
			return true
		} else if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {
			parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE)
			return yaml_parser_parse_node(parser, event, false, false)
		}
	}

	parser.state = parser.states[len(parser.states)-1]
	parser.states = parser.states[:len(parser.states)-1]
	parser.marks = parser.marks[:len(parser.marks)-1]

	*event = yaml_event_t{
		typ:        yaml_SEQUENCE_END_EVENT,
		start_mark: token.start_mark,
		end_mark:   token.end_mark,
	}
	yaml_parser_set_event_comments(parser, event)

	skip_token(parser)
	return true
}

//
// Parse the productions:
// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?
//                                      *** *
//
func yaml_parser_parse_flow_sequence_entry_mapping_key(parser *yaml_parser_t, event *yaml_event_t) bool {
	token := peek_token(parser)
	if token == nil {
		return false
	}
	if token.typ != yaml_VALUE_TOKEN &&
		token.typ != yaml_FLOW_ENTRY_TOKEN &&
		token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {
		parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE)
		return yaml_parser_parse_node(parser, event, false, false)
	}
	mark := token.end_mark
	skip_token(parser)
	parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE
	return yaml_parser_process_empty_scalar(parser, event, mark)
}

// Parse the productions:
// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?
//                                                      ***** *
//
func yaml_parser_parse_flow_sequence_entry_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool {
	token := peek_token(parser)
	if token == nil {
		return false
	}
	if token.typ == yaml_VALUE_TOKEN {
		skip_token(parser)
		token := peek_token(parser)
		if token == nil {
			return false
		}
		if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {
			parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE)
			return yaml_parser_parse_node(parser, event, false, false)
		}
	}
	parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE
	return yaml_parser_process_empty_scalar(parser, event, token.start_mark)
}

// Parse the productions:
// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?
//                                                                      *
//
func yaml_parser_parse_flow_sequence_entry_mapping_end(parser *yaml_parser_t, event *yaml_event_t) bool {
	token := peek_token(parser)
	if token == nil {
		return false
	}
	parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE
	*event = yaml_event_t{
		typ:        yaml_MAPPING_END_EVENT,
		start_mark: token.start_mark,
		end_mark:   token.start_mark, // [Go] Shouldn't this be end_mark?
	}
	return true
}

// Parse the productions:
// flow_mapping         ::= FLOW-MAPPING-START
//                          ******************
//                          (flow_mapping_entry FLOW-ENTRY)*
//                           *                  **********
//                          flow_mapping_entry?
//                          ******************
//                          FLOW-MAPPING-END
//                          ****************
// flow_mapping_entry   ::= flow_node | KEY flow_node? (VALUE flow_node?)?
//                          *           *** *
//
func yaml_parser_parse_flow_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {
	if first {
		token := peek_token(parser)
		parser.marks = append(parser.marks, token.start_mark)
		skip_token(parser)
	}

	token := peek_token(parser)
	if token == nil {
		return false
	}

	if token.typ != yaml_FLOW_MAPPING_END_TOKEN {
		if !first {
			if token.typ == yaml_FLOW_ENTRY_TOKEN {
				skip_token(parser)
				token = peek_token(parser)
				if token == nil {
					return false
				}
			} else {
				context_mark := parser.marks[len(parser.marks)-1]
				parser.marks = parser.marks[:len(parser.marks)-1]
				return yaml_parser_set_parser_error_context(parser,
					"while parsing a flow mapping", context_mark,
					"did not find expected ',' or '}'", token.start_mark)
			}
		}

		if token.typ == yaml_KEY_TOKEN {
			skip_token(parser)
			token = peek_token(parser)
			if token == nil {
				return false
			}
			if token.typ != yaml_VALUE_TOKEN &&
				token.typ != yaml_FLOW_ENTRY_TOKEN &&
				token.typ != yaml_FLOW_MAPPING_END_TOKEN {
				parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_VALUE_STATE)
				return yaml_parser_parse_node(parser, event, false, false)
			} else {
				parser.state = yaml_PARSE_FLOW_MAPPING_VALUE_STATE
				return yaml_parser_process_empty_scalar(parser, event, token.start_mark)
			}
		} else if token.typ != yaml_FLOW_MAPPING_END_TOKEN {
			parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE)
			return yaml_parser_parse_node(parser, event, false, false)
		}
	}

	parser.state = parser.states[len(parser.states)-1]
	parser.states = parser.states[:len(parser.states)-1]
	parser.marks = parser.marks[:len(parser.marks)-1]
	*event = yaml_event_t{
		typ:        yaml_MAPPING_END_EVENT,
		start_mark: token.start_mark,
		end_mark:   token.end_mark,
	}
	yaml_parser_set_event_comments(parser, event)
	skip_token(parser)
	return true
}

// Parse the productions:
// flow_mapping_entry   ::= flow_node | KEY flow_node? (VALUE flow_node?)?
//                                   *                  ***** *
//
func yaml_parser_parse_flow_mapping_value(parser *yaml_parser_t, event *yaml_event_t, empty bool) bool {
	token := peek_token(parser)
	if token == nil {
		return false
	}
	if empty {
		parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE
		return yaml_parser_process_empty_scalar(parser, event, token.start_mark)
	}
	if token.typ == yaml_VALUE_TOKEN {
		skip_token(parser)
		token = peek_token(parser)
		if token == nil {
			return false
		}
		if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_MAPPING_END_TOKEN {
			parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_KEY_STATE)
			return yaml_parser_parse_node(parser, event, false, false)
		}
	}
	parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE
	return yaml_parser_process_empty_scalar(parser, event, token.start_mark)
}

// Generate an empty scalar event.
func yaml_parser_process_empty_scalar(parser *yaml_parser_t, event *yaml_event_t, mark yaml_mark_t) bool {
	*event = yaml_event_t{
		typ:        yaml_SCALAR_EVENT,
		start_mark: mark,
		end_mark:   mark,
		value:      nil, // Empty
		implicit:   true,
		style:      yaml_style_t(yaml_PLAIN_SCALAR_STYLE),
	}
	return true
}

var default_tag_directives = []yaml_tag_directive_t{
	{[]byte("!"), []byte("!")},
	{[]byte("!!"), []byte("tag:yaml.org,2002:")},
}

// Parse directives.
func yaml_parser_process_directives(parser *yaml_parser_t,
	version_directive_ref **yaml_version_directive_t,
	tag_directives_ref *[]yaml_tag_directive_t) bool {

	var version_directive *yaml_version_directive_t
	var tag_directives []yaml_tag_directive_t

	token := peek_token(parser)
	if token == nil {
		return false
	}

	for token.typ == yaml_VERSION_DIRECTIVE_TOKEN || token.typ == yaml_TAG_DIRECTIVE_TOKEN {
		if token.typ == yaml_VERSION_DIRECTIVE_TOKEN {
			if version_directive != nil {
				yaml_parser_set_parser_error(parser,
					"found duplicate %YAML directive", token.start_mark)
				return false
			}
			if token.major != 1 || token.minor != 1 {
				yaml_parser_set_parser_error(parser,
					"found incompatible YAML document", token.start_mark)
				return false
			}
			version_directive = &yaml_version_directive_t{
				major: token.major,
				minor: token.minor,
			}
		} else if token.typ == yaml_TAG_DIRECTIVE_TOKEN {
			value := yaml_tag_directive_t{
				handle: token.value,
				prefix: token.prefix,
			}
			if !yaml_parser_append_tag_directive(parser, value, false, token.start_mark) {
				return false
			}
			tag_directives = append(tag_directives, value)
		}

		skip_token(parser)
		token = peek_token(parser)
		if token == nil {
			return false
		}
	}

	for i := range default_tag_directives {
		if !yaml_parser_append_tag_directive(parser, default_tag_directives[i], true, token.start_mark) {
			return false
		}
	}

	if version_directive_ref != nil {
		*version_directive_ref = version_directive
	}
	if tag_directives_ref != nil {
		*tag_directives_ref = tag_directives
	}
	return true
}

// Append a tag directive to the directives stack.
func yaml_parser_append_tag_directive(parser *yaml_parser_t, value yaml_tag_directive_t, allow_duplicates bool, mark yaml_mark_t) bool {
	for i := range parser.tag_directives {
		if bytes.Equal(value.handle, parser.tag_directives[i].handle) {
			if allow_duplicates {
				return true
			}
			return yaml_parser_set_parser_error(parser, "found duplicate %TAG directive", mark)
		}
	}

	// [Go] I suspect the copy is unnecessary. This was likely done
	// because there was no way to track ownership of the data.
	value_copy := yaml_tag_directive_t{
		handle: make([]byte, len(value.handle)),
		prefix: make([]byte, len(value.prefix)),
	}
	copy(value_copy.handle, value.handle)
	copy(value_copy.prefix, value.prefix)
	parser.tag_directives = append(parser.tag_directives, value_copy)
	return true
}
  0707010000100C000081A4000000000000000000000001645E367C00003709000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v3/readerc.go    // 
// Copyright (c) 2011-2019 Canonical Ltd
// Copyright (c) 2006-2010 Kirill Simonov
// 
// Permission is hereby granted, free of charge, to any person obtaining a copy of
// this software and associated documentation files (the "Software"), to deal in
// the Software without restriction, including without limitation the rights to
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
// of the Software, and to permit persons to whom the Software is furnished to do
// so, subject to the following conditions:
// 
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// 
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.

package yaml

import (
	"io"
)

// Set the reader error and return 0.
func yaml_parser_set_reader_error(parser *yaml_parser_t, problem string, offset int, value int) bool {
	parser.error = yaml_READER_ERROR
	parser.problem = problem
	parser.problem_offset = offset
	parser.problem_value = value
	return false
}

// Byte order marks.
const (
	bom_UTF8    = "\xef\xbb\xbf"
	bom_UTF16LE = "\xff\xfe"
	bom_UTF16BE = "\xfe\xff"
)

// Determine the input stream encoding by checking the BOM symbol. If no BOM is
// found, the UTF-8 encoding is assumed. Return 1 on success, 0 on failure.
func yaml_parser_determine_encoding(parser *yaml_parser_t) bool {
	// Ensure that we had enough bytes in the raw buffer.
	for !parser.eof && len(parser.raw_buffer)-parser.raw_buffer_pos < 3 {
		if !yaml_parser_update_raw_buffer(parser) {
			return false
		}
	}

	// Determine the encoding.
	buf := parser.raw_buffer
	pos := parser.raw_buffer_pos
	avail := len(buf) - pos
	if avail >= 2 && buf[pos] == bom_UTF16LE[0] && buf[pos+1] == bom_UTF16LE[1] {
		parser.encoding = yaml_UTF16LE_ENCODING
		parser.raw_buffer_pos += 2
		parser.offset += 2
	} else if avail >= 2 && buf[pos] == bom_UTF16BE[0] && buf[pos+1] == bom_UTF16BE[1] {
		parser.encoding = yaml_UTF16BE_ENCODING
		parser.raw_buffer_pos += 2
		parser.offset += 2
	} else if avail >= 3 && buf[pos] == bom_UTF8[0] && buf[pos+1] == bom_UTF8[1] && buf[pos+2] == bom_UTF8[2] {
		parser.encoding = yaml_UTF8_ENCODING
		parser.raw_buffer_pos += 3
		parser.offset += 3
	} else {
		parser.encoding = yaml_UTF8_ENCODING
	}
	return true
}

// Update the raw buffer.
func yaml_parser_update_raw_buffer(parser *yaml_parser_t) bool {
	size_read := 0

	// Return if the raw buffer is full.
	if parser.raw_buffer_pos == 0 && len(parser.raw_buffer) == cap(parser.raw_buffer) {
		return true
	}

	// Return on EOF.
	if parser.eof {
		return true
	}

	// Move the remaining bytes in the raw buffer to the beginning.
	if parser.raw_buffer_pos > 0 && parser.raw_buffer_pos < len(parser.raw_buffer) {
		copy(parser.raw_buffer, parser.raw_buffer[parser.raw_buffer_pos:])
	}
	parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)-parser.raw_buffer_pos]
	parser.raw_buffer_pos = 0

	// Call the read handler to fill the buffer.
	size_read, err := parser.read_handler(parser, parser.raw_buffer[len(parser.raw_buffer):cap(parser.raw_buffer)])
	parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)+size_read]
	if err == io.EOF {
		parser.eof = true
	} else if err != nil {
		return yaml_parser_set_reader_error(parser, "input error: "+err.Error(), parser.offset, -1)
	}
	return true
}

// Ensure that the buffer contains at least `length` characters.
// Return true on success, false on failure.
//
// The length is supposed to be significantly less that the buffer size.
func yaml_parser_update_buffer(parser *yaml_parser_t, length int) bool {
	if parser.read_handler == nil {
		panic("read handler must be set")
	}

	// [Go] This function was changed to guarantee the requested length size at EOF.
	// The fact we need to do this is pretty awful, but the description above implies
	// for that to be the case, and there are tests

	// If the EOF flag is set and the raw buffer is empty, do nothing.
	if parser.eof && parser.raw_buffer_pos == len(parser.raw_buffer) {
		// [Go] ACTUALLY! Read the documentation of this function above.
		// This is just broken. To return true, we need to have the
		// given length in the buffer. Not doing that means every single
		// check that calls this function to make sure the buffer has a
		// given length is Go) panicking; or C) accessing invalid memory.
		//return true
	}

	// Return if the buffer contains enough characters.
	if parser.unread >= length {
		return true
	}

	// Determine the input encoding if it is not known yet.
	if parser.encoding == yaml_ANY_ENCODING {
		if !yaml_parser_determine_encoding(parser) {
			return false
		}
	}

	// Move the unread characters to the beginning of the buffer.
	buffer_len := len(parser.buffer)
	if parser.buffer_pos > 0 && parser.buffer_pos < buffer_len {
		copy(parser.buffer, parser.buffer[parser.buffer_pos:])
		buffer_len -= parser.buffer_pos
		parser.buffer_pos = 0
	} else if parser.buffer_pos == buffer_len {
		buffer_len = 0
		parser.buffer_pos = 0
	}

	// Open the whole buffer for writing, and cut it before returning.
	parser.buffer = parser.buffer[:cap(parser.buffer)]

	// Fill the buffer until it has enough characters.
	first := true
	for parser.unread < length {

		// Fill the raw buffer if necessary.
		if !first || parser.raw_buffer_pos == len(parser.raw_buffer) {
			if !yaml_parser_update_raw_buffer(parser) {
				parser.buffer = parser.buffer[:buffer_len]
				return false
			}
		}
		first = false

		// Decode the raw buffer.
	inner:
		for parser.raw_buffer_pos != len(parser.raw_buffer) {
			var value rune
			var width int

			raw_unread := len(parser.raw_buffer) - parser.raw_buffer_pos

			// Decode the next character.
			switch parser.encoding {
			case yaml_UTF8_ENCODING:
				// Decode a UTF-8 character.  Check RFC 3629
				// (http://www.ietf.org/rfc/rfc3629.txt) for more details.
				//
				// The following table (taken from the RFC) is used for
				// decoding.
				//
				//    Char. number range |        UTF-8 octet sequence
				//      (hexadecimal)    |              (binary)
				//   --------------------+------------------------------------
				//   0000 0000-0000 007F | 0xxxxxxx
				//   0000 0080-0000 07FF | 110xxxxx 10xxxxxx
				//   0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
				//   0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
				//
				// Additionally, the characters in the range 0xD800-0xDFFF
				// are prohibited as they are reserved for use with UTF-16
				// surrogate pairs.

				// Determine the length of the UTF-8 sequence.
				octet := parser.raw_buffer[parser.raw_buffer_pos]
				switch {
				case octet&0x80 == 0x00:
					width = 1
				case octet&0xE0 == 0xC0:
					width = 2
				case octet&0xF0 == 0xE0:
					width = 3
				case octet&0xF8 == 0xF0:
					width = 4
				default:
					// The leading octet is invalid.
					return yaml_parser_set_reader_error(parser,
						"invalid leading UTF-8 octet",
						parser.offset, int(octet))
				}

				// Check if the raw buffer contains an incomplete character.
				if width > raw_unread {
					if parser.eof {
						return yaml_parser_set_reader_error(parser,
							"incomplete UTF-8 octet sequence",
							parser.offset, -1)
					}
					break inner
				}

				// Decode the leading octet.
				switch {
				case octet&0x80 == 0x00:
					value = rune(octet & 0x7F)
				case octet&0xE0 == 0xC0:
					value = rune(octet & 0x1F)
				case octet&0xF0 == 0xE0:
					value = rune(octet & 0x0F)
				case octet&0xF8 == 0xF0:
					value = rune(octet & 0x07)
				default:
					value = 0
				}

				// Check and decode the trailing octets.
				for k := 1; k < width; k++ {
					octet = parser.raw_buffer[parser.raw_buffer_pos+k]

					// Check if the octet is valid.
					if (octet & 0xC0) != 0x80 {
						return yaml_parser_set_reader_error(parser,
							"invalid trailing UTF-8 octet",
							parser.offset+k, int(octet))
					}

					// Decode the octet.
					value = (value << 6) + rune(octet&0x3F)
				}

				// Check the length of the sequence against the value.
				switch {
				case width == 1:
				case width == 2 && value >= 0x80:
				case width == 3 && value >= 0x800:
				case width == 4 && value >= 0x10000:
				default:
					return yaml_parser_set_reader_error(parser,
						"invalid length of a UTF-8 sequence",
						parser.offset, -1)
				}

				// Check the range of the value.
				if value >= 0xD800 && value <= 0xDFFF || value > 0x10FFFF {
					return yaml_parser_set_reader_error(parser,
						"invalid Unicode character",
						parser.offset, int(value))
				}

			case yaml_UTF16LE_ENCODING, yaml_UTF16BE_ENCODING:
				var low, high int
				if parser.encoding == yaml_UTF16LE_ENCODING {
					low, high = 0, 1
				} else {
					low, high = 1, 0
				}

				// The UTF-16 encoding is not as simple as one might
				// naively think.  Check RFC 2781
				// (http://www.ietf.org/rfc/rfc2781.txt).
				//
				// Normally, two subsequent bytes describe a Unicode
				// character.  However a special technique (called a
				// surrogate pair) is used for specifying character
				// values larger than 0xFFFF.
				//
				// A surrogate pair consists of two pseudo-characters:
				//      high surrogate area (0xD800-0xDBFF)
				//      low surrogate area (0xDC00-0xDFFF)
				//
				// The following formulas are used for decoding
				// and encoding characters using surrogate pairs:
				//
				//  U  = U' + 0x10000   (0x01 00 00 <= U <= 0x10 FF FF)
				//  U' = yyyyyyyyyyxxxxxxxxxx   (0 <= U' <= 0x0F FF FF)
				//  W1 = 110110yyyyyyyyyy
				//  W2 = 110111xxxxxxxxxx
				//
				// where U is the character value, W1 is the high surrogate
				// area, W2 is the low surrogate area.

				// Check for incomplete UTF-16 character.
				if raw_unread < 2 {
					if parser.eof {
						return yaml_parser_set_reader_error(parser,
							"incomplete UTF-16 character",
							parser.offset, -1)
					}
					break inner
				}

				// Get the character.
				value = rune(parser.raw_buffer[parser.raw_buffer_pos+low]) +
					(rune(parser.raw_buffer[parser.raw_buffer_pos+high]) << 8)

				// Check for unexpected low surrogate area.
				if value&0xFC00 == 0xDC00 {
					return yaml_parser_set_reader_error(parser,
						"unexpected low surrogate area",
						parser.offset, int(value))
				}

				// Check for a high surrogate area.
				if value&0xFC00 == 0xD800 {
					width = 4

					// Check for incomplete surrogate pair.
					if raw_unread < 4 {
						if parser.eof {
							return yaml_parser_set_reader_error(parser,
								"incomplete UTF-16 surrogate pair",
								parser.offset, -1)
						}
						break inner
					}

					// Get the next character.
					value2 := rune(parser.raw_buffer[parser.raw_buffer_pos+low+2]) +
						(rune(parser.raw_buffer[parser.raw_buffer_pos+high+2]) << 8)

					// Check for a low surrogate area.
					if value2&0xFC00 != 0xDC00 {
						return yaml_parser_set_reader_error(parser,
							"expected low surrogate area",
							parser.offset+2, int(value2))
					}

					// Generate the value of the surrogate pair.
					value = 0x10000 + ((value & 0x3FF) << 10) + (value2 & 0x3FF)
				} else {
					width = 2
				}

			default:
				panic("impossible")
			}

			// Check if the character is in the allowed range:
			//      #x9 | #xA | #xD | [#x20-#x7E]               (8 bit)
			//      | #x85 | [#xA0-#xD7FF] | [#xE000-#xFFFD]    (16 bit)
			//      | [#x10000-#x10FFFF]                        (32 bit)
			switch {
			case value == 0x09:
			case value == 0x0A:
			case value == 0x0D:
			case value >= 0x20 && value <= 0x7E:
			case value == 0x85:
			case value >= 0xA0 && value <= 0xD7FF:
			case value >= 0xE000 && value <= 0xFFFD:
			case value >= 0x10000 && value <= 0x10FFFF:
			default:
				return yaml_parser_set_reader_error(parser,
					"control characters are not allowed",
					parser.offset, int(value))
			}

			// Move the raw pointers.
			parser.raw_buffer_pos += width
			parser.offset += width

			// Finally put the character into the buffer.
			if value <= 0x7F {
				// 0000 0000-0000 007F . 0xxxxxxx
				parser.buffer[buffer_len+0] = byte(value)
				buffer_len += 1
			} else if value <= 0x7FF {
				// 0000 0080-0000 07FF . 110xxxxx 10xxxxxx
				parser.buffer[buffer_len+0] = byte(0xC0 + (value >> 6))
				parser.buffer[buffer_len+1] = byte(0x80 + (value & 0x3F))
				buffer_len += 2
			} else if value <= 0xFFFF {
				// 0000 0800-0000 FFFF . 1110xxxx 10xxxxxx 10xxxxxx
				parser.buffer[buffer_len+0] = byte(0xE0 + (value >> 12))
				parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 6) & 0x3F))
				parser.buffer[buffer_len+2] = byte(0x80 + (value & 0x3F))
				buffer_len += 3
			} else {
				// 0001 0000-0010 FFFF . 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
				parser.buffer[buffer_len+0] = byte(0xF0 + (value >> 18))
				parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 12) & 0x3F))
				parser.buffer[buffer_len+2] = byte(0x80 + ((value >> 6) & 0x3F))
				parser.buffer[buffer_len+3] = byte(0x80 + (value & 0x3F))
				buffer_len += 4
			}

			parser.unread++
		}

		// On EOF, put NUL into the buffer and return.
		if parser.eof {
			parser.buffer[buffer_len] = 0
			buffer_len++
			parser.unread++
			break
		}
	}
	// [Go] Read the documentation of this function above. To return true,
	// we need to have the given length in the buffer. Not doing that means
	// every single check that calls this function to make sure the buffer
	// has a given length is Go) panicking; or C) accessing invalid memory.
	// This happens here due to the EOF above breaking early.
	for buffer_len < length {
		parser.buffer[buffer_len] = 0
		buffer_len++
	}
	parser.buffer = parser.buffer[:buffer_len]
	return true
}
   0707010000100D000081A4000000000000000000000001645E367C00002142000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v3/resolve.go    //
// Copyright (c) 2011-2019 Canonical Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package yaml

import (
	"encoding/base64"
	"math"
	"regexp"
	"strconv"
	"strings"
	"time"
)

type resolveMapItem struct {
	value interface{}
	tag   string
}

var resolveTable = make([]byte, 256)
var resolveMap = make(map[string]resolveMapItem)

func init() {
	t := resolveTable
	t[int('+')] = 'S' // Sign
	t[int('-')] = 'S'
	for _, c := range "0123456789" {
		t[int(c)] = 'D' // Digit
	}
	for _, c := range "yYnNtTfFoO~" {
		t[int(c)] = 'M' // In map
	}
	t[int('.')] = '.' // Float (potentially in map)

	var resolveMapList = []struct {
		v   interface{}
		tag string
		l   []string
	}{
		{true, boolTag, []string{"true", "True", "TRUE"}},
		{false, boolTag, []string{"false", "False", "FALSE"}},
		{nil, nullTag, []string{"", "~", "null", "Null", "NULL"}},
		{math.NaN(), floatTag, []string{".nan", ".NaN", ".NAN"}},
		{math.Inf(+1), floatTag, []string{".inf", ".Inf", ".INF"}},
		{math.Inf(+1), floatTag, []string{"+.inf", "+.Inf", "+.INF"}},
		{math.Inf(-1), floatTag, []string{"-.inf", "-.Inf", "-.INF"}},
		{"<<", mergeTag, []string{"<<"}},
	}

	m := resolveMap
	for _, item := range resolveMapList {
		for _, s := range item.l {
			m[s] = resolveMapItem{item.v, item.tag}
		}
	}
}

const (
	nullTag      = "!!null"
	boolTag      = "!!bool"
	strTag       = "!!str"
	intTag       = "!!int"
	floatTag     = "!!float"
	timestampTag = "!!timestamp"
	seqTag       = "!!seq"
	mapTag       = "!!map"
	binaryTag    = "!!binary"
	mergeTag     = "!!merge"
)

var longTags = make(map[string]string)
var shortTags = make(map[string]string)

func init() {
	for _, stag := range []string{nullTag, boolTag, strTag, intTag, floatTag, timestampTag, seqTag, mapTag, binaryTag, mergeTag} {
		ltag := longTag(stag)
		longTags[stag] = ltag
		shortTags[ltag] = stag
	}
}

const longTagPrefix = "tag:yaml.org,2002:"

func shortTag(tag string) string {
	if strings.HasPrefix(tag, longTagPrefix) {
		if stag, ok := shortTags[tag]; ok {
			return stag
		}
		return "!!" + tag[len(longTagPrefix):]
	}
	return tag
}

func longTag(tag string) string {
	if strings.HasPrefix(tag, "!!") {
		if ltag, ok := longTags[tag]; ok {
			return ltag
		}
		return longTagPrefix + tag[2:]
	}
	return tag
}

func resolvableTag(tag string) bool {
	switch tag {
	case "", strTag, boolTag, intTag, floatTag, nullTag, timestampTag:
		return true
	}
	return false
}

var yamlStyleFloat = regexp.MustCompile(`^[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?$`)

func resolve(tag string, in string) (rtag string, out interface{}) {
	tag = shortTag(tag)
	if !resolvableTag(tag) {
		return tag, in
	}

	defer func() {
		switch tag {
		case "", rtag, strTag, binaryTag:
			return
		case floatTag:
			if rtag == intTag {
				switch v := out.(type) {
				case int64:
					rtag = floatTag
					out = float64(v)
					return
				case int:
					rtag = floatTag
					out = float64(v)
					return
				}
			}
		}
		failf("cannot decode %s `%s` as a %s", shortTag(rtag), in, shortTag(tag))
	}()

	// Any data is accepted as a !!str or !!binary.
	// Otherwise, the prefix is enough of a hint about what it might be.
	hint := byte('N')
	if in != "" {
		hint = resolveTable[in[0]]
	}
	if hint != 0 && tag != strTag && tag != binaryTag {
		// Handle things we can lookup in a map.
		if item, ok := resolveMap[in]; ok {
			return item.tag, item.value
		}

		// Base 60 floats are a bad idea, were dropped in YAML 1.2, and
		// are purposefully unsupported here. They're still quoted on
		// the way out for compatibility with other parser, though.

		switch hint {
		case 'M':
			// We've already checked the map above.

		case '.':
			// Not in the map, so maybe a normal float.
			floatv, err := strconv.ParseFloat(in, 64)
			if err == nil {
				return floatTag, floatv
			}

		case 'D', 'S':
			// Int, float, or timestamp.
			// Only try values as a timestamp if the value is unquoted or there's an explicit
			// !!timestamp tag.
			if tag == "" || tag == timestampTag {
				t, ok := parseTimestamp(in)
				if ok {
					return timestampTag, t
				}
			}

			plain := strings.Replace(in, "_", "", -1)
			intv, err := strconv.ParseInt(plain, 0, 64)
			if err == nil {
				if intv == int64(int(intv)) {
					return intTag, int(intv)
				} else {
					return intTag, intv
				}
			}
			uintv, err := strconv.ParseUint(plain, 0, 64)
			if err == nil {
				return intTag, uintv
			}
			if yamlStyleFloat.MatchString(plain) {
				floatv, err := strconv.ParseFloat(plain, 64)
				if err == nil {
					return floatTag, floatv
				}
			}
			if strings.HasPrefix(plain, "0b") {
				intv, err := strconv.ParseInt(plain[2:], 2, 64)
				if err == nil {
					if intv == int64(int(intv)) {
						return intTag, int(intv)
					} else {
						return intTag, intv
					}
				}
				uintv, err := strconv.ParseUint(plain[2:], 2, 64)
				if err == nil {
					return intTag, uintv
				}
			} else if strings.HasPrefix(plain, "-0b") {
				intv, err := strconv.ParseInt("-"+plain[3:], 2, 64)
				if err == nil {
					if true || intv == int64(int(intv)) {
						return intTag, int(intv)
					} else {
						return intTag, intv
					}
				}
			}
			// Octals as introduced in version 1.2 of the spec.
			// Octals from the 1.1 spec, spelled as 0777, are still
			// decoded by default in v3 as well for compatibility.
			// May be dropped in v4 depending on how usage evolves.
			if strings.HasPrefix(plain, "0o") {
				intv, err := strconv.ParseInt(plain[2:], 8, 64)
				if err == nil {
					if intv == int64(int(intv)) {
						return intTag, int(intv)
					} else {
						return intTag, intv
					}
				}
				uintv, err := strconv.ParseUint(plain[2:], 8, 64)
				if err == nil {
					return intTag, uintv
				}
			} else if strings.HasPrefix(plain, "-0o") {
				intv, err := strconv.ParseInt("-"+plain[3:], 8, 64)
				if err == nil {
					if true || intv == int64(int(intv)) {
						return intTag, int(intv)
					} else {
						return intTag, intv
					}
				}
			}
		default:
			panic("internal error: missing handler for resolver table: " + string(rune(hint)) + " (with " + in + ")")
		}
	}
	return strTag, in
}

// encodeBase64 encodes s as base64 that is broken up into multiple lines
// as appropriate for the resulting length.
func encodeBase64(s string) string {
	const lineLen = 70
	encLen := base64.StdEncoding.EncodedLen(len(s))
	lines := encLen/lineLen + 1
	buf := make([]byte, encLen*2+lines)
	in := buf[0:encLen]
	out := buf[encLen:]
	base64.StdEncoding.Encode(in, []byte(s))
	k := 0
	for i := 0; i < len(in); i += lineLen {
		j := i + lineLen
		if j > len(in) {
			j = len(in)
		}
		k += copy(out[k:], in[i:j])
		if lines > 1 {
			out[k] = '\n'
			k++
		}
	}
	return string(out[:k])
}

// This is a subset of the formats allowed by the regular expression
// defined at http://yaml.org/type/timestamp.html.
var allowedTimestampFormats = []string{
	"2006-1-2T15:4:5.999999999Z07:00", // RCF3339Nano with short date fields.
	"2006-1-2t15:4:5.999999999Z07:00", // RFC3339Nano with short date fields and lower-case "t".
	"2006-1-2 15:4:5.999999999",       // space separated with no time zone
	"2006-1-2",                        // date only
	// Notable exception: time.Parse cannot handle: "2001-12-14 21:59:43.10 -5"
	// from the set of examples.
}

// parseTimestamp parses s as a timestamp string and
// returns the timestamp and reports whether it succeeded.
// Timestamp formats are defined at http://yaml.org/type/timestamp.html
func parseTimestamp(s string) (time.Time, bool) {
	// TODO write code to check all the formats supported by
	// http://yaml.org/type/timestamp.html instead of using time.Parse.

	// Quick check: all date formats start with YYYY-.
	i := 0
	for ; i < len(s); i++ {
		if c := s[i]; c < '0' || c > '9' {
			break
		}
	}
	if i != 4 || i == len(s) || s[i] != '-' {
		return time.Time{}, false
	}
	for _, format := range allowedTimestampFormats {
		if t, err := time.Parse(format, s); err == nil {
			return t, true
		}
	}
	return time.Time{}, false
}
  0707010000100E000081A4000000000000000000000001645E367C00015798000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v3/scannerc.go   //
// Copyright (c) 2011-2019 Canonical Ltd
// Copyright (c) 2006-2010 Kirill Simonov
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of
// this software and associated documentation files (the "Software"), to deal in
// the Software without restriction, including without limitation the rights to
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
// of the Software, and to permit persons to whom the Software is furnished to do
// so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.

package yaml

import (
	"bytes"
	"fmt"
)

// Introduction
// ************
//
// The following notes assume that you are familiar with the YAML specification
// (http://yaml.org/spec/1.2/spec.html).  We mostly follow it, although in
// some cases we are less restrictive that it requires.
//
// The process of transforming a YAML stream into a sequence of events is
// divided on two steps: Scanning and Parsing.
//
// The Scanner transforms the input stream into a sequence of tokens, while the
// parser transform the sequence of tokens produced by the Scanner into a
// sequence of parsing events.
//
// The Scanner is rather clever and complicated. The Parser, on the contrary,
// is a straightforward implementation of a recursive-descendant parser (or,
// LL(1) parser, as it is usually called).
//
// Actually there are two issues of Scanning that might be called "clever", the
// rest is quite straightforward.  The issues are "block collection start" and
// "simple keys".  Both issues are explained below in details.
//
// Here the Scanning step is explained and implemented.  We start with the list
// of all the tokens produced by the Scanner together with short descriptions.
//
// Now, tokens:
//
//      STREAM-START(encoding)          # The stream start.
//      STREAM-END                      # The stream end.
//      VERSION-DIRECTIVE(major,minor)  # The '%YAML' directive.
//      TAG-DIRECTIVE(handle,prefix)    # The '%TAG' directive.
//      DOCUMENT-START                  # '---'
//      DOCUMENT-END                    # '...'
//      BLOCK-SEQUENCE-START            # Indentation increase denoting a block
//      BLOCK-MAPPING-START             # sequence or a block mapping.
//      BLOCK-END                       # Indentation decrease.
//      FLOW-SEQUENCE-START             # '['
//      FLOW-SEQUENCE-END               # ']'
//      BLOCK-SEQUENCE-START            # '{'
//      BLOCK-SEQUENCE-END              # '}'
//      BLOCK-ENTRY                     # '-'
//      FLOW-ENTRY                      # ','
//      KEY                             # '?' or nothing (simple keys).
//      VALUE                           # ':'
//      ALIAS(anchor)                   # '*anchor'
//      ANCHOR(anchor)                  # '&anchor'
//      TAG(handle,suffix)              # '!handle!suffix'
//      SCALAR(value,style)             # A scalar.
//
// The following two tokens are "virtual" tokens denoting the beginning and the
// end of the stream:
//
//      STREAM-START(encoding)
//      STREAM-END
//
// We pass the information about the input stream encoding with the
// STREAM-START token.
//
// The next two tokens are responsible for tags:
//
//      VERSION-DIRECTIVE(major,minor)
//      TAG-DIRECTIVE(handle,prefix)
//
// Example:
//
//      %YAML   1.1
//      %TAG    !   !foo
//      %TAG    !yaml!  tag:yaml.org,2002:
//      ---
//
// The correspoding sequence of tokens:
//
//      STREAM-START(utf-8)
//      VERSION-DIRECTIVE(1,1)
//      TAG-DIRECTIVE("!","!foo")
//      TAG-DIRECTIVE("!yaml","tag:yaml.org,2002:")
//      DOCUMENT-START
//      STREAM-END
//
// Note that the VERSION-DIRECTIVE and TAG-DIRECTIVE tokens occupy a whole
// line.
//
// The document start and end indicators are represented by:
//
//      DOCUMENT-START
//      DOCUMENT-END
//
// Note that if a YAML stream contains an implicit document (without '---'
// and '...' indicators), no DOCUMENT-START and DOCUMENT-END tokens will be
// produced.
//
// In the following examples, we present whole documents together with the
// produced tokens.
//
//      1. An implicit document:
//
//          'a scalar'
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          SCALAR("a scalar",single-quoted)
//          STREAM-END
//
//      2. An explicit document:
//
//          ---
//          'a scalar'
//          ...
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          DOCUMENT-START
//          SCALAR("a scalar",single-quoted)
//          DOCUMENT-END
//          STREAM-END
//
//      3. Several documents in a stream:
//
//          'a scalar'
//          ---
//          'another scalar'
//          ---
//          'yet another scalar'
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          SCALAR("a scalar",single-quoted)
//          DOCUMENT-START
//          SCALAR("another scalar",single-quoted)
//          DOCUMENT-START
//          SCALAR("yet another scalar",single-quoted)
//          STREAM-END
//
// We have already introduced the SCALAR token above.  The following tokens are
// used to describe aliases, anchors, tag, and scalars:
//
//      ALIAS(anchor)
//      ANCHOR(anchor)
//      TAG(handle,suffix)
//      SCALAR(value,style)
//
// The following series of examples illustrate the usage of these tokens:
//
//      1. A recursive sequence:
//
//          &A [ *A ]
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          ANCHOR("A")
//          FLOW-SEQUENCE-START
//          ALIAS("A")
//          FLOW-SEQUENCE-END
//          STREAM-END
//
//      2. A tagged scalar:
//
//          !!float "3.14"  # A good approximation.
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          TAG("!!","float")
//          SCALAR("3.14",double-quoted)
//          STREAM-END
//
//      3. Various scalar styles:
//
//          --- # Implicit empty plain scalars do not produce tokens.
//          --- a plain scalar
//          --- 'a single-quoted scalar'
//          --- "a double-quoted scalar"
//          --- |-
//            a literal scalar
//          --- >-
//            a folded
//            scalar
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          DOCUMENT-START
//          DOCUMENT-START
//          SCALAR("a plain scalar",plain)
//          DOCUMENT-START
//          SCALAR("a single-quoted scalar",single-quoted)
//          DOCUMENT-START
//          SCALAR("a double-quoted scalar",double-quoted)
//          DOCUMENT-START
//          SCALAR("a literal scalar",literal)
//          DOCUMENT-START
//          SCALAR("a folded scalar",folded)
//          STREAM-END
//
// Now it's time to review collection-related tokens. We will start with
// flow collections:
//
//      FLOW-SEQUENCE-START
//      FLOW-SEQUENCE-END
//      FLOW-MAPPING-START
//      FLOW-MAPPING-END
//      FLOW-ENTRY
//      KEY
//      VALUE
//
// The tokens FLOW-SEQUENCE-START, FLOW-SEQUENCE-END, FLOW-MAPPING-START, and
// FLOW-MAPPING-END represent the indicators '[', ']', '{', and '}'
// correspondingly.  FLOW-ENTRY represent the ',' indicator.  Finally the
// indicators '?' and ':', which are used for denoting mapping keys and values,
// are represented by the KEY and VALUE tokens.
//
// The following examples show flow collections:
//
//      1. A flow sequence:
//
//          [item 1, item 2, item 3]
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          FLOW-SEQUENCE-START
//          SCALAR("item 1",plain)
//          FLOW-ENTRY
//          SCALAR("item 2",plain)
//          FLOW-ENTRY
//          SCALAR("item 3",plain)
//          FLOW-SEQUENCE-END
//          STREAM-END
//
//      2. A flow mapping:
//
//          {
//              a simple key: a value,  # Note that the KEY token is produced.
//              ? a complex key: another value,
//          }
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          FLOW-MAPPING-START
//          KEY
//          SCALAR("a simple key",plain)
//          VALUE
//          SCALAR("a value",plain)
//          FLOW-ENTRY
//          KEY
//          SCALAR("a complex key",plain)
//          VALUE
//          SCALAR("another value",plain)
//          FLOW-ENTRY
//          FLOW-MAPPING-END
//          STREAM-END
//
// A simple key is a key which is not denoted by the '?' indicator.  Note that
// the Scanner still produce the KEY token whenever it encounters a simple key.
//
// For scanning block collections, the following tokens are used (note that we
// repeat KEY and VALUE here):
//
//      BLOCK-SEQUENCE-START
//      BLOCK-MAPPING-START
//      BLOCK-END
//      BLOCK-ENTRY
//      KEY
//      VALUE
//
// The tokens BLOCK-SEQUENCE-START and BLOCK-MAPPING-START denote indentation
// increase that precedes a block collection (cf. the INDENT token in Python).
// The token BLOCK-END denote indentation decrease that ends a block collection
// (cf. the DEDENT token in Python).  However YAML has some syntax pecularities
// that makes detections of these tokens more complex.
//
// The tokens BLOCK-ENTRY, KEY, and VALUE are used to represent the indicators
// '-', '?', and ':' correspondingly.
//
// The following examples show how the tokens BLOCK-SEQUENCE-START,
// BLOCK-MAPPING-START, and BLOCK-END are emitted by the Scanner:
//
//      1. Block sequences:
//
//          - item 1
//          - item 2
//          -
//            - item 3.1
//            - item 3.2
//          -
//            key 1: value 1
//            key 2: value 2
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          BLOCK-SEQUENCE-START
//          BLOCK-ENTRY
//          SCALAR("item 1",plain)
//          BLOCK-ENTRY
//          SCALAR("item 2",plain)
//          BLOCK-ENTRY
//          BLOCK-SEQUENCE-START
//          BLOCK-ENTRY
//          SCALAR("item 3.1",plain)
//          BLOCK-ENTRY
//          SCALAR("item 3.2",plain)
//          BLOCK-END
//          BLOCK-ENTRY
//          BLOCK-MAPPING-START
//          KEY
//          SCALAR("key 1",plain)
//          VALUE
//          SCALAR("value 1",plain)
//          KEY
//          SCALAR("key 2",plain)
//          VALUE
//          SCALAR("value 2",plain)
//          BLOCK-END
//          BLOCK-END
//          STREAM-END
//
//      2. Block mappings:
//
//          a simple key: a value   # The KEY token is produced here.
//          ? a complex key
//          : another value
//          a mapping:
//            key 1: value 1
//            key 2: value 2
//          a sequence:
//            - item 1
//            - item 2
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          BLOCK-MAPPING-START
//          KEY
//          SCALAR("a simple key",plain)
//          VALUE
//          SCALAR("a value",plain)
//          KEY
//          SCALAR("a complex key",plain)
//          VALUE
//          SCALAR("another value",plain)
//          KEY
//          SCALAR("a mapping",plain)
//          BLOCK-MAPPING-START
//          KEY
//          SCALAR("key 1",plain)
//          VALUE
//          SCALAR("value 1",plain)
//          KEY
//          SCALAR("key 2",plain)
//          VALUE
//          SCALAR("value 2",plain)
//          BLOCK-END
//          KEY
//          SCALAR("a sequence",plain)
//          VALUE
//          BLOCK-SEQUENCE-START
//          BLOCK-ENTRY
//          SCALAR("item 1",plain)
//          BLOCK-ENTRY
//          SCALAR("item 2",plain)
//          BLOCK-END
//          BLOCK-END
//          STREAM-END
//
// YAML does not always require to start a new block collection from a new
// line.  If the current line contains only '-', '?', and ':' indicators, a new
// block collection may start at the current line.  The following examples
// illustrate this case:
//
//      1. Collections in a sequence:
//
//          - - item 1
//            - item 2
//          - key 1: value 1
//            key 2: value 2
//          - ? complex key
//            : complex value
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          BLOCK-SEQUENCE-START
//          BLOCK-ENTRY
//          BLOCK-SEQUENCE-START
//          BLOCK-ENTRY
//          SCALAR("item 1",plain)
//          BLOCK-ENTRY
//          SCALAR("item 2",plain)
//          BLOCK-END
//          BLOCK-ENTRY
//          BLOCK-MAPPING-START
//          KEY
//          SCALAR("key 1",plain)
//          VALUE
//          SCALAR("value 1",plain)
//          KEY
//          SCALAR("key 2",plain)
//          VALUE
//          SCALAR("value 2",plain)
//          BLOCK-END
//          BLOCK-ENTRY
//          BLOCK-MAPPING-START
//          KEY
//          SCALAR("complex key")
//          VALUE
//          SCALAR("complex value")
//          BLOCK-END
//          BLOCK-END
//          STREAM-END
//
//      2. Collections in a mapping:
//
//          ? a sequence
//          : - item 1
//            - item 2
//          ? a mapping
//          : key 1: value 1
//            key 2: value 2
//
//      Tokens:
//
//          STREAM-START(utf-8)
//          BLOCK-MAPPING-START
//          KEY
//          SCALAR("a sequence",plain)
//          VALUE
//          BLOCK-SEQUENCE-START
//          BLOCK-ENTRY
//          SCALAR("item 1",plain)
//          BLOCK-ENTRY
//          SCALAR("item 2",plain)
//          BLOCK-END
//          KEY
//          SCALAR("a mapping",plain)
//          VALUE
//          BLOCK-MAPPING-START
//          KEY
//          SCALAR("key 1",plain)
//          VALUE
//          SCALAR("value 1",plain)
//          KEY
//          SCALAR("key 2",plain)
//          VALUE
//          SCALAR("value 2",plain)
//          BLOCK-END
//          BLOCK-END
//          STREAM-END
//
// YAML also permits non-indented sequences if they are included into a block
// mapping.  In this case, the token BLOCK-SEQUENCE-START is not produced:
//
//      key:
//      - item 1    # BLOCK-SEQUENCE-START is NOT produced here.
//      - item 2
//
// Tokens:
//
//      STREAM-START(utf-8)
//      BLOCK-MAPPING-START
//      KEY
//      SCALAR("key",plain)
//      VALUE
//      BLOCK-ENTRY
//      SCALAR("item 1",plain)
//      BLOCK-ENTRY
//      SCALAR("item 2",plain)
//      BLOCK-END
//

// Ensure that the buffer contains the required number of characters.
// Return true on success, false on failure (reader error or memory error).
func cache(parser *yaml_parser_t, length int) bool {
	// [Go] This was inlined: !cache(A, B) -> unread < B && !update(A, B)
	return parser.unread >= length || yaml_parser_update_buffer(parser, length)
}

// Advance the buffer pointer.
func skip(parser *yaml_parser_t) {
	if !is_blank(parser.buffer, parser.buffer_pos) {
		parser.newlines = 0
	}
	parser.mark.index++
	parser.mark.column++
	parser.unread--
	parser.buffer_pos += width(parser.buffer[parser.buffer_pos])
}

func skip_line(parser *yaml_parser_t) {
	if is_crlf(parser.buffer, parser.buffer_pos) {
		parser.mark.index += 2
		parser.mark.column = 0
		parser.mark.line++
		parser.unread -= 2
		parser.buffer_pos += 2
		parser.newlines++
	} else if is_break(parser.buffer, parser.buffer_pos) {
		parser.mark.index++
		parser.mark.column = 0
		parser.mark.line++
		parser.unread--
		parser.buffer_pos += width(parser.buffer[parser.buffer_pos])
		parser.newlines++
	}
}

// Copy a character to a string buffer and advance pointers.
func read(parser *yaml_parser_t, s []byte) []byte {
	if !is_blank(parser.buffer, parser.buffer_pos) {
		parser.newlines = 0
	}
	w := width(parser.buffer[parser.buffer_pos])
	if w == 0 {
		panic("invalid character sequence")
	}
	if len(s) == 0 {
		s = make([]byte, 0, 32)
	}
	if w == 1 && len(s)+w <= cap(s) {
		s = s[:len(s)+1]
		s[len(s)-1] = parser.buffer[parser.buffer_pos]
		parser.buffer_pos++
	} else {
		s = append(s, parser.buffer[parser.buffer_pos:parser.buffer_pos+w]...)
		parser.buffer_pos += w
	}
	parser.mark.index++
	parser.mark.column++
	parser.unread--
	return s
}

// Copy a line break character to a string buffer and advance pointers.
func read_line(parser *yaml_parser_t, s []byte) []byte {
	buf := parser.buffer
	pos := parser.buffer_pos
	switch {
	case buf[pos] == '\r' && buf[pos+1] == '\n':
		// CR LF . LF
		s = append(s, '\n')
		parser.buffer_pos += 2
		parser.mark.index++
		parser.unread--
	case buf[pos] == '\r' || buf[pos] == '\n':
		// CR|LF . LF
		s = append(s, '\n')
		parser.buffer_pos += 1
	case buf[pos] == '\xC2' && buf[pos+1] == '\x85':
		// NEL . LF
		s = append(s, '\n')
		parser.buffer_pos += 2
	case buf[pos] == '\xE2' && buf[pos+1] == '\x80' && (buf[pos+2] == '\xA8' || buf[pos+2] == '\xA9'):
		// LS|PS . LS|PS
		s = append(s, buf[parser.buffer_pos:pos+3]...)
		parser.buffer_pos += 3
	default:
		return s
	}
	parser.mark.index++
	parser.mark.column = 0
	parser.mark.line++
	parser.unread--
	parser.newlines++
	return s
}

// Get the next token.
func yaml_parser_scan(parser *yaml_parser_t, token *yaml_token_t) bool {
	// Erase the token object.
	*token = yaml_token_t{} // [Go] Is this necessary?

	// No tokens after STREAM-END or error.
	if parser.stream_end_produced || parser.error != yaml_NO_ERROR {
		return true
	}

	// Ensure that the tokens queue contains enough tokens.
	if !parser.token_available {
		if !yaml_parser_fetch_more_tokens(parser) {
			return false
		}
	}

	// Fetch the next token from the queue.
	*token = parser.tokens[parser.tokens_head]
	parser.tokens_head++
	parser.tokens_parsed++
	parser.token_available = false

	if token.typ == yaml_STREAM_END_TOKEN {
		parser.stream_end_produced = true
	}
	return true
}

// Set the scanner error and return false.
func yaml_parser_set_scanner_error(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string) bool {
	parser.error = yaml_SCANNER_ERROR
	parser.context = context
	parser.context_mark = context_mark
	parser.problem = problem
	parser.problem_mark = parser.mark
	return false
}

func yaml_parser_set_scanner_tag_error(parser *yaml_parser_t, directive bool, context_mark yaml_mark_t, problem string) bool {
	context := "while parsing a tag"
	if directive {
		context = "while parsing a %TAG directive"
	}
	return yaml_parser_set_scanner_error(parser, context, context_mark, problem)
}

func trace(args ...interface{}) func() {
	pargs := append([]interface{}{"+++"}, args...)
	fmt.Println(pargs...)
	pargs = append([]interface{}{"---"}, args...)
	return func() { fmt.Println(pargs...) }
}

// Ensure that the tokens queue contains at least one token which can be
// returned to the Parser.
func yaml_parser_fetch_more_tokens(parser *yaml_parser_t) bool {
	// While we need more tokens to fetch, do it.
	for {
		// [Go] The comment parsing logic requires a lookahead of two tokens
		// so that foot comments may be parsed in time of associating them
		// with the tokens that are parsed before them, and also for line
		// comments to be transformed into head comments in some edge cases.
		if parser.tokens_head < len(parser.tokens)-2 {
			// If a potential simple key is at the head position, we need to fetch
			// the next token to disambiguate it.
			head_tok_idx, ok := parser.simple_keys_by_tok[parser.tokens_parsed]
			if !ok {
				break
			} else if valid, ok := yaml_simple_key_is_valid(parser, &parser.simple_keys[head_tok_idx]); !ok {
				return false
			} else if !valid {
				break
			}
		}
		// Fetch the next token.
		if !yaml_parser_fetch_next_token(parser) {
			return false
		}
	}

	parser.token_available = true
	return true
}

// The dispatcher for token fetchers.
func yaml_parser_fetch_next_token(parser *yaml_parser_t) (ok bool) {
	// Ensure that the buffer is initialized.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}

	// Check if we just started scanning.  Fetch STREAM-START then.
	if !parser.stream_start_produced {
		return yaml_parser_fetch_stream_start(parser)
	}

	scan_mark := parser.mark

	// Eat whitespaces and comments until we reach the next token.
	if !yaml_parser_scan_to_next_token(parser) {
		return false
	}

	// [Go] While unrolling indents, transform the head comments of prior
	// indentation levels observed after scan_start into foot comments at
	// the respective indexes.

	// Check the indentation level against the current column.
	if !yaml_parser_unroll_indent(parser, parser.mark.column, scan_mark) {
		return false
	}

	// Ensure that the buffer contains at least 4 characters.  4 is the length
	// of the longest indicators ('--- ' and '... ').
	if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) {
		return false
	}

	// Is it the end of the stream?
	if is_z(parser.buffer, parser.buffer_pos) {
		return yaml_parser_fetch_stream_end(parser)
	}

	// Is it a directive?
	if parser.mark.column == 0 && parser.buffer[parser.buffer_pos] == '%' {
		return yaml_parser_fetch_directive(parser)
	}

	buf := parser.buffer
	pos := parser.buffer_pos

	// Is it the document start indicator?
	if parser.mark.column == 0 && buf[pos] == '-' && buf[pos+1] == '-' && buf[pos+2] == '-' && is_blankz(buf, pos+3) {
		return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_START_TOKEN)
	}

	// Is it the document end indicator?
	if parser.mark.column == 0 && buf[pos] == '.' && buf[pos+1] == '.' && buf[pos+2] == '.' && is_blankz(buf, pos+3) {
		return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_END_TOKEN)
	}

	comment_mark := parser.mark
	if len(parser.tokens) > 0 && (parser.flow_level == 0 && buf[pos] == ':' || parser.flow_level > 0 && buf[pos] == ',') {
		// Associate any following comments with the prior token.
		comment_mark = parser.tokens[len(parser.tokens)-1].start_mark
	}
	defer func() {
		if !ok {
			return
		}
		if len(parser.tokens) > 0 && parser.tokens[len(parser.tokens)-1].typ == yaml_BLOCK_ENTRY_TOKEN {
			// Sequence indicators alone have no line comments. It becomes
			// a head comment for whatever follows.
			return
		}
		if !yaml_parser_scan_line_comment(parser, comment_mark) {
			ok = false
			return
		}
	}()

	// Is it the flow sequence start indicator?
	if buf[pos] == '[' {
		return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_SEQUENCE_START_TOKEN)
	}

	// Is it the flow mapping start indicator?
	if parser.buffer[parser.buffer_pos] == '{' {
		return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_MAPPING_START_TOKEN)
	}

	// Is it the flow sequence end indicator?
	if parser.buffer[parser.buffer_pos] == ']' {
		return yaml_parser_fetch_flow_collection_end(parser,
			yaml_FLOW_SEQUENCE_END_TOKEN)
	}

	// Is it the flow mapping end indicator?
	if parser.buffer[parser.buffer_pos] == '}' {
		return yaml_parser_fetch_flow_collection_end(parser,
			yaml_FLOW_MAPPING_END_TOKEN)
	}

	// Is it the flow entry indicator?
	if parser.buffer[parser.buffer_pos] == ',' {
		return yaml_parser_fetch_flow_entry(parser)
	}

	// Is it the block entry indicator?
	if parser.buffer[parser.buffer_pos] == '-' && is_blankz(parser.buffer, parser.buffer_pos+1) {
		return yaml_parser_fetch_block_entry(parser)
	}

	// Is it the key indicator?
	if parser.buffer[parser.buffer_pos] == '?' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) {
		return yaml_parser_fetch_key(parser)
	}

	// Is it the value indicator?
	if parser.buffer[parser.buffer_pos] == ':' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) {
		return yaml_parser_fetch_value(parser)
	}

	// Is it an alias?
	if parser.buffer[parser.buffer_pos] == '*' {
		return yaml_parser_fetch_anchor(parser, yaml_ALIAS_TOKEN)
	}

	// Is it an anchor?
	if parser.buffer[parser.buffer_pos] == '&' {
		return yaml_parser_fetch_anchor(parser, yaml_ANCHOR_TOKEN)
	}

	// Is it a tag?
	if parser.buffer[parser.buffer_pos] == '!' {
		return yaml_parser_fetch_tag(parser)
	}

	// Is it a literal scalar?
	if parser.buffer[parser.buffer_pos] == '|' && parser.flow_level == 0 {
		return yaml_parser_fetch_block_scalar(parser, true)
	}

	// Is it a folded scalar?
	if parser.buffer[parser.buffer_pos] == '>' && parser.flow_level == 0 {
		return yaml_parser_fetch_block_scalar(parser, false)
	}

	// Is it a single-quoted scalar?
	if parser.buffer[parser.buffer_pos] == '\'' {
		return yaml_parser_fetch_flow_scalar(parser, true)
	}

	// Is it a double-quoted scalar?
	if parser.buffer[parser.buffer_pos] == '"' {
		return yaml_parser_fetch_flow_scalar(parser, false)
	}

	// Is it a plain scalar?
	//
	// A plain scalar may start with any non-blank characters except
	//
	//      '-', '?', ':', ',', '[', ']', '{', '}',
	//      '#', '&', '*', '!', '|', '>', '\'', '\"',
	//      '%', '@', '`'.
	//
	// In the block context (and, for the '-' indicator, in the flow context
	// too), it may also start with the characters
	//
	//      '-', '?', ':'
	//
	// if it is followed by a non-space character.
	//
	// The last rule is more restrictive than the specification requires.
	// [Go] TODO Make this logic more reasonable.
	//switch parser.buffer[parser.buffer_pos] {
	//case '-', '?', ':', ',', '?', '-', ',', ':', ']', '[', '}', '{', '&', '#', '!', '*', '>', '|', '"', '\'', '@', '%', '-', '`':
	//}
	if !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '-' ||
		parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':' ||
		parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '[' ||
		parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' ||
		parser.buffer[parser.buffer_pos] == '}' || parser.buffer[parser.buffer_pos] == '#' ||
		parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '*' ||
		parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '|' ||
		parser.buffer[parser.buffer_pos] == '>' || parser.buffer[parser.buffer_pos] == '\'' ||
		parser.buffer[parser.buffer_pos] == '"' || parser.buffer[parser.buffer_pos] == '%' ||
		parser.buffer[parser.buffer_pos] == '@' || parser.buffer[parser.buffer_pos] == '`') ||
		(parser.buffer[parser.buffer_pos] == '-' && !is_blank(parser.buffer, parser.buffer_pos+1)) ||
		(parser.flow_level == 0 &&
			(parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':') &&
			!is_blankz(parser.buffer, parser.buffer_pos+1)) {
		return yaml_parser_fetch_plain_scalar(parser)
	}

	// If we don't determine the token type so far, it is an error.
	return yaml_parser_set_scanner_error(parser,
		"while scanning for the next token", parser.mark,
		"found character that cannot start any token")
}

func yaml_simple_key_is_valid(parser *yaml_parser_t, simple_key *yaml_simple_key_t) (valid, ok bool) {
	if !simple_key.possible {
		return false, true
	}

	// The 1.2 specification says:
	//
	//     "If the ? indicator is omitted, parsing needs to see past the
	//     implicit key to recognize it as such. To limit the amount of
	//     lookahead required, the “:” indicator must appear at most 1024
	//     Unicode characters beyond the start of the key. In addition, the key
	//     is restricted to a single line."
	//
	if simple_key.mark.line < parser.mark.line || simple_key.mark.index+1024 < parser.mark.index {
		// Check if the potential simple key to be removed is required.
		if simple_key.required {
			return false, yaml_parser_set_scanner_error(parser,
				"while scanning a simple key", simple_key.mark,
				"could not find expected ':'")
		}
		simple_key.possible = false
		return false, true
	}
	return true, true
}

// Check if a simple key may start at the current position and add it if
// needed.
func yaml_parser_save_simple_key(parser *yaml_parser_t) bool {
	// A simple key is required at the current position if the scanner is in
	// the block context and the current column coincides with the indentation
	// level.

	required := parser.flow_level == 0 && parser.indent == parser.mark.column

	//
	// If the current position may start a simple key, save it.
	//
	if parser.simple_key_allowed {
		simple_key := yaml_simple_key_t{
			possible:     true,
			required:     required,
			token_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head),
			mark:         parser.mark,
		}

		if !yaml_parser_remove_simple_key(parser) {
			return false
		}
		parser.simple_keys[len(parser.simple_keys)-1] = simple_key
		parser.simple_keys_by_tok[simple_key.token_number] = len(parser.simple_keys) - 1
	}
	return true
}

// Remove a potential simple key at the current flow level.
func yaml_parser_remove_simple_key(parser *yaml_parser_t) bool {
	i := len(parser.simple_keys) - 1
	if parser.simple_keys[i].possible {
		// If the key is required, it is an error.
		if parser.simple_keys[i].required {
			return yaml_parser_set_scanner_error(parser,
				"while scanning a simple key", parser.simple_keys[i].mark,
				"could not find expected ':'")
		}
		// Remove the key from the stack.
		parser.simple_keys[i].possible = false
		delete(parser.simple_keys_by_tok, parser.simple_keys[i].token_number)
	}
	return true
}

// max_flow_level limits the flow_level
const max_flow_level = 10000

// Increase the flow level and resize the simple key list if needed.
func yaml_parser_increase_flow_level(parser *yaml_parser_t) bool {
	// Reset the simple key on the next level.
	parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{
		possible:     false,
		required:     false,
		token_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head),
		mark:         parser.mark,
	})

	// Increase the flow level.
	parser.flow_level++
	if parser.flow_level > max_flow_level {
		return yaml_parser_set_scanner_error(parser,
			"while increasing flow level", parser.simple_keys[len(parser.simple_keys)-1].mark,
			fmt.Sprintf("exceeded max depth of %d", max_flow_level))
	}
	return true
}

// Decrease the flow level.
func yaml_parser_decrease_flow_level(parser *yaml_parser_t) bool {
	if parser.flow_level > 0 {
		parser.flow_level--
		last := len(parser.simple_keys) - 1
		delete(parser.simple_keys_by_tok, parser.simple_keys[last].token_number)
		parser.simple_keys = parser.simple_keys[:last]
	}
	return true
}

// max_indents limits the indents stack size
const max_indents = 10000

// Push the current indentation level to the stack and set the new level
// the current column is greater than the indentation level.  In this case,
// append or insert the specified token into the token queue.
func yaml_parser_roll_indent(parser *yaml_parser_t, column, number int, typ yaml_token_type_t, mark yaml_mark_t) bool {
	// In the flow context, do nothing.
	if parser.flow_level > 0 {
		return true
	}

	if parser.indent < column {
		// Push the current indentation level to the stack and set the new
		// indentation level.
		parser.indents = append(parser.indents, parser.indent)
		parser.indent = column
		if len(parser.indents) > max_indents {
			return yaml_parser_set_scanner_error(parser,
				"while increasing indent level", parser.simple_keys[len(parser.simple_keys)-1].mark,
				fmt.Sprintf("exceeded max depth of %d", max_indents))
		}

		// Create a token and insert it into the queue.
		token := yaml_token_t{
			typ:        typ,
			start_mark: mark,
			end_mark:   mark,
		}
		if number > -1 {
			number -= parser.tokens_parsed
		}
		yaml_insert_token(parser, number, &token)
	}
	return true
}

// Pop indentation levels from the indents stack until the current level
// becomes less or equal to the column.  For each indentation level, append
// the BLOCK-END token.
func yaml_parser_unroll_indent(parser *yaml_parser_t, column int, scan_mark yaml_mark_t) bool {
	// In the flow context, do nothing.
	if parser.flow_level > 0 {
		return true
	}

	block_mark := scan_mark
	block_mark.index--

	// Loop through the indentation levels in the stack.
	for parser.indent > column {

		// [Go] Reposition the end token before potential following
		//      foot comments of parent blocks. For that, search
		//      backwards for recent comments that were at the same
		//      indent as the block that is ending now.
		stop_index := block_mark.index
		for i := len(parser.comments) - 1; i >= 0; i-- {
			comment := &parser.comments[i]

			if comment.end_mark.index < stop_index {
				// Don't go back beyond the start of the comment/whitespace scan, unless column < 0.
				// If requested indent column is < 0, then the document is over and everything else
				// is a foot anyway.
				break
			}
			if comment.start_mark.column == parser.indent+1 {
				// This is a good match. But maybe there's a former comment
				// at that same indent level, so keep searching.
				block_mark = comment.start_mark
			}

			// While the end of the former comment matches with
			// the start of the following one, we know there's
			// nothing in between and scanning is still safe.
			stop_index = comment.scan_mark.index
		}

		// Create a token and append it to the queue.
		token := yaml_token_t{
			typ:        yaml_BLOCK_END_TOKEN,
			start_mark: block_mark,
			end_mark:   block_mark,
		}
		yaml_insert_token(parser, -1, &token)

		// Pop the indentation level.
		parser.indent = parser.indents[len(parser.indents)-1]
		parser.indents = parser.indents[:len(parser.indents)-1]
	}
	return true
}

// Initialize the scanner and produce the STREAM-START token.
func yaml_parser_fetch_stream_start(parser *yaml_parser_t) bool {

	// Set the initial indentation.
	parser.indent = -1

	// Initialize the simple key stack.
	parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{})

	parser.simple_keys_by_tok = make(map[int]int)

	// A simple key is allowed at the beginning of the stream.
	parser.simple_key_allowed = true

	// We have started.
	parser.stream_start_produced = true

	// Create the STREAM-START token and append it to the queue.
	token := yaml_token_t{
		typ:        yaml_STREAM_START_TOKEN,
		start_mark: parser.mark,
		end_mark:   parser.mark,
		encoding:   parser.encoding,
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the STREAM-END token and shut down the scanner.
func yaml_parser_fetch_stream_end(parser *yaml_parser_t) bool {

	// Force new line.
	if parser.mark.column != 0 {
		parser.mark.column = 0
		parser.mark.line++
	}

	// Reset the indentation level.
	if !yaml_parser_unroll_indent(parser, -1, parser.mark) {
		return false
	}

	// Reset simple keys.
	if !yaml_parser_remove_simple_key(parser) {
		return false
	}

	parser.simple_key_allowed = false

	// Create the STREAM-END token and append it to the queue.
	token := yaml_token_t{
		typ:        yaml_STREAM_END_TOKEN,
		start_mark: parser.mark,
		end_mark:   parser.mark,
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce a VERSION-DIRECTIVE or TAG-DIRECTIVE token.
func yaml_parser_fetch_directive(parser *yaml_parser_t) bool {
	// Reset the indentation level.
	if !yaml_parser_unroll_indent(parser, -1, parser.mark) {
		return false
	}

	// Reset simple keys.
	if !yaml_parser_remove_simple_key(parser) {
		return false
	}

	parser.simple_key_allowed = false

	// Create the YAML-DIRECTIVE or TAG-DIRECTIVE token.
	token := yaml_token_t{}
	if !yaml_parser_scan_directive(parser, &token) {
		return false
	}
	// Append the token to the queue.
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the DOCUMENT-START or DOCUMENT-END token.
func yaml_parser_fetch_document_indicator(parser *yaml_parser_t, typ yaml_token_type_t) bool {
	// Reset the indentation level.
	if !yaml_parser_unroll_indent(parser, -1, parser.mark) {
		return false
	}

	// Reset simple keys.
	if !yaml_parser_remove_simple_key(parser) {
		return false
	}

	parser.simple_key_allowed = false

	// Consume the token.
	start_mark := parser.mark

	skip(parser)
	skip(parser)
	skip(parser)

	end_mark := parser.mark

	// Create the DOCUMENT-START or DOCUMENT-END token.
	token := yaml_token_t{
		typ:        typ,
		start_mark: start_mark,
		end_mark:   end_mark,
	}
	// Append the token to the queue.
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the FLOW-SEQUENCE-START or FLOW-MAPPING-START token.
func yaml_parser_fetch_flow_collection_start(parser *yaml_parser_t, typ yaml_token_type_t) bool {

	// The indicators '[' and '{' may start a simple key.
	if !yaml_parser_save_simple_key(parser) {
		return false
	}

	// Increase the flow level.
	if !yaml_parser_increase_flow_level(parser) {
		return false
	}

	// A simple key may follow the indicators '[' and '{'.
	parser.simple_key_allowed = true

	// Consume the token.
	start_mark := parser.mark
	skip(parser)
	end_mark := parser.mark

	// Create the FLOW-SEQUENCE-START of FLOW-MAPPING-START token.
	token := yaml_token_t{
		typ:        typ,
		start_mark: start_mark,
		end_mark:   end_mark,
	}
	// Append the token to the queue.
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the FLOW-SEQUENCE-END or FLOW-MAPPING-END token.
func yaml_parser_fetch_flow_collection_end(parser *yaml_parser_t, typ yaml_token_type_t) bool {
	// Reset any potential simple key on the current flow level.
	if !yaml_parser_remove_simple_key(parser) {
		return false
	}

	// Decrease the flow level.
	if !yaml_parser_decrease_flow_level(parser) {
		return false
	}

	// No simple keys after the indicators ']' and '}'.
	parser.simple_key_allowed = false

	// Consume the token.

	start_mark := parser.mark
	skip(parser)
	end_mark := parser.mark

	// Create the FLOW-SEQUENCE-END of FLOW-MAPPING-END token.
	token := yaml_token_t{
		typ:        typ,
		start_mark: start_mark,
		end_mark:   end_mark,
	}
	// Append the token to the queue.
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the FLOW-ENTRY token.
func yaml_parser_fetch_flow_entry(parser *yaml_parser_t) bool {
	// Reset any potential simple keys on the current flow level.
	if !yaml_parser_remove_simple_key(parser) {
		return false
	}

	// Simple keys are allowed after ','.
	parser.simple_key_allowed = true

	// Consume the token.
	start_mark := parser.mark
	skip(parser)
	end_mark := parser.mark

	// Create the FLOW-ENTRY token and append it to the queue.
	token := yaml_token_t{
		typ:        yaml_FLOW_ENTRY_TOKEN,
		start_mark: start_mark,
		end_mark:   end_mark,
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the BLOCK-ENTRY token.
func yaml_parser_fetch_block_entry(parser *yaml_parser_t) bool {
	// Check if the scanner is in the block context.
	if parser.flow_level == 0 {
		// Check if we are allowed to start a new entry.
		if !parser.simple_key_allowed {
			return yaml_parser_set_scanner_error(parser, "", parser.mark,
				"block sequence entries are not allowed in this context")
		}
		// Add the BLOCK-SEQUENCE-START token if needed.
		if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_SEQUENCE_START_TOKEN, parser.mark) {
			return false
		}
	} else {
		// It is an error for the '-' indicator to occur in the flow context,
		// but we let the Parser detect and report about it because the Parser
		// is able to point to the context.
	}

	// Reset any potential simple keys on the current flow level.
	if !yaml_parser_remove_simple_key(parser) {
		return false
	}

	// Simple keys are allowed after '-'.
	parser.simple_key_allowed = true

	// Consume the token.
	start_mark := parser.mark
	skip(parser)
	end_mark := parser.mark

	// Create the BLOCK-ENTRY token and append it to the queue.
	token := yaml_token_t{
		typ:        yaml_BLOCK_ENTRY_TOKEN,
		start_mark: start_mark,
		end_mark:   end_mark,
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the KEY token.
func yaml_parser_fetch_key(parser *yaml_parser_t) bool {

	// In the block context, additional checks are required.
	if parser.flow_level == 0 {
		// Check if we are allowed to start a new key (not nessesary simple).
		if !parser.simple_key_allowed {
			return yaml_parser_set_scanner_error(parser, "", parser.mark,
				"mapping keys are not allowed in this context")
		}
		// Add the BLOCK-MAPPING-START token if needed.
		if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) {
			return false
		}
	}

	// Reset any potential simple keys on the current flow level.
	if !yaml_parser_remove_simple_key(parser) {
		return false
	}

	// Simple keys are allowed after '?' in the block context.
	parser.simple_key_allowed = parser.flow_level == 0

	// Consume the token.
	start_mark := parser.mark
	skip(parser)
	end_mark := parser.mark

	// Create the KEY token and append it to the queue.
	token := yaml_token_t{
		typ:        yaml_KEY_TOKEN,
		start_mark: start_mark,
		end_mark:   end_mark,
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the VALUE token.
func yaml_parser_fetch_value(parser *yaml_parser_t) bool {

	simple_key := &parser.simple_keys[len(parser.simple_keys)-1]

	// Have we found a simple key?
	if valid, ok := yaml_simple_key_is_valid(parser, simple_key); !ok {
		return false

	} else if valid {

		// Create the KEY token and insert it into the queue.
		token := yaml_token_t{
			typ:        yaml_KEY_TOKEN,
			start_mark: simple_key.mark,
			end_mark:   simple_key.mark,
		}
		yaml_insert_token(parser, simple_key.token_number-parser.tokens_parsed, &token)

		// In the block context, we may need to add the BLOCK-MAPPING-START token.
		if !yaml_parser_roll_indent(parser, simple_key.mark.column,
			simple_key.token_number,
			yaml_BLOCK_MAPPING_START_TOKEN, simple_key.mark) {
			return false
		}

		// Remove the simple key.
		simple_key.possible = false
		delete(parser.simple_keys_by_tok, simple_key.token_number)

		// A simple key cannot follow another simple key.
		parser.simple_key_allowed = false

	} else {
		// The ':' indicator follows a complex key.

		// In the block context, extra checks are required.
		if parser.flow_level == 0 {

			// Check if we are allowed to start a complex value.
			if !parser.simple_key_allowed {
				return yaml_parser_set_scanner_error(parser, "", parser.mark,
					"mapping values are not allowed in this context")
			}

			// Add the BLOCK-MAPPING-START token if needed.
			if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) {
				return false
			}
		}

		// Simple keys after ':' are allowed in the block context.
		parser.simple_key_allowed = parser.flow_level == 0
	}

	// Consume the token.
	start_mark := parser.mark
	skip(parser)
	end_mark := parser.mark

	// Create the VALUE token and append it to the queue.
	token := yaml_token_t{
		typ:        yaml_VALUE_TOKEN,
		start_mark: start_mark,
		end_mark:   end_mark,
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the ALIAS or ANCHOR token.
func yaml_parser_fetch_anchor(parser *yaml_parser_t, typ yaml_token_type_t) bool {
	// An anchor or an alias could be a simple key.
	if !yaml_parser_save_simple_key(parser) {
		return false
	}

	// A simple key cannot follow an anchor or an alias.
	parser.simple_key_allowed = false

	// Create the ALIAS or ANCHOR token and append it to the queue.
	var token yaml_token_t
	if !yaml_parser_scan_anchor(parser, &token, typ) {
		return false
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the TAG token.
func yaml_parser_fetch_tag(parser *yaml_parser_t) bool {
	// A tag could be a simple key.
	if !yaml_parser_save_simple_key(parser) {
		return false
	}

	// A simple key cannot follow a tag.
	parser.simple_key_allowed = false

	// Create the TAG token and append it to the queue.
	var token yaml_token_t
	if !yaml_parser_scan_tag(parser, &token) {
		return false
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the SCALAR(...,literal) or SCALAR(...,folded) tokens.
func yaml_parser_fetch_block_scalar(parser *yaml_parser_t, literal bool) bool {
	// Remove any potential simple keys.
	if !yaml_parser_remove_simple_key(parser) {
		return false
	}

	// A simple key may follow a block scalar.
	parser.simple_key_allowed = true

	// Create the SCALAR token and append it to the queue.
	var token yaml_token_t
	if !yaml_parser_scan_block_scalar(parser, &token, literal) {
		return false
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the SCALAR(...,single-quoted) or SCALAR(...,double-quoted) tokens.
func yaml_parser_fetch_flow_scalar(parser *yaml_parser_t, single bool) bool {
	// A plain scalar could be a simple key.
	if !yaml_parser_save_simple_key(parser) {
		return false
	}

	// A simple key cannot follow a flow scalar.
	parser.simple_key_allowed = false

	// Create the SCALAR token and append it to the queue.
	var token yaml_token_t
	if !yaml_parser_scan_flow_scalar(parser, &token, single) {
		return false
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Produce the SCALAR(...,plain) token.
func yaml_parser_fetch_plain_scalar(parser *yaml_parser_t) bool {
	// A plain scalar could be a simple key.
	if !yaml_parser_save_simple_key(parser) {
		return false
	}

	// A simple key cannot follow a flow scalar.
	parser.simple_key_allowed = false

	// Create the SCALAR token and append it to the queue.
	var token yaml_token_t
	if !yaml_parser_scan_plain_scalar(parser, &token) {
		return false
	}
	yaml_insert_token(parser, -1, &token)
	return true
}

// Eat whitespaces and comments until the next token is found.
func yaml_parser_scan_to_next_token(parser *yaml_parser_t) bool {

	scan_mark := parser.mark

	// Until the next token is not found.
	for {
		// Allow the BOM mark to start a line.
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
		if parser.mark.column == 0 && is_bom(parser.buffer, parser.buffer_pos) {
			skip(parser)
		}

		// Eat whitespaces.
		// Tabs are allowed:
		//  - in the flow context
		//  - in the block context, but not at the beginning of the line or
		//  after '-', '?', or ':' (complex value).
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}

		for parser.buffer[parser.buffer_pos] == ' ' || ((parser.flow_level > 0 || !parser.simple_key_allowed) && parser.buffer[parser.buffer_pos] == '\t') {
			skip(parser)
			if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
				return false
			}
		}

		// Check if we just had a line comment under a sequence entry that
		// looks more like a header to the following content. Similar to this:
		//
		// - # The comment
		//   - Some data
		//
		// If so, transform the line comment to a head comment and reposition.
		if len(parser.comments) > 0 && len(parser.tokens) > 1 {
			tokenA := parser.tokens[len(parser.tokens)-2]
			tokenB := parser.tokens[len(parser.tokens)-1]
			comment := &parser.comments[len(parser.comments)-1]
			if tokenA.typ == yaml_BLOCK_SEQUENCE_START_TOKEN && tokenB.typ == yaml_BLOCK_ENTRY_TOKEN && len(comment.line) > 0 && !is_break(parser.buffer, parser.buffer_pos) {
				// If it was in the prior line, reposition so it becomes a
				// header of the follow up token. Otherwise, keep it in place
				// so it becomes a header of the former.
				comment.head = comment.line
				comment.line = nil
				if comment.start_mark.line == parser.mark.line-1 {
					comment.token_mark = parser.mark
				}
			}
		}

		// Eat a comment until a line break.
		if parser.buffer[parser.buffer_pos] == '#' {
			if !yaml_parser_scan_comments(parser, scan_mark) {
				return false
			}
		}

		// If it is a line break, eat it.
		if is_break(parser.buffer, parser.buffer_pos) {
			if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
				return false
			}
			skip_line(parser)

			// In the block context, a new line may start a simple key.
			if parser.flow_level == 0 {
				parser.simple_key_allowed = true
			}
		} else {
			break // We have found a token.
		}
	}

	return true
}

// Scan a YAML-DIRECTIVE or TAG-DIRECTIVE token.
//
// Scope:
//      %YAML    1.1    # a comment \n
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//      %TAG    !yaml!  tag:yaml.org,2002:  \n
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
func yaml_parser_scan_directive(parser *yaml_parser_t, token *yaml_token_t) bool {
	// Eat '%'.
	start_mark := parser.mark
	skip(parser)

	// Scan the directive name.
	var name []byte
	if !yaml_parser_scan_directive_name(parser, start_mark, &name) {
		return false
	}

	// Is it a YAML directive?
	if bytes.Equal(name, []byte("YAML")) {
		// Scan the VERSION directive value.
		var major, minor int8
		if !yaml_parser_scan_version_directive_value(parser, start_mark, &major, &minor) {
			return false
		}
		end_mark := parser.mark

		// Create a VERSION-DIRECTIVE token.
		*token = yaml_token_t{
			typ:        yaml_VERSION_DIRECTIVE_TOKEN,
			start_mark: start_mark,
			end_mark:   end_mark,
			major:      major,
			minor:      minor,
		}

		// Is it a TAG directive?
	} else if bytes.Equal(name, []byte("TAG")) {
		// Scan the TAG directive value.
		var handle, prefix []byte
		if !yaml_parser_scan_tag_directive_value(parser, start_mark, &handle, &prefix) {
			return false
		}
		end_mark := parser.mark

		// Create a TAG-DIRECTIVE token.
		*token = yaml_token_t{
			typ:        yaml_TAG_DIRECTIVE_TOKEN,
			start_mark: start_mark,
			end_mark:   end_mark,
			value:      handle,
			prefix:     prefix,
		}

		// Unknown directive.
	} else {
		yaml_parser_set_scanner_error(parser, "while scanning a directive",
			start_mark, "found unknown directive name")
		return false
	}

	// Eat the rest of the line including any comments.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}

	for is_blank(parser.buffer, parser.buffer_pos) {
		skip(parser)
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}

	if parser.buffer[parser.buffer_pos] == '#' {
		// [Go] Discard this inline comment for the time being.
		//if !yaml_parser_scan_line_comment(parser, start_mark) {
		//	return false
		//}
		for !is_breakz(parser.buffer, parser.buffer_pos) {
			skip(parser)
			if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
				return false
			}
		}
	}

	// Check if we are at the end of the line.
	if !is_breakz(parser.buffer, parser.buffer_pos) {
		yaml_parser_set_scanner_error(parser, "while scanning a directive",
			start_mark, "did not find expected comment or line break")
		return false
	}

	// Eat a line break.
	if is_break(parser.buffer, parser.buffer_pos) {
		if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
			return false
		}
		skip_line(parser)
	}

	return true
}

// Scan the directive name.
//
// Scope:
//      %YAML   1.1     # a comment \n
//       ^^^^
//      %TAG    !yaml!  tag:yaml.org,2002:  \n
//       ^^^
//
func yaml_parser_scan_directive_name(parser *yaml_parser_t, start_mark yaml_mark_t, name *[]byte) bool {
	// Consume the directive name.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}

	var s []byte
	for is_alpha(parser.buffer, parser.buffer_pos) {
		s = read(parser, s)
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}

	// Check if the name is empty.
	if len(s) == 0 {
		yaml_parser_set_scanner_error(parser, "while scanning a directive",
			start_mark, "could not find expected directive name")
		return false
	}

	// Check for an blank character after the name.
	if !is_blankz(parser.buffer, parser.buffer_pos) {
		yaml_parser_set_scanner_error(parser, "while scanning a directive",
			start_mark, "found unexpected non-alphabetical character")
		return false
	}
	*name = s
	return true
}

// Scan the value of VERSION-DIRECTIVE.
//
// Scope:
//      %YAML   1.1     # a comment \n
//           ^^^^^^
func yaml_parser_scan_version_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, major, minor *int8) bool {
	// Eat whitespaces.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}
	for is_blank(parser.buffer, parser.buffer_pos) {
		skip(parser)
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}

	// Consume the major version number.
	if !yaml_parser_scan_version_directive_number(parser, start_mark, major) {
		return false
	}

	// Eat '.'.
	if parser.buffer[parser.buffer_pos] != '.' {
		return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive",
			start_mark, "did not find expected digit or '.' character")
	}

	skip(parser)

	// Consume the minor version number.
	if !yaml_parser_scan_version_directive_number(parser, start_mark, minor) {
		return false
	}
	return true
}

const max_number_length = 2

// Scan the version number of VERSION-DIRECTIVE.
//
// Scope:
//      %YAML   1.1     # a comment \n
//              ^
//      %YAML   1.1     # a comment \n
//                ^
func yaml_parser_scan_version_directive_number(parser *yaml_parser_t, start_mark yaml_mark_t, number *int8) bool {

	// Repeat while the next character is digit.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}
	var value, length int8
	for is_digit(parser.buffer, parser.buffer_pos) {
		// Check if the number is too long.
		length++
		if length > max_number_length {
			return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive",
				start_mark, "found extremely long version number")
		}
		value = value*10 + int8(as_digit(parser.buffer, parser.buffer_pos))
		skip(parser)
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}

	// Check if the number was present.
	if length == 0 {
		return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive",
			start_mark, "did not find expected version number")
	}
	*number = value
	return true
}

// Scan the value of a TAG-DIRECTIVE token.
//
// Scope:
//      %TAG    !yaml!  tag:yaml.org,2002:  \n
//          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
func yaml_parser_scan_tag_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, handle, prefix *[]byte) bool {
	var handle_value, prefix_value []byte

	// Eat whitespaces.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}

	for is_blank(parser.buffer, parser.buffer_pos) {
		skip(parser)
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}

	// Scan a handle.
	if !yaml_parser_scan_tag_handle(parser, true, start_mark, &handle_value) {
		return false
	}

	// Expect a whitespace.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}
	if !is_blank(parser.buffer, parser.buffer_pos) {
		yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive",
			start_mark, "did not find expected whitespace")
		return false
	}

	// Eat whitespaces.
	for is_blank(parser.buffer, parser.buffer_pos) {
		skip(parser)
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}

	// Scan a prefix.
	if !yaml_parser_scan_tag_uri(parser, true, nil, start_mark, &prefix_value) {
		return false
	}

	// Expect a whitespace or line break.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}
	if !is_blankz(parser.buffer, parser.buffer_pos) {
		yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive",
			start_mark, "did not find expected whitespace or line break")
		return false
	}

	*handle = handle_value
	*prefix = prefix_value
	return true
}

func yaml_parser_scan_anchor(parser *yaml_parser_t, token *yaml_token_t, typ yaml_token_type_t) bool {
	var s []byte

	// Eat the indicator character.
	start_mark := parser.mark
	skip(parser)

	// Consume the value.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}

	for is_alpha(parser.buffer, parser.buffer_pos) {
		s = read(parser, s)
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}

	end_mark := parser.mark

	/*
	 * Check if length of the anchor is greater than 0 and it is followed by
	 * a whitespace character or one of the indicators:
	 *
	 *      '?', ':', ',', ']', '}', '%', '@', '`'.
	 */

	if len(s) == 0 ||
		!(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '?' ||
			parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == ',' ||
			parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '}' ||
			parser.buffer[parser.buffer_pos] == '%' || parser.buffer[parser.buffer_pos] == '@' ||
			parser.buffer[parser.buffer_pos] == '`') {
		context := "while scanning an alias"
		if typ == yaml_ANCHOR_TOKEN {
			context = "while scanning an anchor"
		}
		yaml_parser_set_scanner_error(parser, context, start_mark,
			"did not find expected alphabetic or numeric character")
		return false
	}

	// Create a token.
	*token = yaml_token_t{
		typ:        typ,
		start_mark: start_mark,
		end_mark:   end_mark,
		value:      s,
	}

	return true
}

/*
 * Scan a TAG token.
 */

func yaml_parser_scan_tag(parser *yaml_parser_t, token *yaml_token_t) bool {
	var handle, suffix []byte

	start_mark := parser.mark

	// Check if the tag is in the canonical form.
	if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
		return false
	}

	if parser.buffer[parser.buffer_pos+1] == '<' {
		// Keep the handle as ''

		// Eat '!<'
		skip(parser)
		skip(parser)

		// Consume the tag value.
		if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) {
			return false
		}

		// Check for '>' and eat it.
		if parser.buffer[parser.buffer_pos] != '>' {
			yaml_parser_set_scanner_error(parser, "while scanning a tag",
				start_mark, "did not find the expected '>'")
			return false
		}

		skip(parser)
	} else {
		// The tag has either the '!suffix' or the '!handle!suffix' form.

		// First, try to scan a handle.
		if !yaml_parser_scan_tag_handle(parser, false, start_mark, &handle) {
			return false
		}

		// Check if it is, indeed, handle.
		if handle[0] == '!' && len(handle) > 1 && handle[len(handle)-1] == '!' {
			// Scan the suffix now.
			if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) {
				return false
			}
		} else {
			// It wasn't a handle after all.  Scan the rest of the tag.
			if !yaml_parser_scan_tag_uri(parser, false, handle, start_mark, &suffix) {
				return false
			}

			// Set the handle to '!'.
			handle = []byte{'!'}

			// A special case: the '!' tag.  Set the handle to '' and the
			// suffix to '!'.
			if len(suffix) == 0 {
				handle, suffix = suffix, handle
			}
		}
	}

	// Check the character which ends the tag.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}
	if !is_blankz(parser.buffer, parser.buffer_pos) {
		yaml_parser_set_scanner_error(parser, "while scanning a tag",
			start_mark, "did not find expected whitespace or line break")
		return false
	}

	end_mark := parser.mark

	// Create a token.
	*token = yaml_token_t{
		typ:        yaml_TAG_TOKEN,
		start_mark: start_mark,
		end_mark:   end_mark,
		value:      handle,
		suffix:     suffix,
	}
	return true
}

// Scan a tag handle.
func yaml_parser_scan_tag_handle(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, handle *[]byte) bool {
	// Check the initial '!' character.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}
	if parser.buffer[parser.buffer_pos] != '!' {
		yaml_parser_set_scanner_tag_error(parser, directive,
			start_mark, "did not find expected '!'")
		return false
	}

	var s []byte

	// Copy the '!' character.
	s = read(parser, s)

	// Copy all subsequent alphabetical and numerical characters.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}
	for is_alpha(parser.buffer, parser.buffer_pos) {
		s = read(parser, s)
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}

	// Check if the trailing character is '!' and copy it.
	if parser.buffer[parser.buffer_pos] == '!' {
		s = read(parser, s)
	} else {
		// It's either the '!' tag or not really a tag handle.  If it's a %TAG
		// directive, it's an error.  If it's a tag token, it must be a part of URI.
		if directive && string(s) != "!" {
			yaml_parser_set_scanner_tag_error(parser, directive,
				start_mark, "did not find expected '!'")
			return false
		}
	}

	*handle = s
	return true
}

// Scan a tag.
func yaml_parser_scan_tag_uri(parser *yaml_parser_t, directive bool, head []byte, start_mark yaml_mark_t, uri *[]byte) bool {
	//size_t length = head ? strlen((char *)head) : 0
	var s []byte
	hasTag := len(head) > 0

	// Copy the head if needed.
	//
	// Note that we don't copy the leading '!' character.
	if len(head) > 1 {
		s = append(s, head[1:]...)
	}

	// Scan the tag.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}

	// The set of characters that may appear in URI is as follows:
	//
	//      '0'-'9', 'A'-'Z', 'a'-'z', '_', '-', ';', '/', '?', ':', '@', '&',
	//      '=', '+', '$', ',', '.', '!', '~', '*', '\'', '(', ')', '[', ']',
	//      '%'.
	// [Go] TODO Convert this into more reasonable logic.
	for is_alpha(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == ';' ||
		parser.buffer[parser.buffer_pos] == '/' || parser.buffer[parser.buffer_pos] == '?' ||
		parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == '@' ||
		parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '=' ||
		parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '$' ||
		parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '.' ||
		parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '~' ||
		parser.buffer[parser.buffer_pos] == '*' || parser.buffer[parser.buffer_pos] == '\'' ||
		parser.buffer[parser.buffer_pos] == '(' || parser.buffer[parser.buffer_pos] == ')' ||
		parser.buffer[parser.buffer_pos] == '[' || parser.buffer[parser.buffer_pos] == ']' ||
		parser.buffer[parser.buffer_pos] == '%' {
		// Check if it is a URI-escape sequence.
		if parser.buffer[parser.buffer_pos] == '%' {
			if !yaml_parser_scan_uri_escapes(parser, directive, start_mark, &s) {
				return false
			}
		} else {
			s = read(parser, s)
		}
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
		hasTag = true
	}

	if !hasTag {
		yaml_parser_set_scanner_tag_error(parser, directive,
			start_mark, "did not find expected tag URI")
		return false
	}
	*uri = s
	return true
}

// Decode an URI-escape sequence corresponding to a single UTF-8 character.
func yaml_parser_scan_uri_escapes(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, s *[]byte) bool {

	// Decode the required number of characters.
	w := 1024
	for w > 0 {
		// Check for a URI-escaped octet.
		if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) {
			return false
		}

		if !(parser.buffer[parser.buffer_pos] == '%' &&
			is_hex(parser.buffer, parser.buffer_pos+1) &&
			is_hex(parser.buffer, parser.buffer_pos+2)) {
			return yaml_parser_set_scanner_tag_error(parser, directive,
				start_mark, "did not find URI escaped octet")
		}

		// Get the octet.
		octet := byte((as_hex(parser.buffer, parser.buffer_pos+1) << 4) + as_hex(parser.buffer, parser.buffer_pos+2))

		// If it is the leading octet, determine the length of the UTF-8 sequence.
		if w == 1024 {
			w = width(octet)
			if w == 0 {
				return yaml_parser_set_scanner_tag_error(parser, directive,
					start_mark, "found an incorrect leading UTF-8 octet")
			}
		} else {
			// Check if the trailing octet is correct.
			if octet&0xC0 != 0x80 {
				return yaml_parser_set_scanner_tag_error(parser, directive,
					start_mark, "found an incorrect trailing UTF-8 octet")
			}
		}

		// Copy the octet and move the pointers.
		*s = append(*s, octet)
		skip(parser)
		skip(parser)
		skip(parser)
		w--
	}
	return true
}

// Scan a block scalar.
func yaml_parser_scan_block_scalar(parser *yaml_parser_t, token *yaml_token_t, literal bool) bool {
	// Eat the indicator '|' or '>'.
	start_mark := parser.mark
	skip(parser)

	// Scan the additional block scalar indicators.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}

	// Check for a chomping indicator.
	var chomping, increment int
	if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' {
		// Set the chomping method and eat the indicator.
		if parser.buffer[parser.buffer_pos] == '+' {
			chomping = +1
		} else {
			chomping = -1
		}
		skip(parser)

		// Check for an indentation indicator.
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
		if is_digit(parser.buffer, parser.buffer_pos) {
			// Check that the indentation is greater than 0.
			if parser.buffer[parser.buffer_pos] == '0' {
				yaml_parser_set_scanner_error(parser, "while scanning a block scalar",
					start_mark, "found an indentation indicator equal to 0")
				return false
			}

			// Get the indentation level and eat the indicator.
			increment = as_digit(parser.buffer, parser.buffer_pos)
			skip(parser)
		}

	} else if is_digit(parser.buffer, parser.buffer_pos) {
		// Do the same as above, but in the opposite order.

		if parser.buffer[parser.buffer_pos] == '0' {
			yaml_parser_set_scanner_error(parser, "while scanning a block scalar",
				start_mark, "found an indentation indicator equal to 0")
			return false
		}
		increment = as_digit(parser.buffer, parser.buffer_pos)
		skip(parser)

		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
		if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' {
			if parser.buffer[parser.buffer_pos] == '+' {
				chomping = +1
			} else {
				chomping = -1
			}
			skip(parser)
		}
	}

	// Eat whitespaces and comments to the end of the line.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}
	for is_blank(parser.buffer, parser.buffer_pos) {
		skip(parser)
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
	}
	if parser.buffer[parser.buffer_pos] == '#' {
		if !yaml_parser_scan_line_comment(parser, start_mark) {
			return false
		}
		for !is_breakz(parser.buffer, parser.buffer_pos) {
			skip(parser)
			if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
				return false
			}
		}
	}

	// Check if we are at the end of the line.
	if !is_breakz(parser.buffer, parser.buffer_pos) {
		yaml_parser_set_scanner_error(parser, "while scanning a block scalar",
			start_mark, "did not find expected comment or line break")
		return false
	}

	// Eat a line break.
	if is_break(parser.buffer, parser.buffer_pos) {
		if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
			return false
		}
		skip_line(parser)
	}

	end_mark := parser.mark

	// Set the indentation level if it was specified.
	var indent int
	if increment > 0 {
		if parser.indent >= 0 {
			indent = parser.indent + increment
		} else {
			indent = increment
		}
	}

	// Scan the leading line breaks and determine the indentation level if needed.
	var s, leading_break, trailing_breaks []byte
	if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) {
		return false
	}

	// Scan the block scalar content.
	if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
		return false
	}
	var leading_blank, trailing_blank bool
	for parser.mark.column == indent && !is_z(parser.buffer, parser.buffer_pos) {
		// We are at the beginning of a non-empty line.

		// Is it a trailing whitespace?
		trailing_blank = is_blank(parser.buffer, parser.buffer_pos)

		// Check if we need to fold the leading line break.
		if !literal && !leading_blank && !trailing_blank && len(leading_break) > 0 && leading_break[0] == '\n' {
			// Do we need to join the lines by space?
			if len(trailing_breaks) == 0 {
				s = append(s, ' ')
			}
		} else {
			s = append(s, leading_break...)
		}
		leading_break = leading_break[:0]

		// Append the remaining line breaks.
		s = append(s, trailing_breaks...)
		trailing_breaks = trailing_breaks[:0]

		// Is it a leading whitespace?
		leading_blank = is_blank(parser.buffer, parser.buffer_pos)

		// Consume the current line.
		for !is_breakz(parser.buffer, parser.buffer_pos) {
			s = read(parser, s)
			if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
				return false
			}
		}

		// Consume the line break.
		if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
			return false
		}

		leading_break = read_line(parser, leading_break)

		// Eat the following indentation spaces and line breaks.
		if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) {
			return false
		}
	}

	// Chomp the tail.
	if chomping != -1 {
		s = append(s, leading_break...)
	}
	if chomping == 1 {
		s = append(s, trailing_breaks...)
	}

	// Create a token.
	*token = yaml_token_t{
		typ:        yaml_SCALAR_TOKEN,
		start_mark: start_mark,
		end_mark:   end_mark,
		value:      s,
		style:      yaml_LITERAL_SCALAR_STYLE,
	}
	if !literal {
		token.style = yaml_FOLDED_SCALAR_STYLE
	}
	return true
}

// Scan indentation spaces and line breaks for a block scalar.  Determine the
// indentation level if needed.
func yaml_parser_scan_block_scalar_breaks(parser *yaml_parser_t, indent *int, breaks *[]byte, start_mark yaml_mark_t, end_mark *yaml_mark_t) bool {
	*end_mark = parser.mark

	// Eat the indentation spaces and line breaks.
	max_indent := 0
	for {
		// Eat the indentation spaces.
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}
		for (*indent == 0 || parser.mark.column < *indent) && is_space(parser.buffer, parser.buffer_pos) {
			skip(parser)
			if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
				return false
			}
		}
		if parser.mark.column > max_indent {
			max_indent = parser.mark.column
		}

		// Check for a tab character messing the indentation.
		if (*indent == 0 || parser.mark.column < *indent) && is_tab(parser.buffer, parser.buffer_pos) {
			return yaml_parser_set_scanner_error(parser, "while scanning a block scalar",
				start_mark, "found a tab character where an indentation space is expected")
		}

		// Have we found a non-empty line?
		if !is_break(parser.buffer, parser.buffer_pos) {
			break
		}

		// Consume the line break.
		if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
			return false
		}
		// [Go] Should really be returning breaks instead.
		*breaks = read_line(parser, *breaks)
		*end_mark = parser.mark
	}

	// Determine the indentation level if needed.
	if *indent == 0 {
		*indent = max_indent
		if *indent < parser.indent+1 {
			*indent = parser.indent + 1
		}
		if *indent < 1 {
			*indent = 1
		}
	}
	return true
}

// Scan a quoted scalar.
func yaml_parser_scan_flow_scalar(parser *yaml_parser_t, token *yaml_token_t, single bool) bool {
	// Eat the left quote.
	start_mark := parser.mark
	skip(parser)

	// Consume the content of the quoted scalar.
	var s, leading_break, trailing_breaks, whitespaces []byte
	for {
		// Check that there are no document indicators at the beginning of the line.
		if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) {
			return false
		}

		if parser.mark.column == 0 &&
			((parser.buffer[parser.buffer_pos+0] == '-' &&
				parser.buffer[parser.buffer_pos+1] == '-' &&
				parser.buffer[parser.buffer_pos+2] == '-') ||
				(parser.buffer[parser.buffer_pos+0] == '.' &&
					parser.buffer[parser.buffer_pos+1] == '.' &&
					parser.buffer[parser.buffer_pos+2] == '.')) &&
			is_blankz(parser.buffer, parser.buffer_pos+3) {
			yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar",
				start_mark, "found unexpected document indicator")
			return false
		}

		// Check for EOF.
		if is_z(parser.buffer, parser.buffer_pos) {
			yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar",
				start_mark, "found unexpected end of stream")
			return false
		}

		// Consume non-blank characters.
		leading_blanks := false
		for !is_blankz(parser.buffer, parser.buffer_pos) {
			if single && parser.buffer[parser.buffer_pos] == '\'' && parser.buffer[parser.buffer_pos+1] == '\'' {
				// Is is an escaped single quote.
				s = append(s, '\'')
				skip(parser)
				skip(parser)

			} else if single && parser.buffer[parser.buffer_pos] == '\'' {
				// It is a right single quote.
				break
			} else if !single && parser.buffer[parser.buffer_pos] == '"' {
				// It is a right double quote.
				break

			} else if !single && parser.buffer[parser.buffer_pos] == '\\' && is_break(parser.buffer, parser.buffer_pos+1) {
				// It is an escaped line break.
				if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) {
					return false
				}
				skip(parser)
				skip_line(parser)
				leading_blanks = true
				break

			} else if !single && parser.buffer[parser.buffer_pos] == '\\' {
				// It is an escape sequence.
				code_length := 0

				// Check the escape character.
				switch parser.buffer[parser.buffer_pos+1] {
				case '0':
					s = append(s, 0)
				case 'a':
					s = append(s, '\x07')
				case 'b':
					s = append(s, '\x08')
				case 't', '\t':
					s = append(s, '\x09')
				case 'n':
					s = append(s, '\x0A')
				case 'v':
					s = append(s, '\x0B')
				case 'f':
					s = append(s, '\x0C')
				case 'r':
					s = append(s, '\x0D')
				case 'e':
					s = append(s, '\x1B')
				case ' ':
					s = append(s, '\x20')
				case '"':
					s = append(s, '"')
				case '\'':
					s = append(s, '\'')
				case '\\':
					s = append(s, '\\')
				case 'N': // NEL (#x85)
					s = append(s, '\xC2')
					s = append(s, '\x85')
				case '_': // #xA0
					s = append(s, '\xC2')
					s = append(s, '\xA0')
				case 'L': // LS (#x2028)
					s = append(s, '\xE2')
					s = append(s, '\x80')
					s = append(s, '\xA8')
				case 'P': // PS (#x2029)
					s = append(s, '\xE2')
					s = append(s, '\x80')
					s = append(s, '\xA9')
				case 'x':
					code_length = 2
				case 'u':
					code_length = 4
				case 'U':
					code_length = 8
				default:
					yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar",
						start_mark, "found unknown escape character")
					return false
				}

				skip(parser)
				skip(parser)

				// Consume an arbitrary escape code.
				if code_length > 0 {
					var value int

					// Scan the character value.
					if parser.unread < code_length && !yaml_parser_update_buffer(parser, code_length) {
						return false
					}
					for k := 0; k < code_length; k++ {
						if !is_hex(parser.buffer, parser.buffer_pos+k) {
							yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar",
								start_mark, "did not find expected hexdecimal number")
							return false
						}
						value = (value << 4) + as_hex(parser.buffer, parser.buffer_pos+k)
					}

					// Check the value and write the character.
					if (value >= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF {
						yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar",
							start_mark, "found invalid Unicode character escape code")
						return false
					}
					if value <= 0x7F {
						s = append(s, byte(value))
					} else if value <= 0x7FF {
						s = append(s, byte(0xC0+(value>>6)))
						s = append(s, byte(0x80+(value&0x3F)))
					} else if value <= 0xFFFF {
						s = append(s, byte(0xE0+(value>>12)))
						s = append(s, byte(0x80+((value>>6)&0x3F)))
						s = append(s, byte(0x80+(value&0x3F)))
					} else {
						s = append(s, byte(0xF0+(value>>18)))
						s = append(s, byte(0x80+((value>>12)&0x3F)))
						s = append(s, byte(0x80+((value>>6)&0x3F)))
						s = append(s, byte(0x80+(value&0x3F)))
					}

					// Advance the pointer.
					for k := 0; k < code_length; k++ {
						skip(parser)
					}
				}
			} else {
				// It is a non-escaped non-blank character.
				s = read(parser, s)
			}
			if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
				return false
			}
		}

		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}

		// Check if we are at the end of the scalar.
		if single {
			if parser.buffer[parser.buffer_pos] == '\'' {
				break
			}
		} else {
			if parser.buffer[parser.buffer_pos] == '"' {
				break
			}
		}

		// Consume blank characters.
		for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) {
			if is_blank(parser.buffer, parser.buffer_pos) {
				// Consume a space or a tab character.
				if !leading_blanks {
					whitespaces = read(parser, whitespaces)
				} else {
					skip(parser)
				}
			} else {
				if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
					return false
				}

				// Check if it is a first line break.
				if !leading_blanks {
					whitespaces = whitespaces[:0]
					leading_break = read_line(parser, leading_break)
					leading_blanks = true
				} else {
					trailing_breaks = read_line(parser, trailing_breaks)
				}
			}
			if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
				return false
			}
		}

		// Join the whitespaces or fold line breaks.
		if leading_blanks {
			// Do we need to fold line breaks?
			if len(leading_break) > 0 && leading_break[0] == '\n' {
				if len(trailing_breaks) == 0 {
					s = append(s, ' ')
				} else {
					s = append(s, trailing_breaks...)
				}
			} else {
				s = append(s, leading_break...)
				s = append(s, trailing_breaks...)
			}
			trailing_breaks = trailing_breaks[:0]
			leading_break = leading_break[:0]
		} else {
			s = append(s, whitespaces...)
			whitespaces = whitespaces[:0]
		}
	}

	// Eat the right quote.
	skip(parser)
	end_mark := parser.mark

	// Create a token.
	*token = yaml_token_t{
		typ:        yaml_SCALAR_TOKEN,
		start_mark: start_mark,
		end_mark:   end_mark,
		value:      s,
		style:      yaml_SINGLE_QUOTED_SCALAR_STYLE,
	}
	if !single {
		token.style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
	}
	return true
}

// Scan a plain scalar.
func yaml_parser_scan_plain_scalar(parser *yaml_parser_t, token *yaml_token_t) bool {

	var s, leading_break, trailing_breaks, whitespaces []byte
	var leading_blanks bool
	var indent = parser.indent + 1

	start_mark := parser.mark
	end_mark := parser.mark

	// Consume the content of the plain scalar.
	for {
		// Check for a document indicator.
		if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) {
			return false
		}
		if parser.mark.column == 0 &&
			((parser.buffer[parser.buffer_pos+0] == '-' &&
				parser.buffer[parser.buffer_pos+1] == '-' &&
				parser.buffer[parser.buffer_pos+2] == '-') ||
				(parser.buffer[parser.buffer_pos+0] == '.' &&
					parser.buffer[parser.buffer_pos+1] == '.' &&
					parser.buffer[parser.buffer_pos+2] == '.')) &&
			is_blankz(parser.buffer, parser.buffer_pos+3) {
			break
		}

		// Check for a comment.
		if parser.buffer[parser.buffer_pos] == '#' {
			break
		}

		// Consume non-blank characters.
		for !is_blankz(parser.buffer, parser.buffer_pos) {

			// Check for indicators that may end a plain scalar.
			if (parser.buffer[parser.buffer_pos] == ':' && is_blankz(parser.buffer, parser.buffer_pos+1)) ||
				(parser.flow_level > 0 &&
					(parser.buffer[parser.buffer_pos] == ',' ||
						parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == '[' ||
						parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' ||
						parser.buffer[parser.buffer_pos] == '}')) {
				break
			}

			// Check if we need to join whitespaces and breaks.
			if leading_blanks || len(whitespaces) > 0 {
				if leading_blanks {
					// Do we need to fold line breaks?
					if leading_break[0] == '\n' {
						if len(trailing_breaks) == 0 {
							s = append(s, ' ')
						} else {
							s = append(s, trailing_breaks...)
						}
					} else {
						s = append(s, leading_break...)
						s = append(s, trailing_breaks...)
					}
					trailing_breaks = trailing_breaks[:0]
					leading_break = leading_break[:0]
					leading_blanks = false
				} else {
					s = append(s, whitespaces...)
					whitespaces = whitespaces[:0]
				}
			}

			// Copy the character.
			s = read(parser, s)

			end_mark = parser.mark
			if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
				return false
			}
		}

		// Is it the end?
		if !(is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos)) {
			break
		}

		// Consume blank characters.
		if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
			return false
		}

		for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) {
			if is_blank(parser.buffer, parser.buffer_pos) {

				// Check for tab characters that abuse indentation.
				if leading_blanks && parser.mark.column < indent && is_tab(parser.buffer, parser.buffer_pos) {
					yaml_parser_set_scanner_error(parser, "while scanning a plain scalar",
						start_mark, "found a tab character that violates indentation")
					return false
				}

				// Consume a space or a tab character.
				if !leading_blanks {
					whitespaces = read(parser, whitespaces)
				} else {
					skip(parser)
				}
			} else {
				if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
					return false
				}

				// Check if it is a first line break.
				if !leading_blanks {
					whitespaces = whitespaces[:0]
					leading_break = read_line(parser, leading_break)
					leading_blanks = true
				} else {
					trailing_breaks = read_line(parser, trailing_breaks)
				}
			}
			if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
				return false
			}
		}

		// Check indentation level.
		if parser.flow_level == 0 && parser.mark.column < indent {
			break
		}
	}

	// Create a token.
	*token = yaml_token_t{
		typ:        yaml_SCALAR_TOKEN,
		start_mark: start_mark,
		end_mark:   end_mark,
		value:      s,
		style:      yaml_PLAIN_SCALAR_STYLE,
	}

	// Note that we change the 'simple_key_allowed' flag.
	if leading_blanks {
		parser.simple_key_allowed = true
	}
	return true
}

func yaml_parser_scan_line_comment(parser *yaml_parser_t, token_mark yaml_mark_t) bool {
	if parser.newlines > 0 {
		return true
	}

	var start_mark yaml_mark_t
	var text []byte

	for peek := 0; peek < 512; peek++ {
		if parser.unread < peek+1 && !yaml_parser_update_buffer(parser, peek+1) {
			break
		}
		if is_blank(parser.buffer, parser.buffer_pos+peek) {
			continue
		}
		if parser.buffer[parser.buffer_pos+peek] == '#' {
			seen := parser.mark.index+peek
			for {
				if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
					return false
				}
				if is_breakz(parser.buffer, parser.buffer_pos) {
					if parser.mark.index >= seen {
						break
					}
					if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
						return false
					}
					skip_line(parser)
				} else if parser.mark.index >= seen {
					if len(text) == 0 {
						start_mark = parser.mark
					}
					text = read(parser, text)
				} else {
					skip(parser)
				}
			}
		}
		break
	}
	if len(text) > 0 {
		parser.comments = append(parser.comments, yaml_comment_t{
			token_mark: token_mark,
			start_mark: start_mark,
			line: text,
		})
	}
	return true
}

func yaml_parser_scan_comments(parser *yaml_parser_t, scan_mark yaml_mark_t) bool {
	token := parser.tokens[len(parser.tokens)-1]

	if token.typ == yaml_FLOW_ENTRY_TOKEN && len(parser.tokens) > 1 {
		token = parser.tokens[len(parser.tokens)-2]
	}

	var token_mark = token.start_mark
	var start_mark yaml_mark_t
	var next_indent = parser.indent
	if next_indent < 0 {
		next_indent = 0
	}

	var recent_empty = false
	var first_empty = parser.newlines <= 1

	var line = parser.mark.line
	var column = parser.mark.column

	var text []byte

	// The foot line is the place where a comment must start to
	// still be considered as a foot of the prior content.
	// If there's some content in the currently parsed line, then
	// the foot is the line below it.
	var foot_line = -1
	if scan_mark.line > 0 {
		foot_line = parser.mark.line-parser.newlines+1
		if parser.newlines == 0 && parser.mark.column > 1 {
			foot_line++
		}
	}

	var peek = 0
	for ; peek < 512; peek++ {
		if parser.unread < peek+1 && !yaml_parser_update_buffer(parser, peek+1) {
			break
		}
		column++
		if is_blank(parser.buffer, parser.buffer_pos+peek) {
			continue
		}
		c := parser.buffer[parser.buffer_pos+peek]
		var close_flow = parser.flow_level > 0 && (c == ']' || c == '}')
		if close_flow || is_breakz(parser.buffer, parser.buffer_pos+peek) {
			// Got line break or terminator.
			if close_flow || !recent_empty {
				if close_flow || first_empty && (start_mark.line == foot_line && token.typ != yaml_VALUE_TOKEN || start_mark.column-1 < next_indent) {
					// This is the first empty line and there were no empty lines before,
					// so this initial part of the comment is a foot of the prior token
					// instead of being a head for the following one. Split it up.
					// Alternatively, this might also be the last comment inside a flow
					// scope, so it must be a footer.
					if len(text) > 0 {
						if start_mark.column-1 < next_indent {
							// If dedented it's unrelated to the prior token.
							token_mark = start_mark
						}
						parser.comments = append(parser.comments, yaml_comment_t{
							scan_mark:  scan_mark,
							token_mark: token_mark,
							start_mark: start_mark,
							end_mark:   yaml_mark_t{parser.mark.index + peek, line, column},
							foot:       text,
						})
						scan_mark = yaml_mark_t{parser.mark.index + peek, line, column}
						token_mark = scan_mark
						text = nil
					}
				} else {
					if len(text) > 0 && parser.buffer[parser.buffer_pos+peek] != 0 {
						text = append(text, '\n')
					}
				}
			}
			if !is_break(parser.buffer, parser.buffer_pos+peek) {
				break
			}
			first_empty = false
			recent_empty = true
			column = 0
			line++
			continue
		}

		if len(text) > 0 && (close_flow || column-1 < next_indent && column != start_mark.column) {
			// The comment at the different indentation is a foot of the
			// preceding data rather than a head of the upcoming one.
			parser.comments = append(parser.comments, yaml_comment_t{
				scan_mark:  scan_mark,
				token_mark: token_mark,
				start_mark: start_mark,
				end_mark:   yaml_mark_t{parser.mark.index + peek, line, column},
				foot:       text,
			})
			scan_mark = yaml_mark_t{parser.mark.index + peek, line, column}
			token_mark = scan_mark
			text = nil
		}

		if parser.buffer[parser.buffer_pos+peek] != '#' {
			break
		}

		if len(text) == 0 {
			start_mark = yaml_mark_t{parser.mark.index + peek, line, column}
		} else {
			text = append(text, '\n')
		}

		recent_empty = false

		// Consume until after the consumed comment line.
		seen := parser.mark.index+peek
		for {
			if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
				return false
			}
			if is_breakz(parser.buffer, parser.buffer_pos) {
				if parser.mark.index >= seen {
					break
				}
				if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
					return false
				}
				skip_line(parser)
			} else if parser.mark.index >= seen {
				text = read(parser, text)
			} else {
				skip(parser)
			}
		}

		peek = 0
		column = 0
		line = parser.mark.line
		next_indent = parser.indent
		if next_indent < 0 {
			next_indent = 0
		}
	}

	if len(text) > 0 {
		parser.comments = append(parser.comments, yaml_comment_t{
			scan_mark:  scan_mark,
			token_mark: start_mark,
			start_mark: start_mark,
			end_mark:   yaml_mark_t{parser.mark.index + peek - 1, line, column},
			head:       text,
		})
	}
	return true
}
0707010000100F000081A4000000000000000000000001645E367C00000D11000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v3/sorter.go //
// Copyright (c) 2011-2019 Canonical Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package yaml

import (
	"reflect"
	"unicode"
)

type keyList []reflect.Value

func (l keyList) Len() int      { return len(l) }
func (l keyList) Swap(i, j int) { l[i], l[j] = l[j], l[i] }
func (l keyList) Less(i, j int) bool {
	a := l[i]
	b := l[j]
	ak := a.Kind()
	bk := b.Kind()
	for (ak == reflect.Interface || ak == reflect.Ptr) && !a.IsNil() {
		a = a.Elem()
		ak = a.Kind()
	}
	for (bk == reflect.Interface || bk == reflect.Ptr) && !b.IsNil() {
		b = b.Elem()
		bk = b.Kind()
	}
	af, aok := keyFloat(a)
	bf, bok := keyFloat(b)
	if aok && bok {
		if af != bf {
			return af < bf
		}
		if ak != bk {
			return ak < bk
		}
		return numLess(a, b)
	}
	if ak != reflect.String || bk != reflect.String {
		return ak < bk
	}
	ar, br := []rune(a.String()), []rune(b.String())
	digits := false
	for i := 0; i < len(ar) && i < len(br); i++ {
		if ar[i] == br[i] {
			digits = unicode.IsDigit(ar[i])
			continue
		}
		al := unicode.IsLetter(ar[i])
		bl := unicode.IsLetter(br[i])
		if al && bl {
			return ar[i] < br[i]
		}
		if al || bl {
			if digits {
				return al
			} else {
				return bl
			}
		}
		var ai, bi int
		var an, bn int64
		if ar[i] == '0' || br[i] == '0' {
			for j := i - 1; j >= 0 && unicode.IsDigit(ar[j]); j-- {
				if ar[j] != '0' {
					an = 1
					bn = 1
					break
				}
			}
		}
		for ai = i; ai < len(ar) && unicode.IsDigit(ar[ai]); ai++ {
			an = an*10 + int64(ar[ai]-'0')
		}
		for bi = i; bi < len(br) && unicode.IsDigit(br[bi]); bi++ {
			bn = bn*10 + int64(br[bi]-'0')
		}
		if an != bn {
			return an < bn
		}
		if ai != bi {
			return ai < bi
		}
		return ar[i] < br[i]
	}
	return len(ar) < len(br)
}

// keyFloat returns a float value for v if it is a number/bool
// and whether it is a number/bool or not.
func keyFloat(v reflect.Value) (f float64, ok bool) {
	switch v.Kind() {
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		return float64(v.Int()), true
	case reflect.Float32, reflect.Float64:
		return v.Float(), true
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		return float64(v.Uint()), true
	case reflect.Bool:
		if v.Bool() {
			return 1, true
		}
		return 0, true
	}
	return 0, false
}

// numLess returns whether a < b.
// a and b must necessarily have the same kind.
func numLess(a, b reflect.Value) bool {
	switch a.Kind() {
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		return a.Int() < b.Int()
	case reflect.Float32, reflect.Float64:
		return a.Float() < b.Float()
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		return a.Uint() < b.Uint()
	case reflect.Bool:
		return !a.Bool() && b.Bool()
	}
	panic("not a number")
}
   07070100001010000081A4000000000000000000000001645E367C0000072A000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v3/writerc.go    // 
// Copyright (c) 2011-2019 Canonical Ltd
// Copyright (c) 2006-2010 Kirill Simonov
// 
// Permission is hereby granted, free of charge, to any person obtaining a copy of
// this software and associated documentation files (the "Software"), to deal in
// the Software without restriction, including without limitation the rights to
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
// of the Software, and to permit persons to whom the Software is furnished to do
// so, subject to the following conditions:
// 
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// 
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.

package yaml

// Set the writer error and return false.
func yaml_emitter_set_writer_error(emitter *yaml_emitter_t, problem string) bool {
	emitter.error = yaml_WRITER_ERROR
	emitter.problem = problem
	return false
}

// Flush the output buffer.
func yaml_emitter_flush(emitter *yaml_emitter_t) bool {
	if emitter.write_handler == nil {
		panic("write handler not set")
	}

	// Check if the buffer is empty.
	if emitter.buffer_pos == 0 {
		return true
	}

	if err := emitter.write_handler(emitter, emitter.buffer[:emitter.buffer_pos]); err != nil {
		return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error())
	}
	emitter.buffer_pos = 0
	return true
}
  07070100001011000081A4000000000000000000000001645E367C00004E74000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v3/yaml.go   //
// Copyright (c) 2011-2019 Canonical Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package yaml implements YAML support for the Go language.
//
// Source code and other details for the project are available at GitHub:
//
//   https://github.com/go-yaml/yaml
//
package yaml

import (
	"errors"
	"fmt"
	"io"
	"reflect"
	"strings"
	"sync"
	"unicode/utf8"
)

// The Unmarshaler interface may be implemented by types to customize their
// behavior when being unmarshaled from a YAML document.
type Unmarshaler interface {
	UnmarshalYAML(value *Node) error
}

type obsoleteUnmarshaler interface {
	UnmarshalYAML(unmarshal func(interface{}) error) error
}

// The Marshaler interface may be implemented by types to customize their
// behavior when being marshaled into a YAML document. The returned value
// is marshaled in place of the original value implementing Marshaler.
//
// If an error is returned by MarshalYAML, the marshaling procedure stops
// and returns with the provided error.
type Marshaler interface {
	MarshalYAML() (interface{}, error)
}

// Unmarshal decodes the first document found within the in byte slice
// and assigns decoded values into the out value.
//
// Maps and pointers (to a struct, string, int, etc) are accepted as out
// values. If an internal pointer within a struct is not initialized,
// the yaml package will initialize it if necessary for unmarshalling
// the provided data. The out parameter must not be nil.
//
// The type of the decoded values should be compatible with the respective
// values in out. If one or more values cannot be decoded due to a type
// mismatches, decoding continues partially until the end of the YAML
// content, and a *yaml.TypeError is returned with details for all
// missed values.
//
// Struct fields are only unmarshalled if they are exported (have an
// upper case first letter), and are unmarshalled using the field name
// lowercased as the default key. Custom keys may be defined via the
// "yaml" name in the field tag: the content preceding the first comma
// is used as the key, and the following comma-separated options are
// used to tweak the marshalling process (see Marshal).
// Conflicting names result in a runtime error.
//
// For example:
//
//     type T struct {
//         F int `yaml:"a,omitempty"`
//         B int
//     }
//     var t T
//     yaml.Unmarshal([]byte("a: 1\nb: 2"), &t)
//
// See the documentation of Marshal for the format of tags and a list of
// supported tag options.
//
func Unmarshal(in []byte, out interface{}) (err error) {
	return unmarshal(in, out, false)
}

// A Decoder reads and decodes YAML values from an input stream.
type Decoder struct {
	parser      *parser
	knownFields bool
}

// NewDecoder returns a new decoder that reads from r.
//
// The decoder introduces its own buffering and may read
// data from r beyond the YAML values requested.
func NewDecoder(r io.Reader) *Decoder {
	return &Decoder{
		parser: newParserFromReader(r),
	}
}

// KnownFields ensures that the keys in decoded mappings to
// exist as fields in the struct being decoded into.
func (dec *Decoder) KnownFields(enable bool) {
	dec.knownFields = enable
}

// Decode reads the next YAML-encoded value from its input
// and stores it in the value pointed to by v.
//
// See the documentation for Unmarshal for details about the
// conversion of YAML into a Go value.
func (dec *Decoder) Decode(v interface{}) (err error) {
	d := newDecoder()
	d.knownFields = dec.knownFields
	defer handleErr(&err)
	node := dec.parser.parse()
	if node == nil {
		return io.EOF
	}
	out := reflect.ValueOf(v)
	if out.Kind() == reflect.Ptr && !out.IsNil() {
		out = out.Elem()
	}
	d.unmarshal(node, out)
	if len(d.terrors) > 0 {
		return &TypeError{d.terrors}
	}
	return nil
}

// Decode decodes the node and stores its data into the value pointed to by v.
//
// See the documentation for Unmarshal for details about the
// conversion of YAML into a Go value.
func (n *Node) Decode(v interface{}) (err error) {
	d := newDecoder()
	defer handleErr(&err)
	out := reflect.ValueOf(v)
	if out.Kind() == reflect.Ptr && !out.IsNil() {
		out = out.Elem()
	}
	d.unmarshal(n, out)
	if len(d.terrors) > 0 {
		return &TypeError{d.terrors}
	}
	return nil
}

func unmarshal(in []byte, out interface{}, strict bool) (err error) {
	defer handleErr(&err)
	d := newDecoder()
	p := newParser(in)
	defer p.destroy()
	node := p.parse()
	if node != nil {
		v := reflect.ValueOf(out)
		if v.Kind() == reflect.Ptr && !v.IsNil() {
			v = v.Elem()
		}
		d.unmarshal(node, v)
	}
	if len(d.terrors) > 0 {
		return &TypeError{d.terrors}
	}
	return nil
}

// Marshal serializes the value provided into a YAML document. The structure
// of the generated document will reflect the structure of the value itself.
// Maps and pointers (to struct, string, int, etc) are accepted as the in value.
//
// Struct fields are only marshalled if they are exported (have an upper case
// first letter), and are marshalled using the field name lowercased as the
// default key. Custom keys may be defined via the "yaml" name in the field
// tag: the content preceding the first comma is used as the key, and the
// following comma-separated options are used to tweak the marshalling process.
// Conflicting names result in a runtime error.
//
// The field tag format accepted is:
//
//     `(...) yaml:"[<key>][,<flag1>[,<flag2>]]" (...)`
//
// The following flags are currently supported:
//
//     omitempty    Only include the field if it's not set to the zero
//                  value for the type or to empty slices or maps.
//                  Zero valued structs will be omitted if all their public
//                  fields are zero, unless they implement an IsZero
//                  method (see the IsZeroer interface type), in which
//                  case the field will be excluded if IsZero returns true.
//
//     flow         Marshal using a flow style (useful for structs,
//                  sequences and maps).
//
//     inline       Inline the field, which must be a struct or a map,
//                  causing all of its fields or keys to be processed as if
//                  they were part of the outer struct. For maps, keys must
//                  not conflict with the yaml keys of other struct fields.
//
// In addition, if the key is "-", the field is ignored.
//
// For example:
//
//     type T struct {
//         F int `yaml:"a,omitempty"`
//         B int
//     }
//     yaml.Marshal(&T{B: 2}) // Returns "b: 2\n"
//     yaml.Marshal(&T{F: 1}} // Returns "a: 1\nb: 0\n"
//
func Marshal(in interface{}) (out []byte, err error) {
	defer handleErr(&err)
	e := newEncoder()
	defer e.destroy()
	e.marshalDoc("", reflect.ValueOf(in))
	e.finish()
	out = e.out
	return
}

// An Encoder writes YAML values to an output stream.
type Encoder struct {
	encoder *encoder
}

// NewEncoder returns a new encoder that writes to w.
// The Encoder should be closed after use to flush all data
// to w.
func NewEncoder(w io.Writer) *Encoder {
	return &Encoder{
		encoder: newEncoderWithWriter(w),
	}
}

// Encode writes the YAML encoding of v to the stream.
// If multiple items are encoded to the stream, the
// second and subsequent document will be preceded
// with a "---" document separator, but the first will not.
//
// See the documentation for Marshal for details about the conversion of Go
// values to YAML.
func (e *Encoder) Encode(v interface{}) (err error) {
	defer handleErr(&err)
	e.encoder.marshalDoc("", reflect.ValueOf(v))
	return nil
}

// Encode encodes value v and stores its representation in n.
//
// See the documentation for Marshal for details about the
// conversion of Go values into YAML.
func (n *Node) Encode(v interface{}) (err error) {
	defer handleErr(&err)
	e := newEncoder()
	defer e.destroy()
	e.marshalDoc("", reflect.ValueOf(v))
	e.finish()
	p := newParser(e.out)
	p.textless = true
	defer p.destroy()
	doc := p.parse()
	*n = *doc.Content[0]
	return nil
}

// SetIndent changes the used indentation used when encoding.
func (e *Encoder) SetIndent(spaces int) {
	if spaces < 0 {
		panic("yaml: cannot indent to a negative number of spaces")
	}
	e.encoder.indent = spaces
}

// Close closes the encoder by writing any remaining data.
// It does not write a stream terminating string "...".
func (e *Encoder) Close() (err error) {
	defer handleErr(&err)
	e.encoder.finish()
	return nil
}

func handleErr(err *error) {
	if v := recover(); v != nil {
		if e, ok := v.(yamlError); ok {
			*err = e.err
		} else {
			panic(v)
		}
	}
}

type yamlError struct {
	err error
}

func fail(err error) {
	panic(yamlError{err})
}

func failf(format string, args ...interface{}) {
	panic(yamlError{fmt.Errorf("yaml: "+format, args...)})
}

// A TypeError is returned by Unmarshal when one or more fields in
// the YAML document cannot be properly decoded into the requested
// types. When this error is returned, the value is still
// unmarshaled partially.
type TypeError struct {
	Errors []string
}

func (e *TypeError) Error() string {
	return fmt.Sprintf("yaml: unmarshal errors:\n  %s", strings.Join(e.Errors, "\n  "))
}

type Kind uint32

const (
	DocumentNode Kind = 1 << iota
	SequenceNode
	MappingNode
	ScalarNode
	AliasNode
)

type Style uint32

const (
	TaggedStyle Style = 1 << iota
	DoubleQuotedStyle
	SingleQuotedStyle
	LiteralStyle
	FoldedStyle
	FlowStyle
)

// Node represents an element in the YAML document hierarchy. While documents
// are typically encoded and decoded into higher level types, such as structs
// and maps, Node is an intermediate representation that allows detailed
// control over the content being decoded or encoded.
//
// It's worth noting that although Node offers access into details such as
// line numbers, colums, and comments, the content when re-encoded will not
// have its original textual representation preserved. An effort is made to
// render the data plesantly, and to preserve comments near the data they
// describe, though.
//
// Values that make use of the Node type interact with the yaml package in the
// same way any other type would do, by encoding and decoding yaml data
// directly or indirectly into them.
//
// For example:
//
//     var person struct {
//             Name    string
//             Address yaml.Node
//     }
//     err := yaml.Unmarshal(data, &person)
// 
// Or by itself:
//
//     var person Node
//     err := yaml.Unmarshal(data, &person)
//
type Node struct {
	// Kind defines whether the node is a document, a mapping, a sequence,
	// a scalar value, or an alias to another node. The specific data type of
	// scalar nodes may be obtained via the ShortTag and LongTag methods.
	Kind  Kind

	// Style allows customizing the apperance of the node in the tree.
	Style Style

	// Tag holds the YAML tag defining the data type for the value.
	// When decoding, this field will always be set to the resolved tag,
	// even when it wasn't explicitly provided in the YAML content.
	// When encoding, if this field is unset the value type will be
	// implied from the node properties, and if it is set, it will only
	// be serialized into the representation if TaggedStyle is used or
	// the implicit tag diverges from the provided one.
	Tag string

	// Value holds the unescaped and unquoted represenation of the value.
	Value string

	// Anchor holds the anchor name for this node, which allows aliases to point to it.
	Anchor string

	// Alias holds the node that this alias points to. Only valid when Kind is AliasNode.
	Alias *Node

	// Content holds contained nodes for documents, mappings, and sequences.
	Content []*Node

	// HeadComment holds any comments in the lines preceding the node and
	// not separated by an empty line.
	HeadComment string

	// LineComment holds any comments at the end of the line where the node is in.
	LineComment string

	// FootComment holds any comments following the node and before empty lines.
	FootComment string

	// Line and Column hold the node position in the decoded YAML text.
	// These fields are not respected when encoding the node.
	Line   int
	Column int
}

// IsZero returns whether the node has all of its fields unset.
func (n *Node) IsZero() bool {
	return n.Kind == 0 && n.Style == 0 && n.Tag == "" && n.Value == "" && n.Anchor == "" && n.Alias == nil && n.Content == nil &&
		n.HeadComment == "" && n.LineComment == "" && n.FootComment == "" && n.Line == 0 && n.Column == 0
}


// LongTag returns the long form of the tag that indicates the data type for
// the node. If the Tag field isn't explicitly defined, one will be computed
// based on the node properties.
func (n *Node) LongTag() string {
	return longTag(n.ShortTag())
}

// ShortTag returns the short form of the YAML tag that indicates data type for
// the node. If the Tag field isn't explicitly defined, one will be computed
// based on the node properties.
func (n *Node) ShortTag() string {
	if n.indicatedString() {
		return strTag
	}
	if n.Tag == "" || n.Tag == "!" {
		switch n.Kind {
		case MappingNode:
			return mapTag
		case SequenceNode:
			return seqTag
		case AliasNode:
			if n.Alias != nil {
				return n.Alias.ShortTag()
			}
		case ScalarNode:
			tag, _ := resolve("", n.Value)
			return tag
		case 0:
			// Special case to make the zero value convenient.
			if n.IsZero() {
				return nullTag
			}
		}
		return ""
	}
	return shortTag(n.Tag)
}

func (n *Node) indicatedString() bool {
	return n.Kind == ScalarNode &&
		(shortTag(n.Tag) == strTag ||
			(n.Tag == "" || n.Tag == "!") && n.Style&(SingleQuotedStyle|DoubleQuotedStyle|LiteralStyle|FoldedStyle) != 0)
}

// SetString is a convenience function that sets the node to a string value
// and defines its style in a pleasant way depending on its content.
func (n *Node) SetString(s string) {
	n.Kind = ScalarNode
	if utf8.ValidString(s) {
		n.Value = s
		n.Tag = strTag
	} else {
		n.Value = encodeBase64(s)
		n.Tag = binaryTag
	}
	if strings.Contains(n.Value, "\n") {
		n.Style = LiteralStyle
	}
}

// --------------------------------------------------------------------------
// Maintain a mapping of keys to structure field indexes

// The code in this section was copied from mgo/bson.

// structInfo holds details for the serialization of fields of
// a given struct.
type structInfo struct {
	FieldsMap  map[string]fieldInfo
	FieldsList []fieldInfo

	// InlineMap is the number of the field in the struct that
	// contains an ,inline map, or -1 if there's none.
	InlineMap int

	// InlineUnmarshalers holds indexes to inlined fields that
	// contain unmarshaler values.
	InlineUnmarshalers [][]int
}

type fieldInfo struct {
	Key       string
	Num       int
	OmitEmpty bool
	Flow      bool
	// Id holds the unique field identifier, so we can cheaply
	// check for field duplicates without maintaining an extra map.
	Id int

	// Inline holds the field index if the field is part of an inlined struct.
	Inline []int
}

var structMap = make(map[reflect.Type]*structInfo)
var fieldMapMutex sync.RWMutex
var unmarshalerType reflect.Type

func init() {
	var v Unmarshaler
	unmarshalerType = reflect.ValueOf(&v).Elem().Type()
}

func getStructInfo(st reflect.Type) (*structInfo, error) {
	fieldMapMutex.RLock()
	sinfo, found := structMap[st]
	fieldMapMutex.RUnlock()
	if found {
		return sinfo, nil
	}

	n := st.NumField()
	fieldsMap := make(map[string]fieldInfo)
	fieldsList := make([]fieldInfo, 0, n)
	inlineMap := -1
	inlineUnmarshalers := [][]int(nil)
	for i := 0; i != n; i++ {
		field := st.Field(i)
		if field.PkgPath != "" && !field.Anonymous {
			continue // Private field
		}

		info := fieldInfo{Num: i}

		tag := field.Tag.Get("yaml")
		if tag == "" && strings.Index(string(field.Tag), ":") < 0 {
			tag = string(field.Tag)
		}
		if tag == "-" {
			continue
		}

		inline := false
		fields := strings.Split(tag, ",")
		if len(fields) > 1 {
			for _, flag := range fields[1:] {
				switch flag {
				case "omitempty":
					info.OmitEmpty = true
				case "flow":
					info.Flow = true
				case "inline":
					inline = true
				default:
					return nil, errors.New(fmt.Sprintf("unsupported flag %q in tag %q of type %s", flag, tag, st))
				}
			}
			tag = fields[0]
		}

		if inline {
			switch field.Type.Kind() {
			case reflect.Map:
				if inlineMap >= 0 {
					return nil, errors.New("multiple ,inline maps in struct " + st.String())
				}
				if field.Type.Key() != reflect.TypeOf("") {
					return nil, errors.New("option ,inline needs a map with string keys in struct " + st.String())
				}
				inlineMap = info.Num
			case reflect.Struct, reflect.Ptr:
				ftype := field.Type
				for ftype.Kind() == reflect.Ptr {
					ftype = ftype.Elem()
				}
				if ftype.Kind() != reflect.Struct {
					return nil, errors.New("option ,inline may only be used on a struct or map field")
				}
				if reflect.PtrTo(ftype).Implements(unmarshalerType) {
					inlineUnmarshalers = append(inlineUnmarshalers, []int{i})
				} else {
					sinfo, err := getStructInfo(ftype)
					if err != nil {
						return nil, err
					}
					for _, index := range sinfo.InlineUnmarshalers {
						inlineUnmarshalers = append(inlineUnmarshalers, append([]int{i}, index...))
					}
					for _, finfo := range sinfo.FieldsList {
						if _, found := fieldsMap[finfo.Key]; found {
							msg := "duplicated key '" + finfo.Key + "' in struct " + st.String()
							return nil, errors.New(msg)
						}
						if finfo.Inline == nil {
							finfo.Inline = []int{i, finfo.Num}
						} else {
							finfo.Inline = append([]int{i}, finfo.Inline...)
						}
						finfo.Id = len(fieldsList)
						fieldsMap[finfo.Key] = finfo
						fieldsList = append(fieldsList, finfo)
					}
				}
			default:
				return nil, errors.New("option ,inline may only be used on a struct or map field")
			}
			continue
		}

		if tag != "" {
			info.Key = tag
		} else {
			info.Key = strings.ToLower(field.Name)
		}

		if _, found = fieldsMap[info.Key]; found {
			msg := "duplicated key '" + info.Key + "' in struct " + st.String()
			return nil, errors.New(msg)
		}

		info.Id = len(fieldsList)
		fieldsList = append(fieldsList, info)
		fieldsMap[info.Key] = info
	}

	sinfo = &structInfo{
		FieldsMap:          fieldsMap,
		FieldsList:         fieldsList,
		InlineMap:          inlineMap,
		InlineUnmarshalers: inlineUnmarshalers,
	}

	fieldMapMutex.Lock()
	structMap[st] = sinfo
	fieldMapMutex.Unlock()
	return sinfo, nil
}

// IsZeroer is used to check whether an object is zero to
// determine whether it should be omitted when marshaling
// with the omitempty flag. One notable implementation
// is time.Time.
type IsZeroer interface {
	IsZero() bool
}

func isZero(v reflect.Value) bool {
	kind := v.Kind()
	if z, ok := v.Interface().(IsZeroer); ok {
		if (kind == reflect.Ptr || kind == reflect.Interface) && v.IsNil() {
			return true
		}
		return z.IsZero()
	}
	switch kind {
	case reflect.String:
		return len(v.String()) == 0
	case reflect.Interface, reflect.Ptr:
		return v.IsNil()
	case reflect.Slice:
		return v.Len() == 0
	case reflect.Map:
		return v.Len() == 0
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		return v.Int() == 0
	case reflect.Float32, reflect.Float64:
		return v.Float() == 0
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		return v.Uint() == 0
	case reflect.Bool:
		return !v.Bool()
	case reflect.Struct:
		vt := v.Type()
		for i := v.NumField() - 1; i >= 0; i-- {
			if vt.Field(i).PkgPath != "" {
				continue // Private field
			}
			if !isZero(v.Field(i)) {
				return false
			}
		}
		return true
	}
	return false
}
07070100001012000081A4000000000000000000000001645E367C00007176000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v3/yamlh.go  //
// Copyright (c) 2011-2019 Canonical Ltd
// Copyright (c) 2006-2010 Kirill Simonov
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of
// this software and associated documentation files (the "Software"), to deal in
// the Software without restriction, including without limitation the rights to
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
// of the Software, and to permit persons to whom the Software is furnished to do
// so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.

package yaml

import (
	"fmt"
	"io"
)

// The version directive data.
type yaml_version_directive_t struct {
	major int8 // The major version number.
	minor int8 // The minor version number.
}

// The tag directive data.
type yaml_tag_directive_t struct {
	handle []byte // The tag handle.
	prefix []byte // The tag prefix.
}

type yaml_encoding_t int

// The stream encoding.
const (
	// Let the parser choose the encoding.
	yaml_ANY_ENCODING yaml_encoding_t = iota

	yaml_UTF8_ENCODING    // The default UTF-8 encoding.
	yaml_UTF16LE_ENCODING // The UTF-16-LE encoding with BOM.
	yaml_UTF16BE_ENCODING // The UTF-16-BE encoding with BOM.
)

type yaml_break_t int

// Line break types.
const (
	// Let the parser choose the break type.
	yaml_ANY_BREAK yaml_break_t = iota

	yaml_CR_BREAK   // Use CR for line breaks (Mac style).
	yaml_LN_BREAK   // Use LN for line breaks (Unix style).
	yaml_CRLN_BREAK // Use CR LN for line breaks (DOS style).
)

type yaml_error_type_t int

// Many bad things could happen with the parser and emitter.
const (
	// No error is produced.
	yaml_NO_ERROR yaml_error_type_t = iota

	yaml_MEMORY_ERROR   // Cannot allocate or reallocate a block of memory.
	yaml_READER_ERROR   // Cannot read or decode the input stream.
	yaml_SCANNER_ERROR  // Cannot scan the input stream.
	yaml_PARSER_ERROR   // Cannot parse the input stream.
	yaml_COMPOSER_ERROR // Cannot compose a YAML document.
	yaml_WRITER_ERROR   // Cannot write to the output stream.
	yaml_EMITTER_ERROR  // Cannot emit a YAML stream.
)

// The pointer position.
type yaml_mark_t struct {
	index  int // The position index.
	line   int // The position line.
	column int // The position column.
}

// Node Styles

type yaml_style_t int8

type yaml_scalar_style_t yaml_style_t

// Scalar styles.
const (
	// Let the emitter choose the style.
	yaml_ANY_SCALAR_STYLE yaml_scalar_style_t = 0

	yaml_PLAIN_SCALAR_STYLE         yaml_scalar_style_t = 1 << iota // The plain scalar style.
	yaml_SINGLE_QUOTED_SCALAR_STYLE                                 // The single-quoted scalar style.
	yaml_DOUBLE_QUOTED_SCALAR_STYLE                                 // The double-quoted scalar style.
	yaml_LITERAL_SCALAR_STYLE                                       // The literal scalar style.
	yaml_FOLDED_SCALAR_STYLE                                        // The folded scalar style.
)

type yaml_sequence_style_t yaml_style_t

// Sequence styles.
const (
	// Let the emitter choose the style.
	yaml_ANY_SEQUENCE_STYLE yaml_sequence_style_t = iota

	yaml_BLOCK_SEQUENCE_STYLE // The block sequence style.
	yaml_FLOW_SEQUENCE_STYLE  // The flow sequence style.
)

type yaml_mapping_style_t yaml_style_t

// Mapping styles.
const (
	// Let the emitter choose the style.
	yaml_ANY_MAPPING_STYLE yaml_mapping_style_t = iota

	yaml_BLOCK_MAPPING_STYLE // The block mapping style.
	yaml_FLOW_MAPPING_STYLE  // The flow mapping style.
)

// Tokens

type yaml_token_type_t int

// Token types.
const (
	// An empty token.
	yaml_NO_TOKEN yaml_token_type_t = iota

	yaml_STREAM_START_TOKEN // A STREAM-START token.
	yaml_STREAM_END_TOKEN   // A STREAM-END token.

	yaml_VERSION_DIRECTIVE_TOKEN // A VERSION-DIRECTIVE token.
	yaml_TAG_DIRECTIVE_TOKEN     // A TAG-DIRECTIVE token.
	yaml_DOCUMENT_START_TOKEN    // A DOCUMENT-START token.
	yaml_DOCUMENT_END_TOKEN      // A DOCUMENT-END token.

	yaml_BLOCK_SEQUENCE_START_TOKEN // A BLOCK-SEQUENCE-START token.
	yaml_BLOCK_MAPPING_START_TOKEN  // A BLOCK-SEQUENCE-END token.
	yaml_BLOCK_END_TOKEN            // A BLOCK-END token.

	yaml_FLOW_SEQUENCE_START_TOKEN // A FLOW-SEQUENCE-START token.
	yaml_FLOW_SEQUENCE_END_TOKEN   // A FLOW-SEQUENCE-END token.
	yaml_FLOW_MAPPING_START_TOKEN  // A FLOW-MAPPING-START token.
	yaml_FLOW_MAPPING_END_TOKEN    // A FLOW-MAPPING-END token.

	yaml_BLOCK_ENTRY_TOKEN // A BLOCK-ENTRY token.
	yaml_FLOW_ENTRY_TOKEN  // A FLOW-ENTRY token.
	yaml_KEY_TOKEN         // A KEY token.
	yaml_VALUE_TOKEN       // A VALUE token.

	yaml_ALIAS_TOKEN  // An ALIAS token.
	yaml_ANCHOR_TOKEN // An ANCHOR token.
	yaml_TAG_TOKEN    // A TAG token.
	yaml_SCALAR_TOKEN // A SCALAR token.
)

func (tt yaml_token_type_t) String() string {
	switch tt {
	case yaml_NO_TOKEN:
		return "yaml_NO_TOKEN"
	case yaml_STREAM_START_TOKEN:
		return "yaml_STREAM_START_TOKEN"
	case yaml_STREAM_END_TOKEN:
		return "yaml_STREAM_END_TOKEN"
	case yaml_VERSION_DIRECTIVE_TOKEN:
		return "yaml_VERSION_DIRECTIVE_TOKEN"
	case yaml_TAG_DIRECTIVE_TOKEN:
		return "yaml_TAG_DIRECTIVE_TOKEN"
	case yaml_DOCUMENT_START_TOKEN:
		return "yaml_DOCUMENT_START_TOKEN"
	case yaml_DOCUMENT_END_TOKEN:
		return "yaml_DOCUMENT_END_TOKEN"
	case yaml_BLOCK_SEQUENCE_START_TOKEN:
		return "yaml_BLOCK_SEQUENCE_START_TOKEN"
	case yaml_BLOCK_MAPPING_START_TOKEN:
		return "yaml_BLOCK_MAPPING_START_TOKEN"
	case yaml_BLOCK_END_TOKEN:
		return "yaml_BLOCK_END_TOKEN"
	case yaml_FLOW_SEQUENCE_START_TOKEN:
		return "yaml_FLOW_SEQUENCE_START_TOKEN"
	case yaml_FLOW_SEQUENCE_END_TOKEN:
		return "yaml_FLOW_SEQUENCE_END_TOKEN"
	case yaml_FLOW_MAPPING_START_TOKEN:
		return "yaml_FLOW_MAPPING_START_TOKEN"
	case yaml_FLOW_MAPPING_END_TOKEN:
		return "yaml_FLOW_MAPPING_END_TOKEN"
	case yaml_BLOCK_ENTRY_TOKEN:
		return "yaml_BLOCK_ENTRY_TOKEN"
	case yaml_FLOW_ENTRY_TOKEN:
		return "yaml_FLOW_ENTRY_TOKEN"
	case yaml_KEY_TOKEN:
		return "yaml_KEY_TOKEN"
	case yaml_VALUE_TOKEN:
		return "yaml_VALUE_TOKEN"
	case yaml_ALIAS_TOKEN:
		return "yaml_ALIAS_TOKEN"
	case yaml_ANCHOR_TOKEN:
		return "yaml_ANCHOR_TOKEN"
	case yaml_TAG_TOKEN:
		return "yaml_TAG_TOKEN"
	case yaml_SCALAR_TOKEN:
		return "yaml_SCALAR_TOKEN"
	}
	return "<unknown token>"
}

// The token structure.
type yaml_token_t struct {
	// The token type.
	typ yaml_token_type_t

	// The start/end of the token.
	start_mark, end_mark yaml_mark_t

	// The stream encoding (for yaml_STREAM_START_TOKEN).
	encoding yaml_encoding_t

	// The alias/anchor/scalar value or tag/tag directive handle
	// (for yaml_ALIAS_TOKEN, yaml_ANCHOR_TOKEN, yaml_SCALAR_TOKEN, yaml_TAG_TOKEN, yaml_TAG_DIRECTIVE_TOKEN).
	value []byte

	// The tag suffix (for yaml_TAG_TOKEN).
	suffix []byte

	// The tag directive prefix (for yaml_TAG_DIRECTIVE_TOKEN).
	prefix []byte

	// The scalar style (for yaml_SCALAR_TOKEN).
	style yaml_scalar_style_t

	// The version directive major/minor (for yaml_VERSION_DIRECTIVE_TOKEN).
	major, minor int8
}

// Events

type yaml_event_type_t int8

// Event types.
const (
	// An empty event.
	yaml_NO_EVENT yaml_event_type_t = iota

	yaml_STREAM_START_EVENT   // A STREAM-START event.
	yaml_STREAM_END_EVENT     // A STREAM-END event.
	yaml_DOCUMENT_START_EVENT // A DOCUMENT-START event.
	yaml_DOCUMENT_END_EVENT   // A DOCUMENT-END event.
	yaml_ALIAS_EVENT          // An ALIAS event.
	yaml_SCALAR_EVENT         // A SCALAR event.
	yaml_SEQUENCE_START_EVENT // A SEQUENCE-START event.
	yaml_SEQUENCE_END_EVENT   // A SEQUENCE-END event.
	yaml_MAPPING_START_EVENT  // A MAPPING-START event.
	yaml_MAPPING_END_EVENT    // A MAPPING-END event.
	yaml_TAIL_COMMENT_EVENT
)

var eventStrings = []string{
	yaml_NO_EVENT:             "none",
	yaml_STREAM_START_EVENT:   "stream start",
	yaml_STREAM_END_EVENT:     "stream end",
	yaml_DOCUMENT_START_EVENT: "document start",
	yaml_DOCUMENT_END_EVENT:   "document end",
	yaml_ALIAS_EVENT:          "alias",
	yaml_SCALAR_EVENT:         "scalar",
	yaml_SEQUENCE_START_EVENT: "sequence start",
	yaml_SEQUENCE_END_EVENT:   "sequence end",
	yaml_MAPPING_START_EVENT:  "mapping start",
	yaml_MAPPING_END_EVENT:    "mapping end",
	yaml_TAIL_COMMENT_EVENT:   "tail comment",
}

func (e yaml_event_type_t) String() string {
	if e < 0 || int(e) >= len(eventStrings) {
		return fmt.Sprintf("unknown event %d", e)
	}
	return eventStrings[e]
}

// The event structure.
type yaml_event_t struct {

	// The event type.
	typ yaml_event_type_t

	// The start and end of the event.
	start_mark, end_mark yaml_mark_t

	// The document encoding (for yaml_STREAM_START_EVENT).
	encoding yaml_encoding_t

	// The version directive (for yaml_DOCUMENT_START_EVENT).
	version_directive *yaml_version_directive_t

	// The list of tag directives (for yaml_DOCUMENT_START_EVENT).
	tag_directives []yaml_tag_directive_t

	// The comments
	head_comment []byte
	line_comment []byte
	foot_comment []byte
	tail_comment []byte

	// The anchor (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_ALIAS_EVENT).
	anchor []byte

	// The tag (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT).
	tag []byte

	// The scalar value (for yaml_SCALAR_EVENT).
	value []byte

	// Is the document start/end indicator implicit, or the tag optional?
	// (for yaml_DOCUMENT_START_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_SCALAR_EVENT).
	implicit bool

	// Is the tag optional for any non-plain style? (for yaml_SCALAR_EVENT).
	quoted_implicit bool

	// The style (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT).
	style yaml_style_t
}

func (e *yaml_event_t) scalar_style() yaml_scalar_style_t     { return yaml_scalar_style_t(e.style) }
func (e *yaml_event_t) sequence_style() yaml_sequence_style_t { return yaml_sequence_style_t(e.style) }
func (e *yaml_event_t) mapping_style() yaml_mapping_style_t   { return yaml_mapping_style_t(e.style) }

// Nodes

const (
	yaml_NULL_TAG      = "tag:yaml.org,2002:null"      // The tag !!null with the only possible value: null.
	yaml_BOOL_TAG      = "tag:yaml.org,2002:bool"      // The tag !!bool with the values: true and false.
	yaml_STR_TAG       = "tag:yaml.org,2002:str"       // The tag !!str for string values.
	yaml_INT_TAG       = "tag:yaml.org,2002:int"       // The tag !!int for integer values.
	yaml_FLOAT_TAG     = "tag:yaml.org,2002:float"     // The tag !!float for float values.
	yaml_TIMESTAMP_TAG = "tag:yaml.org,2002:timestamp" // The tag !!timestamp for date and time values.

	yaml_SEQ_TAG = "tag:yaml.org,2002:seq" // The tag !!seq is used to denote sequences.
	yaml_MAP_TAG = "tag:yaml.org,2002:map" // The tag !!map is used to denote mapping.

	// Not in original libyaml.
	yaml_BINARY_TAG = "tag:yaml.org,2002:binary"
	yaml_MERGE_TAG  = "tag:yaml.org,2002:merge"

	yaml_DEFAULT_SCALAR_TAG   = yaml_STR_TAG // The default scalar tag is !!str.
	yaml_DEFAULT_SEQUENCE_TAG = yaml_SEQ_TAG // The default sequence tag is !!seq.
	yaml_DEFAULT_MAPPING_TAG  = yaml_MAP_TAG // The default mapping tag is !!map.
)

type yaml_node_type_t int

// Node types.
const (
	// An empty node.
	yaml_NO_NODE yaml_node_type_t = iota

	yaml_SCALAR_NODE   // A scalar node.
	yaml_SEQUENCE_NODE // A sequence node.
	yaml_MAPPING_NODE  // A mapping node.
)

// An element of a sequence node.
type yaml_node_item_t int

// An element of a mapping node.
type yaml_node_pair_t struct {
	key   int // The key of the element.
	value int // The value of the element.
}

// The node structure.
type yaml_node_t struct {
	typ yaml_node_type_t // The node type.
	tag []byte           // The node tag.

	// The node data.

	// The scalar parameters (for yaml_SCALAR_NODE).
	scalar struct {
		value  []byte              // The scalar value.
		length int                 // The length of the scalar value.
		style  yaml_scalar_style_t // The scalar style.
	}

	// The sequence parameters (for YAML_SEQUENCE_NODE).
	sequence struct {
		items_data []yaml_node_item_t    // The stack of sequence items.
		style      yaml_sequence_style_t // The sequence style.
	}

	// The mapping parameters (for yaml_MAPPING_NODE).
	mapping struct {
		pairs_data  []yaml_node_pair_t   // The stack of mapping pairs (key, value).
		pairs_start *yaml_node_pair_t    // The beginning of the stack.
		pairs_end   *yaml_node_pair_t    // The end of the stack.
		pairs_top   *yaml_node_pair_t    // The top of the stack.
		style       yaml_mapping_style_t // The mapping style.
	}

	start_mark yaml_mark_t // The beginning of the node.
	end_mark   yaml_mark_t // The end of the node.

}

// The document structure.
type yaml_document_t struct {

	// The document nodes.
	nodes []yaml_node_t

	// The version directive.
	version_directive *yaml_version_directive_t

	// The list of tag directives.
	tag_directives_data  []yaml_tag_directive_t
	tag_directives_start int // The beginning of the tag directives list.
	tag_directives_end   int // The end of the tag directives list.

	start_implicit int // Is the document start indicator implicit?
	end_implicit   int // Is the document end indicator implicit?

	// The start/end of the document.
	start_mark, end_mark yaml_mark_t
}

// The prototype of a read handler.
//
// The read handler is called when the parser needs to read more bytes from the
// source. The handler should write not more than size bytes to the buffer.
// The number of written bytes should be set to the size_read variable.
//
// [in,out]   data        A pointer to an application data specified by
//                        yaml_parser_set_input().
// [out]      buffer      The buffer to write the data from the source.
// [in]       size        The size of the buffer.
// [out]      size_read   The actual number of bytes read from the source.
//
// On success, the handler should return 1.  If the handler failed,
// the returned value should be 0. On EOF, the handler should set the
// size_read to 0 and return 1.
type yaml_read_handler_t func(parser *yaml_parser_t, buffer []byte) (n int, err error)

// This structure holds information about a potential simple key.
type yaml_simple_key_t struct {
	possible     bool        // Is a simple key possible?
	required     bool        // Is a simple key required?
	token_number int         // The number of the token.
	mark         yaml_mark_t // The position mark.
}

// The states of the parser.
type yaml_parser_state_t int

const (
	yaml_PARSE_STREAM_START_STATE yaml_parser_state_t = iota

	yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE           // Expect the beginning of an implicit document.
	yaml_PARSE_DOCUMENT_START_STATE                    // Expect DOCUMENT-START.
	yaml_PARSE_DOCUMENT_CONTENT_STATE                  // Expect the content of a document.
	yaml_PARSE_DOCUMENT_END_STATE                      // Expect DOCUMENT-END.
	yaml_PARSE_BLOCK_NODE_STATE                        // Expect a block node.
	yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE // Expect a block node or indentless sequence.
	yaml_PARSE_FLOW_NODE_STATE                         // Expect a flow node.
	yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE        // Expect the first entry of a block sequence.
	yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE              // Expect an entry of a block sequence.
	yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE         // Expect an entry of an indentless sequence.
	yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE           // Expect the first key of a block mapping.
	yaml_PARSE_BLOCK_MAPPING_KEY_STATE                 // Expect a block mapping key.
	yaml_PARSE_BLOCK_MAPPING_VALUE_STATE               // Expect a block mapping value.
	yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE         // Expect the first entry of a flow sequence.
	yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE               // Expect an entry of a flow sequence.
	yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE   // Expect a key of an ordered mapping.
	yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE // Expect a value of an ordered mapping.
	yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE   // Expect the and of an ordered mapping entry.
	yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE            // Expect the first key of a flow mapping.
	yaml_PARSE_FLOW_MAPPING_KEY_STATE                  // Expect a key of a flow mapping.
	yaml_PARSE_FLOW_MAPPING_VALUE_STATE                // Expect a value of a flow mapping.
	yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE          // Expect an empty value of a flow mapping.
	yaml_PARSE_END_STATE                               // Expect nothing.
)

func (ps yaml_parser_state_t) String() string {
	switch ps {
	case yaml_PARSE_STREAM_START_STATE:
		return "yaml_PARSE_STREAM_START_STATE"
	case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE:
		return "yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE"
	case yaml_PARSE_DOCUMENT_START_STATE:
		return "yaml_PARSE_DOCUMENT_START_STATE"
	case yaml_PARSE_DOCUMENT_CONTENT_STATE:
		return "yaml_PARSE_DOCUMENT_CONTENT_STATE"
	case yaml_PARSE_DOCUMENT_END_STATE:
		return "yaml_PARSE_DOCUMENT_END_STATE"
	case yaml_PARSE_BLOCK_NODE_STATE:
		return "yaml_PARSE_BLOCK_NODE_STATE"
	case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE:
		return "yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE"
	case yaml_PARSE_FLOW_NODE_STATE:
		return "yaml_PARSE_FLOW_NODE_STATE"
	case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE:
		return "yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE"
	case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE:
		return "yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE"
	case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE:
		return "yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE"
	case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE:
		return "yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE"
	case yaml_PARSE_BLOCK_MAPPING_KEY_STATE:
		return "yaml_PARSE_BLOCK_MAPPING_KEY_STATE"
	case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE:
		return "yaml_PARSE_BLOCK_MAPPING_VALUE_STATE"
	case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE:
		return "yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE"
	case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE:
		return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE"
	case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE:
		return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE"
	case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE:
		return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE"
	case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE:
		return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE"
	case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE:
		return "yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE"
	case yaml_PARSE_FLOW_MAPPING_KEY_STATE:
		return "yaml_PARSE_FLOW_MAPPING_KEY_STATE"
	case yaml_PARSE_FLOW_MAPPING_VALUE_STATE:
		return "yaml_PARSE_FLOW_MAPPING_VALUE_STATE"
	case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE:
		return "yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE"
	case yaml_PARSE_END_STATE:
		return "yaml_PARSE_END_STATE"
	}
	return "<unknown parser state>"
}

// This structure holds aliases data.
type yaml_alias_data_t struct {
	anchor []byte      // The anchor.
	index  int         // The node id.
	mark   yaml_mark_t // The anchor mark.
}

// The parser structure.
//
// All members are internal. Manage the structure using the
// yaml_parser_ family of functions.
type yaml_parser_t struct {

	// Error handling

	error yaml_error_type_t // Error type.

	problem string // Error description.

	// The byte about which the problem occurred.
	problem_offset int
	problem_value  int
	problem_mark   yaml_mark_t

	// The error context.
	context      string
	context_mark yaml_mark_t

	// Reader stuff

	read_handler yaml_read_handler_t // Read handler.

	input_reader io.Reader // File input data.
	input        []byte    // String input data.
	input_pos    int

	eof bool // EOF flag

	buffer     []byte // The working buffer.
	buffer_pos int    // The current position of the buffer.

	unread int // The number of unread characters in the buffer.

	newlines int // The number of line breaks since last non-break/non-blank character

	raw_buffer     []byte // The raw buffer.
	raw_buffer_pos int    // The current position of the buffer.

	encoding yaml_encoding_t // The input encoding.

	offset int         // The offset of the current position (in bytes).
	mark   yaml_mark_t // The mark of the current position.

	// Comments

	head_comment []byte // The current head comments
	line_comment []byte // The current line comments
	foot_comment []byte // The current foot comments
	tail_comment []byte // Foot comment that happens at the end of a block.
	stem_comment []byte // Comment in item preceding a nested structure (list inside list item, etc)

	comments      []yaml_comment_t // The folded comments for all parsed tokens
	comments_head int

	// Scanner stuff

	stream_start_produced bool // Have we started to scan the input stream?
	stream_end_produced   bool // Have we reached the end of the input stream?

	flow_level int // The number of unclosed '[' and '{' indicators.

	tokens          []yaml_token_t // The tokens queue.
	tokens_head     int            // The head of the tokens queue.
	tokens_parsed   int            // The number of tokens fetched from the queue.
	token_available bool           // Does the tokens queue contain a token ready for dequeueing.

	indent  int   // The current indentation level.
	indents []int // The indentation levels stack.

	simple_key_allowed bool                // May a simple key occur at the current position?
	simple_keys        []yaml_simple_key_t // The stack of simple keys.
	simple_keys_by_tok map[int]int         // possible simple_key indexes indexed by token_number

	// Parser stuff

	state          yaml_parser_state_t    // The current parser state.
	states         []yaml_parser_state_t  // The parser states stack.
	marks          []yaml_mark_t          // The stack of marks.
	tag_directives []yaml_tag_directive_t // The list of TAG directives.

	// Dumper stuff

	aliases []yaml_alias_data_t // The alias data.

	document *yaml_document_t // The currently parsed document.
}

type yaml_comment_t struct {

	scan_mark  yaml_mark_t // Position where scanning for comments started
	token_mark yaml_mark_t // Position after which tokens will be associated with this comment
	start_mark yaml_mark_t // Position of '#' comment mark
	end_mark   yaml_mark_t // Position where comment terminated

	head []byte
	line []byte
	foot []byte
}

// Emitter Definitions

// The prototype of a write handler.
//
// The write handler is called when the emitter needs to flush the accumulated
// characters to the output.  The handler should write @a size bytes of the
// @a buffer to the output.
//
// @param[in,out]   data        A pointer to an application data specified by
//                              yaml_emitter_set_output().
// @param[in]       buffer      The buffer with bytes to be written.
// @param[in]       size        The size of the buffer.
//
// @returns On success, the handler should return @c 1.  If the handler failed,
// the returned value should be @c 0.
//
type yaml_write_handler_t func(emitter *yaml_emitter_t, buffer []byte) error

type yaml_emitter_state_t int

// The emitter states.
const (
	// Expect STREAM-START.
	yaml_EMIT_STREAM_START_STATE yaml_emitter_state_t = iota

	yaml_EMIT_FIRST_DOCUMENT_START_STATE       // Expect the first DOCUMENT-START or STREAM-END.
	yaml_EMIT_DOCUMENT_START_STATE             // Expect DOCUMENT-START or STREAM-END.
	yaml_EMIT_DOCUMENT_CONTENT_STATE           // Expect the content of a document.
	yaml_EMIT_DOCUMENT_END_STATE               // Expect DOCUMENT-END.
	yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE   // Expect the first item of a flow sequence.
	yaml_EMIT_FLOW_SEQUENCE_TRAIL_ITEM_STATE   // Expect the next item of a flow sequence, with the comma already written out
	yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE         // Expect an item of a flow sequence.
	yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE     // Expect the first key of a flow mapping.
	yaml_EMIT_FLOW_MAPPING_TRAIL_KEY_STATE     // Expect the next key of a flow mapping, with the comma already written out
	yaml_EMIT_FLOW_MAPPING_KEY_STATE           // Expect a key of a flow mapping.
	yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE  // Expect a value for a simple key of a flow mapping.
	yaml_EMIT_FLOW_MAPPING_VALUE_STATE         // Expect a value of a flow mapping.
	yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE  // Expect the first item of a block sequence.
	yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE        // Expect an item of a block sequence.
	yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE    // Expect the first key of a block mapping.
	yaml_EMIT_BLOCK_MAPPING_KEY_STATE          // Expect the key of a block mapping.
	yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a block mapping.
	yaml_EMIT_BLOCK_MAPPING_VALUE_STATE        // Expect a value of a block mapping.
	yaml_EMIT_END_STATE                        // Expect nothing.
)

// The emitter structure.
//
// All members are internal.  Manage the structure using the @c yaml_emitter_
// family of functions.
type yaml_emitter_t struct {

	// Error handling

	error   yaml_error_type_t // Error type.
	problem string            // Error description.

	// Writer stuff

	write_handler yaml_write_handler_t // Write handler.

	output_buffer *[]byte   // String output data.
	output_writer io.Writer // File output data.

	buffer     []byte // The working buffer.
	buffer_pos int    // The current position of the buffer.

	raw_buffer     []byte // The raw buffer.
	raw_buffer_pos int    // The current position of the buffer.

	encoding yaml_encoding_t // The stream encoding.

	// Emitter stuff

	canonical   bool         // If the output is in the canonical style?
	best_indent int          // The number of indentation spaces.
	best_width  int          // The preferred width of the output lines.
	unicode     bool         // Allow unescaped non-ASCII characters?
	line_break  yaml_break_t // The preferred line break.

	state  yaml_emitter_state_t   // The current emitter state.
	states []yaml_emitter_state_t // The stack of states.

	events      []yaml_event_t // The event queue.
	events_head int            // The head of the event queue.

	indents []int // The stack of indentation levels.

	tag_directives []yaml_tag_directive_t // The list of tag directives.

	indent int // The current indentation level.

	flow_level int // The current flow level.

	root_context       bool // Is it the document root context?
	sequence_context   bool // Is it a sequence context?
	mapping_context    bool // Is it a mapping context?
	simple_key_context bool // Is it a simple mapping key context?

	line       int  // The current line.
	column     int  // The current column.
	whitespace bool // If the last character was a whitespace?
	indention  bool // If the last character was an indentation character (' ', '-', '?', ':')?
	open_ended bool // If an explicit document end is required?

	space_above bool // Is there's an empty line above?
	foot_indent int  // The indent used to write the foot comment above, or -1 if none.

	// Anchor analysis.
	anchor_data struct {
		anchor []byte // The anchor value.
		alias  bool   // Is it an alias?
	}

	// Tag analysis.
	tag_data struct {
		handle []byte // The tag handle.
		suffix []byte // The tag suffix.
	}

	// Scalar analysis.
	scalar_data struct {
		value                 []byte              // The scalar value.
		multiline             bool                // Does the scalar contain line breaks?
		flow_plain_allowed    bool                // Can the scalar be expessed in the flow plain style?
		block_plain_allowed   bool                // Can the scalar be expressed in the block plain style?
		single_quoted_allowed bool                // Can the scalar be expressed in the single quoted style?
		block_allowed         bool                // Can the scalar be expressed in the literal or folded styles?
		style                 yaml_scalar_style_t // The output style.
	}

	// Comments
	head_comment []byte
	line_comment []byte
	foot_comment []byte
	tail_comment []byte

	key_line_comment []byte

	// Dumper stuff

	opened bool // If the stream was already opened?
	closed bool // If the stream was already closed?

	// The information associated with the document nodes.
	anchors *struct {
		references int  // The number of references.
		anchor     int  // The anchor id.
		serialized bool // If the node has been emitted?
	}

	last_anchor_id int // The last assigned anchor id.

	document *yaml_document_t // The currently emitted document.
}
  07070100001013000081A4000000000000000000000001645E367C000017F1000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/gopkg.in/yaml.v3/yamlprivateh.go   // 
// Copyright (c) 2011-2019 Canonical Ltd
// Copyright (c) 2006-2010 Kirill Simonov
// 
// Permission is hereby granted, free of charge, to any person obtaining a copy of
// this software and associated documentation files (the "Software"), to deal in
// the Software without restriction, including without limitation the rights to
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
// of the Software, and to permit persons to whom the Software is furnished to do
// so, subject to the following conditions:
// 
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// 
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.

package yaml

const (
	// The size of the input raw buffer.
	input_raw_buffer_size = 512

	// The size of the input buffer.
	// It should be possible to decode the whole raw buffer.
	input_buffer_size = input_raw_buffer_size * 3

	// The size of the output buffer.
	output_buffer_size = 128

	// The size of the output raw buffer.
	// It should be possible to encode the whole output buffer.
	output_raw_buffer_size = (output_buffer_size*2 + 2)

	// The size of other stacks and queues.
	initial_stack_size  = 16
	initial_queue_size  = 16
	initial_string_size = 16
)

// Check if the character at the specified position is an alphabetical
// character, a digit, '_', or '-'.
func is_alpha(b []byte, i int) bool {
	return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'Z' || b[i] >= 'a' && b[i] <= 'z' || b[i] == '_' || b[i] == '-'
}

// Check if the character at the specified position is a digit.
func is_digit(b []byte, i int) bool {
	return b[i] >= '0' && b[i] <= '9'
}

// Get the value of a digit.
func as_digit(b []byte, i int) int {
	return int(b[i]) - '0'
}

// Check if the character at the specified position is a hex-digit.
func is_hex(b []byte, i int) bool {
	return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'F' || b[i] >= 'a' && b[i] <= 'f'
}

// Get the value of a hex-digit.
func as_hex(b []byte, i int) int {
	bi := b[i]
	if bi >= 'A' && bi <= 'F' {
		return int(bi) - 'A' + 10
	}
	if bi >= 'a' && bi <= 'f' {
		return int(bi) - 'a' + 10
	}
	return int(bi) - '0'
}

// Check if the character is ASCII.
func is_ascii(b []byte, i int) bool {
	return b[i] <= 0x7F
}

// Check if the character at the start of the buffer can be printed unescaped.
func is_printable(b []byte, i int) bool {
	return ((b[i] == 0x0A) || // . == #x0A
		(b[i] >= 0x20 && b[i] <= 0x7E) || // #x20 <= . <= #x7E
		(b[i] == 0xC2 && b[i+1] >= 0xA0) || // #0xA0 <= . <= #xD7FF
		(b[i] > 0xC2 && b[i] < 0xED) ||
		(b[i] == 0xED && b[i+1] < 0xA0) ||
		(b[i] == 0xEE) ||
		(b[i] == 0xEF && // #xE000 <= . <= #xFFFD
			!(b[i+1] == 0xBB && b[i+2] == 0xBF) && // && . != #xFEFF
			!(b[i+1] == 0xBF && (b[i+2] == 0xBE || b[i+2] == 0xBF))))
}

// Check if the character at the specified position is NUL.
func is_z(b []byte, i int) bool {
	return b[i] == 0x00
}

// Check if the beginning of the buffer is a BOM.
func is_bom(b []byte, i int) bool {
	return b[0] == 0xEF && b[1] == 0xBB && b[2] == 0xBF
}

// Check if the character at the specified position is space.
func is_space(b []byte, i int) bool {
	return b[i] == ' '
}

// Check if the character at the specified position is tab.
func is_tab(b []byte, i int) bool {
	return b[i] == '\t'
}

// Check if the character at the specified position is blank (space or tab).
func is_blank(b []byte, i int) bool {
	//return is_space(b, i) || is_tab(b, i)
	return b[i] == ' ' || b[i] == '\t'
}

// Check if the character at the specified position is a line break.
func is_break(b []byte, i int) bool {
	return (b[i] == '\r' || // CR (#xD)
		b[i] == '\n' || // LF (#xA)
		b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)
		b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)
		b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9) // PS (#x2029)
}

func is_crlf(b []byte, i int) bool {
	return b[i] == '\r' && b[i+1] == '\n'
}

// Check if the character is a line break or NUL.
func is_breakz(b []byte, i int) bool {
	//return is_break(b, i) || is_z(b, i)
	return (
		// is_break:
		b[i] == '\r' || // CR (#xD)
		b[i] == '\n' || // LF (#xA)
		b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)
		b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)
		b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029)
		// is_z:
		b[i] == 0)
}

// Check if the character is a line break, space, or NUL.
func is_spacez(b []byte, i int) bool {
	//return is_space(b, i) || is_breakz(b, i)
	return (
		// is_space:
		b[i] == ' ' ||
		// is_breakz:
		b[i] == '\r' || // CR (#xD)
		b[i] == '\n' || // LF (#xA)
		b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)
		b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)
		b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029)
		b[i] == 0)
}

// Check if the character is a line break, space, tab, or NUL.
func is_blankz(b []byte, i int) bool {
	//return is_blank(b, i) || is_breakz(b, i)
	return (
		// is_blank:
		b[i] == ' ' || b[i] == '\t' ||
		// is_breakz:
		b[i] == '\r' || // CR (#xD)
		b[i] == '\n' || // LF (#xA)
		b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)
		b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)
		b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029)
		b[i] == 0)
}

// Determine the width of the character.
func width(b byte) int {
	// Don't replace these by a switch without first
	// confirming that it is being inlined.
	if b&0x80 == 0x00 {
		return 1
	}
	if b&0xE0 == 0xC0 {
		return 2
	}
	if b&0xF0 == 0xE0 {
		return 3
	}
	if b&0xF8 == 0xF0 {
		return 4
	}
	return 0

}
   07070100001014000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002600000000elemental-cli-0.3.1/vendor/howett.net 07070100001015000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000002C00000000elemental-cli-0.3.1/vendor/howett.net/plist   07070100001016000081A4000000000000000000000001645E367C00000114000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/howett.net/plist/.gitignore    # Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
*.wasm

# Test binary, built with `go test -c`
*.test

# Output of the go coverage tool, specifically when used with LiteIDE
*.out

# Dependency directories (remove the comment below to include it)
# vendor/
07070100001017000081A4000000000000000000000001645E367C000002D5000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/howett.net/plist/.gitlab-ci.yml    image: golang:alpine
stages:
    - test

variables:
    GO_PACKAGE: "howett.net/plist"

before_script:
    - "mkdir -p $(dirname $GOPATH/src/$GO_PACKAGE)"
    - "ln -s $(pwd) $GOPATH/src/$GO_PACKAGE"
    - "cd $GOPATH/src/$GO_PACKAGE"

.template:go-test: &template-go-test
    stage: test
    script:
        - go test

go-test-cover:latest:
    stage: test
    script:
        - go test -v -cover
    coverage: '/^coverage: \d+\.\d+/'

go-test-appengine:latest:
    stage: test
    script:
        - go test -tags appengine

go-test:1.6:
    <<: *template-go-test
    image: golang:1.6-alpine

go-test:1.4:
    <<: *template-go-test
    image: golang:1.4-alpine

go-test:1.2:
    <<: *template-go-test
    image: golang:1.2
   07070100001018000081A4000000000000000000000001645E367C00000CE8000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/howett.net/plist/LICENSE   Copyright (c) 2013, Dustin L. Howett. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: 

1. Redistributions of source code must retain the above copyright notice, this
   list of conditions and the following disclaimer. 
2. Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution. 

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

The views and conclusions contained in the software and documentation are those
of the authors and should not be interpreted as representing official policies, 
either expressed or implied, of the FreeBSD Project.

--------------------------------------------------------------------------------
Parts of this package were made available under the license covering
the Go language and all attended core libraries. That license follows.
--------------------------------------------------------------------------------

Copyright (c) 2012 The Go Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
07070100001019000081A4000000000000000000000001645E367C00000212000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/howett.net/plist/README.md # plist - A pure Go property list transcoder [![coverage report](https://gitlab.howett.net/go/plist/badges/main/coverage.svg)](https://gitlab.howett.net/go/plist/commits/main)
## INSTALL
```
$ go get howett.net/plist
```

## FEATURES
* Supports encoding/decoding property lists (Apple XML, Apple Binary, OpenStep and GNUStep) from/to arbitrary Go types

## USE
```go
package main
import (
	"howett.net/plist"
	"os"
)
func main() {
	encoder := plist.NewEncoder(os.Stdout)
	encoder.Encode(map[string]string{"hello": "world"})
}
```
  0707010000101A000081A4000000000000000000000001645E367C00000261000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/howett.net/plist/bplist.go package plist

type bplistTrailer struct {
	Unused            [5]uint8
	SortVersion       uint8
	OffsetIntSize     uint8
	ObjectRefSize     uint8
	NumObjects        uint64
	TopObject         uint64
	OffsetTableOffset uint64
}

const (
	bpTagNull        uint8 = 0x00
	bpTagBoolFalse         = 0x08
	bpTagBoolTrue          = 0x09
	bpTagInteger           = 0x10
	bpTagReal              = 0x20
	bpTagDate              = 0x30
	bpTagData              = 0x40
	bpTagASCIIString       = 0x50
	bpTagUTF16String       = 0x60
	bpTagUID               = 0x80
	bpTagArray             = 0xA0
	bpTagDictionary        = 0xD0
)
   0707010000101B000081A4000000000000000000000001645E367C00001C61000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/howett.net/plist/bplist_generator.go   package plist

import (
	"encoding/binary"
	"errors"
	"fmt"
	"io"
	"time"
	"unicode/utf16"
)

func bplistMinimumIntSize(n uint64) int {
	switch {
	case n <= uint64(0xff):
		return 1
	case n <= uint64(0xffff):
		return 2
	case n <= uint64(0xffffffff):
		return 4
	default:
		return 8
	}
}

func bplistValueShouldUnique(pval cfValue) bool {
	switch pval.(type) {
	case cfString, *cfNumber, *cfReal, cfDate, cfData:
		return true
	}
	return false
}

type bplistGenerator struct {
	writer   *countedWriter
	objmap   map[interface{}]uint64 // maps pValue.hash()es to object locations
	objtable []cfValue
	trailer  bplistTrailer
}

func (p *bplistGenerator) flattenPlistValue(pval cfValue) {
	key := pval.hash()
	if bplistValueShouldUnique(pval) {
		if _, ok := p.objmap[key]; ok {
			return
		}
	}

	p.objmap[key] = uint64(len(p.objtable))
	p.objtable = append(p.objtable, pval)

	switch pval := pval.(type) {
	case *cfDictionary:
		pval.sort()
		for _, k := range pval.keys {
			p.flattenPlistValue(cfString(k))
		}
		for _, v := range pval.values {
			p.flattenPlistValue(v)
		}
	case *cfArray:
		for _, v := range pval.values {
			p.flattenPlistValue(v)
		}
	}
}

func (p *bplistGenerator) indexForPlistValue(pval cfValue) (uint64, bool) {
	v, ok := p.objmap[pval.hash()]
	return v, ok
}

func (p *bplistGenerator) generateDocument(root cfValue) {
	p.objtable = make([]cfValue, 0, 16)
	p.objmap = make(map[interface{}]uint64)
	p.flattenPlistValue(root)

	p.trailer.NumObjects = uint64(len(p.objtable))
	p.trailer.ObjectRefSize = uint8(bplistMinimumIntSize(p.trailer.NumObjects))

	p.writer.Write([]byte("bplist00"))

	offtable := make([]uint64, p.trailer.NumObjects)
	for i, pval := range p.objtable {
		offtable[i] = uint64(p.writer.BytesWritten())
		p.writePlistValue(pval)
	}

	p.trailer.OffsetIntSize = uint8(bplistMinimumIntSize(uint64(p.writer.BytesWritten())))
	p.trailer.TopObject = p.objmap[root.hash()]
	p.trailer.OffsetTableOffset = uint64(p.writer.BytesWritten())

	for _, offset := range offtable {
		p.writeSizedInt(offset, int(p.trailer.OffsetIntSize))
	}

	binary.Write(p.writer, binary.BigEndian, p.trailer)
}

func (p *bplistGenerator) writePlistValue(pval cfValue) {
	if pval == nil {
		return
	}

	switch pval := pval.(type) {
	case *cfDictionary:
		p.writeDictionaryTag(pval)
	case *cfArray:
		p.writeArrayTag(pval.values)
	case cfString:
		p.writeStringTag(string(pval))
	case *cfNumber:
		p.writeIntTag(pval.signed, pval.value)
	case *cfReal:
		if pval.wide {
			p.writeRealTag(pval.value, 64)
		} else {
			p.writeRealTag(pval.value, 32)
		}
	case cfBoolean:
		p.writeBoolTag(bool(pval))
	case cfData:
		p.writeDataTag([]byte(pval))
	case cfDate:
		p.writeDateTag(time.Time(pval))
	case cfUID:
		p.writeUIDTag(UID(pval))
	default:
		panic(fmt.Errorf("unknown plist type %t", pval))
	}
}

func (p *bplistGenerator) writeSizedInt(n uint64, nbytes int) {
	var val interface{}
	switch nbytes {
	case 1:
		val = uint8(n)
	case 2:
		val = uint16(n)
	case 4:
		val = uint32(n)
	case 8:
		val = n
	default:
		panic(errors.New("illegal integer size"))
	}
	binary.Write(p.writer, binary.BigEndian, val)
}

func (p *bplistGenerator) writeBoolTag(v bool) {
	tag := uint8(bpTagBoolFalse)
	if v {
		tag = bpTagBoolTrue
	}
	binary.Write(p.writer, binary.BigEndian, tag)
}

func (p *bplistGenerator) writeIntTag(signed bool, n uint64) {
	var tag uint8
	var val interface{}
	switch {
	case n <= uint64(0xff):
		val = uint8(n)
		tag = bpTagInteger | 0x0
	case n <= uint64(0xffff):
		val = uint16(n)
		tag = bpTagInteger | 0x1
	case n <= uint64(0xffffffff):
		val = uint32(n)
		tag = bpTagInteger | 0x2
	case n > uint64(0x7fffffffffffffff) && !signed:
		// 64-bit values are always *signed* in format 00.
		// Any unsigned value that doesn't intersect with the signed
		// range must be sign-extended and stored as a SInt128
		val = n
		tag = bpTagInteger | 0x4
	default:
		val = n
		tag = bpTagInteger | 0x3
	}

	binary.Write(p.writer, binary.BigEndian, tag)
	if tag&0xF == 0x4 {
		// SInt128; in the absence of true 128-bit integers in Go,
		// we'll just fake the top half. We only got here because
		// we had an unsigned 64-bit int that didn't fit,
		// so sign extend it with zeroes.
		binary.Write(p.writer, binary.BigEndian, uint64(0))
	}
	binary.Write(p.writer, binary.BigEndian, val)
}

func (p *bplistGenerator) writeUIDTag(u UID) {
	nbytes := bplistMinimumIntSize(uint64(u))
	tag := uint8(bpTagUID | (nbytes - 1))

	binary.Write(p.writer, binary.BigEndian, tag)
	p.writeSizedInt(uint64(u), nbytes)
}

func (p *bplistGenerator) writeRealTag(n float64, bits int) {
	var tag uint8 = bpTagReal | 0x3
	var val interface{} = n
	if bits == 32 {
		val = float32(n)
		tag = bpTagReal | 0x2
	}

	binary.Write(p.writer, binary.BigEndian, tag)
	binary.Write(p.writer, binary.BigEndian, val)
}

func (p *bplistGenerator) writeDateTag(t time.Time) {
	tag := uint8(bpTagDate) | 0x3
	val := float64(t.In(time.UTC).UnixNano()) / float64(time.Second)
	val -= 978307200 // Adjust to Apple Epoch

	binary.Write(p.writer, binary.BigEndian, tag)
	binary.Write(p.writer, binary.BigEndian, val)
}

func (p *bplistGenerator) writeCountedTag(tag uint8, count uint64) {
	marker := tag
	if count >= 0xF {
		marker |= 0xF
	} else {
		marker |= uint8(count)
	}

	binary.Write(p.writer, binary.BigEndian, marker)

	if count >= 0xF {
		p.writeIntTag(false, count)
	}
}

func (p *bplistGenerator) writeDataTag(data []byte) {
	p.writeCountedTag(bpTagData, uint64(len(data)))
	binary.Write(p.writer, binary.BigEndian, data)
}

func (p *bplistGenerator) writeStringTag(str string) {
	for _, r := range str {
		if r > 0x7F {
			utf16Runes := utf16.Encode([]rune(str))
			p.writeCountedTag(bpTagUTF16String, uint64(len(utf16Runes)))
			binary.Write(p.writer, binary.BigEndian, utf16Runes)
			return
		}
	}

	p.writeCountedTag(bpTagASCIIString, uint64(len(str)))
	binary.Write(p.writer, binary.BigEndian, []byte(str))
}

func (p *bplistGenerator) writeDictionaryTag(dict *cfDictionary) {
	// assumption: sorted already; flattenPlistValue did this.
	cnt := len(dict.keys)
	p.writeCountedTag(bpTagDictionary, uint64(cnt))
	vals := make([]uint64, cnt*2)
	for i, k := range dict.keys {
		// invariant: keys have already been "uniqued" (as PStrings)
		keyIdx, ok := p.objmap[cfString(k).hash()]
		if !ok {
			panic(errors.New("failed to find key " + k + " in object map during serialization"))
		}
		vals[i] = keyIdx
	}

	for i, v := range dict.values {
		// invariant: values have already been "uniqued"
		objIdx, ok := p.indexForPlistValue(v)
		if !ok {
			panic(errors.New("failed to find value in object map during serialization"))
		}
		vals[i+cnt] = objIdx
	}

	for _, v := range vals {
		p.writeSizedInt(v, int(p.trailer.ObjectRefSize))
	}
}

func (p *bplistGenerator) writeArrayTag(arr []cfValue) {
	p.writeCountedTag(bpTagArray, uint64(len(arr)))
	for _, v := range arr {
		objIdx, ok := p.indexForPlistValue(v)
		if !ok {
			panic(errors.New("failed to find value in object map during serialization"))
		}

		p.writeSizedInt(objIdx, int(p.trailer.ObjectRefSize))
	}
}

func (p *bplistGenerator) Indent(i string) {
	// There's nothing to indent.
}

func newBplistGenerator(w io.Writer) *bplistGenerator {
	return &bplistGenerator{
		writer: &countedWriter{Writer: mustWriter{w}},
	}
}
   0707010000101C000081A4000000000000000000000001645E367C000029C6000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/howett.net/plist/bplist_parser.go  package plist

import (
	"bytes"
	"encoding/binary"
	"errors"
	"fmt"
	"io"
	"io/ioutil"
	"math"
	"runtime"
	"time"
	"unicode/utf16"
)

const (
	signedHighBits = 0xFFFFFFFFFFFFFFFF
)

type offset uint64

type bplistParser struct {
	buffer []byte

	reader        io.ReadSeeker
	version       int
	objects       []cfValue // object ID to object
	trailer       bplistTrailer
	trailerOffset uint64

	containerStack []offset // slice of object offsets; manipulated during container deserialization
}

func (p *bplistParser) validateDocumentTrailer() {
	if p.trailer.OffsetTableOffset >= p.trailerOffset {
		panic(fmt.Errorf("offset table beyond beginning of trailer (0x%x, trailer@0x%x)", p.trailer.OffsetTableOffset, p.trailerOffset))
	}

	if p.trailer.OffsetTableOffset < 9 {
		panic(fmt.Errorf("offset table begins inside header (0x%x)", p.trailer.OffsetTableOffset))
	}

	if p.trailerOffset > (p.trailer.NumObjects*uint64(p.trailer.OffsetIntSize))+p.trailer.OffsetTableOffset {
		panic(errors.New("garbage between offset table and trailer"))
	}

	if p.trailer.OffsetTableOffset+(uint64(p.trailer.OffsetIntSize)*p.trailer.NumObjects) > p.trailerOffset {
		panic(errors.New("offset table isn't long enough to address every object"))
	}

	maxObjectRef := uint64(1) << (8 * p.trailer.ObjectRefSize)
	if p.trailer.NumObjects > maxObjectRef {
		panic(fmt.Errorf("more objects (%v) than object ref size (%v bytes) can support", p.trailer.NumObjects, p.trailer.ObjectRefSize))
	}

	if p.trailer.OffsetIntSize < uint8(8) && (uint64(1)<<(8*p.trailer.OffsetIntSize)) <= p.trailer.OffsetTableOffset {
		panic(errors.New("offset size isn't big enough to address entire file"))
	}

	if p.trailer.TopObject >= p.trailer.NumObjects {
		panic(fmt.Errorf("top object #%d is out of range (only %d exist)", p.trailer.TopObject, p.trailer.NumObjects))
	}
}

func (p *bplistParser) parseDocument() (pval cfValue, parseError error) {
	defer func() {
		if r := recover(); r != nil {
			if _, ok := r.(runtime.Error); ok {
				panic(r)
			}

			parseError = plistParseError{"binary", r.(error)}
		}
	}()

	p.buffer, _ = ioutil.ReadAll(p.reader)

	l := len(p.buffer)
	if l < 40 {
		panic(errors.New("not enough data"))
	}

	if !bytes.Equal(p.buffer[0:6], []byte{'b', 'p', 'l', 'i', 's', 't'}) {
		panic(errors.New("incomprehensible magic"))
	}

	p.version = int(((p.buffer[6] - '0') * 10) + (p.buffer[7] - '0'))

	if p.version > 1 {
		panic(fmt.Errorf("unexpected version %d", p.version))
	}

	p.trailerOffset = uint64(l - 32)
	p.trailer = bplistTrailer{
		SortVersion:       p.buffer[p.trailerOffset+5],
		OffsetIntSize:     p.buffer[p.trailerOffset+6],
		ObjectRefSize:     p.buffer[p.trailerOffset+7],
		NumObjects:        binary.BigEndian.Uint64(p.buffer[p.trailerOffset+8:]),
		TopObject:         binary.BigEndian.Uint64(p.buffer[p.trailerOffset+16:]),
		OffsetTableOffset: binary.BigEndian.Uint64(p.buffer[p.trailerOffset+24:]),
	}

	p.validateDocumentTrailer()

	// INVARIANTS:
	// - Entire offset table is before trailer
	// - Offset table begins after header
	// - Offset table can address entire document
	// - Object IDs are big enough to support the number of objects in this plist
	// - Top object is in range

	p.objects = make([]cfValue, p.trailer.NumObjects)

	pval = p.objectAtIndex(p.trailer.TopObject)
	return
}

// parseSizedInteger returns a 128-bit integer as low64, high64
func (p *bplistParser) parseSizedInteger(off offset, nbytes int) (lo uint64, hi uint64, newOffset offset) {
	// Per comments in CoreFoundation, format version 00 requires that all
	// 1, 2 or 4-byte integers be interpreted as unsigned. 8-byte integers are
	// signed (always?) and therefore must be sign extended here.
	// negative 1, 2, or 4-byte integers are always emitted as 64-bit.
	switch nbytes {
	case 1:
		lo, hi = uint64(p.buffer[off]), 0
	case 2:
		lo, hi = uint64(binary.BigEndian.Uint16(p.buffer[off:])), 0
	case 4:
		lo, hi = uint64(binary.BigEndian.Uint32(p.buffer[off:])), 0
	case 8:
		lo = binary.BigEndian.Uint64(p.buffer[off:])
		if p.buffer[off]&0x80 != 0 {
			// sign extend if lo is signed
			hi = signedHighBits
		}
	case 16:
		lo, hi = binary.BigEndian.Uint64(p.buffer[off+8:]), binary.BigEndian.Uint64(p.buffer[off:])
	default:
		panic(errors.New("illegal integer size"))
	}
	newOffset = off + offset(nbytes)
	return
}

func (p *bplistParser) parseObjectRefAtOffset(off offset) (uint64, offset) {
	oid, _, next := p.parseSizedInteger(off, int(p.trailer.ObjectRefSize))
	return oid, next
}

func (p *bplistParser) parseOffsetAtOffset(off offset) (offset, offset) {
	parsedOffset, _, next := p.parseSizedInteger(off, int(p.trailer.OffsetIntSize))
	return offset(parsedOffset), next
}

func (p *bplistParser) objectAtIndex(index uint64) cfValue {
	if index >= p.trailer.NumObjects {
		panic(fmt.Errorf("invalid object#%d (max %d)", index, p.trailer.NumObjects))
	}

	if pval := p.objects[index]; pval != nil {
		return pval
	}

	off, _ := p.parseOffsetAtOffset(offset(p.trailer.OffsetTableOffset + (index * uint64(p.trailer.OffsetIntSize))))
	if off > offset(p.trailer.OffsetTableOffset-1) {
		panic(fmt.Errorf("object#%d starts beyond beginning of object table (0x%x, table@0x%x)", index, off, p.trailer.OffsetTableOffset))
	}

	pval := p.parseTagAtOffset(off)
	p.objects[index] = pval
	return pval

}

func (p *bplistParser) pushNestedObject(off offset) {
	for _, v := range p.containerStack {
		if v == off {
			p.panicNestedObject(off)
		}
	}
	p.containerStack = append(p.containerStack, off)
}

func (p *bplistParser) panicNestedObject(off offset) {
	ids := ""
	for _, v := range p.containerStack {
		ids += fmt.Sprintf("0x%x > ", v)
	}

	// %s0x%d: ids above ends with " > "
	panic(fmt.Errorf("self-referential collection@0x%x (%s0x%x) cannot be deserialized", off, ids, off))
}

func (p *bplistParser) popNestedObject() {
	p.containerStack = p.containerStack[:len(p.containerStack)-1]
}

func (p *bplistParser) parseTagAtOffset(off offset) cfValue {
	tag := p.buffer[off]

	switch tag & 0xF0 {
	case bpTagNull:
		switch tag & 0x0F {
		case bpTagBoolTrue, bpTagBoolFalse:
			return cfBoolean(tag == bpTagBoolTrue)
		}
	case bpTagInteger:
		lo, hi, _ := p.parseIntegerAtOffset(off)
		return &cfNumber{
			signed: hi == signedHighBits, // a signed integer is stored as a 128-bit integer with the top 64 bits set
			value:  lo,
		}
	case bpTagReal:
		nbytes := 1 << (tag & 0x0F)
		switch nbytes {
		case 4:
			bits := binary.BigEndian.Uint32(p.buffer[off+1:])
			return &cfReal{wide: false, value: float64(math.Float32frombits(bits))}
		case 8:
			bits := binary.BigEndian.Uint64(p.buffer[off+1:])
			return &cfReal{wide: true, value: math.Float64frombits(bits)}
		}
		panic(errors.New("illegal float size"))
	case bpTagDate:
		bits := binary.BigEndian.Uint64(p.buffer[off+1:])
		val := math.Float64frombits(bits)

		// Apple Epoch is 20110101000000Z
		// Adjust for UNIX Time
		val += 978307200

		sec, fsec := math.Modf(val)
		time := time.Unix(int64(sec), int64(fsec*float64(time.Second))).In(time.UTC)
		return cfDate(time)
	case bpTagData:
		data := p.parseDataAtOffset(off)
		return cfData(data)
	case bpTagASCIIString:
		str := p.parseASCIIStringAtOffset(off)
		return cfString(str)
	case bpTagUTF16String:
		str := p.parseUTF16StringAtOffset(off)
		return cfString(str)
	case bpTagUID: // Somehow different than int: low half is nbytes - 1 instead of log2(nbytes)
		lo, _, _ := p.parseSizedInteger(off+1, int(tag&0xF)+1)
		return cfUID(lo)
	case bpTagDictionary:
		return p.parseDictionaryAtOffset(off)
	case bpTagArray:
		return p.parseArrayAtOffset(off)
	}
	panic(fmt.Errorf("unexpected atom 0x%2.02x at offset 0x%x", tag, off))
}

func (p *bplistParser) parseIntegerAtOffset(off offset) (uint64, uint64, offset) {
	tag := p.buffer[off]
	return p.parseSizedInteger(off+1, 1<<(tag&0xF))
}

func (p *bplistParser) countForTagAtOffset(off offset) (uint64, offset) {
	tag := p.buffer[off]
	cnt := uint64(tag & 0x0F)
	if cnt == 0xF {
		cnt, _, off = p.parseIntegerAtOffset(off + 1)
		return cnt, off
	}
	return cnt, off + 1
}

func (p *bplistParser) parseDataAtOffset(off offset) []byte {
	len, start := p.countForTagAtOffset(off)
	if start+offset(len) > offset(p.trailer.OffsetTableOffset) {
		panic(fmt.Errorf("data@0x%x too long (%v bytes, max is %v)", off, len, p.trailer.OffsetTableOffset-uint64(start)))
	}
	return p.buffer[start : start+offset(len)]
}

func (p *bplistParser) parseASCIIStringAtOffset(off offset) string {
	len, start := p.countForTagAtOffset(off)
	if start+offset(len) > offset(p.trailer.OffsetTableOffset) {
		panic(fmt.Errorf("ascii string@0x%x too long (%v bytes, max is %v)", off, len, p.trailer.OffsetTableOffset-uint64(start)))
	}

	return zeroCopy8BitString(p.buffer, int(start), int(len))
}

func (p *bplistParser) parseUTF16StringAtOffset(off offset) string {
	len, start := p.countForTagAtOffset(off)
	bytes := len * 2
	if start+offset(bytes) > offset(p.trailer.OffsetTableOffset) {
		panic(fmt.Errorf("utf16 string@0x%x too long (%v bytes, max is %v)", off, bytes, p.trailer.OffsetTableOffset-uint64(start)))
	}

	u16s := make([]uint16, len)
	for i := offset(0); i < offset(len); i++ {
		u16s[i] = binary.BigEndian.Uint16(p.buffer[start+(i*2):])
	}
	runes := utf16.Decode(u16s)
	return string(runes)
}

func (p *bplistParser) parseObjectListAtOffset(off offset, count uint64) []cfValue {
	if off+offset(count*uint64(p.trailer.ObjectRefSize)) > offset(p.trailer.OffsetTableOffset) {
		panic(fmt.Errorf("list@0x%x length (%v) puts its end beyond the offset table at 0x%x", off, count, p.trailer.OffsetTableOffset))
	}
	objects := make([]cfValue, count)

	next := off
	var oid uint64
	for i := uint64(0); i < count; i++ {
		oid, next = p.parseObjectRefAtOffset(next)
		objects[i] = p.objectAtIndex(oid)
	}

	return objects
}

func (p *bplistParser) parseDictionaryAtOffset(off offset) *cfDictionary {
	p.pushNestedObject(off)
	defer p.popNestedObject()

	// a dictionary is an object list of [key key key val val val]
	cnt, start := p.countForTagAtOffset(off)
	objects := p.parseObjectListAtOffset(start, cnt*2)

	keys := make([]string, cnt)
	for i := uint64(0); i < cnt; i++ {
		if str, ok := objects[i].(cfString); ok {
			keys[i] = string(str)
		} else {
			panic(fmt.Errorf("dictionary@0x%x contains non-string key at index %d", off, i))
		}
	}

	return &cfDictionary{
		keys:   keys,
		values: objects[cnt:],
	}
}

func (p *bplistParser) parseArrayAtOffset(off offset) *cfArray {
	p.pushNestedObject(off)
	defer p.popNestedObject()

	// an array is just an object list
	cnt, start := p.countForTagAtOffset(off)
	return &cfArray{p.parseObjectListAtOffset(start, cnt)}
}

func newBplistParser(r io.ReadSeeker) *bplistParser {
	return &bplistParser{reader: r}
}
  0707010000101D000081A4000000000000000000000001645E367C00000FDA000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/howett.net/plist/decode.go package plist

import (
	"bytes"
	"io"
	"reflect"
	"runtime"
)

type parser interface {
	parseDocument() (cfValue, error)
}

// A Decoder reads a property list from an input stream.
type Decoder struct {
	// the format of the most-recently-decoded property list
	Format int

	reader io.ReadSeeker
	lax    bool
}

// Decode works like Unmarshal, except it reads the decoder stream to find property list elements.
//
// After Decoding, the Decoder's Format field will be set to one of the plist format constants.
func (p *Decoder) Decode(v interface{}) (err error) {
	defer func() {
		if r := recover(); r != nil {
			if _, ok := r.(runtime.Error); ok {
				panic(r)
			}
			err = r.(error)
		}
	}()

	header := make([]byte, 6)
	p.reader.Read(header)
	p.reader.Seek(0, 0)

	var parser parser
	var pval cfValue
	if bytes.Equal(header, []byte("bplist")) {
		parser = newBplistParser(p.reader)
		pval, err = parser.parseDocument()
		if err != nil {
			// Had a bplist header, but still got an error: we have to die here.
			return err
		}
		p.Format = BinaryFormat
	} else {
		parser = newXMLPlistParser(p.reader)
		pval, err = parser.parseDocument()
		if _, ok := err.(invalidPlistError); ok {
			// Rewind: the XML parser might have exhausted the file.
			p.reader.Seek(0, 0)
			// We don't use parser here because we want the textPlistParser type
			tp := newTextPlistParser(p.reader)
			pval, err = tp.parseDocument()
			if err != nil {
				return err
			}
			p.Format = tp.format
			if p.Format == OpenStepFormat {
				// OpenStep property lists can only store strings,
				// so we have to turn on lax mode here for the unmarshal step later.
				p.lax = true
			}
		} else {
			if err != nil {
				return err
			}
			p.Format = XMLFormat
		}
	}

	p.unmarshal(pval, reflect.ValueOf(v))
	return
}

// NewDecoder returns a Decoder that reads property list elements from a stream reader, r.
// NewDecoder requires a Seekable stream for the purposes of file type detection.
func NewDecoder(r io.ReadSeeker) *Decoder {
	return &Decoder{Format: InvalidFormat, reader: r, lax: false}
}

// Unmarshal parses a property list document and stores the result in the value pointed to by v.
//
// Unmarshal uses the inverse of the type encodings that Marshal uses, allocating heap-borne types as necessary.
//
// When given a nil pointer, Unmarshal allocates a new value for it to point to.
//
// To decode property list values into an interface value, Unmarshal decodes the property list into the concrete value contained
// in the interface value. If the interface value is nil, Unmarshal stores one of the following in the interface value:
//
//     string, bool, uint64, float64
//     plist.UID for "CoreFoundation Keyed Archiver UIDs" (convertible to uint64)
//     []byte, for plist data
//     []interface{}, for plist arrays
//     map[string]interface{}, for plist dictionaries
//
// If a property list value is not appropriate for a given value type, Unmarshal aborts immediately and returns an error.
//
// As Go does not support 128-bit types, and we don't want to pretend we're giving the user integer types (as opposed to
// secretly passing them structs), Unmarshal will drop the high 64 bits of any 128-bit integers encoded in binary property lists.
// (This is important because CoreFoundation serializes some large 64-bit values as 128-bit values with an empty high half.)
//
// When Unmarshal encounters an OpenStep property list, it will enter a relaxed parsing mode: OpenStep property lists can only store
// plain old data as strings, so we will attempt to recover integer, floating-point, boolean and date values wherever they are necessary.
// (for example, if Unmarshal attempts to unmarshal an OpenStep property list into a time.Time, it will try to parse the string it
// receives as a time.)
//
// Unmarshal returns the detected property list format and an error, if any.
func Unmarshal(data []byte, v interface{}) (format int, err error) {
	r := bytes.NewReader(data)
	dec := NewDecoder(r)
	err = dec.Decode(v)
	format = dec.Format
	return
}
  0707010000101E000081A4000000000000000000000001645E367C0000015B000000000000000000000000000000000000003300000000elemental-cli-0.3.1/vendor/howett.net/plist/doc.go    // Package plist implements encoding and decoding of Apple's "property list" format.
// Property lists come in three sorts: plain text (GNUStep and OpenStep), XML and binary.
// plist supports all of them.
// The mapping between property list and Go objects is described in the documentation for the Marshal and Unmarshal functions.
package plist
 0707010000101F000081A4000000000000000000000001645E367C00000F6C000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/howett.net/plist/encode.go package plist

import (
	"bytes"
	"errors"
	"io"
	"reflect"
	"runtime"
)

type generator interface {
	generateDocument(cfValue)
	Indent(string)
}

// An Encoder writes a property list to an output stream.
type Encoder struct {
	writer io.Writer
	format int

	indent string
}

// Encode writes the property list encoding of v to the stream.
func (p *Encoder) Encode(v interface{}) (err error) {
	defer func() {
		if r := recover(); r != nil {
			if _, ok := r.(runtime.Error); ok {
				panic(r)
			}
			err = r.(error)
		}
	}()

	pval := p.marshal(reflect.ValueOf(v))
	if pval == nil {
		panic(errors.New("plist: no root element to encode"))
	}

	var g generator
	switch p.format {
	case XMLFormat:
		g = newXMLPlistGenerator(p.writer)
	case BinaryFormat, AutomaticFormat:
		g = newBplistGenerator(p.writer)
	case OpenStepFormat, GNUStepFormat:
		g = newTextPlistGenerator(p.writer, p.format)
	}
	g.Indent(p.indent)
	g.generateDocument(pval)
	return
}

// Indent turns on pretty-printing for the XML and Text property list formats.
// Each element begins on a new line and is preceded by one or more copies of indent according to its nesting depth.
func (p *Encoder) Indent(indent string) {
	p.indent = indent
}

// NewEncoder returns an Encoder that writes an XML property list to w.
func NewEncoder(w io.Writer) *Encoder {
	return NewEncoderForFormat(w, XMLFormat)
}

// NewEncoderForFormat returns an Encoder that writes a property list to w in the specified format.
// Pass AutomaticFormat to allow the library to choose the best encoding (currently BinaryFormat).
func NewEncoderForFormat(w io.Writer, format int) *Encoder {
	return &Encoder{
		writer: w,
		format: format,
	}
}

// NewBinaryEncoder returns an Encoder that writes a binary property list to w.
func NewBinaryEncoder(w io.Writer) *Encoder {
	return NewEncoderForFormat(w, BinaryFormat)
}

// Marshal returns the property list encoding of v in the specified format.
//
// Pass AutomaticFormat to allow the library to choose the best encoding (currently BinaryFormat).
//
// Marshal traverses the value v recursively.
// Any nil values encountered, other than the root, will be silently discarded as
// the property list format bears no representation for nil values.
//
// Strings, integers of varying size, floats and booleans are encoded unchanged.
// Strings bearing non-ASCII runes will be encoded differently depending upon the property list format:
// UTF-8 for XML property lists and UTF-16 for binary property lists.
//
// Slice and Array values are encoded as property list arrays, except for
// []byte values, which are encoded as data.
//
// Map values encode as dictionaries. The map's key type must be string; there is no provision for encoding non-string dictionary keys.
//
// Struct values are encoded as dictionaries, with only exported fields being serialized. Struct field encoding may be influenced with the use of tags.
// The tag format is:
//
//     `plist:"<key>[,flags...]"`
//
// The following flags are supported:
//
//     omitempty    Only include the field if it is not set to the zero value for its type.
//
// If the key is "-", the field is ignored.
//
// Anonymous struct fields are encoded as if their exported fields were exposed via the outer struct.
//
// Pointer values encode as the value pointed to.
//
// Channel, complex and function values cannot be encoded. Any attempt to do so causes Marshal to return an error.
func Marshal(v interface{}, format int) ([]byte, error) {
	return MarshalIndent(v, format, "")
}

// MarshalIndent works like Marshal, but each property list element
// begins on a new line and is preceded by one or more copies of indent according to its nesting depth.
func MarshalIndent(v interface{}, format int, indent string) ([]byte, error) {
	buf := &bytes.Buffer{}
	enc := NewEncoderForFormat(buf, format)
	enc.Indent(indent)
	if err := enc.Encode(v); err != nil {
		return nil, err
	}
	return buf.Bytes(), nil
}
07070100001020000081A4000000000000000000000001645E367C000000D7000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/howett.net/plist/fuzz.go   // +build gofuzz

package plist

import (
	"bytes"
)

func Fuzz(data []byte) int {
	buf := bytes.NewReader(data)

	var obj interface{}
	if err := NewDecoder(buf).Decode(&obj); err != nil {
		return 0
	}
	return 1
}
 07070100001021000081A4000000000000000000000001645E367C00001440000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/howett.net/plist/marshal.go    package plist

import (
	"encoding"
	"reflect"
	"time"
)

func isEmptyValue(v reflect.Value) bool {
	switch v.Kind() {
	case reflect.Array, reflect.Map, reflect.Slice, reflect.String:
		return v.Len() == 0
	case reflect.Bool:
		return !v.Bool()
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		return v.Int() == 0
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		return v.Uint() == 0
	case reflect.Float32, reflect.Float64:
		return v.Float() == 0
	case reflect.Interface, reflect.Ptr:
		return v.IsNil()
	}
	return false
}

var (
	plistMarshalerType = reflect.TypeOf((*Marshaler)(nil)).Elem()
	textMarshalerType  = reflect.TypeOf((*encoding.TextMarshaler)(nil)).Elem()
	timeType           = reflect.TypeOf((*time.Time)(nil)).Elem()
)

func implementsInterface(val reflect.Value, interfaceType reflect.Type) (interface{}, bool) {
	if val.CanInterface() && val.Type().Implements(interfaceType) {
		return val.Interface(), true
	}

	if val.CanAddr() {
		pv := val.Addr()
		if pv.CanInterface() && pv.Type().Implements(interfaceType) {
			return pv.Interface(), true
		}
	}
	return nil, false
}

func (p *Encoder) marshalPlistInterface(marshalable Marshaler) cfValue {
	value, err := marshalable.MarshalPlist()
	if err != nil {
		panic(err)
	}
	return p.marshal(reflect.ValueOf(value))
}

// marshalTextInterface marshals a TextMarshaler to a plist string.
func (p *Encoder) marshalTextInterface(marshalable encoding.TextMarshaler) cfValue {
	s, err := marshalable.MarshalText()
	if err != nil {
		panic(err)
	}
	return cfString(s)
}

// marshalStruct marshals a reflected struct value to a plist dictionary
func (p *Encoder) marshalStruct(typ reflect.Type, val reflect.Value) cfValue {
	tinfo, _ := getTypeInfo(typ)

	dict := &cfDictionary{
		keys:   make([]string, 0, len(tinfo.fields)),
		values: make([]cfValue, 0, len(tinfo.fields)),
	}
	for _, finfo := range tinfo.fields {
		value := finfo.value(val)
		if !value.IsValid() || finfo.omitEmpty && isEmptyValue(value) {
			continue
		}
		dict.keys = append(dict.keys, finfo.name)
		dict.values = append(dict.values, p.marshal(value))
	}

	return dict
}

func (p *Encoder) marshalTime(val reflect.Value) cfValue {
	time := val.Interface().(time.Time)
	return cfDate(time)
}

func (p *Encoder) marshal(val reflect.Value) cfValue {
	if !val.IsValid() {
		return nil
	}

	if receiver, can := implementsInterface(val, plistMarshalerType); can {
		return p.marshalPlistInterface(receiver.(Marshaler))
	}

	// time.Time implements TextMarshaler, but we need to store it in RFC3339
	if val.Type() == timeType {
		return p.marshalTime(val)
	}
	if val.Kind() == reflect.Ptr || (val.Kind() == reflect.Interface && val.NumMethod() == 0) {
		ival := val.Elem()
		if ival.IsValid() && ival.Type() == timeType {
			return p.marshalTime(ival)
		}
	}

	// Check for text marshaler.
	if receiver, can := implementsInterface(val, textMarshalerType); can {
		return p.marshalTextInterface(receiver.(encoding.TextMarshaler))
	}

	// Descend into pointers or interfaces
	if val.Kind() == reflect.Ptr || (val.Kind() == reflect.Interface && val.NumMethod() == 0) {
		val = val.Elem()
	}

	// We got this far and still may have an invalid anything or nil ptr/interface
	if !val.IsValid() || ((val.Kind() == reflect.Ptr || val.Kind() == reflect.Interface) && val.IsNil()) {
		return nil
	}

	typ := val.Type()

	if typ == uidType {
		return cfUID(val.Uint())
	}

	if val.Kind() == reflect.Struct {
		return p.marshalStruct(typ, val)
	}

	switch val.Kind() {
	case reflect.String:
		return cfString(val.String())
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		return &cfNumber{signed: true, value: uint64(val.Int())}
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		return &cfNumber{signed: false, value: val.Uint()}
	case reflect.Float32:
		return &cfReal{wide: false, value: val.Float()}
	case reflect.Float64:
		return &cfReal{wide: true, value: val.Float()}
	case reflect.Bool:
		return cfBoolean(val.Bool())
	case reflect.Slice, reflect.Array:
		if typ.Elem().Kind() == reflect.Uint8 {
			bytes := []byte(nil)
			if val.CanAddr() && val.Kind() == reflect.Slice {
				// arrays are may be addressable but do not support .Bytes
				bytes = val.Bytes()
			} else {
				bytes = make([]byte, val.Len())
				reflect.Copy(reflect.ValueOf(bytes), val)
			}
			return cfData(bytes)
		} else {
			values := make([]cfValue, val.Len())
			for i, length := 0, val.Len(); i < length; i++ {
				if subpval := p.marshal(val.Index(i)); subpval != nil {
					values[i] = subpval
				}
			}
			return &cfArray{values}
		}
	case reflect.Map:
		if typ.Key().Kind() != reflect.String {
			panic(&unknownTypeError{typ})
		}

		l := val.Len()
		dict := &cfDictionary{
			keys:   make([]string, 0, l),
			values: make([]cfValue, 0, l),
		}
		for _, keyv := range val.MapKeys() {
			if subpval := p.marshal(val.MapIndex(keyv)); subpval != nil {
				dict.keys = append(dict.keys, keyv.String())
				dict.values = append(dict.values, subpval)
			}
		}
		return dict
	default:
		panic(&unknownTypeError{typ})
	}
}
07070100001022000081A4000000000000000000000001645E367C000002FB000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/howett.net/plist/must.go   package plist

import (
	"io"
	"strconv"
)

type mustWriter struct {
	io.Writer
}

func (w mustWriter) Write(p []byte) (int, error) {
	n, err := w.Writer.Write(p)
	if err != nil {
		panic(err)
	}
	return n, nil
}

func mustParseInt(str string, base, bits int) int64 {
	i, err := strconv.ParseInt(str, base, bits)
	if err != nil {
		panic(err)
	}
	return i
}

func mustParseUint(str string, base, bits int) uint64 {
	i, err := strconv.ParseUint(str, base, bits)
	if err != nil {
		panic(err)
	}
	return i
}

func mustParseFloat(str string, bits int) float64 {
	i, err := strconv.ParseFloat(str, bits)
	if err != nil {
		panic(err)
	}
	return i
}

func mustParseBool(str string) bool {
	i, err := strconv.ParseBool(str)
	if err != nil {
		panic(err)
	}
	return i
}
 07070100001023000081A4000000000000000000000001645E367C000007F8000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/howett.net/plist/plist.go  package plist

import (
	"reflect"
)

// Property list format constants
const (
	// Used by Decoder to represent an invalid property list.
	InvalidFormat int = 0

	// Used to indicate total abandon with regards to Encoder's output format.
	AutomaticFormat = 0

	XMLFormat      = 1
	BinaryFormat   = 2
	OpenStepFormat = 3
	GNUStepFormat  = 4
)

var FormatNames = map[int]string{
	InvalidFormat:  "unknown/invalid",
	XMLFormat:      "XML",
	BinaryFormat:   "Binary",
	OpenStepFormat: "OpenStep",
	GNUStepFormat:  "GNUStep",
}

type unknownTypeError struct {
	typ reflect.Type
}

func (u *unknownTypeError) Error() string {
	return "plist: can't marshal value of type " + u.typ.String()
}

type invalidPlistError struct {
	format string
	err    error
}

func (e invalidPlistError) Error() string {
	s := "plist: invalid " + e.format + " property list"
	if e.err != nil {
		s += ": " + e.err.Error()
	}
	return s
}

type plistParseError struct {
	format string
	err    error
}

func (e plistParseError) Error() string {
	s := "plist: error parsing " + e.format + " property list"
	if e.err != nil {
		s += ": " + e.err.Error()
	}
	return s
}

// A UID represents a unique object identifier. UIDs are serialized in a manner distinct from
// that of integers.
type UID uint64

// Marshaler is the interface implemented by types that can marshal themselves into valid
// property list objects. The returned value is marshaled in place of the original value
// implementing Marshaler
//
// If an error is returned by MarshalPlist, marshaling stops and the error is returned.
type Marshaler interface {
	MarshalPlist() (interface{}, error)
}

// Unmarshaler is the interface implemented by types that can unmarshal themselves from
// property list objects. The UnmarshalPlist method receives a function that may
// be called to unmarshal the original property list value into a field or variable.
//
// It is safe to call the unmarshal function more than once.
type Unmarshaler interface {
	UnmarshalPlist(unmarshal func(interface{}) error) error
}
07070100001024000081A4000000000000000000000001645E367C00000AE3000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/howett.net/plist/plist_types.go    package plist

import (
	"hash/crc32"
	"sort"
	"time"
	"strconv"
)

// magic value used in the non-binary encoding of UIDs
// (stored as a dictionary mapping CF$UID->integer)
const cfUIDMagic = "CF$UID"

type cfValue interface {
	typeName() string
	hash() interface{}
}

type cfDictionary struct {
	keys   sort.StringSlice
	values []cfValue
}

func (*cfDictionary) typeName() string {
	return "dictionary"
}

func (p *cfDictionary) hash() interface{} {
	return p
}

func (p *cfDictionary) Len() int {
	return len(p.keys)
}

func (p *cfDictionary) Less(i, j int) bool {
	return p.keys.Less(i, j)
}

func (p *cfDictionary) Swap(i, j int) {
	p.keys.Swap(i, j)
	p.values[i], p.values[j] = p.values[j], p.values[i]
}

func (p *cfDictionary) sort() {
	sort.Sort(p)
}

func (p *cfDictionary) maybeUID(lax bool) cfValue {
	if len(p.keys) == 1 && p.keys[0] == "CF$UID" && len(p.values) == 1 {
		pval := p.values[0]
		if integer, ok := pval.(*cfNumber); ok {
			return cfUID(integer.value)
		}
		// Openstep only has cfString. Act like the unmarshaller a bit.
		if lax {
			if str, ok := pval.(cfString); ok {
				if i, err := strconv.ParseUint(string(str), 10, 64); err == nil {
					return cfUID(i)
				}
			}
		}
	}
	return p
}

type cfArray struct {
	values []cfValue
}

func (*cfArray) typeName() string {
	return "array"
}

func (p *cfArray) hash() interface{} {
	return p
}

type cfString string

func (cfString) typeName() string {
	return "string"
}

func (p cfString) hash() interface{} {
	return string(p)
}

type cfNumber struct {
	signed bool
	value  uint64
}

func (*cfNumber) typeName() string {
	return "integer"
}

func (p *cfNumber) hash() interface{} {
	if p.signed {
		return int64(p.value)
	}
	return p.value
}

type cfReal struct {
	wide  bool
	value float64
}

func (cfReal) typeName() string {
	return "real"
}

func (p *cfReal) hash() interface{} {
	if p.wide {
		return p.value
	}
	return float32(p.value)
}

type cfBoolean bool

func (cfBoolean) typeName() string {
	return "boolean"
}

func (p cfBoolean) hash() interface{} {
	return bool(p)
}

type cfUID UID

func (cfUID) typeName() string {
	return "UID"
}

func (p cfUID) hash() interface{} {
	return p
}

func (p cfUID) toDict() *cfDictionary {
	return &cfDictionary{
		keys: []string{cfUIDMagic},
		values: []cfValue{&cfNumber{
			signed: false,
			value:  uint64(p),
		}},
	}
}

type cfData []byte

func (cfData) typeName() string {
	return "data"
}

func (p cfData) hash() interface{} {
	// Data are uniqued by their checksums.
	// Todo: Look at calculating this only once and storing it somewhere;
	// crc32 is fairly quick, however.
	return crc32.ChecksumIEEE([]byte(p))
}

type cfDate time.Time

func (cfDate) typeName() string {
	return "date"
}

func (p cfDate) hash() interface{} {
	return time.Time(p)
}
 07070100001025000081A4000000000000000000000001645E367C00001308000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/howett.net/plist/text_generator.go package plist

import (
	"encoding/hex"
	"io"
	"strconv"
	"time"
)

type textPlistGenerator struct {
	writer io.Writer
	format int

	quotableTable *characterSet

	indent string
	depth  int

	dictKvDelimiter, dictEntryDelimiter, arrayDelimiter []byte
}

var (
	textPlistTimeLayout = "2006-01-02 15:04:05 -0700"
	padding             = "0000"
)

func (p *textPlistGenerator) generateDocument(pval cfValue) {
	p.writePlistValue(pval)
}

func (p *textPlistGenerator) plistQuotedString(str string) string {
	if str == "" {
		return `""`
	}
	s := ""
	quot := false
	for _, r := range str {
		if r > 0xFF {
			quot = true
			s += `\U`
			us := strconv.FormatInt(int64(r), 16)
			s += padding[len(us):]
			s += us
		} else if r > 0x7F {
			quot = true
			s += `\`
			us := strconv.FormatInt(int64(r), 8)
			s += padding[1+len(us):]
			s += us
		} else {
			c := uint8(r)
			if p.quotableTable.ContainsByte(c) {
				quot = true
			}

			switch c {
			case '\a':
				s += `\a`
			case '\b':
				s += `\b`
			case '\v':
				s += `\v`
			case '\f':
				s += `\f`
			case '\\':
				s += `\\`
			case '"':
				s += `\"`
			case '\t', '\r', '\n':
				fallthrough
			default:
				s += string(c)
			}
		}
	}
	if quot {
		s = `"` + s + `"`
	}
	return s
}

func (p *textPlistGenerator) deltaIndent(depthDelta int) {
	if depthDelta < 0 {
		p.depth--
	} else if depthDelta > 0 {
		p.depth++
	}
}

func (p *textPlistGenerator) writeIndent() {
	if len(p.indent) == 0 {
		return
	}
	if len(p.indent) > 0 {
		p.writer.Write([]byte("\n"))
		for i := 0; i < p.depth; i++ {
			io.WriteString(p.writer, p.indent)
		}
	}
}

func (p *textPlistGenerator) writePlistValue(pval cfValue) {
	if pval == nil {
		return
	}

	switch pval := pval.(type) {
	case *cfDictionary:
		pval.sort()
		p.writer.Write([]byte(`{`))
		p.deltaIndent(1)
		for i, k := range pval.keys {
			p.writeIndent()
			io.WriteString(p.writer, p.plistQuotedString(k))
			p.writer.Write(p.dictKvDelimiter)
			p.writePlistValue(pval.values[i])
			p.writer.Write(p.dictEntryDelimiter)
		}
		p.deltaIndent(-1)
		p.writeIndent()
		p.writer.Write([]byte(`}`))
	case *cfArray:
		p.writer.Write([]byte(`(`))
		p.deltaIndent(1)
		for _, v := range pval.values {
			p.writeIndent()
			p.writePlistValue(v)
			p.writer.Write(p.arrayDelimiter)
		}
		p.deltaIndent(-1)
		p.writeIndent()
		p.writer.Write([]byte(`)`))
	case cfString:
		io.WriteString(p.writer, p.plistQuotedString(string(pval)))
	case *cfNumber:
		if p.format == GNUStepFormat {
			p.writer.Write([]byte(`<*I`))
		}
		if pval.signed {
			io.WriteString(p.writer, strconv.FormatInt(int64(pval.value), 10))
		} else {
			io.WriteString(p.writer, strconv.FormatUint(pval.value, 10))
		}
		if p.format == GNUStepFormat {
			p.writer.Write([]byte(`>`))
		}
	case *cfReal:
		if p.format == GNUStepFormat {
			p.writer.Write([]byte(`<*R`))
		}
		// GNUstep does not differentiate between 32/64-bit floats.
		io.WriteString(p.writer, strconv.FormatFloat(pval.value, 'g', -1, 64))
		if p.format == GNUStepFormat {
			p.writer.Write([]byte(`>`))
		}
	case cfBoolean:
		if p.format == GNUStepFormat {
			if pval {
				p.writer.Write([]byte(`<*BY>`))
			} else {
				p.writer.Write([]byte(`<*BN>`))
			}
		} else {
			if pval {
				p.writer.Write([]byte(`1`))
			} else {
				p.writer.Write([]byte(`0`))
			}
		}
	case cfData:
		var hexencoded [9]byte
		var l int
		var asc = 9
		hexencoded[8] = ' '

		p.writer.Write([]byte(`<`))
		b := []byte(pval)
		for i := 0; i < len(b); i += 4 {
			l = i + 4
			if l >= len(b) {
				l = len(b)
				// We no longer need the space - or the rest of the buffer.
				// (we used >= above to get this part without another conditional :P)
				asc = (l - i) * 2
			}
			// Fill the buffer (only up to 8 characters, to preserve the space we implicitly include
			// at the end of every encode)
			hex.Encode(hexencoded[:8], b[i:l])
			io.WriteString(p.writer, string(hexencoded[:asc]))
		}
		p.writer.Write([]byte(`>`))
	case cfDate:
		if p.format == GNUStepFormat {
			p.writer.Write([]byte(`<*D`))
			io.WriteString(p.writer, time.Time(pval).In(time.UTC).Format(textPlistTimeLayout))
			p.writer.Write([]byte(`>`))
		} else {
			io.WriteString(p.writer, p.plistQuotedString(time.Time(pval).In(time.UTC).Format(textPlistTimeLayout)))
		}
	case cfUID:
		p.writePlistValue(pval.toDict())
	}
}

func (p *textPlistGenerator) Indent(i string) {
	p.indent = i
	if i == "" {
		p.dictKvDelimiter = []byte(`=`)
	} else {
		// For pretty-printing
		p.dictKvDelimiter = []byte(` = `)
	}
}

func newTextPlistGenerator(w io.Writer, format int) *textPlistGenerator {
	table := &osQuotable
	if format == GNUStepFormat {
		table = &gsQuotable
	}
	return &textPlistGenerator{
		writer:             mustWriter{w},
		format:             format,
		quotableTable:      table,
		dictKvDelimiter:    []byte(`=`),
		arrayDelimiter:     []byte(`,`),
		dictEntryDelimiter: []byte(`;`),
	}
}
07070100001026000081A4000000000000000000000001645E367C00003058000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/howett.net/plist/text_parser.go    // Parser for text plist formats.
// @see https://github.com/apple/swift-corelibs-foundation/blob/master/CoreFoundation/Parsing.subproj/CFOldStylePList.c
// @see https://github.com/gnustep/libs-base/blob/master/Source/NSPropertyList.m
// This parser also handles strings files.

package plist

import (
	"encoding/base64"
	"encoding/binary"
	"errors"
	"fmt"
	"io"
	"io/ioutil"
	"runtime"
	"strings"
	"time"
	"unicode/utf16"
	"unicode/utf8"
)

type textPlistParser struct {
	reader io.Reader
	format int

	input string
	start int
	pos   int
	width int
}

func convertU16(buffer []byte, bo binary.ByteOrder) (string, error) {
	if len(buffer)%2 != 0 {
		return "", errors.New("truncated utf16")
	}

	tmp := make([]uint16, len(buffer)/2)
	for i := 0; i < len(buffer); i += 2 {
		tmp[i/2] = bo.Uint16(buffer[i : i+2])
	}
	return string(utf16.Decode(tmp)), nil
}

func guessEncodingAndConvert(buffer []byte) (string, error) {
	if len(buffer) >= 3 && buffer[0] == 0xEF && buffer[1] == 0xBB && buffer[2] == 0xBF {
		// UTF-8 BOM
		return zeroCopy8BitString(buffer, 3, len(buffer)-3), nil
	} else if len(buffer) >= 2 {
		// UTF-16 guesses

		switch {
		// stream is big-endian (BOM is FE FF or head is 00 XX)
		case (buffer[0] == 0xFE && buffer[1] == 0xFF):
			return convertU16(buffer[2:], binary.BigEndian)
		case (buffer[0] == 0 && buffer[1] != 0):
			return convertU16(buffer, binary.BigEndian)

		// stream is little-endian (BOM is FE FF or head is XX 00)
		case (buffer[0] == 0xFF && buffer[1] == 0xFE):
			return convertU16(buffer[2:], binary.LittleEndian)
		case (buffer[0] != 0 && buffer[1] == 0):
			return convertU16(buffer, binary.LittleEndian)
		}
	}

	// fallback: assume ASCII (not great!)
	return zeroCopy8BitString(buffer, 0, len(buffer)), nil
}

func (p *textPlistParser) parseDocument() (pval cfValue, parseError error) {
	defer func() {
		if r := recover(); r != nil {
			if _, ok := r.(runtime.Error); ok {
				panic(r)
			}
			// Wrap all non-invalid-plist errors.
			parseError = plistParseError{"text", r.(error)}
		}
	}()

	buffer, err := ioutil.ReadAll(p.reader)
	if err != nil {
		panic(err)
	}

	p.input, err = guessEncodingAndConvert(buffer)
	if err != nil {
		panic(err)
	}

	val := p.parsePlistValue()

	p.skipWhitespaceAndComments()
	if p.peek() != eof {
		if _, ok := val.(cfString); !ok {
			p.error("garbage after end of document")
		}

		// Try parsing as .strings.
		// See -[NSDictionary propertyListFromStringsFileFormat:].
		p.start = 0
		p.pos = 0
		val = p.parseDictionary(true)
	}

	pval = val

	return
}

const eof rune = -1

func (p *textPlistParser) error(e string, args ...interface{}) {
	line := strings.Count(p.input[:p.pos], "\n")
	char := p.pos - strings.LastIndex(p.input[:p.pos], "\n") - 1
	panic(fmt.Errorf("%s at line %d character %d", fmt.Sprintf(e, args...), line, char))
}

func (p *textPlistParser) next() rune {
	if int(p.pos) >= len(p.input) {
		p.width = 0
		return eof
	}
	r, w := utf8.DecodeRuneInString(p.input[p.pos:])
	p.width = w
	p.pos += p.width
	return r
}

func (p *textPlistParser) backup() {
	p.pos -= p.width
}

func (p *textPlistParser) peek() rune {
	r := p.next()
	p.backup()
	return r
}

func (p *textPlistParser) emit() string {
	s := p.input[p.start:p.pos]
	p.start = p.pos
	return s
}

func (p *textPlistParser) ignore() {
	p.start = p.pos
}

func (p *textPlistParser) empty() bool {
	return p.start == p.pos
}

func (p *textPlistParser) scanUntil(ch rune) {
	if x := strings.IndexRune(p.input[p.pos:], ch); x >= 0 {
		p.pos += x
		return
	}
	p.pos = len(p.input)
}

func (p *textPlistParser) scanUntilAny(chs string) {
	if x := strings.IndexAny(p.input[p.pos:], chs); x >= 0 {
		p.pos += x
		return
	}
	p.pos = len(p.input)
}

func (p *textPlistParser) scanCharactersInSet(ch *characterSet) {
	for ch.Contains(p.next()) {
	}
	p.backup()
}

func (p *textPlistParser) scanCharactersNotInSet(ch *characterSet) {
	var r rune
	for {
		r = p.next()
		if r == eof || ch.Contains(r) {
			break
		}
	}
	p.backup()
}

func (p *textPlistParser) skipWhitespaceAndComments() {
	for {
		p.scanCharactersInSet(&whitespace)
		if strings.HasPrefix(p.input[p.pos:], "//") {
			p.scanCharactersNotInSet(&newlineCharacterSet)
		} else if strings.HasPrefix(p.input[p.pos:], "/*") {
			if x := strings.Index(p.input[p.pos:], "*/"); x >= 0 {
				p.pos += x + 2 // skip the */ as well
				continue       // consume more whitespace
			} else {
				p.error("unexpected eof in block comment")
			}
		} else {
			break
		}
	}
	p.ignore()
}

func (p *textPlistParser) parseOctalDigits(max int) uint64 {
	var val uint64

	for i := 0; i < max; i++ {
		r := p.next()

		if r >= '0' && r <= '7' {
			val <<= 3
			val |= uint64((r - '0'))
		} else {
			p.backup()
			break
		}
	}
	return val
}

func (p *textPlistParser) parseHexDigits(max int) uint64 {
	var val uint64

	for i := 0; i < max; i++ {
		r := p.next()

		if r >= 'a' && r <= 'f' {
			val <<= 4
			val |= 10 + uint64((r - 'a'))
		} else if r >= 'A' && r <= 'F' {
			val <<= 4
			val |= 10 + uint64((r - 'A'))
		} else if r >= '0' && r <= '9' {
			val <<= 4
			val |= uint64((r - '0'))
		} else {
			p.backup()
			break
		}
	}
	return val
}

// the \ has already been consumed
func (p *textPlistParser) parseEscape() string {
	var s string
	switch p.next() {
	case 'a':
		s = "\a"
	case 'b':
		s = "\b"
	case 'v':
		s = "\v"
	case 'f':
		s = "\f"
	case 't':
		s = "\t"
	case 'r':
		s = "\r"
	case 'n':
		s = "\n"
	case '\\':
		s = `\`
	case '"':
		s = `"`
	case 'x': // This is our extension.
		s = string(rune(p.parseHexDigits(2)))
	case 'u', 'U': // 'u' is a GNUstep extension.
		s = string(rune(p.parseHexDigits(4)))
	case '0', '1', '2', '3', '4', '5', '6', '7':
		p.backup() // we've already consumed one of the digits
		s = string(rune(p.parseOctalDigits(3)))
	default:
		p.backup() // everything else should be accepted
	}
	p.ignore() // skip the entire escape sequence
	return s
}

// the " has already been consumed
func (p *textPlistParser) parseQuotedString() cfString {
	p.ignore() // ignore the "

	slowPath := false
	s := ""

	for {
		p.scanUntilAny(`"\`)
		switch p.peek() {
		case eof:
			p.error("unexpected eof in quoted string")
		case '"':
			section := p.emit()
			p.pos++ // skip "
			if !slowPath {
				return cfString(section)
			} else {
				s += section
				return cfString(s)
			}
		case '\\':
			slowPath = true
			s += p.emit()
			p.next() // consume \
			s += p.parseEscape()
		}
	}
}

func (p *textPlistParser) parseUnquotedString() cfString {
	p.scanCharactersNotInSet(&gsQuotable)
	s := p.emit()
	if s == "" {
		p.error("invalid unquoted string (found an unquoted character that should be quoted?)")
	}

	return cfString(s)
}

// the { has already been consumed
func (p *textPlistParser) parseDictionary(ignoreEof bool) cfValue {
	//p.ignore() // ignore the {
	var keypv cfValue
	keys := make([]string, 0, 32)
	values := make([]cfValue, 0, 32)
outer:
	for {
		p.skipWhitespaceAndComments()

		switch p.next() {
		case eof:
			if !ignoreEof {
				p.error("unexpected eof in dictionary")
			}
			fallthrough
		case '}':
			break outer
		case '"':
			keypv = p.parseQuotedString()
		default:
			p.backup()
			keypv = p.parseUnquotedString()
		}

		// INVARIANT: key can't be nil; parseQuoted and parseUnquoted
		// will panic out before they return nil.

		p.skipWhitespaceAndComments()

		var val cfValue
		n := p.next()
		if n == ';' {
			// This is supposed to be .strings-specific.
			// GNUstep parses this as an empty string.
			// Apple copies the key like we do.
			val = keypv
		} else if n == '=' {
			// whitespace is consumed within
			val = p.parsePlistValue()

			p.skipWhitespaceAndComments()

			if p.next() != ';' {
				p.error("missing ; in dictionary")
			}
		} else {
			p.error("missing = in dictionary")
		}

		keys = append(keys, string(keypv.(cfString)))
		values = append(values, val)
	}

	dict := &cfDictionary{keys: keys, values: values}
	return dict.maybeUID(p.format == OpenStepFormat)
}

// the ( has already been consumed
func (p *textPlistParser) parseArray() *cfArray {
	//p.ignore() // ignore the (
	values := make([]cfValue, 0, 32)
outer:
	for {
		p.skipWhitespaceAndComments()

		switch p.next() {
		case eof:
			p.error("unexpected eof in array")
		case ')':
			break outer // done here
		case ',':
			continue // restart; ,) is valid and we don't want to blow it
		default:
			p.backup()
		}

		pval := p.parsePlistValue() // whitespace is consumed within
		if str, ok := pval.(cfString); ok && string(str) == "" {
			// Empty strings in arrays are apparently skipped?
			// TODO: Figure out why this was implemented.
			continue
		}
		values = append(values, pval)
	}
	return &cfArray{values}
}

// the <* have already been consumed
func (p *textPlistParser) parseGNUStepValue() cfValue {
	typ := p.next()

	if typ == '>' || typ == eof { // <*>, <*EOF
		p.error("invalid GNUStep extended value")
	}

	if typ != 'I' && typ != 'R' && typ != 'B' && typ != 'D' {
		// early out: no need to collect the value if we'll fail to understand it
		p.error("unknown GNUStep extended value type `" + string(typ) + "'")
	}

	if p.peek() == '"' { // <*x"
		p.next()
	}

	p.ignore()
	p.scanUntil('>')

	if p.peek() == eof { // <*xEOF or <*x"EOF
		p.error("unterminated GNUStep extended value")
	}

	if p.empty() { // <*x>, <*x"">
		p.error("empty GNUStep extended value")
	}

	v := p.emit()
	p.next() // consume the >

	if v[len(v)-1] == '"' {
		// GNUStep tolerates malformed quoted values, as in <*I5"> and <*I"5>
		// It purportedly does so by stripping the trailing quote
		v = v[:len(v)-1]
	}

	switch typ {
	case 'I':
		if v[0] == '-' {
			n := mustParseInt(v, 10, 64)
			return &cfNumber{signed: true, value: uint64(n)}
		} else {
			n := mustParseUint(v, 10, 64)
			return &cfNumber{signed: false, value: n}
		}
	case 'R':
		n := mustParseFloat(v, 64)
		return &cfReal{wide: true, value: n} // TODO(DH) 32/64
	case 'B':
		b := v[0] == 'Y'
		return cfBoolean(b)
	case 'D':
		t, err := time.Parse(textPlistTimeLayout, v)
		if err != nil {
			p.error(err.Error())
		}

		return cfDate(t.In(time.UTC))
	}
	// We should never get here; we checked the type above
	return nil
}

// the <[ have already been consumed
func (p *textPlistParser) parseGNUStepBase64() cfData {
	p.ignore()
	p.scanUntil(']')
	v := p.emit()

	if p.next() != ']' {
		p.error("invalid GNUStep base64 data (expected ']')")
	}

	if p.next() != '>' {
		p.error("invalid GNUStep base64 data (expected '>')")
	}

	// Emulate NSDataBase64DecodingIgnoreUnknownCharacters
	filtered := strings.Map(base64ValidChars.Map, v)
	data, err := base64.StdEncoding.DecodeString(filtered)
	if err != nil {
		p.error("invalid GNUStep base64 data: " + err.Error())
	}
	return cfData(data)
}

// The < has already been consumed
func (p *textPlistParser) parseHexData() cfData {
	buf := make([]byte, 256)
	i := 0
	c := 0

	for {
		r := p.next()
		switch r {
		case eof:
			p.error("unexpected eof in data")
		case '>':
			if c&1 == 1 {
				p.error("uneven number of hex digits in data")
			}
			p.ignore()
			return cfData(buf[:i])
		// Apple and GNUstep both want these in pairs. We are a bit more lax.
		// GS accepts comments too, but that seems like a lot of work.
		case ' ', '\t', '\n', '\r', '\u2028', '\u2029':
			continue
		}

		buf[i] <<= 4
		if r >= 'a' && r <= 'f' {
			buf[i] |= 10 + byte((r - 'a'))
		} else if r >= 'A' && r <= 'F' {
			buf[i] |= 10 + byte((r - 'A'))
		} else if r >= '0' && r <= '9' {
			buf[i] |= byte((r - '0'))
		} else {
			p.error("unexpected hex digit `%c'", r)
		}

		c++
		if c&1 == 0 {
			i++
			if i >= len(buf) {
				realloc := make([]byte, len(buf)*2)
				copy(realloc, buf)
				buf = realloc
			}
		}
	}
}

func (p *textPlistParser) parsePlistValue() cfValue {
	for {
		p.skipWhitespaceAndComments()

		switch p.next() {
		case eof:
			return &cfDictionary{}
		case '<':
			switch p.next() {
			case '*':
				p.format = GNUStepFormat
				return p.parseGNUStepValue()
			case '[':
				p.format = GNUStepFormat
				return p.parseGNUStepBase64()
			default:
				p.backup()
				return p.parseHexData()
			}
		case '"':
			return p.parseQuotedString()
		case '{':
			return p.parseDictionary(false)
		case '(':
			return p.parseArray()
		default:
			p.backup()
			return p.parseUnquotedString()
		}
	}
}

func newTextPlistParser(r io.Reader) *textPlistParser {
	return &textPlistParser{
		reader: r,
		format: OpenStepFormat,
	}
}
07070100001027000081A4000000000000000000000001645E367C000005A6000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/howett.net/plist/text_tables.go    package plist

type characterSet [4]uint64

func (s *characterSet) Map(ch rune) rune {
	if s.Contains(ch) {
		return ch
	} else {
		return -1
	}
}

func (s *characterSet) Contains(ch rune) bool {
	return ch >= 0 && ch <= 255 && s.ContainsByte(byte(ch))
}

func (s *characterSet) ContainsByte(ch byte) bool {
	return (s[ch/64]&(1<<(ch%64)) > 0)
}

// Bitmap of characters that must be inside a quoted string
// when written to an old-style property list
// Low bits represent lower characters, and each uint64 represents 64 characters.
var gsQuotable = characterSet{
	0x78001385ffffffff,
	0xa800000138000000,
	0xffffffffffffffff,
	0xffffffffffffffff,
}

// 7f instead of 3f in the top line: CFOldStylePlist.c says . is valid, but they quote it.
// ef instead og 6f in the top line: ' will be quoted
var osQuotable = characterSet{
	0xf4007fefffffffff,
	0xf8000001f8000001,
	0xffffffffffffffff,
	0xffffffffffffffff,
}

var whitespace = characterSet{
	0x0000000100003f00,
	0x0000000000000000,
	0x0000000000000000,
	0x0000000000000000,
}

var newlineCharacterSet = characterSet{
	0x0000000000002400,
	0x0000000000000000,
	0x0000000000000000,
	0x0000000000000000,
}

// Bitmap of characters that are valid in base64-encoded strings.
// Used to filter out non-b64 characters to emulate NSDataBase64DecodingIgnoreUnknownCharacters
var base64ValidChars = characterSet{
	0x23ff880000000000,
	0x07fffffe07fffffe,
	0x0000000000000000,
	0x0000000000000000,
}
  07070100001028000081A4000000000000000000000001645E367C000010B6000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/howett.net/plist/typeinfo.go   package plist

import (
	"reflect"
	"strings"
	"sync"
)

// typeInfo holds details for the plist representation of a type.
type typeInfo struct {
	fields []fieldInfo
}

// fieldInfo holds details for the plist representation of a single field.
type fieldInfo struct {
	idx       []int
	name      string
	omitEmpty bool
}

var tinfoMap = make(map[reflect.Type]*typeInfo)
var tinfoLock sync.RWMutex

// getTypeInfo returns the typeInfo structure with details necessary
// for marshalling and unmarshalling typ.
func getTypeInfo(typ reflect.Type) (*typeInfo, error) {
	tinfoLock.RLock()
	tinfo, ok := tinfoMap[typ]
	tinfoLock.RUnlock()
	if ok {
		return tinfo, nil
	}
	tinfo = &typeInfo{}
	if typ.Kind() == reflect.Struct {
		n := typ.NumField()
		for i := 0; i < n; i++ {
			f := typ.Field(i)
			if f.PkgPath != "" || f.Tag.Get("plist") == "-" {
				continue // Private field
			}

			// For embedded structs, embed its fields.
			if f.Anonymous {
				t := f.Type
				if t.Kind() == reflect.Ptr {
					t = t.Elem()
				}
				if t.Kind() == reflect.Struct {
					inner, err := getTypeInfo(t)
					if err != nil {
						return nil, err
					}
					for _, finfo := range inner.fields {
						finfo.idx = append([]int{i}, finfo.idx...)
						if err := addFieldInfo(typ, tinfo, &finfo); err != nil {
							return nil, err
						}
					}
					continue
				}
			}

			finfo, err := structFieldInfo(typ, &f)
			if err != nil {
				return nil, err
			}

			// Add the field if it doesn't conflict with other fields.
			if err := addFieldInfo(typ, tinfo, finfo); err != nil {
				return nil, err
			}
		}
	}
	tinfoLock.Lock()
	tinfoMap[typ] = tinfo
	tinfoLock.Unlock()
	return tinfo, nil
}

// structFieldInfo builds and returns a fieldInfo for f.
func structFieldInfo(typ reflect.Type, f *reflect.StructField) (*fieldInfo, error) {
	finfo := &fieldInfo{idx: f.Index}

	// Split the tag from the xml namespace if necessary.
	tag := f.Tag.Get("plist")

	// Parse flags.
	tokens := strings.Split(tag, ",")
	tag = tokens[0]
	if len(tokens) > 1 {
		tag = tokens[0]
		for _, flag := range tokens[1:] {
			switch flag {
			case "omitempty":
				finfo.omitEmpty = true
			}
		}
	}

	if tag == "" {
		// If the name part of the tag is completely empty,
		// use the field name
		finfo.name = f.Name
		return finfo, nil
	}

	finfo.name = tag
	return finfo, nil
}

// addFieldInfo adds finfo to tinfo.fields if there are no
// conflicts, or if conflicts arise from previous fields that were
// obtained from deeper embedded structures than finfo. In the latter
// case, the conflicting entries are dropped.
// A conflict occurs when the path (parent + name) to a field is
// itself a prefix of another path, or when two paths match exactly.
// It is okay for field paths to share a common, shorter prefix.
func addFieldInfo(typ reflect.Type, tinfo *typeInfo, newf *fieldInfo) error {
	var conflicts []int
	// First, figure all conflicts. Most working code will have none.
	for i := range tinfo.fields {
		oldf := &tinfo.fields[i]
		if newf.name == oldf.name {
			conflicts = append(conflicts, i)
		}
	}

	// Without conflicts, add the new field and return.
	if conflicts == nil {
		tinfo.fields = append(tinfo.fields, *newf)
		return nil
	}

	// If any conflict is shallower, ignore the new field.
	// This matches the Go field resolution on embedding.
	for _, i := range conflicts {
		if len(tinfo.fields[i].idx) < len(newf.idx) {
			return nil
		}
	}

	// Otherwise, the new field is shallower, and thus takes precedence,
	// so drop the conflicting fields from tinfo and append the new one.
	for c := len(conflicts) - 1; c >= 0; c-- {
		i := conflicts[c]
		copy(tinfo.fields[i:], tinfo.fields[i+1:])
		tinfo.fields = tinfo.fields[:len(tinfo.fields)-1]
	}
	tinfo.fields = append(tinfo.fields, *newf)
	return nil
}

// value returns v's field value corresponding to finfo.
// It's equivalent to v.FieldByIndex(finfo.idx), but initializes
// and dereferences pointers as necessary.
func (finfo *fieldInfo) value(v reflect.Value) reflect.Value {
	for i, x := range finfo.idx {
		if i > 0 {
			t := v.Type()
			if t.Kind() == reflect.Ptr && t.Elem().Kind() == reflect.Struct {
				if v.IsNil() {
					v.Set(reflect.New(v.Type().Elem()))
				}
				v = v.Elem()
			}
		}
		v = v.Field(x)
	}
	return v
}
  07070100001029000081A4000000000000000000000001645E367C00001EBA000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/howett.net/plist/unmarshal.go  package plist

import (
	"encoding"
	"fmt"
	"reflect"
	"runtime"
	"time"
)

type incompatibleDecodeTypeError struct {
	dest reflect.Type
	src  string // type name (from cfValue)
}

func (u *incompatibleDecodeTypeError) Error() string {
	return fmt.Sprintf("plist: type mismatch: tried to decode plist type `%v' into value of type `%v'", u.src, u.dest)
}

var (
	plistUnmarshalerType = reflect.TypeOf((*Unmarshaler)(nil)).Elem()
	textUnmarshalerType  = reflect.TypeOf((*encoding.TextUnmarshaler)(nil)).Elem()
	uidType              = reflect.TypeOf(UID(0))
)

func isEmptyInterface(v reflect.Value) bool {
	return v.Kind() == reflect.Interface && v.NumMethod() == 0
}

func (p *Decoder) unmarshalPlistInterface(pval cfValue, unmarshalable Unmarshaler) {
	err := unmarshalable.UnmarshalPlist(func(i interface{}) (err error) {
		defer func() {
			if r := recover(); r != nil {
				if _, ok := r.(runtime.Error); ok {
					panic(r)
				}
				err = r.(error)
			}
		}()
		p.unmarshal(pval, reflect.ValueOf(i))
		return
	})

	if err != nil {
		panic(err)
	}
}

func (p *Decoder) unmarshalTextInterface(pval cfString, unmarshalable encoding.TextUnmarshaler) {
	err := unmarshalable.UnmarshalText([]byte(pval))
	if err != nil {
		panic(err)
	}
}

func (p *Decoder) unmarshalTime(pval cfDate, val reflect.Value) {
	val.Set(reflect.ValueOf(time.Time(pval)))
}

func (p *Decoder) unmarshalLaxString(s string, val reflect.Value) {
	switch val.Kind() {
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		i := mustParseInt(s, 10, 64)
		val.SetInt(i)
		return
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		i := mustParseUint(s, 10, 64)
		val.SetUint(i)
		return
	case reflect.Float32, reflect.Float64:
		f := mustParseFloat(s, 64)
		val.SetFloat(f)
		return
	case reflect.Bool:
		b := mustParseBool(s)
		val.SetBool(b)
		return
	case reflect.Struct:
		if val.Type() == timeType {
			t, err := time.Parse(textPlistTimeLayout, s)
			if err != nil {
				panic(err)
			}
			val.Set(reflect.ValueOf(t.In(time.UTC)))
			return
		}
		fallthrough
	default:
		panic(&incompatibleDecodeTypeError{val.Type(), "string"})
	}
}

func (p *Decoder) unmarshal(pval cfValue, val reflect.Value) {
	if pval == nil {
		return
	}

	if val.Kind() == reflect.Ptr {
		if val.IsNil() {
			val.Set(reflect.New(val.Type().Elem()))
		}
		val = val.Elem()
	}

	if isEmptyInterface(val) {
		v := p.valueInterface(pval)
		val.Set(reflect.ValueOf(v))
		return
	}

	incompatibleTypeError := &incompatibleDecodeTypeError{val.Type(), pval.typeName()}

	// time.Time implements TextMarshaler, but we need to parse it as RFC3339
	if date, ok := pval.(cfDate); ok {
		if val.Type() == timeType {
			p.unmarshalTime(date, val)
			return
		}
		panic(incompatibleTypeError)
	}

	if receiver, can := implementsInterface(val, plistUnmarshalerType); can {
		p.unmarshalPlistInterface(pval, receiver.(Unmarshaler))
		return
	}

	if val.Type() != timeType {
		if receiver, can := implementsInterface(val, textUnmarshalerType); can {
			if str, ok := pval.(cfString); ok {
				p.unmarshalTextInterface(str, receiver.(encoding.TextUnmarshaler))
			} else {
				panic(incompatibleTypeError)
			}
			return
		}
	}

	typ := val.Type()

	switch pval := pval.(type) {
	case cfString:
		if val.Kind() == reflect.String {
			val.SetString(string(pval))
			return
		}
		if p.lax {
			p.unmarshalLaxString(string(pval), val)
			return
		}

		panic(incompatibleTypeError)
	case *cfNumber:
		switch val.Kind() {
		case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
			val.SetInt(int64(pval.value))
		case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
			val.SetUint(pval.value)
		default:
			panic(incompatibleTypeError)
		}
	case *cfReal:
		if val.Kind() == reflect.Float32 || val.Kind() == reflect.Float64 {
			// TODO: Consider warning on a downcast (storing a 64-bit value in a 32-bit reflect)
			val.SetFloat(pval.value)
		} else {
			panic(incompatibleTypeError)
		}
	case cfBoolean:
		if val.Kind() == reflect.Bool {
			val.SetBool(bool(pval))
		} else {
			panic(incompatibleTypeError)
		}
	case cfData:
		if val.Kind() != reflect.Slice && val.Kind() != reflect.Array {
			panic(incompatibleTypeError)
		}

		if typ.Elem().Kind() != reflect.Uint8 {
			panic(incompatibleTypeError)
		}

		b := []byte(pval)
		switch val.Kind() {
		case reflect.Slice:
			val.SetBytes(b)
		case reflect.Array:
			if val.Len() < len(b) {
				panic(fmt.Errorf("plist: attempted to unmarshal %d bytes into a byte array of size %d", len(b), val.Len()))
			}
			sval := reflect.ValueOf(b)
			reflect.Copy(val, sval)
		}
	case cfUID:
		if val.Type() == uidType {
			val.SetUint(uint64(pval))
		} else {
			switch val.Kind() {
			case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
				val.SetInt(int64(pval))
			case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
				val.SetUint(uint64(pval))
			default:
				panic(incompatibleTypeError)
			}
		}
	case *cfArray:
		p.unmarshalArray(pval, val)
	case *cfDictionary:
		p.unmarshalDictionary(pval, val)
	}
}

func (p *Decoder) unmarshalArray(a *cfArray, val reflect.Value) {
	var n int
	if val.Kind() == reflect.Slice {
		// Slice of element values.
		// Grow slice.
		cnt := len(a.values) + val.Len()
		if cnt >= val.Cap() {
			ncap := 2 * cnt
			if ncap < 4 {
				ncap = 4
			}
			new := reflect.MakeSlice(val.Type(), val.Len(), ncap)
			reflect.Copy(new, val)
			val.Set(new)
		}
		n = val.Len()
		val.SetLen(cnt)
	} else if val.Kind() == reflect.Array {
		if len(a.values) > val.Cap() {
			panic(fmt.Errorf("plist: attempted to unmarshal %d values into an array of size %d", len(a.values), val.Cap()))
		}
	} else {
		panic(&incompatibleDecodeTypeError{val.Type(), a.typeName()})
	}

	// Recur to read element into slice.
	for _, sval := range a.values {
		p.unmarshal(sval, val.Index(n))
		n++
	}
	return
}

func (p *Decoder) unmarshalDictionary(dict *cfDictionary, val reflect.Value) {
	typ := val.Type()
	switch val.Kind() {
	case reflect.Struct:
		tinfo, err := getTypeInfo(typ)
		if err != nil {
			panic(err)
		}

		entries := make(map[string]cfValue, len(dict.keys))
		for i, k := range dict.keys {
			sval := dict.values[i]
			entries[k] = sval
		}

		for _, finfo := range tinfo.fields {
			p.unmarshal(entries[finfo.name], finfo.value(val))
		}
	case reflect.Map:
		if val.IsNil() {
			val.Set(reflect.MakeMap(typ))
		}

		for i, k := range dict.keys {
			sval := dict.values[i]

			keyv := reflect.ValueOf(k).Convert(typ.Key())
			mapElem := reflect.New(typ.Elem()).Elem()

			p.unmarshal(sval, mapElem)
			val.SetMapIndex(keyv, mapElem)
		}
	default:
		panic(&incompatibleDecodeTypeError{typ, dict.typeName()})
	}
}

/* *Interface is modelled after encoding/json */
func (p *Decoder) valueInterface(pval cfValue) interface{} {
	switch pval := pval.(type) {
	case cfString:
		return string(pval)
	case *cfNumber:
		if pval.signed {
			return int64(pval.value)
		}
		return pval.value
	case *cfReal:
		if pval.wide {
			return pval.value
		} else {
			return float32(pval.value)
		}
	case cfBoolean:
		return bool(pval)
	case *cfArray:
		return p.arrayInterface(pval)
	case *cfDictionary:
		return p.dictionaryInterface(pval)
	case cfData:
		return []byte(pval)
	case cfDate:
		return time.Time(pval)
	case cfUID:
		return UID(pval)
	}
	return nil
}

func (p *Decoder) arrayInterface(a *cfArray) []interface{} {
	out := make([]interface{}, len(a.values))
	for i, subv := range a.values {
		out[i] = p.valueInterface(subv)
	}
	return out
}

func (p *Decoder) dictionaryInterface(dict *cfDictionary) map[string]interface{} {
	out := make(map[string]interface{})
	for i, k := range dict.keys {
		subv := dict.values[i]
		out[k] = p.valueInterface(subv)
	}
	return out
}
  0707010000102A000081A4000000000000000000000001645E367C0000019D000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/howett.net/plist/util.go   package plist

import "io"

type countedWriter struct {
	io.Writer
	nbytes int
}

func (w *countedWriter) Write(p []byte) (int, error) {
	n, err := w.Writer.Write(p)
	w.nbytes += n
	return n, err
}

func (w *countedWriter) BytesWritten() int {
	return w.nbytes
}

func unsignedGetBase(s string) (string, int) {
	if len(s) > 1 && s[0] == '0' && (s[1] == 'x' || s[1] == 'X') {
		return s[2:], 16
	}
	return s, 10
}
   0707010000102B000081A4000000000000000000000001645E367C00000E2E000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/howett.net/plist/xml_generator.go  package plist

import (
	"bufio"
	"encoding/base64"
	"encoding/xml"
	"io"
	"math"
	"strconv"
	"time"
)

const (
	xmlHEADER     string = `<?xml version="1.0" encoding="UTF-8"?>` + "\n"
	xmlDOCTYPE           = `<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">` + "\n"
	xmlArrayTag          = "array"
	xmlDataTag           = "data"
	xmlDateTag           = "date"
	xmlDictTag           = "dict"
	xmlFalseTag          = "false"
	xmlIntegerTag        = "integer"
	xmlKeyTag            = "key"
	xmlPlistTag          = "plist"
	xmlRealTag           = "real"
	xmlStringTag         = "string"
	xmlTrueTag           = "true"
)

func formatXMLFloat(f float64) string {
	switch {
	case math.IsInf(f, 1):
		return "inf"
	case math.IsInf(f, -1):
		return "-inf"
	case math.IsNaN(f):
		return "nan"
	}
	return strconv.FormatFloat(f, 'g', -1, 64)
}

type xmlPlistGenerator struct {
	*bufio.Writer

	indent     string
	depth      int
	putNewline bool
}

func (p *xmlPlistGenerator) generateDocument(root cfValue) {
	p.WriteString(xmlHEADER)
	p.WriteString(xmlDOCTYPE)

	p.openTag(`plist version="1.0"`)
	p.writePlistValue(root)
	p.closeTag(xmlPlistTag)
	p.Flush()
}

func (p *xmlPlistGenerator) openTag(n string) {
	p.writeIndent(1)
	p.WriteByte('<')
	p.WriteString(n)
	p.WriteByte('>')
}

func (p *xmlPlistGenerator) closeTag(n string) {
	p.writeIndent(-1)
	p.WriteString("</")
	p.WriteString(n)
	p.WriteByte('>')
}

func (p *xmlPlistGenerator) element(n string, v string) {
	p.writeIndent(0)
	if len(v) == 0 {
		p.WriteByte('<')
		p.WriteString(n)
		p.WriteString("/>")
	} else {
		p.WriteByte('<')
		p.WriteString(n)
		p.WriteByte('>')

		err := xml.EscapeText(p.Writer, []byte(v))
		if err != nil {
			panic(err)
		}

		p.WriteString("</")
		p.WriteString(n)
		p.WriteByte('>')
	}
}

func (p *xmlPlistGenerator) writeDictionary(dict *cfDictionary) {
	dict.sort()
	p.openTag(xmlDictTag)
	for i, k := range dict.keys {
		p.element(xmlKeyTag, k)
		p.writePlistValue(dict.values[i])
	}
	p.closeTag(xmlDictTag)
}

func (p *xmlPlistGenerator) writeArray(a *cfArray) {
	p.openTag(xmlArrayTag)
	for _, v := range a.values {
		p.writePlistValue(v)
	}
	p.closeTag(xmlArrayTag)
}

func (p *xmlPlistGenerator) writePlistValue(pval cfValue) {
	if pval == nil {
		return
	}

	switch pval := pval.(type) {
	case cfString:
		p.element(xmlStringTag, string(pval))
	case *cfNumber:
		if pval.signed {
			p.element(xmlIntegerTag, strconv.FormatInt(int64(pval.value), 10))
		} else {
			p.element(xmlIntegerTag, strconv.FormatUint(pval.value, 10))
		}
	case *cfReal:
		p.element(xmlRealTag, formatXMLFloat(pval.value))
	case cfBoolean:
		if bool(pval) {
			p.element(xmlTrueTag, "")
		} else {
			p.element(xmlFalseTag, "")
		}
	case cfData:
		p.element(xmlDataTag, base64.StdEncoding.EncodeToString([]byte(pval)))
	case cfDate:
		p.element(xmlDateTag, time.Time(pval).In(time.UTC).Format(time.RFC3339))
	case *cfDictionary:
		p.writeDictionary(pval)
	case *cfArray:
		p.writeArray(pval)
	case cfUID:
		p.writePlistValue(pval.toDict())
	}
}

func (p *xmlPlistGenerator) writeIndent(delta int) {
	if len(p.indent) == 0 {
		return
	}

	if delta < 0 {
		p.depth--
	}

	if p.putNewline {
		// from encoding/xml/marshal.go; it seems to be intended
		// to suppress the first newline.
		p.WriteByte('\n')
	} else {
		p.putNewline = true
	}
	for i := 0; i < p.depth; i++ {
		p.WriteString(p.indent)
	}
	if delta > 0 {
		p.depth++
	}
}

func (p *xmlPlistGenerator) Indent(i string) {
	p.indent = i
}

func newXMLPlistGenerator(w io.Writer) *xmlPlistGenerator {
	return &xmlPlistGenerator{Writer: bufio.NewWriter(w)}
}
  0707010000102C000081A4000000000000000000000001645E367C0000124C000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/howett.net/plist/xml_parser.go package plist

import (
	"encoding/base64"
	"encoding/xml"
	"errors"
	"fmt"
	"io"
	"runtime"
	"strings"
	"time"
)

type xmlPlistParser struct {
	reader             io.Reader
	xmlDecoder         *xml.Decoder
	whitespaceReplacer *strings.Replacer
	ntags              int
}

func (p *xmlPlistParser) parseDocument() (pval cfValue, parseError error) {
	defer func() {
		if r := recover(); r != nil {
			if _, ok := r.(runtime.Error); ok {
				panic(r)
			}
			if _, ok := r.(invalidPlistError); ok {
				parseError = r.(error)
			} else {
				// Wrap all non-invalid-plist errors.
				parseError = plistParseError{"XML", r.(error)}
			}
		}
	}()
	for {
		if token, err := p.xmlDecoder.Token(); err == nil {
			if element, ok := token.(xml.StartElement); ok {
				pval = p.parseXMLElement(element)
				if p.ntags == 0 {
					panic(invalidPlistError{"XML", errors.New("no elements encountered")})
				}
				return
			}
		} else {
			// The first XML parse turned out to be invalid:
			// we do not have an XML property list.
			panic(invalidPlistError{"XML", err})
		}
	}
}

func (p *xmlPlistParser) parseXMLElement(element xml.StartElement) cfValue {
	var charData xml.CharData
	switch element.Name.Local {
	case "plist":
		p.ntags++
		for {
			token, err := p.xmlDecoder.Token()
			if err != nil {
				panic(err)
			}

			if el, ok := token.(xml.EndElement); ok && el.Name.Local == "plist" {
				break
			}

			if el, ok := token.(xml.StartElement); ok {
				return p.parseXMLElement(el)
			}
		}
		return nil
	case "string":
		p.ntags++
		err := p.xmlDecoder.DecodeElement(&charData, &element)
		if err != nil {
			panic(err)
		}

		return cfString(charData)
	case "integer":
		p.ntags++
		err := p.xmlDecoder.DecodeElement(&charData, &element)
		if err != nil {
			panic(err)
		}

		s := string(charData)
		if len(s) == 0 {
			panic(errors.New("invalid empty <integer/>"))
		}

		if s[0] == '-' {
			s, base := unsignedGetBase(s[1:])
			n := mustParseInt("-"+s, base, 64)
			return &cfNumber{signed: true, value: uint64(n)}
		} else {
			s, base := unsignedGetBase(s)
			n := mustParseUint(s, base, 64)
			return &cfNumber{signed: false, value: n}
		}
	case "real":
		p.ntags++
		err := p.xmlDecoder.DecodeElement(&charData, &element)
		if err != nil {
			panic(err)
		}

		n := mustParseFloat(string(charData), 64)
		return &cfReal{wide: true, value: n}
	case "true", "false":
		p.ntags++
		p.xmlDecoder.Skip()

		b := element.Name.Local == "true"
		return cfBoolean(b)
	case "date":
		p.ntags++
		err := p.xmlDecoder.DecodeElement(&charData, &element)
		if err != nil {
			panic(err)
		}

		t, err := time.ParseInLocation(time.RFC3339, string(charData), time.UTC)
		if err != nil {
			panic(err)
		}

		return cfDate(t)
	case "data":
		p.ntags++
		err := p.xmlDecoder.DecodeElement(&charData, &element)
		if err != nil {
			panic(err)
		}

		str := p.whitespaceReplacer.Replace(string(charData))

		l := base64.StdEncoding.DecodedLen(len(str))
		bytes := make([]uint8, l)
		l, err = base64.StdEncoding.Decode(bytes, []byte(str))
		if err != nil {
			panic(err)
		}

		return cfData(bytes[:l])
	case "dict":
		p.ntags++
		var key *string
		keys := make([]string, 0, 32)
		values := make([]cfValue, 0, 32)
		for {
			token, err := p.xmlDecoder.Token()
			if err != nil {
				panic(err)
			}

			if el, ok := token.(xml.EndElement); ok && el.Name.Local == "dict" {
				if key != nil {
					panic(errors.New("missing value in dictionary"))
				}
				break
			}

			if el, ok := token.(xml.StartElement); ok {
				if el.Name.Local == "key" {
					var k string
					p.xmlDecoder.DecodeElement(&k, &el)
					key = &k
				} else {
					if key == nil {
						panic(errors.New("missing key in dictionary"))
					}
					keys = append(keys, *key)
					values = append(values, p.parseXMLElement(el))
					key = nil
				}
			}
		}

		dict := &cfDictionary{keys: keys, values: values}
		return dict.maybeUID(false)
	case "array":
		p.ntags++
		values := make([]cfValue, 0, 10)
		for {
			token, err := p.xmlDecoder.Token()
			if err != nil {
				panic(err)
			}

			if el, ok := token.(xml.EndElement); ok && el.Name.Local == "array" {
				break
			}

			if el, ok := token.(xml.StartElement); ok {
				values = append(values, p.parseXMLElement(el))
			}
		}
		return &cfArray{values}
	}
	err := fmt.Errorf("encountered unknown element %s", element.Name.Local)
	if p.ntags == 0 {
		// If out first XML tag is invalid, it might be an openstep data element, ala <abab> or <0101>
		panic(invalidPlistError{"XML", err})
	}
	panic(err)
}

func newXMLPlistParser(r io.Reader) *xmlPlistParser {
	return &xmlPlistParser{r, xml.NewDecoder(r), strings.NewReplacer("\t", "", "\n", "", " ", "", "\r", ""), 0}
}
0707010000102D000081A4000000000000000000000001645E367C00000130000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/howett.net/plist/zerocopy.go   // +build !appengine

package plist

import (
	"reflect"
	"unsafe"
)

func zeroCopy8BitString(buf []byte, off int, len int) string {
	if len == 0 {
		return ""
	}

	var s string
	hdr := (*reflect.StringHeader)(unsafe.Pointer(&s))
	hdr.Data = uintptr(unsafe.Pointer(&buf[off]))
	hdr.Len = len
	return s
}
0707010000102E000081A4000000000000000000000001645E367C00000088000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/howett.net/plist/zerocopy_appengine.go // +build appengine

package plist

func zeroCopy8BitString(buf []byte, off int, len int) string {
	return string(buf[off : off+len])
}
0707010000102F000041ED000000000000000000000005645E367C00000000000000000000000000000000000000000000002200000000elemental-cli-0.3.1/vendor/k8s.io 07070100001030000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002700000000elemental-cli-0.3.1/vendor/k8s.io/klog    07070100001031000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002A00000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2 07070100001032000081A4000000000000000000000001645E367C000000D7000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/.gitignore  # OSX leaves these everywhere on SMB shares
._*

# OSX trash
.DS_Store

# Eclipse files
.classpath
.project
.settings/**

# Files generated by JetBrains IDEs, e.g. IntelliJ IDEA
.idea/
*.iml

# Vscode files
.vscode
 07070100001033000081A4000000000000000000000001645E367C00000628000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/CONTRIBUTING.md # Contributing Guidelines

Welcome to Kubernetes. We are excited about the prospect of you joining our [community](https://github.com/kubernetes/community)! The Kubernetes community abides by the CNCF [code of conduct](code-of-conduct.md). Here is an excerpt:

_As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities._

## Getting Started

We have full documentation on how to get started contributing here:

- [Contributor License Agreement](https://git.k8s.io/community/CLA.md) Kubernetes projects require that you sign a Contributor License Agreement (CLA) before we can accept your pull requests
- [Kubernetes Contributor Guide](http://git.k8s.io/community/contributors/guide) - Main contributor documentation, or you can just jump directly to the [contributing section](http://git.k8s.io/community/contributors/guide#contributing)
- [Contributor Cheat Sheet](https://git.k8s.io/community/contributors/guide/contributor-cheatsheet) - Common resources for existing developers

## Mentorship

- [Mentoring Initiatives](https://git.k8s.io/community/mentoring) - We have a diverse set of mentorship programs available that are always looking for volunteers!

## Contact Information

- [Slack](https://kubernetes.slack.com/messages/sig-architecture)
- [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-architecture)
07070100001034000081A4000000000000000000000001645E367C00002821000000000000000000000000000000000000003200000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/LICENSE Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

"License" shall mean the terms and conditions for use, reproduction, and
distribution as defined by Sections 1 through 9 of this document.

"Licensor" shall mean the copyright owner or entity authorized by the copyright
owner that is granting the License.

"Legal Entity" shall mean the union of the acting entity and all other entities
that control, are controlled by, or are under common control with that entity.
For the purposes of this definition, "control" means (i) the power, direct or
indirect, to cause the direction or management of such entity, whether by
contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.

"You" (or "Your") shall mean an individual or Legal Entity exercising
permissions granted by this License.

"Source" form shall mean the preferred form for making modifications, including
but not limited to software source code, documentation source, and configuration
files.

"Object" form shall mean any form resulting from mechanical transformation or
translation of a Source form, including but not limited to compiled object code,
generated documentation, and conversions to other media types.

"Work" shall mean the work of authorship, whether in Source or Object form, made
available under the License, as indicated by a copyright notice that is included
in or attached to the work (an example is provided in the Appendix below).

"Derivative Works" shall mean any work, whether in Source or Object form, that
is based on (or derived from) the Work and for which the editorial revisions,
annotations, elaborations, or other modifications represent, as a whole, an
original work of authorship. For the purposes of this License, Derivative Works
shall not include works that remain separable from, or merely link (or bind by
name) to the interfaces of, the Work and Derivative Works thereof.

"Contribution" shall mean any work of authorship, including the original version
of the Work and any modifications or additions to that Work or Derivative Works
thereof, that is intentionally submitted to Licensor for inclusion in the Work
by the copyright owner or by an individual or Legal Entity authorized to submit
on behalf of the copyright owner. For the purposes of this definition,
"submitted" means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems, and
issue tracking systems that are managed by, or on behalf of, the Licensor for
the purpose of discussing and improving the Work, but excluding communication
that is conspicuously marked or otherwise designated in writing by the copyright
owner as "Not a Contribution."

"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
of whom a Contribution has been received by Licensor and subsequently
incorporated within the Work.

2. Grant of Copyright License.

Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the Work and such
Derivative Works in Source or Object form.

3. Grant of Patent License.

Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable (except as stated in this section) patent license to make, have
made, use, offer to sell, sell, import, and otherwise transfer the Work, where
such license applies only to those patent claims licensable by such Contributor
that are necessarily infringed by their Contribution(s) alone or by combination
of their Contribution(s) with the Work to which such Contribution(s) was
submitted. If You institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work or a
Contribution incorporated within the Work constitutes direct or contributory
patent infringement, then any patent licenses granted to You under this License
for that Work shall terminate as of the date such litigation is filed.

4. Redistribution.

You may reproduce and distribute copies of the Work or Derivative Works thereof
in any medium, with or without modifications, and in Source or Object form,
provided that You meet the following conditions:

You must give any other recipients of the Work or Derivative Works a copy of
this License; and
You must cause any modified files to carry prominent notices stating that You
changed the files; and
You must retain, in the Source form of any Derivative Works that You distribute,
all copyright, patent, trademark, and attribution notices from the Source form
of the Work, excluding those notices that do not pertain to any part of the
Derivative Works; and
If the Work includes a "NOTICE" text file as part of its distribution, then any
Derivative Works that You distribute must include a readable copy of the
attribution notices contained within such NOTICE file, excluding those notices
that do not pertain to any part of the Derivative Works, in at least one of the
following places: within a NOTICE text file distributed as part of the
Derivative Works; within the Source form or documentation, if provided along
with the Derivative Works; or, within a display generated by the Derivative
Works, if and wherever such third-party notices normally appear. The contents of
the NOTICE file are for informational purposes only and do not modify the
License. You may add Your own attribution notices within Derivative Works that
You distribute, alongside or as an addendum to the NOTICE text from the Work,
provided that such additional attribution notices cannot be construed as
modifying the License.
You may add Your own copyright statement to Your modifications and may provide
additional or different license terms and conditions for use, reproduction, or
distribution of Your modifications, or for any such Derivative Works as a whole,
provided Your use, reproduction, and distribution of the Work otherwise complies
with the conditions stated in this License.

5. Submission of Contributions.

Unless You explicitly state otherwise, any Contribution intentionally submitted
for inclusion in the Work by You to the Licensor shall be under the terms and
conditions of this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify the terms of
any separate license agreement you may have executed with Licensor regarding
such Contributions.

6. Trademarks.

This License does not grant permission to use the trade names, trademarks,
service marks, or product names of the Licensor, except as required for
reasonable and customary use in describing the origin of the Work and
reproducing the content of the NOTICE file.

7. Disclaimer of Warranty.

Unless required by applicable law or agreed to in writing, Licensor provides the
Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
including, without limitation, any warranties or conditions of TITLE,
NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
solely responsible for determining the appropriateness of using or
redistributing the Work and assume any risks associated with Your exercise of
permissions under this License.

8. Limitation of Liability.

In no event and under no legal theory, whether in tort (including negligence),
contract, or otherwise, unless required by applicable law (such as deliberate
and grossly negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special, incidental,
or consequential damages of any character arising as a result of this License or
out of the use or inability to use the Work (including but not limited to
damages for loss of goodwill, work stoppage, computer failure or malfunction, or
any and all other commercial damages or losses), even if such Contributor has
been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability.

While redistributing the Work or Derivative Works thereof, You may choose to
offer, and charge a fee for, acceptance of support, warranty, indemnity, or
other liability obligations and/or rights consistent with this License. However,
in accepting such obligations, You may act only on Your own behalf and on Your
sole responsibility, not on behalf of any other Contributor, and only if You
agree to indemnify, defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason of your
accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work

To apply the Apache License to your work, attach the following boilerplate
notice, with the fields enclosed by brackets "[]" replaced with your own
identifying information. (Don't include the brackets!) The text should be
enclosed in the appropriate comment syntax for the file format. We also
recommend that a file or class name and description of purpose be included on
the same "printed page" as the copyright notice for easier identification within
third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
   07070100001035000081A4000000000000000000000001645E367C000000D9000000000000000000000000000000000000003100000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/OWNERS  # See the OWNERS docs at https://go.k8s.io/owners
reviewers:
  - harshanarayana
  - pohly
approvers:
  - dims
  - thockin
  - serathius
emeritus_approvers:
  - brancz
  - justinsb
  - lavalamp
  - piosz
  - tallclair
   07070100001036000081A4000000000000000000000001645E367C00001494000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/README.md   klog
====

klog is a permanent fork of https://github.com/golang/glog.

## Why was klog created?

The decision to create klog was one that wasn't made lightly, but it was necessary due to some
drawbacks that are present in [glog](https://github.com/golang/glog). Ultimately, the fork was created due to glog not being under active development; this can be seen in the glog README:

> The code in this repo [...] is not itself under development

This makes us unable to solve many use cases without a fork. The factors that contributed to needing feature development are listed below:

 * `glog` [presents a lot "gotchas"](https://github.com/kubernetes/kubernetes/issues/61006) and introduces challenges in containerized environments, all of which aren't well documented.
 * `glog` doesn't provide an easy way to test logs, which detracts from the stability of software using it
 * A long term goal is to implement a logging interface that allows us to add context, change output format, etc.
 
Historical context is available here:

 * https://github.com/kubernetes/kubernetes/issues/61006
 * https://github.com/kubernetes/kubernetes/issues/70264
 * https://groups.google.com/forum/#!msg/kubernetes-sig-architecture/wCWiWf3Juzs/hXRVBH90CgAJ
 * https://groups.google.com/forum/#!msg/kubernetes-dev/7vnijOMhLS0/1oRiNtigBgAJ

## Release versioning

Semantic versioning is used in this repository. It contains several Go modules
with different levels of stability:
- `k8s.io/klog/v2` - stable API, `vX.Y.Z` tags
- `examples` - no stable API, no tags, no intention to ever stabilize

Exempt from the API stability guarantee are items (packages, functions, etc.)
which are marked explicitly as `EXPERIMENTAL` in their docs comment. Those
may still change in incompatible ways or get removed entirely. This can only
be used for code that is used in tests to avoid situations where non-test
code from two different Kubernetes dependencies depends on incompatible
releases of klog because an experimental API was changed.

----

How to use klog
===============
- Replace imports for `"github.com/golang/glog"` with `"k8s.io/klog/v2"`
- Use `klog.InitFlags(nil)` explicitly for initializing global flags as we no longer use `init()` method to register the flags
- You can now use `log_file` instead of `log_dir` for logging to a single file (See `examples/log_file/usage_log_file.go`)
- If you want to redirect everything logged using klog somewhere else (say syslog!), you can use `klog.SetOutput()` method and supply a `io.Writer`. (See `examples/set_output/usage_set_output.go`)
- For more logging conventions (See [Logging Conventions](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/logging.md))
- See our documentation on [pkg.go.dev/k8s.io](https://pkg.go.dev/k8s.io/klog).

**NOTE**: please use the newer go versions that support semantic import versioning in modules, ideally go 1.11.4 or greater.

### Coexisting with klog/v2

See [this example](examples/coexist_klog_v1_and_v2/) to see how to coexist with both klog/v1 and klog/v2.

### Coexisting with glog
This package can be used side by side with glog. [This example](examples/coexist_glog/coexist_glog.go) shows how to initialize and synchronize flags from the global `flag.CommandLine` FlagSet. In addition, the example makes use of stderr as combined output by setting `alsologtostderr` (or `logtostderr`) to `true`.

## Community, discussion, contribution, and support

Learn how to engage with the Kubernetes community on the [community page](http://kubernetes.io/community/).

You can reach the maintainers of this project at:

- [Slack](https://kubernetes.slack.com/messages/klog)
- [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-architecture)

### Code of conduct

Participation in the Kubernetes community is governed by the [Kubernetes Code of Conduct](code-of-conduct.md).

----

glog
====

Leveled execution logs for Go.

This is an efficient pure Go implementation of leveled logs in the
manner of the open source C++ package
	https://github.com/google/glog

By binding methods to booleans it is possible to use the log package
without paying the expense of evaluating the arguments to the log.
Through the -vmodule flag, the package also provides fine-grained
control over logging at the file level.

The comment from glog.go introduces the ideas:

	Package glog implements logging analogous to the Google-internal
	C++ INFO/ERROR/V setup.  It provides functions Info, Warning,
	Error, Fatal, plus formatting variants such as Infof. It
	also provides V-style logging controlled by the -v and
	-vmodule=file=2 flags.

	Basic examples:

		glog.Info("Prepare to repel boarders")

		glog.Fatalf("Initialization failed: %s", err)

	See the documentation of the V function for an explanation
	of these examples:

		if glog.V(2) {
			glog.Info("Starting transaction...")
		}

		glog.V(2).Infoln("Processed", nItems, "elements")


The repository contains an open source version of the log package
used inside Google. The master copy of the source lives inside
Google, not here. The code in this repo is for export only and is not itself
under development. Feature requests will be ignored.

Send bug reports to golang-nuts@googlegroups.com.
07070100001037000081A4000000000000000000000001645E367C000001FC000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/RELEASE.md  # Release Process

The `klog` is released on an as-needed basis. The process is as follows:

1. An issue is proposing a new release with a changelog since the last release
1. All [OWNERS](OWNERS) must LGTM this release
1. An OWNER runs `git tag -s $VERSION` and inserts the changelog and pushes the tag with `git push $VERSION`
1. The release issue is closed
1. An announcement email is sent to `kubernetes-dev@googlegroups.com` with the subject `[ANNOUNCE] kubernetes-template-project $VERSION is released`
07070100001038000081A4000000000000000000000001645E367C0000042D000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/SECURITY.md # Security Policy

## Security Announcements

Join the [kubernetes-security-announce] group for security and vulnerability announcements.

You can also subscribe to an RSS feed of the above using [this link][kubernetes-security-announce-rss].

## Reporting a Vulnerability

Instructions for reporting a vulnerability can be found on the
[Kubernetes Security and Disclosure Information] page.

## Supported Versions

Information about supported Kubernetes versions can be found on the
[Kubernetes version and version skew support policy] page on the Kubernetes website.

[kubernetes-security-announce]: https://groups.google.com/forum/#!forum/kubernetes-security-announce
[kubernetes-security-announce-rss]: https://groups.google.com/forum/feed/kubernetes-security-announce/msgs/rss_v2_0.xml?num=50
[Kubernetes version and version skew support policy]: https://kubernetes.io/docs/setup/release/version-skew-policy/#supported-versions
[Kubernetes Security and Disclosure Information]: https://kubernetes.io/docs/reference/issues-security/security/#report-a-vulnerability
   07070100001039000081A4000000000000000000000001645E367C00000249000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/SECURITY_CONTACTS   # Defined below are the security contacts for this repo.
#
# They are the contact point for the Product Security Committee to reach out
# to for triaging and handling of incoming issues.
#
# The below names agree to abide by the
# [Embargo Policy](https://git.k8s.io/security/private-distributors-list.md#embargo-policy)
# and will be removed and replaced if they violate that agreement.
#
# DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE
# INSTRUCTIONS AT https://kubernetes.io/security/

dims
thockin
justinsb
tallclair
piosz
brancz
DirectXMan12
lavalamp
   0707010000103A000081A4000000000000000000000001645E367C00000094000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/code-of-conduct.md  # Kubernetes Community Code of Conduct

Please refer to our [Kubernetes Community Code of Conduct](https://git.k8s.io/community/code-of-conduct.md)
0707010000103B000081A4000000000000000000000001645E367C00001C54000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/contextual.go   /*
Copyright 2021 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package klog

import (
	"context"

	"github.com/go-logr/logr"
)

// This file provides the implementation of
// https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/1602-structured-logging
//
// SetLogger and ClearLogger were originally added to klog.go and got moved
// here. Contextual logging adds a way to retrieve a Logger for direct logging
// without the logging calls in klog.go.
//
// The global variables are expected to be modified only during sequential
// parts of a program (init, serial tests) and therefore are not protected by
// mutex locking.

var (
	// klogLogger is used as fallback for logging through the normal klog code
	// when no Logger is set.
	klogLogger logr.Logger = logr.New(&klogger{})
)

// SetLogger sets a Logger implementation that will be used as backing
// implementation of the traditional klog log calls. klog will do its own
// verbosity checks before calling logger.V().Info. logger.Error is always
// called, regardless of the klog verbosity settings.
//
// If set, all log lines will be suppressed from the regular output, and
// redirected to the logr implementation.
// Use as:
//
//	...
//	klog.SetLogger(zapr.NewLogger(zapLog))
//
// To remove a backing logr implemention, use ClearLogger. Setting an
// empty logger with SetLogger(logr.Logger{}) does not work.
//
// Modifying the logger is not thread-safe and should be done while no other
// goroutines invoke log calls, usually during program initialization.
func SetLogger(logger logr.Logger) {
	SetLoggerWithOptions(logger)
}

// SetLoggerWithOptions is a more flexible version of SetLogger. Without
// additional options, it behaves exactly like SetLogger. By passing
// ContextualLogger(true) as option, it can be used to set a logger that then
// will also get called directly by applications which retrieve it via
// FromContext, Background, or TODO.
//
// Supporting direct calls is recommended because it avoids the overhead of
// routing log entries through klogr into klog and then into the actual Logger
// backend.
func SetLoggerWithOptions(logger logr.Logger, opts ...LoggerOption) {
	logging.loggerOptions = loggerOptions{}
	for _, opt := range opts {
		opt(&logging.loggerOptions)
	}
	logging.logger = &logWriter{
		Logger:          logger,
		writeKlogBuffer: logging.loggerOptions.writeKlogBuffer,
	}
}

// ContextualLogger determines whether the logger passed to
// SetLoggerWithOptions may also get called directly. Such a logger cannot rely
// on verbosity checking in klog.
func ContextualLogger(enabled bool) LoggerOption {
	return func(o *loggerOptions) {
		o.contextualLogger = enabled
	}
}

// FlushLogger provides a callback for flushing data buffered by the logger.
func FlushLogger(flush func()) LoggerOption {
	return func(o *loggerOptions) {
		o.flush = flush
	}
}

// WriteKlogBuffer sets a callback that will be invoked by klog to write output
// produced by non-structured log calls like Infof.
//
// The buffer will contain exactly the same data that klog normally would write
// into its own output stream(s). In particular this includes the header, if
// klog is configured to write one. The callback then can divert that data into
// its own output streams. The buffer may or may not end in a line break.
//
// Without such a callback, klog will call the logger's Info or Error method
// with just the message string (i.e. no header).
func WriteKlogBuffer(write func([]byte)) LoggerOption {
	return func(o *loggerOptions) {
		o.writeKlogBuffer = write
	}
}

// LoggerOption implements the functional parameter paradigm for
// SetLoggerWithOptions.
type LoggerOption func(o *loggerOptions)

type loggerOptions struct {
	contextualLogger bool
	flush            func()
	writeKlogBuffer  func([]byte)
}

// logWriter combines a logger (always set) with a write callback (optional).
type logWriter struct {
	Logger
	writeKlogBuffer func([]byte)
}

// ClearLogger removes a backing Logger implementation if one was set earlier
// with SetLogger.
//
// Modifying the logger is not thread-safe and should be done while no other
// goroutines invoke log calls, usually during program initialization.
func ClearLogger() {
	logging.logger = nil
	logging.loggerOptions = loggerOptions{}
}

// EnableContextualLogging controls whether contextual logging is enabled.
// By default it is enabled. When disabled, FromContext avoids looking up
// the logger in the context and always returns the global logger.
// LoggerWithValues, LoggerWithName, and NewContext become no-ops
// and return their input logger respectively context. This may be useful
// to avoid the additional overhead for contextual logging.
//
// This must be called during initialization before goroutines are started.
func EnableContextualLogging(enabled bool) {
	logging.contextualLoggingEnabled = enabled
}

// FromContext retrieves a logger set by the caller or, if not set,
// falls back to the program's global logger (a Logger instance or klog
// itself).
func FromContext(ctx context.Context) Logger {
	if logging.contextualLoggingEnabled {
		if logger, err := logr.FromContext(ctx); err == nil {
			return logger
		}
	}

	return Background()
}

// TODO can be used as a last resort by code that has no means of
// receiving a logger from its caller. FromContext or an explicit logger
// parameter should be used instead.
func TODO() Logger {
	return Background()
}

// Background retrieves the fallback logger. It should not be called before
// that logger was initialized by the program and not by code that should
// better receive a logger via its parameters. TODO can be used as a temporary
// solution for such code.
func Background() Logger {
	if logging.loggerOptions.contextualLogger {
		// Is non-nil because logging.loggerOptions.contextualLogger is
		// only true if a logger was set.
		return logging.logger.Logger
	}

	return klogLogger
}

// LoggerWithValues returns logger.WithValues(...kv) when
// contextual logging is enabled, otherwise the logger.
func LoggerWithValues(logger Logger, kv ...interface{}) Logger {
	if logging.contextualLoggingEnabled {
		return logger.WithValues(kv...)
	}
	return logger
}

// LoggerWithName returns logger.WithName(name) when contextual logging is
// enabled, otherwise the logger.
func LoggerWithName(logger Logger, name string) Logger {
	if logging.contextualLoggingEnabled {
		return logger.WithName(name)
	}
	return logger
}

// NewContext returns logr.NewContext(ctx, logger) when
// contextual logging is enabled, otherwise ctx.
func NewContext(ctx context.Context, logger Logger) context.Context {
	if logging.contextualLoggingEnabled {
		return logr.NewContext(ctx, logger)
	}
	return ctx
}
0707010000103C000081A4000000000000000000000001645E367C00000951000000000000000000000000000000000000003200000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/exit.go // Go support for leveled logs, analogous to https://code.google.com/p/google-glog/
//
// Copyright 2013 Google Inc. All Rights Reserved.
// Copyright 2022 The Kubernetes Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package klog

import (
	"fmt"
	"os"
	"time"
)

var (

	// ExitFlushTimeout is the timeout that klog has traditionally used during
	// calls like Fatal or Exit when flushing log data right before exiting.
	// Applications that replace those calls and do not have some specific
	// requirements like "exit immediately" can use this value as parameter
	// for FlushAndExit.
	//
	// Can be set for testing purpose or to change the application's
	// default.
	ExitFlushTimeout = 10 * time.Second

	// OsExit is the function called by FlushAndExit to terminate the program.
	//
	// Can be set for testing purpose or to change the application's
	// default behavior. Note that the function should not simply return
	// because callers of functions like Fatal will not expect that.
	OsExit = os.Exit
)

// FlushAndExit flushes log data for a certain amount of time and then calls
// os.Exit. Combined with some logging call it provides a replacement for
// traditional calls like Fatal or Exit.
func FlushAndExit(flushTimeout time.Duration, exitCode int) {
	timeoutFlush(flushTimeout)
	OsExit(exitCode)
}

// timeoutFlush calls Flush and returns when it completes or after timeout
// elapses, whichever happens first.  This is needed because the hooks invoked
// by Flush may deadlock when klog.Fatal is called from a hook that holds
// a lock. Flushing also might take too long.
func timeoutFlush(timeout time.Duration) {
	done := make(chan bool, 1)
	go func() {
		Flush() // calls logging.lockAndFlushAll()
		done <- true
	}()
	select {
	case <-done:
	case <-time.After(timeout):
		fmt.Fprintln(os.Stderr, "klog: Flush took longer than", timeout)
	}
}
   0707010000103D000081A4000000000000000000000001645E367C0000043D000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/imports.go  /*
Copyright 2021 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package klog

import (
	"github.com/go-logr/logr"
)

// The reason for providing these aliases is to allow code to work with logr
// without directly importing it.

// Logger in this package is exactly the same as logr.Logger.
type Logger = logr.Logger

// LogSink in this package is exactly the same as logr.LogSink.
type LogSink = logr.LogSink

// Runtimeinfo in this package is exactly the same as logr.RuntimeInfo.
type RuntimeInfo = logr.RuntimeInfo

var (
	// New is an alias for logr.New.
	New = logr.New
)
   0707010000103E000041ED000000000000000000000007645E367C00000000000000000000000000000000000000000000003300000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/internal    0707010000103F000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/internal/buffer 07070100001040000081A4000000000000000000000001645E367C00001372000000000000000000000000000000000000004400000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/internal/buffer/buffer.go   // Copyright 2013 Google Inc. All Rights Reserved.
// Copyright 2022 The Kubernetes Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package buffer provides a cache for byte.Buffer instances that can be reused
// to avoid frequent allocation and deallocation. It also has utility code
// for log header formatting that use these buffers.
package buffer

import (
	"bytes"
	"os"
	"sync"
	"time"

	"k8s.io/klog/v2/internal/severity"
)

var (
	// Pid is inserted into log headers. Can be overridden for tests.
	Pid = os.Getpid()
)

// Buffer holds a single byte.Buffer for reuse. The zero value is ready for
// use. It also provides some helper methods for output formatting.
type Buffer struct {
	bytes.Buffer
	Tmp  [64]byte // temporary byte array for creating headers.
	next *Buffer
}

var buffers = sync.Pool{
	New: func() interface{} {
		return new(Buffer)
	},
}

// GetBuffer returns a new, ready-to-use buffer.
func GetBuffer() *Buffer {
	b := buffers.Get().(*Buffer)
	b.Reset()
	return b
}

// PutBuffer returns a buffer to the free list.
func PutBuffer(b *Buffer) {
	if b.Len() >= 256 {
		// Let big buffers die a natural death, without relying on
		// sync.Pool behavior. The documentation implies that items may
		// get deallocated while stored there ("If the Pool holds the
		// only reference when this [= be removed automatically]
		// happens, the item might be deallocated."), but
		// https://github.com/golang/go/issues/23199 leans more towards
		// having such a size limit.
		return
	}

	buffers.Put(b)
}

// Some custom tiny helper functions to print the log header efficiently.

const digits = "0123456789"

// twoDigits formats a zero-prefixed two-digit integer at buf.Tmp[i].
func (buf *Buffer) twoDigits(i, d int) {
	buf.Tmp[i+1] = digits[d%10]
	d /= 10
	buf.Tmp[i] = digits[d%10]
}

// nDigits formats an n-digit integer at buf.Tmp[i],
// padding with pad on the left.
// It assumes d >= 0.
func (buf *Buffer) nDigits(n, i, d int, pad byte) {
	j := n - 1
	for ; j >= 0 && d > 0; j-- {
		buf.Tmp[i+j] = digits[d%10]
		d /= 10
	}
	for ; j >= 0; j-- {
		buf.Tmp[i+j] = pad
	}
}

// someDigits formats a zero-prefixed variable-width integer at buf.Tmp[i].
func (buf *Buffer) someDigits(i, d int) int {
	// Print into the top, then copy down. We know there's space for at least
	// a 10-digit number.
	j := len(buf.Tmp)
	for {
		j--
		buf.Tmp[j] = digits[d%10]
		d /= 10
		if d == 0 {
			break
		}
	}
	return copy(buf.Tmp[i:], buf.Tmp[j:])
}

// FormatHeader formats a log header using the provided file name and line number
// and writes it into the buffer.
func (buf *Buffer) FormatHeader(s severity.Severity, file string, line int, now time.Time) {
	if line < 0 {
		line = 0 // not a real line number, but acceptable to someDigits
	}
	if s > severity.FatalLog {
		s = severity.InfoLog // for safety.
	}

	// Avoid Fprintf, for speed. The format is so simple that we can do it quickly by hand.
	// It's worth about 3X. Fprintf is hard.
	_, month, day := now.Date()
	hour, minute, second := now.Clock()
	// Lmmdd hh:mm:ss.uuuuuu threadid file:line]
	buf.Tmp[0] = severity.Char[s]
	buf.twoDigits(1, int(month))
	buf.twoDigits(3, day)
	buf.Tmp[5] = ' '
	buf.twoDigits(6, hour)
	buf.Tmp[8] = ':'
	buf.twoDigits(9, minute)
	buf.Tmp[11] = ':'
	buf.twoDigits(12, second)
	buf.Tmp[14] = '.'
	buf.nDigits(6, 15, now.Nanosecond()/1000, '0')
	buf.Tmp[21] = ' '
	buf.nDigits(7, 22, Pid, ' ') // TODO: should be TID
	buf.Tmp[29] = ' '
	buf.Write(buf.Tmp[:30])
	buf.WriteString(file)
	buf.Tmp[0] = ':'
	n := buf.someDigits(1, line)
	buf.Tmp[n+1] = ']'
	buf.Tmp[n+2] = ' '
	buf.Write(buf.Tmp[:n+3])
}

// SprintHeader formats a log header and returns a string. This is a simpler
// version of FormatHeader for use in ktesting.
func (buf *Buffer) SprintHeader(s severity.Severity, now time.Time) string {
	if s > severity.FatalLog {
		s = severity.InfoLog // for safety.
	}

	// Avoid Fprintf, for speed. The format is so simple that we can do it quickly by hand.
	// It's worth about 3X. Fprintf is hard.
	_, month, day := now.Date()
	hour, minute, second := now.Clock()
	// Lmmdd hh:mm:ss.uuuuuu threadid file:line]
	buf.Tmp[0] = severity.Char[s]
	buf.twoDigits(1, int(month))
	buf.twoDigits(3, day)
	buf.Tmp[5] = ' '
	buf.twoDigits(6, hour)
	buf.Tmp[8] = ':'
	buf.twoDigits(9, minute)
	buf.Tmp[11] = ':'
	buf.twoDigits(12, second)
	buf.Tmp[14] = '.'
	buf.nDigits(6, 15, now.Nanosecond()/1000, '0')
	buf.Tmp[21] = ']'
	return string(buf.Tmp[:22])
}
  07070100001041000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/internal/clock  07070100001042000081A4000000000000000000000001645E367C000000F3000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/internal/clock/README.md    # Clock

This package provides an interface for time-based operations.  It allows
mocking time for testing.

This is a copy of k8s.io/utils/clock. We have to copy it to avoid a circular
dependency (k8s.io/klog -> k8s.io/utils -> k8s.io/klog).
 07070100001043000081A4000000000000000000000001645E367C00001367000000000000000000000000000000000000004200000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/internal/clock/clock.go /*
Copyright 2014 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package clock

import "time"

// PassiveClock allows for injecting fake or real clocks into code
// that needs to read the current time but does not support scheduling
// activity in the future.
type PassiveClock interface {
	Now() time.Time
	Since(time.Time) time.Duration
}

// Clock allows for injecting fake or real clocks into code that
// needs to do arbitrary things based on time.
type Clock interface {
	PassiveClock
	// After returns the channel of a new Timer.
	// This method does not allow to free/GC the backing timer before it fires. Use
	// NewTimer instead.
	After(d time.Duration) <-chan time.Time
	// NewTimer returns a new Timer.
	NewTimer(d time.Duration) Timer
	// Sleep sleeps for the provided duration d.
	// Consider making the sleep interruptible by using 'select' on a context channel and a timer channel.
	Sleep(d time.Duration)
	// Tick returns the channel of a new Ticker.
	// This method does not allow to free/GC the backing ticker. Use
	// NewTicker from WithTicker instead.
	Tick(d time.Duration) <-chan time.Time
}

// WithTicker allows for injecting fake or real clocks into code that
// needs to do arbitrary things based on time.
type WithTicker interface {
	Clock
	// NewTicker returns a new Ticker.
	NewTicker(time.Duration) Ticker
}

// WithDelayedExecution allows for injecting fake or real clocks into
// code that needs to make use of AfterFunc functionality.
type WithDelayedExecution interface {
	Clock
	// AfterFunc executes f in its own goroutine after waiting
	// for d duration and returns a Timer whose channel can be
	// closed by calling Stop() on the Timer.
	AfterFunc(d time.Duration, f func()) Timer
}

// WithTickerAndDelayedExecution allows for injecting fake or real clocks
// into code that needs Ticker and AfterFunc functionality
type WithTickerAndDelayedExecution interface {
	WithTicker
	// AfterFunc executes f in its own goroutine after waiting
	// for d duration and returns a Timer whose channel can be
	// closed by calling Stop() on the Timer.
	AfterFunc(d time.Duration, f func()) Timer
}

// Ticker defines the Ticker interface.
type Ticker interface {
	C() <-chan time.Time
	Stop()
}

var _ = WithTicker(RealClock{})

// RealClock really calls time.Now()
type RealClock struct{}

// Now returns the current time.
func (RealClock) Now() time.Time {
	return time.Now()
}

// Since returns time since the specified timestamp.
func (RealClock) Since(ts time.Time) time.Duration {
	return time.Since(ts)
}

// After is the same as time.After(d).
// This method does not allow to free/GC the backing timer before it fires. Use
// NewTimer instead.
func (RealClock) After(d time.Duration) <-chan time.Time {
	return time.After(d)
}

// NewTimer is the same as time.NewTimer(d)
func (RealClock) NewTimer(d time.Duration) Timer {
	return &realTimer{
		timer: time.NewTimer(d),
	}
}

// AfterFunc is the same as time.AfterFunc(d, f).
func (RealClock) AfterFunc(d time.Duration, f func()) Timer {
	return &realTimer{
		timer: time.AfterFunc(d, f),
	}
}

// Tick is the same as time.Tick(d)
// This method does not allow to free/GC the backing ticker. Use
// NewTicker instead.
func (RealClock) Tick(d time.Duration) <-chan time.Time {
	return time.Tick(d)
}

// NewTicker returns a new Ticker.
func (RealClock) NewTicker(d time.Duration) Ticker {
	return &realTicker{
		ticker: time.NewTicker(d),
	}
}

// Sleep is the same as time.Sleep(d)
// Consider making the sleep interruptible by using 'select' on a context channel and a timer channel.
func (RealClock) Sleep(d time.Duration) {
	time.Sleep(d)
}

// Timer allows for injecting fake or real timers into code that
// needs to do arbitrary things based on time.
type Timer interface {
	C() <-chan time.Time
	Stop() bool
	Reset(d time.Duration) bool
}

var _ = Timer(&realTimer{})

// realTimer is backed by an actual time.Timer.
type realTimer struct {
	timer *time.Timer
}

// C returns the underlying timer's channel.
func (r *realTimer) C() <-chan time.Time {
	return r.timer.C
}

// Stop calls Stop() on the underlying timer.
func (r *realTimer) Stop() bool {
	return r.timer.Stop()
}

// Reset calls Reset() on the underlying timer.
func (r *realTimer) Reset(d time.Duration) bool {
	return r.timer.Reset(d)
}

type realTicker struct {
	ticker *time.Ticker
}

func (r *realTicker) C() <-chan time.Time {
	return r.ticker.C
}

func (r *realTicker) Stop() {
	r.ticker.Stop()
}
 07070100001044000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/internal/dbg    07070100001045000081A4000000000000000000000001645E367C000004F7000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/internal/dbg/dbg.go // Go support for leveled logs, analogous to https://code.google.com/p/google-glog/
//
// Copyright 2013 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package dbg provides some helper code for call traces.
package dbg

import (
	"runtime"
)

// Stacks is a wrapper for runtime.Stack that attempts to recover the data for
// all goroutines or the calling one.
func Stacks(all bool) []byte {
	// We don't know how big the traces are, so grow a few times if they don't fit. Start large, though.
	n := 10000
	if all {
		n = 100000
	}
	var trace []byte
	for i := 0; i < 5; i++ {
		trace = make([]byte, n)
		nbytes := runtime.Stack(trace, all)
		if nbytes < len(trace) {
			return trace[:nbytes]
		}
		n *= 2
	}
	return trace
}
 07070100001046000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/internal/serialize  07070100001047000081A4000000000000000000000001645E367C000027F0000000000000000000000000000000000000004A00000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/internal/serialize/keyvalues.go /*
Copyright 2021 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package serialize

import (
	"bytes"
	"fmt"
	"strconv"

	"github.com/go-logr/logr"
)

type textWriter interface {
	WriteText(*bytes.Buffer)
}

// WithValues implements LogSink.WithValues. The old key/value pairs are
// assumed to be well-formed, the new ones are checked and padded if
// necessary. It returns a new slice.
func WithValues(oldKV, newKV []interface{}) []interface{} {
	if len(newKV) == 0 {
		return oldKV
	}
	newLen := len(oldKV) + len(newKV)
	hasMissingValue := newLen%2 != 0
	if hasMissingValue {
		newLen++
	}
	// The new LogSink must have its own slice.
	kv := make([]interface{}, 0, newLen)
	kv = append(kv, oldKV...)
	kv = append(kv, newKV...)
	if hasMissingValue {
		kv = append(kv, missingValue)
	}
	return kv
}

// MergeKVs deduplicates elements provided in two key/value slices.
//
// Keys in each slice are expected to be unique, so duplicates can only occur
// when the first and second slice contain the same key. When that happens, the
// key/value pair from the second slice is used. The first slice must be well-formed
// (= even key/value pairs). The second one may have a missing value, in which
// case the special "missing value" is added to the result.
func MergeKVs(first, second []interface{}) []interface{} {
	maxLength := len(first) + (len(second)+1)/2*2
	if maxLength == 0 {
		// Nothing to do at all.
		return nil
	}

	if len(first) == 0 && len(second)%2 == 0 {
		// Nothing to be overridden, second slice is well-formed
		// and can be used directly.
		return second
	}

	// Determine which keys are in the second slice so that we can skip
	// them when iterating over the first one. The code intentionally
	// favors performance over completeness: we assume that keys are string
	// constants and thus compare equal when the string values are equal. A
	// string constant being overridden by, for example, a fmt.Stringer is
	// not handled.
	overrides := map[interface{}]bool{}
	for i := 0; i < len(second); i += 2 {
		overrides[second[i]] = true
	}
	merged := make([]interface{}, 0, maxLength)
	for i := 0; i+1 < len(first); i += 2 {
		key := first[i]
		if overrides[key] {
			continue
		}
		merged = append(merged, key, first[i+1])
	}
	merged = append(merged, second...)
	if len(merged)%2 != 0 {
		merged = append(merged, missingValue)
	}
	return merged
}

type Formatter struct {
	AnyToStringHook AnyToStringFunc
}

type AnyToStringFunc func(v interface{}) string

// MergeKVsInto is a variant of MergeKVs which directly formats the key/value
// pairs into a buffer.
func (f Formatter) MergeAndFormatKVs(b *bytes.Buffer, first, second []interface{}) {
	if len(first) == 0 && len(second) == 0 {
		// Nothing to do at all.
		return
	}

	if len(first) == 0 && len(second)%2 == 0 {
		// Nothing to be overridden, second slice is well-formed
		// and can be used directly.
		for i := 0; i < len(second); i += 2 {
			f.KVFormat(b, second[i], second[i+1])
		}
		return
	}

	// Determine which keys are in the second slice so that we can skip
	// them when iterating over the first one. The code intentionally
	// favors performance over completeness: we assume that keys are string
	// constants and thus compare equal when the string values are equal. A
	// string constant being overridden by, for example, a fmt.Stringer is
	// not handled.
	overrides := map[interface{}]bool{}
	for i := 0; i < len(second); i += 2 {
		overrides[second[i]] = true
	}
	for i := 0; i < len(first); i += 2 {
		key := first[i]
		if overrides[key] {
			continue
		}
		f.KVFormat(b, key, first[i+1])
	}
	// Round down.
	l := len(second)
	l = l / 2 * 2
	for i := 1; i < l; i += 2 {
		f.KVFormat(b, second[i-1], second[i])
	}
	if len(second)%2 == 1 {
		f.KVFormat(b, second[len(second)-1], missingValue)
	}
}

func MergeAndFormatKVs(b *bytes.Buffer, first, second []interface{}) {
	Formatter{}.MergeAndFormatKVs(b, first, second)
}

const missingValue = "(MISSING)"

// KVListFormat serializes all key/value pairs into the provided buffer.
// A space gets inserted before the first pair and between each pair.
func (f Formatter) KVListFormat(b *bytes.Buffer, keysAndValues ...interface{}) {
	for i := 0; i < len(keysAndValues); i += 2 {
		var v interface{}
		k := keysAndValues[i]
		if i+1 < len(keysAndValues) {
			v = keysAndValues[i+1]
		} else {
			v = missingValue
		}
		f.KVFormat(b, k, v)
	}
}

func KVListFormat(b *bytes.Buffer, keysAndValues ...interface{}) {
	Formatter{}.KVListFormat(b, keysAndValues...)
}

// KVFormat serializes one key/value pair into the provided buffer.
// A space gets inserted before the pair.
func (f Formatter) KVFormat(b *bytes.Buffer, k, v interface{}) {
	b.WriteByte(' ')
	// Keys are assumed to be well-formed according to
	// https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/migration-to-structured-logging.md#name-arguments
	// for the sake of performance. Keys with spaces,
	// special characters, etc. will break parsing.
	if sK, ok := k.(string); ok {
		// Avoid one allocation when the key is a string, which
		// normally it should be.
		b.WriteString(sK)
	} else {
		b.WriteString(fmt.Sprintf("%s", k))
	}

	// The type checks are sorted so that more frequently used ones
	// come first because that is then faster in the common
	// cases. In Kubernetes, ObjectRef (a Stringer) is more common
	// than plain strings
	// (https://github.com/kubernetes/kubernetes/pull/106594#issuecomment-975526235).
	switch v := v.(type) {
	case textWriter:
		writeTextWriterValue(b, v)
	case fmt.Stringer:
		writeStringValue(b, true, StringerToString(v))
	case string:
		writeStringValue(b, true, v)
	case error:
		writeStringValue(b, true, ErrorToString(v))
	case logr.Marshaler:
		value := MarshalerToValue(v)
		// A marshaler that returns a string is useful for
		// delayed formatting of complex values. We treat this
		// case like a normal string. This is useful for
		// multi-line support.
		//
		// We could do this by recursively formatting a value,
		// but that comes with the risk of infinite recursion
		// if a marshaler returns itself. Instead we call it
		// only once and rely on it returning the intended
		// value directly.
		switch value := value.(type) {
		case string:
			writeStringValue(b, true, value)
		default:
			writeStringValue(b, false, f.AnyToString(value))
		}
	case []byte:
		// In https://github.com/kubernetes/klog/pull/237 it was decided
		// to format byte slices with "%+q". The advantages of that are:
		// - readable output if the bytes happen to be printable
		// - non-printable bytes get represented as unicode escape
		//   sequences (\uxxxx)
		//
		// The downsides are that we cannot use the faster
		// strconv.Quote here and that multi-line output is not
		// supported. If developers know that a byte array is
		// printable and they want multi-line output, they can
		// convert the value to string before logging it.
		b.WriteByte('=')
		b.WriteString(fmt.Sprintf("%+q", v))
	default:
		writeStringValue(b, false, f.AnyToString(v))
	}
}

func KVFormat(b *bytes.Buffer, k, v interface{}) {
	Formatter{}.KVFormat(b, k, v)
}

// AnyToString is the historic fallback formatter.
func (f Formatter) AnyToString(v interface{}) string {
	if f.AnyToStringHook != nil {
		return f.AnyToStringHook(v)
	}
	return fmt.Sprintf("%+v", v)
}

// StringerToString converts a Stringer to a string,
// handling panics if they occur.
func StringerToString(s fmt.Stringer) (ret string) {
	defer func() {
		if err := recover(); err != nil {
			ret = fmt.Sprintf("<panic: %s>", err)
		}
	}()
	ret = s.String()
	return
}

// MarshalerToValue invokes a marshaler and catches
// panics.
func MarshalerToValue(m logr.Marshaler) (ret interface{}) {
	defer func() {
		if err := recover(); err != nil {
			ret = fmt.Sprintf("<panic: %s>", err)
		}
	}()
	ret = m.MarshalLog()
	return
}

// ErrorToString converts an error to a string,
// handling panics if they occur.
func ErrorToString(err error) (ret string) {
	defer func() {
		if err := recover(); err != nil {
			ret = fmt.Sprintf("<panic: %s>", err)
		}
	}()
	ret = err.Error()
	return
}

func writeTextWriterValue(b *bytes.Buffer, v textWriter) {
	b.WriteRune('=')
	defer func() {
		if err := recover(); err != nil {
			fmt.Fprintf(b, `"<panic: %s>"`, err)
		}
	}()
	v.WriteText(b)
}

func writeStringValue(b *bytes.Buffer, quote bool, v string) {
	data := []byte(v)
	index := bytes.IndexByte(data, '\n')
	if index == -1 {
		b.WriteByte('=')
		if quote {
			// Simple string, quote quotation marks and non-printable characters.
			b.WriteString(strconv.Quote(v))
			return
		}
		// Non-string with no line breaks.
		b.WriteString(v)
		return
	}

	// Complex multi-line string, show as-is with indention like this:
	// I... "hello world" key=<
	// <tab>line 1
	// <tab>line 2
	//  >
	//
	// Tabs indent the lines of the value while the end of string delimiter
	// is indented with a space. That has two purposes:
	// - visual difference between the two for a human reader because indention
	//   will be different
	// - no ambiguity when some value line starts with the end delimiter
	//
	// One downside is that the output cannot distinguish between strings that
	// end with a line break and those that don't because the end delimiter
	// will always be on the next line.
	b.WriteString("=<\n")
	for index != -1 {
		b.WriteByte('\t')
		b.Write(data[0 : index+1])
		data = data[index+1:]
		index = bytes.IndexByte(data, '\n')
	}
	if len(data) == 0 {
		// String ended with line break, don't add another.
		b.WriteString(" >")
	} else {
		// No line break at end of last line, write rest of string and
		// add one.
		b.WriteByte('\t')
		b.Write(data)
		b.WriteString("\n >")
	}
}
07070100001048000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/internal/severity   07070100001049000081A4000000000000000000000001645E367C00000662000000000000000000000000000000000000004800000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/internal/severity/severity.go   // Copyright 2013 Google Inc. All Rights Reserved.
// Copyright 2022 The Kubernetes Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package severity provides definitions for klog severity (info, warning, ...)
package severity

import (
	"strings"
)

// severity identifies the sort of log: info, warning etc. The binding to flag.Value
// is handled in klog.go
type Severity int32 // sync/atomic int32

// These constants identify the log levels in order of increasing severity.
// A message written to a high-severity log file is also written to each
// lower-severity log file.
const (
	InfoLog Severity = iota
	WarningLog
	ErrorLog
	FatalLog
	NumSeverity = 4
)

// Char contains one shortcut letter per severity level.
const Char = "IWEF"

// Name contains one name per severity level.
var Name = []string{
	InfoLog:    "INFO",
	WarningLog: "WARNING",
	ErrorLog:   "ERROR",
	FatalLog:   "FATAL",
}

// ByName looks up a severity level by name.
func ByName(s string) (Severity, bool) {
	s = strings.ToUpper(s)
	for i, name := range Name {
		if name == s {
			return Severity(i), true
		}
	}
	return 0, false
}
  0707010000104A000081A4000000000000000000000001645E367C0000154D000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/k8s_references.go   /*
Copyright 2021 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package klog

import (
	"bytes"
	"fmt"
	"reflect"
	"strings"

	"github.com/go-logr/logr"
)

// ObjectRef references a kubernetes object
type ObjectRef struct {
	Name      string `json:"name"`
	Namespace string `json:"namespace,omitempty"`
}

func (ref ObjectRef) String() string {
	if ref.Namespace != "" {
		var builder strings.Builder
		builder.Grow(len(ref.Namespace) + len(ref.Name) + 1)
		builder.WriteString(ref.Namespace)
		builder.WriteRune('/')
		builder.WriteString(ref.Name)
		return builder.String()
	}
	return ref.Name
}

func (ref ObjectRef) WriteText(out *bytes.Buffer) {
	out.WriteRune('"')
	ref.writeUnquoted(out)
	out.WriteRune('"')
}

func (ref ObjectRef) writeUnquoted(out *bytes.Buffer) {
	if ref.Namespace != "" {
		out.WriteString(ref.Namespace)
		out.WriteRune('/')
	}
	out.WriteString(ref.Name)
}

// MarshalLog ensures that loggers with support for structured output will log
// as a struct by removing the String method via a custom type.
func (ref ObjectRef) MarshalLog() interface{} {
	type or ObjectRef
	return or(ref)
}

var _ logr.Marshaler = ObjectRef{}

// KMetadata is a subset of the kubernetes k8s.io/apimachinery/pkg/apis/meta/v1.Object interface
// this interface may expand in the future, but will always be a subset of the
// kubernetes k8s.io/apimachinery/pkg/apis/meta/v1.Object interface
type KMetadata interface {
	GetName() string
	GetNamespace() string
}

// KObj returns ObjectRef from ObjectMeta
func KObj(obj KMetadata) ObjectRef {
	if obj == nil {
		return ObjectRef{}
	}
	if val := reflect.ValueOf(obj); val.Kind() == reflect.Ptr && val.IsNil() {
		return ObjectRef{}
	}

	return ObjectRef{
		Name:      obj.GetName(),
		Namespace: obj.GetNamespace(),
	}
}

// KRef returns ObjectRef from name and namespace
func KRef(namespace, name string) ObjectRef {
	return ObjectRef{
		Name:      name,
		Namespace: namespace,
	}
}

// KObjs returns slice of ObjectRef from an slice of ObjectMeta
//
// DEPRECATED: Use KObjSlice instead, it has better performance.
func KObjs(arg interface{}) []ObjectRef {
	s := reflect.ValueOf(arg)
	if s.Kind() != reflect.Slice {
		return nil
	}
	objectRefs := make([]ObjectRef, 0, s.Len())
	for i := 0; i < s.Len(); i++ {
		if v, ok := s.Index(i).Interface().(KMetadata); ok {
			objectRefs = append(objectRefs, KObj(v))
		} else {
			return nil
		}
	}
	return objectRefs
}

// KObjSlice takes a slice of objects that implement the KMetadata interface
// and returns an object that gets logged as a slice of ObjectRef values or a
// string containing those values, depending on whether the logger prefers text
// output or structured output.
//
// An error string is logged when KObjSlice is not passed a suitable slice.
//
// Processing of the argument is delayed until the value actually gets logged,
// in contrast to KObjs where that overhead is incurred regardless of whether
// the result is needed.
func KObjSlice(arg interface{}) interface{} {
	return kobjSlice{arg: arg}
}

type kobjSlice struct {
	arg interface{}
}

var _ fmt.Stringer = kobjSlice{}
var _ logr.Marshaler = kobjSlice{}

func (ks kobjSlice) String() string {
	objectRefs, errStr := ks.process()
	if errStr != "" {
		return errStr
	}
	return fmt.Sprintf("%v", objectRefs)
}

func (ks kobjSlice) MarshalLog() interface{} {
	objectRefs, errStr := ks.process()
	if errStr != "" {
		return errStr
	}
	return objectRefs
}

func (ks kobjSlice) process() (objs []interface{}, err string) {
	s := reflect.ValueOf(ks.arg)
	switch s.Kind() {
	case reflect.Invalid:
		// nil parameter, print as nil.
		return nil, ""
	case reflect.Slice:
		// Okay, handle below.
	default:
		return nil, fmt.Sprintf("<KObjSlice needs a slice, got type %T>", ks.arg)
	}
	objectRefs := make([]interface{}, 0, s.Len())
	for i := 0; i < s.Len(); i++ {
		item := s.Index(i).Interface()
		if item == nil {
			objectRefs = append(objectRefs, nil)
		} else if v, ok := item.(KMetadata); ok {
			objectRefs = append(objectRefs, KObj(v))
		} else {
			return nil, fmt.Sprintf("<KObjSlice needs a slice of values implementing KMetadata, got type %T>", item)
		}
	}
	return objectRefs, ""
}

var nilToken = []byte("<nil>")

func (ks kobjSlice) WriteText(out *bytes.Buffer) {
	s := reflect.ValueOf(ks.arg)
	switch s.Kind() {
	case reflect.Invalid:
		// nil parameter, print as empty slice.
		out.WriteString("[]")
		return
	case reflect.Slice:
		// Okay, handle below.
	default:
		fmt.Fprintf(out, `"<KObjSlice needs a slice, got type %T>"`, ks.arg)
		return
	}
	out.Write([]byte{'['})
	defer out.Write([]byte{']'})
	for i := 0; i < s.Len(); i++ {
		if i > 0 {
			out.Write([]byte{' '})
		}
		item := s.Index(i).Interface()
		if item == nil {
			out.Write(nilToken)
		} else if v, ok := item.(KMetadata); ok {
			KObj(v).writeUnquoted(out)
		} else {
			fmt.Fprintf(out, "<KObjSlice needs a slice of values implementing KMetadata, got type %T>", item)
			return
		}
	}
}
   0707010000104B000081A4000000000000000000000001645E367C0000E2D7000000000000000000000000000000000000003200000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/klog.go // Go support for leveled logs, analogous to https://code.google.com/p/google-glog/
//
// Copyright 2013 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package klog implements logging analogous to the Google-internal C++ INFO/ERROR/V setup.
// It provides functions Info, Warning, Error, Fatal, plus formatting variants such as
// Infof. It also provides V-style logging controlled by the -v and -vmodule=file=2 flags.
//
// Basic examples:
//
//	klog.Info("Prepare to repel boarders")
//
//	klog.Fatalf("Initialization failed: %s", err)
//
// See the documentation for the V function for an explanation of these examples:
//
//	if klog.V(2) {
//		klog.Info("Starting transaction...")
//	}
//
//	klog.V(2).Infoln("Processed", nItems, "elements")
//
// Log output is buffered and written periodically using Flush. Programs
// should call Flush before exiting to guarantee all log output is written.
//
// By default, all log statements write to standard error.
// This package provides several flags that modify this behavior.
// As a result, flag.Parse must be called before any logging is done.
//
//		-logtostderr=true
//			Logs are written to standard error instead of to files.
//	             This shortcuts most of the usual output routing:
//	             -alsologtostderr, -stderrthreshold and -log_dir have no
//	             effect and output redirection at runtime with SetOutput is
//	             ignored.
//		-alsologtostderr=false
//			Logs are written to standard error as well as to files.
//		-stderrthreshold=ERROR
//			Log events at or above this severity are logged to standard
//			error as well as to files.
//		-log_dir=""
//			Log files will be written to this directory instead of the
//			default temporary directory.
//
//		Other flags provide aids to debugging.
//
//		-log_backtrace_at=""
//			When set to a file and line number holding a logging statement,
//			such as
//				-log_backtrace_at=gopherflakes.go:234
//			a stack trace will be written to the Info log whenever execution
//			hits that statement. (Unlike with -vmodule, the ".go" must be
//			present.)
//		-v=0
//			Enable V-leveled logging at the specified level.
//		-vmodule=""
//			The syntax of the argument is a comma-separated list of pattern=N,
//			where pattern is a literal file name (minus the ".go" suffix) or
//			"glob" pattern and N is a V level. For instance,
//				-vmodule=gopher*=3
//			sets the V level to 3 in all Go files whose names begin "gopher".
package klog

import (
	"bufio"
	"bytes"
	"errors"
	"flag"
	"fmt"
	"io"
	stdLog "log"
	"math"
	"os"
	"path/filepath"
	"runtime"
	"strconv"
	"strings"
	"sync"
	"sync/atomic"
	"time"

	"k8s.io/klog/v2/internal/buffer"
	"k8s.io/klog/v2/internal/clock"
	"k8s.io/klog/v2/internal/dbg"
	"k8s.io/klog/v2/internal/serialize"
	"k8s.io/klog/v2/internal/severity"
)

// severityValue identifies the sort of log: info, warning etc. It also implements
// the flag.Value interface. The -stderrthreshold flag is of type severity and
// should be modified only through the flag.Value interface. The values match
// the corresponding constants in C++.
type severityValue struct {
	severity.Severity
}

// get returns the value of the severity.
func (s *severityValue) get() severity.Severity {
	return severity.Severity(atomic.LoadInt32((*int32)(&s.Severity)))
}

// set sets the value of the severity.
func (s *severityValue) set(val severity.Severity) {
	atomic.StoreInt32((*int32)(&s.Severity), int32(val))
}

// String is part of the flag.Value interface.
func (s *severityValue) String() string {
	return strconv.FormatInt(int64(s.Severity), 10)
}

// Get is part of the flag.Getter interface.
func (s *severityValue) Get() interface{} {
	return s.Severity
}

// Set is part of the flag.Value interface.
func (s *severityValue) Set(value string) error {
	var threshold severity.Severity
	// Is it a known name?
	if v, ok := severity.ByName(value); ok {
		threshold = v
	} else {
		v, err := strconv.ParseInt(value, 10, 32)
		if err != nil {
			return err
		}
		threshold = severity.Severity(v)
	}
	logging.stderrThreshold.set(threshold)
	return nil
}

// OutputStats tracks the number of output lines and bytes written.
type OutputStats struct {
	lines int64
	bytes int64
}

// Lines returns the number of lines written.
func (s *OutputStats) Lines() int64 {
	return atomic.LoadInt64(&s.lines)
}

// Bytes returns the number of bytes written.
func (s *OutputStats) Bytes() int64 {
	return atomic.LoadInt64(&s.bytes)
}

// Stats tracks the number of lines of output and number of bytes
// per severity level. Values must be read with atomic.LoadInt64.
var Stats struct {
	Info, Warning, Error OutputStats
}

var severityStats = [severity.NumSeverity]*OutputStats{
	severity.InfoLog:    &Stats.Info,
	severity.WarningLog: &Stats.Warning,
	severity.ErrorLog:   &Stats.Error,
}

// Level is exported because it appears in the arguments to V and is
// the type of the v flag, which can be set programmatically.
// It's a distinct type because we want to discriminate it from logType.
// Variables of type level are only changed under logging.mu.
// The -v flag is read only with atomic ops, so the state of the logging
// module is consistent.

// Level is treated as a sync/atomic int32.

// Level specifies a level of verbosity for V logs. *Level implements
// flag.Value; the -v flag is of type Level and should be modified
// only through the flag.Value interface.
type Level int32

// get returns the value of the Level.
func (l *Level) get() Level {
	return Level(atomic.LoadInt32((*int32)(l)))
}

// set sets the value of the Level.
func (l *Level) set(val Level) {
	atomic.StoreInt32((*int32)(l), int32(val))
}

// String is part of the flag.Value interface.
func (l *Level) String() string {
	return strconv.FormatInt(int64(*l), 10)
}

// Get is part of the flag.Getter interface.
func (l *Level) Get() interface{} {
	return *l
}

// Set is part of the flag.Value interface.
func (l *Level) Set(value string) error {
	v, err := strconv.ParseInt(value, 10, 32)
	if err != nil {
		return err
	}
	logging.mu.Lock()
	defer logging.mu.Unlock()
	logging.setVState(Level(v), logging.vmodule.filter, false)
	return nil
}

// moduleSpec represents the setting of the -vmodule flag.
type moduleSpec struct {
	filter []modulePat
}

// modulePat contains a filter for the -vmodule flag.
// It holds a verbosity level and a file pattern to match.
type modulePat struct {
	pattern string
	literal bool // The pattern is a literal string
	level   Level
}

// match reports whether the file matches the pattern. It uses a string
// comparison if the pattern contains no metacharacters.
func (m *modulePat) match(file string) bool {
	if m.literal {
		return file == m.pattern
	}
	match, _ := filepath.Match(m.pattern, file)
	return match
}

func (m *moduleSpec) String() string {
	// Lock because the type is not atomic. TODO: clean this up.
	logging.mu.Lock()
	defer logging.mu.Unlock()
	return m.serialize()
}

func (m *moduleSpec) serialize() string {
	var b bytes.Buffer
	for i, f := range m.filter {
		if i > 0 {
			b.WriteRune(',')
		}
		fmt.Fprintf(&b, "%s=%d", f.pattern, f.level)
	}
	return b.String()
}

// Get is part of the (Go 1.2)  flag.Getter interface. It always returns nil for this flag type since the
// struct is not exported.
func (m *moduleSpec) Get() interface{} {
	return nil
}

var errVmoduleSyntax = errors.New("syntax error: expect comma-separated list of filename=N")

// Set will sets module value
// Syntax: -vmodule=recordio=2,file=1,gfs*=3
func (m *moduleSpec) Set(value string) error {
	filter, err := parseModuleSpec(value)
	if err != nil {
		return err
	}
	logging.mu.Lock()
	defer logging.mu.Unlock()
	logging.setVState(logging.verbosity, filter, true)
	return nil
}

func parseModuleSpec(value string) ([]modulePat, error) {
	var filter []modulePat
	for _, pat := range strings.Split(value, ",") {
		if len(pat) == 0 {
			// Empty strings such as from a trailing comma can be ignored.
			continue
		}
		patLev := strings.Split(pat, "=")
		if len(patLev) != 2 || len(patLev[0]) == 0 || len(patLev[1]) == 0 {
			return nil, errVmoduleSyntax
		}
		pattern := patLev[0]
		v, err := strconv.ParseInt(patLev[1], 10, 32)
		if err != nil {
			return nil, errors.New("syntax error: expect comma-separated list of filename=N")
		}
		if v < 0 {
			return nil, errors.New("negative value for vmodule level")
		}
		if v == 0 {
			continue // Ignore. It's harmless but no point in paying the overhead.
		}
		// TODO: check syntax of filter?
		filter = append(filter, modulePat{pattern, isLiteral(pattern), Level(v)})
	}
	return filter, nil
}

// isLiteral reports whether the pattern is a literal string, that is, has no metacharacters
// that require filepath.Match to be called to match the pattern.
func isLiteral(pattern string) bool {
	return !strings.ContainsAny(pattern, `\*?[]`)
}

// traceLocation represents the setting of the -log_backtrace_at flag.
type traceLocation struct {
	file string
	line int
}

// isSet reports whether the trace location has been specified.
// logging.mu is held.
func (t *traceLocation) isSet() bool {
	return t.line > 0
}

// match reports whether the specified file and line matches the trace location.
// The argument file name is the full path, not the basename specified in the flag.
// logging.mu is held.
func (t *traceLocation) match(file string, line int) bool {
	if t.line != line {
		return false
	}
	if i := strings.LastIndex(file, "/"); i >= 0 {
		file = file[i+1:]
	}
	return t.file == file
}

func (t *traceLocation) String() string {
	// Lock because the type is not atomic. TODO: clean this up.
	logging.mu.Lock()
	defer logging.mu.Unlock()
	return fmt.Sprintf("%s:%d", t.file, t.line)
}

// Get is part of the (Go 1.2) flag.Getter interface. It always returns nil for this flag type since the
// struct is not exported
func (t *traceLocation) Get() interface{} {
	return nil
}

var errTraceSyntax = errors.New("syntax error: expect file.go:234")

// Set will sets backtrace value
// Syntax: -log_backtrace_at=gopherflakes.go:234
// Note that unlike vmodule the file extension is included here.
func (t *traceLocation) Set(value string) error {
	if value == "" {
		// Unset.
		logging.mu.Lock()
		defer logging.mu.Unlock()
		t.line = 0
		t.file = ""
		return nil
	}
	fields := strings.Split(value, ":")
	if len(fields) != 2 {
		return errTraceSyntax
	}
	file, line := fields[0], fields[1]
	if !strings.Contains(file, ".") {
		return errTraceSyntax
	}
	v, err := strconv.Atoi(line)
	if err != nil {
		return errTraceSyntax
	}
	if v <= 0 {
		return errors.New("negative or zero value for level")
	}
	logging.mu.Lock()
	defer logging.mu.Unlock()
	t.line = v
	t.file = file
	return nil
}

// flushSyncWriter is the interface satisfied by logging destinations.
type flushSyncWriter interface {
	Flush() error
	Sync() error
	io.Writer
}

var logging loggingT
var commandLine flag.FlagSet

// init sets up the defaults and creates command line flags.
func init() {
	commandLine.StringVar(&logging.logDir, "log_dir", "", "If non-empty, write log files in this directory (no effect when -logtostderr=true)")
	commandLine.StringVar(&logging.logFile, "log_file", "", "If non-empty, use this log file (no effect when -logtostderr=true)")
	commandLine.Uint64Var(&logging.logFileMaxSizeMB, "log_file_max_size", 1800,
		"Defines the maximum size a log file can grow to (no effect when -logtostderr=true). Unit is megabytes. "+
			"If the value is 0, the maximum file size is unlimited.")
	commandLine.BoolVar(&logging.toStderr, "logtostderr", true, "log to standard error instead of files")
	commandLine.BoolVar(&logging.alsoToStderr, "alsologtostderr", false, "log to standard error as well as files (no effect when -logtostderr=true)")
	logging.setVState(0, nil, false)
	commandLine.Var(&logging.verbosity, "v", "number for the log level verbosity")
	commandLine.BoolVar(&logging.addDirHeader, "add_dir_header", false, "If true, adds the file directory to the header of the log messages")
	commandLine.BoolVar(&logging.skipHeaders, "skip_headers", false, "If true, avoid header prefixes in the log messages")
	commandLine.BoolVar(&logging.oneOutput, "one_output", false, "If true, only write logs to their native severity level (vs also writing to each lower severity level; no effect when -logtostderr=true)")
	commandLine.BoolVar(&logging.skipLogHeaders, "skip_log_headers", false, "If true, avoid headers when opening log files (no effect when -logtostderr=true)")
	logging.stderrThreshold = severityValue{
		Severity: severity.ErrorLog, // Default stderrThreshold is ERROR.
	}
	commandLine.Var(&logging.stderrThreshold, "stderrthreshold", "logs at or above this threshold go to stderr when writing to files and stderr (no effect when -logtostderr=true or -alsologtostderr=false)")
	commandLine.Var(&logging.vmodule, "vmodule", "comma-separated list of pattern=N settings for file-filtered logging")
	commandLine.Var(&logging.traceLocation, "log_backtrace_at", "when logging hits line file:N, emit a stack trace")

	logging.settings.contextualLoggingEnabled = true
	logging.flushD = newFlushDaemon(logging.lockAndFlushAll, nil)
}

// InitFlags is for explicitly initializing the flags.
// It may get called repeatedly for different flagsets, but not
// twice for the same one. May get called concurrently
// to other goroutines using klog. However, only some flags
// may get set concurrently (see implementation).
func InitFlags(flagset *flag.FlagSet) {
	if flagset == nil {
		flagset = flag.CommandLine
	}

	commandLine.VisitAll(func(f *flag.Flag) {
		flagset.Var(f.Value, f.Name, f.Usage)
	})
}

// Flush flushes all pending log I/O.
func Flush() {
	logging.lockAndFlushAll()
}

// settings collects global settings.
type settings struct {
	// contextualLoggingEnabled controls whether contextual logging is
	// active. Disabling it may have some small performance benefit.
	contextualLoggingEnabled bool

	// logger is the global Logger chosen by users of klog, nil if
	// none is available.
	logger *logWriter

	// loggerOptions contains the options that were supplied for
	// globalLogger.
	loggerOptions loggerOptions

	// Boolean flags. Not handled atomically because the flag.Value interface
	// does not let us avoid the =true, and that shorthand is necessary for
	// compatibility. TODO: does this matter enough to fix? Seems unlikely.
	toStderr     bool // The -logtostderr flag.
	alsoToStderr bool // The -alsologtostderr flag.

	// Level flag. Handled atomically.
	stderrThreshold severityValue // The -stderrthreshold flag.

	// Access to all of the following fields must be protected via a mutex.

	// file holds writer for each of the log types.
	file [severity.NumSeverity]flushSyncWriter
	// flushInterval is the interval for periodic flushing. If zero,
	// the global default will be used.
	flushInterval time.Duration

	// filterLength stores the length of the vmodule filter chain. If greater
	// than zero, it means vmodule is enabled. It may be read safely
	// using sync.LoadInt32, but is only modified under mu.
	filterLength int32
	// traceLocation is the state of the -log_backtrace_at flag.
	traceLocation traceLocation
	// These flags are modified only under lock, although verbosity may be fetched
	// safely using atomic.LoadInt32.
	vmodule   moduleSpec // The state of the -vmodule flag.
	verbosity Level      // V logging level, the value of the -v flag/

	// If non-empty, overrides the choice of directory in which to write logs.
	// See createLogDirs for the full list of possible destinations.
	logDir string

	// If non-empty, specifies the path of the file to write logs. mutually exclusive
	// with the log_dir option.
	logFile string

	// When logFile is specified, this limiter makes sure the logFile won't exceeds a certain size. When exceeds, the
	// logFile will be cleaned up. If this value is 0, no size limitation will be applied to logFile.
	logFileMaxSizeMB uint64

	// If true, do not add the prefix headers, useful when used with SetOutput
	skipHeaders bool

	// If true, do not add the headers to log files
	skipLogHeaders bool

	// If true, add the file directory to the header
	addDirHeader bool

	// If true, messages will not be propagated to lower severity log levels
	oneOutput bool

	// If set, all output will be filtered through the filter.
	filter LogFilter
}

// deepCopy creates a copy that doesn't share anything with the original
// instance.
func (s settings) deepCopy() settings {
	// vmodule is a slice and would be shared, so we have copy it.
	filter := make([]modulePat, len(s.vmodule.filter))
	for i := range s.vmodule.filter {
		filter[i] = s.vmodule.filter[i]
	}
	s.vmodule.filter = filter

	if s.logger != nil {
		logger := *s.logger
		s.logger = &logger
	}

	return s
}

// loggingT collects all the global state of the logging setup.
type loggingT struct {
	settings

	// flushD holds a flushDaemon that frequently flushes log file buffers.
	// Uses its own mutex.
	flushD *flushDaemon

	// mu protects the remaining elements of this structure and the fields
	// in settingsT which need a mutex lock.
	mu sync.Mutex

	// pcs is used in V to avoid an allocation when computing the caller's PC.
	pcs [1]uintptr
	// vmap is a cache of the V Level for each V() call site, identified by PC.
	// It is wiped whenever the vmodule flag changes state.
	vmap map[uintptr]Level
}

// setVState sets a consistent state for V logging.
// l.mu is held.
func (l *loggingT) setVState(verbosity Level, filter []modulePat, setFilter bool) {
	// Turn verbosity off so V will not fire while we are in transition.
	l.verbosity.set(0)
	// Ditto for filter length.
	atomic.StoreInt32(&l.filterLength, 0)

	// Set the new filters and wipe the pc->Level map if the filter has changed.
	if setFilter {
		l.vmodule.filter = filter
		l.vmap = make(map[uintptr]Level)
	}

	// Things are consistent now, so enable filtering and verbosity.
	// They are enabled in order opposite to that in V.
	atomic.StoreInt32(&l.filterLength, int32(len(filter)))
	l.verbosity.set(verbosity)
}

var timeNow = time.Now // Stubbed out for testing.

// CaptureState gathers information about all current klog settings.
// The result can be used to restore those settings.
func CaptureState() State {
	logging.mu.Lock()
	defer logging.mu.Unlock()
	return &state{
		settings:      logging.settings.deepCopy(),
		flushDRunning: logging.flushD.isRunning(),
		maxSize:       MaxSize,
	}
}

// State stores a snapshot of klog settings. It gets created with CaptureState
// and can be used to restore the entire state. Modifying individual settings
// is supported via the command line flags.
type State interface {
	// Restore restore the entire state. It may get called more than once.
	Restore()
}

type state struct {
	settings

	flushDRunning bool
	maxSize       uint64
}

func (s *state) Restore() {
	// This needs to be done before mutex locking.
	if s.flushDRunning && !logging.flushD.isRunning() {
		// This is not quite accurate: StartFlushDaemon might
		// have been called with some different interval.
		interval := s.flushInterval
		if interval == 0 {
			interval = flushInterval
		}
		logging.flushD.run(interval)
	} else if !s.flushDRunning && logging.flushD.isRunning() {
		logging.flushD.stop()
	}

	logging.mu.Lock()
	defer logging.mu.Unlock()

	logging.settings = s.settings
	logging.setVState(s.verbosity, s.vmodule.filter, true)
	MaxSize = s.maxSize
}

/*
header formats a log header as defined by the C++ implementation.
It returns a buffer containing the formatted header and the user's file and line number.
The depth specifies how many stack frames above lives the source line to be identified in the log message.

Log lines have this form:

	Lmmdd hh:mm:ss.uuuuuu threadid file:line] msg...

where the fields are defined as follows:

	L                A single character, representing the log level (eg 'I' for INFO)
	mm               The month (zero padded; ie May is '05')
	dd               The day (zero padded)
	hh:mm:ss.uuuuuu  Time in hours, minutes and fractional seconds
	threadid         The space-padded thread ID as returned by GetTID()
	file             The file name
	line             The line number
	msg              The user-supplied message
*/
func (l *loggingT) header(s severity.Severity, depth int) (*buffer.Buffer, string, int) {
	_, file, line, ok := runtime.Caller(3 + depth)
	if !ok {
		file = "???"
		line = 1
	} else {
		if slash := strings.LastIndex(file, "/"); slash >= 0 {
			path := file
			file = path[slash+1:]
			if l.addDirHeader {
				if dirsep := strings.LastIndex(path[:slash], "/"); dirsep >= 0 {
					file = path[dirsep+1:]
				}
			}
		}
	}
	return l.formatHeader(s, file, line), file, line
}

// formatHeader formats a log header using the provided file name and line number.
func (l *loggingT) formatHeader(s severity.Severity, file string, line int) *buffer.Buffer {
	buf := buffer.GetBuffer()
	if l.skipHeaders {
		return buf
	}
	now := timeNow()
	buf.FormatHeader(s, file, line, now)
	return buf
}

func (l *loggingT) println(s severity.Severity, logger *logWriter, filter LogFilter, args ...interface{}) {
	l.printlnDepth(s, logger, filter, 1, args...)
}

func (l *loggingT) printlnDepth(s severity.Severity, logger *logWriter, filter LogFilter, depth int, args ...interface{}) {
	buf, file, line := l.header(s, depth)
	// If a logger is set and doesn't support writing a formatted buffer,
	// we clear the generated header as we rely on the backing
	// logger implementation to print headers.
	if logger != nil && logger.writeKlogBuffer == nil {
		buffer.PutBuffer(buf)
		buf = buffer.GetBuffer()
	}
	if filter != nil {
		args = filter.Filter(args)
	}
	fmt.Fprintln(buf, args...)
	l.output(s, logger, buf, depth, file, line, false)
}

func (l *loggingT) print(s severity.Severity, logger *logWriter, filter LogFilter, args ...interface{}) {
	l.printDepth(s, logger, filter, 1, args...)
}

func (l *loggingT) printDepth(s severity.Severity, logger *logWriter, filter LogFilter, depth int, args ...interface{}) {
	buf, file, line := l.header(s, depth)
	// If a logger is set and doesn't support writing a formatted buffer,
	// we clear the generated header as we rely on the backing
	// logger implementation to print headers.
	if logger != nil && logger.writeKlogBuffer == nil {
		buffer.PutBuffer(buf)
		buf = buffer.GetBuffer()
	}
	if filter != nil {
		args = filter.Filter(args)
	}
	fmt.Fprint(buf, args...)
	if buf.Len() == 0 || buf.Bytes()[buf.Len()-1] != '\n' {
		buf.WriteByte('\n')
	}
	l.output(s, logger, buf, depth, file, line, false)
}

func (l *loggingT) printf(s severity.Severity, logger *logWriter, filter LogFilter, format string, args ...interface{}) {
	l.printfDepth(s, logger, filter, 1, format, args...)
}

func (l *loggingT) printfDepth(s severity.Severity, logger *logWriter, filter LogFilter, depth int, format string, args ...interface{}) {
	buf, file, line := l.header(s, depth)
	// If a logger is set and doesn't support writing a formatted buffer,
	// we clear the generated header as we rely on the backing
	// logger implementation to print headers.
	if logger != nil && logger.writeKlogBuffer == nil {
		buffer.PutBuffer(buf)
		buf = buffer.GetBuffer()
	}
	if filter != nil {
		format, args = filter.FilterF(format, args)
	}
	fmt.Fprintf(buf, format, args...)
	if buf.Bytes()[buf.Len()-1] != '\n' {
		buf.WriteByte('\n')
	}
	l.output(s, logger, buf, depth, file, line, false)
}

// printWithFileLine behaves like print but uses the provided file and line number.  If
// alsoLogToStderr is true, the log message always appears on standard error; it
// will also appear in the log file unless --logtostderr is set.
func (l *loggingT) printWithFileLine(s severity.Severity, logger *logWriter, filter LogFilter, file string, line int, alsoToStderr bool, args ...interface{}) {
	buf := l.formatHeader(s, file, line)
	// If a logger is set and doesn't support writing a formatted buffer,
	// we clear the generated header as we rely on the backing
	// logger implementation to print headers.
	if logger != nil && logger.writeKlogBuffer == nil {
		buffer.PutBuffer(buf)
		buf = buffer.GetBuffer()
	}
	if filter != nil {
		args = filter.Filter(args)
	}
	fmt.Fprint(buf, args...)
	if buf.Bytes()[buf.Len()-1] != '\n' {
		buf.WriteByte('\n')
	}
	l.output(s, logger, buf, 2 /* depth */, file, line, alsoToStderr)
}

// if loggr is specified, will call loggr.Error, otherwise output with logging module.
func (l *loggingT) errorS(err error, logger *logWriter, filter LogFilter, depth int, msg string, keysAndValues ...interface{}) {
	if filter != nil {
		msg, keysAndValues = filter.FilterS(msg, keysAndValues)
	}
	if logger != nil {
		logger.WithCallDepth(depth+2).Error(err, msg, keysAndValues...)
		return
	}
	l.printS(err, severity.ErrorLog, depth+1, msg, keysAndValues...)
}

// if loggr is specified, will call loggr.Info, otherwise output with logging module.
func (l *loggingT) infoS(logger *logWriter, filter LogFilter, depth int, msg string, keysAndValues ...interface{}) {
	if filter != nil {
		msg, keysAndValues = filter.FilterS(msg, keysAndValues)
	}
	if logger != nil {
		logger.WithCallDepth(depth+2).Info(msg, keysAndValues...)
		return
	}
	l.printS(nil, severity.InfoLog, depth+1, msg, keysAndValues...)
}

// printS is called from infoS and errorS if loggr is not specified.
// set log severity by s
func (l *loggingT) printS(err error, s severity.Severity, depth int, msg string, keysAndValues ...interface{}) {
	// Only create a new buffer if we don't have one cached.
	b := buffer.GetBuffer()
	// The message is always quoted, even if it contains line breaks.
	// If developers want multi-line output, they should use a small, fixed
	// message and put the multi-line output into a value.
	b.WriteString(strconv.Quote(msg))
	if err != nil {
		serialize.KVListFormat(&b.Buffer, "err", err)
	}
	serialize.KVListFormat(&b.Buffer, keysAndValues...)
	l.printDepth(s, logging.logger, nil, depth+1, &b.Buffer)
	// Make the buffer available for reuse.
	buffer.PutBuffer(b)
}

// redirectBuffer is used to set an alternate destination for the logs
type redirectBuffer struct {
	w io.Writer
}

func (rb *redirectBuffer) Sync() error {
	return nil
}

func (rb *redirectBuffer) Flush() error {
	return nil
}

func (rb *redirectBuffer) Write(bytes []byte) (n int, err error) {
	return rb.w.Write(bytes)
}

// SetOutput sets the output destination for all severities
func SetOutput(w io.Writer) {
	logging.mu.Lock()
	defer logging.mu.Unlock()
	for s := severity.FatalLog; s >= severity.InfoLog; s-- {
		rb := &redirectBuffer{
			w: w,
		}
		logging.file[s] = rb
	}
}

// SetOutputBySeverity sets the output destination for specific severity
func SetOutputBySeverity(name string, w io.Writer) {
	logging.mu.Lock()
	defer logging.mu.Unlock()
	sev, ok := severity.ByName(name)
	if !ok {
		panic(fmt.Sprintf("SetOutputBySeverity(%q): unrecognized severity name", name))
	}
	rb := &redirectBuffer{
		w: w,
	}
	logging.file[sev] = rb
}

// LogToStderr sets whether to log exclusively to stderr, bypassing outputs
func LogToStderr(stderr bool) {
	logging.mu.Lock()
	defer logging.mu.Unlock()

	logging.toStderr = stderr
}

// output writes the data to the log files and releases the buffer.
func (l *loggingT) output(s severity.Severity, logger *logWriter, buf *buffer.Buffer, depth int, file string, line int, alsoToStderr bool) {
	var isLocked = true
	l.mu.Lock()
	defer func() {
		if isLocked {
			// Unlock before returning in case that it wasn't done already.
			l.mu.Unlock()
		}
	}()

	if l.traceLocation.isSet() {
		if l.traceLocation.match(file, line) {
			buf.Write(dbg.Stacks(false))
		}
	}
	data := buf.Bytes()
	if logger != nil {
		if logger.writeKlogBuffer != nil {
			logger.writeKlogBuffer(data)
		} else {
			// TODO: set 'severity' and caller information as structured log info
			// keysAndValues := []interface{}{"severity", severityName[s], "file", file, "line", line}
			if s == severity.ErrorLog {
				logger.WithCallDepth(depth+3).Error(nil, string(data))
			} else {
				logger.WithCallDepth(depth + 3).Info(string(data))
			}
		}
	} else if l.toStderr {
		os.Stderr.Write(data)
	} else {
		if alsoToStderr || l.alsoToStderr || s >= l.stderrThreshold.get() {
			os.Stderr.Write(data)
		}

		if logging.logFile != "" {
			// Since we are using a single log file, all of the items in l.file array
			// will point to the same file, so just use one of them to write data.
			if l.file[severity.InfoLog] == nil {
				if err := l.createFiles(severity.InfoLog); err != nil {
					os.Stderr.Write(data) // Make sure the message appears somewhere.
					l.exit(err)
				}
			}
			l.file[severity.InfoLog].Write(data)
		} else {
			if l.file[s] == nil {
				if err := l.createFiles(s); err != nil {
					os.Stderr.Write(data) // Make sure the message appears somewhere.
					l.exit(err)
				}
			}

			if l.oneOutput {
				l.file[s].Write(data)
			} else {
				switch s {
				case severity.FatalLog:
					l.file[severity.FatalLog].Write(data)
					fallthrough
				case severity.ErrorLog:
					l.file[severity.ErrorLog].Write(data)
					fallthrough
				case severity.WarningLog:
					l.file[severity.WarningLog].Write(data)
					fallthrough
				case severity.InfoLog:
					l.file[severity.InfoLog].Write(data)
				}
			}
		}
	}
	if s == severity.FatalLog {
		// If we got here via Exit rather than Fatal, print no stacks.
		if atomic.LoadUint32(&fatalNoStacks) > 0 {
			l.mu.Unlock()
			isLocked = false
			timeoutFlush(ExitFlushTimeout)
			OsExit(1)
		}
		// Dump all goroutine stacks before exiting.
		// First, make sure we see the trace for the current goroutine on standard error.
		// If -logtostderr has been specified, the loop below will do that anyway
		// as the first stack in the full dump.
		if !l.toStderr {
			os.Stderr.Write(dbg.Stacks(false))
		}

		// Write the stack trace for all goroutines to the files.
		trace := dbg.Stacks(true)
		logExitFunc = func(error) {} // If we get a write error, we'll still exit below.
		for log := severity.FatalLog; log >= severity.InfoLog; log-- {
			if f := l.file[log]; f != nil { // Can be nil if -logtostderr is set.
				f.Write(trace)
			}
		}
		l.mu.Unlock()
		isLocked = false
		timeoutFlush(ExitFlushTimeout)
		OsExit(255) // C++ uses -1, which is silly because it's anded with 255 anyway.
	}
	buffer.PutBuffer(buf)

	if stats := severityStats[s]; stats != nil {
		atomic.AddInt64(&stats.lines, 1)
		atomic.AddInt64(&stats.bytes, int64(len(data)))
	}
}

// logExitFunc provides a simple mechanism to override the default behavior
// of exiting on error. Used in testing and to guarantee we reach a required exit
// for fatal logs. Instead, exit could be a function rather than a method but that
// would make its use clumsier.
var logExitFunc func(error)

// exit is called if there is trouble creating or writing log files.
// It flushes the logs and exits the program; there's no point in hanging around.
// l.mu is held.
func (l *loggingT) exit(err error) {
	fmt.Fprintf(os.Stderr, "log: exiting because of error: %s\n", err)
	// If logExitFunc is set, we do that instead of exiting.
	if logExitFunc != nil {
		logExitFunc(err)
		return
	}
	l.flushAll()
	OsExit(2)
}

// syncBuffer joins a bufio.Writer to its underlying file, providing access to the
// file's Sync method and providing a wrapper for the Write method that provides log
// file rotation. There are conflicting methods, so the file cannot be embedded.
// l.mu is held for all its methods.
type syncBuffer struct {
	logger *loggingT
	*bufio.Writer
	file     *os.File
	sev      severity.Severity
	nbytes   uint64 // The number of bytes written to this file
	maxbytes uint64 // The max number of bytes this syncBuffer.file can hold before cleaning up.
}

func (sb *syncBuffer) Sync() error {
	return sb.file.Sync()
}

// CalculateMaxSize returns the real max size in bytes after considering the default max size and the flag options.
func CalculateMaxSize() uint64 {
	if logging.logFile != "" {
		if logging.logFileMaxSizeMB == 0 {
			// If logFileMaxSizeMB is zero, we don't have limitations on the log size.
			return math.MaxUint64
		}
		// Flag logFileMaxSizeMB is in MB for user convenience.
		return logging.logFileMaxSizeMB * 1024 * 1024
	}
	// If "log_file" flag is not specified, the target file (sb.file) will be cleaned up when reaches a fixed size.
	return MaxSize
}

func (sb *syncBuffer) Write(p []byte) (n int, err error) {
	if sb.nbytes+uint64(len(p)) >= sb.maxbytes {
		if err := sb.rotateFile(time.Now(), false); err != nil {
			sb.logger.exit(err)
		}
	}
	n, err = sb.Writer.Write(p)
	sb.nbytes += uint64(n)
	if err != nil {
		sb.logger.exit(err)
	}
	return
}

// rotateFile closes the syncBuffer's file and starts a new one.
// The startup argument indicates whether this is the initial startup of klog.
// If startup is true, existing files are opened for appending instead of truncated.
func (sb *syncBuffer) rotateFile(now time.Time, startup bool) error {
	if sb.file != nil {
		sb.Flush()
		sb.file.Close()
	}
	var err error
	sb.file, _, err = create(severity.Name[sb.sev], now, startup)
	if err != nil {
		return err
	}
	if startup {
		fileInfo, err := sb.file.Stat()
		if err != nil {
			return fmt.Errorf("file stat could not get fileinfo: %v", err)
		}
		// init file size
		sb.nbytes = uint64(fileInfo.Size())
	} else {
		sb.nbytes = 0
	}
	sb.Writer = bufio.NewWriterSize(sb.file, bufferSize)

	if sb.logger.skipLogHeaders {
		return nil
	}

	// Write header.
	var buf bytes.Buffer
	fmt.Fprintf(&buf, "Log file created at: %s\n", now.Format("2006/01/02 15:04:05"))
	fmt.Fprintf(&buf, "Running on machine: %s\n", host)
	fmt.Fprintf(&buf, "Binary: Built with %s %s for %s/%s\n", runtime.Compiler, runtime.Version(), runtime.GOOS, runtime.GOARCH)
	fmt.Fprintf(&buf, "Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg\n")
	n, err := sb.file.Write(buf.Bytes())
	sb.nbytes += uint64(n)
	return err
}

// bufferSize sizes the buffer associated with each log file. It's large
// so that log records can accumulate without the logging thread blocking
// on disk I/O. The flushDaemon will block instead.
const bufferSize = 256 * 1024

// createFiles creates all the log files for severity from sev down to infoLog.
// l.mu is held.
func (l *loggingT) createFiles(sev severity.Severity) error {
	interval := l.flushInterval
	if interval == 0 {
		interval = flushInterval
	}
	l.flushD.run(interval)
	now := time.Now()
	// Files are created in decreasing severity order, so as soon as we find one
	// has already been created, we can stop.
	for s := sev; s >= severity.InfoLog && l.file[s] == nil; s-- {
		sb := &syncBuffer{
			logger:   l,
			sev:      s,
			maxbytes: CalculateMaxSize(),
		}
		if err := sb.rotateFile(now, true); err != nil {
			return err
		}
		l.file[s] = sb
	}
	return nil
}

const flushInterval = 5 * time.Second

// flushDaemon periodically flushes the log file buffers.
type flushDaemon struct {
	mu       sync.Mutex
	clock    clock.WithTicker
	flush    func()
	stopC    chan struct{}
	stopDone chan struct{}
}

// newFlushDaemon returns a new flushDaemon. If the passed clock is nil, a
// clock.RealClock is used.
func newFlushDaemon(flush func(), tickClock clock.WithTicker) *flushDaemon {
	if tickClock == nil {
		tickClock = clock.RealClock{}
	}
	return &flushDaemon{
		flush: flush,
		clock: tickClock,
	}
}

// run starts a goroutine that periodically calls the daemons flush function.
// Calling run on an already running daemon will have no effect.
func (f *flushDaemon) run(interval time.Duration) {
	f.mu.Lock()
	defer f.mu.Unlock()

	if f.stopC != nil { // daemon already running
		return
	}

	f.stopC = make(chan struct{}, 1)
	f.stopDone = make(chan struct{}, 1)

	ticker := f.clock.NewTicker(interval)
	go func() {
		defer ticker.Stop()
		defer func() { f.stopDone <- struct{}{} }()
		for {
			select {
			case <-ticker.C():
				f.flush()
			case <-f.stopC:
				f.flush()
				return
			}
		}
	}()
}

// stop stops the running flushDaemon and waits until the daemon has shut down.
// Calling stop on a daemon that isn't running will have no effect.
func (f *flushDaemon) stop() {
	f.mu.Lock()
	defer f.mu.Unlock()

	if f.stopC == nil { // daemon not running
		return
	}

	f.stopC <- struct{}{}
	<-f.stopDone

	f.stopC = nil
	f.stopDone = nil
}

// isRunning returns true if the flush daemon is running.
func (f *flushDaemon) isRunning() bool {
	f.mu.Lock()
	defer f.mu.Unlock()
	return f.stopC != nil
}

// StopFlushDaemon stops the flush daemon, if running, and flushes once.
// This prevents klog from leaking goroutines on shutdown. After stopping
// the daemon, you can still manually flush buffers again by calling Flush().
func StopFlushDaemon() {
	logging.flushD.stop()
}

// StartFlushDaemon ensures that the flush daemon runs with the given delay
// between flush calls. If it is already running, it gets restarted.
func StartFlushDaemon(interval time.Duration) {
	StopFlushDaemon()
	logging.flushD.run(interval)
}

// lockAndFlushAll is like flushAll but locks l.mu first.
func (l *loggingT) lockAndFlushAll() {
	l.mu.Lock()
	l.flushAll()
	l.mu.Unlock()
}

// flushAll flushes all the logs and attempts to "sync" their data to disk.
// l.mu is held.
func (l *loggingT) flushAll() {
	// Flush from fatal down, in case there's trouble flushing.
	for s := severity.FatalLog; s >= severity.InfoLog; s-- {
		file := l.file[s]
		if file != nil {
			file.Flush() // ignore error
			file.Sync()  // ignore error
		}
	}
	if logging.loggerOptions.flush != nil {
		logging.loggerOptions.flush()
	}
}

// CopyStandardLogTo arranges for messages written to the Go "log" package's
// default logs to also appear in the Google logs for the named and lower
// severities.  Subsequent changes to the standard log's default output location
// or format may break this behavior.
//
// Valid names are "INFO", "WARNING", "ERROR", and "FATAL".  If the name is not
// recognized, CopyStandardLogTo panics.
func CopyStandardLogTo(name string) {
	sev, ok := severity.ByName(name)
	if !ok {
		panic(fmt.Sprintf("log.CopyStandardLogTo(%q): unrecognized severity name", name))
	}
	// Set a log format that captures the user's file and line:
	//   d.go:23: message
	stdLog.SetFlags(stdLog.Lshortfile)
	stdLog.SetOutput(logBridge(sev))
}

// logBridge provides the Write method that enables CopyStandardLogTo to connect
// Go's standard logs to the logs provided by this package.
type logBridge severity.Severity

// Write parses the standard logging line and passes its components to the
// logger for severity(lb).
func (lb logBridge) Write(b []byte) (n int, err error) {
	var (
		file = "???"
		line = 1
		text string
	)
	// Split "d.go:23: message" into "d.go", "23", and "message".
	if parts := bytes.SplitN(b, []byte{':'}, 3); len(parts) != 3 || len(parts[0]) < 1 || len(parts[2]) < 1 {
		text = fmt.Sprintf("bad log format: %s", b)
	} else {
		file = string(parts[0])
		text = string(parts[2][1:]) // skip leading space
		line, err = strconv.Atoi(string(parts[1]))
		if err != nil {
			text = fmt.Sprintf("bad line number: %s", b)
			line = 1
		}
	}
	// printWithFileLine with alsoToStderr=true, so standard log messages
	// always appear on standard error.
	logging.printWithFileLine(severity.Severity(lb), logging.logger, logging.filter, file, line, true, text)
	return len(b), nil
}

// setV computes and remembers the V level for a given PC
// when vmodule is enabled.
// File pattern matching takes the basename of the file, stripped
// of its .go suffix, and uses filepath.Match, which is a little more
// general than the *? matching used in C++.
// l.mu is held.
func (l *loggingT) setV(pc uintptr) Level {
	fn := runtime.FuncForPC(pc)
	file, _ := fn.FileLine(pc)
	// The file is something like /a/b/c/d.go. We want just the d.
	if strings.HasSuffix(file, ".go") {
		file = file[:len(file)-3]
	}
	if slash := strings.LastIndex(file, "/"); slash >= 0 {
		file = file[slash+1:]
	}
	for _, filter := range l.vmodule.filter {
		if filter.match(file) {
			l.vmap[pc] = filter.level
			return filter.level
		}
	}
	l.vmap[pc] = 0
	return 0
}

// Verbose is a boolean type that implements Infof (like Printf) etc.
// See the documentation of V for more information.
type Verbose struct {
	enabled bool
	logger  *logWriter
}

func newVerbose(level Level, b bool) Verbose {
	if logging.logger == nil {
		return Verbose{b, nil}
	}
	v := logging.logger.V(int(level))
	return Verbose{b, &logWriter{Logger: v, writeKlogBuffer: logging.loggerOptions.writeKlogBuffer}}
}

// V reports whether verbosity at the call site is at least the requested level.
// The returned value is a struct of type Verbose, which implements Info, Infoln
// and Infof. These methods will write to the Info log if called.
// Thus, one may write either
//
//	if klog.V(2).Enabled() { klog.Info("log this") }
//
// or
//
//	klog.V(2).Info("log this")
//
// The second form is shorter but the first is cheaper if logging is off because it does
// not evaluate its arguments.
//
// Whether an individual call to V generates a log record depends on the setting of
// the -v and -vmodule flags; both are off by default. The V call will log if its level
// is less than or equal to the value of the -v flag, or alternatively if its level is
// less than or equal to the value of the -vmodule pattern matching the source file
// containing the call.
func V(level Level) Verbose {
	return VDepth(1, level)
}

// VDepth is a variant of V that accepts a number of stack frames that will be
// skipped when checking the -vmodule patterns. VDepth(0) is equivalent to
// V().
func VDepth(depth int, level Level) Verbose {
	// This function tries hard to be cheap unless there's work to do.
	// The fast path is two atomic loads and compares.

	// Here is a cheap but safe test to see if V logging is enabled globally.
	if logging.verbosity.get() >= level {
		return newVerbose(level, true)
	}

	// It's off globally but vmodule may still be set.
	// Here is another cheap but safe test to see if vmodule is enabled.
	if atomic.LoadInt32(&logging.filterLength) > 0 {
		// Now we need a proper lock to use the logging structure. The pcs field
		// is shared so we must lock before accessing it. This is fairly expensive,
		// but if V logging is enabled we're slow anyway.
		logging.mu.Lock()
		defer logging.mu.Unlock()
		if runtime.Callers(2+depth, logging.pcs[:]) == 0 {
			return newVerbose(level, false)
		}
		// runtime.Callers returns "return PCs", but we want
		// to look up the symbolic information for the call,
		// so subtract 1 from the PC. runtime.CallersFrames
		// would be cleaner, but allocates.
		pc := logging.pcs[0] - 1
		v, ok := logging.vmap[pc]
		if !ok {
			v = logging.setV(pc)
		}
		return newVerbose(level, v >= level)
	}
	return newVerbose(level, false)
}

// Enabled will return true if this log level is enabled, guarded by the value
// of v.
// See the documentation of V for usage.
func (v Verbose) Enabled() bool {
	return v.enabled
}

// Info is equivalent to the global Info function, guarded by the value of v.
// See the documentation of V for usage.
func (v Verbose) Info(args ...interface{}) {
	if v.enabled {
		logging.print(severity.InfoLog, v.logger, logging.filter, args...)
	}
}

// InfoDepth is equivalent to the global InfoDepth function, guarded by the value of v.
// See the documentation of V for usage.
func (v Verbose) InfoDepth(depth int, args ...interface{}) {
	if v.enabled {
		logging.printDepth(severity.InfoLog, v.logger, logging.filter, depth, args...)
	}
}

// Infoln is equivalent to the global Infoln function, guarded by the value of v.
// See the documentation of V for usage.
func (v Verbose) Infoln(args ...interface{}) {
	if v.enabled {
		logging.println(severity.InfoLog, v.logger, logging.filter, args...)
	}
}

// InfolnDepth is equivalent to the global InfolnDepth function, guarded by the value of v.
// See the documentation of V for usage.
func (v Verbose) InfolnDepth(depth int, args ...interface{}) {
	if v.enabled {
		logging.printlnDepth(severity.InfoLog, v.logger, logging.filter, depth, args...)
	}
}

// Infof is equivalent to the global Infof function, guarded by the value of v.
// See the documentation of V for usage.
func (v Verbose) Infof(format string, args ...interface{}) {
	if v.enabled {
		logging.printf(severity.InfoLog, v.logger, logging.filter, format, args...)
	}
}

// InfofDepth is equivalent to the global InfofDepth function, guarded by the value of v.
// See the documentation of V for usage.
func (v Verbose) InfofDepth(depth int, format string, args ...interface{}) {
	if v.enabled {
		logging.printfDepth(severity.InfoLog, v.logger, logging.filter, depth, format, args...)
	}
}

// InfoS is equivalent to the global InfoS function, guarded by the value of v.
// See the documentation of V for usage.
func (v Verbose) InfoS(msg string, keysAndValues ...interface{}) {
	if v.enabled {
		logging.infoS(v.logger, logging.filter, 0, msg, keysAndValues...)
	}
}

// InfoSDepth acts as InfoS but uses depth to determine which call frame to log.
// InfoSDepth(0, "msg") is the same as InfoS("msg").
func InfoSDepth(depth int, msg string, keysAndValues ...interface{}) {
	logging.infoS(logging.logger, logging.filter, depth, msg, keysAndValues...)
}

// InfoSDepth is equivalent to the global InfoSDepth function, guarded by the value of v.
// See the documentation of V for usage.
func (v Verbose) InfoSDepth(depth int, msg string, keysAndValues ...interface{}) {
	if v.enabled {
		logging.infoS(v.logger, logging.filter, depth, msg, keysAndValues...)
	}
}

// Deprecated: Use ErrorS instead.
func (v Verbose) Error(err error, msg string, args ...interface{}) {
	if v.enabled {
		logging.errorS(err, v.logger, logging.filter, 0, msg, args...)
	}
}

// ErrorS is equivalent to the global Error function, guarded by the value of v.
// See the documentation of V for usage.
func (v Verbose) ErrorS(err error, msg string, keysAndValues ...interface{}) {
	if v.enabled {
		logging.errorS(err, v.logger, logging.filter, 0, msg, keysAndValues...)
	}
}

// Info logs to the INFO log.
// Arguments are handled in the manner of fmt.Print; a newline is appended if missing.
func Info(args ...interface{}) {
	logging.print(severity.InfoLog, logging.logger, logging.filter, args...)
}

// InfoDepth acts as Info but uses depth to determine which call frame to log.
// InfoDepth(0, "msg") is the same as Info("msg").
func InfoDepth(depth int, args ...interface{}) {
	logging.printDepth(severity.InfoLog, logging.logger, logging.filter, depth, args...)
}

// Infoln logs to the INFO log.
// Arguments are handled in the manner of fmt.Println; a newline is always appended.
func Infoln(args ...interface{}) {
	logging.println(severity.InfoLog, logging.logger, logging.filter, args...)
}

// InfolnDepth acts as Infoln but uses depth to determine which call frame to log.
// InfolnDepth(0, "msg") is the same as Infoln("msg").
func InfolnDepth(depth int, args ...interface{}) {
	logging.printlnDepth(severity.InfoLog, logging.logger, logging.filter, depth, args...)
}

// Infof logs to the INFO log.
// Arguments are handled in the manner of fmt.Printf; a newline is appended if missing.
func Infof(format string, args ...interface{}) {
	logging.printf(severity.InfoLog, logging.logger, logging.filter, format, args...)
}

// InfofDepth acts as Infof but uses depth to determine which call frame to log.
// InfofDepth(0, "msg", args...) is the same as Infof("msg", args...).
func InfofDepth(depth int, format string, args ...interface{}) {
	logging.printfDepth(severity.InfoLog, logging.logger, logging.filter, depth, format, args...)
}

// InfoS structured logs to the INFO log.
// The msg argument used to add constant description to the log line.
// The key/value pairs would be join by "=" ; a newline is always appended.
//
// Basic examples:
// >> klog.InfoS("Pod status updated", "pod", "kubedns", "status", "ready")
// output:
// >> I1025 00:15:15.525108       1 controller_utils.go:116] "Pod status updated" pod="kubedns" status="ready"
func InfoS(msg string, keysAndValues ...interface{}) {
	logging.infoS(logging.logger, logging.filter, 0, msg, keysAndValues...)
}

// Warning logs to the WARNING and INFO logs.
// Arguments are handled in the manner of fmt.Print; a newline is appended if missing.
func Warning(args ...interface{}) {
	logging.print(severity.WarningLog, logging.logger, logging.filter, args...)
}

// WarningDepth acts as Warning but uses depth to determine which call frame to log.
// WarningDepth(0, "msg") is the same as Warning("msg").
func WarningDepth(depth int, args ...interface{}) {
	logging.printDepth(severity.WarningLog, logging.logger, logging.filter, depth, args...)
}

// Warningln logs to the WARNING and INFO logs.
// Arguments are handled in the manner of fmt.Println; a newline is always appended.
func Warningln(args ...interface{}) {
	logging.println(severity.WarningLog, logging.logger, logging.filter, args...)
}

// WarninglnDepth acts as Warningln but uses depth to determine which call frame to log.
// WarninglnDepth(0, "msg") is the same as Warningln("msg").
func WarninglnDepth(depth int, args ...interface{}) {
	logging.printlnDepth(severity.WarningLog, logging.logger, logging.filter, depth, args...)
}

// Warningf logs to the WARNING and INFO logs.
// Arguments are handled in the manner of fmt.Printf; a newline is appended if missing.
func Warningf(format string, args ...interface{}) {
	logging.printf(severity.WarningLog, logging.logger, logging.filter, format, args...)
}

// WarningfDepth acts as Warningf but uses depth to determine which call frame to log.
// WarningfDepth(0, "msg", args...) is the same as Warningf("msg", args...).
func WarningfDepth(depth int, format string, args ...interface{}) {
	logging.printfDepth(severity.WarningLog, logging.logger, logging.filter, depth, format, args...)
}

// Error logs to the ERROR, WARNING, and INFO logs.
// Arguments are handled in the manner of fmt.Print; a newline is appended if missing.
func Error(args ...interface{}) {
	logging.print(severity.ErrorLog, logging.logger, logging.filter, args...)
}

// ErrorDepth acts as Error but uses depth to determine which call frame to log.
// ErrorDepth(0, "msg") is the same as Error("msg").
func ErrorDepth(depth int, args ...interface{}) {
	logging.printDepth(severity.ErrorLog, logging.logger, logging.filter, depth, args...)
}

// Errorln logs to the ERROR, WARNING, and INFO logs.
// Arguments are handled in the manner of fmt.Println; a newline is always appended.
func Errorln(args ...interface{}) {
	logging.println(severity.ErrorLog, logging.logger, logging.filter, args...)
}

// ErrorlnDepth acts as Errorln but uses depth to determine which call frame to log.
// ErrorlnDepth(0, "msg") is the same as Errorln("msg").
func ErrorlnDepth(depth int, args ...interface{}) {
	logging.printlnDepth(severity.ErrorLog, logging.logger, logging.filter, depth, args...)
}

// Errorf logs to the ERROR, WARNING, and INFO logs.
// Arguments are handled in the manner of fmt.Printf; a newline is appended if missing.
func Errorf(format string, args ...interface{}) {
	logging.printf(severity.ErrorLog, logging.logger, logging.filter, format, args...)
}

// ErrorfDepth acts as Errorf but uses depth to determine which call frame to log.
// ErrorfDepth(0, "msg", args...) is the same as Errorf("msg", args...).
func ErrorfDepth(depth int, format string, args ...interface{}) {
	logging.printfDepth(severity.ErrorLog, logging.logger, logging.filter, depth, format, args...)
}

// ErrorS structured logs to the ERROR, WARNING, and INFO logs.
// the err argument used as "err" field of log line.
// The msg argument used to add constant description to the log line.
// The key/value pairs would be join by "=" ; a newline is always appended.
//
// Basic examples:
// >> klog.ErrorS(err, "Failed to update pod status")
// output:
// >> E1025 00:15:15.525108       1 controller_utils.go:114] "Failed to update pod status" err="timeout"
func ErrorS(err error, msg string, keysAndValues ...interface{}) {
	logging.errorS(err, logging.logger, logging.filter, 0, msg, keysAndValues...)
}

// ErrorSDepth acts as ErrorS but uses depth to determine which call frame to log.
// ErrorSDepth(0, "msg") is the same as ErrorS("msg").
func ErrorSDepth(depth int, err error, msg string, keysAndValues ...interface{}) {
	logging.errorS(err, logging.logger, logging.filter, depth, msg, keysAndValues...)
}

// Fatal logs to the FATAL, ERROR, WARNING, and INFO logs,
// prints stack trace(s), then calls OsExit(255).
//
// Stderr only receives a dump of the current goroutine's stack trace. Log files,
// if there are any, receive a dump of the stack traces in all goroutines.
//
// Callers who want more control over handling of fatal events may instead use a
// combination of different functions:
//   - some info or error logging function, optionally with a stack trace
//     value generated by github.com/go-logr/lib/dbg.Backtrace
//   - Flush to flush pending log data
//   - panic, os.Exit or returning to the caller with an error
//
// Arguments are handled in the manner of fmt.Print; a newline is appended if missing.
func Fatal(args ...interface{}) {
	logging.print(severity.FatalLog, logging.logger, logging.filter, args...)
}

// FatalDepth acts as Fatal but uses depth to determine which call frame to log.
// FatalDepth(0, "msg") is the same as Fatal("msg").
func FatalDepth(depth int, args ...interface{}) {
	logging.printDepth(severity.FatalLog, logging.logger, logging.filter, depth, args...)
}

// Fatalln logs to the FATAL, ERROR, WARNING, and INFO logs,
// including a stack trace of all running goroutines, then calls OsExit(255).
// Arguments are handled in the manner of fmt.Println; a newline is always appended.
func Fatalln(args ...interface{}) {
	logging.println(severity.FatalLog, logging.logger, logging.filter, args...)
}

// FatallnDepth acts as Fatalln but uses depth to determine which call frame to log.
// FatallnDepth(0, "msg") is the same as Fatalln("msg").
func FatallnDepth(depth int, args ...interface{}) {
	logging.printlnDepth(severity.FatalLog, logging.logger, logging.filter, depth, args...)
}

// Fatalf logs to the FATAL, ERROR, WARNING, and INFO logs,
// including a stack trace of all running goroutines, then calls OsExit(255).
// Arguments are handled in the manner of fmt.Printf; a newline is appended if missing.
func Fatalf(format string, args ...interface{}) {
	logging.printf(severity.FatalLog, logging.logger, logging.filter, format, args...)
}

// FatalfDepth acts as Fatalf but uses depth to determine which call frame to log.
// FatalfDepth(0, "msg", args...) is the same as Fatalf("msg", args...).
func FatalfDepth(depth int, format string, args ...interface{}) {
	logging.printfDepth(severity.FatalLog, logging.logger, logging.filter, depth, format, args...)
}

// fatalNoStacks is non-zero if we are to exit without dumping goroutine stacks.
// It allows Exit and relatives to use the Fatal logs.
var fatalNoStacks uint32

// Exit logs to the FATAL, ERROR, WARNING, and INFO logs, then calls OsExit(1).
// Arguments are handled in the manner of fmt.Print; a newline is appended if missing.
func Exit(args ...interface{}) {
	atomic.StoreUint32(&fatalNoStacks, 1)
	logging.print(severity.FatalLog, logging.logger, logging.filter, args...)
}

// ExitDepth acts as Exit but uses depth to determine which call frame to log.
// ExitDepth(0, "msg") is the same as Exit("msg").
func ExitDepth(depth int, args ...interface{}) {
	atomic.StoreUint32(&fatalNoStacks, 1)
	logging.printDepth(severity.FatalLog, logging.logger, logging.filter, depth, args...)
}

// Exitln logs to the FATAL, ERROR, WARNING, and INFO logs, then calls OsExit(1).
func Exitln(args ...interface{}) {
	atomic.StoreUint32(&fatalNoStacks, 1)
	logging.println(severity.FatalLog, logging.logger, logging.filter, args...)
}

// ExitlnDepth acts as Exitln but uses depth to determine which call frame to log.
// ExitlnDepth(0, "msg") is the same as Exitln("msg").
func ExitlnDepth(depth int, args ...interface{}) {
	atomic.StoreUint32(&fatalNoStacks, 1)
	logging.printlnDepth(severity.FatalLog, logging.logger, logging.filter, depth, args...)
}

// Exitf logs to the FATAL, ERROR, WARNING, and INFO logs, then calls OsExit(1).
// Arguments are handled in the manner of fmt.Printf; a newline is appended if missing.
func Exitf(format string, args ...interface{}) {
	atomic.StoreUint32(&fatalNoStacks, 1)
	logging.printf(severity.FatalLog, logging.logger, logging.filter, format, args...)
}

// ExitfDepth acts as Exitf but uses depth to determine which call frame to log.
// ExitfDepth(0, "msg", args...) is the same as Exitf("msg", args...).
func ExitfDepth(depth int, format string, args ...interface{}) {
	atomic.StoreUint32(&fatalNoStacks, 1)
	logging.printfDepth(severity.FatalLog, logging.logger, logging.filter, depth, format, args...)
}

// LogFilter is a collection of functions that can filter all logging calls,
// e.g. for sanitization of arguments and prevent accidental leaking of secrets.
type LogFilter interface {
	Filter(args []interface{}) []interface{}
	FilterF(format string, args []interface{}) (string, []interface{})
	FilterS(msg string, keysAndValues []interface{}) (string, []interface{})
}

// SetLogFilter installs a filter that is used for all log calls.
//
// Modifying the filter is not thread-safe and should be done while no other
// goroutines invoke log calls, usually during program initialization.
func SetLogFilter(filter LogFilter) {
	logging.filter = filter
}
 0707010000104C000081A4000000000000000000000001645E367C00000E6D000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/klog_file.go    // Go support for leveled logs, analogous to https://code.google.com/p/google-glog/
//
// Copyright 2013 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// File I/O for logs.

package klog

import (
	"errors"
	"fmt"
	"os"
	"path/filepath"
	"strings"
	"sync"
	"time"
)

// MaxSize is the maximum size of a log file in bytes.
var MaxSize uint64 = 1024 * 1024 * 1800

// logDirs lists the candidate directories for new log files.
var logDirs []string

func createLogDirs() {
	if logging.logDir != "" {
		logDirs = append(logDirs, logging.logDir)
	}
	logDirs = append(logDirs, os.TempDir())
}

var (
	pid          = os.Getpid()
	program      = filepath.Base(os.Args[0])
	host         = "unknownhost"
	userName     = "unknownuser"
	userNameOnce sync.Once
)

func init() {
	if h, err := os.Hostname(); err == nil {
		host = shortHostname(h)
	}
}

// shortHostname returns its argument, truncating at the first period.
// For instance, given "www.google.com" it returns "www".
func shortHostname(hostname string) string {
	if i := strings.Index(hostname, "."); i >= 0 {
		return hostname[:i]
	}
	return hostname
}

// logName returns a new log file name containing tag, with start time t, and
// the name for the symlink for tag.
func logName(tag string, t time.Time) (name, link string) {
	name = fmt.Sprintf("%s.%s.%s.log.%s.%04d%02d%02d-%02d%02d%02d.%d",
		program,
		host,
		getUserName(),
		tag,
		t.Year(),
		t.Month(),
		t.Day(),
		t.Hour(),
		t.Minute(),
		t.Second(),
		pid)
	return name, program + "." + tag
}

var onceLogDirs sync.Once

// create creates a new log file and returns the file and its filename, which
// contains tag ("INFO", "FATAL", etc.) and t.  If the file is created
// successfully, create also attempts to update the symlink for that tag, ignoring
// errors.
// The startup argument indicates whether this is the initial startup of klog.
// If startup is true, existing files are opened for appending instead of truncated.
func create(tag string, t time.Time, startup bool) (f *os.File, filename string, err error) {
	if logging.logFile != "" {
		f, err := openOrCreate(logging.logFile, startup)
		if err == nil {
			return f, logging.logFile, nil
		}
		return nil, "", fmt.Errorf("log: unable to create log: %v", err)
	}
	onceLogDirs.Do(createLogDirs)
	if len(logDirs) == 0 {
		return nil, "", errors.New("log: no log dirs")
	}
	name, link := logName(tag, t)
	var lastErr error
	for _, dir := range logDirs {
		fname := filepath.Join(dir, name)
		f, err := openOrCreate(fname, startup)
		if err == nil {
			symlink := filepath.Join(dir, link)
			os.Remove(symlink)        // ignore err
			os.Symlink(name, symlink) // ignore err
			return f, fname, nil
		}
		lastErr = err
	}
	return nil, "", fmt.Errorf("log: cannot create log: %v", lastErr)
}

// The startup argument indicates whether this is the initial startup of klog.
// If startup is true, existing files are opened for appending instead of truncated.
func openOrCreate(name string, startup bool) (*os.File, error) {
	if startup {
		f, err := os.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
		return f, err
	}
	f, err := os.Create(name)
	return f, err
}
   0707010000104D000081A4000000000000000000000001645E367C000000F1000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/klog_file_others.go //go:build !windows
// +build !windows

package klog

import (
	"os/user"
)

func getUserName() string {
	userNameOnce.Do(func() {
		current, err := user.Current()
		if err == nil {
			userName = current.Username
		}
	})

	return userName
}
   0707010000104E000081A4000000000000000000000001645E367C000002CD000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/klog_file_windows.go    //go:build windows
// +build windows

package klog

import (
	"os"
	"strings"
)

func getUserName() string {
	userNameOnce.Do(func() {
		// On Windows, the Go 'user' package requires netapi32.dll.
		// This affects Windows Nano Server:
		//   https://github.com/golang/go/issues/21867
		// Fallback to using environment variables.
		u := os.Getenv("USERNAME")
		if len(u) == 0 {
			return
		}
		// Sanitize the USERNAME since it may contain filepath separators.
		u = strings.Replace(u, `\`, "_", -1)

		// user.Current().Username normally produces something like 'USERDOMAIN\USERNAME'
		d := os.Getenv("USERDOMAIN")
		if len(d) != 0 {
			userName = d + "_" + u
		} else {
			userName = u
		}
	})

	return userName
}
   0707010000104F000081A4000000000000000000000001645E367C00000A1E000000000000000000000000000000000000003300000000elemental-cli-0.3.1/vendor/k8s.io/klog/v2/klogr.go    /*
Copyright 2021 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package klog

import (
	"github.com/go-logr/logr"

	"k8s.io/klog/v2/internal/serialize"
)

// NewKlogr returns a logger that is functionally identical to
// klogr.NewWithOptions(klogr.FormatKlog), i.e. it passes through to klog. The
// difference is that it uses a simpler implementation.
func NewKlogr() Logger {
	return New(&klogger{})
}

// klogger is a subset of klogr/klogr.go. It had to be copied to break an
// import cycle (klogr wants to use klog, and klog wants to use klogr).
type klogger struct {
	level     int
	callDepth int
	prefix    string
	values    []interface{}
}

func (l *klogger) Init(info logr.RuntimeInfo) {
	l.callDepth += info.CallDepth
}

func (l *klogger) Info(level int, msg string, kvList ...interface{}) {
	merged := serialize.MergeKVs(l.values, kvList)
	if l.prefix != "" {
		msg = l.prefix + ": " + msg
	}
	// Skip this function.
	VDepth(l.callDepth+1, Level(level)).InfoSDepth(l.callDepth+1, msg, merged...)
}

func (l *klogger) Enabled(level int) bool {
	// Skip this function and logr.Logger.Info where Enabled is called.
	return VDepth(l.callDepth+2, Level(level)).Enabled()
}

func (l *klogger) Error(err error, msg string, kvList ...interface{}) {
	merged := serialize.MergeKVs(l.values, kvList)
	if l.prefix != "" {
		msg = l.prefix + ": " + msg
	}
	ErrorSDepth(l.callDepth+1, err, msg, merged...)
}

// WithName returns a new logr.Logger with the specified name appended.  klogr
// uses '/' characters to separate name elements.  Callers should not pass '/'
// in the provided name string, but this library does not actually enforce that.
func (l klogger) WithName(name string) logr.LogSink {
	if len(l.prefix) > 0 {
		l.prefix = l.prefix + "/"
	}
	l.prefix += name
	return &l
}

func (l klogger) WithValues(kvList ...interface{}) logr.LogSink {
	l.values = serialize.WithValues(l.values, kvList)
	return &l
}

func (l klogger) WithCallDepth(depth int) logr.LogSink {
	l.callDepth += depth
	return &l
}

var _ logr.LogSink = &klogger{}
var _ logr.CallDepthLogSink = &klogger{}
  07070100001050000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000002E00000000elemental-cli-0.3.1/vendor/k8s.io/mount-utils 07070100001051000081A4000000000000000000000001645E367C00002C5D000000000000000000000000000000000000003600000000elemental-cli-0.3.1/vendor/k8s.io/mount-utils/LICENSE                                  Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "{}"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright {yyyy} {name of copyright owner}

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
   07070100001052000081A4000000000000000000000001645E367C000000D6000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/k8s.io/mount-utils/OWNERS  # See the OWNERS docs at https://go.k8s.io/owners

reviewers:
  - jingxu97
  - saad-ali
  - jsafrane
  - msau42
  - andyzhangx
  - gnufied
approvers:
  - jingxu97
  - saad-ali
  - jsafrane

labels:
  - sig/storage
  07070100001053000081A4000000000000000000000001645E367C00000414000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/k8s.io/mount-utils/README.md   ## Purpose

This repository defines an interface to mounting filesystems to be consumed by 
various Kubernetes and out-of-tree CSI components. 

Consumers of this repository can make use of functions like 'Mount' to mount 
source to target as fstype with given options, 'Unmount' to unmount a target.
Other useful functions include 'List' all mounted file systems and find all
mount references to a path using 'GetMountRefs'

## Community, discussion, contribution, and support

Learn how to engage with the Kubernetes community on the [community
page](http://kubernetes.io/community/).

You can reach the maintainers of this repository at:

- Slack: #sig-storage (on https://kubernetes.slack.com -- get an
  invite at slack.kubernetes.io)
- Mailing List:
  https://groups.google.com/forum/#!forum/kubernetes-sig-storage

### Code of Conduct

Participation in the Kubernetes community is governed by the [Kubernetes
Code of Conduct](code-of-conduct.md).

### Contibution Guidelines

See [CONTRIBUTING.md](CONTRIBUTING.md) for more information.
07070100001054000081A4000000000000000000000001645E367C0000023C000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/k8s.io/mount-utils/SECURITY_CONTACTS   # Defined below are the security contacts for this repo.
#
# They are the contact point for the Product Security Committee to reach out
# to for triaging and handling of incoming issues.
#
# The below names agree to abide by the
# [Embargo Policy](https://git.k8s.io/security/private-distributors-list.md#embargo-policy)
# and will be removed and replaced if they violate that agreement.
#
# DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE
# INSTRUCTIONS AT https://kubernetes.io/security/

saad-ali
cjcullen
joelsmith
liggitt
philips
tallclair
07070100001055000081A4000000000000000000000001645E367C00000094000000000000000000000000000000000000004100000000elemental-cli-0.3.1/vendor/k8s.io/mount-utils/code-of-conduct.md  # Kubernetes Community Code of Conduct

Please refer to our [Kubernetes Community Code of Conduct](https://git.k8s.io/community/code-of-conduct.md)
07070100001056000081A4000000000000000000000001645E367C000002A7000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/k8s.io/mount-utils/doc.go  /*
Copyright 2014 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

// Package mount defines an interface to mounting filesystems.
package mount // import "k8s.io/mount-utils"
 07070100001057000081A4000000000000000000000001645E367C00001BCA000000000000000000000000000000000000003E00000000elemental-cli-0.3.1/vendor/k8s.io/mount-utils/fake_mounter.go /*
Copyright 2015 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package mount

import (
	"os"
	"path/filepath"
	"sync"

	"k8s.io/klog/v2"
)

// FakeMounter implements mount.Interface for tests.
type FakeMounter struct {
	MountPoints []MountPoint
	log         []FakeAction
	// Error to return for a path when calling IsLikelyNotMountPoint
	MountCheckErrors map[string]error
	// Some tests run things in parallel, make sure the mounter does not produce
	// any golang's DATA RACE warnings.
	mutex       sync.Mutex
	UnmountFunc UnmountFunc
}

// UnmountFunc is a function callback to be executed during the Unmount() call.
type UnmountFunc func(path string) error

var _ Interface = &FakeMounter{}

const (
	// FakeActionMount is the string for specifying mount as FakeAction.Action
	FakeActionMount = "mount"
	// FakeActionUnmount is the string for specifying unmount as FakeAction.Action
	FakeActionUnmount = "unmount"
)

// FakeAction objects are logged every time a fake mount or unmount is called.
type FakeAction struct {
	Action string // "mount" or "unmount"
	Target string // applies to both mount and unmount actions
	Source string // applies only to "mount" actions
	FSType string // applies only to "mount" actions
}

// NewFakeMounter returns a FakeMounter struct that implements Interface and is
// suitable for testing purposes.
func NewFakeMounter(mps []MountPoint) *FakeMounter {
	return &FakeMounter{
		MountPoints: mps,
	}
}

// ResetLog clears all the log entries in FakeMounter
func (f *FakeMounter) ResetLog() {
	f.mutex.Lock()
	defer f.mutex.Unlock()

	f.log = []FakeAction{}
}

// GetLog returns the slice of FakeActions taken by the mounter
func (f *FakeMounter) GetLog() []FakeAction {
	f.mutex.Lock()
	defer f.mutex.Unlock()

	return f.log
}

// Mount records the mount event and updates the in-memory mount points for FakeMounter
func (f *FakeMounter) Mount(source string, target string, fstype string, options []string) error {
	return f.MountSensitive(source, target, fstype, options, nil /* sensitiveOptions */)
}

// Mount records the mount event and updates the in-memory mount points for FakeMounter
// sensitiveOptions to be passed in a separate parameter from the normal
// mount options and ensures the sensitiveOptions are never logged. This
// method should be used by callers that pass sensitive material (like
// passwords) as mount options.
func (f *FakeMounter) MountSensitive(source string, target string, fstype string, options []string, sensitiveOptions []string) error {
	f.mutex.Lock()
	defer f.mutex.Unlock()

	opts := []string{}

	for _, option := range options {
		// find 'bind' option
		if option == "bind" {
			// This is a bind-mount. In order to mimic linux behaviour, we must
			// use the original device of the bind-mount as the real source.
			// E.g. when mounted /dev/sda like this:
			//      $ mount /dev/sda /mnt/test
			//      $ mount -o bind /mnt/test /mnt/bound
			// then /proc/mount contains:
			// /dev/sda /mnt/test
			// /dev/sda /mnt/bound
			// (and not /mnt/test /mnt/bound)
			// I.e. we must use /dev/sda as source instead of /mnt/test in the
			// bind mount.
			for _, mnt := range f.MountPoints {
				if source == mnt.Path {
					source = mnt.Device
					break
				}
			}
		}
		// reuse MountPoint.Opts field to mark mount as readonly
		opts = append(opts, option)
	}

	// If target is a symlink, get its absolute path
	absTarget, err := filepath.EvalSymlinks(target)
	if err != nil {
		absTarget = target
	}
	f.MountPoints = append(f.MountPoints, MountPoint{Device: source, Path: absTarget, Type: fstype, Opts: append(opts, sensitiveOptions...)})
	klog.V(5).Infof("Fake mounter: mounted %s to %s", source, absTarget)
	f.log = append(f.log, FakeAction{Action: FakeActionMount, Target: absTarget, Source: source, FSType: fstype})
	return nil
}

func (f *FakeMounter) MountSensitiveWithoutSystemd(source string, target string, fstype string, options []string, sensitiveOptions []string) error {
	return f.MountSensitive(source, target, fstype, options, nil /* sensitiveOptions */)
}

func (f *FakeMounter) MountSensitiveWithoutSystemdWithMountFlags(source string, target string, fstype string, options []string, sensitiveOptions []string, mountFlags []string) error {
	return f.MountSensitive(source, target, fstype, options, nil /* sensitiveOptions */)
}

// Unmount records the unmount event and updates the in-memory mount points for FakeMounter
func (f *FakeMounter) Unmount(target string) error {
	f.mutex.Lock()
	defer f.mutex.Unlock()

	// If target is a symlink, get its absolute path
	absTarget, err := filepath.EvalSymlinks(target)
	if err != nil {
		absTarget = target
	}

	newMountpoints := []MountPoint{}
	for _, mp := range f.MountPoints {
		if mp.Path == absTarget {
			if f.UnmountFunc != nil {
				err := f.UnmountFunc(absTarget)
				if err != nil {
					return err
				}
			}
			klog.V(5).Infof("Fake mounter: unmounted %s from %s", mp.Device, absTarget)
			// Don't copy it to newMountpoints
			continue
		}
		newMountpoints = append(newMountpoints, MountPoint{Device: mp.Device, Path: mp.Path, Type: mp.Type})
	}
	f.MountPoints = newMountpoints
	f.log = append(f.log, FakeAction{Action: FakeActionUnmount, Target: absTarget})
	delete(f.MountCheckErrors, target)
	return nil
}

// List returns all the in-memory mountpoints for FakeMounter
func (f *FakeMounter) List() ([]MountPoint, error) {
	f.mutex.Lock()
	defer f.mutex.Unlock()

	return f.MountPoints, nil
}

// IsLikelyNotMountPoint determines whether a path is a mountpoint by checking
// if the absolute path to file is in the in-memory mountpoints
func (f *FakeMounter) IsLikelyNotMountPoint(file string) (bool, error) {
	f.mutex.Lock()
	defer f.mutex.Unlock()

	err := f.MountCheckErrors[file]
	if err != nil {
		return false, err
	}

	_, err = os.Stat(file)
	if err != nil {
		return true, err
	}

	// If file is a symlink, get its absolute path
	absFile, err := filepath.EvalSymlinks(file)
	if err != nil {
		absFile = file
	}

	for _, mp := range f.MountPoints {
		if mp.Path == absFile {
			klog.V(5).Infof("isLikelyNotMountPoint for %s: mounted %s, false", file, mp.Path)
			return false, nil
		}
	}
	klog.V(5).Infof("isLikelyNotMountPoint for %s: true", file)
	return true, nil
}

// GetMountRefs finds all mount references to the path, returns a
// list of paths.
func (f *FakeMounter) GetMountRefs(pathname string) ([]string, error) {
	realpath, err := filepath.EvalSymlinks(pathname)
	if err != nil {
		// Ignore error in FakeMounter, because we actually didn't create files.
		realpath = pathname
	}
	return getMountRefsByDev(f, realpath)
}
  07070100001058000081A4000000000000000000000001645E367C00003450000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/k8s.io/mount-utils/mount.go    /*
Copyright 2014 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

// TODO(thockin): This whole pkg is pretty linux-centric.  As soon as we have
// an alternate platform, we will need to abstract further.

package mount

import (
	"fmt"
	"os"
	"path/filepath"
	"strings"
	"time"

	utilexec "k8s.io/utils/exec"
)

const (
	// Default mount command if mounter path is not specified.
	defaultMountCommand = "mount"
	// Log message where sensitive mount options were removed
	sensitiveOptionsRemoved = "<masked>"
)

// Interface defines the set of methods to allow for mount operations on a system.
type Interface interface {
	// Mount mounts source to target as fstype with given options.
	// options MUST not contain sensitive material (like passwords).
	Mount(source string, target string, fstype string, options []string) error
	// MountSensitive is the same as Mount() but this method allows
	// sensitiveOptions to be passed in a separate parameter from the normal
	// mount options and ensures the sensitiveOptions are never logged. This
	// method should be used by callers that pass sensitive material (like
	// passwords) as mount options.
	MountSensitive(source string, target string, fstype string, options []string, sensitiveOptions []string) error
	// MountSensitiveWithoutSystemd is the same as MountSensitive() but this method disable using systemd mount.
	MountSensitiveWithoutSystemd(source string, target string, fstype string, options []string, sensitiveOptions []string) error
	// MountSensitiveWithoutSystemdWithMountFlags is the same as MountSensitiveWithoutSystemd() with additional mount flags
	MountSensitiveWithoutSystemdWithMountFlags(source string, target string, fstype string, options []string, sensitiveOptions []string, mountFlags []string) error
	// Unmount unmounts given target.
	Unmount(target string) error
	// List returns a list of all mounted filesystems.  This can be large.
	// On some platforms, reading mounts directly from the OS is not guaranteed
	// consistent (i.e. it could change between chunked reads). This is guaranteed
	// to be consistent.
	List() ([]MountPoint, error)
	// IsLikelyNotMountPoint uses heuristics to determine if a directory
	// is not a mountpoint.
	// It should return ErrNotExist when the directory does not exist.
	// IsLikelyNotMountPoint does NOT properly detect all mountpoint types
	// most notably linux bind mounts and symbolic link. For callers that do not
	// care about such situations, this is a faster alternative to calling List()
	// and scanning that output.
	IsLikelyNotMountPoint(file string) (bool, error)
	// GetMountRefs finds all mount references to pathname, returning a slice of
	// paths. Pathname can be a mountpoint path or a normal	directory
	// (for bind mount). On Linux, pathname is excluded from the slice.
	// For example, if /dev/sdc was mounted at /path/a and /path/b,
	// GetMountRefs("/path/a") would return ["/path/b"]
	// GetMountRefs("/path/b") would return ["/path/a"]
	// On Windows there is no way to query all mount points; as long as pathname is
	// a valid mount, it will be returned.
	GetMountRefs(pathname string) ([]string, error)
}

// Compile-time check to ensure all Mounter implementations satisfy
// the mount interface.
var _ Interface = &Mounter{}

type MounterForceUnmounter interface {
	Interface
	// UnmountWithForce unmounts given target but will retry unmounting with force option
	// after given timeout.
	UnmountWithForce(target string, umountTimeout time.Duration) error
}

// MountPoint represents a single line in /proc/mounts or /etc/fstab.
type MountPoint struct { // nolint: golint
	Device string
	Path   string
	Type   string
	Opts   []string // Opts may contain sensitive mount options (like passwords) and MUST be treated as such (e.g. not logged).
	Freq   int
	Pass   int
}

type MountErrorType string // nolint: golint

const (
	FilesystemMismatch  MountErrorType = "FilesystemMismatch"
	HasFilesystemErrors MountErrorType = "HasFilesystemErrors"
	UnformattedReadOnly MountErrorType = "UnformattedReadOnly"
	FormatFailed        MountErrorType = "FormatFailed"
	GetDiskFormatFailed MountErrorType = "GetDiskFormatFailed"
	UnknownMountError   MountErrorType = "UnknownMountError"
)

type MountError struct { // nolint: golint
	Type    MountErrorType
	Message string
}

func (mountError MountError) String() string {
	return mountError.Message
}

func (mountError MountError) Error() string {
	return mountError.Message
}

func NewMountError(mountErrorValue MountErrorType, format string, args ...interface{}) error {
	mountError := MountError{
		Type:    mountErrorValue,
		Message: fmt.Sprintf(format, args...),
	}
	return mountError
}

// SafeFormatAndMount probes a device to see if it is formatted.
// Namely it checks to see if a file system is present. If so it
// mounts it otherwise the device is formatted first then mounted.
type SafeFormatAndMount struct {
	Interface
	Exec utilexec.Interface
}

// FormatAndMount formats the given disk, if needed, and mounts it.
// That is if the disk is not formatted and it is not being mounted as
// read-only it will format it first then mount it. Otherwise, if the
// disk is already formatted or it is being mounted as read-only, it
// will be mounted without formatting.
// options MUST not contain sensitive material (like passwords).
func (mounter *SafeFormatAndMount) FormatAndMount(source string, target string, fstype string, options []string) error {
	return mounter.FormatAndMountSensitive(source, target, fstype, options, nil /* sensitiveOptions */)
}

// FormatAndMountSensitive is the same as FormatAndMount but this method allows
// sensitiveOptions to be passed in a separate parameter from the normal mount
// options and ensures the sensitiveOptions are never logged. This method should
// be used by callers that pass sensitive material (like passwords) as mount
// options.
func (mounter *SafeFormatAndMount) FormatAndMountSensitive(source string, target string, fstype string, options []string, sensitiveOptions []string) error {
	return mounter.formatAndMountSensitive(source, target, fstype, options, sensitiveOptions)
}

// getMountRefsByDev finds all references to the device provided
// by mountPath; returns a list of paths.
// Note that mountPath should be path after the evaluation of any symblolic links.
func getMountRefsByDev(mounter Interface, mountPath string) ([]string, error) {
	mps, err := mounter.List()
	if err != nil {
		return nil, err
	}

	// Finding the device mounted to mountPath.
	diskDev := ""
	for i := range mps {
		if mountPath == mps[i].Path {
			diskDev = mps[i].Device
			break
		}
	}

	// Find all references to the device.
	var refs []string
	for i := range mps {
		if mps[i].Device == diskDev || mps[i].Device == mountPath {
			if mps[i].Path != mountPath {
				refs = append(refs, mps[i].Path)
			}
		}
	}
	return refs, nil
}

// GetDeviceNameFromMount given a mnt point, find the device from /proc/mounts
// returns the device name, reference count, and error code.
func GetDeviceNameFromMount(mounter Interface, mountPath string) (string, int, error) {
	mps, err := mounter.List()
	if err != nil {
		return "", 0, err
	}

	// Find the device name.
	// FIXME if multiple devices mounted on the same mount path, only the first one is returned.
	device := ""
	// If mountPath is symlink, need get its target path.
	slTarget, err := filepath.EvalSymlinks(mountPath)
	if err != nil {
		slTarget = mountPath
	}
	for i := range mps {
		if mps[i].Path == slTarget {
			device = mps[i].Device
			break
		}
	}

	// Find all references to the device.
	refCount := 0
	for i := range mps {
		if mps[i].Device == device {
			refCount++
		}
	}
	return device, refCount, nil
}

// IsNotMountPoint determines if a directory is a mountpoint.
// It should return ErrNotExist when the directory does not exist.
// IsNotMountPoint is more expensive than IsLikelyNotMountPoint.
// IsNotMountPoint detects bind mounts in linux.
// IsNotMountPoint enumerates all the mountpoints using List() and
// the list of mountpoints may be large, then it uses
// isMountPointMatch to evaluate whether the directory is a mountpoint.
func IsNotMountPoint(mounter Interface, file string) (bool, error) {
	// IsLikelyNotMountPoint provides a quick check
	// to determine whether file IS A mountpoint.
	notMnt, notMntErr := mounter.IsLikelyNotMountPoint(file)
	if notMntErr != nil && os.IsPermission(notMntErr) {
		// We were not allowed to do the simple stat() check, e.g. on NFS with
		// root_squash. Fall back to /proc/mounts check below.
		notMnt = true
		notMntErr = nil
	}
	if notMntErr != nil {
		return notMnt, notMntErr
	}
	// identified as mountpoint, so return this fact.
	if notMnt == false {
		return notMnt, nil
	}

	// Resolve any symlinks in file, kernel would do the same and use the resolved path in /proc/mounts.
	resolvedFile, err := filepath.EvalSymlinks(file)
	if err != nil {
		return true, err
	}

	// check all mountpoints since IsLikelyNotMountPoint
	// is not reliable for some mountpoint types.
	mountPoints, mountPointsErr := mounter.List()
	if mountPointsErr != nil {
		return notMnt, mountPointsErr
	}
	for _, mp := range mountPoints {
		if isMountPointMatch(mp, resolvedFile) {
			notMnt = false
			break
		}
	}
	return notMnt, nil
}

// MakeBindOpts detects whether a bind mount is being requested and makes the remount options to
// use in case of bind mount, due to the fact that bind mount doesn't respect mount options.
// The list equals:
//   options - 'bind' + 'remount' (no duplicate)
func MakeBindOpts(options []string) (bool, []string, []string) {
	bind, bindOpts, bindRemountOpts, _ := MakeBindOptsSensitive(options, nil /* sensitiveOptions */)
	return bind, bindOpts, bindRemountOpts
}

// MakeBindOptsSensitive is the same as MakeBindOpts but this method allows
// sensitiveOptions to be passed in a separate parameter from the normal mount
// options and ensures the sensitiveOptions are never logged. This method should
// be used by callers that pass sensitive material (like passwords) as mount
// options.
func MakeBindOptsSensitive(options []string, sensitiveOptions []string) (bool, []string, []string, []string) {
	// Because we have an FD opened on the subpath bind mount, the "bind" option
	// needs to be included, otherwise the mount target will error as busy if you
	// remount as readonly.
	//
	// As a consequence, all read only bind mounts will no longer change the underlying
	// volume mount to be read only.
	bindRemountOpts := []string{"bind", "remount"}
	bindRemountSensitiveOpts := []string{}
	bind := false
	bindOpts := []string{"bind"}

	// _netdev is a userspace mount option and does not automatically get added when
	// bind mount is created and hence we must carry it over.
	if checkForNetDev(options, sensitiveOptions) {
		bindOpts = append(bindOpts, "_netdev")
	}

	for _, option := range options {
		switch option {
		case "bind":
			bind = true
		case "remount":
		default:
			bindRemountOpts = append(bindRemountOpts, option)
		}
	}

	for _, sensitiveOption := range sensitiveOptions {
		switch sensitiveOption {
		case "bind":
			bind = true
		case "remount":
		default:
			bindRemountSensitiveOpts = append(bindRemountSensitiveOpts, sensitiveOption)
		}
	}

	return bind, bindOpts, bindRemountOpts, bindRemountSensitiveOpts
}

func checkForNetDev(options []string, sensitiveOptions []string) bool {
	for _, option := range options {
		if option == "_netdev" {
			return true
		}
	}
	for _, sensitiveOption := range sensitiveOptions {
		if sensitiveOption == "_netdev" {
			return true
		}
	}
	return false
}

// PathWithinBase checks if give path is within given base directory.
func PathWithinBase(fullPath, basePath string) bool {
	rel, err := filepath.Rel(basePath, fullPath)
	if err != nil {
		return false
	}
	if StartsWithBackstep(rel) {
		// Needed to escape the base path.
		return false
	}
	return true
}

// StartsWithBackstep checks if the given path starts with a backstep segment.
func StartsWithBackstep(rel string) bool {
	// normalize to / and check for ../
	return rel == ".." || strings.HasPrefix(filepath.ToSlash(rel), "../")
}

// sanitizedOptionsForLogging will return a comma separated string containing
// options and sensitiveOptions. Each entry in sensitiveOptions will be
// replaced with the string sensitiveOptionsRemoved
// e.g. o1,o2,<masked>,<masked>
func sanitizedOptionsForLogging(options []string, sensitiveOptions []string) string {
	separator := ""
	if len(options) > 0 && len(sensitiveOptions) > 0 {
		separator = ","
	}

	sensitiveOptionsStart := ""
	sensitiveOptionsEnd := ""
	if len(sensitiveOptions) > 0 {
		sensitiveOptionsStart = strings.Repeat(sensitiveOptionsRemoved+",", len(sensitiveOptions)-1)
		sensitiveOptionsEnd = sensitiveOptionsRemoved
	}

	return strings.Join(options, ",") +
		separator +
		sensitiveOptionsStart +
		sensitiveOptionsEnd
}
07070100001059000081A4000000000000000000000001645E367C000013C1000000000000000000000000000000000000004500000000elemental-cli-0.3.1/vendor/k8s.io/mount-utils/mount_helper_common.go  /*
Copyright 2018 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package mount

import (
	"fmt"
	"os"
	"time"

	"k8s.io/klog/v2"
)

// CleanupMountPoint unmounts the given path and deletes the remaining directory
// if successful. If extensiveMountPointCheck is true IsNotMountPoint will be
// called instead of IsLikelyNotMountPoint. IsNotMountPoint is more expensive
// but properly handles bind mounts within the same fs.
func CleanupMountPoint(mountPath string, mounter Interface, extensiveMountPointCheck bool) error {
	pathExists, pathErr := PathExists(mountPath)
	if !pathExists && pathErr == nil {
		klog.Warningf("Warning: Unmount skipped because path does not exist: %v", mountPath)
		return nil
	}
	corruptedMnt := IsCorruptedMnt(pathErr)
	if pathErr != nil && !corruptedMnt {
		return fmt.Errorf("Error checking path: %v", pathErr)
	}
	return doCleanupMountPoint(mountPath, mounter, extensiveMountPointCheck, corruptedMnt)
}

func CleanupMountWithForce(mountPath string, mounter MounterForceUnmounter, extensiveMountPointCheck bool, umountTimeout time.Duration) error {
	pathExists, pathErr := PathExists(mountPath)
	if !pathExists && pathErr == nil {
		klog.Warningf("Warning: Unmount skipped because path does not exist: %v", mountPath)
		return nil
	}
	corruptedMnt := IsCorruptedMnt(pathErr)
	if pathErr != nil && !corruptedMnt {
		return fmt.Errorf("Error checking path: %v", pathErr)
	}
	var notMnt bool
	var err error
	if !corruptedMnt {
		notMnt, err = removePathIfNotMountPoint(mountPath, mounter, extensiveMountPointCheck)
		// if mountPath was not a mount point - we would have attempted to remove mountPath
		// and hence return errors if any.
		if err != nil || notMnt {
			return err
		}
	}

	// Unmount the mount path
	klog.V(4).Infof("%q is a mountpoint, unmounting", mountPath)
	if err := mounter.UnmountWithForce(mountPath, umountTimeout); err != nil {
		return err
	}

	notMnt, err = removePathIfNotMountPoint(mountPath, mounter, extensiveMountPointCheck)
	// mountPath is not a mount point we should return whatever error we saw
	if notMnt {
		return err
	}
	return fmt.Errorf("Failed to unmount path %v", mountPath)
}

// doCleanupMountPoint unmounts the given path and
// deletes the remaining directory if successful.
// if extensiveMountPointCheck is true
// IsNotMountPoint will be called instead of IsLikelyNotMountPoint.
// IsNotMountPoint is more expensive but properly handles bind mounts within the same fs.
// if corruptedMnt is true, it means that the mountPath is a corrupted mountpoint, and the mount point check
// will be skipped
func doCleanupMountPoint(mountPath string, mounter Interface, extensiveMountPointCheck bool, corruptedMnt bool) error {
	var notMnt bool
	var err error
	if !corruptedMnt {
		notMnt, err = removePathIfNotMountPoint(mountPath, mounter, extensiveMountPointCheck)
		// if mountPath was not a mount point - we would have attempted to remove mountPath
		// and hence return errors if any.
		if err != nil || notMnt {
			return err
		}
	}

	// Unmount the mount path
	klog.V(4).Infof("%q is a mountpoint, unmounting", mountPath)
	if err := mounter.Unmount(mountPath); err != nil {
		return err
	}

	notMnt, err = removePathIfNotMountPoint(mountPath, mounter, extensiveMountPointCheck)
	// mountPath is not a mount point we should return whatever error we saw
	if notMnt {
		return err
	}
	return fmt.Errorf("Failed to unmount path %v", mountPath)
}

// removePathIfNotMountPoint verifies if given mountPath is a mount point if not it attempts
// to remove the directory. Returns true and nil if directory was not a mount point and removed.
func removePathIfNotMountPoint(mountPath string, mounter Interface, extensiveMountPointCheck bool) (bool, error) {
	var notMnt bool
	var err error

	if extensiveMountPointCheck {
		notMnt, err = IsNotMountPoint(mounter, mountPath)
	} else {
		notMnt, err = mounter.IsLikelyNotMountPoint(mountPath)
	}

	if err != nil {
		if os.IsNotExist(err) {
			klog.V(4).Infof("%q does not exist", mountPath)
			return true, nil
		}
		return notMnt, err
	}

	if notMnt {
		klog.Warningf("Warning: %q is not a mountpoint, deleting", mountPath)
		return notMnt, os.Remove(mountPath)
	}
	return notMnt, nil
}

// PathExists returns true if the specified path exists.
// TODO: clean this up to use pkg/util/file/FileExists
func PathExists(path string) (bool, error) {
	_, err := os.Stat(path)
	if err == nil {
		return true, nil
	} else if os.IsNotExist(err) {
		return false, nil
	} else if IsCorruptedMnt(err) {
		return true, err
	}
	return false, err
}
   0707010000105A000081A4000000000000000000000001645E367C00001387000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/k8s.io/mount-utils/mount_helper_unix.go    //go:build !windows
// +build !windows

/*
Copyright 2019 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package mount

import (
	"fmt"
	"os"
	"strconv"
	"strings"
	"syscall"

	utilio "k8s.io/utils/io"
)

const (
	// At least number of fields per line in /proc/<pid>/mountinfo.
	expectedAtLeastNumFieldsPerMountInfo = 10
	// How many times to retry for a consistent read of /proc/mounts.
	maxListTries = 10
)

// IsCorruptedMnt return true if err is about corrupted mount point
func IsCorruptedMnt(err error) bool {
	if err == nil {
		return false
	}
	var underlyingError error
	switch pe := err.(type) {
	case nil:
		return false
	case *os.PathError:
		underlyingError = pe.Err
	case *os.LinkError:
		underlyingError = pe.Err
	case *os.SyscallError:
		underlyingError = pe.Err
	}

	return underlyingError == syscall.ENOTCONN || underlyingError == syscall.ESTALE || underlyingError == syscall.EIO || underlyingError == syscall.EACCES || underlyingError == syscall.EHOSTDOWN
}

// MountInfo represents a single line in /proc/<pid>/mountinfo.
type MountInfo struct { // nolint: golint
	// Unique ID for the mount (maybe reused after umount).
	ID int
	// The ID of the parent mount (or of self for the root of this mount namespace's mount tree).
	ParentID int
	// Major indicates one half of the device ID which identifies the device class
	// (parsed from `st_dev` for files on this filesystem).
	Major int
	// Minor indicates one half of the device ID which identifies a specific
	// instance of device (parsed from `st_dev` for files on this filesystem).
	Minor int
	// The pathname of the directory in the filesystem which forms the root of this mount.
	Root string
	// Mount source, filesystem-specific information. e.g. device, tmpfs name.
	Source string
	// Mount point, the pathname of the mount point.
	MountPoint string
	// Optional fieds, zero or more fields of the form "tag[:value]".
	OptionalFields []string
	// The filesystem type in the form "type[.subtype]".
	FsType string
	// Per-mount options.
	MountOptions []string
	// Per-superblock options.
	SuperOptions []string
}

// ParseMountInfo parses /proc/xxx/mountinfo.
func ParseMountInfo(filename string) ([]MountInfo, error) {
	content, err := utilio.ConsistentRead(filename, maxListTries)
	if err != nil {
		return []MountInfo{}, err
	}
	contentStr := string(content)
	infos := []MountInfo{}

	for _, line := range strings.Split(contentStr, "\n") {
		if line == "" {
			// the last split() item is empty string following the last \n
			continue
		}
		// See `man proc` for authoritative description of format of the file.
		fields := strings.Fields(line)
		if len(fields) < expectedAtLeastNumFieldsPerMountInfo {
			return nil, fmt.Errorf("wrong number of fields in (expected at least %d, got %d): %s", expectedAtLeastNumFieldsPerMountInfo, len(fields), line)
		}
		id, err := strconv.Atoi(fields[0])
		if err != nil {
			return nil, err
		}
		parentID, err := strconv.Atoi(fields[1])
		if err != nil {
			return nil, err
		}
		mm := strings.Split(fields[2], ":")
		if len(mm) != 2 {
			return nil, fmt.Errorf("parsing '%s' failed: unexpected minor:major pair %s", line, mm)
		}
		major, err := strconv.Atoi(mm[0])
		if err != nil {
			return nil, fmt.Errorf("parsing '%s' failed: unable to parse major device id, err:%v", mm[0], err)
		}
		minor, err := strconv.Atoi(mm[1])
		if err != nil {
			return nil, fmt.Errorf("parsing '%s' failed: unable to parse minor device id, err:%v", mm[1], err)
		}

		info := MountInfo{
			ID:           id,
			ParentID:     parentID,
			Major:        major,
			Minor:        minor,
			Root:         fields[3],
			MountPoint:   fields[4],
			MountOptions: strings.Split(fields[5], ","),
		}
		// All fields until "-" are "optional fields".
		i := 6
		for ; i < len(fields) && fields[i] != "-"; i++ {
			info.OptionalFields = append(info.OptionalFields, fields[i])
		}
		// Parse the rest 3 fields.
		i++
		if len(fields)-i < 3 {
			return nil, fmt.Errorf("expect 3 fields in %s, got %d", line, len(fields)-i)
		}
		info.FsType = fields[i]
		info.Source = fields[i+1]
		info.SuperOptions = strings.Split(fields[i+2], ",")
		infos = append(infos, info)
	}
	return infos, nil
}

// isMountPointMatch returns true if the path in mp is the same as dir.
// Handles case where mountpoint dir has been renamed due to stale NFS mount.
func isMountPointMatch(mp MountPoint, dir string) bool {
	deletedDir := fmt.Sprintf("%s\\040(deleted)", dir)
	return ((mp.Path == dir) || (mp.Path == deletedDir))
}
 0707010000105B000081A4000000000000000000000001645E367C00000AB6000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/k8s.io/mount-utils/mount_helper_windows.go //go:build windows
// +build windows

/*
Copyright 2019 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package mount

import (
	"fmt"
	"os"
	"strconv"
	"strings"
	"syscall"

	"k8s.io/klog/v2"
)

// following failure codes are from https://docs.microsoft.com/en-us/windows/desktop/debug/system-error-codes--1300-1699-
// ERROR_BAD_NETPATH                 = 53
// ERROR_NETWORK_BUSY                = 54
// ERROR_UNEXP_NET_ERR               = 59
// ERROR_NETNAME_DELETED             = 64
// ERROR_NETWORK_ACCESS_DENIED       = 65
// ERROR_BAD_DEV_TYPE                = 66
// ERROR_BAD_NET_NAME                = 67
// ERROR_SESSION_CREDENTIAL_CONFLICT = 1219
// ERROR_LOGON_FAILURE               = 1326
// WSAEHOSTDOWN                      = 10064
var errorNoList = [...]int{53, 54, 59, 64, 65, 66, 67, 1219, 1326, 10064}

// IsCorruptedMnt return true if err is about corrupted mount point
func IsCorruptedMnt(err error) bool {
	if err == nil {
		return false
	}

	var underlyingError error
	switch pe := err.(type) {
	case nil:
		return false
	case *os.PathError:
		underlyingError = pe.Err
	case *os.LinkError:
		underlyingError = pe.Err
	case *os.SyscallError:
		underlyingError = pe.Err
	}

	if ee, ok := underlyingError.(syscall.Errno); ok {
		for _, errno := range errorNoList {
			if int(ee) == errno {
				klog.Warningf("IsCorruptedMnt failed with error: %v, error code: %v", err, errno)
				return true
			}
		}
	}

	return false
}

// NormalizeWindowsPath makes sure the given path is a valid path on Windows
// systems by making sure all instances of `/` are replaced with `\\`, and the
// path beings with `c:`
func NormalizeWindowsPath(path string) string {
	normalizedPath := strings.Replace(path, "/", "\\", -1)
	if strings.HasPrefix(normalizedPath, "\\") {
		normalizedPath = "c:" + normalizedPath
	}
	return normalizedPath
}

// ValidateDiskNumber : disk number should be a number in [0, 99]
func ValidateDiskNumber(disk string) error {
	if _, err := strconv.Atoi(disk); err != nil {
		return fmt.Errorf("wrong disk number format: %q, err: %v", disk, err)
	}
	return nil
}

// isMountPointMatch determines if the mountpoint matches the dir
func isMountPointMatch(mp MountPoint, dir string) bool {
	return mp.Path == dir
}
  0707010000105C000081A4000000000000000000000001645E367C00006596000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/k8s.io/mount-utils/mount_linux.go  //go:build linux
// +build linux

/*
Copyright 2014 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package mount

import (
	"context"
	"fmt"
	"os"
	"os/exec"
	"path/filepath"
	"strconv"
	"strings"
	"syscall"
	"time"

	"k8s.io/klog/v2"
	utilexec "k8s.io/utils/exec"
	utilio "k8s.io/utils/io"
)

const (
	// Number of fields per line in /proc/mounts as per the fstab man page.
	expectedNumFieldsPerLine = 6
	// Location of the mount file to use
	procMountsPath = "/proc/mounts"
	// Location of the mountinfo file
	procMountInfoPath = "/proc/self/mountinfo"
	// 'fsck' found errors and corrected them
	fsckErrorsCorrected = 1
	// 'fsck' found errors but exited without correcting them
	fsckErrorsUncorrected = 4
	// Error thrown by exec cmd.Run() when process spawned by cmd.Start() completes before cmd.Wait() is called (see - k/k issue #103753)
	errNoChildProcesses = "wait: no child processes"
)

// Mounter provides the default implementation of mount.Interface
// for the linux platform.  This implementation assumes that the
// kubelet is running in the host's root mount namespace.
type Mounter struct {
	mounterPath string
	withSystemd bool
}

var _ MounterForceUnmounter = &Mounter{}

// New returns a mount.Interface for the current system.
// It provides options to override the default mounter behavior.
// mounterPath allows using an alternative to `/bin/mount` for mounting.
func New(mounterPath string) Interface {
	return &Mounter{
		mounterPath: mounterPath,
		withSystemd: detectSystemd(),
	}
}

// Mount mounts source to target as fstype with given options. 'source' and 'fstype' must
// be an empty string in case it's not required, e.g. for remount, or for auto filesystem
// type, where kernel handles fstype for you. The mount 'options' is a list of options,
// currently come from mount(8), e.g. "ro", "remount", "bind", etc. If no more option is
// required, call Mount with an empty string list or nil.
func (mounter *Mounter) Mount(source string, target string, fstype string, options []string) error {
	return mounter.MountSensitive(source, target, fstype, options, nil)
}

// MountSensitive is the same as Mount() but this method allows
// sensitiveOptions to be passed in a separate parameter from the normal
// mount options and ensures the sensitiveOptions are never logged. This
// method should be used by callers that pass sensitive material (like
// passwords) as mount options.
func (mounter *Mounter) MountSensitive(source string, target string, fstype string, options []string, sensitiveOptions []string) error {
	// Path to mounter binary if containerized mounter is needed. Otherwise, it is set to empty.
	// All Linux distros are expected to be shipped with a mount utility that a support bind mounts.
	mounterPath := ""
	bind, bindOpts, bindRemountOpts, bindRemountOptsSensitive := MakeBindOptsSensitive(options, sensitiveOptions)
	if bind {
		err := mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, bindOpts, bindRemountOptsSensitive, nil /* mountFlags */, true)
		if err != nil {
			return err
		}
		return mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, bindRemountOpts, bindRemountOptsSensitive, nil /* mountFlags */, true)
	}
	// The list of filesystems that require containerized mounter on GCI image cluster
	fsTypesNeedMounter := map[string]struct{}{
		"nfs":       {},
		"glusterfs": {},
		"ceph":      {},
		"cifs":      {},
	}
	if _, ok := fsTypesNeedMounter[fstype]; ok {
		mounterPath = mounter.mounterPath
	}
	return mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, options, sensitiveOptions, nil /* mountFlags */, true)
}

// MountSensitiveWithoutSystemd is the same as MountSensitive() but disable using systemd mount.
func (mounter *Mounter) MountSensitiveWithoutSystemd(source string, target string, fstype string, options []string, sensitiveOptions []string) error {
	return mounter.MountSensitiveWithoutSystemdWithMountFlags(source, target, fstype, options, sensitiveOptions, nil /* mountFlags */)
}

// MountSensitiveWithoutSystemdWithMountFlags is the same as MountSensitiveWithoutSystemd with additional mount flags.
func (mounter *Mounter) MountSensitiveWithoutSystemdWithMountFlags(source string, target string, fstype string, options []string, sensitiveOptions []string, mountFlags []string) error {
	mounterPath := ""
	bind, bindOpts, bindRemountOpts, bindRemountOptsSensitive := MakeBindOptsSensitive(options, sensitiveOptions)
	if bind {
		err := mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, bindOpts, bindRemountOptsSensitive, mountFlags, false)
		if err != nil {
			return err
		}
		return mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, bindRemountOpts, bindRemountOptsSensitive, mountFlags, false)
	}
	// The list of filesystems that require containerized mounter on GCI image cluster
	fsTypesNeedMounter := map[string]struct{}{
		"nfs":       {},
		"glusterfs": {},
		"ceph":      {},
		"cifs":      {},
	}
	if _, ok := fsTypesNeedMounter[fstype]; ok {
		mounterPath = mounter.mounterPath
	}
	return mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, options, sensitiveOptions, mountFlags, false)
}

// doMount runs the mount command. mounterPath is the path to mounter binary if containerized mounter is used.
// sensitiveOptions is an extension of options except they will not be logged (because they may contain sensitive material)
// systemdMountRequired is an extension of option to decide whether uses systemd mount.
func (mounter *Mounter) doMount(mounterPath string, mountCmd string, source string, target string, fstype string, options []string, sensitiveOptions []string, mountFlags []string, systemdMountRequired bool) error {
	mountArgs, mountArgsLogStr := MakeMountArgsSensitiveWithMountFlags(source, target, fstype, options, sensitiveOptions, mountFlags)
	if len(mounterPath) > 0 {
		mountArgs = append([]string{mountCmd}, mountArgs...)
		mountArgsLogStr = mountCmd + " " + mountArgsLogStr
		mountCmd = mounterPath
	}

	if mounter.withSystemd && systemdMountRequired {
		// Try to run mount via systemd-run --scope. This will escape the
		// service where kubelet runs and any fuse daemons will be started in a
		// specific scope. kubelet service than can be restarted without killing
		// these fuse daemons.
		//
		// Complete command line (when mounterPath is not used):
		// systemd-run --description=... --scope -- mount -t <type> <what> <where>
		//
		// Expected flow:
		// * systemd-run creates a transient scope (=~ cgroup) and executes its
		//   argument (/bin/mount) there.
		// * mount does its job, forks a fuse daemon if necessary and finishes.
		//   (systemd-run --scope finishes at this point, returning mount's exit
		//   code and stdout/stderr - thats one of --scope benefits).
		// * systemd keeps the fuse daemon running in the scope (i.e. in its own
		//   cgroup) until the fuse daemon dies (another --scope benefit).
		//   Kubelet service can be restarted and the fuse daemon survives.
		// * When the fuse daemon dies (e.g. during unmount) systemd removes the
		//   scope automatically.
		//
		// systemd-mount is not used because it's too new for older distros
		// (CentOS 7, Debian Jessie).
		mountCmd, mountArgs, mountArgsLogStr = AddSystemdScopeSensitive("systemd-run", target, mountCmd, mountArgs, mountArgsLogStr)
		// } else {
		// No systemd-run on the host (or we failed to check it), assume kubelet
		// does not run as a systemd service.
		// No code here, mountCmd and mountArgs are already populated.
	}

	// Logging with sensitive mount options removed.
	klog.V(4).Infof("Mounting cmd (%s) with arguments (%s)", mountCmd, mountArgsLogStr)
	command := exec.Command(mountCmd, mountArgs...)
	output, err := command.CombinedOutput()
	if err != nil {
		if err.Error() == errNoChildProcesses {
			if command.ProcessState.Success() {
				// We don't consider errNoChildProcesses an error if the process itself succeeded (see - k/k issue #103753).
				return nil
			}
			// Rewrite err with the actual exit error of the process.
			err = &exec.ExitError{ProcessState: command.ProcessState}
		}
		klog.Errorf("Mount failed: %v\nMounting command: %s\nMounting arguments: %s\nOutput: %s\n", err, mountCmd, mountArgsLogStr, string(output))
		return fmt.Errorf("mount failed: %v\nMounting command: %s\nMounting arguments: %s\nOutput: %s",
			err, mountCmd, mountArgsLogStr, string(output))
	}
	return err
}

// detectSystemd returns true if OS runs with systemd as init. When not sure
// (permission errors, ...), it returns false.
// There may be different ways how to detect systemd, this one makes sure that
// systemd-runs (needed by Mount()) works.
func detectSystemd() bool {
	if _, err := exec.LookPath("systemd-run"); err != nil {
		klog.V(2).Infof("Detected OS without systemd")
		return false
	}
	// Try to run systemd-run --scope /bin/true, that should be enough
	// to make sure that systemd is really running and not just installed,
	// which happens when running in a container with a systemd-based image
	// but with different pid 1.
	cmd := exec.Command("systemd-run", "--description=Kubernetes systemd probe", "--scope", "true")
	output, err := cmd.CombinedOutput()
	if err != nil {
		klog.V(2).Infof("Cannot run systemd-run, assuming non-systemd OS")
		klog.V(4).Infof("systemd-run output: %s, failed with: %v", string(output), err)
		return false
	}
	klog.V(2).Infof("Detected OS with systemd")
	return true
}

// MakeMountArgs makes the arguments to the mount(8) command.
// options MUST not contain sensitive material (like passwords).
func MakeMountArgs(source, target, fstype string, options []string) (mountArgs []string) {
	mountArgs, _ = MakeMountArgsSensitive(source, target, fstype, options, nil /* sensitiveOptions */)
	return mountArgs
}

// MakeMountArgsSensitive makes the arguments to the mount(8) command.
// sensitiveOptions is an extension of options except they will not be logged (because they may contain sensitive material)
func MakeMountArgsSensitive(source, target, fstype string, options []string, sensitiveOptions []string) (mountArgs []string, mountArgsLogStr string) {
	return MakeMountArgsSensitiveWithMountFlags(source, target, fstype, options, sensitiveOptions, nil /* mountFlags */)
}

// MakeMountArgsSensitiveWithMountFlags makes the arguments to the mount(8) command.
// sensitiveOptions is an extension of options except they will not be logged (because they may contain sensitive material)
// mountFlags are additional mount flags that are not related with the fstype
// and mount options
func MakeMountArgsSensitiveWithMountFlags(source, target, fstype string, options []string, sensitiveOptions []string, mountFlags []string) (mountArgs []string, mountArgsLogStr string) {
	// Build mount command as follows:
	//   mount [$mountFlags] [-t $fstype] [-o $options] [$source] $target
	mountArgs = []string{}
	mountArgsLogStr = ""

	mountArgs = append(mountArgs, mountFlags...)
	mountArgsLogStr += strings.Join(mountFlags, " ")

	if len(fstype) > 0 {
		mountArgs = append(mountArgs, "-t", fstype)
		mountArgsLogStr += strings.Join(mountArgs, " ")
	}
	if len(options) > 0 || len(sensitiveOptions) > 0 {
		combinedOptions := []string{}
		combinedOptions = append(combinedOptions, options...)
		combinedOptions = append(combinedOptions, sensitiveOptions...)
		mountArgs = append(mountArgs, "-o", strings.Join(combinedOptions, ","))
		// exclude sensitiveOptions from log string
		mountArgsLogStr += " -o " + sanitizedOptionsForLogging(options, sensitiveOptions)
	}
	if len(source) > 0 {
		mountArgs = append(mountArgs, source)
		mountArgsLogStr += " " + source
	}
	mountArgs = append(mountArgs, target)
	mountArgsLogStr += " " + target

	return mountArgs, mountArgsLogStr
}

// AddSystemdScope adds "system-run --scope" to given command line
// If args contains sensitive material, use AddSystemdScopeSensitive to construct
// a safe to log string.
func AddSystemdScope(systemdRunPath, mountName, command string, args []string) (string, []string) {
	descriptionArg := fmt.Sprintf("--description=Kubernetes transient mount for %s", mountName)
	systemdRunArgs := []string{descriptionArg, "--scope", "--", command}
	return systemdRunPath, append(systemdRunArgs, args...)
}

// AddSystemdScopeSensitive adds "system-run --scope" to given command line
// It also accepts takes a sanitized string containing mount arguments, mountArgsLogStr,
// and returns the string appended to the systemd command for logging.
func AddSystemdScopeSensitive(systemdRunPath, mountName, command string, args []string, mountArgsLogStr string) (string, []string, string) {
	descriptionArg := fmt.Sprintf("--description=Kubernetes transient mount for %s", mountName)
	systemdRunArgs := []string{descriptionArg, "--scope", "--", command}
	return systemdRunPath, append(systemdRunArgs, args...), strings.Join(systemdRunArgs, " ") + " " + mountArgsLogStr
}

// Unmount unmounts the target.
func (mounter *Mounter) Unmount(target string) error {
	klog.V(4).Infof("Unmounting %s", target)
	command := exec.Command("umount", target)
	output, err := command.CombinedOutput()
	if err != nil {
		if err.Error() == errNoChildProcesses {
			if command.ProcessState.Success() {
				// We don't consider errNoChildProcesses an error if the process itself succeeded (see - k/k issue #103753).
				return nil
			}
			// Rewrite err with the actual exit error of the process.
			err = &exec.ExitError{ProcessState: command.ProcessState}
		}
		return fmt.Errorf("unmount failed: %v\nUnmounting arguments: %s\nOutput: %s", err, target, string(output))
	}
	return nil
}

// UnmountWithForce unmounts given target but will retry unmounting with force option
// after given timeout.
func (mounter *Mounter) UnmountWithForce(target string, umountTimeout time.Duration) error {
	err := tryUnmount(target, umountTimeout)
	if err != nil {
		if err == context.DeadlineExceeded {
			klog.V(2).Infof("Timed out waiting for unmount of %s, trying with -f", target)
			err = forceUmount(target)
		}
		return err
	}
	return nil
}

// List returns a list of all mounted filesystems.
func (*Mounter) List() ([]MountPoint, error) {
	return ListProcMounts(procMountsPath)
}

// IsLikelyNotMountPoint determines if a directory is not a mountpoint.
// It is fast but not necessarily ALWAYS correct. If the path is in fact
// a bind mount from one part of a mount to another it will not be detected.
// It also can not distinguish between mountpoints and symbolic links.
// mkdir /tmp/a /tmp/b; mount --bind /tmp/a /tmp/b; IsLikelyNotMountPoint("/tmp/b")
// will return true. When in fact /tmp/b is a mount point. If this situation
// is of interest to you, don't use this function...
func (mounter *Mounter) IsLikelyNotMountPoint(file string) (bool, error) {
	stat, err := os.Stat(file)
	if err != nil {
		return true, err
	}
	rootStat, err := os.Stat(filepath.Dir(strings.TrimSuffix(file, "/")))
	if err != nil {
		return true, err
	}
	// If the directory has a different device as parent, then it is a mountpoint.
	if stat.Sys().(*syscall.Stat_t).Dev != rootStat.Sys().(*syscall.Stat_t).Dev {
		return false, nil
	}

	return true, nil
}

// GetMountRefs finds all mount references to pathname, returns a
// list of paths. Path could be a mountpoint or a normal
// directory (for bind mount).
func (mounter *Mounter) GetMountRefs(pathname string) ([]string, error) {
	pathExists, pathErr := PathExists(pathname)
	if !pathExists {
		return []string{}, nil
	} else if IsCorruptedMnt(pathErr) {
		klog.Warningf("GetMountRefs found corrupted mount at %s, treating as unmounted path", pathname)
		return []string{}, nil
	} else if pathErr != nil {
		return nil, fmt.Errorf("error checking path %s: %v", pathname, pathErr)
	}
	realpath, err := filepath.EvalSymlinks(pathname)
	if err != nil {
		return nil, err
	}
	return SearchMountPoints(realpath, procMountInfoPath)
}

// checkAndRepairFileSystem checks and repairs filesystems using command fsck.
func (mounter *SafeFormatAndMount) checkAndRepairFilesystem(source string) error {
	klog.V(4).Infof("Checking for issues with fsck on disk: %s", source)
	args := []string{"-a", source}
	out, err := mounter.Exec.Command("fsck", args...).CombinedOutput()
	if err != nil {
		ee, isExitError := err.(utilexec.ExitError)
		switch {
		case err == utilexec.ErrExecutableNotFound:
			klog.Warningf("'fsck' not found on system; continuing mount without running 'fsck'.")
		case isExitError && ee.ExitStatus() == fsckErrorsCorrected:
			klog.Infof("Device %s has errors which were corrected by fsck.", source)
		case isExitError && ee.ExitStatus() == fsckErrorsUncorrected:
			return NewMountError(HasFilesystemErrors, "'fsck' found errors on device %s but could not correct them: %s", source, string(out))
		case isExitError && ee.ExitStatus() > fsckErrorsUncorrected:
			klog.Infof("`fsck` error %s", string(out))
		}
	}
	return nil
}

// formatAndMount uses unix utils to format and mount the given disk
func (mounter *SafeFormatAndMount) formatAndMountSensitive(source string, target string, fstype string, options []string, sensitiveOptions []string) error {
	readOnly := false
	for _, option := range options {
		if option == "ro" {
			readOnly = true
			break
		}
	}
	if !readOnly {
		// Check sensitiveOptions for ro
		for _, option := range sensitiveOptions {
			if option == "ro" {
				readOnly = true
				break
			}
		}
	}

	options = append(options, "defaults")
	mountErrorValue := UnknownMountError

	// Check if the disk is already formatted
	existingFormat, err := mounter.GetDiskFormat(source)
	if err != nil {
		return NewMountError(GetDiskFormatFailed, "failed to get disk format of disk %s: %v", source, err)
	}

	// Use 'ext4' as the default
	if len(fstype) == 0 {
		fstype = "ext4"
	}

	if existingFormat == "" {
		// Do not attempt to format the disk if mounting as readonly, return an error to reflect this.
		if readOnly {
			return NewMountError(UnformattedReadOnly, "cannot mount unformatted disk %s as we are manipulating it in read-only mode", source)
		}

		// Disk is unformatted so format it.
		args := []string{source}
		if fstype == "ext4" || fstype == "ext3" {
			args = []string{
				"-F",  // Force flag
				"-m0", // Zero blocks reserved for super-user
				source,
			}
		} else if fstype == "xfs" {
			args = []string{
				"-f", // force flag
				source,
			}
		}

		klog.Infof("Disk %q appears to be unformatted, attempting to format as type: %q with options: %v", source, fstype, args)
		output, err := mounter.Exec.Command("mkfs."+fstype, args...).CombinedOutput()
		if err != nil {
			// Do not log sensitiveOptions only options
			sensitiveOptionsLog := sanitizedOptionsForLogging(options, sensitiveOptions)
			detailedErr := fmt.Sprintf("format of disk %q failed: type:(%q) target:(%q) options:(%q) errcode:(%v) output:(%v) ", source, fstype, target, sensitiveOptionsLog, err, string(output))
			klog.Error(detailedErr)
			return NewMountError(FormatFailed, detailedErr)
		}

		klog.Infof("Disk successfully formatted (mkfs): %s - %s %s", fstype, source, target)
	} else {
		if fstype != existingFormat {
			// Verify that the disk is formatted with filesystem type we are expecting
			mountErrorValue = FilesystemMismatch
			klog.Warningf("Configured to mount disk %s as %s but current format is %s, things might break", source, existingFormat, fstype)
		}

		if !readOnly {
			// Run check tools on the disk to fix repairable issues, only do this for formatted volumes requested as rw.
			err := mounter.checkAndRepairFilesystem(source)
			if err != nil {
				return err
			}
		}
	}

	// Mount the disk
	klog.V(4).Infof("Attempting to mount disk %s in %s format at %s", source, fstype, target)
	if err := mounter.MountSensitive(source, target, fstype, options, sensitiveOptions); err != nil {
		return NewMountError(mountErrorValue, err.Error())
	}

	return nil
}

func getDiskFormat(exec utilexec.Interface, disk string) (string, error) {
	args := []string{"-p", "-s", "TYPE", "-s", "PTTYPE", "-o", "export", disk}
	klog.V(4).Infof("Attempting to determine if disk %q is formatted using blkid with args: (%v)", disk, args)
	dataOut, err := exec.Command("blkid", args...).CombinedOutput()
	output := string(dataOut)
	klog.V(4).Infof("Output: %q", output)

	if err != nil {
		if exit, ok := err.(utilexec.ExitError); ok {
			if exit.ExitStatus() == 2 {
				// Disk device is unformatted.
				// For `blkid`, if the specified token (TYPE/PTTYPE, etc) was
				// not found, or no (specified) devices could be identified, an
				// exit code of 2 is returned.
				return "", nil
			}
		}
		klog.Errorf("Could not determine if disk %q is formatted (%v)", disk, err)
		return "", err
	}

	var fstype, pttype string

	lines := strings.Split(output, "\n")
	for _, l := range lines {
		if len(l) <= 0 {
			// Ignore empty line.
			continue
		}
		cs := strings.Split(l, "=")
		if len(cs) != 2 {
			return "", fmt.Errorf("blkid returns invalid output: %s", output)
		}
		// TYPE is filesystem type, and PTTYPE is partition table type, according
		// to https://www.kernel.org/pub/linux/utils/util-linux/v2.21/libblkid-docs/.
		if cs[0] == "TYPE" {
			fstype = cs[1]
		} else if cs[0] == "PTTYPE" {
			pttype = cs[1]
		}
	}

	if len(pttype) > 0 {
		klog.V(4).Infof("Disk %s detected partition table type: %s", disk, pttype)
		// Returns a special non-empty string as filesystem type, then kubelet
		// will not format it.
		return "unknown data, probably partitions", nil
	}

	return fstype, nil
}

// GetDiskFormat uses 'blkid' to see if the given disk is unformatted
func (mounter *SafeFormatAndMount) GetDiskFormat(disk string) (string, error) {
	return getDiskFormat(mounter.Exec, disk)
}

// ListProcMounts is shared with NsEnterMounter
func ListProcMounts(mountFilePath string) ([]MountPoint, error) {
	content, err := utilio.ConsistentRead(mountFilePath, maxListTries)
	if err != nil {
		return nil, err
	}
	return parseProcMounts(content)
}

func parseProcMounts(content []byte) ([]MountPoint, error) {
	out := []MountPoint{}
	lines := strings.Split(string(content), "\n")
	for _, line := range lines {
		if line == "" {
			// the last split() item is empty string following the last \n
			continue
		}
		fields := strings.Fields(line)
		if len(fields) != expectedNumFieldsPerLine {
			// Do not log line in case it contains sensitive Mount options
			return nil, fmt.Errorf("wrong number of fields (expected %d, got %d)", expectedNumFieldsPerLine, len(fields))
		}

		mp := MountPoint{
			Device: fields[0],
			Path:   fields[1],
			Type:   fields[2],
			Opts:   strings.Split(fields[3], ","),
		}

		freq, err := strconv.Atoi(fields[4])
		if err != nil {
			return nil, err
		}
		mp.Freq = freq

		pass, err := strconv.Atoi(fields[5])
		if err != nil {
			return nil, err
		}
		mp.Pass = pass

		out = append(out, mp)
	}
	return out, nil
}

// SearchMountPoints finds all mount references to the source, returns a list of
// mountpoints.
// The source can be a mount point or a normal directory (bind mount). We
// didn't support device because there is no use case by now.
// Some filesystems may share a source name, e.g. tmpfs. And for bind mounting,
// it's possible to mount a non-root path of a filesystem, so we need to use
// root path and major:minor to represent mount source uniquely.
// This implementation is shared between Linux and NsEnterMounter
func SearchMountPoints(hostSource, mountInfoPath string) ([]string, error) {
	mis, err := ParseMountInfo(mountInfoPath)
	if err != nil {
		return nil, err
	}

	mountID := 0
	rootPath := ""
	major := -1
	minor := -1

	// Finding the underlying root path and major:minor if possible.
	// We need search in backward order because it's possible for later mounts
	// to overlap earlier mounts.
	for i := len(mis) - 1; i >= 0; i-- {
		if hostSource == mis[i].MountPoint || PathWithinBase(hostSource, mis[i].MountPoint) {
			// If it's a mount point or path under a mount point.
			mountID = mis[i].ID
			rootPath = filepath.Join(mis[i].Root, strings.TrimPrefix(hostSource, mis[i].MountPoint))
			major = mis[i].Major
			minor = mis[i].Minor
			break
		}
	}

	if rootPath == "" || major == -1 || minor == -1 {
		return nil, fmt.Errorf("failed to get root path and major:minor for %s", hostSource)
	}

	var refs []string
	for i := range mis {
		if mis[i].ID == mountID {
			// Ignore mount entry for mount source itself.
			continue
		}
		if mis[i].Root == rootPath && mis[i].Major == major && mis[i].Minor == minor {
			refs = append(refs, mis[i].MountPoint)
		}
	}

	return refs, nil
}

// tryUnmount calls plain "umount" and waits for unmountTimeout for it to finish.
func tryUnmount(path string, unmountTimeout time.Duration) error {
	klog.V(4).Infof("Unmounting %s", path)
	ctx, cancel := context.WithTimeout(context.Background(), unmountTimeout)
	defer cancel()

	cmd := exec.CommandContext(ctx, "umount", path)
	out, cmderr := cmd.CombinedOutput()

	// CombinedOutput() does not return DeadlineExceeded, make sure it's
	// propagated on timeout.
	if ctx.Err() != nil {
		return ctx.Err()
	}

	if cmderr != nil {
		return fmt.Errorf("unmount failed: %v\nUnmounting arguments: %s\nOutput: %s", cmderr, path, string(out))
	}
	return nil
}

func forceUmount(path string) error {
	cmd := exec.Command("umount", "-f", path)
	out, cmderr := cmd.CombinedOutput()

	if cmderr != nil {
		return fmt.Errorf("unmount failed: %v\nUnmounting arguments: %s\nOutput: %s", cmderr, path, string(out))
	}
	return nil
}
  0707010000105D000081A4000000000000000000000001645E367C00000C26000000000000000000000000000000000000004300000000elemental-cli-0.3.1/vendor/k8s.io/mount-utils/mount_unsupported.go    //go:build !linux && !windows
// +build !linux,!windows

/*
Copyright 2014 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package mount

import (
	"errors"
)

// Mounter implements mount.Interface for unsupported platforms
type Mounter struct {
	mounterPath string
}

var errUnsupported = errors.New("util/mount on this platform is not supported")

// New returns a mount.Interface for the current system.
// It provides options to override the default mounter behavior.
// mounterPath allows using an alternative to `/bin/mount` for mounting.
func New(mounterPath string) Interface {
	return &Mounter{
		mounterPath: mounterPath,
	}
}

// Mount always returns an error on unsupported platforms
func (mounter *Mounter) Mount(source string, target string, fstype string, options []string) error {
	return errUnsupported
}

// MountSensitive always returns an error on unsupported platforms
func (mounter *Mounter) MountSensitive(source string, target string, fstype string, options []string, sensitiveOptions []string) error {
	return errUnsupported
}

// MountSensitiveWithoutSystemd always returns an error on unsupported platforms
func (mounter *Mounter) MountSensitiveWithoutSystemd(source string, target string, fstype string, options []string, sensitiveOptions []string) error {
	return errUnsupported
}

// MountSensitiveWithoutSystemdWithMountFlags always returns an error on unsupported platforms
func (mounter *Mounter) MountSensitiveWithoutSystemdWithMountFlags(source string, target string, fstype string, options []string, sensitiveOptions []string, mountFlags []string) error {
	return errUnsupported
}

// Unmount always returns an error on unsupported platforms
func (mounter *Mounter) Unmount(target string) error {
	return errUnsupported
}

// List always returns an error on unsupported platforms
func (mounter *Mounter) List() ([]MountPoint, error) {
	return []MountPoint{}, errUnsupported
}

// IsLikelyNotMountPoint always returns an error on unsupported platforms
func (mounter *Mounter) IsLikelyNotMountPoint(file string) (bool, error) {
	return true, errUnsupported
}

// GetMountRefs always returns an error on unsupported platforms
func (mounter *Mounter) GetMountRefs(pathname string) ([]string, error) {
	return nil, errUnsupported
}

func (mounter *SafeFormatAndMount) formatAndMountSensitive(source string, target string, fstype string, options []string, sensitiveOptions []string) error {
	return mounter.Interface.Mount(source, target, fstype, options)
}

func (mounter *SafeFormatAndMount) diskLooksUnformatted(disk string) (bool, error) {
	return true, errUnsupported
}
  0707010000105E000081A4000000000000000000000001645E367C000033E2000000000000000000000000000000000000003F00000000elemental-cli-0.3.1/vendor/k8s.io/mount-utils/mount_windows.go    //go:build windows
// +build windows

/*
Copyright 2017 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package mount

import (
	"fmt"
	"os"
	"os/exec"
	"path/filepath"
	"strings"

	"k8s.io/klog/v2"
	"k8s.io/utils/keymutex"
)

const (
	accessDenied string = "access is denied"
)

// Mounter provides the default implementation of mount.Interface
// for the windows platform.  This implementation assumes that the
// kubelet is running in the host's root mount namespace.
type Mounter struct {
	mounterPath string
}

// New returns a mount.Interface for the current system.
// It provides options to override the default mounter behavior.
// mounterPath allows using an alternative to `/bin/mount` for mounting.
func New(mounterPath string) Interface {
	return &Mounter{
		mounterPath: mounterPath,
	}
}

// acquire lock for smb mount
var getSMBMountMutex = keymutex.NewHashed(0)

// Mount : mounts source to target with given options.
// currently only supports cifs(smb), bind mount(for disk)
func (mounter *Mounter) Mount(source string, target string, fstype string, options []string) error {
	return mounter.MountSensitive(source, target, fstype, options, nil /* sensitiveOptions */)
}

// MountSensitiveWithoutSystemd is the same as MountSensitive() but disable using ssytemd mount.
// Windows not supported systemd mount, this function degrades to MountSensitive().
func (mounter *Mounter) MountSensitiveWithoutSystemd(source string, target string, fstype string, options []string, sensitiveOptions []string) error {
	return mounter.MountSensitive(source, target, fstype, options, sensitiveOptions /* sensitiveOptions */)
}

// MountSensitiveWithoutSystemdWithMountFlags is the same as MountSensitiveWithoutSystemd with additional mount flags
// Windows not supported systemd mount, this function degrades to MountSensitive().
func (mounter *Mounter) MountSensitiveWithoutSystemdWithMountFlags(source string, target string, fstype string, options []string, sensitiveOptions []string, mountFlags []string) error {
	return mounter.MountSensitive(source, target, fstype, options, sensitiveOptions /* sensitiveOptions */)
}

// MountSensitive is the same as Mount() but this method allows
// sensitiveOptions to be passed in a separate parameter from the normal
// mount options and ensures the sensitiveOptions are never logged. This
// method should be used by callers that pass sensitive material (like
// passwords) as mount options.
func (mounter *Mounter) MountSensitive(source string, target string, fstype string, options []string, sensitiveOptions []string) error {
	target = NormalizeWindowsPath(target)
	sanitizedOptionsForLogging := sanitizedOptionsForLogging(options, sensitiveOptions)

	if source == "tmpfs" {
		klog.V(3).Infof("mounting source (%q), target (%q), with options (%q)", source, target, sanitizedOptionsForLogging)
		return os.MkdirAll(target, 0755)
	}

	parentDir := filepath.Dir(target)
	if err := os.MkdirAll(parentDir, 0755); err != nil {
		return err
	}

	klog.V(4).Infof("mount options(%q) source:%q, target:%q, fstype:%q, begin to mount",
		sanitizedOptionsForLogging, source, target, fstype)
	bindSource := source

	if bind, _, _, _ := MakeBindOptsSensitive(options, sensitiveOptions); bind {
		bindSource = NormalizeWindowsPath(source)
	} else {
		allOptions := []string{}
		allOptions = append(allOptions, options...)
		allOptions = append(allOptions, sensitiveOptions...)
		if len(allOptions) < 2 {
			return fmt.Errorf("mount options(%q) should have at least 2 options, current number:%d, source:%q, target:%q",
				sanitizedOptionsForLogging, len(allOptions), source, target)
		}

		// currently only cifs mount is supported
		if strings.ToLower(fstype) != "cifs" {
			return fmt.Errorf("only cifs mount is supported now, fstype: %q, mounting source (%q), target (%q), with options (%q)", fstype, source, target, sanitizedOptionsForLogging)
		}

		// lock smb mount for the same source
		getSMBMountMutex.LockKey(source)
		defer getSMBMountMutex.UnlockKey(source)

		username := allOptions[0]
		password := allOptions[1]
		if output, err := newSMBMapping(username, password, source); err != nil {
			klog.Warningf("SMB Mapping(%s) returned with error(%v), output(%s)", source, err, string(output))
			if isSMBMappingExist(source) {
				valid, err := isValidPath(source)
				if !valid {
					if err == nil || isAccessDeniedError(err) {
						klog.V(2).Infof("SMB Mapping(%s) already exists while it's not valid, return error: %v, now begin to remove and remount", source, err)
						if output, err = removeSMBMapping(source); err != nil {
							return fmt.Errorf("Remove-SmbGlobalMapping failed: %v, output: %q", err, output)
						}
						if output, err := newSMBMapping(username, password, source); err != nil {
							return fmt.Errorf("New-SmbGlobalMapping(%s) failed: %v, output: %q", source, err, output)
						}
					}
				} else {
					klog.V(2).Infof("SMB Mapping(%s) already exists and is still valid, skip error(%v)", source, err)
				}
			} else {
				return fmt.Errorf("New-SmbGlobalMapping(%s) failed: %v, output: %q", source, err, output)
			}
		}
	}

	// There is an issue in golang where EvalSymlinks fails on Windows when passed a
	// UNC share root path without a trailing backslash.
	// Ex: \\SERVER\share will fail to resolve but \\SERVER\share\ will resolve
	// containerD on Windows calls EvalSymlinks so we'll add the backslash when making the symlink if it is missing.
	// https://github.com/golang/go/pull/42096 fixes this issue in golang but a fix will not be available until
	// golang v1.16
	mklinkSource := bindSource
	if !strings.HasSuffix(mklinkSource, "\\") {
		mklinkSource = mklinkSource + "\\"
	}

	output, err := exec.Command("cmd", "/c", "mklink", "/D", target, mklinkSource).CombinedOutput()
	if err != nil {
		klog.Errorf("mklink failed: %v, source(%q) target(%q) output: %q", err, mklinkSource, target, string(output))
		return err
	}
	klog.V(2).Infof("mklink source(%q) on target(%q) successfully, output: %q", mklinkSource, target, string(output))

	return nil
}

// do the SMB mount with username, password, remotepath
// return (output, error)
func newSMBMapping(username, password, remotepath string) (string, error) {
	if username == "" || password == "" || remotepath == "" {
		return "", fmt.Errorf("invalid parameter(username: %s, password: %s, remoteapth: %s)", username, sensitiveOptionsRemoved, remotepath)
	}

	// use PowerShell Environment Variables to store user input string to prevent command line injection
	// https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_environment_variables?view=powershell-5.1
	cmdLine := `$PWord = ConvertTo-SecureString -String $Env:smbpassword -AsPlainText -Force` +
		`;$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $Env:smbuser, $PWord` +
		`;New-SmbGlobalMapping -RemotePath $Env:smbremotepath -Credential $Credential -RequirePrivacy $true`
	cmd := exec.Command("powershell", "/c", cmdLine)
	cmd.Env = append(os.Environ(),
		fmt.Sprintf("smbuser=%s", username),
		fmt.Sprintf("smbpassword=%s", password),
		fmt.Sprintf("smbremotepath=%s", remotepath))

	output, err := cmd.CombinedOutput()
	return string(output), err
}

// check whether remotepath is already mounted
func isSMBMappingExist(remotepath string) bool {
	cmd := exec.Command("powershell", "/c", `Get-SmbGlobalMapping -RemotePath $Env:smbremotepath`)
	cmd.Env = append(os.Environ(), fmt.Sprintf("smbremotepath=%s", remotepath))
	_, err := cmd.CombinedOutput()
	return err == nil
}

// check whether remotepath is valid
// return (true, nil) if remotepath is valid
func isValidPath(remotepath string) (bool, error) {
	cmd := exec.Command("powershell", "/c", `Test-Path $Env:remoteapth`)
	cmd.Env = append(os.Environ(), fmt.Sprintf("remoteapth=%s", remotepath))
	output, err := cmd.CombinedOutput()
	if err != nil {
		return false, fmt.Errorf("returned output: %s, error: %v", string(output), err)
	}

	return strings.HasPrefix(strings.ToLower(string(output)), "true"), nil
}

func isAccessDeniedError(err error) bool {
	return err != nil && strings.Contains(strings.ToLower(err.Error()), accessDenied)
}

// remove SMB mapping
func removeSMBMapping(remotepath string) (string, error) {
	cmd := exec.Command("powershell", "/c", `Remove-SmbGlobalMapping -RemotePath $Env:smbremotepath -Force`)
	cmd.Env = append(os.Environ(), fmt.Sprintf("smbremotepath=%s", remotepath))
	output, err := cmd.CombinedOutput()
	return string(output), err
}

// Unmount unmounts the target.
func (mounter *Mounter) Unmount(target string) error {
	klog.V(4).Infof("Unmount target (%q)", target)
	target = NormalizeWindowsPath(target)
	if output, err := exec.Command("cmd", "/c", "rmdir", target).CombinedOutput(); err != nil {
		klog.Errorf("rmdir failed: %v, output: %q", err, string(output))
		return err
	}
	return nil
}

// List returns a list of all mounted filesystems. todo
func (mounter *Mounter) List() ([]MountPoint, error) {
	return []MountPoint{}, nil
}

// IsLikelyNotMountPoint determines if a directory is not a mountpoint.
func (mounter *Mounter) IsLikelyNotMountPoint(file string) (bool, error) {
	stat, err := os.Lstat(file)
	if err != nil {
		return true, err
	}

	if stat.Mode()&os.ModeSymlink != 0 {
		return false, err
	}
	return true, nil
}

// GetMountRefs : empty implementation here since there is no place to query all mount points on Windows
func (mounter *Mounter) GetMountRefs(pathname string) ([]string, error) {
	windowsPath := NormalizeWindowsPath(pathname)
	pathExists, pathErr := PathExists(windowsPath)
	if !pathExists {
		return []string{}, nil
	} else if IsCorruptedMnt(pathErr) {
		klog.Warningf("GetMountRefs found corrupted mount at %s, treating as unmounted path", windowsPath)
		return []string{}, nil
	} else if pathErr != nil {
		return nil, fmt.Errorf("error checking path %s: %v", windowsPath, pathErr)
	}
	return []string{pathname}, nil
}

func (mounter *SafeFormatAndMount) formatAndMountSensitive(source string, target string, fstype string, options []string, sensitiveOptions []string) error {
	// Try to mount the disk
	klog.V(4).Infof("Attempting to formatAndMount disk: %s %s %s", fstype, source, target)

	if err := ValidateDiskNumber(source); err != nil {
		klog.Errorf("diskMount: formatAndMount failed, err: %v", err)
		return err
	}

	if len(fstype) == 0 {
		// Use 'NTFS' as the default
		fstype = "NTFS"
	}

	// format disk if it is unformatted(raw)
	cmd := fmt.Sprintf("Get-Disk -Number %s | Where partitionstyle -eq 'raw' | Initialize-Disk -PartitionStyle GPT -PassThru"+
		" | New-Partition -UseMaximumSize | Format-Volume -FileSystem %s -Confirm:$false", source, fstype)
	if output, err := mounter.Exec.Command("powershell", "/c", cmd).CombinedOutput(); err != nil {
		return fmt.Errorf("diskMount: format disk failed, error: %v, output: %q", err, string(output))
	}
	klog.V(4).Infof("diskMount: Disk successfully formatted, disk: %q, fstype: %q", source, fstype)

	volumeIds, err := listVolumesOnDisk(source)
	if err != nil {
		return err
	}
	driverPath := volumeIds[0]
	target = NormalizeWindowsPath(target)
	output, err := mounter.Exec.Command("cmd", "/c", "mklink", "/D", target, driverPath).CombinedOutput()
	if err != nil {
		klog.Errorf("mklink(%s, %s) failed: %v, output: %q", target, driverPath, err, string(output))
		return err
	}
	klog.V(2).Infof("formatAndMount disk(%s) fstype(%s) on(%s) with output(%s) successfully", driverPath, fstype, target, string(output))
	return nil
}

// ListVolumesOnDisk - returns back list of volumes(volumeIDs) in the disk (requested in diskID).
func listVolumesOnDisk(diskID string) (volumeIDs []string, err error) {
	cmd := fmt.Sprintf("(Get-Disk -DeviceId %s | Get-Partition | Get-Volume).UniqueId", diskID)
	output, err := exec.Command("powershell", "/c", cmd).CombinedOutput()
	klog.V(4).Infof("listVolumesOnDisk id from %s: %s", diskID, string(output))
	if err != nil {
		return []string{}, fmt.Errorf("error list volumes on disk. cmd: %s, output: %s, error: %v", cmd, string(output), err)
	}

	volumeIds := strings.Split(strings.TrimSpace(string(output)), "\r\n")
	return volumeIds, nil
}

// getAllParentLinks walks all symbolic links and return all the parent targets recursively
func getAllParentLinks(path string) ([]string, error) {
	const maxIter = 255
	links := []string{}
	for {
		links = append(links, path)
		if len(links) > maxIter {
			return links, fmt.Errorf("unexpected length of parent links: %v", links)
		}

		fi, err := os.Lstat(path)
		if err != nil {
			return links, fmt.Errorf("Lstat: %v", err)
		}
		if fi.Mode()&os.ModeSymlink == 0 {
			break
		}

		path, err = os.Readlink(path)
		if err != nil {
			return links, fmt.Errorf("Readlink error: %v", err)
		}
	}

	return links, nil
}
  0707010000105F000081A4000000000000000000000001645E367C00001D71000000000000000000000000000000000000004000000000elemental-cli-0.3.1/vendor/k8s.io/mount-utils/resizefs_linux.go   //go:build linux
// +build linux

/*
Copyright 2021 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package mount

import (
	"fmt"
	"strconv"
	"strings"

	"k8s.io/klog/v2"
	utilexec "k8s.io/utils/exec"
)

// ResizeFs Provides support for resizing file systems
type ResizeFs struct {
	exec utilexec.Interface
}

// NewResizeFs returns new instance of resizer
func NewResizeFs(exec utilexec.Interface) *ResizeFs {
	return &ResizeFs{exec: exec}
}

// Resize perform resize of file system
func (resizefs *ResizeFs) Resize(devicePath string, deviceMountPath string) (bool, error) {
	format, err := getDiskFormat(resizefs.exec, devicePath)

	if err != nil {
		formatErr := fmt.Errorf("ResizeFS.Resize - error checking format for device %s: %v", devicePath, err)
		return false, formatErr
	}

	// If disk has no format, there is no need to resize the disk because mkfs.*
	// by default will use whole disk anyways.
	if format == "" {
		return false, nil
	}

	klog.V(3).Infof("ResizeFS.Resize - Expanding mounted volume %s", devicePath)
	switch format {
	case "ext3", "ext4":
		return resizefs.extResize(devicePath)
	case "xfs":
		return resizefs.xfsResize(deviceMountPath)
	case "btrfs":
		return resizefs.btrfsResize(deviceMountPath)
	}
	return false, fmt.Errorf("ResizeFS.Resize - resize of format %s is not supported for device %s mounted at %s", format, devicePath, deviceMountPath)
}

func (resizefs *ResizeFs) extResize(devicePath string) (bool, error) {
	output, err := resizefs.exec.Command("resize2fs", devicePath).CombinedOutput()
	if err == nil {
		klog.V(2).Infof("Device %s resized successfully", devicePath)
		return true, nil
	}

	resizeError := fmt.Errorf("resize of device %s failed: %v. resize2fs output: %s", devicePath, err, string(output))
	return false, resizeError

}

func (resizefs *ResizeFs) xfsResize(deviceMountPath string) (bool, error) {
	args := []string{"-d", deviceMountPath}
	output, err := resizefs.exec.Command("xfs_growfs", args...).CombinedOutput()

	if err == nil {
		klog.V(2).Infof("Device %s resized successfully", deviceMountPath)
		return true, nil
	}

	resizeError := fmt.Errorf("resize of device %s failed: %v. xfs_growfs output: %s", deviceMountPath, err, string(output))
	return false, resizeError
}

func (resizefs *ResizeFs) btrfsResize(deviceMountPath string) (bool, error) {
	args := []string{"filesystem", "resize", "max", deviceMountPath}
	output, err := resizefs.exec.Command("btrfs", args...).CombinedOutput()

	if err == nil {
		klog.V(2).Infof("Device %s resized successfully", deviceMountPath)
		return true, nil
	}

	resizeError := fmt.Errorf("resize of device %s failed: %v. btrfs output: %s", deviceMountPath, err, string(output))
	return false, resizeError
}

func (resizefs *ResizeFs) NeedResize(devicePath string, deviceMountPath string) (bool, error) {
	deviceSize, err := resizefs.getDeviceSize(devicePath)
	if err != nil {
		return false, err
	}
	var fsSize, blockSize uint64
	format, err := getDiskFormat(resizefs.exec, devicePath)
	if err != nil {
		formatErr := fmt.Errorf("ResizeFS.Resize - error checking format for device %s: %v", devicePath, err)
		return false, formatErr
	}

	// If disk has no format, there is no need to resize the disk because mkfs.*
	// by default will use whole disk anyways.
	if format == "" {
		return false, nil
	}

	klog.V(3).Infof("ResizeFs.needResize - checking mounted volume %s", devicePath)
	switch format {
	case "ext3", "ext4":
		blockSize, fsSize, err = resizefs.getExtSize(devicePath)
		klog.V(5).Infof("Ext size: filesystem size=%d, block size=%d", fsSize, blockSize)
	case "xfs":
		blockSize, fsSize, err = resizefs.getXFSSize(deviceMountPath)
		klog.V(5).Infof("Xfs size: filesystem size=%d, block size=%d, err=%v", fsSize, blockSize, err)
	default:
		klog.Errorf("Not able to parse given filesystem info. fsType: %s, will not resize", format)
		return false, fmt.Errorf("Could not parse fs info on given filesystem format: %s. Supported fs types are: xfs, ext3, ext4", format)
	}
	if err != nil {
		return false, err
	}
	// Tolerate one block difference, just in case of rounding errors somewhere.
	klog.V(5).Infof("Volume %s: device size=%d, filesystem size=%d, block size=%d", devicePath, deviceSize, fsSize, blockSize)
	if deviceSize <= fsSize+blockSize {
		return false, nil
	}
	return true, nil
}
func (resizefs *ResizeFs) getDeviceSize(devicePath string) (uint64, error) {
	output, err := resizefs.exec.Command("blockdev", "--getsize64", devicePath).CombinedOutput()
	outStr := strings.TrimSpace(string(output))
	if err != nil {
		return 0, fmt.Errorf("failed to read size of device %s: %s: %s", devicePath, err, outStr)
	}
	size, err := strconv.ParseUint(outStr, 10, 64)
	if err != nil {
		return 0, fmt.Errorf("failed to parse size of device %s %s: %s", devicePath, outStr, err)
	}
	return size, nil
}

func (resizefs *ResizeFs) getExtSize(devicePath string) (uint64, uint64, error) {
	output, err := resizefs.exec.Command("dumpe2fs", "-h", devicePath).CombinedOutput()
	if err != nil {
		return 0, 0, fmt.Errorf("failed to read size of filesystem on %s: %s: %s", devicePath, err, string(output))
	}

	blockSize, blockCount, _ := resizefs.parseFsInfoOutput(string(output), ":", "block size", "block count")

	if blockSize == 0 {
		return 0, 0, fmt.Errorf("could not find block size of device %s", devicePath)
	}
	if blockCount == 0 {
		return 0, 0, fmt.Errorf("could not find block count of device %s", devicePath)
	}
	return blockSize, blockSize * blockCount, nil
}

func (resizefs *ResizeFs) getXFSSize(devicePath string) (uint64, uint64, error) {
	output, err := resizefs.exec.Command("xfs_io", "-c", "statfs", devicePath).CombinedOutput()
	if err != nil {
		return 0, 0, fmt.Errorf("failed to read size of filesystem on %s: %s: %s", devicePath, err, string(output))
	}

	blockSize, blockCount, _ := resizefs.parseFsInfoOutput(string(output), "=", "geom.bsize", "geom.datablocks")

	if blockSize == 0 {
		return 0, 0, fmt.Errorf("could not find block size of device %s", devicePath)
	}
	if blockCount == 0 {
		return 0, 0, fmt.Errorf("could not find block count of device %s", devicePath)
	}
	return blockSize, blockSize * blockCount, nil
}

func (resizefs *ResizeFs) parseFsInfoOutput(cmdOutput string, spliter string, blockSizeKey string, blockCountKey string) (uint64, uint64, error) {
	lines := strings.Split(cmdOutput, "\n")
	var blockSize, blockCount uint64
	var err error

	for _, line := range lines {
		tokens := strings.Split(line, spliter)
		if len(tokens) != 2 {
			continue
		}
		key, value := strings.ToLower(strings.TrimSpace(tokens[0])), strings.ToLower(strings.TrimSpace(tokens[1]))
		if key == blockSizeKey {
			blockSize, err = strconv.ParseUint(value, 10, 64)
			if err != nil {
				return 0, 0, fmt.Errorf("failed to parse block size %s: %s", value, err)
			}
		}
		if key == blockCountKey {
			blockCount, err = strconv.ParseUint(value, 10, 64)
			if err != nil {
				return 0, 0, fmt.Errorf("failed to parse block count %s: %s", value, err)
			}
		}
	}
	return blockSize, blockCount, err
}
   07070100001060000081A4000000000000000000000001645E367C0000045A000000000000000000000000000000000000004600000000elemental-cli-0.3.1/vendor/k8s.io/mount-utils/resizefs_unsupported.go //go:build !linux
// +build !linux

/*
Copyright 2021 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package mount

import (
	"fmt"

	utilexec "k8s.io/utils/exec"
)

// ResizeFs Provides support for resizing file systems
type ResizeFs struct {
	exec utilexec.Interface
}

// NewResizeFs returns new instance of resizer
func NewResizeFs(exec utilexec.Interface) *ResizeFs {
	return &ResizeFs{exec: exec}
}

// Resize perform resize of file system
func (resizefs *ResizeFs) Resize(devicePath string, deviceMountPath string) (bool, error) {
	return false, fmt.Errorf("Resize is not supported for this build")
}
  07070100001061000041ED000000000000000000000005645E367C00000000000000000000000000000000000000000000002800000000elemental-cli-0.3.1/vendor/k8s.io/utils   07070100001062000081A4000000000000000000000001645E367C00002C5E000000000000000000000000000000000000003000000000elemental-cli-0.3.1/vendor/k8s.io/utils/LICENSE   
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
  07070100001063000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000002D00000000elemental-cli-0.3.1/vendor/k8s.io/utils/exec  07070100001064000081A4000000000000000000000001645E367C000000A8000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/k8s.io/utils/exec/README.md    # Exec

This package provides an interface for `os/exec`. It makes it easier to mock
and replace in tests, especially with the [FakeExec](testing/fake_exec.go)
struct.
07070100001065000081A4000000000000000000000001645E367C000002C1000000000000000000000000000000000000003400000000elemental-cli-0.3.1/vendor/k8s.io/utils/exec/doc.go   /*
Copyright 2017 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

// Package exec provides an injectable interface and implementations for running commands.
package exec // import "k8s.io/utils/exec"
   07070100001066000081A4000000000000000000000001645E367C00001B1D000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/k8s.io/utils/exec/exec.go  /*
Copyright 2017 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package exec

import (
	"context"
	"io"
	"io/fs"
	osexec "os/exec"
	"syscall"
	"time"
)

// ErrExecutableNotFound is returned if the executable is not found.
var ErrExecutableNotFound = osexec.ErrNotFound

// Interface is an interface that presents a subset of the os/exec API. Use this
// when you want to inject fakeable/mockable exec behavior.
type Interface interface {
	// Command returns a Cmd instance which can be used to run a single command.
	// This follows the pattern of package os/exec.
	Command(cmd string, args ...string) Cmd

	// CommandContext returns a Cmd instance which can be used to run a single command.
	//
	// The provided context is used to kill the process if the context becomes done
	// before the command completes on its own. For example, a timeout can be set in
	// the context.
	CommandContext(ctx context.Context, cmd string, args ...string) Cmd

	// LookPath wraps os/exec.LookPath
	LookPath(file string) (string, error)
}

// Cmd is an interface that presents an API that is very similar to Cmd from os/exec.
// As more functionality is needed, this can grow. Since Cmd is a struct, we will have
// to replace fields with get/set method pairs.
type Cmd interface {
	// Run runs the command to the completion.
	Run() error
	// CombinedOutput runs the command and returns its combined standard output
	// and standard error. This follows the pattern of package os/exec.
	CombinedOutput() ([]byte, error)
	// Output runs the command and returns standard output, but not standard err
	Output() ([]byte, error)
	SetDir(dir string)
	SetStdin(in io.Reader)
	SetStdout(out io.Writer)
	SetStderr(out io.Writer)
	SetEnv(env []string)

	// StdoutPipe and StderrPipe for getting the process' Stdout and Stderr as
	// Readers
	StdoutPipe() (io.ReadCloser, error)
	StderrPipe() (io.ReadCloser, error)

	// Start and Wait are for running a process non-blocking
	Start() error
	Wait() error

	// Stops the command by sending SIGTERM. It is not guaranteed the
	// process will stop before this function returns. If the process is not
	// responding, an internal timer function will send a SIGKILL to force
	// terminate after 10 seconds.
	Stop()
}

// ExitError is an interface that presents an API similar to os.ProcessState, which is
// what ExitError from os/exec is. This is designed to make testing a bit easier and
// probably loses some of the cross-platform properties of the underlying library.
type ExitError interface {
	String() string
	Error() string
	Exited() bool
	ExitStatus() int
}

// Implements Interface in terms of really exec()ing.
type executor struct{}

// New returns a new Interface which will os/exec to run commands.
func New() Interface {
	return &executor{}
}

// Command is part of the Interface interface.
func (executor *executor) Command(cmd string, args ...string) Cmd {
	return (*cmdWrapper)(maskErrDotCmd(osexec.Command(cmd, args...)))
}

// CommandContext is part of the Interface interface.
func (executor *executor) CommandContext(ctx context.Context, cmd string, args ...string) Cmd {
	return (*cmdWrapper)(maskErrDotCmd(osexec.CommandContext(ctx, cmd, args...)))
}

// LookPath is part of the Interface interface
func (executor *executor) LookPath(file string) (string, error) {
	path, err := osexec.LookPath(file)
	return path, handleError(maskErrDot(err))
}

// Wraps exec.Cmd so we can capture errors.
type cmdWrapper osexec.Cmd

var _ Cmd = &cmdWrapper{}

func (cmd *cmdWrapper) SetDir(dir string) {
	cmd.Dir = dir
}

func (cmd *cmdWrapper) SetStdin(in io.Reader) {
	cmd.Stdin = in
}

func (cmd *cmdWrapper) SetStdout(out io.Writer) {
	cmd.Stdout = out
}

func (cmd *cmdWrapper) SetStderr(out io.Writer) {
	cmd.Stderr = out
}

func (cmd *cmdWrapper) SetEnv(env []string) {
	cmd.Env = env
}

func (cmd *cmdWrapper) StdoutPipe() (io.ReadCloser, error) {
	r, err := (*osexec.Cmd)(cmd).StdoutPipe()
	return r, handleError(err)
}

func (cmd *cmdWrapper) StderrPipe() (io.ReadCloser, error) {
	r, err := (*osexec.Cmd)(cmd).StderrPipe()
	return r, handleError(err)
}

func (cmd *cmdWrapper) Start() error {
	err := (*osexec.Cmd)(cmd).Start()
	return handleError(err)
}

func (cmd *cmdWrapper) Wait() error {
	err := (*osexec.Cmd)(cmd).Wait()
	return handleError(err)
}

// Run is part of the Cmd interface.
func (cmd *cmdWrapper) Run() error {
	err := (*osexec.Cmd)(cmd).Run()
	return handleError(err)
}

// CombinedOutput is part of the Cmd interface.
func (cmd *cmdWrapper) CombinedOutput() ([]byte, error) {
	out, err := (*osexec.Cmd)(cmd).CombinedOutput()
	return out, handleError(err)
}

func (cmd *cmdWrapper) Output() ([]byte, error) {
	out, err := (*osexec.Cmd)(cmd).Output()
	return out, handleError(err)
}

// Stop is part of the Cmd interface.
func (cmd *cmdWrapper) Stop() {
	c := (*osexec.Cmd)(cmd)

	if c.Process == nil {
		return
	}

	c.Process.Signal(syscall.SIGTERM)

	time.AfterFunc(10*time.Second, func() {
		if !c.ProcessState.Exited() {
			c.Process.Signal(syscall.SIGKILL)
		}
	})
}

func handleError(err error) error {
	if err == nil {
		return nil
	}

	switch e := err.(type) {
	case *osexec.ExitError:
		return &ExitErrorWrapper{e}
	case *fs.PathError:
		return ErrExecutableNotFound
	case *osexec.Error:
		if e.Err == osexec.ErrNotFound {
			return ErrExecutableNotFound
		}
	}

	return err
}

// ExitErrorWrapper is an implementation of ExitError in terms of os/exec ExitError.
// Note: standard exec.ExitError is type *os.ProcessState, which already implements Exited().
type ExitErrorWrapper struct {
	*osexec.ExitError
}

var _ ExitError = &ExitErrorWrapper{}

// ExitStatus is part of the ExitError interface.
func (eew ExitErrorWrapper) ExitStatus() int {
	ws, ok := eew.Sys().(syscall.WaitStatus)
	if !ok {
		panic("can't call ExitStatus() on a non-WaitStatus exitErrorWrapper")
	}
	return ws.ExitStatus()
}

// CodeExitError is an implementation of ExitError consisting of an error object
// and an exit code (the upper bits of os.exec.ExitStatus).
type CodeExitError struct {
	Err  error
	Code int
}

var _ ExitError = CodeExitError{}

func (e CodeExitError) Error() string {
	return e.Err.Error()
}

func (e CodeExitError) String() string {
	return e.Err.Error()
}

// Exited is to check if the process has finished
func (e CodeExitError) Exited() bool {
	return true
}

// ExitStatus is for checking the error code
func (e CodeExitError) ExitStatus() int {
	return e.Code
}
   07070100001067000081A4000000000000000000000001645E367C000002FF000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/k8s.io/utils/exec/fixup_go118.go   //go:build !go1.19
// +build !go1.19

/*
Copyright 2022 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package exec

import (
	osexec "os/exec"
)

func maskErrDotCmd(cmd *osexec.Cmd) *osexec.Cmd {
	return cmd
}

func maskErrDot(err error) error {
	return err
}
 07070100001068000081A4000000000000000000000001645E367C00000437000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/k8s.io/utils/exec/fixup_go119.go   //go:build go1.19
// +build go1.19

/*
Copyright 2022 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package exec

import (
	"errors"
	osexec "os/exec"
)

// maskErrDotCmd reverts the behavior of osexec.Cmd to what it was before go1.19
// specifically set the Err field to nil (LookPath returns a new error when the file
// is resolved to the current directory.
func maskErrDotCmd(cmd *osexec.Cmd) *osexec.Cmd {
	cmd.Err = maskErrDot(cmd.Err)
	return cmd
}

func maskErrDot(err error) error {
	if err != nil && errors.Is(err, osexec.ErrDot) {
		return nil
	}
	return err
}
 07070100001069000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000002B00000000elemental-cli-0.3.1/vendor/k8s.io/utils/io    0707010000106A000081A4000000000000000000000001645E367C00000086000000000000000000000000000000000000003500000000elemental-cli-0.3.1/vendor/k8s.io/utils/io/README.md  # IO

This package provides interfaces for working with file IO. Currently it
provides functionality for consistently reading a file.
  0707010000106B000081A4000000000000000000000001645E367C00000BA6000000000000000000000000000000000000003300000000elemental-cli-0.3.1/vendor/k8s.io/utils/io/read.go    /*
Copyright 2017 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package io

import (
	"bytes"
	"errors"
	"fmt"
	"io"
	"io/ioutil"
)

// ErrLimitReached means that the read limit is reached.
var ErrLimitReached = errors.New("the read limit is reached")

// ConsistentRead repeatedly reads a file until it gets the same content twice.
// This is useful when reading files in /proc that are larger than page size
// and kernel may modify them between individual read() syscalls.
// It returns InconsistentReadError when it cannot get a consistent read in
// given nr. of attempts. Caller should retry, kernel is probably under heavy
// mount/unmount load.
func ConsistentRead(filename string, attempts int) ([]byte, error) {
	return consistentReadSync(filename, attempts, nil)
}

// consistentReadSync is the main functionality of ConsistentRead but
// introduces a sync callback that can be used by the tests to mutate the file
// from which the test data is being read
func consistentReadSync(filename string, attempts int, sync func(int)) ([]byte, error) {
	oldContent, err := ioutil.ReadFile(filename)
	if err != nil {
		return nil, err
	}
	for i := 0; i < attempts; i++ {
		if sync != nil {
			sync(i)
		}
		newContent, err := ioutil.ReadFile(filename)
		if err != nil {
			return nil, err
		}
		if bytes.Compare(oldContent, newContent) == 0 {
			return newContent, nil
		}
		// Files are different, continue reading
		oldContent = newContent
	}
	return nil, InconsistentReadError{filename, attempts}
}

// InconsistentReadError is returned from ConsistentRead when it cannot get
// a consistent read in given nr. of attempts. Caller should retry, kernel is
// probably under heavy mount/unmount load.
type InconsistentReadError struct {
	filename string
	attempts int
}

func (i InconsistentReadError) Error() string {
	return fmt.Sprintf("could not get consistent content of %s after %d attempts", i.filename, i.attempts)
}

var _ error = InconsistentReadError{}

func IsInconsistentReadError(err error) bool {
	if _, ok := err.(InconsistentReadError); ok {
		return true
	}
	return false
}

// ReadAtMost reads up to `limit` bytes from `r`, and reports an error
// when `limit` bytes are read.
func ReadAtMost(r io.Reader, limit int64) ([]byte, error) {
	limitedReader := &io.LimitedReader{R: r, N: limit}
	data, err := ioutil.ReadAll(limitedReader)
	if err != nil {
		return data, err
	}
	if limitedReader.N <= 0 {
		return data, ErrLimitReached
	}
	return data, nil
}
  0707010000106C000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003100000000elemental-cli-0.3.1/vendor/k8s.io/utils/keymutex  0707010000106D000081A4000000000000000000000001645E367C00000627000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/k8s.io/utils/keymutex/hashed.go    /*
Copyright 2018 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package keymutex

import (
	"hash/fnv"
	"runtime"
	"sync"
)

// NewHashed returns a new instance of KeyMutex which hashes arbitrary keys to
// a fixed set of locks. `n` specifies number of locks, if n <= 0, we use
// number of cpus.
// Note that because it uses fixed set of locks, different keys may share same
// lock, so it's possible to wait on same lock.
func NewHashed(n int) KeyMutex {
	if n <= 0 {
		n = runtime.NumCPU()
	}
	return &hashedKeyMutex{
		mutexes: make([]sync.Mutex, n),
	}
}

type hashedKeyMutex struct {
	mutexes []sync.Mutex
}

// Acquires a lock associated with the specified ID.
func (km *hashedKeyMutex) LockKey(id string) {
	km.mutexes[km.hash(id)%uint32(len(km.mutexes))].Lock()
}

// Releases the lock associated with the specified ID.
func (km *hashedKeyMutex) UnlockKey(id string) error {
	km.mutexes[km.hash(id)%uint32(len(km.mutexes))].Unlock()
	return nil
}

func (km *hashedKeyMutex) hash(id string) uint32 {
	h := fnv.New32a()
	h.Write([]byte(id))
	return h.Sum32()
}
 0707010000106E000081A4000000000000000000000001645E367C000003C0000000000000000000000000000000000000003D00000000elemental-cli-0.3.1/vendor/k8s.io/utils/keymutex/keymutex.go  /*
Copyright 2015 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package keymutex

// KeyMutex is a thread-safe interface for acquiring locks on arbitrary strings.
type KeyMutex interface {
	// Acquires a lock associated with the specified ID, creates the lock if one doesn't already exist.
	LockKey(id string)

	// Releases the lock associated with the specified ID.
	// Returns an error if the specified ID doesn't exist.
	UnlockKey(id string) error
}
0707010000106F000081A4000000000000000000000001645E367C0000635C000000000000000000000000000000000000002700000000elemental-cli-0.3.1/vendor/modules.txt    # github.com/Masterminds/goutils v1.1.1
## explicit
github.com/Masterminds/goutils
# github.com/Masterminds/semver/v3 v3.2.1
## explicit; go 1.18
github.com/Masterminds/semver/v3
# github.com/Masterminds/sprig/v3 v3.2.3
## explicit; go 1.13
github.com/Masterminds/sprig/v3
# github.com/Microsoft/go-winio v0.6.1
## explicit; go 1.17
github.com/Microsoft/go-winio
github.com/Microsoft/go-winio/backuptar
github.com/Microsoft/go-winio/internal/fs
github.com/Microsoft/go-winio/internal/socket
github.com/Microsoft/go-winio/internal/stringbuffer
github.com/Microsoft/go-winio/pkg/guid
# github.com/Microsoft/hcsshim v0.10.0-rc.7
## explicit; go 1.18
github.com/Microsoft/hcsshim/internal/hcs/schema2
github.com/Microsoft/hcsshim/internal/hcserror
github.com/Microsoft/hcsshim/internal/interop
github.com/Microsoft/hcsshim/internal/log
github.com/Microsoft/hcsshim/internal/logfields
github.com/Microsoft/hcsshim/internal/longpath
github.com/Microsoft/hcsshim/internal/oc
github.com/Microsoft/hcsshim/internal/protocol/guestrequest
github.com/Microsoft/hcsshim/internal/safefile
github.com/Microsoft/hcsshim/internal/wclayer
github.com/Microsoft/hcsshim/internal/winapi
github.com/Microsoft/hcsshim/osversion
github.com/Microsoft/hcsshim/pkg/ociwclayer
# github.com/ProtonMail/go-crypto v0.0.0-20220623141421-5afb4c282135
## explicit; go 1.13
github.com/ProtonMail/go-crypto/bitcurves
github.com/ProtonMail/go-crypto/brainpool
github.com/ProtonMail/go-crypto/eax
github.com/ProtonMail/go-crypto/internal/byteutil
github.com/ProtonMail/go-crypto/ocb
github.com/ProtonMail/go-crypto/openpgp
github.com/ProtonMail/go-crypto/openpgp/aes/keywrap
github.com/ProtonMail/go-crypto/openpgp/armor
github.com/ProtonMail/go-crypto/openpgp/ecdh
github.com/ProtonMail/go-crypto/openpgp/elgamal
github.com/ProtonMail/go-crypto/openpgp/errors
github.com/ProtonMail/go-crypto/openpgp/internal/algorithm
github.com/ProtonMail/go-crypto/openpgp/internal/ecc
github.com/ProtonMail/go-crypto/openpgp/internal/encoding
github.com/ProtonMail/go-crypto/openpgp/packet
github.com/ProtonMail/go-crypto/openpgp/s2k
# github.com/StackExchange/wmi v1.2.1
## explicit; go 1.13
github.com/StackExchange/wmi
# github.com/acomagu/bufpipe v1.0.3
## explicit; go 1.12
github.com/acomagu/bufpipe
# github.com/canonical/go-efilib v0.3.1-0.20220324150059-04e254148b45
## explicit; go 1.13
github.com/canonical/go-efilib
github.com/canonical/go-efilib/internal/ioerr
github.com/canonical/go-efilib/internal/pe1.14
github.com/canonical/go-efilib/internal/uefi
github.com/canonical/go-efilib/internal/unix
github.com/canonical/go-efilib/linux
github.com/canonical/go-efilib/mbr
# github.com/cavaliergopher/grab v2.0.0+incompatible
## explicit
github.com/cavaliergopher/grab
# github.com/cavaliergopher/grab/v3 v3.0.1
## explicit; go 1.14
github.com/cavaliergopher/grab/v3
github.com/cavaliergopher/grab/v3/pkg/bps
# github.com/containerd/cgroups v1.1.0
## explicit; go 1.17
github.com/containerd/cgroups/stats/v1
# github.com/containerd/containerd v1.7.0
## explicit; go 1.19
github.com/containerd/containerd/archive
github.com/containerd/containerd/archive/tarheader
github.com/containerd/containerd/log
github.com/containerd/containerd/pkg/epoch
github.com/containerd/containerd/pkg/userns
# github.com/containerd/continuity v0.3.0
## explicit; go 1.17
github.com/containerd/continuity/fs
github.com/containerd/continuity/sysx
# github.com/containerd/stargz-snapshotter/estargz v0.14.3
## explicit; go 1.19
github.com/containerd/stargz-snapshotter/estargz
github.com/containerd/stargz-snapshotter/estargz/errorutil
# github.com/cpuguy83/go-md2man/v2 v2.0.2
## explicit; go 1.11
github.com/cpuguy83/go-md2man/v2/md2man
# github.com/davidcassany/linuxkit/pkg/metadata v0.0.0-20230124104020-93ac9dd5b8e1
## explicit; go 1.14
# github.com/denisbrodbeck/machineid v1.0.1
## explicit
github.com/denisbrodbeck/machineid
# github.com/diskfs/go-diskfs v1.3.0
## explicit; go 1.16
github.com/diskfs/go-diskfs
github.com/diskfs/go-diskfs/disk
github.com/diskfs/go-diskfs/filesystem
github.com/diskfs/go-diskfs/filesystem/fat32
github.com/diskfs/go-diskfs/filesystem/iso9660
github.com/diskfs/go-diskfs/filesystem/squashfs
github.com/diskfs/go-diskfs/partition
github.com/diskfs/go-diskfs/partition/gpt
github.com/diskfs/go-diskfs/partition/mbr
github.com/diskfs/go-diskfs/partition/part
github.com/diskfs/go-diskfs/util
# github.com/distribution/distribution v2.8.1+incompatible
## explicit
github.com/distribution/distribution/reference
github.com/distribution/distribution/uuid
# github.com/docker/cli v23.0.4+incompatible
## explicit
github.com/docker/cli/cli/config
github.com/docker/cli/cli/config/configfile
github.com/docker/cli/cli/config/credentials
github.com/docker/cli/cli/config/types
# github.com/docker/distribution v2.8.2+incompatible
## explicit
github.com/docker/distribution/digestset
github.com/docker/distribution/reference
github.com/docker/distribution/registry/client/auth/challenge
# github.com/docker/docker v23.0.4+incompatible
## explicit
github.com/docker/docker/api
github.com/docker/docker/api/types
github.com/docker/docker/api/types/blkiodev
github.com/docker/docker/api/types/container
github.com/docker/docker/api/types/events
github.com/docker/docker/api/types/filters
github.com/docker/docker/api/types/image
github.com/docker/docker/api/types/mount
github.com/docker/docker/api/types/network
github.com/docker/docker/api/types/registry
github.com/docker/docker/api/types/strslice
github.com/docker/docker/api/types/swarm
github.com/docker/docker/api/types/swarm/runtime
github.com/docker/docker/api/types/time
github.com/docker/docker/api/types/versions
github.com/docker/docker/api/types/volume
github.com/docker/docker/client
github.com/docker/docker/errdefs
github.com/docker/docker/pkg/homedir
# github.com/docker/docker-credential-helpers v0.7.0
## explicit; go 1.18
github.com/docker/docker-credential-helpers/client
github.com/docker/docker-credential-helpers/credentials
# github.com/docker/go-connections v0.4.0
## explicit
github.com/docker/go-connections/nat
github.com/docker/go-connections/sockets
github.com/docker/go-connections/tlsconfig
# github.com/docker/go-units v0.5.0
## explicit
github.com/docker/go-units
# github.com/emirpasic/gods v1.18.1
## explicit; go 1.2
github.com/emirpasic/gods/containers
github.com/emirpasic/gods/lists
github.com/emirpasic/gods/lists/arraylist
github.com/emirpasic/gods/trees
github.com/emirpasic/gods/trees/binaryheap
github.com/emirpasic/gods/utils
# github.com/fsnotify/fsnotify v1.6.0
## explicit; go 1.16
github.com/fsnotify/fsnotify
# github.com/ghodss/yaml v1.0.0
## explicit
github.com/ghodss/yaml
# github.com/go-git/gcfg v1.5.0
## explicit
github.com/go-git/gcfg
github.com/go-git/gcfg/scanner
github.com/go-git/gcfg/token
github.com/go-git/gcfg/types
# github.com/go-git/go-billy/v5 v5.3.1
## explicit; go 1.13
github.com/go-git/go-billy/v5
github.com/go-git/go-billy/v5/helper/chroot
github.com/go-git/go-billy/v5/helper/polyfill
github.com/go-git/go-billy/v5/memfs
github.com/go-git/go-billy/v5/osfs
github.com/go-git/go-billy/v5/util
# github.com/go-git/go-git/v5 v5.4.2
## explicit; go 1.13
github.com/go-git/go-git/v5
github.com/go-git/go-git/v5/config
github.com/go-git/go-git/v5/internal/revision
github.com/go-git/go-git/v5/internal/url
github.com/go-git/go-git/v5/plumbing
github.com/go-git/go-git/v5/plumbing/cache
github.com/go-git/go-git/v5/plumbing/color
github.com/go-git/go-git/v5/plumbing/filemode
github.com/go-git/go-git/v5/plumbing/format/config
github.com/go-git/go-git/v5/plumbing/format/diff
github.com/go-git/go-git/v5/plumbing/format/gitignore
github.com/go-git/go-git/v5/plumbing/format/idxfile
github.com/go-git/go-git/v5/plumbing/format/index
github.com/go-git/go-git/v5/plumbing/format/objfile
github.com/go-git/go-git/v5/plumbing/format/packfile
github.com/go-git/go-git/v5/plumbing/format/pktline
github.com/go-git/go-git/v5/plumbing/object
github.com/go-git/go-git/v5/plumbing/protocol/packp
github.com/go-git/go-git/v5/plumbing/protocol/packp/capability
github.com/go-git/go-git/v5/plumbing/protocol/packp/sideband
github.com/go-git/go-git/v5/plumbing/revlist
github.com/go-git/go-git/v5/plumbing/storer
github.com/go-git/go-git/v5/plumbing/transport
github.com/go-git/go-git/v5/plumbing/transport/client
github.com/go-git/go-git/v5/plumbing/transport/file
github.com/go-git/go-git/v5/plumbing/transport/git
github.com/go-git/go-git/v5/plumbing/transport/http
github.com/go-git/go-git/v5/plumbing/transport/internal/common
github.com/go-git/go-git/v5/plumbing/transport/server
github.com/go-git/go-git/v5/plumbing/transport/ssh
github.com/go-git/go-git/v5/storage
github.com/go-git/go-git/v5/storage/filesystem
github.com/go-git/go-git/v5/storage/filesystem/dotgit
github.com/go-git/go-git/v5/storage/memory
github.com/go-git/go-git/v5/utils/binary
github.com/go-git/go-git/v5/utils/diff
github.com/go-git/go-git/v5/utils/ioutil
github.com/go-git/go-git/v5/utils/merkletrie
github.com/go-git/go-git/v5/utils/merkletrie/filesystem
github.com/go-git/go-git/v5/utils/merkletrie/index
github.com/go-git/go-git/v5/utils/merkletrie/internal/frame
github.com/go-git/go-git/v5/utils/merkletrie/noder
# github.com/go-logr/logr v1.2.3
## explicit; go 1.16
github.com/go-logr/logr
github.com/go-logr/logr/funcr
# github.com/go-ole/go-ole v1.2.6
## explicit; go 1.12
github.com/go-ole/go-ole
github.com/go-ole/go-ole/oleutil
# github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572
## explicit; go 1.13
github.com/go-task/slim-sprig
# github.com/gogo/protobuf v1.3.2
## explicit; go 1.15
github.com/gogo/protobuf/gogoproto
github.com/gogo/protobuf/proto
github.com/gogo/protobuf/protoc-gen-gogo/descriptor
# github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da
## explicit
github.com/golang/groupcache/lru
# github.com/google/go-cmp v0.5.9
## explicit; go 1.13
github.com/google/go-cmp/cmp
github.com/google/go-cmp/cmp/internal/diff
github.com/google/go-cmp/cmp/internal/flags
github.com/google/go-cmp/cmp/internal/function
github.com/google/go-cmp/cmp/internal/value
# github.com/google/go-containerregistry v0.14.0
## explicit; go 1.18
github.com/google/go-containerregistry/internal/and
github.com/google/go-containerregistry/internal/compression
github.com/google/go-containerregistry/internal/estargz
github.com/google/go-containerregistry/internal/gzip
github.com/google/go-containerregistry/internal/redact
github.com/google/go-containerregistry/internal/retry
github.com/google/go-containerregistry/internal/retry/wait
github.com/google/go-containerregistry/internal/verify
github.com/google/go-containerregistry/internal/zstd
github.com/google/go-containerregistry/pkg/authn
github.com/google/go-containerregistry/pkg/compression
github.com/google/go-containerregistry/pkg/logs
github.com/google/go-containerregistry/pkg/name
github.com/google/go-containerregistry/pkg/v1
github.com/google/go-containerregistry/pkg/v1/daemon
github.com/google/go-containerregistry/pkg/v1/empty
github.com/google/go-containerregistry/pkg/v1/match
github.com/google/go-containerregistry/pkg/v1/mutate
github.com/google/go-containerregistry/pkg/v1/partial
github.com/google/go-containerregistry/pkg/v1/remote
github.com/google/go-containerregistry/pkg/v1/remote/transport
github.com/google/go-containerregistry/pkg/v1/stream
github.com/google/go-containerregistry/pkg/v1/tarball
github.com/google/go-containerregistry/pkg/v1/types
# github.com/google/pprof v0.0.0-20230323073829-e72429f035bd
## explicit; go 1.19
github.com/google/pprof/profile
# github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510
## explicit; go 1.13
github.com/google/shlex
# github.com/google/uuid v1.3.0
## explicit
github.com/google/uuid
# github.com/hashicorp/errwrap v1.1.0
## explicit
github.com/hashicorp/errwrap
# github.com/hashicorp/go-multierror v1.1.1
## explicit; go 1.13
github.com/hashicorp/go-multierror
# github.com/hashicorp/hcl v1.0.0
## explicit
github.com/hashicorp/hcl
github.com/hashicorp/hcl/hcl/ast
github.com/hashicorp/hcl/hcl/parser
github.com/hashicorp/hcl/hcl/printer
github.com/hashicorp/hcl/hcl/scanner
github.com/hashicorp/hcl/hcl/strconv
github.com/hashicorp/hcl/hcl/token
github.com/hashicorp/hcl/json/parser
github.com/hashicorp/hcl/json/scanner
github.com/hashicorp/hcl/json/token
# github.com/huandu/xstrings v1.4.0
## explicit; go 1.12
github.com/huandu/xstrings
# github.com/imdario/mergo v0.3.15
## explicit; go 1.13
github.com/imdario/mergo
# github.com/inconshreveable/mousetrap v1.1.0
## explicit; go 1.18
github.com/inconshreveable/mousetrap
# github.com/itchyny/gojq v0.12.12
## explicit; go 1.18
github.com/itchyny/gojq
# github.com/itchyny/timefmt-go v0.1.5
## explicit; go 1.17
github.com/itchyny/timefmt-go
# github.com/jaypipes/ghw v0.9.1-0.20220511134554-dac2f19e1c76
## explicit; go 1.15
github.com/jaypipes/ghw
github.com/jaypipes/ghw/pkg/baseboard
github.com/jaypipes/ghw/pkg/bios
github.com/jaypipes/ghw/pkg/block
github.com/jaypipes/ghw/pkg/chassis
github.com/jaypipes/ghw/pkg/context
github.com/jaypipes/ghw/pkg/cpu
github.com/jaypipes/ghw/pkg/gpu
github.com/jaypipes/ghw/pkg/linuxdmi
github.com/jaypipes/ghw/pkg/linuxpath
github.com/jaypipes/ghw/pkg/marshal
github.com/jaypipes/ghw/pkg/memory
github.com/jaypipes/ghw/pkg/net
github.com/jaypipes/ghw/pkg/option
github.com/jaypipes/ghw/pkg/pci
github.com/jaypipes/ghw/pkg/pci/address
github.com/jaypipes/ghw/pkg/product
github.com/jaypipes/ghw/pkg/snapshot
github.com/jaypipes/ghw/pkg/topology
github.com/jaypipes/ghw/pkg/unitutil
github.com/jaypipes/ghw/pkg/util
# github.com/jaypipes/pcidb v1.0.0
## explicit; go 1.17
github.com/jaypipes/pcidb
# github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99
## explicit
github.com/jbenet/go-context/io
# github.com/joho/godotenv v1.5.1
## explicit; go 1.12
github.com/joho/godotenv
# github.com/kendru/darwin/go/depgraph v0.0.0-20221105232959-877d6a81060c
## explicit; go 1.16
github.com/kendru/darwin/go/depgraph
# github.com/kevinburke/ssh_config v1.2.0
## explicit
github.com/kevinburke/ssh_config
# github.com/klauspost/compress v1.16.5
## explicit; go 1.18
github.com/klauspost/compress
github.com/klauspost/compress/fse
github.com/klauspost/compress/huff0
github.com/klauspost/compress/internal/cpuinfo
github.com/klauspost/compress/internal/snapref
github.com/klauspost/compress/zstd
github.com/klauspost/compress/zstd/internal/xxhash
# github.com/kr/pretty v0.3.1
## explicit; go 1.12
# github.com/magiconair/properties v1.8.7
## explicit; go 1.19
github.com/magiconair/properties
# github.com/mitchellh/copystructure v1.2.0
## explicit; go 1.15
github.com/mitchellh/copystructure
# github.com/mitchellh/go-homedir v1.1.0
## explicit
github.com/mitchellh/go-homedir
# github.com/mitchellh/mapstructure v1.5.0
## explicit; go 1.14
github.com/mitchellh/mapstructure
# github.com/mitchellh/reflectwalk v1.0.2
## explicit
github.com/mitchellh/reflectwalk
# github.com/moby/moby v23.0.4+incompatible
## explicit
github.com/moby/moby/libnetwork/resolvconf
# github.com/moby/sys/sequential v0.5.0
## explicit; go 1.17
github.com/moby/sys/sequential
# github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6
## explicit; go 1.13
# github.com/mudler/entities v0.0.0-20220905203055-68348bae0f49
## explicit; go 1.12
github.com/mudler/entities/pkg/entities
# github.com/mudler/yip v1.1.0
## explicit; go 1.18
github.com/mudler/yip/pkg/executor
github.com/mudler/yip/pkg/logger
github.com/mudler/yip/pkg/plugins
github.com/mudler/yip/pkg/schema
github.com/mudler/yip/pkg/schema/cloudinit
github.com/mudler/yip/pkg/utils
# github.com/onsi/ginkgo v1.16.5
## explicit; go 1.16
# github.com/onsi/ginkgo/v2 v2.9.2
## explicit; go 1.18
github.com/onsi/ginkgo/v2
github.com/onsi/ginkgo/v2/config
github.com/onsi/ginkgo/v2/formatter
github.com/onsi/ginkgo/v2/ginkgo
github.com/onsi/ginkgo/v2/ginkgo/build
github.com/onsi/ginkgo/v2/ginkgo/command
github.com/onsi/ginkgo/v2/ginkgo/generators
github.com/onsi/ginkgo/v2/ginkgo/internal
github.com/onsi/ginkgo/v2/ginkgo/labels
github.com/onsi/ginkgo/v2/ginkgo/outline
github.com/onsi/ginkgo/v2/ginkgo/run
github.com/onsi/ginkgo/v2/ginkgo/unfocus
github.com/onsi/ginkgo/v2/ginkgo/watch
github.com/onsi/ginkgo/v2/internal
github.com/onsi/ginkgo/v2/internal/global
github.com/onsi/ginkgo/v2/internal/interrupt_handler
github.com/onsi/ginkgo/v2/internal/parallel_support
github.com/onsi/ginkgo/v2/internal/testingtproxy
github.com/onsi/ginkgo/v2/reporters
github.com/onsi/ginkgo/v2/types
# github.com/onsi/gomega v1.27.6
## explicit; go 1.18
github.com/onsi/gomega
github.com/onsi/gomega/format
github.com/onsi/gomega/internal
github.com/onsi/gomega/internal/gutil
github.com/onsi/gomega/matchers
github.com/onsi/gomega/matchers/support/goraph/bipartitegraph
github.com/onsi/gomega/matchers/support/goraph/edge
github.com/onsi/gomega/matchers/support/goraph/node
github.com/onsi/gomega/matchers/support/goraph/util
github.com/onsi/gomega/types
# github.com/opencontainers/go-digest v1.0.0
## explicit; go 1.13
github.com/opencontainers/go-digest
# github.com/opencontainers/image-spec v1.1.0-rc3
## explicit; go 1.18
github.com/opencontainers/image-spec/specs-go
github.com/opencontainers/image-spec/specs-go/v1
# github.com/packethost/packngo v0.29.0
## explicit; go 1.16
github.com/packethost/packngo/metadata
# github.com/pelletier/go-toml/v2 v2.0.7
## explicit; go 1.16
github.com/pelletier/go-toml/v2
github.com/pelletier/go-toml/v2/internal/characters
github.com/pelletier/go-toml/v2/internal/danger
github.com/pelletier/go-toml/v2/internal/tracker
github.com/pelletier/go-toml/v2/unstable
# github.com/phayes/permbits v0.0.0-20190612203442-39d7c581d2ee
## explicit
github.com/phayes/permbits
# github.com/pierrec/lz4 v2.6.1+incompatible
## explicit
github.com/pierrec/lz4
github.com/pierrec/lz4/internal/xxh32
# github.com/pkg/errors v0.9.1
## explicit
github.com/pkg/errors
# github.com/pkg/xattr v0.4.9
## explicit; go 1.14
github.com/pkg/xattr
# github.com/rancher-sandbox/linuxkit v1.0.0
## explicit; go 1.18
github.com/rancher-sandbox/linuxkit/providers
# github.com/rogpeppe/go-internal v1.10.0
## explicit; go 1.19
# github.com/russross/blackfriday/v2 v2.1.0
## explicit
github.com/russross/blackfriday/v2
# github.com/samber/lo v1.37.0
## explicit; go 1.18
github.com/samber/lo
# github.com/sanity-io/litter v1.5.5
## explicit; go 1.16
github.com/sanity-io/litter
# github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b
## explicit
github.com/satori/go.uuid
# github.com/sergi/go-diff v1.2.0
## explicit; go 1.12
github.com/sergi/go-diff/diffmatchpatch
# github.com/shopspring/decimal v1.3.1
## explicit; go 1.13
github.com/shopspring/decimal
# github.com/sirupsen/logrus v1.9.0
## explicit; go 1.13
github.com/sirupsen/logrus
# github.com/spectrocloud-labs/herd v0.4.2
## explicit; go 1.19
github.com/spectrocloud-labs/herd
# github.com/spf13/afero v1.9.5
## explicit; go 1.16
github.com/spf13/afero
github.com/spf13/afero/internal/common
github.com/spf13/afero/mem
# github.com/spf13/cast v1.5.0
## explicit; go 1.18
github.com/spf13/cast
# github.com/spf13/cobra v1.7.0
## explicit; go 1.15
github.com/spf13/cobra
github.com/spf13/cobra/doc
# github.com/spf13/jwalterweatherman v1.1.0
## explicit
github.com/spf13/jwalterweatherman
# github.com/spf13/pflag v1.0.5
## explicit; go 1.12
github.com/spf13/pflag
# github.com/spf13/viper v1.15.0
## explicit; go 1.17
github.com/spf13/viper
github.com/spf13/viper/internal/encoding
github.com/spf13/viper/internal/encoding/dotenv
github.com/spf13/viper/internal/encoding/hcl
github.com/spf13/viper/internal/encoding/ini
github.com/spf13/viper/internal/encoding/javaproperties
github.com/spf13/viper/internal/encoding/json
github.com/spf13/viper/internal/encoding/toml
github.com/spf13/viper/internal/encoding/yaml
# github.com/subosito/gotenv v1.4.2
## explicit; go 1.18
github.com/subosito/gotenv
# github.com/tredoe/osutil/v2 v2.0.0-rc.16
## explicit; go 1.16
github.com/tredoe/osutil/v2/userutil/crypt
github.com/tredoe/osutil/v2/userutil/crypt/common
github.com/tredoe/osutil/v2/userutil/crypt/sha512_crypt
# github.com/twpayne/go-vfs v1.7.2
## explicit; go 1.13
github.com/twpayne/go-vfs
github.com/twpayne/go-vfs/vfst
# github.com/ulikunitz/xz v0.5.11
## explicit; go 1.12
github.com/ulikunitz/xz
github.com/ulikunitz/xz/internal/hash
github.com/ulikunitz/xz/internal/xlog
github.com/ulikunitz/xz/lzma
# github.com/vbatts/tar-split v0.11.3
## explicit; go 1.15
github.com/vbatts/tar-split/archive/tar
# github.com/vishvananda/netlink v1.2.1-beta.2
## explicit; go 1.12
github.com/vishvananda/netlink
github.com/vishvananda/netlink/nl
# github.com/vishvananda/netns v0.0.4
## explicit; go 1.17
github.com/vishvananda/netns
# github.com/vmware/vmw-guestinfo v0.0.0-20220317130741-510905f0efa3
## explicit; go 1.12
github.com/vmware/vmw-guestinfo/bdoor
github.com/vmware/vmw-guestinfo/message
github.com/vmware/vmw-guestinfo/rpcout
github.com/vmware/vmw-guestinfo/rpcvmx
github.com/vmware/vmw-guestinfo/vmcheck
# github.com/willdonnelly/passwd v0.0.0-20141013001024-7935dab3074c
## explicit
github.com/willdonnelly/passwd
# github.com/xanzy/ssh-agent v0.3.1
## explicit; go 1.16
github.com/xanzy/ssh-agent
# github.com/zcalusic/sysinfo v0.9.5
## explicit; go 1.17
github.com/zcalusic/sysinfo
github.com/zcalusic/sysinfo/cpuid
# github.com/zloylos/grsync v1.6.1 => github.com/rancher-sandbox/grsync v1.6.2-0.20220526080038-4032e9b0e97c
## explicit; go 1.17
github.com/zloylos/grsync
# go.mozilla.org/pkcs7 v0.0.0-20210826202110-33d05740a352
## explicit; go 1.11
# go.opencensus.io v0.24.0
## explicit; go 1.13
go.opencensus.io
go.opencensus.io/internal
go.opencensus.io/trace
go.opencensus.io/trace/internal
go.opencensus.io/trace/tracestate
# golang.org/x/crypto v0.8.0
## explicit; go 1.17
golang.org/x/crypto/bcrypt
golang.org/x/crypto/blowfish
golang.org/x/crypto/cast5
golang.org/x/crypto/chacha20
golang.org/x/crypto/curve25519
golang.org/x/crypto/curve25519/internal/field
golang.org/x/crypto/ed25519
golang.org/x/crypto/internal/alias
golang.org/x/crypto/internal/poly1305
golang.org/x/crypto/pbkdf2
golang.org/x/crypto/scrypt
golang.org/x/crypto/ssh
golang.org/x/crypto/ssh/agent
golang.org/x/crypto/ssh/internal/bcrypt_pbkdf
golang.org/x/crypto/ssh/knownhosts
# golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561
## explicit; go 1.18
golang.org/x/exp/constraints
# golang.org/x/mod v0.10.0
## explicit; go 1.17
golang.org/x/mod/semver
# golang.org/x/net v0.9.0
## explicit; go 1.17
golang.org/x/net/context
golang.org/x/net/html
golang.org/x/net/html/atom
golang.org/x/net/html/charset
golang.org/x/net/internal/socks
golang.org/x/net/proxy
# golang.org/x/sync v0.1.0
## explicit
golang.org/x/sync/errgroup
# golang.org/x/sys v0.8.0
## explicit; go 1.17
golang.org/x/sys/cpu
golang.org/x/sys/execabs
golang.org/x/sys/internal/unsafeheader
golang.org/x/sys/unix
golang.org/x/sys/windows
golang.org/x/sys/windows/registry
# golang.org/x/text v0.9.0
## explicit; go 1.17
golang.org/x/text/encoding
golang.org/x/text/encoding/charmap
golang.org/x/text/encoding/htmlindex
golang.org/x/text/encoding/internal
golang.org/x/text/encoding/internal/identifier
golang.org/x/text/encoding/japanese
golang.org/x/text/encoding/korean
golang.org/x/text/encoding/simplifiedchinese
golang.org/x/text/encoding/traditionalchinese
golang.org/x/text/encoding/unicode
golang.org/x/text/internal/language
golang.org/x/text/internal/language/compact
golang.org/x/text/internal/tag
golang.org/x/text/internal/utf8internal
golang.org/x/text/language
golang.org/x/text/runes
golang.org/x/text/transform
golang.org/x/text/unicode/norm
# golang.org/x/tools v0.8.0
## explicit; go 1.18
golang.org/x/tools/cmd/stringer
golang.org/x/tools/go/ast/inspector
golang.org/x/tools/go/gcexportdata
golang.org/x/tools/go/internal/packagesdriver
golang.org/x/tools/go/packages
golang.org/x/tools/go/types/objectpath
golang.org/x/tools/internal/event
golang.org/x/tools/internal/event/core
golang.org/x/tools/internal/event/keys
golang.org/x/tools/internal/event/label
golang.org/x/tools/internal/gcimporter
golang.org/x/tools/internal/gocommand
golang.org/x/tools/internal/packagesinternal
golang.org/x/tools/internal/pkgbits
golang.org/x/tools/internal/tokeninternal
golang.org/x/tools/internal/typeparams
golang.org/x/tools/internal/typesinternal
# golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2
## explicit; go 1.17
golang.org/x/xerrors
golang.org/x/xerrors/internal
# google.golang.org/protobuf v1.30.0
## explicit; go 1.11
# gopkg.in/djherbis/times.v1 v1.3.0
## explicit
gopkg.in/djherbis/times.v1
# gopkg.in/ini.v1 v1.67.0
## explicit
gopkg.in/ini.v1
# gopkg.in/warnings.v0 v0.1.2
## explicit
gopkg.in/warnings.v0
# gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0
## explicit
gopkg.in/yaml.v1
# gopkg.in/yaml.v2 v2.4.0
## explicit; go 1.15
gopkg.in/yaml.v2
# gopkg.in/yaml.v3 v3.0.1
## explicit
gopkg.in/yaml.v3
# howett.net/plist v1.0.0
## explicit; go 1.12
howett.net/plist
# k8s.io/klog/v2 v2.90.1
## explicit; go 1.13
k8s.io/klog/v2
k8s.io/klog/v2/internal/buffer
k8s.io/klog/v2/internal/clock
k8s.io/klog/v2/internal/dbg
k8s.io/klog/v2/internal/serialize
k8s.io/klog/v2/internal/severity
# k8s.io/mount-utils v0.23.0
## explicit; go 1.16
k8s.io/mount-utils
# k8s.io/utils v0.0.0-20230220204549-a5ecb0141aa5
## explicit; go 1.18
k8s.io/utils/exec
k8s.io/utils/io
k8s.io/utils/keymutex
# pault.ag/go/modprobe v0.1.2
## explicit; go 1.15
pault.ag/go/modprobe
# pault.ag/go/topsort v0.1.1
## explicit; go 1.16
pault.ag/go/topsort
07070100001070000041ED000000000000000000000003645E367C00000000000000000000000000000000000000000000002400000000elemental-cli-0.3.1/vendor/pault.ag   07070100001071000041ED000000000000000000000004645E367C00000000000000000000000000000000000000000000002700000000elemental-cli-0.3.1/vendor/pault.ag/go    07070100001072000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000003000000000elemental-cli-0.3.1/vendor/pault.ag/go/modprobe   07070100001073000081A4000000000000000000000001645E367C00000006000000000000000000000000000000000000003B00000000elemental-cli-0.3.1/vendor/pault.ag/go/modprobe/.gitignore    *.swp
  07070100001074000081A4000000000000000000000001645E367C0000043C000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/pault.ag/go/modprobe/LICENSE   Copyright (c) 2018, Paul R. Tagliamonte <paultag@gmail.com>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
07070100001075000081A4000000000000000000000001645E367C00000272000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/pault.ag/go/modprobe/README.md # go-modprobe

Load an unload Linux kernel modules using the Linux module syscalls.

This package is Linux specific. Loading a module uses the `finit` variant,
which allows loading of modules by a file descriptor, rather than having to
load an ELF into the process memory before loading.

The ability to load and unload modules is dependent on either the `CAP_SYS_MODULE`
capability, or running as root. Care should be taken to understand what security
implications this has on processes that use this library.

## Setting the capability on a binary using this package

```
$ sudo setcap cap_sys_module+ep /path/to/binary
```
  07070100001076000081A4000000000000000000000001645E367C00000869000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/pault.ag/go/modprobe/dep.go    package modprobe

import (
	"bufio"
	"os"
	"strings"

	"pault.ag/go/topsort"
)

// Dependencies takes a path to a .ko file, determine what modules will have to
// be present before loading that module, and return those modules as a slice
// of strings.
func Dependencies(path string) ([]string, error) {
	deps, err := loadDependencies()
	if err != nil {
		return nil, err
	}
	return deps.Load(path)
}

// simple container type that stores a mapping from an element to elements
// that it depends on.
type dependencies map[string][]string

// top level loading of the dependency tree. this will start a network
// walk the dep tree, load them into the network, and return a topological
// sort of the modules.
func (d dependencies) Load(name string) ([]string, error) {
	network := topsort.NewNetwork()
	if err := d.load(name, network); err != nil {
		return nil, err
	}

	order, err := network.Sort()
	if err != nil {
		return nil, err
	}

	ret := []string{}
	for _, node := range order {
		ret = append(ret, node.Name)
	}
	return ret, nil
}

// add a specific dependency to the network, and recurse on the leafs.
func (d dependencies) load(name string, network *topsort.Network) error {
	if network.Get(name) != nil {
		return nil
	}
	network.AddNode(name, nil)

	for _, dep := range d[name] {
		if err := d.load(dep, network); err != nil {
			return err
		}
		if err := network.AddEdge(dep, name); err != nil {
			return err
		}
	}

	return nil
}

// get a dependency map from the running kernel's modules.dep file
func loadDependencies() (dependencies, error) {
	path := modulePath("modules.dep")

	file, err := os.Open(path)
	if err != nil {
		return nil, err
	}
	defer file.Close()

	deps := map[string][]string{}

	scanner := bufio.NewScanner(file)
	for scanner.Scan() {
		chunks := strings.SplitN(scanner.Text(), ":", 2)
		depString := strings.TrimSpace(chunks[1])
		if len(depString) == 0 {
			continue
		}

		ret := []string{}
		for _, dep := range strings.Split(depString, " ") {
			ret = append(ret, modulePath(dep))
		}
		deps[modulePath(chunks[0])] = ret
	}

	if err := scanner.Err(); err != nil {
		return nil, err
	}

	return deps, nil
}
   07070100001077000081A4000000000000000000000001645E367C00000085000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/pault.ag/go/modprobe/docs.go   // Package modprobe allows users to load and unload Linux kernel modules by
// calling the relevent Linux syscalls.
package modprobe
   07070100001078000081A4000000000000000000000001645E367C00000B8E000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/pault.ag/go/modprobe/elf.go    package modprobe

import (
	"fmt"
	"os"
	"path/filepath"
	"strings"

	"debug/elf"

	"golang.org/x/sys/unix"
)

var (
	// get the root directory for the kernel modules. If this line panics,
	// it's because getModuleRoot has failed to get the uname of the running
	// kernel (likely a non-POSIX system, but maybe a broken kernel?)
	moduleRoot = getModuleRoot()
)

// Get the module root (/lib/modules/$(uname -r)/)
func getModuleRoot() string {
	uname := unix.Utsname{}
	if err := unix.Uname(&uname); err != nil {
		panic(err)
	}

	i := 0
	for ; uname.Release[i] != 0; i++ {
	}

	return filepath.Join(
		"/lib/modules",
		string(uname.Release[:i]),
	)
}

// Get a path relitive to the module root directory.
func modulePath(path string) string {
	return filepath.Join(moduleRoot, path)
}

// ResolveName will, given a module name (such as `g_ether`) return an absolute
// path to the .ko that provides that module.
func ResolveName(name string) (string, error) {
	paths, err := generateMap()
	if err != nil {
		return "", err
	}

	fsPath := paths[name]
	if !strings.HasPrefix(fsPath, moduleRoot) {
		return "", fmt.Errorf("Module isn't in the module directory")
	}

	return fsPath, nil
}

// Open every single kernel module under the kernel module directory
// (/lib/modules/$(uname -r)/), and parse the ELF headers to extract the
// module name.
func generateMap() (map[string]string, error) {
	return elfMap(moduleRoot)
}

// Open every single kernel module under the root, and parse the ELF headers to
// extract the module name.
func elfMap(root string) (map[string]string, error) {
	ret := map[string]string{}

	err := filepath.Walk(
		root,
		func(path string, info os.FileInfo, err error) error {
			if !info.Mode().IsRegular() {
				return nil
			}
			fd, err := os.Open(path)
			if err != nil {
				return err
			}
			defer fd.Close()
			name, err := Name(fd)
			if err != nil {
				/* For now, let's just ignore that and avoid adding to it */
				return nil
			}

			ret[name] = path
			return nil
		})

	if err != nil {
		return nil, err
	}

	return ret, nil
}

// Name will, given a file descriptor to a Kernel Module (.ko file), parse the
// binary to get the module name. For instance, given a handle to the file at
// `kernel/drivers/usb/gadget/legacy/g_ether.ko`, return `g_ether`.
func Name(file *os.File) (string, error) {
	f, err := elf.NewFile(file)
	if err != nil {
		return "", err
	}

	syms, err := f.Symbols()
	if err != nil {
		return "", err
	}

	for _, sym := range syms {
		if strings.Compare(sym.Name, "__this_module") == 0 {
			section := f.Sections[sym.Section]
			data, err := section.Data()
			if err != nil {
				return "", err
			}

			if len(data) < 25 {
				return "", fmt.Errorf("modprobe: data is short, __this_module is '%s'", data)
			}

			data = data[24:]
			i := 0
			for ; data[i] != 0x00; i++ {
			}
			return string(data[:i]), nil
		}
	}

	return "", fmt.Errorf("No name found. Is this a .ko or just an ELF?")
}
  07070100001079000081A4000000000000000000000001645E367C0000030F000000000000000000000000000000000000003800000000elemental-cli-0.3.1/vendor/pault.ag/go/modprobe/load.go   package modprobe

import (
	"os"

	"golang.org/x/sys/unix"
)

// Load will, given a short module name (such as `g_ether`), determine where
// the kernel module is located, determine any dependencies, and load all
// required modules.
func Load(module, params string) error {
	path, err := ResolveName(module)
	if err != nil {
		return err
	}

	order, err := Dependencies(path)
	if err != nil {
		return err
	}

	paramList := make([]string, len(order))
	paramList[len(order)-1] = params

	for i, module := range order {
		fd, err := os.Open(module)
		if err != nil {
			return err
		}
		/* not doing a defer since we're in a loop */
		param := paramList[i]
		if err := Init(fd, param); err != nil && err != unix.EEXIST {
			fd.Close()
			return err
		}
		fd.Close()
	}

	return nil
}
 0707010000107A000081A4000000000000000000000001645E367C0000054C000000000000000000000000000000000000003C00000000elemental-cli-0.3.1/vendor/pault.ag/go/modprobe/modprobe.go   package modprobe

import (
	"os"

	"golang.org/x/sys/unix"
)

// Init will use the provide .ko file's os.File (created with os.Open or
// similar), to load that kernel module into the running kernel. This may error
// out for a number of reasons, such as no permission (either setcap
// CAP_SYS_MODULE or run as root), the .ko being for the wrong kernel, or the
// file not being a module at all.
//
// Any arguments to the module may be passed through `params`, such as
// `file=/root/data/backing_file`.
func Init(file *os.File, params string) error {
	return unix.FinitModule(int(file.Fd()), params, 0)
}

// InitWithFlags will preform an Init, but allow the passing of flags to the
// syscall. The `flags` parameter is a bit mask value created by ORing together
// zero or more of the following flags:
//
//   MODULE_INIT_IGNORE_MODVERSIONS - Ignore symbol version hashes
//   MODULE_INIT_IGNORE_VERMAGIC - Ignore kernel version magic.
//
// Both flags are defined in the golang.org/x/sys/unix package.
func InitWithFlags(file *os.File, params string, flags int) error {
	return unix.FinitModule(int(file.Fd()), params, flags)
}

// Remove will unload a loaded kernel module. If no such module is loaded, or if
// the module can not be unloaded, this function will return an error.
func Remove(name string) error {
	return unix.DeleteModule(name, 0)
}
0707010000107B000041ED000000000000000000000002645E367C00000000000000000000000000000000000000000000002F00000000elemental-cli-0.3.1/vendor/pault.ag/go/topsort    0707010000107C000081A4000000000000000000000001645E367C0000043D000000000000000000000000000000000000003700000000elemental-cli-0.3.1/vendor/pault.ag/go/topsort/LICENSE    Copyright (c) Paul R. Tagliamonte <paultag@debian.org>, 2015

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
   0707010000107D000081A4000000000000000000000001645E367C0000036B000000000000000000000000000000000000003900000000elemental-cli-0.3.1/vendor/pault.ag/go/topsort/README.md  topsort
=======

This package provides a handy interface to do a topological sort of
some data in a pretty lightweight way.

Example
-------

```go
package main

import (
	"fmt"

	"pault.ag/go/topsort"
)

func main() {
	network := topsort.NewNetwork()

	network.AddNode("watch tv while eating", nil)
	network.AddNode("make dinner", nil)
	network.AddNode("clean my kitchen", nil)

	/* Right, so the order of operations is next */

	network.AddEdge("clean my kitchen", "make dinner")
	// I need to clean the kitchen before I make dinner.

	network.AddEdge("make dinner", "watch tv while eating")
	// Need to make dinner before I can eat it.

	nodes, err := network.Sort()
	if err != nil {
		panic(err)
	}

	for _, step := range nodes {
		fmt.Printf(" -> %s\n", step.Name)
	}
	/* Output is:
	 *
	 * -> clean my kitchen
	 * -> make dinner
	 * -> watch tv while eating
	 */
}
```
 0707010000107E000081A4000000000000000000000001645E367C00000F5B000000000000000000000000000000000000003A00000000elemental-cli-0.3.1/vendor/pault.ag/go/topsort/topsort.go /* {{{ Copyright (c) Paul R. Tagliamonte <paultag@gmail.com>, 2015
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE. }}} */

package topsort

import (
	"errors"
)

// Network Helpers {{{

type Network struct {
	nodes map[string]*Node
	order []string
}

func NewNetwork() *Network {
	return &Network{
		nodes: map[string]*Node{},
		order: []string{},
	}
}

func (tn *Network) Sort() ([]*Node, error) {
	nodes := make([]*Node, 0)
	for _, key := range tn.order {
		nodes = append(nodes, tn.nodes[key])
	}
	return sortNodes(nodes)
}

func (tn *Network) Get(name string) *Node {
	node, _ := tn.nodes[name]
	return node
}

func (tn *Network) AddNode(name string, value interface{}) *Node {
	node := Node{
		Name:          name,
		Value:         value,
		InboundEdges:  make([]*Node, 0),
		OutboundEdges: make([]*Node, 0),
		Marked:        false,
	}

	if _, ok := tn.nodes[name]; !ok {
		tn.order = append(tn.order, name)
	}
	tn.nodes[name] = &node
	return &node
}

// }}}

// Node Helpers {{{

type Node struct {
	Name          string
	Value         interface{}
	OutboundEdges []*Node
	InboundEdges  []*Node
	Marked        bool
}

func (node *Node) IsCanidate() bool {
	for _, edge := range node.InboundEdges {
		/* for each node, let's check if they're all marked */
		if !edge.Marked {
			return false
		}
	}
	return true
}

func (tn *Network) AddEdge(from string, to string) error {
	fromNode := tn.Get(from)
	toNode := tn.Get(to)

	if fromNode == nil || toNode == nil {
		return errors.New("Either the root or target node doesn't exist")
	}

	toNode.InboundEdges = append(toNode.InboundEdges, fromNode)
	fromNode.OutboundEdges = append(fromNode.OutboundEdges, toNode)

	return nil
}

func (tn *Network) AddEdgeAndNodes(from string, to string) error {
	fromNode := tn.Get(from)
	if fromNode == nil {
		fromNode = tn.AddNode(from, nil)
	}

	toNode := tn.Get(to)
	if toNode == nil {
		toNode = tn.AddNode(to, nil)
	}

	return tn.AddEdge(from, to)
}

// }}}

// Sort Helpers {{{

func sortSingleNodes(nodes []*Node) ([]*Node, error) {
	ret := make([]*Node, 0)
	hasUnprunedNodes := false

	for _, node := range nodes {
		if node.Marked {
			continue /* Already output. */
		}

		hasUnprunedNodes = true

		/* Otherwise, let's see if we can prune it */
		if node.IsCanidate() {
			/* So, it has no deps and hasn't been marked; let's mark and
			 * output */
			node.Marked = true
			ret = append(ret, node)
		}
	}

	if hasUnprunedNodes && len(ret) == 0 {
		return nil, errors.New("Cycle detected :(")
	}

	return ret, nil
}

func sortNodes(nodes []*Node) (ret []*Node, err error) {
	/* Reset Marked status of nodes so they're ready to sort */
	for _, node := range nodes {
		node.Marked = false
	}
	for {
		generation, err := sortSingleNodes(nodes)
		if err != nil {
			return nil, err
		}
		if len(generation) == 0 {
			break
		}
		ret = append(ret, generation...)
	}
	return
}

// }}}

// vim: foldmethod=marker
 07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000B00000000TRAILER!!!                60557 blocks
